ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1rbWVtdHJhY2UgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmE5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCkBAIC0wLDAgKzEsNzEgQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtdHJhY2UvCitEYXRlOgkJSnVseSAyMDA4CitDb250YWN0OglFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51IDxlZHVhcmQubXVudGVhbnVAbGludXgzNjAucm8+CitEZXNjcmlwdGlvbjoKKworSW4ga21lbXRyYWNlLWVuYWJsZWQga2VybmVscywgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgY3JlYXRlZDoKKworL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlLworCWNwdTxuPgkJKDA0MDApCVBlci1DUFUgdHJhY2luZyBkYXRhLCBzZWUgYmVsb3cuIChiaW5hcnkpCisJdG90YWxfb3ZlcnJ1bnMJKDA0MDApCVRvdGFsIG51bWJlciBvZiBieXRlcyB3aGljaCB3ZXJlIGRyb3BwZWQgZnJvbQorCQkJCWNwdTxuPiBmaWxlcyBiZWNhdXNlIG9mIGZ1bGwgYnVmZmVyIGNvbmRpdGlvbiwKKwkJCQlub24tYmluYXJ5LiAodGV4dCkKKwlhYmlfdmVyc2lvbgkoMDQwMCkJS2VybmVsJ3Mga21lbXRyYWNlIEFCSSB2ZXJzaW9uLiAodGV4dCkKKworRWFjaCBwZXItQ1BVIGZpbGUgc2hvdWxkIGJlIHJlYWQgYWNjb3JkaW5nIHRvIHRoZSByZWxheSBpbnRlcmZhY2UuIFRoYXQgaXMsCit0aGUgcmVhZGVyIHNob3VsZCBzZXQgYWZmaW5pdHkgdG8gdGhhdCBzcGVjaWZpYyBDUFUgYW5kLCBhcyBjdXJyZW50bHkgZG9uZSBieQordGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiAodGhvdWdoIHRoZXJlIGFyZSBvdGhlciBtZXRob2RzKSwgdXNlIHBvbGwoKSB3aXRoCithbiBpbmZpbml0ZSB0aW1lb3V0IGJlZm9yZSBldmVyeSByZWFkKCkuIE90aGVyd2lzZSwgZXJyb25lb3VzIGRhdGEgbWF5IGJlCityZWFkLiBUaGUgYmluYXJ5IGRhdGEgaGFzIHRoZSBmb2xsb3dpbmcgX2NvcmVfIGZvcm1hdDoKKworCUV2ZW50IElECSgxIGJ5dGUpCVVuc2lnbmVkIGludGVnZXIsIG9uZSBvZjoKKwkJMCAtIHJlcHJlc2VudHMgYW4gYWxsb2NhdGlvbiAoS01FTVRSQUNFX0VWRU5UX0FMTE9DKQorCQkxIC0gcmVwcmVzZW50cyBhIGZyZWVpbmcgb2YgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5CisJCSAgICAoS01FTVRSQUNFX0VWRU5UX0ZSRUUpCisJVHlwZSBJRAkJKDEgYnl0ZSkJVW5zaWduZWQgaW50ZWdlciwgb25lIG9mOgorCQkwIC0gdGhpcyBpcyBhIGttYWxsb2MoKSAvIGtmcmVlKCkKKwkJMSAtIHRoaXMgaXMgYSBrbWVtX2NhY2hlX2FsbG9jKCkgLyBrbWVtX2NhY2hlX2ZyZWUoKQorCQkyIC0gdGhpcyBpcyBhIF9fZ2V0X2ZyZWVfcGFnZXMoKSBldCBhbC4KKwlFdmVudCBzaXplCSgyIGJ5dGVzKQlVbnNpZ25lZCBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUKKwkJCQkJc2l6ZSBvZiB0aGlzIGV2ZW50LiBVc2VkIHRvIGV4dGVuZAorCQkJCQlrbWVtdHJhY2UuIERpc2NhcmQgdGhlIGJ5dGVzIHlvdQorCQkJCQlkb24ndCBrbm93IGFib3V0LgorCVNlcXVlbmNlIG51bWJlcgkoNCBieXRlcykJU2lnbmVkIGludGVnZXIgdXNlZCB0byByZW9yZGVyIGRhdGEKKwkJCQkJbG9nZ2VkIG9uIFNNUCBtYWNoaW5lcy4gV3JhcGFyb3VuZAorCQkJCQltdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCwgYWx0aG91Z2gKKwkJCQkJaXQgaXMgdW5saWtlbHkuCisJQ2FsbGVyIGFkZHJlc3MJKDggYnl0ZXMpCVJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsZXIuCisJUG9pbnRlciB0byBtZW0JKDggYnl0ZXMpCVBvaW50ZXIgdG8gdGFyZ2V0IG1lbW9yeSBhcmVhLiBDYW4gYmUKKwkJCQkJTlVMTCwgYnV0IG5vdCBhbGwgc3VjaCBjYWxscyBtaWdodCBiZQorCQkJCQlyZWNvcmRlZC4KKworSW4gY2FzZSBvZiBLTUVNVFJBQ0VfRVZFTlRfQUxMT0MgZXZlbnRzLCB0aGUgbmV4dCBmaWVsZHMgZm9sbG93OgorCisJUmVxdWVzdGVkIGJ5dGVzCSg4IGJ5dGVzKQlUb3RhbCBudW1iZXIgb2YgcmVxdWVzdGVkIGJ5dGVzLAorCQkJCQl1bnNpZ25lZCwgbXVzdCBub3QgYmUgemVyby4KKwlBbGxvY2F0ZWQgYnl0ZXMgKDggYnl0ZXMpCVRvdGFsIG51bWJlciBvZiBhY3R1YWxseSBhbGxvY2F0ZWQKKwkJCQkJYnl0ZXMsIHVuc2lnbmVkLCBtdXN0IG5vdCBiZSBsb3dlcgorCQkJCQl0aGFuIHJlcXVlc3RlZCBieXRlcy4KKwlSZXF1ZXN0ZWQgZmxhZ3MJKDQgYnl0ZXMpCUdGUCBmbGFncyBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgorCVRhcmdldCBDUFUJKDQgYnl0ZXMpCVNpZ25lZCBpbnRlZ2VyLCB2YWxpZCBmb3IgZXZlbnQgaWQgMS4KKwkJCQkJSWYgZXF1YWwgdG8gLTEsIHRhcmdldCBDUFUgaXMgdGhlIHNhbWUKKwkJCQkJYXMgb3JpZ2luIENQVSwgYnV0IHRoZSByZXZlcnNlIG1pZ2h0CisJCQkJCW5vdCBiZSB0cnVlLgorCitUaGUgZGF0YSBpcyBtYWRlIGF2YWlsYWJsZSBpbiB0aGUgc2FtZSBlbmRpYW5uZXNzIHRoZSBtYWNoaW5lIGhhcy4KKworT3RoZXIgZXZlbnQgaWRzIGFuZCB0eXBlIGlkcyBtYXkgYmUgZGVmaW5lZCBhbmQgYWRkZWQuIE90aGVyIGZpZWxkcyBtYXkgYmUKK2FkZGVkIGJ5IGluY3JlYXNpbmcgZXZlbnQgc2l6ZSwgYnV0IHNlZSBiZWxvdyBmb3IgZGV0YWlscy4KK0V2ZXJ5IG1vZGlmaWNhdGlvbiB0byB0aGUgQUJJLCBpbmNsdWRpbmcgbmV3IGlkIGRlZmluaXRpb25zLCBhcmUgZm9sbG93ZWQKK2J5IGJ1bXBpbmcgdGhlIEFCSSB2ZXJzaW9uIGJ5IG9uZS4KKworQWRkaW5nIG5ldyBkYXRhIHRvIHRoZSBwYWNrZXQgKGZlYXR1cmVzKSBpcyBkb25lIGF0IHRoZSBlbmQgb2YgdGhlIG1hbmRhdG9yeQorZGF0YToKKwlGZWF0dXJlIHNpemUJKDIgYnl0ZSkKKwlGZWF0dXJlIElECSgxIGJ5dGUpCisJRmVhdHVyZSBkYXRhCShGZWF0dXJlIHNpemUgLSAzIGJ5dGVzKQorCisKK1VzZXJzOgorCWttZW10cmFjZS11c2VyIC0gZ2l0Oi8vcmVwby5vci5jei9rbWVtdHJhY2UtdXNlci5naXQKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9kZXNpZ25fbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9kZXNpZ25fbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNmRiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL2Rlc2lnbl9ub3Rlcy50eHQKQEAgLTAsMCArMSw3MCBAQAorUE9ITUVMRlM6IFBhcmFsbGVsIE9wdGltaXplZCBIb3N0IE1lc3NhZ2UgRXhjaGFuZ2UgTGF5ZXJlZCBGaWxlIFN5c3RlbS4KKworCQlFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisKK0hvbWVwYWdlOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L3Byb2plY3RzL3BvaG1lbGZzCisKK1BPSE1FTEZTIGZpcnN0IGJlZ2FuIGFzIGEgbmV0d29yayBmaWxlc3lzdGVtIHdpdGggY29oZXJlbnQgbG9jYWwgZGF0YSBhbmQKK21ldGFkYXRhIGNhY2hlcyBidXQgaXMgbm93IGV2b2x2aW5nIGludG8gYSBwYXJhbGxlbCBkaXN0cmlidXRlZCBmaWxlc3lzdGVtLgorCitNYWluIGZlYXR1cmVzIG9mIHRoaXMgRlMgaW5jbHVkZToKKyAqIExvY2FsbHkgY29oZXJlbnQgY2FjaGUgZm9yIGRhdGEgYW5kIG1ldGFkYXRhIHdpdGggKHBvdGVudGlhbGx5KSBieXRlLXJhbmdlIGxvY2tzLgorCVNpbmNlIGFsbCBMaW51eCBmaWxlc3lzdGVtcyBsb2NrIHRoZSB3aG9sZSBpbm9kZSBkdXJpbmcgd3JpdGluZywgYWxnb3JpdGhtCisJaXMgdmVyeSBzaW1wbGUgYW5kIGRvZXMgbm90IHVzZSBieXRlLXJhbmdlcywgYWx0aG91Z2ggdGhleSBhcmUgc2VudCBpbgorCWxvY2tpbmcgbWVzc2FnZXMuCisgKiBDb21wbGV0ZWx5IGFzeW5jIHByb2Nlc3Npbmcgb2YgYWxsIGV2ZW50cyBleGNlcHQgY3JlYXRpb24gb2YgaGFyZCBhbmQgc3ltYm9saWMKKwlsaW5rcywgYW5kIHJlbmFtZSBldmVudHMuCisJT2JqZWN0IGNyZWF0aW9uIGFuZCBkYXRhIHJlYWRpbmcgYW5kIHdyaXRpbmcgYXJlIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KKyAqIEZsZXhpYmxlIG9iamVjdCBhcmNoaXRlY3R1cmUgb3B0aW1pemVkIGZvciBuZXR3b3JrIHByb2Nlc3NpbmcuCisJQWJpbGl0eSB0byBjcmVhdGUgbG9uZyBwYXRocyB0byBvYmplY3RzIGFuZCByZW1vdmUgYXJiaXRyYXJpbHkgaHVnZQorCWRpcmVjdG9yaWVzIHdpdGggYSBzaW5nbGUgbmV0d29yayBjb21tYW5kLgorCShsaWtlIHJlbW92aW5nIHRoZSB3aG9sZSBrZXJuZWwgdHJlZSB2aWEgYSBzaW5nbGUgbmV0d29yayBjb21tYW5kKS4KKyAqIFZlcnkgaGlnaCBwZXJmb3JtYW5jZS4KKyAqIEZhc3QgYW5kIHNjYWxhYmxlIG11bHRpdGhyZWFkZWQgdXNlcnNwYWNlIHNlcnZlci4gQmVpbmcgaW4gdXNlcnNwYWNlIGl0IHdvcmtzCisJd2l0aCBhbnkgdW5kZXJseWluZyBmaWxlc3lzdGVtIGFuZCBzdGlsbCBpcyBtdWNoIGZhc3RlciB0aGFuIGFzeW5jIGluLWtlcm5lbCBORlMgb25lLgorICogQ2xpZW50IGlzIGFibGUgdG8gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IHNlcnZlcnMgKGlmIG9uZSBnb2VzIGRvd24sIGNsaWVudAorCWF1dG9tYXRpY2FsbHkgcmVjb25uZWN0cyB0byBzZWNvbmQgYW5kIHNvIG9uKS4KKyAqIFRyYW5zYWN0aW9ucyBzdXBwb3J0LiBGdWxsIGZhaWxvdmVyIGZvciBhbGwgb3BlcmF0aW9ucy4KKwlSZXNlbmRpbmcgdHJhbnNhY3Rpb25zIHRvIGRpZmZlcmVudCBzZXJ2ZXJzIG9uIHRpbWVvdXQgb3IgZXJyb3IuCisgKiBSZWFkIHJlcXVlc3QgKGRhdGEgcmVhZCwgZGlyZWN0b3J5IGxpc3RpbmcsIGxvb2t1cCByZXF1ZXN0cykgYmFsYW5jaW5nIGJldHdlZW4gbXVsdGlwbGUgc2VydmVycy4KKyAqIFdyaXRlIHJlcXVlc3RzIGFyZSByZXBsaWNhdGVkIHRvIG11bHRpcGxlIHNlcnZlcnMgYW5kIGNvbXBsZXRlZCBvbmx5IHdoZW4gYWxsIG9mIHRoZW0gYXJlIGFja2VkLgorICogQWJpbGl0eSB0byBhZGQgYW5kL29yIHJlbW92ZSBzZXJ2ZXJzIGZyb20gdGhlIHdvcmtpbmcgc2V0IGF0IHJ1bi10aW1lLgorICogU3Ryb25nIGF1dGhlbnRpZmljYXRpb24gYW5kIHBvc3NpYmxlIGRhdGEgZW5jcnlwdGlvbiBpbiBuZXR3b3JrIGNoYW5uZWwuCisgKiBFeHRlbmRlZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCisKK1BPSE1FTEZTIGlzIGJhc2VkIG9uIHRyYW5zYWN0aW9ucywgd2hpY2ggYXJlIHBvdGVudGlhbGx5IGxvbmctc3RhbmRpbmcgb2JqZWN0cyB0aGF0IGxpdmUKK2luIHRoZSBjbGllbnQncyBtZW1vcnkuIEVhY2ggdHJhbnNhY3Rpb24gY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcHJvY2VzcyBhIGdpdmVuCitjb21tYW5kIChvciBzZXQgb2YgY29tbWFuZHMsIHdoaWNoIGlzIGZyZXF1ZW50bHkgdXNlZCBkdXJpbmcgZGF0YSB3cml0aW5nOiBzaW5nbGUgdHJhbnNhY3Rpb25zCitjYW4gY29udGFpbiBjcmVhdGlvbiBhbmQgZGF0YSB3cml0aW5nIGNvbW1hbmRzKS4gVHJhbnNhY3Rpb25zIGFyZSBjb21taXR0ZWQgYnkgYWxsIHRoZSBzZXJ2ZXJzCit0byB3aGljaCB0aGV5IGFyZSBzZW50IGFuZCwgaW4gY2FzZSBvZiBmYWlsdXJlcywgYXJlIGV2ZW50dWFsbHkgcmVzZW50IG9yIGRyb3BwZWQgd2l0aCBhbiBlcnJvci4KK0ZvciBleGFtcGxlLCByZWFkaW5nIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIG5vIHNlcnZlcnMgYXJlIGF2YWlsYWJsZS4KKworUE9ITUVMRlMgdXNlcyBhIGFzeW5jaHJvbm91cyBhcHByb2FjaCB0byBkYXRhIHByb2Nlc3NpbmcuIENvdXJ0ZXN5IG9mIHRyYW5zYWN0aW9ucywgaXQgaXMKK3Bvc3NpYmxlIHRvIGRldGFjaCByZXBsaWVzIGZyb20gcmVxdWVzdHMgYW5kLCBpZiB0aGUgY29tbWFuZCByZXF1aXJlcyBkYXRhIHRvIGJlIHJlY2VpdmVkLCB0aGUKK2NhbGxlciBzbGVlcHMgd2FpdGluZyBmb3IgaXQuIFRodXMsIGl0IGlzIHBvc3NpYmxlIHRvIGlzc3VlIG11bHRpcGxlIHJlYWQgY29tbWFuZHMgdG8gZGlmZmVyZW50CitzZXJ2ZXJzIGFuZCBhc3luYyB0aHJlYWRzIHdpbGwgcGljayB1cCByZXBsaWVzIGluIHBhcmFsbGVsLCBmaW5kIGFwcHJvcHJpYXRlIHRyYW5zYWN0aW9ucyBpbiB0aGUKK3N5c3RlbSBhbmQgcHV0IHRoZSBkYXRhIHdoZXJlIGl0IGJlbG9uZ3MgKGxpa2UgdGhlIHBhZ2Ugb3IgaW5vZGUgY2FjaGUpLgorCitUaGUgbWFpbiBmZWF0dXJlIG9mIFBPSE1FTEZTIGlzIHdyaXRlYmFjayBkYXRhIGFuZCB0aGUgbWV0YWRhdGEgY2FjaGUuCitPbmx5IGEgZmV3IG5vbi1wZXJmb3JtYW5jZSBjcml0aWNhbCBvcGVyYXRpb25zIHVzZSB0aGUgd3JpdGUtdGhyb3VnaCBjYWNoZSBhbmQKK2FyZSBzeW5jaHJvbm91czogaGFyZCBhbmQgc3ltYm9saWMgbGluayBjcmVhdGlvbiwgYW5kIG9iamVjdCByZW5hbWUuIENyZWF0aW9uLAorcmVtb3ZhbCBvZiBvYmplY3RzIGFuZCBkYXRhIHdyaXRpbmcgYXJlIGFzeW5jaHJvbm91cyBhbmQgYXJlIHNlbnQgdG8KK3RoZSBzZXJ2ZXIgZHVyaW5nIHN5c3RlbSB3cml0ZWJhY2suIE9ubHkgb25lIHdyaXRlciBhdCBhIHRpbWUgaXMgYWxsb3dlZCBmb3IgYW55CitnaXZlbiBpbm9kZSwgd2hpY2ggaXMgZ3VhcmRlZCBieSBhbiBhcHByb3ByaWF0ZSBsb2NraW5nIHByb3RvY29sLgorQmVjYXVzZSBvZiB0aGlzIGZlYXR1cmUsIFBPSE1FTEZTIGlzIGV4dHJlbWVseSBmYXN0IGF0IG1ldGFkYXRhIGludGVuc2l2ZQord29ya2xvYWRzIGFuZCBjYW4gZnVsbHkgdXRpbGl6ZSB0aGUgYmFuZHdpZHRoIHRvIHRoZSBzZXJ2ZXJzIHdoZW4gZG9pbmcgYnVsaworZGF0YSB0cmFuc2ZlcnMuCisKK1BPSE1FTEZTIGNsaWVudHMgb3BlcmF0ZSB3aXRoIGEgd29ya2luZyBzZXQgb2Ygc2VydmVycyBhbmQgYXJlIGNhcGFibGUgb2YgYmFsYW5jaW5nIHJlYWQtb25seQorb3BlcmF0aW9ucyAobGlrZSBsb29rdXBzIG9yIGRpcmVjdG9yeSBsaXN0aW5ncykgYmV0d2VlbiB0aGVtLgorQWRtaW5pc3RyYXRvcnMgY2FuIGFkZCBvciByZW1vdmUgc2VydmVycyBmcm9tIHRoZSBzZXQgYXQgcnVuLXRpbWUgdmlhIHNwZWNpYWwgY29tbWFuZHMgKGRlc2NyaWJlZAoraW4gRG9jdW1lbnRhdGlvbi9wb2htZWxmcy9pbmZvLnR4dCBmaWxlKS4gV3JpdGVzIGFyZSByZXBsaWNhdGVkIHRvIGFsbCBzZXJ2ZXJzLgorCitQT0hNRUxGUyBpcyBjYXBhYmxlIG9mIGZ1bGwgZGF0YSBjaGFubmVsIGVuY3J5cHRpb24gYW5kL29yIHN0cm9uZyBjcnlwdG8gaGFzaGluZy4KK09uZSBjYW4gc2VsZWN0IGFueSBrZXJuZWwgc3VwcG9ydGVkIGNpcGhlciwgZW5jcnlwdGlvbiBtb2RlLCBoYXNoIHR5cGUgYW5kIG9wZXJhdGlvbiBtb2RlCisoaG1hYyBvciBkaWdlc3QpLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBib3RoIG9yIG5laXRoZXIgKGRlZmF1bHQpLiBDcnlwdG8gY29uZmlndXJhdGlvbgoraXMgY2hlY2tlZCBkdXJpbmcgbW91bnQgdGltZSBhbmQsIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpdCwgYXBwcm9wcmlhdGUgY2FwYWJpbGl0aWVzCit3aWxsIGJlIGRpc2FibGVkIG9yIG1vdW50IHdpbGwgZmFpbCAoaWYgJ2NyeXB0b19mYWlsX3Vuc3VwcG9ydGVkJyBtb3VudCBvcHRpb24gaXMgc3BlY2lmaWVkKS4KK0NyeXB0byBwZXJmb3JtYW5jZSBoZWF2aWx5IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBjcnlwdG8gdGhyZWFkcywgd2hpY2ggYXN5bmNocm9ub3VzbHkgcGVyZm9ybQorY3J5cHRvIG9wZXJhdGlvbnMgYW5kIHNlbmQgdGhlIHJlc3VsdGluZyBkYXRhIHRvIHNlcnZlciBvciBzdWJtaXQgaXQgdXAgdGhlIHN0YWNrLiBUaGlzIG51bWJlcgorY2FuIGJlIGNvbnRyb2xsZWQgdmlhIGEgbW91bnQgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9pbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzZDUwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvaW5mby50eHQKQEAgLTAsMCArMSw4NiBAQAorUE9ITUVMRlMgdXNhZ2UgaW5mb3JtYXRpb24uCisKK01vdW50IG9wdGlvbnM6CitpZHg9JXUKKyBFYWNoIG1vdW50cG9pbnQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lhbCBpbmRleCB2aWEgdGhpcyBvcHRpb24uCisgQWRtaW5pc3RyYXRvciBjYW4gYWRkIG9yIHJlbW92ZSBzZXJ2ZXJzIGZyb20gdGhlIGdpdmVuIGluZGV4LCBzbyBhbGwgbW91bnRzLAorIHdoaWNoIHdlcmUgYXR0YWNoZWQgdG8gaXQsIGFyZSB1cGRhdGVkLgorIERlZmF1bHQgaXQgaXMgMC4KKwordHJhbnNfc2Nhbl90aW1lb3V0PSV1CisgVGhpcyB0aW1lb3V0LCBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLCBzcGVjaWZpZXMgdGltZSB0byBzY2FuIHRyYW5zYWN0aW9uCisgdHJlZXMgbG9va2luZyBmb3Igc3RhbGUgcmVxdWVzdHMsIHdoaWNoIGhhdmUgdG8gYmUgcmVzZW50LCBvciBpZiBudW1iZXIgb2YKKyByZXRyaWVzIGV4Y2VlZCBzcGVjaWZpZWQgbGltaXQsIGRyb3BwZWQgd2l0aCBlcnJvci4KKyBEZWZhdWx0IGlzIDUgc2Vjb25kcy4KKworZHJvcF9zY2FuX3RpbWVvdXQ9JXUKKyBJbnRlcm5hbCB0aW1lb3V0LCBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLCB3aGljaCBzcGVjaWZpZXMgaG93IGZyZXF1ZW50bHkKKyBpbm9kZXMgbWFya2VkIHRvIGJlIGRyb3BwZWQgYXJlIGZyZWVkLiBJdCBhbHNvIHNwZWNpZmllcyBob3cgZnJlcXVlbnRseQorIHRoZSBzeXN0ZW0gY2hlY2tzIHRoYXQgc2VydmVycyBoYXZlIHRvIGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBjdXJyZW50IHdvcmtpbmcgc2V0LgorIERlZmF1bHQgaXMgMSBzZWNvbmQuCisKK3dhaXRfb25fcGFnZV90aW1lb3V0PSV1CisgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciByZXBseSBmcm9tIHJlbW90ZSBzZXJ2ZXIgZm9yIGRhdGEgcmVhZGluZyBjb21tYW5kLgorIElmIHRoaXMgdGltZW91dCBpcyBleGNlZWRlZCwgcmVhZGluZyByZXR1cm5zIGFuIGVycm9yLgorIERlZmF1bHQgaXMgNSBzZWNvbmRzLgorCit0cmFuc19yZXRyaWVzPSV1CisgVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYSB0cmFuc2FjdGlvbiB3aWxsIGJlIHJlc2VudCB0byBhIHNlcnZlciB0aGF0IGRpZAorIG5vdCBhbnN3ZXIgZm9yIHRoZSBsYXN0IEB0cmFuc19zY2FuX3RpbWVvdXQgbWlsbGlzZWNvbmRzLgorIFdoZW4gdGhlIG51bWJlciBvZiByZXNlbmRzIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCB3aXRoIGVycm9yLgorIERlZmF1bHQgaXMgNSByZXNlbmRzLgorCitjcnlwdG9fdGhyZWFkX251bT0ldQorIE51bWJlciBvZiBjcnlwdG8gcHJvY2Vzc2luZyB0aHJlYWRzLiBUaHJlYWRzIGFyZSB1c2VkIGJvdGggZm9yIFJYIGFuZCBUWCB0cmFmZmljLgorIERlZmF1bHQgaXMgMiwgb3Igbm8gdGhyZWFkcyBpZiBjcnlwdG8gb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4KKwordHJhbnNfbWF4X3BhZ2VzPSV1CisgTWF4aW11bSBudW1iZXIgb2YgcGFnZXMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRoaXMgcGFyYW1ldGVyIGFsc28gY29udHJvbHMKKyB0aGUgbnVtYmVyIG9mIHBhZ2VzLCAgYWxsb2NhdGVkIGZvciBjcnlwdG8gcHJvY2Vzc2luZyAoZWFjaCBjcnlwdG8gdGhyZWFkIGhhcworIHBvb2wgb2YgcGFnZXMsIHRoZSBudW1iZXIgb2Ygd2hpY2ggaXMgZXF1YWwgdG8gJ3RyYW5zX21heF9wYWdlcycuCisgRGVmYXVsdCBpcyAxMDAgcGFnZXMuCisKK2NyeXB0b19mYWlsX3Vuc3VwcG9ydGVkCisgSWYgc3BlY2lmaWVkLCBtb3VudCB3aWxsIGZhaWwgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHJlcXVlc3RlZCBjcnlwdG8gb3BlcmF0aW9ucy4KKyBCeSBkZWZhdWx0IG1vdW50IHdpbGwgZGlzYWJsZSBub24tbWF0Y2hpbmcgY3J5cHRvIG9wZXJhdGlvbnMuCisKK21jYWNoZV90aW1lb3V0PSV1CisgTWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBtY2FjaGUgb2JqZWN0cyB0byBiZSBwcm9jZXNzZWQuCisgTWNhY2hlIGluY2x1ZGVzIGxvY2tzIChnaXZlbiBsb2NrIHNob3VsZCBiZSBncmFudGVkIGJ5IHNlcnZlciksIGF0dHJpYnV0ZXMgKHRoZXkgc2hvdWxkIGJlCisgZnVsbHkgcmVjZWl2ZWQgaW4gdGhlIGdpdmVuIHRpbWVmcmFtZSkuCisgRGVmYXVsdCBpcyA1IHNlY29uZHMuCisKK1VzYWdlIGV4YW1wbGVzLgorCitBZGQgKG9yIHJlbW92ZSBpZiBpdCBhbHJlYWR5IGV4aXN0cykgc2VydmVyIHNlcnZlcjEubmV0OjEwMjUgaW50byB0aGUgd29ya2luZyBzZXQgd2l0aCBpbmRleCAkaWR4Cit3aXRoIGFwcHJvcHJpYXRlIGhhc2ggYWxnb3JpdGhtIGFuZCBrZXkgZmlsZSBhbmQgY2lwaGVyIGFsZ29yaXRobSwgbW9kZSBhbmQga2V5IGZpbGU6CiskY2ZnIC1hIHNlcnZlcjEubmV0IC1wIDEwMjUgLWkgJGlkeCAtSyAkaGFzaF9rZXkgLWsgJGNpcGhlcl9rZXkKKworTW91bnQgZmlsZXN5c3RlbSB3aXRoIGdpdmVuIGluZGV4ICRpZHggdG8gL21udCBtb3VudHBvaW50LgorQ2xpZW50IHdpbGwgY29ubmVjdCB0byBhbGwgc2VydmVycyBzcGVjaWZpZWQgaW4gdGhlIHdvcmtpbmcgc2V0IHZpYSBwcmV2aW91cyBjb21tYW5kOgorbW91bnQgLXQgcG9obWVsIC1vIGlkeD0kaWR4IHEgL21udAorCitPbmUgY2FuIGFkZCBvciByZW1vdmUgc2VydmVycyBmcm9tIHdvcmtpbmcgc2V0IGFmdGVyIG1vdW50aW5nIHRvby4KKworCitTZXJ2ZXIgaW5zdGFsbGF0aW9uLgorCitDcmVhdGluZyBhIHNlcnZlciwgd2hpY2ggbGlzdGVucyBhdCBwb3J0IDEwMjUgYW5kIDAuMC4wLjAgYWRkcmVzcy4KK1dvcmtpbmcgcm9vdCBkaXJlY3RvcnkgKG5vdGUsIHRoYXQgc2VydmVyIGNocm9vdHMgdGhlcmUsIHNvIHlvdSBoYXZlIHRvIGhhdmUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMpCitpcyBzZXQgdG8gL21udCwgc2VydmVyIHdpbGwgbmVnb3RpYXRlIGhhc2gvY2lwaGVyIHdpdGggY2xpZW50LCBpbiBjYXNlIGNsaWVudCByZXF1ZXN0ZWQgaXQsIHRoZXJlCithcmUgYXBwcm9wcmlhdGUga2V5IGZpbGVzLgorTnVtYmVyIG9mIHdvcmtpbmcgdGhyZWFkcyBpcyBzZXQgdG8gMTAuCisKKyMgLi9mc2VydmVyIC1hIDAuMC4wLjAgLXAgMTAyNSAtciAvbW50IC13IDEwIC1LIGhhc2hfa2V5IC1rIGNpcGhlcl9rZXkKKworIC1BIDYJCQkgLSBsaXN0ZW4gb24gaXB2NiBhZGRyZXNzLiBEZWZhdWx0OiBEaXNhYmxlZC4KKyAtciByb290ICAgICAgICAgICAgICAgICAtIHBhdGggdG8gcm9vdCBkaXJlY3RvcnkuIERlZmF1bHQ6IC90bXAuCisgLWEgYWRkciAgICAgICAgICAgICAgICAgLSBsaXN0ZW4gYWRkcmVzcy4gRGVmYXVsdDogMC4wLjAuMC4KKyAtcCBwb3J0ICAgICAgICAgICAgICAgICAtIGxpc3RlbiBwb3J0LiBEZWZhdWx0OiAxMDI1LgorIC13IHdvcmtlcnMgICAgICAgICAgICAgIC0gbnVtYmVyIG9mIHdvcmtlcnMgcGVyIGNvbm5lY3RlZCBjbGllbnQuIERlZmF1bHQ6IDEuCisgLUsgZmlsZQkJIC0gaGFzaCBrZXkgc2l6ZS4gRGVmYXVsdDogbm9uZS4KKyAtayBmaWxlCQkgLSBjaXBoZXIga2V5IHNpemUuIERlZmF1bHQ6IG5vbmUuCisgLWggICAgICAgICAgICAgICAgICAgICAgLSB0aGlzIGhlbHAuCisKK051bWJlciBvZiB3b3JrZXIgdGhyZWFkcyBzcGVjaWZpZXMgaG93IG1hbnkgd29ya2VycyB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggY2xpZW50LgorQnVsayBzaW5nbGUtY2xpZW50IHRyYW5zYWZlcnMgdXN1YWxseSBhcmUgYmV0dGVyIGhhbmRsZWQgd2l0aCBzbWFsbGVyIG51bWJlciAobGlrZSAxLTMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9uZXR3b3JrX3Byb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvbmV0d29ya19wcm90b2NvbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlYTZjMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvbmV0d29ya19wcm90b2NvbC50eHQKQEAgLTAsMCArMSwyMjcgQEAKK1BPSE1FTEZTIG5ldHdvcmsgcHJvdG9jb2wuCisKK0Jhc2ljIHN0cnVjdHVyZSB1c2VkIGluIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBpcyBmb2xsb3dpbmcgY29tbWFuZDoKKworc3RydWN0IG5ldGZzX2NtZAoreworCV9fdTE2CQkJY21kOwkvKiBDb21tYW5kIG51bWJlciAqLworCV9fdTE2CQkJY3NpemU7CS8qIEF0dGFjaGVkIGNyeXB0byBpbmZvcm1hdGlvbiBzaXplICovCisJX191MTYJCQljcGFkOwkvKiBBdHRhY2hlZCBwYWRkaW5nIHNpemUgKi8KKwlfX3UxNgkJCWV4dDsJLyogRXh0ZXJuYWwgZmxhZ3MgKi8KKwlfX3UzMgkJCXNpemU7CS8qIFNpemUgb2YgdGhlIGF0dGFjaGVkIGRhdGEgKi8KKwlfX3UzMgkJCXRyYW5zOwkvKiBUcmFuc2FjdGlvbiBpZCAqLworCV9fdTY0CQkJaWQ7CS8qIE9iamVjdCBJRCB0byBvcGVyYXRlIG9uLiBVc2VkIGZvciBmZWVkYmFjay4qLworCV9fdTY0CQkJc3RhcnQ7CS8qIFN0YXJ0IG9mIHRoZSBvYmplY3QuICovCisJX191NjQJCQlpdjsJLyogSVYgc2VxdWVuY2UgKi8KKwlfX3U4CQkJZGF0YVswXTsKK307CisKK0NvbW1hbmRzIGNhbiBiZSBlbWJlZGRlZCBpbnRvIHRyYW5zYWN0aW9uIGNvbW1hbmQgKHdoaWNoIGluIHR1cm4gaGFzIG93biBjb21tYW5kKSwKK3NvIG9uZSBjYW4gZXh0ZW5kIHByb3RvY29sIGFzIG5lZWRlZCB3aXRob3V0IGJyZWFraW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgbG9uZworYXMgb2xkIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuIEFsbCBzdHJpbmcgbGVuZ3RocyBpbmNsdWRlIHRhaWwgMCBieXRlLgorCitBbGwgY29tbWFucyBhcmUgdHJhbnNmZXJlZCBvdmVyIHRoZSBuZXR3b3JrIGluIGJpZy1lbmRpYW4uIENQVSBlbmRpYW5lc3MgaXMgdXNlZCBhdCB0aGUgZW5kIHBlZXJzLgorCitAY21kIC0gY29tbWFuZCBudW1iZXIsIHdoaWNoIHNwZWNpZmllcyBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZC4gRm9sbG93aW5nCisJY29tbWFuZHMgYXJlIHVzZWQgY3VycmVudGx5OgorCisJTkVURlNfUkVBRERJUgk9IDEsCS8qIFJlYWQgZGlyZWN0b3J5IGZvciBnaXZlbiBpbm9kZSBudW1iZXIgKi8KKwlORVRGU19SRUFEX1BBR0UsCS8qIFJlYWQgZGF0YSBwYWdlIGZyb20gdGhlIHNlcnZlciAqLworCU5FVEZTX1dSSVRFX1BBR0UsCS8qIFdyaXRlIGRhdGEgcGFnZSB0byB0aGUgc2VydmVyICovCisJTkVURlNfQ1JFQVRFLAkJLyogQ3JlYXRlIGRpcmVjdG9yeSBlbnRyeSAqLworCU5FVEZTX1JFTU9WRSwJCS8qIFJlbW92ZSBkaXJlY3RvcnkgZW50cnkgKi8KKwlORVRGU19MT09LVVAsCQkvKiBMb29rdXAgc2luZ2xlIG9iamVjdCAqLworCU5FVEZTX0xJTkssCQkvKiBDcmVhdGUgYSBsaW5rICovCisJTkVURlNfVFJBTlMsCQkvKiBUcmFuc2FjdGlvbiAqLworCU5FVEZTX09QRU4sCQkvKiBPcGVuIGludGVudCAqLworCU5FVEZTX0lOT0RFX0lORk8sCS8qIE1ldGFkYXRhIGNhY2hlIGNvaGVyZW5jeSBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSAqLworCU5FVEZTX1BBR0VfQ0FDSEUsCS8qIFBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIG1lc3NhZ2UgKi8KKwlORVRGU19SRUFEX1BBR0VTLAkvKiBSZWFkIG11bHRpcGxlIGNvbnRpZ3VvdXMgcGFnZXMgaW4gb25lIGdvICovCisJTkVURlNfUkVOQU1FLAkJLyogUmVuYW1lIG9iamVjdCAqLworCU5FVEZTX0NBUEFCSUxJVElFUywJLyogQ2FwYWJpbGl0aWVzIG9mIHRoZSBjbGllbnQsIGZvciBleGFtcGxlIHN1cHBvcnRlZCBjcnlwdG8gKi8KKwlORVRGU19MT0NLLAkJLyogRGlzdHJpYnV0ZWQgbG9jayBtZXNzYWdlICovCisJTkVURlNfWEFUVFJfU0VULAkvKiBTZXQgZXh0ZW5kZWQgYXR0cmlidXRlICovCisJTkVURlNfWEFUVFJfR0VULAkvKiBHZXQgZXh0ZW5kZWQgYXR0cmlidXRlICovCisKK0BleHQgLSBleHRlcm5hbCBmbGFncy4gVXNlZCBieSBkaWZmZXJlbnQgY29tbWFuZHMgdG8gc3BlY2lmeSBzb21lIGV4dHJhIGFyZ3VtZW50cworCWxpa2UgcGFydGlhbCBzaXplIG9mIHRoZSBlbWJlZGRlZCBvYmplY3RzIG9yIGNyZWF0aW9uIGZsYWdzLgorCitAc2l6ZSAtIHNpemUgb2YgdGhlIGF0dGFjaGVkIGRhdGEuIEZvciBORVRGU19SRUFEX1BBR0UgYW5kIE5FVEZTX1JFQURfUEFHRVMgbm8gZGF0YSBpcyBhdHRhY2hlZCwKKwlidXQgc2l6ZSBvZiB0aGUgcmVxdWVzdGVkIGRhdGEgaXMgaW5jb3Jwb3JhdGVkIGhlcmUuIEl0IGRvZXMgbm90IGluY2x1ZGUgc2l6ZSBvZiB0aGUgY29tbWFuZAorCWhlYWRlciAoc3RydWN0IG5ldGZzX2NtZCkgaXRzZWxmLgorCitAaWQgLSBpZCBvZiB0aGUgb2JqZWN0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyBvbi4gRWFjaCBjb21tYW5kIGNhbiB1c2UgaXQgZm9yIG93biBwdXJwb3NlLgorCitAc3RhcnQgLSBzdGFydCBvZiB0aGUgb2JqZWN0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyBvbi4gRWFjaCBjb21tYW5kIGNhbiB1c2UgaXQgZm9yIG93biBwdXJwb3NlLgorCitAY3NpemUsIEBjcGFkIC0gc2l6ZSBhbmQgcGFkZGluZyBzaXplIG9mIHRoZSAoYXR0YWNoZWQgaWYgbmVlZGVkKSBjcnlwdG8gaW5mb3JtYXRpb24uCisKK0NvbW1hbmQgc3BlY2lmaWNhdGlvbnMuCisKK0BORVRGU19SRUFERElSCitUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzeW5jIGNvbnRlbnQgb2YgdGhlIHJlbW90ZSBkaXIgdG8gdGhlIGNsaWVudC4KKworQGV4dCAtIGxlbmd0aCBvZiB0aGUgcGF0aCB0byBvYmplY3QuCitAc2l6ZSAtIHRoZSBzYW1lLgorQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyIG9mIHRoZSBkaXJlY3RvcnkgdG8gcmVhZC4KK0BzdGFydCAtIHplcm8uCisKKworQE5FVEZTX1JFQURfUEFHRQorVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBkYXRhIGZyb20gcmVtb3RlIHNlcnZlci4KK0RhdGEgc2l6ZSBkb2VzIG5vdCBleGNlZWQgbG9jYWwgcGFnZSBjYWNoZSBzaXplLgorCitAaWQgLSBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSBmaXJzdCBieXRlIG9mZnNldC4KK0BzaXplIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgcGx1cyBsZW5ndGggb2YgdGhlIHBhdGggdG8gb2JqZWN0LgorQGV4dCAtIG9iamVjdCBwYXRoIGxlbmd0aC4KKworCitATkVURlNfQ1JFQVRFCitVc2VkIHRvIGNyZWF0ZSBvYmplY3QuCitJdCBkb2VzIG5vdCByZXF1aXJlIHRoYXQgYWxsIGRpcmVjdG9yaWVzIG9uIHRvcCBvZiB0aGUgb2JqZWN0IHdlcmUKK2FscmVhZHkgY3JlYXRlZCwgaXQgd2lsbCBjcmVhdGUgdGhlbSBhdXRvbWF0aWNhbGx5LiBFYWNoIG9iamVjdCBoYXMKK2Fzc29jaWF0ZWQgQG5ldGZzX3BhdGhfZW50cnkgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGNvbnRhaW5zIGNyZWF0aW9uCittb2RlIChwZXJtaXNzaW9ucyBhbmQgdHlwZSkgYW5kIGxlbmd0aCBvZiB0aGUgbmFtZSBhcyBsb25nIGFzIG5hbWUgaXRzZWxmLgorCitAc3RhcnQgLSAwCitAc2l6ZSAtIHNpemUgb2YgdGhlIGFsbCBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIGNyZWF0ZSBhIHBhdGgKK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlcgorQGV4dCAtIDAKKworCitATkVURlNfUkVNT1ZFCitVc2VkIHRvIHJlbW92ZSBvYmplY3QuCisKK0BleHQgLSBsZW5ndGggb2YgdGhlIHBhdGggdG8gb2JqZWN0LgorQHNpemUgLSB0aGUgc2FtZS4KK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlci4KK0BzdGFydCAtIHplcm8uCisKKworQE5FVEZTX0xPT0tVUAorTG9va3VwIGluZm9ybWF0aW9uIGFib3V0IG9iamVjdCBvbiBzZXJ2ZXIuCisKK0BleHQgLSBsZW5ndGggb2YgdGhlIHBhdGggdG8gb2JqZWN0LgorQHNpemUgLSB0aGUgc2FtZS4KK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlciBvZiB0aGUgZGlyZWN0b3J5IHRvIGxvb2sgb2JqZWN0IGluLgorQHN0YXJ0IC0gbG9jYWwgaW5vZGUgbnVtYmVyIG9mIHRoZSBvYmplY3QgdG8gbG9vayBhdC4KKworCitATkVURlNfTElOSworQ3JlYXRlIGhhcmQgb2Ygc3ltbGluay4KK0NvbW1hbmQgaXMgc2VudCBhcyAib2JqZWN0X3BhdGh8dGFyZ2V0X3BhdGgiLgorCitAc2l6ZSAtIHNpemUgb2YgdGhlIGFib3ZlIHN0cmluZy4KK0BpZCAtIHBhcmVudCBsb2NhbCBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSAxIGZvciBzeW1saW5rLCAwIGZvciBoYXJkbGluay4KK0BleHQgLSBzaXplIG9mIHRoZSAib2JqZWN0X3BhdGgiIGFib3ZlLgorCisKK0BORVRGU19UUkFOUworVHJhbnNhY3Rpb24gaGVhZGVyLgorCitAc2l6ZSAtIGluY29ycG9yYXRlcyBhbGwgZW1iZWRkZWQgY29tbWFuZCBzaXplcyBpbmNsdWRpbmcgdGhlaXJzIGhlYWRlciBzaXplcy4KK0BzdGFydCAtIHRyYW5zYWN0aW9uIGdlbmVyYXRpb24gbnVtYmVyIC0gdW5pcXVlIGlkIHVzZWQgdG8gZmluZCB0cmFuc2FjdGlvbi4KK0BleHQgLSB0cmFuc2FjdGlvbiBmbGFncy4gVW51c2VkIGF0IHRoZSBtb21lbnQuCitAaWQgLSAwLgorCisKK0BORVRGU19PUEVOCitPcGVuIGludGVudCBmb3IgZ2l2ZW4gdHJhbnNhY3Rpb24uCisKK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlci4KK0BzdGFydCAtIDAuCitAc2l6ZSAtIHBhdGggbGVuZ3RoIHRvIHRoZSBvYmplY3QuCitAZXh0IC0gb3BlbiBmbGFncyAoT19SRFdSIGFuZCBzbyBvbikuCisKKworQE5FVEZTX0lOT0RFX0lORk8KK01ldGFkYXRhIHVwZGF0ZSBjb21tYW5kLgorSXQgaXMgc2VudCB0byBzZXJ2ZXJzIHdoZW4gYXR0cmlidXRlcyBvZiB0aGUgb2JqZWN0IGFyZSBjaGFuZ2VkIGFuZCByZWNlaXZlZAord2hlbiBkYXRhIG9yIG1ldGFkYXRhIHdlcmUgdXBkYXRlZC4gSXQgb3BlcmF0ZXMgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKworc3RydWN0IG5ldGZzX2lub2RlX2luZm8KK3sKKwl1bnNpZ25lZCBpbnQJCW1vZGU7CisJdW5zaWduZWQgaW50CQlubGluazsKKwl1bnNpZ25lZCBpbnQJCXVpZDsKKwl1bnNpZ25lZCBpbnQJCWdpZDsKKwl1bnNpZ25lZCBpbnQJCWJsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCXBhZGRpbmc7CisJX191NjQJCQlpbm87CisJX191NjQJCQlibG9ja3M7CisJX191NjQJCQlyZGV2OworCV9fdTY0CQkJc2l6ZTsKKwlfX3U2NAkJCXZlcnNpb247Cit9OworCitJdCBlZmZlY3RpdmVseSBtaXJyb3JzIHN0YXQoMikgcmV0dXJuZWQgZGF0YS4KKworCitAZXh0IC0gcGF0aCBsZW5ndGggdG8gdGhlIG9iamVjdC4KK0BzaXplIC0gdGhlIHNhbWUgcGx1cyBzaXplIG9mIHRoZSBuZXRmc19pbm9kZV9pbmZvIHN0cnVjdHVyZS4KK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlci4KK0BzdGFydCAtIDAuCisKKworQE5FVEZTX1BBR0VfQ0FDSEUKK0NvbW1hbmQgaXMgb25seSByZWNlaXZlZCBieSBjbGllbnRzLiBJdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAorcGFnZSB0byBiZSBtYXJrZWQgYXMgbm90IHVwLXRvLWRhdGUuCisKK0BpZCAtIGNsaWVudCdzIGlub2RlIG51bWJlci4KK0BzdGFydCAtIGxhc3QgYnl0ZSBvZiB0aGUgcGFnZSB0byBiZSBpbnZhbGlkYXRlZC4gSWYgaXQgaXMgbm90IGVxdWFsIHRvCisJY3VycmVudCBpbm9kZSBzaXplLCBpdCB3aWxsIGJlIHZtdHJ1bmNhdGVkKCkuCitAc2l6ZSAtIDAKK0BleHQgLSAwCisKKworQE5FVEZTX1JFQURfUEFHRVMKK1VzZWQgdG8gcmVhZCBtdWx0aXBsZSBjb250aWd1b3VzIHBhZ2VzIGluIG9uZSBnby4KKworQHN0YXJ0IC0gZmlyc3QgYnl0ZSBvZiB0aGUgY29udGlndW91cyByZWdpb24gdG8gcmVhZC4KK0BzaXplIC0gY29udGFpbnMgb2YgdHdvIGZpZWxkczogbG93ZXIgOCBiaXRzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBwYWdlIGNhY2hlIHNoaWZ0CisJdXNlZCBieSBjbGllbnQsIGFub3RoZXIgMyBieXRlcyBhcmUgdXNlZCB0byBnZXQgbnVtYmVyIG9mIHBhZ2VzLgorQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyLgorQGV4dCAtIHBhdGggbGVuZ3RoIHRvIHRoZSBvYmplY3QuCisKKworQE5FVEZTX1JFTkFNRQorVXNlZCB0byByZW5hbWUgb2JqZWN0LgorQXR0YWNoZWQgZGF0YSBpcyBmb3JtZWQgaW50byBmb2xsb3dpbmcgc3RyaW5nOiAib2xkX3BhdGh8bmV3X3BhdGgiLgorCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSBwYXJlbnQgaW5vZGUgbnVtYmVyLgorQHNpemUgLSBsZW5ndGggb2YgdGhlIGFib3ZlIHN0cmluZy4KK0BleHQgLSBsZW5ndGggb2YgdGhlIG9sZCBwYXRoIHBhcnQuCisKKworQE5FVEZTX0NBUEFCSUxJVElFUworVXNlZCB0byBleGNoYW5nZSBjcnlwdG8gY2FwYWJpbGl0aWVzIHdpdGggc2VydmVyLgorSWYgY3J5cHRvIGNhcGFiaWxpdGllcyBhcmUgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIsIHRoZW4gY2xpZW50IHdpbGwgZGlzYWJsZSBpdAorb3IgZmFpbCAoaWYgJ2NyeXB0b19mYWlsX3Vuc3VwcG9ydGVkJyBtb3VudCBvcHRpb25zIHdhcyBzcGVjaWZpZWQpLgorCitAaWQgLSBzdXBlcmJsb2NrIGluZGV4LiBVc2VkIHRvIHNwZWNpZnkgY3J5cHRvIGluZm9ybWF0aW9uIGZvciBncm91cCBvZiBzZXJ2ZXJzLgorQHNpemUgLSBzaXplIG9mIHRoZSBhdHRhY2hlZCBjYXBhYmlsaXRpZXMgc3RydWN0dXJlLgorQHN0YXJ0IC0gMC4KK0BzaXplIC0gMC4KK0BzY3NpemUgLSAwLgorCitATkVURlNfTE9DSworVXNlZCB0byBzZW5kIGxvY2sgcmVxdWVzdC9yZWxlYXNlIG1lc3NhZ2VzLiBBbHRob3VnaCBpdCBzZW5kcyBieXRlIHJhbmdlIHJlcXVlc3QKK2FuZCBpcyBjYXBhYmxlIG9mIGZsdXNoaW5nIHBhZ2VzIGJhc2VkIG9uIHRoYXQsIGl0IGlzIG5vdCB1c2VkLCBzaW5jZSBhbGwgTGludXgKK2ZpbGVzeXN0ZW1zIGxvY2sgdGhlIHdob2xlIGlub2RlLgorCitAaWQgLSBsb2NrIGdlbmVyYXRpb24gbnVtYmVyLgorQHN0YXJ0IC0gc3RhcnQgb2YgdGhlIGxvY2tlZCByYW5nZS4KK0BzaXplIC0gc2l6ZSBvZiB0aGUgbG9ja2VkIHJhbmdlLgorQGV4dCAtIGxvY2sgdHlwZTogcmVhZC93cml0ZS4gTm90IHVzZWQgYWN0dWFsbHkuIDE1J3RoIGJpdCBpcyB1c2VkIHRvIGRldGVybWluZSwKKwlpZiBpdCBpcyBsb2NrIHJlcXVlc3QgKDEpIG9yIHJlbGVhc2UgKDApLgorCitATkVURlNfWEFUVFJfU0VUCitATkVURlNfWEFUVFJfR0VUCitVc2VkIHRvIHNldC9nZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZ2l2ZW4gaW5vZGUuCitAaWQgLSBhdHRyaWJ1dGUgZ2VuZXJhdGlvbiBudW1iZXIgb3IgeGF0dHIgc2V0dGluZyB0eXBlCitAc3RhcnQgLSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgKHJlcXVlc3Qgb3IgYXR0YWNoZWQpCitAc2l6ZSAtIG5hbWUgbGVuZ3RoLCBwYXRoIGxlbiBhbmQgZGF0YSBzaXplIGZvciBnaXZlbiBhdHRyaWJ1dGUKK0BleHQgLSBwYXRoIGxlbmd0aCBmb3IgZ2l2ZW4gb2JqZWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL2Z0cmFjZS50eHQKaW5kZXggODAzYjEzMS4uZmQ5YTNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZnRyYWNlLnR4dApAQCAtMTUsMzEgKzE1LDMxIEBACiAKIEZ0cmFjZSBpcyBhbiBpbnRlcm5hbCB0cmFjZXIgZGVzaWduZWQgdG8gaGVscCBvdXQgZGV2ZWxvcGVycyBhbmQKIGRlc2lnbmVycyBvZiBzeXN0ZW1zIHRvIGZpbmQgd2hhdCBpcyBnb2luZyBvbiBpbnNpZGUgdGhlIGtlcm5lbC4KLUl0IGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb3IgYW5hbHl6aW5nIGxhdGVuY2llcyBhbmQgcGVyZm9ybWFuY2UKLWlzc3VlcyB0aGF0IHRha2UgcGxhY2Ugb3V0c2lkZSBvZiB1c2VyLXNwYWNlLgorSXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvciBhbmFseXppbmcgbGF0ZW5jaWVzIGFuZAorcGVyZm9ybWFuY2UgaXNzdWVzIHRoYXQgdGFrZSBwbGFjZSBvdXRzaWRlIG9mIHVzZXItc3BhY2UuCiAKIEFsdGhvdWdoIGZ0cmFjZSBpcyB0aGUgZnVuY3Rpb24gdHJhY2VyLCBpdCBhbHNvIGluY2x1ZGVzIGFuCi1pbmZyYXN0cnVjdHVyZSB0aGF0IGFsbG93cyBmb3Igb3RoZXIgdHlwZXMgb2YgdHJhY2luZy4gU29tZSBvZiB0aGUKLXRyYWNlcnMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZ0cmFjZSBpbmNsdWRlIGEgdHJhY2VyIHRvIHRyYWNlCi1jb250ZXh0IHN3aXRjaGVzLCB0aGUgdGltZSBpdCB0YWtlcyBmb3IgYSBoaWdoIHByaW9yaXR5IHRhc2sgdG8KLXJ1biBhZnRlciBpdCB3YXMgd29rZW4gdXAsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBhbmQKLW1vcmUgKGZ0cmFjZSBhbGxvd3MgZm9yIHRyYWNlciBwbHVnaW5zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBsaXN0IG9mCi10cmFjZXJzIGNhbiBhbHdheXMgZ3JvdykuCitpbmZyYXN0cnVjdHVyZSB0aGF0IGFsbG93cyBmb3Igb3RoZXIgdHlwZXMgb2YgdHJhY2luZy4gU29tZSBvZgordGhlIHRyYWNlcnMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZ0cmFjZSBpbmNsdWRlIGEgdHJhY2VyIHRvCit0cmFjZSBjb250ZXh0IHN3aXRjaGVzLCB0aGUgdGltZSBpdCB0YWtlcyBmb3IgYSBoaWdoIHByaW9yaXR5Cit0YXNrIHRvIHJ1biBhZnRlciBpdCB3YXMgd29rZW4gdXAsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlCitkaXNhYmxlZCwgYW5kIG1vcmUgKGZ0cmFjZSBhbGxvd3MgZm9yIHRyYWNlciBwbHVnaW5zLCB3aGljaAorbWVhbnMgdGhhdCB0aGUgbGlzdCBvZiB0cmFjZXJzIGNhbiBhbHdheXMgZ3JvdykuCiAKIAogVGhlIEZpbGUgU3lzdGVtCiAtLS0tLS0tLS0tLS0tLS0KIAotRnRyYWNlIHVzZXMgdGhlIGRlYnVnZnMgZmlsZSBzeXN0ZW0gdG8gaG9sZCB0aGUgY29udHJvbCBmaWxlcyBhcyB3ZWxsCi1hcyB0aGUgZmlsZXMgdG8gZGlzcGxheSBvdXRwdXQuCitGdHJhY2UgdXNlcyB0aGUgZGVidWdmcyBmaWxlIHN5c3RlbSB0byBob2xkIHRoZSBjb250cm9sIGZpbGVzIGFzCit3ZWxsIGFzIHRoZSBmaWxlcyB0byBkaXNwbGF5IG91dHB1dC4KIAogVG8gbW91bnQgdGhlIGRlYnVnZnMgc3lzdGVtOgogCiAgICMgbWtkaXIgL2RlYnVnCiAgICMgbW91bnQgLXQgZGVidWdmcyBub2RldiAvZGVidWcKIAotKE5vdGU6IGl0IGlzIG1vcmUgY29tbW9uIHRvIG1vdW50IGF0IC9zeXMva2VybmVsL2RlYnVnLCBidXQgZm9yIHNpbXBsaWNpdHkKLSB0aGlzIGRvY3VtZW50IHdpbGwgdXNlIC9kZWJ1ZykKKyggTm90ZTogaXQgaXMgbW9yZSBjb21tb24gdG8gbW91bnQgYXQgL3N5cy9rZXJuZWwvZGVidWcsIGJ1dCBmb3IKKyAgc2ltcGxpY2l0eSB0aGlzIGRvY3VtZW50IHdpbGwgdXNlIC9kZWJ1ZykKIAogVGhhdCdzIGl0ISAoYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBmdHJhY2UgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsKQogCkBAIC01MCw5MCArNTAsMTI0IEBACiAKICBOb3RlOiBhbGwgdGltZSB2YWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kcy4KIAotICBjdXJyZW50X3RyYWNlcjogVGhpcyBpcyB1c2VkIHRvIHNldCBvciBkaXNwbGF5IHRoZSBjdXJyZW50IHRyYWNlcgotCQl0aGF0IGlzIGNvbmZpZ3VyZWQuCisgIGN1cnJlbnRfdHJhY2VyOgogCi0gIGF2YWlsYWJsZV90cmFjZXJzOiBUaGlzIGhvbGRzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgdHJhY2VycyB0aGF0Ci0JCWhhdmUgYmVlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSB0cmFjZXJzCi0JCWxpc3RlZCBoZXJlIGNhbiBiZSBjb25maWd1cmVkIGJ5IGVjaG9pbmcgdGhlaXIgbmFtZQotCQlpbnRvIGN1cnJlbnRfdHJhY2VyLgorCVRoaXMgaXMgdXNlZCB0byBzZXQgb3IgZGlzcGxheSB0aGUgY3VycmVudCB0cmFjZXIKKwl0aGF0IGlzIGNvbmZpZ3VyZWQuCiAKLSAgdHJhY2luZ19lbmFibGVkOiBUaGlzIHNldHMgb3IgZGlzcGxheXMgd2hldGhlciB0aGUgY3VycmVudF90cmFjZXIKLQkJaXMgYWN0aXZhdGVkIGFuZCB0cmFjaW5nIG9yIG5vdC4gRWNobyAwIGludG8gdGhpcwotCQlmaWxlIHRvIGRpc2FibGUgdGhlIHRyYWNlciBvciAxIHRvIGVuYWJsZSBpdC4KKyAgYXZhaWxhYmxlX3RyYWNlcnM6CiAKLSAgdHJhY2U6IFRoaXMgZmlsZSBob2xkcyB0aGUgb3V0cHV0IG9mIHRoZSB0cmFjZSBpbiBhIGh1bWFuIHJlYWRhYmxlCi0JCWZvcm1hdCAoZGVzY3JpYmVkIGJlbG93KS4KKwlUaGlzIGhvbGRzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgdHJhY2VycyB0aGF0CisJaGF2ZSBiZWVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gVGhlCisJdHJhY2VycyBsaXN0ZWQgaGVyZSBjYW4gYmUgY29uZmlndXJlZCBieQorCWVjaG9pbmcgdGhlaXIgbmFtZSBpbnRvIGN1cnJlbnRfdHJhY2VyLgogCi0gIGxhdGVuY3lfdHJhY2U6IFRoaXMgZmlsZSBzaG93cyB0aGUgc2FtZSB0cmFjZSBidXQgdGhlIGluZm9ybWF0aW9uCi0JCWlzIG9yZ2FuaXplZCBtb3JlIHRvIGRpc3BsYXkgcG9zc2libGUgbGF0ZW5jaWVzCi0JCWluIHRoZSBzeXN0ZW0gKGRlc2NyaWJlZCBiZWxvdykuCisgIHRyYWNpbmdfZW5hYmxlZDoKIAotICB0cmFjZV9waXBlOiBUaGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSAidHJhY2UiIGZpbGUgYnV0IHRoaXMKLQkJZmlsZSBpcyBtZWFudCB0byBiZSBzdHJlYW1lZCB3aXRoIGxpdmUgdHJhY2luZy4KLQkJUmVhZHMgZnJvbSB0aGlzIGZpbGUgd2lsbCBibG9jayB1bnRpbCBuZXcgZGF0YQotCQlpcyByZXRyaWV2ZWQuIFVubGlrZSB0aGUgInRyYWNlIiBhbmQgImxhdGVuY3lfdHJhY2UiCi0JCWZpbGVzLCB0aGlzIGZpbGUgaXMgYSBjb25zdW1lci4gVGhpcyBtZWFucyByZWFkaW5nCi0JCWZyb20gdGhpcyBmaWxlIGNhdXNlcyBzZXF1ZW50aWFsIHJlYWRzIHRvIGRpc3BsYXkKLQkJbW9yZSBjdXJyZW50IGRhdGEuIE9uY2UgZGF0YSBpcyByZWFkIGZyb20gdGhpcwotCQlmaWxlLCBpdCBpcyBjb25zdW1lZCwgYW5kIHdpbGwgbm90IGJlIHJlYWQKLQkJYWdhaW4gd2l0aCBhIHNlcXVlbnRpYWwgcmVhZC4gVGhlICJ0cmFjZSIgYW5kCi0JCSJsYXRlbmN5X3RyYWNlIiBmaWxlcyBhcmUgc3RhdGljLCBhbmQgaWYgdGhlCi0JCXRyYWNlciBpcyBub3QgYWRkaW5nIG1vcmUgZGF0YSwgdGhleSB3aWxsIGRpc3BsYXkKLQkJdGhlIHNhbWUgaW5mb3JtYXRpb24gZXZlcnkgdGltZSB0aGV5IGFyZSByZWFkLgorCVRoaXMgc2V0cyBvciBkaXNwbGF5cyB3aGV0aGVyIHRoZSBjdXJyZW50X3RyYWNlcgorCWlzIGFjdGl2YXRlZCBhbmQgdHJhY2luZyBvciBub3QuIEVjaG8gMCBpbnRvIHRoaXMKKwlmaWxlIHRvIGRpc2FibGUgdGhlIHRyYWNlciBvciAxIHRvIGVuYWJsZSBpdC4KIAotICB0cmFjZV9vcHRpb25zOiBUaGlzIGZpbGUgbGV0cyB0aGUgdXNlciBjb250cm9sIHRoZSBhbW91bnQgb2YgZGF0YQotCQl0aGF0IGlzIGRpc3BsYXllZCBpbiBvbmUgb2YgdGhlIGFib3ZlIG91dHB1dAotCQlmaWxlcy4KKyAgdHJhY2U6CiAKLSAgdHJhY2VfbWF4X2xhdGVuY3k6IFNvbWUgb2YgdGhlIHRyYWNlcnMgcmVjb3JkIHRoZSBtYXggbGF0ZW5jeS4KLQkJRm9yIGV4YW1wbGUsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgotCQlUaGlzIHRpbWUgaXMgc2F2ZWQgaW4gdGhpcyBmaWxlLiBUaGUgbWF4IHRyYWNlCi0JCXdpbGwgYWxzbyBiZSBzdG9yZWQsIGFuZCBkaXNwbGF5ZWQgYnkgZWl0aGVyCi0JCSJ0cmFjZSIgb3IgImxhdGVuY3lfdHJhY2UiLiAgQSBuZXcgbWF4IHRyYWNlIHdpbGwKLQkJb25seSBiZSByZWNvcmRlZCBpZiB0aGUgbGF0ZW5jeSBpcyBncmVhdGVyIHRoYW4KLQkJdGhlIHZhbHVlIGluIHRoaXMgZmlsZS4gKGluIG1pY3Jvc2Vjb25kcykKKwlUaGlzIGZpbGUgaG9sZHMgdGhlIG91dHB1dCBvZiB0aGUgdHJhY2UgaW4gYSBodW1hbgorCXJlYWRhYmxlIGZvcm1hdCAoZGVzY3JpYmVkIGJlbG93KS4KIAotICBidWZmZXJfc2l6ZV9rYjogVGhpcyBzZXRzIG9yIGRpc3BsYXlzIHRoZSBudW1iZXIgb2Yga2lsb2J5dGVzIGVhY2ggQ1BVCi0JCWJ1ZmZlciBjYW4gaG9sZC4gVGhlIHRyYWNlciBidWZmZXJzIGFyZSB0aGUgc2FtZSBzaXplCi0JCWZvciBlYWNoIENQVS4gVGhlIGRpc3BsYXllZCBudW1iZXIgaXMgdGhlIHNpemUgb2YgdGhlCi0JCUNQVSBidWZmZXIgYW5kIG5vdCB0b3RhbCBzaXplIG9mIGFsbCBidWZmZXJzLiBUaGUKLQkJdHJhY2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGluIHBhZ2VzIChibG9ja3Mgb2YgbWVtb3J5Ci0JCXRoYXQgdGhlIGtlcm5lbCB1c2VzIGZvciBhbGxvY2F0aW9uLCB1c3VhbGx5IDQgS0IgaW4gc2l6ZSkuCi0JCUlmIHRoZSBsYXN0IHBhZ2UgYWxsb2NhdGVkIGhhcyByb29tIGZvciBtb3JlIGJ5dGVzCi0JCXRoYW4gcmVxdWVzdGVkLCB0aGUgcmVzdCBvZiB0aGUgcGFnZSB3aWxsIGJlIHVzZWQsCi0JCW1ha2luZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gYmlnZ2VyIHRoYW4gcmVxdWVzdGVkLgotCQkoTm90ZSwgdGhlIHNpemUgbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUgZHVlCi0JCXRvIGJ1ZmZlciBtYW5hZ21lbnQgb3ZlcmhlYWQuKQorICBsYXRlbmN5X3RyYWNlOgogCi0JCVRoaXMgY2FuIG9ubHkgYmUgdXBkYXRlZCB3aGVuIHRoZSBjdXJyZW50X3RyYWNlcgotCQlpcyBzZXQgdG8gIm5vcCIuCisJVGhpcyBmaWxlIHNob3dzIHRoZSBzYW1lIHRyYWNlIGJ1dCB0aGUgaW5mb3JtYXRpb24KKwlpcyBvcmdhbml6ZWQgbW9yZSB0byBkaXNwbGF5IHBvc3NpYmxlIGxhdGVuY2llcworCWluIHRoZSBzeXN0ZW0gKGRlc2NyaWJlZCBiZWxvdykuCiAKLSAgdHJhY2luZ19jcHVtYXNrOiBUaGlzIGlzIGEgbWFzayB0aGF0IGxldHMgdGhlIHVzZXIgb25seSB0cmFjZQotCQlvbiBzcGVjaWZpZWQgQ1BVUy4gVGhlIGZvcm1hdCBpcyBhIGhleCBzdHJpbmcKLQkJcmVwcmVzZW50aW5nIHRoZSBDUFVTLgorICB0cmFjZV9waXBlOgogCi0gIHNldF9mdHJhY2VfZmlsdGVyOiBXaGVuIGR5bmFtaWMgZnRyYWNlIGlzIGNvbmZpZ3VyZWQgaW4gKHNlZSB0aGUKLQkJc2VjdGlvbiBiZWxvdyAiZHluYW1pYyBmdHJhY2UiKSwgdGhlIGNvZGUgaXMgZHluYW1pY2FsbHkKLQkJbW9kaWZpZWQgKGNvZGUgdGV4dCByZXdyaXRlKSB0byBkaXNhYmxlIGNhbGxpbmcgb2YgdGhlCi0JCWZ1bmN0aW9uIHByb2ZpbGVyIChtY291bnQpLiBUaGlzIGxldHMgdHJhY2luZyBiZSBjb25maWd1cmVkCi0JCWluIHdpdGggcHJhY3RpY2FsbHkgbm8gb3ZlcmhlYWQgaW4gcGVyZm9ybWFuY2UuICBUaGlzIGFsc28KLQkJaGFzIGEgc2lkZSBlZmZlY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGZ1bmN0aW9ucwotCQl0byBiZSB0cmFjZWQuIEVjaG9pbmcgbmFtZXMgb2YgZnVuY3Rpb25zIGludG8gdGhpcyBmaWxlCi0JCXdpbGwgbGltaXQgdGhlIHRyYWNlIHRvIG9ubHkgdGhvc2UgZnVuY3Rpb25zLgorCVRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlICJ0cmFjZSIgZmlsZSBidXQgdGhpcworCWZpbGUgaXMgbWVhbnQgdG8gYmUgc3RyZWFtZWQgd2l0aCBsaXZlIHRyYWNpbmcuCisJUmVhZHMgZnJvbSB0aGlzIGZpbGUgd2lsbCBibG9jayB1bnRpbCBuZXcgZGF0YQorCWlzIHJldHJpZXZlZC4gVW5saWtlIHRoZSAidHJhY2UiIGFuZCAibGF0ZW5jeV90cmFjZSIKKwlmaWxlcywgdGhpcyBmaWxlIGlzIGEgY29uc3VtZXIuIFRoaXMgbWVhbnMgcmVhZGluZworCWZyb20gdGhpcyBmaWxlIGNhdXNlcyBzZXF1ZW50aWFsIHJlYWRzIHRvIGRpc3BsYXkKKwltb3JlIGN1cnJlbnQgZGF0YS4gT25jZSBkYXRhIGlzIHJlYWQgZnJvbSB0aGlzCisJZmlsZSwgaXQgaXMgY29uc3VtZWQsIGFuZCB3aWxsIG5vdCBiZSByZWFkCisJYWdhaW4gd2l0aCBhIHNlcXVlbnRpYWwgcmVhZC4gVGhlICJ0cmFjZSIgYW5kCisJImxhdGVuY3lfdHJhY2UiIGZpbGVzIGFyZSBzdGF0aWMsIGFuZCBpZiB0aGUKKwl0cmFjZXIgaXMgbm90IGFkZGluZyBtb3JlIGRhdGEsIHRoZXkgd2lsbCBkaXNwbGF5CisJdGhlIHNhbWUgaW5mb3JtYXRpb24gZXZlcnkgdGltZSB0aGV5IGFyZSByZWFkLgogCi0gIHNldF9mdHJhY2Vfbm90cmFjZTogVGhpcyBoYXMgYW4gZWZmZWN0IG9wcG9zaXRlIHRvIHRoYXQgb2YKLQkJc2V0X2Z0cmFjZV9maWx0ZXIuIEFueSBmdW5jdGlvbiB0aGF0IGlzIGFkZGVkIGhlcmUgd2lsbCBub3QKLQkJYmUgdHJhY2VkLiBJZiBhIGZ1bmN0aW9uIGV4aXN0cyBpbiBib3RoIHNldF9mdHJhY2VfZmlsdGVyCi0JCWFuZCBzZXRfZnRyYWNlX25vdHJhY2UsCXRoZSBmdW5jdGlvbiB3aWxsIF9ub3RfIGJlIHRyYWNlZC4KKyAgdHJhY2Vfb3B0aW9uczoKIAotICBzZXRfZnRyYWNlX3BpZDogSGF2ZSB0aGUgZnVuY3Rpb24gdHJhY2VyIG9ubHkgdHJhY2UgYSBzaW5nbGUgdGhyZWFkLgorCVRoaXMgZmlsZSBsZXRzIHRoZSB1c2VyIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkYXRhCisJdGhhdCBpcyBkaXNwbGF5ZWQgaW4gb25lIG9mIHRoZSBhYm92ZSBvdXRwdXQKKwlmaWxlcy4KIAotICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9uczogVGhpcyBsaXN0cyB0aGUgZnVuY3Rpb25zIHRoYXQgZnRyYWNlCi0JCWhhcyBwcm9jZXNzZWQgYW5kIGNhbiB0cmFjZS4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbgotCQluYW1lcyB0aGF0IHlvdSBjYW4gcGFzcyB0byAic2V0X2Z0cmFjZV9maWx0ZXIiIG9yCi0JCSJzZXRfZnRyYWNlX25vdHJhY2UiLiAoU2VlIHRoZSBzZWN0aW9uICJkeW5hbWljIGZ0cmFjZSIKLQkJYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4pCisgIHRyYWNpbmdfbWF4X2xhdGVuY3k6CisKKwlTb21lIG9mIHRoZSB0cmFjZXJzIHJlY29yZCB0aGUgbWF4IGxhdGVuY3kuCisJRm9yIGV4YW1wbGUsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgorCVRoaXMgdGltZSBpcyBzYXZlZCBpbiB0aGlzIGZpbGUuIFRoZSBtYXggdHJhY2UKKwl3aWxsIGFsc28gYmUgc3RvcmVkLCBhbmQgZGlzcGxheWVkIGJ5IGVpdGhlcgorCSJ0cmFjZSIgb3IgImxhdGVuY3lfdHJhY2UiLiAgQSBuZXcgbWF4IHRyYWNlIHdpbGwKKwlvbmx5IGJlIHJlY29yZGVkIGlmIHRoZSBsYXRlbmN5IGlzIGdyZWF0ZXIgdGhhbgorCXRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUuIChpbiBtaWNyb3NlY29uZHMpCisKKyAgYnVmZmVyX3NpemVfa2I6CisKKwlUaGlzIHNldHMgb3IgZGlzcGxheXMgdGhlIG51bWJlciBvZiBraWxvYnl0ZXMgZWFjaCBDUFUKKwlidWZmZXIgY2FuIGhvbGQuIFRoZSB0cmFjZXIgYnVmZmVycyBhcmUgdGhlIHNhbWUgc2l6ZQorCWZvciBlYWNoIENQVS4gVGhlIGRpc3BsYXllZCBudW1iZXIgaXMgdGhlIHNpemUgb2YgdGhlCisJQ1BVIGJ1ZmZlciBhbmQgbm90IHRvdGFsIHNpemUgb2YgYWxsIGJ1ZmZlcnMuIFRoZQorCXRyYWNlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBpbiBwYWdlcyAoYmxvY2tzIG9mIG1lbW9yeQorCXRoYXQgdGhlIGtlcm5lbCB1c2VzIGZvciBhbGxvY2F0aW9uLCB1c3VhbGx5IDQgS0IgaW4gc2l6ZSkuCisJSWYgdGhlIGxhc3QgcGFnZSBhbGxvY2F0ZWQgaGFzIHJvb20gZm9yIG1vcmUgYnl0ZXMKKwl0aGFuIHJlcXVlc3RlZCwgdGhlIHJlc3Qgb2YgdGhlIHBhZ2Ugd2lsbCBiZSB1c2VkLAorCW1ha2luZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gYmlnZ2VyIHRoYW4gcmVxdWVzdGVkLgorCSggTm90ZSwgdGhlIHNpemUgbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUKKwkgIGR1ZSB0byBidWZmZXIgbWFuYWdtZW50IG92ZXJoZWFkLiApCisKKwlUaGlzIGNhbiBvbmx5IGJlIHVwZGF0ZWQgd2hlbiB0aGUgY3VycmVudF90cmFjZXIKKwlpcyBzZXQgdG8gIm5vcCIuCisKKyAgdHJhY2luZ19jcHVtYXNrOgorCisJVGhpcyBpcyBhIG1hc2sgdGhhdCBsZXRzIHRoZSB1c2VyIG9ubHkgdHJhY2UKKwlvbiBzcGVjaWZpZWQgQ1BVUy4gVGhlIGZvcm1hdCBpcyBhIGhleCBzdHJpbmcKKwlyZXByZXNlbnRpbmcgdGhlIENQVVMuCisKKyAgc2V0X2Z0cmFjZV9maWx0ZXI6CisKKwlXaGVuIGR5bmFtaWMgZnRyYWNlIGlzIGNvbmZpZ3VyZWQgaW4gKHNlZSB0aGUKKwlzZWN0aW9uIGJlbG93ICJkeW5hbWljIGZ0cmFjZSIpLCB0aGUgY29kZSBpcyBkeW5hbWljYWxseQorCW1vZGlmaWVkIChjb2RlIHRleHQgcmV3cml0ZSkgdG8gZGlzYWJsZSBjYWxsaW5nIG9mIHRoZQorCWZ1bmN0aW9uIHByb2ZpbGVyIChtY291bnQpLiBUaGlzIGxldHMgdHJhY2luZyBiZSBjb25maWd1cmVkCisJaW4gd2l0aCBwcmFjdGljYWxseSBubyBvdmVyaGVhZCBpbiBwZXJmb3JtYW5jZS4gIFRoaXMgYWxzbworCWhhcyBhIHNpZGUgZWZmZWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzcGVjaWZpYyBmdW5jdGlvbnMKKwl0byBiZSB0cmFjZWQuIEVjaG9pbmcgbmFtZXMgb2YgZnVuY3Rpb25zIGludG8gdGhpcyBmaWxlCisJd2lsbCBsaW1pdCB0aGUgdHJhY2UgdG8gb25seSB0aG9zZSBmdW5jdGlvbnMuCisKKyAgc2V0X2Z0cmFjZV9ub3RyYWNlOgorCisJVGhpcyBoYXMgYW4gZWZmZWN0IG9wcG9zaXRlIHRvIHRoYXQgb2YKKwlzZXRfZnRyYWNlX2ZpbHRlci4gQW55IGZ1bmN0aW9uIHRoYXQgaXMgYWRkZWQgaGVyZSB3aWxsIG5vdAorCWJlIHRyYWNlZC4gSWYgYSBmdW5jdGlvbiBleGlzdHMgaW4gYm90aCBzZXRfZnRyYWNlX2ZpbHRlcgorCWFuZCBzZXRfZnRyYWNlX25vdHJhY2UsCXRoZSBmdW5jdGlvbiB3aWxsIF9ub3RfIGJlIHRyYWNlZC4KKworICBzZXRfZnRyYWNlX3BpZDoKKworCUhhdmUgdGhlIGZ1bmN0aW9uIHRyYWNlciBvbmx5IHRyYWNlIGEgc2luZ2xlIHRocmVhZC4KKworICBzZXRfZ3JhcGhfZnVuY3Rpb246CisKKwlTZXQgYSAidHJpZ2dlciIgZnVuY3Rpb24gd2hlcmUgdHJhY2luZyBzaG91bGQgc3RhcnQKKwl3aXRoIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgKFNlZSB0aGUgc2VjdGlvbgorCSJkeW5hbWljIGZ0cmFjZSIgZm9yIG1vcmUgZGV0YWlscykuCisKKyAgYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnM6CisKKwlUaGlzIGxpc3RzIHRoZSBmdW5jdGlvbnMgdGhhdCBmdHJhY2UKKwloYXMgcHJvY2Vzc2VkIGFuZCBjYW4gdHJhY2UuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb24KKwluYW1lcyB0aGF0IHlvdSBjYW4gcGFzcyB0byAic2V0X2Z0cmFjZV9maWx0ZXIiIG9yCisJInNldF9mdHJhY2Vfbm90cmFjZSIuIChTZWUgdGhlIHNlY3Rpb24gImR5bmFtaWMgZnRyYWNlIgorCWJlbG93IGZvciBtb3JlIGRldGFpbHMuKQogCiAKIFRoZSBUcmFjZXJzCkBAIC0xNDEsMzYgKzE3NSw2NiBAQAogCiBIZXJlIGlzIHRoZSBsaXN0IG9mIGN1cnJlbnQgdHJhY2VycyB0aGF0IG1heSBiZSBjb25maWd1cmVkLgogCi0gIGZ1bmN0aW9uIC0gZnVuY3Rpb24gdHJhY2VyIHRoYXQgdXNlcyBtY291bnQgdG8gdHJhY2UgYWxsIGZ1bmN0aW9ucy4KKyAgImZ1bmN0aW9uIgogCi0gIHNjaGVkX3N3aXRjaCAtIHRyYWNlcyB0aGUgY29udGV4dCBzd2l0Y2hlcyBiZXR3ZWVuIHRhc2tzLgorCUZ1bmN0aW9uIGNhbGwgdHJhY2VyIHRvIHRyYWNlIGFsbCBrZXJuZWwgZnVuY3Rpb25zLgogCi0gIGlycXNvZmYgLSB0cmFjZXMgdGhlIGFyZWFzIHRoYXQgZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBzYXZlcwotICAJCXRoZSB0cmFjZSB3aXRoIHRoZSBsb25nZXN0IG1heCBsYXRlbmN5LgotCQlTZWUgdHJhY2luZ19tYXhfbGF0ZW5jeS4gIFdoZW4gYSBuZXcgbWF4IGlzIHJlY29yZGVkLAotCQlpdCByZXBsYWNlcyB0aGUgb2xkIHRyYWNlLiBJdCBpcyBiZXN0IHRvIHZpZXcgdGhpcwotCQl0cmFjZSB2aWEgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZS4KKyAgImZ1bmN0aW9uX2dyYXBoX3RyYWNlciIKIAotICBwcmVlbXB0b2ZmIC0gU2ltaWxhciB0byBpcnFzb2ZmIGJ1dCB0cmFjZXMgYW5kIHJlY29yZHMgdGhlIGFtb3VudCBvZgotCQl0aW1lIGZvciB3aGljaCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLgorCVNpbWlsYXIgdG8gdGhlIGZ1bmN0aW9uIHRyYWNlciBleGNlcHQgdGhhdCB0aGUKKwlmdW5jdGlvbiB0cmFjZXIgcHJvYmVzIHRoZSBmdW5jdGlvbnMgb24gdGhlaXIgZW50cnkKKwl3aGVyZWFzIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgdHJhY2VzIG9uIGJvdGggZW50cnkKKwlhbmQgZXhpdCBvZiB0aGUgZnVuY3Rpb25zLiBJdCB0aGVuIHByb3ZpZGVzIHRoZSBhYmlsaXR5CisJdG8gZHJhdyBhIGdyYXBoIG9mIGZ1bmN0aW9uIGNhbGxzIHNpbWlsYXIgdG8gQyBjb2RlCisJc291cmNlLgogCi0gIHByZWVtcHRpcnFzb2ZmIC0gU2ltaWxhciB0byBpcnFzb2ZmIGFuZCBwcmVlbXB0b2ZmLCBidXQgdHJhY2VzIGFuZAotCQkgcmVjb3JkcyB0aGUgbGFyZ2VzdCB0aW1lIGZvciB3aGljaCBpcnFzIGFuZC9vciBwcmVlbXB0aW9uCi0JCSBpcyBkaXNhYmxlZC4KKyAgInNjaGVkX3N3aXRjaCIKIAotICB3YWtldXAgLSBUcmFjZXMgYW5kIHJlY29yZHMgdGhlIG1heCBsYXRlbmN5IHRoYXQgaXQgdGFrZXMgZm9yCi0JCXRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdG8gZ2V0IHNjaGVkdWxlZCBhZnRlcgotCQlpdCBoYXMgYmVlbiB3b2tlbiB1cC4KKwlUcmFjZXMgdGhlIGNvbnRleHQgc3dpdGNoZXMgYW5kIHdha2V1cHMgYmV0d2VlbiB0YXNrcy4KIAotICBub3AgLSBUaGlzIGlzIG5vdCBhIHRyYWNlci4gVG8gcmVtb3ZlIGFsbCB0cmFjZXJzIGZyb20gdHJhY2luZwotCQlzaW1wbHkgZWNobyAibm9wIiBpbnRvIGN1cnJlbnRfdHJhY2VyLgorICAiaXJxc29mZiIKKworCVRyYWNlcyB0aGUgYXJlYXMgdGhhdCBkaXNhYmxlIGludGVycnVwdHMgYW5kIHNhdmVzCisJdGhlIHRyYWNlIHdpdGggdGhlIGxvbmdlc3QgbWF4IGxhdGVuY3kuCisJU2VlIHRyYWNpbmdfbWF4X2xhdGVuY3kuIFdoZW4gYSBuZXcgbWF4IGlzIHJlY29yZGVkLAorCWl0IHJlcGxhY2VzIHRoZSBvbGQgdHJhY2UuIEl0IGlzIGJlc3QgdG8gdmlldyB0aGlzCisJdHJhY2UgdmlhIHRoZSBsYXRlbmN5X3RyYWNlIGZpbGUuCisKKyAgInByZWVtcHRvZmYiCisKKwlTaW1pbGFyIHRvIGlycXNvZmYgYnV0IHRyYWNlcyBhbmQgcmVjb3JkcyB0aGUgYW1vdW50IG9mCisJdGltZSBmb3Igd2hpY2ggcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4KKworICAicHJlZW1wdGlycXNvZmYiCisKKwlTaW1pbGFyIHRvIGlycXNvZmYgYW5kIHByZWVtcHRvZmYsIGJ1dCB0cmFjZXMgYW5kCisJcmVjb3JkcyB0aGUgbGFyZ2VzdCB0aW1lIGZvciB3aGljaCBpcnFzIGFuZC9vciBwcmVlbXB0aW9uCisJaXMgZGlzYWJsZWQuCisKKyAgIndha2V1cCIKKworCVRyYWNlcyBhbmQgcmVjb3JkcyB0aGUgbWF4IGxhdGVuY3kgdGhhdCBpdCB0YWtlcyBmb3IKKwl0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRvIGdldCBzY2hlZHVsZWQgYWZ0ZXIKKwlpdCBoYXMgYmVlbiB3b2tlbiB1cC4KKworICAiaHctYnJhbmNoLXRyYWNlciIKKworCVVzZXMgdGhlIEJUUyBDUFUgZmVhdHVyZSBvbiB4ODYgQ1BVcyB0byB0cmFjZXMgYWxsCisJYnJhbmNoZXMgZXhlY3V0ZWQuCisKKyAgIm5vcCIKKworCVRoaXMgaXMgdGhlICJ0cmFjZSBub3RoaW5nIiB0cmFjZXIuIFRvIHJlbW92ZSBhbGwKKwl0cmFjZXJzIGZyb20gdHJhY2luZyBzaW1wbHkgZWNobyAibm9wIiBpbnRvCisJY3VycmVudF90cmFjZXIuCiAKIAogRXhhbXBsZXMgb2YgdXNpbmcgdGhlIHRyYWNlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IZXJlIGFyZSB0eXBpY2FsIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSB0cmFjZXJzIHdoZW4gY29udHJvbGxpbmcgdGhlbSBvbmx5Ci13aXRoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAod2l0aG91dCB1c2luZyBhbnkgdXNlci1sYW5kIHV0aWxpdGllcykuCitIZXJlIGFyZSB0eXBpY2FsIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSB0cmFjZXJzIHdoZW4gY29udHJvbGxpbmcKK3RoZW0gb25seSB3aXRoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAod2l0aG91dCB1c2luZyBhbnkKK3VzZXItbGFuZCB1dGlsaXRpZXMpLgogCiBPdXRwdXQgZm9ybWF0OgogLS0tLS0tLS0tLS0tLS0KQEAgLTE4NywxNiArMjUxLDE2IEBACiAgICAgICAgICAgICBiYXNoLTQyNTEgIFswMV0gMTAxNTIuNTgzODU1OiBfYXRvbWljX2RlY19hbmRfbG9jayA8LWRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0KIAotQSBoZWFkZXIgaXMgcHJpbnRlZCB3aXRoIHRoZSB0cmFjZXIgbmFtZSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSB0cmFjZS4KLUluIHRoaXMgY2FzZSB0aGUgdHJhY2VyIGlzICJmdW5jdGlvbiIuIFRoZW4gYSBoZWFkZXIgc2hvd2luZyB0aGUgZm9ybWF0LiBUYXNrCi1uYW1lICJiYXNoIiwgdGhlIHRhc2sgUElEICI0MjUxIiwgdGhlIENQVSB0aGF0IGl0IHdhcyBydW5uaW5nIG9uCi0iMDEiLCB0aGUgdGltZXN0YW1wIGluIDxzZWNzPi48dXNlY3M+IGZvcm1hdCwgdGhlIGZ1bmN0aW9uIG5hbWUgdGhhdCB3YXMKLXRyYWNlZCAicGF0aF9wdXQiIGFuZCB0aGUgcGFyZW50IGZ1bmN0aW9uIHRoYXQgY2FsbGVkIHRoaXMgZnVuY3Rpb24KLSJwYXRoX3dhbGsiLiBUaGUgdGltZXN0YW1wIGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMKLWVudGVyZWQuCitBIGhlYWRlciBpcyBwcmludGVkIHdpdGggdGhlIHRyYWNlciBuYW1lIHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkKK3RoZSB0cmFjZS4gSW4gdGhpcyBjYXNlIHRoZSB0cmFjZXIgaXMgImZ1bmN0aW9uIi4gVGhlbiBhIGhlYWRlcgorc2hvd2luZyB0aGUgZm9ybWF0LiBUYXNrIG5hbWUgImJhc2giLCB0aGUgdGFzayBQSUQgIjQyNTEiLCB0aGUKK0NQVSB0aGF0IGl0IHdhcyBydW5uaW5nIG9uICIwMSIsIHRoZSB0aW1lc3RhbXAgaW4gPHNlY3M+Ljx1c2Vjcz4KK2Zvcm1hdCwgdGhlIGZ1bmN0aW9uIG5hbWUgdGhhdCB3YXMgdHJhY2VkICJwYXRoX3B1dCIgYW5kIHRoZQorcGFyZW50IGZ1bmN0aW9uIHRoYXQgY2FsbGVkIHRoaXMgZnVuY3Rpb24gInBhdGhfd2FsayIuIFRoZQordGltZXN0YW1wIGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZW50ZXJlZC4KIAotVGhlIHNjaGVkX3N3aXRjaCB0cmFjZXIgYWxzbyBpbmNsdWRlcyB0cmFjaW5nIG9mIHRhc2sgd2FrZXVwcyBhbmQKLWNvbnRleHQgc3dpdGNoZXMuCitUaGUgc2NoZWRfc3dpdGNoIHRyYWNlciBhbHNvIGluY2x1ZGVzIHRyYWNpbmcgb2YgdGFzayB3YWtldXBzCithbmQgY29udGV4dCBzd2l0Y2hlcy4KIAogICAgICBrc29mdGlycWQvMS03ICAgICBbMDFdICAxNDUzLjA3MDAxMzogICAgICA3OjExNTpSICAgKyAgMjkxNjoxMTU6UwogICAgICBrc29mdGlycWQvMS03ICAgICBbMDFdICAxNDUzLjA3MDAxMzogICAgICA3OjExNTpSICAgKyAgICAxMDoxMTU6UwpAQCAtMjA1LDggKzI2OSw4IEBACiAgICAgIGtvbmRlbWFuZC8xLTI5MTYgIFswMV0gIDE0NTMuMDcwMDEzOiAgIDI5MTY6MTE1OlMgPT0+ICAgICA3OjExNTpSCiAgICAgIGtzb2Z0aXJxZC8xLTcgICAgIFswMV0gIDE0NTMuMDcwMDEzOiAgICAgIDc6MTE1OlMgPT0+ICAgICAwOjE0MDpSCiAKLVdha2UgdXBzIGFyZSByZXByZXNlbnRlZCBieSBhICIrIiBhbmQgdGhlIGNvbnRleHQgc3dpdGNoZXMgYXJlIHNob3duIGFzCi0iPT0+Ii4gIFRoZSBmb3JtYXQgaXM6CitXYWtlIHVwcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSAiKyIgYW5kIHRoZSBjb250ZXh0IHN3aXRjaGVzIGFyZQorc2hvd24gYXMgIj09PiIuICBUaGUgZm9ybWF0IGlzOgogCiAgQ29udGV4dCBzd2l0Y2hlczoKIApAQCAtMjIwLDE5ICsyODQsMjAgQEAKIAogICA8cGlkPjo8cHJpbz46PHN0YXRlPiAgICArICA8cGlkPjo8cHJpbz46PHN0YXRlPgogCi1UaGUgcHJpbyBpcyB0aGUgaW50ZXJuYWwga2VybmVsIHByaW9yaXR5LCB3aGljaCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUKLXByaW9yaXR5IHRoYXQgaXMgdXN1YWxseSBkaXNwbGF5ZWQgYnkgdXNlci1zcGFjZSB0b29scy4gWmVybyByZXByZXNlbnRzCi10aGUgaGlnaGVzdCBwcmlvcml0eSAoOTkpLiBQcmlvIDEwMCBzdGFydHMgdGhlICJuaWNlIiBwcmlvcml0aWVzIHdpdGgKLTEwMCBiZWluZyBlcXVhbCB0byBuaWNlIC0yMCBhbmQgMTM5IGJlaW5nIG5pY2UgMTkuIFRoZSBwcmlvICIxNDAiIGlzCi1yZXNlcnZlZCBmb3IgdGhlIGlkbGUgdGFzayB3aGljaCBpcyB0aGUgbG93ZXN0IHByaW9yaXR5IHRocmVhZCAocGlkIDApLgorVGhlIHByaW8gaXMgdGhlIGludGVybmFsIGtlcm5lbCBwcmlvcml0eSwgd2hpY2ggaXMgdGhlIGludmVyc2UKK29mIHRoZSBwcmlvcml0eSB0aGF0IGlzIHVzdWFsbHkgZGlzcGxheWVkIGJ5IHVzZXItc3BhY2UgdG9vbHMuCitaZXJvIHJlcHJlc2VudHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgKDk5KS4gUHJpbyAxMDAgc3RhcnRzIHRoZQorIm5pY2UiIHByaW9yaXRpZXMgd2l0aCAxMDAgYmVpbmcgZXF1YWwgdG8gbmljZSAtMjAgYW5kIDEzOSBiZWluZworbmljZSAxOS4gVGhlIHByaW8gIjE0MCIgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBpZGxlIHRhc2sgd2hpY2ggaXMKK3RoZSBsb3dlc3QgcHJpb3JpdHkgdGhyZWFkIChwaWQgMCkuCiAKIAogTGF0ZW5jeSB0cmFjZSBmb3JtYXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZvciB0cmFjZXMgdGhhdCBkaXNwbGF5IGxhdGVuY3kgdGltZXMsIHRoZSBsYXRlbmN5X3RyYWNlIGZpbGUgZ2l2ZXMKLXNvbWV3aGF0IG1vcmUgaW5mb3JtYXRpb24gdG8gc2VlIHdoeSBhIGxhdGVuY3kgaGFwcGVuZWQuIEhlcmUgaXMgYSB0eXBpY2FsCi10cmFjZS4KK0ZvciB0cmFjZXMgdGhhdCBkaXNwbGF5IGxhdGVuY3kgdGltZXMsIHRoZSBsYXRlbmN5X3RyYWNlIGZpbGUKK2dpdmVzIHNvbWV3aGF0IG1vcmUgaW5mb3JtYXRpb24gdG8gc2VlIHdoeSBhIGxhdGVuY3kgaGFwcGVuZWQuCitIZXJlIGlzIGEgdHlwaWNhbCB0cmFjZS4KIAogIyB0cmFjZXI6IGlycXNvZmYKICMKQEAgLTI1OSwyMCArMzI0LDIwIEBACiAgIDxpZGxlPi0wICAgICAwZC5zMSAgIDk4dXMgOiB0cmFjZV9oYXJkaXJxc19vbiAoZG9fc29mdGlycSkKIAogCitUaGlzIHNob3dzIHRoYXQgdGhlIGN1cnJlbnQgdHJhY2VyIGlzICJpcnFzb2ZmIiB0cmFjaW5nIHRoZSB0aW1lCitmb3Igd2hpY2ggaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkLiBJdCBnaXZlcyB0aGUgdHJhY2UgdmVyc2lvbgorYW5kIHRoZSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgdXBvbiB3aGljaCB0aGlzIHdhcyBleGVjdXRlZCBvbgorKDIuNi4yNi1yYzgpLiBUaGVuIGl0IGRpc3BsYXlzIHRoZSBtYXggbGF0ZW5jeSBpbiBtaWNyb3NlY3MgKDk3Cit1cykuIFRoZSBudW1iZXIgb2YgdHJhY2UgZW50cmllcyBkaXNwbGF5ZWQgYW5kIHRoZSB0b3RhbCBudW1iZXIKK3JlY29yZGVkIChib3RoIGFyZSB0aHJlZTogIzMvMykuIFRoZSB0eXBlIG9mIHByZWVtcHRpb24gdGhhdCB3YXMKK3VzZWQgKFBSRUVNUFQpLiBWUCwgS1AsIFNQLCBhbmQgSFAgYXJlIGFsd2F5cyB6ZXJvIGFuZCBhcmUKK3Jlc2VydmVkIGZvciBsYXRlciB1c2UuICNQIGlzIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVVMgKCNQOjIpLgogCi1UaGlzIHNob3dzIHRoYXQgdGhlIGN1cnJlbnQgdHJhY2VyIGlzICJpcnFzb2ZmIiB0cmFjaW5nIHRoZSB0aW1lIGZvciB3aGljaAotaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkLiBJdCBnaXZlcyB0aGUgdHJhY2UgdmVyc2lvbiBhbmQgdGhlIHZlcnNpb24KLW9mIHRoZSBrZXJuZWwgdXBvbiB3aGljaCB0aGlzIHdhcyBleGVjdXRlZCBvbiAoMi42LjI2LXJjOCkuIFRoZW4gaXQgZGlzcGxheXMKLXRoZSBtYXggbGF0ZW5jeSBpbiBtaWNyb3NlY3MgKDk3IHVzKS4gVGhlIG51bWJlciBvZiB0cmFjZSBlbnRyaWVzIGRpc3BsYXllZAotYW5kIHRoZSB0b3RhbCBudW1iZXIgcmVjb3JkZWQgKGJvdGggYXJlIHRocmVlOiAjMy8zKS4gVGhlIHR5cGUgb2YKLXByZWVtcHRpb24gdGhhdCB3YXMgdXNlZCAoUFJFRU1QVCkuIFZQLCBLUCwgU1AsIGFuZCBIUCBhcmUgYWx3YXlzIHplcm8KLWFuZCBhcmUgcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZS4gI1AgaXMgdGhlIG51bWJlciBvZiBvbmxpbmUgQ1BVUyAoI1A6MikuCitUaGUgdGFzayBpcyB0aGUgcHJvY2VzcyB0aGF0IHdhcyBydW5uaW5nIHdoZW4gdGhlIGxhdGVuY3kKK29jY3VycmVkLiAoc3dhcHBlciBwaWQ6IDApLgogCi1UaGUgdGFzayBpcyB0aGUgcHJvY2VzcyB0aGF0IHdhcyBydW5uaW5nIHdoZW4gdGhlIGxhdGVuY3kgb2NjdXJyZWQuCi0oc3dhcHBlciBwaWQ6IDApLgotCi1UaGUgc3RhcnQgYW5kIHN0b3AgKHRoZSBmdW5jdGlvbnMgaW4gd2hpY2ggdGhlIGludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBhbmQKLWVuYWJsZWQgcmVzcGVjdGl2ZWx5KSB0aGF0IGNhdXNlZCB0aGUgbGF0ZW5jaWVzOgorVGhlIHN0YXJ0IGFuZCBzdG9wICh0aGUgZnVuY3Rpb25zIGluIHdoaWNoIHRoZSBpbnRlcnJ1cHRzIHdlcmUKK2Rpc2FibGVkIGFuZCBlbmFibGVkIHJlc3BlY3RpdmVseSkgdGhhdCBjYXVzZWQgdGhlIGxhdGVuY2llczoKIAogICBhcGljX3RpbWVyX2ludGVycnVwdCBpcyB3aGVyZSB0aGUgaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkLgogICBkb19zb2Z0aXJxIGlzIHdoZXJlIHRoZXkgd2VyZSBlbmFibGVkIGFnYWluLgpAQCAtMzA4LDEyICszNzMsMTIgQEAKIAlsYXRlbmN5X3RyYWNlIGZpbGUgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0cmFjZS4KIAogICBkZWxheTogVGhpcyBpcyBqdXN0IHRvIGhlbHAgY2F0Y2ggeW91ciBleWUgYSBiaXQgYmV0dGVyLiBBbmQKLQluZWVkcyB0byBiZSBmaXhlZCB0byBiZSBvbmx5IHJlbGF0aXZlIHRvIHRoZSBzYW1lIENQVS4KLQlUaGUgbWFya3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzCi0JY3VycmVudCB0cmFjZSBhbmQgdGhlIG5leHQgdHJhY2UuCi0JICchJyAtIGdyZWF0ZXIgdGhhbiBwcmVlbXB0X21hcmtfdGhyZXNoIChkZWZhdWx0IDEwMCkKLQkgJysnIC0gZ3JlYXRlciB0aGFuIDEgbWljcm9zZWNvbmQKLQkgJyAnIC0gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEgbWljcm9zZWNvbmQuCisJIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGJlIG9ubHkgcmVsYXRpdmUgdG8gdGhlIHNhbWUgQ1BVLgorCSBUaGUgbWFya3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzCisJIGN1cnJlbnQgdHJhY2UgYW5kIHRoZSBuZXh0IHRyYWNlLgorCSAgJyEnIC0gZ3JlYXRlciB0aGFuIHByZWVtcHRfbWFya190aHJlc2ggKGRlZmF1bHQgMTAwKQorCSAgJysnIC0gZ3JlYXRlciB0aGFuIDEgbWljcm9zZWNvbmQKKwkgICcgJyAtIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxIG1pY3Jvc2Vjb25kLgogCiAgIFRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIHRoZSAndHJhY2UnIGZpbGUuCiAKQEAgLTMyMSwxNCArMzg2LDE1IEBACiB0cmFjZV9vcHRpb25zCiAtLS0tLS0tLS0tLS0tCiAKLVRoZSB0cmFjZV9vcHRpb25zIGZpbGUgaXMgdXNlZCB0byBjb250cm9sIHdoYXQgZ2V0cyBwcmludGVkIGluIHRoZSB0cmFjZQotb3V0cHV0LiBUbyBzZWUgd2hhdCBpcyBhdmFpbGFibGUsIHNpbXBseSBjYXQgdGhlIGZpbGU6CitUaGUgdHJhY2Vfb3B0aW9ucyBmaWxlIGlzIHVzZWQgdG8gY29udHJvbCB3aGF0IGdldHMgcHJpbnRlZCBpbgordGhlIHRyYWNlIG91dHB1dC4gVG8gc2VlIHdoYXQgaXMgYXZhaWxhYmxlLCBzaW1wbHkgY2F0IHRoZSBmaWxlOgogCiAgIGNhdCAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCiAgIHByaW50LXBhcmVudCBub3N5bS1vZmZzZXQgbm9zeW0tYWRkciBub3ZlcmJvc2Ugbm9yYXcgbm9oZXggbm9iaW4gXAotIG5vYmxvY2sgbm9zdGFja3RyYWNlIG5vc2NoZWQtdHJlZSBub3VzZXJzdGFja3RyYWNlIG5vc3ltLXVzZXJvYmoKKyAgbm9ibG9jayBub3N0YWNrdHJhY2Ugbm9zY2hlZC10cmVlIG5vdXNlcnN0YWNrdHJhY2Ugbm9zeW0tdXNlcm9iagogCi1UbyBkaXNhYmxlIG9uZSBvZiB0aGUgb3B0aW9ucywgZWNobyBpbiB0aGUgb3B0aW9uIHByZXBlbmRlZCB3aXRoICJubyIuCitUbyBkaXNhYmxlIG9uZSBvZiB0aGUgb3B0aW9ucywgZWNobyBpbiB0aGUgb3B0aW9uIHByZXBlbmRlZCB3aXRoCisibm8iLgogCiAgIGVjaG8gbm9wcmludC1wYXJlbnQgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCiAKQEAgLTMzOCw4ICs0MDQsOCBAQAogCiBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnM6CiAKLSAgcHJpbnQtcGFyZW50IC0gT24gZnVuY3Rpb24gdHJhY2VzLCBkaXNwbGF5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0JCWFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNlZC4KKyAgcHJpbnQtcGFyZW50IC0gT24gZnVuY3Rpb24gdHJhY2VzLCBkaXNwbGF5IHRoZSBjYWxsaW5nIChwYXJlbnQpCisJCSBmdW5jdGlvbiBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvbiBiZWluZyB0cmFjZWQuCiAKICAgcHJpbnQtcGFyZW50OgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwgPC1zdHJpY3Rfc3RydG91bApAQCAtMzQ4LDE1ICs0MTQsMTYgQEAKICAgIGJhc2gtNDAwMCAgWzAxXSAgMTQ3Ny42MDY2OTQ6IHNpbXBsZV9zdHJ0b3VsCiAKIAotICBzeW0tb2Zmc2V0IC0gRGlzcGxheSBub3Qgb25seSB0aGUgZnVuY3Rpb24gbmFtZSwgYnV0IGFsc28gdGhlIG9mZnNldAotCQlpbiB0aGUgZnVuY3Rpb24uIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIHNlZWluZyBqdXN0Ci0JCSJrdGltZV9nZXQiLCB5b3Ugd2lsbCBzZWUgImt0aW1lX2dldCsweGIvMHgyMCIuCisgIHN5bS1vZmZzZXQgLSBEaXNwbGF5IG5vdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lLCBidXQgYWxzbyB0aGUKKwkgICAgICAgb2Zmc2V0IGluIHRoZSBmdW5jdGlvbi4gRm9yIGV4YW1wbGUsIGluc3RlYWQgb2YKKwkgICAgICAgc2VlaW5nIGp1c3QgImt0aW1lX2dldCIsIHlvdSB3aWxsIHNlZQorCSAgICAgICAia3RpbWVfZ2V0KzB4Yi8weDIwIi4KIAogICBzeW0tb2Zmc2V0OgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwrMHg2LzB4YTAKIAotICBzeW0tYWRkciAtIHRoaXMgd2lsbCBhbHNvIGRpc3BsYXkgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgYXMgd2VsbCBhcwotCQl0aGUgZnVuY3Rpb24gbmFtZS4KKyAgc3ltLWFkZHIgLSB0aGlzIHdpbGwgYWxzbyBkaXNwbGF5IHRoZSBmdW5jdGlvbiBhZGRyZXNzIGFzIHdlbGwKKwkgICAgIGFzIHRoZSBmdW5jdGlvbiBuYW1lLgogCiAgIHN5bS1hZGRyOgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwgPGMwMzM5MzQ2PgpAQCAtMzY2LDM1ICs0MzMsNDEgQEAKICAgICBiYXNoICA0MDAwIDEgMCAwMDAwMDAwMCAwMDAxMGE5NSBbNTgxMjdkMjZdIDE3MjAuNDE1bXMgXAogICAgICgrMC4wMDBtcyk6IHNpbXBsZV9zdHJ0b3VsIChzdHJpY3Rfc3RydG91bCkKIAotICByYXcgLSBUaGlzIHdpbGwgZGlzcGxheSByYXcgbnVtYmVycy4gVGhpcyBvcHRpb24gaXMgYmVzdCBmb3IgdXNlIHdpdGgKLQl1c2VyIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiB0cmFuc2xhdGUgdGhlIHJhdyBudW1iZXJzIGJldHRlciB0aGFuCi0JaGF2aW5nIGl0IGRvbmUgaW4gdGhlIGtlcm5lbC4KKyAgcmF3IC0gVGhpcyB3aWxsIGRpc3BsYXkgcmF3IG51bWJlcnMuIFRoaXMgb3B0aW9uIGlzIGJlc3QgZm9yCisJdXNlIHdpdGggdXNlciBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gdHJhbnNsYXRlIHRoZSByYXcKKwludW1iZXJzIGJldHRlciB0aGFuIGhhdmluZyBpdCBkb25lIGluIHRoZSBrZXJuZWwuCiAKLSAgaGV4IC0gU2ltaWxhciB0byByYXcsIGJ1dCB0aGUgbnVtYmVycyB3aWxsIGJlIGluIGEgaGV4YWRlY2ltYWwgZm9ybWF0LgorICBoZXggLSBTaW1pbGFyIHRvIHJhdywgYnV0IHRoZSBudW1iZXJzIHdpbGwgYmUgaW4gYSBoZXhhZGVjaW1hbAorCWZvcm1hdC4KIAogICBiaW4gLSBUaGlzIHdpbGwgcHJpbnQgb3V0IHRoZSBmb3JtYXRzIGluIHJhdyBiaW5hcnkuCiAKICAgYmxvY2sgLSBUQkQgKG5lZWRzIHVwZGF0ZSkKIAotICBzdGFja3RyYWNlIC0gVGhpcyBpcyBvbmUgb2YgdGhlIG9wdGlvbnMgdGhhdCBjaGFuZ2VzIHRoZSB0cmFjZSBpdHNlbGYuCi0JCVdoZW4gYSB0cmFjZSBpcyByZWNvcmRlZCwgc28gaXMgdGhlIHN0YWNrIG9mIGZ1bmN0aW9ucy4KLQkJVGhpcyBhbGxvd3MgZm9yIGJhY2sgdHJhY2VzIG9mIHRyYWNlIHNpdGVzLgorICBzdGFja3RyYWNlIC0gVGhpcyBpcyBvbmUgb2YgdGhlIG9wdGlvbnMgdGhhdCBjaGFuZ2VzIHRoZSB0cmFjZQorCSAgICAgICBpdHNlbGYuIFdoZW4gYSB0cmFjZSBpcyByZWNvcmRlZCwgc28gaXMgdGhlIHN0YWNrCisJICAgICAgIG9mIGZ1bmN0aW9ucy4gVGhpcyBhbGxvd3MgZm9yIGJhY2sgdHJhY2VzIG9mCisJICAgICAgIHRyYWNlIHNpdGVzLgogCi0gIHVzZXJzdGFja3RyYWNlIC0gVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgdHJhY2UuCi0JCSAgIEl0IHJlY29yZHMgYSBzdGFja3RyYWNlIG9mIHRoZSBjdXJyZW50IHVzZXJzcGFjZSB0aHJlYWQuCisgIHVzZXJzdGFja3RyYWNlIC0gVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgdHJhY2UuIEl0IHJlY29yZHMgYQorCQkgICBzdGFja3RyYWNlIG9mIHRoZSBjdXJyZW50IHVzZXJzcGFjZSB0aHJlYWQuCiAKLSAgc3ltLXVzZXJvYmogLSB3aGVuIHVzZXIgc3RhY2t0cmFjZSBhcmUgZW5hYmxlZCwgbG9vayB1cCB3aGljaCBvYmplY3QgdGhlCi0JCWFkZHJlc3MgYmVsb25ncyB0bywgYW5kIHByaW50IGEgcmVsYXRpdmUgYWRkcmVzcwotCQlUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gQVNMUiBpcyBvbiwgb3RoZXJ3aXNlIHlvdSBkb24ndAotCQlnZXQgYSBjaGFuY2UgdG8gcmVzb2x2ZSB0aGUgYWRkcmVzcyB0byBvYmplY3QvZmlsZS9saW5lIGFmdGVyIHRoZSBhcHAgaXMgbm8KLQkJbG9uZ2VyIHJ1bm5pbmcKKyAgc3ltLXVzZXJvYmogLSB3aGVuIHVzZXIgc3RhY2t0cmFjZSBhcmUgZW5hYmxlZCwgbG9vayB1cCB3aGljaAorCQlvYmplY3QgdGhlIGFkZHJlc3MgYmVsb25ncyB0bywgYW5kIHByaW50IGEKKwkJcmVsYXRpdmUgYWRkcmVzcy4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuCisJCUFTTFIgaXMgb24sIG90aGVyd2lzZSB5b3UgZG9uJ3QgZ2V0IGEgY2hhbmNlIHRvCisJCXJlc29sdmUgdGhlIGFkZHJlc3MgdG8gb2JqZWN0L2ZpbGUvbGluZSBhZnRlcgorCQl0aGUgYXBwIGlzIG5vIGxvbmdlciBydW5uaW5nCiAKLQkJVGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgd2hlbiB5b3UgcmVhZCB0cmFjZSx0cmFjZV9waXBlLGxhdGVuY3lfdHJhY2UuIEV4YW1wbGU6CisJCVRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIHdoZW4geW91IHJlYWQKKwkJdHJhY2UsdHJhY2VfcGlwZSxsYXRlbmN5X3RyYWNlLiBFeGFtcGxlOgogCiAJCWEub3V0LTE2MjMgIFswMDBdIDQwODc0LjQ2NTA2ODogL3Jvb3QvYS5vdXRbKzB4NDgwXSA8LS9yb290L2Eub3V0WyswCiB4NDk0XSA8LSAvcm9vdC9hLm91dFsrMHg0YThdIDwtIC9saWIvbGliYy0yLjcuc29bKzB4MWUxYTZdCiAKLSAgc2NoZWQtdHJlZSAtIFRCRCAoYW55IHVzZXJzPz8pCisgIHNjaGVkLXRyZWUgLSB0cmFjZSBhbGwgdGFza3MgdGhhdCBhcmUgb24gdGhlIHJ1bnF1ZXVlLCBhdAorCSAgICAgICBldmVyeSBzY2hlZHVsaW5nIGV2ZW50LiBXaWxsIGFkZCBvdmVyaGVhZCBpZgorCSAgICAgICB0aGVyZSdzIGEgbG90IG9mIHRhc2tzIHJ1bm5pbmcgYXQgb25jZS4KIAogCiBzY2hlZF9zd2l0Y2gKQEAgLTQzMSwxOCArNTA0LDE5IEBACiAgWy4uLl0KIAogCi1BcyB3ZSBoYXZlIGRpc2N1c3NlZCBwcmV2aW91c2x5IGFib3V0IHRoaXMgZm9ybWF0LCB0aGUgaGVhZGVyIHNob3dzCi10aGUgbmFtZSBvZiB0aGUgdHJhY2UgYW5kIHBvaW50cyB0byB0aGUgb3B0aW9ucy4gVGhlICJGVU5DVElPTiIKLWlzIGEgbWlzbm9tZXIgc2luY2UgaGVyZSBpdCByZXByZXNlbnRzIHRoZSB3YWtlIHVwcyBhbmQgY29udGV4dAotc3dpdGNoZXMuCitBcyB3ZSBoYXZlIGRpc2N1c3NlZCBwcmV2aW91c2x5IGFib3V0IHRoaXMgZm9ybWF0LCB0aGUgaGVhZGVyCitzaG93cyB0aGUgbmFtZSBvZiB0aGUgdHJhY2UgYW5kIHBvaW50cyB0byB0aGUgb3B0aW9ucy4gVGhlCisiRlVOQ1RJT04iIGlzIGEgbWlzbm9tZXIgc2luY2UgaGVyZSBpdCByZXByZXNlbnRzIHRoZSB3YWtlIHVwcworYW5kIGNvbnRleHQgc3dpdGNoZXMuCiAKLVRoZSBzY2hlZF9zd2l0Y2ggZmlsZSBvbmx5IGxpc3RzIHRoZSB3YWtlIHVwcyAocmVwcmVzZW50ZWQgd2l0aCAnKycpCi1hbmQgY29udGV4dCBzd2l0Y2hlcyAoJz09PicpIHdpdGggdGhlIHByZXZpb3VzIHRhc2sgb3IgY3VycmVudCB0YXNrCi1maXJzdCBmb2xsb3dlZCBieSB0aGUgbmV4dCB0YXNrIG9yIHRhc2sgd2FraW5nIHVwLiBUaGUgZm9ybWF0IGZvciBib3RoCi1vZiB0aGVzZSBpcyBQSUQ6S0VSTkVMLVBSSU86VEFTSy1TVEFURS4gUmVtZW1iZXIgdGhhdCB0aGUgS0VSTkVMLVBSSU8KLWlzIHRoZSBpbnZlcnNlIG9mIHRoZSBhY3R1YWwgcHJpb3JpdHkgd2l0aCB6ZXJvICgwKSBiZWluZyB0aGUgaGlnaGVzdAotcHJpb3JpdHkgYW5kIHRoZSBuaWNlIHZhbHVlcyBzdGFydGluZyBhdCAxMDAgKG5pY2UgLTIwKS4gQmVsb3cgaXMKLWEgcXVpY2sgY2hhcnQgdG8gbWFwIHRoZSBrZXJuZWwgcHJpb3JpdHkgdG8gdXNlciBsYW5kIHByaW9yaXRpZXMuCitUaGUgc2NoZWRfc3dpdGNoIGZpbGUgb25seSBsaXN0cyB0aGUgd2FrZSB1cHMgKHJlcHJlc2VudGVkIHdpdGgKKycrJykgYW5kIGNvbnRleHQgc3dpdGNoZXMgKCc9PT4nKSB3aXRoIHRoZSBwcmV2aW91cyB0YXNrIG9yCitjdXJyZW50IHRhc2sgZmlyc3QgZm9sbG93ZWQgYnkgdGhlIG5leHQgdGFzayBvciB0YXNrIHdha2luZyB1cC4KK1RoZSBmb3JtYXQgZm9yIGJvdGggb2YgdGhlc2UgaXMgUElEOktFUk5FTC1QUklPOlRBU0stU1RBVEUuCitSZW1lbWJlciB0aGF0IHRoZSBLRVJORUwtUFJJTyBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgYWN0dWFsCitwcmlvcml0eSB3aXRoIHplcm8gKDApIGJlaW5nIHRoZSBoaWdoZXN0IHByaW9yaXR5IGFuZCB0aGUgbmljZQordmFsdWVzIHN0YXJ0aW5nIGF0IDEwMCAobmljZSAtMjApLiBCZWxvdyBpcyBhIHF1aWNrIGNoYXJ0IHRvIG1hcAordGhlIGtlcm5lbCBwcmlvcml0eSB0byB1c2VyIGxhbmQgcHJpb3JpdGllcy4KIAogICBLZXJuZWwgcHJpb3JpdHk6IDAgdG8gOTkgICAgPT0+IHVzZXIgUlQgcHJpb3JpdHkgOTkgdG8gMAogICBLZXJuZWwgcHJpb3JpdHk6IDEwMCB0byAxMzkgPT0+IHVzZXIgbmljZSAtMjAgdG8gMTkKQEAgLTQ2MywxMCArNTM3LDEwIEBACiBmdHJhY2VfZW5hYmxlZAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIGZvbGxvd2luZyB0cmFjZXJzIChsaXN0ZWQgYmVsb3cpIGdpdmUgZGlmZmVyZW50IG91dHB1dCBkZXBlbmRpbmcKLW9uIHdoZXRoZXIgb3Igbm90IHRoZSBzeXNjdGwgZnRyYWNlX2VuYWJsZWQgaXMgc2V0LiBUbyBzZXQgZnRyYWNlX2VuYWJsZWQsCi1vbmUgY2FuIGVpdGhlciB1c2UgdGhlIHN5c2N0bCBmdW5jdGlvbiBvciBzZXQgaXQgdmlhIHRoZSBwcm9jCi1maWxlIHN5c3RlbSBpbnRlcmZhY2UuCitUaGUgZm9sbG93aW5nIHRyYWNlcnMgKGxpc3RlZCBiZWxvdykgZ2l2ZSBkaWZmZXJlbnQgb3V0cHV0CitkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhlIHN5c2N0bCBmdHJhY2VfZW5hYmxlZCBpcyBzZXQuIFRvCitzZXQgZnRyYWNlX2VuYWJsZWQsIG9uZSBjYW4gZWl0aGVyIHVzZSB0aGUgc3lzY3RsIGZ1bmN0aW9uIG9yCitzZXQgaXQgdmlhIHRoZSBwcm9jIGZpbGUgc3lzdGVtIGludGVyZmFjZS4KIAogICBzeXNjdGwga2VybmVsLmZ0cmFjZV9lbmFibGVkPTEKIApAQCAtNDc0LDEyICs1NDgsMTIgQEAKIAogICBlY2hvIDEgPiAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkCiAKLVRvIGRpc2FibGUgZnRyYWNlX2VuYWJsZWQgc2ltcGx5IHJlcGxhY2UgdGhlICcxJyB3aXRoICcwJyBpbgotdGhlIGFib3ZlIGNvbW1hbmRzLgorVG8gZGlzYWJsZSBmdHJhY2VfZW5hYmxlZCBzaW1wbHkgcmVwbGFjZSB0aGUgJzEnIHdpdGggJzAnIGluIHRoZQorYWJvdmUgY29tbWFuZHMuCiAKLVdoZW4gZnRyYWNlX2VuYWJsZWQgaXMgc2V0IHRoZSB0cmFjZXJzIHdpbGwgYWxzbyByZWNvcmQgdGhlIGZ1bmN0aW9ucwotdGhhdCBhcmUgd2l0aGluIHRoZSB0cmFjZS4gVGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgdHJhY2Vycwotd2lsbCBhbHNvIHNob3cgYW4gZXhhbXBsZSB3aXRoIGZ0cmFjZSBlbmFibGVkLgorV2hlbiBmdHJhY2VfZW5hYmxlZCBpcyBzZXQgdGhlIHRyYWNlcnMgd2lsbCBhbHNvIHJlY29yZCB0aGUKK2Z1bmN0aW9ucyB0aGF0IGFyZSB3aXRoaW4gdGhlIHRyYWNlLiBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZQordHJhY2VycyB3aWxsIGFsc28gc2hvdyBhbiBleGFtcGxlIHdpdGggZnRyYWNlIGVuYWJsZWQuCiAKIAogaXJxc29mZgpAQCAtNDg3LDE3ICs1NjEsMTggQEAKIAogV2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgdGhlIENQVSBjYW4gbm90IHJlYWN0IHRvIGFueSBvdGhlcgogZXh0ZXJuYWwgZXZlbnQgKGJlc2lkZXMgTk1JcyBhbmQgU01JcykuIFRoaXMgcHJldmVudHMgdGhlIHRpbWVyCi1pbnRlcnJ1cHQgZnJvbSB0cmlnZ2VyaW5nIG9yIHRoZSBtb3VzZSBpbnRlcnJ1cHQgZnJvbSBsZXR0aW5nIHRoZQota2VybmVsIGtub3cgb2YgYSBuZXcgbW91c2UgZXZlbnQuIFRoZSByZXN1bHQgaXMgYSBsYXRlbmN5IHdpdGggdGhlCi1yZWFjdGlvbiB0aW1lLgoraW50ZXJydXB0IGZyb20gdHJpZ2dlcmluZyBvciB0aGUgbW91c2UgaW50ZXJydXB0IGZyb20gbGV0dGluZwordGhlIGtlcm5lbCBrbm93IG9mIGEgbmV3IG1vdXNlIGV2ZW50LiBUaGUgcmVzdWx0IGlzIGEgbGF0ZW5jeQord2l0aCB0aGUgcmVhY3Rpb24gdGltZS4KIAotVGhlIGlycXNvZmYgdHJhY2VyIHRyYWNrcyB0aGUgdGltZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCi1XaGVuIGEgbmV3IG1heGltdW0gbGF0ZW5jeSBpcyBoaXQsIHRoZSB0cmFjZXIgc2F2ZXMgdGhlIHRyYWNlIGxlYWRpbmcgdXAKLXRvIHRoYXQgbGF0ZW5jeSBwb2ludCBzbyB0aGF0IGV2ZXJ5IHRpbWUgYSBuZXcgbWF4aW11bSBpcyByZWFjaGVkLCB0aGUgb2xkCi1zYXZlZCB0cmFjZSBpcyBkaXNjYXJkZWQgYW5kIHRoZSBuZXcgdHJhY2UgaXMgc2F2ZWQuCitUaGUgaXJxc29mZiB0cmFjZXIgdHJhY2tzIHRoZSB0aW1lIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZQorZGlzYWJsZWQuIFdoZW4gYSBuZXcgbWF4aW11bSBsYXRlbmN5IGlzIGhpdCwgdGhlIHRyYWNlciBzYXZlcwordGhlIHRyYWNlIGxlYWRpbmcgdXAgdG8gdGhhdCBsYXRlbmN5IHBvaW50IHNvIHRoYXQgZXZlcnkgdGltZSBhCituZXcgbWF4aW11bSBpcyByZWFjaGVkLCB0aGUgb2xkIHNhdmVkIHRyYWNlIGlzIGRpc2NhcmRlZCBhbmQgdGhlCituZXcgdHJhY2UgaXMgc2F2ZWQuCiAKLVRvIHJlc2V0IHRoZSBtYXhpbXVtLCBlY2hvIDAgaW50byB0cmFjaW5nX21heF9sYXRlbmN5LiBIZXJlIGlzIGFuCi1leGFtcGxlOgorVG8gcmVzZXQgdGhlIG1heGltdW0sIGVjaG8gMCBpbnRvIHRyYWNpbmdfbWF4X2xhdGVuY3kuIEhlcmUgaXMKK2FuIGV4YW1wbGU6CiAKICAjIGVjaG8gaXJxc29mZiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC01MzIsMTAgKzYwNywxMSBAQAogCiAKIEhlcmUgd2Ugc2VlIHRoYXQgdGhhdCB3ZSBoYWQgYSBsYXRlbmN5IG9mIDEyIG1pY3Jvc2VjcyAod2hpY2ggaXMKLXZlcnkgZ29vZCkuIFRoZSBfd3JpdGVfbG9ja19pcnEgaW4gc3lzX3NldHBnaWQgZGlzYWJsZWQgaW50ZXJydXB0cy4KLVRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIDEyIGFuZCB0aGUgZGlzcGxheWVkIHRpbWVzdGFtcCAxNHVzIG9jY3VycmVkCi1iZWNhdXNlIHRoZSBjbG9jayB3YXMgaW5jcmVtZW50ZWQgYmV0d2VlbiB0aGUgdGltZSBvZiByZWNvcmRpbmcgdGhlIG1heAotbGF0ZW5jeSBhbmQgdGhlIHRpbWUgb2YgcmVjb3JkaW5nIHRoZSBmdW5jdGlvbiB0aGF0IGhhZCB0aGF0IGxhdGVuY3kuCit2ZXJ5IGdvb2QpLiBUaGUgX3dyaXRlX2xvY2tfaXJxIGluIHN5c19zZXRwZ2lkIGRpc2FibGVkCitpbnRlcnJ1cHRzLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAxMiBhbmQgdGhlIGRpc3BsYXllZAordGltZXN0YW1wIDE0dXMgb2NjdXJyZWQgYmVjYXVzZSB0aGUgY2xvY2sgd2FzIGluY3JlbWVudGVkCitiZXR3ZWVuIHRoZSB0aW1lIG9mIHJlY29yZGluZyB0aGUgbWF4IGxhdGVuY3kgYW5kIHRoZSB0aW1lIG9mCityZWNvcmRpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgaGFkIHRoYXQgbGF0ZW5jeS4KIAogTm90ZSB0aGUgYWJvdmUgZXhhbXBsZSBoYWQgZnRyYWNlX2VuYWJsZWQgbm90IHNldC4gSWYgd2Ugc2V0IHRoZQogZnRyYWNlX2VuYWJsZWQsIHdlIGdldCBhIG11Y2ggbGFyZ2VyIG91dHB1dDoKQEAgLTU4NiwyNCArNjYyLDI0IEBACiAKIAogSGVyZSB3ZSB0cmFjZWQgYSA1MCBtaWNyb3NlY29uZCBsYXRlbmN5LiBCdXQgd2UgYWxzbyBzZWUgYWxsIHRoZQotZnVuY3Rpb25zIHRoYXQgd2VyZSBjYWxsZWQgZHVyaW5nIHRoYXQgdGltZS4gTm90ZSB0aGF0IGJ5IGVuYWJsaW5nCi1mdW5jdGlvbiB0cmFjaW5nLCB3ZSBpbmN1ciBhbiBhZGRlZCBvdmVyaGVhZC4gVGhpcyBvdmVyaGVhZCBtYXkKLWV4dGVuZCB0aGUgbGF0ZW5jeSB0aW1lcy4gQnV0IG5ldmVydGhlbGVzcywgdGhpcyB0cmFjZSBoYXMgcHJvdmlkZWQKLXNvbWUgdmVyeSBoZWxwZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KK2Z1bmN0aW9ucyB0aGF0IHdlcmUgY2FsbGVkIGR1cmluZyB0aGF0IHRpbWUuIE5vdGUgdGhhdCBieQorZW5hYmxpbmcgZnVuY3Rpb24gdHJhY2luZywgd2UgaW5jdXIgYW4gYWRkZWQgb3ZlcmhlYWQuIFRoaXMKK292ZXJoZWFkIG1heSBleHRlbmQgdGhlIGxhdGVuY3kgdGltZXMuIEJ1dCBuZXZlcnRoZWxlc3MsIHRoaXMKK3RyYWNlIGhhcyBwcm92aWRlZCBzb21lIHZlcnkgaGVscGZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCiAKIAogcHJlZW1wdG9mZgogLS0tLS0tLS0tLQogCi1XaGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsIHdlIG1heSBiZSBhYmxlIHRvIHJlY2VpdmUgaW50ZXJydXB0cyBidXQKLXRoZSB0YXNrIGNhbm5vdCBiZSBwcmVlbXB0ZWQgYW5kIGEgaGlnaGVyIHByaW9yaXR5IHRhc2sgbXVzdCB3YWl0Ci1mb3IgcHJlZW1wdGlvbiB0byBiZSBlbmFibGVkIGFnYWluIGJlZm9yZSBpdCBjYW4gcHJlZW1wdCBhIGxvd2VyCi1wcmlvcml0eSB0YXNrLgorV2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLCB3ZSBtYXkgYmUgYWJsZSB0byByZWNlaXZlCitpbnRlcnJ1cHRzIGJ1dCB0aGUgdGFzayBjYW5ub3QgYmUgcHJlZW1wdGVkIGFuZCBhIGhpZ2hlcgorcHJpb3JpdHkgdGFzayBtdXN0IHdhaXQgZm9yIHByZWVtcHRpb24gdG8gYmUgZW5hYmxlZCBhZ2FpbgorYmVmb3JlIGl0IGNhbiBwcmVlbXB0IGEgbG93ZXIgcHJpb3JpdHkgdGFzay4KIAogVGhlIHByZWVtcHRvZmYgdHJhY2VyIHRyYWNlcyB0aGUgcGxhY2VzIHRoYXQgZGlzYWJsZSBwcmVlbXB0aW9uLgotTGlrZSB0aGUgaXJxc29mZiB0cmFjZXIsIGl0IHJlY29yZHMgdGhlIG1heGltdW0gbGF0ZW5jeSBmb3Igd2hpY2ggcHJlZW1wdGlvbgotd2FzIGRpc2FibGVkLiBUaGUgY29udHJvbCBvZiBwcmVlbXB0b2ZmIHRyYWNlciBpcyBtdWNoIGxpa2UgdGhlIGlycXNvZmYKLXRyYWNlci4KK0xpa2UgdGhlIGlycXNvZmYgdHJhY2VyLCBpdCByZWNvcmRzIHRoZSBtYXhpbXVtIGxhdGVuY3kgZm9yCit3aGljaCBwcmVlbXB0aW9uIHdhcyBkaXNhYmxlZC4gVGhlIGNvbnRyb2wgb2YgcHJlZW1wdG9mZiB0cmFjZXIKK2lzIG11Y2ggbGlrZSB0aGUgaXJxc29mZiB0cmFjZXIuCiAKICAjIGVjaG8gcHJlZW1wdG9mZiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC02MzcsMTEgKzcxMywxMiBAQAogICAgIHNzaGQtNDI2MSAgMGQuczEgICAzMHVzIDogdHJhY2VfcHJlZW1wdF9vbiAoX19kb19zb2Z0aXJxKQogCiAKLVRoaXMgaGFzIHNvbWUgbW9yZSBjaGFuZ2VzLiBQcmVlbXB0aW9uIHdhcyBkaXNhYmxlZCB3aGVuIGFuIGludGVycnVwdAotY2FtZSBpbiAobm90aWNlIHRoZSAnaCcpLCBhbmQgd2FzIGVuYWJsZWQgd2hpbGUgZG9pbmcgYSBzb2Z0aXJxLgotKG5vdGljZSB0aGUgJ3MnKS4gQnV0IHdlIGFsc28gc2VlIHRoYXQgaW50ZXJydXB0cyBoYXZlIGJlZW4gZGlzYWJsZWQKLXdoZW4gZW50ZXJpbmcgdGhlIHByZWVtcHQgb2ZmIHNlY3Rpb24gYW5kIGxlYXZpbmcgaXQgKHRoZSAnZCcpLgotV2UgZG8gbm90IGtub3cgaWYgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQgaW4gdGhlIG1lYW4gdGltZS4KK1RoaXMgaGFzIHNvbWUgbW9yZSBjaGFuZ2VzLiBQcmVlbXB0aW9uIHdhcyBkaXNhYmxlZCB3aGVuIGFuCitpbnRlcnJ1cHQgY2FtZSBpbiAobm90aWNlIHRoZSAnaCcpLCBhbmQgd2FzIGVuYWJsZWQgd2hpbGUgZG9pbmcKK2Egc29mdGlycS4gKG5vdGljZSB0aGUgJ3MnKS4gQnV0IHdlIGFsc28gc2VlIHRoYXQgaW50ZXJydXB0cworaGF2ZSBiZWVuIGRpc2FibGVkIHdoZW4gZW50ZXJpbmcgdGhlIHByZWVtcHQgb2ZmIHNlY3Rpb24gYW5kCitsZWF2aW5nIGl0ICh0aGUgJ2QnKS4gV2UgZG8gbm90IGtub3cgaWYgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQKK2luIHRoZSBtZWFuIHRpbWUuCiAKICMgdHJhY2VyOiBwcmVlbXB0b2ZmCiAjCkBAIC03MDAsMjggKzc3NywzMCBAQAogICAgIHNzaGQtNDI2MSAgMGQuczEgICA2NHVzIDogdHJhY2VfcHJlZW1wdF9vbiAoX19kb19zb2Z0aXJxKQogCiAKLVRoZSBhYm92ZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBwcmVlbXB0b2ZmIHRyYWNlIHdpdGggZnRyYWNlX2VuYWJsZWQKLXNldC4gSGVyZSB3ZSBzZWUgdGhhdCBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgdGhlIGVudGlyZSB0aW1lLgotVGhlIGlycV9lbnRlciBjb2RlIGxldHMgdXMga25vdyB0aGF0IHdlIGVudGVyZWQgYW4gaW50ZXJydXB0ICdoJy4KLUJlZm9yZSB0aGF0LCB0aGUgZnVuY3Rpb25zIGJlaW5nIHRyYWNlZCBzdGlsbCBzaG93IHRoYXQgaXQgaXMgbm90Ci1pbiBhbiBpbnRlcnJ1cHQsIGJ1dCB3ZSBjYW4gc2VlIGZyb20gdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIHRoYXQKLXRoaXMgaXMgbm90IHRoZSBjYXNlLgorVGhlIGFib3ZlIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHByZWVtcHRvZmYgdHJhY2Ugd2l0aAorZnRyYWNlX2VuYWJsZWQgc2V0LiBIZXJlIHdlIHNlZSB0aGF0IGludGVycnVwdHMgd2VyZSBkaXNhYmxlZAordGhlIGVudGlyZSB0aW1lLiBUaGUgaXJxX2VudGVyIGNvZGUgbGV0cyB1cyBrbm93IHRoYXQgd2UgZW50ZXJlZAorYW4gaW50ZXJydXB0ICdoJy4gQmVmb3JlIHRoYXQsIHRoZSBmdW5jdGlvbnMgYmVpbmcgdHJhY2VkIHN0aWxsCitzaG93IHRoYXQgaXQgaXMgbm90IGluIGFuIGludGVycnVwdCwgYnV0IHdlIGNhbiBzZWUgZnJvbSB0aGUKK2Z1bmN0aW9ucyB0aGVtc2VsdmVzIHRoYXQgdGhpcyBpcyBub3QgdGhlIGNhc2UuCiAKLU5vdGljZSB0aGF0IF9fZG9fc29mdGlycSB3aGVuIGNhbGxlZCBkb2VzIG5vdCBoYXZlIGEgcHJlZW1wdF9jb3VudC4KLUl0IG1heSBzZWVtIHRoYXQgd2UgbWlzc2VkIGEgcHJlZW1wdCBlbmFibGluZy4gV2hhdCByZWFsbHkgaGFwcGVuZWQKLWlzIHRoYXQgdGhlIHByZWVtcHQgY291bnQgaXMgaGVsZCBvbiB0aGUgdGhyZWFkJ3Mgc3RhY2sgYW5kIHdlCi1zd2l0Y2hlZCB0byB0aGUgc29mdGlycSBzdGFjayAoNEsgc3RhY2tzIGluIGVmZmVjdCkuIFRoZSBjb2RlCi1kb2VzIG5vdCBjb3B5IHRoZSBwcmVlbXB0IGNvdW50LCBidXQgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKLXdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LiBIYXZpbmcgYSB0cmFjZXIgbGlrZSB0aGlzIGlzIGdvb2QKLWZvciBsZXR0aW5nIHBlb3BsZSBrbm93IHdoYXQgcmVhbGx5IGhhcHBlbnMgaW5zaWRlIHRoZSBrZXJuZWwuCitOb3RpY2UgdGhhdCBfX2RvX3NvZnRpcnEgd2hlbiBjYWxsZWQgZG9lcyBub3QgaGF2ZSBhCitwcmVlbXB0X2NvdW50LiBJdCBtYXkgc2VlbSB0aGF0IHdlIG1pc3NlZCBhIHByZWVtcHQgZW5hYmxpbmcuCitXaGF0IHJlYWxseSBoYXBwZW5lZCBpcyB0aGF0IHRoZSBwcmVlbXB0IGNvdW50IGlzIGhlbGQgb24gdGhlCit0aHJlYWQncyBzdGFjayBhbmQgd2Ugc3dpdGNoZWQgdG8gdGhlIHNvZnRpcnEgc3RhY2sgKDRLIHN0YWNrcworaW4gZWZmZWN0KS4gVGhlIGNvZGUgZG9lcyBub3QgY29weSB0aGUgcHJlZW1wdCBjb3VudCwgYnV0CitiZWNhdXNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB3ZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dAoraXQuIEhhdmluZyBhIHRyYWNlciBsaWtlIHRoaXMgaXMgZ29vZCBmb3IgbGV0dGluZyBwZW9wbGUga25vdword2hhdCByZWFsbHkgaGFwcGVucyBpbnNpZGUgdGhlIGtlcm5lbC4KIAogCiBwcmVlbXB0aXJxc29mZgogLS0tLS0tLS0tLS0tLS0KIAotS25vd2luZyB0aGUgbG9jYXRpb25zIHRoYXQgaGF2ZSBpbnRlcnJ1cHRzIGRpc2FibGVkIG9yIHByZWVtcHRpb24KLWRpc2FibGVkIGZvciB0aGUgbG9uZ2VzdCB0aW1lcyBpcyBoZWxwZnVsLiBCdXQgc29tZXRpbWVzIHdlIHdvdWxkCi1saWtlIHRvIGtub3cgd2hlbiBlaXRoZXIgcHJlZW1wdGlvbiBhbmQvb3IgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCitLbm93aW5nIHRoZSBsb2NhdGlvbnMgdGhhdCBoYXZlIGludGVycnVwdHMgZGlzYWJsZWQgb3IKK3ByZWVtcHRpb24gZGlzYWJsZWQgZm9yIHRoZSBsb25nZXN0IHRpbWVzIGlzIGhlbHBmdWwuIEJ1dAorc29tZXRpbWVzIHdlIHdvdWxkIGxpa2UgdG8ga25vdyB3aGVuIGVpdGhlciBwcmVlbXB0aW9uIGFuZC9vcgoraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCiAKIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZToKIApAQCAtNzQxLDExICs4MjAsMTMgQEAKIGNhbGxfZnVuY3Rpb25fd2l0aF9pcnFzX2FuZF9wcmVlbXB0aW9uX29mZigpIGFuZAogY2FsbF9mdW5jdGlvbl93aXRoX3ByZWVtcHRpb25fb2ZmKCkuCiAKLUJ1dCBuZWl0aGVyIHdpbGwgdHJhY2UgdGhlIHRpbWUgdGhhdCBpbnRlcnJ1cHRzIGFuZC9vciBwcmVlbXB0aW9uCi1pcyBkaXNhYmxlZC4gVGhpcyB0b3RhbCB0aW1lIGlzIHRoZSB0aW1lIHRoYXQgd2UgY2FuIG5vdCBzY2hlZHVsZS4KLVRvIHJlY29yZCB0aGlzIHRpbWUsIHVzZSB0aGUgcHJlZW1wdGlycXNvZmYgdHJhY2VyLgorQnV0IG5laXRoZXIgd2lsbCB0cmFjZSB0aGUgdGltZSB0aGF0IGludGVycnVwdHMgYW5kL29yCitwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIHRvdGFsIHRpbWUgaXMgdGhlIHRpbWUgdGhhdCB3ZSBjYW4KK25vdCBzY2hlZHVsZS4gVG8gcmVjb3JkIHRoaXMgdGltZSwgdXNlIHRoZSBwcmVlbXB0aXJxc29mZgordHJhY2VyLgogCi1BZ2FpbiwgdXNpbmcgdGhpcyB0cmFjZSBpcyBtdWNoIGxpa2UgdGhlIGlycXNvZmYgYW5kIHByZWVtcHRvZmYgdHJhY2Vycy4KK0FnYWluLCB1c2luZyB0aGlzIHRyYWNlIGlzIG11Y2ggbGlrZSB0aGUgaXJxc29mZiBhbmQgcHJlZW1wdG9mZgordHJhY2Vycy4KIAogICMgZWNobyBwcmVlbXB0aXJxc29mZiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC03ODEsOSArODYyLDEwIEBACiAKIAogVGhlIHRyYWNlX2hhcmRpcnFzX29mZl90aHVuayBpcyBjYWxsZWQgZnJvbSBhc3NlbWJseSBvbiB4ODYgd2hlbgotaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gdGhlIGFzc2VtYmx5IGNvZGUuIFdpdGhvdXQgdGhlIGZ1bmN0aW9uCi10cmFjaW5nLCB3ZSBkbyBub3Qga25vdyBpZiBpbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZCB3aXRoaW4gdGhlIHByZWVtcHRpb24KLXBvaW50cy4gV2UgZG8gc2VlIHRoYXQgaXQgc3RhcnRlZCB3aXRoIHByZWVtcHRpb24gZW5hYmxlZC4KK2ludGVycnVwdHMgYXJlIGRpc2FibGVkIGluIHRoZSBhc3NlbWJseSBjb2RlLiBXaXRob3V0IHRoZQorZnVuY3Rpb24gdHJhY2luZywgd2UgZG8gbm90IGtub3cgaWYgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQKK3dpdGhpbiB0aGUgcHJlZW1wdGlvbiBwb2ludHMuIFdlIGRvIHNlZSB0aGF0IGl0IHN0YXJ0ZWQgd2l0aAorcHJlZW1wdGlvbiBlbmFibGVkLgogCiBIZXJlIGlzIGEgdHJhY2Ugd2l0aCBmdHJhY2VfZW5hYmxlZCBzZXQ6CiAKQEAgLTg3MSw0MCArOTUzLDQyIEBACiAgICAgc3NoZC00MjYxICAwZC5zMSAgMTA1dXMgOiB0cmFjZV9wcmVlbXB0X29uIChfX2RvX3NvZnRpcnEpCiAKIAotVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgdHJhY2UuIEl0IHN0YXJ0ZWQgd2l0aCB0aGUgcHJlZW1wdGlvbiBvZgotdGhlIGxzIHRhc2suIFdlIHNlZSB0aGF0IHRoZSB0YXNrIGhhZCB0aGUgIm5lZWRfcmVzY2hlZCIgYml0IHNldAotdmlhIHRoZSAnTicgaW4gdGhlIHRyYWNlLiAgSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIGJlZm9yZSB0aGUgc3Bpbl9sb2NrCi1hdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFjZS4gV2Ugc2VlIHRoYXQgYSBzY2hlZHVsZSB0b29rIHBsYWNlIHRvIHJ1bgotc3NoZC4gIFdoZW4gdGhlIGludGVycnVwdHMgd2VyZSBlbmFibGVkLCB3ZSB0b29rIGFuIGludGVycnVwdC4KLU9uIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhlIHNvZnRpcnEgcmFuLiBXZSB0b29rIGFub3RoZXIKLWludGVycnVwdCB3aGlsZSBydW5uaW5nIHRoZSBzb2Z0aXJxIGFzIHdlIHNlZSBmcm9tIHRoZSBjYXBpdGFsICdIJy4KK1RoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHRyYWNlLiBJdCBzdGFydGVkIHdpdGggdGhlIHByZWVtcHRpb24KK29mIHRoZSBscyB0YXNrLiBXZSBzZWUgdGhhdCB0aGUgdGFzayBoYWQgdGhlICJuZWVkX3Jlc2NoZWQiIGJpdAorc2V0IHZpYSB0aGUgJ04nIGluIHRoZSB0cmFjZS4gIEludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBiZWZvcmUKK3RoZSBzcGluX2xvY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhY2UuIFdlIHNlZSB0aGF0IGEKK3NjaGVkdWxlIHRvb2sgcGxhY2UgdG8gcnVuIHNzaGQuICBXaGVuIHRoZSBpbnRlcnJ1cHRzIHdlcmUKK2VuYWJsZWQsIHdlIHRvb2sgYW4gaW50ZXJydXB0LiBPbiByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0CitoYW5kbGVyLCB0aGUgc29mdGlycSByYW4uIFdlIHRvb2sgYW5vdGhlciBpbnRlcnJ1cHQgd2hpbGUKK3J1bm5pbmcgdGhlIHNvZnRpcnEgYXMgd2Ugc2VlIGZyb20gdGhlIGNhcGl0YWwgJ0gnLgogCiAKIHdha2V1cAogLS0tLS0tCiAKLUluIGEgUmVhbC1UaW1lIGVudmlyb25tZW50IGl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGtub3cgdGhlIHdha2V1cAotdGltZSBpdCB0YWtlcyBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHdva2VuIHVwIHRvIHRoZQotdGltZSB0aGF0IGl0IGV4ZWN1dGVzLiBUaGlzIGlzIGFsc28ga25vd24gYXMgInNjaGVkdWxlIGxhdGVuY3kiLgotSSBzdHJlc3MgdGhlIHBvaW50IHRoYXQgdGhpcyBpcyBhYm91dCBSVCB0YXNrcy4gSXQgaXMgYWxzbyBpbXBvcnRhbnQKLXRvIGtub3cgdGhlIHNjaGVkdWxpbmcgbGF0ZW5jeSBvZiBub24tUlQgdGFza3MsIGJ1dCB0aGUgYXZlcmFnZQotc2NoZWR1bGUgbGF0ZW5jeSBpcyBiZXR0ZXIgZm9yIG5vbi1SVCB0YXNrcy4gVG9vbHMgbGlrZQotTGF0ZW5jeVRvcCBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3Igc3VjaCBtZWFzdXJlbWVudHMuCitJbiBhIFJlYWwtVGltZSBlbnZpcm9ubWVudCBpdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBrbm93IHRoZQord2FrZXVwIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyB3b2tlbgordXAgdG8gdGhlIHRpbWUgdGhhdCBpdCBleGVjdXRlcy4gVGhpcyBpcyBhbHNvIGtub3duIGFzICJzY2hlZHVsZQorbGF0ZW5jeSIuIEkgc3RyZXNzIHRoZSBwb2ludCB0aGF0IHRoaXMgaXMgYWJvdXQgUlQgdGFza3MuIEl0IGlzCithbHNvIGltcG9ydGFudCB0byBrbm93IHRoZSBzY2hlZHVsaW5nIGxhdGVuY3kgb2Ygbm9uLVJUIHRhc2tzLAorYnV0IHRoZSBhdmVyYWdlIHNjaGVkdWxlIGxhdGVuY3kgaXMgYmV0dGVyIGZvciBub24tUlQgdGFza3MuCitUb29scyBsaWtlIExhdGVuY3lUb3AgYXJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHN1Y2gKK21lYXN1cmVtZW50cy4KIAogUmVhbC1UaW1lIGVudmlyb25tZW50cyBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgd29yc3QgY2FzZSBsYXRlbmN5LgotVGhhdCBpcyB0aGUgbG9uZ2VzdCBsYXRlbmN5IGl0IHRha2VzIGZvciBzb21ldGhpbmcgdG8gaGFwcGVuLCBhbmQKLW5vdCB0aGUgYXZlcmFnZS4gV2UgY2FuIGhhdmUgYSB2ZXJ5IGZhc3Qgc2NoZWR1bGVyIHRoYXQgbWF5IG9ubHkKLWhhdmUgYSBsYXJnZSBsYXRlbmN5IG9uY2UgaW4gYSB3aGlsZSwgYnV0IHRoYXQgd291bGQgbm90IHdvcmsgd2VsbAotd2l0aCBSZWFsLVRpbWUgdGFza3MuICBUaGUgd2FrZXVwIHRyYWNlciB3YXMgZGVzaWduZWQgdG8gcmVjb3JkCi10aGUgd29yc3QgY2FzZSB3YWtldXBzIG9mIFJUIHRhc2tzLiBOb24tUlQgdGFza3MgYXJlIG5vdCByZWNvcmRlZAotYmVjYXVzZSB0aGUgdHJhY2VyIG9ubHkgcmVjb3JkcyBvbmUgd29yc3QgY2FzZSBhbmQgdHJhY2luZyBub24tUlQKLXRhc2tzIHRoYXQgYXJlIHVucHJlZGljdGFibGUgd2lsbCBvdmVyd3JpdGUgdGhlIHdvcnN0IGNhc2UgbGF0ZW5jeQotb2YgUlQgdGFza3MuCitUaGF0IGlzIHRoZSBsb25nZXN0IGxhdGVuY3kgaXQgdGFrZXMgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4sCithbmQgbm90IHRoZSBhdmVyYWdlLiBXZSBjYW4gaGF2ZSBhIHZlcnkgZmFzdCBzY2hlZHVsZXIgdGhhdCBtYXkKK29ubHkgaGF2ZSBhIGxhcmdlIGxhdGVuY3kgb25jZSBpbiBhIHdoaWxlLCBidXQgdGhhdCB3b3VsZCBub3QKK3dvcmsgd2VsbCB3aXRoIFJlYWwtVGltZSB0YXNrcy4gIFRoZSB3YWtldXAgdHJhY2VyIHdhcyBkZXNpZ25lZAordG8gcmVjb3JkIHRoZSB3b3JzdCBjYXNlIHdha2V1cHMgb2YgUlQgdGFza3MuIE5vbi1SVCB0YXNrcyBhcmUKK25vdCByZWNvcmRlZCBiZWNhdXNlIHRoZSB0cmFjZXIgb25seSByZWNvcmRzIG9uZSB3b3JzdCBjYXNlIGFuZAordHJhY2luZyBub24tUlQgdGFza3MgdGhhdCBhcmUgdW5wcmVkaWN0YWJsZSB3aWxsIG92ZXJ3cml0ZSB0aGUKK3dvcnN0IGNhc2UgbGF0ZW5jeSBvZiBSVCB0YXNrcy4KIAotU2luY2UgdGhpcyB0cmFjZXIgb25seSBkZWFscyB3aXRoIFJUIHRhc2tzLCB3ZSB3aWxsIHJ1biB0aGlzIHNsaWdodGx5Ci1kaWZmZXJlbnRseSB0aGFuIHdlIGRpZCB3aXRoIHRoZSBwcmV2aW91cyB0cmFjZXJzLiBJbnN0ZWFkIG9mIHBlcmZvcm1pbmcKLWFuICdscycsIHdlIHdpbGwgcnVuICdzbGVlcCAxJyB1bmRlciAnY2hydCcgd2hpY2ggY2hhbmdlcyB0aGUKLXByaW9yaXR5IG9mIHRoZSB0YXNrLgorU2luY2UgdGhpcyB0cmFjZXIgb25seSBkZWFscyB3aXRoIFJUIHRhc2tzLCB3ZSB3aWxsIHJ1biB0aGlzCitzbGlnaHRseSBkaWZmZXJlbnRseSB0aGFuIHdlIGRpZCB3aXRoIHRoZSBwcmV2aW91cyB0cmFjZXJzLgorSW5zdGVhZCBvZiBwZXJmb3JtaW5nIGFuICdscycsIHdlIHdpbGwgcnVuICdzbGVlcCAxJyB1bmRlcgorJ2NocnQnIHdoaWNoIGNoYW5nZXMgdGhlIHByaW9yaXR5IG9mIHRoZSB0YXNrLgogCiAgIyBlY2hvIHdha2V1cCA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC05MzQsMTcgKzEwMTgsMTYgQEAKICAgPGlkbGU+LTAgICAgIDFkLi40ICAgIDR1cyA6IHNjaGVkdWxlIChjcHVfaWRsZSkKIAogCitSdW5uaW5nIHRoaXMgb24gYW4gaWRsZSBzeXN0ZW0sIHdlIHNlZSB0aGF0IGl0IG9ubHkgdG9vayA0CittaWNyb3NlY29uZHMgdG8gcGVyZm9ybSB0aGUgdGFzayBzd2l0Y2guICBOb3RlLCBzaW5jZSB0aGUgdHJhY2UKK21hcmtlciBpbiB0aGUgc2NoZWR1bGUgaXMgYmVmb3JlIHRoZSBhY3R1YWwgInN3aXRjaCIsIHdlIHN0b3AKK3RoZSB0cmFjaW5nIHdoZW4gdGhlIHJlY29yZGVkIHRhc2sgaXMgYWJvdXQgdG8gc2NoZWR1bGUgaW4uIFRoaXMKK21heSBjaGFuZ2UgaWYgd2UgYWRkIGEgbmV3IG1hcmtlciBhdCB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIuCiAKLVJ1bm5pbmcgdGhpcyBvbiBhbiBpZGxlIHN5c3RlbSwgd2Ugc2VlIHRoYXQgaXQgb25seSB0b29rIDQgbWljcm9zZWNvbmRzCi10byBwZXJmb3JtIHRoZSB0YXNrIHN3aXRjaC4gIE5vdGUsIHNpbmNlIHRoZSB0cmFjZSBtYXJrZXIgaW4gdGhlCi1zY2hlZHVsZSBpcyBiZWZvcmUgdGhlIGFjdHVhbCAic3dpdGNoIiwgd2Ugc3RvcCB0aGUgdHJhY2luZyB3aGVuCi10aGUgcmVjb3JkZWQgdGFzayBpcyBhYm91dCB0byBzY2hlZHVsZSBpbi4gVGhpcyBtYXkgY2hhbmdlIGlmCi13ZSBhZGQgYSBuZXcgbWFya2VyIGF0IHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlci4KLQotTm90aWNlIHRoYXQgdGhlIHJlY29yZGVkIHRhc2sgaXMgJ3NsZWVwJyB3aXRoIHRoZSBQSUQgb2YgNDkwMSBhbmQgaXQKLWhhcyBhbiBydF9wcmlvIG9mIDUuIFRoaXMgcHJpb3JpdHkgaXMgdXNlci1zcGFjZSBwcmlvcml0eSBhbmQgbm90Ci10aGUgaW50ZXJuYWwga2VybmVsIHByaW9yaXR5LiBUaGUgcG9saWN5IGlzIDEgZm9yIFNDSEVEX0ZJRk8gYW5kIDIKLWZvciBTQ0hFRF9SUi4KK05vdGljZSB0aGF0IHRoZSByZWNvcmRlZCB0YXNrIGlzICdzbGVlcCcgd2l0aCB0aGUgUElEIG9mIDQ5MDEKK2FuZCBpdCBoYXMgYW4gcnRfcHJpbyBvZiA1LiBUaGlzIHByaW9yaXR5IGlzIHVzZXItc3BhY2UgcHJpb3JpdHkKK2FuZCBub3QgdGhlIGludGVybmFsIGtlcm5lbCBwcmlvcml0eS4gVGhlIHBvbGljeSBpcyAxIGZvcgorU0NIRURfRklGTyBhbmQgMiBmb3IgU0NIRURfUlIuCiAKIERvaW5nIHRoZSBzYW1lIHdpdGggY2hydCAtciA1IGFuZCBmdHJhY2VfZW5hYmxlZCBzZXQuCiAKQEAgLTEwMDEsMjQgKzEwODQsMjUgQEAKIGtzb2Z0aXJxLTcgICAgIDFkLi42ICAgNDl1cyA6IHN1Yl9wcmVlbXB0X2NvdW50IChfc3Bpbl91bmxvY2spCiBrc29mdGlycS03ICAgICAxZC4uNCAgIDUwdXMgOiBzY2hlZHVsZSAoX19jb25kX3Jlc2NoZWQpCiAKLVRoZSBpbnRlcnJ1cHQgd2VudCBvZmYgd2hpbGUgcnVubmluZyBrc29mdGlycWQuIFRoaXMgdGFzayBydW5zIGF0Ci1TQ0hFRF9PVEhFUi4gV2h5IGRpZCBub3Qgd2Ugc2VlIHRoZSAnTicgc2V0IGVhcmx5PyBUaGlzIG1heSBiZQotYSBoYXJtbGVzcyBidWcgd2l0aCB4ODZfMzIgYW5kIDRLIHN0YWNrcy4gT24geDg2XzMyIHdpdGggNEsgc3RhY2tzCi1jb25maWd1cmVkLCB0aGUgaW50ZXJydXB0IGFuZCBzb2Z0aXJxIHJ1biB3aXRoIHRoZWlyIG93biBzdGFjay4KLVNvbWUgaW5mb3JtYXRpb24gaXMgaGVsZCBvbiB0aGUgdG9wIG9mIHRoZSB0YXNrJ3Mgc3RhY2sgKG5lZWRfcmVzY2hlZAotYW5kIHByZWVtcHRfY291bnQgYXJlIGJvdGggc3RvcmVkIHRoZXJlKS4gVGhlIHNldHRpbmcgb2YgdGhlIE5FRURfUkVTQ0hFRAotYml0IGlzIGRvbmUgZGlyZWN0bHkgdG8gdGhlIHRhc2sncyBzdGFjaywgYnV0IHRoZSByZWFkaW5nIG9mIHRoZQotTkVFRF9SRVNDSEVEIGlzIGRvbmUgYnkgbG9va2luZyBhdCB0aGUgY3VycmVudCBzdGFjaywgd2hpY2ggaW4gdGhpcyBjYXNlCi1pcyB0aGUgc3RhY2sgZm9yIHRoZSBoYXJkIGludGVycnVwdC4gVGhpcyBoaWRlcyB0aGUgZmFjdCB0aGF0IE5FRURfUkVTQ0hFRAotaGFzIGJlZW4gc2V0LiBXZSBkbyBub3Qgc2VlIHRoZSAnTicgdW50aWwgd2Ugc3dpdGNoIGJhY2sgdG8gdGhlIHRhc2sncworVGhlIGludGVycnVwdCB3ZW50IG9mZiB3aGlsZSBydW5uaW5nIGtzb2Z0aXJxZC4gVGhpcyB0YXNrIHJ1bnMKK2F0IFNDSEVEX09USEVSLiBXaHkgZGlkIG5vdCB3ZSBzZWUgdGhlICdOJyBzZXQgZWFybHk/IFRoaXMgbWF5CitiZSBhIGhhcm1sZXNzIGJ1ZyB3aXRoIHg4Nl8zMiBhbmQgNEsgc3RhY2tzLiBPbiB4ODZfMzIgd2l0aCA0Sworc3RhY2tzIGNvbmZpZ3VyZWQsIHRoZSBpbnRlcnJ1cHQgYW5kIHNvZnRpcnEgcnVuIHdpdGggdGhlaXIgb3duCitzdGFjay4gU29tZSBpbmZvcm1hdGlvbiBpcyBoZWxkIG9uIHRoZSB0b3Agb2YgdGhlIHRhc2sncyBzdGFjaworKG5lZWRfcmVzY2hlZCBhbmQgcHJlZW1wdF9jb3VudCBhcmUgYm90aCBzdG9yZWQgdGhlcmUpLiBUaGUKK3NldHRpbmcgb2YgdGhlIE5FRURfUkVTQ0hFRCBiaXQgaXMgZG9uZSBkaXJlY3RseSB0byB0aGUgdGFzaydzCitzdGFjaywgYnV0IHRoZSByZWFkaW5nIG9mIHRoZSBORUVEX1JFU0NIRUQgaXMgZG9uZSBieSBsb29raW5nIGF0Cit0aGUgY3VycmVudCBzdGFjaywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFjayBmb3IgdGhlIGhhcmQKK2ludGVycnVwdC4gVGhpcyBoaWRlcyB0aGUgZmFjdCB0aGF0IE5FRURfUkVTQ0hFRCBoYXMgYmVlbiBzZXQuCitXZSBkbyBub3Qgc2VlIHRoZSAnTicgdW50aWwgd2Ugc3dpdGNoIGJhY2sgdG8gdGhlIHRhc2sncwogYXNzaWduZWQgc3RhY2suCiAKIGZ1bmN0aW9uCiAtLS0tLS0tLQogCiBUaGlzIHRyYWNlciBpcyB0aGUgZnVuY3Rpb24gdHJhY2VyLiBFbmFibGluZyB0aGUgZnVuY3Rpb24gdHJhY2VyCi1jYW4gYmUgZG9uZSBmcm9tIHRoZSBkZWJ1ZyBmaWxlIHN5c3RlbS4gTWFrZSBzdXJlIHRoZSBmdHJhY2VfZW5hYmxlZCBpcwotc2V0OyBvdGhlcndpc2UgdGhpcyB0cmFjZXIgaXMgYSBub3AuCitjYW4gYmUgZG9uZSBmcm9tIHRoZSBkZWJ1ZyBmaWxlIHN5c3RlbS4gTWFrZSBzdXJlIHRoZQorZnRyYWNlX2VuYWJsZWQgaXMgc2V0OyBvdGhlcndpc2UgdGhpcyB0cmFjZXIgaXMgYSBub3AuCiAKICAjIHN5c2N0bCBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MQogICMgZWNobyBmdW5jdGlvbiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCkBAIC0xMDQ4LDE0ICsxMTMyLDE1IEBACiBbLi4uXQogCiAKLU5vdGU6IGZ1bmN0aW9uIHRyYWNlciB1c2VzIHJpbmcgYnVmZmVycyB0byBzdG9yZSB0aGUgYWJvdmUgZW50cmllcy4KLVRoZSBuZXdlc3QgZGF0YSBtYXkgb3ZlcndyaXRlIHRoZSBvbGRlc3QgZGF0YS4gU29tZXRpbWVzIHVzaW5nIGVjaG8gdG8KLXN0b3AgdGhlIHRyYWNlIGlzIG5vdCBzdWZmaWNpZW50IGJlY2F1c2UgdGhlIHRyYWNpbmcgY291bGQgaGF2ZSBvdmVyd3JpdHRlbgotdGhlIGRhdGEgdGhhdCB5b3Ugd2FudGVkIHRvIHJlY29yZC4gRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBzb21ldGltZXMgYmV0dGVyIHRvCi1kaXNhYmxlIHRyYWNpbmcgZGlyZWN0bHkgZnJvbSBhIHByb2dyYW0uIFRoaXMgYWxsb3dzIHlvdSB0byBzdG9wIHRoZQotdHJhY2luZyBhdCB0aGUgcG9pbnQgdGhhdCB5b3UgaGl0IHRoZSBwYXJ0IHRoYXQgeW91IGFyZSBpbnRlcmVzdGVkIGluLgotVG8gZGlzYWJsZSB0aGUgdHJhY2luZyBkaXJlY3RseSBmcm9tIGEgQyBwcm9ncmFtLCBzb21ldGhpbmcgbGlrZSBmb2xsb3dpbmcKLWNvZGUgc25pcHBldCBjYW4gYmUgdXNlZDoKK05vdGU6IGZ1bmN0aW9uIHRyYWNlciB1c2VzIHJpbmcgYnVmZmVycyB0byBzdG9yZSB0aGUgYWJvdmUKK2VudHJpZXMuIFRoZSBuZXdlc3QgZGF0YSBtYXkgb3ZlcndyaXRlIHRoZSBvbGRlc3QgZGF0YS4KK1NvbWV0aW1lcyB1c2luZyBlY2hvIHRvIHN0b3AgdGhlIHRyYWNlIGlzIG5vdCBzdWZmaWNpZW50IGJlY2F1c2UKK3RoZSB0cmFjaW5nIGNvdWxkIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIGRhdGEgdGhhdCB5b3Ugd2FudGVkIHRvCityZWNvcmQuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgc29tZXRpbWVzIGJldHRlciB0byBkaXNhYmxlCit0cmFjaW5nIGRpcmVjdGx5IGZyb20gYSBwcm9ncmFtLiBUaGlzIGFsbG93cyB5b3UgdG8gc3RvcCB0aGUKK3RyYWNpbmcgYXQgdGhlIHBvaW50IHRoYXQgeW91IGhpdCB0aGUgcGFydCB0aGF0IHlvdSBhcmUKK2ludGVyZXN0ZWQgaW4uIFRvIGRpc2FibGUgdGhlIHRyYWNpbmcgZGlyZWN0bHkgZnJvbSBhIEMgcHJvZ3JhbSwKK3NvbWV0aGluZyBsaWtlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgY2FuIGJlIHVzZWQ6CiAKIGludCB0cmFjZV9mZDsKIFsuLi5dCkBAIC0xMDcwLDEwICsxMTU1LDEwIEBACiB9CiAKIE5vdGU6IEhlcmUgd2UgaGFyZCBjb2RlZCB0aGUgcGF0aCBuYW1lLiBUaGUgZGVidWdmcyBtb3VudCBpcyBub3QKLWd1YXJhbnRlZWQgdG8gYmUgYXQgL2RlYnVnIChhbmQgaXMgbW9yZSBjb21tb25seSBhdCAvc3lzL2tlcm5lbC9kZWJ1ZykuCi1Gb3Igc2ltcGxlIG9uZSB0aW1lIHRyYWNlcywgdGhlIGFib3ZlIGlzIHN1ZmZpY2VudC4gRm9yIGFueXRoaW5nIGVsc2UsCi1hIHNlYXJjaCB0aHJvdWdoIC9wcm9jL21vdW50cyBtYXkgYmUgbmVlZGVkIHRvIGZpbmQgd2hlcmUgdGhlIGRlYnVnZnMKLWZpbGUtc3lzdGVtIGlzIG1vdW50ZWQuCitndWFyYW50ZWVkIHRvIGJlIGF0IC9kZWJ1ZyAoYW5kIGlzIG1vcmUgY29tbW9ubHkgYXQKKy9zeXMva2VybmVsL2RlYnVnKS4gRm9yIHNpbXBsZSBvbmUgdGltZSB0cmFjZXMsIHRoZSBhYm92ZSBpcworc3VmZmljZW50LiBGb3IgYW55dGhpbmcgZWxzZSwgYSBzZWFyY2ggdGhyb3VnaCAvcHJvYy9tb3VudHMgbWF5CitiZSBuZWVkZWQgdG8gZmluZCB3aGVyZSB0aGUgZGVidWdmcyBmaWxlLXN5c3RlbSBpcyBtb3VudGVkLgogCiAKIFNpbmdsZSB0aHJlYWQgdHJhY2luZwpAQCAtMTE1Miw0OSArMTIzNywyOTcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKworaHctYnJhbmNoLXRyYWNlciAoeDg2IG9ubHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0cmFjZXIgdXNlcyB0aGUgeDg2IGxhc3QgYnJhbmNoIHRyYWNpbmcgaGFyZHdhcmUgZmVhdHVyZSB0bworY29sbGVjdCBhIGJyYW5jaCB0cmFjZSBvbiBhbGwgY3B1cyB3aXRoIHJlbGF0aXZlbHkgbG93IG92ZXJoZWFkLgorCitUaGUgdHJhY2VyIHVzZXMgYSBmaXhlZC1zaXplIGNpcmN1bGFyIGJ1ZmZlciBwZXIgY3B1IGFuZCBvbmx5Cit0cmFjZXMgcmluZyAwIGJyYW5jaGVzLiBUaGUgdHJhY2UgZmlsZSBkdW1wcyB0aGF0IGJ1ZmZlciBpbiB0aGUKK2ZvbGxvd2luZyBmb3JtYXQ6CisKKyMgdHJhY2VyOiBody1icmFuY2gtdHJhY2VyCisjCisjIENQVSMgICAgICAgIFRPICA8LSAgRlJPTQorICAgMCAgc2NoZWR1bGVyX3RpY2srMHhiNS8weDFiZgkgIDwtICB0YXNrX3RpY2tfaWRsZSsweDUvMHg2CisgICAyICBydW5fcG9zaXhfY3B1X3RpbWVycysweDJiLzB4NzJhCSAgPC0gIHJ1bl9wb3NpeF9jcHVfdGltZXJzKzB4MjUvMHg3MmEKKyAgIDAgIHNjaGVkdWxlcl90aWNrKzB4MTM5LzB4MWJmCSAgPC0gIHNjaGVkdWxlcl90aWNrKzB4ZWQvMHgxYmYKKyAgIDAgIHNjaGVkdWxlcl90aWNrKzB4MTdjLzB4MWJmCSAgPC0gIHNjaGVkdWxlcl90aWNrKzB4MTQ4LzB4MWJmCisgICAyICBydW5fcG9zaXhfY3B1X3RpbWVycysweDllLzB4NzJhCSAgPC0gIHJ1bl9wb3NpeF9jcHVfdGltZXJzKzB4NWUvMHg3MmEKKyAgIDAgIHNjaGVkdWxlcl90aWNrKzB4MWI2LzB4MWJmCSAgPC0gIHNjaGVkdWxlcl90aWNrKzB4MWFhLzB4MWJmCisKKworVGhlIHRyYWNlciBtYXkgYmUgdXNlZCB0byBkdW1wIHRoZSB0cmFjZSBmb3IgdGhlIG9vcHMnaW5nIGNwdSBvbgorYSBrZXJuZWwgb29wcyBpbnRvIHRoZSBzeXN0ZW0gbG9nLiBUbyBlbmFibGUgdGhpcywKK2Z0cmFjZV9kdW1wX29uX29vcHMgbXVzdCBiZSBzZXQuIFRvIHNldCBmdHJhY2VfZHVtcF9vbl9vb3BzLCBvbmUKK2NhbiBlaXRoZXIgdXNlIHRoZSBzeXNjdGwgZnVuY3Rpb24gb3Igc2V0IGl0IHZpYSB0aGUgcHJvYyBzeXN0ZW0KK2ludGVyZmFjZS4KKworICBzeXNjdGwga2VybmVsLmZ0cmFjZV9kdW1wX29uX29vcHM9MQorCitvcgorCisgIGVjaG8gMSA+IC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2R1bXBfb25fb29wcworCisKK0hlcmUncyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBkdW1wIGFmdGVyIGEgbnVsbCBwb2ludGVyCitkZXJlZmVyZW5jZSBpbiBhIGtlcm5lbCBtb2R1bGU6CisKK1s1Nzg0OC4xMDU5MjFdIEJVRzogdW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGF0IDAwMDAwMDAwMDAwMDAwMDAKK1s1Nzg0OC4xMDYwMTldIElQOiBbPGZmZmZmZmZmYTAwMDAwMDY+XSBvcGVuKzB4Ni8weDE0IFtvb3BzXQorWzU3ODQ4LjEwNjAxOV0gUEdEIDIzNTRlOTA2NyBQVUQgMjM3NWU3MDY3IFBNRCAwCitbNTc4NDguMTA2MDE5XSBPb3BzOiAwMDAyIFsjMV0gU01QCitbNTc4NDguMTA2MDE5XSBsYXN0IHN5c2ZzIGZpbGU6IC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWUuMC8wMDAwOjIwOjA1LjAvbG9jYWxfY3B1cworWzU3ODQ4LjEwNjAxOV0gRHVtcGluZyBmdHJhY2UgYnVmZmVyOgorWzU3ODQ4LjEwNjAxOV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbLi4uXQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgY2hyZGV2X29wZW4rMHhlNi8weDE2NQkgIDwtICBjZGV2X3B1dCsweDIzLzB4MjQKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGNocmRldl9vcGVuKzB4MTE3LzB4MTY1CSAgPC0gIGNocmRldl9vcGVuKzB4ZmEvMHgxNjUKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGNocmRldl9vcGVuKzB4MTIwLzB4MTY1CSAgPC0gIGNocmRldl9vcGVuKzB4MTFjLzB4MTY1CitbNTc4NDguMTA2MDE5XSAgICAwICBjaHJkZXZfb3BlbisweDEzNC8weDE2NQkgIDwtICBjaHJkZXZfb3BlbisweDEyYi8weDE2NQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgb3BlbisweDAvMHgxNCBbb29wc10JICA8LSAgY2hyZGV2X29wZW4rMHgxNDQvMHgxNjUKK1s1Nzg0OC4xMDYwMTldICAgIDAgIHBhZ2VfZmF1bHQrMHgwLzB4MzAJICA8LSAgb3BlbisweDYvMHgxNCBbb29wc10KK1s1Nzg0OC4xMDYwMTldICAgIDAgIGVycm9yX2VudHJ5KzB4MC8weDViCSAgPC0gIHBhZ2VfZmF1bHQrMHg0LzB4MzAKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGVycm9yX2tlcm5lbHNwYWNlKzB4MC8weDMxCSAgPC0gIGVycm9yX2VudHJ5KzB4NTkvMHg1YgorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZXJyb3Jfc3RpKzB4MC8weDEJICA8LSAgZXJyb3Jfa2VybmVsc3BhY2UrMHgyZC8weDMxCitbNTc4NDguMTA2MDE5XSAgICAwICBwYWdlX2ZhdWx0KzB4OS8weDMwCSAgPC0gIGVycm9yX3N0aSsweDAvMHgxCitbNTc4NDguMTA2MDE5XSAgICAwICBkb19wYWdlX2ZhdWx0KzB4MC8weDg4MQkgIDwtICBwYWdlX2ZhdWx0KzB4MWEvMHgzMAorWy4uLl0KK1s1Nzg0OC4xMDYwMTldICAgIDAgIGRvX3BhZ2VfZmF1bHQrMHg2NmIvMHg4ODEJICA8LSAgaXNfcHJlZmV0Y2grMHgxZWUvMHgxZjIKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGRvX3BhZ2VfZmF1bHQrMHg2ZTAvMHg4ODEJICA8LSAgZG9fcGFnZV9mYXVsdCsweDY3YS8weDg4MQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgb29wc19iZWdpbisweDAvMHg5NgkgIDwtICBkb19wYWdlX2ZhdWx0KzB4NmUwLzB4ODgxCitbNTc4NDguMTA2MDE5XSAgICAwICB0cmFjZV9od19icmFuY2hfb29wcysweDAvMHgyZAkgIDwtICBvb3BzX2JlZ2luKzB4OS8weDk2CitbLi4uXQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZHNfc3VzcGVuZF9idHMrMHgyYS8weGUzCSAgPC0gIGRzX3N1c3BlbmRfYnRzKzB4MWEvMHhlMworWzU3ODQ4LjEwNjAxOV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbNTc4NDguMTA2MDE5XSBDUFUgMAorWzU3ODQ4LjEwNjAxOV0gTW9kdWxlcyBsaW5rZWQgaW46IG9vcHMKK1s1Nzg0OC4xMDYwMTldIFBpZDogNTU0MiwgY29tbTogY2F0IFRhaW50ZWQ6IEcgICAgICAgIFcgIDIuNi4yOCAjMjMKK1s1Nzg0OC4xMDYwMTldIFJJUDogMDAxMDpbPGZmZmZmZmZmYTAwMDAwMDY+XSAgWzxmZmZmZmZmZmEwMDAwMDA2Pl0gb3BlbisweDYvMHgxNCBbb29wc10KK1s1Nzg0OC4xMDYwMTldIFJTUDogMDAxODpmZmZmODgwMjM1NDU3ZDQ4ICBFRkxBR1M6IDAwMDEwMjQ2CitbLi4uXQorCisKK2Z1bmN0aW9uIGdyYXBoIHRyYWNlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHJhY2VyIGlzIHNpbWlsYXIgdG8gdGhlIGZ1bmN0aW9uIHRyYWNlciBleGNlcHQgdGhhdCBpdAorcHJvYmVzIGEgZnVuY3Rpb24gb24gaXRzIGVudHJ5IGFuZCBpdHMgZXhpdC4gVGhpcyBpcyBkb25lIGJ5Cit1c2luZyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGluIGVhY2gKK3Rhc2tfc3RydWN0LiBPbiBmdW5jdGlvbiBlbnRyeSB0aGUgdHJhY2VyIG92ZXJ3cml0ZXMgdGhlIHJldHVybgorYWRkcmVzcyBvZiBlYWNoIGZ1bmN0aW9uIHRyYWNlZCB0byBzZXQgYSBjdXN0b20gcHJvYmUuIFRodXMgdGhlCitvcmlnaW5hbCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgb24gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRyZXNzCitpbiB0aGUgdGFza19zdHJ1Y3QuCisKK1Byb2Jpbmcgb24gYm90aCBlbmRzIG9mIGEgZnVuY3Rpb24gbGVhZHMgdG8gc3BlY2lhbCBmZWF0dXJlcworc3VjaCBhczoKKworLSBtZWFzdXJlIG9mIGEgZnVuY3Rpb24ncyB0aW1lIGV4ZWN1dGlvbgorLSBoYXZpbmcgYSByZWxpYWJsZSBjYWxsIHN0YWNrIHRvIGRyYXcgZnVuY3Rpb24gY2FsbHMgZ3JhcGgKKworVGhpcyB0cmFjZXIgaXMgdXNlZnVsIGluIHNldmVyYWwgc2l0dWF0aW9uczoKKworLSB5b3Ugd2FudCB0byBmaW5kIHRoZSByZWFzb24gb2YgYSBzdHJhbmdlIGtlcm5lbCBiZWhhdmlvciBhbmQKKyAgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIGluIGRldGFpbCBvbiBhbnkgYXJlYXMgKG9yIHNwZWNpZmljCisgIG9uZXMpLgorCistIHlvdSBhcmUgZXhwZXJpZW5jaW5nIHdlaXJkIGxhdGVuY2llcyBidXQgaXQncyBkaWZmaWN1bHQgdG8KKyAgZmluZCBpdHMgb3JpZ2luLgorCistIHlvdSB3YW50IHRvIGZpbmQgcXVpY2tseSB3aGljaCBwYXRoIGlzIHRha2VuIGJ5IGEgc3BlY2lmaWMKKyAgZnVuY3Rpb24KKworLSB5b3UganVzdCB3YW50IHRvIHBlZWsgaW5zaWRlIGEgd29ya2luZyBrZXJuZWwgYW5kIHdhbnQgdG8gc2VlCisgIHdoYXQgaGFwcGVucyB0aGVyZS4KKworIyB0cmFjZXI6IGZ1bmN0aW9uX2dyYXBoCisjCisjIENQVSAgRFVSQVRJT04gICAgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMUworIyB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKworIDApICAgICAgICAgICAgICAgfCAgc3lzX29wZW4oKSB7CisgMCkgICAgICAgICAgICAgICB8ICAgIGRvX3N5c19vcGVuKCkgeworIDApICAgICAgICAgICAgICAgfCAgICAgIGdldG5hbWUoKSB7CisgMCkgICAgICAgICAgICAgICB8ICAgICAgICBrbWVtX2NhY2hlX2FsbG9jKCkgeworIDApICAgMS4zODIgdXMgICAgfCAgICAgICAgICBfX21pZ2h0X3NsZWVwKCk7CisgMCkgICAyLjQ3OCB1cyAgICB8ICAgICAgICB9CisgMCkgICAgICAgICAgICAgICB8ICAgICAgICBzdHJuY3B5X2Zyb21fdXNlcigpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgICAgbWlnaHRfZmF1bHQoKSB7CisgMCkgICAxLjM4OSB1cyAgICB8ICAgICAgICAgICAgX19taWdodF9zbGVlcCgpOworIDApICAgMi41NTMgdXMgICAgfCAgICAgICAgICB9CisgMCkgICAzLjgwNyB1cyAgICB8ICAgICAgICB9CisgMCkgICA3Ljg3NiB1cyAgICB8ICAgICAgfQorIDApICAgICAgICAgICAgICAgfCAgICAgIGFsbG9jX2ZkKCkgeworIDApICAgMC42NjggdXMgICAgfCAgICAgICAgX3NwaW5fbG9jaygpOworIDApICAgMC41NzAgdXMgICAgfCAgICAgICAgZXhwYW5kX2ZpbGVzKCk7CisgMCkgICAwLjU4NiB1cyAgICB8ICAgICAgICBfc3Bpbl91bmxvY2soKTsKKworCitUaGVyZSBhcmUgc2V2ZXJhbCBjb2x1bW5zIHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5CitlbmFibGVkL2Rpc2FibGVkLiBZb3UgY2FuIHVzZSBldmVyeSBjb21iaW5hdGlvbiBvZiBvcHRpb25zIHlvdQord2FudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuCisKKy0gVGhlIGNwdSBudW1iZXIgb24gd2hpY2ggdGhlIGZ1bmN0aW9uIGV4ZWN1dGVkIGlzIGRlZmF1bHQKKyAgZW5hYmxlZC4gIEl0IGlzIHNvbWV0aW1lcyBiZXR0ZXIgdG8gb25seSB0cmFjZSBvbmUgY3B1IChzZWUKKyAgdHJhY2luZ19jcHVfbWFzayBmaWxlKSBvciB5b3UgbWlnaHQgc29tZXRpbWVzIHNlZSB1bm9yZGVyZWQKKyAgZnVuY3Rpb24gY2FsbHMgd2hpbGUgY3B1IHRyYWNpbmcgc3dpdGNoLgorCisJaGlkZTogZWNobyBub2Z1bmNncmFwaC1jcHUgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtY3B1ID4gL2RlYnVnL3RyYWNpbmcvdHJhY2Vfb3B0aW9ucworCistIFRoZSBkdXJhdGlvbiAoZnVuY3Rpb24ncyB0aW1lIG9mIGV4ZWN1dGlvbikgaXMgZGlzcGxheWVkIG9uCisgIHRoZSBjbG9zaW5nIGJyYWNrZXQgbGluZSBvZiBhIGZ1bmN0aW9uIG9yIG9uIHRoZSBzYW1lIGxpbmUKKyAgdGhhbiB0aGUgY3VycmVudCBmdW5jdGlvbiBpbiBjYXNlIG9mIGEgbGVhZiBvbmUuIEl0IGlzIGRlZmF1bHQKKyAgZW5hYmxlZC4KKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtZHVyYXRpb24gPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtZHVyYXRpb24gPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisKKy0gVGhlIG92ZXJoZWFkIGZpZWxkIHByZWNlZGVzIHRoZSBkdXJhdGlvbiBmaWVsZCBpbiBjYXNlIG9mCisgIHJlYWNoZWQgZHVyYXRpb24gdGhyZXNob2xkcy4KKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtb3ZlcmhlYWQgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtb3ZlcmhlYWQgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJZGVwZW5kcyBvbjogZnVuY2dyYXBoLWR1cmF0aW9uCisKKyAgaWU6CisKKyAgMCkgICAgICAgICAgICAgICB8ICAgIHVwX3dyaXRlKCkgeworICAwKSAgIDAuNjQ2IHVzICAgIHwgICAgICBfc3Bpbl9sb2NrX2lycXNhdmUoKTsKKyAgMCkgICAwLjY4NCB1cyAgICB8ICAgICAgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoKTsKKyAgMCkgICAzLjEyMyB1cyAgICB8ICAgIH0KKyAgMCkgICAwLjU0OCB1cyAgICB8ICAgIGZwdXQoKTsKKyAgMCkgKyA1OC42MjggdXMgICB8ICB9CisKKyAgWy4uLl0KKworICAwKSAgICAgICAgICAgICAgIHwgICAgICBwdXRuYW1lKCkgeworICAwKSAgICAgICAgICAgICAgIHwgICAgICAgIGttZW1fY2FjaGVfZnJlZSgpIHsKKyAgMCkgICAwLjUxOCB1cyAgICB8ICAgICAgICAgIF9fcGh5c19hZGRyKCk7CisgIDApICAgMS43NTcgdXMgICAgfCAgICAgICAgfQorICAwKSAgIDIuODYxIHVzICAgIHwgICAgICB9CisgIDApICEgMTE1LjMwNSB1cyAgfCAgICB9CisgIDApICEgMTE2LjQwMiB1cyAgfCAgfQorCisgICsgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhjZWVkZWQgMTAgdXNlY3MuCisgICEgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhjZWVkZWQgMTAwIHVzZWNzLgorCisKKy0gVGhlIHRhc2svcGlkIGZpZWxkIGRpc3BsYXlzIHRoZSB0aHJlYWQgY21kbGluZSBhbmQgcGlkIHdoaWNoCisgIGV4ZWN1dGVkIHRoZSBmdW5jdGlvbi4gSXQgaXMgZGVmYXVsdCBkaXNhYmxlZC4KKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtcHJvYyA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlzaG93OiBlY2hvIGZ1bmNncmFwaC1wcm9jID4gL2RlYnVnL3RyYWNpbmcvdHJhY2Vfb3B0aW9ucworCisgIGllOgorCisgICMgdHJhY2VyOiBmdW5jdGlvbl9ncmFwaAorICAjCisgICMgQ1BVICBUQVNLL1BJRCAgICAgICAgRFVSQVRJT04gICAgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMUworICAjIHwgICAgfCAgICB8ICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBkX2ZyZWUoKSB7CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBjYWxsX3JjdSgpIHsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgX19jYWxsX3JjdSgpIHsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgIDAuNjE2IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICByY3VfcHJvY2Vzc19ncF9lbmQoKTsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgIDAuNTg2IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mb3JfbmV3X2dyYWNlX3BlcmlvZCgpOworICAwKSAgICBzaC00ODAyICAgICB8ICAgMi44OTkgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICB9CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICA0LjA0MCB1cyAgICB8ICAgICAgICAgICAgICAgICAgICB9CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICA1LjE1MSB1cyAgICB8ICAgICAgICAgICAgICAgICAgfQorICAwKSAgICBzaC00ODAyICAgICB8ICsgNDkuMzcwIHVzICAgfCAgICAgICAgICAgICAgICB9CisKKworLSBUaGUgYWJzb2x1dGUgdGltZSBmaWVsZCBpcyBhbiBhYnNvbHV0ZSB0aW1lc3RhbXAgZ2l2ZW4gYnkgdGhlCisgIHN5c3RlbSBjbG9jayBzaW5jZSBpdCBzdGFydGVkLiBBIHNuYXBzaG90IG9mIHRoaXMgdGltZSBpcworICBnaXZlbiBvbiBlYWNoIGVudHJ5L2V4aXQgb2YgZnVuY3Rpb25zCisKKwloaWRlOiBlY2hvIG5vZnVuY2dyYXBoLWFic3RpbWUgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtYWJzdGltZSA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKworICBpZToKKworICAjCisgICMgICAgICBUSU1FICAgICAgIENQVSAgRFVSQVRJT04gICAgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMUworICAjICAgICAgIHwgICAgICAgICB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgMzYwLjc3NDUyMiB8ICAgMSkgICAwLjU0MSB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTIyIHwgICAxKSAgIDQuNjYzIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTIzIHwgICAxKSAgIDAuNTQxIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193YWtlX3VwX2JpdCgpOworICAzNjAuNzc0NTI0IHwgICAxKSAgIDYuNzk2IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgMzYwLjc3NDUyNCB8ICAgMSkgICA3Ljk1MiB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTI1IHwgICAxKSAgIDkuMDYzIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTI1IHwgICAxKSAgIDAuNjE1IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam91cm5hbF9tYXJrX2RpcnR5KCk7CisgIDM2MC43NzQ1MjcgfCAgIDEpICAgMC41NzggdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JyZWxzZSgpOworICAzNjAuNzc0NTI4IHwgICAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbCgpIHsKKyAgMzYwLjc3NDUyOCB8ICAgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sb2NrX2J1ZmZlcigpIHsKKyAgMzYwLjc3NDUyOSB8ICAgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWtlX3VwX2JpdCgpIHsKKyAgMzYwLjc3NDUyOSB8ICAgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93YWl0cXVldWUoKSB7CisgIDM2MC43NzQ1MzAgfCAgIDEpICAgMC41OTQgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGh5c19hZGRyKCk7CisKKworWW91IGNhbiBwdXQgc29tZSBjb21tZW50cyBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgYnkgdXNpbmcKK3RyYWNlX3ByaW50aygpIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBwdXQgYSBjb21tZW50IGluc2lkZQordGhlIF9fbWlnaHRfc2xlZXAoKSBmdW5jdGlvbiwgeW91IGp1c3QgaGF2ZSB0byBpbmNsdWRlCis8bGludXgvZnRyYWNlLmg+IGFuZCBjYWxsIHRyYWNlX3ByaW50aygpIGluc2lkZSBfX21pZ2h0X3NsZWVwKCkKKwordHJhY2VfcHJpbnRrKCJJJ20gYSBjb21tZW50IVxuIikKKword2lsbCBwcm9kdWNlOgorCisgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIF9fbWlnaHRfc2xlZXAoKSB7CisgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIC8qIEknbSBhIGNvbW1lbnQhICovCisgMSkgICAxLjQ0OSB1cyAgICB8ICAgICAgICAgICAgIH0KKworCitZb3UgbWlnaHQgZmluZCBvdGhlciB1c2VmdWwgZmVhdHVyZXMgZm9yIHRoaXMgdHJhY2VyIGluIHRoZQorZm9sbG93aW5nICJkeW5hbWljIGZ0cmFjZSIgc2VjdGlvbiBzdWNoIGFzIHRyYWNpbmcgb25seSBzcGVjaWZpYworZnVuY3Rpb25zIG9yIHRhc2tzLgorCiBkeW5hbWljIGZ0cmFjZQogLS0tLS0tLS0tLS0tLS0KIAogSWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFIGlzIHNldCwgdGhlIHN5c3RlbSB3aWxsIHJ1biB3aXRoCiB2aXJ0dWFsbHkgbm8gb3ZlcmhlYWQgd2hlbiBmdW5jdGlvbiB0cmFjaW5nIGlzIGRpc2FibGVkLiBUaGUgd2F5CiB0aGlzIHdvcmtzIGlzIHRoZSBtY291bnQgZnVuY3Rpb24gY2FsbCAocGxhY2VkIGF0IHRoZSBzdGFydCBvZgotZXZlcnkga2VybmVsIGZ1bmN0aW9uLCBwcm9kdWNlZCBieSB0aGUgLXBnIHN3aXRjaCBpbiBnY2MpLCBzdGFydHMKLW9mIHBvaW50aW5nIHRvIGEgc2ltcGxlIHJldHVybi4gKEVuYWJsaW5nIEZUUkFDRSB3aWxsIGluY2x1ZGUgdGhlCi0tcGcgc3dpdGNoIGluIHRoZSBjb21waWxpbmcgb2YgdGhlIGtlcm5lbC4pCitldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHByb2R1Y2VkIGJ5IHRoZSAtcGcgc3dpdGNoIGluIGdjYyksCitzdGFydHMgb2YgcG9pbnRpbmcgdG8gYSBzaW1wbGUgcmV0dXJuLiAoRW5hYmxpbmcgRlRSQUNFIHdpbGwKK2luY2x1ZGUgdGhlIC1wZyBzd2l0Y2ggaW4gdGhlIGNvbXBpbGluZyBvZiB0aGUga2VybmVsLikKIAogQXQgY29tcGlsZSB0aW1lIGV2ZXJ5IEMgZmlsZSBvYmplY3QgaXMgcnVuIHRocm91Z2ggdGhlCiByZWNvcmRtY291bnQucGwgc2NyaXB0IChsb2NhdGVkIGluIHRoZSBzY3JpcHRzIGRpcmVjdG9yeSkuIFRoaXMKIHNjcmlwdCB3aWxsIHByb2Nlc3MgdGhlIEMgb2JqZWN0IHVzaW5nIG9iamR1bXAgdG8gZmluZCBhbGwgdGhlCi1sb2NhdGlvbnMgaW4gdGhlIC50ZXh0IHNlY3Rpb24gdGhhdCBjYWxsIG1jb3VudC4gKE5vdGUsIG9ubHkKLXRoZSAudGV4dCBzZWN0aW9uIGlzIHByb2Nlc3NlZCwgc2luY2UgcHJvY2Vzc2luZyBvdGhlciBzZWN0aW9ucwotbGlrZSAuaW5pdC50ZXh0IG1heSBjYXVzZSByYWNlcyBkdWUgdG8gdGhvc2Ugc2VjdGlvbnMgYmVpbmcgZnJlZWQpLgorbG9jYXRpb25zIGluIHRoZSAudGV4dCBzZWN0aW9uIHRoYXQgY2FsbCBtY291bnQuIChOb3RlLCBvbmx5IHRoZQorLnRleHQgc2VjdGlvbiBpcyBwcm9jZXNzZWQsIHNpbmNlIHByb2Nlc3Npbmcgb3RoZXIgc2VjdGlvbnMgbGlrZQorLmluaXQudGV4dCBtYXkgY2F1c2UgcmFjZXMgZHVlIHRvIHRob3NlIHNlY3Rpb25zIGJlaW5nIGZyZWVkKS4KIAotQSBuZXcgc2VjdGlvbiBjYWxsZWQgIl9fbWNvdW50X2xvYyIgaXMgY3JlYXRlZCB0aGF0IGhvbGRzIHJlZmVyZW5jZXMKLXRvIGFsbCB0aGUgbWNvdW50IGNhbGwgc2l0ZXMgaW4gdGhlIC50ZXh0IHNlY3Rpb24uIFRoaXMgc2VjdGlvbiBpcwotY29tcGlsZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBvYmplY3QuIFRoZSBmaW5hbCBsaW5rZXIgd2lsbCBhZGQKLWFsbCB0aGVzZSByZWZlcmVuY2VzIGludG8gYSBzaW5nbGUgdGFibGUuCitBIG5ldyBzZWN0aW9uIGNhbGxlZCAiX19tY291bnRfbG9jIiBpcyBjcmVhdGVkIHRoYXQgaG9sZHMKK3JlZmVyZW5jZXMgdG8gYWxsIHRoZSBtY291bnQgY2FsbCBzaXRlcyBpbiB0aGUgLnRleHQgc2VjdGlvbi4KK1RoaXMgc2VjdGlvbiBpcyBjb21waWxlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIG9iamVjdC4gVGhlCitmaW5hbCBsaW5rZXIgd2lsbCBhZGQgYWxsIHRoZXNlIHJlZmVyZW5jZXMgaW50byBhIHNpbmdsZSB0YWJsZS4KIAogT24gYm9vdCB1cCwgYmVmb3JlIFNNUCBpcyBpbml0aWFsaXplZCwgdGhlIGR5bmFtaWMgZnRyYWNlIGNvZGUKLXNjYW5zIHRoaXMgdGFibGUgYW5kIHVwZGF0ZXMgYWxsIHRoZSBsb2NhdGlvbnMgaW50byBub3BzLiBJdCBhbHNvCi1yZWNvcmRzIHRoZSBsb2NhdGlvbnMsIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMKLWxpc3QuICBNb2R1bGVzIGFyZSBwcm9jZXNzZWQgYXMgdGhleSBhcmUgbG9hZGVkIGFuZCBiZWZvcmUgdGhleSBhcmUKLWV4ZWN1dGVkLiAgV2hlbiBhIG1vZHVsZSBpcyB1bmxvYWRlZCwgaXQgYWxzbyByZW1vdmVzIGl0cyBmdW5jdGlvbnMgZnJvbQotdGhlIGZ0cmFjZSBmdW5jdGlvbiBsaXN0LiBUaGlzIGlzIGF1dG9tYXRpYyBpbiB0aGUgbW9kdWxlIHVubG9hZAotY29kZSwgYW5kIHRoZSBtb2R1bGUgYXV0aG9yIGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgaXQuCitzY2FucyB0aGlzIHRhYmxlIGFuZCB1cGRhdGVzIGFsbCB0aGUgbG9jYXRpb25zIGludG8gbm9wcy4gSXQKK2Fsc28gcmVjb3JkcyB0aGUgbG9jYXRpb25zLCB3aGljaCBhcmUgYWRkZWQgdG8gdGhlCithdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucyBsaXN0LiAgTW9kdWxlcyBhcmUgcHJvY2Vzc2VkIGFzIHRoZXkKK2FyZSBsb2FkZWQgYW5kIGJlZm9yZSB0aGV5IGFyZSBleGVjdXRlZC4gIFdoZW4gYSBtb2R1bGUgaXMKK3VubG9hZGVkLCBpdCBhbHNvIHJlbW92ZXMgaXRzIGZ1bmN0aW9ucyBmcm9tIHRoZSBmdHJhY2UgZnVuY3Rpb24KK2xpc3QuIFRoaXMgaXMgYXV0b21hdGljIGluIHRoZSBtb2R1bGUgdW5sb2FkIGNvZGUsIGFuZCB0aGUKK21vZHVsZSBhdXRob3IgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4KIAotV2hlbiB0cmFjaW5nIGlzIGVuYWJsZWQsIGtzdG9wX21hY2hpbmUgaXMgY2FsbGVkIHRvIHByZXZlbnQgcmFjZXMKLXdpdGggdGhlIENQVVMgZXhlY3V0aW5nIGNvZGUgYmVpbmcgbW9kaWZpZWQgKHdoaWNoIGNhbiBjYXVzZSB0aGUKLUNQVSB0byBkbyB1bmRlc2lyZWFibGUgdGhpbmdzKSwgYW5kIHRoZSBub3BzIGFyZSBwYXRjaGVkIGJhY2sKLXRvIGNhbGxzLiBCdXQgdGhpcyB0aW1lLCB0aGV5IGRvIG5vdCBjYWxsIG1jb3VudCAod2hpY2ggaXMganVzdAotYSBmdW5jdGlvbiBzdHViKS4gVGhleSBub3cgY2FsbCBpbnRvIHRoZSBmdHJhY2UgaW5mcmFzdHJ1Y3R1cmUuCitXaGVuIHRyYWNpbmcgaXMgZW5hYmxlZCwga3N0b3BfbWFjaGluZSBpcyBjYWxsZWQgdG8gcHJldmVudAorcmFjZXMgd2l0aCB0aGUgQ1BVUyBleGVjdXRpbmcgY29kZSBiZWluZyBtb2RpZmllZCAod2hpY2ggY2FuCitjYXVzZSB0aGUgQ1BVIHRvIGRvIHVuZGVzaXJlYWJsZSB0aGluZ3MpLCBhbmQgdGhlIG5vcHMgYXJlCitwYXRjaGVkIGJhY2sgdG8gY2FsbHMuIEJ1dCB0aGlzIHRpbWUsIHRoZXkgZG8gbm90IGNhbGwgbWNvdW50Cisod2hpY2ggaXMganVzdCBhIGZ1bmN0aW9uIHN0dWIpLiBUaGV5IG5vdyBjYWxsIGludG8gdGhlIGZ0cmFjZQoraW5mcmFzdHJ1Y3R1cmUuCiAKIE9uZSBzcGVjaWFsIHNpZGUtZWZmZWN0IHRvIHRoZSByZWNvcmRpbmcgb2YgdGhlIGZ1bmN0aW9ucyBiZWluZwogdHJhY2VkIGlzIHRoYXQgd2UgY2FuIG5vdyBzZWxlY3RpdmVseSBjaG9vc2Ugd2hpY2ggZnVuY3Rpb25zIHdlCi13aXNoIHRvIHRyYWNlIGFuZCB3aGljaCBvbmVzIHdlIHdhbnQgdGhlIG1jb3VudCBjYWxscyB0byByZW1haW4gYXMKLW5vcHMuCit3aXNoIHRvIHRyYWNlIGFuZCB3aGljaCBvbmVzIHdlIHdhbnQgdGhlIG1jb3VudCBjYWxscyB0byByZW1haW4KK2FzIG5vcHMuCiAKLVR3byBmaWxlcyBhcmUgdXNlZCwgb25lIGZvciBlbmFibGluZyBhbmQgb25lIGZvciBkaXNhYmxpbmcgdGhlIHRyYWNpbmcKLW9mIHNwZWNpZmllZCBmdW5jdGlvbnMuIFRoZXkgYXJlOgorVHdvIGZpbGVzIGFyZSB1c2VkLCBvbmUgZm9yIGVuYWJsaW5nIGFuZCBvbmUgZm9yIGRpc2FibGluZyB0aGUKK3RyYWNpbmcgb2Ygc3BlY2lmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmU6CiAKICAgc2V0X2Z0cmFjZV9maWx0ZXIKIApAQCAtMTIwMiw4ICsxNTM1LDggQEAKIAogICBzZXRfZnRyYWNlX25vdHJhY2UKIAotQSBsaXN0IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMgdGhhdCB5b3UgY2FuIGFkZCB0byB0aGVzZSBmaWxlcyBpcyBsaXN0ZWQKLWluOgorQSBsaXN0IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMgdGhhdCB5b3UgY2FuIGFkZCB0byB0aGVzZSBmaWxlcyBpcworbGlzdGVkIGluOgogCiAgICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucwogCkBAIC0xMjQwLDggKzE1NzMsOCBAQAogc3lzX25hbm9zbGVlcAogCiAKLVBlcmhhcHMgdGhpcyBpcyBub3QgZW5vdWdoLiBUaGUgZmlsdGVycyBhbHNvIGFsbG93IHNpbXBsZSB3aWxkIGNhcmRzLgotT25seSB0aGUgZm9sbG93aW5nIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlCitQZXJoYXBzIHRoaXMgaXMgbm90IGVub3VnaC4gVGhlIGZpbHRlcnMgYWxzbyBhbGxvdyBzaW1wbGUgd2lsZAorY2FyZHMuIE9ubHkgdGhlIGZvbGxvd2luZyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZQogCiAgIDxtYXRjaD4qICAtIHdpbGwgbWF0Y2ggZnVuY3Rpb25zIHRoYXQgYmVnaW4gd2l0aCA8bWF0Y2g+CiAgICo8bWF0Y2g+ICAtIHdpbGwgbWF0Y2ggZnVuY3Rpb25zIHRoYXQgZW5kIHdpdGggPG1hdGNoPgpAQCAtMTI1MSw5ICsxNTg0LDkgQEAKIAogICA8bWF0Y2g+KjxtYXRjaD4gd2lsbCBub3Qgd29yay4KIAotTm90ZTogSXQgaXMgYmV0dGVyIHRvIHVzZSBxdW90ZXMgdG8gZW5jbG9zZSB0aGUgd2lsZCBjYXJkcywgb3RoZXJ3aXNlCi0gIHRoZSBzaGVsbCBtYXkgZXhwYW5kIHRoZSBwYXJhbWV0ZXJzIGludG8gbmFtZXMgb2YgZmlsZXMgaW4gdGhlIGxvY2FsCi0gIGRpcmVjdG9yeS4KK05vdGU6IEl0IGlzIGJldHRlciB0byB1c2UgcXVvdGVzIHRvIGVuY2xvc2UgdGhlIHdpbGQgY2FyZHMsCisgICAgICBvdGhlcndpc2UgdGhlIHNoZWxsIG1heSBleHBhbmQgdGhlIHBhcmFtZXRlcnMgaW50byBuYW1lcworICAgICAgb2YgZmlsZXMgaW4gdGhlIGxvY2FsIGRpcmVjdG9yeS4KIAogICMgZWNobyAnaHJ0aW1lcl8qJyA+IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2VfZmlsdGVyCiAKQEAgLTEyOTksNyArMTYzMiw4IEBACiBUbyByZXdyaXRlIHRoZSBmaWx0ZXJzLCB1c2UgJz4nCiBUbyBhcHBlbmQgdG8gdGhlIGZpbHRlcnMsIHVzZSAnPj4nCiAKLVRvIGNsZWFyIG91dCBhIGZpbHRlciBzbyB0aGF0IGFsbCBmdW5jdGlvbnMgd2lsbCBiZSByZWNvcmRlZCBhZ2FpbjoKK1RvIGNsZWFyIG91dCBhIGZpbHRlciBzbyB0aGF0IGFsbCBmdW5jdGlvbnMgd2lsbCBiZSByZWNvcmRlZAorYWdhaW46CiAKICAjIGVjaG8gPiAvZGVidWcvdHJhY2luZy9zZXRfZnRyYWNlX2ZpbHRlcgogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2VfZmlsdGVyCkBAIC0xMzMxLDcgKzE2NjUsOCBAQAogaHJ0aW1lcl9pbml0X3NsZWVwZXIKIAogCi1UaGUgc2V0X2Z0cmFjZV9ub3RyYWNlIHByZXZlbnRzIHRob3NlIGZ1bmN0aW9ucyBmcm9tIGJlaW5nIHRyYWNlZC4KK1RoZSBzZXRfZnRyYWNlX25vdHJhY2UgcHJldmVudHMgdGhvc2UgZnVuY3Rpb25zIGZyb20gYmVpbmcKK3RyYWNlZC4KIAogICMgZWNobyAnKnByZWVtcHQqJyAnKmxvY2sqJyA+IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2Vfbm90cmFjZQogCkBAIC0xMzUzLDEzICsxNjg4LDc1IEBACiAKIFdlIGNhbiBzZWUgdGhhdCB0aGVyZSdzIG5vIG1vcmUgbG9jayBvciBwcmVlbXB0IHRyYWNpbmcuCiAKKworRHluYW1pYyBmdHJhY2Ugd2l0aCB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggd2hhdCBoYXMgYmVlbiBleHBsYWluZWQgYWJvdmUgY29uY2VybnMgYm90aCB0aGUKK2Z1bmN0aW9uIHRyYWNlciBhbmQgdGhlIGZ1bmN0aW9uLWdyYXBoLXRyYWNlciwgdGhlcmUgYXJlIHNvbWUKK3NwZWNpYWwgZmVhdHVyZXMgb25seSBhdmFpbGFibGUgaW4gdGhlIGZ1bmN0aW9uLWdyYXBoIHRyYWNlci4KKworSWYgeW91IHdhbnQgdG8gdHJhY2Ugb25seSBvbmUgZnVuY3Rpb24gYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4sCit5b3UganVzdCBoYXZlIHRvIGVjaG8gaXRzIG5hbWUgaW50byBzZXRfZ3JhcGhfZnVuY3Rpb246CisKKyBlY2hvIF9fZG9fZmF1bHQgPiBzZXRfZ3JhcGhfZnVuY3Rpb24KKword2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgImV4cGFuZGVkIiB0cmFjZSBvZiB0aGUgX19kb19mYXVsdCgpCitmdW5jdGlvbjoKKworIDApICAgICAgICAgICAgICAgfCAgX19kb19mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgZmlsZW1hcF9mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICBmaW5kX2xvY2tfcGFnZSgpIHsKKyAwKSAgIDAuODA0IHVzICAgIHwgICAgICAgIGZpbmRfZ2V0X3BhZ2UoKTsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgIF9fbWlnaHRfc2xlZXAoKSB7CisgMCkgICAxLjMyOSB1cyAgICB8ICAgICAgICB9CisgMCkgICAzLjkwNCB1cyAgICB8ICAgICAgfQorIDApICAgNC45NzkgdXMgICAgfCAgICB9CisgMCkgICAwLjY1MyB1cyAgICB8ICAgIF9zcGluX2xvY2soKTsKKyAwKSAgIDAuNTc4IHVzICAgIHwgICAgcGFnZV9hZGRfZmlsZV9ybWFwKCk7CisgMCkgICAwLjUyNSB1cyAgICB8ICAgIG5hdGl2ZV9zZXRfcHRlX2F0KCk7CisgMCkgICAwLjU4NSB1cyAgICB8ICAgIF9zcGluX3VubG9jaygpOworIDApICAgICAgICAgICAgICAgfCAgICB1bmxvY2tfcGFnZSgpIHsKKyAwKSAgIDAuNTQxIHVzICAgIHwgICAgICBwYWdlX3dhaXRxdWV1ZSgpOworIDApICAgMC42MzkgdXMgICAgfCAgICAgIF9fd2FrZV91cF9iaXQoKTsKKyAwKSAgIDIuNzg2IHVzICAgIHwgICAgfQorIDApICsgMTQuMjM3IHVzICAgfCAgfQorIDApICAgICAgICAgICAgICAgfCAgX19kb19mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgZmlsZW1hcF9mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICBmaW5kX2xvY2tfcGFnZSgpIHsKKyAwKSAgIDAuNjk4IHVzICAgIHwgICAgICAgIGZpbmRfZ2V0X3BhZ2UoKTsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgIF9fbWlnaHRfc2xlZXAoKSB7CisgMCkgICAxLjQxMiB1cyAgICB8ICAgICAgICB9CisgMCkgICAzLjk1MCB1cyAgICB8ICAgICAgfQorIDApICAgNS4wOTggdXMgICAgfCAgICB9CisgMCkgICAwLjYzMSB1cyAgICB8ICAgIF9zcGluX2xvY2soKTsKKyAwKSAgIDAuNTcxIHVzICAgIHwgICAgcGFnZV9hZGRfZmlsZV9ybWFwKCk7CisgMCkgICAwLjUyNiB1cyAgICB8ICAgIG5hdGl2ZV9zZXRfcHRlX2F0KCk7CisgMCkgICAwLjU4NiB1cyAgICB8ICAgIF9zcGluX3VubG9jaygpOworIDApICAgICAgICAgICAgICAgfCAgICB1bmxvY2tfcGFnZSgpIHsKKyAwKSAgIDAuNTMzIHVzICAgIHwgICAgICBwYWdlX3dhaXRxdWV1ZSgpOworIDApICAgMC42MzggdXMgICAgfCAgICAgIF9fd2FrZV91cF9iaXQoKTsKKyAwKSAgIDIuNzkzIHVzICAgIHwgICAgfQorIDApICsgMTQuMDEyIHVzICAgfCAgfQorCitZb3UgY2FuIGFsc28gZXhwYW5kIHNldmVyYWwgZnVuY3Rpb25zIGF0IG9uY2U6CisKKyBlY2hvIHN5c19vcGVuID4gc2V0X2dyYXBoX2Z1bmN0aW9uCisgZWNobyBzeXNfY2xvc2UgPj4gc2V0X2dyYXBoX2Z1bmN0aW9uCisKK05vdyBpZiB5b3Ugd2FudCB0byBnbyBiYWNrIHRvIHRyYWNlIGFsbCBmdW5jdGlvbnMgeW91IGNhbiBjbGVhcgordGhpcyBzcGVjaWFsIGZpbHRlciB2aWE6CisKKyBlY2hvID4gc2V0X2dyYXBoX2Z1bmN0aW9uCisKKwogdHJhY2VfcGlwZQogLS0tLS0tLS0tLQogCi1UaGUgdHJhY2VfcGlwZSBvdXRwdXRzIHRoZSBzYW1lIGNvbnRlbnQgYXMgdGhlIHRyYWNlIGZpbGUsIGJ1dCB0aGUgZWZmZWN0Ci1vbiB0aGUgdHJhY2luZyBpcyBkaWZmZXJlbnQuIEV2ZXJ5IHJlYWQgZnJvbSB0cmFjZV9waXBlIGlzIGNvbnN1bWVkLgotVGhpcyBtZWFucyB0aGF0IHN1YnNlcXVlbnQgcmVhZHMgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSB0cmFjZQotaXMgbGl2ZS4KK1RoZSB0cmFjZV9waXBlIG91dHB1dHMgdGhlIHNhbWUgY29udGVudCBhcyB0aGUgdHJhY2UgZmlsZSwgYnV0Cit0aGUgZWZmZWN0IG9uIHRoZSB0cmFjaW5nIGlzIGRpZmZlcmVudC4gRXZlcnkgcmVhZCBmcm9tCit0cmFjZV9waXBlIGlzIGNvbnN1bWVkLiBUaGlzIG1lYW5zIHRoYXQgc3Vic2VxdWVudCByZWFkcyB3aWxsIGJlCitkaWZmZXJlbnQuIFRoZSB0cmFjZSBpcyBsaXZlLgogCiAgIyBlY2hvIGZ1bmN0aW9uID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGNhdCAvZGVidWcvdHJhY2luZy90cmFjZV9waXBlID4gL3RtcC90cmFjZS5vdXQgJgpAQCAtMTM4NywzOCArMTc4NCw0NSBAQAogICAgICAgICAgICAgYmFzaC00MDQzICBbMDBdIDQxLjI2NzExMTogc2VsZWN0X3Rhc2tfcnFfcnQgPC10cnlfdG9fd2FrZV91cAogCiAKLU5vdGUsIHJlYWRpbmcgdGhlIHRyYWNlX3BpcGUgZmlsZSB3aWxsIGJsb2NrIHVudGlsIG1vcmUgaW5wdXQgaXMgYWRkZWQuCi1CeSBjaGFuZ2luZyB0aGUgdHJhY2VyLCB0cmFjZV9waXBlIHdpbGwgaXNzdWUgYW4gRU9GLiBXZSBuZWVkZWQKLXRvIHNldCB0aGUgZnVuY3Rpb24gdHJhY2VyIF9iZWZvcmVfIHdlICJjYXQiIHRoZSB0cmFjZV9waXBlIGZpbGUuCitOb3RlLCByZWFkaW5nIHRoZSB0cmFjZV9waXBlIGZpbGUgd2lsbCBibG9jayB1bnRpbCBtb3JlIGlucHV0IGlzCithZGRlZC4gQnkgY2hhbmdpbmcgdGhlIHRyYWNlciwgdHJhY2VfcGlwZSB3aWxsIGlzc3VlIGFuIEVPRi4gV2UKK25lZWRlZCB0byBzZXQgdGhlIGZ1bmN0aW9uIHRyYWNlciBfYmVmb3JlXyB3ZSAiY2F0IiB0aGUKK3RyYWNlX3BpcGUgZmlsZS4KIAogCiB0cmFjZSBlbnRyaWVzCiAtLS0tLS0tLS0tLS0tCiAKLUhhdmluZyB0b28gbXVjaCBvciBub3QgZW5vdWdoIGRhdGEgY2FuIGJlIHRyb3VibGVzb21lIGluIGRpYWdub3NpbmcKLWFuIGlzc3VlIGluIHRoZSBrZXJuZWwuIFRoZSBmaWxlIGJ1ZmZlcl9zaXplX2tiIGlzIHVzZWQgdG8gbW9kaWZ5Ci10aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgdHJhY2UgYnVmZmVycy4gVGhlIG51bWJlciBsaXN0ZWQKLWlzIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGNhbiBiZSByZWNvcmRlZCBwZXIgQ1BVLiBUbyBrbm93Ci10aGUgZnVsbCBzaXplLCBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIENQVVMgd2l0aCB0aGUKLW51bWJlciBvZiBlbnRyaWVzLgorSGF2aW5nIHRvbyBtdWNoIG9yIG5vdCBlbm91Z2ggZGF0YSBjYW4gYmUgdHJvdWJsZXNvbWUgaW4KK2RpYWdub3NpbmcgYW4gaXNzdWUgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGUgYnVmZmVyX3NpemVfa2IgaXMKK3VzZWQgdG8gbW9kaWZ5IHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCB0cmFjZSBidWZmZXJzLiBUaGUKK251bWJlciBsaXN0ZWQgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGJlIHJlY29yZGVkIHBlcgorQ1BVLiBUbyBrbm93IHRoZSBmdWxsIHNpemUsIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgcG9zc2libGUgQ1BVUword2l0aCB0aGUgbnVtYmVyIG9mIGVudHJpZXMuCiAKICAjIGNhdCAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogMTQwOCAodW5pdHMga2lsb2J5dGVzKQogCi1Ob3RlLCB0byBtb2RpZnkgdGhpcywgeW91IG11c3QgaGF2ZSB0cmFjaW5nIGNvbXBsZXRlbHkgZGlzYWJsZWQuIFRvIGRvIHRoYXQsCi1lY2hvICJub3AiIGludG8gdGhlIGN1cnJlbnRfdHJhY2VyLiBJZiB0aGUgY3VycmVudF90cmFjZXIgaXMgbm90IHNldAotdG8gIm5vcCIsIGFuIEVJTlZBTCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorTm90ZSwgdG8gbW9kaWZ5IHRoaXMsIHlvdSBtdXN0IGhhdmUgdHJhY2luZyBjb21wbGV0ZWx5IGRpc2FibGVkLgorVG8gZG8gdGhhdCwgZWNobyAibm9wIiBpbnRvIHRoZSBjdXJyZW50X3RyYWNlci4gSWYgdGhlCitjdXJyZW50X3RyYWNlciBpcyBub3Qgc2V0IHRvICJub3AiLCBhbiBFSU5WQUwgZXJyb3Igd2lsbCBiZQorcmV0dXJuZWQuCiAKICAjIGVjaG8gbm9wID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGVjaG8gMTAwMDAgPiAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL2J1ZmZlcl9zaXplX2tiCiAxMDAwMCAodW5pdHMga2lsb2J5dGVzKQogCi1UaGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIHdpbGwgYmUgYWxsb2NhdGVkIGlzIGxpbWl0ZWQgdG8gYSBwZXJjZW50YWdlCi1vZiBhdmFpbGFibGUgbWVtb3J5LiBBbGxvY2F0aW5nIHRvbyBtdWNoIHdpbGwgcHJvZHVjZSBhbiBlcnJvci4KK1RoZSBudW1iZXIgb2YgcGFnZXMgd2hpY2ggd2lsbCBiZSBhbGxvY2F0ZWQgaXMgbGltaXRlZCB0byBhCitwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBtZW1vcnkuIEFsbG9jYXRpbmcgdG9vIG11Y2ggd2lsbCBwcm9kdWNlCithbiBlcnJvci4KIAogICMgZWNobyAxMDAwMDAwMDAwMDAwID4gL2RlYnVnL3RyYWNpbmcvYnVmZmVyX3NpemVfa2IKIC1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeQogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL2J1ZmZlcl9zaXplX2tiCiA4NQogCistLS0tLS0tLS0tLQorCitNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZSwgaW4gdGhlCitrZXJuZWwvdHJhY2luZy8qLmMgZmlsZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDQyMTkyMDguLjI4OTVjZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC01MCw2ICs1MCw3IEBACiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgogCUlTRE4JQXBwcm9wcmlhdGUgSVNETiBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJSk9ZCUFwcHJvcHJpYXRlIGpveXN0aWNrIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlLTUVNVFJBQ0Uga21lbXRyYWNlIGlzIGVuYWJsZWQuCiAJTElCQVRBICBMaWJhdGEgZHJpdmVyIGlzIGVuYWJsZWQKIAlMUAlQcmludGVyIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlMT09QCUxvb3BiYWNrIGRldmljZSBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC0yNTksNiArMjYwLDIyIEBACiAJCQl0byBhc3N1bWUgdGhhdCB0aGlzIG1hY2hpbmUncyBwbXRpbWVyIGxhdGNoZXMgaXRzIHZhbHVlCiAJCQlhbmQgYWx3YXlzIHJldHVybnMgZ29vZCB2YWx1ZXMuCiAKKwlhY3BpX2VuZm9yY2VfcmVzb3VyY2VzPQlbQUNQSV0KKwkJCXsgc3RyaWN0IHwgbGF4IHwgbm8gfQorCQkJQ2hlY2sgZm9yIHJlc291cmNlIGNvbmZsaWN0cyBiZXR3ZWVuIG5hdGl2ZSBkcml2ZXJzCisJCQlhbmQgQUNQSSBPcGVyYXRpb25SZWdpb25zIChTeXN0ZW1JTyBhbmQgU3lzdGVtTWVtb3J5CisJCQlvbmx5KS4gSU8gcG9ydHMgYW5kIG1lbW9yeSBkZWNsYXJlZCBpbiBBQ1BJIG1pZ2h0IGJlCisJCQl1c2VkIGJ5IHRoZSBBQ1BJIHN1YnN5c3RlbSBpbiBhcmJpdHJhcnkgQU1MIGNvZGUgYW5kCisJCQljYW4gaW50ZXJmZXJlIHdpdGggbGVnYWN5IGRyaXZlcnMuCisJCQlzdHJpY3QgKGRlZmF1bHQpOiBhY2Nlc3MgdG8gcmVzb3VyY2VzIGNsYWltZWQgYnkgQUNQSQorCQkJaXMgZGVuaWVkOyBsZWdhY3kgZHJpdmVycyB0cnlpbmcgdG8gYWNjZXNzIHJlc2VydmVkCisJCQlyZXNvdXJjZXMgd2lsbCBmYWlsIHRvIGJpbmQgdG8gZGV2aWNlIHVzaW5nIHRoZW0uCisJCQlsYXg6IGFjY2VzcyB0byByZXNvdXJjZXMgY2xhaW1lZCBieSBBQ1BJIGlzIGFsbG93ZWQ7CisJCQlsZWdhY3kgZHJpdmVycyB0cnlpbmcgdG8gYWNjZXNzIHJlc2VydmVkIHJlc291cmNlcworCQkJd2lsbCBiaW5kIHN1Y2Nlc3NmdWxseSBidXQgYSB3YXJuaW5nIG1lc3NhZ2UgaXMgbG9nZ2VkLgorCQkJbm86IEFDUEkgT3BlcmF0aW9uUmVnaW9ucyBhcmUgbm90IG1hcmtlZCBhcyByZXNlcnZlZCwKKwkJCW5vIGZ1cnRoZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQuCisKIAlhZ3A9CQlbQUdQXQogCQkJeyBvZmYgfCB0cnlfdW5zdXBwb3J0ZWQgfQogCQkJb2ZmOiBkaXNhYmxlIEFHUCBzdXBwb3J0CkBAIC02MTcsNiArNjM0LDkgQEAKIAogCWRlYnVnX29iamVjdHMJW0tOTF0gRW5hYmxlIG9iamVjdCBkZWJ1Z2dpbmcKIAorCW5vX2RlYnVnX29iamVjdHMKKwkJCVtLTkxdIERpc2FibGUgb2JqZWN0IGRlYnVnZ2luZworCiAJZGVidWdwYXQJW1g4Nl0gRW5hYmxlIFBBVCBkZWJ1Z2dpbmcKIAogCWRlY25ldC5hZGRyPQlbSFcsTkVUXQpAQCAtMTA3OCw2ICsxMDk4LDE1IEBACiAJCQl1c2UgdGhlIEhpZ2hNZW0gem9uZSBpZiBpdCBleGlzdHMsIGFuZCB0aGUgTm9ybWFsCiAJCQl6b25lIGlmIGl0IGRvZXMgbm90LgogCisJa21lbXRyYWNlLmVuYWJsZT0JW0tOTCxLTUVNVFJBQ0VdIEZvcm1hdDogeyB5ZXMgfCBubyB9CisJCQkJQ29udHJvbHMgd2hldGhlciBrbWVtdHJhY2UgaXMgZW5hYmxlZAorCQkJCWF0IGJvb3QtdGltZS4KKworCWttZW10cmFjZS5zdWJidWZzPW4JW0tOTCxLTUVNVFJBQ0VdIE92ZXJyaWRlcyB0aGUgbnVtYmVyIG9mCisJCQlzdWJidWZzIGttZW10cmFjZSdzIHJlbGF5IGNoYW5uZWwgaGFzLiBTZXQgdGhpcworCQkJaGlnaGVyIHRoYW4gZGVmYXVsdCAoS01FTVRSQUNFX05fU1VCQlVGUyBpbiBjb2RlKSBpZgorCQkJeW91IGV4cGVyaWVuY2UgYnVmZmVyIG92ZXJydW5zLgorCiAJbW92YWJsZWNvcmU9bm5bS01HXQlbS05MLFg4Ni0zMixJQS02NCxQUEMsWDg2LTY0XSBUaGlzIHBhcmFtZXRlcgogCQkJaXMgc2ltaWxhciB0byBrZXJuZWxjb3JlIGV4Y2VwdCBpdCBzcGVjaWZpZXMgdGhlCiAJCQlhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIG1pZ3JhdGFibGUgYWxsb2NhdGlvbnMuCkBAIC0xNTQ2LDYgKzE1NzUsOCBAQAogCQkJVmFsaWQgYXJndW1lbnRzOiBvbiwgb2ZmCiAJCQlEZWZhdWx0OiBvbgogCisJbm9pb3RyYXAJW1NIXSBEaXNhYmxlcyB0cmFwcGVkIEkvTyBwb3J0IGFjY2Vzc2VzLgorCiAJbm9pcnFkZWJ1ZwlbWDg2LTMyXSBEaXNhYmxlcyB0aGUgY29kZSB3aGljaCBhdHRlbXB0cyB0byBkZXRlY3QgYW5kCiAJCQlkaXNhYmxlIHVuaGFuZGxlZCBpbnRlcnJ1cHQgc291cmNlcy4KIApAQCAtMjM2NCw2ICsyMzk1LDggQEAKIAogCXRwNzIwPQkJW0hXLFBTMl0KIAorCXRyYWNlX2J1Zl9zaXplPW5uW0tNR10gW2Z0cmFjZV0gd2lsbCBzZXQgdHJhY2luZyBidWZmZXIgc2l6ZS4KKwogCXRyaXg9CQlbSFcsT1NTXSBNZWRpYVRyaXggQXVkaW9Ucml4IFBybwogCQkJRm9ybWF0OgogCQkJPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPHNiX2lvPiw8c2JfaXJxPiw8c2JfZG1hPiw8bXB1X2lvPiw8bXB1X2lycT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYWNlci13bWkudHh0CmluZGV4IDJiM2E2YjUuLjVlZTJhMDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FjZXItd21pLnR4dApAQCAtMSw5ICsxLDkgQEAKIEFjZXIgTGFwdG9wIFdNSSBFeHRyYXMgRHJpdmVyCiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYWNlcmFjcGkKLVZlcnNpb24gMC4yCi0xOHRoIEF1Z3VzdCAyMDA4CitWZXJzaW9uIDAuMworNHRoIEFwcmlsIDIwMDkKIAotQ29weXJpZ2h0IDIwMDctMjAwOCBDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgorQ29weXJpZ2h0IDIwMDctMjAwOSBDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgogCiBhY2VyLXdtaSBpcyBhIGRyaXZlciB0byBhbGxvdyB5b3UgdG8gY29udHJvbCB2YXJpb3VzIHBhcnRzIG9mIHlvdXIgQWNlciBsYXB0b3AKIGhhcmR3YXJlIHVuZGVyIExpbnV4IHdoaWNoIGFyZSBleHBvc2VkIHZpYSBBQ1BJLVdNSS4KQEAgLTM2LDYgKzM2LDEwIEBACiBTdXBwb3J0ZWQgSGFyZHdhcmUKICoqKioqKioqKioqKioqKioqKgogCitOT1RFOiBUaGUgQWNlciBBc3BpcmUgT25lIGlzIG5vdCBzdXBwb3J0ZWQgaGFyZHdhcmUuIEl0IGNhbm5vdCB3b3JrIHdpdGgKK2FjZXItd21pIHVudGlsIEFjZXIgZml4IHRoZWlyIEFDUEktV01JIGltcGxlbWVudGF0aW9uIG9uIHRoZW0sIHNvIGhhcyBiZWVuCitibGFja2xpc3RlZCB1bnRpbCB0aGF0IGhhcHBlbnMuCisKIFBsZWFzZSBzZWUgdGhlIHdlYnNpdGUgZm9yIHRoZSBjdXJyZW50IGxpc3Qgb2Yga25vd24gd29ya2luZyBoYXJkYXJlOgogCiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYWNlcmFjcGkvd2lraS9TdXBwb3J0ZWRIYXJkd2FyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CmluZGV4IDQxYmM5OWYuLjNkNzY1MDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKQEAgLTIwLDcgKzIwLDggQEAKIGtlcm5lbCAyLjYuMjkgYW5kIHJlbGVhc2UgMC4yMi4KIAogVGhlIGRyaXZlciBpcyBuYW1lZCAidGhpbmtwYWQtYWNwaSIuICBJbiBzb21lIHBsYWNlcywgbGlrZSBtb2R1bGUKLW5hbWVzLCAidGhpbmtwYWRfYWNwaSIgaXMgdXNlZCBiZWNhdXNlIG9mIHVzZXJzcGFjZSBpc3N1ZXMuCituYW1lcyBhbmQgbG9nIG1lc3NhZ2VzLCAidGhpbmtwYWRfYWNwaSIgaXMgdXNlZCBiZWNhdXNlIG9mIHVzZXJzcGFjZQoraXNzdWVzLgogCiAidHBhY3BpIiBpcyB1c2VkIGFzIGEgc2hvcnRoYW5kIHdoZXJlICJ0aGlua3BhZC1hY3BpIiB3b3VsZCBiZSB0b28KIGxvbmcgZHVlIHRvIGxlbmd0aCBsaW1pdGF0aW9ucyBvbiBzb21lIExpbnV4IGtlcm5lbCB2ZXJzaW9ucy4KQEAgLTM3LDcgKzM4LDcgQEAKIAktIFRoaW5rTGlnaHQgb24gYW5kIG9mZgogCS0gbGltaXRlZCBkb2NraW5nIGFuZCB1bmRvY2tpbmcKIAktIFVsdHJhQmF5IGVqZWN0Ci0JLSBDTU9TIGNvbnRyb2wKKwktIENNT1MvVUNNUyBjb250cm9sCiAJLSBMRUQgY29udHJvbAogCS0gQUNQSSBzb3VuZHMKIAktIHRlbXBlcmF0dXJlIHNlbnNvcnMKQEAgLTQ2LDYgKzQ3LDcgQEAKIAktIFZvbHVtZSBjb250cm9sCiAJLSBGYW4gY29udHJvbCBhbmQgbW9uaXRvcmluZzogZmFuIHNwZWVkLCBmYW4gZW5hYmxlL2Rpc2FibGUKIAktIFdBTiBlbmFibGUgYW5kIGRpc2FibGUKKwktIFVXQiBlbmFibGUgYW5kIGRpc2FibGUKIAogQSBjb21wYXRpYmlsaXR5IHRhYmxlIGJ5IG1vZGVsIGFuZCBmZWF0dXJlIGlzIG1haW50YWluZWQgb24gdGhlIHdlYgogc2l0ZSwgaHR0cDovL2libS1hY3BpLnNmLm5ldC8uIEkgYXBwcmVjaWF0ZSBhbnkgc3VjY2VzcyBvciBmYWlsdXJlCkBAIC01Myw3ICs1NSw3IEBACiBQbGVhc2UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGluIHlvdXIgcmVwb3J0OgogCiAJLSBUaGlua1BhZCBtb2RlbCBuYW1lCi0JLSBhIGNvcHkgb2YgeW91ciBEU0RULCBmcm9tIC9wcm9jL2FjcGkvZHNkdAorCS0gYSBjb3B5IG9mIHlvdXIgQUNQSSB0YWJsZXMsIHVzaW5nIHRoZSAiYWNwaWR1bXAiIHV0aWxpdHkKIAktIGEgY29weSBvZiB0aGUgb3V0cHV0IG9mIGRtaWRlY29kZSwgd2l0aCBzZXJpYWwgbnVtYmVycwogCSAgYW5kIFVVSURzIG1hc2tlZCBvZmYKIAktIHdoaWNoIGRyaXZlciBmZWF0dXJlcyB3b3JrIGFuZCB3aGljaCBkb24ndApAQCAtNjYsMTcgKzY4LDE4IEBACiAtLS0tLS0tLS0tLS0KIAogSWYgeW91IGFyZSBjb21waWxpbmcgdGhpcyBkcml2ZXIgYXMgaW5jbHVkZWQgaW4gdGhlIExpbnV4IGtlcm5lbAotc291cmNlcywgc2ltcGx5IGVuYWJsZSB0aGUgQ09ORklHX1RISU5LUEFEX0FDUEkgb3B0aW9uLCBhbmQgb3B0aW9uYWxseQotZW5hYmxlIHRoZSBDT05GSUdfVEhJTktQQURfQUNQSV9CQVkgb3B0aW9uIGlmIHlvdSB3YW50IHRoZQotdGhpbmtwYWQtc3BlY2lmaWMgYmF5IGZ1bmN0aW9uYWxpdHkuCitzb3VyY2VzLCBsb29rIGZvciB0aGUgQ09ORklHX1RISU5LUEFEX0FDUEkgS2NvbmZpZyBvcHRpb24uCitJdCBpcyBsb2NhdGVkIG9uIHRoZSBtZW51IHBhdGg6ICJEZXZpY2UgRHJpdmVycyIgLT4gIlg4NiBQbGF0Zm9ybQorU3BlY2lmaWMgRGV2aWNlIERyaXZlcnMiIC0+ICJUaGlua1BhZCBBQ1BJIExhcHRvcCBFeHRyYXMiLgorCiAKIEZlYXR1cmVzCiAtLS0tLS0tLQogCiBUaGUgZHJpdmVyIGV4cG9ydHMgdHdvIGRpZmZlcmVudCBpbnRlcmZhY2VzIHRvIHVzZXJzcGFjZSwgd2hpY2ggY2FuIGJlCiB1c2VkIHRvIGFjY2VzcyB0aGUgZmVhdHVyZXMgaXQgcHJvdmlkZXMuICBPbmUgaXMgYSBsZWdhY3kgcHJvY2ZzLWJhc2VkCi1pbnRlcmZhY2UsIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBhdCBzb21lIHRpbWUgaW4gdGhlIGRpc3RhbnQgZnV0dXJlLgotVGhlIG90aGVyIGlzIGEgbmV3IHN5c2ZzLWJhc2VkIGludGVyZmFjZSB3aGljaCBpcyBub3QgY29tcGxldGUgeWV0LgoraW50ZXJmYWNlLCB3aGljaCB3aWxsIGJlIHJlbW92ZWQgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuICBUaGUgb3RoZXIKK2lzIGEgbmV3IHN5c2ZzLWJhc2VkIGludGVyZmFjZSB3aGljaCBpcyBub3QgY29tcGxldGUgeWV0LgogCiBUaGUgcHJvY2ZzIGludGVyZmFjZSBjcmVhdGVzIHRoZSAvcHJvYy9hY3BpL2libSBkaXJlY3RvcnkuICBUaGVyZSBpcyBhCiBmaWxlIHVuZGVyIHRoYXQgZGlyZWN0b3J5IGZvciBlYWNoIGZlYXR1cmUgaXQgc3VwcG9ydHMuICBUaGUgcHJvY2ZzCkBAIC0xMTEsMTUgKzExNCwxNyBAQAogYXMgYSBkcml2ZXIgYXR0cmlidXRlIChzZWUgYmVsb3cpLgogCiBTeXNmcyBkcml2ZXIgYXR0cmlidXRlcyBhcmUgb24gdGhlIGRyaXZlcidzIHN5c2ZzIGF0dHJpYnV0ZSBzcGFjZSwKLWZvciAyLjYuMjMgdGhpcyBpcyAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3RoaW5rcGFkX2FjcGkvIGFuZAorZm9yIDIuNi4yMysgdGhpcyBpcyAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3RoaW5rcGFkX2FjcGkvIGFuZAogL3N5cy9idXMvcGxhdGZvcm0vZHJpdmVycy90aGlua3BhZF9od21vbi8KIAogU3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXMgYXJlIG9uIHRoZSB0aGlua3BhZF9hY3BpIGRldmljZSBzeXNmcyBhdHRyaWJ1dGUKLXNwYWNlLCBmb3IgMi42LjIzIHRoaXMgaXMgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3RoaW5rcGFkX2FjcGkvLgorc3BhY2UsIGZvciAyLjYuMjMrIHRoaXMgaXMgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3RoaW5rcGFkX2FjcGkvLgogCiBTeXNmcyBkZXZpY2UgYXR0cmlidXRlcyBmb3IgdGhlIHNlbnNvcnMgYW5kIGZhbiBhcmUgb24gdGhlCiB0aGlua3BhZF9od21vbiBkZXZpY2UncyBzeXNmcyBhdHRyaWJ1dGUgc3BhY2UsIGJ1dCB5b3Ugc2hvdWxkIGxvY2F0ZSBpdAotbG9va2luZyBmb3IgYSBod21vbiBkZXZpY2Ugd2l0aCB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgInRoaW5rcGFkIi4KK2xvb2tpbmcgZm9yIGEgaHdtb24gZGV2aWNlIHdpdGggdGhlIG5hbWUgYXR0cmlidXRlIG9mICJ0aGlua3BhZCIsIG9yCitiZXR0ZXIgeWV0LCB0aHJvdWdoIGxpYnNlbnNvcnMuCisKIAogRHJpdmVyIHZlcnNpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0xMjksNiArMTM0LDcgQEAKIAogVGhlIGRyaXZlciBuYW1lIGFuZCB2ZXJzaW9uLiBObyBjb21tYW5kcyBjYW4gYmUgd3JpdHRlbiB0byB0aGlzIGZpbGUuCiAKKwogU3lzZnMgaW50ZXJmYWNlIHZlcnNpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE2MCw2ICsxNjYsNyBAQAogKGFuIGF0dHJpYnV0ZSBub3QgYmVpbmcgdGhlcmUgKmlzKiBhIHZhbGlkIHdheSB0byBtYWtlIGl0IGNsZWFyIHRoYXQgYQogZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGluIHN5c2ZzKS4KIAorCiBIb3Qga2V5cwogLS0tLS0tLS0KIApAQCAtMTcyLDE3ICsxNzksMTQgQEAKIGZpcm13YXJlIHRoYXQgc3VjaCBhIGRyaXZlciBpcyBwcmVzZW50LCBhbmQgbW9kaWZpZXMgaG93IHRoZSBUaGlua1BhZAogZmlybXdhcmUgd2lsbCBiZWhhdmUgaW4gbWFueSBzaXR1YXRpb25zLgogCi1UaGUgZHJpdmVyIGVuYWJsZXMgdGhlIGhvdCBrZXkgZmVhdHVyZSBhdXRvbWF0aWNhbGx5IHdoZW4gbG9hZGVkLiAgVGhlCi1mZWF0dXJlIGNhbiBsYXRlciBiZSBkaXNhYmxlZCBhbmQgZW5hYmxlZCBiYWNrIGF0IHJ1bnRpbWUuICBUaGUgZHJpdmVyCi13aWxsIGFsc28gcmVzdG9yZSB0aGUgaG90IGtleSBmZWF0dXJlIHRvIGl0cyBwcmV2aW91cyBzdGF0ZSBhbmQgbWFzawotd2hlbiBpdCBpcyB1bmxvYWRlZC4KK1RoZSBkcml2ZXIgZW5hYmxlcyB0aGUgSEtFWSAoImhvdCBrZXkiKSBldmVudCByZXBvcnRpbmcgYXV0b21hdGljYWxseQord2hlbiBsb2FkZWQsIGFuZCBkaXNhYmxlcyBpdCB3aGVuIGl0IGlzIHJlbW92ZWQuCiAKLVdoZW4gdGhlIGhvdGtleSBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIHRoZSBob3Qga2V5IG1hc2sgaXMgc2V0IChzZWUKLWJlbG93KSwgdGhlIGRyaXZlciB3aWxsIHJlcG9ydCBIS0VZIGV2ZW50cyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKK1RoZSBkcml2ZXIgd2lsbCByZXBvcnQgSEtFWSBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CiAKIAlpYm0vaG90a2V5IEhLRVkgMDAwMDAwODAgMDAwMHh4eHgKIAotU29tZSBvZiB0aGVzZSBldmVudHMgcmVmZXIgdG8gaG90IGtleSBwcmVzc2VzLCBidXQgbm90IGFsbC4KK1NvbWUgb2YgdGhlc2UgZXZlbnRzIHJlZmVyIHRvIGhvdCBrZXkgcHJlc3NlcywgYnV0IG5vdCBhbGwgb2YgdGhlbS4KIAogVGhlIGRyaXZlciB3aWxsIGdlbmVyYXRlIGV2ZW50cyBvdmVyIHRoZSBpbnB1dCBsYXllciBmb3IgaG90IGtleXMgYW5kCiByYWRpbyBzd2l0Y2hlcywgYW5kIG92ZXIgdGhlIEFDUEkgbmV0bGluayBsYXllciBmb3Igb3RoZXIgZXZlbnRzLiAgVGhlCkBAIC0yMTQsMTMgKzIxOCwxNyBAQAogCiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoZSAvcHJvYy9hY3BpL2libS9ob3RrZXkgZmlsZToKIAotCWVjaG8gZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGVuYWJsZSB0aGUgaG90IGtleXMgZmVhdHVyZQotCWVjaG8gZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBkaXNhYmxlIHRoZSBob3Qga2V5cyBmZWF0dXJlCiAJZWNobyAweGZmZmZmZmZmID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGVuYWJsZSBhbGwgaG90IGtleXMKIAllY2hvIDAgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZGlzYWJsZSBhbGwgcG9zc2libGUgaG90IGtleXMKIAkuLi4gYW55IG90aGVyIDgtaGV4LWRpZ2l0IG1hc2sgLi4uCiAJZWNobyByZXNldCA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSByZXN0b3JlIHRoZSBvcmlnaW5hbCBtYXNrCiAKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgdGhlIGtlcm5lbAordG8gbG9nIGEgd2FybmluZzoKKworCWVjaG8gZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGRvZXMgbm90aGluZworCWVjaG8gZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSByZXR1cm5zIGFuIGVycm9yCisKIFRoZSBwcm9jZnMgaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgTlZSQU0gcG9sbGluZyBjb250cm9sLiAgU28gYXMgdG8KIG1haW50YWluIG1heGltdW0gYnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5LCBpdCBkb2VzIG5vdCByZXBvcnQgYW55IG1hc2tzLAogbm9yIGRvZXMgaXQgYWxsb3cgb25lIHRvIG1hbmlwdWxhdGUgdGhlIGhvdCBrZXkgbWFzayB3aGVuIHRoZSBmaXJtd2FyZQpAQCAtMjI5LDEyICsyMzcsOSBAQAogc3lzZnMgbm90ZXM6CiAKIAlob3RrZXlfYmlvc19lbmFibGVkOgotCQlSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGhvdCBrZXlzIGZlYXR1cmUgd2hlbgotCQl0aGlua3BhZC1hY3BpIHdhcyBsb2FkZWQuICBVcG9uIG1vZHVsZSB1bmxvYWQsIHRoZSBob3QKLQkJa2V5IGZlYXR1cmUgc3RhdHVzIHdpbGwgYmUgcmVzdG9yZWQgdG8gdGhpcyB2YWx1ZS4KKwkJREVQUkVDQVRFRCwgV0lMTCBCRSBSRU1PVkVEIFNPT04uCiAKLQkJMDogaG90IGtleXMgd2VyZSBkaXNhYmxlZAotCQkxOiBob3Qga2V5cyB3ZXJlIGVuYWJsZWQgKHVudXN1YWwpCisJCVJldHVybnMgMC4KIAogCWhvdGtleV9iaW9zX21hc2s6CiAJCVJldHVybnMgdGhlIGhvdCBrZXlzIG1hc2sgd2hlbiB0aGlua3BhZC1hY3BpIHdhcyBsb2FkZWQuCkBAIC0yNDIsMTMgKzI0NywxMCBAQAogCQl0byB0aGlzIHZhbHVlLgogCiAJaG90a2V5X2VuYWJsZToKLQkJRW5hYmxlcy9kaXNhYmxlcyB0aGUgaG90IGtleXMgZmVhdHVyZSBpbiB0aGUgQUNQSQotCQlmaXJtd2FyZSwgYW5kIHJlcG9ydHMgY3VycmVudCBzdGF0dXMgb2YgdGhlIGhvdCBrZXlzCi0JCWZlYXR1cmUuICBIYXMgbm8gZWZmZWN0IG9uIHRoZSBOVlJBTSBob3Qga2V5IHBvbGxpbmcKLQkJZnVuY3Rpb25hbGl0eS4KKwkJREVQUkVDQVRFRCwgV0lMTCBCRSBSRU1PVkVEIFNPT04uCiAKLQkJMDogZGlzYWJsZXMgdGhlIGhvdCBrZXlzIGZlYXR1cmUgLyBmZWF0dXJlIGRpc2FibGVkCi0JCTE6IGVuYWJsZXMgdGhlIGhvdCBrZXlzIGZlYXR1cmUgLyBmZWF0dXJlIGVuYWJsZWQKKwkJMDogcmV0dXJucyAtRVBFUk0KKwkJMTogZG9lcyBub3RoaW5nCiAKIAlob3RrZXlfbWFzazoKIAkJYml0IG1hc2sgdG8gZW5hYmxlIGRyaXZlci1oYW5kbGluZyAoYW5kIGRlcGVuZGluZyBvbgpAQCAtNjE4LDYgKzYyMCw3IEBACiAgICBhbmQgbWFwIHRoZW0gdG8gS0VZX0JSSUdIVE5FU1NfVVAgYW5kIEtFWV9CUklHSFRORVNTX0RPV04uICBQcm9jZXNzCiAgICB0aGVzZSBrZXlzIG9uIHVzZXJzcGFjZSBzb21laG93IChlLmcuIGJ5IGNhbGxpbmcgeGJhY2tsaWdodCkuCiAKKwogQmx1ZXRvb3RoCiAtLS0tLS0tLS0KIApAQCAtNjI4LDYgKzYzMSw5IEBACiBUaGlzIGZlYXR1cmUgc2hvd3MgdGhlIHByZXNlbmNlIGFuZCBjdXJyZW50IHN0YXRlIG9mIGEgVGhpbmtQYWQKIEJsdWV0b290aCBkZXZpY2UgaW4gdGhlIGludGVybmFsIFRoaW5rUGFkIENEQyBzbG90LgogCitJZiB0aGUgVGhpbmtQYWQgc3VwcG9ydHMgaXQsIHRoZSBCbHVldG9vdGggc3RhdGUgaXMgc3RvcmVkIGluIE5WUkFNLAorc28gaXQgaXMga2VwdCBhY3Jvc3MgcmVib290cyBhbmQgcG93ZXItb2ZmLgorCiBQcm9jZnMgbm90ZXM6CiAKIElmIEJsdWV0b290aCBpcyBpbnN0YWxsZWQsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHVzZWQ6CkBAIC02NTIsNiArNjU4LDcgQEAKIAlyZmtpbGwgY29udHJvbGxlciBzd2l0Y2ggInRwYWNwaV9ibHVldG9vdGhfc3ciOiByZWZlciB0bwogCURvY3VtZW50YXRpb24vcmZraWxsLnR4dCBmb3IgZGV0YWlscy4KIAorCiBWaWRlbyBvdXRwdXQgY29udHJvbCAtLSAvcHJvYy9hY3BpL2libS92aWRlbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjkzLDExICs3MDAsOCBAQAogZmVhdHVyZXMgb2YgdGhpcyBkcml2ZXIsIGFzIGl0IHVzZXMgdGhlIHNhbWUgQUNQSSBtZXRob2RzIGFzCiBGbi1GNy4gVmlkZW8gc3dpdGNoaW5nIG9uIHRoZSBjb25zb2xlIHNob3VsZCBzdGlsbCB3b3JrLgogCi1VUERBVEU6IFRoZXJlJ3Mgbm93IGEgcGF0Y2ggZm9yIHRoZSBYLm9yZyBSYWRlb24gZHJpdmVyIHdoaWNoCi1hZGRyZXNzZXMgdGhpcyBpc3N1ZS4gU29tZSBwZW9wbGUgYXJlIHJlcG9ydGluZyBzdWNjZXNzIHdpdGggdGhlIHBhdGNoCi13aGlsZSBvdGhlcnMgYXJlIHN0aWxsIGhhdmluZyBwcm9ibGVtcy4gRm9yIG1vcmUgaW5mb3JtYXRpb246CitVUERBVEU6IHJlZmVyIHRvIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDAKIAotaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMAogCiBUaGlua0xpZ2h0IGNvbnRyb2wKIC0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIwLDEwICs3MjQsMTEgQEAKIGRvY3VtZW50YXRpb24sIGluIERvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQuICBUaGUgVGhpbmtMaWdodCBMRUQgbmFtZQogaXMgInRwYWNwaTo6dGhpbmtsaWdodCIuCiAKLUR1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgc3lzZnMgTEVEIGNsYXNzLCBpZiB0aGUgc3RhdHVzIG9mIHRoZSB0aGlua2xpZ2h0CitEdWUgdG8gbGltaXRhdGlvbnMgaW4gdGhlIHN5c2ZzIExFRCBjbGFzcywgaWYgdGhlIHN0YXR1cyBvZiB0aGUgVGhpbmtMaWdodAogY2Fubm90IGJlIHJlYWQgb3IgaWYgaXQgaXMgdW5rbm93biwgdGhpbmtwYWQtYWNwaSB3aWxsIHJlcG9ydCBpdCBhcyAib2ZmIi4KIEl0IGlzIGltcG9zc2libGUgdG8ga25vdyBpZiB0aGUgc3RhdHVzIHJldHVybmVkIHRocm91Z2ggc3lzZnMgaXMgdmFsaWQuCiAKKwogRG9ja2luZyAvIHVuZG9ja2luZyAtLSAvcHJvYy9hY3BpL2libS9kb2NrCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzg0LDYgKzc4OSw3IEBACiBVbHRyYUJhc2UgZG9ja3MgYW5kICJkdW1iIiBwb3J0IHJlcGxpY2F0b3JzIGxpa2UgdGhlIE1pbmkgRG9jayAodGhlCiBsYXR0ZXIgZG9uJ3QgbmVlZCBhbnkgQUNQSSBzdXBwb3J0LCBhY3R1YWxseSkuCiAKKwogVWx0cmFCYXkgZWplY3QgLS0gL3Byb2MvYWNwaS9pYm0vYmF5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtODQ3LDggKzg1Myw5IEBACiBOb3RlOiB0aGUgVWx0cmFCYXkgZWplY3Qgc3VwcG9ydCBvbiB0aGUgNjAwZS94LCBBMjJwIGFuZCBBM3ggaXMKIEVYUEVSSU1FTlRBTCBhbmQgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBVU0UgV0lUSCBDQVVUSU9OIQogCi1DTU9TIGNvbnRyb2wKLS0tLS0tLS0tLS0tLQorCitDTU9TL1VDTVMgY29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0KIAogcHJvY2ZzOiAvcHJvYy9hY3BpL2libS9jbW9zCiBzeXNmcyBkZXZpY2UgYXR0cmlidXRlOiBjbW9zX2NvbW1hbmQKQEAgLTg4Miw2ICs4ODksNyBAQAogaW4gbmV3ZXIgVGhpbmtQYWRzIGl0IGlzIGp1c3QgYSBjb21wYXRpYmlsaXR5IGxheWVyLiAgRG8gbm90IHVzZSBpdCwgaXQgaXMKIGV4cG9ydGVkIGp1c3QgYXMgYSBkZWJ1ZyB0b29sLgogCisKIExFRCBjb250cm9sCiAtLS0tLS0tLS0tLQogCkBAIC04OTMsNiArOTAxLDE3IEBACiBMRUQgaW5kaWNhdG9ycyBhcyB3ZWxsLiAgTmV3ZXIgVGhpbmtQYWRzIGNhbm5vdCBxdWVyeSB0aGUgcmVhbCBzdGF0dXMKIG9mIHRoZSBMRUQgaW5kaWNhdG9ycy4KIAorQmVjYXVzZSBtaXN1c2Ugb2YgdGhlIExFRHMgY291bGQgaW5kdWNlIGFuIHVuYXdhcmUgdXNlciB0byBwZXJmb3JtCitkYW5nZXJvdXMgYWN0aW9ucyAobGlrZSB1bmRvY2tpbmcgb3IgZWplY3RpbmcgYSBiYXkgZGV2aWNlIHdoaWxlIHRoZQorYnVzZXMgYXJlIHN0aWxsIGFjdGl2ZSksIG9yIG1hc2sgYW4gaW1wb3J0YW50IGFsYXJtIChzdWNoIGFzIGEgbmVhcmx5CitlbXB0eSBiYXR0ZXJ5LCBvciBhIGJyb2tlbiBiYXR0ZXJ5KSwgYWNjZXNzIHRvIG1vc3QgTEVEcyBpcworcmVzdHJpY3RlZC4KKworVW5yZXN0cmljdGVkIGFjY2VzcyB0byBhbGwgTEVEcyByZXF1aXJlcyB0aGF0IHRoaW5rcGFkLWFjcGkgYmUKK2NvbXBpbGVkIHdpdGggdGhlIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURTIG9wdGlvbiBlbmFibGVkLgorRGlzdHJpYnV0aW9ucyBtdXN0IG5ldmVyIGVuYWJsZSB0aGlzIG9wdGlvbi4gIEluZGl2aWR1YWwgdXNlcnMgdGhhdAorYXJlIGF3YXJlIG9mIHRoZSBjb25zZXF1ZW5jZXMgYXJlIHdlbGNvbWUgdG8gZW5hYmxpbmcgaXQuCisKIHByb2NmcyBub3RlczoKIAogVGhlIGF2YWlsYWJsZSBjb21tYW5kcyBhcmU6CkBAIC05MzksNiArOTU4LDcgQEAKICJ0aW1lciIgdHJpZ2dlciwgYW5kIGxlYXZlIHRoZSBkZWxheV9vbiBhbmQgZGVsYXlfb2ZmIHBhcmFtZXRlcnMgc2V0IHRvCiB6ZXJvICh0byByZXF1ZXN0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBhdXRvZGV0ZWN0aW9uKS4KIAorCiBBQ1BJIHNvdW5kcyAtLSAvcHJvYy9hY3BpL2libS9iZWVwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTk2OCw2ICs5ODgsNyBAQAogCTE2IC0gb25lIG1lZGl1bS1waXRjaGVkIGJlZXAgcmVwZWF0aW5nIGNvbnN0YW50bHksIHN0b3Agd2l0aCAxNwogCTE3IC0gc3RvcCAxNgogCisKIFRlbXBlcmF0dXJlIHNlbnNvcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTExNSw2ICsxMTM2LDcgQEAKIHdpdGggdGhpcywgZG8gc2VuZCBtZSB5b3VyIHJlc3VsdHMgKGluY2x1ZGluZyBzb21lIGNvbXBsZXRlIGR1bXBzIHdpdGgKIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbmRpdGlvbnMgd2hlbiB0aGV5IHdlcmUgdGFrZW4uKQogCisKIExDRCBicmlnaHRuZXNzIGNvbnRyb2wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTEyNCwxMCArMTE0Niw5IEBACiBUaGlzIGZlYXR1cmUgYWxsb3dzIHNvZnR3YXJlIGNvbnRyb2wgb2YgdGhlIExDRCBicmlnaHRuZXNzIG9uIFRoaW5rUGFkCiBtb2RlbHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIGJyaWdodG5lc3Mgc2xpZGVyLgogCi1JdCBoYXMgc29tZSBsaW1pdGF0aW9uczogdGhlIExDRCBiYWNrbGlnaHQgY2Fubm90IGJlIGFjdHVhbGx5IHR1cm5lZCBvbiBvcgotb2ZmIGJ5IHRoaXMgaW50ZXJmYWNlLCBhbmQgaW4gbWFueSBUaGlua1BhZCBtb2RlbHMsIHRoZSAiZGltIHdoaWxlIG9uCi1iYXR0ZXJ5IiBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgZW5hYmxlZCBieSB0aGUgQklPUyB3aGVuIHRoaXMgaW50ZXJmYWNlIGlzCi11c2VkLCBhbmQgY2Fubm90IGJlIGNvbnRyb2xsZWQuCitJdCBoYXMgc29tZSBsaW1pdGF0aW9uczogdGhlIExDRCBiYWNrbGlnaHQgY2Fubm90IGJlIGFjdHVhbGx5IHR1cm5lZAorb24gb3Igb2ZmIGJ5IHRoaXMgaW50ZXJmYWNlLCBpdCBqdXN0IGNvbnRyb2xzIHRoZSBiYWNrbGlnaHQgYnJpZ2h0bmVzcworbGV2ZWwuCiAKIE9uIElCTSAoYW5kIHNvbWUgb2YgdGhlIGVhcmxpZXIgTGVub3ZvKSBUaGlua1BhZHMsIHRoZSBiYWNrbGlnaHQgY29udHJvbAogaGFzIGVpZ2h0IGJyaWdodG5lc3MgbGV2ZWxzLCByYW5naW5nIGZyb20gMCB0byA3LiAgU29tZSBvZiB0aGUgbGV2ZWxzCkBAIC0xMTM2LDEwICsxMTU3LDE1IEBACiBmcm9tIDAgdG8gMTUuCiAKIFRoZXJlIGFyZSB0d28gaW50ZXJmYWNlcyB0byB0aGUgZmlybXdhcmUgZm9yIGRpcmVjdCBicmlnaHRuZXNzIGNvbnRyb2wsCi1FQyBhbmQgQ01PUy4gIFRvIHNlbGVjdCB3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQsIHVzZSB0aGUKK0VDIGFuZCBVQ01TIChvciBDTU9TKS4gIFRvIHNlbGVjdCB3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQsIHVzZSB0aGUKIGJyaWdodG5lc3NfbW9kZSBtb2R1bGUgcGFyYW1ldGVyOiBicmlnaHRuZXNzX21vZGU9MSBzZWxlY3RzIEVDIG1vZGUsCi1icmlnaHRuZXNzX21vZGU9MiBzZWxlY3RzIENNT1MgbW9kZSwgYnJpZ2h0bmVzc19tb2RlPTMgc2VsZWN0cyBib3RoIEVDCi1hbmQgQ01PUy4gIFRoZSBkcml2ZXIgdHJpZXMgdG8gYXV0by1kZXRlY3Qgd2hpY2ggaW50ZXJmYWNlIHRvIHVzZS4KK2JyaWdodG5lc3NfbW9kZT0yIHNlbGVjdHMgVUNNUyBtb2RlLCBicmlnaHRuZXNzX21vZGU9MyBzZWxlY3RzIEVDCittb2RlIHdpdGggTlZSQU0gYmFja2luZyAoc28gdGhhdCBicmlnaHRuZXNzIGNoYW5nZXMgYXJlIHJlbWVtYmVyZWQKK2Fjcm9zcyBzaHV0ZG93bi9yZWJvb3QpLgorCitUaGUgZHJpdmVyIHRyaWVzIHRvIHNlbGVjdCB3aGljaCBpbnRlcmZhY2UgdG8gdXNlIGZyb20gYSB0YWJsZSBvZgorZGVmYXVsdHMgZm9yIGVhY2ggVGhpbmtQYWQgbW9kZWwuICBJZiBpdCBtYWtlcyBhIHdyb25nIGNob2ljZSwgcGxlYXNlCityZXBvcnQgdGhpcyBhcyBhIGJ1Zywgc28gdGhhdCB3ZSBjYW4gZml4IGl0LgogCiBXaGVuIGRpc3BsYXkgYmFja2xpZ2h0IGJyaWdodG5lc3MgY29udHJvbHMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIHRoZQogc3RhbmRhcmQgQUNQSSBpbnRlcmZhY2UsIGl0IGlzIGJlc3QgdG8gdXNlIGl0IGluc3RlYWQgb2YgdGhpcyBkaXJlY3QKQEAgLTEyMDEsNiArMTIyNyw3IEBACiAgICAgYW5kIG1heWJlIHJlZHVjZSB0aGUgbGlmZSBvZiB0aGUgYmFja2xpZ2h0IGxhbXBzIGJ5IG5lZWRsZXNzbHkga2lja2luZwogICAgIGl0cyBsZXZlbCB1cCBhbmQgZG93biBhdCBldmVyeSBjaGFuZ2UuCiAKKwogVm9sdW1lIGNvbnRyb2wgLS0gL3Byb2MvYWNwaS9pYm0vdm9sdW1lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTIxNyw2ICsxMjQ0LDExIEBACiB1cCBvciBkb3duIGNvbW1hbmQgKHRoZSBsZXZlbCBjb21tYW5kIHdpbGwgbm90IHVubXV0ZSB0aGUgdm9sdW1lKS4KIFRoZSBjdXJyZW50IHZvbHVtZSBsZXZlbCBhbmQgbXV0ZSBzdGF0ZSBpcyBzaG93biBpbiB0aGUgZmlsZS4KIAorVGhlIEFMU0EgbWl4ZXIgaW50ZXJmYWNlIHRvIHRoaXMgZmVhdHVyZSBpcyBzdGlsbCBtaXNzaW5nLCBidXQgcGF0Y2hlcwordG8gYWRkIGl0IGV4aXN0LiAgVGhhdCBwcm9ibGVtIHNob3VsZCBiZSBhZGRyZXNzZWQgaW4gdGhlIG5vdCBzbworZGlzdGFudCBmdXR1cmUuCisKKwogRmFuIGNvbnRyb2wgYW5kIG1vbml0b3Jpbmc6IGZhbiBzcGVlZCwgZmFuIGVuYWJsZS9kaXNhYmxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTM4Myw4ICsxNDE1LDExIEBACiBzeXNmcyBkZXZpY2UgYXR0cmlidXRlOiB3d2FuX2VuYWJsZSAoZGVwcmVjYXRlZCkKIHN5c2ZzIHJma2lsbCBjbGFzczogc3dpdGNoICJ0cGFjcGlfd3dhbl9zdyIKIAotVGhpcyBmZWF0dXJlIHNob3dzIHRoZSBwcmVzZW5jZSBhbmQgY3VycmVudCBzdGF0ZSBvZiBhIFctV0FOIChTaWVycmEKLVdpcmVsZXNzIEVWLURPKSBkZXZpY2UuCitUaGlzIGZlYXR1cmUgc2hvd3MgdGhlIHByZXNlbmNlIGFuZCBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWlsdC1pbgorV2lyZWxlc3MgV0FOIGRldmljZS4KKworSWYgdGhlIFRoaW5rUGFkIHN1cHBvcnRzIGl0LCB0aGUgV1dBTiBzdGF0ZSBpcyBzdG9yZWQgaW4gTlZSQU0sCitzbyBpdCBpcyBrZXB0IGFjcm9zcyByZWJvb3RzIGFuZCBwb3dlci1vZmYuCiAKIEl0IHdhcyB0ZXN0ZWQgb24gYSBMZW5vdm8gVGhpbmtQYWQgWDYwLiBJdCBzaG91bGQgcHJvYmFibHkgd29yayBvbiBvdGhlcgogVGhpbmtQYWQgbW9kZWxzIHdoaWNoIGNvbWUgd2l0aCB0aGlzIG1vZHVsZSBpbnN0YWxsZWQuCkBAIC0xNDEzLDYgKzE0NDgsNyBAQAogCXJma2lsbCBjb250cm9sbGVyIHN3aXRjaCAidHBhY3BpX3d3YW5fc3ciOiByZWZlciB0bwogCURvY3VtZW50YXRpb24vcmZraWxsLnR4dCBmb3IgZGV0YWlscy4KIAorCiBFWFBFUklNRU5UQUw6IFVXQgogLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTQzMSw2ICsxNDY3LDcgQEAKIAlyZmtpbGwgY29udHJvbGxlciBzd2l0Y2ggInRwYWNwaV91d2Jfc3ciOiByZWZlciB0bwogCURvY3VtZW50YXRpb24vcmZraWxsLnR4dCBmb3IgZGV0YWlscy4KIAorCiBNdWx0aXBsZSBDb21tYW5kcywgTW9kdWxlIFBhcmFtZXRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNDQ1LDYgKzE0ODIsNyBAQAogCiAJbW9kcHJvYmUgdGhpbmtwYWRfYWNwaSBob3RrZXk9ZW5hYmxlLDB4ZmZmZiB2aWRlbz1hdXRvX2Rpc2FibGUKIAorCiBFbmFibGluZyBkZWJ1Z2dpbmcgb3V0cHV0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE0NTcsOCArMTQ5NSwxNSBAQAogdG8gZW5hYmxlIG1vcmUgdGhhbiBvbmUgb3V0cHV0IGNsYXNzLCBqdXN0IGFkZCB0aGVpciB2YWx1ZXMuCiAKIAlEZWJ1ZyBiaXRtYXNrCQlEZXNjcmlwdGlvbgorCTB4ODAwMAkJCURpc2Nsb3NlIFBJRCBvZiB1c2Vyc3BhY2UgcHJvZ3JhbXMKKwkJCQlhY2Nlc3Npbmcgc29tZSBmdW5jdGlvbnMgb2YgdGhlIGRyaXZlcgogCTB4MDAwMQkJCUluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nCiAJMHgwMDAyCQkJUmVtb3ZhbAorCTB4MDAwNAkJCVJGIFRyYW5zbWl0dGVyIGNvbnRyb2wgKFJGS0lMTCkKKwkJCQkoYmx1ZXRvb3RoLCBXV0FOLCBVV0IuLi4pCisJMHgwMDA4CQkJSEtFWSBldmVudCBpbnRlcmZhY2UsIGhvdGtleXMKKwkweDAwMTAJCQlGYW4gY29udHJvbAorCTB4MDAyMAkJCUJhY2tsaWdodCBicmlnaHRuZXNzCiAKIFRoZXJlIGlzIGFsc28gYSBrZXJuZWwgYnVpbGQgb3B0aW9uIHRvIGVuYWJsZSBtb3JlIGRlYnVnZ2luZwogaW5mb3JtYXRpb24sIHdoaWNoIG1heSBiZSBuZWNlc3NhcnkgdG8gZGVidWcgZHJpdmVyIHByb2JsZW1zLgpAQCAtMTQ2Nyw2ICsxNTEyLDcgQEAKIGF0IHJ1bnRpbWUgdGhyb3VnaCBzeXNmcywgdXNpbmcgdGhlIGRyaXZlciBhdHRyaWJ1dGUgZGVidWdfbGV2ZWwuICBUaGUKIGF0dHJpYnV0ZSB0YWtlcyB0aGUgc2FtZSBiaXRtYXNrIGFzIHRoZSBkZWJ1ZyBtb2R1bGUgcGFyYW1ldGVyIGFib3ZlLgogCisKIEZvcmNlIGxvYWRpbmcgb2YgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNTA1LDMgKzE1NTEsNyBAQAogCiAweDAyMDIwMDoJQWRkIHBvbGwoKS9zZWxlY3QoKSBzdXBwb3J0IHRvIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKIAkJaG90a2V5X3JhZGlvX3N3LCB3YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlLCB3YWtldXBfcmVhc29uCisKKzB4MDIwMzAwOglob3RrZXkgZW5hYmxlL2Rpc2FibGUgc3VwcG9ydCByZW1vdmVkLCBhdHRyaWJ1dGVzCisJCWhvdGtleV9iaW9zX2VuYWJsZWQgYW5kIGhvdGtleV9lbmFibGUgZGVwcmVjYXRlZCBhbmQKKwkJbWFya2VkIGZvciByZW1vdmFsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAppbmRleCBhZmEyOTQ2Li5jZjQyYjgyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dApAQCAtMTE1LDYgKzExNSw4IEBACiAKICd4JwktIFVzZWQgYnkgeG1vbiBpbnRlcmZhY2Ugb24gcHBjL3Bvd2VycGMgcGxhdGZvcm1zLgogCisneicJLSBEdW1wIHRoZSBmdHJhY2UgYnVmZmVyCisKICcwJy0nOScgLSBTZXRzIHRoZSBjb25zb2xlIGxvZyBsZXZlbCwgY29udHJvbGxpbmcgd2hpY2gga2VybmVsIG1lc3NhZ2VzCiAgICAgICAgICAgd2lsbCBiZSBwcmludGVkIHRvIHlvdXIgY29uc29sZS4gKCcwJywgZm9yIGV4YW1wbGUgd291bGQgbWFrZQogICAgICAgICAgIGl0IHNvIHRoYXQgb25seSBlbWVyZ2VuY3kgbWVzc2FnZXMgbGlrZSBQQU5JQ3Mgb3IgT09QU2VzIHdvdWxkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlcG9pbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CmluZGV4IDZmMGEwNDQuLmMwZTFjZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CkBAIC00NSw4ICs0NSw4IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKHN1YnN5c19ldmVudG5hbWUsCi0JVFBQUk9UTyhpbnQgZmlyc3RhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0JVFBBUkdTKGZpcnN0YXJnLCBwKSk7CisJVFBfUFJPVE8oaW50IGZpcnN0YXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCVRQX0FSR1MoZmlyc3RhcmcsIHApKTsKIAogSW4gc3Vic3lzL2ZpbGUuYyAod2hlcmUgdGhlIHRyYWNpbmcgc3RhdGVtZW50IG11c3QgYmUgYWRkZWQpIDoKIApAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgLSBzdWJzeXMgaXMgdGhlIG5hbWUgb2YgeW91ciBzdWJzeXN0ZW0uCiAgICAgLSBldmVudG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHRyYWNlLgogCi0tIFRQUFJPVE8oaW50IGZpcnN0YXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIGlzIHRoZSBwcm90b3R5cGUgb2YgdGhlCistIFRQX1BST1RPKGludCBmaXJzdGFyZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSBpcyB0aGUgcHJvdG90eXBlIG9mIHRoZQogICBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyB0cmFjZXBvaW50LgogCi0tIFRQQVJHUyhmaXJzdGFyZywgcCkgYXJlIHRoZSBwYXJhbWV0ZXJzIG5hbWVzLCBzYW1lIGFzIGZvdW5kIGluIHRoZQorLSBUUF9BUkdTKGZpcnN0YXJnLCBwKSBhcmUgdGhlIHBhcmFtZXRlcnMgbmFtZXMsIHNhbWUgYXMgZm91bmQgaW4gdGhlCiAgIHByb3RvdHlwZS4KIAogQ29ubmVjdGluZyBhIGZ1bmN0aW9uIChwcm9iZSkgdG8gYSB0cmFjZXBvaW50IGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEKQEAgLTEwMywxMyArMTAzLDE0IEBACiAKICogUHJvYmUgLyB0cmFjZXBvaW50IGV4YW1wbGUKIAotU2VlIHRoZSBleGFtcGxlIHByb3ZpZGVkIGluIHNhbXBsZXMvdHJhY2Vwb2ludHMvc3JjCitTZWUgdGhlIGV4YW1wbGUgcHJvdmlkZWQgaW4gc2FtcGxlcy90cmFjZXBvaW50cwogCi1Db21waWxlIHRoZW0gd2l0aCB5b3VyIGtlcm5lbC4KK0NvbXBpbGUgdGhlbSB3aXRoIHlvdXIga2VybmVsLiAgVGhleSBhcmUgYnVpbHQgZHVyaW5nICdtYWtlJyAobm90CisnbWFrZSBtb2R1bGVzJykgd2hlbiBDT05GSUdfU0FNUExFX1RSQUNFUE9JTlRTPW0uCiAKIFJ1biwgYXMgcm9vdCA6Ci1tb2Rwcm9iZSB0cmFjZXBvaW50LWV4YW1wbGUgKGluc21vZCBvcmRlciBpcyBub3QgaW1wb3J0YW50KQotbW9kcHJvYmUgdHJhY2Vwb2ludC1wcm9iZS1leGFtcGxlCi1jYXQgL3Byb2MvdHJhY2Vwb2ludC1leGFtcGxlIChyZXR1cm5zIGFuIGV4cGVjdGVkIGVycm9yKQotcm1tb2QgdHJhY2Vwb2ludC1leGFtcGxlIHRyYWNlcG9pbnQtcHJvYmUtZXhhbXBsZQorbW9kcHJvYmUgdHJhY2Vwb2ludC1zYW1wbGUgKGluc21vZCBvcmRlciBpcyBub3QgaW1wb3J0YW50KQorbW9kcHJvYmUgdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUKK2NhdCAvcHJvYy90cmFjZXBvaW50LXNhbXBsZSAocmV0dXJucyBhbiBleHBlY3RlZCBlcnJvcikKK3JtbW9kIHRyYWNlcG9pbnQtc2FtcGxlIHRyYWNlcG9pbnQtcHJvYmUtc2FtcGxlCiBkbWVzZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rbWVtdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rbWVtdHJhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2ttZW10cmFjZS50eHQKQEAgLTAsMCArMSwxMjYgQEAKKwkJCWttZW10cmFjZSAtIEtlcm5lbCBNZW1vcnkgVHJhY2VyCisKKwkJCSAgYnkgRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQorCQkJICAgICA8ZWR1YXJkLm11bnRlYW51QGxpbnV4MzYwLnJvPgorCitJLiBJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PT09PQorCitrbWVtdHJhY2UgaGVscHMga2VybmVsIGRldmVsb3BlcnMgZmlndXJlIG91dCB0d28gdGhpbmdzOgorMSkgaG93IGRpZmZlcmVudCBhbGxvY2F0b3JzIChTTEFCLCBTTFVCIGV0Yy4pIHBlcmZvcm0KKzIpIGhvdyBrZXJuZWwgY29kZSBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBob3cgbXVjaAorCitUbyBkbyB0aGlzLCB3ZSB0cmFjZSBldmVyeSBhbGxvY2F0aW9uIGFuZCBleHBvcnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXJzcGFjZQordGhyb3VnaCB0aGUgcmVsYXkgaW50ZXJmYWNlLiBXZSBleHBvcnQgdGhpbmdzIHN1Y2ggYXMgdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQKK2J5dGVzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAoaS5lLiBpbmNsdWRpbmcgaW50ZXJuYWwKK2ZyYWdtZW50YXRpb24pLCB3aGV0aGVyIHRoaXMgaXMgYSBzbGFiIGFsbG9jYXRpb24gb3IgYSBwbGFpbiBrbWFsbG9jKCkgYW5kIHNvCitvbi4KKworVGhlIGFjdHVhbCBhbmFseXNpcyBpcyBwZXJmb3JtZWQgYnkgYSB1c2Vyc3BhY2UgdG9vbCAoc2VlIHNlY3Rpb24gSUlJIGZvcgorZGV0YWlscyBvbiB3aGVyZSB0byBnZXQgaXQgZnJvbSkuIEl0IGxvZ3MgdGhlIGRhdGEgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbCwKK3Byb2Nlc3NlcyBpdCBhbmQgKGFzIG9mIHdyaXRpbmcgdGhpcykgY2FuIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKy0gdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIHBlciBjYWxsLXNpdGUKKy0gdGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIHBlciBhbGxvY2F0aW9uCistIHRvdGFsIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGZyYWdtZW50YXRpb24gaW4gdGhlIGNvbGxlY3RlZCBkYXRhc2V0CistIG51bWJlciBvZiBjcm9zcy1DUFUgYWxsb2NhdGlvbiBhbmQgZnJlZXMgKG1ha2VzIHNlbnNlIGluIE5VTUEgZW52aXJvbm1lbnRzKQorCitNb3Jlb3ZlciwgaXQgY2FuIHBvdGVudGlhbGx5IGZpbmQgaW5jb25zaXN0ZW50IGFuZCBlcnJvbmVvdXMgYmVoYXZpb3IgaW4KK2tlcm5lbCBjb2RlLCBzdWNoIGFzIHVzaW5nIHNsYWIgZnJlZSBmdW5jdGlvbnMgb24ga21hbGxvYydlZCBtZW1vcnkgb3IKK2FsbG9jYXRpbmcgbGVzcyBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQgKGJ1dCBub3QgdHJ1bHkgZmFpbGVkIGFsbG9jYXRpb25zKS4KKwora21lbXRyYWNlIGFsc28gbWFrZXMgcHJvdmlzaW9ucyBmb3IgdHJhY2luZyBvbiBzb21lIGFyY2ggYW5kIGFuYWx5c2luZyB0aGUKK2RhdGEgb24gYW5vdGhlci4KKworSUkuIERlc2lnbiBhbmQgZ29hbHMKKz09PT09PT09PT09PT09PT09PT09CisKK2ttZW10cmFjZSB3YXMgZGVzaWduZWQgdG8gaGFuZGxlIHJhdGhlciBsYXJnZSBhbW91bnRzIG9mIGRhdGEuIFRodXMsIGl0IHVzZXMKK3RoZSByZWxheSBpbnRlcmZhY2UgdG8gZXhwb3J0IHdoYXRldmVyIGlzIGxvZ2dlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIHRoZW4KK3N0b3JlcyBpdC4gQW5hbHlzaXMgYW5kIHJlcG9ydGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LCB0aGF0IGlzLCBhZnRlciB0aGUKK2RhdGEgaXMgY29sbGVjdGVkIGFuZCBzdG9yZWQuIEJ5IGRlc2lnbiwgaXQgYWxsb3dzIG9uZSB0byBsb2cgYW5kIGFuYWx5c2UKK29uIGRpZmZlcmVudCBtYWNoaW5lcyBhbmQgZGlmZmVyZW50IGFyY2hlcy4KKworQXMgb2Ygd3JpdGluZyB0aGlzLCB0aGUgQUJJIGlzIG5vdCBjb25zaWRlcmVkIHN0YWJsZSwgdGhvdWdoIGl0IG1pZ2h0IG5vdAorY2hhbmdlIG11Y2guIEhvd2V2ZXIsIG5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgY29tcGF0aWJpbGl0eSB5ZXQuIFdoZW4KK2RlZW1lZCBzdGFibGUsIHRoZSBBQkkgc2hvdWxkIHN0aWxsIGFsbG93IGVhc3kgZXh0ZW5zaW9uIHdoaWxlIG1haW50YWluaW5nCitiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBUaGlzIGlzIGRlc2NyaWJlZCBmdXJ0aGVyIGluIERvY3VtZW50YXRpb24vQUJJLgorCitTdW1tYXJ5IG9mIGRlc2lnbiBnb2FsczoKKwktIGFsbG93IGxvZ2dpbmcgYW5kIGFuYWx5c2lzIHRvIGJlIGRvbmUgYWNyb3NzIGRpZmZlcmVudCBtYWNoaW5lcworCS0gYmUgZmFzdCBhbmQgYW50aWNpcGF0ZSB1c2FnZSBpbiBoaWdoLWxvYWQgZW52aXJvbm1lbnRzICgqKQorCS0gYmUgcmVhc29uYWJseSBleHRlbnNpYmxlCisJLSBtYWtlIGl0IHBvc3NpYmxlIGZvciBHTlUvTGludXggZGlzdHJpYnV0aW9ucyB0byBoYXZlIGttZW10cmFjZQorCWluY2x1ZGVkIGluIHRoZWlyIHJlcG9zaXRvcmllcworCisoKikgLSBvbmUgb2YgdGhlIHJlYXNvbnMgUGVra2EgRW5iZXJnJ3Mgb3JpZ2luYWwgdXNlcnNwYWNlIGRhdGEgYW5hbHlzaXMKKyAgICB0b29sJ3MgY29kZSB3YXMgcmV3cml0dGVuIGZyb20gUGVybCB0byBDIChhbHRob3VnaCB0aGlzIGlzIG1vcmUgdGhhbiBhCisgICAgc2ltcGxlIGNvbnZlcnNpb24pCisKKworSUlJLiBRdWljayB1c2FnZSBndWlkZQorPT09PT09PT09PT09PT09PT09PT09PQorCisxKSBHZXQgYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyBrbWVtdHJhY2UgYW5kIGJ1aWxkIGl0IGFjY29yZGluZ2x5IChpLmUuIGVuYWJsZQorQ09ORklHX0tNRU1UUkFDRSkuCisKKzIpIEdldCB0aGUgdXNlcnNwYWNlIHRvb2wgYW5kIGJ1aWxkIGl0OgorJCBnaXQtY2xvbmUgZ2l0Oi8vcmVwby5vci5jei9rbWVtdHJhY2UtdXNlci5naXQJCSMgY3VycmVudCByZXBvc2l0b3J5CiskIGNkIGttZW10cmFjZS11c2VyLworJCAuL2F1dG9nZW4uc2gKKyQgLi9jb25maWd1cmUKKyQgbWFrZQorCiszKSBCb290IHRoZSBrbWVtdHJhY2UtZW5hYmxlZCBrZXJuZWwgaWYgeW91IGhhdmVuJ3QsIHByZWZlcmFibHkgaW4gdGhlCisnc2luZ2xlJyBydW5sZXZlbCAoc28gdGhhdCByZWxheSBidWZmZXJzIGRvbid0IGZpbGwgdXAgZWFzaWx5KSwgYW5kIHJ1bgora21lbXRyYWNlOgorIyAnJCcgZG9lcyBub3QgbWVhbiB1c2VyLCBidXQgcm9vdCBoZXJlLgorJCBtb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcKKyQgbW91bnQgLXQgcHJvYyBub25lIC9wcm9jCiskIGNkIHBhdGgvdG8va21lbXRyYWNlLXVzZXIvCiskIC4va21lbXRyYWNlZAorV2FpdCBhIGJpdCwgdGhlbiBzdG9wIGl0IHdpdGggQ1RSTCtDLgorJCBjYXQgL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlL3RvdGFsX292ZXJydW5zCSMgQ2hlY2sgaWYgd2UgZGlkbid0CisJCQkJCQkJIyBvdmVycnVuLCBzaG91bGQKKwkJCQkJCQkjIGJlIHplcm8uCiskIChPcHRpb25hbGx5KSBbUnVuIGttZW10cmFjZV9jaGVjayBzZXBhcmF0ZWx5IG9uIGVhY2ggY3B1WzAtOV0qLm91dCBmaWxlIHRvCisJCWNoZWNrIGl0cyBjb3JyZWN0bmVzc10KKyQgLi9rbWVtdHJhY2UtcmVwb3J0CisKK05vdyB5b3Ugc2hvdWxkIGhhdmUgYSBuaWNlIGFuZCBzaG9ydCBzdW1tYXJ5IG9mIGhvdyB0aGUgYWxsb2NhdG9yIHBlcmZvcm1zLgorCitJVi4gRkFRIGFuZCBrbm93biBpc3N1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitROiAnY2F0IC9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS90b3RhbF9vdmVycnVucycgaXMgbm9uLXplcm8sIGhvdyBkbyBJIGZpeAordGhpcz8gU2hvdWxkIEkgd29ycnk/CitBOiBJZiBpdCdzIG5vbi16ZXJvLCB0aGlzIGFmZmVjdHMga21lbXRyYWNlJ3MgYWNjdXJhY3ksIGRlcGVuZGluZyBvbiBob3cKK2xhcmdlIHRoZSBudW1iZXIgaXMuIFlvdSBjYW4gZml4IGl0IGJ5IHN1cHBseWluZyBhIGhpZ2hlcgorJ2ttZW10cmFjZS5zdWJidWZzPU4nIGtlcm5lbCBwYXJhbWV0ZXIuCistLS0KKworUToga21lbXRyYWNlX2NoZWNrIHJlcG9ydHMgZXJyb3JzLCBob3cgZG8gSSBmaXggdGhpcz8gU2hvdWxkIEkgd29ycnk/CitBOiBUaGlzIGlzIGEgYnVnIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQuIEl0IGNhbiBvY2N1ciBmb3IgYSB2YXJpZXR5IG9mCityZWFzb25zOgorCS0gcG9zc2libGUgYnVncyBpbiByZWxheSBjb2RlCisJLSBwb3NzaWJsZSBtaXN1c2Ugb2YgcmVsYXkgYnkga21lbXRyYWNlCisJLSB0aW1lc3RhbXBzIGJlaW5nIGNvbGxlY3RlZCB1bm9yZGVybHkKK09yIHlvdSBtYXkgZml4IGl0IHlvdXJzZWxmIGFuZCBzZW5kIHVzIGEgcGF0Y2guCistLS0KKworUToga21lbXRyYWNlX3JlcG9ydCBzaG93cyBtYW55IGVycm9ycywgaG93IGRvIEkgZml4IHRoaXM/IFNob3VsZCBJIHdvcnJ5PworQTogVGhpcyBpcyBhIGtub3duIGlzc3VlIGFuZCBJJ20gd29ya2luZyBvbiBpdC4gVGhlc2UgbWlnaHQgYmUgdHJ1ZSBlcnJvcnMKK2luIGtlcm5lbCBjb2RlLCB3aGljaCBtYXkgaGF2ZSBpbmNvbnNpc3RlbnQgYmVoYXZpb3IgKGUuZy4gYWxsb2NhdGluZyBtZW1vcnkKK3dpdGgga21lbV9jYWNoZV9hbGxvYygpIGFuZCBmcmVlaW5nIGl0IHdpdGgga2ZyZWUoKSkuIFBla2thIEVuYmVyZyBwb2ludGVkCitvdXQgdGhpcyBiZWhhdmlvciBtYXkgd29yayB3aXRoIFNMQUIsIGJ1dCBtYXkgZmFpbCB3aXRoIG90aGVyIGFsbG9jYXRvcnMuCisKK0l0IG1heSBhbHNvIGJlIGR1ZSB0byBsYWNrIG9mIHRyYWNpbmcgaW4gc29tZSB1bnVzdWFsIGFsbG9jYXRvciBmdW5jdGlvbnMuCisKK1dlIGRvbid0IHdhbnQgYnVnIHJlcG9ydHMgcmVnYXJkaW5nIHRoaXMgaXNzdWUgeWV0LgorLS0tCisKK1YuIFNlZSBhbHNvCis9PT09PT09PT09PQorCitEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQorCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDYzNjBiOWIuLjk2NzNjZDIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNDIyLDYgKzE0MjIsMTEgQEAKIE06CURvdWdsYXNfV2FyemVjaGFAZGVsbC5jb20KIFM6CU1haW50YWluZWQKIAorREVMTCBXTUkgRVhUUkFTIERSSVZFUgorUDoJTWF0dGhldyBHYXJyZXR0CitNOgltamc1OUBzcmNmLnVjYW0ub3JnCitTOglNYWludGFpbmVkCisKIERFVklDRSBOVU1CRVIgUkVHSVNUUlkKIFA6CVRvcmJlbiBNYXRoaWFzZW4KIE06CWRldmljZUBsYW5hbmEub3JnCkBAIC0yNjU0LDYgKzI2NTksMTIgQEAKIEw6CWtnZGItYnVncmVwb3J0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitLTUVNVFJBQ0UKK1A6CUVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUKK006CWVkdWFyZC5tdW50ZWFudUBsaW51eDM2MC5ybworTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBLUFJPQkVTCiBQOglBbmFudGggTiBNYXZpbmFrYXlhbmFoYWxsaQogTToJYW5hbnRoQGluLmlibS5jb20KQEAgLTI5MjQsNiArMjkzNSwxMiBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiAKK01BUlZFTEwgU09DIE1NQy9TRC9TRElPIENPTlRST0xMRVIgRFJJVkVSCitQOglOaWNvbGFzIFBpdHJlCitNOgluaWNvQGNhbS5vcmcKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogTUFSVkVMTCBZVUtPTiAvIFNZU0tPTk5FQ1QgRFJJVkVSCiBQOglNaXJrbyBMaW5kbmVyCiBNOgltbGluZG5lckBzeXNrb25uZWN0LmRlCkBAIC0zMDM0LDggKzMwNTEsOSBAQAogCiBNVUxUSUZVTkNUSU9OIERFVklDRVMgKE1GRCkKIFA6CVNhbXVlbCBPcnRpegotTToJc2FtZW9Ab3BlbmVkaGFuZC5jb20KK006CXNhbWVvQGxpbnV4LmludGVsLmNvbQogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zYW1lby9tZmQtMi42LmdpdAogUzoJU3VwcG9ydGVkCiAKIE1VTFRJTUVESUEgQ0FSRCAoTU1DKSwgU0VDVVJFIERJR0lUQUwgKFNEKSBBTkQgU0RJTyBTVUJTWVNURU0KQEAgLTM5MTYsNyArMzkzNCwxNCBAQAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIERSSVZFUgogUDoJUGllcnJlIE9zc21hbgogTToJZHJ6ZXVzLXNkaGNpQGRyemV1cy5jeAotTDoJc2RoY2ktZGV2ZWxAbGlzdC5kcnpldXMuY3gKK0w6CXNkaGNpLWRldmVsQGxpc3RzLm9zc21hbi5ldQorUzoJTWFpbnRhaW5lZAorCitTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKK1A6CUFudG9uIFZvcm9udHNvdgorTToJYXZvcm9udHNvdkBydS5tdmlzdGEuY29tCitMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZworTDoJc2RoY2ktZGV2ZWxAbGlzdHMub3NzbWFuLmV1CiBTOglNYWludGFpbmVkCiAKIFNFQ1VSSVRZIFNVQlNZU1RFTQpAQCAtNDM4MiwxMCArNDQwNyw3IEBACiBTOglNYWludGFpbmVkCiAKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCi1QOglKb2huIEJlbG1vbnRlCi1NOgl0b3NoaWJhX2FjcGlAbWVtZWJlYW0ub3JnCi1XOglodHRwOi8vbWVtZWJlYW0ub3JnL3RveXMvVG9zaGliYUFjcGlEcml2ZXIKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogCiBUT1NISUJBIFNNTSBEUklWRVIKIFA6CUpvbmF0aGFuIEJ1enphcmQKQEAgLTQzOTQsNiArNDQxNiwxMSBAQAogVzoJaHR0cDovL3d3dy5idXp6YXJkLm9yZy51ay90b3NoaWJhLwogUzoJTWFpbnRhaW5lZAogCitUTUlPIE1NQyBEUklWRVIKK1A6CUlhbiBNb2x0b24KK006CWlhbkBtbmVtZW50aC5jby51aworUzoJTWFpbnRhaW5lZAorCiBUUE0gREVWSUNFIERSSVZFUgogUDoJRGVib3JhIFZlbGFyZGUKIE06CWRlYm9yYUBsaW51eC52bmV0LmlibS5jb20KZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCA4MzBjMTZhLi5kYzgxYjM0IDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gUFJPRklMSU5HCiAJZGVwZW5kcyBvbiBIQVZFX09QUk9GSUxFCisJZGVwZW5kcyBvbiBUUkFDSU5HX1NVUFBPUlQKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBSSU5HX0JVRkZFUgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IGQ5NTNlMjMuLjg4OTcxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xNCwxNyArMTQsNCBAQAogCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxMgotCi0vKgotICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKLSAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBuZXN0YWJsZSBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtCi0gKiB0byBuZXN0IG9uIGEgc2luZ2xlIENQVS4gT24gQWxwaGEsIGludGVycnVwdHMgYXJlIG1hc2tlZCBhdCB0aGUgQ1BVCi0gKiBieSBJUEwgYXMgd2VsbCBhcyBhdCB0aGUgc3lzdGVtIGxldmVsLiBXZSBvbmx5IGhhdmUgOCBJUExzIChVTklYIFBBTGNvZGUpCi0gKiBzbyB3ZSByZWFsbHkgb25seSBoYXZlIDggbmVzdGFibGUgSVJRcywgYnV0IGFsbG93IHNvbWUgb3ZlcmhlYWQKLSAqLwotI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCAxNgotI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQotI2VuZGlmCi0KICNlbmRpZiAvKiBfQUxQSEFfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAzOTNjODE2Li45ZTZlNTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTE4LDcgKzE4LDEwIEBACiAKIHVuc2lnbmVkIGludCBfX21hY2hpbmVfYXJjaF90eXBlOwogCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogZm9yIGlubGluZSAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIGZvciBzaXplX3QgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogZm9yIE5VTEwgKi8KKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAKICNpZmRlZiBTVEFOREFMT05FX0RFQlVHCiAjZGVmaW5lIHB1dHN0ciBwcmludGYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCmluZGV4IGQ0NmIzNjcuLmRlZWVhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwpAQCAtNTA3LDcgKzUwNyw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBhc2ljM19wbGF0Zm9ybV9kYXRhIHBhc2ljM19wbGF0Zm9ybV9kYXRhID0gewotCS5idXNfc2hpZnQgID0gMiwKIAkubGVkX3BkYXRhICA9ICZwYXNpYzNfbGVkc19pbmZvLAogCS5jbG9ja19yYXRlID0gNDAwMDAwMCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL0tjb25maWcgYi9hcmNoL2F2cjMyL0tjb25maWcKaW5kZXggNDE0YThhZC4uMzVlM2JkOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9LY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvS2NvbmZpZwpAQCAtMTQ0LDYgKzE0NCwxOSBAQAogCWJvb2wgIkZhdnItMzIgTENELWJvYXJkIgogCXNlbGVjdCBDUFVfQVQzMkFQNzAwMAogCitjb25maWcgQk9BUkRfTUVSSVNDCisJYm9vbCAiTWVyaXNjIGJvYXJkIgorCXNlbGVjdCBDUFVfQVQzMkFQNzAwMAorCWhlbHAKKwkgIE1lcmlzYyBpcyB0aGUgZmFtaWx5IG5hbWUgZm9yIGEgcmFuZ2Ugb2YgQVZSMzItYmFzZWQgYm9hcmRzLgorCisJICBUaGUgYm9hcmRzIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIGluIGEgbWFuLW1hY2hpbmUKKwkgIGludGVyZmFjaW5nIGVudmlyb25tZW50LCB1dGlsaXppbmcgYSB0b3VjaC1iYXNlZCBncmFwaGljYWwKKwkgIHVzZXIgaW50ZXJmYWNlLiBUaGV5IGhvc3QgYSB2YXN0IHJhbmdlIG9mIEkvTyBwZXJpcGhlcmFscyBhcworCSAgd2VsbCBhcyBhIGxhcmdlIFNEUkFNICYgRmxhc2ggbWVtb3J5IGJhbmsuCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5tYXJ0aW5zc29uLnNlL21lcmlzYworCiBjb25maWcgQk9BUkRfTUlNQzIwMAogCWJvb2wgIk1JTUMyMDAgQ1BVIGJvYXJkIgogCXNlbGVjdCBDUFVfQVQzMkFQNzAwMApAQCAtMTUzLDYgKzE2Niw3IEBACiBzb3VyY2UgImFyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL0tjb25maWciCiBzb3VyY2UgImFyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9LY29uZmlnIgorc291cmNlICJhcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvS2NvbmZpZyIKIAogY2hvaWNlCiAJcHJvbXB0ICJCb290IGxvYWRlciB0eXBlIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvTWFrZWZpbGUKaW5kZXggZjNlZjNiYi4uMGI5N2UxNCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9NYWtlZmlsZQorKysgYi9hcmNoL2F2cjMyL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBACiBjb3JlLSQoQ09ORklHX0JPQVJEX0FUTkdXMTAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvCiBjb3JlLSQoQ09ORklHX0JPQVJEX0hBTU1FUkhFQUQpCQkrPSBhcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkLwogY29yZS0kKENPTkZJR19CT0FSRF9GQVZSXzMyKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi8KK2NvcmUtJChDT05GSUdfQk9BUkRfTUVSSVNDKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjLwogY29yZS0kKENPTkZJR19CT0FSRF9NSU1DMjAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC8KIGNvcmUtJChDT05GSUdfTE9BREVSX1VfQk9PVCkJCSs9IGFyY2gvYXZyMzIvYm9vdC91LWJvb3QvCiBjb3JlLXkJCQkJCSs9IGFyY2gvYXZyMzIva2VybmVsLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvZXZrbGNkMTB4LmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwppbmRleCA4MTQwYjIyLi4wMDMzNzExIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApAQCAtMTksMjYgKzIwLDI2IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2F0MzJhcDcwMHguaD4KKyNpbmNsdWRlIDxtYWNoL3BvcnRtdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgorCiBzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBhYzk3YzBfZGF0YSA9IHsKLQkuZG1hX3J4X3BlcmlwaF9pZAk9IDMsCi0JLmRtYV90eF9wZXJpcGhfaWQJPSA0LAotCS5kbWFfY29udHJvbGxlcl9pZAk9IDAsCi0JLnJlc2V0X3BpbgkJPSBHUElPX1BJTl9QQigxOSksCisJLnJlc2V0X3BpbiA9IEdQSU9fUElOX1BCKDE5KSwKIH07CiAKICNpZmRlZiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1ZHQQogc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YSB0Y2cwNTd2Z2xhZF9tb2Rlc1tdID0gewogCXsKLQkJLm5hbWUJCT0gIjY0MHg0ODAgQCA2MCIsCi0JCS5yZWZyZXNoCT0gNjAsCisJCS5uYW1lCQk9ICI2NDB4NDgwIEAgNTAiLAorCQkucmVmcmVzaAk9IDUwLAogCQkueHJlcwkJPSA2NDAsCQkueXJlcwkJPSA0ODAsCiAJCS5waXhjbG9jawk9IEtIWjJQSUNPUygyNTE4MCksCiAKLQkJLmxlZnRfbWFyZ2luCT0gNjQsCQkucmlnaHRfbWFyZ2luCT0gMzEsCi0JCS51cHBlcl9tYXJnaW4JPSAzNCwJCS5sb3dlcl9tYXJnaW4JPSAyLAotCQkuaHN5bmNfbGVuCT0gOTYsCQkudnN5bmNfbGVuCT0gNCwKKwkJLmxlZnRfbWFyZ2luCT0gNjQsCQkucmlnaHRfbWFyZ2luCT0gOTYsCisJCS51cHBlcl9tYXJnaW4JPSAzNCwJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDY0LAkJLnZzeW5jX2xlbgk9IDE1LAogCiAJCS5zeW5jCQk9IDAsCiAJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELApAQCAtNjksMTQgKzcwLDE0IEBACiAjZWxpZiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1FWR0EKIHN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEgdGNnMDU3cXZsYWRfbW9kZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCQk9ICIzMjB4MjQwIEAgNjAiLAotCQkucmVmcmVzaAk9IDYwLAorCQkubmFtZQkJPSAiMzIweDI0MCBAIDUwIiwKKwkJLnJlZnJlc2gJPSA1MCwKIAkJLnhyZXMJCT0gMzIwLAkJLnlyZXMJCT0gMjQwLAogCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNjMwMCksCiAKLQkJLmxlZnRfbWFyZ2luCT0gNTIsCQkucmlnaHRfbWFyZ2luCT0gMjgsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAkJLmxvd2VyX21hcmdpbgk9IDIsCi0JCS5oc3luY19sZW4JPSA5NiwJCS52c3luY19sZW4JPSA0LAorCQkubGVmdF9tYXJnaW4JPSAzNCwJCS5yaWdodF9tYXJnaW4JPSA0NiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCQkubG93ZXJfbWFyZ2luCT0gMTUsCisJCS5oc3luY19sZW4JPSA2NCwJCS52c3luY19sZW4JPSAxMiwKIAogCQkuc3luYwkJPSAwLAogCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKQEAgLTE0NCwxMiArMTQ1LDI5IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGF0ZXZrbGNkMTB4X2xjZGNfcG93ZXJfY29udHJvbChpbnQgb24pCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QSU5fUEIoMTUpLCBvbik7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGF0ZXZrbGNkMTB4X2luaXQodm9pZCkKIHsKLQlhdDMyX2FkZF9kZXZpY2VfYWM5N2MoMCwgJmFjOTdjMF9kYXRhKTsKKwkvKiBQQjE1IGlzIGNvbm5lY3RlZCB0byB0aGUgZW5hYmxlIGxpbmUgb24gdGhlIGJvb3N0IHJlZ3VsYXRvcgorCSAqIGNvbnRyb2xsaW5nIHRoZSBiYWNrbGlnaHQgZm9yIHRoZSBMQ0QgcGFuZWwuCisJICovCisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQigxNSksIEFUMzJfR1BJT0ZfT1VUUFVUKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QSU5fUEIoMTUpLCAiYmFja2xpZ2h0Iik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUElOX1BCKDE1KSwgMCk7CisKKwlhdGV2a2xjZDEweF9sY2RjX2RhdGEuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbCA9CisJCWF0ZXZrbGNkMTB4X2xjZGNfcG93ZXJfY29udHJvbDsKIAogCWF0MzJfYWRkX2RldmljZV9sY2RjKDAsICZhdGV2a2xjZDEweF9sY2RjX2RhdGEsCi0JCQlmYm1lbV9zdGFydCwgZmJtZW1fc2l6ZSwgMSk7CisJCQlmYm1lbV9zdGFydCwgZmJtZW1fc2l6ZSwKKwkJCUFUTUVMX0xDRENfQUxUXzE4QklUIHwgQVRNRUxfTENEQ19QRV9EVkFMKTsKKworCWF0MzJfYWRkX2RldmljZV9hYzk3YygwLCAmYWM5N2MwX2RhdGEsIEFDOTdDX0JPVEgpOworCiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChhdGV2a2xjZDEweF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jCmluZGV4IDA1ZDM3MjIuLjViMDIyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvc2V0dXAuYwpAQCAtNTYsMTMgKzU2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kwX2RhdGEgPSB7CiAJLnNsb3RbMF0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotI2lmbmRlZiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYCiAJCS5kZXRlY3RfcGluCT0gR1BJT19QSU5fUEMoMjUpLAogCQkud3BfcGluCQk9IEdQSU9fUElOX1BFKDApLAotI2Vsc2UKLQkJLmRldGVjdF9waW4JPSBHUElPX1BJTl9OT05FLAotCQkud3BfcGluCQk9IEdQSU9fUElOX05PTkUsCi0jZW5kaWYKIAl9LAogfTsKIApAQCAtMTIzLDcgKzExOCw3IEBACiAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7Ci0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMwLCBEQjkgKi8KIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKaW5kZXggMWYzM2ExMC4uMmFkYzI2MSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYwpAQCAtMjUyLDEyICsyNTIsMTIgQEAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7CiAjaWZkZWYJQ09ORklHX0JPQVJEX0FUU1RLMTAwWF9TVzJfQ1VTVE9NCi0JYXQzMl9tYXBfdXNhcnQoMCwgMSk7CS8qIFVTQVJUIDAvQjogL2Rldi90dHlTMSwgSVJEQSAqLworCWF0MzJfbWFwX3VzYXJ0KDAsIDEsIDApOwkvKiBVU0FSVCAwL0I6IC9kZXYvdHR5UzEsIElSREEgKi8KICNlbHNlCi0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDEvQTogL2Rldi90dHlTMCwgREI5ICovCisJYXQzMl9tYXBfdXNhcnQoMSwgMCwgMCk7CS8qIFVTQVJUIDEvQTogL2Rldi90dHlTMCwgREI5ICovCiAjZW5kaWYKIAkvKiBVU0FSVCAyL3VudXNlZDogZXhwYW5zaW9uIGNvbm5lY3RvciAqLwotCWF0MzJfbWFwX3VzYXJ0KDMsIDIpOwkvKiBVU0FSVCAzL0M6IC9kZXYvdHR5UzIsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDMsIDIsIDApOwkvKiBVU0FSVCAzL0M6IC9kZXYvdHR5UzIsIERCOSAqLwogCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYwppbmRleCBiM2EyM2M4Li5mZjdlMjMyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAzLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMy5jCkBAIC0xMTUsMTIgKzExNSwxMiBAQAogdm9pZCBfX2luaXQgc2V0dXBfYm9hcmQodm9pZCkKIHsKICNpZmRlZglDT05GSUdfQk9BUkRfQVRTVEsxMDBYX1NXMl9DVVNUT00KLQlhdDMyX21hcF91c2FydCgwLCAxKTsJLyogVVNBUlQgMC9COiAvZGV2L3R0eVMxLCBJUkRBICovCisJYXQzMl9tYXBfdXNhcnQoMCwgMSwgMCk7CS8qIFVTQVJUIDAvQjogL2Rldi90dHlTMSwgSVJEQSAqLwogI2Vsc2UKLQlhdDMyX21hcF91c2FydCgxLCAwKTsJLyogVVNBUlQgMS9BOiAvZGV2L3R0eVMwLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgxLCAwLCAwKTsJLyogVVNBUlQgMS9BOiAvZGV2L3R0eVMwLCBEQjkgKi8KICNlbmRpZgogCS8qIFVTQVJUIDIvdW51c2VkOiBleHBhbnNpb24gY29ubmVjdG9yICovCi0JYXQzMl9tYXBfdXNhcnQoMywgMik7CS8qIFVTQVJUIDMvQzogL2Rldi90dHlTMiwgREI5ICovCisJYXQzMl9tYXBfdXNhcnQoMywgMiwgMCk7CS8qIFVTQVJUIDMvQzogL2Rldi90dHlTMiwgREI5ICovCiAKIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jCmluZGV4IDI5YjM1YWMuLjY5YTlmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDQuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDA0LmMKQEAgLTEyMCwxMiArMTIwLDEyIEBACiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewogI2lmZGVmCUNPTkZJR19CT0FSRF9BVFNUSzEwMFhfU1cyX0NVU1RPTQotCWF0MzJfbWFwX3VzYXJ0KDAsIDEpOwkvKiBVU0FSVCAwL0I6IC9kZXYvdHR5UzEsIElSREEgKi8KKwlhdDMyX21hcF91c2FydCgwLCAxLCAwKTsJLyogVVNBUlQgMC9COiAvZGV2L3R0eVMxLCBJUkRBICovCiAjZWxzZQotCWF0MzJfbWFwX3VzYXJ0KDEsIDApOwkvKiBVU0FSVCAxL0E6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxL0E6IC9kZXYvdHR5UzAsIERCOSAqLwogI2VuZGlmCiAJLyogVVNBUlQgMi91bnVzZWQ6IGV4cGFuc2lvbiBjb25uZWN0b3IgKi8KLQlhdDMyX21hcF91c2FydCgzLCAyKTsJLyogVVNBUlQgMy9DOiAvZGV2L3R0eVMyLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgzLCAyLCAwKTsJLyogVVNBUlQgMy9DOiAvZGV2L3R0eVMyLCBEQjkgKi8KIAogCWF0MzJfc2V0dXBfc2VyaWFsX2NvbnNvbGUoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL3NldHVwLmMKaW5kZXggNzQ1YzQwOC4uNDZjOWIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvc2V0dXAuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogCisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWJkYWMuaD4KKwogI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDEsNiArNDMsOSBAQAogLyogSW5pdGlhbGl6ZWQgYnkgYm9vdGxvYWRlci1zcGVjaWZpYyBzdGFydHVwIGNvZGUuICovCiBzdHJ1Y3QgdGFnICpib290bG9hZGVyX3RhZ3MgX19pbml0ZGF0YTsKIAorc3RhdGljIHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSBfX2luaXRkYXRhIGFiZGFjMF9kYXRhID0geworfTsKKwogc3RydWN0IGV0aF9hZGRyIHsKIAl1OCBhZGRyWzZdOwogfTsKQEAgLTI0NSw3ICsyNTAsNyBAQAogCiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewotCWF0MzJfbWFwX3VzYXJ0KDMsIDApOwkvKiBVU0FSVCAzID0+IC9kZXYvdHR5UzAgKi8KKwlhdDMyX21hcF91c2FydCgzLCAwLCAwKTsJLyogVVNBUlQgMyA9PiAvZGV2L3R0eVMwICovCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIApAQCAtMzI2LDcgKzMzMSw3IEBACiAKIAlzcGkxX2JvYXJkX2luZm9bMF0uaXJxID0gZ3Bpb190b19pcnEoR1BJT19QSU5fUEIoMykpOwogCi0Jc2V0X2FiZGFjX3JhdGUoYXQzMl9hZGRfZGV2aWNlX2FiZGFjKDApKTsKKwlzZXRfYWJkYWNfcmF0ZShhdDMyX2FkZF9kZXZpY2VfYWJkYWMoMCwgJmFiZGFjMF9kYXRhKSk7CiAKIAlhdDMyX2FkZF9kZXZpY2VfcHdtKDEgPDwgYXRtZWxfcHdtX2JsX3BkYXRhLnB3bV9jaGFubmVsKTsKIAlhdDMyX2FkZF9kZXZpY2Vfc3BpKDEsIHNwaTFfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGkxX2JvYXJkX2luZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYwppbmRleCA0ZDJmZTgyLi5kZDAwOTg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPG1hY2gvaW5pdC5oPgogI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgogCisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWM5N2MuaD4KKwogI2luY2x1ZGUgIi4uLy4uL21hY2gtYXQzMmFwL2Nsb2NrLmgiCiAjaW5jbHVkZSAiZmxhc2guaCIKIApAQCAtMTYzLDcgKzE2NSw3IEBACiAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7Ci0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMwLCBEQjkgKi8KIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQogCkBAIC0yMzMsNyArMjM1LDcgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfaW5mbywgQVJSQVlfU0laRShpMmNfaW5mbykpOwogCiAjaWZkZWYgQ09ORklHX0JPQVJEX0hBTU1FUkhFQURfU05ECi0JYXQzMl9hZGRfZGV2aWNlX2FjOTdjKDAsICZhYzk3Y19kYXRhKTsKKwlhdDMyX2FkZF9kZXZpY2VfYWM5N2MoMCwgJmFjOTdjX2RhdGEsIEFDOTdDX0JPVEgpOwogI2VuZGlmCiAKIAkvKiBTZWxlY3QgdGhlIFRvdWNoc2NyZWVuIGludGVycnVwdCBwaW4gbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL0tjb25maWcgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA0MzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL0tjb25maWcKQEAgLTAsMCArMSw1IEBACisjIE1lcmlzYyBjdXN0b21pemF0aW9uCisKK2lmIEJPQVJEX01FUklTQworCitlbmRpZgkjIEJPQVJEX01FUklTQwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL01ha2VmaWxlIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGM3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJCQkJCSs9IHNldHVwLm8gZmxhc2gubyBkaXNwbGF5Lm8gbWVyaXNjX3N5c2ZzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9kaXNwbGF5LmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZGlzcGxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTU0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZGlzcGxheS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBEaXNwbGF5IHNldHVwIGNvZGUgZm9yIHRoZSBNZXJpc2MgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluc3NvbiBFbGVrdHJvbmlrIEFCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSAibWVyaXNjLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1lcmlzY19mYl92aWRlb21vZGVbXSA9IHsKKwl7CisJCS5yZWZyZXNoCT0gNDQsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkubGVmdF9tYXJnaW4JPSA5NiwKKwkJLnJpZ2h0X21hcmdpbgk9IDk2LAorCQkudXBwZXJfbWFyZ2luCT0gMzQsCisJCS5sb3dlcl9tYXJnaW4JPSA4LAorCQkuaHN5bmNfbGVuCT0gNjQsCisJCS52c3luY19sZW4JPSA2NCwKKwkJLm5hbWUJCT0gIjY0MHg0ODAgQCA0NCIsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUygyNTE4MCksCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIG1lcmlzY19mYl9tb25zcGVjcyA9IHsKKwkubWFudWZhY3R1cmVyCT0gIkt5byIsCisJLm1vbml0b3IJPSAiVENHMDc1VkcyQUQiLAorCS5tb2RlZGIJCT0gbWVyaXNjX2ZiX3ZpZGVvbW9kZSwKKwkubW9kZWRiX2xlbgk9IEFSUkFZX1NJWkUobWVyaXNjX2ZiX3ZpZGVvbW9kZSksCisJLmhmbWluCQk9IDMwMDAwLAorCS5oZm1heAkJPSAzMzMzMywKKwkudmZtaW4JCT0gNjAsCisJLnZmbWF4CQk9IDkwLAorCS5kY2xrbWF4CT0gMzAwMDAwMDAsCit9OworCitzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBtZXJpc2NfbGNkY19kYXRhID0geworCS5kZWZhdWx0X2JwcAkJPSAyNCwKKwkuZGVmYXVsdF9kbWFjb24JCT0gQVRNRUxfTENEQ19ETUFFTiB8IEFUTUVMX0xDRENfRE1BMkRFTiwKKwkuZGVmYXVsdF9sY2Rjb24yCT0gKEFUTUVMX0xDRENfRElTVFlQRV9URlQKKwkJCQkgICB8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRQorCQkJCSAgIHwgQVRNRUxfTENEQ19NRU1PUl9CSUcpLAorCS5kZWZhdWx0X21vbnNwZWNzCT0gJm1lcmlzY19mYl9tb25zcGVjcywKKwkuZ3VhcmRfdGltZQkJPSAyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWF0MzJfYWRkX2RldmljZV9sY2RjKDAsICZtZXJpc2NfbGNkY19kYXRhLCBmYm1lbV9zdGFydCwKKwkJCSAgICAgZmJtZW1fc2l6ZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChtZXJpc2NfZGlzcGxheV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9mbGFzaC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4NTZmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9mbGFzaC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogTWVyaXNjIGJvYXJkLXNwZWNpZmljIGZsYXNoIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3NtYy5oPgorCisvKiBXaWxsIGJlIHRyYW5zbGF0ZWQgdG8gdW5pdHMgb2YgMTQuMyBucywgcm91bmRlZCB1cCAqLworc3RhdGljIHN0cnVjdCBzbWNfdGltaW5nIGZsYXNoX3RpbWluZyBfX2luaXRkYXRhID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAxICogMTQsCisJLm5yZF9zZXR1cAkJPSA1ICogMTQsCisJLm5jc193cml0ZV9zZXR1cAk9IDEgKiAxNCwKKwkubndlX3NldHVwCQk9IDIgKiAxNCwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAxMiAqIDE0LAorCS5ucmRfcHVsc2UJCT0gNyAqIDE0LAorCS5uY3Nfd3JpdGVfcHVsc2UJPSA4ICogMTQsCisJLm53ZV9wdWxzZQkJPSA0ICogMTQsCisKKwkucmVhZF9jeWNsZQkJPSAxNCAqIDE0LAorCS53cml0ZV9jeWNsZQkJPSAxMCAqIDE0LAorfTsKKworc3RhdGljIHN0cnVjdCBzbWNfY29uZmlnIGZsYXNoX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5idXNfd2lkdGgJPSAyLAorCS5ucmRfY29udHJvbGxlZAk9IDEsCisJLm53ZV9jb250cm9sbGVkCT0gMSwKKwkuYnl0ZV93cml0ZQk9IDEsCisJLnRkZl9jeWNsZXMJPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGZsYXNoXzBfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJib290IiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSAweDAwMDYwMDAwLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IDB4MDAwNjAwMDAsCisJCS5zaXplCQk9IDB4MDAyMDAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInJvb3QiLAorCQkub2Zmc2V0CQk9IDB4MDAyNjAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGZsYXNoXzFfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICIybmRmbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShmbGFzaF8wX3BhcnRzKSwKKwkJLnBhcnRzCQk9IGZsYXNoXzBfcGFydHMsCisJfSwKKwl7CisJCS53aWR0aAkJPSAyLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGZsYXNoXzFfcGFydHMpLAorCQkucGFydHMJCT0gZmxhc2hfMV9wYXJ0cywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlW10gPSB7CisJeworCQkuc3RhcnQJCT0gMHgwMDAwMDAwMCwKKwkJLmVuZAkJPSAweDAzZmZmZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSAweDA0MDAwMDAwLAorCQkuZW5kCQk9IDB4MDdmZmZmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlW10gPSB7CisJeworCQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJCS5pZAkJPSAwLAorCQkucmVzb3VyY2UJPSAmZmxhc2hfcmVzb3VyY2VbMF0sCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YQk9ICZmbGFzaF9kYXRhWzBdLAorCQl9LAorCX0sCisJeworCQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJCS5pZAkJPSAxLAorCQkucmVzb3VyY2UJPSAmZmxhc2hfcmVzb3VyY2VbMV0sCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YQk9ICZmbGFzaF9kYXRhWzFdLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZXJpc2NfZmxhc2hfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJc21jX3NldF90aW1pbmcoJmZsYXNoX2NvbmZpZywgJmZsYXNoX3RpbWluZyk7CisKKwlyZXQgPSBzbWNfc2V0X2NvbmZpZ3VyYXRpb24oMCwgJmZsYXNoX2NvbmZpZyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNZXJpc2M6IGZhaWxlZCB0byBzZXQgTk9SIGZsYXNoIHRpbWluZyAjMFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc21jX3NldF9jb25maWd1cmF0aW9uKDQsICZmbGFzaF9jb25maWcpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVyaXNjOiBmYWlsZWQgdG8gc2V0IE5PUiBmbGFzaCB0aW1pbmcgIzFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZmxhc2hfZGV2aWNlWzBdKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmZsYXNoX2RldmljZVsxXSk7CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwobWVyaXNjX2ZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzYy5oIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZmZiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIE1lcmlzYyBleHBvcnRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BUkNIX0FWUjMyX0JPQVJEU19NRVJJU0NfTUVSSVNDX0gKKyNkZWZpbmUgX19BUkNIX0FWUjMyX0JPQVJEU19NRVJJU0NfTUVSSVNDX0gKKworY29uc3QgY2hhciAqbWVyaXNjX3JldmlzaW9uKHZvaWQpOworY29uc3QgY2hhciAqbWVyaXNjX21vZGVsKHZvaWQpOworCitleHRlcm4gc3RydWN0IGNsYXNzIG1lcmlzY19jbGFzczsKKworI2VuZGlmIC8qIF9fQVJDSF9BVlIzMl9CT0FSRFNfTUVSSVNDX01FUklTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjX3N5c2ZzLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0MzFmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9tZXJpc2Nfc3lzZnMuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogTWVyaXNjIHN5c2ZzIGV4cG9ydHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluc3NvbiBFbGVrdHJvbmlrIEFCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSAibWVyaXNjLmgiCisKK3N0YXRpYyBzc2l6ZV90IG1lcmlzY19tb2RlbF9zaG93KHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldCA9IDA7CisKKwlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtZXJpc2NfbW9kZWwoKSk7CisJcmV0ID0gc3RybGVuKGJ1ZikgKyAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbWVyaXNjX3JldmlzaW9uX3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmV0ID0gMDsKKworCXNwcmludGYoYnVmLCAiJXNcbiIsIG1lcmlzY19yZXZpc2lvbigpKTsKKwlyZXQgPSBzdHJsZW4oYnVmKSArIDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBtZXJpc2NfY2xhc3NfYXR0cnNbXSA9IHsKKwlfX0FUVFIobW9kZWwsIFNfSVJVR08sIG1lcmlzY19tb2RlbF9zaG93LCBOVUxMKSwKKwlfX0FUVFIocmV2aXNpb24sIFNfSVJVR08sIG1lcmlzY19yZXZpc2lvbl9zaG93LCBOVUxMKSwKKwlfX0FUVFJfTlVMTCwKK307CisKK3N0cnVjdCBjbGFzcyBtZXJpc2NfY2xhc3MgPSB7CisJLm5hbWUgPQkJIm1lcmlzYyIsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmNsYXNzX2F0dHJzID0JbWVyaXNjX2NsYXNzX2F0dHJzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX3N5c2ZzX2luaXQodm9pZCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gY2xhc3NfcmVnaXN0ZXIoJm1lcmlzY19jbGFzcyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobWVyaXNjX3N5c2ZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2Mvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGIzMDBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL3NldHVwLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBCb2FyZC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgTWVyaXNjCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F0MzJhcDcwMHguaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CisKKyNpbmNsdWRlICJtZXJpc2MuaCIKKworLyogSG9sZHMgdGhlIGF1dG9kZXRlY3RlZCBib2FyZCBtb2RlbCBhbmQgcmV2aXNpb24gKi8KK3N0YXRpYyBpbnQgbWVyaXNjX2JvYXJkX2lkOworCisvKiBJbml0aWFsaXplZCBieSBib290bG9hZGVyLXNwZWNpZmljIHN0YXJ0dXAgY29kZS4gKi8KK3N0cnVjdCB0YWcgKmJvb3Rsb2FkZXJfdGFncyBfX2luaXRkYXRhOworCisvKiBPc2NpbGxhdG9yIGZyZXF1ZW5jaWVzLiBUaGVzZSBhcmUgYm9hcmQgc3BlY2lmaWMgKi8KK3Vuc2lnbmVkIGxvbmcgYXQzMl9ib2FyZF9vc2NfcmF0ZXNbM10gPSB7CisJWzBdCT0gMzI3NjgsCS8qIDMyLjc2OCBrSHogb24gUlRDIG9zYyAqLworCVsxXQk9IDIwMDAwMDAwLAkvKiAyMCBNSHogb24gb3NjMCAqLworCVsyXQk9IDEyMDAwMDAwLAkvKiAxMiBNSHogb24gb3NjMSAqLworfTsKKworc3RydWN0IGV0aF9hZGRyIHsKKwl1OCBhZGRyWzZdOworfTsKKworc3RhdGljIHN0cnVjdCBldGhfYWRkciBfX2luaXRkYXRhIGh3X2FkZHJbMl07CitzdGF0aWMgc3RydWN0IGV0aF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZXRoX2RhdGFbMl07CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI2KHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPX1BJTl9QQigyNikpOworfQorCitzdGF0aWMgaW50IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGVfUEIyOCh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEIoMjgpKTsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBhZHM3ODQ2X2RhdGEgPSB7CisJLm1vZGVsCQkJCT0gNzg0NiwKKwkudnJlZl9kZWxheV91c2VjcwkJPSAxMDAsCisJLnZyZWZfbXYJCQk9IDAsCisJLmtlZXBfdnJlZl9vbgkJCT0gMCwKKwkuc2V0dGxlX2RlbGF5X3VzZWNzCQk9IDE1MCwKKwkucGVuaXJxX3JlY2hlY2tfZGVsYXlfdXNlY3MJPSAxLAorCS54X3BsYXRlX29obXMJCQk9IDgwMCwKKwkuZGVib3VuY2VfcmVwCQkJPSA0LAorCS5kZWJvdW5jZV9tYXgJCQk9IDEwLAorCS5kZWJvdW5jZV90b2wJCQk9IDUwLAorCS5nZXRfcGVuZG93bl9zdGF0ZQkJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlX1BCMjYsCisJLmZpbHRlcl9pbml0CQkJPSBOVUxMLAorCS5maWx0ZXIJCQkJPSBOVUxMLAorCS5maWx0ZXJfY2xlYW51cAkJCT0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzcGkwX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKKwkJLm1heF9zcGVlZF9oegk9IDMyNTAwMDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzNzg0Nl9kYXRhLAorCQkubW9kZQkJPSBTUElfTU9ERV8wLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0geworCS5zbG90WzBdID0geworCQkuYnVzX3dpZHRoCT0gNCwKKwkJLmRldGVjdF9waW4JPSBHUElPX1BJTl9QRSgxOSksCisJCS53cF9waW4JCT0gR1BJT19QSU5fUEUoMjApLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfZXRoZXJuZXQoc3RydWN0IHRhZyAqdGFnKQoreworCWludCBpOworCisJaSA9IHRhZy0+dS5ldGhlcm5ldC5tYWNfaW5kZXg7CisJaWYgKGkgPCBBUlJBWV9TSVpFKGh3X2FkZHIpKSB7CisJCW1lbWNweShod19hZGRyW2ldLmFkZHIsIHRhZy0+dS5ldGhlcm5ldC5od19hZGRyZXNzLAorCQkgICAgICAgc2l6ZW9mKGh3X2FkZHJbaV0uYWRkcikpOworCX0KKworCXJldHVybiAwOworfQorX190YWd0YWJsZShBVEFHX0VUSEVSTkVULCBwYXJzZV90YWdfZXRoZXJuZXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2h3X2FkZHIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY29uc3QgdTggKmFkZHI7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCisJaWYgKHBkZXYtPmlkID49IEFSUkFZX1NJWkUoaHdfYWRkcikpCisJCXJldHVybjsKKworCWFkZHIgPSBod19hZGRyW3BkZXYtPmlkXS5hZGRyOworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJcmV0dXJuOworCisJcmVncyA9ICh2b2lkIF9faW9tZW0gX19mb3JjZSAqKXJlcy0+c3RhcnQ7CisJcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoIXBjbGspCisJCXJldHVybjsKKworCWNsa19lbmFibGUocGNsayk7CisJX19yYXdfd3JpdGVsKChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KQorCQkgICAgIHwgKGFkZHJbMV0gPDwgOCkgfCBhZGRyWzBdLCByZWdzICsgMHg5OCk7CisJX19yYXdfd3JpdGVsKChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XSwgcmVncyArIDB4OWMpOworCWNsa19kaXNhYmxlKHBjbGspOworCWNsa19wdXQocGNsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBpMmNfZ3Bpb19kYXRhID0geworCS5zZGFfcGluCQk9IEdQSU9fUElOX1BBKDYpLAorCS5zY2xfcGluCQk9IEdQSU9fUElOX1BBKDcpLAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2dwaW9fZGV2aWNlID0geworCS5uYW1lCT0gImkyYy1ncGlvIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19ncGlvX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBpMmNfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKQorCX0sCit9OworCisjaWZkZWYgQ09ORklHX0xFRFNfQVRNRUxfUFdNCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHN0a19wd21fbGVkW10gPSB7CisJeworCQkubmFtZQk9ICJiYWNrbGlnaHQiLAorCQkuZ3Bpbwk9IDAsCQkvKiBQV00gY2hhbm5lbCAwIChMQ0QgYmFja2xpZ2h0KSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgc3RrX3B3bV9sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHN0a19wd21fbGVkKSwKKwkubGVkcwkJPSBzdGtfcHdtX2xlZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0a19wd21fbGVkX2RldiA9IHsKKwkubmFtZQk9ICJsZWRzLWF0bWVsLXB3bSIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3RrX3B3bV9sZWRfZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCitjb25zdCBjaGFyICptZXJpc2NfbW9kZWwodm9pZCkKK3sKKwlzd2l0Y2ggKG1lcmlzY19ib2FyZF9pZCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiAiNTAwLTAxIjsKKwljYXNlIDI6CisJCXJldHVybiAiQlQiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVW5rbm93biI7CisJfQorfQorCitjb25zdCBjaGFyICptZXJpc2NfcmV2aXNpb24odm9pZCkKK3sKKwlzd2l0Y2ggKG1lcmlzY19ib2FyZF9pZCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICJCIjsKKwljYXNlIDE6CisJCXJldHVybiAiRCI7CisJY2FzZSAyOgorCQlyZXR1cm4gIkEiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVW5rbm93biI7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXRlY3RfbWVyaXNjX2JvYXJkX2lkKHZvaWQpCit7CisJLyogQm9hcmQgSUQgcGlucyBNVVNUIGJlIHNldCBhcyBpbnB1dCBvciB0aGUgYm9hcmQgbWF5IGJlIGRhbWFnZWQgKi8KKwlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDI0KSwgQVQzMl9HUElPRl9QVUxMVVApOworCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEEoMjUpLCBBVDMyX0dQSU9GX1BVTExVUCk7CisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQSgyNiksIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKwlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDI3KSwgQVQzMl9HUElPRl9QVUxMVVApOworCisJbWVyaXNjX2JvYXJkX2lkID0gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BBKDI0KSkgKworCQkhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEEoMjUpKSAqIDIgKworCQkhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEEoMjYpKSAqIDQgKworCQkhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEEoMjcpKSAqIDg7Cit9CisKK3ZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCit7CisJYXQzMl9tYXBfdXNhcnQoMCwgMCwgMCk7CisJYXQzMl9tYXBfdXNhcnQoMSwgMSwgMCk7CisJYXQzMl9tYXBfdXNhcnQoMywgMywgMCk7CisJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX2luaXQodm9pZCkKK3sKKwlkZXRlY3RfbWVyaXNjX2JvYXJkX2lkKCk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkJPQVJEOiBNZXJpc2MgJXMgcmV2aXNpb24gJXNcbiIsIG1lcmlzY19tb2RlbCgpLAorCSAgICAgICBtZXJpc2NfcmV2aXNpb24oKSk7CisKKwkvKiBSZXNlcnZlIHBpbnMgZm9yIFNEUkFNICovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJT0VfQkFTRSwgQVRNRUxfRUJJX1BFX0RBVEFfQUxMIHwgKDEgPDwgMjYpKTsKKworCWlmIChtZXJpc2NfYm9hcmRfaWQgPj0gMSkKKwkJYXQzMl9tYXBfdXNhcnQoMiwgMiwgMCk7CisKKwlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMCk7CisJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDEpOworCWlmIChtZXJpc2NfYm9hcmRfaWQgPj0gMSkKKwkJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDIpOworCWF0MzJfYWRkX2RldmljZV91c2FydCgzKTsKKwlzZXRfaHdfYWRkcihhdDMyX2FkZF9kZXZpY2VfZXRoKDAsICZldGhfZGF0YVswXSkpOworCisJLyogQURTNzg0NiBQRU5JUlEgKi8KKwlpZiAobWVyaXNjX2JvYXJkX2lkID09IDApIHsKKwkJYWRzNzg0Nl9kYXRhLmdldF9wZW5kb3duX3N0YXRlID0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI2OworCQlhdDMyX3NlbGVjdF9wZXJpcGgoR1BJT19QSU9CX0JBU0UsIDEgPDwgMjYsCisJCQkJICAgR1BJT19QRVJJUEhfQSwgQVQzMl9HUElPRl9QVUxMVVApOworCQlzcGkwX2JvYXJkX2luZm9bMF0uaXJxID0gQVQzMl9FWFRJTlQoMSk7CisJfSBlbHNlIHsKKwkJYWRzNzg0Nl9kYXRhLmdldF9wZW5kb3duX3N0YXRlID0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI4OworCQlhdDMyX3NlbGVjdF9wZXJpcGgoR1BJT19QSU9CX0JBU0UsIDEgPDwgMjgsIEdQSU9fUEVSSVBIX0EsCisJCQkJICAgQVQzMl9HUElPRl9QVUxMVVApOworCQlzcGkwX2JvYXJkX2luZm9bMF0uaXJxID0gQVQzMl9FWFRJTlQoMyk7CisJfQorCisJLyogQURTNzg0NiBidXN5IHBpbiAqLworCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEEoNCksIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKworCWF0MzJfYWRkX2RldmljZV9zcGkoMCwgc3BpMF9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaTBfYm9hcmRfaW5mbykpOworCisJYXQzMl9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKKworI2lmZGVmIENPTkZJR19MRURTX0FUTUVMX1BXTQorCWF0MzJfYWRkX2RldmljZV9wd20oKDEgPDwgMCkgfCAoMSA8PCAyKSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzdGtfcHdtX2xlZF9kZXYpOworI2Vsc2UKKwlhdDMyX2FkZF9kZXZpY2VfcHdtKCgxIDw8IDIpKTsKKyNlbmRpZgorCisJYXQzMl9zZWxlY3RfZ3BpbyhpMmNfZ3Bpb19kYXRhLnNkYV9waW4sCisJCUFUMzJfR1BJT0ZfTVVMVElEUlYgfCBBVDMyX0dQSU9GX09VVFBVVCB8IEFUMzJfR1BJT0ZfSElHSCk7CisJYXQzMl9zZWxlY3RfZ3BpbyhpMmNfZ3Bpb19kYXRhLnNjbF9waW4sCisJCUFUMzJfR1BJT0ZfTVVMVElEUlYgfCBBVDMyX0dQSU9GX09VVFBVVCB8IEFUMzJfR1BJT0ZfSElHSCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpMmNfZ3Bpb19kZXZpY2UpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjX2luZm8sIEFSUkFZX1NJWkUoaTJjX2luZm8pKTsKKworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwobWVyaXNjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jCmluZGV4IDJiNThkNjEuLmMxYjIxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL3NldHVwLmMKQEAgLTE3NSwxMCArMTc1LDEwIEBACiAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7Ci0JYXQzMl9tYXBfdXNhcnQoMCwgMCk7CS8qIFVTQVJUIDA6IC9kZXYvdHR5UzAgKFRUTCAtLT4gQWx0ZXJhKSAqLwotCWF0MzJfbWFwX3VzYXJ0KDEsIDEpOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMxIChSUzIzMikgKi8KLQlhdDMyX21hcF91c2FydCgyLCAyKTsJLyogVVNBUlQgMjogL2Rldi90dHlTMiAoUlM0ODUpICovCi0JYXQzMl9tYXBfdXNhcnQoMywgMyk7CS8qIFVTQVJUIDM6IC9kZXYvdHR5UzMgKFJTNDIyIE11bHRpZHJvcCkgKi8KKwlhdDMyX21hcF91c2FydCgwLCAwLCAwKTsJLyogVVNBUlQgMDogL2Rldi90dHlTMCAoVFRMIC0tPiBBbHRlcmEpICovCisJYXQzMl9tYXBfdXNhcnQoMSwgMSwgMCk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzEgKFJTMjMyKSAqLworCWF0MzJfbWFwX3VzYXJ0KDIsIDIsIDApOwkvKiBVU0FSVCAyOiAvZGV2L3R0eVMyIChSUzQ4NSkgKi8KKwlhdDMyX21hcF91c2FydCgzLCAzLCAwKTsJLyogVVNBUlQgMzogL2Rldi90dHlTMyAoUlM0MjIgTXVsdGlkcm9wKSAqLwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgaTJjX2dwaW9fZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9tZXJpc2NfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1NTRkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9tZXJpc2NfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTIzNyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMQorIyBXZWQgTWFyIDI1IDE0OjA2OjE1IDIwMDkKKyMKK0NPTkZJR19BVlIzMj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19TVUJBUkNIX0FWUjMyQj15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QRVJGT1JNQU5DRV9DT1VOVEVSUz15CitDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwWD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0hBTU1FUkhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfRkFWUl8zMiBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9NSU1DMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9NRVJJU0M9eQorQ09ORklHX0xPQURFUl9VX0JPT1Q9eQorCisjCisjIEF0bWVsIEFWUjMyIEFQIG9wdGlvbnMKKyMKK0NPTkZJR19BUDcwMFhfMzJfQklUX1NNQz15CisjIENPTkZJR19BUDcwMFhfMTZfQklUX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUDcwMFhfOF9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAorQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAorQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUVVJQ0tMSVNUPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVZFX01FTU9SWV9QUkVTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfTk9ERV9NRU1NQVBfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTk1JX0RFQlVHR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKKyMgQ09ORklHX0lQX1BJTVNNX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPXkKK0NPTkZJR19JTkVUX0VTUD15CitDT05GSUdfSU5FVF9JUENPTVA9eQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49eQorQ09ORklHX0NBTl9SQVc9eQorQ09ORklHX0NBTl9CQ009eQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfQ0FOX1ZDQU4gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorQ09ORklHX01URF9CTE9DSzJNVEQ9eQorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorQ09ORklHX0FUTUVMX1BXTT15CisjIENPTkZJR19BVE1FTF9UQ0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfU1NDPXkKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorIyBDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlMgaXMgbm90IHNldAorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorQ09ORklHX1NQSV9TUElERVY9eQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMzJBUDcwMFhfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BVE1FTD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVE1FTE1DST15CitDT05GSUdfTU1DX0FUTUVMTUNJX0RNQT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0FUTUVMX1BXTT15CisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisjIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUENGODU2Mz15CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0FUMzJBUDcwMFggaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRFdfRE1BQz15CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVUlPPXkKKyMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAyNjczNTQzLi4wMTViYzc1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMjAsMTUgKzIwLDQgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxMgotCi0vKgotICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKLSAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMgaW4gdGhlIHN5c3RlbQotICogbmVzdGluZyBvbiBhIHNpbmdsZSBDUFU6Ci0gKi8KLSNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUwotIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKLSNlbmRpZgotCiAjZW5kaWYgLyogX19BU01fQVZSMzJfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDNmYmZkMWUuLjdjYzY1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAKKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYmRhYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CisKICNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtOTYzLDU2ICs5NjYsNjggQEAKIERFRklORV9ERVZfREFUQShhdG1lbF91c2FydCwgMyk7CiBERVZfQ0xLKHVzYXJ0LCBhdG1lbF91c2FydDMsIHBiYSwgNik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnMoaW50IGZsYWdzKQogewogCXUzMiBwaW5fbWFzayA9ICgxIDw8IDgpIHwgKDEgPDwgOSk7IC8qIFJYRCAmIFRYRCAqLworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX1JUUykJcGluX21hc2sgfD0gKDEgPDwgNik7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ1RTKQlwaW5fbWFzayB8PSAoMSA8PCA3KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DTEspCXBpbl9tYXNrIHw9ICgxIDw8IDEwKTsKIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0EsIHBpbl9tYXNrLCBQRVJJUEhfQiwgQVQzMl9HUElPRl9QVUxMVVApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKGludCBmbGFncykKIHsKIAl1MzIgcGluX21hc2sgPSAoMSA8PCAxNykgfCAoMSA8PCAxOCk7IC8qIFJYRCAmIFRYRCAqLworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX1JUUykJcGluX21hc2sgfD0gKDEgPDwgMTkpOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NUUykJcGluX21hc2sgfD0gKDEgPDwgMjApOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NMSykJcGluX21hc2sgfD0gKDEgPDwgMTYpOwogCiAJc2VsZWN0X3BlcmlwaGVyYWwoUElPQSwgcGluX21hc2ssIFBFUklQSF9BLCBBVDMyX0dQSU9GX1BVTExVUCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnMoaW50IGZsYWdzKQogewogCXUzMiBwaW5fbWFzayA9ICgxIDw8IDI2KSB8ICgxIDw8IDI3KTsgLyogUlhEICYgVFhEICovCisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfUlRTKQlwaW5fbWFzayB8PSAoMSA8PCAzMCk7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ1RTKQlwaW5fbWFzayB8PSAoMSA8PCAyOSk7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ0xLKQlwaW5fbWFzayB8PSAoMSA8PCAyOCk7CiAKIAlzZWxlY3RfcGVyaXBoZXJhbChQSU9CLCBwaW5fbWFzaywgUEVSSVBIX0IsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyhpbnQgZmxhZ3MpCiB7CiAJdTMyIHBpbl9tYXNrID0gKDEgPDwgMTgpIHwgKDEgPDwgMTcpOyAvKiBSWEQgJiBUWEQgKi8KKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9SVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDE2KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDE1KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DTEspCXBpbl9tYXNrIHw9ICgxIDw8IDE5KTsKIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0IsIHBpbl9tYXNrLCBQRVJJUEhfQiwgQVQzMl9HUElPRl9QVUxMVVApOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDMyX3VzYXJ0c1s0XTsKIAotdm9pZCBfX2luaXQgYXQzMl9tYXBfdXNhcnQodW5zaWduZWQgaW50IGh3X2lkLCB1bnNpZ25lZCBpbnQgbGluZSkKK3ZvaWQgX19pbml0IGF0MzJfbWFwX3VzYXJ0KHVuc2lnbmVkIGludCBod19pZCwgdW5zaWduZWQgaW50IGxpbmUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCiAJc3dpdGNoIChod19pZCkgewogCWNhc2UgMDoKIAkJcGRldiA9ICZhdG1lbF91c2FydDBfZGV2aWNlOwotCQljb25maWd1cmVfdXNhcnQwX3BpbnMoKTsKKwkJY29uZmlndXJlX3VzYXJ0MF9waW5zKGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlwZGV2ID0gJmF0bWVsX3VzYXJ0MV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV91c2FydDFfcGlucygpOworCQljb25maWd1cmVfdXNhcnQxX3BpbnMoZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDI6CiAJCXBkZXYgPSAmYXRtZWxfdXNhcnQyX2RldmljZTsKLQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKCk7CisJCWNvbmZpZ3VyZV91c2FydDJfcGlucyhmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJcGRldiA9ICZhdG1lbF91c2FydDNfZGV2aWNlOwotCQljb25maWd1cmVfdXNhcnQzX3BpbnMoKTsKKwkJY29uZmlndXJlX3VzYXJ0M19waW5zKGZsYWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwpAQCAtMTc1Myw3ICsxNzY4LDcgQEAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemVvZih1c2JhX2RhdGEpKSkKIAkJZ290byBvdXRfZnJlZV9wZGV2OwogCi0JaWYgKGRhdGEtPnZidXNfcGluID49IDApCisJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKQogCQlhdDMyX3NlbGVjdF9ncGlvKGRhdGEtPnZidXNfcGluLCAwKTsKIAogCXVzYmEwX3BjbGsuZGV2ID0gJnBkZXYtPmRldjsKQEAgLTE5ODAsMTEgKzE5OTUsMTQgQEAKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdAotYXQzMl9hZGRfZGV2aWNlX2FjOTdjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCithdDMyX2FkZF9kZXZpY2VfYWM5N2ModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgX2RhdGE7Ci0JdTMyIHBpbl9tYXNrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBkd19kbWFfc2xhdmUJCSpyeF9kd3M7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQkJKnR4X2R3czsKKwlzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YQlfZGF0YTsKKwl1MzIJCQkJcGluX21hc2s7CiAKIAlpZiAoaWQgIT0gMCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xOTk1LDM3ICsyMDEzLDUyIEBACiAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgYXRtZWxfYWM5N2MwX3Jlc291cmNlLAogCQkJCUFSUkFZX1NJWkUoYXRtZWxfYWM5N2MwX3Jlc291cmNlKSkpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKIAlpZiAoIWRhdGEpIHsKIAkJZGF0YSA9ICZfZGF0YTsKIAkJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSkpOwotCQlkYXRhLT5yZXNldF9waW4gPSBHUElPX1BJTl9OT05FOworCQlkYXRhLT5yZXNldF9waW4gPSAtRU5PREVWOwogCX0KIAotCWRhdGEtPmRtYV9yeF9wZXJpcGhfaWQgPSAzOwotCWRhdGEtPmRtYV90eF9wZXJpcGhfaWQgPSA0OwotCWRhdGEtPmRtYV9jb250cm9sbGVyX2lkID0gMDsKKwlyeF9kd3MgPSAmZGF0YS0+cnhfZHdzOworCXR4X2R3cyA9ICZkYXRhLT50eF9kd3M7CisKKwkvKiBDaGVjayBpZiBETUEgc2xhdmUgaW50ZXJmYWNlIGZvciBjYXB0dXJlIHNob3VsZCBiZSBjb25maWd1cmVkLiAqLworCWlmIChmbGFncyAmIEFDOTdDX0NBUFRVUkUpIHsKKwkJcnhfZHdzLT5kbWFfZGV2ID0gJmR3X2RtYWMwX2RldmljZS5kZXY7CisJCXJ4X2R3cy0+cmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzE2QklUOworCQlyeF9kd3MtPmNmZ19oaSA9IERXQ19DRkdIX1NSQ19QRVIoMyk7CisJCXJ4X2R3cy0+Y2ZnX2xvICY9IH4oRFdDX0NGR0xfSFNfRFNUX1BPTCB8IERXQ19DRkdMX0hTX1NSQ19QT0wpOworCX0KKworCS8qIENoZWNrIGlmIERNQSBzbGF2ZSBpbnRlcmZhY2UgZm9yIHBsYXliYWNrIHNob3VsZCBiZSBjb25maWd1cmVkLiAqLworCWlmIChmbGFncyAmIEFDOTdDX1BMQVlCQUNLKSB7CisJCXR4X2R3cy0+ZG1hX2RldiA9ICZkd19kbWFjMF9kZXZpY2UuZGV2OworCQl0eF9kd3MtPnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8xNkJJVDsKKwkJdHhfZHdzLT5jZmdfaGkgPSBEV0NfQ0ZHSF9EU1RfUEVSKDQpOworCQl0eF9kd3MtPmNmZ19sbyAmPSB+KERXQ19DRkdMX0hTX0RTVF9QT0wgfCBEV0NfQ0ZHTF9IU19TUkNfUE9MKTsKKwl9CiAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCiAJCQkJc2l6ZW9mKHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhKSkpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKLQlwaW5fbWFzayAgPSAoMSA8PCAyMCkgfCAoMSA8PCAyMSk7CS8qIFNETyAmIFNZTkMgKi8KLQlwaW5fbWFzayB8PSAoMSA8PCAyMikgfCAoMSA8PCAyMyk7CS8qIFNDTEsgJiBTREkgKi8KKwkvKiBTRE8gfCBTWU5DIHwgU0NMSyB8IFNESSAqLworCXBpbl9tYXNrID0gKDEgPDwgMjApIHwgKDEgPDwgMjEpIHwgKDEgPDwgMjIpIHwgKDEgPDwgMjMpOwogCiAJc2VsZWN0X3BlcmlwaGVyYWwoUElPQiwgcGluX21hc2ssIFBFUklQSF9CLCAwKTsKIAotCS8qIFRPRE86IGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSB3aXRoIGtlcm5lbCAyLjYuMjYuICovCi0JaWYgKGRhdGEtPnJlc2V0X3BpbiAhPSBHUElPX1BJTl9OT05FKQotCQlhdDMyX3NlbGVjdF9ncGlvKGRhdGEtPnJlc2V0X3BpbiwgMCk7CisJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSkKKwkJYXQzMl9zZWxlY3RfZ3BpbyhkYXRhLT5yZXNldF9waW4sIEFUMzJfR1BJT0ZfT1VUUFVUCisJCQkJfCBBVDMyX0dQSU9GX0hJR0gpOwogCiAJYXRtZWxfYWM5N2MwX3BjbGsuZGV2ID0gJnBkZXYtPmRldjsKIAogCXBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJcmV0dXJuIHBkZXY7CiAKLWZhaWw6CitvdXRfZnJlZV9yZXNvdXJjZXM6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIwNTMsMjEgKzIwODYsMzQgQEAKIAkuaW5kZXgJCT0gNiwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBhdDMyX2FkZF9kZXZpY2VfYWJkYWModW5zaWduZWQgaW50IGlkKQorc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0CithdDMyX2FkZF9kZXZpY2VfYWJkYWModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQl1MzIgcGluX21hc2s7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCSpkd3M7CisJdTMyCQkJcGluX21hc2s7CiAKLQlpZiAoaWQgIT0gMCkKKwlpZiAoaWQgIT0gMCB8fCAhZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJhYmRhYyIsIGlkKTsKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJhdG1lbF9hYmRhYyIsIGlkKTsKIAlpZiAoIXBkZXYpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIGFiZGFjMF9yZXNvdXJjZSwKIAkJCQlBUlJBWV9TSVpFKGFiZGFjMF9yZXNvdXJjZSkpKQotCQlnb3RvIGVycl9hZGRfcmVzb3VyY2VzOworCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCWR3cyA9ICZkYXRhLT5kd3M7CisKKwlkd3MtPmRtYV9kZXYgPSAmZHdfZG1hYzBfZGV2aWNlLmRldjsKKwlkd3MtPnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8zMkJJVDsKKwlkd3MtPmNmZ19oaSA9IERXQ19DRkdIX0RTVF9QRVIoMik7CisJZHdzLT5jZmdfbG8gJj0gfihEV0NfQ0ZHTF9IU19EU1RfUE9MIHwgRFdDX0NGR0xfSFNfU1JDX1BPTCk7CisKKwlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCisJCQkJc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSkpKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIAogCXBpbl9tYXNrICA9ICgxIDw8IDIwKSB8ICgxIDw8IDIyKTsJLyogREFUQTEgJiBEQVRBTjEgKi8KIAlwaW5fbWFzayB8PSAoMSA8PCAyMSkgfCAoMSA8PCAyMyk7CS8qIERBVEEwICYgREFUQU4wICovCkBAIC0yMDgwLDcgKzIxMjYsNyBAQAogCXBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJcmV0dXJuIHBkZXY7CiAKLWVycl9hZGRfcmVzb3VyY2VzOgorb3V0X2ZyZWVfcmVzb3VyY2VzOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdDMyYXA3MDB4LmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdDMyYXA3MDB4LmgKaW5kZXggNWM0Yzk3MS4uYjkyMjJiZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXQzMmFwNzAweC5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2F0MzJhcDcwMHguaApAQCAtMTcxLDI1ICsxNzEsNDkgQEAKIAkJQVRNRUxfTENEQyhQRSwgREFUQTIwKSB8IEFUTUVMX0xDREMoUEUsIERBVEEyMSkgfAlcCiAJCUFUTUVMX0xDREMoUEQsIERBVEEyMikgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjMpKQogCi0jZGVmaW5lIEFUTUVMX0xDRENfUFJJXzE1Ql9EQVRBICgJCQkJCVwKLQkJQVRNRUxfTENEQyhQQywgREFUQTApICB8IEFUTUVMX0xDREMoUEMsIERBVEExKSAgfAlcCisjZGVmaW5lIEFUTUVMX0xDRENfUFJJXzE4Ql9EQVRBICgJCQkJCVwKIAkJQVRNRUxfTENEQyhQQywgREFUQTIpICB8IEFUTUVMX0xDREMoUEMsIERBVEEzKSAgfAlcCiAJCUFUTUVMX0xDREMoUEMsIERBVEE0KSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBNSkgIHwJXAotCQlBVE1FTF9MQ0RDKFBELCBEQVRBOCkgIHwgQVRNRUxfTENEQyhQRCwgREFUQTkpICB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTYpICB8IEFUTUVMX0xDREMoUEQsIERBVEE3KSAgfAlcCiAJCUFUTUVMX0xDREMoUEQsIERBVEExMCkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTEpIHwJXAotCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE2KSB8CVwKLQkJQVRNRUxfTENEQyhQRCwgREFUQTE3KSB8IEFUTUVMX0xDREMoUEQsIERBVEExOCkgfAlcCi0JCUFUTUVMX0xDREMoUEQsIERBVEExOSkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjApKQorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTEzKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE0KSB8IEFUTUVMX0xDREMoUEQsIERBVEExNSkgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExOCkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTkpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjApIHwgQVRNRUxfTENEQyhQRCwgREFUQTIxKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIyKSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMykpCiAKLSNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMTVCX0RBVEEJKAkJCQkJXAotCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMCkgIHwgQVRNRUxfTENEQyhQRSwgREFUQTEpICB8CVwKKyNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMThCX0RBVEEJKAkJCQkJXAogCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMikgIHwgQVRNRUxfTENEQyhQRSwgREFUQTMpICB8CVwKIAkJQVRNRUxfTENEQyhQRSwgREFUQTQpICB8IEFUTUVMX0xDREMoUEMsIERBVEE1KSAgfAlcCi0JCUFUTUVMX0xDREMoUEUsIERBVEE4KSAgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBOSkgIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBNikgIHwgQVRNRUxfTENEQyhQRCwgREFUQTcpICB8CVwKIAkJQVRNRUxfTENEQyhQRSwgREFUQTEwKSB8IEFUTUVMX0xDREMoUEUsIERBVEExMSkgfAlcCi0JCUFUTUVMX0xDREMoUEUsIERBVEExMikgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMTYpIHwJXAotCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMTcpIHwgQVRNRUxfTENEQyhQRSwgREFUQTE4KSB8CVwKLQkJQVRNRUxfTENEQyhQRSwgREFUQTE5KSB8IEFUTUVMX0xDREMoUEUsIERBVEEyMCkpCisJCUFUTUVMX0xDREMoUEUsIERBVEExMikgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTMpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTQpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE1KSB8CVwKKwkJQVRNRUxfTENEQyhQRSwgREFUQTE4KSB8IEFUTUVMX0xDREMoUEUsIERBVEExOSkgfAlcCisJCUFUTUVMX0xDREMoUEUsIERBVEEyMCkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMjEpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIzKSkKKworI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV8xNUJfREFUQSAoCQkJCQlcCisJCUFUTUVMX0xDREMoUEMsIERBVEEzKSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBNCkgIHwJXAorCQlBVE1FTF9MQ0RDKFBDLCBEQVRBNSkgIHwgQVRNRUxfTENEQyhQRCwgREFUQTYpICB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTcpICB8CQkJCVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTExKSB8IEFUTUVMX0xDREMoUEQsIERBVEExMikgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExMykgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTQpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTUpIHwJCQkJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTkpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIwKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIxKSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMikgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEEyMykpCisKKyNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMTVCX0RBVEEJKAkJCQkJXAorCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMykgIHwgQVRNRUxfTENEQyhQRSwgREFUQTQpICB8CVwKKwkJQVRNRUxfTENEQyhQQywgREFUQTUpICB8IEFUTUVMX0xDREMoUEQsIERBVEE2KSAgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEE3KSAgfAkJCQlcCisJCUFUTUVMX0xDREMoUEUsIERBVEExMSkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMTIpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTMpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE0KSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE1KSB8CQkJCVwKKwkJQVRNRUxfTENEQyhQRSwgREFUQTE5KSB8IEFUTUVMX0xDREMoUEUsIERBVEEyMCkgfAlcCisJCUFUTUVMX0xDREMoUEUsIERBVEEyMSkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjIpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjMpKQogCiAjZGVmaW5lIEFUTUVMX0xDRENfUFJJX0NPTlRST0wgKAkJCQkJXAogCQlBVE1FTF9MQ0RDKFBDLCBDQykgICB8IEFUTUVMX0xDREMoUEMsIERWQUwpIHwJCVwKQEAgLTIwNyw2ICsyMzEsMTAgQEAKIAogI2RlZmluZSBBVE1FTF9MQ0RDX0FMVF8yNEJJVAkoQVRNRUxfTENEQ19DT05UUk9MIHwgQVRNRUxfTENEQ19BTFRfMjRCX0RBVEEpCiAKKyNkZWZpbmUgQVRNRUxfTENEQ19QUklfMThCSVQJKEFUTUVMX0xDRENfQ09OVFJPTCB8IEFUTUVMX0xDRENfUFJJXzE4Ql9EQVRBKQorCisjZGVmaW5lIEFUTUVMX0xDRENfQUxUXzE4QklUCShBVE1FTF9MQ0RDX0NPTlRST0wgfCBBVE1FTF9MQ0RDX0FMVF8xOEJfREFUQSkKKwogI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV8xNUJJVAkoQVRNRUxfTENEQ19DT05UUk9MIHwgQVRNRUxfTENEQ19QUklfMTVCX0RBVEEpCiAKICNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMTVCSVQJKEFUTUVMX0xDRENfQ09OVFJPTCB8IEFUTUVMX0xDRENfQUxUXzE1Ql9EQVRBKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKaW5kZXggY2ZmOGU4NGYuLjBiODE2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaApAQCAtMTMsNyArMTMsNyBAQAogICogaW4gdGhpcyBhcnJheSBpcyBjaGlwLWRlcGVuZGVudC4KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXQzMl9ib2FyZF9vc2NfcmF0ZXNbXTsKLSAgCisKIC8qCiAgKiBUaGlzIHVzZWQgdG8gYWRkIGVzc2VudGlhbCBzeXN0ZW0gZGV2aWNlcywgYnV0IHRoaXMgaXMgbm93IGRvbmUKICAqIGF1dG9tYXRpY2FsbHkuIFBsZWFzZSBkb24ndCB1c2UgaXQgaW4gbmV3IGJvYXJkIGNvZGUuCkBAIC0yNiwxMiArMjYsMTcgQEAKICNkZWZpbmUgQVRNRUxfTUFYX1VBUlQJNAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2U7CiAKKy8qIEZsYWdzIGZvciBzZWxlY3RpbmcgVVNBUlQgZXh0cmEgcGlucyAqLworI2RlZmluZQlBVE1FTF9VU0FSVF9SVFMJCTB4MDEKKyNkZWZpbmUJQVRNRUxfVVNBUlRfQ1RTCQkweDAyCisjZGVmaW5lCUFUTUVMX1VTQVJUX0NMSwkJMHgwMworCiBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHsKIAlzaG9ydAkJdXNlX2RtYV90eDsJLyogdXNlIHRyYW5zbWl0IERNQT8gKi8KIAlzaG9ydAkJdXNlX2RtYV9yeDsJLyogdXNlIHJlY2VpdmUgRE1BPyAqLwogCXZvaWQgX19pb21lbQkqcmVnczsJCS8qIHZpcnR1YWwgYmFzZSBhZGRyZXNzLCBpZiBhbnkgKi8KIH07Ci12b2lkIGF0MzJfbWFwX3VzYXJ0KHVuc2lnbmVkIGludCBod19pZCwgdW5zaWduZWQgaW50IGxpbmUpOwordm9pZCBhdDMyX21hcF91c2FydCh1bnNpZ25lZCBpbnQgaHdfaWQsIHVuc2lnbmVkIGludCBsaW5lLCBpbnQgZmxhZ3MpOwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KHVuc2lnbmVkIGludCBpZCk7CiAKIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSB7CkBAIC04OCwxNiArOTMsMTUgQEAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgogYXQzMl9hZGRfZGV2aWNlX21jaSh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CiAKLXN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZCBzaG9ydCBkbWFfcnhfcGVyaXBoX2lkOwotCXVuc2lnbmVkIHNob3J0IGRtYV90eF9wZXJpcGhfaWQ7Ci0JdW5zaWduZWQgc2hvcnQgZG1hX2NvbnRyb2xsZXJfaWQ7Ci0JaW50IHJlc2V0X3BpbjsKLX07CitzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YTsKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgotYXQzMl9hZGRfZGV2aWNlX2FjOTdjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpOworYXQzMl9hZGRfZGV2aWNlX2FjOTdjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEsCisJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0MzJfYWRkX2RldmljZV9hYmRhYyh1bnNpZ25lZCBpbnQgaWQpOworc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhOworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqCithdDMyX2FkZF9kZXZpY2VfYWJkYWModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgKmRhdGEpOworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDMyX2FkZF9kZXZpY2VfcHNpZih1bnNpZ25lZCBpbnQgaWQpOwogCiBzdHJ1Y3QgY2ZfcGxhdGZvcm1fZGF0YSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKaW5kZXggNjVlZDgwMy4uNWQ3NWY3NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBjcmlzdjEwX2lycV90eXBlID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcmlzdjEwX2lycV90eXBlID0gewogCS50eXBlbmFtZSA9ICAgICJDUklTdjEwIiwKIAkuc3RhcnR1cCA9ICAgICBzdGFydHVwX2NyaXN2MTBfaXJxLAogCS5zaHV0ZG93biA9ICAgIHNodXRkb3duX2NyaXN2MTBfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggNWExYjMxYy4uZTE3NmI4YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0yLDkgKzIsOSBAQAogIyBhcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCiAjCiAKLWFzZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL21hY2gvIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAotY2NmbGFncy15ICs9IC1PMiAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL21hY2gvIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAotbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCithc2ZsYWdzLXkgKz0gLUkkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL21hY2gvIC1JJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCitjY2ZsYWdzLXkgKz0gLU8yIC1JJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9tYWNoLyAtSSQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAorbGRmbGFncy15ICs9IC1UJChzcmN0cmVlKS8kKHNyYykvZGVjb21wcmVzcy5sZHMKIE9CSkVDVFMgPSAkKG9iaikvaGVhZC5vICQob2JqKS9taXNjLm8KIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKaW5kZXggMjk1MTMxZi4uZGYzOTI1YyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGNyaXN2MzJfaXJxX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNyaXN2MzJfaXJxX3R5cGUgPSB7CiAJLnR5cGVuYW1lID0gICAgIkNSSVN2MzIiLAogCS5zdGFydHVwID0gICAgIHN0YXJ0dXBfY3Jpc3YzMl9pcnEsCiAJLnNodXRkb3duID0gICAgc2h1dGRvd25fY3Jpc3YzMl9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwppbmRleCBmNTlhOTczLi5kMmEzZmY4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKQEAgLTk3LDkgKzk3LDkgQEAKIAlTVVBQX0JBTktfU0VMKDIpOwogCVNVUFBfUkVHX1dSKFJXX01NX1RMQl9QR0QsIHBnZCk7CiAKLQljcHVfc2V0KDAsIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZSgwLCB0cnVlKTsKIAljcHVfc2V0KDAsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQljcHVfc2V0KDAsIGNwdV9wb3NzaWJsZV9tYXApOworCXNldF9jcHVfcG9zc2libGUoMCwgdHJ1ZSk7CiB9CiAKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQpAQCAtMjMxLDcgKzIzMSw3IEBACiAJY3B1bWFza190IGNwdV9tYXNrOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRsYnN0YXRlX2xvY2ssIGZsYWdzKTsKLQljcHVfbWFzayA9IChtbSA9PSBGTFVTSF9BTEwgPyBDUFVfTUFTS19BTEwgOiBtbS0+Y3B1X3ZtX21hc2spOworCWNwdV9tYXNrID0gKG1tID09IEZMVVNIX0FMTCA/IGNwdV9hbGxfbWFzayA6ICptbV9jcHVtYXNrKG1tKSk7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwogCWZsdXNoX21tID0gbW07CiAJZmx1c2hfdm1hID0gdm1hOwpAQCAtMjUxLDggKzI1MSw4IEBACiAJX19mbHVzaF90bGJfbW0obW0pOwogCWZsdXNoX3RsYl9jb21tb24obW0sIEZMVVNIX0FMTCwgMCk7CiAJLyogTm8gbW9yZSBtYXBwaW5ncyBpbiBvdGhlciBDUFVzICovCi0JY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKIH0KIAogdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS90bGIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS90bGIuYwppbmRleCA1NWFkZTM2Li42Nzc5YmNiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbW0vdGxiLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL3RsYi5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIGEgTU1VIGNvbnRleHQuICovCiAJCXNwaW5fbG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAJCWdldF9tbXVfY29udGV4dChuZXh0KTsKLQkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgbW1fY3B1bWFzayhuZXh0KSk7CiAJCXNwaW5fdW5sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvc2V0dXAuYwppbmRleCAwNGQ0OGRkLi5iNzEyZjQ5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9zZXR1cC5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IE5SX0NQVVMgPyAodm9pZCAqKShpbnQpKCpwb3MgKyAxKTogTlVMTDsKKwlyZXR1cm4gKnBvcyA8IG5yX2NwdV9pZHMgPyAodm9pZCAqKShpbnQpKCpwb3MgKyAxKSA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9tbS9pbml0LmMgYi9hcmNoL2NyaXMvbW0vaW5pdC5jCmluZGV4IDJmZGQyMTIuLjUxNGY0NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9tbS9pbml0LmMKKysrIGIvYXJjaC9jcmlzL21tL2luaXQuYwpAQCAtMjUsOCArMjUsNyBAQAogCWludCBjb2Rlc2l6ZSwgcmVzZXJ2ZWRwYWdlcywgZGF0YXNpemUsIGluaXRzaXplOwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCi0JaWYoIW1lbV9tYXApCi0JCUJVRygpOworCUJVR19PTighbWVtX21hcCk7CiAKIAkvKiBtYXgvbWluX2xvd19wZm4gd2FzIHNldCBieSBzZXR1cC5jCiAJICogbm93IHdlIGp1c3QgY29weSBpdCB0byBzb21lIG90aGVyIG5lY2Vzc2FyeSBwbGFjZXMuLi4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDE1M2U3MjcuLjI5NGEzYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC0yMiw2ICsyMiw5IEBACiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUworCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECisJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UgaWYgKCFJVEFOSVVNKQorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwogCXNlbGVjdCBIQVZFX0tWTQogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwZGIzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9BU01fSUE2NF9GVFJBQ0VfSAorI2RlZmluZSBfQVNNX0lBNjRfRlRSQUNFX0gKKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyNkZWZpbmUgTUNPVU5UX0lOU05fU0laRSAgICAgICAgMzIgLyogc2l6ZW9mIG1jb3VudCBjYWxsICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBfbWNvdW50KHVuc2lnbmVkIGxvbmcgcGZzLCB1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIGIwLCB1bnNpZ25lZCBsb25nIHIwKTsKKyNkZWZpbmUgbWNvdW50IF9tY291bnQKKworI2luY2x1ZGUgPGFzbS9rcHJvYmVzLmg+CisvKiBJbiBJQTY0LCBNQ09VTlRfQUREUiBpcyBzZXQgaW4gbGluayB0aW1lLCBzbyBpdCdzIG5vdCBhIGNvbnN0YW50IGF0IGNvbXBpbGUgdGltZSAqLworI2RlZmluZSBNQ09VTlRfQUREUiAoKChzdHJ1Y3QgZm5wdHIgKiltY291bnQpLT5pcCkKKyNkZWZpbmUgRlRSQUNFX0FERFIgKCgoc3RydWN0IGZucHRyICopZnRyYWNlX2NhbGxlciktPmlwKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkvKiBzZWNvbmQgYnVuZGxlLCBpbnNuIDIgKi8KKwlyZXR1cm4gYWRkciAtIDB4MTI7Cit9CisKK3N0cnVjdCBkeW5fYXJjaF9mdHJhY2UgeworfTsKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLworCisjZW5kaWYgLyogX0FTTV9JQTY0X0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAxNDBlNDk1Li5kNTE0Y2Q5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTIwLDE2ICsyMCw2IEBACiAKICNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkJCShsb2NhbF9jcHVfZGF0YS0+c29mdGlycV9wZW5kaW5nKQogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxNAotCi0vKgotICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUgc3BhY2UgZm9yIHBvdGVudGlhbGx5IGFsbCBJUlEgc291cmNlcwotICogaW4gdGhlIHN5c3RlbSBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVToKLSAqLwotI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCBOUl9JUlFTCi0jIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQotI2VuZGlmCi0KIGV4dGVybiB2b2lkIF9faW9tZW0gKmlwaV9iYXNlX2FkZHI7CiAKIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCA1NjI4ZTlhLi42YjdlZGNhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTIsNiArMiwxMCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKIAoraWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCitlbmRpZgorCiBleHRyYS15CTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteSA6PSBhY3BpLm8gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCkBAIC0yOCw2ICszMiw3IEBACiBvYmotJChDT05GSUdfQ1BVX0ZSRVEpCQkrPSBjcHVmcmVxLwogb2JqLSQoQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZKQkrPSBtY2FfcmVjb3Zlcnkubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8ganByb2Jlcy5vCitvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8gY3Jhc2gubwogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SKQkrPSB1bmNhY2hlZC5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggY2NmZGVlZS4uOGRjNjk2NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCiAjaW5jbHVkZSAibWluc3RhdGUuaCIKIApAQCAtMTQwNCw2ICsxNDA1LDEwNSBAQAogCWJyLnJldC5zcHRrLm1hbnkgcnAKIEVORCh1bndfaW5pdF9ydW5uaW5nKQogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorR0xPQkFMX0VOVFJZKF9tY291bnQpCisJYnIgZnRyYWNlX3N0dWIKK0VORChfbWNvdW50KQorCisuaGVyZToKKwlici5yZXQuc3B0ay5tYW55IGIwCisKK0dMT0JBTF9FTlRSWShmdHJhY2VfY2FsbGVyKQorCWFsbG9jIG91dDAgPSBhci5wZnMsIDgsIDAsIDQsIDAKKwltb3Ygb3V0MyA9IHIwCisJOzsKKwltb3Ygb3V0MiA9IGIwCisJYWRkIHIzID0gMHgyMCwgcjMKKwltb3Ygb3V0MSA9IHIxOworCWJyLmNhbGwuc3B0ay5tYW55IGIwID0gZnRyYWNlX3BhdGNoX2dwCisJLy90aGlzIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIG1vZHVsZSwgc28gd2UgbXVzdCBwYXRjaCBncAorZnRyYWNlX3BhdGNoX2dwOgorCW1vdmwgZ3A9X19ncAorCW1vdiBiMCA9IHIzCisJOzsKKy5nbG9iYWwgZnRyYWNlX2NhbGw7CitmdHJhY2VfY2FsbDoKK3sKKwkubWx4CisJbm9wLm0gMHgwCisJbW92bCByMyA9IC5oZXJlOzsKK30KKwlhbGxvYyBsb2MwID0gYXIucGZzLCA0LCA0LCAyLCAwCisJOzsKKwltb3YgbG9jMSA9IGIwCisJbW92IG91dDAgPSBiMAorCW1vdiBsb2MyID0gcjgKKwltb3YgbG9jMyA9IHIxNQorCTs7CisJYWRkcyBvdXQwID0gLU1DT1VOVF9JTlNOX1NJWkUsIG91dDAKKwltb3Ygb3V0MSA9IGluMgorCW1vdiBiNiA9IHIzCisKKwlici5jYWxsLnNwdGsubWFueSBiMCA9IGI2CisJOzsKKwltb3YgYXIucGZzID0gbG9jMAorCW1vdiBiMCA9IGxvYzEKKwltb3YgcjggPSBsb2MyCisJbW92IHIxNSA9IGxvYzMKKwliciBmdHJhY2Vfc3R1YgorCTs7CitFTkQoZnRyYWNlX2NhbGxlcikKKworI2Vsc2UKK0dMT0JBTF9FTlRSWShfbWNvdW50KQorCW1vdmwgcjIgPSBmdHJhY2Vfc3R1YgorCW1vdmwgcjMgPSBmdHJhY2VfdHJhY2VfZnVuY3Rpb247OworCWxkOCByMyA9IFtyM107OworCWxkOCByMyA9IFtyM107OworCWNtcC5lcSBwNyxwMCA9IHIyLCByMworKHA3KQlici5zcHRrLm1hbnkgZnRyYWNlX3N0dWIKKwk7OworCisJYWxsb2MgbG9jMCA9IGFyLnBmcywgNCwgNCwgMiwgMAorCTs7CisJbW92IGxvYzEgPSBiMAorCW1vdiBvdXQwID0gYjAKKwltb3YgbG9jMiA9IHI4CisJbW92IGxvYzMgPSByMTUKKwk7OworCWFkZHMgb3V0MCA9IC1NQ09VTlRfSU5TTl9TSVpFLCBvdXQwCisJbW92IG91dDEgPSBpbjIKKwltb3YgYjYgPSByMworCisJYnIuY2FsbC5zcHRrLm1hbnkgYjAgPSBiNgorCTs7CisJbW92IGFyLnBmcyA9IGxvYzAKKwltb3YgYjAgPSBsb2MxCisJbW92IHI4ID0gbG9jMgorCW1vdiByMTUgPSBsb2MzCisJYnIgZnRyYWNlX3N0dWIKKwk7OworRU5EKF9tY291bnQpCisjZW5kaWYKKworR0xPQkFMX0VOVFJZKGZ0cmFjZV9zdHViKQorCW1vdiByMyA9IGIwCisJbW92bCByMiA9IF9tY291bnRfcmV0X2hlbHBlcgorCTs7CisJbW92IGI2ID0gcjIKKwltb3YgYjcgPSByMworCWJyLnJldC5zcHRrLm1hbnkgYjYKKworX21jb3VudF9yZXRfaGVscGVyOgorCW1vdiBiMCA9IHI0MgorCW1vdiByMSA9IHI0MQorCW1vdiBhci5wZnMgPSByNDAKKwliciBiNworRU5EKGZ0cmFjZV9zdHViKQorCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLworCiAJLnJvZGF0YQogCS5hbGlnbiA4CiAJLmdsb2JsIHN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9mdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmM4Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9mdHJhY2UuYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIER5bmFtaWMgZnVuY3Rpb24gdHJhY2luZyBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqCisgKiBGb3IgbGljZW5jaW5nIGRldGFpbHMsIHNlZSBDT1BZSU5HLgorICoKKyAqIERlZmluZXMgbG93LWxldmVsIGhhbmRsaW5nIG9mIG1jb3VudCBjYWxscyB3aGVuIHRoZSBrZXJuZWwKKyAqIGlzIGNvbXBpbGVkIHdpdGggdGhlIC1wZyBmbGFnLiBXaGVuIHVzaW5nIGR5bmFtaWMgZnRyYWNlLCB0aGUKKyAqIG1jb3VudCBjYWxsLXNpdGVzIGdldCBwYXRjaGVkIGxhemlseSB3aXRoIE5PUCB0aWxsIHRoZXkgYXJlCisgKiBlbmFibGVkLiBBbGwgY29kZSBtdXRhdGlvbiByb3V0aW5lcyBoZXJlIHRha2UgZWZmZWN0IGF0b21pY2FsbHkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhdGNoLmg+CisKKy8qIEluIElBNjQsIGVhY2ggZnVuY3Rpb24gd2lsbCBiZSBhZGRlZCBiZWxvdyB0d28gYnVuZGxlcyB3aXRoIC1wZyBvcHRpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorZnRyYWNlX29yaWdfY29kZVtNQ09VTlRfSU5TTl9TSVpFXSA9IHsKKwkweDAyLCAweDQwLCAweDMxLCAweDEwLCAweDgwLCAweDA1LCAvKiBhbGxvYyByNDA9YXIucGZzLDEyLDgsMCAqLworCTB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIC8qIG1vdiByNDM9cjA7OyAqLworCTB4MDUsIDB4MDAsIDB4YzQsIDB4MDAsICAgICAgICAgICAgIC8qIG1vdiByNDI9YjAgKi8KKwkweDExLCAweDQ4LCAweDAxLCAweDAyLCAweDAwLCAweDIxLCAvKiBtb3YgcjQxPXIxICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgLyogbm9wLmkgMHgwICovCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg1MCAgICAgICAgICAgICAgLyogYnIuY2FsbC5zcHRrLm1hbnkgYjAgPSBfbWNvdW50OzsgKi8KK307CisKK3N0cnVjdCBmdHJhY2Vfb3JpZ19pbnNuIHsKKwl1NjQgZHVtbXkxLCBkdW1teTIsIGR1bW15MzsKKwl1NjQgZHVtbXk0OjY0LTQxKzEzOworCXU2NCBpbW0yMDoyMDsKKwl1NjQgZHVtbXk1OjM7CisJdTY0IHNpZ246MTsKKwl1NjQgZHVtbXk2OjQ7Cit9OworCisvKiBtY291bnQgc3R1YiB3aWxsIGJlIGNvbnZlcnRlZCBiZWxvdyBmb3Igbm9wICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBmdHJhY2Vfbm9wX2NvZGVbTUNPVU5UX0lOU05fU0laRV0gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgLyogW01JSV0gbm9wLm0gMHgwICovCisJMHgzMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgLyogbW92IHIzPWlwICovCisJMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgICAgICAgICAgICAgLyogbm9wLmkgMHgwICovCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgLyogW01MWF0gbm9wLm0gMHgwICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLyogbm9wLnggMHgwOzsgKi8KKwkweDAwLCAweDAwLCAweDA0LCAweDAwCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZnRyYWNlX25vcF9yZXBsYWNlKHZvaWQpCit7CisJcmV0dXJuIGZ0cmFjZV9ub3BfY29kZTsKK30KKworLyoKKyAqIG1jb3VudCBzdHViIHdpbGwgYmUgY29udmVydGVkIGJlbG93IGZvciBjYWxsCisgKiBOb3RlOiBKdXN0IHRoZSBsYXN0IGluc3RydWN0aW9uIGlzIGNoYW5nZWQgYWdhaW5zdCBub3AKKyAqICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKK2Z0cmFjZV9jYWxsX2NvZGVbTUNPVU5UX0lOU05fU0laRV0gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgLyogW01JSV0gbm9wLm0gMHgwICovCisJMHgzMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgLyogbW92IHIzPWlwICovCisJMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgICAgICAgICAgICAgLyogbm9wLmkgMHgwICovCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgLyogW01MWF0gbm9wLm0gMHgwICovCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHgwMCwgLyogYnJsLm1hbnkgLjs7Ki8KKwkweGY4LCAweGZmLCAweGZmLCAweGM4Cit9OworCitzdHJ1Y3QgZnRyYWNlX2NhbGxfaW5zbiB7CisJdTY0IGR1bW15MSwgZHVtbXkyOworCXU2NCBkdW1teTM6NDg7CisJdTY0IGltbTM5X2w6MTY7CisJdTY0IGltbTM5X2g6MjM7CisJdTY0IGR1bW15NDoxMzsKKwl1NjQgaW1tMjA6MjA7CisJdTY0IGR1bW15NTozOworCXU2NCBpOjE7CisJdTY0IGR1bW15Njo0OworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZ0cmFjZV9jYWxsX3JlcGxhY2UodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBmdHJhY2VfY2FsbF9pbnNuICpjb2RlID0gKHZvaWQgKilmdHJhY2VfY2FsbF9jb2RlOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYWRkciAtIChpcCArIDB4MTApOworCisJY29kZS0+aW1tMzlfbCA9IG9mZnNldCA+PiAyNDsKKwljb2RlLT5pbW0zOV9oID0gb2Zmc2V0ID4+IDQwOworCWNvZGUtPmltbTIwID0gb2Zmc2V0ID4+IDQ7CisJY29kZS0+aSA9IG9mZnNldCA+PiA2MzsKKwlyZXR1cm4gZnRyYWNlX2NhbGxfY29kZTsKK30KKworc3RhdGljIGludAorZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLAorCQkgICB1bnNpZ25lZCBjaGFyICpuZXdfY29kZSwgaW50IGRvX2NoZWNrKQoreworCXVuc2lnbmVkIGNoYXIgcmVwbGFjZWRbTUNPVU5UX0lOU05fU0laRV07CisKKwkvKgorCSAqIE5vdGU6IER1ZSB0byBtb2R1bGVzIGFuZCBfX2luaXQsIGNvZGUgY2FuCisJICogIGRpc2FwcGVhciBhbmQgY2hhbmdlLCB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBmYXVsdGluZworCSAqICBhcyB3ZWxsIGFzIGNvZGUgY2hhbmdpbmcuIFdlIGRvIHRoaXMgYnkgdXNpbmcgdGhlCisJICogIHByb2JlX2tlcm5lbF8qIGZ1bmN0aW9ucy4KKwkgKgorCSAqIE5vIHJlYWwgbG9ja2luZyBuZWVkZWQsIHRoaXMgY29kZSBpcyBydW4gdGhyb3VnaAorCSAqIGtzdG9wX21hY2hpbmUsIG9yIGJlZm9yZSBTTVAgc3RhcnRzLgorCSAqLworCisJaWYgKCFkb19jaGVjaykKKwkJZ290byBza2lwX2NoZWNrOworCisJLyogcmVhZCB0aGUgdGV4dCB3ZSB3YW50IHRvIG1vZGlmeSAqLworCWlmIChwcm9iZV9rZXJuZWxfcmVhZChyZXBsYWNlZCwgKHZvaWQgKilpcCwgTUNPVU5UX0lOU05fU0laRSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogTWFrZSBzdXJlIGl0IGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCisJaWYgKG1lbWNtcChyZXBsYWNlZCwgb2xkX2NvZGUsIE1DT1VOVF9JTlNOX1NJWkUpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCitza2lwX2NoZWNrOgorCS8qIHJlcGxhY2UgdGhlIHRleHQgd2l0aCB0aGUgbmV3IHRleHQgKi8KKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCgodm9pZCAqKWlwKSwgbmV3X2NvZGUsIE1DT1VOVF9JTlNOX1NJWkUpKQorCQlyZXR1cm4gLUVQRVJNOworCWZsdXNoX2ljYWNoZV9yYW5nZShpcCwgaXAgKyBNQ09VTlRfSU5TTl9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZ0cmFjZV9tYWtlX25vcF9jaGVjayhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgcmVwbGFjZWRbTUNPVU5UX0lOU05fU0laRV07CisJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisKKwlpZiAocHJvYmVfa2VybmVsX3JlYWQocmVwbGFjZWQsICh2b2lkICopaXAsIE1DT1VOVF9JTlNOX1NJWkUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9DT05WRVJURUQpIHsKKwkJc3RydWN0IGZ0cmFjZV9jYWxsX2luc24gKmNhbGxfaW5zbiwgKnRtcF9jYWxsOworCisJCWNhbGxfaW5zbiA9ICh2b2lkICopZnRyYWNlX2NhbGxfY29kZTsKKwkJdG1wX2NhbGwgPSAodm9pZCAqKXJlcGxhY2VkOworCQljYWxsX2luc24tPmltbTM5X2wgPSB0bXBfY2FsbC0+aW1tMzlfbDsKKwkJY2FsbF9pbnNuLT5pbW0zOV9oID0gdG1wX2NhbGwtPmltbTM5X2g7CisJCWNhbGxfaW5zbi0+aW1tMjAgPSB0bXBfY2FsbC0+aW1tMjA7CisJCWNhbGxfaW5zbi0+aSA9IHRtcF9jYWxsLT5pOworCQlpZiAobWVtY21wKHJlcGxhY2VkLCBmdHJhY2VfY2FsbF9jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXN0cnVjdCBmdHJhY2Vfb3JpZ19pbnNuICpjYWxsX2luc24sICp0bXBfY2FsbDsKKworCQljYWxsX2luc24gPSAodm9pZCAqKWZ0cmFjZV9vcmlnX2NvZGU7CisJCXRtcF9jYWxsID0gKHZvaWQgKilyZXBsYWNlZDsKKwkJY2FsbF9pbnNuLT5zaWduID0gdG1wX2NhbGwtPnNpZ247CisJCWNhbGxfaW5zbi0+aW1tMjAgPSB0bXBfY2FsbC0+aW1tMjA7CisJCWlmIChtZW1jbXAocmVwbGFjZWQsIGZ0cmFjZV9vcmlnX2NvZGUsIE1DT1VOVF9JTlNOX1NJWkUpICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorfQorCitpbnQgZnRyYWNlX21ha2Vfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJICAgIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpbnQgcmV0OworCWNoYXIgKm5ldzsKKworCXJldCA9IGZ0cmFjZV9tYWtlX25vcF9jaGVjayhyZWMsIGFkZHIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbmV3ID0gZnRyYWNlX25vcF9yZXBsYWNlKCk7CisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShyZWMtPmlwLCBOVUxMLCBuZXcsIDApOworfQorCitpbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgY2hhciAqb2xkLCAqbmV3OworCisJb2xkPSAgZnRyYWNlX25vcF9yZXBsYWNlKCk7CisJbmV3ID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkcik7CisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgb2xkLCBuZXcsIDEpOworfQorCisvKiBpbiBJQTY0LCBfbWNvdW50IGNhbid0IGRpcmVjdGx5IGNhbGwgZnRyYWNlX3N0dWIuIE9ubHkganVtcCBpcyBvayAqLworaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKQoreworCXVuc2lnbmVkIGxvbmcgaXA7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKChzdHJ1Y3QgZm5wdHIgKilmdHJhY2VfY2FsbCktPmlwOworCisJaWYgKGZ1bmMgPT0gZnRyYWNlX3N0dWIpCisJCXJldHVybiAwOworCWlwID0gKChzdHJ1Y3QgZm5wdHIgKilmdW5jKS0+aXA7CisKKwlpYTY0X3BhdGNoX2ltbTY0KGFkZHIgKyAyLCBpcCk7CisKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArIDE2KTsKKwlyZXR1cm4gMDsKK30KKworLyogcnVuIGZyb20ga3N0b3BfbWFjaGluZSAqLworaW50IF9faW5pdCBmdHJhY2VfZHluX2FyY2hfaW5pdCh2b2lkICpkYXRhKQoreworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCmluZGV4IDZkYTFmMjAuLjJkMzExODYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCkBAIC0xMTIsMyArMTEyLDkgQEAKICNlbmRpZgogZXh0ZXJuIGNoYXIgaWE2NF9pdnRbXTsKIEVYUE9SVF9TWU1CT0woaWE2NF9pdnQpOworCisjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgorI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKy8qIG1jb3VudCBpcyBkZWZpbmVkIGluIGFzc2VtYmx5ICovCitFWFBPUlRfU1lNQk9MKF9tY291bnQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXpvbmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCAxOWYyOTliLi4zNWFjYWM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW16b25lLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tem9uZS5oCkBAIC04LDYgKzgsNyBAQAogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAogLyoKICAqIGdlbmVyaWMgbm9uLWxpbmVhciBtZW1vcnkgc3VwcG9ydDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDViNWQxNmIuLjU0NTU5NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYwpAQCAtNTU3LDcgKzU1Nyw2IEBACiB2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgb2xkOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKIAlpbnQgZmF1bHRlZDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKIAl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXI7CkBAIC02MDYsMTAgKzYwNSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQljYWxsdGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKLQkJCQlzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CisJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShvbGQsIHNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKIAkJKnBhcmVudCA9IG9sZDsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCAyZDUyYjUxLi41ZTRiYWJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0yOCw2ICsyOCw3IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgorCXNlbGVjdCBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlmIE1NVQogCiBjb25maWcgU1VQRVJINjQKIAlkZWZfYm9vbCB5IGlmIENQVV9TSDUKQEAgLTEyOSw2ICsxMzAsOSBAQAogY29uZmlnIEFSQ0hfTk9fVklSVF9UT19CVVMKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBBUkNIX0hBU19ERUZBVUxUX0lETEUKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBJT19UUkFQUEVECiAJYm9vbAogCkBAIC01MzAsNyArNTM0LDcgQEAKIAogY29uZmlnIEtFWEVDCiAJYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTVVBFUkgzMiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFNVUEVSSDMyICYmIEVYUEVSSU1FTlRBTCAmJiBNTVUKIAloZWxwCiAJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCiAJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKaW5kZXggZTI3NjU1Yi4uOTEyNDU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2dwaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS9vdjc3MnguaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KQEAgLTIzNSw2ICsyMzYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0kyQworLyogc3VwcG9ydCBmb3IgdGhlIG9sZCBuY20wM2ogY2FtZXJhICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjYW1lcmFfbmNtMDNqX21hZ2ljW10gPQogewogCTB4ODcsIDB4MDAsIDB4ODgsIDB4MDgsIDB4ODksIDB4MDEsIDB4OEEsIDB4RTgsCkBAIC0yNTUsNiArMjU3LDIzIEBACiAJMHg2MywgMHhENCwgMHg2NCwgMHhFQSwgMHhENiwgMHgwRiwKIH07CiAKK3N0YXRpYyBpbnQgY2FtZXJhX3Byb2JlKHZvaWQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphID0gaTJjX2dldF9hZGFwdGVyKDApOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwlpbnQgcmV0OworCisJY2FtZXJhX3Bvd2VyKDEpOworCW1zZy5hZGRyID0gMHg2ZTsKKwltc2cuYnVmID0gY2FtZXJhX25jbTAzal9tYWdpYzsKKwltc2cubGVuID0gMjsKKwltc2cuZmxhZ3MgPSAwOworCXJldCA9IGkyY190cmFuc2ZlcihhLCAmbXNnLCAxKTsKKwljYW1lcmFfcG93ZXIoMCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGNhbWVyYV9zZXRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvLAogCQkJICAgICAgaW50IGVuYWJsZSkKIHsKQEAgLTMwNiwxMiArMzI1LDM3IEBACiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNhbWVyYV9pbmZvLAogCX0sCiB9OworCitzdGF0aWMgaW50IF9faW5pdCBjYW1lcmFfc2V0dXAodm9pZCkKK3sKKwlpZiAoY2FtZXJhX3Byb2JlKCkgPiAwKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNhbWVyYV9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKGNhbWVyYV9zZXR1cCk7CisKICNlbmRpZiAvKiBDT05GSUdfSTJDICovCiAKK3N0YXRpYyBpbnQgb3Y3NzI1X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJY2FtZXJhX3Bvd2VyKDApOworCWlmIChtb2RlKQorCQljYW1lcmFfcG93ZXIoMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gb3Y3NzI1X2luZm8gPSB7CisJLmJ1c3dpZHRoICA9IFNPQ0FNX0RBVEFXSURUSF84LAorCS5mbGFncyA9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAsCisJLmxpbmsgPSB7CisJCS5wb3dlciAgPSBvdjc3MjVfcG93ZXIsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvIHNoX21vYmlsZV9jZXVfaW5mbyA9IHsKLQkuZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8Ci0JU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwKLQlTT0NBTV9EQVRBV0lEVEhfOCwKKwkuZmxhZ3MgPSBTSF9DRVVfRkxBR19VU0VfOEJJVF9CVVMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNldV9yZXNvdXJjZXNbXSA9IHsKQEAgLTM1OSw5ICs0MDMsNiBAQAogCSZhcDMyNXJ4YV9ub3JfZmxhc2hfZGV2aWNlLAogCSZsY2RjX2RldmljZSwKIAkmY2V1X2RldmljZSwKLSNpZmRlZiBDT05GSUdfSTJDCi0JJmNhbWVyYV9kZXZpY2UsCi0jZW5kaWYKIAkmbmFuZF9mbGFzaF9kZXZpY2UsCiAJJnNkY2FyZF9jbjNfZGV2aWNlLAogfTsKQEAgLTM3MCw2ICs0MTEsMTAgQEAKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCiAJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJvdjc3MngiLCAweDIxKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb3Y3NzI1X2luZm8sCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gYXAzMjVyeGFfc3BpX2RldmljZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwppbmRleCAxNzAzNmNlLi44MzY3ZDFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCkBAIC0xMjksNiArMTI5LDEwIEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVVNCX09WQzAsICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9VU0JfUEVOQzAsIE5VTEwpOwogCisJLyogZW5hYmxlIExBTiAqLworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhVQk9BUkRSRUcoSVJMMk1TS1IpKSAmIH4weDAwMDAwMDAxLAorCQkgIFVCT0FSRFJFRyhJUkwyTVNLUikpOworCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHVycXVlbGxfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRSh1cnF1ZWxsX2RldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCA0ZmQ2YTcyLi4xZWUxZGUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC0zNTIsOSArMzUyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gc2hfbW9iaWxlX2NldV9pbmZvID0gewotCS5mbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX0RBVEFXSURUSF84IHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HCi0JfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdICi0JfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdILAorCS5mbGFncyA9IFNIX0NFVV9GTEFHX1VTRV84QklUX0JVUywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlnb3JfY2V1X3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKaW5kZXggMzUyZjg3ZC4uYzhkOTgyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDI3IDExOjQ1OjA4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE3OjQ2OjUzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE2LDE0ICsxNiwxNiBAQAogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLSMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDMsNiArNDUsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC01OCw2ICs2OSw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjYsMTAgKzc4LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzcsNiArODcsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTUsMTEgKzEyNiw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI4LDYgKzEzNCw3IEBACiBDT05GSUdfQ1BVX1NIND15CiBDT05GSUdfQ1BVX1NINEE9eQogQ09ORklHX0NQVV9TSFgyPXkKK0NPTkZJR19BUkNIX1NITU9CSUxFPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKQEAgLTE1Niw2ICsxNjMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTgsMTEgKzIwNiwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjI4LDYgKzIzNyw3IEBACiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVE1VPXkKKyMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTMwNCw3ICszMTQsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNTksNiArMzY4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzEsNyArMzgxLDYgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CkBAIC00ODMsNyArNDkyLDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNTEwLDEwICs1MTgsMTggQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NTksOSArNTc1LDExIEBACiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01OTQsOCArNjEyLDEwIEBACiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiBDT05GSUdfU01TQzkxMVg9eQorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC02MTIsNyArNjMyLDYgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY4Nyw2ICs3MDYsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNzIzLDEyICs3NDMsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC03NDgsNyArNzY1LDYgQEAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKQEAgLTgyMiw3ICs4MzgsNyBAQAogIwogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUj15Ci0jIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQogQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQogQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQpAQCAtODMxLDYgKzg0Nyw3IEBACiBDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPXkKIENPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9eQogQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD15CitDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9eQogQ09ORklHX1ZJREVPX1Y0TDI9eQogQ09ORklHX1ZJREVPQlVGX0dFTj15CiBDT05GSUdfVklERU9CVUZfRE1BX0NPTlRJRz15CkBAIC04ODYsNiArOTAzLDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05OTUsNiArMTAxMyw3IEBACiAjCiAjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiBDT05GSUdfVUlPPXkKICMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKIENPTkZJR19VSU9fUERSVl9HRU5JUlE9eQpAQCAtMTA5Niw3ICsxMTE1LDYgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE3Nyw3ICsxMTk1LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMjA0LDEwICsxMjIxLDEyIEBACiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMjc2LDYgKzEyOTUsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyOTYsNyArMTMxNiw3IEBACiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0NSQzc9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2NheW1hbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZwppbmRleCA5Mjg5NTAxLi5mYTVmYzFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNwotIyBXZWQgT2N0IDIyIDE4OjA0OjUyIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE3OjQ5OjE0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogIyBDT05GSUdfU1VQRVJIMzIgaXMgbm90IHNldApAQCAtMTYsNiArMTYsOCBAQAogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yMyw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDAsMTAgKzQzLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTEsNiArNjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjEsMTAgKzc0LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzMsMTggKzg0LDE4IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTAzLDkgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMTIsNyArMTIxLDYgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMjAsNiArMTI4LDcgQEAKICMKIENPTkZJR19DUFVfU0g1PXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldApAQCAtMTQ2LDYgKzE1NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE4OCwxNiArMTk4LDE2IEBACiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfT0ZGPXkKQEAgLTI1Niw3ICsyNjYsNiBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTI3Miw5ICsyODEsMTIgQEAKIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX1BDSV9BVVRPPXkKIENPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTI4NSw2ICsyOTcsMTIgQEAKICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzQ0LDcgKzM2Miw5IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTM1NSwxMyArMzc1LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDAwLDExICs0MjAsMjAgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00NDcsNiArNDc2LDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQ1OSw3ICs0ODksMTAgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKQEAgLTQ3OCw2ICs1MTEsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKQEAgLTQ5Myw2ICs1MjcsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUxMCw3ICs1NDUsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTU0Myw5ICs1ODEsMTEgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKQEAgLTU1NCwxMSArNTk0LDEzIEBACiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNTY2LDcgKzYwOCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNjM2LDEwICs2ODEsMTIgQEAKICMgQ09ORklHX1NFUklBTF9TSF9TQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTcwMCwxMiArNzQ3LDkgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtNzI1LDggKzc2OSwxMCBAQAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKQEAgLTc0NywxMCArNzkzLDE0IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CkBAIC03ODYsMTEgKzgzNiwxMSBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTgwMiw2ICs4NTIsOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTgyMiw3ICs4NzQsNyBAQAogIwogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUj1tCi0jIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQogQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQogQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQpAQCAtODMxLDYgKzg4Myw3IEBACiBDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KIENPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQogQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9bQogQ09ORklHX1ZJREVPX1Y0TDI9bQogQ09ORklHX1ZJREVPX1Y0TDE9bQogQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CkBAIC04NTMsNiArOTA2LDcgQEAKICMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CiAKICMKQEAgLTg4NCw4OSArOTM4LDcgQEAKICMKICMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKICMKLQotIwotIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcwotIwogIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTVQzMTIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NUVjAyODggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NUQjYwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NUVjAyOTkgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgwODMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9WRVMxWDkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MjZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDI0MTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TSTIxWFggaXMgbm90IHNldAotCi0jCi0jIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfU1A4ODcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TUDg4N1ggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjI3MDAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjI3MDIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RSWDM5N1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MNjQ3ODEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9OWFQ2MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9NVDM1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCMzAwME1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUIzMDAwTUMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUI3MDAwUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwNDggaXMgbm90IHNldAotCi0jCi0jIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfVkVTMTgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwMjEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVFYwMjk3IGlzIG5vdCBzZXQKLQotIwotIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9OWFQyMDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9PUjUxMTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9CQ00zNTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MR0RUMzMwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfUzVIMTQwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQVU4NTIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDExIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAotIwotIyBDT05GSUdfRFZCX1BMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfRElCMDA3MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKLSMKLSMgQ09ORklHX0RWQl9MTkJQMjEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0xHUzhHTDUgaXMgbm90IHNldAotCi0jCi0jIFRvb2xzIHRvIGRldmVsb3AgbmV3IGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0RVTU1ZX0ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9BRjkwMTMgaXMgbm90IHNldAogQ09ORklHX0RBQj15CiAKICMKQEAgLTk3OSwxNSArOTUxLDE2IEBACiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCi1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KK0NPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQorQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQogIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GT1BTPW0KK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC0xMDI1LDYgKzk5OCw4IEBACiBDT05GSUdfRkJfU0hfTU9CSUxFX0xDREM9bQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwODEsOSArMTA1NiwxNCBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEwOTEsNiArMTA3MSw3IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMTE0LDYgKzEwOTUsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMTQ4LDEwICsxMTMwLDcgQEAKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTYwLDYgKzExMzksNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMTc5LDcgKzExNTksNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMjUyLDYgKzEyMzEsNyBAQAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKQEAgLTEyNjAsMTcgKzEyNDAsMjUgQEAKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKLUNPTkZJR19TSDY0X1BST0NfQVNJRFM9eQorIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX1NINjRfU1JfV0FUQ0g9eQogIyBDT05GSUdfUE9PUl9NQU5TX1NUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9BTFBIQU5VTUVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEyODYsNiArMTI3NCw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApAQCAtMTM1Niw2ICsxMzQ1LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMzY5LDYgKzEzNTksNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKQEAgLTEzNzYsNyArMTM2Nyw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCmluZGV4IDJkODZlMDQuLjVjMTEyMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTY6NTQ6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTc6NTE6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQ0LDEwICs0NSwxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU1LDYgKzY1LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTY0LDEwICs3NSw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc2LDYgKzg1LDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTEgKzEyNiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTUsNiArMTYwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMjAyLDExICsyMDgsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI2Myw5ICsyNzAsMTIgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQotQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MPXkKIENPTkZJR19OUl9ETUFfQ0hBTk5FTFM9OQorIyBDT05GSUdfUFZSMl9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRzJfRE1BIGlzIG5vdCBzZXQKIAogIwogIyBDb21wYW5pb24gQ2hpcHMKQEAgLTMxNCw2ICszMjQsOCBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCkBAIC0zMzUsNyArMzQ3LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzg3LDYgKzM5OCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzk5LDEzICs0MTEsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQzOSwxMiArNDUxLDE2IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00NzAsNiArNDg2LDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC00ODcsOCArNTA0LDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC01MzIsNyArNTUxLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC02MjgsNiArNjUwLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03NDYsNiArNzY5LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC04MDIsOSArODI2LDEzIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTgxMyw2ICs4NDEsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtODI4LDYgKzg1Nyw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODcxLDYgKzkwMSw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtOTIwLDcgKzk1MSw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTAxMiw2ICsxMDQyLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMDMzLDcgKzEwNjQsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwppbmRleCA0NjFiZmIzNS4uZjRjMzRiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNjo1NToyOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxNzo1NDowMiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxMyArMTYsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzUsNiArMzYsMTUgQEAKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKQEAgLTUwLDcgKzYwLDYgQEAKICMgQ09ORklHX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVUcgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApAQCAtNjAsNiArNjksNyBAQAogQ09ORklHX1NITUVNPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC03NCwxMSArODQsNiBAQAogQ09ORklHX0JBU0VfU01BTEw9MQogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTExMyw2ICsxMTgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xNTcsMTIgKzE2MywxMyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NINzcwNV9DQUNIRV8zMktCPXkKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI0Myw3ICsyNTAsNiBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVCBpcyBub3Qgc2V0CkBAIC0zNjEsNiArMzY3LDcgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKaW5kZXggMTRkNGIzNS4uNzgyNWMyNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNjo1NTo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxNzo1NDo1NyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDMsMzQgKzQ0LDQ1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzksNiArOTEsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExOCwxMSArMTMxLDYgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTcsNiArMTY1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk4LDExICsyMDcsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI0NSw3ICsyNTUsNyBAQAogIwogQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15Ci1DT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz04CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9ETUFCUkcgaXMgbm90IHNldAogCkBAIC0zMTAsNyArMzIwLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzYwLDYgKzM2OSw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzcyLDEzICszODIsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQwMiw2ICs0MTIsNyBAQAogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDU0LDkgKzQ2NSw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmZmZmZmZmYKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3Nyw2ICs0ODYsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTA2LDYgKzUyMCw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTE4LDggKzUzMywxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01MzYsNyArNTUzLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNjA3LDYgKzYyNyw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC02NDMsMTIgKzY2NCw5IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfREVCVUdfQ09SRT15CkBAIC02ODAsNiArNjk4LDcgQEAKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTczMiw2ICs3NTEsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc1MCw2ICs3NzAsNyBAQAogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldApAQCAtNzgxLDYgKzgwMiw3IEBACiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC04MDYsNiArODI4LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODUxLDYgKzg3NCw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04NjgsNyArODkyLDYgQEAKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTc0LDYgKzk5Nyw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTk4OSw3ICsxMDEzLDYgQEAKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTA5NSw2ICsxMTE4LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMTE1LDcgKzExMzksOSBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwppbmRleCA4NzNlYzQyLi5lYmI0YzM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNwotIyBUdWUgTWFyIDE3IDEzOjI1OjU4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE3OjU4OjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDEzICsxNywxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC03MSw2ICs3Miw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC04MCwxMCArODIsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC05MSw2ICs5MSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMywxMSArMjE0LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0zMTgsNyArMzIwLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzczLDYgKzM3NCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzgwLDEyICszODIsMTIgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CkBAIC01NDgsOSArNTUwLDExIEBACiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01ODMsOCArNTg3LDEwIEBACiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU0hfRVRIPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNjAxLDcgKzYwNyw2IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02ODUsNiArNjkwLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTc2NCw2ICs3NzAsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTgxNyw2ICs4MjQsNyBAQAogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC04MzQsMTEgKzg0MiwxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtODgwLDcgKzg4OCw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtODk0LDEyICs5MDEsMTQgQEAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC05ODcsNyArOTk2LDYgQEAKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA3MSw3ICsxMDc5LDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTExNjMsNiArMTE3MSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4NCw3ICsxMTkzLDcgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwppbmRleCA4NDdhMjUxLi44MmIxMTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNjo1Njo1NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODowMTowNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI1LDYgKzI1LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0zOSwxMSArNDAsMjAgQEAKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTUxLDYgKzYxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjAsMTAgKzcxLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzEsNiArODAsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMDQsMTEgKzExNCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMTQzLDYgKzE0OCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE4NCwxMSArMTkwLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMDgsNiArMjE1LDcgQEAKICMKICMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CiBDT05GSUdfU0hfSFA2WFg9eQorIyBDT05GSUdfU0hfUE9MQVJJUyBpcyBub3Qgc2V0CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTIyOSw3ICsyMzcsNyBAQAogIwogQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15Ci1DT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz02CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKICMKQEAgLTMwMiw2ICszMTAsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAogQ09ORklHX0FQTV9FTVVMQVRJT049eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKQEAgLTMyOSw5ICszMzgsMTMgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC0zNzUsNiArMzg4LDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTQ3MSw2ICs0ODUsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwpAQCAtNTU0LDEyICs1NjksMTMgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKICMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKIENPTkZJR19CQUNLTElHSFRfSFA2ODA9eQogCiAjCkBAIC02MzEsNiArNjQ3LDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTY0Nyw2ICs2NjQsNyBAQAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNjkyLDYgKzcxMCw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNzcxLDcgKzc5MCw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtNzk5LDEwICs4MTcsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKIApAQCAtODcwLDYgKzg5MCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtODkwLDcgKzkxMSw2IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCmluZGV4IGQzYmJiYjAuLmI2ZmE0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNjo1ODo0NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODowMjo1NCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDIsMTAgKzQzLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTMsNiArNjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjIsMTAgKzczLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzQsNiArODMsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExMywxMSArMTIzLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1Miw2ICsxNTcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTMsMTEgKzE5OSwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjkwLDYgKzI5Nyw4IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQpAQCAtMzI5LDcgKzMzOCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTQxMCw2ICs0MTgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTQyMiwxMyArNDMxLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NjgsMTggKzQ3NywyMyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKICMKICMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQogQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19JREVfR0Q9eQpAQCAtNTg1LDYgKzU5OSw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CkBAIC02MDcsNiArNjIyLDcgQEAKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQpAQCAtNjMxLDYgKzY0Nyw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjQ4LDggKzY2NSwxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNzAwLDYgKzcxOSw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC03MTgsNiArNzM4LDcgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcyNSw3ICs3NDYsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODE0LDYgKzgzOCw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIApAQCAtODk4LDYgKzkyMyw3IEBACiBDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKICMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX1VTQlZJREVPPW0KIENPTkZJR19VU0JfVklDQU09bQogQ09ORklHX1VTQl9JQk1DQU09bQpAQCAtOTExLDYgKzkzNyw3IEBACiAjIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFdDPW0KICMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfVVNCX1pSMzY0WFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldApAQCAtMTAyMCw2ICsxMDQ3LDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTA0MSwyMiArMTA2OSwyMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQotQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQotQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CitDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj1tCitDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT1tCitDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQotQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT1tCitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PW0KK0NPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldApAQCAtMTA4MSw3ICsxMTA4LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQpAQCAtMTEwNSwxNSArMTEzMiwxOSBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMzAsNyArMTE2MSw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTE0Myw2ICsxMTczLDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMTUxLDYgKzExODYsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTE3Niw2ICsxMjEyLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTIyNiw2ICsxMjYzLDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMjUwLDcgKzEyODgsNiBAQAogQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9bQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQpAQCAtMTMzMSw3ICsxMzY4LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQpAQCAtMTQyNCw2ICsxNDYwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xNDQ1LDcgKzE0ODIsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCmluZGV4IGQ1YzVhMWQuLjkyYzUxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzowMjo0NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODowNjo1MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDIsMTAgKzQzLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTMsNiArNjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjIsMTAgKzczLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzQsNiArODMsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExMywxMSArMTIzLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1Miw2ICsxNTcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTMsMTEgKzE5OSwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjkxLDYgKzI5OCw4IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogQ09ORklHX1BDTUNJQV9ERUJVRz15CiBDT05GSUdfUENNQ0lBPXkKQEAgLTMyOSw3ICszMzgsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC00MDgsNiArNDE2LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC00MjAsMTMgKzQyOSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDY1LDEyICs0NzQsMTYgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUyNiw2ICs1MzksNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNTQ5LDYgKzU2Myw3IEBACiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNjI0LDYgKzYzOSw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjQxLDggKzY1NywxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNjk3LDYgKzcxNSw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC03MTUsNiArNzM0LDcgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcyMiw3ICs3NDIsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIENPTkZJR19ORVRfUENNQ0lBPXkKICMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldApAQCAtODEwLDYgKzgzMyw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIApAQCAtOTIxLDkgKzk0NSwxMyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC05NjgsNiArOTk2LDcgQEAKICMKICMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtOTkwLDYgKzEwMTksNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMDM2LDYgKzEwNjYsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExMjQsNyArMTE1NSw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKQEAgLTEyMTcsNiArMTI0Nyw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIzOCw3ICsxMjY5LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcKaW5kZXggMTI1ZDgwMS4uMjY1ODZjMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzowMzozNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODowNzozOSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDMsMzMgKzQ0LDQ0IEBACiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKICMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1JFTEFZPXkKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03Nyw2ICs4OSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExNiwxMSArMTI5LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU1LDYgKzE2Myw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5NiwxMSArMjA1LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0zMDksNyArMzE5LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM1OSw2ICszNjgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3MSwxMyArMzgxLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MDIsNiArNDEyLDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTQ1Miw5ICs0NjMsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00NzUsNiArNDg0LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ5MSw5ICs1MDUsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUwNyw2ICs1MjUsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUzOCw4ICs1NTcsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTU2LDcgKzU3NywxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTc3OCw2ICs4MDIsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzk3LDYgKzgyMiw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtODQ5LDYgKzg3NSw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04NjgsNyArODk1LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTcwLDYgKzk5Niw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTk4NCw3ICsxMDExLDYgQEAKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTAyNSw3ICsxMDUxLDggQEAKIENPTkZJR19BVURJVF9HRU5FUklDPXkKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKaW5kZXggNWExYzA0OC4uNzUxNzgzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MDY6NDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MTE6MTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDE4ICs0MywzMiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYzLDEwICs3OCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc0LDYgKzg3LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTA3LDExICsxMjEsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2LDYgKzE1NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5MywxMSArMjAzLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMzksNyArMjUwLDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQotQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCiAjCkBAIC0zMDQsNyArMzE1LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VTklYIGlzIG5vdCBzZXQKIENPTkZJR19YRlJNPXkKQEAgLTM1OCw2ICszNjgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3MCwxMyArMzgxLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MDcsOSArNDE4LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIApAQCAtNDQzLDYgKzQ1OCw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNDU1LDggKzQ3MSwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC00NzMsNyArNDkxLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNTIwLDYgKzU0MSw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC02MDEsMTUgKzYyMywyMCBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTYzMiw2ICs2NTksNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC02NzgsNiArNzA2LDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzI3LDYgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtNzc4LDcgKzgwNiw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtODA2LDEwICs4MzMsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKIApAQCAtODc3LDYgKzkwNiw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtODk3LDcgKzkyNyw5IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKaW5kZXggNjc4NTc2Ny4uYTg3MjBmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMQotIyBUaHUgSmFuIDIyIDA5OjE2OjE2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjE0OjAzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE2LDE1ICsxNiwxNyBAQAogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLSMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDE0ICs0NCwxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBDb250cm9sIEdyb3VwIHN1cHBvcnQKLSMKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQpAQCAtNTcsOCArNjQsMTMgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTY4LDEwICs4MCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc5LDYgKzg5LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIwLDExICsxMzEsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM0LDYgKzE0MCw3IEBACiBDT05GSUdfQ1BVX1NINEE9eQogQ09ORklHX0NQVV9TSDRBTF9EU1A9eQogQ09ORklHX0NQVV9TSFgyPXkKK0NPTkZJR19BUkNIX1NITU9CSUxFPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKQEAgLTE2Miw2ICsxNjksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjI9eQpAQCAtMjA5LDExICsyMTcsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI0Myw2ICsyNTIsNyBAQAogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CisjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldApAQCAtMzE4LDcgKzMyOCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3Myw2ICszODIsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MCwxMiArMzkwLDEyIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtNDk1LDcgKzUwNSw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTUxNCwxMCArNTIzLDE3IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTYzLDkgKzU3OSwxMSBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc4LDggKzU5NiwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01OTYsNyArNjE2LDYgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3OSw2ICs2OTgsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNzE1LDEyICs3MzUsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC03OTcsNyArODE0LDcgQEAKICMKICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVI9eQotIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPXkKIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPXkKIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PXkKQEAgLTgwNiw2ICs4MjMsNyBAQAogQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15CiBDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKIENPTkZJR19WSURFT19WNEwyPXkKIENPTkZJR19WSURFT0JVRl9HRU49eQogQ09ORklHX1ZJREVPQlVGX0RNQV9DT05USUc9eQpAQCAtODY2LDcgKzg4NCw3IEBACiAjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogQ09ORklHX1VTQl9HQURHRVQ9eQogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CkBAIC05MDUsNiArOTIzLDcgQEAKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTk2NCw2ICs5ODMsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKIENPTkZJR19VSU89eQogIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAogQ09ORklHX1VJT19QRFJWX0dFTklSUT15CkBAIC0xMDQ1LDcgKzEwNjUsNiBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDkwLDcgKzExMDksNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTExNywxMCArMTEzNiwxMiBAQAogQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTE4OSw2ICsxMjEwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMjA5LDcgKzEyMzEsOSBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwppbmRleCAzMjBkZWYyLi5kZjJkMTc3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKLSMgV2VkIEZlYiAxMSAxODo0MTo1OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODoxNjo0OCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNjgsNiArNjksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNzgsMTAgKzgwLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtODksNiArODksNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xNjIsNiArMTYzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMjAzLDExICsyMDUsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI1MSw3ICsyNTQsNyBAQAogIwogQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15Ci1DT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz02CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKICMKQEAgLTMxNCw3ICszMTcsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzYyLDYgKzM2NCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzc0LDcgKzM3Nyw2IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtNDgxLDcgKzQ4Myw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTUxNyw2ICs1MTgsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU0OCw4ICs1NTAsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTY2LDcgKzU3MCw2IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03NTAsNiArNzUzLDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTgzNyw3ICs4NDEsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05MDcsNiArOTEwLDcgQEAKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpAQCAtOTIyLDcgKzkyNiw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTk2Myw3ICs5NjYsNyBAQAogQ09ORklHX0FVRElUX0dFTkVSSUM9eQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCmluZGV4IDY1YjAxYTkuLjdkZWY0ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzoxMDoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODoyMDoxNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIApAQCAtNDUsMTUgKzQ2LDI0IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNjEsNiArNzEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNzEsMTAgKzgyLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTgzLDYgKzkyLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjQsMTEgKzEzNCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NCw2ICsxNjksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTc5LDggKzE4NSwxMSBAQAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKLUNPTkZJR18yOUJJVD15CisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQl9FTkFCTEU9eQogIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKK0NPTkZJR19QTUJfRklYRUQ9eQogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjEyLDExICsyMjEsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMwOSw2ICszMTksOCBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIApAQCAtMzMwLDcgKzM0Miw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM5Miw2ICs0MDMsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM5OSwxMiArNDExLDEyIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtNDEyLDYgKzQyNCw3IEBACiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NTEsMTMgKzQ2NCwyMCBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV85M0NYNj15CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV85M0NYNj15CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTEzLDYgKzUzMyw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CkBAIC01MzUsNiArNTU2LDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTYwOSw2ICs2MzEsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYyNyw4ICs2NTAsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTY4NCw2ICs3MDksNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNzAyLDYgKzcyOCw3IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC03MDksNyArNzM2LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC03OTYsNiArODI2LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04NTcsMTIgKzg4OCw5IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTg4NSw2ICs5MTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKQEAgLTkwNSwxMCArOTM0LDE0IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CkBAIC05NDksNiArOTgyLDcgQEAKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDcsOSArMTA0MSwxMyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMDcxLDYgKzExMDksNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTA5NCw2ICsxMTMzLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTE0Miw2ICsxMTgyLDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTE2Niw3ICsxMjA3LDYgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTI2OSw2ICsxMzA5LDcgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CkBAIC0xMjg4LDcgKzEzMjksNyBAQAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTMyNSwxMCArMTM2NiwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTM5Nyw2ICsxNDQwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xNDIxLDMgKzE0NjUsNCBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwppbmRleCA4ZGVmYWE1Li5jYjEzNGZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MTQ6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MjQ6MzUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0yNiw2ICsyNiw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIApAQCAtNDgsMTEgKzQ5LDIxIEBACiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0FVRElUU1lTQ0FMTD15CiBDT05GSUdfQVVESVRfVFJFRT15CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19SQ1VfVFJBQ0U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTYwLDIxICs3MSwxOSBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtODMsNiArOTIsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyNiwxMiArMTM2LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY4LDYgKzE3Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODU9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODMsOCArMTg4LDExIEBACiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAotQ09ORklHXzI5QklUPXkKKyMgQ09ORklHXzI5QklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CitDT05GSUdfUE1CX0VOQUJMRT15CiAjIENPTkZJR19QTUIgaXMgbm90IHNldAorQ09ORklHX1BNQl9GSVhFRD15CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CkBAIC0yMjIsMTEgKzIzMCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzM0LDYgKzM0Myw4IEBACiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTM1NSw3ICszNjYsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC00MTcsNiArNDI3LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC00MjUsMTIgKzQzNiwxMiBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTQzOCw2ICs0NDksNyBAQAogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDc3LDEzICs0ODksMjAgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fOTNDWDY9eQogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fOTNDWDY9eQogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUzOSw2ICs1NTgsNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNTYxLDYgKzU4MSw3IEBACiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC02MzUsNiArNjU2LDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02NTMsOCArNjc1LDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC02ODcsNiArNzExLDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTcwNSw2ICs3MzAsNyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNzEyLDcgKzczOCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtODAwLDYgKzgyOSw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODYyLDEyICs4OTIsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC05MTQsNiArOTQxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CkBAIC05MzQsMTAgKzk2MiwxNCBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldApAQCAtOTc5LDYgKzEwMTEsNyBAQAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA1NSw2ICsxMDg4LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMDg5LDkgKzExMjMsMTMgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTE1Myw2ICsxMTkxLDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTExNzYsNiArMTIxNSw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEyMjQsNiArMTI2NCw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNDgsNyArMTI4OSw2IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEzNTQsNiArMTM5NCw3IEBACiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQpAQCAtMTM3Myw3ICsxNDE0LDcgQEAKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE0MTAsMTAgKzE0NTEsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE0ODIsNiArMTUyNSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUwNCw3ICsxNTQ4LDcgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCmluZGV4IDY0ZWU2OWUuLmEwMzdjNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzoxOTowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODoyOTowOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yNCw2ICsyNCw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzgsMTEgKzM5LDIwIEBACiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfTkFNRVNQQUNFUz15CkBAIC01Miw4ICs2MiwxMyBAQAogQ09ORklHX1BJRF9OUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC02MywxNiArNzgsMTUgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQpAQCAtMTEyLDExICsxMjYsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTIsNiArMTYxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTkwLDExICsyMDAsMTEgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMTcsNyArMjI3LDYgQEAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0NNVCBpcyBub3Qgc2V0CiBDT05GSUdfU0hfTVRVMj15CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTQwMDAwMDAwCkBAIC0yNTEsNyArMjYwLDYgQEAKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19IWj0xMDAwCiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMzA4LDYgKzMxNiw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtMzU4LDkgKzM2Nyw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtMzgxLDYgKzM4OCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC0zOTIsOSArNDA0LDEzIEBACiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTYyLDYgKzU3OCw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC01NzcsNiArNTk0LDcgQEAKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC02MjYsNiArNjQ0LDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTY3MSw3ICs2OTAsNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtNzAxLDcgKzcyMCw3IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCmluZGV4IDhkN2E1OTcuLjlhZTI4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzoyMDozMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODozMDozNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xOCwxMiArMTgsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTEgKzQzLDIwIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfTkFNRVNQQUNFUz15CkBAIC01MywzMSArNjQsMzUgQEAKIENPTkZJR19JUENfTlM9eQogQ09ORklHX1VTRVJfTlM9eQogQ09ORklHX1BJRF9OUz15CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKQEAgLTExNywxMSArMTMyLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU3LDYgKzE2Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5NSwxMSArMjA2LDExIEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjcxLDcgKzI4Miw2IEBACiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTMxNSw4ICszMjUsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VTklYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldApAQCAtMzY0LDYgKzM3Miw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzcxLDE4ICszODAsMTkgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQwNSw2ICs0MTUsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTQ1NSw5ICs0NjYsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3OCw2ICs0ODcsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNDkyLDkgKzUwNiwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTA4LDYgKzUyNiw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTM5LDggKzU1OCwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiBDT05GSUdfU01TQzkxMVg9eQorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01NTcsNyArNTc4LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTc3Nyw3ICs4MDEsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTc5MSwxMSArODE3LDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKQEAgLTgyMyw3ICs4NDksNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTgzNCw2ICs4NTksMTIgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtODUyLDYgKzg4MywxMCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQpAQCAtODkxLDYgKzkyNiw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC05MDYsNiArOTQyLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC05NDUsNiArOTgyLDcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk2Miw3ICsxMDAwLDYgQEAKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTAxOCw2ICsxMDU1LDcgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19ERUJVR19WTT15CisjIENPTkZJR19ERUJVR19OT01NVV9SRUdJT05TIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19XUklURUNPVU5UPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MSVNUPXkKQEAgLTEwMzEsNiArMTA2OSw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQEAgLTEwNDgsNyArMTA4Nyw3IEBACiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xMDg2LDcgKzExMjUsOCBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKaW5kZXggZDY2ODBmNC4uYzBmNzQxYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MjM6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MzM6MjUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQzLDEwICs0NCwxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU0LDYgKzY0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjMsMTAgKzc0LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzUsNiArODQsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExNiwxMSArMTI2LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NSw2ICsxNjAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTYsMTEgKzIwMiwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzAwLDYgKzMwNyw4IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0k9eQogIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CkBAIC0zMjQsNyArMzMzLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzc2LDYgKzM4NCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzgzLDEyICszOTIsMTIgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDA1LDcgQEAKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQzNCwxMiArNDQ0LDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00OTUsNiArNTEwLDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTUxNyw2ICs1MzMsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNTkxLDYgKzYwOCw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjA5LDggKzYyNywxMCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2ODUsNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNjgzLDYgKzcwNCw3IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02OTAsNyArNzEyLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTc4MCw2ICs4MDUsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTc5OCw3ICs4MjQsNiBAQAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC04MjIsNiArODQ3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CkBAIC05MTgsNiArOTQ0LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05OTYsNiArMTAyMyw4IEBACiAjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CkBAIC0xMTAxLDYgKzExMzAsNyBAQAogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKQEAgLTExMjIsMTggKzExNTIsMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTExNjksNyArMTE5OCw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxMjA3LDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMjMwLDYgKzEyNjMsNyBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMjQ3LDYgKzEyODEsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMjkzLDYgKzEzMjgsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMzg1LDcgKzE0MjEsNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTQ3OSw2ICsxNTE1LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xNTAwLDcgKzE1MzcsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKaW5kZXggM2ZjYTEwZS4uOGZlZWY2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MjY6MTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MzQ6MTIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQzLDEwICs0NCwxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU0LDYgKzY0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjMsMTAgKzc0LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzUsNiArODQsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExNiwxMSArMTI2LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NSw2ICsxNjAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTYsMTEgKzIwMiwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzAwLDYgKzMwNyw4IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0k9eQogIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CkBAIC0zMjQsNyArMzMzLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzc2LDYgKzM4NCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzgzLDEyICszOTIsMTIgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDA1LDcgQEAKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQzNCwxMiArNDQ0LDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00OTUsNiArNTEwLDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTUxNyw2ICs1MzMsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNTkxLDYgKzYwOCw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjA5LDggKzYyNywxMCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2ODUsNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNjgzLDYgKzcwNCw3IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02OTAsNyArNzEyLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTc4MCw2ICs4MDUsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTc5OCw3ICs4MjQsNiBAQAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC04MjIsNiArODQ3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CkBAIC05MTgsNiArOTQ0LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05OTYsNiArMTAyMyw4IEBACiAjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CkBAIC0xMTAxLDYgKzExMzAsNyBAQAogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKQEAgLTExMjIsMTggKzExNTIsMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTExNjksNyArMTE5OCw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxMjA3LDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMjMwLDYgKzEyNjMsNyBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMjQ3LDYgKzEyODEsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMjkzLDYgKzEzMjgsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMzg1LDcgKzE0MjEsNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTQ3OSw2ICsxNTE1LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xNTAwLDcgKzE1MzcsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCmluZGV4IDVkNmIwNjcuLjczOWUyMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzoyNjo0MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODozNDo0MyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDQsMTEgKzQ1LDIwIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15CkBAIC01NiwyMSArNjYsMTkgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC04MCw2ICs4OCw3IEBACiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExOSwxMSArMTI4LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1OSw2ICsxNjMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTc0LDggKzE3OSwxMSBAQAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKLUNPTkZJR18yOUJJVD15CisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQl9FTkFCTEU9eQogIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKK0NPTkZJR19QTUJfRklYRUQ9eQogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjA3LDExICsyMTUsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI1Nyw2ICsyNjYsNyBAQAogIwogQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CitDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz0xMgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0zMDYsNiArMzE2LDggQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogQ09ORklHX1BDSV9ERUJVRz15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQpAQCAtMzQ4LDcgKzM2MCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTQyNyw2ICs0MzgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15CiAKICMKQEAgLTQ3MSwxMyArNDgzLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC02MzEsNiArNjQzLDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTY1NCw2ICs2NjcsNyBAQAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTczOSw2ICs3NTMsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTc1Niw4ICs3NzEsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC03ODAsNyArNzk3LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTg0MCw3ICs4NjAsNiBAQAogQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldApAQCAtODk5LDYgKzkxOCw3IEBACiAjIENPTkZJR19QUERFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAKQEAgLTEwMjMsNiArMTA0Myw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEyMyw2ICsxMTQ0LDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQxLDE4ICsxMTYzLDE3IEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC0xMTg5LDcgKzEyMTAsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTEyMDEsNiArMTIyMSwxMSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTI0Myw3ICsxMjY4LDkgQEAKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEyOTUsNiArMTMyMiw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEzMTgsNyArMTM0Niw2IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE0MjQsNiArMTQ1MSw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTE0MzksNyArMTQ2Nyw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE1NDQsNiArMTU3MSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU2NSw3ICsxNTkzLDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKaW5kZXggZTViNTViNi4uZDMwZTBhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzozMToyNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODozOTozNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xOCwxMiArMTgsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDMsMTggKzQ1LDI4IEBACiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfUkNVX1RSQUNFPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUFM9eQogQ09ORklHX0NHUk9VUF9ERUJVRz15CiBDT05GSUdfQ0dST1VQX05TPXkKICMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfREVWSUNFPXkKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15CiBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlM9eQotQ09ORklHX01NX09XTkVSPXkKIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSPXkKK0NPTkZJR19NTV9PV05FUj15CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfTkFNRVNQQUNFUz15CkBAIC02MiwzMSArNzQsMzUgQEAKIENPTkZJR19JUENfTlM9eQogQ09ORklHX1VTRVJfTlM9eQogQ09ORklHX1BJRF9OUz15CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CkBAIC0xMjcsMTIgKzE0Myw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2OCw2ICsxNzgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0yMDYsMTEgKzIxNywxMSBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI4MCw3ICsyOTEsNiBAQAogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkBAIC0zMjIsOCArMzMyLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3OCw2ICszODYsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4NSwxOCArMzk0LDE5IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MTksNiArNDI5LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDY2LDkgKzQ3Nyw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MjAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMTAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00ODksNiArNDk4LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUwNiw5ICs1MjAsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotQ09ORklHX0VFUFJPTV85M0NYNj15CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworQ09ORklHX0VFUFJPTV85M0NYNj15CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTIyLDYgKzU0MCw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTM0LDggKzU1MywxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01NTIsNyArNTczLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNjk2LDYgKzcyMCw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC03MTIsNiArNzM3LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC03NTIsNiArNzc4LDcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC03NzEsNyArNzk4LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODI0LDYgKzg1MCw3IEBACiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19WTT15CisjIENPTkZJR19ERUJVR19OT01NVV9SRUdJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xJU1Q9eQpAQCAtODM1LDYgKzg2Miw3IEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQpAQCAtODUyLDcgKzg4MCw3IEBACiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC05NTUsNiArOTgzLDcgQEAKICMgQ29tcHJlc3Npb24KICMKIENPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0xaTz15CiAKICMKQEAgLTk4MCw3ICsxMDA5LDggQEAKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX0xaT19DT01QUkVTUz15CiBDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKaW5kZXggMzkwMDUyNS4uZmJiNzJkMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzozMzo1MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo0MjowMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxNCArMTYsMTYgQEAKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLSMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTQgKzQzLDIzIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19HUk9VUF9TQ0hFRD15CiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNFUl9TQ0hFRD15CiAjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01Niw2ICs2Nyw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02NSwxMCArNzcsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzYsNiArODYsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExNCwxMSArMTI1LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3LDYgKzEzMyw3IEBACiBDT05GSUdfQ1BVX1NIND15CiBDT05GSUdfQ1BVX1NINEE9eQogQ09ORklHX0NQVV9TSDRBTF9EU1A9eQorQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldApAQCAtMTU1LDYgKzE2Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTYsMTEgKzIwNCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjI3LDYgKzIzNiw3IEBACiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVE1VPXkKKyMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0zMDIsNyArMzEyLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM1Myw2ICszNjIsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2NSwxMyArMzc1LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zOTQsNiArNDA0LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDQxLDkgKzQ1Miw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2NCw2ICs0NzMsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTIwLDkgKzUzNCwxMSBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTM5LDcgKzU1NSwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC02MzMsNiArNjUyLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTY2OSwxMiArNjg5LDkgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtNzA2LDYgKzcyMyw3IEBACiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCkBAIC03MjcsNyArNzQ1LDcgQEAKICMKICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVI9eQotIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPXkKIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPXkKIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PXkKQEAgLTczNiw2ICs3NTQsNyBAQAogQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15CiBDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKIENPTkZJR19WSURFT19WNEwyPXkKIENPTkZJR19WSURFT19WNEwxPXkKIENPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQpAQCAtNzU3LDYgKzc3Niw3IEBACiAjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0CkBAIC03NjksNiArNzg5LDggQEAKICMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldApAQCAtNzc2LDYgKzc5OCw3IEBACiAjIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19QVlJVU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hEUFZSIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKQEAgLTgzMyw2ICs4NTYsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTk0MCw3ICs5NjQsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxMTZYX0hDRD15CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTk1NCwxMSArOTgwLDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CkBAIC05ODgsNyArMTAxNCw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtOTk5LDEyICsxMDI0LDE4IEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiBDT05GSUdfVUlPPXkKICMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CkBAIC0xMDMxLDYgKzEwNjIsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTEwODQsNiArMTExNiw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTEwNSw3ICsxMTM4LDYgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE0Niw3ICsxMTc4LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMjQwLDYgKzEyNzEsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNjUsMyArMTI5Nyw0IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwppbmRleCA5MzJiMDIzLi4xMjUzMDRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjM2OjQ2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjQ0OjUzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE4LDEyICsxOCwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0zNiwxNSArMzgsMjUgQEAKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTUzLDE2ICs2NSwxNSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTkzLDExICsxMDQsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMzIsNiArMTM4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTcwLDExICsxNzcsMTEgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX1dSSVRFQkFDSyBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIPXkKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMjgsNyArMjM1LDYgQEAKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTMyOSw5ICszMzUsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGEwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDEwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TT0xVVElPTkVOR0lORSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTM1Myw2ICszNTcsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtMzY0LDkgKzM3MywxMyBAQAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUxNCwxNSArNTI3LDIwIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNTM3LDYgKzU1NSw3IEBACiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTU3NSw2ICs1OTQsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNjE0LDcgKzYzNCw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZwppbmRleCA4NTc0ZDZlLi4wMzA4YWJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjM3OjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjQ1OjU2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDEzICsxNywxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MSwxNiArNDIsMzAgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC01OSwxMCArNzQsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03MCw2ICs4Myw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEwNiwxMSArMTIwLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NSw2ICsxNTQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODYsMTIgKzE5NiwxMyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NINzcwNV9DQUNIRV8zMktCPXkKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI5Miw3ICszMDMsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNDcsNiArMzU3LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNTksMTMgKzM3MCwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMzg0LDYgKzM5NSw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDUxLDYgKzQ2MywxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00NjcsOSArNDg0LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00ODMsNiArNTA0LDcgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC00OTUsOCArNTE3LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TVE5JQz15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTUxMyw3ICs1MzcsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNTkzLDYgKzYyMCw3IEBACiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNjg0LDE1ICs3MTIsMjAgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC03MDksNiArNzQyLDcgQEAKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc2MSw2ICs3OTUsNyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNzc4LDcgKzgxMyw2IEBACiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgxNyw3ICs4NTEsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTkwOCw2ICs5NDEsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMCw3ICs5NjQsOCBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwppbmRleCBlMzFlYTg0Li5hOGMyNGI3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjQwOjEyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjQ4OjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE2LDEzICsxNiwxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MSwxMCArNDIsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01MiwyMSArNjIsMTkgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKICMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03NCw2ICs4Miw3IEBACiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTEyLDExICsxMjEsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTEsNiArMTU1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTkyLDExICsxOTcsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMwMCw3ICszMDYsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzY0LDYgKzM2OSw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSEVEPXkKIAogIwpAQCAtNDExLDcgKzQxNyw2IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTksNiArNDI0LDcgQEAKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDQzLDYgKzQ0OSw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUxMCw2ICs1MTcsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTIzLDkgKzUzNSwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTcxLDYgKzU4Nyw3IEBACiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC01NzksNiArNTk2LDcgQEAKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYxMSw4ICs2MjksMTAgQEAKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKIENPTkZJR19TSF9FVEg9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC02MjksNyArNjQ5LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNjc1LDYgKzY5OCw3IEBACiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNzQ0LDkgKzc2OCwxMyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CkBAIC03NjQsOSArNzkyLDE0IEBACiAjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTc5MSw2ICs4MjQsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTg0NCw2ICs4NzgsNyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg2MSw3ICs4OTYsNiBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05MjMsNiArOTU3LDcgQEAKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpAQCAtOTM3LDcgKzk3Miw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTk3NCwxMCArMTAwOCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTEwNDYsNiArMTA4Miw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjgsNyArMTEwNSw3IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwppbmRleCBhZDFiYWNlLi40Yjc5YzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjQzOjMzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjUxOjQ0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE2LDEzICsxNiwxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MSwxNCArNDIsMjMgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0VSX1NDSEVEPXkKICMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU2LDIxICs2NiwxOSBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc4LDYgKzg2LDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTEgKzEyNSw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NSw2ICsxNTksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTYsMTEgKzIwMSwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzAzLDcgKzMwOSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0zNjcsNiArMzcyLDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIRUQ9eQogCiAjCkBAIC00MTQsNyArNDIwLDYgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0MjcsNyBAQAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NDYsNiArNDUyLDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTEzLDYgKzUyMCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01MjcsOSArNTM5LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NzIsNiArNTg4LDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU4MCw2ICs1OTcsNyBAQAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTk1LDcgKzYxMywxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC04MDUsNyArODI2LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTgyMywxOCArODQ2LDE3IEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC04NzAsNyArODkyLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC04ODAsNiArOTAxLDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CkBAIC04OTcsOSArOTIzLDE0IEBACiAjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTkyNCw2ICs5NTUsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTk4MCw2ICsxMDEyLDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMDgyLDYgKzExMTUsNyBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTEwOTYsNyArMTEzMCw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTExMzMsMTAgKzExNjYsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMjA1LDYgKzEyNDAsNyBAQAogIyBDb21wcmVzc2lvbgogIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMjI3LDcgKzEyNjMsNyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKaW5kZXggYWJiMTg5YS4uODJiZGFhYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo0Njo1OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo1NToxMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxNSArMTYsMTcgQEAKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLSMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQ0LDE5ICs0NiwzMyBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTY2LDEwICs4Miw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc4LDYgKzkyLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTgsMTEgKzEzMyw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMiw2ICsxNDIsNyBAQAogQ09ORklHX0NQVV9TSDRBPXkKIENPTkZJR19DUFVfU0g0QUxfRFNQPXkKIENPTkZJR19DUFVfU0hYMj15CitDT05GSUdfQVJDSF9TSE1PQklMRT15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CkBAIC0xNjAsNiArMTcxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyPXkKQEAgLTIxMywxMSArMjI1LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNDYsNiArMjU5LDcgQEAKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9UTVU9eQorIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19USUNLX09ORVNIT1Q9eQpAQCAtMzIxLDcgKzMzNSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0zNzMsNiArMzg2LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODUsMTMgKzM5OSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDIyLDkgKzQzNiwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDcwLDYgKzQ4OCw3IEBACiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC00NzgsNiArNDk3LDcgQEAKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTQ5MCw4ICs1MTAsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTA4LDcgKzUzMCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTU4OSw2ICs2MTQsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNjgwLDkgKzcwNiwxMyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NTUsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzQ4LDYgKzc3OSw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc5MSw2ICs4MjMsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg0Myw3ICs4NzYsNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKQEAgLTkzNiw2ICs5NjksNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTk1Niw3ICs5OTAsOSBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKaW5kZXggYWM4NzRmNi4uY2VlZjZkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo0OToyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo1NzozMSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDIsMTEgKzQzLDIwIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU0LDYgKzY0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjMsMTAgKzc0LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzQsNiArODMsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTIsMTEgKzEyMiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTEsNiArMTU2LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTkyLDExICsxOTgsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI5OSw3ICszMDYsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNTUsNiArMzYxLDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjcsMTMgKzM3NCwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMzkyLDYgKzM5OSw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDU5LDYgKzQ2NywxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00NzIsOSArNDg1LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIApAQCAtNTM4LDkgKzU1NSwxMSBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTUzLDggKzU3MiwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU1ROSUM9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01NzEsNyArNTkyLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNjIyLDYgKzY0Niw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC03MTEsMTUgKzczNiwyMCBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTczNSw2ICs3NjUsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03ODksNiArODIwLDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgwNiw3ICs4MzgsNiBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC04NTksNyArODkwLDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC05NTEsNiArOTgxLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05NzMsNyArMTAwNCw3IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwppbmRleCBmNTRhZTA1Li42N2ZjMjZiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo1MTo0NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo1OTo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDIsMTggKzQzLDMyIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjMsMTAgKzc4LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzQsNiArODcsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTIsMTEgKzEyNiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTEsNiArMTYwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTkyLDExICsyMDIsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMwMSw3ICszMTIsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNzYsNiArMzg2LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODgsMTMgKzM5OSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDEzLDYgKzQyNCw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDgwLDYgKzQ5MiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00OTYsOSArNTEzLDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MTIsNiArNTMzLDcgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01MjQsOCArNTQ2LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTQyLDcgKzU2NiwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTU4NSw2ICs2MTIsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNjczLDE1ICs3MDEsMjAgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC02OTksNiArNzMyLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNzUzLDYgKzc4Nyw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04MDIsNyArODM3LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC04OTQsNiArOTI4LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05MTYsNyArOTUxLDggQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKaW5kZXggNzUwNDk3OC4uZWJjZTIzYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo1Mzo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOTowMjowNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsNiArNDIsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC01Miw2ICs2Miw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjAsMTAgKzcxLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03Miw2ICs4MSw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTA4LDExICsxMTgsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNDgsNiArMTUzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5MiwxMSArMTk4LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yODMsNiArMjkwLDggQEAKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCkBAIC0yOTYsNyArMzA1LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzUxLDYgKzM1OSw3IEBACiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2MiwxMyArMzcxLDEzIEBACiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCiAjCkBAIC0zODYsNiArMzk1LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NjAsNiArNDcwLDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ3OSwxMCArNDk0LDE0IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTM2LDYgKzU1NSw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CkBAIC01NTcsNiArNTc3LDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU2NSw2ICs1ODYsNyBAQAogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldApAQCAtNjE5LDYgKzY0MSw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CkBAIC02NTQsOCArNjc3LDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNjkzLDcgKzcxOCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC04ODUsNiArOTEzLDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05NzgsNiArMTAwNyw3IEBACiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKQEAgLTk5NiwxOCArMTAyNiwxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTA0Myw3ICsxMDcyLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMDU1LDYgKzEwODMsMTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTA2Miw2ICsxMDk1LDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTExMjAsNiArMTE1NCw3IEBACiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMTQsNyArMTI0OSw3IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMzAxLDYgKzEzMzYsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMjMsNyArMTM1OSw3IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCmluZGV4IDA0YmRlMWUuLjZmY2RiMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo1Njo0NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOTowNDo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDQsMTggKzQ1LDMyIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTY1LDEwICs4MCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc3LDYgKzkwLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTksMTEgKzEzMyw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTgsNiArMTY3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk5LDExICsyMDksMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI5NCw2ICszMDUsOCBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUdfUENJPW0KICMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldApAQCAtMzE4LDcgKzMzMSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3NSw2ICszODcsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MiwxOCArMzk1LDE5IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MzAsMTIgKzQ0NCwxNiBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKQEAgLTU0MSw2ICs1NTksNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNTYyLDYgKzU4MSw3IEBACiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldApAQCAtNTc3LDYgKzU5Nyw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTk0LDggKzYxNSwxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNjQ2LDYgKzY2OSw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC02NjQsNiArNjg4LDcgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY3MSw3ICs2OTYsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTc1NCw2ICs3ODIsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTg3Miw5ICs5MDEsMTMgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtODgzLDYgKzkxNiw3IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC05MDgsNiArOTQyLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTU3LDYgKzk5Miw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtOTgxLDcgKzEwMTcsNiBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDgxLDcgKzExMTYsNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKQEAgLTExMTAsMTAgKzExNDUsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTExODIsNiArMTIxOSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDUsNyArMTI0Myw4IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCmluZGV4IDFiODY5ZjQuLjFhYjM3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MDA6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MDk6MDEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQxLDE0ICs0MiwyMyBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTYsNiArNjYsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjUsMTAgKzc2LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc2LDYgKzg1LDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTQsMTEgKzEyNCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1Myw2ICsxNTgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTQsMTEgKzIwMCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjk5LDcgKzMwNiw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM2OSw2ICszNzUsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15CiAKICMKQEAgLTQxOCwxMyArNDI1LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NDcsNiArNDU0LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MTQsNiArNTIyLDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUyNyw5ICs1NDAsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU0Myw2ICs1NjAsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU1Niw4ICs1NzQsMTAgQEAKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU3NCw3ICs1OTQsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC02NDAsNiArNjYzLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTcxOCwxNSArNzQyLDIwIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzQyLDYgKzc3MSw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtNzk1LDYgKzgyNSw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04NDQsNyArODc1LDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTkzNiw2ICs5NjcsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2MSwzICs5OTMsNCBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKaW5kZXggYmEzM2FjYS4uYzc5YmI4NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxODowMjoyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOToxMDo1NyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTUgKzQyLDI0IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTgsOSArNjgsMTEgQEAKIENPTkZJR19JUENfTlM9eQogIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTcwLDEwICs4Miw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTgxLDYgKzkxLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIyLDExICsxMzMsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYyLDYgKzE2OCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTIwNywxMSArMjE0LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMzEsNiArMjM5LDcgQEAKICMgQm9hcmQgc3VwcG9ydAogIwogQ09ORklHX1NIX1NINzc2M1JEUD15CisjIENPTkZJR19TSF9FU1BUIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMzExLDggKzMyMCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNjcsNiArMzc0LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzQsMTIgKzM4MiwxMiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTM4Nyw2ICszOTUsNyBAQAogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDA5LDYgKzQxOCw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2Miw5ICs0NzIsNyBAQAogIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg1LDYgKzQ5MywxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01NDQsOSArNTU3LDExIEBACiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzksOCArNTk0LDEwIEBACiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU0hfRVRIPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTk3LDcgKzYxNCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC02NzcsNiArNjk3LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTc1Niw2ICs3NzcsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTgwNyw3ICs4MjksOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtODI1LDE4ICs4NDksMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTg3Miw3ICs4OTUsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTg4Miw2ICs5MDQsMTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CkBAIC05MDMsNiArOTMwLDcgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTkyNiw2ICs5NTQsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05NzQsNiArMTAwMyw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC05OTEsNyArMTAyMSw2IEBACiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNzUsNyArMTEwNCw3IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMTY3LDYgKzExOTYsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODcsNyArMTIxNyw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCmluZGV4IDU0ZTFkZWUuLmE2Y2Y0NTA1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKLSMgRnJpIEZlYiAyMCAxODoyNToyOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOToxMjoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTI2LDYgKzI2LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC03MSw2ICs3Miw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtODEsMTAgKzgzLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtOTMsNiArOTMsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTE2OSw2ICsxNzAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMjIwLDExICsyMjIsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMxNCw2ICszMTcsNyBAQAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIApAQCAtMzM1LDcgKzMzOSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM5NSw2ICszOTgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTQwNyw3ICs0MTEsNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTUxMiw3ICs1MTUsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC01NzgsNiArNTgwLDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTY1Miw2ICs2NTUsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTY4MSw2ICs2ODUsNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldApAQCAtNjkwLDcgKzY5NSw2IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03ODksNiArNzkzLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04NTQsNyArODU5LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC05NjQsNiArOTY4LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMDc5LDExICsxMDg0LDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTI1LDcgKzExMzAsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTExNDEsNiArMTE0NSw3IEBACiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTEyMDIsNiArMTIwNyw3IEBACiAjCiAjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTEyOTksNyArMTMwNSw2IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE0MDQsNiArMTQwOSw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTE0MTksNyArMTQyNSw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE0NTUsMTAgKzE0NjAsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE1MjcsNiArMTUzNCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU0Nyw3ICsxNTU1LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKaW5kZXggMWQ2MzYyOC4uOGE0MmJiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxODowNToxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOToxNTo1OCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTI2LDYgKzI2LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC00NiwxNSArNDcsMjQgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19HUk9VUF9TQ0hFRD15CiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNFUl9TQ0hFRD15CiAjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC02Miw2ICs3Miw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNzIsMTAgKzgzLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtODQsNiArOTMsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyNCwxMSArMTM0LDYgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNjUsNiArMTcwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE4MCw4ICsxODYsMTEgQEAKIENPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCi1DT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfMjlCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR19QTUJfRU5BQkxFPXkKICMgQ09ORklHX1BNQiBpcyBub3Qgc2V0CitDT05GSUdfUE1CX0ZJWEVEPXkKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKQEAgLTIxMywxMSArMjIyLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMzksNyArMjQ5LDYgQEAKICMKICMgQ09ORklHX1NIX0hJR0hMQU5ERVIgaXMgbm90IHNldAogQ09ORklHX1NIX1NINzc4NUxDUj15Ci1DT05GSUdfU0hfU0g3Nzg1TENSXzI5QklUX1BIWVNNQVBTPXkKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMzA3LDYgKzMxNiw4IEBACiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCkBAIC0zMjgsNyArMzM5LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzg4LDYgKzM5OCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtNDAwLDcgKzQxMSw2IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtNDA4LDYgKzQxOCw3IEBACiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MzAsNiArNDQxLDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDc3LDkgKzQ4OSw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNTAyLDYgKzUxMiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01NjUsNiArNTgwLDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTYzOSw2ICs2NTUsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTY2OCw2ICs2ODUsNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldApAQCAtNjc3LDcgKzY5NSwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC03NzIsNiArNzkzLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04MzQsMTIgKzg1Niw5IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTg3MSw2ICs4OTAsNyBAQAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwpAQCAtOTQ4LDYgKzk2OCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0MSw2ICsxMDYyLDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQpAQCAtMTA2MiwxOCArMTA4NCwxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTEwOSw3ICsxMTMwLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMTIxLDYgKzExNDEsMTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTExODIsNiArMTIwNyw3IEBACiAjCiAjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTEyMDQsNiArMTIzMCw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEyNTMsNiArMTI4MCw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTI3Nyw3ICsxMzA1LDYgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTM4Miw2ICsxNDA5LDcgQEAKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpAQCAtMTM5Nyw3ICsxNDI1LDYgQEAKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTQzMywxMCArMTQ2MCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTUwNSw2ICsxNTM0LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xNTI1LDcgKzE1NTUsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKaW5kZXggOGJhMTBlMS4uZDY5NWU5MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MDk6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MTk6MDMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTYsMTMgKzE2LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTM5LDE1ICs0MCwyNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC01NiwxMCArNjcsOCBAQAogQ09ORklHX1BSSU5USz15CiAjIENPTkZJR19CVUcgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNjcsNiArNzYsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKQEAgLTk3LDExICsxMDcsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMzYsNiArMTQxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTc3LDExICsxODMsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI2Nyw3ICsyNzQsNiBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtMjgxLDcgKzI4Nyw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQpAQCAtMzM1LDYgKzM0MCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzQ3LDEzICszNTMsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQxOSw5ICs0MjUsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGEwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4ODAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNDQyLDYgKzQ0NiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00NTYsOSArNDY1LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00NzIsNiArNDg1LDcgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC00ODQsOCArNDk4LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTAyLDcgKzUxOCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTU0OSw2ICs1NjgsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNjE4LDE1ICs2MzgsMjAgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC02NDEsNiArNjY2LDcgQEAKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtNjgzLDYgKzcwOSw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNzAyLDcgKzcyOSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTc0MCw3ICs3NjYsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CkBAIC04MzEsNiArODU2LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC04NTUsMyArODgxLDQgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKaW5kZXggZWQ5MGE3ZS4uZTM2NTFmNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE4OjEwOjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE5OjIwOjU0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE5LDcgKzE5LDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVD15CiBDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMjcsNiArMjcsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQ3LDI0ICs0OCwzNSBAQAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0FVRElUX1RSRUU9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfUkNVX1RSQUNFPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBTPXkKICMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX05TPXkKIENPTkZJR19DR1JPVVBfRlJFRVpFUj15CiBDT05GSUdfQ0dST1VQX0RFVklDRT15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15CiBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlM9eQotQ09ORklHX01NX09XTkVSPXkKIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSPXkKKyMgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTU1fT1dORVI9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1JFTEFZPXkKQEAgLTczLDI0ICs4NSwyMyBAQAogQ09ORklHX0lQQ19OUz15CiBDT05GSUdfVVNFUl9OUz15CiBDT05GSUdfUElEX05TPXkKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC05OCw2ICsxMDksNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CkBAIC0xNDIsMTIgKzE1NCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMTg0LDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NIWDM9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0yNDAsMTEgKzI0NywxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzYxLDggKzM2OSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOSVggaXMgbm90IHNldAogQ09ORklHX1hGUk09eQpAQCAtNDM0LDYgKzQ0MCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtNDQyLDYgKzQ0OSw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKIENPTkZJR19DQU49bQogQ09ORklHX0NBTl9SQVc9bQpAQCAtNDU1LDggKzQ2Myw4IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDkwLDEwICs0OTgsMTggQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MzksNiArNTU1LDcgQEAKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU0Nyw2ICs1NjQsNyBAQAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTYwLDggKzU3OCwxMCBAQAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTc4LDcgKzU5OCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC02NzAsMTIgKzY5Myw5IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTY5NSw3ICs3MTUsNiBAQAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC03MzIsNiArNzUxLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTc4OCw3ICs4MDgsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPW0KICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTgwMywxMSArODI1LDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CkBAIC04MzcsNyArODU5LDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC04NjAsMTAgKzg4MSwxMiBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CiBDT05GSUdfVVNCX002NjU5Mj15CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldApAQCAtODc2LDYgKzg5OSwxMSBAQAogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtOTQyLDYgKzk3MCw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogQ09ORklHX1VJTz1tCiAjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldApAQCAtOTY5LDYgKzk5OCw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEwMTIsNiArMTA0Miw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTA4Niw2ICsxMTE3LDcgQEAKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQpAQCAtMTEwNSw3ICsxMTM3LDcgQEAKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTEyMDUsNiArMTIzNyw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIyNiw3ICsxMjU5LDcgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKaW5kZXggOTgzNzdlNS4uNjk2MGY2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MTQ6MDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MjE6MzkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQxLDE4ICs0MiwzMiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02MiwxMCArNzcsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03NCw2ICs4Nyw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTA3LDExICsxMjEsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2LDYgKzE1NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE4NywxMSArMTk3LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMzksNiArMjUwLDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQorQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0yODgsNiArMzAwLDggQEAKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCkBAIC0zMDcsNyArMzIxLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VTklYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldApAQCAtMzUyLDYgKzM2NSw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY0LDEzICszNzgsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ2NCw2ICs0NzgsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTA5LDYgKzUyOCw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTI2LDggKzU0NiwxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNTcxLDcgKzU5MywxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNzExLDYgKzczNiw3IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC03MjgsNiArNzU0LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC03NzEsNiArNzk4LDcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04MjAsNyArODQ4LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC04NDksNyArODc2LDggQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwppbmRleCA3MjcwM2JmLi43ZWE2MzliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MTU6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MjM6MzEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTM4LDE4ICszOSwzMiBAQAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC01OSwxMCArNzQsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03MCw2ICs4Myw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEwOSwxMSArMTIzLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE0OCw2ICsxNTcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODksMTEgKzE5OSwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzE4LDkgKzMyOSwxMyBAQAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTM3Miw2ICszODcsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNDUyLDE1ICs0NjgsMjAgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC00NzUsNiArNDk2LDcgQEAKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTUxOCw2ICs1NDAsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC01NTgsNyArNTgxLDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC01ODcsNyArNjA5LDcgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwppbmRleCAwMWZjMWRlLi5iYmViNGM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxODoxNzoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOToyNDo1NSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDIsMTkgKzQzLDMzIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTY1LDEwICs4MCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc3LDYgKzkwLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTEgKzEzMCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTUsNiArMTY0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk2LDExICsyMDYsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI0OCw2ICsyNTksNyBAQAogIwogQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CitDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz04CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKQEAgLTI5OSw2ICszMTEsOCBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHX1BDST15CiAjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKQEAgLTMyMyw3ICszMzcsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtNDA2LDYgKzQxOSw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KQEAgLTQxOCw2ICs0MzIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQpAQCAtNDc1LDExICs0OTAsMTEgQEAKIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiAjIENPTkZJR19JUDZfTkZfTUFUQ0hfTUggaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KICMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTUwMCw2ICs1MTUsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15CiAKICMKQEAgLTU2NSw3ICs1ODEsNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldApAQCAtNTc0LDYgKzU4OSw3IEBACiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC01OTksNiArNjE1LDcgQEAKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTY3NSw2ICs2OTIsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNjk4LDEyICs3MjAsMTYgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTc2MCw2ICs3ODYsNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNzgxLDYgKzgwOCw3IEBACiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldApAQCAtNzk2LDYgKzgyNCw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19JRkIgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC04MzIsOCArODYxLDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC04ODgsNiArOTE5LDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTkwNiw2ICs5MzgsNyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTEzLDcgKzk0NiwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC0xMDI1LDYgKzEwNjEsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTIxMSw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CiBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTE5NSwxOCArMTIzMywxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTIzNSw3ICsxMjcyLDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CkBAIC0xMjU5LDE1ICsxMjk2LDE5IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQogIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSUNPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI4NCw3ICsxMzI1LDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMjk2LDYgKzEzMzYsMTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTEzMzcsNiArMTM4Miw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD1tCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMzYzLDYgKzE0MDksNyBAQAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0MTMsNiArMTQ2MCw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xNDM2LDcgKzE0ODQsNiBAQAogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQpAQCAtMTU1OSw2ICsxNjA2LDcgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkBAIC0xNTczLDcgKzE2MjEsNiBAQAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNjEwLDEwICsxNjU3LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE2ODMsNiArMTczMiw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTE3MDYsMTEgKzE3NTYsMTIgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX1RFWFRTRUFSQ0g9eQogQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKaW5kZXggMjdmOTY4YS4uMzRmNTE5MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxODoyMjo1MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOTozMDoyNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxNSArMTYsMTcgQEAKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLSMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQ0LDE5ICs0NiwzMyBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTY2LDEwICs4Miw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc4LDYgKzkyLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTgsMTEgKzEzMyw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMiw2ICsxNDIsNyBAQAogQ09ORklHX0NQVV9TSDRBPXkKIENPTkZJR19DUFVfU0g0QUxfRFNQPXkKIENPTkZJR19DUFVfU0hYMj15CitDT05GSUdfQVJDSF9TSE1PQklMRT15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CkBAIC0xNjAsNiArMTcxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMjEzLDExICsyMjUsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI0Myw2ICsyNTYsNyBAQAogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CisjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1RJQ0tfT05FU0hPVD15CkBAIC0zMTksNyArMzMzLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM3NCw2ICszODcsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4NiwxNSArNDAwLDE0IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkw4MDIxMT15CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPW0KKyMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15CiAKICMKQEAgLTQwOCw2ICs0MjEsNyBAQAogIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQzMCw2ICs0NDQsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTcsNiArNTEyLDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUxNCw5ICs1MzQsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU2Miw2ICs1ODYsNyBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNTcwLDYgKzU5NSw3IEBACiBDT05GSUdfUEFUQV9QTEFURk9STT15CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01ODIsOCArNjA4LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNjA1LDEyICs2MzMsMTMgQEAKIENPTkZJR19MSUJFUlRBU19TRElPPW0KIENPTkZJR19MSUJFUlRBU19ERUJVRz15CiAjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAogIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDMgaXMgbm90IHNldAogIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKQEAgLTYxOCw2ICs2NDcsMTAgQEAKICMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CiAKICMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC03OTQsNyArODI3LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiAjIENPTkZJR19TVVBFUkhfT05fQ0hJUF9SOEE2NjU5NyBpcyBub3Qgc2V0CkBAIC04MDksMTggKzg0NCwxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtODU2LDcgKzg5MCw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtODY2LDYgKzg5OSwxMSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKQEAgLTg4Nyw2ICs5MjUsNyBAQAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtOTA5LDYgKzk0OCw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk1Niw2ICs5OTYsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk3Niw3ICsxMDE3LDYgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA1OSw3ICsxMDk5LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMDg3LDEwICsxMTI2LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMTU5LDYgKzEyMDAsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODAsNyArMTIyMiw4IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKaW5kZXggYmU3MjZjNy4uZDE3NGIxYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKLSMgVGh1IE1hciAgNSAxNzoyODoxMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOTozMzozOSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTY5LDYgKzcwLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC03OCwxMCArODAsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC04OSw2ICs4OSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMywxMSArMjE0LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yMzEsNiArMjMzLDcgQEAKIENPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQogQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKIENPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUFFWD15CiBDT05GSUdfQ1BVX0hBU19GUFU9eQogCiAjCkBAIC0zMTgsNyArMzIxLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzc4LDYgKzM4MCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzkwLDcgKzM5Myw2IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtNDkxLDcgKzQ5Myw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTU1Myw2ICs1NTQsNyBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNTYxLDYgKzU2Myw3IEBACiAjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU5Miw4ICs1OTUsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNjEwLDcgKzYxNSw2IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03MDUsNiArNzA5LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTc0Niw3ICs3NTEsNiBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTg1NSw2ICs4NTksNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTkyMiw3ICs5MjcsNyBAQAogQ09ORklHX1pFUk9QTFVTX0ZGPW0KIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldApAQCAtOTQ3LDYgKzk1Miw4IEBACiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC05NjAsMTEgKzk2NywxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtMTAwNiw3ICsxMDEzLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMDIyLDEyICsxMDI4LDE0IEBACiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIwogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMTI1LDcgKzExMzMsNiBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMjA2LDcgKzEyMTMsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTEyMzQsMTAgKzEyNDAsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTEzMDYsNiArMTMxNCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyNiw3ICsxMzM1LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCBmMTNhMDUyLi42NjY3MTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0xMiwyMSArMTIsMjUgQEAKIGNvbmZpZyBTSF9ETUFfSVJRX01VTFRJCiAJYm9vbAogCWRlcGVuZHMgb24gU0hfRE1BCi0JZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc1MCB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgXAotCQlDUFVfU1VCVFlQRV9TSDc3NTBTIHx8IENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBcCi0JCUNQVV9TVUJUWVBFX1NINzA5MSB8fCBDUFVfU1VCVFlQRV9TSDc3NjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzY0IHx8IFwKLQkJQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQorCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgIHx8IENQVV9TVUJUWVBFX1NINzc1MSAgfHwgXAorCQkgICAgIENQVV9TVUJUWVBFX1NINzc1MFMgfHwgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBcCisJCSAgICAgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBDUFVfU1VCVFlQRV9TSDcwOTEgIHx8IFwKKwkJICAgICBDUFVfU1VCVFlQRV9TSDc3NjMgIHx8IENQVV9TVUJUWVBFX1NINzc2NCAgfHwgXAorCQkgICAgIENQVV9TVUJUWVBFX1NINzc4MCAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CiAKIGNvbmZpZyBOUl9PTkNISVBfRE1BX0NIQU5ORUxTCiAJaW50CiAJZGVwZW5kcyBvbiBTSF9ETUEKLQlkZWZhdWx0ICI0IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IENQVV9TVUJUWVBFX1NINzc1MFMKLQlkZWZhdWx0ICI4IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIgfHwgQ1BVX1NVQlRZUEVfU0g3NzYwCi0JZGVmYXVsdCAiMTIiIGlmIENQVV9TVUJUWVBFX1NINzcyMyB8fCBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CisJZGVmYXVsdCAiNCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwICB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgIHx8IFwKKwkJICAgICAgIENQVV9TVUJUWVBFX1NINzc1MFMgfHwgQ1BVX1NVQlRZUEVfU0g3MDkxCisJZGVmYXVsdCAiOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSIHx8IFwKKwkJICAgICAgIENQVV9TVUJUWVBFX1NINzc2MAorCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzgwICB8fCBcCisJCQlDUFVfU1VCVFlQRV9TSDc3ODUKIAlkZWZhdWx0ICI2IgogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhhdCB0aGUgb24tY2hpcAotCSAgRE1BQyBzdXBwb3J0cy4gVGhpcyB3aWxsIGJlIDQgZm9yIFNINzc1MC9TSDc3NTEgYW5kIDggZm9yIHRoZQorCSAgRE1BQyBzdXBwb3J0cy4gVGhpcyB3aWxsIGJlIDQgZm9yIFNINzA5MS9TSDc3NTAvU0g3NzUxIGFuZCA4IGZvciB0aGUKIAkgIFNINzc1MFIvU0g3NzUxUi4KIAogY29uZmlnIE5SX0RNQV9DSEFOTkVMU19CT09MCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDc3ODVsY3IuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNzc4NWxjci5jCmluZGV4IGIzYmQ2ODcuLmU4Yjc0NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNzc4NWxjci5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNzc4NWxjci5jCkBAIC00OCwxMyArNDgsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNoNF9wY2lfYWRkcmVzc19tYXAgc2g3Nzg1X3BjaV9tYXAgPSB7CiAJLndpbmRvdzAJPSB7Ci0JCS5iYXNlCT0gU0g3NzgwX0NTMl9CQVNFX0FERFIsCi0JCS5zaXplCT0gMHgwNDAwMDAwMCwKLQl9LAotCi0JLndpbmRvdzEJPSB7Ci0JCS5iYXNlCT0gU0g3NzgwX0NTM19CQVNFX0FERFIsCi0JCS5zaXplCT0gMHgwNDAwMDAwMCwKKwkJLmJhc2UJPSBTSDc3ODBfQ1MwX0JBU0VfQUREUiwKKwkJLnNpemUJPSAweDIwMDAwMDAwLAogCX0sCiAKIAkuZmxhZ3MJPSBTSDRfUENJQ19OT19SRVNFVCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKaW5kZXggNzczZDU3NS4uYmFlNmEyYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKQEAgLTEyMCwxOSArMTIwLDE1IEBACiAKIAkvKiBTZXQgSU8gYW5kIE1lbSB3aW5kb3dzIHRvIGxvY2FsIGFkZHJlc3MKIAkgKiBNYWtlIFBDSSBhbmQgbG9jYWwgYWRkcmVzcyB0aGUgc2FtZSBmb3IgZWFzeSAxIHRvIDEgbWFwcGluZwotCSAqIFdpbmRvdzAgPSBtYXAtPndpbmRvdzAuc2l6ZSBAIG5vbi1jYWNoZWQgYXJlYSBiYXNlID0gU0RSQU0KLQkgKiBXaW5kb3cxID0gbWFwLT53aW5kb3cxLnNpemUgQCBjYWNoZWQgYXJlYSBiYXNlID0gU0RSQU0KIAkgKi8KLQl3b3JkID0gKENPTkZJR19NRU1PUllfU0laRSAtIDB4MDAxMDAwMDApIHwgMHgwMDAwMDAwMTsKLQlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lMU1IwKTsKLQlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDEsIFNINF9QQ0lMU1IxKTsKKwlwY2lfd3JpdGVfcmVnKG1hcC0+d2luZG93MC5zaXplIC0gMHhmZmZmZiwgU0g0X1BDSUxTUjApOworCXBjaV93cml0ZV9yZWcobWFwLT53aW5kb3cxLnNpemUgLSAweGZmZmZmLCBTSDRfUENJTFNSMSk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDAgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQl3b3JkID0gQ09ORklHX01FTU9SWV9TVEFSVCB8IChDT05GSUdfTUVNT1JZX1NJWkUgLSAweDAxMDAwMDAwKTsKLQlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lMQVIwKTsKLQlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINzc4MF9QQ0lNQkFSMCk7CisJcGNpX3dyaXRlX3JlZyhtYXAtPndpbmRvdzAuYmFzZSwgU0g0X1BDSUxBUjApOworCXBjaV93cml0ZV9yZWcobWFwLT53aW5kb3cwLmJhc2UsIFNINzc4MF9QQ0lNQkFSMCk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDEgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDAsIFNINF9QQ0lMQVIxKTsKLQlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDAsIFNINzc4MF9QQ0lNQkFSMSk7CisJcGNpX3dyaXRlX3JlZyhtYXAtPndpbmRvdzEuYmFzZSwgU0g0X1BDSUxBUjEpOworCXBjaV93cml0ZV9yZWcobWFwLT53aW5kb3cxLmJhc2UsIFNINzc4MF9QQ0lNQkFSMSk7CiAKIAkvKiBNYXAgSU8gc3BhY2UgaW50byBQQ0kgSU8gd2luZG93CiAJICogVGhlIElPIHdpbmRvdyBpcyA2NEstUENJQklPU19NSU5fSU8gaW4gc2l6ZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggNmM0MzYyNS4uZjU5NjMwMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xLDIyICsxLDYgQEAKICNpZm5kZWYgX19NTVVfSAogI2RlZmluZSBfX01NVV9ICiAKLS8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3RbTlJfQ1BVU107Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSNpZmRlZiBDT05GSUdfTU1VCi0JbW1fY29udGV4dF9pZF90CQlpZDsKLQl2b2lkCQkJKnZkc287Ci0jZWxzZQotCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQklORk1UX0VMRl9GRFBJQwotCXVuc2lnbmVkIGxvbmcJCWV4ZWNfZmRwaWNfbG9hZG1hcDsKLQl1bnNpZ25lZCBsb25nCQlpbnRlcnBfZmRwaWNfbG9hZG1hcDsKLSNlbmRpZgotfSBtbV9jb250ZXh0X3Q7Ci0KIC8qCiAgKiBQcml2aWxlZ2VkIFNwYWNlIE1hcHBpbmcgQnVmZmVyIChQTUIpIGRlZmluaXRpb25zCiAgKi8KQEAgLTQxLDYgKzI1LDI0IEBACiAKICNkZWZpbmUgUE1CX05PX0VOVFJZCQkoLTEpCiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3RbTlJfQ1BVU107CisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZmRlZiBDT05GSUdfTU1VCisJbW1fY29udGV4dF9pZF90CQlpZDsKKwl2b2lkCQkJKnZkc287CisjZWxzZQorCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQklORk1UX0VMRl9GRFBJQworCXVuc2lnbmVkIGxvbmcJCWV4ZWNfZmRwaWNfbG9hZG1hcDsKKwl1bnNpZ25lZCBsb25nCQlpbnRlcnBfZmRwaWNfbG9hZG1hcDsKKyNlbmRpZgorfSBtbV9jb250ZXh0X3Q7CisKIHN0cnVjdCBwbWJfZW50cnk7CiAKIHN0cnVjdCBwbWJfZW50cnkgewpAQCAtNzAsNiArNzIsNyBAQAogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiB2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19NTVVfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCBlZmRkNzhhLi45YTg3MTQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTU4LDYgKzU4LDE0IEBACiAjZGVmaW5lIFNSX0ZECQkweDAwMDA4MDAwCiAKIC8qCisgKiBEU1Agc3RydWN0dXJlIGFuZCBkYXRhCisgKi8KK3N0cnVjdCBzaF9kc3Bfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGRzcF9yZWdzWzE0XTsKKwlsb25nIHN0YXR1czsKK307CisKKy8qCiAgKiBGUFUgc3RydWN0dXJlIGFuZCBkYXRhCiAgKi8KIApAQCAtOTYsNiArMTA0LDExIEBACiAKIAkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCiAJdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKworI2lmZGVmIENPTkZJR19TSF9EU1AKKwkvKiBEc3Agc3RhdHVzIGluZm9ybWF0aW9uICovCisJc3RydWN0IHNoX2RzcF9zdHJ1Y3QgZHNwX3N0YXR1czsKKyNlbmRpZgogfTsKIAogLyogQ291bnQgb2YgYWN0aXZlIHRhc2tzIHdpdGggVUJDIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA4MWM2NTY4Li5kM2Y2Y2FhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTExOSwxNiArMTE5LDggQEAKIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKLSNpZmRlZiBDT05GSUdfU0hfRFNQCi0jZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKSAtIDEpCi0jZGVmaW5lIHRhc2tfcHRfZHNwcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKLSNlbHNlCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGM5ZWM2YWYuLmE4ODg5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTUzLDYgKzE1Myw3IEBACiBleHRlcm4gc3RydWN0IGRlbnRyeSAqc2hfZGVidWdmc19yb290OwogCiB2b2lkIHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpOwordm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7CiAKIGFzbWxpbmthZ2Ugdm9pZCBicmVha19wb2ludF90cmFwKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCBhNzI2ZDVkLi4yNDBiMzFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTMsNTkgKzMsMTM1IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisjaWZkZWYgQ09ORklHX1NIX0RTUAorCisjZGVmaW5lIGlzX2RzcF9lbmFibGVkKHRzaykJCQkJCQlcCisJKCEhKHRzay0+dGhyZWFkLmRzcF9zdGF0dXMuc3RhdHVzICYgU1JfRFNQKSkKKworI2RlZmluZSBfX3Jlc3RvcmVfZHNwKHRzaykJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHUzMiAqX190czIgX19hc21fXyAoInIyIikgPQkJCQlcCisJCQkodTMyICopJnRzay0+dGhyZWFkLmRzcF9zdGF0dXM7CQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisJCSIuYmFsaWduIDRcblx0IgkJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCBhMVxuXHQiCQkJCQlcCisJCSJtb3ZzLmwJQHIyKywgYTBnXG5cdCIJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCBhMWdcblx0IgkJCQkJXAorCQkibW92cy5sCUByMissIG0wXG5cdCIJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCBtMVxuXHQiCQkJCQlcCisJCSJtb3ZzLmwJQHIyKywgYTBcblx0IgkJCQkJXAorCQkibW92cy5sCUByMissIHgwXG5cdCIJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCB4MVxuXHQiCQkJCQlcCisJCSJtb3ZzLmwJQHIyKywgeTBcblx0IgkJCQkJXAorCQkibW92cy5sCUByMissIHkxXG5cdCIJCQkJCVwKKwkJImxkcy5sCUByMissIGRzclxuXHQiCQkJCQlcCisJCSJsZGMubAlAcjIrLCByc1xuXHQiCQkJCQlcCisJCSJsZGMubAlAcjIrLCByZVxuXHQiCQkJCQlcCisJCSJsZGMubAlAcjIrLCBtb2Rcblx0IgkJCQkJXAorCQk6IDogInIiIChfX3RzMikpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIF9fc2F2ZV9kc3AodHNrKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHUzMiAqX190czIgX19hc21fXyAoInIyIikgPQkJCQlcCisJCQkodTMyICopJnRzay0+dGhyZWFkLmRzcF9zdGF0dXMgKyAxNDsJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorCQkiLmJhbGlnbiA0XG5cdCIJCQkJCQlcCisJCSJzdGMubAltb2QsIEAtcjJcblx0IgkJCQlcCisJCSJzdGMubAlyZSwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdGMubAlycywgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAlkc3IsIEAtcjJcblx0IgkJCQlcCisJCSJzdHMubAl5MSwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAl5MCwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAl4MSwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAl4MCwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAlhMCwgQC1yMlxuXHQiCQkJCQlcCisJCSIud29yZAkweGY2NTMJCSEgbW92cy5sCWExLCBALXIyXG5cdCIJXAorCQkiLndvcmQJMHhmNmYzCQkhIG1vdnMubAlhMGcsIEAtcjJcblx0IglcCisJCSIud29yZAkweGY2ZDMJCSEgbW92cy5sCWExZywgQC1yMlxuXHQiCVwKKwkJIi53b3JkCTB4ZjZjMwkJISBtb3ZzLmwgICAgICAgIG0wLCBALXIyXG5cdCIJXAorCQkiLndvcmQJMHhmNmUzCQkhIG1vdnMubCAgICAgICAgbTEsIEAtcjJcblx0IglcCisJCTogOiAiciIgKF9fdHMyKSk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIGlzX2RzcF9lbmFibGVkKHRzaykJKDApCisjZGVmaW5lIF9fc2F2ZV9kc3AodHNrKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3Jlc3RvcmVfZHNwKHRzaykJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CiAKIC8qCiAgKglzd2l0Y2hfdG8oKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgbnIgbiwgZmlyc3QKICAqLwotI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JcmVnaXN0ZXIgdTMyICpfX3RzMSBfX2FzbV9fICgicjEiKSA9ICh1MzIgKikmcHJldi0+dGhyZWFkLnNwOwlcCi0JcmVnaXN0ZXIgdTMyICpfX3RzMiBfX2FzbV9fICgicjIiKSA9ICh1MzIgKikmcHJldi0+dGhyZWFkLnBjOwlcCi0JcmVnaXN0ZXIgdTMyICpfX3RzNCBfX2FzbV9fICgicjQiKSA9ICh1MzIgKilwcmV2OwkJXAotCXJlZ2lzdGVyIHUzMiAqX190czUgX19hc21fXyAoInI1IikgPSAodTMyICopbmV4dDsJCVwKLQlyZWdpc3RlciB1MzIgKl9fdHM2IF9fYXNtX18gKCJyNiIpID0gKHUzMiAqKSZuZXh0LT50aHJlYWQuc3A7CVwKLQlyZWdpc3RlciB1MzIgX190czcgX19hc21fXyAoInI3IikgPSBuZXh0LT50aHJlYWQucGM7CQlcCi0Jc3RydWN0IHRhc2tfc3RydWN0ICpfX2xhc3Q7CQkJCQlcCi0JCQkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKLQkJIi5iYWxpZ24gNFxuXHQiCQkJCQkJXAotCQkic3RjLmwJZ2JyLCBALXIxNVxuXHQiCQkJCQlcCi0JCSJzdHMubAlwciwgQC1yMTVcblx0IgkJCQkJXAotCQkibW92LmwJcjgsIEAtcjE1XG5cdCIJCQkJCVwKLQkJIm1vdi5sCXI5LCBALXIxNVxuXHQiCQkJCQlcCi0JCSJtb3YubAlyMTAsIEAtcjE1XG5cdCIJCQkJCVwKLQkJIm1vdi5sCXIxMSwgQC1yMTVcblx0IgkJCQkJXAotCQkibW92LmwJcjEyLCBALXIxNVxuXHQiCQkJCQlcCi0JCSJtb3YubAlyMTMsIEAtcjE1XG5cdCIJCQkJCVwKLQkJIm1vdi5sCXIxNCwgQC1yMTVcblx0IgkJCQkJXAotCQkibW92LmwJcjE1LCBAcjFcdCEgc2F2ZSBTUFxuXHQiCQkJXAotCQkibW92LmwJQHI2LCByMTVcdCEgY2hhbmdlIHRvIG5ldyBzdGFja1xuXHQiCQlcCi0JCSJtb3ZhCTFmLCAlMFxuXHQiCQkJCQlcCi0JCSJtb3YubAklMCwgQHIyXHQhIHNhdmUgUENcblx0IgkJCQlcCi0JCSJtb3YubAkyZiwgJTBcblx0IgkJCQkJXAotCQkiam1wCUAlMFx0ISBjYWxsIF9fc3dpdGNoX3RvXG5cdCIJCQlcCi0JCSIgbGRzCXI3LCBwclx0ISAgd2l0aCByZXR1cm4gdG8gbmV3IFBDXG5cdCIJCVwKLQkJIi5iYWxpZ24JNFxuIgkJCQkJXAotCQkiMjpcblx0IgkJCQkJCVwKLQkJIi5sb25nCV9fc3dpdGNoX3RvXG4iCQkJCQlcCi0JCSIxOlxuXHQiCQkJCQkJXAotCQkibW92LmwJQHIxNSssIHIxNFxuXHQiCQkJCQlcCi0JCSJtb3YubAlAcjE1KywgcjEzXG5cdCIJCQkJCVwKLQkJIm1vdi5sCUByMTUrLCByMTJcblx0IgkJCQkJXAotCQkibW92LmwJQHIxNSssIHIxMVxuXHQiCQkJCQlcCi0JCSJtb3YubAlAcjE1KywgcjEwXG5cdCIJCQkJCVwKLQkJIm1vdi5sCUByMTUrLCByOVxuXHQiCQkJCQlcCi0JCSJtb3YubAlAcjE1Kywgcjhcblx0IgkJCQkJXAotCQkibGRzLmwJQHIxNSssIHByXG5cdCIJCQkJCVwKLQkJImxkYy5sCUByMTUrLCBnYnJcblx0IgkJCQkJXAotCQk6ICI9eiIgKF9fbGFzdCkJCQkJCQlcCi0JCTogInIiIChfX3RzMSksICJyIiAoX190czIpLCAiciIgKF9fdHM0KSwJCVwKLQkJICAiciIgKF9fdHM1KSwgInIiIChfX3RzNiksICJyIiAoX190czcpCQkJXAotCQk6ICJyMyIsICJ0Iik7CQkJCQkJXAotCQkJCQkJCQkJXAotCWxhc3QgPSBfX2xhc3Q7CQkJCQkJCVwKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHMxIF9fYXNtX18gKCJyMSIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHMyIF9fYXNtX18gKCJyMiIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHM0IF9fYXNtX18gKCJyNCIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHM1IF9fYXNtX18gKCJyNSIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHM2IF9fYXNtX18gKCJyNiIpOwkJCVwKKwlyZWdpc3RlciB1MzIgX190czcgX19hc21fXyAoInI3Iik7CQkJXAorCXN0cnVjdCB0YXNrX3N0cnVjdCAqX19sYXN0OwkJCQlcCisJCQkJCQkJCVwKKwlpZiAoaXNfZHNwX2VuYWJsZWQocHJldikpCQkJCVwKKwkJX19zYXZlX2RzcChwcmV2KTsJCQkJXAorCQkJCQkJCQlcCisJX190czEgPSAodTMyICopJnByZXYtPnRocmVhZC5zcDsJCQlcCisJX190czIgPSAodTMyICopJnByZXYtPnRocmVhZC5wYzsJCQlcCisJX190czQgPSAodTMyICopcHJldjsJCQkJCVwKKwlfX3RzNSA9ICh1MzIgKiluZXh0OwkJCQkJXAorCV9fdHM2ID0gKHUzMiAqKSZuZXh0LT50aHJlYWQuc3A7CQkJXAorCV9fdHM3ID0gbmV4dC0+dGhyZWFkLnBjOwkJCQlcCisJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCisJCSIuYmFsaWduIDRcblx0IgkJCQkJXAorCQkic3RjLmwJZ2JyLCBALXIxNVxuXHQiCQkJCVwKKwkJInN0cy5sCXByLCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXI4LCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXI5LCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXIxMCwgQC1yMTVcblx0IgkJCQlcCisJCSJtb3YubAlyMTEsIEAtcjE1XG5cdCIJCQkJXAorCQkibW92LmwJcjEyLCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXIxMywgQC1yMTVcblx0IgkJCQlcCisJCSJtb3YubAlyMTQsIEAtcjE1XG5cdCIJCQkJXAorCQkibW92LmwJcjE1LCBAcjFcdCEgc2F2ZSBTUFxuXHQiCQlcCisJCSJtb3YubAlAcjYsIHIxNVx0ISBjaGFuZ2UgdG8gbmV3IHN0YWNrXG5cdCIJXAorCQkibW92YQkxZiwgJTBcblx0IgkJCQlcCisJCSJtb3YubAklMCwgQHIyXHQhIHNhdmUgUENcblx0IgkJCVwKKwkJIm1vdi5sCTJmLCAlMFxuXHQiCQkJCVwKKwkJImptcAlAJTBcdCEgY2FsbCBfX3N3aXRjaF90b1xuXHQiCQlcCisJCSIgbGRzCXI3LCBwclx0ISAgd2l0aCByZXR1cm4gdG8gbmV3IFBDXG5cdCIJXAorCQkiLmJhbGlnbgk0XG4iCQkJCVwKKwkJIjI6XG5cdCIJCQkJCVwKKwkJIi5sb25nCV9fc3dpdGNoX3RvXG4iCQkJCVwKKwkJIjE6XG5cdCIJCQkJCVwKKwkJIm1vdi5sCUByMTUrLCByMTRcblx0IgkJCQlcCisJCSJtb3YubAlAcjE1KywgcjEzXG5cdCIJCQkJXAorCQkibW92LmwJQHIxNSssIHIxMlxuXHQiCQkJCVwKKwkJIm1vdi5sCUByMTUrLCByMTFcblx0IgkJCQlcCisJCSJtb3YubAlAcjE1KywgcjEwXG5cdCIJCQkJXAorCQkibW92LmwJQHIxNSssIHI5XG5cdCIJCQkJXAorCQkibW92LmwJQHIxNSssIHI4XG5cdCIJCQkJXAorCQkibGRzLmwJQHIxNSssIHByXG5cdCIJCQkJXAorCQkibGRjLmwJQHIxNSssIGdiclxuXHQiCQkJCVwKKwkJOiAiPXoiIChfX2xhc3QpCQkJCQlcCisJCTogInIiIChfX3RzMSksICJyIiAoX190czIpLCAiciIgKF9fdHM0KSwJXAorCQkgICJyIiAoX190czUpLCAiciIgKF9fdHM2KSwgInIiIChfX3RzNykJCVwKKwkJOiAicjMiLCAidCIpOwkJCQkJXAorCQkJCQkJCQlcCisJbGFzdCA9IF9fbGFzdDsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKGlzX2RzcF9lbmFibGVkKHByZXYpKQkJCQlcCisJCV9fcmVzdG9yZV9kc3AocHJldik7CQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oCmluZGV4IDQ4Njg4YWQuLjk3Nzg2MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKQEAgLTUxLDE0MiArNTEsODYgQEAKIAlHUElPX1BKNywgR1BJT19QSjYsIEdQSU9fUEo1LCBHUElPX1BKNCwKIAlHUElPX1BKMywgR1BJT19QSjIsIEdQSU9fUEoxLCBHUElPX1BKMCwKIAotCUdQSU9fRk5fQ0RFLAotCUdQSU9fRk5fRVRIX01BR0lDLAotCUdQSU9fRk5fRElTUCwKLQlHUElPX0ZOX0VUSF9MSU5LLAotCUdQSU9fRk5fRFI1LAotCUdQSU9fRk5fRVRIX1RYX0VSLAotCUdQSU9fRk5fRFI0LAotCUdQSU9fRk5fRVRIX1RYX0VOLAotCUdQSU9fRk5fRFIzLAotCUdQSU9fRk5fRVRIX1RYRDMsCi0JR1BJT19GTl9EUjIsCi0JR1BJT19GTl9FVEhfVFhEMiwKLQlHUElPX0ZOX0RSMSwKLQlHUElPX0ZOX0VUSF9UWEQxLAotCUdQSU9fRk5fRFIwLAotCUdQSU9fRk5fRVRIX1RYRDAsCi0JR1BJT19GTl9WU1lOQywKLQlHUElPX0ZOX0hTUElfQ0xLLAotCUdQSU9fRk5fT0RERiwKLQlHUElPX0ZOX0hTUElfQ1MsCi0JR1BJT19GTl9ERzUsCi0JR1BJT19GTl9FVEhfTURJTywKLQlHUElPX0ZOX0RHNCwKLQlHUElPX0ZOX0VUSF9SWF9DTEssCi0JR1BJT19GTl9ERzMsCi0JR1BJT19GTl9FVEhfTURDLAotCUdQSU9fRk5fREcyLAotCUdQSU9fRk5fRVRIX0NPTCwKLQlHUElPX0ZOX0RHMSwKLQlHUElPX0ZOX0VUSF9UWF9DTEssCi0JR1BJT19GTl9ERzAsCi0JR1BJT19GTl9FVEhfQ1JTLAotCUdQSU9fRk5fRENMS0lOLAotCUdQSU9fRk5fSFNQSV9SWCwKLQlHUElPX0ZOX0hTWU5DLAotCUdQSU9fRk5fSFNQSV9UWCwKLQlHUElPX0ZOX0RCNSwKLQlHUElPX0ZOX0VUSF9SWEQzLAotCUdQSU9fRk5fREI0LAotCUdQSU9fRk5fRVRIX1JYRDIsCi0JR1BJT19GTl9EQjMsCi0JR1BJT19GTl9FVEhfUlhEMSwKLQlHUElPX0ZOX0RCMiwKLQlHUElPX0ZOX0VUSF9SWEQwLAotCUdQSU9fRk5fREIxLAotCUdQSU9fRk5fRVRIX1JYX0RWLAotCUdQSU9fRk5fREIwLAotCUdQSU9fRk5fRVRIX1JYX0VSLAotCUdQSU9fRk5fRENMS09VVCwKLQlHUElPX0ZOX1NDSUYxX1NMSywKLQlHUElPX0ZOX1NDSUYxX1JYRCwKLQlHUElPX0ZOX1NDSUYxX1RYRCwKLQlHUElPX0ZOX0RBQ0sxLAotCUdQSU9fRk5fQkFDSywKLQlHUElPX0ZOX0ZBTEUsCi0JR1BJT19GTl9EQUNLMCwKLQlHUElPX0ZOX0ZDTEUsCi0JR1BJT19GTl9EUkVRMSwKLQlHUElPX0ZOX0JSRVEsCi0JR1BJT19GTl9VU0JfT1ZDMSwKLQlHUElPX0ZOX0RSRVEwLAotCUdQSU9fRk5fVVNCX09WQzAsCi0JR1BJT19GTl9VU0JfUEVOQzEsCi0JR1BJT19GTl9VU0JfUEVOQzAsCi0JR1BJT19GTl9IQUMxX1NET1VULAotCUdQSU9fRk5fU1NJMV9TREFUQSwKLQlHUElPX0ZOX1NESUYxQ01ELAotCUdQSU9fRk5fSEFDMV9TRElOLAotCUdQSU9fRk5fU1NJMV9TQ0ssCi0JR1BJT19GTl9TRElGMUNELAotCUdQSU9fRk5fSEFDMV9TWU5DLAotCUdQSU9fRk5fU1NJMV9XUywKLQlHUElPX0ZOX1NESUYxV1AsCi0JR1BJT19GTl9IQUMxX0JJVENMSywKLQlHUElPX0ZOX1NTSTFfQ0xLLAotCUdQSU9fRk5fU0RJRjFDTEssCi0JR1BJT19GTl9IQUMwX1NET1VULAotCUdQSU9fRk5fU1NJMF9TREFUQSwKLQlHUElPX0ZOX1NESUYxRDMsCi0JR1BJT19GTl9IQUMwX1NESU4sCi0JR1BJT19GTl9TU0kwX1NDSywKLQlHUElPX0ZOX1NESUYxRDIsCi0JR1BJT19GTl9IQUMwX1NZTkMsCi0JR1BJT19GTl9TU0kwX1dTLAotCUdQSU9fRk5fU0RJRjFEMSwKLQlHUElPX0ZOX0hBQzBfQklUQ0xLLAotCUdQSU9fRk5fU1NJMF9DTEssCi0JR1BJT19GTl9TRElGMUQwLAotCUdQSU9fRk5fU0NJRjNfU0NLLAotCUdQSU9fRk5fU1NJMl9TREFUQSwKLQlHUElPX0ZOX1NDSUYzX1JYRCwKLQlHUElPX0ZOX1RDTEssCi0JR1BJT19GTl9TU0kyX1NDSywKLQlHUElPX0ZOX1NDSUYzX1RYRCwKKwkvKiBEVSAqLworCUdQSU9fRk5fRENMS0lOLCBHUElPX0ZOX0RDTEtPVVQsIEdQSU9fRk5fT0RERiwKKwlHUElPX0ZOX1ZTWU5DLCBHUElPX0ZOX0hTWU5DLCBHUElPX0ZOX0NERSwgR1BJT19GTl9ESVNQLAorCUdQSU9fRk5fRFIwLCBHUElPX0ZOX0RHMCwgR1BJT19GTl9EQjAsCisJR1BJT19GTl9EUjEsIEdQSU9fRk5fREcxLCBHUElPX0ZOX0RCMSwKKwlHUElPX0ZOX0RSMiwgR1BJT19GTl9ERzIsIEdQSU9fRk5fREIyLAorCUdQSU9fRk5fRFIzLCBHUElPX0ZOX0RHMywgR1BJT19GTl9EQjMsCisJR1BJT19GTl9EUjQsIEdQSU9fRk5fREc0LCBHUElPX0ZOX0RCNCwKKwlHUElPX0ZOX0RSNSwgR1BJT19GTl9ERzUsIEdQSU9fRk5fREI1LAorCisJLyogRXRoICovCisJR1BJT19GTl9FVEhfTUFHSUMsIEdQSU9fRk5fRVRIX0xJTkssIEdQSU9fRk5fRVRIX1RYX0VSLAorCUdQSU9fRk5fRVRIX1RYX0VOLCBHUElPX0ZOX0VUSF9NRElPLCBHUElPX0ZOX0VUSF9SWF9DTEssCisJR1BJT19GTl9FVEhfTURDLCBHUElPX0ZOX0VUSF9DT0wsIEdQSU9fRk5fRVRIX1RYX0NMSywKKwlHUElPX0ZOX0VUSF9DUlMsIEdQSU9fRk5fRVRIX1JYX0RWLCBHUElPX0ZOX0VUSF9SWF9FUiwKKwlHUElPX0ZOX0VUSF9UWEQzLCBHUElPX0ZOX0VUSF9UWEQyLCBHUElPX0ZOX0VUSF9UWEQxLCBHUElPX0ZOX0VUSF9UWEQwLAorCUdQSU9fRk5fRVRIX1JYRDMsIEdQSU9fRk5fRVRIX1JYRDIsIEdQSU9fRk5fRVRIX1JYRDEsIEdQSU9fRk5fRVRIX1JYRDAsCisKKwkvKiBIU1BJICovCisJR1BJT19GTl9IU1BJX0NMSywgR1BJT19GTl9IU1BJX0NTLCBHUElPX0ZOX0hTUElfUlgsIEdQSU9fRk5fSFNQSV9UWCwKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9DVFMsIEdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX1NDSywKKwlHUElPX0ZOX1NDSUYwX1JYRCwgR1BJT19GTl9TQ0lGMF9UWEQsCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfU0NLLCBHUElPX0ZOX1NDSUYxX1JYRCwgR1BJT19GTl9TQ0lGMV9UWEQsCisKKwkvKiBTQ0lGMyAqLworCUdQSU9fRk5fU0NJRjNfU0NLLCBHUElPX0ZOX1NDSUYzX1JYRCwgR1BJT19GTl9TQ0lGM19UWEQsCisKKwkvKiBTQ0lGNCAqLworCUdQSU9fRk5fU0NJRjRfU0NLLCBHUElPX0ZOX1NDSUY0X1JYRCwgR1BJT19GTl9TQ0lGNF9UWEQsCisKKwkvKiBTQ0lGNSAqLworCUdQSU9fRk5fU0NJRjVfU0NLLCBHUElPX0ZOX1NDSUY1X1JYRCwgR1BJT19GTl9TQ0lGNV9UWEQsCisKKwkvKiBMQlNDICovCisJR1BJT19GTl9CUkVRLCBHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9DRTJCLCBHUElPX0ZOX0NFMkEsIEdQSU9fRk5fQkFDSywKKworCS8qIEZMQ1RMICovCisJR1BJT19GTl9GQUxFLCBHUElPX0ZOX0ZSQiwgR1BJT19GTl9GU1RBVFVTLAorCUdQSU9fRk5fRlNFLCBHUElPX0ZOX0ZDTEUsCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLMCwgR1BJT19GTl9EUkVRMCwgR1BJT19GTl9EUkFLMCwKKwlHUElPX0ZOX0RBQ0sxLCBHUElPX0ZOX0RSRVExLCBHUElPX0ZOX0RSQUsxLAorCUdQSU9fRk5fREFDSzIsIEdQSU9fRk5fRFJFUTIsIEdQSU9fRk5fRFJBSzIsCisJR1BJT19GTl9EQUNLMywgR1BJT19GTl9EUkVRMywgR1BJT19GTl9EUkFLMywKKworCS8qIFVTQiAqLworCUdQSU9fRk5fVVNCX09WQzAsIEdQSU9fRk5fVVNCX1BFTkMwLAorCUdQSU9fRk5fVVNCX09WQzEsIEdQSU9fRk5fVVNCX1BFTkMxLAorCisJLyogSEFDICovCiAJR1BJT19GTl9IQUNfUkVTLAotCUdQSU9fRk5fU1NJMl9XUywKLQlHUElPX0ZOX0RBQ0szLAotCUdQSU9fRk5fU0RJRjBDTUQsCi0JR1BJT19GTl9EQUNLMiwKLQlHUElPX0ZOX1NESUYwQ0QsCi0JR1BJT19GTl9EUkVRMywKLQlHUElPX0ZOX1NESUYwV1AsCi0JR1BJT19GTl9TQ0lGMF9DVFMsCi0JR1BJT19GTl9EUkVRMiwKLQlHUElPX0ZOX1NESUYwQ0xLLAotCUdQSU9fRk5fU0NJRjBfUlRTLAotCUdQSU9fRk5fSVJMNywKLQlHUElPX0ZOX1NESUYwRDMsCi0JR1BJT19GTl9TQ0lGMF9TQ0ssCi0JR1BJT19GTl9JUkw2LAotCUdQSU9fRk5fU0RJRjBEMiwKLQlHUElPX0ZOX1NDSUYwX1JYRCwKLQlHUElPX0ZOX0lSTDUsCi0JR1BJT19GTl9TRElGMEQxLAotCUdQSU9fRk5fU0NJRjBfVFhELAotCUdQSU9fRk5fSVJMNCwKLQlHUElPX0ZOX1NESUYwRDAsCi0JR1BJT19GTl9TQ0lGNV9TQ0ssCi0JR1BJT19GTl9GUkIsCi0JR1BJT19GTl9TQ0lGNV9SWEQsCi0JR1BJT19GTl9JT0lTMTYsCi0JR1BJT19GTl9TQ0lGNV9UWEQsCi0JR1BJT19GTl9DRTJCLAotCUdQSU9fRk5fRFJBSzMsCi0JR1BJT19GTl9DRTJBLAotCUdQSU9fRk5fU0NJRjRfU0NLLAotCUdQSU9fRk5fRFJBSzIsCi0JR1BJT19GTl9TU0kzX1dTLAotCUdQSU9fRk5fU0NJRjRfUlhELAotCUdQSU9fRk5fRFJBSzEsCi0JR1BJT19GTl9TU0kzX1NEQVRBLAotCUdQSU9fRk5fRlNUQVRVUywKLQlHUElPX0ZOX1NDSUY0X1RYRCwKLQlHUElPX0ZOX0RSQUswLAotCUdQSU9fRk5fU1NJM19TQ0ssCi0JR1BJT19GTl9GU0UsCisJR1BJT19GTl9IQUMwX1NET1VULCBHUElPX0ZOX0hBQzBfU0RJTiwKKwlHUElPX0ZOX0hBQzBfU1lOQywgR1BJT19GTl9IQUMwX0JJVENMSywKKwlHUElPX0ZOX0hBQzFfU0RPVVQsIEdQSU9fRk5fSEFDMV9TRElOLAorCUdQSU9fRk5fSEFDMV9TWU5DLCBHUElPX0ZOX0hBQzFfQklUQ0xLLAorCisJLyogU1NJICovCisJR1BJT19GTl9TU0kwX1NEQVRBLCBHUElPX0ZOX1NTSTBfU0NLLCBHUElPX0ZOX1NTSTBfV1MsIEdQSU9fRk5fU1NJMF9DTEssCisJR1BJT19GTl9TU0kxX1NEQVRBLCBHUElPX0ZOX1NTSTFfU0NLLCBHUElPX0ZOX1NTSTFfV1MsIEdQSU9fRk5fU1NJMV9DTEssCisJR1BJT19GTl9TU0kyX1NEQVRBLCBHUElPX0ZOX1NTSTJfU0NLLCBHUElPX0ZOX1NTSTJfV1MsCisJR1BJT19GTl9TU0kzX1NEQVRBLCBHUElPX0ZOX1NTSTNfU0NLLCBHUElPX0ZOX1NTSTNfV1MsCisKKwkvKiBTRElGMSAqLworCUdQSU9fRk5fU0RJRjFDTUQsIEdQSU9fRk5fU0RJRjFDRCwgR1BJT19GTl9TRElGMVdQLCBHUElPX0ZOX1NESUYxQ0xLLAorCUdQSU9fRk5fU0RJRjFEMywgR1BJT19GTl9TRElGMUQyLCBHUElPX0ZOX1NESUYxRDEsIEdQSU9fRk5fU0RJRjFEMCwKKworCS8qIFNESUYwICovCisJR1BJT19GTl9TRElGMENNRCwgR1BJT19GTl9TRElGMENELCBHUElPX0ZOX1NESUYwV1AsIEdQSU9fRk5fU0RJRjBDTEssCisJR1BJT19GTl9TRElGMEQzLCBHUElPX0ZOX1NESUYwRDIsIEdQSU9fRk5fU0RJRjBEMSwgR1BJT19GTl9TRElGMEQwLAorCisJLyogVE1VICovCisJR1BJT19GTl9UQ0xLLAorCisJLyogSU5UQyAqLworCUdQSU9fRk5fSVJMNywgR1BJT19GTl9JUkw2LCBHUElPX0ZOX0lSTDUsIEdQSU9fRk5fSVJMNCwKIH07CiAKICNlbmRpZiAvKiBfX0NQVV9TSDc3ODZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggNTVkYTBmZi4uM2NiNTMxZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMjU0LDQwICsyNTQsNiBAQAogCiAJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgogCSEKLSNpZmRlZiBDT05GSUdfU0hfRFNQCi0JbW92LmwJQHIxNSssIGswCQkhIERTUCBtb2RlIG1hcmtlcgotCW1vdi5sCTVmLCBrMQotCWNtcC9lcQlrMCwgazEJCQkhIERvIHdlIGhhdmUgYSBEU1Agc3RhY2sgZnJhbWU/Ci0JYmYJc2tpcF9yZXN0b3JlCi0KLQlzdGMJc3IsIGswCQkJISBFbmFibGUgQ1BVIERTUCBtb2RlCi0Jb3IJazEsIGswCQkJISAod2l0aGluIGtlcm5lbCBpdCBtYXkgYmUgZGlzYWJsZWQpCi0JbGRjCWswLCBzcgotCW1vdglyMiwgazAJCQkhIEJhY2t1cCByMgotCi0JISBSZXN0b3JlIERTUCByZWdpc3RlcnMgZnJvbSBzdGFjawotCW1vdglyMTUsIHIyCi0JbW92cy5sCUByMissIGExCi0JbW92cy5sCUByMissIGEwZwotCW1vdnMubAlAcjIrLCBhMWcKLQltb3ZzLmwJQHIyKywgbTAKLQltb3ZzLmwJQHIyKywgbTEKLQltb3YJcjIsIHIxNQotCi0JbGRzLmwJQHIxNSssIGEwCi0JbGRzLmwJQHIxNSssIHgwCi0JbGRzLmwJQHIxNSssIHgxCi0JbGRzLmwJQHIxNSssIHkwCi0JbGRzLmwJQHIxNSssIHkxCi0JbGRzLmwJQHIxNSssIGRzcgotCWxkYy5sCUByMTUrLCBycwotCWxkYy5sCUByMTUrLCByZQotCWxkYy5sCUByMTUrLCBtb2QKLQotCW1vdglrMCwgcjIJCQkhIFJlc3RvcmUgcjIKLXNraXBfcmVzdG9yZToKLSNlbmRpZgotCSEKIAkhIENhbGN1bGF0ZSBuZXcgU1IgdmFsdWUKIAltb3YJazMsIGsyCQkJISBvcmlnaW5hbCBTUiB2YWx1ZQogCW1vdgkjMHhmMCwgazEKQEAgLTM1OCw3ICszMjQsNyBAQAogCWFkZAlrMCwgazQKIDA6CiAJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKLQlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCWJzcglwcmVwYXJlX3N0YWNrCiAJIG5vcAogCiAJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKQEAgLTM3NCwxNSArMzQwLDE0IEBACiAxOgkubG9uZwlFWFBFVlQKICNlbmRpZgogCi0hIHByZXBhcmVfc3RhY2tfc2F2ZV9kc3AoKQorISBwcmVwYXJlX3N0YWNrKCkKICEgLSByb2xsIGJhY2sgZ1JCCiAhIC0gc3dpdGNoIHRvIGtlcm5lbCBzdGFjawotISAtIHNhdmUgRFNQCiAhIGswIHJldHVybnMgb3JpZ2luYWwgc3AgKGFmdGVyIHJvbGwgYmFjaykKICEgazEgdHJhc2hlZAogISBrMiB0cmFzaGVkCiAKLXByZXBhcmVfc3RhY2tfc2F2ZV9kc3A6CitwcmVwYXJlX3N0YWNrOgogI2lmZGVmIENPTkZJR19HVVNBCiAJISBDaGVjayBmb3Igcm9sbCBiYWNrIGdSQiAoVXNlciBhbmQgS2VybmVsKQogCW1vdglyMTUsIGswCkBAIC00MTYsNDcgKzM4MSw5IEBACiAJbW92CWsxLCByMTUJCSEgY2hhbmdlIHRvIGtlcm5lbCBzdGFjawogCSEKIDE6Ci0jaWZkZWYgQ09ORklHX1NIX0RTUAotCSEgU2F2ZSBEU1AgY29udGV4dCBpZiBuZWVkZWQKLQlzdGMJc3IsIGsxCi0JbW92CSMweDEwLCBrMgotCXNobGw4ICAgazIJCQkhIERTUD0xICgweDAwMDAxMDAwKQotCXRzdAlrMiwgazEJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlIChwYXNzZWQgaW4gazIpCi0JYnQvcwlza2lwX3NhdmUKLQkgbW92CSMwLCBrMQkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKLQotCW1vdglrMiwgazEJCQkhIFNhdmUgaGFzLWZyYW1lIG1hcmtlcgotCi0JISBTYXZlIERTUCByZWdpc3RlcnMgb24gc3RhY2sKLQlzdGMubAltb2QsIEAtcjE1Ci0Jc3RjLmwJcmUsIEAtcjE1Ci0Jc3RjLmwJcnMsIEAtcjE1Ci0Jc3RzLmwJZHNyLCBALXIxNQotCXN0cy5sCXkxLCBALXIxNQotCXN0cy5sCXkwLCBALXIxNQotCXN0cy5sCXgxLCBALXIxNQotCXN0cy5sCXgwLCBALXIxNQotCXN0cy5sCWEwLCBALXIxNQotCi0JISBHQVMgaXMgYnJva2VuLCBkb2VzIG5vdCBnZW5lcmF0ZSBjb3JyZWN0ICJtb3ZzLmwgRHMsQC1BcyIgaW5zdHIuCi0KLQkhIEZJWE1FOiBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHN0aWxsIHRoZSBjYXNlIHdpdGggbmV3ZXIgdG9vbGNoYWlucywKLQkhIGFzIHdlJ3JlIG5vdCBhdCBhbGwgaW50ZXJlc3RlZCBpbiBzdXBwb3J0aW5nIGFuY2llbnQgdG9vbGNoYWlucyBhdAotCSEgdGhpcyBwb2ludC4gLS0gUEZNLgotCi0JbW92CXIxNSwgazIKLQkud29yZAkweGY2NTMJCQkhIG1vdnMubAlhMSwgQC1yMgotCS53b3JkCTB4ZjZmMwkJCSEgbW92cy5sCWEwZywgQC1yMgotCS53b3JkCTB4ZjZkMwkJCSEgbW92cy5sCWExZywgQC1yMgotCS53b3JkCTB4ZjZjMwkJCSEgbW92cy5sCW0wLCBALXIyCi0JLndvcmQJMHhmNmUzCQkJISBtb3ZzLmwJbTEsIEAtcjIKLQltb3YJazIsIHIxNQotCi1za2lwX3NhdmU6Ci0JbW92LmwJazEsIEAtcjE1CQkhIFB1c2ggRFNQIG1vZGUgbWFya2VyIG9udG8gc3RhY2sKLSNlbmRpZgogCXJ0cwogCSBub3AKKwogIQogISAweDQwMDogSW5zdHJ1Y3Rpb24gYW5kIERhdGEgVExCIG1pc3MgZXhjZXB0aW9uIHZlY3RvcgogIQpAQCAtNDY4LDcgKzM5NSw3IEBACiAJbW92YQlleGNlcHRpb25fZGF0YSwgazAKIAogCSEgU2V0dXAgc3RhY2sgYW5kIHNhdmUgRFNQIGNvbnRleHQgKGswIGNvbnRhaW5zIG9yaWdpbmFsIHIxNSBvbiByZXR1cm4pCi0JYnNyCXByZXBhcmVfc3RhY2tfc2F2ZV9kc3AKKwlic3IJcHJlcGFyZV9zdGFjawogCSBQUkVGKGswKQogCiAJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKQEAgLTU3Miw3ICs0OTksNyBAQAogCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCiAKIAkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQotCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJYnNyCXByZXBhcmVfc3RhY2sKIAkgUFJFRihrMCkKIAogCSEgU2F2ZSByZWdpc3RlcnMgLyBTd2l0Y2ggdG8gYmFuayAwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggM2QzYTNjNC4uOTFlMzY3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTk5LDExICsxOTksNiBAQAogCQlicmVhazsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU0hfRElSRUNUX01BUFBFRAotCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSAxOwotCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSAxOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBCiAJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwppbmRleCAzNzNiMzQ0Li40MjI5ZTA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jCkBAIC0xNDksMTUwICsxNDksNDQgQEAKIAlQSU5NVVhfRlVOQ1RJT05fRU5ELAogCiAJUElOTVVYX01BUktfQkVHSU4sCi0JQ0RFX01BUkssCi0JRVRIX01BR0lDX01BUkssCi0JRElTUF9NQVJLLAotCUVUSF9MSU5LX01BUkssCi0JRFI1X01BUkssCi0JRVRIX1RYX0VSX01BUkssCi0JRFI0X01BUkssCi0JRVRIX1RYX0VOX01BUkssCi0JRFIzX01BUkssCi0JRVRIX1RYRDNfTUFSSywKLQlEUjJfTUFSSywKLQlFVEhfVFhEMl9NQVJLLAotCURSMV9NQVJLLAotCUVUSF9UWEQxX01BUkssCi0JRFIwX01BUkssCi0JRVRIX1RYRDBfTUFSSywKLQotCVZTWU5DX01BUkssCi0JSFNQSV9DTEtfTUFSSywKLQlPRERGX01BUkssCi0JSFNQSV9DU19NQVJLLAotCURHNV9NQVJLLAotCUVUSF9NRElPX01BUkssCi0JREc0X01BUkssCi0JRVRIX1JYX0NMS19NQVJLLAotCURHM19NQVJLLAotCUVUSF9NRENfTUFSSywKLQlERzJfTUFSSywKLQlFVEhfQ09MX01BUkssCi0JREcxX01BUkssCi0JRVRIX1RYX0NMS19NQVJLLAotCURHMF9NQVJLLAotCUVUSF9DUlNfTUFSSywKLQotCURDTEtJTl9NQVJLLAotCUhTUElfUlhfTUFSSywKLQlIU1lOQ19NQVJLLAotCUhTUElfVFhfTUFSSywKLQlEQjVfTUFSSywKLQlFVEhfUlhEM19NQVJLLAotCURCNF9NQVJLLAotCUVUSF9SWEQyX01BUkssCi0JREIzX01BUkssCi0JRVRIX1JYRDFfTUFSSywKLQlEQjJfTUFSSywKLQlFVEhfUlhEMF9NQVJLLAotCURCMV9NQVJLLAotCUVUSF9SWF9EVl9NQVJLLAotCURCMF9NQVJLLAotCUVUSF9SWF9FUl9NQVJLLAotCi0JRENMS09VVF9NQVJLLAotCVNDSUYxX1NMS19NQVJLLAotCVNDSUYxX1JYRF9NQVJLLAotCVNDSUYxX1RYRF9NQVJLLAotCURBQ0sxX01BUkssCi0JQkFDS19NQVJLLAotCUZBTEVfTUFSSywKLQlEQUNLMF9NQVJLLAotCUZDTEVfTUFSSywKLQlEUkVRMV9NQVJLLAotCUJSRVFfTUFSSywKLQlVU0JfT1ZDMV9NQVJLLAotCURSRVEwX01BUkssCi0JVVNCX09WQzBfTUFSSywKLQotCVVTQl9QRU5DMV9NQVJLLAotCVVTQl9QRU5DMF9NQVJLLAotCi0JSEFDMV9TRE9VVF9NQVJLLAotCVNTSTFfU0RBVEFfTUFSSywKLQlTRElGMUNNRF9NQVJLLAotCUhBQzFfU0RJTl9NQVJLLAotCVNTSTFfU0NLX01BUkssCi0JU0RJRjFDRF9NQVJLLAotCUhBQzFfU1lOQ19NQVJLLAotCVNTSTFfV1NfTUFSSywKLQlTRElGMVdQX01BUkssCi0JSEFDMV9CSVRDTEtfTUFSSywKLQlTU0kxX0NMS19NQVJLLAotCVNESUYxQ0xLX01BUkssCi0JSEFDMF9TRE9VVF9NQVJLLAotCVNTSTBfU0RBVEFfTUFSSywKLQlTRElGMUQzX01BUkssCi0JSEFDMF9TRElOX01BUkssCi0JU1NJMF9TQ0tfTUFSSywKLQlTRElGMUQyX01BUkssCi0JSEFDMF9TWU5DX01BUkssCi0JU1NJMF9XU19NQVJLLAotCVNESUYxRDFfTUFSSywKLQlIQUMwX0JJVENMS19NQVJLLAotCVNTSTBfQ0xLX01BUkssCi0JU0RJRjFEMF9NQVJLLAotCi0JU0NJRjNfU0NLX01BUkssCi0JU1NJMl9TREFUQV9NQVJLLAotCVNDSUYzX1JYRF9NQVJLLAotCVRDTEtfTUFSSywKLQlTU0kyX1NDS19NQVJLLAotCVNDSUYzX1RYRF9NQVJLLAorCURDTEtJTl9NQVJLLCBEQ0xLT1VUX01BUkssIE9EREZfTUFSSywKKwlWU1lOQ19NQVJLLCBIU1lOQ19NQVJLLCBDREVfTUFSSywgRElTUF9NQVJLLAorCURSMF9NQVJLLCBEUjFfTUFSSywgRFIyX01BUkssIERSM19NQVJLLCBEUjRfTUFSSywgRFI1X01BUkssCisJREcwX01BUkssIERHMV9NQVJLLCBERzJfTUFSSywgREczX01BUkssIERHNF9NQVJLLCBERzVfTUFSSywKKwlEQjBfTUFSSywgREIxX01BUkssIERCMl9NQVJLLCBEQjNfTUFSSywgREI0X01BUkssIERCNV9NQVJLLAorCUVUSF9NQUdJQ19NQVJLLCBFVEhfTElOS19NQVJLLCBFVEhfVFhfRVJfTUFSSywgRVRIX1RYX0VOX01BUkssCisJRVRIX01ESU9fTUFSSywgRVRIX1JYX0NMS19NQVJLLCBFVEhfTURDX01BUkssIEVUSF9DT0xfTUFSSywKKwlFVEhfVFhfQ0xLX01BUkssIEVUSF9DUlNfTUFSSywgRVRIX1JYX0RWX01BUkssIEVUSF9SWF9FUl9NQVJLLAorCUVUSF9UWEQzX01BUkssIEVUSF9UWEQyX01BUkssIEVUSF9UWEQxX01BUkssIEVUSF9UWEQwX01BUkssCisJRVRIX1JYRDNfTUFSSywgRVRIX1JYRDJfTUFSSywgRVRIX1JYRDFfTUFSSywgRVRIX1JYRDBfTUFSSywKKwlIU1BJX0NMS19NQVJLLCBIU1BJX0NTX01BUkssIEhTUElfUlhfTUFSSywgSFNQSV9UWF9NQVJLLAorCVNDSUYwX0NUU19NQVJLLCBTQ0lGMF9SVFNfTUFSSywKKwlTQ0lGMF9TQ0tfTUFSSywgU0NJRjBfUlhEX01BUkssIFNDSUYwX1RYRF9NQVJLLAorCVNDSUYxX1NDS19NQVJLLCBTQ0lGMV9SWERfTUFSSywgU0NJRjFfVFhEX01BUkssCisJU0NJRjNfU0NLX01BUkssIFNDSUYzX1JYRF9NQVJLLCBTQ0lGM19UWERfTUFSSywKKwlTQ0lGNF9TQ0tfTUFSSywgU0NJRjRfUlhEX01BUkssIFNDSUY0X1RYRF9NQVJLLAorCVNDSUY1X1NDS19NQVJLLCBTQ0lGNV9SWERfTUFSSywgU0NJRjVfVFhEX01BUkssCisJQlJFUV9NQVJLLCBJT0lTMTZfTUFSSywgQ0UyQl9NQVJLLCBDRTJBX01BUkssIEJBQ0tfTUFSSywKKwlGQUxFX01BUkssIEZSQl9NQVJLLCBGU1RBVFVTX01BUkssCisJRlNFX01BUkssIEZDTEVfTUFSSywKKwlEQUNLMF9NQVJLLCBEQUNLMV9NQVJLLCBEQUNLMl9NQVJLLCBEQUNLM19NQVJLLAorCURSRVEwX01BUkssIERSRVExX01BUkssIERSRVEyX01BUkssIERSRVEzX01BUkssCisJRFJBSzBfTUFSSywgRFJBSzFfTUFSSywgRFJBSzJfTUFSSywgRFJBSzNfTUFSSywKKwlVU0JfT1ZDMV9NQVJLLCBVU0JfT1ZDMF9NQVJLLAorCVVTQl9QRU5DMV9NQVJLLCBVU0JfUEVOQzBfTUFSSywKIAlIQUNfUkVTX01BUkssCi0JU1NJMl9XU19NQVJLLAotCi0JREFDSzNfTUFSSywKLQlTRElGMENNRF9NQVJLLAotCURBQ0syX01BUkssCi0JU0RJRjBDRF9NQVJLLAotCURSRVEzX01BUkssCi0JU0RJRjBXUF9NQVJLLAotCVNDSUYwX0NUU19NQVJLLAotCURSRVEyX01BUkssCi0JU0RJRjBDTEtfTUFSSywKLQlTQ0lGMF9SVFNfTUFSSywKLQlJUkw3X01BUkssCi0JU0RJRjBEM19NQVJLLAotCVNDSUYwX1NDS19NQVJLLAotCUlSTDZfTUFSSywKLQlTRElGMEQyX01BUkssCi0JU0NJRjBfUlhEX01BUkssCi0JSVJMNV9NQVJLLAotCVNESUYwRDFfTUFSSywKLQlTQ0lGMF9UWERfTUFSSywKLQlJUkw0X01BUkssCi0JU0RJRjBEMF9NQVJLLAotCi0JU0NJRjVfU0NLX01BUkssCi0JRlJCX01BUkssCi0JU0NJRjVfUlhEX01BUkssCi0JSU9JUzE2X01BUkssCi0JU0NJRjVfVFhEX01BUkssCi0JQ0UyQl9NQVJLLAotCURSQUszX01BUkssCi0JQ0UyQV9NQVJLLAotCVNDSUY0X1NDS19NQVJLLAotCURSQUsyX01BUkssCi0JU1NJM19XU19NQVJLLAotCVNDSUY0X1JYRF9NQVJLLAotCURSQUsxX01BUkssCi0JU1NJM19TREFUQV9NQVJLLAotCUZTVEFUVVNfTUFSSywKLQlTQ0lGNF9UWERfTUFSSywKLQlEUkFLMF9NQVJLLAotCVNTSTNfU0NLX01BUkssCi0JRlNFX01BUkssCisJSEFDMV9TRE9VVF9NQVJLLCBIQUMxX1NESU5fTUFSSywgSEFDMV9TWU5DX01BUkssIEhBQzFfQklUQ0xLX01BUkssCisJSEFDMF9TRE9VVF9NQVJLLCBIQUMwX1NESU5fTUFSSywgSEFDMF9TWU5DX01BUkssIEhBQzBfQklUQ0xLX01BUkssCisJU1NJMF9TREFUQV9NQVJLLCBTU0kwX1NDS19NQVJLLCBTU0kwX1dTX01BUkssIFNTSTBfQ0xLX01BUkssCisJU1NJMV9TREFUQV9NQVJLLCBTU0kxX1NDS19NQVJLLCBTU0kxX1dTX01BUkssIFNTSTFfQ0xLX01BUkssCisJU1NJMl9TREFUQV9NQVJLLCBTU0kyX1NDS19NQVJLLCBTU0kyX1dTX01BUkssCisJU1NJM19TREFUQV9NQVJLLCBTU0kzX1NDS19NQVJLLCBTU0kzX1dTX01BUkssCisJU0RJRjFDTURfTUFSSywgU0RJRjFDRF9NQVJLLCBTRElGMVdQX01BUkssIFNESUYxQ0xLX01BUkssCisJU0RJRjFEM19NQVJLLCBTRElGMUQyX01BUkssIFNESUYxRDFfTUFSSywgU0RJRjFEMF9NQVJLLAorCVNESUYwQ01EX01BUkssIFNESUYwQ0RfTUFSSywgU0RJRjBXUF9NQVJLLCBTRElGMENMS19NQVJLLAorCVNESUYwRDNfTUFSSywgU0RJRjBEMl9NQVJLLCBTRElGMEQxX01BUkssIFNESUYwRDBfTUFSSywKKwlUQ0xLX01BUkssCisJSVJMN19NQVJLLCBJUkw2X01BUkssIElSTDVfTUFSSywgSVJMNF9NQVJLLAogCVBJTk1VWF9NQVJLX0VORCwKIH07CiAKQEAgLTM3Nyw3ICsyNzEsNiBAQAogCVBJTk1VWF9EQVRBKFBKMV9EQVRBLCBQSjFfSU4sIFBKMV9PVVQsIFBKMV9JTl9QVSksCiAKIAkvKiBQQSBGTiAqLwotCVBJTk1VWF9NQVJLX0JFR0lOLAogCVBJTk1VWF9EQVRBKENERV9NQVJLLAkJUDFNU0VMMl8wLCBQQTdfRk4pLAogCVBJTk1VWF9EQVRBKERJU1BfTUFSSywJCVAxTVNFTDJfMCwgUEE2X0ZOKSwKIAlQSU5NVVhfREFUQShEUjVfTUFSSywJCVAxTVNFTDJfMCwgUEE1X0ZOKSwKQEAgLTQzNCw3ICszMjcsNyBAQAogCiAJLyogUEQgRk4gKi8KIAlQSU5NVVhfREFUQShEQ0xLT1VUX01BUkssCVBEN19GTiksCi0JUElOTVVYX0RBVEEoU0NJRjFfU0xLX01BUkssCVBENl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0NLX01BUkssCVBENl9GTiksCiAJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssCVBENV9GTiksCiAJUElOTVVYX0RBVEEoU0NJRjFfVFhEX01BUkssCVBENF9GTiksCiAJUElOTVVYX0RBVEEoREFDSzFfTUFSSywJCVAxTVNFTDEzXzEsIFAxTVNFTDEyXzAsIFBEM19GTiksCkBAIC02NjIsNyArNTU1LDcgQEAKIAlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMCwJCURCMF9NQVJLKSwKIAlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9FUiwJCUVUSF9SWF9FUl9NQVJLKSwKIAlQSU5NVVhfR1BJTyhHUElPX0ZOX0RDTEtPVVQsCQlEQ0xLT1VUX01BUkspLAotCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfU0xLLAkJU0NJRjFfU0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfU0NLLAkJU0NJRjFfU0NLX01BUkspLAogCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlhELAkJU0NJRjFfUlhEX01BUkspLAogCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfVFhELAkJU0NJRjFfVFhEX01BUkspLAogCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzEsCQlEQUNLMV9NQVJLKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lkbGUuYyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwppbmRleCBmZTU5Y2NmLi5mMzVlZDAzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCkBAIC0zOCw3ICszOCw3IEBACiB9CiBfX3NldHVwKCJobHQiLCBobHRfc2V0dXApOwogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKK3ZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7CiAJaWYgKCFobHRfY291bnRlcikgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCmluZGV4IDM5Y2Q3ZjMuLmMyMjg1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzIsNiArMzMsMTUgQEAKICNlbmRpZgogc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFwcGVkX2xvY2spOwogCitzdGF0aWMgaW50IHRyYXBwZWRfaW9fZGlzYWJsZSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW50IF9faW5pdCB0cmFwcGVkX2lvX3NldHVwKGNoYXIgKl9fdW51c2VkKQoreworCXRyYXBwZWRfaW9fZGlzYWJsZSA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub2lvdHJhcCIsIHRyYXBwZWRfaW9fc2V0dXApOworCiBpbnQgcmVnaXN0ZXJfdHJhcHBlZF9pbyhzdHJ1Y3QgdHJhcHBlZF9pbyAqdGlvcCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTM5LDYgKzQ5LDkgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbVFJBUFBFRF9QQUdFU19NQVhdOwogCWludCBrLCBuOwogCisJaWYgKHVubGlrZWx5KHRyYXBwZWRfaW9fZGlzYWJsZSkpCisJCXJldHVybiAwOworCiAJLyogc3RydWN0dXJlIG11c3QgYmUgcGFnZSBhbGlnbmVkICovCiAJaWYgKCh1bnNpZ25lZCBsb25nKXRpb3AgJiAoUEFHRV9TSVpFIC0gMSkpCiAJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDY5NGJjMTUuLjZkOTQ3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTE3NiwxNCArMTc2LDI2IEBACiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVnczsKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKSB8fCBkZWZpbmVkKENPTkZJR19TSF9EU1ApCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwogCXAtPnRocmVhZC5mcHUgPSB0c2stPnRocmVhZC5mcHU7CiAJY29weV90b19zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aChwKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRFNQKQorCWlmIChpc19kc3BfZW5hYmxlZCh0c2spKSB7CisJCS8qIFdlIGNhbiB1c2UgdGhlIF9fc2F2ZV9kc3Agb3IganVzdCBjb3B5IHRoZSBzdHJ1Y3Q6CisJCSAqIF9fc2F2ZV9kc3AocCk7CisJCSAqIHAtPnRocmVhZC5kc3Bfc3RhdHVzLnN0YXR1cyB8PSBTUl9EU1AKKwkJICovCisJCXAtPnRocmVhZC5kc3Bfc3RhdHVzID0gdHNrLT50aHJlYWQuZHNwX3N0YXR1czsKKwl9CisjZW5kaWYKKwogCWNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyhwKTsKIAkqY2hpbGRyZWdzID0gKnJlZ3M7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKaW5kZXggMjljYTA5ZC4uZjdiMjJkZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKQEAgLTIwMCw3ICsyMDAsOCBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAogCQkgICAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCiB7Ci0JY29uc3Qgc3RydWN0IHB0X2RzcHJlZ3MgKnJlZ3MgPSB0YXNrX3B0X2RzcHJlZ3ModGFyZ2V0KTsKKwljb25zdCBzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9CisJCShzdHJ1Y3QgcHRfZHNwcmVncyAqKSZ0YXJnZXQtPnRocmVhZC5kc3Bfc3RhdHVzLmRzcF9yZWdzOwogCWludCByZXQ7CiAKIAlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCByZWdzLApAQCAtMjE3LDcgKzIxOCw4IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCSAgICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKIHsKLQlzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9IHRhc2tfcHRfZHNwcmVncyh0YXJnZXQpOworCXN0cnVjdCBwdF9kc3ByZWdzICpyZWdzID0KKwkJKHN0cnVjdCBwdF9kc3ByZWdzICopJnRhcmdldC0+dGhyZWFkLmRzcF9zdGF0dXMuZHNwX3JlZ3M7CiAJaW50IHJldDsKIAogCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDI0YzYwMjUuLjA0YTYwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMTAzLDEyICsxMDMsMTEgQEAKIAlzaXplID0gbWVtcGFyc2UocCwgJnApOwogCiAJaWYgKHNpemUgPiBfX01FTU9SWV9TSVpFKSB7Ci0JCXN0YXRpYyBjaGFyIG1zZ1tdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgorCQlwcmludGsoS0VSTl9FUlIKIAkJCSJVc2luZyBtZW09IHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIGtlcm5lbCBtZW1vcnkgIgogCQkJImlzIG5vdCBhbGxvd2VkLlxuIgogCQkJIiAgUmVjb21waWxlIHRoZSBrZXJuZWwgd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgIgotCQkJIkNPTkZJR19NRU1PUllfU0laRS5cbiI7Ci0JCXByaW50ayhtc2cpOworCQkJIkNPTkZJR19NRU1PUllfU0laRS5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDYwZGNmODcuLjMwY2E5YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtNjY0LDYgKzY2NCw4IEBACiAJaWYgKGlzX2RzcF9pbnN0KHJlZ3MpKSB7CiAJCS8qIEVuYWJsZSBEU1AgbW9kZSwgYW5kIHJlc3RhcnQgaW5zdHJ1Y3Rpb24uICovCiAJCXJlZ3MtPnNyIHw9IFNSX0RTUDsKKwkJLyogU2F2ZSBEU1AgbW9kZSAqLworCQl0c2stPnRocmVhZC5kc3Bfc3RhdHVzLnN0YXR1cyB8PSBTUl9EU1A7CiAJCXJldHVybjsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCAxMGMyNDM1Li5kNDA3OWNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0yNTEsMTggKzI1MSw2IEBACiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDUKIAlkZWZhdWx0IHkKIAotY29uZmlnIFNIX0RJUkVDVF9NQVBQRUQKLQlib29sICJVc2UgZGlyZWN0LW1hcHBlZCBjYWNoaW5nIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgY2FjaGVzIHRvIGJlIGRpcmVjdC1tYXBwZWQsCi0JICBldmVuIGlmIHRoZSBjYWNoZSBzdXBwb3J0cyBhIDIgb3IgNC13YXkgbW9kZS4gVGhpcyBpcyB1c2VmdWwgcHJpbWFyaWx5Ci0JICBmb3IgZGVidWdnaW5nIG9uIHBsYXRmb3JtcyB3aXRoIDIgYW5kIDQtd2F5IGNhY2hlcyAoU0g3NzUwUi9TSDc3NTFSLAotCSAgU0g0LTIwMiwgU0g0LTUwMSwgZXRjLikKLQotCSAgVHVybiB0aGlzIG9wdGlvbiBvZmYgZm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBoYXZlIGEgZGlyZWN0LW1hcHBlZAotCSAgY2FjaGUsIGFuZCB5b3UgaGF2ZSBubyBuZWVkIHRvIHJ1biB0aGUgY2FjaGVzIGluIHN1Y2ggYSBjb25maWd1cmF0aW9uLgotCiBjaG9pY2UKIAlwcm9tcHQgIkNhY2hlIG1vZGUiCiAJZGVmYXVsdCBDQUNIRV9XUklURUJBQ0sgaWYgQ1BVX1NIMkEgfHwgQ1BVX1NIMyB8fCBDUFVfU0g0IHx8IENQVV9TSDUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW16b25lLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tem9uZS5oCmluZGV4IGViZjU5ODYuLmU4YzY0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW16b25lLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXpvbmUuaApAQCAtMyw2ICszLDggQEAKIAogI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwogCiAjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobm9kZV9kYXRhW25pZF0pCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggNTY5NmNlYy4uNWIyMTk2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0zNCw2ICszNCw4IEBACiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKKwlzZWxlY3QgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSIGlmIERZTkFNSUNfRlRSQUNFCisJc2VsZWN0IEhBVkVfRlRSQUNFX1NZU0NBTExTCiAJc2VsZWN0IEhBVkVfS1ZNCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBiMzg5NGJmLi5lNTVkZmMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xMjYsNiArMTI2LDExIEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKTsKIGV4dGVybiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YTsKK3ZvaWQgc2V0X2tlcm5lbF90ZXh0X3J3KHZvaWQpOwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkgeyB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEFfVEVTVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1bWFzay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1bWFzay5oCmluZGV4IGE3ZjNjNzUuLjYxYzg1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdW1hc2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmgKQEAgLTMsOCArMyw2IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKIGV4dGVybiBjcHVtYXNrX3Zhcl90IGNwdV9pbml0aWFsaXplZF9tYXNrOwpAQCAtMTIsMjEgKzEwLDUgQEAKIAogZXh0ZXJuIHZvaWQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpOwogCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLSNkZWZpbmUgY3B1X2NhbGxpbl9tYXNrCQkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9jYWxsaW5fbWFwKQotI2RlZmluZSBjcHVfY2FsbG91dF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxvdXRfbWFwKQotI2RlZmluZSBjcHVfaW5pdGlhbGl6ZWRfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9pbml0aWFsaXplZCkKLSNkZWZpbmUgY3B1X3NpYmxpbmdfc2V0dXBfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9zaWJsaW5nX3NldHVwX21hcCkKLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2NwdV9sb2NhbF9tYXNrcyh2b2lkKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9BU01fWDg2X0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA2M2E3OWM3Li44MTkzN2E1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMTExLDYgKzExMSw4IEBACiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAJRklYX1BBUkFWSVJUX0JPT1RNQVAsCiAjZW5kaWYKKwlGSVhfVEVYVF9QT0tFMCwJLyogcmVzZXJ2ZSAyIHBhZ2VzIGZvciB0ZXh0X3Bva2UoKSAqLworCUZJWF9URVhUX1BPS0UxLAogCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKIAlGSVhfT0hDSTEzOTRfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZGIyNGMyMi4uYmQyYzY1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAKICNlbmRpZgogCisvKiBGSVhNRTogSSBkb24ndCB3YW50IHRvIHN0YXkgaGFyZGNvZGVkICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorIyBkZWZpbmUgRlRSQUNFX1NZU0NBTExfTUFYICAgICAyOTYKKyNlbHNlCisjIGRlZmluZSBGVFJBQ0VfU1lTQ0FMTF9NQVggICAgIDMzMworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiAjZGVmaW5lIE1DT1VOVF9BRERSCQkoKGxvbmcpKG1jb3VudCkpCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUJNSAvKiBzaXplb2YgbWNvdW50IGNhbGwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggZTU0NWVhMC4uYjUxYTFlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTE0MCwxMSArMTQwLDYgQEAKIAlyZXR1cm4gc2QtPm5vZGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IF9fcGNpYnVzX3RvX2NwdW1hc2soc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlyZXR1cm4gbm9kZV90b19jcHVtYXNrKF9fcGNpYnVzX3RvX25vZGUoYnVzKSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKgogY3B1bWFza19vZl9wY2lidXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYWU4NWE4ZC4uMzRjNTIzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTk0LDcgKzk0LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlsb29wc19wZXJfamlmZnk7CiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGNwdXMgc2hhcmluZyB0aGUgbGFzdCBsZXZlbCBjYWNoZTogKi8KLQljcHVtYXNrX3QJCWxsY19zaGFyZWRfbWFwOworCWNwdW1hc2tfdmFyX3QJCWxsY19zaGFyZWRfbWFwOwogI2VuZGlmCiAJLyogY3B1aWQgcmV0dXJuZWQgbWF4IGNvcmVzIHZhbHVlOiAqLwogCXUxNgkJCSB4ODZfbWF4X2NvcmVzOwpAQCAtNzM2LDYgKzczNiw3IEBACiBleHRlcm4gdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBlYXgsIHVuc2lnbmVkIGxvbmcgZWN4KTsKIAogZXh0ZXJuIHZvaWQgc2VsZWN0X2lkbGVfcm91dGluZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworZXh0ZXJuIHZvaWQgaW5pdF9jMWVfbWFzayh2b2lkKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGU7CiBleHRlcm4gdW5zaWduZWQgbG9uZwkJaWRsZV9oYWx0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oCmluZGV4IDhlMGY4ZDEuLjg2NzIzMDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UtYWJpLmgKQEAgLTgwLDggKzgwLDYgQEAKIAogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMzMJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCi0jaWZkZWYgQ09ORklHX1g4Nl9QVFJBQ0VfQlRTCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApAQCAtMTQwLDYgKzEzOCw1IEBACiAgICBCVFMgcmVjb3JkcyBhcmUgcmVhZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCiAgICBSZXR1cm5zIG51bWJlciBvZiBCVFMgcmVjb3JkcyBkcmFpbmVkLgogKi8KLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BUUkFDRV9CVFMgKi8KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BUUkFDRV9BQklfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA0N2QwZTIxLi4xOWUwZDg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjEsMTkgKzIxLDE5IEBACiBleHRlcm4gaW50IHNtcF9udW1fc2libGluZ3M7CiBleHRlcm4gdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwogCi1ERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOwotREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X2NvcmVfbWFwKTsKK0RFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBjcHVfc2libGluZ19tYXApOworREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGNwdV9jb3JlX21hcCk7CiBERUNMQVJFX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKTsKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9udW1iZXIpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVtYXNrICpjcHVfc2libGluZ19tYXNrKGludCBjcHUpCiB7Ci0JcmV0dXJuICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KTsKKwlyZXR1cm4gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNwdW1hc2sgKmNwdV9jb3JlX21hc2soaW50IGNwdSkKIHsKLQlyZXR1cm4gJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpOworCXJldHVybiBwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KTsKIH0KIAogREVDTEFSRV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2NwdV90b19hcGljaWQpOwpAQCAtMTIxLDkgKzEyMSwxMCBAQAogCXNtcF9vcHMuc2VuZF9jYWxsX2Z1bmNfc2luZ2xlX2lwaShjcHUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKQorI2RlZmluZSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzaworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCXNtcF9vcHMuc2VuZF9jYWxsX2Z1bmNfaXBpKCZtYXNrKTsKKwlzbXBfb3BzLnNlbmRfY2FsbF9mdW5jX2lwaShtYXNrKTsKIH0KIAogdm9pZCBjcHVfZGlzYWJsZV9jb21tb24odm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBkZjlkNWY3Li44ODIwYTczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk0LDYgKzk0LDcgQEAKICNkZWZpbmUgVElGX0ZPUkNFRF9URgkJMjQJLyogdHJ1ZSBpZiBURiBpbiBlZmxhZ3MgYXJ0aWZpY2lhbGx5ICovCiAjZGVmaW5lIFRJRl9ERUJVR0NUTE1TUgkJMjUJLyogdXNlcyB0aHJlYWRfc3RydWN0LmRlYnVnY3RsbXNyICovCiAjZGVmaW5lIFRJRl9EU19BUkVBX01TUgkJMjYgICAgICAvKiB1c2VzIHRocmVhZF9zdHJ1Y3QuZHNfYXJlYV9tc3IgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfRlRSQUNFCTI3CS8qIGZvciBmdHJhY2Ugc3lzY2FsbCBpbnN0cnVtZW50YXRpb24gKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTExNSwxNSArMTE2LDE3IEBACiAjZGVmaW5lIF9USUZfRk9SQ0VEX1RGCQkoMSA8PCBUSUZfRk9SQ0VEX1RGKQogI2RlZmluZSBfVElGX0RFQlVHQ1RMTVNSCSgxIDw8IFRJRl9ERUJVR0NUTE1TUikKICNkZWZpbmUgX1RJRl9EU19BUkVBX01TUgkoMSA8PCBUSUZfRFNfQVJFQV9NU1IpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9GVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfRlRSQUNFKQogCiAvKiB3b3JrIHRvIGRvIGluIHN5c2NhbGxfdHJhY2VfZW50ZXIoKSAqLwogI2RlZmluZSBfVElGX1dPUktfU1lTQ0FMTF9FTlRSWQlcCi0JKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9FTVUgfCBcCisJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9FTVUgfCBfVElGX1NZU0NBTExfRlRSQUNFIHwJXAogCSBfVElGX1NZU0NBTExfQVVESVQgfCBfVElGX1NFQ0NPTVAgfCBfVElGX1NJTkdMRVNURVApCiAKIC8qIHdvcmsgdG8gZG8gaW4gc3lzY2FsbF90cmFjZV9sZWF2ZSgpICovCiAjZGVmaW5lIF9USUZfV09SS19TWVNDQUxMX0VYSVQJXAotCShfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQgfCBfVElGX1NJTkdMRVNURVApCisJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0lOR0xFU1RFUCB8CVwKKwkgX1RJRl9TWVNDQUxMX0ZUUkFDRSkKIAogLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJCQkJCQlcCkBAIC0xMzIsNyArMTM1LDcgQEAKIAkgICBfVElGX1NJTkdMRVNURVB8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9FTVUpKQogCiAvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdXNlciBzcGFjZSAqLwotI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSyAoMHgwMDAwRkZGRiAmIH5fVElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLICgoMHgwMDAwRkZGRiAmIH5fVElGX1NFQ0NPTVApIHwgX1RJRl9TWVNDQUxMX0ZUUkFDRSkKIAogLyogT25seSB1c2VkIGZvciA2NCBiaXQgKi8KICNkZWZpbmUgX1RJRl9ET19OT1RJRllfTUFTSwkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDc0NDI5OWMuLjg5MmIxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNDQsOSArNDQsNiBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCi0vKiBNYXBwaW5ncyBiZXR3ZWVuIG5vZGUgbnVtYmVyIGFuZCBjcHVzIG9uIHRoYXQgbm9kZS4gKi8KLWV4dGVybiBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrX21hcFtdOwotCiAvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIgKi8KIGV4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW107CiAKQEAgLTU3LDMwICs1NCw4IEBACiB9CiAjZGVmaW5lIGVhcmx5X2NwdV90b19ub2RlKGNwdSkJY3B1X3RvX25vZGUoY3B1KQogCi0vKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgotICoKLSAqIFNpZGUgbm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSByZXR1cm5lZCBjcHVtYXNrIG9uIHRoZSBzdGFjawotICogc28gd2l0aCBhIGhpZ2ggTlJfQ1BVUyBjb3VudCwgZXhjZXNzaXZlIHN0YWNrIHNwYWNlIGlzIHVzZWQuICBUaGUKLSAqIGNwdW1hc2tfb2Zfbm9kZSBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZS4KLSAqLwotc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotCi0vKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLwotc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQotewotCXJldHVybiAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9Ci0KICNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KIAotLyogTWFwcGluZ3MgYmV0d2VlbiBub2RlIG51bWJlciBhbmQgY3B1cyBvbiB0aGF0IG5vZGUuICovCi1leHRlcm4gY3B1bWFza190ICpub2RlX3RvX2NwdW1hc2tfbWFwOwotCiAvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIgKi8KIERFQ0xBUkVfRUFSTFlfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXApOwogCkBAIC05MSw4ICs2Niw2IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwogZXh0ZXJuIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KTsKIGV4dGVybiBpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSk7Ci1leHRlcm4gY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpOwotZXh0ZXJuIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpOwogCiAjZWxzZQkvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwogCkBAIC0xMDgsNDIgKzgxLDMyIEBACiAJcmV0dXJuIGVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKIH0KIAotLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNwdW1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4gKi8KLXN0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JcmV0dXJuICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQorI2VuZGlmIC8qICFDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCiAKLS8qIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCi1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCisvKiBNYXBwaW5ncyBiZXR3ZWVuIG5vZGUgbnVtYmVyIGFuZCBjcHVzIG9uIHRoYXQgbm9kZS4gKi8KK2V4dGVybiBjcHVtYXNrX3Zhcl90IG5vZGVfdG9fY3B1bWFza19tYXBbTUFYX05VTU5PREVTXTsKKworI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKTsKKyNlbHNlCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3B1bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQogewogCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwogfQotCi0jZW5kaWYgLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KKyNlbmRpZgogCiBleHRlcm4gdm9pZCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpOwogCiAvKgotICogUmVwbGFjZSBkZWZhdWx0IG5vZGVfdG9fY3B1bWFza19wdHIgd2l0aCBvcHRpbWl6ZWQgdmVyc2lvbgotICogRGVwcmVjYXRlZDogdXNlICJjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKSIKLSAqLwotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCi0JCWNvbnN0IGNwdW1hc2tfdCAqdiA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKQotCi0jZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHJfbmV4dCh2LCBub2RlKQlcCi0JCQkgICB2ID0gY3B1bWFza19vZl9ub2RlKG5vZGUpCi0KLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KLS8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBOb2RlICdub2RlJy4gVGhpcwogICogYXJjaGl0ZWN0dXJlIGlzIGZsYXQsIHNvIGl0IGlzIGEgcHJldHR5IHNpbXBsZSBmdW5jdGlvbiEKICAqLwogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKSAobm9kZSkKIAogI2RlZmluZSBwY2lidXNfdG9fbm9kZShidXMpIF9fcGNpYnVzX3RvX25vZGUoYnVzKQotI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpIF9fcGNpYnVzX3RvX2NwdW1hc2soYnVzKQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm5bXTsKQEAgLTIwOSw0MCArMTcyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCiB7Ci0JcmV0dXJuICZjcHVfb25saW5lX21hcDsKLX0KLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXA7CisJcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CiAKLS8qCi0gKiBSZXBsYWNlIGRlZmF1bHQgbm9kZV90b19jcHVtYXNrX3B0ciB3aXRoIG9wdGltaXplZCB2ZXJzaW9uCi0gKiBEZXByZWNhdGVkOiB1c2UgImNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrID0gY3B1bWFza19vZl9ub2RlKG5vZGUpIgotICovCi0jZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHIodiwgbm9kZSkJCVwKLQkJY29uc3QgY3B1bWFza190ICp2ID0gY3B1bWFza19vZl9ub2RlKG5vZGUpCi0KLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHYsIG5vZGUpCVwKLQkJCSAgIHYgPSBjcHVtYXNrX29mX25vZGUobm9kZSkKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcChpbnQgY3B1KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKGludCBjcHUpOwogCiAjaWZkZWYgRU5BQkxFX1RPUE9fREVGSU5FUwogI2RlZmluZSB0b3BvbG9neV9waHlzaWNhbF9wYWNrYWdlX2lkKGNwdSkJKGNwdV9kYXRhKGNwdSkucGh5c19wcm9jX2lkKQogI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jcHVfY29yZV9pZCkKLSNkZWZpbmUgdG9wb2xvZ3lfY29yZV9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpCi0jZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCi0jZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpCQkoJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKQotI2RlZmluZSB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpCQkoJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKQorI2RlZmluZSB0b3BvbG9neV9jb3JlX2NwdW1hc2soY3B1KQkJKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKQorI2RlZmluZSB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpCQkocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCiAKIC8qIGluZGljYXRlcyB0aGF0IHBvaW50ZXJzIHRvIHRoZSB0b3BvbG9neSBjcHVtYXNrX3QgbWFwcyBhcmUgdmFsaWQgKi8KICNkZWZpbmUgYXJjaF9wcm92aWRlc190b3BvbG9neV9wb2ludGVycwkJeWVzCkBAIC0yNTYsNyArMjAzLDcgQEAKIHZvaWQgc2V0X3BjaV9idXNfcmVzb3VyY2VzX2FyY2hfZGVmYXVsdChzdHJ1Y3QgcGNpX2J1cyAqYik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIG1jX2NhcGFibGUoKQkoY3B1c193ZWlnaHQocGVyX2NwdShjcHVfY29yZV9tYXAsIDApKSAhPSBucl9jcHVfaWRzKQorI2RlZmluZSBtY19jYXBhYmxlKCkJKGNwdW1hc2tfd2VpZ2h0KGNwdV9jb3JlX21hc2soMCkpICE9IG5yX2NwdV9pZHMpCiAjZGVmaW5lIHNtdF9jYXBhYmxlKCkJCQkoc21wX251bV9zaWJsaW5ncyA+IDEpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGM2MTFhZDYuLjE0NWNjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTY2LDcgKzY2LDggQEAKIG9iai15CQkJCSs9IGFwaWMvCiBvYmotJChDT05GSUdfWDg2X1JFQk9PVEZJWFVQUykJKz0gcmVib290X2ZpeHVwc18zMi5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCi1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQkrPSBmdHJhY2Uubworb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjXyQoQklUUykubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gcmVsb2NhdGVfa2VybmVsXyQoQklUUykubyBjcmFzaC5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcF8kKEJJVFMpLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBhMThlYjdjLi43MjM5ODlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0yMzAsNiArMjMwLDM1IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0CithY3BpX3BhcnNlX3gyYXBpYyhzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfbWFkdF9sb2NhbF94MmFwaWMgKnByb2Nlc3NvciA9IE5VTEw7CisKKwlwcm9jZXNzb3IgPSAoc3RydWN0IGFjcGlfbWFkdF9sb2NhbF94MmFwaWMgKiloZWFkZXI7CisKKwlpZiAoQkFEX01BRFRfRU5UUlkocHJvY2Vzc29yLCBlbmQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjcGlfdGFibGVfcHJpbnRfbWFkdF9lbnRyeShoZWFkZXIpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKKwkvKgorCSAqIFdlIG5lZWQgdG8gcmVnaXN0ZXIgZGlzYWJsZWQgQ1BVIGFzIHdlbGwgdG8gcGVybWl0CisJICogY291bnRpbmcgZGlzYWJsZWQgQ1BVcy4gVGhpcyBhbGxvd3MgdXMgdG8gc2l6ZQorCSAqIGNwdXNfcG9zc2libGVfbWFwIG1vcmUgYWNjdXJhdGVseSwgdG8gcGVybWl0CisJICogdG8gbm90IHByZWFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbGwgTlJfQ1BVUworCSAqIHdoZW4gd2UgdXNlIENQVSBob3RwbHVnLgorCSAqLworCWFjcGlfcmVnaXN0ZXJfbGFwaWMocHJvY2Vzc29yLT5sb2NhbF9hcGljX2lkLAkvKiBBUElDIElEICovCisJCQkgICAgcHJvY2Vzc29yLT5sYXBpY19mbGFncyAmIEFDUElfTUFEVF9FTkFCTEVEKTsKKyNlbHNlCisJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIngyYXBpYyBlbnRyeSBpZ25vcmVkXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CiBhY3BpX3BhcnNlX2xhcGljKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqIGhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IGFjcGlfbWFkdF9sb2NhbF9hcGljICpwcm9jZXNzb3IgPSBOVUxMOwpAQCAtMjg5LDYgKzMxOCwyNSBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAorYWNwaV9wYXJzZV94MmFwaWNfbm1pKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKngyYXBpY19ubWkgPSBOVUxMOworCisJeDJhcGljX25taSA9IChzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKiloZWFkZXI7CisKKwlpZiAoQkFEX01BRFRfRU5UUlkoeDJhcGljX25taSwgZW5kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3BpX3RhYmxlX3ByaW50X21hZHRfZW50cnkoaGVhZGVyKTsKKworCWlmICh4MmFwaWNfbm1pLT5saW50ICE9IDEpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJOTUkgbm90IGNvbm5lY3RlZCB0byBMSU5UIDEhXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdAogYWNwaV9wYXJzZV9sYXBpY19ubWkoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICogaGVhZGVyLCBjb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX2FwaWNfbm1pICpsYXBpY19ubWkgPSBOVUxMOwpAQCAtNzkzLDYgKzg0MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX21hZHRfbGFwaWNfZW50cmllcyh2b2lkKQogewogCWludCBjb3VudDsKKwlpbnQgeDJjb3VudCA9IDA7CiAKIAlpZiAoIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC04MTYsMjIgKzg2NSwyOCBAQAogCWNvdW50ID0gYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX1NBUElDLAogCQkJCSAgICAgIGFjcGlfcGFyc2Vfc2FwaWMsIE1BWF9BUElDUyk7CiAKLQlpZiAoIWNvdW50KQorCWlmICghY291bnQpIHsKKwkJeDJjb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01BRFRfVFlQRV9MT0NBTF9YMkFQSUMsCisJCQkJCQlhY3BpX3BhcnNlX3gyYXBpYywgTUFYX0FQSUNTKTsKIAkJY291bnQgPSBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfTE9DQUxfQVBJQywKIAkJCQkJICAgICAgYWNwaV9wYXJzZV9sYXBpYywgTUFYX0FQSUNTKTsKLQlpZiAoIWNvdW50KSB7CisJfQorCWlmICghY291bnQgJiYgIXgyY291bnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiTm8gTEFQSUMgZW50cmllcyBwcmVzZW50XG4iKTsKIAkJLyogVEJEOiBDbGVhbnVwIHRvIGFsbG93IGZhbGxiYWNrIHRvIE1QUyAqLwogCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgaWYgKGNvdW50IDwgMCkgeworCX0gZWxzZSBpZiAoY291bnQgPCAwIHx8IHgyY291bnQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIHBhcnNpbmcgTEFQSUMgZW50cnlcbiIpOwogCQkvKiBUQkQ6IENsZWFudXAgdG8gYWxsb3cgZmFsbGJhY2sgdG8gTVBTICovCiAJCXJldHVybiBjb3VudDsKIAl9CiAKKwl4MmNvdW50ID0KKwkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX1gyQVBJQ19OTUksCisJCQkJICBhY3BpX3BhcnNlX3gyYXBpY19ubWksIDApOwogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUNfTk1JLCBhY3BpX3BhcnNlX2xhcGljX25taSwgMCk7Ci0JaWYgKGNvdW50IDwgMCkgeworCWlmIChjb3VudCA8IDAgfHwgeDJjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgcGFyc2luZyBMQVBJQyBOTUkgZW50cnlcbiIpOwogCQkvKiBUQkQ6IENsZWFudXAgdG8gYWxsb3cgZmFsbGJhY2sgdG8gTVBTICovCiAJCXJldHVybiBjb3VudDsKQEAgLTE0NzAsNyArMTUyNSw3IEBACiAKIC8qCiAgKiBJZiB5b3VyIHN5c3RlbSBpcyBibGFja2xpc3RlZCBoZXJlLCBidXQgeW91IGZpbmQgdGhhdCBhY3BpPWZvcmNlCi0gKiB3b3JrcyBmb3IgeW91LCBwbGVhc2UgY29udGFjdCBhY3BpLWRldmVsQHNvdXJjZWZvcmdlLm5ldAorICogd29ya3MgZm9yIHlvdSwgcGxlYXNlIGNvbnRhY3QgbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKICAqLwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgYWNwaV9kbWlfdGFibGVbXSA9IHsKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA0YzgwZjE1Li5mNTc2NTg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEyLDcgKzEzLDkgQEAKICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNkZWZpbmUgTUFYX1BBVENIX0xFTiAoMjU1LTEpCiAKQEAgLTIyNiw2ICsyMjksNyBAQAogewogCXU4ICoqcHRyOwogCisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJZm9yIChwdHIgPSBzdGFydDsgcHRyIDwgZW5kOyBwdHIrKykgewogCQlpZiAoKnB0ciA8IHRleHQpCiAJCQljb250aW51ZTsKQEAgLTIzNCw2ICsyMzgsNyBAQAogCQkvKiB0dXJuIERTIHNlZ21lbnQgb3ZlcnJpZGUgcHJlZml4IGludG8gbG9jayBwcmVmaXggKi8KIAkJdGV4dF9wb2tlKCpwdHIsICgodW5zaWduZWQgY2hhciBbXSl7MHhmMH0pLCAxKTsKIAl9OworCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsdGVybmF0aXZlc19zbXBfdW5sb2NrKHU4ICoqc3RhcnQsIHU4ICoqZW5kLCB1OCAqdGV4dCwgdTggKnRleHRfZW5kKQpAQCAtMjQzLDYgKzI0OCw3IEBACiAJaWYgKG5vcmVwbGFjZV9zbXApCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAocHRyID0gc3RhcnQ7IHB0ciA8IGVuZDsgcHRyKyspIHsKIAkJaWYgKCpwdHIgPCB0ZXh0KQogCQkJY29udGludWU7CkBAIC0yNTEsNiArMjU3LDcgQEAKIAkJLyogdHVybiBsb2NrIHByZWZpeCBpbnRvIERTIHNlZ21lbnQgb3ZlcnJpZGUgcHJlZml4ICovCiAJCXRleHRfcG9rZSgqcHRyLCAoKHVuc2lnbmVkIGNoYXIgW10pezB4M0V9KSwgMSk7CiAJfTsKKwltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOwogfQogCiBzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgewpAQCAtNTAwLDE1ICs1MDcsMTYgQEAKICAqIEl0IG1lYW5zIHRoZSBzaXplIG11c3QgYmUgd3JpdGFibGUgYXRvbWljYWxseSBhbmQgdGhlIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkCiAgKiBpbiBhIHdheSB0aGF0IHBlcm1pdHMgYW4gYXRvbWljIHdyaXRlLiBJdCBhbHNvIG1ha2VzIHN1cmUgd2UgZml0IG9uIGEgc2luZ2xlCiAgKiBwYWdlLgorICoKKyAqIE5vdGU6IE11c3QgYmUgY2FsbGVkIHVuZGVyIHRleHRfbXV0ZXguCiAgKi8KIHZvaWQgKl9fa3Byb2JlcyB0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqdmFkZHI7Ci0JaW50IG5yX3BhZ2VzID0gMjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbMl07CiAJaW50IGk7CiAKLQltaWdodF9zbGVlcCgpOwogCWlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkgewogCQlwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKIAkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciArIFBBR0VfU0laRSk7CkBAIC01MTgsMTggKzUyNiwyMSBAQAogCQlwYWdlc1sxXSA9IHZpcnRfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTsKIAl9CiAJQlVHX09OKCFwYWdlc1swXSk7Ci0JaWYgKCFwYWdlc1sxXSkKLQkJbnJfcGFnZXMgPSAxOwotCXZhZGRyID0gdm1hcChwYWdlcywgbnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpOwotCUJVR19PTighdmFkZHIpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNldF9maXhtYXAoRklYX1RFWFRfUE9LRTAsIHBhZ2VfdG9fcGh5cyhwYWdlc1swXSkpOworCWlmIChwYWdlc1sxXSkKKwkJc2V0X2ZpeG1hcChGSVhfVEVYVF9QT0tFMSwgcGFnZV90b19waHlzKHBhZ2VzWzFdKSk7CisJdmFkZHIgPSAoY2hhciAqKWZpeF90b192aXJ0KEZJWF9URVhUX1BPS0UwKTsKIAltZW1jcHkoJnZhZGRyWyh1bnNpZ25lZCBsb25nKWFkZHIgJiB+UEFHRV9NQVNLXSwgb3Bjb2RlLCBsZW4pOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQl2dW5tYXAodmFkZHIpOworCWNsZWFyX2ZpeG1hcChGSVhfVEVYVF9QT0tFMCk7CisJaWYgKHBhZ2VzWzFdKQorCQljbGVhcl9maXhtYXAoRklYX1RFWFRfUE9LRTEpOworCWxvY2FsX2ZsdXNoX3RsYigpOwogCXN5bmNfY29yZSgpOwogCS8qIENvdWxkIGFsc28gZG8gYSBDTEZMVVNIIGhlcmUgdG8gc3BlZWQgdXAgQ1BVIHJlY292ZXJ5OyBidXQKIAkgICB0aGF0IGNhdXNlcyBoYW5ncyBvbiBzb21lIFZJQSBDUFVzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKIAkJQlVHX09OKCgoY2hhciAqKWFkZHIpW2ldICE9ICgoY2hhciAqKW9wY29kZSlbaV0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKaW5kZXggZDgwNmVjYS4uNjc2Y2RhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKQEAgLTI2LDEyICsyNiwxMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgY29uc3QgY3B1bWFza190ICpiaWdzbXBfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYmlnc21wX3RhcmdldF9jcHVzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiAmY3B1X29ubGluZV9tYXA7CisJcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKICNlbHNlCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKICNlbmRpZgogfQogCkBAIC0xMTgsOSArMTE4LDkgQEAKIH0KIAogLyogQXMgd2UgYXJlIHVzaW5nIHNpbmdsZSBDUFUgYXMgZGVzdGluYXRpb24sIHBpY2sgb25seSBvbmUgQ1BVIGhlcmUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGJpZ3NtcF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCiB7Ci0JcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoZmlyc3RfY3B1KCpjcHVtYXNrKSk7CisJcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1bWFza19maXJzdChjcHVtYXNrKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCkBAIC0xODgsMTAgKzE4OCwxMCBAQAogCXsgfSAvKiBOVUxMIGVudHJ5IHN0b3BzIERNSSBzY2FubmluZyAqLwogfTsKIAotc3RhdGljIHZvaWQgYmlnc21wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCitzdGF0aWMgdm9pZCBiaWdzbXBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewotCWNwdXNfY2xlYXIoKnJldG1hc2spOwotCWNwdV9zZXQoY3B1LCAqcmV0bWFzayk7CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKIH0KIAogc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKaW5kZXggMTk1ODhmMi4uMWMxMWI4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCQlXQVJOKDEsICJDb21tYW5kIGZhaWxlZCwgc3RhdHVzID0gJXhcbiIsIG1pcF9zdGF0dXMpOwogfQogCi1zdGF0aWMgdm9pZCBlczcwMDBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3N0YXRpYyB2b2lkIGVzNzAwMF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCiB7CiAJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKIAkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdApAQCAtNDIwLDcgKzQyMCw4IEBACiAJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCiAJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KIAkgKi8KLQkqcmV0bWFzayA9IChjcHVtYXNrX3QpeyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfYml0cyhyZXRtYXNrKVswXSA9IEFQSUNfQUxMX0NQVVM7CiB9CiAKIApAQCAtNDU1LDE0ICs0NTYsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXNfY2x1c3Rlcih2b2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0YXJnZXRfY3B1c19jbHVzdGVyKHZvaWQpCiB7Ci0JcmV0dXJuICZDUFVfTUFTS19BTEw7CisJcmV0dXJuIGNwdV9hbGxfbWFzazsKIH0KIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqZXM3MDAwX3RhcmdldF9jcHVzKHZvaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmVzNzAwMF90YXJnZXRfY3B1cyh2b2lkKQogewotCXJldHVybiAmY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwpAQCAtNTE3LDcgKzUxOCw3IEBACiAJICAiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAogCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8KIAkJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLAotCQlucl9pb2FwaWNzLCBjcHVzX2FkZHIoKmVzNzAwMF90YXJnZXRfY3B1cygpKVswXSk7CisJCW5yX2lvYXBpY3MsIGNwdW1hc2tfYml0cyhlczcwMDBfdGFyZ2V0X2NwdXMoKSlbMF0pOwogfQogCiBzdGF0aWMgaW50IGVzNzAwMF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCkBAIC01NzIsNyArNTczLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgcm91bmQgPSAwOwogCWludCBjcHUsIHVuaW5pdGlhbGl6ZWRfdmFyKGFwaWNpZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCmluZGV4IGJkZmFkODAuLmQ2YmQ2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CiBpbnQgbm1pX3dhdGNoZG9nX2VuYWJsZWQ7CiAKLXN0YXRpYyBjcHVtYXNrX3QgYmFja3RyYWNlX21hc2sgPSBDUFVfTUFTS19OT05FOworc3RhdGljIGNwdW1hc2tfdmFyX3QgYmFja3RyYWNlX21hc2s7CiAKIC8qIG5taV9hY3RpdmU6CiAgKiA+MDogdGhlIGxhcGljIE5NSSB3YXRjaGRvZyBpcyBhY3RpdmUsIGJ1dCBjYW4gYmUgZGlzYWJsZWQKQEAgLTEzOCw2ICsxMzgsNyBAQAogCWlmICghcHJldl9ubWlfY291bnQpCiAJCWdvdG8gZXJyb3I7CiAKKwlhbGxvY19jcHVtYXNrX3ZhcigmYmFja3RyYWNlX21hc2ssIEdGUF9LRVJORUwpOwogCXByaW50ayhLRVJOX0lORk8gIlRlc3RpbmcgTk1JIHdhdGNoZG9nIC4uLiAiKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTQxMywxNCArNDE0LDE0IEBACiAJCXRvdWNoZWQgPSAxOwogCX0KIAotCWlmIChjcHVfaXNzZXQoY3B1LCBiYWNrdHJhY2VfbWFzaykpIHsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGJhY2t0cmFjZV9tYXNrKSkgewogCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwkvKiBTZXJpYWxpc2UgdGhlIHByaW50a3MgKi8KIAogCQlzcGluX2xvY2soJmxvY2spOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJOTUkgYmFja3RyYWNlIGZvciBjcHUgJWRcbiIsIGNwdSk7CiAJCWR1bXBfc3RhY2soKTsKIAkJc3Bpbl91bmxvY2soJmxvY2spOwotCQljcHVfY2xlYXIoY3B1LCBiYWNrdHJhY2VfbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgYmFja3RyYWNlX21hc2spOwogCX0KIAogCS8qIENvdWxkIGNoZWNrIG9vcHNfaW5fcHJvZ3Jlc3MgaGVyZSB0b28sIGJ1dCBpdCdzIHNhZmVyIG5vdCB0byAqLwpAQCAtNTU0LDEwICs1NTUsMTAgQEAKIHsKIAlpbnQgaTsKIAotCWJhY2t0cmFjZV9tYXNrID0gY3B1X29ubGluZV9tYXA7CisJY3B1bWFza19jb3B5KGJhY2t0cmFjZV9tYXNrLCBjcHVfb25saW5lX21hc2spOwogCS8qIFdhaXQgZm9yIHVwIHRvIDEwIHNlY29uZHMgZm9yIGFsbCBDUFVzIHRvIGRvIHRoZSBiYWNrdHJhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAgKiAxMDAwOyBpKyspIHsKLQkJaWYgKGNwdXNfZW1wdHkoYmFja3RyYWNlX21hc2spKQorCQlpZiAoY3B1bWFza19lbXB0eShiYWNrdHJhY2VfbWFzaykpCiAJCQlicmVhazsKIAkJbWRlbGF5KDEpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCmluZGV4IGJhMmZjNjQuLjUzM2U1OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwpAQCAtMzM0LDkgKzMzNCw5IEBACiAJY2xlYXJfbG9jYWxfQVBJQygpOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqbnVtYXFfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm51bWFxX3RhcmdldF9jcHVzKHZvaWQpCiB7Ci0JcmV0dXJuICZDUFVfTUFTS19BTEw7CisJcmV0dXJuIGNwdV9hbGxfbWFzazsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCkBAIC00MjcsNyArNDI3LDcgQEAKICAqIFdlIHVzZSBwaHlzaWNhbCBhcGljaWRzIGhlcmUsIG5vdCBsb2dpY2FsLCBzbyBqdXN0IHJldHVybiB0aGUgZGVmYXVsdAogICogcGh5c2ljYWwgYnJvYWRjYXN0IHRvIHN0b3AgcGVvcGxlIGZyb20gYnJlYWtpbmcgdXMKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQogewogCXJldHVybiAweDBGOwogfQpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIGZvdW5kX251bWFxOwogfQogCi1zdGF0aWMgdm9pZCBudW1hcV92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgY3B1bWFza190ICpyZXRtYXNrKQorc3RhdGljIHZvaWQgbnVtYXFfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewogCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCiAJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKQEAgLTQ3Miw3ICs0NzIsOCBAQAogCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQogCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCiAJICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwogfQogCiBzdGF0aWMgdm9pZCBudW1hcV9zZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCmluZGV4IDE0MWM5OWEuLjAxZWRhMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwpAQCAtODMsNyArODMsOCBAQAogCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQogCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCiAJICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUyB9IH07CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwogfQogCiAvKiBzaG91bGQgYmUgY2FsbGVkIGxhc3QuICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCmluZGV4IGFhYzUyZmEuLjljZmUxZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCkBAIC01MywyMyArNTMsMTkgQEAKIAlyZXR1cm4gKHggPj4gMjQpICYgMHhGRjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN1bW1pdF9zZW5kX0lQSV9tYXNrKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgaW50IHZlY3RvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW1taXRfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKIHsKIAlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfbG9naWNhbChtYXNrLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBzdW1taXRfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQogewotCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0KLQlpZiAoIWNwdXNfZW1wdHkobWFzaykpCi0JCXN1bW1pdF9zZW5kX0lQSV9tYXNrKCZtYXNrLCB2ZWN0b3IpOworCWRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX2xvZ2ljYWwoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBzdW1taXRfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCiB7Ci0Jc3VtbWl0X3NlbmRfSVBJX21hc2soJmNwdV9vbmxpbmVfbWFwLCB2ZWN0b3IpOworCXN1bW1pdF9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKIH0KIAogI2luY2x1ZGUgPGFzbS90c2MuaD4KQEAgLTE4NiwxMyArMTgyLDEzIEBACiAKICNkZWZpbmUgU1VNTUlUX0FQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQogCi1zdGF0aWMgY29uc3QgY3B1bWFza190ICpzdW1taXRfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqc3VtbWl0X3RhcmdldF9jcHVzKHZvaWQpCiB7CiAJLyogQ1BVX01BU0tfQUxMICgweGZmKSBoYXMgdW5kZWZpbmVkIGJlaGF2aW91ciB3aXRoCiAJICogZGVzdF9Mb3dlc3RQcmlvIG1vZGUgbG9naWNhbCBjbHVzdGVyZWQgYXBpYyBpbnRlcnJ1cHQgcm91dGluZwogCSAqIEp1c3Qgc3RhcnQgb24gY3B1IDAuICBJUlEgYmFsYW5jaW5nIHdpbGwgc3ByZWFkIGxvYWQKIAkgKi8KLQlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KDApOworCXJldHVybiBjcHVtYXNrX29mKDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW1taXRfY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCkBAIC0yODksNyArMjg1LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzdW1taXRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VtbWl0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgcm91bmQgPSAwOwogCWludCBjcHUsIGFwaWNpZCA9IDA7CkBAIC0zNDYsNyArMzQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3VtbWl0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCitzdGF0aWMgdm9pZCBzdW1taXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewogCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCiAJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKQEAgLTM1Niw3ICszNTIsOCBAQAogCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQogCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCiAJICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVRfTlVNQQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IGFjNzc4M2EuLjQ5ZTA5MzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogICoJQGVycjogQVBNIEJJT1MgcmV0dXJuIGNvZGUKICAqCiAgKglXcml0ZSBhIG1lYW5pbmdmdWwgbG9nIGVudHJ5IHRvIHRoZSBrZXJuZWwgbG9nIGluIHRoZSBldmVudCBvZgotICoJYW4gQVBNIGVycm9yLgorICoJYW4gQVBNIGVycm9yLiAgTm90ZSB0aGF0IHRoaXMgYWxzbyBoYW5kbGVzIChuZWdhdGl2ZSkga2VybmVsIGVycm9ycy4KICAqLwogCiBzdGF0aWMgdm9pZCBhcG1fZXJyb3IoY2hhciAqc3RyLCBpbnQgZXJyKQpAQCAtNDc4LDQzICs0NzgsMTQgQEAKIAkJCWJyZWFrOwogCWlmIChpIDwgRVJST1JfQ09VTlQpCiAJCXByaW50ayhLRVJOX05PVElDRSAiYXBtOiAlczogJXNcbiIsIHN0ciwgZXJyb3JfdGFibGVbaV0ubXNnKTsKKwllbHNlIGlmIChlcnIgPCAwKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgImFwbTogJXM6IGxpbnV4IGVycm9yIGNvZGUgJWlcbiIsIHN0ciwgZXJyKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX05PVElDRSAiYXBtOiAlczogdW5rbm93biBlcnJvciBjb2RlICUjMi4yeFxuIiwKIAkJICAgICAgIHN0ciwgZXJyKTsKIH0KIAogLyoKLSAqIExvY2sgQVBNIGZ1bmN0aW9uYWxpdHkgdG8gcGh5c2ljYWwgQ1BVIDAKLSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdGF0aWMgY3B1bWFza190IGFwbV9zYXZlX2NwdXModm9pZCkKLXsKLQljcHVtYXNrX3QgeCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQkvKiBTb21lIGJpb3NlcyBkb24ndCBsaWtlIGJlaW5nIGNhbGxlZCBmcm9tIENQVSAhPSAwICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSgwKSk7Ci0JQlVHX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKTsKLQlyZXR1cm4geDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFwbV9yZXN0b3JlX2NwdXMoY3B1bWFza190IG1hc2spCi17Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBtYXNrKTsKLX0KLQotI2Vsc2UKLQotLyoKLSAqCU5vIENQVSBsb2NrZG93biBuZWVkZWQgb24gYSB1bmlwcm9jZXNzb3IKLSAqLwotCi0jZGVmaW5lIGFwbV9zYXZlX2NwdXMoKQkJKGN1cnJlbnQtPmNwdXNfYWxsb3dlZCkKLSNkZWZpbmUgYXBtX3Jlc3RvcmVfY3B1cyh4KQkodm9pZCkoeCkKLQotI2VuZGlmCi0KLS8qCiAgKiBUaGVzZSBhcmUgdGhlIGFjdHVhbCBCSU9TIGNhbGxzLiAgRGVwZW5kaW5nIG9uIEFQTV9aRVJPX1NFR1MgYW5kCiAgKiBhcG1faW5mby5hbGxvd19pbnRzLCB3ZSBhcmUgYmVpbmcgcmVhbGx5IHBhcmFub2lkIGhlcmUhICBOb3Qgb25seQogICogYXJlIGludGVycnVwdHMgZGlzYWJsZWQsIGJ1dCBhbGwgdGhlIHNlZ21lbnQgcmVnaXN0ZXJzIChleGNlcHQgU1MpCkBAIC01NjgsMTYgKzUzOSwyMyBAQAogIwlkZWZpbmUgQVBNX0RPX1JFU1RPUkVfU0VHUwogI2VuZGlmCiAKK3N0cnVjdCBhcG1fYmlvc19jYWxsIHsKKwl1MzIgZnVuYzsKKwkvKiBJbiBhbmQgb3V0ICovCisJdTMyIGVieDsKKwl1MzIgZWN4OworCS8qIE91dCBvbmx5ICovCisJdTMyIGVheDsKKwl1MzIgZWR4OworCXUzMiBlc2k7CisKKwkvKiBFcnJvcjogLUVOT01FTSwgb3IgYml0cyA4LTE1IG9mIGVheCAqLworCWludCBlcnI7Cit9OworCiAvKioKLSAqCWFwbV9iaW9zX2NhbGwJLQlNYWtlIGFuIEFQTSBCSU9TIDMyYml0IGNhbGwKLSAqCUBmdW5jOiBBUE0gZnVuY3Rpb24gdG8gZXhlY3V0ZQotICoJQGVieF9pbjogRUJYIHJlZ2lzdGVyIGZvciBjYWxsIGVudHJ5Ci0gKglAZWN4X2luOiBFQ1ggcmVnaXN0ZXIgZm9yIGNhbGwgZW50cnkKLSAqCUBlYXg6IEVBWCByZWdpc3RlciByZXR1cm4KLSAqCUBlYng6IEVCWCByZWdpc3RlciByZXR1cm4KLSAqCUBlY3g6IEVDWCByZWdpc3RlciByZXR1cm4KLSAqCUBlZHg6IEVEWCByZWdpc3RlciByZXR1cm4KLSAqCUBlc2k6IEVTSSByZWdpc3RlciByZXR1cm4KKyAqCV9fYXBtX2Jpb3NfY2FsbCAtIE1ha2UgYW4gQVBNIEJJT1MgMzJiaXQgY2FsbAorICoJQF9jYWxsOiBwb2ludGVyIHRvIHN0cnVjdCBhcG1fYmlvc19jYWxsLgogICoKICAqCU1ha2UgYW4gQVBNIGNhbGwgdXNpbmcgdGhlIDMyYml0IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZS4gVGhlCiAgKgljYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGtub3dpbmcgaWYgQVBNIEJJT1MgaXMgY29uZmlndXJlZCBhbmQKQEAgLTU4NiwzNSArNTY0LDEwOSBAQAogICoJZmxhZyBpcyBsb2FkZWQgaW50byBBTC4gIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvcgogICoJY29kZSBpcyByZXR1cm5lZCBpbiBBSCAoYml0cyA4LTE1IG9mIGVheCkgYW5kIHRoaXMgZnVuY3Rpb24KICAqCXJldHVybnMgbm9uLXplcm8uCisgKgorICoJTm90ZTogdGhpcyBtYWtlcyB0aGUgY2FsbCBvbiB0aGUgY3VycmVudCBDUFUuCiAgKi8KLQotc3RhdGljIHU4IGFwbV9iaW9zX2NhbGwodTMyIGZ1bmMsIHUzMiBlYnhfaW4sIHUzMiBlY3hfaW4sCi0JdTMyICplYXgsIHUzMiAqZWJ4LCB1MzIgKmVjeCwgdTMyICplZHgsIHUzMiAqZXNpKQorc3RhdGljIGxvbmcgX19hcG1fYmlvc19jYWxsKHZvaWQgKl9jYWxsKQogewogCUFQTV9ERUNMX1NFR1MKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljcHVtYXNrX3QJCWNwdXM7CiAJaW50CQkJY3B1OwogCXN0cnVjdCBkZXNjX3N0cnVjdAlzYXZlX2Rlc2NfNDA7CiAJc3RydWN0IGRlc2Nfc3RydWN0CSpnZHQ7Ci0KLQljcHVzID0gYXBtX3NhdmVfY3B1cygpOworCXN0cnVjdCBhcG1fYmlvc19jYWxsCSpjYWxsID0gX2NhbGw7CiAKIAljcHUgPSBnZXRfY3B1KCk7CisJQlVHX09OKGNwdSAhPSAwKTsKIAlnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOwogCXNhdmVfZGVzY180MCA9IGdkdFsweDQwIC8gOF07CiAJZ2R0WzB4NDAgLyA4XSA9IGJhZF9iaW9zX2Rlc2M7CiAKIAlhcG1faXJxX3NhdmUoZmxhZ3MpOwogCUFQTV9ET19TQVZFX1NFR1M7Ci0JYXBtX2Jpb3NfY2FsbF9hc20oZnVuYywgZWJ4X2luLCBlY3hfaW4sIGVheCwgZWJ4LCBlY3gsIGVkeCwgZXNpKTsKKwlhcG1fYmlvc19jYWxsX2FzbShjYWxsLT5mdW5jLCBjYWxsLT5lYngsIGNhbGwtPmVjeCwKKwkJCSAgJmNhbGwtPmVheCwgJmNhbGwtPmVieCwgJmNhbGwtPmVjeCwgJmNhbGwtPmVkeCwKKwkJCSAgJmNhbGwtPmVzaSk7CiAJQVBNX0RPX1JFU1RPUkVfU0VHUzsKIAlhcG1faXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWdkdFsweDQwIC8gOF0gPSBzYXZlX2Rlc2NfNDA7CiAJcHV0X2NwdSgpOwotCWFwbV9yZXN0b3JlX2NwdXMoY3B1cyk7CiAKLQlyZXR1cm4gKmVheCAmIDB4ZmY7CisJcmV0dXJuIGNhbGwtPmVheCAmIDB4ZmY7Cit9CisKKy8qIFJ1biBfX2FwbV9iaW9zX2NhbGwgb3IgX19hcG1fYmlvc19jYWxsX3NpbXBsZSBvbiBDUFUgMCAqLworc3RhdGljIGludCBvbl9jcHUwKGxvbmcgKCpmbikodm9pZCAqKSwgc3RydWN0IGFwbV9iaW9zX2NhbGwgKmNhbGwpCit7CisJaW50IHJldDsKKworCS8qIERvbid0IGJvdGhlciB3aXRoIHdvcmtfb25fY3B1IGluIHRoZSBjb21tb24gY2FzZSwgc28gd2UgZG9uJ3QKKwkgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IE9PTSBvciBvdmVyaGVhZC4gKi8KKwlpZiAoZ2V0X2NwdSgpID09IDApIHsKKwkJcmV0ID0gZm4oY2FsbCk7CisJCXB1dF9jcHUoKTsKKwl9IGVsc2UgeworCQlwdXRfY3B1KCk7CisJCXJldCA9IHdvcmtfb25fY3B1KDAsIGZuLCBjYWxsKTsKKwl9CisKKwkvKiB3b3JrX29uX2NwdSBjYW4gZmFpbCB3aXRoIC1FTk9NRU0gKi8KKwlpZiAocmV0IDwgMCkKKwkJY2FsbC0+ZXJyID0gcmV0OworCWVsc2UKKwkJY2FsbC0+ZXJyID0gKGNhbGwtPmVheCA+PiA4KSAmIDB4ZmY7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCWFwbV9iaW9zX2NhbGwJLQlNYWtlIGFuIEFQTSBCSU9TIDMyYml0IGNhbGwgKG9uIENQVSAwKQorICoJQGNhbGw6IHRoZSBhcG1fYmlvc19jYWxsIHJlZ2lzdGVycy4KKyAqCisgKglJZiB0aGVyZSBpcyBhbiBlcnJvciwgaXQgaXMgcmV0dXJuZWQgaW4gQGNhbGwuZXJyLgorICovCitzdGF0aWMgaW50IGFwbV9iaW9zX2NhbGwoc3RydWN0IGFwbV9iaW9zX2NhbGwgKmNhbGwpCit7CisJcmV0dXJuIG9uX2NwdTAoX19hcG1fYmlvc19jYWxsLCBjYWxsKTsKK30KKworLyoqCisgKglfX2FwbV9iaW9zX2NhbGxfc2ltcGxlIC0gTWFrZSBhbiBBUE0gQklPUyAzMmJpdCBjYWxsIChvbiBDUFUgMCkKKyAqCUBfY2FsbDogcG9pbnRlciB0byBzdHJ1Y3QgYXBtX2Jpb3NfY2FsbC4KKyAqCisgKglNYWtlIGEgQklPUyBjYWxsIHRoYXQgcmV0dXJucyBvbmUgdmFsdWUgb25seSwgb3IganVzdCBzdGF0dXMuCisgKglJZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlbiB0aGUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbiBBSAorICoJKGJpdHMgOC0xNSBvZiBlYXgpIGFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gKGl0IGNhbgorICoJYWxzbyByZXR1cm4gLUVOT01FTSkuIFRoaXMgaXMgdXNlZCBmb3Igc2ltcGxlciBCSU9TIG9wZXJhdGlvbnMuCisgKglUaGlzIGNhbGwgbWF5IGhvbGQgaW50ZXJydXB0cyBvZmYgZm9yIGEgbG9uZyB0aW1lIG9uIHNvbWUgbGFwdG9wcy4KKyAqCisgKglOb3RlOiB0aGlzIG1ha2VzIHRoZSBjYWxsIG9uIHRoZSBjdXJyZW50IENQVS4KKyAqLworc3RhdGljIGxvbmcgX19hcG1fYmlvc19jYWxsX3NpbXBsZSh2b2lkICpfY2FsbCkKK3sKKwl1OAkJCWVycm9yOworCUFQTV9ERUNMX1NFR1MKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQljcHU7CisJc3RydWN0IGRlc2Nfc3RydWN0CXNhdmVfZGVzY180MDsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QJKmdkdDsKKwlzdHJ1Y3QgYXBtX2Jpb3NfY2FsbAkqY2FsbCA9IF9jYWxsOworCisJY3B1ID0gZ2V0X2NwdSgpOworCUJVR19PTihjcHUgIT0gMCk7CisJZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKKwlzYXZlX2Rlc2NfNDAgPSBnZHRbMHg0MCAvIDhdOworCWdkdFsweDQwIC8gOF0gPSBiYWRfYmlvc19kZXNjOworCisJYXBtX2lycV9zYXZlKGZsYWdzKTsKKwlBUE1fRE9fU0FWRV9TRUdTOworCWVycm9yID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGVfYXNtKGNhbGwtPmZ1bmMsIGNhbGwtPmVieCwgY2FsbC0+ZWN4LAorCQkJCQkgJmNhbGwtPmVheCk7CisJQVBNX0RPX1JFU1RPUkVfU0VHUzsKKwlhcG1faXJxX3Jlc3RvcmUoZmxhZ3MpOworCWdkdFsweDQwIC8gOF0gPSBzYXZlX2Rlc2NfNDA7CisJcHV0X2NwdSgpOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCkBAIC02MjMsNDAgKzY3NSwyOCBAQAogICoJQGVieF9pbjogRUJYIHJlZ2lzdGVyIHZhbHVlIGZvciBCSU9TIGNhbGwKICAqCUBlY3hfaW46IEVDWCByZWdpc3RlciB2YWx1ZSBmb3IgQklPUyBjYWxsCiAgKglAZWF4OiBFQVggcmVnaXN0ZXIgb24gcmV0dXJuIGZyb20gdGhlIEJJT1MgY2FsbAorICoJQGVycjogYml0cwogICoKICAqCU1ha2UgYSBCSU9TIGNhbGwgdGhhdCByZXR1cm5zIG9uZSB2YWx1ZSBvbmx5LCBvciBqdXN0IHN0YXR1cy4KLSAqCUlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIEFICi0gKgkoYml0cyA4LTE1IG9mIGVheCkgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24temVyby4gVGhpcyBpcwotICoJdXNlZCBmb3Igc2ltcGxlciBCSU9TIG9wZXJhdGlvbnMuIFRoaXMgY2FsbCBtYXkgaG9sZCBpbnRlcnJ1cHRzCi0gKglvZmYgZm9yIGEgbG9uZyB0aW1lIG9uIHNvbWUgbGFwdG9wcy4KKyAqCUlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIEBlcnIKKyAqCWFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8uIFRoaXMgaXMgdXNlZCBmb3Igc2ltcGxlcgorICoJQklPUyBvcGVyYXRpb25zLiAgVGhpcyBjYWxsIG1heSBob2xkIGludGVycnVwdHMgb2ZmIGZvciBhIGxvbmcKKyAqCXRpbWUgb24gc29tZSBsYXB0b3BzLgogICovCi0KLXN0YXRpYyB1OCBhcG1fYmlvc19jYWxsX3NpbXBsZSh1MzIgZnVuYywgdTMyIGVieF9pbiwgdTMyIGVjeF9pbiwgdTMyICplYXgpCitzdGF0aWMgaW50IGFwbV9iaW9zX2NhbGxfc2ltcGxlKHUzMiBmdW5jLCB1MzIgZWJ4X2luLCB1MzIgZWN4X2luLCB1MzIgKmVheCwKKwkJCQlpbnQgKmVycikKIHsKLQl1OAkJCWVycm9yOwotCUFQTV9ERUNMX1NFR1MKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljcHVtYXNrX3QJCWNwdXM7Ci0JaW50CQkJY3B1OwotCXN0cnVjdCBkZXNjX3N0cnVjdAlzYXZlX2Rlc2NfNDA7Ci0Jc3RydWN0IGRlc2Nfc3RydWN0CSpnZHQ7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwgY2FsbDsKKwlpbnQgcmV0OwogCi0JY3B1cyA9IGFwbV9zYXZlX2NwdXMoKTsKKwljYWxsLmZ1bmMgPSBmdW5jOworCWNhbGwuZWJ4ID0gZWJ4X2luOworCWNhbGwuZWN4ID0gZWN4X2luOwogCi0JY3B1ID0gZ2V0X2NwdSgpOwotCWdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7Ci0Jc2F2ZV9kZXNjXzQwID0gZ2R0WzB4NDAgLyA4XTsKLQlnZHRbMHg0MCAvIDhdID0gYmFkX2Jpb3NfZGVzYzsKLQotCWFwbV9pcnFfc2F2ZShmbGFncyk7Ci0JQVBNX0RPX1NBVkVfU0VHUzsKLQllcnJvciA9IGFwbV9iaW9zX2NhbGxfc2ltcGxlX2FzbShmdW5jLCBlYnhfaW4sIGVjeF9pbiwgZWF4KTsKLQlBUE1fRE9fUkVTVE9SRV9TRUdTOwotCWFwbV9pcnFfcmVzdG9yZShmbGFncyk7Ci0JZ2R0WzB4NDAgLyA4XSA9IHNhdmVfZGVzY180MDsKLQlwdXRfY3B1KCk7Ci0JYXBtX3Jlc3RvcmVfY3B1cyhjcHVzKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0ID0gb25fY3B1MChfX2FwbV9iaW9zX2NhbGxfc2ltcGxlLCAmY2FsbCk7CisJKmVheCA9IGNhbGwuZWF4OworCSplcnIgPSBjYWxsLmVycjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTY3OCw5ICs3MTgsMTAgQEAKIHN0YXRpYyBpbnQgYXBtX2RyaXZlcl92ZXJzaW9uKHVfc2hvcnQgKnZhbCkKIHsKIAl1MzIgZWF4OworCWludCBlcnI7CiAKLQlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfVkVSU0lPTiwgMCwgKnZhbCwgJmVheCkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKKwlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfVkVSU0lPTiwgMCwgKnZhbCwgJmVheCwgJmVycikpCisJCXJldHVybiBlcnI7CiAJKnZhbCA9IGVheDsKIAlyZXR1cm4gQVBNX1NVQ0NFU1M7CiB9CkBAIC03MDEsMjIgKzc0MiwyMSBAQAogICoJdGhhdCBBUE0gMS4yIGlzIGluIHVzZS4gSWYgbm8gbWVzc2dlcyBhcmUgcGVuZGluZyB0aGUgdmFsdWUgMHg4MAogICoJaXMgcmV0dXJuZWQgKE5vIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIHBlbmRpbmcpLgogICovCi0KIHN0YXRpYyBpbnQgYXBtX2dldF9ldmVudChhcG1fZXZlbnRfdCAqZXZlbnQsIGFwbV9ldmVudGluZm9fdCAqaW5mbykKIHsKLQl1MzIgZWF4OwotCXUzMiBlYng7Ci0JdTMyIGVjeDsKLQl1MzIgZHVtbXk7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwgY2FsbDsKIAotCWlmIChhcG1fYmlvc19jYWxsKEFQTV9GVU5DX0dFVF9FVkVOVCwgMCwgMCwgJmVheCwgJmVieCwgJmVjeCwKLQkJCSAgJmR1bW15LCAmZHVtbXkpKQotCQlyZXR1cm4gKGVheCA+PiA4KSAmIDB4ZmY7Ci0JKmV2ZW50ID0gZWJ4OworCWNhbGwuZnVuYyA9IEFQTV9GVU5DX0dFVF9FVkVOVDsKKwljYWxsLmVieCA9IGNhbGwuZWN4ID0gMDsKKworCWlmIChhcG1fYmlvc19jYWxsKCZjYWxsKSkKKwkJcmV0dXJuIGNhbGwuZXJyOworCisJKmV2ZW50ID0gY2FsbC5lYng7CiAJaWYgKGFwbV9pbmZvLmNvbm5lY3Rpb25fdmVyc2lvbiA8IDB4MDEwMikKIAkJKmluZm8gPSB+MDsgLyogaW5kaWNhdGUgaW5mbyBub3QgdmFsaWQgKi8KIAllbHNlCi0JCSppbmZvID0gZWN4OworCQkqaW5mbyA9IGNhbGwuZWN4OwogCXJldHVybiBBUE1fU1VDQ0VTUzsKIH0KIApAQCAtNzM3LDkgKzc3NywxMCBAQAogc3RhdGljIGludCBzZXRfcG93ZXJfc3RhdGUodV9zaG9ydCB3aGF0LCB1X3Nob3J0IHN0YXRlKQogewogCXUzMiBlYXg7CisJaW50IGVycjsKIAotCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19TRVRfU1RBVEUsIHdoYXQsIHN0YXRlLCAmZWF4KSkKLQkJcmV0dXJuIChlYXggPj4gOCkgJiAweGZmOworCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19TRVRfU1RBVEUsIHdoYXQsIHN0YXRlLCAmZWF4LCAmZXJyKSkKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gQVBNX1NVQ0NFU1M7CiB9CiAKQEAgLTc3MCw2ICs4MTEsNyBAQAogCXU4IHJldCA9IDA7CiAJaW50IGlkbGVkID0gMDsKIAlpbnQgcG9sbGluZzsKKwlpbnQgZXJyOwogCiAJcG9sbGluZyA9ICEhKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICYgVFNfUE9MTElORyk7CiAJaWYgKHBvbGxpbmcpIHsKQEAgLTc4Miw3ICs4MjQsNyBAQAogCX0KIAlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCWlkbGVkID0gMTsKLQkJcmV0ID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfSURMRSwgMCwgMCwgJmVheCk7CisJCXJldCA9IGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0lETEUsIDAsIDAsICZlYXgsICZlcnIpOwogCX0KIAlpZiAocG9sbGluZykKIAkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKQEAgLTc5Nyw4ICs4MzksNyBAQAogCQkgKiBPbmx5IHJlcG9ydCB0aGUgZmFpbHVyZSB0aGUgZmlyc3QgNSB0aW1lcy4KIAkJICovCiAJCWlmICgrK3QgPCA1KSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYXBtX2RvX2lkbGUgZmFpbGVkICglZClcbiIsCi0JCQkgICAgICAgKGVheCA+PiA4KSAmIDB4ZmYpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImFwbV9kb19pZGxlIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCQkJdCA9IGppZmZpZXM7CiAJCX0KIAkJcmV0dXJuIC0xOwpAQCAtODE2LDkgKzg1NywxMCBAQAogc3RhdGljIHZvaWQgYXBtX2RvX2J1c3kodm9pZCkKIHsKIAl1MzIgZHVtbXk7CisJaW50IGVycjsKIAogCWlmIChjbG9ja19zbG93ZWQgfHwgQUxXQVlTX0NBTExfQlVTWSkgewotCQkodm9pZClhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19CVVNZLCAwLCAwLCAmZHVtbXkpOworCQkodm9pZClhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19CVVNZLCAwLCAwLCAmZHVtbXksICZlcnIpOwogCQljbG9ja19zbG93ZWQgPSAwOwogCX0KIH0KQEAgLTkzNyw3ICs5NzksNyBAQAogCiAJLyogU29tZSBiaW9zZXMgZG9uJ3QgbGlrZSBiZWluZyBjYWxsZWQgZnJvbSBDUFUgIT0gMCAqLwogCWlmIChhcG1faW5mby5yZWFsbW9kZV9wb3dlcl9vZmYpIHsKLQkJKHZvaWQpYXBtX3NhdmVfY3B1cygpOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKDApKTsKIAkJbWFjaGluZV9yZWFsX3Jlc3RhcnQocG9fYmlvc19jYWxsLCBzaXplb2YocG9fYmlvc19jYWxsKSk7CiAJfSBlbHNlIHsKIAkJKHZvaWQpc2V0X3N5c3RlbV9wb3dlcl9zdGF0ZShBUE1fU1RBVEVfT0ZGKTsKQEAgLTk1NiwxMiArOTk4LDEzIEBACiBzdGF0aWMgaW50IGFwbV9lbmFibGVfcG93ZXJfbWFuYWdlbWVudChpbnQgZW5hYmxlKQogewogCXUzMiBlYXg7CisJaW50IGVycjsKIAogCWlmICgoZW5hYmxlID09IDApICYmIChhcG1faW5mby5iaW9zLmZsYWdzICYgQVBNX0JJT1NfRElTRU5HQUdFRCkpCiAJCXJldHVybiBBUE1fTk9UX0VOR0FHRUQ7CiAJaWYgKGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0VOQUJMRV9QTSwgQVBNX0RFVklDRV9CQUxMLAotCQkJCSBlbmFibGUsICZlYXgpKQotCQlyZXR1cm4gKGVheCA+PiA4KSAmIDB4ZmY7CisJCQkJIGVuYWJsZSwgJmVheCwgJmVycikpCisJCXJldHVybiBlcnI7CiAJaWYgKGVuYWJsZSkKIAkJYXBtX2luZm8uYmlvcy5mbGFncyAmPSB+QVBNX0JJT1NfRElTQUJMRUQ7CiAJZWxzZQpAQCAtOTg2LDI0ICsxMDI5LDIzIEBACiAKIHN0YXRpYyBpbnQgYXBtX2dldF9wb3dlcl9zdGF0dXModV9zaG9ydCAqc3RhdHVzLCB1X3Nob3J0ICpiYXQsIHVfc2hvcnQgKmxpZmUpCiB7Ci0JdTMyIGVheDsKLQl1MzIgZWJ4OwotCXUzMiBlY3g7Ci0JdTMyIGVkeDsKLQl1MzIgZHVtbXk7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwgY2FsbDsKKworCWNhbGwuZnVuYyA9IEFQTV9GVU5DX0dFVF9TVEFUVVM7CisJY2FsbC5lYnggPSBBUE1fREVWSUNFX0FMTDsKKwljYWxsLmVjeCA9IDA7CiAKIAlpZiAoYXBtX2luZm8uZ2V0X3Bvd2VyX3N0YXR1c19icm9rZW4pCiAJCXJldHVybiBBUE1fMzJfVU5TVVBQT1JURUQ7Ci0JaWYgKGFwbV9iaW9zX2NhbGwoQVBNX0ZVTkNfR0VUX1NUQVRVUywgQVBNX0RFVklDRV9BTEwsIDAsCi0JCQkgICZlYXgsICZlYngsICZlY3gsICZlZHgsICZkdW1teSkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKLQkqc3RhdHVzID0gZWJ4OwotCSpiYXQgPSBlY3g7CisJaWYgKGFwbV9iaW9zX2NhbGwoJmNhbGwpKQorCQlyZXR1cm4gY2FsbC5lcnI7CisJKnN0YXR1cyA9IGNhbGwuZWJ4OworCSpiYXQgPSBjYWxsLmVjeDsKIAlpZiAoYXBtX2luZm8uZ2V0X3Bvd2VyX3N0YXR1c19zd2FiaW5taW51dGVzKSB7Ci0JCSpsaWZlID0gc3dhYjE2KCh1MTYpZWR4KTsKKwkJKmxpZmUgPSBzd2FiMTYoKHUxNiljYWxsLmVkeCk7CiAJCSpsaWZlIHw9IDB4ODAwMDsKIAl9IGVsc2UKLQkJKmxpZmUgPSBlZHg7CisJCSpsaWZlID0gY2FsbC5lZHg7CiAJcmV0dXJuIEFQTV9TVUNDRVNTOwogfQogCkBAIC0xMDQ4LDEyICsxMDkwLDE0IEBACiBzdGF0aWMgaW50IGFwbV9lbmdhZ2VfcG93ZXJfbWFuYWdlbWVudCh1X3Nob3J0IGRldmljZSwgaW50IGVuYWJsZSkKIHsKIAl1MzIgZWF4OworCWludCBlcnI7CiAKIAlpZiAoKGVuYWJsZSA9PSAwKSAmJiAoZGV2aWNlID09IEFQTV9ERVZJQ0VfQUxMKQogCSAgICAmJiAoYXBtX2luZm8uYmlvcy5mbGFncyAmIEFQTV9CSU9TX0RJU0FCTEVEKSkKIAkJcmV0dXJuIEFQTV9ESVNBQkxFRDsKLQlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfRU5HQUdFX1BNLCBkZXZpY2UsIGVuYWJsZSwgJmVheCkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKKwlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfRU5HQUdFX1BNLCBkZXZpY2UsIGVuYWJsZSwKKwkJCQkgJmVheCwgJmVycikpCisJCXJldHVybiBlcnI7CiAJaWYgKGRldmljZSA9PSBBUE1fREVWSUNFX0FMTCkgewogCQlpZiAoZW5hYmxlKQogCQkJYXBtX2luZm8uYmlvcy5mbGFncyAmPSB+QVBNX0JJT1NfRElTRU5HQUdFRDsKQEAgLTE2ODksMTYgKzE3MzMsMTQgQEAKIAljaGFyIAkJKnBvd2VyX3N0YXQ7CiAJY2hhciAJCSpiYXRfc3RhdDsKIAotI2lmZGVmIENPTkZJR19TTVAKIAkvKiAyMDAyLzA4LzAxIC0gV1QKIAkgKiBUaGlzIGlzIHRvIGF2b2lkIHJhbmRvbSBjcmFzaGVzIGF0IGJvb3QgdGltZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24KIAkgKiBvbiBTTVAgc3lzdGVtcyBpbiBjYXNlIG9mICJhcG09cG93ZXItb2ZmIiBtb2RlLiBTZWVuIG9uIEFTVVMgQTdNMjY2RC4KIAkgKiBTb21lIGJpb3NlcyBkb24ndCBsaWtlIGJlaW5nIGNhbGxlZCBmcm9tIENQVSAhPSAwLgogCSAqIE1ldGhvZCBzdWdnZXN0ZWQgYnkgSW5nbyBNb2xuYXIuCiAJICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSgwKSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZigwKSk7CiAJQlVHX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKTsKLSNlbmRpZgogCiAJaWYgKGFwbV9pbmZvLmNvbm5lY3Rpb25fdmVyc2lvbiA9PSAwKSB7CiAJCWFwbV9pbmZvLmNvbm5lY3Rpb25fdmVyc2lvbiA9IGFwbV9pbmZvLmJpb3MudmVyc2lvbjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IGUyOTYyY2MuLmM0ZjY2NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNDEsOCArNDEsNiBAQAogCiAjaW5jbHVkZSAiY3B1LmgiCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KIC8qIGFsbCBvZiB0aGVzZSBtYXNrcyBhcmUgaW5pdGlhbGl6ZWQgaW4gc2V0dXBfY3B1X2xvY2FsX21hc2tzKCkgKi8KIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7CiBjcHVtYXNrX3Zhcl90IGNwdV9jYWxsb3V0X21hc2s7CkBAIC02MCwxNiArNTgsNiBAQAogCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9zaWJsaW5nX3NldHVwX21hc2spOwogfQogCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci1jcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKLWNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CiAKIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKQEAgLTg1OSw2ICs4NDcsNyBAQAogdm9pZCBfX2luaXQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZCkKIHsKIAlpZGVudGlmeV9jcHUoJmJvb3RfY3B1X2RhdGEpOworCWluaXRfYzFlX21hc2soKTsKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJc3lzZW50ZXJfc2V0dXAoKTsKIAllbmFibGVfc2VwX2NwdSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDIzZGE5NmUuLjE5ZjZiOWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC03Miw2ICs3Miw4IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKiwgZHJ2X2RhdGEpOwogCitERUZJTkVfVFJBQ0UocG93ZXJfbWFyayk7CisKIC8qIGFjcGlfcGVyZl9kYXRhIGlzIGEgcG9pbnRlciB0byBwZXJjcHUgZGF0YS4gKi8KIHN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKmFjcGlfcGVyZl9kYXRhOwogCkBAIC02ODAsNiArNjgyLDE4IEBACiAJCQkgICAgcGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDA7CiAJfQogCisJLyogQ2hlY2sgZm9yIGhpZ2ggbGF0ZW5jeSAoPjIwdVMpIGZyb20gYnVnZ3kgQklPU2VzLCBsaWtlIG9uIFQ0MiAqLworCWlmIChwZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFICYmCisJICAgIHBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPiAyMCAqIDEwMDApIHsKKwkJc3RhdGljIGludCBwcmludF9vbmNlOworCQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMjAgKiAxMDAwOworCQlpZiAoIXByaW50X29uY2UpIHsKKwkJCXByaW50X29uY2UgPSAxOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FwcGluZyBvZmYgUC1zdGF0ZSB0cmFuaXNpb24gbGF0ZW5jeSIKKwkJCQkiIGF0IDIwIHVTXG4iKTsKKwkJfQorCX0KKwogCWRhdGEtPm1heF9mcmVxID0gcGVyZi0+c3RhdGVzWzBdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkvKiB0YWJsZSBpbml0ICovCiAJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggZjFjNTFhZS4uMGJkNDhlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlvdXRiKDMsIDB4MjIpOwogCX0gZWxzZSBpZiAoKHByICE9IE5VTEwpICYmIHByLT5mbGFncy5ibV9jb250cm9sKSB7CiAJCS8qIERpc2FibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiAqLwotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMSk7CisJCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAxKTsKIAl9CiAJc3dpdGNoIChsb25naGF1bF92ZXJzaW9uKSB7CiAKQEAgLTMyOCw3ICszMjgsNyBAQAogCWNhc2UgVFlQRV9QT1dFUlNBVkVSOgogCQlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfQUNQSV9DMykgewogCQkJLyogRG9uJ3QgYWxsb3cgd2FrZXVwICovCi0JCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCk7CisJCQlhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCk7CiAJCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBtdWx0c19pbmRleCwgZGlyKTsKIAkJfSBlbHNlIHsKIAkJCWRvX3Bvd2Vyc2F2ZXIoMCwgbXVsdHNfaW5kZXgsIGRpcik7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJb3V0YigwLCAweDIyKTsKIAl9IGVsc2UgaWYgKChwciAhPSBOVUxMKSAmJiBwci0+ZmxhZ3MuYm1fY29udHJvbCkgewogCQkvKiBFbmFibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiAqLwotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMCk7CisJCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKIAl9CiAJb3V0YihwaWMyX21hc2ssIDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KIAlvdXRiKHBpYzFfbWFzaywgMHgyMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IDQxZWQ5NDkuLjZhYzU1YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogI2lmZGVmIENPTkZJR19TTVAKLQljcHVtYXNrX2NvcHkocG9saWN5LT5jcHVzLCAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIHBvbGljeS0+Y3B1KSk7CisJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgY3B1X3NpYmxpbmdfbWFzayhwb2xpY3ktPmNwdSkpOwogI2VuZGlmCiAKIAkvKiBFcnJhdGEgd29ya2Fyb3VuZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCBhMTVhYzk0Li40NzA5ZWFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtNTQsNyArNTQsMTAgQEAKIHN0YXRpYyBpbnQgY3B1X2ZhbWlseSA9IENQVV9PUFRFUk9OOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLURFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X2NvcmVfbWFwKTsKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9jb3JlX21hc2soaW50IGNwdSkKK3sKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKK30KICNlbmRpZgogCiAvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KQEAgLTY5OSw3ICs3MDIsNyBAQAogCiAJZHByaW50aygiY2ZpZCAweCV4LCBjdmlkIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCWRhdGEtPnBvd2Vybm93X3RhYmxlID0gcG93ZXJub3dfdGFibGU7Ci0JaWYgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9jb3JlX21hcCwgZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQorCWlmIChjcHVtYXNrX2ZpcnN0KGNwdV9jb3JlX21hc2soZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQogCQlwcmludF9iYXNpY3MoZGF0YSk7CiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykKQEAgLTg2Miw3ICs4NjUsNyBAQAogCiAJLyogZmlsbCBpbiBkYXRhICovCiAJZGF0YS0+bnVtcHMgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7Ci0JaWYgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9jb3JlX21hcCwgZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQorCWlmIChjcHVtYXNrX2ZpcnN0KGNwdV9jb3JlX21hc2soZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQogCQlwcmludF9iYXNpY3MoZGF0YSk7CiAJcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKGRhdGEsIDApOwogCkBAIC0xMzAwLDcgKzEzMDMsNyBAQAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCiAJCWNwdW1hc2tfY29weShwb2wtPmNwdXMsIGNwdW1hc2tfb2YocG9sLT5jcHUpKTsKIAllbHNlCi0JCWNwdW1hc2tfY29weShwb2wtPmNwdXMsICZwZXJfY3B1KGNwdV9jb3JlX21hcCwgcG9sLT5jcHUpKTsKKwkJY3B1bWFza19jb3B5KHBvbC0+Y3B1cywgY3B1X2NvcmVfbWFzayhwb2wtPmNwdSkpOwogCWRhdGEtPmF2YWlsYWJsZV9jb3JlcyA9IHBvbC0+Y3B1czsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCkBAIC0xMzY1LDcgKzEzNjgsNyBAQAogCXVuc2lnbmVkIGludCBraHogPSAwOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIAotCWZpcnN0ID0gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwlmaXJzdCA9IGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhjcHUpKTsKIAlkYXRhID0gcGVyX2NwdShwb3dlcm5vd19kYXRhLCBmaXJzdCk7CiAKIAlpZiAoIWRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCA4YmJiMTFhLi4wMTZjMWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCiAJLyogb25seSBydW4gb24gQ1BVIHRvIGJlIHNldCwgb3Igb24gaXRzIHNpYmxpbmcgKi8KICNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBwb2xpY3ktPmNwdSkpOworCWNwdW1hc2tfY29weShwb2xpY3ktPmNwdXMsIGNwdV9zaWJsaW5nX21hc2socG9saWN5LT5jcHUpKTsKICNlbmRpZgogCiAJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggYzQ3MWViMS4uNDgzZWRhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOwogfTsKIAotI2lmZGVmIENPTkZJR19QQ0kKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU0ZTKQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGs4X25iX2lkW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCAweDExMDMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDMpIH0sCkBAIC0zMjQsMTUgKzMyNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLV9fY3B1aW5pdCBjcHVpZDRfY2FjaGVfbG9va3VwKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmKQotewotCXN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqbGVhZl9yZWdzID0KLQkJKHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqKXRoaXNfbGVhZjsKLQotCXJldHVybiBjcHVpZDRfY2FjaGVfbG9va3VwX3JlZ3MoaW5kZXgsIGxlYWZfcmVncyk7Ci19Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0IGZpbmRfbnVtX2NhY2hlX2xlYXZlcyh2b2lkKQogewogCXVuc2lnbmVkIGludAkJZWF4LCBlYngsIGVjeCwgZWR4OwpAQCAtNTA4LDYgKzQ5OSw4IEBACiAJcmV0dXJuIGwyOwogfQogCisjaWZkZWYgQ09ORklHX1NZU0ZTCisKIC8qIHBvaW50ZXIgdG8gX2NwdWlkNF9pbmZvIGFycmF5IChmb3IgZWFjaCBjYWNoZSBsZWFmKSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY3B1aWQ0X2luZm8pOwogI2RlZmluZSBDUFVJRDRfSU5GT19JRFgoeCwgeSkJKCYoKHBlcl9jcHUoY3B1aWQ0X2luZm8sIHgpKVt5XSkpCkBAIC01NzEsNiArNTY0LDE1IEBACiAJcGVyX2NwdShjcHVpZDRfaW5mbywgY3B1KSA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK19fY3B1aW5pdCBjcHVpZDRfY2FjaGVfbG9va3VwKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmKQoreworCXN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqbGVhZl9yZWdzID0KKwkJKHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqKXRoaXNfbGVhZjsKKworCXJldHVybiBjcHVpZDRfY2FjaGVfbG9va3VwX3JlZ3MoaW5kZXgsIGxlYWZfcmVncyk7Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZXRfY3B1X2xlYXZlcyh2b2lkICpfcmV0dmFsKQogewogCWludCBqLCAqcmV0dmFsID0gX3JldHZhbCwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtNjEyLDggKzYxNCw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotI2lmZGVmIENPTkZJR19TWVNGUwotCiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKaW5kZXggY2ExNDYwNC4uODYzZjg5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBjcHVtYXNrX3QgbWNlX2RldmljZV9pbml0aWFsaXplZCA9IENQVV9NQVNLX05PTkU7CitzdGF0aWMgY3B1bWFza192YXJfdCBtY2VfZGV2aWNlX2luaXRpYWxpemVkOwogCiAvKiBQZXIgY3B1IHN5c2RldiBpbml0LiAgQWxsIG9mIHRoZSBjcHVzIHN0aWxsIHNoYXJlIHRoZSBzYW1lIGN0bCBiYW5rICovCiBzdGF0aWMgX19jcHVpbml0IGludCBtY2VfY3JlYXRlX2RldmljZSh1bnNpZ25lZCBpbnQgY3B1KQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3IyOwogCX0KLQljcHVfc2V0KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CiAKIAlyZXR1cm4gMDsKIGVycm9yMjoKQEAgLTEwNDMsNyArMTA0Myw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoIWNwdV9pc3NldChjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpKQorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBtY2VfYXR0cmlidXRlc1tpXTsgaSsrKQpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSksCiAJCQkmYmFua19hdHRyc1tpXSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpKTsKLQljcHVfY2xlYXIoY3B1LCBtY2VfZGV2aWNlX2luaXRpYWxpemVkKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOwogfQogCiAvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1hY2hpbmUgY2hlY2tzIG9uIG9mZmxpbmVkIENQVXMuICovCkBAIC0xMTYyLDYgKzExNjIsOCBAQAogCWlmICghbWNlX2F2YWlsYWJsZSgmYm9vdF9jcHVfZGF0YSkpCiAJCXJldHVybiAtRUlPOwogCisJYWxsb2NfY3B1bWFza192YXIoJm1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQsIEdGUF9LRVJORUwpOworCiAJZXJyID0gbWNlX2luaXRfYmFua3MoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCmluZGV4IDdkMDFiZTguLjU2ZGRlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkICYmIHNoYXJlZF9iYW5rW2JhbmtdKSB7CS8qIHN5bWxpbmsgKi8KLQkJaSA9IGNwdW1hc2tfZmlyc3QoJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJaSA9IGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhjcHUpKTsKIAogCQkvKiBmaXJzdCBjb3JlIG5vdCB1cCB5ZXQgKi8KIAkJaWYgKGNwdV9kYXRhKGkpLmNwdV9jb3JlX2lkKQpAQCAtNTA1LDcgKzUwNSw3IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAotCQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJY3B1bWFza19jb3B5KGItPmNwdXMsIGNwdV9jb3JlX21hc2soY3B1KSk7CiAJCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTI5LDcgKzUyOSw3IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAljcHVtYXNrX3NldGFsbChiLT5jcHVzKTsKICNlbHNlCi0JY3B1bWFza19jb3B5KGItPmNwdXMsICZwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CisJY3B1bWFza19jb3B5KGItPmNwdXMsIGNwdV9jb3JlX21hc2soY3B1KSk7CiAjZW5kaWYKIAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKaW5kZXggNTdkZjNkMy4uZDZiNzJkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKQEAgLTI0OSw3ICsyNDksNyBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUgKGNwdSkgewogCQlpZiAoY3B1ID09IGR5aW5nKQogCQkJY29udGludWU7Ci0JCWlmIChzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSkpCisJCWlmIChzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpKQogCQkJY29udGludWU7CiAJCS8qIFJlY2hlY2sgYmFua3MgaW4gY2FzZSBDUFVzIGRvbid0IGFsbCBoYXZlIHRoZSBzYW1lICovCiAJCWlmIChjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCBkNjdlMGU0Li5mOTMwNDdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtMTQsNyArMTQsNyBAQAogCWlmIChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncyA+IDEpIHsKIAkJc2VxX3ByaW50ZihtLCAicGh5c2ljYWwgaWRcdDogJWRcbiIsIGMtPnBoeXNfcHJvY19pZCk7CiAJCXNlcV9wcmludGYobSwgInNpYmxpbmdzXHQ6ICVkXG4iLAotCQkJICAgY3B1c193ZWlnaHQocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpKTsKKwkJCSAgIGNwdW1hc2tfd2VpZ2h0KGNwdV9zaWJsaW5nX21hc2soY3B1KSkpOwogCQlzZXFfcHJpbnRmKG0sICJjb3JlIGlkXHRcdDogJWRcbiIsIGMtPmNwdV9jb3JlX2lkKTsKIAkJc2VxX3ByaW50ZihtLCAiY3B1IGNvcmVzXHQ6ICVkXG4iLCBjLT5ib290ZWRfY29yZXMpOwogCQlzZXFfcHJpbnRmKG0sICJhcGljaWRcdFx0OiAlZFxuIiwgYy0+YXBpY2lkKTsKQEAgLTE0Myw5ICsxNDMsOSBAQAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKIAlpZiAoKnBvcyA9PSAwKQkvKiBqdXN0IGluIGNhc2UsIGNwdSAwIGlzIG5vdCB0aGUgZmlyc3QgKi8KLQkJKnBvcyA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CisJCSpwb3MgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7CiAJZWxzZQotCQkqcG9zID0gbmV4dF9jcHVfbnIoKnBvcyAtIDEsIGNwdV9vbmxpbmVfbWFwKTsKKwkJKnBvcyA9IGNwdW1hc2tfbmV4dCgqcG9zIC0gMSwgY3B1X29ubGluZV9tYXNrKTsKIAlpZiAoKCpwb3MpIDwgbnJfY3B1X2lkcykKIAkJcmV0dXJuICZjcHVfZGF0YSgqcG9zKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCBkZDIxMzBiLi45NWVhNWZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKQEAgLTE5Niw2ICsxOTcsMTEgQEAKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkvKiBub3RpZnkgdGhlIGh3LWJyYW5jaCB0cmFjZXIgc28gaXQgbWF5IGRpc2FibGUgdHJhY2luZyBhbmQKKwkgICBhZGQgdGhlIGxhc3QgdHJhY2UgdG8gdGhlIHRyYWNlIGJ1ZmZlciAtCisJICAgdGhlIGVhcmxpZXIgdGhpcyBoYXBwZW5zLCB0aGUgbW9yZSB1c2VmdWwgdGhlIHRyYWNlLiAqLworCXRyYWNlX2h3X2JyYW5jaF9vb3BzKCk7CisKIAlvb3BzX2VudGVyKCk7CiAKIAkvKiByYWN5LCBidXQgYmV0dGVyIHRoYW4gcmlza2luZyBkZWFkbG9jay4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCA3NmY3MTQxLi42MWRmNzc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9ub3BzLmg+CkBAIC0yNiw2ICsyNywxOCBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKK2ludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpCit7CisJc2V0X2tlcm5lbF90ZXh0X3J3KCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3Modm9pZCkKK3sKKwlzZXRfa2VybmVsX3RleHRfcm8oKTsKKwlyZXR1cm4gMDsKK30KKwogdW5pb24gZnRyYWNlX2NvZGVfdW5pb24gewogCWNoYXIgY29kZVtNQ09VTlRfSU5TTl9TSVpFXTsKIAlzdHJ1Y3QgewpAQCAtNjYsMTEgKzc5LDExIEBACiAgKgogICogMSkgUHV0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGludG8gdGhlIElQIGJ1ZmZlcgogICogICAgYW5kIHRoZSBuZXcgY29kZSBpbnRvIHRoZSAiY29kZSIgYnVmZmVyLgotICogMikgU2V0IGEgZmxhZyB0aGF0IHNheXMgd2UgYXJlIG1vZGlmeWluZyBjb2RlCi0gKiAzKSBXYWl0IGZvciBhbnkgcnVubmluZyBOTUlzIHRvIGZpbmlzaC4KLSAqIDQpIFdyaXRlIHRoZSBjb2RlCi0gKiA1KSBjbGVhciB0aGUgZmxhZy4KLSAqIDYpIFdhaXQgZm9yIGFueSBydW5uaW5nIE5NSXMgdG8gZmluaXNoLgorICogMikgV2FpdCBmb3IgYW55IHJ1bm5pbmcgTk1JcyB0byBmaW5pc2ggYW5kIHNldCBhIGZsYWcgdGhhdCBzYXlzCisgKiAgICB3ZSBhcmUgbW9kaWZ5aW5nIGNvZGUsIGl0IGlzIGRvbmUgaW4gYW4gYXRvbWljIG9wZXJhdGlvbi4KKyAqIDMpIFdyaXRlIHRoZSBjb2RlCisgKiA0KSBjbGVhciB0aGUgZmxhZy4KKyAqIDUpIFdhaXQgZm9yIGFueSBydW5uaW5nIE5NSXMgdG8gZmluaXNoLgogICoKICAqIElmIGFuIE5NSSBpcyBleGVjdXRlZCwgdGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgdG8gY2FsbAogICogImZ0cmFjZV9ubWlfZW50ZXIiLiBUaGlzIHdpbGwgY2hlY2sgaWYgdGhlIGZsYWcgaXMgc2V0IHRvIHdyaXRlCkBAIC04Miw5ICs5NSw5IEBACiAgKiBhcmUgdGhlIHNhbWUgYXMgd2hhdCBleGlzdHMuCiAgKi8KIAotc3RhdGljIGF0b21pY190IGluX25taSA9IEFUT01JQ19JTklUKDApOworI2RlZmluZSBNT0RfQ09ERV9XUklURV9GTEFHICgxIDw8IDMxKQkvKiBzZXQgd2hlbiBOTUkgc2hvdWxkIGRvIHRoZSB3cml0ZSAqLworc3RhdGljIGF0b21pY190IG5taV9ydW5uaW5nID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgaW50IG1vZF9jb2RlX3N0YXR1czsJCS8qIGhvbGRzIHJldHVybiB2YWx1ZSBvZiB0ZXh0IHdyaXRlICovCi1zdGF0aWMgaW50IG1vZF9jb2RlX3dyaXRlOwkJLyogc2V0IHdoZW4gTk1JIHNob3VsZCBkbyB0aGUgd3JpdGUgKi8KIHN0YXRpYyB2b2lkICptb2RfY29kZV9pcDsJCS8qIGhvbGRzIHRoZSBJUCB0byB3cml0ZSB0byAqLwogc3RhdGljIHZvaWQgKm1vZF9jb2RlX25ld2NvZGU7CQkvKiBob2xkcyB0aGUgdGV4dCB0byB3cml0ZSB0byB0aGUgSVAgKi8KIApAQCAtMTAxLDYgKzExNCwyMCBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgdm9pZCBjbGVhcl9tb2RfZmxhZyh2b2lkKQoreworCWludCBvbGQgPSBhdG9taWNfcmVhZCgmbm1pX3J1bm5pbmcpOworCisJZm9yICg7OykgeworCQlpbnQgbmV3ID0gb2xkICYgfk1PRF9DT0RFX1dSSVRFX0ZMQUc7CisKKwkJaWYgKG9sZCA9PSBuZXcpCisJCQlicmVhazsKKworCQlvbGQgPSBhdG9taWNfY21weGNoZygmbm1pX3J1bm5pbmcsIG9sZCwgbmV3KTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGZ0cmFjZV9tb2RfY29kZSh2b2lkKQogewogCS8qCkBAIC0xMTEsMzcgKzEzOCw1MiBAQAogCSAqLwogCW1vZF9jb2RlX3N0YXR1cyA9IHByb2JlX2tlcm5lbF93cml0ZShtb2RfY29kZV9pcCwgbW9kX2NvZGVfbmV3Y29kZSwKIAkJCQkJICAgICBNQ09VTlRfSU5TTl9TSVpFKTsKKworCS8qIGlmIHdlIGZhaWwsIHRoZW4ga2lsbCBhbnkgbmV3IHdyaXRlcnMgKi8KKwlpZiAobW9kX2NvZGVfc3RhdHVzKQorCQljbGVhcl9tb2RfZmxhZygpOwogfQogCiB2b2lkIGZ0cmFjZV9ubWlfZW50ZXIodm9pZCkKIHsKLQlhdG9taWNfaW5jKCZpbl9ubWkpOwotCS8qIE11c3QgaGF2ZSBpbl9ubWkgc2VlbiBiZWZvcmUgcmVhZGluZyB3cml0ZSBmbGFnICovCi0Jc21wX21iKCk7Ci0JaWYgKG1vZF9jb2RlX3dyaXRlKSB7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZubWlfcnVubmluZykgJiBNT0RfQ09ERV9XUklURV9GTEFHKSB7CisJCXNtcF9ybWIoKTsKIAkJZnRyYWNlX21vZF9jb2RlKCk7CiAJCWF0b21pY19pbmMoJm5taV91cGRhdGVfY291bnQpOwogCX0KKwkvKiBNdXN0IGhhdmUgcHJldmlvdXMgY2hhbmdlcyBzZWVuIGJlZm9yZSBleGVjdXRpb25zICovCisJc21wX21iKCk7CiB9CiAKIHZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpCiB7Ci0JLyogRmluaXNoIGFsbCBleGVjdXRpb25zIGJlZm9yZSBjbGVhcmluZyBpbl9ubWkgKi8KLQlzbXBfd21iKCk7Ci0JYXRvbWljX2RlYygmaW5fbm1pKTsKKwkvKiBGaW5pc2ggYWxsIGV4ZWN1dGlvbnMgYmVmb3JlIGNsZWFyaW5nIG5taV9ydW5uaW5nICovCisJc21wX21iKCk7CisJYXRvbWljX2RlYygmbm1pX3J1bm5pbmcpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9ubWlfYW5kX3NldF9tb2RfZmxhZyh2b2lkKQoreworCWlmICghYXRvbWljX2NtcHhjaGcoJm5taV9ydW5uaW5nLCAwLCBNT0RfQ09ERV9XUklURV9GTEFHKSkKKwkJcmV0dXJuOworCisJZG8geworCQljcHVfcmVsYXgoKTsKKwl9IHdoaWxlIChhdG9taWNfY21weGNoZygmbm1pX3J1bm5pbmcsIDAsIE1PRF9DT0RFX1dSSVRFX0ZMQUcpKTsKKworCW5taV93YWl0X2NvdW50Kys7CiB9CiAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX25taSh2b2lkKQogewotCWludCB3YWl0ZWQgPSAwOworCWlmICghYXRvbWljX3JlYWQoJm5taV9ydW5uaW5nKSkKKwkJcmV0dXJuOwogCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZpbl9ubWkpKSB7Ci0JCXdhaXRlZCA9IDE7CisJZG8gewogCQljcHVfcmVsYXgoKTsKLQl9CisJfSB3aGlsZSAoYXRvbWljX3JlYWQoJm5taV9ydW5uaW5nKSk7CiAKLQlpZiAod2FpdGVkKQotCQlubWlfd2FpdF9jb3VudCsrOworCW5taV93YWl0X2NvdW50Kys7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE1MSwxNCArMTkzLDkgQEAKIAltb2RfY29kZV9uZXdjb2RlID0gbmV3X2NvZGU7CiAKIAkvKiBUaGUgYnVmZmVycyBuZWVkIHRvIGJlIHZpc2libGUgYmVmb3JlIHdlIGxldCBOTUlzIHdyaXRlIHRoZW0gKi8KLQlzbXBfd21iKCk7Ci0KLQltb2RfY29kZV93cml0ZSA9IDE7Ci0KLQkvKiBNYWtlIHN1cmUgd3JpdGUgYml0IGlzIHZpc2libGUgYmVmb3JlIHdlIHdhaXQgb24gTk1JcyAqLwogCXNtcF9tYigpOwogCi0Jd2FpdF9mb3Jfbm1pKCk7CisJd2FpdF9mb3Jfbm1pX2FuZF9zZXRfbW9kX2ZsYWcoKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgcnVubmluZyBOTUlzIGhhdmUgZmluaXNoZWQgYmVmb3JlIHdlIHdyaXRlIHRoZSBjb2RlICovCiAJc21wX21iKCk7CkBAIC0xNjYsMTMgKzIwMyw5IEBACiAJZnRyYWNlX21vZF9jb2RlKCk7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHdyaXRlIGhhcHBlbnMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiaXQgKi8KLQlzbXBfd21iKCk7Ci0KLQltb2RfY29kZV93cml0ZSA9IDA7Ci0KLQkvKiBtYWtlIHN1cmUgTk1JcyBzZWUgdGhlIGNsZWFyZWQgYml0ICovCiAJc21wX21iKCk7CiAKKwljbGVhcl9tb2RfZmxhZygpOwogCXdhaXRfZm9yX25taSgpOwogCiAJcmV0dXJuIG1vZF9jb2RlX3N0YXR1czsKQEAgLTM2OCwyNSArNDAxLDYgQEAKIAlyZXR1cm4gZnRyYWNlX21vZF9qbXAoaXAsIG9sZF9vZmZzZXQsIG5ld19vZmZzZXQpOwogfQogCi0jZWxzZSAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KLQotLyoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcGlja2VkIGZyb20gdGhvc2UgdXNlZCBvbgotICogdGhpcyBwYWdlIGZvciBkeW5hbWljIGZ0cmFjZS4gVGhleSBoYXZlIGJlZW4KLSAqIHNpbXBsaWZpZWQgdG8gaWdub3JlIGFsbCB0cmFjZXMgaW4gTk1JIGNvbnRleHQuCi0gKi8KLXN0YXRpYyBhdG9taWNfdCBpbl9ubWk7Ci0KLXZvaWQgZnRyYWNlX25taV9lbnRlcih2b2lkKQotewotCWF0b21pY19pbmMoJmluX25taSk7Ci19Ci0KLXZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpCi17Ci0JYXRvbWljX2RlYygmaW5fbm1pKTsKLX0KLQogI2VuZGlmIC8qICFDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAogLyoKQEAgLTM5NiwxNCArNDEwLDEzIEBACiB2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgb2xkOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKIAlpbnQgZmF1bHRlZDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKIAl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykKIAkJCQkmcmV0dXJuX3RvX2hhbmRsZXI7CiAKIAkvKiBObWkncyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZpbl9ubWkpKSkKKwlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKQEAgLTQzOSwxNyArNDUyLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKG9sZCkpKSB7Ci0JCWZ0cmFjZV9ncmFwaF9zdG9wKCk7Ci0JCSpwYXJlbnQgPSBvbGQ7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljYWxsdGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKLQkJCQlzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CisJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShvbGQsIHNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKIAkJKnBhcmVudCA9IG9sZDsKIAkJcmV0dXJuOwogCX0KQEAgLTQ2MywzICs0NjYsNjYgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nICpzeXNfY2FsbF90YWJsZTsKKworc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3lzY2FsbHNfbWV0YWRhdGE7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyAqc3lzY2FsbCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RhcnQ7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0b3A7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKworCisJc3RhcnQgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhOworCXN0b3AgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGE7CisJa2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKSBzeXNjYWxsLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCisJZm9yICggOyBzdGFydCA8IHN0b3A7IHN0YXJ0KyspIHsKKwkJaWYgKHN0YXJ0LT5uYW1lICYmICFzdHJjbXAoc3RhcnQtPm5hbWUsIHN0cikpCisJCQlyZXR1cm4gc3RhcnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzY2FsbF9ucl90b19tZXRhKGludCBucikKK3sKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhIHx8IG5yID49IEZUUkFDRV9TWVNDQUxMX01BWCB8fCBuciA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN5c2NhbGxzX21ldGFkYXRhW25yXTsKK30KKwordm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7CisJdW5zaWduZWQgbG9uZyAqKnBzeXNfc3lzY2FsbF90YWJsZSA9ICZzeXNfY2FsbF90YWJsZTsKKwlzdGF0aWMgYXRvbWljX3QgcmVmczsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmcmVmcykgIT0gMSkKKwkJZ290byBlbmQ7CisKKwlzeXNjYWxsc19tZXRhZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjYWxsc19tZXRhZGF0YSkgKgorCQkJCQlGVFJBQ0VfU1lTQ0FMTF9NQVgsIEdGUF9LRVJORUwpOworCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1lTQ0FMTF9NQVg7IGkrKykgeworCQltZXRhID0gZmluZF9zeXNjYWxsX21ldGEocHN5c19zeXNjYWxsX3RhYmxlW2ldKTsKKwkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOworCX0KKwlyZXR1cm47CisKKwkvKiBQYXJhbm9pZDogYXZvaWQgb3ZlcmZsb3cgKi8KK2VuZDoKKwlhdG9taWNfZGVjKCZyZWZzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNTViOTQ2MS4uN2I1MTY5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC02MzgsMTMgKzYzOCwxMyBAQAogI2Vsc2UKIAkJCSIJcHVzaGZcbiIKIAkJCS8qCi0JCQkgKiBTa2lwIGNzLCBpcCwgb3JpZ19heC4KKwkJCSAqIFNraXAgY3MsIGlwLCBvcmlnX2F4IGFuZCBncy4KIAkJCSAqIHRyYW1wb2xpbmVfaGFuZGxlcigpIHdpbGwgcGx1ZyBpbiB0aGVzZSB2YWx1ZXMKIAkJCSAqLwotCQkJIglzdWJsICQxMiwgJWVzcFxuIgorCQkJIglzdWJsICQxNiwgJWVzcFxuIgogCQkJIglwdXNobCAlZnNcbiIKLQkJCSIJcHVzaGwgJWRzXG4iCiAJCQkiCXB1c2hsICVlc1xuIgorCQkJIglwdXNobCAlZHNcbiIKIAkJCSIJcHVzaGwgJWVheFxuIgogCQkJIglwdXNobCAlZWJwXG4iCiAJCQkiCXB1c2hsICVlZGlcbiIKQEAgLTY1NSwxMCArNjU1LDEwIEBACiAJCQkiCW1vdmwgJWVzcCwgJWVheFxuIgogCQkJIgljYWxsIHRyYW1wb2xpbmVfaGFuZGxlclxuIgogCQkJLyogTW92ZSBmbGFncyB0byBjcyAqLwotCQkJIgltb3ZsIDUyKCVlc3ApLCAlZWR4XG4iCi0JCQkiCW1vdmwgJWVkeCwgNDgoJWVzcClcbiIKKwkJCSIJbW92bCA1NiglZXNwKSwgJWVkeFxuIgorCQkJIgltb3ZsICVlZHgsIDUyKCVlc3ApXG4iCiAJCQkvKiBSZXBsYWNlIHNhdmVkIGZsYWdzIHdpdGggdHJ1ZSByZXR1cm4gYWRkcmVzcy4gKi8KLQkJCSIJbW92bCAlZWF4LCA1MiglZXNwKVxuIgorCQkJIgltb3ZsICVlYXgsIDU2KCVlc3ApXG4iCiAJCQkiCXBvcGwgJWVieFxuIgogCQkJIglwb3BsICVlY3hcbiIKIAkJCSIJcG9wbCAlZWR4XG4iCkBAIC02NjYsOCArNjY2LDggQEAKIAkJCSIJcG9wbCAlZWRpXG4iCiAJCQkiCXBvcGwgJWVicFxuIgogCQkJIglwb3BsICVlYXhcbiIKLQkJCS8qIFNraXAgaXAsIG9yaWdfYXgsIGVzLCBkcywgZnMgKi8KLQkJCSIJYWRkbCAkMjAsICVlc3BcbiIKKwkJCS8qIFNraXAgZHMsIGVzLCBmcywgZ3MsIG9yaWdfYXggYW5kIGlwICovCisJCQkiCWFkZGwgJDI0LCAlZXNwXG4iCiAJCQkiCXBvcGZcbiIKICNlbmRpZgogCQkJIglyZXRcbiIpOwpAQCAtNjkxLDYgKzY5MSw3IEBACiAJcmVncy0+Y3MgPSBfX0tFUk5FTF9DUzsKICNlbHNlCiAJcmVncy0+Y3MgPSBfX0tFUk5FTF9DUyB8IGdldF9rZXJuZWxfcnBsKCk7CisJcmVncy0+Z3MgPSAwOwogI2VuZGlmCiAJcmVncy0+aXAgPSB0cmFtcG9saW5lX2FkZHJlc3M7CiAJcmVncy0+b3JpZ19heCA9IH4wVUw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCBjMjVmZGIzLi40NTNiNTc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKQEAgLTEyLDMxICsxMiwzMCBAQAogICoKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UgdmVyc2lvbiAyLiBTZWUgZmlsZSBDT1BZSU5HIGZvciBkZXRhaWxzLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorICovCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21pY3JvY29kZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQU1EIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJQZXRlciBPcnViYSIpOwpAQCAtNzIsOCArNzEsOCBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG1pY3JvY29kZV9hbWQgewotCXN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2FtZCBoZHI7Ci0JdW5zaWduZWQgaW50IG1wYlswXTsKKwlzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9hbWQJaGRyOworCXVuc2lnbmVkIGludAkJCW1wYlswXTsKIH07CiAKICNkZWZpbmUgVUNPREVfTUFYX1NJWkUJCQkyMDQ4CkBAIC0xODQsOCArMTgzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKmdldF9uZXh0X3Vjb2RlKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgIHVuc2lnbmVkIGludCAqbWNfc2l6ZSkKK3N0YXRpYyB2b2lkICoKK2dldF9uZXh0X3Vjb2RlKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgKm1jX3NpemUpCiB7CiAJdW5zaWduZWQgaW50IHRvdGFsX3NpemU7CiAJdTggc2VjdGlvbl9oZHJbVUNPREVfQ09OVEFJTkVSX1NFQ1RJT05fSERSXTsKQEAgLTIyMyw3ICsyMjIsNiBAQAogCXJldHVybiBtYzsKIH0KIAotCiBzdGF0aWMgaW50IGluc3RhbGxfZXF1aXZfY3B1X3RhYmxlKGNvbnN0IHU4ICpidWYpCiB7CiAJdTggKmNvbnRhaW5lcl9oZHJbVUNPREVfQ09OVEFJTkVSX0hFQURFUl9TSVpFXTsKQEAgLTM3Miw0ICszNzAsMyBAQAogewogCXJldHVybiAmbWljcm9jb2RlX2FtZF9vcHM7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKaW5kZXggYzliNzIxYi4uYTBmMzg1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKQEAgLTcwLDY3ICs3MCw3OCBAQAogICoJCUZpeCBzaWdtYXRjaCgpIG1hY3JvIHRvIGhhbmRsZSBvbGQgQ1BVcyB3aXRoIHBmID09IDAuCiAgKgkJVGhhbmtzIHRvIFN0dWFydCBTd2FsZXMgZm9yIHBvaW50aW5nIG91dCB0aGlzIGJ1Zy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21pY3JvY29kZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiTWljcm9jb2RlIFVwZGF0ZSBEcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlRpZ3JhbiBBaXZhemlhbiA8dGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIE1JQ1JPQ09ERV9WRVJTSU9OIAkiMi4wMCIKKyNkZWZpbmUgTUlDUk9DT0RFX1ZFUlNJT04JIjIuMDAiCiAKLXN0YXRpYyBzdHJ1Y3QgbWljcm9jb2RlX29wcyAqbWljcm9jb2RlX29wczsKK3N0YXRpYyBzdHJ1Y3QgbWljcm9jb2RlX29wcwkqbWljcm9jb2RlX29wczsKIAogLyogbm8gY29uY3VycmVudCAtPndyaXRlKClzIGFyZSBhbGxvd2VkIG9uIC9kZXYvY3B1L21pY3JvY29kZSAqLwogc3RhdGljIERFRklORV9NVVRFWChtaWNyb2NvZGVfbXV0ZXgpOwogCi1zdHJ1Y3QgdWNvZGVfY3B1X2luZm8gdWNvZGVfY3B1X2luZm9bTlJfQ1BVU107CitzdHJ1Y3QgdWNvZGVfY3B1X2luZm8JCXVjb2RlX2NwdV9pbmZvW05SX0NQVVNdOwogRVhQT1JUX1NZTUJPTF9HUEwodWNvZGVfY3B1X2luZm8pOwogCiAjaWZkZWYgQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFCitzdHJ1Y3QgdXBkYXRlX2Zvcl9jcHUgeworCWNvbnN0IHZvaWQgX191c2VyCSpidWY7CisJc2l6ZV90CQkJc2l6ZTsKK307CisKK3N0YXRpYyBsb25nIHVwZGF0ZV9mb3JfY3B1KHZvaWQgKl91ZmMpCit7CisJc3RydWN0IHVwZGF0ZV9mb3JfY3B1ICp1ZmMgPSBfdWZjOworCWludCBlcnJvcjsKKworCWVycm9yID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfdXNlcihzbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCQkgICAgICB1ZmMtPmJ1ZiwgdWZjLT5zaXplKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKCFlcnJvcikKKwkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGVycm9yOworfQorCiBzdGF0aWMgaW50IGRvX21pY3JvY29kZV91cGRhdGUoY29uc3Qgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0JY3B1bWFza190IG9sZDsKIAlpbnQgZXJyb3IgPSAwOwogCWludCBjcHU7Ci0KLQlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisJc3RydWN0IHVwZGF0ZV9mb3JfY3B1IHVmYyA9IHsgLmJ1ZiA9IGJ1ZiwgLnNpemUgPSBzaXplIH07CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OwogCiAJCWlmICghdWNpLT52YWxpZCkKIAkJCWNvbnRpbnVlOwotCi0JCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKLQkJZXJyb3IgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV91c2VyKGNwdSwgYnVmLCBzaXplKTsKKwkJZXJyb3IgPSB3b3JrX29uX2NwdShjcHUsIHVwZGF0ZV9mb3JfY3B1LCAmdWZjKTsKIAkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlpZiAoIWVycm9yKQotCQkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKGNwdSk7CisJCQlicmVhazsKIAl9Ci1vdXQ6Ci0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xOTgsMTggKzIwOSwzMyBAQAogCiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihNSUNST0NPREVfTUlOT1IpOwogI2Vsc2UKLSNkZWZpbmUgbWljcm9jb2RlX2Rldl9pbml0KCkgMAotI2RlZmluZSBtaWNyb2NvZGVfZGV2X2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1pY3JvY29kZV9kZXZfaW5pdCgpCTAKKyNkZWZpbmUgbWljcm9jb2RlX2Rldl9leGl0KCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIGZha2UgZGV2aWNlIGZvciByZXF1ZXN0X2Zpcm13YXJlICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWljcm9jb2RlX3BkZXY7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbWljcm9jb2RlX3BkZXY7CisKK3N0YXRpYyBsb25nIHJlbG9hZF9mb3JfY3B1KHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmbWljcm9jb2RlX211dGV4KTsKKwlpZiAodWNpLT52YWxpZCkgeworCQllcnIgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV9mdyhzbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCQkJICAmbWljcm9jb2RlX3BkZXYtPmRldik7CisJCWlmICghZXJyKQorCQkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgc3NpemVfdCByZWxvYWRfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzeikKIHsKLQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgZGV2LT5pZDsKIAljaGFyICplbmQ7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmQsIDApOwogCWludCBlcnIgPSAwOwpAQCAtMjE4LDIxICsyNDQsOSBAQAogCWlmIChlbmQgPT0gYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmFsID09IDEpIHsKLQkJY3B1bWFza190IG9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQogCQlnZXRfb25saW5lX2NwdXMoKTsKLQkJaWYgKGNwdV9vbmxpbmUoY3B1KSkgewotCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwotCQkJbXV0ZXhfbG9jaygmbWljcm9jb2RlX211dGV4KTsKLQkJCWlmICh1Y2ktPnZhbGlkKSB7Ci0JCQkJZXJyID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfZncoY3B1LAotCQkJCQkJJm1pY3JvY29kZV9wZGV2LT5kZXYpOwotCQkJCWlmICghZXJyKQotCQkJCQltaWNyb2NvZGVfb3BzLT5hcHBseV9taWNyb2NvZGUoY3B1KTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKLQkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGQpOwotCQl9CisJCWlmIChjcHVfb25saW5lKGNwdSkpCisJCQllcnIgPSB3b3JrX29uX2NwdShjcHUsIHJlbG9hZF9mb3JfY3B1LCBOVUxMKTsKIAkJcHV0X29ubGluZV9jcHVzKCk7CiAJfQogCWlmIChlcnIpCkBAIC0yNjgsOCArMjgyLDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1jX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gbWNfZGVmYXVsdF9hdHRycywKLQkubmFtZSA9ICJtaWNyb2NvZGUiLAorCS5hdHRycwkJPSBtY19kZWZhdWx0X2F0dHJzLAorCS5uYW1lCQk9ICJtaWNyb2NvZGUiLAogfTsKIAogc3RhdGljIHZvaWQgX19taWNyb2NvZGVfZmluaV9jcHUoaW50IGNwdSkKQEAgLTMyOCw5ICszNDIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtaWNyb2NvZGVfdXBkYXRlX2NwdShpbnQgY3B1KQorc3RhdGljIGxvbmcgbWljcm9jb2RlX3VwZGF0ZV9jcHUodm9pZCAqdW51c2VkKQogewotCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHU7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyID0gMDsKIAogCS8qCkBAIC0zMzgsMzAgKzM1MiwyNyBAQAogCSAqIG90aGVyd2lzZSBqdXN0IHJlcXVlc3QgYSBmaXJtd2FyZToKIAkgKi8KIAlpZiAodWNpLT52YWxpZCkgewotCQllcnIgPSBtaWNyb2NvZGVfcmVzdW1lX2NwdShjcHUpOwotCX0gZWxzZSB7CQotCQljb2xsZWN0X2NwdV9pbmZvKGNwdSk7CisJCWVyciA9IG1pY3JvY29kZV9yZXN1bWVfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfSBlbHNlIHsKKwkJY29sbGVjdF9jcHVfaW5mbyhzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQlpZiAodWNpLT52YWxpZCAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCi0JCQllcnIgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV9mdyhjcHUsCisJCQllcnIgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV9mdygKKwkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkJCQkmbWljcm9jb2RlX3BkZXYtPmRldik7CiAJfQogCWlmICghZXJyKQotCQltaWNyb2NvZGVfb3BzLT5hcHBseV9taWNyb2NvZGUoY3B1KTsKKwkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbWljcm9jb2RlX2luaXRfY3B1KGludCBjcHUpCitzdGF0aWMgaW50IG1pY3JvY29kZV9pbml0X2NwdShpbnQgY3B1KQogewotCWNwdW1hc2tfdCBvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0KLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7Ci0JLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLwotCUJVR19PTihyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSk7Ci0KKwlpbnQgZXJyOwogCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7Ci0JbWljcm9jb2RlX3VwZGF0ZV9jcHUoY3B1KTsKKwllcnIgPSB3b3JrX29uX2NwdShjcHUsIG1pY3JvY29kZV91cGRhdGVfY3B1LCBOVUxMKTsKIAltdXRleF91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7CiAKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG1jX3N5c2Rldl9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCkBAIC0zNzksOCArMzkwLDExIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCW1pY3JvY29kZV9pbml0X2NwdShjcHUpOwotCXJldHVybiAwOworCWVyciA9IG1pY3JvY29kZV9pbml0X2NwdShjcHUpOworCWlmIChlcnIpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBtY19zeXNkZXZfcmVtb3ZlKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2KQpAQCAtNDA0LDE0ICs0MTgsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBvbmx5IENQVSAwIHdpbGwgYXBwbHkgdWNvZGUgaGVyZSAqLwotCW1pY3JvY29kZV91cGRhdGVfY3B1KDApOworCW1pY3JvY29kZV91cGRhdGVfY3B1KE5VTEwpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgbWNfc3lzZGV2X2RyaXZlciA9IHsKLQkuYWRkID0gbWNfc3lzZGV2X2FkZCwKLQkucmVtb3ZlID0gbWNfc3lzZGV2X3JlbW92ZSwKLQkucmVzdW1lID0gbWNfc3lzZGV2X3Jlc3VtZSwKKwkuYWRkCQk9IG1jX3N5c2Rldl9hZGQsCisJLnJlbW92ZQkJPSBtY19zeXNkZXZfcmVtb3ZlLAorCS5yZXN1bWUJCT0gbWNfc3lzZGV2X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBfX2NwdWluaXQgaW50CkBAIC00MjQsNyArNDM4LDkgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKIAljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQltaWNyb2NvZGVfaW5pdF9jcHUoY3B1KTsKKwkJaWYgKG1pY3JvY29kZV9pbml0X2NwdShjcHUpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGZhaWxlZCB0byBpbml0IENQVSVkXG4iLAorCQkJICAgICAgIGNwdSk7CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CiAJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgogCQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBhZGRlZFxuIiwgY3B1KTsKQEAgLTQ0OCw3ICs0NjQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fcmVmZGF0YSBtY19jcHVfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBtY19jcHVfY2FsbGJhY2ssCisJLm5vdGlmaWVyX2NhbGwJPSBtY19jcHVfY2FsbGJhY2ssCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtaWNyb2NvZGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCmluZGV4IDVlOWY0ZmMuLjE0OWI5ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKQEAgLTcwLDI4ICs3MCwyOCBAQAogICoJCUZpeCBzaWdtYXRjaCgpIG1hY3JvIHRvIGhhbmRsZSBvbGQgQ1BVcyB3aXRoIHBmID09IDAuCiAgKgkJVGhhbmtzIHRvIFN0dWFydCBTd2FsZXMgZm9yIHBvaW50aW5nIG91dCB0aGlzIGJ1Zy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4iKTsKQEAgLTEyOSwxMiArMTI5LDEzIEBACiAJc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSBzaWdzWzBdOwogfTsKIAotI2RlZmluZSBERUZBVUxUX1VDT0RFX0RBVEFTSVpFIAkoMjAwMCkKKyNkZWZpbmUgREVGQVVMVF9VQ09ERV9EQVRBU0laRQkoMjAwMCkKICNkZWZpbmUgTUNfSEVBREVSX1NJWkUJCShzaXplb2Yoc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfaW50ZWwpKQogI2RlZmluZSBERUZBVUxUX1VDT0RFX1RPVEFMU0laRSAoREVGQVVMVF9VQ09ERV9EQVRBU0laRSArIE1DX0hFQURFUl9TSVpFKQogI2RlZmluZSBFWFRfSEVBREVSX1NJWkUJCShzaXplb2Yoc3RydWN0IGV4dGVuZGVkX3NpZ3RhYmxlKSkKICNkZWZpbmUgRVhUX1NJR05BVFVSRV9TSVpFCShzaXplb2Yoc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSkpCiAjZGVmaW5lIERXU0laRQkJCShzaXplb2YodTMyKSkKKwogI2RlZmluZSBnZXRfdG90YWxzaXplKG1jKSBcCiAJKCgoc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqKW1jKS0+aGRyLnRvdGFsc2l6ZSA/IFwKIAkgKChzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICopbWMpLT5oZHIudG90YWxzaXplIDogXApAQCAtMTk3LDMwICsxOTgsMzEgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLXVwZGF0ZV9tYXRjaF9yZXZpc2lvbihzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9pbnRlbCAqbWNfaGVhZGVyLAlpbnQgcmV2KQordXBkYXRlX21hdGNoX3JldmlzaW9uKHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2ludGVsICptY19oZWFkZXIsIGludCByZXYpCiB7CiAJcmV0dXJuIChtY19oZWFkZXItPnJldiA8PSByZXYpID8gMCA6IDE7CiB9CiAKIHN0YXRpYyBpbnQgbWljcm9jb2RlX3Nhbml0eV9jaGVjayh2b2lkICptYykKIHsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemUsIGRhdGFfc2l6ZSwgZXh0X3RhYmxlX3NpemU7CiAJc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfaW50ZWwgKm1jX2hlYWRlciA9IG1jOwogCXN0cnVjdCBleHRlbmRlZF9zaWd0YWJsZSAqZXh0X2hlYWRlciA9IE5VTEw7Ci0Jc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSAqZXh0X3NpZzsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemUsIGRhdGFfc2l6ZSwgZXh0X3RhYmxlX3NpemU7CiAJaW50IHN1bSwgb3JpZ19zdW0sIGV4dF9zaWdjb3VudCA9IDAsIGk7CisJc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSAqZXh0X3NpZzsKIAogCXRvdGFsX3NpemUgPSBnZXRfdG90YWxzaXplKG1jX2hlYWRlcik7CiAJZGF0YV9zaXplID0gZ2V0X2RhdGFzaXplKG1jX2hlYWRlcik7CisKIAlpZiAoZGF0YV9zaXplICsgTUNfSEVBREVSX1NJWkUgPiB0b3RhbF9zaXplKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgotCQkJIkJhZCBkYXRhIHNpemUgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CisJCQkJIkJhZCBkYXRhIHNpemUgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChtY19oZWFkZXItPmxkcnZlciAhPSAxIHx8IG1jX2hlYWRlci0+aGRydmVyICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISAiCi0JCQkiVW5rbm93biBtaWNyb2NvZGUgdXBkYXRlIGZvcm1hdFxuIik7CisJCQkJIlVua25vd24gbWljcm9jb2RlIHVwZGF0ZSBmb3JtYXRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZXh0X3RhYmxlX3NpemUgPSB0b3RhbF9zaXplIC0gKE1DX0hFQURFUl9TSVpFICsgZGF0YV9zaXplKTsKQEAgLTMxOCwxMSArMzIwLDE1IEBACiAKIHN0YXRpYyB2b2lkIGFwcGx5X21pY3JvY29kZShpbnQgY3B1KQogeworCXN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKm1jX2ludGVsOworCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHZhbFsyXTsKLQlpbnQgY3B1X251bSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKLQlzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICptY19pbnRlbCA9IHVjaS0+bWM7CisJaW50IGNwdV9udW07CisKKwljcHVfbnVtID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwl1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKKwltY19pbnRlbCA9IHVjaS0+bWM7CiAKIAkvKiBXZSBzaG91bGQgYmluZCB0aGUgdGFzayB0byB0aGUgQ1BVICovCiAJQlVHX09OKGNwdV9udW0gIT0gY3B1KTsKQEAgLTM0OCwxNSArMzU0LDE3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWljcm9jb2RlX3VwZGF0ZV9sb2NrLCBmbGFncyk7CiAJaWYgKHZhbFsxXSAhPSBtY19pbnRlbC0+aGRyLnJldikgewogCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogQ1BVJWQgdXBkYXRlIGZyb20gcmV2aXNpb24gIgotCQkJIjB4JXggdG8gMHgleCBmYWlsZWRcbiIsIGNwdV9udW0sIHVjaS0+Y3B1X3NpZy5yZXYsIHZhbFsxXSk7CisJCQkJIjB4JXggdG8gMHgleCBmYWlsZWRcbiIsCisJCQljcHVfbnVtLCB1Y2ktPmNwdV9zaWcucmV2LCB2YWxbMV0pOwogCQlyZXR1cm47CiAJfQogCXByaW50ayhLRVJOX0lORk8gIm1pY3JvY29kZTogQ1BVJWQgdXBkYXRlZCBmcm9tIHJldmlzaW9uICIKLQkgICAgICAgIjB4JXggdG8gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4IFxuIiwKKwkJCSAiMHgleCB0byAweCV4LCBkYXRlID0gJTA0eC0lMDJ4LSUwMnggXG4iLAogCQljcHVfbnVtLCB1Y2ktPmNwdV9zaWcucmV2LCB2YWxbMV0sCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSAmIDB4ZmZmZiwKIAkJbWNfaW50ZWwtPmhkci5kYXRlID4+IDI0LAogCQkobWNfaW50ZWwtPmhkci5kYXRlID4+IDE2KSAmIDB4ZmYpOworCiAJdWNpLT5jcHVfc2lnLnJldiA9IHZhbFsxXTsKIH0KIApAQCAtNDA0LDE4ICs0MTIsMjMgQEAKIAkJbGVmdG92ZXIgIC09IG1jX3NpemU7CiAJfQogCi0JaWYgKG5ld19tYykgewotCQlpZiAoIWxlZnRvdmVyKSB7Ci0JCQlpZiAodWNpLT5tYykKLQkJCQl2ZnJlZSh1Y2ktPm1jKTsKLQkJCXVjaS0+bWMgPSAoc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqKW5ld19tYzsKLQkJCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIGZvdW5kIGEgbWF0Y2hpbmcgbWljcm9jb2RlIHVwZGF0ZSB3aXRoIgotCQkJCSAiIHZlcnNpb24gMHgleCAoY3VycmVudD0weCV4KVxuIiwKLQkJCQljcHUsIG5ld19yZXYsIHVjaS0+Y3B1X3NpZy5yZXYpOwotCQl9IGVsc2UKLQkJCXZmcmVlKG5ld19tYyk7CisJaWYgKCFuZXdfbWMpCisJCWdvdG8gb3V0OworCisJaWYgKGxlZnRvdmVyKSB7CisJCXZmcmVlKG5ld19tYyk7CisJCWdvdG8gb3V0OwogCX0KIAorCWlmICh1Y2ktPm1jKQorCQl2ZnJlZSh1Y2ktPm1jKTsKKwl1Y2ktPm1jID0gKHN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKiluZXdfbWM7CisKKwlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBmb3VuZCBhIG1hdGNoaW5nIG1pY3JvY29kZSB1cGRhdGUgd2l0aCIKKwkJICIgdmVyc2lvbiAweCV4IChjdXJyZW50PTB4JXgpXG4iLAorCQkJY3B1LCBuZXdfcmV2LCB1Y2ktPmNwdV9zaWcucmV2KTsKKworIG91dDoKIAlyZXR1cm4gKGludClsZWZ0b3ZlcjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTU2Zjg3NTguLmNhOTg5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CkBAIC0yMiw2ICsyMiw5IEBACiAKIHN0cnVjdCBrbWVtX2NhY2hlICp0YXNrX3hzdGF0ZV9jYWNoZXA7CiAKK0RFRklORV9UUkFDRShwb3dlcl9zdGFydCk7CitERUZJTkVfVFJBQ0UocG93ZXJfZW5kKTsKKwogaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYykKIHsKIAkqZHN0ID0gKnNyYzsKQEAgLTMyNSw3ICszMjgsNyBAQAogCS8qCiAJICogUmVtb3ZlIHRoaXMgQ1BVOgogCSAqLwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCksIGZhbHNlKTsKIAlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKIAogCWZvciAoOzspIHsKQEAgLTQ3NSwxMiArNDc4LDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBjcHVtYXNrX3QgYzFlX21hc2sgPSBDUFVfTUFTS19OT05FOworc3RhdGljIGNwdW1hc2tfdmFyX3QgYzFlX21hc2s7CiBzdGF0aWMgaW50IGMxZV9kZXRlY3RlZDsKIAogdm9pZCBjMWVfcmVtb3ZlX2NwdShpbnQgY3B1KQogewotCWNwdV9jbGVhcihjcHUsIGMxZV9tYXNrKTsKKwlpZiAoYzFlX21hc2sgIT0gTlVMTCkKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBjMWVfbWFzayk7CiB9CiAKIC8qCkBAIC01MDksOCArNTEzLDggQEAKIAlpZiAoYzFlX2RldGVjdGVkKSB7CiAJCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQkJaWYgKCFjcHVfaXNzZXQoY3B1LCBjMWVfbWFzaykpIHsKLQkJCWNwdV9zZXQoY3B1LCBjMWVfbWFzayk7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGMxZV9tYXNrKSkgeworCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgYzFlX21hc2spOwogCQkJLyoKIAkJCSAqIEZvcmNlIGJyb2FkY2FzdCBzbyBBQ1BJIGNhbiBub3QgaW50ZXJmZXJlLiBOZWVkcwogCQkJICogdG8gcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFzIGl0IHVzZXMKQEAgLTU2Miw2ICs1NjYsMTUgQEAKIAkJcG1faWRsZSA9IGRlZmF1bHRfaWRsZTsKIH0KIAordm9pZCBfX2luaXQgaW5pdF9jMWVfbWFzayh2b2lkKQoreworCS8qIElmIHdlJ3JlIHVzaW5nIGMxZV9pZGxlLCB3ZSBuZWVkIHRvIGFsbG9jYXRlIGMxZV9tYXNrLiAqLworCWlmIChwbV9pZGxlID09IGMxZV9pZGxlKSB7CisJCWFsbG9jX2NwdW1hc2tfdmFyKCZjMWVfbWFzaywgR0ZQX0tFUk5FTCk7CisJCWNwdW1hc2tfY2xlYXIoYzFlX21hc2spOworCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgaWRsZV9zZXR1cChjaGFyICpzdHIpCiB7CiAJaWYgKCFzdHIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYjdjYzIxYi4uZmU5MzQ1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMTQxNSw2ICsxNDE2LDkgQEAKIAkgICAgdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKQogCQlyZXQgPSAtMUw7CiAKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9GVFJBQ0UpKSkKKwkJZnRyYWNlX3N5c2NhbGxfZW50ZXIocmVncyk7CisKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKIAkJaWYgKElTX0lBMzIpCiAJCQlhdWRpdF9zeXNjYWxsX2VudHJ5KEFVRElUX0FSQ0hfSTM4NiwKQEAgLTE0MzgsNiArMTQ0Miw5IEBACiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQogCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+YXgpLCByZWdzLT5heCk7CiAKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9GVFJBQ0UpKSkKKwkJZnRyYWNlX3N5c2NhbGxfZXhpdChyZWdzKTsKKwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGVmN2QxMDEuLjU4ZDI0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMTAxLDExICsxMDEsMTEgQEAKIERFRklORV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCkgPSBCQURfQVBJQ0lEOwogCiAvKiByZXByZXNlbnRpbmcgSFQgc2libGluZ3Mgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOworREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X3NpYmxpbmdfbWFwKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfc2libGluZ19tYXApOwogCiAvKiByZXByZXNlbnRpbmcgSFQgYW5kIGNvcmUgc2libGluZ3Mgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOworREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X2NvcmVfbWFwKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfY29yZV9tYXApOwogCiAvKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCkBAIC0xMTUsMTEgKzExNSw2IEBACiBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQ7CiAKICNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCi0KLS8qIHdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMgKi8KLWNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2tfbWFwW01BWF9OVU1OT0RFU10gX19yZWFkX21vc3RseSA9Ci0JCQkJeyBbMCAuLi4gTUFYX05VTU5PREVTLTFdID0gQ1BVX01BU0tfTk9ORSB9OwotRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2tfbWFwKTsKIC8qIHdoaWNoIG5vZGUgZWFjaCBsb2dpY2FsIENQVSBpcyBvbiAqLwogaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IDAgfTsKIEVYUE9SVF9TWU1CT0woY3B1X3RvX25vZGVfbWFwKTsKQEAgLTEyOCw3ICsxMjMsNyBAQAogc3RhdGljIHZvaWQgbWFwX2NwdV90b19ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCXByaW50ayhLRVJOX0lORk8gIk1hcHBpbmcgY3B1ICVkIHRvIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7Ci0JY3B1bWFza19zZXRfY3B1KGNwdSwgJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOwogCWNwdV90b19ub2RlX21hcFtjcHVdID0gbm9kZTsKIH0KIApAQCAtMTM5LDcgKzEzNCw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJVbm1hcHBpbmcgY3B1ICVkIGZyb20gYWxsIG5vZGVzXG4iLCBjcHUpOwogCWZvciAobm9kZSA9IDA7IG5vZGUgPCBNQVhfTlVNTk9ERVM7IG5vZGUrKykKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSAwOwogfQogI2Vsc2UgLyogIShDT05GSUdfTlVNQSAmJiBDT05GSUdfWDg2XzMyKSAqLwpAQCAtMzAxLDcgKzI5Niw3IEBACiAJX19mbHVzaF90bGJfYWxsKCk7CiAjZW5kaWYKIAotCS8qIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBzZXR0aW5nIGNwdV9vbmxpbmVfbWFwICovCisJLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXNrICovCiAJc2V0X2NwdV9zaWJsaW5nX21hcChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl3bWIoKTsKIApAQCAtMzM0LDYgKzMyOSwyMyBAQAogCWNwdV9pZGxlKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworLyogSW4gdGhpcyBjYXNlLCBsbGNfc2hhcmVkX21hcCBpcyBhIHBvaW50ZXIgdG8gYSBjcHVtYXNrLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfY3B1aW5mb194ODYoc3RydWN0IGNwdWluZm9feDg2ICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqc3JjKQoreworCXN0cnVjdCBjcHVtYXNrICpsbGMgPSBkc3QtPmxsY19zaGFyZWRfbWFwOworCSpkc3QgPSAqc3JjOworCWRzdC0+bGxjX3NoYXJlZF9tYXAgPSBsbGM7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlfY3B1aW5mb194ODYoc3RydWN0IGNwdWluZm9feDg2ICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqc3JjKQoreworCSpkc3QgPSAqc3JjOworfQorI2VuZGlmIC8qIENPTkZJR19DUFVNQVNLX09GRlNUQUNLICovCisKIC8qCiAgKiBUaGUgYm9vdHN0cmFwIGtlcm5lbCBlbnRyeSBjb2RlIGhhcyBzZXQgdGhlc2UgdXAuIFNhdmUgdGhlbSBmb3IKICAqIGEgZ2l2ZW4gQ1BVCkBAIC0zNDMsNyArMzU1LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoaWQpOwogCi0JKmMgPSBib290X2NwdV9kYXRhOworCWNvcHlfY3B1aW5mb194ODYoYywgJmJvb3RfY3B1X2RhdGEpOwogCWMtPmNwdV9pbmRleCA9IGlkOwogCWlmIChpZCAhPSAwKQogCQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwpAQCAtMzY3LDE1ICszNzksMTUgQEAKIAkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjcHVfc2libGluZ19tYXNrKGkpKTsKIAkJCQljcHVtYXNrX3NldF9jcHUoaSwgY3B1X2NvcmVfbWFzayhjcHUpKTsKIAkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjcHVfY29yZV9tYXNrKGkpKTsKLQkJCQljcHVtYXNrX3NldF9jcHUoaSwgJmMtPmxsY19zaGFyZWRfbWFwKTsKLQkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmby0+bGxjX3NoYXJlZF9tYXApOworCQkJCWNwdW1hc2tfc2V0X2NwdShpLCBjLT5sbGNfc2hhcmVkX21hcCk7CisJCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgby0+bGxjX3NoYXJlZF9tYXApOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJY3B1bWFza19zZXRfY3B1KGNwdSwgY3B1X3NpYmxpbmdfbWFzayhjcHUpKTsKIAl9CiAKLQljcHVtYXNrX3NldF9jcHUoY3B1LCAmYy0+bGxjX3NoYXJlZF9tYXApOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIGMtPmxsY19zaGFyZWRfbWFwKTsKIAogCWlmIChjdXJyZW50X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPT0gMSkgewogCQljcHVtYXNrX2NvcHkoY3B1X2NvcmVfbWFzayhjcHUpLCBjcHVfc2libGluZ19tYXNrKGNwdSkpOwpAQCAtMzg2LDggKzM5OCw4IEBACiAJZm9yX2VhY2hfY3B1KGksIGNwdV9zaWJsaW5nX3NldHVwX21hc2spIHsKIAkJaWYgKHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSAhPSBCQURfQVBJQ0lEICYmCiAJCSAgICBwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPT0gcGVyX2NwdShjcHVfbGxjX2lkLCBpKSkgewotCQkJY3B1bWFza19zZXRfY3B1KGksICZjLT5sbGNfc2hhcmVkX21hcCk7Ci0JCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOworCQkJY3B1bWFza19zZXRfY3B1KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwdV9kYXRhKGkpLmxsY19zaGFyZWRfbWFwKTsKIAkJfQogCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IGNwdV9kYXRhKGkpLnBoeXNfcHJvY19pZCkgewogCQkJY3B1bWFza19zZXRfY3B1KGksIGNwdV9jb3JlX21hc2soY3B1KSk7CkBAIC00MjUsMTIgKzQzNyw3IEBACiAJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCiAJCXJldHVybiBjcHVfY29yZV9tYXNrKGNwdSk7CiAJZWxzZQotCQlyZXR1cm4gJmMtPmxsY19zaGFyZWRfbWFwOwotfQotCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAoaW50IGNwdSkKLXsKLQlyZXR1cm4gKmNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpOworCQlyZXR1cm4gYy0+bGxjX3NoYXJlZF9tYXA7CiB9CiAKIHN0YXRpYyB2b2lkIGltcHJlc3NfZnJpZW5kcyh2b2lkKQpAQCAtODk3LDkgKzkwNCw4IEBACiAgKi8KIHN0YXRpYyBfX2luaXQgdm9pZCBkaXNhYmxlX3NtcCh2b2lkKQogewotCS8qIHVzZSB0aGUgcmVhZC93cml0ZSBwb2ludGVycyB0byB0aGUgcHJlc2VudCBhbmQgcG9zc2libGUgbWFwcyAqLwotCWNwdW1hc2tfY29weSgmY3B1X3ByZXNlbnRfbWFwLCBjcHVtYXNrX29mKDApKTsKLQljcHVtYXNrX2NvcHkoJmNwdV9wb3NzaWJsZV9tYXAsIGNwdW1hc2tfb2YoMCkpOworCWluaXRfY3B1X3ByZXNlbnQoY3B1bWFza19vZigwKSk7CisJaW5pdF9jcHVfcG9zc2libGUoY3B1bWFza19vZigwKSk7CiAJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKIAogCWlmIChzbXBfZm91bmRfY29uZmlnKQpAQCAtMTAzMSw2ICsxMDM3LDggQEAKICAqLwogdm9pZCBfX2luaXQgbmF0aXZlX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogeworCXVuc2lnbmVkIGludCBpOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc21wX2NwdV9pbmRleF9kZWZhdWx0KCk7CiAJY3VycmVudF9jcHVfZGF0YSA9IGJvb3RfY3B1X2RhdGE7CkBAIC0xMDQ0LDYgKzEwNTIsMTQgQEAKIAlib290X2NwdV9sb2dpY2FsX2FwaWNpZCA9IGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOwogI2VuZGlmCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSAwOyAgLyogbmVlZGVkPyAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWFsbG9jX2NwdW1hc2tfdmFyKCZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIEdGUF9LRVJORUwpOworCQlhbGxvY19jcHVtYXNrX3ZhcigmcGVyX2NwdShjcHVfY29yZV9tYXAsIGkpLCBHRlBfS0VSTkVMKTsKKwkJYWxsb2NfY3B1bWFza192YXIoJmNwdV9kYXRhKGkpLmxsY19zaGFyZWRfbWFwLCBHRlBfS0VSTkVMKTsKKwkJY3B1bWFza19jbGVhcihwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOworCQljcHVtYXNrX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSk7CisJCWNwdW1hc2tfY2xlYXIoY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOworCX0KIAlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwogCiAJZW5hYmxlX0lSX3gyYXBpYygpOwpAQCAtMTEzMiwxMSArMTE0OCwxMSBAQAogCiAKIC8qCi0gKiBjcHVfcG9zc2libGVfbWFwIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKKyAqIGNwdV9wb3NzaWJsZV9tYXNrIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKICAqIGFyZSBvbmxpbmVkLCBvciBvZmZsaW5lZC4gVGhlIHJlYXNvbiBpcyBwZXItY3B1IGRhdGEtc3RydWN0dXJlcwogICogYXJlIGFsbG9jYXRlZCBieSBzb21lIG1vZHVsZXMgYXQgaW5pdCB0aW1lLCBhbmQgZG9udCBleHBlY3QgdG8KICAqIGRvIHRoaXMgZHluYW1pY2FsbHkgb24gY3B1IGFycml2YWwvZGVwYXJ0dXJlLgotICogY3B1X3ByZXNlbnRfbWFwIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBjaGFuZ2UgZHluYW1pY2FsbHkuCisgKiBjcHVfcHJlc2VudF9tYXNrIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBjaGFuZ2UgZHluYW1pY2FsbHkuCiAgKiBJbiBjYXNlIHdoZW4gY3B1X2hvdHBsdWcgaXMgbm90IGNvbXBpbGVkLCB0aGVuIHdlIHJlc29ydCB0byBjdXJyZW50CiAgKiBiZWhhdmlvdXIsIHdoaWNoIGlzIGNwdV9wb3NzaWJsZSA9PSBjcHVfcHJlc2VudC4KICAqIC0gQXNob2sgUmFqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKaW5kZXggNzljMDczMi4uZGViNWViYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwpAQCAtMjc1LDYgKzI3NSw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCB1dl9mbHVzaF90bGJfbWFzayk7CisKIC8qKgogICogdXZfZmx1c2hfdGxiX290aGVycyAtIGdsb2JhbGx5IHB1cmdlIHRyYW5zbGF0aW9uIGNhY2hlIG9mIGEgdmlydHVhbAogICogYWRkcmVzcyBvciBhbGwgVExCJ3MKQEAgLTMwNCw4ICszMDYsNyBAQAogCQkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgZmx1c2hfdGxiX21hc2spOwotCXN0cnVjdCBjcHVtYXNrICpmbHVzaF9tYXNrID0gJl9fZ2V0X2NwdV92YXIoZmx1c2hfdGxiX21hc2spOworCXN0cnVjdCBjcHVtYXNrICpmbHVzaF9tYXNrID0gX19nZXRfY3B1X3Zhcih1dl9mbHVzaF90bGJfbWFzayk7CiAJaW50IGk7CiAJaW50IGJpdDsKIAlpbnQgYmxhZGU7CkBAIC03NTUsNiArNzU2LDEwIEBACiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIDA7CiAKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3VyX2NwdSkKKwkJYWxsb2NfY3B1bWFza192YXJfbm9kZSgmcGVyX2NwdSh1dl9mbHVzaF90bGJfbWFzaywgY3VyX2NwdSksCisJCQkJICAgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGN1cl9jcHUpKTsKKwogCXV2X2JhdV9yZXRyeV9saW1pdCA9IDE7CiAJdXZfbnNoaWZ0ID0gdXZfaHViX2luZm8tPm5fdmFsOwogCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggMGEzMDNjMy4uYTU4NTA0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKKysrIGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTU5LDcgKzU5LDggQEAKIAogY29uZmlnIEtWTV9UUkFDRQogCWJvb2wgIktWTSB0cmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gS1ZNICYmIE1BUktFUlMgJiYgU1lTRlMKKwlkZXBlbmRzIG9uIEtWTSAmJiBTWVNGUworCXNlbGVjdCBNQVJLRVJTCiAJc2VsZWN0IFJFTEFZCiAJc2VsZWN0IERFQlVHX0ZTCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZSBiL2FyY2gveDg2L21tL01ha2VmaWxlCmluZGV4IDA4NTM3NzQuLmZkZDMwZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L21tL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiBtbWlvdHJhY2UteQkJCTo9IGttbWlvLm8gcGZfaW4ubyBtbWlvLW1vZC5vCiBvYmotJChDT05GSUdfTU1JT1RSQUNFX1RFU1QpCSs9IHRlc3RtbWlvdHJhY2UubwogCi1vYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWFfJChCSVRTKS5vCitvYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWEubyBudW1hXyQoQklUUykubwogb2JqLSQoQ09ORklHX0s4X05VTUEpCQkrPSBrOHRvcG9sb2d5XzY0Lm8KIG9iai0kKENPTkZJR19BQ1BJX05VTUEpCQkrPSBzcmF0XyQoQklUUykubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggZGI4MWU5YS4uNzQ5NTU5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtMTA1NCwxNyArMTA1NCw0NyBAQAogY29uc3QgaW50IHJvZGF0YV90ZXN0X2RhdGEgPSAweEMzOwogRVhQT1JUX1NZTUJPTF9HUEwocm9kYXRhX3Rlc3RfZGF0YSk7CiAKK3N0YXRpYyBpbnQga2VybmVsX3NldF90b19yZWFkb25seTsKKwordm9pZCBzZXRfa2VybmVsX3RleHRfcncodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF90ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQRk5fQUxJR04oX2V0ZXh0KSAtIHN0YXJ0OworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgd3JpdGVcbiIsCisJCSBzdGFydCwgc3RhcnQrc2l6ZSk7CisKKwlzZXRfcGFnZXNfcncodmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKK30KKwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF90ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQRk5fQUxJR04oX2V0ZXh0KSAtIHN0YXJ0OworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgb25seVxuIiwKKwkJIHN0YXJ0LCBzdGFydCtzaXplKTsKKworCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplID4+IFBBR0VfU0hJRlQpOworfQorCiB2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9BTElHTihfdGV4dCk7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gUEZOX0FMSUdOKF9ldGV4dCkgLSBzdGFydDsKIAotI2lmbmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLQkvKiBEeW5hbWljIHRyYWNpbmcgbW9kaWZpZXMgdGhlIGtlcm5lbCB0ZXh0IHNlY3Rpb24gKi8KIAlzZXRfcGFnZXNfcm8odmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlwcmludGsoS0VSTl9JTkZPICJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgdGV4dDogJWx1a1xuIiwKIAkJc2l6ZSA+PiAxMCk7CiAKKwlrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTsKKwogI2lmZGVmIENPTkZJR19DUEFfREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIENQQTogUmV2ZXJ0aW5nICVseC0lbHhcbiIsCiAJCXN0YXJ0LCBzdGFydCtzaXplKTsKQEAgLTEwNzMsNyArMTEwMyw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVGVzdGluZyBDUEE6IHdyaXRlIHByb3RlY3RpbmcgYWdhaW5cbiIpOwogCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplPj5QQUdFX1NISUZUKTsKICNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAJc3RhcnQgKz0gc2l6ZTsKIAlzaXplID0gKHVuc2lnbmVkIGxvbmcpX19lbmRfcm9kYXRhIC0gc3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggNTRlZmE1N2QuLjE3NTNlODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTczNCwyMSArNzM0LDQ4IEBACiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YSA9IDB4QzM7CiBFWFBPUlRfU1lNQk9MX0dQTChyb2RhdGFfdGVzdF9kYXRhKTsKIAorc3RhdGljIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5OworCit2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3N0ZXh0KTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IFBGTl9BTElHTihfX3N0YXJ0X3JvZGF0YSk7CisKKwlpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpCisJCXJldHVybjsKKworCXByX2RlYnVnKCJTZXQga2VybmVsIHRleHQ6ICVseCAtICVseCBmb3IgcmVhZCB3cml0ZVxuIiwKKwkJIHN0YXJ0LCBlbmQpOworCisJc2V0X21lbW9yeV9ydyhzdGFydCwgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKK30KKwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF9zdGV4dCk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBQRk5fQUxJR04oX19zdGFydF9yb2RhdGEpOworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgb25seVxuIiwKKwkJIHN0YXJ0LCBlbmQpOworCisJc2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKK30KKwogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3N0ZXh0KSwgZW5kID0gUEZOX0FMSUdOKF9fZW5kX3JvZGF0YSk7CiAJdW5zaWduZWQgbG9uZyByb2RhdGFfc3RhcnQgPQogCQkoKHVuc2lnbmVkIGxvbmcpX19zdGFydF9yb2RhdGEgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKIAotI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotCS8qIER5bmFtaWMgdHJhY2luZyBtb2RpZmllcyB0aGUga2VybmVsIHRleHQgc2VjdGlvbiAqLwotCXN0YXJ0ID0gcm9kYXRhX3N0YXJ0OwotI2VuZGlmCi0KIAlwcmludGsoS0VSTl9JTkZPICJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgcmVhZC1vbmx5IGRhdGE6ICVsdWtcbiIsCiAJICAgICAgIChlbmQgLSBzdGFydCkgPj4gMTApOwogCXNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCk7CiAKKwlrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTsKKwogCS8qCiAJICogVGhlIHJvZGF0YSBzZWN0aW9uIChidXQgbm90IHRoZSBrZXJuZWwgdGV4dCEpIHNob3VsZCBhbHNvIGJlCiAJICogbm90LWV4ZWN1dGFibGUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jIGIvYXJjaC94ODYvbW0vbW1pby1tb2QuYwppbmRleCAyYzRiYWE4Li5jOTM0MmVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jCisrKyBiL2FyY2gveDg2L21tL21taW8tbW9kLmMKQEAgLTM3OCwyNyArMzc4LDM0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLXN0YXRpYyBjcHVtYXNrX3QgZG93bmVkX2NwdXM7CitzdGF0aWMgY3B1bWFza192YXJfdCBkb3duZWRfY3B1czsKIAogc3RhdGljIHZvaWQgZW50ZXJfdW5pcHJvY2Vzc29yKHZvaWQpCiB7CiAJaW50IGNwdTsKIAlpbnQgZXJyOwogCisJaWYgKGRvd25lZF9jcHVzID09IE5VTEwgJiYKKwkgICAgIWFsbG9jX2NwdW1hc2tfdmFyKCZkb3duZWRfY3B1cywgR0ZQX0tFUk5FTCkpIHsKKwkJcHJfbm90aWNlKE5BTUUgIkZhaWxlZCB0byBhbGxvY2F0ZSBtYXNrXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JZG93bmVkX2NwdXMgPSBjcHVfb25saW5lX21hcDsKLQljcHVfY2xlYXIoZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKSwgZG93bmVkX2NwdXMpOworCWNwdW1hc2tfY29weShkb3duZWRfY3B1cywgY3B1X29ubGluZV9tYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayksIGRvd25lZF9jcHVzKTsKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQogCQlwcl9ub3RpY2UoTkFNRSAiRGlzYWJsaW5nIG5vbi1ib290IENQVXMuLi5cbiIpOwogCXB1dF9vbmxpbmVfY3B1cygpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBkb3duZWRfY3B1cykgeworCWZvcl9lYWNoX2NwdShjcHUsIGRvd25lZF9jcHVzKSB7CiAJCWVyciA9IGNwdV9kb3duKGNwdSk7CiAJCWlmICghZXJyKQogCQkJcHJfaW5mbyhOQU1FICJDUFUlZCBpcyBkb3duLlxuIiwgY3B1KTsKIAkJZWxzZQogCQkJcHJfZXJyKE5BTUUgIkVycm9yIHRha2luZyBDUFUlZCBkb3duOiAlZFxuIiwgY3B1LCBlcnIpOwogCX0KK291dDoKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQogCQlwcl93YXJuaW5nKE5BTUUgIm11bHRpcGxlIENQVXMgc3RpbGwgb25saW5lLCAiCiAJCQkJCQkibWF5IG1pc3MgZXZlbnRzLlxuIik7CkBAIC00MTEsMTAgKzQxOCwxMCBAQAogCWludCBjcHU7CiAJaW50IGVycjsKIAotCWlmIChjcHVzX3dlaWdodChkb3duZWRfY3B1cykgPT0gMCkKKwlpZiAoZG93bmVkX2NwdXMgPT0gTlVMTCB8fCBjcHVtYXNrX3dlaWdodChkb3duZWRfY3B1cykgPT0gMCkKIAkJcmV0dXJuOwogCXByX25vdGljZShOQU1FICJSZS1lbmFibGluZyBDUFVzLi4uXG4iKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGRvd25lZF9jcHVzKSB7CisJZm9yX2VhY2hfY3B1KGNwdSwgZG93bmVkX2NwdXMpIHsKIAkJZXJyID0gY3B1X3VwKGNwdSk7CiAJCWlmICghZXJyKQogCQkJcHJfaW5mbyhOQU1FICJlbmFibGVkIENQVSVkLlxuIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTBkZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIENvbW1vbiBjb2RlIGZvciAzMiBhbmQgNjQtYml0IE5VTUEgKi8KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKyMgZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorI2Vsc2UKKyMgZGVmaW5lIERCRyh4Li4uKQorI2VuZGlmCisKKy8qCisgKiBXaGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNoIG5vZGVzCisgKi8KK2NwdW1hc2tfdmFyX3Qgbm9kZV90b19jcHVtYXNrX21hcFtNQVhfTlVNTk9ERVNdOworRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2tfbWFwKTsKKworLyoKKyAqIEFsbG9jYXRlIG5vZGVfdG9fY3B1bWFza19tYXAgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBub2RlcworICogUmVxdWlyZXMgbm9kZV9wb3NzaWJsZV9tYXAgdG8gYmUgdmFsaWQuCisgKgorICogTm90ZTogbm9kZV90b19jcHVtYXNrKCkgaXMgbm90IHZhbGlkIHVudGlsIGFmdGVyIHRoaXMgaXMgZG9uZS4KKyAqIChVc2UgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyB0byBjaGVjayB0aGlzLikKKyAqLwordm9pZCBfX2luaXQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKQoreworCXVuc2lnbmVkIGludCBub2RlLCBudW0gPSAwOworCisJLyogc2V0dXAgbnJfbm9kZV9pZHMgaWYgbm90IGRvbmUgeWV0ICovCisJaWYgKG5yX25vZGVfaWRzID09IE1BWF9OVU1OT0RFUykgeworCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZV9wb3NzaWJsZV9tYXApCisJCQludW0gPSBub2RlOworCQlucl9ub2RlX2lkcyA9IG51bSArIDE7CisJfQorCisJLyogYWxsb2NhdGUgdGhlIG1hcCAqLworCWZvciAobm9kZSA9IDA7IG5vZGUgPCBucl9ub2RlX2lkczsgbm9kZSsrKQorCQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKKworCS8qIGNwdW1hc2tfb2Zfbm9kZSgpIHdpbGwgbm93IHdvcmsgKi8KKwlwcl9kZWJ1ZygiTm9kZSB0byBjcHVtYXNrIG1hcCBmb3IgJWQgbm9kZXNcbiIsIG5yX25vZGVfaWRzKTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKy8qCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgorICovCitjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQoreworCWlmIChub2RlID49IG5yX25vZGVfaWRzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBub2RlID4gbnJfbm9kZV9pZHMoJWQpXG4iLAorCQkJbm9kZSwgbnJfbm9kZV9pZHMpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBjcHVfbm9uZV9tYXNrOworCX0KKwlpZiAobm9kZV90b19jcHVtYXNrX21hcFtub2RlXSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBubyBub2RlX3RvX2NwdW1hc2tfbWFwIVxuIiwKKwkJCW5vZGUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBjcHVfb25saW5lX21hc2s7CisJfQorCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOworfQorRVhQT1JUX1NZTUJPTChjcHVtYXNrX29mX25vZGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggNjRjOWNmMC4uZDczYWFhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtMjAsMTIgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwotIyBkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCi0jZWxzZQotIyBkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwogCkBAIC00OSwxMiArNDMsNiBAQAogRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9jcHVfdG9fbm9kZV9tYXApOwogCiAvKgotICogV2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcwotICovCi1jcHVtYXNrX3QgKm5vZGVfdG9fY3B1bWFza19tYXA7Ci1FWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOwotCi0vKgogICogR2l2ZW4gYSBzaGlmdCB2YWx1ZSwgdHJ5IHRvIHBvcHVsYXRlIG1lbW5vZGVtYXBbXQogICogUmV0dXJucyA6CiAgKiAxIGlmIE9LCkBAIC02NjEsMzYgKzY0OSw2IEBACiAjZW5kaWYKIAogCi0vKgotICogQWxsb2NhdGUgbm9kZV90b19jcHVtYXNrX21hcCBiYXNlZCBvbiBudW1iZXIgb2YgYXZhaWxhYmxlIG5vZGVzCi0gKiBSZXF1aXJlcyBub2RlX3Bvc3NpYmxlX21hcCB0byBiZSB2YWxpZC4KLSAqCi0gKiBOb3RlOiBub2RlX3RvX2NwdW1hc2soKSBpcyBub3QgdmFsaWQgdW50aWwgYWZ0ZXIgdGhpcyBpcyBkb25lLgotICogKFVzZSBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTIHRvIGNoZWNrIHRoaXMuKQotICovCi12b2lkIF9faW5pdCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IG5vZGUsIG51bSA9IDA7Ci0JY3B1bWFza190ICptYXA7Ci0KLQkvKiBzZXR1cCBucl9ub2RlX2lkcyBpZiBub3QgZG9uZSB5ZXQgKi8KLQlpZiAobnJfbm9kZV9pZHMgPT0gTUFYX05VTU5PREVTKSB7Ci0JCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKLQkJCW51bSA9IG5vZGU7Ci0JCW5yX25vZGVfaWRzID0gbnVtICsgMTsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSB0aGUgbWFwICovCi0JbWFwID0gYWxsb2NfYm9vdG1lbV9sb3cobnJfbm9kZV9pZHMgKiBzaXplb2YoY3B1bWFza190KSk7Ci0JREJHKCJub2RlX3RvX2NwdW1hc2tfbWFwIGF0ICVwIGZvciAlZCBub2Rlc1xuIiwgbWFwLCBucl9ub2RlX2lkcyk7Ci0KLQlwcl9kZWJ1ZygiTm9kZSB0byBjcHVtYXNrIG1hcCBhdCAlcCBmb3IgJWQgbm9kZXNcbiIsCi0JCSBtYXAsIG5yX25vZGVfaWRzKTsKLQotCS8qIG5vZGVfdG9fY3B1bWFzaygpIHdpbGwgbm93IHdvcmsgKi8KLQlub2RlX3RvX2NwdW1hc2tfbWFwID0gbWFwOwotfQotCiB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCWludCAqY3B1X3RvX25vZGVfbWFwID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCk7CkBAIC03MjMsMTIgKzY4MSwxMiBAQAogCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKLQljcHVfc2V0KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CiB9CiAKIHZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQogewotCWNwdV9jbGVhcihjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbZWFybHlfY3B1X3RvX25vZGUoY3B1KV0pOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CiB9CiAKICNlbHNlIC8qIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KQEAgLTczOSwyMCArNjk3LDIwIEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQogewogCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKLQljcHVtYXNrX3QgKm1hc2s7CisJc3RydWN0IGNwdW1hc2sgKm1hc2s7CiAJY2hhciBidWZbNjRdOwogCi0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vZGVfdG9fY3B1bWFza19tYXAgTlVMTFxuIik7CisJbWFzayA9IG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CisJaWYgKG1hc2sgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIm5vZGVfdG9fY3B1bWFza19tYXBbJWldIE5VTExcbiIsIG5vZGUpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybjsKIAl9CiAKLQltYXNrID0gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CiAJaWYgKGVuYWJsZSkKLQkJY3B1X3NldChjcHUsICptYXNrKTsKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7CiAJZWxzZQotCQljcHVfY2xlYXIoY3B1LCAqbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbWFzayk7CiAKIAljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLApAQCAtNzk5LDU5ICs3NTcsNiBAQAogCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CiB9CiAKLQotLyogZW1wdHkgY3B1bWFzayAqLwotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCBjcHVfbWFza19ub25lOwotCi0vKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4KLSAqLwotY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY3B1bWFza19vZl9ub2RlKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsCi0JCQlub2RlKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gKGNvbnN0IGNwdW1hc2tfdCAqKSZjcHVfb25saW5lX21hcDsKLQl9Ci0JaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCi0JCQlub2RlLCBucl9ub2RlX2lkcyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuICZjcHVfbWFza19ub25lOwotCX0KLQlyZXR1cm4gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Ci19Ci1FWFBPUlRfU1lNQk9MKGNwdW1hc2tfb2Zfbm9kZSk7Ci0KLS8qCi0gKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgotICoKLSAqIFNpZGUgbm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSByZXR1cm5lZCBjcHVtYXNrIG9uIHRoZSBzdGFjawotICogc28gd2l0aCBhIGhpZ2ggTlJfQ1BVUyBjb3VudCwgZXhjZXNzaXZlIHN0YWNrIHNwYWNlIGlzIHVzZWQuICBUaGUKLSAqIG5vZGVfdG9fY3B1bWFza19wdHIgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUuCi0gKi8KLWNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCi17Ci0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkibm9kZV90b19jcHVtYXNrKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsIG5vZGUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBjcHVfb25saW5lX21hcDsKLQl9Ci0JaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIm5vZGVfdG9fY3B1bWFzayglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCi0JCQlub2RlLCBucl9ub2RlX2lkcyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIGNwdV9tYXNrX25vbmU7Ci0JfQotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2spOwotCiAvKgogICogLS0tLS0tLS0tIGVuZCBvZiBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbnVtYSBmdW5jdGlvbnMgLS0tLS0tLS0tCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCA1NzRjOGJjLi5jN2QyNzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0xMTYsNiArMTE2LDM2IEBACiAJcmVzZXJ2ZV9lYXJseShwaHlzLCBwaHlzICsgbGVuZ3RoLCAiQUNQSSBTTElUIik7CiB9CiAKKy8qIENhbGxiYWNrIGZvciBQcm94aW1pdHkgRG9tYWluIC0+IHgyQVBJQyBtYXBwaW5nICovCit2b2lkIF9faW5pdAorYWNwaV9udW1hX3gyYXBpY19hZmZpbml0eV9pbml0KHN0cnVjdCBhY3BpX3NyYXRfeDJhcGljX2NwdV9hZmZpbml0eSAqcGEpCit7CisJaW50IHB4bSwgbm9kZTsKKwlpbnQgYXBpY19pZDsKKworCWlmIChzcmF0X2Rpc2FibGVkKCkpCisJCXJldHVybjsKKwlpZiAocGEtPmhlYWRlci5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5KSkgeworCQliYWRfc3JhdCgpOworCQlyZXR1cm47CisJfQorCWlmICgocGEtPmZsYWdzICYgQUNQSV9TUkFUX0NQVV9FTkFCTEVEKSA9PSAwKQorCQlyZXR1cm47CisJcHhtID0gcGEtPnByb3hpbWl0eV9kb21haW47CisJbm9kZSA9IHNldHVwX25vZGUocHhtKTsKKwlpZiAobm9kZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBUb28gbWFueSBwcm94aW1pdHkgZG9tYWlucyAleFxuIiwgcHhtKTsKKwkJYmFkX3NyYXQoKTsKKwkJcmV0dXJuOworCX0KKworCWFwaWNfaWQgPSBwYS0+YXBpY19pZDsKKwlhcGljaWRfdG9fbm9kZVthcGljX2lkXSA9IG5vZGU7CisJYWNwaV9udW1hID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBQWE0gJXUgLT4gQVBJQyAldSAtPiBOb2RlICV1XG4iLAorCSAgICAgICBweG0sIGFwaWNfaWQsIG5vZGUpOworfQorCiAvKiBDYWxsYmFjayBmb3IgUHJveGltaXR5IERvbWFpbiAtPiBMQVBJQyBtYXBwaW5nICovCiB2b2lkIF9faW5pdAogYWNwaV9udW1hX3Byb2Nlc3Nvcl9hZmZpbml0eV9pbml0KHN0cnVjdCBhY3BpX3NyYXRfY3B1X2FmZmluaXR5ICpwYSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IDRjNGE1MWMuLjgxOWIxMzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JcmV0dXJuIChjcHUgIT0gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKSk7CisJcmV0dXJuIGNwdSAhPSBjcHVtYXNrX2ZpcnN0KF9fZ2V0X2NwdV92YXIoY3B1X3NpYmxpbmdfbWFwKSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zbXAuYyBiL2FyY2gveDg2L3hlbi9zbXAuYwppbmRleCA4ZDQ3MDU2Li41ODVhNmUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc21wLmMKKysrIGIvYXJjaC94ODYveGVuL3NtcC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJcmMgPSBIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX2lzX3VwLCBpLCBOVUxMKTsKIAkJaWYgKHJjID49IDApIHsKIAkJCW51bV9wcm9jZXNzb3JzKys7Ci0JCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworCQkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKIAkJfQogCX0KIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXdoaWxlICgobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpICYmIChudW1fcG9zc2libGVfY3B1cygpID4gbWF4X2NwdXMpKSB7CiAJCWZvciAoY3B1ID0gbnJfY3B1X2lkcyAtIDE7ICFjcHVfcG9zc2libGUoY3B1KTsgY3B1LS0pCiAJCQljb250aW51ZTsKLQkJY3B1X2NsZWFyKGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9jcHVfcG9zc2libGUoY3B1LCBmYWxzZSk7CiAJfQogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1IChjcHUpIHsKQEAgLTIxMCw3ICsyMTAsNyBAQAogCQlpZiAoSVNfRVJSKGlkbGUpKQogCQkJcGFuaWMoImZhaWxlZCBmb3JrIGZvciBDUFUgJWQiLCBjcHUpOwogCi0JCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOworCQlzZXRfY3B1X3ByZXNlbnQoY3B1LCB0cnVlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCAwY2JiM2I4Li5lN2QxMjc4IDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnCisrKyBiL2Jsb2NrL0tjb25maWcKQEAgLTQ0LDIyICs0NCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBCTEtfREVWX0lPX1RSQUNFCi0JYm9vbCAiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBpbyBhY3Rpb25zIgotCWRlcGVuZHMgb24gU1lTRlMKLQlzZWxlY3QgUkVMQVkKLQlzZWxlY3QgREVCVUdfRlMKLQlzZWxlY3QgVFJBQ0VQT0lOVFMKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnMKLQkgIG9uIGEgZ2l2ZW4gcXVldWUuIFRyYWNpbmcgYWxsb3dzIHlvdSB0byBzZWUgYW55IHRyYWZmaWMgaGFwcGVuaW5nCi0JICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlCi0JICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOgotCi0JICBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgQkxLX0RFVl9CU0cKIAlib29sICJCbG9jayBsYXllciBTRyBzdXBwb3J0IHY0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlCmluZGV4IGJmZTczMDQuLmU5ZmE0ZGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL01ha2VmaWxlCisrKyBiL2Jsb2NrL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw1IEBACiBvYmotJChDT05GSUdfSU9TQ0hFRF9ERUFETElORSkJKz0gZGVhZGxpbmUtaW9zY2hlZC5vCiBvYmotJChDT05GSUdfSU9TQ0hFRF9DRlEpCSs9IGNmcS1pb3NjaGVkLm8KIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpCSs9IGJsa3RyYWNlLm8KIG9iai0kKENPTkZJR19CTE9DS19DT01QQVQpCSs9IGNvbXBhdF9pb2N0bC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCSs9IGJsay1pbnRlZ3JpdHkubwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCAwZGNlOTJjLi4zZWU5NDM1IDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVfY29yZWdyb3VwX21hc2soY3B1KTsKIAlyZXR1cm4gY3B1bWFza19maXJzdChtYXNrKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQlyZXR1cm4gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKKwlyZXR1cm4gY3B1bWFza19maXJzdCh0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpKTsKICNlbHNlCiAJcmV0dXJuIGNwdTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrdHJhY2UuYyBiL2Jsb2NrL2Jsa3RyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODEyMGEuLjAwMDAwMDAKLS0tIGEvYmxvY2svYmxrdHJhY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8dHJhY2UvYmxvY2suaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGJsa3RyYWNlX3NlcSBfX3JlYWRfbW9zdGx5ID0gMTsKLQotLyogR2xvYmFsIHJlZmVyZW5jZSBjb3VudCBvZiBwcm9iZXMgKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTsKLXN0YXRpYyBhdG9taWNfdCBibGtfcHJvYmVzX3JlZiA9IEFUT01JQ19JTklUKDApOwotCi1zdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKLXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwotCi0vKgotICogU2VuZCBvdXQgYSBub3RpZnkgbWVzc2FnZS4KLSAqLwotc3RhdGljIHZvaWQgdHJhY2Vfbm90ZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgcGlkX3QgcGlkLCBpbnQgYWN0aW9uLAotCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OwotCi0JdCA9IHJlbGF5X3Jlc2VydmUoYnQtPnJjaGFuLCBzaXplb2YoKnQpICsgbGVuKTsKLQlpZiAodCkgewotCQljb25zdCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JCXQtPm1hZ2ljID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT047Ci0JCXQtPnRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7Ci0JCXQtPmRldmljZSA9IGJ0LT5kZXY7Ci0JCXQtPmFjdGlvbiA9IGFjdGlvbjsKLQkJdC0+cGlkID0gcGlkOwotCQl0LT5jcHUgPSBjcHU7Ci0JCXQtPnBkdV9sZW4gPSBsZW47Ci0JCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgZGF0YSwgbGVuKTsKLQl9Ci19Ci0KLS8qCi0gKiBTZW5kIG91dCBhIG5vdGlmeSBmb3IgdGhpcyBwcm9jZXNzLCBpZiB3ZSBoYXZlbid0IGRvbmUgc28gc2luY2UgYSB0cmFjZQotICogc3RhcnRlZAotICovCi1zdGF0aWMgdm9pZCB0cmFjZV9ub3RlX3RzayhzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JdHNrLT5idHJhY2Vfc2VxID0gYmxrdHJhY2Vfc2VxOwotCXRyYWNlX25vdGUoYnQsIHRzay0+cGlkLCBCTEtfVE5fUFJPQ0VTUywgdHNrLT5jb21tLCBzaXplb2YodHNrLT5jb21tKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyYWNlX25vdGVfdGltZShzdHJ1Y3QgYmxrX3RyYWNlICpidCkKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHdvcmRzWzJdOwotCi0JZ2V0bnN0aW1lb2ZkYXkoJm5vdyk7Ci0Jd29yZHNbMF0gPSBub3cudHZfc2VjOwotCXdvcmRzWzFdID0gbm93LnR2X25zZWM7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdHJhY2Vfbm90ZShidCwgMCwgQkxLX1ROX1RJTUVTVEFNUCwgd29yZHMsIHNpemVvZih3b3JkcykpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotdm9pZCBfX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IG47Ci0JdmFfbGlzdCBhcmdzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqYnVmOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWJ1ZiA9IHBlcl9jcHVfcHRyKGJ0LT5tc2dfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCW4gPSB2c2NucHJpbnRmKGJ1ZiwgQkxLX1ROX01BWF9NU0csIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCi0JdHJhY2Vfbm90ZShidCwgMCwgQkxLX1ROX01FU1NBR0UsIGJ1Ziwgbik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX190cmFjZV9ub3RlX21lc3NhZ2UpOwotCi1zdGF0aWMgaW50IGFjdF9sb2dfY2hlY2soc3RydWN0IGJsa190cmFjZSAqYnQsIHUzMiB3aGF0LCBzZWN0b3JfdCBzZWN0b3IsCi0JCQkgcGlkX3QgcGlkKQotewotCWlmICgoKGJ0LT5hY3RfbWFzayA8PCBCTEtfVENfU0hJRlQpICYgd2hhdCkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JaWYgKHNlY3RvciA8IGJ0LT5zdGFydF9sYmEgfHwgc2VjdG9yID4gYnQtPmVuZF9sYmEpCi0JCXJldHVybiAxOwotCWlmIChidC0+cGlkICYmIHBpZCAhPSBidC0+cGlkKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogRGF0YSBkaXJlY3Rpb24gYml0IGxvb2t1cAotICovCi1zdGF0aWMgdTMyIGRkaXJfYWN0WzJdIF9fcmVhZF9tb3N0bHkgPSB7IEJMS19UQ19BQ1QoQkxLX1RDX1JFQUQpLCBCTEtfVENfQUNUKEJMS19UQ19XUklURSkgfTsKLQotLyogVGhlIGlsb2cyKCkgY2FsbHMgZmFsbCBvdXQgYmVjYXVzZSB0aGV5J3JlIGNvbnN0YW50ICovCi0jZGVmaW5lIE1BU0tfVENfQklUKHJ3LCBfX25hbWUpICggKHJ3ICYgKDEgPDwgQklPX1JXXyAjIyBfX25hbWUpKSA8PCBcCi0JICAoaWxvZzIoQkxLX1RDXyAjIyBfX25hbWUpICsgQkxLX1RDX1NISUZUIC0gQklPX1JXXyAjIyBfX25hbWUpICkKLQotLyoKLSAqIFRoZSB3b3JrZXIgZm9yIHRoZSB2YXJpb3VzIGJsa19hZGRfdHJhY2UqKCkgdHlwZXMuIEZpbGxzIG91dCBhCi0gKiBibGtfaW9fdHJhY2Ugc3RydWN0dXJlIGFuZCBwbGFjZXMgaXQgaW4gYSBwZXItY3B1IHN1YmJ1ZmZlci4KLSAqLwotc3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywKLQkJICAgICBpbnQgcncsIHUzMiB3aGF0LCBpbnQgZXJyb3IsIGludCBwZHVfbGVuLCB2b2lkICpwZHVfZGF0YSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IGJsa19pb190cmFjZSAqdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgKnNlcXVlbmNlOwotCXBpZF90IHBpZDsKLQlpbnQgY3B1OwotCi0JaWYgKHVubGlrZWx5KGJ0LT50cmFjZV9zdGF0ZSAhPSBCbGt0cmFjZV9ydW5uaW5nKSkKLQkJcmV0dXJuOwotCi0Jd2hhdCB8PSBkZGlyX2FjdFtydyAmIFdSSVRFXTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBCQVJSSUVSKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBTWU5DSU8pOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEFIRUFEKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBNRVRBKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBESVNDQVJEKTsKLQotCXBpZCA9IHRzay0+cGlkOwotCWlmICh1bmxpa2VseShhY3RfbG9nX2NoZWNrKGJ0LCB3aGF0LCBzZWN0b3IsIHBpZCkpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIEEgd29yZCBhYm91dCB0aGUgbG9ja2luZyBoZXJlIC0gd2UgZGlzYWJsZSBpbnRlcnJ1cHRzIHRvIHJlc2VydmUKLQkgKiBzb21lIHNwYWNlIGluIHRoZSByZWxheSBwZXItY3B1IGJ1ZmZlciwgdG8gcHJldmVudCBhbiBpcnEKLQkgKiBmcm9tIGNvbWluZyBpbiBhbmQgc3RlcHBpbmcgb24gb3VyIHRvZXMuCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KHRzay0+YnRyYWNlX3NlcSAhPSBibGt0cmFjZV9zZXEpKQotCQl0cmFjZV9ub3RlX3RzayhidCwgdHNrKTsKLQotCXQgPSByZWxheV9yZXNlcnZlKGJ0LT5yY2hhbiwgc2l6ZW9mKCp0KSArIHBkdV9sZW4pOwotCWlmICh0KSB7Ci0JCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkJc2VxdWVuY2UgPSBwZXJfY3B1X3B0cihidC0+c2VxdWVuY2UsIGNwdSk7Ci0KLQkJdC0+bWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjsKLQkJdC0+c2VxdWVuY2UgPSArKygqc2VxdWVuY2UpOwotCQl0LT50aW1lID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwotCQl0LT5zZWN0b3IgPSBzZWN0b3I7Ci0JCXQtPmJ5dGVzID0gYnl0ZXM7Ci0JCXQtPmFjdGlvbiA9IHdoYXQ7Ci0JCXQtPnBpZCA9IHBpZDsKLQkJdC0+ZGV2aWNlID0gYnQtPmRldjsKLQkJdC0+Y3B1ID0gY3B1OwotCQl0LT5lcnJvciA9IGVycm9yOwotCQl0LT5wZHVfbGVuID0gcGR1X2xlbjsKLQotCQlpZiAocGR1X2xlbikKLQkJCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgcGR1X2RhdGEsIHBkdV9sZW4pOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa190cmVlX3Jvb3Q7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGJsa190cmVlX211dGV4KTsKLQotc3RhdGljIHZvaWQgYmxrX3RyYWNlX2NsZWFudXAoc3RydWN0IGJsa190cmFjZSAqYnQpCi17Ci0JZGVidWdmc19yZW1vdmUoYnQtPm1zZ19maWxlKTsKLQlkZWJ1Z2ZzX3JlbW92ZShidC0+ZHJvcHBlZF9maWxlKTsKLQlyZWxheV9jbG9zZShidC0+cmNoYW4pOwotCWZyZWVfcGVyY3B1KGJ0LT5zZXF1ZW5jZSk7Ci0JZnJlZV9wZXJjcHUoYnQtPm1zZ19kYXRhKTsKLQlrZnJlZShidCk7Ci0JbXV0ZXhfbG9jaygmYmxrX3Byb2JlX211dGV4KTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYmxrX3Byb2Jlc19yZWYpKQotCQlibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cygpOwotCW11dGV4X3VubG9jaygmYmxrX3Byb2JlX211dGV4KTsKLX0KLQotaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQ7Ci0KLQlidCA9IHhjaGcoJnEtPmJsa190cmFjZSwgTlVMTCk7Ci0JaWYgKCFidCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3NldHVwIHx8Ci0JICAgIGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9zdG9wcGVkKQotCQlibGtfdHJhY2VfY2xlYW51cChidCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpOwotCi1zdGF0aWMgaW50IGJsa19kcm9wcGVkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBibGtfZHJvcHBlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzE2XTsKLQotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgYXRvbWljX3JlYWQoJmJ0LT5kcm9wcGVkKSk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsa19kcm9wcGVkX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLm9wZW4gPQkJYmxrX2Ryb3BwZWRfb3BlbiwKLQkucmVhZCA9CQlibGtfZHJvcHBlZF9yZWFkLAotfTsKLQotc3RhdGljIGludCBibGtfbXNnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKm1zZzsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKLQotCWlmIChjb3VudCA+IEJMS19UTl9NQVhfTVNHKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1zZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwotCWlmIChtc2cgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIobXNnLCBidWZmZXIsIGNvdW50KSkgewotCQlrZnJlZShtc2cpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlidCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlfX3RyYWNlX25vdGVfbWVzc2FnZShidCwgIiVzIiwgbXNnKTsKLQlrZnJlZShtc2cpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibGtfbXNnX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLm9wZW4gPQkJYmxrX21zZ19vcGVuLAotCS53cml0ZSA9CWJsa19tc2dfd3JpdGUsCi19OwotCi0vKgotICogS2VlcCB0cmFjayBvZiBob3cgbWFueSB0aW1lcyB3ZSBlbmNvdW50ZXJlZCBhIGZ1bGwgc3ViYnVmZmVyLCB0byBhaWQKLSAqIHRoZSB1c2VyIHNwYWNlIGFwcCBpbiB0ZWxsaW5nIGhvdyBtYW55IGxvc3QgZXZlbnRzIHRoZXJlIHdlcmUuCi0gKi8KLXN0YXRpYyBpbnQgYmxrX3N1YmJ1Zl9zdGFydF9jYWxsYmFjayhzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHZvaWQgKnN1YmJ1ZiwKLQkJCQkgICAgIHZvaWQgKnByZXZfc3ViYnVmLCBzaXplX3QgcHJldl9wYWRkaW5nKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwotCi0JaWYgKCFyZWxheV9idWZfZnVsbChidWYpKQotCQlyZXR1cm4gMTsKLQotCWJ0ID0gYnVmLT5jaGFuLT5wcml2YXRlX2RhdGE7Ci0JYXRvbWljX2luYygmYnQtPmRyb3BwZWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJsa19yZW1vdmVfYnVmX2ZpbGVfY2FsbGJhY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7Ci0JZGVidWdmc19yZW1vdmUoZGVudHJ5KTsKLQotCS8qCi0JKiB0aGlzIHdpbGwgZmFpbCBmb3IgYWxsIGJ1dCB0aGUgbGFzdCBmaWxlLCBidXQgdGhhdCBpcyBvay4gd2hhdCB3ZQotCSogY2FyZSBhYm91dCBpcyB0aGUgdG9wIGxldmVsIGJ1dHMtPm5hbWUgZGlyZWN0b3J5IGdvaW5nIGF3YXksIHdoZW4KLQkqIHRoZSBsYXN0IHRyYWNlIGZpbGUgaXMgZ29uZS4gVGhlbiB3ZSBkb24ndCBoYXZlIHRvIHJtZGlyKCkgdGhhdAotCSogbWFudWFsbHkgb24gdHJhY2Ugc3RvcCwgc28gaXQgbmljZWx5IHNvbHZlcyB0aGUgaXNzdWUgd2l0aAotCSogZm9yY2Uga2lsbGluZyBvZiBydW5uaW5nIHRyYWNlcy4KLQkqLwotCi0JZGVidWdmc19yZW1vdmUocGFyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa19jcmVhdGVfYnVmX2ZpbGVfY2FsbGJhY2soY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJCQkgICBpbnQgbW9kZSwKLQkJCQkJCSAgIHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLQkJCQkJCSAgIGludCAqaXNfZ2xvYmFsKQotewotCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZiwKLQkJCQkJJnJlbGF5X2ZpbGVfb3BlcmF0aW9ucyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzIGJsa19yZWxheV9jYWxsYmFja3MgPSB7Ci0JLnN1YmJ1Zl9zdGFydAkJPSBibGtfc3ViYnVmX3N0YXJ0X2NhbGxiYWNrLAotCS5jcmVhdGVfYnVmX2ZpbGUJPSBibGtfY3JlYXRlX2J1Zl9maWxlX2NhbGxiYWNrLAotCS5yZW1vdmVfYnVmX2ZpbGUJPSBibGtfcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrLAotfTsKLQotLyoKLSAqIFNldHVwIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgdG8gc3RhcnQgdHJhY2luZwotICovCi1pbnQgZG9fYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCi0JCQlzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgKmJ1dHMpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqb2xkX2J0LCAqYnQgPSBOVUxMOwotCXN0cnVjdCBkZW50cnkgKmRpciA9IE5VTEw7Ci0JaW50IHJldCwgaTsKLQotCWlmICghYnV0cy0+YnVmX3NpemUgfHwgIWJ1dHMtPmJ1Zl9ucikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJuY3B5KGJ1dHMtPm5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7Ci0JYnV0cy0+bmFtZVtCTEtUUkFDRV9CREVWX1NJWkUgLSAxXSA9ICdcMCc7Ci0KLQkvKgotCSAqIHNvbWUgZGV2aWNlIG5hbWVzIGhhdmUgbGFyZ2VyIHBhdGhzIC0gY29udmVydCB0aGUgc2xhc2hlcwotCSAqIHRvIHVuZGVyc2NvcmVzIGZvciB0aGlzIHRvIHdvcmsgYXMgZXhwZWN0ZWQKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKGJ1dHMtPm5hbWUpOyBpKyspCi0JCWlmIChidXRzLT5uYW1lW2ldID09ICcvJykKLQkJCWJ1dHMtPm5hbWVbaV0gPSAnXyc7Ci0KLQlyZXQgPSAtRU5PTUVNOwotCWJ0ID0ga3phbGxvYyhzaXplb2YoKmJ0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidCkKLQkJZ290byBlcnI7Ci0KLQlidC0+c2VxdWVuY2UgPSBhbGxvY19wZXJjcHUodW5zaWduZWQgbG9uZyk7Ci0JaWYgKCFidC0+c2VxdWVuY2UpCi0JCWdvdG8gZXJyOwotCi0JYnQtPm1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTsKLQlpZiAoIWJ0LT5tc2dfZGF0YSkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSAtRU5PRU5UOwotCi0JaWYgKCFibGtfdHJlZV9yb290KSB7Ci0JCWJsa190cmVlX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJsb2NrIiwgTlVMTCk7Ci0JCWlmICghYmxrX3RyZWVfcm9vdCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXRzLT5uYW1lLCBibGtfdHJlZV9yb290KTsKLQotCWlmICghZGlyKQotCQlnb3RvIGVycjsKLQotCWJ0LT5kaXIgPSBkaXI7Ci0JYnQtPmRldiA9IGRldjsKLQlhdG9taWNfc2V0KCZidC0+ZHJvcHBlZCwgMCk7Ci0KLQlyZXQgPSAtRUlPOwotCWJ0LT5kcm9wcGVkX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkcm9wcGVkIiwgMDQ0NCwgZGlyLCBidCwgJmJsa19kcm9wcGVkX2ZvcHMpOwotCWlmICghYnQtPmRyb3BwZWRfZmlsZSkKLQkJZ290byBlcnI7Ci0KLQlidC0+bXNnX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtc2ciLCAwMjIyLCBkaXIsIGJ0LCAmYmxrX21zZ19mb3BzKTsKLQlpZiAoIWJ0LT5tc2dfZmlsZSkKLQkJZ290byBlcnI7Ci0KLQlidC0+cmNoYW4gPSByZWxheV9vcGVuKCJ0cmFjZSIsIGRpciwgYnV0cy0+YnVmX3NpemUsCi0JCQkJYnV0cy0+YnVmX25yLCAmYmxrX3JlbGF5X2NhbGxiYWNrcywgYnQpOwotCWlmICghYnQtPnJjaGFuKQotCQlnb3RvIGVycjsKLQotCWJ0LT5hY3RfbWFzayA9IGJ1dHMtPmFjdF9tYXNrOwotCWlmICghYnQtPmFjdF9tYXNrKQotCQlidC0+YWN0X21hc2sgPSAodTE2KSAtMTsKLQotCWJ0LT5zdGFydF9sYmEgPSBidXRzLT5zdGFydF9sYmE7Ci0JYnQtPmVuZF9sYmEgPSBidXRzLT5lbmRfbGJhOwotCWlmICghYnQtPmVuZF9sYmEpCi0JCWJ0LT5lbmRfbGJhID0gLTFVTEw7Ci0KLQlidC0+cGlkID0gYnV0cy0+cGlkOwotCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwOwotCi0JbXV0ZXhfbG9jaygmYmxrX3Byb2JlX211dGV4KTsKLQlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmJsa19wcm9iZXNfcmVmKSA9PSAxKSB7Ci0JCXJldCA9IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOwotCQlpZiAocmV0KQotCQkJZ290byBwcm9iZV9lcnI7Ci0JfQotCW11dGV4X3VubG9jaygmYmxrX3Byb2JlX211dGV4KTsKLQotCXJldCA9IC1FQlVTWTsKLQlvbGRfYnQgPSB4Y2hnKCZxLT5ibGtfdHJhY2UsIGJ0KTsKLQlpZiAob2xkX2J0KSB7Ci0JCSh2b2lkKSB4Y2hnKCZxLT5ibGtfdHJhY2UsIG9sZF9idCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJldHVybiAwOwotcHJvYmVfZXJyOgotCWF0b21pY19kZWMoJmJsa19wcm9iZXNfcmVmKTsKLQltdXRleF91bmxvY2soJmJsa19wcm9iZV9tdXRleCk7Ci1lcnI6Ci0JaWYgKGJ0KSB7Ci0JCWlmIChidC0+bXNnX2ZpbGUpCi0JCQlkZWJ1Z2ZzX3JlbW92ZShidC0+bXNnX2ZpbGUpOwotCQlpZiAoYnQtPmRyb3BwZWRfZmlsZSkKLQkJCWRlYnVnZnNfcmVtb3ZlKGJ0LT5kcm9wcGVkX2ZpbGUpOwotCQlmcmVlX3BlcmNwdShidC0+c2VxdWVuY2UpOwotCQlmcmVlX3BlcmNwdShidC0+bXNnX2RhdGEpOwotCQlpZiAoYnQtPnJjaGFuKQotCQkJcmVsYXlfY2xvc2UoYnQtPnJjaGFuKTsKLQkJa2ZyZWUoYnQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCi0JCSAgICBjaGFyIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCBidXRzOwotCWludCByZXQ7Ci0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmYnV0cywgYXJnLCBzaXplb2YoYnV0cykpOwotCWlmIChyZXQpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0ID0gZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgJmJ1dHMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMsIHNpemVvZihidXRzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApOwotCi1pbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwotCWludCByZXQ7Ci0KLQlpZiAoKGJ0ID0gcS0+YmxrX3RyYWNlKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogRm9yIHN0YXJ0aW5nIGEgdHJhY2UsIHdlIGNhbiB0cmFuc2l0aW9uIGZyb20gYSBzZXR1cCBvciBzdG9wcGVkCi0JICogdHJhY2UuIEZvciBzdG9wcGluZyBhIHRyYWNlLCB0aGUgc3RhdGUgbXVzdCBiZSBydW5uaW5nCi0JICovCi0JcmV0ID0gLUVJTlZBTDsKLQlpZiAoc3RhcnQpIHsKLQkJaWYgKGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9zZXR1cCB8fAotCQkgICAgYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3N0b3BwZWQpIHsKLQkJCWJsa3RyYWNlX3NlcSsrOwotCQkJc21wX21iKCk7Ci0JCQlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9ydW5uaW5nOwotCi0JCQl0cmFjZV9ub3RlX3RpbWUoYnQpOwotCQkJcmV0ID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2VfcnVubmluZykgewotCQkJYnQtPnRyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc3RvcHBlZDsKLQkJCXJlbGF5X2ZsdXNoKGJ0LT5yY2hhbik7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zdGFydHN0b3ApOwotCi0vKioKLSAqIGJsa190cmFjZV9pb2N0bDogLSBoYW5kbGUgdGhlIGlvY3RscyBhc3NvY2lhdGVkIHdpdGggdHJhY2luZwotICogQGJkZXY6CXRoZSBibG9jayBkZXZpY2UKLSAqIEBjbWQ6IAl0aGUgaW9jdGwgY21kCi0gKiBAYXJnOgl0aGUgYXJndW1lbnQgZGF0YSwgaWYgYW55Ci0gKgotICoqLwotaW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIGNoYXIgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7Ci0JaW50IHJldCwgc3RhcnQgPSAwOwotCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQotCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKLQlpZiAoIXEpCi0JCXJldHVybiAtRU5YSU87Ci0KLQltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQkxLVFJBQ0VTRVRVUDoKLQkJYmRldm5hbWUoYmRldiwgYik7Ci0JCXJldCA9IGJsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LT5iZF9kZXYsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgQkxLVFJBQ0VTVEFSVDoKLQkJc3RhcnQgPSAxOwotCWNhc2UgQkxLVFJBQ0VTVE9QOgotCQlyZXQgPSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTsKLQkJYnJlYWs7Ci0JY2FzZSBCTEtUUkFDRVRFQVJET1dOOgotCQlyZXQgPSBibGtfdHJhY2VfcmVtb3ZlKHEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PVFRZOwotCQlicmVhazsKLQl9Ci0KLQltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGJsa190cmFjZV9zaHV0ZG93bjogLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXMKLSAqIEBxOiAgICB0aGUgcmVxdWVzdCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZQotICoKLSAqKi8KLXZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCWlmIChxLT5ibGtfdHJhY2UpIHsKLQkJYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCAwKTsKLQkJYmxrX3RyYWNlX3JlbW92ZShxKTsKLQl9Ci19Ci0KLS8qCi0gKiBibGt0cmFjZSBwcm9iZXMKLSAqLwotCi0vKioKLSAqIGJsa19hZGRfdHJhY2VfcnEgLSBBZGQgYSB0cmFjZSBmb3IgYSByZXF1ZXN0IG9yaWVudGVkIGFjdGlvbgotICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCi0gKiBAcnE6CQl0aGUgc291cmNlIHJlcXVlc3QKLSAqIEB3aGF0Ogl0aGUgYWN0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgUmVjb3JkcyBhbiBhY3Rpb24gYWdhaW5zdCBhIHJlcXVlc3QuIFdpbGwgbG9nIHRoZSBiaW8gb2Zmc2V0ICsgc2l6ZS4KLSAqCi0gKiovCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkJICAgIHUzMiB3aGF0KQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCWludCBydyA9IHJxLT5jbWRfZmxhZ3MgJiAweDAzOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlpZiAoYmxrX2Rpc2NhcmRfcnEocnEpKQotCQlydyB8PSAoMSA8PCBCSU9fUldfRElTQ0FSRCk7Ci0KLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7Ci0JCXdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfUEMpOwotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgcncsIHdoYXQsIHJxLT5lcnJvcnMsCi0JCQkJc2l6ZW9mKHJxLT5jbWQpLCBycS0+Y21kKTsKLQl9IGVsc2UgIHsKLQkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19GUyk7Ci0JCV9fYmxrX2FkZF90cmFjZShidCwgcnEtPmhhcmRfc2VjdG9yLCBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDksCi0JCQkJcncsIHdoYXQsIHJxLT5lcnJvcnMsIDAsIE5VTEwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9hYm9ydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lOU0VSVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaXNzdWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfSVNTVUUpOwotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfUkVRVUVVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfQ09NUExFVEUpOwotfQotCi0vKioKLSAqIGJsa19hZGRfdHJhY2VfYmlvIC0gQWRkIGEgdHJhY2UgZm9yIGEgYmlvIG9yaWVudGVkIGFjdGlvbgotICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCi0gKiBAYmlvOgl0aGUgc291cmNlIGJpbwotICogQHdoYXQ6CXRoZSBhY3Rpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICBSZWNvcmRzIGFuIGFjdGlvbiBhZ2FpbnN0IGEgYmlvLiBXaWxsIGxvZyB0aGUgYmlvIG9mZnNldCArIHNpemUuCi0gKgotICoqLwotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKLQkJCQkgICAgIHUzMiB3aGF0KQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIHdoYXQsCi0JCQkhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCAwLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfQk9VTkNFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9DT01QTEVURSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0JBQ0tNRVJHRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9GUk9OVE1FUkdFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9RVUVVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfZ2V0cnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQotewotCWlmIChiaW8pCi0JCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0dFVFJRKTsKLQllbHNlIHsKLQkJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQkJaWYgKGJ0KQotCQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCBydywgQkxLX1RBX0dFVFJRLCAwLCAwLCBOVUxMKTsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zbGVlcHJxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydykKLXsKLQlpZiAoYmlvKQotCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9TTEVFUFJRKTsKLQllbHNlIHsKLQkJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQkJaWYgKGJ0KQotCQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCBydywgQkxLX1RBX1NMRUVQUlEsIDAsIDAsIE5VTEwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9wbHVnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCi0JaWYgKGJ0KQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9QTFVHLCAwLCAwLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7Ci0KLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX0lPLCAwLAotCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7Ci0KLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX1RJTUVSLCAwLAotCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAotCQkJCXVuc2lnbmVkIGludCBwZHUpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJX19iZTY0IHJwZHUgPSBjcHVfdG9fYmU2NChwZHUpOwotCi0JCV9fYmxrX2FkZF90cmFjZShidCwgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywKLQkJCQlCTEtfVEFfU1BMSVQsICFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksCi0JCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7Ci0JfQotfQotCi0vKioKLSAqIGJsa19hZGRfdHJhY2VfcmVtYXAgLSBBZGQgYSB0cmFjZSBmb3IgYSByZW1hcCBvcGVyYXRpb24KLSAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgotICogQGJpbzoJdGhlIHNvdXJjZSBiaW8KLSAqIEBkZXY6CXRhcmdldCBkZXZpY2UKLSAqIEBmcm9tOglzb3VyY2Ugc2VjdG9yCi0gKiBAdG86CQl0YXJnZXQgc2VjdG9yCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgRGV2aWNlIG1hcHBlciBvciByYWlkIHRhcmdldCBzb21ldGltZXMgbmVlZCB0byBzcGxpdCBhIGJpbyBiZWNhdXNlCi0gKiAgICAgaXQgc3BhbnMgYSBzdHJpcGUgKG9yIHNpbWlsYXIpLiBBZGQgYSB0cmFjZSBmb3IgdGhhdCBhY3Rpb24uCi0gKgotICoqLwotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9yZW1hcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAotCQkJCSAgICAgICBkZXZfdCBkZXYsIHNlY3Rvcl90IGZyb20sIHNlY3Rvcl90IHRvKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCXN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgcjsKLQotCWlmIChsaWtlbHkoIWJ0KSkKLQkJcmV0dXJuOwotCi0Jci5kZXZpY2UgPSBjcHVfdG9fYmUzMihkZXYpOwotCXIuZGV2aWNlX2Zyb20gPSBjcHVfdG9fYmUzMihiaW8tPmJpX2JkZXYtPmJkX2Rldik7Ci0Jci5zZWN0b3IgPSBjcHVfdG9fYmU2NCh0byk7Ci0KLQlfX2Jsa19hZGRfdHJhY2UoYnQsIGZyb20sIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgQkxLX1RBX1JFTUFQLAotCQkJIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHIpLCAmcik7Ci19Ci0KLS8qKgotICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCi0gKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKLSAqIEBycToJCWlvIHJlcXVlc3QKLSAqIEBkYXRhOglkcml2ZXItc3BlY2lmaWMgZGF0YQotICogQGxlbjoJbGVuZ3RoIG9mIGRyaXZlci1zcGVjaWZpYyBkYXRhCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgU29tZSBkcml2ZXJzIG1pZ2h0IHdhbnQgdG8gd3JpdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgcGVyIHJlcXVlc3QuCi0gKgotICoqLwotdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgMCwgQkxLX1RBX0RSVl9EQVRBLAotCQkJCXJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7Ci0JZWxzZQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIHJxLT5oYXJkX3NlY3RvciwgcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5LAotCQkJCTAsIEJMS19UQV9EUlZfREFUQSwgcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpOwotCi1zdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9hYm9ydChibGtfYWRkX3RyYWNlX3JxX2Fib3J0KTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19ib3VuY2UoYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NsZWVwcnEoYmxrX2FkZF90cmFjZV9zbGVlcHJxKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8pOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7Ci0JV0FSTl9PTihyZXQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQotewotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbyk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc2xlZXBycShibGtfYWRkX3RyYWNlX3NsZWVwcnEpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JvdW5jZShibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2UpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9hYm9ydChibGtfYWRkX3RyYWNlX3JxX2Fib3J0KTsKLQotCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCA4YTg1MWQwLi40MzFmOGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMTEsOSArMTEsOSBAQAogCXNlbGVjdCBQTlAKIAlzZWxlY3QgQ1BVX0lETEUKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIChBQ1BJKSBzdXBwb3J0IGZvciAKLQkgIExpbnV4IHJlcXVpcmVzIGFuIEFDUEkgY29tcGxpYW50IHBsYXRmb3JtIChoYXJkd2FyZS9maXJtd2FyZSksCisJICBMaW51eCByZXF1aXJlcyBhbiBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSAoaGFyZHdhcmUvZmlybXdhcmUpLAogCSAgYW5kIGFzc3VtZXMgdGhlIHByZXNlbmNlIG9mIE9TLWRpcmVjdGVkIGNvbmZpZ3VyYXRpb24gYW5kIHBvd2VyCiAJICBtYW5hZ2VtZW50IChPU1BNKSBzb2Z0d2FyZS4gIFRoaXMgb3B0aW9uIHdpbGwgZW5sYXJnZSB5b3VyIAogCSAga2VybmVsIGJ5IGFib3V0IDcwSy4KQEAgLTIzLDIwICsyMywxOSBAQAogCSAgdGhlIFBsdWctYW5kLVBsYXkgQklPUyBzcGVjaWZpY2F0aW9uIChQblAgQklPUyksIHRoZSAKIAkgIE11bHRpUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gKE1QUyksIGFuZCB0aGUgQWR2YW5jZWQgUG93ZXIgCiAJICBNYW5hZ2VtZW50IChBUE0pIHNwZWNpZmljYXRpb24uICBJZiBib3RoIEFDUEkgYW5kIEFQTSBzdXBwb3J0IAotCSAgYXJlIGNvbmZpZ3VyZWQsIHdoaWNoZXZlciBpcyBsb2FkZWQgZmlyc3Qgc2hhbGwgYmUgdXNlZC4KKwkgIGFyZSBjb25maWd1cmVkLCBBQ1BJIGlzIHVzZWQuCiAKLQkgIFRoZSBBQ1BJIFNvdXJjZUZvcmdlIHByb2plY3QgY29udGFpbnMgdGhlIGxhdGVzdCBzb3VyY2UgY29kZSwgCi0JICBkb2N1bWVudGF0aW9uLCB0b29scywgbWFpbGluZyBsaXN0IHN1YnNjcmlwdGlvbiwgYW5kIG90aGVyIAotCSAgaW5mb3JtYXRpb24uICBUaGlzIHByb2plY3QgaXMgYXZhaWxhYmxlIGF0OgotCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYWNwaT4KKwkgIFRoZSBwcm9qZWN0IGhvbWUgcGFnZSBmb3IgdGhlIExpbnV4IEFDUEkgc3Vic3lzdGVtIGlzIGhlcmU6CisJICA8aHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL2FjcGkvPgogCiAJICBMaW51eCBzdXBwb3J0IGZvciBBQ1BJIGlzIGJhc2VkIG9uIEludGVsIENvcnBvcmF0aW9uJ3MgQUNQSQotCSAgQ29tcG9uZW50IEFyY2hpdGVjdHVyZSAoQUNQSSBDQSkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6Ci0JICA8aHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vdGVjaG5vbG9neS9pYXBjL2FjcGk+CisJICBDb21wb25lbnQgQXJjaGl0ZWN0dXJlIChBQ1BJIENBKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQorCSAgQUNQSSBDQSwgc2VlOgorCSAgPGh0dHA6Ly9hY3BpY2Eub3JnLz4KIAotCSAgQUNQSSBpcyBhbiBvcGVuIGluZHVzdHJ5IHNwZWNpZmljYXRpb24gY28tZGV2ZWxvcGVkIGJ5IENvbXBhcSwgCi0JICBJbnRlbCwgTWljcm9zb2Z0LCBQaG9lbml4LCBhbmQgVG9zaGliYS4gIFRoZSBzcGVjaWZpY2F0aW9uIGlzIAotCSAgYXZhaWxhYmxlIGF0OgorCSAgQUNQSSBpcyBhbiBvcGVuIGluZHVzdHJ5IHNwZWNpZmljYXRpb24gY28tZGV2ZWxvcGVkIGJ5CisJICBIZXdsZXR0LVBhY2thcmQsIEludGVsLCBNaWNyb3NvZnQsIFBob2VuaXgsIGFuZCBUb3NoaWJhLgorCSAgVGhlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIGF0OgogCSAgPGh0dHA6Ly93d3cuYWNwaS5pbmZvPgogCiBpZiBBQ1BJCkBAIC00OSwxNCArNDgsMTQgQEAKIGNvbmZpZyBBQ1BJX1BST0NGUwogCWJvb2wgIkRlcHJlY2F0ZWQgL3Byb2MvYWNwaSBmaWxlcyIKIAlkZXBlbmRzIG9uIFBST0NfRlMKLQktLS1oZWxwLS0tCisJaGVscAogCSAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIG9wdGlvbiBhbGxvd3MKIAkgIGRlcHJlY2F0ZWQgL3Byb2MvYWNwaS8gZmlsZXMgdG8gZXhpc3QsIGV2ZW4gd2hlbgogCSAgdGhleSBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgZnVuY3Rpb25zIGluIC9zeXMuCiAJICBUaGUgZGVwcmVjYXRlZCBmaWxlcyAoYW5kIHRoZWlyIHJlcGxhY2VtZW50cykgaW5jbHVkZToKIAogCSAgL3Byb2MvYWNwaS9zbGVlcCAoL3N5cy9wb3dlci9zdGF0ZSkKLQkgIC9wcm9jL2FjcGkvaW5mbyAoL3N5cy9tb2R1bGVzL2FjcGkvcGFyYW1ldGVycy9hY3BpY2FfdmVyc2lvbikKKwkgIC9wcm9jL2FjcGkvaW5mbyAoL3N5cy9tb2R1bGUvYWNwaS9wYXJhbWV0ZXJzL2FjcGljYV92ZXJzaW9uKQogCSAgL3Byb2MvYWNwaS9kc2R0ICgvc3lzL2Zpcm13YXJlL2FjcGkvdGFibGVzL0RTRFQpCiAJICAvcHJvYy9hY3BpL2ZhZHQgKC9zeXMvZmlybXdhcmUvYWNwaS90YWJsZXMvRkFDUCkKIAkgIC9wcm9jL2FjcGkvZGVidWdfbGF5ZXIgKC9zeXMvbW9kdWxlL2FjcGkvcGFyYW1ldGVycy9kZWJ1Z19sYXllcikKQEAgLTY2LDExICs2NSwxMiBAQAogCSAgYW5kIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QgeWV0IGV4aXN0IGluIC9zeXMuCiAKIAkgIFNheSBOIHRvIGRlbGV0ZSAvcHJvYy9hY3BpLyBmaWxlcyB0aGF0IGhhdmUgbW92ZWQgdG8gL3N5cy8KKwogY29uZmlnIEFDUElfUFJPQ0ZTX1BPV0VSCiAJYm9vbCAiRGVwcmVjYXRlZCBwb3dlciAvcHJvYy9hY3BpIGRpcmVjdG9yaWVzIgogCWRlcGVuZHMgb24gUFJPQ19GUwogCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoaXMgb3B0aW9uIGFsbG93cwogICAgICAgICAgIGRlcHJlY2F0ZWQgcG93ZXIgL3Byb2MvYWNwaS8gZGlyZWN0b3JpZXMgdG8gZXhpc3QsIGV2ZW4gd2hlbgogICAgICAgICAgIHRoZXkgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGZ1bmN0aW9ucyBpbiAvc3lzLgpAQCAtODYsMTkgKzg2LDE5IEBACiAJYm9vbCAiRnV0dXJlIHBvd2VyIC9zeXMgaW50ZXJmYWNlIgogCXNlbGVjdCBQT1dFUl9TVVBQTFkKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IE4gdG8gZGlzYWJsZSBwb3dlciAvc3lzIGludGVyZmFjZQogCiBjb25maWcgQUNQSV9QUk9DX0VWRU5UCiAJYm9vbCAiRGVwcmVjYXRlZCAvcHJvYy9hY3BpL2V2ZW50IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgQSB1c2VyLXNwYWNlIGRhZW1vbiwgYWNwaSwgdHlwaWNhbGx5IHJlYWQgL3Byb2MvYWNwaS9ldmVudAotCSAgYW5kIGhhbmRsZWQgYWxsIEFDUEkgc3ViLXN5c3RlbSBnZW5lcmF0ZWQgZXZlbnRzLgorCWhlbHAKKwkgIEEgdXNlci1zcGFjZSBkYWVtb24sIGFjcGlkLCB0eXBpY2FsbHkgcmVhZHMgL3Byb2MvYWNwaS9ldmVudAorCSAgYW5kIGhhbmRsZXMgYWxsIEFDUEktZ2VuZXJhdGVkIGV2ZW50cy4KIAotCSAgVGhlc2UgZXZlbnRzIGFyZSBub3cgZGVsaXZlcmVkIHRvIHVzZXItc3BhY2UgdmlhCi0JICBlaXRoZXIgdGhlIGlucHV0IGxheWVyLCBvciBhcyBuZXRsaW5rIGV2ZW50cy4KKwkgIFRoZXNlIGV2ZW50cyBhcmUgbm93IGRlbGl2ZXJlZCB0byB1c2VyLXNwYWNlIGVpdGhlcgorCSAgdmlhIHRoZSBpbnB1dCBsYXllciBvciBhcyBuZXRsaW5rIGV2ZW50cy4KIAogCSAgVGhpcyBidWlsZCBvcHRpb24gZW5hYmxlcyB0aGUgb2xkIGNvZGUgZm9yIGxlZ2FjeQogCSAgdXNlci1zcGFjZSBpbXBsZW1lbnRhdGlvbi4gIEFmdGVyIHNvbWUgdGltZSwgdGhpcyB3aWxsCkBAIC0xMTIsMTAgKzExMiwxMyBAQAogCWRlcGVuZHMgb24gWDg2CiAJZGVmYXVsdCB5CiAJaGVscAotCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUMgQWRhcHRlciBvYmplY3QsIHdoaWNoIGluZGljYXRlcwotCSAgd2hldGhlciBhIHN5c3RlbSBpcyBvbiBBQywgb3Igbm90LiBJZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGNhbgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFDIEFkYXB0ZXIgb2JqZWN0LCB3aGljaCBpbmRpY2F0ZXMKKwkgIHdoZXRoZXIgYSBzeXN0ZW0gaXMgb24gQUMgb3Igbm90LiAgSWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBjYW4KIAkgIHN3aXRjaCBiZXR3ZWVuIEEvQyBhbmQgYmF0dGVyeSwgc2F5IFkuCiAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjLgorCiBjb25maWcgQUNQSV9CQVRURVJZCiAJdHJpc3RhdGUgIkJhdHRlcnkiCiAJZGVwZW5kcyBvbiBYODYKQEAgLTEyNSwxNSArMTI4LDIxIEBACiAJICAvcHJvYy9hY3BpL2JhdHRlcnkuIElmIHlvdSBoYXZlIGEgbW9iaWxlIHN5c3RlbSB3aXRoIGEgYmF0dGVyeSwgCiAJICBzYXkgWS4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmF0dGVyeS4KKwogY29uZmlnIEFDUElfQlVUVE9OCiAJdHJpc3RhdGUgIkJ1dHRvbiIKIAlkZXBlbmRzIG9uIElOUFVUCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgVGhpcyBkcml2ZXIgaGFuZGxlcyBldmVudHMgb24gdGhlIHBvd2VyLCBzbGVlcCBhbmQgbGlkIGJ1dHRvbnMuCisJICBUaGlzIGRyaXZlciBoYW5kbGVzIGV2ZW50cyBvbiB0aGUgcG93ZXIsIHNsZWVwLCBhbmQgbGlkIGJ1dHRvbnMuCiAJICBBIGRhZW1vbiByZWFkcyAvcHJvYy9hY3BpL2V2ZW50IGFuZCBwZXJmb3JtIHVzZXItZGVmaW5lZCBhY3Rpb25zCiAJICBzdWNoIGFzIHNodXR0aW5nIGRvd24gdGhlIHN5c3RlbS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvcgotCSAgc29mdHdhcmUgY29udHJvbGxlZCBwb3dlcm9mZi4KKwkgIHNvZnR3YXJlLWNvbnRyb2xsZWQgcG93ZXJvZmYuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJ1dHRvbi4KIAogY29uZmlnIEFDUElfVklERU8KIAl0cmlzdGF0ZSAiVmlkZW8iCkBAIC0xNDEsMzggKzE1MCw0NSBAQAogCWRlcGVuZHMgb24gSU5QVVQKIAlzZWxlY3QgVEhFUk1BTAogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGltcGxlbWVudCB0aGUgQUNQSSBFeHRlbnNpb25zIEZvciBEaXNwbGF5IEFkYXB0ZXJzCisJICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBBQ1BJIEV4dGVuc2lvbnMgRm9yIERpc3BsYXkgQWRhcHRlcnMKIAkgIGZvciBpbnRlZ3JhdGVkIGdyYXBoaWNzIGRldmljZXMgb24gbW90aGVyYm9hcmQsIGFzIHNwZWNpZmllZCBpbgotCSAgQUNQSSAyLjAgU3BlY2lmaWNhdGlvbiwgQXBwZW5kaXggQiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBzb21lIGJhc2ljCi0JICBjb250cm9sIGxpa2UgZGVmaW5pbmcgdGhlIHZpZGVvIFBPU1QgZGV2aWNlLCByZXRyaWV2aW5nIEVESUQgaW5mb3JtYXRpb24KLQkgIG9yIHRvIHNldHVwIGEgdmlkZW8gb3V0cHV0LCBldGMuCi0JICBOb3RlIHRoYXQgdGhpcyBpcyBhbiByZWYuIGltcGxlbWVudGF0aW9uIG9ubHkuICBJdCBtYXkgb3IgbWF5IG5vdCB3b3JrCi0JICBmb3IgeW91ciBpbnRlZ3JhdGVkIHZpZGVvIGRldmljZS4KKwkgIEFDUEkgMi4wIFNwZWNpZmljYXRpb24sIEFwcGVuZGl4IEIuICBUaGlzIHN1cHBvcnRzIGJhc2ljIG9wZXJhdGlvbnMKKwkgIHN1Y2ggYXMgZGVmaW5pbmcgdGhlIHZpZGVvIFBPU1QgZGV2aWNlLCByZXRyaWV2aW5nIEVESUQgaW5mb3JtYXRpb24sCisJICBhbmQgc2V0dGluZyB1cCBhIHZpZGVvIG91dHB1dC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmlkZW8uCiAKIGNvbmZpZyBBQ1BJX0ZBTgogCXRyaXN0YXRlICJGYW4iCiAJc2VsZWN0IFRIRVJNQUwKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgZmFuIGRldmljZXMsIGFsbG93aW5nIHVzZXItbW9kZSAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFDUEkgZmFuIGRldmljZXMsIGFsbG93aW5nIHVzZXItbW9kZQogCSAgYXBwbGljYXRpb25zIHRvIHBlcmZvcm0gYmFzaWMgZmFuIGNvbnRyb2wgKG9uLCBvZmYsIHN0YXR1cykuCiAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZhbi4KKwogY29uZmlnIEFDUElfRE9DSwogCWJvb2wgIkRvY2siCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgY29udHJvbGxlZCBkb2NraW5nIHN0YXRpb25zIGFuZCByZW1vdmFibGUKLQkgIGRyaXZlIGJheXMgc3VjaCBhcyB0aGUgSUJNIHVsdHJhYmF5IG9yIHRoZSBEZWxsIE1vZHVsZSBCYXkuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBQ1BJLWNvbnRyb2xsZWQgZG9ja2luZyBzdGF0aW9ucyBhbmQgcmVtb3ZhYmxlCisJICBkcml2ZSBiYXlzIHN1Y2ggYXMgdGhlIElCTSBVbHRyYWJheSBhbmQgdGhlIERlbGwgTW9kdWxlIEJheS4KIAogY29uZmlnIEFDUElfUFJPQ0VTU09SCiAJdHJpc3RhdGUgIlByb2Nlc3NvciIKIAlzZWxlY3QgVEhFUk1BTAogCWRlZmF1bHQgeQogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGluc3RhbGxzIEFDUEkgYXMgdGhlIGlkbGUgaGFuZGxlciBmb3IgTGludXgsIGFuZCB1c2VzCi0JICBBQ1BJIEMyIGFuZCBDMyBwcm9jZXNzb3Igc3RhdGVzIHRvIHNhdmUgcG93ZXIsIG9uIHN5c3RlbXMgdGhhdAorCSAgVGhpcyBkcml2ZXIgaW5zdGFsbHMgQUNQSSBhcyB0aGUgaWRsZSBoYW5kbGVyIGZvciBMaW51eCBhbmQgdXNlcworCSAgQUNQSSBDMiBhbmQgQzMgcHJvY2Vzc29yIHN0YXRlcyB0byBzYXZlIHBvd2VyIG9uIHN5c3RlbXMgdGhhdAogCSAgc3VwcG9ydCBpdC4gIEl0IGlzIHJlcXVpcmVkIGJ5IHNldmVyYWwgZmxhdm9ycyBvZiBjcHVmcmVxCi0JICBQZXJmb3JtYW5jZS1zdGF0ZSBkcml2ZXJzLgorCSAgcGVyZm9ybWFuY2Utc3RhdGUgZHJpdmVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJvY2Vzc29yLgogCiBjb25maWcgQUNQSV9IT1RQTFVHX0NQVQogCWJvb2wKQEAgLTE4NiwxMSArMjAyLDE0IEBACiAJc2VsZWN0IFRIRVJNQUwKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgdGhlcm1hbCB6b25lcy4gIE1vc3QgbW9iaWxlIGFuZAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQUNQSSB0aGVybWFsIHpvbmVzLiAgTW9zdCBtb2JpbGUgYW5kCiAJICBzb21lIGRlc2t0b3Agc3lzdGVtcyBzdXBwb3J0IEFDUEkgdGhlcm1hbCB6b25lcy4gIEl0IGlzIEhJR0hMWQogCSAgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG9wdGlvbiBiZSBlbmFibGVkLCBhcyB5b3VyIHByb2Nlc3NvcihzKQogCSAgbWF5IGJlIGRhbWFnZWQgd2l0aG91dCBpdC4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGhlcm1hbC4KKwogY29uZmlnIEFDUElfTlVNQQogCWJvb2wgIk5VTUEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5VTUEKQEAgLTIxOCw3ICsyMzcsNyBAQAogCWludCAiRGlzYWJsZSBBQ1BJIGZvciBzeXN0ZW1zIGJlZm9yZSBKYW4gMXN0IHRoaXMgeWVhciIgaWYgWDg2XzMyCiAJZGVmYXVsdCAwCiAJaGVscAotCSAgZW50ZXIgYSA0LWRpZ2l0IHllYXIsIGVnLiAyMDAxIHRvIGRpc2FibGUgQUNQSSBieSBkZWZhdWx0CisJICBFbnRlciBhIDQtZGlnaXQgeWVhciwgZS5nLiwgMjAwMSwgdG8gZGlzYWJsZSBBQ1BJIGJ5IGRlZmF1bHQKIAkgIG9uIHBsYXRmb3JtcyB3aXRoIERNSSBCSU9TIGRhdGUgYmVmb3JlIEphbnVhcnkgMXN0IHRoYXQgeWVhci4KIAkgICJhY3BpPWZvcmNlIiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzIG1lY2hhbmlzbS4KIApAQCAtMjQ5LDEwICsyNjgsMTMgQEAKIAl0cmlzdGF0ZSAiUENJIHNsb3QgZGV0ZWN0aW9uIGRyaXZlciIKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gZGlzY292ZXIgYWxsIFBDSSBzbG90cyBpbiB5b3VyIHN5c3RlbSwKLQkgIGFuZCBjcmVhdGVzIGVudHJpZXMgaW4gL3N5cy9idXMvcGNpL3Nsb3RzLy4gVGhpcyBmZWF0dXJlIGNhbgotCSAgaGVscCB5b3UgY29ycmVsYXRlIFBDSSBidXMgYWRkcmVzc2VzIHdpdGggdGhlIHBoeXNpY2FsIGdlb2dyYXBoeQotCSAgb2YgeW91ciBzbG90cy4gSWYgeW91IGFyZSB1bnN1cmUsIHNheSBOLgorCSAgVGhpcyBkcml2ZXIgY3JlYXRlcyBlbnRyaWVzIGluIC9zeXMvYnVzL3BjaS9zbG90cy8gZm9yIGFsbCBQQ0kKKwkgIHNsb3RzIGluIHRoZSBzeXN0ZW0uICBUaGlzIGNhbiBoZWxwIGNvcnJlbGF0ZSBQQ0kgYnVzIGFkZHJlc3NlcywKKwkgIGkuZS4sIHNlZ21lbnQvYnVzL2RldmljZS9mdW5jdGlvbiB0dXBsZXMsIHdpdGggcGh5c2ljYWwgc2xvdHMgaW4KKwkgIHRoZSBzeXN0ZW0uICBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBjaV9zbG90LgogCiBjb25maWcgWDg2X1BNX1RJTUVSCiAJYm9vbCAiUG93ZXIgTWFuYWdlbWVudCBUaW1lciBTdXBwb3J0IiBpZiBFTUJFRERFRApAQCAtMjcxLDQzICsyOTMsNDMgQEAKIAkgIHN5c3RlbXMgcmVxdWlyZSB0aGlzIHRpbWVyLiAKIAogY29uZmlnIEFDUElfQ09OVEFJTkVSCi0JdHJpc3RhdGUgIkFDUEkwMDA0LFBOUDBBMDUgYW5kIFBOUDBBMDYgQ29udGFpbmVyIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiQ29udGFpbmVyIGFuZCBNb2R1bGUgRGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgKEFDUElfSE9UUExVR19NRU1PUlkgfHwgQUNQSV9IT1RQTFVHX0NQVSB8fCBBQ1BJX0hPVFBMVUdfSU8pCi0JIC0tLWhlbHAtLS0KLQkgIFRoaXMgYWxsb3dzIF9waHlzaWNhbF8gaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIENQVXMgYW5kIG1lbW9yeS4KLQkgIFRoaXMgY2FuIGJlIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIG9uIE5VTUEgbWFjaGluZXMgdGhhdCBzdXBwb3J0Ci0JICBBQ1BJIGJhc2VkIHBoeXNpY2FsIGhvdHBsdWcgb2Ygbm9kZXMsIG9yIG5vbi1OVU1BIG1hY2hpbmVzIHRoYXQKLQkgIHN1cHBvcnQgcGh5c2ljYWwgY3B1L21lbW9yeSBob3QtcGx1Zy4KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBQ1BJIENvbnRhaW5lciBhbmQgTW9kdWxlIGRldmljZXMgKElEcworCSAgQUNQSTAwMDQsIFBOUDBBMDUsIGFuZCBQTlAwQTA2KS4KIAotCSAgSWYgb25lIHNlbGVjdHMgIm0iLCB0aGlzIGRyaXZlciBjYW4gYmUgbG9hZGVkIHdpdGgKLQkgICJtb2Rwcm9iZSBjb250YWluZXIiLgorCSAgVGhpcyBoZWxwcyBzdXBwb3J0IGhvdHBsdWcgb2Ygbm9kZXMsIENQVXMsIGFuZCBtZW1vcnkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNvbnRhaW5lci4KIAogY29uZmlnIEFDUElfSE9UUExVR19NRU1PUlkKIAl0cmlzdGF0ZSAiTWVtb3J5IEhvdHBsdWciCiAJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRwogCWRlZmF1bHQgbgogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydHMgZm9yIEFDUEkgTWVtb3J5IEhvdHBsdWcuICBUaGlzIGRyaXZlcgotCSAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZmllbGRpbmcgbm90aWZpY2F0aW9ucyBvbiBBQ1BJIG1lbW9yeQotCSAgZGV2aWNlcyAoUE5QMEM4MCkgd2hpY2ggcmVwcmVzZW50IG1lbW9yeSByYW5nZXMgdGhhdCBtYXkgYmUKLQkgIG9ubGluZWQgb3Igb2ZmbGluZWQgZHVyaW5nIHJ1bnRpbWUuICAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFDUEkgbWVtb3J5IGhvdHBsdWcuICBUaGUgZHJpdmVyCisJICBmaWVsZHMgbm90aWZpY2F0aW9ucyBvbiBBQ1BJIG1lbW9yeSBkZXZpY2VzIChQTlAwQzgwKSwKKwkgIHdoaWNoIHJlcHJlc2VudCBtZW1vcnkgcmFuZ2VzIHRoYXQgbWF5IGJlIG9ubGluZWQgb3IKKwkgIG9mZmxpbmVkIGR1cmluZyBydW50aW1lLgogCi0JICBFbmFibGluZyB0aGlzIGRyaXZlciBhc3N1bWVzIHRoYXQgeW91ciBwbGF0Zm9ybSBoYXJkd2FyZQotCSAgYW5kIGZpcm13YXJlIGhhdmUgc3VwcG9ydCBmb3IgaG90LXBsdWdnaW5nIHBoeXNpY2FsIG1lbW9yeS4gSWYKLQkgIHlvdXIgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgcGh5c2ljYWxseSBhZGRpbmcgb3IgcmlwcGluZyBvdXQgCi0JICBtZW1vcnkgRElNTXMgYXQgc29tZSBwbGF0Zm9ybSBkZWZpbmVkIGdyYW51bGFyaXR5IChpbmRpdmlkdWFsbHkgCi0JICBvciBhcyBhIGJhbmspIGF0IHJ1bnRpbWUsIHRoZW4geW91IG5lZWQgbm90IGVuYWJsZSB0aGlzIGRyaXZlci4KKwkgIElmIHlvdXIgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGRvIG5vdCBzdXBwb3J0IGFkZGluZyBvcgorCSAgcmVtb3ZpbmcgbWVtb3J5IGRldmljZXMgYXQgcnVudGltZSwgeW91IG5lZWQgbm90IGVuYWJsZQorCSAgdGhpcyBkcml2ZXIuCiAKLQkgIElmIG9uZSBzZWxlY3RzICJtLCIgdGhpcyBkcml2ZXIgY2FuIGJlIGxvYWRlZCB1c2luZyB0aGUgZm9sbG93aW5nCi0JICBjb21tYW5kOiAKLQkJJD5tb2Rwcm9iZSBhY3BpX21lbWhvdHBsdWcgCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOgorCSAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3BpX21lbWhvdHBsdWcuCiAKIGNvbmZpZyBBQ1BJX1NCUwogCXRyaXN0YXRlICJTbWFydCBCYXR0ZXJ5IFN5c3RlbSIKIAlkZXBlbmRzIG9uIFg4NgogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNtYXJ0IEJhdHRlcnkgU3lzdGVtLCBhbm90aGVyCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU21hcnQgQmF0dGVyeSBTeXN0ZW0sIGFub3RoZXIKIAkgIHR5cGUgb2YgYWNjZXNzIHRvIGJhdHRlcnkgaW5mb3JtYXRpb24sIGZvdW5kIG9uIHNvbWUgbGFwdG9wcy4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGVzIHdpbGwgYmUgY2FsbGVkIHNicyBhbmQgc2JzaGMuCisKIGVuZGlmCSMgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IGIxMzBlYTAuLjAzYTk4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTE0LDQ4ICsxNCw1MCBAQAogIwogIyBBQ1BJIENvcmUgU3Vic3lzdGVtIChJbnRlcnByZXRlcikKICMKLW9iai15CQkJCSs9IG9zbC5vIHV0aWxzLm8gcmVib290Lm9cCitvYmoteQkJCQkrPSBhY3BpLm8gXAogCQkJCQlhY3BpY2EvCiAKKyMgQWxsIHRoZSBidWlsdGluIGZpbGVzIGFyZSBpbiB0aGUgImFjcGkuIiBtb2R1bGVfcGFyYW0gbmFtZXNwYWNlLgorYWNwaS15CQkJCSs9IG9zbC5vIHV0aWxzLm8gcmVib290Lm8KKwogIyBzbGVlcCByZWxhdGVkIGZpbGVzCi1vYmoteQkJCQkrPSB3YWtldXAubwotb2JqLXkJCQkJKz0gc2xlZXAubwotb2JqLSQoQ09ORklHX0FDUElfU0xFRVApCSs9IHByb2MubworYWNwaS15CQkJCSs9IHdha2V1cC5vCithY3BpLXkJCQkJKz0gc2xlZXAubworYWNwaS0kKENPTkZJR19BQ1BJX1NMRUVQKQkrPSBwcm9jLm8KIAogCiAjCiAjIEFDUEkgQnVzIGFuZCBEZXZpY2UgRHJpdmVycwogIwotcHJvY2Vzc29yLW9ianMJKz0gcHJvY2Vzc29yX2NvcmUubyBwcm9jZXNzb3JfdGhyb3R0bGluZy5vIFwKLQkJCQlwcm9jZXNzb3JfaWRsZS5vIHByb2Nlc3Nvcl90aGVybWFsLm8KLWlmZGVmIENPTkZJR19DUFVfRlJFUQotcHJvY2Vzc29yLW9ianMJKz0gcHJvY2Vzc29yX3BlcmZsaWIubworYWNwaS15CQkJCSs9IGJ1cy5vIGdsdWUubworYWNwaS15CQkJCSs9IHNjYW4ubworYWNwaS15CQkJCSs9IGVjLm8KK2FjcGktJChDT05GSUdfQUNQSV9ET0NLKQkrPSBkb2NrLm8KK2FjcGkteQkJCQkrPSBwY2lfcm9vdC5vIHBjaV9saW5rLm8gcGNpX2lycS5vIHBjaV9iaW5kLm8KK2FjcGkteQkJCQkrPSBwb3dlci5vCithY3BpLXkJCQkJKz0gc3lzdGVtLm8gZXZlbnQubworYWNwaS0kKENPTkZJR19BQ1BJX0RFQlVHKQkrPSBkZWJ1Zy5vCithY3BpLSQoQ09ORklHX0FDUElfTlVNQSkJKz0gbnVtYS5vCithY3BpLSQoQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSKSArPSBjbV9zYnMubworaWZkZWYgQ09ORklHX0FDUElfVklERU8KK2FjcGkteQkJCQkrPSB2aWRlb19kZXRlY3QubwogZW5kaWYKIAotb2JqLXkJCQkJKz0gYnVzLm8gZ2x1ZS5vCi1vYmoteQkJCQkrPSBzY2FuLm8KLSMgS2VlcCBFQyBkcml2ZXIgZmlyc3QuIEluaXRpYWxpemF0aW9uIG9mIG90aGVycyBkZXBlbmQgb24gaXQuCi1vYmoteQkJCQkrPSBlYy5vCisjIFRoZXNlIGFyZSAocG90ZW50aWFsbHkpIHNlcGFyYXRlIG1vZHVsZXMKIG9iai0kKENPTkZJR19BQ1BJX0FDKSAJCSs9IGFjLm8KLW9iai0kKENPTkZJR19BQ1BJX0JBVFRFUlkpCSs9IGJhdHRlcnkubwogb2JqLSQoQ09ORklHX0FDUElfQlVUVE9OKQkrPSBidXR0b24ubwogb2JqLSQoQ09ORklHX0FDUElfRkFOKQkJKz0gZmFuLm8KLW9iai0kKENPTkZJR19BQ1BJX0RPQ0spCQkrPSBkb2NrLm8KIG9iai0kKENPTkZJR19BQ1BJX1ZJREVPKQkrPSB2aWRlby5vCi1pZmRlZiBDT05GSUdfQUNQSV9WSURFTwotb2JqLXkJCQkJKz0gdmlkZW9fZGV0ZWN0Lm8KLWVuZGlmCi0KLW9iai15CQkJCSs9IHBjaV9yb290Lm8gcGNpX2xpbmsubyBwY2lfaXJxLm8gcGNpX2JpbmQubwogb2JqLSQoQ09ORklHX0FDUElfUENJX1NMT1QpCSs9IHBjaV9zbG90Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BST0NFU1NPUikJKz0gcHJvY2Vzc29yLm8KIG9iai0kKENPTkZJR19BQ1BJX0NPTlRBSU5FUikJKz0gY29udGFpbmVyLm8KIG9iai0kKENPTkZJR19BQ1BJX1RIRVJNQUwpCSs9IHRoZXJtYWwubwotb2JqLXkJCQkJKz0gcG93ZXIubwotb2JqLXkJCQkJKz0gc3lzdGVtLm8gZXZlbnQubwotb2JqLSQoQ09ORklHX0FDUElfREVCVUcpCSs9IGRlYnVnLm8KLW9iai0kKENPTkZJR19BQ1BJX05VTUEpCQkrPSBudW1hLm8KLW9iai0kKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZKQkrPSBhY3BpX21lbWhvdHBsdWcubwotb2JqLSQoQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSKQkrPSBjbV9zYnMubworb2JqLSQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpICs9IGFjcGlfbWVtaG90cGx1Zy5vCitvYmotJChDT05GSUdfQUNQSV9CQVRURVJZKQkrPSBiYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNic2hjLm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNicy5vCisKKyMgcHJvY2Vzc29yIGhhcyBpdHMgb3duICJwcm9jZXNzb3IuIiBtb2R1bGVfcGFyYW0gbmFtZXNwYWNlCitwcm9jZXNzb3IteQkJCTo9IHByb2Nlc3Nvcl9jb3JlLm8gcHJvY2Vzc29yX3Rocm90dGxpbmcubworcHJvY2Vzc29yLXkJCQkrPSBwcm9jZXNzb3JfaWRsZS5vIHByb2Nlc3Nvcl90aGVybWFsLm8KK3Byb2Nlc3Nvci0kKENPTkZJR19DUFVfRlJFUSkJKz0gcHJvY2Vzc29yX3BlcmZsaWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUKaW5kZXggM2YyMzI5OC4uMTdlNTA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBACiAJIGV4Y3JlYXRlLm8gIGV4bWlzYy5vICAgZXhvcGFyZzIubyAgZXhyZWdpb24ubyAgZXhzdG9yZS5vICAgZXh1dGlscy5vIFwKIAkgZXhkdW1wLm8gICAgZXhtdXRleC5vICBleG9wYXJnMy5vICBleHJlc250ZS5vICBleHN0b3Jlbi5vCiAKLW9iai15ICs9IGh3YWNwaS5vICBod2dwZS5vICBod3JlZ3MubyAgaHdzbGVlcC5vIGh3eGZhY2Uubworb2JqLXkgKz0gaHdhY3BpLm8gIGh3Z3BlLm8gIGh3cmVncy5vICBod3NsZWVwLm8gaHd4ZmFjZS5vIGh3dmFsaWQubwogCiBvYmotJChBQ1BJX0ZVVFVSRV9VU0FHRSkgKz0gaHd0aW1lci5vCiAKQEAgLTQxLDQgKzQxLDQgQEAKIAogb2JqLXkgKz0gdXRhbGxvYy5vIHV0ZGVidWcubyB1dGV2YWwubyB1dGluaXQubyB1dG1pc2MubyB1dHhmYWNlLm8gXAogCQl1dGNvcHkubyB1dGRlbGV0ZS5vIHV0Z2xvYmFsLm8gdXRtYXRoLm8gdXRvYmplY3QubyBcCi0JCXV0c3RhdGUubyB1dG11dGV4Lm8gdXRvYmplY3QubyB1dHJlc3JjLm8KKwkJdXRzdGF0ZS5vIHV0bXV0ZXgubyB1dG9iamVjdC5vIHV0cmVzcmMubyB1dGxvY2subwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCmluZGV4IGRkYjQwZjUuLjE2ZTUyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKQEAgLTE0OCw5ICsxNDgsMTIgQEAKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgYWNwaV9nYmxfRkFEVDsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX3RhYmxlX2ZhY3MgKmFjcGlfZ2JsX0ZBQ1M7CiAKLS8qIFRoZXNlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIEZBRFQgYWRkcmVzcyB2YWx1ZXMgKi8KKy8qIFRoZXNlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBGQURUIEV2ZW50IEJsb2NrIGFkZHJlc3NlcyAqLwogCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgYWNwaV9nYmxfeHBtMWFfc3RhdHVzOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGFjcGlfZ2JsX3hwbTFhX2VuYWJsZTsKKworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGFjcGlfZ2JsX3hwbTFiX3N0YXR1czsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBhY3BpX2dibF94cG0xYl9lbmFibGU7CiAKIC8qCkBAIC0xNjIsNiArMTY1LDEwIEBACiBBQ1BJX0VYVEVSTiB1OCBhY3BpX2dibF9pbnRlZ2VyX2J5dGVfd2lkdGg7CiBBQ1BJX0VYVEVSTiB1OCBhY3BpX2dibF9pbnRlZ2VyX255YmJsZV93aWR0aDsKIAorLyogUmVhZGVyL1dyaXRlciBsb2NrIGlzIHVzZWQgZm9yIG5hbWVzcGFjZSB3YWxrIGFuZCBkeW5hbWljIHRhYmxlIHVubG9hZCAqLworCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9yd19sb2NrIGFjcGlfZ2JsX25hbWVzcGFjZV9yd19sb2NrOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBNdXR1YWwgZXhsdXNpb24gd2l0aGluIEFDUElDQSBzdWJzeXN0ZW0KQEAgLTI0NSw2ICsyNTIsNyBAQAogQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfYWNwaV9oYXJkd2FyZV9wcmVzZW50OwogQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfZXZlbnRzX2luaXRpYWxpemVkOwogQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfc3lzdGVtX2F3YWtlX2FuZF9ydW5uaW5nOworQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfb3NpX2RhdGE7CiAKICNpZm5kZWYgREVGSU5FX0FDUElfR0xPQkFMUwogCkBAIC0zNzEsNyArMzc5LDYgQEAKIEFDUElfRVhURVJOIGNoYXIgKmFjcGlfZ2JsX2RiX2ZpbGVuYW1lOwogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX2RiX2RlYnVnX2xldmVsOwogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX2RiX2NvbnNvbGVfZGVidWdfbGV2ZWw7Ci1BQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmFjcGlfZ2JsX2RiX3RhYmxlX3B0cjsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX2dibF9kYl9zY29wZV9ub2RlOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAppbmRleCA1OGM2OWRjLi40YWZhM2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaApAQCAtNjQsMTQgKzY0LDIyIEBACiAgKi8KIHN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICphY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyh1MzIgcmVnaXN0ZXJfaWQpOwogCi1hY3BpX3N0YXR1cwotYWNwaV9od19yZWdpc3Rlcl9yZWFkKHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKTsKK2FjcGlfc3RhdHVzIGFjcGlfaHdfd3JpdGVfcG0xX2NvbnRyb2wodTMyIHBtMWFfY29udHJvbCwgdTMyIHBtMWJfY29udHJvbCk7CisKK2FjcGlfc3RhdHVzIGFjcGlfaHdfcmVnaXN0ZXJfcmVhZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9od19yZWdpc3Rlcl93cml0ZSh1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXModm9pZCk7CiAKIC8qCisgKiBod3ZhbGlkIC0gUG9ydCBJL08gd2l0aCB2YWxpZGF0aW9uCisgKi8KK2FjcGlfc3RhdHVzIGFjcGlfaHdfcmVhZF9wb3J0KGFjcGlfaW9fYWRkcmVzcyBhZGRyZXNzLCB1MzIgKnZhbHVlLCB1MzIgd2lkdGgpOworCithY3BpX3N0YXR1cyBhY3BpX2h3X3dyaXRlX3BvcnQoYWNwaV9pb19hZGRyZXNzIGFkZHJlc3MsIHUzMiB2YWx1ZSwgdTMyIHdpZHRoKTsKKworLyoKICAqIGh3Z3BlIC0gR1BFIHN1cHBvcnQKICAqLwogYWNwaV9zdGF0dXMgYWNwaV9od19sb3dfZGlzYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKaW5kZXggNDkyZDAyNy4uNzcyZWU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qIExvY2sgc3RydWN0dXJlIGZvciByZWFkZXIvd3JpdGVyIGludGVyZmFjZXMgKi8KKworc3RydWN0IGFjcGlfcndfbG9jayB7CisJYWNwaV9tdXRleCB3cml0ZXJfbXV0ZXg7CisJYWNwaV9tdXRleCByZWFkZXJfbXV0ZXg7CisJdTMyIG51bV9yZWFkZXJzOworfTsKKwogLyoKICAqIFByZWRlZmluZWQgaGFuZGxlcyBmb3Igc3BpbmxvY2tzIHVzZWQgd2l0aGluIHRoZSBzdWJzeXN0ZW0uCiAgKiBUaGVzZSBzcGlubG9ja3MgYXJlIGNyZWF0ZWQgYnkgYWNwaV91dF9tdXRleF9pbml0aWFsaXplCkBAIC03NzIsNyArNzgwLDE5IEBACiAgKiBtdXN0IGJlIHByZXNlcnZlZC4KICAqLwogI2RlZmluZSBBQ1BJX1BNMV9TVEFUVVNfUFJFU0VSVkVEX0JJVFMgICAgICAgICAgMHgwODAwCS8qIEJpdCAxMSAqLwotI2RlZmluZSBBQ1BJX1BNMV9DT05UUk9MX1BSRVNFUlZFRF9CSVRTICAgICAgICAgMHgwMjAwCS8qIEJpdCA5ICh3aGF0ZXZlcikgKi8KKworLyogV3JpdGUtb25seSBiaXRzIG11c3QgYmUgemVyb2VkIGJ5IHNvZnR3YXJlICovCisKKyNkZWZpbmUgQUNQSV9QTTFfQ09OVFJPTF9XUklURU9OTFlfQklUUyAgICAgICAgIDB4MjAwNAkvKiBCaXRzIDEzLCAyICovCisKKy8qIEZvciBjb250cm9sIHJlZ2lzdGVycywgYm90aCBpZ25vcmVkIGFuZCByZXNlcnZlZCBiaXRzIG11c3QgYmUgcHJlc2VydmVkICovCisKKyNkZWZpbmUgQUNQSV9QTTFfQ09OVFJPTF9JR05PUkVEX0JJVFMgICAgICAgICAgIDB4MDIwMQkvKiBCaXRzIDksIDAoU0NJX0VOKSAqLworI2RlZmluZSBBQ1BJX1BNMV9DT05UUk9MX1JFU0VSVkVEX0JJVFMgICAgICAgICAgMHhDMUY4CS8qIEJpdHMgMTQtMTUsIDMtOCAqLworI2RlZmluZSBBQ1BJX1BNMV9DT05UUk9MX1BSRVNFUlZFRF9CSVRTIFwKKwkgICAgICAgKEFDUElfUE0xX0NPTlRST0xfSUdOT1JFRF9CSVRTIHwgQUNQSV9QTTFfQ09OVFJPTF9SRVNFUlZFRF9CSVRTKQorCisjZGVmaW5lIEFDUElfUE0yX0NPTlRST0xfUFJFU0VSVkVEX0JJVFMgICAgICAgICAweEZGRkZGRkZFCS8qIEFsbCBleGNlcHQgYml0IDAgKi8KIAogLyoKICAqIFJlZ2lzdGVyIElEcwpAQCAtNzgxLDEyICs4MDEsMTAgQEAKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFBX0NPTlRST0wgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFCX0NPTlRST0wgICAgICAgICAgICAgIDB4MDUKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTV9USU1FUiAgICAgICAgICAgICAgICAgIDB4MDcKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QUk9DRVNTT1JfQkxPQ0sgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9TTUlfQ09NTUFORF9CTE9DSyAgICAgICAgIDB4MDkKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTV9USU1FUiAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QUk9DRVNTT1JfQkxPQ0sgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9TTUlfQ09NTUFORF9CTE9DSyAgICAgICAgIDB4MDcKIAogLyogTWFza3MgdXNlZCB0byBhY2Nlc3MgdGhlIGJpdF9yZWdpc3RlcnMgKi8KIApAQCAtODE4LDcgKzgzNiw3IEBACiAjZGVmaW5lIEFDUElfQklUTUFTS19TQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQUNQSV9CSVRNQVNLX0JVU19NQVNURVJfUkxEICAgICAgICAgICAgIDB4MDAwMgogI2RlZmluZSBBQ1BJX0JJVE1BU0tfR0xPQkFMX0xPQ0tfUkVMRUFTRSAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIEFDUElfQklUTUFTS19TTEVFUF9UWVBFX1ggICAgICAgICAgICAgICAweDFDMDAKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1NMRUVQX1RZUEUgICAgICAgICAgICAgICAgIDB4MUMwMAogI2RlZmluZSBBQ1BJX0JJVE1BU0tfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgMHgyMDAwCiAKICNkZWZpbmUgQUNQSV9CSVRNQVNLX0FSQl9ESVNBQkxFICAgICAgICAgICAgICAgIDB4MDAwMQpAQCAtODQ0LDExICs4NjIsMzUgQEAKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TQ0lfRU5BQkxFICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9CVVNfTUFTVEVSX1JMRCAgICAgICAgIDB4MDEKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9HTE9CQUxfTE9DS19SRUxFQVNFICAgIDB4MDIKLSNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9UWVBFX1ggICAgICAgICAgIDB4MEEKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9UWVBFICAgICAgICAgICAgIDB4MEEKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9FTkFCTEUgICAgICAgICAgIDB4MEQKIAogI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX0FSQl9ESVNBQkxFICAgICAgICAgICAgMHgwMAogCisvKiBTdHJ1Y3RzIGFuZCBkZWZpbml0aW9ucyBmb3IgX09TSSBzdXBwb3J0IGFuZCBJL08gcG9ydCB2YWxpZGF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9PU0lfV0lOXzIwMDAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfT1NJX1dJTl9YUCAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX09TSV9XSU5fWFBfU1AxICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9PU0lfV0lOU1JWXzIwMDMgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfT1NJX1dJTl9YUF9TUDIgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX09TSV9XSU5TUlZfMjAwM19TUDEgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9PU0lfV0lOX1ZJU1RBICAgICAgICAgICAgICAweDA3CisKKyNkZWZpbmUgQUNQSV9BTFdBWVNfSUxMRUdBTCAgICAgICAgICAgICAweDAwCisKK3N0cnVjdCBhY3BpX2ludGVyZmFjZV9pbmZvIHsKKwljaGFyICpuYW1lOworCXU4IHZhbHVlOworfTsKKworc3RydWN0IGFjcGlfcG9ydF9pbmZvIHsKKwljaGFyICpuYW1lOworCXUxNiBzdGFydDsKKwl1MTYgZW5kOworCXU4IG9zaV9kZXBlbmRlbmN5OworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogUmVzb3VyY2UgZGVzY3JpcHRvcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAppbmRleCA5YzEyN2U4Li45MWFjN2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCkBAIC0yOTIsMTAgKzI5Miw2IEBACiAjZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5jb21tb24uZGVzY3JpcHRvcl90eXBlKQogI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCwgdCkgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IHQpCiAKLS8qIE1hY3JvIHRvIHRlc3QgdGhlIG9iamVjdCB0eXBlICovCi0KLSNkZWZpbmUgQUNQSV9HRVRfT0JKRUNUX1RZUEUoZCkgICAgICAgICAoKCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICopKHZvaWQgKikoZCkpLT5jb21tb24udHlwZSkKLQogLyoKICAqIE1hY3JvcyBmb3IgdGhlIG1hc3RlciBBTUwgb3Bjb2RlIHRhYmxlCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAppbmRleCBlYjZmMDM4Li41NDRkY2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCkBAIC05Nyw3ICs5Nyw2IEBACiAjZGVmaW5lIEFPUE9CSl9PQkpFQ1RfSU5JVElBTElaRUQgICAweDA4CiAjZGVmaW5lIEFPUE9CSl9TRVRVUF9DT01QTEVURSAgICAgICAweDEwCiAjZGVmaW5lIEFPUE9CSl9TSU5HTEVfREFUVU0gICAgICAgICAweDIwCi0jZGVmaW5lIEFPUE9CSl9JTlZBTElEICAgICAgICAgICAgICAweDQwCS8qIFVzZWQgaWYgaG9zdCBPUyB3b24ndCBhbGxvdyBhbiBvcF9yZWdpb24gYWRkcmVzcyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IDE2YTljYTkuLjYzZjY1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTUyLDQxICs1Miw0NCBAQAogICogMSkgUFRZUEUxIHBhY2thZ2VzIGRvIG5vdCBjb250YWluIHN1Yi1wYWNrYWdlcy4KICAqCiAgKiBBQ1BJX1BUWVBFMV9GSVhFRDogRml4ZWQgbGVuZ3RoLCAxIG9yIDIgb2JqZWN0IHR5cGVzOgotICogICAgIG9iamVjdCB0eXBlCi0gKiAgICAgY291bnQKLSAqICAgICBvYmplY3QgdHlwZQotICogICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CiAgKgogICogQUNQSV9QVFlQRTFfVkFSOiBWYXJpYWJsZSBsZW5ndGg6Ci0gKiAgICBvYmplY3QgdHlwZSAoSW50L0J1Zi9SZWYpCisgKiAgICAgIG9iamVjdCB0eXBlIChJbnQvQnVmL1JlZikKICAqCi0gKiBBQ1BJX1BUWVBFMV9PUFRJT046IFBhY2thZ2UgaGFzIHNvbWUgcmVxdWlyZWQgYW5kIHNvbWUgb3B0aW9uYWwgZWxlbWVudHM6Ci0gKiAgICAgIFVzZWQgZm9yIF9QUlcKKyAqIEFDUElfUFRZUEUxX09QVElPTjogUGFja2FnZSBoYXMgc29tZSByZXF1aXJlZCBhbmQgc29tZSBvcHRpb25hbCBlbGVtZW50cworICogICAgICAoVXNlZCBmb3IgX1BSVykKICAqCiAgKgogICogMikgUFRZUEUyIHBhY2thZ2VzIGNvbnRhaW4gYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLiBFYWNoIG9mIHRoZQogICogICAgZGlmZmVyZW50IHR5cGVzIGRlc2NyaWJlIHRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBzdWItcGFja2FnZXMuCiAgKgogICogQUNQSV9QVFlQRTI6IEVhY2ggc3VicGFja2FnZSBjb250YWlucyAxIG9yIDIgb2JqZWN0IHR5cGVzOgotICogICAgIG9iamVjdCB0eXBlCi0gKiAgICAgY291bnQKLSAqICAgICBvYmplY3QgdHlwZQotICogICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIChVc2VkIGZvciBfQUxSLF9NTFMsX1BTUyxfVFJULF9UU1MpCiAgKgogICogQUNQSV9QVFlQRTJfQ09VTlQ6IEVhY2ggc3VicGFja2FnZSBoYXMgYSBjb3VudCBhcyBmaXJzdCBlbGVtZW50OgotICogICAgIG9iamVjdCB0eXBlCisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIChVc2VkIGZvciBfQ1NELF9QU0QsX1RTRCkKICAqCiAgKiBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6IENvdW50IG9mIHN1YnBhY2thZ2VzIGF0IHN0YXJ0LCAxIG9yIDIgb2JqZWN0IHR5cGVzOgotICogICAgIG9iamVjdCB0eXBlCi0gKiAgICAgY291bnQKLSAqICAgICBvYmplY3QgdHlwZQotICogICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIChVc2VkIGZvciBfQ1NUKQogICoKLSAqIEFDUElfUFRZUEUyX0ZJWEVEOiBFYWNoIHN1YnBhY2thZ2UgaXMgb2YgZml4ZWQgbGVuZ3RoOgotICogICAgICBVc2VkIGZvciBfUFJUCisgKiBBQ1BJX1BUWVBFMl9GSVhFRDogRWFjaCBzdWJwYWNrYWdlIGlzIG9mIGZpeGVkIGxlbmd0aAorICogICAgICAoVXNlZCBmb3IgX1BSVCkKICAqCiAgKiBBQ1BJX1BUWVBFMl9NSU46IEVhY2ggc3VicGFja2FnZSBoYXMgYSB2YXJpYWJsZSBidXQgbWluaW11bSBsZW5ndGgKLSAqICAgICAgVXNlZCBmb3IgX0hQWAorICogICAgICAoVXNlZCBmb3IgX0hQWCkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaAppbmRleCA3Y2U2ZTMzLi4wMWM3NmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3RhYmxlcy5oCkBAIC00OSw3ICs0OSw3IEBACiAvKgogICogdGJmYWR0IC0gRkFEVCBwYXJzZS9jb252ZXJ0L3ZhbGlkYXRlCiAgKi8KLXZvaWQgYWNwaV90Yl9wYXJzZV9mYWR0KHUzMiB0YWJsZV9pbmRleCwgdTggZmxhZ3MpOwordm9pZCBhY3BpX3RiX3BhcnNlX2ZhZHQodTMyIHRhYmxlX2luZGV4KTsKIAogdm9pZCBhY3BpX3RiX2NyZWF0ZV9sb2NhbF9mYWR0KHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUsIHUzMiBsZW5ndGgpOwogCkBAIC03OSw3ICs3OSw3IEBACiAKIHZvaWQgYWNwaV90Yl90ZXJtaW5hdGUodm9pZCk7CiAKLXZvaWQgYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHUzMiB0YWJsZV9pbmRleCk7CithY3BpX3N0YXR1cyBhY3BpX3RiX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIodTMyIHRhYmxlX2luZGV4KTsKIAogYWNwaV9zdGF0dXMgYWNwaV90Yl9hbGxvY2F0ZV9vd25lcl9pZCh1MzIgdGFibGVfaW5kZXgpOwogCkBAIC0xMDksOSArMTA5LDggQEAKIAogdm9pZAogYWNwaV90Yl9pbnN0YWxsX3RhYmxlKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkgICAgICB1OCBmbGFncywgY2hhciAqc2lnbmF0dXJlLCB1MzIgdGFibGVfaW5kZXgpOworCQkgICAgICBjaGFyICpzaWduYXR1cmUsIHUzMiB0YWJsZV9pbmRleCk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHJzZHBfYWRkcmVzcywgdTggZmxhZ3MpOworYWNwaV9zdGF0dXMgYWNwaV90Yl9wYXJzZV9yb290X3RhYmxlKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyByc2RwX2FkZHJlc3MpOwogCiAjZW5kaWYJCQkJLyogX19BQ1RBQkxFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN1dGlscy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKaW5kZXggODBkODgxMy4uODk3ODEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKQEAgLTM0Niw2ICszNDYsMjEgQEAKIGFjcGlfdXRfZXhlY3V0ZV9zeGRzKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwgdTggKiBoaWdoZXN0KTsKIAogLyoKKyAqIHV0bG9jayAtIHJlYWRlci93cml0ZXIgbG9ja3MKKyAqLworYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfcndfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKTsKKwordm9pZCBhY3BpX3V0X2RlbGV0ZV9yd19sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spOworCithY3BpX3N0YXR1cyBhY3BpX3V0X2FjcXVpcmVfcmVhZF9sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spOworCithY3BpX3N0YXR1cyBhY3BpX3V0X3JlbGVhc2VfcmVhZF9sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spOworCithY3BpX3N0YXR1cyBhY3BpX3V0X2FjcXVpcmVfd3JpdGVfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKTsKKwordm9pZCBhY3BpX3V0X3JlbGVhc2Vfd3JpdGVfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKTsKKworLyoKICAqIHV0b2JqZWN0IC0gaW50ZXJuYWwgb2JqZWN0IGNyZWF0ZS9kZWxldGUvY2FjaGUgcm91dGluZXMKICAqLwogdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0X2RiZyhjb25zdCBjaGFyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYwppbmRleCBlYjE0NGIxLi4zYWFlMTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKQEAgLTE4MCwxMSArMTgwLDIzIEBACiAKIAkvKiBXYWxrIGVudGlyZSBuYW1lc3BhY2UgZnJvbSB0aGUgc3VwcGxpZWQgcm9vdCAqLwogCi0Jc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBzdGFydF9ub2RlLCBBQ1BJX1VJTlQzMl9NQVgsCi0JCQkJICAgICBhY3BpX2RzX2luaXRfb25lX29iamVjdCwgJmluZm8sIE5VTEwpOworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSBhY3BpX3dhbGtfbmFtZXNwYWNlIHNpbmNlIHdlIGRvIG5vdCB3YW50IHRvIGFjcXVpcmUKKwkgKiB0aGUgbmFtZXNwYWNlIHJlYWRlciBsb2NrLgorCSAqLworCXN0YXR1cyA9CisJICAgIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0FOWSwgc3RhcnRfbm9kZSwgQUNQSV9VSU5UMzJfTUFYLAorCQkJCSAgIEFDUElfTlNfV0FMS19VTkxPQ0ssIGFjcGlfZHNfaW5pdF9vbmVfb2JqZWN0LAorCQkJCSAgICZpbmZvLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkR1cmluZyBXYWxrTmFtZXNwYWNlIikpOwogCX0KKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlX2J5X2luZGV4KHRhYmxlX2luZGV4LCAmdGFibGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCmluZGV4IGRhMGY1NDYuLjIyYjFhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKQEAgLTcxMyw2ICs3MTMsNiBAQAogCiAJLyogR2V0IHRoZSBvYmplY3QgdHlwZSAqLwogCi0JcmV0dXJuX1ZBTFVFKEFDUElfR0VUX09CSkVDVF9UWVBFKG9iamVjdCkpOworCXJldHVybl9WQUxVRShvYmplY3QtPnR5cGUpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKaW5kZXggMTVjNjI4ZS4uZGFiM2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAKIAkvKiBSZS10eXBlIHRoZSBvYmplY3QgYWNjb3JkaW5nIHRvIGl0cyBhcmd1bWVudCAqLwogCi0Jbm9kZS0+dHlwZSA9IEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKTsKKwlub2RlLT50eXBlID0gb2JqX2Rlc2MtPmNvbW1vbi50eXBlOwogCiAJLyogQXR0YWNoIG9iaiB0byBub2RlICovCiAKQEAgLTYxOSw3ICs2MTksNyBAQAogCiAJLyogUGVyZm9ybSBwZXItb2JqZWN0IGluaXRpYWxpemF0aW9uICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCS8qCkBAIC04MDMsNyArODAzLDcgQEAKIAlkZWZhdWx0OgogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJVbmltcGxlbWVudGVkIGRhdGEgdHlwZTogJVgiLAotCQkJICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkpOworCQkJICAgIG9ial9kZXNjLT5jb21tb24udHlwZSkpOwogCiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCmluZGV4IDBjM2I0ZGQuLmI0Yzg3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMKQEAgLTM5NywzMCArMzk3LDYgQEAKIAlzdGF0dXMgPSBhY3BpX2RzX2V4ZWN1dGVfYXJndW1lbnRzKG5vZGUsIGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpLAogCQkJCQkgICBleHRyYV9kZXNjLT5leHRyYS5hbWxfbGVuZ3RoLAogCQkJCQkgICBleHRyYV9kZXNjLT5leHRyYS5hbWxfc3RhcnQpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBWYWxpZGF0ZSB0aGUgcmVnaW9uIGFkZHJlc3MvbGVuZ3RoIHZpYSB0aGUgaG9zdCBPUyAqLwotCi0Jc3RhdHVzID0gYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzKG9ial9kZXNjLT5yZWdpb24uc3BhY2VfaWQsCi0JCQkJCSAgb2JqX2Rlc2MtPnJlZ2lvbi5hZGRyZXNzLAotCQkJCQkgIChhY3BpX3NpemUpIG9ial9kZXNjLT5yZWdpb24ubGVuZ3RoLAotCQkJCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShub2RlKSk7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJLyoKLQkJICogSW52YWxpZCBhZGRyZXNzL2xlbmd0aC4gV2Ugd2lsbCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIG1hcmsKLQkJICogdGhlIHJlZ2lvbiBhcyBpbnZhbGlkLCBzbyB0aGF0IGl0IHdpbGwgY2F1c2UgYW4gYWRkaXRpb25hbCBlcnJvciBpZgotCQkgKiBpdCBpcyBldmVyIHVzZWQuIFRoZW4gcmV0dXJuIEFFX09LLgotCQkgKi8KLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKLQkJCQkiRHVyaW5nIGFkZHJlc3MgdmFsaWRhdGlvbiBvZiBPcFJlZ2lvbiBbJTQuNHNdIiwKLQkJCQlub2RlLT5uYW1lLmFzY2lpKSk7Ci0JCW9ial9kZXNjLT5jb21tb24uZmxhZ3MgfD0gQU9QT0JKX0lOVkFMSUQ7Ci0JCXN0YXR1cyA9IEFFX09LOwotCX0KLQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC00ODQsNyArNDYwLDcgQEAKIAogCS8qIEhvc3Qgb2JqZWN0IG11c3QgYmUgYSBCdWZmZXIgKi8KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShidWZmZXJfZGVzYykgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCWlmIChidWZmZXJfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJUYXJnZXQgb2YgQ3JlYXRlIEZpZWxkIGlzIG5vdCBhIEJ1ZmZlciBvYmplY3QgLSAlcyIsCiAJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShidWZmZXJfZGVzYykpKTsKQEAgLTEzNjUsMTAgKzEzNDEsOCBAQAogCQkJaWYgKChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUKIAkJCSAgICAgKHdhbGtfc3RhdGUtPnJlc3VsdHMtPnJlc3VsdHMub2JqX2Rlc2NbMF0pID09CiAJCQkgICAgIEFDUElfREVTQ19UWVBFX09QRVJBTkQpCi0JCQkgICAgJiYKLQkJCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCSAgICAgKHdhbGtfc3RhdGUtPnJlc3VsdHMtPnJlc3VsdHMub2JqX2Rlc2NbMF0pID09Ci0JCQkgICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpCisJCQkgICAgJiYgKCh3YWxrX3N0YXRlLT5yZXN1bHRzLT5yZXN1bHRzLm9ial9kZXNjWzBdKS0+CisJCQkJY29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKIAkJCSAgICAmJiAoKHdhbGtfc3RhdGUtPnJlc3VsdHMtPnJlc3VsdHMub2JqX2Rlc2NbMF0pLT4KIAkJCQlyZWZlcmVuY2UuY2xhc3MgIT0gQUNQSV9SRUZDTEFTU19JTkRFWCkpIHsKIAkJCQlzdGF0dXMgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwppbmRleCBkYWJjMjNhLi5kZmExMDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwpAQCAtODE2LDcgKzgxNiw3IEBACiAJCWdvdG8gcHVzaF9yZXN1bHQ7CiAJfQogCi0JdHlwZSA9IEFDUElfR0VUX09CSkVDVF9UWVBFKCpvcGVyYW5kKTsKKwl0eXBlID0gKCpvcGVyYW5kKS0+Y29tbW9uLnR5cGU7CiAKIAlzdGF0dXMgPSBhY3BpX2V4X3Jlc29sdmVfdG9fdmFsdWUob3BlcmFuZCwgd2Fsa19zdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCmluZGV4IDM1MGU2NjUuLmYwMjgwODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCkBAIC0xMzgsMTEgKzEzOCwxMCBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGxvY2FsX29ial9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCWlmIChsb2NhbF9vYmpfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiQmFkIHByZWRpY2F0ZSAobm90IGFuIGludGVnZXIpIE9iakRlc2M9JXAgU3RhdGU9JXAgVHlwZT0lWCIsCi0JCQkgICAgb2JqX2Rlc2MsIHdhbGtfc3RhdGUsCi0JCQkgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSk7CisJCQkgICAgb2JqX2Rlc2MsIHdhbGtfc3RhdGUsIG9ial9kZXNjLT5jb21tb24udHlwZSkpOwogCiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKaW5kZXggODAzZWRkOS4uY2Q1NWM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKQEAgLTE4Myw3ICsxODMsNyBAQAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogSW5zdGFsbCB0aGUgZml4ZWQgZXZlbnQgaGFuZGxlcnMgYW5kIGVuYWJsZSB0aGUgZml4ZWQgZXZlbnRzLgorICogREVTQ1JJUFRJT046IEluc3RhbGwgdGhlIGZpeGVkIGV2ZW50IGhhbmRsZXJzIGFuZCBkaXNhYmxlIGFsbCBmaXhlZCBldmVudHMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjAwLDEyICsyMDAsMTMgQEAKIAkJYWNwaV9nYmxfZml4ZWRfZXZlbnRfaGFuZGxlcnNbaV0uaGFuZGxlciA9IE5VTEw7CiAJCWFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2hhbmRsZXJzW2ldLmNvbnRleHQgPSBOVUxMOwogCi0JCS8qIEVuYWJsZSB0aGUgZml4ZWQgZXZlbnQgKi8KKwkJLyogRGlzYWJsZSB0aGUgZml4ZWQgZXZlbnQgKi8KIAogCQlpZiAoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tpXS5lbmFibGVfcmVnaXN0ZXJfaWQgIT0gMHhGRikgewogCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX3NldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2ldLgotCQkJCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsIDApOworCQkJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm8KKwkJCQkJCSAgICBbaV0uZW5hYmxlX3JlZ2lzdGVyX2lkLAorCQkJCQkJICAgIEFDUElfRElTQUJMRV9FVkVOVCk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCQl9CkBAIC0yODgsMTYgKzI4OSwxNyBAQAogCiAJLyogQ2xlYXIgdGhlIHN0YXR1cyBiaXQgKi8KIAotCSh2b2lkKWFjcGlfc2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgotCQkJCXN0YXR1c19yZWdpc3Rlcl9pZCwgMSk7CisJKHZvaWQpYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgICAgc3RhdHVzX3JlZ2lzdGVyX2lkLCBBQ1BJX0NMRUFSX1NUQVRVUyk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBoYW5kbGVyLiBJZiBub3QsIHJlcG9ydCBhbiBlcnJvci4gVGhlIGV2ZW50IGlzCiAJICogZGlzYWJsZWQgdG8gcHJldmVudCBmdXJ0aGVyIGludGVycnVwdHMuCiAJICovCiAJaWYgKE5VTEwgPT0gYWNwaV9nYmxfZml4ZWRfZXZlbnRfaGFuZGxlcnNbZXZlbnRdLmhhbmRsZXIpIHsKLQkJKHZvaWQpYWNwaV9zZXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCi0JCQkJCWVuYWJsZV9yZWdpc3Rlcl9pZCwgMCk7CisJCSh2b2lkKWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgorCQkJCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsCisJCQkJCSAgICAgIEFDUElfRElTQUJMRV9FVkVOVCk7CiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiTm8gaW5zdGFsbGVkIGhhbmRsZXIgZm9yIGZpeGVkIGV2ZW50IFslMDhYXSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKaW5kZXggZjM0NWNlZC4uYjlkOGVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwpAQCAtODgsMTAgKzg4LDEwIEBACiAKIAlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKIAotCS8qIFR5cGUgd2FzIHZhbGlkYXRlZCBhYm92ZSAqLworCS8qIENsZWFyIHRoZSB0eXBlIGJpdHMgYW5kIGluc2VydCB0aGUgbmV3IFR5cGUgKi8KIAotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+QUNQSV9HUEVfVFlQRV9NQVNLOwkvKiBDbGVhciB0eXBlIGJpdHMgKi8KLQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gdHlwZTsJLyogSW5zZXJ0IHR5cGUgKi8KKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJj0gfkFDUElfR1BFX1RZUEVfTUFTSzsKKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gdHlwZTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtMTIyLDYgKzEyMiw3IEBACiAJaWYgKCFncGVfcmVnaXN0ZXJfaW5mbykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKIAl9CisKIAlyZWdpc3Rlcl9iaXQgPSAodTgpCiAJICAgICgxIDw8CiAJICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLSBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKaW5kZXggNDg0Y2MwNS4uN2IzNDYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwpAQCAtMTA0LDkgKzEwNCw5IEBACiAKIAkJd2hpbGUgKGdwZV9ibG9jaykgewogCQkJaWYgKCgmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWzBdIDw9IGdwZV9ldmVudF9pbmZvKSAmJgotCQkJICAgICgmZ3BlX2Jsb2NrLT4KLQkJCSAgICAgZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgZ3BlX2Jsb2NrLT4KLQkJCQkJIHJlZ2lzdGVyX2NvdW50KSAqIDhdID4KKwkJCSAgICAoJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkKKwkJCQkJCSAgICAgZ3BlX2Jsb2NrLT4KKwkJCQkJCSAgICAgcmVnaXN0ZXJfY291bnQpICogOF0gPgogCQkJICAgICBncGVfZXZlbnRfaW5mbykpIHsKIAkJCQlyZXR1cm4gKFRSVUUpOwogCQkJfQpAQCAtMjEwLDEwICsyMTAsOSBAQAogCQkvKiBOb3cgbG9vayBhdCB0aGUgaW5kaXZpZHVhbCBHUEVzIGluIHRoaXMgYnl0ZSByZWdpc3RlciAqLwogCiAJCWZvciAoaiA9IDA7IGogPCBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSDsgaisrKSB7Ci0JCQlncGVfZXZlbnRfaW5mbyA9Ci0JCQkgICAgJmdwZV9ibG9jay0+Ci0JCQkgICAgZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgaSAqCi0JCQkJCUFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKSArIGpdOworCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKKwkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQorCQkJCQkJCQkrIGpdOwogCiAJCQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CiAJCQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikgewpAQCAtMjkzLDggKzI5Miw4IEBACiAJCS8qIFVua25vd24gbWV0aG9kIHR5cGUsIGp1c3QgaWdub3JlIGl0ISAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKLQkJCQkgICJJZ25vcmluZyB1bmtub3duIEdQRSBtZXRob2QgdHlwZTogJXMgKG5hbWUgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCi0JCQkJICBuYW1lKSk7CisJCQkJICAiSWdub3JpbmcgdW5rbm93biBHUEUgbWV0aG9kIHR5cGU6ICVzICIKKwkJCQkgICIobmFtZSBub3Qgb2YgZm9ybSBfTHh4IG9yIF9FeHgpIiwgbmFtZSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApAQCAtMzA2LDE3ICszMDUsMTYgQEAKIAkJLyogQ29udmVyc2lvbiBmYWlsZWQ7IGludmFsaWQgbWV0aG9kLCBqdXN0IGlnbm9yZSBpdCAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKLQkJCQkgICJDb3VsZCBub3QgZXh0cmFjdCBHUEUgbnVtYmVyIGZyb20gbmFtZTogJXMgKG5hbWUgaXMgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCi0JCQkJICBuYW1lKSk7CisJCQkJICAiQ291bGQgbm90IGV4dHJhY3QgR1BFIG51bWJlciBmcm9tIG5hbWU6ICVzICIKKwkJCQkgICIobmFtZSBpcyBub3Qgb2YgZm9ybSBfTHh4IG9yIF9FeHgpIiwgbmFtZSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyIGZvciB0aGlzIEdQRSBibG9jayAqLwogCiAJaWYgKChncGVfbnVtYmVyIDwgZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcikgfHwKLQkgICAgKGdwZV9udW1iZXIgPj0KLQkgICAgIChncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyICsKLQkgICAgICAoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudCAqIDgpKSkpIHsKKwkgICAgKGdwZV9udW1iZXIgPj0gKGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXIgKworCQkJICAgIChncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50ICogOCkpKSkgewogCQkvKgogCQkgKiBOb3QgdmFsaWQgZm9yIHRoaXMgR1BFIGJsb2NrLCBqdXN0IGlnbm9yZSBpdC4gSG93ZXZlciwgaXQgbWF5IGJlCiAJCSAqIHZhbGlkIGZvciBhIGRpZmZlcmVudCBHUEUgYmxvY2ssIHNpbmNlIEdQRTAgYW5kIEdQRTEgbWV0aG9kcyBib3RoCkBAIC00MDgsNyArNDA2LDcgQEAKIAkgKi8KIAlvYmpfZGVzYyA9IHBrZ19kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzBdOwogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAogCQkvKiBVc2UgRkFEVC1kZWZpbmVkIEdQRSBkZXZpY2UgKGZyb20gZGVmaW5pdGlvbiBvZiBfUFJXKSAqLwogCkBAIC00MTcsMTUgKzQxNSwxNSBAQAogCQkvKiBJbnRlZ2VyIGlzIHRoZSBHUEUgbnVtYmVyIGluIHRoZSBGQURUIGRlc2NyaWJlZCBHUEUgYmxvY2tzICovCiAKIAkJZ3BlX251bWJlciA9ICh1MzIpIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlOwotCX0gZWxzZSBpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJfSBlbHNlIGlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAogCQkvKiBQYWNrYWdlIGNvbnRhaW5zIGEgR1BFIHJlZmVyZW5jZSBhbmQgR1BFIG51bWJlciB3aXRoaW4gYSBHUEUgYmxvY2sgKi8KIAogCQlpZiAoKG9ial9kZXNjLT5wYWNrYWdlLmNvdW50IDwgMikgfHwKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50c1swXSkgIT0KLQkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQotCQkgICAgfHwgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzFdKSAhPQotCQkJQUNQSV9UWVBFX0lOVEVHRVIpKSB7CisJCSAgICAoKG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+Y29tbW9uLnR5cGUgIT0KKwkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB8fAorCQkgICAgKChvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50c1sxXSktPmNvbW1vbi50eXBlICE9CisJCSAgICAgQUNQSV9UWVBFX0lOVEVHRVIpKSB7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KIApAQCAtNDUwLDExICs0NDgsMTEgQEAKIAkgKi8KIAlpZiAoKGdwZV9kZXZpY2UgPT0gdGFyZ2V0X2dwZV9kZXZpY2UpICYmCiAJICAgIChncGVfbnVtYmVyID49IGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXIpICYmCi0JICAgIChncGVfbnVtYmVyIDwKLQkgICAgIGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXIgKyAoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudCAqIDgpKSkgewotCQlncGVfZXZlbnRfaW5mbyA9Ci0JCSAgICAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvW2dwZV9udW1iZXIgLQotCQkJCQkgICBncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyXTsKKwkgICAgKGdwZV9udW1iZXIgPCBncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyICsKKwkgICAgIChncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50ICogOCkpKSB7CisJCWdwZV9ldmVudF9pbmZvID0gJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1tncGVfbnVtYmVyIC0KKwkJCQkJCQlncGVfYmxvY2stPgorCQkJCQkJCWJsb2NrX2Jhc2VfbnVtYmVyXTsKIAogCQkvKiBNYXJrIEdQRSBmb3IgV0FLRS1PTkxZIGJ1dCBXQUtFX0RJU0FCTEVEICovCiAKQEAgLTEwMzMsOCArMTAzMSw4IEBACiAJICogMSkgYXJlICJydW50aW1lIiBvciAicnVuL3dha2UiIEdQRXMsIGFuZAogCSAqIDIpIGhhdmUgYSBjb3JyZXNwb25kaW5nIF9MeHggb3IgX0V4eCBtZXRob2QKIAkgKgotCSAqIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlIGFjcGlfZW5hYmxlX2dwZSgpCi0JICogZXh0ZXJuYWwgaW50ZXJmYWNlLgorCSAqIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlCisJICogYWNwaV9lbmFibGVfZ3BlKCkgZXh0ZXJuYWwgaW50ZXJmYWNlLgogCSAqLwogCXdha2VfZ3BlX2NvdW50ID0gMDsKIAlncGVfZW5hYmxlZF9jb3VudCA9IDA7CkBAIC0xMDQ0LDE0ICsxMDQyLDEzIEBACiAKIAkJCS8qIEdldCB0aGUgaW5mbyBibG9jayBmb3IgdGhpcyBwYXJ0aWN1bGFyIEdQRSAqLwogCi0JCQlncGVfZXZlbnRfaW5mbyA9Ci0JCQkgICAgJmdwZV9ibG9jay0+Ci0JCQkgICAgZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgaSAqCi0JCQkJCUFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKSArIGpdOworCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKKwkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQorCQkJCQkJCQkrIGpdOwogCiAJCQlpZiAoKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpCi0JCQkgICAgJiYgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkpIHsKKwkJCSAgICAgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSAmJgorCQkJICAgIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpKSB7CiAJCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKIAkJCX0KIApAQCAtMTEwNSw4ICsxMTAyLDggQEAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIEdQRSBCbG9jayhzKSBkZWZpbmVkIGluIHRoZSBGQURUCiAJICoKLQkgKiBXaHkgdGhlIEdQRSByZWdpc3RlciBibG9jayBsZW5ndGhzIGFyZSBkaXZpZGVkIGJ5IDI6ICBGcm9tIHRoZSBBQ1BJIFNwZWMsCi0JICogc2VjdGlvbiAiR2VuZXJhbC1QdXJwb3NlIEV2ZW50IFJlZ2lzdGVycyIsIHdlIGhhdmU6CisJICogV2h5IHRoZSBHUEUgcmVnaXN0ZXIgYmxvY2sgbGVuZ3RocyBhcmUgZGl2aWRlZCBieSAyOiAgRnJvbSB0aGUgQUNQSQorCSAqIFNwZWMsIHNlY3Rpb24gIkdlbmVyYWwtUHVycG9zZSBFdmVudCBSZWdpc3RlcnMiLCB3ZSBoYXZlOgogCSAqCiAJICogIkVhY2ggcmVnaXN0ZXIgYmxvY2sgY29udGFpbnMgdHdvIHJlZ2lzdGVycyBvZiBlcXVhbCBsZW5ndGgKIAkgKiAgR1BFeF9TVFMgYW5kIEdQRXhfRU4gKHdoZXJlIHggaXMgMCBvciAxKS4gVGhlIGxlbmd0aCBvZiB0aGUKQEAgLTExNjMsNyArMTE2MCw4IEBACiAJCWlmICgocmVnaXN0ZXJfY291bnQwKSAmJgogCQkgICAgKGdwZV9udW1iZXJfbWF4ID49IGFjcGlfZ2JsX0ZBRFQuZ3BlMV9iYXNlKSkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkdQRTAgYmxvY2sgKEdQRSAwIHRvICVkKSBvdmVybGFwcyB0aGUgR1BFMSBibG9jayAoR1BFICVkIHRvICVkKSAtIElnbm9yaW5nIEdQRTEiLAorCQkJCSAgICAiR1BFMCBibG9jayAoR1BFIDAgdG8gJWQpIG92ZXJsYXBzIHRoZSBHUEUxIGJsb2NrICIKKwkJCQkgICAgIihHUEUgJWQgdG8gJWQpIC0gSWdub3JpbmcgR1BFMSIsCiAJCQkJICAgIGdwZV9udW1iZXJfbWF4LCBhY3BpX2dibF9GQURULmdwZTFfYmFzZSwKIAkJCQkgICAgYWNwaV9nYmxfRkFEVC5ncGUxX2Jhc2UgKwogCQkJCSAgICAoKHJlZ2lzdGVyX2NvdW50MSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYwppbmRleCA1Zjg5MzA1Li5jZTIyNGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKQEAgLTE2MywxMCArMTYzLDEwIEBACiAJICogMikgR2xvYmFsIGRldmljZSBub3RpZnkgaGFuZGxlcgogCSAqIDMpIFBlci1kZXZpY2Ugbm90aWZ5IGhhbmRsZXIKIAkgKi8KLQlpZiAoKGFjcGlfZ2JsX3N5c3RlbV9ub3RpZnkuaGFuZGxlcgotCSAgICAgJiYgKG5vdGlmeV92YWx1ZSA8PSBBQ1BJX01BWF9TWVNfTk9USUZZKSkKLQkgICAgfHwgKGFjcGlfZ2JsX2RldmljZV9ub3RpZnkuaGFuZGxlcgotCQkmJiAobm90aWZ5X3ZhbHVlID4gQUNQSV9NQVhfU1lTX05PVElGWSkpIHx8IGhhbmRsZXJfb2JqKSB7CisJaWYgKChhY3BpX2dibF9zeXN0ZW1fbm90aWZ5LmhhbmRsZXIgJiYKKwkgICAgIChub3RpZnlfdmFsdWUgPD0gQUNQSV9NQVhfU1lTX05PVElGWSkpIHx8CisJICAgIChhY3BpX2dibF9kZXZpY2Vfbm90aWZ5LmhhbmRsZXIgJiYKKwkgICAgIChub3RpZnlfdmFsdWUgPiBBQ1BJX01BWF9TWVNfTk9USUZZKSkgfHwgaGFuZGxlcl9vYmopIHsKIAkJbm90aWZ5X2luZm8gPSBhY3BpX3V0X2NyZWF0ZV9nZW5lcmljX3N0YXRlKCk7CiAJCWlmICghbm90aWZ5X2luZm8pIHsKIAkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKQEAgLTE3NCw3ICsxNzQsOCBAQAogCiAJCWlmICghaGFuZGxlcl9vYmopIHsKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkJICAiRXhlY3V0aW5nIHN5c3RlbSBub3RpZnkgaGFuZGxlciBmb3IgTm90aWZ5ICglNC40cywgJVgpIG5vZGUgJXBcbiIsCisJCQkJCSAgIkV4ZWN1dGluZyBzeXN0ZW0gbm90aWZ5IGhhbmRsZXIgZm9yIE5vdGlmeSAoJTQuNHMsICVYKSAiCisJCQkJCSAgIm5vZGUgJXBcbiIsCiAJCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLAogCQkJCQkgIG5vdGlmeV92YWx1ZSwgbm9kZSkpOwogCQl9CkBAIC01MzQsOCArNTM1LDkgQEAKIAkJICovCiAJCWlmIChwZW5kaW5nKSB7CiAJCQlzdGF0dXMgPQotCQkJICAgIGFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0dMT0JBTF9MT0NLX1JFTEVBU0UsCi0JCQkJCSAgICAgIDEpOworCQkJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyCisJCQkgICAgKEFDUElfQklUUkVHX0dMT0JBTF9MT0NLX1JFTEVBU0UsCisJCQkgICAgIEFDUElfRU5BQkxFX0VWRU5UKTsKIAkJfQogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYwppbmRleCA2NjVjMDg4Li41MzhkNjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAogCS8qIERldmljZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50IHRoYW4gcmVnaW9ucyAqLwogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB7CiAKIAkJLyogQ2hlY2sgaWYgdGhpcyBEZXZpY2UgYWxyZWFkeSBoYXMgYSBoYW5kbGVyIGZvciB0aGlzIGFkZHJlc3Mgc3BhY2UgKi8KIApAQCAtNzAzLDcgKzcwMyw4IEBACiAJCQlpZiAobmV4dF9oYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5zcGFjZV9pZCA9PQogCQkJICAgIGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnNwYWNlX2lkKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9PUFJFR0lPTiwKLQkJCQkJCSAgIkZvdW5kIGhhbmRsZXIgZm9yIHJlZ2lvbiBbJXNdIGluIGRldmljZSAlcCglcCkgaGFuZGxlciAlcFxuIiwKKwkJCQkJCSAgIkZvdW5kIGhhbmRsZXIgZm9yIHJlZ2lvbiBbJXNdIGluIGRldmljZSAlcCglcCkgIgorCQkJCQkJICAiaGFuZGxlciAlcFxuIiwKIAkJCQkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUKIAkJCQkJCSAgKGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLgogCQkJCQkJICAgc3BhY2VfaWQpLCBvYmpfZGVzYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwppbmRleCBmM2YxZmI0Li4yODRhN2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCkBAIC0yNDEsNyArMjQxLDggQEAKIAkJCQkJCXN0YXR1cyA9IEFFX09LOwogCQkJCQl9IGVsc2UgewogCQkJCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKLQkJCQkJCQkJIkNvdWxkIG5vdCBpbnN0YWxsIFBjaUNvbmZpZyBoYW5kbGVyIGZvciBSb290IEJyaWRnZSAlNC40cyIsCisJCQkJCQkJCSJDb3VsZCBub3QgaW5zdGFsbCBQY2lDb25maWcgaGFuZGxlciAiCisJCQkJCQkJCSJmb3IgUm9vdCBCcmlkZ2UgJTQuNHMiLAogCQkJCQkJCQlhY3BpX3V0X2dldF9ub2RlX25hbWUKIAkJCQkJCQkJKHBjaV9yb290X25vZGUpKSk7CiAJCQkJCX0KQEAgLTI5Myw5ICsyOTQsOCBAQAogCSAqIEdldCB0aGUgUENJIGRldmljZSBhbmQgZnVuY3Rpb24gbnVtYmVycyBmcm9tIHRoZSBfQURSIG9iamVjdCBjb250YWluZWQKIAkgKiBpbiB0aGUgcGFyZW50J3Mgc2NvcGUuCiAJICovCi0Jc3RhdHVzID0KLQkgICAgYWNwaV91dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdChNRVRIT0RfTkFNRV9fQURSLCBwY2lfZGV2aWNlX25vZGUsCi0JCQkJCSAgICAmcGNpX3ZhbHVlKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19BRFIsCisJCQkJCQkgcGNpX2RldmljZV9ub2RlLCAmcGNpX3ZhbHVlKTsKIAogCS8qCiAJICogVGhlIGRlZmF1bHQgaXMgemVybywgYW5kIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGFib3ZlIHplcm9lZCB0aGUgZGF0YSwKQEAgLTMwOCwxOCArMzA4LDE2IEBACiAKIAkvKiBUaGUgUENJIHNlZ21lbnQgbnVtYmVyIGNvbWVzIGZyb20gdGhlIF9TRUcgbWV0aG9kICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19TRUcsIHBjaV9yb290X25vZGUsCi0JCQkJCSAgICAmcGNpX3ZhbHVlKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19TRUcsCisJCQkJCQkgcGNpX3Jvb3Rfbm9kZSwgJnBjaV92YWx1ZSk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCXBjaV9pZC0+c2VnbWVudCA9IEFDUElfTE9XT1JEKHBjaV92YWx1ZSk7CiAJfQogCiAJLyogVGhlIFBDSSBidXMgbnVtYmVyIGNvbWVzIGZyb20gdGhlIF9CQk4gbWV0aG9kICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19CQk4sIHBjaV9yb290X25vZGUsCi0JCQkJCSAgICAmcGNpX3ZhbHVlKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19CQk4sCisJCQkJCQkgcGNpX3Jvb3Rfbm9kZSwgJnBjaV92YWx1ZSk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCXBjaV9pZC0+YnVzID0gQUNQSV9MT1dPUkQocGNpX3ZhbHVlKTsKIAl9CkBAIC02MzIsOCArNjMwLDggQEAKIAkJCQkJCQkJICBhY3BpX25zX2xvY2tlZCk7CiAKIAkJCQkJLyoKLQkJCQkJICogVGVsbCBhbGwgdXNlcnMgdGhhdCB0aGlzIHJlZ2lvbiBpcyB1c2FibGUgYnkgcnVubmluZyB0aGUgX1JFRwotCQkJCQkgKiBtZXRob2QKKwkJCQkJICogVGVsbCBhbGwgdXNlcnMgdGhhdCB0aGlzIHJlZ2lvbiBpcyB1c2FibGUgYnkKKwkJCQkJICogcnVubmluZyB0aGUgX1JFRyBtZXRob2QKIAkJCQkJICovCiAJCQkJCWlmIChhY3BpX25zX2xvY2tlZCkgewogCQkJCQkJc3RhdHVzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKaW5kZXggM2FjYTkwMS4uMTBiODU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKQEAgLTYzMSw3ICs2MzEsOCBAQAogCiAJLyogU2V0dXAgdXAgZGlzcGF0Y2ggZmxhZ3MgdG8gaW5kaWNhdGUgaGFuZGxlciAodnMuIG1ldGhvZCkgKi8KIAotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+KEFDUElfR1BFX1hSVVBUX1RZUEVfTUFTSyB8IEFDUElfR1BFX0RJU1BBVENIX01BU0spOwkvKiBDbGVhciBiaXRzICovCisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9CisJICAgIH4oQUNQSV9HUEVfWFJVUFRfVFlQRV9NQVNLIHwgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSyk7CiAJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9ICh1OCkgKHR5cGUgfCBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSKTsKIAogCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggMzU0ODVlNC4uZDBhMDgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtMTcyLDggKzE3Miw4IEBACiAJICogcmVnaXN0ZXIgYml0KQogCSAqLwogCXN0YXR1cyA9Ci0JICAgIGFjcGlfc2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgotCQkJICAgICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAxKTsKKwkgICAgYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgIGVuYWJsZV9yZWdpc3Rlcl9pZCwgQUNQSV9FTkFCTEVfRVZFTlQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0xODEsOCArMTgxLDggQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgaGFyZHdhcmUgcmVzcG9uZGVkICovCiAKIAlzdGF0dXMgPQotCSAgICBhY3BpX2dldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KLQkJCSAgICAgIGVuYWJsZV9yZWdpc3Rlcl9pZCwgJnZhbHVlKTsKKwkgICAgYWNwaV9yZWFkX2JpdF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KKwkJCQkgICBlbmFibGVfcmVnaXN0ZXJfaWQsICZ2YWx1ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTM1NCwxNSArMzU0LDE1IEBACiAJICogcmVnaXN0ZXIgYml0KQogCSAqLwogCXN0YXR1cyA9Ci0JICAgIGFjcGlfc2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgotCQkJICAgICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAwKTsKKwkgICAgYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgIGVuYWJsZV9yZWdpc3Rlcl9pZCwgQUNQSV9ESVNBQkxFX0VWRU5UKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJc3RhdHVzID0KLQkgICAgYWNwaV9nZXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCi0JCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsICZ2YWx1ZSk7CisJICAgIGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAmdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC00MDcsOCArNDA3LDggQEAKIAkgKiByZWdpc3RlciBiaXQpCiAJICovCiAJc3RhdHVzID0KLQkgICAgYWNwaV9zZXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCi0JCQkgICAgICBzdGF0dXNfcmVnaXN0ZXJfaWQsIDEpOworCSAgICBhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KKwkJCQkgICAgc3RhdHVzX3JlZ2lzdGVyX2lkLCBBQ1BJX0NMRUFSX1NUQVRVUyk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KQEAgLTQ5NSw3ICs0OTUsNyBAQAogCS8qIEdldCB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0ZWQgZml4ZWQgZXZlbnQgKi8KIAogCXN0YXR1cyA9Ci0JICAgIGFjcGlfZ2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgorCSAgICBhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgogCQkJICAgICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAmdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC01MDMsNyArNTAzLDcgQEAKIAkqZXZlbnRfc3RhdHVzID0gdmFsdWU7CiAKIAlzdGF0dXMgPQotCSAgICBhY3BpX2dldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KKwkgICAgYWNwaV9yZWFkX2JpdF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KIAkJCSAgICAgIHN0YXR1c19yZWdpc3Rlcl9pZCwgJnZhbHVlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCmluZGV4IDQ3OWU3YTMuLjdjM2QyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKQEAgLTE5Myw3ICsxOTMsOCBAQAogCQkJLyogTWF0Y2hlZCBzcGFjZV9pZCwgZmlyc3QgZGVyZWZlcmVuY2UgdGhpcyBpbiB0aGUgUmVnaW9ucyAqLwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX09QUkVHSU9OLAotCQkJCQkgICJSZW1vdmluZyBhZGRyZXNzIGhhbmRsZXIgJXAoJXApIGZvciByZWdpb24gJXMgb24gRGV2aWNlICVwKCVwKVxuIiwKKwkJCQkJICAiUmVtb3ZpbmcgYWRkcmVzcyBoYW5kbGVyICVwKCVwKSBmb3IgcmVnaW9uICVzICIKKwkJCQkJICAib24gRGV2aWNlICVwKCVwKVxuIiwKIAkJCQkJICBoYW5kbGVyX29iaiwgaGFuZGxlciwKIAkJCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShzcGFjZV9pZCksCiAJCQkJCSAgbm9kZSwgb2JqX2Rlc2MpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwppbmRleCA5MzJiYmMyLi4zZGViMjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIAogCS8qIFNvdXJjZSBPYmplY3QgY2FuIGJlIGVpdGhlciBhbiBvcF9yZWdpb24gb3IgYSBCdWZmZXIvRmllbGQgKi8KIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9SRUdJT046CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJICovCiAJaWYgKCghZGRiX2hhbmRsZSkgfHwKIAkgICAgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkZGJfaGFuZGxlKSAhPSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EKSB8fAotCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoZGRiX2hhbmRsZSkgIT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkpIHsKKwkgICAgKGRkYl9oYW5kbGUtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKQEAgLTUyMCwxMyArNTIwLDE0IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIERlbGV0ZSB0aGUgZW50aXJlIG5hbWVzcGFjZSB1bmRlciB0aGlzIHRhYmxlIE5vZGUKLQkgKiAoT2Zmc2V0IGNvbnRhaW5zIHRoZSB0YWJsZV9pZCkKLQkgKi8KLQlhY3BpX3RiX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIodGFibGVfaW5kZXgpOwotCSh2b2lkKWFjcGlfdGJfcmVsZWFzZV9vd25lcl9pZCh0YWJsZV9pbmRleCk7CisJLyogRGVsZXRlIHRoZSBwb3J0aW9uIG9mIHRoZSBuYW1lc3BhY2Ugb3duZWQgYnkgdGhpcyB0YWJsZSAqLwogCisJc3RhdHVzID0gYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHRhYmxlX2luZGV4KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJKHZvaWQpYWNwaV90Yl9yZWxlYXNlX293bmVyX2lkKHRhYmxlX2luZGV4KTsKIAlhY3BpX3RiX3NldF90YWJsZV9sb2FkZWRfZmxhZyh0YWJsZV9pbmRleCwgRkFMU0UpOwogCiAJLyogVGFibGUgdW5sb2FkZWQsIHJlbW92ZSBhIHJlZmVyZW5jZSB0byB0aGUgZGRiX2hhbmRsZSBvYmplY3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYwppbmRleCAwYmUxMDE4Li4zN2QwZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbnZydC5jCkBAIC04Miw3ICs4Miw3IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jb252ZXJ0X3RvX2ludGVnZXIsIG9ial9kZXNjKTsKIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCiAJCS8qIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5ICovCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCS8qIFN0cmluZyBjb252ZXJzaW9uIGlzIGRpZmZlcmVudCB0aGFuIEJ1ZmZlciBjb252ZXJzaW9uICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCS8qCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NvbnZlcnRfdG9fYnVmZmVyLCBvYmpfZGVzYyk7CiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCS8qIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5ICovCkBAIC00MDksNyArNDA5LDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NvbnZlcnRfdG9fc3RyaW5nLCBvYmpfZGVzYyk7CiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCS8qIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5ICovCkBAIC02MDUsOCArNjA1LDcgQEAKIAkJZGVmYXVsdDoKIAkJCS8qIE5vIGNvbnZlcnNpb24gYWxsb3dlZCBmb3IgdGhlc2UgdHlwZXMgKi8KIAotCQkJaWYgKGRlc3RpbmF0aW9uX3R5cGUgIT0KLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykpIHsKKwkJCWlmIChkZXN0aW5hdGlvbl90eXBlICE9IHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSkgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkJCSAgIkV4cGxpY2l0IG9wZXJhdG9yLCB3aWxsIHN0b3JlICglcykgb3ZlciBleGlzdGluZyB0eXBlICglcylcbiIsCiAJCQkJCQkgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCmluZGV4IGFhMzEzNTcuLjg5ZDE0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwpAQCAtMzUwLDYgKzM1MCw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEFDUElfRVhEX1RZUEU6CisKIAkJCWFjcGlfZXhfb3V0X3N0cmluZygiVHlwZSIsCiAJCQkJCSAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKIAkJCQkJICAgKG9ial9kZXNjKSk7CkBAIC00MjIsNiArNDIzLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CisKIAkJCWFjcGlfb3NfcHJpbnRmKCIqKioqIEludmFsaWQgdGFibGUgb3Bjb2RlIFslWF0gKioqKlxuIiwKIAkJCQkgICAgICAgaW5mby0+b3Bjb2RlKTsKIAkJCXJldHVybjsKQEAgLTQ5Miw3ICs0OTQsNyBAQAogCiAJLyogRGVjb2RlIG9iamVjdCB0eXBlICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCiAJCWFjcGlfb3NfcHJpbnRmKCJSZWZlcmVuY2U6IFslc10gIiwKQEAgLTUyNyw0NiArNTI5LDE4IEBACiAJCQkJCQkJICAgICB0eXBlKSk7CiAJCQlicmVhazsKIAotCQljYXNlIEFDUElfUkVGQ0xBU1NfQVJHOgotCi0JCQlhY3BpX29zX3ByaW50ZigiJVgiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKTsKLQotCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCQkJLyogVmFsdWUgaXMgYW4gSW50ZWdlciAqLwotCi0JCQkJYWNwaV9vc19wcmludGYoIiB2YWx1ZSBpcyBbJTguOFglOC44eF0iLAotCQkJCQkgICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KG9ial9kZXNjLT4KLQkJCQkJCQkJICBpbnRlZ2VyLgotCQkJCQkJCQkgIHZhbHVlKSk7Ci0JCQl9Ci0KLQkJCWFjcGlfb3NfcHJpbnRmKCJcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgotCi0JCQlhY3BpX29zX3ByaW50ZigiJVgiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKTsKLQotCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCQkJLyogVmFsdWUgaXMgYW4gSW50ZWdlciAqLwotCi0JCQkJYWNwaV9vc19wcmludGYoIiB2YWx1ZSBpcyBbJTguOFglOC44eF0iLAotCQkJCQkgICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KG9ial9kZXNjLT4KLQkJCQkJCQkJICBpbnRlZ2VyLgotCQkJCQkJCQkgIHZhbHVlKSk7Ci0JCQl9Ci0KLQkJCWFjcGlfb3NfcHJpbnRmKCJcbiIpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBBQ1BJX1JFRkNMQVNTX05BTUU6CiAKIAkJCWFjcGlfb3NfcHJpbnRmKCItIFslNC40c11cbiIsCiAJCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZS0+bmFtZS5hc2NpaSk7CiAJCQlicmVhazsKIAorCQljYXNlIEFDUElfUkVGQ0xBU1NfQVJHOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CisKKwkJCWFjcGlfb3NfcHJpbnRmKCIlWFxuIiwgb2JqX2Rlc2MtPnJlZmVyZW5jZS52YWx1ZSk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgkvKiBVbmtub3duIHJlZmVyZW5jZSBjbGFzcyAqLwogCiAJCQlhY3BpX29zX3ByaW50ZigiJTIuMlhcbiIsIG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpOwpAQCAtNjYxLDggKzYzNSw4IEBACiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVHSU9OX0ZJRUxEOgogCiAJCWFjcGlfb3NfcHJpbnRmCi0JCSAgICAoIlJlZ2lvbkZpZWxkOiBCaXRzPSVYIEFjY1dpZHRoPSVYIExvY2s9JVggVXBkYXRlPSVYIGF0IGJ5dGU9JVggYml0PSVYIG9mIGJlbG93OlxuIiwKLQkJICAgICBvYmpfZGVzYy0+ZmllbGQuYml0X2xlbmd0aCwKKwkJICAgICgiUmVnaW9uRmllbGQ6IEJpdHM9JVggQWNjV2lkdGg9JVggTG9jaz0lWCBVcGRhdGU9JVggYXQgIgorCQkgICAgICJieXRlPSVYIGJpdD0lWCBvZiBiZWxvdzpcbiIsIG9ial9kZXNjLT5maWVsZC5iaXRfbGVuZ3RoLAogCQkgICAgIG9ial9kZXNjLT5maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCwKIAkJICAgICBvYmpfZGVzYy0+ZmllbGQuZmllbGRfZmxhZ3MgJiBBTUxfRklFTERfTE9DS19SVUxFX01BU0ssCiAJCSAgICAgb2JqX2Rlc2MtPmZpZWxkLmZpZWxkX2ZsYWdzICYgQU1MX0ZJRUxEX1VQREFURV9SVUxFX01BU0ssCkBAIC02ODYsOSArNjYwLDggQEAKIAogCQlpZiAoIW9ial9kZXNjLT5idWZmZXJfZmllbGQuYnVmZmVyX29iaikgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiKk5VTEwqXG4iKSk7Ci0JCX0gZWxzZQotCQkgICAgaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjLT5idWZmZXJfZmllbGQuYnVmZmVyX29iaikKLQkJCSE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmJ1ZmZlcl9maWVsZC5idWZmZXJfb2JqKS0+Y29tbW9uLnR5cGUgIT0KKwkJCSAgIEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJCWFjcGlfb3NfcHJpbnRmKCIqbm90IGEgQnVmZmVyKlxuIik7CiAJCX0gZWxzZSB7CiAJCQlhY3BpX2V4X2R1bXBfb3BlcmFuZChvYmpfZGVzYy0+YnVmZmVyX2ZpZWxkLmJ1ZmZlcl9vYmosCkBAIC03MzcsOCArNzEwLDcgQEAKIAlkZWZhdWx0OgogCQkvKiBVbmtub3duIFR5cGUgKi8KIAotCQlhY3BpX29zX3ByaW50ZigiVW5rbm93biBUeXBlICVYXG4iLAotCQkJICAgICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSk7CisJCWFjcGlfb3NfcHJpbnRmKCJVbmtub3duIFR5cGUgJVhcbiIsIG9ial9kZXNjLT5jb21tb24udHlwZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTM5LDcgKzkxMSw3IEBACiAKIAkvKiBQYWNrYWdlcyBtYXkgb25seSBjb250YWluIGEgZmV3IG9iamVjdCB0eXBlcyAqLwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKKwlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAKIAkJYWNwaV9vc19wcmludGYoIltJbnRlZ2VyXSA9ICU4LjhYJTguOFhcbiIsCkBAIC05OTAsOCArOTYyLDcgQEAKIAogCWRlZmF1bHQ6CiAKLQkJYWNwaV9vc19wcmludGYoIltVbmtub3duIFR5cGVdICVYXG4iLAotCQkJICAgICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSk7CisJCWFjcGlfb3NfcHJpbnRmKCJbVW5rbm93biBUeXBlXSAlWFxuIiwgb2JqX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYwppbmRleCBhMzUyZDAyLi41NDZkY2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYwpAQCAtODQsNyArODQsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBidWZmZXJfZmllbGQgYXJndW1lbnRzIGhhdmUgbm90IGJlZW4gcHJldmlvdXNseSBldmFsdWF0ZWQsCiAJCSAqIGV2YWx1YXRlIHRoZW0gbm93IGFuZCBzYXZlIHRoZSByZXN1bHRzLgpAQCAtOTUsOSArOTUsOCBAQAogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJfQogCQl9Ci0JfSBlbHNlCi0JICAgIGlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpCi0JCSYmIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpICYmCisJCSAgIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CiAJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykpIHsKIAkJLyoKIAkJICogVGhpcyBpcyBhbiBTTUJ1cyByZWFkLiAgV2UgbXVzdCBjcmVhdGUgYSBidWZmZXIgdG8gaG9sZCB0aGUgZGF0YQpAQCAtMTYzLDcgKzE2Miw3IEBACiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKIAkJCSAgIkZpZWxkUmVhZCBbVE9dOiAgIE9iaiAlcCwgVHlwZSAlWCwgQnVmICVwLCBCeXRlTGVuICVYXG4iLAotCQkJICBvYmpfZGVzYywgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLCBidWZmZXIsCisJCQkgIG9ial9kZXNjLCBvYmpfZGVzYy0+Y29tbW9uLnR5cGUsIGJ1ZmZlciwKIAkJCSAgKHUzMikgbGVuZ3RoKSk7CiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCiAJCQkgICJGaWVsZFJlYWQgW0ZST01dOiBCaXRMZW4gJVgsIEJpdE9mZiAlWCwgQnl0ZU9mZiAlWFxuIiwKQEAgLTIyMiw3ICsyMjEsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX05PX09QRVJBTkQpOwogCX0KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCkgeworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCkgewogCQkvKgogCQkgKiBJZiB0aGUgYnVmZmVyX2ZpZWxkIGFyZ3VtZW50cyBoYXZlIG5vdCBiZWVuIHByZXZpb3VzbHkgZXZhbHVhdGVkLAogCQkgKiBldmFsdWF0ZSB0aGVtIG5vdyBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KQEAgLTIzMyw5ICsyMzIsOCBAQAogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJfQogCQl9Ci0JfSBlbHNlCi0JICAgIGlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpCi0JCSYmIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpICYmCisJCSAgIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CiAJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykpIHsKIAkJLyoKIAkJICogVGhpcyBpcyBhbiBTTUJ1cyB3cml0ZS4gIFdlIHdpbGwgYnlwYXNzIHRoZSBlbnRpcmUgZmllbGQgbWVjaGFuaXNtCkBAIC0yNDMsNyArMjQxLDcgQEAKIAkJICoKIAkJICogU291cmNlIG11c3QgYmUgYSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIChBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFKS4KIAkJICovCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICJTTUJ1cyB3cml0ZSByZXF1aXJlcyBCdWZmZXIsIGZvdW5kIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwpAQCAtMjkxLDcgKzI4OSw3IEBACiAKIAkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gKi8KIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoc291cmNlX2Rlc2MpKSB7CisJc3dpdGNoIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCQlidWZmZXIgPSAmc291cmNlX2Rlc2MtPmludGVnZXIudmFsdWU7CiAJCWxlbmd0aCA9IHNpemVvZihzb3VyY2VfZGVzYy0+aW50ZWdlci52YWx1ZSk7CkBAIC0zMTQsMTUgKzMxMiwxNCBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAogCQkJICAiRmllbGRXcml0ZSBbRlJPTV06IE9iaiAlcCAoJXM6JVgpLCBCdWYgJXAsIEJ5dGVMZW4gJVhcbiIsCiAJCQkgIHNvdXJjZV9kZXNjLAotCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCShzb3VyY2VfZGVzYykpLAotCQkJICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYyksIGJ1ZmZlciwgbGVuZ3RoKSk7CisJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUpLAorCQkJICBzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUsIGJ1ZmZlciwgbGVuZ3RoKSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKIAkJCSAgIkZpZWxkV3JpdGUgW1RPXTogICBPYmogJXAgKCVzOiVYKSwgQml0TGVuICVYLCBCaXRPZmYgJVgsIEJ5dGVPZmYgJVhcbiIsCiAJCQkgIG9ial9kZXNjLAotCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSwKLQkJCSAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLAorCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSwKKwkJCSAgb2JqX2Rlc2MtPmNvbW1vbi50eXBlLAogCQkJICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJpdF9sZW5ndGgsCiAJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCwKIAkJCSAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iYXNlX2J5dGVfb2Zmc2V0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCmluZGV4IGVmNThhYzQuLjk5Y2VlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCkBAIC05NCw5ICs5NCw5IEBACiAKIAkvKiBXZSBtdXN0IGhhdmUgYSB2YWxpZCByZWdpb24gKi8KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZ25fZGVzYykgIT0gQUNQSV9UWVBFX1JFR0lPTikgeworCWlmIChyZ25fZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX1JFR0lPTikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTmVlZGVkIFJlZ2lvbiwgZm91bmQgdHlwZSAlWCAoJXMpIiwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZ25fZGVzYyksCisJCQkgICAgcmduX2Rlc2MtPmNvbW1vbi50eXBlLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUocmduX2Rlc2MpKSk7CiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTEzLDEyICsxMTMsNiBAQAogCQl9CiAJfQogCi0JLyogRXhpdCBpZiBBZGRyZXNzL0xlbmd0aCBoYXZlIGJlZW4gZGlzYWxsb3dlZCBieSB0aGUgaG9zdCBPUyAqLwotCi0JaWYgKHJnbl9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfSU5WQUxJRCkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0lMTEVHQUxfQUREUkVTUyk7Ci0JfQotCiAJLyoKIAkgKiBFeGl0IG5vdyBmb3IgU01CdXMgYWRkcmVzcyBzcGFjZSwgaXQgaGFzIGEgbm9uLWxpbmVhciBhZGRyZXNzIHNwYWNlCiAJICogYW5kIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBkaXJlY3RseSB2YWxpZGF0ZWQKQEAgLTM5MCw3ICszODQsNyBAQAogCSAqIGluZGV4X2ZpZWxkIC0gV3JpdGUgdG8gYW4gSW5kZXggUmVnaXN0ZXIsIHRoZW4gcmVhZC93cml0ZSBmcm9tL3RvIGEKIAkgKiAgICAgICAgICAgICAgIERhdGEgUmVnaXN0ZXIKIAkgKi8KLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEOgogCQkvKgogCQkgKiBJZiB0aGUgYnVmZmVyX2ZpZWxkIGFyZ3VtZW50cyBoYXZlIG5vdCBiZWVuIHByZXZpb3VzbHkgZXZhbHVhdGVkLApAQCAtNTI3LDcgKzUyMSw3IEBACiAJZGVmYXVsdDoKIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiV3Jvbmcgb2JqZWN0IHR5cGUgaW4gZmllbGQgSS9PICVYIiwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpKTsKKwkJCSAgICBvYmpfZGVzYy0+Y29tbW9uLnR5cGUpKTsKIAkJc3RhdHVzID0gQUVfQU1MX0lOVEVSTkFMOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYwppbmRleCA2YjA3NDdhYy4uOTk4ZWFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCkBAIC04MCw3ICs4MCw3IEBACiAJc3dpdGNoIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob2JqX2Rlc2MpKSB7CiAJY2FzZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EOgogCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCQlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfT1BFUkFORF9UWVBFKTsKIAkJfQogCkBAIC0yNjAsNyArMjYwLDcgQEAKIAkgKiBndWFyYW50ZWVkIHRvIGJlIGVpdGhlciBJbnRlZ2VyL1N0cmluZy9CdWZmZXIgYnkgdGhlIG9wZXJhbmQKIAkgKiByZXNvbHV0aW9uIG1lY2hhbmlzbS4KIAkgKi8KLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmQwKSkgeworCXN3aXRjaCAob3BlcmFuZDAtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyKG9wZXJhbmQxLCAmbG9jYWxfb3BlcmFuZDEsIDE2KTsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCiAJZGVmYXVsdDoKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgb2JqZWN0IHR5cGU6ICVYIiwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kMCkpKTsKKwkJCSAgICBvcGVyYW5kMC0+Y29tbW9uLnR5cGUpKTsKIAkJc3RhdHVzID0gQUVfQU1MX0lOVEVSTkFMOwogCX0KIApAQCAtMjk4LDcgKzI5OCw3IEBACiAJICogMikgVHdvIFN0cmluZ3MgY29uY2F0ZW5hdGVkIHRvIHByb2R1Y2UgYSBuZXcgU3RyaW5nCiAJICogMykgVHdvIEJ1ZmZlcnMgY29uY2F0ZW5hdGVkIHRvIHByb2R1Y2UgYSBuZXcgQnVmZmVyCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kMCkpIHsKKwlzd2l0Y2ggKG9wZXJhbmQwLT5jb21tb24udHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAKIAkJLyogUmVzdWx0IG9mIHR3byBJbnRlZ2VycyBpcyBhIEJ1ZmZlciAqLwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJCS8qIEludmFsaWQgb2JqZWN0IHR5cGUsIHNob3VsZCBub3QgaGFwcGVuIGhlcmUgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBvYmplY3QgdHlwZTogJVgiLAotCQkJICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmQwKSkpOworCQkJICAgIG9wZXJhbmQwLT5jb21tb24udHlwZSkpOwogCQlzdGF0dXMgPSBBRV9BTUxfSU5URVJOQUw7CiAJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC01ODEsNyArNTgxLDcgQEAKIAkgKiBndWFyYW50ZWVkIHRvIGJlIGVpdGhlciBJbnRlZ2VyL1N0cmluZy9CdWZmZXIgYnkgdGhlIG9wZXJhbmQKIAkgKiByZXNvbHV0aW9uIG1lY2hhbmlzbS4KIAkgKi8KLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmQwKSkgeworCXN3aXRjaCAob3BlcmFuZDAtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyKG9wZXJhbmQxLCAmbG9jYWxfb3BlcmFuZDEsIDE2KTsKQEAgLTYwOCw3ICs2MDgsNyBAQAogCS8qCiAJICogVHdvIGNhc2VzOiAxKSBCb3RoIEludGVnZXJzLCAyKSBCb3RoIFN0cmluZ3Mgb3IgQnVmZmVycwogCSAqLwotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kMCkgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwlpZiAob3BlcmFuZDAtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCS8qCiAJCSAqIDEpIEJvdGggb3BlcmFuZHMgYXJlIG9mIHR5cGUgaW50ZWdlcgogCQkgKiAgICBOb3RlOiBsb2NhbF9vcGVyYW5kMSBtYXkgaGF2ZSBjaGFuZ2VkIGFib3ZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMKaW5kZXggYjUzMDQ4MC4uOTYzNWQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYwpAQCAtODA3LDExICs4MDcsOSBAQAogCQkJCQkJCSBhY3BpX25hbWVzcGFjZV9ub2RlICopCiAJCQkJCQkJb3BlcmFuZFswXSk7CiAJCQlpZiAodGVtcF9kZXNjCi0JCQkgICAgJiYKLQkJCSAgICAoKEFDUElfR0VUX09CSkVDVF9UWVBFKHRlbXBfZGVzYykgPT0KLQkJCSAgICAgIEFDUElfVFlQRV9TVFJJTkcpCi0JCQkgICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSh0ZW1wX2Rlc2MpID09Ci0JCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSkgeworCQkJICAgICYmICgodGVtcF9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfU1RSSU5HKQorCQkJCXx8ICh0ZW1wX2Rlc2MtPmNvbW1vbi50eXBlID09CisJCQkJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSkgewogCQkJCW9wZXJhbmRbMF0gPSB0ZW1wX2Rlc2M7CiAJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHRlbXBfZGVzYyk7CiAJCQl9IGVsc2UgewpAQCAtODE5LDcgKzgxNyw3IEBACiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQogCQl9IGVsc2UgewotCQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kWzBdKSkgeworCQkJc3dpdGNoICgob3BlcmFuZFswXSktPmNvbW1vbi50eXBlKSB7CiAJCQljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAJCQkJLyoKIAkJCQkgKiBUaGlzIGlzIGEgZGVyZWZfb2YgKGxvY2FsX3ggfCBhcmdfeCkKQEAgLTg3Nyw4ICs4NzUsNyBAQAogCiAJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob3BlcmFuZFswXSkgIT0KIAkJICAgIEFDUElfREVTQ19UWVBFX05BTUVEKSB7Ci0JCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob3BlcmFuZFswXSkgPT0KLQkJCSAgICBBQ1BJX1RZUEVfU1RSSU5HKSB7CisJCQlpZiAoKG9wZXJhbmRbMF0pLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfU1RSSU5HKSB7CiAJCQkJLyoKIAkJCQkgKiBUaGlzIGlzIGEgZGVyZWZfb2YgKFN0cmluZykuIFRoZSBzdHJpbmcgaXMgYSByZWZlcmVuY2UKIAkJCQkgKiB0byBhIG5hbWVkIEFDUEkgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jCmluZGV4IDBiNGY1MTMuLjg1ZDk1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMKQEAgLTM5OSw3ICszOTksNyBAQAogCQkgKiBBdCB0aGlzIHBvaW50LCB0aGUgU291cmNlIG9wZXJhbmQgaXMgYSBTdHJpbmcsIEJ1ZmZlciwgb3IgUGFja2FnZS4KIAkJICogVmVyaWZ5IHRoYXQgdGhlIGluZGV4IGlzIHdpdGhpbiByYW5nZS4KIAkJICovCi0JCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob3BlcmFuZFswXSkpIHsKKwkJc3dpdGNoICgob3BlcmFuZFswXSktPmNvbW1vbi50eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAogCQkJaWYgKGluZGV4ID49IG9wZXJhbmRbMF0tPnN0cmluZy5sZW5ndGgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYwppbmRleCBjNjUyMGJiLi4yNTNmOWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jCkBAIC0xNjEsOSArMTYxLDggQEAKIAkJICogQ3JlYXRlIHRoZSByZXR1cm4gb2JqZWN0LiAgVGhlIFNvdXJjZSBvcGVyYW5kIGlzIGd1YXJhbnRlZWQgdG8gYmUKIAkJICogZWl0aGVyIGEgU3RyaW5nIG9yIGEgQnVmZmVyLCBzbyBqdXN0IHVzZSBpdHMgdHlwZS4KIAkJICovCi0JCXJldHVybl9kZXNjID0KLQkJICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX0dFVF9PQkpFQ1RfVFlQRQotCQkJCQkJICAgKG9wZXJhbmRbMF0pKTsKKwkJcmV0dXJuX2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoKG9wZXJhbmRbMF0pLT4KKwkJCQkJCQkgICAgIGNvbW1vbi50eXBlKTsKIAkJaWYgKCFyZXR1cm5fZGVzYykgewogCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQkJZ290byBjbGVhbnVwOwpAQCAtMTkxLDcgKzE5MCw3IEBACiAKIAkJLyogU3RyaW5ncyBhbHdheXMgaGF2ZSBhIHN1Yi1wb2ludGVyLCBub3Qgc28gZm9yIGJ1ZmZlcnMgKi8KIAotCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmRbMF0pKSB7CisJCXN3aXRjaCAoKG9wZXJhbmRbMF0pLT5jb21tb24udHlwZSkgewogCQljYXNlIEFDUElfVFlQRV9TVFJJTkc6CiAKIAkJCS8qIEFsd2F5cyBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgZm9yIHRoZSBTdHJpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCmluZGV4IGEyMjZmNzQuLjUyZmVjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCXJldHVybl9VSU5UMzIoMCk7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CiAJCS8qCiAJCSAqIGJ1ZmZlcl9maWVsZCBhY2Nlc3MgY2FuIGJlIG9uIGFueSBieXRlIGJvdW5kYXJ5LCBzbyB0aGUKIAkJICogYnl0ZV9hbGlnbm1lbnQgaXMgYWx3YXlzIDEgYnl0ZSAtLSByZWdhcmRsZXNzIG9mIGFueSBieXRlX2FsaWdubWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCmluZGV4IDc2ZWM4ZmYuLjNhNTRiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKQEAgLTI5NCwxNCArMjk0LDE0IEBACiAJc3dpdGNoIChmdW5jdGlvbikgewogCWNhc2UgQUNQSV9SRUFEOgogCi0JCXN0YXR1cyA9IGFjcGlfb3NfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsCiAJCQkJCSAgICZ2YWx1ZTMyLCBiaXRfd2lkdGgpOwogCQkqdmFsdWUgPSB2YWx1ZTMyOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9XUklURToKIAotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgYWRkcmVzcywKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsCiAJCQkJCSAgICAodTMyKSAqIHZhbHVlLCBiaXRfd2lkdGgpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jCmluZGV4IGEwNjNhNzQuLjYwNzk1OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXN3aXRjaCAoZW50cnlfdHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiT2JqZWN0IG5vdCBhIFBhY2thZ2UsIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCWlmIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk9iamVjdCBub3QgYSBCdWZmZXIsIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9TVFJJTkc6CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfU1RSSU5HKSB7CisJCWlmIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX1NUUklORykgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk9iamVjdCBub3QgYSBTdHJpbmcsIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk9iamVjdCBub3QgYSBJbnRlZ2VyLCB0eXBlICVzIiwKIAkJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShzb3VyY2VfZGVzYykpKTsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfT1BFUkFORF9UWVBFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYwppbmRleCBmNjEwNWE2Li5jOTNiNTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCS8qIFRoaXMgaXMgYSB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSB7CisJc3dpdGNoIChzdGFja19kZXNjLT5jb21tb24udHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKIAogCQlyZWZfdHlwZSA9IHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5jbGFzczsKQEAgLTI5Nyw4ICsyOTcsNyBAQAogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKIAkJCQkgICJGaWVsZFJlYWQgU291cmNlRGVzYz0lcCBUeXBlPSVYXG4iLAotCQkJCSAgc3RhY2tfZGVzYywKLQkJCQkgIEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSk7CisJCQkJICBzdGFja19kZXNjLCBzdGFja19kZXNjLT5jb21tb24udHlwZSkpOwogCiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX2V4X3JlYWRfZGF0YV9mcm9tX2ZpZWxkKHdhbGtfc3RhdGUsIHN0YWNrX2Rlc2MsCkBAIC0zODYsNyArMzg1LDcgQEAKIAkgKiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBvYmplY3RfdHlwZSBhbmQgc2l6ZV9vZiBvcGVyYXRvcnMpLiBUaGlzIG1lYW5zCiAJICogdHJhdmVyc2luZyB0aGUgbGlzdCBvZiBwb3NzaWJseSBtYW55IG5lc3RlZCByZWZlcmVuY2VzLgogCSAqLwotCXdoaWxlIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCXdoaWxlIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgewogCQlzd2l0Y2ggKG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpIHsKIAkJY2FzZSBBQ1BJX1JFRkNMQVNTX1JFRk9GOgogCQljYXNlIEFDUElfUkVGQ0xBU1NfTkFNRToKQEAgLTUxOCw3ICs1MTcsNyBAQAogCSAqIE5vdyB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGFuIG9iamVjdCB0aGF0IGhhcyBub3QgYmVlbiBjcmVhdGVkCiAJICogdmlhIHRoZSByZWZfb2Ygb3IgSW5kZXggb3BlcmF0b3JzLgogCSAqLwotCXR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYyk7CisJdHlwZSA9IG9ial9kZXNjLT5jb21tb24udHlwZTsKIAogICAgICAgZXhpdDoKIAkvKiBDb252ZXJ0IGludGVybmFsIHR5cGVzIHRvIGV4dGVybmFsIHR5cGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCmluZGV4IDNjMzgwMjcuLjVjNzI5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAogCQkJLyogQUNQSSBpbnRlcm5hbCBvYmplY3QgKi8KIAotCQkJb2JqZWN0X3R5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYyk7CisJCQlvYmplY3RfdHlwZSA9IG9ial9kZXNjLT5jb21tb24udHlwZTsKIAogCQkJLyogQ2hlY2sgZm9yIGJhZCBhY3BpX29iamVjdF90eXBlICovCiAKQEAgLTI4Nyw4ICsyODcsNyBAQAogCiAJCQlpZiAoKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvYmpfZGVzYykgPT0KIAkJCSAgICAgQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkKLQkJCSAgICAmJiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09Ci0JCQkJQUNQSV9UWVBFX1NUUklORykpIHsKKwkJCSAgICAmJiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9TVFJJTkcpKSB7CiAJCQkJLyoKIAkJCQkgKiBTdHJpbmcgZm91bmQgLSB0aGUgc3RyaW5nIHJlZmVyZW5jZXMgYSBuYW1lZCBvYmplY3QgYW5kCiAJCQkJICogbXVzdCBiZSByZXNvbHZlZCB0byBhIG5vZGUKQEAgLTMzNiw3ICszMzUsNyBAQAogCQkJICogLS0gQWxsIG90aGVycyBtdXN0IGJlIHJlc29sdmVkIGJlbG93LgogCQkJICovCiAJCQlpZiAoKG9wY29kZSA9PSBBTUxfU1RPUkVfT1ApICYmCi0JCQkgICAgKEFDUElfR0VUX09CSkVDVF9UWVBFKCpzdGFja19wdHIpID09CisJCQkgICAgKCgqc3RhY2tfcHRyKS0+Y29tbW9uLnR5cGUgPT0KIAkJCSAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKIAkJCSAgICAmJiAoKCpzdGFja19wdHIpLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19JTkRFWCkpIHsKIAkJCQlnb3RvIG5leHRfb3BlcmFuZDsKQEAgLTQ5MCw3ICs0ODksNyBAQAogCiAJCQkvKiBOZWVkIGFuIG9wZXJhbmQgb2YgdHlwZSBJTlRFR0VSLCBTVFJJTkcgb3IgQlVGRkVSICovCiAKLQkJCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJCQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKQEAgLTUxMiw3ICs1MTEsNyBAQAogCiAJCQkvKiBOZWVkIGFuIG9wZXJhbmQgb2YgdHlwZSBTVFJJTkcgb3IgQlVGRkVSICovCiAKLQkJCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJCQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCQkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCkBAIC01NTMsNyArNTUyLDcgQEAKIAkJCSAqIFRoZSBvbmx5IHJlZmVyZW5jZSBhbGxvd2VkIGhlcmUgaXMgYSBkaXJlY3QgcmVmZXJlbmNlIHRvCiAJCQkgKiBhIG5hbWVzcGFjZSBub2RlLgogCQkJICovCi0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CiAJCQljYXNlIEFDUElfVFlQRV9TVFJJTkc6CiAJCQljYXNlIEFDUElfVFlQRV9CVUZGRVI6CkBAIC01NzYsNyArNTc1LDcgQEAKIAogCQkJLyogTmVlZCBhIGJ1ZmZlciBvciBwYWNrYWdlIG9yIChBQ1BJIDIuMCkgU3RyaW5nICovCiAKLQkJCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJCQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfUEFDS0FHRToKIAkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKQEAgLTU5OCw3ICs1OTcsNyBAQAogCiAJCQkvKiBOZWVkIGFuIG9wZXJhbmQgb2YgdHlwZSBSRUdJT04gb3IgYSBCVUZGRVIgKHdoaWNoIGNvdWxkIGJlIGEgcmVzb2x2ZWQgcmVnaW9uIGZpZWxkKSAqLwogCi0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKIAkJCWNhc2UgQUNQSV9UWVBFX1JFR0lPTjoKIApAQCAtNjE5LDcgKzYxOCw3IEBACiAKIAkJCS8qIFVzZWQgYnkgdGhlIFN0b3JlKCkgb3BlcmF0b3Igb25seSAqLwogCi0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAJCQljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgogCQkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgpAQCAtNjc3LDggKzY3Niw4IEBACiAJCSAqIHJlcXVpcmVkIG9iamVjdCB0eXBlIChTaW1wbGUgY2FzZXMgb25seSkuCiAJCSAqLwogCQlzdGF0dXMgPSBhY3BpX2V4X2NoZWNrX29iamVjdF90eXBlKHR5cGVfbmVlZGVkLAotCQkJCQkJICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCSAgICgqc3RhY2tfcHRyKSwgKnN0YWNrX3B0cik7CisJCQkJCQkgICAoKnN0YWNrX3B0ciktPmNvbW1vbi50eXBlLAorCQkJCQkJICAgKnN0YWNrX3B0cik7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKaW5kZXggZTM1ZTliNC4uOTBkNjA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCiAJLyogc291cmNlX2Rlc2MgaXMgb2YgdHlwZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSkgeworCXN3aXRjaCAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAogCQkvKiBPdXRwdXQgY29ycmVjdCBpbnRlZ2VyIHdpZHRoICovCkBAIC0zMjQsNyArMzI0LDcgQEAKIAogCS8qIERlc3RpbmF0aW9uIG9iamVjdCBtdXN0IGJlIGEgUmVmZXJlbmNlIG9yIGEgQ29uc3RhbnQgb2JqZWN0ICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGRlc3RfZGVzYykpIHsKKwlzd2l0Y2ggKGRlc3RfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAJCWJyZWFrOwogCkBAIC00NjAsOSArNDYwLDggQEAKIAkJICovCiAJCW9ial9kZXNjID0gKihpbmRleF9kZXNjLT5yZWZlcmVuY2Uud2hlcmUpOwogCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgPT0KLQkJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UKLQkJICAgICYmIHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19UQUJMRSkgeworCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UgJiYKKwkJICAgIHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19UQUJMRSkgewogCiAJCQkvKiBUaGlzIGlzIGEgRERCSGFuZGxlLCBqdXN0IGFkZCBhIHJlZmVyZW5jZSB0byBpdCAqLwogCkBAIC01MjAsOCArNTE5LDggQEAKIAkJICogYnkgdGhlIElOREVYX09QIGNvZGUuCiAJCSAqLwogCQlvYmpfZGVzYyA9IGluZGV4X2Rlc2MtPnJlZmVyZW5jZS5vYmplY3Q7Ci0JCWlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfVFlQRV9CVUZGRVIpICYmCi0JCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfVFlQRV9TVFJJTkcpKSB7CisJCWlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpICYmCisJCSAgICAob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9TVFJJTkcpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX09QRVJBTkRfVFlQRSk7CiAJCX0KIApAQCAtNTI5LDcgKzUyOCw3IEBACiAJCSAqIFRoZSBhc3NpZ25tZW50IG9mIHRoZSBpbmRpdmlkdWFsIGVsZW1lbnRzIHdpbGwgYmUgc2xpZ2h0bHkKIAkJICogZGlmZmVyZW50IGZvciBlYWNoIHNvdXJjZSB0eXBlLgogCQkgKi8KLQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykpIHsKKwkJc3dpdGNoIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAogCQkJLyogVXNlIHRoZSBsZWFzdC1zaWduaWZpY2FudCBieXRlIG9mIHRoZSBpbnRlZ2VyICovCkBAIC03MDcsOCArNzA2LDcgQEAKIAkJLyogTm8gY29udmVyc2lvbnMgZm9yIGFsbCBvdGhlciB0eXBlcy4gIEp1c3QgYXR0YWNoIHRoZSBzb3VyY2Ugb2JqZWN0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9uc19hdHRhY2hfb2JqZWN0KG5vZGUsIHNvdXJjZV9kZXNjLAotCQkJCQkgICAgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJICAgICAgIChzb3VyY2VfZGVzYykpOworCQkJCQkgICAgICAgc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMKaW5kZXggMTQ1ZDE1My4uNjA4ZTgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYwpAQCAtOTYsOCArOTYsNyBAQAogCQkgKiBhcmUgYWxsIGVzc2VudGlhbGx5IHRoZSBzYW1lLiAgVGhpcyBjYXNlIGhhbmRsZXMgdGhlCiAJCSAqICJpbnRlcmNoYW5nZWFibGUiIHR5cGVzIEludGVnZXIsIFN0cmluZywgYW5kIEJ1ZmZlci4KIAkJICovCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgPT0KLQkJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwkJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAKIAkJCS8qIFJlc29sdmUgYSByZWZlcmVuY2Ugb2JqZWN0IGZpcnN0ICovCiAKQEAgLTExNywxMyArMTE2LDExIEBACiAKIAkJLyogTXVzdCBoYXZlIGEgSW50ZWdlciwgQnVmZmVyLCBvciBTdHJpbmcgKi8KIAotCQlpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgJiYKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX0JVRkZFUikgJiYKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX1NUUklORykgJiYKLQkJICAgICEoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSA9PQotCQkgICAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKLQkJICAgICAgJiYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0KLQkJCSAgQUNQSV9SRUZDTEFTU19UQUJMRSkpKSB7CisJCWlmICgoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSAmJgorCQkgICAgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSAmJgorCQkgICAgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfU1RSSU5HKSAmJgorCQkgICAgISgoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpICYmCisJCSAgICAgIChzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID09IEFDUElfUkVGQ0xBU1NfVEFCTEUpKSkgewogCiAJCQkvKiBDb252ZXJzaW9uIHN1Y2Nlc3NmdWwgYnV0IHN0aWxsIG5vdCBhIHZhbGlkIHR5cGUgKi8KIApAQCAtMjE4LDggKzIxNSw3IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0KLQkgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUoZGVzdF9kZXNjKSkgeworCWlmIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUgIT0gZGVzdF9kZXNjLT5jb21tb24udHlwZSkgewogCQkvKgogCQkgKiBUaGUgc291cmNlIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIGRlc3RpbmF0aW9uLgogCQkgKiBQZXJmb3JtIHRoZSAiaW1wbGljaXQgY29udmVyc2lvbiIgb2YgdGhlIHNvdXJjZSB0byB0aGUgY3VycmVudCB0eXBlCkBAIC0yMjksMTEgKzIyNSwxMCBAQAogCQkgKiBPdGhlcndpc2UsIGFjdHVhbF9zcmNfZGVzYyBpcyBhIHRlbXBvcmFyeSBvYmplY3QgdG8gaG9sZCB0aGUKIAkJICogY29udmVydGVkIG9iamVjdC4KIAkJICovCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V4X2NvbnZlcnRfdG9fdGFyZ2V0X3R5cGUoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCSAgIChkZXN0X2Rlc2MpLCBzb3VyY2VfZGVzYywKLQkJCQkJCSAgICZhY3R1YWxfc3JjX2Rlc2MsCi0JCQkJCQkgICB3YWxrX3N0YXRlKTsKKwkJc3RhdHVzID0gYWNwaV9leF9jb252ZXJ0X3RvX3RhcmdldF90eXBlKGRlc3RfZGVzYy0+Y29tbW9uLnR5cGUsCisJCQkJCQkJc291cmNlX2Rlc2MsCisJCQkJCQkJJmFjdHVhbF9zcmNfZGVzYywKKwkJCQkJCQl3YWxrX3N0YXRlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQpAQCAtMjUyLDcgKzI0Nyw3IEBACiAJICogV2Ugbm93IGhhdmUgdHdvIG9iamVjdHMgb2YgaWRlbnRpY2FsIHR5cGVzLCBhbmQgd2UgY2FuIHBlcmZvcm0gYQogCSAqIGNvcHkgb2YgdGhlICp2YWx1ZSogb2YgdGhlIHNvdXJjZSBvYmplY3QuCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShkZXN0X2Rlc2MpKSB7CisJc3dpdGNoIChkZXN0X2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAogCQlkZXN0X2Rlc2MtPmludGVnZXIudmFsdWUgPSBhY3R1YWxfc3JjX2Rlc2MtPmludGVnZXIudmFsdWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4dXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCmluZGV4IDMyYjg1ZDYuLjg3NzMwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkgKi8KIAlpZiAoKCFvYmpfZGVzYykgfHwKIAkgICAgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkgfHwKLQkgICAgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKKwkgICAgKG9ial9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdhY3BpLmMKaW5kZXggYTlkNGZlYS4uOWFmMzYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jCkBAIC04Niw3ICs4Niw4IEBACiAJICovCiAJaWYgKCFhY3BpX2dibF9GQURULmFjcGlfZW5hYmxlICYmICFhY3BpX2dibF9GQURULmFjcGlfZGlzYWJsZSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJObyBBQ1BJIG1vZGUgdHJhbnNpdGlvbiBzdXBwb3J0ZWQgaW4gdGhpcyBzeXN0ZW0gKGVuYWJsZS9kaXNhYmxlIGJvdGggemVybykiKSk7CisJCQkgICAgIk5vIEFDUEkgbW9kZSB0cmFuc2l0aW9uIHN1cHBvcnRlZCBpbiB0aGlzIHN5c3RlbSAiCisJCQkgICAgIihlbmFibGUvZGlzYWJsZSBib3RoIHplcm8pIikpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApAQCAtOTUsNyArOTYsNyBAQAogCiAJCS8qIEJJT1Mgc2hvdWxkIGhhdmUgZGlzYWJsZWQgQUxMIGZpeGVkIGFuZCBHUCBldmVudHMgKi8KIAotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoYWNwaV9nYmxfRkFEVC5zbWlfY29tbWFuZCwKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KGFjcGlfZ2JsX0ZBRFQuc21pX2NvbW1hbmQsCiAJCQkJCSAgICAodTMyKSBhY3BpX2dibF9GQURULmFjcGlfZW5hYmxlLCA4KTsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIkF0dGVtcHRpbmcgdG8gZW5hYmxlIEFDUEkgbW9kZVxuIikpOwpAQCAtMTA3LDcgKzEwOCw3IEBACiAJCSAqIEJJT1Mgc2hvdWxkIGNsZWFyIGFsbCBmaXhlZCBzdGF0dXMgYml0cyBhbmQgcmVzdG9yZSBmaXhlZCBldmVudAogCQkgKiBlbmFibGUgYml0cyB0byBkZWZhdWx0CiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoYWNwaV9nYmxfRkFEVC5zbWlfY29tbWFuZCwKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KGFjcGlfZ2JsX0ZBRFQuc21pX2NvbW1hbmQsCiAJCQkJCSAgICAodTMyKSBhY3BpX2dibF9GQURULmFjcGlfZGlzYWJsZSwKIAkJCQkJICAgIDgpOwogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCkBAIC0xNzIsNyArMTczLDcgQEAKIAkJcmV0dXJuX1VJTlQzMihBQ1BJX1NZU19NT0RFX0FDUEkpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfZ2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1NDSV9FTkFCTEUsICZ2YWx1ZSk7CisJc3RhdHVzID0gYWNwaV9yZWFkX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19TQ0lfRU5BQkxFLCAmdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fVUlOVDMyKEFDUElfU1lTX01PREVfTEVHQUNZKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKaW5kZXggMjAxM2I2Ni4uZDNiN2UzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYwpAQCAtODksMTAgKzg5LDkgQEAKIAogCS8qIENsZWFyIGp1c3QgdGhlIGJpdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgR1BFICovCiAKLQlBQ1BJX0NMRUFSX0JJVChlbmFibGVfbWFzaywKLQkJICAgICAgICgodTMyKSAxIDw8Ci0JCQkoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLQotCQkJIGdwZV9yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKSk7CisJQUNQSV9DTEVBUl9CSVQoZW5hYmxlX21hc2ssICgodTMyKTEgPDwKKwkJCQkgICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCisJCQkJICAgICAgZ3BlX3JlZ2lzdGVyX2luZm8tPmJhc2VfZ3BlX251bWJlcikpKTsKIAogCS8qIFdyaXRlIHRoZSB1cGRhdGVkIGVuYWJsZSBtYXNrICovCiAKQEAgLTE1NiwxMCArMTU1LDkgQEAKIAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAotCXJlZ2lzdGVyX2JpdCA9ICh1OCkKLQkgICAgKDEgPDwKLQkgICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCi0JICAgICAgZ3BlX2V2ZW50X2luZm8tPnJlZ2lzdGVyX2luZm8tPmJhc2VfZ3BlX251bWJlcikpOworCXJlZ2lzdGVyX2JpdCA9ICh1OCkoMSA8PAorCQkJICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCisJCQkgICAgIGdwZV9ldmVudF9pbmZvLT5yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKTsKIAogCS8qCiAJICogV3JpdGUgYSBvbmUgdG8gdGhlIGFwcHJvcHJpYXRlIGJpdCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvCkBAIC0yMDYsMTAgKzIwNCw5IEBACiAKIAkvKiBHZXQgdGhlIHJlZ2lzdGVyIGJpdG1hc2sgZm9yIHRoaXMgR1BFICovCiAKLQlyZWdpc3Rlcl9iaXQgPSAodTgpCi0JICAgICgxIDw8Ci0JICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLQotCSAgICAgIGdwZV9ldmVudF9pbmZvLT5yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKTsKKwlyZWdpc3Rlcl9iaXQgPSAodTgpKDEgPDwKKwkJCSAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLQorCQkJICAgICBncGVfZXZlbnRfaW5mby0+cmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CiAKIAkvKiBHUEUgY3VycmVudGx5IGVuYWJsZWQ/IChlbmFibGVkIGZvciBydW50aW1lPykgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKaW5kZXggNGRjNDNiMC4uN2IyZmI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCkBAIC01MSw2ICs1MSwxNyBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfSEFSRFdBUkUKIEFDUElfTU9EVUxFX05BTUUoImh3cmVncyIpCiAKKy8qIExvY2FsIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9od19yZWFkX211bHRpcGxlKHUzMiAqdmFsdWUsCisJCSAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWdpc3Rlcl9iKTsKKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3dyaXRlX211bHRpcGxlKHUzMiB2YWx1ZSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXMKQEAgLTYwLDkgKzcxLDkgQEAKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogQ2xlYXJzIGFsbCBmaXhlZCBhbmQgZ2VuZXJhbCBwdXJwb3NlIHN0YXR1cyBiaXRzCi0gKiAgICAgICAgICAgICAgVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIElOVEVSUlVQVFMgRElTQUJMRUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBhY3BpX3N0YXR1cyBhY3BpX2h3X2NsZWFyX2FjcGlfc3RhdHVzKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtNzAsMjggKzgxLDIwIEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X2NsZWFyX2FjcGlfc3RhdHVzKTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sICJBYm91dCB0byB3cml0ZSAlMDRYIHRvICUwNFhcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywgIkFib3V0IHRvIHdyaXRlICUwNFggdG8gJTBsbFhcbiIsCiAJCQkgIEFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTLAotCQkJICAodTE2KSBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLmFkZHJlc3MpKTsKKwkJCSAgYWNwaV9nYmxfeHBtMWFfc3RhdHVzLmFkZHJlc3MpKTsKIAogCWxvY2tfZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAorCS8qIENsZWFyIHRoZSBmaXhlZCBldmVudHMgaW4gUE0xIEEvQiAqLworCiAJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCiAJCQkJCUFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyogQ2xlYXIgdGhlIGZpeGVkIGV2ZW50cyAqLwotCi0JaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suYWRkcmVzcykgewotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKEFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTLAotCQkJCSAgICAmYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jayk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JCX0KLQl9Ci0KIAkvKiBDbGVhciB0aGUgR1BFIEJpdHMgaW4gYWxsIEdQRSByZWdpc3RlcnMgaW4gYWxsIEdQRSBibG9ja3MgKi8KIAogCXN0YXR1cyA9IGFjcGlfZXZfd2Fsa19ncGVfbGlzdChhY3BpX2h3X2NsZWFyX2dwZV9ibG9jaywgTlVMTCk7CkBAIC0xMjgsNiArMTMxLDQyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od193cml0ZV9wbTFfY29udHJvbAorICoKKyAqIFBBUkFNRVRFUlM6ICBwbTFhX2NvbnRyb2wgICAgICAgIC0gVmFsdWUgdG8gYmUgd3JpdHRlbiB0byBQTTFBIGNvbnRyb2wKKyAqICAgICAgICAgICAgICBwbTFiX2NvbnRyb2wgICAgICAgIC0gVmFsdWUgdG8gYmUgd3JpdHRlbiB0byBQTTFCIGNvbnRyb2wKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFdyaXRlIHRoZSBQTTEgQS9CIGNvbnRyb2wgcmVnaXN0ZXJzLiBUaGVzZSByZWdpc3RlcnMgYXJlCisgKiAgICAgICAgICAgICAgZGlmZmVyZW50IHRoYW4gdGhhbiB0aGUgUE0xIEEvQiBzdGF0dXMgYW5kIGVuYWJsZSByZWdpc3RlcnMKKyAqICAgICAgICAgICAgICBpbiB0aGF0IGRpZmZlcmVudCB2YWx1ZXMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIEEvQiByZWdpc3RlcnMuCisgKiAgICAgICAgICAgICAgTW9zdCBub3RhYmx5LCB0aGUgU0xQX1RZUCBiaXRzIGNhbiBiZSBkaWZmZXJlbnQsIGFzIHBlciB0aGUKKyAqICAgICAgICAgICAgICB2YWx1ZXMgcmV0dXJuZWQgZnJvbSB0aGUgX1N4IHByZWRlZmluZWQgbWV0aG9kcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX2h3X3dyaXRlX3BtMV9jb250cm9sKHUzMiBwbTFhX2NvbnRyb2wsIHUzMiBwbTFiX2NvbnRyb2wpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShod193cml0ZV9wbTFfY29udHJvbCk7CisKKwlzdGF0dXMgPSBhY3BpX3dyaXRlKHBtMWFfY29udHJvbCwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfY29udHJvbF9ibG9jayk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCWlmIChhY3BpX2dibF9GQURULnhwbTFiX2NvbnRyb2xfYmxvY2suYWRkcmVzcykgeworCQlzdGF0dXMgPQorCQkgICAgYWNwaV93cml0ZShwbTFiX2NvbnRyb2wsCisJCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jayk7CisJfQorCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfcmVnaXN0ZXJfcmVhZAogICoKICAqIFBBUkFNRVRFUlM6ICByZWdpc3Rlcl9pZCAgICAgICAgIC0gQUNQSSBSZWdpc3RlciBJRApAQCAtMTQxLDY0ICsxODAsNTYgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUpCiB7Ci0JdTMyIHZhbHVlMSA9IDA7Ci0JdTMyIHZhbHVlMiA9IDA7CisJdTMyIHZhbHVlID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3JlZ2lzdGVyX3JlYWQpOwogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTOgkvKiAxNi1iaXQgYWNjZXNzICovCisJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVM6CS8qIFBNMSBBL0I6IDE2LWJpdCBhY2Nlc3MgZWFjaCAqLwogCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUxLCAmYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jayk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJLyogUE0xQiBpcyBvcHRpb25hbCAqLwotCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUyLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jayk7Ci0JCXZhbHVlMSB8PSB2YWx1ZTI7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9tdWx0aXBsZSgmdmFsdWUsCisJCQkJCSAgICAgICAmYWNwaV9nYmxfeHBtMWFfc3RhdHVzLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX3hwbTFiX3N0YXR1cyk7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9FTkFCTEU6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KKwljYXNlIEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRToJLyogUE0xIEEvQjogMTYtYml0IGFjY2VzcyBlYWNoICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZTEsICZhY3BpX2dibF94cG0xYV9lbmFibGUpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3JlYWQoJnZhbHVlMiwgJmFjcGlfZ2JsX3hwbTFiX2VuYWJsZSk7Ci0JCXZhbHVlMSB8PSB2YWx1ZTI7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9tdWx0aXBsZSgmdmFsdWUsCisJCQkJCSAgICAgICAmYWNwaV9nYmxfeHBtMWFfZW5hYmxlLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX3hwbTFiX2VuYWJsZSk7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MOgkvKiAxNi1iaXQgYWNjZXNzICovCisJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MOgkvKiBQTTEgQS9COiAxNi1iaXQgYWNjZXNzIGVhY2ggKi8KIAotCQlzdGF0dXMgPSBhY3BpX3JlYWQoJnZhbHVlMSwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfY29udHJvbF9ibG9jayk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9tdWx0aXBsZSgmdmFsdWUsCisJCQkJCSAgICAgICAmYWNwaV9nYmxfRkFEVC4KKwkJCQkJICAgICAgIHhwbTFhX2NvbnRyb2xfYmxvY2ssCisJCQkJCSAgICAgICAmYWNwaV9nYmxfRkFEVC4KKwkJCQkJICAgICAgIHhwbTFiX2NvbnRyb2xfYmxvY2spOwogCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUyLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9jb250cm9sX2Jsb2NrKTsKLQkJdmFsdWUxIHw9IHZhbHVlMjsKKwkJLyoKKwkJICogWmVybyB0aGUgd3JpdGUtb25seSBiaXRzLiBGcm9tIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24sICJIYXJkd2FyZQorCQkgKiBXcml0ZS1Pbmx5IEJpdHMiOiAiVXBvbiByZWFkcyB0byByZWdpc3RlcnMgd2l0aCB3cml0ZS1vbmx5IGJpdHMsCisJCSAqIHNvZnR3YXJlIG1hc2tzIG91dCBhbGwgd3JpdGUtb25seSBiaXRzLiIKKwkJICovCisJCXZhbHVlICY9IH5BQ1BJX1BNMV9DT05UUk9MX1dSSVRFT05MWV9CSVRTOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTDoJLyogOC1iaXQgYWNjZXNzICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZTEsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNX1RJTUVSOgkvKiAzMi1iaXQgYWNjZXNzICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZTEsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1NNSV9DT01NQU5EX0JMT0NLOgkvKiA4LWJpdCBhY2Nlc3MgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc19yZWFkX3BvcnQoYWNwaV9nYmxfRkFEVC5zbWlfY29tbWFuZCwgJnZhbHVlMSwgOCk7CisJCSAgICBhY3BpX2h3X3JlYWRfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLCAmdmFsdWUsIDgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMDcsMTAgKzIzOCw4IEBACiAJCWJyZWFrOwogCX0KIAotICAgICAgZXhpdDoKLQogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWUxOworCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWU7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0yNTAsNTIgKzI3OSw0MiBAQAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfcmVnaXN0ZXJfd3JpdGUpOwogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTOgkvKiAxNi1iaXQgYWNjZXNzICovCisJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVM6CS8qIFBNMSBBL0I6IDE2LWJpdCBhY2Nlc3MgZWFjaCAqLworCQkvKgorCQkgKiBIYW5kbGUgdGhlICJpZ25vcmVkIiBiaXQgaW4gUE0xIFN0YXR1cy4gQWNjb3JkaW5nIHRvIHRoZSBBQ1BJCisJCSAqIHNwZWNpZmljYXRpb24sIGlnbm9yZWQgYml0cyBhcmUgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZy4KKwkJICogTm9ybWFsbHksIHRoaXMgd291bGQgbWVhbiBhIHJlYWQvbW9kaWZ5L3dyaXRlIHNlcXVlbmNlLiBIb3dldmVyLAorCQkgKiBwcmVzZXJ2aW5nIGEgYml0IGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgZGlmZmVyZW50LiBXcml0aW5nIGEKKwkJICogb25lIGNsZWFycyB0aGUgc3RhdHVzLCBhbmQgd3JpdGluZyBhIHplcm8gcHJlc2VydmVzIHRoZSBzdGF0dXMuCisJCSAqIFRoZXJlZm9yZSwgd2UgbXVzdCBhbHdheXMgd3JpdGUgemVybyB0byB0aGUgaWdub3JlZCBiaXQuCisJCSAqCisJCSAqIFRoaXMgYmVoYXZpb3IgaXMgY2xhcmlmaWVkIGluIHRoZSBBQ1BJIDQuMCBzcGVjaWZpY2F0aW9uLgorCQkgKi8KKwkJdmFsdWUgJj0gfkFDUElfUE0xX1NUQVRVU19QUkVTRVJWRURfQklUUzsKIAotCQkvKiBQZXJmb3JtIGEgcmVhZCBmaXJzdCB0byBwcmVzZXJ2ZSBjZXJ0YWluIGJpdHMgKHBlciBBQ1BJIHNwZWMpICovCi0KLQkJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl9yZWFkKEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywKLQkJCQkJICAgICAgICZyZWFkX3ZhbHVlKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQkvKiBJbnNlcnQgdGhlIGJpdHMgdG8gYmUgcHJlc2VydmVkICovCi0KLQkJQUNQSV9JTlNFUlRfQklUUyh2YWx1ZSwgQUNQSV9QTTFfU1RBVFVTX1BSRVNFUlZFRF9CSVRTLAotCQkJCSByZWFkX3ZhbHVlKTsKLQotCQkvKiBOb3cgd2UgY2FuIHdyaXRlIHRoZSBkYXRhICovCi0KLQkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2spOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfbXVsdGlwbGUodmFsdWUsCisJCQkJCQkmYWNwaV9nYmxfeHBtMWFfc3RhdHVzLAorCQkJCQkJJmFjcGlfZ2JsX3hwbTFiX3N0YXR1cyk7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9FTkFCTEU6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KKwljYXNlIEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRToJLyogUE0xIEEvQjogMTYtYml0IGFjY2VzcyAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsICZhY3BpX2dibF94cG0xYV9lbmFibGUpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfeHBtMWJfZW5hYmxlKTsKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9tdWx0aXBsZSh2YWx1ZSwKKwkJCQkJCSZhY3BpX2dibF94cG0xYV9lbmFibGUsCisJCQkJCQkmYWNwaV9nYmxfeHBtMWJfZW5hYmxlKTsKIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0w6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KKwljYXNlIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0w6CS8qIFBNMSBBL0I6IDE2LWJpdCBhY2Nlc3MgZWFjaCAqLwogCiAJCS8qCiAJCSAqIFBlcmZvcm0gYSByZWFkIGZpcnN0IHRvIHByZXNlcnZlIGNlcnRhaW4gYml0cyAocGVyIEFDUEkgc3BlYykKKwkJICogTm90ZTogVGhpcyBpbmNsdWRlcyBTQ0lfRU4sIHdlIG5ldmVyIHdhbnQgdG8gY2hhbmdlIHRoaXMgYml0CiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKLQkJCQkJICAgICAgICZyZWFkX3ZhbHVlKTsKKwkJc3RhdHVzID0gYWNwaV9od19yZWFkX211bHRpcGxlKCZyZWFkX3ZhbHVlLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCSAgICAgICB4cG0xYV9jb250cm9sX2Jsb2NrLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCSAgICAgICB4cG0xYl9jb250cm9sX2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KQEAgLTMwNywyNSArMzI2LDI5IEBACiAKIAkJLyogTm93IHdlIGNhbiB3cml0ZSB0aGUgZGF0YSAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsICZhY3BpX2dibF9GQURULnhwbTFhX2NvbnRyb2xfYmxvY2spOworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX211bHRpcGxlKHZhbHVlLAorCQkJCQkJJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCQl4cG0xYV9jb250cm9sX2Jsb2NrLAorCQkJCQkJJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCQl4cG0xYl9jb250cm9sX2Jsb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfUkVHSVNURVJfUE0yX0NPTlRST0w6CS8qIDgtYml0IGFjY2VzcyAqLworCisJCS8qCisJCSAqIEZvciBjb250cm9sIHJlZ2lzdGVycywgYWxsIHJlc2VydmVkIGJpdHMgbXVzdCBiZSBwcmVzZXJ2ZWQsCisJCSAqIGFzIHBlciB0aGUgQUNQSSBzcGVjLgorCQkgKi8KKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfcmVhZCgmcmVhZF92YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9jb250cm9sX2Jsb2NrKTsKLQkJYnJlYWs7CisJCS8qIEluc2VydCB0aGUgYml0cyB0byBiZSBwcmVzZXJ2ZWQgKi8KIAotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFBX0NPTlRST0w6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0xYV9jb250cm9sX2Jsb2NrKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfUkVHSVNURVJfUE0xQl9DT05UUk9MOgkvKiAxNi1iaXQgYWNjZXNzICovCi0KLQkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jayk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MOgkvKiA4LWJpdCBhY2Nlc3MgKi8KKwkJQUNQSV9JTlNFUlRfQklUUyh2YWx1ZSwgQUNQSV9QTTJfQ09OVFJPTF9QUkVTRVJWRURfQklUUywKKwkJCQkgcmVhZF92YWx1ZSk7CiAKIAkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKIAkJYnJlYWs7CkBAIC0zNDAsMTAgKzM2MywxMSBAQAogCQkvKiBTTUlfQ01EIGlzIGN1cnJlbnRseSBhbHdheXMgaW4gSU8gc3BhY2UgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc193cml0ZV9wb3J0KGFjcGlfZ2JsX0ZBRFQuc21pX2NvbW1hbmQsIHZhbHVlLCA4KTsKKwkJICAgIGFjcGlfaHdfd3JpdGVfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLCB2YWx1ZSwgOCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIlVua25vd24gUmVnaXN0ZXIgSUQ6ICVYIiwgcmVnaXN0ZXJfaWQpKTsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJYnJlYWs7CiAJfQpAQCAtMzUxLDMgKzM3NSwxMDMgQEAKICAgICAgIGV4aXQ6CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od19yZWFkX211bHRpcGxlCisgKgorICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBXaGVyZSB0aGUgcmVnaXN0ZXIgdmFsdWUgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICByZWdpc3Rlcl9hICAgICAgICAgICAtIEZpcnN0IEFDUEkgcmVnaXN0ZXIgKHJlcXVpcmVkKQorICogICAgICAgICAgICAgIHJlZ2lzdGVyX2IgICAgICAgICAgIC0gU2Vjb25kIEFDUEkgcmVnaXN0ZXIgKG9wdGlvbmFsKQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogUmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgdHdvLXBhcnQgQUNQSSByZWdpc3RlciAoc3VjaCBhcyBQTTEgQS9CKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9od19yZWFkX211bHRpcGxlKHUzMiAqdmFsdWUsCisJCSAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWdpc3Rlcl9iKQoreworCXUzMiB2YWx1ZV9hID0gMDsKKwl1MzIgdmFsdWVfYiA9IDA7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJLyogVGhlIGZpcnN0IHJlZ2lzdGVyIGlzIGFsd2F5cyByZXF1aXJlZCAqLworCisJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZV9hLCByZWdpc3Rlcl9hKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCS8qIFNlY29uZCByZWdpc3RlciBpcyBvcHRpb25hbCAqLworCisJaWYgKHJlZ2lzdGVyX2ItPmFkZHJlc3MpIHsKKwkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZV9iLCByZWdpc3Rlcl9iKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwl9CisKKwkvKgorCSAqIE9SIHRoZSB0d28gcmV0dXJuIHZhbHVlcyB0b2dldGhlci4gTm8gc2hpZnRpbmcgb3IgbWFza2luZyBpcyBuZWNlc3NhcnksCisJICogYmVjYXVzZSBvZiBob3cgdGhlIFBNMSByZWdpc3RlcnMgYXJlIGRlZmluZWQgaW4gdGhlIEFDUEkgc3BlY2lmaWNhdGlvbjoKKwkgKgorCSAqICJBbHRob3VnaCB0aGUgYml0cyBjYW4gYmUgc3BsaXQgYmV0d2VlbiB0aGUgdHdvIHJlZ2lzdGVyIGJsb2NrcyAoZWFjaAorCSAqIHJlZ2lzdGVyIGJsb2NrIGhhcyBhIHVuaXF1ZSBwb2ludGVyIHdpdGhpbiB0aGUgRkFEVCksIHRoZSBiaXQgcG9zaXRpb25zCisJICogYXJlIG1haW50YWluZWQuIFRoZSByZWdpc3RlciBibG9jayB3aXRoIHVuaW1wbGVtZW50ZWQgYml0cyAodGhhdCBpcywKKwkgKiB0aG9zZSBpbXBsZW1lbnRlZCBpbiB0aGUgb3RoZXIgcmVnaXN0ZXIgYmxvY2spIGFsd2F5cyByZXR1cm5zIHplcm9zLAorCSAqIGFuZCB3cml0ZXMgaGF2ZSBubyBzaWRlIGVmZmVjdHMiCisJICovCisJKnZhbHVlID0gKHZhbHVlX2EgfCB2YWx1ZV9iKTsKKwlyZXR1cm4gKEFFX09LKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X3dyaXRlX211bHRpcGxlCisgKgorICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBUaGUgdmFsdWUgdG8gd3JpdGUKKyAqICAgICAgICAgICAgICByZWdpc3Rlcl9hICAgICAgICAgICAtIEZpcnN0IEFDUEkgcmVnaXN0ZXIgKHJlcXVpcmVkKQorICogICAgICAgICAgICAgIHJlZ2lzdGVyX2IgICAgICAgICAgIC0gU2Vjb25kIEFDUEkgcmVnaXN0ZXIgKG9wdGlvbmFsKQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogV3JpdGUgdG8gdGhlIHNwZWNpZmllZCB0d28tcGFydCBBQ1BJIHJlZ2lzdGVyIChzdWNoIGFzIFBNMSBBL0IpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3dyaXRlX211bHRpcGxlKHUzMiB2YWx1ZSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwkvKiBUaGUgZmlyc3QgcmVnaXN0ZXIgaXMgYWx3YXlzIHJlcXVpcmVkICovCisKKwlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCByZWdpc3Rlcl9hKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCS8qCisJICogU2Vjb25kIHJlZ2lzdGVyIGlzIG9wdGlvbmFsCisJICoKKwkgKiBObyBiaXQgc2hpZnRpbmcgb3IgY2xlYXJpbmcgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIG9mIGhvdyB0aGUgUE0xCisJICogcmVnaXN0ZXJzIGFyZSBkZWZpbmVkIGluIHRoZSBBQ1BJIHNwZWNpZmljYXRpb246CisJICoKKwkgKiAiQWx0aG91Z2ggdGhlIGJpdHMgY2FuIGJlIHNwbGl0IGJldHdlZW4gdGhlIHR3byByZWdpc3RlciBibG9ja3MgKGVhY2gKKwkgKiByZWdpc3RlciBibG9jayBoYXMgYSB1bmlxdWUgcG9pbnRlciB3aXRoaW4gdGhlIEZBRFQpLCB0aGUgYml0IHBvc2l0aW9ucworCSAqIGFyZSBtYWludGFpbmVkLiBUaGUgcmVnaXN0ZXIgYmxvY2sgd2l0aCB1bmltcGxlbWVudGVkIGJpdHMgKHRoYXQgaXMsCisJICogdGhvc2UgaW1wbGVtZW50ZWQgaW4gdGhlIG90aGVyIHJlZ2lzdGVyIGJsb2NrKSBhbHdheXMgcmV0dXJucyB6ZXJvcywKKwkgKiBhbmQgd3JpdGVzIGhhdmUgbm8gc2lkZSBlZmZlY3RzIgorCSAqLworCWlmIChyZWdpc3Rlcl9iLT5hZGRyZXNzKSB7CisJCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsIHJlZ2lzdGVyX2IpOworCX0KKworCXJldHVybiAoc3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdzbGVlcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKaW5kZXggYTJhZjJhNC4uYmFhNWZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKQEAgLTkwLDYgKzkwLDcgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCiAKKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gNjQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3I2NApAQCAtMTAwLDcgKzEwMSw4IEBACiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IFNldHMgdGhlIDY0LWJpdCBYX2Zpcm13YXJlX3dha2luZ192ZWN0b3IgZmllbGQgb2YgdGhlIEZBQ1MsIGlmCi0gKiAgICAgICAgICAgICAgaXQgZXhpc3RzIGluIHRoZSB0YWJsZS4KKyAqICAgICAgICAgICAgICBpdCBleGlzdHMgaW4gdGhlIHRhYmxlLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aAorICogICAgICAgICAgICAgIDY0LWJpdCBob3N0IG9wZXJhdGluZyBzeXN0ZW1zLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwpAQCAtMTI0LDYgKzEyNiw3IEBACiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9maXJtd2FyZV93YWtpbmdfdmVjdG9yNjQpCisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNDcsOSArMTUwLDggQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwKTsKIAotCS8qCi0JICogX1BTVyBtZXRob2RzIGNvdWxkIGJlIHJ1biBoZXJlIHRvIGVuYWJsZSB3YWtlLW9uIGtleWJvYXJkLCBMQU4sIGV0Yy4KLQkgKi8KKwkvKiBfUFNXIG1ldGhvZHMgY291bGQgYmUgcnVuIGhlcmUgdG8gZW5hYmxlIHdha2Utb24ga2V5Ym9hcmQsIExBTiwgZXRjLiAqLworCiAJc3RhdHVzID0gYWNwaV9nZXRfc2xlZXBfdHlwZV9kYXRhKHNsZWVwX3N0YXRlLAogCQkJCQkgICZhY3BpX2dibF9zbGVlcF90eXBlX2EsCiAJCQkJCSAgJmFjcGlfZ2JsX3NsZWVwX3R5cGVfYik7CkBAIC0yMjMsOCArMjI1LDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cyBhc21saW5rYWdlIGFjcGlfZW50ZXJfc2xlZXBfc3RhdGUodTggc2xlZXBfc3RhdGUpCiB7Ci0JdTMyIFBNMUFjb250cm9sOwotCXUzMiBQTTFCY29udHJvbDsKKwl1MzIgcG0xYV9jb250cm9sOworCXUzMiBwbTFiX2NvbnRyb2w7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX3R5cGVfcmVnX2luZm87CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX2VuYWJsZV9yZWdfaW5mbzsKIAl1MzIgaW5fdmFsdWU7CkBAIC0yNDIsMTMgKzI0NCwxNCBAQAogCX0KIAogCXNsZWVwX3R5cGVfcmVnX2luZm8gPQotCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9UWVBFX0EpOworCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9UWVBFKTsKIAlzbGVlcF9lbmFibGVfcmVnX2luZm8gPQogCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9FTkFCTEUpOwogCiAJLyogQ2xlYXIgd2FrZSBzdGF0dXMgKi8KIAotCXN0YXR1cyA9IGFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLCAxKTsKKwlzdGF0dXMgPQorCSAgICBhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgQUNQSV9DTEVBUl9TVEFUVVMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0yODksMjQgKzI5MiwyNSBAQAogCiAJLyogR2V0IGN1cnJlbnQgdmFsdWUgb2YgUE0xQSBjb250cm9sICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwgJlBNMUFjb250cm9sKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKKwkJCQkgICAgICAgJnBtMWFfY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lOSVQsCiAJCQkgICJFbnRlcmluZyBzbGVlcCBzdGF0ZSBbUyVkXVxuIiwgc2xlZXBfc3RhdGUpKTsKIAotCS8qIENsZWFyIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KKwkvKiBDbGVhciB0aGUgU0xQX0VOIGFuZCBTTFBfVFlQIGZpZWxkcyAqLwogCi0JUE0xQWNvbnRyb2wgJj0gfihzbGVlcF90eXBlX3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2sgfAotCQkJIHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrKTsKLQlQTTFCY29udHJvbCA9IFBNMUFjb250cm9sOworCXBtMWFfY29udHJvbCAmPSB+KHNsZWVwX3R5cGVfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzayB8CisJCQkgIHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrKTsKKwlwbTFiX2NvbnRyb2wgPSBwbTFhX2NvbnRyb2w7CiAKLQkvKiBJbnNlcnQgU0xQX1RZUCBiaXRzICovCisJLyogSW5zZXJ0IHRoZSBTTFBfVFlQIGJpdHMgKi8KIAotCVBNMUFjb250cm9sIHw9CisJcG0xYV9jb250cm9sIHw9CiAJICAgIChhY3BpX2dibF9zbGVlcF90eXBlX2EgPDwgc2xlZXBfdHlwZV9yZWdfaW5mby0+Yml0X3Bvc2l0aW9uKTsKLQlQTTFCY29udHJvbCB8PQorCXBtMWJfY29udHJvbCB8PQogCSAgICAoYWNwaV9nYmxfc2xlZXBfdHlwZV9iIDw8IHNsZWVwX3R5cGVfcmVnX2luZm8tPmJpdF9wb3NpdGlvbik7CiAKIAkvKgpAQCAtMzE0LDM3ICszMTgsMjUgQEAKIAkgKiBwb29ybHkgaW1wbGVtZW50ZWQgaGFyZHdhcmUuCiAJICovCiAKLQkvKiBXcml0ZSAjMTogZmlsbCBpbiBTTFBfVFlQIGRhdGEgKi8KKwkvKiBXcml0ZSAjMTogd3JpdGUgdGhlIFNMUF9UWVAgZGF0YSB0byB0aGUgUE0xIENvbnRyb2wgcmVnaXN0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQV9DT05UUk9MLAotCQkJCQlQTTFBY29udHJvbCk7CisJc3RhdHVzID0gYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsIHBtMWJfY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFCX0NPTlRST0wsCi0JCQkJCVBNMUJjb250cm9sKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQorCS8qIEluc2VydCB0aGUgc2xlZXAgZW5hYmxlIChTTFBfRU4pIGJpdCAqLwogCi0JLyogSW5zZXJ0IFNMUF9FTkFCTEUgYml0ICovCisJcG0xYV9jb250cm9sIHw9IHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrOworCXBtMWJfY29udHJvbCB8PSBzbGVlcF9lbmFibGVfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzazsKIAotCVBNMUFjb250cm9sIHw9IHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrOwotCVBNMUJjb250cm9sIHw9IHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrOwotCi0JLyogV3JpdGUgIzI6IFNMUF9UWVAgKyBTTFBfRU4gKi8KKwkvKiBGbHVzaCBjYWNoZXMsIGFzIHBlciBBQ1BJIHNwZWNpZmljYXRpb24gKi8KIAogCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQV9DT05UUk9MLAotCQkJCQlQTTFBY29udHJvbCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KKwkvKiBXcml0ZSAjMjogV3JpdGUgYm90aCBTTFBfVFlQICsgU0xQX0VOICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQl9DT05UUk9MLAotCQkJCQlQTTFCY29udHJvbCk7CisJc3RhdHVzID0gYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsIHBtMWJfY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTM1Nyw4ICszNDksOCBAQAogCQkgKiBXYWl0IHRlbiBzZWNvbmRzLCB0aGVuIHRyeSBhZ2Fpbi4gVGhpcyBpcyB0byBnZXQgUzQvUzUgdG8gd29yayBvbgogCQkgKiBhbGwgbWFjaGluZXMuCiAJCSAqCi0JCSAqIFdlIHdhaXQgc28gbG9uZyB0byBhbGxvdyBjaGlwc2V0cyB0aGF0IHBvbGwgdGhpcyByZWcgdmVyeSBzbG93bHkgdG8KLQkJICogc3RpbGwgcmVhZCB0aGUgcmlnaHQgdmFsdWUuIElkZWFsbHksIHRoaXMgYmxvY2sgd291bGQgZ28KKwkJICogV2Ugd2FpdCBzbyBsb25nIHRvIGFsbG93IGNoaXBzZXRzIHRoYXQgcG9sbCB0aGlzIHJlZyB2ZXJ5IHNsb3dseQorCQkgKiB0byBzdGlsbCByZWFkIHRoZSByaWdodCB2YWx1ZS4gSWRlYWxseSwgdGhpcyBibG9jayB3b3VsZCBnbwogCQkgKiBhd2F5IGVudGlyZWx5LgogCQkgKi8KIAkJYWNwaV9vc19zdGFsbCgxMDAwMDAwMCk7CkBAIC0zNzQsNyArMzY2LDcgQEAKIAkvKiBXYWl0IHVudGlsIHdlIGVudGVyIHNsZWVwIHN0YXRlICovCiAKIAlkbyB7Ci0JCXN0YXR1cyA9IGFjcGlfZ2V0X3JlZ2lzdGVyX3VubG9ja2VkKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLAorCQlzdGF0dXMgPSBhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLAogCQkJCQkJICAgICZpbl92YWx1ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC00MDgsNyArNDAwLDEwIEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfczRiaW9zKTsKIAotCXN0YXR1cyA9IGFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLCAxKTsKKwkvKiBDbGVhciB0aGUgd2FrZSBzdGF0dXMgYml0IChQTTEpICovCisKKwlzdGF0dXMgPQorCSAgICBhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgQUNQSV9DTEVBUl9TVEFUVVMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC00MzUsMTIgKzQzMCwxMyBAQAogCiAJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKIAotCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLAorCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLAogCQkJCSAgICAodTMyKSBhY3BpX2dibF9GQURULlM0Ymlvc19yZXF1ZXN0LCA4KTsKIAogCWRvIHsKIAkJYWNwaV9vc19zdGFsbCgxMDAwKTsKLQkJc3RhdHVzID0gYWNwaV9nZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMsICZpbl92YWx1ZSk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLCAmaW5fdmFsdWUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQl9CkBAIC00NzEsOCArNDY3LDggQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX3R5cGVfcmVnX2luZm87CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX2VuYWJsZV9yZWdfaW5mbzsKLQl1MzIgUE0xQWNvbnRyb2w7Ci0JdTMyIFBNMUJjb250cm9sOworCXUzMiBwbTFhX2NvbnRyb2w7CisJdTMyIHBtMWJfY29udHJvbDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZV9wcmVwKTsKIApAQCAtNDg2LDM4ICs0ODIsMzQgQEAKIAkJCQkJICAmYWNwaV9nYmxfc2xlZXBfdHlwZV9iKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJc2xlZXBfdHlwZV9yZWdfaW5mbyA9Ci0JCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9UWVBFX0EpOworCQkgICAgYWNwaV9od19nZXRfYml0X3JlZ2lzdGVyX2luZm8oQUNQSV9CSVRSRUdfU0xFRVBfVFlQRSk7CiAJCXNsZWVwX2VuYWJsZV9yZWdfaW5mbyA9CiAJCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9FTkFCTEUpOwogCiAJCS8qIEdldCBjdXJyZW50IHZhbHVlIG9mIFBNMUEgY29udHJvbCAqLwogCiAJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAotCQkJCQkgICAgICAgJlBNMUFjb250cm9sKTsKKwkJCQkJICAgICAgICZwbTFhX2NvbnRyb2wpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAotCQkJLyogQ2xlYXIgU0xQX0VOIGFuZCBTTFBfVFlQIGZpZWxkcyAqLworCQkJLyogQ2xlYXIgdGhlIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KIAotCQkJUE0xQWNvbnRyb2wgJj0gfihzbGVlcF90eXBlX3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2sgfAotCQkJCQkgc2xlZXBfZW5hYmxlX3JlZ19pbmZvLT4KLQkJCQkJIGFjY2Vzc19iaXRfbWFzayk7Ci0JCQlQTTFCY29udHJvbCA9IFBNMUFjb250cm9sOworCQkJcG0xYV9jb250cm9sICY9IH4oc2xlZXBfdHlwZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrIHwKKwkJCQkJICBzbGVlcF9lbmFibGVfcmVnX2luZm8tPgorCQkJCQkgIGFjY2Vzc19iaXRfbWFzayk7CisJCQlwbTFiX2NvbnRyb2wgPSBwbTFhX2NvbnRyb2w7CiAKLQkJCS8qIEluc2VydCBTTFBfVFlQIGJpdHMgKi8KKwkJCS8qIEluc2VydCB0aGUgU0xQX1RZUCBiaXRzICovCiAKLQkJCVBNMUFjb250cm9sIHw9Ci0JCQkgICAgKGFjcGlfZ2JsX3NsZWVwX3R5cGVfYSA8PCBzbGVlcF90eXBlX3JlZ19pbmZvLT4KLQkJCSAgICAgYml0X3Bvc2l0aW9uKTsKLQkJCVBNMUJjb250cm9sIHw9Ci0JCQkgICAgKGFjcGlfZ2JsX3NsZWVwX3R5cGVfYiA8PCBzbGVlcF90eXBlX3JlZ19pbmZvLT4KLQkJCSAgICAgYml0X3Bvc2l0aW9uKTsKKwkJCXBtMWFfY29udHJvbCB8PSAoYWNwaV9nYmxfc2xlZXBfdHlwZV9hIDw8CisJCQkJCSBzbGVlcF90eXBlX3JlZ19pbmZvLT5iaXRfcG9zaXRpb24pOworCQkJcG0xYl9jb250cm9sIHw9IChhY3BpX2dibF9zbGVlcF90eXBlX2IgPDwKKwkJCQkJIHNsZWVwX3R5cGVfcmVnX2luZm8tPmJpdF9wb3NpdGlvbik7CiAKLQkJCS8qIEp1c3QgaWdub3JlIGFueSBlcnJvcnMgKi8KKwkJCS8qIFdyaXRlIHRoZSBjb250cm9sIHJlZ2lzdGVycyBhbmQgaWdub3JlIGFueSBlcnJvcnMgKi8KIAotCQkJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMUFfQ09OVFJPTCwKLQkJCQkJCSAgICAgUE0xQWNvbnRyb2wpOwotCQkJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMUJfQ09OVFJPTCwKLQkJCQkJCSAgICAgUE0xQmNvbnRyb2wpOworCQkJKHZvaWQpYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsCisJCQkJCQkJcG0xYl9jb250cm9sKTsKIAkJfQogCX0KIApAQCAtNjAzLDE5ICs1OTUsMjEgQEAKIAkgKiBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3lzdGVtIGlzIHJlYm9vdGluZyBvciByZXN1bWluZy4gQ2xlYXIKIAkgKiBpdCBmb3IgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgMSk7CisJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMsIDEpOwogCiAJYWNwaV9nYmxfc3lzdGVtX2F3YWtlX2FuZF9ydW5uaW5nID0gVFJVRTsKIAogCS8qIEVuYWJsZSBwb3dlciBidXR0b24gKi8KIAogCSh2b2lkKQotCSAgICBhY3BpX3NldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvCi0JCQkgICAgICBbQUNQSV9FVkVOVF9QT1dFUl9CVVRUT05dLmVuYWJsZV9yZWdpc3Rlcl9pZCwgMSk7CisJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm8KKwkJCSAgICAgIFtBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTl0uCisJCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsIEFDUElfRU5BQkxFX0VWRU5UKTsKIAogCSh2b2lkKQotCSAgICBhY3BpX3NldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvCi0JCQkgICAgICBbQUNQSV9FVkVOVF9QT1dFUl9CVVRUT05dLnN0YXR1c19yZWdpc3Rlcl9pZCwgMSk7CisJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm8KKwkJCSAgICAgIFtBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTl0uCisJCQkgICAgICBzdGF0dXNfcmVnaXN0ZXJfaWQsIEFDUElfQ0xFQVJfU1RBVFVTKTsKIAogCWFyZy5pbnRlZ2VyLnZhbHVlID0gQUNQSV9TU1RfV09SS0lORzsKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLCBNRVRIT0RfTkFNRV9fU1NULCAmYXJnX2xpc3QsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dmFsaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNjOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKQEAgLTAsMCArMSwyNTggQEAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBOYW1lOiBod3ZhbGlkIC0gSS9PIHJlcXVlc3QgdmFsaWRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgImFjY29tbW9uLmgiCisKKyNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0hBUkRXQVJFCitBQ1BJX01PRFVMRV9OQU1FKCJod3ZhbGlkIikKKworLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QoYWNwaV9pb19hZGRyZXNzIGFkZHJlc3MsIHUzMiBiaXRfd2lkdGgpOworCisvKgorICogUHJvdGVjdGVkIEkvTyBwb3J0cy4gU29tZSBwb3J0cyBhcmUgYWx3YXlzIGlsbGVnYWwsIGFuZCBzb21lIGFyZQorICogY29uZGl0aW9uYWxseSBpbGxlZ2FsLiBUaGlzIHRhYmxlIG11c3QgcmVtYWluIG9yZGVyZWQgYnkgcG9ydCBhZGRyZXNzLgorICoKKyAqIFRoZSB0YWJsZSBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgTWljcm9zb2Z0IHBvcnQgYWNjZXNzIHJ1bGVzIHRoYXQKKyAqIGZpcnN0IGFwcGVhcmVkIGluIFdpbmRvd3MgWFAuIFNvbWUgcG9ydHMgYXJlIGFsd2F5cyBpbGxlZ2FsLCBhbmQgc29tZQorICogcG9ydHMgYXJlIG9ubHkgaWxsZWdhbCBpZiB0aGUgQklPUyBjYWxscyBfT1NJIHdpdGggYSB3aW5feFAgc3RyaW5nIG9yCisgKiBsYXRlciAobWVhbmluZyB0aGF0IHRoZSBCSU9TIGl0ZWxmIGlzIHBvc3QtWFAuKQorICoKKyAqIFRoaXMgcHJvdmlkZXMgQUNQSUNBIHdpdGggdGhlIGRlc2lyZWQgcG9ydCBwcm90ZWN0aW9ucyBhbmQKKyAqIE1pY3Jvc29mdCBjb21wYXRpYmlsaXR5LgorICoKKyAqIERlc2NyaXB0aW9uIG9mIHBvcnQgZW50cmllczoKKyAqICBETUE6ICAgRE1BIGNvbnRyb2xsZXIKKyAqICBQSUMwOiAgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyICg4MjU5X2EpCisgKiAgUElUMTogIFN5c3RlbSBUaW1lciAxCisgKiAgUElUMjogIFN5c3RlbSBUaW1lciAyIGZhaWxzYWZlCisgKiAgUlRDOiAgIFJlYWwtdGltZSBjbG9jaworICogIENNT1M6ICBFeHRlbmRlZCBDTU9TCisgKiAgRE1BMTogIERNQSAxIHBhZ2UgcmVnaXN0ZXJzCisgKiAgRE1BMUw6IERNQSAxIENoIDAgbG93IHBhZ2UKKyAqICBETUEyOiAgRE1BIDIgcGFnZSByZWdpc3RlcnMKKyAqICBETUEyTDogRE1BIDIgbG93IHBhZ2UgcmVmcmVzaAorICogIEFSQkM6ICBBcmJpdHJhdGlvbiBjb250cm9sCisgKiAgU0VUVVA6IFJlc2VydmVkIHN5c3RlbSBib2FyZCBzZXR1cAorICogIFBPUzogICBQT1MgY2hhbm5lbCBzZWxlY3QKKyAqICBQSUMxOiAgQ2FzY2FkZWQgUElDCisgKiAgSURNQTogIElTQSBETUEKKyAqICBFTENSOiAgUElDIGVkZ2UvbGV2ZWwgcmVnaXN0ZXJzCisgKiAgUENJOiAgIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9wb3J0X2luZm8gYWNwaV9wcm90ZWN0ZWRfcG9ydHNbXSA9IHsKKwl7IkRNQSIsIDB4MDAwMCwgMHgwMDBGLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiUElDMCIsIDB4MDAyMCwgMHgwMDIxLCBBQ1BJX0FMV0FZU19JTExFR0FMfSwKKwl7IlBJVDEiLCAweDAwNDAsIDB4MDA0MywgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IlBJVDIiLCAweDAwNDgsIDB4MDA0QiwgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IlJUQyIsIDB4MDA3MCwgMHgwMDcxLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiQ01PUyIsIDB4MDA3NCwgMHgwMDc2LCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiRE1BMSIsIDB4MDA4MSwgMHgwMDgzLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiRE1BMUwiLCAweDAwODcsIDB4MDA4NywgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IkRNQTIiLCAweDAwODksIDB4MDA4QiwgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IkRNQTJMIiwgMHgwMDhGLCAweDAwOEYsIEFDUElfT1NJX1dJTl9YUH0sCisJeyJBUkJDIiwgMHgwMDkwLCAweDAwOTEsIEFDUElfT1NJX1dJTl9YUH0sCisJeyJTRVRVUCIsIDB4MDA5MywgMHgwMDk0LCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiUE9TIiwgMHgwMDk2LCAweDAwOTcsIEFDUElfT1NJX1dJTl9YUH0sCisJeyJQSUMxIiwgMHgwMEEwLCAweDAwQTEsIEFDUElfQUxXQVlTX0lMTEVHQUx9LAorCXsiSURNQSIsIDB4MDBDMCwgMHgwMERGLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiRUxDUiIsIDB4MDREMCwgMHgwNEQxLCBBQ1BJX0FMV0FZU19JTExFR0FMfSwKKwl7IlBDSSIsIDB4MENGOCwgMHgwQ0ZGLCBBQ1BJX09TSV9XSU5fWFB9Cit9OworCisjZGVmaW5lIEFDUElfUE9SVF9JTkZPX0VOVFJJRVMgIEFDUElfQVJSQVlfTEVOR1RIIChhY3BpX3Byb3RlY3RlZF9wb3J0cykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QKKyAqCisgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICBBZGRyZXNzIG9mIEkvTyBwb3J0L3JlZ2lzdGVyCisgKiAgICAgICAgICAgICAgYml0X3dpZHRoICAgICAgICAgICBOdW1iZXIgb2YgYml0cyAoOCwxNiwzMikKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFZhbGlkYXRlcyBhbiBJL08gcmVxdWVzdCAoYWRkcmVzcy9sZW5ndGgpLiBDZXJ0YWluIHBvcnRzIGFyZQorICogICAgICAgICAgICAgIGFsd2F5cyBpbGxlZ2FsIGFuZCBzb21lIHBvcnRzIGFyZSBvbmx5IGlsbGVnYWwgZGVwZW5kaW5nIG9uCisgKiAgICAgICAgICAgICAgdGhlIHJlcXVlc3RzIHRoZSBCSU9TIEFNTCBjb2RlIG1ha2VzIHRvIHRoZSBwcmVkZWZpbmVkCisgKiAgICAgICAgICAgICAgX09TSSBtZXRob2QuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QoYWNwaV9pb19hZGRyZXNzIGFkZHJlc3MsIHUzMiBiaXRfd2lkdGgpCit7CisJdTMyIGk7CisJdTMyIGJ5dGVfd2lkdGg7CisJYWNwaV9pb19hZGRyZXNzIGxhc3RfYWRkcmVzczsKKwljb25zdCBzdHJ1Y3QgYWNwaV9wb3J0X2luZm8gKnBvcnRfaW5mbzsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfdmFsaWRhdGVfaW9fcmVxdWVzdCk7CisKKwkvKiBTdXBwb3J0ZWQgd2lkdGhzIGFyZSA4LzE2LzMyICovCisKKwlpZiAoKGJpdF93aWR0aCAhPSA4KSAmJiAoYml0X3dpZHRoICE9IDE2KSAmJiAoYml0X3dpZHRoICE9IDMyKSkgeworCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKKwl9CisKKwlwb3J0X2luZm8gPSBhY3BpX3Byb3RlY3RlZF9wb3J0czsKKwlieXRlX3dpZHRoID0gQUNQSV9ESVZfOChiaXRfd2lkdGgpOworCWxhc3RfYWRkcmVzcyA9IGFkZHJlc3MgKyBieXRlX3dpZHRoIC0gMTsKKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sICJBZGRyZXNzICVwIExhc3RBZGRyZXNzICVwIExlbmd0aCAlWCIsCisJCQkgIEFDUElfQ0FTVF9QVFIodm9pZCwgYWRkcmVzcyksIEFDUElfQ0FTVF9QVFIodm9pZCwKKwkJCQkJCQkJICAgICAgbGFzdF9hZGRyZXNzKSwKKwkJCSAgYnl0ZV93aWR0aCkpOworCisJLyogTWF4aW11bSAxNi1iaXQgYWRkcmVzcyBpbiBJL08gc3BhY2UgKi8KKworCWlmIChsYXN0X2FkZHJlc3MgPiBBQ1BJX1VJTlQxNl9NQVgpIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCSAgICAiSWxsZWdhbCBJL08gcG9ydCBhZGRyZXNzL2xlbmd0aCBhYm92ZSA2NEs6IDB4JXAvJVgiLAorCQkJICAgIEFDUElfQ0FTVF9QVFIodm9pZCwgYWRkcmVzcyksIGJ5dGVfd2lkdGgpKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTExFR0FMX0FERFJFU1MpOworCX0KKworCS8qIEV4aXQgaWYgcmVxdWVzdGVkIGFkZHJlc3MgaXMgbm90IHdpdGhpbiB0aGUgcHJvdGVjdGVkIHBvcnQgdGFibGUgKi8KKworCWlmIChhZGRyZXNzID4gYWNwaV9wcm90ZWN0ZWRfcG9ydHNbQUNQSV9QT1JUX0lORk9fRU5UUklFUyAtIDFdLmVuZCkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCX0KKworCS8qIENoZWNrIHJlcXVlc3QgYWdhaW5zdCB0aGUgbGlzdCBvZiBwcm90ZWN0ZWQgSS9PIHBvcnRzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9QT1JUX0lORk9fRU5UUklFUzsgaSsrLCBwb3J0X2luZm8rKykgeworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIGFkZHJlc3MgcmFuZ2Ugd2lsbCB3cml0ZSB0byBhIHJlc2VydmVkCisJCSAqIHBvcnQuIEZvdXIgY2FzZXMgdG8gY29uc2lkZXI6CisJCSAqCisJCSAqIDEpIEFkZHJlc3MgcmFuZ2UgaXMgY29udGFpbmVkIGNvbXBsZXRlbHkgaW4gdGhlIHBvcnQgYWRkcmVzcyByYW5nZQorCQkgKiAyKSBBZGRyZXNzIHJhbmdlIG92ZXJsYXBzIHBvcnQgcmFuZ2UgYXQgdGhlIHBvcnQgcmFuZ2Ugc3RhcnQKKwkJICogMykgQWRkcmVzcyByYW5nZSBvdmVybGFwcyBwb3J0IHJhbmdlIGF0IHRoZSBwb3J0IHJhbmdlIGVuZAorCQkgKiA0KSBBZGRyZXNzIHJhbmdlIGNvbXBsZXRlbHkgZW5jb21wYXNzZXMgdGhlIHBvcnQgcmFuZ2UKKwkJICovCisJCWlmICgoYWRkcmVzcyA8PSBwb3J0X2luZm8tPmVuZCkKKwkJICAgICYmIChsYXN0X2FkZHJlc3MgPj0gcG9ydF9pbmZvLT5zdGFydCkpIHsKKworCQkJLyogUG9ydCBpbGxlZ2FsaXR5IG1heSBkZXBlbmQgb24gdGhlIF9PU0kgY2FsbHMgbWFkZSBieSB0aGUgQklPUyAqLworCisJCQlpZiAoYWNwaV9nYmxfb3NpX2RhdGEgPj0gcG9ydF9pbmZvLT5vc2lfZGVwZW5kZW5jeSkgeworCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJCSAgICAiRGVuaWVkIEFNTCBhY2Nlc3MgdG8gcG9ydCAweCVwLyVYICglcyAweCUuNFgtMHglLjRYKSIsCisJCQkJCSAgICBBQ1BJX0NBU1RfUFRSKHZvaWQsIGFkZHJlc3MpLAorCQkJCQkgICAgYnl0ZV93aWR0aCwgcG9ydF9pbmZvLT5uYW1lLAorCQkJCQkgICAgcG9ydF9pbmZvLT5zdGFydCwgcG9ydF9pbmZvLT5lbmQpKTsKKworCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfSUxMRUdBTF9BRERSRVNTKTsKKwkJCX0KKwkJfQorCisJCS8qIEZpbmlzaGVkIGlmIGFkZHJlc3MgcmFuZ2UgZW5kcyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIHBvcnQgKi8KKworCQlpZiAobGFzdF9hZGRyZXNzIDw9IHBvcnRfaW5mby0+ZW5kKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od19yZWFkX3BvcnQKKyAqCisgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICBBZGRyZXNzIG9mIEkvTyBwb3J0L3JlZ2lzdGVyIHRvIHJlYWQKKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIFdoZXJlIHZhbHVlIGlzIHBsYWNlZAorICogICAgICAgICAgICAgIFdpZHRoICAgICAgICAgICAgICAgTnVtYmVyIG9mIGJpdHMKKyAqCisgKiBSRVRVUk46ICAgICAgVmFsdWUgcmVhZCBmcm9tIHBvcnQKKyAqCisgKiBERVNDUklQVElPTjogUmVhZCBkYXRhIGZyb20gYW4gSS9PIHBvcnQgb3IgcmVnaXN0ZXIuIFRoaXMgaXMgYSBmcm9udC1lbmQKKyAqICAgICAgICAgICAgICB0byBhY3BpX29zX3JlYWRfcG9ydCB0aGF0IHBlcmZvcm1zIHZhbGlkYXRpb24gb24gYm90aCB0aGUgcG9ydAorICogICAgICAgICAgICAgIGFkZHJlc3MgYW5kIHRoZSBsZW5ndGguCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX2h3X3JlYWRfcG9ydChhY3BpX2lvX2FkZHJlc3MgYWRkcmVzcywgdTMyICp2YWx1ZSwgdTMyIHdpZHRoKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfaHdfdmFsaWRhdGVfaW9fcmVxdWVzdChhZGRyZXNzLCB3aWR0aCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gYWNwaV9vc19yZWFkX3BvcnQoYWRkcmVzcywgdmFsdWUsIHdpZHRoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfaHdfd3JpdGVfcG9ydAorICoKKyAqIFBBUkFNRVRFUlM6ICBBZGRyZXNzICAgICAgICAgICAgIEFkZHJlc3Mgb2YgSS9PIHBvcnQvcmVnaXN0ZXIgdG8gd3JpdGUKKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIFZhbHVlIHRvIHdyaXRlCisgKiAgICAgICAgICAgICAgV2lkdGggICAgICAgICAgICAgICBOdW1iZXIgb2YgYml0cworICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IFdyaXRlIGRhdGEgdG8gYW4gSS9PIHBvcnQgb3IgcmVnaXN0ZXIuIFRoaXMgaXMgYSBmcm9udC1lbmQKKyAqICAgICAgICAgICAgICB0byBhY3BpX29zX3dyaXRlX3BvcnQgdGhhdCBwZXJmb3JtcyB2YWxpZGF0aW9uIG9uIGJvdGggdGhlIHBvcnQKKyAqICAgICAgICAgICAgICBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV9od193cml0ZV9wb3J0KGFjcGlfaW9fYWRkcmVzcyBhZGRyZXNzLCB1MzIgdmFsdWUsIHUzMiB3aWR0aCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QoYWRkcmVzcywgd2lkdGgpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfcG9ydChhZGRyZXNzLCB2YWx1ZSwgd2lkdGgpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCmluZGV4IGFlNTk3YzAuLjk4Mjk5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCkBAIC0xMDcsMTkgKzEwNywxOCBAQAogCUFDUElfRlVOQ1RJT05fTkFNRShhY3BpX3JlYWQpOwogCiAJLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kCi0JICogYSBub24temVybyBhZGRyZXNzIHdpdGhpbi4gSG93ZXZlciwgZG9uJ3QgcmV0dXJuIGFuIGVycm9yCi0JICogYmVjYXVzZSB0aGUgUE0xQS9CIGNvZGUgbXVzdCBub3QgZmFpbCBpZiBCIGlzbid0IHByZXNlbnQuCisJICogTXVzdCBoYXZlIGEgdmFsaWQgcG9pbnRlciB0byBhIEdBUyBzdHJ1Y3R1cmUsIGFuZCBhIG5vbi16ZXJvIGFkZHJlc3MKKwkgKiB3aXRoaW4uCiAJICovCiAJaWYgKCFyZWcpIHsKLQkJcmV0dXJuIChBRV9PSyk7CisJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJLyogR2V0IGEgbG9jYWwgY29weSBvZiB0aGUgYWRkcmVzcy4gSGFuZGxlcyBwb3NzaWJsZSBhbGlnbm1lbnQgaXNzdWVzICovCiAKIAlBQ1BJX01PVkVfNjRfVE9fNjQoJmFkZHJlc3MsICZyZWctPmFkZHJlc3MpOwogCWlmICghYWRkcmVzcykgewotCQlyZXR1cm4gKEFFX09LKTsKKwkJcmV0dXJuIChBRV9CQURfQUREUkVTUyk7CiAJfQogCiAJLyogU3VwcG9ydGVkIHdpZHRocyBhcmUgOC8xNi8zMiAqLwpAQCAtMTM0LDggKzEzMyw4IEBACiAJKnZhbHVlID0gMDsKIAogCS8qCi0JICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLgotCSAqIFBDSV9Db25maWcgaXMgbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3QgaXMgaW5zdWZmaWNpZW50CisJICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLiBQQ0lfQ29uZmlnIGlzCisJICogbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3R1cmUgaXMgaW5zdWZmaWNpZW50CiAJICovCiAJc3dpdGNoIChyZWctPnNwYWNlX2lkKSB7CiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZOgpAQCAtMTQ3LDcgKzE0Niw3IEBACiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU86CiAKIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfb3NfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsIHZhbHVlLCB3aWR0aCk7CisJCSAgICBhY3BpX2h3X3JlYWRfcG9ydCgoYWNwaV9pb19hZGRyZXNzKSBhZGRyZXNzLCB2YWx1ZSwgd2lkdGgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xODcsMTkgKzE4NiwxOCBAQAogCUFDUElfRlVOQ1RJT05fTkFNRShhY3BpX3dyaXRlKTsKIAogCS8qCi0JICogTXVzdCBoYXZlIGEgdmFsaWQgcG9pbnRlciB0byBhIEdBUyBzdHJ1Y3R1cmUsIGFuZAotCSAqIGEgbm9uLXplcm8gYWRkcmVzcyB3aXRoaW4uIEhvd2V2ZXIsIGRvbid0IHJldHVybiBhbiBlcnJvcgotCSAqIGJlY2F1c2UgdGhlIFBNMUEvQiBjb2RlIG11c3Qgbm90IGZhaWwgaWYgQiBpc24ndCBwcmVzZW50LgorCSAqIE11c3QgaGF2ZSBhIHZhbGlkIHBvaW50ZXIgdG8gYSBHQVMgc3RydWN0dXJlLCBhbmQgYSBub24temVybyBhZGRyZXNzCisJICogd2l0aGluLgogCSAqLwogCWlmICghcmVnKSB7Ci0JCXJldHVybiAoQUVfT0spOworCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAogCS8qIEdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3MuIEhhbmRsZXMgcG9zc2libGUgYWxpZ25tZW50IGlzc3VlcyAqLwogCiAJQUNQSV9NT1ZFXzY0X1RPXzY0KCZhZGRyZXNzLCAmcmVnLT5hZGRyZXNzKTsKIAlpZiAoIWFkZHJlc3MpIHsKLQkJcmV0dXJuIChBRV9PSyk7CisJCXJldHVybiAoQUVfQkFEX0FERFJFU1MpOwogCX0KIAogCS8qIFN1cHBvcnRlZCB3aWR0aHMgYXJlIDgvMTYvMzIgKi8KQEAgLTIyMiw3ICsyMjAsNyBAQAogCiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU86CiAKLQkJc3RhdHVzID0gYWNwaV9vc193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsIHZhbHVlLAorCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgYWRkcmVzcywgdmFsdWUsCiAJCQkJCSAgICB3aWR0aCk7CiAJCWJyZWFrOwogCkBAIC0yNDQsMjQgKzI0MiwzNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZAorICogRlVOQ1RJT046ICAgIGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIKICAqCi0gKiBQQVJBTUVURVJTOiAgcmVnaXN0ZXJfaWQgICAgIC0gSUQgb2YgQUNQSSBiaXRfcmVnaXN0ZXIgdG8gYWNjZXNzCi0gKiAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICAgIC0gVmFsdWUgdGhhdCB3YXMgcmVhZCBmcm9tIHRoZSByZWdpc3RlcgorICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAtIElEIG9mIEFDUEkgQml0IFJlZ2lzdGVyIHRvIGFjY2VzcworICogICAgICAgICAgICAgIHJldHVybl92YWx1ZSAgICAtIFZhbHVlIHRoYXQgd2FzIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCB0byBiaXQgcG9zaXRpb24gemVyby4KICAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCB0aGUgdmFsdWUgcmVhZCBmcm9tIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKKyAqIFJFVFVSTjogICAgICBTdGF0dXMgYW5kIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKICAqICAgICAgICAgICAgICByZXR1cm5lZCBpcyBub3JtYWxpemVkIHRvIGJpdDAgKGlzIHNoaWZ0ZWQgYWxsIHRoZSB3YXkgcmlnaHQpCiAgKgogICogREVTQ1JJUFRJT046IEFDUEkgYml0X3JlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uIERvZXMgbm90IGFjcXVpcmUgdGhlIEhXIGxvY2suCiAgKgorICogU1VQUE9SVFM6ICAgIEJpdCBmaWVsZHMgaW4gUE0xIFN0YXR1cywgUE0xIEVuYWJsZSwgUE0xIENvbnRyb2wsIGFuZAorICogICAgICAgICAgICAgIFBNMiBDb250cm9sLgorICoKKyAqIE5vdGU6IFRoZSBoYXJkd2FyZSBsb2NrIGlzIG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgdGhlIEFDUEkgYml0IHJlZ2lzdGVycworICogICAgICAgc2luY2UgYWxtb3N0IGFsbCBvZiB0aGVtIGFyZSBzaW5nbGUgYml0IGFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdAorICogICAgICAgdGhlIHBhcmVudCBoYXJkd2FyZSByZWdpc3RlciBjYW4gYmUgc3BsaXQgYWNyb3NzIHR3byBwaHlzaWNhbAorICogICAgICAgcmVnaXN0ZXJzLiBUaGUgb25seSBtdWx0aS1iaXQgZmllbGQgaXMgU0xQX1RZUCBpbiB0aGUgUE0xIGNvbnRyb2wKKyAqICAgICAgIHJlZ2lzdGVyLCBidXQgdGhpcyBmaWVsZCBkb2VzIG5vdCBjcm9zcyBhbiA4LWJpdCBib3VuZGFyeSAobm9yIGRvZXMKKyAqICAgICAgIGl0IG1ha2UgbXVjaCBzZW5zZSB0byBhY3R1YWxseSByZWFkIHRoaXMgZmllbGQuKQorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKQorYWNwaV9zdGF0dXMgYWNwaV9yZWFkX2JpdF9yZWdpc3Rlcih1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKQogewotCXUzMiByZWdpc3Rlcl92YWx1ZSA9IDA7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKmJpdF9yZWdfaW5mbzsKKwl1MzIgcmVnaXN0ZXJfdmFsdWU7CisJdTMyIHZhbHVlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfcmVnaXN0ZXJfdW5sb2NrZWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIsIHJlZ2lzdGVyX2lkKTsKIAogCS8qIEdldCB0aGUgaW5mbyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIEFDUEkgUmVnaXN0ZXIgKi8KIApAQCAtMjcwLDIwOSArMjgwLDEzMyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogUmVhZCBmcm9tIHRoZSByZWdpc3RlciAqLworCS8qIFJlYWQgdGhlIGVudGlyZSBwYXJlbnQgcmVnaXN0ZXIgKi8KIAogCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciwKIAkJCQkgICAgICAgJnJlZ2lzdGVyX3ZhbHVlKTsKLQotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCi0JCS8qIE5vcm1hbGl6ZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCAqLwotCi0JCXJlZ2lzdGVyX3ZhbHVlID0KLQkJICAgICgocmVnaXN0ZXJfdmFsdWUgJiBiaXRfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzaykKLQkJICAgICA+PiBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbik7Ci0KLQkJKnJldHVybl92YWx1ZSA9IHJlZ2lzdGVyX3ZhbHVlOwotCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sICJSZWFkIHZhbHVlICU4LjhYIHJlZ2lzdGVyICVYXG4iLAotCQkJCSAgcmVnaXN0ZXJfdmFsdWUsCi0JCQkJICBiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlcikpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkvKiBOb3JtYWxpemUgdGhlIHZhbHVlIHRoYXQgd2FzIHJlYWQsIG1hc2sgb2ZmIG90aGVyIGJpdHMgKi8KKworCXZhbHVlID0gKChyZWdpc3Rlcl92YWx1ZSAmIGJpdF9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrKQorCQkgPj4gYml0X3JlZ19pbmZvLT5iaXRfcG9zaXRpb24pOworCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKKwkJCSAgIkJpdFJlZyAlWCwgUGFyZW50UmVnICVYLCBBY3R1YWwgJTguOFgsIFJldHVyblZhbHVlICU4LjhYXG4iLAorCQkJICByZWdpc3Rlcl9pZCwgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCisJCQkgIHJlZ2lzdGVyX3ZhbHVlLCB2YWx1ZSkpOworCisJKnJldHVybl92YWx1ZSA9IHZhbHVlOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZCkKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9yZWdpc3RlcgorICogRlVOQ1RJT046ICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyCiAgKgotICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAtIElEIG9mIEFDUEkgYml0X3JlZ2lzdGVyIHRvIGFjY2VzcwotICogICAgICAgICAgICAgIHJldHVybl92YWx1ZSAgICAtIFZhbHVlIHRoYXQgd2FzIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCB0aGUgdmFsdWUgcmVhZCBmcm9tIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKLSAqICAgICAgICAgICAgICByZXR1cm5lZCBpcyBub3JtYWxpemVkIHRvIGJpdDAgKGlzIHNoaWZ0ZWQgYWxsIHRoZSB3YXkgcmlnaHQpCi0gKgotICogREVTQ1JJUFRJT046IEFDUEkgYml0X3JlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfZ2V0X3JlZ2lzdGVyKHUzMiByZWdpc3Rlcl9pZCwgdTMyICpyZXR1cm5fdmFsdWUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwotCi0JZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKLQlzdGF0dXMgPSBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZChyZWdpc3Rlcl9pZCwgcmV0dXJuX3ZhbHVlKTsKLQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9yZWdpc3RlcikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9zZXRfcmVnaXN0ZXIKLSAqCi0gKiBQQVJBTUVURVJTOiAgcmVnaXN0ZXJfaWQgICAgIC0gSUQgb2YgQUNQSSBiaXRfcmVnaXN0ZXIgdG8gYWNjZXNzCi0gKiAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgIC0gKG9ubHkgdXNlZCBvbiB3cml0ZSkgdmFsdWUgdG8gd3JpdGUgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIsIE5PVCBwcmUtbm9ybWFsaXplZCB0byB0aGUgYml0IHBvcworICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAtIElEIG9mIEFDUEkgQml0IFJlZ2lzdGVyIHRvIGFjY2VzcworICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAtIFZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlciwgaW4gYml0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gemVyby4gVGhlIGJpdCBpcyBhdXRvbWF0aWNhbGxseQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24uCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBBQ1BJIEJpdCBSZWdpc3RlciB3cml0ZSBmdW5jdGlvbi4KKyAqIERFU0NSSVBUSU9OOiBBQ1BJIEJpdCBSZWdpc3RlciB3cml0ZSBmdW5jdGlvbi4gQWNxdWlyZXMgdGhlIGhhcmR3YXJlIGxvY2sKKyAqICAgICAgICAgICAgICBzaW5jZSBtb3N0IG9wZXJhdGlvbnMgcmVxdWlyZSBhIHJlYWQvbW9kaWZ5L3dyaXRlIHNlcXVlbmNlLgorICoKKyAqIFNVUFBPUlRTOiAgICBCaXQgZmllbGRzIGluIFBNMSBTdGF0dXMsIFBNMSBFbmFibGUsIFBNMSBDb250cm9sLCBhbmQKKyAqICAgICAgICAgICAgICBQTTIgQ29udHJvbC4KKyAqCisgKiBOb3RlIHRoYXQgYXQgdGhpcyBsZXZlbCwgdGhlIGZhY3QgdGhhdCB0aGVyZSBtYXkgYmUgYWN0dWFsbHkgdHdvCisgKiBoYXJkd2FyZSByZWdpc3RlcnMgKEEgYW5kIEIgLSBhbmQgQiBtYXkgbm90IGV4aXN0KSBpcyBhYnN0cmFjdGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9yZWdpc3Rlcih1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSkKK2FjcGlfc3RhdHVzIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKHUzMiByZWdpc3Rlcl9pZCwgdTMyIHZhbHVlKQogewotCXUzMiByZWdpc3Rlcl92YWx1ZSA9IDA7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKmJpdF9yZWdfaW5mbzsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9jcHVfZmxhZ3MgbG9ja19mbGFnczsKKwl1MzIgcmVnaXN0ZXJfdmFsdWU7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMihhY3BpX3NldF9yZWdpc3RlciwgcmVnaXN0ZXJfaWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyLCByZWdpc3Rlcl9pZCk7CiAKIAkvKiBHZXQgdGhlIGluZm8gc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlcXVlc3RlZCBBQ1BJIFJlZ2lzdGVyICovCiAKIAliaXRfcmVnX2luZm8gPSBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhyZWdpc3Rlcl9pZCk7CiAJaWYgKCFiaXRfcmVnX2luZm8pIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkJhZCBBQ1BJIEhXIFJlZ2lzdGVySWQ6ICVYIiwKLQkJCSAgICByZWdpc3Rlcl9pZCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCi0JLyogQWx3YXlzIGRvIGEgcmVnaXN0ZXIgcmVhZCBmaXJzdCBzbyB3ZSBjYW4gaW5zZXJ0IHRoZSBuZXcgYml0cyAgKi8KLQotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciwKLQkJCQkgICAgICAgJnJlZ2lzdGVyX3ZhbHVlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCiAJLyoKLQkgKiBEZWNvZGUgdGhlIFJlZ2lzdGVyIElECi0JICogUmVnaXN0ZXIgSUQgPSBbUmVnaXN0ZXIgYmxvY2sgSURdIHwgW2JpdCBJRF0KLQkgKgotCSAqIENoZWNrIGJpdCBJRCB0byBmaW5lIGxvY2F0ZSBSZWdpc3RlciBvZmZzZXQuCi0JICogQ2hlY2sgTWFzayB0byBkZXRlcm1pbmUgUmVnaXN0ZXIgb2Zmc2V0LCBhbmQgdGhlbiByZWFkLXdyaXRlLgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgcGFyZW50IHJlZ2lzdGVyIGlzIG9uZSBvZiB0aGUKKwkgKiBmb2xsb3dpbmc6IFBNMSBTdGF0dXMsIFBNMSBFbmFibGUsIFBNMSBDb250cm9sLCBvciBQTTIgQ29udHJvbAogCSAqLwotCXN3aXRjaCAoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIpIHsKLQljYXNlIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUzoKLQorCWlmIChiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciAhPSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMpIHsKIAkJLyoKLQkJICogU3RhdHVzIFJlZ2lzdGVycyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHJlc3QuIENsZWFyIGJ5Ci0JCSAqIHdyaXRpbmcgMSwgYW5kIHdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LiBTbywgdGhlIG9ubHkgcmVsZXZhbnQKLQkJICogaW5mb3JtYXRpb24gaXMgdGhlIHNpbmdsZSBiaXQgd2UncmUgaW50ZXJlc3RlZCBpbiwgYWxsIG90aGVycyBzaG91bGQKLQkJICogYmUgd3JpdHRlbiBhcyAwIHNvIHRoZXkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4KKwkJICogMSkgQ2FzZSBmb3IgUE0xIEVuYWJsZSwgUE0xIENvbnRyb2wsIGFuZCBQTTIgQ29udHJvbAorCQkgKgorCQkgKiBQZXJmb3JtIGEgcmVnaXN0ZXIgcmVhZCB0byBwcmVzZXJ2ZSB0aGUgYml0cyB0aGF0IHdlIGFyZSBub3QKKwkJICogaW50ZXJlc3RlZCBpbgogCQkgKi8KLQkJdmFsdWUgPSBBQ1BJX1JFR0lTVEVSX1BSRVBBUkVfQklUUyh2YWx1ZSwKLQkJCQkJCSAgIGJpdF9yZWdfaW5mby0+Yml0X3Bvc2l0aW9uLAotCQkJCQkJICAgYml0X3JlZ19pbmZvLT4KLQkJCQkJCSAgIGFjY2Vzc19iaXRfbWFzayk7Ci0JCWlmICh2YWx1ZSkgewotCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywKLQkJCQkJCSAgICh1MTYpIHZhbHVlKTsKLQkJCXJlZ2lzdGVyX3ZhbHVlID0gMDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfRU5BQkxFOgotCi0JCUFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZ2lzdGVyX3ZhbHVlLAotCQkJCQkgICBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbiwKLQkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCi0JCQkJCSAgIHZhbHVlKTsKLQotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwKLQkJCQkJCSh1MTYpIHJlZ2lzdGVyX3ZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0w6Ci0KLQkJLyoKLQkJICogV3JpdGUgdGhlIFBNMSBDb250cm9sIHJlZ2lzdGVyLgotCQkgKiBOb3RlIHRoYXQgYXQgdGhpcyBsZXZlbCwgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgYWN0dWFsbHkgVFdPCi0JCSAqIHJlZ2lzdGVycyAoQSBhbmQgQiAtIGFuZCBCIG1heSBub3QgZXhpc3QpIGlzIGFic3RyYWN0ZWQuCi0JCSAqLwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLCAiUE0xIGNvbnRyb2w6IFJlYWQgJVhcbiIsCi0JCQkJICByZWdpc3Rlcl92YWx1ZSkpOwotCi0JCUFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZ2lzdGVyX3ZhbHVlLAotCQkJCQkgICBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbiwKLQkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCi0JCQkJCSAgIHZhbHVlKTsKLQotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCi0JCQkJCQkodTE2KSByZWdpc3Rlcl92YWx1ZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MOgotCi0JCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MLAorCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCiAJCQkJCSAgICAgICAmcmVnaXN0ZXJfdmFsdWUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQl9CiAKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKLQkJCQkgICJQTTIgY29udHJvbDogUmVhZCAlWCBmcm9tICU4LjhYJTguOFhcbiIsCi0JCQkJICByZWdpc3Rlcl92YWx1ZSwKLQkJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChhY3BpX2dibF9GQURULgotCQkJCQkJICAgICB4cG0yX2NvbnRyb2xfYmxvY2suCi0JCQkJCQkgICAgIGFkZHJlc3MpKSk7Ci0KKwkJLyoKKwkJICogSW5zZXJ0IHRoZSBpbnB1dCBiaXQgaW50byB0aGUgdmFsdWUgdGhhdCB3YXMganVzdCByZWFkCisJCSAqIGFuZCB3cml0ZSB0aGUgcmVnaXN0ZXIKKwkJICovCiAJCUFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZ2lzdGVyX3ZhbHVlLAogCQkJCQkgICBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbiwKIAkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCiAJCQkJCSAgIHZhbHVlKTsKIAotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLAotCQkJCSAgIkFib3V0IHRvIHdyaXRlICU0LjRYIHRvICU4LjhYJTguOFhcbiIsCi0JCQkJICByZWdpc3Rlcl92YWx1ZSwKLQkJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChhY3BpX2dibF9GQURULgotCQkJCQkJICAgICB4cG0yX2NvbnRyb2xfYmxvY2suCi0JCQkJCQkgICAgIGFkZHJlc3MpKSk7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCisJCQkJCQlyZWdpc3Rlcl92YWx1ZSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogMikgQ2FzZSBmb3IgUE0xIFN0YXR1cworCQkgKgorCQkgKiBUaGUgU3RhdHVzIHJlZ2lzdGVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0LiBDbGVhciBhbiBldmVudAorCQkgKiBieSB3cml0aW5nIDEsIHdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LiBTbywgdGhlIG9ubHkgcmVsZXZhbnQKKwkJICogaW5mb3JtYXRpb24gaXMgdGhlIHNpbmdsZSBiaXQgd2UncmUgaW50ZXJlc3RlZCBpbiwgYWxsIG90aGVycworCQkgKiBzaG91bGQgYmUgd3JpdHRlbiBhcyAwIHNvIHRoZXkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4KKwkJICovCisJCXJlZ2lzdGVyX3ZhbHVlID0gQUNQSV9SRUdJU1RFUl9QUkVQQVJFX0JJVFModmFsdWUsCisJCQkJCQkJICAgIGJpdF9yZWdfaW5mby0+CisJCQkJCQkJICAgIGJpdF9wb3NpdGlvbiwKKwkJCQkJCQkgICAgYml0X3JlZ19pbmZvLT4KKwkJCQkJCQkgICAgYWNjZXNzX2JpdF9tYXNrKTsKIAotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0yX0NPTlRST0wsCi0JCQkJCQkodTgpIChyZWdpc3Rlcl92YWx1ZSkpOwotCQlicmVhazsKKwkJLyogTm8gbmVlZCB0byB3cml0ZSB0aGUgcmVnaXN0ZXIgaWYgdmFsdWUgaXMgYWxsIHplcm9zICovCiAKLQlkZWZhdWx0OgotCQlicmVhazsKKwkJaWYgKHJlZ2lzdGVyX3ZhbHVlKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLAorCQkJCQkJICAgcmVnaXN0ZXJfdmFsdWUpOworCQl9CiAJfQogCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6CisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKKwkJCSAgIkJpdFJlZyAlWCwgUGFyZW50UmVnICVYLCBWYWx1ZSAlOC44WCwgQWN0dWFsICU4LjhYXG4iLAorCQkJICByZWdpc3Rlcl9pZCwgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsIHZhbHVlLAorCQkJICByZWdpc3Rlcl92YWx1ZSkpOworCit1bmxvY2tfYW5kX2V4aXQ6CiAKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBsb2NrX2ZsYWdzKTsKLQotCS8qIE5vcm1hbGl6ZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCAqLwotCi0JQUNQSV9ERUJVR19FWEVDKHJlZ2lzdGVyX3ZhbHVlID0KLQkJCSgocmVnaXN0ZXJfdmFsdWUgJiBiaXRfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzaykgPj4KLQkJCSBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbikpOwotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKLQkJCSAgIlNldCBiaXRzOiAlOC44WCBhY3R1YWwgJTguOFggcmVnaXN0ZXIgJVhcbiIsIHZhbHVlLAotCQkJICByZWdpc3Rlcl92YWx1ZSwgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIpKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X3JlZ2lzdGVyKQorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTUzNCw3ICs0NjgsNyBAQAogCiAJLyogSXQgbXVzdCBiZSBvZiB0eXBlIFBhY2thZ2UgKi8KIAotCWVsc2UgaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJZWxzZSBpZiAoaW5mby0+cmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIG9iamVjdCBpcyBub3QgYSBQYWNrYWdlIikpOwogCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtNTU1LDEyICs0ODksMTMgQEAKIAogCS8qIFRoZSBmaXJzdCB0d28gZWxlbWVudHMgbXVzdCBib3RoIGJlIG9mIHR5cGUgSW50ZWdlciAqLwogCi0JZWxzZSBpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMF0pCisJZWxzZSBpZiAoKChpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+Y29tbW9uLnR5cGUKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikgfHwKLQkJIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzFdKQorCQkgKChpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzFdKS0+Y29tbW9uLnR5cGUKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZWxlbWVudHMgYXJlIG5vdCBib3RoIEludGVnZXJzICglcywgJXMpIiwKKwkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZWxlbWVudHMgYXJlIG5vdCBib3RoIEludGVnZXJzICIKKwkJCSAgICAiKCVzLCAlcykiLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdC0+CiAJCQkJCQkJIHBhY2thZ2UuZWxlbWVudHNbMF0pLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdC0+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKaW5kZXggODgzMDNlYi4uOWMzY2RiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYwpAQCAtMTE4LDkgKzExOCw4IEBACiAJCX0KIAogCQkvKgotCQkgKiBOYW1lIGVudGVyZWQgc3VjY2Vzc2Z1bGx5LgotCQkgKiBJZiBlbnRyeSBpbiBwcmVfZGVmaW5lZF9uYW1lc1tdIHNwZWNpZmllcyBhbgotCQkgKiBpbml0aWFsIHZhbHVlLCBjcmVhdGUgdGhlIGluaXRpYWwgdmFsdWUuCisJCSAqIE5hbWUgZW50ZXJlZCBzdWNjZXNzZnVsbHkuIElmIGVudHJ5IGluIHByZV9kZWZpbmVkX25hbWVzW10gc3BlY2lmaWVzCisJCSAqIGFuIGluaXRpYWwgdmFsdWUsIGNyZWF0ZSB0aGUgaW5pdGlhbCB2YWx1ZS4KIAkJICovCiAJCWlmIChpbml0X3ZhbC0+dmFsKSB7CiAJCQlzdGF0dXMgPSBhY3BpX29zX3ByZWRlZmluZWRfb3ZlcnJpZGUoaW5pdF92YWwsICZ2YWwpOwpAQCAtMTc4LDkgKzE3Nyw4IEBACiAKIAkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAotCQkJCS8qCi0JCQkJICogQnVpbGQgYW4gb2JqZWN0IGFyb3VuZCB0aGUgc3RhdGljIHN0cmluZwotCQkJCSAqLworCQkJCS8qIEJ1aWxkIGFuIG9iamVjdCBhcm91bmQgdGhlIHN0YXRpYyBzdHJpbmcgKi8KKwogCQkJCW9ial9kZXNjLT5zdHJpbmcubGVuZ3RoID0KIAkJCQkgICAgKHUzMikgQUNQSV9TVFJMRU4odmFsKTsKIAkJCQlvYmpfZGVzYy0+c3RyaW5nLnBvaW50ZXIgPSB2YWw7CkBAIC0yMzQsOCArMjMyLDcgQEAKIAkJCS8qIFN0b3JlIHBvaW50ZXIgdG8gdmFsdWUgZGVzY3JpcHRvciBpbiB0aGUgTm9kZSAqLwogCiAJCQlzdGF0dXMgPSBhY3BpX25zX2F0dGFjaF9vYmplY3QobmV3X25vZGUsIG9ial9kZXNjLAotCQkJCQkJICAgICAgIEFDUElfR0VUX09CSkVDVF9UWVBFCi0JCQkJCQkgICAgICAgKG9ial9kZXNjKSk7CisJCQkJCQkgICAgICAgb2JqX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAogCQkJLyogUmVtb3ZlIGxvY2FsIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCiAKQEAgLTMxNSwxMCArMzEyLDggQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX05BTUVTUEFDRSk7CiAJfQogCi0JLyoKLQkgKiBHZXQgdGhlIHByZWZpeCBzY29wZS4KLQkgKiBBIG51bGwgc2NvcGUgbWVhbnMgdXNlIHRoZSByb290IHNjb3BlCi0JICovCisJLyogR2V0IHRoZSBwcmVmaXggc2NvcGUuIEEgbnVsbCBzY29wZSBtZWFucyB1c2UgdGhlIHJvb3Qgc2NvcGUgKi8KKwogCWlmICgoIXNjb3BlX2luZm8pIHx8ICghc2NvcGVfaW5mby0+c2NvcGUubm9kZSkpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKIAkJCQkgICJOdWxsIHNjb3BlIHByZWZpeCwgdXNpbmcgcm9vdCBub2RlICglcClcbiIsCkBAIC0zMzgsOCArMzMzLDggQEAKIAkJaWYgKCEoZmxhZ3MgJiBBQ1BJX05TX1BSRUZJWF9JU19TQ09QRSkpIHsKIAkJCS8qCiAJCQkgKiBUaGlzIG5vZGUgbWlnaHQgbm90IGJlIGEgYWN0dWFsICJzY29wZSIgbm9kZSAoc3VjaCBhcyBhCi0JCQkgKiBEZXZpY2UvTWV0aG9kLCBldGMuKSAgSXQgY291bGQgYmUgYSBQYWNrYWdlIG9yIG90aGVyIG9iamVjdCBub2RlLgotCQkJICogQmFja3VwIHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGNvbnRhaW5pbmcgc2NvcGUgbm9kZS4KKwkJCSAqIERldmljZS9NZXRob2QsIGV0Yy4pICBJdCBjb3VsZCBiZSBhIFBhY2thZ2Ugb3Igb3RoZXIgb2JqZWN0CisJCQkgKiBub2RlLiBCYWNrdXAgdXAgdGhlIHRyZWUgdG8gZmluZCB0aGUgY29udGFpbmluZyBzY29wZSBub2RlLgogCQkJICovCiAJCQl3aGlsZSAoIWFjcGlfbnNfb3BlbnNfc2NvcGUocHJlZml4X25vZGUtPnR5cGUpICYmCiAJCQkgICAgICAgcHJlZml4X25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0FOWSkgewpAQCAtMzQ5LDcgKzM0NCw3IEBACiAJCX0KIAl9CiAKLQkvKiBTYXZlIHR5cGUgICBUQkQ6IG1heSBiZSBubyBsb25nZXIgbmVjZXNzYXJ5ICovCisJLyogU2F2ZSB0eXBlLiBUQkQ6IG1heSBiZSBubyBsb25nZXIgbmVjZXNzYXJ5ICovCiAKIAl0eXBlX3RvX2NoZWNrX2ZvciA9IHR5cGU7CiAKQEAgLTQxNCw2ICs0MDksNyBAQAogCQkJCS8qIE5hbWUgaXMgZnVsbHkgcXVhbGlmaWVkLCBubyBzZWFyY2ggcnVsZXMgYXBwbHkgKi8KIAogCQkJCXNlYXJjaF9wYXJlbnRfZmxhZyA9IEFDUElfTlNfTk9fVVBTRUFSQ0g7CisKIAkJCQkvKgogCQkJCSAqIFBvaW50IHBhc3QgdGhpcyBwcmVmaXggdG8gdGhlIG5hbWUgc2VnbWVudAogCQkJCSAqIHBhcnQgb3IgdGhlIG5leHQgUGFyZW50IFByZWZpeApAQCAtNDI5LDcgKzQyNSw4IEBACiAJCQkJCS8qIEN1cnJlbnQgc2NvcGUgaGFzIG5vIHBhcmVudCBzY29wZSAqLwogCiAJCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCQkgICAgIkFDUEkgcGF0aCBoYXMgdG9vIG1hbnkgcGFyZW50IHByZWZpeGVzICheKSAtIHJlYWNoZWQgYmV5b25kIHJvb3Qgbm9kZSIpKTsKKwkJCQkJCSAgICAiQUNQSSBwYXRoIGhhcyB0b28gbWFueSBwYXJlbnQgcHJlZml4ZXMgKF4pICIKKwkJCQkJCSAgICAiLSByZWFjaGVkIGJleW9uZCByb290IG5vZGUiKSk7CiAJCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT1RfRk9VTkQpOwogCQkJCX0KIAkJCX0KQEAgLTUzMSw5ICs1MjgsOSBAQAogCXdoaWxlIChudW1fc2VnbWVudHMgJiYgY3VycmVudF9ub2RlKSB7CiAJCW51bV9zZWdtZW50cy0tOwogCQlpZiAoIW51bV9zZWdtZW50cykgewotCQkJLyoKLQkJCSAqIFRoaXMgaXMgdGhlIGxhc3Qgc2VnbWVudCwgZW5hYmxlIHR5cGVjaGVja2luZwotCQkJICovCisKKwkJCS8qIFRoaXMgaXMgdGhlIGxhc3Qgc2VnbWVudCwgZW5hYmxlIHR5cGVjaGVja2luZyAqLworCiAJCQl0aGlzX3NlYXJjaF90eXBlID0gdHlwZTsKIAogCQkJLyoKQEAgLTU4NCw5ICs1ODEsOSBAQAogCQlpZiAobnVtX3NlZ21lbnRzID4gMCkgewogCQkJLyoKIAkJCSAqIElmIHdlIGhhdmUgYW4gYWxpYXMgdG8gYW4gb2JqZWN0IHRoYXQgb3BlbnMgYSBzY29wZSAoc3VjaCBhcyBhCi0JCQkgKiBkZXZpY2Ugb3IgcHJvY2Vzc29yKSwgd2UgbmVlZCB0byBkZXJlZmVyZW5jZSB0aGUgYWxpYXMgaGVyZSBzbyB0aGF0Ci0JCQkgKiB3ZSBjYW4gYWNjZXNzIGFueSBjaGlsZHJlbiBvZiB0aGUgb3JpZ2luYWwgbm9kZSAodmlhIHRoZSByZW1haW5pbmcKLQkJCSAqIHNlZ21lbnRzKS4KKwkJCSAqIGRldmljZSBvciBwcm9jZXNzb3IpLCB3ZSBuZWVkIHRvIGRlcmVmZXJlbmNlIHRoZSBhbGlhcyBoZXJlIHNvCisJCQkgKiB0aGF0IHdlIGNhbiBhY2Nlc3MgYW55IGNoaWxkcmVuIG9mIHRoZSBvcmlnaW5hbCBub2RlICh2aWEgdGhlCisJCQkgKiByZW1haW5pbmcgc2VnbWVudHMpLgogCQkJICovCiAJCQlpZiAodGhpc19ub2RlLT50eXBlID09IEFDUElfVFlQRV9MT0NBTF9BTElBUykgewogCQkJCWlmICghdGhpc19ub2RlLT5vYmplY3QpIHsKQEAgLTU5NCw4ICs1OTEsOCBAQAogCQkJCX0KIAogCQkJCWlmIChhY3BpX25zX29wZW5zX3Njb3BlCi0JCQkJICAgICgoKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICopdGhpc19ub2RlLT4KLQkJCQkgICAgICBvYmplY3QpLT50eXBlKSkgeworCQkJCSAgICAoKChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKQorCQkJCSAgICAgIHRoaXNfbm9kZS0+b2JqZWN0KS0+dHlwZSkpIHsKIAkJCQkJdGhpc19ub2RlID0KIAkJCQkJICAgIChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKQogCQkJCQkgICAgdGhpc19ub2RlLT5vYmplY3Q7CkBAIC02MzksOCArNjM2LDggQEAKIAogCQkJLyoKIAkJCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgbmFtZSBzZWdtZW50IGFuZCB3ZSBhcmUgbm90IGxvb2tpbmcgZm9yIGEKLQkJCSAqIHNwZWNpZmljIHR5cGUsIGJ1dCB0aGUgdHlwZSBvZiBmb3VuZCBvYmplY3QgaXMga25vd24sIHVzZSB0aGF0IHR5cGUKLQkJCSAqIHRvIChsYXRlcikgc2VlIGlmIGl0IG9wZW5zIGEgc2NvcGUuCisJCQkgKiBzcGVjaWZpYyB0eXBlLCBidXQgdGhlIHR5cGUgb2YgZm91bmQgb2JqZWN0IGlzIGtub3duLCB1c2UgdGhhdAorCQkJICogdHlwZSB0byAobGF0ZXIpIHNlZSBpZiBpdCBvcGVucyBhIHNjb3BlLgogCQkJICovCiAJCQlpZiAodHlwZSA9PSBBQ1BJX1RZUEVfQU5ZKSB7CiAJCQkJdHlwZSA9IHRoaXNfbm9kZS0+dHlwZTsKQEAgLTY1Myw5ICs2NTAsOCBAQAogCQljdXJyZW50X25vZGUgPSB0aGlzX25vZGU7CiAJfQogCi0JLyoKLQkgKiBBbHdheXMgY2hlY2sgaWYgd2UgbmVlZCB0byBvcGVuIGEgbmV3IHNjb3BlCi0JICovCisJLyogQWx3YXlzIGNoZWNrIGlmIHdlIG5lZWQgdG8gb3BlbiBhIG5ldyBzY29wZSAqLworCiAJaWYgKCEoZmxhZ3MgJiBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSkgJiYgKHdhbGtfc3RhdGUpKSB7CiAJCS8qCiAJCSAqIElmIGVudHJ5IGlzIGEgdHlwZSB3aGljaCBvcGVucyBhIHNjb3BlLCBwdXNoIHRoZSBuZXcgc2NvcGUgb24gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCmluZGV4IGY5NzZkODQuLmFjZWI5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCkBAIC03Niw4ICs3Niw3IEBACiAJQUNQSV9NRU1fVFJBQ0tJTkcoYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9hbGxvY2F0ZWQrKyk7CiAKICNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwotCXRlbXAgPQotCSAgICBhY3BpX2dibF9uc19ub2RlX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCAtCisJdGVtcCA9IGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfYWxsb2NhdGVkIC0KIAkgICAgYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9mcmVlZDsKIAlpZiAodGVtcCA+IGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+bWF4X29jY3VwaWVkKSB7CiAJCWFjcGlfZ2JsX25zX25vZGVfbGlzdC0+bWF4X29jY3VwaWVkID0gdGVtcDsKQEAgLTE0NSw5ICsxNDQsOCBAQAogCiAJQUNQSV9NRU1fVFJBQ0tJTkcoYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9mcmVlZCsrKTsKIAotCS8qCi0JICogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUsIHRoZW4gZGVsZXRlIHRoZSBub2RlCi0JICovCisJLyogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUsIHRoZW4gZGVsZXRlIHRoZSBub2RlICovCisKIAlhY3BpX25zX2RldGFjaF9vYmplY3Qobm9kZSk7CiAJKHZvaWQpYWNwaV9vc19yZWxlYXNlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUsIG5vZGUpOwogCXJldHVybl9WT0lEOwpAQCAtMTgzLDkgKzE4MSw4IEBACiAJQUNQSV9GVU5DVElPTl9UUkFDRShuc19pbnN0YWxsX25vZGUpOwogCiAJLyoKLQkgKiBHZXQgdGhlIG93bmVyIElEIGZyb20gdGhlIFdhbGsgc3RhdGUKLQkgKiBUaGUgb3duZXIgSUQgaXMgdXNlZCB0byB0cmFjayB0YWJsZSBkZWxldGlvbiBhbmQKLQkgKiBkZWxldGlvbiBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgbWV0aG9kcworCSAqIEdldCB0aGUgb3duZXIgSUQgZnJvbSB0aGUgV2FsayBzdGF0ZS4gVGhlIG93bmVyIElEIGlzIHVzZWQgdG8gdHJhY2sKKwkgKiB0YWJsZSBkZWxldGlvbiBhbmQgZGVsZXRpb24gb2Ygb2JqZWN0cyBjcmVhdGVkIGJ5IG1ldGhvZHMuCiAJICovCiAJaWYgKHdhbGtfc3RhdGUpIHsKIAkJb3duZXJfaWQgPSB3YWxrX3N0YXRlLT5vd25lcl9pZDsKQEAgLTI2MCw5ICsyNTcsOCBAQAogCQlyZXR1cm5fVk9JRDsKIAl9CiAKLQkvKgotCSAqIERlYWxsb2NhdGUgYWxsIGNoaWxkcmVuIGF0IHRoaXMgbGV2ZWwKLQkgKi8KKwkvKiBEZWFsbG9jYXRlIGFsbCBjaGlsZHJlbiBhdCB0aGlzIGxldmVsICovCisKIAlkbyB7CiAKIAkJLyogR2V0IHRoZSB0aGluZ3Mgd2UgbmVlZCAqLwpAQCAtMjg1LDkgKzI4MSw4IEBACiAJCQkJICAiT2JqZWN0ICVwLCBSZW1haW5pbmcgJVhcbiIsIGNoaWxkX25vZGUsCiAJCQkJICBhY3BpX2dibF9jdXJyZW50X25vZGVfY291bnQpKTsKIAotCQkvKgotCQkgKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBmcmVlIHRoZSBjaGlsZCBub2RlCi0JCSAqLworCQkvKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBmcmVlIHRoZSBjaGlsZCBub2RlICovCisKIAkJYWNwaV9uc19kZXRhY2hfb2JqZWN0KGNoaWxkX25vZGUpOwogCiAJCS8qIE5vdyB3ZSBjYW4gZGVsZXRlIHRoZSBub2RlICovCkBAIC0zMDQsNyArMjk5LDYgQEAKIAkvKiBDbGVhciB0aGUgcGFyZW50J3MgY2hpbGQgcG9pbnRlciAqLwogCiAJcGFyZW50X25vZGUtPmNoaWxkID0gTlVMTDsKLQogCXJldHVybl9WT0lEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYwppbmRleCAwZGEzM2M4Li4yYmFkNjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKQEAgLTE4MSw2ICsxODEsMTIgQEAKIAl9CiAKIAl0aGlzX25vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShvYmpfaGFuZGxlKTsKKwlpZiAoIXRoaXNfbm9kZSkgeworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJJbnZhbGlkIG9iamVjdCBoYW5kbGUgJXBcbiIsCisJCQkJICBvYmpfaGFuZGxlKSk7CisJCXJldHVybiAoQUVfT0spOworCX0KKwogCXR5cGUgPSB0aGlzX25vZGUtPnR5cGU7CiAKIAkvKiBDaGVjayBpZiB0aGUgb3duZXIgbWF0Y2hlcyAqLwpAQCAtMjE0LDkgKzIyMCw4IEBACiAJCWFjcGlfb3NfcHJpbnRmKCIlNC40cyIsIGFjcGlfdXRfZ2V0X25vZGVfbmFtZSh0aGlzX25vZGUpKTsKIAl9CiAKLQkvKgotCSAqIE5vdyB3ZSBjYW4gcHJpbnQgb3V0IHRoZSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24KLQkgKi8KKwkvKiBOb3cgd2UgY2FuIHByaW50IG91dCB0aGUgcGVydGluZW50IGluZm9ybWF0aW9uICovCisKIAlhY3BpX29zX3ByaW50ZigiICUtMTJzICVwICUyLjJYICIsCiAJCSAgICAgICBhY3BpX3V0X2dldF90eXBlX25hbWUodHlwZSksIHRoaXNfbm9kZSwKIAkJICAgICAgIHRoaXNfbm9kZS0+b3duZXJfaWQpOwpAQCAtNTA5LDcgKzUxNCw3IEBACiAKIAkJY2FzZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EOgogCi0JCQlvYmpfdHlwZSA9IEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKTsKKwkJCW9ial90eXBlID0gb2JqX2Rlc2MtPmNvbW1vbi50eXBlOwogCiAJCQlpZiAob2JqX3R5cGUgPiBBQ1BJX1RZUEVfTE9DQUxfTUFYKSB7CiAJCQkJYWNwaV9vc19wcmludGYKQEAgLTUzOSw5ICs1NDQsOCBAQAogCQkJZ290byBjbGVhbnVwOwogCQl9CiAKLQkJLyoKLQkJICogVmFsaWQgb2JqZWN0LCBnZXQgdGhlIHBvaW50ZXIgdG8gbmV4dCBsZXZlbCwgaWYgYW55Ci0JCSAqLworCQkvKiBWYWxpZCBvYmplY3QsIGdldCB0aGUgcG9pbnRlciB0byBuZXh0IGxldmVsLCBpZiBhbnkgKi8KKwogCQlzd2l0Y2ggKG9ial90eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKIAkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgpAQCAtNjAyLDE0ICs2MDYsMTQgQEAKICAqICAgICAgICAgICAgICBkaXNwbGF5X3R5cGUgICAgICAgIC0gMCBvciBBQ1BJX0RJU1BMQVlfU1VNTUFSWQogICogICAgICAgICAgICAgIG1heF9kZXB0aCAgICAgICAgICAgLSBNYXhpbXVtIGRlcHRoIG9mIGR1bXAuIFVzZSBBQ1BJX1VJTlQzMl9NQVgKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGVmZmVjdGl2ZWx5IHVubGltaXRlZCBkZXB0aC4KLSAqICAgICAgICAgICAgICBvd25lcl9pZCAgICAgICAgICAgIC0gRHVtcCBvbmx5IG9iamVjdHMgb3duZWQgYnkgdGhpcyBJRC4gIFVzZQorICogICAgICAgICAgICAgIG93bmVyX2lkICAgICAgICAgICAgLSBEdW1wIG9ubHkgb2JqZWN0cyBvd25lZCBieSB0aGlzIElELiBVc2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMzJfTUFYIHRvIG1hdGNoIGFsbCBvd25lcnMuCiAgKiAgICAgICAgICAgICAgc3RhcnRfaGFuZGxlICAgICAgICAtIFdoZXJlIGluIG5hbWVzcGFjZSB0byBzdGFydC9lbmQgc2VhcmNoCiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogRHVtcCB0eXBlZCBvYmplY3RzIHdpdGhpbiB0aGUgbG9hZGVkIG5hbWVzcGFjZS4KLSAqICAgICAgICAgICAgICBVc2VzIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UgaW4gY29uanVuY3Rpb24gd2l0aCBhY3BpX25zX2R1bXBfb25lX29iamVjdC4KKyAqIERFU0NSSVBUSU9OOiBEdW1wIHR5cGVkIG9iamVjdHMgd2l0aGluIHRoZSBsb2FkZWQgbmFtZXNwYWNlLiBVc2VzCisgKiAgICAgICAgICAgICAgYWNwaV9uc193YWxrX25hbWVzcGFjZSBpbiBjb25qdW5jdGlvbiB3aXRoIGFjcGlfbnNfZHVtcF9vbmVfb2JqZWN0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IDBmM2Q1ZjkuLjhlN2RlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCX0KIAogCi0JCUFDUElfRFVNUF9QQVRITkFNRShpbmZvLT5yZXNvbHZlZF9ub2RlLCAiRXhlY3V0ZSBNZXRob2Q6IiwKKwkJQUNQSV9EVU1QX1BBVEhOQU1FKGluZm8tPnJlc29sdmVkX25vZGUsICJBQ1BJOiBFeGVjdXRlIE1ldGhvZCIsCiAJCQkJICAgQUNQSV9MVl9JTkZPLCBfQ09NUE9ORU5UKTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwppbmRleCAxMzUwMWNiLi4yYWRmY2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKQEAgLTEwMyw3ICsxMDMsOCBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCi0JCQkgICAgICAiXG5Jbml0aWFsaXplZCAlaGQvJWhkIFJlZ2lvbnMgJWhkLyVoZCBGaWVsZHMgJWhkLyVoZCBCdWZmZXJzICVoZC8laGQgUGFja2FnZXMgKCVoZCBub2RlcylcbiIsCisJCQkgICAgICAiXG5Jbml0aWFsaXplZCAlaGQvJWhkIFJlZ2lvbnMgJWhkLyVoZCBGaWVsZHMgJWhkLyVoZCAiCisJCQkgICAgICAiQnVmZmVycyAlaGQvJWhkIFBhY2thZ2VzICglaGQgbm9kZXMpXG4iLAogCQkJICAgICAgaW5mby5vcF9yZWdpb25faW5pdCwgaW5mby5vcF9yZWdpb25fY291bnQsCiAJCQkgICAgICBpbmZvLmZpZWxkX2luaXQsIGluZm8uZmllbGRfY291bnQsCiAJCQkgICAgICBpbmZvLmJ1ZmZlcl9pbml0LCBpbmZvLmJ1ZmZlcl9jb3VudCwKQEAgLTE0OCw3ICsxNDksOCBAQAogCWluZm8ubnVtX0lOSSA9IDA7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULAotCQkJICAgICAgIkluaXRpYWxpemluZyBEZXZpY2UvUHJvY2Vzc29yL1RoZXJtYWwgb2JqZWN0cyBieSBleGVjdXRpbmcgX0lOSSBtZXRob2RzOiIpKTsKKwkJCSAgICAgICJJbml0aWFsaXppbmcgRGV2aWNlL1Byb2Nlc3Nvci9UaGVybWFsIG9iamVjdHMgIgorCQkJICAgICAgImJ5IGV4ZWN1dGluZyBfSU5JIG1ldGhvZHM6IikpOwogCiAJLyogVHJlZSBhbmFseXNpczogZmluZCBhbGwgc3VidHJlZXMgdGhhdCBjb250YWluIF9JTkkgbWV0aG9kcyAqLwogCkBAIC0xODAsNyArMTgyLDggQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULAotCQkJICAgICAgIlxuRXhlY3V0ZWQgJWhkIF9JTkkgbWV0aG9kcyByZXF1aXJpbmcgJWhkIF9TVEEgZXhlY3V0aW9ucyAoZXhhbWluZWQgJWhkIG9iamVjdHMpXG4iLAorCQkJICAgICAgIlxuRXhlY3V0ZWQgJWhkIF9JTkkgbWV0aG9kcyByZXF1aXJpbmcgJWhkIF9TVEEgZXhlY3V0aW9ucyAiCisJCQkgICAgICAiKGV4YW1pbmVkICVoZCBvYmplY3RzKVxuIiwKIAkJCSAgICAgIGluZm8ubnVtX0lOSSwgaW5mby5udW1fU1RBLCBpbmZvLmRldmljZV9jb3VudCkpOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0yNjMsMTYgKzI2NiwxNCBAQAogCQlyZXR1cm4gKEFFX09LKTsKIAl9CiAKLQkvKgotCSAqIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbml0aWFsaXplZCwgbm90aGluZyBlbHNlIHRvIGRvCi0JICovCisJLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLCBub3RoaW5nIGVsc2UgdG8gZG8gKi8KKwogCWlmIChvYmpfZGVzYy0+Y29tbW9uLmZsYWdzICYgQU9QT0JKX0RBVEFfVkFMSUQpIHsKIAkJcmV0dXJuIChBRV9PSyk7CiAJfQogCi0JLyoKLQkgKiBNdXN0IGxvY2sgdGhlIGludGVycHJldGVyIGJlZm9yZSBleGVjdXRpbmcgQU1MIGNvZGUKLQkgKi8KKwkvKiBNdXN0IGxvY2sgdGhlIGludGVycHJldGVyIGJlZm9yZSBleGVjdXRpbmcgQU1MIGNvZGUgKi8KKwogCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYwppbmRleCBhMGJhOWUxLi5kY2Q3YTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTEyOCwxMiArMTI4LDEyIEBACiAJICogcGFyc2UgdHJlZXMuCiAJICovCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAiKioqKiBCZWdpbiBUYWJsZSBNZXRob2QgUGFyc2luZyBhbmQgT2JqZWN0IEluaXRpYWxpemF0aW9uICoqKipcbiIpKTsKKwkJCSAgIioqKiogQmVnaW4gVGFibGUgTWV0aG9kIFBhcnNpbmcgYW5kIE9iamVjdCBJbml0aWFsaXphdGlvblxuIikpOwogCiAJc3RhdHVzID0gYWNwaV9kc19pbml0aWFsaXplX29iamVjdHModGFibGVfaW5kZXgsIG5vZGUpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAiKioqKiBDb21wbGV0ZWQgVGFibGUgTWV0aG9kIFBhcnNpbmcgYW5kIE9iamVjdCBJbml0aWFsaXphdGlvbiAqKioqXG4iKSk7CisJCQkgICIqKioqIENvbXBsZXRlZCBUYWJsZSBNZXRob2QgUGFyc2luZyBhbmQgT2JqZWN0IEluaXRpYWxpemF0aW9uXG4iKSk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYwppbmRleCAwOGE5N2E1Li4zZWIyMGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc29iamVjdC5jCkBAIC0yMDksOCArMjA5LDcgQEAKIAogCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OwogCi0JaWYgKCFvYmpfZGVzYyB8fAotCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgeworCWlmICghb2JqX2Rlc2MgfHwgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkpIHsKIAkJcmV0dXJuX1ZPSUQ7CiAJfQogCkBAIC0yMjAsOCArMjE5LDcgQEAKIAlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EKSB7CiAJCW5vZGUtPm9iamVjdCA9IG9ial9kZXNjLT5jb21tb24ubmV4dF9vYmplY3Q7CiAJCWlmIChub2RlLT5vYmplY3QgJiYKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShub2RlLT5vYmplY3QpICE9Ci0JCSAgICAgQUNQSV9UWVBFX0xPQ0FMX0RBVEEpKSB7CisJCSAgICAoKG5vZGUtPm9iamVjdCktPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgewogCQkJbm9kZS0+b2JqZWN0ID0gbm9kZS0+b2JqZWN0LT5jb21tb24ubmV4dF9vYmplY3Q7CiAJCX0KIAl9CkBAIC0yNjcsNyArMjY1LDcgQEAKIAkgICAgKChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUobm9kZS0+b2JqZWN0KSAhPSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EKQogCSAgICAgJiYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShub2RlLT5vYmplY3QpICE9CiAJCSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkpCi0JICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShub2RlLT5vYmplY3QpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgeworCSAgICB8fCAoKG5vZGUtPm9iamVjdCktPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgewogCQlyZXR1cm5fUFRSKE5VTEwpOwogCX0KIApAQCAtMjk0LDkgKzI5Miw5IEBACiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X3NlY29uZGFyeV9vYmplY3QsIG9ial9kZXNjKTsKIAogCWlmICgoIW9ial9kZXNjKSB8fAotCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSB8fAorCSAgICAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSB8fAogCSAgICAoIW9ial9kZXNjLT5jb21tb24ubmV4dF9vYmplY3QpIHx8Ci0JICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYy0+Y29tbW9uLm5leHRfb2JqZWN0KSA9PQorCSAgICAoKG9ial9kZXNjLT5jb21tb24ubmV4dF9vYmplY3QpLT5jb21tb24udHlwZSA9PQogCSAgICAgQUNQSV9UWVBFX0xPQ0FMX0RBVEEpKSB7CiAJCXJldHVybl9QVFIoTlVMTCk7CiAJfQpAQCAtMzMxLDcgKzMyOSw3IEBACiAJcHJldl9vYmpfZGVzYyA9IE5VTEw7CiAJb2JqX2Rlc2MgPSBub2RlLT5vYmplY3Q7CiAJd2hpbGUgKG9ial9kZXNjKSB7Ci0JCWlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSAmJgorCQlpZiAoKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgJiYKIAkJICAgIChvYmpfZGVzYy0+ZGF0YS5oYW5kbGVyID09IGhhbmRsZXIpKSB7CiAJCQlyZXR1cm4gKEFFX0FMUkVBRFlfRVhJU1RTKTsKIAkJfQpAQCAtMzg1LDcgKzM4Myw3IEBACiAJcHJldl9vYmpfZGVzYyA9IE5VTEw7CiAJb2JqX2Rlc2MgPSBub2RlLT5vYmplY3Q7CiAJd2hpbGUgKG9ial9kZXNjKSB7Ci0JCWlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSAmJgorCQlpZiAoKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgJiYKIAkJICAgIChvYmpfZGVzYy0+ZGF0YS5oYW5kbGVyID09IGhhbmRsZXIpKSB7CiAJCQlpZiAocHJldl9vYmpfZGVzYykgewogCQkJCXByZXZfb2JqX2Rlc2MtPmNvbW1vbi5uZXh0X29iamVjdCA9CkBAIC00MjgsNyArNDI2LDcgQEAKIAogCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OwogCXdoaWxlIChvYmpfZGVzYykgewotCQlpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgJiYKKwkJaWYgKChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX0RBVEEpICYmCiAJCSAgICAob2JqX2Rlc2MtPmRhdGEuaGFuZGxlciA9PSBoYW5kbGVyKSkgewogCQkJKmRhdGEgPSBvYmpfZGVzYy0+ZGF0YS5wb2ludGVyOwogCQkJcmV0dXJuIChBRV9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcGFyc2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCmluZGV4IGI5ZThkMDAuLjY2MmE0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCkBAIC0xNzYsOSArMTc2LDggQEAKIAkgKiBwZXJmb3JtcyBhbm90aGVyIGNvbXBsZXRlIHBhcnNlIG9mIHRoZSBBTUwuCiAJICovCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwgIioqKiogU3RhcnQgcGFzcyAxXG4iKSk7Ci0Jc3RhdHVzID0KLQkgICAgYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UoQUNQSV9JTU9ERV9MT0FEX1BBU1MxLCB0YWJsZV9pbmRleCwKLQkJCQkgICAgICAgc3RhcnRfbm9kZSk7CisJc3RhdHVzID0gYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UoQUNQSV9JTU9ERV9MT0FEX1BBU1MxLAorCQkJCQkgICAgdGFibGVfaW5kZXgsIHN0YXJ0X25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0xOTMsOSArMTkyLDggQEAKIAkgKiBwYXJzZSBvYmplY3RzIGFyZSBhbGwgY2FjaGVkLgogCSAqLwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICIqKioqIFN0YXJ0IHBhc3MgMlxuIikpOwotCXN0YXR1cyA9Ci0JICAgIGFjcGlfbnNfb25lX2NvbXBsZXRlX3BhcnNlKEFDUElfSU1PREVfTE9BRF9QQVNTMiwgdGFibGVfaW5kZXgsCi0JCQkJICAgICAgIHN0YXJ0X25vZGUpOworCXN0YXR1cyA9IGFjcGlfbnNfb25lX2NvbXBsZXRlX3BhcnNlKEFDUElfSU1PREVfTE9BRF9QQVNTMiwKKwkJCQkJICAgIHRhYmxlX2luZGV4LCBzdGFydF9ub2RlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCmluZGV4IDQ1MjcwMzIuLmQ5ZThjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKQEAgLTc5LDcgKzc5LDkgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAogCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKLQkJCSAgICAgICB1OCB0eXBlMSwgdTMyIGNvdW50MSwgdTggdHlwZTIsIHUzMiBjb3VudDIpOworCQkJICAgICAgIHU4IHR5cGUxLAorCQkJICAgICAgIHUzMiBjb3VudDEsCisJCQkgICAgICAgdTggdHlwZTIsIHUzMiBjb3VudDIsIHUzMiBzdGFydF9pbmRleCk7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShjaGFyICpwYXRobmFtZSwKQEAgLTIyMSw3ICsyMjMsNyBAQAogCiAJLyogRm9yIHJldHVybmVkIFBhY2thZ2Ugb2JqZWN0cywgY2hlY2sgdGhlIHR5cGUgb2YgYWxsIHN1Yi1vYmplY3RzICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUocmV0dXJuX29iamVjdCkgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwlpZiAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZShwYXRobmFtZSwgcmV0dXJuX29iamVjdF9wdHIsCiAJCQkJCSAgcHJlZGVmaW5lZCk7CkBAIC0zMDIsNyArMzA0LDggQEAKIAkJaWYgKCh1c2VyX3BhcmFtX2NvdW50ICE9IHJlcXVpcmVkX3BhcmFtc19jdXJyZW50KSAmJgogCQkgICAgKHVzZXJfcGFyYW1fY291bnQgIT0gcmVxdWlyZWRfcGFyYW1zX29sZCkpIHsKIAkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiJXM6IFBhcmFtZXRlciBjb3VudCBtaXNtYXRjaCAtIGNhbGxlciBwYXNzZWQgJWQsIEFDUEkgcmVxdWlyZXMgJWQiLAorCQkJCSAgICAgICIlczogUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gIgorCQkJCSAgICAgICJjYWxsZXIgcGFzc2VkICVkLCBBQ1BJIHJlcXVpcmVzICVkIiwKIAkJCQkgICAgICBwYXRobmFtZSwgdXNlcl9wYXJhbV9jb3VudCwKIAkJCQkgICAgICByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkpOwogCQl9CkBAIC00NzIsNyArNDc1LDcgQEAKIAkJCQkJCQlwYWNrYWdlLT5yZXRfaW5mby4KIAkJCQkJCQlvYmplY3RfdHlwZTIsCiAJCQkJCQkJcGFja2FnZS0+cmV0X2luZm8uCi0JCQkJCQkJY291bnQyKTsKKwkJCQkJCQljb3VudDIsIDApOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtNjIzLDcgKzYyNiw3IEBACiAJCQkJCQkJCSAgIG9iamVjdF90eXBlMiwKIAkJCQkJCQkJICAgcGFja2FnZS0+CiAJCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBjb3VudDIpOworCQkJCQkJCQkgICBjb3VudDIsIDApOwogCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCQkJfQpAQCAtNjcyLDcgKzY3NSw4IEBACiAJCQkJCQkJCSAgIG9iamVjdF90eXBlMSwKIAkJCQkJCQkJICAgc3ViX3BhY2thZ2UtPgogCQkJCQkJCQkgICBwYWNrYWdlLgotCQkJCQkJCQkgICBjb3VudCwgMCwgMCk7CisJCQkJCQkJCSAgIGNvdW50LCAwLCAwLAorCQkJCQkJCQkgICAwKTsKIAkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQkJcmV0dXJuIChzdGF0dXMpOwogCQkJCX0KQEAgLTcxMCw3ICs3MTQsOCBAQAogCQkJCQkJCQkgICByZXRfaW5mby4KIAkJCQkJCQkJICAgb2JqZWN0X3R5cGUxLAogCQkJCQkJCQkgICAoZXhwZWN0ZWRfY291bnQKLQkJCQkJCQkJICAgIC0gMSksIDAsIDApOworCQkJCQkJCQkgICAgLSAxKSwgMCwgMCwKKwkJCQkJCQkJICAgMSk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCXJldHVybiAoc3RhdHVzKTsKIAkJCQl9CkBAIC03NTgsNiArNzYzLDcgQEAKICAqICAgICAgICAgICAgICBDb3VudDEgICAgICAgICAgLSBDb3VudCBmb3IgZmlyc3QgZ3JvdXAKICAqICAgICAgICAgICAgICBUeXBlMiAgICAgICAgICAgLSBPYmplY3QgdHlwZSBmb3Igc2Vjb25kIGdyb3VwCiAgKiAgICAgICAgICAgICAgQ291bnQyICAgICAgICAgIC0gQ291bnQgZm9yIHNlY29uZCBncm91cAorICogICAgICAgICAgICAgIHN0YXJ0X2luZGV4ICAgICAtIFN0YXJ0IG9mIHRoZSBmaXJzdCBncm91cCBvZiBlbGVtZW50cwogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC03NjksNyArNzc1LDkgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAogCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKLQkJCSAgICAgICB1OCB0eXBlMSwgdTMyIGNvdW50MSwgdTggdHlwZTIsIHUzMiBjb3VudDIpCisJCQkgICAgICAgdTggdHlwZTEsCisJCQkgICAgICAgdTMyIGNvdW50MSwKKwkJCSAgICAgICB1OCB0eXBlMiwgdTMyIGNvdW50MiwgdTMyIHN0YXJ0X2luZGV4KQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKip0aGlzX2VsZW1lbnQgPSBlbGVtZW50czsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC03ODIsNyArNzkwLDcgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY291bnQxOyBpKyspIHsKIAkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgdGhpc19lbGVtZW50LAotCQkJCQkJICAgdHlwZTEsIGkpOworCQkJCQkJICAgdHlwZTEsIGkgKyBzdGFydF9pbmRleCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwogCQl9CkBAIC03OTEsNyArNzk5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDI7IGkrKykgewogCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCB0aGlzX2VsZW1lbnQsCi0JCQkJCQkgICB0eXBlMiwgKGkgKyBjb3VudDEpKTsKKwkJCQkJCSAgIHR5cGUyLAorCQkJCQkJICAgKGkgKyBjb3VudDEgKyBzdGFydF9pbmRleCkpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtODU4LDcgKzg2Nyw3IEBACiAJICogZnJvbSBhbGwgb2YgdGhlIHByZWRlZmluZWQgbmFtZXMgKGluY2x1ZGluZyBlbGVtZW50cyBvZiByZXR1cm5lZAogCSAqIHBhY2thZ2VzKQogCSAqLwotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUocmV0dXJuX29iamVjdCkpIHsKKwlzd2l0Y2ggKHJldHVybl9vYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJcmV0dXJuX2J0eXBlID0gQUNQSV9SVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTkwMSw3ICs5MTAsNyBAQAogCiAJLyogRm9yIHJlZmVyZW5jZSBvYmplY3RzLCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UgdHlwZSBpcyBjb3JyZWN0ICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUocmV0dXJuX29iamVjdCkgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0KTsKIAl9CiAKQEAgLTk3NCw3ICs5ODMsOCBAQAogCX0KIAogCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJICAgICAgIiVzOiBSZXR1cm4gdHlwZSBtaXNtYXRjaCAtIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIG9iamVjdCB0eXBlIFslc10gJTIuMlgiLAorCQkgICAgICAiJXM6IFJldHVybiB0eXBlIG1pc21hdGNoIC0gIgorCQkgICAgICAidW5leHBlY3RlZCByZWZlcmVuY2Ugb2JqZWN0IHR5cGUgWyVzXSAlMi4yWCIsCiAJCSAgICAgIHBhdGhuYW1lLCBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZShyZXR1cm5fb2JqZWN0KSwKIAkJICAgICAgcmV0dXJuX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzKSk7CiAKQEAgLTEwMDYsNyArMTAxNiw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKIAlhY3BpX3NpemUgbGVuZ3RoOwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZXR1cm5fb2JqZWN0KSkgeworCXN3aXRjaCAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKIAkJaWYgKCEoZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9TVFJJTkcpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKaW5kZXggNmZlYTEzZi4uZjliNGY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYwpAQCAtMTY3LDcgKzE2Nyw4IEBACiAJLyogU2VhcmNoZWQgZW50aXJlIG5hbWVzcGFjZSBsZXZlbCwgbm90IGZvdW5kICovCiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAotCQkJICAiTmFtZSBbJTQuNHNdICglcykgbm90IGZvdW5kIGluIHNlYXJjaCBpbiBzY29wZSBbJTQuNHNdICVwIGZpcnN0IGNoaWxkICVwXG4iLAorCQkJICAiTmFtZSBbJTQuNHNdICglcykgbm90IGZvdW5kIGluIHNlYXJjaCBpbiBzY29wZSBbJTQuNHNdICIKKwkJCSAgIiVwIGZpcnN0IGNoaWxkICVwXG4iLAogCQkJICBBQ1BJX0NBU1RfUFRSKGNoYXIsICZ0YXJnZXRfbmFtZSksCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSwgcGFyZW50X25vZGUsCkBAIC0yMzksOSArMjQwLDggQEAKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSwKIAkJCSAgQUNQSV9DQVNUX1BUUihjaGFyLCAmdGFyZ2V0X25hbWUpKSk7CiAKLQkvKgotCSAqIFNlYXJjaCBwYXJlbnRzIHVudGlsIHRhcmdldCBpcyBmb3VuZCBvciB3ZSBoYXZlIGJhY2tlZCB1cCB0byB0aGUgcm9vdAotCSAqLworCS8qIFNlYXJjaCBwYXJlbnRzIHVudGlsIHRhcmdldCBpcyBmb3VuZCBvciB3ZSBoYXZlIGJhY2tlZCB1cCB0byB0aGUgcm9vdCAqLworCiAJd2hpbGUgKHBhcmVudF9ub2RlKSB7CiAJCS8qCiAJCSAqIFNlYXJjaCBwYXJlbnQgc2NvcGUuIFVzZSBUWVBFX0FOWSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCkBAIC0zOTUsOSArMzk1LDkgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogI2lmZGVmIEFDUElfQVNMX0NPTVBJTEVSCi0JLyoKLQkgKiBOb2RlIGlzIGFuIG9iamVjdCBkZWZpbmVkIGJ5IGFuIEV4dGVybmFsKCkgc3RhdGVtZW50Ci0JICovCisKKwkvKiBOb2RlIGlzIGFuIG9iamVjdCBkZWZpbmVkIGJ5IGFuIEV4dGVybmFsKCkgc3RhdGVtZW50ICovCisKIAlpZiAoZmxhZ3MgJiBBQ1BJX05TX0VYVEVSTkFMKSB7CiAJCW5ld19ub2RlLT5mbGFncyB8PSBBTk9CSl9JU19FWFRFUk5BTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCmluZGV4IDNlMTE0OWIuLjc4Mjc3ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCkBAIC0zMjUsOSArMzI1LDggQEAKIAkJCW5leHRfZXh0ZXJuYWxfY2hhcisrOwogCQl9CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogSGFuZGxlIENhcmF0IHByZWZpeGVzCi0JCSAqLworCQkvKiBIYW5kbGUgQ2FyYXQgcHJlZml4ZXMgKi8KKwogCQl3aGlsZSAoKm5leHRfZXh0ZXJuYWxfY2hhciA9PSAnXicpIHsKIAkJCWluZm8tPm51bV9jYXJhdHMrKzsKIAkJCW5leHRfZXh0ZXJuYWxfY2hhcisrOwpAQCAtNTUyLDkgKzU1MSw4IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGZvciBhIHByZWZpeCAob25lICdcJyB8IG9uZSBvciBtb3JlICdeJykuCi0JICovCisJLyogQ2hlY2sgZm9yIGEgcHJlZml4IChvbmUgJ1wnIHwgb25lIG9yIG1vcmUgJ14nKSAqLworCiAJc3dpdGNoIChpbnRlcm5hbF9uYW1lWzBdKSB7CiAJY2FzZSAnXFwnOgogCQlwcmVmaXhfbGVuZ3RoID0gMTsKQEAgLTU4MCw3ICs1NzgsNyBAQAogCX0KIAogCS8qCi0JICogQ2hlY2sgZm9yIG9iamVjdCBuYW1lcy4gIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZSAwLTI1NSBvZiB0aGVzZQorCSAqIENoZWNrIGZvciBvYmplY3QgbmFtZXMuIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZSAwLTI1NSBvZiB0aGVzZQogCSAqIDQtYnl0ZSBlbGVtZW50cy4KIAkgKi8KIAlpZiAocHJlZml4X2xlbmd0aCA8IGludGVybmFsX25hbWVfbGVuZ3RoKSB7CkBAIC02MzcsOSArNjM1LDggQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVRITkFNRSk7CiAJfQogCi0JLyoKLQkgKiBCdWlsZCBjb252ZXJ0ZWRfbmFtZQotCSAqLworCS8qIEJ1aWxkIHRoZSBjb252ZXJ0ZWRfbmFtZSAqLworCiAJKmNvbnZlcnRlZF9uYW1lID0gQUNQSV9BTExPQ0FURV9aRVJPRUQocmVxdWlyZWRfbGVuZ3RoKTsKIAlpZiAoISgqY29udmVydGVkX25hbWUpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwpAQCAtNjg1LDYgKzY4Miw5IEBACiAgKiAgICAgICBhbmQga2VlcCBhbGwgcG9pbnRlcnMgd2l0aGluIHRoaXMgc3Vic3lzdGVtIC0gaG93ZXZlciB0aGlzIGludHJvZHVjZXMKICAqICAgICAgIG1vcmUgKGFuZCBwZXJoYXBzIHVubmVjZXNzYXJ5KSBvdmVyaGVhZC4KICAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbmF0aW9uIGlzIGJhc2ljYWxseSBhIHBsYWNlaG9sZGVyIHVudGlsIHN1Y2ggdGltZSBjb21lcworICogdGhhdCBpdCBpcyBuZWVkZWQuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGFjcGlfaGFuZGxlIGhhbmRsZSkKQEAgLTY5Miw5ICs2OTIsOCBAQAogCiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCi0JLyoKLQkgKiBTaW1wbGUgaW1wbGVtZW50YXRpb24KLQkgKi8KKwkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLworCiAJaWYgKCghaGFuZGxlKSB8fCAoaGFuZGxlID09IEFDUElfUk9PVF9PQkpFQ1QpKSB7CiAJCXJldHVybiAoYWNwaV9nYmxfcm9vdF9ub2RlKTsKIAl9CkBAIC04NzIsNyArODcxLDcgQEAKIAkJCQkoZmxhZ3MgfCBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSksIE5VTEwsCiAJCQkJcmV0dXJuX25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICIlcywgJXNcbiIsCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIiVzLCAlc1xuIiwKIAkJCQkgIHBhdGhuYW1lLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKaW5kZXggMjAwODk1Zi4uODNlM2FhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCkBAIC0xMzUsOCArMTM1LDggQEAKICAqICAgICAgICAgICAgICBzdGFydGluZyAoYW5kIGVuZGluZykgYXQgdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHN0YXJ0X2hhbmRsZS4KICAqICAgICAgICAgICAgICBUaGUgdXNlcl9mdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBub2RlIHRoYXQgbWF0Y2hlcwogICogICAgICAgICAgICAgIHRoZSB0eXBlIHBhcmFtZXRlciBpcyBmb3VuZC4gIElmIHRoZSB1c2VyIGZ1bmN0aW9uIHJldHVybnMKLSAqICAgICAgICAgICAgICBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgc2VhcmNoIGlzIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgYW5kIHRoaXMKLSAqICAgICAgICAgICAgICB2YWx1ZSBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICogICAgICAgICAgICAgIGEgbm9uLXplcm8gdmFsdWUsIHRoZSBzZWFyY2ggaXMgdGVybWluYXRlZCBpbW1lZGlhdGVseSBhbmQKKyAqICAgICAgICAgICAgICB0aGlzIHZhbHVlIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCiAgKgogICogICAgICAgICAgICAgIFRoZSBwb2ludCBvZiB0aGlzIHByb2NlZHVyZSBpcyB0byBwcm92aWRlIGEgZ2VuZXJpYyBuYW1lc3BhY2UKICAqICAgICAgICAgICAgICB3YWxrIHJvdXRpbmUgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzIHRvCkBAIC0yMDAsMTAgKzIwMCwxMCBAQAogCQkJLyoKIAkJCSAqIElnbm9yZSBhbGwgdGVtcG9yYXJ5IG5hbWVzcGFjZSBub2RlcyAoY3JlYXRlZCBkdXJpbmcgY29udHJvbAogCQkJICogbWV0aG9kIGV4ZWN1dGlvbikgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLiBUaGVzZSB0ZW1wb3Jhcnkgbm9kZXMKLQkJCSAqIGNhbiBjYXVzZSBhIHJhY2UgY29uZGl0aW9uIGJlY2F1c2UgdGhleSBjYW4gYmUgZGVsZXRlZCBkdXJpbmcgdGhlCi0JCQkgKiBleGVjdXRpb24gb2YgdGhlIHVzZXIgZnVuY3Rpb24gKGlmIHRoZSBuYW1lc3BhY2UgaXMgdW5sb2NrZWQgYmVmb3JlCi0JCQkgKiBpbnZvY2F0aW9uIG9mIHRoZSB1c2VyIGZ1bmN0aW9uLikgT25seSB0aGUgZGVidWdnZXIgbmFtZXNwYWNlIGR1bXAKLQkJCSAqIHdpbGwgZXhhbWluZSB0aGUgdGVtcG9yYXJ5IG5vZGVzLgorCQkJICogY2FuIGNhdXNlIGEgcmFjZSBjb25kaXRpb24gYmVjYXVzZSB0aGV5IGNhbiBiZSBkZWxldGVkIGR1cmluZworCQkJICogdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdXNlciBmdW5jdGlvbiAoaWYgdGhlIG5hbWVzcGFjZSBpcworCQkJICogdW5sb2NrZWQgYmVmb3JlIGludm9jYXRpb24gb2YgdGhlIHVzZXIgZnVuY3Rpb24uKSBPbmx5IHRoZQorCQkJICogZGVidWdnZXIgbmFtZXNwYWNlIGR1bXAgd2lsbCBleGFtaW5lIHRoZSB0ZW1wb3Jhcnkgbm9kZXMuCiAJCQkgKi8KIAkJCWlmICgoY2hpbGRfbm9kZS0+ZmxhZ3MgJiBBTk9CSl9URU1QT1JBUlkpICYmCiAJCQkgICAgIShmbGFncyAmIEFDUElfTlNfV0FMS19URU1QX05PREVTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCmluZGV4IDIyYTcxNzEuLjA0NTA1NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKQEAgLTM4Nyw4ICszODcsNyBAQAogCiAJLyogV2UgYXJlIGludGVyZXN0ZWQgaW4gcmVmZXJlbmNlIG9iamVjdHMgb25seSAqLwogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpICE9Ci0JICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwlpZiAoKGluZm8tPnJldHVybl9vYmplY3QpLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ3NiwyMSArNDc1LDQwIEBACiAJfQogCiAJLyoKLQkgKiBMb2NrIHRoZSBuYW1lc3BhY2UgYXJvdW5kIHRoZSB3YWxrLgotCSAqIFRoZSBuYW1lc3BhY2Ugd2lsbCBiZSB1bmxvY2tlZC9sb2NrZWQgYXJvdW5kIGVhY2ggY2FsbAotCSAqIHRvIHRoZSB1c2VyIGZ1bmN0aW9uIC0gc2luY2UgdGhpcyBmdW5jdGlvbgotCSAqIG11c3QgYmUgYWxsb3dlZCB0byBtYWtlIEFjcGkgY2FsbHMgaXRzZWxmLgorCSAqIE5lZWQgdG8gYWNxdWlyZSB0aGUgbmFtZXNwYWNlIHJlYWRlciBsb2NrIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlCisJICogd2l0aCBhbnkgY29uY3VycmVudCB0YWJsZSB1bmxvYWRzICh3aGljaCBjYXVzZXMgdGhlIGRlbGV0aW9uIG9mCisJICogbmFtZXNwYWNlIG9iamVjdHMpLiBXZSBjYW5ub3QgYWxsb3cgdGhlIGRlbGV0aW9uIG9mIGEgbmFtZXNwYWNlIG5vZGUKKwkgKiB3aGlsZSB0aGUgdXNlciBmdW5jdGlvbiBpcyB1c2luZyBpdC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGFyZSB0aGUKKwkgKiBub2RlcyBjcmVhdGVkIGFuZCBkZWxldGVkIGR1cmluZyBjb250cm9sIG1ldGhvZCBleGVjdXRpb24gLS0gdGhlc2UKKwkgKiBub2RlcyBhcmUgbWFya2VkIGFzIHRlbXBvcmFyeSBub2RlcyBhbmQgYXJlIGlnbm9yZWQgYnkgdGhlIG5hbWVzcGFjZQorCSAqIHdhbGsuIFRodXMsIGNvbnRyb2wgbWV0aG9kcyBjYW4gYmUgZXhlY3V0ZWQgd2hpbGUgaG9sZGluZyB0aGUKKwkgKiBuYW1lc3BhY2UgZGVsZXRpb24gbG9jayAoYW5kIHRoZSB1c2VyIGZ1bmN0aW9uIGNhbiBleGVjdXRlIGNvbnRyb2wKKwkgKiBtZXRob2RzLikKKwkgKi8KKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfcmVhZF9sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyoKKwkgKiBMb2NrIHRoZSBuYW1lc3BhY2UgYXJvdW5kIHRoZSB3YWxrLiBUaGUgbmFtZXNwYWNlIHdpbGwgYmUKKwkgKiB1bmxvY2tlZC9sb2NrZWQgYXJvdW5kIGVhY2ggY2FsbCB0byB0aGUgdXNlciBmdW5jdGlvbiAtIHNpbmNlIHRoZSB1c2VyCisJICogZnVuY3Rpb24gbXVzdCBiZSBhbGxvd2VkIHRvIG1ha2UgQUNQSUNBIGNhbGxzIGl0c2VsZiAoZm9yIGV4YW1wbGUsIGl0CisJICogd2lsbCB0eXBpY2FsbHkgZXhlY3V0ZSBjb250cm9sIG1ldGhvZHMgZHVyaW5nIGRldmljZSBlbnVtZXJhdGlvbi4pCiAJICovCiAJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX25zX3dhbGtfbmFtZXNwYWNlKHR5cGUsIHN0YXJ0X29iamVjdCwgbWF4X2RlcHRoLAotCQkJCQlBQ1BJX05TX1dBTEtfVU5MT0NLLAotCQkJCQl1c2VyX2Z1bmN0aW9uLCBjb250ZXh0LCByZXR1cm5fdmFsdWUpOworCQkJCQlBQ1BJX05TX1dBTEtfVU5MT0NLLCB1c2VyX2Z1bmN0aW9uLAorCQkJCQljb250ZXh0LCByZXR1cm5fdmFsdWUpOwogCiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CisKKyAgICAgIHVubG9ja19hbmRfZXhpdDoKKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfcmVhZF9sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY2FsYy5jCmluZGV4IDUyODY1ZWUuLmI2NjY3ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYwpAQCAtNTU3LDkgKzU1Nyw5IEBACiAJCSAgICAgdGFibGVfaW5kZXgrKykgewogCQkJaWYgKCpzdWJfb2JqZWN0X2xpc3QgJiYJLyogTnVsbCBvYmplY3QgYWxsb3dlZCAqLwogCQkJICAgICgoQUNQSV9UWVBFX1NUUklORyA9PQotCQkJICAgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUoKnN1Yl9vYmplY3RfbGlzdCkpIHx8CisJCQkgICAgICAoKnN1Yl9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlKSB8fAogCQkJICAgICAoKEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UgPT0KLQkJCSAgICAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRSgqc3ViX29iamVjdF9saXN0KSkgJiYKKwkJCSAgICAgICAoKnN1Yl9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlKSAmJgogCQkJICAgICAgKCgqc3ViX29iamVjdF9saXN0KS0+cmVmZXJlbmNlLmNsYXNzID09CiAJCQkgICAgICAgQUNQSV9SRUZDTEFTU19OQU1FKSkpKSB7CiAJCQkJbmFtZV9mb3VuZCA9IFRSVUU7CkBAIC01NzUsOCArNTc1LDcgQEAKIAkJLyogV2FzIGEgU3RyaW5nIHR5cGUgZm91bmQ/ICovCiAKIAkJaWYgKG5hbWVfZm91bmQpIHsKLQkJCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSgqc3ViX29iamVjdF9saXN0KSA9PQotCQkJICAgIEFDUElfVFlQRV9TVFJJTkcpIHsKKwkJCWlmICgoKnN1Yl9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9TVFJJTkcpIHsKIAkJCQkvKgogCQkJCSAqIFRoZSBsZW5ndGggU3RyaW5nLkxlbmd0aCBmaWVsZCBkb2VzIG5vdCBpbmNsdWRlIHRoZQogCQkJCSAqIHRlcm1pbmF0aW5nIE5VTEwsIGFkZCAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMKaW5kZXggNjE1NjZiMS4uNjYzZjY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAKIAkJLyogRWFjaCBlbGVtZW50IG9mIHRoZSB0b3AtbGV2ZWwgcGFja2FnZSBtdXN0IGFsc28gYmUgYSBwYWNrYWdlICovCiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKCp0b3Bfb2JqZWN0X2xpc3QpICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCWlmICgoKnRvcF9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCSAgICAiKFBSVFslWF0pIE5lZWQgc3ViLXBhY2thZ2UsIGZvdW5kICVzIiwKIAkJCQkgICAgaW5kZXgsCkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJLyogMSkgRmlyc3Qgc3Vib2JqZWN0OiBEZXJlZmVyZW5jZSB0aGUgUFJULkFkZHJlc3MgKi8KIAogCQlvYmpfZGVzYyA9IHN1Yl9vYmplY3RfbGlzdFswXTsKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCSAgICAiKFBSVFslWF0uQWRkcmVzcykgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCiAJCQkJICAgIGluZGV4LApAQCAtMjUzLDcgKzI1Myw3IEBACiAJCS8qIDIpIFNlY29uZCBzdWJvYmplY3Q6IERlcmVmZXJlbmNlIHRoZSBQUlQuUGluICovCiAKIAkJb2JqX2Rlc2MgPSBzdWJfb2JqZWN0X2xpc3RbMV07Ci0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCQkgICAgIihQUlRbJVhdLlBpbikgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCiAJCQkJICAgIGluZGV4LApAQCAtMjY1LDcgKzI2NSw3IEBACiAJCSAqIElmIEJJT1MgZXJyb25lb3VzbHkgcmV2ZXJzZWQgdGhlIF9QUlQgc291cmNlX25hbWUgYW5kIHNvdXJjZV9pbmRleCwKIAkJICogdGhlbiByZXZlcnNlIHRoZW0gYmFjay4KIAkJICovCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzdWJfb2JqZWN0X2xpc3RbM10pICE9CisJCWlmICgoc3ViX29iamVjdF9saXN0WzNdKS0+Y29tbW9uLnR5cGUgIT0KIAkJICAgIEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQlpZiAoYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrKSB7CiAJCQkJc291cmNlX25hbWVfaW5kZXggPSAzOwpAQCAtMjkxLDggKzI5MSw3IEBACiAJCSAqIG90aGVyIEFDUEkgaW1wbGVtZW50YXRpb25zLgogCQkgKi8KIAkJb2JqX2Rlc2MgPSBzdWJfb2JqZWN0X2xpc3RbM107Ci0JCWlmICghb2JqX2Rlc2MKLQkJICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpKSB7CisJCWlmICghb2JqX2Rlc2MgfHwgKG9ial9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJCXN1Yl9vYmplY3RfbGlzdFszXSA9IHN1Yl9vYmplY3RfbGlzdFsyXTsKIAkJCXN1Yl9vYmplY3RfbGlzdFsyXSA9IG9ial9kZXNjOwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAkJICovCiAJCW9ial9kZXNjID0gc3ViX29iamVjdF9saXN0W3NvdXJjZV9uYW1lX2luZGV4XTsKIAkJaWYgKG9ial9kZXNjKSB7Ci0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKIAogCQkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzICE9CkBAIC0zODAsNyArMzc5LDcgQEAKIAkJLyogNCkgRm91cnRoIHN1Ym9iamVjdDogRGVyZWZlcmVuY2UgdGhlIFBSVC5zb3VyY2VfaW5kZXggKi8KIAogCQlvYmpfZGVzYyA9IHN1Yl9vYmplY3RfbGlzdFtzb3VyY2VfaW5kZXhfaW5kZXhdOwotCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICIoUFJUWyVYXS5Tb3VyY2VJbmRleCkgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCiAJCQkJICAgIGluZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKaW5kZXggMzYzNmU0Zi4uNzFlNjU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCkBAIC01Nyw2ICs1Nyw4IEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfdGJfdmFsaWRhdGVfZmFkdCh2b2lkKTsKIAorc3RhdGljIHZvaWQgYWNwaV90Yl9zZXR1cF9mYWR0X3JlZ2lzdGVycyh2b2lkKTsKKwogLyogVGFibGUgZm9yIGNvbnZlcnNpb24gb2YgRkFEVCB0byBjb21tb24gaW50ZXJuYWwgZm9ybWF0IGFuZCBGQURUIHZhbGlkYXRpb24gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYWNwaV9mYWR0X2luZm8gewpAQCAtMTMwLDcgKzEzMiwzOCBAQAogCSBBQ1BJX0ZBRFRfU0VQQVJBVEVfTEVOR1RIfQogfTsKIAotI2RlZmluZSBBQ1BJX0ZBRFRfSU5GT19FTlRSSUVTICAgICAgICAoc2l6ZW9mIChmYWR0X2luZm9fdGFibGUpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNwaV9mYWR0X2luZm8pKQorI2RlZmluZSBBQ1BJX0ZBRFRfSU5GT19FTlRSSUVTIFwKKwkJCShzaXplb2YgKGZhZHRfaW5mb190YWJsZSkgLyBzaXplb2YgKHN0cnVjdCBhY3BpX2ZhZHRfaW5mbykpCisKKy8qIFRhYmxlIHVzZWQgdG8gc3BsaXQgRXZlbnQgQmxvY2tzIGludG8gc2VwYXJhdGUgc3RhdHVzL2VuYWJsZSByZWdpc3RlcnMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgYWNwaV9mYWR0X3BtX2luZm8geworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqdGFyZ2V0OworCXU4IHNvdXJjZTsKKwl1OCByZWdpc3Rlcl9udW07CisKK30gYWNwaV9mYWR0X3BtX2luZm87CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9mYWR0X3BtX2luZm8gZmFkdF9wbV9pbmZvX3RhYmxlW10gPSB7CisJeyZhY3BpX2dibF94cG0xYV9zdGF0dXMsCisJIEFDUElfRkFEVF9PRkZTRVQoeHBtMWFfZXZlbnRfYmxvY2spLAorCSAwfSwKKworCXsmYWNwaV9nYmxfeHBtMWFfZW5hYmxlLAorCSBBQ1BJX0ZBRFRfT0ZGU0VUKHhwbTFhX2V2ZW50X2Jsb2NrKSwKKwkgMX0sCisKKwl7JmFjcGlfZ2JsX3hwbTFiX3N0YXR1cywKKwkgQUNQSV9GQURUX09GRlNFVCh4cG0xYl9ldmVudF9ibG9jayksCisJIDB9LAorCisJeyZhY3BpX2dibF94cG0xYl9lbmFibGUsCisJIEFDUElfRkFEVF9PRkZTRVQoeHBtMWJfZXZlbnRfYmxvY2spLAorCSAxfQorfTsKKworI2RlZmluZSBBQ1BJX0ZBRFRfUE1fSU5GT19FTlRSSUVTIFwKKwkJCShzaXplb2YgKGZhZHRfcG1faW5mb190YWJsZSkgLyBzaXplb2YgKHN0cnVjdCBhY3BpX2ZhZHRfcG1faW5mbykpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTcyLDcgKzIwNSw2IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9wYXJzZV9mYWR0CiAgKgogICogUEFSQU1FVEVSUzogIHRhYmxlX2luZGV4ICAgICAgICAgLSBJbmRleCBmb3IgdGhlIEZBRFQKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgICAgIC0gRmxhZ3MKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKQEAgLTE4MSw3ICsyMTMsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgYWNwaV90Yl9wYXJzZV9mYWR0KHUzMiB0YWJsZV9pbmRleCwgdTggZmxhZ3MpCit2b2lkIGFjcGlfdGJfcGFyc2VfZmFkdCh1MzIgdGFibGVfaW5kZXgpCiB7CiAJdTMyIGxlbmd0aDsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwpAQCAtMjA4LDcgKzI0MCw3IEBACiAJICovCiAJKHZvaWQpYWNwaV90Yl92ZXJpZnlfY2hlY2tzdW0odGFibGUsIGxlbmd0aCk7CiAKLQkvKiBPYnRhaW4gYSBsb2NhbCBjb3B5IG9mIHRoZSBGQURUIGluIGNvbW1vbiBBQ1BJIDIuMCsgZm9ybWF0ICovCisJLyogQ3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgRkFEVCBpbiBjb21tb24gQUNQSSAyLjArIGZvcm1hdCAqLwogCiAJYWNwaV90Yl9jcmVhdGVfbG9jYWxfZmFkdCh0YWJsZSwgbGVuZ3RoKTsKIApAQCAtMjE5LDEwICsyNTEsMTAgQEAKIAkvKiBPYnRhaW4gdGhlIERTRFQgYW5kIEZBQ1MgdGFibGVzIHZpYSB0aGVpciBhZGRyZXNzZXMgd2l0aGluIHRoZSBGQURUICovCiAKIAlhY3BpX3RiX2luc3RhbGxfdGFibGUoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWNwaV9nYmxfRkFEVC5YZHNkdCwKLQkJCSAgICAgIGZsYWdzLCBBQ1BJX1NJR19EU0RULCBBQ1BJX1RBQkxFX0lOREVYX0RTRFQpOworCQkJICAgICAgQUNQSV9TSUdfRFNEVCwgQUNQSV9UQUJMRV9JTkRFWF9EU0RUKTsKIAogCWFjcGlfdGJfaW5zdGFsbF90YWJsZSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhY3BpX2dibF9GQURULlhmYWNzLAotCQkJICAgICAgZmxhZ3MsIEFDUElfU0lHX0ZBQ1MsIEFDUElfVEFCTEVfSU5ERVhfRkFDUyk7CisJCQkgICAgICBBQ1BJX1NJR19GQUNTLCBBQ1BJX1RBQkxFX0lOREVYX0ZBQ1MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjY2LDExICsyOTgsMTcgQEAKIAlBQ1BJX01FTUNQWSgmYWNwaV9nYmxfRkFEVCwgdGFibGUsCiAJCSAgICBBQ1BJX01JTihsZW5ndGgsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0KSkpOwogCi0JLyoKLQkgKiAxKSBDb252ZXJ0IHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBGQURUIHRvIHRoZSBjb21tb24gaW50ZXJuYWwgZm9ybWF0Ci0JICogMikgVmFsaWRhdGUgc29tZSBvZiB0aGUgaW1wb3J0YW50IHZhbHVlcyB3aXRoaW4gdGhlIEZBRFQKLQkgKi8KKwkvKiBDb252ZXJ0IHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBGQURUIHRvIHRoZSBjb21tb24gaW50ZXJuYWwgZm9ybWF0ICovCisKIAlhY3BpX3RiX2NvbnZlcnRfZmFkdCgpOworCisJLyogVmFsaWRhdGUgRkFEVCB2YWx1ZXMgbm93LCBiZWZvcmUgd2UgbWFrZSBhbnkgY2hhbmdlcyAqLworCisJYWNwaV90Yl92YWxpZGF0ZV9mYWR0KCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBnbG9iYWwgQUNQSSByZWdpc3RlciBzdHJ1Y3R1cmVzICovCisKKwlhY3BpX3RiX3NldHVwX2ZhZHRfcmVnaXN0ZXJzKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yODIsMzEgKzMyMCwzNSBAQAogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCiAgKiBERVNDUklQVElPTjogQ29udmVydHMgYWxsIHZlcnNpb25zIG9mIHRoZSBGQURUIHRvIGEgY29tbW9uIGludGVybmFsIGZvcm1hdC4KLSAqICAgICAgICAgICAgICBFeHBhbmQgYWxsIDMyLWJpdCBhZGRyZXNzZXMgdG8gNjQtYml0LgorICogICAgICAgICAgICAgIEV4cGFuZCAzMi1iaXQgYWRkcmVzc2VzIHRvIDY0LWJpdCBhcyBuZWNlc3NhcnkuCiAgKgogICogTk9URTogICAgICAgIGFjcGlfZ2JsX0ZBRFQgbXVzdCBiZSBvZiBzaXplIChzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0KSwKICAqICAgICAgICAgICAgICBhbmQgbXVzdCBjb250YWluIGEgY29weSBvZiB0aGUgYWN0dWFsIEZBRFQuCiAgKgotICogQUNQSUNBIHdpbGwgdXNlIHRoZSAiWCIgZmllbGRzIG9mIHRoZSBGQURUIGZvciBhbGwgYWRkcmVzc2VzLgorICogTm90ZXMgb24gNjQtYml0IHJlZ2lzdGVyIGFkZHJlc3NlczoKICAqCi0gKiAiWCIgZmllbGRzIGFyZSBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBWMS4wIGZpZWxkcy4gRXZlbiBpZgotICogdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgc3RydWN0dXJlLCB0aGV5IGNhbiBiZSBvcHRpb25hbGx5IG5vdCB1c2VkIGJ5Ci0gKiBzZXR0aW5nIHRoZW0gdG8gemVyby4gVGhlcmVmb3JlLCB3ZSBtdXN0IHNlbGVjdGl2ZWx5IGV4cGFuZCBWMS4wIGZpZWxkcwotICogaWYgdGhlIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgorICogQWZ0ZXIgdGhpcyBGQURUIGNvbnZlcnNpb24sIGxhdGVyIEFDUElDQSBjb2RlIHdpbGwgb25seSB1c2UgdGhlIDY0LWJpdCAiWCIKKyAqIGZpZWxkcyBvZiB0aGUgRkFEVCBmb3IgYWxsIEFDUEkgcmVnaXN0ZXIgYWRkcmVzc2VzLgogICoKLSAqIEZvciBBQ1BJIDEuMCBGQURUcywgYWxsIGFkZHJlc3MgZmllbGRzIGFyZSBleHBhbmRlZCB0byB0aGUgY29ycmVzcG9uZGluZwotICogIlgiIGZpZWxkcy4KKyAqIFRoZSA2NC1iaXQgIlgiIGZpZWxkcyBhcmUgb3B0aW9uYWwgZXh0ZW5zaW9ucyB0byB0aGUgb3JpZ2luYWwgMzItYml0IEZBRFQKKyAqIFYxLjAgZmllbGRzLiBFdmVuIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIEZBRFQsIHRoZXkgYXJlIG9wdGlvbmFsIGFuZAorICogYXJlIHVudXNlZCBpZiB0aGUgQklPUyBzZXRzIHRoZW0gdG8gemVyby4gVGhlcmVmb3JlLCB3ZSBtdXN0IGNvcHkvZXhwYW5kCisgKiAzMi1iaXQgVjEuMCBmaWVsZHMgaWYgdGhlIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgogICoKLSAqIEZvciBBQ1BJIDIuMCBGQURUcywgYW55ICJYIiBmaWVsZHMgdGhhdCBhcmUgTlVMTCBhcmUgZmlsbGVkIGluIGJ5Ci0gKiBleHBhbmRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgQUNQSSAxLjAgZmllbGQuCisgKiBGb3IgQUNQSSAxLjAgRkFEVHMsIGFsbCAzMi1iaXQgYWRkcmVzcyBmaWVsZHMgYXJlIGV4cGFuZGVkIHRvIHRoZQorICogY29ycmVzcG9uZGluZyAiWCIgZmllbGRzIGluIHRoZSBpbnRlcm5hbCBGQURULgorICoKKyAqIEZvciBBQ1BJIDIuMCsgRkFEVHMsIGFsbCB2YWxpZCAobm9uLXplcm8pIDMyLWJpdCBhZGRyZXNzIGZpZWxkcyBhcmUgZXhwYW5kZWQKKyAqIHRvIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBYIGZpZWxkcy4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBBQ1BJCisgKiBpbXBsZW1lbnRhdGlvbnMsIHdlIGlnbm9yZSB0aGUgNjQtYml0IGZpZWxkIGlmIHRoZSAzMi1iaXQgZmllbGQgaXMgdmFsaWQsCisgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGhvc3QgT1MgaXMgMzItYml0IG9yIDY0LWJpdC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZCBhY3BpX3RiX2NvbnZlcnRfZmFkdCh2b2lkKQogewotCXU4IHBtMV9yZWdpc3Rlcl9iaXRfd2lkdGg7Ci0JdTggcG0xX3JlZ2lzdGVyX2J5dGVfd2lkdGg7Ci0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICp0YXJnZXQ2NDsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKmFkZHJlc3M2NDsKKwl1MzIgYWRkcmVzczMyOwogCXUzMiBpOwogCiAJLyogVXBkYXRlIHRoZSBsb2NhbCBGQURUIHRhYmxlIGhlYWRlciBsZW5ndGggKi8KQEAgLTM1NSwzNSArMzk3LDE5MyBAQAogCSAqIEV4cGFuZCB0aGUgQUNQSSAxLjAgMzItYml0IGFkZHJlc3NlcyB0byB0aGUgQUNQSSAyLjAgNjQtYml0ICJYIgogCSAqIGdlbmVyaWMgYWRkcmVzcyBzdHJ1Y3R1cmVzIGFzIG5lY2Vzc2FyeS4gTGF0ZXIgY29kZSB3aWxsIGFsd2F5cyB1c2UKIAkgKiB0aGUgNjQtYml0IGFkZHJlc3Mgc3RydWN0dXJlcy4KKwkgKgorCSAqIE1hcmNoIDIwMDk6CisJICogV2Ugbm93IGFsd2F5cyB1c2UgdGhlIDMyLWJpdCBhZGRyZXNzIGlmIGl0IGlzIHZhbGlkIChub24tbnVsbCkuIFRoaXMKKwkgKiBpcyBub3QgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24gd2hpY2ggc3RhdGVzIHRoYXQKKwkgKiB0aGUgNjQtYml0IGFkZHJlc3Mgc3VwZXJzZWRlcyB0aGUgMzItYml0IHZlcnNpb24sIGJ1dCB3ZSBkbyB0aGlzIGZvcgorCSAqIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBBQ1BJIGltcGxlbWVudGF0aW9ucy4gTW9zdCBub3RhYmx5LCBpbiB0aGUKKwkgKiBjYXNlIHdoZXJlIGJvdGggdGhlIDMyIGFuZCA2NCB2ZXJzaW9ucyBhcmUgbm9uLW51bGwsIHdlIHVzZSB0aGUgMzItYml0CisJICogdmVyc2lvbi4gVGhpcyBpcyB0aGUgb25seSBhZGRyZXNzIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4KKwkgKiB0ZXN0ZWQgYnkgdGhlIEJJT1MgbWFudWZhY3R1cmVyLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX0ZBRFRfSU5GT19FTlRSSUVTOyBpKyspIHsKLQkJdGFyZ2V0NjQgPQotCQkgICAgQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcywgJmFjcGlfZ2JsX0ZBRFQsCi0JCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzNjQpOworCQlhZGRyZXNzMzIgPSAqQUNQSV9BRERfUFRSKHUzMiwKKwkJCQkJICAmYWNwaV9nYmxfRkFEVCwKKwkJCQkJICBmYWR0X2luZm9fdGFibGVbaV0uYWRkcmVzczMyKTsKIAotCQkvKiBFeHBhbmQgb25seSBpZiB0aGUgNjQtYml0IFggdGFyZ2V0IGlzIG51bGwgKi8KKwkJYWRkcmVzczY0ID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcywKKwkJCQkJICZhY3BpX2dibF9GQURULAorCQkJCQkgZmFkdF9pbmZvX3RhYmxlW2ldLmFkZHJlc3M2NCk7CiAKLQkJaWYgKCF0YXJnZXQ2NC0+YWRkcmVzcykgeworCQkvKgorCQkgKiBJZiBib3RoIDMyLSBhbmQgNjQtYml0IGFkZHJlc3NlcyBhcmUgdmFsaWQgKG5vbi16ZXJvKSwKKwkJICogdGhleSBtdXN0IG1hdGNoLgorCQkgKi8KKwkJaWYgKGFkZHJlc3M2NC0+YWRkcmVzcyAmJiBhZGRyZXNzMzIgJiYKKwkJICAgIChhZGRyZXNzNjQtPmFkZHJlc3MgIT0gKHU2NCkgYWRkcmVzczMyKSkgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkgICAgIjMyLzY0WCBhZGRyZXNzIG1pc21hdGNoIGluICVzOiAlOC44WC8lOC44WCU4LjhYLCB1c2luZyAzMiIsCisJCQkJICAgIGZhZHRfaW5mb190YWJsZVtpXS5uYW1lLCBhZGRyZXNzMzIsCisJCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzNjQtPmFkZHJlc3MpKSk7CisJCX0KIAotCQkJLyogVGhlIHNwYWNlX2lkIGlzIGFsd2F5cyBJL08gZm9yIHRoZSAzMi1iaXQgbGVnYWN5IGFkZHJlc3MgZmllbGRzICovCisJCS8qIEFsd2F5cyB1c2UgMzItYml0IGFkZHJlc3MgaWYgaXQgaXMgdmFsaWQgKG5vbi1udWxsKSAqLwogCi0JCQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKHRhcmdldDY0LAorCQlpZiAoYWRkcmVzczMyKSB7CisJCQkvKgorCQkJICogQ29weSB0aGUgMzItYml0IGFkZHJlc3MgdG8gdGhlIDY0LWJpdCBHQVMgc3RydWN0dXJlLiBUaGUKKwkJCSAqIFNwYWNlIElEIGlzIGFsd2F5cyBJL08gZm9yIDMyLWJpdCBsZWdhY3kgYWRkcmVzcyBmaWVsZHMKKwkJCSovCisJCQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKGFkZHJlc3M2NCwKIAkJCQkJCSAgICAgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPLAogCQkJCQkJICAgICAqQUNQSV9BRERfUFRSKHU4LAogCQkJCQkJCQkgICAmYWNwaV9nYmxfRkFEVCwKIAkJCQkJCQkJICAgZmFkdF9pbmZvX3RhYmxlCiAJCQkJCQkJCSAgIFtpXS5sZW5ndGgpLAotCQkJCQkJICAgICAodTY0KSAqIEFDUElfQUREX1BUUih1MzIsCi0JCQkJCQkJCQkgICZhY3BpX2dibF9GQURULAotCQkJCQkJCQkJICBmYWR0X2luZm9fdGFibGUKLQkJCQkJCQkJCSAgW2ldLgotCQkJCQkJCQkJICBhZGRyZXNzMzIpKTsKKwkJCQkJCSAgICAgYWRkcmVzczMyKTsKIAkJfQogCX0KK30KIAotCS8qIFZhbGlkYXRlIEZBRFQgdmFsdWVzIG5vdywgYmVmb3JlIHdlIG1ha2UgYW55IGNoYW5nZXMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdGJfdmFsaWRhdGVfZmFkdAorICoKKyAqIFBBUkFNRVRFUlM6ICBUYWJsZSAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBGQURUIHRvIGJlIHZhbGlkYXRlZAorICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IFZhbGlkYXRlIHZhcmlvdXMgaW1wb3J0YW50IGZpZWxkcyB3aXRoaW4gdGhlIEZBRFQuIElmIGEgcHJvYmxlbQorICogICAgICAgICAgICAgIGlzIGZvdW5kLCBpc3N1ZSBhIG1lc3NhZ2UsIGJ1dCBubyBzdGF0dXMgaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICAgVXNlZCBieSBib3RoIHRoZSB0YWJsZSBtYW5hZ2VyIGFuZCB0aGUgZGlzYXNzZW1ibGVyLgorICoKKyAqIFBvc3NpYmxlIGFkZGl0aW9uYWwgY2hlY2tzOgorICogKGFjcGlfZ2JsX0ZBRFQucG0xX2V2ZW50X2xlbmd0aCA+PSA0KQorICogKGFjcGlfZ2JsX0ZBRFQucG0xX2NvbnRyb2xfbGVuZ3RoID49IDIpCisgKiAoYWNwaV9nYmxfRkFEVC5wbV90aW1lcl9sZW5ndGggPj0gNCkKKyAqIEdwZSBibG9jayBsZW5ndGhzIG11c3QgYmUgbXVsdGlwbGUgb2YgMgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQlhY3BpX3RiX3ZhbGlkYXRlX2ZhZHQoKTsKK3N0YXRpYyB2b2lkIGFjcGlfdGJfdmFsaWRhdGVfZmFkdCh2b2lkKQoreworCWNoYXIgKm5hbWU7CisJdTMyICphZGRyZXNzMzI7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICphZGRyZXNzNjQ7CisJdTggbGVuZ3RoOworCXUzMiBpOworCisJLyoKKwkgKiBDaGVjayBmb3IgRkFDUyBhbmQgRFNEVCBhZGRyZXNzIG1pc21hdGNoZXMuIEFuIGFkZHJlc3MgbWlzbWF0Y2ggYmV0d2VlbgorCSAqIHRoZSAzMi1iaXQgYW5kIDY0LWJpdCBhZGRyZXNzIGZpZWxkcyAoRklSTVdBUkVfQ1RSTC9YX0ZJUk1XQVJFX0NUUkwgYW5kCisJICogRFNEVC9YX0RTRFQpIHdvdWxkIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiB0d28gRkFDUyBvciB0d28gRFNEVCB0YWJsZXMuCisJICovCisJaWYgKGFjcGlfZ2JsX0ZBRFQuZmFjcyAmJgorCSAgICAoYWNwaV9nYmxfRkFEVC5YZmFjcyAhPSAodTY0KSBhY3BpX2dibF9GQURULmZhY3MpKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICIzMi82NFggRkFDUyBhZGRyZXNzIG1pc21hdGNoIGluIEZBRFQgLSAiCisJCQkgICAgICAiJTguOFgvJTguOFglOC44WCwgdXNpbmcgMzIiLAorCQkJICAgICAgYWNwaV9nYmxfRkFEVC5mYWNzLAorCQkJICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFjcGlfZ2JsX0ZBRFQuWGZhY3MpKSk7CisKKwkJYWNwaV9nYmxfRkFEVC5YZmFjcyA9ICh1NjQpIGFjcGlfZ2JsX0ZBRFQuZmFjczsKKwl9CisKKwlpZiAoYWNwaV9nYmxfRkFEVC5kc2R0ICYmCisJICAgIChhY3BpX2dibF9GQURULlhkc2R0ICE9ICh1NjQpIGFjcGlfZ2JsX0ZBRFQuZHNkdCkpIHsKKwkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJICAgICAgIjMyLzY0WCBEU0RUIGFkZHJlc3MgbWlzbWF0Y2ggaW4gRkFEVCAtICIKKwkJCSAgICAgICIlOC44WC8lOC44WCU4LjhYLCB1c2luZyAzMiIsCisJCQkgICAgICBhY3BpX2dibF9GQURULmRzZHQsCisJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWNwaV9nYmxfRkFEVC5YZHNkdCkpKTsKKworCQlhY3BpX2dibF9GQURULlhkc2R0ID0gKHU2NCkgYWNwaV9nYmxfRkFEVC5kc2R0OworCX0KKworCS8qIEV4YW1pbmUgYWxsIG9mIHRoZSA2NC1iaXQgZXh0ZW5kZWQgYWRkcmVzcyBmaWVsZHMgKFggZmllbGRzKSAqLworCisJZm9yIChpID0gMDsgaSA8IEFDUElfRkFEVF9JTkZPX0VOVFJJRVM7IGkrKykgeworCQkvKgorCQkgKiBHZW5lcmF0ZSBwb2ludGVycyB0byB0aGUgMzItYml0IGFuZCA2NC1iaXQgYWRkcmVzc2VzLCBnZXQgdGhlCisJCSAqIHJlZ2lzdGVyIGxlbmd0aCAod2lkdGgpLCBhbmQgdGhlIHJlZ2lzdGVyIG5hbWUKKwkJICovCisJCWFkZHJlc3M2NCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MsCisJCQkJCSAmYWNwaV9nYmxfRkFEVCwKKwkJCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzNjQpOworCQlhZGRyZXNzMzIgPQorCQkgICAgQUNQSV9BRERfUFRSKHUzMiwgJmFjcGlfZ2JsX0ZBRFQsCisJCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzMzIpOworCQlsZW5ndGggPQorCQkgICAgKkFDUElfQUREX1BUUih1OCwgJmFjcGlfZ2JsX0ZBRFQsCisJCQkJICBmYWR0X2luZm9fdGFibGVbaV0ubGVuZ3RoKTsKKwkJbmFtZSA9IGZhZHRfaW5mb190YWJsZVtpXS5uYW1lOworCisJCS8qCisJCSAqIEZvciBlYWNoIGV4dGVuZGVkIGZpZWxkLCBjaGVjayBmb3IgbGVuZ3RoIG1pc21hdGNoIGJldHdlZW4gdGhlCisJCSAqIGxlZ2FjeSBsZW5ndGggZmllbGQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBYIGxlbmd0aCBmaWVsZC4KKwkJICovCisJCWlmIChhZGRyZXNzNjQtPmFkZHJlc3MgJiYKKwkJICAgIChhZGRyZXNzNjQtPmJpdF93aWR0aCAhPSBBQ1BJX01VTF84KGxlbmd0aCkpKSB7CisJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCisJCQkJICAgICAgIjMyLzY0WCBsZW5ndGggbWlzbWF0Y2ggaW4gJXM6ICVkLyVkIiwKKwkJCQkgICAgICBuYW1lLCBBQ1BJX01VTF84KGxlbmd0aCksCisJCQkJICAgICAgYWRkcmVzczY0LT5iaXRfd2lkdGgpKTsKKwkJfQorCisJCWlmIChmYWR0X2luZm9fdGFibGVbaV0udHlwZSAmIEFDUElfRkFEVF9SRVFVSVJFRCkgeworCQkJLyoKKwkJCSAqIEZpZWxkIGlzIHJlcXVpcmVkIChQbTFhX2V2ZW50LCBQbTFhX2NvbnRyb2wsIHBtX3RpbWVyKS4KKwkJCSAqIEJvdGggdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIG5vbi16ZXJvLgorCQkJICovCisJCQlpZiAoIWFkZHJlc3M2NC0+YWRkcmVzcyB8fCAhbGVuZ3RoKSB7CisJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkJICAgICJSZXF1aXJlZCBmaWVsZCAlcyBoYXMgemVybyBhZGRyZXNzIGFuZC9vciBsZW5ndGg6IgorCQkJCQkgICAgIiAlOC44WCU4LjhYLyVYIiwKKwkJCQkJICAgIG5hbWUsCisJCQkJCSAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0LT4KKwkJCQkJCQkgICAgICAgYWRkcmVzcyksCisJCQkJCSAgICBsZW5ndGgpKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChmYWR0X2luZm9fdGFibGVbaV0udHlwZSAmIEFDUElfRkFEVF9TRVBBUkFURV9MRU5HVEgpIHsKKwkJCS8qCisJCQkgKiBGaWVsZCBpcyBvcHRpb25hbCAoUE0yQ29udHJvbCwgR1BFMCwgR1BFMSkgQU5EIGhhcyBpdHMgb3duCisJCQkgKiBsZW5ndGggZmllbGQuIElmIHByZXNlbnQsIGJvdGggdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0CisJCQkgKiBiZSB2YWxpZC4KKwkJCSAqLworCQkJaWYgKChhZGRyZXNzNjQtPmFkZHJlc3MgJiYgIWxlbmd0aCkgfHwKKwkJCSAgICAoIWFkZHJlc3M2NC0+YWRkcmVzcyAmJiBsZW5ndGgpKSB7CisJCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJCQkgICAgICAiT3B0aW9uYWwgZmllbGQgJXMgaGFzIHplcm8gYWRkcmVzcyBvciBsZW5ndGg6ICIKKwkJCQkJICAgICAgIiU4LjhYJTguOFgvJVgiLAorCQkJCQkgICAgICBuYW1lLAorCQkJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0LT4KKwkJCQkJCQkJIGFkZHJlc3MpLAorCQkJCQkgICAgICBsZW5ndGgpKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV90Yl9zZXR1cF9mYWR0X3JlZ2lzdGVycworICoKKyAqIFBBUkFNRVRFUlM6ICBOb25lLCB1c2VzIGFjcGlfZ2JsX0ZBRFQuCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogSW5pdGlhbGl6ZSBnbG9iYWwgQUNQSSBQTTEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuIE9wdGlvbmFsbHksCisgKiAgICAgICAgICAgICAgZm9yY2UgRkFEVCByZWdpc3RlciBkZWZpbml0aW9ucyB0byB0aGVpciBkZWZhdWx0IGxlbmd0aHMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgYWNwaV90Yl9zZXR1cF9mYWR0X3JlZ2lzdGVycyh2b2lkKQoreworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqdGFyZ2V0NjQ7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpzb3VyY2U2NDsKKwl1OCBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aDsKKwl1MzIgaTsKIAogCS8qCiAJICogT3B0aW9uYWxseSBjaGVjayBhbGwgcmVnaXN0ZXIgbGVuZ3RocyBhZ2FpbnN0IHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQKQEAgLTQyMSwxOTAgKzYyMSwzOSBAQAogCiAJLyoKIAkgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgaW5kaXZpZHVhbCBQTTEgcmVnaXN0ZXJzIChlbmFibGUgYW5kIHN0YXR1cykuCi0JICogRWFjaCByZWdpc3RlciBpcyBkZWZpbmVkIHRvIGJlIChldmVudCBibG9jayBsZW5ndGggLyAyKS4KKwkgKiBFYWNoIHJlZ2lzdGVyIGlzIGRlZmluZWQgdG8gYmUgKGV2ZW50IGJsb2NrIGxlbmd0aCAvIDIpLiBFeHRyYSBkaXZpZGUKKwkgKiBieSA4IGNvbnZlcnRzIGJpdHMgdG8gYnl0ZXMuCiAJICovCi0JcG0xX3JlZ2lzdGVyX2JpdF93aWR0aCA9Ci0JICAgICh1OClBQ1BJX0RJVl8yKGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoKTsKLQlwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCA9ICh1OClBQ1BJX0RJVl84KHBtMV9yZWdpc3Rlcl9iaXRfd2lkdGgpOworCXBtMV9yZWdpc3Rlcl9ieXRlX3dpZHRoID0gKHU4KQorCSAgICBBQ1BJX0RJVl8xNihhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLmJpdF93aWR0aCk7CiAKIAkvKgotCSAqIEFkanVzdCB0aGUgbGVuZ3RocyBvZiB0aGUgUE0xIEV2ZW50IEJsb2NrcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8KLQkgKiBhY2Nlc3MgdGhlIFBNMSBzdGF0dXMgcmVnaXN0ZXIocykuIFVzZSAod2lkdGggLyAyKQotCSAqLwotCWFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoID0gcG0xX3JlZ2lzdGVyX2JpdF93aWR0aDsKLQlhY3BpX2dibF9GQURULnhwbTFiX2V2ZW50X2Jsb2NrLmJpdF93aWR0aCA9IHBtMV9yZWdpc3Rlcl9iaXRfd2lkdGg7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBzZXBhcmF0ZSBHQVMgc3RydWN0cyBmb3IgdGhlIFBNMSBFbmFibGUgcmVnaXN0ZXJzLgotCSAqIFRoZXNlIGFkZHJlc3NlcyBkbyBub3QgYXBwZWFyIChkaXJlY3RseSkgaW4gdGhlIEZBRFQsIHNvIGl0IGlzCi0JICogdXNlZnVsIHRvIGNhbGN1bGF0ZSB0aGVtIG9uY2UsIGhlcmUuCisJICogQ2FsY3VsYXRlIHNlcGFyYXRlIEdBUyBzdHJ1Y3RzIGZvciB0aGUgUE0xeCAoQS9CKSBTdGF0dXMgYW5kIEVuYWJsZQorCSAqIHJlZ2lzdGVycy4gVGhlc2UgYWRkcmVzc2VzIGRvIG5vdCBhcHBlYXIgKGRpcmVjdGx5KSBpbiB0aGUgRkFEVCwgc28gaXQKKwkgKiBpcyB1c2VmdWwgdG8gcHJlLWNhbGN1bGF0ZSB0aGVtIGZyb20gdGhlIFBNMSBFdmVudCBCbG9jayBkZWZpbml0aW9ucy4KIAkgKgogCSAqIFRoZSBQTSBldmVudCBibG9ja3MgYXJlIHNwbGl0IGludG8gdHdvIHJlZ2lzdGVyIGJsb2NrcywgZmlyc3QgaXMgdGhlCiAJICogUE0gU3RhdHVzIFJlZ2lzdGVyIGJsb2NrLCBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgUE0gRW5hYmxlCi0JICogUmVnaXN0ZXIgYmxvY2suIEVhY2ggaXMgb2YgbGVuZ3RoICh4cG0xeF9ldmVudF9ibG9jay5iaXRfd2lkdGgvMikuCisJICogUmVnaXN0ZXIgYmxvY2suIEVhY2ggaXMgb2YgbGVuZ3RoIChwbTFfZXZlbnRfbGVuZ3RoLzIpCiAJICoKLQkgKiBPbiB2YXJpb3VzIHN5c3RlbXMgdGhlIHYyIGZpZWxkcyAoYW5kIHBhcnRpY3VsYXJseSB0aGUgYml0IHdpZHRocykKLQkgKiBjYW5ub3QgYmUgcmVsaWVkIHVwb24sIHRob3VnaC4gSGVuY2UgcmVzb3J0IHRvIHVzaW5nIHRoZSB2MSBsZW5ndGgKLQkgKiBoZXJlIChhbmQgd2FybiBhYm91dCB0aGUgaW5jb25zaXN0ZW5jeSkuCisJICogTm90ZTogVGhlIFBNMUEgZXZlbnQgYmxvY2sgaXMgcmVxdWlyZWQgYnkgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbi4KKwkgKiBIb3dldmVyLCB0aGUgUE0xQiBldmVudCBibG9jayBpcyBvcHRpb25hbCBhbmQgaXMgcmFyZWx5LCBpZiBldmVyLAorCSAqIHVzZWQuCiAJICovCi0JaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoCi0JICAgICE9IGFjcGlfZ2JsX0ZBRFQucG0xX2V2ZW50X2xlbmd0aCAqIDgpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZBRFQ6ICIKLQkJICAgICAgICJYX1BNMWFfRVZUX0JMSy5iaXRfd2lkdGggKCV1KSBkb2VzIG5vdCBtYXRjaCIKLQkJICAgICAgICIgUE0xX0VWVF9MRU4gKCV1KVxuIiwKLQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoLAotCQkgICAgICAgYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoKTsKIAotCS8qIFRoZSBQTTFBIHJlZ2lzdGVyIGJsb2NrIGlzIHJlcXVpcmVkICovCisJZm9yIChpID0gMDsgaSA8IEFDUElfRkFEVF9QTV9JTkZPX0VOVFJJRVM7IGkrKykgeworCQlzb3VyY2U2NCA9CisJCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzLCAmYWNwaV9nYmxfRkFEVCwKKwkJCQkgZmFkdF9wbV9pbmZvX3RhYmxlW2ldLnNvdXJjZSk7CiAKLQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKCZhY3BpX2dibF94cG0xYV9lbmFibGUsCi0JCQkJICAgICBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLnNwYWNlX2lkLAotCQkJCSAgICAgcG0xX3JlZ2lzdGVyX2J5dGVfd2lkdGgsCi0JCQkJICAgICAoYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jay5hZGRyZXNzICsKLQkJCQkgICAgICBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCkpOwotCS8qIERvbid0IGZvcmdldCB0byBjb3B5IHNwYWNlX2lkIG9mIHRoZSBHQVMgKi8KLQlhY3BpX2dibF94cG0xYV9lbmFibGUuc3BhY2VfaWQgPQotCSAgICBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLnNwYWNlX2lkOwotCi0JLyogVGhlIFBNMUIgcmVnaXN0ZXIgYmxvY2sgaXMgb3B0aW9uYWwsIGlnbm9yZSBpZiBub3QgcHJlc2VudCAqLwotCi0JaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suYWRkcmVzcykgewotCQlpZiAoYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay5iaXRfd2lkdGgKLQkJICAgICE9IGFjcGlfZ2JsX0ZBRFQucG0xX2V2ZW50X2xlbmd0aCAqIDgpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJGQURUOiAiCi0JCQkgICAgICAgIlhfUE0xYl9FVlRfQkxLLmJpdF93aWR0aCAoJXUpIGRvZXMgbm90IG1hdGNoIgotCQkJICAgICAgICIgUE0xX0VWVF9MRU4gKCV1KVxuIiwKLQkJCSAgICAgICBhY3BpX2dibF9GQURULnhwbTFiX2V2ZW50X2Jsb2NrLmJpdF93aWR0aCwKLQkJCSAgICAgICBhY3BpX2dibF9GQURULnBtMV9ldmVudF9sZW5ndGgpOwotCQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKCZhY3BpX2dibF94cG0xYl9lbmFibGUsCi0JCQkJCSAgICAgYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay5zcGFjZV9pZCwKLQkJCQkJICAgICBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCwKLQkJCQkJICAgICAoYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay4KLQkJCQkJICAgICAgYWRkcmVzcyArIHBtMV9yZWdpc3Rlcl9ieXRlX3dpZHRoKSk7Ci0JCS8qIERvbid0IGZvcmdldCB0byBjb3B5IHNwYWNlX2lkIG9mIHRoZSBHQVMgKi8KLQkJYWNwaV9nYmxfeHBtMWJfZW5hYmxlLnNwYWNlX2lkID0KLQkJICAgIGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suc3BhY2VfaWQ7Ci0KLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV90Yl92YWxpZGF0ZV9mYWR0Ci0gKgotICogUEFSQU1FVEVSUzogIFRhYmxlICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIEZBRFQgdG8gYmUgdmFsaWRhdGVkCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUKLSAqCi0gKiBERVNDUklQVElPTjogVmFsaWRhdGUgdmFyaW91cyBpbXBvcnRhbnQgZmllbGRzIHdpdGhpbiB0aGUgRkFEVC4gSWYgYSBwcm9ibGVtCi0gKiAgICAgICAgICAgICAgaXMgZm91bmQsIGlzc3VlIGEgbWVzc2FnZSwgYnV0IG5vIHN0YXR1cyBpcyByZXR1cm5lZC4KLSAqICAgICAgICAgICAgICBVc2VkIGJ5IGJvdGggdGhlIHRhYmxlIG1hbmFnZXIgYW5kIHRoZSBkaXNhc3NlbWJsZXIuCi0gKgotICogUG9zc2libGUgYWRkaXRpb25hbCBjaGVja3M6Ci0gKiAoYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoID49IDQpCi0gKiAoYWNwaV9nYmxfRkFEVC5wbTFfY29udHJvbF9sZW5ndGggPj0gMikKLSAqIChhY3BpX2dibF9GQURULnBtX3RpbWVyX2xlbmd0aCA+PSA0KQotICogR3BlIGJsb2NrIGxlbmd0aHMgbXVzdCBiZSBtdWx0aXBsZSBvZiAyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYWNwaV90Yl92YWxpZGF0ZV9mYWR0KHZvaWQpCi17Ci0JY2hhciAqbmFtZTsKLQl1MzIgKmFkZHJlc3MzMjsKLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKmFkZHJlc3M2NDsKLQl1OCBsZW5ndGg7Ci0JdTMyIGk7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBGQUNTIGFuZCBEU0RUIGFkZHJlc3MgbWlzbWF0Y2hlcy4gQW4gYWRkcmVzcyBtaXNtYXRjaCBiZXR3ZWVuCi0JICogdGhlIDMyLWJpdCBhbmQgNjQtYml0IGFkZHJlc3MgZmllbGRzIChGSVJNV0FSRV9DVFJML1hfRklSTVdBUkVfQ1RSTCBhbmQKLQkgKiBEU0RUL1hfRFNEVCkgd291bGQgaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9mIHR3byBGQUNTIG9yIHR3byBEU0RUIHRhYmxlcy4KLQkgKi8KLQlpZiAoYWNwaV9nYmxfRkFEVC5mYWNzICYmCi0JICAgIChhY3BpX2dibF9GQURULlhmYWNzICE9ICh1NjQpIGFjcGlfZ2JsX0ZBRFQuZmFjcykpIHsKLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIjMyLzY0WCBGQUNTIGFkZHJlc3MgbWlzbWF0Y2ggaW4gRkFEVCAtICIKLQkJCSAgICAgICJ0d28gRkFDUyB0YWJsZXMhICU4LjhYLyU4LjhYJTguOFgiLAotCQkJICAgICAgYWNwaV9nYmxfRkFEVC5mYWNzLAotCQkJICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFjcGlfZ2JsX0ZBRFQuWGZhY3MpKSk7Ci0JfQotCi0JaWYgKGFjcGlfZ2JsX0ZBRFQuZHNkdCAmJgotCSAgICAoYWNwaV9nYmxfRkFEVC5YZHNkdCAhPSAodTY0KSBhY3BpX2dibF9GQURULmRzZHQpKSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIzMi82NFggRFNEVCBhZGRyZXNzIG1pc21hdGNoIGluIEZBRFQgLSAiCi0JCQkgICAgICAidHdvIERTRFQgdGFibGVzISAlOC44WC8lOC44WCU4LjhYIiwKLQkJCSAgICAgIGFjcGlfZ2JsX0ZBRFQuZHNkdCwKLQkJCSAgICAgIEFDUElfRk9STUFUX1VJTlQ2NChhY3BpX2dibF9GQURULlhkc2R0KSkpOwotCX0KLQotCS8qIEV4YW1pbmUgYWxsIG9mIHRoZSA2NC1iaXQgZXh0ZW5kZWQgYWRkcmVzcyBmaWVsZHMgKFggZmllbGRzKSAqLwotCi0JZm9yIChpID0gMDsgaSA8IEFDUElfRkFEVF9JTkZPX0VOVFJJRVM7IGkrKykgewotCQkvKgotCQkgKiBHZW5lcmF0ZSBwb2ludGVycyB0byB0aGUgMzItYml0IGFuZCA2NC1iaXQgYWRkcmVzc2VzLCBnZXQgdGhlCi0JCSAqIHJlZ2lzdGVyIGxlbmd0aCAod2lkdGgpLCBhbmQgdGhlIHJlZ2lzdGVyIG5hbWUKLQkJICovCi0JCWFkZHJlc3M2NCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MsCi0JCQkJCSAmYWNwaV9nYmxfRkFEVCwKLQkJCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzNjQpOwotCQlhZGRyZXNzMzIgPQotCQkgICAgQUNQSV9BRERfUFRSKHUzMiwgJmFjcGlfZ2JsX0ZBRFQsCi0JCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzMzIpOwotCQlsZW5ndGggPQotCQkgICAgKkFDUElfQUREX1BUUih1OCwgJmFjcGlfZ2JsX0ZBRFQsCi0JCQkJICBmYWR0X2luZm9fdGFibGVbaV0ubGVuZ3RoKTsKLQkJbmFtZSA9IGZhZHRfaW5mb190YWJsZVtpXS5uYW1lOwotCi0JCS8qCi0JCSAqIEZvciBlYWNoIGV4dGVuZGVkIGZpZWxkLCBjaGVjayBmb3IgbGVuZ3RoIG1pc21hdGNoIGJldHdlZW4gdGhlCi0JCSAqIGxlZ2FjeSBsZW5ndGggZmllbGQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBYIGxlbmd0aCBmaWVsZC4KLQkJICovCi0JCWlmIChhZGRyZXNzNjQgJiYgKGFkZHJlc3M2NC0+Yml0X3dpZHRoICE9IEFDUElfTVVMXzgobGVuZ3RoKSkpIHsKLQkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiMzIvNjRYIGxlbmd0aCBtaXNtYXRjaCBpbiAlczogJWQvJWQiLAotCQkJCSAgICAgIG5hbWUsIEFDUElfTVVMXzgobGVuZ3RoKSwKLQkJCQkgICAgICBhZGRyZXNzNjQtPmJpdF93aWR0aCkpOwotCQl9Ci0KLQkJaWYgKGZhZHRfaW5mb190YWJsZVtpXS50eXBlICYgQUNQSV9GQURUX1JFUVVJUkVEKSB7Ci0JCQkvKgotCQkJICogRmllbGQgaXMgcmVxdWlyZWQgKFBtMWFfZXZlbnQsIFBtMWFfY29udHJvbCwgcG1fdGltZXIpLgotCQkJICogQm90aCB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgbm9uLXplcm8uCi0JCQkgKi8KLQkJCWlmICghYWRkcmVzczY0LT5hZGRyZXNzIHx8ICFsZW5ndGgpIHsKLQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIlJlcXVpcmVkIGZpZWxkICVzIGhhcyB6ZXJvIGFkZHJlc3MgYW5kL29yIGxlbmd0aDogJTguOFglOC44WC8lWCIsCi0JCQkJCSAgICBuYW1lLAotCQkJCQkgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3M2NC0+Ci0JCQkJCQkJICAgICAgIGFkZHJlc3MpLAotCQkJCQkgICAgbGVuZ3RoKSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZmFkdF9pbmZvX3RhYmxlW2ldLnR5cGUgJiBBQ1BJX0ZBRFRfU0VQQVJBVEVfTEVOR1RIKSB7Ci0JCQkvKgotCQkJICogRmllbGQgaXMgb3B0aW9uYWwgKFBNMkNvbnRyb2wsIEdQRTAsIEdQRTEpIEFORCBoYXMgaXRzIG93bgotCQkJICogbGVuZ3RoIGZpZWxkLiBJZiBwcmVzZW50LCBib3RoIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSB2YWxpZC4KLQkJCSAqLwotCQkJaWYgKChhZGRyZXNzNjQtPmFkZHJlc3MgJiYgIWxlbmd0aCkKLQkJCSAgICB8fCAoIWFkZHJlc3M2NC0+YWRkcmVzcyAmJiBsZW5ndGgpKSB7Ci0JCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCQkgICAgICAiT3B0aW9uYWwgZmllbGQgJXMgaGFzIHplcm8gYWRkcmVzcyBvciBsZW5ndGg6ICU4LjhYJTguOFgvJVgiLAotCQkJCQkgICAgICBuYW1lLAotCQkJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0LT4KLQkJCQkJCQkJIGFkZHJlc3MpLAotCQkJCQkgICAgICBsZW5ndGgpKTsKLQkJCX0KLQkJfQotCi0JCS8qIElmIGJvdGggMzItIGFuZCA2NC1iaXQgYWRkcmVzc2VzIGFyZSB2YWxpZCAobm9uLXplcm8pLCB0aGV5IG11c3QgbWF0Y2ggKi8KLQotCQlpZiAoYWRkcmVzczY0LT5hZGRyZXNzICYmICphZGRyZXNzMzIgJiYKLQkJICAgIChhZGRyZXNzNjQtPmFkZHJlc3MgIT0gKHU2NCkgKiBhZGRyZXNzMzIpKSB7Ci0JCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiMzIvNjRYIGFkZHJlc3MgbWlzbWF0Y2ggaW4gJXM6ICU4LjhYLyU4LjhYJTguOFgsIHVzaW5nIDY0WCIsCi0JCQkJICAgIG5hbWUsICphZGRyZXNzMzIsCi0JCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzNjQtPmFkZHJlc3MpKSk7CisJCWlmIChzb3VyY2U2NC0+YWRkcmVzcykgeworCQkJYWNwaV90Yl9pbml0X2dlbmVyaWNfYWRkcmVzcyhmYWR0X3BtX2luZm9fdGFibGVbaV0uCisJCQkJCQkgICAgIHRhcmdldCwgc291cmNlNjQtPnNwYWNlX2lkLAorCQkJCQkJICAgICBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCwKKwkJCQkJCSAgICAgc291cmNlNjQtPmFkZHJlc3MgKworCQkJCQkJICAgICAoZmFkdF9wbV9pbmZvX3RhYmxlW2ldLgorCQkJCQkJICAgICAgcmVnaXN0ZXJfbnVtICoKKwkJCQkJCSAgICAgIHBtMV9yZWdpc3Rlcl9ieXRlX3dpZHRoKSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKaW5kZXggMzczNzRiMi4uZjg2NWQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYwpAQCAtMTAzLDcgKzEwMyw5IEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhZGQgdGhlIEFDUEkgdGFibGUKKyAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhZGQgYW4gQUNQSSB0YWJsZS4gSXQgaXMgdXNlZCB0bworICogICAgICAgICAgICAgIGR5bmFtaWNhbGx5IGxvYWQgdGFibGVzIHZpYSB0aGUgTG9hZCBhbmQgbG9hZF90YWJsZSBBTUwKKyAqICAgICAgICAgICAgICBvcGVyYXRvcnMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTEyLDYgKzExNCw3IEBACiB7CiAJdTMyIGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpvdmVycmlkZV90YWJsZSA9IE5VTEw7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2FkZF90YWJsZSk7CiAKQEAgLTIwMSw2ICsyMDQsMjkgQEAKIAkJfQogCX0KIAorCS8qCisJICogQUNQSSBUYWJsZSBPdmVycmlkZToKKwkgKiBBbGxvdyB0aGUgaG9zdCB0byBvdmVycmlkZSBkeW5hbWljYWxseSBsb2FkZWQgdGFibGVzLgorCSAqLworCXN0YXR1cyA9IGFjcGlfb3NfdGFibGVfb3ZlcnJpZGUodGFibGVfZGVzYy0+cG9pbnRlciwgJm92ZXJyaWRlX3RhYmxlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgb3ZlcnJpZGVfdGFibGUpIHsKKwkJQUNQSV9JTkZPKChBRV9JTkZPLAorCQkJICAgIiU0LjRzIEAgMHglcCBUYWJsZSBvdmVycmlkZSwgcmVwbGFjZWQgd2l0aDoiLAorCQkJICAgdGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLAorCQkJICAgQUNQSV9DQVNUX1BUUih2b2lkLCB0YWJsZV9kZXNjLT5hZGRyZXNzKSkpOworCisJCS8qIFdlIGNhbiBkZWxldGUgdGhlIHRhYmxlIHRoYXQgd2FzIHBhc3NlZCBhcyBhIHBhcmFtZXRlciAqLworCisJCWFjcGlfdGJfZGVsZXRlX3RhYmxlKHRhYmxlX2Rlc2MpOworCisJCS8qIFNldHVwIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXcgdGFibGUgKi8KKworCQl0YWJsZV9kZXNjLT5hZGRyZXNzID0gQUNQSV9QVFJfVE9fUEhZU0FERFIob3ZlcnJpZGVfdGFibGUpOworCQl0YWJsZV9kZXNjLT5wb2ludGVyID0gb3ZlcnJpZGVfdGFibGU7CisJCXRhYmxlX2Rlc2MtPmxlbmd0aCA9IG92ZXJyaWRlX3RhYmxlLT5sZW5ndGg7CisJCXRhYmxlX2Rlc2MtPmZsYWdzID0gQUNQSV9UQUJMRV9PUklHSU5fT1ZFUlJJREU7CisJfQorCiAJLyogQWRkIHRoZSB0YWJsZSB0byB0aGUgZ2xvYmFsIHJvb3QgdGFibGUgbGlzdCAqLwogCiAJc3RhdHVzID0gYWNwaV90Yl9zdG9yZV90YWJsZSh0YWJsZV9kZXNjLT5hZGRyZXNzLCB0YWJsZV9kZXNjLT5wb2ludGVyLApAQCAtMjQ3LDggKzI3Myw5IEBACiAJLyogSW5jcmVhc2UgdGhlIFRhYmxlIEFycmF5IHNpemUgKi8KIAogCXRhYmxlcyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKCgoYWNwaV9zaXplKSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuCi0JCQkJICAgICAgIHNpemUgKyBBQ1BJX1JPT1RfVEFCTEVfU0laRV9JTkNSRU1FTlQpCi0JCQkJICAgICAgKiBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfZGVzYykpOworCQkJCSAgICAgICBzaXplICsKKwkJCQkgICAgICAgQUNQSV9ST09UX1RBQkxFX1NJWkVfSU5DUkVNRU5UKSAqCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MpKTsKIAlpZiAoIXRhYmxlcykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IHJvb3QgdGFibGUgYXJyYXkiKSk7CkBAIC00MDcsMjcgKzQzNCw1NiBAQAogICoKICAqIFBBUkFNRVRFUlM6ICB0YWJsZV9pbmRleCAgICAgICAgIC0gVGFibGUgaW5kZXgKICAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQorICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBEZWxldGUgYWxsIG5hbWVzcGFjZSBvYmplY3RzIGNyZWF0ZWQgd2hlbiB0aGlzIHRhYmxlIHdhcyBsb2FkZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX3RiX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIodTMyIHRhYmxlX2luZGV4KQorYWNwaV9zdGF0dXMgYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHUzMiB0YWJsZV9pbmRleCkKIHsKIAlhY3BpX293bmVyX2lkIG93bmVyX2lkOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCSh2b2lkKWFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwotCWlmICh0YWJsZV9pbmRleCA8IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudCkgewotCQlvd25lcl9pZCA9Ci0JCSAgICBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5vd25lcl9pZDsKLQl9IGVsc2UgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKLQkJcmV0dXJuOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcik7CisKKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCisJaWYgKHRhYmxlX2luZGV4ID49IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudCkgeworCisJCS8qIFRoZSB0YWJsZSBpbmRleCBkb2VzIG5vdCBleGlzdCAqLworCisJCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKKwl9CisKKwkvKiBHZXQgdGhlIG93bmVyIElEIGZvciB0aGlzIHRhYmxlLCB1c2VkIHRvIGRlbGV0ZSBuYW1lc3BhY2Ugbm9kZXMgKi8KKworCW93bmVyX2lkID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0ub3duZXJfaWQ7CiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX1RBQkxFUyk7CisKKwkvKgorCSAqIE5lZWQgdG8gYWNxdWlyZSB0aGUgbmFtZXNwYWNlIHdyaXRlciBsb2NrIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlCisJICogd2l0aCBhbnkgY29uY3VycmVudCBuYW1lc3BhY2Ugd2Fsa3MuIFRoZSBpbnRlcnByZXRlciBtdXN0IGJlCisJICogcmVsZWFzZWQgZHVyaW5nIHRoZSBkZWxldGlvbiBzaW5jZSB0aGUgYWNxdWlzaXRpb24gb2YgdGhlIGRlbGV0aW9uCisJICogbG9jayBtYXkgYmxvY2ssIGFuZCBhbHNvIHNpbmNlIHRoZSBleGVjdXRpb24gb2YgYSBuYW1lc3BhY2Ugd2FsaworCSAqIG11c3QgYmUgYWxsb3dlZCB0byB1c2UgdGhlIGludGVycHJldGVyLgorCSAqLworCWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9JTlRFUlBSRVRFUik7CisJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX3dyaXRlX2xvY2soJmFjcGlfZ2JsX25hbWVzcGFjZV9yd19sb2NrKTsKKwogCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihvd25lcl9pZCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCWFjcGlfdXRfcmVsZWFzZV93cml0ZV9sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CisKKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfSU5URVJQUkVURVIpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTM1LDggKzU5MSw4IEBACiAJKHZvaWQpYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX1RBQkxFUyk7CiAJaWYgKHRhYmxlX2luZGV4IDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50KSB7CiAJCWlzX2xvYWRlZCA9ICh1OCkKLQkJICAgIChhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS4KLQkJICAgICBmbGFncyAmIEFDUElfVEFCTEVfSVNfTE9BREVEKTsKKwkJICAgIChhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5mbGFncyAmCisJCSAgICAgQUNQSV9UQUJMRV9JU19MT0FERUQpOwogCX0KIAogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwppbmRleCAyMmNlNDg5Li5lZjdkMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwpAQCAtMTc3LDE5ICsxNzcsMjMgQEAKIAkJCSAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyKQogewogCisJLyoKKwkgKiBUaGUgcmVhc29uIHRoYXQgdGhlIEFkZHJlc3MgaXMgY2FzdCB0byBhIHZvaWQgcG9pbnRlciBpcyBzbyB0aGF0IHdlCisJICogY2FuIHVzZSAlcCB3aGljaCB3aWxsIHdvcmsgcHJvcGVybHkgb24gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBob3N0cy4KKwkgKi8KIAlpZiAoQUNQSV9DT01QQVJFX05BTUUoaGVhZGVyLT5zaWduYXR1cmUsIEFDUElfU0lHX0ZBQ1MpKSB7CiAKLQkJLyogRkFDUyBvbmx5IGhhcyBzaWduYXR1cmUgYW5kIGxlbmd0aCBmaWVsZHMgb2YgY29tbW9uIHRhYmxlIGhlYWRlciAqLworCQkvKiBGQUNTIG9ubHkgaGFzIHNpZ25hdHVyZSBhbmQgbGVuZ3RoIGZpZWxkcyAqLwogCi0JCUFDUElfSU5GTygoQUVfSU5GTywgIiU0LjRzICUwOGxYLCAlMDRYIiwKLQkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCAodW5zaWduZWQgbG9uZylhZGRyZXNzLAorCQlBQ1BJX0lORk8oKEFFX0lORk8sICIlNC40cyAlcCAlMDVYIiwKKwkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSKHZvaWQsIGFkZHJlc3MpLAogCQkJICAgaGVhZGVyLT5sZW5ndGgpKTsKIAl9IGVsc2UgaWYgKEFDUElfQ09NUEFSRV9OQU1FKGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX1NJR19SU0RQKSkgewogCiAJCS8qIFJTRFAgaGFzIG5vIGNvbW1vbiBmaWVsZHMgKi8KIAotCQlBQ1BJX0lORk8oKEFFX0lORk8sICJSU0RQICUwOGxYLCAlMDRYIChyJWQgJTYuNnMpIiwKLQkJCSAgICh1bnNpZ25lZCBsb25nKWFkZHJlc3MsCisJCUFDUElfSU5GTygoQUVfSU5GTywgIlJTRFAgJXAgJTA1WCAodiUuMmQgJTYuNnMpIiwKKwkJCSAgIEFDUElfQ0FTVF9QVFIgKHZvaWQsIGFkZHJlc3MpLAogCQkJICAgKEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfcnNkcCwgaGVhZGVyKS0+CiAJCQkgICAgcmV2aXNpb24gPgogCQkJICAgIDApID8gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwLApAQCAtMjAyLDggKzIwNiw4IEBACiAJCS8qIFN0YW5kYXJkIEFDUEkgdGFibGUgd2l0aCBmdWxsIGNvbW1vbiBoZWFkZXIgKi8KIAogCQlBQ1BJX0lORk8oKEFFX0lORk8sCi0JCQkgICAiJTQuNHMgJTA4bFgsICUwNFggKHIlZCAlNi42cyAlOC44cyAlOFggJTQuNHMgJThYKSIsCi0JCQkgICBoZWFkZXItPnNpZ25hdHVyZSwgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywKKwkJCSAgICIlNC40cyAlcCAlMDVYICh2JS4yZCAlNi42cyAlOC44cyAlMDhYICU0LjRzICUwOFgpIiwKKwkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSICh2b2lkLCBhZGRyZXNzKSwKIAkJCSAgIGhlYWRlci0+bGVuZ3RoLCBoZWFkZXItPnJldmlzaW9uLCBoZWFkZXItPm9lbV9pZCwKIAkJCSAgIGhlYWRlci0+b2VtX3RhYmxlX2lkLCBoZWFkZXItPm9lbV9yZXZpc2lvbiwKIAkJCSAgIGhlYWRlci0+YXNsX2NvbXBpbGVyX2lkLApAQCAtMjgwLDIyICsyODQsMjggQEAKICAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX2luc3RhbGxfdGFibGUKICAqCiAgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICAgICAgLSBQaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgb3IgRkFDUwotICogICAgICAgICAgICAgIEZsYWdzICAgICAgICAgICAgICAgICAgIC0gRmxhZ3MKICAqICAgICAgICAgICAgICBTaWduYXR1cmUgICAgICAgICAgICAgICAtIFRhYmxlIHNpZ25hdHVyZSwgTlVMTCBpZiBubyBuZWVkIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaAogICogICAgICAgICAgICAgIHRhYmxlX2luZGV4ICAgICAgICAgICAgIC0gSW5kZXggaW50byByb290IHRhYmxlIGFycmF5CiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogSW5zdGFsbCBhbiBBQ1BJIHRhYmxlIGludG8gdGhlIGdsb2JhbCBkYXRhIHN0cnVjdHVyZS4KKyAqIERFU0NSSVBUSU9OOiBJbnN0YWxsIGFuIEFDUEkgdGFibGUgaW50byB0aGUgZ2xvYmFsIGRhdGEgc3RydWN0dXJlLiBUaGUKKyAqICAgICAgICAgICAgICB0YWJsZSBvdmVycmlkZSBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgaGVyZSB0byBhbGxvdyB0aGUgaG9zdAorICogICAgICAgICAgICAgIE9TIHRvIHJlcGxhY2UgYW55IHRhYmxlIGJlZm9yZSBpdCBpcyBpbnN0YWxsZWQgaW4gdGhlIHJvb3QKKyAqICAgICAgICAgICAgICB0YWJsZSBhcnJheS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkCiBhY3BpX3RiX2luc3RhbGxfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCi0JCSAgICAgIHU4IGZsYWdzLCBjaGFyICpzaWduYXR1cmUsIHUzMiB0YWJsZV9pbmRleCkKKwkJICAgICAgY2hhciAqc2lnbmF0dXJlLCB1MzIgdGFibGVfaW5kZXgpCiB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKKwl1OCBmbGFnczsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV90b19pbnN0YWxsOworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqbWFwcGVkX3RhYmxlOworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqb3ZlcnJpZGVfdGFibGUgPSBOVUxMOwogCiAJaWYgKCFhZGRyZXNzKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0zMDYsNDEgKzMxNiw2OSBAQAogCiAJLyogTWFwIGp1c3QgdGhlIHRhYmxlIGhlYWRlciAqLwogCi0JdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCWlmICghdGFibGUpIHsKKwltYXBwZWRfdGFibGUgPQorCSAgICBhY3BpX29zX21hcF9tZW1vcnkoYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCWlmICghbWFwcGVkX3RhYmxlKSB7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBJZiBhIHBhcnRpY3VsYXIgc2lnbmF0dXJlIGlzIGV4cGVjdGVkLCBzaWduYXR1cmUgbXVzdCBtYXRjaCAqLworCS8qIElmIGEgcGFydGljdWxhciBzaWduYXR1cmUgaXMgZXhwZWN0ZWQgKERTRFQvRkFDUyksIGl0IG11c3QgbWF0Y2ggKi8KIAotCWlmIChzaWduYXR1cmUgJiYgIUFDUElfQ09NUEFSRV9OQU1FKHRhYmxlLT5zaWduYXR1cmUsIHNpZ25hdHVyZSkpIHsKKwlpZiAoc2lnbmF0dXJlICYmICFBQ1BJX0NPTVBBUkVfTkFNRShtYXBwZWRfdGFibGUtPnNpZ25hdHVyZSwgc2lnbmF0dXJlKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJJbnZhbGlkIHNpZ25hdHVyZSAweCVYIGZvciBBQ1BJIHRhYmxlIFslc10iLAotCQkJICAgICpBQ1BJX0NBU1RfUFRSKHUzMiwgdGFibGUtPnNpZ25hdHVyZSksIHNpZ25hdHVyZSkpOworCQkJICAgICJJbnZhbGlkIHNpZ25hdHVyZSAweCVYIGZvciBBQ1BJIHRhYmxlLCBleHBlY3RlZCBbJXNdIiwKKwkJCSAgICAqQUNQSV9DQVNUX1BUUih1MzIsIG1hcHBlZF90YWJsZS0+c2lnbmF0dXJlKSwKKwkJCSAgICBzaWduYXR1cmUpKTsKIAkJZ290byB1bm1hcF9hbmRfZXhpdDsKIAl9CiAKKwkvKgorCSAqIEFDUEkgVGFibGUgT3ZlcnJpZGU6CisJICoKKwkgKiBCZWZvcmUgd2UgaW5zdGFsbCB0aGUgdGFibGUsIGxldCB0aGUgaG9zdCBPUyBvdmVycmlkZSBpdCB3aXRoIGEgbmV3CisJICogb25lIGlmIGRlc2lyZWQuIEFueSB0YWJsZSB3aXRoaW4gdGhlIFJTRFQvWFNEVCBjYW4gYmUgcmVwbGFjZWQsCisJICogaW5jbHVkaW5nIHRoZSBEU0RUIHdoaWNoIGlzIHBvaW50ZWQgdG8gYnkgdGhlIEZBRFQuCisJICovCisJc3RhdHVzID0gYWNwaV9vc190YWJsZV9vdmVycmlkZShtYXBwZWRfdGFibGUsICZvdmVycmlkZV90YWJsZSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIG92ZXJyaWRlX3RhYmxlKSB7CisJCUFDUElfSU5GTygoQUVfSU5GTywKKwkJCSAgICIlNC40cyBAIDB4JXAgVGFibGUgb3ZlcnJpZGUsIHJlcGxhY2VkIHdpdGg6IiwKKwkJCSAgIG1hcHBlZF90YWJsZS0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSKHZvaWQsCisJCQkJCQkJCSAgYWRkcmVzcykpKTsKKworCQlhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5wb2ludGVyID0KKwkJICAgIG92ZXJyaWRlX3RhYmxlOworCQlhZGRyZXNzID0gQUNQSV9QVFJfVE9fUEhZU0FERFIob3ZlcnJpZGVfdGFibGUpOworCisJCXRhYmxlX3RvX2luc3RhbGwgPSBvdmVycmlkZV90YWJsZTsKKwkJZmxhZ3MgPSBBQ1BJX1RBQkxFX09SSUdJTl9PVkVSUklERTsKKwl9IGVsc2UgeworCQl0YWJsZV90b19pbnN0YWxsID0gbWFwcGVkX3RhYmxlOworCQlmbGFncyA9IEFDUElfVEFCTEVfT1JJR0lOX01BUFBFRDsKKwl9CisKIAkvKiBJbml0aWFsaXplIHRoZSB0YWJsZSBlbnRyeSAqLwogCiAJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0uYWRkcmVzcyA9IGFkZHJlc3M7Ci0JYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0ubGVuZ3RoID0gdGFibGUtPmxlbmd0aDsKKwlhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5sZW5ndGggPQorCSAgICB0YWJsZV90b19pbnN0YWxsLT5sZW5ndGg7CiAJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0uZmxhZ3MgPSBmbGFnczsKIAogCUFDUElfTU9WRV8zMl9UT18zMigmCiAJCQkgICAoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0uCi0JCQkgICAgc2lnbmF0dXJlKSwgdGFibGUtPnNpZ25hdHVyZSk7CisJCQkgICAgc2lnbmF0dXJlKSwgdGFibGVfdG9faW5zdGFsbC0+c2lnbmF0dXJlKTsKIAotCWFjcGlfdGJfcHJpbnRfdGFibGVfaGVhZGVyKGFkZHJlc3MsIHRhYmxlKTsKKwlhY3BpX3RiX3ByaW50X3RhYmxlX2hlYWRlcihhZGRyZXNzLCB0YWJsZV90b19pbnN0YWxsKTsKIAogCWlmICh0YWJsZV9pbmRleCA9PSBBQ1BJX1RBQkxFX0lOREVYX0RTRFQpIHsKIAogCQkvKiBHbG9iYWwgaW50ZWdlciB3aWR0aCBpcyBiYXNlZCB1cG9uIHJldmlzaW9uIG9mIHRoZSBEU0RUICovCiAKLQkJYWNwaV91dF9zZXRfaW50ZWdlcl93aWR0aCh0YWJsZS0+cmV2aXNpb24pOworCQlhY3BpX3V0X3NldF9pbnRlZ2VyX3dpZHRoKHRhYmxlX3RvX2luc3RhbGwtPnJldmlzaW9uKTsKIAl9CiAKICAgICAgIHVubWFwX2FuZF9leGl0OgotCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisJYWNwaV9vc191bm1hcF9tZW1vcnkobWFwcGVkX3RhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzksNyArNDE3LDggQEAKIAl9IGVsc2UgewogCQkvKgogCQkgKiAzMi1iaXQgcGxhdGZvcm0sIFhTRFQ6IFRydW5jYXRlIDY0LWJpdCB0byAzMi1iaXQgYW5kIHJldHVybgotCQkgKiA2NC1iaXQgcGxhdGZvcm0sIFhTRFQ6IE1vdmUgKHVuYWxpZ25lZCkgNjQtYml0IHRvIGxvY2FsLCByZXR1cm4gNjQtYml0CisJCSAqIDY0LWJpdCBwbGF0Zm9ybSwgWFNEVDogTW92ZSAodW5hbGlnbmVkKSA2NC1iaXQgdG8gbG9jYWwsCisJCSAqICByZXR1cm4gNjQtYml0CiAJCSAqLwogCQlBQ1BJX01PVkVfNjRfVE9fNjQoJmFkZHJlc3M2NCwgdGFibGVfZW50cnkpOwogCkBAIC0zODksNyArNDI4LDggQEAKIAkJCS8qIFdpbGwgdHJ1bmNhdGUgNjQtYml0IGFkZHJlc3MgdG8gMzIgYml0cywgaXNzdWUgd2FybmluZyAqLwogCiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkJICAgICAgIjY0LWJpdCBQaHlzaWNhbCBBZGRyZXNzIGluIFhTRFQgaXMgdG9vIGxhcmdlICglOC44WCU4LjhYKSwgdHJ1bmNhdGluZyIsCisJCQkJICAgICAgIjY0LWJpdCBQaHlzaWNhbCBBZGRyZXNzIGluIFhTRFQgaXMgdG9vIGxhcmdlICglOC44WCU4LjhYKSwiCisJCQkJICAgICAgIiB0cnVuY2F0aW5nIiwKIAkJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0KSkpOwogCQl9CiAjZW5kaWYKQEAgLTQwMiw3ICs0NDIsNiBAQAogICogRlVOQ1RJT046ICAgIGFjcGlfdGJfcGFyc2Vfcm9vdF90YWJsZQogICoKICAqIFBBUkFNRVRFUlM6ICBSc2RwICAgICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIFJTRFAKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgICAgICAgICAtIEZsYWdzCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTQxNiw3ICs0NTUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMgX19pbml0Ci1hY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHJzZHBfYWRkcmVzcywgdTggZmxhZ3MpCithY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHJzZHBfYWRkcmVzcykKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwOwogCXUzMiB0YWJsZV9lbnRyeV9zaXplOwpAQCAtNTEzLDEzICs1NTIsMTIgQEAKIAogCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHRhYmxlcyBkZXNjcmliZWQgaW4gdGhlIHJvb3QgdGFibGUgKi8KIAotCXRhYmxlX2NvdW50ID0KLQkgICAgKHUzMikgKCh0YWJsZS0+bGVuZ3RoIC0KLQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKSAvIHRhYmxlX2VudHJ5X3NpemUpOwotCisJdGFibGVfY291bnQgPSAodTMyKSgodGFibGUtPmxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKSAvCisJCQkgICAgdGFibGVfZW50cnlfc2l6ZSk7CiAJLyoKLQkgKiBGaXJzdCB0d28gZW50cmllcyBpbiB0aGUgdGFibGUgYXJyYXkgYXJlIHJlc2VydmVkIGZvciB0aGUgRFNEVCBhbmQgRkFDUywKLQkgKiB3aGljaCBhcmUgbm90IGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIFJTRFQvWFNEVCAtIHRoZXkgY29tZSBmcm9tIHRoZSBGQURUCisJICogRmlyc3QgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIGFycmF5IGFyZSByZXNlcnZlZCBmb3IgdGhlIERTRFQKKwkgKiBhbmQgRkFDUywgd2hpY2ggYXJlIG5vdCBhY3R1YWxseSBwcmVzZW50IGluIHRoZSBSU0RUL1hTRFQgLSB0aGV5CisJICogY29tZSBmcm9tIHRoZSBGQURUCiAJICovCiAJdGFibGVfZW50cnkgPQogCSAgICBBQ1BJX0NBU1RfUFRSKHU4LCB0YWJsZSkgKyBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKTsKQEAgLTU2NywxNCArNjA1LDE0IEBACiAJICovCiAJZm9yIChpID0gMjsgaSA8IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudDsgaSsrKSB7CiAJCWFjcGlfdGJfaW5zdGFsbF90YWJsZShhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLgotCQkJCSAgICAgIGFkZHJlc3MsIGZsYWdzLCBOVUxMLCBpKTsKKwkJCQkgICAgICBhZGRyZXNzLCBOVUxMLCBpKTsKIAogCQkvKiBTcGVjaWFsIGNhc2UgZm9yIEZBRFQgLSBnZXQgdGhlIERTRFQgYW5kIEZBQ1MgKi8KIAogCQlpZiAoQUNQSV9DT01QQVJFX05BTUUKIAkJICAgICgmYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5zaWduYXR1cmUsCiAJCSAgICAgQUNQSV9TSUdfRkFEVCkpIHsKLQkJCWFjcGlfdGJfcGFyc2VfZmFkdChpLCBmbGFncyk7CisJCQlhY3BpX3RiX3BhcnNlX2ZhZHQoaSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKaW5kZXggYWIwYWZmMy4uYTg4ZjAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKQEAgLTE1MCw4ICsxNTAsNyBAQAogCSAqIFJvb3QgVGFibGUgQXJyYXkuIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBSU0RUL1hTRFQKIAkgKiBpbiBhIGNvbW1vbiwgbW9yZSB1c2VhYmxlIGZvcm1hdC4KIAkgKi8KLQlzdGF0dXMgPQotCSAgICBhY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUocnNkcF9hZGRyZXNzLCBBQ1BJX1RBQkxFX09SSUdJTl9NQVBQRUQpOworCXN0YXR1cyA9IGFjcGlfdGJfcGFyc2Vfcm9vdF90YWJsZShyc2RwX2FkZHJlc3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0yNDcsNyArMjQ2LDcgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfdGFibGVfaGVhZGVyCiAgKgpAQCAtMjYyLDcgKzI2MSw3IEBACiAgKiBOT1RFOiAgICAgICAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGluIHVubWFwcGluZyB0aGUgaGVhZGVyIHdpdGgKICAqICAgICAgICAgICAgICBhY3BpX29zX3VubWFwX21lbW9yeQogICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGVfaGVhZGVyKGNoYXIgKnNpZ25hdHVyZSwKIAkJICAgICAgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKm91dF90YWJsZV9oZWFkZXIpCkBAIC0yNzcsOSArMjc2LDggQEAKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKgotCSAqIFdhbGsgdGhlIHJvb3QgdGFibGUgbGlzdAotCSAqLworCS8qIFdhbGsgdGhlIHJvb3QgdGFibGUgbGlzdCAqLworCiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuY291bnQ7IGkrKykgewogCQlpZiAoIUFDUElfQ09NUEFSRV9OQU1FCiAJCSAgICAoJihhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLnNpZ25hdHVyZSksCkBAIC0yOTIsOCArMjkwLDggQEAKIAkJfQogCiAJCWlmICghYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5wb2ludGVyKSB7Ci0JCQlpZiAoKGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0uCi0JCQkgICAgIGZsYWdzICYgQUNQSV9UQUJMRV9PUklHSU5fTUFTSykgPT0KKwkJCWlmICgoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5mbGFncyAmCisJCQkgICAgIEFDUElfVEFCTEVfT1JJR0lOX01BU0spID09CiAJCQkgICAgQUNQSV9UQUJMRV9PUklHSU5fTUFQUEVEKSB7CiAJCQkJaGVhZGVyID0KIAkJCQkgICAgYWNwaV9vc19tYXBfbWVtb3J5KGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC4KQEAgLTMyNCw3ICszMjIsNyBAQAogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGVfaGVhZGVyKQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3VubG9hZF90YWJsZV9pZAogICoKQEAgLTM3NSw3ICszNzMsNyBAQAogICoKICAqIERFU0NSSVBUSU9OOiBGaW5kcyBhbmQgdmVyaWZpZXMgYW4gQUNQSSB0YWJsZS4KICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShjaGFyICpzaWduYXR1cmUsCiAJICAgICAgIHUzMiBpbnN0YW5jZSwgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqb3V0X3RhYmxlLApAQCAtMzkxLDkgKzM4OSw4IEBACiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyoKLQkgKiBXYWxrIHRoZSByb290IHRhYmxlIGxpc3QKLQkgKi8KKwkvKiBXYWxrIHRoZSByb290IHRhYmxlIGxpc3QgKi8KKwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyBpKyspIHsKIAkJaWYgKCFBQ1BJX0NPTVBBUkVfTkFNRQogCQkgICAgKCYoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5zaWduYXR1cmUpLApAQCAtNTAyLDcgKzQ5OSw2IEBACiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV90Yl9sb2FkX25hbWVzcGFjZSh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwogCXUzMiBpOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9sb2FkX25hbWVzcGFjZSk7CkBAIC01MjYsNTggKzUyMiwyOCBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKgotCSAqIEZpbmQgRFNEVCB0YWJsZQotCSAqLwotCXN0YXR1cyA9Ci0JICAgIGFjcGlfb3NfdGFibGVfb3ZlcnJpZGUoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LgotCQkJCSAgIHRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdLnBvaW50ZXIsCi0JCQkJICAgJnRhYmxlKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgdGFibGUpIHsKLQkJLyoKLQkJICogRFNEVCB0YWJsZSBoYXMgYmVlbiBmb3VuZAotCQkgKi8KLQkJYWNwaV90Yl9kZWxldGVfdGFibGUoJmFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC4KLQkJCQkgICAgIHRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdKTsKLQkJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdLnBvaW50ZXIgPQotCQkgICAgdGFibGU7Ci0JCWFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbQUNQSV9UQUJMRV9JTkRFWF9EU0RUXS5sZW5ndGggPQotCQkgICAgdGFibGUtPmxlbmd0aDsKLQkJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdLmZsYWdzID0KLQkJICAgIEFDUElfVEFCTEVfT1JJR0lOX1VOS05PV047Ci0KLQkJQUNQSV9JTkZPKChBRV9JTkZPLCAiVGFibGUgRFNEVCByZXBsYWNlZCBieSBob3N0IE9TIikpOwotCQlhY3BpX3RiX3ByaW50X3RhYmxlX2hlYWRlcigwLCB0YWJsZSk7Ci0KLQkJaWYgKG5vX2F1dG9fc3NkdCA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJBQ1BJOiBEU0RUIG92ZXJyaWRlIHVzZXMgb3JpZ2luYWwgU1NEVHMgdW5sZXNzIFwiYWNwaV9ub19hdXRvX3NzZHRcIlxuIik7Ci0JCX0KLQl9CisJLyogQSB2YWxpZCBEU0RUIGlzIHJlcXVpcmVkICovCiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX3RiX3ZlcmlmeV90YWJsZSgmYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LgogCQkJCSB0YWJsZXNbQUNQSV9UQUJMRV9JTkRFWF9EU0RUXSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAKLQkJLyogQSB2YWxpZCBEU0RUIGlzIHJlcXVpcmVkICovCi0KIAkJc3RhdHVzID0gQUVfTk9fQUNQSV9UQUJMRVM7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwogCi0JLyoKLQkgKiBMb2FkIGFuZCBwYXJzZSB0YWJsZXMuCi0JICovCisJLyogTG9hZCBhbmQgcGFyc2UgdGFibGVzICovCisKIAlzdGF0dXMgPSBhY3BpX25zX2xvYWRfdGFibGUoQUNQSV9UQUJMRV9JTkRFWF9EU0RULCBhY3BpX2dibF9yb290X25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQkvKgotCSAqIExvYWQgYW55IFNTRFQgb3IgUFNEVCB0YWJsZXMuIE5vdGU6IExvb3AgbGVhdmVzIHRhYmxlcyBsb2NrZWQKLQkgKi8KKwkvKiBMb2FkIGFueSBTU0RUIG9yIFBTRFQgdGFibGVzLiBOb3RlOiBMb29wIGxlYXZlcyB0YWJsZXMgbG9ja2VkICovCisKIAkodm9pZClhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyArK2kpIHsKIAkJaWYgKCghQUNQSV9DT01QQVJFX05BTUUKQEAgLTYzMCw5ICs1OTYsOCBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2xvYWRfdGFibGVzKTsKIAotCS8qCi0JICogTG9hZCB0aGUgbmFtZXNwYWNlIGZyb20gdGhlIHRhYmxlcwotCSAqLworCS8qIExvYWQgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSB0YWJsZXMgKi8KKwogCXN0YXR1cyA9IGFjcGlfdGJfbG9hZF9uYW1lc3BhY2UoKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYwppbmRleCBiN2ZjOGRkLi44NWVhODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jCkBAIC03NSw4ICs3NSw4IEBACiAJICogTm90ZTogU29tZXRpbWVzIHRoZXJlIGV4aXN0cyBtb3JlIHRoYW4gb25lIFJTRFAgaW4gbWVtb3J5OyB0aGUgdmFsaWQKIAkgKiBSU0RQIGhhcyBhIHZhbGlkIGNoZWNrc3VtLCBhbGwgb3RoZXJzIGhhdmUgYW4gaW52YWxpZCBjaGVja3N1bS4KIAkgKi8KLQlpZiAoQUNQSV9TVFJOQ01QKChjaGFyICopcnNkcCwgQUNQSV9TSUdfUlNEUCwgc2l6ZW9mKEFDUElfU0lHX1JTRFApIC0gMSkKLQkgICAgIT0gMCkgeworCWlmIChBQ1BJX1NUUk5DTVAoKGNoYXIgKilyc2RwLCBBQ1BJX1NJR19SU0RQLAorCQkJIHNpemVvZihBQ1BJX1NJR19SU0RQKSAtIDEpICE9IDApIHsKIAogCQkvKiBOb3BlLCBCQUQgU2lnbmF0dXJlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCmluZGV4IGIwZGNmZDMuLjkxOTYyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYwpAQCAtMTM1LDExICsxMzUsMTEgQEAKIAkgKiBJbiBnZW5lcmFsLCB0aGUgZXh0ZXJuYWwgb2JqZWN0IHdpbGwgYmUgdGhlIHNhbWUgdHlwZSBhcwogCSAqIHRoZSBpbnRlcm5hbCBvYmplY3QKIAkgKi8KLQlleHRlcm5hbF9vYmplY3QtPnR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpOworCWV4dGVybmFsX29iamVjdC0+dHlwZSA9IGludGVybmFsX29iamVjdC0+Y29tbW9uLnR5cGU7CiAKIAkvKiBIb3dldmVyLCBvbmx5IGEgbGltaXRlZCBudW1iZXIgb2YgZXh0ZXJuYWwgdHlwZXMgYXJlIHN1cHBvcnRlZCAqLwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpKSB7CisJc3dpdGNoIChpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCWV4dGVybmFsX29iamVjdC0+c3RyaW5nLnBvaW50ZXIgPSAoY2hhciAqKWRhdGFfc3BhY2U7CkBAIC0yMjIsOCArMjIyLDggQEAKIAkJICovCiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIlVuc3VwcG9ydGVkIG9iamVjdCB0eXBlLCBjYW5ub3QgY29udmVydCB0byBleHRlcm5hbCBvYmplY3Q6ICVzIiwKLQkJCSAgICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCSAgKGludGVybmFsX29iamVjdCkpKSk7CisJCQkgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKGludGVybmFsX29iamVjdC0+Y29tbW9uLgorCQkJCQkJICB0eXBlKSkpOwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9TVVBQT1JUKTsKIAl9CkBAIC0zNTUsNyArMzU1LDcgQEAKIAlpbmZvLm9iamVjdF9zcGFjZSA9IDA7CiAJaW5mby5udW1fcGFja2FnZXMgPSAxOwogCi0JZXh0ZXJuYWxfb2JqZWN0LT50eXBlID0gQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW50ZXJuYWxfb2JqZWN0KTsKKwlleHRlcm5hbF9vYmplY3QtPnR5cGUgPSBpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlOwogCWV4dGVybmFsX29iamVjdC0+cGFja2FnZS5jb3VudCA9IGludGVybmFsX29iamVjdC0+cGFja2FnZS5jb3VudDsKIAlleHRlcm5hbF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX0NBU1RfUFRSKHVuaW9uIGFjcGlfb2JqZWN0LAogCQkJCQkJCSAgaW5mby5mcmVlX3NwYWNlKTsKQEAgLTM5OSw3ICszOTksNyBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2lvYmplY3RfdG9fZW9iamVjdCk7CiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW50ZXJuYWxfb2JqZWN0KSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCWlmIChpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCS8qCiAJCSAqIFBhY2thZ2Ugb2JqZWN0OiAgQ29weSBhbGwgc3Vib2JqZWN0cyAoaW5jbHVkaW5nCiAJCSAqIG5lc3RlZCBwYWNrYWdlcykKQEAgLTQ5Niw4ICs0OTYsOSBAQAogCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAogCQlpbnRlcm5hbF9vYmplY3QtPnN0cmluZy5wb2ludGVyID0KLQkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGV4dGVybmFsX29iamVjdC0+c3RyaW5nLgotCQkJCQkgbGVuZ3RoICsgMSk7CisJCSAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoYWNwaV9zaXplKQorCQkJCQkgZXh0ZXJuYWxfb2JqZWN0LT5zdHJpbmcubGVuZ3RoICsgMSk7CisKIAkJaWYgKCFpbnRlcm5hbF9vYmplY3QtPnN0cmluZy5wb2ludGVyKSB7CiAJCQlnb3RvIGVycm9yX2V4aXQ7CiAJCX0KQEAgLTY5Nyw3ICs2OTgsNyBAQAogCiAJLyogSGFuZGxlIHRoZSBvYmplY3RzIHdpdGggZXh0cmEgZGF0YSAqLwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShkZXN0X2Rlc2MpKSB7CisJc3dpdGNoIChkZXN0X2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCQkvKgogCQkgKiBBbGxvY2F0ZSBhbmQgY29weSB0aGUgYWN0dWFsIGJ1ZmZlciBpZiBhbmQgb25seSBpZjoKQEAgLTgxNCw4ICs4MTUsOCBAQAogCQkJICogVGhpcyBpcyBhIHNpbXBsZSBvYmplY3QsIGp1c3QgY29weSBpdAogCQkJICovCiAJCQl0YXJnZXRfb2JqZWN0ID0KLQkJCSAgICBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCQkgICAoc291cmNlX29iamVjdCkpOworCQkJICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChzb3VyY2Vfb2JqZWN0LT4KKwkJCQkJCQkgICBjb21tb24udHlwZSk7CiAJCQlpZiAoIXRhcmdldF9vYmplY3QpIHsKIAkJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJCQl9CkBAIC04OTIsNyArODkzLDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pcGFja2FnZV90b19pcGFja2FnZSk7CiAKLQlkZXN0X29iai0+Y29tbW9uLnR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2Vfb2JqKTsKKwlkZXN0X29iai0+Y29tbW9uLnR5cGUgPSBzb3VyY2Vfb2JqLT5jb21tb24udHlwZTsKIAlkZXN0X29iai0+Y29tbW9uLmZsYWdzID0gc291cmNlX29iai0+Y29tbW9uLmZsYWdzOwogCWRlc3Rfb2JqLT5wYWNrYWdlLmNvdW50ID0gc291cmNlX29iai0+cGFja2FnZS5jb3VudDsKIApAQCAtOTUwLDE1ICs5NTEsMTQgQEAKIAogCS8qIENyZWF0ZSB0aGUgdG9wIGxldmVsIG9iamVjdCAqLwogCi0JKmRlc3RfZGVzYyA9Ci0JICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykpOworCSpkZXN0X2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3Qoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAlpZiAoISpkZXN0X2Rlc2MpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogCiAJLyogQ29weSB0aGUgb2JqZWN0IGFuZCBwb3NzaWJsZSBzdWJvYmplY3RzICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoc291cmNlX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCQlzdGF0dXMgPQogCQkgICAgYWNwaV91dF9jb3B5X2lwYWNrYWdlX3RvX2lwYWNrYWdlKHNvdXJjZV9kZXNjLCAqZGVzdF9kZXNjLAogCQkJCQkJICAgICAgd2Fsa19zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKaW5kZXggYTBiZTllMy4uYTVlZTIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYwpAQCAtODYsNyArODYsNyBAQAogCSAqIE11c3QgZGVsZXRlIG9yIGZyZWUgYW55IHBvaW50ZXJzIHdpdGhpbiB0aGUgb2JqZWN0IHRoYXQgYXJlIG5vdAogCSAqIGFjdHVhbCBBQ1BJIG9iamVjdHMgKGZvciBleGFtcGxlLCBhIHJhdyBidWZmZXIgcG9pbnRlcikuCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmplY3QpKSB7CisJc3dpdGNoIChvYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsCkBAIC0zODIsNyArMzgyLDcgQEAKIAkJCQkJICBvYmplY3QsIG5ld19jb3VudCkpOwogCQl9CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9iamVjdCkgPT0gQUNQSV9UWVBFX01FVEhPRCkgeworCQlpZiAob2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSB7CiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0FMTE9DQVRJT05TLAogCQkJCQkgICJNZXRob2QgT2JqICVwIFJlZnM9JVgsIFtEZWNyZW1lbnRlZF1cbiIsCiAJCQkJCSAgb2JqZWN0LCBuZXdfY291bnQpKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQkgKiBBbGwgc3ViLW9iamVjdHMgbXVzdCBoYXZlIHRoZWlyIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZCBhbHNvLgogCQkgKiBEaWZmZXJlbnQgb2JqZWN0IHR5cGVzIGhhdmUgZGlmZmVyZW50IHN1Ym9iamVjdHMuCiAJCSAqLwotCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9iamVjdCkpIHsKKwkJc3dpdGNoIChvYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX0RFVklDRToKIAkJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgogCQljYXNlIEFDUElfVFlQRV9QT1dFUjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCmluZGV4IDljOTg5N2QuLjAwNmIxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwpAQCAtNTksMjYgKzU5LDM1IEBACiAKIC8qCiAgKiBTdHJpbmdzIHN1cHBvcnRlZCBieSB0aGUgX09TSSBwcmVkZWZpbmVkIChpbnRlcm5hbCkgbWV0aG9kLgorICoKKyAqIE1hcmNoIDIwMDk6IFJlbW92ZWQgIkxpbnV4IiBhcyB0aGlzIGhvc3Qgbm8gbG9uZ2VyIHdhbnRzIHRvIHJlc3BvbmQgdHJ1ZQorICogZm9yIHRoaXMgc3RyaW5nLiBCYXNpY2FsbHksIHRoZSBvbmx5IHNhZmUgT1Mgc3RyaW5ncyBhcmUgd2luZG93cy1yZWxhdGVkCisgKiBhbmQgaW4gbWFueSBvciBtb3N0IGNhc2VzIHJlcHJlc2VudCB0aGUgb25seSB0ZXN0IHBhdGggd2l0aGluIHRoZQorICogQklPUy1wcm92aWRlZCBBU0wgY29kZS4KKyAqCisgKiBUaGUgc2Vjb25kIGVsZW1lbnQgb2YgZWFjaCBlbnRyeSBpcyB1c2VkIHRvIHRyYWNrIHRoZSBuZXdlc3QgdmVyc2lvbiBvZgorICogV2luZG93cyB0aGF0IHRoZSBCSU9TIGhhcyByZXF1ZXN0ZWQuCiAgKi8KLXN0YXRpYyBjaGFyICphY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW10gPSB7CitzdGF0aWMgc3RydWN0IGFjcGlfaW50ZXJmYWNlX2luZm8gYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtdID0gewogCS8qIE9wZXJhdGluZyBTeXN0ZW0gVmVuZG9yIFN0cmluZ3MgKi8KIAotCSJXaW5kb3dzIDIwMDAiLAkJLyogV2luZG93cyAyMDAwICovCi0JIldpbmRvd3MgMjAwMSIsCQkvKiBXaW5kb3dzIFhQICovCi0JIldpbmRvd3MgMjAwMSBTUDEiLAkvKiBXaW5kb3dzIFhQIFNQMSAqLwotCSJXaW5kb3dzIDIwMDEgU1AyIiwJLyogV2luZG93cyBYUCBTUDIgKi8KLQkiV2luZG93cyAyMDAxLjEiLAkvKiBXaW5kb3dzIFNlcnZlciAyMDAzICovCi0JIldpbmRvd3MgMjAwMS4xIFNQMSIsCS8qIFdpbmRvd3MgU2VydmVyIDIwMDMgU1AxIC0gQWRkZWQgMDMvMjAwNiAqLwotCSJXaW5kb3dzIDIwMDYiLAkJLyogV2luZG93cyBWaXN0YSAtIEFkZGVkIDAzLzIwMDYgKi8KKwl7IldpbmRvd3MgMjAwMCIsIEFDUElfT1NJX1dJTl8yMDAwfSwJLyogV2luZG93cyAyMDAwICovCisJeyJXaW5kb3dzIDIwMDEiLCBBQ1BJX09TSV9XSU5fWFB9LAkvKiBXaW5kb3dzIFhQICovCisJeyJXaW5kb3dzIDIwMDEgU1AxIiwgQUNQSV9PU0lfV0lOX1hQX1NQMX0sCS8qIFdpbmRvd3MgWFAgU1AxICovCisJeyJXaW5kb3dzIDIwMDEuMSIsIEFDUElfT1NJX1dJTlNSVl8yMDAzfSwJLyogV2luZG93cyBTZXJ2ZXIgMjAwMyAqLworCXsiV2luZG93cyAyMDAxIFNQMiIsIEFDUElfT1NJX1dJTl9YUF9TUDJ9LAkvKiBXaW5kb3dzIFhQIFNQMiAqLworCXsiV2luZG93cyAyMDAxLjEgU1AxIiwgQUNQSV9PU0lfV0lOU1JWXzIwMDNfU1AxfSwJLyogV2luZG93cyBTZXJ2ZXIgMjAwMyBTUDEgLSBBZGRlZCAwMy8yMDA2ICovCisJeyJXaW5kb3dzIDIwMDYiLCBBQ1BJX09TSV9XSU5fVklTVEF9LAkvKiBXaW5kb3dzIFZpc3RhIC0gQWRkZWQgMDMvMjAwNiAqLwogCiAJLyogRmVhdHVyZSBHcm91cCBTdHJpbmdzICovCiAKLQkiRXh0ZW5kZWQgQWRkcmVzcyBTcGFjZSBEZXNjcmlwdG9yIgotCSAgICAvKgotCSAgICAgKiBBbGwgIm9wdGlvbmFsIiBmZWF0dXJlIGdyb3VwIHN0cmluZ3MgKGZlYXR1cmVzIHRoYXQgYXJlIGltcGxlbWVudGVkCi0JICAgICAqIGJ5IHRoZSBob3N0KSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGhvc3QgdmVyc2lvbiBvZgotCSAgICAgKiBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSBhZGRlZCBoZXJlLgotCSAgICAgKi8KKwl7IkV4dGVuZGVkIEFkZHJlc3MgU3BhY2UgRGVzY3JpcHRvciIsIDB9CisKKwkvKgorCSAqIEFsbCAib3B0aW9uYWwiIGZlYXR1cmUgZ3JvdXAgc3RyaW5ncyAoZmVhdHVyZXMgdGhhdCBhcmUgaW1wbGVtZW50ZWQKKwkgKiBieSB0aGUgaG9zdCkgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBob3N0IHZlcnNpb24gb2YKKwkgKiBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSBhZGRlZCBoZXJlLgorCSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk4LDYgKzEwNyw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnN0cmluZ19kZXNjOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjOworCXUzMiByZXR1cm5fdmFsdWU7CiAJdTMyIGk7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X29zaV9pbXBsZW1lbnRhdGlvbik7CkBAIC0xMTYsMTkgKzEyNiwyOCBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKLQkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZSBpcyAwLCBOT1QtU1VQUE9SVEVEICovCisJLyogRGVmYXVsdCByZXR1cm4gdmFsdWUgaXMgMCwgTk9UIFNVUFBPUlRFRCAqLwogCi0JcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSAwOwotCXdhbGtfc3RhdGUtPnJldHVybl9kZXNjID0gcmV0dXJuX2Rlc2M7CisJcmV0dXJuX3ZhbHVlID0gMDsKIAogCS8qIENvbXBhcmUgaW5wdXQgc3RyaW5nIHRvIHN0YXRpYyB0YWJsZSBvZiBzdXBwb3J0ZWQgaW50ZXJmYWNlcyAqLwogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfQVJSQVlfTEVOR1RIKGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWQpOyBpKyspIHsKLQkJaWYgKCFBQ1BJX1NUUkNNUAotCQkgICAgKHN0cmluZ19kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJICAgICBhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldKSkgewotCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQzMl9NQVg7Ci0JCQlnb3RvIGRvbmU7CisJCWlmICghQUNQSV9TVFJDTVAoc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyLAorCQkJCSBhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldLm5hbWUpKSB7CisJCQkvKgorCQkJICogVGhlIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQuCisJCQkgKiBVcGRhdGUgdGhlIG9zaV9kYXRhIGlmIG5lY2Vzc2FyeS4gV2Uga2VlcCB0cmFjayBvZiB0aGUgbGF0ZXN0CisJCQkgKiB2ZXJzaW9uIG9mIFdpbmRvd3MgdGhhdCBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIEJJT1MuCisJCQkgKi8KKwkJCWlmIChhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldLnZhbHVlID4KKwkJCSAgICBhY3BpX2dibF9vc2lfZGF0YSkgeworCQkJCWFjcGlfZ2JsX29zaV9kYXRhID0KKwkJCQkgICAgYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXS52YWx1ZTsKKwkJCX0KKworCQkJcmV0dXJuX3ZhbHVlID0gQUNQSV9VSU5UMzJfTUFYOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC0xMzksMTUgKzE1OCwyMiBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlKHN0cmluZ19kZXNjLT5zdHJpbmcucG9pbnRlcik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9VSU5UMzJfTUFYOworCisJCS8qIFRoZSBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkICovCisKKwkJcmV0dXJuX3ZhbHVlID0gQUNQSV9VSU5UMzJfTUFYOwogCX0KIAotZG9uZToKLQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTkZPLCAiQUNQSTogQklPUyBfT1NJKCVzKSAlc3N1cHBvcnRlZFxuIiwKLQkJc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyLAotCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9PSAwID8gIm5vdC0iIDogIiIpKTsKK2V4aXQ6CisJQUNQSV9ERUJVR19QUklOVF9SQVcgKChBQ1BJX0RCX0lORk8sCisJCSJBQ1BJOiBCSU9TIF9PU0koJXMpIGlzICVzc3VwcG9ydGVkXG4iLAorCQlzdHJpbmdfZGVzYy0+c3RyaW5nLnBvaW50ZXIsIHJldHVybl92YWx1ZSA9PSAwID8gIm5vdCAiIDogIiIpKTsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJLyogQ29tcGxldGUgdGhlIHJldHVybiB2YWx1ZSAqLworCisJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSByZXR1cm5fdmFsdWU7CisJd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2MgPSByZXR1cm5fZGVzYzsKKwlyZXR1cm5fQUNQSV9TVEFUVVMgKEFFX09LKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE2Nyw4ICsxOTMsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfQVJSQVlfTEVOR1RIKGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWQpOyBpKyspIHsKLQkJaWYgKCFBQ1BJX1NUUkNNUChpbnRlcmZhY2UsIGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWRbaV0pKSB7Ci0JCQkqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXSA9ICdcMCc7CisJCWlmICghQUNQSV9TVFJDTVAoaW50ZXJmYWNlLCBhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldLm5hbWUpKSB7CisJCQkqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXS5uYW1lID0gJ1wwJzsKIAkJCXJldHVybiBBRV9PSzsKIAkJfQogCX0KQEAgLTI0OCw3ICsyNzQsNyBAQAogCiAJLyogTWFwIHRoZSByZXR1cm4gb2JqZWN0IHR5cGUgdG8gdGhlIGJpdG1hcHBlZCB0eXBlICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpKSB7CisJc3dpdGNoICgoaW5mby0+cmV0dXJuX29iamVjdCktPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJcmV0dXJuX2J0eXBlID0gQUNQSV9CVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTQxOCw3ICs0NDQsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewogCiAJCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgSElEIHRvIHN0cmluZyAqLwogCkBAIC00NTksNyArNDg1LDcgQEAKIAkJCSAgc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCAqb25lX2NpZCkKIHsKIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCiAJCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgQ0lEIHRvIHN0cmluZyAqLwpAQCAtNTI3LDcgKzU1Myw3IEBACiAJLyogR2V0IHRoZSBudW1iZXIgb2YgX0NJRHMgcmV0dXJuZWQgKi8KIAogCWNvdW50ID0gMTsKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCQljb3VudCA9IG9ial9kZXNjLT5wYWNrYWdlLmNvdW50OwogCX0KIApAQCAtNTU1LDcgKzU4MSw3IEBACiAKIAkvKiBUaGUgX0NJRCBvYmplY3QgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBDSUQgb3IgYSBwYWNrYWdlIChsaXN0KSBvZiBDSURzICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCiAJCS8qIFRyYW5zbGF0ZSBlYWNoIHBhY2thZ2UgZWxlbWVudCAqLwogCkBAIC02MjAsNyArNjQ2LDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAogCQkvKiBDb252ZXJ0IHRoZSBOdW1lcmljIFVJRCB0byBzdHJpbmcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCmluZGV4IGEzYWI5ZDkuLjU5ZTQ2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKQEAgLTI5NCwxMiArMjk0LDkgQEAKIAkvKiBBQ1BJX0JJVFJFR19HTE9CQUxfTE9DS19SRUxFQVNFICAqLyB7QUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKIAkJCQkJCUFDUElfQklUUE9TSVRJT05fR0xPQkFMX0xPQ0tfUkVMRUFTRSwKIAkJCQkJCUFDUElfQklUTUFTS19HTE9CQUxfTE9DS19SRUxFQVNFfSwKLQkvKiBBQ1BJX0JJVFJFR19TTEVFUF9UWVBFX0EgICAgICAgICAqLyB7QUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKLQkJCQkJCUFDUElfQklUUE9TSVRJT05fU0xFRVBfVFlQRV9YLAotCQkJCQkJQUNQSV9CSVRNQVNLX1NMRUVQX1RZUEVfWH0sCi0JLyogQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9CICAgICAgICAgKi8ge0FDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCi0JCQkJCQlBQ1BJX0JJVFBPU0lUSU9OX1NMRUVQX1RZUEVfWCwKLQkJCQkJCUFDUElfQklUTUFTS19TTEVFUF9UWVBFX1h9LAorCS8qIEFDUElfQklUUkVHX1NMRUVQX1RZUEUgICAgICAgICAgICovIHtBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAorCQkJCQkJQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9UWVBFLAorCQkJCQkJQUNQSV9CSVRNQVNLX1NMRUVQX1RZUEV9LAogCS8qIEFDUElfQklUUkVHX1NMRUVQX0VOQUJMRSAgICAgICAgICovIHtBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkJQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9FTkFCTEUsCiAJCQkJCQlBQ1BJX0JJVE1BU0tfU0xFRVBfRU5BQkxFfSwKQEAgLTQ3Niw3ICs0NzMsNyBAQAogCQlyZXR1cm4gKCJbTlVMTCBPYmplY3QgRGVzY3JpcHRvcl0iKTsKIAl9CiAKLQlyZXR1cm4gKGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpKTsKKwlyZXR1cm4gKGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShvYmpfZGVzYy0+Y29tbW9uLnR5cGUpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc0OSw3ICs3NDYsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fT1dORVJJRF9NQVNLUzsgaSsrKSB7CiAJCWFjcGlfZ2JsX293bmVyX2lkX21hc2tbaV0gPSAwOwogCX0KLQlhY3BpX2dibF9vd25lcl9pZF9tYXNrW0FDUElfTlVNX09XTkVSSURfTUFTS1MgLSAxXSA9IDB4ODAwMDAwMDA7CS8qIExhc3QgSUQgaXMgbmV2ZXIgdmFsaWQgKi8KKworCS8qIExhc3Qgb3duZXJfaUQgaXMgbmV2ZXIgdmFsaWQgKi8KKworCWFjcGlfZ2JsX293bmVyX2lkX21hc2tbQUNQSV9OVU1fT1dORVJJRF9NQVNLUyAtIDFdID0gMHg4MDAwMDAwMDsKIAogCS8qIEdQRSBzdXBwb3J0ICovCiAKQEAgLTc4OSw2ICs3ODksNyBAQAogCWFjcGlfZ2JsX3RyYWNlX2RiZ19sYXllciA9IDA7CiAJYWNwaV9nYmxfZGVidWdnZXJfY29uZmlndXJhdGlvbiA9IERFQlVHR0VSX1RIUkVBRElORzsKIAlhY3BpX2dibF9kYl9vdXRwdXRfZmxhZ3MgPSBBQ1BJX0RCX0NPTlNPTEVfT1VUUFVUOworCWFjcGlfZ2JsX29zaV9kYXRhID0gMDsKIAogCS8qIEhhcmR3YXJlIG9yaWVudGVkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTAzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIE5hbWU6IHV0bG9jayAtIFJlYWRlci9Xcml0ZXIgbG9jayBpbnRlcmZhY2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOSwgSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisjaW5jbHVkZSAiYWNjb21tb24uaCIKKworI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfVVRJTElUSUVTCitBQ1BJX01PRFVMRV9OQU1FKCJ1dGxvY2siKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NyZWF0ZV9yd19sb2NrCisgKiAgICAgICAgICAgICAgYWNwaV91dF9kZWxldGVfcndfbG9jaworICoKKyAqIFBBUkFNRVRFUlM6ICBMb2NrICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBhIHZhbGlkIFJXIGxvY2sKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFJlYWRlci93cml0ZXIgbG9jayBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW50ZXJmYWNlcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfcndfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWxvY2stPm51bV9yZWFkZXJzID0gMDsKKwlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9tdXRleCgmbG9jay0+cmVhZGVyX211dGV4KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9tdXRleCgmbG9jay0+d3JpdGVyX211dGV4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGFjcGlfdXRfZGVsZXRlX3J3X2xvY2soc3RydWN0IGFjcGlfcndfbG9jayAqbG9jaykKK3sKKworCWFjcGlfb3NfZGVsZXRlX211dGV4KGxvY2stPnJlYWRlcl9tdXRleCk7CisJYWNwaV9vc19kZWxldGVfbXV0ZXgobG9jay0+d3JpdGVyX211dGV4KTsKKworCWxvY2stPm51bV9yZWFkZXJzID0gMDsKKwlsb2NrLT5yZWFkZXJfbXV0ZXggPSBOVUxMOworCWxvY2stPndyaXRlcl9tdXRleCA9IE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfYWNxdWlyZV9yZWFkX2xvY2sKKyAqICAgICAgICAgICAgICBhY3BpX3V0X3JlbGVhc2VfcmVhZF9sb2NrCisgKgorICogUEFSQU1FVEVSUzogIExvY2sgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGEgdmFsaWQgUlcgbG9jaworICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogUmVhZGVyIGludGVyZmFjZXMgZm9yIHJlYWRlci93cml0ZXIgbG9ja3MuIE9uIGFjcXVpc2l0aW9uLAorICogICAgICAgICAgICAgIG9ubHkgdGhlIGZpcnN0IHJlYWRlciBhY3F1aXJlcyB0aGUgd3JpdGUgbXV0ZXguIE9uIHJlbGVhc2UsCisgKiAgICAgICAgICAgICAgb25seSB0aGUgbGFzdCByZWFkZXIgcmVsZWFzZXMgdGhlIHdyaXRlIG11dGV4LiBBbHRob3VnaCB0aGlzCisgKiAgICAgICAgICAgICAgYWxnb3JpdGhtIGNhbiBpbiB0aGVvcnkgc3RhcnZlIHdyaXRlcnMsIHRoaXMgc2hvdWxkIG5vdCBiZSBhCisgKiAgICAgICAgICAgICAgcHJvYmxlbSB3aXRoIEFDUElDQSBzaW5jZSB0aGUgc3Vic3lzdGVtIGlzIGluZnJlcXVlbnRseSB1c2VkCisgKiAgICAgICAgICAgICAgaW4gY29tcGFyaXNvbiB0byAoZm9yIGV4YW1wbGUpIGFuIEkvTyBzeXN0ZW0uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV91dF9hY3F1aXJlX3JlYWRfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChsb2NrLT5yZWFkZXJfbXV0ZXgsIEFDUElfV0FJVF9GT1JFVkVSKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBBY3F1aXJlIHRoZSB3cml0ZSBsb2NrIG9ubHkgZm9yIHRoZSBmaXJzdCByZWFkZXIgKi8KKworCWxvY2stPm51bV9yZWFkZXJzKys7CisJaWYgKGxvY2stPm51bV9yZWFkZXJzID09IDEpIHsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3NfYWNxdWlyZV9tdXRleChsb2NrLT53cml0ZXJfbXV0ZXgsCisJCQkJCSAgQUNQSV9XQUlUX0ZPUkVWRVIpOworCX0KKworCWFjcGlfb3NfcmVsZWFzZV9tdXRleChsb2NrLT5yZWFkZXJfbXV0ZXgpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2FjcGlfc3RhdHVzIGFjcGlfdXRfcmVsZWFzZV9yZWFkX2xvY2soc3RydWN0IGFjcGlfcndfbG9jayAqbG9jaykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX29zX2FjcXVpcmVfbXV0ZXgobG9jay0+cmVhZGVyX211dGV4LCBBQ1BJX1dBSVRfRk9SRVZFUik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogUmVsZWFzZSB0aGUgd3JpdGUgbG9jayBvbmx5IGZvciB0aGUgdmVyeSBsYXN0IHJlYWRlciAqLworCisJbG9jay0+bnVtX3JlYWRlcnMtLTsKKwlpZiAobG9jay0+bnVtX3JlYWRlcnMgPT0gMCkgeworCQlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobG9jay0+d3JpdGVyX211dGV4KTsKKwl9CisKKwlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobG9jay0+cmVhZGVyX211dGV4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FjcXVpcmVfd3JpdGVfbG9jaworICogICAgICAgICAgICAgIGFjcGlfdXRfcmVsZWFzZV93cml0ZV9sb2NrCisgKgorICogUEFSQU1FVEVSUzogIExvY2sgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGEgdmFsaWQgUlcgbG9jaworICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogV3JpdGVyIGludGVyZmFjZXMgZm9yIHJlYWRlci93cml0ZXIgbG9ja3MuIFNpbXBseSBhY3F1aXJlIG9yCisgKiAgICAgICAgICAgICAgcmVsZWFzZSB0aGUgd3JpdGVyIG11dGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9jay4gQWNxdWlzaXRpb24KKyAqICAgICAgICAgICAgICBvZiB0aGUgbG9jayBpcyBmdWxseSBleGNsdXNpdmUgYW5kIHdpbGwgYmxvY2sgYWxsIHJlYWRlcnMgYW5kCisgKiAgICAgICAgICAgICAgd3JpdGVycyB1bnRpbCBpdCBpcyByZWxlYXNlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX3V0X2FjcXVpcmVfd3JpdGVfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChsb2NrLT53cml0ZXJfbXV0ZXgsIEFDUElfV0FJVF9GT1JFVkVSKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGFjcGlfdXRfcmVsZWFzZV93cml0ZV9sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spCit7CisKKwlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobG9jay0+d3JpdGVyX211dGV4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCmluZGV4IGMxZjdmNGUuLjFjOWUyNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYwpAQCAtOTM4LDggKzkzOCw3IEBACiAJCWlmICgoIXRoaXNfc291cmNlX29iaikgfHwKIAkJICAgIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUodGhpc19zb3VyY2Vfb2JqKSAhPQogCQkgICAgIEFDUElfREVTQ19UWVBFX09QRVJBTkQpCi0JCSAgICB8fCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUodGhpc19zb3VyY2Vfb2JqKSAhPQotCQkJQUNQSV9UWVBFX1BBQ0tBR0UpKSB7CisJCSAgICB8fCAodGhpc19zb3VyY2Vfb2JqLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJCXN0YXR1cyA9CiAJCQkgICAgd2Fsa19jYWxsYmFjayhBQ1BJX0NPUFlfVFlQRV9TSU1QTEUsCiAJCQkJCSAgdGhpc19zb3VyY2Vfb2JqLCBzdGF0ZSwgY29udGV4dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bXV0ZXguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jCmluZGV4IDE0ZWI1MmMuLjI2YzkzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jCkBAIC02MCw3ICs2MCw4IEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBDcmVhdGUgdGhlIHN5c3RlbSBtdXRleCBvYmplY3RzLgorICogREVTQ1JJUFRJT046IENyZWF0ZSB0aGUgc3lzdGVtIG11dGV4IG9iamVjdHMuIFRoaXMgaW5jbHVkZXMgbXV0ZXhlcywKKyAqICAgICAgICAgICAgICBzcGluIGxvY2tzLCBhbmQgcmVhZGVyL3dyaXRlciBsb2Nrcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC03MSw5ICs3Miw4IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X211dGV4X2luaXRpYWxpemUpOwogCi0JLyoKLQkgKiBDcmVhdGUgZWFjaCBvZiB0aGUgcHJlZGVmaW5lZCBtdXRleCBvYmplY3RzCi0JICovCisJLyogQ3JlYXRlIGVhY2ggb2YgdGhlIHByZWRlZmluZWQgbXV0ZXggb2JqZWN0cyAqLworCiAJZm9yIChpID0gMDsgaSA8IEFDUElfTlVNX01VVEVYOyBpKyspIHsKIAkJc3RhdHVzID0gYWNwaV91dF9jcmVhdGVfbXV0ZXgoaSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtODYsNiArODYsOSBAQAogCXNwaW5fbG9ja19pbml0KGFjcGlfZ2JsX2dwZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdChhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAorCS8qIENyZWF0ZSB0aGUgcmVhZGVyL3dyaXRlciBsb2NrIGZvciBuYW1lc3BhY2UgYWNjZXNzICovCisKKwlzdGF0dXMgPSBhY3BpX3V0X2NyZWF0ZV9yd19sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTk3LDcgKzEwMCw4IEBACiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUuCiAgKgotICogREVTQ1JJUFRJT046IERlbGV0ZSBhbGwgb2YgdGhlIHN5c3RlbSBtdXRleCBvYmplY3RzLgorICogREVTQ1JJUFRJT046IERlbGV0ZSBhbGwgb2YgdGhlIHN5c3RlbSBtdXRleCBvYmplY3RzLiBUaGlzIGluY2x1ZGVzIG11dGV4ZXMsCisgKiAgICAgICAgICAgICAgc3BpbiBsb2NrcywgYW5kIHJlYWRlci93cml0ZXIgbG9ja3MuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTA3LDkgKzExMSw4IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X211dGV4X3Rlcm1pbmF0ZSk7CiAKLQkvKgotCSAqIERlbGV0ZSBlYWNoIHByZWRlZmluZWQgbXV0ZXggb2JqZWN0Ci0JICovCisJLyogRGVsZXRlIGVhY2ggcHJlZGVmaW5lZCBtdXRleCBvYmplY3QgKi8KKwogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9NVVRFWDsgaSsrKSB7CiAJCSh2b2lkKWFjcGlfdXRfZGVsZXRlX211dGV4KGkpOwogCX0KQEAgLTExOCw2ICsxMjEsMTAgQEAKIAogCWFjcGlfb3NfZGVsZXRlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCWFjcGlfb3NfZGVsZXRlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CisKKwkvKiBEZWxldGUgdGhlIHJlYWRlci93cml0ZXIgbG9jayAqLworCisJYWNwaV91dF9kZWxldGVfcndfbG9jaygmYWNwaV9nYmxfbmFtZXNwYWNlX3J3X2xvY2spOwogCXJldHVybl9WT0lEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMKaW5kZXggZmQ1ZWE3NS4uMDIwN2I2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvYmplY3QuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJLyogQ2hlY2sgZm9yIGEgbnVsbCBwb2ludGVyICovCiAKIAlpZiAoIW9iamVjdCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICIqKioqIE51bGwgT2JqZWN0IFB0clxuIikpOworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICIqKioqIE51bGwgT2JqZWN0IFB0clxuIikpOwogCQlyZXR1cm4gKEZBTFNFKTsKIAl9CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCQlyZXR1cm4gKFRSVUUpOwogCiAJZGVmYXVsdDoKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAorCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCiAJCQkJICAiJXAgaXMgbm90IG5vdCBhbiBBQ1BJIG9wZXJhbmQgb2JqIFslc11cbiIsCiAJCQkJICBvYmplY3QsIGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbmFtZShvYmplY3QpKSk7CiAJCWJyZWFrOwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJICogbXVzdCBiZSBhY2Nlc3NlZCBieXRld2lzZSBvciB0aGVyZSBtYXkgYmUgYWxpZ25tZW50IHByb2JsZW1zIG9uCiAJICogY2VydGFpbiBwcm9jZXNzb3JzCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpKSB7CisJc3dpdGNoIChpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCWxlbmd0aCArPSAoYWNwaV9zaXplKSBpbnRlcm5hbF9vYmplY3QtPnN0cmluZy5sZW5ndGggKyAxOwpAQCAtNTE4LDggKzUxOCw3IEBACiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJDYW5ub3QgY29udmVydCB0byBleHRlcm5hbCBvYmplY3QgLSAiCiAJCQkgICAgInVuc3VwcG9ydGVkIHR5cGUgWyVzXSAlWCBpbiBvYmplY3QgJXAiLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW50ZXJuYWxfb2JqZWN0KSwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpLAotCQkJICAgIGludGVybmFsX29iamVjdCkpOworCQkJICAgIGludGVybmFsX29iamVjdC0+Y29tbW9uLnR5cGUsIGludGVybmFsX29iamVjdCkpOwogCQlzdGF0dXMgPSBBRV9UWVBFOwogCQlicmVhazsKIAl9CkBAIC02NjQsNyArNjYzLDcgQEAKIAogCWlmICgoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKGludGVybmFsX29iamVjdCkgPT0KIAkgICAgIEFDUElfREVTQ19UWVBFX09QRVJBTkQpCi0JICAgICYmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpID09IEFDUElfVFlQRV9QQUNLQUdFKSkgeworCSAgICAmJiAoaW50ZXJuYWxfb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfdXRfZ2V0X3BhY2thZ2Vfb2JqZWN0X3NpemUoaW50ZXJuYWxfb2JqZWN0LAogCQkJCQkJICAgIG9ial9sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggM2JjYjViZi4uYjBkZTYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CiAKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVIKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC05Miw3ICs5Myw3IEBACiAjZW5kaWYKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIHVwZGF0ZV90aW1lOwotCWludCBjdXJyZW50X25vdzsKKwlpbnQgcmF0ZV9ub3c7CiAJaW50IGNhcGFjaXR5X25vdzsKIAlpbnQgdm9sdGFnZV9ub3c7CiAJaW50IGRlc2lnbl9jYXBhY2l0eTsKQEAgLTE5Niw3ICsxOTcsOCBAQAogCQl2YWwtPmludHZhbCA9IGJhdHRlcnktPnZvbHRhZ2Vfbm93ICogMTAwMDsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKLQkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5jdXJyZW50X25vdyAqIDEwMDA7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1c6CisJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+cmF0ZV9ub3cgKiAxMDAwOwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTjoKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMX0RFU0lHTjoKQEAgLTI0Nyw2ICsyNDksNyBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwKIAlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1csCiAJUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0ZVTExfREVTSUdOLAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMLAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9OT1csCkBAIC0yNzMsNyArMjc2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBhY3BpX29mZnNldHMgc3RhdGVfb2Zmc2V0c1tdID0gewogCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzdGF0ZSksIDB9LAotCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjdXJyZW50X25vdyksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCByYXRlX25vdyksIDB9LAogCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjYXBhY2l0eV9ub3cpLCAwfSwKIAl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgdm9sdGFnZV9ub3cpLCAwfSwKIH07CkBAIC02MDUsMTEgKzYwOCwxMSBAQAogCWVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgY2hhcmdlZFxuIik7CiAKLQlpZiAoYmF0dGVyeS0+Y3VycmVudF9ub3cgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCisJaWYgKGJhdHRlcnktPnJhdGVfbm93ID09IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOKQogCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICB1bmtub3duXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYoc2VxLCAicHJlc2VudCByYXRlOiAgICAgICAgICAgICVkICVzXG4iLAotCQkJICAgYmF0dGVyeS0+Y3VycmVudF9ub3csIGFjcGlfYmF0dGVyeV91bml0cyhiYXR0ZXJ5KSk7CisJCQkgICBiYXR0ZXJ5LT5yYXRlX25vdywgYWNwaV9iYXR0ZXJ5X3VuaXRzKGJhdHRlcnkpKTsKIAogCWlmIChiYXR0ZXJ5LT5jYXBhY2l0eV9ub3cgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCiAJCXNlcV9wcmludGYoc2VxLCAicmVtYWluaW5nIGNhcGFjaXR5OiAgICAgIHVua25vd25cbiIpOwpAQCAtNzQwLDcgKzc0Myw3IEBACiBzdGF0aWMgc3RydWN0IGJhdHRlcnlfZmlsZSB7CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHM7CiAJbW9kZV90IG1vZGU7Ci0JY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogfSBhY3BpX2JhdHRlcnlfZmlsZVtdID0gewogCUZJTEVfREVTQ1JJUFRJT05fUk8oaW5mbyksCiAJRklMRV9ERVNDUklQVElPTl9STyhzdGF0ZSksCkBAIC05MDAsMjEgKzkwMywyNyBAQAogCQl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYWNwaV9iYXR0ZXJ5X2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3BpX2JhdHRlcnlfaW5pdF9hc3luYyh2b2lkICp1bnVzZWQsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKIHsKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVIKIAlhY3BpX2JhdHRlcnlfZGlyID0gYWNwaV9sb2NrX2JhdHRlcnlfZGlyKCk7CiAJaWYgKCFhY3BpX2JhdHRlcnlfZGlyKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogI2VuZGlmCiAJaWYgKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9iYXR0ZXJ5X2RyaXZlcikgPCAwKSB7CiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSCiAJCWFjcGlfdW5sb2NrX2JhdHRlcnlfZGlyKGFjcGlfYmF0dGVyeV9kaXIpOwogI2VuZGlmCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgYWNwaV9iYXR0ZXJ5X2luaXQodm9pZCkKK3sKKwlhc3luY19zY2hlZHVsZShhY3BpX2JhdHRlcnlfaW5pdF9hc3luYywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBiZWU2NGI3Li5lOGY3YjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQlVTX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgiYnVzIik7CiAKQEAgLTg0Niw2ICs4NDgsNyBAQAogCQlhY3BpX2tvYmogPSBOVUxMOwogCX0KIAorCWluaXRfYWNwaV9kZXZpY2Vfbm90aWZ5KCk7CiAJcmVzdWx0ID0gYWNwaV9idXNfaW5pdCgpOwogCiAJaWYgKCFyZXN1bHQpIHsKQEAgLTg2MCwxMSArODYzLDIzIEBACiAJCX0KIAl9IGVsc2UKIAkJZGlzYWJsZV9hY3BpKCk7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIHJlc3VsdDsKKwogCS8qCiAJICogSWYgdGhlIGxhcHRvcCBmYWxscyBpbnRvIHRoZSBETUkgY2hlY2sgdGFibGUsIHRoZSBwb3dlciBzdGF0ZSBjaGVjawogCSAqIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIGNvdXJzZSBvZiBkZXZpY2UgcG93ZXIgdHJhbnNpc3Rpb24uCiAJICovCiAJZG1pX2NoZWNrX3N5c3RlbShwb3dlcl9ub2NoZWNrX2RtaV90YWJsZSk7CisKKwlhY3BpX3NjYW5faW5pdCgpOworCWFjcGlfZWNfaW5pdCgpOworCWFjcGlfcG93ZXJfaW5pdCgpOworCWFjcGlfc3lzdGVtX2luaXQoKTsKKwlhY3BpX2RlYnVnX2luaXQoKTsKKwlhY3BpX3NsZWVwX3Byb2NfaW5pdCgpOworCWFjcGlfd2FrZXVwX2RldmljZV9pbml0KCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IGMyZjA2MDYuLmQ3M2M5NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTc4LDYgKzc4LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgdm9pZCBhY3BpX2J1dHRvbl9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCk7CiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3N0YXRlX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCkBAIC04OSw2ICs5MCw3IEBACiAJCS5hZGQgPSBhY3BpX2J1dHRvbl9hZGQsCiAJCS5yZXN1bWUgPSBhY3BpX2J1dHRvbl9yZXN1bWUsCiAJCS5yZW1vdmUgPSBhY3BpX2J1dHRvbl9yZW1vdmUsCisJCS5ub3RpZnkgPSBhY3BpX2J1dHRvbl9ub3RpZnksCiAJfSwKIH07CiAKQEAgLTI2MywxNSArMjY1LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfYnV0dG9uX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGFjcGlfYnV0dG9uX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KQogewotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gZGF0YTsKKwlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAogCWlmICghYnV0dG9uIHx8ICFidXR0b24tPmRldmljZSkKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChldmVudCkgeworCWNhc2UgQUNQSV9GSVhFRF9IQVJEV0FSRV9FVkVOVDoKKwkJZXZlbnQgPSBBQ1BJX0JVVFRPTl9OT1RJRllfU1RBVFVTOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFDUElfQlVUVE9OX05PVElGWV9TVEFUVVM6CiAJCWlucHV0ID0gYnV0dG9uLT5pbnB1dDsKIAkJaWYgKGJ1dHRvbi0+dHlwZSA9PSBBQ1BJX0JVVFRPTl9UWVBFX0xJRCkgewpAQCAtMjk4LDQ2ICszMDMsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfYnV0dG9uX25vdGlmeV9maXhlZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gZGF0YTsKLQotCWlmICghYnV0dG9uKQotCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKLQotCWFjcGlfYnV0dG9uX25vdGlmeShidXR0b24tPmRldmljZS0+aGFuZGxlLCBBQ1BJX0JVVFRPTl9OT1RJRllfU1RBVFVTLCBidXR0b24pOwotCi0JcmV0dXJuIEFFX09LOwotfQotCi1zdGF0aWMgaW50IGFjcGlfYnV0dG9uX2luc3RhbGxfbm90aWZ5X2hhbmRsZXJzKHN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCXN3aXRjaCAoYnV0dG9uLT50eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSRjoKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAotCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQsCi0JCQkJCQkgICAgIGJ1dHRvbik7Ci0JCWJyZWFrOwotCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9TTEVFUEY6Ci0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKLQkJCQkJCSAgICAgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkLAotCQkJCQkJICAgICBidXR0b24pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoYnV0dG9uLT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnksCi0JCQkJCQkgICAgIGJ1dHRvbik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSA/IC1FTk9ERVYgOiAwOwotfQotCiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbjsKQEAgLTM0OSwyNSArMzE0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9idXR0b25fcmVtb3ZlX25vdGlmeV9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbikKLXsKLQlzd2l0Y2ggKGJ1dHRvbi0+dHlwZSkgewotCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9QT1dFUkY6Ci0JCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCi0JCQkJCQlhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQpOwotCQlicmVhazsKLQljYXNlIEFDUElfQlVUVE9OX1RZUEVfU0xFRVBGOgotCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAotCQkJCQkJYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoYnV0dG9uLT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkJICAgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkgICBhY3BpX2J1dHRvbl9ub3RpZnkpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCBlcnJvcjsKQEAgLTQzMiwxMCArMzc4LDYgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2ZyZWVfaW5wdXQ7CiAKLQllcnJvciA9IGFjcGlfYnV0dG9uX2luc3RhbGxfbm90aWZ5X2hhbmRsZXJzKGJ1dHRvbik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycl9yZW1vdmVfZnM7Ci0KIAlzbnByaW50ZihidXR0b24tPnBoeXMsIHNpemVvZihidXR0b24tPnBoeXMpLAogCQkgIiVzL2J1dHRvbi9pbnB1dDAiLCBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSk7CiAKQEAgLTQ2Niw3ICs0MDgsNyBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJfcmVtb3ZlX2hhbmRsZXJzOworCQlnb3RvIGVycl9yZW1vdmVfZnM7CiAJaWYgKGJ1dHRvbi0+dHlwZSA9PSBBQ1BJX0JVVFRPTl9UWVBFX0xJRCkKIAkJYWNwaV9saWRfc2VuZF9zdGF0ZShidXR0b24pOwogCkBAIC00ODUsOCArNDI3LDYgQEAKIAogCXJldHVybiAwOwogCi0gZXJyX3JlbW92ZV9oYW5kbGVyczoKLQlhY3BpX2J1dHRvbl9yZW1vdmVfbm90aWZ5X2hhbmRsZXJzKGJ1dHRvbik7CiAgZXJyX3JlbW92ZV9mczoKIAlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKICBlcnJfZnJlZV9pbnB1dDoKQEAgLTUwNSw3ICs0NDUsNiBAQAogCiAJYnV0dG9uID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCi0JYWNwaV9idXR0b25fcmVtb3ZlX25vdGlmeV9oYW5kbGVycyhidXR0b24pOwogCWFjcGlfYnV0dG9uX3JlbW92ZV9mcyhkZXZpY2UpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1dHRvbi0+aW5wdXQpOwogCWtmcmVlKGJ1dHRvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGVidWcuYyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCmluZGV4IDIwMjIzY2IuLmE4Mjg3YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCkBAIC0xMywxMSArMTMsNiBAQAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoImRlYnVnIik7CiAKLSNpZmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCi0jdW5kZWYgTU9EVUxFX1BBUkFNX1BSRUZJWAotI2VuZGlmCi0jZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggImFjcGkuIgotCiBzdHJ1Y3QgYWNwaV9kbGF5ZXIgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKQEAgLTI5NywxNyArMjkyLDE1IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9CisjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgYWNwaV9kZWJ1Z19pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfZGVidWdfaW5pdCh2b2lkKQogeworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAJaW50IGVycm9yID0gMDsKIAljaGFyICpuYW1lOwogCi0KLQlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiAnZGVidWdfbGF5ZXInIFtSL1ddICovCiAJbmFtZSA9IEFDUElfU1lTVEVNX0ZJTEVfREVCVUdfTEFZRVI7CiAJZW50cnkgPQpAQCAtMzM4LDcgKzMzMSw3IEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9TWVNURU1fRklMRV9ERUJVR19MQVlFUiwgYWNwaV9yb290X2Rpcik7CiAJZXJyb3IgPSAtRU5PREVWOwogCWdvdG8gRG9uZTsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGFjcGlfZGVidWdfaW5pdCk7CisjZWxzZQorCXJldHVybiAwOwogI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCA3YWY3ZGIxLi5lZmI5NTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTExNDYsOSArMTE0NiwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGRvY2tfZXhpdCh2b2lkKQogewogCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbjsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICp0bXA7CiAKIAl1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKCZkb2NrX2FjcGlfbm90aWZpZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRvY2tfc3RhdGlvbiwgdG1wLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpCiAJCWRvY2tfcmVtb3ZlKGRvY2tfc3RhdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggMmZlMTUwNi4uMDRlOTA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogI2RlZmluZSBBQ1BJX0VDX0RFTEFZCQk1MDAJLyogV2FpdCA1MDBtcyBtYXguIGR1cmluZyBFQyBvcHMgKi8KICNkZWZpbmUgQUNQSV9FQ19VREVMQVlfR0xLCTEwMDAJLyogV2FpdCAxbXMgbWF4LiB0byBnZXQgZ2xvYmFsIGxvY2sgKi8KLSNkZWZpbmUgQUNQSV9FQ19VREVMQVkJCTEwMAkvKiBXYWl0IDEwMHVzIGJlZm9yZSBwb2xsaW5nIEVDIGFnYWluICovCisjZGVmaW5lIEFDUElfRUNfQ0RFTEFZCQkxMAkvKiBXYWl0IDEwdXMgYmVmb3JlIHBvbGxpbmcgRUMgKi8KIAogI2RlZmluZSBBQ1BJX0VDX1NUT1JNX1RIUkVTSE9MRCA4CS8qIG51bWJlciBvZiBmYWxzZSBpbnRlcnJ1cHRzCiAJCQkJCSAgIHBlciBvbmUgdHJhbnNhY3Rpb24gKi8KQEAgLTIzNiwxMyArMjM2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGVjX2RlbGF5KHZvaWQpCit7CisJLyogRUMgaW4gTVNJIG5vdGVib29rcyBkb24ndCB0b2xlcmF0ZSBkZWxheXMgb3RoZXIgdGhhbiA1NTAgdXNlYyAqLworCWlmIChFQ19GTEFHU19NU0kpCisJCXVkZWxheShBQ1BJX0VDX0RFTEFZKTsKKwllbHNlCisJCS8qIFVzZSBzaG9ydGVzdCBzbGVlcCBhdmFpbGFibGUgKi8KKwkJbXNsZWVwKDEpOworfQorCiBzdGF0aWMgaW50IGVjX3BvbGwoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKLQl1ZGVsYXkoQUNQSV9FQ19VREVMQVkpOworCXVkZWxheShBQ1BJX0VDX0NERUxBWSk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSkgewogCQlncGVfdHJhbnNhY3Rpb24oZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKLQkJdWRlbGF5KEFDUElfRUNfVURFTEFZKTsKKwkJZWNfZGVsYXkoKTsKIAkJaWYgKGVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpKQogCQkJcmV0dXJuIDA7CiAJfQpAQCAtNjcyLDcgKzY4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfZWNfcmVhZF9pbmZvLCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9lY19pbmZvX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfZWNfaW5mb19vcHMgPSB7CiAJLm9wZW4gPSBhY3BpX2VjX2luZm9fb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCkBAIC03NTUsNiArNzY1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcCA9IDA7CiAKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBjb250ZXh0OworCisJLyogY2xlYXIgYWRkciB2YWx1ZXMsIGVjX3BhcnNlX2lvX3BvcnRzIGRlcGVuZCBvbiBpdCAqLworCWVjLT5jb21tYW5kX2FkZHIgPSBlYy0+ZGF0YV9hZGRyID0gMDsKKwogCXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLAogCQkJCSAgICAgZWNfcGFyc2VfaW9fcG9ydHMsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCkBAIC04MDQsMTEgKzgxOCwxMSBAQAogCQllYyA9IG1ha2VfYWNwaV9lYygpOwogCQlpZiAoIWVjKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmIChlY19wYXJzZV9kZXZpY2UoZGV2aWNlLT5oYW5kbGUsIDAsIGVjLCBOVUxMKSAhPQotCQkgICAgQUVfQ1RSTF9URVJNSU5BVEUpIHsKKwl9CisJaWYgKGVjX3BhcnNlX2RldmljZShkZXZpY2UtPmhhbmRsZSwgMCwgZWMsIE5VTEwpICE9CisJCUFFX0NUUkxfVEVSTUlOQVRFKSB7CiAJCQlrZnJlZShlYyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCX0KIAogCWVjLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTk4NiwxMiArMTAwMCwxMiBAQAogCQlib290X2VjLT5oYW5kbGUgPSBBQ1BJX1JPT1RfT0JKRUNUOwogCQlhY3BpX2dldF9oYW5kbGUoQUNQSV9ST09UX09CSkVDVCwgZWNkdF9wdHItPmlkLCAmYm9vdF9lYy0+aGFuZGxlKTsKIAkJLyogRG9uJ3QgdHJ1c3QgRUNEVCwgd2hpY2ggY29tZXMgZnJvbSBBU1VTVGVrICovCi0JCWlmICghZG1pX25hbWVfaW5fdmVuZG9ycygiQVNVUyIpKQorCQlpZiAoIWRtaV9uYW1lX2luX3ZlbmRvcnMoIkFTVVMiKSAmJiBFQ19GTEFHU19NU0kgPT0gMCkKIAkJCWdvdG8gaW5zdGFsbDsKIAkJc2F2ZWRfZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNhdmVkX2VjKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbWNweShzYXZlZF9lYywgYm9vdF9lYywgc2l6ZW9mKCpzYXZlZF9lYykpOworCQltZW1jcHkoc2F2ZWRfZWMsIGJvb3RfZWMsIHNpemVvZihzdHJ1Y3QgYWNwaV9lYykpOwogCS8qIGZhbGwgdGhyb3VnaCAqLwogCX0KIAkvKiBUaGlzIHdvcmthcm91bmQgaXMgbmVlZGVkIG9ubHkgb24gc29tZSBicm9rZW4gbWFjaGluZXMsCkBAIC0xMDY5LDEzICsxMDgzLDEwIEBACiAJCX0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2VjX2luaXQodm9pZCkKK2ludCBfX2luaXQgYWNwaV9lY19pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAlhY3BpX2VjX2RpciA9IHByb2NfbWtkaXIoQUNQSV9FQ19DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX2VjX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDkwLDggKzExMDEsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChhY3BpX2VjX2luaXQpOwotCiAvKiBFQyBkcml2ZXIgY3VycmVudGx5IG5vdCB1bmxvYWRhYmxlICovCiAjaWYgMAogc3RhdGljIHZvaWQgX19leGl0IGFjcGlfZWNfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Zhbi5jIGIvZHJpdmVycy9hY3BpL2Zhbi5jCmluZGV4IDhhMDI5NDQuLjUzNjk4ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9mYW4uYworKysgYi9kcml2ZXJzL2FjcGkvZmFuLmMKQEAgLTY4LDMxICs2OCwzNSBAQAogfTsKIAogLyogdGhlcm1hbCBjb29saW5nIGRldmljZSBjYWxsYmFja3MgKi8KLXN0YXRpYyBpbnQgZmFuX2dldF9tYXhfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgZmFuX2dldF9tYXhfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGxvbmcKKwkJCSAgICAgKnN0YXRlKQogewogCS8qIEFDUEkgZmFuIGRldmljZSBvbmx5IHN1cHBvcnQgdHdvIHN0YXRlczogT04vT0ZGICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7CisJKnN0YXRlID0gMTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmYW5fZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIGludCBmYW5fZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZworCQkJICAgICAqc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwotCWludCBzdGF0ZTsKIAlpbnQgcmVzdWx0OworCWludCBhY3BpX3N0YXRlOwogCiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKGRldmljZS0+aGFuZGxlLCAmc3RhdGUpOworCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9wb3dlcihkZXZpY2UtPmhhbmRsZSwgJmFjcGlfc3RhdGUpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3RhdGUgPT0gQUNQSV9TVEFURV9EMyA/ICIwIiA6Ci0JCQkgKHN0YXRlID09IEFDUElfU1RBVEVfRDAgPyAiMSIgOiAidW5rbm93biIpKTsKKwkqc3RhdGUgPSAoYWNwaV9zdGF0ZSA9PSBBQ1BJX1NUQVRFX0QzID8gMCA6CisJCSAoYWNwaV9zdGF0ZSA9PSBBQ1BJX1NUQVRFX0QwID8gMSA6IC0xKSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWZhbl9zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgc3RhdGUpCitmYW5fc2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZyBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDU0NzliOWYuLjhiZDJjMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMjg2LDEwICsyODYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKQoraW50IF9faW5pdCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKQogewotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKIAlpZiAocGxhdGZvcm1fbm90aWZ5IHx8IHBsYXRmb3JtX25vdGlmeV9yZW1vdmUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQ2FuJ3QgdXNlIHBsYXRmb3JtX25vdGlmeVxuIik7CiAJCXJldHVybiAwOwpAQCAtMjk4LDUgKzI5NiwzIEBACiAJcGxhdGZvcm1fbm90aWZ5X3JlbW92ZSA9IGFjcGlfcGxhdGZvcm1fbm90aWZ5X3JlbW92ZTsKIAlyZXR1cm4gMDsKIH0KLQotYXJjaF9pbml0Y2FsbChpbml0X2FjcGlfZGV2aWNlX25vdGlmeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTY5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaApAQCAtMCwwICsxLDQzIEBACisvKiBGb3IgdXNlIGJ5IExpbnV4L0FDUEkgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBkcml2ZXJzICovCisKK2ludCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKTsKK2ludCBhY3BpX3NjYW5faW5pdCh2b2lkKTsKK2ludCBhY3BpX3N5c3RlbV9pbml0KHZvaWQpOworCisjaWZkZWYgQ09ORklHX0FDUElfREVCVUcKK2ludCBhY3BpX2RlYnVnX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9kZWJ1Z19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIFJlc291cmNlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IGFjcGlfcG93ZXJfaW5pdCh2b2lkKTsKK2ludCBhY3BpX2RldmljZV9zbGVlcF93YWtlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYWJsZSwgaW50IHNsZWVwX3N0YXRlLCBpbnQgZGV2X3N0YXRlKTsKK2ludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgc2xlZXBfc3RhdGUpOworaW50IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKK2ludCBhY3BpX3Bvd2VyX2dldF9pbmZlcnJlZF9zdGF0ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitpbnQgYWNwaV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOworZXh0ZXJuIGludCBhY3BpX3Bvd2VyX25vY2hlY2s7CisKK2ludCBhY3BpX3dha2V1cF9kZXZpY2VfaW5pdCh2b2lkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlZGRlZCBDb250cm9sbGVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IGFjcGlfZWNfaW5pdCh2b2lkKTsKK2ludCBhY3BpX2VjX2VjZHRfcHJvYmUodm9pZCk7CitpbnQgYWNwaV9ib290X2VjX2VuYWJsZSh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmQvUmVzdW1lCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitleHRlcm4gaW50IGFjcGlfc2xlZXBfaW5pdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCitpbnQgYWNwaV9zbGVlcF9wcm9jX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9zbGVlcF9wcm9jX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS5jIGIvZHJpdmVycy9hY3BpL251bWEuYwppbmRleCAzYTBkOGVmLi5kNDQwY2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS5jCisrKyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKQEAgLTEzMSw2ICsxMzEsMjEgQEAKICNlbmRpZgkJCQkvKiBBQ1BJX0RFQlVHX09VVFBVVCAqLwogCQlicmVhazsKIAorCWNhc2UgQUNQSV9TUkFUX1RZUEVfWDJBUElDX0NQVV9BRkZJTklUWToKKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorCQl7CisJCQlzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgKnAgPQorCQkJICAgIChzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgKiloZWFkZXI7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCQkJCSAgIlNSQVQgUHJvY2Vzc29yICh4MmFwaWNpZFsweCUwOHhdKSBpbiIKKwkJCQkJICAiIHByb3hpbWl0eSBkb21haW4gJWQgJXNcbiIsCisJCQkJCSAgcC0+YXBpY19pZCwKKwkJCQkJICBwLT5wcm94aW1pdHlfZG9tYWluLAorCQkJCQkgIChwLT5mbGFncyAmIEFDUElfU1JBVF9DUFVfRU5BQkxFRCkgPworCQkJCQkgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKKwkJfQorI2VuZGlmCQkJCS8qIEFDUElfREVCVUdfT1VUUFVUICovCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCSAgICAgICAiRm91bmQgdW5zdXBwb3J0ZWQgU1JBVCBlbnRyeSAodHlwZSA9IDB4JXgpXG4iLApAQCAtMTgwLDggKzE5NSwzNSBAQAogCXJldHVybiAwOwogfQogCit2b2lkIF9faW5pdCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCithY3BpX251bWFfeDJhcGljX2FmZmluaXR5X2luaXQoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICpwYSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCSAgICAgICAiRm91bmQgdW5zdXBwb3J0ZWQgeDJhcGljIFsweCUwOHhdIFNSQVQgZW50cnlcbiIsIHBhLT5hcGljX2lkKTsKKwlyZXR1cm47Cit9CisKKwogc3RhdGljIGludCBfX2luaXQKLWFjcGlfcGFyc2VfcHJvY2Vzc29yX2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqIGhlYWRlciwKK2FjcGlfcGFyc2VfeDJhcGljX2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorCQkJICAgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICpwcm9jZXNzb3JfYWZmaW5pdHk7CisKKwlwcm9jZXNzb3JfYWZmaW5pdHkgPSAoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICopaGVhZGVyOworCWlmICghcHJvY2Vzc29yX2FmZmluaXR5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjcGlfdGFibGVfcHJpbnRfc3JhdF9lbnRyeShoZWFkZXIpOworCisJLyogbGV0IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydCB0byBkbyBpdCAqLworCWFjcGlfbnVtYV94MmFwaWNfYWZmaW5pdHlfaW5pdChwcm9jZXNzb3JfYWZmaW5pdHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CithY3BpX3BhcnNlX3Byb2Nlc3Nvcl9hZmZpbml0eShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciwKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBhY3BpX3NyYXRfY3B1X2FmZmluaXR5ICpwcm9jZXNzb3JfYWZmaW5pdHk7CkBAIC0yNDEsNiArMjgzLDggQEAKIHsKIAkvKiBTUkFUOiBTdGF0aWMgUmVzb3VyY2UgQWZmaW5pdHkgVGFibGUgKi8KIAlpZiAoIWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfU1JBVCwgYWNwaV9wYXJzZV9zcmF0KSkgeworCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfWDJBUElDX0NQVV9BRkZJTklUWSwKKwkJCQkgICAgICBhY3BpX3BhcnNlX3gyYXBpY19hZmZpbml0eSwgTlJfQ1BVUyk7CiAJCWFjcGlfdGFibGVfcGFyc2Vfc3JhdChBQ1BJX1NSQVRfVFlQRV9DUFVfQUZGSU5JVFksCiAJCQkJICAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksIE5SX0NQVVMpOwogCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfTUVNT1JZX0FGRklOSVRZLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IGViODk4MGQuLmQ1OWYwOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTEwNzAsOSArMTA3MCw5IEBACiAgKiBpbiBhcmJpdHJhcnkgQU1MIGNvZGUgYW5kIGNhbiBpbnRlcmZlcmUgd2l0aCBsZWdhY3kgZHJpdmVycy4KICAqIGFjcGlfZW5mb3JjZV9yZXNvdXJjZXM9IGNhbiBiZSBzZXQgdG86CiAgKgotICogICAtIHN0cmljdCAgICAgICAgICAgKDIpCisgKiAgIC0gc3RyaWN0IChkZWZhdWx0KSAoMikKICAqICAgICAtPiBmdXJ0aGVyIGRyaXZlciB0cnlpbmcgdG8gYWNjZXNzIHRoZSByZXNvdXJjZXMgd2lsbCBub3QgbG9hZAotICogICAtIGxheCAoZGVmYXVsdCkgICAgKDEpCisgKiAgIC0gbGF4ICAgICAgICAgICAgICAoMSkKICAqICAgICAtPiBmdXJ0aGVyIGRyaXZlciB0cnlpbmcgdG8gYWNjZXNzIHRoZSByZXNvdXJjZXMgd2lsbCBsb2FkLCBidXQgeW91CiAgKiAgICAgZ2V0IGEgc3lzdGVtIG1lc3NhZ2UgdGhhdCBzb21ldGhpbmcgbWlnaHQgZ28gd3JvbmcuLi4KICAqCkBAIC0xMDg0LDcgKzEwODQsNyBAQAogI2RlZmluZSBFTkZPUkNFX1JFU09VUkNFU19MQVggICAgMQogI2RlZmluZSBFTkZPUkNFX1JFU09VUkNFU19OTyAgICAgMAogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPSBFTkZPUkNFX1JFU09VUkNFU19MQVg7CitzdGF0aWMgdW5zaWduZWQgaW50IGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPSBFTkZPUkNFX1JFU09VUkNFU19TVFJJQ1Q7CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfZW5mb3JjZV9yZXNvdXJjZXNfc2V0dXAoY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKaW5kZXggODkxYmRmNi4uNTFiOWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCkBAIC04Niw3ICs4Niw3IEBACiB9CiAKIC8qIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD00NzczICovCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgbWVkaW9uX21kOTU4MFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIG1lZGlvbl9tZDk1ODBbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJNZWRpb24gTUQ5NTgwLUYgbGFwdG9wIiwKIAkJLm1hdGNoZXMgPSB7CkBAIC05OCw3ICs5OCw3IEBACiB9OwogCiAvKiBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0NCAqLwotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGRlbGxfb3B0aXBsZXhbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBkZWxsX29wdGlwbGV4W10gPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBPcHRpcGxleCBHWDEiLAogCQkubWF0Y2hlcyA9IHsKQEAgLTExMCw3ICsxMTAsNyBAQAogfTsKIAogLyogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTM4ICovCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgaHBfdDU3MTBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBocF90NTcxMFtdID0gewogCXsKIAkJLmlkZW50ID0gIkhQIHQ1NzEwIiwKIAkJLm1hdGNoZXMgPSB7CkBAIC0xMjMsMTMgKzEyMywxMyBAQAogfTsKIAogc3RydWN0IHBydF9xdWlyayB7Ci0Jc3RydWN0IGRtaV9zeXN0ZW1faWQJKnN5c3RlbTsKKwljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqc3lzdGVtOwogCXVuc2lnbmVkIGludAkJc2VnbWVudDsKIAl1bnNpZ25lZCBpbnQJCWJ1czsKIAl1bnNpZ25lZCBpbnQJCWRldmljZTsKIAl1bnNpZ25lZCBjaGFyCQlwaW47Ci0JY2hhcgkJCSpzb3VyY2U7CS8qIGFjY29yZGluZyB0byBCSU9TICovCi0JY2hhcgkJCSphY3R1YWxfc291cmNlOworCWNvbnN0IGNoYXIJCSpzb3VyY2U7CS8qIGFjY29yZGluZyB0byBCSU9TICovCisJY29uc3QgY2hhcgkJKmFjdHVhbF9zb3VyY2U7CiB9OwogCiAjZGVmaW5lIFBDSV9JTlRYX1BJTihjKQkJKGMgLSAnQScgKyAxKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiBpbnRlcnJ1cHQgYXQgdGhlIGxpc3RlZCBzZWdtZW50L2J1cy9kZXZpY2UvcGluIGlzIGNvbm5lY3RlZCB0byB0aGUgZmlyc3QKICAqIGxpbmsgZGV2aWNlLCBidXQgaXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBzZWNvbmQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJ0X3F1aXJrIHBydF9xdWlya3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJ0X3F1aXJrIHBydF9xdWlya3NbXSA9IHsKIAl7IG1lZGlvbl9tZDk1ODAsIDAsIDAsIDksIFBDSV9JTlRYX1BJTignQScpLAogCQkiXFxfU0JfLlBDSTAuSVNBXy5MTktBIiwKIAkJIlxcX1NCXy5QQ0kwLklTQV8uTE5LQiJ9LApAQCAtMTU1LDcgKzE1NSw3IEBACiAJCQkgIHN0cnVjdCBhY3BpX3BjaV9yb3V0aW5nX3RhYmxlICpwcnQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHBydF9xdWlyayAqcXVpcms7CisJY29uc3Qgc3RydWN0IHBydF9xdWlyayAqcXVpcms7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcnRfcXVpcmtzKTsgaSsrKSB7CiAJCXF1aXJrID0gJnBydF9xdWlya3NbaV07CkBAIC0zMTksNyArMzE5LDcgQEAKIAkgKi8KIAlicmlkZ2UgPSBkZXYtPmJ1cy0+c2VsZjsKIAl3aGlsZSAoYnJpZGdlKSB7Ci0JCXBpbiA9ICgoKHBpbiAtIDEpICsgUENJX1NMT1QoZGV2LT5kZXZmbikpICUgNCkgKyAxOworCQlwaW4gPSBwY2lfc3dpenpsZV9pbnRlcnJ1cHRfcGluKGRldiwgcGluKTsKIAogCQlpZiAoKGJyaWRnZS0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTKSB7CiAJCQkvKiBQQyBjYXJkIGhhcyB0aGUgc2FtZSBJUlEgYXMgaXRzIGNhcmRicmlkZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKaW5kZXggNmM3NzJjYS4uMTZlMGY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKQEAgLTQzLDEzICs0MywxNCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCi0jZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUENJX0NPTVBPTkVOVAorI2RlZmluZSBfQ09NUE9ORU5UCQkJQUNQSV9QQ0lfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJwY2lfbGluayIpOwogI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0NMQVNTCQkicGNpX2lycV9yb3V0aW5nIgogI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0RFVklDRV9OQU1FCSJQQ0kgSW50ZXJydXB0IExpbmsiCiAjZGVmaW5lIEFDUElfUENJX0xJTktfRklMRV9JTkZPCQkiaW5mbyIKICNkZWZpbmUgQUNQSV9QQ0lfTElOS19GSUxFX1NUQVRVUwkic3RhdGUiCi0jZGVmaW5lIEFDUElfUENJX0xJTktfTUFYX1BPU1NJQkxFIDE2CisjZGVmaW5lIEFDUElfUENJX0xJTktfTUFYX1BPU1NJQkxFCTE2CisKIHN0YXRpYyBpbnQgYWNwaV9wY2lfbGlua19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBhY3BpX3BjaV9saW5rX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogCkBAIC02Niw3ICs2Nyw3IEBACiAJLm9wcyA9IHsKIAkJLmFkZCA9IGFjcGlfcGNpX2xpbmtfYWRkLAogCQkucmVtb3ZlID0gYWNwaV9wY2lfbGlua19yZW1vdmUsCi0JCX0sCisJfSwKIH07CiAKIC8qCkBAIC03Niw3ICs3Nyw3IEBACiBzdHJ1Y3QgYWNwaV9wY2lfbGlua19pcnEgewogCXU4IGFjdGl2ZTsJCS8qIEN1cnJlbnQgSVJRICovCiAJdTggdHJpZ2dlcmluZzsJCS8qIEFsbCBJUlFzICovCi0JdTggcG9sYXJpdHk7CS8qIEFsbCBJUlFzICovCisJdTggcG9sYXJpdHk7CQkvKiBBbGwgSVJRcyAqLwogCXU4IHJlc291cmNlX3R5cGU7CiAJdTggcG9zc2libGVfY291bnQ7CiAJdTggcG9zc2libGVbQUNQSV9QQ0lfTElOS19NQVhfUE9TU0lCTEVdOwpAQCAtODUsMTYgKzg2LDEzIEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9wY2lfbGluayB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwotCXN0cnVjdCBhY3BpX3BjaV9saW5rX2lycSBpcnE7Ci0JaW50IHJlZmNudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXN0cnVjdCBhY3BpX2RldmljZQkJKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGlua19pcnEJaXJxOworCWludAkJCQlyZWZjbnQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgY291bnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotfSBhY3BpX2xpbms7CitzdGF0aWMgTElTVF9IRUFEKGFjcGlfbGlua19saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYWNwaV9saW5rX2xvY2spOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA0LDEyICsxMDIsMTEgQEAKIC8qCiAgKiBzZXQgY29udGV4dCAobGluaykgcG9zc2libGUgbGlzdCBmcm9tIHJlc291cmNlIGxpc3QKICAqLwotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3BjaV9saW5rX2NoZWNrX3Bvc3NpYmxlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BjaV9saW5rX2NoZWNrX3Bvc3NpYmxlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKKwkJCQkJCXZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBjb250ZXh0OwotCXUzMiBpID0gMDsKLQorCXUzMiBpOwogCiAJc3dpdGNoIChyZXNvdXJjZS0+dHlwZSkgewogCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX1NUQVJUX0RFUEVOREVOVDoKQEAgLTE3OSwxMCArMTc2LDYgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQotCWlmICghbGluaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlzdGF0dXMgPSBhY3BpX3dhbGtfcmVzb3VyY2VzKGxpbmstPmRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fUFJTLAogCQkJCSAgICAgYWNwaV9wY2lfbGlua19jaGVja19wb3NzaWJsZSwgbGluayk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0xOTcsMTEgKzE5MCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfcGNpX2xpbmtfY2hlY2tfY3VycmVudChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wY2lfbGlua19jaGVja19jdXJyZW50KHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKKwkJCQkJICAgICAgIHZvaWQgKmNvbnRleHQpCiB7Ci0JaW50ICppcnEgPSAoaW50ICopY29udGV4dDsKLQorCWludCAqaXJxID0gY29udGV4dDsKIAogCXN3aXRjaCAocmVzb3VyY2UtPnR5cGUpIHsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9TVEFSVF9ERVBFTkRFTlQ6CkBAIC0yNTgsMTIgKzI1MCw5IEBACiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfZ2V0X2N1cnJlbnQoc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmspCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWludCBpcnEgPSAwOwogCi0JaWYgKCFsaW5rKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWxpbmstPmlycS5hY3RpdmUgPSAwOwogCiAJLyogaW4gcHJhY3RpY2UsIHN0YXR1cyBkaXNhYmxlZCBpcyBtZWFuaW5nbGVzcywgaWdub3JlIGl0ICovCkBAIC0zMDgsMTYgKzI5NywxNSBAQAogCiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfc2V0KHN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rLCBpbnQgaXJxKQogewotCWludCByZXN1bHQgPSAwOwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWludCByZXN1bHQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBhY3BpX3Jlc291cmNlIHJlczsKIAkJc3RydWN0IGFjcGlfcmVzb3VyY2UgZW5kOwogCX0gKnJlc291cmNlOwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IDAsIE5VTEwgfTsKIAotCi0JaWYgKCFsaW5rIHx8ICFpcnEpCisJaWYgKCFpcnEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzb3VyY2UgPSBremFsbG9jKHNpemVvZigqcmVzb3VyY2UpICsgMSwgaXJxc19kaXNhYmxlZCgpID8gR0ZQX0FUT01JQzogR0ZQX0tFUk5FTCk7CkBAIC00NzksMzAgKzQ2NywyMiBAQAogCVBJUlFfUEVOQUxUWV9QQ0lfQVZBSUxBQkxFLAkvKiBJUlE5ICBQQ0ksIG9mdGVuIGFjcGkgKi8KIAlQSVJRX1BFTkFMVFlfUENJX0FWQUlMQUJMRSwJLyogSVJRMTAgUENJICovCiAJUElSUV9QRU5BTFRZX1BDSV9BVkFJTEFCTEUsCS8qIElSUTExIFBDSSAqLwotCVBJUlFfUEVOQUxUWV9JU0FfVVNFRCwJLyogSVJRMTIgbW91c2UgKi8KLQlQSVJRX1BFTkFMVFlfSVNBX1VTRUQsCS8qIElSUTEzIGZwZSwgc29tZXRpbWVzICovCi0JUElSUV9QRU5BTFRZX0lTQV9VU0VELAkvKiBJUlExNCBpZGUwICovCi0JUElSUV9QRU5BTFRZX0lTQV9VU0VELAkvKiBJUlExNSBpZGUxICovCisJUElSUV9QRU5BTFRZX0lTQV9VU0VELAkJLyogSVJRMTIgbW91c2UgKi8KKwlQSVJRX1BFTkFMVFlfSVNBX1VTRUQsCQkvKiBJUlExMyBmcGUsIHNvbWV0aW1lcyAqLworCVBJUlFfUEVOQUxUWV9JU0FfVVNFRCwJCS8qIElSUTE0IGlkZTAgKi8KKwlQSVJRX1BFTkFMVFlfSVNBX1VTRUQsCQkvKiBJUlExNSBpZGUxICovCiAJLyogPklSUTE1ICovCiB9OwogCiBpbnQgX19pbml0IGFjcGlfaXJxX3BlbmFsdHlfaW5pdCh2b2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUgPSBOVUxMOwotCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rID0gTlVMTDsKLQlpbnQgaSA9IDA7Ci0KKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluazsKKwlpbnQgaTsKIAogCS8qCiAJICogVXBkYXRlIHBlbmFsdGllcyB0byBmYWNpbGl0YXRlIElSUSBiYWxhbmNpbmcuCiAJICovCi0JbGlzdF9mb3JfZWFjaChub2RlLCAmYWNwaV9saW5rLmVudHJpZXMpIHsKLQotCQlsaW5rID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgYWNwaV9wY2lfbGluaywgbm9kZSk7Ci0JCWlmICghbGluaykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwotCQkJY29udGludWU7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZhY3BpX2xpbmtfbGlzdCwgbGlzdCkgewogCiAJCS8qCiAJCSAqIHJlZmxlY3QgdGhlIHBvc3NpYmxlIGFuZCBhY3RpdmUgaXJxcyBpbiB0aGUgcGVuYWx0eSB0YWJsZSAtLQpAQCAtNTI3LDcgKzUwNyw2IEBACiAJfQogCS8qIEFkZCBhIHBlbmFsdHkgZm9yIHRoZSBTQ0kgKi8KIAlhY3BpX2lycV9wZW5hbHR5W2FjcGlfZ2JsX0ZBRFQuc2NpX2ludGVycnVwdF0gKz0gUElSUV9QRU5BTFRZX1BDSV9VU0lORzsKLQogCXJldHVybiAwOwogfQogCkBAIC01MzgsNyArNTE3LDYgQEAKIAlpbnQgaXJxOwogCWludCBpOwogCi0KIAlpZiAobGluay0+aXJxLmluaXRpYWxpemVkKSB7CiAJCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkKIAkJCS8qIFRoaXMgbWVhbnMgdGhlIGxpbmsgaXMgZGlzYWJsZWQgYnV0IGluaXRpYWxpemVkICovCkBAIC01NjYsMTEgKzU0NCwxMCBAQAogCS8qCiAJICogaWYgYWN0aXZlIGZvdW5kLCB1c2UgaXQ7IGVsc2UgcGljayBlbnRyeSBmcm9tIGVuZCBvZiBwb3NzaWJsZSBsaXN0LgogCSAqLwotCWlmIChsaW5rLT5pcnEuYWN0aXZlKSB7CisJaWYgKGxpbmstPmlycS5hY3RpdmUpCiAJCWlycSA9IGxpbmstPmlycS5hY3RpdmU7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWlycSA9IGxpbmstPmlycS5wb3NzaWJsZVtsaW5rLT5pcnEucG9zc2libGVfY291bnQgLSAxXTsKLQl9CiAKIAlpZiAoYWNwaV9pcnFfYmFsYW5jZSB8fCAhbGluay0+aXJxLmFjdGl2ZSkgewogCQkvKgpAQCAtNTk5LDcgKzU3Niw2IEBACiAJfQogCiAJbGluay0+aXJxLmluaXRpYWxpemVkID0gMTsKLQogCXJldHVybiAwOwogfQogCkBAIC02MDgsMTYgKzU4NCwxMiBAQAogICogc3VjY2VzczogcmV0dXJuIElSUSA+PSAwCiAgKiBmYWlsdXJlOiByZXR1cm4gLTEKICAqLwotCi1pbnQKLWFjcGlfcGNpX2xpbmtfYWxsb2NhdGVfaXJxKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgIGludCBpbmRleCwKLQkJCSAgIGludCAqdHJpZ2dlcmluZywgaW50ICpwb2xhcml0eSwgY2hhciAqKm5hbWUpCitpbnQgYWNwaV9wY2lfbGlua19hbGxvY2F0ZV9pcnEoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgaW5kZXgsIGludCAqdHJpZ2dlcmluZywKKwkJCSAgICAgICBpbnQgKnBvbGFyaXR5LCBjaGFyICoqbmFtZSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwotCisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluazsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7CkBAIC02NjksMTEgKzY0MSwxMCBAQAogICovCiBpbnQgYWNwaV9wY2lfbGlua19mcmVlX2lycShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwotCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluazsKIAlhY3BpX3N0YXR1cyByZXN1bHQ7CiAKLQogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgbGluayBkZXZpY2VcbiIpOwpAQCAtNzA4LDkgKzY3OSw5IEBACiAJCQkgICJMaW5rICVzIGlzIGRlcmVmZXJlbmNlZFxuIiwKIAkJCSAgYWNwaV9kZXZpY2VfYmlkKGxpbmstPmRldmljZSkpKTsKIAotCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkgeworCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkKIAkJYWNwaV9ldmFsdWF0ZV9vYmplY3QobGluay0+ZGV2aWNlLT5oYW5kbGUsICJfRElTIiwgTlVMTCwgTlVMTCk7Ci0JfQorCiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2xpbmtfbG9jayk7CiAJcmV0dXJuIChsaW5rLT5pcnEuYWN0aXZlKTsKIH0KQEAgLTcyMSwxNSArNjkyLDExIEBACiAKIHN0YXRpYyBpbnQgYWNwaV9wY2lfbGlua19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwotCWludCBpID0gMDsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rOworCWludCBpOwogCWludCBmb3VuZCA9IDA7CiAKLQotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wY2lfbGluayksIEdGUF9LRVJORUwpOwogCWlmICghbGluaykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03NjcsOSArNzM0LDcgQEAKIAogCXByaW50aygiXG4iKTsKIAotCS8qIFRCRDogQWNxdWlyZS9yZWxlYXNlIGxvY2sgKi8KLQlsaXN0X2FkZF90YWlsKCZsaW5rLT5ub2RlLCAmYWNwaV9saW5rLmVudHJpZXMpOwotCWFjcGlfbGluay5jb3VudCsrOworCWxpc3RfYWRkX3RhaWwoJmxpbmstPmxpc3QsICZhY3BpX2xpbmtfbGlzdCk7CiAKICAgICAgIGVuZDoKIAkvKiBkaXNhYmxlIGFsbCBsaW5rcyAtLSB0byBiZSBhY3RpdmF0ZWQgb24gdXNlICovCkBAIC03ODQsMjQgKzc0OSwxNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfcmVzdW1lKHN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rKQogewotCiAJaWYgKGxpbmstPnJlZmNudCAmJiBsaW5rLT5pcnEuYWN0aXZlICYmIGxpbmstPmlycS5pbml0aWFsaXplZCkKIAkJcmV0dXJuIChhY3BpX3BjaV9saW5rX3NldChsaW5rLCBsaW5rLT5pcnEuYWN0aXZlKSk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlycXJvdXRlcl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluayA9IE5VTEw7CisJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbms7CiAKLQlsaXN0X2Zvcl9lYWNoKG5vZGUsICZhY3BpX2xpbmsuZW50cmllcykgewotCQlsaW5rID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgYWNwaV9wY2lfbGluaywgbm9kZSk7Ci0JCWlmICghbGluaykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwotCQkJY29udGludWU7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZhY3BpX2xpbmtfbGlzdCwgbGlzdCkgewogCQlhY3BpX3BjaV9saW5rX3Jlc3VtZShsaW5rKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC04MDksMjAgKzc2NywxNSBAQAogCiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluayA9IE5VTEw7Ci0KLQotCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rOwogCiAJbGluayA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCW11dGV4X2xvY2soJmFjcGlfbGlua19sb2NrKTsKLQlsaXN0X2RlbCgmbGluay0+bm9kZSk7CisJbGlzdF9kZWwoJmxpbmstPmxpc3QpOwogCW11dGV4X3VubG9jaygmYWNwaV9saW5rX2xvY2spOwogCiAJa2ZyZWUobGluayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMxLDcgKzg4NCw2IEBACiB7CiAJaW50IGVycm9yOwogCi0KIAlpZiAoYWNwaV9kaXNhYmxlZCB8fCBhY3BpX25vaXJxKQogCQlyZXR1cm4gMDsKIApAQCAtOTU3LDkgKzkwOSw2IEBACiAJCQlhY3BpX2lycV9iYWxhbmNlID0gMDsKIAl9CiAKLQlhY3BpX2xpbmsuY291bnQgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZhY3BpX2xpbmsuZW50cmllcyk7Ci0KIAlpZiAoYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjaV9saW5rX2RyaXZlcikgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwppbmRleCBjOTI2ZTdkLi41NjY2NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwpAQCAtNTQsMTAgKzU0LDYgQEAKICNkZWZpbmUgQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTgkweDAxCiAjZGVmaW5lIEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfVU5LTk9XTiAweEZGCiAKLSNpZmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCi0jdW5kZWYgTU9EVUxFX1BBUkFNX1BSRUZJWAotI2VuZGlmCi0jZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggImFjcGkuIgogaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKIG1vZHVsZV9wYXJhbV9uYW1lZChwb3dlcl9ub2NoZWNrLCBhY3BpX3Bvd2VyX25vY2hlY2ssIGJvb2wsIDAwMCk7CiAKQEAgLTc3MywxNCArNzY5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfcG93ZXJfaW5pdCh2b2lkKQoraW50IF9faW5pdCBhY3BpX3Bvd2VyX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCi0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAJSU5JVF9MSVNUX0hFQUQoJmFjcGlfcG93ZXJfcmVzb3VyY2VfbGlzdCk7CiAKIAlhY3BpX3Bvd2VyX2RpciA9IHByb2NfbWtkaXIoQUNQSV9QT1dFUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CkBAIC03OTUsNSArNzg3LDMgQEAKIAogCXJldHVybiAwOwogfQotCi1zdWJzeXNfaW5pdGNhbGwoYWNwaV9wb3dlcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCmluZGV4IDQyOGM5MTFkLi4wNWRmZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKQEAgLTQ5NiwxMSArNDk2LDggQEAKIH0KICNlbmRpZgkJCQkvKiBIQVZFX0FDUElfTEVHQUNZX0FMQVJNICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2xlZXBfcHJvY19pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc2xlZXBfcHJvY19pbml0KHZvaWQpCiB7Ci0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAjaWZkZWYJQ09ORklHX0FDUElfUFJPQ0ZTCiAJLyogJ3NsZWVwJyBbUi9XXSAqLwogCXByb2NfY3JlYXRlKCJzbGVlcCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTUyNyw1ICs1MjQsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLWxhdGVfaW5pdGNhbGwoYWNwaV9zbGVlcF9wcm9jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBmYTJmNzQyLi40NWFkMzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9zdGFydChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3Jfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KTsKIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqcF9jcHUpOwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9oYW5kbGVfZWplY3Qoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CiAKQEAgLTEwNCw2ICsxMDQsNyBAQAogCQkuc3RhcnQgPSBhY3BpX3Byb2Nlc3Nvcl9zdGFydCwKIAkJLnN1c3BlbmQgPSBhY3BpX3Byb2Nlc3Nvcl9zdXNwZW5kLAogCQkucmVzdW1lID0gYWNwaV9wcm9jZXNzb3JfcmVzdW1lLAorCQkubm90aWZ5ID0gYWNwaV9wcm9jZXNzb3Jfbm90aWZ5LAogCQl9LAogfTsKIApAQCAtNDI2LDYgKzQyNywyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1hcF94MmFwaWNfaWQoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICplbnRyeSwKKwkJCSBpbnQgZGV2aWNlX2RlY2xhcmF0aW9uLCB1MzIgYWNwaV9pZCwgaW50ICphcGljX2lkKQoreworCXN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICphcGljID0KKwkJKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICopZW50cnk7CisJdTMyIHRtcCA9IGFwaWMtPmxvY2FsX2FwaWNfaWQ7CisKKwkvKiBPbmx5IGNoZWNrIGVuYWJsZWQgQVBJQ3MqLworCWlmICghKGFwaWMtPmxhcGljX2ZsYWdzICYgQUNQSV9NQURUX0VOQUJMRUQpKQorCQlyZXR1cm4gMDsKKworCS8qIERldmljZSBzdGF0ZW1lbnQgZGVjbGFyYXRpb24gdHlwZSAqLworCWlmIChkZXZpY2VfZGVjbGFyYXRpb24pIHsKKwkJaWYgKGFwaWMtPnVpZCA9PSBhY3BpX2lkKQorCQkJZ290byBmb3VuZDsKKwl9CisKKwlyZXR1cm4gMDsKK2ZvdW5kOgorCSphcGljX2lkID0gdG1wOworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IG1hcF9sc2FwaWNfaWQoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICplbnRyeSwKIAkJaW50IGRldmljZV9kZWNsYXJhdGlvbiwgdTMyIGFjcGlfaWQsIGludCAqYXBpY19pZCkKIHsKQEAgLTQ3NSw2ICs0OTksOSBAQAogCQlpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUMpIHsKIAkJCWlmIChtYXBfbGFwaWNfaWQoaGVhZGVyLCBhY3BpX2lkLCAmYXBpY19pZCkpCiAJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX1gyQVBJQykgeworCQkJaWYgKG1hcF94MmFwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmYXBpY19pZCkpCisJCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX1NBUElDKSB7CiAJCQlpZiAobWFwX2xzYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZhcGljX2lkKSkKIAkJCQlicmVhazsKQEAgLTY2NSw3ICs2OTIsNiBAQAogc3RhdGljIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3Jfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCkBAIC03MDIsOSArNzI4LDYgQEAKIAlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICZzeXNkZXYtPmtvYmosICJzeXNkZXYiKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIocHItPmhhbmRsZSwgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkgICAgIGFjcGlfcHJvY2Vzc29yX25vdGlmeSwgcHIpOwotCiAJLyogX1BEQyBjYWxsIHNob3VsZCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlIChpZiByZXFkLikuICovCiAJYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhwcik7CiAJYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhwcik7CkBAIC03NTAsMTggKzc3MywxNCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KQogewotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBkYXRhOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWludCBzYXZlZDsKIAogCWlmICghcHIpCiAJCXJldHVybjsKIAotCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKHByLT5oYW5kbGUsICZkZXZpY2UpKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX1BST0NFU1NPUl9OT1RJRllfUEVSRk9STUFOQ0U6CiAJCXNhdmVkID0gcHItPnBlcmZvcm1hbmNlX3BsYXRmb3JtX2xpbWl0OwpAQCAtODQwLDcgKzg1OSw2IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKIAogCkBAIC04NTksOSArODc3LDYgQEAKIAogCWFjcGlfcHJvY2Vzc29yX3Bvd2VyX2V4aXQocHIsIGRldmljZSk7CiAKLQlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihwci0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCi0JCQkJCSAgICBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnkpOwotCiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICJzeXNkZXYiKTsKIAogCWFjcGlfcHJvY2Vzc29yX3JlbW92ZV9mcyhkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCA3YmMyMmE0Li40ZTZlNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtNjQsNyArNjQsNiBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgICAgICBBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl9pZGxlIik7CiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0ZJTEVfUE9XRVIJInBvd2VyIgotI2RlZmluZSBVU19UT19QTV9USU1FUl9USUNLUyh0KQkJKCh0ICogKFBNX1RJTUVSX0ZSRVFVRU5DWS8xMDAwKSkgLyAxMDAwKQogI2RlZmluZSBQTV9USU1FUl9USUNLX05TCQkoMTAwMDAwMDAwMFVMTC9QTV9USU1FUl9GUkVRVUVOQ1kpCiAjZGVmaW5lIEMyX09WRVJIRUFECQkJMQkvKiAxdXMgKi8KICNkZWZpbmUgQzNfT1ZFUkhFQUQJCQkxCS8qIDF1cyAqLwpAQCAtNzgsNiArNzcsMTAgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeV9mYWN0b3IgX19yZWFkX21vc3RseSA9IDI7CiBtb2R1bGVfcGFyYW0obGF0ZW5jeV9mYWN0b3IsIHVpbnQsIDA2NDQpOwogCitzdGF0aWMgczY0IHVzX3RvX3BtX3RpbWVyX3RpY2tzKHM2NCB0KQoreworCXJldHVybiBkaXY2NF91NjQodCAqIFBNX1RJTUVSX0ZSRVFVRU5DWSwgMTAwMDAwMCk7Cit9CiAvKgogICogSUJNIFRoaW5rUGFkIFI0MGUgY3Jhc2hlcyBteXN0ZXJpb3VzbHkgd2hlbiBnb2luZyBpbnRvIEMyIG9yIEMzLgogICogRm9yIG5vdyBkaXNhYmxlIHRoaXMuIFByb2JhYmx5IGEgYnVnIHNvbWV3aGVyZSBlbHNlLgpAQCAtMTAxLDU3ICsxMDQsNiBAQAogLyogQWN0dWFsbHkgdGhpcyBzaG91bGRuJ3QgYmUgX19jcHVpbml0ZGF0YSwgd291bGQgYmUgYmV0dGVyIHRvIGZpeCB0aGUKICAgIGNhbGxlcnMgdG8gb25seSBydW4gb25jZSAtQUsgKi8KIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2NwdWluaXRkYXRhIHByb2Nlc3Nvcl9wb3dlcl9kbWlfdGFibGVbXSA9IHsKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNzBXVyIpfSwgKHZvaWQgKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjBXVyIpfSwgKHZvaWQgKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNDNXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNDVXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNDdXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTBXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTJXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTVXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTZXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTlXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjBXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjFXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjJXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjRXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjVXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjhXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiTWVkaW9uIDQxNzAwIiwgewotCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCi0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwiUjAxLUExSiIpfSwgKHZvaWQgKikxfSwKIAl7IHNldF9tYXhfY3N0YXRlLCAiQ2xldm8gNTYwMEQiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJQaG9lbml4IFRlY2hub2xvZ2llcyBMVEQiKSwKIAkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCJTSEU4NDVNMC44NkMuMDAxMy5ELjAzMDIxMzEzMDciKX0sCkBAIC0xNTksMjUgKzExMSw2IEBACiAJe30sCiB9OwogCi1zdGF0aWMgaW5saW5lIHUzMiB0aWNrc19lbGFwc2VkKHUzMiB0MSwgdTMyIHQyKQotewotCWlmICh0MiA+PSB0MSkKLQkJcmV0dXJuICh0MiAtIHQxKTsKLQllbHNlIGlmICghKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfMzJCSVRfVElNRVIpKQotCQlyZXR1cm4gKCgoMHgwMEZGRkZGRiAtIHQxKSArIHQyKSAmIDB4MDBGRkZGRkYpOwotCWVsc2UKLQkJcmV0dXJuICgoMHhGRkZGRkZGRiAtIHQxKSArIHQyKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgdGlja3NfZWxhcHNlZF9pbl91cyh1MzIgdDEsIHUzMiB0MikKLXsKLQlpZiAodDIgPj0gdDEpCi0JCXJldHVybiBQTV9USU1FUl9USUNLU19UT19VUyh0MiAtIHQxKTsKLQllbHNlIGlmICghKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfMzJCSVRfVElNRVIpKQotCQlyZXR1cm4gUE1fVElNRVJfVElDS1NfVE9fVVMoKCgweDAwRkZGRkZGIC0gdDEpICsgdDIpICYgMHgwMEZGRkZGRik7Ci0JZWxzZQotCQlyZXR1cm4gUE1fVElNRVJfVElDS1NfVE9fVVMoKDB4RkZGRkZGRkYgLSB0MSkgKyB0Mik7Ci19CiAKIC8qCiAgKiBDYWxsZXJzIHNob3VsZCBkaXNhYmxlIGludGVycnVwdHMgYmVmb3JlIHRoZSBjYWxsIGFuZCBlbmFibGUKQEAgLTYzMCw3ICs1NjMsNyBAQAogCSAqIEluIGVpdGhlciBjYXNlLCB0aGUgcHJvcGVyIHdheSB0bwogCSAqIGhhbmRsZSBCTV9STEQgaXMgdG8gc2V0IGl0IGFuZCBsZWF2ZSBpdCBzZXQuCiAJICovCi0JYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQsIDEpOworCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfUkxELCAxKTsKIAogCXJldHVybjsKIH0KQEAgLTgwMCw5ICs3MzMsOSBAQAogewogCXUzMiBibV9zdGF0dXMgPSAwOwogCi0JYWNwaV9nZXRfcmVnaXN0ZXJfdW5sb2NrZWQoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsICZibV9zdGF0dXMpOworCWFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsICZibV9zdGF0dXMpOwogCWlmIChibV9zdGF0dXMpCi0JCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfU1RBVFVTLCAxKTsKKwkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsIDEpOwogCS8qCiAJICogUElJWDQgRXJyYXR1bSAjMTg6IE5vdGUgdGhhdCBCTV9TVFMgZG9lc24ndCBhbHdheXMgcmVmbGVjdAogCSAqIHRoZSB0cnVlIHN0YXRlIG9mIGJ1cyBtYXN0ZXJpbmcgYWN0aXZpdHk7IGZvcmNpbmcgdXMgdG8KQEAgLTg1Myw3ICs3ODYsOCBAQAogc3RhdGljIGludCBhY3BpX2lkbGVfZW50ZXJfYzEoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpCiB7Ci0JdTMyIHQxLCB0MjsKKwlrdGltZV90ICBrdDEsIGt0MjsKKwlzNjQgaWRsZV90aW1lOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdGF0ZSk7CiAKQEAgLTg3MSwxNCArODA1LDE1IEBACiAJCXJldHVybiAwOwogCX0KIAotCXQxID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCWt0MSA9IGt0aW1lX2dldF9yZWFsKCk7CiAJYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKLQl0MiA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwlrdDIgPSBrdGltZV9nZXRfcmVhbCgpOworCWlkbGVfdGltZSA9ICBrdGltZV90b191cyhrdGltZV9zdWIoa3QyLCBrdDEpKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAljeC0+dXNhZ2UrKzsKIAotCXJldHVybiB0aWNrc19lbGFwc2VkX2luX3VzKHQxLCB0Mik7CisJcmV0dXJuIGlkbGVfdGltZTsKIH0KIAogLyoqCkBAIC04OTEsOCArODI2LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3ggPSBjcHVpZGxlX2dldF9zdGF0ZWRhdGEoc3RhdGUpOwotCXUzMiB0MSwgdDI7Ci0JaW50IHNsZWVwX3RpY2tzID0gMDsKKwlrdGltZV90ICBrdDEsIGt0MjsKKwlzNjQgaWRsZV90aW1lOworCXM2NCBzbGVlcF90aWNrcyA9IDA7CiAKIAlwciA9IF9fZ2V0X2NwdV92YXIocHJvY2Vzc29ycyk7CiAKQEAgLTkyNSwxOCArODYxLDE5IEBACiAJaWYgKGN4LT50eXBlID09IEFDUElfU1RBVEVfQzMpCiAJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAKLQl0MSA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwlrdDEgPSBrdGltZV9nZXRfcmVhbCgpOwogCS8qIFRlbGwgdGhlIHNjaGVkdWxlciB0aGF0IHdlIGFyZSBnb2luZyBkZWVwLWlkbGU6ICovCiAJc2NoZWRfY2xvY2tfaWRsZV9zbGVlcF9ldmVudCgpOwogCWFjcGlfaWRsZV9kb19lbnRyeShjeCk7Ci0JdDIgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CisJa3QyID0ga3RpbWVfZ2V0X3JlYWwoKTsKKwlpZGxlX3RpbWUgPSAga3RpbWVfdG9fdXMoa3RpbWVfc3ViKGt0Miwga3QxKSk7CiAKICNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2KQogCS8qIFRTQyBjb3VsZCBoYWx0IGluIGlkbGUsIHNvIG5vdGlmeSB1c2VycyAqLwogCWlmICh0c2NfaGFsdHNfaW5fYyhjeC0+dHlwZSkpCiAJCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOzsKICNlbmRpZgotCXNsZWVwX3RpY2tzID0gdGlja3NfZWxhcHNlZCh0MSwgdDIpOworCXNsZWVwX3RpY2tzID0gdXNfdG9fcG1fdGltZXJfdGlja3MoaWRsZV90aW1lKTsKIAogCS8qIFRlbGwgdGhlIHNjaGVkdWxlciBob3cgbXVjaCB3ZSBpZGxlZDogKi8KIAlzY2hlZF9jbG9ja19pZGxlX3dha2V1cF9ldmVudChzbGVlcF90aWNrcypQTV9USU1FUl9USUNLX05TKTsKQEAgLTk0OCw3ICs4ODUsNyBAQAogCiAJYWNwaV9zdGF0ZV90aW1lcl9icm9hZGNhc3QocHIsIGN4LCAwKTsKIAljeC0+dGltZSArPSBzbGVlcF90aWNrczsKLQlyZXR1cm4gdGlja3NfZWxhcHNlZF9pbl91cyh0MSwgdDIpOworCXJldHVybiBpZGxlX3RpbWU7CiB9CiAKIHN0YXRpYyBpbnQgYzNfY3B1X2NvdW50OwpAQCAtOTY2LDggKzkwMywxMCBAQAogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdGF0ZSk7Ci0JdTMyIHQxLCB0MjsKLQlpbnQgc2xlZXBfdGlja3MgPSAwOworCWt0aW1lX3QgIGt0MSwga3QyOworCXM2NCBpZGxlX3RpbWU7CisJczY0IHNsZWVwX3RpY2tzID0gMDsKKwogCiAJcHIgPSBfX2dldF9jcHVfdmFyKHByb2Nlc3NvcnMpOwogCkBAIC0xMDI4LDIwICs5NjcsMjEgQEAKIAkJYzNfY3B1X2NvdW50Kys7CiAJCS8qIERpc2FibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiB3aGVuIGFsbCBDUFVzIGFyZSBpbiBDMyAqLwogCQlpZiAoYzNfY3B1X2NvdW50ID09IG51bV9vbmxpbmVfY3B1cygpKQotCQkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDEpOworCQkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDEpOwogCQlzcGluX3VubG9jaygmYzNfbG9jayk7CiAJfSBlbHNlIGlmICghcHItPmZsYWdzLmJtX2NoZWNrKSB7CiAJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAJfQogCi0JdDEgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CisJa3QxID0ga3RpbWVfZ2V0X3JlYWwoKTsKIAlhY3BpX2lkbGVfZG9fZW50cnkoY3gpOwotCXQyID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCWt0MiA9IGt0aW1lX2dldF9yZWFsKCk7CisJaWRsZV90aW1lID0gIGt0aW1lX3RvX3VzKGt0aW1lX3N1YihrdDIsIGt0MSkpOwogCiAJLyogUmUtZW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KIAlpZiAocHItPmZsYWdzLmJtX2NoZWNrICYmIHByLT5mbGFncy5ibV9jb250cm9sKSB7CiAJCXNwaW5fbG9jaygmYzNfbG9jayk7Ci0JCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKKwkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDApOwogCQljM19jcHVfY291bnQtLTsKIAkJc3Bpbl91bmxvY2soJmMzX2xvY2spOwogCX0KQEAgLTEwNTEsNyArOTkxLDcgQEAKIAlpZiAodHNjX2hhbHRzX2luX2MoQUNQSV9TVEFURV9DMykpCiAJCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOwogI2VuZGlmCi0Jc2xlZXBfdGlja3MgPSB0aWNrc19lbGFwc2VkKHQxLCB0Mik7CisJc2xlZXBfdGlja3MgPSB1c190b19wbV90aW1lcl90aWNrcyhpZGxlX3RpbWUpOwogCS8qIFRlbGwgdGhlIHNjaGVkdWxlciBob3cgbXVjaCB3ZSBpZGxlZDogKi8KIAlzY2hlZF9jbG9ja19pZGxlX3dha2V1cF9ldmVudChzbGVlcF90aWNrcypQTV9USU1FUl9USUNLX05TKTsKIApAQCAtMTA2Miw3ICsxMDAyLDcgQEAKIAogCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMCk7CiAJY3gtPnRpbWUgKz0gc2xlZXBfdGlja3M7Ci0JcmV0dXJuIHRpY2tzX2VsYXBzZWRfaW5fdXModDEsIHQyKTsKKwlyZXR1cm4gaWRsZV90aW1lOwogfQogCiBzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgYWNwaV9pZGxlX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggNjhmZDNkMi4uY2FmYjQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTQ3OSw2ICs0NzksMTMgQEAKIAkJZ290byBlbmQ7CiAJfQogCisJaWYgKHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQUxMICYmCisJICAgIHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQU5ZICYmCisJICAgIHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfSFdfQUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX1BTRDpjb29yZF90eXBlXG4iKTsKKwkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQogZW5kOgogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtNTAxLDkgKzUwOCwxMCBAQAogCiAJbXV0ZXhfbG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwogCi0JcmV0dmFsID0gMDsKLQotCS8qIENhbGwgX1BTRCBmb3IgYWxsIENQVXMgKi8KKwkvKgorCSAqIENoZWNrIGlmIGFub3RoZXIgZHJpdmVyIGhhcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGFuZCBhYm9ydCBiZWZvcmUKKwkgKiBjaGFuZ2luZyBwci0+cGVyZm9ybWFuY2UgaWYgaXQgaGFzLiBDaGVjayBpbnB1dCBkYXRhIGFzIHdlbGwuCisJICovCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcHIgPSBwZXJfY3B1KHByb2Nlc3NvcnMsIGkpOwogCQlpZiAoIXByKSB7CkBAIC01MTMsMTMgKzUyMSwyMCBAQAogCiAJCWlmIChwci0+cGVyZm9ybWFuY2UpIHsKIAkJCXJldHZhbCA9IC1FQlVTWTsKLQkJCWNvbnRpbnVlOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAKIAkJaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyX2NwdV9wdHIocGVyZm9ybWFuY2UsIGkpKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJY29udGludWU7CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KKwl9CisKKwkvKiBDYWxsIF9QU0QgZm9yIGFsbCBDUFVzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJcHIgPSBwZXJfY3B1KHByb2Nlc3NvcnMsIGkpOworCQlpZiAoIXByKQorCQkJY29udGludWU7CiAKIAkJcHItPnBlcmZvcm1hbmNlID0gcGVyX2NwdV9wdHIocGVyZm9ybWFuY2UsIGkpOwogCQljcHVtYXNrX3NldF9jcHUoaSwgcHItPnBlcmZvcm1hbmNlLT5zaGFyZWRfY3B1X21hcCk7CkBAIC01MzUsMjYgKzU1MCw2IEBACiAJICogTm93IHRoYXQgd2UgaGF2ZSBfUFNEIGRhdGEgZnJvbSBhbGwgQ1BVcywgbGV0cyBzZXR1cCBQLXN0YXRlIAogCSAqIGRvbWFpbiBpbmZvLgogCSAqLwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCXByID0gcGVyX2NwdShwcm9jZXNzb3JzLCBpKTsKLQkJaWYgKCFwcikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEJhc2ljIHZhbGlkaXR5IGNoZWNrIGZvciBkb21haW4gaW5mbyAqLwotCQlwZG9tYWluID0gJihwci0+cGVyZm9ybWFuY2UtPmRvbWFpbl9pbmZvKTsKLQkJaWYgKChwZG9tYWluLT5yZXZpc2lvbiAhPSBBQ1BJX1BTRF9SRVYwX1JFVklTSU9OKSB8fAotCQkgICAgKHBkb21haW4tPm51bV9lbnRyaWVzICE9IEFDUElfUFNEX1JFVjBfRU5UUklFUykpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycl9yZXQ7Ci0JCX0KLQkJaWYgKHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQUxMICYmCi0JCSAgICBwZG9tYWluLT5jb29yZF90eXBlICE9IERPTUFJTl9DT09SRF9UWVBFX1NXX0FOWSAmJgotCQkgICAgcGRvbWFpbi0+Y29vcmRfdHlwZSAhPSBET01BSU5fQ09PUkRfVFlQRV9IV19BTEwpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycl9yZXQ7Ci0JCX0KLQl9Ci0KIAljcHVtYXNrX2NsZWFyKGNvdmVyZWRfY3B1cyk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcHIgPSBwZXJfY3B1KHByb2Nlc3NvcnMsIGkpOwpAQCAtNjQzLDYgKzYzOCw3IEBACiAJCXByLT5wZXJmb3JtYW5jZSA9IE5VTEw7IC8qIFdpbGwgYmUgc2V0IGZvciByZWFsIGluIHJlZ2lzdGVyICovCiAJfQogCitlcnJfb3V0OgogCW11dGV4X3VubG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwogCWZyZWVfY3B1bWFza192YXIoY292ZXJlZF9jcHVzKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwppbmRleCBiMWViMzc2Li4zOTgzOGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwpAQCAtMzczLDcgKzM3Myw4IEBACiAJcmV0dXJuIG1heF9zdGF0ZTsKIH0KIHN0YXRpYyBpbnQKLXByb2Nlc3Nvcl9nZXRfbWF4X3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitwcm9jZXNzb3JfZ2V0X21heF9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKKwkJCXVuc2lnbmVkIGxvbmcgKnN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtMzgxLDI4ICszODIsMjkgQEAKIAlpZiAoIWRldmljZSB8fCAhcHIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFjcGlfcHJvY2Vzc29yX21heF9zdGF0ZShwcikpOworCSpzdGF0ZSA9IGFjcGlfcHJvY2Vzc29yX21heF9zdGF0ZShwcik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXByb2Nlc3Nvcl9nZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitwcm9jZXNzb3JfZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKKwkJCXVuc2lnbmVkIGxvbmcgKmN1cl9zdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQlpbnQgY3VyX3N0YXRlOwogCiAJaWYgKCFkZXZpY2UgfHwgIXByKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWN1cl9zdGF0ZSA9IGNwdWZyZXFfZ2V0X2N1cl9zdGF0ZShwci0+aWQpOworCSpjdXJfc3RhdGUgPSBjcHVmcmVxX2dldF9jdXJfc3RhdGUocHItPmlkKTsKIAlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpCi0JCWN1cl9zdGF0ZSArPSBwci0+dGhyb3R0bGluZy5zdGF0ZTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdXJfc3RhdGUpOworCQkqY3VyX3N0YXRlICs9IHByLT50aHJvdHRsaW5nLnN0YXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1wcm9jZXNzb3Jfc2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IHN0YXRlKQorcHJvY2Vzc29yX3NldF9jdXJfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsCisJCQl1bnNpZ25lZCBsb25nIHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtNTA3LDcgKzUwOSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3Byb2Nlc3Nvcl9saW1pdF9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCmluZGV4IGQyNzgzODEuLmQwZDFmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC03ODMsMTEgKzc4Myw5IEBACiAJCSAgICAoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcyAqKSYocHItPnRocm90dGxpbmcuCiAJCQkJCQkgICAgICBzdGF0ZXNfdHNzW2ldKTsKIAkJaWYgKHR4LT5jb250cm9sID09IHZhbHVlKQotCQkJYnJlYWs7CisJCQlyZXR1cm4gaTsKIAl9Ci0JaWYgKGkgPiBwci0+dGhyb3R0bGluZy5zdGF0ZV9jb3VudCkKLQkJaSA9IC0xOwotCXJldHVybiBpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBhY3BpX2dldF90aHJvdHRsaW5nX3ZhbHVlKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCkBAIC0xMjkxLDcgKzEyODksNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nX2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDU5YWZkNTIuLjRiMjE0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTEwMiw4ICsxMDIsOCBAQAogCXUxNiBjeWNsZV9jb3VudDsKIAl1MTYgdGVtcF9ub3c7CiAJdTE2IHZvbHRhZ2Vfbm93OwotCXMxNiBjdXJyZW50X25vdzsKLQlzMTYgY3VycmVudF9hdmc7CisJczE2IHJhdGVfbm93OworCXMxNiByYXRlX2F2ZzsKIAl1MTYgY2FwYWNpdHlfbm93OwogCXUxNiBzdGF0ZV9vZl9jaGFyZ2U7CiAJdTE2IHN0YXRlOwpAQCAtMjAyLDkgKzIwMiw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCXN3aXRjaCAocHNwKSB7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6Ci0JCWlmIChiYXR0ZXJ5LT5jdXJyZW50X25vdyA8IDApCisJCWlmIChiYXR0ZXJ5LT5yYXRlX25vdyA8IDApCiAJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7Ci0JCWVsc2UgaWYgKGJhdHRlcnktPmN1cnJlbnRfbm93ID4gMCkKKwkJZWxzZSBpZiAoYmF0dGVyeS0+cmF0ZV9ub3cgPiAwKQogCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOwogCQllbHNlCiAJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKQEAgLTIyNCwxMSArMjI0LDEzIEBACiAJCQkJYWNwaV9iYXR0ZXJ5X3ZzY2FsZShiYXR0ZXJ5KSAqIDEwMDA7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6Ci0JCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPmN1cnJlbnRfbm93KSAqCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1c6CisJCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPnJhdGVfbm93KSAqCiAJCQkJYWNwaV9iYXR0ZXJ5X2lwc2NhbGUoYmF0dGVyeSkgKiAxMDAwOwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOgotCQl2YWwtPmludHZhbCA9IGFicyhiYXR0ZXJ5LT5jdXJyZW50X2F2ZykgKgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUE9XRVJfQVZHOgorCQl2YWwtPmludHZhbCA9IGFicyhiYXR0ZXJ5LT5yYXRlX2F2ZykgKgogCQkJCWFjcGlfYmF0dGVyeV9pcHNjYWxlKGJhdHRlcnkpICogMTAwMDsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKQEAgLTI5Myw2ICsyOTUsOCBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHLAorCVBPV0VSX1NVUFBMWV9QUk9QX1BPV0VSX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9BVkcsCiAJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFksCiAJUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0ZVTExfREVTSUdOLAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMLApAQCAtMzAxLDYgKzMwNSw3IEBACiAJUE9XRVJfU1VQUExZX1BST1BfTU9ERUxfTkFNRSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVIsCiB9OworCiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMzMCw4ICszMzUsOCBAQAogc3RhdGljIHN0cnVjdCBhY3BpX2JhdHRlcnlfcmVhZGVyIHN0YXRlX3JlYWRlcnNbXSA9IHsKIAl7MHgwOCwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCB0ZW1wX25vdyl9LAogCXsweDA5LCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHZvbHRhZ2Vfbm93KX0sCi0JezB4MGEsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgY3VycmVudF9ub3cpfSwKLQl7MHgwYiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjdXJyZW50X2F2Zyl9LAorCXsweDBhLCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHJhdGVfbm93KX0sCisJezB4MGIsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgcmF0ZV9hdmcpfSwKIAl7MHgwZiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjYXBhY2l0eV9ub3cpfSwKIAl7MHgwZSwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzdGF0ZV9vZl9jaGFyZ2UpfSwKIAl7MHgxNiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzdGF0ZSl9LApAQCAtNDc5LDkgKzQ4NCw5IEBACiBhY3BpX3Nic19hZGRfZnMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqZGlyLAogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudF9kaXIsCiAJCWNoYXIgKmRpcl9uYW1lLAotCQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICppbmZvX2ZvcHMsCi0JCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnN0YXRlX2ZvcHMsCi0JCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmFsYXJtX2ZvcHMsIHZvaWQgKmRhdGEpCisJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmluZm9fZm9wcywKKwkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdGVfZm9wcywKKwkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqYWxhcm1fZm9wcywgdm9pZCAqZGF0YSkKIHsKIAlpZiAoISpkaXIpIHsKIAkJKmRpciA9IHByb2NfbWtkaXIoZGlyX25hbWUsIHBhcmVudF9kaXIpOwpAQCAtNTg4LDkgKzU5Myw5IEBACiAJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBzdGF0ZTogICAgICAgICAgJXNcbiIsCiAJCSAgIChiYXR0ZXJ5LT5zdGF0ZSAmIDB4MDAxMCkgPyAiY3JpdGljYWwiIDogIm9rIik7CiAJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgJXNcbiIsCi0JCSAgIChiYXR0ZXJ5LT5jdXJyZW50X25vdyA8IDApID8gImRpc2NoYXJnaW5nIiA6Ci0JCSAgICgoYmF0dGVyeS0+Y3VycmVudF9ub3cgPiAwKSA/ICJjaGFyZ2luZyIgOiAiY2hhcmdlZCIpKTsKLQlyYXRlID0gYWJzKGJhdHRlcnktPmN1cnJlbnRfbm93KSAqIGFjcGlfYmF0dGVyeV9pcHNjYWxlKGJhdHRlcnkpOworCQkgICAoYmF0dGVyeS0+cmF0ZV9ub3cgPCAwKSA/ICJkaXNjaGFyZ2luZyIgOgorCQkgICAoKGJhdHRlcnktPnJhdGVfbm93ID4gMCkgPyAiY2hhcmdpbmciIDogImNoYXJnZWQiKSk7CisJcmF0ZSA9IGFicyhiYXR0ZXJ5LT5yYXRlX25vdykgKiBhY3BpX2JhdHRlcnlfaXBzY2FsZShiYXR0ZXJ5KTsKIAlyYXRlICo9IChhY3BpX2JhdHRlcnlfbW9kZShiYXR0ZXJ5KSk/KGJhdHRlcnktPnZvbHRhZ2Vfbm93ICoKIAkJCWFjcGlfYmF0dGVyeV92c2NhbGUoYmF0dGVyeSkvMTAwMCk6MTsKIAlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAlZCVzXG4iLCByYXRlLApAQCAtNjc2LDcgKzY4MSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfYmF0dGVyeV9yZWFkX2FsYXJtLCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9iYXR0ZXJ5X2luZm9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYmF0dGVyeV9pbmZvX2ZvcHMgPSB7CiAJLm9wZW4gPSBhY3BpX2JhdHRlcnlfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTY4NCw3ICs2ODksNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9iYXR0ZXJ5X3N0YXRlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX2JhdHRlcnlfc3RhdGVfZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYmF0dGVyeV9zdGF0ZV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTY5Miw3ICs2OTcsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9iYXR0ZXJ5X2FsYXJtX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX2JhdHRlcnlfYWxhcm1fZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYmF0dGVyeV9hbGFybV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gYWNwaV9iYXR0ZXJ5X3dyaXRlX2FsYXJtLApAQCAtNzI0LDcgKzcyOSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfYWNfcmVhZF9zdGF0ZSwgUERFKGlub2RlKS0+ZGF0YSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYWNfc3RhdGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYWNfc3RhdGVfZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYWNfc3RhdGVfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCBjNTRkN2I2Li4yMGMyM2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTExLDYgKzExLDggQEAKIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQlVTX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgic2NhbiIpOwogI2RlZmluZSBTVFJVQ1RfVE9fSU5UKHMpCSgqKChpbnQqKSZzKSkKQEAgLTM1Nyw2ICszNTksNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYWNwaV9kZXZpY2Vfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKworCWRldmljZS0+ZHJpdmVyLT5vcHMubm90aWZ5KGRldmljZSwgZXZlbnQpOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBkYXRhOworCisJYWNwaV9kZXZpY2Vfbm90aWZ5KGRldmljZS0+aGFuZGxlLCBBQ1BJX0ZJWEVEX0hBUkRXQVJFX0VWRU5ULCBkZXZpY2UpOworCXJldHVybiBBRV9PSzsKK30KKworc3RhdGljIGludCBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwljaGFyICpoaWQ7CisKKwloaWQgPSBhY3BpX2RldmljZV9oaWQoZGV2aWNlKTsKKwlpZiAoIXN0cmNtcChoaWQsIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCQlzdGF0dXMgPQorCQkgICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCisJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCwKKwkJCQkJCSAgICAgZGV2aWNlKTsKKwllbHNlIGlmICghc3RyY21wKGhpZCwgQUNQSV9CVVRUT05fSElEX1NMRUVQRikpCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKKwkJCQkJCSAgICAgYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkLAorCQkJCQkJICAgICBkZXZpY2UpOworCWVsc2UKKwkJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQkJCQkJICAgICBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeSwKKwkJCQkJCSAgICAgZGV2aWNlKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpZiAoIXN0cmNtcChhY3BpX2RldmljZV9oaWQoZGV2aWNlKSwgQUNQSV9CVVRUT05fSElEX1BPV0VSRikpCisJCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCisJCQkJCQlhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQpOworCWVsc2UgaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYpKQorCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAorCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKKwllbHNlCisJCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgIGFjcGlfZGV2aWNlX25vdGlmeSk7Cit9CisKIHN0YXRpYyBpbnQgYWNwaV9idXNfZHJpdmVyX2luaXQoc3RydWN0IGFjcGlfZGV2aWNlICosIHN0cnVjdCBhY3BpX2RyaXZlciAqKTsKIHN0YXRpYyBpbnQgYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KHN0cnVjdCBhY3BpX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYWNwaV9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqIGRldikKQEAgLTM2OSw2ICs0MjYsMjAgQEAKIAlpZiAoIXJldCkgewogCQlpZiAoYWNwaV9kZXYtPmJ1c19vcHMuYWNwaV9vcF9zdGFydCkKIAkJCWFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChhY3BpX2Rldik7CisKKwkJaWYgKGFjcGlfZHJ2LT5vcHMubm90aWZ5KSB7CisJCQlyZXQgPSBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGFjcGlfZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlpZiAoYWNwaV9kcnYtPm9wcy5zdG9wKQorCQkJCQlhY3BpX2Rydi0+b3BzLnN0b3AoYWNwaV9kZXYsCisJCQkJCQkgICBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKKwkJCQlpZiAoYWNwaV9kcnYtPm9wcy5yZW1vdmUpCisJCQkJCWFjcGlfZHJ2LT5vcHMucmVtb3ZlKGFjcGlfZGV2LAorCQkJCQkJICAgICBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJIkZvdW5kIGRyaXZlciBbJXNdIGZvciBkZXZpY2UgWyVzXVxuIiwKIAkJCWFjcGlfZHJ2LT5uYW1lLCBhY3BpX2Rldi0+cG5wLmJ1c19pZCkpOwpAQCAtMzgzLDYgKzQ1NCw4IEBACiAJc3RydWN0IGFjcGlfZHJpdmVyICphY3BpX2RydiA9IGFjcGlfZGV2LT5kcml2ZXI7CiAKIAlpZiAoYWNwaV9kcnYpIHsKKwkJaWYgKGFjcGlfZHJ2LT5vcHMubm90aWZ5KQorCQkJYWNwaV9kZXZpY2VfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGFjcGlfZGV2KTsKIAkJaWYgKGFjcGlfZHJ2LT5vcHMuc3RvcCkKIAkJCWFjcGlfZHJ2LT5vcHMuc3RvcChhY3BpX2RldiwgYWNwaV9kZXYtPnJlbW92YWxfdHlwZSk7CiAJCWlmIChhY3BpX2Rydi0+b3BzLnJlbW92ZSkKQEAgLTM5NSwyMiArNDY4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgYWNwaV9kcml2ZXIgKmFjcGlfZHJ2ID0gYWNwaV9kZXYtPmRyaXZlcjsKLQotCWlmIChhY3BpX2RydiAmJiBhY3BpX2Rydi0+b3BzLnNodXRkb3duKQotCQlhY3BpX2Rydi0+b3BzLnNodXRkb3duKGFjcGlfZGV2KTsKLQotCXJldHVybiA7Ci19Ci0KIHN0cnVjdCBidXNfdHlwZSBhY3BpX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJhY3BpIiwKIAkuc3VzcGVuZAk9IGFjcGlfZGV2aWNlX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhY3BpX2RldmljZV9yZXN1bWUsCi0JLnNodXRkb3duCT0gYWNwaV9kZXZpY2Vfc2h1dGRvd24sCiAJLm1hdGNoCQk9IGFjcGlfYnVzX21hdGNoLAogCS5wcm9iZQkJPSBhY3BpX2RldmljZV9wcm9iZSwKIAkucmVtb3ZlCQk9IGFjcGlfZGV2aWNlX3JlbW92ZSwKQEAgLTE1MjQsMTYgKzE1ODUsMTEgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAotCi0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKIAlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKQEAgLTE1NjYsNSArMTYyMiwzIEBACiAgICAgICBEb25lOgogCXJldHVybiByZXN1bHQ7CiB9Ci0KLXN1YnN5c19pbml0Y2FsbChhY3BpX3NjYW5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDAwNDU2ZmMuLjc3OWU0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAic2xlZXAuaCIKIAogdTggc2xlZXBfc3RhdGVzW0FDUElfU19TVEFURV9DT1VOVF07CkBAIC0yNDgsNyArMjUwLDcgQEAKIAogCS8qIElmIEFDUEkgaXMgbm90IGVuYWJsZWQgYnkgdGhlIEJJT1MsIHdlIG5lZWQgdG8gZW5hYmxlIGl0IGhlcmUuICovCiAJaWYgKHNldF9zY2lfZW5fb25fcmVzdW1lKQotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19TQ0lfRU5BQkxFLCAxKTsKKwkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSwgMSk7CiAJZWxzZQogCQlhY3BpX2VuYWJsZSgpOwogCkBAIC0zOTQsNiArMzk2LDE1IEBACiAJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU2F0ZWxsaXRlIEwzMDAiKSwKIAkJfSwKIAl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X29sZF9zdXNwZW5kX29yZGVyaW5nLAorCS5pZGVudCA9ICJQYW5hc29uaWMgQ0Y1MS0yTCIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAorCQkJCSJNYXRzdXNoaXRhIEVsZWN0cmljIEluZHVzdHJpYWwgQ28uLEx0ZC4iKSwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiQ0Y1MS0yTCIpLAorCQl9LAorCX0sCiAJe30sCiB9OwogI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKaW5kZXggMzkxZDAzNS4uZGE1MWYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwpAQCAtMzMsMTAgKzMzLDYgQEAKIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInN5c3RlbSIpOwotI2lmZGVmIE1PRFVMRV9QQVJBTV9QUkVGSVgKLSN1bmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCi0jZW5kaWYKLSNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCAiYWNwaS4iCiAKICNkZWZpbmUgQUNQSV9TWVNURU1fQ0xBU1MJCSJzeXN0ZW0iCiAjZGVmaW5lIEFDUElfU1lTVEVNX0RFVklDRV9OQU1FCQkiU3lzdGVtIgpAQCAtNjIsNiArNTgsNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV90YWJsZV9hdHRyX2xpc3QpOwogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICp0YWJsZXNfa29iajsKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZHluYW1pY190YWJsZXNfa29iajsKIAogc3RydWN0IGFjcGlfdGFibGVfYXR0ciB7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgYXR0cjsKQEAgLTEyOCw2ICsxMjUsNDAgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9zeXNmc190YWJsZV9oYW5kbGVyKHUzMiBldmVudCwgdm9pZCAqdGFibGUsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfdGFibGVfYXR0ciAqdGFibGVfYXR0cjsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEFDUElfVEFCTEVfRVZFTlRfTE9BRDoKKwkJdGFibGVfYXR0ciA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGFibGVfYXR0cikKKwkJCXJldHVybiBBRV9OT19NRU1PUlk7CisKKwkJYWNwaV90YWJsZV9hdHRyX2luaXQodGFibGVfYXR0ciwgdGFibGUpOworCQlpZiAoc3lzZnNfY3JlYXRlX2Jpbl9maWxlKGR5bmFtaWNfdGFibGVzX2tvYmosCisJCQkJCSZ0YWJsZV9hdHRyLT5hdHRyKSkgeworCQkJa2ZyZWUodGFibGVfYXR0cik7CisJCQlyZXR1cm4gQUVfRVJST1I7CisJCX0gZWxzZQorCQkJbGlzdF9hZGRfdGFpbCgmdGFibGVfYXR0ci0+bm9kZSwKKwkJCQkJJmFjcGlfdGFibGVfYXR0cl9saXN0KTsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1RBQkxFX0VWRU5UX1VOTE9BRDoKKwkJLyoKKwkJICogd2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgcmlnaHQgbm93CisJCSAqIGJlY2F1c2UgdGhlIHRhYmxlIGlzIG5vdCBkZWxldGVkIGZyb20gdGhlCisJCSAqIGdsb2JhbCB0YWJsZSBsaXN0IHdoZW4gdW5sb2FkaW5nIGl0LgorCQkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CisJfQorCXJldHVybiBBRV9PSzsKK30KKwogc3RhdGljIGludCBhY3BpX3N5c3RlbV9zeXNmc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGFjcGlfdGFibGVfYXR0ciAqdGFibGVfYXR0cjsKQEAgLTEzNyw3ICsxNjgsMTEgQEAKIAogCXRhYmxlc19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgidGFibGVzIiwgYWNwaV9rb2JqKTsKIAlpZiAoIXRhYmxlc19rb2JqKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnI7CisKKwlkeW5hbWljX3RhYmxlc19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiZHluYW1pYyIsIHRhYmxlc19rb2JqKTsKKwlpZiAoIWR5bmFtaWNfdGFibGVzX2tvYmopCisJCWdvdG8gZXJyX2R5bmFtaWNfdGFibGVzOwogCiAJZG8gewogCQlyZXN1bHQgPSBhY3BpX2dldF90YWJsZV9ieV9pbmRleCh0YWJsZV9pbmRleCwgJnRhYmxlX2hlYWRlcik7CkBAIC0xNjIsOCArMTk3LDE0IEBACiAJCX0KIAl9IHdoaWxlICghcmVzdWx0KTsKIAlrb2JqZWN0X3VldmVudCh0YWJsZXNfa29iaiwgS09CSl9BREQpOworCWtvYmplY3RfdWV2ZW50KGR5bmFtaWNfdGFibGVzX2tvYmosIEtPQkpfQUREKTsKKwlyZXN1bHQgPSBhY3BpX2luc3RhbGxfdGFibGVfaGFuZGxlcihhY3BpX3N5c2ZzX3RhYmxlX2hhbmRsZXIsIE5VTEwpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlc3VsdCA9PSBBRV9PSyA/IDAgOiAtRUlOVkFMOworZXJyX2R5bmFtaWNfdGFibGVzOgorCWtvYmplY3RfcHV0KHRhYmxlc19rb2JqKTsKK2VycjoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyoKQEAgLTU3MSwxMiArNjEyLDkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3N5c3RlbV9pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc3lzdGVtX2luaXQodm9pZCkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKKwlpbnQgcmVzdWx0OwogCiAJcmVzdWx0ID0gYWNwaV9zeXN0ZW1fcHJvY2ZzX2luaXQoKTsKIAlpZiAocmVzdWx0KQpAQCAtNTg2LDUgKzYyNCwzIEBACiAKIAlyZXR1cm4gcmVzdWx0OwogfQotCi1zdWJzeXNfaW5pdGNhbGwoYWNwaV9zeXN0ZW1faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggZmVjMWFlMy4uNjQ2ZDM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtNjIsNiArNjIsMTggQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgQUNQSV9NQURUX1RZUEVfTE9DQUxfWDJBUElDOgorCQl7CisJCQlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpYyAqcCA9CisJCQkgICAgKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICopaGVhZGVyOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKKwkJCSAgICAgICAiWDJBUElDIChhcGljX2lkWzB4JTAyeF0gdWlkWzB4JTAyeF0gJXMpXG4iLAorCQkJICAgICAgIHAtPmxvY2FsX2FwaWNfaWQsIHAtPnVpZCwKKwkJCSAgICAgICAocC0+bGFwaWNfZmxhZ3MgJiBBQ1BJX01BRFRfRU5BQkxFRCkgPworCQkJICAgICAgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBBQ1BJX01BRFRfVFlQRV9JT19BUElDOgogCQl7CiAJCQlzdHJ1Y3QgYWNwaV9tYWR0X2lvX2FwaWMgKnAgPQpAQCAtMTE2LDYgKzEyOCwyNCBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9YMkFQSUNfTk1JOgorCQl7CisJCQl1MTYgcG9sYXJpdHksIHRyaWdnZXI7CisJCQlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKnAgPQorCQkJICAgIChzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKiloZWFkZXI7CisKKwkJCXBvbGFyaXR5ID0gcC0+aW50aV9mbGFncyAmIEFDUElfTUFEVF9QT0xBUklUWV9NQVNLOworCQkJdHJpZ2dlciA9IChwLT5pbnRpX2ZsYWdzICYgQUNQSV9NQURUX1RSSUdHRVJfTUFTSykgPj4gMjsKKworCQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKKwkJCSAgICAgICAiWDJBUElDX05NSSAodWlkWzB4JTAyeF0gJXMgJXMgbGludFsweCV4XSlcbiIsCisJCQkgICAgICAgcC0+dWlkLAorCQkJICAgICAgIG1wc19pbnRpX2ZsYWdzX3BvbGFyaXR5W3BvbGFyaXR5XSwKKwkJCSAgICAgICBtcHNfaW50aV9mbGFnc190cmlnZ2VyW3RyaWdnZXJdLAorCQkJICAgICAgIHAtPmxpbnQpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDX09WRVJSSURFOgogCQl7CiAJCQlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX2FwaWNfb3ZlcnJpZGUgKnAgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggMWJhOWQ2MWUuLmU4YzE0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwpAQCAtMzcsMTEgKzM3LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdGhlcm1hbC5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KQEAgLTE5MCw3ICsxOTAsNiBAQAogCXN0cnVjdCBhY3BpX3RoZXJtYWxfc3RhdGUgc3RhdGU7CiAJc3RydWN0IGFjcGlfdGhlcm1hbF90cmlwcyB0cmlwczsKIAlzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCBkZXZpY2VzOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmU7CiAJaW50IHR6X2VuYWJsZWQ7CiAJc3RydWN0IG11dGV4IGxvY2s7CkBAIC0yOTAsNiArMjg5LDExIEBACiAKIAl0ei0+cG9sbGluZ19mcmVxdWVuY3kgPSBzZWNvbmRzICogMTA7CS8qIENvbnZlcnQgdmFsdWUgdG8gZGVjaS1zZWNvbmRzICovCiAKKwl0ei0+dGhlcm1hbF96b25lLT5wb2xsaW5nX2RlbGF5ID0gc2Vjb25kcyAqIDEwMDA7CisKKwlpZiAodHotPnR6X2VuYWJsZWQpCisJCXRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKHR6LT50aGVybWFsX3pvbmUpOworCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAiUG9sbGluZyBmcmVxdWVuY3kgc2V0IHRvICVsdSBzZWNvbmRzXG4iLAogCQkJICB0ei0+cG9sbGluZ19mcmVxdWVuY3kvMTApKTsKQEAgLTU2OSwzOTIgKzU3MywxOCBAQAogCXJldHVybiBhY3BpX3RoZXJtYWxfdHJpcHNfdXBkYXRlKHR6LCBBQ1BJX1RSSVBTX0lOSVQpOwogfQogCi1zdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9jcml0aWNhbChzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKLXsKLQlpZiAoIXR6IHx8ICF0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MudmFsaWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHR6LT50ZW1wZXJhdHVyZSA+PSB0ei0+dHJpcHMuY3JpdGljYWwudGVtcGVyYXR1cmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkNyaXRpY2FsIHRyaXAgcG9pbnRcbiIpOwotCQl0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCA9IDE7Ci0JfSBlbHNlIGlmICh0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCkKLQkJdHotPnRyaXBzLmNyaXRpY2FsLmZsYWdzLmVuYWJsZWQgPSAwOwotCi0JYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudCh0ei0+ZGV2aWNlLCBBQ1BJX1RIRVJNQUxfTk9USUZZX0NSSVRJQ0FMLAotCQkJCXR6LT50cmlwcy5jcml0aWNhbC5mbGFncy5lbmFibGVkKTsKLQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KHR6LT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCi0JCQkJCSAgZGV2X25hbWUoJnR6LT5kZXZpY2UtPmRldiksCi0JCQkJCSAgQUNQSV9USEVSTUFMX05PVElGWV9DUklUSUNBTCwKLQkJCQkJICB0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCk7Ci0KLQkvKiB0YWtlIG5vIGFjdGlvbiBpZiBub2NydCBpcyBzZXQgKi8KLQlpZighbm9jcnQpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcKLQkJCSJDcml0aWNhbCB0ZW1wZXJhdHVyZSByZWFjaGVkICglbGQgQyksIHNodXR0aW5nIGRvd24uXG4iLAotCQkJS0VMVklOX1RPX0NFTFNJVVModHotPnRlbXBlcmF0dXJlKSk7Ci0JCW9yZGVybHlfcG93ZXJvZmYodHJ1ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2hvdChzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKLXsKLQlpZiAoIXR6IHx8ICF0ei0+dHJpcHMuaG90LmZsYWdzLnZhbGlkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gdHotPnRyaXBzLmhvdC50ZW1wZXJhdHVyZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiSG90IHRyaXAgcG9pbnRcbiIpOwotCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQgPSAxOwotCX0gZWxzZSBpZiAodHotPnRyaXBzLmhvdC5mbGFncy5lbmFibGVkKQotCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQgPSAwOwotCi0JYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudCh0ei0+ZGV2aWNlLCBBQ1BJX1RIRVJNQUxfTk9USUZZX0hPVCwKLQkJCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQpOwotCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQodHotPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKLQkJCQkJICBkZXZfbmFtZSgmdHotPmRldmljZS0+ZGV2KSwKLQkJCQkJICBBQ1BJX1RIRVJNQUxfTk9USUZZX0hPVCwKLQkJCQkJICB0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQpOwotCi0JLyogVEJEOiBDYWxsIHVzZXItbW9kZSAic2xlZXAoUzQpIiBmdW5jdGlvbiBpZiBub2NydCBpcyBjbGVhcmVkICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV90aGVybWFsX3Bhc3NpdmUoc3RydWN0IGFjcGlfdGhlcm1hbCAqdHopCi17Ci0JaW50IHJlc3VsdCA9IDE7Ci0Jc3RydWN0IGFjcGlfdGhlcm1hbF9wYXNzaXZlICpwYXNzaXZlID0gTlVMTDsKLQlpbnQgdHJlbmQgPSAwOwotCWludCBpID0gMDsKLQotCi0JaWYgKCF0eiB8fCAhdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQpCi0JCXJldHVybjsKLQotCXBhc3NpdmUgPSAmKHR6LT50cmlwcy5wYXNzaXZlKTsKLQotCS8qCi0JICogQWJvdmUgVHJpcD8KLQkgKiAtLS0tLS0tLS0tLQotCSAqIENhbGN1bGF0ZSB0aGUgdGhlcm1hbCB0cmVuZCAodXNpbmcgdGhlIHBhc3NpdmUgY29vbGluZyBlcXVhdGlvbikKLQkgKiBhbmQgbW9kaWZ5IHRoZSBwZXJmb3JtYW5jZSBsaW1pdCBmb3IgYWxsIHBhc3NpdmUgY29vbGluZyBkZXZpY2VzCi0JICogYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgd2UgYXNzdW1lIHN5bW1ldHJ5LgotCSAqLwotCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gcGFzc2l2ZS0+dGVtcGVyYXR1cmUpIHsKLQkJdHJlbmQgPQotCQkgICAgKHBhc3NpdmUtPnRjMSAqICh0ei0+dGVtcGVyYXR1cmUgLSB0ei0+bGFzdF90ZW1wZXJhdHVyZSkpICsKLQkJICAgIChwYXNzaXZlLT50YzIgKiAodHotPnRlbXBlcmF0dXJlIC0gcGFzc2l2ZS0+dGVtcGVyYXR1cmUpKTsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCSAgInRyZW5kWyVkXT0odGMxWyVsdV0qKHRtcFslbHVdLWxhc3RbJWx1XSkpKyh0YzJbJWx1XSoodG1wWyVsdV0tcHN2WyVsdV0pKVxuIiwKLQkJCQkgIHRyZW5kLCBwYXNzaXZlLT50YzEsIHR6LT50ZW1wZXJhdHVyZSwKLQkJCQkgIHR6LT5sYXN0X3RlbXBlcmF0dXJlLCBwYXNzaXZlLT50YzIsCi0JCQkJICB0ei0+dGVtcGVyYXR1cmUsIHBhc3NpdmUtPnRlbXBlcmF0dXJlKSk7Ci0JCXBhc3NpdmUtPmZsYWdzLmVuYWJsZWQgPSAxOwotCQkvKiBIZWF0aW5nIHVwPyAqLwotCQlpZiAodHJlbmQgPiAwKQotCQkJZm9yIChpID0gMDsgaSA8IHBhc3NpdmUtPmRldmljZXMuY291bnQ7IGkrKykKLQkJCQlhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhlcm1hbF9saW1pdChwYXNzaXZlLT4KLQkJCQkJCQkJIGRldmljZXMuCi0JCQkJCQkJCSBoYW5kbGVzW2ldLAotCQkJCQkJCQkgQUNQSV9QUk9DRVNTT1JfTElNSVRfSU5DUkVNRU5UKTsKLQkJLyogQ29vbGluZyBvZmY/ICovCi0JCWVsc2UgaWYgKHRyZW5kIDwgMCkgewotCQkJZm9yIChpID0gMDsgaSA8IHBhc3NpdmUtPmRldmljZXMuY291bnQ7IGkrKykKLQkJCQkvKgotCQkJCSAqIGFzc3VtZSB0aGF0IHdlIGFyZSBvbiBoaWdoZXN0Ci0JCQkJICogZnJlcS9sb3dlc3QgdGhyb3R0IGFuZCBjYW4gbGVhdmUKLQkJCQkgKiBwYXNzaXZlIG1vZGUsIGV2ZW4gaW4gZXJyb3IgY2FzZQotCQkJCSAqLwotCQkJCWlmICghYWNwaV9wcm9jZXNzb3Jfc2V0X3RoZXJtYWxfbGltaXQKLQkJCQkgICAgKHBhc3NpdmUtPmRldmljZXMuaGFuZGxlc1tpXSwKLQkJCQkgICAgIEFDUElfUFJPQ0VTU09SX0xJTUlUX0RFQ1JFTUVOVCkpCi0JCQkJCXJlc3VsdCA9IDA7Ci0JCQkvKgotCQkJICogTGVhdmUgY29vbGluZyBtb2RlLCBldmVuIGlmIHRoZSB0ZW1wIG1pZ2h0Ci0JCQkgKiBoaWdoZXIgdGhhbiB0cmlwIHBvaW50IFRoaXMgaXMgYmVjYXVzZSBzb21lCi0JCQkgKiBtYWNoaW5lcyBtaWdodCBoYXZlIGxvbmcgdGhlcm1hbCBwb2xsaW5nCi0JCQkgKiBmcmVxdWVuY2llcyAodHNwKSBkZWZpbmVkLiBXZSB3aWxsIGZhbGwgYmFjawotCQkJICogaW50byBwYXNzaXZlIG1vZGUgaW4gbmV4dCBjeWNsZSAocHJvYmFibHkgcXVpY2tlcikKLQkJCSAqLwotCQkJaWYgKHJlc3VsdCkgewotCQkJCXBhc3NpdmUtPmZsYWdzLmVuYWJsZWQgPSAwOwotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkJCSAgIkRpc2FibGluZyBwYXNzaXZlIGNvb2xpbmcsIHN0aWxsIGFib3ZlIHRocmVzaG9sZCwiCi0JCQkJCQkgICIgYnV0IHdlIGFyZSBjb29saW5nIGRvd25cbiIpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBCZWxvdyBUcmlwPwotCSAqIC0tLS0tLS0tLS0tCi0JICogSW1wbGVtZW50IHBhc3NpdmUgY29vbGluZyBoeXN0ZXJlc2lzIHRvIHNsb3dseSBpbmNyZWFzZSBwZXJmb3JtYW5jZQotCSAqIGFuZCBhdm9pZCB0aHJhc2hpbmcgYXJvdW5kIHRoZSBwYXNzaXZlIHRyaXAgcG9pbnQuICBOb3RlIHRoYXQgd2UKLQkgKiBhc3N1bWUgc3ltbWV0cnkuCi0JICovCi0JaWYgKCFwYXNzaXZlLT5mbGFncy5lbmFibGVkKQotCQlyZXR1cm47Ci0JZm9yIChpID0gMDsgaSA8IHBhc3NpdmUtPmRldmljZXMuY291bnQ7IGkrKykKLQkJaWYgKCFhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhlcm1hbF9saW1pdAotCQkgICAgKHBhc3NpdmUtPmRldmljZXMuaGFuZGxlc1tpXSwKLQkJICAgICBBQ1BJX1BST0NFU1NPUl9MSU1JVF9ERUNSRU1FTlQpKQotCQkJcmVzdWx0ID0gMDsKLQlpZiAocmVzdWx0KSB7Ci0JCXBhc3NpdmUtPmZsYWdzLmVuYWJsZWQgPSAwOwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiRGlzYWJsaW5nIHBhc3NpdmUgY29vbGluZyAoem9uZSBpcyBjb29sKVxuIikpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYWNwaV90aGVybWFsX2FjdGl2ZShzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgYWNwaV90aGVybWFsX2FjdGl2ZSAqYWN0aXZlID0gTlVMTDsKLQlpbnQgaSA9IDA7Ci0JaW50IGogPSAwOwotCXVuc2lnbmVkIGxvbmcgbWF4dGVtcCA9IDA7Ci0KLQotCWlmICghdHopCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRTsgaSsrKSB7Ci0JCWFjdGl2ZSA9ICYodHotPnRyaXBzLmFjdGl2ZVtpXSk7Ci0JCWlmICghYWN0aXZlIHx8ICFhY3RpdmUtPmZsYWdzLnZhbGlkKQotCQkJYnJlYWs7Ci0JCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gYWN0aXZlLT50ZW1wZXJhdHVyZSkgewotCQkJLyoKLQkJCSAqIEFib3ZlIFRocmVzaG9sZD8KLQkJCSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkJCSAqIElmIG5vdCBhbHJlYWR5IGVuYWJsZWQsIHR1cm4gT04gYWxsIGNvb2xpbmcgZGV2aWNlcwotCQkJICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aXZlIHRocmVzaG9sZC4KLQkJCSAqLwotCQkJaWYgKGFjdGl2ZS0+dGVtcGVyYXR1cmUgPiBtYXh0ZW1wKQotCQkJCXR6LT5zdGF0ZS5hY3RpdmVfaW5kZXggPSBpOwotCQkJbWF4dGVtcCA9IGFjdGl2ZS0+dGVtcGVyYXR1cmU7Ci0JCQlpZiAoYWN0aXZlLT5mbGFncy5lbmFibGVkKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChqID0gMDsgaiA8IGFjdGl2ZS0+ZGV2aWNlcy5jb3VudDsgaisrKSB7Ci0JCQkJcmVzdWx0ID0KLQkJCQkgICAgYWNwaV9idXNfc2V0X3Bvd2VyKGFjdGl2ZS0+ZGV2aWNlcy4KLQkJCQkJCSAgICAgICBoYW5kbGVzW2pdLAotCQkJCQkJICAgICAgIEFDUElfU1RBVEVfRDApOwotCQkJCWlmIChyZXN1bHQpIHsKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCQkJCSAgICAgICJVbmFibGUgdG8gdHVybiBjb29saW5nIGRldmljZSBbJXBdICdvbidcbiIsCi0JCQkJCQkgICAgICBhY3RpdmUtPmRldmljZXMuCi0JCQkJCQkgICAgICBoYW5kbGVzW2pdKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWFjdGl2ZS0+ZmxhZ3MuZW5hYmxlZCA9IDE7Ci0JCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCQkJICAiQ29vbGluZyBkZXZpY2UgWyVwXSBub3cgJ29uJ1xuIiwKLQkJCQkJCSAgYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0pKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghYWN0aXZlLT5mbGFncy5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCS8qCi0JCSAqIEJlbG93IFRocmVzaG9sZD8KLQkJICogLS0tLS0tLS0tLS0tLS0tLQotCQkgKiBUdXJuIE9GRiBhbGwgY29vbGluZyBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0JCSAqIHRocmVzaG9sZC4KLQkJICovCi0JCWZvciAoaiA9IDA7IGogPCBhY3RpdmUtPmRldmljZXMuY291bnQ7IGorKykgewotCQkJcmVzdWx0ID0gYWNwaV9idXNfc2V0X3Bvd2VyKGFjdGl2ZS0+ZGV2aWNlcy5oYW5kbGVzW2pdLAotCQkJCQkJICAgIEFDUElfU1RBVEVfRDMpOwotCQkJaWYgKHJlc3VsdCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCi0JCQkJCSAgICAgICJVbmFibGUgdG8gdHVybiBjb29saW5nIGRldmljZSBbJXBdICdvZmYnXG4iLAotCQkJCQkgICAgICBhY3RpdmUtPmRldmljZXMuaGFuZGxlc1tqXSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhY3RpdmUtPmZsYWdzLmVuYWJsZWQgPSAwOwotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCQkgICJDb29saW5nIGRldmljZSBbJXBdIG5vdyAnb2ZmJ1xuIiwKLQkJCQkJICBhY3RpdmUtPmRldmljZXMuaGFuZGxlc1tqXSkpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfY2hlY2sodm9pZCAqY29udGV4dCk7Ci0KLXN0YXRpYyB2b2lkIGFjcGlfdGhlcm1hbF9ydW4odW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilkYXRhOwotCWlmICghdHotPnpvbWJpZSkKLQkJYWNwaV9vc19leGVjdXRlKE9TTF9HUEVfSEFORExFUiwgYWNwaV90aGVybWFsX2NoZWNrLCAodm9pZCAqKWRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfYWN0aXZlX29mZih2b2lkICpkYXRhKQotewotCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gZGF0YTsKLQlpbnQgaSA9IDA7Ci0JaW50IGogPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWxfYWN0aXZlICphY3RpdmUgPSBOVUxMOwotCi0JaWYgKCF0eikgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIChOVUxMKSBjb250ZXh0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfdGhlcm1hbF9nZXRfdGVtcGVyYXR1cmUodHopOwotCWlmIChyZXN1bHQpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRTsgaSsrKSB7Ci0JCWFjdGl2ZSA9ICYodHotPnRyaXBzLmFjdGl2ZVtpXSk7Ci0JCWlmICghYWN0aXZlIHx8ICFhY3RpdmUtPmZsYWdzLnZhbGlkKQotCQkJYnJlYWs7Ci0JCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gYWN0aXZlLT50ZW1wZXJhdHVyZSkgewotCQkJLyoKLQkJCSAqIElmIHRoZSB0aGVybWFsIHRlbXBlcmF0dXJlIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJCSAqIGFjdGl2ZSB0aHJlc2hvZCwgdW5uZWNlc3NhcnkgdG8gdHVybiBvZmYgdGhlCi0JCQkgKiB0aGUgYWN0aXZlIGNvb2xpbmcgZGV2aWNlLgotCQkJICovCi0JCQljb250aW51ZTsKLQkJfQotCQkvKgotCQkgKiBCZWxvdyBUaHJlc2hvbGQ/Ci0JCSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkJICogVHVybiBPRkYgYWxsIGNvb2xpbmcgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcwotCQkgKiB0aHJlc2hvbGQuCi0JCSAqLwotCQlmb3IgKGogPSAwOyBqIDwgYWN0aXZlLT5kZXZpY2VzLmNvdW50OyBqKyspCi0JCQlyZXN1bHQgPSBhY3BpX2J1c19zZXRfcG93ZXIoYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0sCi0JCQkJCQkgICAgQUNQSV9TVEFURV9EMyk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfY2hlY2sodm9pZCAqZGF0YSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IGRhdGE7Ci0JdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lID0gMDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfamlmZmllcyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWxfc3RhdGUgc3RhdGU7CiAKLQotCWlmICghdHopIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCAoTlVMTCkgY29udGV4dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBDaGVjayBpZiBzb21lb25lIGVsc2UgaXMgYWxyZWFkeSBydW5uaW5nICovCi0JaWYgKCFtdXRleF90cnlsb2NrKCZ0ei0+bG9jaykpCi0JCXJldHVybjsKLQotCXN0YXRlID0gdHotPnN0YXRlOwotCi0JcmVzdWx0ID0gYWNwaV90aGVybWFsX2dldF90ZW1wZXJhdHVyZSh0eik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAoIXR6LT50el9lbmFibGVkKQotCQlnb3RvIHVubG9jazsKLQotCW1lbXNldCgmdHotPnN0YXRlLCAwLCBzaXplb2YodHotPnN0YXRlKSk7Ci0KLQkvKgotCSAqIENoZWNrIFRyaXAgUG9pbnRzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBDb21wYXJlIHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIHRvIHRoZSB0cmlwIHBvaW50IHZhbHVlcyB0byBzZWUKLQkgKiBpZiB3ZSd2ZSBlbnRlcmVkIG9uZSBvZiB0aGUgdGhlcm1hbCBwb2xpY3kgc3RhdGVzLiAgTm90ZSB0aGF0Ci0JICogdGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZW4gYSBzdGF0ZSBpcyBlbnRlcmVkLCBidXQgdGhlIAotCSAqIGluZGl2aWR1YWwgcG9saWN5IGRlY2lkZXMgd2hlbiBpdCBpcyBleGl0ZWQgKGUuZy4gaHlzdGVyZXNpcykuCi0JICovCi0JaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCkKLQkJc3RhdGUuY3JpdGljYWwgfD0KLQkJICAgICh0ei0+dGVtcGVyYXR1cmUgPj0gdHotPnRyaXBzLmNyaXRpY2FsLnRlbXBlcmF0dXJlKTsKLQlpZiAodHotPnRyaXBzLmhvdC5mbGFncy52YWxpZCkKLQkJc3RhdGUuaG90IHw9ICh0ei0+dGVtcGVyYXR1cmUgPj0gdHotPnRyaXBzLmhvdC50ZW1wZXJhdHVyZSk7Ci0JaWYgKHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKQotCQlzdGF0ZS5wYXNzaXZlIHw9Ci0JCSAgICAodHotPnRlbXBlcmF0dXJlID49IHR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlKTsKLQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkU7IGkrKykKLQkJaWYgKHR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQpCi0JCQlzdGF0ZS5hY3RpdmUgfD0KLQkJCSAgICAodHotPnRlbXBlcmF0dXJlID49Ci0JCQkgICAgIHR6LT50cmlwcy5hY3RpdmVbaV0udGVtcGVyYXR1cmUpOwotCi0JLyoKLQkgKiBJbnZva2UgUG9saWN5Ci0JICogLS0tLS0tLS0tLS0tLQotCSAqIFNlcGFyYXRlZCBmcm9tIHRoZSBhYm92ZSBjaGVjayB0byBhbGxvdyBpbmRpdmlkdWFsIHBvbGljeSB0byAKLQkgKiBkZXRlcm1pbmUgd2hlbiB0byBleGl0IGEgZ2l2ZW4gc3RhdGUuCi0JICovCi0JaWYgKHN0YXRlLmNyaXRpY2FsKQotCQlhY3BpX3RoZXJtYWxfY3JpdGljYWwodHopOwotCWlmIChzdGF0ZS5ob3QpCi0JCWFjcGlfdGhlcm1hbF9ob3QodHopOwotCWlmIChzdGF0ZS5wYXNzaXZlKQotCQlhY3BpX3RoZXJtYWxfcGFzc2l2ZSh0eik7Ci0JaWYgKHN0YXRlLmFjdGl2ZSkKLQkJYWNwaV90aGVybWFsX2FjdGl2ZSh0eik7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBTdGF0ZQotCSAqIC0tLS0tLS0tLS0tLS0tLQotCSAqIEFnYWluLCBzZXBhcmF0ZWQgZnJvbSB0aGUgYWJvdmUgdHdvIHRvIGFsbG93IGluZGVwZW5kZW50IHBvbGljeQotCSAqIGRlY2lzaW9ucy4KLQkgKi8KLQl0ei0+c3RhdGUuY3JpdGljYWwgPSB0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZDsKLQl0ei0+c3RhdGUuaG90ID0gdHotPnRyaXBzLmhvdC5mbGFncy5lbmFibGVkOwotCXR6LT5zdGF0ZS5wYXNzaXZlID0gdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MuZW5hYmxlZDsKLQl0ei0+c3RhdGUuYWN0aXZlID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkU7IGkrKykKLQkJdHotPnN0YXRlLmFjdGl2ZSB8PSB0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLmVuYWJsZWQ7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBTbGVlcCBUaW1lCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBJZiB3ZSdyZSBpbiB0aGUgcGFzc2l2ZSBzdGF0ZSwgdXNlIF9UU1AncyB2YWx1ZS4gIE90aGVyd2lzZQotCSAqIHVzZSB0aGUgZGVmYXVsdCBwb2xsaW5nIGZyZXF1ZW5jeSAoZS5nLiBfVFpQKS4gIElmIG5vIHBvbGxpbmcKLQkgKiBmcmVxdWVuY3kgaXMgc3BlY2lmaWVkIHRoZW4gd2UnbGwgd2FpdCBmb3JldmVyIChhdCBsZWFzdCB1bnRpbAotCSAqIGEgdGhlcm1hbCBldmVudCBvY2N1cnMpLiAgTm90ZSB0aGF0IF9UU1AgYW5kIF9UWkQgdmFsdWVzIGFyZQotCSAqIGdpdmVuIGluIDEvMTB0aCBzZWNvbmRzICh3ZSBtdXN0IGNvdmVydCB0byBtaWxsaXNlY29uZHMpLgotCSAqLwotCWlmICh0ei0+c3RhdGUucGFzc2l2ZSkgewotCQlzbGVlcF90aW1lID0gdHotPnRyaXBzLnBhc3NpdmUudHNwICogMTAwOwotCQl0aW1lb3V0X2ppZmZpZXMgPSAgamlmZmllcyArIChIWiAqIHNsZWVwX3RpbWUpIC8gMTAwMDsKLQl9IGVsc2UgaWYgKHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSA+IDApIHsKLQkJc2xlZXBfdGltZSA9IHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSAqIDEwMDsKLQkJdGltZW91dF9qaWZmaWVzID0gIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIChIWiAqIHNsZWVwX3RpbWUpIC8gMTAwMCk7Ci0JfQotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiJXM6IHRlbXBlcmF0dXJlWyVsdV0gc2xlZXBbJWx1XVxuIiwKLQkJCSAgdHotPm5hbWUsIHR6LT50ZW1wZXJhdHVyZSwgc2xlZXBfdGltZSkpOwotCi0JLyoKLQkgKiBTY2hlZHVsZSBOZXh0IFBvbGwKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KLQlpZiAoIXNsZWVwX3RpbWUpIHsKLQkJaWYgKHRpbWVyX3BlbmRpbmcoJih0ei0+dGltZXIpKSkKLQkJCWRlbF90aW1lcigmKHR6LT50aW1lcikpOwotCX0gZWxzZSB7Ci0JCWlmICh0aW1lcl9wZW5kaW5nKCYodHotPnRpbWVyKSkpCi0JCQltb2RfdGltZXIoJih0ei0+dGltZXIpLCB0aW1lb3V0X2ppZmZpZXMpOwotCQllbHNlIHsKLQkJCXR6LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdHo7Ci0JCQl0ei0+dGltZXIuZnVuY3Rpb24gPSBhY3BpX3RoZXJtYWxfcnVuOwotCQkJdHotPnRpbWVyLmV4cGlyZXMgPSB0aW1lb3V0X2ppZmZpZXM7Ci0JCQlhZGRfdGltZXIoJih0ei0+dGltZXIpKTsKLQkJfQotCX0KLSAgICAgIHVubG9jazoKLQltdXRleF91bmxvY2soJnR6LT5sb2NrKTsKKwl0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSh0ei0+dGhlcm1hbF96b25lKTsKIH0KIAogLyogc3lzIEkvRiBmb3IgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHN1cHBvcnQgKi8KICNkZWZpbmUgS0VMVklOX1RPX01JTExJQ0VMU0lVUyh0KSAodCAqIDEwMCAtIDI3MzIwMCkKIAotc3RhdGljIGludCB0aGVybWFsX2dldF90ZW1wKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLCBjaGFyICpidWYpCitzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RlbXAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWwsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqdGVtcCkKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IHRoZXJtYWwtPmRldmRhdGE7CiAJaW50IHJlc3VsdDsKQEAgLTk2NiwyNSArNTk2LDI4IEBACiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX01JTExJQ0VMU0lVUyh0ei0+dGVtcGVyYXR1cmUpKTsKKwkqdGVtcCA9IEtFTFZJTl9UT19NSUxMSUNFTFNJVVModHotPnRlbXBlcmF0dXJlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgZW5hYmxlZFtdID0gImtlcm5lbCI7CiBzdGF0aWMgY29uc3QgY2hhciBkaXNhYmxlZFtdID0gInVzZXIiOwogc3RhdGljIGludCB0aGVybWFsX2dldF9tb2RlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLAotCQkJCWNoYXIgKmJ1ZikKKwkJCQllbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCiAJaWYgKCF0eikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdHotPnR6X2VuYWJsZWQgPwotCQkJZW5hYmxlZCA6IGRpc2FibGVkKTsKKwkqbW9kZSA9IHR6LT50el9lbmFibGVkID8gVEhFUk1BTF9ERVZJQ0VfRU5BQkxFRCA6CisJCVRIRVJNQUxfREVWSUNFX0RJU0FCTEVEOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGhlcm1hbF9zZXRfbW9kZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbCwKLQkJCQljb25zdCBjaGFyICpidWYpCisJCQkJZW51bSB0aGVybWFsX2RldmljZV9tb2RlIG1vZGUpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCWludCBlbmFibGU7CkBAIC05OTUsOSArNjI4LDkgQEAKIAkvKgogCSAqIGVuYWJsZS9kaXNhYmxlIHRoZXJtYWwgbWFuYWdlbWVudCBmcm9tIEFDUEkgdGhlcm1hbCBkcml2ZXIKIAkgKi8KLQlpZiAoIXN0cm5jbXAoYnVmLCBlbmFibGVkLCBzaXplb2YgZW5hYmxlZCAtIDEpKQorCWlmIChtb2RlID09IFRIRVJNQUxfREVWSUNFX0VOQUJMRUQpCiAJCWVuYWJsZSA9IDE7Ci0JZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBkaXNhYmxlZCwgc2l6ZW9mIGRpc2FibGVkIC0gMSkpCisJZWxzZSBpZiAobW9kZSA9PSBUSEVSTUFMX0RFVklDRV9ESVNBQkxFRCkKIAkJZW5hYmxlID0gMDsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAxMyw3ICs2NDYsNyBAQAogfQogCiBzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RyaXBfdHlwZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbCwKLQkJCQkgaW50IHRyaXAsIGNoYXIgKmJ1ZikKKwkJCQkgaW50IHRyaXAsIGVudW0gdGhlcm1hbF90cmlwX3R5cGUgKnR5cGUpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCWludCBpOwpAQCAtMTAyMiwyNyArNjU1LDM1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCkgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICJjcml0aWNhbFxuIik7CisJCWlmICghdHJpcCkgeworCQkJKnR5cGUgPSBUSEVSTUFMX1RSSVBfQ1JJVElDQUw7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJaWYgKHR6LT50cmlwcy5ob3QuZmxhZ3MudmFsaWQpIHsKLQkJaWYgKCF0cmlwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90XG4iKTsKKwkJaWYgKCF0cmlwKSB7CisJCQkqdHlwZSA9IFRIRVJNQUxfVFJJUF9IT1Q7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJaWYgKHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKSB7Ci0JCWlmICghdHJpcCkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBhc3NpdmVcbiIpOworCQlpZiAoIXRyaXApIHsKKwkJCSp0eXBlID0gVEhFUk1BTF9UUklQX1BBU1NJVkU7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfVEhFUk1BTF9NQVhfQUNUSVZFICYmCiAJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQ7IGkrKykgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmUlZFxuIiwgaSk7CisJCWlmICghdHJpcCkgeworCQkJKnR5cGUgPSBUSEVSTUFMX1RSSVBfQUNUSVZFOworCQkJcmV0dXJuIDA7CisJCX0KIAkJdHJpcC0tOwogCX0KIApAQCAtMTA1MCw3ICs2OTEsNyBAQAogfQogCiBzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RyaXBfdGVtcChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbCwKLQkJCQkgaW50IHRyaXAsIGNoYXIgKmJ1ZikKKwkJCQkgaW50IHRyaXAsIHVuc2lnbmVkIGxvbmcgKnRlbXApCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCWludCBpOwpAQCAtMTA1OSwzMSArNzAwLDM5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCkgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19NSUxMSUNFTFNJVVMoCi0JCQkJdHotPnRyaXBzLmNyaXRpY2FsLnRlbXBlcmF0dXJlKSk7CisJCWlmICghdHJpcCkgeworCQkJKnRlbXAgPSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAorCQkJCXR6LT50cmlwcy5jcml0aWNhbC50ZW1wZXJhdHVyZSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJaWYgKHR6LT50cmlwcy5ob3QuZmxhZ3MudmFsaWQpIHsKLQkJaWYgKCF0cmlwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAotCQkJCQl0ei0+dHJpcHMuaG90LnRlbXBlcmF0dXJlKSk7CisJCWlmICghdHJpcCkgeworCQkJKnRlbXAgPSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAorCQkJCXR6LT50cmlwcy5ob3QudGVtcGVyYXR1cmUpOworCQkJcmV0dXJuIDA7CisJCX0KIAkJdHJpcC0tOwogCX0KIAogCWlmICh0ei0+dHJpcHMucGFzc2l2ZS5mbGFncy52YWxpZCkgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19NSUxMSUNFTFNJVVMoCi0JCQkJCXR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlKSk7CisJCWlmICghdHJpcCkgeworCQkJKnRlbXAgPSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAorCQkJCXR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlKTsKKwkJCXJldHVybiAwOworCQl9CiAJCXRyaXAtLTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUgJiYKIAkJdHotPnRyaXBzLmFjdGl2ZVtpXS5mbGFncy52YWxpZDsgaSsrKSB7Ci0JCWlmICghdHJpcCkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX01JTExJQ0VMU0lVUygKLQkJCQkJdHotPnRyaXBzLmFjdGl2ZVtpXS50ZW1wZXJhdHVyZSkpOworCQlpZiAoIXRyaXApIHsKKwkJCSp0ZW1wID0gS0VMVklOX1RPX01JTExJQ0VMU0lVUygKKwkJCQl0ei0+dHJpcHMuYWN0aXZlW2ldLnRlbXBlcmF0dXJlKTsKKwkJCXJldHVybiAwOworCQl9CiAJCXRyaXAtLTsKIAl9CiAKQEAgLTExMDIsNiArNzUxLDI5IEBACiAJCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IHRoZXJtYWxfbm90aWZ5KHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLCBpbnQgdHJpcCwKKwkJCSAgIGVudW0gdGhlcm1hbF90cmlwX3R5cGUgdHJpcF90eXBlKQoreworCXU4IHR5cGUgPSAwOworCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gdGhlcm1hbC0+ZGV2ZGF0YTsKKworCWlmICh0cmlwX3R5cGUgPT0gVEhFUk1BTF9UUklQX0NSSVRJQ0FMKQorCQl0eXBlID0gQUNQSV9USEVSTUFMX05PVElGWV9DUklUSUNBTDsKKwllbHNlIGlmICh0cmlwX3R5cGUgPT0gVEhFUk1BTF9UUklQX0hPVCkKKwkJdHlwZSA9IEFDUElfVEhFUk1BTF9OT1RJRllfSE9UOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHR6LT5kZXZpY2UsIHR5cGUsIDEpOworCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQodHotPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKKwkJCQkJZGV2X25hbWUoJnR6LT5kZXZpY2UtPmRldiksIHR5cGUsIDEpOworCisJaWYgKHRyaXBfdHlwZSA9PSBUSEVSTUFMX1RSSVBfQ1JJVElDQUwgJiYgbm9jcnQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHR5cGVkZWYgaW50ICgqY2IpKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGludCwKIAkJICBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2Nvb2xpbmdfZGV2aWNlX2NiKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLApAQCAtMTE5NCw2ICs4NjYsNyBAQAogCS5nZXRfdHJpcF90eXBlID0gdGhlcm1hbF9nZXRfdHJpcF90eXBlLAogCS5nZXRfdHJpcF90ZW1wID0gdGhlcm1hbF9nZXRfdHJpcF90ZW1wLAogCS5nZXRfY3JpdF90ZW1wID0gdGhlcm1hbF9nZXRfY3JpdF90ZW1wLAorCS5ub3RpZnkgPSB0aGVybWFsX25vdGlmeSwKIH07CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3JlZ2lzdGVyX3RoZXJtYWxfem9uZShzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKQEAgLTEyMTQsOCArODg3LDIxIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUgJiYKIAkJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQ7IGkrKywgdHJpcHMrKyk7Ci0JdHotPnRoZXJtYWxfem9uZSA9IHRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoImFjcGl0eiIsCi0JCQkJCXRyaXBzLCB0eiwgJmFjcGlfdGhlcm1hbF96b25lX29wcyk7CisKKwlpZiAodHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQpCisJCXR6LT50aGVybWFsX3pvbmUgPQorCQkJdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3RlcigiYWNwaXR6IiwgdHJpcHMsIHR6LAorCQkJCQkJICAgICAmYWNwaV90aGVybWFsX3pvbmVfb3BzLAorCQkJCQkJICAgICB0ei0+dHJpcHMucGFzc2l2ZS50YzEsCisJCQkJCQkgICAgIHR6LT50cmlwcy5wYXNzaXZlLnRjMiwKKwkJCQkJCSAgICAgdHotPnRyaXBzLnBhc3NpdmUudHNwKjEwMCwKKwkJCQkJCSAgICAgdHotPnBvbGxpbmdfZnJlcXVlbmN5KjEwMCk7CisJZWxzZQorCQl0ei0+dGhlcm1hbF96b25lID0KKwkJCXRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoImFjcGl0eiIsIHRyaXBzLCB0eiwKKwkJCQkJCSAgICAgJmFjcGlfdGhlcm1hbF96b25lX29wcywKKwkJCQkJCSAgICAgMCwgMCwgMCwKKwkJCQkJCSAgICAgdHotPnBvbGxpbmdfZnJlcXVlbmN5KTsKIAlpZiAoSVNfRVJSKHR6LT50aGVybWFsX3pvbmUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTQ0NywxMyArMTEzMywxMyBAQAogCWlmICghdHopCiAJCWdvdG8gZW5kOwogCi0JaWYgKCF0ei0+cG9sbGluZ19mcmVxdWVuY3kpIHsKKwlpZiAoIXR6LT50aGVybWFsX3pvbmUtPnBvbGxpbmdfZGVsYXkpIHsKIAkJc2VxX3B1dHMoc2VxLCAiPHBvbGxpbmcgZGlzYWJsZWQ+XG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCi0Jc2VxX3ByaW50ZihzZXEsICJwb2xsaW5nIGZyZXF1ZW5jeTogICAgICAgJWx1IHNlY29uZHNcbiIsCi0JCSAgICh0ei0+cG9sbGluZ19mcmVxdWVuY3kgLyAxMCkpOworCXNlcV9wcmludGYoc2VxLCAicG9sbGluZyBmcmVxdWVuY3k6ICAgICAgICVkIHNlY29uZHNcbiIsCisJCSAgICh0ei0+dGhlcm1hbF96b25lLT5wb2xsaW5nX2RlbGF5IC8gMTAwMCkpOwogCiAgICAgICBlbmQ6CiAJcmV0dXJuIDA7CkBAIC0xNjgyLDEyICsxMzY4LDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIHVucmVnaXN0ZXJfdGhlcm1hbF96b25lOwogCi0JaW5pdF90aW1lcigmdHotPnRpbWVyKTsKLQotCWFjcGlfdGhlcm1hbF9hY3RpdmVfb2ZmKHR6KTsKLQotCWFjcGlfdGhlcm1hbF9jaGVjayh0eik7Ci0KIAlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCiAJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgIGFjcGlfdGhlcm1hbF9ub3RpZnksIHR6KTsKQEAgLTE3MTYsMzYgKzEzOTYsMTUgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IE5VTEw7CiAKLQogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdHogPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKLQkvKiBhdm9pZCB0aW1lciBhZGRpbmcgbmV3IGRlZmVyIHRhc2sgKi8KLQl0ei0+em9tYmllID0gMTsKLQkvKiB3YWl0IGZvciBydW5uaW5nIHRpbWVyIChvbiBvdGhlciBDUFVzKSBmaW5pc2ggKi8KLQlkZWxfdGltZXJfc3luYygmKHR6LT50aW1lcikpOwotCS8qIHN5bmNocm9uaXplIGRlZmVycmVkIHRhc2sgKi8KLQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCS8qIGRlZmVycmVkIHRhc2sgbWF5IHJlaW5zZXJ0IHRpbWVyICovCi0JZGVsX3RpbWVyX3N5bmMoJih0ei0+dGltZXIpKTsKLQogCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgYWNwaV90aGVybWFsX25vdGlmeSk7CiAKLQkvKiBUZXJtaW5hdGUgcG9saWN5ICovCi0JaWYgKHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkICYmIHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLmVuYWJsZWQpIHsKLQkJdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MuZW5hYmxlZCA9IDA7Ci0JCWFjcGlfdGhlcm1hbF9wYXNzaXZlKHR6KTsKLQl9Ci0JaWYgKHR6LT50cmlwcy5hY3RpdmVbMF0uZmxhZ3MudmFsaWQKLQkgICAgJiYgdHotPnRyaXBzLmFjdGl2ZVswXS5mbGFncy5lbmFibGVkKSB7Ci0JCXR6LT50cmlwcy5hY3RpdmVbMF0uZmxhZ3MuZW5hYmxlZCA9IDA7Ci0JCWFjcGlfdGhlcm1hbF9hY3RpdmUodHopOwotCX0KLQogCWFjcGlfdGhlcm1hbF9yZW1vdmVfZnMoZGV2aWNlKTsKIAlhY3BpX3RoZXJtYWxfdW5yZWdpc3Rlcl90aGVybWFsX3pvbmUodHopOwogCW11dGV4X2Rlc3Ryb3koJnR6LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggNjdjYzM2ZC4uYWIwNjE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fb3V0cHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgpAQCAtMTYyLDE2ICsxNjQsMjYgQEAKIAl1OCBfQkNMOjE7CQkvKlF1ZXJ5IGxpc3Qgb2YgYnJpZ2h0bmVzcyBjb250cm9sIGxldmVscyBzdXBwb3J0ZWQgKi8KIAl1OCBfQkNNOjE7CQkvKlNldCB0aGUgYnJpZ2h0bmVzcyBsZXZlbCAqLwogCXU4IF9CUUM6MTsJCS8qIEdldCBjdXJyZW50IGJyaWdodG5lc3MgbGV2ZWwgKi8KKwl1OCBfQkNROjE7CQkvKiBTb21lIGJ1Z2d5IEJJT1MgdXNlcyBfQkNRIGluc3RlYWQgb2YgX0JRQyAqLwogCXU4IF9EREM6MTsJCS8qUmV0dXJuIHRoZSBFRElEIGZvciB0aGlzIGRldmljZSAqLwogCXU4IF9EQ1M6MTsJCS8qUmV0dXJuIHN0YXR1cyBvZiBvdXRwdXQgZGV2aWNlICovCiAJdTggX0RHUzoxOwkJLypRdWVyeSBncmFwaGljcyBzdGF0ZSAqLwogCXU4IF9EU1M6MTsJCS8qRGV2aWNlIHN0YXRlIHNldCAqLwogfTsKIAorc3RydWN0IGFjcGlfdmlkZW9fYnJpZ2h0bmVzc19mbGFncyB7CisJdTggX0JDTF9ub19hY19iYXR0ZXJ5X2xldmVsczoxOwkvKiBubyBBQy9CYXR0ZXJ5IGxldmVscyBpbiBfQkNMICovCisJdTggX0JDTF9yZXZlcnNlZDoxOwkJLyogX0JDTCBwYWNrYWdlIGlzIGluIGEgcmV2ZXJzZWQgb3JkZXIqLworCXU4IF9CQ0xfdXNlX2luZGV4OjE7CQkvKiBsZXZlbHMgaW4gX0JDTCBhcmUgaW5kZXggdmFsdWVzICovCisJdTggX0JDTV91c2VfaW5kZXg6MTsJCS8qIGlucHV0IG9mIF9CQ00gaXMgYW4gaW5kZXggdmFsdWUgKi8KKwl1OCBfQlFDX3VzZV9pbmRleDoxOwkJLyogX0JRQyByZXR1cm5zIGFuIGluZGV4IHZhbHVlICovCit9OworCiBzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzcyB7CiAJaW50IGN1cnI7CiAJaW50IGNvdW50OwogCWludCAqbGV2ZWxzOworCXN0cnVjdCBhY3BpX3ZpZGVvX2JyaWdodG5lc3NfZmxhZ3MgZmxhZ3M7CiB9OwogCiBzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgewpAQCAtMTg5LDcgKzIwMSw3IEBACiAKIC8qIGJ1cyAqLwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfaW5mb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfaW5mb19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19idXNfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0xOTgsNyArMjEwLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfUk9NX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfUk9NX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2J1c19ST01fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fYnVzX1JPTV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yMDgsNyArMjIwLDcgQEAKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19QT1NUX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfUE9TVF9pbmZvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2J1c19QT1NUX2luZm9fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fYnVzX1BPU1RfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yMTcsMTkgKzIyOSwyNSBAQAogfTsKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19QT1NUX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfUE9TVF9mb3BzID0geworc3RhdGljIHNzaXplX3QgYWNwaV92aWRlb19idXNfd3JpdGVfUE9TVChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2J1c19QT1NUX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2J1c19QT1NUX29wZW5fZnMsCiAJLnJlYWQgPSBzZXFfcmVhZCwKKwkud3JpdGUgPSBhY3BpX3ZpZGVvX2J1c193cml0ZV9QT1NULAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfRE9TX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfRE9TX2ZvcHMgPSB7CitzdGF0aWMgc3NpemVfdCBhY3BpX3ZpZGVvX2J1c193cml0ZV9ET1Moc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfRE9TX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2J1c19ET1Nfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAorCS53cml0ZSA9IGFjcGlfdmlkZW9fYnVzX3dyaXRlX0RPUywKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwpAQCAtMjM3LDcgKzI1NSw3IEBACiAvKiBkZXZpY2UgKi8KIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2VfaW5mb19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfaW5mb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfaW5mb19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19kZXZpY2VfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yNDcsMjcgKzI2NSwzMyBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX3N0YXRlX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2Vfc3RhdGVfZm9wcyA9IHsKK3N0YXRpYyBzc2l6ZV90IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX3N0YXRlX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2RldmljZV9zdGF0ZV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCisJLndyaXRlID0gYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfc3RhdGUsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCXN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX2JyaWdodG5lc3Moc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpOwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCisJLndyaXRlID0gYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfYnJpZ2h0bmVzcywKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX0VESURfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX0VESURfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX0VESURfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fZGV2aWNlX0VESURfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMjc1LDcgKzI5OSw3IEBACiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBjaGFyIGRldmljZV9kZWNvZGVbXVszMF0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfZGVjb2RlW11bMzBdID0gewogCSJtb3RoZXJib2FyZCBWR0EgZGV2aWNlIiwKIAkiUENJIFZHQSBkZXZpY2UiLAogCSJBR1AgVkdBIGRldmljZSIsCkBAIC0yOTQsNyArMzE4LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqbGV2ZWwpOwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2dldF9uZXh0X2xldmVsKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJCSAgICAgdTMyIGxldmVsX2N1cnJlbnQsIHUzMiBldmVudCk7Ci1zdGF0aWMgdm9pZCBhY3BpX3ZpZGVvX3N3aXRjaF9icmlnaHRuZXNzKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAorc3RhdGljIGludCBhY3BpX3ZpZGVvX3N3aXRjaF9icmlnaHRuZXNzKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJCQkgaW50IGV2ZW50KTsKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2VfZ2V0X3N0YXRlKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhdGUpOwpAQCAtMzA4LDcgKzMzMiw5IEBACiAJaW50IGk7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2ZCA9CiAJCShzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilibF9nZXRfZGF0YShiZCk7Ci0JYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KHZkLCAmY3VyX2xldmVsKTsKKworCWlmIChhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQodmQsICZjdXJfbGV2ZWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmb3IgKGkgPSAyOyBpIDwgdmQtPmJyaWdodG5lc3MtPmNvdW50OyBpKyspIHsKIAkJaWYgKHZkLT5icmlnaHRuZXNzLT5sZXZlbHNbaV0gPT0gY3VyX2xldmVsKQogCQkJLyogVGhlIGZpcnN0IHR3byBlbnRyaWVzIGFyZSBzcGVjaWFsIC0gc2VlIHBhZ2UgNTc1CkBAIC0zMjAsMTIgKzM0NiwxMiBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCWludCByZXF1ZXN0X2xldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3MrMjsKKwlpbnQgcmVxdWVzdF9sZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzICsgMjsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZkID0KIAkJKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKWJsX2dldF9kYXRhKGJkKTsKLQlhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKHZkLAotCQkJCQl2ZC0+YnJpZ2h0bmVzcy0+bGV2ZWxzW3JlcXVlc3RfbGV2ZWxdKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKHZkLAorCQkJCXZkLT5icmlnaHRuZXNzLT5sZXZlbHNbcmVxdWVzdF9sZXZlbF0pOwogfQogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYWNwaV9iYWNrbGlnaHRfb3BzID0gewpAQCAtMzU4LDMyICszODQsMzcgQEAKIAogCiAvKiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGNhbGxiYWNrcyAqLwotc3RhdGljIGludCB2aWRlb19nZXRfbWF4X3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgaW50IHZpZGVvX2dldF9tYXhfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkCisJCQkgICAgICAgbG9uZyAqc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkZW8tPmJyaWdodG5lc3MtPmNvdW50IC0gMyk7CisJKnN0YXRlID0gdmlkZW8tPmJyaWdodG5lc3MtPmNvdW50IC0gMzsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRlb19nZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgaW50IHZpZGVvX2dldF9jdXJfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkCisJCQkgICAgICAgbG9uZyAqc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJdW5zaWduZWQgbG9uZyBsb25nIGxldmVsOwotCWludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OwogCi0JYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KHZpZGVvLCAmbGV2ZWwpOwotCWZvciAoc3RhdGUgPSAyOyBzdGF0ZSA8IHZpZGVvLT5icmlnaHRuZXNzLT5jb3VudDsgc3RhdGUrKykKLQkJaWYgKGxldmVsID09IHZpZGVvLT5icmlnaHRuZXNzLT5sZXZlbHNbc3RhdGVdKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQkJICAgICAgIHZpZGVvLT5icmlnaHRuZXNzLT5jb3VudCAtIHN0YXRlIC0gMSk7CisJaWYgKGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudCh2aWRlbywgJmxldmVsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChvZmZzZXQgPSAyOyBvZmZzZXQgPCB2aWRlby0+YnJpZ2h0bmVzcy0+Y291bnQ7IG9mZnNldCsrKQorCQlpZiAobGV2ZWwgPT0gdmlkZW8tPmJyaWdodG5lc3MtPmxldmVsc1tvZmZzZXRdKSB7CisJCQkqc3RhdGUgPSB2aWRlby0+YnJpZ2h0bmVzcy0+Y291bnQgLSBvZmZzZXQgLSAxOworCQkJcmV0dXJuIDA7CisJCX0KIAogCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50Ci12aWRlb19zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgc3RhdGUpCit2aWRlb19zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBsb25nIHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtNDc5LDM0ICs1MTAsNjggQEAKIHN0YXRpYyBpbnQKIGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsIGludCBsZXZlbCkKIHsKLQlpbnQgc3RhdHVzID0gQUVfT0s7CisJaW50IHN0YXR1czsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJX1RZUEVfSU5URUdFUiB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDEsICZhcmcwIH07CiAJaW50IHN0YXRlOwogCi0KIAlhcmcwLmludGVnZXIudmFsdWUgPSBsZXZlbDsKIAotCWlmIChkZXZpY2UtPmNhcC5fQkNNKQotCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JDTSIsCi0JCQkJCSAgICAgICZhcmdzLCBOVUxMKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JDTSIsCisJCQkJICAgICAgJmFyZ3MsIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiRXZhbHVhdGluZyBfQkNNIGZhaWxlZCIpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJZGV2aWNlLT5icmlnaHRuZXNzLT5jdXJyID0gbGV2ZWw7CiAJZm9yIChzdGF0ZSA9IDI7IHN0YXRlIDwgZGV2aWNlLT5icmlnaHRuZXNzLT5jb3VudDsgc3RhdGUrKykKLQkJaWYgKGxldmVsID09IGRldmljZS0+YnJpZ2h0bmVzcy0+bGV2ZWxzW3N0YXRlXSkKLQkJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID0gc3RhdGUgLSAyOworCQlpZiAobGV2ZWwgPT0gZGV2aWNlLT5icmlnaHRuZXNzLT5sZXZlbHNbc3RhdGVdKSB7CisJCQlpZiAoZGV2aWNlLT5iYWNrbGlnaHQpCisJCQkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPSBzdGF0ZSAtIDI7CisJCQlyZXR1cm4gMDsKKwkJfQogCi0JcmV0dXJuIHN0YXR1czsKKwlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ3VycmVudCBicmlnaHRuZXNzIGludmFsaWQiKSk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQKIGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwKIAkJCQkJdW5zaWduZWQgbG9uZyBsb25nICpsZXZlbCkKIHsKLQlpZiAoZGV2aWNlLT5jYXAuX0JRQykKLQkJcmV0dXJuIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JRQyIsIE5VTEwsCi0JCQkJCSAgICAgbGV2ZWwpOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCisJaWYgKGRldmljZS0+Y2FwLl9CUUMgfHwgZGV2aWNlLT5jYXAuX0JDUSkgeworCQljaGFyICpidWYgPSBkZXZpY2UtPmNhcC5fQlFDID8gIl9CUUMiIDogIl9CQ1EiOworCisJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmRldi0+aGFuZGxlLCBidWYsCisJCQkJCQlOVUxMLCBsZXZlbCk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJaWYgKGRldmljZS0+YnJpZ2h0bmVzcy0+ZmxhZ3MuX0JRQ191c2VfaW5kZXgpIHsKKwkJCQlpZiAoZGV2aWNlLT5icmlnaHRuZXNzLT5mbGFncy5fQkNMX3JldmVyc2VkKQorCQkJCQkqbGV2ZWwgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmNvdW50CisJCQkJCQkJCSAtIDMgLSAoKmxldmVsKTsKKwkJCQkqbGV2ZWwgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmxldmVsc1sqbGV2ZWwgKyAyXTsKKworCQkJfQorCQkJZGV2aWNlLT5icmlnaHRuZXNzLT5jdXJyID0gKmxldmVsOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQkvKiBGaXhtZToKKwkJCSAqIHNob3VsZCB3ZSByZXR1cm4gYW4gZXJyb3Igb3IgaWdub3JlIHRoaXMgZmFpbHVyZT8KKwkJCSAqIGRldi0+YnJpZ2h0bmVzcy0+Y3VyciBpcyBhIGNhY2hlZCB2YWx1ZSB3aGljaCBzdG9yZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGN1cnJlbnQgYmFja2xpZ2h0IGxldmVsIGluIG1vc3QgY2FzZXMuCisJCQkgKiBBQ1BJIHZpZGVvIGJhY2tsaWdodCBzdGlsbCB3b3JrcyB3LyBidWdneSBfQlFDLgorCQkJICogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjMzCisJCQkgKi8KKwkJCUFDUElfV0FSTklORygoQUVfSU5GTywgIkV2YWx1YXRpbmcgJXMgZmFpbGVkIiwgYnVmKSk7CisJCQlkZXZpY2UtPmNhcC5fQlFDID0gZGV2aWNlLT5jYXAuX0JDUSA9IDA7CisJCX0KKwl9CisKIAkqbGV2ZWwgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmN1cnI7Ci0JcmV0dXJuIEFFX09LOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC02NTUsOSArNzIwLDExIEBACiBhY3BpX3ZpZGVvX2luaXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSkKIHsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqID0gTlVMTDsKLQlpbnQgaSwgbWF4X2xldmVsID0gMCwgY291bnQgPSAwOworCWludCBpLCBtYXhfbGV2ZWwgPSAwLCBjb3VudCA9IDAsIGxldmVsX2FjX2JhdHRlcnkgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBsZXZlbCwgbGV2ZWxfb2xkOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzICpiciA9IE5VTEw7CisJaW50IHJlc3VsdCA9IC1FSU5WQUw7CiAKIAlpZiAoIUFDUElfU1VDQ0VTUyhhY3BpX3ZpZGVvX2RldmljZV9sY2RfcXVlcnlfbGV2ZWxzKGRldmljZSwgJm9iaikpKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkNvdWxkIG5vdCBxdWVyeSBhdmFpbGFibGUgIgpAQCAtNjcxLDEzICs3MzgsMTYgQEAKIAliciA9IGt6YWxsb2Moc2l6ZW9mKCpiciksIEdGUF9LRVJORUwpOwogCWlmICghYnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKLQlici0+bGV2ZWxzID0ga21hbGxvYyhvYmotPnBhY2thZ2UuY291bnQgKiBzaXplb2YgKihici0+bGV2ZWxzKSwKKwlici0+bGV2ZWxzID0ga21hbGxvYygob2JqLT5wYWNrYWdlLmNvdW50ICsgMikgKiBzaXplb2YgKihici0+bGV2ZWxzKSwKIAkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWJyLT5sZXZlbHMpCisJaWYgKCFici0+bGV2ZWxzKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IG9iai0+cGFja2FnZS5jb3VudDsgaSsrKSB7CiAJCW8gPSAodW5pb24gYWNwaV9vYmplY3QgKikmb2JqLT5wYWNrYWdlLmVsZW1lbnRzW2ldOwpAQCAtNjkyLDE4ICs3NjIsODYgQEAKIAkJY291bnQrKzsKIAl9CiAKLQkvKiBkb24ndCBzb3J0IHRoZSBmaXJzdCB0d28gYnJpZ2h0bmVzcyBsZXZlbHMgKi8KLQlzb3J0KCZici0+bGV2ZWxzWzJdLCBjb3VudCAtIDIsIHNpemVvZihici0+bGV2ZWxzWzJdKSwKLQkJYWNwaV92aWRlb19jbXBfbGV2ZWwsIE5VTEwpOworCS8qCisJICogc29tZSBidWdneSBCSU9TIGRvbid0IGV4cG9ydCB0aGUgbGV2ZWxzCisJICogd2hlbiBtYWNoaW5lIGlzIG9uIEFDL0JhdHRlcnkgaW4gX0JDTCBwYWNrYWdlLgorCSAqIEluIHRoaXMgY2FzZSwgdGhlIGZpcnN0IHR3byBlbGVtZW50cyBpbiBfQkNMIHBhY2thZ2VzCisJICogYXJlIGFsc28gc3VwcG9ydGVkIGJyaWdodG5lc3MgbGV2ZWxzIHRoYXQgT1Mgc2hvdWxkIHRha2UgY2FyZSBvZi4KKwkgKi8KKwlmb3IgKGkgPSAyOyBpIDwgY291bnQ7IGkrKykKKwkJaWYgKGJyLT5sZXZlbHNbaV0gPT0gYnItPmxldmVsc1swXSB8fAorCQkgICAgYnItPmxldmVsc1tpXSA9PSBici0+bGV2ZWxzWzFdKQorCQkJbGV2ZWxfYWNfYmF0dGVyeSsrOwogCi0JaWYgKGNvdW50IDwgMikKLQkJZ290byBvdXRfZnJlZV9sZXZlbHM7CisJaWYgKGxldmVsX2FjX2JhdHRlcnkgPCAyKSB7CisJCWxldmVsX2FjX2JhdHRlcnkgPSAyIC0gbGV2ZWxfYWNfYmF0dGVyeTsKKwkJYnItPmZsYWdzLl9CQ0xfbm9fYWNfYmF0dGVyeV9sZXZlbHMgPSAxOworCQlmb3IgKGkgPSAoY291bnQgLSAxICsgbGV2ZWxfYWNfYmF0dGVyeSk7IGkgPj0gMjsgaS0tKQorCQkJYnItPmxldmVsc1tpXSA9IGJyLT5sZXZlbHNbaSAtIGxldmVsX2FjX2JhdHRlcnldOworCQljb3VudCArPSBsZXZlbF9hY19iYXR0ZXJ5OworCX0gZWxzZSBpZiAobGV2ZWxfYWNfYmF0dGVyeSA+IDIpCisJCUFDUElfRVJST1IoKEFFX0lORk8sICJUb28gbWFueSBkdXBsaWNhdGVzIGluIF9CQ0wgcGFja2FnZVxuIikpOworCisJLyogQ2hlY2sgaWYgdGhlIF9CQ0wgcGFja2FnZSBpcyBpbiBhIHJldmVyc2VkIG9yZGVyICovCisJaWYgKG1heF9sZXZlbCA9PSBici0+bGV2ZWxzWzJdKSB7CisJCWJyLT5mbGFncy5fQkNMX3JldmVyc2VkID0gMTsKKwkJc29ydCgmYnItPmxldmVsc1syXSwgY291bnQgLSAyLCBzaXplb2YoYnItPmxldmVsc1syXSksCisJCQlhY3BpX3ZpZGVvX2NtcF9sZXZlbCwgTlVMTCk7CisJfSBlbHNlIGlmIChtYXhfbGV2ZWwgIT0gYnItPmxldmVsc1tjb3VudCAtIDFdKQorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJICAgICJGb3VuZCB1bm9yZGVyZWQgX0JDTCBwYWNrYWdlXG4iKSk7CiAKIAlici0+Y291bnQgPSBjb3VudDsKIAlkZXZpY2UtPmJyaWdodG5lc3MgPSBicjsKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJmb3VuZCAlZCBicmlnaHRuZXNzIGxldmVsc1xuIiwgY291bnQpKTsKKworCS8qIENoZWNrIHRoZSBpbnB1dC9vdXRwdXQgb2YgX0JRQy9fQkNML19CQ00gKi8KKwlpZiAoKG1heF9sZXZlbCA8IDEwMCkgJiYgKG1heF9sZXZlbCA8PSAoY291bnQgLSAyKSkpCisJCWJyLT5mbGFncy5fQkNMX3VzZV9pbmRleCA9IDE7CisKKwkvKgorCSAqIF9CQ00gaXMgYWx3YXlzIGNvbnNpc3RlbnQgd2l0aCBfQkNMLAorCSAqIGF0IGxlYXN0IGZvciBhbGwgdGhlIGxhcHRvcHMgd2UgaGF2ZSBldmVyIHNlZW4uCisJICovCisJYnItPmZsYWdzLl9CQ01fdXNlX2luZGV4ID0gYnItPmZsYWdzLl9CQ0xfdXNlX2luZGV4OworCisJLyogX0JRQyB1c2VzIElOREVYIHdoaWxlIF9CQ0wgdXNlcyBWQUxVRSBpbiBzb21lIGxhcHRvcHMgKi8KKwlici0+Y3VyciA9IG1heF9sZXZlbDsKKwlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQoZGV2aWNlLCAmbGV2ZWxfb2xkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIG91dF9mcmVlX2xldmVsczsKKworCXJlc3VsdCA9IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoZGV2aWNlLCBici0+Y3Vycik7CisJaWYgKHJlc3VsdCkKKwkJZ290byBvdXRfZnJlZV9sZXZlbHM7CisKKwlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQoZGV2aWNlLCAmbGV2ZWwpOworCWlmIChyZXN1bHQpCisJCWdvdG8gb3V0X2ZyZWVfbGV2ZWxzOworCisJaWYgKChsZXZlbCAhPSBsZXZlbF9vbGQpICYmICFici0+ZmxhZ3MuX0JDTV91c2VfaW5kZXgpIHsKKwkJLyogTm90ZToKKwkJICogVGhpcyBwaWVjZSBvZiBjb2RlIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGlmIHRoZSBjdXJyZW50CisJCSAqIGJyaWdodG5lc3MgbGV2ZWxzIGlzIDAuCisJCSAqIEJ1dCBJIGd1ZXNzIGJveGVzIHRoYXQgYm9vdCB3aXRoIHN1Y2ggYSBkYXJrIHNjcmVlbiBhcmUgcmFyZQorCQkgKiBhbmQgbm8gbW9yZSBjb2RlIGlzIG5lZWRlZCB0byBjb3ZlciB0aGlzIHNwZWNpZmlhbCBjYXNlLgorCQkgKi8KKworCQlpZiAobGV2ZWxfYWNfYmF0dGVyeSAhPSAyKSB7CisJCQkvKgorCQkJICogRm9yIG5vdywgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgX0JDTCBsaWtlIHRoaXM6CisJCQkgKiAxNiwgMTUsIDAsIDEsIDIsIDMsIC4uLiwgMTQsIDE1LCAxNgorCQkJICogYmVjYXVzZSB3ZSBtYXkgbWVzcyB1cCB0aGUgaW5kZXggcmV0dXJuZWQgYnkgX0JRQy4KKwkJCSAqIFBsdXM6IHdlIGhhdmUgbm90IGdvdCBhIGJveCBsaWtlIHRoaXMuCisJCQkgKi8KKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJfQkNMIG5vdCBzdXBwb3J0ZWRcbiIpKTsKKwkJfQorCQlici0+ZmxhZ3MuX0JRQ191c2VfaW5kZXggPSAxOworCX0KKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCSAgImZvdW5kICVkIGJyaWdodG5lc3MgbGV2ZWxzXG4iLCBjb3VudCAtIDIpKTsKIAlrZnJlZShvYmopOwotCXJldHVybiBtYXhfbGV2ZWw7CisJcmV0dXJuIHJlc3VsdDsKIAogb3V0X2ZyZWVfbGV2ZWxzOgogCWtmcmVlKGJyLT5sZXZlbHMpOwpAQCAtNzEyLDcgKzg1MCw3IEBACiBvdXQ6CiAJZGV2aWNlLT5icmlnaHRuZXNzID0gTlVMTDsKIAlrZnJlZShvYmopOwotCXJldHVybiAwOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCkBAIC03MjksNyArODY3LDYgQEAKIHN0YXRpYyB2b2lkIGFjcGlfdmlkZW9fZGV2aWNlX2ZpbmRfY2FwKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfaGFuZGxlIGhfZHVtbXkxOwotCXUzMiBtYXhfbGV2ZWwgPSAwOwogCiAKIAltZW1zZXQoJmRldmljZS0+Y2FwLCAwLCBzaXplb2YoZGV2aWNlLT5jYXApKTsKQEAgLTc0NSw2ICs4ODIsMTIgQEAKIAl9CiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5kZXYtPmhhbmRsZSwiX0JRQyIsJmhfZHVtbXkxKSkpCiAJCWRldmljZS0+Y2FwLl9CUUMgPSAxOworCWVsc2UgaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5kZXYtPmhhbmRsZSwgIl9CQ1EiLAorCQkJCSZoX2R1bW15MSkpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRldfQlVHICJfQkNRIGlzIHVzZWQgaW5zdGVhZCBvZiBfQlFDXG4iKTsKKwkJZGV2aWNlLT5jYXAuX0JDUSA9IDE7CisJfQorCiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5kZXYtPmhhbmRsZSwgIl9EREMiLCAmaF9kdW1teTEpKSkgewogCQlkZXZpY2UtPmNhcC5fRERDID0gMTsKIAl9CkBAIC03NTgsMTMgKzkwMSwxNCBAQAogCQlkZXZpY2UtPmNhcC5fRFNTID0gMTsKIAl9CiAKLQlpZiAoYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKQotCQltYXhfbGV2ZWwgPSBhY3BpX3ZpZGVvX2luaXRfYnJpZ2h0bmVzcyhkZXZpY2UpOwotCi0JaWYgKGRldmljZS0+Y2FwLl9CQ0wgJiYgZGV2aWNlLT5jYXAuX0JDTSAmJiBtYXhfbGV2ZWwgPiAwKSB7CisJaWYgKGFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkgewogCQlpbnQgcmVzdWx0OwogCQlzdGF0aWMgaW50IGNvdW50ID0gMDsKIAkJY2hhciAqbmFtZTsKKworCQlyZXN1bHQgPSBhY3BpX3ZpZGVvX2luaXRfYnJpZ2h0bmVzcyhkZXZpY2UpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuOwogCQluYW1lID0ga3phbGxvYyhNQVhfTkFNRV9MRU4sIEdGUF9LRVJORUwpOwogCQlpZiAoIW5hbWUpCiAJCQlyZXR1cm47CkBAIC03NzMsMTggKzkxNyw2IEBACiAJCWRldmljZS0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLAogCQkJTlVMTCwgZGV2aWNlLCAmYWNwaV9iYWNrbGlnaHRfb3BzKTsKIAkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gZGV2aWNlLT5icmlnaHRuZXNzLT5jb3VudC0zOwotCQkvKgotCQkgKiBJZiB0aGVyZSBleGlzdHMgdGhlIF9CUUMgb2JqZWN0LCB0aGUgX0JRQyBvYmplY3Qgd2lsbCBiZQotCQkgKiBjYWxsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGJhY2tsaWdodCBicmlnaHRuZXNzLiBPdGhlcndpc2UKLQkJICogdGhlIGJyaWdodG5lc3Mgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0uCi0JCSAqLwotCQlpZiAoZGV2aWNlLT5jYXAuX0JRQykKLQkJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID0KLQkJCQlhY3BpX3ZpZGVvX2dldF9icmlnaHRuZXNzKGRldmljZS0+YmFja2xpZ2h0KTsKLQkJZWxzZQotCQkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPQotCQkJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5tYXhfYnJpZ2h0bmVzczsKLQkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoZGV2aWNlLT5iYWNrbGlnaHQpOwogCQlrZnJlZShuYW1lKTsKIAogCQlkZXZpY2UtPmNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJMQ0QiLApAQCAtMTA2MSwxMyArMTE5MywxMiBAQAogCS8qIHZhbGlkYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGxldmVscyAqLwogCWZvciAoaSA9IDI7IGkgPCBkZXYtPmJyaWdodG5lc3MtPmNvdW50OyBpKyspCiAJCWlmIChsZXZlbCA9PSBkZXYtPmJyaWdodG5lc3MtPmxldmVsc1tpXSkgewotCQkJaWYgKEFDUElfU1VDQ0VTUwotCQkJICAgIChhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKGRldiwgbGV2ZWwpKSkKLQkJCQlkZXYtPmJyaWdodG5lc3MtPmN1cnIgPSBsZXZlbDsKKwkJCWlmICghYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXYsIGxldmVsKSkKKwkJCQlyZXR1cm4gY291bnQ7CiAJCQlicmVhazsKIAkJfQogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX0VESURfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKQEAgLTExMzIsNyArMTI2Myw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9kaXI7CiAKIAkvKiAnc3RhdGUnIFtSL1ddICovCi0JYWNwaV92aWRlb19kZXZpY2Vfc3RhdGVfZm9wcy53cml0ZSA9IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX3N0YXRlOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgic3RhdGUiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJIGRldmljZV9kaXIsCiAJCQkJICZhY3BpX3ZpZGVvX2RldmljZV9zdGF0ZV9mb3BzLApAQCAtMTE0MSw4ICsxMjcxLDYgQEAKIAkJZ290byBlcnJfcmVtb3ZlX2luZm87CiAKIAkvKiAnYnJpZ2h0bmVzcycgW1IvV10gKi8KLQlhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX2ZvcHMud3JpdGUgPQotCQlhY3BpX3ZpZGVvX2RldmljZV93cml0ZV9icmlnaHRuZXNzOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYnJpZ2h0bmVzcyIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcywKQEAgLTE0MjMsNyArMTU1MSw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9yb207CiAKIAkvKiAnUE9TVCcgW1IvV10gKi8KLQlhY3BpX3ZpZGVvX2J1c19QT1NUX2ZvcHMud3JpdGUgPSBhY3BpX3ZpZGVvX2J1c193cml0ZV9QT1NUOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiUE9TVCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fYnVzX1BPU1RfZm9wcywKQEAgLTE0MzIsNyArMTU1OSw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9wb3N0X2luZm87CiAKIAkvKiAnRE9TJyBbUi9XXSAqLwotCWFjcGlfdmlkZW9fYnVzX0RPU19mb3BzLndyaXRlID0gYWNwaV92aWRlb19idXNfd3JpdGVfRE9TOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiRE9TIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCSBkZXZpY2VfZGlyLAogCQkJCSAmYWNwaV92aWRlb19idXNfRE9TX2ZvcHMsCkBAIC0xNzQ1LDE1ICsxODcxLDI5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogYWNwaV92aWRlb19zd2l0Y2hfYnJpZ2h0bmVzcyhzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwgaW50IGV2ZW50KQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBsZXZlbF9jdXJyZW50LCBsZXZlbF9uZXh0OworCWludCByZXN1bHQgPSAtRUlOVkFMOworCiAJaWYgKCFkZXZpY2UtPmJyaWdodG5lc3MpCi0JCXJldHVybjsKLQlhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQoZGV2aWNlLCAmbGV2ZWxfY3VycmVudCk7CisJCWdvdG8gb3V0OworCisJcmVzdWx0ID0gYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KGRldmljZSwKKwkJCQkJCQkgJmxldmVsX2N1cnJlbnQpOworCWlmIChyZXN1bHQpCisJCWdvdG8gb3V0OworCiAJbGV2ZWxfbmV4dCA9IGFjcGlfdmlkZW9fZ2V0X25leHRfbGV2ZWwoZGV2aWNlLCBsZXZlbF9jdXJyZW50LCBldmVudCk7Ci0JYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXZpY2UsIGxldmVsX25leHQpOworCisJcmVzdWx0ID0gYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXZpY2UsIGxldmVsX25leHQpOworCitvdXQ6CisJaWYgKHJlc3VsdCkKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIHN3aXRjaCB0aGUgYnJpZ2h0bmVzc1xuIik7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50CkBAIC0yMTIwLDcgKzIyNjAsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYWNwaV92aWRlb19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbnRlbF9vcHJlZ2lvbl9wcmVzZW50KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfRFJNX0k5MTUpIHx8IGRlZmluZWQoQ09ORklHX0RSTV9JOTE1X01PRFVMRSkKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1MzIgYWRkcmVzczsKKworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisJCWlmICgoZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpCisJCQljb250aW51ZTsKKwkJaWYgKGRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfSU5URUwpCisJCQljb250aW51ZTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhmYywgJmFkZHJlc3MpOworCQlpZiAoIWFkZHJlc3MpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBhY3BpX3ZpZGVvX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKQEAgLTIxMzYsNiArMjI5NiwyMiBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGFjcGlfdmlkZW9fcmVnaXN0ZXIpOworCisvKgorICogVGhpcyBpcyBraW5kIG9mIG5hc3R5LiBIYXJkd2FyZSB1c2luZyBJbnRlbCBjaGlwc2V0cyBtYXkgcmVxdWlyZQorICogdGhlIHZpZGVvIG9wcmVnaW9uIGNvZGUgdG8gYmUgcnVuIGZpcnN0IGluIG9yZGVyIHRvIGluaXRpYWxpc2UKKyAqIHN0YXRlIGJlZm9yZSBhbnkgQUNQSSB2aWRlbyBjYWxscyBhcmUgbWFkZS4gVG8gaGFuZGxlIHRoaXMgd2UgZGVmZXIKKyAqIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmlkZW8gY2xhc3MgdW50aWwgdGhlIG9wcmVnaW9uIGNvZGUgaGFzIHJ1bi4KKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3ZpZGVvX2luaXQodm9pZCkKK3sKKwlpZiAoaW50ZWxfb3ByZWdpb25fcHJlc2VudCgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhY3BpX3ZpZGVvX3JlZ2lzdGVyKCk7Cit9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3ZpZGVvX2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA1MGUzZDJkLi4wOTczNzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC01NSw2ICs1NSw5IEBACiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkZvdW5kIGdlbmVyaWMgYmFja2xpZ2h0ICIKIAkJCQkgICJzdXBwb3J0XG4iKSk7CiAJCSpjYXAgfD0gQUNQSV9WSURFT19CQUNLTElHSFQ7CisJCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9CUUMiLCAmaF9kdW1teSkpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBGV19CVUcgUFJFRklYICJBQ1BJIGJyaWdodG5lc3MgIgorCQkJCQkiY29udHJvbCBtaXNzZXMgX0JRQyBmdW5jdGlvblxuIik7CiAJCS8qIFdlIGhhdmUgYmFja2xpZ2h0IHN1cHBvcnQsIG5vIG5lZWQgdG8gc2NhbiBmdXJ0aGVyICovCiAJCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvd2FrZXVwLmMgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKaW5kZXggMmQzNDgwNi4uNWFlZThjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYWNwaS93YWtldXAuYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInNsZWVwLmgiCiAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9TWVNURU1fQ09NUE9ORU5UCkBAIC0xMzYsMTMgKzEzOCwxMCBAQAogCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYWNwaV93YWtldXBfZGV2aWNlX2luaXQodm9pZCkKK2ludCBfX2luaXQgYWNwaV93YWtldXBfZGV2aWNlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQogCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZhY3BpX3dha2V1cF9kZXZpY2VfbGlzdCkgewogCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihub2RlLApAQCAtMTYzLDUgKzE2MiwzIEBACiAJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCXJldHVybiAwOwogfQotCi1sYXRlX2luaXRjYWxsKGFjcGlfd2FrZXVwX2RldmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9ub2RlLmMgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCmluZGV4IGY4ZjU3OGEuLjQwYjgwOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9ub2RlLmMKKysrIGIvZHJpdmVycy9iYXNlL25vZGUuYwpAQCAtMjQsNyArMjQsNyBAQAogc3RhdGljIHNzaXplX3Qgbm9kZV9yZWFkX2NwdW1hcChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBpbnQgdHlwZSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBub2RlICpub2RlX2RldiA9IHRvX25vZGUoZGV2KTsKLQlub2RlX3RvX2NwdW1hc2tfcHRyKG1hc2ssIG5vZGVfZGV2LT5zeXNkZXYuaWQpOworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrID0gY3B1bWFza19vZl9ub2RlKG5vZGVfZGV2LT5zeXNkZXYuaWQpOwogCWludCBsZW47CiAKIAkvKiAyMDA4LzA0LzA3OiBidWYgY3VycmVudGx5IFBBR0VfU0laRSwgbmVlZCA5IGNoYXJzIHBlciAzMiBiaXRzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCBlYmVhOWIyLi42ZGUwMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiB9CiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9mdHJhY2VfZHVtcF9vcCA9IHsKIAkuaGFuZGxlcgk9IHN5c3JxX2Z0cmFjZV9kdW1wLAotCS5oZWxwX21zZwk9ICJkdW1wWi1mdHJhY2UtYnVmZmVyIiwKKwkuaGVscF9tc2cJPSAiZHVtcC1mdHJhY2UtYnVmZmVyKFopIiwKIAkuYWN0aW9uX21zZwk9ICJEdW1wIGZ0cmFjZSBidWZmZXIiLAogCS5lbmFibGVfbWFzawk9IFNZU1JRX0VOQUJMRV9EVU1QLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCmluZGV4IDc3ODNiNDIuLjFjOTJjMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtNDY1LDcgKzQ2NSw2IEBACiAJY2VkLT5zZXRfbW9kZSA9IHNoX2NtdF9jbG9ja19ldmVudF9tb2RlOwogCiAJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7Ci0JY2VkLT5tdWx0ID0gMTsgLyogd29yayBhcm91bmQgbWlzcGxhY2VkIFdBUk5fT04oKSBpbiBjbG9ja2V2ZW50cy5jICovCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CiB9CiAKQEAgLTU1Nyw3ICs1NTYsNyBAQAogCQkJICAgICAgIGNmZy0+Y2xvY2tldmVudF9yYXRpbmcsCiAJCQkgICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOwogIGVycjI6Ci0JZnJlZV9pcnEoaXJxLCBwKTsKKwlyZW1vdmVfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7CiAgZXJyMToKIAlpb3VubWFwKHAtPm1hcGJhc2UpOwogIGVycjA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCBjMjNiM2E5Li5hMDAwY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTExNzksOCArMTE3OSw2IEBACiAJaWYgKCFJU19JOTQ1RyhkZXYpICYmICFJU19JOTQ1R00oZGV2KSkKIAkJcGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KTsKIAotCWludGVsX29wcmVnaW9uX2luaXQoZGV2KTsKLQogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jayk7CiAJZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID0gMDsKIApAQCAtMTE5OSw2ICsxMTk3LDkgQEAKIAkJfQogCX0KIAorCS8qIE11c3QgYmUgZG9uZSBhZnRlciBwcm9iaW5nIG91dHB1dHMgKi8KKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldiwgMCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2lvbWFwZnJlZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDJjMDE2NzYuLjY1MDNlMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKIAlpOTE1X3Jlc3RvcmVfc3RhdGUoZGV2KTsKIAotCWludGVsX29wcmVnaW9uX2luaXQoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldiwgMSk7CiAKIAkvKiBLTVMgRW50ZXJWVCBlcXVpdmFsZW50ICovCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDMxN2IxMjIuLjM3NTBkODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNjY2LDEyICs2NjYsMTIgQEAKIAogI2lmZGVmIENPTkZJR19BQ1BJCiAvKiBpOTE1X29wcmVnaW9uLmMgKi8KLWV4dGVybiBpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmVzdW1lKTsKIGV4dGVybiB2b2lkIGludGVsX29wcmVnaW9uX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBvcHJlZ2lvbl9hc2xlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBvcHJlZ2lvbl9lbmFibGVfYXNsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlc3VtZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGludGVsX29wcmVnaW9uX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvcHJlZ2lvbl9hc2xlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvcHJlZ2lvbl9lbmFibGVfYXNsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KSB7IHJldHVybjsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jCmluZGV4IGZmMDEyODMuLjY5NDI3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvdmlkZW8uaD4KIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgpAQCAtMTM2LDYgKzEzNywxMiBAQAogCiAjZGVmaW5lIEFTTEVfQ0JMVl9WQUxJRCAgICAgICAgICgxPDwzMSkKIAorI2RlZmluZSBBQ1BJX09USEVSX09VVFBVVCAoMDw8OCkKKyNkZWZpbmUgQUNQSV9WR0FfT1VUUFVUICgxPDw4KQorI2RlZmluZSBBQ1BJX1RWX09VVFBVVCAoMjw8OCkKKyNkZWZpbmUgQUNQSV9ESUdJVEFMX09VVFBVVCAoMzw8OCkKKyNkZWZpbmUgQUNQSV9MVkRTX09VVFBVVCAoNDw8OCkKKwogc3RhdGljIHUzMiBhc2xlX3NldF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGJjbHApCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTI4Miw3ICsyODksNTggQEAKIAkubm90aWZpZXJfY2FsbCA9IGludGVsX29wcmVnaW9uX3ZpZGVvX2V2ZW50LAogfTsKIAotaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBESURMIGZpZWxkIGluIG9wcmVnaW9uLiBUaGlzIHBhc3NlcyBhIGxpc3Qgb2YgZGV2aWNlcyB0bworICogdGhlIGZpcm13YXJlLiBWYWx1ZXMgYXJlIGRlZmluZWQgYnkgc2VjdGlvbiBCLjQuMiBvZiB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uCisgKiAodmVyc2lvbiAzKQorICovCisKK3N0YXRpYyB2b2lkIGludGVsX2RpZGxfb3V0cHV0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgaSA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IG91dHB1dF90eXBlID0gQUNQSV9PVEhFUl9PVVRQVVQ7CisJCWlmIChpID49IDgpIHsKKwkJCWRldl9wcmludGsgKEtFUk5fRVJSLCAmZGV2LT5wZGV2LT5kZXYsCisJCQkJICAgICJNb3JlIHRoYW4gOCBvdXRwdXRzIGRldGVjdGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgorCQkJb3V0cHV0X3R5cGUgPSBBQ1BJX1ZHQV9PVVRQVVQ7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDoKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKKwkJCW91dHB1dF90eXBlID0gQUNQSV9UVl9PVVRQVVQ7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjoKKwkJCW91dHB1dF90eXBlID0gQUNQSV9ESUdJVEFMX09VVFBVVDsKKwkJCWJyZWFrOworCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgorCQkJb3V0cHV0X3R5cGUgPSBBQ1BJX0xWRFNfT1VUUFVUOworCQkJYnJlYWs7CisJCX0KKwkJb3ByZWdpb24tPmFjcGktPmRpZGxbaV0gfD0gKDE8PDMxKSB8IG91dHB1dF90eXBlIHwgaTsKKwkJaSsrOworCX0KKworCS8qIElmIGZld2VyIHRoYW4gOCBvdXRwdXRzLCB0aGUgbGlzdCBtdXN0IGJlIG51bGwgdGVybWluYXRlZCAqLworCWlmIChpIDwgOCkKKwkJb3ByZWdpb24tPmFjcGktPmRpZGxbaV0gPSAwOworfQorCitpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmVzdW1lKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CkBAIC0zMTIsNiArMzcwLDExIEBACiAJaWYgKG1ib3hlcyAmIE1CT1hfQUNQSSkgewogCQlEUk1fREVCVUcoIlB1YmxpYyBBQ1BJIG1ldGhvZHMgc3VwcG9ydGVkXG4iKTsKIAkJb3ByZWdpb24tPmFjcGkgPSBiYXNlICsgT1BSRUdJT05fQUNQSV9PRkZTRVQ7CisJCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCQlpbnRlbF9kaWRsX291dHB1dHMoZGV2KTsKKwkJCWlmICghcmVzdW1lKQorCQkJCWFjcGlfdmlkZW9fcmVnaXN0ZXIoKTsKKwkJfQogCX0gZWxzZSB7CiAJCURSTV9ERUJVRygiUHVibGljIEFDUEkgbWV0aG9kcyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJZXJyID0gLUVOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCmluZGV4IGUxNDgwZmIuLmNlYTcwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKQEAgLTI1OSwxMiArMjU5LDE1IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzaF9rZXlzY19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJdW5zaWduZWQgc2hvcnQgdmFsdWU7CiAKIAl2YWx1ZSA9IGlvcmVhZDE2KHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CiAJCXZhbHVlIHw9IDB4ODA7CisJCWVuYWJsZV9pcnFfd2FrZShpcnEpOworCX0KIAllbHNlCiAJCXZhbHVlICY9IH4weDgwOwogCkBAIC0yNzIsOCArMjc1LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfa2V5c2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShpcnEpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9rZXlzY19kZXZfcG1fb3BzID0gewogCS5zdXNwZW5kID0gc2hfa2V5c2Nfc3VzcGVuZCwKKwkucmVzdW1lID0gc2hfa2V5c2NfcmVzdW1lLAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9rZXlzY19kZXZpY2VfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9taWdvcl90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9taWdvcl90cy5jCmluZGV4IDUwNGNhMTEuLjE0MWRkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWlnb3JfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21pZ29yX3RzLmMKQEAgLTE5OCw2ICsxOTgsNyBAQAogCQlnb3RvIGVycjI7CiAJfQogCisJZGV2aWNlX2luaXRfd2FrZXVwKCZjbGllbnQtPmRldiwgMSk7CiAJcmV0dXJuIDA7CiAKICBlcnIyOgpAQCAtMjI0LDYgKzIyNSwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1pZ29yX3RzX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IG1pZ29yX3RzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmY2xpZW50LT5kZXYpKQorCQllbmFibGVfaXJxX3dha2UocHJpdi0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pZ29yX3RzX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtaWdvcl90c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjbGllbnQtPmRldik7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShwcml2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtaWdvcl90c19pZFtdID0gewogCXsgIm1pZ29yX3RzIiwgMCB9LAogCXsgfQpAQCAtMjM2LDYgKzI1Nyw4IEBACiAJfSwKIAkucHJvYmUgPSBtaWdvcl90c19wcm9iZSwKIAkucmVtb3ZlID0gbWlnb3JfdHNfcmVtb3ZlLAorCS5zdXNwZW5kID0gbWlnb3JfdHNfc3VzcGVuZCwKKwkucmVzdW1lID0gbWlnb3JfdHNfcmVzdW1lLAogCS5pZF90YWJsZSA9IG1pZ29yX3RzX2lkLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggNzVmMzVkYi4uZWUzOTI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC01Miw2ICs1Miw3IEBACiAKIGNvbmZpZyBIVENfUEFTSUMzCiAJdHJpc3RhdGUgIkhUQyBQQVNJQzMgTEVEL0RTMVdNIGNoaXAgc3VwcG9ydCIKKwlzZWxlY3QgTUZEX0NPUkUKIAloZWxwCiAJICBUaGlzIGNvcmUgZHJpdmVyIHByb3ZpZGVzIHJlZ2lzdGVyIGFjY2VzcyBmb3IgdGhlIExFRC9EUzFXTQogCSAgY2hpcHMgbGFiZWxlZCAiQUlDMiIgYW5kICJBSUMzIiwgZm91bmQgb24gSFRDIEJsdWVhbmdlbCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RhOTAzeC5jIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKaW5kZXggOTlmOGRjZi4uNzI4M2Q4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZGE5MDN4LmMKKysrIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOwogfQogCi1zdGF0aWMgaW50IGRhOTAzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQorc3RhdGljIGlycXJldHVybl90IGRhOTAzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2h0Yy1wYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2h0Yy1wYXNpYzMuYwppbmRleCA5MWIyOTRkLi4zODZkYTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9odGMtcGFzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvaHRjLXBhc2ljMy5jCkBAIC0xMiwxOCArMTIsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2RzMXdtLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZHMxd20uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvaHRjLXBhc2ljMy5oPgogCiBzdHJ1Y3QgcGFzaWMzX2RhdGEgewogCXZvaWQgX19pb21lbSAqbWFwcGluZzsKIAl1bnNpZ25lZCBpbnQgYnVzX3NoaWZ0OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzMXdtX3BkZXY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbGVkX3BkZXY7CiB9OwogCiAjZGVmaW5lIFJFR19BRERSICA1CkBAIC02NSw0NiArNjQsMTUgQEAKICAqIExFRHMKICAqLwogCi1zdGF0aWMgaW50IGxlZF9kZXZpY2VfYWRkKHN0cnVjdCBkZXZpY2UgKnBhc2ljM19kZXYsCi0JCQkJY29uc3Qgc3RydWN0IHBhc2ljM19sZWRzX21hY2hpbmZvICpwZGF0YSkKLXsKLQlzdHJ1Y3QgcGFzaWMzX2RhdGEgKmFzaWMgPSBwYXNpYzNfZGV2LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWludCByZXQ7Ci0KLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwYXNpYzMtbGVkIiwgLTEpOwotCWlmICghcGRldikgewotCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgTEVEIHBsYXRmb3JtIGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgTEVEIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlnb3RvIGV4aXRfcGRldl9wdXQ7Ci0JfQotCi0JcGRldi0+ZGV2LnBhcmVudCA9IHBhc2ljM19kZXY7Ci0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWRkIExFRCBwbGF0Zm9ybSBkZXZpY2VcbiIpOwotCQlnb3RvIGV4aXRfcGRldl9wdXQ7Ci0JfQotCi0JYXNpYy0+bGVkX3BkZXYgPSBwZGV2OwotCXJldHVybiAwOwotCi1leGl0X3BkZXZfcHV0OgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci0JcmV0dXJuIHJldDsKLX0KK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgbGVkX2NlbGwgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJsZWRzLXBhc2ljMyIsCit9OwogCiAvKgogICogRFMxV00KICAqLwogCi1zdGF0aWMgdm9pZCBkczF3bV9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZHMxd21fZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcGRldi0+ZGV2LnBhcmVudDsKIAlpbnQgYzsKQEAgLTExMyw5ICs4MSwxMCBAQAogCXBhc2ljM193cml0ZV9yZWdpc3RlcihkZXYsIDB4MjgsIGMgJiAweDdmKTsKIAogCWRldl9kYmcoZGV2LCAiRFMxV00gT1dNX0VOIGxvdyAoYWN0aXZlKSAlMDJ4XG4iLCBjICYgMHg3Zik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRzMXdtX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZHMxd21fZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CiAJaW50IGM7CkBAIC0xMjQsNTYgKzkzLDMzIEBACiAJcGFzaWMzX3dyaXRlX3JlZ2lzdGVyKGRldiwgMHgyOCwgYyB8IDB4ODApOwogCiAJZGV2X2RiZyhkZXYsICJEUzFXTSBPV01fRU4gaGlnaCAoaW5hY3RpdmUpICUwMnhcbiIsIGMgfCAweDgwKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkczF3bV9wbGF0Zm9ybV9kYXRhIGRzMXdtX3BkYXRhID0gewotCS5idXNfc2hpZnQgPSAyLAotCS5lbmFibGUgICAgPSBkczF3bV9lbmFibGUsCi0JLmRpc2FibGUgICA9IGRzMXdtX2Rpc2FibGUsCitzdGF0aWMgc3RydWN0IGRzMXdtX2RyaXZlcl9kYXRhIGRzMXdtX3BkYXRhID0geworCS5hY3RpdmVfaGlnaCA9IDAsCiB9OwogCi1zdGF0aWMgaW50IGRzMXdtX2RldmljZV9hZGQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFzaWMzX3BkZXYsIGludCBidXNfc2hpZnQpCi17Ci0Jc3RydWN0IGRldmljZSAqcGFzaWMzX2RldiA9ICZwYXNpYzNfcGRldi0+ZGV2OwotCXN0cnVjdCBwYXNpYzNfZGF0YSAqYXNpYyA9IHBhc2ljM19kZXYtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JaW50IHJldDsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZHMxd21fcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAwLAorCQkuZW5kICAgID0gMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OwogCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiZHMxd20iLCAtMSk7Ci0JaWYgKCFwZGV2KSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBEUzFXTSBwbGF0Zm9ybSBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCBwYXNpYzNfcGRldi0+cmVzb3VyY2UsCi0JCQkJCQlwYXNpYzNfcGRldi0+bnVtX3Jlc291cmNlcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2RiZyhwYXNpYzNfZGV2LCAiZmFpbGVkIHRvIGFkZCBEUzFXTSByZXNvdXJjZXNcbiIpOwotCQlnb3RvIGV4aXRfcGRldl9wdXQ7Ci0JfQotCi0JZHMxd21fcGRhdGEuYnVzX3NoaWZ0ID0gYXNpYy0+YnVzX3NoaWZ0OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCAmZHMxd21fcGRhdGEsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHMxd21fcGxhdGZvcm1fZGF0YSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgRFMxV00gcGxhdGZvcm0gZGF0YVxuIik7Ci0JCWdvdG8gZXhpdF9wZGV2X3B1dDsKLQl9Ci0KLQlwZGV2LT5kZXYucGFyZW50ID0gcGFzaWMzX2RldjsKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgRFMxV00gcGxhdGZvcm0gZGV2aWNlXG4iKTsKLQkJZ290byBleGl0X3BkZXZfcHV0OwotCX0KLQotCWFzaWMtPmRzMXdtX3BkZXYgPSBwZGV2OwotCXJldHVybiAwOwotCi1leGl0X3BkZXZfcHV0OgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci0JcmV0dXJuIHJldDsKLX0KK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgZHMxd21fY2VsbCBfX2luaXRkYXRhID0geworCS5uYW1lICAgICAgICAgID0gImRzMXdtIiwKKwkuZW5hYmxlICAgICAgICA9IGRzMXdtX2VuYWJsZSwKKwkuZGlzYWJsZSAgICAgICA9IGRzMXdtX2Rpc2FibGUsCisJLmRyaXZlcl9kYXRhICAgPSAmZHMxd21fcGRhdGEsCisJLm51bV9yZXNvdXJjZXMgPSAyLAorCS5yZXNvdXJjZXMgICAgID0gZHMxd21fcmVzb3VyY2VzLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgcGFzaWMzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0xODIsMTIgKzEyOCwyNyBAQAogCXN0cnVjdCBwYXNpYzNfZGF0YSAqYXNpYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IHJldDsKKwlpbnQgaXJxID0gMDsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyKSB7CisJCWRzMXdtX3Jlc291cmNlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgKHItPmZsYWdzICYKKwkJCShJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UpKTsKKwkJaXJxID0gci0+c3RhcnQ7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHIpIHsKKwkJZHMxd21fcmVzb3VyY2VzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCAoci0+ZmxhZ3MgJgorCQkJKElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSkpOworCQlpcnEgPSByLT5zdGFydDsKKwl9CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5YSU87CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCAicGFzaWMzIikpCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksICJwYXNpYzMiKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWFzaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFzaWMzX2RhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTE5NiwyNCArMTU3LDMzIEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhc2ljKTsKIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+YnVzX3NoaWZ0KQotCQlhc2ljLT5idXNfc2hpZnQgPSBwZGF0YS0+YnVzX3NoaWZ0OwotCWVsc2UKLQkJYXNpYy0+YnVzX3NoaWZ0ID0gMjsKLQotCWFzaWMtPm1hcHBpbmcgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCWFzaWMtPm1hcHBpbmcgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoIWFzaWMtPm1hcHBpbmcpIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZG4ndCBpb3JlbWFwIFBBU0lDM1xuIik7CiAJCWtmcmVlKGFzaWMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyZXQgPSBkczF3bV9kZXZpY2VfYWRkKHBkZXYsIGFzaWMtPmJ1c19zaGlmdCk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl93YXJuKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEUzFXTVxuIik7CisJLyogY2FsY3VsYXRlIGJ1cyBzaGlmdCBmcm9tIG1lbSByZXNvdXJjZSAqLworCWFzaWMtPmJ1c19zaGlmdCA9IChyZXNvdXJjZV9zaXplKHIpIC0gNSkgPj4gMzsKIAotCWlmIChwZGF0YS0+bGVkX3BkYXRhKSB7Ci0JCXJldCA9IGxlZF9kZXZpY2VfYWRkKGRldiwgcGRhdGEtPmxlZF9wZGF0YSk7CisJaWYgKHBkYXRhICYmIHBkYXRhLT5jbG9ja19yYXRlKSB7CisJCWRzMXdtX3BkYXRhLmNsb2NrX3JhdGUgPSBwZGF0YS0+Y2xvY2tfcmF0ZTsKKwkJLyogdGhlIGZpcnN0IDUgUEFTSUMzIHJlZ2lzdGVycyBjb250cm9sIHRoZSBEUzFXTSAqLworCQlkczF3bV9yZXNvdXJjZXNbMF0uZW5kID0gKDUgPDwgYXNpYy0+YnVzX3NoaWZ0KSAtIDE7CisJCWRzMXdtX2NlbGwucGxhdGZvcm1fZGF0YSA9ICZkczF3bV9jZWxsOworCQlkczF3bV9jZWxsLmRhdGFfc2l6ZSA9IHNpemVvZihkczF3bV9jZWxsKTsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZwZGV2LT5kZXYsIHBkZXYtPmlkLAorCQkJCSZkczF3bV9jZWxsLCAxLCByLCBpcnEpOworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEUzFXTVxuIik7CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT5sZWRfcGRhdGEpIHsKKwkJbGVkX2NlbGwuZHJpdmVyX2RhdGEgPSBwZGF0YS0+bGVkX3BkYXRhOworCQlsZWRfY2VsbC5wbGF0Zm9ybV9kYXRhID0gJmxlZF9jZWxsOworCQlsZWRfY2VsbC5kYXRhX3NpemUgPSBzaXplb2YoZHMxd21fY2VsbCk7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmcGRldi0+ZGV2LCBwZGV2LT5pZCwgJmxlZF9jZWxsLCAxLCByLCAwKTsKIAkJaWYgKHJldCA8IDApCiAJCQlkZXZfd2FybihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIGRldmljZVxuIik7CiAJfQpAQCAtMjI2LDE0ICsxOTYsMTEgQEAKIAlzdHJ1Y3QgcGFzaWMzX2RhdGEgKmFzaWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKLQlpZiAoYXNpYy0+bGVkX3BkZXYpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFzaWMtPmxlZF9wZGV2KTsKLQlpZiAoYXNpYy0+ZHMxd21fcGRldikKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXNpYy0+ZHMxd21fcGRldik7CisJbWZkX3JlbW92ZV9kZXZpY2VzKCZwZGV2LT5kZXYpOwogCiAJaW91bm1hcChhc2ljLT5tYXBwaW5nKTsKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlrZnJlZShhc2ljKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYwppbmRleCAyZTM2MDU3NjUuLjc3OTM5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90N2w2NnhiLmMgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKaW5kZXggOWY3MDI0YzAuLmU5ZjQzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYworKysgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0N2w2NnhiX21tY19yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdDdsNjZ4Yl9tbWNfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgPSAweDgwMCwKIAkJLmVuZAk9IDB4OWZmLApAQCAtMTI2LDcgKzEyNiw3IEBACiAJfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdDdsNjZ4Yl9uYW5kX3Jlc291cmNlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0N2w2NnhiX25hbmRfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSAweGMwMCwKIAkJLmVuZAk9IDB4YzA3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggZjg1NmU5NC4uNzdhMTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAl9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gMHgzMDAwLAogCQkuZW5kCT0gMHgzMWZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMKaW5kZXggYjEwODc2MC4uYWNhMjY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAlsb25nIGlycSA9IChsb25nKWRhdGE7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdGF0aWMgdW5zaWduZWQgaTJjX2Vycm9yczsKLQljb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4X2kyY19lcnJvcnMgPSAxMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF9pMmNfZXJyb3JzID0gMTAwOwogCiAJaWYgKCFkZXNjKSB7CiAJCXByX2VycigidHdsNDAzMDogSW52YWxpZCBJUlE6ICVsZFxuIiwgaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCmluZGV4IGI0NTdhMDUuLmMyYmUzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwpAQCAtMTExMSw3ICsxMTExLDcgQEAKIAlkbyB7CiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIAkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEpOwotCX0gd2hpbGUgKC0tdHJpZXMgJiYgKHJlZyAmIFdNODM1MF9BVVhBRENfUE9MTCkpOworCX0gd2hpbGUgKChyZWcgJiBXTTgzNTBfQVVYQURDX1BPTEwpICYmIC0tdHJpZXMpOwogCiAJaWYgKCF0cmllcykKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgImFkYyBjaG4gJWQgcmVhZCB0aW1lb3V0XG4iLCBjaGFubmVsKTsKQEAgLTEyMzgsNyArMTIzOCw3IEBACiAJfQogCiAJd204MzUwLT5yZWdfY2FjaGUgPQotCSAgICBremFsbG9jKHNpemVvZih1MTYpICogKFdNODM1MF9NQVhfUkVHSVNURVIgKyAxKSwgR0ZQX0tFUk5FTCk7CisJCWttYWxsb2Moc2l6ZW9mKHUxNikgKiAoV004MzUwX01BWF9SRUdJU1RFUiArIDEpLCBHRlBfS0VSTkVMKTsKIAlpZiAod204MzUwLT5yZWdfY2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyNDYsMTcgKzEyNDYsMjAgQEAKIAkgKiBhIFBNSUMgc28gdGhlIGRldmljZSBtYW55IG5vdCBiZSBpbiBhIHZpcmdpbiBzdGF0ZSBhbmQgd2UKIAkgKiBjYW4ndCByZWx5IG9uIHRoZSBzaWxpY29uIHZhbHVlcy4KIAkgKi8KKwlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgMCwKKwkJCSAgICAgICBzaXplb2YodTE2KSAqIChXTTgzNTBfTUFYX1JFR0lTVEVSICsgMSksCisJCQkgICAgICAgd204MzUwLT5yZWdfY2FjaGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsCisJCQkiZmFpbGVkIHRvIHJlYWQgaW5pdGlhbCBjYWNoZSB2YWx1ZXNcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNYXNrIG91dCB1bmNhY2hlYWJsZS91bnJlYWRhYmxlIGJpdHMgYW5kIHRoZSBhdWRpby4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgV004MzUwX01BWF9SRUdJU1RFUjsgaSsrKSB7Ci0JCS8qIGF1ZGlvIHJlZ2lzdGVyIHJhbmdlICovCiAJCWlmICh3bTgzNTBfcmVnX2lvX21hcFtpXS5yZWFkYWJsZSAmJgogCQkgICAgKGkgPCBXTTgzNTBfQ0xPQ0tfQ09OVFJPTF8xIHx8IGkgPiBXTTgzNTBfQUlGX1RFU1QpKSB7Ci0JCQlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgaSwgMiwgKGNoYXIgKikmdmFsdWUpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlkZXZfZXJyKHdtODM1MC0+ZGV2LAotCQkJCSAgICAgICAiZmFpbGVkIHRvIHJlYWQgaW5pdGlhbCBjYWNoZSB2YWx1ZVxuIik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQl2YWx1ZSA9IGJlMTZfdG9fY3B1KHZhbHVlKTsKKwkJCXZhbHVlID0gYmUxNl90b19jcHUod204MzUwLT5yZWdfY2FjaGVbaV0pOwogCQkJdmFsdWUgJj0gd204MzUwX3JlZ19pb19tYXBbaV0ucmVhZGFibGU7CiAJCQl2YWx1ZSAmPSB+d204MzUwX3JlZ19pb19tYXBbaV0udm9sOwogCQkJd204MzUwLT5yZWdfY2FjaGVbaV0gPSB2YWx1ZTsKQEAgLTE0MzUsNyArMTQzOCwyMSBAQAogCW11dGV4X2luaXQoJndtODM1MC0+aXJxX211dGV4KTsKIAlJTklUX1dPUksoJndtODM1MC0+aXJxX3dvcmssIHdtODM1MF9pcnFfd29ya2VyKTsKIAlpZiAoaXJxKSB7Ci0JCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgd204MzUwX2lycSwgMCwKKwkJaW50IGZsYWdzID0gMDsKKworCQlpZiAocGRhdGEgJiYgcGRhdGEtPmlycV9oaWdoKSB7CisJCQlmbGFncyB8PSBJUlFGX1RSSUdHRVJfSElHSDsKKworCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCisJCQkJCVdNODM1MF9JUlFfUE9MKTsKKwkJfSBlbHNlIHsKKwkJCWZsYWdzIHw9IElSUUZfVFJJR0dFUl9MT1c7CisKKwkJCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCisJCQkJCSAgV004MzUwX0lSUV9QT0wpOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3bTgzNTBfaXJxLCBmbGFncywKIAkJCQkgICJ3bTgzNTAiLCB3bTgzNTApOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIod204MzUwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDUxM2ViMDkuLmZlODA0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTQxLDYgKzQxLDggQEAKIAogI2luY2x1ZGUgInF1ZXVlLmgiCiAKK01PRFVMRV9BTElBUygibW1jOmJsb2NrIik7CisKIC8qCiAgKiBtYXggOCBwYXJ0aXRpb25zIHBlciBjYXJkCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCmluZGV4IGYyMTBhOGUuLmJkYjE2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwpAQCAtODQsNiArODQsMTQgQEAKIAl9CiAKIAlyZXR2YWwgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJNTUNfTkFNRT0lcyIsIG1tY19jYXJkX25hbWUoY2FyZCkpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkvKgorCSAqIFJlcXVlc3QgdGhlIG1tY19ibG9jayBkZXZpY2UuICBOb3RlOiB0aGF0IHRoaXMgaXMgYSBkaXJlY3QgcmVxdWVzdAorCSAqIGZvciB0aGUgbW9kdWxlIGl0IGNhcnJpZXMgbm8gaW5mb3JtYXRpb24gYXMgdG8gd2hhdCBpcyBpbnNlcnRlZC4KKwkgKi8KKwlyZXR2YWwgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1tbWM6YmxvY2siKTsKIAogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCmluZGV4IDE0NDVlYTguLmZhMDczYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCkBAIC0yOTgsNiArMjk4LDIxIEBACiAJCQlkYXRhLT50aW1lb3V0X2Nsa3MgPSAwOwogCQl9CiAJfQorCS8qCisJICogU29tZSBjYXJkcyBuZWVkIHZlcnkgaGlnaCB0aW1lb3V0cyBpZiBkcml2ZW4gaW4gU1BJIG1vZGUuCisJICogVGhlIHdvcnN0IG9ic2VydmVkIHRpbWVvdXQgd2FzIDkwMG1zIGFmdGVyIHdyaXRpbmcgYQorCSAqIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGRhdGEgdW50aWwgdGhlIGludGVybmFsIGxvZ2ljCisJICogb3ZlcmZsb3dlZC4KKwkgKi8KKwlpZiAobW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpKSB7CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CisJCQlpZiAoZGF0YS0+dGltZW91dF9ucyA8IDEwMDAwMDAwMDApCisJCQkJZGF0YS0+dGltZW91dF9ucyA9IDEwMDAwMDAwMDA7CS8qIDFzICovCisJCX0gZWxzZSB7CisJCQlpZiAoZGF0YS0+dGltZW91dF9ucyA8IDEwMDAwMDAwMCkKKwkJCQlkYXRhLT50aW1lb3V0X25zID0gIDEwMDAwMDAwMDsJLyogMTAwbXMgKi8KKwkJfQorCX0KIH0KIEVYUE9SVF9TWU1CT0wobW1jX3NldF9kYXRhX3RpbWVvdXQpOwogCkBAIC05MTUsNiArOTMwLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAjZW5kaWYKIAorCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRldGVjdCk7CiAJbW1jX2ZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAltbWNfYnVzX2dldChob3N0KTsKQEAgLTk0Miw2ICs5NTgsNyBAQAogICovCiBpbnQgbW1jX3N1c3BlbmRfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZob3N0LT5kZXRlY3QpOwogCW1tY19mbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJbW1jX2J1c19nZXQoaG9zdCk7CkBAIC05NzUsNiArOTkyLDcgQEAKIAltbWNfYnVzX2dldChob3N0KTsKIAlpZiAoaG9zdC0+YnVzX29wcyAmJiAhaG9zdC0+YnVzX2RlYWQpIHsKIAkJbW1jX3Bvd2VyX3VwKGhvc3QpOworCQltbWNfc2VsZWN0X3ZvbHRhZ2UoaG9zdCwgaG9zdC0+b2NyKTsKIAkJQlVHX09OKCFob3N0LT5idXNfb3BzLT5yZXN1bWUpOwogCQlob3N0LT5idXNfb3BzLT5yZXN1bWUoaG9zdCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwppbmRleCAxMjM3YmI0Li42MTBkYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwpAQCAtMTg0LDYgKzE4NCw2OCBAQAogREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUobW1jX2RiZ19jYXJkX3N0YXR1c19mb3BzLCBtbWNfZGJnX2NhcmRfc3RhdHVzX2dldCwKIAkJTlVMTCwgIiUwOGxseFxuIik7CiAKKyNkZWZpbmUgRVhUX0NTRF9TVFJfTEVOIDEwMjUKKworc3RhdGljIGludCBtbWNfZXh0X2NzZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGlub2RlLT5pX3ByaXZhdGU7CisJY2hhciAqYnVmOworCXNzaXplX3QgbiA9IDA7CisJdTggKmV4dF9jc2Q7CisJaW50IGVyciwgaTsKKworCWJ1ZiA9IGttYWxsb2MoRVhUX0NTRF9TVFJfTEVOICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZXh0X2NzZCA9IGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV4dF9jc2QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwltbWNfY2xhaW1faG9zdChjYXJkLT5ob3N0KTsKKwllcnIgPSBtbWNfc2VuZF9leHRfY3NkKGNhcmQsIGV4dF9jc2QpOworCW1tY19yZWxlYXNlX2hvc3QoY2FyZC0+aG9zdCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZnJlZTsKKworCWZvciAoaSA9IDUxMTsgaSA+PSAwOyBpLS0pCisJCW4gKz0gc3ByaW50ZihidWYgKyBuLCAiJTAyeCIsIGV4dF9jc2RbaV0pOworCW4gKz0gc3ByaW50ZihidWYgKyBuLCAiXG4iKTsKKwlCVUdfT04obiAhPSBFWFRfQ1NEX1NUUl9MRU4pOworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gYnVmOworCWtmcmVlKGV4dF9jc2QpOworCXJldHVybiAwOworCitvdXRfZnJlZToKKwlrZnJlZShidWYpOworCWtmcmVlKGV4dF9jc2QpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1tY19leHRfY3NkX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICpidWYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLAorCQkJCSAgICAgICBidWYsIEVYVF9DU0RfU1RSX0xFTik7Cit9CisKK3N0YXRpYyBpbnQgbW1jX2V4dF9jc2RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtbWNfZGJnX2V4dF9jc2RfZm9wcyA9IHsKKwkub3BlbgkJPSBtbWNfZXh0X2NzZF9vcGVuLAorCS5yZWFkCQk9IG1tY19leHRfY3NkX3JlYWQsCisJLnJlbGVhc2UJPSBtbWNfZXh0X2NzZF9yZWxlYXNlLAorfTsKKwogdm9pZCBtbWNfYWRkX2NhcmRfZGVidWdmcyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IG1tY19ob3N0CSpob3N0ID0gY2FyZC0+aG9zdDsKQEAgLTIxMSw2ICsyNzMsMTEgQEAKIAkJCQkJJm1tY19kYmdfY2FyZF9zdGF0dXNfZm9wcykpCiAJCQlnb3RvIGVycjsKIAorCWlmIChtbWNfY2FyZF9tbWMoY2FyZCkpCisJCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiZXh0X2NzZCIsIFNfSVJVU1IsIHJvb3QsIGNhcmQsCisJCQkJCSZtbWNfZGJnX2V4dF9jc2RfZm9wcykpCisJCQlnb3RvIGVycjsKKwogCXJldHVybjsKIAogZXJyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCmluZGV4IDk1NmJkNzYuLjk2M2YyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKQEAgLTIyMywxMCArMjIzLDE4IEBACiAJCWlmICh0cGxfY29kZSA9PSAweGZmKQogCQkJYnJlYWs7CiAKKwkJLyogbnVsbCBlbnRyaWVzIGhhdmUgbm8gbGluayBmaWVsZCBvciBkYXRhICovCisJCWlmICh0cGxfY29kZSA9PSAweDAwKQorCQkJY29udGludWU7CisKIAkJcmV0ID0gbW1jX2lvX3J3X2RpcmVjdChjYXJkLCAwLCAwLCBwdHIrKywgMCwgJnRwbF9saW5rKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCisJCS8qIGEgc2l6ZSBvZiAweGZmIGFsc28gbWVhbnMgd2UncmUgZG9uZSAqLworCQlpZiAodHBsX2xpbmsgPT0gMHhmZikKKwkJCWJyZWFrOworCiAJCXRoaXMgPSBrbWFsbG9jKHNpemVvZigqdGhpcykgKyB0cGxfbGluaywgR0ZQX0tFUk5FTCk7CiAJCWlmICghdGhpcykKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jCmluZGV4IGM4ZmEwOTUuLjRlYjc4MjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jCkBAIC03Niw2ICs3NiwxMCBAQAogCUJVR19PTighY2FyZCk7CiAJQlVHX09OKGZuID4gNyk7CiAKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoYWRkciAmIH4weDFGRkZGKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CiAKIAljbWQub3Bjb2RlID0gU0RfSU9fUldfRElSRUNUOwpAQCAtMTI1LDYgKzEyOSwxMCBAQAogCVdBUk5fT04oYmxvY2tzID09IDApOwogCVdBUk5fT04oYmxrc3ogPT0gMCk7CiAKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoYWRkciAmIH4weDFGRkZGKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldCgmbXJxLCAwLCBzaXplb2Yoc3RydWN0IG1tY19yZXF1ZXN0KSk7CiAJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsKIAltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2RhdGEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCA2ZmJiMjQ2Li5iNGNmNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0zNyw2ICszNywxMyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX1NESENJX0lPX0FDQ0VTU09SUworCWJvb2wKKwlkZXBlbmRzIG9uIE1NQ19TREhDSQorCWhlbHAKKwkgIFRoaXMgaXMgc2lsZW50IEtjb25maWcgc3ltYm9sIHRoYXQgaXMgc2VsZWN0ZWQgYnkgdGhlIGRyaXZlcnMgdGhhdAorCSAgbmVlZCB0byBvdmVyd3JpdGUgU0RIQ0kgSU8gbWVtb3J5IGFjY2Vzc29ycy4KKwogY29uZmlnIE1NQ19TREhDSV9QQ0kKIAl0cmlzdGF0ZSAiU0RIQ0kgc3VwcG9ydCBvbiBQQ0kgYnVzIgogCWRlcGVuZHMgb24gTU1DX1NESENJICYmIFBDSQpAQCAtNjUsNiArNzIsMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIE1NQ19TREhDSV9PRgorCXRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9uIE9wZW5GaXJtd2FyZSBwbGF0Zm9ybXMiCisJZGVwZW5kcyBvbiBNTUNfU0RIQ0kgJiYgUFBDX09GCisJc2VsZWN0IE1NQ19TREhDSV9JT19BQ0NFU1NPUlMKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIE9GIHN1cHBvcnQgZm9yIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlcgorCSAgSW50ZXJmYWNlcy4gU28gZmFyLCBvbmx5IHRoZSBGcmVlc2NhbGUgZVNESEMgY29udHJvbGxlciBpcyBrbm93bgorCSAgdG8gZXhpc3Qgb24gT0YgcGxhdGZvcm1zLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX09NQVAKIAl0cmlzdGF0ZSAiVEkgT01BUCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKQEAgLTE3MSw2ICsxODksMTcgQEAKICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aWZtX3NkLgogCitjb25maWcgTU1DX01WU0RJTworCXRyaXN0YXRlICJNYXJ2ZWxsIE1NQy9TRC9TRElPIGhvc3QgZHJpdmVyIgorCWRlcGVuZHMgb24gUExBVF9PUklPTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgc2VsZWN0cyB0aGUgTWFydmVsbCBTRElPIGhvc3QgZHJpdmVyLgorCSAgU0RJTyBtYXkgY3VycmVudGx5IGJlIGZvdW5kIG9uIHRoZSBLaXJrd29vZCA4OEY2MjgxIGFuZCA4OEY2MTkyCisJICBTb0MgY29udHJvbGxlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby4KKwogY29uZmlnIE1NQ19TUEkKIAl0cmlzdGF0ZSAiTU1DL1NEL1NESU8gb3ZlciBTUEkiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmICFISUdITUVNICYmIEhBU19ETUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IGRlZGVjNTUuLjk3MGE5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQAogb2JqLSQoQ09ORklHX01NQ19TREhDSSkJCSs9IHNkaGNpLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUENJKQkrPSBzZGhjaS1wY2kubwogb2JqLSQoQ09ORklHX01NQ19SSUNPSF9NTUMpCSs9IHJpY29oX21tYy5vCitvYmotJChDT05GSUdfTU1DX1NESENJX09GKQkrPSBzZGhjaS1vZi5vCiBvYmotJChDT05GSUdfTU1DX1dCU0QpCQkrPSB3YnNkLm8KIG9iai0kKENPTkZJR19NTUNfQVUxWCkJCSs9IGF1MXhtbWMubwogb2JqLSQoQ09ORklHX01NQ19PTUFQKQkJKz0gb21hcC5vCkBAIC0yMCw2ICsyMSw3IEBACiBvYmotJChDT05GSUdfTU1DX0FUOTEpCQkrPSBhdDkxX21jaS5vCiBvYmotJChDT05GSUdfTU1DX0FUTUVMTUNJKQkrPSBhdG1lbC1tY2kubwogb2JqLSQoQ09ORklHX01NQ19USUZNX1NEKQkrPSB0aWZtX3NkLm8KK29iai0kKENPTkZJR19NTUNfTVZTRElPKQkrPSBtdnNkaW8ubwogb2JqLSQoQ09ORklHX01NQ19TUEkpCQkrPSBtbWNfc3BpLm8KIGlmZXEgKCQoQ09ORklHX09GKSx5KQogb2JqLSQoQ09ORklHX01NQ19TUEkpCQkrPSBvZl9tbWNfc3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IGU5NGU5MjAuLmNmNmExMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAJCXNsb3QtPnNkY19yZWcgfD0gTUNJX1NEQ0JVU18xQklUOwogCQlicmVhazsKIAljYXNlIE1NQ19CVVNfV0lEVEhfNDoKLQkJc2xvdC0+c2RjX3JlZyA9IE1DSV9TRENCVVNfNEJJVDsKKwkJc2xvdC0+c2RjX3JlZyB8PSBNQ0lfU0RDQlVTXzRCSVQ7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwppbmRleCA4N2UyMTFkLi43MmY4YmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwpAQCAtMjc5LDggKzI3OSwxMSBAQAogCQkgKiBzbyBpdCBjYW4gYWx3YXlzIERNQSBkaXJlY3RseSBpbnRvIHRoZSB0YXJnZXQgYnVmZmVyLgogCQkgKiBJdCdkIHByb2JhYmx5IGJlIGJldHRlciB0byBtZW1jcHkoKSB0aGUgZmlyc3QgY2h1bmsgYW5kCiAJCSAqIGF2b2lkIGV4dHJhIGkvbyBjYWxscy4uLgorCQkgKgorCQkgKiBOb3RlIHdlIGNoZWNrIGZvciBtb3JlIHRoYW4gOCBieXRlcywgYmVjYXVzZSBpbiBwcmFjdGljZSwKKwkJICogc29tZSBTRCBjYXJkcyBhcmUgc2xvdy4uLgogCQkgKi8KLQkJZm9yIChpID0gMjsgaSA8IDk7IGkrKykgeworCQlmb3IgKGkgPSAyOyBpIDwgMTY7IGkrKykgewogCQkJdmFsdWUgPSBtbWNfc3BpX3JlYWRieXRlcyhob3N0LCAxKTsKIAkJCWlmICh2YWx1ZSA8IDApCiAJCQkJZ290byBkb25lOwpAQCAtNjA5LDYgKzYxMiw3IEBACiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaSA9IGhvc3QtPnNwaTsKIAlpbnQJCQlzdGF0dXMsIGk7CiAJc3RydWN0IHNjcmF0Y2gJCSpzY3JhdGNoID0gaG9zdC0+ZGF0YTsKKwl1MzIJCQlwYXR0ZXJuOwogCiAJaWYgKGhvc3QtPm1tYy0+dXNlX3NwaV9jcmMpCiAJCXNjcmF0Y2gtPmNyY192YWwgPSBjcHVfdG9fYmUxNigKQEAgLTYzNiw4ICs2NDAsMjcgQEAKIAkgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IHRlbGwgd2hldGhlciB0aGUgd3JpdGUgb3BlcmF0aW9uIHN1Y2NlZWRlZDsKIAkgKiBpdCBqdXN0IHNheXMgaWYgdGhlIHRyYW5zbWlzc2lvbiB3YXMgb2sgYW5kIHdoZXRoZXIgKmVhcmxpZXIqCiAJICogd3JpdGVzIHN1Y2NlZWRlZDsgc2VlIHRoZSBzdGFuZGFyZC4KKwkgKgorCSAqIEluIHByYWN0aWNlLCB0aGVyZSBhcmUgKGV2ZW4gbW9kZXJuIFNESEMtKWNhcmRzIHdoaWNoIGFyZSBsYXRlCisJICogaW4gc2VuZGluZyB0aGUgcmVzcG9uc2UsIGFuZCBtaXNzIHRoZSB0aW1lIGZyYW1lIGJ5IGEgZmV3IGJpdHMsCisJICogc28gd2UgaGF2ZSB0byBjb3BlIHdpdGggdGhpcyBzaXR1YXRpb24gYW5kIGNoZWNrIHRoZSByZXNwb25zZQorCSAqIGJpdC1ieS1iaXQuIEFyZ2doISEhCiAJICovCi0Jc3dpdGNoIChTUElfTU1DX1JFU1BPTlNFX0NPREUoc2NyYXRjaC0+c3RhdHVzWzBdKSkgeworCXBhdHRlcm4gID0gc2NyYXRjaC0+c3RhdHVzWzBdIDw8IDI0OworCXBhdHRlcm4gfD0gc2NyYXRjaC0+c3RhdHVzWzFdIDw8IDE2OworCXBhdHRlcm4gfD0gc2NyYXRjaC0+c3RhdHVzWzJdIDw8IDg7CisJcGF0dGVybiB8PSBzY3JhdGNoLT5zdGF0dXNbM107CisKKwkvKiBGaXJzdCAzIGJpdCBvZiBwYXR0ZXJuIGFyZSB1bmRlZmluZWQgKi8KKwlwYXR0ZXJuIHw9IDB4RTAwMDAwMDA7CisKKwkvKiBsZWZ0LWFkanVzdCB0byBsZWFkaW5nIDAgYml0ICovCisJd2hpbGUgKHBhdHRlcm4gJiAweDgwMDAwMDAwKQorCQlwYXR0ZXJuIDw8PSAxOworCS8qIHJpZ2h0LWFkanVzdCBmb3IgcGF0dGVybiBtYXRjaGluZy4gQ29kZSBpcyBpbiBiaXQgNC4uMCBub3cuICovCisJcGF0dGVybiA+Pj0gMjc7CisKKwlzd2l0Y2ggKHBhdHRlcm4pIHsKIAljYXNlIFNQSV9SRVNQT05TRV9BQ0NFUFRFRDoKIAkJc3RhdHVzID0gMDsKIAkJYnJlYWs7CkBAIC02NjgsOCArNjkxLDkgQEAKIAkvKiBSZXR1cm4gd2hlbiBub3QgYnVzeS4gIElmIHdlIGRpZG4ndCBjb2xsZWN0IHRoYXQgc3RhdHVzIHlldCwKIAkgKiB3ZSdsbCBuZWVkIHNvbWUgbW9yZSBJL08uCiAJICovCi0JZm9yIChpID0gMTsgaSA8IHNpemVvZihzY3JhdGNoLT5zdGF0dXMpOyBpKyspIHsKLQkJaWYgKHNjcmF0Y2gtPnN0YXR1c1tpXSAhPSAwKQorCWZvciAoaSA9IDQ7IGkgPCBzaXplb2Yoc2NyYXRjaC0+c3RhdHVzKTsgaSsrKSB7CisJCS8qIGNhcmQgaXMgbm9uLWJ1c3kgaWYgdGhlIG1vc3QgcmVjZW50IGJpdCBpcyAxICovCisJCWlmIChzY3JhdGNoLT5zdGF0dXNbaV0gJiAweDAxKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiBtbWNfc3BpX3dhaXRfdW5idXN5KGhvc3QsIHRpbWVvdXQpOwpAQCAtMTIwNCwxMCArMTIyOCwxMiBAQAogCiAJLyogTU1DIGFuZCBTRCBzcGVjcyBvbmx5IHNlZW0gdG8gY2FyZSB0aGF0IHNhbXBsaW5nIGlzIG9uIHRoZQogCSAqIHJpc2luZyBlZGdlIC4uLiBtZWFuaW5nIFNQSSBtb2RlcyAwIG9yIDMuICBTbyBlaXRoZXIgU1BJIG1vZGUKLQkgKiBzaG91bGQgYmUgbGVnaXQuICBXZSdsbCB1c2UgbW9kZSAwIHNpbmNlIGl0IHNlZW1zIHRvIGJlIGEKLQkgKiBiaXQgbGVzcyB0cm91Ymxlc29tZSBvbiBzb21lIGhhcmR3YXJlIC4uLiB1bmNsZWFyIHdoeS4KKwkgKiBzaG91bGQgYmUgbGVnaXQuICBXZSdsbCB1c2UgbW9kZSAwIHNpbmNlIHRoZSBzdGVhZHkgc3RhdGUgaXMgMCwKKwkgKiB3aGljaCBpcyBhcHByb3ByaWF0ZSBmb3IgaG90cGx1Z2dpbmcsIHVubGVzcyB0aGUgcGxhdGZvcm0gZGF0YQorCSAqIHNwZWNpZnkgbW9kZSAzIChpZiBoYXJkd2FyZSBpcyBub3QgY29tcGF0aWJsZSB0byBtb2RlIDApLgogCSAqLwotCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJaWYgKHNwaS0+bW9kZSAhPSBTUElfTU9ERV8zKQorCQlzcGktPm1vZGUgPSBTUElfTU9ERV8wOwogCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CiAKIAlzdGF0dXMgPSBzcGlfc2V0dXAoc3BpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMgYi9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzM3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jCkBAIC0wLDAgKzEsODg1IEBACisvKgorICogTWFydmVsbCBNTUMvU0QvU0RJTyBkcml2ZXIKKyAqCisgKiBBdXRob3JzOiBNYWVuIFN1bGVpbWFuLCBOaWNvbGFzIFBpdHJlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNYXJ2ZWxsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KKworI2luY2x1ZGUgIm12c2Rpby5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FCSJtdnNkaW8iCisKK3N0YXRpYyBpbnQgbWF4ZnJlcSA9IE1WU0RfQ0xPQ0tSQVRFX01BWDsKK3N0YXRpYyBpbnQgbm9kbWE7CisKK3N0cnVjdCBtdnNkX2hvc3QgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IHhmZXJfbW9kZTsKKwl1bnNpZ25lZCBpbnQgaW50cl9lbjsKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl1bnNpZ25lZCBpbnQgcGlvX3NpemU7CisJdm9pZCAqcGlvX3B0cjsKKwl1bnNpZ25lZCBpbnQgc2dfZnJhZ3M7CisJdW5zaWduZWQgaW50IG5zX3Blcl9jbGs7CisJdW5zaWduZWQgaW50IGNsb2NrOworCXVuc2lnbmVkIGludCBiYXNlX2Nsb2NrOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCBncGlvX2NhcmRfZGV0ZWN0OworCWludCBncGlvX3dyaXRlX3Byb3RlY3Q7Cit9OworCisjZGVmaW5lIG12c2Rfd3JpdGUob2ZmcywgdmFsKQl3cml0ZWwodmFsLCBpb2Jhc2UgKyAob2ZmcykpCisjZGVmaW5lIG12c2RfcmVhZChvZmZzKQkJcmVhZGwoaW9iYXNlICsgKG9mZnMpKQorCitzdGF0aWMgaW50IG12c2Rfc2V0dXBfZGF0YShzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCXVuc2lnbmVkIGludCB0bW91dDsKKwlpbnQgdG1vdXRfaW5kZXg7CisKKwkvKiBJZiB0aW1lb3V0PTAgdGhlbiBtYXhpbXVtIHRpbWVvdXQgaW5kZXggaXMgdXNlZC4gKi8KKwl0bW91dCA9IERJVl9ST1VORF9VUChkYXRhLT50aW1lb3V0X25zLCBob3N0LT5uc19wZXJfY2xrKTsKKwl0bW91dCArPSBkYXRhLT50aW1lb3V0X2Nsa3M7CisJdG1vdXRfaW5kZXggPSBmbHModG1vdXQgLSAxKSAtIDEyOworCWlmICh0bW91dF9pbmRleCA8IDApCisJCXRtb3V0X2luZGV4ID0gMDsKKwlpZiAodG1vdXRfaW5kZXggPiBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9NQVgpCisJCXRtb3V0X2luZGV4ID0gTVZTRF9IT1NUX0NUUkxfVE1PVVRfTUFYOworCisJZGV2X2RiZyhob3N0LT5kZXYsICJkYXRhICVzIGF0IDB4JTA4eDogYmxvY2tzPSVkIGJsa3N6PSVkIHRtb3V0PSV1ICglZClcbiIsCisJCShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpID8gInJlYWQiIDogIndyaXRlIiwKKwkJKHUzMilzZ192aXJ0KGRhdGEtPnNnKSwgZGF0YS0+YmxvY2tzLCBkYXRhLT5ibGtzeiwKKwkJdG1vdXQsIHRtb3V0X2luZGV4KTsKKworCWhvc3QtPmN0cmwgJj0gfk1WU0RfSE9TVF9DVFJMX1RNT1VUX01BU0s7CisJaG9zdC0+Y3RybCB8PSBNVlNEX0hPU1RfQ1RSTF9UTU9VVCh0bW91dF9pbmRleCk7CisJbXZzZF93cml0ZShNVlNEX0hPU1RfQ1RSTCwgaG9zdC0+Y3RybCk7CisJbXZzZF93cml0ZShNVlNEX0JMS19DT1VOVCwgZGF0YS0+YmxvY2tzKTsKKwltdnNkX3dyaXRlKE1WU0RfQkxLX1NJWkUsIGRhdGEtPmJsa3N6KTsKKworCWlmIChub2RtYSB8fCAoZGF0YS0+Ymxrc3ogfCBkYXRhLT5zZy0+b2Zmc2V0KSAmIDMpIHsKKwkJLyoKKwkJICogV2UgY2Fubm90IGRvIERNQSBvbiBhIGJ1ZmZlciB3aGljaCBvZmZzZXQgb3Igc2l6ZQorCQkgKiBpcyBub3QgYWxpZ25lZCBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KKwkJICovCisJCWhvc3QtPnBpb19zaXplID0gZGF0YS0+YmxvY2tzICogZGF0YS0+Ymxrc3o7CisJCWhvc3QtPnBpb19wdHIgPSBzZ192aXJ0KGRhdGEtPnNnKTsKKwkJaWYgKCFub2RtYSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFsbGJhY2sgdG8gUElPIGZvciBkYXRhICIKKwkJCQkJICAiYXQgMHglcCBzaXplICVkXG4iLAorCQkJCQkgIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLAorCQkJCQkgIGhvc3QtPnBpb19wdHIsIGhvc3QtPnBpb19zaXplKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJCWludCBkbWFfZGlyID0gKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgPworCQkJRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTsKKwkJaG9zdC0+c2dfZnJhZ3MgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCisJCQkJCSAgICBkYXRhLT5zZ19sZW4sIGRtYV9kaXIpOworCQlwaHlzX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhkYXRhLT5zZyk7CisJCW12c2Rfd3JpdGUoTVZTRF9TWVNfQUREUl9MT1csICh1MzIpcGh5c19hZGRyICYgMHhmZmZmKTsKKwkJbXZzZF93cml0ZShNVlNEX1NZU19BRERSX0hJLCAgKHUzMilwaHlzX2FkZHIgPj4gMTYpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG12c2RfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gbXJxLT5jbWQ7CisJdTMyIGNtZHJlZyA9IDAsIHhmZXIgPSAwLCBpbnRyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKGhvc3QtPm1ycSAhPSBOVUxMKTsKKwlob3N0LT5tcnEgPSBtcnE7CisKKwlkZXZfZGJnKGhvc3QtPmRldiwgImNtZCAlZCAoaHcgc3RhdGUgMHglMDR4KVxuIiwKKwkJY21kLT5vcGNvZGUsIG12c2RfcmVhZChNVlNEX0hXX1NUQVRFKSk7CisKKwljbWRyZWcgPSBNVlNEX0NNRF9JTkRFWChjbWQtPm9wY29kZSk7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfQlVTWSkKKwkJY21kcmVnIHw9IE1WU0RfQ01EX1JTUF80OEJVU1k7CisJZWxzZSBpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KQorCQljbWRyZWcgfD0gTVZTRF9DTURfUlNQXzEzNjsKKwllbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKQorCQljbWRyZWcgfD0gTVZTRF9DTURfUlNQXzQ4OworCWVsc2UKKwkJY21kcmVnIHw9IE1WU0RfQ01EX1JTUF9OT05FOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykKKwkJY21kcmVnIHw9IE1WU0RfQ01EX0NIRUNLX0NNRENSQzsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9PUENPREUpCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9JTkRYX0NIRUNLOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJY21kcmVnIHw9IE1WU0RfVU5FWFBFQ1RFRF9SRVNQOworCQlpbnRyIHw9IE1WU0RfTk9SX1VORVhQX1JTUDsKKwl9CisKKwlpZiAobXJxLT5kYXRhKSB7CisJCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IG1ycS0+ZGF0YTsKKwkJaW50IHBpbzsKKworCQljbWRyZWcgfD0gTVZTRF9DTURfREFUQV9QUkVTRU5UIHwgTVZTRF9DTURfQ0hFQ0tfREFUQUNSQzE2OworCQl4ZmVyIHw9IE1WU0RfWEZFUl9NT0RFX0hXX1dSX0RBVEFfRU47CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCQl4ZmVyIHw9IE1WU0RfWEZFUl9NT0RFX1RPX0hPU1Q7CisKKwkJcGlvID0gbXZzZF9zZXR1cF9kYXRhKGhvc3QsIGRhdGEpOworCQlpZiAocGlvKSB7CisJCQl4ZmVyIHw9IE1WU0RfWEZFUl9NT0RFX1BJTzsKKwkJCS8qIFBJTyBzZWN0aW9uIG9mIG12c2RfaXJxIGhhcyBjb21tZW50cyBvbiB0aG9zZSBiaXRzICovCisJCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJCQlpbnRyIHw9IE1WU0RfTk9SX1RYX0FWQUlMOworCQkJZWxzZSBpZiAoaG9zdC0+cGlvX3NpemUgPiAzMikKKwkJCQlpbnRyIHw9IE1WU0RfTk9SX1JYX0ZJRk9fOFc7CisJCQllbHNlCisJCQkJaW50ciB8PSBNVlNEX05PUl9SWF9SRUFEWTsKKwkJfQorCisJCWlmIChkYXRhLT5zdG9wKSB7CisJCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgKnN0b3AgPSBkYXRhLT5zdG9wOworCQkJdTMyIGNtZDEycmVnID0gMDsKKworCQkJbXZzZF93cml0ZShNVlNEX0FVVE9DTUQxMl9BUkdfTE9XLCBzdG9wLT5hcmcgJiAweGZmZmYpOworCQkJbXZzZF93cml0ZShNVlNEX0FVVE9DTUQxMl9BUkdfSEksICBzdG9wLT5hcmcgPj4gMTYpOworCisJCQlpZiAoc3RvcC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpCisJCQkJY21kMTJyZWcgfD0gTVZTRF9BVVRPQ01EMTJfQlVTWTsKKwkJCWlmIChzdG9wLT5mbGFncyAmIE1NQ19SU1BfT1BDT0RFKQorCQkJCWNtZDEycmVnIHw9IE1WU0RfQVVUT0NNRDEyX0lORFhfQ0hFQ0s7CisJCQljbWQxMnJlZyB8PSBNVlNEX0FVVE9DTUQxMl9JTkRFWChzdG9wLT5vcGNvZGUpOworCQkJbXZzZF93cml0ZShNVlNEX0FVVE9DTUQxMl9DTUQsIGNtZDEycmVnKTsKKworCQkJeGZlciB8PSBNVlNEX1hGRVJfTU9ERV9BVVRPX0NNRDEyOworCQkJaW50ciB8PSBNVlNEX05PUl9BVVRPQ01EMTJfRE9ORTsKKwkJfSBlbHNlIHsKKwkJCWludHIgfD0gTVZTRF9OT1JfWEZFUl9ET05FOworCQl9CisJfSBlbHNlIHsKKwkJaW50ciB8PSBNVlNEX05PUl9DTURfRE9ORTsKKwl9CisKKwltdnNkX3dyaXRlKE1WU0RfQVJHX0xPVywgY21kLT5hcmcgJiAweGZmZmYpOworCW12c2Rfd3JpdGUoTVZTRF9BUkdfSEksICBjbWQtPmFyZyA+PiAxNik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaG9zdC0+eGZlcl9tb2RlICY9IE1WU0RfWEZFUl9NT0RFX0lOVF9DSEtfRU47CisJaG9zdC0+eGZlcl9tb2RlIHw9IHhmZXI7CisJbXZzZF93cml0ZShNVlNEX1hGRVJfTU9ERSwgaG9zdC0+eGZlcl9tb2RlKTsKKworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9TVEFUVVMsIH5NVlNEX05PUl9DQVJEX0lOVCk7CisJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX1NUQVRVUywgMHhmZmZmKTsKKwltdnNkX3dyaXRlKE1WU0RfQ01ELCBjbWRyZWcpOworCisJaG9zdC0+aW50cl9lbiAmPSBNVlNEX05PUl9DQVJEX0lOVDsKKwlob3N0LT5pbnRyX2VuIHw9IGludHIgfCBNVlNEX05PUl9FUlJPUjsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9FTiwgMHhmZmZmKTsKKworCW1vZF90aW1lcigmaG9zdC0+dGltZXIsIGppZmZpZXMgKyA1ICogSFopOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdTMyIG12c2RfZmluaXNoX2NtZChzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwKKwkJCSAgIHUzMiBlcnJfc3RhdHVzKQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJdW5zaWduZWQgaW50IHJlc3BvbnNlWzhdLCBpOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJcmVzcG9uc2VbaV0gPSBtdnNkX3JlYWQoTVZTRF9SU1AoaSkpOworCQljbWQtPnJlc3BbMF0gPQkJKChyZXNwb25zZVswXSAmIDB4MDNmZikgPDwgMjIpIHwKKwkJCQkJKChyZXNwb25zZVsxXSAmIDB4ZmZmZikgPDwgNikgfAorCQkJCQkoKHJlc3BvbnNlWzJdICYgMHhmYzAwKSA+PiAxMCk7CisJCWNtZC0+cmVzcFsxXSA9CQkoKHJlc3BvbnNlWzJdICYgMHgwM2ZmKSA8PCAyMikgfAorCQkJCQkoKHJlc3BvbnNlWzNdICYgMHhmZmZmKSA8PCA2KSB8CisJCQkJCSgocmVzcG9uc2VbNF0gJiAweGZjMDApID4+IDEwKTsKKwkJY21kLT5yZXNwWzJdID0JCSgocmVzcG9uc2VbNF0gJiAweDAzZmYpIDw8IDIyKSB8CisJCQkJCSgocmVzcG9uc2VbNV0gJiAweGZmZmYpIDw8IDYpIHwKKwkJCQkJKChyZXNwb25zZVs2XSAmIDB4ZmMwMCkgPj4gMTApOworCQljbWQtPnJlc3BbM10gPQkJKChyZXNwb25zZVs2XSAmIDB4MDNmZikgPDwgMjIpIHwKKwkJCQkJKChyZXNwb25zZVs3XSAmIDB4M2ZmZikgPDwgOCk7CisJfSBlbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCXVuc2lnbmVkIGludCByZXNwb25zZVszXSwgaTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCXJlc3BvbnNlW2ldID0gbXZzZF9yZWFkKE1WU0RfUlNQKGkpKTsKKwkJY21kLT5yZXNwWzBdID0JCSgocmVzcG9uc2VbMl0gJiAweDAwM2YpIDw8ICg4IC0gOCkpIHwKKwkJCQkJKChyZXNwb25zZVsxXSAmIDB4ZmZmZikgPDwgKDE0IC0gOCkpIHwKKwkJCQkJKChyZXNwb25zZVswXSAmIDB4MDNmZikgPDwgKDMwIC0gOCkpOworCQljbWQtPnJlc3BbMV0gPQkJKChyZXNwb25zZVswXSAmIDB4ZmMwMCkgPj4gMTApOworCQljbWQtPnJlc3BbMl0gPSAwOworCQljbWQtPnJlc3BbM10gPSAwOworCX0KKworCWlmIChlcnJfc3RhdHVzICYgTVZTRF9FUlJfQ01EX1RJTUVPVVQpIHsKKwkJY21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJfSBlbHNlIGlmIChlcnJfc3RhdHVzICYgKE1WU0RfRVJSX0NNRF9DUkMgfCBNVlNEX0VSUl9DTURfRU5EQklUIHwKKwkJCQkgTVZTRF9FUlJfQ01EX0lOREVYIHwgTVZTRF9FUlJfQ01EX1NUQVJUQklUKSkgeworCQljbWQtPmVycm9yID0gLUVJTFNFUTsKKwl9CisJZXJyX3N0YXR1cyAmPSB+KE1WU0RfRVJSX0NNRF9USU1FT1VUIHwgTVZTRF9FUlJfQ01EX0NSQyB8CisJCQlNVlNEX0VSUl9DTURfRU5EQklUIHwgTVZTRF9FUlJfQ01EX0lOREVYIHwKKwkJCU1WU0RfRVJSX0NNRF9TVEFSVEJJVCk7CisKKwlyZXR1cm4gZXJyX3N0YXR1czsKK30KKworc3RhdGljIHUzMiBtdnNkX2ZpbmlzaF9kYXRhKHN0cnVjdCBtdnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKKwkJCSAgICB1MzIgZXJyX3N0YXR1cykKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisKKwlpZiAoaG9zdC0+cGlvX3B0cikgeworCQlob3N0LT5waW9fcHRyID0gTlVMTDsKKwkJaG9zdC0+cGlvX3NpemUgPSAwOworCX0gZWxzZSB7CisJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLCBob3N0LT5zZ19mcmFncywKKwkJCSAgICAgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgPworCQkJCURNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpOworCX0KKworCWlmIChlcnJfc3RhdHVzICYgTVZTRF9FUlJfREFUQV9USU1FT1VUKQorCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJZWxzZSBpZiAoZXJyX3N0YXR1cyAmIChNVlNEX0VSUl9EQVRBX0NSQyB8IE1WU0RfRVJSX0RBVEFfRU5EQklUKSkKKwkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROworCWVsc2UgaWYgKGVycl9zdGF0dXMgJiBNVlNEX0VSUl9YRkVSX1NJWkUpCisJCWRhdGEtPmVycm9yID0gLUVCQURFOworCWVycl9zdGF0dXMgJj0gfihNVlNEX0VSUl9EQVRBX1RJTUVPVVQgfCBNVlNEX0VSUl9EQVRBX0NSQyB8CisJCQlNVlNEX0VSUl9EQVRBX0VOREJJVCB8IE1WU0RfRVJSX1hGRVJfU0laRSk7CisKKwlkZXZfZGJnKGhvc3QtPmRldiwgImRhdGEgZG9uZTogYmxvY2tzX2xlZnQ9JWQsIGJ5dGVzX2xlZnQ9JWRcbiIsCisJCW12c2RfcmVhZChNVlNEX0NVUlJfQkxLX0xFRlQpLCBtdnNkX3JlYWQoTVZTRF9DVVJSX0JZVEVfTEVGVCkpOworCWRhdGEtPmJ5dGVzX3hmZXJlZCA9CisJCShkYXRhLT5ibG9ja3MgLSBtdnNkX3JlYWQoTVZTRF9DVVJSX0JMS19MRUZUKSkgKiBkYXRhLT5ibGtzejsKKwkvKiBXZSBjYW4ndCBiZSBzdXJlIGFib3V0IHRoZSBsYXN0IGJsb2NrIHdoZW4gZXJyb3JzIGFyZSBkZXRlY3RlZCAqLworCWlmIChkYXRhLT5ieXRlc194ZmVyZWQgJiYgZGF0YS0+ZXJyb3IpCisJCWRhdGEtPmJ5dGVzX3hmZXJlZCAtPSBkYXRhLT5ibGtzejsKKworCS8qIEhhbmRsZSBBdXRvIGNtZCAxMiByZXNwb25zZSAqLworCWlmIChkYXRhLT5zdG9wKSB7CisJCXVuc2lnbmVkIGludCByZXNwb25zZVszXSwgaTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCXJlc3BvbnNlW2ldID0gbXZzZF9yZWFkKE1WU0RfQVVUT19SU1AoaSkpOworCQlkYXRhLT5zdG9wLT5yZXNwWzBdID0JKChyZXNwb25zZVsyXSAmIDB4MDAzZikgPDwgKDggLSA4KSkgfAorCQkJCQkoKHJlc3BvbnNlWzFdICYgMHhmZmZmKSA8PCAoMTQgLSA4KSkgfAorCQkJCQkoKHJlc3BvbnNlWzBdICYgMHgwM2ZmKSA8PCAoMzAgLSA4KSk7CisJCWRhdGEtPnN0b3AtPnJlc3BbMV0gPQkoKHJlc3BvbnNlWzBdICYgMHhmYzAwKSA+PiAxMCk7CisJCWRhdGEtPnN0b3AtPnJlc3BbMl0gPSAwOworCQlkYXRhLT5zdG9wLT5yZXNwWzNdID0gMDsKKworCQlpZiAoZXJyX3N0YXR1cyAmIE1WU0RfRVJSX0FVVE9DTUQxMikgeworCQkJdTMyIGVycl9jbWQxMiA9IG12c2RfcmVhZChNVlNEX0FVVE9DTUQxMl9FUlJfU1RBVFVTKTsKKwkJCWRldl9kYmcoaG9zdC0+ZGV2LCAiYzEyZXJyIDB4JTA0eFxuIiwgZXJyX2NtZDEyKTsKKwkJCWlmIChlcnJfY21kMTIgJiBNVlNEX0FVVE9DTUQxMl9FUlJfTk9URVhFKQorCQkJCWRhdGEtPnN0b3AtPmVycm9yID0gLUVOT0VYRUM7CisJCQllbHNlIGlmIChlcnJfY21kMTIgJiBNVlNEX0FVVE9DTUQxMl9FUlJfVElNRU9VVCkKKwkJCQlkYXRhLT5zdG9wLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQllbHNlIGlmIChlcnJfY21kMTIpCisJCQkJZGF0YS0+c3RvcC0+ZXJyb3IgPSAtRUlMU0VROworCQkJZXJyX3N0YXR1cyAmPSB+TVZTRF9FUlJfQVVUT0NNRDEyOworCQl9CisJfQorCisJcmV0dXJuIGVycl9zdGF0dXM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdnNkX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IGRldjsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJdTMyIGludHJfc3RhdHVzLCBpbnRyX2RvbmVfbWFzazsKKwlpbnQgaXJxX2hhbmRsZWQgPSAwOworCisJaW50cl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpOworCWRldl9kYmcoaG9zdC0+ZGV2LCAiaW50ciAweCUwNHggaW50cl9lbiAweCUwNHggaHdfc3RhdGUgMHglMDR4XG4iLAorCQlpbnRyX3N0YXR1cywgbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfRU4pLAorCQltdnNkX3JlYWQoTVZTRF9IV19TVEFURSkpOworCisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKworCS8qIFBJTyBoYW5kbGluZywgaWYgbmVlZGVkLiBNZXNzeSBidXNpbmVzcy4uLiAqLworCWlmIChob3N0LT5waW9fc2l6ZSAmJgorCSAgICAoaW50cl9zdGF0dXMgJiBob3N0LT5pbnRyX2VuICYKKwkgICAgIChNVlNEX05PUl9SWF9SRUFEWSB8IE1WU0RfTk9SX1JYX0ZJRk9fOFcpKSkgeworCQl1MTYgKnAgPSBob3N0LT5waW9fcHRyOworCQlpbnQgcyA9IGhvc3QtPnBpb19zaXplOworCQl3aGlsZSAocyA+PSAzMiAmJiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9SWF9GSUZPXzhXKSkgeworCQkJcmVhZHN3KGlvYmFzZSArIE1WU0RfRklGTywgcCwgMTYpOworCQkJcCArPSAxNjsKKwkJCXMgLT0gMzI7CisJCQlpbnRyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyk7CisJCX0KKwkJLyoKKwkJICogTm9ybWFsbHkgd2UnZCB1c2UgPCAzMiBoZXJlLCBidXQgdGhlIFJYX0ZJRk9fOFcgYml0CisJCSAqIGRvZXNuJ3QgYXBwZWFyIHRvIGFzc2VydCB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgMzIgYnl0ZXMKKwkJICogKDggd29yZHMpIGxlZnQgdG8gZmV0Y2ggaW4gYSB0cmFuc2Zlci4KKwkJICovCisJCWlmIChzIDw9IDMyKSB7CisJCQl3aGlsZSAocyA+PSA0ICYmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX1JYX1JFQURZKSkgeworCQkJCXB1dF91bmFsaWduZWQobXZzZF9yZWFkKE1WU0RfRklGTyksIHArKyk7CisJCQkJcHV0X3VuYWxpZ25lZChtdnNkX3JlYWQoTVZTRF9GSUZPKSwgcCsrKTsKKwkJCQlzIC09IDQ7CisJCQkJaW50cl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpOworCQkJfQorCQkJaWYgKHMgJiYgcyA8IDQgJiYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfUlhfUkVBRFkpKSB7CisJCQkJdTE2IHZhbFsyXSA9IHswLCAwfTsKKwkJCQl2YWxbMF0gPSBtdnNkX3JlYWQoTVZTRF9GSUZPKTsKKwkJCQl2YWxbMV0gPSBtdnNkX3JlYWQoTVZTRF9GSUZPKTsKKwkJCQltZW1jcHkocCwgJnZhbCwgcyk7CisJCQkJcyA9IDA7CisJCQkJaW50cl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpOworCQkJfQorCQkJaWYgKHMgPT0gMCkgeworCQkJCWhvc3QtPmludHJfZW4gJj0KKwkJCQkgICAgIH4oTVZTRF9OT1JfUlhfUkVBRFkgfCBNVlNEX05PUl9SWF9GSUZPXzhXKTsKKwkJCQltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCQkJfSBlbHNlIGlmIChob3N0LT5pbnRyX2VuICYgTVZTRF9OT1JfUlhfRklGT184VykgeworCQkJCWhvc3QtPmludHJfZW4gJj0gfk1WU0RfTk9SX1JYX0ZJRk9fOFc7CisJCQkJaG9zdC0+aW50cl9lbiB8PSBNVlNEX05PUl9SWF9SRUFEWTsKKwkJCQltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCQkJfQorCQl9CisJCWRldl9kYmcoaG9zdC0+ZGV2LCAicGlvICVkIGludHIgMHglMDR4IGh3X3N0YXRlIDB4JTA0eFxuIiwKKwkJCXMsIGludHJfc3RhdHVzLCBtdnNkX3JlYWQoTVZTRF9IV19TVEFURSkpOworCQlob3N0LT5waW9fcHRyID0gcDsKKwkJaG9zdC0+cGlvX3NpemUgPSBzOworCQlpcnFfaGFuZGxlZCA9IDE7CisJfSBlbHNlIGlmIChob3N0LT5waW9fc2l6ZSAmJgorCQkgICAoaW50cl9zdGF0dXMgJiBob3N0LT5pbnRyX2VuICYKKwkJICAgIChNVlNEX05PUl9UWF9BVkFJTCB8IE1WU0RfTk9SX1RYX0ZJRk9fOFcpKSkgeworCQl1MTYgKnAgPSBob3N0LT5waW9fcHRyOworCQlpbnQgcyA9IGhvc3QtPnBpb19zaXplOworCQkvKgorCQkgKiBUaGUgVFhfRklGT184VyBiaXQgaXMgdW5yZWxpYWJsZS4gV2hlbiBzZXQsIGJ1cnN0aW5nCisJCSAqIDE2IGhhbGZ3b3JkcyBhbGwgYXQgb25jZSBpbiB0aGUgRklGTyBkcm9wcyBkYXRhLiBBY3R1YWxseQorCQkgKiBUWF9BVkFJTCBkb2VzIGdvIG9mZiBhZnRlciBvbmx5IG9uZSB3b3JkIGlzIHB1c2hlZCBldmVuIGlmCisJCSAqIFRYX0ZJRk9fOFcgcmVtYWlucyBzZXQuCisJCSAqLworCQl3aGlsZSAocyA+PSA0ICYmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX1RYX0FWQUlMKSkgeworCQkJbXZzZF93cml0ZShNVlNEX0ZJRk8sIGdldF91bmFsaWduZWQocCsrKSk7CisJCQltdnNkX3dyaXRlKE1WU0RfRklGTywgZ2V0X3VuYWxpZ25lZChwKyspKTsKKwkJCXMgLT0gNDsKKwkJCWludHJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKTsKKwkJfQorCQlpZiAocyA8IDQpIHsKKwkJCWlmIChzICYmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX1RYX0FWQUlMKSkgeworCQkJCXUxNiB2YWxbMl0gPSB7MCwgMH07CisJCQkJbWVtY3B5KCZ2YWwsIHAsIHMpOworCQkJCW12c2Rfd3JpdGUoTVZTRF9GSUZPLCB2YWxbMF0pOworCQkJCW12c2Rfd3JpdGUoTVZTRF9GSUZPLCB2YWxbMV0pOworCQkJCXMgPSAwOworCQkJCWludHJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKTsKKwkJCX0KKwkJCWlmIChzID09IDApIHsKKwkJCQlob3N0LT5pbnRyX2VuICY9CisJCQkJICAgICB+KE1WU0RfTk9SX1RYX0FWQUlMIHwgTVZTRF9OT1JfVFhfRklGT184Vyk7CisJCQkJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwkJCX0KKwkJfQorCQlkZXZfZGJnKGhvc3QtPmRldiwgInBpbyAlZCBpbnRyIDB4JTA0eCBod19zdGF0ZSAweCUwNHhcbiIsCisJCQlzLCBpbnRyX3N0YXR1cywgbXZzZF9yZWFkKE1WU0RfSFdfU1RBVEUpKTsKKwkJaG9zdC0+cGlvX3B0ciA9IHA7CisJCWhvc3QtPnBpb19zaXplID0gczsKKwkJaXJxX2hhbmRsZWQgPSAxOworCX0KKworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9TVEFUVVMsIGludHJfc3RhdHVzKTsKKworCWludHJfZG9uZV9tYXNrID0gTVZTRF9OT1JfQ0FSRF9JTlQgfCBNVlNEX05PUl9SWF9SRUFEWSB8CisJCQkgTVZTRF9OT1JfUlhfRklGT184VyB8IE1WU0RfTk9SX1RYX0ZJRk9fOFc7CisJaWYgKGludHJfc3RhdHVzICYgaG9zdC0+aW50cl9lbiAmIH5pbnRyX2RvbmVfbWFzaykgeworCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSA9IGhvc3QtPm1ycTsKKwkJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBtcnEtPmNtZDsKKwkJdTMyIGVycl9zdGF0dXMgPSAwOworCisJCWRlbF90aW1lcigmaG9zdC0+dGltZXIpOworCQlob3N0LT5tcnEgPSBOVUxMOworCisJCWhvc3QtPmludHJfZW4gJj0gTVZTRF9OT1JfQ0FSRF9JTlQ7CisJCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9FTiwgMCk7CisKKwkJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCisJCWlmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX1VORVhQX1JTUCkgeworCQkJY21kLT5lcnJvciA9IC1FUFJPVE87CisJCX0gZWxzZSBpZiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9FUlJPUikgeworCQkJZXJyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX0VSUl9JTlRSX1NUQVRVUyk7CisJCQlkZXZfZGJnKGhvc3QtPmRldiwgImVyciAweCUwNHhcbiIsIGVycl9zdGF0dXMpOworCQl9CisKKwkJZXJyX3N0YXR1cyA9IG12c2RfZmluaXNoX2NtZChob3N0LCBjbWQsIGVycl9zdGF0dXMpOworCQlpZiAobXJxLT5kYXRhKQorCQkJZXJyX3N0YXR1cyA9IG12c2RfZmluaXNoX2RhdGEoaG9zdCwgbXJxLT5kYXRhLCBlcnJfc3RhdHVzKTsKKwkJaWYgKGVycl9zdGF0dXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuaGFuZGxlZCBlcnJvciBzdGF0dXMgJSMwNHhcbiIsCisJCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBlcnJfc3RhdHVzKTsKKwkJCWNtZC0+ZXJyb3IgPSAtRU5PTVNHOworCQl9CisKKwkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7CisJCWlycV9oYW5kbGVkID0gMTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCisJaWYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfQ0FSRF9JTlQpIHsKKwkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCQlpcnFfaGFuZGxlZCA9IDE7CisJfQorCisJaWYgKGlycV9oYW5kbGVkKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmhhbmRsZWQgaW50ZXJydXB0IHN0YXR1cz0weCUwNHggZW49MHglMDR4ICIKKwkJCSJwaW89JWRcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBpbnRyX3N0YXR1cywKKwkJCWhvc3QtPmludHJfZW4sIGhvc3QtPnBpb19zaXplKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkIG12c2RfdGltZW91dF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbXZzZF9ob3N0ICopZGF0YTsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbXJxID0gaG9zdC0+bXJxOworCWlmIChtcnEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGltZW91dCB3YWl0aW5nIGZvciBoYXJkd2FyZSBpbnRlcnJ1cHQuXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaHdfc3RhdGU9MHglMDR4LCBpbnRyX3N0YXR1cz0weCUwNHggIgorCQkJCSJpbnRyX2VuPTB4JTA0eFxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksCisJCQkJbXZzZF9yZWFkKE1WU0RfSFdfU1RBVEUpLAorCQkJCW12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyksCisJCQkJbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfRU4pKTsKKworCQlob3N0LT5tcnEgPSBOVUxMOworCisJCW12c2Rfd3JpdGUoTVZTRF9TV19SRVNFVCwgTVZTRF9TV19SRVNFVF9OT1cpOworCisJCWhvc3QtPnhmZXJfbW9kZSAmPSBNVlNEX1hGRVJfTU9ERV9JTlRfQ0hLX0VOOworCQltdnNkX3dyaXRlKE1WU0RfWEZFUl9NT0RFLCBob3N0LT54ZmVyX21vZGUpOworCisJCWhvc3QtPmludHJfZW4gJj0gTVZTRF9OT1JfQ0FSRF9JTlQ7CisJCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9FTiwgMCk7CisJCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9TVEFUVVMsIDB4ZmZmZik7CisKKwkJbXJxLT5jbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJbXZzZF9maW5pc2hfY21kKGhvc3QsIG1ycS0+Y21kLCAwKTsKKwkJaWYgKG1ycS0+ZGF0YSkgeworCQkJbXJxLT5kYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQltdnNkX2ZpbmlzaF9kYXRhKGhvc3QsIG1ycS0+ZGF0YSwgMCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaWYgKG1ycSkKKwkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdnNkX2NhcmRfZGV0ZWN0X2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IGRldjsKKwltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdnNkX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJaWYgKGVuYWJsZSkgeworCQlob3N0LT54ZmVyX21vZGUgfD0gTVZTRF9YRkVSX01PREVfSU5UX0NIS19FTjsKKwkJaG9zdC0+aW50cl9lbiB8PSBNVlNEX05PUl9DQVJEX0lOVDsKKwl9IGVsc2UgeworCQlob3N0LT54ZmVyX21vZGUgJj0gfk1WU0RfWEZFUl9NT0RFX0lOVF9DSEtfRU47CisJCWhvc3QtPmludHJfZW4gJj0gfk1WU0RfTk9SX0NBUkRfSU5UOworCX0KKwltdnNkX3dyaXRlKE1WU0RfWEZFUl9NT0RFLCBob3N0LT54ZmVyX21vZGUpOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG12c2RfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaWYgKGhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCkKKwkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCk7CisKKwkvKgorCSAqIEJvYXJkIGRvZXNuJ3Qgc3VwcG9ydCByZWFkIG9ubHkgZGV0ZWN0aW9uOyBsZXQgdGhlIG1tYyBjb3JlCisJICogZGVjaWRlIHdoYXQgdG8gZG8uCisJICovCisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyB2b2lkIG12c2RfcG93ZXJfdXAoc3RydWN0IG12c2RfaG9zdCAqaG9zdCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJZGV2X2RiZyhob3N0LT5kZXYsICJwb3dlciB1cFxuIik7CisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfRU4sIDApOworCW12c2Rfd3JpdGUoTVZTRF9TV19SRVNFVCwgTVZTRF9TV19SRVNFVF9OT1cpOworCW12c2Rfd3JpdGUoTVZTRF9YRkVSX01PREUsIDApOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfU1RBVFVTX0VOLCAweGZmZmYpOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfU1RBVFVTX0VOLCAweGZmZmYpOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9TVEFUVVMsIDB4ZmZmZik7CisJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX1NUQVRVUywgMHhmZmZmKTsKK30KKworc3RhdGljIHZvaWQgbXZzZF9wb3dlcl9kb3duKHN0cnVjdCBtdnNkX2hvc3QgKmhvc3QpCit7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCWRldl9kYmcoaG9zdC0+ZGV2LCAicG93ZXIgZG93blxuIik7CisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfRU4sIDApOworCW12c2Rfd3JpdGUoTVZTRF9TV19SRVNFVCwgTVZTRF9TV19SRVNFVF9OT1cpOworCW12c2Rfd3JpdGUoTVZTRF9YRkVSX01PREUsIE1WU0RfWEZFUl9NT0RFX1NUT1BfQ0xLKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX1NUQVRVU19FTiwgMCk7CisJbXZzZF93cml0ZShNVlNEX0VSUl9TVEFUVVNfRU4sIDApOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9TVEFUVVMsIDB4ZmZmZik7CisJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX1NUQVRVUywgMHhmZmZmKTsKK30KKworc3RhdGljIHZvaWQgbXZzZF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwl1MzIgY3RybF9yZWcgPSAwOworCisJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfVVApCisJCW12c2RfcG93ZXJfdXAoaG9zdCk7CisKKwlpZiAoaW9zLT5jbG9jayA9PSAwKSB7CisJCW12c2Rfd3JpdGUoTVZTRF9YRkVSX01PREUsIE1WU0RfWEZFUl9NT0RFX1NUT1BfQ0xLKTsKKwkJbXZzZF93cml0ZShNVlNEX0NMS19ESVYsIE1WU0RfQkFTRV9ESVZfTUFYKTsKKwkJaG9zdC0+Y2xvY2sgPSAwOworCQlkZXZfZGJnKGhvc3QtPmRldiwgImNsb2NrIG9mZlxuIik7CisJfSBlbHNlIGlmIChpb3MtPmNsb2NrICE9IGhvc3QtPmNsb2NrKSB7CisJCXUzMiBtID0gRElWX1JPVU5EX1VQKGhvc3QtPmJhc2VfY2xvY2ssIGlvcy0+Y2xvY2spIC0gMTsKKwkJaWYgKG0gPiBNVlNEX0JBU0VfRElWX01BWCkKKwkJCW0gPSBNVlNEX0JBU0VfRElWX01BWDsKKwkJbXZzZF93cml0ZShNVlNEX0NMS19ESVYsIG0pOworCQlob3N0LT5jbG9jayA9IGlvcy0+Y2xvY2s7CisJCWhvc3QtPm5zX3Blcl9jbGsgPSAxMDAwMDAwMDAwIC8gKGhvc3QtPmJhc2VfY2xvY2sgLyAobSsxKSk7CisJCWRldl9kYmcoaG9zdC0+ZGV2LCAiY2xvY2s9JWQgKCVkKSwgZGl2PTB4JTA0eFxuIiwKKwkJCWlvcy0+Y2xvY2ssIGhvc3QtPmJhc2VfY2xvY2sgLyAobSsxKSwgbSk7CisJfQorCisJLyogZGVmYXVsdCB0cmFuc2ZlciBtb2RlICovCisJY3RybF9yZWcgfD0gTVZTRF9IT1NUX0NUUkxfQklHX0VORElBTjsKKwljdHJsX3JlZyAmPSB+TVZTRF9IT1NUX0NUUkxfTFNCX0ZJUlNUOworCisJLyogZGVmYXVsdCB0byBtYXhpbXVtIHRpbWVvdXQgKi8KKwljdHJsX3JlZyB8PSBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9NQVNLOworCWN0cmxfcmVnIHw9IE1WU0RfSE9TVF9DVFJMX1RNT1VUX0VOOworCisJaWYgKGlvcy0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfUFVTSFBVTEwpCisJCWN0cmxfcmVnIHw9IE1WU0RfSE9TVF9DVFJMX1BVU0hfUFVMTF9FTjsKKworCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCWN0cmxfcmVnIHw9IE1WU0RfSE9TVF9DVFJMX0RBVEFfV0lEVEhfNF9CSVRTOworCisJaWYgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0hTIHx8CisJICAgIGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfU0RfSFMpCisJCWN0cmxfcmVnIHw9IE1WU0RfSE9TVF9DVFJMX0hJX1NQRUVEX0VOOworCisJaG9zdC0+Y3RybCA9IGN0cmxfcmVnOworCW12c2Rfd3JpdGUoTVZTRF9IT1NUX0NUUkwsIGN0cmxfcmVnKTsKKwlkZXZfZGJnKGhvc3QtPmRldiwgImN0cmwgMHglMDR4OiAlcyAlcyAlc1xuIiwgY3RybF9yZWcsCisJCShjdHJsX3JlZyAmIE1WU0RfSE9TVF9DVFJMX1BVU0hfUFVMTF9FTikgPworCQkJInB1c2gtcHVsbCIgOiAib3Blbi1kcmFpbiIsCisJCShjdHJsX3JlZyAmIE1WU0RfSE9TVF9DVFJMX0RBVEFfV0lEVEhfNF9CSVRTKSA/CisJCQkiNGJpdC13aWR0aCIgOiAiMWJpdC13aWR0aCIsCisJCShjdHJsX3JlZyAmIE1WU0RfSE9TVF9DVFJMX0hJX1NQRUVEX0VOKSA/CisJCQkiaGlnaC1zcGVlZCIgOiAiIik7CisKKwlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCisJCW12c2RfcG93ZXJfZG93bihob3N0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgbXZzZF9vcHMgPSB7CisJLnJlcXVlc3QJCT0gbXZzZF9yZXF1ZXN0LAorCS5nZXRfcm8JCQk9IG12c2RfZ2V0X3JvLAorCS5zZXRfaW9zCQk9IG12c2Rfc2V0X2lvcywKKwkuZW5hYmxlX3NkaW9faXJxCT0gbXZzZF9lbmFibGVfc2Rpb19pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXZfY29uZl9tYnVzX3dpbmRvd3Moc3RydWN0IG12c2RfaG9zdCAqaG9zdCwKKwkJCQkJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbSkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXdyaXRlbCgwLCBpb2Jhc2UgKyBNVlNEX1dJTkRPV19DVFJMKGkpKTsKKwkJd3JpdGVsKDAsIGlvYmFzZSArIE1WU0RfV0lORE9XX0JBU0UoaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkcmFtLT5udW1fY3M7IGkrKykgeworCQlzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7CisJCXdyaXRlbCgoKGNzLT5zaXplIC0gMSkgJiAweGZmZmYwMDAwKSB8CisJCSAgICAgICAoY3MtPm1idXNfYXR0ciA8PCA4KSB8CisJCSAgICAgICAoZHJhbS0+bWJ1c19kcmFtX3RhcmdldF9pZCA8PCA0KSB8IDEsCisJCSAgICAgICBpb2Jhc2UgKyBNVlNEX1dJTkRPV19DVFJMKGkpKTsKKwkJd3JpdGVsKGNzLT5iYXNlLCBpb2Jhc2UgKyBNVlNEX1dJTkRPV19CQVNFKGkpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG12c2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IE5VTEw7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhICptdnNkX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXQsIGlycTsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJbXZzZF9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFyIHx8IGlycSA8IDAgfHwgIW12c2RfZGF0YSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIFNaXzFLLCBEUklWRVJfTkFNRSk7CisJaWYgKCFyKQorCQlyZXR1cm4gLUVCVVNZOworCisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtdnNkX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5tbWMgPSBtbWM7CisJaG9zdC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlob3N0LT5yZXMgPSByOworCWhvc3QtPmJhc2VfY2xvY2sgPSBtdnNkX2RhdGEtPmNsb2NrIC8gMjsKKworCW1tYy0+b3BzID0gJm12c2Rfb3BzOworCisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX1NESU9fSVJRIHwKKwkJICAgIE1NQ19DQVBfU0RfSElHSFNQRUVEIHwgTU1DX0NBUF9NTUNfSElHSFNQRUVEOworCisJbW1jLT5mX21pbiA9IERJVl9ST1VORF9VUChob3N0LT5iYXNlX2Nsb2NrLCBNVlNEX0JBU0VfRElWX01BWCk7CisJbW1jLT5mX21heCA9IG1heGZyZXE7CisKKwltbWMtPm1heF9ibGtfc2l6ZSA9IDIwNDg7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gNjU1MzU7CisKKwltbWMtPm1heF9od19zZWdzID0gMTsKKwltbWMtPm1heF9waHlzX3NlZ3MgPSAxOworCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfYmxrX3NpemUgKiBtbWMtPm1heF9ibGtfY291bnQ7CisJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKKworCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKKworCWhvc3QtPmJhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCBTWl80Syk7CisJaWYgKCFob3N0LT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIChSZS0pcHJvZ3JhbSBNQlVTIHJlbWFwcGluZyB3aW5kb3dzIGlmIHdlIGFyZSBhc2tlZCB0by4gKi8KKwlpZiAobXZzZF9kYXRhLT5kcmFtICE9IE5VTEwpCisJCW12X2NvbmZfbWJ1c193aW5kb3dzKGhvc3QsIG12c2RfZGF0YS0+ZHJhbSk7CisKKwltdnNkX3Bvd2VyX2Rvd24oaG9zdCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIG12c2RfaXJxLCAwLCBEUklWRVJfTkFNRSwgaG9zdCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYXNzaWduIGlycSAlZFxuIiwgRFJJVkVSX05BTUUsIGlycSk7CisJCWdvdG8gb3V0OworCX0gZWxzZQorCQlob3N0LT5pcnEgPSBpcnE7CisKKwlpZiAobXZzZF9kYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChtdnNkX2RhdGEtPmdwaW9fY2FyZF9kZXRlY3QsCisJCQkJICAgRFJJVkVSX05BTUUgIiBjZCIpOworCQlpZiAocmV0ID09IDApIHsKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KG12c2RfZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCk7CisJCQlpcnEgPSBncGlvX3RvX2lycShtdnNkX2RhdGEtPmdwaW9fY2FyZF9kZXRlY3QpOworCQkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBtdnNkX2NhcmRfZGV0ZWN0X2lycSwKKwkJCQkJICBJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORywKKwkJCQkJICBEUklWRVJfTkFNRSAiIGNkIiwgaG9zdCk7CisJCQlpZiAocmV0ID09IDApCisJCQkJaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCA9CisJCQkJCW12c2RfZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJCWVsc2UKKwkJCQlncGlvX2ZyZWUobXZzZF9kYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KTsKKwkJfQorCX0KKwlpZiAoIWhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpCisJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05FRURTX1BPTEw7CisKKwlpZiAobXZzZF9kYXRhLT5ncGlvX3dyaXRlX3Byb3RlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG12c2RfZGF0YS0+Z3Bpb193cml0ZV9wcm90ZWN0LAorCQkJCSAgIERSSVZFUl9OQU1FICIgd3AiKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChtdnNkX2RhdGEtPmdwaW9fd3JpdGVfcHJvdGVjdCk7CisJCQlob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QgPQorCQkJCW12c2RfZGF0YS0+Z3Bpb193cml0ZV9wcm90ZWN0OworCQl9CisJfQorCisJc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVyLCBtdnNkX3RpbWVvdXRfdGltZXIsICh1bnNpZ25lZCBsb25nKWhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CisJcmV0ID0gbW1jX2FkZF9ob3N0KG1tYyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAlcyBkcml2ZXIgaW5pdGlhbGl6ZWQsICIsCisJCQkgICBtbWNfaG9zdG5hbWUobW1jKSwgRFJJVkVSX05BTUUpOworCWlmIChob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KQorCQlwcmludGsoInVzaW5nIEdQSU8gJWQgZm9yIGNhcmQgZGV0ZWN0aW9uXG4iLAorCQkgICAgICAgaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCk7CisJZWxzZQorCQlwcmludGsoImxhY2tpbmcgY2FyZCBkZXRlY3QgKGZhbGwgYmFjayB0byBwb2xsaW5nKVxuIik7CisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAoaG9zdCkgeworCQlpZiAoaG9zdC0+aXJxKQorCQkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKwkJaWYgKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpIHsKKwkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpLCBob3N0KTsKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KTsKKwkJfQorCQlpZiAoaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0KQorCQkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCk7CisJCWlmIChob3N0LT5iYXNlKQorCQkJaW91bm1hcChob3N0LT5iYXNlKTsKKwl9CisJaWYgKHIpCisJCXJlbGVhc2VfcmVzb3VyY2Uocik7CisJaWYgKG1tYykKKwkJbW1jX2ZyZWVfaG9zdChtbWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgbXZzZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKG1tYykgeworCQlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCQlpZiAoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCkgeworCQkJZnJlZV9pcnEoZ3Bpb190b19pcnEoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCksIGhvc3QpOworCQkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpOworCQl9CisJCW1tY19yZW1vdmVfaG9zdChtbWMpOworCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCQlpZiAoaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0KQorCQkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCk7CisJCWRlbF90aW1lcl9zeW5jKCZob3N0LT50aW1lcik7CisJCW12c2RfcG93ZXJfZG93bihob3N0KTsKKwkJaW91bm1hcChob3N0LT5iYXNlKTsKKwkJcmVsZWFzZV9yZXNvdXJjZShob3N0LT5yZXMpOworCQltbWNfZnJlZV9ob3N0KG1tYyk7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG12c2Rfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwKKwkJCSAgIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlpZiAobW1jICYmIGxldmVsID09IFNVU1BFTkRfRElTQUJMRSkKKwkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXZzZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9kZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtbWMgJiYgbGV2ZWwgPT0gUkVTVU1FX0VOQUJMRSkKKwkJcmV0ID0gbW1jX3Jlc3VtZV9ob3N0KG1tYyk7CisKKwlyZXR1cm4gcmV0OworfQorI2Vsc2UKKyNkZWZpbmUgbXZzZF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgbXZzZF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12c2RfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AobXZzZF9yZW1vdmUpLAorCS5zdXNwZW5kCT0gbXZzZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbXZzZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG12c2RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm12c2RfZHJpdmVyLCBtdnNkX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG12c2RfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdnNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG12c2RfaW5pdCk7Cittb2R1bGVfZXhpdChtdnNkX2V4aXQpOworCisvKiBtYXhpbXVtIGNhcmQgY2xvY2sgZnJlcXVlbmN5IChkZWZhdWx0IDUwTUh6KSAqLworbW9kdWxlX3BhcmFtKG1heGZyZXEsIGludCwgMCk7CisKKy8qIGZvcmNlIFBJTyB0cmFuc2ZlcnMgYWxsIHRoZSB0aW1lICovCittb2R1bGVfcGFyYW0obm9kbWEsIGludCwgMCk7CisKK01PRFVMRV9BVVRIT1IoIk1hZW4gU3VsZWltYW4sIE5pY29sYXMgUGl0cmUiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCBNTUMsU0QsU0RJTyBIb3N0IENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5oIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk3MjdiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uaApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9ycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19NVlNESU9fSAorI2RlZmluZSBfX01WU0RJT19ICisKKy8qCisgKiBDbG9jayByYXRlcworICovCisKKyNkZWZpbmUgTVZTRF9DTE9DS1JBVEVfTUFYCQkJNTAwMDAwMDAKKyNkZWZpbmUgTVZTRF9CQVNFX0RJVl9NQVgJCQkweDdmZgorCisKKy8qCisgKiBSZWdpc3RlciBvZmZzZXRzCisgKi8KKworI2RlZmluZSBNVlNEX1NZU19BRERSX0xPVwkJCTB4MDAwCisjZGVmaW5lIE1WU0RfU1lTX0FERFJfSEkJCQkweDAwNAorI2RlZmluZSBNVlNEX0JMS19TSVpFCQkJCTB4MDA4CisjZGVmaW5lIE1WU0RfQkxLX0NPVU5UCQkJCTB4MDBjCisjZGVmaW5lIE1WU0RfQVJHX0xPVwkJCQkweDAxMAorI2RlZmluZSBNVlNEX0FSR19ISQkJCQkweDAxNAorI2RlZmluZSBNVlNEX1hGRVJfTU9ERQkJCQkweDAxOAorI2RlZmluZSBNVlNEX0NNRAkJCQkweDAxYworI2RlZmluZSBNVlNEX1JTUChpKQkJCQkoMHgwMjAgKyAoKGkpPDwyKSkKKyNkZWZpbmUgTVZTRF9SU1AwCQkJCTB4MDIwCisjZGVmaW5lIE1WU0RfUlNQMQkJCQkweDAyNAorI2RlZmluZSBNVlNEX1JTUDIJCQkJMHgwMjgKKyNkZWZpbmUgTVZTRF9SU1AzCQkJCTB4MDJjCisjZGVmaW5lIE1WU0RfUlNQNAkJCQkweDAzMAorI2RlZmluZSBNVlNEX1JTUDUJCQkJMHgwMzQKKyNkZWZpbmUgTVZTRF9SU1A2CQkJCTB4MDM4CisjZGVmaW5lIE1WU0RfUlNQNwkJCQkweDAzYworI2RlZmluZSBNVlNEX0ZJRk8JCQkJMHgwNDAKKyNkZWZpbmUgTVZTRF9SU1BfQ1JDNwkJCQkweDA0NAorI2RlZmluZSBNVlNEX0hXX1NUQVRFCQkJCTB4MDQ4CisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMCQkJCTB4MDUwCisjZGVmaW5lIE1WU0RfQkxLX0dBUF9DVFJMCQkJMHgwNTQKKyNkZWZpbmUgTVZTRF9DTEtfQ1RSTAkJCQkweDA1OAorI2RlZmluZSBNVlNEX1NXX1JFU0VUCQkJCTB4MDVjCisjZGVmaW5lIE1WU0RfTk9SX0lOVFJfU1RBVFVTCQkJMHgwNjAKKyNkZWZpbmUgTVZTRF9FUlJfSU5UUl9TVEFUVVMJCQkweDA2NAorI2RlZmluZSBNVlNEX05PUl9TVEFUVVNfRU4JCQkweDA2OAorI2RlZmluZSBNVlNEX0VSUl9TVEFUVVNfRU4JCQkweDA2YworI2RlZmluZSBNVlNEX05PUl9JTlRSX0VOCQkJMHgwNzAKKyNkZWZpbmUgTVZTRF9FUlJfSU5UUl9FTgkJCTB4MDc0CisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9TVEFUVVMJCTB4MDc4CisjZGVmaW5lIE1WU0RfQ1VSUl9CWVRFX0xFRlQJCQkweDA3YworI2RlZmluZSBNVlNEX0NVUlJfQkxLX0xFRlQJCQkweDA4MAorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9BUkdfTE9XCQkJMHgwODQKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfQVJHX0hJCQkJMHgwODgKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfQ01ECQkJMHgwOGMKKyNkZWZpbmUgTVZTRF9BVVRPX1JTUChpKQkJCSgweDA5MCArICgoaSk8PDIpKQorI2RlZmluZSBNVlNEX0FVVE9fUlNQMAkJCQkweDA5MAorI2RlZmluZSBNVlNEX0FVVE9fUlNQMQkJCQkweDA5NAorI2RlZmluZSBNVlNEX0FVVE9fUlNQMgkJCQkweDA5OAorI2RlZmluZSBNVlNEX0NMS19ESVYJCQkJMHgxMjgKKworI2RlZmluZSBNVlNEX1dJTkRPV19DVFJMKGkpCQkJKDB4MTA4ICsgKChpKSA8PCAzKSkKKyNkZWZpbmUgTVZTRF9XSU5ET1dfQkFTRShpKQkJCSgweDEwYyArICgoaSkgPDwgMykpCisKKworLyoKKyAqIE1WU0RfQ01ECisgKi8KKworI2RlZmluZSBNVlNEX0NNRF9SU1BfTk9ORQkJCSgwIDw8IDApCisjZGVmaW5lIE1WU0RfQ01EX1JTUF8xMzYJCQkoMSA8PCAwKQorI2RlZmluZSBNVlNEX0NNRF9SU1BfNDgJCQkJKDIgPDwgMCkKKyNkZWZpbmUgTVZTRF9DTURfUlNQXzQ4QlVTWQkJCSgzIDw8IDApCisKKyNkZWZpbmUgTVZTRF9DTURfQ0hFQ0tfREFUQUNSQzE2CQkoMSA8PCAyKQorI2RlZmluZSBNVlNEX0NNRF9DSEVDS19DTURDUkMJCQkoMSA8PCAzKQorI2RlZmluZSBNVlNEX0NNRF9JTkRYX0NIRUNLCQkJKDEgPDwgNCkKKyNkZWZpbmUgTVZTRF9DTURfREFUQV9QUkVTRU5UCQkJKDEgPDwgNSkKKyNkZWZpbmUgTVZTRF9VTkVYUEVDVEVEX1JFU1AJCQkoMSA8PCA3KQorI2RlZmluZSBNVlNEX0NNRF9JTkRFWCh4KQkJCSgoeCkgPDwgOCkKKworCisvKgorICogTVZTRF9BVVRPQ01EMTJfQ01ECisgKi8KKworI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9CVVNZCQkJKDEgPDwgMCkKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfSU5EWF9DSEVDSwkJKDEgPDwgMSkKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfSU5ERVgoeCkJCQkoKHgpIDw8IDgpCisKKy8qCisgKiBNVlNEX1hGRVJfTU9ERQorICovCisKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfV1JfREFUQV9TVEFSVAkJKDEgPDwgMCkKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfSFdfV1JfREFUQV9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfQVVUT19DTUQxMgkJKDEgPDwgMikKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfSU5UX0NIS19FTgkJKDEgPDwgMykKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfVE9fSE9TVAkJCSgxIDw8IDQpCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX1NUT1BfQ0xLCQkJKDEgPDwgNSkKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfUElPCQkJKDEgPDwgNikKKworCisvKgorICogTVZTRF9IT1NUX0NUUkwKKyAqLworCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX1BVU0hfUFVMTF9FTiAJCSgxIDw8IDApCisKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfQ0FSRF9UWVBFX01FTV9PTkxZIAkoMCA8PCAxKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9DQVJEX1RZUEVfSU9fT05MWSAJKDEgPDwgMSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfQ0FSRF9UWVBFX0lPX01FTV9DT01CTyAJKDIgPDwgMSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfQ0FSRF9UWVBFX0lPX01NQyAJKDMgPDwgMSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfQ0FSRF9UWVBFX01BU0sJIAkoMyA8PCAxKQorCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0JJR19FTkRJQU4gCQkoMSA8PCAzKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9MU0JfRklSU1QgCQkoMSA8PCA0KQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9EQVRBX1dJRFRIXzRfQklUUyAJKDEgPDwgOSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfSElfU1BFRURfRU4gCQkoMSA8PCAxMCkKKworI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9NQVggCQkweGYKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfVE1PVVRfTUFTSyAJCSgweGYgPDwgMTEpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX1RNT1VUKHgpIAkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfVE1PVVRfRU4gCQkoMSA8PCAxNSkKKworCisvKgorICogTVZTRF9TV19SRVNFVAorICovCisKKyNkZWZpbmUgTVZTRF9TV19SRVNFVF9OT1cJCQkoMSA8PCA4KQorCisKKy8qCisgKiBOb3JtYWwgaW50ZXJydXB0IHN0YXR1cyBiaXRzCisgKi8KKworI2RlZmluZSBNVlNEX05PUl9DTURfRE9ORQkJCSgxIDw8IDApCisjZGVmaW5lIE1WU0RfTk9SX1hGRVJfRE9ORQkJCSgxIDw8IDEpCisjZGVmaW5lIE1WU0RfTk9SX0JMS19HQVBfRVZUCQkJKDEgPDwgMikKKyNkZWZpbmUgTVZTRF9OT1JfRE1BX0RPTkUJCQkoMSA8PCAzKQorI2RlZmluZSBNVlNEX05PUl9UWF9BVkFJTAkJCSgxIDw8IDQpCisjZGVmaW5lIE1WU0RfTk9SX1JYX1JFQURZCQkJKDEgPDwgNSkKKyNkZWZpbmUgTVZTRF9OT1JfQ0FSRF9JTlQJCQkoMSA8PCA4KQorI2RlZmluZSBNVlNEX05PUl9SRUFEX1dBSVRfT04JCQkoMSA8PCA5KQorI2RlZmluZSBNVlNEX05PUl9SWF9GSUZPXzhXCQkJKDEgPDwgMTApCisjZGVmaW5lIE1WU0RfTk9SX1RYX0ZJRk9fOFcJCQkoMSA8PCAxMSkKKyNkZWZpbmUgTVZTRF9OT1JfU1VTUEVORF9PTgkJCSgxIDw8IDEyKQorI2RlZmluZSBNVlNEX05PUl9BVVRPQ01EMTJfRE9ORQkJCSgxIDw8IDEzKQorI2RlZmluZSBNVlNEX05PUl9VTkVYUF9SU1AJCQkoMSA8PCAxNCkKKyNkZWZpbmUgTVZTRF9OT1JfRVJST1IJCQkJKDEgPDwgMTUpCisKKworLyoKKyAqIEVycm9yIHN0YXR1cyBiaXRzCisgKi8KKworI2RlZmluZSBNVlNEX0VSUl9DTURfVElNRU9VVAkJCSgxIDw8IDApCisjZGVmaW5lIE1WU0RfRVJSX0NNRF9DUkMJCQkoMSA8PCAxKQorI2RlZmluZSBNVlNEX0VSUl9DTURfRU5EQklUCQkJKDEgPDwgMikKKyNkZWZpbmUgTVZTRF9FUlJfQ01EX0lOREVYCQkJKDEgPDwgMykKKyNkZWZpbmUgTVZTRF9FUlJfREFUQV9USU1FT1VUCQkJKDEgPDwgNCkKKyNkZWZpbmUgTVZTRF9FUlJfREFUQV9DUkMJCQkoMSA8PCA1KQorI2RlZmluZSBNVlNEX0VSUl9EQVRBX0VOREJJVAkJCSgxIDw8IDYpCisjZGVmaW5lIE1WU0RfRVJSX0FVVE9DTUQxMgkJCSgxIDw8IDgpCisjZGVmaW5lIE1WU0RfRVJSX0NNRF9TVEFSVEJJVAkJCSgxIDw8IDkpCisjZGVmaW5lIE1WU0RfRVJSX1hGRVJfU0laRQkJCSgxIDw8IDEwKQorI2RlZmluZSBNVlNEX0VSUl9SRVNQX1RfQklUCQkJKDEgPDwgMTEpCisjZGVmaW5lIE1WU0RfRVJSX0NSQ19FTkRCSVQJCQkoMSA8PCAxMikKKyNkZWZpbmUgTVZTRF9FUlJfQ1JDX1NUQVJUQklUCQkJKDEgPDwgMTMpCisjZGVmaW5lIE1WU0RfRVJSX0NSQ19TVEFUVVMJCQkoMSA8PCAxNCkKKworCisvKgorICogQ01EMTIgZXJyb3Igc3RhdHVzIGJpdHMKKyAqLworCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9OT1RFWEUJCSgxIDw8IDApCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9USU1FT1VUCQkoMSA8PCAxKQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfQ1JDCQkJKDEgPDwgMikKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX0VOREJJVAkJKDEgPDwgMykKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX0lOREVYCQkoMSA8PCA0KQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfUkVTUF9UX0JJVAkJKDEgPDwgNSkKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX1JFU1BfU1RBUlRCSVQJKDEgPDwgNikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IDM5MTZhNTYuLmQxODNiZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC01Niw2ICs1Niw3IEBACiAjZGVmaW5lIFNEVlMxOAkJCSgweDUgPDwgOSkKICNkZWZpbmUgU0RWUzMwCQkJKDB4NiA8PCA5KQogI2RlZmluZSBTRFZTMzMJCQkoMHg3IDw8IDkpCisjZGVmaW5lIFNEVlNfTUFTSwkJMHgwMDAwMEUwMAogI2RlZmluZSBTRFZTQ0xSCQkJMHhGRkZGRjFGRgogI2RlZmluZSBTRFZTREVUCQkJMHgwMDAwMDQwMAogI2RlZmluZSBBVVRPSURMRQkJMHgxCkBAIC03Niw2ICs3Nyw3IEBACiAjZGVmaW5lIE1TQlMJCQkoMSA8PCA1KQogI2RlZmluZSBCQ0UJCQkoMSA8PCAxKQogI2RlZmluZSBGT1VSX0JJVAkJKDEgPDwgMSkKKyNkZWZpbmUgRFc4CQkJKDEgPDwgNSkKICNkZWZpbmUgQ0MJCQkweDEKICNkZWZpbmUgVEMJCQkweDAyCiAjZGVmaW5lIE9ECQkJMHgxCkBAIC05OCwxMCArMTAwLDggQEAKICAqLwogI2RlZmluZSBPTUFQX01NQzFfREVWSUQJCTAKICNkZWZpbmUgT01BUF9NTUMyX0RFVklECQkxCisjZGVmaW5lIE9NQVBfTU1DM19ERVZJRAkJMgogCi0jZGVmaW5lIE9NQVBfTU1DX0RBVEFESVJfTk9ORQkwCi0jZGVmaW5lIE9NQVBfTU1DX0RBVEFESVJfUkVBRAkxCi0jZGVmaW5lIE9NQVBfTU1DX0RBVEFESVJfV1JJVEUJMgogI2RlZmluZSBNTUNfVElNRU9VVF9NUwkJMjAKICNkZWZpbmUgT01BUF9NTUNfTUFTVEVSX0NMT0NLCTk2MDAwMDAwCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkibW1jaS1vbWFwLWhzIgpAQCAtMTM3LDE4ICsxMzcsMTggQEAKIAlyZXNvdXJjZV9zaXplX3QJCW1hcGJhc2U7CiAJdW5zaWduZWQgaW50CQlpZDsKIAl1bnNpZ25lZCBpbnQJCWRtYV9sZW47Ci0JdW5zaWduZWQgaW50CQlkbWFfZGlyOworCXVuc2lnbmVkIGludAkJZG1hX3NnX2lkeDsKIAl1bnNpZ25lZCBjaGFyCQlidXNfbW9kZTsKLQl1bnNpZ25lZCBjaGFyCQlkYXRhZGlyOwogCXUzMgkJCSpidWZmZXI7CiAJdTMyCQkJYnl0ZXNsZWZ0OwogCWludAkJCXN1c3BlbmRlZDsKIAlpbnQJCQlpcnE7CiAJaW50CQkJY2FyZGRldGVjdDsKIAlpbnQJCQl1c2VfZG1hLCBkbWFfY2g7Ci0JaW50CQkJaW5pdHN0cjsKKwlpbnQJCQlkbWFfbGluZV90eCwgZG1hX2xpbmVfcng7CiAJaW50CQkJc2xvdF9pZDsKIAlpbnQJCQlkYmNsa19lbmFibGVkOworCWludAkJCXJlc3BvbnNlX2J1c3k7CiAJc3RydWN0CW9tYXBfbW1jX3BsYXRmb3JtX2RhdGEJKnBkYXRhOwogfTsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXN0cnVjdCBvbWFwX21tY19zbG90X2RhdGEgc2xvdCA9IGhvc3QtPnBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgInNsb3Q6JXNcbiIsIHNsb3QubmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNsb3QubmFtZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihzbG90X25hbWUsIFNfSVJVR08sIG1tY19vbWFwX3Nob3dfc2xvdF9uYW1lLCBOVUxMKTsKQEAgLTI0MywxMCArMjQzLDE0IEBACiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJU0UsIElOVF9FTl9NQVNLKTsKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLCBJTlRfRU5fTUFTSyk7CiAKKwlob3N0LT5yZXNwb25zZV9idXN5ID0gMDsKIAlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgewogCQlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KQogCQkJcmVzcHR5cGUgPSAxOwotCQllbHNlCisJCWVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpIHsKKwkJCXJlc3B0eXBlID0gMzsKKwkJCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAxOworCQl9IGVsc2UKIAkJCXJlc3B0eXBlID0gMjsKIAl9CiAKQEAgLTI3NSwxOSArMjc5LDM1IEBACiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDTUQsIGNtZHJlZyk7CiB9CiAKK3N0YXRpYyBpbnQKK21tY19vbWFwX2dldF9kbWFfZGlyKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCXJldHVybiBETUFfVE9fREVWSUNFOworCWVsc2UKKwkJcmV0dXJuIERNQV9GUk9NX0RFVklDRTsKK30KKwogLyoKICAqIE5vdGlmeSB0aGUgdHJhbnNmZXIgY29tcGxldGUgdG8gTU1DIGNvcmUKICAqLwogc3RhdGljIHZvaWQKIG1tY19vbWFwX3hmZXJfZG9uZShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogeworCWlmICghZGF0YSkgeworCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSA9IGhvc3QtPm1ycTsKKworCQlob3N0LT5tcnEgPSBOVUxMOworCQltbWNfb21hcF9mY2xrX2xhenlfZGlzYWJsZShob3N0KTsKKwkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7CisJCXJldHVybjsKKwl9CisKIAlob3N0LT5kYXRhID0gTlVMTDsKIAogCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9jaCAhPSAtMSkKIAkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGhvc3QtPmRtYV9sZW4sCi0JCQlob3N0LT5kbWFfZGlyKTsKLQotCWhvc3QtPmRhdGFkaXIgPSBPTUFQX01NQ19EQVRBRElSX05PTkU7CisJCQltbWNfb21hcF9nZXRfZG1hX2Rpcihob3N0LCBkYXRhKSk7CiAKIAlpZiAoIWRhdGEtPmVycm9yKQogCQlkYXRhLT5ieXRlc194ZmVyZWQgKz0gZGF0YS0+YmxvY2tzICogKGRhdGEtPmJsa3N6KTsKQEAgLTMyMiw3ICszNDIsNyBAQAogCQkJY21kLT5yZXNwWzBdID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDEwKTsKIAkJfQogCX0KLQlpZiAoaG9zdC0+ZGF0YSA9PSBOVUxMIHx8IGNtZC0+ZXJyb3IpIHsKKwlpZiAoKGhvc3QtPmRhdGEgPT0gTlVMTCAmJiAhaG9zdC0+cmVzcG9uc2VfYnVzeSkgfHwgY21kLT5lcnJvcikgewogCQlob3N0LT5tcnEgPSBOVUxMOwogCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgY21kLT5tcnEpOwogCX0KQEAgLTMzMSwxOSArMzUxLDE4IEBACiAvKgogICogRE1BIGNsZWFuIHVwIGZvciBjb21tYW5kIGVycm9ycwogICovCi1zdGF0aWMgdm9pZCBtbWNfZG1hX2NsZWFudXAoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBtbWNfZG1hX2NsZWFudXAoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIGludCBlcnJubykKIHsKLQlob3N0LT5kYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJaG9zdC0+ZGF0YS0+ZXJyb3IgPSBlcnJubzsKIAogCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9jaCAhPSAtMSkgewogCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5kYXRhLT5zZywgaG9zdC0+ZG1hX2xlbiwKLQkJCWhvc3QtPmRtYV9kaXIpOworCQkJbW1jX29tYXBfZ2V0X2RtYV9kaXIoaG9zdCwgaG9zdC0+ZGF0YSkpOwogCQlvbWFwX2ZyZWVfZG1hKGhvc3QtPmRtYV9jaCk7CiAJCWhvc3QtPmRtYV9jaCA9IC0xOwogCQl1cCgmaG9zdC0+c2VtKTsKIAl9CiAJaG9zdC0+ZGF0YSA9IE5VTEw7Ci0JaG9zdC0+ZGF0YWRpciA9IE9NQVBfTU1DX0RBVEFESVJfTk9ORTsKIH0KIAogLyoKQEAgLTQxMiw3ICs0MzEsNyBAQAogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAlpbnQgZW5kX2NtZCA9IDAsIGVuZF90cmFucyA9IDAsIHN0YXR1czsKIAotCWlmIChob3N0LT5jbWQgPT0gTlVMTCAmJiBob3N0LT5kYXRhID09IE5VTEwpIHsKKwlpZiAoaG9zdC0+bXJxID09IE5VTEwpIHsKIAkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULAogCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNUQVQpKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNDM3LDE4ICs0NTYsMjQgQEAKIAkJCQl9CiAJCQkJZW5kX2NtZCA9IDE7CiAJCQl9Ci0JCQlpZiAoaG9zdC0+ZGF0YSkgewotCQkJCW1tY19kbWFfY2xlYW51cChob3N0KTsKKwkJCWlmIChob3N0LT5kYXRhIHx8IGhvc3QtPnJlc3BvbnNlX2J1c3kpIHsKKwkJCQlpZiAoaG9zdC0+ZGF0YSkKKwkJCQkJbW1jX2RtYV9jbGVhbnVwKGhvc3QsIC1FVElNRURPVVQpOworCQkJCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOwogCQkJCW1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CiAJCQl9CiAJCX0KIAkJaWYgKChzdGF0dXMgJiBEQVRBX1RJTUVPVVQpIHx8CiAJCQkoc3RhdHVzICYgREFUQV9DUkMpKSB7Ci0JCQlpZiAoaG9zdC0+ZGF0YSkgewotCQkJCWlmIChzdGF0dXMgJiBEQVRBX1RJTUVPVVQpCi0JCQkJCW1tY19kbWFfY2xlYW51cChob3N0KTsKKwkJCWlmIChob3N0LT5kYXRhIHx8IGhvc3QtPnJlc3BvbnNlX2J1c3kpIHsKKwkJCQlpbnQgZXJyID0gKHN0YXR1cyAmIERBVEFfVElNRU9VVCkgPworCQkJCQkJLUVUSU1FRE9VVCA6IC1FSUxTRVE7CisKKwkJCQlpZiAoaG9zdC0+ZGF0YSkKKwkJCQkJbW1jX2RtYV9jbGVhbnVwKGhvc3QsIGVycik7CiAJCQkJZWxzZQotCQkJCQlob3N0LT5kYXRhLT5lcnJvciA9IC1FSUxTRVE7CisJCQkJCWhvc3QtPm1ycS0+Y21kLT5lcnJvciA9IGVycjsKKwkJCQlob3N0LT5yZXNwb25zZV9idXN5ID0gMDsKIAkJCQltbWNfb21hcF9yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkQpOwogCQkJCWVuZF90cmFucyA9IDE7CiAJCQl9CkBAIC00NzMsNiArNDk4LDE5IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgdm9pZCBzZXRfc2RfYnVzX3Bvd2VyKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKKwkJCSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBTREJQKTsKKwlmb3IgKGkgPSAwOyBpIDwgbG9vcHNfcGVyX2ppZmZ5OyBpKyspIHsKKwkJaWYgKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIFNEQlApCisJCQlicmVhazsKKwkJY3B1X3JlbGF4KCk7CisJfQorfQorCiAvKgogICogU3dpdGNoIE1NQyBpbnRlcmZhY2Ugdm9sdGFnZSAuLi4gb25seSByZWxldmFudCBmb3IgTU1DMS4KICAqCkBAIC00ODUsOSArNTIzLDYgQEAKIAl1MzIgcmVnX3ZhbCA9IDA7CiAJaW50IHJldDsKIAotCWlmIChob3N0LT5pZCAhPSBPTUFQX01NQzFfREVWSUQpCi0JCXJldHVybiAwOwotCiAJLyogRGlzYWJsZSB0aGUgY2xvY2tzICovCiAJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CkBAIC01MzIsOSArNTY3LDcgQEAKIAkJcmVnX3ZhbCB8PSBTRFZTMzA7CiAKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsIHJlZ192YWwpOwotCi0JT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBTREJQKTsKKwlzZXRfc2RfYnVzX3Bvd2VyKGhvc3QpOwogCiAJcmV0dXJuIDA7CiBlcnI6CkBAIC01NTEsNyArNTg0LDEwIEBACiAJCQkJCQltbWNfY2FyZGRldGVjdF93b3JrKTsKIAlzdHJ1Y3Qgb21hcF9tbWNfc2xvdF9kYXRhICpzbG90ID0gJm1tY19zbG90KGhvc3QpOwogCi0JaG9zdC0+Y2FyZGRldGVjdCA9IHNsb3QtPmNhcmRfZGV0ZWN0KHNsb3QtPmNhcmRfZGV0ZWN0X2lycSk7CisJaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KQorCQlob3N0LT5jYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3Qoc2xvdC0+Y2FyZF9kZXRlY3RfaXJxKTsKKwllbHNlCisJCWhvc3QtPmNhcmRkZXRlY3QgPSAtRU5PU1lTOwogCiAJc3lzZnNfbm90aWZ5KCZob3N0LT5tbWMtPmNsYXNzX2Rldi5rb2JqLCBOVUxMLCAiY292ZXJfc3dpdGNoIik7CiAJaWYgKGhvc3QtPmNhcmRkZXRlY3QpIHsKQEAgLTU3NCw2ICs2MTAsNDggQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgbW1jX29tYXBfZ2V0X2RtYV9zeW5jX2RldihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwKKwkJCQkgICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwlpbnQgc3luY19kZXY7CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJc3luY19kZXYgPSBob3N0LT5kbWFfbGluZV90eDsKKwllbHNlCisJCXN5bmNfZGV2ID0gaG9zdC0+ZG1hX2xpbmVfcng7CisJcmV0dXJuIHN5bmNfZGV2OworfQorCitzdGF0aWMgdm9pZCBtbWNfb21hcF9jb25maWdfZG1hX3BhcmFtcyhzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwKKwkJCQkgICAgICAgc3RydWN0IG1tY19kYXRhICpkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCkKK3sKKwlpbnQgYmxrc3osIG5ibGssIGRtYV9jaDsKKworCWRtYV9jaCA9IGhvc3QtPmRtYV9jaDsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKKwkJCShob3N0LT5tYXBiYXNlICsgT01BUF9IU01NQ19EQVRBKSwgMCwgMCk7CisJCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQlzZ19kbWFfYWRkcmVzcyhzZ2wpLCAwLCAwKTsKKwl9IGVsc2UgeworCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhkbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCQkoaG9zdC0+bWFwYmFzZSArIE9NQVBfSFNNTUNfREFUQSksIDAsIDApOworCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCXNnX2RtYV9hZGRyZXNzKHNnbCksIDAsIDApOworCX0KKworCWJsa3N6ID0gaG9zdC0+ZGF0YS0+Ymxrc3o7CisJbmJsayA9IHNnX2RtYV9sZW4oc2dsKSAvIGJsa3N6OworCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhkbWFfY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQlibGtzeiAvIDQsIG5ibGssIE9NQVBfRE1BX1NZTkNfRlJBTUUsCisJCQltbWNfb21hcF9nZXRfZG1hX3N5bmNfZGV2KGhvc3QsIGRhdGEpLAorCQkJIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSk7CisKKwlvbWFwX3N0YXJ0X2RtYShkbWFfY2gpOworfQorCiAvKgogICogRE1BIGNhbGwgYmFjayBmdW5jdGlvbgogICovCkBAIC01ODcsNiArNjY1LDE0IEBACiAJaWYgKGhvc3QtPmRtYV9jaCA8IDApCiAJCXJldHVybjsKIAorCWhvc3QtPmRtYV9zZ19pZHgrKzsKKwlpZiAoaG9zdC0+ZG1hX3NnX2lkeCA8IGhvc3QtPmRtYV9sZW4pIHsKKwkJLyogRmlyZSB1cCB0aGUgbmV4dCB0cmFuc2Zlci4gKi8KKwkJbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbXMoaG9zdCwgaG9zdC0+ZGF0YSwKKwkJCQkJICAgaG9zdC0+ZGF0YS0+c2cgKyBob3N0LT5kbWFfc2dfaWR4KTsKKwkJcmV0dXJuOworCX0KKwogCW9tYXBfZnJlZV9kbWEoaG9zdC0+ZG1hX2NoKTsKIAlob3N0LT5kbWFfY2ggPSAtMTsKIAkvKgpAQCAtNTk3LDM4ICs2ODMsMjggQEAKIH0KIAogLyoKLSAqIENvbmZpZ3VyZSBkbWEgc3JjIGFuZCBkZXN0aW5hdGlvbiBwYXJhbWV0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbShpbnQgc3luY19kaXIsIHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAotCQkJCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoc3luY19kaXIgPT0gMCkgewotCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaG9zdC0+ZG1hX2NoLCAwLAotCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkoaG9zdC0+bWFwYmFzZSArIE9NQVBfSFNNTUNfREFUQSksIDAsIDApOwotCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhob3N0LT5kbWFfY2gsIDAsCi0JCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKLQkJCXNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1swXSksIDAsIDApOwotCX0gZWxzZSB7Ci0JCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGhvc3QtPmRtYV9jaCwgMCwKLQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJKGhvc3QtPm1hcGJhc2UgKyBPTUFQX0hTTU1DX0RBVEEpLCAwLCAwKTsKLQkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGhvc3QtPmRtYV9jaCwgMCwKLQkJCU9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnWzBdKSwgMCwgMCk7Ci0JfQotCXJldHVybiAwOwotfQotLyoKICAqIFJvdXRpbmUgdG8gY29uZmlndXJlIGFuZCBzdGFydCBETUEgZm9yIHRoZSBNTUMgY2FyZAogICovCiBzdGF0aWMgaW50CiBtbWNfb21hcF9zdGFydF9kbWFfdHJhbnNmZXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQogewotCWludCBzeW5jX2Rldiwgc3luY19kaXIgPSAwOwotCWludCBkbWFfY2ggPSAwLCByZXQgPSAwLCBlcnIgPSAxOworCWludCBkbWFfY2ggPSAwLCByZXQgPSAwLCBlcnIgPSAxLCBpOwogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IHJlcS0+ZGF0YTsKIAorCS8qIFNhbml0eSBjaGVjazogYWxsIHRoZSBTRyBlbnRyaWVzIG11c3QgYmUgYWxpZ25lZCBieSBibG9jayBzaXplLiAqLworCWZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWFfbGVuOyBpKyspIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CisKKwkJc2dsID0gZGF0YS0+c2cgKyBpOworCQlpZiAoc2dsLT5sZW5ndGggJSBkYXRhLT5ibGtzeikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoKGRhdGEtPmJsa3N6ICUgNCkgIT0gMCkKKwkJLyogUkVWSVNJVDogVGhlIE1NQyBidWZmZXIgaW5jcmVtZW50cyBvbmx5IHdoZW4gTVNCIGlzIHdyaXR0ZW4uCisJCSAqIFJldHVybiBlcnJvciBmb3IgYmxrc3ogd2hpY2ggaXMgbm9uIG11bHRpcGxlIG9mIGZvdXIuCisJCSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBETUEgdHJhbnNmZXIgaXMgc3RpbGwgYWN0aXZlLAogCSAqIHdlIHdhaXQgZm9yIHRpbWVvdXQgcGVyaW9kIGFuZCBmcmVlIHRoZSBkbWEKQEAgLTY0Nyw0OSArNzIzLDIyIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICghKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpKSB7Ci0JCWhvc3QtPmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7Ci0JCWlmIChob3N0LT5pZCA9PSBPTUFQX01NQzFfREVWSUQpCi0JCQlzeW5jX2RldiA9IE9NQVAyNFhYX0RNQV9NTUMxX1JYOwotCQllbHNlCi0JCQlzeW5jX2RldiA9IE9NQVAyNFhYX0RNQV9NTUMyX1JYOwotCX0gZWxzZSB7Ci0JCWhvc3QtPmRtYV9kaXIgPSBETUFfVE9fREVWSUNFOwotCQlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKQotCQkJc3luY19kZXYgPSBPTUFQMjRYWF9ETUFfTU1DMV9UWDsKLQkJZWxzZQotCQkJc3luY19kZXYgPSBPTUFQMjRYWF9ETUFfTU1DMl9UWDsKLQl9Ci0KLQlyZXQgPSBvbWFwX3JlcXVlc3RfZG1hKHN5bmNfZGV2LCAiTU1DL1NEIiwgbW1jX29tYXBfZG1hX2NiLAotCQkJaG9zdCwgJmRtYV9jaCk7CisJcmV0ID0gb21hcF9yZXF1ZXN0X2RtYShtbWNfb21hcF9nZXRfZG1hX3N5bmNfZGV2KGhvc3QsIGRhdGEpLCAiTU1DL1NEIiwKKwkJCSAgICAgICBtbWNfb21hcF9kbWFfY2IsaG9zdCwgJmRtYV9jaCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAorCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJCSIlczogb21hcF9yZXF1ZXN0X2RtYSgpIGZhaWxlZCB3aXRoICVkXG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaG9zdC0+ZG1hX2xlbiA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKLQkJCWRhdGEtPnNnX2xlbiwgaG9zdC0+ZG1hX2Rpcik7CisJCQlkYXRhLT5zZ19sZW4sIG1tY19vbWFwX2dldF9kbWFfZGlyKGhvc3QsIGRhdGEpKTsKIAlob3N0LT5kbWFfY2ggPSBkbWFfY2g7CisJaG9zdC0+ZG1hX3NnX2lkeCA9IDA7CiAKLQlpZiAoIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSkKLQkJbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbSgxLCBob3N0LCBkYXRhKTsKLQllbHNlCi0JCW1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW0oMCwgaG9zdCwgZGF0YSk7CisJbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbXMoaG9zdCwgZGF0YSwgZGF0YS0+c2cpOwogCi0JaWYgKChkYXRhLT5ibGtzeiAlIDQpID09IDApCi0JCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZG1hX2NoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAotCQkJKGRhdGEtPmJsa3N6IC8gNCksIGRhdGEtPmJsb2NrcywgT01BUF9ETUFfU1lOQ19GUkFNRSwKLQkJCXN5bmNfZGV2LCBzeW5jX2Rpcik7Ci0JZWxzZQotCQkvKiBSRVZJU0lUOiBUaGUgTU1DIGJ1ZmZlciBpbmNyZW1lbnRzIG9ubHkgd2hlbiBNU0IgaXMgd3JpdHRlbi4KLQkJICogUmV0dXJuIGVycm9yIGZvciBibGtzeiB3aGljaCBpcyBub24gbXVsdGlwbGUgb2YgZm91ci4KLQkJICovCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jb21hcF9zdGFydF9kbWEoZG1hX2NoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzM5LDcgKzc4OCw2IEBACiAJaG9zdC0+ZGF0YSA9IHJlcS0+ZGF0YTsKIAogCWlmIChyZXEtPmRhdGEgPT0gTlVMTCkgewotCQlob3N0LT5kYXRhZGlyID0gT01BUF9NTUNfREFUQURJUl9OT05FOwogCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJMSywgMCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTc0OCw5ICs3OTYsNiBAQAogCQkJCQl8IChyZXEtPmRhdGEtPmJsb2NrcyA8PCAxNikpOwogCXNldF9kYXRhX3RpbWVvdXQoaG9zdCwgcmVxKTsKIAotCWhvc3QtPmRhdGFkaXIgPSAocmVxLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSA/Ci0JCQlPTUFQX01NQ19EQVRBRElSX1dSSVRFIDogT01BUF9NTUNfREFUQURJUl9SRUFEOwotCiAJaWYgKGhvc3QtPnVzZV9kbWEpIHsKIAkJcmV0ID0gbW1jX29tYXBfc3RhcnRfZG1hX3RyYW5zZmVyKGhvc3QsIHJlcSk7CiAJCWlmIChyZXQgIT0gMCkgewpAQCAtNzgyLDM2ICs4MjcsMjkgQEAKIAl1MTYgZHNvciA9IDA7CiAJdW5zaWduZWQgbG9uZyByZWd2YWw7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBjb247CiAKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09GRjoKIAkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMCwgMCk7Ci0JCS8qCi0JCSAqIFJlc2V0IGludGVyZmFjZSB2b2x0YWdlIHRvIDNWIGlmIGl0J3MgMS44ViBub3c7Ci0JCSAqIG9ubHkgcmVsZXZhbnQgb24gTU1DLTEsIHRoZSBvdGhlcnMgYWx3YXlzIHVzZSAxLjhWLgotCQkgKgotCQkgKiBSRVZJU0lUOiBJZiB3ZSBhcmUgYWJsZSB0byBkZXRlY3QgY2FyZHMgYWZ0ZXIgdW5wbHVnZ2luZwotCQkgKiBhIDEuOFYgY2FyZCwgdGhpcyBjb2RlIHNob3VsZCBub3QgYmUgbmVlZGVkLgotCQkgKi8KLQkJaWYgKGhvc3QtPmlkICE9IE9NQVBfTU1DMV9ERVZJRCkKLQkJCWJyZWFrOwotCQlpZiAoIShPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiBTRFZTREVUKSkgewotCQkJaW50IHZkZCA9IGZscyhob3N0LT5tbWMtPm9jcl9hdmFpbCkgLSAxOwotCQkJaWYgKG9tYXBfbW1jX3N3aXRjaF9vcGNvbmQoaG9zdCwgdmRkKSAhPSAwKQotCQkJCWhvc3QtPm1tYy0+aW9zLnZkZCA9IHZkZDsKLQkJfQogCQlicmVhazsKIAljYXNlIE1NQ19QT1dFUl9VUDoKIAkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwgaW9zLT52ZGQpOwogCQlicmVhazsKIAl9CiAKKwljb24gPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKTsKIAlzd2l0Y2ggKG1tYy0+aW9zLmJ1c193aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF84OgorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uIHwgRFc4KTsKKwkJYnJlYWs7CiAJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gJiB+RFc4KTsKIAkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAogCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgRk9VUl9CSVQpOwogCQlicmVhazsKIAljYXNlIE1NQ19CVVNfV0lEVEhfMToKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiAmIH5EVzgpOwogCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCiAJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiB+Rk9VUl9CSVQpOwogCQlicmVhazsKQEAgLTg5MSw2ICs5MjksMzMgQEAKIAlyZXR1cm4gcGRhdGEtPnNsb3RzWzBdLmdldF9ybyhob3N0LT5kZXYsIDApOwogfQogCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2luaXQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCit7CisJdTMyIGhjdGwsIGNhcGEsIHZhbHVlOworCisJLyogT25seSBNTUMxIHN1cHBvcnRzIDMuMFYgKi8KKwlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKSB7CisJCWhjdGwgPSBTRFZTMzA7CisJCWNhcGEgPSBWUzMwIHwgVlMxODsKKwl9IGVsc2UgeworCQloY3RsID0gU0RWUzE4OworCQljYXBhID0gVlMxODsKKwl9CisKKwl2YWx1ZSA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIH5TRFZTX01BU0s7CisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLCB2YWx1ZSB8IGhjdGwpOworCisJdmFsdWUgPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ0FQQSk7CisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDQVBBLCB2YWx1ZSB8IGNhcGEpOworCisJLyogU2V0IHRoZSBjb250cm9sbGVyIHRvIEFVVE8gSURMRSBtb2RlICovCisJdmFsdWUgPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ09ORklHKTsKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NPTkZJRywgdmFsdWUgfCBBVVRPSURMRSk7CisKKwkvKiBTZXQgU0QgYnVzIHBvd2VyIGJpdCAqLworCXNldF9zZF9idXNfcG93ZXIoaG9zdCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19vbWFwX29wcyA9IHsKIAkucmVxdWVzdCA9IG9tYXBfbW1jX3JlcXVlc3QsCiAJLnNldF9pb3MgPSBvbWFwX21tY19zZXRfaW9zLApAQCAtOTA2LDcgKzk3MSw2IEBACiAJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQgPSAwLCBpcnE7Ci0JdTMyIGhjdGwsIGNhcGE7CiAKIAlpZiAocGRhdGEgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQbGF0Zm9ybSBEYXRhIGlzIG1pc3NpbmdcbiIpOwpAQCAtOTk2LDEwICsxMDYwLDExIEBACiAJCWVsc2UKIAkJCWhvc3QtPmRiY2xrX2VuYWJsZWQgPSAxOwogCi0jaWZkZWYgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UKLQltbWMtPm1heF9waHlzX3NlZ3MgPSAxOwotCW1tYy0+bWF4X2h3X3NlZ3MgPSAxOwotI2VuZGlmCisJLyogU2luY2Ugd2UgZG8gb25seSBTRyBlbXVsYXRpb24sIHdlIGNhbiBoYXZlIGFzIG1hbnkgc2VncworCSAqIGFzIHdlIHdhbnQuICovCisJbW1jLT5tYXhfcGh5c19zZWdzID0gMTAyNDsKKwltbWMtPm1heF9od19zZWdzID0gMTAyNDsKKwogCW1tYy0+bWF4X2Jsa19zaXplID0gNTEyOyAgICAgICAvKiBCbG9jayBMZW5ndGggYXQgbWF4IGNhbiBiZSAxMDI0ICovCiAJbW1jLT5tYXhfYmxrX2NvdW50ID0gMHhGRkZGOyAgICAvKiBOby4gb2YgQmxvY2tzIGlzIDE2IGJpdHMgKi8KIAltbWMtPm1heF9yZXFfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OwpAQCAtMTAwOCwzMiArMTA3MywzMiBAQAogCW1tYy0+b2NyX2F2YWlsID0gbW1jX3Nsb3QoaG9zdCkub2NyX21hc2s7CiAJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEOwogCi0JaWYgKHBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS53aXJlcyA+PSA0KQorCWlmIChwZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0ud2lyZXMgPj0gOCkKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfOF9CSVRfREFUQTsKKwllbHNlIGlmIChwZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0ud2lyZXMgPj0gNCkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAotCS8qIE9ubHkgTU1DMSBzdXBwb3J0cyAzLjBWICovCi0JaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkgewotCQloY3RsID0gU0RWUzMwOwotCQljYXBhID0gVlMzMCB8IFZTMTg7Ci0JfSBlbHNlIHsKLQkJaGN0bCA9IFNEVlMxODsKLQkJY2FwYSA9IFZTMTg7CisJb21hcF9oc21tY19pbml0KGhvc3QpOworCisJLyogU2VsZWN0IERNQSBsaW5lcyAqLworCXN3aXRjaCAoaG9zdC0+aWQpIHsKKwljYXNlIE9NQVBfTU1DMV9ERVZJRDoKKwkJaG9zdC0+ZG1hX2xpbmVfdHggPSBPTUFQMjRYWF9ETUFfTU1DMV9UWDsKKwkJaG9zdC0+ZG1hX2xpbmVfcnggPSBPTUFQMjRYWF9ETUFfTU1DMV9SWDsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX01NQzJfREVWSUQ6CisJCWhvc3QtPmRtYV9saW5lX3R4ID0gT01BUDI0WFhfRE1BX01NQzJfVFg7CisJCWhvc3QtPmRtYV9saW5lX3J4ID0gT01BUDI0WFhfRE1BX01NQzJfUlg7CisJCWJyZWFrOworCWNhc2UgT01BUF9NTUMzX0RFVklEOgorCQlob3N0LT5kbWFfbGluZV90eCA9IE9NQVAzNFhYX0RNQV9NTUMzX1RYOworCQlob3N0LT5kbWFfbGluZV9yeCA9IE9NQVAzNFhYX0RNQV9NTUMzX1JYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkludmFsaWQgTU1DIGlkXG4iKTsKKwkJZ290byBlcnJfaXJxOwogCX0KIAotCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IGhjdGwpOwotCi0JT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDQVBBLAotCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENBUEEpIHwgY2FwYSk7Ci0KLQkvKiBTZXQgdGhlIGNvbnRyb2xsZXIgdG8gQVVUTyBJRExFIG1vZGUgKi8KLQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NPTkZJRywKLQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDT05GSUcpIHwgQVVUT0lETEUpOwotCi0JLyogU2V0IFNEIGJ1cyBwb3dlciBiaXQgKi8KLQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCi0JCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBTREJQKTsKLQogCS8qIFJlcXVlc3QgSVJRIGZvciBNTUMgb3BlcmF0aW9ucyAqLwogCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbW1jX29tYXBfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkJbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpOwpAQCAtMTA1MSw3ICsxMTE2LDcgQEAKIAl9CiAKIAkvKiBSZXF1ZXN0IElSUSBmb3IgY2FyZCBkZXRlY3QgKi8KLQlpZiAoKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSkgJiYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KSkgeworCWlmICgobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxKSkgewogCQlyZXQgPSByZXF1ZXN0X2lycShtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEsCiAJCQkJICBvbWFwX21tY19jZF9oYW5kbGVyLAogCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HCkBAIC0xMDc0LDggKzExMzksOCBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX3Nsb3RfbmFtZTsKIAl9Ci0JaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSAmJiBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCAmJgotCQkJaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLmdldF9jb3Zlcl9zdGF0ZSkgeworCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEgJiYKKwkgICAgaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLmdldF9jb3Zlcl9zdGF0ZSkgewogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LAogCQkJCQkmZGV2X2F0dHJfY292ZXJfc3dpdGNoKTsKIAkJaWYgKHJldCA8IDApCkBAIC0xMTczLDIwICsxMjM4LDggQEAKIAkJCQkJCSIgbGV2ZWwgc3VzcGVuZFxuIik7CiAJCQl9CiAKLQkJCWlmIChob3N0LT5pZCA9PSBPTUFQX01NQzFfREVWSUQKLQkJCQkJJiYgIShPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkKLQkJCQkJCQkmIFNEVlNERVQpKSB7Ci0JCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQkJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkKLQkJCQkJJiBTRFZTQ0xSKTsKLQkJCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCi0JCQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKQotCQkJCQl8IFNEVlMzMCk7Ci0JCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQkJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkKLQkJCQkJfCBTREJQKTsKLQkJCX0KLQorCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAorCQkJCQkgT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgflNEQlApOwogCQkJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CiAJCQljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKIAkJCWNsa19kaXNhYmxlKGhvc3QtPmRiY2xrKTsKQEAgLTEyMjIsNiArMTI3NSw4IEBACiAJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJCQkJIkVuYWJsaW5nIGRlYm91bmNlIGNsayBmYWlsZWRcbiIpOwogCisJCW9tYXBfaHNtbWNfaW5pdChob3N0KTsKKwogCQlpZiAoaG9zdC0+cGRhdGEtPnJlc3VtZSkgewogCQkJcmV0ID0gaG9zdC0+cGRhdGEtPnJlc3VtZSgmcGRldi0+ZGV2LCBob3N0LT5zbG90X2lkKTsKIAkJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmNGFjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYwpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIE9wZW5GaXJtd2FyZSBiaW5kaW5ncyBmb3IgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQXV0aG9yczogWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4KKyAqCSAgICBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgInNkaGNpLmgiCisKK3N0cnVjdCBzZGhjaV9vZl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgcXVpcmtzOworCXN0cnVjdCBzZGhjaV9vcHMgb3BzOworfTsKKworc3RydWN0IHNkaGNpX29mX2hvc3QgeworCXVuc2lnbmVkIGludCBjbG9jazsKKwl1MTYgeGZlcl9tb2RlX3NoYWRvdzsKK307CisKKy8qCisgKiBPcHMgYW5kIHF1aXJrcyBmb3IgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyLgorICovCisKKyNkZWZpbmUgRVNESENfRE1BX1NZU0NUTAkweDQwYworI2RlZmluZSBFU0RIQ19ETUFfU05PT1AJCTB4MDAwMDAwNDAKKworI2RlZmluZSBFU0RIQ19TWVNURU1fQ09OVFJPTAkweDJjCisjZGVmaW5lIEVTREhDX0NMT0NLX01BU0sJMHgwMDAwZmZmMAorI2RlZmluZSBFU0RIQ19QUkVESVZfU0hJRlQJOAorI2RlZmluZSBFU0RIQ19ESVZJREVSX1NISUZUCTQKKyNkZWZpbmUgRVNESENfQ0xPQ0tfUEVSRU4JMHgwMDAwMDAwNAorI2RlZmluZSBFU0RIQ19DTE9DS19IQ0tFTgkweDAwMDAwMDAyCisjZGVmaW5lIEVTREhDX0NMT0NLX0lQR0VOCTB4MDAwMDAwMDEKKworc3RhdGljIHUzMiBlc2RoY19yZWFkbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fYmUzMihob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgdTE2IGVzZGhjX3JlYWR3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiBpbl9iZTE2KGhvc3QtPmlvYWRkciArIChyZWcgXiAweDIpKTsKK30KKworc3RhdGljIHU4IGVzZGhjX3JlYWRiKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiBpbl84KGhvc3QtPmlvYWRkciArIChyZWcgXiAweDMpKTsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfd3JpdGVsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKQoreworCW91dF9iZTMyKGhvc3QtPmlvYWRkciArIHJlZywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfd3JpdGV3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MTYgdmFsLCBpbnQgcmVnKQoreworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlpbnQgYmFzZSA9IHJlZyAmIH4weDM7CisJaW50IHNoaWZ0ID0gKHJlZyAmIDB4MikgKiA4OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFNESENJX1RSQU5TRkVSX01PREU6CisJCS8qCisJCSAqIFBvc3Rwb25lIHRoaXMgd3JpdGUsIHdlIG11c3QgZG8gaXQgdG9nZXRoZXIgd2l0aCBhCisJCSAqIGNvbW1hbmQgd3JpdGUgdGhhdCBpcyBkb3duIGJlbG93LgorCQkgKi8KKwkJb2ZfaG9zdC0+eGZlcl9tb2RlX3NoYWRvdyA9IHZhbDsKKwkJcmV0dXJuOworCWNhc2UgU0RIQ0lfQ09NTUFORDoKKwkJZXNkaGNfd3JpdGVsKGhvc3QsIHZhbCA8PCAxNiB8IG9mX2hvc3QtPnhmZXJfbW9kZV9zaGFkb3csCisJCQkgICAgIFNESENJX1RSQU5TRkVSX01PREUpOworCQlyZXR1cm47CisJY2FzZSBTREhDSV9CTE9DS19TSVpFOgorCQkvKgorCQkgKiBUd28gbGFzdCBETUEgYml0cyBhcmUgcmVzZXJ2ZWQsIGFuZCBmaXJzdCBvbmUgaXMgdXNlZCBmb3IKKwkJICogbm9uLXN0YW5kYXJkIGJsa3N6IG9mIDQwOTYgYnl0ZXMgdGhhdCB3ZSBkb24ndCBzdXBwb3J0CisJCSAqIHlldC4gU28gY2xlYXIgdGhlIERNQSBib3VuZGFyeSBiaXRzLgorCQkgKi8KKwkJdmFsICY9IH5TREhDSV9NQUtFX0JMS1NaKDB4NywgMCk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCX0KKwljbHJzZXRiaXRzX2JlMzIoaG9zdC0+aW9hZGRyICsgYmFzZSwgMHhmZmZmIDw8IHNoaWZ0LCB2YWwgPDwgc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBlc2RoY193cml0ZWIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IHZhbCwgaW50IHJlZykKK3sKKwlpbnQgYmFzZSA9IHJlZyAmIH4weDM7CisJaW50IHNoaWZ0ID0gKHJlZyAmIDB4MykgKiA4OworCisJY2xyc2V0Yml0c19iZTMyKGhvc3QtPmlvYWRkciArIGJhc2UgLCAweGZmIDw8IHNoaWZ0LCB2YWwgPDwgc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBlc2RoY19zZXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwlpbnQgZGl2OworCWludCBwcmVfZGl2ID0gMjsKKworCWNscmJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAorCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfCBFU0RIQ19DTE9DS19NQVNLKTsKKworCWlmIChjbG9jayA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmIChob3N0LT5tYXhfY2xrIC8gMTYgPiBjbG9jaykgeworCQlmb3IgKDsgcHJlX2RpdiA8IDI1NjsgcHJlX2RpdiAqPSAyKSB7CisJCQlpZiAoaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgPCBjbG9jayAqIDE2KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChkaXYgPSAxOyBkaXYgPD0gMTY7IGRpdisrKSB7CisJCWlmIChob3N0LT5tYXhfY2xrIC8gKGRpdiAqIHByZV9kaXYpIDw9IGNsb2NrKQorCQkJYnJlYWs7CisJfQorCisJcHJlX2RpdiA+Pj0gMTsKKworCXNldGJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAorCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfAorCQkgIGRpdiA8PCBFU0RIQ19ESVZJREVSX1NISUZUIHwgcHJlX2RpdiA8PCBFU0RIQ19QUkVESVZfU0hJRlQpOworCW1kZWxheSgxMDApOworb3V0OgorCWhvc3QtPmNsb2NrID0gY2xvY2s7Cit9CisKK3N0YXRpYyBpbnQgZXNkaGNfZW5hYmxlX2RtYShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzZXRiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfRE1BX1NZU0NUTCwgRVNESENfRE1BX1NOT09QKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfbWF4X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKworCXJldHVybiBvZl9ob3N0LT5jbG9jazsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfdGltZW91dF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisKKwlyZXR1cm4gb2ZfaG9zdC0+Y2xvY2sgLyAxMDAwOworfQorCitzdGF0aWMgc3RydWN0IHNkaGNpX29mX2RhdGEgc2RoY2lfZXNkaGMgPSB7CisJLnF1aXJrcyA9IFNESENJX1FVSVJLX0ZPUkNFX0JMS19TWl8yMDQ4IHwKKwkJICBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04gfAorCQkgIFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1QgfAorCQkgIFNESENJX1FVSVJLX05PX0JVU1lfSVJRIHwKKwkJICBTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSyB8CisJCSAgU0RIQ0lfUVVJUktfUElPX05FRURTX0RFTEFZIHwKKwkJICBTREhDSV9RVUlSS19SRVNUT1JFX0lSUVNfQUZURVJfUkVTRVQgfAorCQkgIFNESENJX1FVSVJLX05PX0NBUkRfTk9fUkVTRVQsCisJLm9wcyA9IHsKKwkJLnJlYWRsID0gZXNkaGNfcmVhZGwsCisJCS5yZWFkdyA9IGVzZGhjX3JlYWR3LAorCQkucmVhZGIgPSBlc2RoY19yZWFkYiwKKwkJLndyaXRlbCA9IGVzZGhjX3dyaXRlbCwKKwkJLndyaXRldyA9IGVzZGhjX3dyaXRldywKKwkJLndyaXRlYiA9IGVzZGhjX3dyaXRlYiwKKwkJLnNldF9jbG9jayA9IGVzZGhjX3NldF9jbG9jaywKKwkJLmVuYWJsZV9kbWEgPSBlc2RoY19lbmFibGVfZG1hLAorCQkuZ2V0X21heF9jbG9jayA9IGVzZGhjX2dldF9tYXhfY2xvY2ssCisJCS5nZXRfdGltZW91dF9jbG9jayA9IGVzZGhjX2dldF90aW1lb3V0X2Nsb2NrLAorCX0sCit9OworCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgc2RoY2lfb2Zfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKworCXJldHVybiBtbWNfc3VzcGVuZF9ob3N0KGhvc3QtPm1tYywgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHNkaGNpX29mX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CisKKwlyZXR1cm4gbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPm1tYyk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgc2RoY2lfb2Zfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHNkaGNpX29mX3Jlc3VtZSBOVUxMCisKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZGhjaV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCBzZGhjaV9vZl9kYXRhICpzZGhjaV9vZl9kYXRhID0gbWF0Y2gtPmRhdGE7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3Q7CisJY29uc3QgdTMyICpjbGs7CisJaW50IHNpemU7CisJaW50IHJldDsKKworCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCisJCXJldHVybiAtRU5PREVWOworCisJaG9zdCA9IHNkaGNpX2FsbG9jX2hvc3QoJm9mZGV2LT5kZXYsIHNpemVvZigqb2ZfaG9zdCkpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIGhvc3QpOworCisJaG9zdC0+aW9hZGRyID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghaG9zdC0+aW9hZGRyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FkZHJfbWFwOworCX0KKworCWhvc3QtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwlpZiAoIWhvc3QtPmlycSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9ub19pcnE7CisJfQorCisJaG9zdC0+aHdfbmFtZSA9IGRldl9uYW1lKCZvZmRldi0+ZGV2KTsKKwlpZiAoc2RoY2lfb2ZfZGF0YSkgeworCQlob3N0LT5xdWlya3MgPSBzZGhjaV9vZl9kYXRhLT5xdWlya3M7CisJCWhvc3QtPm9wcyA9ICZzZGhjaV9vZl9kYXRhLT5vcHM7CisJfQorCisJY2xrID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2xvY2stZnJlcXVlbmN5IiwgJnNpemUpOworCWlmIChjbGsgJiYgc2l6ZSA9PSBzaXplb2YoKmNsaykgJiYgKmNsaykKKwkJb2ZfaG9zdC0+Y2xvY2sgPSAqY2xrOworCisJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYWRkX2hvc3Q7CisKKwlyZXR1cm4gMDsKKworZXJyX2FkZF9ob3N0OgorCWlycV9kaXNwb3NlX21hcHBpbmcoaG9zdC0+aXJxKTsKK2Vycl9ub19pcnE6CisJaW91bm1hcChob3N0LT5pb2FkZHIpOworZXJyX2FkZHJfbWFwOgorCXNkaGNpX2ZyZWVfaG9zdChob3N0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzZGhjaV9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCisJc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgMCk7CisJc2RoY2lfZnJlZV9ob3N0KGhvc3QpOworCWlycV9kaXNwb3NlX21hcHBpbmcoaG9zdC0+aXJxKTsKKwlpb3VubWFwKGhvc3QtPmlvYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNkaGNpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1lc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZXNkaGMiLCAuZGF0YSA9ICZzZGhjaV9lc2RoYywgfSwKKwl7IC5jb21wYXRpYmxlID0gImdlbmVyaWMtc2RoY2kiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNkaGNpX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgc2RoY2lfb2ZfZHJpdmVyID0geworCS5kcml2ZXIubmFtZSA9ICJzZGhjaS1vZiIsCisJLm1hdGNoX3RhYmxlID0gc2RoY2lfb2ZfbWF0Y2gsCisJLnByb2JlID0gc2RoY2lfb2ZfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNkaGNpX29mX3JlbW92ZSksCisJLnN1c3BlbmQgPSBzZGhjaV9vZl9zdXNwZW5kLAorCS5yZXN1bWUJPSBzZGhjaV9vZl9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZGhjaV9vZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc2RoY2lfb2ZfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNkaGNpX29mX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RoY2lfb2ZfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzZGhjaV9vZl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc2RoY2lfb2ZfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBPRiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+LCAiCisJICAgICAgIkFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IGFjY2I1OTIuLjMwZDhlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTQ4LDM1ICs0OCwzNSBAQAogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ID09PT09PT09PT09PT09IFJFR0lTVEVSIERVTVAgPT09PT09PT09PT09PT1cbiIpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogU3lzIGFkZHI6IDB4JTA4eCB8IFZlcnNpb246ICAweCUwOHhcbiIsCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKSwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9WRVJTSU9OKSk7CisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0RNQV9BRERSRVNTKSwKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfSE9TVF9WRVJTSU9OKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQmxrIHNpemU6IDB4JTA4eCB8IEJsayBjbnQ6ICAweCUwOHhcbiIsCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0JMT0NLX1NJWkUpLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19DT1VOVCkpOworCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9CTE9DS19TSVpFKSwKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQkxPQ0tfQ09VTlQpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBBcmd1bWVudDogMHglMDh4IHwgVHJuIG1vZGU6IDB4JTA4eFxuIiwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQVJHVU1FTlQpLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKSk7CisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0FSR1VNRU5UKSwKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfVFJBTlNGRVJfTU9ERSkpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFByZXNlbnQ6ICAweCUwOHggfCBIb3N0IGN0bDogMHglMDh4XG4iLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSwKLQkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKSk7CisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpLAorCQlzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBQb3dlcjogICAgMHglMDh4IHwgQmxrIGdhcDogIDB4JTA4eFxuIiwKLQkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUE9XRVJfQ09OVFJPTCksCi0JCXJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0JMT0NLX0dBUF9DT05UUk9MKSk7CisJCXNkaGNpX3JlYWRiKGhvc3QsIFNESENJX1BPV0VSX0NPTlRST0wpLAorCQlzZGhjaV9yZWFkYihob3N0LCBTREhDSV9CTE9DS19HQVBfQ09OVFJPTCkpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFdha2UtdXA6ICAweCUwOHggfCBDbG9jazogICAgMHglMDh4XG4iLAotCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9XQUtFX1VQX0NPTlRST0wpLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKSk7CisJCXNkaGNpX3JlYWRiKGhvc3QsIFNESENJX1dBS0VfVVBfQ09OVFJPTCksCisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0NMT0NLX0NPTlRST0wpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBUaW1lb3V0OiAgMHglMDh4IHwgSW50IHN0YXQ6IDB4JTA4eFxuIiwKLQkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfVElNRU9VVF9DT05UUk9MKSwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUykpOworCQlzZGhjaV9yZWFkYihob3N0LCBTREhDSV9USU1FT1VUX0NPTlRST0wpLAorCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9JTlRfU1RBVFVTKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogSW50IGVuYWI6IDB4JTA4eCB8IFNpZyBlbmFiOiAweCUwOHhcbiIsCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9FTkFCTEUpLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKSk7CisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0lOVF9FTkFCTEUpLAorCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9TSUdOQUxfRU5BQkxFKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQUMxMiBlcnI6IDB4JTA4eCB8IFNsb3QgaW50OiAweCUwOHhcbiIsCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0FDTUQxMl9FUlIpLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9TTE9UX0lOVF9TVEFUVVMpKTsKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQUNNRDEyX0VSUiksCisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX1NMT1RfSU5UX1NUQVRVUykpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IENhcHM6ICAgICAweCUwOHggfCBNYXggY3VycjogMHglMDh4XG4iLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9DQVBBQklMSVRJRVMpLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9NQVhfQ1VSUkVOVCkpOworCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpLAorCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9NQVhfQ1VSUkVOVCkpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiB9CkBAIC04NywxNyArODcsNjUgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBzZGhjaV9jbGVhcl9zZXRfaXJxcyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIGNsZWFyLCB1MzIgc2V0KQoreworCXUzMiBpZXI7CisKKwlpZXIgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9JTlRfRU5BQkxFKTsKKwlpZXIgJj0gfmNsZWFyOworCWllciB8PSBzZXQ7CisJc2RoY2lfd3JpdGVsKGhvc3QsIGllciwgU0RIQ0lfSU5UX0VOQUJMRSk7CisJc2RoY2lfd3JpdGVsKGhvc3QsIGllciwgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3VubWFza19pcnFzKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgaXJxcykKK3sKKwlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCAwLCBpcnFzKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfbWFza19pcnFzKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgaXJxcykKK3sKKwlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBpcnFzLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfc2V0X2NhcmRfZGV0ZWN0aW9uKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgaXJxcyA9IFNESENJX0lOVF9DQVJEX1JFTU9WRSB8IFNESENJX0lOVF9DQVJEX0lOU0VSVDsKKworCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04pCisJCXJldHVybjsKKworCWlmIChlbmFibGUpCisJCXNkaGNpX3VubWFza19pcnFzKGhvc3QsIGlycXMpOworCWVsc2UKKwkJc2RoY2lfbWFza19pcnFzKGhvc3QsIGlycXMpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc2RoY2lfc2V0X2NhcmRfZGV0ZWN0aW9uKGhvc3QsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV9kaXNhYmxlX2NhcmRfZGV0ZWN0aW9uKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXNkaGNpX3NldF9jYXJkX2RldGVjdGlvbihob3N0LCBmYWxzZSk7Cit9CisKIHN0YXRpYyB2b2lkIHNkaGNpX3Jlc2V0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCBtYXNrKQogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MzIgdW5pbml0aWFsaXplZF92YXIoaWVyKTsKIAogCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VUKSB7Ci0JCWlmICghKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYKKwkJaWYgKCEoc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJgogCQkJU0RIQ0lfQ0FSRF9QUkVTRU5UKSkKIAkJCXJldHVybjsKIAl9CiAKLQl3cml0ZWIobWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfU09GVFdBUkVfUkVTRVQpOworCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19SRVNUT1JFX0lSUVNfQUZURVJfUkVTRVQpCisJCWllciA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0lOVF9FTkFCTEUpOworCisJc2RoY2lfd3JpdGViKGhvc3QsIG1hc2ssIFNESENJX1NPRlRXQVJFX1JFU0VUKTsKIAogCWlmIChtYXNrICYgU0RIQ0lfUkVTRVRfQUxMKQogCQlob3N0LT5jbG9jayA9IDA7CkBAIC0xMDYsNyArMTU0LDcgQEAKIAl0aW1lb3V0ID0gMTAwOwogCiAJLyogaHcgY2xlYXJzIHRoZSBiaXQgd2hlbiBpdCdzIGRvbmUgKi8KLQl3aGlsZSAocmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfU09GVFdBUkVfUkVTRVQpICYgbWFzaykgeworCXdoaWxlIChzZGhjaV9yZWFkYihob3N0LCBTREhDSV9TT0ZUV0FSRV9SRVNFVCkgJiBtYXNrKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJlc2V0IDB4JXggbmV2ZXIgY29tcGxldGVkLlxuIiwKIAkJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgKGludCltYXNrKTsKQEAgLTExNiw0MiArMTY0LDQ0IEBACiAJCXRpbWVvdXQtLTsKIAkJbWRlbGF5KDEpOwogCX0KKworCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19SRVNUT1JFX0lSUVNfQUZURVJfUkVTRVQpCisJCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIFNESENJX0lOVF9BTExfTUFTSywgaWVyKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfaW5pdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKLQl1MzIgaW50bWFzazsKLQogCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0FMTCk7CiAKLQlpbnRtYXNrID0gU0RIQ0lfSU5UX0JVU19QT1dFUiB8IFNESENJX0lOVF9EQVRBX0VORF9CSVQgfAorCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIFNESENJX0lOVF9BTExfTUFTSywKKwkJU0RIQ0lfSU5UX0JVU19QT1dFUiB8IFNESENJX0lOVF9EQVRBX0VORF9CSVQgfAogCQlTREhDSV9JTlRfREFUQV9DUkMgfCBTREhDSV9JTlRfREFUQV9USU1FT1VUIHwgU0RIQ0lfSU5UX0lOREVYIHwKIAkJU0RIQ0lfSU5UX0VORF9CSVQgfCBTREhDSV9JTlRfQ1JDIHwgU0RIQ0lfSU5UX1RJTUVPVVQgfAotCQlTREhDSV9JTlRfQ0FSRF9SRU1PVkUgfCBTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfAotCQlTREhDSV9JTlRfREFUQV9BVkFJTCB8IFNESENJX0lOVF9TUEFDRV9BVkFJTCB8Ci0JCVNESENJX0lOVF9ETUFfRU5EIHwgU0RIQ0lfSU5UX0RBVEFfRU5EIHwgU0RIQ0lfSU5UX1JFU1BPTlNFIHwKLQkJU0RIQ0lfSU5UX0FETUFfRVJST1I7CisJCVNESENJX0lOVF9EQVRBX0VORCB8IFNESENJX0lOVF9SRVNQT05TRSk7Cit9CiAKLQl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7Ci0Jd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOworc3RhdGljIHZvaWQgc2RoY2lfcmVpbml0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXNkaGNpX2luaXQoaG9zdCk7CisJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9hY3RpdmF0ZV9sZWQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CiAJdTggY3RybDsKIAotCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOwogCWN0cmwgfD0gU0RIQ0lfQ1RSTF9MRUQ7Ci0Jd3JpdGViKGN0cmwsIGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2RlYWN0aXZhdGVfbGVkKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewogCXU4IGN0cmw7CiAKLQljdHJsID0gcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAljdHJsICY9IH5TREhDSV9DVFJMX0xFRDsKLQl3cml0ZWIoY3RybCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIH0KIAogI2lmZGVmIFNESENJX1VTRV9MRURTX0NMQVNTCkBAIC0yMDUsNyArMjU1LDcgQEAKIAogCQl3aGlsZSAobGVuKSB7CiAJCQlpZiAoY2h1bmsgPT0gMCkgewotCQkJCXNjcmF0Y2ggPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOworCQkJCXNjcmF0Y2ggPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9CVUZGRVIpOwogCQkJCWNodW5rID0gNDsKIAkJCX0KIApAQCAtMjU3LDcgKzMwNyw3IEBACiAJCQlsZW4tLTsKIAogCQkJaWYgKChjaHVuayA9PSA0KSB8fCAoKGxlbiA9PSAwKSAmJiAoYmxrc2l6ZSA9PSAwKSkpIHsKLQkJCQl3cml0ZWwoc2NyYXRjaCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQlVGRkVSKTsKKwkJCQlzZGhjaV93cml0ZWwoaG9zdCwgc2NyYXRjaCwgU0RIQ0lfQlVGRkVSKTsKIAkJCQljaHVuayA9IDA7CiAJCQkJc2NyYXRjaCA9IDA7CiAJCQl9CkBAIC0yOTIsNyArMzQyLDEwIEBACiAJCShob3N0LT5kYXRhLT5ibG9ja3MgPT0gMSkpCiAJCW1hc2sgPSB+MDsKIAotCXdoaWxlIChyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIG1hc2spIHsKKwl3aGlsZSAoc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBtYXNrKSB7CisJCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19QSU9fTkVFRFNfREVMQVkpCisJCQl1ZGVsYXkoMTAwKTsKKwogCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQogCQkJc2RoY2lfcmVhZF9ibG9ja19waW8oaG9zdCk7CiAJCWVsc2UKQEAgLTU2MSw2ICs2MTQsMTcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyB2b2lkIHNkaGNpX3NldF90cmFuc2Zlcl9pcnFzKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXUzMiBwaW9faXJxcyA9IFNESENJX0lOVF9EQVRBX0FWQUlMIHwgU0RIQ0lfSU5UX1NQQUNFX0FWQUlMOworCXUzMiBkbWFfaXJxcyA9IFNESENJX0lOVF9ETUFfRU5EIHwgU0RIQ0lfSU5UX0FETUFfRVJST1I7CisKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9SRVFfVVNFX0RNQSkKKwkJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgcGlvX2lycXMsIGRtYV9pcnFzKTsKKwllbHNlCisJCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIGRtYV9pcnFzLCBwaW9faXJxcyk7Cit9CisKIHN0YXRpYyB2b2lkIHNkaGNpX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXU4IGNvdW50OwpAQCAtNTgxLDcgKzY0NSw3IEBACiAJaG9zdC0+ZGF0YV9lYXJseSA9IDA7CiAKIAljb3VudCA9IHNkaGNpX2NhbGNfdGltZW91dChob3N0LCBkYXRhKTsKLQl3cml0ZWIoY291bnQsIGhvc3QtPmlvYWRkciArIFNESENJX1RJTUVPVVRfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGViKGhvc3QsIGNvdW50LCBTREhDSV9USU1FT1VUX0NPTlRST0wpOwogCiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkKIAkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfUkVRX1VTRV9ETUE7CkBAIC02NjEsOCArNzI1LDggQEAKIAkJCQlXQVJOX09OKDEpOwogCQkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9SRVFfVVNFX0RNQTsKIAkJCX0gZWxzZSB7Ci0JCQkJd3JpdGVsKGhvc3QtPmFkbWFfYWRkciwKLQkJCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfQURNQV9BRERSRVNTKTsKKwkJCQlzZGhjaV93cml0ZWwoaG9zdCwgaG9zdC0+YWRtYV9hZGRyLAorCQkJCQlTREhDSV9BRE1BX0FERFJFU1MpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaW50IHNnX2NudDsKQEAgLTY4MSw4ICs3NDUsOCBAQAogCQkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9SRVFfVVNFX0RNQTsKIAkJCX0gZWxzZSB7CiAJCQkJV0FSTl9PTihzZ19jbnQgIT0gMSk7Ci0JCQkJd3JpdGVsKHNnX2RtYV9hZGRyZXNzKGRhdGEtPnNnKSwKLQkJCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfRE1BX0FERFJFU1MpOworCQkJCXNkaGNpX3dyaXRlbChob3N0LCBzZ19kbWFfYWRkcmVzcyhkYXRhLT5zZyksCisJCQkJCVNESENJX0RNQV9BRERSRVNTKTsKIAkJCX0KIAkJfQogCX0KQEAgLTY5MywxNCArNzU3LDE0IEBACiAJICogaXMgQURNQS4KIAkgKi8KIAlpZiAoaG9zdC0+dmVyc2lvbiA+PSBTREhDSV9TUEVDXzIwMCkgewotCQljdHJsID0gcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwkJY3RybCA9IHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAJCWN0cmwgJj0gflNESENJX0NUUkxfRE1BX01BU0s7CiAJCWlmICgoaG9zdC0+ZmxhZ3MgJiBTREhDSV9SRVFfVVNFX0RNQSkgJiYKIAkJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKSkKIAkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9BRE1BMzI7CiAJCWVsc2UKIAkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9TRE1BOwotCQl3cml0ZWIoY3RybCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwkJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAJfQogCiAJaWYgKCEoaG9zdC0+ZmxhZ3MgJiBTREhDSV9SRVFfVVNFX0RNQSkpIHsKQEAgLTcwOSwxMCArNzczLDExIEBACiAJCWhvc3QtPmJsb2NrcyA9IGRhdGEtPmJsb2NrczsKIAl9CiAKKwlzZGhjaV9zZXRfdHJhbnNmZXJfaXJxcyhob3N0KTsKKwogCS8qIFdlIGRvIG5vdCBoYW5kbGUgRE1BIGJvdW5kYXJpZXMsIHNvIHNldCBpdCB0byBtYXggKDUxMiBLaUIpICovCi0Jd3JpdGV3KFNESENJX01BS0VfQkxLU1ooNywgZGF0YS0+Ymxrc3opLAotCQlob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19TSVpFKTsKLQl3cml0ZXcoZGF0YS0+YmxvY2tzLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19DT1VOVCk7CisJc2RoY2lfd3JpdGV3KGhvc3QsIFNESENJX01BS0VfQkxLU1ooNywgZGF0YS0+Ymxrc3opLCBTREhDSV9CTE9DS19TSVpFKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgZGF0YS0+YmxvY2tzLCBTREhDSV9CTE9DS19DT1VOVCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX3NldF90cmFuc2Zlcl9tb2RlKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LApAQCAtNzMzLDcgKzc5OCw3IEBACiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfUkVRX1VTRV9ETUEpCiAJCW1vZGUgfD0gU0RIQ0lfVFJOU19ETUE7CiAKLQl3cml0ZXcobW9kZSwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisJc2RoY2lfd3JpdGV3KGhvc3QsIG1vZGUsIFNESENJX1RSQU5TRkVSX01PREUpOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9maW5pc2hfZGF0YShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKQEAgLTgwMiw3ICs4NjcsNyBAQAogCWlmIChob3N0LT5tcnEtPmRhdGEgJiYgKGNtZCA9PSBob3N0LT5tcnEtPmRhdGEtPnN0b3ApKQogCQltYXNrICY9IH5TREhDSV9EQVRBX0lOSElCSVQ7CiAKLQl3aGlsZSAocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBtYXNrKSB7CisJd2hpbGUgKHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpICYgbWFzaykgewogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb250cm9sbGVyIG5ldmVyIHJlbGVhc2VkICIKIAkJCQkiaW5oaWJpdCBiaXQocykuXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CkBAIC04MjEsNyArODg2LDcgQEAKIAogCXNkaGNpX3ByZXBhcmVfZGF0YShob3N0LCBjbWQtPmRhdGEpOwogCi0Jd3JpdGVsKGNtZC0+YXJnLCBob3N0LT5pb2FkZHIgKyBTREhDSV9BUkdVTUVOVCk7CisJc2RoY2lfd3JpdGVsKGhvc3QsIGNtZC0+YXJnLCBTREhDSV9BUkdVTUVOVCk7CiAKIAlzZGhjaV9zZXRfdHJhbnNmZXJfbW9kZShob3N0LCBjbWQtPmRhdGEpOwogCkBAIC04NDksOCArOTE0LDcgQEAKIAlpZiAoY21kLT5kYXRhKQogCQlmbGFncyB8PSBTREhDSV9DTURfREFUQTsKIAotCXdyaXRldyhTREhDSV9NQUtFX0NNRChjbWQtPm9wY29kZSwgZmxhZ3MpLAotCQlob3N0LT5pb2FkZHIgKyBTREhDSV9DT01NQU5EKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgU0RIQ0lfTUFLRV9DTUQoY21kLT5vcGNvZGUsIGZsYWdzKSwgU0RIQ0lfQ09NTUFORCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2ZpbmlzaF9jb21tYW5kKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQpAQCAtODYzLDE1ICs5MjcsMTUgQEAKIAkJaWYgKGhvc3QtPmNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikgewogCQkJLyogQ1JDIGlzIHN0cmlwcGVkIHNvIHdlIG5lZWQgdG8gZG8gc29tZSBzaGlmdGluZy4gKi8KIAkJCWZvciAoaSA9IDA7aSA8IDQ7aSsrKSB7Ci0JCQkJaG9zdC0+Y21kLT5yZXNwW2ldID0gcmVhZGwoaG9zdC0+aW9hZGRyICsKKwkJCQlob3N0LT5jbWQtPnJlc3BbaV0gPSBzZGhjaV9yZWFkbChob3N0LAogCQkJCQlTREhDSV9SRVNQT05TRSArICgzLWkpKjQpIDw8IDg7CiAJCQkJaWYgKGkgIT0gMykKIAkJCQkJaG9zdC0+Y21kLT5yZXNwW2ldIHw9Ci0JCQkJCQlyZWFkYihob3N0LT5pb2FkZHIgKworCQkJCQkJc2RoY2lfcmVhZGIoaG9zdCwKIAkJCQkJCVNESENJX1JFU1BPTlNFICsgKDMtaSkqNC0xKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWhvc3QtPmNtZC0+cmVzcFswXSA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1JFU1BPTlNFKTsKKwkJCWhvc3QtPmNtZC0+cmVzcFswXSA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1JFU1BPTlNFKTsKIAkJfQogCX0KIApAQCAtODk1LDcgKzk1OSwxMyBAQAogCWlmIChjbG9jayA9PSBob3N0LT5jbG9jaykKIAkJcmV0dXJuOwogCi0Jd3JpdGV3KDAsIGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpOworCWlmIChob3N0LT5vcHMtPnNldF9jbG9jaykgeworCQlob3N0LT5vcHMtPnNldF9jbG9jayhob3N0LCBjbG9jayk7CisJCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSykKKwkJCXJldHVybjsKKwl9CisKKwlzZGhjaV93cml0ZXcoaG9zdCwgMCwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CiAKIAlpZiAoY2xvY2sgPT0gMCkKIAkJZ290byBvdXQ7CkBAIC05MDgsMTEgKzk3OCwxMSBAQAogCiAJY2xrID0gZGl2IDw8IFNESENJX0RJVklERVJfU0hJRlQ7CiAJY2xrIHw9IFNESENJX0NMT0NLX0lOVF9FTjsKLQl3cml0ZXcoY2xrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgY2xrLCBTREhDSV9DTE9DS19DT05UUk9MKTsKIAogCS8qIFdhaXQgbWF4IDEwIG1zICovCiAJdGltZW91dCA9IDEwOwotCXdoaWxlICghKChjbGsgPSByZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKSkKKwl3aGlsZSAoISgoY2xrID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpCiAJCSYgU0RIQ0lfQ0xPQ0tfSU5UX1NUQUJMRSkpIHsKIAkJaWYgKHRpbWVvdXQgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW50ZXJuYWwgY2xvY2sgbmV2ZXIgIgpAQCAtOTI1LDcgKzk5NSw3IEBACiAJfQogCiAJY2xrIHw9IFNESENJX0NMT0NLX0NBUkRfRU47Ci0Jd3JpdGV3KGNsaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGV3KGhvc3QsIGNsaywgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CiAKIG91dDoKIAlob3N0LT5jbG9jayA9IGNsb2NrOwpAQCAtOTM5LDcgKzEwMDksNyBAQAogCQlyZXR1cm47CiAKIAlpZiAocG93ZXIgPT0gKHVuc2lnbmVkIHNob3J0KS0xKSB7Ci0JCXdyaXRlYigwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwkJc2RoY2lfd3JpdGViKGhvc3QsIDAsIFNESENJX1BPV0VSX0NPTlRST0wpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTk0OCw3ICsxMDE4LDcgQEAKIAkgKiBhIG5ldyB2YWx1ZS4gU29tZSBjb250cm9sbGVycyBkb24ndCBzZWVtIHRvIGxpa2UgdGhpcyB0aG91Z2guCiAJICovCiAJaWYgKCEoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfU0lOR0xFX1BPV0VSX1dSSVRFKSkKLQkJd3JpdGViKDAsIGhvc3QtPmlvYWRkciArIFNESENJX1BPV0VSX0NPTlRST0wpOworCQlzZGhjaV93cml0ZWIoaG9zdCwgMCwgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CiAKIAlwd3IgPSBTREhDSV9QT1dFUl9PTjsKIApAQCAtOTczLDEwICsxMDQzLDkgQEAKIAkgKiBhbmQgc2V0IHR1cm4gb24gcG93ZXIgYXQgdGhlIHNhbWUgdGltZSwgc28gc2V0IHRoZSB2b2x0YWdlIGZpcnN0LgogCSAqLwogCWlmICgoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfTk9fU0lNVUxUX1ZERF9BTkRfUE9XRVIpKQotCQl3cml0ZWIocHdyICYgflNESENJX1BPV0VSX09OLAotCQkJCWhvc3QtPmlvYWRkciArIFNESENJX1BPV0VSX0NPTlRST0wpOworCQlzZGhjaV93cml0ZWIoaG9zdCwgcHdyICYgflNESENJX1BPV0VSX09OLCBTREhDSV9QT1dFUl9DT05UUk9MKTsKIAotCXdyaXRlYihwd3IsIGhvc3QtPmlvYWRkciArIFNESENJX1BPV0VSX0NPTlRST0wpOworCXNkaGNpX3dyaXRlYihob3N0LCBwd3IsIFNESENJX1BPV0VSX0NPTlRST0wpOwogCiBvdXQ6CiAJaG9zdC0+cG93ZXIgPSBwb3dlcjsKQEAgLTk5MSw2ICsxMDYwLDcgQEAKIHN0YXRpYyB2b2lkIHNkaGNpX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCWJvb2wgcHJlc2VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CkBAIC0xMDA1LDggKzEwNzUsMTQgQEAKIAogCWhvc3QtPm1ycSA9IG1ycTsKIAotCWlmICghKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgU0RIQ0lfQ0FSRF9QUkVTRU5UKQotCQl8fCAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9ERVZJQ0VfREVBRCkpIHsKKwkvKiBJZiBwb2xsaW5nLCBhc3N1bWUgdGhhdCB0aGUgY2FyZCBpcyBhbHdheXMgcHJlc2VudC4gKi8KKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OKQorCQlwcmVzZW50ID0gdHJ1ZTsKKwllbHNlCisJCXByZXNlbnQgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKSAmCisJCQkJU0RIQ0lfQ0FSRF9QUkVTRU5UOworCisJaWYgKCFwcmVzZW50IHx8IGhvc3QtPmZsYWdzICYgU0RIQ0lfREVWSUNFX0RFQUQpIHsKIAkJaG9zdC0+bXJxLT5jbWQtPmVycm9yID0gLUVOT01FRElVTTsKIAkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOwogCX0gZWxzZQpAQCAtMTAzNCw4ICsxMTEwLDggQEAKIAkgKiBTaG91bGQgY2xlYXIgb3V0IGFueSB3ZWlyZCBzdGF0ZXMuCiAJICovCiAJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGKSB7Ci0JCXdyaXRlbCgwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKTsKLQkJc2RoY2lfaW5pdChob3N0KTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsIDAsIFNESENJX1NJR05BTF9FTkFCTEUpOworCQlzZGhjaV9yZWluaXQoaG9zdCk7CiAJfQogCiAJc2RoY2lfc2V0X2Nsb2NrKGhvc3QsIGlvcy0+Y2xvY2spOwpAQCAtMTA0NSw3ICsxMTIxLDcgQEAKIAllbHNlCiAJCXNkaGNpX3NldF9wb3dlcihob3N0LCBpb3MtPnZkZCk7CiAKLQljdHJsID0gcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAogCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCiAJCWN0cmwgfD0gU0RIQ0lfQ1RSTF80QklUQlVTOwpAQCAtMTA1Nyw3ICsxMTMzLDcgQEAKIAllbHNlCiAJCWN0cmwgJj0gflNESENJX0NUUkxfSElTUEQ7CiAKLQl3cml0ZWIoY3RybCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAogCS8qCiAJICogU29tZSAoRU5FKSBjb250cm9sbGVycyBnbyBhcGVzaGl0IG9uIHNvbWUgaW9zIG9wZXJhdGlvbiwKQEAgLTEwODUsMTAgKzExNjEsMTIgQEAKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9ERVZJQ0VfREVBRCkKIAkJcHJlc2VudCA9IDA7CiAJZWxzZQotCQlwcmVzZW50ID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSk7CisJCXByZXNlbnQgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAorCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUKQorCQlyZXR1cm4gISEocHJlc2VudCAmIFNESENJX1dSSVRFX1BST1RFQ1QpOwogCXJldHVybiAhKHByZXNlbnQgJiBTREhDSV9XUklURV9QUk9URUNUKTsKIH0KIApAQCAtMTA5Niw3ICsxMTc0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBpZXI7CiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIApAQCAtMTEwNSwxNSArMTE4MiwxMCBAQAogCWlmIChob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKQogCQlnb3RvIG91dDsKIAotCWllciA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9FTkFCTEUpOwotCi0JaWVyICY9IH5TREhDSV9JTlRfQ0FSRF9JTlQ7CiAJaWYgKGVuYWJsZSkKLQkJaWVyIHw9IFNESENJX0lOVF9DQVJEX0lOVDsKLQotCXdyaXRlbChpZXIsIGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9FTkFCTEUpOwotCXdyaXRlbChpZXIsIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOwotCisJCXNkaGNpX3VubWFza19pcnFzKGhvc3QsIFNESENJX0lOVF9DQVJEX0lOVCk7CisJZWxzZQorCQlzZGhjaV9tYXNrX2lycXMoaG9zdCwgU0RIQ0lfSU5UX0NBUkRfSU5UKTsKIG91dDoKIAltbWlvd2IoKTsKIApAQCAtMTE0Miw3ICsxMjE0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIShyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIFNESENJX0NBUkRfUFJFU0VOVCkpIHsKKwlpZiAoIShzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIFNESENJX0NBUkRfUFJFU0VOVCkpIHsKIAkJaWYgKGhvc3QtPm1ycSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FyZCByZW1vdmVkIGR1cmluZyB0cmFuc2ZlciFcbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwpAQCAtMTM0Niw4ICsxNDE4LDggQEAKIAkJICogd2UgbmVlZCB0byBhdCBsZWFzdCByZXN0YXJ0IHRoZSB0cmFuc2Zlci4KIAkJICovCiAJCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0RNQV9FTkQpCi0JCQl3cml0ZWwocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfRE1BX0FERFJFU1MpLAotCQkJCWhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKTsKKwkJCXNkaGNpX3dyaXRlbChob3N0LCBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9ETUFfQUREUkVTUyksCisJCQkJU0RIQ0lfRE1BX0FERFJFU1MpOwogCiAJCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfRU5EKSB7CiAJCQlpZiAoaG9zdC0+Y21kKSB7CkBAIC0xMzczLDcgKzE0NDUsNyBAQAogCiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKIAotCWludG1hc2sgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwlpbnRtYXNrID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfSU5UX1NUQVRVUyk7CiAKIAlpZiAoIWludG1hc2sgfHwgaW50bWFzayA9PSAweGZmZmZmZmZmKSB7CiAJCXJlc3VsdCA9IElSUV9OT05FOwpAQCAtMTM4NCwyMiArMTQ1NiwyMiBAQAogCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaW50bWFzayk7CiAKIAlpZiAoaW50bWFzayAmIChTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfCBTREhDSV9JTlRfQ0FSRF9SRU1PVkUpKSB7Ci0JCXdyaXRlbChpbnRtYXNrICYgKFNESENJX0lOVF9DQVJEX0lOU0VSVCB8IFNESENJX0lOVF9DQVJEX1JFTU9WRSksCi0JCQlob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsIGludG1hc2sgJiAoU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwKKwkJCVNESENJX0lOVF9DQVJEX1JFTU9WRSksIFNESENJX0lOVF9TVEFUVVMpOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5jYXJkX3Rhc2tsZXQpOwogCX0KIAogCWludG1hc2sgJj0gfihTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfCBTREhDSV9JTlRfQ0FSRF9SRU1PVkUpOwogCiAJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfQ01EX01BU0spIHsKLQkJd3JpdGVsKGludG1hc2sgJiBTREhDSV9JTlRfQ01EX01BU0ssCi0JCQlob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsIGludG1hc2sgJiBTREhDSV9JTlRfQ01EX01BU0ssCisJCQlTREhDSV9JTlRfU1RBVFVTKTsKIAkJc2RoY2lfY21kX2lycShob3N0LCBpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLKTsKIAl9CiAKIAlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0spIHsKLQkJd3JpdGVsKGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9NQVNLLAotCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJCXNkaGNpX3dyaXRlbChob3N0LCBpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSywKKwkJCVNESENJX0lOVF9TVEFUVVMpOwogCQlzZGhjaV9kYXRhX2lycShob3N0LCBpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSyk7CiAJfQogCkBAIC0xNDEwLDcgKzE0ODIsNyBAQAogCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0JVU19QT1dFUikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYXJkIGlzIGNvbnN1bWluZyB0b28gbXVjaCBwb3dlciFcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7Ci0JCXdyaXRlbChTREhDSV9JTlRfQlVTX1BPV0VSLCBob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsIFNESENJX0lOVF9CVVNfUE9XRVIsIFNESENJX0lOVF9TVEFUVVMpOwogCX0KIAogCWludG1hc2sgJj0gflNESENJX0lOVF9CVVNfUE9XRVI7CkBAIC0xNDI1LDcgKzE0OTcsNyBAQAogCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGludG1hc2spOwogCQlzZGhjaV9kdW1wcmVncyhob3N0KTsKIAotCQl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJCXNkaGNpX3dyaXRlbChob3N0LCBpbnRtYXNrLCBTREhDSV9JTlRfU1RBVFVTKTsKIAl9CiAKIAlyZXN1bHQgPSBJUlFfSEFORExFRDsKQEAgLTE0NTUsNiArMTUyNyw4IEBACiB7CiAJaW50IHJldDsKIAorCXNkaGNpX2Rpc2FibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CisKIAlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KGhvc3QtPm1tYywgc3RhdGUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNDg3LDYgKzE1NjEsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzNyw3ICsxNjEzLDcgQEAKIAogCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0FMTCk7CiAKLQlob3N0LT52ZXJzaW9uID0gcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9WRVJTSU9OKTsKKwlob3N0LT52ZXJzaW9uID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfSE9TVF9WRVJTSU9OKTsKIAlob3N0LT52ZXJzaW9uID0gKGhvc3QtPnZlcnNpb24gJiBTREhDSV9TUEVDX1ZFUl9NQVNLKQogCQkJCT4+IFNESENJX1NQRUNfVkVSX1NISUZUOwogCWlmIChob3N0LT52ZXJzaW9uID4gU0RIQ0lfU1BFQ18yMDApIHsKQEAgLTE1NDYsNyArMTYyMiw3IEBACiAJCQlob3N0LT52ZXJzaW9uKTsKIAl9CiAKLQljYXBzID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0FQQUJJTElUSUVTKTsKKwljYXBzID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTKTsKIAogCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19GT1JDRV9ETUEpCiAJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9ETUE7CkBAIC0xNjE0LDE5ICsxNjkwLDI3IEBACiAKIAlob3N0LT5tYXhfY2xrID0KIAkJKGNhcHMgJiBTREhDSV9DTE9DS19CQVNFX01BU0spID4+IFNESENJX0NMT0NLX0JBU0VfU0hJRlQ7Ci0JaWYgKGhvc3QtPm1heF9jbGsgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBIYXJkd2FyZSBkb2Vzbid0IHNwZWNpZnkgYmFzZSBjbG9jayAiCi0JCQkiZnJlcXVlbmN5LlxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJaG9zdC0+bWF4X2NsayAqPSAxMDAwMDAwOworCWlmIChob3N0LT5tYXhfY2xrID09IDApIHsKKwkJaWYgKCFob3N0LT5vcHMtPmdldF9tYXhfY2xvY2spIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IGJhc2UgY2xvY2sgIgorCQkJICAgICAgICJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlob3N0LT5tYXhfY2xrID0gaG9zdC0+b3BzLT5nZXRfbWF4X2Nsb2NrKGhvc3QpOworCX0KIAogCWhvc3QtPnRpbWVvdXRfY2xrID0KIAkJKGNhcHMgJiBTREhDSV9USU1FT1VUX0NMS19NQVNLKSA+PiBTREhDSV9USU1FT1VUX0NMS19TSElGVDsKIAlpZiAoaG9zdC0+dGltZW91dF9jbGsgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBIYXJkd2FyZSBkb2Vzbid0IHNwZWNpZnkgdGltZW91dCBjbG9jayAiCi0JCQkiZnJlcXVlbmN5LlxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKCFob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IEhhcmR3YXJlIGRvZXNuJ3Qgc3BlY2lmeSB0aW1lb3V0IGNsb2NrICIKKwkJCSAgICAgICAiZnJlcXVlbmN5LlxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaG9zdC0+dGltZW91dF9jbGsgPSBob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKGhvc3QpOwogCX0KIAlpZiAoY2FwcyAmIFNESENJX1RJTUVPVVRfQ0xLX1VOSVQpCiAJCWhvc3QtPnRpbWVvdXRfY2xrICo9IDEwMDA7CkBAIC0xNjQyLDYgKzE3MjYsOSBAQAogCWlmIChjYXBzICYgU0RIQ0lfQ0FOX0RPX0hJU1BEKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9TRF9ISUdIU1BFRUQ7CiAKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OKQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCiAJbW1jLT5vY3JfYXZhaWwgPSAwOwogCWlmIChjYXBzICYgU0RIQ0lfQ0FOX1ZERF8zMzApCiAJCW1tYy0+b2NyX2F2YWlsIHw9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNDsKQEAgLTE2OTAsMTMgKzE3NzcsMTkgQEAKIAkgKiBNYXhpbXVtIGJsb2NrIHNpemUuIFRoaXMgdmFyaWVzIGZyb20gY29udHJvbGxlciB0byBjb250cm9sbGVyIGFuZAogCSAqIGlzIHNwZWNpZmllZCBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlZ2lzdGVyLgogCSAqLwotCW1tYy0+bWF4X2Jsa19zaXplID0gKGNhcHMgJiBTREhDSV9NQVhfQkxPQ0tfTUFTSykgPj4gU0RIQ0lfTUFYX0JMT0NLX1NISUZUOwotCWlmIChtbWMtPm1heF9ibGtfc2l6ZSA+PSAzKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIG1heGltdW0gYmxvY2sgc2l6ZSwgIgotCQkJImFzc3VtaW5nIDUxMiBieXRlc1xuIiwgbW1jX2hvc3RuYW1lKG1tYykpOwotCQltbWMtPm1heF9ibGtfc2l6ZSA9IDUxMjsKLQl9IGVsc2UKLQkJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTIgPDwgbW1jLT5tYXhfYmxrX3NpemU7CisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0ZPUkNFX0JMS19TWl8yMDQ4KSB7CisJCW1tYy0+bWF4X2Jsa19zaXplID0gMjsKKwl9IGVsc2UgeworCQltbWMtPm1heF9ibGtfc2l6ZSA9IChjYXBzICYgU0RIQ0lfTUFYX0JMT0NLX01BU0spID4+CisJCQkJU0RIQ0lfTUFYX0JMT0NLX1NISUZUOworCQlpZiAobW1jLT5tYXhfYmxrX3NpemUgPj0gMykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgbWF4aW11bSBibG9jayBzaXplLCAiCisJCQkJImFzc3VtaW5nIDUxMiBieXRlc1xuIiwgbW1jX2hvc3RuYW1lKG1tYykpOworCQkJbW1jLT5tYXhfYmxrX3NpemUgPSAwOworCQl9CisJfQorCisJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTIgPDwgbW1jLT5tYXhfYmxrX3NpemU7CiAKIAkvKgogCSAqIE1heGltdW0gYmxvY2sgY291bnQuCkBAIC0xNzQ2LDYgKzE4MzksOCBAQAogCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSk/IkEiOiIiLAogCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKT8iRE1BIjoiUElPIik7CiAKKwlzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CisKIAlyZXR1cm4gMDsKIAogI2lmZGVmIFNESENJX1VTRV9MRURTX0NMQVNTCkBAIC0xNzgyLDYgKzE4NzcsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAJfQogCisJc2RoY2lfZGlzYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKKwogCW1tY19yZW1vdmVfaG9zdChob3N0LT5tbWMpOwogCiAjaWZkZWYgU0RIQ0lfVVNFX0xFRFNfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCA0M2MzN2M2Li5mMjBhODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC0xMCw2ICsxMCw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qCiAgKiBDb250cm9sbGVyIHJlZ2lzdGVycwpAQCAtMTIzLDYgKzEyNiw3IEBACiAJCVNESENJX0lOVF9EQVRBX0FWQUlMIHwgU0RIQ0lfSU5UX1NQQUNFX0FWQUlMIHwgXAogCQlTREhDSV9JTlRfREFUQV9USU1FT1VUIHwgU0RIQ0lfSU5UX0RBVEFfQ1JDIHwgXAogCQlTREhDSV9JTlRfREFUQV9FTkRfQklUKQorI2RlZmluZSBTREhDSV9JTlRfQUxMX01BU0sJKCh1bnNpZ25lZCBpbnQpLTEpCiAKICNkZWZpbmUgU0RIQ0lfQUNNRDEyX0VSUgkweDNDCiAKQEAgLTIxMCw2ICsyMTQsMTggQEAKICNkZWZpbmUgU0RIQ0lfUVVJUktfQlJPS0VOX1NNQUxMX1BJTwkJCSgxPDwxMykKIC8qIENvbnRyb2xsZXIgZG9lcyBub3QgcHJvdmlkZSB0cmFuc2Zlci1jb21wbGV0ZSBpbnRlcnJ1cHQgd2hlbiBub3QgYnVzeSAqLwogI2RlZmluZSBTREhDSV9RVUlSS19OT19CVVNZX0lSUQkJCQkoMTw8MTQpCisvKiBDb250cm9sbGVyIGhhcyB1bnJlbGlhYmxlIGNhcmQgZGV0ZWN0aW9uICovCisjZGVmaW5lIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTgkJKDE8PDE1KQorLyogQ29udHJvbGxlciByZXBvcnRzIGludmVydGVkIHdyaXRlLXByb3RlY3Qgc3RhdGUgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfSU5WRVJURURfV1JJVEVfUFJPVEVDVAkJKDE8PDE2KQorLyogQ29udHJvbGxlciBoYXMgbm9uc3RhbmRhcmQgY2xvY2sgbWFuYWdlbWVudCAqLworI2RlZmluZSBTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSwkJCSgxPDwxNykKKy8qIENvbnRyb2xsZXIgZG9lcyBub3QgbGlrZSBmYXN0IFBJTyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfUElPX05FRURTX0RFTEFZCQkJKDE8PDE4KQorLyogQ29udHJvbGxlciBsb3Npbmcgc2lnbmFsL2ludGVycnVwdCBlbmFibGUgc3RhdGVzIGFmdGVyIHJlc2V0ICovCisjZGVmaW5lIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVAkJKDE8PDE5KQorLyogQ29udHJvbGxlciBoYXMgdG8gYmUgZm9yY2VkIHRvIHVzZSBibG9jayBzaXplIG9mIDIwNDggYnl0ZXMgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfRk9SQ0VfQkxLX1NaXzIwNDgJCQkoMTw8MjApCiAKIAlpbnQJCQlpcnE7CQkvKiBEZXZpY2UgSVJRICovCiAJdm9pZCBfX2lvbWVtICoJCWlvYWRkcjsJCS8qIE1hcHBlZCBhZGRyZXNzICovCkBAIC0yNjcsOSArMjgzLDEwNSBAQAogCiAKIHN0cnVjdCBzZGhjaV9vcHMgeworI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfSU9fQUNDRVNTT1JTCisJdTMyCQkoKnJlYWRsKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZyk7CisJdTE2CQkoKnJlYWR3KShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZyk7CisJdTgJCSgqcmVhZGIpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKTsKKwl2b2lkCQkoKndyaXRlbCkoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpOworCXZvaWQJCSgqd3JpdGV3KShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZyk7CisJdm9pZAkJKCp3cml0ZWIpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpOworI2VuZGlmCisKKwl2b2lkCSgqc2V0X2Nsb2NrKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGNsb2NrKTsKKwogCWludAkJKCplbmFibGVfZG1hKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CisJdW5zaWduZWQgaW50CSgqZ2V0X21heF9jbG9jaykoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOworCXVuc2lnbmVkIGludAkoKmdldF90aW1lb3V0X2Nsb2NrKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CiB9OwogCisjaWZkZWYgQ09ORklHX01NQ19TREhDSV9JT19BQ0NFU1NPUlMKKworc3RhdGljIGlubGluZSB2b2lkIHNkaGNpX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlpZiAodW5saWtlbHkoaG9zdC0+b3BzLT53cml0ZWwpKQorCQlob3N0LT5vcHMtPndyaXRlbChob3N0LCB2YWwsIHJlZyk7CisJZWxzZQorCQl3cml0ZWwodmFsLCBob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RoY2lfd3JpdGV3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MTYgdmFsLCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShob3N0LT5vcHMtPndyaXRldykpCisJCWhvc3QtPm9wcy0+d3JpdGV3KGhvc3QsIHZhbCwgcmVnKTsKKwllbHNlCisJCXdyaXRldyh2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV93cml0ZWIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IHZhbCwgaW50IHJlZykKK3sKKwlpZiAodW5saWtlbHkoaG9zdC0+b3BzLT53cml0ZWIpKQorCQlob3N0LT5vcHMtPndyaXRlYihob3N0LCB2YWwsIHJlZyk7CisJZWxzZQorCQl3cml0ZWIodmFsLCBob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzZGhjaV9yZWFkbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlpZiAodW5saWtlbHkoaG9zdC0+b3BzLT5yZWFkbCkpCisJCXJldHVybiBob3N0LT5vcHMtPnJlYWRsKGhvc3QsIHJlZyk7CisJZWxzZQorCQlyZXR1cm4gcmVhZGwoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgc2RoY2lfcmVhZHcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KGhvc3QtPm9wcy0+cmVhZHcpKQorCQlyZXR1cm4gaG9zdC0+b3BzLT5yZWFkdyhob3N0LCByZWcpOworCWVsc2UKKwkJcmV0dXJuIHJlYWR3KGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc2RoY2lfcmVhZGIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KGhvc3QtPm9wcy0+cmVhZGIpKQorCQlyZXR1cm4gaG9zdC0+b3BzLT5yZWFkYihob3N0LCByZWcpOworCWVsc2UKKwkJcmV0dXJuIHJlYWRiKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV93cml0ZWwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpCit7CisJd3JpdGVsKHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNkaGNpX3dyaXRldyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZykKK3sKKwl3cml0ZXcodmFsLCBob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RoY2lfd3JpdGViKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpCit7CisJd3JpdGViKHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2RoY2lfcmVhZGwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHNkaGNpX3JlYWR3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiByZWFkdyhob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHU4IHNkaGNpX3JlYWRiKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiByZWFkYihob3N0LT5pb2FkZHIgKyByZWcpOworfQorCisjZW5kaWYgLyogQ09ORklHX01NQ19TREhDSV9JT19BQ0NFU1NPUlMgKi8KIAogZXh0ZXJuIHN0cnVjdCBzZGhjaV9ob3N0ICpzZGhjaV9hbGxvY19ob3N0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzaXplX3QgcHJpdl9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwppbmRleCA2YTdhNjE5Li42M2ZiZDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCkBAIC01NjgsMTEgKzU2OCwxMSBAQAogCWhvc3QtPm1tYyA9IG1tYzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1tYyk7CiAKLQlob3N0LT5jdGwgPSBpb3JlbWFwKHJlc19jdGwtPnN0YXJ0LCByZXNfY3RsLT5lbmQgLSByZXNfY3RsLT5zdGFydCk7CisJaG9zdC0+Y3RsID0gaW9yZW1hcChyZXNfY3RsLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXNfY3RsKSk7CiAJaWYgKCFob3N0LT5jdGwpCiAJCWdvdG8gaG9zdF9mcmVlOwogCi0JaG9zdC0+Y25mID0gaW9yZW1hcChyZXNfY25mLT5zdGFydCwgcmVzX2NuZi0+ZW5kIC0gcmVzX2NuZi0+c3RhcnQpOworCWhvc3QtPmNuZiA9IGlvcmVtYXAocmVzX2NuZi0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzX2NuZikpOwogCWlmICghaG9zdC0+Y25mKQogCQlnb3RvIHVubWFwX2N0bDsKIApAQCAtNjUwLDEwICs2NTAsMTAgQEAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7Ci0JCW1tY19mcmVlX2hvc3QobW1jKTsKIAkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIAkJaW91bm1hcChob3N0LT5jdGwpOwogCQlpb3VubWFwKGhvc3QtPmNuZik7CisJCW1tY19mcmVlX2hvc3QobW1jKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaCBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaAppbmRleCBiYTJiNDI0Li45YzgzMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCkBAIC04LDYgKzgsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCisKKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKICNkZWZpbmUgQ05GX0NNRCAgICAgMHgwNAogI2RlZmluZSBDTkZfQ1RMX0JBU0UgICAweDEwCiAjZGVmaW5lIENORl9JTlRfUElOICAweDNkCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCAwYzNhZmNjLi41ZjcxMzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTI3MjAsMTQgKzI3MjAsMTQgQEAKIAlyZXR1cm4gY2hpcC0+c2Nhbl9iYnQobXRkKTsKIH0KIAotLyogbW9kdWxlX3RleHRfYWRkcmVzcygpIGlzbid0IGV4cG9ydGVkLCBhbmQgaXQncyBtb3N0bHkgYSBwb2ludGxlc3MKKy8qIGlzX21vZHVsZV90ZXh0X2FkZHJlc3MoKSBpc24ndCBleHBvcnRlZCwgYW5kIGl0J3MgbW9zdGx5IGEgcG9pbnRsZXNzCiAgICB0ZXN0IGlmIHRoaXMgaXMgYSBtb2R1bGUgX2FueXdheV8gLS0gdGhleSdkIGhhdmUgdG8gdHJ5IF9yZWFsbHlfIGhhcmQKICAgIHRvIGNhbGwgdXMgZnJvbSBpbi1rZXJuZWwgY29kZSBpZiB0aGUgY29yZSBOQU5EIHN1cHBvcnQgaXMgbW9kdWxhci4gKi8KICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgY2FsbGVyX2lzX21vZHVsZSgpICgxKQogI2Vsc2UKICNkZWZpbmUgY2FsbGVyX2lzX21vZHVsZSgpIFwKLQltb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKwlpc19tb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKICNlbmRpZgogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwppbmRleCAyYzlhYTQ5Li44NTc0NjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCkBAIC0xNTQsNiArMTU0LDEwIEBACiB7CiAJaW50IGVycjsKIAorCWlmICghYWxsb2NfY3B1bWFza192YXIoJm1hcmtlZF9jcHVzLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJY3B1bWFza19jbGVhcihtYXJrZWRfY3B1cyk7CisKIAlzdGFydF9jcHVfd29yaygpOwogCiAJZXJyID0gdGFza19oYW5kb2ZmX3JlZ2lzdGVyKCZ0YXNrX2ZyZWVfbmIpOwpAQCAtMTc5LDYgKzE4Myw3IEBACiAJdGFza19oYW5kb2ZmX3VucmVnaXN0ZXIoJnRhc2tfZnJlZV9uYik7CiBvdXQxOgogCWVuZF9zeW5jKCk7CisJZnJlZV9jcHVtYXNrX3ZhcihtYXJrZWRfY3B1cyk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTE5MCw2ICsxOTUsNyBAQAogCXByb2ZpbGVfZXZlbnRfdW5yZWdpc3RlcihQUk9GSUxFX1RBU0tfRVhJVCwgJnRhc2tfZXhpdF9uYik7CiAJdGFza19oYW5kb2ZmX3VucmVnaXN0ZXIoJnRhc2tfZnJlZV9uYik7CiAJZW5kX3N5bmMoKTsKKwlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKIH0KIAogCkBAIC01NjUsMjAgKzU3MSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZidWZmZXJfbXV0ZXgpOwogfQogCi1pbnQgX19pbml0IGJ1ZmZlcl9zeW5jX2luaXQodm9pZCkKLXsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZtYXJrZWRfY3B1cywgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY3B1bWFza19jbGVhcihtYXJrZWRfY3B1cyk7Ci0JCXJldHVybiAwOwotfQotCi12b2lkIGJ1ZmZlcl9zeW5jX2NsZWFudXAodm9pZCkKLXsKLQlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKLX0KLQogLyogVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFkZCBhIGJ1ZmZlciB3b3J0aCBvZiBkYXRhIGRpcmVjdGx5IHRvCiAgKiB0aGUga2VybmVsIGJ1ZmZlci4gVGhlIGJ1ZmZlciBpcyBhc3N1bWVkIHRvIGJlIGEgY2lyY3VsYXIgYnVmZmVyLgogICogVGFrZSB0aGUgZW50cmllcyBmcm9tIGluZGV4IHN0YXJ0IGFuZCBlbmQgYXQgaW5kZXggZW5kLCB3cmFwcGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oCmluZGV4IDBlYmY1ZGIuLjMxMTA3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaAorKysgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmgKQEAgLTE5LDggKzE5LDQgQEAKIC8qIHN5bmMgdGhlIGdpdmVuIENQVSdzIGJ1ZmZlciAqLwogdm9pZCBzeW5jX2J1ZmZlcihpbnQgY3B1KTsKIAotLyogaW5pdGlhbGl6ZS9kZXN0cm95IHRoZSBidWZmZXIgc3lzdGVtLiAqLwotaW50IGJ1ZmZlcl9zeW5jX2luaXQodm9pZCk7Ci12b2lkIGJ1ZmZlcl9zeW5jX2NsZWFudXAodm9pZCk7Ci0KICNlbmRpZiAvKiBPUFJPRklMRV9CVUZGRVJfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCmluZGV4IGU3NmQ3MTUuLmYwZTk5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIHsKIAllbnRyeS0+ZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUKIAkJKG9wX3JpbmdfYnVmZmVyX3dyaXRlLCBzaXplb2Yoc3RydWN0IG9wX3NhbXBsZSkgKwotCQkgc2l6ZSAqIHNpemVvZihlbnRyeS0+c2FtcGxlLT5kYXRhWzBdKSwgJmVudHJ5LT5pcnFfZmxhZ3MpOworCQkgc2l6ZSAqIHNpemVvZihlbnRyeS0+c2FtcGxlLT5kYXRhWzBdKSk7CiAJaWYgKGVudHJ5LT5ldmVudCkKIAkJZW50cnktPnNhbXBsZSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZW50cnktPmV2ZW50KTsKIAllbHNlCkBAIC0xNzgsOCArMTc4LDcgQEAKIAogaW50IG9wX2NwdV9idWZmZXJfd3JpdGVfY29tbWl0KHN0cnVjdCBvcF9lbnRyeSAqZW50cnkpCiB7Ci0JcmV0dXJuIHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQob3BfcmluZ19idWZmZXJfd3JpdGUsIGVudHJ5LT5ldmVudCwKLQkJCQkJIGVudHJ5LT5pcnFfZmxhZ3MpOworCXJldHVybiByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KG9wX3JpbmdfYnVmZmVyX3dyaXRlLCBlbnRyeS0+ZXZlbnQpOwogfQogCiBzdHJ1Y3Qgb3Bfc2FtcGxlICpvcF9jcHVfYnVmZmVyX3JlYWRfZW50cnkoc3RydWN0IG9wX2VudHJ5ICplbnRyeSwgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYwppbmRleCBjZWQzOWY2Li4zY2ZmY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCkBAIC0xODMsMTAgKzE4Myw2IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IGJ1ZmZlcl9zeW5jX2luaXQoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gb3Byb2ZpbGVfYXJjaF9pbml0KCZvcHJvZmlsZV9vcHMpOwogCiAJaWYgKGVyciA8IDAgfHwgdGltZXIpIHsKQEAgLTE5NSwxMCArMTkxLDggQEAKIAl9CiAKIAllcnIgPSBvcHJvZmlsZWZzX3JlZ2lzdGVyKCk7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCW9wcm9maWxlX2FyY2hfZXhpdCgpOwotCQlidWZmZXJfc3luY19jbGVhbnVwKCk7Ci0JfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTIwOCw3ICsyMDIsNiBAQAogewogCW9wcm9maWxlZnNfdW5yZWdpc3RlcigpOwogCW9wcm9maWxlX2FyY2hfZXhpdCgpOwotCWJ1ZmZlcl9zeW5jX2NsZWFudXAoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCBmYWM1ZWRkLi5lYTE1YjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTE3MSwxMiArMTcxLDEyIEBACiB7CiAJaW50IHJldDsKIAotCWlmIChhY3BpX2dibF9GQURULmJvb3RfZmxhZ3MgJiBCQUZfTVNJX05PVF9TVVBQT1JURUQpIHsKKwlpZiAoYWNwaV9nYmxfRkFEVC5ib290X2ZsYWdzICYgQUNQSV9GQURUX05PX01TSSkgewogCQlwcmludGsoS0VSTl9JTkZPIkFDUEkgRkFEVCBkZWNsYXJlcyB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBNU0ksIHNvIGRpc2FibGUgaXRcbiIpOwogCQlwY2lfbm9fbXNpKCk7CiAJfQogCi0JaWYgKGFjcGlfZ2JsX0ZBRFQuYm9vdF9mbGFncyAmIEJBRl9QQ0lFX0FTUE1fQ09OVFJPTCkgeworCWlmIChhY3BpX2dibF9GQURULmJvb3RfZmxhZ3MgJiBBQ1BJX0ZBRFRfTk9fQVNQTSkgewogCQlwcmludGsoS0VSTl9JTkZPIkFDUEkgRkFEVCBkZWNsYXJlcyB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBQQ0llIEFTUE0sIHNvIGRpc2FibGUgaXRcbiIpOwogCQlwY2llX25vX2FzcG0oKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggYzBjYmJiNS4uZDc2YzRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMjc3LDEwICsyNzcsOSBAQAogCW5vZGUgPSBkZXZfdG9fbm9kZSgmZGV2LT5kZXYpOwogCWlmIChub2RlID49IDApIHsKIAkJaW50IGNwdTsKLQkJbm9kZV90b19jcHVtYXNrX3B0cihub2RlY3B1bWFzaywgbm9kZSk7CiAKIAkJZ2V0X29ubGluZV9jcHVzKCk7Ci0JCWNwdSA9IGNwdW1hc2tfYW55X2FuZChub2RlY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwkJY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdW1hc2tfb2Zfbm9kZShub2RlKSwgY3B1X29ubGluZV9tYXNrKTsKIAkJaWYgKGNwdSA8IG5yX2NwdV9pZHMpCiAJCQllcnJvciA9IHdvcmtfb25fY3B1KGNwdSwgbG9jYWxfcGNpX3Byb2JlLCAmZGRpKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggMzYwODA4MS4uMjg0ZWJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC02Nyw2ICs2NywxNiBAQAogCVRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgcmZraWxsIGFuZCBiYWNrbGlnaHQgY29udHJvbCB0byBEZWxsCiAJbGFwdG9wcy4KIAorY29uZmlnIERFTExfV01JCisJdHJpc3RhdGUgIkRlbGwgV01JIGV4dHJhcyIKKwlkZXBlbmRzIG9uIEFDUElfV01JCisJZGVwZW5kcyBvbiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBXTUktYmFzZWQgaG90a2V5cyBvbiBEZWxsIGxhcHRvcHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIGRlbGwtd21pLgorCiBjb25maWcgRlVKSVRTVV9MQVBUT1AKIAl0cmlzdGF0ZSAiRnVqaXRzdSBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gQUNQSQpAQCAtMTY1LDYgKzE3NSw3IEBACiAJZGVwZW5kcyBvbiBBQ1BJCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZXBlbmRzIG9uIElOUFVUCisJZGVwZW5kcyBvbiBSRktJTEwKIAkgIC0tLWhlbHAtLS0KIAkgIFRoaXMgbWluaS1kcml2ZXIgZHJpdmVzIHRoZSBTTkMgYW5kIFNQSUMgZGV2aWNlcyBwcmVzZW50IGluIHRoZSBBQ1BJCiAJICBCSU9TIG9mIHRoZSBTb255IFZhaW8gbGFwdG9wcy4KQEAgLTIyNiw2ICsyMzcsMzAgQEAKIAogCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IE4gaGVyZS4KIAorY29uZmlnIFRISU5LUEFEX0FDUElfVU5TQUZFX0xFRFMKKwlib29sICJBbGxvdyBjb250cm9sIG9mIGltcG9ydGFudCBMRURzICh1bnNhZmUpIgorCWRlcGVuZHMgb24gVEhJTktQQURfQUNQSQorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIE92ZXJyaWRpbmcgTEVEIHN0YXRlIG9uIFRoaW5rUGFkcyBjYW4gbWFzayBpbXBvcnRhbnQKKwkgIGZpcm13YXJlIGFsZXJ0cyAobGlrZSBjcml0aWNhbCBiYXR0ZXJ5IGNvbmRpdGlvbiksIG9yIG1pc2xlZAorCSAgdGhlIHVzZXIgaW50byBkYW1hZ2luZyB0aGUgaGFyZHdhcmUgKHVuZG9ja2luZyBvciBlamVjdGluZworCSAgdGhlIGJheSB3aGlsZSBidXNlcyBhcmUgc3RpbGwgYWN0aXZlKSwgZXRjLgorCisJICBMRUQgY29udHJvbCBvbiB0aGUgVGhpbmtQYWQgaXMgd3JpdGUtb25seSAod2l0aCB2ZXJ5IGZldworCSAgZXhjZXB0aW9ucyBvbiB2ZXJ5IGFuY2llbnQgbW9kZWxzKSwgd2hpY2ggbWFrZXMgaXQKKwkgIGltcG9zc2libGUgdG8ga25vdyBiZWZvcmVoYW5kIGlmIGltcG9ydGFudCBpbmZvcm1hdGlvbiB3aWxsCisJICBiZSBsb3N0IHdoZW4gb25lIGNoYW5nZXMgTEVEIHN0YXRlLgorCisJICBVc2VycyB0aGF0IGtub3cgd2hhdCB0aGV5IGFyZSBkb2luZyBjYW4gZW5hYmxlIHRoaXMgb3B0aW9uCisJICBhbmQgdGhlIGRyaXZlciB3aWxsIGFsbG93IGNvbnRyb2wgb2YgZXZlcnkgTEVELCBpbmNsdWRpbmcKKwkgIHRoZSBvbmVzIG9uIHRoZSBkb2NrIHN0YXRpb25zLgorCisJICBOZXZlciBlbmFibGUgdGhpcyBvcHRpb24gb24gYSBkaXN0cmlidXRpb24ga2VybmVsLgorCisJICBTYXkgTiBoZXJlLCB1bmxlc3MgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgeW91ciBvd24KKwkgIHVzZSwgYW5kIG5lZWQgdG8gY29udHJvbCB0aGUgaW1wb3J0YW50IGZpcm13YXJlIExFRHMuCisKIGNvbmZpZyBUSElOS1BBRF9BQ1BJX0RPQ0sKIAlib29sICJMZWdhY3kgRG9ja2luZyBTdGF0aW9uIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBUSElOS1BBRF9BQ1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZSBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlCmluZGV4IGUyOTA2NTEuLmU0MGM3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogb2JqLSQoQ09ORklHX01TSV9MQVBUT1ApCSs9IG1zaS1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0NPTVBBTF9MQVBUT1ApCSs9IGNvbXBhbC1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0RFTExfTEFQVE9QKQkrPSBkZWxsLWxhcHRvcC5vCitvYmotJChDT05GSUdfREVMTF9XTUkpCQkrPSBkZWxsLXdtaS5vCiBvYmotJChDT05GSUdfQUNFUl9XTUkpCQkrPSBhY2VyLXdtaS5vCiBvYmotJChDT05GSUdfSFBfV01JKQkJKz0gaHAtd21pLm8KIG9iai0kKENPTkZJR19UQzExMDBfV01JKQkrPSB0YzExMDAtd21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IGE2YTQyZTguLjBmNmU0M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQWNlciBXTUkgTGFwdG9wIEV4dHJhcwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOAlDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5CUNhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+CiAgKgogICogIEJhc2VkIG9uIGFjZXJfYWNwaToKICAqICAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA3CUUuTS4gU21pdGgKQEAgLTIyNSw2ICsyMjUsMjUgQEAKIAkud2lyZWxlc3MgPSAyLAogfTsKIAorLyogVGhlIEFzcGlyZSBPbmUgaGFzIGEgZHVtbXkgQUNQSS1XTUkgaW50ZXJmYWNlIC0gZGlzYWJsZSBpdCAqLworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgYWNlcl9ibGFja2xpc3RbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJBY2VyIEFzcGlyZSBPbmUgKFNTRCkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU9BMTEwIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJBY2VyIEFzcGlyZSBPbmUgKEhERCkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU9BMTUwIiksCisJCX0sCisJfSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFjZXJfcXVpcmtzW10gPSB7CiAJewogCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKQEAgLTExMTcsMTEgKzExMzYsMTcgQEAKIAl9CiAKIAllcnIgPSBhY2VyX3Jma2lsbF9pbml0KCZkZXZpY2UtPmRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJvcl9yZmtpbGw7CiAKIAlyZXR1cm4gZXJyOwogCitlcnJvcl9yZmtpbGw6CisJaWYgKGhhc19jYXAoQUNFUl9DQVBfQlJJR0hUTkVTUykpCisJCWFjZXJfYmFja2xpZ2h0X2V4aXQoKTsKIGVycm9yX2JyaWdodG5lc3M6Ci0JYWNlcl9sZWRfZXhpdCgpOworCWlmIChoYXNfY2FwKEFDRVJfQ0FQX01BSUxMRUQpKQorCQlhY2VyX2xlZF9leGl0KCk7CiBlcnJvcl9tYWlsbGVkOgogCXJldHVybiBlcnI7CiB9CkBAIC0xMjU0LDYgKzEyNzksMTIgQEAKIAogCXByaW50ayhBQ0VSX0lORk8gIkFjZXIgTGFwdG9wIEFDUEktV01JIEV4dHJhc1xuIik7CiAKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShhY2VyX2JsYWNrbGlzdCkpIHsKKwkJcHJpbnRrKEFDRVJfSU5GTyAiQmxhY2tsaXN0ZWQgaGFyZHdhcmUgZGV0ZWN0ZWQgLSAiCisJCQkJIm5vdCBsb2FkaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZmluZF9xdWlya3MoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFiOTQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwpAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIERlbGwgV01JIGhvdGtleXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCA8bWpnQHJlZGhhdC5jb20+CisgKgorICogUG9ydGlvbnMgYmFzZWQgb24gd2lzdHJvbl9idG5zLmM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWlsb3NsYXYgVHJtYWMgPG1pdHJAdm9sbnkuY3o+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQmVybmhhcmQgUm9zZW5rcmFlbnplciA8YmVyb0BhcmtsaW51eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRG1pdHJ5IFRvcm9raG92IDxkdG9yQG1haWwucnU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKK01PRFVMRV9BVVRIT1IoIk1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgbGFwdG9wIFdNSSBob3RrZXlzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIERFTExfRVZFTlRfR1VJRCAiOURCQjU5OTQtQTk5Ny0xMURBLUIwMTItQjYyMkExRUY1NDkyIgorCitNT0RVTEVfQUxJQVMoIndtaToiREVMTF9FVkVOVF9HVUlEKTsKKworc3RydWN0IGtleV9lbnRyeSB7CisJY2hhciB0eXBlOwkJLyogU2VlIEtFXyogYmVsb3cgKi8KKwl1MTYgY29kZTsKKwl1MTYga2V5Y29kZTsKK307CisKK2VudW0geyBLRV9LRVksIEtFX1NXLCBLRV9FTkQgfTsKKworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgZGVsbF93bWlfa2V5bWFwW10gPSB7CisJe0tFX0tFWSwgMHhlMDQ1LCBLRVlfUFJPRzF9LAorCXtLRV9FTkQsIDB9Cit9OworCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqZGVsbF93bWlfaW5wdXRfZGV2OworCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqZGVsbF93bWlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gZGVsbF93bWlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKKwkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqZGVsbF93bWlfZ2V0X2VudHJ5X2J5X2tleWNvZGUoaW50IGtleWNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJZm9yIChrZXkgPSBkZWxsX3dtaV9rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKQorCQlpZiAoa2V5LT50eXBlID09IEtFX0tFWSAmJiBrZXljb2RlID09IGtleS0+a2V5Y29kZSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBkZWxsX3dtaV9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLAorCQkJICAgICAgIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXkgPSBkZWxsX3dtaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOworCisJaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7CisJCSprZXljb2RlID0ga2V5LT5rZXljb2RlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkZWxsX3dtaV9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisJaW50IG9sZF9rZXljb2RlOworCisJaWYgKGtleWNvZGUgPCAwIHx8IGtleWNvZGUgPiBLRVlfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtleSA9IGRlbGxfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisJaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7CisJCW9sZF9rZXljb2RlID0ga2V5LT5rZXljb2RlOworCQlrZXktPmtleWNvZGUgPSBrZXljb2RlOworCQlzZXRfYml0KGtleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJaWYgKCFkZWxsX3dtaV9nZXRfZW50cnlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBkZWxsX3dtaV9ub3RpZnkodTMyIHZhbHVlLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciByZXNwb25zZSA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqa2V5OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisKKwl3bWlfZ2V0X2V2ZW50X2RhdGEodmFsdWUsICZyZXNwb25zZSk7CisKKwlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilyZXNwb25zZS5wb2ludGVyOworCisJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlpbnQgKmJ1ZmZlciA9IChpbnQgKilvYmotPmJ1ZmZlci5wb2ludGVyOworCQlrZXkgPSBkZWxsX3dtaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoYnVmZmVyWzFdKTsKKwkJaWYgKGtleSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShkZWxsX3dtaV9pbnB1dF9kZXYsIGtleS0+a2V5Y29kZSwgMSk7CisJCQlpbnB1dF9zeW5jKGRlbGxfd21pX2lucHV0X2Rldik7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRlbGxfd21pX2lucHV0X2Rldiwga2V5LT5rZXljb2RlLCAwKTsKKwkJCWlucHV0X3N5bmMoZGVsbF93bWlfaW5wdXRfZGV2KTsKKwkJfSBlbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLXdtaTogVW5rbm93biBrZXkgJXggcHJlc3NlZFxuIiwKKwkJCSAgICAgICBidWZmZXJbMV0pOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgZGVsbF93bWlfaW5wdXRfc2V0dXAodm9pZCkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisJaW50IGVycjsKKworCWRlbGxfd21pX2lucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCisJaWYgKCFkZWxsX3dtaV9pbnB1dF9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGVsbF93bWlfaW5wdXRfZGV2LT5uYW1lID0gIkRlbGwgV01JIGhvdGtleXMiOworCWRlbGxfd21pX2lucHV0X2Rldi0+cGh5cyA9ICJ3bWkvaW5wdXQwIjsKKwlkZWxsX3dtaV9pbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlkZWxsX3dtaV9pbnB1dF9kZXYtPmdldGtleWNvZGUgPSBkZWxsX3dtaV9nZXRrZXljb2RlOworCWRlbGxfd21pX2lucHV0X2Rldi0+c2V0a2V5Y29kZSA9IGRlbGxfd21pX3NldGtleWNvZGU7CisKKwlmb3IgKGtleSA9IGRlbGxfd21pX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKKwkJc3dpdGNoIChrZXktPnR5cGUpIHsKKwkJY2FzZSBLRV9LRVk6CisJCQlzZXRfYml0KEVWX0tFWSwgZGVsbF93bWlfaW5wdXRfZGV2LT5ldmJpdCk7CisJCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgZGVsbF93bWlfaW5wdXRfZGV2LT5rZXliaXQpOworCQkJYnJlYWs7CisJCWNhc2UgS0VfU1c6CisJCQlzZXRfYml0KEVWX1NXLCBkZWxsX3dtaV9pbnB1dF9kZXYtPmV2Yml0KTsKKwkJCXNldF9iaXQoa2V5LT5rZXljb2RlLCBkZWxsX3dtaV9pbnB1dF9kZXYtPnN3Yml0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7CisKKwlpZiAoZXJyKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRlbGxfd21pX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJaWYgKHdtaV9oYXNfZ3VpZChERUxMX0VWRU5UX0dVSUQpKSB7CisJCWVyciA9IGRlbGxfd21pX2lucHV0X3NldHVwKCk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gd21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoREVMTF9FVkVOVF9HVUlELAorCQkJCQkJIGRlbGxfd21pX25vdGlmeSwgTlVMTCk7CisJCWlmIChlcnIpIHsKKwkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7CisJCQlwcmludGsoS0VSTl9FUlIgImRlbGwtd21pOiBVbmFibGUgdG8gcmVnaXN0ZXIiCisJCQkgICAgICAgIiBub3RpZnkgaGFuZGxlciAtICVkXG4iLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJfSBlbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImRlbGwtd21pOiBObyBrbm93biBXTUkgR1VJRCBmb3VuZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRlbGxfd21pX2V4aXQodm9pZCkKK3sKKwlpZiAod21pX2hhc19ndWlkKERFTExfRVZFTlRfR1VJRCkpIHsKKwkJd21pX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihERUxMX0VWRU5UX0dVSUQpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOworCX0KK30KKworbW9kdWxlX2luaXQoZGVsbF93bWlfaW5pdCk7Cittb2R1bGVfZXhpdChkZWxsX3dtaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggZjQxMTM1Zi4uNTBkOTAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKQEAgLTUzLDYgKzUzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaHBfd21pX2Jpb3Nfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgX19leGl0IGhwX3dtaV9iaW9zX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOworc3RhdGljIGludCBocF93bWlfcmVzdW1lX2hhbmRsZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKIAogc3RydWN0IGJpb3NfYXJncyB7CiAJdTMyIHNpZ25hdHVyZTsKQEAgLTEwMSw2ICsxMDIsNyBAQAogCX0sCiAJLnByb2JlID0gaHBfd21pX2Jpb3Nfc2V0dXAsCiAJLnJlbW92ZSA9IGhwX3dtaV9iaW9zX3JlbW92ZSwKKwkucmVzdW1lID0gaHBfd21pX3Jlc3VtZV9oYW5kbGVyLAogfTsKIAogc3RhdGljIGludCBocF93bWlfcGVyZm9ybV9xdWVyeShpbnQgcXVlcnksIGludCB3cml0ZSwgaW50IHZhbHVlKQpAQCAtNDg3LDYgKzQ4OSwyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJLyoKKwkgKiBEb2NraW5nIHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgd2hpbGUgc3VzcGVuZGVkLCBzbyB0cmlnZ2VyCisJICogYW4gaW5wdXQgZXZlbnQgZm9yIHRoZSBjdXJyZW50IHN0YXRlLiBBcyB0aGlzIGlzIGEgc3dpdGNoLAorCSAqIHRoZSBpbnB1dCBsYXllciB3aWxsIG9ubHkgYWN0dWFsbHkgcGFzcyBpdCBvbiBpZiB0aGUgc3RhdGUKKwkgKiBjaGFuZ2VkLgorCSAqLworCWZvciAoa2V5ID0gaHBfd21pX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKKwkJc3dpdGNoIChrZXktPnR5cGUpIHsKKwkJY2FzZSBLRV9TVzoKKwkJCWlucHV0X3JlcG9ydF9zd2l0Y2goaHBfd21pX2lucHV0X2Rldiwga2V5LT5rZXljb2RlLAorCQkJCQkgICAgaHBfd21pX2RvY2tfc3RhdGUoKSk7CisJCQlpbnB1dF9zeW5jKGhwX3dtaV9pbnB1dF9kZXYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgaHBfd21pX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWVubG93LmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwppbmRleCAyN2I3NjYyLi4yOTQzMmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwpAQCAtNTcsOCArNTcsOCBAQAogICogSW4gdGhhdCBjYXNlIG1heF9jc3RhdGUgd291bGQgYmUgbi0xCiAgKiBHVEhTIHJldHVybmluZyAnMCcgd291bGQgbWVhbiB0aGF0IG5vIGJhbmR3aWR0aCBjb250cm9sIHN0YXRlcyBhcmUgc3VwcG9ydGVkCiAgKi8KLXN0YXRpYyBpbnQgbWVtb3J5X2dldF9pbnRfbWF4X2JhbmR3aWR0aChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKLQkJCQkJdW5zaWduZWQgbG9uZyAqbWF4X3N0YXRlKQorc3RhdGljIGludCBtZW1vcnlfZ2V0X21heF9iYW5kd2lkdGgoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKm1heF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CkBAIC04MywyMiArODMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZW1vcnlfZ2V0X21heF9iYW5kd2lkdGgoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsCi0JCQkJICAgIGNoYXIgKmJ1ZikKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWlmIChtZW1vcnlfZ2V0X2ludF9tYXhfYmFuZHdpZHRoKGNkZXYsICZ2YWx1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgbWVtb3J5X2dldF9jdXJfYmFuZHdpZHRoKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LAotCQkJCSAgICBjaGFyICpidWYpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmc7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC0xMDgsMTUgKzk4LDE2IEBACiAJYXJnLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKIAlhcmcuaW50ZWdlci52YWx1ZSA9IE1FTU9SWV9BUkdfQ1VSX0JBTkRXSURUSDsKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRU1PUllfR0VUX0JBTkRXSURUSCwKLQkJCQkgICAgICAgJmFyZ19saXN0LCAmdmFsdWUpOworCQkJCSAgICAgICAmYXJnX2xpc3QsICZyZXN1bHQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCB2YWx1ZSk7CisJKnZhbHVlID0gcmVzdWx0OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1lbW9yeV9zZXRfY3VyX2JhbmR3aWR0aChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKLQkJCQkgICAgdW5zaWduZWQgaW50IHN0YXRlKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTEyNiw3ICsxMTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgbWF4X3N0YXRlOwogCi0JaWYgKG1lbW9yeV9nZXRfaW50X21heF9iYW5kd2lkdGgoY2RldiwgJm1heF9zdGF0ZSkpCisJaWYgKG1lbW9yeV9nZXRfbWF4X2JhbmR3aWR0aChjZGV2LCAmbWF4X3N0YXRlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoc3RhdGUgPiBtYXhfc3RhdGUpCkBAIC0xNDIsNyArMTMzLDcgQEAKIAkJCQkgICZ0ZW1wKTsKIAogCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIkJhbmR3aWR0aCB2YWx1ZSB3YXMgJWQ6IHN0YXR1cyBpcyAlZFxuIiwgc3RhdGUsIHN0YXR1cyk7CisJICAgICAgICJCYW5kd2lkdGggdmFsdWUgd2FzICVsZDogc3RhdHVzIGlzICVkXG4iLCBzdGF0ZSwgc3RhdHVzKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKaW5kZXggYzQ3YTQ0ZC4uYTVjZTRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJeyAiTUFUMDAxOSIsIDB9LAogCXsgIiIsIDB9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgcGNjX2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfcGNjX2RyaXZlciA9IHsKIAkubmFtZSA9CQlBQ1BJX1BDQ19EUklWRVJfTkFNRSwKQEAgLTM2Niw3ICszNjcsNyBAQAogCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9OVU1fQkFUVEVSSUVTXSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIHBjYy0+c2luZltTSU5GX05VTV9CQVRURVJJRVNdKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19sY2R0eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zNzgsNyArMzc5LDcgQEAKIAlpZiAoIWFjcGlfcGNjX3JldHJpZXZlX2Jpb3NkYXRhKHBjYywgcGNjLT5zaW5mKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcGNjLT5zaW5mW1NJTkZfTENEX1RZUEVdKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgcGNjLT5zaW5mW1NJTkZfTENEX1RZUEVdKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19tdXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zOTAsNyArMzkxLDcgQEAKIAlpZiAoIWFjcGlfcGNjX3JldHJpZXZlX2Jpb3NkYXRhKHBjYywgcGNjLT5zaW5mKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcGNjLT5zaW5mW1NJTkZfTVVURV0pOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9NVVRFXSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RpY2t5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC00MDIsNyArNDAzLDcgQEAKIAlpZiAoIWFjcGlfcGNjX3JldHJpZXZlX2Jpb3NkYXRhKHBjYywgcGNjLT5zaW5mKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcGNjLT5zaW5mW1NJTkZfU1RJQ0tZX0tFWV0pOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9TVElDS1lfS0VZXSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF9zdGlja3koc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IGJjODk5NmMuLmE5MGVjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEFDUEkgU29ueSBOb3RlYm9vayBDb250cm9sIERyaXZlciAoU05DIGFuZCBTUElDKQogICoKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGxpbnV4Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGxpbnV4Lml0PgogICoKICAqIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGluc3BpcmVkIGZyb20gYXN1c19hY3BpLmMgYW5kIGlibV9hY3BpLmMKICAqIHdoaWNoIGFyZSBjb3B5cmlnaHRlZCBieSB0aGVpciByZXNwZWN0aXZlIGF1dGhvcnMuCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtNjQsNiArNjMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ueXBpLmg+CiAjaW5jbHVkZSA8bGludXgvc29ueS1sYXB0b3AuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KICNpZmRlZiBDT05GSUdfU09OWVBJX0NPTVBBVAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CkBAIC0xMjMsNiArMTIzLDE4IEBACiAJCSAiZGVmYXVsdCBpcyAtMSAoYXV0b21hdGljKSIpOwogI2VuZGlmCiAKK2VudW0gc29ueV9uY19yZmtpbGwgeworCVNPTllfV0lGSSwKKwlTT05ZX0JMVUVUT09USCwKKwlTT05ZX1dXQU4sCisJU09OWV9XSU1BWCwKKwlTT05ZX1JGS0lMTF9NQVgsCit9OworCitzdGF0aWMgc3RydWN0IHJma2lsbCAqc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX1JGS0lMTF9NQVhdOworc3RhdGljIGludCBzb255X3Jma2lsbF9hZGRyZXNzW1NPTllfUkZLSUxMX01BWF0gPSB7MHgzMDAsIDB4NTAwLCAweDcwMCwgMHg5MDB9Oworc3RhdGljIHZvaWQgc29ueV9uY19yZmtpbGxfdXBkYXRlKHZvaWQpOworCiAvKioqKioqKioqKiogSW5wdXQgRGV2aWNlcyAqKioqKioqKioqKi8KIAogI2RlZmluZSBTT05ZX0xBUFRPUF9CVUZfU0laRQkxMjgKQEAgLTEzNCw2ICsxNDYsNyBAQAogCXNwaW5sb2NrX3QJCWZpZm9fbG9jazsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd3E7CiB9OworCiBzdGF0aWMgc3RydWN0IHNvbnlfbGFwdG9wX2lucHV0X3Mgc29ueV9sYXB0b3BfaW5wdXQgPSB7CiAJLnVzZXJzID0gQVRPTUlDX0lOSVQoMCksCiB9OwpAQCAtMjExLDYgKzIyNCwxNCBAQAogCTQ4LAkvKiA2MSBTT05ZUElfRVZFTlRfV0lSRUxFU1NfT0ZGICovCiAJNDksCS8qIDYyIFNPTllQSV9FVkVOVF9aT09NX0lOX1BSRVNTRUQgKi8KIAk1MCwJLyogNjMgU09OWVBJX0VWRU5UX1pPT01fT1VUX1BSRVNTRUQgKi8KKwk1MSwJLyogNjQgU09OWVBJX0VWRU5UX0NEX0VKRUNUX1BSRVNTRUQgKi8KKwk1MiwJLyogNjUgU09OWVBJX0VWRU5UX01PREVLRVlfUFJFU1NFRCAqLworCTUzLAkvKiA2NiBTT05ZUElfRVZFTlRfUEtFWV9QNCAqLworCTU0LAkvKiA2NyBTT05ZUElfRVZFTlRfUEtFWV9QNSAqLworCTU1LAkvKiA2OCBTT05ZUElfRVZFTlRfU0VUVElOR0tFWV9QUkVTU0VEICovCisJNTYsCS8qIDY5IFNPTllQSV9FVkVOVF9WT0xVTUVfSU5DX1BSRVNTRUQgKi8KKwk1NywJLyogNzAgU09OWVBJX0VWRU5UX1ZPTFVNRV9ERUNfUFJFU1NFRCAqLworCS0xLAkvKiA3MSBTT05ZUElfRVZFTlRfQlJJR0hUTkVTU19QUkVTU0VEICovCiB9OwogCiBzdGF0aWMgaW50IHNvbnlfbGFwdG9wX2lucHV0X2tleWNvZGVfbWFwW10gPSB7CkBAIC0yNjQsNyArMjg1LDE0IEBACiAJS0VZX1dMQU4sCS8qIDQ3IFNPTllQSV9FVkVOVF9XSVJFTEVTU19PTiAqLwogCUtFWV9XTEFOLAkvKiA0OCBTT05ZUElfRVZFTlRfV0lSRUxFU1NfT0ZGICovCiAJS0VZX1pPT01JTiwJLyogNDkgU09OWVBJX0VWRU5UX1pPT01fSU5fUFJFU1NFRCAqLwotCUtFWV9aT09NT1VUCS8qIDUwIFNPTllQSV9FVkVOVF9aT09NX09VVF9QUkVTU0VEICovCisJS0VZX1pPT01PVVQsCS8qIDUwIFNPTllQSV9FVkVOVF9aT09NX09VVF9QUkVTU0VEICovCisJS0VZX0VKRUNUQ0QsCS8qIDUxIFNPTllQSV9FVkVOVF9DRF9FSkVDVF9QUkVTU0VEICovCisJS0VZX0YxMywJLyogNTIgU09OWVBJX0VWRU5UX01PREVLRVlfUFJFU1NFRCAqLworCUtFWV9QUk9HNCwJLyogNTMgU09OWVBJX0VWRU5UX1BLRVlfUDQgKi8KKwlLRVlfRjE0LAkvKiA1NCBTT05ZUElfRVZFTlRfUEtFWV9QNSAqLworCUtFWV9GMTUsCS8qIDU1IFNPTllQSV9FVkVOVF9TRVRUSU5HS0VZX1BSRVNTRUQgKi8KKwlLRVlfVk9MVU1FVVAsCS8qIDU2IFNPTllQSV9FVkVOVF9WT0xVTUVfSU5DX1BSRVNTRUQgKi8KKwlLRVlfVk9MVU1FRE9XTiwJLyogNTcgU09OWVBJX0VWRU5UX1ZPTFVNRV9ERUNfUFJFU1NFRCAqLwogfTsKIAogLyogcmVsZWFzZSBidXR0b25zIGFmdGVyIGEgc2hvcnQgZGVsYXkgaWYgcHJlc3NlZCAqLwpAQCAtMzY5LDcgKzM5Nyw3IEBACiAJc29ueV9sYXB0b3BfaW5wdXQud3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgic29ueS1sYXB0b3AiKTsKIAlpZiAoIXNvbnlfbGFwdG9wX2lucHV0LndxKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfUEZYCi0JCQkJIlVuYWJlIHRvIGNyZWF0ZSB3b3JrcXVldWUuXG4iKTsKKwkJCQkiVW5hYmxlIHRvIGNyZWF0ZSB3b3JrcXVldWUuXG4iKTsKIAkJZXJyb3IgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2ZyZWVfa2ZpZm87CiAJfQpAQCAtNjg5LDYgKzcxNywzMSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGludCBzb255X2ZpbmRfc25jX2hhbmRsZShpbnQgaGFuZGxlKQoreworCWludCBpOworCWludCByZXN1bHQ7CisKKwlmb3IgKGkgPSAweDIwOyBpIDwgMHgzMDsgaSsrKSB7CisJCWFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDAiLCBpLCAmcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCA9PSBoYW5kbGUpCisJCQlyZXR1cm4gaS0weDIwOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBzb255X2NhbGxfc25jX2hhbmRsZShpbnQgaGFuZGxlLCBpbnQgYXJndW1lbnQsIGludCAqcmVzdWx0KQoreworCWludCBvZmZzZXQgPSBzb255X2ZpbmRfc25jX2hhbmRsZShoYW5kbGUpOworCisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjA3Iiwgb2Zmc2V0IHwgYXJndW1lbnQsCisJCQkJcmVzdWx0KTsKK30KKwogLyoKICAqIHNvbnlfbmNfdmFsdWVzIGlucHV0L291dHB1dCB2YWxpZGF0ZSBmdW5jdGlvbnMKICAqLwpAQCAtODA5LDg3ICs4NjIsNTMgQEAKIAl1OAlldmVudDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29ueV9uY19ldmVudCAqc29ueV9uY19ldmVudHM7Ci0KLS8qIFZhaW8gQyogLS1tYXliZSBhbHNvIEZFKiwgTiogYW5kIEFSKiA/LS0gc3BlY2lhbCBpbml0IHNlcXVlbmNlCi0gKiBmb3IgRm4ga2V5cwotICovCi1zdGF0aWMgaW50IHNvbnlfbmNfQ19lbmFibGUoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQotewotCWludCByZXN1bHQgPSAwOwotCi0JcHJpbnRrKEtFUk5fTk9USUNFIERSVl9QRlggImRldGVjdGVkICVzXG4iLCBpZC0+aWRlbnQpOwotCi0Jc29ueV9uY19ldmVudHMgPSBpZC0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU04wMiIsIDB4NCwgJnJlc3VsdCkgPCAwCi0JCQl8fCBhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjA3IiwgMHgyLCAmcmVzdWx0KSA8IDAKLQkJCXx8IGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDIiLCAweDEwLCAmcmVzdWx0KSA8IDAKLQkJCXx8IGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDciLCAweDAsICZyZXN1bHQpIDwgMAotCQkJfHwgYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU04wMyIsIDB4MiwgJnJlc3VsdCkgPCAwCi0JCQl8fCBhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjA3IiwgMHgxMDEsICZyZXN1bHQpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9QRlggImZhaWxlZCB0byBpbml0aWFsaXplIFNOQywgc29tZSAiCi0JCQkJImZ1bmN0aW9uYWxpdGllcyBtYXkgYmUgbWlzc2luZ1xuIik7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzb255X25jX2V2ZW50IHNvbnlfQ19ldmVudHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc29ueV9uY19ldmVudCBzb255XzEwMF9ldmVudHNbXSA9IHsKKwl7IDB4OTAsIFNPTllQSV9FVkVOVF9QS0VZX1AxIH0sCisJeyAweDEwLCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweDkxLCBTT05ZUElfRVZFTlRfUEtFWV9QMiB9LAorCXsgMHgxMSwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAogCXsgMHg4MSwgU09OWVBJX0VWRU5UX0ZOS0VZX0YxIH0sCiAJeyAweDAxLCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKKwl7IDB4ODIsIFNPTllQSV9FVkVOVF9GTktFWV9GMiB9LAorCXsgMHgwMiwgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCisJeyAweDgzLCBTT05ZUElfRVZFTlRfRk5LRVlfRjMgfSwKKwl7IDB4MDMsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAorCXsgMHg4NCwgU09OWVBJX0VWRU5UX0ZOS0VZX0Y0IH0sCisJeyAweDA0LCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKIAl7IDB4ODUsIFNPTllQSV9FVkVOVF9GTktFWV9GNSB9LAogCXsgMHgwNSwgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCiAJeyAweDg2LCBTT05ZUElfRVZFTlRfRk5LRVlfRjYgfSwKIAl7IDB4MDYsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAogCXsgMHg4NywgU09OWVBJX0VWRU5UX0ZOS0VZX0Y3IH0sCiAJeyAweDA3LCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKKwl7IDB4ODksIFNPTllQSV9FVkVOVF9GTktFWV9GOSB9LAorCXsgMHgwOSwgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCiAJeyAweDhBLCBTT05ZUElfRVZFTlRfRk5LRVlfRjEwIH0sCiAJeyAweDBBLCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKIAl7IDB4OEMsIFNPTllQSV9FVkVOVF9GTktFWV9GMTIgfSwKIAl7IDB4MEMsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAorCXsgMHg5ZiwgU09OWVBJX0VWRU5UX0NEX0VKRUNUX1BSRVNTRUQgfSwKKwl7IDB4MWYsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKIAl7IDAsIDAgfSwKIH07CiAKLS8qIFNOQy1vbmx5IG1vZGVsIG1hcCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHNvbnlfbmNfaWRzW10gPSB7Ci0JCXsKLQkJCS5pZGVudCA9ICJTb255IFZhaW8gRkUgU2VyaWVzIiwKLQkJCS5jYWxsYmFjayA9IHNvbnlfbmNfQ19lbmFibGUsCi0JCQkuZHJpdmVyX2RhdGEgPSBzb255X0NfZXZlbnRzLAotCQkJLm1hdGNoZXMgPSB7Ci0JCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU29ueSBDb3Jwb3JhdGlvbiIpLAotCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVkdOLUZFIiksCi0JCQl9LAotCQl9LAotCQl7Ci0JCQkuaWRlbnQgPSAiU29ueSBWYWlvIEZaIFNlcmllcyIsCi0JCQkuY2FsbGJhY2sgPSBzb255X25jX0NfZW5hYmxlLAotCQkJLmRyaXZlcl9kYXRhID0gc29ueV9DX2V2ZW50cywKLQkJCS5tYXRjaGVzID0gewotCQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNvbnkgQ29ycG9yYXRpb24iKSwKLQkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWiIpLAotCQkJfSwKLQkJfSwKLQkJewotCQkJLmlkZW50ID0gIlNvbnkgVmFpbyBDIFNlcmllcyIsCi0JCQkuY2FsbGJhY2sgPSBzb255X25jX0NfZW5hYmxlLAotCQkJLmRyaXZlcl9kYXRhID0gc29ueV9DX2V2ZW50cywKLQkJCS5tYXRjaGVzID0gewotCQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNvbnkgQ29ycG9yYXRpb24iKSwKLQkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1DIiksCi0JCQl9LAotCQl9LAotCQl7Ci0JCQkuaWRlbnQgPSAiU29ueSBWYWlvIE4gU2VyaWVzIiwKLQkJCS5jYWxsYmFjayA9IHNvbnlfbmNfQ19lbmFibGUsCi0JCQkuZHJpdmVyX2RhdGEgPSBzb255X0NfZXZlbnRzLAotCQkJLm1hdGNoZXMgPSB7Ci0JCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU29ueSBDb3Jwb3JhdGlvbiIpLAotCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVkdOLU4iKSwKLQkJCX0sCi0JCX0sCi0JCXsgfQorc3RhdGljIHN0cnVjdCBzb255X25jX2V2ZW50IHNvbnlfMTI3X2V2ZW50c1tdID0geworCXsgMHg4MSwgU09OWVBJX0VWRU5UX01PREVLRVlfUFJFU1NFRCB9LAorCXsgMHgwMSwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAorCXsgMHg4MiwgU09OWVBJX0VWRU5UX1BLRVlfUDEgfSwKKwl7IDB4MDIsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4ODMsIFNPTllQSV9FVkVOVF9QS0VZX1AyIH0sCisJeyAweDAzLCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweDg0LCBTT05ZUElfRVZFTlRfUEtFWV9QMyB9LAorCXsgMHgwNCwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAorCXsgMHg4NSwgU09OWVBJX0VWRU5UX1BLRVlfUDQgfSwKKwl7IDB4MDUsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4ODYsIFNPTllQSV9FVkVOVF9QS0VZX1A1IH0sCisJeyAweDA2LCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweDA2LCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweDg3LCBTT05ZUElfRVZFTlRfU0VUVElOR0tFWV9QUkVTU0VEIH0sCisJeyAweDA3LCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAwLCAwIH0sCiB9OwogCiAvKgpAQCAtODk3LDM4ICs5MTYsNTkgQEAKICAqLwogc3RhdGljIHZvaWQgc29ueV9hY3BpX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qgc29ueV9uY19ldmVudCAqZXZtYXA7CiAJdTMyIGV2ID0gZXZlbnQ7Ci0JaW50IHJlc3VsdDsKIAotCWlmIChldiA9PSAweDkyKSB7Ci0JCS8qIHJlYWQgdGhlIGtleSBwcmVzc2VkIGZyb20gRUMuR0VDUgotCQkgKiBBIGNhbGwgdG8gU04wNyB3aXRoIDB4MDIwMiB3aWxsIGRvIGl0IGFzIHdlbGwgcmVzcGVjdGluZwotCQkgKiB0aGUgY3VycmVudCBwcm90b2NvbCBvbiBkaWZmZXJlbnQgT1NlcwotCQkgKgotCQkgKiBOb3RlOiB0aGUgcGF0aCBmb3IgR0VDUiBtYXkgYmUKLQkJICogICBcX1NCLlBDSTAuTFBDQi5FQyAoQywgRkUsIEFSLCBOIGFuZCBmcmllbmRzKQotCQkgKiAgIFxfU0IuUENJMC5QSUIuRUMwIChWR04tRlIgbm90aWZpY2F0aW9ucyBhcmUgc2VudCBkaXJlY3RseSwgbm8gR0VDUikKLQkJICoKLQkJICogVE9ETzogd2UgbWF5IHdhbnQgdG8gZG8gdGhlIHNhbWUgZm9yIHRoZSBvbGRlciBHSEtFIC1uZWVkCi0JCSAqICAgICAgIGRtaSBsaXN0LSBzbyB0aGlzIHNuaXBwZXQgbWF5IGJlY29tZSBvbmUgbW9yZSBjYWxsYmFjay4KLQkJICovCi0JCWlmIChhY3BpX2NhbGxzZXRmdW5jKGhhbmRsZSwgIlNOMDciLCAweDAyMDIsICZyZXN1bHQpIDwgMCkKLQkJCWRwcmludGsoInNvbnlfYWNwaV9ub3RpZnksIHVuYWJsZSB0byBkZWNvZGUgZXZlbnQgMHglLjJ4XG4iLCBldik7Ci0JCWVsc2UKLQkJCWV2ID0gcmVzdWx0ICYgMHhGRjsKLQl9CisJaWYgKGV2ID49IDB4OTApIHsKKwkJLyogTmV3LXN0eWxlIGV2ZW50ICovCisJCWludCByZXN1bHQ7CisJCWludCBrZXlfaGFuZGxlID0gMDsKKwkJZXYgLT0gMHg5MDsKIAotCWlmIChzb255X25jX2V2ZW50cykKLQkJZm9yIChldm1hcCA9IHNvbnlfbmNfZXZlbnRzOyBldm1hcC0+ZXZlbnQ7IGV2bWFwKyspIHsKLQkJCWlmIChldm1hcC0+ZGF0YSA9PSBldikgewotCQkJCWV2ID0gZXZtYXAtPmV2ZW50OwotCQkJCWJyZWFrOworCQlpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMDApID09IGV2KQorCQkJa2V5X2hhbmRsZSA9IDB4MTAwOworCQlpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMjcpID09IGV2KQorCQkJa2V5X2hhbmRsZSA9IDB4MTI3OworCisJCWlmIChrZXlfaGFuZGxlKSB7CisJCQlzdHJ1Y3Qgc29ueV9uY19ldmVudCAqa2V5X2V2ZW50OworCisJCQlpZiAoc29ueV9jYWxsX3NuY19oYW5kbGUoa2V5X2hhbmRsZSwgMHgyMDAsICZyZXN1bHQpKSB7CisJCQkJZHByaW50aygic29ueV9hY3BpX25vdGlmeSwgdW5hYmxlIHRvIGRlY29kZSIKKwkJCQkJIiBldmVudCAweCUuMnggMHglLjJ4XG4iLCBrZXlfaGFuZGxlLAorCQkJCQlldik7CisJCQkJLyogcmVzdG9yZSB0aGUgb3JpZ2luYWwgZXZlbnQgKi8KKwkJCQlldiA9IGV2ZW50OworCQkJfSBlbHNlIHsKKwkJCQlldiA9IHJlc3VsdCAmIDB4RkY7CisKKwkJCQlpZiAoa2V5X2hhbmRsZSA9PSAweDEwMCkKKwkJCQkJa2V5X2V2ZW50ID0gc29ueV8xMDBfZXZlbnRzOworCQkJCWVsc2UKKwkJCQkJa2V5X2V2ZW50ID0gc29ueV8xMjdfZXZlbnRzOworCisJCQkJZm9yICg7IGtleV9ldmVudC0+ZGF0YTsga2V5X2V2ZW50KyspIHsKKwkJCQkJaWYgKGtleV9ldmVudC0+ZGF0YSA9PSBldikgeworCQkJCQkJZXYgPSBrZXlfZXZlbnQtPmV2ZW50OworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoIWtleV9ldmVudC0+ZGF0YSkKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYCisJCQkJCQkJIlVua25vd24gZXZlbnQ6IDB4JXggMHgleFxuIiwKKwkJCQkJCQlrZXlfaGFuZGxlLAorCQkJCQkJCWV2KTsKKwkJCQllbHNlCisJCQkJCXNvbnlfbGFwdG9wX3JlcG9ydF9pbnB1dF9ldmVudChldik7CiAJCQl9CisJCX0gZWxzZSBpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMjQpID09IGV2KSB7CisJCQlzb255X25jX3Jma2lsbF91cGRhdGUoKTsKKwkJCXJldHVybjsKIAkJfQorCX0gZWxzZQorCQlzb255X2xhcHRvcF9yZXBvcnRfaW5wdXRfZXZlbnQoZXYpOwogCiAJZHByaW50aygic29ueV9hY3BpX25vdGlmeSwgZXZlbnQ6IDB4JS4yeFxuIiwgZXYpOwotCXNvbnlfbGFwdG9wX3JlcG9ydF9pbnB1dF9ldmVudChldik7CiAJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChzb255X25jX2FjcGlfZGV2aWNlLCAxLCBldik7CiB9CiAKQEAgLTk1Myw5ICs5OTMsMjUgQEAKIC8qCiAgKiBBQ1BJIGRldmljZQogICovCitzdGF0aWMgaW50IHNvbnlfbmNfZnVuY3Rpb25fc2V0dXAoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJlc3VsdDsKKworCS8qIEVuYWJsZSBhbGwgZXZlbnRzICovCisJYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU04wMiIsIDB4ZmZmZiwgJnJlc3VsdCk7CisKKwkvKiBTZXR1cCBob3RrZXlzICovCisJc29ueV9jYWxsX3NuY19oYW5kbGUoMHgwMTAwLCAwLCAmcmVzdWx0KTsKKwlzb255X2NhbGxfc25jX2hhbmRsZSgweDAxMDEsIDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MDEwMiwgMHgxMDAsICZyZXN1bHQpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc29ueV9uY19yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHNvbnlfbmNfdmFsdWUgKml0ZW07CisJYWNwaV9oYW5kbGUgaGFuZGxlOwogCiAJZm9yIChpdGVtID0gc29ueV9uY192YWx1ZXM7IGl0ZW0tPm5hbWU7IGl0ZW0rKykgewogCQlpbnQgcmV0OwpAQCAtOTcwLDEzICsxMDI2LDE4OCBAQAogCQl9CiAJfQogCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLAorCQkJCQkgJmhhbmRsZSkpKSB7CisJCWlmIChhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJFQ09OIiwgMSwgTlVMTCkpCisJCQlkcHJpbnRrKCJFQ09OIE1ldGhvZCBmYWlsZWRcbiIpOworCX0KKworCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjAwIiwKKwkJCQkJICZoYW5kbGUpKSkgeworCQlkcHJpbnRrKCJEb2luZyBTTkMgc2V0dXBcbiIpOworCQlzb255X25jX2Z1bmN0aW9uX3NldHVwKGRldmljZSk7CisJfQorCiAJLyogc2V0IHRoZSBsYXN0IHJlcXVlc3RlZCBicmlnaHRuZXNzIGxldmVsICovCiAJaWYgKHNvbnlfYmFja2xpZ2h0X2RldmljZSAmJgogCQkJIXNvbnlfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc29ueV9iYWNrbGlnaHRfZGV2aWNlKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfUEZYICJ1bmFibGUgdG8gcmVzdG9yZSBicmlnaHRuZXNzIGxldmVsXG4iKTsKIAotCS8qIHJlLWluaXRpYWxpemUgbW9kZWxzIHdpdGggc3BlY2lmaWMgcmVxdWlyZW1lbnRzICovCi0JZG1pX2NoZWNrX3N5c3RlbShzb255X25jX2lkcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbnlfbmNfcmZraWxsX2NsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTT05ZX1JGS0lMTF9NQVg7IGkrKykgeworCQlpZiAoc29ueV9yZmtpbGxfZGV2aWNlc1tpXSkKKwkJCXJma2lsbF91bnJlZ2lzdGVyKHNvbnlfcmZraWxsX2RldmljZXNbaV0pOworCX0KK30KKworc3RhdGljIGludCBzb255X25jX3Jma2lsbF9nZXQodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgKnN0YXRlKQoreworCWludCByZXN1bHQ7CisJaW50IGFyZ3VtZW50ID0gc29ueV9yZmtpbGxfYWRkcmVzc1sobG9uZykgZGF0YV07CisKKwlzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgMHgyMDAsICZyZXN1bHQpOworCWlmIChyZXN1bHQgJiAweDEpIHsKKwkJc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIGFyZ3VtZW50LCAmcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCAmIDB4ZikKKwkJCSpzdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7CisJCWVsc2UKKwkJCSpzdGF0ZSA9IFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQ7CisJfSBlbHNlIHsKKwkJKnN0YXRlID0gUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb255X25jX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgYXJndW1lbnQgPSBzb255X3Jma2lsbF9hZGRyZXNzWyhsb25nKSBkYXRhXSArIDB4MTAwOworCisJaWYgKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpCisJCWFyZ3VtZW50IHw9IDB4ZmYwMDAwOworCisJcmV0dXJuIHNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCBhcmd1bWVudCwgJnJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgc29ueV9uY19zZXR1cF93aWZpX3Jma2lsbChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcmZraWxsICpzb255X3dpZmlfcmZraWxsOworCisJc29ueV93aWZpX3Jma2lsbCA9IHJma2lsbF9hbGxvY2F0ZSgmZGV2aWNlLT5kZXYsIFJGS0lMTF9UWVBFX1dMQU4pOworCWlmICghc29ueV93aWZpX3Jma2lsbCkKKwkJcmV0dXJuIC0xOworCXNvbnlfd2lmaV9yZmtpbGwtPm5hbWUgPSAic29ueS13aWZpIjsKKwlzb255X3dpZmlfcmZraWxsLT50b2dnbGVfcmFkaW8gPSBzb255X25jX3Jma2lsbF9zZXQ7CisJc29ueV93aWZpX3Jma2lsbC0+Z2V0X3N0YXRlID0gc29ueV9uY19yZmtpbGxfZ2V0OworCXNvbnlfd2lmaV9yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOworCXNvbnlfd2lmaV9yZmtpbGwtPmRhdGEgPSAodm9pZCAqKVNPTllfV0lGSTsKKwllcnIgPSByZmtpbGxfcmVnaXN0ZXIoc29ueV93aWZpX3Jma2lsbCk7CisJaWYgKGVycikKKwkJcmZraWxsX2ZyZWUoc29ueV93aWZpX3Jma2lsbCk7CisJZWxzZQorCQlzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfV0lGSV0gPSBzb255X3dpZmlfcmZraWxsOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc29ueV9uY19zZXR1cF9ibHVldG9vdGhfcmZraWxsKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCByZmtpbGwgKnNvbnlfYmx1ZXRvb3RoX3Jma2lsbDsKKworCXNvbnlfYmx1ZXRvb3RoX3Jma2lsbCA9IHJma2lsbF9hbGxvY2F0ZSgmZGV2aWNlLT5kZXYsCisJCQkJCQlSRktJTExfVFlQRV9CTFVFVE9PVEgpOworCWlmICghc29ueV9ibHVldG9vdGhfcmZraWxsKQorCQlyZXR1cm4gLTE7CisJc29ueV9ibHVldG9vdGhfcmZraWxsLT5uYW1lID0gInNvbnktYmx1ZXRvb3RoIjsKKwlzb255X2JsdWV0b290aF9yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHNvbnlfbmNfcmZraWxsX3NldDsKKwlzb255X2JsdWV0b290aF9yZmtpbGwtPmdldF9zdGF0ZSA9IHNvbnlfbmNfcmZraWxsX2dldDsKKwlzb255X2JsdWV0b290aF9yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOworCXNvbnlfYmx1ZXRvb3RoX3Jma2lsbC0+ZGF0YSA9ICh2b2lkICopU09OWV9CTFVFVE9PVEg7CisJZXJyID0gcmZraWxsX3JlZ2lzdGVyKHNvbnlfYmx1ZXRvb3RoX3Jma2lsbCk7CisJaWYgKGVycikKKwkJcmZraWxsX2ZyZWUoc29ueV9ibHVldG9vdGhfcmZraWxsKTsKKwllbHNlCisJCXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9CTFVFVE9PVEhdID0gc29ueV9ibHVldG9vdGhfcmZraWxsOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc29ueV9uY19zZXR1cF93d2FuX3Jma2lsbChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcmZraWxsICpzb255X3d3YW5fcmZraWxsOworCisJc29ueV93d2FuX3Jma2lsbCA9IHJma2lsbF9hbGxvY2F0ZSgmZGV2aWNlLT5kZXYsIFJGS0lMTF9UWVBFX1dXQU4pOworCWlmICghc29ueV93d2FuX3Jma2lsbCkKKwkJcmV0dXJuIC0xOworCXNvbnlfd3dhbl9yZmtpbGwtPm5hbWUgPSAic29ueS13d2FuIjsKKwlzb255X3d3YW5fcmZraWxsLT50b2dnbGVfcmFkaW8gPSBzb255X25jX3Jma2lsbF9zZXQ7CisJc29ueV93d2FuX3Jma2lsbC0+Z2V0X3N0YXRlID0gc29ueV9uY19yZmtpbGxfZ2V0OworCXNvbnlfd3dhbl9yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOworCXNvbnlfd3dhbl9yZmtpbGwtPmRhdGEgPSAodm9pZCAqKVNPTllfV1dBTjsKKwllcnIgPSByZmtpbGxfcmVnaXN0ZXIoc29ueV93d2FuX3Jma2lsbCk7CisJaWYgKGVycikKKwkJcmZraWxsX2ZyZWUoc29ueV93d2FuX3Jma2lsbCk7CisJZWxzZQorCQlzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfV1dBTl0gPSBzb255X3d3YW5fcmZraWxsOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc29ueV9uY19zZXR1cF93aW1heF9yZmtpbGwoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHJma2lsbCAqc29ueV93aW1heF9yZmtpbGw7CisKKwlzb255X3dpbWF4X3Jma2lsbCA9IHJma2lsbF9hbGxvY2F0ZSgmZGV2aWNlLT5kZXYsIFJGS0lMTF9UWVBFX1dJTUFYKTsKKwlpZiAoIXNvbnlfd2ltYXhfcmZraWxsKQorCQlyZXR1cm4gLTE7CisJc29ueV93aW1heF9yZmtpbGwtPm5hbWUgPSAic29ueS13aW1heCI7CisJc29ueV93aW1heF9yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHNvbnlfbmNfcmZraWxsX3NldDsKKwlzb255X3dpbWF4X3Jma2lsbC0+Z2V0X3N0YXRlID0gc29ueV9uY19yZmtpbGxfZ2V0OworCXNvbnlfd2ltYXhfcmZraWxsLT51c2VyX2NsYWltX3Vuc3VwcG9ydGVkID0gMTsKKwlzb255X3dpbWF4X3Jma2lsbC0+ZGF0YSA9ICh2b2lkICopU09OWV9XSU1BWDsKKwllcnIgPSByZmtpbGxfcmVnaXN0ZXIoc29ueV93aW1heF9yZmtpbGwpOworCWlmIChlcnIpCisJCXJma2lsbF9mcmVlKHNvbnlfd2ltYXhfcmZraWxsKTsKKwllbHNlCisJCXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9XSU1BWF0gPSBzb255X3dpbWF4X3Jma2lsbDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzb255X25jX3Jma2lsbF91cGRhdGUoKQoreworCWludCBpOworCWVudW0gcmZraWxsX3N0YXRlIHN0YXRlOworCisJZm9yIChpID0gMDsgaSA8IFNPTllfUkZLSUxMX01BWDsgaSsrKSB7CisJCWlmIChzb255X3Jma2lsbF9kZXZpY2VzW2ldKSB7CisJCQlzb255X3Jma2lsbF9kZXZpY2VzW2ldLT4KKwkJCQlnZXRfc3RhdGUoc29ueV9yZmtpbGxfZGV2aWNlc1tpXS0+ZGF0YSwKKwkJCQkJICAmc3RhdGUpOworCQkJcmZraWxsX2ZvcmNlX3N0YXRlKHNvbnlfcmZraWxsX2RldmljZXNbaV0sIHN0YXRlKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzb255X25jX3Jma2lsbF9zZXR1cChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzdWx0LCByZXQ7CisKKwlpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMjQpID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgMHhiMDAsICZyZXN1bHQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYCisJCSAgICAgICAiVW5hYmxlIHRvIGVudW1lcmF0ZSByZmtpbGwgZGV2aWNlczogJXhcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHJlc3VsdCAmIDB4MSkKKwkJc29ueV9uY19zZXR1cF93aWZpX3Jma2lsbChkZXZpY2UpOworCWlmIChyZXN1bHQgJiAweDIpCisJCXNvbnlfbmNfc2V0dXBfYmx1ZXRvb3RoX3Jma2lsbChkZXZpY2UpOworCWlmIChyZXN1bHQgJiAweDFjKQorCQlzb255X25jX3NldHVwX3d3YW5fcmZraWxsKGRldmljZSk7CisJaWYgKHJlc3VsdCAmIDB4MjApCisJCXNvbnlfbmNfc2V0dXBfd2ltYXhfcmZraWxsKGRldmljZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMjQsMTEgKzEyNTUsMjQgQEAKIAkJCWRwcmludGsoIl9JTkkgTWV0aG9kIGZhaWxlZFxuIik7CiAJfQogCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLAorCQkJCQkgJmhhbmRsZSkpKSB7CisJCWlmIChhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJFQ09OIiwgMSwgTlVMTCkpCisJCQlkcHJpbnRrKCJFQ09OIE1ldGhvZCBmYWlsZWRcbiIpOworCX0KKworCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjAwIiwKKwkJCQkJICZoYW5kbGUpKSkgeworCQlkcHJpbnRrKCJEb2luZyBTTkMgc2V0dXBcbiIpOworCQlzb255X25jX2Z1bmN0aW9uX3NldHVwKGRldmljZSk7CisJCXNvbnlfbmNfcmZraWxsX3NldHVwKGRldmljZSk7CisJfQorCiAJLyogc2V0dXAgaW5wdXQgZGV2aWNlcyBhbmQgaGVscGVyIGZpZm8gKi8KIAlyZXN1bHQgPSBzb255X2xhcHRvcF9zZXR1cF9pbnB1dChkZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlgKLQkJCQkiVW5hYmUgdG8gY3JlYXRlIGlucHV0IGRldmljZXMuXG4iKTsKKwkJCQkiVW5hYmxlIHRvIGNyZWF0ZSBpbnB1dCBkZXZpY2VzLlxuIik7CiAJCWdvdG8gb3V0d2FsazsKIAl9CiAKQEAgLTEwNjMsOSArMTMwNyw2IEBACiAKIAl9CiAKLQkvKiBpbml0aWFsaXplIG1vZGVscyB3aXRoIHNwZWNpZmljIHJlcXVpcmVtZW50cyAqLwotCWRtaV9jaGVja19zeXN0ZW0oc29ueV9uY19pZHMpOwotCiAJcmVzdWx0ID0gc29ueV9wZl9hZGQoKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIG91dGJhY2tsaWdodDsKQEAgLTExMzEsNiArMTM3Miw3IEBACiAJc29ueV9sYXB0b3BfcmVtb3ZlX2lucHV0KCk7CiAKICAgICAgIG91dHdhbGs6CisJc29ueV9uY19yZmtpbGxfY2xlYW51cCgpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExNTYsNiArMTM5OCw3IEBACiAKIAlzb255X3BmX3JlbW92ZSgpOwogCXNvbnlfbGFwdG9wX3JlbW92ZV9pbnB1dCgpOworCXNvbnlfbmNfcmZraWxsX2NsZWFudXAoKTsKIAlkcHJpbnRrKFNPTllfTkNfRFJJVkVSX05BTUUgIiByZW1vdmVkLlxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTExOTUsNyArMTQzOCw2IEBACiAjZGVmaW5lIFNPTllQSV9UWVBFMV9PRkZTRVQJMHgwNAogI2RlZmluZSBTT05ZUElfVFlQRTJfT0ZGU0VUCTB4MTIKICNkZWZpbmUgU09OWVBJX1RZUEUzX09GRlNFVAkweDEyCi0jZGVmaW5lIFNPTllQSV9UWVBFNF9PRkZTRVQJMHgxMgogCiBzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0IHsKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbwlpbzE7CkBAIC0xMzI4LDYgKzE1NzAsNyBAQAogCXsgMHgwMSwgU09OWVBJX0VWRU5UX1BLRVlfUDEgfSwKIAl7IDB4MDIsIFNPTllQSV9FVkVOVF9QS0VZX1AyIH0sCiAJeyAweDA0LCBTT05ZUElfRVZFTlRfUEtFWV9QMyB9LAorCXsgMHgyMCwgU09OWVBJX0VWRU5UX1BLRVlfUDEgfSwKIAl7IDAsIDAgfQogfTsKIApAQCAtMTM3MSw2ICsxNjE0LDcgQEAKIAl7IDB4MzksIFNPTllQSV9FVkVOVF9aT09NX1BSRVNTRUQgfSwKIAl7IDB4MTAsIFNPTllQSV9FVkVOVF9aT09NX0lOX1BSRVNTRUQgfSwKIAl7IDB4MjAsIFNPTllQSV9FVkVOVF9aT09NX09VVF9QUkVTU0VEIH0sCisJeyAweDA0LCBTT05ZUElfRVZFTlRfWk9PTV9QUkVTU0VEIH0sCiAJeyAwLCAwIH0KIH07CiAKQEAgLTE0MDEsNiArMTY0NSwxOSBAQAogCXsgMCwgMCB9CiB9OwogCisvKiBUaGUgc2V0IG9mIHBvc3NpYmxlIHZvbHVtZSBldmVudHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ueXBpX2V2ZW50IHNvbnlwaV92b2x1bWVldltdID0geworCXsgMHgwMSwgU09OWVBJX0VWRU5UX1ZPTFVNRV9JTkNfUFJFU1NFRCB9LAorCXsgMHgwMiwgU09OWVBJX0VWRU5UX1ZPTFVNRV9ERUNfUFJFU1NFRCB9LAorCXsgMCwgMCB9Cit9OworCisvKiBUaGUgc2V0IG9mIHBvc3NpYmxlIGJyaWdodG5lc3MgZXZlbnRzICovCitzdGF0aWMgc3RydWN0IHNvbnlwaV9ldmVudCBzb255cGlfYnJpZ2h0bmVzc2V2W10gPSB7CisJeyAweDgwLCBTT05ZUElfRVZFTlRfQlJJR0hUTkVTU19QUkVTU0VEIH0sCisJeyAwLCAwIH0KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc29ueXBpX2V2ZW50dHlwZXMgdHlwZTFfZXZlbnRzW10gPSB7CiAJeyAwLCAweGZmZmZmZmZmLCBzb255cGlfcmVsZWFzZWV2IH0sCiAJeyAweDcwLCBTT05ZUElfTUVZRV9NQVNLLCBzb255cGlfbWV5ZWV2IH0sCkBAIC0xNDM4LDE3ICsxNjk1LDExIEBACiAJeyAweDMxLCBTT05ZUElfTUVNT1JZU1RJQ0tfTUFTSywgc29ueXBpX21lbW9yeXN0aWNrZXYgfSwKIAl7IDB4NDEsIFNPTllQSV9CQVRURVJZX01BU0ssIHNvbnlwaV9iYXR0ZXJ5ZXYgfSwKIAl7IDB4MzEsIFNPTllQSV9QS0VZX01BU0ssIHNvbnlwaV9wa2V5ZXYgfSwKLQl7IDAgfSwKLX07Ci1zdGF0aWMgc3RydWN0IHNvbnlwaV9ldmVudHR5cGVzIHR5cGU0X2V2ZW50c1tdID0gewotCXsgMCwgMHhmZmZmZmZmZiwgc29ueXBpX3JlbGVhc2VldiB9LAotCXsgMHgyMSwgU09OWVBJX0ZOS0VZX01BU0ssIHNvbnlwaV9mbmtleWV2IH0sCi0JeyAweDMxLCBTT05ZUElfV0lSRUxFU1NfTUFTSywgc29ueXBpX3dsZXNzZXYgfSwKLQl7IDB4MzEsIFNPTllQSV9NRU1PUllTVElDS19NQVNLLCBzb255cGlfbWVtb3J5c3RpY2tldiB9LAotCXsgMHg0MSwgU09OWVBJX0JBVFRFUllfTUFTSywgc29ueXBpX2JhdHRlcnlldiB9LAogCXsgMHgwNSwgU09OWVBJX1BLRVlfTUFTSywgc29ueXBpX3BrZXlldiB9LAogCXsgMHgwNSwgU09OWVBJX1pPT01fTUFTSywgc29ueXBpX3pvb21ldiB9LAogCXsgMHgwNSwgU09OWVBJX0NBUFRVUkVfTUFTSywgc29ueXBpX2NhcHR1cmVldiB9LAorCXsgMHgwNSwgU09OWVBJX1BLRVlfTUFTSywgc29ueXBpX3ZvbHVtZWV2IH0sCisJeyAweDA1LCBTT05ZUElfUEtFWV9NQVNLLCBzb255cGlfYnJpZ2h0bmVzc2V2IH0sCiAJeyAwIH0sCiB9OwogCkBAIC0xNTExLDExICsxNzYyLDExIEBACiAvKgogICogbWluaWRyaXZlcnMgZm9yIFNQSUMgbW9kZWxzCiAgKi8KLXN0YXRpYyBpbnQgdHlwZTRfaGFuZGxlX2lycShjb25zdCB1OCBkYXRhX21hc2ssIGNvbnN0IHU4IGV2KQorc3RhdGljIGludCB0eXBlM19oYW5kbGVfaXJxKGNvbnN0IHU4IGRhdGFfbWFzaywgY29uc3QgdTggZXYpCiB7CiAJLyoKIAkgKiAweDMxIGNvdWxkIG1lYW4gd2UgaGF2ZSB0byB0YWtlIHNvbWUgZXh0cmEgYWN0aW9uIGFuZCB3YWl0IGZvcgotCSAqIHRoZSBuZXh0IGlycSBmb3Igc29tZSBUeXBlNCBtb2RlbHMsIGl0IHdpbGwgZ2VuZXJhdGUgYSBuZXcKKwkgKiB0aGUgbmV4dCBpcnEgZm9yIHNvbWUgVHlwZTMgbW9kZWxzLCBpdCB3aWxsIGdlbmVyYXRlIGEgbmV3CiAJICogaXJxIGFuZCB3ZSBjYW4gcmVhZCBuZXcgZGF0YSBmcm9tIHRoZSBkZXZpY2U6CiAJICogIC0gMHg1YyBhbmQgMHg1ZiByZXF1aXJlcyAweEEwCiAJICogIC0gMHg2MSByZXF1aXJlcyAweEIzCkBAIC0xNTQ1LDE2ICsxNzk2LDEwIEBACiAJfSwKIAl7CiAJCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTMsCi0JCS5oYW5kbGVfaXJxID0gTlVMTCwKKwkJLmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxLAogCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQsCiAJCS5ldmVudF90eXBlcyA9IHR5cGUzX2V2ZW50cywKIAl9LAotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFNCwKLQkJLmhhbmRsZV9pcnEgPSB0eXBlNF9oYW5kbGVfaXJxLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFNF9PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGU0X2V2ZW50cywKLQl9LAogfTsKIAogc3RhdGljIHZvaWQgc29ueV9waWNfZGV0ZWN0X2RldmljZV90eXBlKHN0cnVjdCBzb255X3BpY19kZXYgKmRldikKQEAgLTE1NzgsMTQgKzE4MjMsMjEgQEAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbM107CisJCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzJdOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzQsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbM107CisJCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzJdOworCQlnb3RvIG91dDsKKwl9CisKKwlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzEsIE5VTEwpOworCWlmIChwY2lkZXYpIHsKKwkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU5OCw4ICsxODUwLDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gRFJWX1BGWCAiZGV0ZWN0ZWQgVHlwZSVkIG1vZGVsXG4iLAogCQkJZGV2LT5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxID8gMSA6Ci0JCQlkZXYtPmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTIgPyAyIDoKLQkJCWRldi0+Y29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMyA/IDMgOiA0KTsKKwkJCWRldi0+Y29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMiA/IDIgOiAzKTsKIH0KIAogLyogY2FtZXJhIHRlc3RzIGFuZCBwb3dlcm9uL3Bvd2Vyb2ZmICovCkBAIC0xNzU0LDE3ICsyMDA1LDE0IEBACiBFWFBPUlRfU1lNQk9MKHNvbnlfcGljX2NhbWVyYV9jb21tYW5kKTsKIAogLyogZ3Bycy9lZGdlIG1vZGVtIChTWjQ2ME4gYW5kIFNaMjEwUCksIHRoYW5rcyB0byBKb3NodWEgV2lzZSAqLwotc3RhdGljIHZvaWQgc29ueV9waWNfc2V0X3d3YW5wb3dlcih1OCBzdGF0ZSkKK3N0YXRpYyB2b2lkIF9fc29ueV9waWNfc2V0X3d3YW5wb3dlcih1OCBzdGF0ZSkKIHsKIAlzdGF0ZSA9ICEhc3RhdGU7Ci0JbXV0ZXhfbG9jaygmc3BpY19kZXYubG9jayk7Ci0JaWYgKHNwaWNfZGV2Lnd3YW5fcG93ZXIgPT0gc3RhdGUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZzcGljX2Rldi5sb2NrKTsKKwlpZiAoc3BpY19kZXYud3dhbl9wb3dlciA9PSBzdGF0ZSkKIAkJcmV0dXJuOwotCX0KIAlzb255X3BpY19jYWxsMigweEIwLCBzdGF0ZSk7CisJc29ueV9waWNfY2FsbDEoMHg4Mik7CiAJc3BpY19kZXYud3dhbl9wb3dlciA9IHN0YXRlOwotCW11dGV4X3VubG9jaygmc3BpY19kZXYubG9jayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNvbnlfcGljX3d3YW5wb3dlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNzc2LDcgKzIwMjQsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmZmVyLCBOVUxMLCAxMCk7Ci0Jc29ueV9waWNfc2V0X3d3YW5wb3dlcih2YWx1ZSk7CisJbXV0ZXhfbG9jaygmc3BpY19kZXYubG9jayk7CisJX19zb255X3BpY19zZXRfd3dhbnBvd2VyKHZhbHVlKTsKKwltdXRleF91bmxvY2soJnNwaWNfZGV2LmxvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTkyOSwxMCArMjE3OSwxNSBAQAogc3RhdGljIGludCBzb255cGlfbWlzY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCS8qIEZsdXNoIGlucHV0IHF1ZXVlIG9uIGZpcnN0IG9wZW4gKi8KLQlsb2NrX2tlcm5lbCgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShzb255cGlfY29tcGF0LmZpZm8tPmxvY2ssIGZsYWdzKTsKKwogCWlmIChhdG9taWNfaW5jX3JldHVybigmc29ueXBpX2NvbXBhdC5vcGVuX2NvdW50KSA9PSAxKQotCQlrZmlmb19yZXNldChzb255cGlfY29tcGF0LmZpZm8pOwotCXVubG9ja19rZXJuZWwoKTsKKwkJX19rZmlmb19yZXNldChzb255cGlfY29tcGF0LmZpZm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzb255cGlfY29tcGF0LmZpZm8tPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xOTg1LDggKzIyNDAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNvbnlwaV9taXNjX2lvY3RsKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBzb255cGlfbWlzY19pb2N0bChzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHJldCA9IDA7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC0yMTIwLDcgKzIzNzUsNyBAQAogCS5vcGVuCQk9IHNvbnlwaV9taXNjX29wZW4sCiAJLnJlbGVhc2UJPSBzb255cGlfbWlzY19yZWxlYXNlLAogCS5mYXN5bmMJCT0gc29ueXBpX21pc2NfZmFzeW5jLAotCS5pb2N0bAkJPSBzb255cGlfbWlzY19pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBzb255cGlfbWlzY19pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBzb255cGlfbWlzY19kZXZpY2UgPSB7CkBAIC0yNTYxLDcgKzI4MTYsNyBAQAogCXJlc3VsdCA9IHNvbnlfcGljX3Bvc3NpYmxlX3Jlc291cmNlcyhkZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlgKLQkJCQkiVW5hYmUgdG8gcmVhZCBwb3NzaWJsZSByZXNvdXJjZXMuXG4iKTsKKwkJCQkiVW5hYmxlIHRvIHJlYWQgcG9zc2libGUgcmVzb3VyY2VzLlxuIik7CiAJCWdvdG8gZXJyX2ZyZWVfcmVzb3VyY2VzOwogCX0KIApAQCAtMjU2OSw3ICsyODI0LDcgQEAKIAlyZXN1bHQgPSBzb255X2xhcHRvcF9zZXR1cF9pbnB1dChkZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlgKLQkJCQkiVW5hYmUgdG8gY3JlYXRlIGlucHV0IGRldmljZXMuXG4iKTsKKwkJCQkiVW5hYmxlIHRvIGNyZWF0ZSBpbnB1dCBkZXZpY2VzLlxuIik7CiAJCWdvdG8gZXJyX2ZyZWVfcmVzb3VyY2VzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IGI0YTRhYTkuLjQ0MTY2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTk0LDkgKzk0LDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKikgcmVzdWx0LnBvaW50ZXI7Ci0JaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUiAmJgotCQlvYmotPmJ1ZmZlci5sZW5ndGggPT0gc2l6ZW9mKHUzMikpIHsKLQkJdG1wID0gKigodTMyICopIG9iai0+YnVmZmVyLnBvaW50ZXIpOworCWlmIChvYmogJiYgb2JqLT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCXRtcCA9IG9iai0+aW50ZWdlci52YWx1ZTsKIAl9IGVsc2UgewogCQl0bXAgPSAwOwogCX0KQEAgLTEwOSw3ICsxMDgsNyBAQAogCQkqb3V0ID0gKHRtcCA9PSAzKSA/IDEgOiAwOwogCQlyZXR1cm4gMDsKIAljYXNlIFRDMTEwMF9JTlNUQU5DRV9KT0dESUFMOgotCQkqb3V0ID0gKHRtcCA9PSAxKSA/IDEgOiAwOworCQkqb3V0ID0gKHRtcCA9PSAxKSA/IDAgOiAxOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCBkOTlmMWNkLi5hNDBiMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQm9yaXNsYXYgRGVpYW5vdiA8Ym9yaXNsYXZAdXNlcnMuc2YubmV0PgotICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEhlbnJpcXVlIGRlIE1vcmFlcyBIb2xzY2h1aCA8aG1oQGhtaC5lbmcuYnI+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgSGVucmlxdWUgZGUgTW9yYWVzIEhvbHNjaHVoIDxobWhAaG1oLmVuZy5icj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKICNkZWZpbmUgVFBBQ1BJX1ZFUlNJT04gIjAuMjIiCi0jZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwMjAwCisjZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwMzAwCiAKIC8qCiAgKiAgQ2hhbmdlbG9nOgpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMTcyLDI5ICsxNzMsMjYgQEAKIAlUUEFDUElfUkZLX1VXQl9TV19JRCwKIH07CiAKLS8qIERlYnVnZ2luZyAqLworLyogcHJpbnRrIGhlYWRlcnMgKi8KICNkZWZpbmUgVFBBQ1BJX0xPRyBUUEFDUElfRklMRSAiOiAiCi0jZGVmaW5lIFRQQUNQSV9BTEVSVAlLRVJOX0FMRVJUICBUUEFDUElfTE9HCi0jZGVmaW5lIFRQQUNQSV9DUklUCUtFUk5fQ1JJVCAgIFRQQUNQSV9MT0cKLSNkZWZpbmUgVFBBQ1BJX0VSUglLRVJOX0VSUiAgICBUUEFDUElfTE9HCi0jZGVmaW5lIFRQQUNQSV9OT1RJQ0UJS0VSTl9OT1RJQ0UgVFBBQ1BJX0xPRwotI2RlZmluZSBUUEFDUElfSU5GTwlLRVJOX0lORk8gICBUUEFDUElfTE9HCi0jZGVmaW5lIFRQQUNQSV9ERUJVRwlLRVJOX0RFQlVHICBUUEFDUElfTE9HCisjZGVmaW5lIFRQQUNQSV9FTUVSRwlLRVJOX0VNRVJHCVRQQUNQSV9MT0cKKyNkZWZpbmUgVFBBQ1BJX0FMRVJUCUtFUk5fQUxFUlQJVFBBQ1BJX0xPRworI2RlZmluZSBUUEFDUElfQ1JJVAlLRVJOX0NSSVQJVFBBQ1BJX0xPRworI2RlZmluZSBUUEFDUElfRVJSCUtFUk5fRVJSCVRQQUNQSV9MT0cKKyNkZWZpbmUgVFBBQ1BJX1dBUk4JS0VSTl9XQVJOSU5HCVRQQUNQSV9MT0cKKyNkZWZpbmUgVFBBQ1BJX05PVElDRQlLRVJOX05PVElDRQlUUEFDUElfTE9HCisjZGVmaW5lIFRQQUNQSV9JTkZPCUtFUk5fSU5GTwlUUEFDUElfTE9HCisjZGVmaW5lIFRQQUNQSV9ERUJVRwlLRVJOX0RFQlVHCVRQQUNQSV9MT0cKIAorLyogRGVidWdnaW5nIHByaW50ayBncm91cHMgKi8KICNkZWZpbmUgVFBBQ1BJX0RCR19BTEwJCTB4ZmZmZgorI2RlZmluZSBUUEFDUElfREJHX0RJU0NMT1NFVEFTSwkweDgwMDAKICNkZWZpbmUgVFBBQ1BJX0RCR19JTklUCQkweDAwMDEKICNkZWZpbmUgVFBBQ1BJX0RCR19FWElUCQkweDAwMDIKLSNkZWZpbmUgZGJnX3ByaW50ayhhX2RiZ19sZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKLQlkbyB7IGlmIChkYmdfbGV2ZWwgJiBhX2RiZ19sZXZlbCkgXAotCQlwcmludGsoVFBBQ1BJX0RFQlVHICIlczogIiBmb3JtYXQsIF9fZnVuY19fICwgIyMgYXJnKTsgXAotCX0gd2hpbGUgKDApCi0jaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUcKLSNkZWZpbmUgdmRiZ19wcmludGsoYV9kYmdfbGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCi0JZGJnX3ByaW50ayhhX2RiZ19sZXZlbCwgZm9ybWF0LCAjIyBhcmcpCi1zdGF0aWMgY29uc3QgY2hhciAqc3RyX3N1cHBvcnRlZChpbnQgaXNfc3VwcG9ydGVkKTsKLSNlbHNlCi0jZGVmaW5lIHZkYmdfcHJpbnRrKGFfZGJnX2xldmVsLCBmb3JtYXQsIGFyZy4uLikKLSNlbmRpZgorI2RlZmluZSBUUEFDUElfREJHX1JGS0lMTAkweDAwMDQKKyNkZWZpbmUgVFBBQ1BJX0RCR19IS0VZCQkweDAwMDgKKyNkZWZpbmUgVFBBQ1BJX0RCR19GQU4JCTB4MDAxMAorI2RlZmluZSBUUEFDUElfREJHX0JSR0hUCTB4MDAyMAogCiAjZGVmaW5lIG9ub2ZmKHN0YXR1cywgYml0KSAoKHN0YXR1cykgJiAoMSA8PCAoYml0KSkgPyAib24iIDogIm9mZiIpCiAjZGVmaW5lIGVuYWJsZWQoc3RhdHVzLCBiaXQpICgoc3RhdHVzKSAmICgxIDw8IChiaXQpKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpCkBAIC0yNzcsNyArMjc1LDYgQEAKIAogc3RhdGljIHN0cnVjdCB7CiAJdTE2IGhvdGtleV9tYXNrX2ZmOjE7Ci0JdTE2IGJyaWdodF9jbW9zX2VjX3Vuc3luYzoxOwogfSB0cF93YXJuZWQ7CiAKIHN0cnVjdCB0aGlua3BhZF9pZF9kYXRhIHsKQEAgLTMyNiw2ICszMjMsMzkgQEAKICNlbmRpZgogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRGVidWdnaW5nIGhlbHBlcnMKKyAqLworCisjZGVmaW5lIGRiZ19wcmludGsoYV9kYmdfbGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBpZiAoZGJnX2xldmVsICYgKGFfZGJnX2xldmVsKSkgXAorCQlwcmludGsoVFBBQ1BJX0RFQlVHICIlczogIiBmb3JtYXQsIF9fZnVuY19fICwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9ERUJVRworI2RlZmluZSB2ZGJnX3ByaW50ayBkYmdfcHJpbnRrCitzdGF0aWMgY29uc3QgY2hhciAqc3RyX3N1cHBvcnRlZChpbnQgaXNfc3VwcG9ydGVkKTsKKyNlbHNlCisjZGVmaW5lIHZkYmdfcHJpbnRrKGFfZGJnX2xldmVsLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0cGFjcGlfbG9nX3VzZXJ0YXNrKGNvbnN0IGNoYXIgKiBjb25zdCB3aGF0KQoreworCXByaW50ayhUUEFDUElfREVCVUcgIiVzOiBhY2Nlc3MgYnkgcHJvY2VzcyB3aXRoIFBJRCAlZFxuIiwKKwkJd2hhdCwgdGFza190Z2lkX3ZucihjdXJyZW50KSk7Cit9CisKKyNkZWZpbmUgdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKHdoYXQsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseSggXAorCQkgICAgKGRiZ19sZXZlbCAmIFRQQUNQSV9EQkdfRElTQ0xPU0VUQVNLKSAmJiBcCisJCSAgICAodHBhY3BpX2xpZmVjeWNsZSA9PSBUUEFDUElfTElGRV9SVU5OSU5HKSkpIHsgXAorCQkJcHJpbnRrKFRQQUNQSV9ERUJVRyAiJXM6IFBJRCAlZDogIiBmb3JtYXQsIFwKKwkJCQl3aGF0LCB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpLCAjIyBhcmcpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTk4OSwxMCArMTAxOSwxMyBAQAogCQkvKiB0cnkgdG8gc2V0IHRoZSBpbml0aWFsIHN0YXRlIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgcmZraWxsCiAJCSAqIHR5cGUsIHNpbmNlIHdlIGFzayB0aGUgZmlybXdhcmUgdG8gcHJlc2VydmUgaXQgYWNyb3NzIFM1IGluCiAJCSAqIE5WUkFNICovCi0JCXJma2lsbF9zZXRfZGVmYXVsdChyZmt0eXBlLAorCQlpZiAocmZraWxsX3NldF9kZWZhdWx0KHJma3R5cGUsCiAJCQkJKGluaXRpYWxfc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCkgPwogCQkJCQlSRktJTExfU1RBVEVfVU5CTE9DS0VEIDoKLQkJCQkJUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCk7CisJCQkJCVJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQpID09IC1FUEVSTSkKKwkJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkJCSAgICAiRGVmYXVsdCBzdGF0ZSBmb3IgJXMgY2Fubm90IGJlIGNoYW5nZWRcbiIsCisJCQkJICAgIG5hbWUpOwogCX0KIAogCSpyZmsgPSByZmtpbGxfYWxsb2NhdGUoJnRwYWNwaV9wZGV2LT5kZXYsIHJma3R5cGUpOwpAQCAtMTAyMCw2ICsxMDUzLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50a19kZXByZWNhdGVkX2F0dHJpYnV0ZShjb25zdCBjaGFyICogY29uc3Qgd2hhdCwKKwkJCQkJY29uc3QgY2hhciAqIGNvbnN0IGRldGFpbHMpCit7CisJdHBhY3BpX2xvZ191c2VydGFzaygiZGVwcmVjYXRlZCBzeXNmcyBhdHRyaWJ1dGUiKTsKKwlwcmludGsoVFBBQ1BJX1dBUk4gIldBUk5JTkc6IHN5c2ZzIGF0dHJpYnV0ZSAlcyBpcyBkZXByZWNhdGVkIGFuZCAiCisJCSJ3aWxsIGJlIHJlbW92ZWQuICVzXG4iLAorCQl3aGF0LCBkZXRhaWxzKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRrX2RlcHJlY2F0ZWRfcmZraWxsX2F0dHJpYnV0ZShjb25zdCBjaGFyICogY29uc3Qgd2hhdCkKK3sKKwlwcmludGtfZGVwcmVjYXRlZF9hdHRyaWJ1dGUod2hhdCwKKwkJCSJQbGVhc2Ugc3dpdGNoIHRvIGdlbmVyaWMgcmZraWxsIGJlZm9yZSB5ZWFyIDIwMTAiKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHRoaW5rcGFkLWFjcGkgZHJpdmVyIGF0dHJpYnV0ZXMKICAqLwpAQCAtMTM4Miw3ICsxNDMwLDYgQEAKIAogc3RhdGljIGludCBob3RrZXlfYXV0b3NsZWVwX2FjazsKIAotc3RhdGljIGludCBob3RrZXlfb3JpZ19zdGF0dXM7CiBzdGF0aWMgdTMyIGhvdGtleV9vcmlnX21hc2s7CiBzdGF0aWMgdTMyIGhvdGtleV9hbGxfbWFzazsKIHN0YXRpYyB1MzIgaG90a2V5X3Jlc2VydmVkX21hc2s7CkBAIC0xNTI5LDkgKzE1NzYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhvdGtleV9zdGF0dXNfc2V0KGludCBzdGF0dXMpCitzdGF0aWMgaW50IGhvdGtleV9zdGF0dXNfc2V0KGJvb2wgZW5hYmxlKQogewotCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgTlVMTCwgIk1IS0MiLCAidmQiLCBzdGF0dXMpKQorCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgTlVMTCwgIk1IS0MiLCAidmQiLCBlbmFibGUgPyAxIDogMCkpCiAJCXJldHVybiAtRUlPOwogCiAJcmV0dXJuIDA7CkBAIC0xODQ3LDYgKzE4OTQsOSBAQAogewogCWludCByZXMsIHN0YXR1czsKIAorCXByaW50a19kZXByZWNhdGVkX2F0dHJpYnV0ZSgiaG90a2V5X2VuYWJsZSIsCisJCQkiSG90a2V5IHJlcG9ydGluZyBpcyBhbHdheXMgZW5hYmxlZCIpOworCiAJcmVzID0gaG90a2V5X3N0YXR1c19nZXQoJnN0YXR1cyk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKQEAgLTE4NTksMTQgKzE5MDksMTcgQEAKIAkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHQ7Ci0JaW50IHJlczsKKworCXByaW50a19kZXByZWNhdGVkX2F0dHJpYnV0ZSgiaG90a2V5X2VuYWJsZSIsCisJCQkiSG90a2V5cyBjYW4gYmUgZGlzYWJsZWQgdGhyb3VnaCBob3RrZXlfbWFzayIpOwogCiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAxLCAmdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzID0gaG90a2V5X3N0YXR1c19zZXQodCk7CisJaWYgKHQgPT0gMCkKKwkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiAocmVzKSA/IHJlcyA6IGNvdW50OworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV9lbmFibGUgPQpAQCAtMTkxMCw2ICsxOTYzLDggQEAKIAogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaG90a2V5X21hc2siLCAic2V0IHRvIDB4JTA4bHhcbiIsIHQpOworCiAJcmV0dXJuIChyZXMpID8gcmVzIDogY291bnQ7CiB9CiAKQEAgLTE5MjIsNyArMTk3Nyw3IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaG90a2V5X29yaWdfc3RhdHVzKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV9iaW9zX2VuYWJsZWQgPQpAQCAtMTk5Niw2ICsyMDUxLDggQEAKIAogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaG90a2V5X3NvdXJjZV9tYXNrIiwgInNldCB0byAweCUwOGx4XG4iLCB0KTsKKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjAyOCw2ICsyMDg1LDggQEAKIAlob3RrZXlfcG9sbF9zZXR1cCgxKTsKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAKKwl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soImhvdGtleV9wb2xsX2ZyZXEiLCAic2V0IHRvICVsdVxuIiwgdCk7CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTIxOTcsMTEgKzIyNTYsMTEgQEAKIAlrZnJlZShob3RrZXlfa2V5Y29kZV9tYXApOwogCiAJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleSkgewotCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCwKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0VYSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkgICAicmVzdG9yaW5nIG9yaWdpbmFsIGhvdCBrZXkgbWFza1xuIik7CiAJCS8qIG5vIHNob3J0LWNpcmN1aXQgYm9vbGVhbiBvcGVyYXRvciBiZWxvdyEgKi8KIAkJaWYgKChob3RrZXlfbWFza19zZXQoaG90a2V5X29yaWdfbWFzaykgfAotCQkgICAgIGhvdGtleV9zdGF0dXNfc2V0KGhvdGtleV9vcmlnX3N0YXR1cykpICE9IDApCisJCSAgICAgaG90a2V5X3N0YXR1c19zZXQoZmFsc2UpKSAhPSAwKQogCQkJcHJpbnRrKFRQQUNQSV9FUlIKIAkJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgaG90IGtleSBtYXNrICIKIAkJCSAgICAgICAidG8gQklPUyBkZWZhdWx0c1xuIik7CkBAIC0yMzI3LDcgKzIzODYsOCBAQAogCWludCBzdGF0dXM7CiAJaW50IGhrZXl2OwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaW5pdGlhbGl6aW5nIGhvdGtleSBzdWJkcml2ZXJcbiIpOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJCSJpbml0aWFsaXppbmcgaG90a2V5IHN1YmRyaXZlclxuIik7CiAKIAlCVUdfT04oIXRwYWNwaV9pbnB1dGRldik7CiAJQlVHX09OKHRwYWNwaV9pbnB1dGRldi0+b3BlbiAhPSBOVUxMIHx8CkBAIC0yMzQ0LDcgKzI0MDQsOCBAQAogCS8qIGhvdGtleSBub3Qgc3VwcG9ydGVkIG9uIDU3MCAqLwogCXRwX2ZlYXR1cmVzLmhvdGtleSA9IGhrZXlfaGFuZGxlICE9IE5VTEw7CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJob3RrZXlzIGFyZSAlc1xuIiwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSJob3RrZXlzIGFyZSAlc1xuIiwKIAkJc3RyX3N1cHBvcnRlZCh0cF9mZWF0dXJlcy5ob3RrZXkpKTsKIAogCWlmICghdHBfZmVhdHVyZXMuaG90a2V5KQpAQCAtMjM3NiwxMCArMjQzNywxNCBAQAogCQkJICogVDR4LCBYMzEsIGFuZCBsYXRlcgogCQkJICovCiAJCQl0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayA9IDE7CisJCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCQkJImZpcm13YXJlIEhLRVkgaW50ZXJmYWNlIHZlcnNpb246IDB4JXhcbiIsCisJCQkJaGtleXYpOwogCQl9CiAJfQogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaG90a2V5IG1hc2tzIGFyZSAlc1xuIiwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSJob3RrZXkgbWFza3MgYXJlICVzXG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSk7CiAKIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKQEAgLTIzOTYsMTAgKzI0NjEsNiBAQAogCiAJLyogaG90a2V5X3NvdXJjZV9tYXNrICptdXN0KiBiZSB6ZXJvIGZvcgogCSAqIHRoZSBmaXJzdCBob3RrZXlfbWFza19nZXQgKi8KLQlyZXMgPSBob3RrZXlfc3RhdHVzX2dldCgmaG90a2V5X29yaWdfc3RhdHVzKTsKLQlpZiAocmVzKQotCQlnb3RvIGVycl9leGl0OwotCiAJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7CiAJCXJlcyA9IGhvdGtleV9tYXNrX2dldCgpOwogCQlpZiAocmVzKQpAQCAtMjQyMiw3ICsyNDgzLDcgQEAKIAkJaG90a2V5X3NvdXJjZV9tYXNrID0gVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLOwogCX0KIAotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICVkXG4iLAogCQkgICAgaG90a2V5X3NvdXJjZV9tYXNrLCBob3RrZXlfcG9sbF9mcmVxKTsKICNlbmRpZgpAQCAtMjQ3NiwxMiArMjUzNywxMiBAQAogCX0KIAogCWlmICh0aGlua3BhZF9pZC52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9MRU5PVk8pIHsKLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsCisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJICAgInVzaW5nIExlbm92byBkZWZhdWx0IGhvdCBrZXkgbWFwXG4iKTsKIAkJbWVtY3B5KGhvdGtleV9rZXljb2RlX21hcCwgJmxlbm92b19rZXljb2RlX21hcCwKIAkJCVRQQUNQSV9IT1RLRVlfTUFQX1NJWkUpOwogCX0gZWxzZSB7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAorCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJCSAgICJ1c2luZyBJQk0gZGVmYXVsdCBob3Qga2V5IG1hcFxuIik7CiAJCW1lbWNweShob3RrZXlfa2V5Y29kZV9tYXAsICZpYm1fa2V5Y29kZV9tYXAsCiAJCQlUUEFDUElfSE9US0VZX01BUF9TSVpFKTsKQEAgLTI1MzgsOCArMjU5OSw5IEBACiAJCQl8ICgxIDw8IFRQX0FDUElfSE9US0VZU0NBTl9GTkVORCk7CiAJfQogCi0JZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJlbmFibGluZyBob3Qga2V5IGhhbmRsaW5nXG4iKTsKLQlyZXMgPSBob3RrZXlfc3RhdHVzX3NldCgxKTsKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJCSJlbmFibGluZyBmaXJtd2FyZSBIS0VZIGV2ZW50IGludGVyZmFjZS4uLlxuIik7CisJcmVzID0gaG90a2V5X3N0YXR1c19zZXQodHJ1ZSk7CiAJaWYgKHJlcykgewogCQlob3RrZXlfZXhpdCgpOwogCQlyZXR1cm4gcmVzOwpAQCAtMjU1Miw4ICsyNjE0LDggQEAKIAkJcmV0dXJuIHJlczsKIAl9CiAKLQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwKLQkJCSJsZWdhY3kgaG90IGtleSByZXBvcnRpbmcgb3ZlciBwcm9jZnMgJXNcbiIsCisJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCQkibGVnYWN5IGlibS9ob3RrZXkgZXZlbnQgcmVwb3J0aW5nIG92ZXIgcHJvY2ZzICVzXG4iLAogCQkJKGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpID8KIAkJCQkiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKIApAQCAtMjg4NCw5ICsyOTQ2LDE3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHZvaWQgaG90a2V5X2VuYWJsZWRpc2FibGVfd2Fybih2b2lkKQoreworCXRwYWNwaV9sb2dfdXNlcnRhc2soInByb2NmcyBob3RrZXkgZW5hYmxlL2Rpc2FibGUiKTsKKwlXQVJOKDEsIFRQQUNQSV9XQVJOCisJICAgICAiaG90a2V5IGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gIgorCSAgICAgInJlbW92ZWQgZnJvbSB0aGUgZHJpdmVyLiBIb3RrZXlzIGFyZSBhbHdheXMgZW5hYmxlZC5cbiIpOworfQorCiBzdGF0aWMgaW50IGhvdGtleV93cml0ZShjaGFyICpidWYpCiB7Ci0JaW50IHJlcywgc3RhdHVzOworCWludCByZXM7CiAJdTMyIG1hc2s7CiAJY2hhciAqY21kOwogCkBAIC0yODk2LDE3ICsyOTY2LDE2IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlzdGF0dXMgPSAtMTsKIAltYXNrID0gaG90a2V5X21hc2s7CiAKIAlyZXMgPSAwOwogCXdoaWxlICgoY21kID0gbmV4dF9jbWQoJmJ1ZikpKSB7CiAJCWlmIChzdHJsZW5jbXAoY21kLCAiZW5hYmxlIikgPT0gMCkgewotCQkJc3RhdHVzID0gMTsKKwkJCWhvdGtleV9lbmFibGVkaXNhYmxlX3dhcm4oKTsKIAkJfSBlbHNlIGlmIChzdHJsZW5jbXAoY21kLCAiZGlzYWJsZSIpID09IDApIHsKLQkJCXN0YXR1cyA9IDA7CisJCQlob3RrZXlfZW5hYmxlZGlzYWJsZV93YXJuKCk7CisJCQlyZXMgPSAtRVBFUk07CiAJCX0gZWxzZSBpZiAoc3RybGVuY21wKGNtZCwgInJlc2V0IikgPT0gMCkgewotCQkJc3RhdHVzID0gaG90a2V5X29yaWdfc3RhdHVzOwogCQkJbWFzayA9IGhvdGtleV9vcmlnX21hc2s7CiAJCX0gZWxzZSBpZiAoc3NjYW5mKGNtZCwgIjB4JXgiLCAmbWFzaykgPT0gMSkgewogCQkJLyogbWFzayBzZXQgKi8KQEAgLTI5MTcsOCArMjk4NiwxMCBAQAogCQkJZ290byBlcnJleGl0OwogCQl9CiAJfQotCWlmIChzdGF0dXMgIT0gLTEpCi0JCXJlcyA9IGhvdGtleV9zdGF0dXNfc2V0KHN0YXR1cyk7CisKKwlpZiAoIXJlcykKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgaG90a2V5IiwKKwkJCSJzZXQgbWFzayB0byAweCUwOHhcbiIsIG1hc2spOwogCiAJaWYgKCFyZXMgJiYgbWFzayAhPSBob3RrZXlfbWFzaykKIAkJcmVzID0gaG90a2V5X21hc2tfc2V0KG1hc2spOwpAQCAtMjk3MSwxMyArMzA0MiwxNyBAQAogCVRQX0FDUElfQkxUSF9TQVZFX1NUQVRFCQk9IDB4MDUsIC8qIFNhdmUgc3RhdGUgZm9yIFM0L1M1ICovCiB9OwogCisjZGVmaW5lIFRQQUNQSV9SRktfQkxVRVRPT1RIX1NXX05BTUUJInRwYWNwaV9ibHVldG9vdGhfc3ciCisKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICp0cGFjcGlfYmx1ZXRvb3RoX3Jma2lsbDsKIAogc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewogCS8qIFRyeSB0byBtYWtlIHN1cmUgcmFkaW8gd2lsbCByZXN1bWUgcG93ZXJlZCBvZmYgKi8KLQlhY3BpX2V2YWxmKE5VTEwsIE5VTEwsICJcXEJMVEgiLCAidmQiLAotCQkgICBUUF9BQ1BJX0JMVEhfUFdSX09GRl9PTl9SRVNVTUUpOworCWlmICghYWNwaV9ldmFsZihOVUxMLCBOVUxMLCAiXFxCTFRIIiwgInZkIiwKKwkJICAgVFBfQUNQSV9CTFRIX1BXUl9PRkZfT05fUkVTVU1FKSkKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCQkiYmx1ZXRvb3RoIHBvd2VyIGRvd24gb24gcmVzdW1lIHJlcXVlc3QgZmFpbGVkXG4iKTsKIH0KIAogc3RhdGljIGludCBibHVldG9vdGhfZ2V0X3JhZGlvc3codm9pZCkKQEAgLTMwMTUsNiArMzA5MCwxMCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm47CiAJcmZraWxsX2ZvcmNlX3N0YXRlKHRwYWNwaV9ibHVldG9vdGhfcmZraWxsLCBzdGF0dXMpOworCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCSJmb3JjZWQgcmZraWxsIHN0YXRlIHRvICVkXG4iLAorCQlzdGF0dXMpOwogfQogCiBzdGF0aWMgaW50IGJsdWV0b290aF9zZXRfcmFkaW9zdyhpbnQgcmFkaW9fb24sIGludCB1cGRhdGVfcmZrKQpAQCAtMzAzMCw2ICszMTA5LDkgQEAKIAkgICAgJiYgcmFkaW9fb24pCiAJCXJldHVybiAtRVBFUk07CiAKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJIndpbGwgJXMgYmx1ZXRvb3RoXG4iLCByYWRpb19vbiA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0RFQlVHRkFDSUxJVElFUwogCWlmIChkYmdfYmx1ZXRvb3RoZW11bCkgewogCQl0cGFjcGlfYmx1ZXRvb3RoX2VtdWxzdGF0ZSA9ICEhcmFkaW9fb247CkBAIC0zMDYwLDYgKzMxNDIsOCBAQAogewogCWludCBzdGF0dXM7CiAKKwlwcmludGtfZGVwcmVjYXRlZF9yZmtpbGxfYXR0cmlidXRlKCJibHVldG9vdGhfZW5hYmxlIik7CisKIAlzdGF0dXMgPSBibHVldG9vdGhfZ2V0X3JhZGlvc3coKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTMwNzUsOSArMzE1OSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgdDsKIAlpbnQgcmVzOwogCisJcHJpbnRrX2RlcHJlY2F0ZWRfcmZraWxsX2F0dHJpYnV0ZSgiYmx1ZXRvb3RoX2VuYWJsZSIpOworCiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAxLCAmdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJibHVldG9vdGhfZW5hYmxlIiwgInNldCB0byAlbGRcbiIsIHQpOworCiAJcmVzID0gYmx1ZXRvb3RoX3NldF9yYWRpb3N3KHQsIDEpOwogCiAJcmV0dXJuIChyZXMpID8gcmVzIDogY291bnQ7CkBAIC0zMTExLDYgKzMxOTksOCBAQAogCiBzdGF0aWMgaW50IHRwYWNwaV9ibHVldG9vdGhfcmZrX3NldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKIHsKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkgICAicmVxdWVzdCB0byBjaGFuZ2UgcmFkaW8gc3RhdGUgdG8gJWRcbiIsIHN0YXRlKTsKIAlyZXR1cm4gYmx1ZXRvb3RoX3NldF9yYWRpb3N3KChzdGF0ZSA9PSBSRktJTExfU1RBVEVfVU5CTE9DS0VEKSwgMCk7CiB9CiAKQEAgLTMxMjEsNiArMzIxMSw5IEBACiAJCQlUUF9BQ1BJX0JMVEhfU0FWRV9TVEFURSkpCiAJCXByaW50ayhUUEFDUElfTk9USUNFCiAJCQkiZmFpbGVkIHRvIHNhdmUgYmx1ZXRvb3RoIHN0YXRlIHRvIE5WUkFNXG4iKTsKKwllbHNlCisJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkJImJsdWVzdG9vdGggc3RhdGUgc2F2ZWQgdG8gTlZSQU1cbiIpOwogfQogCiBzdGF0aWMgdm9pZCBibHVldG9vdGhfZXhpdCh2b2lkKQpAQCAtMzEzOSw3ICszMjMyLDggQEAKIAlpbnQgcmVzOwogCWludCBzdGF0dXMgPSAwOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaW5pdGlhbGl6aW5nIGJsdWV0b290aCBzdWJkcml2ZXJcbiIpOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAorCQkJImluaXRpYWxpemluZyBibHVldG9vdGggc3ViZHJpdmVyXG4iKTsKIAogCVRQQUNQSV9BQ1BJSEFORExFX0lOSVQoaGtleSk7CiAKQEAgLTMxNDgsNyArMzI0Miw4IEBACiAJdHBfZmVhdHVyZXMuYmx1ZXRvb3RoID0gaGtleV9oYW5kbGUgJiYKIAkgICAgYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJnN0YXR1cywgIkdCREMiLCAicWQiKTsKIAotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImJsdWV0b290aCBpcyAlcywgc3RhdHVzIDB4JTAyeFxuIiwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX1JGS0lMTCwKKwkJImJsdWV0b290aCBpcyAlcywgc3RhdHVzIDB4JTAyeFxuIiwKIAkJc3RyX3N1cHBvcnRlZCh0cF9mZWF0dXJlcy5ibHVldG9vdGgpLAogCQlzdGF0dXMpOwogCkBAIC0zMTYzLDcgKzMyNTgsNyBAQAogCSAgICAhKHN0YXR1cyAmIFRQX0FDUElfQkxVRVRPT1RIX0hXUFJFU0VOVCkpIHsKIAkJLyogbm8gYmx1ZXRvb3RoIGhhcmR3YXJlIHByZXNlbnQgaW4gc3lzdGVtICovCiAJCXRwX2ZlYXR1cmVzLmJsdWV0b290aCA9IDA7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAorCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAogCQkJICAgImJsdWV0b290aCBoYXJkd2FyZSBub3QgaW5zdGFsbGVkXG4iKTsKIAl9CiAKQEAgLTMxNzgsNyArMzI3Myw3IEBACiAJcmVzID0gdHBhY3BpX25ld19yZmtpbGwoVFBBQ1BJX1JGS19CTFVFVE9PVEhfU1dfSUQsCiAJCQkJJnRwYWNwaV9ibHVldG9vdGhfcmZraWxsLAogCQkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCwKLQkJCQkidHBhY3BpX2JsdWV0b290aF9zdyIsCisJCQkJVFBBQ1BJX1JGS19CTFVFVE9PVEhfU1dfTkFNRSwKIAkJCQl0cnVlLAogCQkJCXRwYWNwaV9ibHVldG9vdGhfcmZrX3NldCwKIAkJCQl0cGFjcGlfYmx1ZXRvb3RoX3Jma19nZXQpOwpAQCAtMzIxMSwxOSArMzMwNiwyNyBAQAogc3RhdGljIGludCBibHVldG9vdGhfd3JpdGUoY2hhciAqYnVmKQogewogCWNoYXIgKmNtZDsKKwlpbnQgc3RhdGUgPSAtMTsKIAogCWlmICghdHBfZmVhdHVyZXMuYmx1ZXRvb3RoKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXdoaWxlICgoY21kID0gbmV4dF9jbWQoJmJ1ZikpKSB7CiAJCWlmIChzdHJsZW5jbXAoY21kLCAiZW5hYmxlIikgPT0gMCkgewotCQkJYmx1ZXRvb3RoX3NldF9yYWRpb3N3KDEsIDEpOworCQkJc3RhdGUgPSAxOwogCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJkaXNhYmxlIikgPT0gMCkgewotCQkJYmx1ZXRvb3RoX3NldF9yYWRpb3N3KDAsIDEpOworCQkJc3RhdGUgPSAwOwogCQl9IGVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChzdGF0ZSAhPSAtMSkgeworCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBibHVldG9vdGgiLAorCQkJImF0dGVtcHQgdG8gJXNcbiIsCisJCQlzdGF0ZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwkJYmx1ZXRvb3RoX3NldF9yYWRpb3N3KHN0YXRlLCAxKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI0OCwxMyArMzM1MSwxNyBAQAogCQkJCQkJICAgb2ZmIC8gbGFzdCBzdGF0ZSAqLwogfTsKIAorI2RlZmluZSBUUEFDUElfUkZLX1dXQU5fU1dfTkFNRQkJInRwYWNwaV93d2FuX3N3IgorCiBzdGF0aWMgc3RydWN0IHJma2lsbCAqdHBhY3BpX3dhbl9yZmtpbGw7CiAKIHN0YXRpYyB2b2lkIHdhbl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKiBUcnkgdG8gbWFrZSBzdXJlIHJhZGlvIHdpbGwgcmVzdW1lIHBvd2VyZWQgb2ZmICovCi0JYWNwaV9ldmFsZihOVUxMLCBOVUxMLCAiXFxXR1NWIiwgInF2ZCIsCi0JCSAgIFRQX0FDUElfV0dTVl9QV1JfT0ZGX09OX1JFU1VNRSk7CisJaWYgKCFhY3BpX2V2YWxmKE5VTEwsIE5VTEwsICJcXFdHU1YiLCAicXZkIiwKKwkJICAgVFBfQUNQSV9XR1NWX1BXUl9PRkZfT05fUkVTVU1FKSkKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCQkiV1dBTiBwb3dlciBkb3duIG9uIHJlc3VtZSByZXF1ZXN0IGZhaWxlZFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgd2FuX2dldF9yYWRpb3N3KHZvaWQpCkBAIC0zMjkyLDYgKzMzOTksMTAgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuOwogCXJma2lsbF9mb3JjZV9zdGF0ZSh0cGFjcGlfd2FuX3Jma2lsbCwgc3RhdHVzKTsKKworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkiZm9yY2VkIHJma2lsbCBzdGF0ZSB0byAlZFxuIiwKKwkJc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCB3YW5fc2V0X3JhZGlvc3coaW50IHJhZGlvX29uLCBpbnQgdXBkYXRlX3JmaykKQEAgLTMzMDcsNiArMzQxOCw5IEBACiAJICAgICYmIHJhZGlvX29uKQogCQlyZXR1cm4gLUVQRVJNOwogCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCSJ3aWxsICVzIFdXQU5cbiIsIHJhZGlvX29uID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCiAJaWYgKGRiZ193d2FuZW11bCkgewogCQl0cGFjcGlfd3dhbl9lbXVsc3RhdGUgPSAhIXJhZGlvX29uOwpAQCAtMzMzNyw2ICszNDUxLDggQEAKIHsKIAlpbnQgc3RhdHVzOwogCisJcHJpbnRrX2RlcHJlY2F0ZWRfcmZraWxsX2F0dHJpYnV0ZSgid3dhbl9lbmFibGUiKTsKKwogCXN0YXR1cyA9IHdhbl9nZXRfcmFkaW9zdygpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMzM1Miw5ICszNDY4LDEzIEBACiAJdW5zaWduZWQgbG9uZyB0OwogCWludCByZXM7CiAKKwlwcmludGtfZGVwcmVjYXRlZF9yZmtpbGxfYXR0cmlidXRlKCJ3d2FuX2VuYWJsZSIpOworCiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAxLCAmdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJ3d2FuX2VuYWJsZSIsICJzZXQgdG8gJWxkXG4iLCB0KTsKKwogCXJlcyA9IHdhbl9zZXRfcmFkaW9zdyh0LCAxKTsKIAogCXJldHVybiAocmVzKSA/IHJlcyA6IGNvdW50OwpAQCAtMzM4OCw2ICszNTA4LDggQEAKIAogc3RhdGljIGludCB0cGFjcGlfd2FuX3Jma19zZXQodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCiB7CisJZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJICAgInJlcXVlc3QgdG8gY2hhbmdlIHJhZGlvIHN0YXRlIHRvICVkXG4iLCBzdGF0ZSk7CiAJcmV0dXJuIHdhbl9zZXRfcmFkaW9zdygoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCksIDApOwogfQogCkBAIC0zMzk4LDYgKzM1MjAsOSBAQAogCQkJVFBfQUNQSV9XR1NWX1NBVkVfU1RBVEUpKQogCQlwcmludGsoVFBBQ1BJX05PVElDRQogCQkJImZhaWxlZCB0byBzYXZlIFdXQU4gc3RhdGUgdG8gTlZSQU1cbiIpOworCWVsc2UKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCQkiV1dBTiBzdGF0ZSBzYXZlZCB0byBOVlJBTVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHdhbl9leGl0KHZvaWQpCkBAIC0zNDE2LDE0ICszNTQxLDE2IEBACiAJaW50IHJlczsKIAlpbnQgc3RhdHVzID0gMDsKIAotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImluaXRpYWxpemluZyB3YW4gc3ViZHJpdmVyXG4iKTsKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX1JGS0lMTCwKKwkJCSJpbml0aWFsaXppbmcgd2FuIHN1YmRyaXZlclxuIik7CiAKIAlUUEFDUElfQUNQSUhBTkRMRV9JTklUKGhrZXkpOwogCiAJdHBfZmVhdHVyZXMud2FuID0gaGtleV9oYW5kbGUgJiYKIAkgICAgYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJnN0YXR1cywgIkdXQU4iLCAicWQiKTsKIAotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgIndhbiBpcyAlcywgc3RhdHVzIDB4JTAyeFxuIiwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX1JGS0lMTCwKKwkJIndhbiBpcyAlcywgc3RhdHVzIDB4JTAyeFxuIiwKIAkJc3RyX3N1cHBvcnRlZCh0cF9mZWF0dXJlcy53YW4pLAogCQlzdGF0dXMpOwogCkBAIC0zNDM4LDcgKzM1NjUsNyBAQAogCSAgICAhKHN0YXR1cyAmIFRQX0FDUElfV0FOQ0FSRF9IV1BSRVNFTlQpKSB7CiAJCS8qIG5vIHdhbiBoYXJkd2FyZSBwcmVzZW50IGluIHN5c3RlbSAqLwogCQl0cF9mZWF0dXJlcy53YW4gPSAwOwotCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX1JGS0lMTCwKIAkJCSAgICJ3YW4gaGFyZHdhcmUgbm90IGluc3RhbGxlZFxuIik7CiAJfQogCkBAIC0zNDUzLDcgKzM1ODAsNyBAQAogCXJlcyA9IHRwYWNwaV9uZXdfcmZraWxsKFRQQUNQSV9SRktfV1dBTl9TV19JRCwKIAkJCQkmdHBhY3BpX3dhbl9yZmtpbGwsCiAJCQkJUkZLSUxMX1RZUEVfV1dBTiwKLQkJCQkidHBhY3BpX3d3YW5fc3ciLAorCQkJCVRQQUNQSV9SRktfV1dBTl9TV19OQU1FLAogCQkJCXRydWUsCiAJCQkJdHBhY3BpX3dhbl9yZmtfc2V0LAogCQkJCXRwYWNwaV93YW5fcmZrX2dldCk7CkBAIC0zNDcxLDYgKzM1OTgsOCBAQAogCWludCBsZW4gPSAwOwogCWludCBzdGF0dXMgPSB3YW5fZ2V0X3JhZGlvc3coKTsKIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIHdhbiIsICJyZWFkIik7CisKIAlpZiAoIXRwX2ZlYXR1cmVzLndhbikKIAkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7CiAJZWxzZSB7CkBAIC0zNDg2LDE5ICszNjE1LDI3IEBACiBzdGF0aWMgaW50IHdhbl93cml0ZShjaGFyICpidWYpCiB7CiAJY2hhciAqY21kOworCWludCBzdGF0ZSA9IC0xOwogCiAJaWYgKCF0cF9mZWF0dXJlcy53YW4pCiAJCXJldHVybiAtRU5PREVWOwogCiAJd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKIAkJaWYgKHN0cmxlbmNtcChjbWQsICJlbmFibGUiKSA9PSAwKSB7Ci0JCQl3YW5fc2V0X3JhZGlvc3coMSwgMSk7CisJCQlzdGF0ZSA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybGVuY21wKGNtZCwgImRpc2FibGUiKSA9PSAwKSB7Ci0JCQl3YW5fc2V0X3JhZGlvc3coMCwgMSk7CisJCQlzdGF0ZSA9IDA7CiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHN0YXRlICE9IC0xKSB7CisJCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIHdhbiIsCisJCQkiYXR0ZW1wdCB0byAlc1xuIiwKKwkJCXN0YXRlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCQl3YW5fc2V0X3JhZGlvc3coc3RhdGUsIDEpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zNTIxLDYgKzM2NTgsOCBAQAogCVRQX0FDUElfVVdCX1JBRElPU1NXCT0gMHgwMiwJLyogVVdCIHJhZGlvIGVuYWJsZWQgKi8KIH07CiAKKyNkZWZpbmUgVFBBQ1BJX1JGS19VV0JfU1dfTkFNRQkidHBhY3BpX3V3Yl9zdyIKKwogc3RhdGljIHN0cnVjdCByZmtpbGwgKnRwYWNwaV91d2JfcmZraWxsOwogCiBzdGF0aWMgaW50IHV3Yl9nZXRfcmFkaW9zdyh2b2lkKQpAQCAtMzU1OCw2ICszNjk3LDEwIEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybjsKIAlyZmtpbGxfZm9yY2Vfc3RhdGUodHBhY3BpX3V3Yl9yZmtpbGwsIHN0YXR1cyk7CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJImZvcmNlZCByZmtpbGwgc3RhdGUgdG8gJWRcbiIsCisJCXN0YXR1cyk7CiB9CiAKIHN0YXRpYyBpbnQgdXdiX3NldF9yYWRpb3N3KGludCByYWRpb19vbiwgaW50IHVwZGF0ZV9yZmspCkBAIC0zNTczLDYgKzM3MTYsOSBAQAogCSAgICAmJiByYWRpb19vbikKIAkJcmV0dXJuIC1FUEVSTTsKIAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkJIndpbGwgJXMgVVdCXG4iLCByYWRpb19vbiA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0RFQlVHRkFDSUxJVElFUwogCWlmIChkYmdfdXdiZW11bCkgewogCQl0cGFjcGlfdXdiX2VtdWxzdGF0ZSA9ICEhcmFkaW9fb247CkBAIC0zNjA3LDYgKzM3NTMsOCBAQAogCiBzdGF0aWMgaW50IHRwYWNwaV91d2JfcmZrX3NldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKIHsKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkgICAicmVxdWVzdCB0byBjaGFuZ2UgcmFkaW8gc3RhdGUgdG8gJWRcbiIsIHN0YXRlKTsKIAlyZXR1cm4gdXdiX3NldF9yYWRpb3N3KChzdGF0ZSA9PSBSRktJTExfU1RBVEVfVU5CTE9DS0VEKSwgMCk7CiB9CiAKQEAgLTM2MjEsMTQgKzM3NjksMTYgQEAKIAlpbnQgcmVzOwogCWludCBzdGF0dXMgPSAwOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaW5pdGlhbGl6aW5nIHV3YiBzdWJkcml2ZXJcbiIpOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAorCQkJImluaXRpYWxpemluZyB1d2Igc3ViZHJpdmVyXG4iKTsKIAogCVRQQUNQSV9BQ1BJSEFORExFX0lOSVQoaGtleSk7CiAKIAl0cF9mZWF0dXJlcy51d2IgPSBoa2V5X2hhbmRsZSAmJgogCSAgICBhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmc3RhdHVzLCAiR1VXQiIsICJxZCIpOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAidXdiIGlzICVzLCBzdGF0dXMgMHglMDJ4XG4iLAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAorCQkidXdiIGlzICVzLCBzdGF0dXMgMHglMDJ4XG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLnV3YiksCiAJCXN0YXR1cyk7CiAKQEAgLTM2NTMsNyArMzgwMyw3IEBACiAJcmVzID0gdHBhY3BpX25ld19yZmtpbGwoVFBBQ1BJX1JGS19VV0JfU1dfSUQsCiAJCQkJJnRwYWNwaV91d2JfcmZraWxsLAogCQkJCVJGS0lMTF9UWVBFX1VXQiwKLQkJCQkidHBhY3BpX3V3Yl9zdyIsCisJCQkJVFBBQ1BJX1JGS19VV0JfU1dfTkFNRSwKIAkJCQlmYWxzZSwKIAkJCQl0cGFjcGlfdXdiX3Jma19zZXQsCiAJCQkJdHBhY3BpX3V3Yl9yZmtfZ2V0KTsKQEAgLTQ2MDIsNiArNDc1MiwxNiBAQAogCSJ0cGFjcGk6OnVua25vd25fbGVkIiwKIAkidHBhY3BpOjpzdGFuZGJ5IiwKIH07CisjZGVmaW5lIFRQQUNQSV9TQUZFX0xFRFMJMHgwMDgxVQorCitzdGF0aWMgaW5saW5lIGJvb2wgdHBhY3BpX2lzX2xlZF9yZXN0cmljdGVkKGNvbnN0IHVuc2lnbmVkIGludCBsZWQpCit7CisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfVU5TQUZFX0xFRFMKKwlyZXR1cm4gZmFsc2U7CisjZWxzZQorCXJldHVybiAoVFBBQ1BJX1NBRkVfTEVEUyAmICgxIDw8IGxlZCkpID09IDA7CisjZW5kaWYKK30KIAogc3RhdGljIGludCBsZWRfZ2V0X3N0YXR1cyhjb25zdCB1bnNpZ25lZCBpbnQgbGVkKQogewpAQCAtNDYzOSwxNiArNDc5OSwyMCBAQAogCXN3aXRjaCAobGVkX3N1cHBvcnRlZCkgewogCWNhc2UgVFBBQ1BJX0xFRF81NzA6CiAJCS8qIDU3MCAqLwotCQlpZiAobGVkID4gNykKKwkJaWYgKHVubGlrZWx5KGxlZCA+IDcpKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh1bmxpa2VseSh0cGFjcGlfaXNfbGVkX3Jlc3RyaWN0ZWQobGVkKSkpCisJCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoIWFjcGlfZXZhbGYobGVkX2hhbmRsZSwgTlVMTCwgTlVMTCwgInZkZCIsCiAJCQkJKDEgPDwgbGVkKSwgbGVkX3NsZWRfYXJnMVtsZWRzdGF0dXNdKSkKIAkJCXJjID0gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBUUEFDUElfTEVEX09MRDoKIAkJLyogNjAwZS94LCA3NzBlLCA3NzB4LCBBMjFlLCBBMnhtL3AsIFQyMC0yMiwgWDIwICovCi0JCWlmIChsZWQgPiA3KQorCQlpZiAodW5saWtlbHkobGVkID4gNykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHVubGlrZWx5KHRwYWNwaV9pc19sZWRfcmVzdHJpY3RlZChsZWQpKSkKKwkJCXJldHVybiAtRVBFUk07CiAJCXJjID0gZWNfd3JpdGUoVFBBQ1BJX0xFRF9FQ19ITE1TLCAoMSA8PCBsZWQpKTsKIAkJaWYgKHJjID49IDApCiAJCQlyYyA9IGVjX3dyaXRlKFRQQUNQSV9MRURfRUNfSExCTCwKQEAgLTQ2NTksNiArNDgyMywxMCBAQAogCQlicmVhazsKIAljYXNlIFRQQUNQSV9MRURfTkVXOgogCQkvKiBhbGwgb3RoZXJzICovCisJCWlmICh1bmxpa2VseShsZWQgPj0gVFBBQ1BJX0xFRF9OVU1MRURTKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodW5saWtlbHkodHBhY3BpX2lzX2xlZF9yZXN0cmljdGVkKGxlZCkpKQorCQkJcmV0dXJuIC1FUEVSTTsKIAkJaWYgKCFhY3BpX2V2YWxmKGxlZF9oYW5kbGUsIE5VTEwsIE5VTEwsICJ2ZGQiLAogCQkJCWxlZCwgbGVkX2xlZF9hcmcxW2xlZHN0YXR1c10pKQogCQkJcmMgPSAtRUlPOwpAQCAtNDc1MSw2ICs0OTE5LDMwIEBACiAJa2ZyZWUodHBhY3BpX2xlZHMpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCB0cGFjcGlfaW5pdF9sZWQodW5zaWduZWQgaW50IGxlZCkKK3sKKwlpbnQgcmM7CisKKwl0cGFjcGlfbGVkc1tsZWRdLmxlZCA9IGxlZDsKKworCXRwYWNwaV9sZWRzW2xlZF0ubGVkX2NsYXNzZGV2LmJyaWdodG5lc3Nfc2V0ID0gJmxlZF9zeXNmc19zZXQ7CisJdHBhY3BpX2xlZHNbbGVkXS5sZWRfY2xhc3NkZXYuYmxpbmtfc2V0ID0gJmxlZF9zeXNmc19ibGlua19zZXQ7CisJaWYgKGxlZF9zdXBwb3J0ZWQgPT0gVFBBQ1BJX0xFRF81NzApCisJCXRwYWNwaV9sZWRzW2xlZF0ubGVkX2NsYXNzZGV2LmJyaWdodG5lc3NfZ2V0ID0KKwkJCQkJCSZsZWRfc3lzZnNfZ2V0OworCisJdHBhY3BpX2xlZHNbbGVkXS5sZWRfY2xhc3NkZXYubmFtZSA9IHRwYWNwaV9sZWRfbmFtZXNbbGVkXTsKKworCUlOSVRfV09SSygmdHBhY3BpX2xlZHNbbGVkXS53b3JrLCBsZWRfc2V0X3N0YXR1c193b3JrZXIpOworCisJcmMgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnRwYWNwaV9wZGV2LT5kZXYsCisJCQkJJnRwYWNwaV9sZWRzW2xlZF0ubGVkX2NsYXNzZGV2KTsKKwlpZiAocmMgPCAwKQorCQl0cGFjcGlfbGVkc1tsZWRdLmxlZF9jbGFzc2Rldi5uYW1lID0gTlVMTDsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGludCBfX2luaXQgbGVkX2luaXQoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqaWlibSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTQ3ODQsMjcgKzQ5NzYsMjEgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFBBQ1BJX0xFRF9OVU1MRURTOyBpKyspIHsKLQkJdHBhY3BpX2xlZHNbaV0ubGVkID0gaTsKLQotCQl0cGFjcGlfbGVkc1tpXS5sZWRfY2xhc3NkZXYuYnJpZ2h0bmVzc19zZXQgPSAmbGVkX3N5c2ZzX3NldDsKLQkJdHBhY3BpX2xlZHNbaV0ubGVkX2NsYXNzZGV2LmJsaW5rX3NldCA9ICZsZWRfc3lzZnNfYmxpbmtfc2V0OwotCQlpZiAobGVkX3N1cHBvcnRlZCA9PSBUUEFDUElfTEVEXzU3MCkKLQkJCXRwYWNwaV9sZWRzW2ldLmxlZF9jbGFzc2Rldi5icmlnaHRuZXNzX2dldCA9Ci0JCQkJCQkJJmxlZF9zeXNmc19nZXQ7Ci0KLQkJdHBhY3BpX2xlZHNbaV0ubGVkX2NsYXNzZGV2Lm5hbWUgPSB0cGFjcGlfbGVkX25hbWVzW2ldOwotCi0JCUlOSVRfV09SSygmdHBhY3BpX2xlZHNbaV0ud29yaywgbGVkX3NldF9zdGF0dXNfd29ya2VyKTsKLQotCQlyYyA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmdHBhY3BpX3BkZXYtPmRldiwKLQkJCQkJICAgJnRwYWNwaV9sZWRzW2ldLmxlZF9jbGFzc2Rldik7Ci0JCWlmIChyYyA8IDApIHsKLQkJCXRwYWNwaV9sZWRzW2ldLmxlZF9jbGFzc2Rldi5uYW1lID0gTlVMTDsKLQkJCWxlZF9leGl0KCk7Ci0JCQlyZXR1cm4gcmM7CisJCWlmICghdHBhY3BpX2lzX2xlZF9yZXN0cmljdGVkKGkpKSB7CisJCQlyYyA9IHRwYWNwaV9pbml0X2xlZChpKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlsZWRfZXhpdCgpOworCQkJCXJldHVybiByYzsKKwkJCX0KIAkJfQogCX0KIAorI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURTCisJaWYgKGxlZF9zdXBwb3J0ZWQgIT0gVFBBQ1BJX0xFRF9OT05FKQorCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkJIndhcm5pbmc6IHVzZXJzcGFjZSBvdmVycmlkZSBvZiBpbXBvcnRhbnQgIgorCQkJImZpcm13YXJlIExFRHMgaXMgZW5hYmxlZFxuIik7CisjZW5kaWYKIAlyZXR1cm4gKGxlZF9zdXBwb3J0ZWQgIT0gVFBBQ1BJX0xFRF9OT05FKT8gMCA6IDE7CiB9CiAKQEAgLTUzNDAsNiArNTUyNiwyMCBAQAogCiAjZGVmaW5lIFRQQUNQSV9CQUNLTElHSFRfREVWX05BTUUgInRoaW5rcGFkX3NjcmVlbiIKIAorLyoKKyAqIFRoaW5rUGFkcyBjYW4gcmVhZCBicmlnaHRuZXNzIGZyb20gdHdvIHBsYWNlczogRUMgSEJSViAoMHgzMSksIG9yCisgKiBDTU9TIE5WUkFNIGJ5dGUgMHg1RSwgYml0cyAwLTMuCisgKgorICogRUMgSEJSViAoMHgzMSkgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0CisgKiAgIEJpdCA3OiB1bmtub3duIGZ1bmN0aW9uCisgKiAgIEJpdCA2OiB1bmtub3duIGZ1bmN0aW9uCisgKiAgIEJpdCA1OiBaOiBob25vdXIgc2NhbGUgY2hhbmdlcywgTlo6IGlnbm9yZSBzY2FsZSBjaGFuZ2VzCisgKiAgIEJpdCA0OiBtdXN0IGJlIHNldCB0byB6ZXJvIHRvIGF2b2lkIHByb2JsZW1zCisgKiAgIEJpdCAzLTA6IGJhY2tsaWdodCBicmlnaHRuZXNzIGxldmVsCisgKgorICogYnJpZ2h0bmVzc19nZXRfcmF3IHJldHVybnMgc3RhdHVzIGRhdGEgaW4gdGhlIEhCUlYgbGF5b3V0CisgKi8KKwogZW51bSB7CiAJVFBfRUNfQkFDS0xJR0hUID0gMHgzMSwKIApAQCAtNTM0OSwxMDggKzU1NDksMTY0IEBACiAJVFBfRUNfQkFDS0xJR0hUX01BUFNXID0gMHgyMCwKIH07CiAKK2VudW0gdHBhY3BpX2JyaWdodG5lc3NfYWNjZXNzX21vZGUgeworCVRQQUNQSV9CUkdIVF9NT0RFX0FVVE8gPSAwLAkvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCisJVFBBQ1BJX0JSR0hUX01PREVfRUMsCQkvKiBFQyBjb250cm9sICovCisJVFBBQ1BJX0JSR0hUX01PREVfVUNNU19TVEVQLAkvKiBVQ01TIHN0ZXAtYmFzZWQgY29udHJvbCAqLworCVRQQUNQSV9CUkdIVF9NT0RFX0VDTlZSQU0sCS8qIEVDIGNvbnRyb2wgdy8gTlZSQU0gc3RvcmUgKi8KKwlUUEFDUElfQlJHSFRfTU9ERV9NQVgKK307CisKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqaWJtX2JhY2tsaWdodF9kZXZpY2U7Ci1zdGF0aWMgaW50IGJyaWdodG5lc3NfbW9kZTsKKworc3RhdGljIGVudW0gdHBhY3BpX2JyaWdodG5lc3NfYWNjZXNzX21vZGUgYnJpZ2h0bmVzc19tb2RlID0KKwkJVFBBQ1BJX0JSR0hUX01PREVfTUFYOworCiBzdGF0aWMgdW5zaWduZWQgaW50IGJyaWdodG5lc3NfZW5hYmxlID0gMjsgLyogMiA9IGF1dG8sIDAgPSBubywgMSA9IHllcyAqLwogCiBzdGF0aWMgc3RydWN0IG11dGV4IGJyaWdodG5lc3NfbXV0ZXg7CiAKLS8qCi0gKiBUaGlua1BhZHMgY2FuIHJlYWQgYnJpZ2h0bmVzcyBmcm9tIHR3byBwbGFjZXM6IEVDIDB4MzEsIG9yCi0gKiBDTU9TIE5WUkFNIGJ5dGUgMHg1RSwgYml0cyAwLTMuCi0gKgotICogRUMgMHgzMSBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQKLSAqICAgQml0IDc6IHVua25vd24gZnVuY3Rpb24KLSAqICAgQml0IDY6IHVua25vd24gZnVuY3Rpb24KLSAqICAgQml0IDU6IFo6IGhvbm91ciBzY2FsZSBjaGFuZ2VzLCBOWjogaWdub3JlIHNjYWxlIGNoYW5nZXMKLSAqICAgQml0IDQ6IG11c3QgYmUgc2V0IHRvIHplcm8gdG8gYXZvaWQgcHJvYmxlbXMKLSAqICAgQml0IDMtMDogYmFja2xpZ2h0IGJyaWdodG5lc3MgbGV2ZWwKLSAqCi0gKiBicmlnaHRuZXNzX2dldF9yYXcgcmV0dXJucyBzdGF0dXMgZGF0YSBpbiB0aGUgRUMgMHgzMSBsYXlvdXQKLSAqLwotc3RhdGljIGludCBicmlnaHRuZXNzX2dldF9yYXcoaW50ICpzdGF0dXMpCisvKiBOVlJBTSBicmlnaHRuZXNzIGFjY2VzcywKKyAqIGNhbGwgd2l0aCBicmlnaHRuZXNzX211dGV4IGhlbGQhICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRwYWNwaV9icmlnaHRuZXNzX252cmFtX2dldCh2b2lkKQogewotCXU4IGxlYyA9IDAsIGxjbW9zID0gMCwgbGV2ZWwgPSAwOworCXU4IGxudnJhbTsKIAotCWlmIChicmlnaHRuZXNzX21vZGUgJiAxKSB7Ci0JCWlmICghYWNwaV9lY19yZWFkKFRQX0VDX0JBQ0tMSUdIVCwgJmxlYykpCi0JCQlyZXR1cm4gLUVJTzsKLQkJbGV2ZWwgPSBsZWMgJiBUUF9FQ19CQUNLTElHSFRfTFZMTVNLOwotCX07Ci0JaWYgKGJyaWdodG5lc3NfbW9kZSAmIDIpIHsKLQkJbGNtb3MgPSAobnZyYW1fcmVhZF9ieXRlKFRQX05WUkFNX0FERFJfQlJJR0hUTkVTUykKLQkJCSAmIFRQX05WUkFNX01BU0tfTEVWRUxfQlJJR0hUTkVTUykKLQkJCT4+IFRQX05WUkFNX1BPU19MRVZFTF9CUklHSFRORVNTOwotCQlsY21vcyAmPSAodHBfZmVhdHVyZXMuYnJpZ2h0XzE2bGV2ZWxzKT8gMHgwZiA6IDB4MDc7Ci0JCWxldmVsID0gbGNtb3M7Ci0JfQorCWxudnJhbSA9IChudnJhbV9yZWFkX2J5dGUoVFBfTlZSQU1fQUREUl9CUklHSFRORVNTKQorCQkgICYgVFBfTlZSQU1fTUFTS19MRVZFTF9CUklHSFRORVNTKQorCQkgID4+IFRQX05WUkFNX1BPU19MRVZFTF9CUklHSFRORVNTOworCWxudnJhbSAmPSAodHBfZmVhdHVyZXMuYnJpZ2h0XzE2bGV2ZWxzKSA/IDB4MGYgOiAweDA3OwogCi0JaWYgKGJyaWdodG5lc3NfbW9kZSA9PSAzKSB7Ci0JCSpzdGF0dXMgPSBsZWM7CS8qIFByZWZlciBFQywgQ01PUyBpcyBqdXN0IGEgYmFja2luZyBzdG9yZSAqLwotCQlsZWMgJj0gVFBfRUNfQkFDS0xJR0hUX0xWTE1TSzsKLQkJaWYgKGxlYyA9PSBsY21vcykKLQkJCXRwX3dhcm5lZC5icmlnaHRfY21vc19lY191bnN5bmMgPSAwOwotCQllbHNlIHsKLQkJCWlmICghdHBfd2FybmVkLmJyaWdodF9jbW9zX2VjX3Vuc3luYykgewotCQkJCXByaW50ayhUUEFDUElfRVJSCi0JCQkJCSJDTU9TIE5WUkFNICgldSkgYW5kIEVDICgldSkgZG8gbm90ICIKLQkJCQkJImFncmVlIG9uIGRpc3BsYXkgYnJpZ2h0bmVzcyBsZXZlbFxuIiwKLQkJCQkJKHVuc2lnbmVkIGludCkgbGNtb3MsCi0JCQkJCSh1bnNpZ25lZCBpbnQpIGxlYyk7Ci0JCQkJdHBfd2FybmVkLmJyaWdodF9jbW9zX2VjX3Vuc3luYyA9IDE7Ci0JCQl9CisJcmV0dXJuIGxudnJhbTsKK30KKworc3RhdGljIHZvaWQgdHBhY3BpX2JyaWdodG5lc3NfY2hlY2twb2ludF9udnJhbSh2b2lkKQoreworCXU4IGxlYyA9IDA7CisJdTggYl9udnJhbTsKKworCWlmIChicmlnaHRuZXNzX21vZGUgIT0gVFBBQ1BJX0JSR0hUX01PREVfRUNOVlJBTSkKKwkJcmV0dXJuOworCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19CUkdIVCwKKwkJInRyeWluZyB0byBjaGVja3BvaW50IGJhY2tsaWdodCBsZXZlbCB0byBOVlJBTS4uLlxuIik7CisKKwlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmYnJpZ2h0bmVzc19tdXRleCkgPCAwKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoIWFjcGlfZWNfcmVhZChUUF9FQ19CQUNLTElHSFQsICZsZWMpKSkKKwkJZ290byB1bmxvY2s7CisJbGVjICY9IFRQX0VDX0JBQ0tMSUdIVF9MVkxNU0s7CisJYl9udnJhbSA9IG52cmFtX3JlYWRfYnl0ZShUUF9OVlJBTV9BRERSX0JSSUdIVE5FU1MpOworCisJaWYgKGxlYyAhPSAoKGJfbnZyYW0gJiBUUF9OVlJBTV9NQVNLX0xFVkVMX0JSSUdIVE5FU1MpCisJCQkgICAgID4+IFRQX05WUkFNX1BPU19MRVZFTF9CUklHSFRORVNTKSkgeworCQkvKiBOVlJBTSBuZWVkcyB1cGRhdGUgKi8KKwkJYl9udnJhbSAmPSB+KFRQX05WUkFNX01BU0tfTEVWRUxfQlJJR0hUTkVTUyA8PAorCQkJCVRQX05WUkFNX1BPU19MRVZFTF9CUklHSFRORVNTKTsKKwkJYl9udnJhbSB8PSBsZWM7CisJCW52cmFtX3dyaXRlX2J5dGUoYl9udnJhbSwgVFBfTlZSQU1fQUREUl9CUklHSFRORVNTKTsKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0JSR0hULAorCQkJICAgInVwZGF0ZWQgTlZSQU0gYmFja2xpZ2h0IGxldmVsIHRvICV1ICgweCUwMngpXG4iLAorCQkJICAgKHVuc2lnbmVkIGludCkgbGVjLCAodW5zaWduZWQgaW50KSBiX252cmFtKTsKKwl9IGVsc2UKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19CUkdIVCwKKwkJCSAgICJOVlJBTSBiYWNrbGlnaHQgbGV2ZWwgYWxyZWFkeSBpcyAldSAoMHglMDJ4KVxuIiwKKwkJCSAgICh1bnNpZ25lZCBpbnQpIGxlYywgKHVuc2lnbmVkIGludCkgYl9udnJhbSk7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmJyaWdodG5lc3NfbXV0ZXgpOworfQorCisKKy8qIGNhbGwgd2l0aCBicmlnaHRuZXNzX211dGV4IGhlbGQhICovCitzdGF0aWMgaW50IHRwYWNwaV9icmlnaHRuZXNzX2dldF9yYXcoaW50ICpzdGF0dXMpCit7CisJdTggbGVjID0gMDsKKworCXN3aXRjaCAoYnJpZ2h0bmVzc19tb2RlKSB7CisJY2FzZSBUUEFDUElfQlJHSFRfTU9ERV9VQ01TX1NURVA6CisJCSpzdGF0dXMgPSB0cGFjcGlfYnJpZ2h0bmVzc19udnJhbV9nZXQoKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBUUEFDUElfQlJHSFRfTU9ERV9FQzoKKwljYXNlIFRQQUNQSV9CUkdIVF9NT0RFX0VDTlZSQU06CisJCWlmICh1bmxpa2VseSghYWNwaV9lY19yZWFkKFRQX0VDX0JBQ0tMSUdIVCwgJmxlYykpKQogCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9IGVsc2UgewotCQkqc3RhdHVzID0gbGV2ZWw7CisJCSpzdGF0dXMgPSBsZWM7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5YSU87CiAJfQorfQorCisvKiBjYWxsIHdpdGggYnJpZ2h0bmVzc19tdXRleCBoZWxkISAqLworLyogZG8gTk9UIGNhbGwgd2l0aCBpbGxlZ2FsIGJhY2tsaWdodCBsZXZlbCB2YWx1ZSAqLworc3RhdGljIGludCB0cGFjcGlfYnJpZ2h0bmVzc19zZXRfZWModW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4IGxlYyA9IDA7CisKKwlpZiAodW5saWtlbHkoIWFjcGlfZWNfcmVhZChUUF9FQ19CQUNLTElHSFQsICZsZWMpKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAodW5saWtlbHkoIWFjcGlfZWNfd3JpdGUoVFBfRUNfQkFDS0xJR0hULAorCQkJCShsZWMgJiBUUF9FQ19CQUNLTElHSFRfQ01ETVNLKSB8CisJCQkJKHZhbHVlICYgVFBfRUNfQkFDS0xJR0hUX0xWTE1TSykpKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbCB3aXRoIGJyaWdodG5lc3NfbXV0ZXggaGVsZCEgKi8KK3N0YXRpYyBpbnQgdHBhY3BpX2JyaWdodG5lc3Nfc2V0X3VjbXNzdGVwKHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpbnQgY21vc19jbWQsIGluYzsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF92YWx1ZSwgaTsKKworCWN1cnJlbnRfdmFsdWUgPSB0cGFjcGlfYnJpZ2h0bmVzc19udnJhbV9nZXQoKTsKKworCWlmICh2YWx1ZSA9PSBjdXJyZW50X3ZhbHVlKQorCQlyZXR1cm4gMDsKKworCWNtb3NfY21kID0gKHZhbHVlID4gY3VycmVudF92YWx1ZSkgPworCQkJVFBfQ01PU19CUklHSFRORVNTX1VQIDoKKwkJCVRQX0NNT1NfQlJJR0hUTkVTU19ET1dOOworCWluYyA9ICh2YWx1ZSA+IGN1cnJlbnRfdmFsdWUpID8gMSA6IC0xOworCisJZm9yIChpID0gY3VycmVudF92YWx1ZTsgaSAhPSB2YWx1ZTsgaSArPSBpbmMpCisJCWlmIChpc3N1ZV90aGlua3BhZF9jbW9zX2NvbW1hbmQoY21vc19jbWQpKQorCQkJcmV0dXJuIC1FSU87CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogTWF5IHJldHVybiBFSU5UUiB3aGljaCBjYW4gYWx3YXlzIGJlIG1hcHBlZCB0byBFUkVTVEFSVFNZUyAqLwotc3RhdGljIGludCBicmlnaHRuZXNzX3NldChpbnQgdmFsdWUpCitzdGF0aWMgaW50IGJyaWdodG5lc3Nfc2V0KHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKLQlpbnQgY21vc19jbWQsIGluYywgaSwgcmVzOwotCWludCBjdXJyZW50X3ZhbHVlOwotCWludCBjb21tYW5kX2JpdHM7CisJaW50IHJlczsKIAogCWlmICh2YWx1ZSA+ICgodHBfZmVhdHVyZXMuYnJpZ2h0XzE2bGV2ZWxzKT8gMTUgOiA3KSB8fAogCSAgICB2YWx1ZSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19CUkdIVCwKKwkJCSJzZXQgYmFja2xpZ2h0IGxldmVsIHRvICVkXG4iLCB2YWx1ZSk7CisKIAlyZXMgPSBtdXRleF9sb2NrX2tpbGxhYmxlKCZicmlnaHRuZXNzX211dGV4KTsKIAlpZiAocmVzIDwgMCkKIAkJcmV0dXJuIHJlczsKIAotCXJlcyA9IGJyaWdodG5lc3NfZ2V0X3JhdygmY3VycmVudF92YWx1ZSk7Ci0JaWYgKHJlcyA8IDApCi0JCWdvdG8gZXJyb3V0OwotCi0JY29tbWFuZF9iaXRzID0gY3VycmVudF92YWx1ZSAmIFRQX0VDX0JBQ0tMSUdIVF9DTURNU0s7Ci0JY3VycmVudF92YWx1ZSAmPSBUUF9FQ19CQUNLTElHSFRfTFZMTVNLOwotCi0JY21vc19jbWQgPSB2YWx1ZSA+IGN1cnJlbnRfdmFsdWUgPwotCQkJVFBfQ01PU19CUklHSFRORVNTX1VQIDoKLQkJCVRQX0NNT1NfQlJJR0hUTkVTU19ET1dOOwotCWluYyA9ICh2YWx1ZSA+IGN1cnJlbnRfdmFsdWUpPyAxIDogLTE7Ci0KLQlyZXMgPSAwOwotCWZvciAoaSA9IGN1cnJlbnRfdmFsdWU7IGkgIT0gdmFsdWU7IGkgKz0gaW5jKSB7Ci0JCWlmICgoYnJpZ2h0bmVzc19tb2RlICYgMikgJiYKLQkJICAgIGlzc3VlX3RoaW5rcGFkX2Ntb3NfY29tbWFuZChjbW9zX2NtZCkpIHsKLQkJCXJlcyA9IC1FSU87Ci0JCQlnb3RvIGVycm91dDsKLQkJfQotCQlpZiAoKGJyaWdodG5lc3NfbW9kZSAmIDEpICYmCi0JCSAgICAhYWNwaV9lY193cml0ZShUUF9FQ19CQUNLTElHSFQsCi0JCQkJICAgKGkgKyBpbmMpIHwgY29tbWFuZF9iaXRzKSkgewotCQkJcmVzID0gLUVJTzsKLQkJCWdvdG8gZXJyb3V0OzsKLQkJfQorCXN3aXRjaCAoYnJpZ2h0bmVzc19tb2RlKSB7CisJY2FzZSBUUEFDUElfQlJHSFRfTU9ERV9FQzoKKwljYXNlIFRQQUNQSV9CUkdIVF9NT0RFX0VDTlZSQU06CisJCXJlcyA9IHRwYWNwaV9icmlnaHRuZXNzX3NldF9lYyh2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVFBBQ1BJX0JSR0hUX01PREVfVUNNU19TVEVQOgorCQlyZXMgPSB0cGFjcGlfYnJpZ2h0bmVzc19zZXRfdWNtc3N0ZXAodmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAtRU5YSU87CiAJfQogCi1lcnJvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZicmlnaHRuZXNzX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtNTQ1OSwyMSArNTcxNSwzNCBAQAogCiBzdGF0aWMgaW50IGJyaWdodG5lc3NfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0JLyogaXQgaXMgdGhlIGJhY2tsaWdodCBjbGFzcydzIGpvYiAoY2FsbGVyKSB0byBoYW5kbGUKLQkgKiBFSU5UUiBhbmQgb3RoZXIgZXJyb3JzIHByb3Blcmx5ICovCi0JcmV0dXJuIGJyaWdodG5lc3Nfc2V0KAorCXVuc2lnbmVkIGludCBsZXZlbCA9CiAJCShiZC0+cHJvcHMuZmJfYmxhbmsgPT0gRkJfQkxBTktfVU5CTEFOSyAmJgogCQkgYmQtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspID8KLQkJCQliZC0+cHJvcHMuYnJpZ2h0bmVzcyA6IDApOworCQkJCWJkLT5wcm9wcy5icmlnaHRuZXNzIDogMDsKKworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19CUkdIVCwKKwkJCSJiYWNrbGlnaHQ6IGF0dGVtcHQgdG8gc2V0IGxldmVsIHRvICVkXG4iLAorCQkJbGV2ZWwpOworCisJLyogaXQgaXMgdGhlIGJhY2tsaWdodCBjbGFzcydzIGpvYiAoY2FsbGVyKSB0byBoYW5kbGUKKwkgKiBFSU5UUiBhbmQgb3RoZXIgZXJyb3JzIHByb3Blcmx5ICovCisJcmV0dXJuIGJyaWdodG5lc3Nfc2V0KGxldmVsKTsKIH0KIAogc3RhdGljIGludCBicmlnaHRuZXNzX2dldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJaW50IHN0YXR1cywgcmVzOwogCi0JcmVzID0gYnJpZ2h0bmVzc19nZXRfcmF3KCZzdGF0dXMpOworCXJlcyA9IG11dGV4X2xvY2tfa2lsbGFibGUoJmJyaWdodG5lc3NfbXV0ZXgpOwogCWlmIChyZXMgPCAwKQotCQlyZXR1cm4gMDsgLyogRklYTUU6IHRlYWNoIGJhY2tsaWdodCBhYm91dCBlcnJvciBoYW5kbGluZyAqLworCQlyZXR1cm4gMDsKKworCXJlcyA9IHRwYWNwaV9icmlnaHRuZXNzX2dldF9yYXcoJnN0YXR1cyk7CisKKwltdXRleF91bmxvY2soJmJyaWdodG5lc3NfbXV0ZXgpOworCisJaWYgKHJlcyA8IDApCisJCXJldHVybiAwOwogCiAJcmV0dXJuIHN0YXR1cyAmIFRQX0VDX0JBQ0tMSUdIVF9MVkxNU0s7CiB9CkBAIC01NTIzLDcgKzU3OTIsNyBAQAogCX0KIAogCWlmICghYnJpZ2h0bmVzc19lbmFibGUpIHsKLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsCisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19CUkdIVCwKIAkJCSAgICJicmlnaHRuZXNzIHN1cHBvcnQgZGlzYWJsZWQgYnkgIgogCQkJICAgIm1vZHVsZSBwYXJhbWV0ZXJcbiIpOwogCQlyZXR1cm4gMTsKQEAgLTU1MzgsMjAgKzU4MDcsMzggQEAKIAlpZiAoYiA9PSAxNikKIAkJdHBfZmVhdHVyZXMuYnJpZ2h0XzE2bGV2ZWxzID0gMTsKIAotCWlmICghYnJpZ2h0bmVzc19tb2RlKSB7Ci0JCWlmICh0aGlua3BhZF9pZC52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9MRU5PVk8pCi0JCQlicmlnaHRuZXNzX21vZGUgPSAyOwotCQllbHNlCi0JCQlicmlnaHRuZXNzX21vZGUgPSAzOwotCi0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAic2VsZWN0ZWQgYnJpZ2h0bmVzc19tb2RlPSVkXG4iLAotCQkJYnJpZ2h0bmVzc19tb2RlKTsKLQl9Ci0KLQlpZiAoYnJpZ2h0bmVzc19tb2RlID4gMykKKwkvKgorCSAqIENoZWNrIGZvciBtb2R1bGUgcGFyYW1ldGVyIGJvZ29zaXR5LCBub3RlIHRoYXQgd2UKKwkgKiBpbml0IGJyaWdodG5lc3NfbW9kZSB0byBUUEFDUElfQlJHSFRfTU9ERV9NQVggaW4gb3JkZXIgdG8gYmUKKwkgKiBhYmxlIHRvIGRldGVjdCAidW5zcGVjaWZpZWQiCisJICovCisJaWYgKGJyaWdodG5lc3NfbW9kZSA+IFRQQUNQSV9CUkdIVF9NT0RFX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoYnJpZ2h0bmVzc19nZXRfcmF3KCZiKSA8IDApCisJLyogVFBBQ1BJX0JSR0hUX01PREVfQVVUTyBub3QgaW1wbGVtZW50ZWQgeWV0LCBqdXN0IHVzZSBkZWZhdWx0ICovCisJaWYgKGJyaWdodG5lc3NfbW9kZSA9PSBUUEFDUElfQlJHSFRfTU9ERV9BVVRPIHx8CisJICAgIGJyaWdodG5lc3NfbW9kZSA9PSBUUEFDUElfQlJHSFRfTU9ERV9NQVgpIHsKKwkJaWYgKHRoaW5rcGFkX2lkLnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lCTSkgeworCQkJLyoKKwkJCSAqIElCTSBtb2RlbHMgdGhhdCBkZWZpbmUgSEJSViBwcm9iYWJseSBoYXZlCisJCQkgKiBFQy1iYXNlZCBiYWNrbGlnaHQgbGV2ZWwgY29udHJvbAorCQkJICovCisJCQlpZiAoYWNwaV9ldmFsZihlY19oYW5kbGUsIE5VTEwsICJIQlJWIiwgInFkIikpCisJCQkJLyogVDQwLVQ0MywgUjUwLVI1MiwgUjUwZSwgUjUxZSwgWDMxLVg0MSAqLworCQkJCWJyaWdodG5lc3NfbW9kZSA9IFRQQUNQSV9CUkdIVF9NT0RFX0VDTlZSQU07CisJCQllbHNlCisJCQkJLyogYWxsIG90aGVyIElCTSBUaGlua1BhZHMgKi8KKwkJCQlicmlnaHRuZXNzX21vZGUgPSBUUEFDUElfQlJHSFRfTU9ERV9VQ01TX1NURVA7CisJCX0gZWxzZQorCQkJLyogQWxsIExlbm92byBUaGlua1BhZHMgKi8KKwkJCWJyaWdodG5lc3NfbW9kZSA9IFRQQUNQSV9CUkdIVF9NT0RFX1VDTVNfU1RFUDsKKworCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfQlJHSFQsCisJCQkgICAic2VsZWN0ZWQgYnJpZ2h0bmVzc19tb2RlPSVkXG4iLAorCQkJICAgYnJpZ2h0bmVzc19tb2RlKTsKKwl9CisKKwlpZiAodHBhY3BpX2JyaWdodG5lc3NfZ2V0X3JhdygmYikgPCAwKQogCQlyZXR1cm4gMTsKIAogCWlmICh0cF9mZWF0dXJlcy5icmlnaHRfMTZsZXZlbHMpCkBAIC01NTY1LDcgKzU4NTIsOCBAQAogCQlwcmludGsoVFBBQ1BJX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7CiAJfQotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImJyaWdodG5lc3MgaXMgc3VwcG9ydGVkXG4iKTsKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0JSR0hULAorCQkJImJyaWdodG5lc3MgaXMgc3VwcG9ydGVkXG4iKTsKIAogCWlibV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9CiAJCQkJKHRwX2ZlYXR1cmVzLmJyaWdodF8xNmxldmVscyk/IDE1IDogNzsKQEAgLTU1NzUsMTMgKzU4NjMsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYnJpZ2h0bmVzc19zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl0cGFjcGlfYnJpZ2h0bmVzc19jaGVja3BvaW50X252cmFtKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJyaWdodG5lc3Nfc2h1dGRvd24odm9pZCkKK3sKKwl0cGFjcGlfYnJpZ2h0bmVzc19jaGVja3BvaW50X252cmFtKCk7Cit9CisKIHN0YXRpYyB2b2lkIGJyaWdodG5lc3NfZXhpdCh2b2lkKQogewogCWlmIChpYm1fYmFja2xpZ2h0X2RldmljZSkgewotCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0VYSVQsCisJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCB8IFRQQUNQSV9EQkdfQlJHSFQsCiAJCQkgICAgImNhbGxpbmcgYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKClcbiIpOwogCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoaWJtX2JhY2tsaWdodF9kZXZpY2UpOwogCX0KKworCXRwYWNwaV9icmlnaHRuZXNzX2NoZWNrcG9pbnRfbnZyYW0oKTsKIH0KIAogc3RhdGljIGludCBicmlnaHRuZXNzX3JlYWQoY2hhciAqcCkKQEAgLTU2MjgsNiArNTkyOCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBicmlnaHRuZXNzIiwKKwkJCSJzZXQgbGV2ZWwgdG8gJWRcbiIsIGxldmVsKTsKKwogCS8qCiAJICogTm93IHdlIGtub3cgd2hhdCB0aGUgZmluYWwgbGV2ZWwgc2hvdWxkIGJlLCBzbyB3ZSB0cnkgdG8gc2V0IGl0LgogCSAqIERvaW5nIGl0IHRoaXMgd2F5IG1ha2VzIHRoZSBzeXNjYWxsIHJlc3RhcnRhYmxlIGluIGNhc2Ugb2YgRUlOVFIKQEAgLTU2NDEsNiArNTk0NCw4IEBACiAJLnJlYWQgPSBicmlnaHRuZXNzX3JlYWQsCiAJLndyaXRlID0gYnJpZ2h0bmVzc193cml0ZSwKIAkuZXhpdCA9IGJyaWdodG5lc3NfZXhpdCwKKwkuc3VzcGVuZCA9IGJyaWdodG5lc3Nfc3VzcGVuZCwKKwkuc2h1dGRvd24gPSBicmlnaHRuZXNzX3NodXRkb3duLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYwODYsNiArNjM5MSw5IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0ZBTiwKKwkJImZhbiBjb250cm9sOiBzZXQgZmFuIGNvbnRyb2wgcmVnaXN0ZXIgdG8gMHglMDJ4XG4iLCBsZXZlbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxNjMsNiArNjQ3MSwxMSBAQAogCX0KIAogCW11dGV4X3VubG9jaygmZmFuX211dGV4KTsKKworCWlmICghcmMpCisJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRkFOLAorCQkJImZhbiBjb250cm9sOiBzZXQgZmFuIGNvbnRyb2wgcmVnaXN0ZXIgdG8gMHglMDJ4XG4iLAorCQkJcyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC02MTk5LDYgKzY1MTIsOSBAQAogCQlyYyA9IC1FTlhJTzsKIAl9CiAKKwlpZiAoIXJjKQorCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0ZBTiwKKwkJCSJmYW4gY29udHJvbDogc2V0IGZhbiBjb250cm9sIHJlZ2lzdGVyIHRvIDBcbiIpOwogCiAJbXV0ZXhfdW5sb2NrKCZmYW5fbXV0ZXgpOwogCXJldHVybiByYzsKQEAgLTYzMjcsNiArNjY0Myw5IEBACiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAyLCAmdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJod21vbiBwd20xX2VuYWJsZSIsCisJCQkic2V0IGZhbiBtb2RlIHRvICVsdVxuIiwgdCk7CisKIAlzd2l0Y2ggKHQpIHsKIAljYXNlIDA6CiAJCWxldmVsID0gVFBfRUNfRkFOX0ZVTExTUEVFRDsKQEAgLTYzOTIsNiArNjcxMSw5IEBACiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAyNTUsICZzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soImh3bW9uIHB3bTEiLAorCQkJInNldCBmYW4gc3BlZWQgdG8gJWx1XG4iLCBzKTsKKwogCS8qIHNjYWxlIGRvd24gZnJvbSAwLTI1NSB0byAwLTcgKi8KIAluZXdsZXZlbCA9IChzID4+IDUpICYgMHgwNzsKIApAQCAtNjQ1OCw2ICs2NzgwLDggQEAKIAlmYW5fd2F0Y2hkb2dfbWF4aW50ZXJ2YWwgPSB0OwogCWZhbl93YXRjaGRvZ19yZXNldCgpOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJmYW5fd2F0Y2hkb2ciLCAic2V0IHRvICVsdVxuIiwgdCk7CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY0NzksNyArNjgwMyw4IEBACiB7CiAJaW50IHJjOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaW5pdGlhbGl6aW5nIGZhbiBzdWJkcml2ZXJcbiIpOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfRkFOLAorCQkJImluaXRpYWxpemluZyBmYW4gc3ViZHJpdmVyXG4iKTsKIAogCW11dGV4X2luaXQoJmZhbl9tdXRleCk7CiAJZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSA9IFRQQUNQSV9GQU5fTk9ORTsKQEAgLTY1MzgsNyArNjg2Myw4IEBACiAJCX0KIAl9CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJmYW4gaXMgJXMsIG1vZGVzICVkLCAlZFxuIiwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0ZBTiwKKwkJImZhbiBpcyAlcywgbW9kZXMgJWQsICVkXG4iLAogCQlzdHJfc3VwcG9ydGVkKGZhbl9zdGF0dXNfYWNjZXNzX21vZGUgIT0gVFBBQ1BJX0ZBTl9OT05FIHx8CiAJCSAgZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUgIT0gVFBBQ1BJX0ZBTl9XUl9OT05FKSwKIAkJZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSwgZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUpOwpAQCAtNjU0Nyw3ICs2ODczLDcgQEAKIAlpZiAoIWZhbl9jb250cm9sX2FsbG93ZWQpIHsKIAkJZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUgPSBUUEFDUElfRkFOX1dSX05PTkU7CiAJCWZhbl9jb250cm9sX2NvbW1hbmRzID0gMDsKLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsCisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19GQU4sCiAJCQkgICAiZmFuIGNvbnRyb2wgZmVhdHVyZXMgZGlzYWJsZWQgYnkgcGFyYW1ldGVyXG4iKTsKIAl9CiAKQEAgLTY1NzYsNyArNjkwMiw3IEBACiAKIHN0YXRpYyB2b2lkIGZhbl9leGl0KHZvaWQpCiB7Ci0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElULAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCB8IFRQQUNQSV9EQkdfRkFOLAogCQkgICAgImNhbmNlbGxpbmcgYW55IHBlbmRpbmcgZmFuIHdhdGNoZG9nIHRhc2tzXG4iKTsKIAogCS8qIEZJWE1FOiBjYW4gd2UgcmVhbGx5IGRvIHRoaXMgdW5jb25kaXRpb25hbGx5PyAqLwpAQCAtNjc1Nyw2ICs3MDgzLDkgQEAKIAlpZiAoKnJjID09IC1FTlhJTykKIAkJcHJpbnRrKFRQQUNQSV9FUlIgImxldmVsIGNvbW1hbmQgYWNjZXB0ZWQgZm9yIHVuc3VwcG9ydGVkICIKIAkJICAgICAgICJhY2Nlc3MgbW9kZSAlZCIsIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKTsKKwllbHNlIGlmICghKnJjKQorCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBmYW4iLAorCQkJInNldCBsZXZlbCB0byAlZFxuIiwgbGV2ZWwpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC02NzcwLDYgKzcwOTksOCBAQAogCWlmICgqcmMgPT0gLUVOWElPKQogCQlwcmludGsoVFBBQ1BJX0VSUiAiZW5hYmxlIGNvbW1hbmQgYWNjZXB0ZWQgZm9yIHVuc3VwcG9ydGVkICIKIAkJICAgICAgICJhY2Nlc3MgbW9kZSAlZCIsIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKTsKKwllbHNlIGlmICghKnJjKQorCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBmYW4iLCAiZW5hYmxlXG4iKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjc4Myw2ICs3MTE0LDggQEAKIAlpZiAoKnJjID09IC1FTlhJTykKIAkJcHJpbnRrKFRQQUNQSV9FUlIgImRpc2FibGUgY29tbWFuZCBhY2NlcHRlZCBmb3IgdW5zdXBwb3J0ZWQgIgogCQkgICAgICAgImFjY2VzcyBtb2RlICVkIiwgZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUpOworCWVsc2UgaWYgKCEqcmMpCisJCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIGZhbiIsICJkaXNhYmxlXG4iKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjgwMSw2ICs3MTM0LDkgQEAKIAlpZiAoKnJjID09IC1FTlhJTykKIAkJcHJpbnRrKFRQQUNQSV9FUlIgInNwZWVkIGNvbW1hbmQgYWNjZXB0ZWQgZm9yIHVuc3VwcG9ydGVkICIKIAkJICAgICAgICJhY2Nlc3MgbW9kZSAlZCIsIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKTsKKwllbHNlIGlmICghKnJjKQorCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBmYW4iLAorCQkJInNldCBzcGVlZCB0byAlZFxuIiwgc3BlZWQpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC02ODE0LDggKzcxNTAsMTIgQEAKIAogCWlmIChpbnRlcnZhbCA8IDAgfHwgaW50ZXJ2YWwgPiAxMjApCiAJCSpyYyA9IC1FSU5WQUw7Ci0JZWxzZQorCWVsc2UgewogCQlmYW5fd2F0Y2hkb2dfbWF4aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgZmFuIiwKKwkJCSJzZXQgd2F0Y2hkb2cgdGltZXIgdG8gJWRcbiIsCisJCQlpbnRlcnZhbCk7CisJfQogCiAJcmV0dXJuIDE7CiB9CkBAIC03MjQzLDEwICs3NTgzLDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKGZhbl9jb250cm9sLAogCQkgIkVuYWJsZXMgc2V0dGluZyBmYW4gcGFyYW1ldGVycyBmZWF0dXJlcyB3aGVuIHRydWUiKTsKIAotbW9kdWxlX3BhcmFtX25hbWVkKGJyaWdodG5lc3NfbW9kZSwgYnJpZ2h0bmVzc19tb2RlLCBpbnQsIDApOworbW9kdWxlX3BhcmFtX25hbWVkKGJyaWdodG5lc3NfbW9kZSwgYnJpZ2h0bmVzc19tb2RlLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYnJpZ2h0bmVzc19tb2RlLAogCQkgIlNlbGVjdHMgYnJpZ2h0bmVzcyBjb250cm9sIHN0cmF0ZWd5OiAiCi0JCSAiMD1hdXRvLCAxPUVDLCAyPUNNT1MsIDM9Ym90aCIpOworCQkgIjA9YXV0bywgMT1FQywgMj1VQ01TLCAzPUVDK05WUkFNIik7CiAKIG1vZHVsZV9wYXJhbShicmlnaHRuZXNzX2VuYWJsZSwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJyaWdodG5lc3NfZW5hYmxlLApAQCAtNzUxNSw5ICs3ODU1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUGxlYXNlIHJlbW92ZSB0aGlzIGluIHllYXIgMjAwOSAqLwotTU9EVUxFX0FMSUFTKCJpYm1fYWNwaSIpOwotCiBNT0RVTEVfQUxJQVMoVFBBQ1BJX0RSVlJfU0hPUlROQU1FKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKaW5kZXggMjgzNDg0Ni4uOWEzYTY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkZXYtPmRhdGE7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgcmV0OwotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCXBucF9kYmcoJmRldi0+ZGV2LCAic2V0IHJlc291cmNlc1xuIik7CiAJcmV0ID0gcG5wYWNwaV9idWlsZF9yZXNvdXJjZV90ZW1wbGF0ZShkZXYsICZidWZmZXIpOwpAQCAtOTQsMjEgKzkzLDMxIEBACiAJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0Jc3RhdHVzID0gYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMoaGFuZGxlLCAmYnVmZmVyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJaWYgKEFDUElfRkFJTFVSRShhY3BpX3NldF9jdXJyZW50X3Jlc291cmNlcyhoYW5kbGUsICZidWZmZXIpKSkKIAkJcmV0ID0gLUVJTlZBTDsKKwllbHNlIGlmIChhY3BpX2J1c19wb3dlcl9tYW5hZ2VhYmxlKGhhbmRsZSkpCisJCXJldCA9IGFjcGlfYnVzX3NldF9wb3dlcihoYW5kbGUsIEFDUElfU1RBVEVfRDApOwogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBucGFjcGlfZGlzYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBucF9kZXYgKmRldikKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gZGV2LT5kYXRhOworCWludCByZXQ7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgImRpc2FibGUgcmVzb3VyY2VzXG4iKTsKIAogCS8qIGFjcGlfdW5yZWdpc3Rlcl9nc2kocG5wX2lycShkZXYsIDApKTsgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdCgoYWNwaV9oYW5kbGUpIGRldi0+ZGF0YSwKLQkJCQkgICAgICAiX0RJUyIsIE5VTEwsIE5VTEwpOwotCXJldHVybiBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSA/IC1FTk9ERVYgOiAwOworCXJldCA9IDA7CisJaWYgKGFjcGlfYnVzX3Bvd2VyX21hbmFnZWFibGUoaGFuZGxlKSkgeworCQlyZXQgPSBhY3BpX2J1c19zZXRfcG93ZXIoaGFuZGxlLCBBQ1BJX1NUQVRFX0QzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX0RJUyIsIE5VTEwsIE5VTEwpKSkKKwkJcmV0ID0gLUVOT0RFVjsKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCmluZGV4IGFjMDFlMDYuLmRhNzM1OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYwpAQCAtOTMsNiArOTMsOCBAQAogCVBPV0VSX1NVUFBMWV9BVFRSKHZvbHRhZ2VfYXZnKSwKIAlQT1dFUl9TVVBQTFlfQVRUUihjdXJyZW50X25vdyksCiAJUE9XRVJfU1VQUExZX0FUVFIoY3VycmVudF9hdmcpLAorCVBPV0VSX1NVUFBMWV9BVFRSKHBvd2VyX25vdyksCisJUE9XRVJfU1VQUExZX0FUVFIocG93ZXJfYXZnKSwKIAlQT1dFUl9TVVBQTFlfQVRUUihjaGFyZ2VfZnVsbF9kZXNpZ24pLAogCVBPV0VSX1NVUFBMWV9BVFRSKGNoYXJnZV9lbXB0eV9kZXNpZ24pLAogCVBPV0VSX1NVUFBMWV9BVFRSKGNoYXJnZV9mdWxsKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKaW5kZXggNDg5OGY3Zi4uOWIxZmYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNoLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTc5NSwxMCArNzk1LDQ2IEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHZvaWQgc2hfcnRjX3NldF9pcnFfd2FrZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlbmFibGVkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNldF9pcnFfd2FrZShydGMtPnBlcmlvZGljX2lycSwgZW5hYmxlZCk7CisJaWYgKHJ0Yy0+Y2FycnlfaXJxID4gMCkgeworCQlzZXRfaXJxX3dha2UocnRjLT5jYXJyeV9pcnEsIGVuYWJsZWQpOworCQlzZXRfaXJxX3dha2UocnRjLT5hbGFybV9pcnEsIGVuYWJsZWQpOworCX0KKworfQorCitzdGF0aWMgaW50IHNoX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJc2hfcnRjX3NldF9pcnFfd2FrZShkZXYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXNoX3J0Y19zZXRfaXJxX3dha2UoZGV2LCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfcnRjX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBzaF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lID0gc2hfcnRjX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX3J0Y19wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJWX05BTUUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSAmc2hfcnRjX2Rldl9wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc2hfcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfcnRjX3JlbW92ZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IDhmNThmN2YuLmIzNDk3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCkBAIC0xMDIwLDcgKzEwMjAsOCBAQAogCiAJLyogR2V0IGN1cnJlbnQgbW9kZSByZWdpc3RlciAqLwogCW1vZGUgPSBVQVJUX0dFVF9NUihwb3J0KSAmIH4oQVRNRUxfVVNfVVNDTEtTIHwgQVRNRUxfVVNfQ0hSTAotCQkJCQl8IEFUTUVMX1VTX05CU1RPUCB8IEFUTUVMX1VTX1BBUik7CisJCQkJCXwgQVRNRUxfVVNfTkJTVE9QIHwgQVRNRUxfVVNfUEFSCisJCQkJCXwgQVRNRUxfVVNfVVNNT0RFKTsKIAogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrIC8gMTYpOwogCXF1b3QgPSB1YXJ0X2dldF9kaXZpc29yKHBvcnQsIGJhdWQpOwpAQCAtMTA2NSw2ICsxMDY2LDEyIEBACiAJfSBlbHNlCiAJCW1vZGUgfD0gQVRNRUxfVVNfUEFSX05PTkU7CiAKKwkvKiBoYXJkd2FyZSBoYW5kc2hha2UgKFJUUy9DVFMpICovCisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKQorCQltb2RlIHw9IEFUTUVMX1VTX1VTTU9ERV9IV0hTOworCWVsc2UKKwkJbW9kZSB8PSBBVE1FTF9VU19VU01PREVfTk9STUFMOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgPSBBVE1FTF9VU19PVlJFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCAyMjY5ZmJjLi43ZmI5YjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjZGVmaW5lIF9JTlRDX01LKGZuLCBtb2RlLCBhZGRyX2UsIGFkZHJfZCwgd2lkdGgsIHNoaWZ0KSBcCiAJKChzaGlmdCkgfCAoKHdpZHRoKSA8PCA1KSB8ICgoZm4pIDw8IDkpIHwgKChtb2RlKSA8PCAxMykgfCBcCkBAIC00MCw2ICs0Miw4IEBACiB9OwogCiBzdHJ1Y3QgaW50Y19kZXNjX2ludCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKIAl1bnNpZ25lZCBsb25nICpyZWc7CiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGxvbmcgKnNtcDsKQEAgLTUyLDYgKzU2LDggQEAKIAlzdHJ1Y3QgaXJxX2NoaXAgY2hpcDsKIH07CiAKK3N0YXRpYyBMSVNUX0hFQUQoaW50Y19saXN0KTsKKwogI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgSVNfU01QKHgpIHguc21wCiAjZGVmaW5lIElOVENfUkVHKGQsIHgsIGMpIChkLT5yZWdbKHgpXSArICgoZC0+c21wWyh4KV0gJiAweGZmKSAqIGMpKQpAQCAtMjMyLDYgKzIzOCwxMSBAQAogCX0KIH0KIAorc3RhdGljIGludCBpbnRjX3NldF93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlyZXR1cm4gMDsgLyogYWxsb3cgd2FrZXVwLCBidXQgc2V0dXAgaGFyZHdhcmUgaW4gaW50Y19zdXNwZW5kKCkgKi8KK30KKwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQogc3RhdGljIHZvaWQgaW50Y19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtNjY0LDYgKzY3NSw5IEBACiAKIAlkID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKmQpKTsKIAorCUlOSVRfTElTVF9IRUFEKCZkLT5saXN0KTsKKwlsaXN0X2FkZCgmZC0+bGlzdCwgJmludGNfbGlzdCk7CisKIAlkLT5ucl9yZWcgPSBkZXNjLT5tYXNrX3JlZ3MgPyBkZXNjLT5ucl9tYXNrX3JlZ3MgKiAyIDogMDsKIAlkLT5ucl9yZWcgKz0gZGVzYy0+cHJpb19yZWdzID8gZGVzYy0+bnJfcHJpb19yZWdzICogMiA6IDA7CiAJZC0+bnJfcmVnICs9IGRlc2MtPnNlbnNlX3JlZ3MgPyBkZXNjLT5ucl9zZW5zZV9yZWdzIDogMDsKQEAgLTcwNyw3ICs3MjEsMTEgQEAKIAlkLT5jaGlwLm1hc2sgPSBpbnRjX2Rpc2FibGU7CiAJZC0+Y2hpcC51bm1hc2sgPSBpbnRjX2VuYWJsZTsKIAlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19kaXNhYmxlOworCWQtPmNoaXAuZW5hYmxlID0gaW50Y19lbmFibGU7CisJZC0+Y2hpcC5kaXNhYmxlID0gaW50Y19kaXNhYmxlOworCWQtPmNoaXAuc2h1dGRvd24gPSBpbnRjX2Rpc2FibGU7CiAJZC0+Y2hpcC5zZXRfdHlwZSA9IGludGNfc2V0X3NlbnNlOworCWQtPmNoaXAuc2V0X3dha2UgPSBpbnRjX3NldF93YWtlOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCiAJaWYgKGRlc2MtPmFja19yZWdzKSB7CkBAIC03NTgsMyArNzc2LDUzIEBACiAJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOwogCX0KIH0KKworc3RhdGljIGludCBpbnRjX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJLyogZ2V0IGludGMgY29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBzeXNkZXYgKi8KKwlkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGludGNfZGVzY19pbnQsIHN5c2Rldik7CisKKwkvKiBlbmFibGUgd2FrZXVwIGlycXMgYmVsb25naW5nIHRvIHRoaXMgaW50YyBjb250cm9sbGVyICovCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX1dBS0VVUCkgJiYgKGRlc2MtPmNoaXAgPT0gJmQtPmNoaXApKQorCQkJaW50Y19lbmFibGUoaXJxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW50Y19zeXNkZXZfY2xhc3MgPSB7CisJLm5hbWUgPSAiaW50YyIsCisJLnN1c3BlbmQgPSBpbnRjX3N1c3BlbmQsCit9OworCisvKiByZWdpc3RlciB0aGlzIGludGMgYXMgc3lzZGV2IHRvIGFsbG93IHN1c3BlbmQvcmVzdW1lICovCitzdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl9pbnRjX3N5c2RldnModm9pZCkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZDsKKwlpbnQgZXJyb3I7CisJaW50IGlkID0gMDsKKworCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpbnRjX3N5c2Rldl9jbGFzcyk7CisJaWYgKCFlcnJvcikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGQsICZpbnRjX2xpc3QsIGxpc3QpIHsKKwkJCWQtPnN5c2Rldi5pZCA9IGlkOworCQkJZC0+c3lzZGV2LmNscyA9ICZpbnRjX3N5c2Rldl9jbGFzczsKKwkJCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkLT5zeXNkZXYpOworCQkJaWYgKGVycm9yKQorCQkJCWJyZWFrOworCQkJaWQrKzsKKwkJfQorCX0KKworCWlmIChlcnJvcikKKwkJcHJfd2FybmluZygiaW50Yzogc3lzZGV2IHJlZ2lzdHJhdGlvbiBlcnJvclxuIik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2RldmljZV9pbml0Y2FsbChyZWdpc3Rlcl9pbnRjX3N5c2RldnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA5Mjk4MWMyLi4wZGNmOWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNzMsNiArNzMsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvS2NvbmZpZyIKQEAgLTkzLDUgKzk1LDI1IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2hlY2kvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL0tjb25maWciCisKIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggNDdhNTZmNS4uNDdkZmQ1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAKIG9iai0kKENPTkZJR19PVFVTKQkJKz0gb3R1cy8KIG9iai0kKENPTkZJR19SVDI4NjApCQkrPSBydDI4NjAvCiBvYmotJChDT05GSUdfUlQyODcwKQkJKz0gcnQyODcwLworb2JqLSQoQ09ORklHX1JUMzA3MCkJCSs9IHJ0MzA3MC8KIG9iai0kKENPTkZJR19DT01FREkpCQkrPSBjb21lZGkvCiBvYmotJChDT05GSUdfQVNVU19PTEVEKQkJKz0gYXN1c19vbGVkLwogb2JqLSQoQ09ORklHX1BBTkVMKQkJKz0gcGFuZWwvCkBAIC0yOSwzICszMCwxMyBAQAogb2JqLSQoQ09ORklHX1RSQU5aUE9SVCkJCSs9IGZyb250aWVyLwogb2JqLSQoQ09ORklHX0VQTCkJCSs9IGVwbC8KIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gYW5kcm9pZC8KK29iai0kKENPTkZJR19EU1QpCQkrPSBkc3QvCitvYmotJChDT05GSUdfUE9ITUVMRlMpCQkrPSBwb2htZWxmcy8KK29iai0kKENPTkZJR19TVExDNDVYWCkJCSs9IHN0bGM0NXh4Lworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQVRFTjIwMTEpCSs9IHVjMjMyMi8KK29iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLworb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KK29iai0kKENPTkZJR19QTEFOOUFVVEgpCQkrPSBwOWF1dGgvCitvYmotJChDT05GSUdfSEVDSSkJCSs9IGhlY2kvCitvYmotJChDT05GSUdfTElORTZfVVNCKQkJKz0gbGluZTYvCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9RVUFURUNIX0VTVTEwMCkJKz0gc2VycXRfdXNiLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oCmluZGV4IDIwZjM2ZGEuLjM5NjNkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmgKQEAgLTQxLDE2ICs0MSwxNiBAQAogLyogCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMiwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KIC8qIAl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDMsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCiAvKiAJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gNCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLSAJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAxLCB9LAotIAl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDIsIH0sCi0gCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgfSwKLSAJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gNCx9LAorCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMSwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDIsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAzLCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDQsfSwKIAogCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMHhCLCB9LAogCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMHhGLCB9LAogCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDB4QSB9LAogCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDB4RSwgfSwKLS8vCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDB4ZCwgfSwKKy8qCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDB4ZCwgfSwgKi8KIAl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSAweEQsIH0sCiAJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMHg4LCB9LAogCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDB4QywgfSwKQEAgLTExMCwxMCArMTEwLDEwIEBACiAJLyogTmVlZCB2b2xhdGlsZT8gKi8KIAl1MzIgaXJxX3N0YXR1czsKIAotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7IC8qIFBlcmlvZGljIHRhc2tzIGxpa2UgcmVjYWxpYnJhdGUqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgcGVyaW9kaWNfd29yazsgLyogUGVyaW9kaWMgdGFza3MgbGlrZSByZWNhbGlicmF0ZSAqLwogCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIHN0YXRzOwogCi0vLyAgICAgICAgdW5zaWduZWQgaW50IHBoeW1vZGU7CisJLyogdW5zaWduZWQgaW50IHBoeW1vZGU7ICovCiAJaW50IG1vZGU7CiAJaW50IGNoYW5uZWw7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKaW5kZXggZTNlMjVkZC4uNzYxZDk5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9kZWJ1Zy5oCkBAIC0yMyw3ICsyMyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X2Rlc2Moc3RydWN0IGFnbnhfZGVzYyAqZGVzYykKIHsKLSAgICAgICAgdTMyIHJlZyA9IGJlMzJfdG9fY3B1KGRlc2MtPmZyYWcpOworCXUzMiByZWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKIAogCVBSSU5US19CSVRTKERFU0MsIFBBQ0tFVF9MRU4pOwogCkBAIC0yOTEsNyArMjkxLDcgQEAKIAlQUklOVEtfTEUzMihTVEEsIHN0YS0+cGh5X3N0YXRzX2hpZ2gpOwogCVBSSU5US19MRTMyKFNUQSwgc3RhLT5waHlfc3RhdHNfbG93KTsKIAotLy8JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkvKiBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSAqLwogCWFnbnhfcHJpbnRfc3RhX3RyYWZmaWMoc3RhLT50cmFmZmljICsgMCk7CiAKIAlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczBfZnJhZ19zdWNjZXNzKTsKQEAgLTMxMSwxMCArMzExLDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9pZWVlODAyMTFfaGRyKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIGNoYXIgKnRhZykKIHsKIAl1MTYgZmN0bDsKLSAgICAgICAgaW50IGhkcmxlbjsKKwlpbnQgaGRybGVuOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0gICAgICAgIGZjdGwgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCWZjdGwgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXN3aXRjaCAoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKIAkJcHJpbnRrKFBGWCAiJXMgREFUQSAiLCB0YWcpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6CiAJCXByaW50ayhQRlggIiVzIE1HTVQgIiwgdGFnKTsKLQkJc3dpdGNoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCQlzd2l0Y2ggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE6CiAJCQlwcmludGsoIlN1YlR5cGU6IEFTU09DX1JFUSAiKTsKIAkJCWJyZWFrOwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJCXByaW50ayhQRlggIiVzIFBhY2tldCB0eXBlOiBVbmtub3dcbiIsIHRhZyk7CiAJfQogCi0gICAgICAgIGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7CisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihmY3RsKTsKIAogCWlmIChoZHJsZW4gPj0gNCkKIAkJcHJpbnRrKCJGQz0weCUwNHggRFVSPTB4JTA0eCIsCkBAIC0zODksMjkgKzM4OSwyOCBAQAogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0weDFlODsgaSArPSA0KSB7CisJZm9yIChpID0gMDsgaSA8PSAweDFlODsgaSArPSA0KQogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlRYTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgaSkpOwotCX0KIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3J4bV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9MHgxMDg7IGkgKz0gNCkKKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTA4OyBpICs9IDQpCiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUlhNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyAweDIwMDAgKyBpKSk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9ibV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9MHg5MDsgaSArPSA0KQorCWZvciAoaSA9IDA7IGkgPD0gMHg5MDsgaSArPSA0KQogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkJNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyAweDJjMDAgKyBpKSk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9jaXJfcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PTB4Yjg7IGkgKz0gNCkKKwlmb3IgKGkgPSAwOyBpIDw9IDB4Yjg7IGkgKz0gNCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVI6ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MzAwMCArIGkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYwppbmRleCA4NTQ2MzBjLi40ZmY0YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYwpAQCAtMzksMzQgKzM5LDM0IEBACiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJdTMyIHJlZzsKIAotCWlmICggKnJlYXNvbiAmIEFHTlhfU1RBVF9SWCApIHsKKwlpZiAoKnJlYXNvbiAmIEFHTlhfU1RBVF9SWCkgewogCQkvKiBNYXJrIGNvbXBsZXRlIFJYICovCiAJCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKIAkJcmVnIHw9IDB4NDsKIAkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDVEwpOwogCQkvKiBkaXNhYmxlIFJ4IGludGVycnVwdCAqLwogCX0KLQlpZiAoICpyZWFzb24gJiBBR05YX1NUQVRfVFggKSB7CisJaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfVFgpIHsKIAkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKIAkJaWYgKHJlZyAmIDB4NCkgewogCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKIAkJCSpyZWFzb24gfD0gQUdOWF9TVEFUX1RYRDsKIAkJfQotIAkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKKwkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKIAkJaWYgKHJlZyAmIDB4NCkgewogCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKIAkJCSpyZWFzb24gfD0gQUdOWF9TVEFUX1RYTTsKIAkJfQogCX0KLQlpZiAoICpyZWFzb24gJiBBR05YX1NUQVRfWCApIHsKLS8qIAkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfU1RBVCk7ICovCi0vKiAJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX1NUQVQpOyAqLwotLyogCQkvXCogRklYTUUgcmVpbml0IGludGVycnVwdCBtYXNrICpcLyAqLwotLyogCQlyZWcgPSAweGMzOTBiZjkgJiB+SVJRX1RYX0JFQUNPTjsgKi8KLS8qIAkJcmVnICY9IH5JUlFfVFhfRElTQUJMRTsgKi8KLS8qIAkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7ICovCi0vKiAJCWlvd3JpdGUzMigweDgwMCwgY3RsICsgQUdOWF9DSVJfQkxLQ1RMKTsgKi8KLQl9CisvKglpZiAoKnJlYXNvbiAmIEFHTlhfU1RBVF9YKSB7CisJCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOworCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKKwkJLyogRklYTUUgcmVpbml0IGludGVycnVwdCBtYXNrICpcLworCQlyZWcgPSAweGMzOTBiZjkgJiB+SVJRX1RYX0JFQUNPTjsKKwkJcmVnICY9IH5JUlFfVFhfRElTQUJMRTsKKwkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7CisJCWlvd3JpdGUzMigweDgwMCwgY3RsICsgQUdOWF9DSVJfQkxLQ1RMKTsKKwl9ICovCiB9IC8qIGFnbnhfaW50ZXJydXB0X2FjayAqLwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWdueF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC03OSw3ICs3OSw3IEBACiAKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCi0vLwlwcmludGsoS0VSTl9FUlIgUEZYICJHZXQgYSBpbnRlcnJ1cHQgJXNcbiIsIF9fZnVuY19fKTsKKy8qCXByaW50ayhLRVJOX0VSUiBQRlggIkdldCBhIGludGVycnVwdCAlc1xuIiwgX19mdW5jX18pOyAqLwogCiAJaWYgKHByaXYtPmluaXRfc3RhdHVzICE9IEFHTlhfU1RBUlQpCiAJCWdvdG8gb3V0OwpAQCAtOTIsNyArOTIsNyBAQAogCXJldCA9IElSUV9IQU5ETEVEOwogCXByaXYtPmlycV9zdGF0dXMgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9TVEFUKTsKIAotLy8JcHJpbnRrKFBGWCAiSW50ZXJydXB0IHJlYXNvbiBpcyAweCV4XG4iLCBpcnFfcmVhc29uKTsKKy8qCXByaW50ayhQRlggIkludGVycnVwdCByZWFzb24gaXMgMHgleFxuIiwgaXJxX3JlYXNvbik7ICovCiAJLyogTWFrZSBzdXJlIHRoZSB0eG0gYW5kIHR4ZCBmbGFncyBkb24ndCBjb25mbGljdCB3aXRoIG90aGVyIHVua25vd24KIAkgICBpbnRlcnJ1cHQgZmxhZywgbWF5YmUgaXMgbm90IG5lY2Vzc2FyeSAqLwogCWlycV9yZWFzb24gJj0gMHhGOwpAQCAtMTAxLDEzICsxMDEsMTMgQEAKIAkvKiBUT0RPIE1ha2Ugc3VyZSB0aGUgY2FyZCBmaW5pc2hlZCBpbml0aWFsaXplZCAqLwogCWFnbnhfaW50ZXJydXB0X2Fjayhwcml2LCAmaXJxX3JlYXNvbik7CiAKLQlpZiAoIGlycV9yZWFzb24gJiBBR05YX1NUQVRfUlggKQorCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1JYKQogCQloYW5kbGVfcnhfaXJxKHByaXYpOwotCWlmICggaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9UWEQgKQorCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1RYRCkKIAkJaGFuZGxlX3R4ZF9pcnEocHJpdik7Ci0JaWYgKCBpcnFfcmVhc29uICYgQUdOWF9TVEFUX1RYTSApCisJaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhNKQogCQloYW5kbGVfdHhtX2lycShwcml2KTsKLQlpZiAoIGlycV9yZWFzb24gJiBBR05YX1NUQVRfWCApCisJaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfWCkKIAkJaGFuZGxlX290aGVyX2lycShwcml2KTsKIAogCWVuYWJsZV9yeF9pbnRlcnJ1cHQocHJpdik7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAogCWxlbiA9IHByaXYtPnJ4LnNpemUgKyBwcml2LT50eG0uc2l6ZSArIHByaXYtPnR4ZC5zaXplOwogCi0vLwlwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9LRVJORUwpOworLyoJcHJpdi0+cnguaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pICogbGVuLCBHRlBfS0VSTkVMKTsgKi8KIAlwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghcHJpdi0+cnguaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTAsMjggKzIxMCwyNyBAQAogI2lmIDAKIHN0YXRpYyB2b2lkIGFnbnhfcGVyaW9kaWNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZ254X3ByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2RpY193b3JrLndvcmspOwotLy8JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZ254X3ByaXYsIHBlcmlvZGljX3dvcmsud29yayk7CisvKgl1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwogCXVuc2lnbmVkIGxvbmcgZGVsYXk7CiAKIAkvKiBmaXhtZTogdXNpbmcgbXV0ZXg/PyAqLwotLy8Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKy8qCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7ICovCiAKIAkvKiBUT0RPIFJlY2FsaWJyYXRlKi8KLS8vCWNhbGlicmF0ZV9vc2NpbGxhdG9yKHByaXYpOwotLy8JYW50ZW5uYV9jYWxpYnJhdGUocHJpdik7Ci0vLwlhZ254X3NlbmRfcGFja2V0KHByaXYsIDk5Nyk7CisvKgljYWxpYnJhdGVfb3NjaWxsYXRvcihwcml2KTsgKi8KKy8qCWFudGVubmFfY2FsaWJyYXRlKHByaXYpOyAqLworLyoJYWdueF9zZW5kX3BhY2tldChwcml2LCA5OTcpOyAvCiAJLyogRklYTUUgKi8KIC8qIAlpZiAoZGVidWcgPT0gMykgKi8KIC8qICAgICAgICAgICAgICAgICBkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoQUdOWF9QRVJJT0RJQ19ERUxBWSk7ICovCiAvKiAJZWxzZSAqLwogCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsKLS8vCQlkZWxheSA9IHJvdW5kX2ppZmZpZXMoSFogKiAxNSk7CisvKglkZWxheSA9IHJvdW5kX2ppZmZpZXMoSFogKiAxNSk7ICovCiAKIAlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsKIAotLy8Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworLyoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOyAqLwogfQogI2VuZGlmCiAKQEAgLTI1NSwxMiArMjU0LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAotLy8JbWRlbGF5KDUwMCk7CisvKgltZGVsYXkoNTAwKTsgKi8KIAogCW1pZ2h0X3NsZWVwKCk7CiAJYWdueF9od19pbml0KHByaXYpOwogCi0vLwltZGVsYXkoNTAwKTsKKy8qCW1kZWxheSg1MDApOyAqLwogCW1pZ2h0X3NsZWVwKCk7CiAKIAlwcml2LT5pbml0X3N0YXR1cyA9IEFHTlhfU1RBUlQ7CkBAIC0yODAsMTYgKzI3OSwxNiBAQAogCS8qIG1ha2Ugc3VyZSBoYXJkd2FyZSB3aWxsIG5vdCBnZW5lcmF0ZSBpcnEgKi8KIAlhZ254X2h3X3Jlc2V0KHByaXYpOwogCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgZGV2KTsKLSAgICAgICAgZmx1c2hfd29ya3F1ZXVlKHByaXYtPmh3LT53b3JrcXVldWUpOwotLy8JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wZXJpb2RpY193b3JrKTsKKwlmbHVzaF93b3JrcXVldWUocHJpdi0+aHctPndvcmtxdWV1ZSk7CisvKgljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnBlcmlvZGljX3dvcmspOyAqLwogCXVuZmlsbF9yaW5ncyhwcml2KTsKIAlyaW5nc19mcmVlKHByaXYpOwogfQogCi1zdGF0aWMgaW50IGFnbnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3N0YXRpYyBpbnQgYWdueF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7CiAJaW50IGNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCUFHTlhfVFJBQ0U7CiAKQEAgLTMxNSw3ICszMTQsNiBAQAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAlpZiAobWVtY21wKGNvbmYtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKSB7Ci0vLwkJdTMyIHJlZ2hpLCByZWdsbzsKIAkJYWdueF9zZXRfYnNzaWQocHJpdiwgY29uZi0+YnNzaWQpOwogCQltZW1jcHkocHJpdi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CiAJCWhhc2hfd3JpdGUocHJpdiwgY29uZi0+YnNzaWQsIEJTU0lEX1NUQUlEKTsKQEAgLTQyNSw3ICs0MjMsNyBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gYWdueF9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IGFnbnhfY29uZmlnLAogCS5jb25maWdfaW50ZXJmYWNlCT0gYWdueF9jb25maWdfaW50ZXJmYWNlLAotIAkuY29uZmlndXJlX2ZpbHRlcgk9IGFnbnhfY29uZmlndXJlX2ZpbHRlciwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IGFnbnhfY29uZmlndXJlX2ZpbHRlciwKIAkuZ2V0X3N0YXRzCQk9IGFnbnhfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYWdueF9nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YJCT0gYWdueF9nZXRfdHNmdApAQCAtNDM0LDExICs0MzIsMTIgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhZ254X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGFnbnhfcHJpdiAqcHJpdjsKIAlBR05YX1RSQUNFOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybjsKKwlwcml2ID0gZGV2LT5wcml2OwogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRldik7CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+Y3RsKTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5kYXRhKTsKQEAgLTUwNCw3ICs1MDMsNyBAQAogCiAJLyogTWFwIG1lbSAjMSBhbmQgIzIgKi8KIAlwcml2LT5jdGwgPSBwY2lfaW9tYXAocGRldiwgMCwgbWVtX2xlbjApOwotLy8JcHJpbnRrKEtFUk5fREVCVUcgUEZYIk1FTTEgbWFwcGVkIGFkZHJlc3MgaXMgMHglcFxuIiwgcHJpdi0+Y3RsKTsKKy8qCXByaW50ayhLRVJOX0RFQlVHIFBGWCJNRU0xIG1hcHBlZCBhZGRyZXNzIGlzIDB4JXBcbiIsIHByaXYtPmN0bCk7ICovCiAJaWYgKCFwcml2LT5jdGwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgbWFwIGRldmljZSBtZW1vcnlcbiIpOwogCQlnb3RvIGVycl9mcmVlX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmMKaW5kZXggZGE4ZjEwYy4uMmJlNjMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCS8qIEZJWE1FICovCiAJcmVnID0gKG1hY19hZGRyWzBdIDw8IDI0KSB8IChtYWNfYWRkclsxXSA8PCAxNikgfCBtYWNfYWRkclsyXSA8PCA4IHwgbWFjX2FkZHJbM107CiAJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fTUFDSEkpOwotIAlyZWcgPSAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKKwlyZWcgPSAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKIAlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9NQUNMTyk7CiB9CiAKQEAgLTEyNyw3ICsxMjcsNyBAQAogCS8qIEZJWE1FICovCiAJcmVnID0gYnNzaWRbMF0gPDwgMjQgfCAoYnNzaWRbMV0gPDwgMTYpIHwgKGJzc2lkWzJdIDw8IDgpIHwgYnNzaWRbM107CiAJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fQlNTSURISSk7Ci0gCXJlZyA9IChic3NpZFs0XSA8PCA4KSB8IGJzc2lkWzVdOworCXJlZyA9IChic3NpZFs0XSA8PCA4KSB8IGJzc2lkWzVdOwogCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX0JTU0lETE8pOwogCiAJLyogRW5hYmxlIHRoZSByZWNlaXZlciAqLwpAQCAtNDAxLDkgKzQwMSw5IEBACiAJCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3NCwgMHgxZjE3MTcxMCk7CiAJCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3OCwgMHgxMDEwMGQwZCk7CiAJCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3YywgMHgxMTExMTAxMCk7Ci0JfQotCWVsc2UKKwl9IGVsc2UgewogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9ERUxBWTExLCAweDApOworCX0KIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDgxOTVlMDApOwogfQogCkBAIC00NzYsNyArNDc2LDcgQEAKIAkvKiBJdCBzZWVtZWQgaWYgd2Ugc2V0IG90aGVyIGJpdCB0byAxIHRoZSBiaXQgMCB3aWxsCiAJICAgYmUgYXV0byBjaGFuZ2UgdG8gMCAqLwogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MiB8IDB4MSk7Ci0vLwlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYVE9QRUVSLCAweDEpOworLyoJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFRPUEVFUiwgMHgxKTsgKi8KIH0gLyogZ2Fpbl9jdGxjbnRfaW5pdCAqLwogCiAKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCS8qIExvYWQgSW5pdGlhbEdhaW5UYWJsZSAqLwogCWdhaW5fdGFibGVfaW5pdChwcml2KTsKIAotICAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgyMDAwMDAwKTsKKwlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9BRERSV0lOLCAweDIwMDAwMDApOwogCiAJLyogQ2xlYXIgdGhlIGZvbGxvd2luZyBvZmZzZXRzIGluIE1lbW9yeSBSYW5nZSAjMjogKi8KIAltZW1zZXRfaW8oZGF0YSArIDB4NTA0MCwgMCwgMHhhICogNCk7CkBAIC01ODYsNyArNTg2LDcgQEAKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUIsIDB4MjgpOwogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DV0RFVEVDLCAweDApOwogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDM4LCAweDFlKTsKLS8vCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMHgyNik7CisvKgkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDB4MjYpOyovCiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgzKTsKIAogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUDExQSwgMHgzMik7CkBAIC04MTAsMTAgKzgxMCwxMCBAQAogCQl9CiAJCXByaW50X2hleF9kdW1wX2J5dGVzKFBGWCAiRUVQUk9NOiAiLCBEVU1QX1BSRUZJWF9OT05FLCBlZXByb20sCiAJCQkJICAgICBBUlJBWV9TSVpFKGVlcHJvbSkpOwotCX0gd2hpbGUoMCk7CisJfSB3aGlsZSAoMCk7CiAKIAlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyNik7Ci0gICAgICAgIHJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7CisJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHN5c3RlbSBpbnRlcmZhY2UgKi8KIAlzeXN0ZW1faXRmX2luaXQocHJpdik7CkBAIC04NzQsMTkgKzg3NCwxOSBAQAogCS8qIEZJWE1FIEVuYWJsZSB0aGUgcmVxdWVzdCAqLwogCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KIAkvKiBTZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4ODE5NWUwMCk7ICovCi0vKiAJZW5hYmxlX3JlY2VpdmVyKHByaXYpOyAqLworLyoJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4ODE5NWUwMCk7ICovCisvKgllbmFibGVfcmVjZWl2ZXIocHJpdik7ICovCiAKIAkvKiBTZXQgdGhlIFJlY2VpdmVyIEJTU0lEICovCiAJcmVjZWl2ZXJfYnNzaWRfc2V0KHByaXYsIGJzc2lkKTsKIAogCS8qIEZJWE1FIFNldCB0byBtYW5hZ2VkIG1vZGUgKi8KIAlzZXRfbWFuYWdlZF9tb2RlKHByaXYpOwotLy8Jc2V0X3Byb21pc2N1b3VzX21vZGUocHJpdik7Ci0vKiAJc2V0X3NjYW5fbW9kZShwcml2KTsgKi8KLS8qIAlzZXRfbGVhcm5fbW9kZShwcml2KTsgKi8KLS8vIAlzZXRfcHJvbWlzX2FuZF9tYW5hZ2VkKHByaXYpOwotLy8gCXNldF9hZGhvY19tb2RlKHByaXYpOworLyoJc2V0X3Byb21pc2N1b3VzX21vZGUocHJpdik7ICovCisvKglzZXRfc2Nhbl9tb2RlKHByaXYpOyAqLworLyoJc2V0X2xlYXJuX21vZGUocHJpdik7ICovCisvKglzZXRfcHJvbWlzX2FuZF9tYW5hZ2VkKHByaXYpOyAqLworLyoJc2V0X2FkaG9jX21vZGUocHJpdik7ICovCiAKIAkvKiBTZXQgdGhlIHJlY2lldmUgcmVxdWVzdCByYXRlICovCiAJLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMKaW5kZXggODI5NGI2ZS4uNDJlNDU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9yZi5jCkBAIC0xMDksMTIgKzEwOSwxMiBAQAogCX0KIAogCS8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gMjAwTlMgKi8KLSAgICAgICAgcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOwotICAgICAgICByZWcgJj0gfjB4RjsKLSAgICAgICAgcmVnIHw9IDB4MzsKLSAgICAgICAgYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOworCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKKwlyZWcgJj0gfjB4RjsKKwlyZWcgfD0gMHgzOworCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1BJX0NGRywgcmVnKTsKIAotICAgICAgICAvKiBTZXQgU1BJIGNsb2NrIHNwZWVkIHRvIDUwTlMgKi8KKwkvKiBTZXQgU1BJIGNsb2NrIHNwZWVkIHRvIDUwTlMgKi8KIAlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7CiAJcmVnICY9IH4weEY7CiAJcmVnIHw9IDB4MTsKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCA3MCk7CiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0hUSCwgMTAwKTsKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCA0OCk7Ci0vLwkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAxNik7CisvKgkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAxNik7ICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmtub3cgYW50ZW5uYSBudW1iZXJcbiIpOwpAQCAtMjc1LDggKzI3NSw4IEBACiAJaWYgKHJlZyA9PSAweDQpCiAJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCByZWd8MHgxMDAwKTsKIAllbHNlIGlmIChyZWcgIT0gMHgwKQotICAgICAJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCByZWd8MHgxMDAwKTsKLSAgICAgICAgZWxzZSB7CisJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCByZWd8MHgxMDAwKTsKKwllbHNlIHsKIAkJaWYgKGNoYWluID09IDMgfHwgY2hhaW4gPT0gNikgewogCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIHJlZ3wweDEwMDApOwogCQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDApOwpAQCAtNjM0LDggKzYzNCw3IEBACiAJfQogfSAvKiBjaGFpbl9jYWxpYnJhdGUgKi8KIAotCi1zdGF0aWMgdm9pZCBpbmxpbmUgZ2V0X2NhbGlicmV0ZV92YWx1ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgY2hhaW5zICpjaGFpbnMsCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2NhbGlicmV0ZV92YWx1ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgY2hhaW5zICpjaGFpbnMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBudW0pCiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CkBAIC02NTIsNyArNjUxLDcgQEAKIAl9CiAKIAlpZiAobnVtID09IDAgfHwgbnVtID09IDEgfHwgbnVtID09IDIpIHsKLQkJaWYgKCAwID09IGNoYWluc1tudW1dLmNhbGkpCisJCWlmICgwID09IGNoYWluc1tudW1dLmNhbGkpCiAJCQljaGFpbnNbbnVtXS5jYWxpID0gMHhmZjsKIAkJZWxzZQogCQkJY2hhaW5zW251bV0uY2FsaS0tOwpAQCAtNjY5LDcgKzY2OCw3IEBACiAJdW5zaWduZWQgaW50IGkgPSAxMDA7CiAKIAl3bWIoKTsKLQl3aGlsZSAoaS0tKSB7CisJd2hpbGUgKC0taSkgewogCQlyZWcgPSAoaW9yZWFkMzIoY3RsICsgQUdOWF9BQ0lfU1RBVFVTKSk7CiAJCWlmIChyZWcgPT0gMHg0MDAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCmluZGV4IGQzYWM2NzUuLjViMmQ1NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCkBAIC0xOCw3ICsxOCw3IEBACiAJaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCiAJcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLSAgICAgICAgcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOworCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAlwcmludGsoUEZYICJSWCBoYXNoIGNtZCBhcmUgOiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKIH0KIApAQCAtNDAsNyArNDAsNyBAQAogCWlvd3JpdGUzMihyZWdoaSwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7CiAJaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCi0gICAgICAgIHJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKKwlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAJaWYgKCEocmVnbG8gJiAweDgwMDAwMDAwKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVwZGF0ZSBoYXNoIHRhYmxlIGZhaWxlZFxuIik7CiB9CkBAIC01OSw3ICs1OSw3IEBACiAJaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7CiAKLSAgICAgICAgcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOworCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAlwcmludGsoUEZYICJSWCBoYXNoIGNtZCBhcmUgOiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKIAogfQpAQCAtNjksMTUgKzY5LDE0IEBACiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJdTMyIHJlZ2hpLCByZWdsbzsKIAotCXJlZ2xvID0gMHgwOwkJLyogZHVtcCBjb21tYW5kICovCi0JcmVnbG98PSAweDQwMDAwMDAwOyAgCS8qIHN0YXR1cyBiaXQgKi8KKwlyZWdsbyA9IDB4NDAwMDAwMDA7ICAJLyogc3RhdHVzIGJpdCAqLwogCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAlpb3dyaXRlMzIoc3RhX2lkIDw8IDE2LCBjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSk7CiAKIAl1ZGVsYXkoODApOwogCiAJcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLSAgICAgICAgcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOworCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAlwcmludGsoUEZYICJoYXNoIGNtZCBhcmUgOiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKIAlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwogCXByaW50ayhQRlggImhhc2ggZmxhZyBpcyA6ICUuOHhcbiIsIHJlZ2hpKTsKQEAgLTkxLDcgKzkwLDcgQEAKIHZvaWQgZ2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhwb3dlciwgY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKKwltZW1jcHlfZnJvbWlvKHBvd2VyLCBjdGwgKyBBR05YX1RYTV9TVEFQT1dURU1QICsgc2l6ZW9mKCpwb3dlcikgKiBzdGFfaWR4LAogCQkgICAgICBzaXplb2YoKnBvd2VyKSk7CiB9CiAKQEAgLTEwMCw3ICs5OSw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJLyogRklYTUUgICAyLiBXcml0ZSBUZW1wbGF0ZSB0byBvZmZzZXQgKyBzdGF0aW9uIG51bWJlciAgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKKwltZW1jcHlfdG9pbyhjdGwgKyBBR05YX1RYTV9TVEFQT1dURU1QICsgc2l6ZW9mKCpwb3dlcikgKiBzdGFfaWR4LAogCQkgICAgcG93ZXIsIHNpemVvZigqcG93ZXIpKTsKIH0KIApAQCAtMTM1LDcgKzEzNCw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKIAotICAgICAgICBtZW1jcHlfdG9pbyhkYXRhICsgQUdOWF9QRFVQT09MICsgc2l6ZW9mKCpzdGEpICogc3RhX2lkeCwKKwltZW1jcHlfdG9pbyhkYXRhICsgQUdOWF9QRFVQT09MICsgc2l6ZW9mKCpzdGEpICogc3RhX2lkeCwKIAkJICAgIHN0YSwgc2l6ZW9mKCpzdGEpKTsKIH0KIApAQCAtMTY1LDcgKzE2NCw3IEBACiAKIAlyZWcgPSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfVkFMSUQsIFdPUktfUVVFVUVfVkFMSURfU0hJRlQsIDEpOwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfQUNLX1RZUEUsIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQsIDEpOwotLy8JcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMCk7CisvKglyZWcgfD0gYWdueF9zZXRfYml0cyhXT1JLX1FVRVVFX0FDS19UWVBFLCBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZULCAwKTsgKi8KIAl0eF93cS5yZWcyIHw9IGNwdV90b19sZTMyKHJlZyk7CiAKIAkvKiBTdXBwb3NlIGFsbCA4IHRyYWZmaWMgY2xhc3MgYXJlIHVzZWQgKi8KQEAgLTE4MSw3ICsxODAsNyBAQAogCiAJcmVnID0gYWdueF9zZXRfYml0cyhORVdfUEFDS0VULCBORVdfUEFDS0VUX1NISUZULCAxKTsKIAlyZWcgfD0gYWdueF9zZXRfYml0cyhUUkFGRklDX1ZBTElELCBUUkFGRklDX1ZBTElEX1NISUZULCAxKTsKLS8vCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfQUNLX1RZUEUsIFRSQUZGSUNfQUNLX1RZUEVfU0hJRlQsIDEpOworLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVFJBRkZJQ19BQ0tfVFlQRSwgVFJBRkZJQ19BQ0tfVFlQRV9TSElGVCwgMSk7ICovCiAJdHJhZmZpYy0+cmVnMCA9IGNwdV90b19sZTMyKHJlZyk7CiAKIAkvKiAJMy4gc2V0dGluZyBSWCBTZXF1ZW5jZSBOdW1iZXIgdG8gNDA5NSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuaAppbmRleCA1OGQwYjEyLi45NGUyY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBQQVNTCQkweDAwMDAwMDAxCiAjZGVmaW5lIFBBU1NfU0hJRlQJMQogCV9fYmUzMiBjbWRsbzsKLX1fX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKaW5kZXggYzYwMDQ4NC4uYjUyZmVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAlkaXNhYmxlX3JlY2VpdmVyKHByaXYpOwogCi0JZm9yICggdHlwZSA9IDA7IHR5cGUgPCAweDM7IHR5cGUrKyApIHsKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgMHgzOyB0eXBlKyspIHsKIAkJZm9yIChzdWJ0eXBlID0gMDsgc3VidHlwZSA8IDB4MTA7IHN1YnR5cGUrKykgewogCQkJLyogMS4gU2V0IFJvdXRpbmcgdGFibGUgdG8gUi9XIGFuZCB0byBSZXR1cm4gc3RhdHVzIG9uIFJlYWQgKi8KIAkJCXJlZyA9ICh0eXBlIDw8IFJPVVRBQl9UWVBFX1NISUZUKSB8CkBAIC04OSw3ICs4OSw3IEBACiAJCQlpZiAodHlwZSA9PSBST1VUQUJfVFlQRV9EQVRBKSB7CiAJCQkJLyogTlVMTCBnb2VzIHRvIFJGUCAqLwogCQkJCWlmIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX05VTEwpCi0vLwkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9SRlA7CisvKgkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9SRlA7ICovCiAJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOwogCQkJCS8qIFFPUyBOVUxMIGdvZXMgdG8gQ1BVICovCiAJCQkJZWxzZSBpZiAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMKQpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NEQVRBUE9MTCkgfHwKIAkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0tQT0xMKSkKIAkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9FTkNSWTsKLS8vCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKKy8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsgKi8KIAkJCQkvKkRyb3AgTlVMTCBhbmQgUU9TIE5VTEwgYWNrLCBwb2xsIGFuZCBwb2xsIGFjayovCiAJCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTEFDSykgfHwKIAkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0spIHx8CkBAIC0xMTIsMTEgKzExMiwxMSBAQAogCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTFBPTEwpIHx8CiAJCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMUE9MTEFDSykgfHwKIAkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMQUNLKSkKLS8vCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0RST1A7CisvKgkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9EUk9QOyAqLwogCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKLQkJCX0KLQkJCWVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJcmVnIHw9IChST1VUQUJfUk9VVEVfQ1BVKTsKKwkJCX0KIAkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX1JPVVRBQik7CiAJCQkvKiBDaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgc3RhdHVzIGJpdCBjbGVhcmVkICovCiAJCQlyb3V0aW5nX3RhYmxlX2RlbGF5KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKaW5kZXggN2YwMTUyOC4uMGUwMzQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAicGh5LmgiCiAKLXVuc2lnbmVkIGludCByeF9mcmFtZV9jbnQgPSAwOwotLy91bnNpZ25lZCBpbnQgbG9jYWxfdHhfc2VudF9jbnQgPSAwOwordW5zaWduZWQgaW50IHJ4X2ZyYW1lX2NudDsKKy8qIHVuc2lnbmVkIGludCBsb2NhbF90eF9zZW50X2NudCA9IDA7ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3J4X2VuZ2luZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQogewpAQCAtMjQyLDE1ICsyNDIsMTUgQEAKIAltZW1zZXQoc3RhdCwgMCwgc2l6ZW9mKCpzdGF0KSk7CiAJLyogUlNTSSAqLwogCXJzc2kgPSAodTggKikmaGRyLT5waHlfc3RhdHNfbG87Ci0vLwlzdGF0LT5zc2kgPSAocnNzaVswXSArIHJzc2lbMV0gKyByc3NpWzJdKSAvIDM7CisvKglzdGF0LT5zc2kgPSAocnNzaVswXSArIHJzc2lbMV0gKyByc3NpWzJdKSAvIDM7ICovCiAJLyogTm9pc2UgKi8KIAlub2lzZSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMCk7CiAJbm9pc2UgKz0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UxKTsKIAlub2lzZSArPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTIpOwogCXN0YXQtPm5vaXNlID0gbm9pc2UgLyAzOwogCS8qIFNpZ25hbCBxdWFsaXR5ICovCi0JLy9zbnIgPSBzdGF0LT5zc2kgLSBzdGF0LT5ub2lzZTsKLQlpZiAoc25yID49MCAmJiBzbnIgPCA0MCkKKy8qCXNuciA9IHN0YXQtPnNzaSAtIHN0YXQtPm5vaXNlOyAqLworCWlmIChzbnIgPj0gMCAmJiBzbnIgPCA0MCkKIAkJc3RhdC0+c2lnbmFsID0gNSAqIHNuciAvIDI7CiAJZWxzZSBpZiAoc25yID49IDQwKQogCQlzdGF0LT5zaWduYWwgPSAxMDA7CkBAIC0yNjksMTAgKzI2OSw5IEBACiAKIAlzdGF0LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAlzdGF0LT5mcmVxID0gYWdueF9jaGFubmVsc1twcml2LT5jaGFubmVsIC0gMV0uY2VudGVyX2ZyZXE7Ci0vLwlzdGF0LT5hbnRlbm5hID0gMzsKLS8vCXN0YXQtPm1hY3RpbWUgPSBiZTMyX3RvX2NwdShoZHItPnRpbWVfc3RhbXApOwotLy8Jc3RhdC0+Y2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7Ci0KKy8qCXN0YXQtPmFudGVubmEgPSAzOworCXN0YXQtPm1hY3RpbWUgPSBiZTMyX3RvX2NwdShoZHItPnRpbWVfc3RhbXApOworCXN0YXQtPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOyAqLwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29tYmluZV9oZHJfZnJhZyhzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaWVlZWhkciwKQEAgLTI5Niw3ICsyOTUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgYWdueF9wYWNrZXRfY2hlY2soc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfaGRyICphZ254aGRyLAogCQkJCSAgICB1bnNpZ25lZCBwYWNrZXRfbGVuKQogewotCWlmIChhZ254X2dldF9iaXRzKENSQ19GQUlMLCBDUkNfRkFJTF9TSElGVCwgYmUzMl90b19jcHUoYWdueGhkci0+cmVnMSkpID09IDEpeworCWlmIChhZ254X2dldF9iaXRzKENSQ19GQUlMLCBDUkNfRkFJTF9TSElGVCwgYmUzMl90b19jcHUoYWdueGhkci0+cmVnMSkpID09IDEpIHsKIAkJcHJpbnRrKFBGWCAiUlg6IENSQyBjaGVjayBmYWlsXG4iKTsKIAkJZ290byBkcm9wOwogCX0KQEAgLTMyMCw3ICszMTksNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgbGVuOwotLy8JQUdOWF9UUkFDRTsKKy8qCUFHTlhfVFJBQ0U7ICovCiAKIAlkbyB7CiAJCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7CkBAIC0zNDEsNTQgKzM0MCw1NCBAQAogCiAJCWxlbiA9IChmcmFnICYgUEFDS0VUX0xFTikgPj4gUEFDS0VUX0xFTl9TSElGVDsKIAkJaWYgKGFnbnhfcGFja2V0X2NoZWNrKHByaXYsIGhkciwgbGVuKSA9PSAtMSkgewotIAkJCXJ4X2Rlc2NfcmV1c2luZyhwcml2LCBpKTsKKwkJCXJ4X2Rlc2NfcmV1c2luZyhwcml2LCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXNrYl9wdXQoc2tiLCBsZW4pOwogCiAJCWRvIHsKLQkJCXUxNiBmY3RsOworCQkJCXUxNiBmY3RsOwogCQkJZmN0bCA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIpLT5mcmFtZV9jb250cm9sKTsKLQkJCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSAhPSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKS8vICYmICEoZmN0bCAmIElFRUU4MDIxMV9TVFlQRV9CRUFDT04pKQorCQkJaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pLyogJiYgIShmY3RsICYgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpICovCiAJCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciwgIlJYIik7CiAJCX0gd2hpbGUgKDApOwogCiAJCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0vKiAJCQlpbnQgajsgKi8KLS8qIAkJCXUxNiBmY3RsID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkcikgKi8KLS8qIAkJCQkJICAgICAgIC0+ZnJhbWVfY29udHJvbCk7ICovCi0vKiAJCQlpZiAoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09ICBJRUVFODAyMTFfRlRZUEVfREFUQSkgeyAqLwotLyogCQkJCWFnbnhfcHJpbnRfcnhfaGRyKGhkcik7ICovCi0vLyAJCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOwotLyogCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKiAJCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCBqKTsJCSAqLwotLyogCQkJfSAqLworLyoJCQlpbnQgajsKKwkJCXUxNiBmY3RsID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkcikKKwkJCQkJICAgICAgIC0+ZnJhbWVfY29udHJvbCk7CisJCQlpZiAoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09ICBJRUVFODAyMTFfRlRZUEVfREFUQSkgeworCQkJCWFnbnhfcHJpbnRfcnhfaGRyKGhkcik7CisJCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOworCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisJCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCBqKTsKKwkJCX0gKi8KIAogCQkJZ2V0X3J4X3N0YXRzKHByaXYsIGhkciwgJnN0YXR1cyk7CiAJCQlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSk7CiAJCQljb21iaW5lX2hkcl9mcmFnKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciwgc2tiKTsKIAkJfSBlbHNlIGlmICghaGRyLT5fMTFiMCAmJiBoZHItPl8xMWcwKSB7Ci0vLwkJCWludCBqOworLyoJCQlpbnQgajsgKi8KIAkJCWFnbnhfcHJpbnRfcnhfaGRyKGhkcik7CiAJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0vLwkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisvKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCiAJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7CiAKIAkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBSWF9QQUNLRVQ6ICIsIERVTVBfUFJFRklYX05PTkUsCiAJCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiArIDgpOwogCi0vLwkJCWlmIChhZ254X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbSgmaGRyLT5fMTFnMCkgPT0gMCkKKy8qCQkJaWYgKGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKCZoZHItPl8xMWcwKSA9PSAwKSAqLwogCQkJZ2V0X3J4X3N0YXRzKHByaXYsIGhkciwgJnN0YXR1cyk7CiAJCQlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSk7CiAJCQljb21iaW5lX2hkcl9mcmFnKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKQogCQkJCQkgKCh2b2lkICopJmhkci0+bWFjX2hkciksIHNrYik7Ci0vLwkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEsICJSWCBHIik7CisvKgkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEsICJSWCBHIik7ICovCiAJCX0gZWxzZQogCQkJYWdueF9idWcoIlVua25vd24gcGFja2V0cyB0eXBlIik7CiAJCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBza2IsICZzdGF0dXMpOwogCQlyeF9kZXNjX3JlaW5pdChwcml2LCBpKTsKIAotCX0gd2hpbGUgKCBwcml2LT5yeC5pZHgrKyApOworCX0gd2hpbGUgKHByaXYtPnJ4LmlkeCsrKTsKIH0gLyogaGFuZGxlX3J4X2lycSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX3R4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9yaW5nICpyaW5nKQpAQCAtNDE1LDQwICs0MTQsNDAgQEAKIAkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLCBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQlkbyB7Ci0vLwkJCWludCBqOworLyoJCQlpbnQgajsgKi8KIAkJCXNpemVfdCBsZW47CiAJCQlsZW4gPSBpbmZvLT5za2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpICsgaW5mby0+aGRyX2xlbjsKLQkJCS8vCWlmIChsZW4gPT0gNjE0KSB7Ci0vLwkJCQlhZ254X3ByaW50X2Rlc2MoZGVzYyk7CisvKgkJCWlmIChsZW4gPT0gNjE0KSB7ICovCisvKgkJCQlhZ254X3ByaW50X2Rlc2MoZGVzYyk7ICovCiAJCQkJaWYgKGluZm8tPnR5cGUgPT0gUEFDS0VUKSB7Ci0vLwkJCQkJYWdueF9wcmludF90eF9oZHIoKHN0cnVjdCBhZ254X2hkciAqKWluZm8tPnNrYi0+ZGF0YSk7Ci0vKiAJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qIAkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyogLy8JCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKiAJCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCAwKTsgKi8KLS8vCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBCU1NJRF9TVEFJRCk7Ci0vLwkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOwotLy8JCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0vLwkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIDApOworLyoJCQkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilpbmZvLT5za2ItPmRhdGEpOyAqLworLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KKy8qCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBMT0NBTF9TVEFJRCk7ICovCisvKgkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KKy8qCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBMT0NBTF9TVEFJRCwgMCk7ICovCisvKgkJCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLworLyoJCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KKy8qCQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLworLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCAwKTsgKi8KIAkJCQl9Ci0vLwkJCX0KKy8qCQkJfSAqLwogCQl9IHdoaWxlICgwKTsKIAogCQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpIHsKLS8vCQkJZHVtcF90eG1fcmVnaXN0ZXJzKHByaXYpOwotLy8JCQlkdW1wX3J4bV9yZWdpc3RlcnMocHJpdik7Ci0vLwkJCWR1bXBfYm1fcmVnaXN0ZXJzKHByaXYpOwotLy8JCQlkdW1wX2Npcl9yZWdpc3RlcnMocHJpdik7CisvKgkJCWR1bXBfdHhtX3JlZ2lzdGVycyhwcml2KTsKKwkJCWR1bXBfcnhtX3JlZ2lzdGVycyhwcml2KTsKKwkJCWR1bXBfYm1fcmVnaXN0ZXJzKHByaXYpOworCQkJZHVtcF9jaXJfcmVnaXN0ZXJzKHByaXYpOyAqLwogCQl9CiAKIAkJaWYgKGluZm8tPnR5cGUgPT0gUEFDS0VUKSB7Ci0vLwkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisvKgkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7ICovCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aSA9IElFRUU4MDIxMV9TS0JfQ0IoaW5mby0+c2tiKTsKIAogCQkJc2tiX3B1bGwoaW5mby0+c2tiLCBzaXplb2Yoc3RydWN0IGFnbnhfaGRyKSk7CiAJCQltZW1jcHkoc2tiX3B1c2goaW5mby0+c2tiLCBpbmZvLT5oZHJfbGVuKSwgJmluZm8tPmhkciwgaW5mby0+aGRyX2xlbik7CiAKLS8vCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWluZm8tPnNrYi0+ZGF0YSwgIlRYX0hBTkRMRSIpOworLyoJCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaW5mby0+c2tiLT5kYXRhLCAiVFhfSEFORExFIik7ICovCiAvKiAJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogVFhfSEFORExFOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAqLwogLyogCQkJCQkgICAgIGluZm8tPnNrYi0+ZGF0YSwgaW5mby0+c2tiLT5sZW4pOyAqLwogCkBAIC00NjIsNyArNDYxLDcgQEAKIC8qIAkJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIGluZm8tPnNrYiwgJihpbmZvLT50eF9zdGF0dXMpKTsgKi8KIC8qIAkJCX0gZWxzZSAqLwogLyogCQkJCWRldl9rZnJlZV9za2JfaXJxKGluZm8tPnNrYik7ICovCi0gCQl9CisJCX0KIAkJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwogCQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiAJfQpAQCAtNDg1LDcgKzQ4NCw3IEBACiAKIHZvaWQgaGFuZGxlX290aGVyX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQogewotLy8Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CisvKgl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsgKi8KIAl1MzIgc3RhdHVzID0gcHJpdi0+aXJxX3N0YXR1czsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAl1MzIgcmVnOwpAQCAtNTI2LDExICs1MjUsMTEgQEAKIAkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7CiAJCWlvd3JpdGUzMihJUlFfUlhfRlJBTUUsIGN0bCArIEFHTlhfSU5UX1NUQVQpOwogCQlwcmludGsoUEZYICJJUlE6IFJYIEZyYW1lXG4iKTsKLSAJCXJ4X2ZyYW1lX2NudCsrOworCQlyeF9mcmFtZV9jbnQrKzsKIAl9CiAJaWYgKHN0YXR1cyAmIElSUV9FUlJfSU5UKSB7CiAJCWlvd3JpdGUzMihJUlFfRVJSX0lOVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0vLwkJYWdueF9od19yZXNldChwcml2KTsKKy8qCQlhZ254X2h3X3Jlc2V0KHByaXYpOyAqLwogCQlwcmludGsoUEZYICJJUlE6IEVycm9yIEludGVycnVwdFxuIik7CiAJfQogCWlmIChzdGF0dXMgJiBJUlFfVFhfUVVFX0ZVTEwpCkBAIC01NTgsMTQgKzU1NywxNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcm91dGVfZmxhZ19zZXQoc3RydWN0IGFnbnhfaGRyICp0eGhkcikKIHsKLS8vCXUzMiByZWcgPSAwOworLyoJdTMyIHJlZyA9IDA7ICovCiAKIAkvKiBGSVhNRSAqLwotLyogIAlyZWcgPSAoMHg3IDw8IFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUKSAmIFJPVVRFX0NPTVBSRVNTSU9OOyAqLwotLyogCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIocmVnKTsgKi8KLSAJdHhoZHItPnJlZzUgPSAoMHhhIDw8IDB4MCkgfCAoMHg3IDw8IDB4MTgpOwotLy8gCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIoKDB4YSA8PCAweDApIHwgKDB4NyA8PCAweDE4KSk7Ci0vLyAJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigweDcgPDwgMHgwKTsKKy8qCXJlZyA9ICgweDcgPDwgUk9VVEVfQ09NUFJFU1NJT05fU0hJRlQpICYgUk9VVEVfQ09NUFJFU1NJT047ICovCisvKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKHJlZyk7ICovCisJdHhoZHItPnJlZzUgPSAoMHhhIDw8IDB4MCkgfCAoMHg3IDw8IDB4MTgpOworLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigoMHhhIDw8IDB4MCkgfCAoMHg3IDw8IDB4MTgpKTsgKi8KKy8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIoMHg3IDw8IDB4MCk7ICovCiB9CiAKIC8qIFJldHVybiAwIGlmIG5vIG1hdGNoICovCkBAIC01NzksMTIgKzU3OCwyOSBAQAogCWNhc2UgNTU6CiAJY2FzZSA2MDoKIAljYXNlIDkwOgotCWNhc2UgMTIwOiBwb3dlcl9sZXZlbCA9IDIyOyBicmVhazsKLQljYXNlIDE4MDogcG93ZXJfbGV2ZWwgPSAxOTsgYnJlYWs7Ci0JY2FzZSAyNDA6IHBvd2VyX2xldmVsID0gMTg7IGJyZWFrOwotCWNhc2UgMzYwOiBwb3dlcl9sZXZlbCA9IDE2OyBicmVhazsKLQljYXNlIDQ4MDogcG93ZXJfbGV2ZWwgPSAxNTsgYnJlYWs7Ci0JY2FzZSA1NDA6IHBvd2VyX2xldmVsID0gMTQ7IGJyZWFrOworCWNhc2UgMTIwOgorCQlwb3dlcl9sZXZlbCA9IDIyOworCQlicmVhazsKKworCWNhc2UgMTgwOgorCQlwb3dlcl9sZXZlbCA9IDE5OworCQlicmVhazsKKworCWNhc2UgMjQwOgorCQlwb3dlcl9sZXZlbCA9IDE4OworCQlicmVhazsKKworCWNhc2UgMzYwOgorCQlwb3dlcl9sZXZlbCA9IDE2OworCQlicmVhazsKKworCWNhc2UgNDgwOgorCQlwb3dlcl9sZXZlbCA9IDE1OworCQlicmVhazsKKworCWNhc2UgNTQwOgorCQlwb3dlcl9sZXZlbCA9IDE0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlhZ254X2J1ZygiRXJyb3IgcmF0ZSBzZXR0aW5nXG4iKTsKIAl9CkBAIC02MDQsMzAgKzYyMCwzMCBAQAogCiAJbWVtc2V0KHR4aGRyLCAwLCBzaXplb2YoKnR4aGRyKSk7CiAKLS8vCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgTE9DQUxfU1RBSUQpOworLyoJcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX0lELCBTVEFUSU9OX0lEX1NISUZULCBMT0NBTF9TVEFJRCk7ICovCiAJcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX0lELCBTVEFUSU9OX0lEX1NISUZULCBCU1NJRF9TVEFJRCk7CiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS1FVRVVFX0lELCBXT1JLUVVFVUVfSURfU0hJRlQsIDApOwogCXR4aGRyLT5yZWc0ID0gY3B1X3RvX2JlMzIocmVnKTsKIAogCS8qIFNldCB0aGUgSGFyZHdhcmUgU2VxdWVuY2UgTnVtYmVyIHRvIDE/ICovCiAJcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMCk7Ci0vLwlyZWcgPSBhZ254X3NldF9iaXRzKFNFUVVFTkNFX05VTUJFUiwgU0VRVUVOQ0VfTlVNQkVSX1NISUZULCAxKTsKKy8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoU0VRVUVOQ0VfTlVNQkVSLCBTRVFVRU5DRV9OVU1CRVJfU0hJRlQsIDEpOyAqLwogCXJlZyB8PSBhZ254X3NldF9iaXRzKE1BQ19IRFJfTEVOLCBNQUNfSERSX0xFTl9TSElGVCwgdHhfaW5mby0+aGRyX2xlbik7CiAJdHhoZHItPnJlZzEgPSBjcHVfdG9fYmUzMihyZWcpOwogCS8qIFNldCB0aGUgYWdueF9oZHIncyBNQUMgaGVhZGVyICovCiAJbWVtY3B5KHR4aGRyLT5tYWNfaGRyLCAmdHhfaW5mby0+aGRyLCB0eF9pbmZvLT5oZHJfbGVuKTsKIAogCXJlZyA9IGFnbnhfc2V0X2JpdHMoQUNLLCBBQ0tfU0hJRlQsIDEpOwotLy8JcmVnID0gYWdueF9zZXRfYml0cyhBQ0ssIEFDS19TSElGVCwgMCk7CisvKglyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAwKTsgKi8KIAlyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMCk7Ci0vLwlyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMSk7CisvKglyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMSk7ICovCiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkVMQVksIFJFTEFZX1NISUZULCAwKTsKIAlyZWcgfD0gYWdueF9zZXRfYml0cyhUTSwgVE1fU0hJRlQsIDApOwogCXR4aGRyLT5yZWcwID0gY3B1X3RvX2JlMzIocmVnKTsKIAogCS8qIFNldCB0aGUgbG9uZyBhbmQgc2hvcnQgcmV0cnkgbGltaXRzICovCi0gCXR4aGRyLT50eC5zaG9ydF9yZXRyeV9saW1pdCA9IHR4X2luZm8tPnR4aS0+Y29udHJvbC5yYXRlc1swXS5jb3VudDsKLSAJdHhoZHItPnR4LmxvbmdfcmV0cnlfbGltaXQgPSB0eF9pbmZvLT50eGktPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7CisJdHhoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OworCXR4aGRyLT50eC5sb25nX3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwogCiAJLyogRklYTUUgKi8KIAlsZW4gPSB0eF9pbmZvLT5za2ItPmxlbiAtIHNpemVvZigqdHhoZHIpICsgdHhfaW5mby0+aGRyX2xlbiArIEZDU19MRU47CkBAIC02NTIsMjMgKzY2OCwyMyBAQAogCWlmICh0eGktPmNvbnRyb2wucmF0ZXNbMF0uaWR4IDwgMCkgewogCQkvKiBGb3IgQiBtb2RlIFNob3J0IFByZWFtYmxlICovCiAJCXJlZyA9IGFnbnhfc2V0X2JpdHMoUEhZX01PREUsIFBIWV9NT0RFX1NISUZULCBBR05YX01PREVfODAyMTFCX1NIT1JUKTsKLS8vCQljb250cm9sLT50eF9yYXRlID0gLWNvbnRyb2wtPnR4X3JhdGU7CisvKgkJY29udHJvbC0+dHhfcmF0ZSA9IC1jb250cm9sLT50eF9yYXRlOyAqLwogCX0gZWxzZQogCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExRyk7Ci0vLwkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUJfTE9ORyk7CisvKgkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUJfTE9ORyk7ICovCiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoU0lHTkFMLCBTSUdOQUxfU0hJRlQsIDB4Qik7CiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkFURSwgUkFURV9TSElGVCwgMHhCKTsKLS8vCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMTUpOworLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoUE9XRVJfTEVWRUwsIFBPV0VSX0xFVkVMX1NISUZULCAxNSk7ICovCiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoUE9XRVJfTEVWRUwsIFBPV0VSX0xFVkVMX1NISUZULCAyMCk7CiAJLyogaWYgcmF0ZSA8IDExTSBzZXQgaXQgdG8gMCAqLwogCXJlZyB8PSBhZ254X3NldF9iaXRzKE5VTV9UUkFOU01JVFRFUlMsIE5VTV9UUkFOU01JVFRFUlNfU0hJRlQsIDEpOwotLy8JcmVnIHw9IGFnbnhfc2V0X2JpdHMoRURDRiwgRURDRl9TSElGVCwgMSk7Ci0vLwlyZWcgfD0gYWdueF9zZXRfYml0cyhUSUZTLCBUSUZTX1NISUZULCAxKTsKKy8qCXJlZyB8PSBhZ254X3NldF9iaXRzKEVEQ0YsIEVEQ0ZfU0hJRlQsIDEpOyAqLworLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVElGUywgVElGU19TSElGVCwgMSk7ICovCiAKIAlwb3dlci5yZWcgPSByZWc7Ci0vLwlwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOworLyoJcG93ZXIucmVnID0gY3B1X3RvX2xlMzIocmVnKTsgKi8KIAotLy8Jc2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIExPQ0FMX1NUQUlEKTsKKy8qCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBMT0NBTF9TVEFJRCk7ICovCiAJc2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIEJTU0lEX1NUQUlEKTsKIH0KIApAQCAtNzU5LDI0ICs3NzUsMjQgQEAKIAogCXR4bV9wb3dlcl9zZXQocHJpdiwgdHhpKTsKIAotLyogCWRvIHsgKi8KLS8qIAkJaW50IGo7ICovCi0vKiAJCXNpemVfdCBsZW47ICovCi0vKiAJCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW4gKyBoZHJfaW5mby0+aGRyX2xlbjsgICovCi0vKiAvLwkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfZGVzYyhoZHJfZGVzYyk7ICovCi0vKiAJCQlhZ254X3ByaW50X2Rlc2MoZnJhZ19kZXNjKTsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilza2ItPmRhdGEpOyAqLwotLyogCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyogCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyogCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qIAkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBMT0NBTF9TVEFJRCwgaik7ICovCi0vKiAJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKiAJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKiAJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotLyogCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCBqKTsgKi8KLS8qIAkJCS8vCX0gKi8KLS8qIAl9IHdoaWxlICgwKTsgKi8KKy8qCWRvIHsgKi8KKy8qCQlpbnQgajsgKi8KKy8qCQlzaXplX3QgbGVuOyAqLworLyoJCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW4gKyBoZHJfaW5mby0+aGRyX2xlbjsgICovCisvKgkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KKy8qCQkJYWdueF9wcmludF9kZXNjKGhkcl9kZXNjKTsgKi8KKy8qCQkJYWdueF9wcmludF9kZXNjKGZyYWdfZGVzYyk7ICovCisvKgkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilza2ItPmRhdGEpOyAqLworLyoJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCisvKgkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KKy8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KKy8qCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCBqKTsgKi8KKy8qCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLworLyoJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCisvKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCisvKgkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7ICovCisvKgkJCX0gKi8KKy8qCX0gd2hpbGUgKDApOyAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC03ODcsNyArODAzLDcgQEAKIAkJcmVnID0gKGlvcmVhZDMyKHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYTUNUTCkpOwogCQlyZWcgfD0gMHg4OwogCQlpb3dyaXRlMzIoKHJlZyksIHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYTUNUTCk7Ci0JfXdoaWxlICgwKTsKKwl9IHdoaWxlICgwKTsKIAogCS8qIFRyaWdnZXIgVFhEICovCiAJZG8gewpAQCAtNzk1LDcgKzgxMSw3IEBACiAJCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpKTsKIAkJcmVnIHw9IDB4ODsKIAkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpOwotCX13aGlsZSAoMCk7CisJfSB3aGlsZSAoMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgwNywxMiArODIzLDEyIEBACiAJaWYgKHR4X3BhY2tldF9jaGVjayhza2IpKQogCQlyZXR1cm4gMDsKIAotLyogCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBUWF9QQUNLRVQ6ICIsIERVTVBfUFJFRklYX05PTkUsICovCi0vKiAJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOyAqLworLyoJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX1BBQ0tFVDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KKy8qCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsgKi8KIAotICAgICAgICBmY3RsID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopc2tiLT5kYXRhKSk7CisJZmN0bCA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKXNrYi0+ZGF0YSkpOwogCi0JaWYgKCAoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgKQorCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKIAkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eGQpOwogCWVsc2UKIAkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eG0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvYWx0cGNpZWNoZG1hLmMKaW5kZXggZjUxNjE0MC4uM2U0MWUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL2FsdHBjaWVjaGRtYS5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMzEzLDE1ICszMTIsMTYgQEAKIAkJCWNvbnRpbnVlOwogCQkvKiBkbyBub3QgbWFwIEJBUnMgd2l0aCBhZGRyZXNzIDAgKi8KIAkJaWYgKCFiYXJfc3RhcnQgfHwgIWJhcl9lbmQpIHsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJCQVIgIyVkIGlzIG5vdCBwcmVzZW50PyFcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBUiAjJWQgaXMgbm90IHByZXNlbnQ/IVxuIiwgaSk7CiAJCQlyYyA9IC0xOwogCQkJZ290byBmYWlsOwogCQl9CiAJCWJhcl9sZW5ndGggPSBiYXJfZW5kIC0gYmFyX3N0YXJ0ICsgMTsKIAkJLyogQkFSIGxlbmd0aCBpcyBsZXNzIHRoYW4gZHJpdmVyIHJlcXVpcmVzPyAqLwogCQlpZiAoYmFyX2xlbmd0aCA8IGJhcl9taW5fbGVuW2ldKSB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiQkFSICMlZCBsZW5ndGggPSAlbHUgYnl0ZXMgYnV0IGRyaXZlciAiCi0gICAgICAgICAgICAicmVxdWlyZXMgYXQgbGVhc3QgJWx1IGJ5dGVzXG4iLCBpLCBiYXJfbGVuZ3RoLCBiYXJfbWluX2xlbltpXSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQkFSICMlZCBsZW5ndGggPSAlbHUgYnl0ZXMgYnV0IGRyaXZlciAiCisJCQkicmVxdWlyZXMgYXQgbGVhc3QgJWx1IGJ5dGVzXG4iLAorCQkJaSwgYmFyX2xlbmd0aCwgYmFyX21pbl9sZW5baV0pOwogCQkJcmMgPSAtMTsKIAkJCWdvdG8gZmFpbDsKIAkJfQpAQCAtMzMzLDggKzMzMyw4IEBACiAJCQlyYyA9IC0xOwogCQkJZ290byBmYWlsOwogCQl9Ci0gICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJCQVJbJWRdIG1hcHBlZCBhdCAweCVwIHdpdGggbGVuZ3RoICVsdSgvJWx1KS5cbiIsIGksCi0JCQlhcGUtPmJhcltpXSwgYmFyX21pbl9sZW5baV0sIGJhcl9sZW5ndGgpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQkFSWyVkXSBtYXBwZWQgYXQgMHglcCB3aXRoIGxlbmd0aCAlbHUoLyVsdSkuXG4iLCBpLAorCQlhcGUtPmJhcltpXSwgYmFyX21pbl9sZW5baV0sIGJhcl9sZW5ndGgpOwogCX0KIAkvKiBzdWNjZXNmdWxseSBtYXBwZWQgYWxsIHJlcXVpcmVkIEJBUiByZWdpb25zICovCiAJcmMgPSAwOwpAQCAtNDI3LDExICs0MjcsMTMgQEAKIAkJZG1hX2FkZHJfdCBuZXh0ID0gc2dfZG1hX2FkZHJlc3MoJnNnbFtpICsgMV0pOwogCQkvKiBsZW5ndGggb2YgdGhpcyBlbnRyeSBpICovCiAJCWxlbiA9IHNnX2RtYV9sZW4oJnNnbFtpXSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlMDRkOiBhZGRyPTB4JTA4eCBsZW5ndGg9MHglMDh4XG4iLCBpLCBhZGRyLCBsZW4pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJTA0ZDogYWRkcj0weCVMeCBsZW5ndGg9MHglMDh4XG4iLCBpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBsZW4pOwogCQkvKiBlbnRyeSBpICsgMSBpcyBub24tY29udGlndW91cyB3aXRoIGVudHJ5IGk/ICovCiAJCWlmIChuZXh0ICE9IGFkZHIgKyBsZW4pIHsKIAkJCS8qIFRPRE8gY3JlYXRlIGVudHJ5IGhlcmUgKHdlIGNvdWxkIG92ZXJ3cml0ZSBpKSAqLwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiU0ZDogY29udF9hZGRyPTB4JTA4eCBjb250X2xlbj0weCUwOHhcbiIsIGosIGNvbnRfYWRkciwgY29udF9sZW4pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiU0ZDogY29udF9hZGRyPTB4JUx4IGNvbnRfbGVuPTB4JTA4eFxuIiwgaiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbnRfYWRkciwgY29udF9sZW4pOwogCQkJLyogc2V0IGRlc2NyaXB0b3IgZm9yIGNvbnRpZ3VvdXMgdHJhbnNmZXIgKi8KIAkJCWFwZV9jaGRtYV9kZXNjX3NldCgmZGVzY1tqXSwgY29udF9hZGRyLCBlcF9hZGRyLCBjb250X2xlbik7CiAJCQkvKiBuZXh0IGVuZCBwb2ludCBtZW1vcnkgYWRkcmVzcyAqLwpAQCAtNDQ3LDggKzQ0OSwxMCBAQAogCQlhZGRyID0gbmV4dDsKIAl9CiAJLyogVE9ETyBjcmVhdGUgZW50cnkgaGVyZSAgKHdlIGNvdWxkIG92ZXJ3cml0ZSBpKSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlMDRkOiBhZGRyPTB4JTA4eCBsZW5ndGg9MHglMDh4XG4iLCBpLCBhZGRyLCBsZW4pOwotCXByaW50ayhLRVJOX0RFQlVHICIlNGQ6IGNvbnRfYWRkcj0weCUwOHggbGVuZ3RoPTB4JTA4eFxuIiwgaiwgY29udF9hZGRyLCBjb250X2xlbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiUwNGQ6IGFkZHI9MHglTHggbGVuZ3RoPTB4JTA4eFxuIiwgaSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBsZW4pOworCXByaW50ayhLRVJOX0RFQlVHICIlNGQ6IGNvbnRfYWRkcj0weCVMeCBsZW5ndGg9MHglMDh4XG4iLCBqLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbnRfYWRkciwgY29udF9sZW4pOwogCWorKzsKIAlyZXR1cm4gajsKIH0KQEAgLTQ2NywxNSArNDcxLDE0IEBACiAJCX0gZWxzZSB7CiAJCQlmYWlsKys7CiAJCQkvKiBzaG93IHRoZSBmaXJzdCBmZXcgbWlzY29tcGFyZXMgKi8KLQkJCWlmIChmYWlsIDwgMTApIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiWyVwXSA9IDB4JTA4eCAhPSBbJXBdID0gMHglMDh4ID8hXG4iLCBwLCAqcCwgcSwgKnEpOwotICAgICAgICAgICAgLyogYnV0IHN0b3AgYWZ0ZXIgYSB3aGlsZSAqLwotICAgICAgICAgICAgfSBlbHNlIGlmIChmYWlsID09IDEwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIi0tLW1vcmUgZXJyb3JzIGZvbGxvdyEgbm90IHByaW50ZWQtLS1cbiIpOwotCQkgIAl9IGVsc2UgeworCQkJaWYgKGZhaWwgPCAxMCkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiWyVwXSA9IDB4JTA4eCAhPSBbJXBdID0gMHglMDh4ID8hXG4iLCBwLCAqcCwgcSwgKnEpOworCQkJCS8qIGJ1dCBzdG9wIGFmdGVyIGEgd2hpbGUgKi8KKwkJCWVsc2UgaWYgKGZhaWwgPT0gMTApCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIi0tLW1vcmUgZXJyb3JzIGZvbGxvdyEgbm90IHByaW50ZWQtLS1cbiIpOworCQkJZWxzZQogCQkJCS8qIHN0b3AgY29tcGFyZSBhZnRlciB0aGlzIG1hbnkgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJCQlicmVhazsKIAkJfQogCQlwKys7CiAJCXErKzsKQEAgLTUyOCw3ICs1MzEsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJhcGUtPnRhYmxlX3ZpcnQgPSAweCVwLlxuIiwgYXBlLT50YWJsZV92aXJ0KTsKIAogCWlmICghd3JpdGVfaGVhZGVyIHx8ICFyZWFkX2hlYWRlciB8fCAhYXBlLT50YWJsZV92aXJ0KQotICAgICAgICBnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDsKIAogCS8qIGFsbG9jYXRlIGFuZCBtYXAgY29oZXJlbnRseS1jYWNoZWQgbWVtb3J5IGZvciBhIERNQS1hYmxlIGJ1ZmZlciAqLwogCS8qIEBzZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dCwgbmVhciBsaW5lIDMxOCAqLwpAQCAtNTY1LDkgKzU2OCw4IEBACiAJLyogcmVhZCA4MTkyIGJ5dGVzIGZyb20gUkMgYnVmZmVyIHRvIEVQIGFkZHJlc3MgNDA5NiAqLwogCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW25dLCBidWZmZXJfYnVzLCA0MDk2LCAyICogUEFHRV9TSVpFKTsKICNpZiAxCi0JZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKQogCQlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tpXSwgYnVmZmVyX2J1cywgNDA5NiwgMiAqIFBBR0VfU0laRSk7Ci0JfQogCS8qIGluZGV4IG9mIGxhc3QgZGVzY3JpcHRvciAqLwogCW4gPSBpIC0gMTsKICNlbmRpZgpAQCAtNjQ3LDcgKzY0OSw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJFUExBU1QgPSAldSwgbiA9ICVkXG4iLCBlcGxhc3QsIG4pOwogCQlpZiAoZXBsYXN0ID09IG4pIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJET05FXG4iKTsKLSAgICAgICAgICAgIC8qIHByaW50IElSUSBjb3VudCBiZWZvcmUgdGhlIHRyYW5zZmVyICovCisJCQkvKiBwcmludCBJUlEgY291bnQgYmVmb3JlIHRoZSB0cmFuc2ZlciAqLwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiNJUlFzIGR1cmluZyB0cmFuc2ZlcjogJWRcbiIsIGFwZS0+aXJxX2NvdW50IC0gaXJxX2NvdW50KTsKIAkJCWJyZWFrOwogCQl9CkBAIC02NjEsOSArNjYzLDkgQEAKIAluID0gMDsKIAlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tuXSwgYnVmZmVyX2J1cyArIDgxOTIsIDQwOTYsIDIgKiBQQUdFX1NJWkUpOwogI2lmIDEKLQlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspCiAJCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW2ldLCBidWZmZXJfYnVzICsgODE5MiwgNDA5NiwgMiAqIFBBR0VfU0laRSk7Ci0JfQorCiAJLyogaW5kZXggb2YgbGFzdCBkZXNjcmlwdG9yICovCiAJbiA9IGkgLSAxOwogI2VuZGlmCkBAIC02OTEsNyArNjkzLDcgQEAKIAl3ID0gKHUzMikobiArIDEpOwogCS8qIGVuYWJsZSB1cGRhdGVzIG9mIGVwbGFzdCBmb3IgZWFjaCBkZXNjcmlwdG9yIGNvbXBsZXRpb24gKi8KIAl3IHw9ICh1MzIpKDFVTCA8PCAxOCkvKmdsb2JhbCBFUExBU1RfRU4qLzsKLSNpZiAwIC8vIHRlc3QgdmFyaWFibGUsIG1ha2UgYSBtb2R1bGUgb3B0aW9uIGxhdGVyCisjaWYgMCAgIC8qIHRlc3QgdmFyaWFibGUsIG1ha2UgYSBtb2R1bGUgb3B0aW9uIGxhdGVyICovCiAJLyogZW5hYmxlIE1TSSBmb3IgZWFjaCBkZXNjcmlwdG9yIGNvbXBsZXRpb24gKi8KIAlpZiAoYXBlLT5tc2lfZW5hYmxlZCkKIAkJdyB8PSAoMVVMIDw8IDE3KS8qZ2xvYmFsIE1TSSovOwpAQCAtNzE1LDcgKzcxNyw3IEBACiAJLyoqIG1lbW9yeSB3cml0ZSBiYXJyaWVyICovCiAJd21iKCk7CiAJLyoqIGR1bW15IHJlYWQgdG8gZmx1c2ggcG9zdGVkIHdyaXRlcyAqLwotCS8vKHZvaWQpaW9yZWFkMzIoKTsKKwkvKiAodm9pZCkgaW9yZWFkMzIoKTsgKi8KIAogCXByaW50ayhLRVJOX0RFQlVHICJQT0xMIEZPUiBXUklURTpcbiIpOwogCS8qIHBvbGwgZm9yIGNvbXBsZXRpb24sIDEwMDAgdGltZXMgMSBtaWxsaXNlY29uZCAqLwpAQCAtODQ0LDcgKzg0Niw3IEBACiAJfQogCWFwZS0+Z290X3JlZ2lvbnMgPSAxOwogCi0jaWYgMSAvLyBAdG9kbyBGb3Igbm93LCBkaXNhYmxlIDY0LWJpdCwgYmVjYXVzZSBJIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgKERBQyEpCisjaWYgMSAgIC8qIEB0b2RvIEZvciBub3csIGRpc2FibGUgNjQtYml0LCBiZWNhdXNlIEkgZG8gbm90IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyAoREFDISkgKi8KIAkvKiBxdWVyeSBmb3IgRE1BIHRyYW5zZmVyICovCiAJLyogQHNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0ICovCiAJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BXzY0QklUX01BU0spKSB7CkBAIC05NDcsNyArOTQ5LDggQEAKIAlzdHJ1Y3QgYXBlX2RldiAqYXBlOwogCXByaW50ayhLRVJOX0RFQlVHICJyZW1vdmUoMHglcClcbiIsIGRldik7CiAJaWYgKChkZXYgPT0gMCkgfHwgKGRldi0+ZGV2LmRyaXZlcl9kYXRhID09IDApKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJyZW1vdmUoZGV2ID0gMHglcCkgZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSAweCVwXG4iLCBkZXYsIGRldi0+ZGV2LmRyaXZlcl9kYXRhKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlbW92ZShkZXYgPSAweCVwKSBkZXYtPmRldi5kcml2ZXJfZGF0YSA9IDB4JXBcbiIsCisJCQlkZXYsIChkZXY/IGRldi0+ZGV2LmRyaXZlcl9kYXRhOiBOVUxMKSk7CiAJCXJldHVybjsKIAl9CiAJYXBlID0gKHN0cnVjdCBhcGVfZGV2ICopZGV2LT5kZXYuZHJpdmVyX2RhdGE7CkBAIC0xMDQ4LDEwICsxMDUxLDkgQEAKIAlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiX3dyaXRlKGJ1Zj0weCVwLCBjb3VudD0lbGxkLCBwb3M9JWxsdSlcbiIsCiAJCWJ1ZiwgKHM2NCljb3VudCwgKHU2NCkqcG9zKTsKIAkvKiBUT0RPIHRyYW5zZmVyIGJvdW5kYXJpZXMgYXQgUEFHRV9TSVpFIGdyYW51bGFyaXR5ICovCi0Jd2hpbGUgKHJlbWFpbmluZyA+IDApCi0JeworCXdoaWxlIChyZW1haW5pbmcgPiAwKSB7CiAJCS8qIGxpbWl0IERNQSB0cmFuc2ZlciBzaXplICovCi0JCXRyYW5zZmVyX2xlbiA9IChyZW1haW5pbmcgPCBBUEVfQ0hETUFfTUFYX1RSQU5TRkVSX0xFTik/IHJlbWFpbmluZzoKKwkJdHJhbnNmZXJfbGVuID0gKHJlbWFpbmluZyA8IEFQRV9DSERNQV9NQVhfVFJBTlNGRVJfTEVOKSA/IHJlbWFpbmluZyA6CiAJCQlBUEVfQ0hETUFfTUFYX1RSQU5TRkVSX0xFTjsKIAkJLyogZ2V0IGFsbCB1c2VyIHNwYWNlIGJ1ZmZlciBwYWdlcyBhbmQgY3JlYXRlIGEgc2NhdHRlcmdhdGhlciBsaXN0ICovCiAJCXNnbV9tYXBfdXNlcl9wYWdlcyhhcGUtPnNnbSwgdHJhbnNmZXJfYWRkciwgdHJhbnNmZXJfbGVuLCAwLypyZWFkIGZyb20gdXNlcnNwYWNlKi8pOwpAQCAtMTA4NSwxMiArMTA4NywxMiBAQAogLyoKICAqIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBvcGVyYXRpb25zCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNnX2ZvcHMgPSB7Ci0gIC5vd25lciA9IFRISVNfTU9EVUxFLAotICAub3BlbiA9IHNnX29wZW4sCi0gIC5yZWxlYXNlID0gc2dfY2xvc2UsCi0gIC5yZWFkID0gc2dfcmVhZCwKLSAgLndyaXRlID0gc2dfd3JpdGUsCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gc2dfb3BlbiwKKwkucmVsZWFzZSA9IHNnX2Nsb3NlLAorCS5yZWFkID0gc2dfcmVhZCwKKwkud3JpdGUgPSBzZ193cml0ZSwKIH07CiAKIC8qIHNnX2luaXQoKSAtIEluaXRpYWxpemUgY2hhcmFjdGVyIGRldmljZQpAQCAtMTE1OCwxMiArMTE2MCwxMiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBhbHRlcmFwY2llY2hkbWFfaW5pdCh2b2lkKQogewotICBpbnQgcmMgPSAwOworCWludCByYyA9IDA7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIiBpbml0KCksIGJ1aWx0IGF0ICIgX19EQVRFX18gIiAiIF9fVElNRV9fICJcbiIpOwogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFBDSSBidXMgZHJpdmVyICovCiAJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsKIAlpZiAocmMgPCAwKQotCSAgcmV0dXJuIHJjOworCQlyZXR1cm4gcmM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMKaW5kZXggNzU4MTMxYy4uNzllOTBmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMKQEAgLTI2NDksMTQgKzI2NDksMjIgQEAKIHsKIAlzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlpZiAoYmluZGVyX2RlYnVnX21hc2sgJiBCSU5ERVJfREVCVUdfT1BFTl9DTE9TRSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmluZGVyOiAlZCBvcGVuIHZtIGFyZWEgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLCBwcm9jLT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAvIFNaXzFLLCB2bWEtPnZtX2ZsYWdzLCBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSk7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJiaW5kZXI6ICVkIG9wZW4gdm0gYXJlYSAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsCisJCQlwcm9jLT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgLyBTWl8xSywgdm1hLT52bV9mbGFncywKKwkJCSh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKTsKIAlkdW1wX3N0YWNrKCk7CiB9CiBzdGF0aWMgdm9pZCBiaW5kZXJfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCWlmIChiaW5kZXJfZGVidWdfbWFzayAmIEJJTkRFUl9ERUJVR19PUEVOX0NMT1NFKQotCQlwcmludGsoS0VSTl9JTkZPICJiaW5kZXI6ICVkIGNsb3NlIHZtIGFyZWEgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLCBwcm9jLT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAvIFNaXzFLLCB2bWEtPnZtX2ZsYWdzLCBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSk7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJiaW5kZXI6ICVkIGNsb3NlIHZtIGFyZWEgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLAorCQkJcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCSh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gU1pfMUssIHZtYS0+dm1fZmxhZ3MsCisJCQkodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSk7CiAJcHJvYy0+dm1hID0gTlVMTDsKIH0KIApAQCAtMjY3Nyw3ICsyNjg1LDExIEBACiAJCXZtYS0+dm1fZW5kID0gdm1hLT52bV9zdGFydCArIFNaXzRNOwogCiAJaWYgKGJpbmRlcl9kZWJ1Z19tYXNrICYgQklOREVSX0RFQlVHX09QRU5fQ0xPU0UpCi0JCXByaW50ayhLRVJOX0lORk8gImJpbmRlcl9tbWFwOiAlZCAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsIHByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gU1pfMUssIHZtYS0+dm1fZmxhZ3MsIHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImJpbmRlcl9tbWFwOiAlZCAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsCisJCQlwcm9jLT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgLyBTWl8xSywgdm1hLT52bV9mbGFncywKKwkJCSh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKTsKIAogCWlmICh2bWEtPnZtX2ZsYWdzICYgRk9SQklEREVOX01NQVBfRkxBR1MpIHsKIAkJcmV0ID0gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvcmFtX2NvbnNvbGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3JhbV9jb25zb2xlLmMKaW5kZXggNjQzYWM1Yy4uMzM3NWMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvcmFtX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9yYW1fY29uc29sZS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkJYnVmZmVyX3NpemUgLSBzaXplb2Yoc3RydWN0IHJhbV9jb25zb2xlX2J1ZmZlcik7CiAKIAlpZiAocmFtX2NvbnNvbGVfYnVmZmVyX3NpemUgPiBidWZmZXJfc2l6ZSkgewotCQlwcl9lcnIoInJhbV9jb25zb2xlOiBidWZmZXIgJXAsIGludmFsaWQgc2l6ZSAlZCwgZGF0YXNpemUgJWRcbiIsCisJCXByX2VycigicmFtX2NvbnNvbGU6IGJ1ZmZlciAlcCwgaW52YWxpZCBzaXplICV6dSwgZGF0YXNpemUgJXp1XG4iLAogCQkgICAgICAgYnVmZmVyLCBidWZmZXJfc2l6ZSwgcmFtX2NvbnNvbGVfYnVmZmVyX3NpemUpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMzUsOCArMjM1LDggQEAKIAkJCQkJCUVDQ19CTE9DS19TSVpFKSArIDEpICogRUNDX1NJWkU7CiAKIAlpZiAocmFtX2NvbnNvbGVfYnVmZmVyX3NpemUgPiBidWZmZXJfc2l6ZSkgewotCQlwcl9lcnIoInJhbV9jb25zb2xlOiBidWZmZXIgJXAsIGludmFsaWQgc2l6ZSAlZCwgIgotCQkgICAgICAgIm5vbi1lY2MgZGF0YXNpemUgJWRcbiIsCisJCXByX2VycigicmFtX2NvbnNvbGU6IGJ1ZmZlciAlcCwgaW52YWxpZCBzaXplICV6dSwgIgorCQkgICAgICAgIm5vbi1lY2MgZGF0YXNpemUgJXp1XG4iLAogCQkgICAgICAgYnVmZmVyLCBidWZmZXJfc2l6ZSwgcmFtX2NvbnNvbGVfYnVmZmVyX3NpemUpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMjIsNyArMzIyLDcgQEAKIAl9CiAJYnVmZmVyX3NpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwogCXN0YXJ0ID0gcmVzLT5zdGFydDsKLQlwcmludGsoS0VSTl9JTkZPICJyYW1fY29uc29sZTogZ290IGJ1ZmZlciBhdCAleCwgc2l6ZSAleFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJyYW1fY29uc29sZTogZ290IGJ1ZmZlciBhdCAlengsIHNpemUgJXp4XG4iLAogCSAgICAgICBzdGFydCwgYnVmZmVyX3NpemUpOwogCWJ1ZmZlciA9IGlvcmVtYXAocmVzLT5zdGFydCwgYnVmZmVyX3NpemUpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9hc3VzX29sZWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMKaW5kZXggNjY2YTE4Ni4uMDRkZGU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9hc3VzX29sZWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL2FzdXNfb2xlZC5jCkBAIC01NiwxMCArNTYsMTAgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQXN1cyBPTEVEIERyaXZlciB2IiBBU1VTX09MRURfVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgKm9sZWRfY2xhc3MgPSAwOwotc3RhdGljIGludCBvbGVkX251bSA9IDA7CitzdGF0aWMgc3RydWN0IGNsYXNzICpvbGVkX2NsYXNzOworc3RhdGljIGludCBvbGVkX251bTsKIAotc3RhdGljIHVpbnQgc3RhcnRfb2ZmID0gMDsKK3N0YXRpYyB1aW50IHN0YXJ0X29mZjsKIAogbW9kdWxlX3BhcmFtKHN0YXJ0X29mZiwgdWludCwgMDY0NCk7CiAKQEAgLTgwLDIwICs4MCwyMCBAQAogfTsKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzI2KSB9LCAvLyBBc3VzIEcxL0cyIChhbmQgdmFyaWFudHMpCiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzViKSB9LCAvLyBBc3VzIEc1MFYgKGFuZCBwb3NzaWJseSBvdGhlcnMgLSBHNzA/IEc3MT8pCiAJeyB9LAogfTsKIAogLyogcGFyYW1ldGVycyBvZiBzcGVjaWZpYyBkZXZpY2VzICovCi1zdGF0aWMgc3RydWN0IG9sZWRfZGV2X2Rlc2Nfc3RyIG9sZWRfZGV2X2Rlc2NfdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IG9sZWRfZGV2X2Rlc2Nfc3RyIG9sZWRfZGV2X2Rlc2NfdGFibGVbXSA9IHsKIAl7IDB4MGIwNSwgMHgxNzI2LCAxMjgsIFBBQ0tfTU9ERV9HMSwgIkcxL0cyIiB9LAogCXsgMHgwYjA1LCAweDE3NWIsIDI1NiwgUEFDS19NT0RFX0c1MCwgIkc1MCIgfSwKIAl7IH0sCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKICNkZWZpbmUgU0VUVVBfUEFDS0VUX0hFQURFUihwYWNrZXQsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQsIHZhbDUsIHZhbDYsIHZhbDcpIFwKIAlkbyB7CQkJCQlcCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJcGFja2V0LT5oZWFkZXIudmFsdWU2ID0gdmFsNTsJCVwKIAkJcGFja2V0LT5oZWFkZXIudmFsdWU3ID0gdmFsNjsJCVwKIAkJcGFja2V0LT5oZWFkZXIudmFsdWU4ID0gdmFsNzsJCVwKLQl9IHdoaWxlKDApOworCX0gd2hpbGUgKDApOwogCiBzdHJ1Y3QgYXN1c19vbGVkX2hlYWRlciB7CiAJdWludDhfdAkJbWFnaWMxOwpAQCAtMTYwLDEwICsxNjAsMTIgQEAKIAogCVNFVFVQX1BBQ0tFVF9IRUFERVIocGFja2V0LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwKTsKIAotCWlmIChlbmFibCkgcGFja2V0LT5iaXRtYXBbMF0gPSAweGFmOwotCWVsc2UgcGFja2V0LT5iaXRtYXBbMF0gPSAweGFlOworCWlmIChlbmFibCkKKwkJcGFja2V0LT5iaXRtYXBbMF0gPSAweGFmOworCWVsc2UKKwkJcGFja2V0LT5iaXRtYXBbMF0gPSAweGFlOwogCi0JZm9yIChhPTA7IGE8MTsgYSsrKSB7CisJZm9yIChhID0gMDsgYSA8IDE7IGErKykgewogCQlyZXR2YWwgPSB1c2JfYnVsa19tc2cob2Rldi0+dWRldiwKIAkJCXVzYl9zbmRidWxrcGlwZShvZGV2LT51ZGV2LCAyKSwKIAkJCXBhY2tldCwKQEAgLTI1Miw3ICsyNTQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2VuZF9wYWNrZXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBhc3VzX29sZWRfcGFja2V0ICpwYWNrZXQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sIGNoYXIgKmJ1ZiwgdWludDhfdCBiMSwgdWludDhfdCBiMiwgdWludDhfdCBiMywgdWludDhfdCBiNCwgdWludDhfdCBiNSwgdWludDhfdCBiNil7CitzdGF0aWMgdm9pZCBzZW5kX3BhY2tldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGFzdXNfb2xlZF9wYWNrZXQgKnBhY2tldCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbiwgY2hhciAqYnVmLCB1aW50OF90IGIxLCB1aW50OF90IGIyLCB1aW50OF90IGIzLCB1aW50OF90IGI0LCB1aW50OF90IGI1LCB1aW50OF90IGI2KSB7CiAJaW50IHJldHZhbDsKIAlpbnQgYWN0X2xlbjsKIApAQCAtMjk0LDcgKzI5Niw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAob2Rldi0+cGFja19tb2RlPT1QQUNLX01PREVfRzEpeworCWlmIChvZGV2LT5wYWNrX21vZGUgPT0gUEFDS19NT0RFX0cxKSB7CiAJCS8vIFdoZW4gc2VuZGluZyByb2xsLW1vZGUgZGF0YSB0aGUgZGlzcGxheSB1cGRhdGVkIG9ubHkgZmlyc3QgcGFja2V0LgogCQkvLyBJIGhhdmUgbm8gaWRlYSB3aHksIGJ1dCB3aGVuIHN0YXRpYyBwaWN0dXJlIGlzIHNlbmQganVzdCBiZWZvcmUKIAkJLy8gcm9sbGluZyBwaWN0dXJlIC0gZXZlcnl0aGluZyB3b3JrcyBmaW5lLgpAQCAtMzA4LDcgKzMxMCw3IEBACiAJCXNlbmRfcGFja2V0cyhvZGV2LT51ZGV2LCBwYWNrZXQsIG9kZXYtPmJ1Ziwgb2Rldi0+cGljX21vZGUsIHBhY2tldF9udW0pOwogCX0KIAllbHNlCi0JaWYgKG9kZXYtPnBhY2tfbW9kZT09UEFDS19NT0RFX0c1MCl7CisJaWYgKG9kZXYtPnBhY2tfbW9kZSA9PSBQQUNLX01PREVfRzUwKSB7CiAJCXNlbmRfcGFja2V0c19nNTAob2Rldi0+dWRldiwgcGFja2V0LCBvZGV2LT5idWYpOwogCX0KIApAQCAtMzI2LDcgKzMyOCw3IEBACiAJCQl4ICs9IG9kZXYtPnhfc2hpZnQ7CiAJCQl5ICs9IG9kZXYtPnlfc2hpZnQ7CiAKLQkJCXN3aXRjaChvZGV2LT5wYWNrX21vZGUpCisJCQlzd2l0Y2ggKG9kZXYtPnBhY2tfbW9kZSkKIAkJCXsKIAkJCQljYXNlIFBBQ0tfTU9ERV9HMToKIAkJCQkJLy8gaSA9ICh4LzEyOCkqNjQwICsgMTI3IC0geCArICh5LzgpKjEyODsKQEAgLTM3NywzMCArMzc5LDMyIEBACiB7CiAJc2l6ZV90IG9mZnMgPSAwLCBtYXhfb2ZmczsKIAotCWlmIChjb3VudCA8IDEpIHJldHVybiAwOworCWlmIChjb3VudCA8IDEpCisJCXJldHVybiAwOwogCi0JaWYgKHRvbG93ZXIoYnVmWzBdKSA9PSAnYicpeworCWlmICh0b2xvd2VyKGJ1ZlswXSkgPT0gJ2InKSB7CiAJICAgIC8vIGJpbmFyeSBtb2RlLCBzZXQgdGhlIGVudGlyZSBtZW1vcnkKIAogCSAgICBzaXplX3QgaTsKIAogCSAgICBvZGV2LT5idWZfc2l6ZSA9IChvZGV2LT5kZXZfd2lkdGggKiBBU1VTX09MRURfRElTUF9IRUlHSFQpIC8gODsKIAotCSAgICBpZiAob2Rldi0+YnVmKSBrZnJlZShvZGV2LT5idWYpOworCSAgICBpZiAob2Rldi0+YnVmKQorCQkgICAga2ZyZWUob2Rldi0+YnVmKTsKIAkgICAgb2Rldi0+YnVmID0ga21hbGxvYyhvZGV2LT5idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAkgICAgbWVtc2V0KG9kZXYtPmJ1ZiwgMHhmZiwgb2Rldi0+YnVmX3NpemUpOwogCi0JICAgIGZvciAoaT0xOyBpIDwgY291bnQgJiYgaTw9MzIqMzI7IGkrKyl7CisJICAgIGZvciAoaSA9IDE7IGkgPCBjb3VudCAmJiBpIDw9IDMyICogMzI7IGkrKykgewogCQlvZGV2LT5idWZbaS0xXSA9IGJ1ZltpXTsKIAkJb2Rldi0+YnVmX29mZnMgPSBpLTE7CiAJICAgIH0KIAotCSAgICBvZGV2LT53aWR0aD1vZGV2LT5kZXZfd2lkdGggLyA4OwotCSAgICBvZGV2LT5oZWlnaHQ9QVNVU19PTEVEX0RJU1BfSEVJR0hUOwotCSAgICBvZGV2LT54X3NoaWZ0PTA7Ci0JICAgIG9kZXYtPnlfc2hpZnQ9MDsKLQkgICAgb2Rldi0+bGFzdF92YWw9MDsKKwkgICAgb2Rldi0+d2lkdGggPSBvZGV2LT5kZXZfd2lkdGggLyA4OworCSAgICBvZGV2LT5oZWlnaHQgPSBBU1VTX09MRURfRElTUF9IRUlHSFQ7CisJICAgIG9kZXYtPnhfc2hpZnQgPSAwOworCSAgICBvZGV2LT55X3NoaWZ0ID0gMDsKKwkgICAgb2Rldi0+bGFzdF92YWwgPSAgMDsKIAogCSAgICBzZW5kX2RhdGEob2Rldik7CiAKQEAgLTQxNiw3ICs0MjAsNyBAQAogCQkJZ290byBlcnJvcl9oZWFkZXI7CiAJCX0KIAotCQlzd2l0Y2godG9sb3dlcihidWZbMV0pKSB7CisJCXN3aXRjaCAodG9sb3dlcihidWZbMV0pKSB7CiAJCQljYXNlIEFTVVNfT0xFRF9TVEFUSUM6CiAJCQljYXNlIEFTVVNfT0xFRF9ST0xMOgogCQkJY2FzZSBBU1VTX09MRURfRkxBU0g6CkBAIC00MzIsMjcgKzQzNiwzNiBAQAogCQkJaWYgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykgewogCQkJCXcgPSAxMCp3ICsgKGJ1ZltpXSAtICcwJyk7CiAKLQkJCQlpZiAodyA+IEFTVVNfT0xFRF9NQVhfV0lEVEgpIGdvdG8gZXJyb3Jfd2lkdGg7CisJCQkJaWYgKHcgPiBBU1VTX09MRURfTUFYX1dJRFRIKQorCQkJCQlnb3RvIGVycm9yX3dpZHRoOwogCQkJfQotCQkJZWxzZSBpZiAodG9sb3dlcihidWZbaV0pID09ICd4JykgYnJlYWs7Ci0JCQllbHNlIGdvdG8gZXJyb3Jfd2lkdGg7CisJCQllbHNlIGlmICh0b2xvd2VyKGJ1ZltpXSkgPT0gJ3gnKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWdvdG8gZXJyb3Jfd2lkdGg7CiAJCX0KIAogCQlmb3IgKCsraTsgaSA8IGNvdW50OyArK2kpIHsKIAkJCWlmIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpIHsKIAkJCQloID0gMTAqaCArIChidWZbaV0gLSAnMCcpOwogCi0JCQkJaWYgKGggPiBBU1VTX09MRURfRElTUF9IRUlHSFQpIGdvdG8gZXJyb3JfaGVpZ2h0OworCQkJCWlmIChoID4gQVNVU19PTEVEX0RJU1BfSEVJR0hUKQorCQkJCQlnb3RvIGVycm9yX2hlaWdodDsKIAkJCX0KLQkJCWVsc2UgaWYgKHRvbG93ZXIoYnVmW2ldKSA9PSAnPicpIGJyZWFrOwotCQkJZWxzZSBnb3RvIGVycm9yX2hlaWdodDsKKwkJCWVsc2UgaWYgKHRvbG93ZXIoYnVmW2ldKSA9PSAnPicpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJZ290byBlcnJvcl9oZWlnaHQ7CiAJCX0KIAotCQlpZiAodyA8IDEgfHwgdyA+IEFTVVNfT0xFRF9NQVhfV0lEVEgpIGdvdG8gZXJyb3Jfd2lkdGg7CisJCWlmICh3IDwgMSB8fCB3ID4gQVNVU19PTEVEX01BWF9XSURUSCkKKwkJCWdvdG8gZXJyb3Jfd2lkdGg7CiAKLQkJaWYgKGggPCAxIHx8IGggPiBBU1VTX09MRURfRElTUF9IRUlHSFQpIGdvdG8gZXJyb3JfaGVpZ2h0OworCQlpZiAoaCA8IDEgfHwgaCA+IEFTVVNfT0xFRF9ESVNQX0hFSUdIVCkKKwkJCWdvdG8gZXJyb3JfaGVpZ2h0OwogCi0JCWlmIChpID49IGNvdW50IHx8IGJ1ZltpXSAhPSAnPicpIGdvdG8gZXJyb3JfaGVhZGVyOworCQlpZiAoaSA+PSBjb3VudCB8fCBidWZbaV0gIT0gJz4nKQorCQkJZ290byBlcnJvcl9oZWFkZXI7CiAKIAkJb2ZmcyA9IGkrMTsKIApAQCAtNDY4LDcgKzQ4MSw4IEBACiAKIAkJb2Rldi0+YnVmX3NpemUgPSB3X21lbSAqIGhfbWVtIC8gODsKIAotCQlpZiAob2Rldi0+YnVmKSBrZnJlZShvZGV2LT5idWYpOworCQlpZiAob2Rldi0+YnVmKQorCQkJa2ZyZWUob2Rldi0+YnVmKTsKIAkJb2Rldi0+YnVmID0ga21hbGxvYyhvZGV2LT5idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKG9kZXYtPmJ1ZiA9PSBOVUxMKSB7CkBAIC01MDUsMjMgKzUxOSwzMCBAQAogCQlpbnQgcmV0OwogCiAJCWlmIChidWZbb2Zmc10gPT0gJzEnIHx8IGJ1ZltvZmZzXSA9PSAnIycpIHsKLQkJCWlmICggKHJldCA9IGFwcGVuZF92YWx1ZXMob2RldiwgMSwgMSkpIDwgMCkgcmV0dXJuIHJldDsKKwkJCXJldCA9IGFwcGVuZF92YWx1ZXMob2RldiwgMSwgMSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWVsc2UgaWYgKGJ1ZltvZmZzXSA9PSAnMCcgfHwgYnVmW29mZnNdID09ICcgJykgewotCQkJaWYgKCAocmV0ID0gYXBwZW5kX3ZhbHVlcyhvZGV2LCAwLCAxKSkgPCAwKSByZXR1cm4gcmV0OworCQkJcmV0ID0gYXBwZW5kX3ZhbHVlcyhvZGV2LCAwLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CiAJCX0KIAkJZWxzZSBpZiAoYnVmW29mZnNdID09ICdcbicpIHsKIAkJCS8vIE5ldyBsaW5lIGRldGVjdGVkLiBMZXRzIGFzc3VtZSwgdGhhdCBhbGwgY2hhcmFjdGVycyB0aWxsIHRoZSBlbmQgb2YgdGhlCiAJCQkvLyBsaW5lIHdlcmUgZXF1YWwgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoaXMgbGluZS4KIAkJCWlmIChvZGV2LT5idWZfb2ZmcyAlIG9kZXYtPndpZHRoICE9IDApCi0JCQkJaWYgKCAocmV0ID0gYXBwZW5kX3ZhbHVlcyhvZGV2LCBvZGV2LT5sYXN0X3ZhbCwKLQkJCQkgICAgICBvZGV2LT53aWR0aCAtIChvZGV2LT5idWZfb2ZmcyAlIG9kZXYtPndpZHRoKSkpIDwgMCkgcmV0dXJuIHJldDsKKwkJCQlyZXQgPSBhcHBlbmRfdmFsdWVzKG9kZXYsIG9kZXYtPmxhc3RfdmFsLAorCQkJCSAgICAgIG9kZXYtPndpZHRoIC0gKG9kZXYtPmJ1Zl9vZmZzICUgb2Rldi0+d2lkdGgpKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJcmV0dXJuIHJldDsKIAkJfQogCiAJCW9mZnMrKzsKIAl9CiAKLQlpZiAob2Rldi0+YnVmX29mZnMgPj0gbWF4X29mZnMpIHNlbmRfZGF0YShvZGV2KTsKKwlpZiAob2Rldi0+YnVmX29mZnMgPj0gbWF4X29mZnMpCisJCXNlbmRfZGF0YShvZGV2KTsKIAogCXJldHVybiBjb3VudDsKIApAQCAtNTY2LDkgKzU4Nyw5IEBACiAJdWludDE2X3QgZGV2X3dpZHRoID0gMDsKIAlvbGVkX3BhY2tfbW9kZV90IHBhY2tfbW9kZSA9IFBBQ0tfTU9ERV9MQVNUOwogCWNvbnN0IHN0cnVjdCBvbGVkX2Rldl9kZXNjX3N0ciAqIGRldl9kZXNjID0gb2xlZF9kZXZfZGVzY190YWJsZTsKLQljb25zdCBjaGFyICpkZXNjID0gMDsKKwljb25zdCBjaGFyICpkZXNjID0gTlVMTDsKIAotCWlmIChpZCA9PSAwKSB7CisJaWYgKCFpZCkgewogCQkvLyBFdmVuIHBvc3NpYmxlPyBKdXN0IHRvIG1ha2Ugc3VyZS4uLgogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIHVzYl9kZXZpY2VfaWQgcHJvdmlkZWQhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01ODYsNyArNjA3LDcgQEAKIAkJfQogCX0KIAotCWlmICggIWRlc2MgfHwgZGV2X3dpZHRoIDwgMSB8fCBwYWNrX21vZGUgPT0gUEFDS19NT0RFX0xBU1QpIHsKKwlpZiAoIWRlc2MgfHwgZGV2X3dpZHRoIDwgMSB8fCBwYWNrX21vZGUgPT0gUEFDS19NT0RFX0xBU1QpIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJNaXNzaW5nIG9yIGluY29tcGxldGUgZGV2aWNlIGRlc2NyaXB0aW9uIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTYxMSwyMCArNjMyLDIwIEBACiAJb2Rldi0+bGFzdF92YWwgPSAwOwogCW9kZXYtPmJ1ZiA9IE5VTEw7CiAJb2Rldi0+ZW5hYmxlZCA9IDE7Ci0Jb2Rldi0+ZGV2ID0gMDsKKwlvZGV2LT5kZXYgPSBOVUxMOwogCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBvZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgb2Rldik7CiAKLQlpZiAoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIoZW5hYmxlZCkpKSkgeworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIoZW5hYmxlZCkpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX2ZpbGVzOwotCX0KIAotCWlmICgocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihwaWN0dXJlKSkpKSB7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihwaWN0dXJlKSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfZmlsZXM7Ci0JfQogCi0Jb2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShvbGVkX2NsYXNzLCAmaW50ZXJmYWNlLT5kZXYsIE1LREVWKDAsMCksCi0JCQkJTlVMTCwib2xlZF8lZCIsICsrb2xlZF9udW0pOworCW9kZXYtPmRldiA9IGRldmljZV9jcmVhdGUob2xlZF9jbGFzcywgJmludGVyZmFjZS0+ZGV2LCBNS0RFVigwLCAwKSwKKwkJCQlOVUxMLCAib2xlZF8lZCIsICsrb2xlZF9udW0pOwogCiAJaWYgKElTX0VSUihvZGV2LT5kZXYpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIob2Rldi0+ZGV2KTsKQEAgLTYzMywxMyArNjU0LDEzIEBACiAKIAlkZXZfc2V0X2RydmRhdGEob2Rldi0+ZGV2LCBvZGV2KTsKIAotCWlmICggKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShvZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVkKSkpIHsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUob2Rldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCk7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfY2xhc3NfZW5hYmxlZDsKLQl9CiAKLQlpZiAoIChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUob2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGljdHVyZSkpKSB7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9kZXYtPmRldiwgJmRldl9hdHRyX3BpY3R1cmUpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX2NsYXNzX3BpY3R1cmU7Ci0JfQogCiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiQXR0YWNoZWQgQXN1cyBPTEVEIGRldmljZTogJXMgW3dpZHRoICV1LCBwYWNrX21vZGUgJWRdXG4iLCBkZXNjLCBvZGV2LT5kZXZfd2lkdGgsIG9kZXYtPnBhY2tfbW9kZSk7CiAKQEAgLTY1OSw3ICs2ODAsNyBAQAogCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIoZW5hYmxlZCkpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIocGljdHVyZSkpOwogCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJdXNiX3B1dF9kZXYob2Rldi0+dWRldik7CiAJa2ZyZWUob2Rldik7CiAKQEAgLTY3MCwxOSArNjkxLDIwIEBACiB7CiAJc3RydWN0IGFzdXNfb2xlZF9kZXYgKm9kZXY7CiAKLQlvZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCW9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCiAJZGV2aWNlX3JlbW92ZV9maWxlKG9kZXYtPmRldiwgJmRldl9hdHRyX3BpY3R1cmUpOwogCWRldmljZV9yZW1vdmVfZmlsZShvZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVkKTsKIAlkZXZpY2VfdW5yZWdpc3RlcihvZGV2LT5kZXYpOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJiBBU1VTX09MRURfREVWSUNFX0FUVFIocGljdHVyZSkpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICYgQVNVU19PTEVEX0RFVklDRV9BVFRSKGVuYWJsZWQpKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKHBpY3R1cmUpKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKGVuYWJsZWQpKTsKIAogCXVzYl9wdXRfZGV2KG9kZXYtPnVkZXYpOwogCi0JaWYgKG9kZXYtPmJ1Zikga2ZyZWUob2Rldi0+YnVmKTsKKwlpZiAob2Rldi0+YnVmKQorCQlrZnJlZShvZGV2LT5idWYpOwogCiAJa2ZyZWUob2Rldik7CiAKQEAgLTcxMyw3ICs3MzUsOCBAQAogCQlyZXR1cm4gUFRSX0VSUihvbGVkX2NsYXNzKTsKIAl9CiAKLQlpZiAoKHJldHZhbCA9IGNsYXNzX2NyZWF0ZV9maWxlKG9sZWRfY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pKSkgeworCXJldHZhbCA9IGNsYXNzX2NyZWF0ZV9maWxlKG9sZWRfY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCWlmIChyZXR2YWwpIHsKIAkJZXJyKCJFcnJvciBjcmVhdGluZyBjbGFzcyB2ZXJzaW9uIGZpbGUiKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC03NDAsNiArNzYzLDYgQEAKIAl1c2JfZGVyZWdpc3Rlcigmb2xlZF9kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdCAoYXN1c19vbGVkX2luaXQpOwotbW9kdWxlX2V4aXQgKGFzdXNfb2xlZF9leGl0KTsKK21vZHVsZV9pbml0KGFzdXNfb2xlZF9pbml0KTsKK21vZHVsZV9leGl0KGFzdXNfb2xlZF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETwppbmRleCA2OTExY2E3Li4wYzdlZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETwpAQCAtMSwyICsxLDcgQEAKLXJld3JpdGUgdGhlIGRyaXZlciB0byB1c2UgdGhlIHByb3BlciBpbi1rZXJuZWwgd2lyZWxlc3Mgc3RhY2sKLWluc3RlYWQgb2YgdXNpbmcgaXRzIG93bi4KK0ZpeCB0aGUgbWFjODAyMTEgcG9ydCBvZiBhdDc2X3VzYiAodGhlIHByb3BlciBpbi1rZXJuZWwgd2lyZWxlc3MKK3N0YWNrKSBhbmQgZ2V0IGl0IGluY2x1ZGVkIHRvIHRoZSBtYWlubGluZS4gUGF0Y2hlcyBhdmFpbGFibGUgaGVyZToKKworaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtbGVnYWN5LmdpdDthPXNob3J0bG9nO2g9YXQ3NgorCitDb250YWN0IEthbGxlIFZhbG8gPGthbGxlLnZhbG9AaWtpLmZpPiBhbmQgbGludXgtd2lyZWxlc3MgbGlzdAorPGxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jCmluZGV4IGM4ZTRkMzEuLjZmNmUzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgImF0NzZfdXNiLmgiCiAKQEAgLTE3MjcsMTIgKzE3MjcsMTIgQEAKIAogCS8qIHdyaXRlIFRMViBkYXRhIGVsZW1lbnRzICovCiAKLQlpZS0+aWQgPSBNRklFX1RZUEVfU1NJRDsKKwlpZS0+aWQgPSBXTEFOX0VJRF9TU0lEOwogCWllLT5sZW4gPSBic3MtPnNzaWRfbGVuOwogCW1lbWNweShpZS0+ZGF0YSwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKTsKIAluZXh0X2llKCZpZSk7CiAKLQlpZS0+aWQgPSBNRklFX1RZUEVfUkFURVM7CisJaWUtPmlkID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKIAlpZS0+bGVuID0gc2l6ZW9mKGh3X3JhdGVzKTsKIAltZW1jcHkoaWUtPmRhdGEsIGh3X3JhdGVzLCBzaXplb2YoaHdfcmF0ZXMpKTsKIAluZXh0X2llKCZpZSk7CQkvKiBpZSBwb2ludHMgYmVoaW5kIHRoZSBzdXBwX3JhdGVzIGZpZWxkICovCkBAIC00Mzk3LDcgKzQzOTcsNyBAQAogCiAJCXN3aXRjaCAoaWUtPmlkKSB7CiAKLQkJY2FzZSBNRklFX1RZUEVfU1NJRDoKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgogCQkJaWYgKGhhdmVfc3NpZCkKIAkJCQlicmVhazsKIApAQCAtNDQyMCw3ICs0NDIwLDcgQEAKIAkJCWhhdmVfc3NpZCA9IDE7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9SQVRFUzoKKwkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgogCQkJaWYgKGhhdmVfcmF0ZXMpCiAJCQkJYnJlYWs7CiAKQEAgLTQ0MzMsNyArNDQzMyw3IEBACiAJCQkJIGhleDJzdHIoaWUtPmRhdGEsIGllLT5sZW4pKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0RTX1NFVDoKKwkJY2FzZSBXTEFOX0VJRF9EU19QQVJBTVM6CiAJCQlpZiAoaGF2ZV9jaGFubmVsKQogCQkJCWJyZWFrOwogCkBAIC00NDQzLDkgKzQ0NDMsOSBAQAogCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hdGNoLT5jaGFubmVsKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0NGX1NFVDoKLQkJY2FzZSBNRklFX1RZUEVfVElNOgotCQljYXNlIE1GSUVfVFlQRV9JQlNTX1NFVDoKKwkJY2FzZSBXTEFOX0VJRF9DRl9QQVJBTVM6CisJCWNhc2UgV0xBTl9FSURfVElNOgorCQljYXNlIFdMQU5fRUlEX0lCU1NfUEFSQU1TOgogCQlkZWZhdWx0OgogCQkJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBiZWFjb24gSUUgaWQgJWQgbGVuICVkICVzIiwKIAkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBpZS0+aWQsIGllLT5sZW4sCkBAIC01MzcwLDggKzUzNzAsNyBAQAogCiAJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogdW5saW5rZWQgdXJicyIsIF9fZnVuY19fKTsKIAotCWlmIChwcml2LT5yeF9za2IpCi0JCWtmcmVlX3NrYihwcml2LT5yeF9za2IpOworCWtmcmVlX3NrYihwcml2LT5yeF9za2IpOwogCiAJYXQ3Nl9mcmVlX2Jzc19saXN0KHByaXYpOwogCWRlbF90aW1lcl9zeW5jKCZwcml2LT5ic3NfbGlzdF90aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oCmluZGV4IGIyMGJlOWQuLjZkNjBjNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oCkBAIC0yMiw2ICsyMiw5MyBAQAogI2lmbmRlZiBfQVQ3Nl9VU0JfSAogI2RlZmluZSBfQVQ3Nl9VU0JfSAogCisvKgorICogaWVlZTgwMjExIGRlZmluaXRpb25zIGNvcGllZCBmcm9tIG5ldC9pZWVlODAyMTEuaAorICovCisKKyNkZWZpbmUgV0VQX0tFWV9MRU4JCTEzCisjZGVmaW5lIFdFUF9LRVlTCQk0CisKKyNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOCQkyMzA0CisvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCisgICA2LjIuMS4xLjIuCisKKyAgIFRoZSBmaWd1cmUgaW4gc2VjdGlvbiA3LjEuMiBzdWdnZXN0cyBhIGJvZHkgc2l6ZSBvZiB1cCB0byAyMzEyCisgICBieXRlcyBpcyBhbGxvd2VkLCB3aGljaCBpcyBhIGJpdCBjb25mdXNpbmcsIEkgc3VzcGVjdCB0aGlzCisgICByZXByZXNlbnRzIHRoZSAyMzA0IGJ5dGVzIG9mIHJlYWwgZGF0YSwgcGx1cyBhIHBvc3NpYmxlIDggYnl0ZXMgb2YKKyAgIFdFUCBJViBhbmQgSUNWLiAodGhpcyBpbnRlcnByZXRhdGlvbiBzdWdnZXN0ZWQgYnkgUmFtaXJvIEJhcnJlaXJvKSAqLworCisjZGVmaW5lIElFRUU4MDIxMV8xQUREUl9MRU4gMTAKKyNkZWZpbmUgSUVFRTgwMjExXzJBRERSX0xFTiAxNgorI2RlZmluZSBJRUVFODAyMTFfM0FERFJfTEVOIDI0CisjZGVmaW5lIElFRUU4MDIxMV80QUREUl9MRU4gMzAKKyNkZWZpbmUgSUVFRTgwMjExX0ZDU19MRU4gICAgNAorI2RlZmluZSBJRUVFODAyMTFfSExFTgkJCShJRUVFODAyMTFfNEFERFJfTEVOKQorI2RlZmluZSBJRUVFODAyMTFfRlJBTUVfTEVOCQkoSUVFRTgwMjExX0RBVEFfTEVOICsgSUVFRTgwMjExX0hMRU4pCisKKyNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAyNTZVCisjZGVmaW5lCU1BWF9GUkFHX1RIUkVTSE9MRCAgICAgMjM0NlUKKworc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfYXV0aCB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBhbGdvcml0aG07CisJX19sZTE2IHRyYW5zYWN0aW9uOworCV9fbGUxNiBzdGF0dXM7CisJLyogY2hhbGxlbmdlICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBjYXBhYmlsaXR5OworCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBSU04gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUzMiB0aW1lX3N0YW1wWzJdOworCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKKwkgKiBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLworCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBBbGlhcyBiZWFjb24gZm9yIHByb2JlX3Jlc3BvbnNlICovCisjZGVmaW5lIGllZWU4MDIxMV9iZWFjb24gaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlCisKK3N0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwlfX2xlMTYgc3RhdHVzOworCV9fbGUxNiBhaWQ7CisJLyogc3VwcG9ydGVkIHJhdGVzICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgcmVhc29uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIEJvYXJkIHR5cGVzICovCiBlbnVtIGJvYXJkX3R5cGUgewogCUJPQVJEXzUwM19JU0wzODYxID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0MjMxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIEIzREZHCisgICAgICAgdHJpc3RhdGUgIkJyb250ZXMgM2QgRnJhbWUgRnJhbWVncmFiYmVyIgorICAgICAgIGRlZmF1bHQgbgorICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBCcm9udGVzIDNkIEZyYW1lZ3JhYmJlcgorICAgICAgICAgUENJIGNhcmQuCisKKyAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKyAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGIzZGZnLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjQzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX0IzREZHKSArPSBiM2RmZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTkyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvVE9ETwpAQCAtMCwwICsxLDQgQEAKKworIC0gcXVldWUvd2FpdCBidWZmZXIgcHJlc2VudHMgZmlsbHRpbWUgcmVzdWx0cyBmb3IgZWFjaCBmcmFtZT8KKyAtIGNvdW50aW5nIG9mIGRyb3BwZWQgZnJhbWVzCisgLSByZXZpZXcgZW5kaWFubmVzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQ4MDcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMKQEAgLTAsMCArMSwxMTE5IEBACisgLyoKKyAqIEJyb250ZXMgUENJIGZyYW1lIGdyYWJiZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IDNNIENvbXBhbnkKKyAqIENvbnRhY3Q6IEp1c3RpbiBCcm9uZGVyIDxqc2Jyb25kZXJAYnJvbnRlczNkLmNvbT4KKyAqIE9yaWdpbmFsIEF1dGhvcnM6IERhbmllbCBEcmFrZSA8ZGRyYWtlQGJyb250ZXMzZC5jb20+CisgKiAgICAgICAgICAgICAgICAgICBEdWFuZSBHcmlmZmluIDxkdWFuZWdAZGdoZGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBiM2RmZ19uYnVmID0gMjsKKworbW9kdWxlX3BhcmFtX25hbWVkKGJ1ZmZlcl9jb3VudCwgYjNkZmdfbmJ1ZiwgdWludCwgMDQ0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MoYnVmZmVyX2NvdW50LCAiTnVtYmVyIG9mIGJ1ZmZlcnMgKG1pbiAyLCBkZWZhdWx0IDIpXG4iKTsKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIERyYWtlIDxkZHJha2VAYnJvbnRlczNkLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQnJvbnRlcyBmcmFtZSBncmFiYmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIERSSVZFUl9OQU1FICJiM2RmZyIKKyNkZWZpbmUgQjNERkdfTUFYX0RFVlMgNAorI2RlZmluZSBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUiAzCisKKyNkZWZpbmUgQjNERkdfQkFSX1JFR1MJMAorI2RlZmluZSBCM0RGR19SRUdTX0xFTkdUSCAweDEwMDAwCisKKyNkZWZpbmUgQjNERkdfSU9DX01BR0lDCQkweGIzIC8qIGRmZyA6LSkgKi8KKyNkZWZpbmUgQjNERkdfSU9DR0ZSTVNaCQlfSU9SKEIzREZHX0lPQ19NQUdJQywgMSwgaW50KQorI2RlZmluZSBCM0RGR19JT0NUTlVNQlVGUwlfSU8oQjNERkdfSU9DX01BR0lDLCAyKQorI2RlZmluZSBCM0RGR19JT0NUVFJBTlMJCV9JTyhCM0RGR19JT0NfTUFHSUMsIDMpCisjZGVmaW5lIEIzREZHX0lPQ1RRVUVVRUJVRglfSU8oQjNERkdfSU9DX01BR0lDLCA0KQorI2RlZmluZSBCM0RGR19JT0NUUE9MTEJVRglfSU9XUihCM0RGR19JT0NfTUFHSUMsIDUsIHN0cnVjdCBiM2RmZ19wb2xsKQorI2RlZmluZSBCM0RGR19JT0NUV0FJVEJVRglfSU9XUihCM0RGR19JT0NfTUFHSUMsIDYsIHN0cnVjdCBiM2RmZ193YWl0KQorI2RlZmluZSBCM0RGR19JT0NHV0FORFNUQVQJX0lPUihCM0RGR19JT0NfTUFHSUMsIDcsIGludCkKKworZW51bSB7CisJLyogbnVtYmVyIG9mIDRrYiBwYWdlcyBwZXIgZnJhbWUgKi8KKwlCM0RfUkVHX0ZSTV9TSVpFID0gMHgwLAorCisJLyogYml0IDA6IHNldCB0byBlbmFibGUgaW50ZXJydXB0cworCSAqIGJpdCAxOiBzZXQgdG8gZW5hYmxlIGNhYmxlIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0cyAqLworCUIzRF9SRUdfSFdfQ1RSTCA9IDB4NCwKKworCS8qIGJpdCAwLTEgLSAxLWJhc2VkIElEIG9mIG5leHQgcGVuZGluZyBmcmFtZSB0cmFuc2ZlciAoMCA9IG5vbmUpCisJICogYml0IDIgaW5kaWNhdGVzIHRoZSBwcmV2aW91cyBETUEgdHJhbnNmZXIgaGFzIGNvbXBsZXRlZAorCSAqIGJpdCAzIGluZGljYXRlcyB3YW5kIGNhYmxlIHN0YXR1cyBjaGFuZ2UKKwkgKiBiaXQgODoxNSAtIGNvdW50ZXIgb2YgbnVtYmVyIG9mIGRpc2NhcmRlZCB0cmlwbGV0cyAqLworCUIzRF9SRUdfRE1BX1NUUyA9IDB4OCwKKworCS8qIGJpdCAwOiB3YW5kIHN0YXR1cyAoMSA9IHByZXNlbnQsIDAgPSBkaXNjb25uZWN0ZWQpICovCisJQjNEX1JFR19XQU5EX1NUUyA9IDB4YywKKworCS8qIGJ1cyBhZGRyZXNzIGZvciBETUEgdHJhbnNmZXJzLiBsb3dlciAyIGJpdHMgbXVzdCBiZSB6ZXJvIGJlY2F1c2UgRE1BCisJICogd29ya3Mgd2l0aCAzMiBiaXQgd29yZCBzaXplLiAqLworCUIzRF9SRUdfRUMyMjBfRE1BX0FERFIgPSAweDgwMDAsCisKKwkvKiBiaXQgMjA6MCAtIG51bWJlciBvZiAzMiBiaXQgd29yZHMgdG8gYmUgdHJhbnNmZXJyZWQKKwkgKiBiaXQgMjE6MzEgLSByZXNlcnZlZCAqLworCUIzRF9SRUdfRUMyMjBfVFJGX1NJWkUgPSAweDgwMDQsCisKKwkvKiBiaXQgMCAtIGVycm9yIGJpdAorCSAqIGJpdCAxIC0gaW50ZXJydXB0IGJpdCAoc2V0IHRvIGdlbmVyYXRlIGludGVycnVwdCBhdCBlbmQgb2YgdHJhbnNmZXIpCisJICogYml0IDIgLSBzdGFydCBiaXQgKHNldCB0byBzdGFydCB0cmFuc2ZlcikKKwkgKiBiaXQgMyAtIGRpcmVjdGlvbiAoMCA9IERNQV9UT19ERVZJQ0UsIDEgPSBETUFfRlJPTV9ERVZJQ0UKKwkgKiBiaXQgNDozMSAtIHJlc2VydmVkICovCisJQjNEX1JFR19FQzIyMF9ETUFfU1RTID0gMHg4MDA4LAorfTsKKworZW51bSBiM2RmZ19idWZmZXJfc3RhdGUgeworCUIzREZHX0JVRkZFUl9QT0xMRUQgPSAwLAorCUIzREZHX0JVRkZFUl9QRU5ESU5HLAorCUIzREZHX0JVRkZFUl9QT1BVTEFURUQsCit9OworCitzdHJ1Y3QgYjNkZmdfYnVmZmVyIHsKKwl1bnNpZ25lZCBjaGFyICpmcmFtZVtCM0RGR19GUkFNRVNfUEVSX0JVRkZFUl07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXU4IHN0YXRlOworfTsKKworc3RydWN0IGIzZGZnX2RldiB7CisKKwkvKiBubyBwcm90ZWN0aW9uIG5lZWRlZDogYWxsIGZpbmFsaXplZCBhdCBpbml0aWFsaXphdGlvbiB0aW1lICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IGNkZXYgY2hhcmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOworCisJLyoKKwkgKiBQcm90ZWN0cyBidWZmZXIgc3RhdGUsIGluY2x1ZGluZyBidWZmZXJfcXVldWUsIHRyaXBsZXRfcmVhZHksCisJICogY3VyX2RtYV9mcmFtZV9pZHggJiBjdXJfZG1hX2ZyYW1lX2FkZHIuCisJICovCisJc3BpbmxvY2tfdCBidWZmZXJfbG9jazsKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWZmZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgYnVmZmVyX3F1ZXVlOworCisJLyogTGFzdCBmcmFtZSBpbiB0cmlwbGV0IHRyYW5zZmVycmVkICgtMSBpZiBub25lKS4gKi8KKwlpbnQgY3VyX2RtYV9mcmFtZV9pZHg7CisKKwkvKiBDdXJyZW50IGZyYW1lJ3MgYWRkcmVzcyBmb3IgRE1BLiAqLworCWRtYV9hZGRyX3QgY3VyX2RtYV9mcmFtZV9hZGRyOworCisJLyoKKwkgKiBQcm90ZWN0cyBjc3RhdGVfdHN0YW1wLgorCSAqIE5lc3RzIGluc2lkZSBidWZmZXJfbG9jay4KKwkgKi8KKwlzcGlubG9ja190IGNzdGF0ZV9sb2NrOworCXVuc2lnbmVkIGxvbmcgY3N0YXRlX3RzdGFtcDsKKworCS8qCisJICogUHJvdGVjdHMgdHJpcGxldHNfZHJvcHBlZC4KKwkgKiBOZXN0cyBpbnNpZGUgYnVmZmVyc19sb2NrLgorCSAqLworCXNwaW5sb2NrX3QgdHJpcGxldHNfZHJvcHBlZF9sb2NrOworCXVuc2lnbmVkIGludCB0cmlwbGV0c19kcm9wcGVkOworCisJd2FpdF9xdWV1ZV9oZWFkX3QgYnVmZmVyX3dhaXRxdWV1ZTsKKworCXVuc2lnbmVkIGludCB0cmFuc21pc3Npb25fZW5hYmxlZDoxOworCXVuc2lnbmVkIGludCB0cmlwbGV0X3JlYWR5OjE7Cit9OworCitzdGF0aWMgdTggYjNkZmdfZGV2aWNlc1tCM0RGR19NQVhfREVWU107CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmIzZGZnX2NsYXNzOworc3RhdGljIGRldl90IGIzZGZnX2RldnQ7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiM2RmZ19pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX0RFVklDRSgweDBiM2QsIDB4MDAwMSkgfSwKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYjNkZmdfaWRzKTsKKworLyoqKioqIHVzZXItdmlzaWJsZSB0eXBlcyAqKioqKi8KKworc3RydWN0IGIzZGZnX3BvbGwgeworCWludCBidWZmZXJfaWR4OworCXVuc2lnbmVkIGludCB0cmlwbGV0c19kcm9wcGVkOworfTsKKworc3RydWN0IGIzZGZnX3dhaXQgeworCWludCBidWZmZXJfaWR4OworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCXVuc2lnbmVkIGludCB0cmlwbGV0c19kcm9wcGVkOworfTsKKworLyoqKiogcmVnaXN0ZXIgSS9PICoqKiovCisKK3N0YXRpYyB1MzIgYjNkZmdfcmVhZDMyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB1MTYgcmVnKQoreworCXJldHVybiBpb3JlYWQzMihmZ2Rldi0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGIzZGZnX3dyaXRlMzIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHUxNiByZWcsIHUzMiB2YWx1ZSkKK3sKKwlpb3dyaXRlMzIodmFsdWUsIGZnZGV2LT5yZWdzICsgcmVnKTsKK30KKworLyoqKiogYnVmZmVyIG1hbmFnZW1lbnQgKioqKi8KKworLyoKKyAqIFByb2dyYW0gRUMyMjAgZm9yIHRyYW5zZmVyIG9mIGEgc3BlY2lmaWMgZnJhbWUuCisgKiBDYWxsZWQgd2l0aCBidWZmZXJfbG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IHNldHVwX2ZyYW1lX3RyYW5zZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LAorCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiwgaW50IGZyYW1lKQoreworCXVuc2lnbmVkIGNoYXIgKmZybV9hZGRyOworCWRtYV9hZGRyX3QgZnJtX2FkZHJfZG1hOworCXVuc2lnbmVkIGludCBmcm1fc2l6ZSA9IGZnZGV2LT5mcmFtZV9zaXplOworCisJZnJtX2FkZHIgPSBidWYtPmZyYW1lW2ZyYW1lXTsKKwlmcm1fYWRkcl9kbWEgPSBwY2lfbWFwX3NpbmdsZShmZ2Rldi0+cGRldiwgZnJtX2FkZHIsCisJCQkJCSAgZnJtX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihmZ2Rldi0+cGRldiwgZnJtX2FkZHJfZG1hKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyID0gZnJtX2FkZHJfZG1hOworCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IGZyYW1lOworCisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfQUREUiwKKwkJCQkJY3B1X3RvX2xlMzIoZnJtX2FkZHJfZG1hKSk7CisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9UUkZfU0laRSwKKwkJCQkJY3B1X3RvX2xlMzIoZnJtX3NpemUgPj4gMikpOworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfRUMyMjBfRE1BX1NUUywgMHhmKTsKKworCXJldHVybiAwOworfQorCisvKiBDYWxsZXIgc2hvdWxkIGhvbGQgYnVmZmVyIGxvY2sgKi8KK3N0YXRpYyB2b2lkIGRlcXVldWVfYWxsX2J1ZmZlcnMoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykgeworCQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbaV07CisJCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9MTEVEOworCQlsaXN0X2RlbF9pbml0KCZidWYtPmxpc3QpOworCX0KK30KKworLyogcXVldWUgYSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCitzdGF0aWMgaW50IHF1ZXVlX2J1ZmZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IGJ1ZmlkeCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgciA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJaWYgKGJ1ZmlkeCA8IDAgfHwgYnVmaWR4ID49IGIzZGZnX25idWYpIHsKKwkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIGJ1ZmZlciBpbmRleCwgJWRcbiIsIGJ1ZmlkeCk7CisJCXIgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJYnVmID0gJmZnZGV2LT5idWZmZXJzW2J1ZmlkeF07CisKKwlpZiAodW5saWtlbHkoYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUEVORElORykpIHsKKwkJZGV2X2RiZyhkZXYsICJidWZmZXIgJWQgaXMgYWxyZWFkeSBxdWV1ZWRcbiIsIGJ1ZmlkeCk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BFTkRJTkc7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmZmdkZXYtPmJ1ZmZlcl9xdWV1ZSk7CisKKwlpZiAoZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkICYmIGZnZGV2LT50cmlwbGV0X3JlYWR5KSB7CisJCWRldl9kYmcoZGV2LCAidHJpcGxldCBpcyByZWFkeSwgcHVzaGluZyBpbW1lZGlhdGVseVxuIik7CisJCWZnZGV2LT50cmlwbGV0X3JlYWR5ID0gMDsKKwkJciA9IHNldHVwX2ZyYW1lX3RyYW5zZmVyKGZnZGV2LCBidWYsIDApOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG1hcCBETUEgYnVmZmVyXG4iKTsKKwl9CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcjsKK30KKworLyogbm9uLWJsb2NraW5nIGJ1ZmZlciBwb2xsLiByZXR1cm5zIDEgaWYgZGF0YSBpcyBwcmVzZW50IGluIHRoZSBidWZmZXIsCisgKiAwIG90aGVyd2lzZSAqLworc3RhdGljIGludCBwb2xsX2J1ZmZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2Rldiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKwlzdHJ1Y3QgYjNkZmdfcG9sbCBwOworCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByID0gMTsKKwlpbnQgYXJnX291dCA9IDA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGFyZywgc2l6ZW9mKHApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAodW5saWtlbHkoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkpIHsKKwkJZGV2X2RiZyhkZXYsICJjYW5ub3QgcG9sbCwgdHJhbnNtaXNzaW9uIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHAuYnVmZmVyX2lkeCA8IDAgfHwgcC5idWZmZXJfaWR4ID49IGIzZGZnX25idWYpCisJCXJldHVybiAtRU5PRU5UOworCisJYnVmID0gJmZnZGV2LT5idWZmZXJzW3AuYnVmZmVyX2lkeF07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwlpZiAobGlrZWx5KGJ1Zi0+c3RhdGUgPT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkpIHsKKwkJYXJnX291dCA9IDE7CisJCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9MTEVEOworCisJCS8qIElSUXMgYWxyZWFkeSBkaXNhYmxlZCBieSBzcGluX2xvY2tfaXJxc2F2ZSBhYm92ZS4gKi8KKwkJc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwkJcC50cmlwbGV0c19kcm9wcGVkID0gZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQ7CisJCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkID0gMDsKKwkJc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCX0gZWxzZSB7CisJCXIgPSAwOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKGFyZ19vdXQgJiYgY29weV90b191c2VyKGFyZywgJnAsIHNpemVvZihwKSkpCisJCXIgPSAtRUZBVUxUOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9jc3RhdGVfY2hhbmdlKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHdoZW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmNzdGF0ZV9sb2NrLCBmbGFncyk7CisJd2hlbiA9IGZnZGV2LT5jc3RhdGVfdHN0YW1wOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5jc3RhdGVfbG9jaywgZmxhZ3MpOworCXJldHVybiB3aGVuOworfQorCitzdGF0aWMgaW50IGlzX2V2ZW50X3JlYWR5KHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYsCisJCQkgIHVuc2lnbmVkIGxvbmcgd2hlbikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZmZ2Rldi0+Y3N0YXRlX2xvY2spOworCXJlc3VsdCA9ICghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkIHx8CisJCSAgYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEIHx8CisJCSAgd2hlbiAhPSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcCk7CisJc3Bpbl91bmxvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBzbGVlcCB1bnRpbCBhIHNwZWNpZmljIGJ1ZmZlciBiZWNvbWVzIHBvcHVsYXRlZCAqLworc3RhdGljIGludCB3YWl0X2J1ZmZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2Rldiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKwlzdHJ1Y3QgYjNkZmdfd2FpdCB3OworCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB3aGVuOworCWludCByOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ3LCBhcmcsIHNpemVvZih3KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpIHsKKwkJZGV2X2RiZyhkZXYsICJjYW5ub3Qgd2FpdCwgdHJhbnNtaXNzaW9uIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHcuYnVmZmVyX2lkeCA8IDAgfHwgdy5idWZmZXJfaWR4ID49IGIzZGZnX25idWYpCisJCXJldHVybiAtRU5PRU5UOworCisJYnVmID0gJmZnZGV2LT5idWZmZXJzW3cuYnVmZmVyX2lkeF07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSB7CisJCXIgPSB3LnRpbWVvdXQ7CisJCWdvdG8gb3V0X3RyaXBsZXRzX2Ryb3BwZWQ7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwl3aGVuID0gZ2V0X2NzdGF0ZV9jaGFuZ2UoZmdkZXYpOworCWlmICh3LnRpbWVvdXQgPiAwKSB7CisJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSwKKwkJCWlzX2V2ZW50X3JlYWR5KGZnZGV2LCBidWYsIHdoZW4pLAorCQkJKHcudGltZW91dCAqIEhaKSAvIDEwMDApOworCisJCWlmICh1bmxpa2VseShyIDwgMCkpCisJCQlnb3RvIG91dDsKKworCQl3LnRpbWVvdXQgPSByICogMTAwMCAvIEhaOworCX0gZWxzZSB7CisJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUsCisJCQlpc19ldmVudF9yZWFkeShmZ2RldiwgYnVmLCB3aGVuKSk7CisKKwkJaWYgKHVubGlrZWx5KHIpKSB7CisJCQlyID0gLUVSRVNUQVJUU1lTOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBUT0RPOiBJbmZvcm0gdGhlIHVzZXIgdmlhIGZpZWxkKHMpIGluIHc/ICovCisJaWYgKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgfHwgd2hlbiAhPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2RldikpIHsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChidWYtPnN0YXRlICE9IEIzREZHX0JVRkZFUl9QT1BVTEFURUQpIHsKKwkJciA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BPTExFRDsKKworb3V0X3RyaXBsZXRzX2Ryb3BwZWQ6CisKKwkvKiBJUlFzIGFscmVhZHkgZGlzYWJsZWQgYnkgc3Bpbl9sb2NrX2lycXNhdmUgYWJvdmUuICovCisJc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwl3LnRyaXBsZXRzX2Ryb3BwZWQgPSBmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZDsKKwlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCA9IDA7CisJc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdywgc2l6ZW9mKHcpKSkKKwkJciA9IC1FRkFVTFQ7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qIG1tYXAgcGFnZSBmYXVsdCBoYW5kbGVyICovCitzdGF0aWMgaW50IGIzZGZnX3ZtYV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwlzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgb2ZmID0gdm1mLT5wZ29mZiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplID0gZmdkZXYtPmZyYW1lX3NpemU7CisJdW5zaWduZWQgaW50IGJ1Zl9zaXplID0gZnJhbWVfc2l6ZSAqIEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSOworCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisKKwkvKiBkZXRlcm1pbmUgd2hpY2ggYnVmZmVyIHRoZSBvZmZzZXQgbGllcyB3aXRoaW4gKi8KKwl1bnNpZ25lZCBpbnQgYnVmX2lkeCA9IG9mZiAvIGJ1Zl9zaXplOworCS8qIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBidWZfb2ZmID0gb2ZmICUgYnVmX3NpemU7CisKKwkvKiBkZXRlcm1pbmUgd2hpY2ggZnJhbWUgaW5zaWRlIHRoZSBidWZmZXIgdGhlIG9mZnNldCBsaWVzIGluICovCisJdW5zaWduZWQgaW50IGZybV9pZHggPSBidWZfb2ZmIC8gZnJhbWVfc2l6ZTsKKwkvKiBhbmQgdGhlIG9mZnNldCBpbnRvIHRoZSBmcmFtZSAqLworCXVuc2lnbmVkIGludCBmcm1fb2ZmID0gYnVmX29mZiAlIGZyYW1lX3NpemU7CisKKwlpZiAodW5saWtlbHkoYnVmX2lkeCA+PSBiM2RmZ19uYnVmKSkKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKworCWFkZHIgPSBmZ2Rldi0+YnVmZmVyc1tidWZfaWR4XS5mcmFtZVtmcm1faWR4XSArIGZybV9vZmY7CisJdm1faW5zZXJ0X3Bmbih2bWEsICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzLAorCQkJICB2aXJ0X3RvX3BoeXMoYWRkcikgPj4gUEFHRV9TSElGVCk7CisKKwlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGIzZGZnX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSBiM2RmZ192bWFfZmF1bHQsCit9OworCitzdGF0aWMgaW50IGdldF93YW5kX3N0YXR1cyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IF9fdXNlciAqYXJnKQoreworCXUzMiB3bmRzdGF0ID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX1dBTkRfU1RTKTsKKwlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAid2FuZCBzdGF0dXMgJXhcbiIsIHduZHN0YXQpOworCXJldHVybiBfX3B1dF91c2VyKHduZHN0YXQgJiAweDEsIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwl1MTYgY29tbWFuZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCisJZGV2X2RiZyhkZXYsICJlbmFibGUgdHJhbnNtaXNzaW9uXG4iKTsKKworCS8qIGNoZWNrIHRoZSBjYWJsZSBpcyBwbHVnZ2VkIGluLiAqLworCWlmICghYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX1dBTkRfU1RTKSkgeworCQlkZXZfZGJnKGRldiwgImNhbm5vdCBzdGFydCB0cmFuc21pc3Npb24gd2l0aG91dCB3YW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBDaGVjayB3ZSdyZSBhIGJ1cyBtYXN0ZXIuCisJICogVE9ETzogSSB0aGluayB3ZSBjYW4gcmVtb3ZlIHRoaXMgaGF2aW5nIGFkZGVkIHRoZSBwY2lfc2V0X21hc3RlciBjYWxsCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZmdkZXYtPnBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJaWYgKCEoY29tbWFuZCAmIFBDSV9DT01NQU5EX01BU1RFUikpIHsKKwkJZGV2X2VycihkZXYsICJub3QgYSBidXMgbWFzdGVyLCBmb3JjZS1lbmFibGluZ1xuIik7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChmZ2Rldi0+cGRldiwgUENJX0NPTU1BTkQsCisJCQljb21tYW5kIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwkvKiBIYW5kbGUgcmFjaW5nIGVuYWJsZV90cmFuc21pc3Npb24gY2FsbHMuICovCisJaWYgKGZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCA9IDA7CisJc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCisJZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAwOworCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IC0xOworCWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCS8qIEVuYWJsZSBETUEgYW5kIGNhYmxlIHN0YXR1cyBpbnRlcnJ1cHRzLiAqLworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMHgwMyk7CisKK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV90cmFuc21pc3Npb24oc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCisJZGV2X2RiZyhkZXYsICJkaXNhYmxlIHRyYW5zbWlzc2lvblxuIik7CisKKwkvKiBndWFyYW50ZWUgdGhhdCBubyBtb3JlIGludGVycnVwdHMgd2lsbCBiZSBzZXJ2aWNlZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgPSAwOworCisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAwKTsKKworCS8qIEZJWE1FOiB0ZW1wb3JhcnkgZGVidWdnaW5nIG9ubHkuIGlmIHRoZSBib2FyZCBzdG9wcyB0cmFuc21pdHRpbmcsCisJICogaGl0dGluZyBjdHJsK2MgYW5kIHNlZWluZyB0aGlzIG1lc3NhZ2UgaXMgdXNlZnVsIGZvciBkZXRlcm1pbmluZworCSAqIHRoZSBzdGF0ZSBvZiB0aGUgYm9hcmQuICovCisJdG1wID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0RNQV9TVFMpOworCWRldl9kYmcoZGV2LCAiRE1BX1NUUyByZWFkcyAleCBhZnRlciBUWCBzdG9wcGVkXG4iLCB0bXApOworCisJZGVxdWV1ZV9hbGxfYnVmZmVycyhmZ2Rldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlKTsKK30KKworc3RhdGljIGludCBzZXRfdHJhbnNtaXNzaW9uKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgZW5hYmxlZCkKK3sKKwlpbnQgcmVzID0gMDsKKworCWlmIChlbmFibGVkICYmICFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpCisJCXJlcyA9IGVuYWJsZV90cmFuc21pc3Npb24oZmdkZXYpOworCWVsc2UgaWYgKCFlbmFibGVkICYmIGZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkKKwkJZGlzYWJsZV90cmFuc21pc3Npb24oZmdkZXYpOworCisJcmV0dXJuIHJlczsKK30KKworLyogQ2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LiAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NzdGF0ZV91bnBsdWcoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0hXX0NUUkwsIDApOworCisJLyogU3RvcCB0cmFuc21pc3Npb24uICovCisJc3Bpbl9sb2NrKCZmZ2Rldi0+YnVmZmVyX2xvY2spOworCWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCA9IDA7CisKKwlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPSAtMTsKKwlmZ2Rldi0+dHJpcGxldF9yZWFkeSA9IDA7CisJaWYgKGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIpIHsKKwkJcGNpX3VubWFwX3NpbmdsZShmZ2Rldi0+cGRldiwgZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciwKKwkJCQkgZmdkZXYtPmZyYW1lX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIgPSAwOworCX0KKwlkZXF1ZXVlX2FsbF9idWZmZXJzKGZnZGV2KTsKKwlzcGluX3VubG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKK30KKworLyogQ2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LiAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NzdGF0ZV9jaGFuZ2Uoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJdTMyIGNzdGF0ZSA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19XQU5EX1NUUyk7CisJdW5zaWduZWQgbG9uZyB3aGVuOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCisJZGV2X2RiZyhkZXYsICJjYWJsZSBzdGF0ZSBjaGFuZ2U6ICV1XG4iLCBjc3RhdGUpOworCisJLyoKKwkgKiBXaGVuIHRoZSB3YW5kIGlzIHVucGx1Z2dlZCB3ZSByZXNldCBvdXIgc3RhdGUuIFRoZSBoYXJkd2FyZSB3aWxsCisJICogaGF2ZSBkb25lIHRoZSBzYW1lIGludGVybmFsbHkuCisJICoKKwkgKiBOb3RlIHdlIHNob3VsZCBuZXZlciBzZWUgYSBjYWJsZSAqcGx1Z2dlZCogZXZlbnQsIGFzIGludGVycnVwdHMKKwkgKiBzaG91bGQgb25seSBiZSBlbmFibGVkIHdoZW4gdHJhbnNtaXR0aW5nLCB3aGljaCByZXF1aXJlcyB0aGUgY2FibGUKKwkgKiB0byBiZSBwbHVnZ2VkLiBJZiB3ZSBkbyBzZWUgb25lIGl0IHByb2JhYmx5IG1lYW5zIHRoZSBjYWJsZSBoYXMgYmVlbgorCSAqIHVucGx1Z2dlZCBhbmQgcmUtcGx1Z2dlZCB2ZXJ5IHJhcGlkbHkuIFBvc3NpYmx5IGJlY2F1c2UgaXQgaGFzIGEKKwkgKiBicm9rZW4gd2lyZSBhbmQgaXMgbW9tZW50YXJpbHkgbG9zaW5nIGNvbnRhY3QuCisJICoKKwkgKiBUT0RPOiBBdCB0aGUgbW9tZW50IGlmIHlvdSBwbHVnIGluIHRoZSBjYWJsZSB0aGVuIGVuYWJsZSB0cmFuc21pc3Npb24KKwkgKiB0aGUgaGFyZHdhcmUgd2lsbCByYWlzZSBhIGNvdXBsZSBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzLCBzbworCSAqIGp1c3QgaWdub3JlIHRoZW0gZm9yIG5vdy4KKwkgKgorCSAqIE9uY2UgdGhlIGhhcmR3YXJlIGlzIGZpeGVkIHdlIHNob3VsZCBjb21wbGFpbiBhbmQgdHJlYXQgaXQgYXMgYW4KKwkgKiB1bnBsdWcuIE9yIGF0IGxlYXN0IHRyYWNrIGhvdyBmcmVxdWVudGx5IGl0IGlzIGhhcHBlbmluZyBhbmQgZG8KKwkgKiBzbyBpZiB0b28gbWFueSBjb21lIGluLgorCSAqLworCWlmIChjc3RhdGUpIHsKKwkJZGV2X3dhcm4oZGV2LCAiaWdub3JpbmcgdW5leHBlY3RlZCBwbHVnIGV2ZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwloYW5kbGVfY3N0YXRlX3VucGx1ZyhmZ2Rldik7CisKKwkvKgorCSAqIFJlY29yZCBjYWJsZSBzdGF0ZSBjaGFuZ2UgdGltZXN0YW1wICYgd2FrZSBhbnlvbmUgd2FpdGluZworCSAqIG9uIGEgY2FibGUgc3RhdGUgY2hhbmdlLiBCZSBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyBldmVudHMKKwkgKiBhcmUgbm90IG1pc3NlZCBpZiB3ZSBzb21laG93IGdldCB0d28gaW50ZXJydXB0cyBpbiBhIGppZmZ5LgorCSAqLworCXNwaW5fbG9jaygmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKKwl3aGVuID0gamlmZmllc182NDsKKwlpZiAod2hlbiA8PSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcCkKKwkJd2hlbiA9IGZnZGV2LT5jc3RhdGVfdHN0YW1wICsgMTsKKwlmZ2Rldi0+Y3N0YXRlX3RzdGFtcCA9IHdoZW47CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7CisJc3Bpbl91bmxvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7Cit9CisKKy8qIENhbGxlZCB3aXRoIGJ1ZmZlcl9sb2NrIGhlbGQuICovCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisKKwlwY2lfdW5tYXBfc2luZ2xlKGZnZGV2LT5wZGV2LCBmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyLAorCQkJIGZnZGV2LT5mcmFtZV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIgPSAwOworCisJYnVmID0gbGlzdF9lbnRyeShmZ2Rldi0+YnVmZmVyX3F1ZXVlLm5leHQsIHN0cnVjdCBiM2RmZ19idWZmZXIsIGxpc3QpOworCWlmIChidWYpIHsKKwkJZGV2X2RiZyhkZXYsICJoYW5kbGUgZnJhbWUgY29tcGxldGlvblxuIik7CisJCWlmIChmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPT0gQjNERkdfRlJBTUVTX1BFUl9CVUZGRVIgLSAxKSB7CisKKwkJCS8qIGxhc3QgZnJhbWUgb2YgdGhhdCB0cmlwbGV0IGNvbXBsZXRlZCAqLworCQkJZGV2X2RiZyhkZXYsICJ0cmlwbGV0IGNvbXBsZXRlZFxuIik7CisJCQlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRDsKKwkJCWxpc3RfZGVsX2luaXQoJmJ1Zi0+bGlzdCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlKTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAiZ290IGZyYW1lIGJ1dCBubyBidWZmZXIhXG4iKTsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBidWZmZXJfbG9jayBoZWxkLgorICoKKyAqIE5vdGUgdGhhdCBpZHggaXMgdGhlICgxLWJhc2VkKSAqbmV4dCogZnJhbWUgdG8gYmUgdHJhbnNmZXJyZWQsIHdoaWxlCisgKiBjdXJfZG1hX2ZyYW1lX2lkeCBpcyB0aGUgKDAtYmFzZWQpICpsYXN0KiBmcmFtZSB0byBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgKG9yCisgKiAtMSBpZiBub25lKS4gVGh1cyB0aGVyZSBzaG91bGQgYmUgYSBkaWZmZXJlbmNlIG9mIDIgYmV0d2VlbiB0aGVtLgorICovCitzdGF0aWMgYm9vbCBzZXR1cF9uZXh0X2ZyYW1lX3RyYW5zZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgaWR4KQoreworCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKwlib29sIG5lZWRfYWNrID0gMTsKKworCWRldl9kYmcoZGV2LCAicHJvZ3JhbSBETUEgdHJhbnNmZXIgZm9yIG5leHQgZnJhbWU6ICVkXG4iLCBpZHgpOworCisJYnVmID0gbGlzdF9lbnRyeShmZ2Rldi0+YnVmZmVyX3F1ZXVlLm5leHQsIHN0cnVjdCBiM2RmZ19idWZmZXIsIGxpc3QpOworCWlmIChidWYpIHsKKwkJaWYgKGlkeCA9PSBmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggKyAyKSB7CisJCQlpZiAoc2V0dXBfZnJhbWVfdHJhbnNmZXIoZmdkZXYsIGJ1ZiwgaWR4IC0gMSkpCisJCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gbWFwIERNQSBidWZmZXJcbiIpOworCQkJbmVlZF9hY2sgPSAwOworCQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICJmcmFtZSBtaXNtYXRjaCwgZ290ICVkLCBleHBlY3RlZCAlZFxuIiwKKwkJCQlpZHgsIGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCArIDIpOworCisJCQkvKiBGSVhNRTogaGFuZGxlIGRyb3BwZWQgdHJpcGxldHMgaGVyZSAqLworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3Qgc2V0dXAgRE1BLCBubyBidWZmZXJcbiIpOworCX0KKworCXJldHVybiBuZWVkX2FjazsKK30KKworc3RhdGljIGlycXJldHVybl90IGIzZGZnX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZGV2X2lkOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCXUzMiBzdHM7CisJdTggZHJvcHBlZDsKKwlib29sIG5lZWRfYWNrID0gMTsKKwlpcnFyZXR1cm5fdCByZXMgPSBJUlFfSEFORExFRDsKKworCXN0cyA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19ETUFfU1RTKTsKKwlpZiAodW5saWtlbHkoc3RzID09IDApKSB7CisJCWRldl93YXJuKGRldiwgImlnbm9yZSBpbnRlcnJ1cHQsIERNQSBzdGF0dXMgaXMgMFxuIik7CisJCXJlcyA9IElSUV9OT05FOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodW5saWtlbHkoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAiaWdub3JlIGludGVycnVwdCwgVFggZGlzYWJsZWRcbiIpOworCQlyZXMgPSBJUlFfSEFORExFRDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSGFuZGxlIGRyb3BwZWQgZnJhbWVzLCBhcyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCisJZHJvcHBlZCA9IChzdHMgPj4gOCkgJiAweGZmOworCWRldl9kYmcoZGV2LCAiaW50cjogRE1BX1NUUz0lMDh4IChkcm9wPSVkIGNvbXA9JWQgbmV4dD0lZClcbiIsCisJCXN0cywgZHJvcHBlZCwgISEoc3RzICYgMHg0KSwgc3RzICYgMHgzKTsKKwlpZiAodW5saWtlbHkoZHJvcHBlZCA+IDApKSB7CisJCXNwaW5fbG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkICs9IGRyb3BwZWQ7CisJCXNwaW5fdW5sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwl9CisKKwkvKiBIYW5kbGUgYSBjYWJsZSBzdGF0ZSBjaGFuZ2UgKGkuZS4gdGhlIHdhbmQgYmVpbmcgdW5wbHVnZ2VkKS4gKi8KKwlpZiAoc3RzICYgMHgwOCkgeworCQloYW5kbGVfY3N0YXRlX2NoYW5nZShmZ2Rldik7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZmdkZXYtPmJ1ZmZlcl9xdWV1ZSkpKSB7CisKKwkJLyogRklYTUUgbmVlZCBtb3JlIHNhbml0eSBjaGVja2luZyBoZXJlICovCisJCWRldl9pbmZvKGRldiwgImJ1ZmZlciBub3QgcmVhZHkgZm9yIG5leHQgdHJhbnNmZXJcbiIpOworCQlmZ2Rldi0+dHJpcGxldF9yZWFkeSA9IDE7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBIYXMgYSBmcmFtZSB0cmFuc2ZlciBiZWVuIGNvbXBsZXRlZD8gKi8KKwlpZiAoc3RzICYgMHg0KSB7CisJCXUzMiBkbWFfc3RhdHVzID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9TVFMpOworCisJCS8qIENoZWNrIGZvciBETUEgZXJyb3JzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gKi8KKwkJaWYgKHVubGlrZWx5KGRtYV9zdGF0dXMgJiAweDEpKSB7CisJCQlkZXZfZXJyKGRldiwgIkVDMjIwIGVycm9yOiAlMDh4XG4iLCBkbWFfc3RhdHVzKTsKKworCQkJLyogRklYTUUgZmxlc2ggb3V0IGVycm9yIGhhbmRsaW5nICovCisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQkvKiBTYW5pdHkgY2hlY2ssIHdlIHNob3VsZCBoYXZlIGEgZnJhbWUgaW5kZXggYXQgdGhpcyBwb2ludC4gKi8KKwkJaWYgKHVubGlrZWx5KGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9PSAtMSkpIHsKKwkJCWRldl9lcnIoZGV2LCAiY29tcGxldGVkIGJ1dCBubyBsYXN0IGlkeD9cbiIpOworCisJCQkvKiBGSVhNRSBmbGVzaCBvdXQgZXJyb3IgaGFuZGxpbmcgKi8KKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCXRyYW5zZmVyX2NvbXBsZXRlKGZnZGV2KTsKKwl9CisKKwkvKiBJcyB0aGVyZSBhbm90aGVyIGZyYW1lIHRyYW5zZmVyIHBlbmRpbmc/ICovCisJaWYgKHN0cyAmIDB4MykKKwkJbmVlZF9hY2sgPSBzZXR1cF9uZXh0X2ZyYW1lX3RyYW5zZmVyKGZnZGV2LCBzdHMgJiAweDMpOworCWVsc2UKKwkJZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gLTE7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7CitvdXQ6CisJaWYgKG5lZWRfYWNrKSB7CisJCWRldl9kYmcoZGV2LCAiYWNrbm93bGVkZ2luZyBpbnRlcnJ1cHRcbiIpOworCQliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9TVFMsIDB4MGIpOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGIzZGZnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPQorCQljb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGIzZGZnX2RldiwgY2hhcmRldik7CisKKwlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAib3BlblxuIik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZmdkZXY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjNkZmdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAicmVsZWFzZVxuIik7CisJZGlzYWJsZV90cmFuc21pc3Npb24oZmdkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBiM2RmZ19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQjNERkdfSU9DR0ZSTVNaOgorCQlyZXR1cm4gX19wdXRfdXNlcihmZ2Rldi0+ZnJhbWVfc2l6ZSwgKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIEIzREZHX0lPQ0dXQU5EU1RBVDoKKwkJcmV0dXJuIGdldF93YW5kX3N0YXR1cyhmZ2RldiwgKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIEIzREZHX0lPQ1RUUkFOUzoKKwkJcmV0dXJuIHNldF90cmFuc21pc3Npb24oZmdkZXYsIChpbnQpIGFyZyk7CisJY2FzZSBCM0RGR19JT0NUUVVFVUVCVUY6CisJCXJldHVybiBxdWV1ZV9idWZmZXIoZmdkZXYsIChpbnQpIGFyZyk7CisJY2FzZSBCM0RGR19JT0NUUE9MTEJVRjoKKwkJcmV0dXJuIHBvbGxfYnVmZmVyKGZnZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIEIzREZHX0lPQ1RXQUlUQlVGOgorCQlyZXR1cm4gd2FpdF9idWZmZXIoZmdkZXYsICh2b2lkIF9fdXNlciAqKSBhcmcpOworCWRlZmF1bHQ6CisJCWRldl9kYmcoJmZnZGV2LT5wZGV2LT5kZXYsICJ1bnJlY29nbmlzZWQgaW9jdGwgJXhcbiIsIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBiM2RmZ19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICpwb2xsX3RhYmxlKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHdoZW47CisJaW50IGk7CisJaW50IHIgPSAwOworCisJd2hlbiA9IGdldF9jc3RhdGVfY2hhbmdlKGZnZGV2KTsKKwlwb2xsX3dhaXQoZmlscCwgJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlLCBwb2xsX3RhYmxlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKSB7CisJCWlmIChmZ2Rldi0+YnVmZmVyc1tpXS5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSB7CisJCQlyID0gUE9MTElOIHwgUE9MTFJETk9STTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJLyogVE9ETzogQ29uZmlybSB0aGlzIGlzIGhvdyB3ZSB3YW50IHRvIGNvbW11bmljYXRlIHRoZSBjaGFuZ2UuICovCisJaWYgKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgfHwgd2hlbiAhPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2RldikpCisJCXIgPSBQT0xMRVJSOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgYjNkZmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyB2c2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGJ1ZmRhdGFsZW4gPSBiM2RmZ19uYnVmICogZmdkZXYtPmZyYW1lX3NpemUgKiAzOworCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBidWZkYXRhbGVuIC0gb2Zmc2V0OworCWludCByID0gMDsKKworCWlmICh2c2l6ZSA8PSBwc2l6ZSkgeworCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQgfCBWTV9DQU5fTk9OTElORUFSIHwKKwkJCQkgVk1fUEZOTUFQOworCQl2bWEtPnZtX29wcyA9ICZiM2RmZ192bV9vcHM7CisJfSBlbHNlIHsKKwkJciA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGIzZGZnX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBiM2RmZ19vcGVuLAorCS5yZWxlYXNlID0gYjNkZmdfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBiM2RmZ19pb2N0bCwKKwkucG9sbCA9IGIzZGZnX3BvbGwsCisJLm1tYXAgPSBiM2RmZ19tbWFwLAorfTsKKworc3RhdGljIHZvaWQgZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwlpbnQgaSwgajsKKwlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgQjNERkdfRlJBTUVTX1BFUl9CVUZGRVI7IGorKykKKwkJCWtmcmVlKGZnZGV2LT5idWZmZXJzW2ldLmZyYW1lW2pdKTsKKwlrZnJlZShmZ2Rldi0+YnVmZmVycyk7Cit9CisKKy8qIGluaXRpYWxpemUgZGV2aWNlIGFuZCBhbnkgZGF0YSBzdHJ1Y3R1cmVzLiBjYWxsZWQgYmVmb3JlIGFueSBpbnRlcnJ1cHRzCisgKiBhcmUgZW5hYmxlZC4gKi8KK3N0YXRpYyBpbnQgYjNkZmdfaW5pdF9kZXYoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJaW50IGksIGo7CisJdTMyIGZybV9zaXplID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0ZSTV9TSVpFKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cy4gSW4gYWJub3JtYWwgY2lyY3Vtc3RhbmNlcyAoZS5nLiBhZnRlciBhIGNyYXNoKQorCSAqIHRoZSBib2FyZCBtYXkgc3RpbGwgYmUgdHJhbnNtaXR0aW5nIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uIElmIHdlCisJICogZW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYmVmb3JlIHdlIGxhdGVyIGVuYWJsZSB0aGVtLCB3ZQorCSAqIGFyZSBzdXJlIHRvIGNhcHR1cmUgYSB0cmlwbGV0IGZyb20gdGhlIHN0YXJ0LCByYXRoZXIgdGhhbiBzdGFydGluZworCSAqIGZyb20gZnJhbWUgMiBvciAzLiBEaXNhYmxpbmcgaW50ZXJydXB0cyBjYXVzZXMgdGhlIEZHIHRvIHRocm93IGF3YXkKKwkgKiBhbGwgYnVmZmVyZWQgZGF0YSBhbmQgc3RvcCBidWZmZXJpbmcgbW9yZSB1bnRpbCBpbnRlcnJ1cHRzIGFyZQorCSAqIGVuYWJsZWQgYWdhaW4uCisJICovCisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAwKTsKKworCWZnZGV2LT5mcmFtZV9zaXplID0gZnJtX3NpemUgKiA0MDk2OworCWZnZGV2LT5idWZmZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGIzZGZnX2J1ZmZlcikgKiBiM2RmZ19uYnVmLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIWZnZGV2LT5idWZmZXJzKQorCQlnb3RvIGVycl9ub19idWY7CisJZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykgeworCQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbaV07CisJCWZvciAoaiA9IDA7IGogPCBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUjsgaisrKSB7CisJCQlidWYtPmZyYW1lW2pdID0ga21hbGxvYyhmZ2Rldi0+ZnJhbWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1Zi0+ZnJhbWVbal0pCisJCQkJZ290byBlcnJfbm9fbWVtOworCQl9CisJCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZmZ2Rldi0+YnVmZmVyX3F1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJmZnZGV2LT5idWZmZXJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmZnZGV2LT5jc3RhdGVfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCXJldHVybiAwOworCitlcnJfbm9fbWVtOgorCWZyZWVfYWxsX2ZyYW1lX2J1ZmZlcnMoZmdkZXYpOworZXJyX25vX2J1ZjoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyogZmluZCBuZXh0IGZyZWUgbWlub3IgbnVtYmVyLCByZXR1cm5zIC0xIGlmIG5vbmUgYXJlIGF2YWlsYWJpbGUgKi8KK3N0YXRpYyBpbnQgZ2V0X2ZyZWVfbWlub3Iodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQjNERkdfTUFYX0RFVlM7IGkrKykgeworCQlpZiAoYjNkZmdfZGV2aWNlc1tpXSA9PSAwKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYjNkZmdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0ga3phbGxvYyhzaXplb2YoKmZnZGV2KSwgR0ZQX0tFUk5FTCk7CisJaW50IHIgPSAwOworCWludCBtaW5vciA9IGdldF9mcmVlX21pbm9yKCk7CisJZGV2X3QgZGV2bm8gPSBNS0RFVihNQUpPUihiM2RmZ19kZXZ0KSwgbWlub3IpOworCXVuc2lnbmVkIGxvbmcgcmVzX2xlbjsKKwlyZXNvdXJjZV9zaXplX3QgcmVzX2Jhc2U7CisKKwlpZiAoZmdkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAobWlub3IgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInRvbyBtYW55IGRldmljZXMgZm91bmQhXG4iKTsKKwkJciA9IC1FSU87CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJYjNkZmdfZGV2aWNlc1ttaW5vcl0gPSAxOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9iZSBkZXZpY2Ugd2l0aCBJUlEgJWRcbiIsIHBkZXYtPmlycSk7CisKKwljZGV2X2luaXQoJmZnZGV2LT5jaGFyZGV2LCAmYjNkZmdfZm9wcyk7CisJZmdkZXYtPmNoYXJkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKworCXIgPSBjZGV2X2FkZCgmZmdkZXYtPmNoYXJkZXYsIGRldm5vLCAxKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWRkIGNoYXIgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9taW5vcjsKKwl9CisKKwlmZ2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSgKKwkJYjNkZmdfY2xhc3MsCisJCSZwZGV2LT5kZXYsCisJCWRldm5vLAorCQlkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldiksCisJCURSSVZFUl9OQU1FICIlZCIsIG1pbm9yKTsKKworCWlmIChJU19FUlIoZmdkZXYtPmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGNyZWF0ZSBkZXZpY2VcbiIpOworCQlyID0gUFRSX0VSUihmZ2Rldi0+ZGV2KTsKKwkJZ290byBlcnJfZGVsX2NkZXY7CisJfQorCisJciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2Rldl91bnJlZzsKKwl9CisKKwlyZXNfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBCM0RGR19CQVJfUkVHUyk7CisJaWYgKHJlc19sZW4gIT0gQjNERkdfUkVHU19MRU5HVEgpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZWdpc3RlciByZXNvdXJjZSBzaXplXG4iKTsKKwkJciA9IC1FSU87CisJCWdvdG8gZXJyX2Rpc2FibGU7CisJfQorCisJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBCM0RGR19CQVJfUkVHUykKKwkJCQkhPSAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1NJWkVBTElHTikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZXNvdXJjZSBmbGFnc1xuIik7CisJCXIgPSAtRUlPOworCQlnb3RvIGVycl9kaXNhYmxlOworCX0KKwlyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnJfZGlzYWJsZTsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOworCQlnb3RvIGVycl9mcmVlX3JlczsKKwl9CisKKwlyZXNfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBCM0RGR19CQVJfUkVHUyk7CisJZmdkZXYtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocmVzX2Jhc2UsIHJlc19sZW4pOworCWlmICghZmdkZXYtPnJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVncyBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXIgPSAtRUlPOworCQlnb3RvIGVycl9mcmVlX3JlczsKKwl9CisKKwlmZ2Rldi0+cGRldiA9IHBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGZnZGV2KTsKKwlyID0gYjNkZmdfaW5pdF9kZXYoZmdkZXYpOworCWlmIChyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGFsaXplIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKworCXIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGIzZGZnX2ludHIsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgZmdkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlcXVlc3QgaXJxICVkXG4iLCBwZGV2LT5pcnEpOworCQlnb3RvIGVycl9mcmVlX2J1ZnM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2J1ZnM6CisJZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhmZ2Rldik7CitlcnJfdW5tYXA6CisJaW91bm1hcChmZ2Rldi0+cmVncyk7CitlcnJfZnJlZV9yZXM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2Vycl9kZXZfdW5yZWc6CisJZGV2aWNlX2Rlc3Ryb3koYjNkZmdfY2xhc3MsIGRldm5vKTsKK2Vycl9kZWxfY2RldjoKKwljZGV2X2RlbCgmZmdkZXYtPmNoYXJkZXYpOworZXJyX3JlbGVhc2VfbWlub3I6CisJYjNkZmdfZGV2aWNlc1ttaW5vcl0gPSAwOworZXJyX2ZyZWU6CisJa2ZyZWUoZmdkZXYpOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgYjNkZmdfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGludCBtaW5vciA9IE1JTk9SKGZnZGV2LT5jaGFyZGV2LmRldik7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZW1vdmVcbiIpOworCisJZnJlZV9pcnEocGRldi0+aXJxLCBmZ2Rldik7CisJaW91bm1hcChmZ2Rldi0+cmVncyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJZGV2aWNlX2Rlc3Ryb3koYjNkZmdfY2xhc3MsIE1LREVWKE1BSk9SKGIzZGZnX2RldnQpLCBtaW5vcikpOworCWNkZXZfZGVsKCZmZ2Rldi0+Y2hhcmRldik7CisJZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhmZ2Rldik7CisJa2ZyZWUoZmdkZXYpOworCWIzZGZnX2RldmljZXNbbWlub3JdID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGIzZGZnX2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IGIzZGZnX2lkcywKKwkucHJvYmUgPSBiM2RmZ19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYjNkZmdfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGIzZGZnX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlpZiAoYjNkZmdfbmJ1ZiA8IDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCQkgICAiOiBidWZmZXJfY291bnQgaXMgb3V0IG9mIHJhbmdlIChtdXN0IGJlID49IDIpIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogbG9hZGVkXG4iKTsKKworCWIzZGZnX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBEUklWRVJfTkFNRSk7CisJaWYgKElTX0VSUihiM2RmZ19jbGFzcykpCisJCXJldHVybiBQVFJfRVJSKGIzZGZnX2NsYXNzKTsKKworCXIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZiM2RmZ19kZXZ0LCAwLCBCM0RGR19NQVhfREVWUywgRFJJVkVSX05BTUUpOworCWlmIChyKQorCQlnb3RvIGVycjE7CisKKwlyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYjNkZmdfZHJpdmVyKTsKKwlpZiAocikKKwkJZ290byBlcnIyOworCisJcmV0dXJuIHI7CisKK2VycjI6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGIzZGZnX2RldnQsIEIzREZHX01BWF9ERVZTKTsKK2VycjE6CisJY2xhc3NfZGVzdHJveShiM2RmZ19jbGFzcyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiM2RmZ19tb2R1bGVfZXhpdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogdW5sb2FkZWRcbiIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYjNkZmdfZHJpdmVyKTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYjNkZmdfZGV2dCwgQjNERkdfTUFYX0RFVlMpOworCWNsYXNzX2Rlc3Ryb3koYjNkZmdfY2xhc3MpOworfQorCittb2R1bGVfaW5pdChiM2RmZ19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChiM2RmZ19tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKaW5kZXggODNhOTNhNS4uMmQ4MTlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwpAQCAtNiw2ICs2LDEzIEBACiAJICBFbmFibGUgc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgZGF0YSBhY3F1aXNpdGlvbiBkZXZpY2VzCiAJICBmb3IgTGludXguCiAKK2NvbmZpZyBDT01FRElfREVCVUcKKwlib29sICJDb21lZGkgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gQ09NRURJICE9IG4KKwloZWxwCisJICBUaGlzIGlzIGFuIG9wdGlvbiBmb3IgdXNlIGJ5IGRldmVsb3BlcnM7IG1vc3QgcGVvcGxlIHNob3VsZAorCSAgc2F5IE4gaGVyZS4gVGhpcyBlbmFibGVzIGNvbWVkaSBjb3JlIGFuZCBkcml2ZXIgZGVidWdnaW5nLgorCiBjb25maWcgQ09NRURJX1JUCiAJdHJpc3RhdGUgIkNvbWVkaSBSZWFsLXRpbWUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENPTUVESSAmJiBSVApAQCAtMjAsNiArMjcsMTMgQEAKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgbG90cyBvZiBjb21lZGkgUENJIGRyaXZlcnMgdG8gYmUgYnVpbHQKIAorY29uZmlnIENPTUVESV9QQ01DSUFfRFJJVkVSUworCXRyaXN0YXRlICJDb21lZGkgUENNQ0lBIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBDT01FREkgJiYgUENNQ0lBSQorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBsb3RzIG9mIGNvbWVkaSBQQ01DSUEgZHJpdmVycyB0byBiZSBidWlsdAorCiBjb25maWcgQ09NRURJX1VTQl9EUklWRVJTCiAJdHJpc3RhdGUgIkNvbWVkaSBVU0IgZHJpdmVycyIKIAlkZXBlbmRzIG9uIENPTUVESSAmJiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCmluZGV4IDM2ZDJlMWIuLmU2YjVmMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaApAQCAtNTcsOSArNTcsNiBAQAogLyogbWF4IGxlbmd0aCBvZiBkZXZpY2UgYW5kIGRyaXZlciBuYW1lcyAqLwogI2RlZmluZSBDT01FRElfTkFNRUxFTiAyMAogCi0JdHlwZWRlZiB1bnNpZ25lZCBpbnQgbHNhbXBsX3Q7Ci0JdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzYW1wbF90OwotCiAvKiBwYWNrcyBhbmQgdW5wYWNrcyBhIGNoYW5uZWwvcmFuZ2UgbnVtYmVyICovCiAKICNkZWZpbmUgQ1JfUEFDSyhjaGFuLCBybmcsIGFyZWYpCQkoKCgoYXJlZikmMHgzKTw8MjQpIHwgKCgocm5nKSYweGZmKTw8MTYpIHwgKGNoYW4pKQpAQCAtMjYxLDEwICsyNTgsMTEgQEAKIAlJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDID0gMjAwNCwJLyogR2V0IG1hc3RlciBjbG9jayBzb3VyY2UgKi8KIAlJTlNOX0NPTkZJR19TRVRfT1RIRVJfU1JDID0gMjAwNSwJLyogU2V0IG90aGVyIHNvdXJjZSAqLwogLyoJSU5TTl9DT05GSUdfR0VUX09USEVSX1NSQyA9IDIwMDYsKi8JLyogR2V0IG90aGVyIHNvdXJjZSAqLwotCUlOU05fQ09ORklHX0dFVF9IQVJEV0FSRV9CVUZGRVJfU0laRSwJLyogR2V0IHNpemUgaW4gYnl0ZXMgb2YKLQkJCQkJCSAgc3ViZGV2aWNlJ3Mgb24tYm9hcmQgZmlmb3MKLQkJCQkJCSAgdXNlZCBkdXJpbmcgc3RyZWFtaW5nCi0JCQkJCQkgIGlucHV0L291dHB1dCAqLworCUlOU05fQ09ORklHX0dFVF9IQVJEV0FSRV9CVUZGRVJfU0laRSA9IDIwMDYsCS8qIEdldCBzaXplIGluIGJ5dGVzIG9mCisJCQkJCQkJICAgc3ViZGV2aWNlJ3Mgb24tYm9hcmQKKwkJCQkJCQkgICBmaWZvcyB1c2VkIGR1cmluZworCQkJCQkJCSAgIHN0cmVhbWluZworCQkJCQkJCSAgIGlucHV0L291dHB1dCAqLwogCUlOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREUgPSA0MDk3LAogCUlOU05fQ09ORklHXzgyNTRfU0VUX01PREUgPSBJTlNOX0NPTkZJR19TRVRfQ09VTlRFUl9NT0RFLAkvKiBkZXByZWNhdGVkICovCiAJSU5TTl9DT05GSUdfODI1NF9SRUFEX1NUQVRVUyA9IDQwOTgsCkBAIC0yOTMsNDUgKzI5MSwzMiBAQAogLyogaW9jdGxzICovCiAKICNkZWZpbmUgQ0lPICdkJwotI2RlZmluZSBDT01FRElfREVWQ09ORklHIF9JT1coQ0lPLCAwLCBjb21lZGlfZGV2Y29uZmlnKQotI2RlZmluZSBDT01FRElfREVWSU5GTyBfSU9SKENJTywgMSwgY29tZWRpX2RldmluZm8pCi0jZGVmaW5lIENPTUVESV9TVUJESU5GTyBfSU9SKENJTywgMiwgY29tZWRpX3N1YmRpbmZvKQotI2RlZmluZSBDT01FRElfQ0hBTklORk8gX0lPUihDSU8sIDMsIGNvbWVkaV9jaGFuaW5mbykKKyNkZWZpbmUgQ09NRURJX0RFVkNPTkZJRyBfSU9XKENJTywgMCwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcpCisjZGVmaW5lIENPTUVESV9ERVZJTkZPIF9JT1IoQ0lPLCAxLCBzdHJ1Y3QgY29tZWRpX2RldmluZm8pCisjZGVmaW5lIENPTUVESV9TVUJESU5GTyBfSU9SKENJTywgMiwgc3RydWN0IGNvbWVkaV9zdWJkaW5mbykKKyNkZWZpbmUgQ09NRURJX0NIQU5JTkZPIF9JT1IoQ0lPLCAzLCBzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvKQogI2RlZmluZSBDT01FRElfVFJJRyBfSU9XUihDSU8sIDQsIGNvbWVkaV90cmlnKQogI2RlZmluZSBDT01FRElfTE9DSyBfSU8oQ0lPLCA1KQogI2RlZmluZSBDT01FRElfVU5MT0NLIF9JTyhDSU8sIDYpCiAjZGVmaW5lIENPTUVESV9DQU5DRUwgX0lPKENJTywgNykKLSNkZWZpbmUgQ09NRURJX1JBTkdFSU5GTyBfSU9SKENJTywgOCwgY29tZWRpX3JhbmdlaW5mbykKLSNkZWZpbmUgQ09NRURJX0NNRCBfSU9SKENJTywgOSwgY29tZWRpX2NtZCkKLSNkZWZpbmUgQ09NRURJX0NNRFRFU1QgX0lPUihDSU8sIDEwLCBjb21lZGlfY21kKQotI2RlZmluZSBDT01FRElfSU5TTkxJU1QgX0lPUihDSU8sIDExLCBjb21lZGlfaW5zbmxpc3QpCi0jZGVmaW5lIENPTUVESV9JTlNOIF9JT1IoQ0lPLCAxMiwgY29tZWRpX2luc24pCi0jZGVmaW5lIENPTUVESV9CVUZDT05GSUcgX0lPUihDSU8sIDEzLCBjb21lZGlfYnVmY29uZmlnKQotI2RlZmluZSBDT01FRElfQlVGSU5GTyBfSU9XUihDSU8sIDE0LCBjb21lZGlfYnVmaW5mbykKKyNkZWZpbmUgQ09NRURJX1JBTkdFSU5GTyBfSU9SKENJTywgOCwgc3RydWN0IGNvbWVkaV9yYW5nZWluZm8pCisjZGVmaW5lIENPTUVESV9DTUQgX0lPUihDSU8sIDksIHN0cnVjdCBjb21lZGlfY21kKQorI2RlZmluZSBDT01FRElfQ01EVEVTVCBfSU9SKENJTywgMTAsIHN0cnVjdCBjb21lZGlfY21kKQorI2RlZmluZSBDT01FRElfSU5TTkxJU1QgX0lPUihDSU8sIDExLCBzdHJ1Y3QgY29tZWRpX2luc25saXN0KQorI2RlZmluZSBDT01FRElfSU5TTiBfSU9SKENJTywgMTIsIHN0cnVjdCBjb21lZGlfaW5zbikKKyNkZWZpbmUgQ09NRURJX0JVRkNPTkZJRyBfSU9SKENJTywgMTMsIHN0cnVjdCBjb21lZGlfYnVmY29uZmlnKQorI2RlZmluZSBDT01FRElfQlVGSU5GTyBfSU9XUihDSU8sIDE0LCBzdHJ1Y3QgY29tZWRpX2J1ZmluZm8pCiAjZGVmaW5lIENPTUVESV9QT0xMIF9JTyhDSU8sIDE1KQogCiAvKiBzdHJ1Y3R1cmVzICovCiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV90cmlnX3N0cnVjdCBjb21lZGlfdHJpZzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9jbWRfc3RydWN0IGNvbWVkaV9jbWQ7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfaW5zbl9zdHJ1Y3QgY29tZWRpX2luc247Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfaW5zbmxpc3Rfc3RydWN0IGNvbWVkaV9pbnNubGlzdDsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9jaGFuaW5mb19zdHJ1Y3QgY29tZWRpX2NoYW5pbmZvOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvX3N0cnVjdCBjb21lZGlfc3ViZGluZm87Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfZGV2aW5mb19zdHJ1Y3QgY29tZWRpX2RldmluZm87Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnX3N0cnVjdCBjb21lZGlfZGV2Y29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mb19zdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9rcmFuZ2Vfc3RydWN0IGNvbWVkaV9rcmFuZ2U7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfYnVmY29uZmlnX3N0cnVjdCBjb21lZGlfYnVmY29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2J1ZmluZm9fc3RydWN0IGNvbWVkaV9idWZpbmZvOwotCi1zdHJ1Y3QgY29tZWRpX3RyaWdfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfdHJpZyB7CiAJdW5zaWduZWQgaW50IHN1YmRldjsJLyogc3ViZGV2aWNlICovCiAJdW5zaWduZWQgaW50IG1vZGU7CS8qIG1vZGUgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG5fY2hhbjsJLyogbnVtYmVyIG9mIGNoYW5uZWxzICovCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdDsJLyogY2hhbm5lbC9yYW5nZSBsaXN0ICovCi0Jc2FtcGxfdCAqZGF0YTsJLyogZGF0YSBsaXN0LCBzaXplIGRlcGVuZHMgb24gc3ViZCBmbGFncyAqLworCXNob3J0ICpkYXRhOwkvKiBkYXRhIGxpc3QsIHNpemUgZGVwZW5kcyBvbiBzdWJkIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG47CS8qIG51bWJlciBvZiBzY2FucyAqLwogCXVuc2lnbmVkIGludCB0cmlnc3JjOwogCXVuc2lnbmVkIGludCB0cmlndmFyOwpAQCAtMzQwLDIxICszMjUsMjEgQEAKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwogfTsKIAotc3RydWN0IGNvbWVkaV9pbnNuX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2luc24gewogCXVuc2lnbmVkIGludCBpbnNuOwogCXVuc2lnbmVkIGludCBuOwotCWxzYW1wbF90ICpkYXRhOworCXVuc2lnbmVkIGludCAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgc3ViZGV2OwogCXVuc2lnbmVkIGludCBjaGFuc3BlYzsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwogfTsKIAotc3RydWN0IGNvbWVkaV9pbnNubGlzdF9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9pbnNubGlzdCB7CiAJdW5zaWduZWQgaW50IG5faW5zbnM7Ci0JY29tZWRpX2luc24gKmluc25zOworCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbnM7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2NtZF9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9jbWQgewogCXVuc2lnbmVkIGludCBzdWJkZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCkBAIC0zNzYsMzcgKzM2MSwzNyBAQAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Q7CS8qIGNoYW5uZWwvcmFuZ2UgbGlzdCAqLwogCXVuc2lnbmVkIGludCBjaGFubGlzdF9sZW47CiAKLQlzYW1wbF90ICpkYXRhOwkvKiBkYXRhIGxpc3QsIHNpemUgZGVwZW5kcyBvbiBzdWJkIGZsYWdzICovCisJc2hvcnQgKmRhdGE7CS8qIGRhdGEgbGlzdCwgc2l6ZSBkZXBlbmRzIG9uIHN1YmQgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW47CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2NoYW5pbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvIHsKIAl1bnNpZ25lZCBpbnQgc3ViZGV2OwotCWxzYW1wbF90ICptYXhkYXRhX2xpc3Q7CisJdW5zaWduZWQgaW50ICptYXhkYXRhX2xpc3Q7CiAJdW5zaWduZWQgaW50ICpmbGFnbGlzdDsKIAl1bnNpZ25lZCBpbnQgKnJhbmdlbGlzdDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzRdOwogfTsKIAotc3RydWN0IGNvbWVkaV9yYW5nZWluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfcmFuZ2VpbmZvIHsKIAl1bnNpZ25lZCBpbnQgcmFuZ2VfdHlwZTsKIAl2b2lkICpyYW5nZV9wdHI7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2tyYW5nZV9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9rcmFuZ2UgewogCWludCBtaW47CS8qIGZpeGVkIHBvaW50LCBtdWx0aXBseSBieSAxZS02ICovCiAJaW50IG1heDsJLyogZml4ZWQgcG9pbnQsIG11bHRpcGx5IGJ5IDFlLTYgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCiAKLXN0cnVjdCBjb21lZGlfc3ViZGluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfc3ViZGluZm8gewogCXVuc2lnbmVkIGludCB0eXBlOwogCXVuc2lnbmVkIGludCBuX2NoYW47CiAJdW5zaWduZWQgaW50IHN1YmRfZmxhZ3M7CiAJdW5zaWduZWQgaW50IHRpbWVyX3R5cGU7CiAJdW5zaWduZWQgaW50IGxlbl9jaGFubGlzdDsKLQlsc2FtcGxfdCBtYXhkYXRhOworCXVuc2lnbmVkIGludCBtYXhkYXRhOwogCXVuc2lnbmVkIGludCBmbGFnczsJLyogY2hhbm5lbCBmbGFncyAqLwogCXVuc2lnbmVkIGludCByYW5nZV90eXBlOwkvKiBsb29rdXAgaW4ga2VybmVsICovCiAJdW5zaWduZWQgaW50IHNldHRsaW5nX3RpbWVfMDsKQEAgLTQxNCw3ICszOTksNyBAQAogCXVuc2lnbmVkIGludCB1bnVzZWRbOF07CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2RldmluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfZGV2aW5mbyB7CiAJdW5zaWduZWQgaW50IHZlcnNpb25fY29kZTsKIAl1bnNpZ25lZCBpbnQgbl9zdWJkZXZzOwogCWNoYXIgZHJpdmVyX25hbWVbQ09NRURJX05BTUVMRU5dOwpAQCAtNDI0LDEyICs0MDksMTIgQEAKIAlpbnQgdW51c2VkWzMwXTsKIH07CiAKLXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyB7CiAJY2hhciBib2FyZF9uYW1lW0NPTUVESV9OQU1FTEVOXTsKIAlpbnQgb3B0aW9uc1tDT01FRElfTkRFVkNPTkZPUFRTXTsKIH07CiAKLXN0cnVjdCBjb21lZGlfYnVmY29uZmlnX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZyB7CiAJdW5zaWduZWQgaW50IHN1YmRldmljZTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTQzOSw3ICs0MjQsNyBAQAogCXVuc2lnbmVkIGludCB1bnVzZWRbNF07CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2J1ZmluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfYnVmaW5mbyB7CiAJdW5zaWduZWQgaW50IHN1YmRldmljZTsKIAl1bnNpZ25lZCBpbnQgYnl0ZXNfcmVhZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2NvbXBhdDMyLmMKaW5kZXggN2QwMTE2Yi4uMWI5YzJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9jb21wYXQzMi5jCkBAIC0zNywzMSArMzcsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CS8qIGZvciAodW4pcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uICovCiAjZW5kaWYKIAotI2RlZmluZSBDT01FREkzMl9DSEFOSU5GTyBfSU9SKENJTywzLGNvbWVkaTMyX2NoYW5pbmZvKQotI2RlZmluZSBDT01FREkzMl9SQU5HRUlORk8gX0lPUihDSU8sOCxjb21lZGkzMl9yYW5nZWluZm8pCisjZGVmaW5lIENPTUVESTMyX0NIQU5JTkZPIF9JT1IoQ0lPLCAzLCBzdHJ1Y3QgY29tZWRpMzJfY2hhbmluZm9fc3RydWN0KQorI2RlZmluZSBDT01FREkzMl9SQU5HRUlORk8gX0lPUihDSU8sIDgsIHN0cnVjdCBjb21lZGkzMl9yYW5nZWluZm9fc3RydWN0KQogLyogTi5CLiBDT01FREkzMl9DTUQgYW5kIENPTUVESV9DTUQgb3VnaHQgdG8gdXNlIF9JT1dSLCBub3QgX0lPUi4KICAqIEl0J3MgdG9vIGxhdGUgdG8gY2hhbmdlIGl0IG5vdywgYnV0IGl0IG9ubHkgYWZmZWN0cyB0aGUgY29tbWFuZCBudW1iZXIuICovCi0jZGVmaW5lIENPTUVESTMyX0NNRCBfSU9SKENJTyw5LGNvbWVkaTMyX2NtZCkKKyNkZWZpbmUgQ09NRURJMzJfQ01EIF9JT1IoQ0lPLCA5LCBzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCkKIC8qIE4uQi4gQ09NRURJMzJfQ01EVEVTVCBhbmQgQ09NRURJX0NNRFRFU1Qgb3VnaHQgdG8gdXNlIF9JT1dSLCBub3QgX0lPUi4KICAqIEl0J3MgdG9vIGxhdGUgdG8gY2hhbmdlIGl0IG5vdywgYnV0IGl0IG9ubHkgYWZmZWN0cyB0aGUgY29tbWFuZCBudW1iZXIuICovCi0jZGVmaW5lIENPTUVESTMyX0NNRFRFU1QgX0lPUihDSU8sMTAsY29tZWRpMzJfY21kKQotI2RlZmluZSBDT01FREkzMl9JTlNOTElTVCBfSU9SKENJTywxMSxjb21lZGkzMl9pbnNubGlzdCkKLSNkZWZpbmUgQ09NRURJMzJfSU5TTiBfSU9SKENJTywxMixjb21lZGkzMl9pbnNuKQorI2RlZmluZSBDT01FREkzMl9DTURURVNUIF9JT1IoQ0lPLCAxMCwgc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QpCisjZGVmaW5lIENPTUVESTMyX0lOU05MSVNUIF9JT1IoQ0lPLCAxMSwgc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCkKKyNkZWZpbmUgQ09NRURJMzJfSU5TTiBfSU9SKENJTywgMTIsIHN0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCkKIAotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpMzJfY2hhbmluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGkzMl9jaGFuaW5mb19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBzdWJkZXY7Ci0JY29tcGF0X3VwdHJfdCBtYXhkYXRhX2xpc3Q7CS8qIDMyLWJpdCAnbHNhbXBsX3QgKicgKi8KKwljb21wYXRfdXB0cl90IG1heGRhdGFfbGlzdDsJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAljb21wYXRfdXB0cl90IGZsYWdsaXN0OwkJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAljb21wYXRfdXB0cl90IHJhbmdlbGlzdDsJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAl1bnNpZ25lZCBpbnQgdW51c2VkWzRdOwotfSBjb21lZGkzMl9jaGFuaW5mbzsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX3JhbmdlaW5mb19zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaTMyX3JhbmdlaW5mb19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCByYW5nZV90eXBlOwogCWNvbXBhdF91cHRyX3QgcmFuZ2VfcHRyOwkvKiAzMi1iaXQgJ3ZvaWQgKicgKi8KLX0gY29tZWRpMzJfcmFuZ2VpbmZvOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IHN1YmRldjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHN0YXJ0X3NyYzsKQEAgLTc2LDM3ICs3NiwzNiBAQAogCXVuc2lnbmVkIGludCBzdG9wX2FyZzsKIAljb21wYXRfdXB0cl90IGNoYW5saXN0OwkJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAl1bnNpZ25lZCBpbnQgY2hhbmxpc3RfbGVuOwotCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAnc2FtcGxfdCAqJyAqLworCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAnc2hvcnQgKicgKi8KIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW47Ci19IGNvbWVkaTMyX2NtZDsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IHsKK3N0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IGluc247CiAJdW5zaWduZWQgaW50IG47Ci0JY29tcGF0X3VwdHJfdCBkYXRhOwkJLyogMzItYml0ICdsc2FtcGxfdCAqJyAqLworCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAndW5zaWduZWQgaW50IConICovCiAJdW5zaWduZWQgaW50IHN1YmRldjsKIAl1bnNpZ25lZCBpbnQgY2hhbnNwZWM7CiAJdW5zaWduZWQgaW50IHVudXNlZFszXTsKLX0gY29tZWRpMzJfaW5zbjsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpMzJfaW5zbmxpc3Rfc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbl9pbnNuczsKLQljb21wYXRfdXB0cl90IGluc25zOwkJLyogMzItYml0ICdjb21lZGlfaW5zbiAqJyAqLwotfSBjb21lZGkzMl9pbnNubGlzdDsKKwljb21wYXRfdXB0cl90IGluc25zOwkJLyogMzItYml0ICdzdHJ1Y3QgY29tZWRpX2luc24gKicgKi8KK307CiAKIC8qIEhhbmRsZSB0cmFuc2xhdGVkIGlvY3RsLiAqLwogc3RhdGljIGludCB0cmFuc2xhdGVkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpZiAoIWZpbGUtPmZfb3ApIHsKKwlpZiAoIWZpbGUtPmZfb3ApCiAJCXJldHVybiAtRU5PVFRZOwotCX0KKwogI2lmZGVmIEhBVkVfVU5MT0NLRURfSU9DVEwKIAlpZiAoZmlsZS0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwpIHsKIAkJaW50IHJjID0gKGludCkoKmZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKShmaWxlLCBjbWQsIGFyZyk7Ci0JCWlmIChyYyA9PSAtRU5PSU9DVExDTUQpIHsKKwkJaWYgKHJjID09IC1FTk9JT0NUTENNRCkKIAkJCXJjID0gLUVOT1RUWTsKLQkJfQogCQlyZXR1cm4gcmM7CiAJfQogI2VuZGlmCkBAIC0xMjQsOCArMTIzLDggQEAKIC8qIEhhbmRsZSAzMi1iaXQgQ09NRURJX0NIQU5JTkZPIGlvY3RsLiAqLwogc3RhdGljIGludCBjb21wYXRfY2hhbmluZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNvbWVkaV9jaGFuaW5mbyBfX3VzZXIgKmNoYW5pbmZvOwotCWNvbWVkaTMyX2NoYW5pbmZvIF9fdXNlciAqY2hhbmluZm8zMjsKKwlzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvIF9fdXNlciAqY2hhbmluZm87CisJc3RydWN0IGNvbWVkaTMyX2NoYW5pbmZvX3N0cnVjdCBfX3VzZXIgKmNoYW5pbmZvMzI7CiAJaW50IGVycjsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGludCB1aW50OwpAQCAtMTUwLDkgKzE0OSw4IEBACiAJZXJyIHw9IF9fcHV0X3VzZXIoY29tcGF0X3B0cih0ZW1wLnVwdHIpLCAmY2hhbmluZm8tPmZsYWdsaXN0KTsKIAllcnIgfD0gX19nZXRfdXNlcih0ZW1wLnVwdHIsICZjaGFuaW5mbzMyLT5yYW5nZWxpc3QpOwogCWVyciB8PSBfX3B1dF91c2VyKGNvbXBhdF9wdHIodGVtcC51cHRyKSwgJmNoYW5pbmZvLT5yYW5nZWxpc3QpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfQ0hBTklORk8sICh1bnNpZ25lZCBsb25nKWNoYW5pbmZvKTsKIH0KQEAgLTE2MCw4ICsxNTgsOCBAQAogLyogSGFuZGxlIDMyLWJpdCBDT01FRElfUkFOR0VJTkZPIGlvY3RsLiAqLwogc3RhdGljIGludCBjb21wYXRfcmFuZ2VpbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfcmFuZ2VpbmZvIF9fdXNlciAqcmFuZ2VpbmZvOwotCWNvbWVkaTMyX3JhbmdlaW5mbyBfX3VzZXIgKnJhbmdlaW5mbzMyOworCXN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvIF9fdXNlciAqcmFuZ2VpbmZvOworCXN0cnVjdCBjb21lZGkzMl9yYW5nZWluZm9fc3RydWN0IF9fdXNlciAqcmFuZ2VpbmZvMzI7CiAJaW50IGVycjsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGludCB1aW50OwpAQCAtMTgyLDE3ICsxODAsMTYgQEAKIAllcnIgfD0gX19wdXRfdXNlcih0ZW1wLnVpbnQsICZyYW5nZWluZm8tPnJhbmdlX3R5cGUpOwogCWVyciB8PSBfX2dldF91c2VyKHRlbXAudXB0ciwgJnJhbmdlaW5mbzMyLT5yYW5nZV9wdHIpOwogCWVyciB8PSBfX3B1dF91c2VyKGNvbXBhdF9wdHIodGVtcC51cHRyKSwgJnJhbmdlaW5mby0+cmFuZ2VfcHRyKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJcmV0dXJuIHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX1JBTkdFSU5GTywKIAkJCSh1bnNpZ25lZCBsb25nKXJhbmdlaW5mbyk7CiB9CiAKIC8qIENvcHkgMzItYml0IGNtZCBzdHJ1Y3R1cmUgdG8gbmF0aXZlIGNtZCBzdHJ1Y3R1cmUuICovCi1zdGF0aWMgaW50IGdldF9jb21wYXRfY21kKGNvbWVkaV9jbWQgX191c2VyICpjbWQsCi0JCWNvbWVkaTMyX2NtZCBfX3VzZXIgKmNtZDMyKQorc3RhdGljIGludCBnZXRfY29tcGF0X2NtZChzdHJ1Y3QgY29tZWRpX2NtZCBfX3VzZXIgKmNtZCwKKwkJc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgX191c2VyICpjbWQzMikKIHsKIAlpbnQgZXJyOwogCXVuaW9uIHsKQEAgLTI0Miw3ICsyMzksNyBAQAogfQogCiAvKiBDb3B5IG5hdGl2ZSBjbWQgc3RydWN0dXJlIHRvIDMyLWJpdCBjbWQgc3RydWN0dXJlLiAqLwotc3RhdGljIGludCBwdXRfY29tcGF0X2NtZChjb21lZGkzMl9jbWQgX191c2VyICpjbWQzMiwgY29tZWRpX2NtZCBfX3VzZXIgKmNtZCkKK3N0YXRpYyBpbnQgcHV0X2NvbXBhdF9jbWQoc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgX191c2VyICpjbWQzMiwgc3RydWN0IGNvbWVkaV9jbWQgX191c2VyICpjbWQpCiB7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKQEAgLTI5MiwxNyArMjg5LDE2IEBACiAvKiBIYW5kbGUgMzItYml0IENPTUVESV9DTUQgaW9jdGwuICovCiBzdGF0aWMgaW50IGNvbXBhdF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNvbWVkaV9jbWQgX191c2VyICpjbWQ7Ci0JY29tZWRpMzJfY21kIF9fdXNlciAqY21kMzI7CisJc3RydWN0IGNvbWVkaV9jbWQgX191c2VyICpjbWQ7CisJc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgX191c2VyICpjbWQzMjsKIAlpbnQgcmM7CiAKIAljbWQzMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAljbWQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtZCkpOwogCiAJcmMgPSBnZXRfY29tcGF0X2NtZChjbWQsIGNtZDMyKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXJldHVybiByYzsKLQl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfQ01ELCAodW5zaWduZWQgbG9uZyljbWQpOwogfQpAQCAtMzEwLDMzICszMDYsMzEgQEAKIC8qIEhhbmRsZSAzMi1iaXQgQ09NRURJX0NNRFRFU1QgaW9jdGwuICovCiBzdGF0aWMgaW50IGNvbXBhdF9jbWR0ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfY21kIF9fdXNlciAqY21kOwotCWNvbWVkaTMyX2NtZCBfX3VzZXIgKmNtZDMyOworCXN0cnVjdCBjb21lZGlfY21kIF9fdXNlciAqY21kOworCXN0cnVjdCBjb21lZGkzMl9jbWRfc3RydWN0IF9fdXNlciAqY21kMzI7CiAJaW50IHJjLCBlcnI7CiAKIAljbWQzMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAljbWQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtZCkpOwogCiAJcmMgPSBnZXRfY29tcGF0X2NtZChjbWQsIGNtZDMyKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXJldHVybiByYzsKLQl9CiAKIAlyYyA9IHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX0NNRFRFU1QsICh1bnNpZ25lZCBsb25nKWNtZCk7Ci0JaWYgKHJjIDwgMCkgeworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKLQl9CiAKIAllcnIgPSBwdXRfY29tcGF0X2NtZChjbWQzMiwgY21kKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmMgPSBlcnI7Ci0JfQorCiAJcmV0dXJuIHJjOwogfQogCiAvKiBDb3B5IDMyLWJpdCBpbnNuIHN0cnVjdHVyZSB0byBuYXRpdmUgaW5zbiBzdHJ1Y3R1cmUuICovCi1zdGF0aWMgaW50IGdldF9jb21wYXRfaW5zbihjb21lZGlfaW5zbiBfX3VzZXIgKmluc24sCi0JCWNvbWVkaTMyX2luc24gX191c2VyICppbnNuMzIpCitzdGF0aWMgaW50IGdldF9jb21wYXRfaW5zbihzdHJ1Y3QgY29tZWRpX2luc24gX191c2VyICppbnNuLAorCQlzdHJ1Y3QgY29tZWRpMzJfaW5zbl9zdHJ1Y3QgX191c2VyICppbnNuMzIpCiB7CiAJaW50IGVycjsKIAl1bmlvbiB7CkBAIC0zNDcsOSArMzQxLDkgQEAKIAkvKiBDb3B5IGluc24gc3RydWN0dXJlLiAgSWdub3JlIHRoZSB1bnVzZWQgbWVtYmVycy4gKi8KIAllcnIgPSAwOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpbnNuMzIsIHNpemVvZigqaW5zbjMyKSkKLQkJCXx8ICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbnNuLCBzaXplb2YoKmluc24pKSkgeworCQkJfHwgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGluc24sIHNpemVvZigqaW5zbikpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisKIAllcnIgfD0gX19nZXRfdXNlcih0ZW1wLnVpbnQsICZpbnNuMzItPmluc24pOwogCWVyciB8PSBfX3B1dF91c2VyKHRlbXAudWludCwgJmluc24tPmluc24pOwogCWVyciB8PSBfX2dldF91c2VyKHRlbXAudWludCwgJmluc24zMi0+bik7CkBAIC0zNjcsMTEgKzM2MSwxMSBAQAogc3RhdGljIGludCBjb21wYXRfaW5zbmxpc3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjb21iaW5lZF9pbnNubGlzdCB7Ci0JCWNvbWVkaV9pbnNubGlzdCBpbnNubGlzdDsKLQkJY29tZWRpX2luc24gaW5zblsxXTsKKwkJc3RydWN0IGNvbWVkaV9pbnNubGlzdCBpbnNubGlzdDsKKwkJc3RydWN0IGNvbWVkaV9pbnNuIGluc25bMV07CiAJfSBfX3VzZXIgKnM7Ci0JY29tZWRpMzJfaW5zbmxpc3QgX191c2VyICppbnNubGlzdDMyOwotCWNvbWVkaTMyX2luc24gX191c2VyICppbnNuMzI7CisJc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCBfX3VzZXIgKmluc25saXN0MzI7CisJc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IF9fdXNlciAqaW5zbjMyOwogCWNvbXBhdF91cHRyX3QgdXB0cjsKIAl1bnNpZ25lZCBpbnQgbl9pbnNucywgbjsKIAlpbnQgZXJyLCByYzsKQEAgLTM4Niw5ICszODAsOCBAQAogCWVyciB8PSBfX2dldF91c2VyKG5faW5zbnMsICZpbnNubGlzdDMyLT5uX2luc25zKTsKIAllcnIgfD0gX19nZXRfdXNlcih1cHRyLCAmaW5zbmxpc3QzMi0+aW5zbnMpOwogCWluc24zMiA9IGNvbXBhdF9wdHIodXB0cik7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCS8qIEFsbG9jYXRlIHVzZXIgbWVtb3J5IHRvIGNvcHkgaW5zbmxpc3QgYW5kIGluc25zIGludG8uICovCiAJcyA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKG9mZnNldG9mKHN0cnVjdCBjb21iaW5lZF9pbnNubGlzdCwKQEAgLTQwMCwxNiArMzkzLDE0IEBACiAJfQogCWVyciB8PSBfX3B1dF91c2VyKG5faW5zbnMsICZzLT5pbnNubGlzdC5uX2luc25zKTsKIAllcnIgfD0gX19wdXRfdXNlcigmcy0+aW5zblswXSwgJnMtPmluc25saXN0Lmluc25zKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJLyogQ29weSBpbnNuIHN0cnVjdHVyZXMuICovCiAJZm9yIChuID0gMDsgbiA8IG5faW5zbnM7IG4rKykgewogCQlyYyA9IGdldF9jb21wYXRfaW5zbigmcy0+aW5zbltuXSwgJmluc24zMltuXSk7Ci0JCWlmIChyYykgeworCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfSU5TTkxJU1QsCkBAIC00MTksMTcgKzQxMCwxNiBAQAogLyogSGFuZGxlIDMyLWJpdCBDT01FRElfSU5TTiBpb2N0bC4gKi8KIHN0YXRpYyBpbnQgY29tcGF0X2luc24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNvbWVkaV9pbnNuIF9fdXNlciAqaW5zbjsKLQljb21lZGkzMl9pbnNuIF9fdXNlciAqaW5zbjMyOworCXN0cnVjdCBjb21lZGlfaW5zbiBfX3VzZXIgKmluc247CisJc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IF9fdXNlciAqaW5zbjMyOwogCWludCByYzsKIAogCWluc24zMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAlpbnNuID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCppbnNuKSk7CiAKIAlyYyA9IGdldF9jb21wYXRfaW5zbihpbnNuLCBpbnNuMzIpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCX0KIAogCXJldHVybiB0cmFuc2xhdGVkX2lvY3RsKGZpbGUsIENPTUVESV9JTlNOLCAodW5zaWduZWQgbG9uZylpbnNuKTsKIH0KQEAgLTUxMiwxNCArNTAyLDE0IEBACiAJaW50IHJjOwogCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBDb21lZGkgZGV2aWNlLiAqLwotCWlmIChpbWFqb3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpICE9IENPTUVESV9NQUpPUikgeworCWlmIChpbWFqb3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpICE9IENPTUVESV9NQUpPUikKIAkJcmV0dXJuIC1FTk9UVFk7Ci0JfQorCiAJcmMgPSByYXdfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCS8qIERvIG5vdCByZXR1cm4gLUVOT0lPQ1RMQ01ELiAqLwotCWlmIChyYyA9PSAtRU5PSU9DVExDTUQpIHsKKwlpZiAocmMgPT0gLUVOT0lPQ1RMQ01EKQogCQlyYyA9IC1FTk9UVFk7Ci0JfQorCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKaW5kZXggMDE4Yzk2NC4uMTlkY2UyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwpAQCAtNTksMzMgKzU5LDM5IEBACiBtb2R1bGVfcGFyYW0oY29tZWRpX2RlYnVnLCBpbnQsIDA2NDQpOwogI2VuZGlmCiAKK2ludCBjb21lZGlfYXV0b2NvbmZpZyA9IDE7Cittb2R1bGVfcGFyYW0oY29tZWRpX2F1dG9jb25maWcsIGJvb2wsIDA0NDQpOworCitpbnQgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID0gMDsKK21vZHVsZV9wYXJhbShjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMsIGludCwgMDQ0NCk7CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29tZWRpX2ZpbGVfaW5mb190YWJsZV9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8KICAgICAqY29tZWRpX2ZpbGVfaW5mb190YWJsZVtDT01FRElfTlVNX01JTk9SU107CiAKLXN0YXRpYyBpbnQgZG9fZGV2Y29uZmlnX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqYXJnKTsKLXN0YXRpYyBpbnQgZG9fYnVmY29uZmlnX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnKTsKLXN0YXRpYyBpbnQgZG9fZGV2aW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZpbmZvICphcmcsCitzdGF0aWMgaW50IGRvX2RldmNvbmZpZ19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqYXJnKTsKK3N0YXRpYyBpbnQgZG9fYnVmY29uZmlnX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGRvX2RldmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZpbmZvICphcmcsCiAJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCBkb19zdWJkaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkaW5mbyAqYXJnLAorc3RhdGljIGludCBkb19zdWJkaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvICphcmcsCiAJCQkgICAgIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19jaGFuaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9jaGFuaW5mbyAqYXJnKTsKLXN0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgaW50IGRvX2NtZF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX2xvY2tfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fdW5sb2NrX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX2NhbmNlbF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19jbWR0ZXN0X2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9faW5zbmxpc3RfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19pbnNuX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fcG9sbF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzdWJkLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fY2hhbmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9jaGFuaW5mbyAqYXJnKTsKK3N0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpOworc3RhdGljIGludCBkb19jbWRfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fbG9ja19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fdW5sb2NrX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpOworc3RhdGljIGludCBkb19jYW5jZWxfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX2NtZHRlc3RfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9faW5zbmxpc3RfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9faW5zbl9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpOworc3RhdGljIGludCBkb19wb2xsX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzdWJkLCB2b2lkICpmaWxlKTsKIAotZXh0ZXJuIHZvaWQgZG9fYmVjb21lX25vbmJ1c3koY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKTsKLXN0YXRpYyBpbnQgZG9fY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7CitleHRlcm4gdm9pZCBkb19iZWNvbWVfbm9uYnVzeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IGRvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiAKIHN0YXRpYyBpbnQgY29tZWRpX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pOwogCi1zdGF0aWMgaW50IGlzX2RldmljZV9idXN5KGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGlzX2RldmljZV9idXN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgSEFWRV9VTkxPQ0tFRF9JT0NUTAogc3RhdGljIGxvbmcgY29tZWRpX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtOTgsOSArMTA0LDEzIEBACiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CiAJaW50IHJjOwogCisJaWYgKGRldl9maWxlX2luZm8gPT0gTlVMTCB8fCBkZXZfZmlsZV9pbmZvLT5kZXZpY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAKIAkvKiBEZXZpY2UgY29uZmlnIGlzIHNwZWNpYWwsIGJlY2F1c2UgaXQgbXVzdCB3b3JrIG9uCkBAIC0xODIsOSArMTkyLDkgQEAKIAl3cml0ZXM6CiAJCW5vbmUKICovCi1zdGF0aWMgaW50IGRvX2RldmNvbmZpZ19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKmFyZykKK3N0YXRpYyBpbnQgZG9fZGV2Y29uZmlnX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICphcmcpCiB7Ci0JY29tZWRpX2RldmNvbmZpZyBpdDsKKwlzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyBpdDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgKmF1eF9kYXRhID0gTlVMTDsKIAlpbnQgYXV4X2xlbjsKQEAgLTIwMyw3ICsyMTMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJml0LCBhcmcsIHNpemVvZihjb21lZGlfZGV2Y29uZmlnKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9kZXZjb25maWcpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpdC5ib2FyZF9uYW1lW0NPTUVESV9OQU1FTEVOIC0gMV0gPSAwOwpAQCAtMjYyLDE0ICsyNzIsMTQgQEAKIAkJbW9kaWZpZWQgYnVmY29uZmlnIGF0IGFyZwogCiAqLwotc3RhdGljIGludCBkb19idWZjb25maWdfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCitzdGF0aWMgaW50IGRvX2J1ZmNvbmZpZ19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCiB7Ci0JY29tZWRpX2J1ZmNvbmZpZyBiYzsKLQljb21lZGlfYXN5bmMgKmFzeW5jOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9idWZjb25maWcgYmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmJjLCBhcmcsIHNpemVvZihjb21lZGlfYnVmY29uZmlnKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiYywgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9idWZjb25maWcpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoYmMuc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzIHx8IGJjLnN1YmRldmljZSA8IDApCkBAIC0zMzAsNyArMzQwLDcgQEAKIAliYy5tYXhpbXVtX3NpemUgPSBhc3luYy0+bWF4X2J1ZnNpemU7CiAKIGNvcHliYWNrOgotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYmMsIHNpemVvZihjb21lZGlfYnVmY29uZmlnKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiYywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfYnVmY29uZmlnKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC0zNTAsMTYgKzM2MCwxNiBAQAogCQlkZXZpbmZvIHN0cnVjdHVyZQogCiAqLwotc3RhdGljIGludCBkb19kZXZpbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmluZm8gKmFyZywKK3N0YXRpYyBpbnQgZG9fZGV2aW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmluZm8gKmFyZywKIAkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljb21lZGlfZGV2aW5mbyBkZXZpbmZvOworCXN0cnVjdCBjb21lZGlfZGV2aW5mbyBkZXZpbmZvOwogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2ID0KKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXYgPQogCSAgICBjb21lZGlfZ2V0X3JlYWRfc3ViZGV2aWNlKGRldl9maWxlX2luZm8pOwotCWNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldiA9CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldiA9CiAJICAgIGNvbWVkaV9nZXRfd3JpdGVfc3ViZGV2aWNlKGRldl9maWxlX2luZm8pOwogCiAJbWVtc2V0KCZkZXZpbmZvLCAwLCBzaXplb2YoZGV2aW5mbykpOwpAQCAtMzgwLDcgKzM5MCw3IEBACiAJZWxzZQogCQlkZXZpbmZvLndyaXRlX3N1YmRldmljZSA9IC0xOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZkZXZpbmZvLCBzaXplb2YoY29tZWRpX2RldmluZm8pKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgJmRldmluZm8sIHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTQwMCwxNCArNDEwLDE0IEBACiAJCWFycmF5IG9mIHN1YmRldmljZSBpbmZvIHN0cnVjdHVyZXMgYXQgYXJnCiAKICovCi1zdGF0aWMgaW50IGRvX3N1YmRpbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRpbmZvICphcmcsCitzdGF0aWMgaW50IGRvX3N1YmRpbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGluZm8gKmFyZywKIAkJCSAgICAgdm9pZCAqZmlsZSkKIHsKIAlpbnQgcmV0LCBpOwotCWNvbWVkaV9zdWJkaW5mbyAqdG1wLCAqdXM7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvICp0bXAsICp1czsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCXRtcCA9IGtjYWxsb2MoZGV2LT5uX3N1YmRldmljZXMsIHNpemVvZihjb21lZGlfc3ViZGluZm8pLCBHRlBfS0VSTkVMKTsKKwl0bXAgPSBrY2FsbG9jKGRldi0+bl9zdWJkZXZpY2VzLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9zdWJkaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghdG1wKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDU5LDcgKzQ2OSw3IEBACiAJfQogCiAJcmV0ID0gY29weV90b191c2VyKGFyZywgdG1wLAotCQkJICAgZGV2LT5uX3N1YmRldmljZXMgKiBzaXplb2YoY29tZWRpX3N1YmRpbmZvKSk7CisJCQkgICBkZXYtPm5fc3ViZGV2aWNlcyAqIHNpemVvZihzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvKSk7CiAKIAlrZnJlZSh0bXApOwogCkBAIC00ODAsMTIgKzQ5MCwxMiBAQAogCQlhcnJheXMgYXQgZWxlbWVudHMgb2YgY2hhbmluZm8gc3RydWN0dXJlCiAKICovCi1zdGF0aWMgaW50IGRvX2NoYW5pbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2NoYW5pbmZvICphcmcpCitzdGF0aWMgaW50IGRvX2NoYW5pbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfY2hhbmluZm8gKmFyZykKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9jaGFuaW5mbyBpdDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvIGl0OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2YoY29tZWRpX2NoYW5pbmZvKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jaGFuaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChpdC5zdWJkZXYgPj0gZGV2LT5uX3N1YmRldmljZXMpCkBAIC00OTYsNyArNTA2LDcgQEAKIAkJaWYgKHMtPm1heGRhdGEgfHwgIXMtPm1heGRhdGFfbGlzdCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoY29weV90b191c2VyKGl0Lm1heGRhdGFfbGlzdCwgcy0+bWF4ZGF0YV9saXN0LAotCQkJCSBzLT5uX2NoYW4gKiBzaXplb2YobHNhbXBsX3QpKSkKKwkJCQkgcy0+bl9jaGFuICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC01NDQsMTMgKzU1NCwxMyBAQAogICAgIG1vZGlmaWVkIGJ1ZmluZm8gYXQgYXJnCiAKICAgKi8KLXN0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCiB7Ci0JY29tZWRpX2J1ZmluZm8gYmk7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfYnVmaW5mbyBiaTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmYmksIGFyZywgc2l6ZW9mKGNvbWVkaV9idWZpbmZvKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiaSwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9idWZpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGJpLnN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcyB8fCBiaS5zdWJkZXZpY2UgPCAwKQpAQCAtNTkxLDEzICs2MDEsMTMgQEAKIAliaS5idWZfcmVhZF9wdHIgPSBhc3luYy0+YnVmX3JlYWRfcHRyOwogCiBjb3B5YmFjazoKLQlpZiAoY29weV90b191c2VyKGFyZywgJmJpLCBzaXplb2YoY29tZWRpX2J1ZmluZm8pKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgJmJpLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9idWZpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfaW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSwKK3N0YXRpYyBpbnQgcGFyc2VfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSwKIAkJICAgICAgdm9pZCAqZmlsZSk7CiAvKgogICogCUNPTUVESV9JTlNOTElTVApAQCAtNjE2LDI1ICs2MjYsMjUgQEAKICAqLwogLyogYXJiaXRyYXJ5IGxpbWl0cyAqLwogI2RlZmluZSBNQVhfU0FNUExFUyAyNTYKLXN0YXRpYyBpbnQgZG9faW5zbmxpc3RfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2luc25saXN0X2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKIHsKLQljb21lZGlfaW5zbmxpc3QgaW5zbmxpc3Q7Ci0JY29tZWRpX2luc24gKmluc25zID0gTlVMTDsKLQlsc2FtcGxfdCAqZGF0YSA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9pbnNubGlzdCBpbnNubGlzdDsKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc25zID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgKmRhdGEgPSBOVUxMOwogCWludCBpID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbmxpc3QsIGFyZywgc2l6ZW9mKGNvbWVkaV9pbnNubGlzdCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbmxpc3QsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfaW5zbmxpc3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkYXRhID0ga21hbGxvYyhzaXplb2YobHNhbXBsX3QpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOworCWRhdGEgPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlEUFJJTlRLKCJrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaW5zbnMgPSBrbWFsbG9jKHNpemVvZihjb21lZGlfaW5zbikgKiBpbnNubGlzdC5uX2luc25zLCBHRlBfS0VSTkVMKTsKKwlpbnNucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21lZGlfaW5zbikgKiBpbnNubGlzdC5uX2luc25zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluc25zKSB7CiAJCURQUklOVEsoImttYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTY0Miw3ICs2NTIsNyBAQAogCX0KIAogCWlmIChjb3B5X2Zyb21fdXNlcihpbnNucywgaW5zbmxpc3QuaW5zbnMsCi0JCQkgICBzaXplb2YoY29tZWRpX2luc24pICogaW5zbmxpc3Qubl9pbnNucykpIHsKKwkJCSAgIHNpemVvZihzdHJ1Y3QgY29tZWRpX2luc24pICogaW5zbmxpc3Qubl9pbnNucykpIHsKIAkJRFBSSU5USygiY29weV9mcm9tX3VzZXIgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBlcnJvcjsKQEAgLTY1Niw3ICs2NjYsNyBAQAogCQl9CiAJCWlmIChpbnNuc1tpXS5pbnNuICYgSU5TTl9NQVNLX1dSSVRFKSB7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgaW5zbnNbaV0uZGF0YSwKLQkJCQkJICAgaW5zbnNbaV0ubiAqIHNpemVvZihsc2FtcGxfdCkpKSB7CisJCQkJCSAgIGluc25zW2ldLm4gKiBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCQlEUFJJTlRLKCJjb3B5X2Zyb21fdXNlciBmYWlsZWRcbiIpOwogCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJZ290byBlcnJvcjsKQEAgLTY2Nyw3ICs2NzcsNyBAQAogCQkJZ290byBlcnJvcjsKIAkJaWYgKGluc25zW2ldLmluc24gJiBJTlNOX01BU0tfUkVBRCkgewogCQkJaWYgKGNvcHlfdG9fdXNlcihpbnNuc1tpXS5kYXRhLCBkYXRhLAotCQkJCQkgaW5zbnNbaV0ubiAqIHNpemVvZihsc2FtcGxfdCkpKSB7CisJCQkJCSBpbnNuc1tpXS5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQkJRFBSSU5USygiY29weV90b191c2VyIGZhaWxlZFxuIik7CiAJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQlnb3RvIGVycm9yOwpAQCAtNjg2LDcgKzY5Niw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfaW5zbl9jb25maWdfbGVuZ3RoKGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgY2hlY2tfaW5zbl9jb25maWdfbGVuZ3RoKHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChpbnNuLT5uIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDcsMTAgKzc1NywxMCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2luc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEsCitzdGF0aWMgaW50IHBhcnNlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEsCiAJCSAgICAgIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIApAQCAtODE1LDcgKzgyNSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQkvKiBhIHN1YmRldmljZSBpbnN0cnVjdGlvbiAqLwotCQlsc2FtcGxfdCBtYXhkYXRhOworCQl1bnNpZ25lZCBpbnQgbWF4ZGF0YTsKIAogCQlpZiAoaW5zbi0+c3ViZGV2ID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CiAJCQlEUFJJTlRLKCJzdWJkZXZpY2UgJWQgb3V0IG9mIHJhbmdlXG4iLCBpbnNuLT5zdWJkZXYpOwpAQCAtOTAxLDI1ICs5MTEsMjUgQEAKICAqIAkJcG9pbnRlciB0byBpbnNuCiAgKgogICogCXJlYWRzOgotICogCQljb21lZGlfaW5zbiBzdHJ1Y3QgYXQgYXJnCisgKiAJCXN0cnVjdCBjb21lZGlfaW5zbiBzdHJ1Y3QgYXQgYXJnCiAgKiAJCWRhdGEgKGZvciB3cml0ZXMpCiAgKgogICogCXdyaXRlczoKICAqIAkJZGF0YSAoZm9yIHJlYWRzKQogICovCi1zdGF0aWMgaW50IGRvX2luc25faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2luc25faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9pbnNuIGluc247Ci0JbHNhbXBsX3QgKmRhdGEgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOworCXVuc2lnbmVkIGludCAqZGF0YSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlkYXRhID0ga21hbGxvYyhzaXplb2YobHNhbXBsX3QpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOworCWRhdGEgPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbiwgYXJnLCBzaXplb2YoY29tZWRpX2luc24pKSkgeworCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbiwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9pbnNuKSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC05MjgsNyArOTM4LDcgQEAKIAlpZiAoaW5zbi5uID4gTUFYX1NBTVBMRVMpCiAJCWluc24ubiA9IE1BWF9TQU1QTEVTOwogCWlmIChpbnNuLmluc24gJiBJTlNOX01BU0tfV1JJVEUpIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGluc24uZGF0YSwgaW5zbi5uICogc2l6ZW9mKGxzYW1wbF90KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGluc24uZGF0YSwgaW5zbi5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtOTM3LDcgKzk0Nyw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAJaWYgKGluc24uaW5zbiAmIElOU05fTUFTS19SRUFEKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIoaW5zbi5kYXRhLCBkYXRhLCBpbnNuLm4gKiBzaXplb2YobHNhbXBsX3QpKSkgeworCQlpZiAoY29weV90b191c2VyKGluc24uZGF0YSwgZGF0YSwgaW5zbi5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtOTY1LDE1ICs5NzUsMTUgQEAKIAkJbW9kaWZpZWQgY21kIHN0cnVjdHVyZSBhdCBhcmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fY21kX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQorc3RhdGljIGludCBkb19jbWRfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9jbWQgdXNlcl9jbWQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kIHVzZXJfY21kOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Rfc2F2ZXIgPSBOVUxMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2YoY29tZWRpX2NtZCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQlEUFJJTlRLKCJiYWQgY21kIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0xMDYyLDcgKzEwNzIsNyBAQAogCQkvKiByZXN0b3JlIGNoYW5saXN0IHBvaW50ZXIgYmVmb3JlIGNvcHlpbmcgYmFjayAqLwogCQl1c2VyX2NtZC5jaGFubGlzdCA9IGNoYW5saXN0X3NhdmVyOwogCQl1c2VyX2NtZC5kYXRhID0gTlVMTDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1c2VyX2NtZCwgc2l6ZW9mKGNvbWVkaV9jbWQpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZywgJnVzZXJfY21kLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQkJRFBSSU5USygiZmF1bHQgd3JpdGluZyBjbWRcbiIpOwogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gY2xlYW51cDsKQEAgLTExMTksMTUgKzExMjksMTUgQEAKIAkJbW9kaWZpZWQgY21kIHN0cnVjdHVyZSBhdCBhcmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fY21kdGVzdF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fY21kdGVzdF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX2NtZCB1c2VyX2NtZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfY21kIHVzZXJfY21kOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QgPSBOVUxMOwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Rfc2F2ZXIgPSBOVUxMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2YoY29tZWRpX2NtZCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQlEUFJJTlRLKCJiYWQgY21kIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0xMTkxLDcgKzEyMDEsNyBAQAogCS8qIHJlc3RvcmUgY2hhbmxpc3QgcG9pbnRlciBiZWZvcmUgY29weWluZyBiYWNrICovCiAJdXNlcl9jbWQuY2hhbmxpc3QgPSBjaGFubGlzdF9zYXZlcjsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdXNlcl9jbWQsIHNpemVvZihjb21lZGlfY21kKSkpIHsKKwlpZiAoY29weV90b191c2VyKGFyZywgJnVzZXJfY21kLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQlEUFJJTlRLKCJiYWQgY21kIGFkZHJlc3NcbiIpOwogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIGNsZWFudXA7CkBAIC0xMjE3LDExICsxMjI3LDExIEBACiAKICovCiAKLXN0YXRpYyBpbnQgZG9fbG9ja19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2xvY2tfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNjEsOSArMTI3MSw5IEBACiAJVGhpcyBmdW5jdGlvbiBpc24ndCBwcm90ZWN0ZWQgYnkgdGhlIHNlbWFwaG9yZSwgc2luY2UKIAl3ZSBhbHJlYWR5IG93biB0aGUgbG9jay4KICovCi1zdGF0aWMgaW50IGRvX3VubG9ja19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX3VubG9ja19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMDEsOSArMTMxMSw5IEBACiAJCW5vdGhpbmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fY2FuY2VsX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fY2FuY2VsX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCWlmIChhcmcgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMzNyw5ICsxMzQ3LDkgQEAKIAkJbm90aGluZwogCiAqLwotc3RhdGljIGludCBkb19wb2xsX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fcG9sbF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNjAsNyArMTM3MCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgZG9fY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgZG9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWludCByZXQgPSAwOwogCkBAIC0xMzc0LDggKzEzODQsOCBAQAogCiB2b2lkIGNvbWVkaV91bm1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCiB7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKLQljb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAogCWFzeW5jID0gYXJlYS0+dm1fcHJpdmF0ZV9kYXRhOwogCWRldiA9IGFzeW5jLT5zdWJkZXZpY2UtPmRldmljZTsKQEAgLTEzOTQsMTQgKzE0MDQsMTQgQEAKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCWludCBuX3BhZ2VzOwogCWludCBpOwogCWludCByZXR2YWw7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCWlmICghZGV2LT5hdHRhY2hlZCkgewpAQCAtMTQ3MCw5ICsxNDgwLDkgQEAKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7Ci0JY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICp3cml0ZV9zdWJkZXY7CiAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKQEAgLTE1MTMsMTQgKzE1MjMsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IGNvbWVkaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCQkJICAgIGxvZmZfdCAqb2Zmc2V0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgbiwgbSwgY291bnQgPSAwLCByZXR2YWwgPSAwOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwogCiAJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CiAJCURQUklOVEsoIm5vIGRyaXZlciBjb25maWd1cmVkIG9uIGNvbWVkaSVpXG4iLCBkZXYtPm1pbm9yKTsKQEAgLTE2MTUsMTQgKzE2MjUsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IGNvbWVkaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJCQkgICBsb2ZmX3QgKm9mZnNldCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IG4sIG0sIGNvdW50ID0gMCwgcmV0dmFsID0gMDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCWlmICghZGV2LT5hdHRhY2hlZCkgewogCQlEUFJJTlRLKCJubyBkcml2ZXIgY29uZmlndXJlZCBvbiBjb21lZGklaVxuIiwgZGV2LT5taW5vcik7CkBAIC0xNzIzLDkgKzE3MzMsOSBAQAogLyoKICAgIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgYSBzdWJkZXZpY2UgdG8gYW4gaWRsZSBzdGF0ZS4KICAqLwotdm9pZCBkb19iZWNvbWVfbm9uYnVzeShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCit2b2lkIGRvX2JlY29tZV9ub25idXN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCiAJY29tZWRpX3NldF9zdWJkZXZpY2VfcnVuZmxhZ3MocywgU1JGX1JVTk5JTkcsIDApOwogI2lmZGVmIENPTkZJR19DT01FRElfUlQKQEAgLTE3NDcsMTEgKzE3NTcsMTEgQEAKIAogc3RhdGljIGludCBjb21lZGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljaGFyIG1vZFszMl07CiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvID8gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlIDogTlVMTDsKKwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlEUFJJTlRLKCJpbnZhbGlkIG1pbm9yIG51bWJlclxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTc4MywxMCArMTc5Myw5IEBACiAKIAlkZXYtPmluX3JlcXVlc3RfbW9kdWxlID0gMTsKIAotCXNwcmludGYobW9kLCAiY2hhci1tYWpvci0laS0laSIsIENPTUVESV9NQUpPUiwgZGV2LT5taW5vcik7CiAjaWZkZWYgQ09ORklHX0tNT0QKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCXJlcXVlc3RfbW9kdWxlKG1vZCk7CisJcmVxdWVzdF9tb2R1bGUoImNoYXItbWFqb3ItJWktJWkiLCBDT01FRElfTUFKT1IsIGRldi0+bWlub3IpOwogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogI2VuZGlmCiAKQEAgLTE4MjMsOCArMTgzMiw4IEBACiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CkBAIC0xODYyLDcgKzE4NzEsNyBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7CiAKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmRldi0+YXN5bmNfcXVldWUpOwogfQpAQCAtMTg5Myw3ICsxOTAyLDcgQEAKIHsKIAl1bnNpZ25lZCBpOwogCi0JZm9yIChpID0gMDsgaSA8IENPTUVESV9OVU1fTEVHQUNZX01JTk9SUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnM7IGkrKykKIAkJY29tZWRpX2ZyZWVfYm9hcmRfbWlub3IoaSk7CiB9CiAKQEAgLTE5MDUsNiArMTkxNCwyMiBAQAogCXByaW50ayhLRVJOX0lORk8gImNvbWVkaTogdmVyc2lvbiAiIENPTUVESV9SRUxFQVNFCiAJICAgICAgICIgLSBodHRwOi8vd3d3LmNvbWVkaS5vcmdcbiIpOwogCisJaWYgKGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA8IDAgfHwKKwkgICAgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID4gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGk6IGVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciBtb2R1bGUgIgorCQkgICAgICAgInBhcmFtZXRlciBcImNvbWVkaV9udW1fbGVnYWN5X21pbm9yc1wiLiAgVmFsaWQgdmFsdWVzICIKKwkJICAgICAgICJhcmUgMCB0aHJvdWdoICVpLlxuIiwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIGNvbWVkaSBpcyB1bnVzYWJsZSBpZiBib3RoIGNvbWVkaV9hdXRvY29uZmlnIGFuZAorCSAqIGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyBhcmUgemVybywgc28gd2UgbWlnaHQgYXMgd2VsbCBhZGp1c3QgdGhlCisJICogZGVmYXVsdHMgaW4gdGhhdCBjYXNlCisJICovCisJaWYgKGNvbWVkaV9hdXRvY29uZmlnID09IDAgJiYgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID09IDApCisJCWNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA9IDE2OworCiAJbWVtc2V0KGNvbWVkaV9maWxlX2luZm9fdGFibGUsIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKikgKiBDT01FRElfTlVNX01JTk9SUyk7CiAKQEAgLTE5MzMsNyArMTk1OCw3IEBACiAJY29tZWRpX3Byb2NfaW5pdCgpOwogCiAJLyogY3JlYXRlIGRldmljZXMgZmlsZXMgZm9yIGxlZ2FjeS9tYW51YWwgdXNlICovCi0JZm9yIChpID0gMDsgaSA8IENPTUVESV9OVU1fTEVHQUNZX01JTk9SUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbWVkaV9udW1fbGVnYWN5X21pbm9yczsgaSsrKSB7CiAJCWludCBtaW5vcjsKIAkJbWlub3IgPSBjb21lZGlfYWxsb2NfYm9hcmRfbWlub3IoTlVMTCk7CiAJCWlmIChtaW5vciA8IDApIHsKQEAgLTE5NzUsMTUgKzIwMDAsMTUgQEAKIG1vZHVsZV9pbml0KGNvbWVkaV9pbml0KTsKIG1vZHVsZV9leGl0KGNvbWVkaV9jbGVhbnVwKTsKIAotdm9pZCBjb21lZGlfZXJyb3IoY29uc3QgY29tZWRpX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpzKQordm9pZCBjb21lZGlfZXJyb3IoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcykKIHsKIAlydF9wcmludGsoImNvbWVkaSVkOiAlczogJXNcbiIsIGRldi0+bWlub3IsIGRldi0+ZHJpdmVyLT5kcml2ZXJfbmFtZSwKIAkJICBzKTsKIH0KIAotdm9pZCBjb21lZGlfZXZlbnQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQordm9pZCBjb21lZGlfZXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CiAJdW5zaWduZWQgcnVuZmxhZ3MgPSAwOwogCXVuc2lnbmVkIHJ1bmZsYWdzX21hc2sgPSAwOwogCkBAIC0yMDQyLDcgKzIwNjcsNyBAQAogCXMtPmFzeW5jLT5ldmVudHMgPSAwOwogfQogCi12b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIG1hc2ssCit2b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBtYXNrLAogCQkJCSAgIHVuc2lnbmVkIGJpdHMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwNTMsNyArMjA3OCw3IEBACiAJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnNwaW5fbG9jaywgZmxhZ3MpOwogfQogCi11bnNpZ25lZCBjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhjb21lZGlfc3ViZGV2aWNlICpzKQordW5zaWduZWQgY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3Moc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBydW5mbGFnczsKQEAgLTIwNjQsOSArMjA4OSw5IEBACiAJcmV0dXJuIHJ1bmZsYWdzOwogfQogCi1zdGF0aWMgaW50IGlzX2RldmljZV9idXN5KGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXNfZGV2aWNlX2J1c3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCBpOwogCiAJaWYgKCFkZXYtPmF0dGFjaGVkKQpAQCAtMjA4MywxNSArMjEwOCwxNSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGNvbWVkaV9kZXZpY2VfaW5pdChjb21lZGlfZGV2aWNlICpkZXYpCit2b2lkIGNvbWVkaV9kZXZpY2VfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCW1lbXNldChkZXYsIDAsIHNpemVvZihjb21lZGlfZGV2aWNlKSk7CisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBjb21lZGlfZGV2aWNlKSk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c3BpbmxvY2spOwogCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwogCWRldi0+bWlub3IgPSAtMTsKIH0KIAotdm9pZCBjb21lZGlfZGV2aWNlX2NsZWFudXAoY29tZWRpX2RldmljZSAqZGV2KQordm9pZCBjb21lZGlfZGV2aWNlX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTIxMDUsMTMgKzIxMzAsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqaW5mbzsKLQlkZXZpY2VfY3JlYXRlX3Jlc3VsdF90eXBlICpjc2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpjc2RldjsKIAl1bnNpZ25lZCBpOwogCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWluZm8tPmRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKGNvbWVkaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpbmZvLT5kZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5kZXZpY2UgPT0gTlVMTCkgewogCQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTU1LDcgKzIxODAsNyBAQAogCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb21lZGlfZmlsZV9pbmZvX3RhYmxlX2xvY2ssIGZsYWdzKTsKIAogCWlmIChpbmZvKSB7Ci0JCWNvbWVkaV9kZXZpY2UgKmRldiA9IGluZm8tPmRldmljZTsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGluZm8tPmRldmljZTsKIAkJaWYgKGRldikgewogCQkJaWYgKGRldi0+Y2xhc3NfZGV2KSB7CiAJCQkJZGV2aWNlX2Rlc3Ryb3koY29tZWRpX2NsYXNzLApAQCAtMjE2OCwxMSArMjE5MywxMSBAQAogCX0KIH0KIAotaW50IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VfbWlub3IoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQoraW50IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VfbWlub3Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmluZm87Ci0JZGV2aWNlX2NyZWF0ZV9yZXN1bHRfdHlwZSAqY3NkZXY7CisJc3RydWN0IGRldmljZSAqY3NkZXY7CiAJdW5zaWduZWQgaTsKIAogCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTIxODIsNyArMjIwNyw3IEBACiAJaW5mby0+cmVhZF9zdWJkZXZpY2UgPSBzOwogCWluZm8tPndyaXRlX3N1YmRldmljZSA9IHM7CiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb21lZGlfZmlsZV9pbmZvX3RhYmxlX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSBDT01FRElfRklSU1RfU1VCREVWSUNFX01JTk9SOyBpIDwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlM7ICsraSkgeworCWZvciAoaSA9IENPTUVESV9GSVJTVF9TVUJERVZJQ0VfTUlOT1I7IGkgPCBDT01FRElfTlVNX01JTk9SUzsgKytpKSB7CiAJCWlmIChjb21lZGlfZmlsZV9pbmZvX3RhYmxlW2ldID09IE5VTEwpIHsKIAkJCWNvbWVkaV9maWxlX2luZm9fdGFibGVbaV0gPSBpbmZvOwogCQkJYnJlYWs7CkBAIC0yMjA2LDcgKzIyMzEsNyBAQAogCXJldHVybiBpOwogfQogCi12b2lkIGNvbWVkaV9mcmVlX3N1YmRldmljZV9taW5vcihjb21lZGlfc3ViZGV2aWNlICpzKQordm9pZCBjb21lZGlfZnJlZV9zdWJkZXZpY2VfbWlub3Ioc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmgKaW5kZXggNjNmOGRmNS4uY2I1MDNjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuaApAQCAtNCw1ICs0LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqY29tZWRpX2NsYXNzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tZWRpX2ZvcHM7CitleHRlcm4gaW50IGNvbWVkaV9hdXRvY29uZmlnOwogCiAjZW5kaWYgLyogX0NPTUVESV9GT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2tzeW1zLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9rc3ltcy5jCmluZGV4IDkwZDU3MjguLjZlNmZiOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2tzeW1zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfa3N5bXMuYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAvKiBmb3IgZHJpdmVycyAqLwogRVhQT1JUX1NZTUJPTChjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0woY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKTsKLS8vRVhQT1JUX1NZTUJPTChjb21lZGlfYnVmY2hlY2spOwotLy9FWFBPUlRfU1lNQk9MKGNvbWVkaV9kb25lKTsKLS8vRVhQT1JUX1NZTUJPTChjb21lZGlfZXJyb3JfZG9uZSk7CisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9idWZjaGVjayk7ICovCisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9kb25lKTsgKi8KKy8qIEVYUE9SVF9TWU1CT0woY29tZWRpX2Vycm9yX2RvbmUpOyAqLwogRVhQT1JUX1NZTUJPTChjb21lZGlfZXJyb3IpOwotLy9FWFBPUlRfU1lNQk9MKGNvbWVkaV9lb2J1Zik7Ci0vL0VYUE9SVF9TWU1CT0woY29tZWRpX2Vvcyk7CisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9lb2J1Zik7ICovCisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9lb3MpOyAqLwogRVhQT1JUX1NZTUJPTChjb21lZGlfZXZlbnQpOwogRVhQT1JUX1NZTUJPTChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyk7CiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKTsKQEAgLTYwLDYgKzYwLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV9wY2lfYXV0b19jb25maWcpOwogRVhQT1JUX1NZTUJPTF9HUEwoY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV91c2JfYXV0b19jb25maWcpOworRVhQT1JUX1NZTUJPTF9HUEwoY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKTsKIAogLyogZm9yIGtjb21lZGlsaWIgKi8KIEVYUE9SVF9TWU1CT0woY2hlY2tfY2hhbmxpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfcnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX3J0LmgKaW5kZXggNjE4NTJiZi4uMTY5Y2E5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfcnQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9ydC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjZXJyb3IgY29tZWRpX3J0Lmggc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgY29tZWRpZGV2LmgKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNTksMTIgKzU4LDEyIEBACiAKIGludCBjb21lZGlfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QoKmhhbmRsZXIpIChpbnQsCiAJCXZvaWQgKlBUX1JFR1NfQVJHKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2aWNlLAotCQljb21lZGlfZGV2aWNlICpkZXZfaWQpOwotdm9pZCBjb21lZGlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgY29tZWRpX2RldmljZSAqZGV2X2lkKTsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldl9pZCk7Cit2b2lkIGNvbWVkaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2X2lkKTsKIHZvaWQgY29tZWRpX3J0X2luaXQodm9pZCk7CiB2b2lkIGNvbWVkaV9ydF9jbGVhbnVwKHZvaWQpOwotaW50IGNvbWVkaV9zd2l0Y2hfdG9fcnQoY29tZWRpX2RldmljZSAqZGV2KTsKLXZvaWQgY29tZWRpX3N3aXRjaF90b19ub25fcnQoY29tZWRpX2RldmljZSAqZGV2KTsKK2ludCBjb21lZGlfc3dpdGNoX3RvX3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwordm9pZCBjb21lZGlfc3dpdGNoX3RvX25vbl9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIHZvaWQgY29tZWRpX3J0X3BlbmRfd2FrZXVwKHdhaXRfcXVldWVfaGVhZF90ICpxKTsKIGV4dGVybiBpbnQgcnRfcGVuZF9jYWxsKHZvaWQgKCpmdW5jKSAoaW50IGFyZzEsIHZvaWQgKmFyZzIpLCBpbnQgYXJnMSwKIAl2b2lkICphcmcyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oCmluZGV4IDM3MzUzNTUuLmVhMzE5MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzYsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpAQCAtNTUsOSArNTMsOSBAQAogCiAjZGVmaW5lIENPTUVESV9JTklUQ0xFQU5VUF9OT01PRFVMRSh4KQkJCQkJXAogCXN0YXRpYyBpbnQgX19pbml0IHggIyMgX2luaXRfbW9kdWxlKHZvaWQpCQkJXAotCQl7cmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJih4KSk7fQkJCVwKKwkJe3JldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCYoeCkpOyB9CQkJXAogCXN0YXRpYyB2b2lkIF9fZXhpdCB4ICMjIF9jbGVhbnVwX21vZHVsZSh2b2lkKQkJCVwKLQkJe2NvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmKHgpKTt9IAkJCVwKKwkJe2NvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmKHgpKTsgfSAJCQlcCiAJbW9kdWxlX2luaXQoeCAjIyBfaW5pdF9tb2R1bGUpOwkJCQkJXAogCW1vZHVsZV9leGl0KHggIyMgX2NsZWFudXBfbW9kdWxlKTsJCQkJCVwKIApAQCAtMTIwLDIzICsxMTgsMTQgQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NRUlMSEFVUwkJMHgxNDAyCiAKICNkZWZpbmUgQ09NRURJX05VTV9NSU5PUlMgMHgxMDAKLSNkZWZpbmUgQ09NRURJX05VTV9MRUdBQ1lfTUlOT1JTIDB4MTAKICNkZWZpbmUgQ09NRURJX05VTV9CT0FSRF9NSU5PUlMgMHgzMAogI2RlZmluZSBDT01FRElfRklSU1RfU1VCREVWSUNFX01JTk9SIENPTUVESV9OVU1fQk9BUkRfTUlOT1JTCiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9kZXZpY2Vfc3RydWN0IGNvbWVkaV9kZXZpY2U7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlX3N0cnVjdCBjb21lZGlfc3ViZGV2aWNlOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2FzeW5jX3N0cnVjdCBjb21lZGlfYXN5bmM7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfZHJpdmVyX3N0cnVjdCBjb21lZGlfZHJpdmVyOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2xyYW5nZV9zdHJ1Y3QgY29tZWRpX2xyYW5nZTsKLQotdHlwZWRlZiBzdHJ1Y3QgZGV2aWNlIGRldmljZV9jcmVhdGVfcmVzdWx0X3R5cGU7Ci0KICNkZWZpbmUgQ09NRURJX0RFVklDRV9DUkVBVEUoY3MsIHBhcmVudCwgZGV2dCwgZHJ2ZGF0YSwgZGV2aWNlLCBmbXQuLi4pIFwKIAlkZXZpY2VfY3JlYXRlKGNzLCAoKHBhcmVudCkgPyAocGFyZW50KSA6IChkZXZpY2UpKSwgZGV2dCwgZHJ2ZGF0YSwgZm10KQogCi1zdHJ1Y3QgY29tZWRpX3N1YmRldmljZV9zdHJ1Y3QgewotCWNvbWVkaV9kZXZpY2UgKmRldmljZTsKK3N0cnVjdCBjb21lZGlfc3ViZGV2aWNlIHsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2aWNlOwogCWludCB0eXBlOwogCWludCBuX2NoYW47CiAJdm9sYXRpbGUgaW50IHN1YmRldl9mbGFnczsKQEAgLTE0NCw3ICsxMzMsNyBAQAogCiAJdm9pZCAqcHJpdmF0ZTsKIAotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKIAl2b2lkICpsb2NrOwogCXZvaWQgKmJ1c3k7CkBAIC0xNTMsNDYgKzE0Miw0NiBAQAogCiAJaW50IGlvX2JpdHM7CiAKLQlsc2FtcGxfdCBtYXhkYXRhOwkvKiBpZiBtYXhkYXRhPT0wLCB1c2UgbGlzdCAqLwotCWNvbnN0IGxzYW1wbF90ICptYXhkYXRhX2xpc3Q7CS8qIGxpc3QgaXMgY2hhbm5lbCBzcGVjaWZpYyAqLworCXVuc2lnbmVkIGludCBtYXhkYXRhOwkvKiBpZiBtYXhkYXRhPT0wLCB1c2UgbGlzdCAqLworCWNvbnN0IHVuc2lnbmVkIGludCAqbWF4ZGF0YV9saXN0OwkvKiBsaXN0IGlzIGNoYW5uZWwgc3BlY2lmaWMgKi8KIAogCXVuc2lnbmVkIGludCBmbGFnczsKIAljb25zdCB1bnNpZ25lZCBpbnQgKmZsYWdsaXN0OwogCiAJdW5zaWduZWQgaW50IHNldHRsaW5nX3RpbWVfMDsKIAotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlX3RhYmxlOwotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0ICpyYW5nZV90YWJsZV9saXN0OworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZV90YWJsZTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgKnJhbmdlX3RhYmxlX2xpc3Q7CiAKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0OwkvKiBkcml2ZXItb3duZWQgY2hhbmxpc3QgKG5vdCB1c2VkKSAqLwogCi0JaW50ICgqaW5zbl9yZWFkKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOwotCWludCAoKmluc25fd3JpdGUpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKiwgY29tZWRpX2luc24gKiwKLQkJbHNhbXBsX3QgKik7Ci0JaW50ICgqaW5zbl9iaXRzKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOwotCWludCAoKmluc25fY29uZmlnKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOworCWludCAoKmluc25fcmVhZCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqaW5zbl93cml0ZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqaW5zbl9iaXRzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJCXVuc2lnbmVkIGludCAqKTsKKwlpbnQgKCppbnNuX2NvbmZpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CiAKLQlpbnQgKCpkb19jbWQpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKik7Ci0JaW50ICgqZG9fY21kdGVzdCkgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX3N1YmRldmljZSAqLCBjb21lZGlfY21kICopOwotCWludCAoKnBvbGwpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKik7Ci0JaW50ICgqY2FuY2VsKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICopOwotCS8qIGludCAoKmRvX2xvY2spKGNvbWVkaV9kZXZpY2UgKixjb21lZGlfc3ViZGV2aWNlICopOyAqLwotCS8qIGludCAoKmRvX3VubG9jaykoY29tZWRpX2RldmljZSAqLGNvbWVkaV9zdWJkZXZpY2UgKik7ICovCisJaW50ICgqZG9fY21kKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7CisJaW50ICgqZG9fY21kdGVzdCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfY21kICopOworCWludCAoKnBvbGwpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKKwlpbnQgKCpjYW5jZWwpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKKwkvKiBpbnQgKCpkb19sb2NrKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqLHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICopOyAqLworCS8qIGludCAoKmRvX3VubG9jaykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsgKi8KIAogCS8qIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgY2hhbmdlcyAqLwotCWludCAoKmJ1Zl9jaGFuZ2UpIChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJaW50ICgqYnVmX2NoYW5nZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKIAotCXZvaWQgKCptdW5nZSkgKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywgdm9pZCAqZGF0YSwKKwl2b2lkICgqbXVuZ2UpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdm9pZCAqZGF0YSwKIAkJdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGFzeW5jX2RtYV9kaXI7CiAKIAl1bnNpZ25lZCBpbnQgc3RhdGU7CiAKLQlkZXZpY2VfY3JlYXRlX3Jlc3VsdF90eXBlICpjbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OwogCWludCBtaW5vcjsKIH07CiAKQEAgLTIwMSw4ICsxOTAsOCBAQAogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2FzeW5jX3N0cnVjdCB7Ci0JY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworc3RydWN0IGNvbWVkaV9hc3luYyB7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKIAogCXZvaWQgKnByZWFsbG9jX2J1ZjsJLyogcHJlLWFsbG9jYXRlZCBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgcHJlYWxsb2NfYnVmc3o7CS8qIGJ1ZmZlciBzaXplLCBpbiBieXRlcyAqLwpAQCAtMjMyLDcgKzIyMSw3IEBACiAKIAl1bnNpZ25lZCBpbnQgZXZlbnRzOwkvKiBldmVudHMgdGhhdCBoYXZlIG9jY3VycmVkICovCiAKLQljb21lZGlfY21kIGNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCBjbWQ7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2hlYWQ7CiAKQEAgLTI0MSwxNyArMjMwLDE3IEBACiAJaW50ICgqY2JfZnVuYykgKHVuc2lnbmVkIGludCBmbGFncywgdm9pZCAqKTsKIAl2b2lkICpjYl9hcmc7CiAKLQlpbnQgKCppbnR0cmlnKSAoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAorCWludCAoKmludHRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCXVuc2lnbmVkIGludCB4KTsKIH07CiAKLXN0cnVjdCBjb21lZGlfZHJpdmVyX3N0cnVjdCB7Ci0Jc3RydWN0IGNvbWVkaV9kcml2ZXJfc3RydWN0ICpuZXh0Oworc3RydWN0IGNvbWVkaV9kcml2ZXIgeworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpuZXh0OwogCiAJY29uc3QgY2hhciAqZHJpdmVyX25hbWU7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCWludCAoKmF0dGFjaCkgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX2RldmNvbmZpZyAqKTsKLQlpbnQgKCpkZXRhY2gpIChjb21lZGlfZGV2aWNlICopOworCWludCAoKmF0dGFjaCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICopOworCWludCAoKmRldGFjaCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICopOwogCiAJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGJvYXJkX25hbWUgYW5kIGJvYXJkX2lkIGFycmF5cyAqLwogCXVuc2lnbmVkIGludCBudW1fbmFtZXM7CkBAIC0yNjAsMTIgKzI0OSwxMiBAQAogCWludCBvZmZzZXQ7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2RldmljZV9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9kZXZpY2UgewogCWludCB1c2VfY291bnQ7Ci0JY29tZWRpX2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2ZXI7CiAJdm9pZCAqcHJpdmF0ZTsKIAotCWRldmljZV9jcmVhdGVfcmVzdWx0X3R5cGUgKmNsYXNzX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXY7CiAJaW50IG1pbm9yOwogCS8qIGh3X2RldiBpcyBwYXNzZWQgdG8gZG1hX2FsbG9jX2NvaGVyZW50IHdoZW4gYWxsb2NhdGluZyBhc3luYyBidWZmZXJzCiAJICogZm9yIHN1YmRldmljZXMgdGhhdCBoYXZlIGFzeW5jX2RtYV9kaXIgc2V0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuCkBAIC0yODEsMjUgKzI3MCwyNSBAQAogCWludCBpbl9yZXF1ZXN0X21vZHVsZTsKIAogCWludCBuX3N1YmRldmljZXM7Ci0JY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlczsKIAogCS8qIGR1bWIgKi8KIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCi0JY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OwogCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmFzeW5jX3F1ZXVlOwogCi0Jdm9pZCAoKm9wZW4pIChjb21lZGlfZGV2aWNlICpkZXYpOwotCXZvaWQgKCpjbG9zZSkgKGNvbWVkaV9kZXZpY2UgKmRldik7CisJdm9pZCAoKm9wZW4pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKwl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIH07CiAKIHN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyB7Ci0JY29tZWRpX2RldmljZSAqZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2aWNlOwogfTsKIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKQEAgLTMxMiw4ICszMDEsOCBAQAogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiAKLXZvaWQgY29tZWRpX2V2ZW50KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7Ci12b2lkIGNvbWVkaV9lcnJvcihjb25zdCBjb21lZGlfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnMpOwordm9pZCBjb21lZGlfZXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwordm9pZCBjb21lZGlfZXJyb3IoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcyk7CiAKIC8qIHdlIGNhbiBleHBhbmQgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gZW5jb2RlIGRldmljZXMvc3ViZGV2aWNlcyBpbnRvCiAgdGhlIG1pbm9yIG51bWJlciBzb29uLCBhZnRlciBtb3JlIGRpc3Ryb3Mgc3VwcG9ydCA+IDggYml0IG1pbm9yIG51bWJlcnMKQEAgLTMyNyw3ICszMTYsNyBAQAogCiBzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyh1bnNpZ25lZCBtaW5vcik7CiAKLXN0YXRpYyBpbmxpbmUgY29tZWRpX3N1YmRldmljZSAqY29tZWRpX2dldF9yZWFkX3N1YmRldmljZSgKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKmNvbWVkaV9nZXRfcmVhZF9zdWJkZXZpY2UoCiAJCQkJY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICppbmZvKQogewogCWlmIChpbmZvLT5yZWFkX3N1YmRldmljZSkKQEAgLTMzNyw3ICszMjYsNyBAQAogCXJldHVybiBpbmZvLT5kZXZpY2UtPnJlYWRfc3ViZGV2OwogfQogCi1zdGF0aWMgaW5saW5lIGNvbWVkaV9zdWJkZXZpY2UgKmNvbWVkaV9nZXRfd3JpdGVfc3ViZGV2aWNlKAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqY29tZWRpX2dldF93cml0ZV9zdWJkZXZpY2UoCiAJCQkJY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICppbmZvKQogewogCWlmIChpbmZvLT53cml0ZV9zdWJkZXZpY2UpCkBAIC0zNDcsMTcgKzMzNiwxNyBAQAogCXJldHVybiBpbmZvLT5kZXZpY2UtPndyaXRlX3N1YmRldjsKIH0KIAotdm9pZCBjb21lZGlfZGV2aWNlX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpOwotaW50IGNvbWVkaV9kZXZpY2VfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotaW50IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoY29tZWRpX2RyaXZlciAqKTsKLWludCBjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoY29tZWRpX2RyaXZlciAqKTsKK3ZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgY29tZWRpX2RldmljZV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK2ludCBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBjb21lZGlfZHJpdmVyICopOworaW50IGNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqKTsKIAogdm9pZCBpbml0X3BvbGxpbmcodm9pZCk7CiB2b2lkIGNsZWFudXBfcG9sbGluZyh2b2lkKTsKLXZvaWQgc3RhcnRfcG9sbGluZyhjb21lZGlfZGV2aWNlICopOwotdm9pZCBzdG9wX3BvbGxpbmcoY29tZWRpX2RldmljZSAqKTsKK3ZvaWQgc3RhcnRfcG9sbGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqKTsKK3ZvaWQgc3RvcF9wb2xsaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICopOwogCi1pbnQgY29tZWRpX2J1Zl9hbGxvYyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGxvbmcKK2ludCBjb21lZGlfYnVmX2FsbG9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBsb25nCiAJbmV3X3NpemUpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTM4NiwxMyArMzc1LDEzIEBACiAgICB2YXJpb3VzIGludGVybmFsIGNvbWVkaSBmdW5jdGlvbnMKICAqLwogCi1pbnQgZG9fcmFuZ2VpbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3JhbmdlaW5mbyAqYXJnKTsKLWludCBjaGVja19jaGFubGlzdChjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCk7Ci12b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIG1hc2ssCitpbnQgZG9fcmFuZ2VpbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvICphcmcpOworaW50IGNoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCk7Cit2b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBtYXNrLAogCXVuc2lnbmVkIGJpdHMpOwotdW5zaWduZWQgY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MoY29tZWRpX3N1YmRldmljZSAqcyk7Ci1pbnQgaW5zbl9pbnZhbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKTsKK3Vuc2lnbmVkIGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2ludCBpbnNuX2ludmFsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAogLyogcmFuZ2Ugc3R1ZmYgKi8KIApAQCAtNDAzLDEyICszOTIsMTIgQEAKICNkZWZpbmUgQklQX1JBTkdFKGEpCQl7LShhKSoxZTYsIChhKSoxZTYsIDB9CiAjZGVmaW5lIFVOSV9SQU5HRShhKQkJezAsIChhKSoxZTYsIDB9CiAKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIxMDsKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXI1OwotZXh0ZXJuIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjJfNTsKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyMTA7Ci1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjU7Ci1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmtub3duOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIxMDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyNTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMl81OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyMTA7CitleHRlcm4gY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXI1OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3Vua25vd247CiAKICNkZWZpbmUgcmFuZ2VfZGlnaXRhbAkJcmFuZ2VfdW5pcG9sYXI1CiAKQEAgLTQxOCwyMSArNDA3LDIxIEBACiAjZGVmaW5lIEdDQ19aRVJPX0xFTkdUSF9BUlJBWSAwCiAjZW5kaWYKIAotc3RydWN0IGNvbWVkaV9scmFuZ2Vfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfbHJhbmdlIHsKIAlpbnQgbGVuZ3RoOwotCWNvbWVkaV9rcmFuZ2UgcmFuZ2VbR0NDX1pFUk9fTEVOR1RIX0FSUkFZXTsKKwlzdHJ1Y3QgY29tZWRpX2tyYW5nZSByYW5nZVtHQ0NfWkVST19MRU5HVEhfQVJSQVldOwogfTsKIAogLyogc29tZSBzaWxseSBsaXR0bGUgaW5saW5lIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgaW5saW5lIGludCBhbGxvY19zdWJkZXZpY2VzKGNvbWVkaV9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX3N1YmRldmljZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3N1YmRldmljZXMpCiB7CiAJdW5zaWduZWQgaTsKIAogCWRldi0+bl9zdWJkZXZpY2VzID0gbnVtX3N1YmRldmljZXM7CiAJZGV2LT5zdWJkZXZpY2VzID0KLQkJa2NhbGxvYyhudW1fc3ViZGV2aWNlcywgc2l6ZW9mKGNvbWVkaV9zdWJkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwkJa2NhbGxvYyhudW1fc3ViZGV2aWNlcywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPnN1YmRldmljZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCWZvciAoaSA9IDA7IGkgPCBudW1fc3ViZGV2aWNlczsgKytpKSB7CkBAIC00NDQsNyArNDMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWxsb2NfcHJpdmF0ZShjb21lZGlfZGV2aWNlICpkZXYsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgYWxsb2NfcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgc2l6ZSkKIHsKIAlkZXYtPnByaXZhdGUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5wcml2YXRlKQpAQCAtNDUyLDE3ICs0NDEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NhbXBsZShjb25zdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NhbXBsZShjb25zdCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKIHsKIAlpZiAoc3ViZC0+c3ViZGV2X2ZsYWdzICYgU0RGX0xTQU1QTCkKLQkJcmV0dXJuIHNpemVvZihsc2FtcGxfdCk7CisJCXJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKIAllbHNlCi0JCXJldHVybiBzaXplb2Yoc2FtcGxfdCk7CisJCXJldHVybiBzaXplb2Yoc2hvcnQpOwogfQogCiAvKiBtdXN0IGJlIHVzZWQgaW4gYXR0YWNoIHRvIHNldCBkZXYtPmh3X2RldiBpZiB5b3Ugd2lzaCB0byBkbWEgZGlyZWN0bHkKIGludG8gY29tZWRpJ3MgYnVmZmVyICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY29tZWRpX3NldF9od19kZXYoY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpod19kZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgY29tZWRpX3NldF9od19kZXYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqaHdfZGV2KQogewogCWlmIChkZXYtPmh3X2RldikKIAkJcHV0X2RldmljZShkZXYtPmh3X2Rldik7CkBAIC00NzQsMzEgKzQ2MywzMSBAQAogCX0KIH0KIAotaW50IGNvbWVkaV9idWZfcHV0KGNvbWVkaV9hc3luYyAqYXN5bmMsIHNhbXBsX3QgeCk7Ci1pbnQgY29tZWRpX2J1Zl9nZXQoY29tZWRpX2FzeW5jICphc3luYywgc2FtcGxfdCAqeCk7CitpbnQgY29tZWRpX2J1Zl9wdXQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHNob3J0IHgpOworaW50IGNvbWVkaV9idWZfZ2V0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCBzaG9ydCAqeCk7CiAKLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKGNvbWVkaV9hc3luYyAqYXN5bmMpOwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2MoY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Ci11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoY29tZWRpX2FzeW5jICphc3luYywKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jX3N0cmljdChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywKIAl1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKLXVuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfZnJlZShjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKLXVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBuYnl0ZXMpOwotdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2ZyZWUoY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Ci11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGNvbWVkaV9hc3luYyAqYXN5bmMpOwotdm9pZCBjb21lZGlfYnVmX21lbWNweV90byhjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAordW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9mcmVlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwordm9pZCBjb21lZGlfYnVmX21lbWNweV90byhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKIAljb25zdCB2b2lkICpzb3VyY2UsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotdm9pZCBjb21lZGlfYnVmX21lbWNweV9mcm9tKGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCit2b2lkIGNvbWVkaV9idWZfbWVtY3B5X2Zyb20oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJdm9pZCAqZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKGNvbWVkaV9hc3luYyAqYXN5bmMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfbl9hbGxvY2F0ZWQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCiB7CiAJcmV0dXJuIGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50OwogfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfbl9hbGxvY2F0ZWQoY29tZWRpX2FzeW5jICphc3luYykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX25fYWxsb2NhdGVkKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQogewogCXJldHVybiBhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQgLSBhc3luYy0+YnVmX3JlYWRfY291bnQ7CiB9CiAKLXZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1Zihjb21lZGlfYXN5bmMgKmFzeW5jKTsKK3ZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1ZihzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqY29tZWRpX2F1eF9kYXRhKGludCBvcHRpb25zW10sIGludCBuKQogewpAQCAtNTI3LDEwICs1MTYsMTMgQEAKIAogaW50IGNvbWVkaV9hbGxvY19ib2FyZF9taW5vcihzdHJ1Y3QgZGV2aWNlICpoYXJkd2FyZV9kZXZpY2UpOwogdm9pZCBjb21lZGlfZnJlZV9ib2FyZF9taW5vcih1bnNpZ25lZCBtaW5vcik7Ci1pbnQgY29tZWRpX2FsbG9jX3N1YmRldmljZV9taW5vcihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpOwotdm9pZCBjb21lZGlfZnJlZV9zdWJkZXZpY2VfbWlub3IoY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgY29tZWRpX2FsbG9jX3N1YmRldmljZV9taW5vcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7Cit2b2lkIGNvbWVkaV9mcmVlX3N1YmRldmljZV9taW5vcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiBpbnQgY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LCBjb25zdCBjaGFyICpib2FyZF9uYW1lKTsKIHZvaWQgY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOworc3RydWN0IHVzYl9kZXZpY2U7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KK2ludCBjb21lZGlfdXNiX2F1dG9fY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGNvbnN0IGNoYXIgKmJvYXJkX25hbWUpOwordm9pZCBjb21lZGlfdXNiX2F1dG9fdW5jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldik7CiAKICNpbmNsdWRlICJjb21lZGlfcnQuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlsaWIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpbGliLmgKaW5kZXggZmM1ZmMwMS4uYzI3MjkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlsaWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWxpYi5oCkBAIC0zNiwxOCArMzYsMTYgQEAKIAogI2lmbmRlZiBLQ09NRURJTElCX0RFUFJFQ0FURUQKIAotdHlwZWRlZiB2b2lkIGNvbWVkaV90OwotCiAvKiB0aGVzZSBmdW5jdGlvbnMgbWF5IG5vdCBiZSBjYWxsZWQgYXQgcmVhbC10aW1lIHByaW9yaXR5ICovCiAKLWNvbWVkaV90ICpjb21lZGlfb3Blbihjb25zdCBjaGFyICpwYXRoKTsKLWludCBjb21lZGlfY2xvc2UoY29tZWRpX3QgKmRldik7Cit2b2lkICpjb21lZGlfb3Blbihjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjb21lZGlfY2xvc2Uodm9pZCAqZGV2KTsKIAogLyogdGhlc2UgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQgYXQgYW55IHByaW9yaXR5LCBidXQgbWF5IGZhaWwgYXQKICAgIHJlYWwtdGltZSBwcmlvcml0eSAqLwogCi1pbnQgY29tZWRpX2xvY2soY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7Ci1pbnQgY29tZWRpX3VubG9jayhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfbG9jayh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV91bmxvY2sodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKIAogLyogdGhlc2UgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQgYXQgYW55IHByaW9yaXR5LCBidXQgeW91IG11c3QgaG9sZAogICAgdGhlIGxvY2sgZm9yIHRoZSBzdWJkZXZpY2UgKi8KQEAgLTU2LDY4ICs1NCw2OCBAQAogdm9pZCBjb21lZGlfcGVycm9yKGNvbnN0IGNoYXIgKnMpOwogY2hhciAqY29tZWRpX3N0cmVycm9yKGludCBlcnJudW0pOwogaW50IGNvbWVkaV9lcnJubyh2b2lkKTsKLWludCBjb21lZGlfZmlsZW5vKGNvbWVkaV90ICpkZXYpOworaW50IGNvbWVkaV9maWxlbm8odm9pZCAqZGV2KTsKIAotaW50IGNvbWVkaV9jYW5jZWwoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7Ci1pbnQgY29tZWRpX3JlZ2lzdGVyX2NhbGxiYWNrKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2NhbmNlbCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCAoKmNiKSAodW5zaWduZWQgaW50LCB2b2lkICopLCB2b2lkICphcmcpOwogCi1pbnQgY29tZWRpX2NvbW1hbmQoY29tZWRpX3QgKmRldiwgY29tZWRpX2NtZCAqY21kKTsKLWludCBjb21lZGlfY29tbWFuZF90ZXN0KGNvbWVkaV90ICpkZXYsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX3RyaWdnZXIoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgY29tZWRpX3RyaWcgKml0KTsKLWludCBfX2NvbWVkaV90cmlnZ2VyKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIGNvbWVkaV90cmlnICppdCk7Ci1pbnQgY29tZWRpX2RhdGFfd3JpdGUoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCi0JdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgbHNhbXBsX3QgZGF0YSk7Ci1pbnQgY29tZWRpX2RhdGFfcmVhZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCAqZGF0YSk7Ci1pbnQgY29tZWRpX2RhdGFfcmVhZF9oaW50KGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2NvbW1hbmQodm9pZCAqZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK2ludCBjb21lZGlfY29tbWFuZF90ZXN0KHZvaWQgKmRldiwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitpbnQgY29tZWRpX3RyaWdnZXIodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBzdHJ1Y3QgY29tZWRpX3RyaWcgKml0KTsKK2ludCBfX2NvbWVkaV90cmlnZ2VyKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgc3RydWN0IGNvbWVkaV90cmlnICppdCk7CitpbnQgY29tZWRpX2RhdGFfd3JpdGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgZGF0YSk7CitpbnQgY29tZWRpX2RhdGFfcmVhZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAorCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgY29tZWRpX2RhdGFfcmVhZF9oaW50KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZik7Ci1pbnQgY29tZWRpX2RhdGFfcmVhZF9kZWxheWVkKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2RhdGFfcmVhZF9kZWxheWVkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwKLQlsc2FtcGxfdCAqZGF0YSwgdW5zaWduZWQgaW50IG5hbm9fc2VjKTsKLWludCBjb21lZGlfZGlvX2NvbmZpZyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgKmRhdGEsIHVuc2lnbmVkIGludCBuYW5vX3NlYyk7CitpbnQgY29tZWRpX2Rpb19jb25maWcodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgaW8pOwotaW50IGNvbWVkaV9kaW9fcmVhZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKK2ludCBjb21lZGlfZGlvX3JlYWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgKnZhbCk7Ci1pbnQgY29tZWRpX2Rpb193cml0ZShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKK2ludCBjb21lZGlfZGlvX3dyaXRlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50IHZhbCk7Ci1pbnQgY29tZWRpX2Rpb19iaXRmaWVsZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgbWFzaywKK2ludCBjb21lZGlfZGlvX2JpdGZpZWxkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IG1hc2ssCiAJdW5zaWduZWQgaW50ICpiaXRzKTsKLWludCBjb21lZGlfZ2V0X25fc3ViZGV2aWNlcyhjb21lZGlfdCAqZGV2KTsKLWludCBjb21lZGlfZ2V0X3ZlcnNpb25fY29kZShjb21lZGlfdCAqZGV2KTsKLWNvbnN0IGNoYXIgKmNvbWVkaV9nZXRfZHJpdmVyX25hbWUoY29tZWRpX3QgKmRldik7Ci1jb25zdCBjaGFyICpjb21lZGlfZ2V0X2JvYXJkX25hbWUoY29tZWRpX3QgKmRldik7Ci1pbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfdHlwZShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZShjb21lZGlfdCAqZGV2LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN1YmQpOwotaW50IGNvbWVkaV9nZXRfbl9jaGFubmVscyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWxzYW1wbF90IGNvbWVkaV9nZXRfbWF4ZGF0YShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZAoraW50IGNvbWVkaV9nZXRfbl9zdWJkZXZpY2VzKHZvaWQgKmRldik7CitpbnQgY29tZWRpX2dldF92ZXJzaW9uX2NvZGUodm9pZCAqZGV2KTsKK2NvbnN0IGNoYXIgKmNvbWVkaV9nZXRfZHJpdmVyX25hbWUodm9pZCAqZGV2KTsKK2NvbnN0IGNoYXIgKmNvbWVkaV9nZXRfYm9hcmRfbmFtZSh2b2lkICpkZXYpOworaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX3R5cGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKK2ludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZSh2b2lkICpkZXYsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3ViZCk7CitpbnQgY29tZWRpX2dldF9uX2NoYW5uZWxzKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9tYXhkYXRhKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQKIAlpbnQgY2hhbik7Ci1pbnQgY29tZWRpX2dldF9uX3Jhbmdlcyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQKK2ludCBjb21lZGlfZ2V0X25fcmFuZ2VzKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50CiAJY2hhbik7Ci1pbnQgY29tZWRpX2RvX2luc24oY29tZWRpX3QgKmRldiwgY29tZWRpX2luc24gKmluc24pOwotaW50IGNvbWVkaV9wb2xsKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV9kb19pbnNuKHZvaWQgKmRldiwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuKTsKK2ludCBjb21lZGlfcG9sbCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwogCiAvKiBERVBSRUNBVEVEIGZ1bmN0aW9ucyAqLwotaW50IGNvbWVkaV9nZXRfcmFuZ2V0eXBlKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX2dldF9yYW5nZXR5cGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogQUxQSEEgZnVuY3Rpb25zICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfZmxhZ3MoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2dldF9sZW5fY2hhbmxpc3QoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2dldF9rcmFuZ2UoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50Ci0JY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOwotdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwotaW50IGNvbWVkaV9zZXRfdXNlcl9pbnRfY291bnQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X3N1YmRldmljZV9mbGFncyh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9nZXRfbGVuX2NoYW5saXN0KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX2dldF9rcmFuZ2Uodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQKKwljaGFuLCB1bnNpZ25lZCBpbnQgcmFuZ2UsIHN0cnVjdCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOwordW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX3NldF91c2VyX2ludF9jb3VudCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IGJ1Zl91c2VyX2NvdW50KTsKLWludCBjb21lZGlfbWFwKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHZvaWQgKnB0cik7Ci1pbnQgY29tZWRpX3VubWFwKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwotaW50IGNvbWVkaV9nZXRfYnVmZmVyX3NpemUoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7Ci1pbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK2ludCBjb21lZGlfbWFwKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdm9pZCAqcHRyKTsKK2ludCBjb21lZGlfdW5tYXAodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfZ2V0X2J1ZmZlcl9zaXplKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7CitpbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotaW50IGNvbWVkaV9tYXJrX2J1ZmZlcl93cml0dGVuKGNvbWVkaV90ICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9tYXJrX2J1ZmZlcl93cml0dGVuKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IG51bV9ieXRlcyk7Ci1pbnQgY29tZWRpX2dldF9idWZmZXJfY29udGVudHMoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2dldF9idWZmZXJfb2Zmc2V0KGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9nZXRfYnVmZmVyX2NvbnRlbnRzKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX2dldF9idWZmZXJfb2Zmc2V0KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CiAKICNlbHNlCiAKQEAgLTEzOSwxNCArMTM3LDE0IEBACiBpbnQgY29tZWRpX3JlZ2lzdGVyX2NhbGxiYWNrKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgbWFzaywgaW50ICgqY2IpICh1bnNpZ25lZCBpbnQsIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKLWludCBjb21lZGlfY29tbWFuZCh1bnNpZ25lZCBpbnQgbWlub3IsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX2NvbW1hbmRfdGVzdCh1bnNpZ25lZCBpbnQgbWlub3IsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX3RyaWdnZXIodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBjb21lZGlfdHJpZyAqaXQpOwotaW50IF9fY29tZWRpX3RyaWdnZXIodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBjb21lZGlfdHJpZyAqaXQpOworaW50IGNvbWVkaV9jb21tYW5kKHVuc2lnbmVkIGludCBtaW5vciwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitpbnQgY29tZWRpX2NvbW1hbmRfdGVzdCh1bnNpZ25lZCBpbnQgbWlub3IsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworaW50IGNvbWVkaV90cmlnZ2VyKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldiwgc3RydWN0IGNvbWVkaV90cmlnICppdCk7CitpbnQgX19jb21lZGlfdHJpZ2dlcih1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXYsIHN0cnVjdCBjb21lZGlfdHJpZyAqaXQpOwogaW50IGNvbWVkaV9kYXRhX3dyaXRlKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90IGRhdGEpOworCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIHVuc2lnbmVkIGludCBkYXRhKTsKIGludCBjb21lZGlfZGF0YV9yZWFkKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90ICpkYXRhKTsKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogaW50IGNvbWVkaV9kaW9fY29uZmlnKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAogCXVuc2lnbmVkIGludCBpbyk7CiBpbnQgY29tZWRpX2Rpb19yZWFkKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLApAQCAtMTYzLDExICsxNjEsMTEgQEAKIGludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZSh1bnNpZ25lZCBpbnQgbWlub3IsIGludCB0eXBlLAogCXVuc2lnbmVkIGludCBzdWJkKTsKIGludCBjb21lZGlfZ2V0X25fY2hhbm5lbHModW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWxzYW1wbF90IGNvbWVkaV9nZXRfbWF4ZGF0YSh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkCit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9tYXhkYXRhKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQKIAlpbnQgY2hhbik7CiBpbnQgY29tZWRpX2dldF9uX3Jhbmdlcyh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludAogCWNoYW4pOwotaW50IGNvbWVkaV9kb19pbnNuKHVuc2lnbmVkIGludCBtaW5vciwgY29tZWRpX2luc24gKmluc24pOworaW50IGNvbWVkaV9kb19pbnNuKHVuc2lnbmVkIGludCBtaW5vciwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuKTsKIGludCBjb21lZGlfcG9sbCh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXYpOwogCiAvKiBERVBSRUNBVEVEIGZ1bmN0aW9ucyAqLwpAQCAtMTc5LDcgKzE3Nyw3IEBACiAJc3ViZGV2aWNlKTsKIGludCBjb21lZGlfZ2V0X2xlbl9jaGFubGlzdCh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwogaW50IGNvbWVkaV9nZXRfa3JhbmdlKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50Ci0JY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOworCWNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSk7CiB1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9idWZfaGVhZF9wb3ModW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQKIAlzdWJkZXZpY2UpOwogaW50IGNvbWVkaV9zZXRfdXNlcl9pbnRfY291bnQodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYwppbmRleCAzNmE5M2I5Li42ZTEzZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQ2LDI2ICs0NywyNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotc3RhdGljIGludCBwb3N0Y29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBpbnNuX3J3X2VtdWxhdGVfYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgdm9pZCAqY29tZWRpX3JlY29nbml6ZShjb21lZGlfZHJpdmVyICogZHJpdiwgY29uc3QgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBjb21lZGlfcmVwb3J0X2JvYXJkcyhjb21lZGlfZHJpdmVyICogZHJpdik7Ci1zdGF0aWMgaW50IHBvbGxfaW52YWxpZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7Ci1pbnQgY29tZWRpX2J1Zl9hbGxvYyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgcG9zdGNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaW5zbl9yd19lbXVsYXRlX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIHZvaWQgKmNvbWVkaV9yZWNvZ25pemUoc3RydWN0IGNvbWVkaV9kcml2ZXIgKiBkcml2LCBjb25zdCBjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkIGNvbWVkaV9yZXBvcnRfYm9hcmRzKHN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2KTsKK3N0YXRpYyBpbnQgcG9sbF9pbnZhbGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2ludCBjb21lZGlfYnVmX2FsbG9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpOwogCi1jb21lZGlfZHJpdmVyICpjb21lZGlfZHJpdmVyczsKK3N0cnVjdCBjb21lZGlfZHJpdmVyICpjb21lZGlfZHJpdmVyczsKIAogaW50IGNvbWVkaV9tb2Rwcm9iZShpbnQgbWlub3IpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBfZGV2aWNlKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWludCBpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CkBAIC04MCwxMCArODEsOCBAQAogCQlkZXYtPnN1YmRldmljZXMgPSBOVUxMOwogCQlkZXYtPm5fc3ViZGV2aWNlcyA9IDA7CiAJfQotCWlmIChkZXYtPnByaXZhdGUpIHsKLQkJa2ZyZWUoZGV2LT5wcml2YXRlKTsKLQkJZGV2LT5wcml2YXRlID0gTlVMTDsKLQl9CisJa2ZyZWUoZGV2LT5wcml2YXRlKTsKKwlkZXYtPnByaXZhdGUgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gMDsKIAlkZXYtPmJvYXJkX25hbWUgPSBOVUxMOwogCWRldi0+Ym9hcmRfcHRyID0gTlVMTDsKQEAgLTk2LDcgKzk1LDcgQEAKIAljb21lZGlfc2V0X2h3X2RldihkZXYsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5hdHRhY2hlZCA9IDA7CiAJaWYgKGRldi0+ZHJpdmVyKSB7CkBAIC0xMDcsMTYgKzEwNiwxNiBAQAogCWNsZWFudXBfZGV2aWNlKGRldik7CiB9CiAKLXZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3ZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoIWRldi0+YXR0YWNoZWQpCiAJCXJldHVybjsKIAlfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKGRldik7CiB9CiAKLWludCBjb21lZGlfZGV2aWNlX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitpbnQgY29tZWRpX2RldmljZV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9kcml2ZXIgKmRyaXY7CisJc3RydWN0IGNvbWVkaV9kcml2ZXIgKmRyaXY7CiAJaW50IHJldDsKIAogCWlmIChkZXYtPmF0dGFjaGVkKQpAQCAtMTM5LDcgKzEzOCw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KLQkJLy9pbml0aWFsaXplIGRldi0+ZHJpdmVyIGhlcmUgc28gY29tZWRpX2Vycm9yKCkgY2FuIGJlIGNhbGxlZCBmcm9tIGF0dGFjaAorCQkvKiBpbml0aWFsaXplIGRldi0+ZHJpdmVyIGhlcmUgc28gY29tZWRpX2Vycm9yKCkgY2FuIGJlIGNhbGxlZCBmcm9tIGF0dGFjaCAqLwogCQlkZXYtPmRyaXZlciA9IGRyaXY7CiAJCXJldCA9IGRyaXYtPmF0dGFjaChkZXYsIGl0KTsKIAkJaWYgKHJldCA8IDApIHsKQEAgLTE1MCw4ICsxNDksOCBAQAogCQlnb3RvIGF0dGFjaGVkOwogCX0KIAotCS8vIHJlY29nbml6ZSBoYXMgZmFpbGVkIGlmIHdlIGdldCBoZXJlCi0JLy8gcmVwb3J0IHZhbGlkIGJvYXJkIG5hbWVzIGJlZm9yZSByZXR1cm5pbmcgZXJyb3IKKwkvKiAgcmVjb2duaXplIGhhcyBmYWlsZWQgaWYgd2UgZ2V0IGhlcmUgKi8KKwkvKiAgcmVwb3J0IHZhbGlkIGJvYXJkIG5hbWVzIGJlZm9yZSByZXR1cm5pbmcgZXJyb3IgKi8KIAlmb3IgKGRyaXYgPSBjb21lZGlfZHJpdmVyczsgZHJpdjsgZHJpdiA9IGRyaXYtPm5leHQpIHsKIAkJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2LT5tb2R1bGUpKSB7CiAJCQlwcmludGsoImNvbWVkaTogZmFpbGVkIHRvIGluY3JlbWVudCBtb2R1bGUgY291bnRcbiIpOwpAQCAtMTgxLDcgKzE4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKGNvbWVkaV9kcml2ZXIgKiBkcml2ZXIpCitpbnQgY29tZWRpX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdmVyKQogewogCWRyaXZlci0+bmV4dCA9IGNvbWVkaV9kcml2ZXJzOwogCWNvbWVkaV9kcml2ZXJzID0gZHJpdmVyOwpAQCAtMTg5LDE1ICsxODgsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvbWVkaV9kcml2ZXJfdW5yZWdpc3Rlcihjb21lZGlfZHJpdmVyICogZHJpdmVyKQoraW50IGNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdmVyKQogewotCWNvbWVkaV9kcml2ZXIgKnByZXY7CisJc3RydWN0IGNvbWVkaV9kcml2ZXIgKnByZXY7CiAJaW50IGk7CiAKIAkvKiBjaGVjayBmb3IgZGV2aWNlcyB1c2luZyB0aGlzIGRyaXZlciAqLwogCWZvciAoaSA9IDA7IGkgPCBDT01FRElfTlVNX0JPQVJEX01JTk9SUzsgaSsrKSB7CiAJCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9IGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhpKTsKLQkJY29tZWRpX2RldmljZSAqZGV2OworCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCiAJCWlmKGRldl9maWxlX2luZm8gPT0gTlVMTCkgY29udGludWU7CiAJCWRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKQEAgLTIyNSwxMSArMjI0LDExIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgcG9zdGNvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBwb3N0Y29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gTlVMTDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CiAJaW50IHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CkBAIC0yNDYsNyArMjQ1LDcgQEAKIAkJCQlTREZfQ01EX1dSSVRFKSkgPT0gMCk7CiAJCQlCVUdfT04oIXMtPmRvX2NtZHRlc3QpOwogCi0JCQlhc3luYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbWVkaV9hc3luYyksIEdGUF9LRVJORUwpOworCQkJYXN5bmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2FzeW5jKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoYXN5bmMgPT0gTlVMTCkgewogCQkJCXByaW50aygiZmFpbGVkIHRvIGFsbG9jYXRlIGFzeW5jIHN0cnVjdFxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yOTgsOCArMjk3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLy8gZ2VuZXJpYyByZWNvZ25pemUgZnVuY3Rpb24gZm9yIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVpciBzdXBwb3J0ZWQgYm9hcmQgbmFtZXMKLXZvaWQgKmNvbWVkaV9yZWNvZ25pemUoY29tZWRpX2RyaXZlciAqIGRyaXYsIGNvbnN0IGNoYXIgKm5hbWUpCisvKiAgZ2VuZXJpYyByZWNvZ25pemUgZnVuY3Rpb24gZm9yIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVpciBzdXBwb3J0ZWQgYm9hcmQgbmFtZXMgKi8KK3ZvaWQgKmNvbWVkaV9yZWNvZ25pemUoc3RydWN0IGNvbWVkaV9kcml2ZXIgKiBkcml2LCBjb25zdCBjaGFyICpuYW1lKQogewogCXVuc2lnbmVkIGk7CiAJY29uc3QgY2hhciAqY29uc3QgKm5hbWVfcHRyID0gZHJpdi0+Ym9hcmRfbmFtZTsKQEAgLTMxNCw3ICszMTMsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGNvbWVkaV9yZXBvcnRfYm9hcmRzKGNvbWVkaV9kcml2ZXIgKiBkcml2KQordm9pZCBjb21lZGlfcmVwb3J0X2JvYXJkcyhzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCBjaGFyICpjb25zdCAqbmFtZV9wdHI7CkBAIC0zMzIsMjggKzMzMSwyOCBAQAogCQlwcmludGsoIiAlc1xuIiwgZHJpdi0+ZHJpdmVyX25hbWUpOwogfQogCi1zdGF0aWMgaW50IHBvbGxfaW52YWxpZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgcG9sbF9pbnZhbGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQgaW5zbl9pbnZhbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK2ludCBpbnNuX2ludmFsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGluc25fcndfZW11bGF0ZV9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpbnNuX3J3X2VtdWxhdGVfYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKLQljb21lZGlfaW5zbiBuZXdfaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gbmV3X2luc247CiAJaW50IHJldDsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhbm5lbHNfcGVyX2JpdGZpZWxkID0gMzI7CiAKIAl1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJY29uc3QgdW5zaWduZWQgYmFzZV9iaXRmaWVsZF9jaGFubmVsID0KIAkJKGNoYW4gPCBjaGFubmVsc19wZXJfYml0ZmllbGQpID8gMCA6IGNoYW47Ci0JbHNhbXBsX3QgbmV3X2RhdGFbMl07CisJdW5zaWduZWQgaW50IG5ld19kYXRhWzJdOwogCW1lbXNldChuZXdfZGF0YSwgMCwgc2l6ZW9mKG5ld19kYXRhKSk7CiAJbWVtc2V0KCZuZXdfaW5zbiwgMCwgc2l6ZW9mKG5ld19pbnNuKSk7CiAJbmV3X2luc24uaW5zbiA9IElOU05fQklUUzsKQEAgLTM4MCw3ICszNzksNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZpcnRfdG9fa3ZhKHBnZF90ICogcGdkLCB1bnNpZ25lZCBsb25nIGFkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dmlydF90b19rdmEocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZHIpCiB7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwVUw7CiAJcG1kX3QgKnBtZDsKQEAgLTQxMywxMCArNDEyLDEwIEBACiAJcmV0dXJuIGt2YTsKIH0KIAotaW50IGNvbWVkaV9idWZfYWxsb2MoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitpbnQgY29tZWRpX2J1Zl9hbGxvYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBsb25nIG5ld19zaXplKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCiAJLyogUm91bmQgdXAgbmV3X3NpemUgdG8gbXVsdGlwbGUgb2YgUEFHRV9TSVpFICovCiAJbmV3X3NpemUgPSAobmV3X3NpemUgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKQEAgLTQyNSw3ICs0MjQsNyBAQAogCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmICYmIGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSBuZXdfc2l6ZSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JLy8gZGVhbGxvY2F0ZSBvbGQgYnVmZmVyCisJLyogIGRlYWxsb2NhdGUgb2xkIGJ1ZmZlciAqLwogCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmKSB7CiAJCXZ1bm1hcChhc3luYy0+cHJlYWxsb2NfYnVmKTsKIAkJYXN5bmMtPnByZWFsbG9jX2J1ZiA9IE5VTEw7CkBAIC00NTQsNyArNDUzLDcgQEAKIAkJYXN5bmMtPmJ1Zl9wYWdlX2xpc3QgPSBOVUxMOwogCQlhc3luYy0+bl9idWZfcGFnZXMgPSAwOwogCX0KLQkvLyBhbGxvY2F0ZSBuZXcgYnVmZmVyCisJLyogIGFsbG9jYXRlIG5ldyBidWZmZXIgKi8KIAlpZiAobmV3X3NpemUpIHsKIAkJdW5zaWduZWQgaSA9IDA7CiAJCXVuc2lnbmVkIG5fcGFnZXMgPSBuZXdfc2l6ZSA+PiBQQUdFX1NISUZUOwpAQCAtNTM3LDE2ICs1MzYsMTUgQEAKIAogLyogbXVuZ2luZyBpcyBhcHBsaWVkIHRvIGRhdGEgYnkgY29yZSBhcyBpdCBwYXNzZXMgYmV0d2VlbiB1c2VyCiAgKiBhbmQga2VybmVsIHNwYWNlICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9tdW5nZShjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG51bV9ieXRlcykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX211bmdlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBhc3luYy0+c3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gYXN5bmMtPnN1YmRldmljZTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWNvbnN0IHVuc2lnbmVkIG51bV9zYW1wbGVfYnl0ZXMgPSBieXRlc19wZXJfc2FtcGxlKHMpOwogCiAJaWYgKHMtPm11bmdlID09IE5VTEwgfHwgKGFzeW5jLT5jbWQuZmxhZ3MgJiBDTURGX1JBV0RBVEEpKSB7CiAJCWFzeW5jLT5tdW5nZV9jb3VudCArPSBudW1fYnl0ZXM7Ci0JCWlmICgoaW50KShhc3luYy0+bXVuZ2VfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50KSA+IDApCi0JCQlCVUcoKTsKKwkJQlVHX09OKChpbnQpKGFzeW5jLT5tdW5nZV9jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQpID4gMCk7CiAJCXJldHVybiBudW1fYnl0ZXM7CiAJfQogCS8qIGRvbid0IG11bmdlIHBhcnRpYWwgc2FtcGxlcyAqLwpAQCAtNTY3LDcgKzU2NSw3IEBACiAJCXMtPm11bmdlKHMtPmRldmljZSwgcywgYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5tdW5nZV9wdHIsCiAJCQlibG9ja19zaXplLCBhc3luYy0+bXVuZ2VfY2hhbik7CiAKLQkJc21wX3dtYigpOwkvL2JhcnJpZXIgaW5zdXJlcyBkYXRhIGlzIG11bmdlZCBpbiBidWZmZXIgYmVmb3JlIG11bmdlX2NvdW50IGlzIGluY3JlbWVudGVkCisJCXNtcF93bWIoKTsJLyogYmFycmllciBpbnN1cmVzIGRhdGEgaXMgbXVuZ2VkIGluIGJ1ZmZlciBiZWZvcmUgbXVuZ2VfY291bnQgaXMgaW5jcmVtZW50ZWQgKi8KIAogCQlhc3luYy0+bXVuZ2VfY2hhbiArPSBibG9ja19zaXplIC8gbnVtX3NhbXBsZV9ieXRlczsKIAkJYXN5bmMtPm11bmdlX2NoYW4gJT0gYXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CkBAIC01NzYsMTIgKzU3NCwxMSBAQAogCQlhc3luYy0+bXVuZ2VfcHRyICU9IGFzeW5jLT5wcmVhbGxvY19idWZzejsKIAkJY291bnQgKz0gYmxvY2tfc2l6ZTsKIAl9Ci0JaWYgKChpbnQpKGFzeW5jLT5tdW5nZV9jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQpID4gMCkKLQkJQlVHKCk7CisJQlVHX09OKChpbnQpKGFzeW5jLT5tdW5nZV9jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQpID4gMCk7CiAJcmV0dXJuIGNvdW50OwogfQogCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2F2YWlsYWJsZShjb21lZGlfYXN5bmMgKiBhc3luYykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQogewogCXVuc2lnbmVkIGludCBmcmVlX2VuZDsKIAl1bnNpZ25lZCBpbnQgbmJ5dGVzOwpAQCAtNjAxLDcgKzU5OCw3IEBACiB9CiAKIC8qIGFsbG9jYXRlcyBjaHVuayBmb3IgdGhlIHdyaXRlciBmcm9tIGZyZWUgYnVmZmVyIHNwYWNlICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXVuc2lnbmVkIGludCBmcmVlX2VuZCA9IGFzeW5jLT5idWZfcmVhZF9jb3VudCArIGFzeW5jLT5wcmVhbGxvY19idWZzejsKIApAQCAtNjE2LDcgKzYxMyw3IEBACiB9CiAKIC8qIGFsbG9jYXRlcyBub3RoaW5nIHVubGVzcyBpdCBjYW4gY29tcGxldGVseSBmdWxmaWxsIHRoZSByZXF1ZXN0ICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoY29tZWRpX2FzeW5jICogYXN5bmMsCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3Qoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsCiAJdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl1bnNpZ25lZCBpbnQgZnJlZV9lbmQgPSBhc3luYy0+YnVmX3JlYWRfY291bnQgKyBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CkBAIC02MzIsNyArNjI5LDcgQEAKIH0KIAogLyogdHJhbnNmZXJzIGEgY2h1bmsgZnJvbSB3cml0ZXIgdG8gZmlsbGVkIGJ1ZmZlciBzcGFjZSAqLwotdW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKGNvbWVkaV9hc3luYyAqIGFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQordW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCWlmICgoaW50KShhc3luYy0+YnVmX3dyaXRlX2NvdW50ICsgbmJ5dGVzIC0KIAkJCWFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQpID4gMCkgewpAQCAtNjUwLDcgKzY0Nyw3IEBACiB9CiAKIC8qIGFsbG9jYXRlcyBhIGNodW5rIGZvciB0aGUgcmVhZGVyIGZyb20gZmlsbGVkIChhbmQgbXVuZ2VkKSBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgbmJ5dGVzKQordW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBuYnl0ZXMpCiB7CiAJaWYgKChpbnQpKGFzeW5jLT5idWZfcmVhZF9hbGxvY19jb3VudCArIG5ieXRlcyAtIGFzeW5jLT5tdW5nZV9jb3VudCkgPgogCQkwKSB7CkBAIC02NjQsOSArNjYxLDkgQEAKIH0KIAogLyogdHJhbnNmZXJzIGNvbnRyb2wgb2YgYSBjaHVuayBmcm9tIHJlYWRlciB0byBmcmVlIGJ1ZmZlciBzcGFjZSAqLwotdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2ZyZWUoY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit1bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQkvLyBiYXJyaWVyIGluc3VyZXMgZGF0YSBoYXMgYmVlbiByZWFkIG91dCBvZiBidWZmZXIgYmVmb3JlIHJlYWQgY291bnQgaXMgaW5jcmVtZW50ZWQKKwkvKiAgYmFycmllciBpbnN1cmVzIGRhdGEgaGFzIGJlZW4gcmVhZCBvdXQgb2YgYnVmZmVyIGJlZm9yZSByZWFkIGNvdW50IGlzIGluY3JlbWVudGVkICovCiAJc21wX21iKCk7CiAJaWYgKChpbnQpKGFzeW5jLT5idWZfcmVhZF9jb3VudCArIG5ieXRlcyAtCiAJCQlhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQpID4gMCkgewpAQCAtNjgwLDcgKzY3Nyw3IEBACiAJcmV0dXJuIG5ieXRlczsKIH0KIAotdm9pZCBjb21lZGlfYnVmX21lbWNweV90byhjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKIAl1bnNpZ25lZCBpbnQgd3JpdGVfcHRyID0gYXN5bmMtPmJ1Zl93cml0ZV9wdHIgKyBvZmZzZXQ7CkBAIC03MDUsNyArNzAyLDcgQEAKIAl9CiB9CiAKLXZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKIAl2b2lkICpkZXN0LCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXZvaWQgKnNyYzsKQEAgLTczMSw3ICs3MjgsNyBAQAogCX0KIH0KIAotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShjb21lZGlfYXN5bmMgKiBhc3luYykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCiB7CiAJdW5zaWduZWQgbnVtX2J5dGVzOwogCkBAIC03NDYsMzIgKzc0MywzMiBAQAogCXJldHVybiBudW1fYnl0ZXM7CiB9CiAKLWludCBjb21lZGlfYnVmX2dldChjb21lZGlfYXN5bmMgKiBhc3luYywgc2FtcGxfdCAqIHgpCitpbnQgY29tZWRpX2J1Zl9nZXQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHNob3J0ICp4KQogewogCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGFzeW5jKTsKIAotCWlmIChuIDwgc2l6ZW9mKHNhbXBsX3QpKQorCWlmIChuIDwgc2l6ZW9mKHNob3J0KSkKIAkJcmV0dXJuIDA7Ci0JY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBzaXplb2Yoc2FtcGxfdCkpOwotCSp4ID0gKihzYW1wbF90ICopIChhc3luYy0+cHJlYWxsb2NfYnVmICsgYXN5bmMtPmJ1Zl9yZWFkX3B0cik7Ci0JY29tZWRpX2J1Zl9yZWFkX2ZyZWUoYXN5bmMsIHNpemVvZihzYW1wbF90KSk7CisJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBzaXplb2Yoc2hvcnQpKTsKKwkqeCA9ICooc2hvcnQgKikgKGFzeW5jLT5wcmVhbGxvY19idWYgKyBhc3luYy0+YnVmX3JlYWRfcHRyKTsKKwljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgc2l6ZW9mKHNob3J0KSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBjb21lZGlfYnVmX3B1dChjb21lZGlfYXN5bmMgKiBhc3luYywgc2FtcGxfdCB4KQoraW50IGNvbWVkaV9idWZfcHV0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCBzaG9ydCB4KQogewotCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoYXN5bmMsIHNpemVvZihzYW1wbF90KSk7CisJdW5zaWduZWQgaW50IG4gPSBjb21lZGlfYnVmX3dyaXRlX2FsbG9jX3N0cmljdChhc3luYywgc2l6ZW9mKHNob3J0KSk7CiAKLQlpZiAobiA8IHNpemVvZihzYW1wbF90KSkgeworCWlmIChuIDwgc2l6ZW9mKHNob3J0KSkgewogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKIAkJcmV0dXJuIDA7CiAJfQotCSooc2FtcGxfdCAqKSAoYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5idWZfd3JpdGVfcHRyKSA9IHg7Ci0JY29tZWRpX2J1Zl93cml0ZV9mcmVlKGFzeW5jLCBzaXplb2Yoc2FtcGxfdCkpOworCSooc2hvcnQgKikgKGFzeW5jLT5wcmVhbGxvY19idWYgKyBhc3luYy0+YnVmX3dyaXRlX3B0cikgPSB4OworCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgc2l6ZW9mKHNob3J0KSk7CiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1Zihjb21lZGlfYXN5bmMgKiBhc3luYykKK3ZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1ZihzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKIHsKIAlhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ID0gMDsKIAlhc3luYy0+YnVmX3dyaXRlX2NvdW50ID0gMDsKQEAgLTc5MiwxNCArNzg5LDI3IEBACiAKIGludCBjb21lZGlfYXV0b19jb25maWcoc3RydWN0IGRldmljZSAqaGFyZHdhcmVfZGV2aWNlLCBjb25zdCBjaGFyICpib2FyZF9uYW1lLCBjb25zdCBpbnQgKm9wdGlvbnMsIHVuc2lnbmVkIG51bV9vcHRpb25zKQogewotCWNvbWVkaV9kZXZjb25maWcgaXQ7CisJc3RydWN0IGNvbWVkaV9kZXZjb25maWcgaXQ7CiAJaW50IG1pbm9yOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbzsKIAlpbnQgcmV0dmFsOworCXVuc2lnbmVkICpwcml2YXRlX2RhdGEgPSBOVUxMOworCisJaWYgKCFjb21lZGlfYXV0b2NvbmZpZykgeworCQlkZXZfc2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlLCBOVUxMKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJbWlub3IgPSBjb21lZGlfYWxsb2NfYm9hcmRfbWlub3IoaGFyZHdhcmVfZGV2aWNlKTsKIAlpZihtaW5vciA8IDApIHJldHVybiBtaW5vcjsKLQlkZXZfc2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlLCAodm9pZCopKHVuc2lnbmVkIGxvbmcpbWlub3IpOworCisJcHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdmF0ZV9kYXRhID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwOworCX0KKwkqcHJpdmF0ZV9kYXRhID0gbWlub3I7CisJZGV2X3NldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSwgcHJpdmF0ZV9kYXRhKTsKIAogCWRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwogCkBAIC04MTIsOCArODIyLDExIEBACiAJbXV0ZXhfbG9jaygmZGV2X2ZpbGVfaW5mby0+ZGV2aWNlLT5tdXRleCk7CiAJcmV0dmFsID0gY29tZWRpX2RldmljZV9hdHRhY2goZGV2X2ZpbGVfaW5mby0+ZGV2aWNlLCAmaXQpOwogCW11dGV4X3VubG9jaygmZGV2X2ZpbGVfaW5mby0+ZGV2aWNlLT5tdXRleCk7CisKK2NsZWFudXA6CiAJaWYocmV0dmFsIDwgMCkKIAl7CisJCWtmcmVlKHByaXZhdGVfZGF0YSk7CiAJCWNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKG1pbm9yKTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKQEAgLTgyMSwyMCArODM0LDIzIEBACiAKIHZvaWQgY29tZWRpX2F1dG9fdW5jb25maWcoc3RydWN0IGRldmljZSAqaGFyZHdhcmVfZGV2aWNlKQogewotCXVuc2lnbmVkIGxvbmcgbWlub3IgPSAodW5zaWduZWQgbG9uZylkZXZfZ2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlKTsKKwl1bnNpZ25lZCAqbWlub3IgPSAodW5zaWduZWQgKilkZXZfZ2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlKTsKKwlpZihtaW5vciA9PSBOVUxMKSByZXR1cm47CiAKLQlCVUdfT04obWlub3IgPj0gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpOworCUJVR19PTigqbWlub3IgPj0gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpOwogCi0JY29tZWRpX2ZyZWVfYm9hcmRfbWlub3IobWlub3IpOworCWNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKCptaW5vcik7CisJZGV2X3NldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSwgTlVMTCk7CisJa2ZyZWUobWlub3IpOwogfQogCiBpbnQgY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LCBjb25zdCBjaGFyICpib2FyZF9uYW1lKQogewogCWludCBvcHRpb25zWzJdOwogCi0JLy8gcGNpIGJ1cworCS8qICBwY2kgYnVzICovCiAJb3B0aW9uc1swXSA9IHBjaWRldi0+YnVzLT5udW1iZXI7Ci0JLy8gcGNpIHNsb3QKKwkvKiAgcGNpIHNsb3QgKi8KIAlvcHRpb25zWzFdID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CiAKIAlyZXR1cm4gY29tZWRpX2F1dG9fY29uZmlnKCZwY2lkZXYtPmRldiwgYm9hcmRfbmFtZSwgb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpIC8gc2l6ZW9mKG9wdGlvbnNbMF0pKTsKQEAgLTg0NCwzICs4NjAsMTYgQEAKIHsKIAljb21lZGlfYXV0b191bmNvbmZpZygmcGNpZGV2LT5kZXYpOwogfQorCitpbnQgY29tZWRpX3VzYl9hdXRvX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LAorCWNvbnN0IGNoYXIgKmJvYXJkX25hbWUpCit7CisJQlVHX09OKHVzYmRldiA9PSBOVUxMKTsKKwlyZXR1cm4gY29tZWRpX2F1dG9fY29uZmlnKCZ1c2JkZXYtPmRldiwgYm9hcmRfbmFtZSwgTlVMTCwgMCk7Cit9CisKK3ZvaWQgY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYpCit7CisJQlVHX09OKHVzYmRldiA9PSBOVUxMKTsKKwljb21lZGlfYXV0b191bmNvbmZpZygmdXNiZGV2LT5kZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjUzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhMTFhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjUzLmgKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvODI1My5oCisgICAgSGVhZGVyIGZpbGUgZm9yIDgyNTMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBfODI1M19ICisjZGVmaW5lIF84MjUzX0gKKworI2lmbmRlZiBDTURURVNUCisjaW5jbHVkZSAiLi4vY29tZWRpLmgiCisjZWxzZQorI2luY2x1ZGUgIi4uL2NvbWVkaS5oIgorI2VuZGlmCisKKyNkZWZpbmUgaTgyNTNfY2FzY2FkZV9uc190b190aW1lciBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYKKworc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdl9vbGQoaW50IGk4MjUzX29zY19iYXNlLAorCXVuc2lnbmVkIGludCAqZDEsIHVuc2lnbmVkIGludCAqZDIsIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2aWRlcjsKKwlpbnQgZGl2MSwgZGl2MjsKKwlpbnQgZGl2MV9nbGIsIGRpdjJfZ2xiLCBuc19nbGI7CisJaW50IGRpdjFfbHViLCBkaXYyX2x1YiwgbnNfbHViOworCWludCBuczsKKworCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBpODI1M19vc2NfYmFzZSAvIDIpIC8gaTgyNTNfb3NjX2Jhc2U7CisKKwkvKiBmaW5kIDIgaW50ZWdlcnMgMTw9e3gseX08PTY1NTM2IHN1Y2ggdGhhdCB4KnkgaXMKKwkgICBjbG9zZSB0byBkaXZpZGVyICovCisKKwlkaXYxX2x1YiA9IGRpdjJfbHViID0gMDsKKwlkaXYxX2dsYiA9IGRpdjJfZ2xiID0gMDsKKworCW5zX2dsYiA9IDA7CisJbnNfbHViID0gMHhmZmZmZmZmZjsKKworCWRpdjIgPSAweDEwMDAwOworCWZvciAoZGl2MSA9IGRpdmlkZXIgLyA2NTUzNiArIDE7IGRpdjEgPCBkaXYyOyBkaXYxKyspIHsKKwkJZGl2MiA9IGRpdmlkZXIgLyBkaXYxOworCisJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKKwkJaWYgKG5zIDw9ICpuYW5vc2VjICYmIG5zID4gbnNfZ2xiKSB7CisJCQluc19nbGIgPSBuczsKKwkJCWRpdjFfZ2xiID0gZGl2MTsKKwkJCWRpdjJfZ2xiID0gZGl2MjsKKwkJfQorCisJCWRpdjIrKzsKKwkJaWYgKGRpdjIgPD0gNjU1MzYpIHsKKwkJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKKwkJCWlmIChucyA+ICpuYW5vc2VjICYmIG5zIDwgbnNfbHViKSB7CisJCQkJbnNfbHViID0gbnM7CisJCQkJZGl2MV9sdWIgPSBkaXYxOworCQkJCWRpdjJfbHViID0gZGl2MjsKKwkJCX0KKwkJfQorCX0KKworCSpuYW5vc2VjID0gZGl2MV9sdWIgKiBkaXYyX2x1YiAqIGk4MjUzX29zY19iYXNlOworCSpkMSA9IGRpdjFfbHViICYgMHhmZmZmOworCSpkMiA9IGRpdjJfbHViICYgMHhmZmZmOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfcG93ZXIoaW50IGk4MjUzX29zY19iYXNlLAorCXVuc2lnbmVkIGludCAqZDEsIHVuc2lnbmVkIGludCAqZDIsIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2MSwgZGl2MjsKKwlpbnQgYmFzZTsKKworCWZvciAoZGl2MSA9IDI7IGRpdjEgPD0gKDEgPDwgMTYpOyBkaXYxIDw8PSAxKSB7CisJCWJhc2UgPSBpODI1M19vc2NfYmFzZSAqIGRpdjE7CisJCXJvdW5kX21vZGUgJj0gVFJJR19ST1VORF9NQVNLOworCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCWRlZmF1bHQ6CisJCQlkaXYyID0gKCpuYW5vc2VjICsgYmFzZSAvIDIpIC8gYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCWRpdjIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlkaXYyID0gKCpuYW5vc2VjICsgYmFzZSAtIDEpIC8gYmFzZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkaXYyIDwgMikKKwkJCWRpdjIgPSAyOworCQlpZiAoZGl2MiA8PSA2NTUzNikgeworCQkJKm5hbm9zZWMgPSBkaXYyICogYmFzZTsKKwkJCSpkMSA9IGRpdjEgJiAweGZmZmY7CisJCQkqZDIgPSBkaXYyICYgMHhmZmZmOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogc2hvdWxkbid0IGdldCBoZXJlICovCisJZGl2MSA9IDB4MTAwMDA7CisJZGl2MiA9IDB4MTAwMDA7CisJKm5hbm9zZWMgPSBkaXYxICogZGl2MiAqIGk4MjUzX29zY19iYXNlOworCSpkMSA9IGRpdjEgJiAweGZmZmY7CisJKmQyID0gZGl2MiAmIDB4ZmZmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihpbnQgaTgyNTNfb3NjX2Jhc2UsCisJdW5zaWduZWQgaW50ICpkMSwgdW5zaWduZWQgaW50ICpkMiwgdW5zaWduZWQgaW50ICpuYW5vc2VjLAorCWludCByb3VuZF9tb2RlKQoreworCXVuc2lnbmVkIGludCBkaXZpZGVyOworCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyOworCXVuc2lnbmVkIGludCBkaXYxX2dsYiwgZGl2Ml9nbGIsIG5zX2dsYjsKKwl1bnNpZ25lZCBpbnQgZGl2MV9sdWIsIGRpdjJfbHViLCBuc19sdWI7CisJdW5zaWduZWQgaW50IG5zOworCXVuc2lnbmVkIGludCBzdGFydDsKKwl1bnNpZ25lZCBpbnQgbnNfbG93LCBuc19oaWdoOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X2NvdW50ID0gMHgxMDAwMDsKKwkvKiBleGl0IGVhcmx5IGlmIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3JyZWN0ICh0aGlzIGNhbiBzYXZlIHRpbWUKKwkgKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSBkdXJpbmcgY29tbWFuZCB0ZXN0cworCSAqIGFuZCBleGVjdXRpb24pICovCisJZGl2MSA9ICpkMSA/ICpkMSA6IG1heF9jb3VudDsKKwlkaXYyID0gKmQyID8gKmQyIDogbWF4X2NvdW50OworCWRpdmlkZXIgPSBkaXYxICogZGl2MjsKKwlpZiAoZGl2MSAqIGRpdjIgKiBpODI1M19vc2NfYmFzZSA9PSAqbmFub3NlYyAmJgorCQlkaXYxID4gMSAmJiBkaXYxIDw9IG1heF9jb3VudCAmJgorCQlkaXYyID4gMSAmJiBkaXYyIDw9IG1heF9jb3VudCAmJgorCQkvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KKwkJZGl2aWRlciA+IGRpdjEgJiYgZGl2aWRlciA+IGRpdjIgJiYKKwkJZGl2aWRlciAqIGk4MjUzX29zY19iYXNlID4gZGl2aWRlciAmJgorCQlkaXZpZGVyICogaTgyNTNfb3NjX2Jhc2UgPiBpODI1M19vc2NfYmFzZSkgeworCQlyZXR1cm47CisJfQorCisJZGl2aWRlciA9ICpuYW5vc2VjIC8gaTgyNTNfb3NjX2Jhc2U7CisKKwlkaXYxX2x1YiA9IGRpdjJfbHViID0gMDsKKwlkaXYxX2dsYiA9IGRpdjJfZ2xiID0gMDsKKworCW5zX2dsYiA9IDA7CisJbnNfbHViID0gMHhmZmZmZmZmZjsKKworCWRpdjIgPSBtYXhfY291bnQ7CisJc3RhcnQgPSBkaXZpZGVyIC8gZGl2MjsKKwlpZiAoc3RhcnQgPCAyKQorCQlzdGFydCA9IDI7CisJZm9yIChkaXYxID0gc3RhcnQ7IGRpdjEgPD0gZGl2aWRlciAvIGRpdjEgKyAxICYmIGRpdjEgPD0gbWF4X2NvdW50OworCQlkaXYxKyspIHsKKwkJZm9yIChkaXYyID0gZGl2aWRlciAvIGRpdjE7CisJCQlkaXYxICogZGl2MiA8PSBkaXZpZGVyICsgZGl2MSArIDEgJiYgZGl2MiA8PSBtYXhfY291bnQ7CisJCQlkaXYyKyspIHsKKwkJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKKwkJCWlmIChucyA8PSAqbmFub3NlYyAmJiBucyA+IG5zX2dsYikgeworCQkJCW5zX2dsYiA9IG5zOworCQkJCWRpdjFfZ2xiID0gZGl2MTsKKwkJCQlkaXYyX2dsYiA9IGRpdjI7CisJCQl9CisJCQlpZiAobnMgPj0gKm5hbm9zZWMgJiYgbnMgPCBuc19sdWIpIHsKKwkJCQluc19sdWIgPSBuczsKKwkJCQlkaXYxX2x1YiA9IGRpdjE7CisJCQkJZGl2Ml9sdWIgPSBkaXYyOworCQkJfQorCQl9CisJfQorCisJcm91bmRfbW9kZSAmPSBUUklHX1JPVU5EX01BU0s7CisJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJZGVmYXVsdDoKKwkJbnNfaGlnaCA9IGRpdjFfbHViICogZGl2Ml9sdWIgKiBpODI1M19vc2NfYmFzZTsKKwkJbnNfbG93ID0gZGl2MV9nbGIgKiBkaXYyX2dsYiAqIGk4MjUzX29zY19iYXNlOworCQlpZiAobnNfaGlnaCAtICpuYW5vc2VjIDwgKm5hbm9zZWMgLSBuc19sb3cpIHsKKwkJCWRpdjEgPSBkaXYxX2x1YjsKKwkJCWRpdjIgPSBkaXYyX2x1YjsKKwkJfSBlbHNlIHsKKwkJCWRpdjEgPSBkaXYxX2dsYjsKKwkJCWRpdjIgPSBkaXYyX2dsYjsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCWRpdjEgPSBkaXYxX2x1YjsKKwkJZGl2MiA9IGRpdjJfbHViOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJZGl2MSA9IGRpdjFfZ2xiOworCQlkaXYyID0gZGl2Ml9nbGI7CisJCWJyZWFrOworCX0KKworCSpuYW5vc2VjID0gZGl2MSAqIGRpdjIgKiBpODI1M19vc2NfYmFzZTsKKwkqZDEgPSBkaXYxICYgMHhmZmZmOwkvLyBtYXNraW5nIGlzIGRvbmUgc2luY2UgY291bnRlciBtYXBzIHplcm8gdG8gMHgxMDAwMAorCSpkMiA9IGRpdjIgJiAweGZmZmY7CisJcmV0dXJuOworfQorCisjaWZuZGVmIENNRFRFU1QKKy8qIGk4MjU0X2xvYWQgcHJvZ3JhbXMgODI1NCBjb3VudGVyIGNoaXAuICBJdCBzaG91bGQgYWxzbyB3b3JrIGZvciB0aGUgODI1My4KKyAqIGJhc2VfYWRkcmVzcyBpcyB0aGUgbG93ZXN0IGlvIGFkZHJlc3MgZm9yIHRoZSBjaGlwICh0aGUgYWRkcmVzcyBvZiBjb3VudGVyIDApLgorICogY291bnRlcl9udW1iZXIgaXMgdGhlIGNvdW50ZXIgeW91IHdhbnQgdG8gbG9hZCAoMCwxIG9yIDIpCisgKiBjb3VudCBpcyB0aGUgbnVtYmVyIHRvIGxvYWQgaW50byB0aGUgY291bnRlci4KKyAqCisgKiBZb3UgcHJvYmFibHkgd2FudCB0byB1c2UgbW9kZSAyLgorICoKKyAqIFVzZSBpODI1NF9tbV9sb2FkKCkgaWYgeW91IGJvYXJkIHVzZXMgbWVtb3J5LW1hcHBlZCBpbywgaXQgaXMKKyAqIHRoZSBzYW1lIGFzIGk4MjU0X2xvYWQoKSBleGNlcHQgaXQgdXNlcyB3cml0ZWIoKSBpbnN0ZWFkIG9mIG91dGIoKS4KKyAqCisgKiBOZWl0aGVyIGk4MjU0X2xvYWQoKSBvciBpODI1NF9yZWFkKCkgZG8gdGhlaXIgbG9hZGluZy9yZWFkaW5nCisgKiBhdG9taWNhbGx5LiAgVGhlIDE2IGJpdCByZWFkL3dyaXRlcyBhcmUgcGVyZm9ybWVkIHdpdGggdHdvIHN1Y2Nlc3NpdmUKKyAqIDggYml0IHJlYWQvd3JpdGVzLiAgU28gaWYgdHdvIHBhcnRzIG9mIHlvdXIgZHJpdmVyIGRvIGEgbG9hZC9yZWFkIG9uCisgKiB0aGUgc2FtZSBjb3VudGVyLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByb3RlY3QgdGhlc2UgZnVuY3Rpb25zCisgKiB3aXRoIGEgc3BpbmxvY2suCisgKgorICogRk1ICisgKi8KKworI2RlZmluZSBpODI1NF9jb250cm9sX3JlZwkzCisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X2xvYWQodW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsIHVuc2lnbmVkIGludCByZWdzaGlmdCwKKwl1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisJaWYgKGNvdW50ID4gMHhmZmZmKQorCQlyZXR1cm4gLTE7CisJaWYgKG1vZGUgPiA1KQorCQlyZXR1cm4gLTE7CisJaWYgKChtb2RlID09IDIgfHwgbW9kZSA9PSAzKSAmJiBjb3VudCA9PSAxKQorCQlyZXR1cm4gLTE7CisKKwlieXRlID0gY291bnRlcl9udW1iZXIgPDwgNjsKKwlieXRlIHw9IDB4MzA7CQkvLyBsb2FkIGxvdyB0aGVuIGhpZ2ggYnl0ZQorCWJ5dGUgfD0gKG1vZGUgPDwgMSk7CS8vIHNldCBjb3VudGVyIG1vZGUKKwlvdXRiKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChpODI1NF9jb250cm9sX3JlZyA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSBjb3VudCAmIDB4ZmY7CS8vIGxzYiBvZiBjb3VudGVyIHZhbHVlCisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKwlieXRlID0gKGNvdW50ID4+IDgpICYgMHhmZjsJLy8gbXNiIG9mIGNvdW50ZXIgdmFsdWUKKwlvdXRiKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X21tX2xvYWQodm9pZCAqYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVnc2hpZnQsCisJdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXVuc2lnbmVkIGludCBieXRlOworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudCA+IDB4ZmZmZikKKwkJcmV0dXJuIC0xOworCWlmIChtb2RlID4gNSkKKwkJcmV0dXJuIC0xOworCWlmICgobW9kZSA9PSAyIHx8IG1vZGUgPT0gMykgJiYgY291bnQgPT0gMSkKKwkJcmV0dXJuIC0xOworCisJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CisJYnl0ZSB8PSAweDMwOwkJLy8gbG9hZCBsb3cgdGhlbiBoaWdoIGJ5dGUKKwlieXRlIHw9IChtb2RlIDw8IDEpOwkvLyBzZXQgY291bnRlciBtb2RlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChpODI1NF9jb250cm9sX3JlZyA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSBjb3VudCAmIDB4ZmY7CS8vIGxzYiBvZiBjb3VudGVyIHZhbHVlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSAoY291bnQgPj4gOCkgJiAweGZmOwkvLyBtc2Igb2YgY291bnRlciB2YWx1ZQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKworCXJldHVybiAwOworfQorCisvKiBSZXR1cm5zIDE2IGJpdCBjb3VudGVyIHZhbHVlLCBzaG91bGQgd29yayBmb3IgODI1MyBhbHNvLiovCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9yZWFkKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVnc2hpZnQsCisJdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCXVuc2lnbmVkIGludCBieXRlOworCWludCByZXQ7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisKKwkvLyBsYXRjaCBjb3VudGVyCisJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKworCS8vIHJlYWQgbHNiCisJcmV0ID0gaW5iKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCS8vIHJlYWQgbXNiCisJcmV0ICs9IGluYihiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKSA8PCA4OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfbW1fcmVhZCh2b2lkICpiYXNlX2FkZHJlc3MsIHVuc2lnbmVkIGludCByZWdzaGlmdCwKKwl1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisJaW50IHJldDsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKworCS8vIGxhdGNoIGNvdW50ZXIKKwlieXRlID0gY291bnRlcl9udW1iZXIgPDwgNjsKKwl3cml0ZWIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisKKwkvLyByZWFkIGxzYgorCXJldCA9IHJlYWRiKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCS8vIHJlYWQgbXNiCisJcmV0ICs9IHJlYWRiKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpIDw8IDg7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBMb2FkcyAxNiBiaXQgaW5pdGlhbCBjb3VudGVyIHZhbHVlLCBzaG91bGQgd29yayBmb3IgODI1MyBhbHNvLiAqLworc3RhdGljIGlubGluZSB2b2lkIGk4MjU0X3dyaXRlKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm47CisKKwlieXRlID0gY291bnQgJiAweGZmOwkvLyBsc2Igb2YgY291bnRlciB2YWx1ZQorCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7CisJYnl0ZSA9IChjb3VudCA+PiA4KSAmIDB4ZmY7CS8vIG1zYiBvZiBjb3VudGVyIHZhbHVlCisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MjU0X21tX3dyaXRlKHZvaWQgKmJhc2VfYWRkcmVzcywKKwl1bnNpZ25lZCBpbnQgcmVnc2hpZnQsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBieXRlOworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuOworCisJYnl0ZSA9IGNvdW50ICYgMHhmZjsJLy8gbHNiIG9mIGNvdW50ZXIgdmFsdWUKKwl3cml0ZWIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7CisJYnl0ZSA9IChjb3VudCA+PiA4KSAmIDB4ZmY7CS8vIG1zYiBvZiBjb3VudGVyIHZhbHVlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworfQorCisvKiBTZXQgY291bnRlciBtb2RlLCBzaG91bGQgd29yayBmb3IgODI1MyBhbHNvLgorICogTm90ZTogdGhlICdtb2RlJyB2YWx1ZSBpcyBkaWZmZXJlbnQgdG8gdGhhdCBmb3IgaTgyNTRfbG9hZCgpIGFuZCBjb21lcworICogZnJvbSB0aGUgSU5TTl9DT05GSUdfODI1NF9TRVRfTU9ERSBjb21tYW5kOgorICogICBJODI1NF9NT0RFMCwgSTgyNTRfTU9ERTEsIC4uLiwgSTgyNTRfTU9ERTUKKyAqIE9SJ2VkIHdpdGg6CisgKiAgIEk4MjU0X0JDRCwgSTgyNTRfQklOQVJZCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X3NldF9tb2RlKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAobW9kZSA+IChJODI1NF9NT0RFNSB8IEk4MjU0X0JJTkFSWSkpCisJCXJldHVybiAtMTsKKworCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OworCWJ5dGUgfD0gMHgzMDsJCS8vIGxvYWQgbG93IHRoZW4gaGlnaCBieXRlCisJYnl0ZSB8PSBtb2RlOwkJLy8gc2V0IGNvdW50ZXIgbW9kZSBhbmQgQkNEfGJpbmFyeQorCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfbW1fc2V0X21vZGUodm9pZCAqYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAobW9kZSA+IChJODI1NF9NT0RFNSB8IEk4MjU0X0JJTkFSWSkpCisJCXJldHVybiAtMTsKKworCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OworCWJ5dGUgfD0gMHgzMDsJCS8vIGxvYWQgbG93IHRoZW4gaGlnaCBieXRlCisJYnl0ZSB8PSBtb2RlOwkJLy8gc2V0IGNvdW50ZXIgbW9kZSBhbmQgQkNEfGJpbmFyeQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9zdGF0dXModW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsCisJdW5zaWduZWQgaW50IHJlZ3NoaWZ0LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIpCit7CisJb3V0YigweEUwIHwgKDIgPDwgY291bnRlcl9udW1iZXIpLAorCQliYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKwlyZXR1cm4gaW5iKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9tbV9zdGF0dXModm9pZCAqYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCXdyaXRlYigweEUwIHwgKDIgPDwgY291bnRlcl9udW1iZXIpLAorCQliYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKwlyZXR1cm4gcmVhZGIoYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjljN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzLzgyNTUuYworICAgIERyaXZlciBmb3IgODI1NQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogODI1NQorRGVzY3JpcHRpb246IGdlbmVyaWMgODI1NSBzdXBwb3J0CitEZXZpY2VzOiBbc3RhbmRhcmRdIDgyNTUgKDgyNTUpCitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiBGcmksICA3IEp1biAyMDAyIDEyOjU2OjQ1IC0wNzAwCisKK1RoZSBjbGFzc2ljIGluIGRpZ2l0YWwgSS9PLiAgVGhlIDgyNTUgYXBwZWFycyBpbiBDb21lZGkgYXMgYSBzaW5nbGUKK2RpZ2l0YWwgSS9PIHN1YmRldmljZSB3aXRoIDI0IGNoYW5uZWxzLiAgVGhlIGNoYW5uZWwgMCBjb3JyZXNwb25kcwordG8gdGhlIDgyNTUncyBwb3J0IEEsIGJpdCAwOyBjaGFubmVsIDIzIGNvcnJlc3BvbmRzIHRvIHBvcnQgQywgYml0Cis3LiAgRGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbiBibG9ja3MsIHdpdGggY2hhbm5lbHMgMC03LAorOC0xNSwgMTYtMTksIGFuZCAyMC0yMyBtYWtpbmcgdXAgdGhlIDQgYmxvY2tzLiAgVGhlIG9ubHkgODI1NSBtb2RlCitzdXBwb3J0ZWQgaXMgbW9kZSAwLgorCitZb3Ugc2hvdWxkIGVuYWJsZSBjb21waWxhdGlvbiB0aGlzIGRyaXZlciBpZiB5b3UgcGxhbiB0byB1c2UgYSBib2FyZAordGhhdCBoYXMgYW4gODI1NSBjaGlwLiAgRm9yIG11bHRpZnVuY3Rpb24gYm9hcmRzLCB0aGUgbWFpbiBkcml2ZXIgd2lsbAorY29uZmlndXJlIHRoZSA4MjU1IHN1YmRldmljZSBhdXRvbWF0aWNhbGx5LgorCitUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGluZGVwZW5kZW50bHkgd2l0aCBJU0EgYW5kIFBDSSBjYXJkcyB0aGF0CitkaXJlY3RseSBtYXAgdGhlIDgyNTUgcmVnaXN0ZXJzIHRvIEkvTyBwb3J0cywgaW5jbHVkaW5nIGNhcmRzIHdpdGgKK211bHRpcGxlIDgyNTUgY2hpcHMuICBUbyBjb25maWd1cmUgdGhlIGRyaXZlciBmb3Igc3VjaCBhIGNhcmQsIHRoZQorb3B0aW9uIGxpc3Qgc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUgSS9PIHBvcnQgYmFzZXMgZm9yIGVhY2ggb2YgdGhlCis4MjU1IGNoaXBzLiAgRm9yIGV4YW1wbGUsCisKKyAgY29tZWRpX2NvbmZpZyAvZGV2L2NvbWVkaTAgODI1NSAweDIwMCwweDIwNCwweDIwOCwweDIwYworCitOb3RlIHRoYXQgbW9zdCBQQ0kgODI1NSBib2FyZHMgZG8gTk9UIHdvcmsgd2l0aCB0aGlzIGRyaXZlciwgYW5kCituZWVkIGEgc2VwYXJhdGUgZHJpdmVyIGFzIGEgd3JhcHBlci4gIEZvciB0aG9zZSB0aGF0IGRvIHdvcmssIHRoZQorSS9PIHBvcnQgYmFzZSBhZGRyZXNzIGNhbiBiZSBmb3VuZCBpbiB0aGUgb3V0cHV0IG9mICdsc3BjaSAtdicuCisKKyovCisKKy8qCisgICBUaGlzIGZpbGUgY29udGFpbnMgYW4gZXhwb3J0ZWQgc3ViZGV2aWNlIGZvciBkcml2aW5nIGFuIDgyNTUuCisKKyAgIFRvIHVzZSB0aGlzIHN1YmRldmljZSBhcyBwYXJ0IG9mIGFub3RoZXIgZHJpdmVyLCB5b3UgbmVlZCB0bworICAgc2V0IHVwIHRoZSBzdWJkZXZpY2UgaW4gdGhlIGF0dGFjaCBmdW5jdGlvbiBvZiB0aGUgZHJpdmVyIGJ5CisgICBjYWxsaW5nOgorCisgICAgIHN1YmRldl84MjU1X2luaXQoZGV2aWNlLCBzdWJkZXZpY2UsIGNhbGxiYWNrX2Z1bmN0aW9uLCBhcmcpCisKKyAgIGRldmljZSBhbmQgc3ViZGV2aWNlIGFyZSBwb2ludGVycyB0byB0aGUgZGV2aWNlIGFuZCBzdWJkZXZpY2UKKyAgIHN0cnVjdHVyZXMuICBjYWxsYmFja19mdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBwcm92aWRlIHRoZQorICAgbG93LWxldmVsIGlucHV0L291dHB1dCB0byB0aGUgZGV2aWNlLCBpLmUuLCBhY3R1YWwgcmVnaXN0ZXIKKyAgIGFjY2Vzcy4gIGNhbGxiYWNrX2Z1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIGFyZworICAgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLiAgSWYgdGhlIDgyNTUgZGV2aWNlIGlzIG1hcHBlZCBhcyA0CisgICBjb25zZWN1dGl2ZSBJL08gcG9ydHMsIHlvdSBjYW4gdXNlIE5VTEwgZm9yIGNhbGxiYWNrX2Z1bmN0aW9uCisgICBhbmQgdGhlIEkvTyBwb3J0IGJhc2UgZm9yIGFyZywgYW5kIGFuIGludGVybmFsIGZ1bmN0aW9uIHdpbGwKKyAgIGhhbmRsZSB0aGUgcmVnaXN0ZXIgYWNjZXNzLgorCisgICBJbiBhZGRpdGlvbiwgaWYgdGhlIG1haW4gZHJpdmVyIGhhbmRsZXMgaW50ZXJydXB0cywgeW91IGNhbgorICAgZW5hYmxlIGNvbW1hbmRzIG9uIHRoZSBzdWJkZXZpY2UgYnkgY2FsbGluZyBzdWJkZXZfODI1NV9pbml0X2lycSgpCisgICBpbnN0ZWFkLiAgVGhlbiwgd2hlbiB5b3UgZ2V0IGFuIGludGVycnVwdCB0aGF0IGlzIGxpa2VseSB0byBiZQorICAgZnJvbSB0aGUgODI1NSwgeW91IHNob3VsZCBjYWxsIHN1YmRldl84MjU1X2ludGVycnVwdCgpLCB3aGljaAorICAgd2lsbCBjb3B5IHRoZSBsYXRjaGVkIHZhbHVlIHRvIGEgQ29tZWRpIGJ1ZmZlci4KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBfODI1NV9TSVpFIDQKKworI2RlZmluZSBfODI1NV9EQVRBIDAKKyNkZWZpbmUgXzgyNTVfQ1IgMworCisjZGVmaW5lIENSX0NfTE9fSU8JMHgwMQorI2RlZmluZSBDUl9CX0lPCQkweDAyCisjZGVmaW5lIENSX0JfTU9ERQkweDA0CisjZGVmaW5lIENSX0NfSElfSU8JMHgwOAorI2RlZmluZSBDUl9BX0lPCQkweDEwCisjZGVmaW5lIENSX0FfTU9ERShhKQkoKGEpPDw1KQorI2RlZmluZSBDUl9DVwkJMHg4MAorCitzdHJ1Y3Qgc3ViZGV2XzgyNTVfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGNiX2FyZzsKKwlpbnQgKCpjYl9mdW5jKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CisJaW50IGhhdmVfaXJxOworfTsKKworI2RlZmluZSBDQUxMQkFDS19BUkcJKCgoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCAqKXMtPnByaXZhdGUpLT5jYl9hcmcpCisjZGVmaW5lIENBTExCQUNLX0ZVTkMJKCgoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCAqKXMtPnByaXZhdGUpLT5jYl9mdW5jKQorI2RlZmluZSBzdWJkZXZwcml2CSgoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCAqKXMtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgZGV2XzgyNTVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkZXZfODI1NV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyXzgyNTUgPSB7CisgICAgICBkcml2ZXJfbmFtZToiODI1NSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGV2XzgyNTVfYXR0YWNoLAorICAgICAgZGV0YWNoOmRldl84MjU1X2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfODI1NSk7CisKK3N0YXRpYyB2b2lkIGRvX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCit2b2lkIHN1YmRldl84MjU1X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZDsKKworCWQgPSBDQUxMQkFDS19GVU5DKDAsIF84MjU1X0RBVEEsIDAsIENBTExCQUNLX0FSRyk7CisJZCB8PSAoQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBICsgMSwgMCwgQ0FMTEJBQ0tfQVJHKSA8PCA4KTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gYXJnOworCisJaWYgKGRpcikgeworCQlvdXRiKGRhdGEsIGlvYmFzZSArIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW5iKGlvYmFzZSArIHBvcnQpOworCX0KK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJCWlmIChkYXRhWzBdICYgMHhmZikKKwkJCUNBTExCQUNLX0ZVTkMoMSwgXzgyNTVfREFUQSwgcy0+c3RhdGUgJiAweGZmLAorCQkJCUNBTExCQUNLX0FSRyk7CisJCWlmIChkYXRhWzBdICYgMHhmZjAwKQorCQkJQ0FMTEJBQ0tfRlVOQygxLCBfODI1NV9EQVRBICsgMSwgKHMtPnN0YXRlID4+IDgpICYgMHhmZiwKKwkJCQlDQUxMQkFDS19BUkcpOworCQlpZiAoZGF0YVswXSAmIDB4ZmYwMDAwKQorCQkJQ0FMTEJBQ0tfRlVOQygxLCBfODI1NV9EQVRBICsgMiwKKwkJCQkocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwgQ0FMTEJBQ0tfQVJHKTsKKwl9CisKKwlkYXRhWzFdID0gQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBLCAwLCBDQUxMQkFDS19BUkcpOworCWRhdGFbMV0gfD0gKENBTExCQUNLX0ZVTkMoMCwgXzgyNTVfREFUQSArIDEsIDAsIENBTExCQUNLX0FSRykgPDwgOCk7CisJZGF0YVsxXSB8PSAoQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBICsgMiwgMCwgQ0FMTEJBQ0tfQVJHKSA8PCAxNik7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChtYXNrICYgMHgwMDAwZmYpIHsKKwkJYml0cyA9IDB4MDAwMGZmOworCX0gZWxzZSBpZiAobWFzayAmIDB4MDBmZjAwKSB7CisJCWJpdHMgPSAweDAwZmYwMDsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDBmMDAwMCkgeworCQliaXRzID0gMHgwZjAwMDA7CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4ZjAwMDAwOworCX0KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5iaXRzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIGJpdHMpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGNvbmZpZzsKKworCWNvbmZpZyA9IENSX0NXOworCS8qIDEgaW4gaW9fYml0cyBpbmRpY2F0ZXMgb3V0cHV0LCAxIGluIGNvbmZpZyBpbmRpY2F0ZXMgaW5wdXQgKi8KKwlpZiAoIShzLT5pb19iaXRzICYgMHgwMDAwZmYpKQorCQljb25maWcgfD0gQ1JfQV9JTzsKKwlpZiAoIShzLT5pb19iaXRzICYgMHgwMGZmMDApKQorCQljb25maWcgfD0gQ1JfQl9JTzsKKwlpZiAoIShzLT5pb19iaXRzICYgMHgwZjAwMDApKQorCQljb25maWcgfD0gQ1JfQ19MT19JTzsKKwlpZiAoIShzLT5pb19iaXRzICYgMHhmMDAwMDApKQorCQljb25maWcgfD0gQ1JfQ19ISV9JTzsKKwlDQUxMQkFDS19GVU5DKDEsIF84MjU1X0NSLCBjb25maWcsIENBTExCQUNLX0FSRyk7Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIHN0ZXAgMSAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDIgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0ICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl84MjU1X2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl84MjU1X2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzgyNTVfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCAoKmNiKSAoaW50LAorCQlpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisKKwlzLT5wcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmICghcy0+cHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlDQUxMQkFDS19BUkcgPSBhcmc7CisJaWYgKGNiID09IE5VTEwpIHsKKwkJQ0FMTEJBQ0tfRlVOQyA9IHN1YmRldl84MjU1X2NiOworCX0gZWxzZSB7CisJCUNBTExCQUNLX0ZVTkMgPSBjYjsKKwl9CisJcy0+aW5zbl9iaXRzID0gc3ViZGV2XzgyNTVfaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IHN1YmRldl84MjU1X2luc25fY29uZmlnOworCisJcy0+c3RhdGUgPSAwOworCXMtPmlvX2JpdHMgPSAwOworCWRvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdWJkZXZfODI1NV9pbml0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50ICgqY2IpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBjYiwgYXJnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMtPmRvX2NtZHRlc3QgPSBzdWJkZXZfODI1NV9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IHN1YmRldl84MjU1X2NtZDsKKwlzLT5jYW5jZWwgPSBzdWJkZXZfODI1NV9jYW5jZWw7CisKKwlzdWJkZXZwcml2LT5oYXZlX2lycSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdWJkZXZfODI1NV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocy0+cHJpdmF0ZSkgeworCQlpZiAoc3ViZGV2cHJpdi0+aGF2ZV9pcnEpIHsKKwkJfQorCisJCWtmcmVlKHMtPnByaXZhdGUpOworCX0KK30KKworLyoKKworICAgU3RhcnQgb2YgdGhlIDgyNTUgc3RhbmRhbG9uZSBkZXZpY2UKKworICovCisKK3N0YXRpYyBpbnQgZGV2XzgyNTVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IDgyNTU6IiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAiODI1NSI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09NRURJX05ERVZDT05GT1BUUzsgaSsrKSB7CisJCWlvYmFzZSA9IGl0LT5vcHRpb25zW2ldOworCQlpZiAoIWlvYmFzZSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSAwKSB7CisJCXByaW50aygiIG5vIGRldmljZXMgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCWlvYmFzZSA9IGl0LT5vcHRpb25zW2ldOworCisJCXByaW50aygiIDB4JTA0bHgiLCBpb2Jhc2UpOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgXzgyNTVfU0laRSwgIjgyNTUiKSkgeworCQkJcHJpbnRrKCIgKEkvTyBwb3J0IGNvbmZsaWN0KSIpOworCisJCQlkZXYtPnN1YmRldmljZXNbaV0udHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfSBlbHNlIHsKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLCBOVUxMLAorCQkJCWlvYmFzZSk7CisJCX0KKwl9CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZXZfODI1NV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IDgyNTU6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJaWYgKHMtPnR5cGUgIT0gQ09NRURJX1NVQkRfVU5VU0VEKSB7CisJCQlpb2Jhc2UgPSBDQUxMQkFDS19BUkc7CisJCQlyZWxlYXNlX3JlZ2lvbihpb2Jhc2UsIF84MjU1X1NJWkUpOworCQl9CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzdWJkZXZfODI1NV9pbml0KTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzgyNTVfaW5pdF9pcnEpOworRVhQT1JUX1NZTUJPTChzdWJkZXZfODI1NV9jbGVhbnVwKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzgyNTVfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTMxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAgbW9kdWxlLzgyNTUuaAorICAgIEhlYWRlciBmaWxlIGZvciA4MjU1CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgXzgyNTVfSAorI2RlZmluZSBfODI1NV9ICisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX0NPTUVESV84MjU1KSB8fCBkZWZpbmVkKENPTkZJR19DT01FRElfODI1NV9NT0RVTEUpCisKK2ludCBzdWJkZXZfODI1NV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50ICgqY2IpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpOworaW50IHN1YmRldl84MjU1X2luaXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50ICgqY2IpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpOwordm9pZCBzdWJkZXZfODI1NV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOwordm9pZCBzdWJkZXZfODI1NV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHN1YmRldl84MjU1X2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICp4LCB1bnNpZ25lZCBsb25nIHkpCit7CisJcHJpbnRrKCI4MjU1IHN1cHBvcnQgbm90IGNvbmZpZ3VyZWQgLS0gZGlzYWJsaW5nIHN1YmRldmljZVxuIik7CisKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWJkZXZfODI1NV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL01ha2VmaWxlCmluZGV4IGViN2E2MTUuLjEyZDZlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTgsMTIgKzgsMTIxIEBACiBvYmotJChDT05GSUdfQ09NRURJKQkJCSs9IGNvbWVkaV9wYXJwb3J0Lm8KIAogIyBDb21lZGkgUENJIGRyaXZlcnMKLW9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG1pdGUubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gODI1NS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhY2w3MjI1Yi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMDM1Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xMDMyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNTAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNTE2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNTY0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNnh4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8yMDE2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8yMDMyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8yMjAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zMDAxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zMTIwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zNTAxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zeHh4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k2MjA4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k3Mjk2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k3NDMyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k4MTY0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k5MTExLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k5MTE4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkcTEyYi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHZfcGNpMTcxMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHZfcGNpMTcyMy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHZfcGNpX2Rpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhaW9fYWlvMTJfOC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhaW9faWlyb18xNi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhbXBsY19kaW8yMDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfcGMyMzYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfcGMyNjMubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfcGNpMjI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFtcGxjX3BjaTIzMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjNnhkaWdpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2lkYXM2NC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2lkYXMubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY2JfcGNpZGRhLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNiX3BjaWRpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2ltZGFzLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNiX3BjaW1kZGEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29tZWRpX2JvbmQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29tZWRpX3BhcnBvcnQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29tZWRpX3Rlc3Qubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29udGVjX3BjaV9kaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFxYm9hcmQyMDAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczA4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczE2bTEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFzMTYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFzMTgwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkYXM2NDAyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczgwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkbW0zMmF0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MjgwMS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDI4MTEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZHQyODE0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MjgxNS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDI4MTcubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZHQyODJ4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MzAwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBmbDUxMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBnc2NfaHBkaS5vCiBvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBpY3BfbXVsdGkubwotb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbWVfZGFxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGlpX3BjaTIwa2Mubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0ganIzX3BjaS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBrZV9jb3VudGVyLm8KIG9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG1lNDAwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBtZV9kYXEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbWl0ZS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBtcGM2MjQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbXVsdGlxMy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV82NTI3Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pXzY1eHgubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfNjYweC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV82NzB4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0X2EyMTUwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0X2FvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0bWlvMTZkLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0bWlvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2xhYnBjLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX3BjaWRpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9wY2ltaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfdGlvY21kLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX3Rpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w3MTEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsNzI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDcyNS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w3MjYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsNzMwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDgxMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w4MTYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsODE4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbTM3MjQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNtMzczMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY21hZC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY21kYTEyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbW1pby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY211aW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcG9jLm8KIG9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHJ0ZDUyMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBydGk4MDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcnRpODAyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHM1MjYubwogb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gczYyNi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBzZXJpYWwyMDAyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHNrZWwubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gc3N2X2RucC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSB1bmlveHg1Lm8KKworIyBDb21lZGkgUENNQ0lBIGRyaXZlcnMKK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IGNiX2RhczE2X2NzLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IGRhczA4X2NzLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX2RhcV83MDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ01DSUFfRFJJVkVSUykJKz0gbmlfZGFxX2RpbzI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX2xhYnBjX2NzLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX21pb19jcy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBxdWF0ZWNoX2RhcXBfY3MubwogCiAjIENvbWVkaSBVU0IgZHJpdmVycwogb2JqLSQoQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUykJKz0gdXNiZHV4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FjbDcyMjViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxMzIwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYworICogRHJpdmVyIGZvciBBZGxpbmsgTnVEQVEgQUNMLTcyMjViIGFuZCBjbG9uZXMKKyAqIEpvc8OpIEx1aXMgU8OhbmNoZXoKKyAqLworLyoKK0RyaXZlcjogYWNsNzIyNWIKK0Rlc2NyaXB0aW9uOiBBZGxpbmsgTnVEQVEgQUNMLTcyMjViICYgY29tcGF0aWJsZXMKK0F1dGhvcjogSm9zw6kgTHVpcyBTw6FuY2hleiAoanNhbmNoZXp2QHRlbGVsaW5lLmVzKQorU3RhdHVzOiB0ZXN0aW5nCitEZXZpY2VzOiBbQWRsaW5rXSBBQ0wtNzIyNWIgKGFjbDcyMjViKSwgW0lDUF0gUDE2UjE2RElPIChwMTZyMTZkaW8pCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBBQ0w3MjI1X1NJWkUgICA4CS8qIFJlcXVpcmVzIDggaW9wb3J0cywgYnV0IG9ubHkgNCBhcmUgdXNlZCAqLworI2RlZmluZSBQMTZSMTZESU9fU0laRSA0CisjZGVmaW5lIEFDTDcyMjVfUklPX0xPIDAJLyogUmVsYXlzIGlucHV0L291dHB1dCBsb3cgYnl0ZSAoUjAtUjcpICovCisjZGVmaW5lIEFDTDcyMjVfUklPX0hJIDEJLyogUmVsYXlzIGlucHV0L291dHB1dCBoaWdoIGJ5dGUgKFI4LVIxNSkgKi8KKyNkZWZpbmUgQUNMNzIyNV9ESV9MTyAgMgkvKiBEaWdpdGFsIGlucHV0IGxvdyBieXRlIChESTAtREk3KSAqLworI2RlZmluZSBBQ0w3MjI1X0RJX0hJICAzCS8qIERpZ2l0YWwgaW5wdXQgaGlnaCBieXRlIChESTgtREkxNSkgKi8KKworc3RhdGljIGludCBhY2w3MjI1Yl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFjbDcyMjViX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKworc3RydWN0IGJvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLy8gZHJpdmVyIG5hbWUKKwlpbnQgaW9fcmFuZ2U7CQkvLyBsZW4gb2YgSS9PIHNwYWNlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisJeyJhY2w3MjI1YiIsIEFDTDcyMjVfU0laRSx9LAorCXsicDE2cjE2ZGlvIiwgUDE2UjE2RElPX1NJWkUsfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FjbDcyMjViID0geworICAgICAgZHJpdmVyX25hbWU6ImFjbDcyMjViIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphY2w3MjI1Yl9hdHRhY2gsCisgICAgICBkZXRhY2g6YWNsNzIyNWJfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FjbDcyMjViKTsKKworc3RhdGljIGludCBhY2w3MjI1Yl9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJfQorCWlmIChkYXRhWzBdICYgMHgwMGZmKQorCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAodW5zaWduZWQgbG9uZylzLT5wcml2YXRlKTsKKwlpZiAoZGF0YVswXSAmIDB4ZmYwMCkKKwkJb3V0Yigocy0+c3RhdGUgPj4gOCksCisJCQlkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKXMtPnByaXZhdGUgKyAxKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFjbDcyMjViX2RpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkgfAorCQkoaW5iKGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSArIDEpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWNsNzIyNWJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGlvYmFzZSwgaW9yYW5nZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlwcmludGsoImNvbWVkaSVkOiBhY2w3MjI1YjogYm9hcmQ9JXMgMHglMDR4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJhY2w3MjI1YiIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmlycSA9IDA7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBSZWxheXMgb3V0cHV0cyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gYWNsNzIyNWJfZG9faW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKUFDTDcyMjVfUklPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogUmVsYXlzIHN0YXR1cyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gYWNsNzIyNWJfZGlfaW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKUFDTDcyMjVfUklPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dHMgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IGFjbDcyMjViX2RpX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilBQ0w3MjI1X0RJX0xPOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNsNzIyNWJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogYWNsNzIyNWI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZhZWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF84Mng1NC5jCkBAIC0wLDAgKzEsMTA0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisvKgorICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgODJYNTQgdGltZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfODJ4NTQuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX0luaXRUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJNb2RlLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9SZWxvYWRWYWx1ZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0lucHV0Q2xvY2tTZWxlY3Rpb24sICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSW5wdXRDbG9ja0xldmVsLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9PdXRwdXRMZXZlbCwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0hhcmR3YXJlR2F0ZUxldmVsKQorSU5UIGlfSW5zbkNvbmZpZ19Jbml0VGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBUaW1lciAoYl9UaW1lck5icikgb3BlcmF0aW5nIG1vZGUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9UaW1lck1vZGUpIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgYW55ICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSB0aW1lci4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICBUaW1lciBtb2RlIGRlc2NyaXB0aW9uIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fFNlbGVjdGVkKyAgICAgIE1vZGUgZGVzY3JpcHRpb24gICAgICAgK3VfUmVsb2FkVmFsdWUgfCBIYXJkd2FyZSBnYXRlIGlucHV0fHwKK3x8ICBtb2RlICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBkZXNjcmlwdGlvbiB8ICAgICAgYWN0aW9uICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgMCBpcyB0eXBpY2FsbHkgdXNlZCAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Zm9yIGV2ZW50IGNvdW50aW5nLiBBZnRlciAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx0aGUgaW5pdGlhbGlzYXRpb24sIE9VVCAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGlzIGluaXRpYWxseSBsb3csIGFuZCAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgMCAgICB8d2lsbCByZW1haW4gbG93IHVudGlsIHRoZSAgICB8U3RhcnQgY291bnRpbmd8ICAgSGFyZHdhcmUgZ2F0ZSAgICB8fAorfHwgICAgICAgIHxjb3VudGVyIHJlYWNoZXMgemVyby4gICAgICAgIHwgICB2YWx1ZSAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfE9VVCB0aGVuIGdvZXMgaGlnaCBhbmQgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8cmVtYWlucyBoaWdoIHVudGlsIGEgbmV3ICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxjb3VudCBpcyB3cml0dGVuLiBTZWUgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfCJpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZSIgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgMSBpcyBzaW1pbGFyIHRvIG1vZGUgMCAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZXhjZXB0IGZvciB0aGUgZ2F0ZSBpbnB1dCAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAxICAgIHxhY3Rpb24uIFRoZSBnYXRlIGlucHV0IGlzIG5vdHxTdGFydCBjb3VudGluZ3wgIEhhcmR3YXJlIHRyaWdnZXIgIHx8Cit8fCAgICAgICAgfHVzZWQgZm9yIGVuYWJsZWQgb3IgZGlzYWJsZWQgfCAgIHZhbHVlICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dGhlIHRpbWVyLiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxUaGUgZ2F0ZSBpbnB1dCBpcyB1c2VkIGZvciAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHRyaWdnZXJlZCB0aGUgdGltZXIuICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHwgICAgICAgIHxUaGlzIG1vZGUgZnVuY3Rpb25zIGxpa2UgYSAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGRpdmlkZS1ieS11bF9SZWxvYWRWYWx1ZSAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Y291bnRlci4gSXQgaXMgdHlwaWNhbGx5IHVzZWR8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx0byBnZW5lcmF0ZSBhIHJlYWwgdGltZSBjbG9ja3wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGludGVycnVwdC4gT1VUIHdpbGwgaW5pdGlhbGx5fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgMiAgICB8YmUgaGlnaCBhZnRlciB0aGUgICAgICAgICAgICB8ICAgRGl2aXNpb24gICB8ICBIYXJkd2FyZSBnYXRlICAgICB8fAorfHwgICAgICAgIHxpbml0aWFsaXNhdGlvbi4gV2hlbiB0aGUgICAgIHwgICAgZmFjdG9yICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGluaXRpYWwgY291bnQgaGFzIGRlY3JlbWVudGVkfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dG8gMSwgT1VUIGdvZXMgbG93IGZvciBvbmUgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxDTEsgcHVsZS4gT1VUIHRoZW4gZ29lcyBoaWdoIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGFnYWluLCB0aGUgY291bnRlciByZWxvYWRzICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dGhlIGluaXRpYWwgY291bnQgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwodWxfUmVsb2FkVmFsdWUpIGFuZCB0aGUgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHByb2Nlc3MgaXMgcmVwZWF0ZWQuICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8VGhpcyBhY3Rpb24gY2FuIGdlbmVyYXRlZCBhICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxpbnRlcnJ1cHQuIFNlZSBmdW5jdGlvbiAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfCJpX0FQQ0kxNzEwX1NldEJvYXJkSW50LSAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Um91dGluZVgiICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxhbmQgImlfQVBDSTE3MTBfRW5hYmxlVGltZXIiIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3x8ICAgICAgICB8TW9kZSAzIGlzIHR5cGljYWxseSB1c2VkIGZvciB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxiYXVkIHJhdGUgZ2VuZXJhdGlvbi4gVGhpcyAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfG1vZGUgaXMgc2ltaWxhciB0byBtb2RlIDIgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZXhjZXB0IGZvciB0aGUgZHV0eSBjeWNsZSBvZiB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAzICAgIHxPVVQuIE9VVCB3aWxsIGluaXRpYWxseSBiZSAgIHwgIERpdmlzaW9uICAgIHwgICBIYXJkd2FyZSBnYXRlICAgIHx8Cit8fCAgICAgICAgfGhpZ2ggYWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9ufCAgIGZhY3RvciAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8V2hlbiBoYWxmIHRoZSBpbml0aWFsIGNvdW50ICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwodWxfUmVsb2FkVmFsdWUpIGhhcyBleHBpcmVkLHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfE9VVCBnb2VzIGxvdyBmb3IgdGhlICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8cmVtYWluZGVyIG9mIHRoZSBjb3VudC4gVGhlICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxtb2RlIGlzIHBlcmlvZGljOyB0aGUgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHNlcXVlbmNlIGFib3ZlIGlzIHJlcGVhdGVkICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8aW5kZWZpbml0ZWx5LiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE9VVCB3aWxsIGJlIGluaXRpYWxseSBoaWdoICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8YWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9uLiAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxXaGVuIHRoZSBpbml0aWFsIGNvdW50ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgIDQgICAgfGV4cGlyZXMgT1VUIHdpbGwgZ28gbG93IGZvciAgfFN0YXJ0IGNvdW50aW5nfCAgSGFyZHdhcmUgZ2F0ZSAgICAgfHwKK3x8ICAgICAgICB8b25lIENMSyBwdWxzZSBhbmQgdGhlbiBnbyAgICB8ICAgIHZhbHVlICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxoaWdoIGFnYWluLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfFRoZSBjb3VudGluZyBzZXF1ZW5jZXMgaXMgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dHJpZ2dlcmVkIGJ5IHdyaXRpbmcgYSBuZXcgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx2YWx1ZS4gU2VlICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfCJpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZSIgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZnVuY3Rpb24uIElmIGEgbmV3IGNvdW50IGlzICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx3cml0dGVuIGR1cmluZyBjb3VudGluZywgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGl0IHdpbGwgYmUgbG9hZGVkIG9uIHRoZSAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8bmV4dCBDTEsgcHVsc2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgNSBpcyBzaW1pbGFyIHRvIG1vZGUgNCAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZXhjZXB0IGZvciB0aGUgZ2F0ZSBpbnB1dCAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxhY3Rpb24uIFRoZSBnYXRlIGlucHV0IGlzIG5vdHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgIDUgICAgfHVzZWQgZm9yIGVuYWJsZWQgb3IgZGlzYWJsZWQgfFN0YXJ0IGNvdW50aW5nfCAgSGFyZHdhcmUgdHJpZ2dlciAgfHwKK3x8ICAgICAgICB8dGhlIHRpbWVyLiBUaGUgZ2F0ZSBpbnB1dCBpcyB8ICAgIHZhbHVlICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx1c2VkIGZvciB0cmlnZ2VyZWQgdGhlIHRpbWVyLnwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgY2xvY2sgc2VsZWN0aW9uIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgIHwgICAgICAgYl9JbnB1dENsb2NrU2VsZWN0aW9uICAgIHwgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICB8ICAgfAorfCAgfCAgICAgICAgICAgcGFyYW1ldGVyICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgIHwgICAgQVBDSTE3MTBfUENJX0JVU19DTE9DSyAgICAgIHwgRm9yIHRoZSB0aW1lciBpbnB1dCBjbG9jaywgdGhlIFBDSSB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBidXMgY2xvY2sgLyA0IGlzIHVzZWQuIFRoaXMgUENJIGJ1c3wgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsb2NrIGNhbiBiZSAzME1IeiBvciAzM01Iei4gRm9yICAgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGltZXIgMCBvbmx5IHRoaXMgc2VsZWN0aW9uIGFyZSAgICB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgIHwgQVBDSTE3MTBfIEZST05UX0NPTk5FQ1RPUl9JTlBVVHwgT2YgdGhlIGZyb250IGNvbm5lY3RvciB5b3UgaGF2ZSB0aGV8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwb3NzaWJpbGl0eSB0byBpbmplY3QgYSBpbnB1dCBjbG9ja3wgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvciBUaW1lciAxIG9yIFRpbWVyIDIuIFRoZSBzb3VyY2UgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnJvbSB0aGlzIGNsb2NrIGNhbiBlYXQgdGhlIG91dHB1dCB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbG9jayBmcm9tIFRpbWVyIDAgb3IgYW55IG90aGVyICAgIHwgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsb2NrIHNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgfCAgIHwKK3wgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAyKSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJNb2RlICAgICAgICAgIDogVGltZXIgbW9kZSBzZWxlY3Rpb24gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byA1KSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IEludGVycnVwdCBvbiB0ZXJtaW5hbHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBIYXJkd2FyZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZ2dlcmFibGUgb25lLSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOiBSYXRlIGdlbmVyYXRvciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6IFNxdWFyZSB3YXZlIG1vZGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDogU29mdHdhcmUgdHJpZ2dlcmVkICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJvYmUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6IEhhcmR3YXJlIHRyaWdnZXJlZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2JlICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGltZXIgbW9kZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIHRhYmxlLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfUmVsb2FkVmFsdWUgICAgICAgICA6IFN0YXJ0IGNvdW50aW5nIHZhbHVlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZGl2aXNpb24gZmFjdG9yICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGltZXIgbW9kZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIHRhYmxlLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnB1dENsb2NrU2VsZWN0aW9uIDogU2VsZWN0aW9uIGZyb20gaW5wdXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lciBjbG9jay4gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBpbnB1dCBjbG9jayAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIHRhYmxlLiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0lucHV0Q2xvY2tMZXZlbCAgICAgOiBTZWxlY3Rpb24gZnJvbSBpbnB1dCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGxldmVsLiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IExvdyBhY3RpdmUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElucHV0IGludmVydGVkKSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBIaWdoIGFjdGl2ZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9PdXRwdXRMZXZlbCwgICAgICAgIDogU2VsZWN0aW9uIGZyb20gb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBsZXZlbC4gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBMb3cgYWN0aXZlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEhpZ2ggYWN0aXZlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE91dHB1dCBpbnZlcnRlZCkgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSGFyZHdhcmVHYXRlTGV2ZWwgICA6IFNlbGVjdGlvbiBmcm9tICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgZ2F0ZSBsZXZlbC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTG93IGFjdGl2ZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5wdXQgaW52ZXJ0ZWQpICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEhpZ2ggYWN0aXZlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lsbCBub3QgdXNlZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBoYXJkd2FyZSBnYXRlIHNldCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSB0byAwLgorfGJfTW9kdWxOYnIgICAgICAgID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfVGltZXJOYnIJCSAgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJYl9UaW1lck1vZGUJCSAgPSAoQllURSkgZGF0YVswXTsKKwl1bF9SZWxvYWRWYWx1ZQkgID0gKFVMT05HKSBkYXRhWzFdOworCWJfSW5wdXRDbG9ja1NlbGVjdGlvbgk9KEJZVEUpIGRhdGFbMl07CisJYl9JbnB1dENsb2NrTGV2ZWwJCT0oQllURSkgZGF0YVszXTsKKwliX091dHB1dExldmVsCQkJPShCWVRFKSBkYXRhWzRdOworCWJfSGFyZHdhcmVHYXRlTGV2ZWwJCT0oQllURSkgZGF0YVs1XTsKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6IFNlbGVjdGlvbiBmcm9tIGlucHV0IGNsb2NrIGxldmVsIGlzIHdyb25nICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogU2VsZWN0aW9uIGZyb20gb3V0cHV0IGNsb2NrIGxldmVsIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC05OiBTZWxlY3Rpb24gZnJvbSBoYXJkd2FyZSBnYXRlIGxldmVsIGlzIHdyb25nICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1RpbWVyTmJyOworCUJZVEUgYl9UaW1lck1vZGU7CisJVUxPTkcgdWxfUmVsb2FkVmFsdWU7CisJQllURSBiX0lucHV0Q2xvY2tTZWxlY3Rpb247CisJQllURSBiX0lucHV0Q2xvY2tMZXZlbDsKKwlCWVRFIGJfT3V0cHV0TGV2ZWw7CisJQllURSBiX0hhcmR3YXJlR2F0ZUxldmVsOworCisJLy9CRUdJTiBKSyAyNy4xMC4yMDAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJRFdPUkQgZHdfVGVzdCA9IDA7CisJLy9FTkQgSksgMjcuMTAuMjAwMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RpbWVyTmJyID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfVGltZXJNb2RlID0gKEJZVEUpIGRhdGFbMF07CisJdWxfUmVsb2FkVmFsdWUgPSAoVUxPTkcpIGRhdGFbMV07CisJYl9JbnB1dENsb2NrU2VsZWN0aW9uID0gKEJZVEUpIGRhdGFbMl07CisJYl9JbnB1dENsb2NrTGV2ZWwgPSAoQllURSkgZGF0YVszXTsKKwliX091dHB1dExldmVsID0gKEJZVEUpIGRhdGFbNF07CisJYl9IYXJkd2FyZUdhdGVMZXZlbCA9IChCWVRFKSBkYXRhWzVdOworCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisKKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IHRoZSB0aW1lciBtb2RlICovCisJCQkJaWYgKGJfVGltZXJNb2RlIDw9IDUpIHsKKwkJCQkJLy9CRUdJTiBKSyAyNy4xMC4yMDAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCS8qIFRlc3QgdGUgaW1wdXQgY2xvY2sgc2VsZWN0aW9uICovCisJCQkJCS8qCisJCQkJCSAgIGlmICgoKGJfVGltZXJOYnIgPT0gMCkgJiYgKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSAwKSkgfHwKKwkJCQkJICAgKChiX1RpbWVyTmJyICE9IDApICYmICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IDApIHx8IChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gMSkpKSkKKwkJCQkJICovCisKKwkJCQkJaWYgKCgoYl9UaW1lck5iciA9PSAwKSAmJgorCQkJCQkgICAgIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfUENJX0JVU19DTE9DSykpIHx8CisJCQkJCSAgICAoKGJfVGltZXJOYnIgPT0gMCkgJiYKKwkJCQkJICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSkgfHwKKwkJCQkJICAgICgoYl9UaW1lck5iciAhPSAwKSAmJgorCQkJCQkgICAgICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwX1BDSV9CVVNfQ0xPQ0spIHx8CisJCQkJCSAgICAgIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfRlJPTlRfQ09OTkVDVE9SX0lOUFVUKSB8fAorCQkJCQkgICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSkpKSB7CisJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjIwMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCWlmICgoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8xME1IWikgJiYKKwkJCQkJCSAgICAgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweDAwMDBGRkZGVUwpID49IDB4MzEzMSkpIHx8CisJCQkJCQkgICAgIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfMTBNSFopKSB7CisJCQkJCQkJLy9FTkQgSksgMjcuMTAuMjAwMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCQkJCQkJCS8qIFRlc3QgdGhlIGlucHV0IGNsb2NrIGxldmVsIHNlbGVjdGlvbiAqLworCisJCQkJCQkJaWYgKChiX0lucHV0Q2xvY2tMZXZlbCA9PSAwKSB8fAorCQkJCQkJCSAgICAoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMSkpIHsKKwkJCQkJCQkJLyogVGVzdCB0aGUgb3V0cHV0IGNsb2NrIGxldmVsIHNlbGVjdGlvbiAqLworCQkJCQkJCQlpZiAoKGJfT3V0cHV0TGV2ZWwgPT0gMCkgfHwgKGJfT3V0cHV0TGV2ZWwgPT0gMSkpIHsKKwkJCQkJCQkJCS8qIFRlc3QgdGhlIGhhcmR3YXJlIGdhdGUgbGV2ZWwgc2VsZWN0aW9uICovCisJCQkJCQkJCQlpZiAoKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMCkgfHwgKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMSkpIHsKKwkJCQkJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJLyogVGVzdCBpZiB2ZXJzaW9uID4gMS4xIGFuZCBjbG9jayBzZWxlY3Rpb24gPSAxME1IeiAqLworCQkJCQkJCQkJCWlmICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSAmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4MDAwMEZGRkZVTCkgPiAweDMxMzEpKSB7CisJCQkJCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogcXVhcnR6IG9uIGJvYXJkICovCisJCQkJCQkJCQkJCWR3X1Rlc3QgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAoMTYgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpKTsKKworCQkJCQkJCQkJCQlkd19UZXN0ID0gKGR3X1Rlc3QgPj4gMTYpICYgMTsKKwkJCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJCQlkd19UZXN0ID0gMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkvKiBUZXN0IGlmIGRldGVjdGlvbiBPSyAqLworCQkJCQkJCQkJCWlmIChkd19UZXN0ID09IDEpIHsKKwkJCQkJCQkJCQkJLy9FTkQgSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkJCQkJLyogSW5pdGlhbGlzYXRpb24gT0sgKi8KKwkJCQkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl84Mlg1NEluaXQgPSAxOworCisJCQkJCQkJCQkJCS8qIFNhdmUgdGhlIGlucHV0IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCQkJCQkJCQlkZXZwcml2LT4gc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl9JbnB1dENsb2NrU2VsZWN0aW9uID0gYl9JbnB1dENsb2NrU2VsZWN0aW9uOworCisJCQkJCQkJCQkJCS8qIFNhdmUgdGhlIGlucHV0IGNsb2NrIGxldmVsICovCisJCQkJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfSW5wdXRDbG9ja0xldmVsID0gfmJfSW5wdXRDbG9ja0xldmVsICYgMTsKKworCQkJCQkJCQkJCQkvKiBTYXZlIHRoZSBvdXRwdXQgbGV2ZWwgKi8KKwkJCQkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl9PdXRwdXRMZXZlbCA9IH5iX091dHB1dExldmVsICYgMTsKKworCQkJCQkJCQkJCQkvKiBTYXZlIHRoZSBnYXRlIGxldmVsICovCisJCQkJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfSGFyZHdhcmVHYXRlTGV2ZWwgPSBiX0hhcmR3YXJlR2F0ZUxldmVsOworCisJCQkJCQkJCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiB3b3JkIGFuZCBkaXNhYmxlIHRoZSB0aW1lciAqLworCQkJCQkJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJCS8qCisJCQkJCQkJCQkJCSAgIGRldnByaXYtPnNfTW9kdWxlSW5mbyBbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCSAgIHNfODJYNTRNb2R1bGVJbmZvLgorCQkJCQkJCQkJCQkgICBzXzgyWDU0VGltZXJJbmZvICBbYl9UaW1lck5icl0uCisJCQkJCQkJCQkJCSAgIGR3X0NvbmZpZ3VyYXRpb25Xb3JkID0gKERXT1JEKSAoKChiX0hhcmR3YXJlR2F0ZUxldmVsICAgICAgICAgPDwgMCkgJiAweDEpIHwKKwkJCQkJCQkJCQkJICAgKChiX0lucHV0Q2xvY2tMZXZlbCAgICAgICAgICAgPDwgMSkgJiAweDIpIHwKKwkJCQkJCQkJCQkJICAgKCgofmJfT3V0cHV0TGV2ZWwgICAgICAgJiAxKSAgPDwgMikgJiAweDQpIHwKKwkJCQkJCQkJCQkJICAgKChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gICAgICAgPDwgNCkgJiAweDEwKSk7CisJCQkJCQkJCQkJCSAqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIDEwTUh6IHNlbGVjdGVkICovCisJCQkJCQkJCQkJCWlmIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMTBNSFopIHsKKwkJCQkJCQkJCQkJCWJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9IDI7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCA9IChEV09SRCkoKChiX0hhcmR3YXJlR2F0ZUxldmVsIDw8IDApICYgMHgxKSB8ICgoYl9JbnB1dENsb2NrTGV2ZWwgPDwgMSkgJiAweDIpIHwgKCgofmJfT3V0cHV0TGV2ZWwgJiAxKSA8PCAyKSAmIDB4NCkgfCAoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA8PCA0KSAmIDB4MzApKTsKKwkJCQkJCQkJCQkJLy9FTkQgSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzMiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCQkJLyogSW5pdGlhbGlzZSB0aGUgODJYNTQgVGltZXIgKi8KKwkJCQkJCQkJCQkJb3V0bCgoRFdPUkQpIGJfVGltZXJNb2RlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE2ICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJCQkvKiBXcml0ZSB0aGUgcmVsb2FkIHZhbHVlICovCisJCQkJCQkJCQkJCW91dGwodWxfUmVsb2FkVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMCArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCQkJCS8vQkVHSU4gSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkJCQl9CS8vIGlmIChkd19UZXN0ID09IDEpCisJCQkJCQkJCQkJZWxzZSB7CisJCQkJCQkJCQkJCS8qIElucHV0IHRpbWVyIGNsb2NrIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJCQkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQkJCQkJfQkvLyBpZiAoZHdfVGVzdCA9PSAxKQorCQkJCQkJCQkJCS8vRU5EIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQl9CS8vIGlmICgoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAwKSB8fCAoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAxKSkKKwkJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJCS8qIFNlbGVjdGlvbiBmcm9tIGhhcmR3YXJlIGdhdGUgbGV2ZWwgaXMgd3JvbmcgKi8KKwkJCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3Rpb24gZnJvbSBoYXJkd2FyZSBnYXRlIGxldmVsIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlID0gLTk7CisJCQkJCQkJCQl9CS8vIGlmICgoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAwKSB8fCAoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAxKSkKKwkJCQkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0TGV2ZWwgPT0gMCkgfHwgKGJfT3V0cHV0TGV2ZWwgPT0gMSkpCisJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJLyogU2VsZWN0aW9uIGZyb20gb3V0cHV0IGNsb2NrIGxldmVsIGlzIHdyb25nICovCisJCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3Rpb24gZnJvbSBvdXRwdXQgY2xvY2sgbGV2ZWwgaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC04OworCQkJCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRMZXZlbCA9PSAwKSB8fCAoYl9PdXRwdXRMZXZlbCA9PSAxKSkKKwkJCQkJCQl9CS8vIGlmICgoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMCkgfHwgKGJfSW5wdXRDbG9ja0xldmVsID09IDEpKQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQkvKiBTZWxlY3Rpb24gZnJvbSBpbnB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZyAqLworCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3Rpb24gZnJvbSBpbnB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCQl9CS8vIGlmICgoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMCkgfHwgKGJfSW5wdXRDbG9ja0xldmVsID09IDEpKQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCQkJCQlEUFJJTlRLKCJJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIElucHV0IHRpbWVyIGNsb2NrIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJCQkJRFBSSU5USygiSW5wdXQgdGltZXIgY2xvY2sgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCX0JLy8gaWYgKChiX1RpbWVyTW9kZSA+PSAwKSAmJiAoYl9UaW1lck1vZGUgPD0gNSkpCisJCQkJZWxzZSB7CisJCQkJCS8qIFRpbWVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkJCURQUklOVEsoIlRpbWVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKChiX1RpbWVyTW9kZSA+PSAwKSAmJiAoYl9UaW1lck1vZGUgPD0gNSkpCisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJCWVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCURQUklOVEsoIlRpbWVyIHNlbGVjdGlvbiB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQkvLyBpZiAoKGJfVGltZXJOYnIgPj0gMCkgJiYgKGJfVGltZXJOYnIgPD0gMikpCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9FbmFibGVUaW1lciAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVGltZXJOYnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUpCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgT1IgRGlzYWJsZSB0aGUgVGltZXIgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCB0aGlzICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBJZiB5b3UgZW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQsIHRoZSB0aW1lciB8Cit8ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYSBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIHRpbWVyIHZhbHVlIHJlYWNoICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgemVyby4gU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgifAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSS0xNzEwICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIgICAgICAgIDogVGltZXIgbnVtYmVyIHRvIGVuYWJsZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAyKSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgaW50ZXJydXB0LiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEUgOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHR8CitpX1JldHVyblZhbHVlPWluc24tPm47CisJYl9Nb2R1bE5iciAgICAgICAgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9UaW1lck5icgkJICA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX0FjdGlvblR5cGUgICAgICA9IChCWVRFKSBkYXRhWzBdOyAvLyBlbmFibGUgZGlzYWJsZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19EdW1teVJlYWQ7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9UaW1lck5icjsKKwlCWVRFIGJfQWN0aW9uVHlwZTsKKwlCWVRFIGJfSW50ZXJydXB0RW5hYmxlOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RpbWVyTmJyID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uVHlwZSA9IChCWVRFKSBkYXRhWzBdOwkvLyBlbmFibGUgZGlzYWJsZQorCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCBpZiB0aW1lciBpbml0aWFsaXNlZCAqLworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisKKwkJCQkJc3dpdGNoIChiX0FjdGlvblR5cGUpIHsKKwkJCQkJY2FzZSBBUENJMTcxMF9FTkFCTEU6CisJCQkJCQliX0ludGVycnVwdEVuYWJsZSA9IChCWVRFKSBkYXRhWzFdOworCQkJCQkJLyogVGVzdCB0aGUgaW50ZXJydXB0IHNlbGVjdGlvbiAqLworCQkJCQkJaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8CisJCQkJCQkgICAgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpKSB7CisJCQkJCQkJaWYgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgeworCisJCQkJCQkJCWR3X0R1bW15UmVhZCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCAqLworCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmR3X0NvbmZpZ3VyYXRpb25Xb3JkIHwgMHg4OworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzIgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8vIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZQorCisJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCAmIDB4Rjc7CisKKwkJCQkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzMiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgJiAoMHhGRiAtICgxIDw8IGJfVGltZXJOYnIpKTsKKwkJCQkJCQl9CS8vIGlmIChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpCisKKwkJCQkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCQkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQkJCQkJCQkvKiBTYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrID0gZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayB8ICgoMSAmIGJfSW50ZXJydXB0RW5hYmxlKSA8PCBiX1RpbWVyTmJyKTsKKworCQkJCQkJCQkvKiBFbmFibGUgdGhlIHRpbWVyICovCisJCQkJCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0NCArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCQkJCQkJRFBSSU5USygiXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBBUENJMTcxMF9ESVNBQkxFOgorCQkJCQkJLyogVGVzdCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCQkJCWlmICgoKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgPj4gYl9UaW1lck5icikgJiAxKSA9PSAxKSB7CisJCQkJCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisKKwkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS4gZHdfQ29uZmlndXJhdGlvbldvcmQgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCAmIDB4Rjc7CisKKwkJCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmR3X0NvbmZpZ3VyYXRpb25Xb3JkLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDMyICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgJiAoMHhGRiAtICgxIDw8IGJfVGltZXJOYnIpKTsKKwkJCQkJCX0KKworCQkJCQkJLyogRGlzYWJsZSB0aGUgdGltZXIgKi8KKwkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0NCArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQkvLyBTd2l0Y2ggZW5kCisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLICgiVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvblxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCURQUklOVEsoIlRpbWVyIHNlbGVjdGlvbiB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQkvLyBpZiAoKGJfVGltZXJOYnIgPj0gMCkgJiYgKGJfVGltZXJOYnIgPD0gMikpCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9SZWFkQWxsVGltZXJWYWx1ZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfVGltZXJWYWx1ZUFycmF5KQorSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgYWxsIHRpbWVyIHZhbHVlcyBmcm9tIHNlbGVjdGVkIHRpbWVyICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfIHB1bF9UaW1lclZhbHVlQXJyYXkgOiBUaW1lciB2YWx1ZSBhcnJheS4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgMCBjb250YWluIHRoZSB0aW1lciAwIHZhbHVlLiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCAxIGNvbnRhaW4gdGhlIHRpbWVyIDEgdmFsdWUuICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50IDIgY29udGFpbiB0aGUgdGltZXIgMiB2YWx1ZS4gICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaW1lciAwIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgMSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRpbWVyIDIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9Nb2R1bE5iciwgYl9SZWFkVHlwZTsKKwlQVUxPTkcgcHVsX1RpbWVyVmFsdWVBcnJheTsKKworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcHVsX1RpbWVyVmFsdWVBcnJheSA9IChQVUxPTkcpIGRhdGE7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1JFQURJTlRFUlJVUFQ6CisKKwkJZGF0YVswXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy5zX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkSW50ZXJydXB0TWFzazsKKwkJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy5zX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCQkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZCA9IChkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZCArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1JFQURBTExUSU1FUjoKKwkJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCQlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJCS8qIFRlc3QgaWYgdGltZXIgMCBpbml1dGlhbGlzZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bMF0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkvKiBUZXN0IGlmIHRpbWVyIDEgaW5pdXRpYWxpc2VkICovCisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1sxXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCQkvKiBUZXN0IGlmIHRpbWVyIDIgaW5pdXRpYWxpc2VkICovCisJCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bMl0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkJCS8qIExhdGNoIGFsbCBjb3VudGVyICovCisJCQkJCQkJb3V0bCgweDE3LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJLyogUmVhZCB0aGUgdGltZXIgMCB2YWx1ZSAqLworCQkJCQkJCXB1bF9UaW1lclZhbHVlQXJyYXlbMF0gPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJLyogUmVhZCB0aGUgdGltZXIgMSB2YWx1ZSAqLworCQkJCQkJCXB1bF9UaW1lclZhbHVlQXJyYXlbMV0gPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJLyogUmVhZCB0aGUgdGltZXIgMiB2YWx1ZSAqLworCQkJCQkJCXB1bF9UaW1lclZhbHVlQXJyYXlbMl0gPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBUaW1lciAyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCQkJCQlEUFJJTlRLKCJUaW1lciAyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIFRpbWVyIDEgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQkJRFBSSU5USygiVGltZXIgMSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFRpbWVyIDAgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLKCJUaW1lciAwIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwkJfQorCisJfQkJCS8vIEVuZCBvZiBTd2l0Y2gKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQgaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHdyaXRlIGZ1bmN0aW9ucyBmb3IgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlCWVRFIGJfQml0c1R5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCWJfQml0c1R5cGUgPSBkYXRhWzBdOworCisJcHJpbnRrKCJcbjgyWDU0Iik7CisKKwlzd2l0Y2ggKGJfQml0c1R5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1JFQURWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZFRpbWVyVmFsdWUoZGV2LAorCQkJCQkJCSAgKEJZVEUpQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAoQllURSlDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwKKwkJCQkJCQkgIChQVUxPTkcpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9USU1FUl9HRVRPVVRQVVRMRVZFTDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbChkZXYsCisJCQkJCQkJICAgICAgIChCWVRFKUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCSAgICAgICAoQllURSlDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwKKwkJCQkJCQkgICAgICAgKFBCWVRFKSAmZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9USU1FUl9HRVRQUk9HUkVTU1NUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyhkZXYsCisJCQkJCQkJCSAgKEJZVEUpQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJCSAgKEJZVEUpQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJCSAgKFBCWVRFKSZkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1dSSVRFVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZShkZXYsCisJCQkJCQkJICAgKEJZVEUpQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAgKEJZVEUpQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAgKFVMT05HKWRhdGFbMV0pOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJCaXRzIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTE7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX1JlYWRUaW1lclZhbHVlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1lck5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1RpbWVyVmFsdWUpICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgdGltZXIgdmFsdWUgZnJvbSBzZWxlY3RlZCBkaWdpdGFsIHRpbWVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgdGltZXIgIG1vZHVsZSAoYl9Nb2R1bE5icikuIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyICAgICAgICA6IFRpbWVyIG51bWJlciB0byByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMikgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyBwdWxfVGltZXJWYWx1ZSAgICA6IFRpbWVyIHZhbHVlICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWRUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCQkJICAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfVGltZXJOYnIsCisJCQkgICAgICBQVUxPTkcgcHVsX1RpbWVyVmFsdWUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkgICAgIGR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJICAgICAweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwXzgyWDU0X1RJTUVSKSB7CisJCQkvKiBUZXN0IHRoZSB0aW1lciBudW1iZXIgKi8KKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IGlmIHRpbWVyIGluaXRpYWxpc2VkICovCisJCQkJaWYgKGRldnByaXYtPgorCQkJCSAgICBzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJICAgIHNfODJYNTRNb2R1bGVJbmZvLgorCQkJCSAgICBzXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLgorCQkJCSAgICBiXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCS8qIExhdGNoIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJCQlvdXRsKCgyIDw8IGJfVGltZXJOYnIpIHwgMHhEMCwKKwkJCQkJICAgICBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCSAgICAgdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJICAgICAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJLyogUmVhZCB0aGUgY291bnRlciB2YWx1ZSAqLworCQkJCQkqcHVsX1RpbWVyVmFsdWUgPQorCQkJCQkgICAgaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAoYl9UaW1lck5iciAqIDQpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCURQUklOVEsoIlRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlEUFJJTlRLKCJUaW1lciBzZWxlY3Rpb24gd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbCAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX091dHB1dExldmVsKSAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBvdXRwdXQgc2lnbmFsIGxldmVsIChwYl9PdXRwdXRMZXZlbCkgZnJvbSAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZGlnaXRhbCB0aW1lciAoYl9UaW1lck5icikgZnJvbSBzZWxlY3RlZCB0aW1lcnwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyICAgICAgICA6IFRpbWVyIG51bWJlciB0byB0ZXN0ICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX091dHB1dExldmVsICAgICA6IE91dHB1dCBzaWduYWwgbGV2ZWwgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgb3V0cHV0IGlzIGxvdyAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgb3V0cHV0IGlzIGhpZ2ggICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtMzogVGltZXIgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCQkgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCQkgICBQQllURSBwYl9PdXRwdXRMZXZlbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfVGltZXJTdGF0dXM7CisKKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwXzgyWDU0X1RJTUVSKSB7CisJCQkvKiBUZXN0IHRoZSB0aW1lciBudW1iZXIgKi8KKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IGlmIHRpbWVyIGluaXRpYWxpc2VkICovCisJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfODJYNTRJbml0ID09IDEpIHsKKwkJCQkJLyogTGF0Y2ggdGhlIHRpbWVyIHZhbHVlICovCisJCQkJCW91dGwoKDIgPDwgYl9UaW1lck5icikgfCAweEUwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCS8qIFJlYWQgdGhlIHRpbWVyIHN0YXR1cyAqLworCQkJCQlkd19UaW1lclN0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE2ICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkqcGJfT3V0cHV0TGV2ZWwgPSAoQllURSkgKCgoZHdfVGltZXJTdGF0dXMgPj4gNykgJiAxKSBeIGRldnByaXYtPiBzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iX091dHB1dExldmVsKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCURQUklOVEsoIlRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlEUFJJTlRLKCJUaW1lciBzZWxlY3Rpb24gd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfVGltZXJTdGF0dXMpICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBwcm9ncmVzcyBzdGF0dXMgKHBiX1RpbWVyU3RhdHVzKSBmcm9tICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBkaWdpdGFsIHRpbWVyIChiX1RpbWVyTmJyKSBmcm9tIHNlbGVjdGVkIHRpbWVyfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gdGVzdCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9UaW1lclN0YXR1cyAgICAgOiBPdXRwdXQgc2lnbmFsIGxldmVsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaW1lciBub3QgaW4gcHJvZ3Jlc3MgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFRpbWVyIGluIHByb2dyZXNzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGltZXIgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJCSAgICAgIFBCWVRFIHBiX1RpbWVyU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19UaW1lclN0YXR1czsKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCBpZiB0aW1lciBpbml0aWFsaXNlZCAqLworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCS8qIExhdGNoIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJCQlvdXRsKCgyIDw8IGJfVGltZXJOYnIpIHwgMHhFMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkvKiBSZWFkIHRoZSB0aW1lciBzdGF0dXMgKi8KKwkJCQkJZHdfVGltZXJTdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX1RpbWVyU3RhdHVzID0gKEJZVEUpICgoZHdfVGltZXJTdGF0dXMpID4+IDgpICYgMTsKKwkJCQkJcHJpbnRrKCJQcm9ncmVzc1N0YXR1cyA6ICVkIiwgKnBiX1RpbWVyU3RhdHVzKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gaV9SZXR1cm5WYWx1ZTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIsICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9Xcml0ZVZhbHVlKSAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlIHRoZSB2YWx1ZSAodWxfV3JpdGVWYWx1ZSkgaW50byB0aGUgc2VsZWN0ZWQgdGltZXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgdGltZXIgbW9kdWxlIChiX01vZHVsTmJyKS4gIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgYWN0aW9uIGluIGRlcGVuZCBvZiB0aGUgdGltZSBtb2RlIHNlbGVjdGlvbi4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFNlZSB0aW1lciBtb2RlIGRlc2NyaXB0aW9uIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gd3JpdGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfV3JpdGVWYWx1ZSAgICAgIDogVmFsdWUgdG8gd3JpdGUgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCSAgICAgICBVTE9ORyB1bF9Xcml0ZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKwkJCS8qIFRlc3QgdGhlIHRpbWVyIG51bWJlciAqLworCQkJaWYgKGJfVGltZXJOYnIgPD0gMikgeworCQkJCS8qIFRlc3QgaWYgdGltZXIgaW5pdGlhbGlzZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkJCQkJb3V0bCh1bF9Xcml0ZVZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLKCJUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZXIgc2VsZWN0aW9uIHdyb25nICovCisJCQkJRFBSSU5USygiVGltZXIgc2VsZWN0aW9uIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIGlfUmV0dXJuVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5N2MwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX1BDSV9CVVNfQ0xPQ0sgCQkJMAorI2RlZmluZSBBUENJMTcxMF9GUk9OVF9DT05ORUNUT1JfSU5QVVQgCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1RJTUVSX1JFQURWQUxVRQkJMAorI2RlZmluZSBBUENJMTcxMF9USU1FUl9HRVRPVVRQVVRMRVZFTAkJMQorI2RlZmluZSBBUENJMTcxMF9USU1FUl9HRVRQUk9HUkVTU1NUQVRVUwkyCisjZGVmaW5lIEFQQ0kxNzEwX1RJTUVSX1dSSVRFVkFMVUUJCTMKKworI2RlZmluZSBBUENJMTcxMF9USU1FUl9SRUFESU5URVJSVVBUCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1RJTUVSX1JFQURBTExUSU1FUgkJMgorCisvKiBCRUdJTiBKSyAyNy4xMC4wMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0eiAqLworI2lmbmRlZiBBUENJMTcxMF8xME1IWgorI2RlZmluZSBBUENJMTcxMF8xME1IWgkxMAorI2VuZGlmCisvKiBFTkQgSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHogKi8KKworLyoKKyAqIDgyWDU0IFRJTUVSIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIDgyWDU0IFJFQUQgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiA4Mlg1NCBSRUFEICYgV1JJVEUgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfUmVhZFRpbWVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJICAgICAgUFVMT05HIHB1bF9UaW1lclZhbHVlKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJCSAgIFBCWVRFIHBiX091dHB1dExldmVsKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJCSAgICAgIFBCWVRFIHBiX1RpbWVyU3RhdHVzKTsKKworLyoKKyAqIDgyWDU0IFdSSVRFIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJICAgICAgIFVMT05HIHVsX1dyaXRlVmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1NGQzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKQEAgLTAsMCArMSwyMDMyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogQ0hST05PLkMgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBjaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI5LzA2Lzk4IHwgUy4gV2ViZXIgIHwgRGlnaXRhbCBpbnB1dCAvIG91dHB1dCBpbXBsZW1lbnRhdGlvbiAgICAgICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgIkFQQ0kxNzEwX0Nocm9uby5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfSW5pdENocm9ubyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0Nocm9ub01vZGUsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUENJSW5wdXRDbG9jaywgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1pbmdVbml0LCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgIHVsX1RpbWluZ0ludGVydmFsLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIGNocm9ub21ldGVyIG9wZXJhdGluZyBtb2RlIChiX0Nocm9ub01vZGUpfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIHVsX1RpbWluZ0ludGVydmFsIGFuZCB1bF9UaW1pbmdVbml0IGRldGVybWluZSB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgYmFzZSBmb3IgdGhlIG1lYXN1cmVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxfUmVhbFRpbWluZ0ludGVydmFsIHJldHVybiB0aGUgcmVhbCB0aW1pbmcgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdmFsdWUuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSBjaHJvbm9tZXRlci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgV2l0Y2ggdGhpcyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEFQQ0ktMTcxMCB5b3UgaGF2ZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgcG9zc2liaWxpdHkgdG8gbWVhc3VyZSB0aGUgdGltaW5nIHdpdGNoIHR3byBldmVudC4gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgMCBhbmQgMSBpcyBhcHByb3ByaWF0ZSBmb3IgcGVyaW9kIG1lYXN1cmVtZW50LnwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kZSAyIGFuZCAzIGlzIGFwcHJvcHJpYXRlIGZvciBmcmVxdWVudCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgNCB0byA3IGlzIGFwcHJvcHJpYXRlIGZvciBtZWFzdXJpbmcgdGhlIHRpbWluZ3wKK3wgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuICB0d28gZXZlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgIHwKK3wgQllURV8gICBiX01vZHVsTmJyICBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICB8Cit8IEJZVEVfICAgYl9DaHJvbm9Nb2RlCQkJCWRhdGFbMF0gICAgOiBDaHJvbm9tZXRlciBhY3Rpb24gbW9kZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDcpLiAgICAgICAgICAgICAgICAgICB8Cit8IEJZVEVfICAgYl9QQ0lJbnB1dENsb2NrCQkJZGF0YVsxXSA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgY2xvY2t8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMCBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMyBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF80ME1IWiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUENJLTE3MTAgaGF2ZSBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCA0ME1oeiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydHouICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltaW5nVW5pdAlkYXRhWzJdICAgIDogQmFzZSB0aW1pbmcgdW5pdHkgKDAgdG8gNCkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogbnMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiDCtXMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBtcyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IHMgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogbW4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgVUxPTkdfIHVsX1RpbWluZ0ludGVydmFsIDogZGF0YVszXQkgQmFzZSB0aW1pbmcgdmFsdWUuICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgOiBSZWFsICBiYXNlIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLgorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTc6IEJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtODogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTk6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBDSFJPTk9TIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdENocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCVVMT05HIHVsX1RpbWVyVmFsdWUgPSAwOworCVVMT05HIHVsX1RpbWluZ0ludGVydmFsID0gMDsKKwlVTE9ORyB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCWRvdWJsZSBkX1JlYWxUaW1pbmdJbnRlcnZhbCA9IDA7CisJRFdPUkQgZHdfTW9kZUFycmF5WzhdID0KKwkJeyAweDAxLCAweDA1LCAweDAwLCAweDA0LCAweDAyLCAweDBFLCAweDBBLCAweDA2IH07CisJQllURSBiX01vZHVsTmJyLCBiX0Nocm9ub01vZGUsIGJfUENJSW5wdXRDbG9jaywgYl9UaW1pbmdVbml0OworCisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQ2hyb25vTW9kZSA9IChCWVRFKSBkYXRhWzBdOworCWJfUENJSW5wdXRDbG9jayA9IChCWVRFKSBkYXRhWzFdOworCWJfVGltaW5nVW5pdCA9IChCWVRFKSBkYXRhWzJdOworCXVsX1RpbWluZ0ludGVydmFsID0gKFVMT05HKSBkYXRhWzNdOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBjaHJvbm9tZXRlciBtb2RlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9DaHJvbm9Nb2RlIDw9IDcpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBQQ0kgYnVzIGNsb2NrICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSB0aW1pbmcgdW5pdHkgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1RpbWluZ1VuaXQgPD0gNCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBiYXNlIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDY2KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxNDMxNjU1NzZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTQzMTY1VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDE0M1VMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAyVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gNjApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDEzMDE1MDI0MFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxMzAxNTBVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTMwVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDJVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSA1MCkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTA3Mzc0MTgyVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDEwNzM3NFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxMDdVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMVVMKSkpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIGJvYXJkIHZlcnNpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmJfQm9hcmRWZXJzaW9uID4gMCkpIHx8IChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIFRPUiB2ZXJzaW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTMxKSkgfHwgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikpIHsKKwkJCQkJCQkJCWZwdV9iZWdpbgorCQkJCQkJCQkJCSgpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWVyIDAgZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgwLjAwMSAqIGJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDAuMDAxICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAxCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMC4wMDEgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkwLjk5MzkyKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogw6ZzICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAxOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgxLjAgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgxLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkxLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgxLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkwLjk5MzkyKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDEwMDAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDEwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKTsKKwkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMTAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMC45OTM5Mik7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKiovCisJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgIC8qKioqKi8KKworCQkJCQkJCQkJY2FzZSAzOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgxMDAwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDEwMDAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEwMDAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDEwMDAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTAuOTkzOTIpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBtbiAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgNDoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDEwMDAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX1RpbWluZ0ludGVydmFsICogNjAuMCkgKiAoMTAwMDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgxMDAwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAxICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSAvIDYwLjA7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgxMDAwMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTAuOTkzOTIpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlmcHVfZW5kKCk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIFBDSSBpbnB1dCBjbG9jayAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2s7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIHRpbWluZyB1bml0eSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfVGltaW5nVW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1RpbWluZ1VuaXQ7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgYmFzZSB0aW1pbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWRfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWw7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY2hyb25vbWV0ZXIgbW9kZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19Nb2RlQXJyYXkKKwkJCQkJCQkJCQlbYl9DaHJvbm9Nb2RlXTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgNDAgTUh6IHVzZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkweDgwOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zX0Nocm9ub01vZHVsZUluZm8uZHdfQ29uZmlnUmVnLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogV3JpdGUgdGltZXIgMCB2YWx1ZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCh1bF9UaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDaHJvbm9tZXRlciBpbml0LiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCQkJYl9DaHJvbm9Jbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvblxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktODsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0KKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0eSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikpCisJCQl9CS8vIGlmIChiX0Nocm9ub01vZGUgPj0gMCAmJiBiX0Nocm9ub01vZGUgPD0gNykKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNocm9ub21ldGVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX0Nocm9ub01vZGUgPj0gMCAmJiBiX0Nocm9ub01vZGUgPD0gNykKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKwlkYXRhWzBdID0gdWxfUmVhbFRpbWluZ0ludGVydmFsOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUNocm9ubyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0N5Y2xlTW9kZSwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlKQorSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZUNocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlIHRoZSBjaHJvbm9tZXRlciBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCB0aGlzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5hYmxlIHRoZSBjaHJvbm9tZXRlciBpbnRlcnJ1cHQsIHRoZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGNocm9ub21ldGVyIGdlbmVyYXRlIGEgaW50ZXJydXB0IGFmdGVyIHRoZSBzdG9wIHNpZ25hbC58Cit8ICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiIGFuZCB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgbWFzayBkZXNjcmlwdGlvbiBjaGFwdGVyIGZyb20gdGhpcyBtYW51YWwuICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBiX0N5Y2xlTW9kZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lIGlmIHlvdSB3aWxsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWQgYSBzaW5nbGUgb3IgbW9yZSBjeWNsZS4KKworfAkJCQkJICBEaXNhYmxlIHRoZSBjaHJvbm9tZXRlciBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gSWYgeW91IGRpc2FibGUgdGhlIGNocm9ub21ldGVyIGFmdGVyIGEgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RhcnQgc2lnbmFsIG9jY3VyIGFuZCB5b3UgcmVzdGFydCB0aGUgY2hyb25vbWV0ZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB3aXRjaCB0aGUgIiBpX0FQQ0kxNzEwX0VuYWJsZUNocm9ubyIgZnVuY3Rpb24sIGlmIG5vICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0b3Agc2lnbmFsIG9jY3VyIHRoaXMgc3RhcnQgc2lnbmFsIGlzIGlnbm9yZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICBDUl9BUkVGKGNoYW5zcGVjKSAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICBFTkFCbGUvRGlzYWJsZSBjaHJvbm8KK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0N5Y2xlTW9kZSAgICA6IFNlbGVjdGVkIHRoZSBjaHJvbm9tZXRlciAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICBhY3F1aXNpdGlvbiBtb2RlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSAgICAgICAgICAgIGNocm9ub21ldGVyIGludGVycnVwdC4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFOiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGNocm9ub21ldGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRTogICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSBjaHJvbm9tZXRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDaHJvbm9tZXRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIKKyAgICAgICAgICAgICAgICAgICAgICAtODogZGF0YVswXSB3cm9uZyBpbnB1dCAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfQ3ljbGVNb2RlLCBiX0ludGVycnVwdEVuYWJsZSwgYl9BY3Rpb247CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uID0gKEJZVEUpIGRhdGFbMF07CisJYl9DeWNsZU1vZGUgPSAoQllURSkgZGF0YVsxXTsKKwliX0ludGVycnVwdEVuYWJsZSA9IChCWVRFKSBkYXRhWzJdOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5iX0Nocm9ub0luaXQgPT0gMSkgeworCisJCQkJc3dpdGNoIChiX0FjdGlvbikgeworCisJCQkJY2FzZSBBUENJMTcxMF9FTkFCTEU6CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGN5Y2xlIG1vZGUgcGFyYW1ldGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKQorCQkJCQkJfHwgKGJfQ3ljbGVNb2RlID09CisJCQkJCQkJQVBDSTE3MTBfQ09OVElOVU9VUykpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCQlBUENJMTcxMF9FTkFCTEUpCisJCQkJCQkJfHwgKGJfSW50ZXJydXB0RW5hYmxlID09CisJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEUpKQorCQkJCQkJeworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWJfSW50ZXJydXB0TWFzaworCQkJCQkJCQk9CisJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTYXZlIHRoZSBjeWNsZSBtb2RlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWJfQ3ljbGVNb2RlID0KKwkJCQkJCQkJYl9DeWNsZU1vZGU7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQlkd19Db25maWdSZWcgPQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfQ29uZmlnUmVnICYKKwkJCQkJCQkJMHg4RikgfCAoKDEgJgorCQkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGUpCisJCQkJCQkJCTw8IDUpIHwgKCgxICYKKwkJCQkJCQkJCWJfQ3ljbGVNb2RlKQorCQkJCQkJCQk8PCA2KSB8IDB4MTA7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfSW50ZXJydXB0RW5hYmxlID09CisJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRSkKKwkJCQkJCQl7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29uZmlnUmVnLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDMyICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkJCQkJCQl9CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCQkJCQkvKiBFbmFibGUgdGhlIGNocm9ub21ldGVyICAgICAgICAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfQ29uZmlnUmVnLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMTYgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQ2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bCgwLCBkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMzYgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCX0JLy8gaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8IChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSkKKwkJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIkludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0JLy8gaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8IChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSkKKwkJCQkJfQkvLyBpZiAoKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX1NJTkdMRSkgfHwgKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX0NPTlRJTlVPVVMpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIENocm9ub21ldGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiQ2hyb25vbWV0ZXIgYWNxdWlzaXRpb24gbW9kZSBjeWNsZSBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0RJU0FCTEU6CisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJYl9JbnRlcnJ1cHRNYXNrID0gMDsKKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQlkd19Db25maWdSZWcgPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQlkd19Db25maWdSZWcgJiAweDJGOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgICAqLworCQkJCQkvKiBEaXNhYmxlIHRoZSBjaHJvbm9tZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5kd19Db25maWdSZWcsCisJCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMTYgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGNvbnRpbnVvdXMgbW9kZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJYl9DeWNsZU1vZGUgPT0KKwkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDM2ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlEUFJJTlRLKCJJbnB1dHMgd3JvbmchIEVuYWJsZSBvciBEaXNhYmxlIGNocm9ub1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtODsKKwkJCQl9CS8vIHN3aXRjaCBFTkFCTEUvRElTQUJMRQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOklOVAlpX0FQQ0kxNzEwX0luc25SZWFkQ2hyb25vKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICBmdW5jdGlvbnMgZm9yIFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9SZWFkVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwliX1JlYWRUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX0NIUk9OT19QUk9HUkVTU19TVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfQ0hST05PX1JFQURWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZENocm9ub1ZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShVSU5UKSBpbnNuLT51bnVzZWRbMF0sCisJCQkoUEJZVEUpICYgZGF0YVswXSwgKFBVTE9ORykgJiBkYXRhWzFdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0NIUk9OT19DT05WRVJUVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NvbnZlcnRDaHJvbm9WYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoVUxPTkcpIGluc24tPnVudXNlZFswXSwKKwkJCShQVUxPTkcpICYgZGF0YVswXSwKKwkJCShQQllURSkgJiBkYXRhWzFdLAorCQkJKFBCWVRFKSAmIGRhdGFbMl0sCisJCQkoUFVJTlQpICYgZGF0YVszXSwKKwkJCShQVUlOVCkgJiBkYXRhWzRdLCAoUFVJTlQpICYgZGF0YVs1XSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9DSFJPTk9fUkVBRElOVEVSUlVQVDoKKwkJcHJpbnRrKCJJbiBDaHJvbm8gUmVhZCBJbnRlcnJ1cHRcbiIpOworCisJCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLmJfT2xkTW9kdWxlTWFzazsKKwkJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkSW50ZXJydXB0TWFzazsKKwkJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkQ291bnRlckxhdGNoVmFsdWU7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWRldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJdWlfUmVhZCA9IChkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiUmVhZFR5cGUgUGFyYW1ldGVyIHdyb25nXG4iKTsKKwl9CisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKQorCQlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfQ2hyb25vU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciBzdGF0dXMgKHBiX0Nocm9ub1N0YXR1cykgZnJvbSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjaHJvbm9tZXRlciBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcGJfQ2hyb25vU3RhdHVzIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZC58Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN0YXJ0IHNpZ25hbCBvY2N1ci4gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogTWVhc3VyZW1lbnQgc3RhcnRlZC4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0YXJ0IHNpZ25hbCBvY2N1ci4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IE1lYXN1cmVtZW50IHN0b3BwZWQuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdG9wIHNpZ25hbCBvY2N1ci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWVhc3VyZW1lbnQgaXMgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZS4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiBBIG92ZXJmbG93IG9jY3VyLiBZb3UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgY2hhbmdlIHRoZSBiYXNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nIHdpdGNoIHRoZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0Q2hyb25vUHJvZ3Jlc3NTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DaHJvbm9TdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0NIUk9OT01FVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9DaHJvbm9Jbml0ID09IDEpIHsKKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyA4ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBvdmVyZmxvdyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChkd19TdGF0dXMgJiA4KSA9PSA4KSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBPdmVyZmxvdyBvY2N1ciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMzsKKwkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0b3BwZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoZHdfU3RhdHVzICYgMikgPT0gMikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQSBzdG9wIHNpZ25hbCBvY2N1ciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMjsKKwkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0YXJ0ZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBBIHN0YXJ0IHNpZ25hbCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJKnBiX0Nocm9ub1N0YXR1cyA9IDE7CisJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkKKwkJCQkJCWVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIE1lYXN1cmVtZW50IG5vdCBzdGFydGVkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMDsKKwkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKQorCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMikgPT0gMikKKwkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIkNocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyAgICB1aV9UaW1lT3V0LCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0Nocm9ub1N0YXR1cywgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfQ2hyb25vVmFsdWUpICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGNocm9ub21ldGVyIHN0YXR1cyAocGJfQ2hyb25vU3RhdHVzKSBhbmQgdGhlfAorfCAgICAgICAgICAgICAgICAgICAgIHRpbWluZyB2YWx1ZSAocHVsX0Nocm9ub1ZhbHVlKSBhZnRlciBhIHN0b3Agc2lnbmFsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgb2NjdXIgZnJvbSBzZWxlY3RlZCBjaHJvbm9tZXRlciBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFyZSBvbmx5IGF2YWlibGUgaWYgeW91IGhhdmUgZGlzYWJsZWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnJ1cHQgZnVuY3Rpb25hbGl0eS4gU2VlIGZ1bmN0aW9uICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRW5hYmxlQ2hyb25vIiBhbmQgdGhlIEludGVycnVwdCBtYXNrICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBjaGFwdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGVzdCB0aGUgY2hyb25vbWV0ZXIgc3RhdHVzIHdpdGNoIHRoZSAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfR2V0Q2hyb25vUHJvZ3Jlc3NTdGF0dXMiIGZ1bmN0aW9uLiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIHB1bF9DaHJvbm9WYWx1ZSBwYXJhbWV0ZXIgaXMgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbm90IHJlYWwgbWVhc3VyZWQgdGltaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2VkIHRoZSAiaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUiICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9yIG1ha2UgdGhpcyBvcGVyYXRpb24gZm9yIGNhbGN1bGF0ZSB0aGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGltaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRpbWluZyA9IHB1bF9DaHJvbm9WYWx1ZSAqIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBwdWxfUmVhbFRpbWluZ0ludGVydmFsIGlzIHRoZSByZXR1cm5lZCBwYXJhbWV0ZXIgZnJvbSAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iIGZ1bmN0aW9uIGFuZCB0aGUgdGltZSB1bml0eSBpcyB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGJfVGltaW5nVW5pdCBmcm9tICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iIGZ1bmN0aW9ufAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcGJfQ2hyb25vU3RhdHVzIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZC58Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN0YXJ0IHNpZ25hbCBvY2N1ci4gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogTWVhc3VyZW1lbnQgc3RhcnRlZC4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0YXJ0IHNpZ25hbCBvY2N1ci4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IE1lYXN1cmVtZW50IHN0b3BwZWQuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdG9wIHNpZ25hbCBvY2N1ci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWVhc3VyZW1lbnQgaXMgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZS4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiBBIG92ZXJmbG93IG9jY3VyLiBZb3UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgY2hhbmdlIHRoZSBiYXNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nIHdpdGNoIHRoZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVMT05HICBwdWxfQ2hyb25vVmFsdWUgIDogQ2hyb25vbWV0ZXIgdGltaW5nIHZhbHVlLiAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZyAoMCB0byA2NTUzNSkgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IEludGVycnVwdCByb3V0aW5lIGluc3RhbGxlZC4gWW91IGNhbiBub3QgcmVhZCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgdGhlIGNocm9ub21ldGVyIG1lYXN1cmVkIHRpbWluZy4gICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCVVJTlQgdWlfVGltZU91dCwgUEJZVEUgcGJfQ2hyb25vU3RhdHVzLCBQVUxPTkcgcHVsX0Nocm9ub1ZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfVGltZU91dCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DSFJPTk9NRVRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfQ2hyb25vSW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgdGltb3V0IHBhcmFtZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKCh1aV9UaW1lT3V0ID49IDApCisJCQkJCSYmICh1aV9UaW1lT3V0IDw9IDY1NTM1VUwpKSB7CisKKwkJCQkJZm9yICg7OykgeworCQkJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBvdmVyZmxvdyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIE92ZXJmbG93IG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgY29udGludW91cyBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJYl9DeWNsZU1vZGUgPT0KKwkJCQkJCQkJQVBDSTE3MTBfQ09OVElOVU9VUykKKwkJCQkJCQl7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzNiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiA4KSA9PSA4KQorCQkJCQkJZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgbWVhc3VyZW1lbnQgc3RvcHBlZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMikgPT0KKwkJCQkJCQkJMikgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQSBzdG9wIHNpZ25hbCBvY2N1ciAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzCisJCQkJCQkJCQk9IDI7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIGNvbnRpbm5vdXMgbW9kZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCQliX0N5Y2xlTW9kZQorCQkJCQkJCQkJPT0KKwkJCQkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMpCisJCQkJCQkJCXsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzYgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgbWVhc3VyZW1lbnQgc3RhcnRlZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBBIHN0YXJ0IHNpZ25hbCBvY2N1ciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZCAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMDsKKwkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKworCQkJCQkJaWYgKGR3X1RpbWVPdXQgPT0gdWlfVGltZU91dCkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGltZW91dCBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEluY3JlbWVudCB0aGUgdGltZW91dCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1RpbWVPdXQgPQorCQkJCQkJCQlkd19UaW1lT3V0ICsgMTsKKwkJCQkJCQltZGVsYXkoMTAwMCk7CisKKwkJCQkJCX0KKwkJCQkJfQkvLyBmb3IgKDs7KQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgc3RvcCBzaWduYWwgb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKnBiX0Nocm9ub1N0YXR1cyA9PSAyKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgbWVhc3VyZWQgdGltaW5nIHZhbHVlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcHVsX0Nocm9ub1ZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCWlmICgqcHVsX0Nocm9ub1ZhbHVlICE9IDApIHsKKwkJCQkJCQkqcHVsX0Nocm9ub1ZhbHVlID0KKwkJCQkJCQkJKnB1bF9DaHJvbm9WYWx1ZQorCQkJCQkJCQktIDE7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiB0aW1lb3V0IG9jY3VyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKCpwYl9DaHJvbm9TdGF0dXMgIT0gMykKKwkJCQkJCQkmJiAoZHdfVGltZU91dCA9PQorCQkJCQkJCQl1aV9UaW1lT3V0KQorCQkJCQkJCSYmICh1aV9UaW1lT3V0ICE9IDApKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUaW1lb3V0IG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMgPSA0OworCQkJCQkJfQorCQkJCQl9CisKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlRpbWVvdXQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIkNocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9DaHJvbm9WYWx1ZSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0hvdXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfTWludXRlLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9TZWNvbmQsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVSU5UXyAgcHVpX01pbGxpU2Vjb25kLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICBwdWlfTWljcm9TZWNvbmQsICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gIHB1aV9OYW5vU2Vjb25kKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbnZlcnQgdGhlIGNocm9ub21ldGVyIG1lYXN1cmVkIHRpbWluZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKHVsX0Nocm9ub1ZhbHVlKSBpbiB0byBoLCBtbiwgcywgbXMsIMK1cywgbnMuICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX0Nocm9ub1ZhbHVlIDogTWVhc3VyZWQgY2hyb25vbWV0ZXIgdGltaW5nICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSJpX0FQQ0kxNzEwX1JlYWRDaHJvbm9WYWx1ZSJ8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfICAgcHVsX0hvdXIgICAgICAgIDogQ2hyb25vbWV0ZXIgdGltaW5nIGhvdXIgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgICAgcGJfTWludXRlICAgICAgOiBDaHJvbm9tZXRlciB0aW1pbmcgbWludXRlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgICBwYl9TZWNvbmQgICAgICA6IENocm9ub21ldGVyIHRpbWluZyBzZWNvbmQgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gICAgcHVpX01pbGxpU2Vjb25kICA6IENocm9ub21ldGVyIHRpbWluZyBtaW5pICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICAgIHB1aV9NaWNyb1NlY29uZCA6IENocm9ub21ldGVyIHRpbWluZyBtaWNybyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVSU5UXyAgICBwdWlfTmFub1NlY29uZCAgOiBDaHJvbm9tZXRlciB0aW1pbmcgbmFubyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCVVMT05HIHVsX0Nocm9ub1ZhbHVlLAorCVBVTE9ORyBwdWxfSG91ciwKKwlQQllURSBwYl9NaW51dGUsCisJUEJZVEUgcGJfU2Vjb25kLAorCVBVSU5UIHB1aV9NaWxsaVNlY29uZCwgUFVJTlQgcHVpX01pY3JvU2Vjb25kLCBQVUlOVCBwdWlfTmFub1NlY29uZCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJZG91YmxlIGRfSG91cjsKKwlkb3VibGUgZF9NaW51dGU7CisJZG91YmxlIGRfU2Vjb25kOworCWRvdWJsZSBkX01pbGxpU2Vjb25kOworCWRvdWJsZSBkX01pY3JvU2Vjb25kOworCWRvdWJsZSBkX05hbm9TZWNvbmQ7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DSFJPTk9NRVRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfQ2hyb25vSW5pdCA9PSAxKSB7CisJCQkJZnB1X2JlZ2luKCk7CisKKwkJCQlkX0hvdXIgPSAoZG91YmxlKXVsX0Nocm9ub1ZhbHVlICooZG91YmxlKQorCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5kX1RpbWluZ0ludGVydmFsOworCisJCQkJc3dpdGNoIChkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9UaW1pbmdVbml0KSB7CisJCQkJY2FzZSAwOgorCQkJCQlkX0hvdXIgPSBkX0hvdXIgLyAoZG91YmxlKTEwMDAuMDsKKworCQkJCWNhc2UgMToKKwkJCQkJZF9Ib3VyID0gZF9Ib3VyIC8gKGRvdWJsZSkxMDAwLjA7CisKKwkJCQljYXNlIDI6CisJCQkJCWRfSG91ciA9IGRfSG91ciAvIChkb3VibGUpMTAwMC4wOworCisJCQkJY2FzZSAzOgorCQkJCQlkX0hvdXIgPSBkX0hvdXIgLyAoZG91YmxlKTYwLjA7CisKKwkJCQljYXNlIDQ6CisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgaG91ciAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfSG91ciA9IGRfSG91ciAvIChkb3VibGUpNjAuMDsKKwkJCQkJKnB1bF9Ib3VyID0gKFVMT05HKSBkX0hvdXI7CisKKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1pbnV0ZSAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZF9NaW51dGUgPSBkX0hvdXIgLSAqcHVsX0hvdXI7CisJCQkJCWRfTWludXRlID0gZF9NaW51dGUgKiA2MDsKKwkJCQkJKnBiX01pbnV0ZSA9IChCWVRFKSBkX01pbnV0ZTsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX1NlY29uZCA9IGRfTWludXRlIC0gKnBiX01pbnV0ZTsKKwkJCQkJZF9TZWNvbmQgPSBkX1NlY29uZCAqIDYwOworCQkJCQkqcGJfU2Vjb25kID0gKEJZVEUpIGRfU2Vjb25kOworCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1pbmkgc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfTWlsbGlTZWNvbmQgPSBkX1NlY29uZCAtICpwYl9TZWNvbmQ7CisJCQkJCWRfTWlsbGlTZWNvbmQgPSBkX01pbGxpU2Vjb25kICogMTAwMDsKKwkJCQkJKnB1aV9NaWxsaVNlY29uZCA9IChVSU5UKSBkX01pbGxpU2Vjb25kOworCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsY3VsYXRlIHRoZSBtaWNybyBzZWNvbmQgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfTWljcm9TZWNvbmQgPQorCQkJCQkJZF9NaWxsaVNlY29uZCAtCisJCQkJCQkqcHVpX01pbGxpU2Vjb25kOworCQkJCQlkX01pY3JvU2Vjb25kID0gZF9NaWNyb1NlY29uZCAqIDEwMDA7CisJCQkJCSpwdWlfTWljcm9TZWNvbmQgPSAoVUlOVCkgZF9NaWNyb1NlY29uZDsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgbWljcm8gc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX05hbm9TZWNvbmQgPQorCQkJCQkJZF9NaWNyb1NlY29uZCAtCisJCQkJCQkqcHVpX01pY3JvU2Vjb25kOworCQkJCQlkX05hbm9TZWNvbmQgPSBkX05hbm9TZWNvbmQgKiAxMDAwOworCQkJCQkqcHVpX05hbm9TZWNvbmQgPSAoVUlOVCkgZF9OYW5vU2Vjb25kOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlmcHVfZW5kKCk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldHMgdGhlIG91dHB1dCB3aXRjaCBoYXMgYmVlbiBwYXNzZWQgd2l0aCB0aGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGJfQ2hhbm5lbC4gU2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgc2V0dGluZyBhbnwKK3wgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaGlnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfT3V0cHV0Q2hhbm5lbCA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JfQ0hBTigpICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCB0byAyKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgSCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCBBICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBDaGFubmVsIEIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9TZXRDaHJvbm9DaGxPZmYgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9PdXRwdXRDaGFubmVsKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlc2V0cyB0aGUgb3V0cHV0IHdpdGNoIGhhcyBiZWVuIHBhc3NlZCB3aXRoIHRoZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGJfQ2hhbm5lbC4gUmVzZXR0aW5nIGFuIG91dHB1dCBtZWFucyBzZXR0aW5nIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbiBvdXRwdXQgbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSA6IENobCBPTiwgQ2hsIE9GRiAsIENobCBSZWFkICwgUG9ydCBSZWFkCisKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICBDUl9BUkVGICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwgQ1JfQ0hBTiA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCB0byAyKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgSCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCBBICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBDaGFubmVsIEIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkQ2hyb25vQ2hsVmFsdWUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSW5wdXRDaGFubmVsLCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9DaGFubmVsU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBkaWdpdGFsIGlucHV0ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpIGZyb20gc2VsZWN0ZWQgY2hyb25vbWV0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnB1dENoYW5uZWwgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCBpbnB1dCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsICgwIHRvIDIpICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JfQ0hBTigpICAgICAgICAgICAgIDAgOiBDaGFubmVsIEUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgRiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBHICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0NoYW5uZWxTdGF0dXMgOiBEaWdpdGFsIGlucHV0IGNoYW5uZWwgc3RhdHVzLnwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgaXMgbm90IGFjdGl2ZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCBpcyBhY3RpdmUgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZENocm9ub1BvcnRWYWx1ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1BvcnRWYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBmcm9tIGRpZ2l0YWwgaW5wdXRzIHBvcnQgZnJvbSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkICAoYl9Nb2R1bE5icikgY2hyb25vbWV0ZXIgbW9kdWxlLiAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfUG9ydFZhbHVlICAgOiBEaWdpdGFsIGlucHV0cyBwb3J0IHN0YXR1cy4KK3wgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNDaHJvbm9EaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfT3V0cHV0Q2hhbm5lbCwgYl9JbnB1dENoYW5uZWwsIGJfSU9UeXBlOworCURXT1JEIGR3X1N0YXR1czsKKwlQQllURSBwYl9DaGFubmVsU3RhdHVzOworCVBCWVRFIHBiX1BvcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX0lPVHlwZSA9IChCWVRFKSBkYXRhWzBdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5iX0Nocm9ub0luaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgb3V0cHV0IGNoYW5uZWwgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlzd2l0Y2ggKGJfSU9UeXBlKSB7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9GRjoKKworCQkJCQliX091dHB1dENoYW5uZWwgPQorCQkJCQkJKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQkJCQlpZiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpIHsKKworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCQkoYl9PdXRwdXRDaGFubmVsICogNCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0Q2hhbm5lbCA+PSAwKSAmJiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKworCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRDaGFubmVsID49IDApICYmIChiX091dHB1dENoYW5uZWwgPD0gMikpCisKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9OOgorCisJCQkJCWJfT3V0cHV0Q2hhbm5lbCA9CisJCQkJCQkoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCQkJCWlmIChiX091dHB1dENoYW5uZWwgPD0gMikgeworCisJCQkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgMjAgKworCQkJCQkJCShiX091dHB1dENoYW5uZWwgKiA0KSArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRDaGFubmVsID49IDApICYmIChiX091dHB1dENoYW5uZWwgPD0gMikpCisJCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCisJCQkJCX0JLy8gaWYgKChiX091dHB1dENoYW5uZWwgPj0gMCkgJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PSAyKSkKKworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfQ0hST05PX1JFQURfQ0hBTk5FTDoKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIGlucHV0IGNoYW5uZWwgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlwYl9DaGFubmVsU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisJCQkJCWJfSW5wdXRDaGFubmVsID0KKwkJCQkJCShCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCQkJCQlpZiAoYl9JbnB1dENoYW5uZWwgPD0gMikgeworCisJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCSpwYl9DaGFubmVsU3RhdHVzID0KKwkJCQkJCQkoQllURSkgKCgoZHdfU3RhdHVzID4+CisJCQkJCQkJCQliX0lucHV0Q2hhbm5lbCkKKwkJCQkJCQkJJiAxKSBeIDEpOworCQkJCQl9CS8vIGlmICgoYl9JbnB1dENoYW5uZWwgPj0gMCkgJiYgKGJfSW5wdXRDaGFubmVsIDw9IDIpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCQl9CS8vIGlmICgoYl9JbnB1dENoYW5uZWwgPj0gMCkgJiYgKGJfSW5wdXRDaGFubmVsIDw9IDIpKQorCisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBBUENJMTcxMF9DSFJPTk9fUkVBRF9QT1JUOgorCisJCQkJCXBiX1BvcnRWYWx1ZSA9IChQQllURSkgJiBkYXRhWzBdOworCisJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkqcGJfUG9ydFZhbHVlID0KKwkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyAmIDB4NykgXiA3KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmI1MGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzMwTUhaCQkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCQkzMworI2RlZmluZSBBUENJMTcxMF80ME1IWgkJCTQwCisKKyNkZWZpbmUgQVBDSTE3MTBfU0lOR0xFCQkJMAorI2RlZmluZSBBUENJMTcxMF9DT05USU5VT1VTCQkxCisKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1BST0dSRVNTX1NUQVRVUwkwCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19SRUFEVkFMVUUJMQorI2RlZmluZSBBUENJMTcxMF9DSFJPTk9fQ09OVkVSVFZBTFVFCTIKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1JFQURJTlRFUlJVUFQJMworCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9OCTAKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1NFVF9DSEFOTkVMT0ZGCTEKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1JFQURfQ0hBTk5FTAkyCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19SRUFEX1BPUlQJMworCisvKgorICogQ0hST05PTUVURVIgSU5JU0lBTElTQVRJT04gRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZUNocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogQ0hST05PTUVURVIgUkVBRCBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZENocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0Q2hyb25vUHJvZ3Jlc3NTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DaHJvbm9TdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkgICAgICAgVUlOVCB1aV9UaW1lT3V0LCBQQllURSBwYl9DaHJvbm9TdGF0dXMsCisJCQkgICAgICAgUFVMT05HIHB1bF9DaHJvbm9WYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0NvbnZlcnRDaHJvbm9WYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgQllURSBiX01vZHVsTmJyLAorCQkJCSAgVUxPTkcgdWxfQ2hyb25vVmFsdWUsCisJCQkJICBQVUxPTkcgcHVsX0hvdXIsCisJCQkJICBQQllURSBwYl9NaW51dGUsCisJCQkJICBQQllURSBwYl9TZWNvbmQsCisJCQkJICBQVUlOVCBwdWlfTWlsbGlTZWNvbmQsIFBVSU5UIHB1aV9NaWNyb1NlY29uZCwKKwkJCQkgIFBVSU5UIHB1aV9OYW5vU2Vjb25kKTsKKworLyoKKyAqIENIUk9OT01FVEVSIERJR0lUQUwgSU5QVVQgT1VUUFVUIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0RpZ19pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmUyN2FlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYwpAQCAtMCwwICsxLDEwMjAgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBESUdfSU8uQyAgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIGRpZ2l0YWwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMTYvMDYvOTggfCBTLiBXZWJlciAgfCBEaWdpdGFsIGlucHV0IC8gb3V0cHV0IGltcGxlbWVudGF0aW9uICAgICAgICAgIHwKKyAgfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiQVBDSTE3MTBfRGlnX2lvLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHwKK3wJCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgZGlnaXRhbCBJL08gb3BlcmF0aW5nIG1vZGUgZnJvbSBzZWxlY3RlZCB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZXwKK3wgICAgICAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBkaWdpdGFsfAorfCAgICAgICAgICAgICAgICAgICAgIEkvTy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgkJCQkJCQkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgZGF0YVswXTogTW9kdWxlIG51bWJlciB0byAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ2hhbm5lbEFNb2RlIGRhdGFbMV0gIDogQ2hhbm5lbCBBIG1vZGUgc2VsZWN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5lbCB1c2VkIGZvciBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgdXNlZCBmb3IgZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ2hhbm5lbEJNb2RlIGRhdGFbMl0gOiBDaGFubmVsIEIgbW9kZSBzZWxlY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIHVzZWQgZm9yIGRpZ2l0YWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCB1c2VkIGZvciBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQJCQkJCSB8CisJCQkJCQlkYXRhWzBdCSAgbWVtb3J5IG9uL29mZgorQWN0aXZhdGVzIGFuZCBkZWFjdGl2YXRlcyB0aGUgZGlnaXRhbCBvdXRwdXQgbWVtb3J5LgorCQkJCQkJQWZ0ZXIgaGF2aW5nICAgICAgfAorfCAgICAgICAgICAgICAgICAgY2FsbGVkIHVwIHRoaXMgZnVuY3Rpb24gd2l0aCBtZW1vcnkgb24sdGhlIG91dHB1dCB5b3UgaGF2ZSBwcmV2aW91c2x5fAorfCAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlZCB3aXRoIHRoZSBmdW5jdGlvbiBhcmUgbm90IHJlc2V0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEEgY29uZmlndXJhdGlvbiBlcnJvciAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IEJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQiBjb25maWd1cmF0aW9uIGVycm9yICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdEaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9Nb2R1bE5iciwgYl9DaGFubmVsQU1vZGUsIGJfQ2hhbm5lbEJNb2RlOworCUJZVEUgYl9NZW1vcnlPbk9mZiwgYl9Db25maWdUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19Xcml0ZUNvbmZpZyA9IDA7CisKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQ29uZmlnVHlwZSA9IChCWVRFKSBkYXRhWzBdOwkvLyBNZW1vcnkgb3IgIEluaXQKKwliX0NoYW5uZWxBTW9kZSA9IChCWVRFKSBkYXRhWzFdOworCWJfQ2hhbm5lbEJNb2RlID0gKEJZVEUpIGRhdGFbMl07CisJYl9NZW1vcnlPbk9mZiA9IChCWVRFKSBkYXRhWzFdOwkvLyBpZiBtZW1vcnkgb3BlcmF0aW9uCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPj0gNCkgeworCQlEUFJJTlRLKCJNb2R1bGUgTnVtYmVyIGludmFsaWRcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJCXJldHVybiBpX1JldHVyblZhbHVlOworCX0KKwlzd2l0Y2ggKGJfQ29uZmlnVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfRElHSU9fTUVNT1JZT05PRkY6CisKKwkJaWYgKGJfTWVtb3J5T25PZmYpCS8vIElmIE1lbW9yeSBPTgorCQl7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgb3V0cHV0IG1lbW9yeSBvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0RpZ2l0YWxJT0luZm8uYl9PdXRwdXRNZW1vcnlFbmFibGVkID0gMTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENsZWFyIHRoZSBvdXRwdXQgbWVtb3J5ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfRGlnaXRhbElPSW5mby5kd19PdXRwdXRNZW1vcnkgPSAwOworCQl9IGVsc2UJCS8vIElmIG1lbW9yeSBvZmYKKwkJeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2V0IHRoZSBvdXRwdXQgbWVtb3J5IG9mZiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19EaWdpdGFsSU9JbmZvLmJfT3V0cHV0TWVtb3J5RW5hYmxlZCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0RJR0lPX0lOSVQ6CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBkaWdpdGFsIEkvTyBjb3VudGVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfRElHSVRBTF9JTykgeworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQSBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChiX0NoYW5uZWxBTW9kZSA9PSAwKSB8fCAoYl9DaGFubmVsQU1vZGUgPT0gMSkpIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQiBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9DaGFubmVsQk1vZGUgPT0gMCkKKwkJCQkJfHwgKGJfQ2hhbm5lbEJNb2RlID09IDEpKSB7CisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID0KKwkJCQkJCTE7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgY2hhbm5lbCBBIGNvbmZpZ3VyYXRpb24gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJYl9DaGFubmVsQU1vZGUgPSBiX0NoYW5uZWxBTW9kZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2F2ZSBjaGFubmVsIEIgY29uZmlndXJhdGlvbiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQliX0NoYW5uZWxCTW9kZSA9IGJfQ2hhbm5lbEJNb2RlOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIGNoYW5uZWwgQSBhbmQgQiBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1dyaXRlQ29uZmlnID0KKwkJCQkJCShEV09SRCkgKGJfQ2hhbm5lbEFNb2RlIHwKKwkJCQkJCShiX0NoYW5uZWxCTW9kZSAqIDIpKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGR3X1dyaXRlQ29uZmlnLAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDQgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJfSBlbHNlIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEIgY29uZmlndXJhdGlvbiBlcnJvciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIkJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQiBjb25maWd1cmF0aW9uIGVycm9yXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKworCQkJfSBlbHNlIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQSBjb25maWd1cmF0aW9uIGVycm9yICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEEgY29uZmlndXJhdGlvbiBlcnJvclxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCisJCQl9CisKKwkJfSBlbHNlIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfQkJCS8vIGVuZCBvZiBTd2l0Y2gKKwlwcmludGsoIlJldHVybiBWYWx1ZSAlZFxuIiwgaV9SZXR1cm5WYWx1ZSk7CisJcmV0dXJuIGlfUmV0dXJuVmFsdWU7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5QVVQgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3xJTlQgaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsY29tZWRpX3N1YmRldmljZQorKnMsCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIHN0YXR1cyBmcm9tIHNlbGVjdGVkIGRpZ2l0YWwgSS9PIGRpZ2l0YWwgaW5wdXR8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfSW5wdXRDaGFubmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisKK3wKK3wgIEJZVEVfIGJfTW9kdWxOYnIgIENSX0FSRUYoY2hhbnNwZWMpICAgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgfAorfCAgQllURV8gYl9JbnB1dENoYW5uZWwgQ1JfQ0hBTihjaGFuc3BlYykgICAgICAgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAoIDAgdG8gNikgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIEMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgRCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBFICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBDaGFubmVsIEYgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IENoYW5uZWwgRyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IDogQ2hhbm5lbCBBICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgOiBDaGFubmVsIEIKKworCisJfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJCQkJCSBkYXRhWzBdICAgOiBEaWdpdGFsIGlucHV0IGNoYW5uZWwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBJL08gZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IERpZ2l0YWwgSS9PIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIG91dHB1dCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3Igb3V0cHV0ICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvL19JTlRfICAgaV9BUENJMTcxMF9SZWFkRGlnaXRhbElPQ2hsVmFsdWUgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9Nb2R1bE5iciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9JbnB1dENoYW5uZWwsCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0NoYW5uZWxTdGF0dXMpCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnOworCUJZVEUgYl9Nb2R1bE5iciwgYl9JbnB1dENoYW5uZWw7CisJUEJZVEUgcGJfQ2hhbm5lbFN0YXR1czsKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfSW5wdXRDaGFubmVsID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRhdGFbMF0gPSAwOworCXBiX0NoYW5uZWxTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgZGlnaXRhbCBpbW5wdXQgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9JbnB1dENoYW5uZWwgPD0gNikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiB0aGUgZGlnaXRhbCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID09IDEpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGNoYW5uZWwgQSBvciBjaGFubmVsIEIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX0lucHV0Q2hhbm5lbCA+IDQpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGNoYW5uZWwgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfSW5wdXRDaGFubmVsID09IDUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIEEgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWJfQ2hhbm5lbEFNb2RlCisJCQkJCQkJCSE9IDApIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEEgaXMgdXNlZCBmb3Igb3V0cHV0ICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS02OworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGJfSW5wdXRDaGFubmVsID09IDUpCisJCQkJCQllbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIEIgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWJfQ2hhbm5lbEJNb2RlCisJCQkJCQkJCSE9IDApIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3Igb3V0cHV0ICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS03OworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGJfSW5wdXRDaGFubmVsID09IDUpCisJCQkJCX0JLy8gaWYgKGJfSW5wdXRDaGFubmVsID4gNCkKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvL0lOUERXIChwc19BUENJMTcxMFZhcmlhYmxlLT4KKwkJCQkJCS8vICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCQkvLyAgIHNfQm9hcmRJbmZvcy4KKwkJCQkJCS8vICB1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5iciksCisJCQkJCQkvLyAmZHdfU3RhdHVzUmVnKTsKKworCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJKnBiX0NoYW5uZWxTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1c1JlZyBeCisJCQkJCQkJCTB4MUMpID4+CisJCQkJCQkJYl9JbnB1dENoYW5uZWwpICYgMTsKKworCQkJCQl9CS8vIGlmIChpX1JldHVyblZhbHVlID09IDApCisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RlZCBkaWdpdGFsIGlucHV0IGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvclxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZURpZ2l0YWxJT0NobE9uT2ZmKGNvbWVkaV9kZXZpY2UKK3wqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldHMgb3IgcmVzZXRzIHRoZSBvdXRwdXQgd2l0Y2ggaGFzIGJlZW4gcGFzc2VkIHdpdGggdGhlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBiX0NoYW5uZWwuIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHNldHRpbmcgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYW4gb3VwdXQgaGlnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAoYXJlZiApICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwgKENSX0NIQU4pIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCBvdXRwdXQgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsICgwIHRvIDIpICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIEggICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgQSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBCICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBkaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICIgaV9BUENJMTcxMF9Jbml0RGlnaXRhbElPIiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQKKwkJCQkJIC04OiBEaWdpdGFsIE91dHB1dCBNZW1vcnkgT0ZGLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBwcmV2aW91c2x5IHRoZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfU2V0RGlnaXRhbElPTWVtb3J5T24iLiAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLy9fSU5UXyAgIGlfQVBDSTE3MTBfU2V0RGlnaXRhbElPQ2hsT24gICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfT3V0cHV0Q2hhbm5lbCkKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZURpZ2l0YWxJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfV3JpdGVWYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyLCBiX091dHB1dENoYW5uZWw7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfT3V0cHV0Q2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBkaWdpdGFsIEkvTyBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfRElHSVRBTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiB0aGUgZGlnaXRhbCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19EaWdpdGFsSU9JbmZvLmJfRGlnaXRhbEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIG91dHB1dCBjaGFubmVsIG51bWJlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXN3aXRjaCAoYl9PdXRwdXRDaGFubmVsKSB7CisJCSAgICAvKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2hhbm5lbCBIICovCisJCSAgICAvKioqKioqKioqKioqKi8KKworCQkJCWNhc2UgMDoKKwkJCQkJYnJlYWs7CisKKwkJICAgIC8qKioqKioqKioqKioqLworCQkJCQkvKiBDaGFubmVsIEEgKi8KKwkJICAgIC8qKioqKioqKioqKioqLworCisJCQkJY2FzZSAxOgorCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJYl9DaGFubmVsQU1vZGUgIT0gMSkgeworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkgICAgLyoqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgQiAqLworCQkgICAgLyoqKioqKioqKioqKiovCisKKwkJCQljYXNlIDI6CisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQliX0NoYW5uZWxCTW9kZSAhPSAxKSB7CisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC03OworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKSB7CisKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgc2V0IGNoYW5uZWwgT04gICAgICAgICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpZiAoZGF0YVswXSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQliX091dHB1dE1lbW9yeUVuYWJsZWQgPT0KKwkJCQkJCQkxKSB7CisJCQkJCQkJZHdfV3JpdGVWYWx1ZSA9CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWR3X091dHB1dE1lbW9yeQorCQkJCQkJCQl8ICgxIDw8CisJCQkJCQkJCWJfT3V0cHV0Q2hhbm5lbCk7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJPSBkd19Xcml0ZVZhbHVlOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlkd19Xcml0ZVZhbHVlID0KKwkJCQkJCQkJMSA8PAorCQkJCQkJCQliX091dHB1dENoYW5uZWw7CisJCQkJCQl9CisJCQkJCX0JLy8gc2V0IGNoYW5uZWwgb2ZmCisJCQkJCWVsc2UgeworCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJYl9PdXRwdXRNZW1vcnlFbmFibGVkID09CisJCQkJCQkJMSkgeworCQkJCQkJCWR3X1dyaXRlVmFsdWUgPQorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJJiAoMHhGRkZGRkZGRlVMCisJCQkJCQkJCS0KKwkJCQkJCQkJKDEgPDwgYl9PdXRwdXRDaGFubmVsKSk7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJPSBkd19Xcml0ZVZhbHVlOworCQkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBEaWdpdGFsIE91dHB1dCBNZW1vcnkgT0ZGICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLy8gK1VzZSBwcmV2aW91c2x5IHRoZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXREaWdpdGFsSU9NZW1vcnlPbiIKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTg7CisJCQkJCQl9CisKKwkJCQkJfQorCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFdyaXRlIHRoZSB2YWx1ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJLy9PVVRQRFcgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPgorCQkJCQkvLyAgICBzX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS4KKwkJCQkJLy8gICBzX0JvYXJkSW5mb3MuCisJCQkJCS8vICAgdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpLAorCQkJCQkvLyAgIGR3X1dyaXRlVmFsdWUpOworCQkJCQlvdXRsKGR3X1dyaXRlVmFsdWUsCisJCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3xJTlQgaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LGNvbWVkaV9zdWJkZXZpY2UKKwkqcywJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IHdyaXRlOgorCQkJCQkgIFNldHMgb3IgcmVzZXRzIG9uZSBvciBzZXZlcmFsIG91dHB1dHMgZnJvbSBwb3J0LiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHNldHRpbmcgYW4gb3V0cHV0IGhpZ2guICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgc3dpdGNoZWQgT0ZGIHRoZSBkaWdpdGFsIG91dHB1dCBtZW1vcnkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoT0ZGKSwgYWxsIHRoZSBvdGhlciBvdXRwdXQgYXJlIHNldCB0byAiMCIuCisKK3wgICAgICAgICAgICAgICAgICAgICAgcmVhZDoKKwkJCQkJICBSZWFkIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0IHBvcnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgZGlnaXRhbCBJL08gbW9kdWxlIChiX01vZHVsTmJyKQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKwlCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgIEJZVEVfIGJfTW9kdWxOYnIgIENSX0FSRUYoYXJlZikgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgIEJZVEVfIGJfUG9ydFZhbHVlIENSX0NIQU4oY2hhbnNwZWMpIDogT3V0cHV0IFZhbHVlICggMCBUbyA3ICkKK3wgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgIHJlYWQgb3Igd3JpdGUgcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIGlmIHdyaXRlIHRoZW4gaW5kaWNhdGUgT04gb3IgT0ZGCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYWQgOiBkYXRhWzFdIHdpbGwgcmV0dXJuIHBvcnQgc3RhdHVzLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisKKyAgICAgICAgICAgICAgICBJTlBVVCA6CisKKwkJCQkJICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IERpZ2l0YWwgSS9PIG5vdCBpbml0aWFsaXNlZAorCisJCQkJT1VUUFVUOgkgIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogT3V0cHV0IHZhbHVlIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBkaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICIgaV9BUENJMTcxMF9Jbml0RGlnaXRhbElPIiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQKKwkJCQkJLTg6IERpZ2l0YWwgT3V0cHV0IE1lbW9yeSBPRkYuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHByZXZpb3VzbHkgdGhlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9TZXREaWdpdGFsSU9NZW1vcnlPbiIuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvL19JTlRfICAgaV9BUENJMTcxMF9TZXREaWdpdGFsSU9Qb3J0T24gICAoQllURV8gYl9Cb2FyZEhhbmRsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Qb3J0VmFsdWUpCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1dyaXRlVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfUG9ydFZhbHVlOworCUJZVEUgYl9Qb3J0T3BlcmF0aW9uLCBiX1BvcnRPbk9GRjsKKworCVBCWVRFIHBiX1BvcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9Qb3J0T3BlcmF0aW9uID0gKEJZVEUpIGRhdGFbMF07CS8vIElucHV0IG9yIG91dHB1dAorCWJfUG9ydE9uT0ZGID0gKEJZVEUpIGRhdGFbMV07CS8vIGlmIG91dHB1dCB0aGVuIE9uIG9yIE9mZgorCWJfUG9ydFZhbHVlID0gKEJZVEUpIGRhdGFbMl07CS8vIGlmIG91dCBwdXQgdGhlbiBWYWx1ZQorCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXBiX1BvcnRWYWx1ZSA9IChQQllURSkgJiBkYXRhWzBdOworLy8gaWYgaW5wdXQgdGhlbiByZWFkIHZhbHVlCisKKwlzd2l0Y2ggKGJfUG9ydE9wZXJhdGlvbikgeworCWNhc2UgQVBDSTE3MTBfSU5QVVQ6CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBkaWdpdGFsIEkvTyBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfRElHSVRBTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIGRpZ2l0YWwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19EaWdpdGFsSU9JbmZvLmJfRGlnaXRhbEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJLy9JTlBEVyAocHNfQVBDSTE3MTBWYXJpYWJsZS0+CisJCQkJCS8vICAgICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCS8vICAgICAgc19Cb2FyZEluZm9zLgorCQkJCQkvLyAgICAgIHVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSwKKwkJCQkJLy8gICAgICAmZHdfU3RhdHVzUmVnKTsKKworCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCSpwYl9Qb3J0VmFsdWUgPQorCQkJCQkJKEJZVEUpIChkd19TdGF0dXNSZWcgXiAweDFDKTsKKworCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfT1VUUFVUOgorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRoZSBkaWdpdGFsIEkvTyBtb2R1bGUgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgcG9ydCB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1BvcnRWYWx1ZSA8PSA3KSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgY2hhbm5lbCBBIHVzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChiX1BvcnRWYWx1ZSAmIDIpID09IDIpIHsKKwkJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJYl9DaGFubmVsQU1vZGUKKwkJCQkJCQkJIT0gMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTY7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoKGJfUG9ydFZhbHVlICYgMikgPT0gMikKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBjaGFubmVsIEIgdXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGJfUG9ydFZhbHVlICYgNCkgPT0gNCkgeworCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQliX0NoYW5uZWxCTW9kZQorCQkJCQkJCQkhPSAxKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmICgoYl9Qb3J0VmFsdWUgJiA0KSA9PSA0KQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKworCQkJCQkJCS8vaWYoZGF0YVsxXSkKKwkJCQkJCQkvL3sKKwkJCQkJCQlzd2l0Y2ggKGJfUG9ydE9uT0ZGKSB7CisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIHNldCBQb3J0IE9OICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJY2FzZSBBUENJMTcxMF9PTjoKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBvdXRwdXQgbWVtb3J5IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQliX091dHB1dE1lbW9yeUVuYWJsZWQKKwkJCQkJCQkJCT09IDEpIHsKKwkJCQkJCQkJCWR3X1dyaXRlVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJYl9Qb3J0VmFsdWU7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X1dyaXRlVmFsdWU7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlkd19Xcml0ZVZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfUG9ydFZhbHVlOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJCS8vIElmIFNldCBQT1JUICBPRkYKKwkJCQkJCQljYXNlIEFQQ0kxNzEwX09GRjoKKworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBvdXRwdXQgbWVtb3J5IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQliX091dHB1dE1lbW9yeUVuYWJsZWQKKwkJCQkJCQkJCT09IDEpIHsKKwkJCQkJCQkJCWR3X1dyaXRlVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQliX1BvcnRWYWx1ZSk7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X1dyaXRlVmFsdWU7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIERpZ2l0YWwgT3V0cHV0IE1lbW9yeSBPRkYgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS04OworCQkJCQkJCQl9CisJCQkJCQkJfQkvLyBzd2l0Y2gKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCS8vICBPVVRQRFcgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPgorCQkJCQkJCS8vICAgICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCQkJLy8gICAgICBzX0JvYXJkSW5mb3MuCisJCQkJCQkJLy8gICAgICB1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5iciksCisJCQkJCQkJLy8gICAgICBkd19Xcml0ZVZhbHVlKTsKKwkJCQkJCQlvdXRsKGR3X1dyaXRlVmFsdWUsCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIE91dHB1dCB2YWx1ZSB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpX1JldHVyblZhbHVlID0gLTk7CisJCURQUklOVEsoIk5PIElOUFVUL09VVFBVVCBzcGVjaWZpZWRcbiIpOworCX0JCQkvL3N3aXRjaCBJTlBVVCAvIE9VVFBVVAorCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0RpZ19pby5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWYxNTdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX09OCQkJMQkvKiBEaWdpdGFsICBPdXRwdXQgT04gb3IgT0ZGICovCisjZGVmaW5lIEFQQ0kxNzEwX09GRgkJCTAKKworI2RlZmluZSBBUENJMTcxMF9JTlBVVAkJCTAJLyogRGlnaXRhbCBJL08gKi8KKyNkZWZpbmUgQVBDSTE3MTBfT1VUUFVUCQkJMQorCisjZGVmaW5lIEFQQ0kxNzEwX0RJR0lPX01FTU9SWU9OT0ZGCTB4MTAKKyNkZWZpbmUgQVBDSTE3MTBfRElHSU9fSU5JVAkJMHgxMQorCisvKgorICogRElHSVRBTCBJL08gSU5JU0lBTElTQVRJT04gRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0RpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBJTlBVVCBPVVRQVVQgIEZVTkNUSU9OUworICovCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRGlnaXRhbElPQ2hsT25PZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzRGlnaXRhbElPUG9ydE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2MmYyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMKQEAgLTAsMCArMSw1MzYzIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE3MTAgICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IElOQ19DUFQuQyAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgaW5jcmVtZW50YWwgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMjkvMDYvMDEgfCBHdWlub3QgQy4gfCAtIDExMDAvMDIzMSAtPiAwNzAxLzAyMzIgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IFNlZSBpX0FQQ0kxNzEwX0Rpc2FibGVGcmVxdWVuY3lNZWFzdXJlbWVudCAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwX0lOQ0NQVC5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElOVAlpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKK3N0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyYXRpb24gZnVuY3Rpb24gZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogKmRhdGEKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfQ29uZmlnVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJdWlfQ29uZmlnVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJcHJpbnRrKCJcbklOQ19DUFQiKTsKKworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJc3dpdGNoICh1aV9Db25maWdUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVENPVU5URVI6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRDb3VudGVyKGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKEJZVEUpIGRhdGFbMF0sCisJCQkoQllURSkgZGF0YVsxXSwKKwkJCShCWVRFKSBkYXRhWzJdLCAoQllURSkgZGF0YVszXSwgKEJZVEUpIGRhdGFbNF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0NPVU5URVJBVVRPVEVTVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfQ291bnRlckF1dG9UZXN0KGRldiwKKwkJCShQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9JTklUSU5ERVg6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRJbmRleChkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLAorCQkJKEJZVEUpIGRhdGFbMV0sIChCWVRFKSBkYXRhWzJdLCAoQllURSkgZGF0YVszXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVFJFRkVSRU5DRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZShkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0lOSVRFWFRFUk5BTFNUUk9CRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdEV4dGVybmFsU3Ryb2JlKGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKEJZVEUpIGRhdGFbMF0sIChCWVRFKSBkYXRhWzFdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9JTklUQ09NUEFSRUxPR0lDOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljKGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoVUlOVCkgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVEZSRVFVRU5DWU1FQVNVUkVNRU5UOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Jbml0RnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwKKwkJCShCWVRFKSBkYXRhWzFdLCAoVUxPTkcpIGRhdGFbMl0sIChQVUxPTkcpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJJbnNuIENvbmZpZyA6IENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9Db3VudGVyUmFuZ2UsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX0ZpcnN0Q291bnRlck1vZHVzLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfRmlyc3RDb3VudGVyT3B0aW9uLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9TZWNvbmRDb3VudGVyTW9kdXMsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX1NlY29uZENvdW50ZXJPcHRpb24pICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgY291bnRlciBvcGVyYXRpbmcgbW9kZSBmcm9tIHNlbGVjdGVkICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlIHwKK3wgICAgICAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKK3wgfCBQYXJhbWV0ZXIgICAgICAgUGFzc2VkIHZhbHVlICAgICAgIHwgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX01vZHVsTmJyICAgQVBDSTE3MTBfMTZCSVRfQ09VTlRFUiB8ICBUaGUgbW9kdWxlIGlzIGNvbmZpZ3VyZWQgZm9yICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHR3byAxNi1iaXQgY291bnRlci4gICAgICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgLSBiX0ZpcnN0Q291bnRlck1vZHVzIGFuZCAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGJfRmlyc3RDb3VudGVyT3B0aW9uICAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgY29uZmlndXJlIHRoZSBmaXJzdCAxNiBiaXQgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAtIGJfU2Vjb25kQ291bnRlck1vZHVzIGFuZCAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgYl9TZWNvbmRDb3VudGVyT3B0aW9uICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBjb25maWd1cmUgdGhlIHNlY29uZCAxNiBiaXQgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGNvdW50ZXIuICAgICAgICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9Nb2R1bE5iciAgIEFQQ0kxNzEwXzMyQklUX0NPVU5URVIgfCAgVGhlIG1vZHVsZSBpcyBjb25maWd1cmVkIGZvciBvbmUgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMi1iaXQgY291bnRlci4gICAgICAgICAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIC0gYl9GaXJzdENvdW50ZXJNb2R1cyBhbmQgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBiX0ZpcnN0Q291bnRlck9wdGlvbiAgICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGNvbmZpZ3VyZSB0aGUgMzIgYml0IGNvdW50ZXIuICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIC0gYl9TZWNvbmRDb3VudGVyTW9kdXMgYW5kICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBiX1NlY29uZENvdW50ZXJPcHRpb24gICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGFyZSBub3QgdXNlZCBhbmQgaGF2ZSBubyAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgaW1wb3J0YW5jZS4gICAgICAgICAgICAgICAgICAgIHwgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciBvcGVyYXRpbmcgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorfCB8ICAgIFBhcmFtZXRlciAgICAgICB8ICAgICBQYXNzZWQgdmFsdWUgICAgICAgIHwgICAgRGVzY3JpcHRpb24gICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyTW9kdXMgfCBBUENJMTcxMF9RVUFEUlVQTEVfTU9ERSB8IEluIHRoZSBxdWFkcnVwbGUgbW9kZSwgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGVkZ2UgYW5hbHlzaXMgICAgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJNb2R1c3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBjaXJjdWl0IGdlbmVyYXRlcyBhICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvdW50aW5nIHB1bHNlIGZyb20gICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWFjaCBlZGdlIG9mIDIgc2lnbmFscyAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCBhcmUgcGhhc2Ugc2hpZnRlZCB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIHJlbGF0aW9uIHRvIGVhY2ggICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3RoZXIuICAgICAgICAgICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyTW9kdXMgfCAgIEFQQ0kxNzEwX0RPVUJMRV9NT0RFICB8IEZ1bmN0aW9ucyBpbiB0aGUgc2FtZSAgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2F5IGFzIHRoZSBxdWFkcnVwbGUgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJNb2R1c3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBtb2RlLCBleGNlcHQgdGhhdCBvbmx5ICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHR3byBvZiB0aGUgZm91ciBlZGdlcyAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJlIGFuYWx5c2VkIHBlciAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwZXJpb2QgICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9GaXJzdENvdW50ZXJNb2R1cyB8ICAgQVBDSTE3MTBfU0lNUExFX01PREUgIHwgRnVuY3Rpb25zIGluIHRoZSBzYW1lICAgfCB8Cit8IHwgICAgICAgb3IgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB3YXkgYXMgdGhlIHF1YWRydXBsZSAgICB8IHwKK3wgfGJfU2Vjb25kQ291bnRlck1vZHVzfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vZGUsIGV4Y2VwdCB0aGF0IG9ubHkgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb25lIG9mIHRoZSBmb3VyIGVkZ2VzICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpcyBhbmFseXNlZCBwZXIgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHBlcmlvZC4gICAgICAgICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX0ZpcnN0Q291bnRlck1vZHVzIHwgICBBUENJMTcxMF9ESVJFQ1RfTU9ERSAgfCBJbiB0aGUgZGlyZWN0IG1vZGUgdGhlICB8IHwKK3wgfCAgICAgICBvciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGJvdGggZWRnZSBhbmFseXNpcyAgICAgIHwgfAorfCB8Yl9TZWNvbmRDb3VudGVyTW9kdXN8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2lyY3VpdHMgYXJlIGluYWN0aXZlLiAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgaW5wdXRzIEEsIEIgaW4gdGhlICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDMyLWJpdCBtb2RlIG9yIEEsIEIgYW5kIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgQywgRCBpbiB0aGUgMTYtYml0IG1vZGUgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXByZXNlbnQsIGVhY2gsIG9uZSAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsb2NrIHB1bHNlIGdhdGUgY2lyY3VpdHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlcmUgYnkgZnJlcXVlbmN5IGFuZCAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdWxzZSBkdXJhdGlvbiAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1lYXN1cmVtZW50cyBjYW4gYmUgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGVyZm9ybWVkLiAgICAgICAgICAgICAgfCB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIElNUE9SVEFOVCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgSWYgeW91IGhhdmUgY29uZmlndXJlZCB0aGUgbW9kdWxlIGZvciB0d28gMTYtYml0IGNvdW50ZXIsIGEgbWl4ZWQgICAgfAorfCAgICAgICBtb2RlIHdpdGggYSBjb3VudGVyIGluIHF1YWRydXBsZS9kb3VibGUvc2luZ2xlIG1vZGUgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIGFuZCB0aGUgb3RoZXIgY291bnRlciBpbiBkaXJlY3QgbW9kZSBpcyBub3QgcG9zc2libGUhICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgQ291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGZvciBxdWFkcnVwbGUvZG91YmxlL3NpbXBsZSBtb2RlICAgICAgICAgIHwKK3wgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3wgfCAgICAgICBQYXJhbWV0ZXIgICAgICB8ICAgICBQYXNzZWQgdmFsdWUgICAgICAgIHwgIERlc2NyaXB0aW9uICAgICAgICAgICB8fAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXx8Cit8IHxiX0ZpcnN0Q291bnRlck9wdGlvbiAgfCBBUENJMTcxMF9IWVNURVJFU0lTX09OICB8IEluIGJvdGggZWRnZSBhbmFseXNpcyAgfHwKK3wgfCAgICAgICAgb3IgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2lyY3VpdHMgaXMgYXZhaWxhYmxlICB8fAorfCB8Yl9TZWNvbmRDb3VudGVyT3B0aW9uIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBvbmUgaHlzdGVyZXNpcyBjaXJjdWl0Lnx8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IEl0IHN1cHByZXNzZXMgZWFjaCAgICAgfHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGltZSB0aGUgZmlyc3QgY291bnRpbmd8fAorfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdWxzZSBhZnRlciBhIGNoYW5nZSAgIHx8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHJvdGF0aW9uLiAgICAgICAgICAgfHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18fAorfCB8Yl9GaXJzdENvdW50ZXJPcHRpb24gIHwgQVBDSTE3MTBfSFlTVEVSRVNJU19PRkYgfCBUaGUgZmlyc3QgY291bnRpbmcgICAgIHx8Cit8IHwgICAgICAgb3IgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1bHNlIGlzIG5vdCBzdXBwcmVzcyAgfHwKK3wgfGJfU2Vjb25kQ291bnRlck9wdGlvbiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWZ0ZXIgYSBjaGFuZ2Ugb2YgICAgICB8fAorfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCByb3RhdGlvbi4gICAgICAgICAgICAgIHx8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIElNUE9SVEFOVCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgVGhpcyBvcHRpb24gYXJlIG9ubHkgYXZhaWJsZSBpZiB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgZGlyZWN0IG1vZGUuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICBDb3VudGVyIG9wZXJhdGluZyBvcHRpb24gZm9yIGRpcmVjdCBtb2RlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorfCB8ICAgICAgUGFyYW1ldGVyICAgICAgIHwgICAgIFBhc3NlZCB2YWx1ZSAgIHwgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyT3B0aW9uICB8IEFQQ0kxNzEwX0lOQ1JFTUVOVCB8IFRoZSBjb3VudGVyIGluY3JlbWVudCBmb3IgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgZWFjaCBjb3VudGluZyBwdWxzZSAgICAgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJPcHRpb24gfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9GaXJzdENvdW50ZXJPcHRpb24gIHwgQVBDSTE3MTBfREVDUkVNRU5UIHwgVGhlIGNvdW50ZXIgZGVjcmVtZW50IGZvciAgfCB8Cit8IHwgICAgICAgb3IgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBlYWNoIGNvdW50aW5nIHB1bHNlICAgICAgICB8IHwKK3wgfGJfU2Vjb25kQ291bnRlck9wdGlvbiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ291bnRlclJhbmdlICAgICAgICA6IFNlbGVjdGlvbiBmb3JtIGNvdW50ZXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ZpcnN0Q291bnRlck1vZHVzICAgOiBGaXJzdCBjb3VudGVyIG9wZXJhdGluZyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9GaXJzdENvdW50ZXJPcHRpb24gIDogRmlyc3QgY291bnRlciAgb3B0aW9uLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1NlY29uZENvdW50ZXJNb2R1cyAgOiBTZWNvbmQgY291bnRlciBvcGVyYXRpbmcgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWNvbmRDb3VudGVyT3B0aW9uIDogU2Vjb25kIGNvdW50ZXIgIG9wdGlvbi4gIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgc2VsZWN0ZWQgY291bnRlciByYW5nZSBpcyB3cm9uZy4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBtb2RlIGlzIHdyb25nLiB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBpcyB3cm9uZ3wKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaGUgc2VsZWN0ZWQgc2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmcufAorfCAgICAgICAgICAgICAgICAgICAgLTc6IFRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGlzICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgd3JvbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdENvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCUJZVEUgYl9Db3VudGVyUmFuZ2UsCisJQllURSBiX0ZpcnN0Q291bnRlck1vZHVzLAorCUJZVEUgYl9GaXJzdENvdW50ZXJPcHRpb24sCisJQllURSBiX1NlY29uZENvdW50ZXJNb2R1cywgQllURSBiX1NlY29uZENvdW50ZXJPcHRpb24pCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBpbmNyZW1lbnRhbCBjb3VudGVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjb3VudGVyIHJhbmdlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX0NvdW50ZXJSYW5nZSA9PSBBUENJMTcxMF8xNkJJVF9DT1VOVEVSCisJCQl8fCBiX0NvdW50ZXJSYW5nZSA9PSBBUENJMTcxMF8zMkJJVF9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgZmlyc3QgY291bnRlciBtb2R1cyAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfUVVBRFJVUExFX01PREUgfHwKKwkJCQliX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RPVUJMRV9NT0RFIHx8CisJCQkJYl9GaXJzdENvdW50ZXJNb2R1cyA9PSBBUENJMTcxMF9TSU1QTEVfTU9ERSB8fAorCQkJCWJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfRElSRUNUX01PREUpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgZmlyc3QgY291bnRlciBvcHRpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfRElSRUNUX01PREUKKwkJCQkJCSYmIChiX0ZpcnN0Q291bnRlck9wdGlvbiA9PQorCQkJCQkJCUFQQ0kxNzEwX0lOQ1JFTUVOVAorCQkJCQkJCXx8IGJfRmlyc3RDb3VudGVyT3B0aW9uCisJCQkJCQkJPT0gQVBDSTE3MTBfREVDUkVNRU5UKSkKKwkJCQkJfHwgKGJfRmlyc3RDb3VudGVyTW9kdXMgIT0KKwkJCQkJCUFQQ0kxNzEwX0RJUkVDVF9NT0RFCisJCQkJCQkmJiAoYl9GaXJzdENvdW50ZXJPcHRpb24gPT0KKwkJCQkJCQlBUENJMTcxMF9IWVNURVJFU0lTX09OCisJCQkJCQkJfHwgYl9GaXJzdENvdW50ZXJPcHRpb24KKwkJCQkJCQk9PQorCQkJCQkJCUFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGKSkpCisJCQkJeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfQ291bnRlclJhbmdlID09CisJCQkJCQlBUENJMTcxMF8xNkJJVF9DT1VOVEVSKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgc2Vjb25kIGNvdW50ZXIgbW9kdXMgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoYl9GaXJzdENvdW50ZXJNb2R1cyAhPQorCQkJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERQorCQkJCQkJCQkmJgorCQkJCQkJCQkoYl9TZWNvbmRDb3VudGVyTW9kdXMKKwkJCQkJCQkJCT09CisJCQkJCQkJCQlBUENJMTcxMF9RVUFEUlVQTEVfTU9ERQorCQkJCQkJCQkJfHwKKwkJCQkJCQkJCWJfU2Vjb25kQ291bnRlck1vZHVzCisJCQkJCQkJCQk9PQorCQkJCQkJCQkJQVBDSTE3MTBfRE9VQkxFX01PREUKKwkJCQkJCQkJCXx8CisJCQkJCQkJCQliX1NlY29uZENvdW50ZXJNb2R1cworCQkJCQkJCQkJPT0KKwkJCQkJCQkJCUFQQ0kxNzEwX1NJTVBMRV9NT0RFKSkKKwkJCQkJCQl8fCAoYl9GaXJzdENvdW50ZXJNb2R1cworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERQorCQkJCQkJCQkmJgorCQkJCQkJCQliX1NlY29uZENvdW50ZXJNb2R1cworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERSkpCisJCQkJCQl7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIHNlY29uZCBjb3VudGVyIG9wdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoYl9TZWNvbmRDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfRElSRUNUX01PREUgJiYgKGJfU2Vjb25kQ291bnRlck9wdGlvbiA9PSBBUENJMTcxMF9JTkNSRU1FTlQgfHwgYl9TZWNvbmRDb3VudGVyT3B0aW9uID09IEFQQ0kxNzEwX0RFQ1JFTUVOVCkpIHx8IChiX1NlY29uZENvdW50ZXJNb2R1cyAhPSBBUENJMTcxMF9ESVJFQ1RfTU9ERSAmJiAoYl9TZWNvbmRDb3VudGVyT3B0aW9uID09IEFQQ0kxNzEwX0hZU1RFUkVTSVNfT04gfHwgYl9TZWNvbmRDb3VudGVyT3B0aW9uID09IEFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGKSkpIHsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQkwOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIHNlY29uZCBjb3VudGVyIG9wZXJhdGluZyBvcHRpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS03OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgbW9kZSBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgbW9kZSBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBvcHRpb24gaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIHNlbGVjdGVkIGNvdW50ZXIgcmFuZ2UgaXMgd3JvbmcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgY291bnRlciByYW5nZSBpcyB3cm9uZ1xuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGEgZXJyb3Igb2NjdXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoaV9SZXR1cm5WYWx1ZSA9PSAwKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiAxNi1CaXQgY291bnRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfQ291bnRlclJhbmdlID09IEFQQ0kxNzEwXzMyQklUX0NPVU5URVIpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIxID0gYl9Db3VudGVyUmFuZ2UgfAorCQkJCQliX0ZpcnN0Q291bnRlck1vZHVzIHwKKwkJCQkJYl9GaXJzdENvdW50ZXJPcHRpb247CisJCQl9IGVsc2UgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjEgPSBiX0NvdW50ZXJSYW5nZSB8CisJCQkJCShiX0ZpcnN0Q291bnRlck1vZHVzICYgMHg1KSB8CisJCQkJCShiX0ZpcnN0Q291bnRlck9wdGlvbiAmIDB4MjApIHwKKwkJCQkJKGJfU2Vjb25kQ291bnRlck1vZHVzICYgMHhBKSB8CisJCQkJCShiX1NlY29uZENvdW50ZXJPcHRpb24gJiAweDQwKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgZGlyZWN0IG1vZGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChiX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RJUkVDVF9NT0RFKSB7CisJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMSA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMSB8CisJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERTsKKwkJCQl9CisJCQl9CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfQ291bnRlckluaXQgPSAxOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZVxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Db3VudGVyQXV0b1Rlc3QgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1Rlc3RTdGF0dXMpICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBBIHRlc3QgbW9kZSBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyB0aGUgY29tcG9uZW50IGFuZCAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0ZWQgcGVyaXBoZXJ5LiBBbGwgdGhlIDgtYml0IGNvdW50ZXIgY2hhaW5zICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYXJlIG9wZXJhdGVkIGludGVybmFsbHkgYXMgZG93biBjb3VudGVycy4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJbmRlcGVuZGVudGx5IGZyb20gdGhlIGV4dGVybmFsIHNpZ25hbHMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgZm91ciA4LWJpdCBjb3VudGVyIGNoYWlucyBhcmUgZGVjcmVtZW50ZWQgaW4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWwgYnkgZWFjaCBuZWdhdGl2ZSBjbG9jayBwdWxzZSBlZGdlIG9mIENMS1guICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciBhdXRvIHRlc3QgY29uY2x1c2lvbiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCBwYl9UZXN0U3RhdHVzICAgfCAgICBFcnJvciBkZXNjcmlwdGlvbiAgICAgICAgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8ICAgICBtYXNrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCAgICAwMDAwICAgICAgICAgfCAgICAgTm8gZXJyb3IgZGV0ZWN0ZWQgICAgICAgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgICAgMDAwMSAgICAgICAgIHwgRXJyb3IgZGV0ZWN0ZWQgb2YgY291bnRlciAwIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8ICAgIDAwMTAgICAgICAgICB8IEVycm9yIGRldGVjdGVkIG9mIGNvdW50ZXIgMSB8ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCAgICAwMTAwICAgICAgICAgfCBFcnJvciBkZXRlY3RlZCBvZiBjb3VudGVyIDIgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgICAgMTAwMCAgICAgICAgIHwgRXJyb3IgZGV0ZWN0ZWQgb2YgY291bnRlciAzIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfCAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1Rlc3RTdGF0dXMgIDogQXV0byB0ZXN0IGNvbmNsdXNpb24uIFNlZSB0YWJsZXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Db3VudGVyQXV0b1Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIFBCWVRFIHBiX1Rlc3RTdGF0dXMpCit7CisJQllURSBiX01vZHVsQ3B0ID0gMDsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfTGF0aGNoVmFsdWU7CisKKwkqcGJfVGVzdFN0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBjb3VudGVyIG1vZHVsZSBmb3VuZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMF0gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIKKwkJfHwgKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzFdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSCisJCXx8IChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblsyXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgorCQl8fCAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bM10gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkJZm9yIChiX01vZHVsQ3B0ID0gMDsgYl9Nb2R1bENwdCA8IDQ7IGJfTW9kdWxDcHQrKykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmNyZW1lbnRhbCBjb3VudGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsQ3B0XSAmCisJCQkJCTB4RkZGRjAwMDBVTCkgPT0KKwkJCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJCSAvKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFN0YXJ0IHRoZSB0ZXN0ICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgzLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxNiArICg2NCAqIGJfTW9kdWxDcHQpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUYXRjaCB0aGUgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bENwdCkpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgdGhlIGxhdGNoIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfTGF0aGNoVmFsdWUgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxDcHQpKTsKKworCQkJCWlmICgoZHdfTGF0aGNoVmFsdWUgJiAweEZGKSAhPQorCQkJCQkoKGR3X0xhdGhjaFZhbHVlID4+IDgpICYgMHhGRikKKwkJCQkJJiYgKGR3X0xhdGhjaFZhbHVlICYgMHhGRikgIT0KKwkJCQkJKChkd19MYXRoY2hWYWx1ZSA+PiAxNikgJiAweEZGKQorCQkJCQkmJiAoZHdfTGF0aGNoVmFsdWUgJiAweEZGKSAhPQorCQkJCQkoKGR3X0xhdGhjaFZhbHVlID4+IDI0KSAmIDB4RkYpKSB7CisJCQkJCSpwYl9UZXN0U3RhdHVzID0KKwkJCQkJCSpwYl9UZXN0U3RhdHVzIHwgKDEgPDwKKwkJCQkJCWJfTW9kdWxDcHQpOworCQkJCX0KKworCQkgLyoqKioqKioqKioqKioqKioqLworCQkJCS8qIFN0b3AgdGhlIHRlc3QgKi8KKwkJIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsQ3B0KSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJObyBjb3VudGVyIG1vZHVsZSBmb3VuZFxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0SW5kZXggKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1JlZmVyZW5jZUFjdGlvbiwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5kZXhPcGVyYXRpb24sICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9BdXRvTW9kZSwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSkgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbml0aWFsaXNlIHRoZSBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWxlY3RlZCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIElmIGEgSU5ERVggZmxhZyBvY2N1ciwgeW91IGhhdmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHBvc3NpYmlsaXR5IHRvIGNsZWFyIHRoZSAzMi1CaXQgY291bnRlciBvciB0byBsYXRjaHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCAzMi1CaXQgdmFsdWUgaW4gdG8gdGhlIGZpcnN0IGxhdGNoICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLiBUaGUgYl9JbmRleE9wZXJhdGlvbiBwYXJhbWV0ZXIgZ2l2ZSB0aGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcG9zc2liaWxpdHkgdG8gY2hvaWNlIHRoZSBJTkRFWCBhY3Rpb24uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBhdXRvbWF0aWMgbW9kZSwgZWFjaCBJTkRFWCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIGVsc2UgeW91IG11c3QgcmVhZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGluZGV4IHN0YXR1cyAoImlfQVBDSTE3MTBfUmVhZEluZGV4U3RhdHVzIikgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhZnRlciBlYWNoIElOREVYIGFjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAorfCAgICAgICAgICAgfCAgIGJfSW5kZXhPcGVyYXRpb24gICAgIHwgICAgICAgICBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8ICB8Cit8ICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIHwKK3wgICAgICAgICAgIHxBUENJMTcxMF9MQVRDSF9DT1VOVEVSICB8IEFmdGVyIGEgaW5kZXggc2lnbmFsLCB0aGUgY291bnRlciAgfCAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgdmFsdWUgKDMyLUJpdCkgaXMgbGF0Y2hlZCBpbiB0byAgICB8ICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgIHwgIHwKK3wgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgfAorfCAgICAgICAgICAgfEFQQ0kxNzEwX0NMRUFSX0NPVU5URVIgIHwgQWZ0ZXIgYSBpbmRleCBzaWduYWwsIHRoZSBjb3VudGVyICB8ICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCB2YWx1ZSBpcyBjbGVhcmVkICgzMi1CaXQpICAgICAgICAgIHwgIHwKK3wgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9SZWZlcmVuY2VBY3Rpb24gOiBEZXRlcm1pbmUgaWYgdGhlIHJlZmVyZW5jZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc2V0IG9yIG5vIGZvciB0aGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0YW5jZSBmcm9tIGluZGV4ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEUgOiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBtdXN0IGJlIHNldCBmb3IgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgdGhlIGluZGV4ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBoYXZlIG5vdCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0YW5jZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbmRleE9wZXJhdGlvbiAgOiBJbmRleCBvcGVyYXRpbmcgbW9kZS4gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQXV0b01vZGUgICAgICAgIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWMgaW5kZXggcmVzZXQuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRSA6ICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGF1dG9tYXRpYyBtb2RlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgYXV0b21hdGljIG1vZGUgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRSA6ICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBpbnRlcnJ1cHQgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIGludGVycnVwdCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNCAgVGhlIHJlZmVyZW5jZSBhY3Rpb24gcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgaW5kZXggb3BlcmF0aW5nIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBhdXRvIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC04OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdEluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfUmVmZXJlbmNlQWN0aW9uLAorCUJZVEUgYl9JbmRleE9wZXJhdGlvbiwgQllURSBiX0F1dG9Nb2RlLCBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgcmVmZXJlbmNlIHBhcmFtZXRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUmVmZXJlbmNlQWN0aW9uID09IEFQQ0kxNzEwX0VOQUJMRSB8fAorCQkJCWJfUmVmZXJlbmNlQWN0aW9uID09IEFQQ0kxNzEwX0RJU0FCTEUpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGluZGV4IHBhcmFtZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQ09VTlRFUgorCQkJCQl8fCBiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9ISUdIX0VER0VfQ0xFQVJfQ09VTlRFUgorCQkJCQl8fCBiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0NMRUFSX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUikKKwkJCQl7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGF1dG8gbW9kZSBwYXJhbWV0ZXIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9BdXRvTW9kZSA9PSBBUENJMTcxMF9FTkFCTEUgfHwKKwkJCQkJCWJfQXV0b01vZGUgPT0gQVBDSTE3MTBfRElTQUJMRSkKKwkJCQkJeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0KKwkJCQkJCQlBUENJMTcxMF9FTkFCTEUKKwkJCQkJCQl8fCBiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEUpIHsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIE1ha3RlIHRoZSBjb25maWd1cmF0aW9uIGNvbW1hbmRvICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9SZWZlcmVuY2VBY3Rpb24gPT0KKwkJCQkJCQkJQVBDSTE3MTBfRU5BQkxFKQorCQkJCQkJCXsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfSU5ERVhfQUNUSU9OOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV9JTkRFWF9BQ1RJT047CisJCQkJCQkJfQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgbG93IGxldmVsIGxhdGNoIG9yL2FuZCBjbGVhciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIKKwkJCQkJCQkJfHwKKwkJCQkJCQkJYl9JbmRleE9wZXJhdGlvbgorCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9MT1dfRURHRV9DTEVBUl9DT1VOVEVSCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfSW5kZXhPcGVyYXRpb24KKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIpCisJCQkJCQkJeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGluZGV4IGxldmVsIHRvIGxvdyAoRFEyNikgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX1NFVF9MT1dfSU5ERVhfTEVWRUw7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgaW5kZXggbGV2ZWwgdG8gaGlnaCAoRFEyNikgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkmCisJCQkJCQkJCQlBUENJMTcxMF9TRVRfSElHSF9JTkRFWF9MRVZFTDsKKwkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgbGF0Y2ggYW5kIGNsZWFyIGNvdW50ZXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfSW5kZXhPcGVyYXRpb24gPT0KKwkJCQkJCQkJQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfSW5kZXhPcGVyYXRpb24KKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIpCisJCQkJCQkJeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgbGF0Y2ggYW5kIGNsZWFyIGZsYWcgKERRMjcpICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRV9MQVRDSF9BTkRfQ0xFQVI7CisJCQkJCQkJfQkvLyBpZiAoYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIgfHwgYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUikKKwkJCQkJCQllbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENsZWFyIHRoZSBsYXRjaCBhbmQgY2xlYXIgZmxhZyAoRFEyNykgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkmCisJCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFX0xBVENIX0FORF9DTEVBUjsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIGxhdGNoIGNvdW50ZXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQ09VTlRFUiB8fCBiX0luZGV4T3BlcmF0aW9uID09IEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRW5hYmxlIHRoZSBsYXRjaCBmcm9tIGNvdW50ZXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQlBUENJMTcxMF9JTkRFWF9MQVRDSF9DT1VOVEVSOworCQkJCQkJCQl9IGVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBFbmFibGUgdGhlIGNsZWFyIGZyb20gY291bnRlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCSh+QVBDSTE3MTBfSU5ERVhfTEFUQ0hfQ09VTlRFUik7CisJCQkJCQkJCX0KKwkJCQkJCQl9CS8vIC8vIGlmIChiX0luZGV4T3BlcmF0aW9uID09IEFQQ0kxNzEwX0hJR0hfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUiB8fCBiX0luZGV4T3BlcmF0aW9uID09IEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSKQorCisJCQkJCQkJaWYgKGJfQXV0b01vZGUgPT0KKwkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRSkKKwkJCQkJCQl7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJfAorCQkJCQkJCQkJQVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKH5BUENJMTcxMF9JTkRFWF9BVVRPX01PREUpOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCQlBUENJMTcxMF9FTkFCTEUpCisJCQkJCQkJeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMworCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRV9JTkRFWF9JTlQ7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzCisJCQkJCQkJCQkmCisJCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFX0lOREVYX0lOVDsKKwkJCQkJCQl9CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCXNfSW5pdEZsYWcuCisJCQkJCQkJCWJfSW5kZXhJbml0ID0gMTsKKworCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCURQUklOVEsoIkludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgYXV0byBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIGF1dG8gbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIGluZGV4IG9wZXJhdGluZyBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBpbmRleCBvcGVyYXRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSByZWZlcmVuY2UgYWN0aW9uIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUaGUgcmVmZXJlbmNlIGFjdGlvbiBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0UmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUmVmZXJlbmNlTGV2ZWwpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEluaXRpYWxpc2UgdGhlIHJlZmVyZW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWxlY3RlZCB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICB8IGJfUmVmZXJlbmNlTGV2ZWwgICB8ICAgICAgICAgT3BlcmF0aW9uICAgICAgIHwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgfCAgIEFQQ0kxNzEwX0xPVyAgICAgfCAgUmVmZXJlbmNlIG9jY3VyIGlmICIwIiB8ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgIHwgICBBUENJMTcxMF9ISUdIICAgIHwgIFJlZmVyZW5jZSBvY2N1ciBpZiAiMSIgfCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9SZWZlcmVuY2VMZXZlbCAgOiBSZWZlcmVuY2UgbGV2ZWwuICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9SZWZlcmVuY2VMZXZlbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1JlZmVyZW5jZUxldmVsID09IDAgfHwgYl9SZWZlcmVuY2VMZXZlbCA9PSAxKSB7CisJCQkJaWYgKGJfUmVmZXJlbmNlTGV2ZWwgPT0gMSkgeworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjIgPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjIgfAorCQkJCQkJQVBDSTE3MTBfUkVGRVJFTkNFX0hJR0g7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyICYKKwkJCQkJCUFQQ0kxNzEwX1JFRkVSRU5DRV9MT1c7CisJCQkJfQorCisJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAyMCArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX0luaXRGbGFnLmJfUmVmZXJlbmNlSW5pdCA9IDE7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8JaV9BUENJMTcxMF9Jbml0RXh0ZXJuYWxTdHJvYmUgICAgICAgICAgICAgICAgfAorfAkJCQkJKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9FeHRlcm5hbFN0cm9iZSwgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCkgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEluaXRpYWxpc2VzIHRoZSBleHRlcm5hbCBzdHJvYmUgbGV2ZWwgY29ycmVzcG9uZGluZyB0byB8Cit8CQkgICAgICB0aGUgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICBCWVRFXyBiX0V4dGVybmFsU3Ryb2JlICA6IEV4dGVybmFsIHN0cm9iZSBzZWxlY3Rpb24gICAgfAorfAkJCQkJCTAgOiBFeHRlcm5hbCBzdHJvYmUgQSAgICAgICAgfAorfAkJCQkJCTEgOiBFeHRlcm5hbCBzdHJvYmUgQiAgICAgICAgfAorfAkJICAgICAgQllURV8gYl9FeHRlcm5hbFN0cm9iZUxldmVsIDogRXh0ZXJuYWwgc3Ryb2JlIGxldmVsICAgIHwKK3wJCQkJCQlBUENJMTcxMF9MT1cgOiAgICAgICAgICAgICAgIHwKK3wJCQkJCQlFeHRlcm5hbCBsYXRjaCBvY2N1cnMgaWYgIjAiIHwKK3wJCQkJCQlBUENJMTcxMF9ISUdIIDogICAgICAgICAgICAgIHwKK3wJCQkJCQlFeHRlcm5hbCBsYXRjaCBvY2N1cnMgaWYgIjEiIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBFeHRlcm5hbCBzdHJvYmUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IEV4dGVybmFsIHN0cm9iZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdEV4dGVybmFsU3Ryb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0V4dGVybmFsU3Ryb2JlLCBCWVRFIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGV4dGVybmFsIHN0cm9iZSBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0V4dGVybmFsU3Ryb2JlID09IDAgfHwgYl9FeHRlcm5hbFN0cm9iZSA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGxldmVsICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX0V4dGVybmFsU3Ryb2JlTGV2ZWwgPT0gQVBDSTE3MTBfSElHSCkgfHwKKwkJCQkJKChiX0V4dGVybmFsU3Ryb2JlTGV2ZWwgPT0gQVBDSTE3MTBfTE9XCisJCQkJCQkJJiYgKGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQkJCVtiX01vZHVsTmJyXSAmCisJCQkJCQkJCTB4RkZGRikgPj0KKwkJCQkJCQkweDMxMzUpKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIGxldmVsICovCisJCSAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0ID0gKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyNCAmICgweEZGIC0KKwkJCQkJCQkoMHgxMCA8PCBiX0V4dGVybmFsU3Ryb2JlKSkpIHwgKChiX0V4dGVybmFsU3Ryb2JlTGV2ZWwgXiAxKSA8PCAoNCArIGJfRXh0ZXJuYWxTdHJvYmUpKTsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFeHRlcm5hbCBzdHJvYmUgbGV2ZWwgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiRXh0ZXJuYWwgc3Ryb2JlIGxldmVsIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9CS8vIGlmIChiX0V4dGVybmFsU3Ryb2JlID09IDAgfHwgYl9FeHRlcm5hbFN0cm9iZSA9PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRXh0ZXJuYWwgc3Ryb2JlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiRXh0ZXJuYWwgc3Ryb2JlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9FeHRlcm5hbFN0cm9iZSA9PSAwIHx8IGJfRXh0ZXJuYWxTdHJvYmUgPT0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyAgdWlfQ29tcGFyZVZhbHVlKSAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogU2V0IHRoZSAzMi1CaXQgY29tcGFyZSB2YWx1ZS4gQXQgdGhhdCBtb21lbnQgdGhhdCB0aGUgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWwgY291bnRlciBhcnJpdmUgdG8gdGhlIGNvbXBhcmUgdmFsdWUgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgKHVpX0NvbXBhcmVWYWx1ZSkgYSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVF8gdWlfQ29tcGFyZVZhbHVlICAgOiAzMi1CaXQgY29tcGFyZSB2YWx1ZSAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogLQorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqLworCitJTlQgaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgVUlOVCB1aV9Db21wYXJlVmFsdWUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKworCQkJb3V0bCh1aV9Db21wYXJlVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjggKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfQ29tcGFyZUxvZ2ljSW5pdCA9IDE7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50ICAgICAgICAgICAgICB8Cit8CQkJCShCWVRFXwkJIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXwkJIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXwkJIGJfUENJSW5wdXRDbG9jaywgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXwkJIGJfVGltaW5nVW5pdHksICAgICAgICAgICAgICB8Cit8CQkJCSBVTE9OR18gCXVsX1RpbWluZ0ludGVydmFsLCAgICAgICAgICAgfAorfAkJCQkgUFVMT05HXyAgICAgICBwdWxfUmVhbFRpbWluZ0ludGVydmFsKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIHRoZSB0aW1lIGZvciB0aGUgZnJlcXVlbmN5IG1lYXN1cmVtZW50LiAgICAgICAgICAgfAorfAkJICAgICAgQ29uZmlndXJlcyB0aGUgc2VsZWN0ZWQgVE9SIGluY3JlbWVudGFsIGNvdW50ZXIgb2YgdGhlIHwKK3wJCSAgICAgIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuIFRoZSB1bF9UaW1pbmdJbnRlcnZhbCBhbmR8Cit8CQkgICAgICB1bF9UaW1pbmdVbml0eSBkZXRlcm1pbmUgdGhlIHRpbWUgYmFzZSBmb3IgdGhlICAgICAgICAgfAorfAkJICAgICAgbWVhc3VyZW1lbnQuIFRoZSBwdWxfUmVhbFRpbWluZ0ludGVydmFsIHJldHVybnMgdGhlICAgIHwKK3wJCSAgICAgIHJlYWwgdGltZSB2YWx1ZS4gWW91IG11c3QgY2FsbCB1cCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSB8Cit8CQkgICAgICB5b3UgY2FsbCB1cCBhbnkgb3RoZXIgZnVuY3Rpb24gd2hpY2ggZ2l2ZXMgYWNjZXNzIHRvICAgfAorfAkJICAgICAgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9Nb2R1bE5icgkgICAgICA6CU51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorfAkJCQkJCWNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorfAkJICAgICAgQllURV8gIGJfUENJSW5wdXRDbG9jayAgOglTZWxlY3Rpb24gb2YgdGhlIFBDSSBidXMgICAgIHwKK3wJCQkJCQljbG9jayAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQktIEFQQ0kxNzEwXzMwTUhaIDogICAgICAgICAgIHwKK3wJCQkJCQkgIFRoZSBQQyBoYXMgYSBQQ0kgYnVzIGNsb2NrIHwKK3wJCQkJCQkgIG9mIDMwIE1IeiAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQktIEFQQ0kxNzEwXzMzTUhaIDogICAgICAgICAgIHwKK3wJCQkJCQkgIFRoZSBQQyBoYXMgYSBQQ0kgYnVzIGNsb2NrIHwKK3wJCQkJCQkgIG9mIDMzIE1IeiAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX1RpbWluZ1VuaXR5ICAgIDogQmFzZSB0aW1lIHVuaXQgKDAgdG8gMikgICAgICB8Cit8CQkJCQkJICAwIDogbnMgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJICAxIDogw6ZzICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMiA6IG1zICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgVUxPTkdfIHVsX1RpbWluZ0ludGVydmFsOiBCYXNlIHRpbWUgdmFsdWUuICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCA6IFJlYWwgYmFzZSB0aW1lIHZhbHVlLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfAkJCSAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWluZyB1bml0eSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgLTc6IDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfUENJSW5wdXRDbG9jaywKKwlCWVRFIGJfVGltaW5nVW5pdHksCisJVUxPTkcgdWxfVGltaW5nSW50ZXJ2YWwsIFBVTE9ORyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9UaW1lclZhbHVlID0gMDsKKwlkb3VibGUgZF9SZWFsVGltaW5nSW50ZXJ2YWw7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUENJIGJ1cyBjbG9jayAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8CisJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSB0aW1pbmcgdW5pdCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChiX1RpbWluZ1VuaXR5IDw9IDIpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBiYXNlIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAwKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkyNjYpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTg3MzgxMzNVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk4NzM4VUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMikKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJOFVMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDApCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTI0MikKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJNzk0Mzc1N1VMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTc5NDNVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAyKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk3VUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMCkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMjAwKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk2NTUzNTAwVUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJNjU1M1VMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDIpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTZVTCkpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgNDBNSHogdXNlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQlBUENJMTcxMF80ME1IWikgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgZmlybXdhcmUgPj0gUmV2MS41ICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTM1KSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogcXVhcnR6IG9uIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJLypJTlBEVyAocHNfQVBDSTE3MTBWYXJpYWJsZS0+CisJCQkJCQkJCSAgIHNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLgorCQkJCQkJCQkgICBzX0JvYXJkSW5mb3MuCisJCQkJCQkJCSAgIHVpX0FkZHJlc3MgKyAzNiArICg2NCAqIGJfTW9kdWxOYnIpLCAmZHdfU3RhdHVzKTsgKi8KKwkJCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQkJCWlubAorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyAzNiArCisJCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgcXVhcnR6IGZsYWcgKERRMCkgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpICE9IDEpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiA0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCI0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkXG4iKTsKKwkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJLTc7CisJCQkJCQkJCX0KKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQlEUFJJTlRLKCI0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopCisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIG5vdCBlcnJvciBvY2N1ciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPT0gMCkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBJTkNfQ1BUIHZlcnNpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTMxKSB7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiA0ME1IeiB1c2VkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBFbmFibGUgdGhlIDQwTUh6IHF1YXJ6IChEUTMwKSAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRV80ME1IWl9GUkVRVUVOQ1k7CisJCQkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJZWxzZSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSA0ME1IeiBxdWFyeiAoRFEzMCkgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV80ME1IWl9GUkVRVUVOQ1k7CisKKwkJCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBkaXZpc2lvbiBmYXRvciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZnB1X2JlZ2luKCk7CisJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0eSkgeworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBucyAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSAwOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMDAwMjUgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgwLjAwMDI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIMOmcyAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSAxOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMjUgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCTAuMjUKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCisJCQkJCQkJCWZwdV9lbmQoKTsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFdyaXRlIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKHVsX1RpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgaW5pdGlhbGlzYXRpb24gZmxhZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX0luaXRGbGFnLgorCQkJCQkJCQkJYl9GcmVxdWVuY3lNZWFzdXJlbWVudEluaXQKKwkJCQkJCQkJCT0gMTsKKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktMzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChpX1JldHVyblZhbHVlID09IDApCisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisJCQkJCQkJLy9JTlNOIEJJVFMKKy8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOklOVAlpX0FQQ0kxNzEwX0luc25CaXRzSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgJiBDbGVhciBGdW5jdGlvbnMgZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0JpdHNUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwl1aV9CaXRzVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisKKwlzd2l0Y2ggKHVpX0JpdHNUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NsZWFyQ291bnRlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJBTExDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NsZWFyQWxsQ291bnRlclZhbHVlKGRldik7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfU0VUSU5QVVRGSUxURVI6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldElucHV0RmlsdGVyKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLCAoQllURSkgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfTEFUQ0hDT1VOVEVSOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9MYXRjaENvdW50ZXIoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoQllURSkgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfU0VUSU5ERVhBTkRSRUZFUkVOQ0VTT1VSQ0U6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldEluZGV4QW5kUmVmZXJlbmNlU291cmNlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1NFVERJR0lUQUxDSExPTjoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9uKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfU0VURElHSVRBTENITE9GRjoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9mZihkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiQml0cyBDb25maWcgUGFyYW1ldGVyIFdyb25nXG4iKTsKKwl9CisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKQorCQlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9DbGVhckNvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDbGVhciB0aGUgY291bnRlciB2YWx1ZSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0NsZWFyQ291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2xlYXIgdGhlIGNvdW50ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfQ2xlYXJBbGxDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgIGJfQm9hcmRIYW5kbGUpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENsZWFyIGFsbCBjb3VudGVyIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9DbGVhckFsbENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlCWVRFIGJfTW9kdWxDcHQgPSAwOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIGNvdW50ZXIgbW9kdWxlIGZvdW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblswXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgorCQl8fCAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMV0gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIKKwkJfHwgKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzJdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSCisJCXx8IChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblszXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUikgeworCQlmb3IgKGJfTW9kdWxDcHQgPSAwOyBiX01vZHVsQ3B0IDwgNDsgYl9Nb2R1bENwdCsrKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGluY3JlbWVudGFsIGNvdW50ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxDcHRdICYKKwkJCQkJMHhGRkZGMDAwMFVMKSA9PQorCQkJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2xlYXIgdGhlIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bENwdCkpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTm8gY291bnRlciBtb2R1bGUgZm91bmRcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfU2V0SW5wdXRGaWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfTW9kdWxlLCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX1BDSUlucHV0Q2xvY2ssICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9GaWx0ZXIpICAgICAJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSBvciBlbmFibGUgdGhlIHNvZnR3YXJlIGZpbHRlciBmcm9tIHNlbGVjdGVkICAgIHwKK3wJCSAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIGJfRmlsdGVyIGRldGVybWluZSB0aGUgZmlsdGVyIHRpbWV8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfAkJICAgICAgQllURV8gIGJfTW9kdWxOYnIJICAgICAgOglOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKK3wJCQkJCQljb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX1BDSUlucHV0Q2xvY2sgIDoJU2VsZWN0aW9uIG9mIHRoZSBQQ0kgYnVzICAgICB8Cit8CQkJCQkJY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgUEMgaGFzIGEgUENJIGJ1cyBjbG9jayB8Cit8CQkJCQkJICBvZiAzMCBNSHogICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgUEMgaGFzIGEgUENJIGJ1cyBjbG9jayB8Cit8CQkJCQkJICBvZiAzMyBNSHogICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF80ME1IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgQVBDSTE3MTAgaGFzIGEgNDBNSHogICAgfAorfAkJCQkJCSAgcXVhcnR6CQkgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX0ZpbHRlcgkgICAgICA6IEZpbHRlciBzZWxlY3Rpb24gICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCTMwIE1IeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJMDogIFNvZnR3YXJlIGZpbHRlciBub3QgdXNlZCAgICAgICAgIHwKK3wJCQkJCTE6ICBGaWx0ZXIgZnJvbSAyNjZucyAgKDMuNzUwMDAwTUh6KSB8Cit8CQkJCQkyOiAgRmlsdGVyIGZyb20gNDAwbnMgICgyLjUwMDAwME1IeikgfAorfAkJCQkJMzogIEZpbHRlciBmcm9tIDUzM25zICAoMS44NzYxNzBNSHopIHwKK3wJCQkJCTQ6ICBGaWx0ZXIgZnJvbSA2NjZucyAgKDEuNTAxNTAxTUh6KSB8Cit8CQkJCQk1OiAgRmlsdGVyIGZyb20gODAwbnMgICgxLjI1MDAwME1IeikgfAorfAkJCQkJNjogIEZpbHRlciBmcm9tIDkzM25zICAoMS4wNzE4MDBNSHopIHwKK3wJCQkJCTc6ICBGaWx0ZXIgZnJvbSAxMDY2bnMgKDAuOTM4MDgwTUh6KSB8Cit8CQkJCQk4OiAgRmlsdGVyIGZyb20gMTIwMG5zICgwLjgzMzMzM01IeikgfAorfAkJCQkJOTogIEZpbHRlciBmcm9tIDEzMzNucyAoMC43NTAwMDBNSHopIHwKK3wJCQkJCTEwOiBGaWx0ZXIgZnJvbSAxNDY2bnMgKDAuNjgyMTAwTUh6KSB8Cit8CQkJCQkxMTogRmlsdGVyIGZyb20gMTYwMG5zICgwLjYyNTAwME1IeikgfAorfAkJCQkJMTI6IEZpbHRlciBmcm9tIDE3MzNucyAoMC41Nzc3NzdNSHopIHwKK3wJCQkJCTEzOiBGaWx0ZXIgZnJvbSAxODY2bnMgKDAuNTM1OTAwTUh6KSB8Cit8CQkJCQkxNDogRmlsdGVyIGZyb20gMjAwMG5zICgwLjUwMDAwME1IeikgfAorfAkJCQkJMTU6IEZpbHRlciBmcm9tIDIxMzNucyAoMC40Njg4MDBNSHopIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJMzMgTUh6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQktLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkwOiAgU29mdHdhcmUgZmlsdGVyIG5vdCB1c2VkICAgICAgICAgfAorfAkJCQkJMTogIEZpbHRlciBmcm9tIDI0Mm5zICAoNC4xMjUwMDBNSHopIHwKK3wJCQkJCTI6ICBGaWx0ZXIgZnJvbSAzNjNucyAgKDIuNzU0ODIwTUh6KSB8Cit8CQkJCQkzOiAgRmlsdGVyIGZyb20gNDg0bnMgICgyLjA2NjExNU1IeikgfAorfAkJCQkJNDogIEZpbHRlciBmcm9tIDYwNW5zICAoMS42NTI4OTJNSHopIHwKK3wJCQkJCTU6ICBGaWx0ZXIgZnJvbSA3MjZucyAgKDEuMzU3NzQxTUh6KSB8Cit8CQkJCQk2OiAgRmlsdGVyIGZyb20gODQ3bnMgICgxLjE4MDYzN01IeikgfAorfAkJCQkJNzogIEZpbHRlciBmcm9tIDk2OG5zICAoMS4wMzMwNTVNSHopIHwKK3wJCQkJCTg6ICBGaWx0ZXIgZnJvbSAxMDg5bnMgKDAuOTE4MjczTUh6KSB8Cit8CQkJCQk5OiAgRmlsdGVyIGZyb20gMTIxMG5zICgwLjgyNjQ0Nk1IeikgfAorfAkJCQkJMTA6IEZpbHRlciBmcm9tIDEzMzFucyAoMC43NTEzMTRNSHopIHwKK3wJCQkJCTExOiBGaWx0ZXIgZnJvbSAxNDUybnMgKDAuNjg4NzA1TUh6KSB8Cit8CQkJCQkxMjogRmlsdGVyIGZyb20gMTU3M25zICgwLjYzNTcyN01IeikgfAorfAkJCQkJMTM6IEZpbHRlciBmcm9tIDE2OTRucyAoMC41OTAzMThNSHopIHwKK3wJCQkJCTE0OiBGaWx0ZXIgZnJvbSAxODE1bnMgKDAuNTUwOTY0TUh6KSB8Cit8CQkJCQkxNTogRmlsdGVyIGZyb20gMTkzNm5zICgwLjUxNjUyOE1IeikgfAorfAkJCQkJCQkJCSAgICAgfAorfAkJCQk0MCBNSHogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCTA6ICBTb2Z0d2FyZSBmaWx0ZXIgbm90IHVzZWQgICAgICAgICB8Cit8CQkJCQkxOiAgRmlsdGVyIGZyb20gMjAwbnMgICg1LjAwMDAwME1IeikgfAorfAkJCQkJMjogIEZpbHRlciBmcm9tIDMwMG5zICAoMy4zMzMzMzNNSHopIHwKK3wJCQkJCTM6ICBGaWx0ZXIgZnJvbSA0MDBucyAgKDIuNTAwMDAwTUh6KSB8Cit8CQkJCQk0OiAgRmlsdGVyIGZyb20gNTAwbnMgICgyLjAwMDAwME1IeikgfAorfAkJCQkJNTogIEZpbHRlciBmcm9tIDYwMG5zICAoMS42NjY2NjZNSHopIHwKK3wJCQkJCTY6ICBGaWx0ZXIgZnJvbSA3MDBucyAgKDEuNDI4NTAwTUh6KSB8Cit8CQkJCQk3OiAgRmlsdGVyIGZyb20gODAwbnMgICgxLjI1MDAwME1IeikgfAorfAkJCQkJODogIEZpbHRlciBmcm9tIDkwMG5zICAoMS4xMTExMTFNSHopIHwKK3wJCQkJCTk6ICBGaWx0ZXIgZnJvbSAxMDAwbnMgKDEuMDAwMDAwTUh6KSB8Cit8CQkJCQkxMDogRmlsdGVyIGZyb20gMTEwMG5zICgwLjkwOTA5ME1IeikgfAorfAkJCQkJMTE6IEZpbHRlciBmcm9tIDEyMDBucyAoMC44MzMzMzNNSHopIHwKK3wJCQkJCTEyOiBGaWx0ZXIgZnJvbSAxMzAwbnMgKDAuNzY5MjAwTUh6KSB8Cit8CQkJCQkxMzogRmlsdGVyIGZyb20gMTQwMG5zICgwLjcxNDIwME1IeikgfAorfAkJCQkJMTQ6IEZpbHRlciBmcm9tIDE1MDBucyAoMC42NjY2NjZNSHopIHwKK3wJCQkJCTE1OiBGaWx0ZXIgZnJvbSAxNjAwbnMgKDAuNjI1MDAwTUh6KSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgLTQ6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKK3wJCQkJCSAgLTU6IFRoZSBzZWxlY3RlZCBmaWx0ZXIgdmFsdWUgaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgLTY6IDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfU2V0SW5wdXRGaWx0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfUENJSW5wdXRDbG9jaywgQllURSBiX0ZpbHRlcikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW5jcmVtZW50YWwgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmaXJtd2FyZSA+PSBSZXYxLjUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYpID49IDB4MzEzNSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFBDSSBidXMgY2xvY2sgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fAorCQkJCQkoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSB8fAorCQkJCQkoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGZpbHRlciB2YWx1ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfRmlsdGVyIDwgMTYpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiA0ME1IeiB1c2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiA0ME1IeiBxdWFydHogb24gYm9hcmQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMzYgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBxdWFydHogZmxhZyAoRFEwKSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAxKSAhPQorCQkJCQkJCQkxKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZFxuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTY7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBlcnJvciBub3Qgb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChpX1JldHVyblZhbHVlID09IDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiA0ME1IeiB1c2VkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQl7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSB0aGUgNDBNSHogcXVhcnogKERRMzEpICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfNDBNSFpfRklMVEVSOworCisJCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCWVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRGlzYWJsZSB0aGUgNDBNSHogcXVhcnogKERRMzEpICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV80ME1IWl9GSUxURVI7CisKKwkJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopCisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZXQgdGhlIGZpbHRlciB2YWx1ZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJPQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJJiAweDFGKSB8CisJCQkJCQkJCSgoYl9GaWx0ZXIgJgorCQkJCQkJCQkJMHg3KSA8PAorCQkJCQkJCQk1KTsKKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCT0KKwkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCSYgMHhGRSkgfAorCQkJCQkJCQkoKGJfRmlsdGVyICYKKwkJCQkJCQkJCTB4OCkgPj4KKwkJCQkJCQkJMyk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMjAgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQl9CS8vIGlmIChpX1JldHVyblZhbHVlID09IDApCisJCQkJCX0JLy8gaWYgKGJfRmlsdGVyIDwgMTYpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIGZpbHRlciB2YWx1ZSBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgZmlsdGVyIHZhbHVlIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQkvLyBpZiAoYl9GaWx0ZXIgPCAxNikKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gNDsKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZVxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0xhdGNoQ291bnRlciAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTGF0Y2hSZWcpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IExhdGNoIHRoZSBjb3VyYW50IHZhbHVlIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpIGluIHRvIHRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9MYXRjaFJlZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9MYXRjaFJlZyAgICA6IFNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGZvciB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogZm9yIHRoZSBzZWNvbmQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgcGFyYW1ldGVyIGlzIHdyb25nICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0xhdGNoQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgbGF0Y2ggcmVnaXN0ZXIgcGFyYW1ldGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0xhdGNoUmVnIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUYXRjaCB0aGUgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSA8PCAoYl9MYXRjaFJlZyAqIDQpLAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXwlpX0FQQ0kxNzEwX1NldEluZGV4QW5kUmVmZXJlbmNlU291cmNlICAgICAgICB8Cit8CQkJCQkoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX1NvdXJjZVNlbGVjdGlvbikgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEZXRlcm1pbmUgdGhlIGhhcmR3YXJlIHNvdXJjZSBmb3IgdGhlIGluZGV4IGFuZCB0aGUgICAgfAorfAkJICAgICAgcmVmZXJlbmNlIGxvZ2ljLiBQZXIgZGVmYXVsdCB0aGUgaW5kZXggbG9naWMgaXMgICAgICAgIHwKK3wJCSAgICAgIGNvbm5lY3RlZCB0byB0aGUgZGlmZmVyZW5jZSBpbnB1dCBDIGFuZCB0aGUgcmVmZXJlbmNlICB8Cit8CQkgICAgICBsb2dpYyBpcyBjb25uZWN0ZWQgdG8gdGhlIDI0ViBpbnB1dCBFICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICBCWVRFXyBiX1NvdXJjZVNlbGVjdGlvbiA6IEFQQ0kxNzEwX1NPVVJDRV8wIDogICAgICAgICAgfAorfAkJCQkJCVRoZSBpbmRleCBsb2dpYyBpcyBjb25uZWN0ZWQgfAorfAkJCQkJCXRvIHRoZSBkaWZmZXJlbmNlIGlucHV0IEMgYW5kfAorfAkJCQkJCXRoZSByZWZlcmVuY2UgbG9naWMgaXMgICAgICAgfAorfAkJCQkJCWNvbm5lY3RlZCB0byB0aGUgMjRWIGlucHV0IEUufAorfAkJCQkJCVRoaXMgaXMgdGhlIGRlZmF1bHQgICAgICAgICAgfAorfAkJCQkJCWNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgfAorfAkJCQkJCUFQQ0kxNzEwX1NPVVJDRV8xIDogICAgICAgICAgfAorfAkJCQkJCVRoZSByZWZlcmVuY2UgbG9naWMgaXMgICAgICAgfAorfAkJCQkJCWNvbm5lY3RlZCB0byB0aGUgZGlmZmVyZW5jZSAgfAorfAkJCQkJCWlucHV0IEMgYW5kIHRoZSBpbmRleCBsb2dpYyAgfAorfAkJCQkJCWlzIGNvbm5lY3RlZCB0byB0aGUgMjRWICAgICAgfAorfAkJCQkJCWlucHV0IEUgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wJCSAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZS4gICAgICAgICAgICAgICAgfAorfAkJICAgICAgLTQ6IFRoZSBzb3VyY2Ugc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfU2V0SW5kZXhBbmRSZWZlcmVuY2VTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfU291cmNlU2VsZWN0aW9uKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW5jcmVtZW50YWwgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmaXJtd2FyZSA+PSBSZXYxLjUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYpID49IDB4MzEzNSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIHNvdXJjZSBzZWxlY3Rpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMCB8fAorCQkJCQliX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMSkKKwkJCQl7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGludmVydCB0aGUgaW5kZXggYW5kIHJlZmVyZW5jZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9Tb3VyY2VTZWxlY3Rpb24gPT0KKwkJCQkJCUFQQ0kxNzEwX1NPVVJDRV8xKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBJbnZlcnQgaW5kZXggYW5kIHJlZmVyZW5jZSBzb3VyY2UgKERRMjUpICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0ID0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNCB8CisJCQkJCQkJQVBDSTE3MTBfSU5WRVJUX0lOREVYX1JGRVJFTkNFOworCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoRFEyNSkgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNCA9CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQliX01vZGVSZWdpc3RlcjQgJgorCQkJCQkJCUFQQ0kxNzEwX0RFRkFVTFRfSU5ERVhfUkZFUkVOQ0U7CisJCQkJCX0KKwkJCQl9CS8vIGlmIChiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMCB8fGJfU291cmNlU2VsZWN0aW9uID09IEFQQ0kxNzEwX1NPVVJDRV8xKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNvdXJjZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGhlIHNvdXJjZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQkvLyBpZiAoYl9Tb3VyY2VTZWxlY3Rpb24gPT0gQVBDSTE3MTBfU09VUkNFXzAgfHxiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMSkKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZVxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfCWlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9uICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIHRoZSBkaWdpdGFsIG91dHB1dCBIIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zICAgICAgfAorfAkJICAgICAgc2V0dGluZyBhbiBvdXB1dCBoaWdoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9Nb2R1bE5icgkgICAgICA6CU51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorfAkJCQkJCWNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8CQkJICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJCQlkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCWJfTW9kZVJlZ2lzdGVyMyA9IGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuYl9Nb2RlUmVnaXN0ZXIzIHwgMHgxMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgdGhlIG91dHB1dCBPbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfCWlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9mZiAgICAgICAgICAgICAgICAgIHwKK3wJCQkJICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXNldHMgdGhlIGRpZ2l0YWwgb3V0cHV0IEguIFJlc2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgfAorfAkJICAgICAgc2V0dGluZyBhbiBvdXB1dCBsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9Nb2R1bE5icgkgICAgICA6CU51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorfAkJCQkJCWNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8CQkJICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCQkJZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQliX01vZGVSZWdpc3RlcjMgPSBkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMyAmIDB4RUY7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgb3V0cHV0IE9mZiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisKKwkJCQkJCQkvLyBJTlNOIFdSSVRFCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQJaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKK3N0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSBEaXNhYmxlIGZ1bmN0aW9ucyBmb3IgSU5DX0NQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUlOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Xcml0ZVR5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJdWlfV3JpdGVUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKworCXN3aXRjaCAodWlfV3JpdGVUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFTEFUQ0hJTlRFUlJVUFQ6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZUxhdGNoSW50ZXJydXB0KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUxBVENISU5URVJSVVBUOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlTGF0Y2hJbnRlcnJ1cHQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9XUklURTE2QklUQ09VTlRFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Xcml0ZTE2Qml0Q291bnRlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLCAoVUlOVCkgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfV1JJVEUzMkJJVENPVU5URVJWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfV3JpdGUzMkJpdENvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChVTE9ORykgZGF0YVswXSk7CisKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVJTkRFWDoKKwkJaV9BUENJMTcxMF9FbmFibGVJbmRleChkZXYsIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUlOREVYOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlSW5kZXgoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVDT01QQVJFTE9HSUM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZUNvbXBhcmVMb2dpYyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVDT01QQVJFTE9HSUM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0Rpc2FibGVDb21wYXJlTG9naWMoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVGUkVRVUVOQ1lNRUFTVVJFTUVOVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfRW5hYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoQllURSkgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUZSRVFVRU5DWU1FQVNVUkVNRU5UOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIldyaXRlIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUxhdGNoSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgbGF0Y2ggaW50ZXJydXB0IGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBFYWNoIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGxhdGNoIG9jY3VyIGEgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbnRlcnJ1cHQgcm91dGluZSBub3QgaW5zdGFsbGVkIHNlZSBmdW5jdGlvbiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZSIgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlTGF0Y2hJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCQkJLyogRW5hYmxlIGludGVycnVwdCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJYl9Nb2RlUmVnaXN0ZXIyIHwgQVBDSTE3MTBfRU5BQkxFX0xBVENIX0lOVDsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVMYXRjaEludGVycnVwdCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgdGhlIGxhdGNoIGludGVycnVwdCBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogSW50ZXJydXB0IHJvdXRpbmUgbm90IGluc3RhbGxlZCBzZWUgZnVuY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmUiICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVMYXRjaEludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCAmCisJCQkJKChBUENJMTcxMF9ESVNBQkxFX0xBVENIX0lOVCA8PCA4KSB8IDB4RkYpLAorCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJbWRlbGF5KDEwMDApOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQliX01vZGVSZWdpc3RlcjIgJiBBUENJMTcxMF9ESVNBQkxFX0xBVENIX0lOVDsKKworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1dyaXRlMTZCaXRDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TZWxlY3RlZENvdW50ZXIsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlRfIHVpX1dyaXRlVmFsdWUpICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSBhIDE2LUJpdCB2YWx1ZSAodWlfV3JpdGVWYWx1ZSkgaW4gdG8gdGhlIHNlbGVjdGVkfAorfCAgICAgICAgICAgICAgICAgICAgIDE2LUJpdCBjb3VudGVyIChiX1NlbGVjdGVkQ291bnRlcikgZnJvbSBzZWxlY3RlZCBtb2R1bGV8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2VsZWN0ZWRDb3VudGVyIDogU2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UXyB1aV9Xcml0ZVZhbHVlICAgICA6IDE2LUJpdCB3cml0ZSB2YWx1ZSAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Xcml0ZTE2Qml0Q291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1NlbGVjdGVkQ291bnRlciwgVUlOVCB1aV9Xcml0ZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGNvdW50ZXIgc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfU2VsZWN0ZWRDb3VudGVyIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoKFVMT05HKSAoKFVMT05HKSAodWlfV3JpdGVWYWx1ZSkgPDwgKDE2ICoKKwkJCQkJCQliX1NlbGVjdGVkQ291bnRlcikpLAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDggKworCQkJCQkoYl9TZWxlY3RlZENvdW50ZXIgKiA0KSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1dyaXRlMzJCaXRDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfV3JpdGVWYWx1ZSkgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGUgYSAzMi1CaXQgdmFsdWUgKHVpX1dyaXRlVmFsdWUpIGluIHRvIHRoZSBzZWxlY3RlZHwKK3wgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX1dyaXRlVmFsdWUgICAgOiAzMi1CaXQgd3JpdGUgdmFsdWUgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlMzJCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBVTE9ORyB1bF9Xcml0ZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bCh1bF9Xcml0ZVZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlSW5kZXggKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgSU5ERVggYWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdEluZGV4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9FbmFibGVJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9JbnRlcnJ1cHRMYXRjaFJlZzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfSW5kZXhJbml0KSB7CisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjIgfCBBUENJMTcxMF9FTkFCTEVfSU5ERVg7CisKKwkJCQl1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9CisJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCTI0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAyMCArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiSW5kZXggbm90IGluaXRpYWxpc2VkIFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVJbmRleCAoQllURV8gIGJfQm9hcmRIYW5kbGUsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5icikgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEaXNhYmxlIHRoZSBJTkRFWCBhY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGluZGV4IGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9JbmRleEluaXQpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMiAmCisJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfSU5ERVg7CisKKwkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEluZGV4IiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJJbmRleCBub3QgaW5pdGlhbGlzZWQgIFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUNvbXBhcmVMb2dpYyAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgMzItQml0IGNvbXBhcmUgbG9naWMuIEF0IHRoYXQgbW9tZW50IHRoYXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGluY3JlbWVudGFsIGNvdW50ZXIgYXJyaXZlIHRvIHRoZSBjb21wYXJlIHZhbHVlIGEgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb21wYXJlTG9naWMiICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlQ29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY29tcGFyZSBsb2dpYyBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfSW5pdEZsYWcuYl9Db21wYXJlTG9naWNJbml0ID09IDEpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyB8CisJCQkJCUFQQ0kxNzEwX0VOQUJMRV9DT01QQVJFX0lOVDsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRGlzYWJsZUNvbXBhcmVMb2dpYyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSB0aGUgMzItQml0IGNvbXBhcmUgbG9naWMuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogQ29tcGFyZSBsb2dpYyBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdENvbXBhcmVMb2dpYyIgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjb21wYXJlIGxvZ2ljIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0NvbXBhcmVMb2dpY0luaXQgPT0gMSkgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjMgPSBkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzICYKKwkJCQkJQVBDSTE3MTBfRElTQUJMRV9DT01QQVJFX0lOVDsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworCS8qCisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0ludGVycnVwdEVuYWJsZSkgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZXMgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCBmdW5jdGlvbiAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTnVtYmVyIG9mIHRoZSBtb2R1bGUgdG8gYmUgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCAoMCB0byAzKSAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0ludGVycnVwdEVuYWJsZTogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFOiAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBpbnRlcnJ1cHQgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRTogICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgaW50ZXJydXB0ICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC00OiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50IiB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC01OiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC02OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0ludGVycnVwdEVuYWJsZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IG1lc3VyZW1lbnQgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0ZyZXF1ZW5jeU1lYXN1cmVtZW50SW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBtb2RlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSB8fAorCQkJCQkoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSkKKwkJCQl7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEVuYWJsZSB0aGUgZnJlcXVlbmN5IG1lYXN1cmVtZW50ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMyA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMyB8CisJCQkJCQlBUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgZnJlcXVlbmN5IGludGVycnVwdCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgPSAoZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzICYKKwkJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZX0lOVCkKKwkJCQkJCXwgKGJfSW50ZXJydXB0RW5hYmxlIDw8IDMpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Jbml0RmxhZy4KKwkJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGUgPQorCQkJCQkJMTsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEZyZXF1ZW5jeSBtZWFzdXJlbWVudCBsb2dpYyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkZyZXF1ZW5jeSBtZWFzdXJlbWVudCBsb2dpYyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9EaXNhYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZXMgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCBmdW5jdGlvbiAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTnVtYmVyIG9mIHRoZSBtb2R1bGUgdG8gYmUgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCAoMCB0byAzKSAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC00OiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50IiB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmcmVxdWVuY3kgbWVzdXJlbWVudCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERpc2FibGUgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyAmCisJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZCisJCQkJCS8vIEJlZ2luIENHIDI5LzA2LzAxIENHIDExMDAvMDIzMSAtPiAwNzAxLzAyMzIgRnJlcXVlbmNlIG1lYXN1cmUgSVJRIG11c3QgYmUgY2xlYXJlZAorCQkJCQkmIEFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZX0lOVDsKKwkJCQkvLyBFbmQgQ0cgMjkvMDYvMDEgQ0cgMTEwMC8wMjMxIC0+IDA3MDEvMDIzMiBGcmVxdWVuY2UgbWVhc3VyZSBJUlEgbXVzdCBiZSBjbGVhcmVkCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEaXNhYmxlIHRoZSBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfSW5pdEZsYWcuCisJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGUgPSAwOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKworCQkJCQkJCS8vIElOU04gUkVBRAorCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQJaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKK3N0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgYW5kIEdldCBmdW5jdGlvbnMgZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZElOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9SZWFkVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwl1aV9SZWFkVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwlzd2l0Y2ggKHVpX1JlYWRUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBRExBVENIUkVHSVNURVJTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFETEFUQ0hSRUdJU1RFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIChQVUxPTkcpICYgZGF0YVswXSk7CisJCXByaW50aygiTGF0Y2ggUmVnaXN0ZXIgVmFsdWUgJWRcbiIsIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1JFQUQxNkJJVENPVU5URVJWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZDE2Qml0Q291bnRlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIChQVUlOVCkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFEMzJCSVRDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQVUxPTkcpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUSU5ERVhTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldEluZGV4U3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVFJFRkVSRU5DRVNUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0UmVmZXJlbmNlU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVFVBU1NUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0VUFTU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVENCU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRDQlN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9HRVQxNkJJVENCU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXQxNkJpdENCU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShQQllURSkgJiBkYXRhWzBdLCAoUEJZVEUpICYgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUVURTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldFVEU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUSU5URVJSVVBUVURMQVRDSEVEU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRJbnRlcnJ1cHRVRExhdGNoZWRTdGF0dXMoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoUEJZVEUpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBREZSRVFVRU5DWU1FQVNVUkVNRU5UOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9SZWFkRnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKFBCWVRFKSAmIGRhdGFbMF0sCisJCQkoUEJZVEUpICYgZGF0YVsxXSwgKFBVTE9ORykgJiBkYXRhWzJdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFESU5URVJSVVBUOgorCQlkYXRhWzBdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJCWRhdGFbMl0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgPSAoZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJdWlfUmVhZCArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIlJlYWRUeXBlIFBhcmFtZXRlciB3cm9uZ1xuIik7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclN0YXR1cyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9MYXRjaFJlZywgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX0xhdGNoU3RhdHVzKSAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgbGF0Y2ggcmVnaXN0ZXIgc3RhdHVzIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikgYW5kIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIChiX0xhdGNoUmVnKS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9MYXRjaFJlZyAgICA6IFNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGZvciB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogZm9yIHRoZSBzZWNvbmQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfTGF0Y2hTdGF0dXMgOiAgIExhdGNoIHJlZ2lzdGVyIHN0YXR1cy4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IE5vIGxhdGNoIG9jY3VyICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQSBzb2Z0d2FyZSBsYXRjaCBvY2N1ciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBBIGhhcmR3YXJlIGxhdGNoIG9jY3VyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IEEgc29mdHdhcmUgYW5kIGhhcmR3YXJlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0Y2ggb2NjdXIgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZywgUEJZVEUgcGJfTGF0Y2hTdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X0xhdGNoUmVnOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9MYXRjaFJlZyA8IDIpIHsKKwkJCQlkd19MYXRjaFJlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfTGF0Y2hTdGF0dXMgPQorCQkJCQkoQllURSkgKChkd19MYXRjaFJlZyA+PiAoYl9MYXRjaFJlZyAqCisJCQkJCQkJNCkpICYgMHgzKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyVmFsdWUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSx8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTGF0Y2hSZWcsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9MYXRjaFZhbHVlKSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBsYXRjaCByZWdpc3RlciB2YWx1ZSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKSBhbmQgc2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgKGJfTGF0Y2hSZWcpLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0xhdGNoUmVnICAgIDogU2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogZm9yIHRoZSBmaXJzdCBsYXRjaCByZWdpc3RlciAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBmb3IgdGhlIHNlY29uZCBsYXRjaCByZWdpc3RlciAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gcHVsX0xhdGNoVmFsdWUgOiBMYXRjaCByZWdpc3RlciB2YWx1ZSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZywgUFVMT05HIHB1bF9MYXRjaFZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfTGF0Y2hSZWcgPCAyKSB7CisJCQkJKnB1bF9MYXRjaFZhbHVlID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArICgoYl9MYXRjaFJlZyArIDEpICogNCkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWQxNkJpdENvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfU2VsZWN0ZWRDb3VudGVyLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gICBwdWlfQ291bnRlclZhbHVlKSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBMYXRjaCB0aGUgc2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgKGJfU2VsZWN0ZWRDb3VudGVyKSAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKSBpbiB0byB0aGUgZmlyc3QgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbGF0Y2ggcmVnaXN0ZXIgYW5kIHJldHVybiB0aGUgbGF0Y2hlZCB2YWx1ZS4gICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2VsZWN0ZWRDb3VudGVyIDogU2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVSU5UXyBwdWlfQ291bnRlclZhbHVlIDogMTYtQml0IGNvdW50ZXIgdmFsdWUgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZDE2Qml0Q291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1NlbGVjdGVkQ291bnRlciwgUFVJTlQgcHVpX0NvdW50ZXJWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfTGF0aGNoVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY291bnRlciBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9TZWxlY3RlZENvdW50ZXIgPCAyKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIExhdGNoIHRoZSBjb3VudGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgbGF0Y2ggdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19MYXRoY2hWYWx1ZSA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJKnB1aV9Db3VudGVyVmFsdWUgPQorCQkJCQkoVUlOVCkgKChkd19MYXRoY2hWYWx1ZSA+PiAoMTYgKgorCQkJCQkJCWJfU2VsZWN0ZWRDb3VudGVyKSkgJgorCQkJCQkweEZGRkZVKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfQ291bnRlclZhbHVlKSAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogTGF0Y2ggdGhlIDMyLUJpdCBjb3VudGVyIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikgaW4gdG8gdGhlIGZpcnN0IGxhdGNoIHJlZ2lzdGVyIGFuZCByZXR1cm4gfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXRjaGVkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9Db3VudGVyVmFsdWUgOiAzMi1CaXQgY291bnRlciB2YWx1ZSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBVTE9ORyBwdWxfQ291bnRlclZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRhdGNoIHRoZSBjb3VudGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHRoZSBsYXRjaCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCSpwdWxfQ291bnRlclZhbHVlID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRJbmRleFN0YXR1cyAoQllURV8gICBiX0JvYXJkSGFuZGxlLHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9JbmRleFN0YXR1cyl8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGluZGV4IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfSW5kZXhTdGF0dXMgICA6IDAgOiBObyBJTkRFWCBvY2N1ciAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEEgSU5ERVggb2NjdXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdEluZGV4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRJbmRleFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0luZGV4U3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGluZGV4IGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9JbmRleEluaXQpIHsKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfSW5kZXhTdGF0dXMgPSAoQllURSkgKGR3X1N0YXR1c1JlZyAmIDEpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEluZGV4IiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJJbmRleCBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRSZWZlcmVuY2VTdGF0dXMgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9SZWZlcmVuY2VTdGF0dXMpIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgcmVmZXJlbmNlIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9SZWZlcmVuY2VTdGF0dXMgICA6IDAgOiBObyBSRUZFUkVOQ0Ugb2NjdXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEEgUkVGRVJFTkNFIG9jY3VyICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUmVmZXJlbmNlIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0UmVmZXJlbmNlIiAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0dldFJlZmVyZW5jZVN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1JlZmVyZW5jZVN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcmVmZXJlbmNlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfUmVmZXJlbmNlSW5pdCkgeworCQkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAyNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSpwYl9SZWZlcmVuY2VTdGF0dXMgPQorCQkJCQkoQllURSkgKH5kd19TdGF0dXNSZWcgJiAxKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlZmVyZW5jZSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRSZWZlcmVuY2UiICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUmVmZXJlbmNlIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFVBU1N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9VQVNTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBlcnJvciBzaWduYWwgKFVBUykgc3RhdHVzICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1VBU1N0YXR1cyAgICAgIDogMCA6IFVBUyBpcyBsb3cgIjAiICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVUFTIGlzIGhpZ2ggIjEiICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRVQVNTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VQVNTdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCQkJZHdfU3RhdHVzUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSpwYl9VQVNTdGF0dXMgPSAoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMSkgJiAxKTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldENCU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9DQlN0YXR1cykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjb3VudGVyIG92ZXJmbG93IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0NCU3RhdHVzICAgICAgOiAwIDogQ291bnRlciBubyBvdmVyZmxvdyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDb3VudGVyIG92ZXJmbG93ICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRDQlN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0NCU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkqcGJfQ0JTdGF0dXMgPSAoQllURSkgKGR3X1N0YXR1c1JlZyAmIDEpOworCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0MTZCaXRDQlN0YXR1cyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wJCQkJCSBQQllURV8gcGJfQ0JTdGF0dXNDb3VudGVyMCwgICAgICAgICB8Cit8CQkJCQkgUEJZVEVfIHBiX0NCU3RhdHVzQ291bnRlcjEpICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJucyB0aGUgY291bnRlciBvdmVyZmxvdyAoY291bnRlciBpbml0aWFsaXNlZCB0byAgIHwKK3wJCSAgICAgIDIqMTYtYml0KSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBpbmNyZW1lbnRhbCBjb3VudGVyICAgICB8Cit8CQkgICAgICBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfQ0JTdGF0dXNDb3VudGVyMCA6IDAgOiBObyBvdmVyZmxvdyBvY2N1ciBmb3IgfAorfAkJCQkJCSAgICAgICB0aGUgZmlyc3QgMTYtYml0ICAgICAgfAorfAkJCQkJCSAgICAgICBjb3VudGVyICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgIDEgOiBPdmVyZmxvdyBvY2N1ciBmb3IgdGhlfAorfAkJCQkJCSAgICAgICBmaXJzdCAxNi1iaXQgY291bnRlciAgfAorfAkJICAgICAgUEJZVEVfIHBiX0NCU3RhdHVzQ291bnRlcjEgOiAwIDogTm8gb3ZlcmZsb3cgb2NjdXIgZm9yIHwKK3wJCQkJCQkgICAgICAgdGhlIHNlY29uZCAxNi1iaXQgICAgIHwKK3wJCQkJCQkgICAgICAgY291bnRlciAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgICAxIDogT3ZlcmZsb3cgb2NjdXIgZm9yIHRoZXwKK3wJCQkJCQkgICAgICAgc2Vjb25kIDE2LWJpdCBjb3VudGVyIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgdG8gMioxNi1iaXQgbW9kZS4gICAgICAgICAgfAorfAkJCSAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBGaXJtd2FyZSByZXZpc2lvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0dldDE2Qml0Q0JTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIwLCBQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIxKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgMioxNi1CaXQgbW9kZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMSAmIDB4MTApID09IDB4MTApIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBGaXJtd2FyZSB2ZXJzaW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQlbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49CisJCQkJCTB4MzEzNikgeworCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxNiArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX0NCU3RhdHVzQ291bnRlcjEgPQorCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzUmVnID4+IDApICYKKwkJCQkJCTEpOworCQkJCQkqcGJfQ0JTdGF0dXNDb3VudGVyMCA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMSkgJgorCQkJCQkJMSk7CisJCQkJfQkvLyBpZiAoKHBzX0FQQ0kxNzEwVmFyaWFibGUtPnNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbiBbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzNikKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBGaXJtd2FyZSByZXZpc2lvbiBlcnJvciAgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmICgocHNfQVBDSTE3MTBWYXJpYWJsZS0+c19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uc19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uIFtiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTM2KQorCQkJfQkvLyBpZiAoKHBzX0FQQ0kxNzEwVmFyaWFibGUtPnNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLnNfTW9kdWxlSW5mbyBbYl9Nb2R1bE5icl0uc19TaWVtZW5zQ291bnRlckluZm8uc19Nb2RlUmVnaXN0ZXIuc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMSAmIDB4MTApID09IDB4MTApCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCB0byAyKjE2LWJpdCBtb2RlICovCisJCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKChwc19BUENJMTcxMFZhcmlhYmxlLT5zX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS5zX01vZHVsZUluZm8gW2JfTW9kdWxOYnJdLnNfU2llbWVuc0NvdW50ZXJJbmZvLnNfTW9kZVJlZ2lzdGVyLnNfQnl0ZU1vZGVSZWdpc3Rlci5iX01vZGVSZWdpc3RlcjEgJiAweDEwKSA9PSAweDEwKQorCQl9CQkvLyBpZiAocHNfQVBDSTE3MTBWYXJpYWJsZS0+c19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uc19Nb2R1bGVJbmZvIFtiX01vZHVsTmJyXS5zX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkKKwkJZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0JCS8vIGlmIChwc19BUENJMTcxMFZhcmlhYmxlLT5zX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS5zX01vZHVsZUluZm8gW2JfTW9kdWxOYnJdLnNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKQorCX0JCQkvLyBpZiAoYl9Nb2R1bE5iciA8IDQpCisJZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CQkJLy8gaWYgKGJfTW9kdWxOYnIgPCA0KQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0VURTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1VEU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGNvdW50ZXIgcHJvZ3Jlc3Mgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfVURTdGF0dXMgICAgICA6IDAgOiBDb3VudGVyIHByb2dyZXNzIGluIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZGUgZG93biAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBtb2RlIHVwICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRVRFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1VEU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDI0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkqcGJfVURTdGF0dXMgPSAoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMikgJiAxKTsKKworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldEludGVycnVwdFVETGF0Y2hlZFN0YXR1cyAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9VRFN0YXR1cykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjb3VudGVyIHByb2dyZXNzIGxhdGNoZWQgc3RhdHVzIGFmdGVyIGEgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbmRleCBpbnRlcnJ1cHQgb2NjdXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfVURTdGF0dXMgICAgICA6IDAgOiBDb3VudGVyIHByb2dyZXNzIGluIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZGUgZG93biAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBtb2RlIHVwICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IE5vIGluZGV4IGludGVycnVwdCBvY2N1ciB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEludGVycnVwdCBmdW5jdGlvbiBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRJbnRlcnJ1cHRVRExhdGNoZWRTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VRFN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0luZGV4SW50ZXJydXB0T2NjdXIgPT0gMSkgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX0luaXRGbGFnLmJfSW5kZXhJbnRlcnJ1cHRPY2N1ciA9IDA7CisKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfVURTdGF0dXMgPSAoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMSkgJiAxKTsKKwkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBObyBpbmRleCBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJKnBiX1VEU3RhdHVzID0gMjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgICAgICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICAgICAgICAgcGJfU3RhdHVzLCAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfICAgICAgICBwdWxfUmVhZFZhbHVlKSAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJucyB0aGUgc3RhdHVzIChwYl9TdGF0dXMpIGFuZCB0aGUgbnVtYmVyIG9mICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBpbiB0aGUgc2V0IHRpbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICIgaV9BUENJMTcxMF9Jbml0RnJlcXVlbmN5TWVhc3VyZW1lbnQgIiAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIgICAgICAgOiBOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1N0YXR1cyAgICAgOiBSZXR1cm5zIHRoZSBmcmVxdWVuY3kgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudCBzdGF0dXMgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ291bnRpbmcgY3ljbGUgbm90ICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZC4gICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRpbmcgY3ljbGUgc3RhcnRlZC4gIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ291bnRpbmcgY3ljbGUgc3RvcHBlZC4gIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1lYXN1cmVtZW50IGN5Y2xlIGlzIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkLiAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1VEU3RhdHVzICAgICAgOiAwIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kZSBkb3duICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kZSB1cCAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhZFZhbHVlICAgOiBSZXR1cm4gdGhlIG51bWJlciBvZiAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRzIGluIHRoZSBkZWZpbmVkICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGJhc2UuICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEZyZXF1ZW5jeSBtZWFzdXJlbWVudCBsb2dpYyBub3QgaW5pdGlhbGlzZWQuICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0RnJlcXVlbmN5TWVhc3VyZW1lbnQiIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlQQllURSBwYl9TdGF0dXMsIFBCWVRFIHBiX1VEU3RhdHVzLCBQVUxPTkcgcHVsX1JlYWRWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUlOVCB1aV8xNkJpdFZhbHVlOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmcmVxdWVuY3kgbWVzdXJlbWVudCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBlbmFibGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfSW5pdEZsYWcuCisJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGUgPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMzIgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IHN0b3AgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZHdfU3RhdHVzUmVnICYgMSkgeworCQkJCQkJKnBiX1N0YXR1cyA9IDI7CisJCQkJCQkqcGJfVURTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1c1JlZyA+PgorCQkJCQkJCQkxKSAmIDMpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgdmFsdWUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCSpwdWxfUmVhZFZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAyOCArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQlpZiAoKnBiX1VEU3RhdHVzID09IDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgY291bnRlciBtb2RlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc19TaWVtZW5zQ291bnRlckluZm8uc19Nb2RlUmVnaXN0ZXIuc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMSAmIEFQQ0kxNzEwXzE2QklUX0NPVU5URVIpID09IEFQQ0kxNzEwXzE2QklUX0NPVU5URVIpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMSBwdWxzZSBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKCpwdWxfUmVhZFZhbHVlICYgMHhGRkZGVSkgIT0gMCkgeworCQkJCQkJCQkJdWlfMTZCaXRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkweEZGRkZVOworCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKCpwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RkZGRjAwMDBVTCkKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJKDB4RkZGRlUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJdWlfMTZCaXRWYWx1ZSk7CisJCQkJCQkJCX0KKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKnB1bF9SZWFkVmFsdWUgJiAweEZGRkYwMDAwVUwpICE9IDApIHsKKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCQkxNikKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVUwpCisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoMHhGRkZGVSAtIHVpXzE2Qml0VmFsdWUpIDw8IDE2KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWlmICgqcHVsX1JlYWRWYWx1ZSAhPSAwKSB7CisJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkweEZGRkZGRkZGVUwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlmICgqcGJfVURTdGF0dXMgPT0gMSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKnB1bF9SZWFkVmFsdWUgJiAweEZGRkYwMDAwVUwpICE9IDApIHsKKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCQkxNikKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVUwpCisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoMHhGRkZGVSAtIHVpXzE2Qml0VmFsdWUpIDw8IDE2KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWlmICgqcGJfVURTdGF0dXMKKwkJCQkJCQkJCT09IDIpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMSBwdWxzZSBvY2N1ciAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKCpwdWxfUmVhZFZhbHVlICYgMHhGRkZGVSkgIT0gMCkgeworCQkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQlwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkJMHhGRkZGVTsKKwkJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4RkZGRjAwMDBVTCkKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoMHhGRkZGVQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCXVpXzE2Qml0VmFsdWUpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJKnBiX1N0YXR1cyA9IDE7CisJCQkJCQkqcGJfVURTdGF0dXMgPSAwOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJKnBiX1N0YXR1cyA9IDA7CisJCQkJCSpwYl9VRFN0YXR1cyA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTNjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzE2QklUX0NPVU5URVIJCQkweDEwCisjZGVmaW5lIEFQQ0kxNzEwXzMyQklUX0NPVU5URVIJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfUVVBRFJVUExFX01PREUJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfRE9VQkxFX01PREUJCQkweDMKKyNkZWZpbmUgQVBDSTE3MTBfU0lNUExFX01PREUJCQkweEYKKyNkZWZpbmUgQVBDSTE3MTBfRElSRUNUX01PREUJCQkweDgwCisjZGVmaW5lIEFQQ0kxNzEwX0hZU1RFUkVTSVNfT04JCQkweDYwCisjZGVmaW5lIEFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ1JFTUVOVAkJCTB4NjAKKyNkZWZpbmUgQVBDSTE3MTBfREVDUkVNRU5UCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0xBVENIX0NPVU5URVIJCQkweDEKKyNkZWZpbmUgQVBDSTE3MTBfQ0xFQVJfQ09VTlRFUgkJCTB4MAorI2RlZmluZSBBUENJMTcxMF9MT1cJCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0hJR0gJCQkJMHgxCisKKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBWZXJzaW9uIDA2MDAtMDIyOSAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQVBDSTE3MTBfSElHSF9FREdFX0NMRUFSX0NPVU5URVIJCTB4MAorI2RlZmluZSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQ09VTlRFUgkJMHgxCisjZGVmaW5lIEFQQ0kxNzEwX0xPV19FREdFX0NMRUFSX0NPVU5URVIJCQkweDIKKyNkZWZpbmUgQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQ09VTlRFUgkJCTB4MworI2RlZmluZSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSCTB4NQorI2RlZmluZSBBUENJMTcxMF9TT1VSQ0VfMAkJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfU09VUkNFXzEJCQkJMHgxCisKKyNkZWZpbmUgQVBDSTE3MTBfMzBNSFoJCQkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCQkJMzMKKyNkZWZpbmUgQVBDSTE3MTBfNDBNSFoJCQkJNDAKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfTEFUQ0hfSU5UICAgIAkJMHg4MAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0xBVENIX0lOVCAgIAkJKH5BUENJMTcxMF9FTkFCTEVfTEFUQ0hfSU5UKQorCisjZGVmaW5lIEFQQ0kxNzEwX0lOREVYX0xBVENIX0NPVU5URVIJCTB4MTAKKyNkZWZpbmUgQVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFCQkweDgKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0lOREVYCQkJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfSU5ERVgJCQkofkFQQ0kxNzEwX0VOQUJMRV9JTkRFWCkKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0xBVENIX0FORF9DTEVBUgkJMHg4CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfTEFUQ0hfQU5EX0NMRUFSCSh+QVBDSTE3MTBfRU5BQkxFX0xBVENIX0FORF9DTEVBUikKKyNkZWZpbmUgQVBDSTE3MTBfU0VUX0xPV19JTkRFWF9MRVZFTAkJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX1NFVF9ISUdIX0lOREVYX0xFVkVMCQkofkFQQ0kxNzEwX1NFVF9MT1dfSU5ERVhfTEVWRUwpCisjZGVmaW5lIEFQQ0kxNzEwX0lOVkVSVF9JTkRFWF9SRkVSRU5DRQkJMHgyCisjZGVmaW5lIEFQQ0kxNzEwX0RFRkFVTFRfSU5ERVhfUkZFUkVOQ0UgICAgICAgICAofkFQQ0kxNzEwX0lOVkVSVF9JTkRFWF9SRkVSRU5DRSkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfSU5ERVhfSU5UCQkweDEKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9JTkRFWF9JTlQJCSh+QVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVCkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZCQkweDQKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9GUkVRVUVOQ1kJCSh+QVBDSTE3MTBfRU5BQkxFX0ZSRVFVRU5DWSkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZX0lOVAkJMHg4CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZX0lOVAkJKH5BUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZX0lOVCkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfNDBNSFpfRlJFUVVFTkNZCQkweDQwCisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfNDBNSFpfRlJFUVVFTkNZCSh+QVBDSTE3MTBfRU5BQkxFXzQwTUhaX0ZSRVFVRU5DWSkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfNDBNSFpfRklMVEVSCQkweDgwCisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfNDBNSFpfRklMVEVSCQkofkFQQ0kxNzEwX0VOQUJMRV80ME1IWl9GSUxURVIpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0NPTVBBUkVfSU5UCQkweDIKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9DT01QQVJFX0lOVAkJKH5BUENJMTcxMF9FTkFCTEVfQ09NUEFSRV9JTlQpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0lOREVYX0FDVElPTgkJMHgyMAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0lOREVYX0FDVElPTgkJKH5BUENJMTcxMF9FTkFCTEVfSU5ERVhfQUNUSU9OKQorI2RlZmluZSBBUENJMTcxMF9SRUZFUkVOQ0VfSElHSAkJCTB4NDAKKyNkZWZpbmUgQVBDSTE3MTBfUkVGRVJFTkNFX0xPVwkJCSh+QVBDSTE3MTBfUkVGRVJFTkNFX0hJR0gpCisKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dBVEVfTE9XCQkJMHg0MAorI2RlZmluZSBBUENJMTcxMF9UT1JfR0FURV9ISUdICQkJKH5BUENJMTcxMF9UT1JfR0FURV9MT1cpCisKKy8qIElOU04gQ09ORklHICovCisjZGVmaW5lCUFQQ0kxNzEwX0lOQ0NQVF9JTklUQ09VTlRFUgkJCQkxMDAKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0NPVU5URVJBVVRPVEVTVAkJCQkxMDEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRJTkRFWAkJCQkxMDIKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRSRUZFUkVOQ0UJCQkJMTAzCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9JTklURVhURVJOQUxTVFJPQkUJCQkxMDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRDT01QQVJFTE9HSUMJCQkxMDUKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRGUkVRVUVOQ1lNRUFTVVJFTUVOVAkJMTA2CisKKy8qIElOU04gUkVBRCAqLworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBRExBVENIUkVHSVNURVJTVEFUVVMJCQkyMDAKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQURMQVRDSFJFR0lTVEVSVkFMVUUJCQkyMDEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQUQxNkJJVENPVU5URVJWQUxVRQkJCTIwMgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBRDMyQklUQ09VTlRFUlZBTFVFCQkJMjAzCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVRJTkRFWFNUQVRVUwkJCQkyMDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0dFVFJFRkVSRU5DRVNUQVRVUwkJCTIwNQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUVUFTU1RBVFVTCQkJCTIwNgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUQ0JTVEFUVVMJCQkJMjA3CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVQxNkJJVENCU1RBVFVTCQkJMjA4CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVRVRFNUQVRVUwkJCQkyMDkKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0dFVElOVEVSUlVQVFVETEFUQ0hFRFNUQVRVUwkJMjEwCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9SRUFERlJFUVVFTkNZTUVBU1VSRU1FTlQJCTIxMQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBRElOVEVSUlVQVAkJCQkyMTIKKworLyogSU5TTiBCSVRTICovCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9DTEVBUkNPVU5URVJWQUxVRQkJCTMwMAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJBTExDT1VOVEVSVkFMVUUJCQkzMDEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1NFVElOUFVURklMVEVSCQkJCTMwMgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfTEFUQ0hDT1VOVEVSCQkJCTMwMworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfU0VUSU5ERVhBTkRSRUZFUkVOQ0VTT1VSQ0UJCTMwNAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfU0VURElHSVRBTENITE9OCQkJCTMwNQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfU0VURElHSVRBTENITE9GRgkJCTMwNgorCisvKiBJTlNOIFdSSVRFICovCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVMQVRDSElOVEVSUlVQVAkJCTQwMAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUxBVENISU5URVJSVVBUCQkJNDAxCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9XUklURTE2QklUQ09VTlRFUlZBTFVFCQkJNDAyCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9XUklURTMyQklUQ09VTlRFUlZBTFVFCQkJNDAzCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVJTkRFWAkJCQk0MDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVJTkRFWAkJCQk0MDUKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0VOQUJMRUNPTVBBUkVMT0dJQwkJCTQwNgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUNPTVBBUkVMT0dJQwkJCTQwNworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFRlJFUVVFTkNZTUVBU1VSRU1FTlQJCTQwOAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUZSRVFVRU5DWU1FQVNVUkVNRU5UCQk0MDkKKworLyoqKioqKioqKioqKiBNYWluIEZ1bmN0aW9ucyAqKioqKioqKioqKioqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0lOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0lOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qKioqKioqKioqKiBTdXBwbGVtZW50YXJ5IEZ1bmN0aW9ucyoqKioqKioqLworCisvKiBJTlNOIENPTkZJRyAqLworSU5UIGlfQVBDSTE3MTBfSW5pdENvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCSAgIEJZVEUgYl9Db3VudGVyUmFuZ2UsCisJCQkgICBCWVRFIGJfRmlyc3RDb3VudGVyTW9kdXMsCisJCQkgICBCWVRFIGJfRmlyc3RDb3VudGVyT3B0aW9uLAorCQkJICAgQllURSBiX1NlY29uZENvdW50ZXJNb2R1cywKKwkJCSAgIEJZVEUgYl9TZWNvbmRDb3VudGVyT3B0aW9uKTsKKworSU5UIGlfQVBDSTE3MTBfQ291bnRlckF1dG9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIFBCWVRFIHBiX1Rlc3RTdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9Jbml0SW5kZXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSBCWVRFIGJfTW9kdWxOYnIsCisJCQkgQllURSBiX1JlZmVyZW5jZUFjdGlvbiwKKwkJCSBCWVRFIGJfSW5kZXhPcGVyYXRpb24sIEJZVEUgYl9BdXRvTW9kZSwKKwkJCSBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9SZWZlcmVuY2VMZXZlbCk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRFeHRlcm5hbFN0cm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfRXh0ZXJuYWxTdHJvYmUsCisJCQkJICBCWVRFIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQlCWVRFIGJfTW9kdWxOYnIsIFVJTlQgdWlfQ29tcGFyZVZhbHVlKTsKKworSU5UIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCUJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJQllURSBiX1BDSUlucHV0Q2xvY2ssCisJCQkJCUJZVEUgYl9UaW1pbmdVbml0eSwKKwkJCQkJVUxPTkcgdWxfVGltaW5nSW50ZXJ2YWwsCisJCQkJCVBVTE9ORyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKTsKKworLyogSU5TTiBCSVRTICovCitJTlQgaV9BUENJMTcxMF9DbGVhckNvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9DbGVhckFsbENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKworSU5UIGlfQVBDSTE3MTBfU2V0SW5wdXRGaWx0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1BDSUlucHV0Q2xvY2ssCisJCQkgICAgICBCWVRFIGJfRmlsdGVyKTsKKworSU5UIGlfQVBDSTE3MTBfTGF0Y2hDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcpOworCitJTlQgaV9BUENJMTcxMF9TZXRJbmRleEFuZFJlZmVyZW5jZVNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJICBCWVRFIGJfU291cmNlU2VsZWN0aW9uKTsKKworSU5UIGlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworLyogSU5TTiBXUklURSAqLworSU5UIGlfQVBDSTE3MTBfRW5hYmxlTGF0Y2hJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUxhdGNoSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlMTZCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9TZWxlY3RlZENvdW50ZXIsCisJCQkJICAgICAgVUlOVCB1aV9Xcml0ZVZhbHVlKTsKKworSU5UIGlfQVBDSTE3MTBfV3JpdGUzMkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgVUxPTkcgdWxfV3JpdGVWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9FbmFibGVDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUNvbXBhcmVMb2dpYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9FbmFibGVGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJICBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIEJZVEUgYl9Nb2R1bE5icik7CisKKy8qIElOU04gUkVBRCAqLworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcsCisJCQkJICAgICAgIFBCWVRFIHBiX0xhdGNoU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0xhdGNoUmVnLAorCQkJCSAgICAgIFBVTE9ORyBwdWxfTGF0Y2hWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQxNkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfU2VsZWN0ZWRDb3VudGVyLAorCQkJCSAgICAgUFVJTlQgcHVpX0NvdW50ZXJWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgQllURSBiX01vZHVsTmJyLCBQVUxPTkcgcHVsX0NvdW50ZXJWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldEluZGV4U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0luZGV4U3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0UmVmZXJlbmNlU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1JlZmVyZW5jZVN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldFVBU1N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgIEJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfVUFTU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0Q0JTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgIEJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfQ0JTdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9HZXQxNkJpdENCU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIwLAorCQkJCVBCWVRFIHBiX0NCU3RhdHVzQ291bnRlcjEpOworCitJTlQgaV9BUENJMTcxMF9HZXRVRFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VRFN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldEludGVycnVwdFVETGF0Y2hlZFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1VEU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfUmVhZEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCUJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJUEJZVEUgcGJfU3RhdHVzLCBQQllURSBwYl9VRFN0YXR1cywKKwkJCQkJUFVMT05HIHB1bF9SZWFkVmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM2YTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMKQEAgLTAsMCArMSw4NjEgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBJbnBfQ1BULkMgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIHB1bHNlIGVuY29kZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJBUENJMTcxMF9JbnBfY3B0LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRQdWxzZUVuY29kZXIgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgICAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfUHVsc2VFbmNvZGVyTmJyLCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9JbnB1dExldmVsU2VsZWN0aW9uLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX1RyaWdnZXJPdXRwdXRBY3Rpb24sICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgICAgICAgdWxfU3RhcnRWYWx1ZSkgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBwdWxzZSBlbmNvZGVyIG9wZXJhdGluZyBtb2RlIHNlbGVjdGVkIHZpYXwKK3wgICAgICAgICAgICAgICAgICAgICBiX01vZHVsTmJyIGFuZCBiX1B1bHNlRW5jb2Rlck5ici4gVGhlIHB1bHNlIGVuY29kZXIgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGVhY2ggcHVsc2UgZGVjcmVtZW50IHRoZSBjb3VudGVyIHZhbHVlIGZyb20gMS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsIGFueSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBwdWxzZSBlbmNvZGVycy4gICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1B1bHNlRW5jb2Rlck5iciAgICAgOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnB1dExldmVsU2VsZWN0aW9uIDogSW5wdXQgbGV2ZWwgc2VsZWN0aW9uICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogU2V0IHB1bHNlIGVuY29kZXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCB0aGUgdGhlIGxvd3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIHB1bHNlLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogU2V0IHB1bHNlIGVuY29kZXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCB0aGUgdGhlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggbGV2ZWwgcHVsc2UufAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVHJpZ2dlck91dHB1dEFjdGlvbiA6IERpZ2l0YWwgVFJJR0dFUiBvdXRwdXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IE5vIGFjdGlvbiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogU2V0IHRoZSB0cmlnZ2VyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gIjEiICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWdoKSBhZnRlciB0aGUgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2FnZSBmcm9tIDEgdG98Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGZyb20gcHVsc2UgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIuICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogU2V0IHRoZSB0cmlnZ2VyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gIjAiICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb3cpIGFmdGVyIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2FnZSBmcm9tIDEgdG98Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGZyb20gcHVsc2UgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9TdGFydFZhbHVlICAgICAgICA6IFB1bHNlIGVuY29kZXIgc3RhcnQgdmFsdWV8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgdG8gNDI5NDk2NzI5NSkKKwliX01vZHVsTmJyCQkJCT0oQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9QdWxzZUVuY29kZXJOYnIJCT0oQllURSkgZGF0YVswXTsKKwliX0lucHV0TGV2ZWxTZWxlY3Rpb24JPShCWVRFKSBkYXRhWzFdOworCWJfVHJpZ2dlck91dHB1dEFjdGlvbgk9KEJZVEUpIGRhdGFbMl07CisJdWxfU3RhcnRWYWx1ZQkJCT0oVUxPTkcpIGRhdGFbM107CisgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogSW5wdXQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBEaWdpdGFsIFRSSUdHRVIgb3V0cHV0IGFjdGlvbiBzZWxlY3Rpb24gaXMgd3JvbmcgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFB1bHNlIGVuY29kZXIgc3RhcnQgdmFsdWUgaXMgd3JvbmcgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0UHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfSW50UmVnaXN0ZXI7CisKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1B1bHNlRW5jb2Rlck5icjsKKwlCWVRFIGJfSW5wdXRMZXZlbFNlbGVjdGlvbjsKKwlCWVRFIGJfVHJpZ2dlck91dHB1dEFjdGlvbjsKKwlVTE9ORyB1bF9TdGFydFZhbHVlOworCisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1B1bHNlRW5jb2Rlck5iciA9IChCWVRFKSBkYXRhWzBdOworCWJfSW5wdXRMZXZlbFNlbGVjdGlvbiA9IChCWVRFKSBkYXRhWzFdOworCWJfVHJpZ2dlck91dHB1dEFjdGlvbiA9IChCWVRFKSBkYXRhWzJdOworCXVsX1N0YXJ0VmFsdWUgPSAoVUxPTkcpIGRhdGFbM107CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPD0gMykgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHB1bHNlIGVuY29kZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJQVBDSTE3MTBfUFVMU0VfRU5DT0RFUikgPT0KKwkJCUFQQ0kxNzEwX1BVTFNFX0VOQ09ERVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgcHVsc2UgZW5jb2RlciBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QdWxzZUVuY29kZXJOYnIgPD0gMykgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBpbnB1dCBsZXZlbCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9JbnB1dExldmVsU2VsZWN0aW9uID09IDApCisJCQkJCXx8IChiX0lucHV0TGV2ZWxTZWxlY3Rpb24gPT0gMSkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBvdXB1dCBUUklHR0VSIGFjdGlvbiBzZWxlY3Rpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9UcmlnZ2VyT3V0cHV0QWN0aW9uIDw9IDIpCisJCQkJCQl8fCAoYl9QdWxzZUVuY29kZXJOYnIgPiAwKSkgeworCQkJCQkJaWYgKHVsX1N0YXJ0VmFsdWUgPiAxKSB7CisKKwkJCQkJCQlkd19JbnRSZWdpc3RlciA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMjAgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFNldCB0aGUgc3RhcnQgdmFsdWUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bCh1bF9TdGFydFZhbHVlLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKGJfUHVsc2VFbmNvZGVyTmJyCisJCQkJCQkJCQkqIDQpICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZXQgdGhlIGlucHV0IGxldmVsICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlkd19TZXRSZWdpc3RlciA9CisJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlkd19TZXRSZWdpc3RlciAmCisJCQkJCQkJCSgweEZGRkZGRkZGVUwgLQorCQkJCQkJCQkJKDFVTCA8PCAoOCArIGJfUHVsc2VFbmNvZGVyTmJyKSkpKSB8ICgoMVVMICYgKH5iX0lucHV0TGV2ZWxTZWxlY3Rpb24pKSA8PCAoOCArIGJfUHVsc2VFbmNvZGVyTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBvdXRwdXQgdHJpZ2dlciB1c2VkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChiX1RyaWdnZXJPdXRwdXRBY3Rpb24gPiAwKSAmJiAoYl9QdWxzZUVuY29kZXJOYnIgPiAxKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBvdXRwdXQgYWN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQl8ICgxVUwKKwkJCQkJCQkJCTw8ICg0ICsgYl9QdWxzZUVuY29kZXJOYnIpKTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIG91dHB1dCBUUklHR0VSIGFjdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkoMVVMIDw8ICgxMiArIGJfUHVsc2VFbmNvZGVyTmJyKSkpKSB8ICgoMVVMICYgKGJfVHJpZ2dlck91dHB1dEFjdGlvbiAtIDEpKSA8PCAoMTIgKyBiX1B1bHNlRW5jb2Rlck5icikpOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRGlzYWJsZSB0aGUgb3V0cHV0IGFjdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCSgweEZGRkZGRkZGVUwKKwkJCQkJCQkJCS0KKwkJCQkJCQkJCSgxVUwgPDwgKDQgKyBiX1B1bHNlRW5jb2Rlck5icikpKTsKKwkJCQkJCQl9CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2V0IHRoZSBjb25maWd1cmF0aW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlkd19TZXRSZWdpc3RlciwKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTIwICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJJbmZvCisJCQkJCQkJCVtiX1B1bHNlRW5jb2Rlck5icl0uCisJCQkJCQkJCWJfUHVsc2VFbmNvZGVySW5pdAorCQkJCQkJCQk9IDE7CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUHVsc2UgZW5jb2RlciBzdGFydCB2YWx1ZSBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJQdWxzZSBlbmNvZGVyIHN0YXJ0IHZhbHVlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIERpZ2l0YWwgVFJJR0dFUiBvdXRwdXQgYWN0aW9uIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkRpZ2l0YWwgVFJJR0dFUiBvdXRwdXQgYWN0aW9uIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIElucHV0IGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiSW5wdXQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgcHVsc2UgZW5jb2RlciBtb2R1bGVcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlUHVsc2VFbmNvZGVyICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9QdWxzZUVuY29kZXJOYnIsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0N5Y2xlU2VsZWN0aW9uLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfSW50ZXJydXB0SGFuZGxpbmcpICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlb3IgZGlzYWJsZSAgdGhlIHNlbGVjdGVkIHB1bHNlIGVuY29kZXIgKGJfUHVsc2VFbmNvZGVyTmJyKSAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gRWFjaCBpbnB1dCBwdWxzZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50IHRoZSBwdWxzZSBlbmNvZGVyIGNvdW50ZXIgdmFsdWUgZnJvbSAxLiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5hYmxlZCB0aGUgaW50ZXJydXB0IChiX0ludGVycnVwdEhhbmRsaW5nKSwgYSAgfAorfCAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgcHVsc2UgZW5jb2RlciBoYXMgcnVuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZG93bi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9QdWxzZUVuY29kZXJOYnIgICA6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfQ3ljbGVTZWxlY3Rpb24gICAgOiBBUENJMTcxMF9DT05USU5VT1VTOiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHRpbWUgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50aW5nIHZhbHVlIGlzIHNldHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gIjAiLCB0aGUgcHVsc2UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIGxvYWQgdGhlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHZhbHVlIGFmdGVyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgcHVsc2UuICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX1NJTkdMRTogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb3VudGVyIGlzIHNldHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gIjAiLCB0aGUgcHVsc2UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIGlzIHN0b3BwZWQuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0ludGVycnVwdEhhbmRsaW5nIDogSW50ZXJydXB0cyBjYW4gYmUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQsIHdoZW4gdGhlIHB1bHNlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgaGFzIHJ1biBkb3duLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIHBhcmFtZXRlciB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIGRlY2lkZXMgaWYgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgYXJlIHVzZWQgb3IgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90LiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRTogICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhcmUgZW5hYmxlZCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFOiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYXJlIGRpc2FibGVkCisKKyAgCWJfTW9kdWxOYnIJCQk9KEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uCQkJPShCWVRFKSBkYXRhWzBdOworCWJfUHVsc2VFbmNvZGVyTmJyCT0oQllURSkgZGF0YVsxXTsKKwliX0N5Y2xlU2VsZWN0aW9uCT0oQllURSkgZGF0YVsyXTsKKwliX0ludGVycnVwdEhhbmRsaW5nCT0oQllURSkgZGF0YVszXTt8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUHVsc2UgZW5jb2RlciBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdFB1bHNlRW5jb2RlciIgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IEN5Y2xlIHNlbGVjdGlvbiBtb2RlIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogSW50ZXJydXB0IGhhbmRsaW5nIG1vZGUgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBJbnRlcnJ1cHQgcm91dGluZSBub3QgaW5zdGFsbGVkLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZVB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfUHVsc2VFbmNvZGVyTmJyOworCUJZVEUgYl9DeWNsZVNlbGVjdGlvbjsKKwlCWVRFIGJfSW50ZXJydXB0SGFuZGxpbmc7CisJQllURSBiX0FjdGlvbjsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9BY3Rpb24gPSAoQllURSkgZGF0YVswXTsKKwliX1B1bHNlRW5jb2Rlck5iciA9IChCWVRFKSBkYXRhWzFdOworCWJfQ3ljbGVTZWxlY3Rpb24gPSAoQllURSkgZGF0YVsyXTsKKwliX0ludGVycnVwdEhhbmRsaW5nID0gKEJZVEUpIGRhdGFbM107CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDw9IDMpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBzZWxlY3RlZCBwdWxzZSBlbmNvZGVyIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfUHVsc2VFbmNvZGVyTmJyIDw9IDMpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQlzX1B1bHNlRW5jb2RlckluZm9bYl9QdWxzZUVuY29kZXJOYnJdLgorCQkJCWJfUHVsc2VFbmNvZGVySW5pdCA9PSAxKSB7CisJCQkJc3dpdGNoIChiX0FjdGlvbikgeworCisJCQkJY2FzZSBBUENJMTcxMF9FTkFCTEU6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgY3ljbGUgc2VsZWN0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9DeWNsZVNlbGVjdGlvbiA9PQorCQkJCQkJQVBDSTE3MTBfQ09OVElOVU9VUworCQkJCQkJfHwgYl9DeWNsZVNlbGVjdGlvbiA9PQorCQkJCQkJQVBDSTE3MTBfU0lOR0xFKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBoYW5kbGluZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX0ludGVycnVwdEhhbmRsaW5nID09CisJCQkJCQkJQVBDSTE3MTBfRU5BQkxFCisJCQkJCQkJfHwgYl9JbnRlcnJ1cHRIYW5kbGluZworCQkJCQkJCT09IEFQQ0kxNzEwX0RJU0FCTEUpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgbm90IHVzZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9JbnRlcnJ1cHRIYW5kbGluZworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFKQorCQkJCQkJCXsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJLQorCQkJCQkJCQkJKDFVTCA8PCBiX1B1bHNlRW5jb2Rlck5icikpOworCQkJCQkJCX0gZWxzZSB7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJfCAoMVVMCisJCQkJCQkJCQk8PAorCQkJCQkJCQkJYl9QdWxzZUVuY29kZXJOYnIpOworCQkJCQkJCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8vIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZQorCisJCQkJCQkJfQorCisJCQkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDIwICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBwdWxzZSBlbmNvZGVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyCisJCQkJCQkJCQl8ICgxVUwKKwkJCQkJCQkJCTw8CisJCQkJCQkJCQliX1B1bHNlRW5jb2Rlck5icik7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY3ljbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlcgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkoMSA8PCAoYl9QdWxzZUVuY29kZXJOYnIgKyA0KSkpKSB8ICgoYl9DeWNsZVNlbGVjdGlvbiAmIDFVTCkgPDwgKDQgKyBiX1B1bHNlRW5jb2Rlck5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBFbmFibGUgdGhlIHB1bHNlIGVuY29kZXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDE2ICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBJbnRlcnJ1cHQgaGFuZGxpbmcgbW9kZSBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIkludGVycnVwdCBoYW5kbGluZyBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ3ljbGUgc2VsZWN0aW9uIG1vZGUgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkN5Y2xlIHNlbGVjdGlvbiBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfRElTQUJMRToKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyICYKKwkJCQkJCSgweEZGRkZGRkZGVUwgLQorCQkJCQkJKDFVTCA8PCBiX1B1bHNlRW5jb2Rlck5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgdGhlIHB1bHNlIGVuY29kZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlciwKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxNiArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQkvLyBzd2l0Y2ggRW5kCisKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWRQdWxzZUVuY29kZXJTdGF0dXMgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUHVsc2VFbmNvZGVyTmJyLCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfU3RhdHVzKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICBBUENJMTcxMF9QVUxTRUVOQ09ERVJfUkVBRCAgICAgICAgICA6IFJlYWRzIHRoZSBwdWxzZSBlbmNvZGVyIHN0YXR1cworCQkJCQkJCQkJCQlhbmQgdmFsdWVmcm9tIHNlbGVjdGVkIHB1bHNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciAoYl9QdWxzZUVuY29kZXJOYnIpIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJQllURSAgIGJfVHlwZTsgZGF0YVswXQorICAgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1dSSVRFCisgV3JpdGVzIGEgMzItYml0IHZhbHVlICh1bF9Xcml0ZVZhbHVlKSBpbnRvIHRoZSBzZWxlY3RlZHwKK3wgICAgICAgICAgICAgICAgICAgICBwdWxzZSBlbmNvZGVyIChiX1B1bHNlRW5jb2Rlck5icikgZnJvbSBzZWxlY3RlZCBtb2R1bGUgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gVGhpcyBvcGVyYXRpb24gc2V0IHRoZSBuZXcgc3RhcnQgcHVsc2UgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciB2YWx1ZS4KKyBBUENJMTcxMF9QVUxTRUVOQ09ERVJfUkVBRAorfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgQ1JBUkVGKCkgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgICB8Cit8ICAgICAgICAgICAgICBkYXRhWzFdICAgICAgIEJZVEVfICAgYl9QdWxzZUVuY29kZXJOYnIgICA6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykKKyAgIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9XUklURQorCQkJCWRhdGFbMl0JCVVMT05HXyB1bF9Xcml0ZVZhbHVlICAgICAgICA6IDMyLWJpdCB2YWx1ZSB0byBiZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfU3RhdHVzICAgICAgICAgICAgOiBQdWxzZSBlbmNvZGVyIHN0YXR1cy4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTm8gb3ZlcmZsb3cgb2NjdXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBPdmVyZmxvdyBvY2N1cgorCQkJCQkJUFVMT05HXyBwdWxfUmVhZFZhbHVlICAgICAgIDogUHVsc2UgZW5jb2RlciB2YWx1ZSAgICAgIHwgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRQdWxzZUVuY29kZXIiICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKl9JTlRfICAgaV9BUENJMTcxMF9SZWFkUHVsc2VFbmNvZGVyU3RhdHVzICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsCisJCQkJCQkgQllURV8gICBiX01vZHVsTmJyLAorCQkJCQkJIEJZVEVfICAgYl9QdWxzZUVuY29kZXJOYnIsCisKKyAgIAkJCQkJCSBQQllURV8gcGJfU3RhdHVzKQorCQkJCQkJICovCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRXcml0ZVB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZ2lzdGVyOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfUHVsc2VFbmNvZGVyTmJyOworCVBCWVRFIHBiX1N0YXR1czsKKwlCWVRFIGJfVHlwZTsKKwlQVUxPTkcgcHVsX1JlYWRWYWx1ZTsKKwlVTE9ORyB1bF9Xcml0ZVZhbHVlOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1R5cGUgPSAoQllURSkgZGF0YVswXTsKKwliX1B1bHNlRW5jb2Rlck5iciA9IChCWVRFKSBkYXRhWzFdOworCXBiX1N0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCXB1bF9SZWFkVmFsdWUgPSAoUFVMT05HKSAmIGRhdGFbMV07CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDw9IDMpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBzZWxlY3RlZCBwdWxzZSBlbmNvZGVyIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfUHVsc2VFbmNvZGVyTmJyIDw9IDMpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQlzX1B1bHNlRW5jb2RlckluZm9bYl9QdWxzZUVuY29kZXJOYnJdLgorCQkJCWJfUHVsc2VFbmNvZGVySW5pdCA9PSAxKSB7CisKKwkJCQlzd2l0Y2ggKGJfVHlwZSkgeworCQkJCWNhc2UgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1JFQUQ6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXNSZWdpc3RlciA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDE2ICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQlkd19TdGF0dXNSZWdpc3RlciA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgfAorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXI7CisKKwkJCQkJKnBiX1N0YXR1cyA9CisJCQkJCQkoQllURSkgKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgPj4gKDEgKworCQkJCQkJCWJfUHVsc2VFbmNvZGVyTmJyKSkgJiAxOworCisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X1N0YXR1c1JlZ2lzdGVyID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgJgorCQkJCQkJKDB4RkZGRkZGRkZVTCAtICgxIDw8ICgxICsKKwkJCQkJCQkJYl9QdWxzZUVuY29kZXJOYnIpKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCSpwdWxfUmVhZFZhbHVlID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCSg0ICogYl9QdWxzZUVuY29kZXJOYnIpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9XUklURToKKwkJCQkJdWxfV3JpdGVWYWx1ZSA9IChVTE9ORykgZGF0YVsyXTsKKwkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCW91dGwodWxfV3JpdGVWYWx1ZSwKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJKDQgKiBiX1B1bHNlRW5jb2Rlck5icikgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJfQkvL2VuZCBvZiBzd2l0Y2gKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkSW50ZXJydXB0UHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXVpX1JlYWQgPSAoZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCXJldHVybiBpbnNuLT5uOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjUyODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX1NJTkdMRQkJCTAKKyNkZWZpbmUgQVBDSTE3MTBfQ09OVElOVU9VUwkJMQorCisjZGVmaW5lIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9SRUFECTAKKyNkZWZpbmUgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1dSSVRFCTEKKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCSAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIFJFQUQgUFVMU0UgRU5DT0RFUiBGVU5DVElPTlMKKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRJbnRlcnJ1cHRQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIFdSSVRFIFBVTFNFIEVOQ09ERVIgRlVOQ1RJT05TCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzUmVhZFdyaXRlUHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGRkMDkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYwpAQCAtMCwwICsxLDM1ODggQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBQV00uQyAgICAgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIFd1bHNlIHdpZGUgbW9kdWxhdGlvbiBtb2R1bGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwX1B3bS5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFB3bSBJbml0IGFuZCBHZXQgUHdtIEluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9Db25maWdUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwliX0NvbmZpZ1R5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYl9Db25maWdUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9QV01fSU5JVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdFBXTShkZXYsIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwJLy8gIGJfTW9kdWxOYnIKKwkJCShCWVRFKSBkYXRhWzBdLAkvL2JfUFdNCisJCQkoQllURSkgZGF0YVsxXSwJLy8gYl9DbG9ja1NlbGVjdGlvbgorCQkJKEJZVEUpIGRhdGFbMl0sCS8vIGJfVGltaW5nVW5pdAorCQkJKFVMT05HKSBkYXRhWzNdLAkvL3VsX0xvd1RpbWluZworCQkJKFVMT05HKSBkYXRhWzRdLAkvL3VsX0hpZ2hUaW1pbmcKKwkJCShQVUxPTkcpICYgZGF0YVswXSwJLy9wdWxfUmVhbExvd1RpbWluZworCQkJKFBVTE9ORykgJiBkYXRhWzFdCS8vcHVsX1JlYWxIaWdoVGltaW5nCisJCQkpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfUFdNX0dFVElOSVREQVRBOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbihkZXYsIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwJLy8gYl9Nb2R1bE5icgorCQkJKEJZVEUpIGRhdGFbMF0sCS8vYl9QV00KKwkJCShQQllURSkgJiBkYXRhWzBdLAkvL3BiX1RpbWluZ1VuaXQKKwkJCShQVUxPTkcpICYgZGF0YVsxXSwJLy9wdWxfTG93VGltaW5nCisJCQkoUFVMT05HKSAmIGRhdGFbMl0sCS8vcHVsX0hpZ2hUaW1pbmcKKwkJCShQQllURSkgJiBkYXRhWzNdLAkvLyBwYl9TdGFydExldmVsCisJCQkoUEJZVEUpICYgZGF0YVs0XSwJLy8gcGJfU3RvcE1vZGUKKwkJCShQQllURSkgJiBkYXRhWzVdLAkvLyBwYl9TdG9wTGV2ZWwKKwkJCShQQllURSkgJiBkYXRhWzZdLAkvLyBwYl9FeHRlcm5HYXRlCisJCQkoUEJZVEUpICYgZGF0YVs3XSwJLy8gcGJfSW50ZXJydXB0RW5hYmxlCisJCQkoUEJZVEUpICYgZGF0YVs4XQkvLyBwYl9FbmFibGUKKwkJCSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgQ29uZmlnIFBhcmFtZXRlciBXcm9uZ1xuIik7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdFBXTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9QV00sICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0Nsb2NrU2VsZWN0aW9uLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltaW5nVW5pdCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9Mb3dUaW1pbmcsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgIHVsX0hpZ2hUaW1pbmcsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhbExvd1RpbWluZywgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9SZWFsSGlnaFRpbWluZykgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIHNlbGVjdGVkIFBXTSAoYl9QV00pIGZyb20gc2VsZWN0ZWQgbW9kdWxlfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gVGhlIHVsX0xvd1RpbWluZywgdWxfSGlnaFRpbWluZyBhbmQgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdWxfVGltaW5nVW5pdCBkZXRlcm1pbmUgdGhlIGxvdy9oaWdoIHRpbWluZyBiYXNlIGZvciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgcGVyaW9kLiBwdWxfUmVhbExvd1RpbWluZywgcHVsX1JlYWxIaWdoVGltaW5nICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGUgcmVhbCB0aW1pbmcgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCBhbnkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgdGhlIFBXTS4gICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICAgIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUFdNICAgICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9DbG9ja1NlbGVjdGlvbiA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgMzAgTUh6ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIGJ1cyBjbG9jayAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgMzMgTUh6ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIGJ1cyBjbG9jayAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF80ME1IWiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUENJLTE3MTAgaGF2ZSBhICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCA0ME1oeiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydHouICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1pbmdVbml0ICAgICA6IEJhc2UgdGltaW5nIFVuaXQgKDAgdG8gNCkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogbnMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiDDpnMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBtcyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IHMgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogbW4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgIHVsX0xvd1RpbWluZyAgICAgOiBMb3cgYmFzZSB0aW1pbmcgdmFsdWUuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICAgdWxfSGlnaFRpbWluZyAgICA6IEhpZ2ggYmFzZSB0aW1pbmcgdmFsdWUuICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcHVsX1JlYWxMb3dUaW1pbmcgIDogUmVhbCBsb3cgYmFzZSB0aW1pbmcgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gIHB1bF9SZWFsSGlnaFRpbWluZyA6IFJlYWwgaGlnaCBiYXNlIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgc2VsZWN0ZWQgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRpbWluZyBVbml0IHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogTG93IGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC04OiBIaWdoIGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTk6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aXRoICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdFBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwKKwlCWVRFIGJfQ2xvY2tTZWxlY3Rpb24sCisJQllURSBiX1RpbWluZ1VuaXQsCisJVUxPTkcgdWxfTG93VGltaW5nLAorCVVMT05HIHVsX0hpZ2hUaW1pbmcsCisJUFVMT05HIHB1bF9SZWFsTG93VGltaW5nLCBQVUxPTkcgcHVsX1JlYWxIaWdoVGltaW5nKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9Mb3dUaW1lclZhbHVlID0gMDsKKwlVTE9ORyB1bF9IaWdoVGltZXJWYWx1ZSA9IDA7CisJRFdPUkQgZHdfQ29tbWFuZDsKKwlkb3VibGUgZF9SZWFsTG93VGltaW5nID0gMDsKKwlkb3VibGUgZF9SZWFsSGlnaFRpbWluZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBjbG9jayAqLworCQkgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopIHx8CisJCQkJCShiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgdGltaW5nIHVuaXQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfVGltaW5nVW5pdCA8PSA0KSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgbG93IHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAyNjYpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQkweEZGRkZGRkZGVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1NzEyMzA2NTBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTU3MTIzMFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAzKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTcxVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDQpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9IDlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMjQyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJMHhGRkZGRkZGRlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTE5NjkxMDQzVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1MTk2OTFVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMykKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTUyMFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSA0KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PSA4VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDIwMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTB4RkZGRkZGRkZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTQyOTQ5NjcyOVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNDI5NDk2VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDMpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk0MjlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gNCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTdVTCkpKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIEhpZ2ggdGltaW5nIHNlbGVjdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMjY2KSAmJiAodWxfSGlnaFRpbWluZyA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTcxMjMwNjUwVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTcxMjMwVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTcxVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gOVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9IaWdoVGltaW5nID49IDI0MikgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDUxOTY5MTA0M1VMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDUxOTY5MVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDUyMFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDhVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfSGlnaFRpbWluZyA+PSAyMDApICYmICh1bF9IaWdoVGltaW5nIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA0Mjk0OTY3MjlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA0Mjk0OTZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA0MjlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA3VUwpKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIGJvYXJkIHZlcnNpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChkZXZwcml2LT5zX0JvYXJkSW5mb3MuYl9Cb2FyZFZlcnNpb24gPiAwKSkgfHwgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopKSB7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBsb3cgZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlmcHVfYmVnaW4KKwkJCQkJCQkJCQkoKTsKKworCQkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAwMjUKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogw6ZzICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAxOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMC4yNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG1zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAyOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKiovCisJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgIC8qKioqKi8KKworCQkJCQkJCQkJY2FzZSAzOgorCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogbW4gKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDQ6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkodWxfTG93VGltaW5nCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQk2MCkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfTG93VGltaW5nICogNjAuMCkgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwLjA7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIGhpZ2ggZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgwLjAwMDI1ICogYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDE6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDAuMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWluZyAqICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBtcyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKiovCisJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgIC8qKioqKi8KKworCQkJCQkJCQkJY2FzZSAzOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG1uICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSA0OgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQk2MCkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfSGlnaFRpbWluZyAqIDYwLjApICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJNjAuMDsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlmcHVfZW5kKCk7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb247CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgdGltaW5nIHVuaXQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJYl9UaW1pbmdVbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgbG93IGJhc2UgdGltaW5nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQlkX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmc7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZzsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgaGlnaCBiYXNlIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJZF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmc7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFdyaXRlIHRoZSBsb3cgdGltaW5nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCh1bF9Mb3dUaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDAgKyAoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFdyaXRlIHRoZSBoaWdoIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlvdXRsKHVsX0hpZ2hUaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IHRoZSBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQk4CisJCQkJCQkJCQkJKworCQkJCQkJCQkJCSgyMCAqIGJfUFdNKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4N0Y7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkweDgwOworCQkJCQkJCQkJfQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bChkd19Db21tYW5kLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDggKyAoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFBXTSBpbml0LiAqLworCQkJCS8qKioqKioqKioqKioqLworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJCWJfUFdNSW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2l0aCAqLworCQkJCQkJCQkJLyogdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJRFBSSU5USygiWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggdGhpcyBib2FyZFxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJRFBSSU5USygiSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS04OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlEUFJJTlRLKCJMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQlEUFJJTlRLKCJUaW1pbmcgdW5pdCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJfQkvLyBpZiAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopIHx8IChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSB8fCAoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikpCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIGNsb2NrIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgfHwgKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopKQorCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BXTSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfVGltaW5nVW5pdCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9Mb3dUaW1pbmcsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0hpZ2hUaW1pbmcsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfU3RhcnRMZXZlbCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9TdG9wTW9kZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1N0b3BMZXZlbCwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfRXh0ZXJuR2F0ZSwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9JbnRlcnJ1cHRFbmFibGUsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0VuYWJsZSkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgUFdNIChiX1BXTSkgaW5pdGlhbGlzYXRpb24gZnJvbSBzZWxlY3RlZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0UFdNIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgdGhpcyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9QV00gICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKSAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfVGltaW5nVW5pdCAgICAgIDogQmFzZSB0aW1pbmcgVW5pdCAoMCB0byA0KSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBucyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IMOmcyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IG1zICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogcyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBtbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9Mb3dUaW1pbmcgICAgICA6IExvdyBiYXNlIHRpbWluZyB2YWx1ZS4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0hpZ2hUaW1pbmcgICAgIDogSGlnaCBiYXNlIHRpbWluZyB2YWx1ZS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9TdGFydExldmVsICAgICAgOiBTdGFydCBwZXJpb2QgbGV2ZWwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIHBlcmlvZCBzdGFydCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgbG93IGxldmVsIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFRoZSBwZXJpb2Qgc3RhcnQgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGhpZ2ggbGV2ZWx8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9TdG9wTW9kZSAgICAgICAgOiBTdG9wIG1vZGUgc2VsZWN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgUFdNIGlzIHN0b3BwZWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFmdGVyIHRoZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbmQgYnJlYWsgdGhlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcGVyaW9kICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQWZ0ZXIgdGhlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00ifAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRoZSBQV00gaXMgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBlZCBhdCB0aGUgZW5kICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGxhc3QgcGVyaW9kIGN5Y2xlfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfU3RvcExldmVsICAgICAgICA6IFN0b3AgUFdNIGxldmVsIHNlbGVjdGlvbiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgb3V0cHV0IHNpZ25hbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgdGhlIGxldmVsIGFmdGVyfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIG91dHB1dCBzaWduYWwgaXN8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gbG93IGFmdGVyIHRoZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00ifAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBUaGUgb3V0cHV0IHNpZ25hbCBpc3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0byBoaWdoIGFmdGVyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfRXh0ZXJuR2F0ZSAgICAgIDogRXh0ZXJuIGdhdGUgYWN0aW9uICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogRXh0ZXJuIGdhdGUgc2lnbmFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgdXNlZC4gICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEV4dGVybiBnYXRlIHNpZ25hbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlIFBXTSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfRU5BQkxFIDogICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIFBXTSBpbnRlcnJ1cHR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgaW50ZXJydXB0IG9jY3VyIGFmdGVyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBwZXJpb2QgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9ESVNBQkxFIDogICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIFBXTSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfRW5hYmxlICAgICAgICAgIDogSW5kaWNhdGUgaWYgdGhlIFBXTSBpcyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIG5vICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFBXTSBub3QgZW5hYmxlZCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogUFdNIGVuYWJsZWQgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFBXTSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwKKwlQQllURSBwYl9UaW1pbmdVbml0LAorCVBVTE9ORyBwdWxfTG93VGltaW5nLAorCVBVTE9ORyBwdWxfSGlnaFRpbWluZywKKwlQQllURSBwYl9TdGFydExldmVsLAorCVBCWVRFIHBiX1N0b3BNb2RlLAorCVBCWVRFIHBiX1N0b3BMZXZlbCwKKwlQQllURSBwYl9FeHRlcm5HYXRlLCBQQllURSBwYl9JbnRlcnJ1cHRFbmFibGUsIFBCWVRFIHBiX0VuYWJsZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X0NvbW1hbmQ7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIGxvdyB0aW1pbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcHVsX0xvd1RpbWluZyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDAgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBoaWdoIHRpbWluZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcHVsX0hpZ2hUaW1pbmcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA0ICsgKDIwICogYl9QV00pICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBjb21tYW5kICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfQ29tbWFuZCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArICgyMCAqIGJfUFdNKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX1N0YXJ0TGV2ZWwgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiA1KSAmIDEpOworCQkJCQkqcGJfU3RvcE1vZGUgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiAwKSAmIDEpOworCQkJCQkqcGJfU3RvcExldmVsID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gMSkgJiAxKTsKKwkJCQkJKnBiX0V4dGVybkdhdGUgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiA0KSAmIDEpOworCQkJCQkqcGJfSW50ZXJydXB0RW5hYmxlID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gMykgJiAxKTsKKworCQkJCQlpZiAoKnBiX1N0b3BMZXZlbCkgeworCQkJCQkJKnBiX1N0b3BMZXZlbCA9CisJCQkJCQkJKnBiX1N0b3BMZXZlbCArCisJCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PgorCQkJCQkJCQkyKSAmIDEpOworCQkJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgY29tbWFuZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDggKyAoMjAgKiBiX1BXTSkgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCSpwYl9FbmFibGUgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiAwKSAmIDEpOworCisJCQkJCSpwYl9UaW1pbmdVbml0ID0gZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQlzX1BXTUluZm9bYl9QV01dLmJfVGltaW5nVW5pdDsKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlBXTSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6SU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFB3bSBFbmFibGUgRGlzYWJsZSBhbmQgU2V0IE5ldyBUaW1pbmcgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX1dyaXRlVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJYl9Xcml0ZVR5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYl9Xcml0ZVR5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX1BXTV9FTkFCTEU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZVBXTShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwKKwkJCShCWVRFKSBkYXRhWzFdLAorCQkJKEJZVEUpIGRhdGFbMl0sCisJCQkoQllURSkgZGF0YVszXSwgKEJZVEUpIGRhdGFbNF0sIChCWVRFKSBkYXRhWzVdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1BXTV9ESVNBQkxFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlUFdNKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfUFdNX05FV1RJTUlORzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfU2V0TmV3UFdNVGltaW5nKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLAorCQkJKEJZVEUpIGRhdGFbMV0sIChVTE9ORykgZGF0YVsyXSwgKFVMT05HKSBkYXRhWzNdKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIldyaXRlIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9FbmFibGVQV00gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TdGFydExldmVsLCAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1N0b3BNb2RlLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfU3RvcExldmVsLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9FeHRlcm5HYXRlLCAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0ludGVycnVwdEVuYWJsZSkgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgc2VsZWN0ZWQgUFdNIChiX1BXTSkgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAiaV9BUENJMTcxMF9Jbml0UFdNInwKK3wgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmFibGUgdGhlIFBXTSBpbnRlcnJ1cHQsIHRoZSBQV00gZ2VuZXJhdGUgYSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IGFmdGVyIGVhY2ggcGVyaW9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgYW5kIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBtYXNrIGRlc2NyaXB0aW9uIGNoYXB0ZXIuICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1BXTSAgICAgICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU3RhcnRMZXZlbCAgICAgIDogU3RhcnQgcGVyaW9kIGxldmVsIHNlbGVjdGlvbiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBwZXJpb2Qgc3RhcnQgd2l0aCBhIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93IGxldmVsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgcGVyaW9kIHN0YXJ0IHdpdGggYSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggbGV2ZWwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1N0b3BNb2RlICAgICAgICA6IFN0b3AgbW9kZSBzZWxlY3Rpb24gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgUFdNIGlzIHN0b3BwZWQgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFmdGVyIHRoZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbmQgYnJlYWsgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcGVyaW9kICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQWZ0ZXIgdGhlICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNIiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aGUgUFdNIGlzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQgYXQgdGhlIGVuZCBmcm9tfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBwZXJpb2QgY3ljbGUuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TdG9wTGV2ZWwgICAgICAgOiBTdG9wIFBXTSBsZXZlbCBzZWxlY3Rpb24gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIG91dHB1dCBzaWduYWwga2VlcCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGV2ZWwgYWZ0ZXIgdGhlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00iIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgb3V0cHV0IHNpZ25hbCBpcyBzZXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxvdyBhZnRlciB0aGUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IFRoZSBvdXRwdXQgc2lnbmFsIGlzIHNldHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaGlnaCBhZnRlciB0aGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNIiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0V4dGVybkdhdGUgICAgICA6IEV4dGVybiBnYXRlIGFjdGlvbiBzZWxlY3Rpb24gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBFeHRlcm4gZ2F0ZSBzaWduYWwgbm90ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogRXh0ZXJuIGdhdGUgc2lnbmFsIHVzZWQufAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlIFBXTSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfRU5BQkxFIDogICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIFBXTSBpbnRlcnJ1cHQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgaW50ZXJydXB0IG9jY3VyIGFmdGVyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBwZXJpb2QgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIFBXTSBpbnRlcnJ1cHQgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiAgTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6ICBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogIE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiAgVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6ICBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogIFBXTSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6ICBQV00gc3RhcnQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogIFBXTSBzdG9wIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC04OiAgUFdNIHN0b3AgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTk6ICBFeHRlcm4gZ2F0ZSBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTA6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMTogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwKKwlCWVRFIGJfU3RhcnRMZXZlbCwKKwlCWVRFIGJfU3RvcE1vZGUsCisJQllURSBiX1N0b3BMZXZlbCwgQllURSBiX0V4dGVybkdhdGUsIEJZVEUgYl9JbnRlcnJ1cHRFbmFibGUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKwlEV09SRCBkd19Db21tYW5kOworCisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgc3RhcnQgbGV2ZWwgc2VsZWN0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9TdGFydExldmVsIDw9IDEpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgc3RvcCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfU3RvcE1vZGUgPD0gMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgc3RvcCBsZXZlbCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9TdG9wTGV2ZWwgPD0gMikgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIGV4dGVybiBnYXRlIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmIChiX0V4dGVybkdhdGUKKwkJCQkJCQkJCTw9IDEpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgYWN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8IGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGZ1bmN0aW9uIGluaXRpYWxpc2VkICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSZWFkIHRoZSBjb21tYW5kICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTgKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4ODA7CisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogTWFrZSB0aGUgY29tbWFuZCAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJYl9TdG9wTW9kZQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQkJCQk8PAorCQkJCQkJCQkJCQkzKQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0V4dGVybkdhdGUKKwkJCQkJCQkJCQkJPDwKKwkJCQkJCQkJCQkJNCkKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9TdGFydExldmVsCisJCQkJCQkJCQkJCTw8CisJCQkJCQkJCQkJCTUpOworCisJCQkJCQkJCQkJaWYgKGJfU3RvcExldmVsICYgMykgeworCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1N0b3BMZXZlbCAmIDIpIHsKKwkJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJCQk0OworCQkJCQkJCQkJCQl9CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGU7CisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCW91dGwoZHdfQ29tbWFuZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBFbmFibGUgdGhlIFBXTSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8IGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpCisJCQkJCQkJCQllbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJLTEwOworCQkJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8IGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpCisJCQkJCQkJCX0JLy8gaWYgKGJfRXh0ZXJuR2F0ZSA+PSAwICYmIGJfRXh0ZXJuR2F0ZSA8PSAxKQorCQkJCQkJCQllbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBFeHRlcm4gZ2F0ZSBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJRFBSSU5USygiRXh0ZXJuIGdhdGUgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCQl9CS8vIGlmIChiX1N0b3BMZXZlbCA+PSAwICYmIGJfU3RvcExldmVsIDw9IDIpCisJCQkJCQkJZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBQV00gc3RvcCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCURQUklOVEsoIlBXTSBzdG9wIGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTg7CisJCQkJCQkJfQkvLyBpZiAoYl9TdG9wTGV2ZWwgPj0gMCAmJiBiX1N0b3BMZXZlbCA8PSAyKQorCQkJCQkJfQkvLyBpZiAoYl9TdG9wTW9kZSA+PSAwICYmIGJfU3RvcE1vZGUgPD0gMSkKKwkJCQkJCWVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFBXTSBzdG9wIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJRFBSSU5USygiUFdNIHN0b3AgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0JLy8gaWYgKGJfU3RvcE1vZGUgPj0gMCAmJiBiX1N0b3BNb2RlIDw9IDEpCisJCQkJCX0JLy8gaWYgKGJfU3RhcnRMZXZlbCA+PSAwICYmIGJfU3RhcnRMZXZlbCA8PSAxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFBXTSBzdGFydCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCURQUklOVEsoIlBXTSBzdGFydCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmIChiX1N0YXJ0TGV2ZWwgPj0gMCAmJiBiX1N0YXJ0TGV2ZWwgPD0gMSkKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlBXTSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRGlzYWJsZVBXTSAoQllURV8gIGJfQm9hcmRIYW5kbGUsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1BXTSkgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgUFdNIChiX1BXTSkgZnJvbSBzZWxlY3RlZCBtb2R1bGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFRoZSBvdXRwdXQgc2lnbmFsIGxldmVsIGRlcGVuZCBvZiB0aGUgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2F0aW9uIGJ5IHRoZSAiaV9BUENJMTcxMF9FbmFibGVQV00iLiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBiX1N0YXJ0TGV2ZWwsIGJfU3RvcE1vZGUgYW5kIGJfU3RvcExldmVsICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGZyb20gdGhpcyBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDpCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpICAgfAorfCAgICAgICAgICAgICAgICAgICAgQllURV8gYl9QV00gICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKSAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBQV00gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogUFdNIG5vdCBlbmFibGVkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9FbmFibGVQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1BXTSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSAqLworCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfUFdNKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUFdNIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUFdNIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIFBXTSBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBEaXNhYmxlIHRoZSBQV00gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCQkoMjAgKiBiX1BXTSkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUFdNIG5vdCBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCURQUklOVEsoIlBXTSBub3QgZW5hYmxlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIiBQV00gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1NldE5ld1BXTVRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9DbG9ja1NlbGVjdGlvbiwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWluZ1VuaXQsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfTG93VGltaW5nLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9IaWdoVGltaW5nKSAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgYSBuZXcgdGltaW5nLiBUaGUgdWxfTG93VGltaW5nLCB1bF9IaWdoVGltaW5nIGFuZCAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVsX1RpbWluZ1VuaXQgZGV0ZXJtaW5lIHRoZSBsb3cvaGlnaCB0aW1pbmcgYmFzZSBmb3IgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHBlcmlvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BXTSAgICAgICAgICAgIDogU2VsZWN0ZWQgUFdNICgwIG9yIDEpLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltaW5nVW5pdCAgICAgOiBCYXNlIHRpbWluZyBVbml0ICgwIHRvIDQpIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IG5zICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogw6ZzICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogbXMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBzICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IG1uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgICB1bF9Mb3dUaW1pbmcgICAgIDogTG93IGJhc2UgdGltaW5nIHZhbHVlLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgIHVsX0hpZ2hUaW1pbmcgICAgOiBIaWdoIGJhc2UgdGltaW5nIHZhbHVlLiAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogUFdNIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaW1pbmcgVW5pdCBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6IExvdyBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfU2V0TmV3UFdNVGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfUFdNLCBCWVRFIGJfVGltaW5nVW5pdCwgVUxPTkcgdWxfTG93VGltaW5nLCBVTE9ORyB1bF9IaWdoVGltaW5nKQoreworCUJZVEUgYl9DbG9ja1NlbGVjdGlvbjsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfTG93VGltZXJWYWx1ZSA9IDA7CisJVUxPTkcgdWxfSGlnaFRpbWVyVmFsdWUgPSAwOworCVVMT05HIHVsX1JlYWxMb3dUaW1pbmcgPSAwOworCVVMT05HIHVsX1JlYWxIaWdoVGltaW5nID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfQ29tbWFuZDsKKwlkb3VibGUgZF9SZWFsTG93VGltaW5nID0gMDsKKwlkb3VibGUgZF9SZWFsSGlnaFRpbWluZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCQkJCWJfQ2xvY2tTZWxlY3Rpb24gPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCWJfQ2xvY2tTZWxlY3Rpb247CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHRpbWluZyB1bml0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1RpbWluZ1VuaXQgPD0gNCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGxvdyB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMjY2KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJMHhGRkZGRkZGRlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTcxMjMwNjUwVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1NzEyMzBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMykKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTU3MVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSA0KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PSA5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDI0MikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTB4RkZGRkZGRkZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTUxOTY5MTA0M1VMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTE5NjkxVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDMpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1MjBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gNCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0gOFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAyMDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQkweEZGRkZGRkZGVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk0Mjk0OTY3MjlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTQyOTQ5NlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAzKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNDI5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDQpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk3VUwpKSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBIaWdoIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9IaWdoVGltaW5nID49IDI2NikgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MTIzMDY1MFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MTIzMFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfSGlnaFRpbWluZyA+PSAyNDIpICYmICh1bF9IaWdoVGltaW5nIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MTk2OTEwNDNVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MTk2OTFVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MjBVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA4VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMjAwKSAmJiAodWxfSGlnaFRpbWluZyA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5NDk2NzI5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5NDk2VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gN1VMKSkpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBsb3cgZGl2aXNpb24gZmF0b3IgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlmcHVfYmVnaW4oKTsKKwkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMToKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4yNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCTAuMjUKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG1zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKiovCisJCQkJCQkJCQkvKiBzICovCisJCQkJLyoqKioqLworCisJCQkJCQkJCWNhc2UgMzoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWluZyAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBtbiAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSA0OgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTYwKQorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKSh1bF9Mb3dUaW1pbmcgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCTYwLjA7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgLyA2MC4wKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBoaWdoIGRpdmlzaW9uIGZhdG9yICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG5zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDA6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWluZyAqICgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMDAwMjUKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMToKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgwLjI1ICogYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsSGlnaFRpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqLworCQkJCQkJCQkJLyogcyAqLworCQkJCS8qKioqKi8KKworCQkJCQkJCQljYXNlIDM6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBtbiAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSA0OgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX0hpZ2hUaW1pbmcgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSkKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJNjA7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQk2MC4wOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCisJCQkJCQkJCWZwdV9lbmQoKTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTYXZlIHRoZSB0aW1pbmcgdW5pdCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQliX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2F2ZSB0aGUgbG93IGJhc2UgdGltaW5nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQlkX0xvd1RpbWluZworCQkJCQkJCQkJPQorCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nOworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQk9CisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTYXZlIHRoZSBoaWdoIGJhc2UgdGltaW5nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQlkX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmc7CisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQk9CisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBXcml0ZSB0aGUgbG93IHRpbWluZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwodWxfTG93VGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBXcml0ZSB0aGUgaGlnaCB0aW1pbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bCh1bF9IaWdoVGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZHdfQ29tbWFuZCA9CisJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsgOCArCisJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJZHdfQ29tbWFuZCA9CisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkmIDB4N0Y7CisKKwkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkweDgwOworCQkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKGR3X0NvbW1hbmQsCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsgOCArCisJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJRFBSSU5USygiSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS04OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlEUFJJTlRLKCJMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQlEUFJJTlRLKCJUaW1pbmcgdW5pdCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUFdNIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJQV00gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFBXTVN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9QV01PdXRwdXRTdGF0dXMsICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0V4dGVybkdhdGVTdGF0dXMpICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgUFdNIChiX1BXTSkgZnJvbSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUFdNICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykKKwliX01vZHVsTmJyCQkJPShCWVRFKSAgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9QV00JCQkJPShCWVRFKSAgZGF0YVswXTsKKworIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfUFdNT3V0cHV0U3RhdHVzICA6IFJldHVybiB0aGUgUFdNIG91dHB1dCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgc3RhdHVzLiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBQV00gb3V0cHV0IGxldmVsfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbG93LiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgUFdNIG91dHB1dCBsZXZlbHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGhpZ2guICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfRXh0ZXJuR2F0ZVN0YXR1cyA6IFJldHVybiB0aGUgZXh0ZXJuIGdhdGUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgc3RhdHVzLiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBleHRlcm4gZ2F0ZSBpcyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93LiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgZXh0ZXJuIGdhdGUgaXMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2guCisgICAgcGJfUFdNT3V0cHV0U3RhdHVzCT0oUEJZVEUpIGRhdGFbMF07CisJcGJfRXh0ZXJuR2F0ZVN0YXR1cyA9KFBCWVRFKSBkYXRhWzFdOyAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFBXTSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBQV00gbm90IGVuYWJsZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0VuYWJsZVBXTSJ8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkR2V0UFdNU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9QV007CisJUEJZVEUgcGJfUFdNT3V0cHV0U3RhdHVzOworCVBCWVRFIHBiX0V4dGVybkdhdGVTdGF0dXM7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUFdNID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXBiX1BXTU91dHB1dFN0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCXBiX0V4dGVybkdhdGVTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVsxXTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBQV00gKi8KKwkgICAvKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BXTSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIFBXTSBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1BXTSA8PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgUFdNIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDEyICsgKDIwICogYl9QV00pICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MTApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBQV00gZW5hYmxlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkd19TdGF0dXMgJiAweDEpIHsKKwkJCQkJCSpwYl9QV01PdXRwdXRTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyA+PiA3KQorCQkJCQkJCSYgMSk7CisJCQkJCQkqcGJfRXh0ZXJuR2F0ZVN0YXR1cyA9CisJCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzID4+IDYpCisJCQkJCQkJJiAxKTsKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUFdNIG5vdCBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiUFdNIG5vdCBlbmFibGVkIFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiUFdNIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRQV01JbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJdWlfUmVhZCA9IChkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWQgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJcmV0dXJuIGluc24tPm47CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjdmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQVBDSTE3MTBfMzBNSFoJCTMwCisjZGVmaW5lIEFQQ0kxNzEwXzMzTUhaCQkzMworI2RlZmluZSBBUENJMTcxMF80ME1IWgkJNDAKKworI2RlZmluZSBBUENJMTcxMF9QV01fSU5JVAkJMAorI2RlZmluZSBBUENJMTcxMF9QV01fR0VUSU5JVERBVEEJMQorCisjZGVmaW5lIEFQQ0kxNzEwX1BXTV9ESVNBQkxFCQkwCisjZGVmaW5lIEFQQ0kxNzEwX1BXTV9FTkFCTEUJCTEKKyNkZWZpbmUgQVBDSTE3MTBfUFdNX05FV1RJTUlORwkJMgorCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJICAgICAgIEJZVEUgYl9Nb2R1bE5iciwKKwkJICAgICAgIEJZVEUgYl9QV00sCisJCSAgICAgICBCWVRFIGJfQ2xvY2tTZWxlY3Rpb24sCisJCSAgICAgICBCWVRFIGJfVGltaW5nVW5pdCwKKwkJICAgICAgIFVMT05HIHVsX0xvd1RpbWluZywKKwkJICAgICAgIFVMT05HIHVsX0hpZ2hUaW1pbmcsCisJCSAgICAgICBQVUxPTkcgcHVsX1JlYWxMb3dUaW1pbmcsIFBVTE9ORyBwdWxfUmVhbEhpZ2hUaW1pbmcpOworCitJTlQgaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkJICAgIEJZVEUgYl9QV00sCisJCQkJICAgIFBCWVRFIHBiX1RpbWluZ1VuaXQsCisJCQkJICAgIFBVTE9ORyBwdWxfTG93VGltaW5nLAorCQkJCSAgICBQVUxPTkcgcHVsX0hpZ2hUaW1pbmcsCisJCQkJICAgIFBCWVRFIHBiX1N0YXJ0TGV2ZWwsCisJCQkJICAgIFBCWVRFIHBiX1N0b3BNb2RlLAorCQkJCSAgICBQQllURSBwYl9TdG9wTGV2ZWwsCisJCQkJICAgIFBCWVRFIHBiX0V4dGVybkdhdGUsCisJCQkJICAgIFBCWVRFIHBiX0ludGVycnVwdEVuYWJsZSwgUEJZVEUgcGJfRW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgQllURSBiX01vZHVsTmJyLAorCQkJIEJZVEUgYl9QV00sCisJCQkgQllURSBiX1N0YXJ0TGV2ZWwsCisJCQkgQllURSBiX1N0b3BNb2RlLAorCQkJIEJZVEUgYl9TdG9wTGV2ZWwsIEJZVEUgYl9FeHRlcm5HYXRlLAorCQkJIEJZVEUgYl9JbnRlcnJ1cHRFbmFibGUpOworCitJTlQgaV9BUENJMTcxMF9TZXROZXdQV01UaW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkgICAgICAgQllURSBiX1BXTSwgQllURSBiX1RpbWluZ1VuaXQsCisJCQkgICAgICAgVUxPTkcgdWxfTG93VGltaW5nLCBVTE9ORyB1bF9IaWdoVGltaW5nKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9QV00pOworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZEdldFBXTVN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRQV01JbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmUxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCkBAIC0wLDAgKzEsODQ4IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogU1NJLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBTU0kgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDEzLzA1Lzk4IHwgUy4gV2ViZXIgIHwgU1NJIGRpZ2l0YWwgaW5wdXQgLyBvdXRwdXQgaW1wbGVtZW50YXRpb24gICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAyMi8wMy8wMCB8IEMuR3Vpbm90ICB8IDAxMDAvMDIyNiAtPiAwMjAwLzAyMjcgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgw4RuZGVydW5nIGluIEluaXRTU0kgRnVua3Rpb24gICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgYl9TU0lQcm9maWxlID49IDIgYW5zdGF0dCBiX1NTSVByb2ZpbGUgPiAyICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJBUENJMTcxMF9Tc2kuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdFNTSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9TU0lQcm9maWxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX1Bvc2l0aW9uVHVybkxlbmd0aCwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfVHVybkNwdExlbmd0aCwgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9QQ0lJbnB1dENsb2NrLCAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gIHVsX1NTSU91dHB1dENsb2NrLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfU1NJQ291bnRpbmdNb2RlKSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBTU0kgb3BlcmF0aW5nIG1vZGUgZnJvbSBzZWxlY3RlZCBtb2R1bGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91fAorfCAgICAgICAgICAgICAgICAgICAgIGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBTU0kuICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TU0lQcm9maWxlICAgICAgICAgOiBTZWxlY3Rpb24gZnJvbSBTU0kgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgbGVuZ3RoICgyIHRvIDMyKS58Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUG9zaXRpb25UdXJuTGVuZ3RoIDogU2VsZWN0aW9uIGZyb20gU1NJICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiBkYXRhIGxlbmd0aCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHRvIDMxKS4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfVHVybkNwdExlbmd0aCAgICAgIDogU2VsZWN0aW9uIGZyb20gU1NJIHR1cm4gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyIGRhdGEgbGVuZ3RoICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHRvIDMxKS4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURSAgIGJfUENJSW5wdXRDbG9jayAgICAgIDogU2VsZWN0aW9uIGZyb20gUENJIGJ1cyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwXzMwTUhaIDogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFBDIGhhdmUgYSBQQ0kgYnVzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBmcm9tIDMwIE1IeiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwXzMzTUhaIDogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFBDIGhhdmUgYSBQQ0kgYnVzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBmcm9tIDMzIE1IeiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9TU0lPdXRwdXRDbG9jayAgICA6IFNlbGVjdGlvbiBmcm9tIFNTSSBvdXRwdXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tICAyMjkgdG8gNSAwMDAgMDAwIEh6fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAzMCBNSHogc2VsZWN0aW9uLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSAgMjUyIHRvIDUgMDAwIDAwMCBIenwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgMzMgTUh6IHNlbGVjdGlvbi4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEUgICBiX1NTSUNvdW50aW5nTW9kZSAgICA6IFNTSSBjb3VudGluZyBtb2RlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9CSU5BUllfTU9ERSA6ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5hcnkgY291bnRpbmcgbW9kZS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfR1JBWV9NT0RFIDogICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JheSBjb3VudGluZyBtb2RlLgorCisJYl9Nb2R1bE5icgkJCT0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9TU0lQcm9maWxlCQk9IChCWVRFKSBkYXRhWzBdOworCWJfUG9zaXRpb25UdXJuTGVuZ3RoPSAoQllURSkgZGF0YVsxXTsKKwliX1R1cm5DcHRMZW5ndGgJCT0gKEJZVEUpIGRhdGFbMl07CisJYl9QQ0lJbnB1dENsb2NrCQk9IChCWVRFKSBkYXRhWzNdOworCXVsX1NTSU91dHB1dENsb2NrCT0gKFVMT05HKSBkYXRhWzRdOworCWJfU1NJQ291bnRpbmdNb2RlCT0gKEJZVEUpICBkYXRhWzVdOyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgc2VsZWN0ZWQgU1NJIHBvc2l0aW9uIGRhdGEgbGVuZ3RoIGlzIHdyb25nICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBzZWxlY3RlZCBTU0kgdHVybiBjb3VudGVyIGRhdGEgbGVuZ3RoIGlzIHdyb25nICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC04OiBUaGUgc2VsZWN0ZWQgU1NJIG91dHB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTk6IFRoZSBzZWxlY3RlZCBTU0kgY291bnRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0U1NJKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUlOVCB1aV9UaW1lclZhbHVlOworCUJZVEUgYl9Nb2R1bE5iciwgYl9TU0lQcm9maWxlLCBiX1Bvc2l0aW9uVHVybkxlbmd0aCwgYl9UdXJuQ3B0TGVuZ3RoLAorCQliX1BDSUlucHV0Q2xvY2ssIGJfU1NJQ291bnRpbmdNb2RlOworCVVMT05HIHVsX1NTSU91dHB1dENsb2NrOworCisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU1NJUHJvZmlsZSA9IChCWVRFKSBkYXRhWzBdOworCWJfUG9zaXRpb25UdXJuTGVuZ3RoID0gKEJZVEUpIGRhdGFbMV07CisJYl9UdXJuQ3B0TGVuZ3RoID0gKEJZVEUpIGRhdGFbMl07CisJYl9QQ0lJbnB1dENsb2NrID0gKEJZVEUpIGRhdGFbM107CisJdWxfU1NJT3V0cHV0Q2xvY2sgPSAoVUxPTkcpIGRhdGFbNF07CisJYl9TU0lDb3VudGluZ01vZGUgPSAoQllURSkgZGF0YVs1XTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFNTSSBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1NTSV9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBTU0kgcHJvZmlsZSBsZW5ndGggKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy8gQ0cgMjIvMDMvMDAgYl9TU0lQcm9maWxlID49IDIgYW5zdGF0dCBiX1NTSVByb2ZpbGUgPiAyCisJCQlpZiAoYl9TU0lQcm9maWxlID49IDIgJiYgYl9TU0lQcm9maWxlIDwgMzMpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFNTSSBwb3NpdGlvbiBkYXRhIGxlbmd0aCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9Qb3NpdGlvblR1cm5MZW5ndGggPiAwCisJCQkJCSYmIGJfUG9zaXRpb25UdXJuTGVuZ3RoIDwgMzIpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgU1NJIHR1cm4gY291bnRlciBkYXRhIGxlbmd0aCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1R1cm5DcHRMZW5ndGggPiAwCisJCQkJCQkmJiBiX1R1cm5DcHRMZW5ndGggPCAzMikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIHByb2ZpbGUgbGVuZ3RoICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGJfVHVybkNwdExlbmd0aCArCisJCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoKQorCQkJCQkJCTw9IGJfU1NJUHJvZmlsZSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBQQ0kgaW5wdXQgY2xvY2sgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfUENJSW5wdXRDbG9jaworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQl7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBvdXRwdXQgY2xvY2sgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFogJiYgKHVsX1NTSU91dHB1dENsb2NrID4gMjI4ICYmIHVsX1NTSU91dHB1dENsb2NrIDw9IDUwMDAwMDBVTCkpIHx8IChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFogJiYgKHVsX1NTSU91dHB1dENsb2NrID4gMjUxICYmIHVsX1NTSU91dHB1dENsb2NrIDw9IDUwMDAwMDBVTCkpKSB7CisJCQkJCQkJCQlpZiAoYl9TU0lDb3VudGluZ01vZGUgPT0gQVBDSTE3MTBfQklOQVJZX01PREUgfHwgYl9TU0lDb3VudGluZ01vZGUgPT0gQVBDSTE3MTBfR1JBWV9NT0RFKSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2F2ZSBjb25maWd1cmF0aW9uICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJCQkJCWJfU1NJUHJvZmlsZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfU1NJUHJvZmlsZTsKKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoOworCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJCQkJCWJfVHVybkNwdExlbmd0aAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfVHVybkNwdExlbmd0aDsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogSW5pdGlhbGlzZSB0aGUgcHJvZmlsZSBsZW5ndGggKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKGJfU1NJQ291bnRpbmdNb2RlID09IEFQQ0kxNzEwX0JJTkFSWV9NT0RFKSB7CisKKwkJCQkJCQkJCQkJb3V0bChiX1NTSVByb2ZpbGUgKyAxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQkJCQlvdXRsKGJfU1NJUHJvZmlsZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJCX0KKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBvdXRwdXQgY2xvY2sgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWlfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVSU5UKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCSgoVUxPTkcpIChiX1BDSUlucHV0Q2xvY2spICogNTAwMDAwVUwpIC8gdWxfU1NJT3V0cHV0Q2xvY2spOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBJbml0aWFsaXNlIHRoZSB0aW1lciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlvdXRsKHVpX1RpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEluaXRpYWxpc2UgdGhlIGNvdW50aW5nIG1vZGUgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlvdXRsKDcgKiBiX1NTSUNvdW50aW5nTW9kZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCQkJCQliX1NTSUluaXQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBjb3VudGluZyBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBTU0kgY291bnRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQktOTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBvdXRwdXQgY2xvY2sgaXMgd3JvbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIG91dHB1dCBjbG9jayBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS04OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIHByb2ZpbGUgbGVuZ3RoIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSB0dXJuIGNvdW50ZXIgZGF0YSBsZW5ndGggaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBTU0kgdHVybiBjb3VudGVyIGRhdGEgbGVuZ3RoIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgcG9zaXRpb24gZGF0YSBsZW5ndGggaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIHBvc2l0aW9uIGRhdGEgbGVuZ3RoIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgaV9BUENJMTcxMF9SZWFkMVNTSVZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1NlbGVjdGVkU1NJLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUG9zaXRpb24sICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9UdXJuQ3B0KQorIElOVCBpX0FQQ0kxNzEwX1JlYWRTU0lWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOgorCisKKwkJCQkJCVJlYWQgdGhlIHNlbGVjdGVkIFNTSSBjb3VudGVyIChiX1NlbGVjdGVkU1NJKSBmcm9tICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4KKwkJCQkJCW9yIFJlYWQgYWxsIFNTSSBjb3VudGVyIChiX1NlbGVjdGVkU1NJKSBmcm9tICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWxlY3RlZFNTSSAgICAgICAgIDogU2VsZWN0aW9uIGZyb20gU1NJICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyICgwIHRvIDIpCisKKyAgICBiX01vZHVsTmJyCQk9ICAgKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRTU0kJPQkoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7IChpbiBjYXNlIG9mIHNpbmdsZSBzc2kpCisJYl9SZWFkVHlwZQkJPQkoQllURSkgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcHVsX1Bvc2l0aW9uICAgICAgIDogU1NJIHBvc2l0aW9uIGluIHRoZSB0dXJuIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfICBwdWxfVHVybkNwdCAgICAgICAgOiBOdW1iZXIgb2YgdHVybnMKKworcHVsX1Bvc2l0aW9uCT0JKFBVTE9ORykgJmRhdGFbMF07CisJcHVsX1R1cm5DcHQJCT0JKFBVTE9ORykgJmRhdGFbMV07ICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBTU0kgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRTU0kiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFNTSSBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRTU0lWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9DcHQ7CisJQllURSBiX0xlbmd0aDsKKwlCWVRFIGJfU2NoaWZ0OworCUJZVEUgYl9TU0lDcHQ7CisJRFdPUkQgZHdfQW5kOworCURXT1JEIGR3X0FuZDE7CisJRFdPUkQgZHdfQW5kMjsKKwlEV09SRCBkd19TdGF0dXNSZWc7CisJRFdPUkQgZHdfQ291bnRlclZhbHVlOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfU2VsZWN0ZWRTU0k7CisJQllURSBiX1JlYWRUeXBlOworCVBVTE9ORyBwdWxfUG9zaXRpb247CisJUFVMT05HIHB1bF9UdXJuQ3B0OworCVBVTE9ORyBwdWxfUG9zaXRpb24xOworCVBVTE9ORyBwdWxfVHVybkNwdDE7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlwdWxfUG9zaXRpb24xID0gKFBVTE9ORykgJiBkYXRhWzBdOworLy8gRm9yIFJlYWQxCisJcHVsX1R1cm5DcHQxID0gKFBVTE9ORykgJiBkYXRhWzFdOworLy8gRm9yIFJlYWQgYWxsCisJcHVsX1Bvc2l0aW9uID0gKFBVTE9ORykgJiBkYXRhWzBdOwkvLzAtMgorCXB1bF9UdXJuQ3B0ID0gKFBVTE9ORykgJiBkYXRhWzNdOwkvLzMtNQorCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9TZWxlY3RlZFNTSSA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlID0gKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFNTSSBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1NTSV9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgU1NJIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NTSUNvdW50ZXJJbmZvLmJfU1NJSW5pdCA9PSAxKSB7CisKKwkJCQlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKworCQkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQUQxVkFMVUU6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgU1NJIGNvdW50ZXIgbnVtYmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9TZWxlY3RlZFNTSSA8IDMpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDggKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJZG8geworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfQorCQkJCQkJd2hpbGUgKChkd19TdGF0dXNSZWcgJiAweDEpICE9CisJCQkJCQkJMCk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBSZWFkIHRoZSBTU0kgY291bnRlciB2YWx1ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZHdfQ291bnRlclZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCQkoYl9TZWxlY3RlZFNTSSAqIDQpICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCWJfTGVuZ3RoID0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1NTSVByb2ZpbGUgLyAyOworCisJCQkJCQlpZiAoKGJfTGVuZ3RoICogMikgIT0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1NTSVByb2ZpbGUpIHsKKwkJCQkJCQliX0xlbmd0aCsrOworCQkJCQkJfQorCisJCQkJCQliX1NjaGlmdCA9CisJCQkJCQkJYl9MZW5ndGggLQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoOworCisJCQkJCQkqcHVsX1Bvc2l0aW9uMSA9CisJCQkJCQkJZHdfQ291bnRlclZhbHVlID4+CisJCQkJCQkJYl9TY2hpZnQ7CisKKwkJCQkJCWR3X0FuZCA9IDE7CisKKwkJCQkJCWZvciAoYl9DcHQgPSAwOworCQkJCQkJCWJfQ3B0IDwKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aDsKKwkJCQkJCQliX0NwdCsrKSB7CisJCQkJCQkJZHdfQW5kID0gZHdfQW5kICogMjsKKwkJCQkJCX0KKworCQkJCQkJKnB1bF9Qb3NpdGlvbjEgPQorCQkJCQkJCSpwdWxfUG9zaXRpb24xICYKKwkJCQkJCQkoKGR3X0FuZCkgLSAxKTsKKworCQkJCQkJKnB1bF9UdXJuQ3B0MSA9CisJCQkJCQkJZHdfQ291bnRlclZhbHVlID4+CisJCQkJCQkJYl9MZW5ndGg7CisKKwkJCQkJCWR3X0FuZCA9IDE7CisKKwkJCQkJCWZvciAoYl9DcHQgPSAwOworCQkJCQkJCWJfQ3B0IDwKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1R1cm5DcHRMZW5ndGg7CisJCQkJCQkJYl9DcHQrKykgeworCQkJCQkJCWR3X0FuZCA9IGR3X0FuZCAqIDI7CisJCQkJCQl9CisKKwkJCQkJCSpwdWxfVHVybkNwdDEgPQorCQkJCQkJCSpwdWxfVHVybkNwdDEgJgorCQkJCQkJCSgoZHdfQW5kKSAtIDEpOworCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQURBTExWQUxVRToKKwkJCQkJZHdfQW5kMSA9IDE7CisKKwkJCQkJZm9yIChiX0NwdCA9IDA7CisJCQkJCQliX0NwdCA8CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aDsgYl9DcHQrKykgeworCQkJCQkJZHdfQW5kMSA9IGR3X0FuZDEgKiAyOworCQkJCQl9CisKKwkJCQkJZHdfQW5kMiA9IDE7CisKKwkJCQkJZm9yIChiX0NwdCA9IDA7CisJCQkJCQliX0NwdCA8CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQliX1R1cm5DcHRMZW5ndGg7IGJfQ3B0KyspIHsKKwkJCQkJCWR3X0FuZDIgPSBkd19BbmQyICogMjsKKwkJCQkJfQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlkbyB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCX0KKwkJCQkJd2hpbGUgKChkd19TdGF0dXNSZWcgJiAweDEpICE9IDApOworCisJCQkJCWZvciAoYl9TU0lDcHQgPSAwOyBiX1NTSUNwdCA8IDM7CisJCQkJCQliX1NTSUNwdCsrKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgU1NJIGNvdW50ZXIgdmFsdWUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkJKGJfU1NJQ3B0ICogNCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJYl9MZW5ndGggPQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfU1NJUHJvZmlsZSAvIDI7CisKKwkJCQkJCWlmICgoYl9MZW5ndGggKiAyKSAhPQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfU1NJUHJvZmlsZSkgeworCQkJCQkJCWJfTGVuZ3RoKys7CisJCQkJCQl9CisKKwkJCQkJCWJfU2NoaWZ0ID0KKwkJCQkJCQliX0xlbmd0aCAtCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJYl9Qb3NpdGlvblR1cm5MZW5ndGg7CisKKwkJCQkJCXB1bF9Qb3NpdGlvbltiX1NTSUNwdF0gPQorCQkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA+PgorCQkJCQkJCWJfU2NoaWZ0OworCQkJCQkJcHVsX1Bvc2l0aW9uW2JfU1NJQ3B0XSA9CisJCQkJCQkJcHVsX1Bvc2l0aW9uW2JfU1NJQ3B0XSAmCisJCQkJCQkJKChkd19BbmQxKSAtIDEpOworCisJCQkJCQlwdWxfVHVybkNwdFtiX1NTSUNwdF0gPQorCQkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA+PgorCQkJCQkJCWJfTGVuZ3RoOworCQkJCQkJcHVsX1R1cm5DcHRbYl9TU0lDcHRdID0KKwkJCQkJCQlwdWxfVHVybkNwdFtiX1NTSUNwdF0gJgorCQkJCQkJCSgoZHdfQW5kMikgLSAxKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCXByaW50aygiUmVhZCBUeXBlIElucHV0cyBXcm9uZ1xuIik7CisKKwkJCQl9CS8vIHN3aXRjaCAgZW5kaW5nCisKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU1NJIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiU1NJIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgaV9BUENJMTcxMF9SZWFkU1NJMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9JbnB1dENoYW5uZWwsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0NoYW5uZWxTdGF0dXMpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6CisJCQkJCSgwKSBTZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IGZyb20gc2VsZWN0ZWQgU1NJIG1vdWxlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsZU5icikgT04KKyAgICAgICAgICAgICAgICAgICAgKDEpIFNldCB0aGUgZGlnaXRhbCBvdXRwdXQgZnJvbSBzZWxlY3RlZCBTU0kgbW91bGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxlTmJyKSBPRkYKKwkJCQkJKDIpUmVhZCB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgU1NJIGRpZ2l0YWwgaW5wdXQgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpCisgICAgICAgICAgICAgICAgICAgICgzKVJlYWQgdGhlIHN0YXR1cyBmcm9tIGFsbCBTU0kgZGlnaXRhbCBpbnB1dHMgZnJvbSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgU1NJIG1vZHVsZSAoYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIENSX0FSRUYgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5wdXRDaGFubmVsIENSX0NIQU4gICAgICAgOiBTZWxlY3Rpb24gZnJvbSBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gd2hpY2ggSU9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgKCAwIHRvIDIpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfQ2hhbm5lbFN0YXR1cyAgICA6IERpZ2l0YWwgaW5wdXQgY2hhbm5lbCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgU1NJIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmcgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1NTSURpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX0lucHV0Q2hhbm5lbDsKKwlQQllURSBwYl9DaGFubmVsU3RhdHVzOworCVBCWVRFIHBiX0lucHV0U3RhdHVzOworCUJZVEUgYl9JT1R5cGU7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0lPVHlwZSA9IChCWVRFKSBkYXRhWzBdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgU1NJIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfU1NJX0NPVU5URVIpIHsKKwkJCXN3aXRjaCAoYl9JT1R5cGUpIHsKKwkJCWNhc2UgQVBDSTE3MTBfU1NJX1NFVF9DSEFOTkVMT046CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IE9OICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBUENJMTcxMF9TU0lfU0VUX0NIQU5ORUxPRkY6CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IHRoZSBkaWdpdGFsIG91dHB1dCBPRkYgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBUENJMTcxMF9TU0lfUkVBRF8xQ0hBTk5FTDoKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgaW1ucHV0IGNoYW5uZWwgbnVtYmVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWJfSW5wdXRDaGFubmVsID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQkJCXBiX0NoYW5uZWxTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKworCQkJCWlmIChiX0lucHV0Q2hhbm5lbCA8PSAyKSB7CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkqcGJfQ2hhbm5lbFN0YXR1cyA9CisJCQkJCQkoQllURSkgKCgofmR3X1N0YXR1c1JlZykgPj4gKDQgKworCQkJCQkJCQliX0lucHV0Q2hhbm5lbCkpCisJCQkJCQkmIDEpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvclxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQURfQUxMQ0hBTk5FTDoKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgaW5wdXQgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCXBiX0lucHV0U3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisKKwkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJKnBiX0lucHV0U3RhdHVzID0KKwkJCQkJKEJZVEUpICgoKH5kd19TdGF0dXNSZWcpID4+IDQpICYgNyk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKCJJTyB0eXBlIHdyb25nXG4iKTsKKworCQkJfQkvL3N3aXRjaCBlbmQKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFNTSSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkYWFkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF8zME1IWgkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCTMzCisjZGVmaW5lIEFQQ0kxNzEwXzQwTUhaCQk0MAorCisjZGVmaW5lIEFQQ0kxNzEwX0JJTkFSWV9NT0RFCTB4MQorI2RlZmluZSBBUENJMTcxMF9HUkFZX01PREUJMHgwCisKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1JFQUQxVkFMVUUJCTEKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1JFQURBTExWQUxVRQkyCisKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1NFVF9DSEFOTkVMT04JMAorI2RlZmluZSBBUENJMTcxMF9TU0lfU0VUX0NIQU5ORUxPRkYJMQorI2RlZmluZSBBUENJMTcxMF9TU0lfUkVBRF8xQ0hBTk5FTAkyCisjZGVmaW5lIEFQQ0kxNzEwX1NTSV9SRUFEX0FMTENIQU5ORUwJMworCisvKgorICogU1NJIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0U1NJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkU1NJVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1NTSURpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzMTZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMKQEAgLTAsMCArMSwyMDQ5IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogVE9SLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCB0b3IgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI3LzAxLzk5IHwgUy4gV2ViZXIgIHwgNDAgTUh6IGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAyOC8wNC8wMCB8IFMuIFdlYmVyICB8IFNpbXBsZSxkb3VibGUgYW5kIHF1YWRydXBsZSBtb2RlIGltcGxlbWVudGF0aW9ufAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgRXh0ZXJuIGNsb2NrIGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfVG9yLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVG9yQ291bnRlciwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9QQ0lJbnB1dENsb2NrLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWluZ1VuaXQsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfVGltaW5nSW50ZXJ2YWwsICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwpICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIHNlbGVjdGVkIHRvciBjb3VudGVyIChiX1RvckNvdW50ZXIpICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIHVsX1RpbWluZ0ludGVydmFsIGFuZCB1bF9UaW1pbmdVbml0IGRldGVybWluZSB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgYmFzZSBmb3IgdGhlIG1lYXN1cmVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxfUmVhbFRpbWluZ0ludGVydmFsIHJldHVybiB0aGUgcmVhbCB0aW1pbmcgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdmFsdWUuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSB0b3IgY291bnRlci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICB8Cit8CisJCUNSX0FSRUYJQllURV8gICBiX01vZHVsTmJyICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgZGF0YVswXSBCWVRFXyAgIGJfVG9yQ291bnRlciAgICAgOiBUb3IgY291bnRlciBzZWxlY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG9yIDEpLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBkYXRhWzFdIEJZVEVfICAgYl9QQ0lJbnB1dENsb2NrICA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgY2xvY2t8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMCBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMyBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF80ME1IWiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUENJLTE3MTAgaGF2ZSBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCA0ME1oeiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydHouICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwX0dBVEVfSU5QVVQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCB0aGUgZ2F0ZSBpbnB1dCBmb3IgICB8Cit8CQkJCQkJICAgdGhlIGJhc2UgY2xvY2suIElmIHlvdSAgICB8Cit8CQkJCQkJICAgaGF2ZSBzZWxlY3RlZCB0aGlzIG9wdGlvbix8Cit8CQkJCQkJICAgdGhhbiBpdCBpcyBub3QgcG9zc2libCB0byB8Cit8CQkJCQkJICAgdXNlZCB0aGUgZ2F0ZSBpbnB1dCBmb3IgICB8Cit8CQkJCQkJICAgZW5hYmxlZCB0aGUgYWNxdWlzaXRpb24gICB8Cit8ICAgICAgICAgICBkYXRhWzJdIEJZVEVfICAgYl9UaW1pbmdVbml0ICAgIDogQmFzZSB0aW1pbmcgdW5pdCAoMCB0byA0KSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBucyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IMK1cyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IG1zICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogcyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBtbiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgIGRhdGFbM10gICAgICAgICAgVUxPTkdfIHVsX1RpbWluZ0ludGVydmFsIDogQmFzZSB0aW1pbmcgdmFsdWUuICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgOiBSZWFsICBiYXNlIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTg6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC05OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgVE9SIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUb3JDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfVGltZXJWYWx1ZSA9IDA7CisJRFdPUkQgZHdfQ29tbWFuZDsKKwlkb3VibGUgZF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfVG9yQ291bnRlcjsKKwlCWVRFIGJfUENJSW5wdXRDbG9jazsKKwlCWVRFIGJfVGltaW5nVW5pdDsKKwlVTE9ORyB1bF9UaW1pbmdJbnRlcnZhbDsKKwlVTE9ORyB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKworCWJfVG9yQ291bnRlciA9IChCWVRFKSBkYXRhWzBdOworCWJfUENJSW5wdXRDbG9jayA9IChCWVRFKSBkYXRhWzFdOworCWJfVGltaW5nVW5pdCA9IChCWVRFKSBkYXRhWzJdOworCXVsX1RpbWluZ0ludGVydmFsID0gKFVMT05HKSBkYXRhWzNdOworCXByaW50aygiSU5QVVQgY2xvY2sgJWRcbiIsIGJfUENJSW5wdXRDbG9jayk7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB0b3IgY291bnRlciAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBQQ0kgYnVzIGNsb2NrICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJQVBDSTE3MTBfR0FURV9JTlBVVCkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHRpbWluZyB1bml0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9UaW1pbmdVbml0IDw9IDQpCisJCQkJCQl8fCAoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJQVBDSTE3MTBfR0FURV9JTlBVVCkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgYmFzZSB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxMzMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDU3MTIzMDY1MFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA1NzEyMzBVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNTcxVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDlVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxMjEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDUxOTY5MTA0M1VMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA1MTk2OTFVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNTIwVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDhVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxMDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDQyOTQ5NjcyOVVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA0Mjk0OTZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNDI5VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDdVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwX0dBVEVfSU5QVVQpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAyKSkpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgYm9hcmQgdmVyc2lvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGRldnByaXYtPnNfQm9hcmRJbmZvcy5iX0JvYXJkVmVyc2lvbiA+IDApKSB8fCAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBUT1IgdmVyc2lvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzMSkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwX0dBVEVfSU5QVVQpICYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMxMzIpKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIG5vdCBleHRlcm4gY2xvY2sgdXNlZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfR0FURV9JTlBVVCkgeworCQkJCQkJCQkJCWZwdV9iZWdpbgorCQkJCQkJCQkJCQkoKTsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWVyIDAgZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJICAgICAgLyoqKioqKi8KKwkJCQkJCQkJCQkJLyogbnMgKi8KKwkJCQkgICAgICAvKioqKioqLworCisJCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgICAgIC8qKioqKiovCisJCQkJCQkJCQkJCS8qIMOmcyAqLworCQkJCSAgICAgIC8qKioqKiovCisKKwkJCQkJCQkJCQljYXNlIDE6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCSgwLjI1ICogYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgwLjI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCTAuMjUKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgICAgLyoqKioqKi8KKwkJCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkgICAgICAvKioqKioqLworCisJCQkJCQkJCQkJY2FzZSAyOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDI1MC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgICAgLyoqKioqLworCQkJCQkJCQkJCQkvKiBzICovCisJCQkJICAgICAgLyoqKioqLworCisJCQkJCQkJCQkJY2FzZSAzOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAgICAvKioqKioqLworCQkJCQkJCQkJCQkvKiBtbiAqLworCQkJCSAgICAgIC8qKioqKiovCisKKwkJCQkJCQkJCQljYXNlIDQ6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfVGltaW5nSW50ZXJ2YWwgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSkKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQk2MC4wOworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlmcHVfZW5kKCk7CisJCQkJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfR0FURV9JTlBVVCkKKwkJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIDIgQ2xvY2sgdXNlZCBmb3IgdGhlIG92ZXJmbG93IGFuZCB0aGUgcmVsb2FkIGZyb20gY291bnRlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF9HQVRFX0lOUFVUKQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBQQ0kgaW5wdXQgY2xvY2sgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2s7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgdGltaW5nIHVuaXQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJYl9UaW1pbmdVbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBiYXNlIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJZF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbDsKKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlck1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVySW5mbworCQkJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWw7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQk0CisJCQkJCQkJCQkJKworCQkJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGR3X0NvbW1hbmQKKwkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCTQpCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RjsKKworCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIDQwIE1IeiAqLworCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIDQwIE1IeiBzZWxlY3Rpb24gKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJMHgxMDsKKwkJCQkJCQkJCX0KKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgZXh0ZXJuIGNsb2NrIHVzZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfR0FURV9JTlBVVCkgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFNldCB0aGUgNDAgTUh6IHNlbGVjdGlvbiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkweDIwOworCQkJCQkJCQkJfQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBXcml0ZSB0aGUgbmV3IGNvbW1hbmQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bChkd19Db21tYW5kLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSB0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDggKyAoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IHRoZSB0aW1lciAxIHZhbHVlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwodWxfVGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUb3IgY291bnRlciBpbml0LiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlckluZm8KKwkJCQkJCQkJCQlbYl9Ub3JDb3VudGVyXS4KKwkJCQkJCQkJCQliX1RvckNvdW50ZXJJbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvblxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktODsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0KKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCX0JLy8gaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8IChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlck1vZGUgPj0gMCAmJiBiX1RvckNvdW50ZXJNb2RlIDw9IDcpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBDb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUb3IgQ291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlck1vZGUgPj0gMCAmJiBiX1RvckNvdW50ZXJNb2RlIDw9IDcpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisJZGF0YVswXSA9IChVSU5UKSB1bF9SZWFsVGltaW5nSW50ZXJ2YWw7CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlVG9yQ291bnRlciAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgfAorfAkJCQkJCSBCWVRFXyBiX1RvckNvdW50ZXIsICAgICAgICAgfAorfAkJCQkJCSBCWVRFXyBiX0lucHV0TW9kZSwgICAgICAgICAgfAorfAkJCQkJCSBCWVRFXyBiX0V4dGVybkdhdGUsICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ3ljbGVNb2RlLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgKGJfVG9yQ291bnRlcikgZnJvbSBzZWxlY3RlZCAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgICB8Cit8CQkgICAgICB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmFibGUgdGhlIHRvciBjb3VudGVyIGludGVycnVwdCwgdGhlICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdG9yIGNvdW50ZXIgZ2VuZXJhdGUgYSBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIHRpbWluZyBjeWNsZXwKK3wgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgYW5kIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBtYXNrIGRlc2NyaXB0aW9uIGNoYXB0ZXIgZnJvbSB0aGlzIG1hbnVhbC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIGJfQ3ljbGVNb2RlIHBhcmFtZXRlciBkZXRlcm1pbmUgaWYgeW91IHdpbGwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZCBhIHNpbmdsZSBvciBtb3JlIGN5Y2xlLiAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVG9yQ291bnRlciAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICgwIG9yIDEpLiB8Cit8CQkgICAgICBCWVRFXyBiX0lucHV0TW9kZSAgICA6IElucHV0IHNpZ25hbCBsZXZlbCBzZWxlY3Rpb24gICAgfAorfAkJCQkJCTAgOiBUb3IgY291bnQgZWFjaCBsb3cgbGV2ZWwgfAorfAkJCQkJCTEgOiBUb3IgY291bnQgZWFjaCBoaWdoIGxldmVsfAorfAkJICAgICAgQllURV8gYl9FeHRlcm5HYXRlICAgOiBFeHRlcm4gZ2F0ZSBhY3Rpb24gc2VsZWN0aW9uICAgIHwKK3wJCQkJCQkwIDogRXh0ZXJuIGdhdGUgc2lnbmFsIG5vdCAgIHwKK3wJCQkJCQkgICAgdXNlZCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkxIDogRXh0ZXJuIGdhdGUgc2lnbmFsIHVzZWQuIHwKK3wJCQkJCQkgICAgSWYgeW91IHNlbGVjdGVkIHRoZSAgICAgIHwKK3wJCQkJCQkgICAgc2luZ2xlIG1vZGUsIGVhY2ggaGlnaCAgIHwKK3wJCQkJCQkgICAgbGV2ZWwgc2lnbmFsIHN0YXJ0IHRoZSAgIHwKK3wJCQkJCQkgICAgY291bnRlci4gICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgICAgSWYgeW91IHNlbGVjdGVkIHRoZSAgICAgIHwKK3wJCQkJCQkgICAgY29udGludW91cyBtb2RlLCB0aGUgICAgIHwKK3wJCQkJCQkgICAgZmlyc3QgaGlnaCBsZXZlbCBzaWduYWwgIHwKK3wJCQkJCQkgICAgc3RhcnQgdGhlIHRvciBjb3VudGVyICAgIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJCSAgICAgIEFQQ0kxNzEwX1RPUl9RVUFEUlVQTEUgX01PREUgOiB8Cit8CQkJCQkgICAgICBJbiB0aGUgcXVhZHJ1cGxlIG1vZGUsIHRoZSBlZGdlfAorfAkJCQkJICAgICAgYW5hbHlzaXMgY2lyY3VpdCBnZW5lcmF0ZXMgYSAgIHwKK3wJCQkJCSAgICAgIGNvdW50aW5nIHB1bHNlIGZyb20gZWFjaCBlZGdlICB8Cit8CQkJCQkgICAgICBvZiAyIHNpZ25hbHMgd2hpY2ggYXJlIHBoYXNlICAgfAorfAkJCQkJICAgICAgc2hpZnRlZCBpbiByZWxhdGlvbiB0byBlYWNoICAgIHwKK3wJCQkJCSAgICAgIG90aGVyLiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgICAgICBUaGUgZ2F0ZSBpbnB1dCBpcyB1c2VkIGZvciB0aGUgfAorfAkJCQkJICAgICAgc2lnbmFsIEIgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJCSAgICAgIEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERTogICAgICB8Cit8CQkJCQkgICAgICBGdW5jdGlvbnMgaW4gdGhlIHNhbWUgd2F5IGFzICAgfAorfAkJCQkJICAgICAgdGhlIHF1YWRydXBsZSBtb2RlLCBleGNlcHQgdGhhdHwKK3wJCQkJCSAgICAgIG9ubHkgdHdvIG9mIHRoZSBmb3VyIGVkZ2VzIGFyZSB8Cit8CQkJCQkgICAgICBhbmFseXNlZCBwZXIgcGVyaW9kLiAgICAgICAgICAgfAorfAkJCQkJICAgICAgVGhlIGdhdGUgaW5wdXQgaXMgdXNlZCBmb3IgdGhlIHwKK3wJCQkJCSAgICAgIHNpZ25hbCBCICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJICAgICB8Cit8CQkJCQkgICAgICBBUENJMTcxMF9UT1JfU0lNUExFX01PREU6ICAgICAgfAorfAkJCQkJICAgICAgRnVuY3Rpb25zIGluIHRoZSBzYW1lIHdheSBhcyAgIHwKK3wJCQkJCSAgICAgIHRoZSBxdWFkcnVwbGUgbW9kZSwgZXhjZXB0IHRoYXR8Cit8CQkJCQkgICAgICBvbmx5IG9uZSBvZiB0aGUgZm91ciBlZGdlcyBpcyAgfAorfAkJCQkJICAgICAgYW5hbHlzZWQgcGVyIHBlcmlvZC4gICAgICAgICAgIHwKK3wJCQkJCSAgICAgIFRoZSBnYXRlIGlucHV0IGlzIHVzZWQgZm9yIHRoZSB8Cit8CQkJCQkgICAgICBzaWduYWwgQiAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ3ljbGVNb2RlICAgIDogU2VsZWN0ZWQgdGhlIHRvciBjb3VudGVyICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXNpdGlvbiBtb2RlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9yIGNvdW50ZXIgaW50ZXJydXB0LiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEU6ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFOiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIHRvciBjb3VudGVyICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVG9yIGlucHV0IHNpZ25hbCBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBFeHRlcm4gZ2F0ZSBzaWduYWwgbW9kZSBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTg6IFRvciBjb3VudGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmcgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtOTogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xMDpJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVUb3JDb3VudGVyICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgIHwKK3wJCQkJCQkgQllURV8gIGJfVG9yQ291bnRlcikgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgdGhlIHRvciBjb3VudGVyIChiX1RvckNvdW50ZXIpIGZyb20gc2VsZWN0ZWQgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBJZiB5b3UgZGlzYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgfAorfAkJICAgICAgYWZ0ZXIgYSBzdGFydCBjeWNsZSBvY2N1ciBhbmQgeW91IHJlc3RhcnQgdGhlIHRvciAgICAgIHwKK3wJCSAgICAgIGNvdW50ZXIgd2l0Y2ggdGhlICIgaV9BUENJMTcxMF9FbmFibGVUb3JDb3VudGVyIiAgICAgICB8Cit8CQkgICAgICBmdW5jdGlvbiwgdGhlIHN0YXR1cyByZWdpc3RlciBpcyBjbGVhcmVkICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVG9yQ291bnRlciAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICgwIG9yIDEpLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVG9yIGNvdW50ZXIgbm90IGVuYWJsZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9FbmFibGVUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVUb3JDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X0R1bW15UmVhZDsKKwlEV09SRCBkd19Db25maWdSZWc7CisJQllURSBiX01vZHVsTmJyLCBiX0FjdGlvbjsKKwlCWVRFIGJfVG9yQ291bnRlcjsKKwlCWVRFIGJfSW5wdXRNb2RlOworCUJZVEUgYl9FeHRlcm5HYXRlOworCUJZVEUgYl9DeWNsZU1vZGU7CisJQllURSBiX0ludGVycnVwdEVuYWJsZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9BY3Rpb24gPSAoQllURSkgZGF0YVswXTsJLy8gZW5hYmxlIG9yIGRpc2FibGUKKwliX1RvckNvdW50ZXIgPSAoQllURSkgZGF0YVsxXTsKKwliX0lucHV0TW9kZSA9IChCWVRFKSBkYXRhWzJdOworCWJfRXh0ZXJuR2F0ZSA9IChCWVRFKSBkYXRhWzNdOworCWJfQ3ljbGVNb2RlID0gKEJZVEUpIGRhdGFbNF07CisJYl9JbnRlcnJ1cHRFbmFibGUgPSAoQllURSkgZGF0YVs1XTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjs7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB0b3IgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UT1JfQ09VTlRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgdG9yIGNvdW50ZXIgc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1RvckNvdW50ZXIgPD0gMSkgeworCQkJCXN3aXRjaCAoYl9BY3Rpb24pCS8vIEVuYWJsZSBvciBEaXNhYmxlCisJCQkJeworCQkJCWNhc2UgQVBDSTE3MTBfRU5BQkxFOgorCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGlucHV0IHNpZ25hbCBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoYl9JbnB1dE1vZGUgPT0gMCB8fAorCQkJCQkJCWJfSW5wdXRNb2RlID09IDEgfHwKKwkJCQkJCQliX0lucHV0TW9kZSA9PQorCQkJCQkJCUFQQ0kxNzEwX1RPUl9TSU1QTEVfTU9ERQorCQkJCQkJCXx8IGJfSW5wdXRNb2RlID09CisJCQkJCQkJQVBDSTE3MTBfVE9SX0RPVUJMRV9NT0RFCisJCQkJCQkJfHwgYl9JbnB1dE1vZGUgPT0KKwkJCQkJCQlBUENJMTcxMF9UT1JfUVVBRFJVUExFX01PREUpCisJCQkJCQl7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIGV4dGVybiBnYXRlIHNpZ25hbCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfRXh0ZXJuR2F0ZSA9PSAwCisJCQkJCQkJCXx8IGJfRXh0ZXJuR2F0ZQorCQkJCQkJCQk9PSAxCisJCQkJCQkJCXx8IGJfSW5wdXRNb2RlID4KKwkJCQkJCQkJMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBjeWNsZSBtb2RlIHBhcmFtZXRlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKSB8fCAoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfQ09OVElOVU9VUykpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fCAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkpIHsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IG1vZGUgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfVG9yQ291bnRlck1vZHVsZUluZm8uCisJCQkJCQkJCQkJCXNfVG9yQ291bnRlckluZm8KKwkJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGU7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBHZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTQKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCQk0KQorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4MzA7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGVzdCBpZiBub3QgZGlyZWN0IG1vZGUgdXNlZCAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmIChiX0lucHV0TW9kZSA+IDEpIHsKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogRXh0ZXJuIGdhdGUgY2FuIG5vdCBiZSB1c2VkICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJYl9FeHRlcm5HYXRlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkwOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIEVuYWJsZSB0aGUgZXh0ZXJuIGdhdGUgZm9yIHRoZSBTaWduYWwgQiAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCQkweDQwOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIHNpbXBsZSBtb2RlICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWlmIChiX0lucHV0TW9kZSA9PSBBUENJMTcxMF9UT1JfU0lNUExFX01PREUpIHsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJCS8qIEVuYWJsZSB0aGUgc2lucGxlIG1vZGUgKi8KKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJCQkweDc4MDsKKworCQkJCQkJCQkJCQl9CS8vIGlmIChiX0lucHV0TW9kZSA9PSBBUENJMTcxMF9UT1JfU0lNUExFX01PREUpCisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRlc3QgaWYgZG91YmxlIG1vZGUgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKGJfSW5wdXRNb2RlID09IEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERSkgeworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkJLyogRW5hYmxlIHRoZSBkb3VibGUgbW9kZSAqLworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkJCTB4MTgwOworCisJCQkJCQkJCQkJCX0JLy8gaWYgKGJfSW5wdXRNb2RlID09IEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERSkKKworCQkJCQkJCQkJCQliX0lucHV0TW9kZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJMDsKKwkJCQkJCQkJCQl9CS8vIGlmIChiX0lucHV0TW9kZSA+IDEpCisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCWJfQ3ljbGVNb2RlCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJKGJfSW50ZXJydXB0RW5hYmxlCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMikKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9JbnB1dE1vZGUKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQk0KQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0V4dGVybkdhdGUKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQk4KTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDbGVhciB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfRHVtbXlSZWFkCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMAorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0R1bW15UmVhZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTEyCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbW1hbmRvICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJb3V0bChkd19Db25maWdSZWcsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNCArICgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGdhdGUgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJfQkvLyBpZiAoKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgfHwgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpKQorCQkJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJLTk7CisJCQkJCQkJCQl9CS8vIGlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fCAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkpCisJCQkJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJCQkJZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRvciBjb3VudGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJLTg7CisJCQkJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCQllbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBFeHRlcm4gZ2F0ZSBpbnB1dCBtb2RlIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJFeHRlcm4gZ2F0ZSBpbnB1dCBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCX0JLy8gaWYgKGJfSW5wdXRNb2RlID49IDAgJiYgYl9JbnB1dE1vZGUgPD0gMSkKKwkJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUb3IgaW5wdXQgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRvciBpbnB1dCBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0RJU0FCTEU6CisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgY291bnRlciBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IG1vZGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQliX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQk9CisJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEU7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQ2xlYXIgdGhlIGdhdGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlvdXRsKDAsIGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUb3IgY291bnRlciBub3QgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRvciBjb3VudGVyIG5vdCBlbmFibGVkIFxuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQkvLyAvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKworCQkJCX0JLy8gc3dpdGNoCisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9Ub3JDb3VudGVyIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3IgXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFRvckNvdW50ZXJJbml0aWFsaXNhdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgIHwKK3wJCQkJCQkgQllURV8gICAgIGJfVG9yQ291bnRlciwgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSBQQllURV8gICBwYl9UaW1pbmdVbml0LCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJIFBVTE9OR18gcHVsX1RpbWluZ0ludGVydmFsLCB8Cit8CQkJCQkJIFBCWVRFXyAgIHBiX0lucHV0TW9kZSwgICAgICB8Cit8CQkJCQkJIFBCWVRFXyAgIHBiX0V4dGVybkdhdGUsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfQ3ljbGVNb2RlLCAgICAgIHwKK3wJCQkJCQkgUEJZVEVfICAgcGJfRW5hYmxlLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9JbnRlcnJ1cHRFbmFibGUpfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlIHRoZSB0b3IgY291bnRlciAoYl9Ub3JDb3VudGVyKSBmcm9tIHNlbGVjdGVkICAgIHwKK3wJCSAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRvckNvdW50ZXIiIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCAgIHwKK3wJCSAgICAgIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgaW50ZXJydXB0LCB0aGUgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0b3IgY291bnRlciBnZW5lcmF0ZSBhIGludGVycnVwdCBhZnRlciB0aGUgdGltaW5nIGN5Y2xlfAorfCAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiBhbmQgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IG1hc2sgZGVzY3JpcHRpb24gY2hhcHRlciBmcm9tIHRoaXMgbWFudWFsLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgYl9DeWNsZU1vZGUgcGFyYW1ldGVyIGRldGVybWluZSBpZiB5b3Ugd2lsbCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVkIGEgc2luZ2xlIG9yIG1vcmUgY3ljbGUuICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Ub3JDb3VudGVyICAgOiBUb3IgY291bnRlciBzZWxlY3Rpb24gKDAgb3IgMSkKKworCWJfTW9kdWxOYnIJCQk9CUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfVG9yQ291bnRlcgkJPQlDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKy4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfICBwYl9UaW1pbmdVbml0ICAgIDogQmFzZSB0aW1pbmcgdW5pdCAoMCB0byA0KSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IG5zICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogwrVzICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogbXMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBzICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IG1uICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1RpbWluZ0ludGVydmFsIDogQmFzZSB0aW1pbmcgdmFsdWUuICAgICAgICB8Cit8CQkgICAgICBQQllURV8gcGJfSW5wdXRNb2RlICAgICAgICA6IElucHV0IHNpZ25hbCBsZXZlbCAgICAgICAgfAorfAkJCQkJCSAgIHNlbGVjdGlvbiAgCQkgICAgIHwKK3wJCQkJCQkwIDogVG9yIGNvdW50IGVhY2ggbG93IGxldmVsIHwKK3wJCQkJCQkxIDogVG9yIGNvdW50IGVhY2ggaGlnaCBsZXZlbHwKK3wJCSAgICAgIFBCWVRFXyBwYl9FeHRlcm5HYXRlCTogRXh0ZXJuIGdhdGUgYWN0aW9uICAgICAgICAgfAorfAkJCQkJCSAgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMCA6IEV4dGVybiBnYXRlIHNpZ25hbCBub3QgfAorfAkJCQkJCSAgICAgIHVzZWQgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMSA6IEV4dGVybiBnYXRlIHNpZ25hbCB1c2VkfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9DeWNsZU1vZGUgICAgICAgOiBUb3IgY291bnRlciBhY3F1aXNpdGlvbiAgICB8Cit8CQkJCQkJICBtb2RlICAgICAgICAgICAJICAgICB8Cit8CQkgICAgICBQQllURV8gcGJfRW5hYmxlCQk6IEluZGljYXRlIGlmIHRoZSB0b3IgY291bnRlcnwKK3wJCQkJCQkgIGlzIGVuYWJsZWQgb3Igbm8gICAgICAgICAgIHwKK3wJCQkJCQkgIDAgOiBUb3IgY291bnRlciBkaXNhYmxlZCAgIHwKK3wJCQkJCQkgIDEgOiBUb3IgY291bnRlciBlbmFibGVkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3IgY291bnRlciBpbnRlcnJ1cHQuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRTogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSB0b3IgY291bnRlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0RJU0FCTEU6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQKKwlwYl9UaW1pbmdVbml0CQk9CShQQllURSkgJmRhdGFbMF07CisJcHVsX1RpbWluZ0ludGVydmFsCT0gIChQVUxPTkcpICZkYXRhWzFdOworCXBiX0lucHV0TW9kZQkJPQkoUEJZVEUpICZkYXRhWzJdOworCXBiX0V4dGVybkdhdGUJCT0JKFBCWVRFKSAmZGF0YVszXTsKKwlwYl9DeWNsZU1vZGUJCT0JKFBCWVRFKSAmZGF0YVs0XTsKKwlwYl9FbmFibGUJCQk9CShQQllURSkgJmRhdGFbNV07CisJcGJfSW50ZXJydXB0RW5hYmxlCT0JKFBCWVRFKSAmZGF0YVs2XTsKKyAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRHZXRUb3JDb3VudGVySW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9Ub3JDb3VudGVyOworCVBCWVRFIHBiX1RpbWluZ1VuaXQ7CisJUFVMT05HIHB1bF9UaW1pbmdJbnRlcnZhbDsKKwlQQllURSBwYl9JbnB1dE1vZGU7CisJUEJZVEUgcGJfRXh0ZXJuR2F0ZTsKKwlQQllURSBwYl9DeWNsZU1vZGU7CisJUEJZVEUgcGJfRW5hYmxlOworCVBCWVRFIHBiX0ludGVycnVwdEVuYWJsZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RvckNvdW50ZXIgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXBiX1RpbWluZ1VuaXQgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlwdWxfVGltaW5nSW50ZXJ2YWwgPSAoUFVMT05HKSAmIGRhdGFbMV07CisJcGJfSW5wdXRNb2RlID0gKFBCWVRFKSAmIGRhdGFbMl07CisJcGJfRXh0ZXJuR2F0ZSA9IChQQllURSkgJiBkYXRhWzNdOworCXBiX0N5Y2xlTW9kZSA9IChQQllURSkgJiBkYXRhWzRdOworCXBiX0VuYWJsZSA9IChQQllURSkgJiBkYXRhWzVdOworCXBiX0ludGVycnVwdEVuYWJsZSA9IChQQllURSkgJiBkYXRhWzZdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyA4ICsgKDE2ICogYl9Ub3JDb3VudGVyKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCQkJCSpwYl9FbmFibGUgPSBkd19TdGF0dXMgJiAxOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEdldCB0aGUgY29tbWFuZG8gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDQgKworCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX0N5Y2xlTW9kZSA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXMgPj4gNCkgJiAxKTsKKwkJCQkJKnBiX0ludGVycnVwdEVuYWJsZSA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXMgPj4gNSkgJiAxKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBleHRlcm4gZ2F0ZSB1c2VkIGZvciBjbG9jayBvciBmb3Igc2lnbmFsIEIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4NjAwKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGV4dGVybiBnYXRlIHVzZWQgZm9yIHNpZ25hbCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChkd19TdGF0dXMgJiAweDQwMCkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBzaW1wbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDB4NzgwMCkKKwkJCQkJCQkJPT0gMHg3ODAwKSB7CisJCQkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCQkJQVBDSTE3MTBfVE9SX1NJTVBMRV9NT0RFOworCQkJCQkJCX0KKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBkb3VibGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDB4NzgwMCkKKwkJCQkJCQkJPT0gMHgxODAwKSB7CisJCQkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCQkJQVBDSTE3MTBfVE9SX0RPVUJMRV9NT0RFOworCQkJCQkJCX0KKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBxdWFkcnVwbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDB4NzgwMCkKKwkJCQkJCQkJPT0gMHgwMDAwKSB7CisJCQkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCQkJQVBDSTE3MTBfVE9SX1FVQURSVVBMRV9NT0RFOworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4NDAwKQorCQkJCQkJZWxzZSB7CisJCQkJCQkJKnBiX0lucHV0TW9kZSA9IDE7CisJCQkJCQl9CS8vIC8vIGlmIChkd19TdGF0dXMgJiAweDQwMCkKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEV4dGVybiBnYXRlIG5vdCB1c2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcGJfRXh0ZXJuR2F0ZSA9IDA7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4NjAwKQorCQkJCQllbHNlIHsKKwkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyA+PiA2KQorCQkJCQkJCSYgMSk7CisJCQkJCQkqcGJfRXh0ZXJuR2F0ZSA9CisJCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzID4+IDcpCisJCQkJCQkJJiAxKTsKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHg2MDApCisKKwkJCQkJKnBiX1RpbWluZ1VuaXQgPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJc19Ub3JDb3VudGVySW5mb1tiX1RvckNvdW50ZXJdLgorCQkJCQkJYl9UaW1pbmdVbml0OworCisJCQkJCSpwdWxfVGltaW5nSW50ZXJ2YWwgPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJc19Ub3JDb3VudGVySW5mb1tiX1RvckNvdW50ZXJdLgorCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsOworCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyBcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlciA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZFRvckNvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8gICAgIGJfVG9yQ291bnRlciwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyAgICB1aV9UaW1lT3V0LCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1RvckNvdW50ZXJTdGF0dXMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfVG9yQ291bnRlclZhbHVlKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgCWNhc2UgQVBDSTE3MTBfVE9SX0dFVFBST0dSRVNTU1RBVFVTOiBSZXR1cm4gdGhlIHRvciBjb3VudGVyCisoYl9Ub3JDb3VudGVyKSBzdGF0dXMgKHBiX1RvckNvdW50ZXJTdGF0dXMpIGZyb20gc2VsZWN0ZWQgdG9yIGNvdW50ZXIgICAgICAgIHwKK3wJCSAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuCisKKwkJCQkgY2FzZSBBUENJMTcxMF9UT1JfR0VUQ09VTlRFUlZBTFVFIDoKKyAgUmV0dXJuIHRoZSB0b3IgY291bnRlciAoYl9Ub3JDb3VudGVyKSBzdGF0dXMgICAgICAgICAgIHwKK3wJCSAgICAgIChwYl9Ub3JDb3VudGVyU3RhdHVzKSBhbmQgdGhlIHRpbWluZyB2YWx1ZSAgICAgICAgICAgICB8Cit8CQkgICAgICAocHVsX1RvckNvdW50ZXJWYWx1ZSkgYWZ0ZXIgYSBjb250aW5nIGN5Y2xlIHN0b3AgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgdG9yIGNvdW50ZXIgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Ub3JDb3VudGVyICAgOiBUb3IgY291bnRlciBzZWxlY3Rpb24gKDAgb3IgMSkuCisJYl9Nb2R1bE5iciAgICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUgICAgPSAoQllURSkgZGF0YVswXTsKKwliX1RvckNvdW50ZXIgID0JKEJZVEUpIGRhdGFbMV07CisJdWlfVGltZU91dAkgID0gKFVJTlQpIGRhdGFbMl07IHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfVG9yQ291bnRlclN0YXR1cyA6IFJldHVybiB0aGUgdG9yIGNvdW50ZXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy4gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDb250aW5nIGN5Y2xlIG5vdCBzdGFydGVkfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGdhdGUgbm90IHNldC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ29udGluZyBjeWNsZSBzdGFydGVkLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBnYXRlIHNldC4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IENvbnRpbmcgY3ljbGUgc3RvcHBlZC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRpbmcgY3ljbGUgaXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUuICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IEEgb3ZlcmZsb3cgb2NjdXIuIFlvdSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBjaGFuZ2UgdGhlIGJhc2UgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgd2l0Y2ggdGhlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyInwKK3wJCQkJCQk0IDogVGltZWVvdXQgb2NjdXIgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkcgIHB1bF9Ub3JDb3VudGVyVmFsdWUgIDogVG9yIGNvdW50ZXIgdmFsdWUuCisJcGJfVG9yQ291bnRlclN0YXR1cz0oUEJZVEUpICZkYXRhWzBdOworCXB1bF9Ub3JDb3VudGVyVmFsdWU9KFBVTE9ORykgJmRhdGFbMV07ICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRvciBjb3VudGVyIG5vdCBlbmFibGVkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRW5hYmxlVG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZyAoMCB0byA2NTUzNSkgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzR2V0VG9yQ291bnRlclByb2dyZXNzU3RhdHVzQW5kVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfVGltZU91dCA9IDA7CisKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1RvckNvdW50ZXI7CisJQllURSBiX1JlYWRUeXBlOworCVVJTlQgdWlfVGltZU91dDsKKwlQQllURSBwYl9Ub3JDb3VudGVyU3RhdHVzOworCVBVTE9ORyBwdWxfVG9yQ291bnRlclZhbHVlOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUgPSAoQllURSkgZGF0YVswXTsKKwliX1RvckNvdW50ZXIgPSAoQllURSkgZGF0YVsxXTsKKwl1aV9UaW1lT3V0ID0gKFVJTlQpIGRhdGFbMl07CisJcGJfVG9yQ291bnRlclN0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCXB1bF9Ub3JDb3VudGVyVmFsdWUgPSAoUFVMT05HKSAmIGRhdGFbMV07CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX1JlYWRUeXBlID09IEFQQ0kxNzEwX1RPUl9SRUFESU5URVJSVVBUKSB7CisKKwkJZGF0YVswXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0uYl9PbGRNb2R1bGVNYXNrOworCQlkYXRhWzFdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRJbnRlcnJ1cHRNYXNrOworCQlkYXRhWzJdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgPSAoZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQl1aV9SZWFkICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQlyZXR1cm4gaW5zbi0+bjsKKwl9CisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgOCArICgxNiAqIGJfVG9yQ291bnRlcikgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBjb3VudGVyIGVuYWJsZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MSkgeworCisJCQkJCQlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKworCQkJCQkJY2FzZSBBUENJMTcxMF9UT1JfR0VUUFJPR1JFU1NTVEFUVVM6CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBSZWFkIHRoZSBzdGF0dXMgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCWR3X1N0YXR1cyAmIDB4RjsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgc3RhcnQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChkd19TdGF0dXMgJiAxKSB7CisJCQkJCQkJCWlmIChkd19TdGF0dXMgJgorCQkJCQkJCQkJMikgeworCQkJCQkJCQkJaWYgKGR3X1N0YXR1cyAmIDQpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRvciBjb3VudGVyIG93ZXJmbG93ICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwYl9Ub3JDb3VudGVyU3RhdHVzCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJMzsKKwkJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRvciBjb3VudGVyIHN0YXJ0ZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRvciBjb3VudGVyIHN0YXJ0ZWQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVG9yIGNvdW50ZXIgbm90IHN0YXJ0ZWQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJPSAwOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBBUENJMTcxMF9UT1JfR0VUQ09VTlRFUlZBTFVFOgorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgdGltb3V0IHBhcmFtZXRlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKCh1aV9UaW1lT3V0ID49IDApCisJCQkJCQkJCSYmICh1aV9UaW1lT3V0CisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNjU1MzVVTCkpCisJCQkJCQkJeworCQkJCQkJCQlmb3IgKDs7KSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkd19TdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkJKworCQkJCQkJCQkJCTQKKwkJCQkJCQkJCQkrCisJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGVzdCBpZiBvdmVyZmxvdyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgNCkgPT0gNCkgeworCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogT3ZlcmZsb3cgb2NjdXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkzOworCisJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSZWFkIHRoZSB2YWx1ZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1RvckNvdW50ZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTAKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDQpID09IDQpCisJCQkJCQkJCQllbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0b3BwZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMikgPT0gMikgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQSBzdG9wIHNpZ25hbCBvY2N1ciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJMjsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJlYWQgdGhlIHZhbHVlICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkqcHVsX1RvckNvdW50ZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkwCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAyKSA9PSAyKQorCQkJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0YXJ0ZWQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpIHsKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkJLyogQSBzdGFydCBzaWduYWwgb2NjdXIgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkKKwkJCQkJCQkJCQkJZWxzZSB7CisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJCS8qIE1lYXN1cmVtZW50IG5vdCBzdGFydGVkICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJMDsKKwkJCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKworCQkJCQkJCQkJaWYgKGR3X1RpbWVPdXQgPT0gdWlfVGltZU91dCkgeworCQkJCS8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lb3V0IG9jY3VyICovCisJCQkJLyoqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEluY3JlbWVudCB0aGUgdGltZW91dCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfVGltZU91dAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X1RpbWVPdXQKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCisJCQkJCQkJCQkJbWRlbGF5KDEwMDApOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CS8vIGZvciAoOzspCisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgdGltZW91dCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKCpwYl9Ub3JDb3VudGVyU3RhdHVzICE9IDMpICYmIChkd19UaW1lT3V0ID09IHVpX1RpbWVPdXQpICYmICh1aV9UaW1lT3V0ICE9IDApKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVvdXQgb2NjdXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQk0OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCXByaW50aygiSW5wdXRzIHdyb25nXG4iKTsKKwkJCQkJCX0JLy8gc3dpdGNoIGVuZAorCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBub3QgZW5hYmxlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlciA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ1ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzMwTUhaCQkzMAorI2RlZmluZSBBUENJMTcxMF8zM01IWgkJMzMKKyNkZWZpbmUgQVBDSTE3MTBfNDBNSFoJCTQwCisKKyNkZWZpbmUgQVBDSTE3MTBfR0FURV9JTlBVVAkxMAorCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9TSU1QTEVfTU9ERQkyCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERQkzCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9RVUFEUlVQTEVfTU9ERQk0CisKKyNkZWZpbmUgQVBDSTE3MTBfU0lOR0xFCQkJMAorI2RlZmluZSBBUENJMTcxMF9DT05USU5VT1VTCQkxCisKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dFVFBST0dSRVNTU1RBVFVTCTAKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dFVENPVU5URVJWQUxVRQkxCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9SRUFESU5URVJSVVBUCTIKKworLyoKKyAqIFRPUl9DT1VOVEVSIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VG9yQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVG9yQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQl1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZEdldFRvckNvdW50ZXJJbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworLyoKKyAqIFRPUl9DT1VOVEVSIFJFQUQgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNHZXRUb3JDb3VudGVyUHJvZ3Jlc3NTdGF0dXNBbmRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiMWQyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMKQEAgLTAsMCArMSwxMDM4IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogVFRMLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBUVEwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDEzLzA1Lzk4IHwgUy4gV2ViZXIgIHwgVFRMIGRpZ2l0YWwgaW5wdXQgLyBvdXRwdXQgaW1wbGVtZW50YXRpb24gICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfVHRsLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRUVExJT0RpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJIEJZVEVfICAgIGJfUG9ydEFNb2RlLCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8gICAgYl9Qb3J0Qk1vZGUsICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXyAgICBiX1BvcnRDTW9kZSwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJIEJZVEVfICAgIGJfUG9ydERNb2RlKSAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgIEFQQ0kxNzEwX1RUTF9JTklUICh1c2luZyBkZWZhdWx0cykgICA6IENvbmZpZ3VyZSB0aGUgVFRMIEkvTyBvcGVyYXRpbmcgbW9kZSBmcm9tIHNlbGVjdGVkICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZXwKK3wgICAgICAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBUVEwuICAgfAorCQkJCSBBUENJMTcxMF9UVExfSU5JVERJUkVDVElPTih1c2VyIGlucHV0cyBmb3IgZGlyZWN0aW9uKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpCisJCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJCWJfSW5pdFR5cGUgPSAoQllURSkgZGF0YVswXTsKKwkJYl9Qb3J0QU1vZGUJPSAoQllURSkgZGF0YVsxXTsKKwkJYl9Qb3J0Qk1vZGUgPSAoQllURSkgZGF0YVsyXTsKKwkJYl9Qb3J0Q01vZGUgPSAoQllURSkgZGF0YVszXTsKKwkJYl9Qb3J0RE1vZGUJPSAoQllURSkgZGF0YVs0XTt8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgLTQ6IEZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdmVyc2lvbiAgICAgICAgICAgICB8Cit8CQkgICAgIC01OiBQb3J0IEEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAtNjogUG9ydCBCIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgLTc6IFBvcnQgQyBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgIC04OiBQb3J0IEQgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9Jbml0VHlwZTsKKwlCWVRFIGJfUG9ydEFNb2RlOworCUJZVEUgYl9Qb3J0Qk1vZGU7CisJQllURSBiX1BvcnRDTW9kZTsKKwlCWVRFIGJfUG9ydERNb2RlOworCisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0luaXRUeXBlID0gKEJZVEUpIGRhdGFbMF07CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBUVEwgSS9PIG1vZHVsZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UVExfSU8pIHsKKwkJCXN3aXRjaCAoYl9Jbml0VHlwZSkgeworCQkJY2FzZSBBUENJMTcxMF9UVExfSU5JVDoKKworCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19UVExJT0luZm8uYl9UVExJbml0ID0gMTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFRUTCBwb3J0IEEgdG8gaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzBdID0gMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFRUTCBwb3J0IEIgdG8gaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzFdID0gMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFRUTCBwb3J0IEMgdG8gaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzJdID0gMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBUVEwgcG9ydCBEIHRvIG91dHB1dCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzNdID0gMTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgweDgsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfVFRMX0lOSVRESVJFQ1RJT046CisKKwkJCQliX1BvcnRBTW9kZSA9IChCWVRFKSBkYXRhWzFdOworCQkJCWJfUG9ydEJNb2RlID0gKEJZVEUpIGRhdGFbMl07CisJCQkJYl9Qb3J0Q01vZGUgPSAoQllURSkgZGF0YVszXTsKKwkJCQliX1BvcnRETW9kZSA9IChCWVRFKSBkYXRhWzRdOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIHZlcnNpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQlbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49CisJCQkJCTB4MzIzMCkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgcG9ydCBBIG1vZGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKChiX1BvcnRBTW9kZSA9PSAwKQorCQkJCQkJfHwgKGJfUG9ydEFNb2RlID09IDEpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgcG9ydCBCIG1vZGUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoYl9Qb3J0Qk1vZGUgPT0gMCkKKwkJCQkJCQl8fCAoYl9Qb3J0Qk1vZGUgPT0gMSkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgcG9ydCBDIG1vZGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGJfUG9ydENNb2RlID09IDApCisJCQkJCQkJCXx8IChiX1BvcnRDTW9kZQorCQkJCQkJCQkJPT0gMSkpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgcG9ydCBEIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKGJfUG9ydERNb2RlID09IDApIHx8IChiX1BvcnRETW9kZSA9PSAxKSkgeworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQkJCWJfVFRMSW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCBUVEwgcG9ydCBBIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQkJCVswXQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BvcnRBTW9kZTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgVFRMIHBvcnQgQiBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJCQlbMV0KKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9Qb3J0Qk1vZGU7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IFRUTCBwb3J0IEMgbW9kZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCQkJWzJdCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfUG9ydENNb2RlOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCBUVEwgcG9ydCBEIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQkJCVszXQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BvcnRETW9kZTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCgoYl9Qb3J0QU1vZGUgPDwgMCkgfCAoYl9Qb3J0Qk1vZGUgPDwgMSkgfCAoYl9Qb3J0Q01vZGUgPDwgMikgfCAoYl9Qb3J0RE1vZGUgPDwgMyksIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUG9ydCBEIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCJQb3J0IEQgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktODsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBQb3J0IEMgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiUG9ydCBDIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUG9ydCBCIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlBvcnQgQiBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBQb3J0IEEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJQb3J0IEEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBGdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHZlcnNpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdmVyc2lvblxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQlEUFJJTlRLKCJcbiIpOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIkJhZCBDb25maWcgVHlwZVxuIik7CisJCQl9CS8vIHN3aXRjaCBlbmQKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgaV9BUENJMTcxMF9SZWFkVFRMSU9DaGFubmVsVmFsdWUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9TZWxlY3RlZFBvcnQsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0lucHV0Q2hhbm5lbCwgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfQ2hhbm5lbFN0YXR1cykgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgaW5wdXQgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0IHBvcnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1NlbGVjdGVkUG9ydCkgZnJvbSBzZWxlY3RlZCBUVEwgbW9kdWxlIChiX01vZHVsTmJyKSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byA3KSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWxlY3RlZFBvcnQsICAgICAgIDogU2VsZWN0aW9uIGZyb20gVFRMIEkvTyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ICgwIHRvIDIpICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBQb3J0IEEgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFBvcnQgQiBzZWxlY3Rpb24gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogUG9ydCBDIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBQb3J0IEQgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnB1dENoYW5uZWwgICAgICAgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAoIDAgdG8gMikKK0FQQ0kxNzEwX1RUTF9SRUFEQ0hBTk5FTAorCWJfTW9kdWxOYnIJICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRQb3J0PSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYl9JbnB1dENoYW5uZWw9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUJICA9IChCWVRFKSBkYXRhWzBdOworCisgQVBDSTE3MTBfVFRMX1JFQURQT1JUfAorCWJfTW9kdWxOYnIJICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRQb3J0PSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYl9SZWFkVHlwZQkgID0gKEJZVEUpIGRhdGFbMF07CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0KKworCVBCWVRFXyAgcGJfQ2hhbm5lbFN0YXR1cyAgICA6IERpZ2l0YWwgaW5wdXQgY2hhbm5lbCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5sZSBpcyBub3QgYWN0aXZlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDaGFubmxlIGlzIGFjdGl2ZSAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1NlbGVjdGVkUG9ydDsKKwlCWVRFIGJfSW5wdXRDaGFubmVsOworCUJZVEUgYl9SZWFkVHlwZTsKKwlQQllURSBwYl9DaGFubmVsU3RhdHVzOworCVBCWVRFIHBiX1BvcnRWYWx1ZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfUmVhZFR5cGUgPSAoQllURSkgZGF0YVswXTsKKwliX01vZHVsTmJyID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYl9JbnB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFRUTCBJL08gbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RUTF9JTykgeworCQkJc3dpdGNoIChiX1JlYWRUeXBlKSB7CisKKwkJCWNhc2UgQVBDSTE3MTBfVFRMX1JFQURDSEFOTkVMOgorCQkJCXBiX0NoYW5uZWxTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgVFRMIEkvTyBwb3J0IG51bWJlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGJfU2VsZWN0ZWRQb3J0IDw9IDIpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA9PQorCQkJCQkJCTB4MzEzMCkpCisJCQkJCXx8ICgoYl9TZWxlY3RlZFBvcnQgPD0gMykKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMjMwKSkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgaW1ucHV0IGNoYW5uZWwgbnVtYmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoKGJfSW5wdXRDaGFubmVsIDw9IDcpCisJCQkJCQkJJiYgKGJfU2VsZWN0ZWRQb3J0IDwgMykpCisJCQkJCQl8fCAoKGJfSW5wdXRDaGFubmVsIDw9IDEpCisJCQkJCQkJJiYgKGJfU2VsZWN0ZWRQb3J0ID09CisJCQkJCQkJCTMpKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgdGhlIFRUTCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfVFRMSU9JbmZvLmJfVFRMSW5pdCA9PQorCQkJCQkJCTEpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIFRUTCBwb3J0IHVzZWQgZm9yIGlucHV0ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID09IDB4MzEzMCkgfHwgKCgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMyMzApICYmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvbltiX1NlbGVjdGVkUG9ydF0gPT0gMCkpKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQkJCWlubAorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKworCQkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCSpwYl9DaGFubmVsU3RhdHVzCisJCQkJCQkJCQk9CisJCQkJCQkJCQkoQllURSkgKAorCQkJCQkJCQkJKGR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT4+CisJCQkJCQkJCQkJKDggKiBiX1NlbGVjdGVkUG9ydCkpID4+IGJfSW5wdXRDaGFubmVsKSAmIDE7CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3JcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS00OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRUTCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiVFRMIEkvTyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgZXJyb3IgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvclxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBUENJMTcxMF9UVExfUkVBRFBPUlQ6CisJCQkJcGJfUG9ydFZhbHVlID0gKFBCWVRFKSAmIGRhdGFbMF07CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBUVEwgSS9PIHBvcnQgbnVtYmVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGJfU2VsZWN0ZWRQb3J0IDw9IDIpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA9PQorCQkJCQkJCTB4MzEzMCkpCisJCQkJCXx8ICgoYl9TZWxlY3RlZFBvcnQgPD0gMykKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMjMwKSkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgdGhlIFRUTCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RUTElPSW5mby5iX1RUTEluaXQgPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBUVEwgcG9ydCB1c2VkIGZvciBpbnB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQkJW2JfTW9kdWxOYnJdCisJCQkJCQkJCQkmCisJCQkJCQkJCQkweEZGRkYpCisJCQkJCQkJCT09IDB4MzEzMCkKKwkJCQkJCQl8fCAoKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzIzMCkgJiYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uW2JfU2VsZWN0ZWRQb3J0XSA9PSAwKSkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCSpwYl9Qb3J0VmFsdWUgPQorCQkJCQkJCQkoQllURSkgKAorCQkJCQkJCQkoZHdfU3RhdHVzUmVnID4+CisJCQkJCQkJCQkoOCAqIGJfU2VsZWN0ZWRQb3J0KSkgJiAweEZGKTsKKwkJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3IgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRUTCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3JcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXByaW50aygiQmFkIFJlYWRUeXBlXG4iKTsKKworCQkJfQkvL0VuZCBTd2l0Y2gKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShjb21lZGlfZGV2aWNlCisqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBhbGwgZGlnaXRhbCBpbnB1dCBwb3J0cyAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChwb3J0IEEsIHBvcnQgQiBhbmQgcG9ydCBDKSBmcm9tIHNlbGVjdGVkIFRUTCAgICAgICAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpIAkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcHVsX1BvcnRWYWx1ZSAgICAgIDogRGlnaXRhbCBUVEwgaW5wdXRzIHBvcnQgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnOworCUJZVEUgYl9Nb2R1bE5icjsKKwlQVUxPTkcgcHVsX1BvcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcHVsX1BvcnRWYWx1ZSA9IChQVUxPTkcpICYgZGF0YVswXTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFRUTCBJL08gbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RUTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHRoZSBUVEwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19UVExJT0luZm8uYl9UVExJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFRUTCBSZXYxLjAgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA9PQorCQkJCQkweDMxMzApIHsKKwkJCQkJKnB1bF9Qb3J0VmFsdWUgPQorCQkJCQkJZHdfU3RhdHVzUmVnICYgMHhGRkZGRkZVTDsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHBvcnQgQSBub3QgdXNlZCBmb3Igb3V0cHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvblswXSA9PSAxKSB7CisJCQkJCQkqcHVsX1BvcnRWYWx1ZSA9CisJCQkJCQkJZHdfU3RhdHVzUmVnICYKKwkJCQkJCQkweDNGRkZGMDBVTDsKKwkJCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcG9ydCBCIG5vdCB1c2VkIGZvciBvdXRwdXQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb25bMV0gPT0gMSkgeworCQkJCQkJKnB1bF9Qb3J0VmFsdWUgPQorCQkJCQkJCWR3X1N0YXR1c1JlZyAmCisJCQkJCQkJMHgzRkYwMEZGVUw7CisJCQkJCX0KKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHBvcnQgQyBub3QgdXNlZCBmb3Igb3V0cHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uWzJdID09IDEpIHsKKwkJCQkJCSpwdWxfUG9ydFZhbHVlID0KKwkJCQkJCQlkd19TdGF0dXNSZWcgJgorCQkJCQkJCTB4MzAwRkZGRlVMOworCQkJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBwb3J0IEQgbm90IHVzZWQgZm9yIG91dHB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvblszXSA9PSAxKSB7CisJCQkJCQkqcHVsX1BvcnRWYWx1ZSA9CisJCQkJCQkJZHdfU3RhdHVzUmVnICYKKwkJCQkJCQkweEZGRkZGRlVMOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVFRMIEkvTyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9TZXRUVExJT0NobE9uICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICAgICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICAgYl9PdXRwdXRDaGFubmVsKQorSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlU2V0VFRMSU9DaGxPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIG9yIHJlc2V0cyAgdGhlIG91dHB1dCB3aXRjaCBoYXMgYmVlbiBwYXNzZWQgd2l0aCB0aGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGJfQ2hhbm5lbC4gU2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgc2V0dGluZyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbiBvdXB1dCBoaWdoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfT3V0cHV0Q2hhbm5lbCA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCBvciAxKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgOiBQRDAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgICA6IFBEMSAgICAgICAgICAgICAgICB8Cit8CQkJCQkJIDIgdG8gOSA6IFBBICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJMTAgdG8gMTc6IFBCICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJMTggdG8gMjU6IFBDICAgICAgICAgICAgICAgICB8CisKKyAgYl9Nb2R1bE5icgkgICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfT3V0cHV0Q2hhbm5lbD0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfU3RhdGUJICAgPSBkYXRhWzBdOyAvLyBPTiBvciBPRkYKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBJL08gbW9kdWxlICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiIGlfQVBDSTE3MTBfSW5pdFRUTElPIgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVTZXRUVExJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX091dHB1dENoYW5uZWw7CisJVUlOVCB1aV9TdGF0ZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX091dHB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9TdGF0ZSA9IGRhdGFbMF07CS8vIE9OIG9yIE9GRgorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgVFRMIEkvTyBtb2R1bGUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVFRMX0lPKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgdGhlIFRUTCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1RUTElPSW5mby5iX1RUTEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFRUTCBJL08gY2hhbm5lbCBudW1iZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGJfT3V0cHV0Q2hhbm5lbCA8PSAxKQorCQkJCQkJJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQkJCVtiX01vZHVsTmJyXSAmCisJCQkJCQkJCTB4RkZGRikgPT0KKwkJCQkJCQkweDMxMzApKQorCQkJCQl8fCAoKGJfT3V0cHV0Q2hhbm5lbCA8PSAyNSkKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMjMwKSkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRoZSBzZWxlY3RlZCBjaGFubmVsIGlzIGEgb3V0cHV0IGNoYW5uZWwgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoKGJfT3V0cHV0Q2hhbm5lbCA8PSAxKQorCQkJCQkJCSYmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJWzNdID09IDEpKQorCQkJCQkJfHwgKChiX091dHB1dENoYW5uZWwgPj0gMikKKwkJCQkJCQkmJiAoYl9PdXRwdXRDaGFubmVsIDw9CisJCQkJCQkJCTkpCisJCQkJCQkJJiYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQlbMF0gPT0gMSkpCisJCQkJCQl8fCAoKGJfT3V0cHV0Q2hhbm5lbCA+PSAxMCkKKwkJCQkJCQkmJiAoYl9PdXRwdXRDaGFubmVsIDw9CisJCQkJCQkJCTE3KQorCQkJCQkJCSYmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJWzFdID09IDEpKQorCQkJCQkJfHwgKChiX091dHB1dENoYW5uZWwgPj0gMTgpCisJCQkJCQkJJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PQorCQkJCQkJCQkyNSkKKwkJCQkJCQkmJiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCVsyXSA9PSAxKSkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIFBEMCBzZWxlY3RlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfT3V0cHV0Q2hhbm5lbCA9PSAwKSB7CisKKwkJCQkJCQlvdXRsKHVpX1N0YXRlLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIFBEMSBzZWxlY3RlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfT3V0cHV0Q2hhbm5lbCA9PQorCQkJCQkJCQkxKSB7CisKKwkJCQkJCQkJb3V0bCh1aV9TdGF0ZSwKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyA0ICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQliX091dHB1dENoYW5uZWwKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWJfT3V0cHV0Q2hhbm5lbAorCQkJCQkJCQkJLSAyOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogUmVhZCBhbGwgY2hhbm5lbCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQkJCWlubAorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKworCQkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQlpZiAodWlfU3RhdGUpCS8vIE9OCisJCQkJCQkJCXsKKwkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQkoKGJfT3V0cHV0Q2hhbm5lbCAvIDgpICogOCkpICYgMHhGRjsKKwkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJKDEKKwkJCQkJCQkJCQk8PAorCQkJCQkJCQkJCShiX091dHB1dENoYW5uZWwKKwkJCQkJCQkJCQkJJQorCQkJCQkJCQkJCQk4KSk7CisJCQkJCQkJCX0gZWxzZQkvLyBPZmYKKwkJCQkJCQkJeworCQkJCQkJCQkJZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCSgoYl9PdXRwdXRDaGFubmVsIC8gOCkgKiA4KSkgJiAweEZGOworCQkJCQkJCQkJZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkoMHhGRgorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkoMSA8PCAoYl9PdXRwdXRDaGFubmVsICUgOCkpKTsKKworCQkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgbmV3IG91dHB1dCB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKGR3X1N0YXR1c1JlZywgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKChiX091dHB1dENoYW5uZWwgLyA4KSAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiIFRoZSBzZWxlY3RlZCBUVEwgb3V0cHV0IGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRUTCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgSS9PIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkxNWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX1RUTF9JTklUCQkwCisjZGVmaW5lIEFQQ0kxNzEwX1RUTF9JTklURElSRUNUSU9OCTEKKworI2RlZmluZSBBUENJMTcxMF9UVExfUkVBRENIQU5ORUwJMAorI2RlZmluZSBBUENJMTcxMF9UVExfUkVBRFBPUlQJCTEKKworLyoKKyAqIFRUTCBJTklTSUFMSVNBVElPTiBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIFRUTCBJTlBVVCBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBUVEwgT1VUUFVUIEZVTkNUSU9OUworICovCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVTZXRUVExJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTA3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCkBAIC0wLDAgKzEsMjAzIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCA6IEFEREkgSEVBREVSIFJFQUQgV1JJVEVSIHwgICAgIENvbXBpbGVyICAgOiBWaXN1YWwgQysrICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFM1OTIwLmNwcCAgICAgICAgICAgfCAgICAgVmVyc2lvbiAgICA6IDYuMCAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgQXV0aG9yIDogRS4gTElCUyAgICAgICAgICAgICAgICAgICAgICBEYXRlIDogMDIvMDUvMjAwMiAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uICAgOiBETEwgd2l0aCB0aGUgUzU5MjAgUENJIENvbnRyb2xsZXIgZnVuY3Rpb25zICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI4LzA4LzAyIHwgTElCUyBFcmljIHwgQWRkIHJldHVybiBjb2RlcyBlYWNoIHRpbWUgYSBmdW5jdGlvbiBvZiB0aGUgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCBBZGRpIExpYnJhcnkgaXMgY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDMxLzA3LzAzIHwgS1JBVVRIIEouIHwgQ2hhbmdlcyBmb3IgdGhlIE1TWC1Cb3ggICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJhZGRpX2FtY2NfUzU5MjAuaCIKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IEZ1bmN0aW9uICAgTmFtZSAgIDogSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20gICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlQgICAgaV9OYk9mV29yZHNUb1JlYWQsICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEICAgd19FZXByb21TdGFydEFkZHJlc3MsICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV09SRCBwd19EYXRhUmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB3b3JkIGZyb20gdGhlIDU5MjAgZWVwcm9tLiAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IElucHV0IFBhcmFtZXRlcnMgIDogSU5UICAgIGlfTmJPZldvcmRzVG9SZWFkIDogTmJyLiBvZiB3b3JkIHRvIHJlYWQgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogQWRkcmVzcyBvZiB0aGUgZWVwcm9tIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0cmF0IGFkZHJlc3MgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFdPUkQgcHdfRGF0YVJlYWQgOiBSZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworCitJTlQgaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbShJTlQgaV9OYk9mV29yZHNUb1JlYWQsCisJRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MsIFBXT1JEIHB3X0RhdGFSZWFkKQoreworCURXT1JEIGR3X2VlcHJvbV9idXN5ID0gMDsKKwlJTlQgaV9Db3VudGVyID0gMDsKKwlJTlQgaV9Xb3JkQ291bnRlcjsKKwlJTlQgaTsKKwlCWVRFIHBiX1JlYWRCeXRlWzFdOworCUJZVEUgYl9SZWFkTG93Qnl0ZSA9IDA7CisJQllURSBiX1JlYWRIaWdoQnl0ZSA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0xvdyA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAwOworCVdPUkQgd19SZWFkV29yZCA9IDA7CisKKwlmb3IgKGlfV29yZENvdW50ZXIgPSAwOyBpX1dvcmRDb3VudGVyIDwgaV9OYk9mV29yZHNUb1JlYWQ7CisJCWlfV29yZENvdW50ZXIrKykgeworCQlkbyB7CisJCQlkd19lZXByb21fYnVzeSA9CisJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCX0KKwkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQlmb3IgKGlfQ291bnRlciA9IDA7IGlfQ291bnRlciA8IDI7IGlfQ291bnRlcisrKSB7CisJCQliX1NlbGVjdGVkQWRkcmVzc0xvdyA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgJSAyNTY7CS8vUmVhZCB0aGUgbG93IDggYml0IHBhcnQKKwkJCWJfU2VsZWN0ZWRBZGRyZXNzSGlnaCA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgLyAyNTY7CS8vUmVhZCB0aGUgaGlnaCA4IGJpdCBwYXJ0CisKKwkJCS8vU2VsZWN0IHRoZSBsb2FkIGxvdyBhZGRyZXNzIG1vZGUKKwkJCW91dGIoTlZDTURfTE9BRF9MT1csCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBsb3cgYWRkcmVzcworCQkJb3V0YihiX1NlbGVjdGVkQWRkcmVzc0xvdywKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgbG9hZCBoaWdoIGFkZHJlc3MgbW9kZQorCQkJb3V0YihOVkNNRF9MT0FEX0hJR0gsCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBoaWdoIGFkZHJlc3MKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NIaWdoLAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSBSRUFEIG1vZGUKKwkJCW91dGIoTlZDTURfQkVHSU5fUkVBRCwKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkzKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1JlYWQgZGF0YSBpbnRvIHRoZSBFRVBST00KKwkJCSpwYl9SZWFkQnl0ZSA9CisJCQkJaW5iKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUiArIDIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSB1cHBlciBhZGRyZXNzIHBhcnQKKwkJCWlmIChpX0NvdW50ZXIgPT0gMCkgeworCQkJCWJfUmVhZExvd0J5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0gZWxzZSB7CisJCQkJYl9SZWFkSGlnaEJ5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0KKworCQkJLy9TbGVlcAorCQkJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIDsKKworCQl9CisJCXdfUmVhZFdvcmQgPQorCQkJKGJfUmVhZExvd0J5dGUgfCAoKCh1bnNpZ25lZCBzaG9ydCliX1JlYWRIaWdoQnl0ZSkgKgorCQkJCTI1NikpOworCisJCXB3X0RhdGFSZWFkW2lfV29yZENvdW50ZXJdID0gd19SZWFkV29yZDsKKworCQl3X0VlcHJvbVN0YXJ0QWRkcmVzcyArPSAyOwkvLyB0byByZWFkIHRoZSBuZXh0IHdvcmQKKworCX0JCQkvLyBmb3IgKC4uLikgaV9OYk9mV29yZHNUb1JlYWQKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlNTZiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUgkweDNjCisjZGVmaW5lIEVFUFJPTV9CVVNZCQkweDgwMDAwMDAwCisjZGVmaW5lIE5WQ01EX0xPQURfTE9XCQkoMHg0IDw8IDUpCS8qIG52UmFtIGxvYWQgbG93IGNvbW1hbmQgKi8KKyNkZWZpbmUgTlZDTURfTE9BRF9ISUdICQkoMHg1IDw8IDUpCS8qIG52UmFtIGxvYWQgaGlnaCBjb21tYW5kICovCisjZGVmaW5lIE5WQ01EX0JFR0lOX1JFQUQJKDB4NyA8PCA1KQkvKiBudlJhbSBiZWdpbiByZWFkIGNvbW1hbmQgKi8KKyNkZWZpbmUgTlZDTURfQkVHSU5fV1JJVEUJKDB4NiA8PCA1KQkvKiBFRVBST00gYmVnaW4gd3JpdGUgY29tbWFuZCAqLworCitJTlQgaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbShJTlQgaV9OYk9mV29yZHNUb1JlYWQsCisJCQkgICAgICBEV09SRCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkgICAgICBXT1JEIHdfRWVwcm9tU3RhcnRBZGRyZXNzLCBQV09SRCBwd19EYXRhUmVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19zNTkzMy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTA3NzRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaApAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIEhlYWRlciBmaWxlIGZvciBBTUNDICBzIDU5MzMgKi8KKworI2lmbmRlZiBfQU1DQ19TNTkzM19IXworI2RlZmluZSBfQU1DQ19TNTkzM19IXworCisjaW5jbHVkZSAiLi4vLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICIuLi9jb21lZGlfcGNpLmgiCisKKyNpZmRlZiBQQ0lfU1VQUE9SVF9WRVIxCisjZXJyb3IgICAgIE5vIHN1cHBvcnQgZm9yIDIuMS41NSBhbmQgb2xkZXIKKyNlbmRpZgorCisvKiB3cml0dGVuIG9uIGJhc2UwICovCisjZGVmaW5lIEZJRk9fQURWQU5DRV9PTl9CWVRFXzIJMHgyMDAwMDAwMAorCisvKiBhZGRlZCBmb3Igc3RlcCA2IGRtYSB3cml0dGVuIG9uIGJhc2UyICovCisjZGVmaW5lIEFNV0VOX0VOQUJMRQkJMHgwMgorCisjZGVmaW5lIEEyUF9GSUZPX1dSSVRFX0VOQUJMRQkweDAxCisKKy8qIGZvciB0cmFuc2ZlciBjb3VudCBlbmFibGUgYml0ICovCisjZGVmaW5lIEFHQ1NUU19UQ19FTkFCTEUJMHgxMDAwMDAwMAorCisvKgorICogQURET04gUkVMQVRFRCBBRERJVElPTlMKKyAqLworLyogQ29uc3RhbnQgKi8KKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9MT1cJCTB4MDAKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdICQkweDEyMDAKKyNkZWZpbmUgQVBDSTMxMjBfQTJQX0ZJRk9fTUFOQUdFTUVOVAkJCTB4MDQwMDA0MDBMCisjZGVmaW5lIEFQQ0kzMTIwX0FNV0VOX0VOQUJMRQkJCQkweDAyCisjZGVmaW5lIEFQQ0kzMTIwX0EyUF9GSUZPX1dSSVRFX0VOQUJMRQkJCTB4MDEKKyNkZWZpbmUgQVBDSTMxMjBfRklGT19BRFZBTkNFX09OX0JZVEVfMgkJCTB4MjAwMDAwMDBMCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9XUklURV9UQ19JTlQJCQkweDAwMDA0MDAwTAorI2RlZmluZSBBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQJCQkweDAwMDQwMDAwTAorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0FNV0VOX0FORF9BMlBfRklGT19XUklURQkweDAKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9CVVNfTUFTVEVSX0FERF9PTgkJMHgwCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfQlVTX01BU1RFUl9QQ0kJCQkweDAKKworLyogQUREX09OIDo6OiB0aGlzIG5lZWRlZCBzaW5jZSBhcGNpIHN1cHBvcnRzIDE2IGJpdCBpbnRlcmZhY2UgdG8gYWRkIG9uICovCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfTE9XCTB4M0MKKyNkZWZpbmUgQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdICShBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVyArIDIpCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVwkweDI0CisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0gJKEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVyArIDIpCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVwkweDA1OAorI2RlZmluZSBBUENJMzEyMF9BRERfT05fTVdUQ19ISUdICShBUENJMzEyMF9BRERfT05fTVdUQ19MT1cgKyAyKQorCisvKiBBTUNDICovCisjZGVmaW5lIEFQQ0kzMTIwX0FNQ0NfT1BfTUNTUgkJMHgzQworI2RlZmluZSBBUENJMzEyMF9BTUNDX09QX1JFR19JTlRDU1IJMHgzOAorCisvKgorICogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAtIFBDSQorICovCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjEJCTB4MDAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CMgkJMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIzCQkweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjQJCTB4MGMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CMQkJMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIyCQkweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjMJCTB4MTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CNAkJMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19GSUZPCQkweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XQVIJCTB4MjQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVdUQwkJMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19NUkFSCQkweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01SVEMJCTB4MzAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUJFRgkJMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19JTlRDU1IJCTB4MzgKKy8qIElOVCBzb3VyY2UgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX0lOVENTUl9TUkMJCShBTUNDX09QX1JFR19JTlRDU1IgKyAyKQorLyogRklGTyBjdHJsICovCisjZGVmaW5lICBBTUNDX09QX1JFR19JTlRDU1JfRkVDCQkoQU1DQ19PUF9SRUdfSU5UQ1NSICsgMykKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUgkJMHgzYworLyogRGF0YSBpbiBieXRlIDIgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBCShBTUNDX09QX1JFR19NQ1NSICsgMikKKy8qIENvbW1hbmQgaW4gYnl0ZSAzICovCisjZGVmaW5lICBBTUNDX09QX1JFR19NQ1NSX05WQ01ECQkoQU1DQ19PUF9SRUdfTUNTUiArIDMpCisKKyNkZWZpbmUgQU1DQ19GSUZPX0RFUFRIX0RXT1JECTgKKyNkZWZpbmUgQU1DQ19GSUZPX0RFUFRIX0JZVEVTCSg4ICogc2l6ZW9mKHUzMikpCisKKy8qCisgKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlcnMgU2l6ZSAtIFBDSQorICovCisjZGVmaW5lIEFNQ0NfT1BfUkVHX1NJWkUJIDY0CS8qIGluIGJ5dGVzICovCisKKy8qCisgKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlciBPZmZzZXRzIC0gQWRkLW9uCisgKi8KKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjEJMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMgkweDA0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIzCTB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjQJMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19BT01CMQkweDEwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIyCTB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjMJMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CNAkweDFjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FGSUZPCTB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XQVIJMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19BUFRBCTB4MjgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQVBURAkweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNUkFSCTB4MzAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1CRUYJMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU5UCTB4MzgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUdDU1RTCTB4M2MKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XVEMJMHg1OAorI2RlZmluZSBBTUNDX09QX1JFR19BTVJUQwkweDVjCisKKy8qCisgKiBBTUNDIC0gQWRkLW9uIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBR0NTVFNfQ09OVFJPTF9NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9BQ0NfTUFTSwkweGUwMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfUkVTRVRfTUFTSwkweDBlMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfTlZfREFfTUFTSwkweDAwZmYwMDAwCisjZGVmaW5lICBBR0NTVFNfQklTVF9NQVNLCTB4MDAwMGYwMDAKKyNkZWZpbmUgQUdDU1RTX1NUQVRVU19NQVNLCTB4MDAwMDAwZmYKKyNkZWZpbmUgIEFHQ1NUU19UQ1pFUk9fTUFTSwkweDAwMDAwMGMwCisjZGVmaW5lICBBR0NTVFNfRklGT19TVF9NQVNLCTB4MDAwMDAwM2YKKworI2RlZmluZSBBR0NTVFNfUkVTRVRfTUJGTEFHUwkweDA4MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9QMkFfRklGTwkweDA0MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9BMlBfRklGTwkweDAyMDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9GSUZPUwkoQUdDU1RTX1JFU0VUX0EyUF9GSUZPIHwgQUdDU1RTX1JFU0VUX1AyQV9GSUZPKQorCisjZGVmaW5lIEFHQ1NUU19BMlBfVENPVU5UCTB4MDAwMDAwODAKKyNkZWZpbmUgQUdDU1RTX1AyQV9UQ09VTlQJMHgwMDAwMDA0MAorCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRU1QVFkJMHgwMDAwMDAyMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0hBTEYJMHgwMDAwMDAxMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0ZVTEwJMHgwMDAwMDAwOAorCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRU1QVFkJMHgwMDAwMDAwNAorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0hBTEYJMHgwMDAwMDAwMgorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0ZVTEwJMHgwMDAwMDAwMQorCisvKgorICogQU1DQyAtIEFkZC1vbiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBSU5UX0lOVF9NQVNLCQkweDAwZmYwMDAwCisjZGVmaW5lIEFJTlRfU0VMX01BU0sJCTB4MDAwMGZmZmYKKyNkZWZpbmUgIEFJTlRfSVNfRU5TRUxfTUFTSwkweDAwMDAxZjFmCisKKyNkZWZpbmUgQUlOVF9JTlRfQVNTRVJURUQJMHgwMDgwMDAwMAorI2RlZmluZSBBSU5UX0JNX0VSUk9SCQkweDAwMjAwMDAwCisjZGVmaW5lIEFJTlRfQklTVF9JTlQJCTB4MDAxMDAwMDAKKworI2RlZmluZSBBSU5UX1JUX0NPTVBMRVRFCTB4MDAwODAwMDAKKyNkZWZpbmUgQUlOVF9XVF9DT01QTEVURQkweDAwMDQwMDAwCisKKyNkZWZpbmUgQUlOVF9PVVRfTUJfSU5UCQkweDAwMDIwMDAwCisjZGVmaW5lIEFJTlRfSU5fTUJfSU5UCQkweDAwMDEwMDAwCisKKyNkZWZpbmUgQUlOVF9SRUFEX0NPTVBMCQkweDAwMDA4MDAwCisjZGVmaW5lIEFJTlRfV1JJVEVfQ09NUEwJMHgwMDAwNDAwMAorCisjZGVmaW5lIEFJTlRfT01CX0VOQUJMRSAJMHgwMDAwMTAwMAorI2RlZmluZSBBSU5UX09NQl9TRUxFQ1QgCTB4MDAwMDBjMDAKKyNkZWZpbmUgQUlOVF9PTUJfQllURQkJMHgwMDAwMDMwMAorCisjZGVmaW5lIEFJTlRfSU1CX0VOQUJMRSAJMHgwMDAwMDAxMAorI2RlZmluZSBBSU5UX0lNQl9TRUxFQ1QgCTB4MDAwMDAwMGMKKyNkZWZpbmUgQUlOVF9JTUJfQllURQkJMHgwMDAwMDAwMworCisvKiBFbmFibGUgQnVzIE1hc3RlcmluZyAqLworI2RlZmluZSBFTl9BMlBfVFJBTlNGRVJTCTB4MDAwMDA0MDAKKy8qIEZJRk8gRmxhZyBSZXNldCAqLworI2RlZmluZSBSRVNFVF9BMlBfRkxBR1MJCTB4MDQwMDAwMDBMCisvKiBGSUZPIFJlbGF0aXZlIFByaW9yaXR5ICovCisjZGVmaW5lIEEyUF9ISV9QUklPUklUWQkJMHgwMDAwMDEwMEwKKy8qIElkZW50aWZ5IEludGVycnVwdCBTb3VyY2VzICovCisjZGVmaW5lIEFOWV9TNTkzWF9JTlQJCTB4MDA4MDAwMDBMCisjZGVmaW5lIFJFQURfVENfSU5UCQkweDAwMDgwMDAwTAorI2RlZmluZSBXUklURV9UQ19JTlQJCTB4MDAwNDAwMDBMCisjZGVmaW5lIElOX01CX0lOVAkJMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUFTVEVSX0FCT1JUX0lOVAkweDAwMTAwMDAwTAorI2RlZmluZSBUQVJHRVRfQUJPUlRfSU5UCTB4MDAyMDAwMDBMCisjZGVmaW5lIEJVU19NQVNURVJfSU5UCQkweDAwMjAwMDAwTAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgeworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICpuZXh0OworCWludCB1c2VkOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgc2hvcnQgdmVuZG9yOworCXVuc2lnbmVkIHNob3J0IGRldmljZTsKKwl1bnNpZ25lZCBjaGFyIHBjaV9idXM7CisJdW5zaWduZWQgY2hhciBwY2lfc2xvdDsKKwl1bnNpZ25lZCBjaGFyIHBjaV9mdW5jOworCXJlc291cmNlX3NpemVfdCBpb19hZGRyWzVdOworCXVuc2lnbmVkIGludCBpcnE7Cit9OworCisvKiBwdHIgdG8gcm9vdCBsaXN0IG9mIGFsbCBhbWNjIGRldmljZXMgKi8KK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjX2RldmljZXM7CisKK3N0YXRpYyBjb25zdCBpbnQgaV9BRERJREFUQURldmljZUlEW10gPSB7IDB4MTVCOCwgMHgxMEU4IH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSk7Cit2b2lkIHZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IpOworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydAorCQkJCQkJICAgICAgIGRldmljZV9pZCk7CitpbnQgaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCSAgICAgc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKipjYXJkKTsKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX3Nsb3QsCisJCQkJCQkgICAgaW50IGlfTWFzdGVyKTsKKworaW50IHBjaV9jYXJkX2FsbG9jKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCBpbnQgbWFzdGVyKTsKK2ludCBpX3BjaV9jYXJkX2ZyZWUoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MpOwordm9pZCB2X3BjaV9jYXJkX2xpc3RfZGlzcGxheSh2b2lkKTsKK2ludCBpX3BjaV9jYXJkX2RhdGEoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfYnVzLCB1bnNpZ25lZCBjaGFyICpwY2lfc2xvdCwKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnBjaV9mdW5jLCByZXNvdXJjZV9zaXplX3QgKiBpb19hZGRyLAorCQkgICAgdW5zaWduZWQgaW50ICppcnEpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogYnVpbGQgbGlzdCBvZiBhbWNjIGNhcmRzIGluIHRoaXMgc3lzdGVtICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbGFzdDsKKwlpbnQgaTsKKwlpbnQgaV9Db3VudCA9IDA7CisJYW1jY19kZXZpY2VzID0gTlVMTDsKKwlsYXN0ID0gTlVMTDsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJICAgICBwY2lkZXYgIT0gTlVMTDsKKwkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJZm9yIChpX0NvdW50ID0gMDsgaV9Db3VudCA8IDI7IGlfQ291bnQrKykgeworCQkJcGNpX3ZlbmRvciA9IGlfQURESURBVEFEZXZpY2VJRFtpX0NvdW50XTsKKwkJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBwY2lfdmVuZG9yKSB7CisJCQkJYW1jYyA9IGttYWxsb2Moc2l6ZW9mKCphbWNjKSwgR0ZQX0tFUk5FTCk7CisJCQkJbWVtc2V0KGFtY2MsIDAsIHNpemVvZigqYW1jYykpOworCisJCQkJYW1jYy0+cGNpZGV2ID0gcGNpZGV2OworCQkJCWlmIChsYXN0KQorCQkJCQlsYXN0LT5uZXh0ID0gYW1jYzsKKwkJCQllbHNlCisJCQkJCWFtY2NfZGV2aWNlcyA9IGFtY2M7CisJCQkJbGFzdCA9IGFtY2M7CisKKwkJCQlhbWNjLT52ZW5kb3IgPSBwY2lkZXYtPnZlbmRvcjsKKwkJCQlhbWNjLT5kZXZpY2UgPSBwY2lkZXYtPmRldmljZTsKKwkJCQlhbWNjLT5wY2lfYnVzID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwkJCQlhbWNjLT5wY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCQkJCWFtY2MtPnBjaV9mdW5jID0gUENJX0ZVTkMocGNpZGV2LT5kZXZmbik7CisJCQkJLyogTm90ZTogcmVzb3VyY2VzIG1heSBiZSBpbnZhbGlkIGlmIFBDSSBkZXZpY2UKKwkJCQkgKiBub3QgZW5hYmxlZCwgYnV0IHRoZXkgYXJlIGNvcnJlY3RlZCBpbgorCQkJCSAqIHBjaV9jYXJkX2FsbG9jLiAqLworCQkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQkJCWFtY2MtPmlvX2FkZHJbaV0gPQorCQkJCQkgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgaSk7CisJCQkJYW1jYy0+aXJxID0gcGNpZGV2LT5pcnE7CisKKwkJCX0KKwkJfQorCX0KKworCWlmIChkaXNwbGF5KQorCQl2X3BjaV9jYXJkX2xpc3RfZGlzcGxheSgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGZyZWUgdXAgbGlzdCBvZiBhbWNjIGNhcmRzIGluIHRoaXMgc3lzdGVtICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJZm9yIChhbWNjID0gYW1jY19kZXZpY2VzOyBhbWNjOyBhbWNjID0gbmV4dCkgeworCQluZXh0ID0gYW1jYy0+bmV4dDsKKwkJa2ZyZWUoYW1jYyk7CisJfQorCisJYW1jY19kZXZpY2VzID0gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmaW5kIGZpcnN0IHVudXNlZCBjYXJkIHdpdGggdGhpcyBkZXZpY2VfaWQgKi8KK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCWlmICgoIWFtY2MtPnVzZWQpICYmIChhbWNjLT5kZXZpY2UgPT0gZGV2aWNlX2lkKQorCQkgICAgJiYgKGFtY2MtPnZlbmRvciA9PSB2ZW5kb3JfaWQpKQorCQkJcmV0dXJuIGFtY2M7CisKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmaW5kIGNhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uICovCitpbnQgaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCSAgICAgc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKipjYXJkKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCSpjYXJkID0gTlVMTDsKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlpZiAoKGFtY2MtPnZlbmRvciA9PSB2ZW5kb3JfaWQpICYmIChhbWNjLT5kZXZpY2UgPT0gZGV2aWNlX2lkKQorCQkgICAgJiYgKGFtY2MtPnBjaV9idXMgPT0gcGNpX2J1cykKKwkJICAgICYmIChhbWNjLT5wY2lfc2xvdCA9PSBwY2lfc2xvdCkpIHsKKwkJCWlmICghKGFtY2MtPnVzZWQpKSB7CisJCQkJKmNhcmQgPSBhbWNjOworCQkJCXJldHVybiAwOwkvKiBvaywgY2FyZCBpcyBmb3VuZCAqLworCQkJfSBlbHNlIHsKKwkJCQlydF9wcmludGsoIiAtIFxuQ2FyZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb24gaXMgdXNlZCBiOnMgJWQ6JWQhXG4iLAorCQkJCQkgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCQlyZXR1cm4gMjsJLyogY2FyZCBleGlzdCBidXQgaXMgdXNlZCAqLworCQkJfQorCQl9CisJfQorCisJLyogbm8gY2FyZCBmb3VuZCAqLworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG1hcmsgY2FyZCBhcyB1c2VkICovCitpbnQgcGNpX2NhcmRfYWxsb2Moc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsIGludCBtYXN0ZXIpCit7CisJaW50IGk7CisKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmIChhbWNjLT51c2VkKQorCQlyZXR1cm4gMTsKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUoYW1jYy0+cGNpZGV2LCAiYWRkaV9hbWNjX3M1OTMzIikpCisJCXJldHVybiAtMTsKKwkvKiBSZXNvdXJjZXMgd2lsbCBiZSBhY2N1cmF0ZSBub3cuICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJYW1jYy0+aW9fYWRkcltpXSA9IHBjaV9yZXNvdXJjZV9zdGFydChhbWNjLT5wY2lkZXYsIGkpOworCWlmIChtYXN0ZXIpCisJCXBjaV9zZXRfbWFzdGVyKGFtY2MtPnBjaWRldik7CisJYW1jYy0+dXNlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYXJrIGNhcmQgYXMgZnJlZSAqLworaW50IGlfcGNpX2NhcmRfZnJlZShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYykKK3sKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmICghYW1jYy0+dXNlZCkKKwkJcmV0dXJuIDE7CisJYW1jYy0+dXNlZCA9IDA7CisJY29tZWRpX3BjaV9kaXNhYmxlKGFtY2MtPnBjaWRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGlzcGxheSBsaXN0IG9mIGZvdW5kIGNhcmRzICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9kaXNwbGF5KHZvaWQpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJcHJpbnRrKEtFUk5fREVCVUcgIkxpc3Qgb2YgcGNpIGNhcmRzXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiYnVzOnNsb3Q6ZnVuYyB2ZW5kb3IgZGV2aWNlIGlvX2FtY2MgaW9fZGFxIGlycSB1c2VkXG4iKTsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCXByaW50aworCQkgICAgKCIlMmQgICAlMmQgICAlMmQgIDB4JTR4IDB4JTR4ICAgMHglOGxseCAweCU4bGx4ICAlMnUgICUyZFxuIiwKKwkJICAgICBhbWNjLT5wY2lfYnVzLCBhbWNjLT5wY2lfc2xvdCwgYW1jYy0+cGNpX2Z1bmMsCisJCSAgICAgYW1jYy0+dmVuZG9yLCBhbWNjLT5kZXZpY2UsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhbWNjLT5pb19hZGRyWzBdLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYW1jYy0+aW9fYWRkclsyXSwgYW1jYy0+aXJxLAorCQkgICAgIGFtY2MtPnVzZWQpOworCisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHJldHVybiBhbGwgY2FyZCBpbmZvcm1hdGlvbiBmb3IgZHJpdmVyICovCitpbnQgaV9wY2lfY2FyZF9kYXRhKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2J1cywgdW5zaWduZWQgY2hhciAqcGNpX3Nsb3QsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfZnVuYywgcmVzb3VyY2Vfc2l6ZV90ICogaW9fYWRkciwKKwkJICAgIHVuc2lnbmVkIGludCAqaXJxKQoreworCWludCBpOworCisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisJKnBjaV9idXMgPSBhbWNjLT5wY2lfYnVzOworCSpwY2lfc2xvdCA9IGFtY2MtPnBjaV9zbG90OworCSpwY2lfZnVuYyA9IGFtY2MtPnBjaV9mdW5jOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWlvX2FkZHJbaV0gPSBhbWNjLT5pb19hZGRyW2ldOworCSppcnEgPSBhbWNjLT5pcnE7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogc2VsZWN0IGFuZCBhbGxvYyBjYXJkICovCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX3NlbGVjdF9hbmRfYWxsb2NfcGNpX2NhcmQodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfYnVzLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCQkJICAgIGludCBpX01hc3RlcikKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsKKworCWlmICgocGNpX2J1cyA8IDEpICYgKHBjaV9zbG90IDwgMSkpIHsKKwkJLyogdXNlIGF1dG9kZXRlY3Rpb24gKi8KKwkJY2FyZCA9IHB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHZlbmRvcl9pZCwgZGV2aWNlX2lkKTsKKwkJaWYgKGNhcmQgPT0gTlVMTCkgeworCQkJcnRfcHJpbnRrKCIgLSBVbnVzZWQgY2FyZCBub3QgZm91bmQgaW4gc3lzdGVtIVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odmVuZG9yX2lkLCBkZXZpY2VfaWQsCisJCQkJCQkJIHBjaV9idXMsIHBjaV9zbG90LAorCQkJCQkJCSAmY2FyZCkpIHsKKwkJY2FzZSAxOgorCQkJcnRfcHJpbnRrKCIgLSBDYXJkIG5vdCBmb3VuZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb24gYjpzICVkOiVkIVxuIiwKKwkJCQkgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQljYXNlIDI6CisJCQlydF9wcmludGsoIiAtIENhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGlzIHVzZWQgYjpzICVkOiVkIVxuIiwKKwkJCQkgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKHBjaV9jYXJkX2FsbG9jKGNhcmQsIGlfTWFzdGVyKSAhPSAwKSB7CisJCXJ0X3ByaW50aygiIC0gQ2FuJ3QgYWxsb2NhdGUgY2FyZCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKworCX0KKworCXJldHVybiBjYXJkOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4YzY5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYwpAQCAtMCwwICsxLDMwNjIgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgIDogQURESSBEQVRBICAgICAgICAgfCBDb21waWxlciA6IEdDQyAJCSAgICAgICAgICB8CisgIHwgTW9kdWxuYW1lIDogYWRkaV9jb21tb24uYyAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEF1dGhvciAgICA6ICAgICAgICAgICB8IERhdGUgICAgIDogICAgICAgICAgICAgICAgICAgIAkJICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6IEFEREkgQ09NTU9OIE1haW4gTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgQ09ORklHIE9QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAlvcHRpb25bMF0gLSBQQ0kgYnVzIG51bWJlciAtIGlmIGJ1cyBudW1iZXIgYW5kIHNsb3QgbnVtYmVyIGFyZSAwLCB8CisgIHwJCQkgICAgICAgICB0aGVuIGRyaXZlciBzZWFyY2ggZm9yIGZpcnN0IHVudXNlZCBjYXJkIHwKKyAgfAlvcHRpb25bMV0gLSBQQ0kgc2xvdCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkJCQkJICAgICAgICAgICAgICAgICAgfAorICB8CW9wdGlvblsyXSA9IDAgIC0gRE1BIEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgID0gMSAgLSBETUEgRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgIi4uLy4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2lmIGRlZmluZWQoQ09ORklHX0FQQ0lfMTcxMCkgfHwgZGVmaW5lZChDT05GSUdfQVBDSV8zMjAwKSB8fCBkZWZpbmVkKENPTkZJR19BUENJXzMzMDApCisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKyNlbmRpZgorI2luY2x1ZGUgIi4uL2NvbWVkaV9mYy5oIgorCisjaW5jbHVkZSAiYWRkaV9jb21tb24uaCIKKyNpbmNsdWRlICJhZGRpX2FtY2NfczU5MzMuaCIKKworLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhNT0RVTEVfQVVUSE9SKCJBRERJLURBVEEgR21iSCA8aW5mb0BhZGRpLWRhdGEuY29tPiIpOworLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBBRERJLURBVEEgbW9kdWxlIik7CisvL1VwZGF0ZS0wLjcuNTctPjAuNy42OE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBkZXZwcml2ICgoYWRkaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUENJXzE3MTApIHx8IGRlZmluZWQoQ09ORklHX0FQQ0lfMzIwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBDSV8zMzAwKQorLy9CWVRFIGJfU2F2ZUZQVVJlZyBbOTRdOworCit2b2lkIGZwdV9iZWdpbih2b2lkKQoreworCS8vYXNtICgiZnN0ZW52IGJfU2F2ZUZQVVJlZyIpOworCWtlcm5lbF9mcHVfYmVnaW4oKTsKK30KKwordm9pZCBmcHVfZW5kKHZvaWQpCit7CisJLy8gYXNtICgiZnJzdG9yIGJfU2F2ZUZQVVJlZyIpOworCWtlcm5lbF9mcHVfZW5kKCk7Cit9CisjZW5kaWYKKworI2luY2x1ZGUgImFkZGlfZWVwcm9tLmMiCisjaWYgKGRlZmluZWQgKENPTkZJR19BUENJXzMxMjApIHx8IGRlZmluZWQgKENPTkZJR19BUENJXzMwMDEpKQorI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMTIwLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xMDMyCisjaW5jbHVkZSAiaHdkcnZfYXBjaTEwMzIuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1MTYKKyNpbmNsdWRlICJod2Rydl9hcGNpMTUxNi5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAxNgorI2luY2x1ZGUgImh3ZHJ2X2FwY2kyMDE2LmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDMyCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIwMzIuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIyMDAKKyNpbmNsdWRlICJod2Rydl9hcGNpMjIwMC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTU2NAorI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTY0LmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTAwCisjaW5jbHVkZSAiaHdkcnZfYXBjaTE1MDAuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzM1MDEKKyNpbmNsdWRlICJod2Rydl9hcGNpMzUwMS5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMDM1CisjaW5jbHVkZSAiaHdkcnZfYXBjaTAzNS5jIgorI2VuZGlmCisjaWYgKGRlZmluZWQgKENPTkZJR19BUENJXzMyMDApIHx8IGRlZmluZWQgKENPTkZJR19BUENJXzMzMDApKQorI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMjAwLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNzEwCisjaW5jbHVkZSAiaHdkcnZfQVBDSTE3MTAuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE2WFgKKyNpbmNsdWRlICJod2Rydl9hcGNpMTZ4eC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfM1hYWAorI2luY2x1ZGUgImh3ZHJ2X2FwY2kzeHh4LmMiCisjZW5kaWYKKworI2lmbmRlZiBDT01FRElfU1VCRF9UVExJTworI2RlZmluZSBDT01FRElfU1VCRF9UVExJTyAgIDExCS8qIERpZ2l0YWwgSW5wdXQgT3V0cHV0IEJ1dCBUVEwgKi8KKyNlbmRpZgorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWRkaV9hcGNpX3RibCkgPSB7CisjaWZkZWYgQ09ORklHX0FQQ0lfMzEyMAorCXtBUENJMzEyMF9CT0FSRF9WRU5ET1JfSUQsIDB4ODE4RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xMDMyCisJe0FQQ0kxMDMyX0JPQVJEX1ZFTkRPUl9JRCwgMHgxMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1MTYKKwl7QVBDSTE1MTZfQk9BUkRfVkVORE9SX0lELCAweDEwMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAxNgorCXtBUENJMjAxNl9CT0FSRF9WRU5ET1JfSUQsIDB4MTAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDMyCisJe0FQQ0kyMDMyX0JPQVJEX1ZFTkRPUl9JRCwgMHgxMDA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIyMDAKKwl7QVBDSTIyMDBfQk9BUkRfVkVORE9SX0lELCAweDEwMDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTU2NAorCXtBUENJMTU2NF9CT0FSRF9WRU5ET1JfSUQsIDB4MTAwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTAwCisJe0FQQ0kxNTAwX0JPQVJEX1ZFTkRPUl9JRCwgMHg4MGZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzMwMDEKKwl7QVBDSTMxMjBfQk9BUkRfVkVORE9SX0lELCAweDgyOEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzUwMQorCXtBUENJMzUwMV9CT0FSRF9WRU5ET1JfSUQsIDB4MzAwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8wMzUKKwl7QVBDSTAzNV9CT0FSRF9WRU5ET1JfSUQsIDB4MDMwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMjAwCisJe0FQQ0kzMjAwX0JPQVJEX1ZFTkRPUl9JRCwgMHgzMDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzMzMDAKKwl7QVBDSTMyMDBfQk9BUkRfVkVORE9SX0lELCAweDMwMDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTcxMAorCXtBUENJMTcxMF9CT0FSRF9WRU5ET1JfSUQsIEFQQ0kxNzEwX0JPQVJEX0RFVklDRV9JRCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNlhYCisJezB4MTVCOCwgMHgxMDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDEwMEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfM1hYWAorCXsweDE1QjgsIDB4MzAxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDBGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDE3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDFBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMUIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxQywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDFELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZGRpX2FwY2lfdGJsKTsKKworc3RhdGljIGNvbnN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisjaWZkZWYgQ09ORklHX0FQQ0lfMzEyMAorCXsiYXBjaTMxMjAiLAorCQkJQVBDSTMxMjBfQk9BUkRfVkVORE9SX0lELAorCQkJMHg4MThELAorCQkJQU1DQ19PUF9SRUdfU0laRSwKKwkJCUFQQ0kzMTIwX0FERFJFU1NfUkFOR0UsCisJCQk4LAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTgsCisJCQkweGZmZmYsCisJCQkweDNmZmYsCisJCQkmcmFuZ2VfYXBjaTMxMjBfYWksCisJCQkmcmFuZ2VfYXBjaTMxMjBfYW8sCisJCQk0LAorCQkJNCwKKwkJCTB4MGYsCisJCQkwLAorCQkJTlVMTCwKKwkJCTEsCisJCQkxLAorCQkJMSwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMzEyMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzMTIwX1Jlc2V0LAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24sCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMTIwX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0luc25Db25maWdUaW1lciwKKwkJCWlfQVBDSTMxMjBfSW5zbldyaXRlVGltZXIsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzEwMzIKKwl7ImFwY2kxMDMyIiwKKwkJCUFQQ0kxMDMyX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MTAwMywKKwkJCTQsCisJCQlBUENJMTAzMl9BRERSRVNTX1JBTkdFLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV85M0M3NiwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMzIsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kxMDMyX0ludGVycnVwdCwKKwkJCWlfQVBDSTEwMzJfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTAzMl9Db25maWdEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kxMDMyX1JlYWQxRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTE2CisJeyJhcGNpMTUxNiIsCisJCQlBUENJMTUxNl9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDEsCisJCQkxMjgsCisJCQlBUENJMTUxNl9BRERSRVNTX1JBTkdFLAorCQkJMzIsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfUzU5MjAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTgsCisJCQk4LAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJaV9BUENJMTUxNl9SZXNldCwKKwkJCU5VTEwsIE5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNTE2X1JlYWQxRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMTUxNl9Db25maWdXYXRjaGRvZywKKwkJCWlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZywKKwkJCWlfQVBDSTE1MTZfUmVhZFdhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDE2CisJeyJhcGNpMjAxNiIsCisJCQlBUENJMjAxNl9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDIsCisJCQkxMjgsCisJCQlBUENJMjAxNl9BRERSRVNTX1JBTkdFLAorCQkJMzIsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfUzU5MjAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxNiwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIwMTZfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAxNl9CaXRzRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMDE2X0NvbmZpZ1dhdGNoZG9nLAorCQkJaV9BUENJMjAxNl9TdGFydFN0b3BXcml0ZVdhdGNoZG9nLAorCQkJaV9BUENJMjAxNl9SZWFkV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIwMzIKKwl7ImFwY2kyMDMyIiwKKwkJCUFQQ0kyMDMyX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MTAwNCwKKwkJCTQsCisJCQlBUENJMjAzMl9BRERSRVNTX1JBTkdFLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV85M0M3NiwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMCwKKwkJCTMyLAorCQkJMHhmZmZmZmZmZiwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kyMDMyX0ludGVycnVwdCwKKwkJCWlfQVBDSTIwMzJfUmVzZXQsCisJCQlOVUxMLCBOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kyMDMyX1JlYWREaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAzMl9SZWFkSW50ZXJydXB0U3RhdHVzLAorCQkJaV9BUENJMjAzMl9Db25maWdXYXRjaGRvZywKKwkJCWlfQVBDSTIwMzJfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZywKKwkJCWlfQVBDSTIwMzJfUmVhZFdhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMjAwCisJeyJhcGNpMjIwMCIsCisJCQlBUENJMjIwMF9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDUsCisJCQk0LAorCQkJQVBDSTIyMDBfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfOTNDNzYsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIyMDBfUmVzZXQsCisJCQlOVUxMLCBOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMjIwMF9SZWFkMURpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMjAwX1JlYWRNb3JlRGlnaXRhbElucHV0LAorCQkJaV9BUENJMjIwMF9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kyMjAwX1JlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTIyMDBfQ29uZmlnV2F0Y2hkb2csCisJCQlpX0FQQ0kyMjAwX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2csCisJCQlpX0FQQ0kyMjAwX1JlYWRXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTU2NAorCXsiYXBjaTE1NjQiLAorCQkJQVBDSTE1NjRfQk9BUkRfVkVORE9SX0lELAorCQkJMHgxMDA2LAorCQkJMTI4LAorCQkJQVBDSTE1NjRfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfOTNDNzYsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTMyLAorCQkJMzIsCisJCQkweGZmZmZmZmZmLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMSwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCXZfQVBDSTE1NjRfSW50ZXJydXB0LAorCQkJaV9BUENJMTU2NF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTE1NjRfUmVhZDFEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMTU2NF9SZWFkTW9yZURpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1NjRfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMTU2NF9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cywKKwkJCWlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTY0X1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTY0X1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTUwMAorCXsiYXBjaTE1MDAiLAorCQkJQVBDSTE1MDBfQk9BUkRfVkVORE9SX0lELAorCQkJMHg4MGZjLAorCQkJMTI4LAorCQkJQVBDSTE1MDBfQUREUkVTU19SQU5HRSwKKwkJCTQsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMTYsCisJCQkxNiwKKwkJCTB4ZmZmZiwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kxNTAwX0ludGVycnVwdCwKKwkJCWlfQVBDSTE1MDBfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTUwMF9Db25maWdEaWdpdGFsSW5wdXRFdmVudCwKKwkJCWlfQVBDSTE1MDBfSW5pdGlhbGlzYXRpb24sCisJCQlpX0FQQ0kxNTAwX1N0YXJ0U3RvcElucHV0RXZlbnQsCisJCQlpX0FQQ0kxNTAwX1JlYWRNb3JlRGlnaXRhbElucHV0LAorCQkJaV9BUENJMTUwMF9Db25maWdEaWdpdGFsT3V0cHV0RXJyb3JJbnRlcnJ1cHQsCisJCQlpX0FQQ0kxNTAwX1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MDBfQ29uZmlnQ291bnRlclRpbWVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZywKKwkJCWlfQVBDSTE1MDBfUmVhZEludGVycnVwdE1hc2ssCisJCQlpX0FQQ0kxNTAwX1JlYWRDb3VudGVyVGltZXJXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMDAxCisJeyJhcGNpMzAwMSIsCisJCQlBUENJMzEyMF9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDgyOEQsCisJCQlBTUNDX09QX1JFR19TSVpFLAorCQkJQVBDSTMxMjBfQUREUkVTU19SQU5HRSwKKwkJCTgsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTB4ZmZmLAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpMzEyMF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTB4MGYsCisJCQkwLAorCQkJTlVMTCwKKwkJCTEsCisJCQkxLAorCQkJMSwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMzEyMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzMTIwX1Jlc2V0LAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24sCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ1RpbWVyLAorCQkJaV9BUENJMzEyMF9JbnNuV3JpdGVUaW1lciwKKwkJCWlfQVBDSTMxMjBfSW5zblJlYWRUaW1lciwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzUwMQorCXsiYXBjaTM1MDEiLAorCQkJQVBDSTM1MDFfQk9BUkRfVkVORE9SX0lELAorCQkJMHgzMDAxLAorCQkJNjQsCisJCQlBUENJMzUwMV9BRERSRVNTX1JBTkdFLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV9TNTkzMywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTgsCisJCQkwLAorCQkJMTYzODMsCisJCQlOVUxMLAorCQkJJnJhbmdlX2FwY2kzNTAxX2FvLAorCQkJMiwKKwkJCTIsCisJCQkweDMsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJMzUwMV9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzNTAxX1Jlc2V0LAorCQkJTlVMTCwgTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMzUwMV9Db25maWdBbmFsb2dPdXRwdXQsCisJCQlpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTM1MDFfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTM1MDFfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzUwMV9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzNTAxX0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJaV9BUENJMzUwMV9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJaV9BUENJMzUwMV9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzAzNQorCXsiYXBjaTAzNSIsCisJCQlBUENJMDM1X0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MDMwMCwKKwkJCTEyNywKKwkJCUFQQ0kwMzVfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJMSwKKwkJCUFERElEQVRBX1M1OTIwLAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQkwLAorCQkJMHhmZiwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTAzNV9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMDM1X0ludGVycnVwdCwKKwkJCWlfQVBDSTAzNV9SZXNldCwKKwkJCWlfQVBDSTAzNV9Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTAzNV9SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMDM1X0NvbmZpZ1RpbWVyV2F0Y2hkb2csCisJCQlpX0FQQ0kwMzVfU3RhcnRTdG9wV3JpdGVUaW1lcldhdGNoZG9nLAorCQkJaV9BUENJMDM1X1JlYWRUaW1lcldhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMjAwCisJeyJhcGNpMzIwMCIsCisJCQlBUENJMzIwMF9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDMwMDAsCisJCQkxMjgsCisJCQkyNTYsCisJCQk0LAorCQkJNCwKKwkJCUFERElEQVRBX0VFUFJPTSwKKwkJCUFERElEQVRBX1M1OTIwLAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQkwLAorCQkJMHgzZmZmZiwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTMyMDBfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkxMDAwMCwKKwkJCTEwMDAwMCwKKwkJCXZfQVBDSTMyMDBfSW50ZXJydXB0LAorCQkJaV9BUENJMzIwMF9SZXNldCwKKwkJCWlfQVBDSTMyMDBfQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfSW5zbldyaXRlUmVsZWFzZUFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0LAorCQkJaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9Db21tYW5kQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbiwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTMyMDBfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMyMDBfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzIwMF9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzMzMDAKKwkvL0JlZ2luIEpLIDIwLjEwLjIwMDQ6IEFQQ0ktMzMwMCBpbnRlZ3JhdGlvbgorCXsiYXBjaTMzMDAiLAorCQkJQVBDSTMyMDBfQk9BUkRfVkVORE9SX0lELAorCQkJMHgzMDA3LAorCQkJMTI4LAorCQkJMjU2LAorCQkJNCwKKwkJCTQsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV9TNTkyMCwKKwkJCTAsCisJCQk4LAorCQkJOCwKKwkJCTAsCisJCQkweDNmZmZmLAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpMzMwMF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMzIwMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzMjAwX1Jlc2V0LAorCQkJaV9BUENJMzIwMF9Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfUmVhZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9JbnNuV3JpdGVSZWxlYXNlQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX0luc25CaXRzX0FuYWxvZ0lucHV0X1Rlc3QsCisJCQlpX0FQQ0kzMjAwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX0NvbW1hbmRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMzIwMF9SZWFkRGlnaXRhbElucHV0LAorCQkJaV9BUENJMzIwMF9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMjAwX1JlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTcxMAorCXsiYXBjaTE3MTAiLCBBUENJMTcxMF9CT0FSRF9WRU5ET1JfSUQsIEFQQ0kxNzEwX0JPQVJEX0RFVklDRV9JRCwKKwkJCTEyOCwKKwkJCTgsCisJCQkyNTYsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCXZfQVBDSTE3MTBfSW50ZXJydXB0LAorCQkJaV9BUENJMTcxMF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTZYWAorCXsiYXBjaTE2NDgiLAorCQkJMHgxNUI4LAorCQkJMHgxMDA5LAorCQkJMTI4LAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJNDgsCisJCQkmcmFuZ2VfYXBjaTE2eHhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJaV9BUENJMTZYWF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNlhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kxNlhYX0luc25CaXRzUmVhZFRUTElPLAorCQkJaV9BUENJMTZYWF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlLAorCQlpX0FQQ0kxNlhYX0luc25CaXRzV3JpdGVUVExJT30sCisKKwl7ImFwY2kxNjk2IiwKKwkJCTB4MTVCOCwKKwkJCTB4MTAwQSwKKwkJCTEyOCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTk2LAorCQkJJnJhbmdlX2FwY2kxNnh4X3R0bCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTE2WFhfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTZYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTywKKwkJCWlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZSwKKwkJaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU99LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfM1hYWAorCXsiYXBjaTMwMDAtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDEwLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTQwOTUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTEwMDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzAwMC04IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAwRiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQk4LAorCQkJNCwKKwkJCTgsCisJCQkwLAorCQkJNDA5NSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDAwLTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDBFLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTQsCisJCQkyLAorCQkJNCwKKwkJCTAsCisJCQk0MDk1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDYtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDEzLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDYtOCIsCisJCQkweDE1QjgsCisJCQkweDMwMTQsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMTUsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJNCwKKwkJCTIsCisJCQk0LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTAtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTQwOTUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzAxMC04IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxNywKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQk4LAorCQkJNCwKKwkJCTgsCisJCQkwLAorCQkJNDA5NSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDEwLTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE4LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTQsCisJCQkyLAorCQkJNCwKKwkJCTAsCisJCQk0MDk1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTYtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE5LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTYtOCIsCisJCQkweDE1QjgsCisJCQkweDMwMUEsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUIsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJNCwKKwkJCTIsCisJCQk0LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMxMDAtMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUMsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk0LAorCQkJNDA5NSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTAwLTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUQsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTQwOTUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzEwNi0xNi00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxRSwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTQsCisJCQk2NTUzNSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTA2LTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTY1NTM1LAorCQkJNDA5NSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTEwMDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMxMTAtMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjAsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk0LAorCQkJNDA5NSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTEwLTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjEsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTQwOTUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzExNi0xNi00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAyMiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTQsCisJCQk2NTUzNSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTE2LTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjMsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTY1NTM1LAorCQkJNDA5NSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDMiLAorCQkJMHgxNUI4LAorCQkJMHgzMDBCLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQk0LAorCQkJNCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTcsCisJCQkyNTAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorCisJeyJhcGNpMzAwMi0xNiIsCisJCQkweDE1QjgsCisJCQkweDMwMDIsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMCwKKwkJCTE2LAorCQkJMTYsCisJCQkwLAorCQkJNjU1MzUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKworCXsiYXBjaTMwMDItOCIsCisJCQkweDE1QjgsCisJCQkweDMwMDMsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMCwKKwkJCTgsCisJCQk4LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisKKwl7ImFwY2kzMDAyLTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDA0LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQk0LAorCQkJNCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorCisJeyJhcGNpMzUwMCIsCisJCQkweDE1QjgsCisJCQkweDMwMjQsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJNCwKKwkJCTAsCisJCQk0MDk1LAorCQkJTlVMTCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorI2VuZGlmCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihib2FyZHR5cGUpKQorCitzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWRkaSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhZGRpX2NvbW1vbiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6aV9BRERJX0F0dGFjaCwKKyAgICAgIGRldGFjaDppX0FERElfRGV0YWNoLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ucGNfRHJpdmVyTmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2YoYm9hcmR0eXBlKSwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkZGksIGFkZGlfYXBjaV90YmwpOworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDpzdGF0aWMgaW50IGlfQURESV9BdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6RGV0ZWN0cyB0aGUgY2FyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAJCQkgQ29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIGEgcGFydGljdWxhciBib2FyZC4gICAgICAgICAgICB8Cit8ICAJCQkgVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCB0aGUgaW5pdGlhbGl6YXRpb25zIGFuZCBtZW1vcnkgICB8Cit8CQkJIGFsbG9jYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgZHJpdmVyLgkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOnN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGludCBpX0FERElfQXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQsIHBhZ2VzLCBpLCBuX3N1YmRldmljZXM7CisJRFdPUkQgZHdfRHVtbXk7CisJcmVzb3VyY2Vfc2l6ZV90IGlvX2FkZHJbNV07CisJdW5zaWduZWQgaW50IGlycTsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlX2EsIGlvYmFzZV9tYWluLCBpb2Jhc2VfYWRkb24sIGlvYmFzZV9yZXNlcnZlZDsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmM7CisJaW50IGlfRG1hID0gMDsKKwlzdGF0aWMgY2hhciBjX0lkZW50aWZpZXJbMTUwXTsKKworCXNwcmludGYoY19JZGVudGlmaWVyLCAiQWRkaS1EYXRhIEdtYkggQ29tZWRpICVzIiwKKwkJdGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSk7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YoYWRkaV9wcml2YXRlKSkpIDwgMCkgeworCSAgCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghcGNpX2xpc3RfYnVpbGRlZCkgeworCQl2X3BjaV9jYXJkX2xpc3RfaW5pdCh0aGlzX2JvYXJkLT5pX1ZlbmRvcklkLCAxKTsJLy8xIGZvciBkaXNwbGF5aW5nIHRoZSBsaXN0Li4KKwkJcGNpX2xpc3RfYnVpbGRlZCA9IDE7CisJfQorCS8vcnRfcHJpbnRrKCJjb21lZGklZDogYWRkaV9jb21tb246IGJvYXJkPSVzIixkZXYtPm1pbm9yLHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUpOworCisJaWYgKCh0aGlzX2JvYXJkLT5pX0RtYSkgJiYgKGl0LT5vcHRpb25zWzJdID09IDApKSB7CisJCWlfRG1hID0gMTsKKwl9CisKKwlpZiAoKGNhcmQgPSBwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh0aGlzX2JvYXJkLT5pX1ZlbmRvcklkLAorCQkJCXRoaXNfYm9hcmQtPmlfRGV2aWNlSWQsCisJCQkJaXQtPm9wdGlvbnNbMF0sCisJCQkJaXQtPm9wdGlvbnNbMV0sIGlfRG1hKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2cHJpdi0+YWxsb2NhdGVkID0gMTsKKworCWlmICgoaV9wY2lfY2FyZF9kYXRhKGNhcmQsICZwY2lfYnVzLCAmcGNpX3Nsb3QsICZwY2lfZnVuYywgJmlvX2FkZHJbMF0sCisJCQkJJmlycSkpIDwgMCkgeworCQlpX3BjaV9jYXJkX2ZyZWUoY2FyZCk7CisJCXByaW50aygiIC0gQ2FuJ3QgZ2V0IEFNQ0MgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpb2Jhc2VfYSA9IGlvX2FkZHJbMF07CisJaW9iYXNlX21haW4gPSBpb19hZGRyWzFdOworCWlvYmFzZV9hZGRvbiA9IGlvX2FkZHJbMl07CisJaW9iYXNlX3Jlc2VydmVkID0gaW9fYWRkclszXTsKKwlwcmludGsoIlxuQnVzICVkOiBTbG90ICVkOiBGdW5jdCVkXG5CYXNlMDogMHglOGxseFxuQmFzZTE6IDB4JThsbHhcbkJhc2UyOiAweCU4bGx4XG5CYXNlMzogMHglOGxseFxuIiwgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jLCAodW5zaWduZWQgbG9uZyBsb25nKWlvX2FkZHJbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpaW9fYWRkclsxXSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb19hZGRyWzJdLCAodW5zaWduZWQgbG9uZyBsb25nKWlvX2FkZHJbM10pOworCisJaWYgKCh0aGlzX2JvYXJkLT5wY19FZXByb21DaGlwID09IE5VTEwpCisJCXx8IChzdHJjbXAodGhpc19ib2FyZC0+cGNfRWVwcm9tQ2hpcCwgQURESURBVEFfOTA1NCkgIT0gMCkpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIG1vcmUgdGhhdCAxIGFkZHJlc3MgdXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKHRoaXNfYm9hcmQtPmlfSW9yYW5nZUJhc2UxICE9IDApIHsKKwkJCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9iYXNlX21haW47CS8vIERBUSBiYXNlIGFkZHJlc3MuLi4KKwkJfSBlbHNlIHsKKwkJCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9iYXNlX2E7CS8vIERBUSBiYXNlIGFkZHJlc3MuLi4KKwkJfQorCisJCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWU7CisJCWRldnByaXYtPmFtY2MgPSBjYXJkOworCQlkZXZwcml2LT5pb2Jhc2UgPSAoSU5UKSBkZXYtPmlvYmFzZTsKKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjID0gKElOVCkgaW9iYXNlX2E7CS8vQU1DQyBiYXNlIGFkZHJlc3MuLi4KKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiA9IChJTlQpIGlvYmFzZV9hZGRvbjsJLy9BREQgT04gYmFzZSBhZGRyZXNzLi4uLgorCQlkZXZwcml2LT5pX0lvYmFzZVJlc2VydmVkID0gKElOVCkgaW9iYXNlX3Jlc2VydmVkOworCQlkZXZwcml2LT5wc19Cb2FyZEluZm8gPSB0aGlzX2JvYXJkOworCX0gZWxzZSB7CisJCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWU7CisJCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9fYWRkclsyXTsKKwkJZGV2cHJpdi0+YW1jYyA9IGNhcmQ7CisJCWRldnByaXYtPmlvYmFzZSA9IChJTlQpIGlvX2FkZHJbMl07CisJCWRldnByaXYtPnBzX0JvYXJkSW5mbyA9IHRoaXNfYm9hcmQ7CisJCWRldnByaXYtPmlfSW9iYXNlUmVzZXJ2ZWQgPSAoSU5UKSBpb19hZGRyWzNdOworCQlwcmludGsoIlxuaW9yZW1hcCBiZWdpbiIpOworCQlkZXZwcml2LT5kd19BaUJhc2UgPQorCQkJKFVMT05HX1BUUikgaW9yZW1hcChpb19hZGRyWzNdLAorCQkJdGhpc19ib2FyZC0+aV9Jb3JhbmdlQmFzZTMpOworCQlwcmludGsoIlxuaW9yZW1hcCBlbmQiKTsKKwl9CisKKwkvLyMjCisKKwlpZiAoaXJxID4gMCkgeworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgdl9BRERJX0ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJY19JZGVudGlmaWVyLCBkZXYpIDwgMCkgeworCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCisJCQkJaXJxKTsKKwkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJfSBlbHNlIHsKKwkJCXJ0X3ByaW50aygiXG5pcnE9JXUiLCBpcnEpOworCQl9CisJfSBlbHNlIHsKKwkJcnRfcHJpbnRrKCIsIElSUSBkaXNhYmxlZCIpOworCX0KKworCXByaW50aygiXG5PcHRpb24gJWQgJWQgJWRcbiIsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSwKKwkJaXQtPm9wdGlvbnNbMl0pOworCWRldi0+aXJxID0gaXJxOworCisJLy8gUmVhZCBlZXBlb20gYW5kIGZpbGwgYm9hcmR0eXBlIFN0cnVjdHVyZQorCisJaWYgKHRoaXNfYm9hcmQtPmlfUENJRWVwcm9tKSB7CisJCXByaW50aygiXG5QQ0kgRWVwcm9tIHVzZWQiKTsKKwkJaWYgKCEoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0VlcHJvbUNoaXAsICJTNTkyMCIpKSkgeworCQkJLy8gU2V0IDMgd2FpdCBzdGFpdAorCQkJaWYgKCEoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMDM1IikpKSB7CisJCQkJb3V0bCgweDgwODA4MDgyLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDYwKTsKKwkJCX0gZWxzZSB7CisJCQkJb3V0bCgweDgzODM4MzgzLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDYwKTsKKwkJCX0KKwkJCS8vIEVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGUgY29udHJvbGVyCisJCQlkd19EdW1teSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKwkJCW91dGwoZHdfRHVtbXkgfCAweDIwMDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCQkJcHJpbnRrKCJcbkVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGUgY29udHJvbGVyIik7CisJCX0KKwkJcHJpbnRrKCJcblJlYWQgRWVwcm9tIik7CisJCWlfRWVwcm9tUmVhZE1haW5IZWFkZXIoaW9fYWRkclswXSwgdGhpc19ib2FyZC0+cGNfRWVwcm9tQ2hpcCwKKwkJCWRldik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJcblBDSSBFZXByb20gdW51c2VkIik7CisJfQorCisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgeworCQlkZXZwcml2LT51c19Vc2VEbWEgPSBBRERJX0RJU0FCTEU7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+dXNfVXNlRG1hID0gQURESV9FTkFCTEU7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPmlfRG1hKSB7CisJCXByaW50aygiXG5ETUEgdXNlZCIpOworCQlpZiAoZGV2cHJpdi0+dXNfVXNlRG1hID09IEFERElfRU5BQkxFKSB7CisJCQkvLyBhbGxvYyBETUEgYnVmZmVycworCQkJZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJCWZvciAocGFnZXMgPSA0OyBwYWdlcyA+PSAwOyBwYWdlcy0tKSB7CisJCQkJCWlmICgoZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFtpXSA9CisJCQkJCQkJKHZvaWQgKikKKwkJCQkJCQlfX2dldF9mcmVlX3BhZ2VzCisJCQkJCQkJKEdGUF9LRVJORUwsIHBhZ2VzKSkpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsW2ldKSB7CisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclBhZ2VzW2ldID0gcGFnZXM7CisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclNpemVbaV0gPQorCQkJCQkJUEFHRV9TSVpFICogcGFnZXM7CisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclNhbXBsZXNbaV0gPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQl1aV9EbWFCdWZmZXJTaXplW2ldID4+IDE7CisJCQkJCWRldnByaXYtPnVsX0RtYUJ1ZmZlckh3W2ldID0KKwkJCQkJCXZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+CisJCQkJCQl1bF9EbWFCdWZmZXJWaXJ0dWFsW2ldKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbMF0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIENhbid0IGFsbG9jYXRlIERNQSBidWZmZXIsIERNQSBkaXNhYmxlZCEiKTsKKwkJCQlkZXZwcml2LT51c19Vc2VEbWEgPSBBRERJX0RJU0FCTEU7CisJCQl9CisKKwkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsWzFdKSB7CisJCQkJZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKChkZXZwcml2LT51c19Vc2VEbWEgPT0gQURESV9FTkFCTEUpKSB7CisJCQlydF9wcmludGsoIlxuRE1BIEVOQUJMRURcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJcbkRNQSBESVNBQkxFRFxuIik7CisJCX0KKwl9CisKKwlpZiAoIXN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTE3MTAiKSkgeworI2lmZGVmIENPTkZJR19BUENJXzE3MTAKKwkJaV9BRERJX0F0dGFjaFBDSTE3MTAoZGV2KTsKKworCQkvLyBzYXZlIGJhc2UgYWRkcmVzcworCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyA9IGlvX2FkZHJbMl07CisjZW5kaWYKKwl9IGVsc2UgeworCQkvL1VwZGF0ZS0wLjcuNTctPjAuNy42OGRldi0+bl9zdWJkZXZpY2VzID0gNzsKKwkJbl9zdWJkZXZpY2VzID0gNzsKKwkJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBBSSBTdWJkZXZpY2UgU3RydWN0dXJlcworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJaWYgKCh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCkKKwkJCXx8ICh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbERpZmYpKSB7CisJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQKKwkJCQl8IFNERl9ESUZGOworCQkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsKSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWw7CisJCQkJZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWxEaWZmOworCQkJCWRldnByaXYtPmJfU2luZ2VsRGlmZiA9IDE7CisJCQl9CisJCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+aV9BaU1heGRhdGE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5pX0FpQ2hhbm5lbExpc3Q7CisJCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnByX0FpUmFuZ2VsaXN0OworCisJCQkvKiBTZXQgdGhlIGluaXRpYWxpc2F0aW9uIGZsYWcgKi8KKwkJCWRldnByaXYtPmJfQWlJbml0aWFsaXNhdGlvbiA9IDE7CisKKwkJCXMtPmluc25fY29uZmlnID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Db25maWdBbmFsb2dJbnB1dDsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWRBbmFsb2dJbnB1dDsKKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nSW5wdXQ7CisJCQlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25CaXRzQW5hbG9nSW5wdXQ7CisJCQlzLT5kb19jbWR0ZXN0ID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQ7CisJCQlzLT5kb19jbWQgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRBbmFsb2dJbnB1dDsKKwkJCXMtPmNhbmNlbCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfQ2FuY2VsQW5hbG9nSW5wdXQ7CisKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKworCQkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBBTyBTdWJkZXZpY2UgU3RydWN0dXJlcworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyQW9DaGFubmVsKSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9XUklURUFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8CisJCQkJU0RGX1JUOworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWw7CisJCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+aV9Bb01heGRhdGE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5pX05ickFvQ2hhbm5lbDsKKwkJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cHJfQW9SYW5nZWxpc3Q7CisJCQlzLT5pbnNuX2NvbmZpZyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnQW5hbG9nT3V0cHV0OworCQkJcy0+aW5zbl93cml0ZSA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuV3JpdGVBbmFsb2dPdXRwdXQ7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisJCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIERJIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCQlpZiAodGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWwpIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5pX05ickRpQ2hhbm5lbDsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWw7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW9fYml0cyA9IDA7CS8qIGFsbCBiaXRzIGlucHV0ICovCisJCQlzLT5pbnNuX2NvbmZpZyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnRGlnaXRhbElucHV0OworCQkJcy0+aW5zbl9yZWFkID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZERpZ2l0YWxJbnB1dDsKKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlRGlnaXRhbElucHV0OworCQkJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQml0c0RpZ2l0YWxJbnB1dDsKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKwkJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgRE8gU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCWlmICh0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbCkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfUkVBREFCTEUgfCBTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwKKwkJCQlTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsOworCQkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfRG9NYXhkYXRhOworCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWw7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW9fYml0cyA9IDB4ZjsJLyogYWxsIGJpdHMgb3V0cHV0ICovCisKKwkJCXMtPmluc25fY29uZmlnID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnRGlnaXRhbE91dHB1dDsJLy9mb3IgZGlnaXRhbCBvdXRwdXQgbWVtb3J5Li4KKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlRGlnaXRhbE91dHB1dDsKKwkJCXMtPmluc25fYml0cyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQml0c0RpZ2l0YWxPdXRwdXQ7CisJCQlzLT5pbnNuX3JlYWQgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWREaWdpdGFsT3V0cHV0OworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCisJCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFRpbWVyIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCQlpZiAodGhpc19ib2FyZC0+aV9UaW1lcikgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8CisJCQkJU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IDE7CisJCQlzLT5tYXhkYXRhID0gMDsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJCQlzLT5pbnNuX3dyaXRlID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuV3JpdGVUaW1lcjsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWRUaW1lcjsKKwkJCXMtPmluc25fY29uZmlnID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnVGltZXI7CisJCQlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25CaXRzVGltZXI7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisKKwkJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgVFRMCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCQlpZiAodGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsKSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVFRMSU87CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9XUklURUFCTEUgfCBTREZfUkVBREFCTEUgfCBTREZfUlQgfAorCQkJCVNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsOworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5pb19iaXRzID0gMDsJLyogYWxsIGJpdHMgaW5wdXQgKi8KKwkJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPmlfTmJyVFRMQ2hhbm5lbDsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2NvbmZpZyA9IHRoaXNfYm9hcmQtPmlfaHdkcl9Db25maWdJbml0VFRMSU87CisJCQlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pX2h3ZHJfUmVhZFRUTElPQml0czsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcl9SZWFkVFRMSU9BbGxQb3J0VmFsdWU7CisJCQlzLT5pbnNuX3dyaXRlID0gdGhpc19ib2FyZC0+aV9od2RyX1dyaXRlVFRMSU9DaGxPbk9mZjsKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKworCQkvKiBFRVBST00gKi8KKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDY7CisJCWlmICh0aGlzX2JvYXJkLT5pX1BDSUVlcHJvbSkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJCXMtPm5fY2hhbiA9IDI1NjsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCQlzLT5pbnNuX3JlYWQgPSBpX0FERElEQVRBX0luc25SZWFkRWVwcm9tOworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCX0KKworCXByaW50aygiXG5pX0FERElfQXR0YWNoIGVuZFxuIik7CisJaV9BRERJX1Jlc2V0KGRldik7CisJZGV2cHJpdi0+Yl9WYWxpZERyaXZlciA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiBzdGF0aWMgaW50IGlfQURESV9EZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERlYWxsb2NhdGVzIHJlc291cmNlcyBvZiB0aGUgYWRkaV9jb21tb24gZHJpdmVyICAgICAgICB8Cit8CQkJICBGcmVlIHRoZSBETUEgYnVmZmVycywgdW5yZWdpc3RlciBpcnEuCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitzdGF0aWMgaW50IGlfQURESV9EZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT5iX1ZhbGlkRHJpdmVyKSB7CisJCQlpX0FERElfUmVzZXQoZGV2KTsKKwkJfQorCisJCWlmIChkZXYtPmlycSkgeworCQkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQl9CisKKwkJaWYgKChkZXZwcml2LT5wc19Cb2FyZEluZm8tPnBjX0VlcHJvbUNoaXAgPT0gTlVMTCkKKwkJCXx8IChzdHJjbXAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5wY19FZXByb21DaGlwLAorCQkJCQlBRERJREFUQV85MDU0KSAhPSAwKSkgeworCQkJaWYgKGRldnByaXYtPmFsbG9jYXRlZCkgeworCQkJCWlfcGNpX2NhcmRfZnJlZShkZXZwcml2LT5hbWNjKTsKKwkJCX0KKworCQkJaWYgKGRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbMF0pIHsKKwkJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWRldnByaXYtPgorCQkJCQl1bF9EbWFCdWZmZXJWaXJ0dWFsWzBdLAorCQkJCQlkZXZwcml2LT51aV9EbWFCdWZmZXJQYWdlc1swXSk7CisJCQl9CisKKwkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsWzFdKSB7CisJCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylkZXZwcml2LT4KKwkJCQkJdWxfRG1hQnVmZmVyVmlydHVhbFsxXSwKKwkJCQkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyUGFnZXNbMV0pOworCQkJfQorCQl9IGVsc2UgeworCQkJaW91bm1hcCgodm9pZCAqKWRldnByaXYtPmR3X0FpQmFzZSk7CisKKwkJCWlmIChkZXZwcml2LT5hbGxvY2F0ZWQpIHsKKwkJCQlpX3BjaV9jYXJkX2ZyZWUoZGV2cHJpdi0+YW1jYyk7CisJCQl9CisJCX0KKworCQlpZiAocGNpX2xpc3RfYnVpbGRlZCkgeworCQkJLy92X3BjaV9jYXJkX2xpc3RfY2xlYW51cChQQ0lfVkVORE9SX0lEX0FNQ0MpOworCQkJdl9wY2lfY2FyZF9saXN0X2NsZWFudXAodGhpc19ib2FyZC0+aV9WZW5kb3JJZCk7CisJCQlwY2lfbGlzdF9idWlsZGVkID0gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogc3RhdGljIGludCBpX0FERElfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZXMgYWxsIGludGVycnVwdHMsIFJlc2V0cyBkaWdpdGFsIG91dHB1dCB0byBsb3csIHwKK3wJCQkJU2V0IGFsbCBhbmFsb2cgb3V0cHV0IHRvIGxvdwkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGludCBpX0FERElfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwl0aGlzX2JvYXJkLT5pX2h3ZHJ2X1Jlc2V0KGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8vIEludGVycnVwdCBmdW5jdGlvbgorLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8c3RhdGljIHZvaWQgdl9BRERJX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkICBQVF9SRUdTX0FSRykgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlZ2lzdGVyZCBpbnRlcnJ1cHQgcm91dGluZQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlpbnQgaXJxCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGlycXJldHVybl90IHZfQURESV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl0aGlzX2JvYXJkLT52X2h3ZHJ2X0ludGVycnVwdChpcnEsIGQpOworCXJldHVybiBJUlFfUkVUVkFMKDEpOworfQorCisvLyBFRVBST00gUmVhZCBGdW5jdGlvbgorLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8SU5UIGlfQURESURBVEFfSW5zblJlYWRFZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAyNTYgd29yZHMgZnJvbSBFRVBST00gICAgICAgICAgCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitzdGF0aWMgaW50IGlfQURESURBVEFfSW5zblJlYWRFZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVdPUkQgd19EYXRhOworCVdPUkQgd19BZGRyZXNzOworCXdfQWRkcmVzcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBhZGRyZXNzIHRvIGJlIHJlYWQgYXMgMCwxLDIsMy4uLjI1NQorCisJd19EYXRhID0gd19FZXByb21SZWFkV29yZChkZXZwcml2LT5pX0lvYmFzZUFtY2MsCisJCXRoaXNfYm9hcmQtPnBjX0VlcHJvbUNoaXAsIDB4MTAwICsgKDIgKiB3X0FkZHJlc3MpKTsKKwlkYXRhWzBdID0gd19EYXRhOworCS8vbXVsdGlwbGllZCBieSAyIGJjb3ppbnB1dCB3aWxsIGJlIGxpa2UgMCwxLDIuLi4yNTUKKwlyZXR1cm4gaW5zbi0+bjsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmgKQEAgLTAsMCArMSw0NjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlICIuLi8uLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICJhZGRpX2FtY2NfczU5MzMuaCIKKworI2RlZmluZSBFUlJPUgktMQorI2RlZmluZSBTVUNDRVNTCTEKKworLyogdmFyaWFibGUgdHlwZSBkZWZpbml0aW9uICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQllURSwgKlBCWVRFOwordHlwZWRlZiBzaG9ydCBTSE9SVCwgKlBTSE9SVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNIT1JULCAqUFVTSE9SVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRCwgKlBXT1JEOwordHlwZWRlZiBpbnQgSU5ULCAqUElOVDs7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5ULCAqUFVJTlQ7Cit0eXBlZGVmIGludCBMT05HLCAqUExPTkc7CQkvKiAzMi1iaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IFVMT05HLCAqUFVMT05HOwkvKiAzMi1iaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IERXT1JELCAqUERXT1JEOwkvKiAzMi1iaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVTE9OR19QVFI7CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKlBDUkFOR0U7CisKKyNkZWZpbmUgTE9CWVRFKFcpCShCWVRFKSgoVykgJiAweEZGKQorI2RlZmluZSBISUJZVEUoVykJKEJZVEUpKCgoVykgPj4gOCkgJiAweEZGKQorI2RlZmluZSBNQUtFV09SRChILCBMKQkoVVNIT1JUKSgoTCkgfCAoKEgpIDw8IDgpKQorI2RlZmluZSBMT1dPUkQoVykJKFVTSE9SVCkoKFcpICYgMHhGRkZGKQorI2RlZmluZSBISVdPUkQoVykJKFVTSE9SVCkoKChXKSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lIE1BS0VEV09SRChILCBMKQkoVUlOVCkoKEwpIHwgKChIKSA8PCAxNikpCisKKyNkZWZpbmUgQURESV9FTkFCTEUJCTEKKyNkZWZpbmUgQURESV9ESVNBQkxFCQkwCisjZGVmaW5lIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUCTEKKworI2RlZmluZSBBRERJREFUQV9FRVBST00JCTEKKyNkZWZpbmUgQURESURBVEFfTk9fRUVQUk9NCTAKKyNkZWZpbmUgQURESURBVEFfOTNDNzYJCSI5M0M3NiIKKyNkZWZpbmUgQURESURBVEFfUzU5MjAJCSJTNTkyMCIKKyNkZWZpbmUgQURESURBVEFfUzU5MzMJCSJTNTkzMyIKKyNkZWZpbmUgQURESURBVEFfOTA1NAkJIjkwNTQiCisKKy8qIEFERElEQVRBIEVuYWJsZSBEaXNhYmxlICovCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRQkJMQorI2RlZmluZSBBRERJREFUQV9ESVNBQkxFCTAKKworLyogU3RydWN0dXJlcyAqLworCisvKiBzdHJ1Y3R1cmUgZm9yIHRoZSBib2FyZHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyICpwY19Ecml2ZXJOYW1lOwkvLyBkcml2ZXIgbmFtZQorCUlOVCBpX1ZlbmRvcklkOwkJLy9QQ0kgdmVuZG9yIGEgZGV2aWNlIElEIG9mIGNhcmQKKwlJTlQgaV9EZXZpY2VJZDsKKwlJTlQgaV9Jb3JhbmdlQmFzZTA7CisJSU5UIGlfSW9yYW5nZUJhc2UxOworCUlOVCBpX0lvcmFuZ2VCYXNlMjsJLy8gIGJhc2UgMiByYW5nZQorCUlOVCBpX0lvcmFuZ2VCYXNlMzsJLy8gIGJhc2UgMyByYW5nZQorCUlOVCBpX1BDSUVlcHJvbTsJLy8gZWVwcm9tIHByZXNlbnQgb3Igbm90CisJY2hhciAqcGNfRWVwcm9tQ2hpcDsJLy8gdHlwZSBvZiBjaGlwCisJSU5UIGlfTmJyQWlDaGFubmVsOwkvLyBudW0gb2YgQS9EIGNoYW5zCisJSU5UIGlfTmJyQWlDaGFubmVsRGlmZjsJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZmIG1vZGUKKwlJTlQgaV9BaUNoYW5uZWxMaXN0OwkvLyBsZW4gb2YgY2hhbmxpc3QKKwlJTlQgaV9OYnJBb0NoYW5uZWw7CS8vIG51bSBvZiBEL0EgY2hhbnMKKwlJTlQgaV9BaU1heGRhdGE7CS8vIHJlc29sdXRpb24gb2YgQS9ECisJSU5UIGlfQW9NYXhkYXRhOwkvLyByZXNvbHV0aW9uIG9mIEQvQQorCVBDUkFOR0UgcHJfQWlSYW5nZWxpc3Q7CS8vIHJhbmdlbGlzdCBmb3IgQS9ECisJUENSQU5HRSBwcl9Bb1JhbmdlbGlzdDsJLy8gcmFuZ2VsaXN0IGZvciBEL0EKKworCUlOVCBpX05ickRpQ2hhbm5lbDsJLy8gTnVtYmVyIG9mIERJIGNoYW5uZWxzCisJSU5UIGlfTmJyRG9DaGFubmVsOwkvLyBOdW1iZXIgb2YgRE8gY2hhbm5lbHMKKwlJTlQgaV9Eb01heGRhdGE7CS8vIGRhdGEgdG8gc2V0IGFsbCBjaGFuZWxzIGhpZ2gKKworCUlOVCBpX05iclRUTENoYW5uZWw7CS8vIE51bWJlciBvZiBUVEwgY2hhbm5lbHMKKwlQQ1JBTkdFIHByX1RUTFJhbmdlbGlzdDsJLy8gcmFuZ2VsaXN0IGZvciBUVEwKKworCUlOVCBpX0RtYTsJCS8vIGRtYSBwcmVzZW50IG9yIG5vdAorCUlOVCBpX1RpbWVyOwkJLy8gICB0aW1lciBzdWJkZXZpY2UgcHJlc2VudCBvciBub3QKKwlCWVRFIGJfQXZhaWxhYmxlQ29udmVydFVuaXQ7CisJVUlOVCB1aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsJLy8gTWluaW11bSBBY3F1aXNpdGlvbiBpbiBOYW5vIHNlY3MKKwlVSU5UIHVpX01pbkRlbGF5dGltZU5zOwkvLyBNaW5pbXVtIERlbGF5IGluIE5hbm8gc2VjcworCisJLyogaW50ZXJydXB0IGFuZCByZXNldCAqLworCXZvaWQgKCp2X2h3ZHJ2X0ludGVycnVwdCkoaW50IGlycSwgdm9pZCAqZCk7CisJaW50ICgqaV9od2Rydl9SZXNldCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKKwkvKiBTdWJkZXZpY2UgZnVuY3Rpb25zICovCisKKwkvKiBBTkFMT0cgSU5QVVQgKi8KKwlpbnQgKCppX2h3ZHJ2X0luc25Db25maWdBbmFsb2dJbnB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuV3JpdGVBbmFsb2dJbnB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25CaXRzQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CisJaW50ICgqaV9od2Rydl9Db21tYW5kQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworCWludCAoKmlfaHdkcnZfQ2FuY2VsQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisKKwkvKiBBbmFsb2cgT3V0cHV0ICovCisJaW50ICgqaV9od2Rydl9JbnNuQ29uZmlnQW5hbG9nT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNBbmFsb2dPdXRwdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKwkvKiBEaWdpdGFsIElucHV0ICovCisJaW50ICgqaV9od2Rydl9JbnNuQ29uZmlnRGlnaXRhbElucHV0KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkRGlnaXRhbElucHV0KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25Xcml0ZURpZ2l0YWxJbnB1dCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuQml0c0RpZ2l0YWxJbnB1dCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKwkvKiBEaWdpdGFsIE91dHB1dCAqLworCWludCAoKmlfaHdkcnZfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zblJlYWREaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisJLyogVElNRVIgKi8KKwlpbnQgKCppX2h3ZHJ2X0luc25Db25maWdUaW1lcikoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25Xcml0ZVRpbWVyKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkVGltZXIpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNUaW1lcikoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKwkvKiBUVEwgSU8gKi8KKwlpbnQgKCppX2h3ZHJfQ29uZmlnSW5pdFRUTElPKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJfUmVhZFRUTElPQml0cykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJfUmVhZFRUTElPQWxsUG9ydFZhbHVlKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcl9Xcml0ZVRUTElPQ2hsT25PZmYpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK30gYm9hcmR0eXBlOworCisvL01PRFVMRSBJTkZPIFNUUlVDVFVSRQorCit0eXBlZGVmIHVuaW9uIHsKKwkvKiBJbmNyZW1lbnRhbCBjb3VudGVyIGluZm9zICovCisJc3RydWN0IHsKKwkJdW5pb24geworCQkJc3RydWN0IHsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyMTsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyMjsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyMzsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyNDsKKwkJCX0gc19CeXRlTW9kZVJlZ2lzdGVyOworCQkJRFdPUkQgZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNDsKKwkJfSBzX01vZGVSZWdpc3RlcjsKKworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGJfSW5kZXhJbml0OjE7CisJCQl1bnNpZ25lZCBpbnQgYl9Db3VudGVySW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfUmVmZXJlbmNlSW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfSW5kZXhJbnRlcnJ1cHRPY2N1cjoxOworCQkJdW5zaWduZWQgaW50IGJfQ29tcGFyZUxvZ2ljSW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0OjE7CisJCQl1bnNpZ25lZCBpbnQgYl9GcmVxdWVuY3lNZWFzdXJlbWVudEVuYWJsZToxOworCQl9IHNfSW5pdEZsYWc7CisKKwl9IHNfU2llbWVuc0NvdW50ZXJJbmZvOworCisJLyogU1NJIGluZm9zICovCisJc3RydWN0IHsKKwkJQllURSBiX1NTSVByb2ZpbGU7CisJCUJZVEUgYl9Qb3NpdGlvblR1cm5MZW5ndGg7CisJCUJZVEUgYl9UdXJuQ3B0TGVuZ3RoOworCQlCWVRFIGJfU1NJSW5pdDsKKwl9IHNfU1NJQ291bnRlckluZm87CisKKwkvKiBUVEwgSS9PIGluZm9zICovCisJc3RydWN0IHsKKwkJQllURSBiX1RUTEluaXQ7CisJCUJZVEUgYl9Qb3J0Q29uZmlndXJhdGlvbls0XTsKKwl9IHNfVFRMSU9JbmZvOworCisJLyogRGlnaXRhbCBJL08gaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlCWVRFIGJfRGlnaXRhbEluaXQ7CisJCUJZVEUgYl9DaGFubmVsQU1vZGU7CisJCUJZVEUgYl9DaGFubmVsQk1vZGU7CisJCUJZVEUgYl9PdXRwdXRNZW1vcnlFbmFibGVkOworCQlEV09SRCBkd19PdXRwdXRNZW1vcnk7CisJfSBzX0RpZ2l0YWxJT0luZm87CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJLyogODJYNTQgdGltZXIgaW5mb3MgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJQllURSBiXzgyWDU0SW5pdDsKKwkJCUJZVEUgYl9JbnB1dENsb2NrU2VsZWN0aW9uOworCQkJQllURSBiX0lucHV0Q2xvY2tMZXZlbDsKKwkJCUJZVEUgYl9PdXRwdXRMZXZlbDsKKwkJCUJZVEUgYl9IYXJkd2FyZUdhdGVMZXZlbDsKKwkJCURXT1JEIGR3X0NvbmZpZ3VyYXRpb25Xb3JkOworCQl9IHNfODJYNTRUaW1lckluZm9bM107CisJCUJZVEUgYl9JbnRlcnJ1cHRNYXNrOworCX0gc184Mlg1NE1vZHVsZUluZm87CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2hyb25vbWV0ZXIgaW5mb3MgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwlzdHJ1Y3QgeworCQlCWVRFIGJfQ2hyb25vSW5pdDsKKwkJQllURSBiX0ludGVycnVwdE1hc2s7CisJCUJZVEUgYl9QQ0lJbnB1dENsb2NrOworCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJQllURSBiX0N5Y2xlTW9kZTsKKwkJZG91YmxlIGRfVGltaW5nSW50ZXJ2YWw7CisJCURXT1JEIGR3X0NvbmZpZ1JlZzsKKwl9IHNfQ2hyb25vTW9kdWxlSW5mbzsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFB1bHNlIGVuY29kZXIgaW5mb3MgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQlCWVRFIGJfUHVsc2VFbmNvZGVySW5pdDsKKwkJfSBzX1B1bHNlRW5jb2RlckluZm9bNF07CisJCURXT1JEIGR3X1NldFJlZ2lzdGVyOworCQlEV09SRCBkd19Db250cm9sUmVnaXN0ZXI7CisJCURXT1JEIGR3X1N0YXR1c1JlZ2lzdGVyOworCX0gc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvOworCisJLyogVG9yIGNvbnRlciBpbmZvcyAqLworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQlCWVRFIGJfVG9yQ291bnRlckluaXQ7CisJCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJCUJZVEUgYl9JbnRlcnJ1cHRFbmFibGU7CisJCQlkb3VibGUgZF9UaW1pbmdJbnRlcnZhbDsKKwkJCVVMT05HIHVsX1JlYWxUaW1pbmdJbnRlcnZhbDsKKwkJfSBzX1RvckNvdW50ZXJJbmZvWzJdOworCQlCWVRFIGJfUENJSW5wdXRDbG9jazsKKwl9IHNfVG9yQ291bnRlck1vZHVsZUluZm87CisKKwkvKiBQV00gaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJQllURSBiX1BXTUluaXQ7CisJCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJCUJZVEUgYl9JbnRlcnJ1cHRFbmFibGU7CisJCQlkb3VibGUgZF9Mb3dUaW1pbmc7CisJCQlkb3VibGUgZF9IaWdoVGltaW5nOworCQkJVUxPTkcgdWxfUmVhbExvd1RpbWluZzsKKwkJCVVMT05HIHVsX1JlYWxIaWdoVGltaW5nOworCQl9IHNfUFdNSW5mb1syXTsKKwkJQllURSBiX0Nsb2NrU2VsZWN0aW9uOworCX0gc19QV01Nb2R1bGVJbmZvOworCisJLyogRVRNIGluZm9zICovCisJc3RydWN0IHsKKwkJc3RydWN0IHsKKwkJCUJZVEUgYl9FVE1FbmFibGU7CisJCQlCWVRFIGJfRVRNSW50ZXJydXB0OworCQl9IHNfRVRNSW5mb1syXTsKKwkJQllURSBiX0VUTUluaXQ7CisJCUJZVEUgYl9UaW1pbmdVbml0OworCQlCWVRFIGJfQ2xvY2tTZWxlY3Rpb247CisJCWRvdWJsZSBkX1RpbWluZ0ludGVydmFsOworCQlVTE9ORyB1bF9UaW1pbmc7CisJfSBzX0VUTU1vZHVsZUluZm87CisKKwkvKiBDREEgaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlCWVRFIGJfQ0RBRW5hYmxlOworCQlCWVRFIGJfQ0RBSW50ZXJydXB0OworCQlCWVRFIGJfQ0RBSW5pdDsKKwkJQllURSBiX0ZjdFNlbGVjdGlvbjsKKwkJQllURSBiX0NEQVJlYWRGSUZPT3ZlcmZsb3c7CisJfSBzX0NEQU1vZHVsZUluZm87CisKK30gc3RyX01vZHVsZUluZm87CisKKy8qIFByaXZhdGUgc3RydWN0dXJlIGZvciB0aGUgYWRkaV9hcGNpMzEyMCBkcml2ZXIgKi8KK3R5cGVkZWYgc3RydWN0IHsKKworCUlOVCBpb2Jhc2U7CisJSU5UIGlfSW9iYXNlQW1jYzsJLy8gYmFzZStzaXplIGZvciBBTUNDIGNoaXAKKwlJTlQgaV9Jb2Jhc2VBZGRvbjsJLy9hZGRvbiBiYXNlIGFkZHJlc3MKKwlJTlQgaV9Jb2Jhc2VSZXNlcnZlZDsKKwlVTE9OR19QVFIgZHdfQWlCYXNlOworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjOwkvLyBwdHIgdG9vIEFNQ0MgZGF0YQorCUJZVEUgYWxsb2NhdGVkOwkJLy8gd2UgaGF2ZSBibG9ja2VkIGNhcmQKKwlCWVRFIGJfVmFsaWREcml2ZXI7CS8vIGRyaXZlciBpcyBvaworCUJZVEUgYl9BaUNvbnRpbnVvdXM7CS8vIHdlIGRvIHVubGltaXRlZCBBSQorCUJZVEUgYl9BaUluaXRpYWxpc2F0aW9uOworCVVJTlQgdWlfQWlBY3R1YWxTY2FuOwkvL2hvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkCisJVUlOVCB1aV9BaUJ1ZmZlclB0cjsJLy8gZGF0YSBidWZmZXIgcHRyIGluIHNhbXBsZXMKKwlVSU5UIHVpX0FpTmJyb2ZDaGFubmVsczsJLy8gaG93IG1hbnkgY2hhbm5lbHMgaXMgbWVhc3VyZWQKKwlVSU5UIHVpX0FpU2Nhbkxlbmd0aDsJLy8gTGVuZ3RoIG9mIGFjdHVhbCBzY2FubGlzdAorCVVJTlQgdWlfQWlBY3R1YWxTY2FuUG9zaXRpb247CS8vIHBvc2l0aW9uIGluIGFjdHVhbCBzY2FuCisJUFVJTlQgcHVpX0FpQ2hhbm5lbExpc3Q7CS8vIGFjdHVhbCBjaGFubGlzdAorCVVJTlQgdWlfQWlDaGFubmVsTGlzdFszMl07CS8vIGFjdHVhbCBjaGFubGlzdAorCUJZVEUgYl9BaUNoYW5uZWxDb25maWd1cmF0aW9uWzMyXTsJLy8gYWN0dWFsIGNoYW5saXN0CisJVUlOVCB1aV9BaVJlYWREYXRhWzMyXTsKKwlEV09SRCBkd19BaUluaXRpYWxpc2VkOworCVVJTlQgdWlfQWlUaW1lcjA7CS8vVGltZXIgQ29uc3RhbnQgZm9yIFRpbWVyMAorCVVJTlQgdWlfQWlUaW1lcjE7CS8vVGltZXIgY29uc3RhbnQgZm9yIFRpbWVyMQorCVVJTlQgdWlfQWlGbGFnczsKKwlVSU5UIHVpX0FpRGF0YUxlbmd0aDsKKwlzaG9ydCAqQWlEYXRhOwkvLyBQb2ludGVyIHRvIHNhbXBsZSBkYXRhCisJVUlOVCB1aV9BaU5icm9mU2NhbnM7CS8vIG51bWJlciBvZiBzY2FucyB0byBkbworCVVTSE9SVCB1c19Vc2VEbWE7CS8vIFRvIHVzZSBEbWEgb3Igbm90CisJQllURSBiX0RtYURvdWJsZUJ1ZmZlcjsJLy8gd2UgY2FuIHVzZSBkb3VibGUgYnVmZmVyaW5nCisJVUlOVCB1aV9EbWFBY3R1YWxCdWZmZXI7CS8vIHdoaWNoIGJ1ZmZlciBpcyB1c2VkIG5vdworCS8vKlVQREFURS0wLjcuNTctPjAuNy42OAorCS8vVUxPTkcgICAgICAgICAgICAgICB1bF9EbWFCdWZmZXJWaXJ0dWFsWzJdOy8vIHBvaW50ZXJzIHRvIGJlZ2luIG9mIERNQSBidWZmZXIKKwlzaG9ydCAqdWxfRG1hQnVmZmVyVmlydHVhbFsyXTsJLy8gcG9pbnRlcnMgdG8gYmVnaW4gb2YgRE1BIGJ1ZmZlcgorCVVMT05HIHVsX0RtYUJ1ZmZlckh3WzJdOwkvLyBodyBhZGRyZXNzIG9mIERNQSBidWZmCisJVUlOVCB1aV9EbWFCdWZmZXJTaXplWzJdOwkvLyBzaXplIG9mIGRtYSBidWZmZXIgaW4gYnl0ZXMKKwlVSU5UIHVpX0RtYUJ1ZmZlclVzZXNpemVbMl07CS8vIHdoaWNoIHNpemUgd2UgbWF5IG5vdyB1c2VkIGZvciB0cmFuc2ZlcgorCVVJTlQgdWlfRG1hQnVmZmVyU2FtcGxlc1syXTsJLy8gc2l6ZSBpbiBzYW1wbGVzCisJVUlOVCB1aV9EbWFCdWZmZXJQYWdlc1syXTsJLy8gbnVtYmVyIG9mIHBhZ2VzIGluIGJ1ZmZlcgorCUJZVEUgYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXI7CS8vIERpZ2l0YWwgT3V0cHV0IFJlZ2lzdGVyCisJQllURSBiX091dHB1dE1lbW9yeVN0YXR1czsKKwlCWVRFIGJfQW5hbG9nSW5wdXRDaGFubmVsTmJyOwkvLyBBbmFsb2cgaW5wdXQgY2hhbm5lbCBOYnIKKwlCWVRFIGJfQW5hbG9nT3V0cHV0Q2hhbm5lbE5icjsJLy8gQW5hbG9nIGlucHV0IE91dHB1dCAgTmJyCisJQllURSBiX1RpbWVyU2VsZWN0TW9kZTsJLy8gQ29udGFpbiBkYXRhIHdyaXR0ZW4gYXQgaW9iYXNlICsgMEMKKwlCWVRFIGJfTW9kZVNlbGVjdFJlZ2lzdGVyOwkvLyBDb250YWluIGRhdGEgd3JpdHRlbiBhdCBpb2Jhc2UgKyAwRQorCVVTSE9SVCB1c19PdXRwdXRSZWdpc3RlcjsJLy8gQ29udGFpbiBkYXRhIHdyaXR0ZW4gYXQgaW9iYXNlICsgMAorCUJZVEUgYl9JbnRlcnJ1cHRTdGF0ZTsKKwlCWVRFIGJfVGltZXJJbml0OwkvLyBTcGVjaWZ5IGlmIEluaXRUaW1lcldhdGNoZG9nIHdhcyBsb2FkCisJQllURSBiX1RpbWVyU3RhcnRlZDsJLy8gU3BlY2lmeSBpZiB0aW1lciAyIGlzIHJ1bm5pbmcgb3Igbm90CisJQllURSBiX1RpbWVyMk1vZGU7CS8vIFNwZWNpZnkgdGhlIHRpbWVyIDIgbW9kZQorCUJZVEUgYl9UaW1lcjJJbnRlcnJ1cHQ7CS8vVGltZXIyICBpbnRlcnJ1cHQgZW5hYmxlIG9yIGRpc2FibGUKKwlCWVRFIGJfQWlDeWNsaWNBY3F1aXNpdGlvbjsJLy8gaW5kaWNhdGUgY3ljbGljIGFjcXVpc2l0aW9uCisJQllURSBiX0ludGVycnVwdE1vZGU7CS8vIGVvYyBlb3Mgb3IgZG1hCisJQllURSBiX0VvY0Vvc0ludGVycnVwdDsJLy8gRW5hYmxlIGRpc2FibGUgZW9jIGVvcyBpbnRlcnJ1cHQKKwlVSU5UIHVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lOworCUJZVEUgYl9Fb2NFb3NDb252ZXJzaW9uVGltZUJhc2U7CisJQllURSBiX1NpbmdlbERpZmY7CisJQllURSBiX0V4dHRyaWdFbmFibGU7CS8qIFRvIGVuYWJsZSBvciBkaXNhYmxlIGV4dGVybmFsIHRyaWdnZXIgKi8KKworCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrX0N1cnJlbnQ7CisJYm9hcmR0eXBlICpwc19Cb2FyZEluZm87CisKKwkvKiBIYXJkd2FyZSBib2FyZCBpbmZvcyBmb3IgMTcxMCAqLworCXN0cnVjdCB7CisJCVVJTlQgdWlfQWRkcmVzczsJLyogQm9hcmQgYWRkcmVzcyAqLworCQlVSU5UIHVpX0ZsYXNoQWRkcmVzczsKKwkJQllURSBiX0ludGVycnVwdE5icjsJLyogQm9hcmQgaW50ZXJydXB0IG51bWJlciAqLworCQlCWVRFIGJfU2xvdE51bWJlcjsJLyogUENJIHNsb3QgbnVtYmVyICovCisJCUJZVEUgYl9Cb2FyZFZlcnNpb247CisJCURXT1JEIGR3X01vbGR1bGVDb25maWd1cmF0aW9uWzRdOwkvKiBNb2R1bGUgY29uZmlnICovCisJfSBzX0JvYXJkSW5mb3M7CisKKwkvKiBJbnRlcnJ1cHQgaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlVTE9ORyB1bF9JbnRlcnJ1cHRPY2N1cjsJLyogMCAgIDogTm8gaW50ZXJydXB0IG9jY3VyICovCisJCQkJCQkvKiA+IDAgOiBJbnRlcnJ1cHQgb2NjdXIgKi8KKwkJVUlOVCB1aV9SZWFkOwkvKiBSZWFkIEZJRk8gKi8KKwkJVUlOVCB1aV9Xcml0ZTsJLyogV3JpdGUgRklGTyAqLworCQlzdHJ1Y3QgeworCQkJQllURSBiX09sZE1vZHVsZU1hc2s7CisJCQlVTE9ORyB1bF9PbGRJbnRlcnJ1cHRNYXNrOwkvKiBJbnRlcnJ1cHQgbWFzayAqLworCQkJVUxPTkcgdWxfT2xkQ291bnRlckxhdGNoVmFsdWU7CS8qIEludGVycnVwdCBjb3VudGVyIHZhbHVlICovCisJCX0gc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tBUENJMTcxMF9TQVZFX0lOVEVSUlVQVF07CisJfSBzX0ludGVycnVwdFBhcmFtZXRlcnM7CisKKwlzdHJfTW9kdWxlSW5mbyBzX01vZHVsZUluZm9bNF07CisJVUxPTkcgdWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMTBdOworCit9IGFkZGlfcHJpdmF0ZTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHBjaV9saXN0X2J1aWxkZWQ7CS8qIHNldCB0byAxIHdoZW4gbGlzdCBvZiBjYXJkIGlzIGtub3duICovCisKKy8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBpX0FERElfQXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IGlfQURESV9EZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGlfQURESV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKworc3RhdGljIGlycXJldHVybl90IHZfQURESV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IGlfQURESURBVEFfSW5zblJlYWRFZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMWJiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYwpAQCAtMCwwICsxLDExNTggQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgIDogQURESSBEQVRBICAgICAgICAgfCBDb21waWxlciA6IEdDQyAJCQkgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bG5hbWUgOiBhZGRpX2VlcHJvbS5jICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogQURESSBFRVBST00gIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgCQkgfCAJCQkJCQkgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IAkJCQkJCSAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjZGVmaW5lIE5WQ01EX0JFR0lOX1JFQUQgCSgweDcgPDwgNSApCS8vIG52UmFtIGJlZ2luIHJlYWQgY29tbWFuZAorI2RlZmluZSBOVkNNRF9MT0FEX0xPVyAgIAkoMHg0IDw8IDUgKQkvLyBudlJhbSBsb2FkIGxvdyBjb21tYW5kCisjZGVmaW5lIE5WQ01EX0xPQURfSElHSCAgCSgweDUgPDwgNSApCS8vIG52UmFtIGxvYWQgaGlnaCBjb21tYW5kCisjZGVmaW5lIEVFNzZfQ01EX0xFTiAgICAJMTMJLy8gYml0cyBpbiBpbnN0cnVjdGlvbnMKKyNkZWZpbmUgRUVfUkVBRCAgICAgICAgIAkweDAxODAJLy8gMDEgMTAwMCAwMDAwIHJlYWQgaW5zdHJ1Y3Rpb24KKworI2RlZmluZQlXT1JECQkJCXVuc2lnbmVkIHNob3J0CisjZGVmaW5lIFBXT1JECQkJCXVuc2lnbmVkIHNob3J0ICoKKyNkZWZpbmUgUERXT1JECQkJCXVuc2lnbmVkIGludCAgKgorCisjaWZuZGVmIERXT1JECisjZGVmaW5lCURXT1JECQkJCXVuc2lnbmVkIGludAorI2VuZGlmCisKKyNkZWZpbmUgRUVQUk9NX0RJR0lUQUxJTlBVVCAJCQkwCisjZGVmaW5lIEVFUFJPTV9ESUdJVEFMT1VUUFVUCQkJMQorI2RlZmluZSBFRVBST01fQU5BTE9HSU5QVVQJCQkJMgorI2RlZmluZSBFRVBST01fQU5BTE9HT1VUUFVUCQkJCTMKKyNkZWZpbmUgRUVQUk9NX1RJTUVSCQkJCQk0CisjZGVmaW5lIEVFUFJPTV9XQVRDSERPRwkJCQkJNQorI2RlZmluZSBFRVBST01fVElNRVJfV0FUQ0hET0dfQ09VTlRFUgkxMAorCitzdHJ1Y3Qgc3RyX0Z1bmN0aW9uYWxpdHkgeworCUJZVEUgYl9UeXBlOworCVdPUkQgd19BZGRyZXNzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19IZWFkZXJTaXplOworCUJZVEUgYl9OZnVuY3Rpb25zOworCXN0cnVjdCBzdHJfRnVuY3Rpb25hbGl0eSBzX0Z1bmN0aW9uc1s3XTsKK30gc3RyX01haW5IZWFkZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXT1JEIHdfTmNoYW5uZWw7CisJQllURSBiX0ludGVycnVwdGlibGU7CisJV09SRCB3X05pbnRlcnJ1cHRMb2dpYzsKK30gc3RyX0RpZ2l0YWxJbnB1dEhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19OY2hhbm5lbDsKK30gc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXI7CisKKy8vIHVzZWQgZm9yIHRpbWVyIGFzIHdlbGwgYXMgd2F0Y2hkb2cKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19IZWFkZXJTaXplOworCUJZVEUgYl9SZXNvbHV0aW9uOworCUJZVEUgYl9Nb2RlOwkJLy8gaW4gY2FzZSBvZiBXYXRjaGRvZyBpdCBpcyBmdW5jdGlvbmFsaXR5CisJV09SRCB3X01pblRpbWluZzsKKwlCWVRFIGJfVGltZUJhc2U7Cit9IHN0cl9UaW1lckRldGFpbHM7Cit0eXBlZGVmIHN0cnVjdCB7CisKKwlXT1JEIHdfTnRpbWVyOworCXN0cl9UaW1lckRldGFpbHMgc19UaW1lckRldGFpbHNbNF07CS8vICBzdXBwb3J0cyA0IHRpbWVycworfSBzdHJfVGltZXJNYWluSGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisJV09SRCB3X05jaGFubmVsOworCUJZVEUgYl9SZXNvbHV0aW9uOworfSBzdHJfQW5hbG9nT3V0cHV0SGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisJV09SRCB3X05jaGFubmVsOworCVdPUkQgd19NaW5Db252ZXJ0VGltaW5nOworCVdPUkQgd19NaW5EZWxheVRpbWluZzsKKwlCWVRFIGJfSGFzRG1hOworCUJZVEUgYl9SZXNvbHV0aW9uOworfSBzdHJfQW5hbG9nSW5wdXRIZWFkZXI7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiAgICAgICAgICAgIFJlYWQgSGVhZGVyIEZ1bmN0aW9ucyAgICAgICAgICAgICAgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitJTlQgaV9FZXByb21SZWFkTWFpbkhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsSW5wdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfRGlnaXRhbE91dHB1dEhlYWRlciAqIHNfSGVhZGVyKTsKKworSU5UIGlfRWVwcm9tUmVhZFRpbWVySGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfVGltZXJNYWluSGVhZGVyICogc19IZWFkZXIpOworCitJTlQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKK0lOVCBpX0VlcHJvbVJlYWRBbmxvZ0lucHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfQW5hbG9nSW5wdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogICAgICBFZXByb20gU3BlY2lmaWMgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitXT1JEIHdfRWVwcm9tUmVhZFdvcmQoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MpOwordm9pZCB2X0VlcHJvbVdhaXRCdXN5KFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOwordm9pZCB2X0VlcHJvbUNsb2NrNzYoRFdPUkQgZHdfQWRkcmVzcywgRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZSk7Cit2b2lkIHZfRWVwcm9tV2FpdEJ1c3koV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7Cit2b2lkIHZfRWVwcm9tU2VuZENvbW1hbmQ3NihEV09SRCBkd19BZGRyZXNzLCBEV09SRCBkd19FZXByb21Db21tYW5kLAorCUJZVEUgYl9EYXRhTGVuZ3RoSW5CaXRzKTsKK3ZvaWQgdl9FZXByb21Dczc2UmVhZChEV09SRCBkd19BZGRyZXNzLCBXT1JEIHdfb2Zmc2V0LCBQV09SRCBwd19WYWx1ZSk7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBXT1JEIHdfRWVwcm9tUmVhZFdvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkoV09SRAl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgICAgICAgICAgICAgCQkgfAorfAkJCQkgY2hhciAqCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgICAgICAgICAgICAgICAJCSB8Cit8CQkJCSBXT1JEICAgd19FZXByb21TdGFydEFkZHJlc3MpICAgICAgICAgICAgICAgIAkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgZnJvbSBlZXByb21uIGEgd29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgV09SRCB3X0VlcHJvbVN0YXJ0QWRkcmVzcyAgICA6IFNlbGVjdGVkIGVlcHJvbSBhZGRyZXNzIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBSZWFkIHdvcmQgdmFsdWUgZnJvbSBlZXByb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitXT1JEIHdfRWVwcm9tUmVhZFdvcmQoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MpCit7CisKKwlCWVRFIGJfQ291bnRlciA9IDA7CisKKwlCWVRFIGJfUmVhZEJ5dGUgPSAwOworCisJQllURSBiX1JlYWRMb3dCeXRlID0gMDsKKworCUJZVEUgYl9SZWFkSGlnaEJ5dGUgPSAwOworCisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0xvdyA9IDA7CisKKwlCWVRFIGJfU2VsZWN0ZWRBZGRyZXNzSGlnaCA9IDA7CisKKwlXT1JEIHdfUmVhZFdvcmQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogVGVzdCB0aGUgUENJIGNoaXAgdHlwZSAqLworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKCghc3RyY21wKHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgIlM1OTIwIikpIHx8CisJCSghc3RyY21wKHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgIlM1OTMzIikpKQorCXsKKworCQlmb3IgKGJfQ291bnRlciA9IDA7IGJfQ291bnRlciA8IDI7IGJfQ291bnRlcisrKQorCQl7CisKKwkJCWJfU2VsZWN0ZWRBZGRyZXNzTG93ID0gKHdfRWVwcm9tU3RhcnRBZGRyZXNzICsgYl9Db3VudGVyKSAlIDI1NjsJLy9SZWFkIHRoZSBsb3cgOCBiaXQgcGFydAorCisJCQliX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAod19FZXByb21TdGFydEFkZHJlc3MgKyBiX0NvdW50ZXIpIC8gMjU2OwkvL1JlYWQgdGhlIGhpZ2ggOCBiaXQgcGFydAorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLyogU2VsZWN0IHRoZSBsb2FkIGxvdyBhZGRyZXNzIG1vZGUgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoTlZDTURfTE9BRF9MT1csIHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRik7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJLyogV2FpdCBvbiBidXN5ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJdl9FZXByb21XYWl0QnVzeSh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBMb2FkIHRoZSBsb3cgYWRkcmVzcyAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YihiX1NlbGVjdGVkQWRkcmVzc0xvdywKKwkJCQl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0UpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIFNlbGVjdCB0aGUgbG9hZCBoaWdoIGFkZHJlc3MgbW9kZSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoTlZDTURfTE9BRF9ISUdILCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0YpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIExvYWQgdGhlIGhpZ2ggYWRkcmVzcyAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NIaWdoLAorCQkJCXdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRSk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJLyogV2FpdCBvbiBidXN5ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJdl9FZXByb21XYWl0QnVzeSh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBTZWxlY3QgdGhlIFJFQUQgbW9kZSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YihOVkNNRF9CRUdJTl9SRUFELCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0YpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBSZWFkIGRhdGEgaW50byB0aGUgRUVQUk9NICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWJfUmVhZEJ5dGUgPSBpbmIod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyAweDNFKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQkvKiBXYWl0IG9uIGJ1c3kgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQl2X0VlcHJvbVdhaXRCdXN5KHdfUENJQm9hcmRFZXByb21BZGRyZXNzKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIFNlbGVjdCB0aGUgdXBwZXIgYWRkcmVzcyBwYXJ0ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Db3VudGVyID09IDApCisJCQl7CisKKwkJCQliX1JlYWRMb3dCeXRlID0gYl9SZWFkQnl0ZTsKKworCQkJfQkvLyBpZihiX0NvdW50ZXI9PTApCisKKwkJCWVsc2UKKwkJCXsKKworCQkJCWJfUmVhZEhpZ2hCeXRlID0gYl9SZWFkQnl0ZTsKKworCQkJfQkvLyBpZihiX0NvdW50ZXI9PTApCisKKwkJfQkJLy8gZm9yIChiX0NvdW50ZXI9MDsgYl9Db3VudGVyPDI7IGJfQ291bnRlcisrKQorCisJCXdfUmVhZFdvcmQgPSAoYl9SZWFkTG93Qnl0ZSB8ICgoKFdPUkQpIGJfUmVhZEhpZ2hCeXRlKSAqIDI1NikpOworCisJfQkJCS8vIGVuZCBvZiBpZiAoKCFzdHJjbXAocGNfUENJQ2hpcEluZm9ybWF0aW9uLCAiUzU5MjAiKSkgfHwgKCFzdHJjbXAocGNfUENJQ2hpcEluZm9ybWF0aW9uLCAiUzU5MzMiKSkpCisKKwlpZiAoIXN0cmNtcChwY19QQ0lDaGlwSW5mb3JtYXRpb24sICI5M0M3NiIpKQorCXsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIFJlYWQgMTYgYml0IGZyb20gdGhlIEVFUFJPTSA5M0M3NiAqLworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdl9FZXByb21Dczc2UmVhZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19FZXByb21TdGFydEFkZHJlc3MsCisJCQkmd19SZWFkV29yZCk7CisKKwl9CisKKwlyZXR1cm4gKHdfUmVhZFdvcmQpOworCit9CisKKy8qCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogdm9pZCB2X0VlcHJvbVdhaXRCdXN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworfAkJCShXT1JECXdfUENJQm9hcmRFZXByb21BZGRyZXNzKSAgICAgICAgICAgICAgICAgICAgCSB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFRhc2sgICAgICAgICAgICAgIDogV2FpdCB0aGUgYnVzeSBmbGFnIGZyb20gUENJIGNvbnRyb2xsZXIgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyovCisKK3ZvaWQgdl9FZXByb21XYWl0QnVzeShXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzKQoreworCisJQllURSBiX0VlcHJvbUJ1c3kgPSAwOworCisJZG8KKwl7CisKKwkgICAvKioqKioqKioqKioqKi8KKworCQkvKiBJTVBPUlRBTlQgKi8KKworCSAgIC8qKioqKioqKioqKioqLworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBBbiBlcnJvciBoYXMgYmVlbiB3cml0dGVuIGluIHRoZSBBTUNDIDU5MzMgYm9vayBhdCB0aGUgcGFnZSBCLTEzICovCisKKwkJLyogRXg6IGlmIHlvdSByZWFkIGEgYnl0ZSBhbmQgbG9vayBmb3IgdGhlIGJ1c3kgc3RhdHVzRUVQUk9NPTB4ODAgYW5kICAgKi8KKworCQkvKiAgICAgIHRoZSBvcGVyYXRvciByZWdpc3RlciBpcyBBTUNDX09QX1JFR19NQ1NSKzMgKi8KKworCQkvKiAgICAgIFdPUkQgcmVhZCAgRUVQUk9NPTB4ODAwMCBhbmRBTUNDX09QX1JFR19NQ1NSKzIgICAgICAgICAgICAgICAgICAqLworCisJCS8qICAgICAgRFdPUkQgcmVhZCAgRUVQUk9NPTB4ODAwMDAwMDAgYW5kIEFNQ0NfT1BfUkVHX01DU1IgKi8KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJYl9FZXByb21CdXN5ID0gaW5iKHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRik7CisJCWJfRWVwcm9tQnVzeSA9IGJfRWVwcm9tQnVzeSAmIDB4ODA7CisKKwl9CisJd2hpbGUgKGJfRWVwcm9tQnVzeSA9PSAweDgwKTsKKworfQorCisvKgorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogdm9pZCB2X0VlcHJvbUNsb2NrNzYoRFdPUkQgZHdfQWRkcmVzcywgICAgICAgICAgICAgICAgICAgICAgfAorCit8CQkJCQkgICBEV09SRCBkd19SZWdpc3RlclZhbHVlKSAgICAgICAgICAgICAgICAgCQkJICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBjbG9ja2luZyBzZXF1ZW5jZSB0byB0aGUgRUVQUk9NLiAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBEV09SRCBkd19BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICB8CisKK3wJCSAgICAgIERXT1JEIGR3X1JlZ2lzdGVyVmFsdWUgOiBQQ0kgZWVwcm9tIHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlLnwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKi8KKwordm9pZCB2X0VlcHJvbUNsb2NrNzYoRFdPUkQgZHdfQWRkcmVzcywgRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZSkKK3sKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNldCBFRVBST00gY2xvY2sgTG93ICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlvdXRsKGR3X1JlZ2lzdGVyVmFsdWUgJiAweDYsIGR3X0FkZHJlc3MpOworCisgICAvKioqKioqKioqKioqKioqLworCisJLyogV2FpdCAwLjEgbXMgKi8KKworICAgLyoqKioqKioqKioqKioqKi8KKworCXVkZWxheSgxMDApOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNldCBFRVBST00gY2xvY2sgSGlnaCAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCW91dGwoZHdfUmVnaXN0ZXJWYWx1ZSB8IDB4MSwgZHdfQWRkcmVzcyk7CisKKyAgIC8qKioqKioqKioqKioqKiovCisKKwkvKiBXYWl0IDAuMSBtcyAqLworCisgICAvKioqKioqKioqKioqKioqLworCisJdWRlbGF5KDEwMCk7CisKK30KKworLyoKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHZvaWQgdl9FZXByb21TZW5kQ29tbWFuZDc2KERXT1JEIGR3X0FkZHJlc3MsICAgICAgICAgICAgICAgIHwKKworfAkJCQkJICAgRFdPUkQgICBkd19FZXByb21Db21tYW5kLCAgICAgICAgICAgICAgICAJCSAgfAorCit8CQkJCQkgICBCWVRFICAgIGJfRGF0YUxlbmd0aEluQml0cykgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgQ29tbWFuZCB0byB0aGUgRUVQUk9NIDkzQzc2LiAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBEV09SRCBkd19BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICB8CisKK3wJCSAgICAgIERXT1JEIGR3X0VlcHJvbUNvbW1hbmQgOiBQQ0kgZWVwcm9tIGNvbW1hbmQgdG8gd3JpdGUuICAgICAgIHwKKworfAkJICAgICAgQllURSAgYl9EYXRhTGVuZ3RoSW5CaXRzIDogUENJIGVlcHJvbSBjb21tYW5kIGRhdGEgbGVuZ3RoLiAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisqLworCit2b2lkIHZfRWVwcm9tU2VuZENvbW1hbmQ3NihEV09SRCBkd19BZGRyZXNzLCBEV09SRCBkd19FZXByb21Db21tYW5kLAorCUJZVEUgYl9EYXRhTGVuZ3RoSW5CaXRzKQoreworCisJY2hhciBjX0JpdFBvcyA9IDA7CisKKwlEV09SRCBkd19SZWdpc3RlclZhbHVlID0gMDsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogRW5hYmxlIEVFUFJPTSBDaGlwIFNlbGVjdCAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkd19SZWdpc3RlclZhbHVlID0gMHgyOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBUb2dnbGUgRUVQUk9NJ3MgQ2hpcCBzZWxlY3QgdG8gZ2V0IGl0IG91dCBvZiBTaGlmdCBSZWdpc3RlciBNb2RlICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCW91dGwoZHdfUmVnaXN0ZXJWYWx1ZSwgZHdfQWRkcmVzcyk7CisKKyAgIC8qKioqKioqKioqKioqKiovCisKKwkvKiBXYWl0IDAuMSBtcyAqLworCisgICAvKioqKioqKioqKioqKioqLworCisJdWRlbGF5KDEwMCk7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogU2VuZCBFRVBST00gY29tbWFuZCAtIG9uZSBiaXQgYXQgYSB0aW1lICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZm9yIChjX0JpdFBvcyA9IChiX0RhdGFMZW5ndGhJbkJpdHMgLSAxKTsgY19CaXRQb3MgPj0gMDsgY19CaXRQb3MtLSkKKwl7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIENoZWNrIGlmIGN1cnJlbnQgYml0IGlzIDAgb3IgMSAqLworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZHdfRWVwcm9tQ29tbWFuZCAmICgxIDw8IGNfQml0UG9zKSkKKwkJeworCisJIC8qKioqKioqKioqKi8KKworCQkJLyogV3JpdGUgMSAqLworCisJIC8qKioqKioqKioqKi8KKworCQkJZHdfUmVnaXN0ZXJWYWx1ZSA9IGR3X1JlZ2lzdGVyVmFsdWUgfCAweDQ7CisKKwkJfQorCisJCWVsc2UKKwkJeworCisJIC8qKioqKioqKioqKi8KKworCQkJLyogV3JpdGUgMCAqLworCisJIC8qKioqKioqKioqKi8KKworCQkJZHdfUmVnaXN0ZXJWYWx1ZSA9IGR3X1JlZ2lzdGVyVmFsdWUgJiAweDM7CisKKwkJfQorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIFdyaXRlIHRoZSBjb21tYW5kICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJb3V0bChkd19SZWdpc3RlclZhbHVlLCBkd19BZGRyZXNzKTsKKworICAgICAgLyoqKioqKioqKioqKioqKi8KKworCQkvKiBXYWl0IDAuMSBtcyAqLworCisgICAgICAvKioqKioqKioqKioqKioqLworCisJCXVkZWxheSgxMDApOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBUcmlnZ2VyIHRoZSBFRVBST00gY2xvY2sgKi8KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdl9FZXByb21DbG9jazc2KGR3X0FkZHJlc3MsIGR3X1JlZ2lzdGVyVmFsdWUpOworCisJfQorCit9CisKKy8qCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgRnVuY3Rpb24gICBOYW1lICAgOiB2b2lkIHZfRWVwcm9tQ3M3NlJlYWQoRFdPUkQgZHdfQWRkcmVzcywgICAgICAgICAgICAgICAgICAgICB8CisKK3wJCQkJCSAgIFdPUkQgICAgd19vZmZzZXQsICAgICAgICAgICAgICAgICAgICAgIAkJCSAgfAorCit8CQkJCQkgICBQV09SRCAgIHB3X1ZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAJCQkgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBUYXNrICAgICAgICAgICAgICA6IFRoaXMgZnVuY3Rpb24gcmVhZCBhIHZhbHVlIGZyb20gdGhlIEVFUFJPTSA5M0M3Ni4gICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IERXT1JEIGR3X0FkZHJlc3MgOiBQQ0kgZWVwcm9tIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgIHwKKworfAkJICAgICAgV09SRCAgICB3X29mZnNldCA6IE9mZnNldCBvZiB0aGUgYWRyZXNzIHRvIHJlYWQgICAgICAgICAgICAgfAorCit8CQkgICAgICBQV09SRCAgIHB3X1ZhbHVlIDogUENJIGVlcHJvbSAxNiBiaXQgcmVhZCB2YWx1ZS4gICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyovCisKK3ZvaWQgdl9FZXByb21Dczc2UmVhZChEV09SRCBkd19BZGRyZXNzLCBXT1JEIHdfb2Zmc2V0LCBQV09SRCBwd19WYWx1ZSkKK3sKKworICAgICAgICBjaGFyIGNfQml0UG9zID0gMDsKKworCURXT1JEIGR3X1JlZ2lzdGVyVmFsdWUgPSAwOworCisJRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZVJlYWQgPSAwOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNlbmQgRUVQUk9NIHJlYWQgY29tbWFuZCBhbmQgb2Zmc2V0IHRvIEVFUFJPTSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXZfRWVwcm9tU2VuZENvbW1hbmQ3Nihkd19BZGRyZXNzLCAoRUVfUkVBRCA8PCA0KSB8ICh3X29mZnNldCAvIDIpLAorCQlFRTc2X0NNRF9MRU4pOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIEdldCB0aGUgbGFzdCByZWdpc3RlciB2YWx1ZSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWR3X1JlZ2lzdGVyVmFsdWUgPSAoKCh3X29mZnNldCAvIDIpICYgMHgxKSA8PCAyKSB8IDB4MjsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogU2V0IHRoZSAxNi1iaXQgdmFsdWUgb2YgMCAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkqcHdfVmFsdWUgPSAwOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogR2V0IHRoZSAxNi1iaXQgdmFsdWUgKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWZvciAoY19CaXRQb3MgPSAwOyBjX0JpdFBvcyA8IDE2OyBjX0JpdFBvcysrKQorCXsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogVHJpZ2dlciB0aGUgRUVQUk9NIGNsb2NrICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCXZfRWVwcm9tQ2xvY2s3Nihkd19BZGRyZXNzLCBkd19SZWdpc3RlclZhbHVlKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogR2V0IHRoZSByZXN1bHQgYml0ICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCWR3X1JlZ2lzdGVyVmFsdWVSZWFkID0gaW5sKGR3X0FkZHJlc3MpOworCisgICAgICAvKioqKioqKioqKioqKioqLworCisJCS8qIFdhaXQgMC4xIG1zICovCisKKyAgICAgIC8qKioqKioqKioqKioqKiovCisKKwkJdWRlbGF5KDEwMCk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogR2V0IGJpdCB2YWx1ZSBhbmQgc2hpZnQgaW50byByZXN1bHQgKi8KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZHdfUmVnaXN0ZXJWYWx1ZVJlYWQgJiAweDgpCisJCXsKKworCSAvKioqKioqKioqKi8KKworCQkJLyogUmVhZCAxICovCisKKwkgLyoqKioqKioqKiovCisKKwkJCSpwd19WYWx1ZSA9ICgqcHdfVmFsdWUgPDwgMSkgfCAweDE7CisKKwkJfQorCisJCWVsc2UKKwkJeworCisJIC8qKioqKioqKioqLworCisJCQkvKiBSZWFkIDAgKi8KKworCSAvKioqKioqKioqKi8KKworCQkJKnB3X1ZhbHVlID0gKCpwd19WYWx1ZSA8PCAxKTsKKworCQl9CisKKwl9CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogQ2xlYXIgYWxsIEVFUFJPTSBiaXRzICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZHdfUmVnaXN0ZXJWYWx1ZSA9IDB4MDsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogVG9nZ2xlIEVFUFJPTSdzIENoaXAgc2VsZWN0IHRvIGdldCBpdCBvdXQgb2YgU2hpZnQgUmVnaXN0ZXIgTW9kZSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlvdXRsKGR3X1JlZ2lzdGVyVmFsdWUsIGR3X0FkZHJlc3MpOworCisgICAvKioqKioqKioqKioqKioqLworCisJLyogV2FpdCAwLjEgbXMgKi8KKworICAgLyoqKioqKioqKioqKioqKi8KKworCXVkZWxheSgxMDApOworCit9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qICAgICAgRUVQUk9NIEhFQURFUiBSRUFEIEZVTkNUSU9OUyAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWRNYWluSGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICB8Cit8CQkJCWNoYXIgKglwY19QQ0lDaGlwSW5mb3JtYXRpb24sc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBmcm9tIGVlcHJvbSBNYWluIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBQQ0kgZWVwcm9tIGFkZHJlc3MgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uICA6IFBDSSBDaGlwIFR5cGUuICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkJICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkgICA6IGNvbWVkaSBkZXZpY2Ugc3RydWN0dXJlIHwKK3wJCQkJCQkJCQkJCSBwb2ludGVyCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfRWVwcm9tUmVhZE1haW5IZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJV09SRCB3X1RlbXAsIGksIHdfQ291bnQgPSAwOworCVVJTlQgdWlfVGVtcDsKKwlzdHJfTWFpbkhlYWRlciBzX01haW5IZWFkZXI7CisJc3RyX0RpZ2l0YWxJbnB1dEhlYWRlciBzX0RpZ2l0YWxJbnB1dEhlYWRlcjsKKwlzdHJfRGlnaXRhbE91dHB1dEhlYWRlciBzX0RpZ2l0YWxPdXRwdXRIZWFkZXI7CisJLy9zdHJfVGltZXJNYWluSGVhZGVyICAgICBzX1RpbWVyTWFpbkhlYWRlcixzX1dhdGNoZG9nTWFpbkhlYWRlcjsKKwlzdHJfQW5hbG9nT3V0cHV0SGVhZGVyIHNfQW5hbG9nT3V0cHV0SGVhZGVyOworCXN0cl9BbmFsb2dJbnB1dEhlYWRlciBzX0FuYWxvZ0lucHV0SGVhZGVyOworCisJLy8gUmVhZCBzaXplCisJc19NYWluSGVhZGVyLndfSGVhZGVyU2l6ZSA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyA4KTsKKworCS8vIFJlYWQgbmJyIG9mIGZ1bmN0aW9uYWxpdHkKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgMTApOworCXNfTWFpbkhlYWRlci5iX05mdW5jdGlvbnMgPSAoQllURSkgd19UZW1wICYgMHgwMEZGOworCisJLy8gUmVhZCBmdW5jdGlvbmFsaXR5IGRldGFpbHMKKwlmb3IgKGkgPSAwOyBpIDwgc19NYWluSGVhZGVyLmJfTmZ1bmN0aW9uczsgaSsrKSB7CisJCS8vIFJlYWQgVHlwZQorCQl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIDEyICsgd19Db3VudCk7CisJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS5iX1R5cGUgPSAoQllURSkgd19UZW1wICYgMHgzRjsKKwkJd19Db3VudCA9IHdfQ291bnQgKyAyOworCQkvL1JlYWQgQWRkcmVzcworCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzID0KKwkJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgMTIgKyB3X0NvdW50KTsKKwkJd19Db3VudCA9IHdfQ291bnQgKyAyOworCX0KKworCS8vIERpc3BsYXkgbWFpbiBoZWFkZXIgaW5mbworCWZvciAoaSA9IDA7IGkgPCBzX01haW5IZWFkZXIuYl9OZnVuY3Rpb25zOyBpKyspIHsKKworCQlzd2l0Y2ggKHNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS5iX1R5cGUpIHsKKwkJY2FzZSBFRVBST01fRElHSVRBTElOUFVUOgorCQkJaV9FZXByb21SZWFkRGlnaXRhbElucHV0SGVhZGVyKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzLAorCQkJCSZzX0RpZ2l0YWxJbnB1dEhlYWRlcik7CisJCQl0aGlzX2JvYXJkLT5pX05ickRpQ2hhbm5lbCA9CisJCQkJc19EaWdpdGFsSW5wdXRIZWFkZXIud19OY2hhbm5lbDsKKwkJCWJyZWFrOworCisJCWNhc2UgRUVQUk9NX0RJR0lUQUxPVVRQVVQ6CisJCQlpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzLAorCQkJCSZzX0RpZ2l0YWxPdXRwdXRIZWFkZXIpOworCQkJdGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWwgPQorCQkJCXNfRGlnaXRhbE91dHB1dEhlYWRlci53X05jaGFubmVsOworCQkJdWlfVGVtcCA9IDB4ZmZmZmZmZmY7CisJCQl0aGlzX2JvYXJkLT5pX0RvTWF4ZGF0YSA9CisJCQkJdWlfVGVtcCA+PiAoMzIgLSB0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbCk7CisJCQlicmVhazsKKworCQljYXNlIEVFUFJPTV9BTkFMT0dJTlBVVDoKKwkJCWlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS53X0FkZHJlc3MsCisJCQkJJnNfQW5hbG9nSW5wdXRIZWFkZXIpOworCQkJaWYgKCEoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzIwMCIpKSkKKwkJCQl0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCA9CisJCQkJCXNfQW5hbG9nSW5wdXRIZWFkZXIud19OY2hhbm5lbCAqIDQ7CisJCQllbHNlCisJCQkJdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWwgPQorCQkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLndfTmNoYW5uZWw7CisJCQl0aGlzX2JvYXJkLT5pX0RtYSA9IHNfQW5hbG9nSW5wdXRIZWFkZXIuYl9IYXNEbWE7CisJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcyA9CisJCQkJKFVJTlQpIHNfQW5hbG9nSW5wdXRIZWFkZXIud19NaW5Db252ZXJ0VGltaW5nICoKKwkJCQkxMDAwOworCQkJdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnMgPQorCQkJCShVSU5UKSBzX0FuYWxvZ0lucHV0SGVhZGVyLndfTWluRGVsYXlUaW1pbmcgKgorCQkJCTEwMDA7CisJCQl1aV9UZW1wID0gMHhmZmZmOworCQkJdGhpc19ib2FyZC0+aV9BaU1heGRhdGEgPQorCQkJCXVpX1RlbXAgPj4gKDE2IC0KKwkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLmJfUmVzb2x1dGlvbik7CisJCQlicmVhazsKKworCQljYXNlIEVFUFJPTV9BTkFMT0dPVVRQVVQ6CisJCQlpX0VlcHJvbVJlYWRBbmxvZ091dHB1dEhlYWRlcih3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkJc19NYWluSGVhZGVyLnNfRnVuY3Rpb25zW2ldLndfQWRkcmVzcywKKwkJCQkmc19BbmFsb2dPdXRwdXRIZWFkZXIpOworCQkJdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWwgPQorCQkJCXNfQW5hbG9nT3V0cHV0SGVhZGVyLndfTmNoYW5uZWw7CisJCQl1aV9UZW1wID0gMHhmZmZmOworCQkJdGhpc19ib2FyZC0+aV9Bb01heGRhdGEgPQorCQkJCXVpX1RlbXAgPj4gKDE2IC0KKwkJCQlzX0FuYWxvZ091dHB1dEhlYWRlci5iX1Jlc29sdXRpb24pOworCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fVElNRVI6CisJCQl0aGlzX2JvYXJkLT5pX1RpbWVyID0gMTsJLy9UaW1lciBzdWJkZXZpY2UgcHJlc2VudAorCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fV0FUQ0hET0c6CisJCQl0aGlzX2JvYXJkLT5pX1RpbWVyID0gMTsJLy9UaW1lciBzdWJkZXZpY2UgcHJlc2VudAorCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fVElNRVJfV0FUQ0hET0dfQ09VTlRFUjoKKwkJCXRoaXNfYm9hcmQtPmlfVGltZXIgPSAxOwkvL1RpbWVyIHN1YmRldmljZSBwcmVzZW50CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWREaWdpdGFsSW5wdXRIZWFkZXIoV09SRCAJCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAkgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKnNfSGVhZGVyKQkJIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIERpZ2l0YWwgSW5wdXQgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCQkgc3RyX0RpZ2l0YWxJbnB1dEhlYWRlciAqc19IZWFkZXI6IERpZ2l0YSBJbnB1dCBIZWFkZXIgICB8Cit8CQkJCQkJCQkJCQkJICAgUG9pbnRlcgkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsSW5wdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKiBzX0hlYWRlcikKK3sKKwlXT1JEIHdfVGVtcDsKKworCS8vIHJlYWQgbmJyIG9mIGNoYW5uZWxzCisJc19IZWFkZXItPndfTmNoYW5uZWwgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgd19BZGRyZXNzICsgNik7CisKKwkvLyBpbnRlcnJ1cHRpYmxlIG9yIG5vdAorCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyB3X0FkZHJlc3MgKyA4KTsKKwlzX0hlYWRlci0+Yl9JbnRlcnJ1cHRpYmxlID0gKEJZVEUpICh3X1RlbXAgPj4gNykgJiAweDAxOworCisvLyBIb3cgbWFueSBpbnRlcnJ1cHRpYmxlIGxvZ2ljCisJc19IZWFkZXItPndfTmludGVycnVwdExvZ2ljID0KKwkJd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkweDEwMCArIHdfQWRkcmVzcyArIDEwKTsKKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgIDogSU5UIGlfRWVwcm9tUmVhZERpZ2l0YWxPdXRwdXRIZWFkZXIoV09SRCAJCQkJIHwKK3wJCQl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyxjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sCSB8Cit8CQkJV09SRCB3X0FkZHJlc3Msc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKQkgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIERpZ2l0YWwgT3V0cHV0IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCQkgc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgKnNfSGVhZGVyOiBEaWdpdGFsIE91dHB1dCBIZWFkZXJ8Cit8CQkJCQkJCQkJCQkgICBQb2ludGVyCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfRGlnaXRhbE91dHB1dEhlYWRlciAqIHNfSGVhZGVyKQoreworLy8gUmVhZCBOYnIgY2hhbm5lbHMKKwlzX0hlYWRlci0+d19OY2hhbm5lbCA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyB3X0FkZHJlc3MgKyA2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWRUaW1lckhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB8Cit8CQkJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLFdPUkQgd19BZGRyZXNzLAkJCQkgfAorfAkJCXN0cl9UaW1lck1haW5IZWFkZXIgKnNfSGVhZGVyKQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaW1lciBvciBXYXRjaGRvZyBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBQQ0kgZWVwcm9tIGFkZHJlc3MgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uICA6IFBDSSBDaGlwIFR5cGUuICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkJIHN0cl9UaW1lck1haW5IZWFkZXIgKnNfSGVhZGVyOiBUaW1lciBIZWFkZXIJCQkgfAorfAkJCQkJCQkJCQkJICAgUG9pbnRlcgkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9FZXByb21SZWFkVGltZXJIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9UaW1lck1haW5IZWFkZXIgKiBzX0hlYWRlcikKK3sKKworCVdPUkQgaSwgd19TaXplID0gMCwgd19UZW1wOworCisvL1JlYWQgTm8gb2YgVGltZXIKKwlzX0hlYWRlci0+d19OdGltZXIgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgd19BZGRyZXNzICsgNik7CisvL1JlYWQgaGVhZGVyIHNpemUKKworCWZvciAoaSA9IDA7IGkgPCBzX0hlYWRlci0+d19OdGltZXI7IGkrKykgeworCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0ud19IZWFkZXJTaXplID0KKwkJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkweDEwMCArIHdfQWRkcmVzcyArIDggKyB3X1NpemUgKyAwKTsKKwkJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCTB4MTAwICsgd19BZGRyZXNzICsgOCArIHdfU2l6ZSArIDIpOworCisJCS8vUmVhZCBSZXNvbHV0aW9uCisJCXNfSGVhZGVyLT5zX1RpbWVyRGV0YWlsc1tpXS5iX1Jlc29sdXRpb24gPQorCQkJKEJZVEUpICh3X1RlbXAgPj4gMTApICYgMHgzRjsKKworCQkvL1JlYWQgTW9kZQorCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0uYl9Nb2RlID0KKwkJCShCWVRFKSAod19UZW1wID4+IDQpICYgMHgzRjsKKworCQl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkJMHgxMDAgKyB3X0FkZHJlc3MgKyA4ICsgd19TaXplICsgNCk7CisKKwkJLy9SZWFkIE1pblRpbWluZworCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0ud19NaW5UaW1pbmcgPSAod19UZW1wID4+IDYpICYgMHgzRkY7CisKKwkJLy9SZWFkIFRpbWViYXNlCisJCXNfSGVhZGVyLT5zX1RpbWVyRGV0YWlsc1tpXS5iX1RpbWVCYXNlID0gKEJZVEUpICh3X1RlbXApICYgMHgzRjsKKwkJd19TaXplICs9IHNfSGVhZGVyLT5zX1RpbWVyRGV0YWlsc1tpXS53X0hlYWRlclNpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgOiBJTlQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIoV09SRCAJCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAkgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgTmFsb2cgT3V0cHV0ICBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJCSBzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICpzX0hlYWRlcjpBbmxvZyBPdXRwdXQgSGVhZGVyICAgIHwKK3wJCQkJCQkJCQkJCSAgIFBvaW50ZXIJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKiBzX0hlYWRlcikKK3sKKwlXT1JEIHdfVGVtcDsKKwkvLyBObyBvZiBjaGFubmVscyBmb3IgMXN0IGhhcmQgY29tcG9uZW50CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDEwKTsKKwlzX0hlYWRlci0+d19OY2hhbm5lbCA9ICh3X1RlbXAgPj4gNCkgJiAweDAzRkY7CisJLy8gUmVzb2x1dGlvbiBmb3IgMXN0IGhhcmQgY29tcG9uZW50CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDE2KTsKKwlzX0hlYWRlci0+Yl9SZXNvbHV0aW9uID0gKEJZVEUpICh3X1RlbXAgPj4gOCkgJiAweEZGOworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgIDogSU5UIGlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIoV09SRCAJCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAgICAgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9BbmFsb2dJbnB1dEhlYWRlciAqc19IZWFkZXIpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgTmFsb2cgT3V0cHV0ICBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJCSBzdHJfQW5hbG9nSW5wdXRIZWFkZXIgKnNfSGVhZGVyOkFubG9nIElucHV0IEhlYWRlciAgICAgIHwKK3wJCQkJCQkJCQkJCSAgIFBvaW50ZXIJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvLyBSZWFkcyBvbmx5IGZvciBPTkUgIGhhcmR3YXJlIGNvbXBvbmVudAorSU5UIGlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9BbmFsb2dJbnB1dEhlYWRlciAqIHNfSGVhZGVyKQoreworCVdPUkQgd19UZW1wLCB3X09mZnNldDsKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgd19BZGRyZXNzICsgMTApOworCXNfSGVhZGVyLT53X05jaGFubmVsID0gKHdfVGVtcCA+PiA0KSAmIDB4MDNGRjsKKwlzX0hlYWRlci0+d19NaW5Db252ZXJ0VGltaW5nID0KKwkJd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkweDEwMCArIHdfQWRkcmVzcyArIDE2KTsKKwlzX0hlYWRlci0+d19NaW5EZWxheVRpbWluZyA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyB3X0FkZHJlc3MgKyAzMCk7CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDIwKTsKKwlzX0hlYWRlci0+Yl9IYXNEbWEgPSAod19UZW1wID4+IDEzKSAmIDB4MDE7CS8vIHdoZXRoZXIgZG1hIHByZXNlbnQgb3Igbm90CisKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgd19BZGRyZXNzICsgNzIpOwkvLyByZWFkaW5nIFkKKwl3X1RlbXAgPSB3X1RlbXAgJiAweDAwRkY7CisJaWYgKHdfVGVtcCkJCS8vWT4wCisJeworCQl3X09mZnNldCA9IDc0ICsgKDIgKiB3X1RlbXApICsgKDEwICogKDEgKyAod19UZW1wIC8gMTYpKSk7CS8vIG9mZnNldCBvZiBmaXJzdCBhbmFsb2cgaW5wdXQgc2luZ2xlIGhlYWRlcgorCQl3X09mZnNldCA9IHdfT2Zmc2V0ICsgMjsJLy8gcmVzb2x1dGlvbgorCX0gZWxzZQkJCS8vWT0wCisJeworCQl3X09mZnNldCA9IDc0OworCQl3X09mZnNldCA9IHdfT2Zmc2V0ICsgMjsJLy8gcmVzb2x1dGlvbgorCX0KKworLy8gcmVhZCBSZXNvbHV0aW9uCisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIHdfT2Zmc2V0KTsKKwlzX0hlYWRlci0+Yl9SZXNvbHV0aW9uID0gd19UZW1wICYgMHgwMDFGOwkvLyBsYXN0IDUgYml0cworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FtY2NfczU5MzNfNTguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYW1jY19zNTkzM181OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxN2RjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FtY2NfczU5MzNfNTguaApAQCAtMCwwICsxLDQ1NyBAQAorLyoKKwlNb2RpZmllZCBieSB1bWVzaCBvbiAxNnRoIG1heSAyMDAxCisJTW9kaWZpZWQgYnkgc2FyYXRoIG9uIDIybmQgbWF5IDIwMDEKKyovCisKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzM192XzU4LmgKKworICAgIFN0dWZmIGZvciBBTUNDIFM1OTMzIFBDSSBDb250cm9sbGVyCisKKyAgICBBdXRob3I6IE1pY2hhbCBEb2JlcyA8bWFqa2xAdGVzbmV0LmN6PgorCisgICAgSW5zcGlyYXRlZCBmcm9tIGdlbmVyYWwtcHVycG9zZSBBTUNDIFM1OTMzIFBDSSBNYXRjaG1ha2VyIGRyaXZlcgorICAgIG1hZGUgYnkgQW5kcmVhIENpc3Rlcm5pbm8gIDxhY2lzdGVyQHBjYXBlMS5waS5pbmZuLml0PgorICAgIGFuZCBhcyByZXN1bHQgb2YgZXNwaW9uYWdlIGZyb20gTUlURSBjb2RlIG1hZGUgYnkgRGF2aWQgQS4gU2NobGVlZi4KKyAgICBUaGFua3MgdG8gQU1DQyBmb3IgdGhlaXIgb24tbGluZSBkb2N1bWVudGF0aW9uIGFuZCBidXMgbWFzdGVyIERNQQorICAgIGV4YW1wbGUuCisqLworCisjaWZuZGVmIF9BTUNDX1M1OTMzX0hfCisjZGVmaW5lIF9BTUNDX1M1OTMzX0hfCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICIuLi8uLi9jb21lZGlkZXYuaCIKKworI2lmZGVmIFBDSV9TVVBQT1JUX1ZFUjEKKyNlcnJvciAgICBTb3JyeSwgbm8gc3VwcG9ydCBmb3IgMi4xLjU1IGFuZCBvbGRlciEgOi0oKCgoCisjZW5kaWYKKworLyoqKioqKioqKioqQWRkZWQgYnkgc2FyYXRoIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQVBDSTMxMjAKKworKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBGSUZPX0FEVkFOQ0VfT05fQllURV8yICAgICAweDIwMDAwMDAwCS8vIHdyaXR0ZW4gb24gYmFzZTAKKworI2RlZmluZSBBTVdFTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAweDAyCS8vIGFkZGVkIGZvciBzdGVwIDYgZG1hIHdyaXR0ZW4gb24gYmFzZTIKKyNkZWZpbmUgQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIEFHQ1NUU19UQ19FTkFCTEUJCSAgIDB4MTAwMDAwMDAJLy8gQWRkZWQgZm9yIHRyYW5zZmVyIGNvdW50IGVuYWJsZSBiaXQKKworLy8gIEFERE9OIFJFTEFURUQgQURESVRJT05TCisvLyBDb25zdGFudAorI2RlZmluZSAgICAgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9MT1cgICAgICAgMHgwMAorI2RlZmluZSAgICAgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdIICAgICAgMHgxMjAwCisjZGVmaW5lICAgICBBUENJMzEyMF9BMlBfRklGT19NQU5BR0VNRU5UICAgICAgICAgICAgICAweDA0MDAwNDAwTAorI2RlZmluZSAgICAgQVBDSTMxMjBfQU1XRU5fRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSAgICAgQVBDSTMxMjBfQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgQVBDSTMxMjBfRklGT19BRFZBTkNFX09OX0JZVEVfMiAgICAgICAgICAgMHgyMDAwMDAwMEwKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0VOQUJMRV9XUklURV9UQ19JTlQgICAgICAgICAgICAgIDB4MDAwMDQwMDBMCisjZGVmaW5lICAgICBBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSAgICAgQVBDSTMxMjBfRElTQUJMRV9BTVdFTl9BTkRfQTJQX0ZJRk9fV1JJVEUgMHgwCisjZGVmaW5lICAgICBBUENJMzEyMF9ESVNBQkxFX0JVU19NQVNURVJfQUREX09OICAgICAgICAweDAKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0RJU0FCTEVfQlVTX01BU1RFUl9QQ0kgICAgICAgICAgIDB4MAorCisgLy8gQUREX09OIDo6OiB0aGlzIG5lZWRlZCBzaW5jZSBhcGNpIHN1cHBvcnRzIDE2IGJpdCBpbnRlcmZhY2UgdG8gYWRkIG9uCisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVyAgICAgICAweDNDCisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fQUdDU1RTX0hJR0ggICAgICBBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVyArIDIKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVyAgICAgICAgIDB4MjQKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0ggICAgICAgIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVyArIDIKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVyAgICAgICAgIDB4MDU4CisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fTVdUQ19ISUdIICAgICAgICBBUENJMzEyMF9BRERfT05fTVdUQ19MT1cgKyAyCisKKy8vIEFNQ0MKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FNQ0NfT1BfTUNTUiAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FNQ0NfT1BfUkVHX0lOVENTUiAgICAgIDB4MzgKKworLyoqKioqKipmcm9tIGhlcmUgYWxsIHVwd2FyZCBkZWZpbml0aW9ucyBhcmUgYWRkZWQgYnkgc2FyYXRoICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAtIFBDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19PTUIxICAgICAgICAgMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIzICAgICAgICAgMHgwOAorI2RlZmluZSBBTUNDX09QX1JFR19PTUI0ICAgICAgICAgMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19JTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIyICAgICAgICAgMHgxNAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIzICAgICAgICAgMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19JTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19GSUZPICAgICAgICAgMHgyMAorI2RlZmluZSBBTUNDX09QX1JFR19NV0FSICAgICAgICAgMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19NV1RDICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19NUkFSICAgICAgICAgMHgyYworI2RlZmluZSBBTUNDX09QX1JFR19NUlRDICAgICAgICAgMHgzMAorI2RlZmluZSBBTUNDX09QX1JFR19NQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19JTlRDU1IgICAgICAgMHgzOAorI2RlZmluZSAgQU1DQ19PUF9SRUdfSU5UQ1NSX1NSQyAgKEFNQ0NfT1BfUkVHX0lOVENTUiArIDIpCS8qIElOVCBzb3VyY2UgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX0lOVENTUl9GRUMgIChBTUNDX09QX1JFR19JTlRDU1IgKyAzKQkvKiBGSUZPIGN0cmwgKi8KKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUiAgICAgICAgIDB4M2MKKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBIChBTUNDX09QX1JFR19NQ1NSICsgMikJLyogRGF0YSBpbiBieXRlIDIgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZDTUQgIChBTUNDX09QX1JFR19NQ1NSICsgMykJLyogQ29tbWFuZCBpbiBieXRlIDMgKi8KKworI2RlZmluZSBBTUNDX0ZJRk9fREVQVEhfRFdPUkQJOAorI2RlZmluZSBBTUNDX0ZJRk9fREVQVEhfQllURVMJKDggKiBzaXplb2YgKHUzMikpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXJzIFNpemUgLSBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19TSVpFCSA2NAkvKiBpbiBieXRlcyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVyIE9mZnNldHMgLSBBZGQtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjEgICAgICAgICAweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMyAgICAgICAgIDB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjQgICAgICAgICAweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CMiAgICAgICAgIDB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjMgICAgICAgICAweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19BRklGTyAgICAgICAgIDB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XQVIgICAgICAgICAweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FQVEEgICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19BUFREICAgICAgICAgIDB4MmMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SQVIgICAgICAgICAweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU5UICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUdDU1RTICAgICAgICAweDNjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV1RDICAgICAgICAgMHg1OAorI2RlZmluZSBBTUNDX09QX1JFR19BTVJUQyAgICAgICAgIDB4NWMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIC0gQWRkLW9uIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFHQ1NUU19DT05UUk9MX01BU0sJMHhmZmZmZjAwMAorI2RlZmluZSAgQUdDU1RTX05WX0FDQ19NQVNLCTB4ZTAwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19SRVNFVF9NQVNLCTB4MGUwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9EQV9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgIEFHQ1NUU19CSVNUX01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSBBR0NTVFNfU1RBVFVTX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSAgQUdDU1RTX1RDWkVST19NQVNLCTB4MDAwMDAwYzAKKyNkZWZpbmUgIEFHQ1NUU19GSUZPX1NUX01BU0sJMHgwMDAwMDAzZgorCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9NQkZMQUdTCTB4MDgwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX1AyQV9GSUZPCTB4MDQwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0EyUF9GSUZPCTB4MDIwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0ZJRk9TCShBR0NTVFNfUkVTRVRfQTJQX0ZJRk8gfCBBR0NTVFNfUkVTRVRfUDJBX0ZJRk8pCisKKyNkZWZpbmUgQUdDU1RTX0EyUF9UQ09VTlQJMHgwMDAwMDA4MAorI2RlZmluZSBBR0NTVFNfUDJBX1RDT1VOVAkweDAwMDAwMDQwCisKKyNkZWZpbmUgQUdDU1RTX0ZTX1AyQV9FTVBUWQkweDAwMDAwMDIwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfSEFMRgkweDAwMDAwMDEwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRlVMTAkweDAwMDAwMDA4CisKKyNkZWZpbmUgQUdDU1RTX0ZTX0EyUF9FTVBUWQkweDAwMDAwMDA0CisjZGVmaW5lIEFHQ1NUU19GU19BMlBfSEFMRgkweDAwMDAwMDAyCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRlVMTAkweDAwMDAwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIEFkZC1vbiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFJTlRfSU5UX01BU0sJCTB4MDBmZjAwMDAKKyNkZWZpbmUgQUlOVF9TRUxfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSAgQUlOVF9JU19FTlNFTF9NQVNLCTB4MDAwMDFmMWYKKworI2RlZmluZSBBSU5UX0lOVF9BU1NFUlRFRAkweDAwODAwMDAwCisjZGVmaW5lIEFJTlRfQk1fRVJST1IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgQUlOVF9CSVNUX0lOVAkJMHgwMDEwMDAwMAorCisjZGVmaW5lIEFJTlRfUlRfQ09NUExFVEUJMHgwMDA4MDAwMAorI2RlZmluZSBBSU5UX1dUX0NPTVBMRVRFCTB4MDAwNDAwMDAKKworI2RlZmluZSBBSU5UX09VVF9NQl9JTlQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQUlOVF9JTl9NQl9JTlQJCTB4MDAwMTAwMDAKKworI2RlZmluZSBBSU5UX1JFQURfQ09NUEwJCTB4MDAwMDgwMDAKKyNkZWZpbmUgQUlOVF9XUklURV9DT01QTAkweDAwMDA0MDAwCisKKyNkZWZpbmUgQUlOVF9PTUJfRU5BQkxFIAkweDAwMDAxMDAwCisjZGVmaW5lIEFJTlRfT01CX1NFTEVDVCAJMHgwMDAwMGMwMAorI2RlZmluZSBBSU5UX09NQl9CWVRFCQkweDAwMDAwMzAwCisKKyNkZWZpbmUgQUlOVF9JTUJfRU5BQkxFIAkweDAwMDAwMDEwCisjZGVmaW5lIEFJTlRfSU1CX1NFTEVDVCAJMHgwMDAwMDAwYworI2RlZmluZSBBSU5UX0lNQl9CWVRFCQkweDAwMDAwMDAzCisKKy8qIEVuYWJsZSBCdXMgTWFzdGVyaW5nICovCisjZGVmaW5lIEVOX0EyUF9UUkFOU0ZFUlMJMHgwMDAwMDQwMAorLyogRklGTyBGbGFnIFJlc2V0ICovCisjZGVmaW5lIFJFU0VUX0EyUF9GTEFHUwkJMHgwNDAwMDAwMEwKKy8qIEZJRk8gUmVsYXRpdmUgUHJpb3JpdHkgKi8KKyNkZWZpbmUgQTJQX0hJX1BSSU9SSVRZCQkweDAwMDAwMTAwTAorLyogSWRlbnRpZnkgSW50ZXJydXB0IFNvdXJjZXMgKi8KKyNkZWZpbmUgQU5ZX1M1OTNYX0lOVAkJMHgwMDgwMDAwMEwKKyNkZWZpbmUgUkVBRF9UQ19JTlQJCTB4MDAwODAwMDBMCisjZGVmaW5lIFdSSVRFX1RDX0lOVAkJMHgwMDA0MDAwMEwKKyNkZWZpbmUgSU5fTUJfSU5UCQkweDAwMDIwMDAwTAorI2RlZmluZSBNQVNURVJfQUJPUlRfSU5UCTB4MDAxMDAwMDBMCisjZGVmaW5lIFRBUkdFVF9BQk9SVF9JTlQJMHgwMDIwMDAwMEwKKyNkZWZpbmUgQlVTX01BU1RFUl9JTlQJCTB4MDAyMDAwMDBMCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCB7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKm5leHQ7CisJaW50IHVzZWQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQgZGV2aWNlOworCXVuc2lnbmVkIGludCBtYXN0ZXI7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzOworCXVuc2lnbmVkIGNoYXIgcGNpX3Nsb3Q7CisJdW5zaWduZWQgY2hhciBwY2lfZnVuYzsKKwl1bnNpZ25lZCBpbnQgaW9fYWRkcls1XTsKKwl1bnNpZ25lZCBpbnQgaXJxOworfTsKKworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2NfZGV2aWNlczsJLy8gcHRyIHRvIHJvb3QgbGlzdCBvZiBhbGwgYW1jYyBkZXZpY2VzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSk7Cit2b2lkIHZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IpOworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydAorCQkJCQkJICAgICAgIGRldmljZV9pZCk7CitpbnQgaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCSAgICAgc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKipjYXJkKTsKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX3Nsb3QpOworCitpbnQgaV9wY2lfY2FyZF9hbGxvYyhzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYyk7CitpbnQgaV9wY2lfY2FyZF9mcmVlKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjKTsKK3ZvaWQgdl9wY2lfY2FyZF9saXN0X2Rpc3BsYXkodm9pZCk7CitpbnQgaV9wY2lfY2FyZF9kYXRhKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2J1cywgdW5zaWduZWQgY2hhciAqcGNpX3Nsb3QsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfZnVuYywgdW5zaWduZWQgc2hvcnQgKmlvX2FkZHIsCisJCSAgICB1bnNpZ25lZCBzaG9ydCAqaXJxLCB1bnNpZ25lZCBzaG9ydCAqbWFzdGVyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGJ1aWxkIGxpc3Qgb2YgYW1jYyBjYXJkcyBpbiB0aGlzIHN5c3RlbSAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfaW5pdCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yLCBjaGFyIGRpc3BsYXkpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKmxhc3Q7CisJaW50IGk7CisKKwlhbWNjX2RldmljZXMgPSBOVUxMOworCWxhc3QgPSBOVUxMOworCisJcGNpX2Zvcl9lYWNoX2RldihwY2lkZXYpIHsKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IHBjaV92ZW5kb3IpIHsKKwkJCWFtY2MgPSBrbWFsbG9jKHNpemVvZigqYW1jYyksIEdGUF9LRVJORUwpOworCQkJbWVtc2V0KGFtY2MsIDAsIHNpemVvZigqYW1jYykpOworCisJCQlhbWNjLT5wY2lkZXYgPSBwY2lkZXY7CisJCQlpZiAobGFzdCkgeworCQkJCWxhc3QtPm5leHQgPSBhbWNjOworCQkJfSBlbHNlIHsKKwkJCQlhbWNjX2RldmljZXMgPSBhbWNjOworCQkJfQorCQkJbGFzdCA9IGFtY2M7CisKKwkJCWFtY2MtPnZlbmRvciA9IHBjaWRldi0+dmVuZG9yOworCQkJYW1jYy0+ZGV2aWNlID0gcGNpZGV2LT5kZXZpY2U7CisjaWYgMAorCQkJYW1jYy0+bWFzdGVyID0gcGNpZGV2LT5tYXN0ZXI7CS8vIGhvdyBnZXQgdGhpcyBpbmZvcm1hdGlvbiB1bmRlciAyLjQga2VybmVscz8KKyNlbmRpZgorCQkJYW1jYy0+cGNpX2J1cyA9IHBjaWRldi0+YnVzLT5udW1iZXI7CisJCQlhbWNjLT5wY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCQkJYW1jYy0+cGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQkJYW1jYy0+aW9fYWRkcltpXSA9CisJCQkJICAgIHBjaWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgJiB+M1VMOworCQkJYW1jYy0+aXJxID0gcGNpZGV2LT5pcnE7CisJCX0KKwl9CisKKwlpZiAoZGlzcGxheSkKKwkJdl9wY2lfY2FyZF9saXN0X2Rpc3BsYXkoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmcmVlIHVwIGxpc3Qgb2YgYW1jYyBjYXJkcyBpbiB0aGlzIHN5c3RlbSAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfY2xlYW51cCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCWtmcmVlKGFtY2MpOworCX0KKworCWFtY2NfZGV2aWNlcyA9IE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZmluZCBmaXJzdCB1bnVzZWQgY2FyZCB3aXRoIHRoaXMgZGV2aWNlX2lkICovCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlpZiAoKCFhbWNjLT51c2VkKSAmJiAoYW1jYy0+ZGV2aWNlID09IGRldmljZV9pZCkKKwkJICAgICYmIChhbWNjLT52ZW5kb3IgPT0gdmVuZG9yX2lkKSkKKwkJCXJldHVybiBhbWNjOworCisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZmluZCBjYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiAqLworaW50IGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCwKKwkJCQkgICAgIHN0cnVjdCBwY2lsc3Rfc3RydWN0ICoqY2FyZCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwkqY2FyZCA9IE5VTEw7CisJZm9yIChhbWNjID0gYW1jY19kZXZpY2VzOyBhbWNjOyBhbWNjID0gbmV4dCkgeworCQluZXh0ID0gYW1jYy0+bmV4dDsKKwkJaWYgKChhbWNjLT52ZW5kb3IgPT0gdmVuZG9yX2lkKSAmJiAoYW1jYy0+ZGV2aWNlID09IGRldmljZV9pZCkKKwkJICAgICYmIChhbWNjLT5wY2lfYnVzID09IHBjaV9idXMpCisJCSAgICAmJiAoYW1jYy0+cGNpX3Nsb3QgPT0gcGNpX3Nsb3QpKSB7CisJCQlpZiAoIShhbWNjLT51c2VkKSkgeworCQkJCSpjYXJkID0gYW1jYzsKKwkJCQlyZXR1cm4gMDsJLy8gb2ssIGNhcmQgaXMgZm91bmQKKwkJCX0gZWxzZSB7CisJCQkJcnRfcHJpbnRrCisJCQkJICAgICgiIC0gXG5DYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyB1c2VkIGI6cyAlZDolZCFcbiIsCisJCQkJICAgICBwY2lfYnVzLCBwY2lfc2xvdCk7CisJCQkJcmV0dXJuIDI7CS8vIGNhcmQgZXhpc3QgYnV0IGlzIHVzZWQKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAxOwkJLy8gbm8gY2FyZCBmb3VuZAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG1hcmsgY2FyZCBhcyB1c2VkICovCitpbnQgaV9wY2lfY2FyZF9hbGxvYyhzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYykKK3sKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmIChhbWNjLT51c2VkKQorCQlyZXR1cm4gMTsKKwlhbWNjLT51c2VkID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYXJrIGNhcmQgYXMgZnJlZSAqLworaW50IGlfcGNpX2NhcmRfZnJlZShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYykKK3sKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmICghYW1jYy0+dXNlZCkKKwkJcmV0dXJuIDE7CisJYW1jYy0+dXNlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGlzcGxheSBsaXN0IG9mIGZvdW5kIGNhcmRzICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9kaXNwbGF5KHZvaWQpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJcHJpbnRrKCJMaXN0IG9mIHBjaSBjYXJkc1xuIik7CisJcHJpbnRrKCJidXM6c2xvdDpmdW5jIHZlbmRvciBkZXZpY2UgbWFzdGVyIGlvX2FtY2MgaW9fZGFxIGlycSB1c2VkXG4iKTsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCXByaW50aworCQkgICAgKCIlMmQgICAlMmQgICAlMmQgIDB4JTR4IDB4JTR4ICAgJTNzICAgMHglNHggMHglNHggICUyZCAgJTJkXG4iLAorCQkgICAgIGFtY2MtPnBjaV9idXMsIGFtY2MtPnBjaV9zbG90LCBhbWNjLT5wY2lfZnVuYywKKwkJICAgICBhbWNjLT52ZW5kb3IsIGFtY2MtPmRldmljZSwgYW1jYy0+bWFzdGVyID8gInllcyIgOiAibm8iLAorCQkgICAgIGFtY2MtPmlvX2FkZHJbMF0sIGFtY2MtPmlvX2FkZHJbMl0sIGFtY2MtPmlycSwgYW1jYy0+dXNlZCk7CisKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogcmV0dXJuIGFsbCBjYXJkIGluZm9ybWF0aW9uIGZvciBkcml2ZXIgKi8KK2ludCBpX3BjaV9jYXJkX2RhdGEoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfYnVzLCB1bnNpZ25lZCBjaGFyICpwY2lfc2xvdCwKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnBjaV9mdW5jLCB1bnNpZ25lZCBzaG9ydCAqaW9fYWRkciwKKwkJICAgIHVuc2lnbmVkIHNob3J0ICppcnEsIHVuc2lnbmVkIHNob3J0ICptYXN0ZXIpCit7CisJaW50IGk7CisKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKwkqcGNpX2J1cyA9IGFtY2MtPnBjaV9idXM7CisJKnBjaV9zbG90ID0gYW1jYy0+cGNpX3Nsb3Q7CisJKnBjaV9mdW5jID0gYW1jYy0+cGNpX2Z1bmM7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJaW9fYWRkcltpXSA9IGFtY2MtPmlvX2FkZHJbaV07CisJKmlycSA9IGFtY2MtPmlycTsKKwkqbWFzdGVyID0gYW1jYy0+bWFzdGVyOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHNlbGVjdCBhbmQgYWxsb2MgY2FyZCAqLworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9zZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsKKworCWlmICgocGNpX2J1cyA8IDEpICYgKHBjaV9zbG90IDwgMSkpIHsJLy8gdXNlIGF1dG9kZXRlY3Rpb24KKwkJaWYgKChjYXJkID0gcHRyX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodmVuZG9yX2lkLAorCQkJCQkJCSAgICAgZGV2aWNlX2lkKSkgPT0KKwkJICAgIE5VTEwpIHsKKwkJCXJ0X3ByaW50aygiIC0gVW51c2VkIGNhcmQgbm90IGZvdW5kIGluIHN5c3RlbSFcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHZlbmRvcl9pZCwgZGV2aWNlX2lkLAorCQkJCQkJCSBwY2lfYnVzLCBwY2lfc2xvdCwKKwkJCQkJCQkgJmNhcmQpKSB7CisJCWNhc2UgMToKKwkJCXJ0X3ByaW50aworCQkJICAgICgiIC0gQ2FyZCBub3QgZm91bmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGI6cyAlZDolZCFcbiIsCisJCQkgICAgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQljYXNlIDI6CisJCQlydF9wcmludGsKKwkJCSAgICAoIiAtIENhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGlzIHVzZWQgYjpzICVkOiVkIVxuIiwKKwkJCSAgICAgcGNpX2J1cywgcGNpX3Nsb3QpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlpZiAoaV9wY2lfY2FyZF9hbGxvYyhjYXJkKSAhPSAwKSB7CisJCXJ0X3ByaW50aygiIC0gQ2FuJ3QgYWxsb2NhdGUgY2FyZCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2FyZDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4OTI5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuYwpAQCAtMCwwICsxLDEyNjUgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMTcxMCAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTE3MTAuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTE3MTAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfQVBDSTE3MTAuaCIKKyNpbmNsdWRlICJBUENJMTcxMF9JbnBfY3B0LmMiCisKKyNpbmNsdWRlICJBUENJMTcxMF9Tc2kuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9Ub3IuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9UdGwuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9EaWdfaW8uYyIKKyNpbmNsdWRlICJBUENJMTcxMF84Mng1NC5jIgorI2luY2x1ZGUgIkFQQ0kxNzEwX0Nocm9uby5jIgorI2luY2x1ZGUgIkFQQ0kxNzEwX1B3bS5jIgorI2luY2x1ZGUgIkFQQ0kxNzEwX0lOQ0NQVC5jIgorCit2b2lkIGlfQURESV9BdHRhY2hQQ0kxNzEwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQgPSAwOworCWludCBuX3N1YmRldmljZXMgPSA5OworCisJLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhkZXYtPm5fc3ViZGV2aWNlcyA9IDk7CisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQlyZXR1cm47CisKKwkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBUaW1lciBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEUgfCBTREZfUlQgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSAzOworCXMtPm1heGRhdGEgPSAwOworCXMtPmxlbl9jaGFubGlzdCA9IDM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXI7CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZEFsbFRpbWVyVmFsdWU7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VGltZXI7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgRElPIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9CisJCVNERl9XUklURUFCTEUgfCBTREZfUkVBREFCTEUgfCBTREZfUlQgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA3OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDc7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2NvbmZpZyA9IGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0RpZ2l0YWxJTzsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkRGlnaXRhbElPQ2hsVmFsdWU7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZjsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVEaWdpdGFsSU9DaGxPbk9mZjsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIENocm9ubyBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NIUk9OTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMDsKKwlzLT5sZW5fY2hhbmxpc3QgPSA0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZUNocm9ubzsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkQ2hyb25vOworCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdENocm9ubzsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgUFdNIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BXTTsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gMzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CQkvL2FsbCBiaXRzIGlucHV0CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdQV007CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZEdldFBXTVN0YXR1czsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVQV007CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1JlYWRQV01JbnRlcnJ1cHQ7CisKKwkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBUVExJTyBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9UVExJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA4OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FwY2kxNzEwX3R0bDsJLy8gdG8gcGFzcyBhcmd1bWVudHMgaW4gcmFuZ2UKKwlzLT5pbnNuX2NvbmZpZyA9IGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUVExJTzsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzUmVhZFRUTElPOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZVNldFRUTElPQ2hsT25PZmY7CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgVE9SIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDU7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RPUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA4OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CQkvL2FsbCBiaXRzIGlucHV0CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VG9yQ291bnRlcjsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkR2V0VG9yQ291bnRlckluaXRpYWxpc2F0aW9uOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVUb3JDb3VudGVyOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNHZXRUb3JDb3VudGVyUHJvZ3Jlc3NTdGF0dXNBbmRWYWx1ZTsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFNTSSBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9TU0k7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hcGNpMTcxMF9zc2k7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0U1NJOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRTU0lWYWx1ZTsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzU1NJRGlnaXRhbElPOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgUFVMU0VFTkNPREVSIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDc7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BVTFNFRU5DT0RFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0UHVsc2VFbmNvZGVyOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVQdWxzZUVuY29kZXI7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1JlYWRXcml0ZVB1bHNlRW5jb2RlcjsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkSW50ZXJydXB0UHVsc2VFbmNvZGVyOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgSU5DUkVNRU5UQUxDT1VOVEVSIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDg7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0lOQ1JFTUVOVEFMQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNTAwOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDUwMDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hcGNpMTcxMF9pbmNjcHQ7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQ7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlSU5DQ1BUOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRJTkNDUFQ7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c0lOQ0NQVDsKK30KKworaW50IGlfQVBDSTE3MTBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOwordm9pZCB2X0FQQ0kxNzEwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKy8vZm9yIDE3MTAKKworaW50IGlfQVBDSTE3MTBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldDsKKwlEV09SRCBkd19EdW1teTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVhZCBhbGwgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXJldCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDYwKTsKKwlkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMF0gPSByZXQ7CisKKwlyZXQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMjQpOworCWRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvblsxXSA9IHJldDsKKworCXJldCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE4OCk7CisJZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uWzJdID0gcmV0OworCisJcmV0ID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjUyKTsKKwlkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bM10gPSByZXQ7CisKKwkvLyBvdXRsKDB4ODA4MDgwODIsZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MrMHg2MCk7CisJb3V0bCgweDgzODM4MzgzLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDB4NjApOworCisJZGV2cHJpdi0+c19Cb2FyZEluZm9zLmJfQm9hcmRWZXJzaW9uID0gMTsKKworCS8vIEVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGUgY29udHJvbGVyCisJZHdfRHVtbXkgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAweDM4KTsKKwlvdXRsKGR3X0R1bW15IHwgMHgyMDAwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDB4MzgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24ncyBOYW1lICAgOiBfX3ZvaWRfXyB2X0FQQ0kxNzEwX0ludGVycnVwdEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfAkJCQkoQllURSBiX0ludGVycnVwdCwgX19DUFBBUkdTKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBBUENJLTE3MTAgaW50ZXJydXB0IGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURSBiX0ludGVycnVwdCA6IEludGVycnVwdCBudW1iZXIgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwIDogT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEgOiBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3ZvaWQgdl9BUENJMTcxMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlCWVRFIGJfTW9kdWxlQ3B0ID0gMDsKKwlCWVRFIGJfSW50ZXJydXB0RmxhZyA9IDA7CisJQllURSBiX1BXTUNwdCA9IDA7CisJQllURSBiX1RvckNvdW50ZXJDcHQgPSAwOworCUJZVEUgYl9QdWxzZUluY29kZXJDcHQgPSAwOworCVVJTlQgdWlfMTZCaXRWYWx1ZTsKKwlVTE9ORyB1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9IDA7CisJVUxPTkcgdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0gMDsKKwlVTE9ORyB1bF84Mlg1NEludGVycnVwdFN0YXR1czsKKwlVTE9ORyB1bF9TdGF0dXNSZWdpc3RlcjsKKworCXN0cl9Nb2R1bGVJbmZvICpwc19Nb2R1bGVJbmZvOworCisJcHJpbnRrKCJBUENJMTcxMCBJbnRlcnJ1cHRcbiIpOworCWZvciAoYl9Nb2R1bGVDcHQgPSAwOyBiX01vZHVsZUNwdCA8IDQ7IGJfTW9kdWxlQ3B0KyssIHBzX01vZHVsZUluZm8rKykgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIDExOTkvMDIyNSB0byAwMTAwLzAyMjYgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJcHNfTW9kdWxlSW5mbyA9ICZkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsZUNwdF0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKworCQkJLy9wcmludGsoIlRJTUVSIEludGVycnVwdCBPY2N1cnJlZFxuIik7CisJCQl1bF84Mlg1NEludGVycnVwdFN0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVsXzgyWDU0SW50ZXJydXB0U3RhdHVzICYgcHNfTW9kdWxlSW5mby0+CisJCQkJCXNfODJYNTRNb2R1bGVJbmZvLgorCQkJCQliX0ludGVycnVwdE1hc2spICE9IDApIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJdWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCSh1bF84Mlg1NEludGVycnVwdFN0YXR1cyAmCisJCQkJCXBzX01vZHVsZUluZm8tPnNfODJYNTRNb2R1bGVJbmZvLgorCQkJCQliX0ludGVycnVwdE1hc2spIDw8IDQ7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJYl9PbGRNb2R1bGVNYXNrID0gMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGVdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0gMDsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZSArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJCX0JLy8gaWYgKCh1bF84Mlg1NEludGVycnVwdFN0YXR1cyAmIDB4NykgIT0gMCkKKwkJfQkJLy8gODJYNTQgdGltZXIKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBpbmNyZW0uIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKworCQkJdWxfSW50ZXJydXB0TGF0Y2hSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDIyKSAmJiAocHNfTW9kdWxlSW5mby0+CisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjIgJiAweDgwKSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHN0cm9iZSBsYXRjaCBJIGludGVycnVwdCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICh1bF9JbnRlcnJ1cHRMYXRjaFJlZyAmIDIpIHsKKwkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTFVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgc3Ryb2JlIGxhdGNoIElJIGludGVycnVwdCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDIwKSB7CisKKwkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTJVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisJCQl9CisKKwkJCXVsX0ludGVycnVwdExhdGNoUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjQgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbnRlcnJ1cHQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICh1bF9JbnRlcnJ1cHRMYXRjaFJlZyAmIDB4OCkgeworCQkJCXBzX01vZHVsZUluZm8tPgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Jbml0RmxhZy5iX0luZGV4SW50ZXJydXB0T2NjdXIgPSAxOworCisJCQkJaWYgKHBzX01vZHVsZUluZm8tPgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIyICYKKwkJCQkJQVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFKSB7CisKKwkJCQkJb3V0bChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxlQ3B0KSk7CisJCQkJfQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgJgorCQkJCQkJQVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVCkgPT0KKwkJCQkJQVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVCkgeworCQkJCQlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLnVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJNFVMOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS5iX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiAwODk5LzAyMjQgdG8gMTE5OS8wMjI1ICAgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkwKTsKKworCQkJCX0KKwkJCX0KKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjb21wYXJlIGludGVycnVwdCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDEwKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgJgorCQkJCQkJQVBDSTE3MTBfRU5BQkxFX0NPTVBBUkVfSU5UKSA9PQorCQkJCQlBUENJMTcxMF9FTkFCTEVfQ09NUEFSRV9JTlQpIHsKKwkJCQkJZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCThVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgaW50ZXJydXB0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHgyMCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDMyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIHRoZSB2YWx1ZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCTI4ICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkJCXN3aXRjaCAoKHVsX1N0YXR1c1JlZ2lzdGVyID4+IDEpICYgMykgeworCQkJCWNhc2UgMDoKKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgY291bnRlciBtb2RlICovCisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdLgorCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQliX01vZGVSZWdpc3RlcjEgJgorCQkJCQkJCUFQQ0kxNzEwXzE2QklUX0NPVU5URVIpCisJCQkJCQk9PSBBUENJMTcxMF8xNkJJVF9DT1VOVEVSKSB7CisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMSBwdWxzZSBvY2N1ciAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgodWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkJMHhGRkZGVSkgIT0gMCkgeworCQkJCQkJCXVpXzE2Qml0VmFsdWUgPQorCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCSYgMHhGRkZGVTsKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCSYgMHhGRkZGMDAwMFVMKQorCQkJCQkJCQl8ICgweEZGRkZVIC0KKwkJCQkJCQkJdWlfMTZCaXRWYWx1ZSk7CisJCQkJCQl9CisKKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCQkweEZGRkYwMDAwVUwpICE9CisJCQkJCQkJMCkgeworCQkJCQkJCXVpXzE2Qml0VmFsdWUgPQorCQkJCQkJCQkoVUlOVCkgKAorCQkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCQk+PiAxNikgJgorCQkJCQkJCQkweEZGRkZVKTsKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCSYgMHhGRkZGVUwpIHwKKwkJCQkJCQkJKCgweEZGRkZVIC0KKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUpCisJCQkJCQkJCTw8IDE2KTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmICh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgIT0gMCkgeworCQkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCQkJCTB4RkZGRkZGRkZVTCAtCisJCQkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgMToKKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKCh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRjAwMDBVTCkgIT0gMCkgeworCQkJCQkJdWlfMTZCaXRWYWx1ZSA9CisJCQkJCQkJKFVJTlQpICgKKwkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCT4+IDE2KSAmCisJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCSh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRlVMKSB8ICgoMHhGRkZGVSAtCisJCQkJCQkJCXVpXzE2Qml0VmFsdWUpCisJCQkJCQkJPDwgMTYpOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAyOgorCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyIDEgcHVsc2Ugb2NjdXIgKi8KKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSAmIDB4RkZGRlUpICE9CisJCQkJCQkwKSB7CisJCQkJCQl1aV8xNkJpdFZhbHVlID0KKwkJCQkJCQkoVUlOVCkKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRlU7CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCSh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRjAwMDBVTCkgfCAoMHhGRkZGVQorCQkJCQkJCS0gdWlfMTZCaXRWYWx1ZSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZV0uCisJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPSAweDEwMDAwVUw7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJYl9PbGRNb2R1bGVNYXNrID0gMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGVdLgorCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9CisJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkJfQorCQl9CQkvLyBJbmNyZW1lbnRhbCBjb3VudGVyCisKKwkJIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgQ0RBICovCisJCSAvKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DREEpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIENEQSBlbmFibGUgYW5kIGZ1bmN0aW9uYWxpdHkgMCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdLgorCQkJCQlzX0NEQU1vZHVsZUluZm8uCisJCQkJCWJfQ0RBRW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkKKwkJCQkmJiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJc19DREFNb2R1bGVJbmZvLmJfRmN0U2VsZWN0aW9uID09IDApKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBHZXQgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJdWxfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDEpIHsKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLnVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJMHg4MDAwMFVMOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS5iX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9IDA7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkwKTsKKworCQkJCX0JLy8gaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMSkKKworCQkJfQorCQl9CQkvLyBDREEKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSBjb3VudGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BXTSkgeworCQkJZm9yIChiX1BXTUNwdCA9IDA7IGJfUFdNQ3B0IDwgMjsgYl9QV01DcHQrKykgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW50ZXJydXB0IGluaXRpYWxpc2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQlzX1BXTUluZm9bYl9QV01DcHRdLgorCQkJCQliX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQl1bF9TdGF0dXNSZWdpc3RlciA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDE2ICsKKwkJCQkJCSgyMCAqIGJfUFdNQ3B0KSArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKSB7CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJCTB4NDAwMFVMIDw8IGJfUFdNQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCWJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJCTEpICUKKwkJCQkJCQlBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQkJc2VuZF9zaWcoU0lHSU8sCisJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkJMCk7CisKKwkJCQkJfQkvLyBpZiAodWxfU3RhdHVzUmVnaXN0ZXIgJiAweDEpCisJCQkJfQkvLyBpZiAoQVBDSTE3MTBfRU5BQkxFKQorCQkJfQkvLyBmb3IgKGJfUFdNQ3B0ID09IDA7IGJfUFdNQ3B0IDwgMDsgYl9QV01DcHQgKyspCisJCX0JCS8vIFBXTSBjb3VudGVyCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB0b3IgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UT1JfQ09VTlRFUikgeworCQkJZm9yIChiX1RvckNvdW50ZXJDcHQgPSAwOyBiX1RvckNvdW50ZXJDcHQgPCAyOworCQkJCWJfVG9yQ291bnRlckNwdCsrKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRvciBpbnRlcnJ1cHQgaW5pdGlhbGlzZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdLgorCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQlzX1RvckNvdW50ZXJJbmZvW2JfVG9yQ291bnRlckNwdF0uCisJCQkJCWJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXVsX1N0YXR1c1JlZ2lzdGVyID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMTIgKworCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyQ3B0KSArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBSZWFkIHRoZSB0b3IgY291bnRlciB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDAgKworCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlckNwdCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJdWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkJMHgxMDAwVUwgPDwKKwkJCQkJCQliX1RvckNvdW50ZXJDcHQ7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlCisJCQkJCQkJPSB1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCQkxKSAlCisJCQkJCQkJQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQkJc2VuZF9zaWcoU0lHSU8sCisJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkJMCk7CisJCQkJCX0JLy8gaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKQorCQkJCX0JLy8gaWYgKEFQQ0kxNzEwX0VOQUJMRSkKKwkJCX0JLy8gZm9yIChiX1RvckNvdW50ZXJDcHQgPT0gMDsgYl9Ub3JDb3VudGVyQ3B0IDwgMDsgYl9Ub3JDb3VudGVyQ3B0ICsrKQorCQl9CQkvLyBUb3IgY291bnRlcgorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsZUNwdF0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKworCQkJLy9wcmludGsoIkFQQ0kxNzEwIENocm9ubyBJbnRlcnJ1cHRcbiIpOworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQl1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHg4KSA9PSAweDgpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDMyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGNvbnRpbnVvdXMgbW9kZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQliX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9FTkFCTEUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDbGVhciB0aGUgc3RhdHVzICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAzNiArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCQkJCX0KKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgdGltaW5nIHZhbHVlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCTQgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKHBzX01vZHVsZUluZm8tPgorCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrKSB7CisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTB4ODA7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLmJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0KKwkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkwKTsKKworCQkJCX0KKwkJCX0KKwkJfQkJLy8gQ2hyb25vbWV0ZXIKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BVTFNFX0VOQ09ERVIpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJdWxfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAyMCArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJCWlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDB4RikgeworCQkJCWZvciAoYl9QdWxzZUluY29kZXJDcHQgPSAwOworCQkJCQliX1B1bHNlSW5jb2RlckNwdCA8IDQ7CisJCQkJCWJfUHVsc2VJbmNvZGVyQ3B0KyspIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciBpbml0aWFsaXNlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKHBzX01vZHVsZUluZm8tPgorCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQlzX1B1bHNlRW5jb2RlckluZm8KKwkJCQkJCQlbYl9QdWxzZUluY29kZXJDcHRdLgorCQkJCQkJCWJfUHVsc2VFbmNvZGVySW5pdCA9PSAxKQorCQkJCQkJJiYgKCgocHNfTW9kdWxlSW5mby0+c19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLmR3X1NldFJlZ2lzdGVyID4+IGJfUHVsc2VJbmNvZGVyQ3B0KSAmIDEpID09IDEpICYmICgoKHVsX1N0YXR1c1JlZ2lzdGVyID4+IChiX1B1bHNlSW5jb2RlckNwdCkpICYgMSkgPT0gMSkpIHsKKwkJCQkJCWRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJdWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkJMHgxMDBVTCA8PAorCQkJCQkJCWJfUHVsc2VJbmNvZGVyQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCWJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCQlbZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZQorCQkJCQkJCT0gdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkJMSkgJQorCQkJCQkJCUFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJCQlzZW5kX3NpZyhTSUdJTywKKwkJCQkJCQlkZXZwcml2LT50c2tfQ3VycmVudCwKKwkJCQkJCQkwKTsKKworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CQkvL3B1bHNlIGVuY29kZXIKKworCX0KKwlyZXR1cm47CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThjYmJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9BUENJMTcxMC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQ09NRURJX1NVQkRfVFRMSU8JCTExCS8qIERpZ2l0YWwgSW5wdXQgT3V0cHV0IEJ1dCBUVEwgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfUFdNCQkJMTIJLyogUHVsc2Ugd2lkdGggTWVhc3VyZW1lbnQgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfU1NJCQkJMTMJLyogU3luY2hyb25vdXMgc2VyaWFsIGludGVyZmFjZSAqLworI2RlZmluZSBDT01FRElfU1VCRF9UT1IJCQkxNAkvKiBUb3IgY291bnRlciAqLworI2RlZmluZSBDT01FRElfU1VCRF9DSFJPTk8JCTE1CS8qIENocm9ubyBtZXRlciAqLworI2RlZmluZSBDT01FRElfU1VCRF9QVUxTRUVOQ09ERVIJMTYJLyogUHVsc2UgRW5jb2RlciBJTlAgQ1BUICovCisjZGVmaW5lIENPTUVESV9TVUJEX0lOQ1JFTUVOVEFMQ09VTlRFUgkxNwkvKiBJbmNyZW1lbnRhbCBDb3VudGVyICovCisKKyNkZWZpbmUgQVBDSTE3MTBfQk9BUkRfTkFNRQkJImFwY2kxNzEwIgorI2RlZmluZSBBUENJMTcxMF9CT0FSRF9WRU5ET1JfSUQJMHgxMEU4CisjZGVmaW5lIEFQQ0kxNzEwX0JPQVJEX0RFVklDRV9JRAkweDgxOEYKKyNkZWZpbmUgQVBDSTE3MTBfQUREUkVTU19SQU5HRQkJMjU2CisjZGVmaW5lIEFQQ0kxNzEwX0NPTkZJR19BRERSRVNTX1JBTkdFCTgKKyNkZWZpbmUgQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgkweDUzNDMwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX0NPVU5URVIJCTB4NTM0OTAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9UVExfSU8JCQkweDU0NEMwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfRElHSVRBTF9JTwkJMHg0NDQ5MDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwXzgyWDU0X1RJTUVSCQkweDQ5NDMwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PTUVURVIJCTB4NDM0ODAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9QVUxTRV9FTkNPREVSCQkweDQ5NUEwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0NPVU5URVIJCTB4NTQ0RjAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9QV00JCQkweDUwNTcwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfRVRNCQkJMHg0NTU0MDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX0NEQQkJCTB4NDM0NDAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFCQkwCisjZGVmaW5lIEFQQ0kxNzEwX0VOQUJMRQkJCTEKKyNkZWZpbmUgQVBDSTE3MTBfU1lOQ0hST05PVVNfTU9ERQkxCisjZGVmaW5lIEFQQ0kxNzEwX0FTWU5DSFJPTk9VU19NT0RFCTAKKworLy9NT0RVTEUgSU5GTyBTVFJVQ1RVUkUKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kxNzEwX3R0bCA9IHsgNCwgeworCQkJCQkJICAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgxKQorCQkJCQkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kxNzEwX3NzaSA9IHsgNCwgeworCQkJCQkJICAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgxKQorCQkJCQkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kxNzEwX2luY2NwdCA9IHsgNCwgeworCQkJCQkJCSBCSVBfUkFOR0UoMTApLAorCQkJCQkJCSBCSVBfUkFOR0UoNSksCisJCQkJCQkJIEJJUF9SQU5HRSgyKSwKKwkJCQkJCQkgQklQX1JBTkdFKDEpCisJCQkJCQkJIH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTI3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYwpAQCAtMCwwICsxLDYwMCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTAzNSAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kwMzUuYyB8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0wMzUgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMDM1LmgiCitJTlQgaV9XYXRjaGRvZ05iciA9IDA7CitJTlQgaV9UZW1wID0gMDsKK0lOVCBpX0ZsYWcgPSAxOworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfQ29uZmlnVGltZXJXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIENvbmZpZ3VyZSBBcyBUaW1lciAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb25maWd1cmUgQXMgV2F0Y2hkb2cgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgOiBXYXRjaGRvZyBudW1iZXIKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogVGltZSBiYXNlIFVuaXQgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbM10JCQkgOiBSZWxvYWQgVmFsdWUJCQkgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNF0gICAgICAgICAgICA6IEV4dGVybmFsIFRyaWdnZXIgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpFbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6RGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1XSAgICAgICAgICAgIDpFeHRlcm5hbCBUcmlnZ2VyIExldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwIFRyaWdnZXIgRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEgVHJpZ2dlciBFbmFibGVkIChMb3cgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwIFRyaWdnZXIgRW5hYmxlZCAoSGlnaCBMZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEgVHJpZ2dlciBFbmFibGVkIChIaWdoL0xvdyBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNl0gICAgICAgICAgICA6IEV4dGVybmFsIEdhdGUgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOkVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpEaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzddICAgICAgICAgICAgOiBFeHRlcm5hbCBHYXRlIGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwIEdhdGUgRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEgR2F0ZSBFbmFibGVkIChMb3cgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwIEdhdGUgRW5hYmxlZCAoSGlnaCBMZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOF0gICAgICAgICAgICA6V2FybmluZyBSZWxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBFTkFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogRElTQUJMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs5XSAgICAgICAgICAgIDpXYXJuaW5nIERlbGF5IGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMF0gICAgICAgICAgIDpXYXJuaW5nIFJlbGF5IFRpbWUgdW5pdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMV0gICAgICAgICAgIDpXYXJuaW5nIFJlbGF5IFRpbWUgUmVsb2FkIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzEyXSAgICAgICAgICAgOlJlc2V0IFJlbGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBFTkFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IERJU0FCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTNdICAgICAgICAgICA6SW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBFTkFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IERJU0FCTEUKKworfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kwMzVfQ29uZmlnVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9TdGF0dXMgPSAwOworCVVJTlQgdWlfQ29tbWFuZCA9IDA7CisJVUlOVCB1aV9Nb2RlID0gMDsKKwlpX1RlbXAgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IGRhdGFbMF07CisJaV9XYXRjaGRvZ05iciA9IGRhdGFbMV07CisJaWYgKGRhdGFbMF0gPT0gMCkgeworCQl1aV9Nb2RlID0gMjsKKwl9IGVsc2UgeworCQl1aV9Nb2RlID0gMDsKKwl9CisvL3VpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlKygoaV9XYXRjaGRvZ05ici0xKSozMikrMTIpOworCXVpX0NvbW1hbmQgPSAwOworLy91aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY5RkVVTDsKKwlvdXRsKHVpX0NvbW1hbmQsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisvKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2V0IHRoZSByZWxvYWQgdmFsdWUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bChkYXRhWzNdLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDQpOworLyoqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgdGltZSB1bml0ICovCisvKioqKioqKioqKioqKioqKioqKioqLworCW91dGwoZGF0YVsyXSwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyA4KTsKKwlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9USU1FUikgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIG1vZGUgOiAgICAgICAgICAgICAqLworCQkvKiAtIERpc2FibGUgdGhlIGhhcmR3YXJlICAgICAqLworCQkvKiAtIERpc2FibGUgdGhlIGNvdW50ZXIgbW9kZSAqLworCQkvKiAtIERpc2FibGUgdGhlIHdhcm5pbmcgICAgICAqLworCQkvKiAtIERpc2FibGUgdGhlIHJlc2V0ICAgICAgICAqLworCQkvKiAtIEVuYWJsZSB0aGUgdGltZXIgbW9kZSAgICAqLworCQkvKiAtIFNldCB0aGUgdGltZXIgbW9kZSAgICAgICAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQl1aV9Db21tYW5kID0KKwkJCSh1aV9Db21tYW5kICYgMHhGRkY3MTlFMlVMKSB8IHVpX01vZGUgPDwgMTNVTCB8IDB4MTBVTDsKKworCX0JCQkvL2lmIChkYXRhWzBdID09IEFERElEQVRBX1RJTUVSKQorCWVsc2UgeworCQlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2V0IHRoZSBtb2RlIDogICAgICAgICAgICAgKi8KKwkJCS8qIC0gRGlzYWJsZSB0aGUgaGFyZHdhcmUgICAgICovCisJCQkvKiAtIERpc2FibGUgdGhlIGNvdW50ZXIgbW9kZSAqLworCQkJLyogLSBEaXNhYmxlIHRoZSB3YXJuaW5nICAgICAgKi8KKwkJCS8qIC0gRGlzYWJsZSB0aGUgcmVzZXQgICAgICAgICovCisJCQkvKiAtIERpc2FibGUgdGhlIHRpbWVyIG1vZGUgICAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRjgxOUUyVUw7CisKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiXG4gVGhlIHBhcmFtZXRlciBmb3IgVGltZXIvd2F0Y2hkb2cgc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERpc2FibGUgdGhlIGhhcmR3YXJlIHRyaWdnZXIgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY4OUZVTDsKKwlpZiAoZGF0YVs0XSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSBoYXJkd2FyZSB0cmlnZ2VyIGxldmVsICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbNV0gPDwgNSk7CisJfQorCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERpc2FibGUgdGhlIGhhcmR3YXJlIGdhdGUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY4N0ZVTDsKKwlpZiAoZGF0YVs2XSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2V0IHRoZSBoYXJkd2FyZSBnYXRlIGxldmVsICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgfCAoZGF0YVs3XSA8PCA3KTsKKwl9CisJb3V0bCh1aV9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl1aV9Db21tYW5kID0gMDsKKwl1aV9Db21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEaXNhYmxlIHRoZSBoYXJkd2FyZSBvdXRwdXQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kICYgMHhGRkZGRjlGQlVMOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgaGFyZHdhcmUgb3V0cHV0IGxldmVsICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbOF0gPDwgMik7CisJb3V0bCh1aV9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwlpZiAoZGF0YVs5XSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgcmVsb2FkIHZhbHVlICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRsKGRhdGFbMTFdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAyNCk7CisgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSB0aW1lIHVuaXRlICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bChkYXRhWzEwXSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMjgpOworCX0KKworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZSB0aGUgaGFyZHdhcmUgb3V0cHV0ICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRkZGOUY3VUw7CisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgaGFyZHdhcmUgb3V0cHV0IGxldmVsICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbMTJdIDw8IDMpOworCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoqICBFbmFibGUgdGhlIHdhdGNoZG9nIGludGVycnVwdCAgKiovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2V0IHRoZSBpbnRlcnJ1cHQgc2VsZWN0aW9uICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxNik7CisKKwl1aV9Db21tYW5kID0gKHVpX0NvbW1hbmQgJiAweEZGRkZGOUZEVUwpIHwgKGRhdGFbMTNdIDw8IDEpOworCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfU3RhcnRTdG9wV3JpdGVUaW1lcldhdGNoZG9nICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBTZWxlY3RlZCBUaW1lciAsIG9yIFdhdGNoZG9nICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdIDogMCAtIFN0b3AgU2VsZWN0ZWQgVGltZXIvV2F0Y2hkb2cgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDEgLSBTdGFydCBTZWxlY3RlZCBUaW1lci9XYXRjaGRvZyAgICB8Cit8CQkJCQkgICAgICAgICAgICAyIC0gVHJpZ2dlciBTZWxlY3RlZCBUaW1lci9XYXRjaGRvZyAgfAorfAkJCQkJICAgICAgICAgICAgMyAtIFN0b3AgQWxsIFRpbWVyL1dhdGNoZG9nICAgICAgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDQgLSBTdGFydCBBbGwgVGltZXIvV2F0Y2hkb2cgICAgICAgICB8Cit8CQkJCQkgICAgICAgICAgICA1IC0gVHJpZ2dlciBBbGwgVGltZXIvV2F0Y2hkb2cgICAgICAgfAorfAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yCQkJIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMDM1X1N0YXJ0U3RvcFdyaXRlVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Db21tYW5kID0gMDsKKwlJTlQgaV9Db3VudCA9IDA7CisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQl1aV9Db21tYW5kID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFN0YXJ0IHRoZSBoYXJkd2FyZSAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZCA9ICh1aV9Db21tYW5kICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCQlvdXRsKHVpX0NvbW1hbmQsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl9CQkJLy8gaWYgIChkYXRhWzBdPT0xKQorCWlmIChkYXRhWzBdID09IDIpIHsKKwkJdWlfQ29tbWFuZCA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgdHJpZ2dlciBjb21tYW5kICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmQgPSAodWlfQ29tbWFuZCAmIDB4RkZGRkY5RkZVTCkgfCAweDIwMFVMOworCQlvdXRsKHVpX0NvbW1hbmQsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl9CisKKwlpZiAoZGF0YVswXSA9PSAwKQkvL1N0b3AgVGhlIFdhdGNoZG9nCisJeworCQkvL1N0b3AgVGhlIFdhdGNoZG9nCisJCXVpX0NvbW1hbmQgPSAwOworCQkvL3VpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlKygoaV9XYXRjaGRvZ05ici0xKSozMikrMTIpOworCQkvL3VpX0NvbW1hbmQgPSB1aV9Db21tYW5kICYgMHhGRkZGRjlGRVVMOworCQlvdXRsKHVpX0NvbW1hbmQsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl9CQkJLy8gIGlmIChkYXRhWzFdPT0wKQorCWlmIChkYXRhWzBdID09IDMpCS8vc3RvcCBhbGwgV2F0Y2hkb2dzCisJeworCQl1aV9Db21tYW5kID0gMDsKKwkJZm9yIChpX0NvdW50ID0gMTsgaV9Db3VudCA8PSA0OyBpX0NvdW50KyspIHsKKwkJCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCQkJCXVpX0NvbW1hbmQgPSAweDJVTDsKKwkJCX0gZWxzZSB7CisJCQkJdWlfQ29tbWFuZCA9IDB4MTBVTDsKKwkJCX0KKwkJCWlfV2F0Y2hkb2dOYnIgPSBpX0NvdW50OworCQkJb3V0bCh1aV9Db21tYW5kLAorCQkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsKKwkJCQkwKTsKKwkJfQorCisJfQorCWlmIChkYXRhWzBdID09IDQpCS8vc3RhcnQgYWxsIFdhdGNoZG9ncworCXsKKwkJdWlfQ29tbWFuZCA9IDA7CisJCWZvciAoaV9Db3VudCA9IDE7IGlfQ291bnQgPD0gNDsgaV9Db3VudCsrKSB7CisJCQlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJCQl1aV9Db21tYW5kID0gMHgxVUw7CisJCQl9IGVsc2UgeworCQkJCXVpX0NvbW1hbmQgPSAweDhVTDsKKwkJCX0KKwkJCWlfV2F0Y2hkb2dOYnIgPSBpX0NvdW50OworCQkJb3V0bCh1aV9Db21tYW5kLAorCQkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsKKwkJCQkwKTsKKwkJfQorCX0KKwlpZiAoZGF0YVswXSA9PSA1KQkvL3RyaWdnZXIgYWxsIFdhdGNoZG9ncworCXsKKwkJdWlfQ29tbWFuZCA9IDA7CisJCWZvciAoaV9Db3VudCA9IDE7IGlfQ291bnQgPD0gNDsgaV9Db3VudCsrKSB7CisJCQlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJCQl1aV9Db21tYW5kID0gMHg0VUw7CisJCQl9IGVsc2UgeworCQkJCXVpX0NvbW1hbmQgPSAweDIwVUw7CisJCQl9CisKKwkJCWlfV2F0Y2hkb2dOYnIgPSBpX0NvdW50OworCQkJb3V0bCh1aV9Db21tYW5kLAorCQkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsKKwkJCQkwKTsKKwkJfQorCQlpX1RlbXAgPSAxOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfUmVhZFRpbWVyV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgCQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJZGF0YVswXSAgICAgICAgICAgIDogc29mdHdhcmUgdHJpZ2dlciBzdGF0dXMKKyAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIDogaGFyZHdhcmUgdHJpZ2dlciBzdGF0dXMKK3wgICAgIAkJCQlkYXRhWzJdICAgICAgICAgICAgOiBTb2Z0d2FyZSBjbGVhciBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gICAgICAgICAgICA6IE92ZXJmbG93IHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgZGF0YVs0XSAgICAgICAgICAgIDogVGltZXIgYWN0dWFsIHZhbHVlCisKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9SZWFkVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9TdGF0dXMgPSAwOwkvLyBTdGF0dXMgcmVnaXN0ZXIKKwlpX1dhdGNoZG9nTmJyID0gaW5zbi0+dW51c2VkWzBdOworCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBzdGF0dXMgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqLworCXVpX1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDE2KTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBHZXQgdGhlIHNvZnR3YXJlIHRyaWdnZXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZGF0YVswXSA9ICgodWlfU3RhdHVzID4+IDEpICYgMSk7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBoYXJkd2FyZSB0cmlnZ2VyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRhdGFbMV0gPSAoKHVpX1N0YXR1cyA+PiAyKSAmIDEpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBHZXQgdGhlIHNvZnR3YXJlIGNsZWFyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlkYXRhWzJdID0gKCh1aV9TdGF0dXMgPj4gMykgJiAxKTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBvdmVyZmxvdyBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZGF0YVszXSA9ICgodWlfU3RhdHVzID4+IDApICYgMSk7CisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWRhdGFbNF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAwKTsKKworCX0JCQkvLyAgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IElOVCBpX0FQQ0kwMzVfQ29uZmlnQW5hbG9nSW5wdXQgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgQW5hbG9nIElucHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgIDogV2FybmluZyBkZWxheSB2YWx1ZQorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCW91dGwoMHgyMDAgfCAwLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAweDQpOworCW91dGwoMCwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbml0aWFsaXNlIHRoZSB3YXJuaW5nIHZhbHVlICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bCgweDMwMCB8IDAsIGRldnByaXYtPmlvYmFzZSArIDEyOCArIDB4NCk7CisJb3V0bCgoZGF0YVswXSA8PCA4KSwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMCk7CisJb3V0bCgweDIwMDAwMFVMLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAxMik7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfUmVhZEFuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKK3wJCQkgICAgICAgICAgZGF0YVswXSAgOiBEaWdpdGFsIFZhbHVlIE9mIElucHV0ICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKy8qKioqKioqKioqKioqKioqKiovCisvKiAgU2V0IHRoZSBzdGFydCAqLworLyoqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAweDgwMDAwOworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyA4KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJlYWQgdGhlIGRpZ2l0YWwgdmFsdWUgb2YgdGhlIGlucHV0ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMjgpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIGludCBpX0FQQ0kwMzVfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVzZXRzIHRoZSByZWdpc3RlcnMgb2YgdGhlIGNhcmQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMDM1X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUlOVCBpX0NvdW50ID0gMDsKKwlmb3IgKGlfQ291bnQgPSAxOyBpX0NvdW50IDw9IDQ7IGlfQ291bnQrKykgeworCQlpX1dhdGNoZG9nTmJyID0gaV9Db3VudDsKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMCk7CS8vc3RvcCBhbGwgdGltZXJzCisJfQorCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAxMik7CS8vRGlzYWJsZSB0aGUgd2FybmluZyBkZWxheQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kwMzVfSW50ZXJydXB0CQkJCQkgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBwcm9jZXNzaW5nIFJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworc3RhdGljIHZvaWQgdl9BUENJMDM1X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCVVJTlQgdWlfU3RhdHVzUmVnaXN0ZXIxID0gMDsKKwlVSU5UIHVpX1N0YXR1c1JlZ2lzdGVyMiA9IDA7CisJVUlOVCB1aV9SZWFkQ29tbWFuZCA9IDA7CisJVUlOVCB1aV9DaGFubmVsTnVtYmVyID0gMDsKKwlVSU5UIHVpX0RpZ2l0YWxUZW1wZXJhdHVyZSA9IDA7CisJaWYgKGlfVGVtcCA9PSAxKSB7CisJCWlfV2F0Y2hkb2dOYnIgPSBpX0ZsYWc7CisJCWlfRmxhZyA9IGlfRmxhZyArIDE7CisJfQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBvZiB0ZW1wZXJhdHVyZSBXYXJuaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9TdGF0dXNSZWdpc3RlcjEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBmb3IgV2F0Y2hkb2cvdGltZXIgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXVpX1N0YXR1c1JlZ2lzdGVyMiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDIwKTsKKworCWlmICgoKCh1aV9TdGF0dXNSZWdpc3RlcjEpICYgMHg4KSA9PSAweDgpKQkvL1Rlc3QgaWYgd2FybmluZyByZWxheSBpbnRlcnJ1cHQKKwl7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIERpc2FibGUgdGhlIHRlbXBlcmF0dXJlIHdhcm5pbmcgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfUmVhZENvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTIpOworCQl1aV9SZWFkQ29tbWFuZCA9IHVpX1JlYWRDb21tYW5kICYgMHhGRkRGMDAwMFVMOworCQlvdXRsKHVpX1JlYWRDb21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAxMik7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZWFkIHRoZSBjaGFubmVsIG51bWJlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyA2MCk7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZWFkIHRoZSBkaWdpdGFsIHRlbXBlcmF0dXJlIHZhbHVlICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmUgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgNjApOworCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJfQkJCS8vaWYgKCgodWlfU3RhdHVzUmVnaXN0ZXIxICYgMHg4KSA9PSAweDgpKQorCisJZWxzZSB7CisJCWlmICgodWlfU3RhdHVzUmVnaXN0ZXIyICYgMHgxKSA9PSAweDEpIHsKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CS8vIHNlbmQgc2lnbmFsIHRvIHRoZSBzYW1wbGUKKwkJfQorCX0JCQkvL2Vsc2UgaWYgKCgodWlfU3RhdHVzUmVnaXN0ZXIxICYgMHg4KSA9PSAweDgpKQorCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQ3YzBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIENhcmQgU3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQVBDSTAzNV9CT0FSRF9WRU5ET1JfSUQJCTB4MTVCOAorI2RlZmluZSBBUENJMDM1X0FERFJFU1NfUkFOR0UJCTI1NQorCitJTlQgaV9UV19OdW1iZXI7CitzdHJ1Y3QgeworCUlOVCBpX0dhaW47CisJSU5UIGlfUG9sYXJpdHk7CisJSU5UIGlfT2Zmc2V0UmFuZ2U7CisJSU5UIGlfQ291cGxpbmc7CisJSU5UIGlfU2luZ2xlRGlmZjsKKwlJTlQgaV9BdXRvQ2FsaWJyYXRpb247CisJVUlOVCB1aV9SZWxvYWRWYWx1ZTsKKwlVSU5UIHVpX1RpbWVVbml0UmVsb2FkVmFsOworCUlOVCBpX0ludGVycnVwdDsKKwlJTlQgaV9Nb2R1bGVTZWxlY3Rpb247Cit9IENvbmZpZ19QYXJhbWV0ZXJzX01haW47CisKKy8qIEFOQUxPRyBJTlBVVCBSQU5HRSAqLworc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTAzNV9haSA9IHsgOCwgeworCQkJCSAgICAgICBCSVBfUkFOR0UoMTApLAorCQkJCSAgICAgICBCSVBfUkFOR0UoNSksCisJCQkJICAgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCSAgICAgICBVTklfUkFOR0UoMTApLAorCQkJCSAgICAgICBVTklfUkFOR0UoNSksCisJCQkJICAgICAgIFVOSV9SQU5HRSgyKSwKKwkJCQkgICAgICAgVU5JX1JBTkdFKDEpCisJCQkJICAgICAgIH0KK307CisKKy8qIFRpbWVyIC8gV2F0Y2hkb2cgUmVsYXRlZCBEZWZpbmVzICovCisjZGVmaW5lIEFQQ0kwMzVfVENXX1NZTkNfRU5BQkxFRElTQUJMRQkwCisjZGVmaW5lIEFQQ0kwMzVfVENXX1JFTE9BRF9WQUxVRQk0CisjZGVmaW5lIEFQQ0kwMzVfVENXX1RJTUVCQVNFCQk4CisjZGVmaW5lIEFQQ0kwMzVfVENXX1BST0cJCTEyCisjZGVmaW5lIEFQQ0kwMzVfVENXX1RSSUdfU1RBVFVTCQkxNgorI2RlZmluZSBBUENJMDM1X1RDV19JUlEJCQkyMAorI2RlZmluZSBBUENJMDM1X1RDV19XQVJOX1RJTUVWQUwJMjQKKyNkZWZpbmUgQVBDSTAzNV9UQ1dfV0FSTl9USU1FQkFTRQkyOAorCisjZGVmaW5lIEFERElEQVRBX1RJTUVSCQkJMAorLyogI2RlZmluZSBBRERJREFUQV9XQVRDSERPRwkJMSAqLworCisjZGVmaW5lIEFQQ0kwMzVfVFcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTAzNV9UVzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQVBDSTAzNV9UVzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgQVBDSTAzNV9UVzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTYKKworI2RlZmluZSBBUENJMDM1X0FJX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTAzNV9URU1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgQVBDSTAzNV9BTFJfU0VRICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kwMzVfU1RBUlRfU1RPUF9JTkRFWCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMDM1X0FMUl9TVEFSVF9TVE9QICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kwMzVfQUxSX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTAzNV9FT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBBUENJMDM1X0NIQU5fTk8gICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFQQ0kwMzVfQ0hBTl9WQUwgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQVBDSTAzNV9DT05WX1RJTUVfVElNRV9CQVNFCTM2CisjZGVmaW5lIEFQQ0kwMzVfUkVMT0FEX0NPTlZfVElNRV9WQUwJMzIKKyNkZWZpbmUgQVBDSTAzNV9ERUxBWV9USU1FX1RJTUVfQkFTRQk0NAorI2RlZmluZSBBUENJMDM1X1JFTE9BRF9ERUxBWV9USU1FX1ZBTAk0MAorI2RlZmluZSBFTkFCTEVfRVhUX1RSSUcJCQkxCisjZGVmaW5lIEVOQUJMRV9FWFRfR0FURQkJCTIKKyNkZWZpbmUgRU5BQkxFX0VYVF9UUklHX0dBVEUJCTMKKworI2RlZmluZSBBTkFMT0dfSU5QVVQJCQkwCisjZGVmaW5lIFRFTVBFUkFUVVJFCQkJMQorI2RlZmluZSBSRVNJU1RBTkNFCQkJMgorCisjZGVmaW5lIEFERElEQVRBX0dSRUFURVJfVEhBTl9URVNUCTAKKyNkZWZpbmUgQURESURBVEFfTEVTU19USEFOX1RFU1QJCTEKKworI2RlZmluZSBBUENJMDM1X01BWFZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgMi41CisKKyNkZWZpbmUgQURESURBVEFfVU5JUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0JJUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvKiBBRERJREFUQSBFbmFibGUgRGlzYWJsZSAqLworI2RlZmluZSBBRERJREFUQV9FTkFCTEUJCQkJMQorI2RlZmluZSBBRERJREFUQV9ESVNBQkxFCQkJMAorCisvKiBIYXJkd2FyZSBMYXllciBmdW5jdGlvbnMgZm9yIEFwY2kwMzUgKi8KKworLyogVElNRVIgKi8KKy8qIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMgKi8KK0lOVCBpX0FQQ0kwMzVfQ29uZmlnVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kwMzVfU3RhcnRTdG9wV3JpdGVUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTAzNV9SZWFkVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qIFRlbXBlcmF0dXJlIFJlbGF0ZWQgRGVmaW5lcyAoQW5hbG9nIElucHV0IFN1YmRldmljZSkgKi8KKworSU5UIGlfQVBDSTAzNV9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMDM1X1JlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyogSW50ZXJydXB0ICovCitzdGF0aWMgdm9pZCB2X0FQQ0kwMzVfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworCisvKiBSZXNldCBmdW5jdGlvbnMgKi8KK0lOVCBpX0FQQ0kwMzVfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3OTZjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuYwpAQCAtMCwwICsxLDI4NSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTEwMzIgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxMDMyLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xMDMyICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMTAzMi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisvL0dsb2JhbCB2YXJpYWJsZXMKK1VJTlQgdWlfSW50ZXJydXB0U3RhdHVzID0gMDsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxMDMyX0NvbmZpZ0RpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBpbnB1dCBTdWJkZXZpY2UgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDEgRW5hYmxlICBEaWdpdGFsIElucHV0IEludGVycnVwdCB8Cit8CQkJCQkJCQkgICAwIERpc2FibGUgRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgfAorfAkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMCBBRERJREFUQSBJbnRlcnJ1cHQgT1IgTE9HSUMJIHwKK3wJCQkJCQkJCSA6IDEgQURESURBVEEgSW50ZXJydXB0IEFORCBMT0dJQyAgICB8Cit8CQkJICBkYXRhWzJdCQkJIDogSW50ZXJydXB0IG1hc2sgZm9yIHRoZSBtb2RlIDEJIHwKK3wJCQkgIGRhdGFbM10JCQkgOiBJbnRlcnJ1cHQgbWFzayBmb3IgdGhlIG1vZGUgMgkgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxMDMyX0NvbmZpZ0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZTsKKworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlVTE9ORyB1bF9Db21tYW5kMiA9IDA7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgZGlnaXRhbCBpbnB1dCBsb2dpYyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSB8IGRhdGFbMl07CisJCXVsX0NvbW1hbmQyID0gdWxfQ29tbWFuZDIgfCBkYXRhWzNdOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEpOworCQlvdXRsKHVsX0NvbW1hbmQyLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTIpOworCQlpZiAoZGF0YVsxXSA9PSBBRERJREFUQV9PUikgeworCQkJb3V0bCgweDQsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKKwkJCXVpX1RtcFZhbHVlID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOworCQl9CQkvL2lmIChkYXRhWzFdID09IEFERElEQVRBX09SKQorCQllbHNlIHsKKwkJCW91dGwoMHg2LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CisJCX0JCS8vZWxzZSBpZihkYXRhWzFdID09IEFERElEQVRBX09SKQorCX0JCQkvLyBpZiggZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkYwMDAwOworCQl1bF9Db21tYW5kMiA9IHVsX0NvbW1hbmQyICYgMHhGRkZGMDAwMDsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUxKTsKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKKwl9CQkJLy9lbHNlIGlmICAoIGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTAzMl9SZWFkMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBkaWdpdGFsIGlucHV0ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgICAgVUlOVCB1aV9DaGFubmVsIDogQ2hhbm5lbCBudW1iZXIgdG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTEwMzJfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCVVJTlQgdWlfQ2hhbm5lbDsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDMxKSB7CisJCXVpX1RtcFZhbHVlID0gKFVJTlQpIGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQKTsKKwkJLy8gIHNpbmNlIG9ubHkgMSBjaGFubmVsIHJlcWQgIHRvIGJyaW5nIGl0IHRvIGxhc3QgYml0IGl0IGlzIHJvdGF0ZWQKKwkJLy8gIDggKyhjaGFuIC0gMSkgdGltZXMgdGhlbiBBTkRlZCB3aXRoIDEgZm9yIGxhc3QgYml0LgorCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiB1aV9DaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTMxKQorCWVsc2UgeworCQkvL2NvbWVkaV9lcnJvcihkZXYsIiBcbiBjaGFuIHNwZWMgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJfQkJCS8vZWxzZSBpZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTMxKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBiZSBSZWFkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkqZGF0YSA9IChVSU5UKSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUCk7CisJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWxzKSB7CisJCWNhc2UgMjoKKwkJCXVpX01hc2sgPSAzOworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdWlfTWFzayA9IDE1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWlfTWFzayA9IDI1NTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQl1aV9NYXNrID0gNjU1MzU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSAzMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLy9jb21lZGlfZXJyb3IoZGV2LCIgXG5jaGFuIHNwZWMgd3JvbmdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJYnJlYWs7CisJCX0JCS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwl9CQkJLy9pZihkYXRhWzFdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkqZGF0YSA9IHVpX0ludGVycnVwdFN0YXR1czsKKwkJfQkJLy9pZihkYXRhWzFdPT0xKQorCX0JCQkvL2Vsc2UgaWYoZGF0YVsxXT09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHN0YXRpYyB2b2lkIHZfQVBDSTEwMzJfSW50ZXJydXB0CQkJCQkgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgaW50ZXJydXB0aWJsZSBkaWdpdGFsIGlucHV0cyB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitzdGF0aWMgdm9pZCB2X0FQQ0kxMDMyX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCisJVUlOVCB1aV9UZW1wOworCS8vZGlzYWJsZSB0aGUgaW50ZXJydXB0CisJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CisJb3V0bCh1aV9UZW1wICYgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfRElTQUJMRSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOworCXVpX0ludGVycnVwdFN0YXR1cyA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMpOworCXVpX0ludGVycnVwdFN0YXR1cyA9IHVpX0ludGVycnVwdFN0YXR1cyAmIDBYMDAwMEZGRkY7CisJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCW91dGwodWlfVGVtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOwkvL2VuYWJsZSB0aGUgaW50ZXJydXB0CisJcmV0dXJuOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTEwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CS8vZGlzYWJsZSB0aGUgaW50ZXJydXB0cworCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMpOwkvL1Jlc2V0IHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUxKTsJLy9EaXNhYmxlIHRoZSBhbmQvb3IgaW50ZXJydXB0CisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTllZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0xMDMyIGNhcmQgICoqKioqLworCisjZGVmaW5lIEFQQ0kxMDMyX0JPQVJEX1ZFTkRPUl9JRCAweDE1QjgKKyNkZWZpbmUgQVBDSTEwMzJfQUREUkVTU19SQU5HRSAgMjAKKy8vRElHSVRBTCBJTlBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSAgICAgNAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMiAgICAgOAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSAgICAgICAgICAgICAgICAgMTYKKworLy9EaWdpdGFsIElucHV0IElSUSBGdW5jdGlvbiBTZWxlY3Rpb24KKyNkZWZpbmUgQURESURBVEFfT1IgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFERElEQVRBX0FORCAgICAgICAgICAgICAgICAgMQorCisvL0RpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMgICAgMTIKKworLy9EaWdpdGFsIElucHV0IEludGVycnVwdCBFbmFibGUgRGlzYWJsZS4KKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfRU5BQkxFICAgIDB4NAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9ESVNBQkxFICAgMHhGRkZGRkZGQgorCisvL0FERElEQVRBIEVuYWJsZSBEaXNhYmxlCisKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gSGFyZHdhcmUgTGF5ZXIgIGZ1bmN0aW9ucyBmb3IgQXBjaTEwMzIKKworLy9ESQorLy8gZm9yIGRpIHJlYWQKKworSU5UIGlfQVBDSTEwMzJfQ29uZmlnRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTAzMl9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTAzMl9SZWFkTW9yZURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zLi4uLi4KKworc3RhdGljIHZvaWQgdl9BUENJMTAzMl9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CisvL1Jlc2V0CitJTlQgaV9BUENJMTAzMl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDZhZGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5jCkBAIC0wLDAgKzEsMzA0NSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTE1MDAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxNTAwLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xNTAwICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTAwLmgiCisKK2ludCBpX1RpbWVyQ291bnRlcjFJbml0ID0gMDsKK2ludCBpX1RpbWVyQ291bnRlcjJJbml0ID0gMDsKK2ludCBpX1dhdGNoZG9nQ291bnRlcjNJbml0ID0gMDsKK2ludCBpX0V2ZW50MVN0YXR1cyA9IDAsIGlfRXZlbnQyU3RhdHVzID0gMDsKK2ludCBpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gMDsKK2ludCBpX0xvZ2ljID0gMCwgaV9Db3VudGVyTG9naWMgPSAwOworaW50IGlfSW50ZXJydXB0TWFzayA9IDA7CitpbnQgaV9JbnB1dENoYW5uZWwgPSAwOworaW50IGlfVGltZXJDb3VudGVyMUVuYWJsZWQgPSAwLCBpX1RpbWVyQ291bnRlcjJFbmFibGVkID0KKwkwLCBpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID0gMDsKKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbElucHV0RXZlbnQgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBBbiBldmVudCBjYW4gYmUgZ2VuZXJhdGVkIGZvciBlYWNoIHBvcnQuICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBldmVudCBpcyByZWxhdGVkIHRvIHRoZSBmaXJzdCA4IGNoYW5uZWxzICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKHBvcnQgMSkgYW5kIHRoZSBzZWNvbmQgdG8gdGhlIGZvbGxvd2luZyA2IGNoYW5uZWxzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAocG9ydCAyKS4gQW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCB3aGVuIG9uZSBvciBib3RoICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBoYXZlIG9jY3VycmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBkYXRhWzBdICAgICAgICAgICAgOk51bWJlciBvZiB0aGUgaW5wdXQgcG9ydCBvbiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIGV2ZW50IHdpbGwgdGFrZSBwbGFjZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSBvciAyKQorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICA6IFRoZSBldmVudCBsb2dpYyBmb3IgcG9ydCAxIGhhcyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlZSBwb3NzaWJpbGl0aWVzICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjAgIEFQQ0kxNTAwX0FORCAgICAgICA6VGhpcyBsb2dpYyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rcyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnB1dHMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBBTkQgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYy4gICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBBUENJMTUwMF9PUiAgICAgICAgOlRoaXMgbG9naWMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua3MgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXRzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgbG9naWMuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgQVBDSTE1MDBfT1JfUFJJT1JJVFkgICAgICAgIHwKK3wJCQkJCQkJCTpUaGlzIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlucHV0cyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgbG9naWMuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAxICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIGFuZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgICA4ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc21hbGxlc3R8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIHNlY29uZCBwb3J0IHRoZSB1c2VyIGhhc3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgcG9zc2liaWxpdHk6ICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE1MDBfT1IgICAgICAgIDpUaGlzIGxvZ2ljICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlucHV0cyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5ICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgbG9naWMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICAgIDogVGhlc2UgOC1jaGFyYWN0ZXIgd29yZCBmb3IgcG9ydDF8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgNi1jaGFyYWN0ZXIgd29yZCBmb3IgcG9ydCAyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmUgdGhlIG1hc2sgb2YgdGhlIGV2ZW50LiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBwbGFjZSBnaXZlcyB0aGUgc3RhdGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaW5wdXQgY2hhbm5lbHMgYW5kIGNhbiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgb25lIG9mIHRoZXNlIHNpeCBjaGFyYWN0ZXJzfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDogVGhpcyBpbnB1dCBtdXN0IGJlIG9uIDAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgOiBUaGlzIGlucHV0IG11c3QgYmUgb24gMSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICA6IFRoaXMgaW5wdXQgcmVhY3RzIHRvICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBmYWxsaW5nIGVkZ2UgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgOiBUaGlzIGlucHV0IHJlYWN0cyB0byBhICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpc2luZyBlZGdlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIDogVGhpcyBpbnB1dCByZWFjdHMgdG8gYm90aCBlZGdlcyB8Cit8Cit8CQkJCQkJCQk1ICA6IFRoaXMgaW5wdXQgaXMgbm90ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgZXZlbnQgICAJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxJbnB1dEV2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9QYXR0ZXJuUG9sYXJpdHkgPSAwLCBpX1BhdHRlcm5UcmFuc2l0aW9uID0gMCwgaV9QYXR0ZXJuTWFzayA9IDA7CisJaW50IGlfTWF4Q2hhbm5lbCA9IDAsIGlfQ291bnQgPSAwLCBpX0V2ZW50TWFzayA9IDA7CisJaW50IGlfUGF0dGVyblRyYW5zaXRpb25Db3VudCA9IDAsIGlfUmVnVmFsdWU7CisJaW50IGk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZXMgIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwlpZiAoZGF0YVswXSA9PSAxKSB7CisJCWlfTWF4Q2hhbm5lbCA9IDg7CisJfQkJCS8vIGlmIChkYXRhWzBdID09IDEpCisJZWxzZSB7CisJCWlmIChkYXRhWzBdID09IDIpIHsKKwkJCWlfTWF4Q2hhbm5lbCA9IDY7CisJCX0JCS8vIGlmKGRhdGFbMF09PTIpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgcG9ydCBldmVudCAgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZihkYXRhWzBdPT0yKQorCX0JCQkvL2Vsc2UgIGlmIChkYXRhWzBdID09IDEpCisJc3dpdGNoIChkYXRhWzFdKSB7CisJY2FzZSAwOgorCQlkYXRhWzFdID0gQVBDSTE1MDBfQU5EOworCQlicmVhazsKKwljYXNlIDE6CisJCWRhdGFbMV0gPSBBUENJMTUwMF9PUjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkYXRhWzFdID0gQVBDSTE1MDBfT1JfUFJJT1JJVFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGludGVycnVwdCBsb2dpYyBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL3N3aXRjaChkYXRhWzFdKTsKKworCWlfTG9naWMgPSBkYXRhWzFdOworCWZvciAoaV9Db3VudCA9IGlfTWF4Q2hhbm5lbCwgaSA9IDA7IGlfQ291bnQgPiAwOyBpX0NvdW50LS0sIGkrKykgeworCQlpX0V2ZW50TWFzayA9IGRhdGFbMiArIGldOworCQlzd2l0Y2ggKGlfRXZlbnRNYXNrKSB7CisJCWNhc2UgMDoKKwkJCWlfUGF0dGVybk1hc2sgPQorCQkJCWlfUGF0dGVybk1hc2sgfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0gaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlfUGF0dGVybk1hc2sgPQorCQkJCWlfUGF0dGVybk1hc2sgfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0gaV9Db3VudCkpOworCQkJaV9QYXR0ZXJuUG9sYXJpdHkgPQorCQkJCWlfUGF0dGVyblBvbGFyaXR5IHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpX1BhdHRlcm5NYXNrID0KKwkJCQlpX1BhdHRlcm5NYXNrIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtIGlfQ291bnQpKTsKKwkJCWlfUGF0dGVyblRyYW5zaXRpb24gPQorCQkJCWlfUGF0dGVyblRyYW5zaXRpb24gfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0KKwkJCQkJaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlfUGF0dGVybk1hc2sgPQorCQkJCWlfUGF0dGVybk1hc2sgfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0gaV9Db3VudCkpOworCQkJaV9QYXR0ZXJuUG9sYXJpdHkgPQorCQkJCWlfUGF0dGVyblBvbGFyaXR5IHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWlfUGF0dGVyblRyYW5zaXRpb24gPQorCQkJCWlfUGF0dGVyblRyYW5zaXRpb24gfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0KKwkJCQkJaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWlfUGF0dGVyblRyYW5zaXRpb24gPQorCQkJCWlfUGF0dGVyblRyYW5zaXRpb24gfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0KKwkJCQkJaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBvcHRpb24gaW5kaWNhdGVkIGluIHRoZSBldmVudCBtYXNrIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goaV9FdmVudE1hc2spCisJfQkJCS8vZm9yIChpX0NvdW50ID0gaV9NYXhDaGFubmVsOyBpX0NvdW50ID4wO2lfQ291bnQgLS0pCisKKwlpZiAoZGF0YVswXSA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgaW50ZXJydXB0IGxvZ2ljICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9BTkQgfHwKKwkJCWRhdGFbMV0gPT0gQVBDSTE1MDBfT1IgfHwKKwkJCWRhdGFbMV0gPT0gQVBDSTE1MDBfT1JfUFJJT1JJVFkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3RzIGlmIGEgdHJhbnNpdGlvbiB3YXMgZGVjbGFyZWQgKi8KKwkJCS8qIGZvciBhIE9SIFBSSU9SSVRZIGxvZ2ljICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRhdGFbMV0gPT0gQVBDSTE1MDBfT1JfUFJJT1JJVFkKKwkJCQkmJiBpX1BhdHRlcm5UcmFuc2l0aW9uICE9IDApIHsKKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUcmFuc2l0aW9uIGVycm9yIG9uIGFuIE9SIFBSSU9SSVRZIGxvZ2ljICovCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJcHJpbnRrKCJcblRyYW5zaXRpb24gZXJyb3Igb24gYW4gT1IgUFJJT1JJVFkgbG9naWNcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQkvLyBpZiAoZGF0YVsxXT09IEFQQ0kxNTAwX09SX1BSSU9SSVRZICYmIGlfUGF0dGVyblRyYW5zaXRpb24gIT0gMCkKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0cyBpZiBtb3JlIHRoYW4gb25lIHRyYW5zaXRpb24gKi8KKwkJCS8qIHdhcyBkZWNsYXJlZCBmb3IgYW4gQU5EIGxvZ2ljICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkYXRhWzFdID09IEFQQ0kxNTAwX0FORCkgeworCQkJCWZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPCA4OyBpX0NvdW50KyspIHsKKwkJCQkJaV9QYXR0ZXJuVHJhbnNpdGlvbkNvdW50ID0KKwkJCQkJCWlfUGF0dGVyblRyYW5zaXRpb25Db3VudCArCisJCQkJCQkoKGlfUGF0dGVyblRyYW5zaXRpb24gPj4KKwkJCQkJCQlpX0NvdW50KSAmIDB4MSk7CisKKwkJCQl9CS8vZm9yIChpX0NvdW50ID0gMDsgaV9Db3VudCA8IDg7IGlfQ291bnQrKykKKworCQkJCWlmIChpX1BhdHRlcm5UcmFuc2l0aW9uQ291bnQgPiAxKSB7CisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVHJhbnNpdGlvbiBlcnJvciBvbiBhbiBBTkQgbG9naWMgICAgICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJcHJpbnRrKCJcbiBUcmFuc2l0aW9uIGVycm9yIG9uIGFuIEFORCBsb2dpY1xuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0JLy8gaWYgKGlfUGF0dGVyblRyYW5zaXRpb25Db3VudCA+IDEpCisJCQl9CS8vIGlmIChkYXRhWzFdPT0gQVBDSTE1MDBfQU5EKQorCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERpc2FibGUgUG9ydCBBICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoMHhGMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IDEgICAgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fUE9MQVJJVFksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuUG9sYXJpdHksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIHBhdHRlcm4gbWFzayByZWdpc3RlciBvZiAgICAgICovCisJCQkvKiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9QQVRURVJOX01BU0ssCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuTWFzaywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgcGF0dGVybiB0cmFuc2l0aW9uIHJlZ2lzdGVyICAqLworCQkJLyogb2YgcG9ydCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fVFJBTlNJVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX1BhdHRlcm5UcmFuc2l0aW9uLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiBtYXNrICAgICovCisJCQkvKiByZWdpc3RlciBvZiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiBtYXNrICAgICovCisJCQkvKiByZWdpc3RlciBvZiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUG9ydCBBIG5ldyBtb2RlICAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweEY5KSB8IGRhdGFbMV0gfCAweDk7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJaV9FdmVudDFTdGF0dXMgPSAxOworCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJLyogRW5hYmxlIFBvcnQgQSAqLworCQkJICAvKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKDB4RjQsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQl9CQkvLyBpZihkYXRhWzFdPT1BUENJMTUwMF9BTkR8fGRhdGFbMV09PUFQQ0kxNTAwX09SfHxkYXRhWzFdPT1BUENJMTUwMF9PUl9QUklPUklUWSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIGNob2ljZSBmb3IgaW50ZXJydXB0IGxvZ2ljIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBlbHNlIH0vLyBpZihkYXRhWzFdPT1BUENJMTUwMF9BTkR8fGRhdGFbMV09PUFQQ0kxNTAwX09SfHxkYXRhWzFdPT1BUENJMTUwMF9PUl9QUklPUklUWSkKKwl9CQkJLy8gICBpZiAoZGF0YVswXT09IDEpCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBldmVudCBzZXR0aW5nIGZvciBwb3J0IDIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoZGF0YVswXSA9PSAyKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBldmVudCBsb2dpYyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9PUikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJLyogRGlzYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKDB4NzQsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIG1hc2sgICovCisJCQkvKiByZWdpc3RlciBvZiBwb3J0IEIgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCBCICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1JlZ1ZhbHVlID0gaV9SZWdWYWx1ZSAmIDB4Rjk7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIGVycm9yIGNoYW5uZWxzIDEgYW5kIDIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1BhdHRlcm5NYXNrID0gKGlfUGF0dGVybk1hc2sgfCAweEMwKTsKKwkJCWlfUGF0dGVyblBvbGFyaXR5ID0gKGlfUGF0dGVyblBvbGFyaXR5IHwgMHhDMCk7CisJCQlpX1BhdHRlcm5UcmFuc2l0aW9uID0gKGlfUGF0dGVyblRyYW5zaXRpb24gfCAweEMwKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IDIgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9QT0xBUklUWSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX1BhdHRlcm5Qb2xhcml0eSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIHRyYW5zaXRpb24gcmVnaXN0ZXIgICAgKi8KKwkJCS8qIG9mIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX1RSQU5TSVRJT04sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuVHJhbnNpdGlvbiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIE1hc2sgcmVnaXN0ZXIgICAgKi8KKwkJCS8qIG9mIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fTUFTSywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX1BhdHRlcm5NYXNrLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCAyICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1JlZ1ZhbHVlID0KKwkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCAyICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweEY5KSB8IDQ7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJaV9FdmVudDJTdGF0dXMgPSAxOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCS8qIEVuYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YigweEY0LAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCX0JCS8vICBpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9PUikKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIGNob2ljZSBmb3IgaW50ZXJydXB0IGxvZ2ljIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2VpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9PUikKKwl9CQkJLy9pZihkYXRhWzBdPT0yKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BJbnB1dEV2ZW50ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6ICBBbGxvd3Mgb3IgZGlzYWxsb3dzIGEgcG9ydCBldmVudCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgICAgVUlOVCB1aV9DaGFubmVsIDogQ2hhbm5lbCBudW1iZXIgdG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgOjAgU3RhcnQgaW5wdXQgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBTdG9wIGlucHV0IGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgICAgICAgOk5vIG9mIHBvcnQgKDEgb3IgMikKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BJbnB1dEV2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9FdmVudDFJbnRlcnJ1cHRTdGF0dXMgPSAwLCBpX0V2ZW50MkludGVycnVwdFN0YXR1cyA9CisJCTAsIGlfUmVnVmFsdWU7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBTVEFSVDoKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdHMgdGhlIHBvcnQgbnVtYmVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBwb3J0IDEgc2VsZWN0ZWQgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBldmVudCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0V2ZW50MVN0YXR1cyA9PSAxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBBICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgICAgICAqLworCQkJCQkvKiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBBbGxvd3MgdGhlIHBhdHRlcm4gaW50ZXJydXB0ICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4QzAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRW5hYmxlIFBvcnQgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjQsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCWlfRXZlbnQxSW50ZXJydXB0U3RhdHVzID0gMTsKKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJaV9SZWdWYWx1ZSA9CisJCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBBdXRob3JpemVzIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RDAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQl9CS8vIGlmKGlfRXZlbnQxU3RhdHVzPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuRXZlbnQgMSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CS8vZWxzZSBpZihpX0V2ZW50MVN0YXR1cz09MSkKKwkJCX0JLy9pZiAoZGF0YVsxXT09MSkKKwkJCWlmIChkYXRhWzFdID09IDIpIHsKKworCQkJCWlmIChpX0V2ZW50MlN0YXR1cyA9PSAxKSB7CisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlzYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHg3NCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiAgICAgICovCisJCQkJCS8qIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEFsbG93cyB0aGUgcGF0dGVybiBpbnRlcnJ1cHQgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhDMCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFbmFibGUgUG9ydCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhGNCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQXV0aG9yaXplcyB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEQwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlpX0V2ZW50MkludGVycnVwdFN0YXR1cyA9IDE7CisJCQkJfQkvLyBpZihpX0V2ZW50MlN0YXR1cz09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkV2ZW50IDIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQkvL2Vsc2UgaWYoaV9FdmVudDJTdGF0dXM9PTEpCisJCQl9CS8vIGlmKGRhdGFbMV09PTIpCisJCX0JCS8vIGlmIChkYXRhWzFdID09IDEgfHwgZGF0YVswXSA9PSAyKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaGUgcG9ydCBwYXJhbWV0ZXIgaXMgaW4gZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZiAoZGF0YVsxXSA9PSAxIHx8IGRhdGFbMF0gPT0gMikKKworCQlicmVhazsKKworCWNhc2UgU1RPUDoKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdHMgdGhlIHBvcnQgbnVtYmVyICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBwb3J0IDEgc2VsZWN0ZWQgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBldmVudCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0V2ZW50MVN0YXR1cyA9PSAxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBBICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgICAgICAqLworCQkJCQkvKiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmhpYml0cyB0aGUgcGF0dGVybiBpbnRlcnJ1cHQgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhFMCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFbmFibGUgUG9ydCBBICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhGNCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJaV9FdmVudDFJbnRlcnJ1cHRTdGF0dXMgPSAwOworCQkJCX0JLy8gaWYoaV9FdmVudDFTdGF0dXM9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5FdmVudCAxIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0JLy9lbHNlIGlmKGlfRXZlbnQxU3RhdHVzPT0xKQorCQkJfQkvL2lmIChkYXRhWzFdPT0xKQorCQkJaWYgKGRhdGFbMV0gPT0gMikgeworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGV2ZW50IGluaXRpYWxpc2VkICovCisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0V2ZW50MlN0YXR1cyA9PSAxKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBCICovCisJCQkgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHg3NCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mICAgICAgKi8KKwkJCQkJLyogcG9ydCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEluaGliaXRzIHRoZSBwYXR0ZXJuIGludGVycnVwdCAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEUwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEVuYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEY0LAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlpX0V2ZW50MkludGVycnVwdFN0YXR1cyA9IDA7CisJCQkJfQkvLyBpZihpX0V2ZW50MlN0YXR1cz09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkV2ZW50IDIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQkvL2Vsc2UgaWYoaV9FdmVudDJTdGF0dXM9PTEpCisJCQl9CS8vaWYoZGF0YVsxXT09MikKKworCQl9CQkvLyBpZiAoZGF0YVsxXSA9PSAxIHx8IGRhdGFbMV0gPT0gMikKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIHBvcnQgcGFyYW1ldGVyIGlzIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgb3B0aW9uIG9mIFNUQVJUL1NUT1AgbG9naWMgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVswXSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfSW5pdGlhbGlzYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZGlnaXRhbCBpbnB1dCAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICAgIFVJTlQgdWlfQ2hhbm5lbCA6IENoYW5uZWwgbnVtYmVyIHRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTAwX0luaXRpYWxpc2F0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9EdW1teVJlYWQgPSAwOworICAgIC8qKioqKioqKioqKioqKioqKiovCisJLyogU29mdHdhcmUgcmVzZXQgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqLworCWlfRHVtbXlSZWFkID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJaV9EdW1teVJlYWQgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDEsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gY29udHJvbCByZWdpc3RlciAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHhGNCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4MTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyogU2VsZWN0cyB0aGUgZGF0YSBwYXRoIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBIaWdoIGxldmVsIG9mIHBvcnQgQSBtZWFucyAxICovCisJb3V0YigweEZGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyAqLworCW91dGIoMHhGRiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiAgU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHBvcnQgQTogICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBoYW5kc2hha2Ugc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyB0aGUgcmVnaXN0ZXIgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4MTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgcGF0aCBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQSBoaWdoIGxldmVsIG9mIHBvcnQgQiBtZWFucyAxICovCisJb3V0YigweDdGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIGRpcmVjdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX0RJUkVDVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQWxsIGJpdHMgdXNlZCBhcyBpbnB1dHMgKi8KKwlvdXRiKDB4RkYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHBvcnQgQjogICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgaGFuZHNoYWtlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfSEFORFNIQUtFX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgdGhlIHJlZ2lzdGVyICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBkYXRhIHBhdGggcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBIaWdoIGxldmVsIG9mIHBvcnQgQyBtZWFucyAxICovCisJb3V0YigweDksIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyBleGNlcHQgY2hhbm5lbCAxICovCisJb3V0YigweDBFLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBzcGVjaWFsIElPIHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX1NQRUNJQUxfSU9fQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBpdCAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgdGltZXIgMSAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIFRpbWVyIDIgaW50ZXJydXB0IG1hbmFnZW1lbnQ6ICAgICAgICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIFRpbWVyIDMgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHRpbWVyIDM6ICAgICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgYWxsIGludGVycnVwdHMgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBiZSBSZWFkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICA6IERhdGEgUG9pbnRlcgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgIDogMCBSZWFkIGEgc2luZ2xlIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgcmVhZCBhIHBvcnQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgICAgICA6IHBvcnQgdmFsdWUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCWRhdGFbMF0gICAgOlRoZSByZWFkIHN0YXR1cyB2YWx1ZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTUwMF9SZWFkTW9yZURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Qb3J0VmFsdWUgPSBkYXRhWzFdOworCVVJTlQgdWlfTWFzayA9IDA7CisJVUlOVCB1aV9DaGFubmVsOworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMDoKKwkJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDE1KSB7CisJCQl1aV9UbXBWYWx1ZSA9CisJCQkJKFVJTlQpIGludyhkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCQlBUENJMTUwMF9ESUdJVEFMX0lQKTsKKwkJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCQl9CQkvL2lmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MTUpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBjaGFubmVsIHNwZWNpZmljYXRpb24gYXJlIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJfQkJLy9lbHNlIGlmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MTUpCisJCWJyZWFrOworCWNhc2UgMToKKworCQkqZGF0YSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUwMF9ESUdJVEFMX0lQKTsKKwkJc3dpdGNoICh1aV9DaGFubmVsKSB7CisJCWNhc2UgMjoKKwkJCXVpX01hc2sgPSAzOworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdWlfTWFzayA9IDE1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWlfTWFzayA9IDI1NTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMTU6CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIGNhbm5vdCBiZSByZWFkIFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQlicmVhazsKKwkJfQkJLy9zd2l0Y2godWlfQ2hhbm5lbCkKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL3N3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbE91dHB1dEVycm9ySW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgc3RydWN0IGNvbWVkaV9pbnNuCisgICAgICAgICAgICAgICAgICAgICAgKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBvdXRwdXQgbWVtb3J5IGFuZCB0aGUgZGlnaXRhbAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBlcnJvciBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgOjE6TWVtb3J5IG9uICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgICAgICAgICAgICAwOk1lbW9yeSBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgOjEgRW5hYmxlIHRoZSB2b2x0YWdlIGVycm9yIGludGVycnVwdAorfAkJCQkJCQkgICA6MCBEaXNhYmxlIHRoZSB2b2x0YWdlIGVycm9yIGludGVycnVwdCAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXRFcnJvckludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBkYXRhWzBdOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBXcml0ZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdGF0aWMgVUlOVCB1aV9UZW1wID0gMDsKKwlVSU5UIHVpX1RlbXAxOworCisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKworCWlmICghZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IDA7CisKKwl9CQkJLy9pZighZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXR3KGRhdGFbMF0sCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTAwX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA4OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMTU6CisJCQkJCWRhdGFbMF0gPSBkYXRhWzBdIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJCUFQQ0kxNTAwX0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9CisJCQkJCShkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeCisJCQkJCTB4ZmZmZmZmZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJCUFQQ0kxNTAwX0RJR0lUQUxfT1ApOworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCQljYXNlIDI6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCQl1aV9UZW1wMSA9IDM7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMiAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDQ6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGY7CisJCQkJCQl1aV9UZW1wMSA9IDE1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDQgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoNCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA4OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZjsKKwkJCQkJCXVpX1RlbXAxID0gMjU1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDggKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSAxNToKKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJCQlBUENJMTUwMF9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXVpX1RlbXAgPSBkYXRhWzBdOworCXJldHVybiAoaW5zbi0+bik7OworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfQ29uZmlnQ291bnRlclRpbWVyV2F0Y2hkb2coY29tZWRpX2RldmljZQorICAgICAgICAgICAgICAgICAgICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSl8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDogMiAgICAgQVBDSTE1MDBfMV84X0tIWgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBBUENJMTUwMF8zXzZfS0haICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgIEFQQ0kxNTAwXzExNV9LSFoKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcjEvVGltZXIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIENvdW50ZXIyL1RpbWVyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBDb3VudGVyMy9XYXRjaGRvZworICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICAgICAgOiAwICAgICBDb3VudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIFRpbWVyL1dhdGNoZG9nCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXSAgICAgICAgICAgICAgICA6ICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaGFzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gbWVhbmluZ3MuICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIElmIHRoZSBjb3VudGVyL3RpbWVyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBhcyBhIGNvdW50ZXIgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGltaXQgdmFsdWUgb2YgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3VudGVyIGlzIGdpdmVuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJZiB0aGUgY291bnRlci90aW1lciAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgYSB0aW1lciwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpdmlkZXIgZmFjdG9yICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIG91dHB1dCBpcyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuLgorICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzRdICAgICAgICAgICAgICAgICA6IDAgICAgQVBDSTE1MDBfQ09OVElOVU9VUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgQVBDSTE1MDBfU0lOR0xFCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNV0gICAgICAgICAgICAgICAgIDogMCAgICBTb2Z0d2FyZSBUcmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICBIYXJkd2FyZSBUcmlnZ2VyCisKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs2XSAgICAgICAgICAgICAgICAgIDowICAgIFNvZnR3YXJlIGdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIEhhcmR3YXJlIGdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs3XSAgICAgICAgICAgICAgICAgIDowICAgIEludGVycnVwdCBEaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICBJbnRlcnJ1cHQgRW5hYmxlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTUwMF9Db25maWdDb3VudGVyVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfVGltZXJDb3VudGVyTW9kZSwgaV9NYXN0ZXJDb25maWd1cmF0aW9uOworCisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCisvL1NlbGVjdGlvbiBvZiB0aGUgaW5wdXQgY2xvY2sKKwlpZiAoZGF0YVswXSA9PSAwIHx8IGRhdGFbMF0gPT0gMSB8fCBkYXRhWzBdID09IDIpIHsKKwkJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MDBfQ0xLX1NFTEVDVCk7CisJfQkJCS8vIGlmKGRhdGFbMF09PTB8fGRhdGFbMF09PTF8fGRhdGFbMF09PTIpCisJZWxzZSB7CisJCWlmIChkYXRhWzBdICE9IDMpIHsKKwkJCXByaW50aygiXG5UaGUgb3B0aW9uIGZvciBpbnB1dCBjbG9jayBzZWxlY3Rpb24gZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIGlmKGRhdGFbMF0hPTMpCisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTB8fGRhdGFbMF09PTF8fGRhdGFbMF09PTIpCisJLy9TZWxlY3QgdGhlIGNvdW50ZXIvdGltZXIKKwlzd2l0Y2ggKGRhdGFbMV0pIHsKKwljYXNlIENPVU5URVIxOgorCQkvL3NlbGVjdGluZyBjb3VudGVyIG9yIHRpbWVyCisJCXN3aXRjaCAoZGF0YVsyXSkgeworCQljYXNlIDA6CisJCQlkYXRhWzJdID0gQVBDSTE1MDBfQ09VTlRFUjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzJdID0gQVBDSTE1MDBfVElNRVI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIGNob2ljZSBpcyBub3QgYSB0aW1lciBub3IgYSBjb3VudGVyXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVsyXSkKKworCQkvL1NlbGVjdGluZyAgc2luZ2xlIG9yIGNvbnRpbnVvdXMgbW9kZQorCQlzd2l0Y2ggKGRhdGFbNF0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVs0XSA9IEFQQ0kxNTAwX0NPTlRJTlVPVVM7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVs0XSA9IEFQQ0kxNTAwX1NJTkdMRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgb3B0aW9uIGZvciBzaW5nbGUvY29udGludW91cyBtb2RlIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVs0XSkKKworCQlpX1RpbWVyQ291bnRlck1vZGUgPSBkYXRhWzJdIHwgZGF0YVs0XSB8IDc7CisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIHJlbG9hZCB2YWx1ZSAqLworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVszXSA+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpIHsKKwkJCWlmIChkYXRhWzddID09IEFQQ0kxNTAwX0VOQUJMRQorCQkJCXx8IGRhdGFbN10gPT0gQVBDSTE1MDBfRElTQUJMRSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9NT0RFX1NQRUNJRklDQVRJT04sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBtb2RlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9UaW1lckNvdW50ZXJNb2RlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9USU1FX0NTVF9MT1csCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGxvdyB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9USU1FX0NTVF9ISUdILAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgaGlnaCB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRhdGFbM10gPSBkYXRhWzNdID4+IDg7CisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWRzIHRoZSByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEVuYWJsZXMgdGltZXIvY291bnRlciAxIGFuZCB0cmlnZ2VycyB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uIHwgMHg0MDsKKworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9NYXN0ZXJDb25maWd1cmF0aW9uLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyIG9mICAgICAqLworCQkJCS8qIHRpbWVyL2NvdW50ZXIgMSAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGlzYWJsZSB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoMHgwLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyByZWdpc3RlciBvZiAgICAgKi8KKwkJCQkvKiB0aW1lci9jb3VudGVyIDEgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUcmlnZ2VyIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YigweDIsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJfQkvL2lmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgaW50ZXJydXB0IGVuYWJsZSBvciBkaXNhYmxlXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9lbHNlaWYoZGF0YVs3XT09IEFQQ0kxNTAwX0VOQUJMRSB8fGRhdGFbN109PSBBUENJMTUwMF9ESVNBQkxFKQorCQl9CQkvLyBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiByZWxvYWQgdmFsdWVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPSBkYXRhWzddOworCQlpX1RpbWVyQ291bnRlcjFJbml0ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIENPVU5URVIyOgkJLy9zZWxlY3RpbmcgY291bnRlciBvciB0aW1lcgorCQlzd2l0Y2ggKGRhdGFbMl0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX0NPVU5URVI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX1RJTUVSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgaXMgbm90IGEgdGltZXIgbm9yIGEgY291bnRlclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMl0pCisKKwkJLy9TZWxlY3RpbmcgIHNpbmdsZSBvciBjb250aW51b3VzIG1vZGUKKwkJc3dpdGNoIChkYXRhWzRdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9DT05USU5VT1VTOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9TSU5HTEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIG9wdGlvbiBmb3Igc2luZ2xlL2NvbnRpbnVvdXMgbW9kZSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbNF0pCisKKwkJLy9TZWxlY3RpbmcgIHNvZnR3YXJlIG9yIGhhcmR3YXJlIHRyaWdnZXIKKwkJc3dpdGNoIChkYXRhWzVdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNV0gPSBBUENJMTUwMF9TT0ZUV0FSRV9UUklHR0VSOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNV0gPSBBUENJMTUwMF9IQVJEV0FSRV9UUklHR0VSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgZm9yIHNvZnR3YXJlIG9yIGhhcmR3YXJlIHRyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzVdKQorCisJCS8vU2VsZWN0aW5nICBzb2Z0d2FyZSBvciBoYXJkd2FyZSBnYXRlCisJCXN3aXRjaCAoZGF0YVs2XSkgeworCQljYXNlIDA6CisJCQlkYXRhWzZdID0gQVBDSTE1MDBfU09GVFdBUkVfR0FURTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzZdID0gQVBDSTE1MDBfSEFSRFdBUkVfR0FURTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgY2hvaWNlIGZvciBzb2Z0d2FyZSBvciBoYXJkd2FyZSBnYXRlIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVs2XSkKKworCQlpX1RpbWVyQ291bnRlck1vZGUgPSBkYXRhWzJdIHwgZGF0YVs0XSB8IGRhdGFbNV0gfCBkYXRhWzZdIHwgNzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgcmVsb2FkIHZhbHVlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVszXSA+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpIHsKKwkJCWlmIChkYXRhWzddID09IEFQQ0kxNTAwX0VOQUJMRQorCQkJCXx8IGRhdGFbN10gPT0gQVBDSTE1MDBfRElTQUJMRSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9NT0RFX1NQRUNJRklDQVRJT04sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBtb2RlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9UaW1lckNvdW50ZXJNb2RlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9USU1FX0NTVF9MT1csCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGxvdyB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9USU1FX0NTVF9ISUdILAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgaGlnaCB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRhdGFbM10gPSBkYXRhWzNdID4+IDg7CisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWRzIHRoZSByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEVuYWJsZXMgdGltZXIvY291bnRlciAyIGFuZCB0cmlnZ2VycyB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uIHwgMHgyMDsKKworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9NYXN0ZXJDb25maWd1cmF0aW9uLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyIG9mICAgICAqLworCQkJCS8qIHRpbWVyL2NvdW50ZXIgMiAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGlzYWJsZSB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoMHgwLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyByZWdpc3RlciBvZiAgICAgKi8KKwkJCQkvKiB0aW1lci9jb3VudGVyIDIgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUcmlnZ2VyIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YigweDIsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJfQkvL2lmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgaW50ZXJydXB0IGVuYWJsZSBvciBkaXNhYmxlXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9lbHNlaWYoZGF0YVs3XT09IEFQQ0kxNTAwX0VOQUJMRSB8fGRhdGFbN109PSBBUENJMTUwMF9ESVNBQkxFKQorCQl9CQkvLyBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiByZWxvYWQgdmFsdWVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPSBkYXRhWzddOworCQlpX1RpbWVyQ291bnRlcjJJbml0ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIENPVU5URVIzOgkJLy9zZWxlY3RpbmcgY291bnRlciBvciB3YXRjaGRvZworCQlzd2l0Y2ggKGRhdGFbMl0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX0NPVU5URVI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX1dBVENIRE9HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgaXMgbm90IGEgd2F0Y2hkb2cgbm9yIGEgY291bnRlclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMl0pCisKKwkJLy9TZWxlY3RpbmcgIHNpbmdsZSBvciBjb250aW51b3VzIG1vZGUKKwkJc3dpdGNoIChkYXRhWzRdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9DT05USU5VT1VTOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9TSU5HTEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIG9wdGlvbiBmb3Igc2luZ2xlL2NvbnRpbnVvdXMgbW9kZSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbNF0pCisKKwkJLy9TZWxlY3RpbmcgIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGdhdGUKKwkJc3dpdGNoIChkYXRhWzZdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNl0gPSBBUENJMTUwMF9TT0ZUV0FSRV9HQVRFOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNl0gPSBBUENJMTUwMF9IQVJEV0FSRV9HQVRFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgZm9yIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGdhdGUgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzZdKQorCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB1c2VkIGZvciB3YXRjaGRvZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfV0FUQ0hET0cpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogLSBFbmFibGVzIHRoZSBvdXRwdXQgbGluZSAqLworCQkJLyogLSBFbmFibGVzIHJldHJpZ2dlciAgICAgICAqLworCQkJLyogLSBQdWxzZXMgb3V0cHV0ICAgICAgICAgICAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX1RpbWVyQ291bnRlck1vZGUgPSBkYXRhWzJdIHwgZGF0YVs0XSB8IDB4NTQ7CisJCX0JCS8vaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfV0FUQ0hET0cpCisJCWVsc2UgeworCQkJaV9UaW1lckNvdW50ZXJNb2RlID0gZGF0YVsyXSB8IGRhdGFbNF0gfCBkYXRhWzZdIHwgNzsKKwkJfQkJLy9lbHNlaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfV0FUQ0hET0cpCisJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSByZWxvYWQgdmFsdWUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkYXRhWzNdID49IDApICYmIChkYXRhWzNdIDw9IDY1NTM1KSkgeworCQkJaWYgKGRhdGFbN10gPT0gQVBDSTE1MDBfRU5BQkxFCisJCQkJfHwgZGF0YVs3XSA9PSBBUENJMTUwMF9ESVNBQkxFKSB7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgcmVnaXN0ZXIgb2Ygd2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX01PREVfU1BFQ0lGSUNBVElPTiwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgbmV3IG1vZGUgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihpX1RpbWVyQ291bnRlck1vZGUsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29uc3RhbnQgcmVnaXN0ZXIgb2Ygd2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX1RJTUVfQ1NUX0xPVywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgbG93IHZhbHVlICAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKGRhdGFbM10sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29uc3RhbnQgcmVnaXN0ZXIgb2Ygd2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX1RJTUVfQ1NUX0hJR0gsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBoaWdoIHZhbHVlICAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGF0YVszXSA9IGRhdGFbM10gPj4gODsKKwkJCQlvdXRiKGRhdGFbM10sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZHMgdGhlIHJlZ2lzdGVyICovCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfTWFzdGVyQ29uZmlndXJhdGlvbiA9CisJCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRW5hYmxlcyB3YXRjaGRvZy9jb3VudGVyIDMgYW5kIHRyaWdnZXJzIHdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gfCAweDEwOworCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwkJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihpX01hc3RlckNvbmZpZ3VyYXRpb24sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgQ09VTlRFUiAqLworCQkJCQkgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpZiAoZGF0YVsyXSA9PSBBUENJMTUwMF9DT1VOVEVSKSB7CisKKwkJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIHJlZ2lzdGVyIG9mICAgKi8KKwkJCQkJLyogd2F0Y2hkb2cvY291bnRlciAzICAgICAgICAgICAgICAgICovCisJCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgdGhlICB3YXRjaGRvZy9jb3VudGVyIDMgYW5kIHN0YXJ0cyBpdCAqLworCQkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweDAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgb2YgICAqLworCQkJCQkvKiB3YXRjaGRvZy9jb3VudGVyIDMgICAgICAgICAgICAgICAgKi8KKwkJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUcmlnZ2VyIHRoZSAgd2F0Y2hkb2cvY291bnRlciAzIGFuZCBzdGFydHMgaXQgKi8KKwkJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweDIsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQl9CS8vZWxzZWlmKGRhdGFbMl09PUFQQ0kxNTAwX0NPVU5URVIpCisKKwkJCX0JLy9pZihkYXRhWzddPT0gQVBDSTE1MDBfRU5BQkxFIHx8ZGF0YVs3XT09IEFQQ0kxNTAwX0RJU0FCTEUpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIGludGVycnVwdCBlbmFibGUgb3IgZGlzYWJsZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vZWxzZWlmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJfQkJLy8gaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgcmVsb2FkIHZhbHVlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQlpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gZGF0YVs3XTsKKwkJaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgY291bnRlclx0aW1lciBvcHRpb24gZG9lcyBub3QgZXhpc3RcbiIpOworCX0JCQkvL3N3aXRjaChkYXRhWzFdKQorCWlfQ291bnRlckxvZ2ljID0gZGF0YVsyXTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZyAgICAgIHwKK3wJCQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7ICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIG9yIHRyaWdnZXIgdGhlIHRpbWVyIGNvdW50ZXIgb3IgV2F0Y2hkb2cgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcjEvVGltZXIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIENvdW50ZXIyL1RpbWVyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBDb3VudGVyMy9XYXRjaGRvZworICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICAgICAgOiAwICAgICBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBzdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgIFRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBUaW1lci9XYXRjaGRvZworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBDT1VOVEVSMToKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgU1RBUlQ6CisJCQlpZiAoaV9UaW1lckNvdW50ZXIxSW5pdCA9PSAxKSB7CisJCQkJaWYgKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPT0gMSkgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzQ7CS8vRW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vIGlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhFNDsJLy9kaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdGFydHMgdGltZXIvY291bnRlciAxICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpX1RpbWVyQ291bnRlcjFFbmFibGVkID0gMTsKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5Db3VudGVyL1RpbWVyMSBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNUT1A6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU3RvcCB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoMHgwMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9UaW1lckNvdW50ZXIxRW5hYmxlZCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIFRSSUdHRVI6CisJCQlpZiAoaV9UaW1lckNvdW50ZXIxSW5pdCA9PSAxKSB7CisJCQkJaWYgKGlfVGltZXJDb3VudGVyMUVuYWJsZWQgPT0gMSkgeworCQkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNldCBUcmlnZ2VyIGFuZCBnYXRlICovCisJCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4NjsKKwkJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMUVuYWJsZWQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgVHJpZ2dlciAqLworCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4MjsKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyMUVuYWJsZWQ9PTEpCisKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5Db3VudGVyL1RpbWVyMSBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgb3B0aW9uIGZvciBzdGFydC9zdG9wL3RyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vc3dpdGNoKGRhdGFbMV0pCisJCWJyZWFrOworCisJY2FzZSBDT1VOVEVSMjoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgU1RBUlQ6CisJCQlpZiAoaV9UaW1lckNvdW50ZXIySW5pdCA9PSAxKSB7CisJCQkJaWYgKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPT0gMSkgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzQ7CS8vRW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vIGlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhFNDsJLy9kaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdGFydHMgdGltZXIvY291bnRlciAyICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpX1RpbWVyQ291bnRlcjJFbmFibGVkID0gMTsKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5Db3VudGVyL1RpbWVyMiBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNUT1A6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU3RvcCB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoMHgwMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBUUklHR0VSOgorCQkJaWYgKGlfVGltZXJDb3VudGVyMkluaXQgPT0gMSkgeworCQkJCWlmIChpX1RpbWVyQ291bnRlcjJFbmFibGVkID09IDEpIHsKKwkJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgVHJpZ2dlciBhbmQgZ2F0ZSAqLworCQkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDY7CisJCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjJFbmFibGVkPT0xKQorCQkJCWVsc2UgeworCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IFRyaWdnZXIgKi8KKwkJCQkJCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDI7CisJCQkJfQkvL2Vsc2VpZihpX1RpbWVyQ291bnRlcjJFbmFibGVkPT0xKQorCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuQ291bnRlci9UaW1lcjIgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhlIHNwZWNpZmllZCBvcHRpb24gZm9yIHN0YXJ0L3N0b3AvdHJpZ2dlciBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9zd2l0Y2goZGF0YVsxXSkKKwkJYnJlYWs7CisJY2FzZSBDT1VOVEVSMzoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgU1RBUlQ6CisJCQlpZiAoaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9PSAxKSB7CisKKwkJCQlpZiAoaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdCA9PSAxKSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhDNDsJLy9FbmFibGUgdGhlIGludGVycnVwdAorCQkJCX0JLy8gaWYoaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdD09MSkKKwkJCQllbHNlIHsKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEU0OwkvL2Rpc2FibGUgdGhlIGludGVycnVwdAorCQkJCX0JLy9lbHNlaWYoaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdD09MSkKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFN0YXJ0cyBXYXRjaGRvZy9jb3VudGVyIDMgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlfV2F0Y2hkb2dDb3VudGVyM0VuYWJsZWQgPSAxOworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCW91dGIoaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQl9CS8vIGlmKCBpX1dhdGNoZG9nQ291bnRlcjNpbml0PT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcbldhdGNoZG9nL0NvdW50ZXIzIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1RPUDoKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTdG9wIFdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YigweDAwLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJJR0dFUjoKKwkJCXN3aXRjaCAoZGF0YVsyXSkgeworCQkJY2FzZSAwOgkvL3RyaWdnZXJpbmcgY291bnRlciAzCisJCQkJaWYgKGlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPT0gMSkgeworCQkJCQlpZiAoaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZCA9PSAxKSB7CisJCQkJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTZXQgVHJpZ2dlciBhbmQgZ2F0ZSAqLworCQkJCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4NjsKKwkJCQkJfQkvL2lmKCBpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkPT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCQkJCQkJLyogU2V0IFRyaWdnZXIgKi8KKwkJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCisJCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4MjsKKwkJCQkJfQkvL2Vsc2VpZihpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkPT0xKQorCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCX0JLy9pZiggaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdD09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkNvdW50ZXIzIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCS8vdHJpZ2dlcmluZyBXYXRjaGRvZyAzCisJCQkJaWYgKGlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPT0gMSkgeworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlvdXRiKDB4NiwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQl9CS8vaWYoIGlfV2F0Y2hkb2dDb3VudGVyM0luaXQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5XYXRjaGRvZyAzIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIlxuV3JvbmcgY2hvaWNlIG9mIHdhdGNoZG9nL2NvdW50ZXIzXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9zd2l0Y2goZGF0YVsyXSkKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgb3B0aW9uIGZvciBzdGFydC9zdG9wL3RyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vc3dpdGNoKGRhdGFbMV0pCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGNob2ljZSBmb3IgY291bnRlci93YXRjaGRvZy90aW1lciBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL3N3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfUmVhZENvdW50ZXJUaW1lcldhdGNoZG9nICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcjEvVGltZXIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIENvdW50ZXIyL1RpbWVyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBDb3VudGVyMy9XYXRjaGRvZworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTUwMF9SZWFkQ291bnRlclRpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIENPVU5URVIxOgorCQkvL1JlYWQgY291bnRlci90aW1lcjEKKwkJaWYgKGlfVGltZXJDb3VudGVyMUluaXQgPT0gMSkgeworCQkJaWYgKGlfVGltZXJDb3VudGVyMUVuYWJsZWQgPT0gMSkgeworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFJDQyBhbmQgZ2F0ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgUkNDICovCisJCSAgICAvKioqKioqKioqKioqKioqLworCisJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDg7CisJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvdW50ZXIgcmVnaXN0ZXIgKGhpZ2gpICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SX0NQVF9UTVIxX1ZBTFVFX0hJR0gsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPQorCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9IGRhdGFbMF0gPDwgODsKKwkJCWRhdGFbMF0gPSBkYXRhWzBdICYgMHhmZjAwOworCQkJb3V0YihBUENJMTUwMF9SX0NQVF9UTVIxX1ZBTFVFX0xPVywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9CisJCQkJZGF0YVswXSB8IGluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQl9CQkvL2lmKCBpX1RpbWVyQ291bnRlcjFJbml0PT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaW1lci9Db3VudGVyMSBub3QgY29uZmlndXJlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlaWYoIGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisJCWJyZWFrOworCWNhc2UgQ09VTlRFUjI6CisJCS8vUmVhZCBjb3VudGVyL3RpbWVyMgorCQlpZiAoaV9UaW1lckNvdW50ZXIySW5pdCA9PSAxKSB7CisJCQlpZiAoaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9PSAxKSB7CisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgUkNDIGFuZCBnYXRlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhDOworCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjJJbml0PT0xKQorCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBSQ0MgKi8KKwkJICAgIC8qKioqKioqKioqKioqKiovCisKKwkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4ODsKKwkJCX0JLy9lbHNlaWYoaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY291bnRlciByZWdpc3RlciAoaGlnaCkgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JfQ1BUX1RNUjJfVkFMVUVfSElHSCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0gZGF0YVswXSA8PCA4OworCQkJZGF0YVswXSA9IGRhdGFbMF0gJiAweGZmMDA7CisJCQlvdXRiKEFQQ0kxNTAwX1JfQ1BUX1RNUjJfVkFMVUVfTE9XLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0KKwkJCQlkYXRhWzBdIHwgaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCX0JCS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRpbWVyL0NvdW50ZXIyIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2VpZiggaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKwkJYnJlYWs7CisJY2FzZSBDT1VOVEVSMzoKKwkJLy9SZWFkIGNvdW50ZXIvd2F0Y2hkb2cyCisJCWlmIChpX1dhdGNoZG9nQ291bnRlcjNJbml0ID09IDEpIHsKKwkJCWlmIChpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID09IDEpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBSQ0MgYW5kIGdhdGUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEM7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFJDQyAqLworCQkgICAgLyoqKioqKioqKioqKioqKi8KKworCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHg4OworCQkJfQkvL2Vsc2VpZihpX1dhdGNoZG9nQ291bnRlcjNJbml0PT0xKQorCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb3VudGVyIHJlZ2lzdGVyIChoaWdoKSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9ISUdILAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0KKwkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPSBkYXRhWzBdIDw8IDg7CisJCQlkYXRhWzBdID0gZGF0YVswXSAmIDB4ZmYwMDsKKwkJCW91dGIoQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9MT1csCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPQorCQkJCWRhdGFbMF0gfCBpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJfQkJLy9pZiggaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuV2F0Y2hkb2dDb3VudGVyMyBub3QgY29uZmlndXJlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlaWYoIGlfV2F0Y2hkb2dDb3VudGVyM0luaXQ9PTEpCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgY2hvaWNlIG9mIHRpbWVyL2NvdW50ZXIvd2F0Y2hkb2cgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVswXSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50ICBpX0FQQ0kxNTAwX1JlYWRJbnRlcnJ1cHRNYXNrICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgaW50ZXJydXB0IG1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQlkYXRhWzBdOlRoZSBpbnRlcnJ1cHQgbWFzayB2YWx1ZQkJCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV06Q2hhbm5lbCBubworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTE1MDBfUmVhZEludGVycnVwdE1hc2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBpX0ludGVycnVwdE1hc2s7CisJZGF0YVsxXSA9IGlfSW5wdXRDaGFubmVsOworCWlfSW50ZXJydXB0TWFzayA9IDA7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgIGlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIHRoZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciAgICAgICAgICAgICAgICAgfAorCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUwMF9Db25maWd1cmVJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfU3RhdHVzOworCWludCBpX1JlZ1ZhbHVlOworCWludCBpX0NvbnN0YW50OworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQlpX0NvbnN0YW50ID0gMHhDMDsKKwl9CQkJLy9pZihkYXRhWzBdPT0xKQorCWVsc2UgeworCQlpZiAoZGF0YVswXSA9PSAwKSB7CisJCQlpX0NvbnN0YW50ID0gMHgwMDsKKwkJfQkJLy9pZntkYXRhWzBdPT0wKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaGUgcGFyYW1ldGVyIHBhc3NlZCB0byBkcml2ZXIgaXMgaW4gZXJyb3IgZm9yIGVuYWJsaW5nIHRoZSB2b2x0YWdlIGludGVycnVwdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlIGlmKGRhdGFbMF09PTApCisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTEpCisKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfUmVnVmFsdWUgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlcyB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKEFQQ0kxNTAwX09SKSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweEY5KSB8IEFQQ0kxNTAwX09SOworCisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKyAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBBdXRob3Jpc2VzIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHhDMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihpX0NvbnN0YW50LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgcGF0dGVybiB0cmFuc2l0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX1RSQU5TSVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoaV9Db25zdGFudCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIHBhdHRlcm4gbWFzayByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9NQVNLLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKGlfQ29uc3RhbnQsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgcG9ydCBBICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwlvdXRiKGlfUmVnVmFsdWUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCAgQiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfUmVnVmFsdWUgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiBwb3J0IEIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCW91dGIoaV9SZWdWYWx1ZSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMSAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMiAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfUmVnVmFsdWUgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiB0aW1lciAzICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwlvdXRiKGlfUmVnVmFsdWUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQXV0aG9yaXplcyB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigweEQwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBFbmFibGVzIHRoZSBQQ0kgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bCgweDMwMDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCXVpX1N0YXR1cyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDEwKTsKKwl1aV9TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisJb3V0bCgweDIzMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogc3RhdGljIHZvaWQgdl9BUENJMTUwMF9JbnRlcnJ1cHQJCQkJCSAgICAgfAorfAkJCQkJICAoaW50IGlycSAsIHZvaWQgKmQpICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGludCBpcnEgICAgICAgICAgICAgICAgIDogaXJxIG51bWJlciAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZCAgICAgICAgICAgICAgICAgOiB2b2lkIHBvaW50ZXIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitzdGF0aWMgdm9pZCB2X0FQQ0kxNTAwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJVUlOVCB1aV9JbnRlcnJ1cHRTdGF0dXMgPSAwOworCWludCBpX1JlZ1ZhbHVlID0gMDsKKwlpX0ludGVycnVwdE1hc2sgPSAwOworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlYWQgdGhlIGJvYXJkIGludGVycnVwdCBzdGF0dXMgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfSW50ZXJydXB0U3RhdHVzID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBib2FyZCBnZW5lcmF0ZWQgYSBpbnRlcnJ1cHQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoKHVpX0ludGVycnVwdFN0YXR1cyAmIDB4ODAwMDAwKSA9PSAweDgwMDAwMCkgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGlzYWJsZSBhbGwgSW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8vb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsZGV2cHJpdi0+aW9iYXNlK0FQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEaXNhYmxlcyAgdGhlIG1haW4gaW50ZXJydXB0IG9uIHRoZSBib2FyZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL291dGIoMHgwMCxkZXZwcml2LT5pb2Jhc2UrQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaV9SZWdWYWx1ZSA9CisJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiBwb3J0IEEgKi8KKwkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCAxOworCQkJaWYgKGlfTG9naWMgPT0gQVBDSTE1MDBfT1JfUFJJT1JJVFkpIHsKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlpX1JlZ1ZhbHVlID0KKwkJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfSU5URVJSVVBUX0NPTlRST0wsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCWlfUmVnVmFsdWUgPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQlpX0lucHV0Q2hhbm5lbCA9IDEgKyAoaV9SZWdWYWx1ZSA+PiAxKTsKKworCQkJfQkvLyBpZihpX0xvZ2ljPT1BUENJMTUwMF9PUl9QUklPUklUWSkKKwkJCWVsc2UgeworCQkJCWlfSW5wdXRDaGFubmVsID0gMDsKKwkJCX0JLy9lbHNlaWYoaV9Mb2dpYz09QVBDSTE1MDBfT1JfUFJJT1JJVFkpCisJCX0JCS8vIGlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApCisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgcG9ydCBCICovCisJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCXByaW50aygiXG5cblxuIik7CisJICAgICAvKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWRzIHBvcnQgQiAqLworCSAgICAgLyoqKioqKioqKioqKioqKiovCisJCQlpX1JlZ1ZhbHVlID0KKwkJCQlpbmIoKFVJTlQpIGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfUE9SVF9CKTsKKworCQkJaV9SZWdWYWx1ZSA9IGlfUmVnVmFsdWUgJiAweEMwOworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3RzIGlmIHRoaXMgaXMgYW4gZXh0ZXJuYWwgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChpX1JlZ1ZhbHVlKSB7CisJCQkJLy9EaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisKKwkJCQlpZiAoaV9SZWdWYWx1ZSAmIDB4ODApIHsKKwkJCQkJaV9JbnRlcnJ1cHRNYXNrID0KKwkJCQkJCWlfSW50ZXJydXB0TWFzayB8IDB4NDA7CisJCQkJfQkvL2lmIChpX1JlZ1ZhbHVlICYgMHg4MCkKKworCQkJCWlmIChpX1JlZ1ZhbHVlICYgMHg0MCkgeworCQkJCQlpX0ludGVycnVwdE1hc2sgPQorCQkJCQkJaV9JbnRlcnJ1cHRNYXNrIHwgMHg4MDsKKwkJCQl9CS8vaWYgKGlfUmVnVmFsdWUgJiAweDQwKQorCQkJfQkvLyBpZiAoaV9SZWdWYWx1ZSkKKwkJCWVsc2UgeworCQkJCWlfSW50ZXJydXB0TWFzayA9IGlfSW50ZXJydXB0TWFzayB8IDI7CisJCQl9CS8vIGlmIChpX1JlZ1ZhbHVlKQorCQl9CQkvL2lmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDEgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCA0OworCQl9CQkvLyBpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlfUmVnVmFsdWUgPQorCQkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKSB7CisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMiAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWlfSW50ZXJydXB0TWFzayA9IGlfSW50ZXJydXB0TWFzayB8IDg7CisJCX0JCS8vIGlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDMgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpZiAoaV9Db3VudGVyTG9naWMgPT0gQVBDSTE1MDBfQ09VTlRFUikgeworCQkJCWlfSW50ZXJydXB0TWFzayA9IGlfSW50ZXJydXB0TWFzayB8IDB4MTA7CisJCQl9CS8vaWYoaV9Db3VudGVyTG9naWM9PUFQQ0kxNTAwX0NPVU5URVIpCisJCQllbHNlIHsKKwkJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCAweDIwOworCQkJfQorCQl9CQkvLyBpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CS8vIHNlbmQgc2lnbmFsIHRvIHRoZSBzYW1wbGUKKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBFbmFibGUgYWxsIEludGVycnVwdHMgKi8KKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBBdXRob3JpemVzIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoMHhEMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJfQkJCS8vICBpZiAoKHVpX0ludGVycnVwdFN0YXR1cyAmIDB4ODAwMDAwKSA9PSAweDgwMDAwMCkKKwllbHNlIHsKKwkJcHJpbnRrKCJcbkludGVycnVwdCBmcm9tIHVua25vd24gc291cmNlXG4iKTsKKworCX0JCQkvL2Vsc2UgaWYgKCh1aV9JbnRlcnJ1cHRTdGF0dXMgJiAweDgwMDAwMCkgPT0gMHg4MDAwMDApCisJcmV0dXJuOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpX0R1bW15UmVhZCA9IDA7CisJaV9UaW1lckNvdW50ZXIxSW5pdCA9IDA7CisJaV9UaW1lckNvdW50ZXIySW5pdCA9IDA7CisJaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9IDA7CisJaV9FdmVudDFTdGF0dXMgPSAwOworCWlfRXZlbnQyU3RhdHVzID0gMDsKKwlpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gMDsKKwlpX0xvZ2ljID0gMDsKKwlpX0NvdW50ZXJMb2dpYyA9IDA7CisJaV9JbnRlcnJ1cHRNYXNrID0gMDsKKwlpX0lucHV0Q2hhbm5lbCA9IDA7OworCWlfVGltZXJDb3VudGVyMUVuYWJsZWQgPSAwOworCWlfVGltZXJDb3VudGVyMkVuYWJsZWQgPSAwOworCWlfV2F0Y2hkb2dDb3VudGVyM0VuYWJsZWQgPSAwOworCisgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkvKiBTb2Z0d2FyZSByZXNldCAqLworICAgIC8qKioqKioqKioqKioqKioqKiovCisJaV9EdW1teVJlYWQgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX0R1bW15UmVhZCA9IGluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigweEY0LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHgxMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIHBhdGggcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEhpZ2ggbGV2ZWwgb2YgcG9ydCBBIG1lYW5zIDEgKi8KKwlvdXRiKDB4RkYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyogU2VsZWN0cyB0aGUgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfREFUQV9ESVJFQ1RJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEFsbCBiaXRzIHVzZWQgYXMgaW5wdXRzICovCisJb3V0YigweEZGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qICBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgcG9ydCBBOiAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGhhbmRzaGFrZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0hBTkRTSEFLRV9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIHRoZSByZWdpc3RlciAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHgxMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgZGF0YSBwYXRoIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBIGhpZ2ggbGV2ZWwgb2YgcG9ydCBCIG1lYW5zIDEgKi8KKwlvdXRiKDB4N0YsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyAqLworCW91dGIoMHhGRiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgcG9ydCBCOiAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBoYW5kc2hha2Ugc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyB0aGUgcmVnaXN0ZXIgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGRhdGEgcGF0aCBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEMgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0NfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEhpZ2ggbGV2ZWwgb2YgcG9ydCBDIG1lYW5zIDEgKi8KKwlvdXRiKDB4OSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0NfREFUQV9ESVJFQ1RJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEFsbCBiaXRzIHVzZWQgYXMgaW5wdXRzIGV4Y2VwdCBjaGFubmVsIDEgKi8KKwlvdXRiKDB4MEUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIHNwZWNpYWwgSU8gcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0NfU1BFQ0lBTF9JT19DT05UUk9MLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIGl0ICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIHRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCBvZiB0aW1lciAxICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMiAqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgVGltZXIgMiBpbnRlcnJ1cHQgbWFuYWdlbWVudDogICAgICAgICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAzICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgVGltZXIgMyAqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgdGltZXIgMzogICAgICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBhbGwgaW50ZXJydXB0cyAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLy9yZXNldCBhbGwgdGhlIGRpZ2l0YWwgb3V0cHV0cworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MDBfRElHSVRBTF9PUCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERpc2FibGUgdGhlIGJvYXJkIGludGVycnVwdCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYWN0aXZhdGVzIGFsbCBpbnRlcnJ1cHRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYWN0aXZhdGVzIGFsbCBpbnRlcnJ1cHRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVhY3RpdmF0ZXMgYWxsIGludGVycnVwdHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigweDAwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAzKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTYwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0xNTAwIGNhcmQgICoqKioqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kxNTAwX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgMHgxMGU4CisjZGVmaW5lIEFQQ0kxNTAwX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgIDQKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSAgQVBDSTE1MDBfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTIKKyNkZWZpbmUgIEFQQ0kxNTAwX0RJR0lUQUxfSVAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIEFQQ0kxNTAwX0FORCAgICAgICAgICAgICAgIAkJICAgIDIKKyNkZWZpbmUgIEFQQ0kxNTAwX09SICAgICAgICAgICAgICAgIAkJICAgIDQKKyNkZWZpbmUgIEFQQ0kxNTAwX09SX1BSSU9SSVRZICAgICAgIAkJICAgIDYKKyNkZWZpbmUgIEFQQ0kxNTAwX0NMS19TRUxFQ1QgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIENPVU5URVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIENPVU5URVIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgIENPVU5URVIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgIEFQQ0kxNTAwX0NPVU5URVIgICAgICAgICAgICAgICAgCQkweDIwCisjZGVmaW5lICBBUENJMTUwMF9USU1FUiAgICAgICAgICAgICAgICAgIAkJMAorI2RlZmluZSAgQVBDSTE1MDBfV0FUQ0hET0cgICAgICAgICAgCQkgICAgMAorI2RlZmluZSAgQVBDSTE1MDBfU0lOR0xFICAgICAgICAgICAgCQkgICAgMAorI2RlZmluZSAgQVBDSTE1MDBfQ09OVElOVU9VUyAgICAgICAgCQkgICAgMHg4MAorI2RlZmluZSAgQVBDSTE1MDBfRElTQUJMRSAgICAgICAgICAgICAgICAJCTAKKyNkZWZpbmUgIEFQQ0kxNTAwX0VOQUJMRSAgICAgICAgICAgICAgICAJCTEKKyNkZWZpbmUgIEFQQ0kxNTAwX1NPRlRXQVJFX1RSSUdHRVIgIAkJICAgIDB4NAorI2RlZmluZSAgQVBDSTE1MDBfSEFSRFdBUkVfVFJJR0dFUiAgCQkgICAgMHgxMAorI2RlZmluZSAgQVBDSTE1MDBfU09GVFdBUkVfR0FURSAgICAgCQkgICAgMAorI2RlZmluZSAgQVBDSTE1MDBfSEFSRFdBUkVfR0FURSAgICAgCQkgICAgMHg4CisjZGVmaW5lICBTVEFSVCAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgMAorI2RlZmluZSAgU1RPUCAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgMQorI2RlZmluZSAgVFJJR0dFUiAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgMgorCisvKgorICogWmlsbG9nIEkvTyBlbnVtZXJhdGlvbgorICovCitlbnVtIHsKKwlBUENJMTUwMF9aODUzNl9QT1JUX0MsCisJQVBDSTE1MDBfWjg1MzZfUE9SVF9CLAorCUFQQ0kxNTAwX1o4NTM2X1BPUlRfQSwKKwlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSCit9OworCisvKgorICogWjg1MzYgQ0lPIEludGVybmFsIEFkZHJlc3MKKyAqLworZW51bSB7CisJQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCUFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJQVBDSTE1MDBfUldfUE9SVF9BX0lOVEVSUlVQVF9DT05UUk9MLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9JTlRFUlJVUFRfQ09OVFJPTCwKKwlBUENJMTUwMF9SV19USU1FUl9DT1VOVEVSX0lOVEVSUlVQVF9WRUNUT1IsCisJQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCUFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBX0RJUkVDVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0NfU1BFQ0lBTF9JT19DT05UUk9MLAorCisJQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwlBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwlBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9EQVRBLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBLAorCUFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBLAorCisJQVBDSTE1MDBfUl9DUFRfVE1SMV9WQUxVRV9ISUdILAorCUFQQ0kxNTAwX1JfQ1BUX1RNUjFfVkFMVUVfTE9XLAorCUFQQ0kxNTAwX1JfQ1BUX1RNUjJfVkFMVUVfSElHSCwKKwlBUENJMTUwMF9SX0NQVF9UTVIyX1ZBTFVFX0xPVywKKwlBUENJMTUwMF9SX0NQVF9UTVIzX1ZBTFVFX0hJR0gsCisJQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjFfVElNRV9DU1RfSElHSCwKKwlBUENJMTUwMF9SV19DUFRfVE1SMV9USU1FX0NTVF9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjJfVElNRV9DU1RfSElHSCwKKwlBUENJMTUwMF9SV19DUFRfVE1SMl9USU1FX0NTVF9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjNfVElNRV9DU1RfSElHSCwKKwlBUENJMTUwMF9SV19DUFRfVE1SM19USU1FX0NTVF9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjFfTU9ERV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIyX01PREVfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19DUFRfVE1SM19NT0RFX1NQRUNJRklDQVRJT04sCisJQVBDSTE1MDBfUl9DVVJSRU5UX1ZFQ1RPUiwKKworCUFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0FfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfRElSRUNUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUFMX0lPX0NPTlRST0wsCisJQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fUE9MQVJJVFksCisJQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fVFJBTlNJVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0FfUEFUVEVSTl9NQVNLLAorCisJQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJQVBDSTE1MDBfUldfUE9SVF9CX0hBTkRTSEFLRV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwlBUENJMTUwMF9SV19QT1JUX0JfREFUQV9ESVJFQ1RJT04sCisJQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJQUxfSU9fQ09OVFJPTCwKKwlBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9QT0xBUklUWSwKKwlBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9UUkFOU0lUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX01BU0sKK307CisKKyAvKi0tLS0tLS0tLS1ESUdJVEFMIElOUFVULS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGlfQVBDSTE1MDBfSW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbElucHV0RXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworc3RhdGljIGludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcElucHV0RXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyotLS0tLS0tLS0tCURJR0lUQUwgT1VUUFVULS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9Db25maWdEaWdpdGFsT3V0cHV0RXJyb3JJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkJdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKi0tLS0tLS0tLS1USU1FUi0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBpX0FQQ0kxNTAwX0NvbmZpZ0NvdW50ZXJUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfU3RhcnRTdG9wVHJpZ2dlclRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJCSAgIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVhZENvdW50ZXJUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVhZEludGVycnVwdE1hc2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyotLS0tLS0tLS0tSU5URVJSVVBUIEhBTkRMRVItLS0tLS0qLworc3RhdGljIHZvaWQgdl9BUENJMTUwMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKy8qLS0tLS0tLS0tLVJFU0VULS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWU5YTkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5jCkBAIC0wLDAgKzEsNTQyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMTUxNiAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTE1MTYuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTE1MTYgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTE2LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9SZWFkMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBkaWdpdGFsIGlucHV0ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1MTZfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCVVJTlQgdWlfQ2hhbm5lbDsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDcpIHsKKwkJdWlfVG1wVmFsdWUgPSAoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfSVApOworCQkvLyAgc2luY2Ugb25seSAxIGNoYW5uZWwgcmVxZCAgdG8gYnJpbmcgaXQgdG8gbGFzdCBiaXQgaXQgaXMgcm90YXRlZAorCQkvLyAgOCArKGNoYW4gLSAxKSB0aW1lcyB0aGVuIEFORGVkIHdpdGggMSBmb3IgbGFzdCBiaXQuCisJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKwllbHNlIHsKKwkJLy9jb21lZGlfZXJyb3IoZGV2LCIgXG4gY2hhbiBzcGVjIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCX0JCQkvL2Vsc2UgaWYodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD03KQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9SZWFkTW9yZURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBSZXF1ZXN0ZWQgZGlnaXRhbCBpbnB1dHMgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9Qb3J0VmFsdWUgPSBkYXRhWzBdOworCVVJTlQgdWlfTWFzayA9IDA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbHM7CisKKwl1aV9Ob09mQ2hhbm5lbHMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCSpkYXRhID0gKFVJTlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX0lQKTsKKwlzd2l0Y2ggKHVpX05vT2ZDaGFubmVscykgeworCWNhc2UgMjoKKwkJdWlfTWFzayA9IDM7CisJCSpkYXRhID0gKCpkYXRhID4+ICgyICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQlicmVhazsKKwljYXNlIDQ6CisJCXVpX01hc2sgPSAxNTsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuV3JvbmcgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJYnJlYWs7CisJfQkJCS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfQ29uZmlnRGlnaXRhbE91dHB1dCAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgfAorfAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gIDoxOk1lbW9yeSBvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICAgICAgICAgICAgMDpNZW1vcnkgb2ZmICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gZGF0YVswXTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGVzIHBvcnQgdmFsdWUgIFRvIHRoZSBzZWxlY3RlZCBwb3J0ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wLCB1aV9UZW1wMTsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCisJcHJpbnRrKCJFTDMxMTAwMyA6IEA9JXhcbiIsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJcHJpbnRrKCJFTDMxMTAwMyA6IGQ9JWQgQD0leFxuIiwgZGF0YVswXSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA3OgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJCQkJcHJpbnRrKCJFTDMxMTAwMyA6IGQ9JWQgQD0leFxuIiwgZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQl9CQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCX0JCQkvL2lmKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4gMHhmZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJCXByaW50aygiRUwzMTEwMDMgOiBkPSVkIEA9JXhcbiIsIGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgNDoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZjsKKwkJCQkJCXVpX1RlbXAxID0gMTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgNCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDc6CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJCQlwcmludGsoIkVMMzExMDAzIDogZD0lZCBAPSV4XG4iLAorCQkJCQkJZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUxNl9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiAoaW5zbi0+bik7OworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUF9SVyk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAzOworCQkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiBkYXRhWzFdKSkgJiAxNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSA3OgorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy9pZih1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vZWxzZWlmKHVpX1RlbXA9PTEpCisJfQkJCS8vZWxzZWlmKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICB8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSA9PSAwKSB7CisJCS8vRGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJCWRhdGFbMV0gPSBkYXRhWzFdID4+IDE2OworCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSArIDIpOworCX0JCQkvL2lmKGRhdGFbMF09PTApCisJZWxzZSB7CisJCXByaW50aygiXG5UaGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9lbHNlaWYoZGF0YVswXT09MCkKKworCXJldHVybiBpbnNuLT5uOworfQorCisgLyoKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyAgICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6ICAgICAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAqLworCitpbnQgaV9BUENJMTUxNl9TdGFydFN0b3BXcml0ZVdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CQkvL3N0b3AgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAwMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dygweDAyMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gc3dpdGNoKGRhdGFbMF0pCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9SZWFkV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE1MTZfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gaW53KGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMTUxNl9XQVRDSERPR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTE2X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW91dHcoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsJLy9SRVNFVFMgVEhFIERJR0lUQUwgT1VUUFVUUworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJb3V0dygweDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMTUxNl9XQVRDSERPR19SRUxPQURfVkFMVUUpOworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICsgMik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4YmFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMTUxNiBjYXJkICAqKioqKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMTUxNl9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTVCOAorI2RlZmluZSBBUENJMTUxNl9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICAgICAgIDgKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJNAorI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX09QX1JXICAgICAgICAgICAgICAgICAJNAorI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMAorCisvLyBUSU1FUiBDT1VOVEVSIFdBVENIRE9HIERFRklORVMKKworI2RlZmluZSBBRERJREFUQV9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX09QX1dBVENIRE9HICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTUxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTE1MTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTE1MTZfV0FUQ0hET0dfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kxNTE2CisKKy8vRGlnaXRhbCBJbnB1dAorSU5UIGlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kxNTE2X1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRGlnaXRhbCBPdXRwdXQKK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1MTZfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMTUxNl9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL3Jlc2V0CitJTlQgaV9BUENJMTUxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI1MDRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5jCkBAIC0wLDAgKzEsMTEwNSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTE1NjQgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxNTY0LmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xNTY0ICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiaHdkcnZfYXBjaTE1NjQuaCIKKworLy9HbG9iYWwgdmFyaWFibGVzCitVSU5UIHVpX0ludGVycnVwdFN0YXR1c18xNTY0ID0gMDsKK1VJTlQgdWlfSW50ZXJydXB0RGF0YSwgdWlfVHlwZTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBpbnB1dCBTdWJkZXZpY2UgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDEgRW5hYmxlICBEaWdpdGFsIElucHV0IEludGVycnVwdCB8Cit8CQkJCQkJCQkgICAwIERpc2FibGUgRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgfAorfAkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMCBBRERJREFUQSBJbnRlcnJ1cHQgT1IgTE9HSUMJIHwKK3wJCQkJCQkJCSA6IDEgQURESURBVEEgSW50ZXJydXB0IEFORCBMT0dJQyAgICB8Cit8CQkJICBkYXRhWzJdCQkJIDogSW50ZXJydXB0IG1hc2sgZm9yIHRoZSBtb2RlIDEJIHwKK3wJCQkgIGRhdGFbM10JCQkgOiBJbnRlcnJ1cHQgbWFzayBmb3IgdGhlIG1vZGUgMgkgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgZGlnaXRhbCBpbnB1dCBsb2dpYyAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKSB7CisJCWRhdGFbMl0gPSBkYXRhWzJdIDw8IDQ7CisJCWRhdGFbM10gPSBkYXRhWzNdIDw8IDQ7CisJCW91dGwoZGF0YVsyXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEpOworCQlvdXRsKGRhdGFbM10sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwkJaWYgKGRhdGFbMV0gPT0gQURESURBVEFfT1IpIHsKKwkJCW91dGwoMHg0LAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSVJRKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdID09IEFERElEQVRBX09SKQorCQllbHNlIHsKKwkJCW91dGwoMHg2LAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSVJRKTsKKwkJfQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfT1IpCisJfQkJCS8vIGlmICAoZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdID09IEFERElEQVRBX0VOQUJMRSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfUmVhZDFEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZGlnaXRhbCBpbnB1dCAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICAgIFVJTlQgdWlfQ2hhbm5lbCA6IENoYW5uZWwgbnVtYmVyIHRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RtcFZhbHVlID0gMDsKKwlVSU5UIHVpX0NoYW5uZWw7CisKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDMxKSB7CisJCXVpX1RtcFZhbHVlID0KKwkJCShVSU5UKSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCk7CisJCS8vICBzaW5jZSBvbmx5IDEgY2hhbm5lbCByZXFkICB0byBicmluZyBpdCB0byBsYXN0IGJpdCBpdCBpcyByb3RhdGVkCisJCS8vICA4ICsoY2hhbiAtIDEpIHRpbWVzIHRoZW4gQU5EZWQgd2l0aCAxIGZvciBsYXN0IGJpdC4KKwkJKmRhdGEgPSAodWlfVG1wVmFsdWUgPj4gdWlfQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD0zMSkKKwllbHNlIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIk5vdCBhIHZhbGlkIGNoYW5uZWwgbnVtYmVyICEhISBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJfQkJCS8vZWxzZSBpZiAgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MzEpCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZWFkTW9yZURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBSZXF1ZXN0ZWQgZGlnaXRhbCBpbnB1dHMgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIGJlIFJlYWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkqZGF0YSA9IChVSU5UKSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCk7CisJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWxzKSB7CisJCWNhc2UgMjoKKwkJCXVpX01hc2sgPSAzOworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdWlfTWFzayA9IDE1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWlfTWFzayA9IDI1NTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQl1aV9NYXNrID0gNjU1MzU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSAzMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29tZWRpX2Vycm9yKGRldiwgIk5vdCBhIHZhbGlkIENoYW5uZWwgbnVtYmVyICEhIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQlicmVhazsKKwkJfQkJLy8gc3dpdGNoICAodWlfTm9PZkNoYW5uZWxzKQorCX0JCQkvLyBpZiAgKGRhdGFbMV09PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCSpkYXRhID0gdWlfSW50ZXJydXB0U3RhdHVzXzE1NjQ7CisJCX0JCS8vIGlmICAoZGF0YVsxXT09MSkKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMV09PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMSBFbmFibGUgIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJICBkYXRhWzJdICAgICAgICAgICAgOiAxIEVuYWJsZSAgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQgPSAwOworCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBpZiAgKChkYXRhWzBdIT0wKSAmJiAoZGF0YVswXSE9MSkpCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVswXSkKKwlpZiAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgfCAweDE7CisJfQkJCS8vIGlmICAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCXVsX0NvbW1hbmQgPSB1bF9Db21tYW5kICYgMHhGRkZGRkZGRTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCB8IDB4MjsKKwl9CQkJLy8gaWYgIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkKKwllbHNlIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgJiAweEZGRkZGRkZEOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpCisJb3V0bCh1bF9Db21tYW5kLAorCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJQVBDSTE1NjRfRElHSVRBTF9PUF9JTlRFUlJVUFQpOworCXVpX0ludGVycnVwdERhdGEgPQorCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUKTsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIFdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXAsIHVpX1RlbXAxOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfUlcpOworCX0JCQkvLyBpZiAgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vIGVsc2UgaWYgIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJaWYgKGRhdGFbM10gPT0gMCkgeworCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIHwgdWlfVGVtcDsKKwkJCW91dGwoZGF0YVswXSwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1JXKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJY2FzZSAyOgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxNjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMTYgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzE6CisJCQkJCWRhdGFbMF0gPSBkYXRhWzBdIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCX0JLy8gc3dpdGNoICh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCQlBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJCQl9CS8vIGlmICAoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy8gZWxzZSBpZiAgKGRhdGFbMV09PTEpCisJCX0JCS8vIGVsc2UgaWYgKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPQorCQkJCQkoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXgorCQkJCQkweGZmZmZmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1JXKTsKKwkJCX0JLy8gaWYgIChkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGY7CisJCQkJCQl1aV9UZW1wMSA9IDE1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDQgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoNCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgODoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmY7CisJCQkJCQl1aV9UZW1wMSA9IDI1NTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA4ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE2OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZmZmOworCQkJCQkJdWlfVGVtcDEgPSA2NTUzNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAxNiAqCisJCQkJCQkJZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAzMToKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJCQkJb3V0bChkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQkJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJCQkJfQkvLyBpZiAgKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vIGVsc2UgaWYgIChkYXRhWzFdPT0xKQorCQkJfQkvLyBlbHNlIGlmICAoZGF0YVsxXT09MCkKKwkJfQkJLy8gaWYgIChkYXRhWzNdPT0xKTsKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIGVsc2UgaWYgKGRhdGFbM109PTEpCisJfQkJCS8vIGVsc2UgaWYgKGRhdGFbM109PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogZGF0YVsxXSkpICYgMzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogZGF0YVsxXSkpICYgMTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIGRhdGFbMV0pKSAmIDI1NTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxNjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiBkYXRhWzFdKSkgJiA2NTUzNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzMToKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQlicmVhazsKKwkJCX0JLy8gc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy8gaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vIGVsc2UgaWYgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGVsc2UgaWYgICh1aV9UZW1wPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgQ29uZmlndXJlIEFzIFRpbWVyICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvbmZpZ3VyZSBBcyBDb3VudGVyICAgIHwKK3wJCQkJCQkJCQkJICAgMiBDb25maWd1cmUgQXMgV2F0Y2hkb2cgICB8Cit8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDEgRW5hYmxlICBJbnRlcnJ1cHQgICAgICAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgSW50ZXJydXB0IAkgICAgIHwKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogVGltZSBVbml0ICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbM10JCQkgOiBSZWxvYWQgVmFsdWUJCQkgICAgIHwKK3wJCQkJCSAgZGF0YVs0XSAgICAgICAgICAgIDogVGltZXIgTW9kZSAgICAgICAgICAgICAJIHwKK3wJCQkJCSAgZGF0YVs1XQkJCSA6IFRpbWVyIENvdW50ZXIgV2F0Y2hkb2cgTnVtYmVyfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs2XSAgICAgICAgICAgIDogIENvdW50ZXIgRGlyZWN0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9XQVRDSERPRzsKKworCQkvL0Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTE1NjRfVENXX1JFTE9BRF9WQUxVRSk7CisJfQkJCS8vIGlmICAoZGF0YVswXT09QURESURBVEFfV0FUQ0hET0cpCisJZWxzZSBpZiAoZGF0YVswXSA9PSBBRERJREFUQV9USU1FUikgeworCQkvL0ZpcnN0IFN0b3AgVGhlIFRpbWVyCisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL1N0b3AgVGhlIFRpbWVyCisKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9USU1FUjsKKwkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJb3V0bCgweDAyLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9FbmFibGUgVElNRVIgaW50ICYgRElTQUJMRSBBTEwgVEhFIE9USEVSIGludCBTT1VSQ0VTCisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX0lSUSk7CisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjEgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjIgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjQgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQl9CQkvLyBpZiAgKGRhdGFbMV09PTEpCisJCWVsc2UgeworCQkJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL2Rpc2FibGUgVGltZXIgaW50ZXJydXB0CisJCX0JCS8vIGVsc2UgaWYgIChkYXRhWzFdPT0xKQorCisJCS8vIExvYWRpbmcgVGltZWJhc2UKKworCQlvdXRsKGRhdGFbMl0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfVElNRUJBU0UpOworCisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCUFQQ0kxNTY0X1RDV19SRUxPQURfVkFMVUUpOworCisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0KKwkJCSh1bF9Db21tYW5kMSAmIDB4RkZGNzE5RTJVTCkgfCAyVUwgPDwgMTNVTCB8IDB4MTBVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CS8vbW9kZSAyCisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdPT1BRERJREFUQV9USU1FUikKKwllbHNlIGlmIChkYXRhWzBdID09IEFERElEQVRBX0NPVU5URVIpIHsKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9DT1VOVEVSOworCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IGRhdGFbNV07CisKKwkJLy9GaXJzdCBTdG9wIFRoZSBDb3VudGVyCisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGRhdGFbNV0gLSAxKSAqIDB4MjApICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9TdG9wIFRoZSBUaW1lcgorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIHJlbG9hZCB2YWx1ZSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUkVMT0FEX1ZBTFVFKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSBtb2RlIDogICAgICAgICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSBoYXJkd2FyZSAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSBjb3VudGVyIG1vZGUgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSB3YXJuaW5nICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSByZXNldCAgICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSB0aW1lciBtb2RlICAgKi8KKwkJLyogLSBFbmFibGUgdGhlIGNvdW50ZXIgbW9kZSAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVsX0NvbW1hbmQxID0KKwkJCSh1bF9Db21tYW5kMSAmIDB4RkZGQzE5RTJVTCkgfCAweDgwMDAwVUwgfAorCQkJKFVMT05HKSAoKFVMT05HKSBkYXRhWzRdIDw8IDE2VUwpOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy8gRW5hYmxlIG9yIERpc2FibGUgSW50ZXJydXB0CisJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRCkgfCAoZGF0YVsxXSA8PCAxKTsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGF0YVs1XSAtIDEpICogMHgyMCkgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgVXAvRG93biBzZWxlY3Rpb24gKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkJGOUZGVUwpIHwgKGRhdGFbNl0gPDwgMTgpOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdPT1BRERJREFUQV9DT1VOVEVSKQorCWVsc2UgeworCQlwcmludGsoIiBJbnZhbGlkIHN1YmRldmljZS4iKTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMF09PUFERElEQVRBX1dBVENIRE9HKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgICAgICAgICAgIDogMCBUaW1lciAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDEgQ291bnRlciAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAyIFdhdGNoZG9nICAgICAgICAJCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CQkJCQkgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgOiAxIFN0YXJ0ICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMCBTdG9wICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIFRyaWdnZXIgICAgICAgICAgICAgCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIChPbmx5IENvdW50ZXIpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDA7CisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIDA6CS8vc3RvcCB0aGUgd2F0Y2hkb2cKKwkJCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QX1dBVENIRE9HICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL2Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCQlicmVhazsKKwkJY2FzZSAxOgkvL3N0YXJ0IHRoZSB3YXRjaGRvZworCQkJb3V0bCgweDAwMDEsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCQlicmVhazsKKwkJY2FzZSAyOgkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJCW91dGwoMHgwMjAxLAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaCAoZGF0YVsxXSkKKwl9CQkJLy8gaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfV0FUQ0hET0cpCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCisJCQkvL0VuYWJsZSB0aGUgVGltZXIKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdPT0xKQorCQllbHNlIGlmIChkYXRhWzFdID09IDApIHsKKwkJCS8vU3RvcCBUaGUgVGltZXIKKworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJfQkJLy8gZWxzZSBpZihkYXRhWzFdPT0wKQorCX0JCQkvLyBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9USU1FUikKKwlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfQ09VTlRFUikgeworCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAtCisJCQkJCTEpICogMHgyMCkgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCS8vU3RhcnQgdGhlIENvdW50ZXIgc3ViZGV2aWNlCisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDFVTDsKKwkJfQkJLy8gaWYgIChkYXRhWzFdID09IDEpCisJCWVsc2UgaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJLy8gU3RvcHMgdGhlIENvdW50ZXIgc3ViZGV2aWNlCisJCQl1bF9Db21tYW5kMSA9IDA7CisKKwkJfQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gMCkKKwkJZWxzZSBpZiAoZGF0YVsxXSA9PSAyKSB7CisJCQkvLyBDbGVhcnMgdGhlIENvdW50ZXIgc3ViZGV2aWNlCisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDQwMDsKKwkJfQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gMykKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLQorCQkJCQkxKSAqIDB4MjApICsgQVBDSTE1NjRfVENXX1BST0cpOworCX0JCQkvLyBpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX0NPVU5URVIpCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFNlbGVjdGVkIFRpbWVyICwgQ291bnRlciBvciBXYXRjaGRvZyAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwOworCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCS8vIFN0b3JlcyB0aGUgc3RhdHVzIG9mIHRoZSBXYXRjaGRvZworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQlBUENJMTU2NF9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCQlkYXRhWzFdID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyk7CisJfQkJCS8vIGlmICAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1dBVENIRE9HKQorCWVsc2UgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCS8vIFN0b3JlcyB0aGUgc3RhdHVzIG9mIHRoZSBUaW1lcgorCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCisJCS8vIFN0b3JlcyB0aGUgQWN0dWFsIHZhbHVlIG9mIHRoZSBUaW1lcgorCQlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSKTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9USU1FUikKKwllbHNlIGlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9DT1VOVEVSKSB7CisJCS8vIFJlYWQgdGhlIENvdW50ZXIgQWN0dWFsIFZhbHVlLgorCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIC0KKwkJCQkJMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfU1lOQ19FTkFCTEVESVNBQkxFKTsKKwkJdWxfQ29tbWFuZDEgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArICgoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLQorCQkJCQkxKSAqIDB4MjApICsgQVBDSTE1NjRfVENXX1RSSUdfU1RBVFVTKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIHNvZnR3YXJlIHRyaWdnZXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRhdGFbMV0gPSAoQllURSkgKCh1bF9Db21tYW5kMSA+PiAxKSAmIDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgaGFyZHdhcmUgdHJpZ2dlciBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJZGF0YVsyXSA9IChCWVRFKSAoKHVsX0NvbW1hbmQxID4+IDIpICYgMSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgc29mdHdhcmUgY2xlYXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlkYXRhWzNdID0gKEJZVEUpICgodWxfQ29tbWFuZDEgPj4gMykgJiAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBvdmVyZmxvdyBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRhdGFbNF0gPSAoQllURSkgKCh1bF9Db21tYW5kMSA+PiAwKSAmIDEpOworCX0JCQkvLyBlbHNlICBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9DT1VOVEVSKQorCWVsc2UgaWYgKChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSAhPSBBRERJREFUQV9USU1FUikKKwkJJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlICE9IEFERElEQVRBX1dBVENIRE9HKQorCQkmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgIT0gQURESURBVEFfQ09VTlRFUikpIHsKKwkJcHJpbnRrKCJcbiBJbnZhbGlkIFN1YmRldmljZSAhISFcbiIpOworCX0JCQkvLyBlbHNlIGlmICgoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUhPUFERElEQVRBX1RJTUVSKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUhPUFERElEQVRBX1dBVENIRE9HKSYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSE9QURESURBVEFfQ09VTlRFUikpCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cyAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVhZHMgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTU2NF9SZWFkSW50ZXJydXB0U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkqZGF0YSA9IHVpX1R5cGU7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kxNTY0X0ludGVycnVwdAkJCQkJICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdGlibGUgZGlnaXRhbCBpbnB1dHMgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3N0YXRpYyB2b2lkIHZfQVBDSTE1NjRfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJVUlOVCB1aV9ETywgdWlfREk7CisJVUlOVCB1aV9UaW1lcjsKKwlVSU5UIHVpX0MxLCB1aV9DMiwgdWlfQzMsIHVpX0M0OworCVVMT05HIHVsX0NvbW1hbmQyID0gMDsKKwl1aV9ESSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpICYgMHgwMTsKKwl1aV9ETyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJQVBDSTE1NjRfRElHSVRBTF9PUF9JUlEpICYgMHgwMTsKKwl1aV9UaW1lciA9CisJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgwMTsKKwl1aV9DMSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgxOworCXVpX0MyID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJQVBDSTE1NjRfVENXX0lSUSkgJiAweDE7CisJdWlfQzMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQlBUENJMTU2NF9UQ1dfSVJRKSAmIDB4MTsKKwl1aV9DNCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgxOworCWlmICh1aV9ESSA9PSAwICYmIHVpX0RPID09IDAgJiYgdWlfVGltZXIgPT0gMCAmJiB1aV9DMSA9PSAwCisJCSYmIHVpX0MyID09IDAgJiYgdWlfQzMgPT0gMCAmJiB1aV9DNCA9PSAwKSB7CisJCXByaW50aygiXG5JbnRlcnJ1cHQgZnJvbSB1bmtub3duIHNvdXJjZVxuIik7CisJfQkJCS8vIGlmKHVpX0RJPT0wICYmIHVpX0RPPT0wICYmIHVpX1RpbWVyPT0wICYmIHVpX0MxPT0wICYmIHVpX0MyPT0wICYmIHVpX0MzPT0wICYmIHVpX0M0PT0wKQorCisJaWYgKHVpX0RJID09IDEpIHsKKwkJdWlfREkgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCXVpX0ludGVycnVwdFN0YXR1c18xNTY0ID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX1NUQVRVUyk7CisJCXVpX0ludGVycnVwdFN0YXR1c18xNTY0ID0gdWlfSW50ZXJydXB0U3RhdHVzXzE1NjQgJiAwWDAwMEZGRkYwOworCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCW91dGwodWlfREksIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKyBBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CS8vZW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJcmV0dXJuOworCX0KKworCWlmICh1aV9ETyA9PSAxKSB7CisJCS8vIENoZWNrIGZvciBEaWdpdGFsIE91dHB1dCBpbnRlcnJ1cHQgVHlwZSAtIDE6IFZjYyBpbnRlcnJ1cHQgMjogQ0MgaW50ZXJydXB0LgorCQl1aV9UeXBlID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUykgJiAweDM7CisJCS8vRGlzYWJsZSB0aGUgIEludGVycnVwdAorCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9JTlRFUlJVUFQpOworCisJCS8vU2VuZHMgc2lnbmFsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCX0JCQkvLyBpZiAgKHVpX0RPKQorCisJaWYgKCh1aV9UaW1lciA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9USU1FUikpIHsKKwkJLy8gRGlzYWJsZSBUaW1lciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgVGltZXIgSW50ZXJydXB0CisKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgICgodWlfVGltZXIgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID1BRERJREFUQV9USU1FUikpCisKKwlpZiAoKHVpX0MxID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgICgodWlfQzEgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfQ09VTlRFUikpCisKKwlpZiAoKHVpX0MyID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgICgodWlfQzIgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID1BRERJREFUQV9DT1VOVEVSKSkKKworCWlmICgodWlfQzMgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfQ09VTlRFUikpIHsKKwkJLy8gRGlzYWJsZSBDb3VudGVyIEludGVycnVwdAorCQl1bF9Db21tYW5kMiA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKworCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCisJCS8vIEVuYWJsZSBDb3VudGVyIEludGVycnVwdAorCQlvdXRsKHVsX0NvbW1hbmQyLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCX0JCQkvLyBpZiAoKHVpX0MzID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9QURESURBVEFfQ09VTlRFUikpCisKKwlpZiAoKHVpX0M0ID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgKCh1aV9DNCA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPUFERElEQVRBX0NPVU5URVIpKQorCXJldHVybjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTY0X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTU2NF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOwkvL2Rpc2FibGUgdGhlIGludGVycnVwdHMKKwlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfU1RBVFVTKTsJLy9SZXNldCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSk7CS8vRGlzYWJsZSB0aGUgYW5kL29yIGludGVycnVwdAorCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOworCXVpX1R5cGUgPSAwOworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QKTsJLy9SZXNldHMgdGhlIG91dHB1dCBjaGFubmVscworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CS8vRGlzYWJsZXMgdGhlIGludGVycnVwdC4KKwlvdXRsKDB4MCwKKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCUFQQ0kxNTY0X1RDV19SRUxPQURfVkFMVUUpOworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUik7CisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOworCisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsgQVBDSTE1NjRfVENXX1BST0cpOworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArIEFQQ0kxNTY0X1RDV19QUk9HKTsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsgQVBDSTE1NjRfVENXX1BST0cpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYzQ2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0xNTY0IGNhcmQgICoqKioqLworCisjZGVmaW5lIEFQQ0kxNTY0X0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAweDE1QjgKKyNkZWZpbmUgQVBDSTE1NjRfQUREUkVTU19SQU5HRSAgICAgICAgICAgICAgICAgIDEyOAorCisvL0RJR0lUQUwgSU5QVVQtT1VUUFVUIERFRklORQorLy8gSW5wdXQgZGVmaW5lcworI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSAgICAgNAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMiAgICAgOAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSAgICAgICAgICAgICAgICAgMTYKKworLy8gT3V0cHV0IGRlZmluZXMKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTB4MTgKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9SVyAgICAgICAgICAgICAgIAkwCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfSVJRICAgICAgICAgICAgICAgICAxMgorCisvL0RpZ2l0YWwgSW5wdXQgSVJRIEZ1bmN0aW9uIFNlbGVjdGlvbgorI2RlZmluZSBBRERJREFUQV9PUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvL0RpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMgICAgMTIKKworLy9EaWdpdGFsIE91dHB1dCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUyAgICA4CisKKy8vRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgRW5hYmxlIERpc2FibGUuCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX0VOQUJMRSAgICAweDQKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfRElTQUJMRSAgIDB4RkZGRkZGRkIKKworLy9EaWdpdGFsIE91dHB1dCBJbnRlcnJ1cHQgRW5hYmxlIERpc2FibGUuCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfVkNDX0lOVEVSUlVQVF9FTkFCTEUgICAweDEKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9WQ0NfSU5URVJSVVBUX0RJU0FCTEUgIDB4RkZGRkZGRkUKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9DQ19JTlRFUlJVUFRfRU5BQkxFICAgIDB4MgorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX09QX0NDX0lOVEVSUlVQVF9ESVNBQkxFICAgMHhGRkZGRkZGRAorCisvL0FERElEQVRBIEVuYWJsZSBEaXNhYmxlCisKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gVElNRVIgQ09VTlRFUiBXQVRDSERPRyBERUZJTkVTCisKKyNkZWZpbmUgQURESURBVEFfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURESURBVEFfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQVBDSTE1NjRfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgQVBDSTE1NjRfQ09VTlRFUjEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBBUENJMTU2NF9DT1VOVEVSMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBBUENJMTU2NF9DT1VOVEVSMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBBUENJMTU2NF9DT1VOVEVSNCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBBUENJMTU2NF9UQ1dfU1lOQ19FTkFCTEVESVNBQkxFICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTU2NF9UQ1dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMTU2NF9UQ1dfVElNRUJBU0UgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMTU2NF9UQ1dfUFJPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1RSSUdfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kxNTY0X1RDV19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBBUENJMTU2NF9UQ1dfV0FSTl9USU1FVkFMICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1dBUk5fVElNRUJBU0UgICAgICAgICAgICAgICAgIDI4CisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kxNTY0CisKKy8vREkKKy8vIGZvciBkaSByZWFkCitJTlQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTU2NF9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1NjRfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9ETworaW50IGlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTU2NF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTU2NF9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIFRJTUVSCisvLyB0aW1lciB2YWx1ZSBpcyBwYXNzZWQgYXMgdSBzZWNvbmRzCitJTlQgaV9BUENJMTU2NF9Db25maWdUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kxNTY0X1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCSAgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kxNTY0X1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJTlRFUlJVUFQKK3N0YXRpYyB2b2lkIHZfQVBDSTE1NjRfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworCisvLyBSRVNFVAorSU5UIGlfQVBDSTE1NjRfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZDYzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguYwpAQCAtMCwwICsxLDc4MCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE2NDggICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFRUTC5DICAgICAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBTLiBXZWJlciAgICAgfCBEYXRlICAgICA6ICAyNS8wNS8yMDA1ICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE2WFggVFRMIEkvTyBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfDI1LjA1LjIwMDV8IFMuV2ViZXIgICB8IENyZWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiaHdkcnZfYXBjaTE2eHguaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTE2WFhfSW5zbkNvbmZpZ0luaXRUVExJTyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgQVBDSTE2WFhfVFRMX0lOSVQgKHVzaW5nIGRlZmF1bHRzKSAgIDogICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIFRUTCBJL08gb3BlcmF0aW5nIG1vZGUgZnJvbSBhbGwgcG9ydHMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgZm9yIHlvdSBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgVFRMLiAgICAgICAgfAorfCAgICAgICAgICAgICAgICBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTih1c2VyIGlucHV0cyBmb3IgZGlyZWN0aW9uKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0luaXRUeXBlICAgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfUG9ydDBNb2RlICAgPSAoQllURSkgZGF0YVsxXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9Qb3J0MU1vZGUgICA9IChCWVRFKSBkYXRhWzJdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1BvcnQyTW9kZSAgID0gKEJZVEUpIGRhdGFbM107ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfUG9ydDNNb2RlICAgPSAoQllURSkgZGF0YVs0XTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFBvcnQgMCBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogUG9ydCAxIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBQb3J0IDIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFBvcnQgMyBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtWDogUG9ydCBYLTEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IENvbmZpZyBjb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zbkNvbmZpZ0luaXRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9Db21tYW5kID0gMDsKKwlCWVRFIGJfQ3B0ID0gMDsKKwlCWVRFIGJfTnVtYmVyT2ZQb3J0ID0KKwkJKEJZVEUpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDgpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX0lOSVQpIHx8CisJCQkoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OKSB8fAorCQkJKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfT1VUUFVUTUVNT1JZKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBpbml0aWFsaXNhdGlvbiBidWZmZXIgc2l6ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OKQorCQkJCSYmICgoQllURSkgKGluc24tPm4gLSAxKSAhPSBiX051bWJlck9mUG9ydCkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJCX0KKworCQkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSkKKwkJCQkmJiAoKEJZVEUpIChpbnNuLT5uKSAhPSAyKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXByaW50aygiXG5CdWZmZXIgc2l6ZSBlcnJvciIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiXG5Db21tYW5kIHNlbGVjdGlvbiBlcnJvciIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgYW5kIEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OIGNvbW1hbmQgc2VsZWN0ZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGlfUmV0dXJuVmFsdWUgPj0gMCkgJiYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTikpIHsKKwkJbWVtc2V0KGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uLCAwLAorCQkJc2l6ZW9mKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uKSk7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgcG9ydCBkaXJlY3Rpb24gc2VsZWN0aW9uICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZm9yIChiX0NwdCA9IDE7CisJCQkoYl9DcHQgPD0gYl9OdW1iZXJPZlBvcnQpICYmIChpX1JldHVyblZhbHVlID49IDApOworCQkJYl9DcHQrKykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgZGlyZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGF0YVtiX0NwdF0gIT0gMCkgJiYgKGRhdGFbYl9DcHRdICE9IDB4RkYpKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFBvcnQgZGlyZWN0aW9uIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJcblBvcnQgJWQgZGlyZWN0aW9uIHNlbGVjdGlvbiBlcnJvciIsCisJCQkJCShJTlQpIGJfQ3B0KTsKKwkJCQlpX1JldHVyblZhbHVlID0gLShJTlQpIGJfQ3B0OworCQkJfQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2F2ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bKGJfQ3B0IC0gMSkgLyA0XSA9CisJCQkJZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bKGJfQ3B0IC0KKwkJCQkJMSkgLyA0XSB8IChkYXRhW2JfQ3B0XSA8PCAoOCAqICgoYl9DcHQgLQorCQkJCQkJCTEpICUgNCkpKTsKKwkJfQorCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBUVEwgcG9ydCBpbml0aWxhaXNhdGlvbiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfSU5JVCkKKwkJCXx8IChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX0lOSVRESVJFQ1RJT04pKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCBhbGwgcG9ydCBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZm9yIChiX0NwdCA9IDA7IGJfQ3B0IDw9IGJfTnVtYmVyT2ZQb3J0OyBiX0NwdCsrKSB7CisJCQkJaWYgKChiX0NwdCAlIDQpID09IDApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQl1bF9UVExQb3J0Q29uZmlndXJhdGlvbltiX0NwdCAvCisJCQkJCQkJNF0sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyAzMiArIGJfQ3B0KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBpbml0aWFsaXNhdGlvbiBjb21tYW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSkgeworCQlpZiAoZGF0YVsxXSkgeworCQkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0RJU0FCTEU7CisJCX0KKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBUVEwgZGlnaXRhbCBpbnB1dCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX0lucHV0Q2hhbm5lbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0IHBvcnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1NlbGVjdGVkUG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX1NlbGVjdGVkUG9ydD0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfSW5wdXRDaGFubmVsPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9SZWFkVHlwZQkgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9SRUFEUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9TZWxlY3RlZFBvcnQ9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX1JlYWRUeXBlCSAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ID4wICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29uZmlnIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMiA6IFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAzIDogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zbkJpdHNSZWFkVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29tbWFuZCA9IDA7CisJQllURSBiX051bWJlck9mUG9ydCA9CisJCShCWVRFKSAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwgLyA4KTsKKwlCWVRFIGJfU2VsZWN0ZWRQb3J0ID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCUJZVEUgYl9JbnB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFICpwYl9TdGF0dXM7CisJRFdPUkQgZHdfU3RhdHVzOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMKQorCQkJfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRFBPUlQpKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgcG9ydCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfU2VsZWN0ZWRQb3J0IDwgYl9OdW1iZXJPZlBvcnQpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgaW5wdXQgcG9ydCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKChkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCVtiX1NlbGVjdGVkUG9ydCAvCisJCQkJCQkJCTRdID4+ICg4ICoKKwkJCQkJCQkJKGJfU2VsZWN0ZWRQb3J0CisJCQkJCQkJCQklCisJCQkJCQkJCQk0KSkpICYKKwkJCQkJCTB4RkYpID09IDApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9Db21tYW5kID09CisJCQkJCQkJQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMKQorCQkJCQkJJiYgKGJfSW5wdXRDaGFubmVsID4gNykpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJcHJpbnRrKCJcbkNoYW5uZWwgc2VsZWN0aW9uIGVycm9yIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBpbnB1dCBwb3J0IGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIlxuQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAwOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQlwYl9TdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGRpZ2l0YWwgaW5wdSBzdGF0dXMgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19TdGF0dXMgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIDggKyAoKGJfU2VsZWN0ZWRQb3J0IC8gNCkgKiA0KSk7CisJCWR3X1N0YXR1cyA9IChkd19TdGF0dXMgPj4gKDggKiAoYl9TZWxlY3RlZFBvcnQgJSA0KSkpICYgMHhGRjsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2F2ZSB0aGUgcG9ydCB2YWx1ZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkqcGJfU3RhdHVzID0gKEJZVEUpIGR3X1N0YXR1czsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgcmVhZCBjaGFubmVsIHN0YXR1cyBjb21tYW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9SRUFEQ0hBTk5FTCkgeworCQkJKnBiX1N0YXR1cyA9ICgqcGJfU3RhdHVzID4+IGJfSW5wdXRDaGFubmVsKSAmIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UIGlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gICAgICAqaW5zbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIHN0YXR1cyBmcm9tIGFsbCBkaWdpdGFsIGlucHV0IHBvcnRzICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogZGF0YVswXSA6IFBvcnQgMCB0byAzIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdIDogUG9ydCA0IHRvIDcgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IFJlYWQgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX0NvbW1hbmQgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DcHQgPSAwOworCUJZVEUgYl9OdW1iZXJPZlBvcnQgPSAwOworCXVuc2lnbmVkIGludCAqcGxzX1JlYWREYXRhID0gZGF0YTsKKworCS8qKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBjb21tYW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURfQUxMX0lOUFVUUykKKwkJfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRF9BTExfT1VUUFVUUykpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBudW1iZXIgb2YgMzItQml0IHBvcnRzICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJYl9OdW1iZXJPZlBvcnQgPQorCQkJKEJZVEUpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDMyKTsKKwkJaWYgKChiX051bWJlck9mUG9ydCAqIDMyKSA8CisJCQlkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCkgeworCQkJYl9OdW1iZXJPZlBvcnQgPSBiX051bWJlck9mUG9ydCArIDE7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoaW5zbi0+biA+PSBiX051bWJlck9mUG9ydCkgeworCQkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRF9BTExfSU5QVVRTKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZm9yIChiX0NwdCA9IDA7IGJfQ3B0IDwgYl9OdW1iZXJPZlBvcnQ7IGJfQ3B0KyspIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIDMyLUJpdCBwb3J0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gPQorCQkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIDggKworCQkJCQkJKGJfQ3B0ICogNCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIE1hc2sgYWxsIGNoYW5uZWxzIHVzZWQgYWxzIG91dHB1dHMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdID0KKwkJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gJgorCQkJCQkJKH5kZXZwcml2LT4KKwkJCQkJCXVsX1RUTFBvcnRDb25maWd1cmF0aW9uW2JfQ3B0XSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgb3V0cHV0cyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlmb3IgKGJfQ3B0ID0gMDsgYl9DcHQgPCBiX051bWJlck9mUG9ydDsgYl9DcHQrKykgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgMzItQml0IHBvcnQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcGxzX1JlYWREYXRhW2JfQ3B0XSA9CisJCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgMjAgKworCQkJCQkJKGJfQ3B0ICogNCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIE1hc2sgYWxsIGNoYW5uZWxzIHVzZWQgYWxzIG91dHB1dHMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdID0KKwkJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gJiBkZXZwcml2LT4KKwkJCQkJCXVsX1RUTFBvcnRDb25maWd1cmF0aW9uW2JfQ3B0XTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqLworCQkvKiBDb21tYW5kIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiXG5Db21tYW5kIHNlbGVjdGlvbiBlcnJvciIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMDsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU8gICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgdGhlIHN0YXRlIGZyb20gc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgb3V0cHV0ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX091dHB1dENoYW5uZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgdGhlIHN0YXRlIGZyb20gZGlnaXRhbCBvdXRwdXQgcG9ydCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1NlbGVjdGVkUG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTiB8IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX1NlbGVjdGVkUG9ydCA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfT3V0cHV0Q2hhbm5lbD0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9Db21tYW5kICAgICAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04gfCBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX0NvbW1hbmQgICAgICA9IChCWVRFKSBkYXRhWzBdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBUVEwgb3V0cHV0IHBvcnQgMCB0byAzIGRhdGEgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA6IFRUTCBvdXRwdXQgcG9ydCA0IHRvIDcgZGF0YSAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAyIDogVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgcG9ydCBpcyB3cm9uZyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDMgOiBUaGUgc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwNCA6IE91dHB1dCBtZW1vcnkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25CaXRzV3JpdGVUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9Db21tYW5kID0gMDsKKwlCWVRFIGJfTnVtYmVyT2ZQb3J0ID0KKwkJKEJZVEUpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDgpOworCUJZVEUgYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJQllURSBiX091dHB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTikgfHwKKwkJCShiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PTikgfHwKKwkJCShiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PRkYpIHx8CisJCQkoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT0ZGKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHNlbGVjdGVkIHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1NlbGVjdGVkUG9ydCA8IGJfTnVtYmVyT2ZQb3J0KSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBvdXRwdXQgcG9ydCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKCgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQlbYl9TZWxlY3RlZFBvcnQgLworCQkJCQkJCQk0XSA+PiAoOCAqCisJCQkJCQkJCShiX1NlbGVjdGVkUG9ydAorCQkJCQkJCQkJJQorCQkJCQkJCQkJNCkpKSAmCisJCQkJCQkweEZGKSA9PSAweEZGKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTikgfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRikpICYmIChiX091dHB1dENoYW5uZWwgPiA3KSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlwcmludGsoIlxuQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAzOworCQkJCQl9CisKKwkJCQkJaWYgKCgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGKSB8fCAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT0ZGKSkgJiYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID09IEFERElEQVRBX0RJU0FCTEUpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXByaW50aygiXG5PdXRwdXQgbWVtb3J5IGRpc2FibGVkIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwNDsKKwkJCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PTikgfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRikpICYmIChpbnNuLT5uIDwgMikpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgb3V0cHV0IHBvcnQgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IgJWxYIiwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKWRldnByaXYtPgorCQkJCQkJdWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0pOworCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgcG9ydCBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IgJWQgJWQiLAorCQkJCQliX1NlbGVjdGVkUG9ydCwgYl9OdW1iZXJPZlBvcnQpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAyOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiXG5Db21tYW5kIHNlbGVjdGlvbiBlcnJvciIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IHN0YXRlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWR3X1N0YXR1cyA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgMjAgKyAoKGJfU2VsZWN0ZWRQb3J0IC8gNCkgKiA0KSk7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBvdXRwdXQgbWVtb3J5IG5vdCB1c2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID09IEFERElEQVRBX0RJU0FCTEUpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2xlYXIgdGhlIHNlbGVjdGVkIHBvcnQgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkd19TdGF0dXMgPQorCQkJCWR3X1N0YXR1cyAmICgweEZGRkZGRkZGVUwgLQorCQkJCSgweEZGVUwgPDwgKDggKiAoYl9TZWxlY3RlZFBvcnQgJSA0KSkpKTsKKwkJfQorCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBzZXR0aW5nIGNoYW5uZWwgT04gKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTikgeworCQkJZHdfU3RhdHVzID0KKwkJCQlkd19TdGF0dXMgfCAoMVVMIDw8ICgoOCAqIChiX1NlbGVjdGVkUG9ydCAlCisJCQkJCQkJNCkpICsgYl9PdXRwdXRDaGFubmVsKSk7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgc2V0dGluZyBwb3J0IE9OICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04pIHsKKwkJCWR3X1N0YXR1cyA9CisJCQkJZHdfU3RhdHVzIHwgKChkYXRhWzFdICYgMHhGRikgPDwgKDggKgorCQkJCQkoYl9TZWxlY3RlZFBvcnQgJSA0KSkpOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBzZXR0aW5nIGNoYW5uZWwgT0ZGICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRikgeworCQkJZHdfU3RhdHVzID0KKwkJCQlkd19TdGF0dXMgJiAoMHhGRkZGRkZGRlVMIC0KKwkJCQkoMVVMIDw8ICgoOCAqIChiX1NlbGVjdGVkUG9ydCAlIDQpKSArCisJCQkJCQliX091dHB1dENoYW5uZWwpKSk7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHNldHRpbmcgcG9ydCBPRkYgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT0ZGKSB7CisJCQlkd19TdGF0dXMgPQorCQkJCWR3X1N0YXR1cyAmICgweEZGRkZGRkZGVUwgLQorCQkJCSgoZGF0YVsxXSAmIDB4RkYpIDw8ICg4ICogKGJfU2VsZWN0ZWRQb3J0ICUKKwkJCQkJCQk0KSkpKTsKKwkJfQorCisJCW91dGwoZHdfU3RhdHVzLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgMjAgKyAoKGJfU2VsZWN0ZWRQb3J0IC8gNCkgKiA0KSk7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmY5MWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQ09NRURJX1NVQkRfVFRMSU8KKyNkZWZpbmUgQ09NRURJX1NVQkRfVFRMSU8gICAxMQkvKiBEaWdpdGFsIElucHV0IE91dHB1dCBCdXQgVFRMICovCisjZW5kaWYKKworI2lmbmRlZiBBRERJREFUQV9FTkFCTEUKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgMAorI2VuZGlmCisKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX0lOSVQgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX0lOSVRESVJFQ1RJT04gIDEKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSAgIDIKKworI2RlZmluZSBBUENJMTZYWF9UVExfUkVBRENIQU5ORUwgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9SRUFEUE9SVCAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09OICAgICAgICAwCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGICAgICAgIDEKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PTiAgICAgICAgICAgMgorI2RlZmluZSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRiAgICAgICAgICAzCisKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1JFQURfQUxMX0lOUFVUUyAgICAgICAgMAorI2RlZmluZSBBUENJMTZYWF9UVExfUkVBRF9BTExfT1VUUFVUUyAgICAgICAxCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMTZ4eF90dGwgPSB7IDEyLAorCXtCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpfQorfTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgVFRMIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25Db25maWdJbml0VFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgIFRUTCBJTlBVVCBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitpbnQgaV9BUENJMTZYWF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVEwgT1VUUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25CaXRzV3JpdGVUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK2ludCBpX0FQQ0kxNlhYX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmNTVkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuYwpAQCAtMCwwICsxLDQ2MCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTIwMTYgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kyMDE2LmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0yMDE2ICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMjAxNi5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBkYXRhWzBdICAgICAgICAgICAgOiAxIERpZ2l0YWwgTWVtb3J5IE9uICAgICAgICAgICAgICAgfAorfAkJCQkgICAgIAkJCSAgIDAgRGlnaXRhbCBNZW1vcnkgT2ZmICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBpZiAgKChkYXRhWzBdIT0wKSAmJiAoZGF0YVswXSE9MSkpCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXQorCWVsc2UgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0RJU0FCTEU7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAxNl9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIFdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoKHVpX05vT2ZDaGFubmVsIDwgMCkgfHwgKHVpX05vT2ZDaGFubmVsID4gMTUpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiSW52YWxpZCBDaGFubmVsIE51bWJlcnMgISEhLCBDaGFubmVsIE51bWJlcnMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDE1XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIGlmICAoKHVpX05vT2ZDaGFubmVsPDApIHx8ICh1aV9Ob09mQ2hhbm5lbD4xNSkpCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CisJfQkJCS8vIGlmICAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWVsc2UgeworCQl1aV9UZW1wID0gMDsKKwl9CQkJLy8gZWxzZSBpZiAgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoKGRhdGFbMV0gIT0gMCkgJiYgKGRhdGFbMV0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJJbnZhbGlkIERhdGFbMV0gdmFsdWUgISEhLCBEYXRhWzFdIHNob3VsZCBiZSAwIG9yIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgoZGF0YVsxXSE9MCkgJiYgKGRhdGFbMV0hPTEpKQorCisJaWYgKGRhdGFbM10gPT0gMCkgeworCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIHwgdWlfVGVtcDsKKwkJCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CisJCX0JCS8vIGlmIChkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJY2FzZSAyOgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxNToKKwkJCQkJZGF0YVswXSA9IGRhdGFbMF0gfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAxNl9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYgIChkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvLyBlbHNlIGlmICAoZGF0YVsxXT09MSkKKwkJfQkJLy8gZWxzZSBpZiAoZGF0YVsxXT09MCkKKwl9CQkJLy8gaWYgKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4gMHhmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZiAgKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCQkJY2FzZSAyOgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgzOworCQkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA0OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmOworCQkJCQkJdWlfVGVtcDEgPSAxNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA0ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgODoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmY7CisJCQkJCQl1aV9UZW1wMSA9IDI1NTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA4ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMTU6CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkJIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMjAxNl9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfQml0c0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X0JpdHNEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmICgodWlfTm9PZkNoYW5uZWwgPCAwKSB8fCAodWlfTm9PZkNoYW5uZWwgPiAxNSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJJbnZhbGlkIENoYW5uZWwgTnVtYmVycyAhISEsIENoYW5uZWwgTnVtYmVycyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgodWlfTm9PZkNoYW5uZWw8MCkgfHwgKHVpX05vT2ZDaGFubmVsPjE1KSkKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJJbnZhbGlkIERhdGFbMF0gdmFsdWUgISEhLCBEYXRhWzBdIHNob3VsZCBiZSAwIG9yIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgoZGF0YVswXSE9MCkgJiYgKGRhdGFbMF0hPTEpKQorCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1BfUlcpOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvLyBpZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIGRhdGFbMV0pKSAmIDE1OworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDggKiBkYXRhWzFdKSkgJiAyNTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTU6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVsKQorCQl9CQkvLyBpZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy8gZWxzZSBpZiAgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X0NvbmZpZ1dhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWlmIChkYXRhWzBdID09IDApIHsKKwkJLy9EaXNhYmxlIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTIwMTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dHcoZGF0YVsxXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTIwMTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwkJZGF0YVsxXSA9IGRhdGFbMV0gPj4gMTY7CisJCW91dHcoZGF0YVsxXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTIwMTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICsgMik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJcblRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSB3cm9uZ1xuIik7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTdGFydCAvIFN0b3AgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CQkvL3N0b3AgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTIwMTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAwMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dygweDAyMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gc3dpdGNoKGRhdGFbMF0pCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X1JlYWRXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTIwMTZfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1ZGVsYXkoNSk7CisJZGF0YVswXSA9IGludyhkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTIwMTZfV0FUQ0hET0dfU1RBVFVTKSAmIDB4MTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjAxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CS8vIFJlc2V0cyB0aGUgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbHMKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTIwMTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSArIDIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0yMDE2IGNhcmQgICoqKioqLworCisjZGVmaW5lIEFQQ0kyMDE2X0JPQVJEX1ZFTkRPUl9JRCAweDE1QjgKKyNkZWZpbmUgQVBDSTIwMTZfQUREUkVTU19SQU5HRSAgIDgKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMjAxNl9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJMHgwNAorI2RlZmluZSBBUENJMjAxNl9ESUdJVEFMX09QX1JXICAgICAgICAgICAgICAgICAJNAorCisvL0FERElEQVRBIEVuYWJsZSBEaXNhYmxlCisKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gVElNRVIgQ09VTlRFUiBXQVRDSERPRyBERUZJTkVTCisKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTIwMTZfRElHSVRBTF9PUF9XQVRDSERPRyAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTIwMTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kyMDE2X1dBVENIRE9HX1NUQVRVUyAgICAgICAgICAgICAgICAgICAxNgorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMjAxNgorCisvL0RPCitpbnQgaV9BUENJMjAxNl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworaW50IGlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitpbnQgaV9BUENJMjAxNl9CaXRzRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBUSU1FUgorLy8gdGltZXIgdmFsdWUgaXMgcGFzc2VkIGFzIHUgc2Vjb25kcworCitpbnQgaV9BUENJMjAxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworaW50IGlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK2ludCBpX0FQQ0kyMDE2X1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIEludGVycnVwdCBmdW5jdGlvbnMuLi4uLgorCisvLyB2b2lkIHZfQVBDSTIwMTZfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpIDsKKworIC8vdm9pZCB2X0FQQ0kyMDE2X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKy8vIFJFU0VUCitJTlQgaV9BUENJMjAxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ3YmMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jCkBAIC0wLDAgKzEsNTc5IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMjAzMiAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTIwMzIuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTIwMzIgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIwMzIuaCIKK1VJTlQgdWlfSW50ZXJydXB0RGF0YSwgdWlfVHlwZTsKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMSBFbmFibGUgIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJICBkYXRhWzJdICAgICAgICAgICAgOiAxIEVuYWJsZSAgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDMyX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKworCWlmICgoZGF0YVswXSAhPSAwKSAmJiAoZGF0YVswXSAhPSAxKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9pZiAgKCAoZGF0YVswXSE9MCkgJiYgKGRhdGFbMF0hPTEpICkKKwlpZiAoZGF0YVswXSkgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0VOQUJMRTsKKwl9CQkJLy8gaWYgIChkYXRhWzBdKQorCWVsc2UgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0RJU0FCTEU7CisJfQkJCS8vZWxzZSBpZiAgKGRhdGFbMF0pCisKKwlpZiAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgfCAweDE7CisJfQkJCS8vaWYgIChkYXRhWzFdID09IEFERElEQVRBX0VOQUJMRSkKKwllbHNlIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgJiAweEZGRkZGRkZFOworCX0JCQkvL2Vsc2VpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCB8IDB4MjsKKwl9CQkJLy9pZiAgKGRhdGFbMl0gPT0gQURESURBVEFfRU5BQkxFKQorCWVsc2UgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCAmIDB4RkZGRkZGRkQ7CisJfQkJCS8vZWxzZWlmICAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpCisJb3V0bCh1bF9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CisJdWlfSW50ZXJydXB0RGF0YSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIFdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QKTsKKworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA4OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMTY6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDMxOgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9CisJCQkJCShkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeCisJCQkJCTB4ZmZmZmZmZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUCk7CisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgNDoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZjsKKwkJCQkJCXVpX1RlbXAxID0gMTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgNCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDg6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGZmOworCQkJCQkJdWlfVGVtcDEgPSAyNTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgOCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDE2OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZmZmOworCQkJCQkJdWlfVGVtcDEgPSA2NTUzNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAxNiAqCisJCQkJCQkJZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDMxOgorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0bChkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCQl9CS8vZWxzZWlmKGRhdGFbMV09PTApCisJCX0JCS8vaWYoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2lmIGVsc2UgZGF0YVszXT09MSkKKwl9CQkJLy9pZiBlbHNlIGRhdGFbM109PTApCisJcmV0dXJuIChpbnNuLT5uKTs7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjAzMl9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1JXKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogZGF0YVsxXSkpICYgMzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogZGF0YVsxXSkpICYgMTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIGRhdGFbMV0pKSAmIDI1NTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxNjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiBkYXRhWzFdKSkgJiA2NTUzNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzMToKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCX0JCS8vaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vZWxzZWlmICAodWlfVGVtcD09MSkKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBJTlQgaV9BUENJMjAzMl9Db25maWdXYXRjaGRvZyhjb21lZGlfZGV2aWNlCisgICAgICAgICAgICAgICAgICAgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKXwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTIwMzJfQ29uZmlnV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdID09IDApIHsKKwkJLy9EaXNhYmxlIHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTIwMzJfVENXX1BST0cpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXRsKGRhdGFbMV0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kyMDMyX1RDV19SRUxPQURfVkFMVUUpOworCX0gZWxzZSB7CisJCXByaW50aygiXG5UaGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworIC8qCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDMyX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2cgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAgICAgICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKi8KKworaW50IGlfQVBDSTIwMzJfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJLy9zdG9wIHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArIEFQQ0kyMDMyX1RDV19QUk9HKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCQlicmVhazsKKwljYXNlIDE6CQkvL3N0YXJ0IHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MDAwMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTIwMzJfVENXX1BST0cpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0bCgweDAyMDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kyMDMyX1RDV19QUk9HKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMzJfUmVhZFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kyMDMyX1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlkYXRhWzBdID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQlBUENJMjAzMl9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIHZvaWQgdl9BUENJMjAzMl9JbnRlcnJ1cHQJCQkJCSAgICAgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLwordm9pZCB2X0FQQ0kyMDMyX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXVuc2lnbmVkIGludCB1aV9ETzsKKworCXVpX0RPID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfSVJRKSAmIDB4MTsJLy9DaGVjayBpZiBWQ0MgT1IgQ0MgaW50ZXJydXB0IGhhcyBvY2N1cmVkLgorCisJaWYgKHVpX0RPID09IDApIHsKKwkJcHJpbnRrKCJcbkludGVycnVwdCBmcm9tIHVuS25vd24gc291cmNlXG4iKTsKKwl9CQkJLy8gaWYodWlfRE89PTApCisJaWYgKHVpX0RPKSB7CisJCS8vIENoZWNrIGZvciBEaWdpdGFsIE91dHB1dCBpbnRlcnJ1cHQgVHlwZSAtIDE6IFZjYyBpbnRlcnJ1cHQgMjogQ0MgaW50ZXJydXB0LgorCQl1aV9UeXBlID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJQVBDSTIwMzJfRElHSVRBTF9PUF9JTlRFUlJVUFRfU1RBVFVTKSAmIDB4MzsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QICsKKwkJCUFQQ0kyMDMyX0RJR0lUQUxfT1BfSU5URVJSVVBUKTsKKwkJaWYgKHVpX1R5cGUgPT0gMSkgeworCQkJLy9TZW5kcyBzaWduYWwgdG8gdXNlciBzcGFjZQorCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwkJfQkJLy8gaWYgKHVpX1R5cGU9PTEpCisJCWVsc2UgeworCQkJaWYgKHVpX1R5cGUgPT0gMikgeworCQkJCS8vIFNlbmRzIHNpZ25hbCB0byB1c2VyIHNwYWNlCisJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwkJCX0JLy9pZiAodWlfVHlwZT09MikKKwkJfQkJLy9lbHNlIGlmICh1aV9UeXBlPT0xKQorCX0JCQkvL2lmKHVpX0RPKQorCisJcmV0dXJuOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTIwMzJfUmVhZEludGVycnVwdFN0YXR1cyAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVhZHMgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMjAzMl9SZWFkSW50ZXJydXB0U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkqZGF0YSA9IHVpX1R5cGU7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTIwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlJlc2V0cyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjYXJkICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTIwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOworCXVpX1R5cGUgPSAwOworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QKTsJLy9SZXNldHMgdGhlIG91dHB1dCBjaGFubmVscworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CS8vRGlzYWJsZXMgdGhlIGludGVycnVwdC4KKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArIEFQQ0kyMDMyX1RDV19QUk9HKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsgQVBDSTIwMzJfVENXX1JFTE9BRF9WQUxVRSk7CS8vcmVsb2FkPTAKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAwMmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0yMDMyIGNhcmQgICoqKioqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kyMDMyX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgMHgxNUI4CisjZGVmaW5lIEFQQ0kyMDMyX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgICAgICAgNjMKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJMAorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX1JXICAgICAgICAgICAgICAgICAJMAorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCAgICAgICAgICAgNAorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX0lSUSAgICAgICAgICAgICAgICAgMTIKKworLy9EaWdpdGFsIE91dHB1dCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUyAgICA4CisKKy8vRGlnaXRhbCBPdXRwdXQgSW50ZXJydXB0IEVuYWJsZSBEaXNhYmxlLgorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX1ZDQ19JTlRFUlJVUFRfRU5BQkxFICAgMHgxCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfVkNDX0lOVEVSUlVQVF9ESVNBQkxFICAweEZGRkZGRkZFCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfQ0NfSU5URVJSVVBUX0VOQUJMRSAgICAweDIKKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUF9DQ19JTlRFUlJVUFRfRElTQUJMRSAgIDB4RkZGRkZGRkQKKworLy9BRERJREFUQSBFbmFibGUgRGlzYWJsZQorCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vIFRJTUVSIENPVU5URVIgV0FUQ0hET0cgREVGSU5FUworCisjZGVmaW5lIEFERElEQVRBX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBUENJMjAzMl9UQ1dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMjAzMl9UQ1dfVElNRUJBU0UgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMjAzMl9UQ1dfUFJPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTIwMzJfVENXX1RSSUdfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kyMDMyX1RDV19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMjAzMgorCisvL0RPCitpbnQgaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMDMyX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMDMyX1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMjAzMl9SZWFkSW50ZXJydXB0U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKK0lOVCBpX0FQQ0kyMDMyX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIwMzJfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMjAzMl9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zLi4uLi4KKwordm9pZCB2X0FQQ0kyMDMyX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKworLy9SZXNldCBmdW5jdGlvbnMKK2ludCBpX0FQQ0kyMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2UxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmMKQEAgLTAsMCArMSw1NDkgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0yMjAwICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMjIwMC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMjIwMCAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIyMDAuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1JlYWQxRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGRpZ2l0YWwgaW5wdXQgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfAkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMjIwMF9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZSA9IDA7CisJVUlOVCB1aV9DaGFubmVsOworCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD0gNykgeworCQl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9JUCk7CisJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKwllbHNlIHsKKwkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgY2hhbm5lbCBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwl9CQkJLy9lbHNlIGlmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kyMjAwX1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkqZGF0YSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9JUCk7CisJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbHMpIHsKKwljYXNlIDI6CisJCXVpX01hc2sgPSAzOworCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl1aV9NYXNrID0gMTU7CisJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQlicmVhazsKKwljYXNlIDc6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcbldyb25nIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCWJyZWFrOworCX0JCQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXQgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgIHwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICA6MTpNZW1vcnkgb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDA6TWVtb3J5IG9mZiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMjIwMF9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IGRhdGFbMF07CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXR3KGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA4OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE1OgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXiAweGZmZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9PUCk7CisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA0OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmOworCQkJCQkJdWlfVGVtcDEgPSAxNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA0ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA4OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZjsKKwkJCQkJCXVpX1RlbXAxID0gMjU1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDggKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAxNToKKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kyMjAwX0RJR0lUQUxfT1ApOworCQkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCQl9CS8vZWxzZWlmKGRhdGFbMV09PTApCisJCX0JCS8vaWYoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2lmIGVsc2UgZGF0YVszXT09MSkKKwl9CQkJLy9pZiBlbHNlIGRhdGFbM109PTApCisJcmV0dXJuIChpbnNuLT5uKTs7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjIwMF9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZih1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIGRhdGFbMV0pKSAmIDE1OworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDggKiBkYXRhWzFdKSkgJiAyNTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTU6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCQl9CQkvL2lmKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy9lbHNlaWYodWlfVGVtcD09MSkKKwl9CQkJLy9lbHNlaWYodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgIHwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMjIwMF9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0gPT0gMCkgeworCQkvL0Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQkJQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dHcoZGF0YVsxXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJCUFQQ0kyMjAwX1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJCWRhdGFbMV0gPSBkYXRhWzFdID4+IDE2OworCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCQlBUENJMjIwMF9XQVRDSERPR19SRUxPQURfVkFMVUUgKyAyKTsKKwl9CQkJLy9pZihkYXRhWzBdPT0wKQorCWVsc2UgeworCQlwcmludGsoIlxuVGhlIGlucHV0IHBhcmFtZXRlcnMgYXJlIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTApCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworIC8qCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2cgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAgICAgICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKi8KKworaW50IGlfQVBDSTIyMDBfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJLy9zdG9wIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKyBBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCQlicmVhazsKKwljYXNlIDE6CQkvL3N0YXJ0IHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MDAwMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJCUFQQ0kyMjAwX1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dygweDAyMDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCQlBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIHN3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfUmVhZFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kyMjAwX1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9CisJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCUFQQ0kyMjAwX1dBVENIRE9HX1NUQVRVUykgJiAweDE7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpyZXNldHMgYWxsIHRoZSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJb3V0dygweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfT1ApOwkvL1JFU0VUUyBUSEUgRElHSVRBTCBPVVRQVVRTCisJb3V0dygweDAsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJb3V0dygweDAsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJQVBDSTIyMDBfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwlvdXR3KDB4MCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQlBUENJMjIwMF9XQVRDSERPR19SRUxPQURfVkFMVUUgKyAyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTExNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0yMjAwIGNhcmQgICoqKioqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kyMjAwX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgMHgxNWI4CisjZGVmaW5lIEFQQ0kyMjAwX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgICAgICAgNjQKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMjIwMF9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJNAorI2RlZmluZSBBUENJMjIwMF9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMAorCisvLyBUSU1FUiBDT1VOVEVSIFdBVENIRE9HIERFRklORVMKKworI2RlZmluZSBBUENJMjIwMF9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTIyMDBfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTIyMDBfV0FUQ0hET0dfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kyMjAwCisKKy8vRGlnaXRhbCBJbnB1dAorSU5UIGlfQVBDSTIyMDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMjAwX1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRGlnaXRhbCBPdXRwdXQKK2ludCBpX0FQQ0kyMjAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTIyMDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTIyMDBfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKK2ludCBpX0FQQ0kyMjAwX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIyMDBfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMjIwMF9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL3Jlc2V0CitJTlQgaV9BUENJMjIwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGViOGRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCkBAIC0wLDAgKzEsMjY5NyBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTMxMjAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kzMTIwLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDpBUENJMzEyMCBNb2R1bGUuICBIYXJkd2FyZSBhYnN0cmFjdGlvbiBMYXllciBmb3IgQVBDSTMxMjB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgCQkgfCAJCQkJCQkgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8CQkJCQkJICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJod2Rydl9hcGNpMzEyMC5oIgorc3RhdGljIFVJTlQgdWlfVGVtcCA9IDA7CisKKy8vIEZVTkNUSU9OIERFRklOSVRJT05TCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkFMT0cgSU5QVVQgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfCAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDYWxscyBjYXJkIHNwZWNpZmljIGZ1bmN0aW9uICAJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAJCQkJCSAgICAgICAgIAkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCBpOworCisJaWYgKChkYXRhWzBdICE9IEFQQ0kzMTIwX0VPQ19NT0RFKSAmJiAoZGF0YVswXSAhPSBBUENJMzEyMF9FT1NfTU9ERSkpCisJCXJldHVybiAtMTsKKworCS8vIENoZWNrIGZvciBDb252ZXJzaW9uIHRpbWUgdG8gYmUgYWRkZWQgPz8KKwlkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSA9IGRhdGFbMl07CisKKwlpZiAoZGF0YVswXSA9PSBBUENJMzEyMF9FT1NfTU9ERSkgeworCisJCS8vVGVzdCB0aGUgbnVtYmVyIG9mIHRoZSBjaGFubmVsCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhWzNdOyBpKyspIHsKKworCQkJaWYgKENSX0NIQU4oZGF0YVs0ICsgaV0pID49IHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsKSB7CisJCQkJcHJpbnRrKCJiYWQgY2hhbm5lbCBsaXN0XG4iKTsKKwkJCQlyZXR1cm4gLTI7CisJCQl9CisJCX0KKworCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT1NfTU9ERTsKKworCQlpZiAoZGF0YVsxXSkgeworCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9FTkFCTEU7CisJCX0gZWxzZQorCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCQkvLyBDb3B5IGNoYW5uZWwgbGlzdCBhbmQgUmFuZ2UgTGlzdCB0byBkZXZwcml2CisKKwkJZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzID0gZGF0YVszXTsKKwkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsgaSsrKSB7CisJCQlkZXZwcml2LT51aV9BaUNoYW5uZWxMaXN0W2ldID0gZGF0YVs0ICsgaV07CisJCX0KKworCX0gZWxzZQkJCS8vIEVPQworCXsKKwkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9DX01PREU7CisJCWlmIChkYXRhWzFdKSB7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJfQorCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuUmVhZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICB8Cit8CQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbgkJCQkJCQkJIHwKK3wJCQkJUmVhZHMgYW5hbG9nIGlucHV0IGluIHN5bmNocm9ub3VzIG1vZGUgICAgICAgICAgICAgICB8Cit8CQkJICBFT0MgYW5kIEVPUyBpcyBzZWxlY3RlZCBhcyBwZXIgY29uZmlndXJlZCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGlmIG5vIGNvbnZlcnNpb24gdGltZSBpcyBzZXQgdXNlcyBkZWZhdWx0IGNvbnZlcnNpb24gICB8Cit8CQkJICB0aW1lIDEwIG1pY3Jvc2VjLgkJCQkJICAgICAgCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVTSE9SVCB1c19Db252ZXJ0VGltaW5nLCB1c19UbXBWYWx1ZSwgaTsKKwlCWVRFIGJfVG1wOworCisJLy8gZml4IGNvbnZlcnRpb24gdGltZSB0byAxMCB1cworCWlmICghZGV2cHJpdi0+dWlfRW9jRW9zQ29udmVyc2lvblRpbWUpIHsKKwkJcHJpbnRrKCJObyB0aW1lcjAgVmFsdWUgdXNpbmcgMTAgdXNcbiIpOworCQl1c19Db252ZXJ0VGltaW5nID0gMTA7CisJfSBlbHNlCisJCXVzX0NvbnZlcnRUaW1pbmcgPSAoVVNIT1JUKSAoZGV2cHJpdi0+dWlfRW9jRW9zQ29udmVyc2lvblRpbWUgLyAxMDAwKTsJLy8gbmFubyB0byB1c2Vjb25kcworCisJLy8gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZEFuYWxvZ0lucHV0KGRldix1c19Db252ZXJ0VGltaW5nLGluc24tPm4sJmluc24tPmNoYW5zcGVjLGRhdGEsaW5zbi0+dW51c2VkWzBdKTsKKworCS8vIENsZWFyIHNvZnR3YXJlIHJlZ2lzdGVycworCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gMDsKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IDA7CisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOworLy8gICAgICAgIGRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyPTA7CisKKwlpZiAoaW5zbi0+dW51c2VkWzBdID09IDIyMikJLy8gc2Vjb25kIGluc24gcmVhZAorCXsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCQlkYXRhW2ldID0gZGV2cHJpdi0+dWlfQWlSZWFkRGF0YVtpXTsKKwkJfQorCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkJLy9UZXN0aW5nIGlmIGJvYXJkIGhhdmUgdGhlIG5ldyBRdWFydHogYW5kIGNhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZQorCQkvL3RvIHNldCBpbiB0aGUgdGltZXIKKworCQl1c19UbXBWYWx1ZSA9CisJCQkoVVNIT1JUKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkvL0VMMjUwODA0OiBUZXN0aW5nIGlmIGJvYXJkIEFQQ0kzMTIwIGhhdmUgdGhlIG5ldyBRdWFydHogb3IgaWYgaXQgaXMgYW4gQVBDSTMwMDEKKwkJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCQl8fCAhc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzAwMSIpKSB7CisJCQl1c19Db252ZXJ0VGltaW5nID0gKHVzX0NvbnZlcnRUaW1pbmcgKiAyKSAtIDI7CisJCX0gZWxzZSB7CisJCQl1c19Db252ZXJ0VGltaW5nID0KKwkJCQkoKHVzX0NvbnZlcnRUaW1pbmcgKiAxMjkyNikgLyAxMDAwMCkgLSAxOworCQl9CisKKwkJdXNfVG1wVmFsdWUgPSAoVVNIT1JUKSBkZXZwcml2LT5iX0ludGVycnVwdE1vZGU7CisKKwkJc3dpdGNoICh1c19UbXBWYWx1ZSkgeworCisJCWNhc2UgQVBDSTMxMjBfRU9DX01PREU6CisKKwkJCS8vIFRlc3RpbmcgdGhlIGludGVycnVwdCBmbGFnIGFuZCBzZXQgdGhlIEVPQyBiaXQKKwkJCS8vIENsZWFycyB0aGUgRklGTworCQkJaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCisJCQkvLyBJbml0aWFsaXplIHRoZSBzZXF1ZW5jZSBhcnJheQorCisJCQkvL2lmICghaV9BUENJMzEyMF9TZXR1cENoYW5uZWxMaXN0KGRldixzLDEsY2hhbmxpc3QsMCkpICByZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKCFpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3QoZGV2LCBzLCAxLAorCQkJCQkmaW5zbi0+Y2hhbnNwZWMsIDApKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkvL0luaXRpYWxpemUgVGltZXIgMCBtb2RlIDQKKwkJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8CisJCQkJQVBDSTMxMjBfVElNRVJfMF9NT0RFXzQ7CisJCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDEpOworCisJCQkvLyBSZXNldCB0aGUgc2NhbiBiaXQgYW5kIERpc2FibGVzIHRoZSAgRU9TLCBETUEsIEVPQyBpbnRlcnJ1cHQKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfU0NBTjsKKworCQkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCisJCQkJLy9EaXNhYmxlcyB0aGUgRU9TLERNQSBhbmQgZW5hYmxlcyB0aGUgRU9DIGludGVycnVwdAorCQkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQkJKGRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVCkgfAorCQkJCQlBUENJMzEyMF9FTkFCTEVfRU9DX0lOVDsKKwkJCQlpbncoZGV2cHJpdi0+aW9iYXNlKTsKKworCQkJfSBlbHNlIHsKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCWRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfQUxMX0lOVEVSUlVQVF9XSVRIT1VUX1RJTUVSOworCQkJfQorCisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJLy8gU2V0cyBnYXRlIDAKKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9DTEVBUl9QQV9QUikgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCQkvLyBTZWxlY3QgVGltZXIgMAorCQkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKKwkJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCisJCQkvL1NldCB0aGUgY29udmVydGlvbiB0aW1lCisJCQlvdXR3KHVzX0NvbnZlcnRUaW1pbmcsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCQl1c19UbXBWYWx1ZSA9CisJCQkJKFVTSE9SVCkgaW53KGRldi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0RJU0FCTEUpIHsKKworCQkJCWRvIHsKKwkJCQkJLy8gV2FpdGluZyBmb3IgdGhlIGVuZCBvZiBjb252ZXJzaW9uCisJCQkJCXVzX1RtcFZhbHVlID0KKwkJCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTMxMjBfUkRfU1RBVFVTKTsKKwkJCQl9IHdoaWxlICgodXNfVG1wVmFsdWUgJiBBUENJMzEyMF9FT0MpID09CisJCQkJCUFQQ0kzMTIwX0VPQyk7CisKKwkJCQkvL1JlYWQgdGhlIHJlc3VsdCBpbiBGSUZPICBhbmQgcHV0IGl0IGluIGluc24gZGF0YSBwb2ludGVyCisJCQkJdXNfVG1wVmFsdWUgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgMCk7CisJCQkJKmRhdGEgPSB1c19UbXBWYWx1ZTsKKworCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBBUENJMzEyMF9FT1NfTU9ERToKKworCQkJaW53KGRldnByaXYtPmlvYmFzZSk7CisJCQkvLyBDbGVhcnMgdGhlIEZJRk8KKwkJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKwkJCS8vIGNsZWFyIFBBIFBSICBhbmQgZGlzYWJsZSB0aW1lciAwCisKKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9DTEVBUl9QQV9QUikgfAorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVIwOworCisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCQlpZiAoIWlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChkZXYsIHMsCisJCQkJCWRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVscywKKwkJCQkJZGV2cHJpdi0+dWlfQWlDaGFubmVsTGlzdCwgMCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8vSW5pdGlhbGl6ZSBUaW1lciAwIG1vZGUgMgorCQkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJCShkZXZwcml2LT4KKwkJCQliX1RpbWVyU2VsZWN0TW9kZSAmIDB4RkMpIHwKKwkJCQlBUENJMzEyMF9USU1FUl8wX01PREVfMjsKKwkJCW91dGIoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJCS8vU2VsZWN0IFRpbWVyIDAKKwkJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQkJLy9TZXQgdGhlIGNvbnZlcnRpb24gdGltZQorCQkJb3V0dyh1c19Db252ZXJ0VGltaW5nLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkJLy9TZXQgdGhlIHNjYW4gYml0CisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfU0NBTjsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCQkvL0lmIEludGVycnVwdCBmdW5jdGlvbiBpcyBsb2FkZWQKKwkJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJCQkvL0Rpc2FibGVzIHRoZSBFT0MsRE1BIGFuZCBlbmFibGVzIHRoZSBFT1MgaW50ZXJydXB0CisJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCQkoZGV2cHJpdi0+CisJCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYKKwkJCQkJQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UKSB8CisJCQkJCUFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UOworCQkJCWludyhkZXZwcml2LT5pb2Jhc2UpOworCisJCQl9IGVsc2UKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCWRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfQUxMX0lOVEVSUlVQVF9XSVRIT1VUX1RJTUVSOworCisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisKKwkJCS8vU2V0cyBnYXRlIDAKKworCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMDsKKwkJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkJCS8vU3RhcnQgY29udmVyc2lvbgorCQkJb3V0dygwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9TVEFSVF9DT05WRVJTSU9OKTsKKworCQkJLy9XYWl0aW5nIG9mIGVuZCBvZiBjb252ZXJ0aW9uIGlmIGludGVycnVwdCBpcyBub3QgaW5zdGFsbGVkCisJCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRElTQUJMRSkgeworCQkJCS8vV2FpdGluZyB0aGUgZW5kIG9mIGNvbnZlcnRpb24KKwkJCQlkbyB7CisJCQkJCXVzX1RtcFZhbHVlID0KKwkJCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTMxMjBfUkRfU1RBVFVTKTsKKwkJCQl9CisJCQkJd2hpbGUgKCh1c19UbXBWYWx1ZSAmIEFQQ0kzMTIwX0VPUykgIT0KKwkJCQkJQVBDSTMxMjBfRU9TKTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHM7CisJCQkJCWkrKykgeworCQkJCQkvL1JlYWQgdGhlIHJlc3VsdCBpbiBGSUZPIGFuZCB3cml0ZSB0aGVtIGluIHNoYXJlZCBtZW1vcnkKKwkJCQkJdXNfVG1wVmFsdWUgPSBpbncoZGV2cHJpdi0+aW9iYXNlKTsKKwkJCQkJZGF0YVtpXSA9IChVSU5UKSB1c19UbXBWYWx1ZTsKKwkJCQl9CisKKwkJCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsJLy8gUmVzdG9yZSBkZWZhdWx0cy4KKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoImlucHV0cyB3cm9uZ1xuIik7CisKKwkJfQorCQlkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSA9IDA7CS8vIHJlIGluaXRpYWxpemluZyB0aGUgdmFyaWFibGU7CisJfQorCisJcmV0dXJuIGluc24tPm47CisKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfCAJCQkJCQkJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RvcHMgQ3ljbGljIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDowICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy8gRGlzYWJsZSBBMlAgRmlmbyB3cml0ZSBhbmQgQU1XRU4gc2lnbmFsCisJb3V0dygwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgNCk7CisKKwkvL0Rpc2FibGUgQnVzIE1hc3RlciBBREQgT04KKwlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJb3V0dygwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwlvdXR3KDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCS8vRGlzYWJsZSBCVVMgTWFzdGVyIFBDSQorCW91dGwoMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTUNTUik7CisKKwkvL291dGwoaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19JTlRDU1IpJih+QUlOVF9XUklURV9DT01QTCksIGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19JTlRDU1IpOyAgICAvLyBzdG9wIGFtY2MgaXJxcworCS8vb3V0bChpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjK0FNQ0NfT1BfUkVHX01DU1IpJih+RU5fQTJQX1RSQU5TRkVSUyksIGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19NQ1NSKTsgLy8gc3RvcCBETUEKKworCS8vRGlzYWJsZSBleHQgdHJpZ2dlcgorCWlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoZGV2KTsKKworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gMDsKKwkvL3N0b3AgIGNvdW50ZXJzCisJb3V0dyhkZXZwcml2LT4KKwkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMCAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVIxLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJb3V0dyhBUENJMzEyMF9ESVNBQkxFX0FMTF9USU1FUiwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCS8vRElTQUJMRV9BTExfSU5URVJSVVBUCisJb3V0YihBUENJMzEyMF9ESVNBQkxFX0FMTF9JTlRFUlJVUFQsCisJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCS8vRmx1c2ggRklGTworCWluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuID0gMDsKKwlkZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT51aV9BaUJ1ZmZlclB0ciA9IDA7CisJZGV2cHJpdi0+Yl9BaUNvbnRpbnVvdXMgPSAwOworCWRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlciA9IDA7CisKKwlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwlpX0FQQ0kzMTIwX1Jlc2V0KGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldnwKK3wJCQksc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUZXN0IHZhbGlkaXR5IGZvciBhIGNvbW1hbmQgZm9yIGN5Y2xpYyBhbmxvZyBpbnB1dCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlzaXRpb24gIAkJCQkJCSAgICAgCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOjAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsJCS8vIGRpdmlzb3IxLGRpdmlzb3IyOworCisJLy8gc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQKKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLy9zdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZQorCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSKQorCQllcnIrKzsKKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8vIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUKKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikJLy8gVGVzdCBEZWxheSB0aW1pbmcKKwl7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnMpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzX2JvYXJkLT51aV9NaW5EZWxheXRpbWVOczsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikJLy8gVGVzdCBBY3F1aXNpdGlvbiB0aW1pbmcKKwl7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCWlmICgoY21kLT5jb252ZXJ0X2FyZykKKwkJCQkmJiAoY21kLT5jb252ZXJ0X2FyZyA8CisJCQkJCXRoaXNfYm9hcmQtPnVpX01pbkFjcXVpc2l0aW9udGltZU5zKSkgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwKKwkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKKwkJCQllcnIrKzsKKworCQkJfQorCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiB0aGlzX2JvYXJkLT5pX0FpQ2hhbm5lbExpc3QpIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5pX0FpQ2hhbm5lbExpc3Q7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvLyBUUklHX05PTkUKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLy8gc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiBpbnQgaV9BUENJMzEyMF9Db21tYW5kQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgIHwKK3wJCQkJCQkJCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRG9lcyBhc3luY2hyb25vdXMgYWNxdWlzaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBtb2RlIDEgb3IgMi4JCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJLy9sb2FkaW5nIHByaXZhdGUgc3RydWN0dXJlIHdpdGggY21kIHN0cnVjdHVyZSBpbnB1dHMKKwlkZXZwcml2LT51aV9BaUZsYWdzID0gY21kLT5mbGFnczsKKwlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwlkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggPSBjbWQtPnNjYW5fZW5kX2FyZzsKKwlkZXZwcml2LT5wdWlfQWlDaGFubmVsTGlzdCA9IGNtZC0+Y2hhbmxpc3Q7CisKKwkvL1VQREFURS0wLjcuNTctPjAuNy42OGRldnByaXYtPkFpRGF0YT1zLT5hc3luYy0+ZGF0YTsKKwlkZXZwcml2LT5BaURhdGEgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmOworCS8vVVBEQVRFLTAuNy41Ny0+MC43LjY4ZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoPXMtPmFzeW5jLT5kYXRhX2xlbjsKKwlkZXZwcml2LT51aV9BaURhdGFMZW5ndGggPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zID0gMDsKKwl9CisKKwlkZXZwcml2LT51aV9BaVRpbWVyMCA9IDA7CS8vIHZhcmlhYmxlcyBjaGFuZ2VkIHRvIHRpbWVyMCx0aW1lcjEKKwlkZXZwcml2LT51aV9BaVRpbWVyMSA9IDA7CisJaWYgKChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPT0gMCkgfHwgKGRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9PSAtMSkpCisJCWRldnByaXYtPmJfQWlDb250aW51b3VzID0gMTsJLy8gdXNlciB3YW50IG5ldmVyZW5kaW5nIGFuYWxvZyBhY3F1aXNpdGlvbgorCS8vIHN0b3BwZWQgdXNpbmcgY2FuY2VsCisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9IEFQQ0kzMTIwX0VOQUJMRTsKKwllbHNlCisJCWRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9IEFQQ0kzMTIwX0RJU0FCTEU7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvLyBtb2RlIDEgb3IgMworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvLyBtb2RlIDEKKworCQkJZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSBjbWQtPmNvbnZlcnRfYXJnOwkvLyB0aW1lciBjb25zdGFudCBpbiBuYW5vIHNlY29uZHMKKwkJCS8vcmV0dXJuIHRoaXNfYm9hcmQtPmlfaHdkcnZfQ29tbWFuZEFuYWxvZ0lucHV0KDEsZGV2LHMpOworCQkJcmV0dXJuIGlfQVBDSTMxMjBfQ3ljbGljQW5hbG9nSW5wdXQoMSwgZGV2LCBzKTsKKwkJfQorCisJfQorCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQkmJiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSkgeworCQkvLyBtb2RlIDIKKwkJZGV2cHJpdi0+dWlfQWlUaW1lcjEgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkZXZwcml2LT51aV9BaVRpbWVyMCA9IGNtZC0+Y29udmVydF9hcmc7CS8vIHZhcmlhYmxlIGNoYW5nZWQgdGltZXIyIHRvIHRpbWVyMAorCQkvL3JldHVybiB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRBbmFsb2dJbnB1dCgyLGRldixzKTsKKwkJcmV0dXJuIGlfQVBDSTMxMjBfQ3ljbGljQW5hbG9nSW5wdXQoMiwgZGV2LCBzKTsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogIGludCBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KGludCBtb2RlLCAgICAgICAgICAgIHwKK3wJCSAJICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGlzIHVzZWQgZm9yIGFuYWxvZyBpbnB1dCBjeWNsaWMgYWNxdWlzaXRpb24gICAgICAgfAorfAkJCSAgUGVyZm9ybXMgdGhlIGNvbW1hbmQgb3BlcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIElmIERNQSBpcyBjb25maWd1cmVkIGRvZXMgRE1BIGluaXRpYWxpemF0aW9uICAgICAgICAgICB8Cit8CQkJICBvdGhlcndpc2UgZG9lcyB0aGUgYWNxdWlzaXRpb24gd2l0aCBFT1MgaW50ZXJydXB0LiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfQ3ljbGljQW5hbG9nSW5wdXQoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlCWVRFIGJfVG1wOworCVVJTlQgdWlfVG1wLCB1aV9EZWxheVRpbWluZyA9IDAsIHVpX1RpbWVyVmFsdWUxID0gMCwgZG1hbGVuMCA9CisJCTAsIGRtYWxlbjEgPSAwLCB1aV9UaW1lclZhbHVlMiA9CisJCTAsIHVpX1RpbWVyVmFsdWUwLCB1aV9Db252ZXJ0VGltaW5nOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJLy9kZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb249QVBDSTMxMjBfRU5BQkxFOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJLyoqKioqKioqKioqKioqKioqKiovCisJLyogUmVzZXRzIHRoZSBGSUZPICovCisJLyoqKioqKioqKioqKioqKioqKiovCisJaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfUkVTRVRfRklGTyk7CisKKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCS8vaW53KGRldi0+aW9iYXNlK0FQQ0kzMTIwX1JEX1NUQVRVUyk7CisJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEFjcXVpc2l0aW9uIGluaXRpYWxpemVkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0VOQUJMRTsKKwkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCS8vIGNsZWFyIHNvZnR3YXJlICByZWdpc3RlcnMKKwlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IDA7CisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOworCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0gMDsKKwkvL2RldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyPTA7CisKKwkvL0NPTU1FTlQgSksgMDcuMDUuMDQ6IEZvbGxvd2luZ3MgY2FsbHMgYXJlIGluIGlfQVBDSTMxMjBfU3RhcnRBbmFsb2dJbnB1dEFjcXVpc2l0aW9uCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIENsZWFyIFRpbWVyIFdyaXRlIFRDIElOVCAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bChBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQsCisJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kzMTIwX0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2xlYXJzIHRoZSB0aW1lciBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkvL2ludyhkZXYtPmlvYmFzZStBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOworCWluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEaXNhYmxlcyBBbGwgVGltZXIgICAgICovCisJLyogU2V0cyBQUiBhbmQgUEEgdG8gMCAgICAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJgorCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMCAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVIxICYgQVBDSTMxMjBfQ0xFQVJfUEFfUFI7CisKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisgICAvKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldHMgdGhlIEZJRk8gKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuID0gMDsKKwlkZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT51aV9BaUJ1ZmZlclB0ciA9IDA7CisJZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyID0gMDsKKworCS8vIHZhbHVlIGZvciB0aW1lcjIgIG1pbnVzIC0yIGhhcyB0byBiZSBkb25lIC4uLi4uZHVubm8geT8/CisJdWlfVGltZXJWYWx1ZTIgPSBkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgLSAyOworCXVpX0NvbnZlcnRUaW1pbmcgPSBkZXZwcml2LT51aV9BaVRpbWVyMDsKKworCWlmIChtb2RlID09IDIpCisJCXVpX0RlbGF5VGltaW5nID0gZGV2cHJpdi0+dWlfQWlUaW1lcjE7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEluaXRpYWxpemVzIHRoZSBzZXF1ZW5jZSBhcnJheSAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKCFpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3QoZGV2LCBzLCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMsCisJCQlkZXZwcml2LT5wdWlfQWlDaGFubmVsTGlzdCwgMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdXNfVG1wVmFsdWUgPSAoVVNIT1JUKSBpbncoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworLyoqKiBFTDI0MTAwMyA6IGFkZCB0aGlzIHNlY3Rpb24gaW4gY29tbWVudCBiZWNhdXNlIGZsb2F0cyBtdXN0IG5vdCBiZSB1c2VkCisJIGlmKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCk9PTB4MDBCMCkKKwkgeworICAgICAgICAgICBmX0NvbnZlcnRWYWx1ZT0oKChmbG9hdCl1aV9Db252ZXJ0VGltaW5nICogMC4wMDIpIC0gMik7CisJCXVpX1RpbWVyVmFsdWUwPShVSU5UKWZfQ29udmVydFZhbHVlOworCQlpZiAobW9kZT09MikKKwkJeworCQkJZl9EZWxheVZhbHVlICAgICA9ICgoKGZsb2F0KXVpX0RlbGF5VGltaW5nICogMC4wMDAwMikgLSAyKTsKKwkJCXVpX1RpbWVyVmFsdWUxICA9ICAgKFVJTlQpIGZfRGVsYXlWYWx1ZTsKKwkJfQorCSB9CisgICAJIGVsc2UKKwkgeworCQlmX0NvbnZlcnRWYWx1ZT0oKChmbG9hdCl1aV9Db252ZXJ0VGltaW5nICogMC4wMDEyOTI2KSAtIDEpOworCQl1aV9UaW1lclZhbHVlMD0oVUlOVClmX0NvbnZlcnRWYWx1ZTsKKwkJaWYgKG1vZGUgPT0gMikKKwkJeworCQkgICAgIGZfRGVsYXlWYWx1ZSAgICAgPSAoKChmbG9hdCl1aV9EZWxheVRpbWluZyAqIDAuMDAwMDEyOTI2KSAtIDEpOworCQkgICAgIHVpX1RpbWVyVmFsdWUxICA9ICAgKFVJTlQpIGZfRGVsYXlWYWx1ZTsKKwkJfQorCX0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKiBFTDI0MTAwMyBCZWdpbiA6IGFkZCB0aGlzIHNlY3Rpb24gdG8gcmVwbGFjZSBmbG9hdHMgY2FsY3VsYXRpb24gYnkgaW50ZWdlciBjYWxjdWxhdGlvbnMgKiovCisJLy9FTDI1MDgwNDogVGVzdGluZyBpZiBib2FyZCBBUENJMzEyMCBoYXZlIHRoZSBuZXcgUXVhcnR6IG9yIGlmIGl0IGlzIGFuIEFQQ0kzMDAxCisJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCXx8ICFzdHJjbXAodGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSwgImFwY2kzMDAxIikpIHsKKwkJdWlfVGltZXJWYWx1ZTAgPSB1aV9Db252ZXJ0VGltaW5nICogMiAtIDIwMDA7CisJCXVpX1RpbWVyVmFsdWUwID0gdWlfVGltZXJWYWx1ZTAgLyAxMDAwOworCisJCWlmIChtb2RlID09IDIpIHsKKwkJCXVpX0RlbGF5VGltaW5nID0gdWlfRGVsYXlUaW1pbmcgLyAxMDAwOworCQkJdWlfVGltZXJWYWx1ZTEgPSB1aV9EZWxheVRpbWluZyAqIDIgLSAyMDA7CisJCQl1aV9UaW1lclZhbHVlMSA9IHVpX1RpbWVyVmFsdWUxIC8gMTAwOworCQl9CisJfSBlbHNlIHsKKwkJdWlfQ29udmVydFRpbWluZyA9IHVpX0NvbnZlcnRUaW1pbmcgLyAxMDAwOworCQl1aV9UaW1lclZhbHVlMCA9IHVpX0NvbnZlcnRUaW1pbmcgKiAxMjkyNiAtIDEwMDAwOworCQl1aV9UaW1lclZhbHVlMCA9IHVpX1RpbWVyVmFsdWUwIC8gMTAwMDA7CisKKwkJaWYgKG1vZGUgPT0gMikgeworCQkJdWlfRGVsYXlUaW1pbmcgPSB1aV9EZWxheVRpbWluZyAvIDEwMDA7CisJCQl1aV9UaW1lclZhbHVlMSA9IHVpX0RlbGF5VGltaW5nICogMTI5MjYgLSAxOworCQkJdWlfVGltZXJWYWx1ZTEgPSB1aV9UaW1lclZhbHVlMSAvIDEwMDAwMDA7CisJCX0KKwl9CisvKioqIEVMMjQxMDAzIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoZGV2cHJpdi0+Yl9FeHR0cmlnRW5hYmxlID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCQlpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoZGV2KTsJLy8gYWN0aXZhdGUgRVhUIHRyaWdnZXIKKwl9CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAxOgorCQkvLyBpbml0IHRpbWVyMCBpbiBtb2RlIDIKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8IEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV8yOworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkvL1NlbGVjdCBUaW1lciAwCisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQkvL1NldCB0aGUgY29udmVydGlvbiB0aW1lCisJCW91dHcoKChVU0hPUlQpIHVpX1RpbWVyVmFsdWUwKSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJLy8gaW5pdCB0aW1lcjEgaW4gbW9kZSAyCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCShkZXZwcml2LT4KKwkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHhGMykgfCBBUENJMzEyMF9USU1FUl8xX01PREVfMjsKKwkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9TZWxlY3QgVGltZXIgMQorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzFfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJLy9TZXQgdGhlIGNvbnZlcnRpb24gdGltZQorCQlvdXR3KCgoVVNIT1JUKSB1aV9UaW1lclZhbHVlMSksCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvLyBpbml0IHRpbWVyMCBpbiBtb2RlIDIKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8IEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV8yOworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkvL1NlbGVjdCBUaW1lciAwCisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCisJCS8vU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUKKwkJb3V0dygoKFVTSE9SVCkgdWlfVGltZXJWYWx1ZTApLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisJCWJyZWFrOworCisJfQorCS8vICAgIyMjIyMjIyMjI2NvbW1vbiBmb3IgYWxsIG1vZGVzIyMjIyMjIyMjIyMjIyMjIyMKKworCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBDbGVhcnMgdGhlIFNDQU4gYml0ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJLy9kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3Rlcj1kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciB8IEFQQ0kzMTIwX0RJU0FCTEVfU0NBTjsKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyICYKKwkJQVBDSTMxMjBfRElTQUJMRV9TQ0FOOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJLy8gSWYgRE1BIGlzIGRpc2FibGVkCisJaWYgKGRldnByaXYtPnVzX1VzZURtYSA9PSBBUENJMzEyMF9ESVNBQkxFKSB7CisJCS8vIGRpc2FibGUgRU9DIGFuZCBlbmFibGUgRU9TCisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPU19NT0RFOworCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKKworCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkoZGV2cHJpdi0+CisJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCkgfAorCQkJQVBDSTMxMjBfRU5BQkxFX0VPU19JTlQ7CisJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQlpZiAoIWRldnByaXYtPmJfQWlDb250aW51b3VzKSB7CisJCQkvLyBjb25maWd1cmUgVGltZXIyIEZvciBjb3VudGluZyAgRU9TCisJCQkvL1Jlc2V0IGdhdGUgMiBvZiBUaW1lciAyIHRvIGRpc2FibGUgaXQgKFNldCBCaXQgRDE0IHRvIDApCisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMjsKKwkJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCQkJLy8gRElTQUJMRSBUSU1FUiBJTlRFUlJVUFQKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQgJiAweEVGOworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJLy8oMSkgSW5pdCB0aW1lciAyIGluIG1vZGUgMCBhbmQgd3JpdGUgdGltZXIgdmFsdWUKKwkJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweDBGKSB8CisJCQkJQVBDSTMxMjBfVElNRVJfMl9NT0RFXzA7CisJCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJCS8vV3JpdGluZyBMT1cgV09SRAorCQkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQkJb3V0dyhMT1dPUkQodWlfVGltZXJWYWx1ZTIpLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCQkvL1dyaXRpbmcgSElHSCBXT1JECisJCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQkJb3V0dyhISVdPUkQodWlfVGltZXJWYWx1ZTIpLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCQkvLygyKSBSZXNldCBGQ19USU1FUiBCSVQgIENsZWFyaW5nIHRpbWVyIHN0YXR1cyByZWdpc3RlcgorCQkJaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKwkJCS8vIGVuYWJsZSB0aW1lciBjb3VudGVyIGFuZCBkaXNhYmxlIHdhdGNoIGRvZworCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCShkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0NPVU5URVIpICYKKwkJCQlBUENJMzEyMF9ESVNBQkxFX1dBVENIRE9HOworCQkJLy8gc2VsZWN0IEVPUyBjbG9jayBpbnB1dCBmb3IgdGltZXIgMgorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyIHwKKwkJCQlBUENJMzEyMF9USU1FUjJfU0VMRUNUX0VPUzsKKwkJCS8vIEVuYWJsZSB0aW1lcjIgIGludGVycnVwdAorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfVElNRVJfSU5UOworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKwkJCWRldnByaXYtPmJfVGltZXIyTW9kZSA9IEFQQ0kzMTIwX0NPVU5URVI7CisJCQlkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKKwkJfQorCX0gZWxzZSB7CisJCS8vIElmIERNQSBFbmFibGVkCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCS8vaW53KGRldi0+aW9iYXNlKzApOy8vIHJlc2V0IEVPQyBiaXQKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0RNQV9NT0RFOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEaXNhYmxlcyB0aGUgRU9DLCBFT1MgaW50ZXJydXB0ICAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSBkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQlBUENJMzEyMF9ESVNBQkxFX0VPQ19JTlQgJiBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQ7CisKKwkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCWRtYWxlbjAgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJTaXplWzBdOworCQlkbWFsZW4xID0gZGV2cHJpdi0+dWlfRG1hQnVmZmVyU2l6ZVsxXTsKKworCQlpZiAoIWRldnByaXYtPmJfQWlDb250aW51b3VzKSB7CisKKwkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyAqIGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7CS8vIG11c3Qgd2UgZmlsbCBmdWxsIGZpcnN0IGJ1ZmZlcj8KKwkJCQlkbWFsZW4wID0KKwkJCQkJZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICoKKwkJCQkJZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoICogMjsKKwkJCX0gZWxzZSBpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgKiBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyIC0gZG1hbGVuMCkpCS8vIGFuZCBtdXN0IHdlIGZpbGwgZnVsbCBzZWNvbmQgYnVmZmVyIHdoZW4gZmlyc3QgaXMgb25jZSBmaWxsZWQ/CisJCQkJZG1hbGVuMSA9CisJCQkJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyAqCisJCQkJCWRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIgLSBkbWFsZW4wOworCQl9CisKKwkJaWYgKGRldnByaXYtPnVpX0FpRmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCQkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7CisJCQkJZG1hbGVuMCA9IGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDI7CisJCQkJaWYgKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAmIDEpCisJCQkJCWRtYWxlbjAgKz0gMjsKKwkJCX0KKwkJCWlmIChkbWFsZW4xID4gKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7CisJCQkJZG1hbGVuMSA9IGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDI7CisJCQkJaWYgKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAmIDEpCisJCQkJCWRtYWxlbjEgLT0gMjsKKwkJCQlpZiAoZG1hbGVuMSA8IDQpCisJCQkJCWRtYWxlbjEgPSA0OworCQkJfQorCQl9IGVsc2UgewkvLyBpc24ndCBvdXRwdXQgYnVmZiBzbWFsbGVyIHRoYXQgb3VyIERNQSBidWZmPworCQkJaWYgKGRtYWxlbjAgPiAoZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoKSkgeworCQkJCWRtYWxlbjAgPSBkZXZwcml2LT51aV9BaURhdGFMZW5ndGg7CisJCQl9CisJCQlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaURhdGFMZW5ndGgpKSB7CisJCQkJZG1hbGVuMSA9IGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aDsKKwkJCX0KKwkJfQorCQlkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdID0gZG1hbGVuMDsKKwkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVsxXSA9IGRtYWxlbjE7CisKKwkJLy9Jbml0aWFsaXplIERNQQorCisJCS8vIFNldCBUcmFuc2ZlciBjb3VudCBlbmFibGUgYml0IGFuZCBBMlBfZmlmbyByZXNldCBiaXQgaW4gQUdDU1RTIHJlZ2lzdGVyCisJCS8vMQorCQl1aV9UbXAgPSBBR0NTVFNfVENfRU5BQkxFIHwgQUdDU1RTX1JFU0VUX0EyUF9GSUZPOworCQlvdXRsKHVpX1RtcCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfQUdDU1RTKTsKKworCQkvLyBjaGFuZ2VkICBzaW5jZSAxNiBiaXQgaW50ZXJmYWNlIGZvciBhZGQgb24KKwkJLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRU5BQkxFIEJVUyBNQVNURVIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdILAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8vIFRPIFZFUklGSUVECisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCW91dHcoMHgxMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJCS8vMiAgTm8gY2hhbmdlCisJCS8vIEEyUCBGSUZPIE1BTkFHRU1FTlQKKwkJLy8gQTJQIGZpZm8gcmVzZXQgICYgdHJhbnNmZXIgY29udHJvbCBlbmFibGUKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogQTJQIEZJRk8gTUFOQUdFTUVOVCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRsKEFQQ0kzMTIwX0EyUF9GSUZPX01BTkFHRU1FTlQsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQlBUENJMzEyMF9BTUNDX09QX01DU1IpOworCisJCS8vMworCQkvL2JlZ2lubmluZyBhZGRyZXNzIG9mIGRtYSBidWYKKwkJLy9UaGUgMzIgYml0IGFkZHJlc3Mgb2YgZG1hIGJ1ZmZlciBpcyBjb252ZXJ0ZWQgaW50byB0d28gMTYgYml0IGFkZHJlc3NlcworCQkvLyBDYW4gZG9uZSBieSB1c2luZyBfYXR0YWNoIGFuZCBwdXQgaW50byBpbnRvIGFuIGFycmF5CisJCS8vIGFycmF5IHVzZWQgbWF5IGJlIGZvciBkaWZmZXJuZXQgcGFnZXMKKworCQkvLyBETUEgU3RhcnQgQWRyZXNzIExvdworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KChkZXZwcml2LT51bF9EbWFCdWZmZXJId1swXSAmIDB4RkZGRiksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBETUEgU3RhcnQgQWRyZXNzIEhpZ2ggKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dygoZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF0gLyA2NTUzNiksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy80CisJCS8vIGFtb3VudCBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcmVkICBzZXQgdHJhbnNmZXIgY291bnQKKwkJLy8gdXNlZCBBRERPTiBNV1RDIHJlZ2lzdGVyCisJCS8vY29tbWVudGVkIHRlc3RpbmcgICAgICAgICAgICAgb3V0bChkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uK0FNQ0NfT1BfUkVHX0FNV1RDKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBOYnIgb2YgYWNxdWlzaXRpb24gTE9XICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XVENfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoKGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMF0gJiAweEZGRkYpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBOYnIgb2YgYWNxdWlzaXRpb24gSElHSCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoKGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMF0gLyA2NTUzNiksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy81CisJCS8vIFRvIGNvbmZpZ3VyZSBBMlAgRklGTworCQkvLyB0ZXN0aW5nIG91dGwoIEZJRk9fQURWQU5DRV9PTl9CWVRFXzIsZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjK0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKwkJLyoqKioqKioqKioqKioqKioqKi8KKwkJLyogQTJQIEZJRk8gUkVTRVQgKi8KKwkJLyoqKioqKioqKioqKioqKioqKi8KKwkJLy8gVE8gVkVSSUZZCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCW91dGwoMHgwNDAwMDAwMFVMLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19NQ1NSKTsKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKwkJLy82CisJCS8vRU5BQkxFIEEyUCBGSUZPIFdSSVRFIEFORCBFTkFCTEUgQU1XRU4KKwkJLy8gQU1XRU5fRU5BQkxFIHwgQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICgweDAxfDB4MDIpPTB4MDMKKwkJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkJLy9vdXR3KDMsZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDQpOworCQkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCQkvLzcKKwkJLy9pbml0aWFsaXNlIGVuZCBvZiBkbWEgaW50ZXJydXB0ICBBSU5UX1dSSVRFX0NPTVBMID0gRU5BQkxFX1dSSVRFX1RDX0lOVChBRERJKQorCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBBMlAgRklGTyBDT05GSUdVUkFURSwgRU5EIE9GIERNQSBJTlRFUlJVUFQgSU5JVCAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRsKChBUENJMzEyMF9GSUZPX0FEVkFOQ0VfT05fQllURV8yIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UKSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisKKwkJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRU5BQkxFIEEyUCBGSUZPIFdSSVRFIEFORCBFTkFCTEUgQU1XRU4gKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dygzLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgNCk7CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJCS8qKioqKioqKioqKioqKioqKiovCisJCS8qIEEyUCBGSUZPIFJFU0VUICovCisJCS8qKioqKioqKioqKioqKioqKiovCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCW91dGwoMHgwNDAwMDAwMFVMLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTMxMjBfQU1DQ19PUF9NQ1NSKTsKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJfQorCisJaWYgKChkZXZwcml2LT51c19Vc2VEbWEgPT0gQVBDSTMxMjBfRElTQUJMRSkKKwkJJiYgIWRldnByaXYtPmJfQWlDb250aW51b3VzKSB7CisJCS8vIHNldCBnYXRlIDIgICB0byBzdGFydCBjb252ZXJzaW9uCisJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMjsKKwkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAxOgorCQkvLyBzZXQgZ2F0ZSAwICAgdG8gc3RhcnQgY29udmVyc2lvbgorCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8IEFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCQlicmVhazsKKwljYXNlIDI6CisJCS8vIHNldCAgZ2F0ZSAwIGFuZCBnYXRlIDEKKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfVElNRVIxOworCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8IEFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCQlicmVhazsKKworCX0KKworCXJldHVybiAwOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgCQkJSU5URVJOQUwgRlVOQ1RJT05TCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiBpbnQgaV9BUENJMzEyMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEhhcmR3YXJlIHJlc2V0IGZ1bmN0aW9uICAgCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCB1c19UbXBWYWx1ZTsKKworCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCWRldnByaXYtPnVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lID0gMDsJLy8gc2V0IGVvYyBlb3MgY29udiB0aW1lIHRvIDAKKwlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IDA7CisKKwkvLyB2YXJpYWJsZXMgdXNlZCBpbiB0aW1lciBzdWJkZXZpY2UKKwlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSAwOworCWRldnByaXYtPmJfVGltZXIySW50ZXJydXB0ID0gMDsKKwlkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPSAwOwkvLyBEaXNhYmxlIGV4dCB0cmlnZ2VyCisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCB3YXRjaGRvZyBmb3IgdGhlIGFub2xvZyBvdXRwdXQgKi8KKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IDA7CisJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkvLyBEaXNhYmxlcyBhbGwgY291bnRlcnMsIGV4dCB0cmlnZ2VyIGFuZCBjbGVhcnMgUEEsIFBSCisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOworCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkvL0NvZGUgdG8gc2V0IHRoZSBhbGwgYW5vbG9nIG8vcCBjaGFubmVsIHRvIDB2CisJLy84MTkxIGlzIGRlY2ltYWwgdmFsdWUgZm9yIHplcm8oMCB2KXZvbHQgaW4gYmlwb2xhciBtb2RlKGRlZmF1bHQpCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfMSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzEpOwkvL2NoYW5uZWwgMQorCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xKTsJLy9jaGFubmVsIDIKKwlvdXR3KDgxOTEgfCBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF8zLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMSk7CS8vY2hhbm5lbCAzCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzEpOwkvL2NoYW5uZWwgNAorCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOwkvL2NoYW5uZWwgNQorCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzYsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8yKTsJLy9jaGFubmVsIDYKKwlvdXR3KDgxOTEgfCBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF83LCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMik7CS8vY2hhbm5lbCA3CisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfOCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOwkvL2NoYW5uZWwgOAorCisJLy8gIFJlc2V0IGRpZ2l0YWwgb3V0cHV0IHRvIEwwVworCisvL0VTMDUgIG91dGIoMHgwLGRldi0+aW9iYXNlK0FQQ0kzMTIwX0RJR0lUQUxfT1VUUFVUKTsKKwl1ZGVsYXkoMTApOworCisJaW53KGRldi0+aW9iYXNlICsgMCk7CS8vbWFrZSBhIGR1bW15IHJlYWQKKwlpbmIoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsJLy8gZmx1c2ggRklGTworCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CS8vIGZsdXNoIEEvRCBzdGF0dXMgcmVnaXN0ZXIKKworCS8vY29kZSB0byByZXNldCB0aGUgUkFNIHNlcXVlbmNlCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdXNfVG1wVmFsdWUgPSBpIDw8IDg7CS8vc2VsZWN0IHRoZSBsb2NhdGlvbgorCQlvdXR3KHVzX1RtcFZhbHVlLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1NFUV9SQU1fQUREUkVTUyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogaW50IGlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgbl9jaGFuLHVuc2lnbmVkIGludCAqY2hhbmxpc3R8Cit8CQkJICAsY2hhciBjaGVjaykJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlRoaXMgZnVuY3Rpb24gd2lsbCBmaXJzdCBjaGVjayBjaGFubmVsIGxpc3QgaXMgb2sgb3Igbm90fAorfGFuZCB0aGVuIGluaXRpYWxpemUgdGhlIHNlcXVlbmNlIFJBTSB3aXRoIHRoZSBwb2xhcml0eSwgR2FpbixDaGFubmVsIG51bWJlciB8Cit8SWYgdGhlIGxhc3QgYXJndW1lbnQgb2YgZnVuY3Rpb24gImNoZWNrImlzIDEgdGhlbiBpdCBvbmx5IGNoZWNrcyB0aGUgY2hhbm5lbHwKK3xsaXN0IGlzIG9rIG9yIG5vdC4JCQkJCQkJCQkJCQkgICAgIAkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnQgbl9jaGFuICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorCQkJICB1bnNpZ25lZCBpbnQgKmNoYW5saXN0CisJCQkgIGNoYXIgY2hlY2sKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBjaGFyIGNoZWNrKQoreworCXVuc2lnbmVkIGludCBpOwkJLy8sIGRpZmZlcmVuY2lhbD0wLCBiaXBvbGFyPTA7CisJdW5zaWduZWQgaW50IGdhaW47CisJdW5zaWduZWQgc2hvcnQgdXNfVG1wVmFsdWU7CisKKwkvKiBjb3JyZWN0IGNoYW5uZWwgYW5kIHJhbmdlIG51bWJlciBjaGVjayBpdHNlbGYgY29tZWRpL3JhbmdlLmMgKi8KKwlpZiAobl9jaGFuIDwgMSkgeworCQlpZiAoIWNoZWNrKQorCQkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCS8vIEFsbCBpcyBvaywgc28gd2UgY2FuIHNldHVwIGNoYW5uZWwvcmFuZ2UgbGlzdAorCWlmIChjaGVjaykKKwkJcmV0dXJuIDE7CisKKwkvL0NvZGUgIHRvIHNldCB0aGUgUEEgYW5kIFBSLi4uSGVyZSBpdCBzZXQgUEEgdG8gMC4uCisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciAmIEFQQ0kzMTIwX0NMRUFSX1BBX1BSOworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gKChuX2NoYW4gLSAxKSAmIDB4ZikgPDwgODsKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CisJCS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQl1c19UbXBWYWx1ZSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwkvLyBnZXQgY2hhbm5lbCBudW1iZXI7CisKKwkJaWYgKENSX1JBTkdFKGNoYW5saXN0W2ldKSA8IEFQQ0kzMTIwX0JJUE9MQVJfUkFOR0VTKSB7CisJCQl1c19UbXBWYWx1ZSAmPSAoKH5BUENJMzEyMF9VTklQT0xBUikgJiAweGZmKTsJLy8gc2V0IGJpcG9sYXIKKwkJfSBlbHNlIHsKKwkJCXVzX1RtcFZhbHVlIHw9IEFQQ0kzMTIwX1VOSVBPTEFSOwkvLyBlbmFibGUgdW5pcG9sYXIuLi4uLi4KKwkJfQorCisJCWdhaW4gPSBDUl9SQU5HRShjaGFubGlzdFtpXSk7CS8vIGdldCBnYWluIG51bWJlcgorCQl1c19UbXBWYWx1ZSB8PSAoKGdhaW4gJiAweDAzKSA8PCA0KTsJLy88PDQgZm9yIEcwIGFuZCBHMSBiaXQgaW4gUkFNCisJCXVzX1RtcFZhbHVlIHw9IGkgPDwgODsJLy9UbyBzZWxlY3QgdGhlIFJBTSBMT0NBVElPTi4uLi4KKwkJb3V0dyh1c19UbXBWYWx1ZSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9TRVFfUkFNX0FERFJFU1MpOworCisJCXByaW50aygiXG4gR2FpbiA9ICVpIiwKKwkJCSgoKHVuc2lnbmVkIGNoYXIpQ1JfUkFOR0UoY2hhbmxpc3RbaV0pICYgMHgwMykgPDwgMikpOworCQlwcmludGsoIlxuIENoYW5uZWwgPSAlaSIsIENSX0NIQU4oY2hhbmxpc3RbaV0pKTsKKwkJcHJpbnRrKCJcbiBQb2xhcml0eSA9ICVpIiwgdXNfVG1wVmFsdWUgJiBBUENJMzEyMF9VTklQT0xBUik7CisJfQorCXJldHVybiAxOwkJLy8gd2UgY2FuIHNlcnZlIHRoaXMgd2l0aCBzY2FuIGxvZ2ljCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOglpbnQgaV9BUENJMzEyMF9FeHR0cmlnRW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAJRW5hYmxlIHRoZSBleHRlcm5hbCB0cmlnZ2VyCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogCXN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAwICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8PSBBUENJMzEyMF9FTkFCTEVfRVhUX1RSSUdHRVI7CisJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IAlpbnQgaV9BUENJMzEyMF9FeHR0cmlnRGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAJRGlzYWJsZXMgdGhlIGV4dGVybmFsIHRyaWdnZXIJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgIDAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9FeHR0cmlnRGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciAmPSB+QVBDSTMxMjBfRU5BQkxFX0VYVF9UUklHR0VSOworCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgIElOVEVSUlVQVCBGVU5DVElPTlMJCSAgICAJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogdm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKSAJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOkludGVycnVwdCBoYW5kbGVyIGZvciBBUENJMzEyMCAgICAgICAgICAgICAgICAgICAgICAgIAkgfAorfAkJCSBXaGVuIGludGVycnVwdCBvY2N1cnMgdGhpcyBnZXRzIGNhbGxlZC4gICAgICAgICAgICAgICAgIHwKK3wJCQkgRmlyc3QgaXQgZmluZHMgd2hpY2ggaW50ZXJydXB0IGhhcyBiZWVuIGdlbmVyYXRlZCBhbmQgICB8Cit8CQkJIGhhbmRsZXMgIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlpbnQgaXJxIAkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IHZvaWQgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3ZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlVU0hPUlQgaW50X2RhcTsKKworCXVuc2lnbmVkIGludCBpbnRfYW1jYywgdWlfQ2hlY2ssIGk7CisJVVNIT1JUIHVzX1RtcFZhbHVlOworCUJZVEUgYl9EdW1teVJlYWQ7CisKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJdWlfQ2hlY2sgPSAxOworCisJaW50X2RhcSA9IGludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUykgJiAweGYwMDA7CS8vIGdldCBJUlEgcmVhc29ucworCWludF9hbWNjID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGdldCBBTUNDIElOVCByZWdpc3RlcgorCisJaWYgKCghaW50X2RhcSkgJiYgKCEoaW50X2FtY2MgJiBBTllfUzU5M1hfSU5UKSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIklSUSBmcm9tIHVua25vdyBzb3VyY2UiKTsKKwkJcmV0dXJuOworCX0KKworCW91dGwoaW50X2FtY2MgfCAweDAwZmYwMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBzaHV0ZG93biBJUlEgcmVhc29ucyBpbiBBTUNDCisKKwlpbnRfZGFxID0gKGludF9kYXEgPj4gMTIpICYgMHhGOworCisJaWYgKGRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJLy9EaXNhYmxlIGV4dCB0cmlnZ2VyCisJCWlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoZGV2KTsKKwkJZGV2cHJpdi0+Yl9FeHR0cmlnRW5hYmxlID0gQVBDSTMxMjBfRElTQUJMRTsKKwl9CisJLy9jbGVhciB0aGUgdGltZXIgMiBpbnRlcnJ1cHQKKwlpbmIoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKworCWlmIChpbnRfYW1jYyAmIE1BU1RFUl9BQk9SVF9JTlQpCisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIE1BU1RFUiBETUEgQUJPUlQhIik7CisJaWYgKGludF9hbWNjICYgVEFSR0VUX0FCT1JUX0lOVCkKKwkJY29tZWRpX2Vycm9yKGRldiwgIkFNQ0MgSVJRIC0gVEFSR0VUIERNQSBBQk9SVCEiKTsKKworCS8vIENrZWNrIGlmIEVPQyBpbnRlcnJ1cHQKKwlpZiAoKChpbnRfZGFxICYgMHg4KSA9PSAwKQorCQkmJiAoZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID09IEFQQ0kzMTIwX0VPQ19NT0RFKSkgeworCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisKKwkJCS8vIFJlYWQgdGhlIEFJIFZhbHVlCisKKwkJCWRldnByaXYtPnVpX0FpUmVhZERhdGFbMF0gPQorCQkJCShVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgMCk7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCX0gZWxzZSB7CisJCQkvL0Rpc2FibGUgRU9DIEludGVycnVwdAorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UOworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJfQorCX0KKworCS8vIENoZWNrIElmIEVPUyBpbnRlcnJ1cHQKKwlpZiAoKGludF9kYXEgJiAweDIpICYmIChkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPT0gQVBDSTMxMjBfRU9TX01PREUpKSB7CisKKwkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkJLy8gZW5hYmxlIHRoaXMgaW4gd2l0aG91dCBETUEgPz8/CisJCXsKKworCQkJaWYgKGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJCQl1aV9DaGVjayA9IDA7CisJCQkJaV9BUENJMzEyMF9JbnRlcnJ1cHRIYW5kbGVFb3MoZGV2KTsKKwkJCQlkZXZwcml2LT51aV9BaUFjdHVhbFNjYW4rKzsKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCWRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJCUFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UOworCQkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJCWRldi0+aW9iYXNlICsKKwkJCQkJQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCQkJfSBlbHNlIHsKKwkJCQl1aV9DaGVjayA9IDA7CisJCQkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsKKwkJCQkJaSsrKSB7CisJCQkJCXVzX1RtcFZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSArIDApOworCQkJCQlkZXZwcml2LT51aV9BaVJlYWREYXRhW2ldID0KKwkJCQkJCShVSU5UKSB1c19UbXBWYWx1ZTsKKwkJCQl9CisJCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCQkJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCisJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CS8vRGVmYXVsdCBzZXR0aW5ncworCQkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9DX01PREU7CisJCX0KKworCX0KKwkvL1RpbWVyMiBpbnRlcnJ1cHQKKwlpZiAoaW50X2RhcSAmIDB4MSkgeworCisJCXN3aXRjaCAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlKSB7CisJCWNhc2UgQVBDSTMxMjBfQ09VTlRFUjoKKworCQkJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJCS8vIHN0b3AgdGltZXIgMgorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9BTExfVElNRVI7CisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkJCS8vc3RvcCB0aW1lciAwIGFuZCB0aW1lciAxCisJCQlpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihkZXYsIHMpOworCQkJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKworCQkJLy9VUERBVEUtMC43LjU3LT4wLjcuNjhjb21lZGlfZG9uZShkZXYscyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBBUENJMzEyMF9USU1FUjoKKworCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCQlicmVhazsKKworCQljYXNlIEFQQ0kzMTIwX1dBVENIRE9HOgorCisJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisKKwkJCS8vIGRpc2FibGUgVGltZXIgSW50ZXJydXB0CisKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQ7CisKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJfQorCisJCWJfRHVtbXlSZWFkID0gaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKworCX0KKworCWlmICgoaW50X2RhcSAmIDB4NCkgJiYgKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9PSBBUENJMzEyMF9ETUFfTU9ERSkpIHsKKwkJaWYgKGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDbGVhciBUaW1lciBXcml0ZSBUQyBJTlQgKi8KKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKEFQQ0kzMTIwX0NMRUFSX1dSSVRFX1RDX0lOVCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCUFQQ0kzMTIwX0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDbGVhcnMgdGhlIHRpbWVyIHN0YXR1cyByZWdpc3RlciAqLworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCQl2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpcnEsIGQpOwkvLyBkbyBzb21lIGRhdGEgdHJhbnNmZXIKKwkJfSBlbHNlIHsKKwkJCS8qIFN0b3BzIHRoZSBUaW1lciAqLworCQkJb3V0dyhkZXZwcml2LT4KKwkJCQl1c19PdXRwdXRSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIwICYKKwkJCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMSwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCQl9CisKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBFT1MgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGFjcXVpcmVkIGRhdGEoZnJvbSBGSUZPKSAgICAgIHwKK3wJCQkJdG8gQ29tZWRpIGJ1ZmZlci4JCSAJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKyAqIGludCBpX0FQQ0kzMTIwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQoreworICAgICAgIGludCBuX2NoYW4saTsKKyAgICAgICBzaG9ydCAqZGF0YTsKKyAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcz1kZXYtPnN1YmRldmljZXMrMDsKKyAgICAgICBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworICAgICAgIGRhdGE9YXN5bmMtPmRhdGErYXN5bmMtPmJ1Zl9pbnRfcHRyOworICAgICAgICBuX2NoYW49ZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCisgICAgICAgZm9yKGk9MDtpPG5fY2hhbjtpKyspCisgICAgICAgICB7CisgICAgICAgICAgIGRhdGFbaV09aW53KGRldi0+aW9iYXNlKzApOworICAgICAgICAgfQorICAgICAgIGFzeW5jLT5idWZfaW50X2NvdW50Kz1uX2NoYW4qc2l6ZW9mKHNob3J0KTsKKyAgICAgICBhc3luYy0+YnVmX2ludF9wdHIrPW5fY2hhbipzaXplb2Yoc2hvcnQpOworICAgICAgIGNvbWVkaV9lb3MoZGV2LHMpOworICAgICAgIGlmIChzLT5hc3luYy0+YnVmX2ludF9wdHI+PXMtPmFzeW5jLT5kYXRhX2xlbikgLy8gIGZvciBidWZmZXIgcm9vbCBvdmVyCisJCSAgICAgICAgIHsKKyovLyogYnVmZmVyIHJvbGxvdmVyICovCisvKgkgICAgICAgIHMtPmFzeW5jLT5idWZfaW50X3B0cj0wOworCQljb21lZGlfZW9idWYoZGV2LHMpOworICAgICAgICAgfQorIAlyZXR1cm4gMDsKK30qLworaW50IGlfQVBDSTMxMjBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBuX2NoYW4sIGk7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBlcnIgPSAxOworCisJbl9jaGFuID0gZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCisJcy0+YXN5bmMtPmV2ZW50cyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspCisJCWVyciAmPSBjb21lZGlfYnVmX3B1dChzLT5hc3luYywgaW53KGRldi0+aW9iYXNlICsgMCkpOworCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCisJaWYgKGVyciA9PSAwKQorCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiB2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hKGludCBpcnEsIHZvaWQgKmQpIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGlzIGEgaGFuZGxlciBmb3IgdGhlIERNQSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgfAorfAkJCSAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGRhdGEgdG8gQ29tZWRpIEJ1ZmZlci4gICAgICAgIHwKK3wJCQkgIEZvciBjb250aW51b3VzIERNQSBpdCByZWluaXRpYWxpemVzIHRoZSBETUEgb3BlcmF0aW9uLiB8Cit8CQkJICBGb3Igc2luZ2xlIG1vZGUgRE1BIGl0IHN0b3AgdGhlIGFjcXVpc2l0aW9uLiAgICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkgICAgIAkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxLCB2b2lkICpkCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIHZvaWQgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwl1bnNpZ25lZCBpbnQgbmV4dF9kbWFfYnVmLCBzYW1wbGVzaW5idWY7CisJdW5zaWduZWQgbG9uZyBsb3dfd29yZCwgaGlnaF93b3JkLCB2YXI7CisKKwlVSU5UIHVpX1RtcDsKKwlzYW1wbGVzaW5idWYgPQorCQlkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplW2RldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlcl0gLQorCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTVdUQyk7CisKKwlpZiAoc2FtcGxlc2luYnVmIDwKKwkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVtkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXJdKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJbnRlcnJ1cHRlZCBETUEgdHJhbnNmZXIhIik7CisJfQorCWlmIChzYW1wbGVzaW5idWYgJiAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJPZGQgY291bnQgb2YgYnl0ZXMgaW4gRE1BIHJpbmchIik7CisJCWlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKGRldiwgcyk7CisJCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CisKKwkJcmV0dXJuOworCX0KKwlzYW1wbGVzaW5idWYgPSBzYW1wbGVzaW5idWYgPj4gMTsJLy8gbnVtYmVyIG9mIHJlY2VpdmVkIHNhbXBsZXMKKwlpZiAoZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIpIHsKKwkJLy8gc3dpdGNoIERNQSBidWZmZXJzIGlmIGlzIHVzZWQgZG91YmxlIGJ1ZmZlcmluZworCQluZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyOworCisJCXVpX1RtcCA9IEFHQ1NUU19UQ19FTkFCTEUgfCBBR0NTVFNfUkVTRVRfQTJQX0ZJRk87CisJCW91dGwodWlfVG1wLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQU1DQ19PUF9SRUdfQUdDU1RTKTsKKworCQkvLyBjaGFuZ2VkICBzaW5jZSAxNiBiaXQgaW50ZXJmYWNlIGZvciBhZGQgb24KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOwkvLyAweDEwMDAgaXMgb3V0IHB1dHRlZCBpbiB3aW5kb3dzIGRyaXZlcgorCisJCXZhciA9IGRldnByaXYtPnVsX0RtYUJ1ZmZlckh3W25leHRfZG1hX2J1Zl07CisJCWxvd193b3JkID0gdmFyICYgMHhmZmZmOworCQl2YXIgPSBkZXZwcml2LT51bF9EbWFCdWZmZXJId1tuZXh0X2RtYV9idWZdOworCQloaWdoX3dvcmQgPSB2YXIgLyA2NTUzNjsKKworCQkvKiBETUEgU3RhcnQgQWRyZXNzIExvdyAqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGxvd193b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLyogRE1BIFN0YXJ0IEFkcmVzcyBIaWdoICovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGhpZ2hfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCXZhciA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbbmV4dF9kbWFfYnVmXTsKKwkJbG93X3dvcmQgPSB2YXIgJiAweGZmZmY7CisJCXZhciA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbbmV4dF9kbWFfYnVmXTsKKwkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CisKKwkJLyogTmJyIG9mIGFjcXVpc2l0aW9uIExPVyAqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGxvd193b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLyogTmJyIG9mIGFjcXVpc2l0aW9uIEhJR0ggKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoaGlnaF93b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy8gVG8gY29uZmlndXJlIEEyUCBGSUZPCisJCS8vIEVOQUJMRSBBMlAgRklGTyBXUklURSBBTkQgRU5BQkxFIEFNV0VOCisJCS8vIEFNV0VOX0VOQUJMRSB8IEEyUF9GSUZPX1dSSVRFX0VOQUJMRSAoMHgwMXwweDAyKT0weDAzCisJCW91dHcoMywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDQpOworCQkvL2luaXRpYWxpc2UgZW5kIG9mIGRtYSBpbnRlcnJ1cHQgIEFJTlRfV1JJVEVfQ09NUEwgPSBFTkFCTEVfV1JJVEVfVENfSU5UKEFEREkpCisJCW91dGwoKEFQQ0kzMTIwX0ZJRk9fQURWQU5DRV9PTl9CWVRFXzIgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9XUklURV9UQ19JTlQpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCX0KKy8qVVBEQVRFLTAuNy41Ny0+MC43LjY4CisJcHRyPShzaG9ydCAqKWRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyXTsKKworCisJLy8gaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBsZWZ0IGluIHRoZSBidWZmZXIgdG8gY29weSBhbGwgZGF0YSBjb250YWluZWQgaW4gdGhlIERNQUJ1ZmZlclZpcnR1YWwKKwlpZihzLT5hc3luYy0+YnVmX2ludF9wdHIrc2FtcGxlc2luYnVmKnNpemVvZihzaG9ydCk+PWRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkKKwl7CisJCW09KGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aC1zLT5hc3luYy0+YnVmX2ludF9wdHIpL3NpemVvZihzaG9ydCk7CisJCXZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoZGV2LHMsKHZvaWQgKilwdHIsKCh2b2lkICopKGRldnByaXYtPkFpRGF0YSkpK3MtPmFzeW5jLT5idWZfaW50X3B0cixtKTsKKwkJcy0+YXN5bmMtPmJ1Zl9pbnRfY291bnQrPW0qc2l6ZW9mKHNob3J0KTsKKwkJcHRyKz1tKnNpemVvZihzaG9ydCk7CisgICAgICAgICAgICAgICAgc2FtcGxlc2luYnVmLT1tOworCQlzLT5hc3luYy0+YnVmX2ludF9wdHI9MDsKKwkJY29tZWRpX2VvYnVmKGRldixzKTsKKwl9CisKKwlpZiAoc2FtcGxlc2luYnVmKQorCXsKKwkgICAgICAgIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoZGV2LHMsKHZvaWQgKilwdHIsKCh2b2lkICopKGRldnByaXYtPkFpRGF0YSkpK3MtPmFzeW5jLT5idWZfaW50X3B0cixzYW1wbGVzaW5idWYpOworCisJCXMtPmFzeW5jLT5idWZfaW50X2NvdW50Kz1zYW1wbGVzaW5idWYqc2l6ZW9mKHNob3J0KTsKKwkJcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyKz1zYW1wbGVzaW5idWYqc2l6ZW9mKHNob3J0KTsKKwkJaWYgKCEoZGV2cHJpdi0+dWlfQWlGbGFncyAmIFRSSUdfV0FLRV9FT1MpKQorCQl7CisJCQljb21lZGlfYnVmY2hlY2soZGV2LHMpOworICAgICAgICAgICAgICAgIH0KKwl9CisJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykKKwlpZiAoIGRldnByaXYtPnVpX0FpQWN0dWFsU2Nhbj49ZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICkKKwl7CisJICAgIC8vIGFsbCBkYXRhIHNhbXBsZWQKKwkgICAgaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oZGV2LHMpOworICAgICAgICAgICAgZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uPUFQQ0kzMTIwX0RJU0FCTEU7CisJICAgIC8vRFBSSU5USygiXG4gU2luZ2xlIERNQSBjb21wbGV0ZWQuLlxuIik7CisJCWNvbWVkaV9kb25lKGRldixzKTsKKyAgICAgICAgICAgIAlyZXR1cm47CisJfQorKi8KKwlpZiAoc2FtcGxlc2luYnVmKSB7CisJCXZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoZGV2LCBzLAorCQkJZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFtkZXZwcml2LT4KKwkJCQl1aV9EbWFBY3R1YWxCdWZmZXJdLCBzYW1wbGVzaW5idWYpOworCisJCWlmICghKGRldnByaXYtPnVpX0FpRmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgeworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCX0KKwl9CisJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykKKwkJaWYgKGRldnByaXYtPnVpX0FpQWN0dWFsU2NhbiA+PSBkZXZwcml2LT51aV9BaU5icm9mU2NhbnMpIHsKKwkJCS8vIGFsbCBkYXRhIHNhbXBsZWQKKwkJCWlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKGRldiwgcyk7CisJCQlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKworCWlmIChkZXZwcml2LT5iX0RtYURvdWJsZUJ1ZmZlcikgewkvLyBzd2l0Y2ggZG1hIGJ1ZmZlcnMKKwkJZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyID0gMSAtIGRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlcjsKKwl9IGVsc2UgeworCQkvLyByZXN0YXJ0IERNQSBpZiBpcyBub3QgdXNlZCBkb3VibGUgYnVmZmVyaW5nCisJCS8vQURERUQgUkVJTklUSUFMSVNFIFRIRSBETUEKKwkJdWlfVG1wID0gQUdDU1RTX1RDX0VOQUJMRSB8IEFHQ1NUU19SRVNFVF9BMlBfRklGTzsKKwkJb3V0bCh1aV9UbXAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBTUNDX09QX1JFR19BR0NTVFMpOworCisJCS8vIGNoYW5nZWQgIHNpbmNlIDE2IGJpdCBpbnRlcmZhY2UgZm9yIGFkZCBvbgorCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9MT1csCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CS8vCisJCS8vIEEyUCBGSUZPIE1BTkFHRU1FTlQKKwkJLy8gQTJQIGZpZm8gcmVzZXQgICYgdHJhbnNmZXIgY29udHJvbCBlbmFibGUKKwkJb3V0bChBUENJMzEyMF9BMlBfRklGT19NQU5BR0VNRU5ULAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTUNTUik7CisKKwkJdmFyID0gZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF07CisJCWxvd193b3JkID0gdmFyICYgMHhmZmZmOworCQl2YXIgPSBkZXZwcml2LT51bF9EbWFCdWZmZXJId1swXTsKKwkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcobG93X3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoaGlnaF93b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJdmFyID0gZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXTsKKwkJbG93X3dvcmQgPSB2YXIgJiAweGZmZmY7CS8vY2hhbmdlZAorCQl2YXIgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdOworCQloaWdoX3dvcmQgPSB2YXIgLyA2NTUzNjsKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhsb3dfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV1RDX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhoaWdoX3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCQkvLyBUbyBjb25maWd1cmUgQTJQIEZJRk8KKwkJLy9FTkFCTEUgQTJQIEZJRk8gV1JJVEUgQU5EIEVOQUJMRSBBTVdFTgorCQkvLyBBTVdFTl9FTkFCTEUgfCBBMlBfRklGT19XUklURV9FTkFCTEUgKDB4MDF8MHgwMik9MHgwMworCQlvdXR3KDMsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyA0KTsKKwkJLy9pbml0aWFsaXNlIGVuZCBvZiBkbWEgaW50ZXJydXB0ICBBSU5UX1dSSVRFX0NPTVBMID0gRU5BQkxFX1dSSVRFX1RDX0lOVChBRERJKQorCQlvdXRsKChBUENJMzEyMF9GSUZPX0FEVkFOQ0VfT05fQllURV8yIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UKSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisJfQorfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDp2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoY29tZWRpX2RldmljZXwKK3wqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHNob3J0ICpkbWEsc2hvcnQgKmRhdGEsaW50IG4pCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGRhdGEgZnJvbSBETUEgYnVmZmVyIHRvIHRoZSAgIHwKK3wJCQkJIENvbWVkaSBidWZmZXIgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpkbWEJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmRhdGEsaW50IG4gICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiB2b2lkICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKnZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHREbWFNb3ZlQmxvY2sxNmJpdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHNob3J0ICpkbWEsc2hvcnQgKmRhdGEsaW50IG4pCit7CisJaW50IGksaixtOworCisJaj1zLT5hc3luYy0+Y3VyX2NoYW47CisJbT1kZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbjsKKyAgICAgICAgZm9yKGk9MDtpPG47aSsrKQorCXsKKwkJKmRhdGE9KmRtYTsKKyAgIAkJZGF0YSsrOyBkbWErKzsKKwkJaisrOworCQlpZihqPj1kZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMpCisJCXsKKwkJCW0rPWo7CisJCQlqPTA7CisJCQlpZihtPj1kZXZwcml2LT51aV9BaVNjYW5MZW5ndGgpCisJCQl7CisJCQkJbT0wOworCQkJICAgICAgICBkZXZwcml2LT51aV9BaUFjdHVhbFNjYW4rKzsKKwkJCQlpZiAoZGV2cHJpdi0+dWlfQWlGbGFncyAmIFRSSUdfV0FLRV9FT1MpCis7Ly9VUERBVEUtMC43LjU3LT4wLjcuNjgJCQkJCWNvbWVkaV9lb3MoZGV2LHMpOworCQkJfQorCQl9CisJfQorICAgICAgICBkZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbj1tOworCXMtPmFzeW5jLT5jdXJfY2hhbj1qOworCit9CisqLwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc2hvcnQgKiBkbWFfYnVmZmVyLCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpCit7CisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuICs9CisJCShzLT5hc3luYy0+Y3VyX2NoYW4gKyBudW1fc2FtcGxlcykgLyBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGg7CisJcy0+YXN5bmMtPmN1cl9jaGFuICs9IG51bV9zYW1wbGVzOworCXMtPmFzeW5jLT5jdXJfY2hhbiAlPSBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGg7CisKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRtYV9idWZmZXIsIG51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FUiBTVUJERVZJQ0UgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Db25maWdUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICB8Cit8CXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpDb25maWd1cmUgVGltZXIgMiAgCQkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXT0gVElNRVIgIGNvbmZpZ3VyZSBhcyB0aW1lciAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgCQkJCSA9IFdBVENIRE9HIGNvbmZpZ3VyZSBhcyB3YXRjaGRvZwkJCQkgfAorfCAgICAgICAJCQkgIGRhdGFbMV0gPSBUaW1lciBjb25zdGFudAkJCQkJCQkgfAorfCAgICAgICAJCQkgIGRhdGFbMl0gPSBUaW1lcjIgaW50ZXJydXB0ICgxKWVuYWJsZSBvcigwKSBkaXNhYmxlIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9UaW1lcnZhbHVlMjsKKwlVU0hPUlQgdXNfVG1wVmFsdWU7CisJQllURSBiX1RtcDsKKworCWlmICghZGF0YVsxXSkKKwkJY29tZWRpX2Vycm9yKGRldiwgImNvbmZpZzpObyB0aW1lciBjb25zdGFudCAhIik7CisKKwlkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCA9IChCWVRFKSBkYXRhWzJdOwkvLyBzYXZlIGluZm8gd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQKKworCXVpX1RpbWVydmFsdWUyID0gZGF0YVsxXSAvIDEwMDA7CS8vIGNvbnZlcnQgbmFubyBzZWNvbmRzICB0byB1IHNlY29uZHMKKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnVGltZXIoZGV2LCB1aV9UaW1lcnZhbHVlMiwoQllURSlkYXRhWzBdKTsKKwl1c19UbXBWYWx1ZSA9IChVU0hPUlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCisJLy9FTDI1MDgwNDogVGVzdGluZyBpZiBib2FyZCBBUENJMzEyMCBoYXZlIHRoZSBuZXcgUXVhcnR6IG9yIGlmIGl0IGlzIGFuIEFQQ0kzMDAxCisJLy8gYW5kIGNhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCXx8ICFzdHJjbXAodGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSwgImFwY2kzMDAxIikpIHsKKwkJLy9DYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNTA7CisJfSBlbHNlIHsKKwkJLy9DYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNzA7CisJfQorCisJLy9SZXNldCBnYXRlIDIgb2YgVGltZXIgMiB0byBkaXNhYmxlIGl0IChTZXQgQml0IEQxNCB0byAwKQorCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMjsKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCS8vIERpc2FibGUgVElNRVIgSW50ZXJydXB0CisJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQlkZXZwcml2LT4KKwkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSX0lOVCAmIDB4RUY7CisKKwkvLyBEaXNhYmxlIEVvYyBhbmQgRW9zIEludGVycnVwdHMKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCWRldnByaXYtPgorCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKKwlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisJaWYgKGRhdGFbMF0gPT0gQVBDSTMxMjBfVElNRVIpCS8vaW5pdGlhbGl6ZSB0aW1lcgorCXsKKworCQkvL2RldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyPWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyfCBBUENJMzEyMF9FTkFCTEVfVElNRVJfSU5UIDsKKwkJLy9vdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLGRldnByaXYtPmlvYmFzZStBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJLy9TZXQgdGhlIFRpbWVyIDIgaW4gbW9kZSAyKFRpbWVyKQorCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9CisJCQkoZGV2cHJpdi0+CisJCQliX1RpbWVyU2VsZWN0TW9kZSAmIDB4MEYpIHwgQVBDSTMxMjBfVElNRVJfMl9NT0RFXzI7CisJCW91dGIoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkvL0NvbmZpZ3VyZSB0aGUgdGltZXIgMiBmb3Igd3JpdGluZyB0aGUgTE9XIFdPUkQgb2YgdGltZXIgaXMgRGVsYXkgdmFsdWUKKwkJLy9Zb3UgbXVzdCBtYWtlIGEgYl90bXAgdmFyaWFibGUgd2l0aCBEaWdpdGFsT3V0UHV0UmVnaXN0ZXIgYmVjYXVzZSBhdCBBZGRyZXNzXzErQVBDSTMxMjBfVElNRVJfQ1JUMAorCQkvL3lvdSBjYW4gc2V0IHRoZSBkaWdpdGFsIG91dHB1dCBhbmQgY29uZmlndXJlIHRoZSB0aW1lciAyLGFuZCBpZiB5b3UgZG9uJ3QgbWFrZSB0aGlzLCBkaWdpdGFsIG91dHB1dAorCQkvL2FyZSBlcmFzZSAoU2V0IHRvIDApCisKKwkJLy9Xcml0aW5nIExPVyBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9MT1dfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisJCW91dHcoTE9XT1JEKHVpX1RpbWVydmFsdWUyKSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvL1dyaXRpbmcgSElHSCBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQlvdXR3KEhJV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisJCS8vIHRpbWVyMiBpbiBUaW1lciBtb2RlIGVuYWJsZWQKKwkJZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID0gQVBDSTMxMjBfVElNRVI7CisKKwl9IGVsc2UJCQkvLyBJbml0aWFsaXplIFdhdGNoIGRvZworCXsKKworCQkvL1NldCB0aGUgVGltZXIgMiBpbiBtb2RlIDUoV2F0Y2hkb2cpCisKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweDBGKSB8IEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV81OworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9Db25maWd1cmUgdGhlIHRpbWVyIDIgZm9yIHdyaXRpbmcgdGhlIExPVyBXT1JEIG9mIHRpbWVyIGlzIERlbGF5IHZhbHVlCisJCS8vWW91IG11c3QgbWFrZSBhIGJfdG1wIHZhcmlhYmxlIHdpdGggRGlnaXRhbE91dFB1dFJlZ2lzdGVyIGJlY2F1c2UgYXQgQWRkcmVzc18xK0FQQ0kzMTIwX1RJTUVSX0NSVDAKKwkJLy95b3UgY2FuIHNldCB0aGUgZGlnaXRhbCBvdXRwdXQgYW5kIGNvbmZpZ3VyZSB0aGUgdGltZXIgMixhbmQgaWYgeW91IGRvbid0IG1ha2UgdGhpcywgZGlnaXRhbCBvdXRwdXQKKwkJLy9hcmUgZXJhc2UgKFNldCB0byAwKQorCisJCS8vV3JpdGluZyBMT1cgV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQlvdXR3KExPV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy9Xcml0aW5nIEhJR0ggV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQlvdXR3KEhJV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisJCS8vd2F0Y2hkb2cgZW5hYmxlZAorCQlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSBBUENJMzEyMF9XQVRDSERPRzsKKworCX0KKworCXJldHVybiBpbnNuLT5uOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6ICAgIFRvIHN0YXJ0IGFuZCBzdG9wIHRoZSB0aW1lcgkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJZGF0YVswXSA9IDEgKHN0YXJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCWRhdGFbMF0gPSAwIChzdG9wICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkgCQkJZGF0YVswXSA9IDIgICh3cml0ZSBuZXcgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICB8Cit8CSAgIAkJCWRhdGFbMV09IG5ldyB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgIAkJCQlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSAgMCBESVNBQkxFICAgICAgICAgICAgICAgICAgIHwKK3wJICAgICAgICAgICAgICAgICAgICAgCQkJCQkgMSBUaW1lciAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAJCQkJCSAyIFdhdGNoIGRvZwkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfVGltZXJ2YWx1ZTIgPSAwOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKwlCWVRFIGJfVG1wOworCisJaWYgKChkZXZwcml2LT5iX1RpbWVyMk1vZGUgIT0gQVBDSTMxMjBfV0FUQ0hET0cpCisJCSYmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgIT0gQVBDSTMxMjBfVElNRVIpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJcbndyaXRlOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkYXRhWzBdID09IDIpCS8vIHdyaXRlIG5ldyB2YWx1ZQorCXsKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSAhPSBBUENJMzEyMF9USU1FUikgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkid3JpdGUgOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIGluIFRJTUVSIE1PREUiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGRhdGFbMV0pCisJCQl1aV9UaW1lcnZhbHVlMiA9IGRhdGFbMV07CisJCWVsc2UKKwkJCXVpX1RpbWVydmFsdWUyID0gMDsKKwl9CisKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlVGltZXIoZGV2LGRhdGFbMF0sdWlfVGltZXJ2YWx1ZTIpOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBBUENJMzEyMF9TVEFSVDoKKworCQkvLyBSZXNldCBGQ19USU1FUiBCSVQKKwkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpCS8vc3RhcnQgdGltZXIKKwkJeworCQkJLy9FbmFibGUgVGltZXIKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAmIDB4MEI7CisJCX0gZWxzZQkJLy9zdGFydCB3YXRjaCBkb2cKKwkJeworCQkJLy9FbmFibGUgV2F0Y2hEb2cKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiAweDBCKSB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1dBVENIRE9HOworCQl9CisKKwkJLy9lbmFibGUgZGlzYWJsZSBpbnRlcnJ1cHQKKwkJaWYgKChkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCkgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVDsKKwkJCS8vIHNhdmUgdGhlIHRhc2sgc3RydWN0dXJlIHRvIHBhc3MgaW5mbyB0byB1c2VyCisJCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJCX0gZWxzZSB7CisKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQ7CisJCX0KKwkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKQkvL3N0YXJ0IHRpbWVyCisJCXsKKwkJCS8vRm9yIFRpbWVyIG1vZGUgaXMgIEdhdGUyIG11c3QgYmUgYWN0aXZhdGVkICAgKip0aW1lciBzdGFydGVkCisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfVElNRVIyOworCQkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBBUENJMzEyMF9TVE9QOgorCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKSB7CisJCQkvL0Rpc2FibGUgdGltZXIKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9DT1VOVEVSOworCQl9IGVsc2UgeworCQkJLy9EaXNhYmxlIFdhdGNoRG9nCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfV0FUQ0hET0c7CisJCX0KKwkJLy8gRGlzYWJsZSB0aW1lciBpbnRlcnJ1cHQKKwkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+CisJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UOworCisJCS8vIFdyaXRlIGFib3ZlIHN0YXRlcyAgdG8gcmVnaXN0ZXIKKwkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkvLyBSZXNldCBHYXRlIDIKKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSX0lOVDsKKwkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCS8vIFJlc2V0IEZDX1RJTUVSIEJJVAorCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKworCQkvLyBEaXNhYmxlIHRpbWVyCisJCS8vZGV2cHJpdi0+Yl9UaW1lcjJNb2RlPUFQQ0kzMTIwX0RJU0FCTEU7CisKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvL3dyaXRlIG5ldyB2YWx1ZSB0byBUaW1lcgorCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1RJTUVSKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJ3cml0ZSA6dGltZXIyICBub3QgY29uZmlndXJlZCAgaW4gVElNRVIgTU9ERSIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLy8gdWlfVGltZXJ2YWx1ZTI9ZGF0YVsxXTsgLy8gcGFzc2VkIGFzIGFyZ3VtZW50CisJCXVzX1RtcFZhbHVlID0KKwkJCShVU0hPUlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCisJCS8vRUwyNTA4MDQ6IFRlc3RpbmcgaWYgYm9hcmQgQVBDSTMxMjAgaGF2ZSB0aGUgbmV3IFF1YXJ0eiBvciBpZiBpdCBpcyBhbiBBUENJMzAwMQorCQkvLyBhbmQgY2FsY3VsYXRlIHRoZSB0aW1lIHZhbHVlIHRvIHNldCBpbiB0aGUgdGltZXIKKwkJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCQl8fCAhc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzAwMSIpKSB7CisJCQkvL0NhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNTA7CisJCX0gZWxzZSB7CisJCQkvL0NhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNzA7CisJCX0KKwkJLy9Xcml0aW5nIExPVyBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9MT1dfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJb3V0dyhMT1dPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCS8vV3JpdGluZyBISUdIIFdPUkQKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0hJR0hfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJb3V0dyhISVdPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwkvLyBOb3QgYSB2YWxpZCBpbnB1dAorCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogaW50IGlfQVBDSTMxMjBfSW5zblJlYWRUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICAgfAorfAkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpIAkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IHJlYWQgdGhlIFRpbWVyIHZhbHVlIAkJCQkgICAgICAgICAgICAgICAgIAkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAJCQkJCQkJCQkJCQkJIHwKK3wJCQlmb3IgVGltZXI6CWRhdGFbMF09IFRpbWVyIGNvbnN0YW50CQkJCQkJIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgCQlmb3Igd2F0Y2hkb2c6IGRhdGFbMF09MCAoc3RpbGwgcnVubmluZykgICAgICAgICAgICAgICAgICB8Cit8CSAgICAgICAgICAgICAgIAkJCSAgZGF0YVswXT0xICAocnVuIGRvd24pICAgICAgICAgICAgCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9UbXA7CisJVVNIT1JUIHVzX1RtcFZhbHVlLCB1c19UbXBWYWx1ZV8yLCB1c19TdGF0dXNWYWx1ZTsKKworCWlmICgoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1dBVENIRE9HKQorCQkmJiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1RJTUVSKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiXG5yZWFkOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIik7CisJfQorCisJLy90aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25SZWFkVGltZXIoZGV2LGRhdGEpOworCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpIHsKKworCQkvL1JlYWQgdGhlIExPVyBXT1JEIG9mIFRpbWVyIDIgcmVnaXN0ZXIKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0xPV19XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQl1c19UbXBWYWx1ZSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy9SZWFkIHRoZSBISUdIIFdPUkQgb2YgVGltZXIgMiByZWdpc3RlcgorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQl1c19UbXBWYWx1ZV8yID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvLyBjb21iaW5pbmcgYm90aCB3b3JkcworCQlkYXRhWzBdID0gKFVJTlQpICgodXNfVG1wVmFsdWUpIHwgKCh1c19UbXBWYWx1ZV8yKSA8PCAxNikpOworCisJfSBlbHNlCQkJLy8gUmVhZCB3YXRjaCBkb2cgc3RhdHVzCisJeworCisJCXVzX1N0YXR1c1ZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJCXVzX1N0YXR1c1ZhbHVlID0KKwkJCSgodXNfU3RhdHVzVmFsdWUgJiBBUENJMzEyMF9GQ19USU1FUikgPj4gMTIpICYgMTsKKwkJaWYgKHVzX1N0YXR1c1ZhbHVlID09IDEpIHsKKwkJCS8vIFJFU0VUIEZDX1RJTUVSIEJJVAorCQkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCX0KKwkJZGF0YVswXSA9IHVzX1N0YXR1c1ZhbHVlOwkvLyB3aGVuIGRhdGFbMF0gPSAxIHRoZW4gdGhlIHdhdGNoIGRvZyBoYXMgcnVuZG93bgorCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwgSU5QVVQgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgIHwKK3wJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCAgRGlnaXRhbCBpbnB1dCBjaGFubmVsfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJVUlOVCB1aV9DaGFuLCB1aV9UbXBWYWx1ZTsKKworCXVpX0NoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gY2hhbm5lbCBzcGVjaWZpZWQKKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZERpZ2l0YWxJbnB1dChkZXYsdWlfQ2hhbixkYXRhKTsKKwlpZiAodWlfQ2hhbiA+PSAwICYmIHVpX0NoYW4gPD0gMykgeworCQl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkvLyAgICAgIHNpbmNlIG9ubHkgMSBjaGFubmVsIHJlcWQgIHRvIGJyaW5nIGl0IHRvIGxhc3QgYml0IGl0IGlzIHJvdGF0ZWQKKwkJLy8gIDggKyhjaGFuIC0gMSkgdGltZXMgdGhlbiBBTkRlZCB3aXRoIDEgZm9yIGxhc3QgYml0LgorCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiAodWlfQ2hhbiArIDgpKSAmIDE7CisJCS8vcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLy8gICAgICBjb21lZGlfZXJyb3IoZGV2LCIgY2hhbiBzcGVjIHdyb25nIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwl9CisJcmV0dXJuIGluc24tPm47CisKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgfAorfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIERpZ2l0YWwgaW5wdXQgUG9ydCBpLmUuNGNoYW5uZWxzfAorfCAgIHZhbHVlIGlzIHJldHVybmVkIGluIGRhdGFbMF0JCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZTsKKwl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKwkvKioqKioJc3RhdGUgb2YgNCBjaGFubmVscyAgaW4gdGhlIDExLCAxMCwgOSwgOCAgIGJpdHMgb2Ygc3RhdHVzIHJlZworCQkJcm90YXRlZCByaWdodCA4IHRpbWVzIHRvIGJyaW5nIHRoZW0gdG8gbGFzdCBmb3VyIGJpdHMKKwkJCUFORGVkIHdpdGggb3hmIGZvciAgdmFsdWUuCisJKioqKiovCisKKwkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiA4KSAmIDB4ZjsKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsSW5wdXQoZGV2LGRhdGEpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTCBPVVRQVVQgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICAgIHwKK3wgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpDb25maWd1cmUgdGhlIG91dHB1dCBtZW1vcnkgT04gb3IgT0ZGCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6c3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSAJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZGF0YVswXSkgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFQQ0kzMTIwX0VOQUJMRTsKKworCX0gZWxzZSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOworCX0KKwlpZiAoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSAwOworCisJfQkJCS8vaWYoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgfAorfAkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IHdyaXRlIGRpYXRhbCBvdXRwdXQgcG9ydAkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgIDoxIFNldCBkaWdpdGFsIG8vcCBPTgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgIDIgU2V0IGRpZ2l0YWwgby9wIE9GRiB3aXRoIG1lbW9yeSBPTgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJaWYgKChkYXRhWzBdID4gdGhpc19ib2FyZC0+aV9Eb01heGRhdGEpIHx8IChkYXRhWzBdIDwgMCkpIHsKKworCQljb21lZGlfZXJyb3IoZGV2LCAiRGF0YSBpcyBub3QgdmFsaWQgISEhIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGF0YVsxXSkgeworCWNhc2UgMToKKwkJZGF0YVswXSA9IChkYXRhWzBdIDw8IDQpIHwgZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXI7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlkYXRhWzBdID0gZGF0YVswXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBwYXJhbWV0ZXIgcGFzc2VkIGlzIGluIGVycm9yIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBzd2l0Y2goZGF0YVsxXSkKKwlvdXRiKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX0RJR0lUQUxfT1VUUFVUKTsKKworCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gZGF0YVswXSAmIDB4RjA7CisKKwlyZXR1cm4gaW5zbi0+bjsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJCSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSBkaWdpYXRsIG91dHB1dAkJCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJIAkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgVmFsdWUgdG8gYmUgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgOjEgU2V0IGRpZ2l0YWwgby9wIE9OCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgMiBTZXQgZGlnaXRhbCBvL3AgT0ZGIHdpdGggbWVtb3J5IE9OCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKworCVVJTlQgdWlfVGVtcDE7CisKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoKHVpX05vT2ZDaGFubmVsID4gKHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsIC0gMSkpCisJCXx8ICh1aV9Ob09mQ2hhbm5lbCA8IDApKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiVGhpcyBib2FyZCBkb2Vzbid0IGhhdmUgc3BlY2lmaWVkIGNoYW5uZWwgISEhIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGF0YVsxXSkgeworCWNhc2UgMToKKwkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKTsKKy8vRVMwNSAgICAgICAgICAgICAgICAgICBkYXRhWzBdPShkYXRhWzBdPDw0KXx1aV9UZW1wOworCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgNCkgfCBkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcjsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJdWlfVGVtcDEgPSAxOworCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IDQ7CisvL0VTMDUgICAgICAgICAgICAgICAgICAgdWlfVGVtcD11aV9UZW1wfHVpX1RlbXAxOworCQlkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlciB8IHVpX1RlbXAxOworCisJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXiAweGY7CisJCWRhdGFbMF0gPSBkYXRhWzBdIDw8IDQ7CisvL0VTMDUgICAgICAgICAgICAgICAgICAgZGF0YVswXT1kYXRhWzBdJiB1aV9UZW1wOworCQlkYXRhWzBdID0gZGF0YVswXSAmIGRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIHBhcmFtZXRlciBwYXNzZWQgaXMgaW4gZXJyb3IgXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIHN3aXRjaChkYXRhWzFdKQorCW91dGIoZGF0YVswXSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfRElHSVRBTF9PVVRQVVQpOworCisvL0VTMDUgICAgICAgIHVpX1RlbXA9ZGF0YVswXSAmIDB4ZjA7CisJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSBkYXRhWzBdICYgMHhmMDsKKwlyZXR1cm4gKGluc24tPm4pOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIE9VVFBVVCBTVUJERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldix8Cit8c3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCQkJICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlICBhbmFsb2cgb3V0cHV0ICAgCQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgIAkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbldyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKwlVSU5UIHVpX1JhbmdlLCB1aV9DaGFubmVsOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKworCXVpX1JhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuV3JpdGVBbmFsb2dPdXRwdXQoZGV2LCB1aV9SYW5nZSwgdWlfQ2hhbm5lbCxkYXRhWzBdKTsKKwlpZiAodWlfUmFuZ2UpCQkvLyBpZiAxIHRoZW4gdW5pcG9sYXIKKwl7CisKKwkJaWYgKGRhdGFbMF0gIT0gMCkKKwkJCWRhdGFbMF0gPQorCQkJCSgoKCh1aV9DaGFubmVsICYgMHgwMykgPDwgMTQpICYgMHhDMDAwKSB8ICgxIDw8CisJCQkJCTEzKSB8IChkYXRhWzBdICsgODE5MSkpOworCQllbHNlCisJCQlkYXRhWzBdID0KKwkJCQkoKCgodWlfQ2hhbm5lbCAmIDB4MDMpIDw8IDE0KSAmIDB4QzAwMCkgfCAoMSA8PAorCQkJCQkxMykgfCA4MTkyKTsKKworCX0gZWxzZQkJCS8vIGlmIDAgdGhlbiAgIGJpcG9sYXIKKwl7CisJCWRhdGFbMF0gPQorCQkJKCgoKHVpX0NoYW5uZWwgJiAweDAzKSA8PCAxNCkgJiAweEMwMDApIHwgKDAgPDwgMTMpIHwKKwkJCWRhdGFbMF0pOworCisJfQorCisJLy9vdXQgcHV0IG4gdmFsdWVzIGF0IHRoZSBnaXZlbiBjaGFubmVsLgorCS8vIHJ0X3ByaW50aygiXG53YWl0aW5nIGZvciBEQV9SRUFEWSBCSVQiKTsKKwlkbwkJCS8vV2FpdGluZyBvZiBEQV9SRUFEWSBCSVQKKwl7CisJCXVzX1RtcFZhbHVlID0KKwkJCSgoVVNIT1JUKSBpbncoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMzEyMF9SRF9TVEFUVVMpKSAmIDB4MDAwMTsKKwl9IHdoaWxlICh1c19UbXBWYWx1ZSAhPSAweDAwMDEpOworCisJaWYgKHVpX0NoYW5uZWwgPD0gMykKKwkJLy8gZm9yIGNoYW5uZWwgMC0zIG91dCBhdCAgdGhlIHJlZ2lzdGVyIDEgKHdyRGFjMS04KQorCQkvLyBkYXRhW2ldIHR5cGVjYXN0ZWQgdG8gdXNob3J0IHNpbmNlICB3b3JkIHdyaXRlIGlzIHRvIGJlIGRvbmUKKwkJb3V0dygoVVNIT1JUKSBkYXRhWzBdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xKTsKKwllbHNlCisJCS8vIGZvciBjaGFubmVsIDQtNyBvdXQgYXQgdGhlIHJlZ2lzdGVyIDIgKHdyRGFjNS04KQorCQkvL2RhdGFbaV0gdHlwZWNhc3RlZCB0byB1c2hvcnQgc2luY2UgIHdvcmQgd3JpdGUgaXMgdG8gYmUgZG9uZQorCQlvdXR3KChVU0hPUlQpIGRhdGFbMF0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOworCisJcmV0dXJuIGluc24tPm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkNWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuaApAQCAtMCwwICsxLDI0MSBAQAorCisvLyBod2Rydl9hcGNpMzEyMC5oCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8vIGNvbWVkaSByZWxhdGVkIGRlZmluZXMKKworLy9BTkFMT0cgSU5QVVQgUkFOR0UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMzEyMF9haSA9IHsgOCwgeworCQkJCQkJICAgICBCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBCSVBfUkFOR0UoNSksCisJCQkJCQkgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoNSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgyKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEpCisJCQkJCQkgICAgIH0KK307CisKKy8vIEFOQUxPRyBPVVRQVVQgUkFOR0UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMzEyMF9hbyA9IHsgMiwgeworCQkJCQkJICAgICBCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApCisJCQkJCQkgICAgIH0KK307CisKKyNkZWZpbmUgQVBDSTMxMjBfQklQT0xBUl9SQU5HRVMJNAkvLyB1c2VkIGZvciB0ZXN0IG9uIG1peHR1cmUgb2YgQklQL1VOSSByYW5nZXMKKworI2RlZmluZSBBUENJMzEyMF9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTBFOAorI2RlZmluZSBBUENJMzEyMF9BRERSRVNTX1JBTkdFICAgICAgICAgICAgCQkJMTYKKworI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVBDSTMxMjBfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQQ0kzMTIwX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lICAgICBBUENJMzEyMF9FT0NfTU9ERSAgICAgICAgIDEKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0VPU19NT0RFICAgICAgICAgMgorI2RlZmluZSAgICAgQVBDSTMxMjBfRE1BX01PREUgICAgICAgICAzCisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTMxMjBfRElHSVRBTF9PVVRQVVQgICAgICAgICAgICAgICAgICAJMHgwRAorI2RlZmluZSBBUENJMzEyMF9SRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIAkweDAyCisjZGVmaW5lIEFQQ0kzMTIwX1JEX0ZJRk8gICAgICAgICAgICAgICAgICAgICAJCTB4MDAKKworLy8gZGlnaXRhbCBvdXRwdXQgaW5zbl93cml0ZSBPTiAvT0ZGIHNlbGVjdGlvbgorI2RlZmluZQlBUENJMzEyMF9TRVQ0RElHSVRBTE9VVFBVVE9OCQkJCTEKKyNkZWZpbmUgQVBDSTMxMjBfU0VUNERJR0lUQUxPVVRQVVRPRkYJCQkJMAorCisvLyBhbmFsb2cgb3V0cHV0IFNFTEVDVCBCSVQKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfMSAgIDB4MDAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF8yICAgMHg0MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzMgICAweDgwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNCAgIDB4QzAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF81ICAgMHgwMDAwCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzYgICAweDQwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNyAgIDB4ODAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF84ICAgMHhDMDAwCisKKy8vIEVuYWJsZSBleHRlcm5hbCB0cmlnZ2VyIGJpdCBpbiBuV3JBZGRyZXNzCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9FWFRfVFJJR0dFUiAgICAweDgwMDAKKworLy9BTkFMT0cgT1VUUFVUIEFORCBJTlBVVCBERUZJTkUKKyNkZWZpbmUgQVBDSTMxMjBfVU5JUE9MQVIgMHg4MAkvLyQkIFJBTSBzZXF1ZW5jZSBwb2xhcml0eSBCSVQKKyNkZWZpbmUgQVBDSTMxMjBfQklQT0xBUiAgMHgwMAkvLyQkIFJBTSBzZXF1ZW5jZSBwb2xhcml0eSBCSVQKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xIDB4MDgJLy8gKEFERFJFU1MgKQorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIgMHgwQQkvLyAoQUREUkVTUyApCisjZGVmaW5lIEFQQ0kzMTIwXzFfR0FJTiAgICAgICAgICAgICAgMHgwMAkvLyQkIFJBTSBzZXF1ZW5jZSBHYWluIEJpdHMgZm9yIGdhaW4gMQorI2RlZmluZSBBUENJMzEyMF8yX0dBSU4gICAgICAgICAgICAgIDB4MTAJLy8kJCBSQU0gc2VxdWVuY2UgR2FpbiBCaXRzIGZvciBnYWluIDIKKyNkZWZpbmUgQVBDSTMxMjBfNV9HQUlOICAgICAgICAgICAgICAweDIwCS8vJCQgUkFNIHNlcXVlbmNlIEdhaW4gQml0cyBmb3IgZ2FpbiA1CisjZGVmaW5lIEFQQ0kzMTIwXzEwX0dBSU4gICAgICAgICAgICAgMHgzMAkvLyQkIFJBTSBzZXF1ZW5jZSBHYWluIEJpdHMgZm9yIGdhaW4gMTAKKyNkZWZpbmUgQVBDSTMxMjBfU0VRX1JBTV9BRERSRVNTICAgICAgICAweDA2CS8vJCQgRUFSTElFUiBOQU1FRCBBUENJMzEyMF9GSUZPX0FERFJFU1MKKyNkZWZpbmUgQVBDSTMxMjBfUkVTRVRfRklGTyAgICAgICAgICAweDBDCS8vKEFERFJFU1MpCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV8yICAgICAgMHgwMQkvLyQkIEJpdHMgZm9yIHRpbWVyIG1vZGUKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfMF9NT0RFXzQgICAgICAgMHgyCisjZGVmaW5lIEFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQgMHgwMAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVIwICAgICAweDEwMDAJLy8kJEdhdGViaXQgMCBpbiBuV3JBZGRyZXNzCisjZGVmaW5lIEFQQ0kzMTIwX0NMRUFSX1BSICAgICAgICAgIDB4RjBGRgorI2RlZmluZSBBUENJMzEyMF9DTEVBUl9QQSAgICAgICAgICAweEZGRjAKKyNkZWZpbmUgQVBDSTMxMjBfQ0xFQVJfUEFfUFIgICAgICAgKEFQQ0kzMTIwX0NMRUFSX1BSICYgQVBDSTMxMjBfQ0xFQVJfUEEpCisKKy8vIG5Xck1vZGVfU2VsZWN0CisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9TQ0FOICAgICAgICAgIDB4OAkvLyQkIGJpdCBpbiBuV3JNb2RlX1NlbGVjdAorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX1NDQU4gICAgICAofkFQQ0kzMTIwX0VOQUJMRV9TQ0FOKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfRU9TX0lOVCAgICAgICAweDIJLy8kJCBiaXQgaW4gbldyTW9kZV9TZWxlY3QKKworI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQgICAofkFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfRU9DX0lOVCAgICAgICAweDEKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UICAgKH5BUENJMzEyMF9FTkFCTEVfRU9DX0lOVCkKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9BTExfSU5URVJSVVBUX1dJVEhPVVRfVElNRVIgICAoQVBDSTMxMjBfRElTQUJMRV9FT1NfSU5UICYgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UKQorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0FMTF9JTlRFUlJVUFQgICAoQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQgJiBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQgJiBBUENJMzEyMF9ESVNBQkxFX0VPQ19JTlQpCisKKy8vc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKyNkZWZpbmUgQVBDSTMxMjBfRU9DICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0VPUyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorCisvLyBzb2Z0d2FyZSB0cmlnZ2VyIGR1bW15IHJlZ2lzdGVyCisjZGVmaW5lIEFQQ0kzMTIwX1NUQVJUX0NPTlZFUlNJT04gICAgICAgIDB4MDIJLy8oQUREUkVTUykKKworLy9USU1FUiBERUZJTkUKKyNkZWZpbmUgQVBDSTMxMjBfUVVBUlRaX0EJCQkJICA3MAorI2RlZmluZSBBUENJMzEyMF9RVUFSVFpfQgkJCQkgIDUwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBDSTMxMjBfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUENJMzEyMF9USU1FUl9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMiAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8vJCQgZ2F0ZWJpdCAyIGluIG5XckFkZHJlc3MKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUjIgICAgICAgICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVIyKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVJfSU5UICAgICAgICAgICAgICAgICAweDA0CS8vJCQgRU5BSVJRX0ZDX0JpdCBpbiBuV3JNb2RlU2VsZWN0CisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UICAgICAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVCkKKyNkZWZpbmUgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QgICAgICAgICAgICAgICAgMHgwRQkvLyAoQUREUkVTUykKKyNkZWZpbmUgQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRCAgMHgwMAorI2RlZmluZSBBUENJMzEyMF9TRUxFQ1RfVElNRVJfMV9XT1JEICAweDAxCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzFfTU9ERV8yICAgICAgIDB4NAorCisvLyQkIEJJVCBGT1IgTU9ERSBJTiBuQ3NUaW1lckN0cjEKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfMl9NT0RFXzAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV8yICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfMl9NT0RFXzUgICAgICAgICAgICAgICAgICAgMHgzMAorCisvLyQkIEJJVCBGT1IgTU9ERSBJTiBuQ3NUaW1lckN0cjAKKyNkZWZpbmUgQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQgICAgICAgICAgMHgwMgorI2RlZmluZSBBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQgICAgICAgICAweDAzCisKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfQ1JUMCAgICAgICAgICAgICAgICAgICAgICAgMHgwRAkvLyhBRERSRVNTIGZvciBjQ3NUaW1lckN0cjApCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX0NSVDEgICAgICAgICAgICAgICAgICAgICAgIDB4MEMJLy8oQUREUkVTUyBmb3IgY0NzVGltZXJDdHIxKQorCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgIDB4MDQJLy9BRERSRVNTIGZvciBuQ3NUaW1lcldlcnQKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgMHgwRAkvL0FERFJFU1MgZm9yIGRlbGV0ZSB0aW1lciAyIGludGVycnVwdAorI2RlZmluZSBBUENJMzEyMF9SRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAweDAyCS8vQUREUkVTUworI2RlZmluZSBBUENJMzEyMF9XUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwCS8vQUREUkVTUworI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAweDIwCS8vJCRCSVQgaW4gbldyTW9kZV9TZWxlY3QKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9XQVRDSERPRyAgICAgICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfV0FUQ0hET0cpCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9USU1FUl9DT1VOVEVSICAgIAkJICAweDEwCS8vJCRCSVQgaW4gbldyTW9kZV9TZWxlY3QKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUl9DT1VOVEVSICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVJfQ09VTlRFUikKKyNkZWZpbmUgQVBDSTMxMjBfRkNfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8vYml0IGluICBzdGF0dXMgcmVnaXN0ZXIKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMCAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9USU1FUjEgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVIyICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUjAJCQkgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVIwKQorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMQkJICAgICAgICAgICAgICAofkFQQ0kzMTIwX0VOQUJMRV9USU1FUjEpCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIyCSAgICAgICAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSMikKKworI2RlZmluZSBBUENJMzEyMF9USU1FUjJfU0VMRUNUX0VPUyAgICAgICAgICAgICAgICAweEMwCS8vIEFEREVEIG9uIDIwLTYKKyNkZWZpbmUgQVBDSTMxMjBfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgMwkvLyBvbiAyMC02CisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfQUxMX1RJTUVSICAgICAgICAgICAgICAgICggQVBDSTMxMjBfRElTQUJMRV9USU1FUjAgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMSAmIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIyICkJLy8gb24gMjAtNgorCisjZGVmaW5lIE1BWF9BTkFMT0dJTlBVVF9DSEFOTkVMUyAgICAzMgorCit0eXBlZGVmIHN0cnVjdCB7CisJQllURSBiX1R5cGU7CQkvKiBFT0Mgb3IgRU9TICovCisJQllURSBiX0ludGVycnVwdEZsYWc7CS8qIEludGVycnVwdCB1c2Ugb3Igbm90ICAgICAgICAgICAgICAgICAgICAqLworCVVJTlQgdWlfQ29udmVydFRpbWluZzsJLyogU2VsZWN0aW9uIG9mIHRoZSBjb252ZXJ0aW9uIHRpbWUgICAgICAgICovCisJQllURSBiX05ick9mQ2hhbm5lbDsJLyogTnVtYmVyIG9mIGNoYW5uZWwgdG8gcmVhZCAgICAgICAgICAgICAgICovCisJVUlOVCB1aV9DaGFubmVsTGlzdFtNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFNdOwkvKiBOdW1iZXIgb2YgdGhlIGNoYW5uZWwgdG8gYmUgcmVhZCAgICAgICAgKi8KKwlVSU5UIHVpX1JhbmdlTGlzdFtNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFNdOwkvKiBHYWluIG9mIGVhY2ggY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgKi8KKworfSBzdHJfQW5hbG9nUmVhZEluZm9ybWF0aW9uOworCisvLyBGdW5jdGlvbiBEZWNsYXJhdGlvbiBGb3IgQVBDSS0zMTIwCisKKy8vIEludGVybmFsIGZ1bmN0aW9ucworaW50IGlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBjaGFyIGNoZWNrKTsKK2ludCBpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgaV9BUENJMzEyMF9FeHR0cmlnRGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK2ludCBpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgaV9BUENJMzEyMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK2ludCBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zCit2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworLy9VUERBVEUtMC43LjU3LT4wLjcuNjggdm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc2hvcnQgKmRtYSxzaG9ydCAqZGF0YSxpbnQgbik7Cit2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHNob3J0ICpkbWFfYnVmZmVyLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpOworaW50IGlfQVBDSTMxMjBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpbnQgaXJxLCB2b2lkICpkKTsKKworLy8gVElNRVIKKworaW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfSW5zblJlYWRUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0RJCisvLyBmb3IgZGkgcmVhZAorCitpbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9ETworLy9pbnQgaV9BUENJMzEyMF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9BTworLy9pbnQgaV9BUENJMzEyMF9Xcml0ZTFBbmFsb2dWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LFVJTlQgdWlfUmFuZ2UsVUlOVCB1aV9DaGFubmVsLFVJTlQgZGF0YSApOworaW50IGlfQVBDSTMxMjBfSW5zbldyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0FJIEhBcmR3YXJlIGxheWVyCisKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK2ludCBpX0FQQ0kzMTIwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvL2ludCBpX0FQQ0kzMTIwX0NhbmNlbEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2ludCBpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNjZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYwpAQCAtMCwwICsxLDM2NDIgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0zMjAwICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMzIwMC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMzIwMCAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAwMi4wNy4wNCB8IEouIEtyYXV0aCB8IE1vZGlmaWNhdGlvbiBmcm9tIHRoZSBkcml2ZXIgaW4gb3JkZXIgdG8gICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgY29ycmVjdCBzb21lIGVycm9ycyB3aGVuIHVzaW5nIHNldmVyYWwgYm9hcmRzLiB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMjYuMTAuMDQgfCBKLiBLcmF1dGggfCAtIFVwZGF0ZSBmb3IgQ09NRURJIDAuNy42OCAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IC0gUmVhZCBlZXByb20gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgLSBBcHBlbmQgQVBDSS0zMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMjAwLmgiCisvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKyNpbmNsdWRlICJhZGRpX2FtY2NfUzU5MjAuaCIKKy8vI2RlZmluZSBQUklOVF9JTkZPCisKKy8vRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworLyoKKyAgSU5UIGlfQ0pDQXZhaWxhYmxlPTE7CisgIElOVCBpX0NKQ1BvbGFyaXR5PTA7CisgIElOVCBpX0NKQ0dhaW49MjsvL2NoYW5nZWQgZnJvbSAwIHRvIDIKKyAgSU5UIGlfSW50ZXJydXB0RmxhZz0wOworICBJTlQgaV9BRERJREFUQVBvbGFyaXR5OworICBJTlQgaV9BRERJREFUQUdhaW47CisgIElOVCBpX0F1dG9DYWxpYnJhdGlvbj0wOyAgIC8vOiBhdXRvIGNhbGlicmF0aW9uCisgIElOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWU7CisgIElOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworICBJTlQgaV9BRERJREFUQVR5cGU7CisgIElOVCBpX0NoYW5uZWxObzsKKyAgSU5UIGlfQ2hhbm5lbENvdW50PTA7CisgIElOVCBpX1NjYW5UeXBlOworICBJTlQgaV9GaXJzdENoYW5uZWw7CisgIElOVCBpX0xhc3RDaGFubmVsOworICBJTlQgaV9TdW09MDsKKyAgSU5UIGlfT2Zmc2V0OworICBVSU5UIHVpX0NoYW5uZWxfbnVtPTA7CisgIHN0YXRpYyBpbnQgaV9Db3VudD0wOworICBJTlQgaV9Jbml0aWFsaXNlZD0wOworICBVSU5UIHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs5Nl07IC8vQnVmZmVyCisqLworc3RyX0JvYXJkSW5mb3Mgc19Cb2FyZEluZm9zWzEwMF07CS8vIDEwMCB3aWxsIGJlIHRoZSBtYXggbnVtYmVyIG9mIGJvYXJkcyB0byBiZSB1c2VkCisvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IEZ1bmN0aW9uICAgTmFtZSAgIDogSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20gICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlQgICAgaV9OYk9mV29yZHNUb1JlYWQsICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEICAgd19FZXByb21TdGFydEFkZHJlc3MsICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV09SRCBwd19EYXRhUmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB3b3JkIGZyb20gdGhlIDU5MjAgZWVwcm9tLiAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IElucHV0IFBhcmFtZXRlcnMgIDogSU5UICAgIGlfTmJPZldvcmRzVG9SZWFkIDogTmJyLiBvZiB3b3JkIHRvIHJlYWQgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogQWRkcmVzcyBvZiB0aGUgZWVwcm9tIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0cmF0IGFkZHJlc3MgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFdPUkQgcHdfRGF0YVJlYWQgOiBSZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworCitJTlQgaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbShJTlQgaV9OYk9mV29yZHNUb1JlYWQsCisJRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MsIFBXT1JEIHB3X0RhdGFSZWFkKQoreworCURXT1JEIGR3X2VlcHJvbV9idXN5ID0gMDsKKwlJTlQgaV9Db3VudGVyID0gMDsKKwlJTlQgaV9Xb3JkQ291bnRlcjsKKwlJTlQgaTsKKwlCWVRFIHBiX1JlYWRCeXRlWzFdOworCUJZVEUgYl9SZWFkTG93Qnl0ZSA9IDA7CisJQllURSBiX1JlYWRIaWdoQnl0ZSA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0xvdyA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAwOworCVdPUkQgd19SZWFkV29yZCA9IDA7CisKKwlmb3IgKGlfV29yZENvdW50ZXIgPSAwOyBpX1dvcmRDb3VudGVyIDwgaV9OYk9mV29yZHNUb1JlYWQ7CisJCWlfV29yZENvdW50ZXIrKykgeworCQlkbyB7CisJCQlkd19lZXByb21fYnVzeSA9CisJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCX0KKwkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQlmb3IgKGlfQ291bnRlciA9IDA7IGlfQ291bnRlciA8IDI7IGlfQ291bnRlcisrKSB7CisJCQliX1NlbGVjdGVkQWRkcmVzc0xvdyA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgJSAyNTY7CS8vUmVhZCB0aGUgbG93IDggYml0IHBhcnQKKwkJCWJfU2VsZWN0ZWRBZGRyZXNzSGlnaCA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgLyAyNTY7CS8vUmVhZCB0aGUgaGlnaCA4IGJpdCBwYXJ0CisKKwkJCS8vU2VsZWN0IHRoZSBsb2FkIGxvdyBhZGRyZXNzIG1vZGUKKwkJCW91dGIoTlZDTURfTE9BRF9MT1csCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBsb3cgYWRkcmVzcworCQkJb3V0YihiX1NlbGVjdGVkQWRkcmVzc0xvdywKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgbG9hZCBoaWdoIGFkZHJlc3MgbW9kZQorCQkJb3V0YihOVkNNRF9MT0FEX0hJR0gsCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBoaWdoIGFkZHJlc3MKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NIaWdoLAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSBSRUFEIG1vZGUKKwkJCW91dGIoTlZDTURfQkVHSU5fUkVBRCwKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkzKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1JlYWQgZGF0YSBpbnRvIHRoZSBFRVBST00KKwkJCSpwYl9SZWFkQnl0ZSA9CisJCQkJaW5iKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUiArIDIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSB1cHBlciBhZGRyZXNzIHBhcnQKKwkJCWlmIChpX0NvdW50ZXIgPT0gMCkgeworCQkJCWJfUmVhZExvd0J5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0gZWxzZSB7CisJCQkJYl9SZWFkSGlnaEJ5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0KKworCQkJLy9TbGVlcAorCQkJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIDsKKworCQl9CisJCXdfUmVhZFdvcmQgPQorCQkJKGJfUmVhZExvd0J5dGUgfCAoKCh1bnNpZ25lZCBzaG9ydCliX1JlYWRIaWdoQnl0ZSkgKgorCQkJCTI1NikpOworCisJCXB3X0RhdGFSZWFkW2lfV29yZENvdW50ZXJdID0gd19SZWFkV29yZDsKKworCQl3X0VlcHJvbVN0YXJ0QWRkcmVzcyArPSAyOwkvLyB0byByZWFkIHRoZSBuZXh0IHdvcmQKKworCX0JCQkvLyBmb3IgKC4uLikgaV9OYk9mV29yZHNUb1JlYWQKKwlyZXR1cm4gKDApOworfQorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgRnVuY3Rpb24gICBOYW1lICAgOiB2b2lkIHZfR2V0QVBDSTMyMDBFZXByb21DYWxpYnJhdGlvblZhbHVlICh2b2lkKSAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgVGFzayAgICAgICAgICAgICAgOiBSZWFkIGNhbGlicmF0aW9uIHZhbHVlIGZyb20gdGhlIEFQQ0ktMzIwMCBlZXByb20uICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisKK3ZvaWQgdl9HZXRBUENJMzIwMEVlcHJvbUNhbGlicmF0aW9uVmFsdWUoRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCXN0cl9Cb2FyZEluZm9zICogQm9hcmRJbmZvcm1hdGlvbnMpCit7CisJV09SRCB3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3M7CisJV09SRCB3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzczsKKwlXT1JEIHdfTnVtYmVyT2ZNb2R1bHMgPSAwOworCVdPUkQgd19DdXJyZW50U291cmNlc1syXTsKKwlXT1JEIHdfTW9kdWxDb3VudGVyID0gMDsKKwlXT1JEIHdfRmlyc3RIZWFkZXJTaXplID0gMDsKKwlXT1JEIHdfTnVtYmVyT2ZJbnB1dHMgPSAwOworCVdPUkQgd19DSkNGbGFnID0gMDsKKwlXT1JEIHdfTnVtYmVyT2ZHYWluVmFsdWUgPSAwOworCVdPUkQgd19TaW5nbGVIZWFkZXJBZGRyZXNzID0gMDsKKwlXT1JEIHdfU2luZ2xlSGVhZGVyU2l6ZSA9IDA7CisJV09SRCB3X0lucHV0ID0gMDsKKwlXT1JEIHdfR2FpbkZhY3RvckFkZHJlc3MgPSAwOworCVdPUkQgd19HYWluRmFjdG9yVmFsdWVbMl07CisJV09SRCB3X0dhaW5JbmRleCA9IDA7CisJV09SRCB3X0dhaW5WYWx1ZSA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiogR2V0IHRoZSBBbmFsb2cgaW5wdXQgaGVhZGVyIGFkZHJlc3MgKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCAweDExNiwJLy93X0VlcHJvbVN0YXJ0QWRkcmVzczogQW5hbG9nIGlucHV0IGhlYWRlciBhZGRyZXNzCisJCSZ3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3MpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiogQ29tcHV0ZSB0aGUgcmVhbCBhbmFsb2cgaW5wdXQgYWRkcmVzcyAqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzID0gd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzICsgMHgxMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIG1vZHVscyAqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3MgKyAweDAyLAkvL3dfRWVwcm9tU3RhcnRBZGRyZXNzOiBOdW1iZXIgb2YgY29ucG9ubWVudAorCQkmd19OdW1iZXJPZk1vZHVscyk7CisKKwlmb3IgKHdfTW9kdWxDb3VudGVyID0gMDsgd19Nb2R1bENvdW50ZXIgPCB3X051bWJlck9mTW9kdWxzOworCQl3X01vZHVsQ291bnRlcisrKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogQ29tcHV0ZSB0aGUgY29tcG9uZW50IGFkZHJlc3MgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzID0KKwkJCXdfQW5hbG9nSW5wdXRNYWluSGVhZGVyQWRkcmVzcyArCisJCQkod19GaXJzdEhlYWRlclNpemUgKiB3X01vZHVsQ291bnRlcikgKyAweDA0OworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIGZpcnN0IGhlYWRlciBzaXplICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzcywJLy8gQWRkcmVzcyBvZiB0aGUgZmlyc3QgaGVhZGVyCisJCQkmd19GaXJzdEhlYWRlclNpemUpOworCisJCXdfRmlyc3RIZWFkZXJTaXplID0gd19GaXJzdEhlYWRlclNpemUgPj4gNDsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIG51bWJlciBvZiBpbnB1dHMgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDA2LAkvLyBOdW1iZXIgb2YgaW5wdXRzIGZvciB0aGUgZmlyc3QgbW9kdWwKKwkJCSZ3X051bWJlck9mSW5wdXRzKTsKKworCQl3X051bWJlck9mSW5wdXRzID0gd19OdW1iZXJPZklucHV0cyA+PiA0OworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCB0aGUgQ0pDIGZsYWcgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzcyArIDB4MDgsCS8vIENKQyBmbGFnCisJCQkmd19DSkNGbGFnKTsKKworCQl3X0NKQ0ZsYWcgPSAod19DSkNGbGFnID4+IDMpICYgMHgxOwkvLyBHZXQgb25seSB0aGUgQ0pDIGZsYWcKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBudW1iZXIgb2YgZ2FpbiB2YWx1ZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDQ0LAkvLyBOdW1iZXIgb2YgZ2FpbiB2YWx1ZQorCQkJJndfTnVtYmVyT2ZHYWluVmFsdWUpOworCisJCXdfTnVtYmVyT2ZHYWluVmFsdWUgPSB3X051bWJlck9mR2FpblZhbHVlICYgMHhGRjsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIENvbXB1dGUgc2luZ2xlIGhlYWRlciBhZGRyZXNzICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl3X1NpbmdsZUhlYWRlckFkZHJlc3MgPQorCQkJd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDQ2ICsKKwkJCSgoKHdfTnVtYmVyT2ZHYWluVmFsdWUgLyAxNikgKyAxKSAqIDIpICsKKwkJCSg2ICogd19OdW1iZXJPZkdhaW5WYWx1ZSkgKworCQkJKDQgKiAoKCh3X051bWJlck9mR2FpblZhbHVlIC8gMTYpICsgMSkgKiAyKSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIGN1cnJlbnQgc291cmNlcyB2YWx1ZSBmb3IgaW5wdXQgMSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgxLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfU2luZ2xlSGVhZGVyQWRkcmVzcywJLy93X0VlcHJvbVN0YXJ0QWRkcmVzczogU2luZ2xlIGhlYWRlciBhZGRyZXNzCisJCQkmd19TaW5nbGVIZWFkZXJTaXplKTsKKworCQl3X1NpbmdsZUhlYWRlclNpemUgPSB3X1NpbmdsZUhlYWRlclNpemUgPj4gNDsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBnYWluIGZhY3RvciBmb3IgdGhlIG1vZHVsZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl3X0dhaW5GYWN0b3JBZGRyZXNzID0gd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3M7CisKKwkJZm9yICh3X0dhaW5JbmRleCA9IDA7IHdfR2FpbkluZGV4IDwgd19OdW1iZXJPZkdhaW5WYWx1ZTsKKwkJCXdfR2FpbkluZGV4KyspIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJICAvKiogUmVhZCBnYWluIHZhbHVlIGZvciB0aGUgbW9kdWxlICoqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyA3MCArICgyICogKDEgKyAod19OdW1iZXJPZkdhaW5WYWx1ZSAvIDE2KSkpICsgKDB4MDIgKiB3X0dhaW5JbmRleCksCS8vIEdhaW4gdmFsdWUKKwkJCQkmd19HYWluVmFsdWUpOworCisJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXdfR2FpblZhbHVlW3dfR2FpbkluZGV4XSA9IHdfR2FpblZhbHVlOworCisjICAgICAgICAgICAgIGlmZGVmIFBSSU5UX0lORk8KKwkJCXByaW50aygiXG4gR2FpbiB2YWx1ZSA9ICVkIiwKKwkJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXdfR2FpblZhbHVlW3dfR2FpbkluZGV4XSk7CisjICAgICAgICAgICAgIGVuZGlmCisKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAgLyoqIFJlYWQgZ2FpbiBmYWN0b3IgZm9yIHRoZSBtb2R1bGUgKiovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMiwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyA3MCArICgoMiAqIHdfTnVtYmVyT2ZHYWluVmFsdWUpICsgKDIgKiAoMSArICh3X051bWJlck9mR2FpblZhbHVlIC8gMTYpKSkpICsgKDB4MDQgKiB3X0dhaW5JbmRleCksCS8vIEdhaW4gZmFjdG9yCisJCQkJd19HYWluRmFjdG9yVmFsdWUpOworCisJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0dhaW5GYWN0b3Jbd19HYWluSW5kZXhdID0KKwkJCQkod19HYWluRmFjdG9yVmFsdWVbMV0gPDwgMTYpICsKKwkJCQl3X0dhaW5GYWN0b3JWYWx1ZVswXTsKKworIyAgICAgICAgICAgICBpZmRlZiBQUklOVF9JTkZPCisJCQlwcmludGsoIlxuIHdfR2FpbkZhY3RvclZhbHVlIFslZF0gPSAlbHUiLCB3X0dhaW5JbmRleCwKKwkJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0dhaW5GYWN0b3Jbd19HYWluSW5kZXhdKTsKKyMgICAgICAgICAgICAgZW5kaWYKKwkJfQorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFJlYWQgY3VycmVudCBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggY2hhbm5lbHMgb2YgdGhlIG1vZHVsZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWZvciAod19JbnB1dCA9IDA7IHdfSW5wdXQgPCB3X051bWJlck9mSW5wdXRzOyB3X0lucHV0KyspIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkgIC8qKiBSZWFkIGN1cnJlbnQgc291cmNlcyB2YWx1ZSBmb3IgaW5wdXQgMSAqKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMiwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCQkod19JbnB1dCAqIHdfU2luZ2xlSGVhZGVyU2l6ZSkgKworCQkJCXdfU2luZ2xlSGVhZGVyQWRkcmVzcyArIDB4MEMsIHdfQ3VycmVudFNvdXJjZXMpOworCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAgLyoqIFNhdmUgdGhlIGN1cnJlbnQgc291cmNlcyB2YWx1ZSAqKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0N1cnJlbnRTb3VyY2Vbd19JbnB1dF0gPQorCQkJCSh3X0N1cnJlbnRTb3VyY2VzWzBdICsKKwkJCQkoKHdfQ3VycmVudFNvdXJjZXNbMV0gJiAweEZGRikgPDwgMTYpKTsKKworIyAgICAgICAgICAgICBpZmRlZiBQUklOVF9JTkZPCisJCQlwcmludGsoIlxuIEN1cnJlbnQgc291cmNlcyBbJWRdID0gJWx1Iiwgd19JbnB1dCwKKwkJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0N1cnJlbnRTb3VyY2Vbd19JbnB1dF0pOworIyAgICAgICAgICAgICBlbmRpZgorCQl9CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCB0aGUgQ0pDIGN1cnJlbnQgc291cmNlIHZhbHVlICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgyLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkod19JbnB1dCAqIHdfU2luZ2xlSGVhZGVyU2l6ZSkgKyB3X1NpbmdsZUhlYWRlckFkZHJlc3MgKworCQkJMHgwQywgd19DdXJyZW50U291cmNlcyk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogU2F2ZSB0aGUgY3VycmVudCBzb3VyY2VzIHZhbHVlICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCXVsX0N1cnJlbnRTb3VyY2VDSkMgPQorCQkJKHdfQ3VycmVudFNvdXJjZXNbMF0gKworCQkJKCh3X0N1cnJlbnRTb3VyY2VzWzFdICYgMHhGRkYpIDw8IDE2KSk7CisKKyMgICAgICAgICAgaWZkZWYgUFJJTlRfSU5GTworCQlwcmludGsoIlxuIEN1cnJlbnQgc291cmNlcyBDSkMgPSAlbHUiLAorCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCXVsX0N1cnJlbnRTb3VyY2VDSkMpOworIyAgICAgICAgICBlbmRpZgorCX0KK30KKworSU5UIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IHVpX0NoYW5uZWxfbnVtLCB1bnNpZ25lZCBpbnQgKiBDSkNDdXJyZW50U291cmNlLAorCXVuc2lnbmVkIGludCAqIENoYW5uZWxDdXJyZW50U291cmNlLCB1bnNpZ25lZCBpbnQgKiBDaGFubmVsR2FpbkZhY3RvcikKK3sKKwlpbnQgaV9EaWZmQ2hhbm5lbCA9IDA7CisJaW50IGlfTW9kdWxlID0gMDsKKworI2lmZGVmIFBSSU5UX0lORk8KKwlwcmludGsoIlxuIENoYW5uZWwgPSAldSIsIHVpX0NoYW5uZWxfbnVtKTsKKyNlbmRpZgorCisJLy9UZXN0IGlmIHNpbmdsZSBvciBkaWZmZXJlbnRpYWwgbW9kZQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db25uZWN0aW9uVHlwZSA9PSAxKSB7CisJCS8vaWYgZGlmZgorCisJCWlmICgodWlfQ2hhbm5lbF9udW0gPj0gMCkgJiYgKHVpX0NoYW5uZWxfbnVtIDw9IDEpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IHVpX0NoYW5uZWxfbnVtLCBpX01vZHVsZSA9IDA7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA+PSAyKSAmJiAodWlfQ2hhbm5lbF9udW0gPD0gMykpCisJCQlpX0RpZmZDaGFubmVsID0gdWlfQ2hhbm5lbF9udW0gLSAyLCBpX01vZHVsZSA9IDE7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA+PSA0KSAmJiAodWlfQ2hhbm5lbF9udW0gPD0gNSkpCisJCQlpX0RpZmZDaGFubmVsID0gdWlfQ2hhbm5lbF9udW0gLSA0LCBpX01vZHVsZSA9IDI7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA+PSA2KSAmJiAodWlfQ2hhbm5lbF9udW0gPD0gNykpCisJCQlpX0RpZmZDaGFubmVsID0gdWlfQ2hhbm5lbF9udW0gLSA2LCBpX01vZHVsZSA9IDM7CisKKwl9IGVsc2UgeworCQkvLyBpZiBzaW5nbGUKKwkJaWYgKCh1aV9DaGFubmVsX251bSA9PSAwKSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMSkpCisJCQlpX0RpZmZDaGFubmVsID0gMCwgaV9Nb2R1bGUgPSAwOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPT0gMikgfHwgKHVpX0NoYW5uZWxfbnVtID09IDMpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMDsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDQpIHx8ICh1aV9DaGFubmVsX251bSA9PSA1KSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAwLCBpX01vZHVsZSA9IDE7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA9PSA2KSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gNykpCisJCQlpX0RpZmZDaGFubmVsID0gMSwgaV9Nb2R1bGUgPSAxOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPT0gOCkgfHwgKHVpX0NoYW5uZWxfbnVtID09IDkpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDAsIGlfTW9kdWxlID0gMjsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDEwKSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMTEpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMjsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDEyKSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMTMpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDAsIGlfTW9kdWxlID0gMzsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDE0KSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMTUpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMzsKKwl9CisKKwkvL1Rlc3QgaWYgdGhlcm1vY291cGxlIG9yIFJURCBtb2RlCisJKkNKQ0N1cnJlbnRTb3VyY2UgPQorCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbaV9Nb2R1bGVdLnVsX0N1cnJlbnRTb3VyY2VDSkM7CisjaWZkZWYgUFJJTlRfSU5GTworCXByaW50aygiXG4gQ0pDQ3VycmVudFNvdXJjZSA9ICVsdSIsICpDSkNDdXJyZW50U291cmNlKTsKKyNlbmRpZgorCisJKkNoYW5uZWxDdXJyZW50U291cmNlID0KKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2lfTW9kdWxlXS4KKwkJdWxfQ3VycmVudFNvdXJjZVtpX0RpZmZDaGFubmVsXTsKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBDaGFubmVsQ3VycmVudFNvdXJjZSA9ICVsdSIsICpDaGFubmVsQ3VycmVudFNvdXJjZSk7CisjZW5kaWYKKwkvLyAgICAgIH0KKwkvLyAgIH0KKworCS8vQ2hhbm5sZSBnYWluIGZhY3RvcgorCSpDaGFubmVsR2FpbkZhY3RvciA9CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpX01vZHVsZV0uCisJCXVsX0dhaW5GYWN0b3Jbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFHYWluXTsKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBDaGFubmVsR2FpbkZhY3RvciA9ICVsdSIsICpDaGFubmVsR2FpbkZhY3Rvcik7CisjZW5kaWYKKwkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwlyZXR1cm4gKDApOworfQorCisvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsIG9yIHBvcnQgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gcmVhZCAgZm9yIFBvcnQKKyAgQ2hhbm5lbCBOdW1iZXJmb3Igc2luZ2xlIGNoYW5uZWwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgZGF0YVswXSAgICAgICAgICAgIDogMDogUmVhZCBzaW5nbGUgY2hhbm5lbAorICAxOiBSZWFkIHBvcnQgdmFsdWUKKyAgZGF0YVsxXSAgICAgICAgICAgICAgUG9ydCBudW1iZXIKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQlkYXRhWzBdIDpSZWFkIHN0YXR1cyB2YWx1ZQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wID0gMDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gMDsKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW5sKGRldnByaXYtPmlfSW9iYXNlUmVzZXJ2ZWQpOworCisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYgICh1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA8IDAgfHwgZGF0YVsxXSA+IDEpIHsKKwkJCQlwcmludGsoIlxuVGhlIHBvcnQgbnVtYmVyIGlzIGluIGVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9pZihkYXRhWzFdIDwgMCB8fCBkYXRhWzFdID4xKQorCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAweDM7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJKmRhdGEgPSAoKmRhdGEgJiAxNSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy9pZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy9lbHNlaWYgICh1aV9UZW1wPT0xKQorCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICBkYXRhWzBdICA6MSAgTWVtb3J5IGVuYWJsZQorICAwICBNZW1vcnkgRGlzYWJsZQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yCQkJIHwKKyAgfAkJCQkJCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMyMDBfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJOb3QgYSB2YWxpZCBEYXRhICEhISAsRGF0YSBzaG91bGQgYmUgMSBvciAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYgICggKGRhdGFbMF0hPTApICYmIChkYXRhWzBdIT0xKSApCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvL2Vsc2UgaWYgIChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1dyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IHdyaXRlcyBUbyB0aGUgZGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorICB8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICA6VmFsdWUgdG8gb3V0cHV0CisgIGRhdGFbMV0gICAgICAgICAgICAgOiAwIG8vcCBzaW5nbGUgY2hhbm5lbAorICAxIG8vcCBwb3J0CisgIGRhdGFbMl0gICAgICAgICAgICAgOiBwb3J0IG5vCisgIGRhdGFbM10gICAgICAgICAgICAgOjAgc2V0IHRoZSBkaWdpdGFsIG8vcCBvbgorICAxIHNldCB0aGUgZGlnaXRhbCBvL3Agb2ZmCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IJICAgICAJIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTMyMDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXAgPSAwLCB1aV9UZW1wMSA9IDA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQlkYXRhWzBdID0gKGRhdGFbMF0gfCB1aV9UZW1wKTsKKwkJCQkJYnJlYWs7CisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeIDB4ZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwkJCX0JLy9pZihkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQkJY2FzZSAyOgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgzOworCQkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmKSAmIHVpX1RlbXA7CisKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDM6CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCQkJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOworCQkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCQl9CS8vZWxzZWlmKGRhdGFbMV09PTApCisJCX0JCS8vaWYoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2lmIGVsc2UgZGF0YVszXT09MSkKKwl9CQkJLy9pZiBlbHNlIGRhdGFbM109PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgZGF0YVswXSAgICAgICAgICAgICAgICAgOjAgcmVhZCBzaW5nbGUgY2hhbm5lbAorICAxIHJlYWQgcG9ydCB2YWx1ZQorICBkYXRhWzFdICAgICAgICAgICAgICAgICAgcG9ydCBubworCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzIwMF9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy8gaWYgICh1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA8IDAgfHwgZGF0YVsxXSA+IDEpIHsKKwkJCQlwcmludGsoIlxuVGhlIHBvcnQgc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9pZihkYXRhWzFdIDwwIHx8ZGF0YVsxXSA+MSkKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzoKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQlicmVhazsKKwkJCX0JLy8gc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy8gaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vIGVsc2UgaWYgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGVsc2UgaWYgICh1aV9UZW1wPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IElOVCBpX0FQQ0kzMjAwX0NvbmZpZ0FuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBBbmFsb2cgSW5wdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkJCWRhdGFbMF0KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpOb3JtYWwgQUkgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6UlREICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOlRIRVJNT0NPVVBMRSAgICAgICAgICAgICAgIHwKKyAgfAkJCQkgICAgZGF0YVsxXSAgICAgICAgICAgIDogR2FpbiBUbyBVc2UgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgOiBQb2xhcml0eQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpCaXBvbGFyICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6VW5pcG9sYXIgICAgICAgICAgICAgICAgICB8CisgIHwJCQkJCQkJCQkJCQkJCQkgICAgCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzNdICAgICAgICAgICAgOiBPZmZzZXQgUmFuZ2UKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzRdICAgICAgICAgICAgOiBDb3VwbGluZworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpEQyBDb3VwbGluZyAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6QUMgQ291cGxpbmcgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1XSAgICAgICAgICAgIDpEaWZmZXJlbnRpYWwvU2luZ2xlCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOlNpbmdsZSAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpEaWZmZXJlbnRpYWwgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzZdICAgICAgICAgICAgOlRpbWVyUmVsb2FkVmFsdWUKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzddICAgICAgICAgICAgOkNvbnZlcnRpbmdUaW1lVW5pdAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOF0gICAgICAgICAgICAgOjAgQW5hbG9nIHZvbHRhZ2UgbWVhc3VyZW1lbnQKKyAgMSBSZXNpc3RhbmNlIG1lYXN1cmVtZW50CisgIDIgVGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOV0gICAgICAgICAgICA6SW50ZXJydXB0CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpEaXNhYmxlCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpFbmFibGUKKyAgZGF0YVsxMF0gICAgICAgICAgIDpUeXBlIG9mIFRoZXJtb2NvdXBsZQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzExXSAgICAgICAgICAgOiAwOiBzaW5nbGUgY2hhbm5lbAorICBNb2R1bGUgTnVtYmVyCisgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMl0KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6U2luZ2xlIFJlYWQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6UmVhZCBtb3JlIGNoYW5uZWwKKyAgMjpTaW5nbGUgc2NhbgorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzpDb250aW5vdXMgU2NhbgorICBkYXRhWzEzXSAgICAgICAgICA6TnVtYmVyIG9mIGNoYW5uZWxzIHRvIHJlYWQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxNF0gICAgICAgICAgOlJURCBjb25uZWN0aW9uIHR5cGUKKyAgOjA6UlREIG5vdCB1c2VkCisgIDE6UlREIDIgd2lyZSBjb25uZWN0aW9uCisgIDI6UlREIDMgd2lyZSBjb25uZWN0aW9uCisgIDM6UlREIDQgd2lyZSBjb25uZWN0aW9uCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzIwMF9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlVSU5UIHVsX0NvbmZpZyA9IDAsIHVsX1RlbXAgPSAwOworCVVJTlQgdWlfQ2hhbm5lbE5vID0gMDsKKwlVSU5UIHVpX0R1bW15ID0gMDsKKwlJTlQgaV9lcnIgPSAwOworCisJLy9CZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKyNpZmRlZiBQUklOVF9JTkZPCisJSU5UIGkgPSAwLCBpMiA9IDA7CisjZW5kaWYKKwkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy8gSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5iX1N0cnVjdEluaXRpYWxpemVkICE9IDEpIHsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDQXZhaWxhYmxlID0gMTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDUG9sYXJpdHkgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DSkNHYWluID0gMjsJLy9jaGFuZ2VkIGZyb20gMCB0byAyCisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BdXRvQ2FsaWJyYXRpb24gPSAwOwkvLzogYXV0byBjYWxpYnJhdGlvbgorCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsQ291bnQgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfQ2hhbm5lbF9udW0gPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9IDA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0luaXRpYWxpc2VkID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmJfU3RydWN0SW5pdGlhbGl6ZWQgPSAxOworCisJCS8vQmVnaW4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db25uZWN0aW9uVHlwZSA9IDA7CisJCS8vRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworCQkvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJbWVtc2V0KHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZSwgMCwKKwkJCXNpemVvZihzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbTUFYX01PRFVMRV0pKTsKKworCQl2X0dldEFQQ0kzMjAwRWVwcm9tQ2FsaWJyYXRpb25WYWx1ZShkZXZwcml2LT5pX0lvYmFzZUFtY2MsCisJCQkmc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdKTsKKworI2lmZGVmIFBSSU5UX0lORk8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9NT0RVTEU7IGkrKykgeworCQkJcHJpbnRrKCJcbiBzX01vZHVsZVslaV0udWxfQ3VycmVudFNvdXJjZUNKQyA9ICVsdSIsIGksCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2ldLgorCQkJCXVsX0N1cnJlbnRTb3VyY2VDSkMpOworCisJCQlmb3IgKGkyID0gMDsgaTIgPCA1OyBpMisrKSB7CisJCQkJcHJpbnRrKCJcbiBzX01vZHVsZVslaV0udWxfQ3VycmVudFNvdXJjZSBbJWldID0gJWx1IiwgaSwgaTIsIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpXS51bF9DdXJyZW50U291cmNlW2kyXSk7CisJCQl9CisKKwkJCWZvciAoaTIgPSAwOyBpMiA8IDg7IGkyKyspIHsKKwkJCQlwcmludGsoIlxuIHNfTW9kdWxlWyVpXS51bF9HYWluRmFjdG9yIFslaV0gPSAlbHUiLCBpLCBpMiwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2ldLnVsX0dhaW5GYWN0b3JbaTJdKTsKKwkJCX0KKworCQkJZm9yIChpMiA9IDA7IGkyIDwgODsgaTIrKykgeworCQkJCXByaW50aygiXG4gc19Nb2R1bGVbJWldLndfR2FpblZhbHVlIFslaV0gPSAldSIsCisJCQkJCWksIGkyLAorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbaV0uCisJCQkJCXdfR2FpblZhbHVlW2kyXSk7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJfQorCisJaWYgKGRhdGFbMF0gIT0gMCAmJiBkYXRhWzBdICE9IDEgJiYgZGF0YVswXSAhPSAyKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGFjcXVpc2l0aW9uIHR5cGUgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvL2lmKGRhdGFbMF0hPTAgJiYgZGF0YVswXSE9MSAmJiBkYXRhWzBdIT0yKQorCWlmIChkYXRhWzBdID09IDEpIHsKKwkJaWYgKGRhdGFbMTRdICE9IDAgJiYgZGF0YVsxNF0gIT0gMSAmJiBkYXRhWzE0XSAhPSAyCisJCQkmJiBkYXRhWzE0XSAhPSA0KSB7CisJCQlwcmludGsoIlxuIEVycm9yIGluIHNlbGVjdGlvbiBvZiBSVEQgY29ubmVjdGlvbiB0eXBlXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vaWYoZGF0YVsxNF0hPTAgJiYgZGF0YVsxNF0hPTEgJiYgZGF0YVsxNF0hPTIgJiYgZGF0YVsxNF0hPTQpCisJfQkJCS8vaWYoZGF0YVswXT09MSApCisJaWYgKGRhdGFbMV0gPCAwIHx8IGRhdGFbMV0gPiA3KSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGdhaW4gaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvLyBpZihkYXRhWzFdPDAgfHwgZGF0YVsxXT43KQorCWlmIChkYXRhWzJdICE9IDAgJiYgZGF0YVsyXSAhPSAxKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIHBvbGFyaXR5IGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzJdIT0wICYmICBkYXRhWzJdIT0xKQorCWlmIChkYXRhWzNdICE9IDApIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2Ygb2Zmc2V0IHJhbmdlICBpcyBpbiBlcnJvclxuIik7CisJCWlfZXJyKys7CisJfQkJCS8vIGlmKGRhdGFbM10hPTApCisJaWYgKGRhdGFbNF0gIT0gMCAmJiBkYXRhWzRdICE9IDEpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY291cGxpbmcgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvL2lmKGRhdGFbNF0hPTAgJiYgIGRhdGFbNF0hPTEpCisJaWYgKGRhdGFbNV0gIT0gMCAmJiBkYXRhWzVdICE9IDEpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2Ygc2luZ2xlL2RpZmZlcmVudGlhbCBtb2RlIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzVdIT0wICYmICBkYXRhWzVdIT0xKQorCWlmIChkYXRhWzhdICE9IDAgJiYgZGF0YVs4XSAhPSAxICYmIGRhdGFbMl0gIT0gMikgeworCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIGZ1bmN0aW9uYWxpdHlcbiIpOworCX0JCQkvL2lmKGRhdGFbOF0hPTAgJiYgZGF0YVs4XSE9MSAmJiBkYXRhWzJdIT0yKQorCWlmIChkYXRhWzEyXSA9PSAwIHx8IGRhdGFbMTJdID09IDEpIHsKKwkJaWYgKGRhdGFbNl0gIT0gMjAgJiYgZGF0YVs2XSAhPSA0MCAmJiBkYXRhWzZdICE9IDgwCisJCQkmJiBkYXRhWzZdICE9IDE2MCkgeworCQkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY29udmVyc2lvbiB0aW1lIHJlbG9hZCB2YWx1ZSBpcyBpbiBlcnJvclxuIik7CisJCQlpX2VycisrOworCQl9CQkvLyBpZiAoZGF0YVs2XSE9MjAgJiYgZGF0YVs2XSE9NDAgJiYgZGF0YVs2XSE9ODAgJiYgZGF0YVs2XSE9MTYwICkKKwkJaWYgKGRhdGFbN10gIT0gMikgeworCQkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY29udmVyc2lvbiB0aW1lIHVuaXQgIGlzIGluIGVycm9yXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vIGlmKGRhdGFbN10hPTIpCisJfQorCWlmIChkYXRhWzldICE9IDAgJiYgZGF0YVs5XSAhPSAxKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGludGVycnVwdCBlbmFibGUgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvL2lmKGRhdGFbOV0hPTAgJiYgIGRhdGFbOV0hPTEpCisJaWYgKGRhdGFbMTFdIDwgMCB8fCBkYXRhWzExXSA+IDQpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgbW9kdWxlIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzExXSA8MCB8fCAgZGF0YVsxMV0+MSkKKwlpZiAoZGF0YVsxMl0gPCAwIHx8IGRhdGFbMTJdID4gMykgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBzaW5nbGVjaGFubmVsL3NjYW4gc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzEyXSA8IDAgfHwgIGRhdGFbMTJdPiAzKQorCWlmIChkYXRhWzEzXSA8IDAgfHwgZGF0YVsxM10gPiAxNikgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBudW1iZXIgb2YgY2hhbm5lbHMgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvLyBpZihkYXRhWzEzXSA8MCB8fGRhdGFbMTNdID4xNSkKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvKgorCSAgIGlfQ2hhbm5lbENvdW50PWRhdGFbMTNdOworCSAgIGlfU2NhblR5cGU9ZGF0YVsxMl07CisJICAgaV9BRERJREFUQVBvbGFyaXR5ID0gZGF0YVsyXTsKKwkgICBpX0FERElEQVRBR2Fpbj1kYXRhWzFdOworCSAgIGlfQURESURBVEFDb252ZXJzaW9uVGltZT1kYXRhWzZdOworCSAgIGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQ9ZGF0YVs3XTsKKwkgICBpX0FERElEQVRBVHlwZT1kYXRhWzBdOworCSAqLworCisJLy8gU2F2ZSBhY3F1aXNpdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgYWN0dWFsIGJvYXJkCisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbENvdW50ID0gZGF0YVsxM107CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPSBkYXRhWzEyXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVBvbGFyaXR5ID0gZGF0YVsyXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUdhaW4gPSBkYXRhWzFdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUgPSBkYXRhWzZdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0ID0gZGF0YVs3XTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUgPSBkYXRhWzBdOworCS8vQmVnaW4gSksgMTkuMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0Nvbm5lY3Rpb25UeXBlID0gZGF0YVs1XTsKKwkvL0VuZCBKSyAxOS4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQmVnaW4gSksgMTkuMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCW1lbXNldChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfU2NhblZhbHVlQXJyYXksIDAsICg3ICsgMTIpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwkvLyA3IGlzIHRoZSBtYXhpbWFsIG51bWJlciBvZiBjaGFubmVscworCS8vRW5kIEpLIDE5LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworCS8vQkVHSU4gSksgMDIuMDcuMDQgOiBUaGlzIHdoaWxlIGNhbid0IGJlIGRvLCBpdCBibG9jayB0aGUgcHJvY2VzcyB3aGVuIHVzaW5nIHNldmVyYWxzIGJvYXJkcworCS8vd2hpbGUoaV9JbnRlcnJ1cHRGbGFnPT0xKQorCXdoaWxlIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IDEpIHsKKyNpZm5kZWYgTVNYQk9YCisJCXVkZWxheSgxKTsKKyNlbHNlCisJCS8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgZm9yIHRoZSBNU1gtQm94CisJCS8vIHdlIHVzZWQgYSBwcmludGsgdG8gaGF2ZSBhIGxpdHRsZSBkZWxheSBiZWNhdXNlIHVkZWxheQorCQkvLyBzZWVtcyB0byBiZSBicm9rZW4gdW5kZXIgdGhlIE1TWC1Cb3guCisJCS8vIFRoaXMgc29sdXRpb24gaGF0IHRvIGJlIHN0dWRpZWQuCisJCXByaW50aygiIik7CisjZW5kaWYKKwl9CisJLy9FTkQgSksgMDIuMDcuMDQgOiBUaGlzIHdoaWxlIGNhbid0IGJlIGRvLCBpdCBibG9jayB0aGUgcHJvY2VzcyB3aGVuIHVzaW5nIHNldmVyYWxzIGJvYXJkcworCisJdWlfQ2hhbm5lbE5vID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lfQ2hhbm5lbE5vPXVpX0NoYW5uZWxObzsKKwkvL3VpX0NoYW5uZWxfbnVtID11aV9DaGFubmVsTm87CisKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPSB1aV9DaGFubmVsTm87CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtID0gdWlfQ2hhbm5lbE5vOworCisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCWlmIChkYXRhWzVdID09IDApIHsKKwkJaWYgKHVpX0NoYW5uZWxObyA8IDAgfHwgdWlfQ2hhbm5lbE5vID4gMTUpIHsKKwkJCXByaW50aygiXG5UaGUgU2VsZWN0aW9uIG9mIHRoZSBjaGFubmVsIGlzIGluIGVycm9yXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vIGlmKHVpX0NoYW5uZWxObzwwIHx8IHVpX0NoYW5uZWxObz4xNSkKKwl9CQkJLy9pZihkYXRhWzVdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVsxNF0gPT0gMikgeworCQkJaWYgKHVpX0NoYW5uZWxObyA8IDAgfHwgdWlfQ2hhbm5lbE5vID4gMykgeworCQkJCXByaW50aygiXG5UaGUgU2VsZWN0aW9uIG9mIHRoZSBjaGFubmVsIGlzIGluIGVycm9yXG4iKTsKKwkJCQlpX2VycisrOworCQkJfQkvLyBpZih1aV9DaGFubmVsTm88MCB8fCB1aV9DaGFubmVsTm8+MykKKwkJfQkJLy9pZihkYXRhWzE0XT09MikKKwkJZWxzZSB7CisJCQlpZiAodWlfQ2hhbm5lbE5vIDwgMCB8fCB1aV9DaGFubmVsTm8gPiA3KSB7CisJCQkJcHJpbnRrKCJcblRoZSBTZWxlY3Rpb24gb2YgdGhlIGNoYW5uZWwgaXMgaW4gZXJyb3JcbiIpOworCQkJCWlfZXJyKys7CisJCQl9CS8vIGlmKHVpX0NoYW5uZWxObzwwIHx8IHVpX0NoYW5uZWxObz43KQorCQl9CQkvL2Vsc2VpZihkYXRhWzE0XT09MikKKwl9CQkJLy9lbHNlaWYoZGF0YVs1XT09MCkKKwlpZiAoZGF0YVsxMl0gPT0gMCB8fCBkYXRhWzEyXSA9PSAxKSB7CisJCXN3aXRjaCAoZGF0YVs1XSkgeworCQljYXNlIDA6CisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDAgJiYgdWlfQ2hhbm5lbE5vIDw9IDMpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD0wOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDA7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj0wICYmIHVpX0NoYW5uZWxObyA8PTMpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDQgJiYgdWlfQ2hhbm5lbE5vIDw9IDcpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD02NDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSA2NDsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTQgJiYgdWlfQ2hhbm5lbE5vIDw9NykKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gOCAmJiB1aV9DaGFubmVsTm8gPD0gMTEpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD0xMjg7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID49OCAmJiB1aV9DaGFubmVsTm8gPD0xMSkKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gMTIgJiYgdWlfQ2hhbm5lbE5vIDw9IDE1KSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9PZmZzZXQ9MTkyOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDE5MjsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTEyICYmIHVpX0NoYW5uZWxObyA8PTE1KQorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChkYXRhWzE0XSA9PSAyKSB7CisJCQkJaWYgKHVpX0NoYW5uZWxObyA9PSAwKSB7CisJCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkJLy9pX09mZnNldD0wOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAwOworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy9pZih1aV9DaGFubmVsTm8gPT0wICkKKwkJCQlpZiAodWlfQ2hhbm5lbE5vID09IDEpIHsKKwkJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCQkvL2lfT2Zmc2V0PTA7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDY0OworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy8gaWYodWlfQ2hhbm5lbE5vID09MSkKKwkJCQlpZiAodWlfQ2hhbm5lbE5vID09IDIpIHsKKwkJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCQkvL2lfT2Zmc2V0PTEyODsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy9pZih1aV9DaGFubmVsTm8gPT0yICkKKwkJCQlpZiAodWlfQ2hhbm5lbE5vID09IDMpIHsKKwkJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCQkvL2lfT2Zmc2V0PTE5MjsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTkyOworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy9pZih1aV9DaGFubmVsTm8gPT0zKQorCisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9DaGFubmVsTm89MDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPSAwOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gMDsKKwkJCQlicmVhazsKKwkJCX0JLy9pZihkYXRhWzE0XT09MikKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gMCAmJiB1aV9DaGFubmVsTm8gPD0gMSkgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lfT2Zmc2V0PTA7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMDsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTAgJiYgdWlfQ2hhbm5lbE5vIDw9MSkKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gMiAmJiB1aV9DaGFubmVsTm8gPD0gMykgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lfQ2hhbm5lbE5vPWlfQ2hhbm5lbE5vLTI7CisJCQkJLy9pX09mZnNldD02NDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPQorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gLQorCQkJCQkyOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDY0OworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vIC0gMjsKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj0yICYmIHVpX0NoYW5uZWxObyA8PTMpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDQgJiYgdWlfQ2hhbm5lbE5vIDw9IDUpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX0NoYW5uZWxObz1pX0NoYW5uZWxOby00OworCQkJCS8vaV9PZmZzZXQ9MTI4OworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyA9CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyAtCisJCQkJCTQ7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vIC0gNDsKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj00ICYmIHVpX0NoYW5uZWxObyA8PTUpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDYgJiYgdWlfQ2hhbm5lbE5vIDw9IDcpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX0NoYW5uZWxObz1pX0NoYW5uZWxOby02OworCQkJCS8vaV9PZmZzZXQ9MTkyOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyA9CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyAtCisJCQkJCTY7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTkyOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vIC0gNjsKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj02ICYmIHVpX0NoYW5uZWxObyA8PTcpCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcbiBUaGlzIHNlbGVjdGlvbiBvZiBwb2xhcml0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlpX2VycisrOworCQl9CQkvL3N3aXRjaChkYXRhWzJdKQorCX0JCQkvL2lmKGRhdGFbMTJdPT0wIHx8IGRhdGFbMTJdPT0xKQorCWVsc2UgeworCQlzd2l0Y2ggKGRhdGFbMTFdKSB7CisJCWNhc2UgMToKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9MDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDA7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9NjQ7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSA2NDsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy9pX09mZnNldD0xMjg7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAxMjg7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9MTkyOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTkyOworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcbkVycm9yIGluIG1vZHVsZSBzZWxlY3Rpb25cbiIpOworCQkJaV9lcnIrKzsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMTFdKQorCX0JCQkvLyBlbHNlaWYoZGF0YVsxMl09PTAgfHwgZGF0YVsxMl09PTEpCisJaWYgKGlfZXJyKSB7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vaWYoaV9TY2FuVHlwZSE9MSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgIT0gMSkgeworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaV9Db3VudD0wOworCQkvL2lfU3VtPTA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0gMDsKKwkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwl9CQkJLy9pZihpX1NjYW5UeXBlIT0xKQorCisJdWxfQ29uZmlnID0KKwkJZGF0YVsxXSB8IChkYXRhWzJdIDw8IDYpIHwgKGRhdGFbNV0gPDwgNykgfCAoZGF0YVszXSA8PCA4KSB8CisJCShkYXRhWzRdIDw8IDkpOworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL291dGwoMCB8IHVpX0NoYW5uZWxObyAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDB4NCk7CisJb3V0bCgwIHwgdWlfQ2hhbm5lbE5vLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAweDQpOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlc2V0IHRoZSBjb25maWd1cmF0aW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9vdXRsKDAgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDApOworCW91dGwoMCwgZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHgwKTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL291dGwodWxfQ29uZmlnICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMHgwKTsKKwlvdXRsKHVsX0NvbmZpZywKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHgwKTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZXNldCB0aGUgY2FsaWJyYXRpb24gYml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vdWxfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJdWxfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vb3V0bCgodWxfVGVtcCAmIDB4RkZGOUZGRkYpICwgZGV2cHJpdi0+aW9iYXNlKy5pX09mZnNldCArIDEyKTsKKwlvdXRsKCh1bF9UZW1wICYgMHhGRkY5RkZGRiksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJaWYgKGRhdGFbOV0gPT0gMSkgeworCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pX0ludGVycnVwdEZsYWc9MTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDE7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJfQkJCS8vIGlmKGRhdGFbOV09PTEpCisJZWxzZSB7CisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJfQkJCS8vZWxzZSAgaWYoZGF0YVs5XT09MSkKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lfSW5pdGlhbGlzZWQ9MTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9IDE7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lmKGlfU2NhblR5cGU9PTEpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlID09IDEpCisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJeworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaV9TdW09aV9TdW0rMTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0KKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1N1bSArIDE7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkJaW5zbi0+dW51c2VkWzBdID0gMDsKKwkJaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQoZGV2LCBzLCBpbnNuLCAmdWlfRHVtbXkpOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwJCQkgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJCWRhdGFbMF0gIDogRGlnaXRhbCBWYWx1ZSBPZiBJbnB1dCAgICAgICAgICAgICB8CisgIHwJCQkJZGF0YVsxXSAgOiBDYWxpYnJhdGlvbiBPZmZzZXQgVmFsdWUgICAgICAgICAgIHwKKyAgfAkJCQlkYXRhWzJdICA6IENhbGlicmF0aW9uIEdhaW4gVmFsdWUKKyAgfAkJCQlkYXRhWzNdICA6IENKQyB2YWx1ZQorICB8CQkJCWRhdGFbNF0gIDogQ0pDIG9mZnNldCB2YWx1ZQorICB8CQkJCWRhdGFbNV0gIDogQ0pDIGdhaW4gdmFsdWUKKyAgfCBCZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisgIHwJCQkJZGF0YVs2XSA6IENKQyBjdXJyZW50IHNvdXJjZSBmcm9tIGVlcHJvbQorICB8CQkJCWRhdGFbN10gOiBDaGFubmVsIGN1cnJlbnQgc291cmNlIGZyb20gZWVwcm9tCisgIHwJCQkJZGF0YVs4XSA6IENoYW5ubGUgZ2FpbiBmYWN0b3IgZnJvbSBlZXByb20KKyAgfCBFbmQgSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9EdW1teVZhbHVlID0gMDsKKwlpbnQgaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb247CisJaW50IGkgPSAwOworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vaWYoaV9Jbml0aWFsaXNlZD09MCkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPT0gMCkKKwkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwl7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYoaV9Jbml0aWFsaXNlZD09MCk7CisKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBpbnNuLT51bnVzZWRbMF0gPSAlaSIsIGluc24tPnVudXNlZFswXSk7CisjZW5kaWYKKworCXN3aXRjaCAoaW5zbi0+dW51c2VkWzBdKSB7CisJY2FzZSAwOgorCisJCWlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoZGV2LCBzLCBpbnNuLAorCQkJJnVpX0R1bW15VmFsdWUpOworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQrMF09dWlfRHVtbXlWYWx1ZTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCWlfQ291bnQgKyAwXSA9IHVpX0R1bW15VmFsdWU7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkJLy9CZWdpbiBKSyAyNS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCWlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUoZGV2LAorCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJaV9Db3VudCArIDZdLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJaV9Db3VudCArIDddLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJaV9Db3VudCArIDhdKTsKKworI2lmZGVmIFBSSU5UX0lORk8KKwkJcHJpbnRrKCJcbiBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQrNl0gPSAlbHUiLCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ICsgNl0pOworCisJCXByaW50aygiXG4gc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50KzddID0gJWx1Iiwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCArIDddKTsKKworCQlwcmludGsoIlxuIHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCs4XSA9ICVsdSIsIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgKyA4XSk7CisjZW5kaWYKKworCQkvL0VuZCBKSyAyNS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkvL2lmKChpX0FERElEQVRBVHlwZT09MikgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkgJiYgKGlfQ0pDQXZhaWxhYmxlPT0xKSkKKwkJaWYgKChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUgPT0gMikKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKQorCQkJJiYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0F2YWlsYWJsZSA9PSAxKSkKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCXsKKwkJCWlfQVBDSTMyMDBfUmVhZENKQ1ZhbHVlKGRldiwgJnVpX0R1bW15VmFsdWUpOworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDNdPXVpX0R1bW15VmFsdWU7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDNdID0gdWlfRHVtbXlWYWx1ZTsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCX0JCS8vaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSkKKwkJZWxzZSB7CisJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgM109MDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCW1pbm9yXS5pX0NvdW50ICsgM10gPSAwOworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJfQkJLy9lbHNlaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSAmJiAoaV9DSkNBdmFpbGFibGU9PTEpKQorCisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pZiAoKCBpX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKQorCQkJJiYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpKQorCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJeworCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25PZmZzZXRWYWx1ZShkZXYsCisJCQkJJnVpX0R1bW15VmFsdWUpOworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDFdPXVpX0R1bW15VmFsdWU7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDFdID0gdWlfRHVtbXlWYWx1ZTsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShkZXYsCisJCQkJJnVpX0R1bW15VmFsdWUpOworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDJdPXVpX0R1bW15VmFsdWU7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDJdID0gdWlfRHVtbXlWYWx1ZTsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCX0JCS8vaWYgKCggaV9BdXRvQ2FsaWJyYXRpb24gPT0gRkFMU0UpICYmIChpX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpKQorCisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pZigoaV9BRERJREFUQVR5cGU9PTIpICYmIChpX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpJiYgKGlfQ0pDQXZhaWxhYmxlPT0xKSkKKwkJaWYgKChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUgPT0gMikKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKQorCQkJJiYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0F2YWlsYWJsZSA9PSAxKSkKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCXsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypUZXN0IGlmIHRoZSBDYWxpYnJhdGlvbiBjaGFubmVsIG11c3QgYmUgcmVhZCBmb3IgdGhlIENKQyAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qVGVzdCBpZiB0aGUgcG9sYXJpdHkgaXMgdGhlIHNhbWUgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy9pZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDUG9sYXJpdHkgIT0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVBvbGFyaXR5KQorCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl7CisJCQkJaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPSAxOworCQkJfQkvL2lmKGlfQ0pDUG9sYXJpdHkhPWlfQURESURBVEFQb2xhcml0eSkKKwkJCWVsc2UgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lmKGlfQ0pDR2Fpbj09aV9BRERJREFUQUdhaW4pCisJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0dhaW4gPT0KKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFHYWluKQorCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCXsKKwkJCQkJaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPSAwOworCQkJCX0JLy9pZihpX0NKQ0dhaW49PWlfQURESURBVEFHYWluKQorCQkJCWVsc2UgeworCQkJCQlpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbiA9IDE7CisJCQkJfQkvL2Vsc2VpZihpX0NKQ0dhaW49PWlfQURESURBVEFHYWluKQorCQkJfQkvL2Vsc2VpZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQlpZiAoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPT0gMSkgeworCQkJCWlfQVBDSTMyMDBfUmVhZENKQ0NhbE9mZnNldChkZXYsCisJCQkJCSZ1aV9EdW1teVZhbHVlKTsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCs0XT11aV9EdW1teVZhbHVlOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcworCQkJCQlbZGV2LT5taW5vcl0uaV9Db3VudCArIDRdID0KKwkJCQkJdWlfRHVtbXlWYWx1ZTsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJCQkJaV9BUENJMzIwMF9SZWFkQ0pDQ2FsR2FpbihkZXYsICZ1aV9EdW1teVZhbHVlKTsKKworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50KzVdPXVpX0R1bW15VmFsdWU7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zCisJCQkJCVtkZXYtPm1pbm9yXS5pX0NvdW50ICsgNV0gPQorCQkJCQl1aV9EdW1teVZhbHVlOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl9CS8vaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCQllbHNlIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCs0XT0wOworCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQrNV09MDsKKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcworCQkJCQlbZGV2LT5taW5vcl0uaV9Db3VudCArIDRdID0gMDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MKKwkJCQkJW2Rldi0+bWlub3JdLmlfQ291bnQgKyA1XSA9IDA7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9lbHNlaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCX0JCS8vaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSkKKworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaWYoaV9TY2FuVHlwZSE9MSkKKwkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlICE9IDEpIHsKKwkJCS8vaV9Db3VudD0wOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCQl9CQkvL2lmKGlfU2NhblR5cGUhPTEpCisJCWVsc2UgeworCQkJLy9pX0NvdW50PWlfQ291bnQgKzY7CisJCQkvL0JlZ2luIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCS8vc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50PXNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArNjsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCArIDk7CisJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCX0JCS8vZWxzZSBpZihpX1NjYW5UeXBlIT0xKQorCisJCS8vaWYoKGlfU2NhblR5cGU9PTEpICYmKGlfSW50ZXJydXB0RmxhZz09MSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPT0gMSkKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IDEpKSB7CisJCQkvL2lfQ291bnQ9aV9Db3VudC02OworCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkvL3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudD1zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQtNjsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCAtIDk7CisJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCX0KKwkJLy9pZihpX1NjYW5UeXBlPT0wKQorCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPT0gMCkgeworCQkJLyoKKwkJCSAgIGRhdGFbMF09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVswXTsKKwkJCSAgIGRhdGFbMV09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsxXTsKKwkJCSAgIGRhdGFbMl09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsyXTsKKwkJCSAgIGRhdGFbM109IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVszXTsKKwkJCSAgIGRhdGFbNF09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs0XTsKKwkJCSAgIGRhdGFbNV09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs1XTsKKwkJCSAqLworI2lmZGVmIFBSSU5UX0lORk8KKwkJCXByaW50aygiXG4gZGF0YVswXT0gc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMF07Iik7CisjZW5kaWYKKwkJCWRhdGFbMF0gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMF07CisJCQlkYXRhWzFdID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzFdOworCQkJZGF0YVsyXSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsyXTsKKwkJCWRhdGFbM10gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbM107CisJCQlkYXRhWzRdID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzRdOworCQkJZGF0YVs1XSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs1XTsKKworCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkvL3ByaW50aygiXG4gMCAtIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUgZGF0YSBbNl0gPSAlbHUsIGRhdGEgWzddID0gJWx1LCBkYXRhIFs4XSA9ICVsdSIsIGRhdGEgWzZdLCBkYXRhIFs3XSwgZGF0YSBbOF0pOworCQkJaV9BUENJMzIwMF9HZXRDaGFubmVsQ2FsaWJyYXRpb25WYWx1ZShkZXYsCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtLAorCQkJCSZkYXRhWzZdLCAmZGF0YVs3XSwgJmRhdGFbOF0pOworCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCQkvL2RhdGFbaV09dWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2ldOworCQkJZGF0YVtpXSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpXTsKKwkJfQorCisJCS8vaV9Db3VudD0wOworCQkvL2lfU3VtPTA7CisJCS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPT0gMSkgeworCQkJLy9pX0luaXRpYWxpc2VkPTA7CisJCQkvL2lfSW50ZXJydXB0RmxhZz0wOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPSAwOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgcGFyYW1ldGVycyBwYXNzZWQgYXJlIGluIGVycm9yXG4iKTsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goaW5zbi0+dW51c2VkWzBdKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAkJCSAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWwgICAgOiBDaGFubmVsIE5vIHRvIHJlYWQgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBEaWdpdGFsIFZhbHVlIHJlYWQgICAgICAgICAgICAgICAgICAgfAorICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfRU9DID0gMDsKKwlVSU5UIHVpX0NoYW5uZWxObyA9IDA7CisJVUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vdWlfQ2hhbm5lbE5vPWlfQ2hhbm5lbE5vOworCXVpX0NoYW5uZWxObyA9IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObzsKKworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQmVnaW4gSksgMjAuMTAuMjAwNDogQmFkIGNoYW5uZWwgdmFsdWUgaXMgdXNlZCB3aGVuIHVzaW5nIGRpZmZlcmVudGlhbCBtb2RlCisJLy9vdXRsKDAgfCB1aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDB4NCk7CisJLy9vdXRsKDAgfCBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtICwgZGV2cHJpdi0+aW9iYXNlK3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAweDQpOworCW91dGwoMCB8IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObywKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VuZCBKSyAyMC4xMC4yMDA0OiBCYWQgY2hhbm5lbCB2YWx1ZSBpcyB1c2VkIHdoZW4gdXNpbmcgZGlmZmVyZW50aWFsIG1vZGUKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBzdGFydCBlbmQgc3RvcCBpbmRleCB0byB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBhbmQgc2V0IHRoZSBzdGFydCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9DaGFubmVsTm8gfCAodWlfQ2hhbm5lbE5vIDw8IDgpIHwgMHg4MDAwMDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMTAwMDAwOworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKwkJZG8geworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKlJlYWQgdGhlIEVPQyBTdGF0dXMgYml0ICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBpbnB1dCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvL2RhdGFbMF0gPSBpbmwgKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCX0JCQkvLyBpZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgY2FsaWJyYXRpb24gb2Zmc2V0ICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWx8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDYWxpYnJhdGlvbiBvZmZzZXQgVmFsdWUgICB8CisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25PZmZzZXRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgVUlOVCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wID0gMCwgdWlfRU9DID0gMDsKKwlVSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNoYW5uZWwgdG8gY29uZmlndXJlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CZWdpbiBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCS8vb3V0bCgwIHwgdWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDQpOworCS8vb3V0bCgwIHwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VuZCBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgT2Zmc2V0IENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoKHVpX1RlbXAgfCAweDAwMDIwMDAwKSwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCW91dGwoKHVpX1RlbXAgfCAweDAwMDIwMDAwKSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkluaXRpYWxpc2UgdWlfQ29tbWFuZFJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAxMDAwMDA7CisKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAwODAwMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb21tYW5kIHJlZ2l0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKworCQlkbyB7CisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgRU9DIGZsYWcgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkvL3VpX0VPQyA9IGlubCAoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgY2FsaWJyYXRpb24gT2Zmc2V0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhWzBdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsgMjgpOworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBjYWxpYnJhdGlvbiBnYWluICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgICBkYXRhWzBdICA6IENhbGlicmF0aW9uIGdhaW4gVmFsdWUgT2YgSW5wdXQgICAgIHwKKyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgVUlOVCAqIGRhdGEpCit7CisJVUlOVCB1aV9FT0MgPSAwOworCUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNoYW5uZWwgdG8gY29uZmlndXJlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CZWdpbiBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCS8vb3V0bCgwIHwgdWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDQpOworCS8vb3V0bCgwIHwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VuZCBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSBjYWxpYnJhdGlvbiBnYWluICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgR2FpbiBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgweDAwMDQwMDAwICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCW91dGwoMHgwMDA0MDAwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qSW5pdGlhbGlzZSB1aV9Db21tYW5kUmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkgeworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypFbmFibGUgdGhlIGludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXRlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKworCQlkbyB7CisKKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBFT0MgZmxhZyAqLworCSAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCS8vdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDIwKSAmIDE7CisJCQl1aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyMCkgJiAxOworCisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBjYWxpYnJhdGlvbiBHYWluICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8vZGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENKQ1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgQ0pDICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDSkMgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0VPQyA9IDA7CisJSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlNldCB0aGUgY29udmVydGluZyB0aW1lIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIENKQyBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoIDB4MDAwMDA0MDAgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwlvdXRsKDB4MDAwMDA0MDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkluaXRpYWxpc2UgZHdfQ29tbWFuZFJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKkVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKwl9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJLypTdGFydCB0aGUgY29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAwODAwMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb21tYW5kIHJlZ2l0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisJCWRvIHsKKworCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKlJlYWQgdGhlIEVPQyBmbGFnICovCisJICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgQ0pDICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhWzBdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQ0pDQ2FsT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBDSkMgY2FsaWJyYXRpb24gb2Zmc2V0ICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgICBkYXRhWzBdICA6IENKQyBjYWxpYnJhdGlvbiBvZmZzZXQgVmFsdWUKKyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNDYWxPZmZzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9FT0MgPSAwOworCUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlYWQgY2FsaWJyYXRpb24gb2Zmc2V0IHZhbHVlIGZvciB0aGUgQ0pDICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgQ0pDIENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoMHgwMDAwMDQwMCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCW91dGwoMHgwMDAwMDQwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIE9mZnNldCBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKDB4MDAwMjAwMDAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKTsKKwlvdXRsKDB4MDAwMjAwMDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypJbml0aWFsaXNlIHVpX0NvbW1hbmRSZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKkVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKworCX0KKworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAwODAwMDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29tbWFuZCByZWdpdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKHVpX0NvbW1hbmRSZWdpc3RlcixkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkgeworCQlkbyB7CisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgRU9DIGZsYWcgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlJlYWQgdGhlIGRpZ2l0YWwgdmFsdWUgb2YgdGhlIGNhbGlicmF0aW9uIE9mZnNldCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL2RhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjgpOworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQ0pDR2FpblZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBDSkMgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgICBkYXRhWzBdICA6IENKQyBjYWxpYnJhdGlvbiBnYWluIHZhbHVlCisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzIwMF9SZWFkQ0pDQ2FsR2FpbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0VPQyA9IDA7CisJSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qQ29uZmlndXJlIHRoZSBDSkMgQ29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgweDAwMDAwNDAwLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCW91dGwoMHgwMDAwMDQwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qQ29uZmlndXJlIHRoZSBHYWluIENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKDB4MDAwNDAwMDAsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCW91dGwoMHgwMDA0MDAwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qSW5pdGlhbGlzZSBkd19Db21tYW5kUmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgdGhlIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMTAwMDAwOworCX0KKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJLypTdGFydCB0aGUgY29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXRlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIgLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisJCWRvIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBFT0MgZmxhZyAqLworCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvL3VpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyMCkgJiAxOworCQkJdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjApICYgMTsKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBjYWxpYnJhdGlvbiBHYWluICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL2RhdGFbMF0gPSBpbmwgKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfSW5zbkJpdHNfQW5hbG9nSW5wdXRfVGVzdCAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFRlc3RzIHRoZSBTZWxlY3RlZCBBbmxvZyBJbnB1dCBDaGFubmVsICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorICB8CisgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICA6IDAgVGVzdEFuYWxvZ0lucHV0U2hvcnRDaXJjdWl0CisgIHwJCQkJCQkJCQkgICAgIDEgVGVzdEFuYWxvZ0lucHV0Q29ubmVjdGlvbgkJCQkJCQkgCQkJCQkJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICB8CisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJICAgICAgICBkYXRhWzBdICAgICAgICAgICAgOiBEaWdpdGFsIHZhbHVlIG9idGFpbmVkICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIDogY2FsaWJyYXRpb24gb2Zmc2V0ICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICA6IGNhbGlicmF0aW9uIGdhaW4gICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0NvbmZpZ3VyYXRpb24gPSAwOworCUlOVCBpX1RlbXA7CQkvLyxpX1RpbWVVbml0OworCS8vaWYoaV9Jbml0aWFsaXNlZD09MCkKKworCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9PSAwKSB7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYoaV9Jbml0aWFsaXNlZD09MCk7CisJaWYgKGRhdGFbMF0gIT0gMCAmJiBkYXRhWzBdICE9IDEpIHsKKwkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiBmdW5jdGlvbmFsaXR5XG4iKTsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9pZihkYXRhWzBdIT0wICYmIGRhdGFbMF0hPTEpCisKKwlpZiAoZGF0YVswXSA9PSAxKQkvL1BlcmZvcm0gU2hvcnQgQ2lyY3VpdCBURVNUCisJeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlNldCB0aGUgc2hvcnQtY2ljdWl0IGJpdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfT2Zmc2V0ICsgMTIpID4+IDE5KSAmIDEpICE9CisJCQkxKSA7CisJCS8vb3V0bCgoMHgwMDAwMTAwMCB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCW91dGwoKDB4MDAwMDEwMDAgfCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8pLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCTQpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qU2V0IHRoZSB0aW1lIHVuaXQgdG8gbnMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBpX1RpbWVVbml0PSBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworCQkgICBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0PSAxOyAqLworCQkvL2lfVGVtcD0gaV9JbnRlcnJ1cHRGbGFnIDsKKwkJaV9UZW1wID0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZzsKKwkJLy9pX0ludGVycnVwdEZsYWcgPSBBRERJREFUQV9ESVNBQkxFOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gQURESURBVEFfRElTQUJMRTsKKwkJaV9BUENJMzIwMF9SZWFkMUFuYWxvZ0lucHV0Q2hhbm5lbChkZXYsIHMsIGluc24sIGRhdGEpOworCQkvL2lmKGlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKQorCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKSB7CisJCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkJCS8vb3V0bCgoMHgwMDAwMTAwMCB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCQlvdXRsKCgweDAwMDAxMDAwIHwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQlpX0NoYW5uZWxObyksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0KTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoZGV2LCBkYXRhKTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKGRldiwgZGF0YSk7CisJCX0KKwl9IGVsc2UgeworCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfT2Zmc2V0ICsgMTIpID4+IDE5KSAmIDEpICE9CisJCQkxKSA7CisJCS8vb3V0bCgoMHgwMDAwMDgwMHxpX0NoYW5uZWxObykgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwkJb3V0bCgoMHgwMDAwMDgwMCB8IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJNCk7CisJCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAwKTsKKwkJdWlfQ29uZmlndXJhdGlvbiA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDApOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qU2V0IHRoZSB0aW1lIHVuaXQgdG8gbnMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBpX1RpbWVVbml0PSBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworCQkgICBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0PSAxOyAqLworCQkvL2lfVGVtcD0gaV9JbnRlcnJ1cHRGbGFnIDsKKwkJaV9UZW1wID0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZzsKKwkJLy9pX0ludGVycnVwdEZsYWcgPSBBRERJREFUQV9ESVNBQkxFOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gQURESURBVEFfRElTQUJMRTsKKwkJaV9BUENJMzIwMF9SZWFkMUFuYWxvZ0lucHV0Q2hhbm5lbChkZXYsIHMsIGluc24sIGRhdGEpOworCQkvL2lmKGlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKQorCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKSB7CisJCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJCQkvL291dGwoKDB4MDAwMDA4MDB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCQlvdXRsKCgweDAwMDAwODAwIHwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQlpX0NoYW5uZWxObyksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0KTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoZGV2LCBkYXRhKTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKGRldiwgZGF0YSk7CisJCX0KKwl9CisJLy9pX0ludGVycnVwdEZsYWc9aV9UZW1wIDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gaV9UZW1wOworCS8vcHJpbnRrKCJcbmlfSW50ZXJydXB0RmxhZz0lZFxuIixpX0ludGVycnVwdEZsYWcpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX0luc25Xcml0ZVJlbGVhc2VBbmFsb2dJbnB1dCAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiAgUmVzZXRzIHRoZSBjaGFubmVscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgIDogSW5zbiBTdHJ1Y3R1cmUgUG9pbnRlciAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMzIwMF9JbnNuV3JpdGVSZWxlYXNlQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMjAwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldnwKKyAgfAkJCSxzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQkJCSAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFRlc3QgdmFsaWRpdHkgZm9yIGEgY29tbWFuZCBmb3IgY3ljbGljIGFubG9nIGlucHV0ICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIAkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6MCAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOwkJLy8gZGl2aXNvcjEsZGl2aXNvcjI7CisJVUlOVCB1aV9Db252ZXJ0VGltZSA9IDA7CisJVUlOVCB1aV9Db252ZXJ0VGltZUJhc2UgPSAwOworCVVJTlQgdWlfRGVsYXlUaW1lID0gMDsKKwlVSU5UIHVpX0RlbGF5VGltZUJhc2UgPSAwOworCUlOVCBpX1RyaWdnZXJtb2RlID0gMDsKKwlJTlQgaV9UcmlnZ2VyRWRnZSA9IDA7CisJSU5UIGlfTmJyT2ZDaGFubmVsID0gMDsKKwlJTlQgaV9DcHQgPSAwOworCWRvdWJsZSBkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPSAwLjA7CisJZG91YmxlIGRfU0NBTlRpbWVOZXdVbml0ID0gMC4wOworCS8vIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCS8vaWYoaV9JbnRlcnJ1cHRGbGFnPT0wKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IDApIHsKKwkJZXJyKys7CisJCS8vICAgICAgICAgIHByaW50aygiXG5UaGUgaW50ZXJydXB0IHNob3VsZCBiZSBlbmFibGVkXG4iKTsKKwl9CisJaWYgKGVycikgeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAxOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCWlfVHJpZ2dlckVkZ2UgPSBjbWQtPnN0YXJ0X2FyZyAmIDB4RkZGRjsKKwkJaV9UcmlnZ2VybW9kZSA9IGNtZC0+c3RhcnRfYXJnID4+IDE2OworCQlpZiAoaV9UcmlnZ2VyRWRnZSA8IDEgfHwgaV9UcmlnZ2VyRWRnZSA+IDMpIHsKKwkJCWVycisrOworCQkJcHJpbnRrKCJcblRoZSB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJfQorCQlpZiAoaV9UcmlnZ2VybW9kZSAhPSAyKSB7CisJCQllcnIrKzsKKwkJCXByaW50aygiXG5UaGUgdHJpZ2dlciBtb2RlIHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkgeworCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpCisJCWVycisrOworCisJaWYgKGVycikgeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAyOworCX0KKwkvL2lfRmlyc3RDaGFubmVsPWNtZC0+Y2hhbmxpc3RbMF07CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsID0gY21kLT5jaGFubGlzdFswXTsKKwkvL2lfTGFzdENoYW5uZWw9Y21kLT5jaGFubGlzdFsxXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9MYXN0Q2hhbm5lbCA9IGNtZC0+Y2hhbmxpc3RbMV07CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVpX0NvbnZlcnRUaW1lID0gY21kLT5jb252ZXJ0X2FyZyAmIDB4RkZGRjsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gY21kLT5jb252ZXJ0X2FyZyA+PiAxNjsKKwkJaWYgKHVpX0NvbnZlcnRUaW1lICE9IDIwICYmIHVpX0NvbnZlcnRUaW1lICE9IDQwCisJCQkmJiB1aV9Db252ZXJ0VGltZSAhPSA4MCAmJiB1aV9Db252ZXJ0VGltZSAhPSAxNjApCisJCXsKKwkJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGNvbnZlcnNpb24gdGltZSByZWxvYWQgdmFsdWUgaXMgaW4gZXJyb3JcbiIpOworCQkJZXJyKys7CisJCX0JCS8vIGlmICh1aV9Db252ZXJ0VGltZSE9MjAgJiYgdWlfQ29udmVydFRpbWUhPTQwICYmIHVpX0NvbnZlcnRUaW1lIT04MCAmJiB1aV9Db252ZXJ0VGltZSE9MTYwICkKKwkJaWYgKHVpX0NvbnZlcnRUaW1lQmFzZSAhPSAyKSB7CisJCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBjb252ZXJzaW9uIHRpbWUgdW5pdCAgaXMgaW4gZXJyb3JcbiIpOworCQkJZXJyKys7CisJCX0JCS8vaWYodWlfQ29udmVydFRpbWVCYXNlIT0yKQorCX0gZWxzZSB7CisJCXVpX0NvbnZlcnRUaW1lID0gMDsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gMDsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJdWlfRGVsYXlUaW1lID0gMDsKKwkJdWlfRGVsYXlUaW1lQmFzZSA9IDA7CisJfQkJCS8vaWYoY21kLT5zY2FuX2JlZ2luX3NyYz09VFJJR19GT0xMT1cpCisJZWxzZSB7CisJCXVpX0RlbGF5VGltZSA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiAweEZGRkY7CisJCXVpX0RlbGF5VGltZUJhc2UgPSBjbWQtPnNjYW5fYmVnaW5fYXJnID4+IDE2OworCQlpZiAodWlfRGVsYXlUaW1lQmFzZSAhPSAyICYmIHVpX0RlbGF5VGltZUJhc2UgIT0gMykgeworCQkJZXJyKys7CisJCQlwcmludGsoIlxuVGhlIERlbGF5IHRpbWUgYmFzZSBzZWxlY3Rpb24gaXMgaW4gZXJyb3JcbiIpOworCQl9CisJCWlmICh1aV9EZWxheVRpbWUgPCAxICYmIHVpX0RlbGF5VGltZSA+IDEwMjMpIHsKKwkJCWVycisrOworCQkJcHJpbnRrKCJcblRoZSBEZWxheSB0aW1lIHZhbHVlIGlzIGluIGVycm9yXG4iKTsKKwkJfQorCQlpZiAoZXJyKSB7CisJCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlmcHVfYmVnaW4oKTsKKwkJZF9TQ0FOVGltZU5ld1VuaXQgPSAoZG91YmxlKXVpX0RlbGF5VGltZTsKKwkJLy9pX05ick9mQ2hhbm5lbD0gaV9MYXN0Q2hhbm5lbC1pX0ZpcnN0Q2hhbm5lbCArIDQ7CisJCWlfTmJyT2ZDaGFubmVsID0KKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsIC0KKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCArIDQ7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypjYWxjdWxhdGUgdGhlIHRvdGFsIGNvbnZlcnNpb24gdGltZSBmb3IgYWxsIHRoZSBjaGFubmVscyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyA9CisJCQkoZG91YmxlKSgoZG91YmxlKXVpX0NvbnZlcnRUaW1lIC8KKwkJCShkb3VibGUpaV9OYnJPZkNoYW5uZWwpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypDb252ZXJ0IHRoZSBmcmVxdWVuY2UgaW4gdGltZSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyA9CisJCQkoZG91YmxlKTEuMCAvIGRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVsczsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gMzsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypUZXN0IGlmIHRoZSB0aW1lIHVuaXQgaXMgdGhlIHNhbWUgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAodWlfRGVsYXlUaW1lQmFzZSA8PSB1aV9Db252ZXJ0VGltZUJhc2UpIHsKKworCQkJZm9yIChpX0NwdCA9IDA7CisJCQkJaV9DcHQgPCAodWlfQ29udmVydFRpbWVCYXNlIC0gdWlfRGVsYXlUaW1lQmFzZSk7CisJCQkJaV9DcHQrKykgeworCisJCQkJZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzID0KKwkJCQkJZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzICogMTAwMDsKKwkJCQlkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPQorCQkJCQlkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChpX0NwdCA9IDA7CisJCQkJaV9DcHQgPCAodWlfRGVsYXlUaW1lQmFzZSAtIHVpX0NvbnZlcnRUaW1lQmFzZSk7CisJCQkJaV9DcHQrKykgeworCQkJCWRfU0NBTlRpbWVOZXdVbml0ID0gZF9TQ0FOVGltZU5ld1VuaXQgKiAxMDAwOworCisJCQl9CisJCX0KKworCQlpZiAoZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzID49IGRfU0NBTlRpbWVOZXdVbml0KSB7CisKKwkJCXByaW50aygiXG5TQ0FOIERlbGF5IHZhbHVlIGNhbm5vdCBiZSB1c2VkXG4iKTsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKlNDQU4gRGVsYXkgdmFsdWUgY2Fubm90IGJlIHVzZWQgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQllcnIrKzsKKwkJfQorCQlmcHVfZW5kKCk7CisJfQkJCS8vZWxzZSBpZihjbWQtPnNjYW5fYmVnaW5fc3JjPT1UUklHX0ZPTExPVykKKworCWlmIChlcnIpIHsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gNDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKKyAgfCAJCQkJCQkJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogU3RvcCB0aGUgIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOjAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMyMDBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJVUlOVCB1aV9Db25maWd1cmF0aW9uID0gMDsKKwkvL2lfSW50ZXJydXB0RmxhZz0wOworCS8vaV9Jbml0aWFsaXNlZD0wOworCS8vaV9Db3VudD0wOworCS8vaV9TdW09MDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9IDA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1N1bSA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSByZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKi8KKwkvL3VpX0NvbmZpZ3VyYXRpb24gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJdWlfQ29uZmlndXJhdGlvbiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVzZXQgdGhlIFNUQVJUIGFuZCBJUlEgYml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoKHVpX0NvbmZpZ3VyYXRpb24gJiAweEZGRTdGRkZGKSxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkU3RkZGRiksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCXJldHVybiAwOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiBuYW1lICAgICA6IGludCBpX0FQQ0kzMjAwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgfAorICB8CQkJCQkJCQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IERvZXMgYXN5bmNocm9ub3VzIGFjcXVpc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBtb2RlIDEgb3IgMi4JCQkJCQkgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMyMDBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCVVJTlQgdWlfQ29uZmlndXJhdGlvbiA9IDA7CisJLy9JTlQgIGlfQ3VycmVudFNvdXJjZSA9IDA7CisJVUlOVCB1aV9UcmlnZ2VyID0gMDsKKwlVSU5UIHVpX1RyaWdnZXJFZGdlID0gMDsKKwlVSU5UIHVpX1RyaWdnZXJtb2RlID0gMDsKKwlVSU5UIHVpX1NjYW5Nb2RlID0gMDsKKwlVSU5UIHVpX0NvbnZlcnRUaW1lID0gMDsKKwlVSU5UIHVpX0NvbnZlcnRUaW1lQmFzZSA9IDA7CisJVUlOVCB1aV9EZWxheVRpbWUgPSAwOworCVVJTlQgdWlfRGVsYXlUaW1lQmFzZSA9IDA7CisJVUlOVCB1aV9EZWxheU1vZGUgPSAwOworCS8vaV9GaXJzdENoYW5uZWw9Y21kLT5jaGFubGlzdFswXTsKKwkvL2lfTGFzdENoYW5uZWw9Y21kLT5jaGFubGlzdFsxXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9GaXJzdENoYW5uZWwgPSBjbWQtPmNoYW5saXN0WzBdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsID0gY21kLT5jaGFubGlzdFsxXTsKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJdWlfVHJpZ2dlciA9IDE7CisJCXVpX1RyaWdnZXJFZGdlID0gY21kLT5zdGFydF9hcmcgJiAweEZGRkY7CisJCXVpX1RyaWdnZXJtb2RlID0gY21kLT5zdGFydF9hcmcgPj4gMTY7CisJfQkJCS8vaWYoY21kLT5zdGFydF9zcmM9PVRSSUdfRVhUKQorCWVsc2UgeworCQl1aV9UcmlnZ2VyID0gMDsKKwl9CQkJLy9lbHNlaWYoY21kLT5zdGFydF9zcmM9PVRSSUdfRVhUKQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQl1aV9TY2FuTW9kZSA9IDA7CisJfQkJCS8vIGlmIChjbWQtPnN0b3Bfc3JjPT1UUklHX0NPVU5UKQorCWVsc2UgeworCQl1aV9TY2FuTW9kZSA9IDI7CisJfQkJCS8vZWxzZSBpZiAoY21kLT5zdG9wX3NyYz09VFJJR19DT1VOVCkKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CisJCXVpX0RlbGF5VGltZSA9IDA7CisJCXVpX0RlbGF5VGltZUJhc2UgPSAwOworCQl1aV9EZWxheU1vZGUgPSAwOworCX0JCQkvL2lmKGNtZC0+c2Nhbl9iZWdpbl9zcmM9PVRSSUdfRk9MTE9XKQorCWVsc2UgeworCQl1aV9EZWxheVRpbWUgPSBjbWQtPnNjYW5fYmVnaW5fYXJnICYgMHhGRkZGOworCQl1aV9EZWxheVRpbWVCYXNlID0gY21kLT5zY2FuX2JlZ2luX2FyZyA+PiAxNjsKKwkJdWlfRGVsYXlNb2RlID0gMTsKKwl9CQkJLy9lbHNlIGlmKGNtZC0+c2Nhbl9iZWdpbl9zcmM9PVRSSUdfRk9MTE9XKQorCS8vICAgICAgICBwcmludGsoIlxudWlfRGVsYXlUaW1lPSV1XG4iLHVpX0RlbGF5VGltZSk7CisJLy8gICAgICAgIHByaW50aygiXG51aV9EZWxheVRpbWVCYXNlPSV1XG4iLHVpX0RlbGF5VGltZUJhc2UpOworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdWlfQ29udmVydFRpbWUgPSBjbWQtPmNvbnZlcnRfYXJnICYgMHhGRkZGOworCQl1aV9Db252ZXJ0VGltZUJhc2UgPSBjbWQtPmNvbnZlcnRfYXJnID4+IDE2OworCX0gZWxzZSB7CisJCXVpX0NvbnZlcnRUaW1lID0gMDsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gMDsKKwl9CisKKwkvLyBpZihpX0FERElEQVRBVHlwZSA9PTEgfHwgKChpX0FERElEQVRBVHlwZT09MikpKQorCS8vICAgeworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSBvbGQgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBzb3VyY2UgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJdWlfQ29uZmlndXJhdGlvbiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IHNvdXJjZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkMwMDAwMCApLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKzEyKTsKKwlvdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkMwMDAwMCksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKwkvLyB9CisJdWlfQ29uZmlndXJhdGlvbiA9IDA7CisJLy8gICAgIHByaW50aygiXG5maXJzdGNoYW5uZWw9JXVcbiIsaV9GaXJzdENoYW5uZWwpOworCS8vICAgICBwcmludGsoIlxubGFzdGNoYW5uZWw9JXVcbiIsaV9MYXN0Q2hhbm5lbCk7CisJLy8gICAgIHByaW50aygiXG51aV9UcmlnZ2VyPSV1XG4iLHVpX1RyaWdnZXIpOworCS8vICAgICBwcmludGsoIlxudWlfVHJpZ2dlckVkZ2U9JXVcbiIsdWlfVHJpZ2dlckVkZ2UpOworCS8vICAgICBwcmludGsoIlxudWlfVHJpZ2dlcm1vZGU9JXVcbiIsdWlfVHJpZ2dlcm1vZGUpOworCS8vICAgICAgcHJpbnRrKCJcbnVpX0RlbGF5TW9kZT0ldVxuIix1aV9EZWxheU1vZGUpOworCS8vICAgICBwcmludGsoIlxudWlfU2Nhbk1vZGU9JXVcbiIsdWlfU2Nhbk1vZGUpOworCisJLy91aV9Db25maWd1cmF0aW9uID0gaV9GaXJzdENoYW5uZWwgfChpX0xhc3RDaGFubmVsIDw8IDgpfCAweDAwMTAwMDAwIHwKKwl1aV9Db25maWd1cmF0aW9uID0KKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsIHwgKHNfQm9hcmRJbmZvc1tkZXYtPgorCQkJbWlub3JdLgorCQlpX0xhc3RDaGFubmVsIDw8IDgpIHwgMHgwMDEwMDAwMCB8ICh1aV9UcmlnZ2VyIDw8IDI0KSB8CisJCSh1aV9UcmlnZ2VyRWRnZSA8PCAyNSkgfCAodWlfVHJpZ2dlcm1vZGUgPDwgMjcpIHwgKHVpX0RlbGF5TW9kZQorCQk8PCAxOCkgfCAodWlfU2Nhbk1vZGUgPDwgMTYpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIENvbmZpZ3VyYXRpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCB1aV9Db25maWd1cmF0aW9uLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDgpOworCW91dGwodWlfQ29uZmlndXJhdGlvbiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg4KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIERlbGF5IFZhbHVlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfRGVsYXlUaW1lLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQwKTsKKwlvdXRsKHVpX0RlbGF5VGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNDApOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIERlbGF5IHRpbWUgYmFzZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9EZWxheVRpbWVCYXNlLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQ0KTsKKwlvdXRsKHVpX0RlbGF5VGltZUJhc2UsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQ0KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb252ZXJzaW9uIHRpbWUgdmFsdWUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29udmVydFRpbWUsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwodWlfQ29udmVydFRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29udmVyc2lvbiB0aW1lIGJhc2UgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db252ZXJ0VGltZUJhc2UsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzYpOworCW91dGwodWlfQ29udmVydFRpbWVCYXNlLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgcmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLy91aV9Db25maWd1cmF0aW9uID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCXVpX0NvbmZpZ3VyYXRpb24gPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisgIC8qKioqKioqKioqKioqKioqKiovCisJLypTZXQgdGhlIFNDQU4gYml0ICovCisgIC8qKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoKCh1aV9Db25maWd1cmF0aW9uICYgMHgxRTBGRikgfCAweDAwMDAyMDAwKSxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwlvdXRsKCgodWlfQ29uZmlndXJhdGlvbiAmIDB4MUUwRkYpIHwgMHgwMDAwMjAwMCksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlYWQgdGhlIHJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqLworCXVpX0NvbmZpZ3VyYXRpb24gPSAwOworCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwl1aV9Db25maWd1cmF0aW9uID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCisgIC8qKioqKioqKioqKioqKioqKioqLworCS8qU2V0IHRoZSBTVEFSVCBiaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCh1aV9Db25maWd1cmF0aW9uIHwgMHgwMDA4MDAwMCksZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCgodWlfQ29uZmlndXJhdGlvbiB8IDB4MDAwODAwMDApLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTMyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKKyAgfAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOlJlc2V0cyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjYXJkICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUlOVCBpX1RlbXA7CisJRFdPUkQgZHdfRHVtbXk7CisJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkvL2lfSW5pdGlhbGlzZWQ9PTA7CisJLy9pX0NvdW50PTA7CisJLy9pX1N1bT0wOworCisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5iX1N0cnVjdEluaXRpYWxpemVkID0gMDsKKworCW91dGwoMHg4MzgzODM4MywgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHg2MCk7CisKKwkvLyBFbmFibGUgdGhlIGludGVycnVwdCBmb3IgdGhlIGNvbnRyb2xlcgorCWR3X0R1bW15ID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCW91dGwoZHdfRHVtbXkgfCAweDIwMDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCW91dGwoMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbik7CS8vUmVzZXRzIHRoZSBvdXRwdXQKKyAgLyoqKioqKioqKioqKioqKi8KKwkvKkVtcHR5IHRoZSBidWZmZXIgKi8KKyAgLyoqKioqKioqKioqKioqLworCWZvciAoaV9UZW1wID0gMDsgaV9UZW1wIDw9IDk1OyBpX1RlbXArKykgeworCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX1RlbXBdPTA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9UZW1wXSA9IDA7CisJfQkJCS8vZm9yKGlfVGVtcD0wO2lfVGVtcDw9OTU7aV9UZW1wKyspCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlc2V0IHRoZSBTVEFSVCBhbmQgSVJRIGJpdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZm9yIChpX1RlbXAgPSAwOyBpX1RlbXAgPD0gMTkyOykgeworCQl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgaV9UZW1wICsgMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkJb3V0bCgwLCBkZXZwcml2LT5pb2Jhc2UgKyBpX1RlbXAgKyA4KTsKKwkJaV9UZW1wID0gaV9UZW1wICsgNjQ7CisJfQkJCS8vZm9yKGlfVGVtcD0wO2lfVGVtcDw9MTkyO2lfVGVtcCs2NCkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kzMjAwX0ludGVycnVwdAkJCQkJICAgICB8CisgIHwJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBwcm9jZXNzaW5nIFJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IJCQkJCSB8CisgIHwJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLwordm9pZCB2X0FQQ0kzMjAwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCVVJTlQgdWlfU3RhdHVzUmVnaXN0ZXIgPSAwOworCVVJTlQgdWlfQ2hhbm5lbE51bWJlciA9IDA7CisJSU5UIGlfQ2FsaWJyYXRpb25GbGFnID0gMDsKKwlJTlQgaV9DSkNGbGFnID0gMDsKKwlVSU5UIHVpX0R1bW15VmFsdWUgPSAwOworCVVJTlQgdWlfRGlnaXRhbFRlbXBlcmF0dXJlID0gMDsKKwlVSU5UIHVpX0RpZ2l0YWxJbnB1dCA9IDA7CisJaW50IGlfQ29udmVydENKQ0NhbGlicmF0aW9uOworCisJLy9CRUdJTiBKSyBURVNUCisJaW50IGlfUmV0dXJuVmFsdWUgPSAwOworCS8vRU5EIEpLIFRFU1QKKworCS8vcHJpbnRrICgiXG4gaV9TY2FuVHlwZSA9ICVpIGlfQURESURBVEFUeXBlID0gJWkiLCBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfU2NhblR5cGUsIHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUpOworCisJLy9zd2l0Y2goaV9TY2FuVHlwZSkKKwlzd2l0Y2ggKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJLy9zd2l0Y2goaV9BRERJREFUQVR5cGUpCisJCXN3aXRjaCAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFUeXBlKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLy91aV9TdGF0dXNSZWdpc3RlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxNik7CisJCQl1aV9TdGF0dXNSZWdpc3RlciA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTYpOworCQkJaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKSB7CisJCQkJLy9pX0NhbGlicmF0aW9uRmxhZyA9ICgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKSAmIDB4MDAwNjAwMDApID4+IDE3KTsKKwkJCQlpX0NhbGlicmF0aW9uRmxhZyA9CisJCQkJCSgoaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJCW1pbm9yXS4KKwkJCQkJCQlpX09mZnNldCArCisJCQkJCQkJMTIpICYgMHgwMDA2MDAwMCkgPj4KKwkJCQkJMTcpOworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvL3VpX0NoYW5uZWxOdW1iZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjQpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypSZWFkIHRoZSBkaWdpdGFsIGFuYWxvZyBpbnB1dCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8vdWlfRGlnaXRhbElucHV0ID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJCQl1aV9EaWdpdGFsSW5wdXQgPQorCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNoYW5uZWwgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDApIHsKKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDBdID0gdWlfRGlnaXRhbElucHV0OworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMF0gPSB1aV9EaWdpdGFsSW5wdXQ7CisKKwkJCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJCS8qCisJCQkJCSAgIHByaW50aygiXG4gMSAtIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUgKGRldiwgc19Cb2FyZEluZm9zICVpIiwgdWlfQ2hhbm5lbE51bWJlcik7CisJCQkJCSAgIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUgKGRldiwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSwKKwkJCQkJICAgJnNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArIDZdLAorCQkJCQkgICAmc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50ICsgN10sCisJCQkJCSAgICZzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQgKyA4XSk7CisJCQkJCSAqLworCQkJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlCisJCQkJCQkoZGV2LCAmdWlfRHVtbXlWYWx1ZSk7CisJCQkJfQkvL2lmIChpX0NhbGlicmF0aW9uRmxhZyA9PSAwKQorCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIG9mZnNldCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDEpIHsKKworCQkgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgdGhlIHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgMV0gPSB1aV9EaWdpdGFsSW5wdXQ7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAxXSA9IHVpX0RpZ2l0YWxJbnB1dDsKKworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBnYWluIHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUoZGV2LAorCQkJCQkJJnVpX0R1bW15VmFsdWUpOworCQkJCX0JLy9pZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qVGVzdCBpZiB0aGUgdmFsdWUgcmVhZCBpcyB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikgeworCisJCSAgLyoqKioqKioqKioqKioqKiovCisJCQkJCS8qU2F2ZSB0aGUgdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKi8KKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDJdID0gdWlfRGlnaXRhbElucHV0OworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMl0gPSB1aV9EaWdpdGFsSW5wdXQ7CisJCQkJCS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfU2NhblR5cGUgPT0gMSkgeworCisJCQkJCQkvL2lfSW50ZXJydXB0RmxhZz0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfSW50ZXJydXB0RmxhZyA9IDA7CisJCQkJCQkvL2lfQ291bnQ9aV9Db3VudCArIDY7CisJCQkJCQkvL0JlZ2luIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCQkJCS8vc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50PXNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArIDY7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9Db3VudCA9CisJCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJbWlub3JdLmlfQ291bnQgKyA5OworCQkJCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCQl9CS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lfQ291bnQ9MDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NvdW50ID0gMDsKKwkJCQkJfQkvL2Vsc2VpZihpX1NjYW5UeXBlPT0xKQorCQkJCQkvL2lmKGlfU2NhblR5cGUhPTEpCisJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX1NjYW5UeXBlICE9IDEpIHsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSBzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCQkJCX0JLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCS8vaWYoaV9DaGFubmVsQ291bnQ9PWlfU3VtKQorCQkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NoYW5uZWxDb3VudCA9PQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uaV9TdW0pIHsKKwkJCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCQkJCQl9CisJCQkJCX0JLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCX0JLy9pZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikKKwkJCX0JLy8gaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKQorCisJCQlicmVhazsKKworCQljYXNlIDI6CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvL3VpX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDE2KTsKKwkJCXVpX1N0YXR1c1JlZ2lzdGVyID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxNik7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qVGVzdCBpZiBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVpX1N0YXR1c1JlZ2lzdGVyICYgMHgyKSA9PSAweDIpIHsKKworCQkJCS8vaV9DSkNGbGFnID0gKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCkgJiAweDAwMDAwNDAwKSA+PiAxMCk7CisJCQkJaV9DSkNGbGFnID0KKwkJCQkJKChpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLgorCQkJCQkJCWlfT2Zmc2V0ICsKKwkJCQkJCQk0KSAmIDB4MDAwMDA0MDApID4+IDEwKTsKKworCQkJCS8vaV9DYWxpYnJhdGlvbkZsYWcgPSAoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMikgJiAweDAwMDYwMDAwKSA+PiAxNyk7CisJCQkJaV9DYWxpYnJhdGlvbkZsYWcgPQorCQkJCQkoKGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSAmIDB4MDAwNjAwMDApID4+CisJCQkJCTE3KTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCS8vdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyNCk7CisJCQkJdWlfQ2hhbm5lbE51bWJlciA9CisJCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyNCk7CisJCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtID0KKwkJCQkJdWlfQ2hhbm5lbE51bWJlcjsKKwkJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgZGlnaXRhbCB0ZW1wZXJhdHVyZSB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLy91aV9EaWdpdGFsVGVtcGVyYXR1cmUgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjgpOworCQkJCXVpX0RpZ2l0YWxUZW1wZXJhdHVyZSA9CisJCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qVGVzdCBpZiB0aGUgdmFsdWUgcmVhZCBpcyB0aGUgY2hhbm5lbCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGlfQ2FsaWJyYXRpb25GbGFnID09IDApCisJCQkJCSYmIChpX0NKQ0ZsYWcgPT0gMCkpIHsKKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDBdPXVpX0RpZ2l0YWxUZW1wZXJhdHVyZTsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlCisJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9Db3VudCArIDBdID0KKwkJCQkJCXVpX0RpZ2l0YWxUZW1wZXJhdHVyZTsKKworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIENKQyAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCWlfQVBDSTMyMDBfUmVhZENKQ1ZhbHVlKGRldiwKKwkJCQkJCSZ1aV9EdW1teVZhbHVlKTsKKworCQkJCX0JLy9pZiAoKGlfQ2FsaWJyYXRpb25GbGFnID09IDApICYmIChpX0NKQ0ZsYWcgPT0gMCkpCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIENKQyB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NKQ0ZsYWcgPT0gMSkKKwkJCQkJJiYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAzXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAzXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlCisJCQkJCQkoZGV2LCAmdWlfRHVtbXlWYWx1ZSk7CisJCQkJfQkvLyBpZiAoKGlfQ0pDRmxhZyA9PSAxKSAmJiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMCkpCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIG9mZnNldCB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAxXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAxXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLypTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShkZXYsCisJCQkJCQkmdWlfRHVtbXlWYWx1ZSk7CisKKwkJCQl9CS8vaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKSAmJiAoaV9DSkNGbGFnID09IDApKQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAyKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAyXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAyXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLypUZXN0IGlmIHRoZSBDYWxpYnJhdGlvbiBjaGFubmVsIG11c3QgYmUgcmVhZCBmb3IgdGhlIENKQyAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCS8qVGVzdCBpZiB0aGUgcG9sYXJpdHkgaXMgdGhlIHNhbWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9pZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NKQ1BvbGFyaXR5ICE9CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0FERElEQVRBUG9sYXJpdHkpIHsKKwkJCQkJCWlfQ29udmVydENKQ0NhbGlicmF0aW9uID0gMTsKKwkJCQkJfQkvL2lmKGlfQ0pDUG9sYXJpdHkhPWlfQURESURBVEFQb2xhcml0eSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lmKGlfQ0pDR2Fpbj09aV9BRERJREFUQUdhaW4pCisJCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfQ0pDR2FpbiA9PQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uCisJCQkJCQkJaV9BRERJREFUQUdhaW4pIHsKKwkJCQkJCQlpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbgorCQkJCQkJCQk9IDA7CisJCQkJCQl9CS8vaWYoaV9DSkNHYWluPT1pX0FERElEQVRBR2FpbikKKwkJCQkJCWVsc2UgeworCQkJCQkJCWlfQ29udmVydENKQ0NhbGlicmF0aW9uCisJCQkJCQkJCT0gMTsKKwkJCQkJCX0JLy9lbHNlaWYoaV9DSkNHYWluPT1pX0FERElEQVRBR2FpbikKKwkJCQkJfQkvL2Vsc2VpZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQkJCWlmIChpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbiA9PSAxKSB7CisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLypTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSBmb3IgdGhlIENKQyAqLworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCWlfQVBDSTMyMDBfUmVhZENKQ0NhbE9mZnNldChkZXYsCisJCQkJCQkJJnVpX0R1bW15VmFsdWUpOworCisJCQkJCX0JLy9pZihpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbj09MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgNF09MDsKKwkJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyA1XT0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLmlfQ291bnQgKworCQkJCQkJCTRdID0gMDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsKKwkJCQkJCQk1XSA9IDA7CisJCQkJCX0JLy9lbHNlaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCQkJfQkvL2Vsc2UgaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAyKSAmJiAoaV9DSkNGbGFnID09IDApKQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkKKwkJCQkJJiYgKGlfQ0pDRmxhZyA9PSAxKSkgeworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgNF09dWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgNF0gPQorCQkJCQkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ0pDQ2FsR2FpbihkZXYsCisJCQkJCQkmdWlfRHVtbXlWYWx1ZSk7CisKKwkJCQl9CS8vaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKSAmJiAoaV9DSkNGbGFnID09IDEpKQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAyKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDEpKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyA1XT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyA1XSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJCQkJLy9pZihpX1NjYW5UeXBlPT0xKQorCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9TY2FuVHlwZSA9PSAxKSB7CisKKwkJCQkJCS8vaV9JbnRlcnJ1cHRGbGFnPTA7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwkJCQkJCS8vaV9Db3VudD1pX0NvdW50ICsgNjsKKwkJCQkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCQkJLy9zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQ9c19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50ICsgNjsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NvdW50ID0KKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQltaW5vcl0uaV9Db3VudCArIDk7CisJCQkJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJCX0JLy9pZihpX1NjYW5UeXBlPT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCS8vaV9Db3VudD0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfQ291bnQgPSAwOworCQkJCQl9CS8vZWxzZWlmKGlfU2NhblR5cGU9PTEpCisKKwkJCQkJLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9TY2FuVHlwZSAhPSAxKSB7CisJCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCQkJCX0JLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCS8vaWYoaV9DaGFubmVsQ291bnQ9PWlfU3VtKQorCQkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NoYW5uZWxDb3VudCA9PQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uaV9TdW0pIHsKKwkJCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisKKwkJCQkJCX0JLy9pZihpX0NoYW5uZWxDb3VudD09aV9TdW0pCisJCQkJCX0JLy9lbHNlIGlmKGlfU2NhblR5cGUhPTEpCisJCQkJfQkvL2lmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikgJiYgKGlfQ0pDRmxhZyA9PSAxKSkKKworCQkJfQkvL2Vsc2UgaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKQorCQkJYnJlYWs7CisJCX0JCS8vc3dpdGNoKGlfQURESURBVEFUeXBlKQorCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlpX0FQQ0kzMjAwX0ludGVycnVwdEhhbmRsZUVvcyhkZXYpOworCQlicmVhazsKKwl9CQkJLy9zd2l0Y2goaV9TY2FuVHlwZSkKKwlyZXR1cm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IC4gICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGFjcXVpcmVkIGRhdGEoZnJvbSBGSUZPKSAgICAgIHwKKyAgfAkJCQl0byBDb21lZGkgYnVmZmVyLgkJIAkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMyMDBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCVVJTlQgdWlfU3RhdHVzUmVnaXN0ZXIgPSAwOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCS8vQkVHSU4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCS8vY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCS8vVUlOVCAqZGF0YTsKKwkvL2RhdGE9YXN5bmMtPmRhdGErYXN5bmMtPmJ1Zl9pbnRfcHRyOy8vbmV3IHNhbXBsZXMgYWRkZWQgZnJvbSBoZXJlIG9ud2FyZHMKKwlpbnQgbiA9IDAsIGkgPSAwOworCS8vRU5EIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vdWlfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTYpOworCXVpX1N0YXR1c1JlZ2lzdGVyID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDE2KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBjaGFubmVsIG51bWJlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8vdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyNCk7CisJCS8vQkVHSU4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCQkvL1RoaXMgdmFsdWUgaXMgbm90IHVzZWQKKwkJLy91aV9DaGFubmVsTnVtYmVyID0gaW5sKGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjQpOworCQlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKwkJLy9FTkQgSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIEFuYWxvZyBJbnB1dCB2YWx1ZSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhW2lfQ291bnRdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJLy9CZWdpbiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCS8vZGF0YVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnRdID0gaW5sKGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfU2NhblZhbHVlQXJyYXlbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJbWlub3JdLmlfQ291bnRdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCQkvL0VuZCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKwkJLy9pZigoaV9Db3VudCA9PSAoaV9MYXN0Q2hhbm5lbC1pX0ZpcnN0Q2hhbm5lbCszKSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPT0KKwkJCQkoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWwgLQorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCWlfRmlyc3RDaGFubmVsICsgMykpKSB7CisKKwkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQrKzsKKworCQkJZm9yIChpID0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsOworCQkJCWkgPD0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWw7CisJCQkJaSsrKSB7CisJCQkJaV9BUENJMzIwMF9HZXRDaGFubmVsQ2FsaWJyYXRpb25WYWx1ZShkZXYsIGksCisJCQkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX1NjYW5WYWx1ZUFycmF5W3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsgKChpIC0KKwkJCQkJCQkJc19Cb2FyZEluZm9zCisJCQkJCQkJCVtkZXYtPm1pbm9yXS4KKwkJCQkJCQkJaV9GaXJzdENoYW5uZWwpCisJCQkJCQkJKiAzKV0sCisJCQkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX1NjYW5WYWx1ZUFycmF5W3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsgKChpIC0KKwkJCQkJCQkJc19Cb2FyZEluZm9zCisJCQkJCQkJCVtkZXYtPm1pbm9yXS4KKwkJCQkJCQkJaV9GaXJzdENoYW5uZWwpCisJCQkJCQkJKiAzKSArIDFdLAorCQkJCQkmc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9TY2FuVmFsdWVBcnJheVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQltaW5vcl0uaV9Db3VudCArICgoaSAtCisJCQkJCQkJCXNfQm9hcmRJbmZvcworCQkJCQkJCQlbZGV2LT5taW5vcl0uCisJCQkJCQkJCWlfRmlyc3RDaGFubmVsKQorCQkJCQkJCSogMykgKyAyXSk7CisJCQl9CisKKwkJCS8vRW5kIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworCQkJLy9pX0NvdW50PS0xOworCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9IC0xOworCisJCQkvL2FzeW5jLT5idWZfaW50X2NvdW50Kz0oaV9MYXN0Q2hhbm5lbC1pX0ZpcnN0Q2hhbm5lbCs0KSpzaXplb2YoVUlOVCk7CisJCQkvL0JlZ2luIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwkJCS8vYXN5bmMtPmJ1Zl9pbnRfY291bnQrPShzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWwtc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCs0KSpzaXplb2YoVUlOVCk7CisJCQkvL0VuZCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvL2FzeW5jLT5idWZfaW50X3B0cis9KGlfTGFzdENoYW5uZWwtaV9GaXJzdENoYW5uZWwrNCkqc2l6ZW9mKFVJTlQpOworCQkJLy9CZWdpbiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvL2FzeW5jLT5idWZfaW50X3B0cis9KHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9MYXN0Q2hhbm5lbC1zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsKzQpKnNpemVvZihVSU5UKTsKKwkJCS8vY29tZWRpX2VvcyhkZXYscyk7CisKKwkJCS8vIFNldCB0aGUgZXZlbnQgdHlwZSAoQ29tZWRpIEJ1ZmZlciBFbmQgT2YgU2NhbikKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKworCQkJLy8gVGVzdCBpZiBlbm91Z3RoIG1lbW9yeSBpcyBhdmFpbGFibGUgYW5kIGFsbG9jYXRlIGl0IGZvciA3IHZhbHVlcworCQkJLy9uID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLT5hc3luYywgNypzaXplb2YodW5zaWduZWQgaW50KSk7CisJCQluID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLT5hc3luYywKKwkJCQkoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKworCQkJLy8gSWYgbm90IGVub3VndGggbWVtb3J5IGF2YWlsYWJsZSwgZXZlbnQgaXMgc2V0IHRvIENvbWVkaSBCdWZmZXIgRXJycm9yCisJCQlpZiAobiA+ICgoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQkJCXByaW50aygiXG5jb21lZGlfYnVmX3dyaXRlX2FsbG9jIG4gPSAlaSIsIG4pOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJfQorCQkJLy8gV3JpdGUgYWxsIDcgc2NhbiB2YWx1ZXMgaW4gdGhlIGNvbWVkaSBidWZmZXIKKwkJCWNvbWVkaV9idWZfbWVtY3B5X3RvKHMtPmFzeW5jLCAwLAorCQkJCSh1bnNpZ25lZCBpbnQgKikgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX1NjYW5WYWx1ZUFycmF5LCAoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKworCQkJLy8gVXBkYXRlIGNvbWVkaSBidWZmZXIgcGludGVycyBpbmRleGVzCisJCQljb21lZGlfYnVmX3dyaXRlX2ZyZWUocy0+YXN5bmMsCisJCQkJKDcgKyAxMikgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwkJCS8vIFNlbmQgZXZlbnRzCisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCS8vRW5kIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworCQkJLy9CRUdJTiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvLworCQkJLy9pZiAocy0+YXN5bmMtPmJ1Zl9pbnRfcHRyPj1zLT5hc3luYy0+ZGF0YV9sZW4pIC8vICBmb3IgYnVmZmVyIHJvb2wgb3ZlcgorCQkJLy8gIHsKKwkJCS8vICAgIC8qIGJ1ZmZlciByb2xsb3ZlciAqLworCQkJLy8gICAgcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyPTA7CisJCQkvLyAgICBjb21lZGlfZW9idWYoZGV2LHMpOworCQkJLy8gIH0KKwkJCS8vRW5kIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwkJfQorCQkvL2lfQ291bnQrKzsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQrKzsKKwl9CisJLy9pX0ludGVycnVwdEZsYWc9MDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmY1N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kzMjAwX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgMHgxNUI4CisvLyNkZWZpbmUgQVBDSTMyMDBfQUREUkVTU19SQU5HRSAgICAgICAgICAgICAgICAgICAyNjQKKworaW50IE1PRFVMRV9OTzsKK3N0cnVjdCB7CisJSU5UIGlfR2FpbjsKKwlJTlQgaV9Qb2xhcml0eTsKKwlJTlQgaV9PZmZzZXRSYW5nZTsKKwlJTlQgaV9Db3VwbGluZzsKKwlJTlQgaV9TaW5nbGVEaWZmOworCUlOVCBpX0F1dG9DYWxpYnJhdGlvbjsKKwlVSU5UIHVpX1JlbG9hZFZhbHVlOworCVVJTlQgdWlfVGltZVVuaXRSZWxvYWRWYWw7CisJSU5UIGlfSW50ZXJydXB0OworCUlOVCBpX01vZHVsZVNlbGVjdGlvbjsKK30gQ29uZmlnX1BhcmFtZXRlcnNfTW9kdWxlMSwgQ29uZmlnX1BhcmFtZXRlcnNfTW9kdWxlMiwKKyAgICBDb25maWdfUGFyYW1ldGVyc19Nb2R1bGUzLCBDb25maWdfUGFyYW1ldGVyc19Nb2R1bGU0OworCisvL0FOQUxPRyBJTlBVVCBSQU5HRQorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzMjAwX2FpID0geyA4LCB7CisJCQkJCQkgICAgIEJJUF9SQU5HRSgxMCksCisJCQkJCQkgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDIpLAorCQkJCQkJICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgxMCksCisJCQkJCQkgICAgIFVOSV9SQU5HRSg1KSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDIpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMSkKKwkJCQkJCSAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzMzAwX2FpID0geyA0LCB7CisJCQkJCQkgICAgIFVOSV9SQU5HRSgxMCksCisJCQkJCQkgICAgIFVOSV9SQU5HRSg1KSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDIpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMSkKKwkJCQkJCSAgICAgfQorfTsKKworLy9BbmFsb2cgSW5wdXQgcmVsYXRlZCBEZWZpbmVzCisjZGVmaW5lIEFQQ0kzMjAwX0FJX09GRlNFVF9HQUlOICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzIwMF9BSV9TQ19URVNUICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTMyMDBfQUlfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFQQ0kzMjAwX0FJX0FVVE9DQUwgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTMyMDBfUkVMT0FEX0NPTlZfVElNRV9WQUwgICAgICAgICAgICAzMgorI2RlZmluZSBBUENJMzIwMF9DT05WX1RJTUVfVElNRV9CQVNFICAgICAgICAgICAgIDM2CisjZGVmaW5lIEFQQ0kzMjAwX1JFTE9BRF9ERUxBWV9USU1FX1ZBTCAgICAgICAgICAgNDAKKyNkZWZpbmUgQVBDSTMyMDBfREVMQVlfVElNRV9USU1FX0JBU0UgICAgICAgICAgICA0NAorI2RlZmluZSBBUENJMzIwMF9BSV9NT0RVTEUxICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTMyMDBfQUlfTU9EVUxFMiAgICAgICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBBUENJMzIwMF9BSV9NT0RVTEUzICAgICAgICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBBUENJMzIwMF9BSV9NT0RVTEU0ICAgICAgICAgICAgICAgICAgICAgIDE5MgorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzMjAwX0FJX0VPU0lSUSAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTMyMDBfQUlfRU9TICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBBUENJMzIwMF9BSV9DSEFOX0lEICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFQQ0kzMjAwX0FJX0NIQU5fVkFMICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQU5BTE9HX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRVNJU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBFTkFCTEVfRVhUX1RSSUcgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRU5BQkxFX0VYVF9HQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEVOQUJMRV9FWFRfVFJJR19HQVRFICAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFQQ0kzMjAwX01BWFZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgMi41CisjZGVmaW5lIEFERElEQVRBX0dSRUFURVJfVEhBTl9URVNUICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9MRVNTX1RIQU5fVEVTVCAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBRERJREFUQV9VTklQT0xBUiAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfQklQT0xBUiAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vQkVHSU4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworI2RlZmluZSBNQVhfTU9EVUxFCQkJCTQKKy8vRU5EIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwordHlwZWRlZiBzdHJ1Y3QgeworCVVMT05HIHVsX051bWJlck9mVmFsdWU7CisJVUxPTkcgKnB1bF9SZXNpc3RhbmNlVmFsdWU7CisJVUxPTkcgKnB1bF9UZW1wZXJhdHVyZVZhbHVlOworfSBzdHJfQURESURBVEFfUlREU3RydWN0LCAqcHN0cl9BRERJREFUQV9SVERTdHJ1Y3Q7CisKKy8vQkVHSU4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcwordHlwZWRlZiBzdHJ1Y3QgeworCS8vIEJlZ2luIEpLIDA1LzA4LzIwMDMgY2hhbmdlIGZvciBMaW51eAorCXVuc2lnbmVkIGxvbmcgdWxfQ3VycmVudFNvdXJjZUNKQzsKKwl1bnNpZ25lZCBsb25nIHVsX0N1cnJlbnRTb3VyY2VbNV07CisJLy8gRW5kIEpLIDA1LzA4LzIwMDMgY2hhbmdlIGZvciBMaW51eAorCisJLy8gQmVnaW4gQ0cgMTUvMDIvMDIgUmV2IDEuMCAtPiBSZXYgMS4xIDogQWRkIEhlYWRlciBUeXBlIDEKKwl1bnNpZ25lZCBsb25nIHVsX0dhaW5GYWN0b3JbOF07CS8vIEdhaW4gRmFjdG9yCisJdW5zaWduZWQgaW50IHdfR2FpblZhbHVlWzEwXTsKKwkvLyBFbmQgQ0cgMTUvMDIvMDIgUmV2IDEuMCAtPiBSZXYgMS4xIDogQWRkIEhlYWRlciBUeXBlIDEKK30gc3RyX01vZHVsZTsKKy8vRU5EIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcwordHlwZWRlZiBzdHJ1Y3QgeworCUlOVCBpX0NKQ0F2YWlsYWJsZTsKKwlJTlQgaV9DSkNQb2xhcml0eTsKKwlJTlQgaV9DSkNHYWluOworCUlOVCBpX0ludGVycnVwdEZsYWc7CisJSU5UIGlfQURESURBVEFQb2xhcml0eTsKKwlJTlQgaV9BRERJREFUQUdhaW47CisJSU5UIGlfQXV0b0NhbGlicmF0aW9uOworCUlOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWU7CisJSU5UIGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQ7CisJSU5UIGlfQURESURBVEFUeXBlOworCUlOVCBpX0NoYW5uZWxObzsKKwlJTlQgaV9DaGFubmVsQ291bnQ7CisJSU5UIGlfU2NhblR5cGU7CisJSU5UIGlfRmlyc3RDaGFubmVsOworCUlOVCBpX0xhc3RDaGFubmVsOworCUlOVCBpX1N1bTsKKwlJTlQgaV9PZmZzZXQ7CisJVUlOVCB1aV9DaGFubmVsX251bTsKKwlJTlQgaV9Db3VudDsKKwlJTlQgaV9Jbml0aWFsaXNlZDsKKwkvL1VJTlQgdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzk2XTsgLy9CdWZmZXIKKwlVSU5UIHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsxNDRdOwkvL0J1ZmZlcgorCUJZVEUgYl9TdHJ1Y3RJbml0aWFsaXplZDsKKwkvL0JlZ2luIEpLIDE5LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwl1bnNpZ25lZCBpbnQgdWlfU2NhblZhbHVlQXJyYXlbNyArIDEyXTsJLy8gNyBpcyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgY2hhbm5lbHMKKwkvL0VuZCBKSyAxOS4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKwkvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwlJTlQgaV9Db25uZWN0aW9uVHlwZTsKKwlJTlQgaV9OYnJPZk1vZHVsZTsKKwlzdHJfTW9kdWxlIHNfTW9kdWxlW01BWF9NT0RVTEVdOworCS8vRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKK30gc3RyX0JvYXJkSW5mb3M7CisvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMzIwMAorCisvL0FJCisKK0lOVCBpX0FQQ0kzMjAwX0NvbmZpZ0FuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTMyMDBfSW5zbldyaXRlUmVsZWFzZUFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitJTlQgaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitJTlQgaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworSU5UIGlfQVBDSTMyMDBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK0lOVCBpX0FQQ0kzMjAwX1JlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworLy9JbnRlcnJ1cHQKK3ZvaWQgdl9BUENJMzIwMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CitpbnQgaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisvL1Jlc2V0IGZ1bmN0aW9ucworSU5UIGlfQVBDSTMyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNDYWxPZmZzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIFVJTlQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgVUlOVCAqZGF0YSk7CitpbnQgaV9BUENJMzIwMF9SZWFkMUFuYWxvZ0lucHV0Q2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZENKQ0NhbEdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM5MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jCkBAIC0wLDAgKzEsNzQyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyouCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTM1MDEgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kzNTAxLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0zNTAxICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMzUwMS5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMzUwMV9SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfSVApOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCisJCQkqZGF0YSA9ICpkYXRhICYgMHgzOworCQl9CQkvL2lmICAodWlfVGVtcD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZCBcbiIpOworCQl9CQkvL2Vsc2VpZiAgKHVpX1RlbXA9PTEpCisJfQkJCS8vZWxzZWlmICAodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX0NvbmZpZ0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgRGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlLiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzFdICAgICAgICAgICAgOiAxIEVuYWJsZSAgVkNDICBJbnRlcnJ1cHQgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkgIGRhdGFbMl0gICAgICAgICAgICA6IDEgRW5hYmxlICBDQyAgSW50ZXJydXB0ICAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTM1MDFfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJOb3QgYSB2YWxpZCBEYXRhICEhISAsRGF0YSBzaG91bGQgYmUgMSBvciAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYgICggKGRhdGFbMF0hPTApICYmIChkYXRhWzBdIT0xKSApCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvL2Vsc2UgaWYgIChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiB3cml0ZXMgVG8gdGhlIGRpZ2l0YWwgT3V0cHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgIDogSW5zbiBTdHJ1Y3R1cmUgUG9pbnRlciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wLCB1aV9UZW1wMTsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCAoMiAqIGRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPQorCQkJCQkoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXgorCQkJCQkweGZmZmZmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQlkYXRhWzBdID0KKwkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCWRhdGFbMl0pKSBeCisJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMzUwMV9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKworCXVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfRElHSVRBTF9PUCk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJKmRhdGEgPSAqZGF0YSAmIDB4MzsKKworCQl9CQkvLyBpZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy8gZWxzZSBpZiAodWlfVGVtcD09MSkKKwl9CQkJLy8gZWxzZSBpZiAgKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzUwMV9Db25maWdBbmFsb2dPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIEFuYWxvZyBPdXRwdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQlkYXRhWzBdICAgICAgICAgICAgOiBWb2x0YWdlIE1vZGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6TW9kZSAwICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpNb2RlIDEgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX0NvbmZpZ0FuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJb3V0bChkYXRhWzBdLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJQVBDSTM1MDFfQU9fVk9MVF9NT0RFKTsKKworCWlmIChkYXRhWzBdKSB7CisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IE1PREUxOworCX0gZWxzZSB7CisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IE1PREUwOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGVzIFRvIHRoZSBTZWxlY3RlZCBBbmxvZyBPdXRwdXQgQ2hhbm5lbCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDAsIHVsX0NoYW5uZWxfbm8sIHVsX1BvbGFyaXR5LCB1bF9EQUNfUmVhZHkgPSAwOzsKKworCXVsX0NoYW5uZWxfbm8gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWlmIChkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPT0gTU9ERTEpIHsKKwkJdWxfUG9sYXJpdHkgPSAweDgwMDAwMDAwOworCQlpZiAoKCpkYXRhIDwgMCkgfHwgKCpkYXRhID4gMTYzODQpKSB7CisJCQlwcmludGsoIlxuSW4gV3JpdGVBbmFsb2dPdXRwdXQgOjogTm90IFZhbGlkIERhdGFcbiIpOworCQl9CisKKwl9CQkJLy8gZW5kIGlmKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZT09TU9ERTEpCisJZWxzZSB7CisJCXVsX1BvbGFyaXR5ID0gMDsKKwkJaWYgKCgqZGF0YSA8IDApIHx8ICgqZGF0YSA+IDgxOTIpKSB7CisJCQlwcmludGsoIlxuSW4gV3JpdGVBbmFsb2dPdXRwdXQgOjogTm90IFZhbGlkIERhdGFcbiIpOworCQl9CisKKwl9CQkJLy8gZW5kIGVsc2UKKworCWlmICgodWxfQ2hhbm5lbF9ubyA8IDApIHx8ICh1bF9DaGFubmVsX25vID4gNykpIHsKKwkJcHJpbnRrKCJcbkluIFdyaXRlQW5hbG9nT3V0cHV0IDo6IE5vdCBWYWxpZCBDaGFubmVsXG4iKTsKKwl9CQkJLy8gZW5kIGlmKCh1bF9DaGFubmVsX25vPDApfHwodWxfQ2hhbm5lbF9ubz43KSkKKworCXVsX0RBQ19SZWFkeSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUKTsKKworCXdoaWxlICh1bF9EQUNfUmVhZHkgPT0gMCkgeworCQl1bF9EQUNfUmVhZHkgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCk7CisJCXVsX0RBQ19SZWFkeSA9ICh1bF9EQUNfUmVhZHkgPj4gOCkgJiAxOworCX0KKworCWlmICh1bF9EQUNfUmVhZHkpIHsKKy8vIE91dHB1dCB0aGUgVmFsdWUgb24gdGhlIG91dHB1dCBjaGFubmVscy4KKwkJdWxfQ29tbWFuZDEgPQorCQkJKFVMT05HKSAoKFVMT05HKSAodWxfQ2hhbm5lbF9ubyAmIDB4RkYpIHwKKwkJCShVTE9ORykgKCgqZGF0YSA8PCAweDgpICYgMHg3RkZGRkYwMEwpIHwKKwkJCShVTE9ORykgKHVsX1BvbGFyaXR5KSk7CisJCW91dGwodWxfQ29tbWFuZDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJCUFQQ0kzNTAxX0FPX1BST0cpOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgQ29uZmlndXJlIEFzIFRpbWVyICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvbmZpZ3VyZSBBcyBDb3VudGVyICAgIHwKK3wJCQkJCQkJCQkJICAgMiBDb25maWd1cmUgQXMgV2F0Y2hkb2cgICB8Cit8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDEgRW5hYmxlICBJbnRlcnJ1cHQgICAgICAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgSW50ZXJydXB0IAkgICAgIHwKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogVGltZSBVbml0ICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbM10JCQkgOiBSZWxvYWQgVmFsdWUJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzUwMV9Db25maWdUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfV0FUQ0hET0c7CisJCS8vRGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL2Rpc2FibGUgV2EKKworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkvL0VuYWJsZSBUSU1FUiBpbnQgJiBESVNBQkxFIEFMTCBUSEUgT1RIRVIgaW50IFNPVVJDRVMKKwkJCW91dGwoMHgwMiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9IGVsc2UgeworCQkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL2Rpc2FibGUgVGltZXIgaW50ZXJydXB0CisJCX0KKworCQkvL0xvYWRpbmcgdGhlIFRpbWViYXNlIHZhbHVlCisJCW91dGwoZGF0YVsyXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19USU1FQkFTRSk7CisKKwkJLy9Mb2FkaW5nIHRoZSBSZWxvYWQgdmFsdWUKKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1JFTE9BRF9WQUxVRSk7CisJCS8vU2V0IHRoZSBtb2RlCisJCXVsX0NvbW1hbmQxID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpIHwgMHhGRkY4MTlFMFVMOwkvL2UyLT5lMAorCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1BST0cpOworCX0JCQkvL2VuZCBpZihkYXRhWzBdPT1BRERJREFUQV9XQVRDSERPRykKKworCWVsc2UgaWYgKGRhdGFbMF0gPT0gQURESURBVEFfVElNRVIpIHsKKwkJLy9GaXJzdCBTdG9wIFRoZSBUaW1lcgorCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl1bF9Db21tYW5kMSA9IHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRVVMOworCQlvdXRsKHVsX0NvbW1hbmQxLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsJLy9TdG9wIFRoZSBUaW1lcgorCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX1RJTUVSOworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkvL0VuYWJsZSBUSU1FUiBpbnQgJiBESVNBQkxFIEFMTCBUSEUgT1RIRVIgaW50IFNPVVJDRVMKKwkJCW91dGwoMHgwMiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9IGVsc2UgeworCQkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL2Rpc2FibGUgVGltZXIgaW50ZXJydXB0CisJCX0KKworCQkvLyBMb2FkaW5nIFRpbWViYXNlCisJCW91dGwoZGF0YVsyXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19USU1FQkFTRSk7CisKKwkJLy9Mb2FkaW5nIHRoZSBSZWxvYWQgdmFsdWUKKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1JFTE9BRF9WQUxVRSk7CisKKwkJLy8gcHJpbnRrICgiXG5UaW1lciBBZGRyZXNzIDo6ICV4XG4iLCAoZGV2cHJpdi0+aW9iYXNlK0FQQ0kzNTAxX1dBVENIRE9HKSk7CisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0KKwkJCSh1bF9Db21tYW5kMSAmIDB4RkZGNzE5RTJVTCkgfCAyVUwgPDwgMTNVTCB8IDB4MTBVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKyBBUENJMzUwMV9UQ1dfUFJPRyk7CS8vbW9kZSAyCisKKwl9CQkJLy9lbmQgaWYoZGF0YVswXT09QURESURBVEFfVElNRVIpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBTZWxlY3RlZCBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIFRpbWVyICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb3VudGVyICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDIgV2F0Y2hkb2cgICAgICAgICAgCQkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIAkJCQkgZGF0YVsxXSAgICAgICAgICAgIDogMSBTdGFydCAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDAgU3RvcCAgICAgIAkJCQkgfAkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIFRyaWdnZXIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzNTAxX1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlpbnQgaV9UZW1wOworCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCQkJLy9FbmFibGUgdGhlIFdhdGNoZG9nCisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0KKworCQllbHNlIGlmIChkYXRhWzFdID09IDApCS8vU3RvcCBUaGUgV2F0Y2hkb2cKKwkJeworCQkJLy9TdG9wIFRoZSBXYXRjaGRvZworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJCW91dGwoMHgwLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA9PSAyKSB7CisJCQl1bF9Db21tYW5kMSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDIwMFVMOworCQkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9CQkvL2lmKGRhdGFbMV09PTIpCisJfQkJCS8vIGVuZCBpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1dBVENIRE9HKQorCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZGVUwpIHwgMHgxVUw7CisJCQkvL0VuYWJsZSB0aGUgVGltZXIKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJfSBlbHNlIGlmIChkYXRhWzFdID09IDApIHsKKwkJCS8vU3RvcCBUaGUgVGltZXIKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0KKworCQllbHNlIGlmIChkYXRhWzFdID09IDIpIHsKKwkJCS8vVHJpZ2dlciB0aGUgVGltZXIKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MjAwVUw7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0KKworCX0JCQkvLyBlbmQgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9USU1FUikKKwlpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQlBUENJMzUwMV9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfUmVhZFRpbWVyQ291bnRlcldhdGNoZG9nICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIFRoZSBTZWxlY3RlZCBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgVGltZXIgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvdW50ZXIgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMiBXYXRjaGRvZyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICAgOiBUaW1lciBDb3VudGVyIFdhdGNoZG9nIE51bWJlciAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzNTAxX1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1RSSUdfU1RBVFVTKSAmIDB4MTsKKwkJZGF0YVsxXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyk7CisJfQkJCS8vIGVuZCBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9XQVRDSERPRykKKworCWVsc2UgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19UUklHX1NUQVRVUykgJiAweDE7CisJCWRhdGFbMV0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cpOworCX0JCQkvLyBlbmQgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisKKwllbHNlIGlmICgoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgIT0gQURESURBVEFfVElNRVIpCisJCSYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSAhPSBBRERJREFUQV9XQVRDSERPRykpIHsKKwkJcHJpbnRrKCJcbkluIFJlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyA6OiBJbnZhbGlkIFN1YmRldmljZSBcbiIpOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6ICBpbnQgaV9BUENJMzUwMV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQkJCSAgICAgfAorfAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVzZXRzIHRoZSByZWdpc3RlcnMgb2YgdGhlIGNhcmQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzUwMV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaV9Db3VudCA9IDAsIGlfdGVtcCA9IDA7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwLCB1bF9Qb2xhcml0eSwgdWxfREFDX1JlYWR5ID0gMDsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfRElHSVRBTF9PUCk7CisJb3V0bCgxLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJQVBDSTM1MDFfQU9fVk9MVF9NT0RFKTsKKworCXVsX1BvbGFyaXR5ID0gMHg4MDAwMDAwMDsKKworCWZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPD0gNzsgaV9Db3VudCsrKSB7CisJCXVsX0RBQ19SZWFkeSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUKTsKKworCQl3aGlsZSAodWxfREFDX1JlYWR5ID09IDApIHsKKwkJCXVsX0RBQ19SZWFkeSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0FOQUxPR19PVVRQVVQpOworCQkJdWxfREFDX1JlYWR5ID0gKHVsX0RBQ19SZWFkeSA+PiA4KSAmIDE7CisJCX0KKworCQlpZiAodWxfREFDX1JlYWR5KSB7CisJCQkvLyBPdXRwdXQgdGhlIFZhbHVlIG9uIHRoZSBvdXRwdXQgY2hhbm5lbHMuCisJCQl1bF9Db21tYW5kMSA9CisJCQkJKFVMT05HKSAoKFVMT05HKSAoaV9Db3VudCAmIDB4RkYpIHwKKwkJCQkoVUxPTkcpICgoaV90ZW1wIDw8IDB4OCkgJiAweDdGRkZGRjAwTCkgfAorCQkJCShVTE9ORykgKHVsX1BvbGFyaXR5KSk7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0FOQUxPR19PVVRQVVQgKworCQkJCUFQQ0kzNTAxX0FPX1BST0cpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kzNTAxX0ludGVycnVwdAkJCQkJICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBSb3V0aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3ZvaWQgdl9BUENJMzUwMV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlpbnQgaV90ZW1wOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXVuc2lnbmVkIGludCB1aV9UaW1lcl9BT1dhdGNoZG9nOworCXVuc2lnbmVkIGxvbmcgdWxfQ29tbWFuZDE7CisJLy8gRGlzYWJsZSBJbnRlcnJ1cHQKKwl1bF9Db21tYW5kMSA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsKKworCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRHVsKTsKKwlvdXRsKHVsX0NvbW1hbmQxLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsKKworCXVpX1RpbWVyX0FPV2F0Y2hkb2cgPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQlBUENJMzUwMV9UQ1dfSVJRKSAmIDB4MTsKKworCWlmICgoIXVpX1RpbWVyX0FPV2F0Y2hkb2cpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgZnJvbSB1bmtub3cgc291cmNlIik7CisJCXJldHVybjsKKwl9CisKKwkvLyBFbmFibGUgSW50ZXJydXB0CisJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCXVsX0NvbW1hbmQxID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOworCXVsX0NvbW1hbmQxID0gKCh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkR1bCkgfCAxIDw8IDEpOworCW91dGwodWxfQ29tbWFuZDEsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOworCWlfdGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCUFQQ0kzNTAxX1RDV19UUklHX1NUQVRVUykgJiAweDE7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTdiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMzUwMV9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTVCOAorI2RlZmluZSBBUENJMzUwMV9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICAgICAgIDI1NQorCisjZGVmaW5lIEFQQ0kzNTAxX0RJR0lUQUxfSVAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQVBDSTM1MDFfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICAgICAgICAgICAgICAgICAgICAweDAwCisKKy8vQW5hbG9nIE91dHB1dCByZWxhdGVkIERlZmluZXMKKyNkZWZpbmUgQVBDSTM1MDFfQU9fVk9MVF9NT0RFICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzUwMV9BT19QUk9HICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kzNTAxX0FPX1RSSUdfU0NTICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVU5JUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBCSVBPTEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1PREUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTU9ERTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorLy8gQU5BTE9HIE9VVFBVVCBSQU5HRQorc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTM1MDFfYW8gPSB7IDIsIHsKKwkJCQkJQklQX1JBTkdFKDEwKSwKKwkJCQkJVU5JX1JBTkdFKDEwKQorCQkJCQl9Cit9OworCisvL1dhdGNoZG9nIFJlbGF0ZWQgRGVmaW5lcworCisjZGVmaW5lIEFQQ0kzNTAxX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1NZTkNfRU5BQkxFRElTQUJMRSAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzUwMV9UQ1dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kzNTAxX1RDV19USU1FQkFTRSAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1BST0cgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1RSSUdfU1RBVFVTICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTM1MDFfVENXX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1dBUk5fVElNRVZBTCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1dBUk5fVElNRUJBU0UgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQURESURBVEFfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kzNTAxCisKKy8vQU8KK0lOVCBpX0FQQ0kzNTAxX0NvbmZpZ0FuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vREkKKy8vIGZvciBkaSByZWFkCisvL0lOVCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRE8KK2ludCBpX0FQQ0kzNTAxX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTM1MDFfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKK0lOVCBpX0FQQ0kzNTAxX0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTM1MDFfU3RhcnRTdG9wV3JpdGVUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJICB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTM1MDFfUmVhZFRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisvL0ludGVycnVwdAordm9pZCB2X0FQQ0kzNTAxX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKworLy9SZXNldCBmdW5jdGlvbnMKK2ludCBpX0FQQ0kzNTAxX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjY4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmMKQEAgLTAsMCArMSwxNjkxIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhc3NlIDMgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktM1hYWCAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTN4eHguY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IFMuIFdlYmVyICAgICB8IERhdGUgICAgICAgOiAgMTUvMDkvMjAwNSAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOkFQQ0kzWFhYIE1vZHVsZS4gIEhhcmR3YXJlIGFic3RyYWN0aW9uIExheWVyIGZvciBBUENJM1hYWHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUnUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAJCSB8IAkJCQkJCSAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwJCQkJCQkgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgImh3ZHJ2X2FwY2kzeHh4LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UICAgaV9BUENJM1hYWF9UZXN0Q29udmVyc2lvblN0YXJ0ZWQgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICAgIFRlc3QgaWYgYW55IGNvbnZlcnNpb24gc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgOiBDb252ZXJzaW9uIG5vdCBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgMSA6IENvbnZlcnNpb24gc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfVGVzdENvbnZlcnNpb25TdGFydGVkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmICgocmVhZGwoKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsgOCkpICYgMHg4MDAwMFVMKSA9PSAweDgwMDAwVUwpIHsKKwkJcmV0dXJuICgxKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfQW5hbG9nSW5wdXRDb25maWdPcGVyYXRpbmdNb2RlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgQ29udmVydGluZyBtb2RlIGFuZCBjb252ZXJ0IHRpbWUgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9TaW5nbGVEaWZmICA9IChCWVRFKSAgZGF0YVsxXTsgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1RpbWVCYXNlICAgID0gKEJZVEUpICBkYXRhWzJdOyAoMDogbnMsIDE6bWljcm9zIDI6bXMpfAorfCAgICAgICAgICAgICAgICAgICAgZHdfUmVsb2FkVmFsdWUgPSAoRFdPUkQpIGRhdGFbM107ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEgOiBTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMiA6IENvbnZlcnQgdGltZSBiYXNlIHVuaXR5IHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zIDogQ29udmVydCB0aW1lIHZhbHVlIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwOiBBbnkgY29udmVyc2lvbiBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb25maWcgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0FuYWxvZ0lucHV0Q29uZmlnT3BlcmF0aW5nTW9kZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9UaW1lQmFzZSA9IDA7CisJQllURSBiX1NpbmdsZURpZmYgPSAwOworCURXT1JEIGR3X1JlbG9hZFZhbHVlID0gMDsKKwlEV09SRCBkd19UZXN0UmVsb2FkVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA9PSA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgU2luZ2VsL0RpZmYgZmxhZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWJfU2luZ2xlRGlmZiA9IChCWVRFKSBkYXRhWzFdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgdGltZSBiYXNlIHVuaXRpeSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWJfVGltZUJhc2UgPSAoQllURSkgZGF0YVsyXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNvbnZlcnQgdGltZSByZWxvYWQgdmFsdWUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19SZWxvYWRWYWx1ZSA9IChEV09SRCkgZGF0YVszXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSB0aW1lIGJhc2UgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnBzX0JvYXJkSW5mby0+CisJCQkJYl9BdmFpbGFibGVDb252ZXJ0VW5pdCAmICgxIDw8IGJfVGltZUJhc2UpKSAhPQorCQkJMCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY29udmVydCB0aW1lIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZHdfUmVsb2FkVmFsdWUgPj0gMCkgJiYgKGR3X1JlbG9hZFZhbHVlIDw9IDY1NTM1KSkgeworCQkJCWR3X1Rlc3RSZWxvYWRWYWx1ZSA9IGR3X1JlbG9hZFZhbHVlOworCisJCQkJaWYgKGJfVGltZUJhc2UgPT0gMSkgeworCQkJCQlkd19UZXN0UmVsb2FkVmFsdWUgPQorCQkJCQkJZHdfVGVzdFJlbG9hZFZhbHVlICogMTAwMFVMOworCQkJCX0KKwkJCQlpZiAoYl9UaW1lQmFzZSA9PSAyKSB7CisJCQkJCWR3X1Rlc3RSZWxvYWRWYWx1ZSA9CisJCQkJCQlkd19UZXN0UmVsb2FkVmFsdWUgKiAxMDAwMDAwVUw7CisJCQkJfQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBjb252ZXJ0IHRpbWUgdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGR3X1Rlc3RSZWxvYWRWYWx1ZSA+PQorCQkJCQlkZXZwcml2LT5wc19Cb2FyZEluZm8tPgorCQkJCQl1aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykgeworCQkJCQlpZiAoKGJfU2luZ2xlRGlmZiA9PSBBUENJM1hYWF9TSU5HTEUpCisJCQkJCQl8fCAoYl9TaW5nbGVEaWZmID09CisJCQkJCQkJQVBDSTNYWFhfRElGRikpIHsKKwkJCQkJCWlmICgoKGJfU2luZ2xlRGlmZiA9PSBBUENJM1hYWF9TSU5HTEUpICYmIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyQWlDaGFubmVsID09IDApKSB8fCAoKGJfU2luZ2xlRGlmZiA9PSBBUENJM1hYWF9ESUZGKSAmJiAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFpQ2hhbm5lbERpZmYgPT0gMCkpKSB7CisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJcHJpbnRrKCJTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTsKKwkJCQkJCX0gZWxzZSB7CisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGNvbnZlcnNpb24gbm90IHN0YXJ0ZWQgKi8KKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGlfQVBDSTNYWFhfVGVzdENvbnZlcnNpb25TdGFydGVkKGRldikgPT0gMCkgeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lCisJCQkJCQkJCQk9CisJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCWR3X1JlbG9hZFZhbHVlOworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCWJfRW9jRW9zQ29udmVyc2lvblRpbWVCYXNlCisJCQkJCQkJCQk9CisJCQkJCQkJCQliX1RpbWVCYXNlOworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCWJfU2luZ2VsRGlmZgorCQkJCQkJCQkJPQorCQkJCQkJCQkJYl9TaW5nbGVEaWZmOworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCWJfQWlJbml0aWFsaXNhdGlvbgorCQkJCQkJCQkJPSAxOworCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyB1bml0ICovCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQl3cml0ZWwoKERXT1JEKQorCQkJCQkJCQkJYl9UaW1lQmFzZSwKKwkJCQkJCQkJCSh2b2lkICopCisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJZHdfQWlCYXNlCisJCQkJCQkJCQkJKworCQkJCQkJCQkJCTM2KSk7CisKKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJd3JpdGVsKGR3X1JlbG9hZFZhbHVlLCAodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAzMikpOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgKi8KKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlwcmludGsoIkFueSBjb252ZXJzaW9uIHN0YXJ0ZWRcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS0xMDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFNpbmdsZS9EaWZmIHNlbGVjdGlvbiBlcnJvciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXByaW50aygiU2luZ2xlL0RpZmYgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaW1lIHNlbGVjdGlvbiBlcnJvciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIkNvbnZlcnQgdGltZSB2YWx1ZSBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGltZSBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIkNvbnZlcnQgdGltZSB2YWx1ZSBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaW1lIGJhc2Ugc2VsZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNvbnZlcnQgdGltZSBiYXNlIHVuaXR5IHNlbGVjdGlvbiBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgQ29udmVydGluZyBtb2RlIGFuZCBjb252ZXJ0IHRpbWUgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9Db252ZXJ0TW9kZSA9IChCWVRFKSAgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1RpbWVCYXNlICAgID0gKEJZVEUpICBkYXRhWzFdOyAoMDogbnMsIDE6bWljcm9zIDI6bXMpfAorfCAgICAgICAgICAgICAgICAgICAgZHdfUmVsb2FkVmFsdWUgPSAoRFdPUkQpIGRhdGFbMl07ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29uZmlnIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCQlzd2l0Y2ggKChCWVRFKSBkYXRhWzBdKSB7CisJCWNhc2UgQVBDSTNYWFhfQ09ORklHVVJBVElPTjoKKwkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCWlfQVBDSTNYWFhfQW5hbG9nSW5wdXRDb25maWdPcGVyYXRpbmdNb2RlKGRldiwKKwkJCQlzLCBpbnNuLCBkYXRhKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpX1JldHVyblZhbHVlID0gLTEwMDsKKwkJCXByaW50aygiQ29uZmlnIGNvbW1hbmQgZXJyb3IgJWRcbiIsIGRhdGFbMF0pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgICBSZWFkIDEgYW5hbG9nIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9SYW5nZSAgICAgICAgICAgICA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX0NoYW5uZWwgICAgICAgICAgID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGR3X05ick9mQWNxdWlzaXRpb24gPSBpbnNuLT5uOyAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zIDogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQgOiBDb25maWd1cmF0aW9uIHNlbGVsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTA6IEFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IENvbmZpZyBjb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9Db25maWd1cmF0aW9uID0gKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFIGJfQ2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19UZW1wID0gMDsKKwlEV09SRCBkd19Db25maWd1cmF0aW9uID0gMDsKKwlEV09SRCBkd19BY3F1aXNpdGlvbkNwdCA9IDA7CisJQllURSBiX0ludGVycnVwdCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG9wZXJhdGluZyBtb2RlIGNvbmZpZ3VyZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChkZXZwcml2LT5iX0FpSW5pdGlhbGlzYXRpb24pIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKCgoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFpQ2hhbm5lbCkKKwkJCQkmJiAoZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID09IEFQQ0kzWFhYX1NJTkdMRSkpCisJCQl8fCAoKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+CisJCQkJCWlfTmJyQWlDaGFubmVsRGlmZikKKwkJCQkmJiAoZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID09IEFQQ0kzWFhYX0RJRkYpKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0NvbmZpZ3VyYXRpb24gPiA3KSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENoYW5uZWwgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCXByaW50aygiQ2hhbm5lbCAlZCByYW5nZSAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCWJfQ2hhbm5lbCwgYl9Db25maWd1cmF0aW9uKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQlwcmludGsoIkNoYW5uZWwgJWQgc2VsZWN0aW9uIGVycm9yXG4iLCBiX0NoYW5uZWwpOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9JbnRlcnJ1cHQgIT0gMCkgfHwgKChiX0ludGVycnVwdCA9PSAwKQorCQkJCQkmJiAoaW5zbi0+biA+PSAxKSkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgY29udmVyc2lvbiBub3Qgc3RhcnRlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoaV9BUENJM1hYWF9UZXN0Q29udmVyc2lvblN0YXJ0ZWQoZGV2KSA9PSAwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDbGVhciB0aGUgRklGTyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQl3cml0ZWwoMHgxMDAwMFVMLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQkxMikpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogR2V0IGFuZCBzYXZlIHRoZSBkZWxheSBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19UZW1wID0KKwkJCQkJCXJlYWRsKCh2b2lkICopKGRldnByaXYtPgorCQkJCQkJCWR3X0FpQmFzZSArIDQpKTsKKwkJCQkJZHdfVGVtcCA9IGR3X1RlbXAgJiAweEZGRkZGRUYwVUw7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2hhbm5lbCBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19UZW1wLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQk0KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogTWFrZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X0NvbmZpZ3VyYXRpb24gPQorCQkJCQkJKGJfQ29uZmlndXJhdGlvbiAmIDMpIHwKKwkJCQkJCSgoRFdPUkQpIChiX0NvbmZpZ3VyYXRpb24gPj4gMikKKwkJCQkJCTw8IDYpIHwgKChEV09SRCkgZGV2cHJpdi0+CisJCQkJCQliX1NpbmdlbERpZmYgPDwgNyk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19Db25maWd1cmF0aW9uLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQkwKSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19UZW1wIHwgMHgxMDBVTCwKKwkJCQkJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArCisJCQkJCQkJNCkpOworCQkJCQl3cml0ZWwoKERXT1JEKSBiX0NoYW5uZWwsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTApKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZXN0YXVyZSBkZWxheSBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJd3JpdGVsKGR3X1RlbXAsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIG51bWJlciBvZiBzZXF1ZW5jZSB0byAxICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJd3JpdGVsKDEsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTQ4KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBmbGFnICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0KKwkJCQkJCWJfSW50ZXJydXB0OworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2F2ZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMgPSAxOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBub3QgdXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9JbnRlcnJ1cHQgPT0gMCkgeworCQkJCQkJZm9yIChkd19BY3F1aXNpdGlvbkNwdCA9IDA7CisJCQkJCQkJZHdfQWNxdWlzaXRpb25DcHQgPAorCQkJCQkJCWluc24tPm47CisJCQkJCQkJZHdfQWNxdWlzaXRpb25DcHQrKykgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQl3cml0ZWwoMHg4MDAwMFVMLAorCQkJCQkJCQkodm9pZCAqKQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlkd19BaUJhc2UKKwkJCQkJCQkJCSsgOCkpOworCisJCQkgIC8qKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFdhaXQgdGhlIEVPUyAqLworCQkJICAvKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRvIHsKKwkJCQkJCQkJZHdfVGVtcCA9CisJCQkJCQkJCQlyZWFkbCgKKwkJCQkJCQkJCSh2b2lkICopCisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJZHdfQWlCYXNlCisJCQkJCQkJCQkJKworCQkJCQkJCQkJCTIwKSk7CisJCQkJCQkJCWR3X1RlbXAgPQorCQkJCQkJCQkJZHdfVGVtcAorCQkJCQkJCQkJJiAxOworCQkJCQkJCX0KKwkJCQkJCQl3aGlsZSAoZHdfVGVtcCAhPSAxKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBSZWFkIHRoZSBhbmFsb2cgdmFsdWUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkYXRhW2R3X0FjcXVpc2l0aW9uQ3B0XQorCQkJCQkJCQk9CisJCQkJCQkJCSh1bnNpZ25lZCBpbnQpCisJCQkJCQkJCXJlYWRsKCh2b2lkCisJCQkJCQkJCQkqKQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlkd19BaUJhc2UKKwkJCQkJCQkJCSsgMjgpKTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJd3JpdGVsKDB4MTgwMDAwVUwsCisJCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+CisJCQkJCQkJCWR3X0FpQmFzZSArIDgpKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIkFueSBjb252ZXJzaW9uIHN0YXJ0ZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTEwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIk9wZXJhdGluZyBtb2RlIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xOworCX0KKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogdm9pZCB2X0FQQ0kzWFhYX0ludGVycnVwdCAoaW50ICAgICAgICAgICAgaXJxLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAqZCkgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpJbnRlcnJ1cHQgaGFuZGxlciBmb3IgQVBDSTNYWFggICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIFdoZW4gaW50ZXJydXB0IG9jY3VycyB0aGlzIGdldHMgY2FsbGVkLiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgRmlyc3QgaXQgZmluZHMgd2hpY2ggaW50ZXJydXB0IGhhcyBiZWVuIGdlbmVyYXRlZCBhbmQgICB8Cit8ICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICBjb3JyZXNwb25kaW5nIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCit2b2lkIHZfQVBDSTNYWFhfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJQllURSBiX0NvcHlDcHQgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoKGR3X1N0YXR1cyA9IHJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSkpICYgMHgyVUwpID09CisJCTB4MlVMKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZXNldCB0aGUgaW50ZXJydXB0ICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCXdyaXRlbChkd19TdGF0dXMsICh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSk7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIGFsbCBhbmFsb2cgaW5wdXRzIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlmb3IgKGJfQ29weUNwdCA9IDA7CisJCQkJYl9Db3B5Q3B0IDwgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCQkJCWJfQ29weUNwdCsrKSB7CisJCQkJZGV2cHJpdi0+dWlfQWlSZWFkRGF0YVtiX0NvcHlDcHRdID0KKwkJCQkJKFVJTlQpIHJlYWRsKCh2b2lkICopKGRldnByaXYtPgorCQkJCQkJZHdfQWlCYXNlICsgMjgpKTsKKwkJCX0KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gMjsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCX0KKwl9Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIE9VVFBVVCBTVUJERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UICAgaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gICAgICAqaW5zbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICAgIFJlYWQgMSBhbmFsb2cgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX1JhbmdlICAgID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfQ2hhbm5lbCAgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICA9IGFuYWxvZyB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTMgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNCA6IENvbmZpZ3VyYXRpb24gc2VsZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX1JhbmdlID0gKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFIGJfQ2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFvQ2hhbm5lbCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1JhbmdlIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgdGhlIHJhbmdlIHNlbGVjdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXdyaXRlbChiX1JhbmdlLAorCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyA5NikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIGFuYWxvZyB2YWx1ZSB0byB0aGUgc2VsZWN0ZWQgY2hhbm5lbCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJd3JpdGVsKChkYXRhWzBdIDw8IDgpIHwgYl9DaGFubmVsLAorCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAxMDApKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV2FpdCB0aGUgZW5kIG9mIHRyYW5zZmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRvIHsKKwkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCXJlYWRsKCh2b2lkICopKGRldnByaXYtPgorCQkJCQkJCWR3X0FpQmFzZSArIDk2KSk7CisJCQkJfQorCQkJCXdoaWxlICgoZHdfU3RhdHVzICYgMHgxMDApICE9IDB4MTAwKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENoYW5uZWwgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCXByaW50aygiQ2hhbm5lbCAlZCByYW5nZSAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCWJfQ2hhbm5lbCwgYl9SYW5nZSk7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwgYl9DaGFubmVsKTsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRMIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBUVEwuICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMih1c2VyIGlucHV0cyBmb3IgZGlyZWN0aW9uKXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfSW5pdFR5cGUgICAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9Qb3J0Mk1vZGUgICA9IChCWVRFKSBkYXRhWzFdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFBvcnQgMiBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb25maWcgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29tbWFuZCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBjb21tYW5kICovCisJCS8qICoqKioqKioqKioqKioqKiogKi8KKworCQliX0NvbW1hbmQgPSAoQllURSkgZGF0YVswXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgY29tbWFuZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBpbml0aWFsaXNhdGlvbiBidWZmZXIgc2l6ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9Db21tYW5kID09IEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMikKKwkJCQkmJiAoaW5zbi0+biAhPSAyKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyIGFuZCBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIgY29tbWFuZCBzZWxlY3RlZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJJiYgKGJfQ29tbWFuZCA9PSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIpKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGRpcmVjdGlvbiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVsxXSA9PSAwKSB8fCAoZGF0YVsxXSA9PSAweEZGKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNhdmUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdID0KKwkJCQlkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvblswXSB8IGRhdGFbMV07CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFBvcnQgZGlyZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJQb3J0IDIgZGlyZWN0aW9uIHNlbGVjdGlvbiBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTE7CisJCX0KKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBubyBlcnJvciBvY2N1ciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgVFRMIHBvcnQgaW5pdGlsYWlzYXRpb24gKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRhdGFbMV0sIGRldnByaXYtPmlvYmFzZSArIDIyNCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgVFRMIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJM1hYWF9JbnNuQml0c1RUTElPICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSB0aGUgc2VsZWN0ZWQgb3V0cHV0IG1hc2sgYW5kIHJlYWQgdGhlIHN0YXR1cyBmcm9tfAorfCAgICAgICAgICAgICAgICAgICAgIGFsbCBUVEwgY2hhbm5sZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBkd19DaGFubmVsTWFzayA9IGRhdGEgWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGR3X0JpdE1hc2sgICAgID0gZGF0YSBbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzFdIDogQWxsIFRUTCBjaGFubmxlcyBzdGF0ZXMgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00ICAgOiBDaGFubmVsIG1hc2sgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbENwdCA9IDA7CisJRFdPUkQgZHdfQ2hhbm5lbE1hc2sgPSAwOworCURXT1JEIGR3X0JpdE1hc2sgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDIpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBjaGFubmUgYW5kIGJpdCBtYXNrICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZHdfQ2hhbm5lbE1hc2sgPSBkYXRhWzBdOworCQlkd19CaXRNYXNrID0gZGF0YVsxXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG1hc2sgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKChkd19DaGFubmVsTWFzayAmIDBYRkYwMEZGMDApID09IDApICYmCisJCQkoKChkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvblswXSAmIDB4RkYpID09IDB4RkYpCisJCQkJfHwgKCgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gJgorCQkJCQkJCTB4RkYpID09IDApCisJCQkJCSYmICgoZHdfQ2hhbm5lbE1hc2sgJiAwWEZGMDAwMCkgPT0KKwkJCQkJCTApKSkpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBzZXQvcmVzZXQgYW55IGNoYW5uZWwgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZHdfQ2hhbm5lbE1hc2spIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgc2V0L3Jlc3QgYW55IHBvcnQgMCBjaGFubmVscyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZHdfQ2hhbm5lbE1hc2sgJiAweEZGKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCBwb3J0IDAgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgODApOworCisJCQkJCWZvciAoYl9DaGFubmVsQ3B0ID0gMDsgYl9DaGFubmVsQ3B0IDwgODsKKwkJCQkJCWJfQ2hhbm5lbENwdCsrKSB7CisJCQkJCQlpZiAoKGR3X0NoYW5uZWxNYXNrID4+CisJCQkJCQkJCWJfQ2hhbm5lbENwdCkgJgorCQkJCQkJCTEpIHsKKwkJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCQkoZHdfU3RhdHVzICYKKwkJCQkJCQkJKDB4RkYgLSAoMSA8PCBiX0NoYW5uZWxDcHQpKSkgfCAoZHdfQml0TWFzayAmICgxIDw8IGJfQ2hhbm5lbENwdCkpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDgwKTsKKwkJCQl9CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgc2V0L3Jlc3QgYW55IHBvcnQgMiBjaGFubmVscyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZHdfQ2hhbm5lbE1hc2sgJiAweEZGMDAwMCkgeworCQkJCQlkd19CaXRNYXNrID0gZHdfQml0TWFzayA+PiAxNjsKKwkJCQkJZHdfQ2hhbm5lbE1hc2sgPSBkd19DaGFubmVsTWFzayA+PiAxNjsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHBvcnQgMiAoc2Vjb25kIGRpZ2l0YWwgb3V0cHV0IHBvcnQpICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDExMik7CisKKwkJCQkJZm9yIChiX0NoYW5uZWxDcHQgPSAwOyBiX0NoYW5uZWxDcHQgPCA4OworCQkJCQkJYl9DaGFubmVsQ3B0KyspIHsKKwkJCQkJCWlmICgoZHdfQ2hhbm5lbE1hc2sgPj4KKwkJCQkJCQkJYl9DaGFubmVsQ3B0KSAmCisJCQkJCQkJMSkgeworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCShkd19TdGF0dXMgJgorCQkJCQkJCQkoMHhGRiAtICgxIDw8IGJfQ2hhbm5lbENwdCkpKSB8IChkd19CaXRNYXNrICYgKDEgPDwgYl9DaGFubmVsQ3B0KSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlvdXRsKGR3X1N0YXR1cywgZGV2cHJpdi0+aW9iYXNlICsgMTEyKTsKKwkJCQl9CisJCQl9CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDgwKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHBvcnQgMSAoZmlyc3QgZGlnaXRhbCBpbnB1dCBwb3J0KSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRhdGFbMV0gPSBkYXRhWzFdIHwgKGlubChkZXZwcml2LT5pb2Jhc2UgKyA2NCkgPDwgOCk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBwb3J0IDIgaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdICYgMHhGRikgPT0gMCkgeworCQkJCWRhdGFbMV0gPQorCQkJCQlkYXRhWzFdIHwgKGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJOTYpIDw8IDE2KTsKKwkJCX0gZWxzZSB7CisJCQkJZGF0YVsxXSA9CisJCQkJCWRhdGFbMV0gfCAoaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkxMTIpIDw8IDE2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNoYW5uZWwgbWFzayBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8gICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBjaGFubmVsICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBTZWxlY3RlZCBUVEwgY2hhbm5lbCBzdGF0ZSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTMgICA6IENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zblJlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXVuc2lnbmVkIGludCAqcGxzX1JlYWREYXRhID0gZGF0YTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiByZWFkIHBvcnQgMCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgOCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCBwb3J0IDAgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXBsc19SZWFkRGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCQlwbHNfUmVhZERhdGFbMF0gPSAocGxzX1JlYWREYXRhWzBdID4+IGJfQ2hhbm5lbCkgJiAxOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDEgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9DaGFubmVsID4gNykgJiYgKGJfQ2hhbm5lbCA8IDE2KSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIHBvcnQgMSAoZmlyc3QgZGlnaXRhbCBpbnB1dCBwb3J0KSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXBsc19SZWFkRGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA2NCk7CisJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJKHBsc19SZWFkRGF0YVswXSA+PiAoYl9DaGFubmVsIC0KKwkJCQkJCTgpKSAmIDE7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9DaGFubmVsID4gMTUpICYmIChiX0NoYW5uZWwgPCAyNCkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcG9ydCAyIGlucHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0KKwkJCQkJCQkmIDB4RkYpID09IDApIHsKKwkJCQkJCXBsc19SZWFkRGF0YVswXSA9CisJCQkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkJOTYpOworCQkJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJCQkocGxzX1JlYWREYXRhWzBdID4+CisJCQkJCQkJKGJfQ2hhbm5lbCAtIDE2KSkgJiAxOworCQkJCQl9IGVsc2UgeworCQkJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCQkxMTIpOworCQkJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJCQkocGxzX1JlYWREYXRhWzBdID4+CisJCQkJCQkJKGJfQ2hhbm5lbCAtIDE2KSkgJiAxOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwKKwkJCQkJCWJfQ2hhbm5lbCk7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICBUVEwgT1VUUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UICAgICBpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gICAgICAqaW5zbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldCB0aGUgc3RhdGUgZnJvbSBUVEwgb3V0cHV0IGNoYW5uZWwgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfU3RhdGUgICA9IGRhdGEgWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJQllURSBiX1N0YXRlID0gMDsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJCWJfU3RhdGUgPSAoQllURSkgZGF0YVswXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiByZWFkIHBvcnQgMCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgOCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxjdGVkIGNoYW5uZWwgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCQlkd19TdGF0dXMgPQorCQkJCShkd19TdGF0dXMgJiAoMHhGRiAtCisJCQkJCSgxIDw8IGJfQ2hhbm5lbCkpKSB8ICgoYl9TdGF0ZSAmIDEpIDw8CisJCQkJYl9DaGFubmVsKTsKKwkJCW91dGwoZHdfU3RhdHVzLCBkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiByZWFkIHBvcnQgMiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChiX0NoYW5uZWwgPiAxNSkgJiYgKGJfQ2hhbm5lbCA8IDI0KSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBwb3J0IDIgb3V0cHV0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gJiAweEZGKQorCQkJCQk9PSAweEZGKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgcG9ydCAyIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxjdGVkIGNoYW5uZWwgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTEyKTsKKwkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCShkd19TdGF0dXMgJiAoMHhGRiAtCisJCQkJCQkJKDEgPDwgKGJfQ2hhbm5lbCAtCisJCQkJCQkJCQkxNikpKSkgfAorCQkJCQkJKChiX1N0YXRlICYgMSkgPDwgKGJfQ2hhbm5lbCAtCisJCQkJCQkJMTYpKTsKKwkJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDExMik7CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwKKwkJCQkJCWJfQ2hhbm5lbCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwKKwkJCQkJYl9DaGFubmVsKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTCBJTlBVVCBTVUJERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBEaWdpdGFsIGlucHV0IGNoYW5uZWwgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgKDAgdG8gMykgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBDaGFubmVsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTMgICA6IENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19UZW1wID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfQ2hhbm5lbCA8PSBkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyRGlDaGFubmVsKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChpbnNuLT5uID49IDEpIHsKKwkJCWR3X1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMzIpOworCQkJKmRhdGEgPSAoZHdfVGVtcCA+PiBiX0NoYW5uZWwpICYgMTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJDaGFubmVsIHNlbGVjdGlvbiBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWRzIHRoZSB2YWx1ZSBvZiB0aGUgRGlnaXRhbCBpbnB1dCBQb3J0IGkuZS40Y2hhbm5lbHN8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogZGF0YVswXSA6IFBvcnQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6PjA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlEV09SRCBkd19UZW1wID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCQlkd19UZW1wID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDMyKTsKKwkJKmRhdGEgPSBkd19UZW1wICYgMHhmOworCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTCBPVVRQVVQgU1VCREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlIHRoZSBzZWxlY3RlZCBvdXRwdXQgbWFzayBhbmQgcmVhZCB0aGUgc3RhdHVzIGZyb218Cit8ICAgICAgICAgICAgICAgICAgICAgYWxsIGRpZ2l0YWwgb3V0cHV0IGNoYW5ubGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGR3X0NoYW5uZWxNYXNrID0gZGF0YSBbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZHdfQml0TWFzayAgICAgPSBkYXRhIFsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMV0gOiBBbGwgZGlnaXRhbCBvdXRwdXQgY2hhbm5sZXMgc3RhdGVzICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiA+MCAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQgICA6IENoYW5uZWwgbWFzayBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DaGFubmVsQ3B0ID0gMDsKKwlEV09SRCBkd19DaGFubmVsTWFzayA9IDA7CisJRFdPUkQgZHdfQml0TWFzayA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMikgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNoYW5uZSBhbmQgYml0IG1hc2sgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19DaGFubmVsTWFzayA9IGRhdGFbMF07CisJCWR3X0JpdE1hc2sgPSBkYXRhWzFdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbWFzayAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZHdfQ2hhbm5lbE1hc2sgJiAwWEZGRkZGRkYwKSA9PSAwKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgc2V0L3Jlc2V0IGFueSBjaGFubmVsICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGR3X0NoYW5uZWxNYXNrICYgMHhGKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgZGlnaXRhbCBvdXRwdXQgcG9ydCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDQ4KTsKKworCQkJCWZvciAoYl9DaGFubmVsQ3B0ID0gMDsgYl9DaGFubmVsQ3B0IDwgNDsKKwkJCQkJYl9DaGFubmVsQ3B0KyspIHsKKwkJCQkJaWYgKChkd19DaGFubmVsTWFzayA+PiBiX0NoYW5uZWxDcHQpICYKKwkJCQkJCTEpIHsKKwkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJKGR3X1N0YXR1cyAmICgweEYgLQorCQkJCQkJCQkoMSA8PCBiX0NoYW5uZWxDcHQpKSkgfCAoZHdfQml0TWFzayAmICgxIDw8IGJfQ2hhbm5lbENwdCkpOworCQkJCQl9CisJCQkJfQorCisJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDQ4KTsKKwkJCX0KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRhdGFbMV0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgNDgpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiQ2hhbm5lbCBtYXNrIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldCB0aGUgc3RhdGUgZnJvbSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfU3RhdGUgICA9IGRhdGEgWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCUJZVEUgYl9TdGF0ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickRvQ2hhbm5lbCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLyogR2V0IHRoZSBjb21tYW5kICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCWJfU3RhdGUgPSAoQllURSkgZGF0YVswXTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA0OCk7CisKKwkJCWR3X1N0YXR1cyA9CisJCQkJKGR3X1N0YXR1cyAmICgweEYgLQorCQkJCQkoMSA8PCBiX0NoYW5uZWwpKSkgfCAoKGJfU3RhdGUgJiAxKSA8PAorCQkJCWJfQ2hhbm5lbCk7CisJCQlvdXRsKGR3X1N0YXR1cywgZGV2cHJpdi0+aW9iYXNlICsgNDgpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdGUgZnJvbSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBiX1N0YXRlICAgPSBkYXRhIFswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickRvQ2hhbm5lbCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA0OCk7CisKKwkJCWR3X1N0YXR1cyA9IChkd19TdGF0dXMgPj4gYl9DaGFubmVsKSAmIDE7CisJCQkqZGF0YSA9IGR3X1N0YXR1czsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNoYW5uZWwgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTNYWFhfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpyZXNldHMgYWxsIHRoZSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYl9DcHQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2xlYXIgdGhlIHN0YXJ0IGNvbW1hbmQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJd3JpdGVsKDAsICh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDgpKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldCB0aGUgaW50ZXJydXB0IGZsYWdzICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJd3JpdGVsKHJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSksCisJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSk7CisKKwkvKioqKioqKioqKioqKioqKiovCisJLyogY2xlYXIgdGhlIEVPUyAqLworCS8qKioqKioqKioqKioqKioqKi8KKworCXJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDIwKSk7CisKKwkvKioqKioqKioqKioqKioqKioqLworCS8qIENsZWFyIHRoZSBGSUZPICovCisJLyoqKioqKioqKioqKioqKioqKi8KKworCWZvciAoYl9DcHQgPSAwOyBiX0NwdCA8IDE2OyBiX0NwdCsrKSB7CisJCXJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDI4KSk7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwllbmFibGVfaXJxKGRldi0+aXJxKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBDT01FRElfU1VCRF9UVExJTworI2RlZmluZSBDT01FRElfU1VCRF9UVExJTyAgIDExCS8qIERpZ2l0YWwgSW5wdXQgT3V0cHV0IEJ1dCBUVEwgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFERElEQVRBX0VOQUJMRQorI2RlZmluZSBBRERJREFUQV9FTkFCTEUgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAwCisjZW5kaWYKKworI2RlZmluZSBBUENJM1hYWF9TSU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzWFhYX0RJRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBDSTNYWFhfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMiAgIDAKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzWFhYX2FpID0geyA4LCB7QklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDUpLAorCQkJCQkJICAgICBCSVBfUkFOR0UoMiksCisJCQkJCQkgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDUpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMiksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgxKX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpM1hYWF90dGwgPSB7IDEyLCB7QklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTNYWFhfYW8gPSB7IDIsIHtCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApfQorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8wMzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjMDE4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMKQEAgLTAsMCArMSw1IEBACisjZGVmaW5lIENPTkZJR19BUENJXzAzNSAxCisKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgMgkvLyBPciBzaG9sZCBpdCBiZSBzb21ldGhpbmcgZWxzZQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjA1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTAzMiAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1Y2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNTAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQxNDg0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUxNi5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNTE2IDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzUxY2RkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzE1NjQgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTZ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjc5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTZYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTcxMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNzEwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzFjNDdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzIwMTYgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDhlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMjAzMiAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzOWY4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8yMjAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMwMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjk3YzMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzMwMDEgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODMxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzEyMCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1YTcwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzIwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8zMjAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMzAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMzAwLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzMzMDAgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzUwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDllMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzUwMSAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5ZGViNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzN4eHguYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfM1hYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfYWxsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpX2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjFiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpX2FsbC5jCkBAIC0wLDAgKzEsMTggQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMDM1ICAxCisjZGVmaW5lIENPTkZJR19BUENJXzEwMzIgMQorI2RlZmluZSBDT05GSUdfQVBDSV8xNTAwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTUxNiAxCisjZGVmaW5lIENPTkZJR19BUENJXzE1NjQgMQorI2RlZmluZSBDT05GSUdfQVBDSV8xNlhYIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTcxMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzIwMTYgMQorI2RlZmluZSBDT05GSUdfQVBDSV8yMDMyIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMjIwMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzMwMDEgMQorI2RlZmluZSBDT05GSUdfQVBDSV8zMTIwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzIwMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzMzMDAgMQorI2RlZmluZSBDT05GSUdfQVBDSV8zNTAxIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfM1hYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxMGY1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTYyMDguYwpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jCisKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIEFETGluayA2MjA4IHNlcmllcyBjYXJkczoKKwljYXJkCSAgICAgfCB2b2x0YWdlIG91dHB1dCAgICB8IGN1cnJlbnQgb3V0cHV0CisJLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorCVBDSS02MjA4ViAgICB8ICA4IGNoYW5uZWxzICAgICAgIHwgLQorCVBDSS02MjE2ViAgICB8IDE2IGNoYW5uZWxzICAgICAgIHwgLQorCVBDSS02MjA4QSAgICB8ICA4IGNoYW5uZWxzICAgICAgIHwgOCBjaGFubmVscworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k2MjA4CitEZXNjcmlwdGlvbjogQURMaW5rIFBDSS02MjA4QQorRGV2aWNlczogW0FETGlua10gUENJLTYyMDhBIChhZGxfcGNpNjIwOCkKK0F1dGhvcjogbnN5ZW93IDxuc3llb3dAcGQuamFyaW5nLm15PgorVXBkYXRlZDogRnJpLCAzMCBKYW4gMjAwNCAxNDo0NDoyNyArMDgwMAorU3RhdHVzOiB1bnRlc3RlZAorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIG5vbmUKKworUmVmZXJlbmNlczoKKwktIG5pXzY2MHguYworCS0gYWRsX3BjaTkxMTEuYwkJY29waWVkIHRoZSBlbnRpcmUgcGNpIHNldHVwIHNlY3Rpb24KKwktIGFkbF9wY2k5MTE4LmMKKyovCisvKgorICogVGhlc2UgaGVhZGVycyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhbmQgYW55IGNvbW1lbnRzCisgKiB5b3Ugd2lzaCB0byBzYXkgYWJvdXQgdGhlIGRyaXZlci4gIFRoZSBjb21tZW50IGFyZWEgaXMgdGhlIHBsYWNlCisgKiB0byBwdXQgYW55IGtub3duIGJ1Z3MsIGxpbWl0YXRpb25zLCB1bnN1cHBvcnRlZCBmZWF0dXJlcywgc3VwcG9ydGVkCisgKiBjb21tYW5kIHRyaWdnZXJzLCB3aGV0aGVyIG9yIG5vdCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIG9uIHBhcnRpY3VsYXIKKyAqIHN1YmRldmljZXMsIGV0Yy4KKyAqCisgKiBTb21ld2hlcmUgaW4gdGhlIGNvbW1lbnQgc2hvdWxkIGJlIGluZm9ybWF0aW9uIGFib3V0IGNvbmZpZ3VyYXRpb24KKyAqIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCB3aXRoIGNvbWVkaV9jb25maWcuCisgKi8KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgUENJNjIwOF9EUklWRVJfTkFNRSAJImFkbF9wY2k2MjA4IgorCisvKiBCb2FyZCBkZXNjcmlwdGlvbnMgKi8KK3N0cnVjdCBwY2k2MjA4X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGRldl9pZDsJLyogYGxzcGNpYCB3aWxsIHNob3cgeW91IHRoaXMgKi8KKwlpbnQgYW9fY2hhbnM7CisJLy9pbnQgYW9fYml0czsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpNjIwOF9ib2FyZCBwY2k2MjA4X2JvYXJkc1tdID0geworCS8qeworCSAgIG5hbWUgOiAgInBjaTYyMDh2IiwKKwkgICBkZXZfaWQgICAgICAgOiAgMHg2MjA4LCAgICAgIC8vbm90IHN1cmUKKwkgICBhb19jaGFuczogIDgKKwkgICAvLywgIGFvX2JpdHMgOiAgMTYKKwkgICB9LAorCSAgIHsKKwkgICBuYW1lIDogICJwY2k2MjE2diIsCisJICAgZGV2X2lkICAgICAgIDogIDB4NjIwOCwgICAgICAvL25vdCBzdXJlCisJICAgYW9fY2hhbnM6ICAxNgorCSAgIC8vLCAgYW9fYml0cyA6ICAxNgorCSAgIH0sICovCisJeworCSAgICAgIG5hbWU6CSJwY2k2MjA4YSIsCisJICAgICAgZGV2X2lkOgkweDYyMDgsCisJICAgICAgYW9fY2hhbnM6OAorCQkJLy8sICAgICBhb19iaXRzIDogIDE2CisJCX0KK307CisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpNjIwOF9wY2lfdGFibGUpID0geworCS8veyBQQ0lfVkVORE9SX0lEX0FETElOSywgMHg2MjA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJLy97IFBDSV9WRU5ET1JfSURfQURMSU5LLCAweDYyMDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIDB4NjIwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpNjIwOF9wY2lfdGFibGUpOworCisvKiBXaWxsIGJlIGluaXRpYWxpemVkIGluIHBjaTYyMDhfZmluZCBkZXZpY2UoKS4gKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjaTYyMDhfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IHBjaTYyMDhfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CS8qIGZvciBhIFBDSSBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CS8qIFVzZWQgZm9yIEFPIHJlYWRiYWNrICovCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpNjIwOF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHBjaTYyMDhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpNjIwOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisjZGVmaW5lIHBjaTYyMDhfYm9hcmRfbmJyIFwKKwkoc2l6ZW9mKHBjaTYyMDhfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNpNjIwOF9ib2FyZCkpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpNjIwOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOlBDSTYyMDhfRFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpNjIwOF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpNjIwOF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2k2MjA4LCBwY2k2MjA4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgcGNpNjIwOF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworc3RhdGljIGludAorcGNpNjIwOF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHVuc2lnbmVkIGxvbmcgKmlvX2Jhc2VfcHRyLAorCWludCBkZXZfbWlub3IpOworCisvKnJlYWQvd3JpdGUgZnVuY3Rpb25zKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY2k2MjA4X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisvL3N0YXRpYyBpbnQgcGNpNjIwOF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworLy9zdGF0aWMgaW50IHBjaTYyMDhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CisKKwlwcmludGsoImNvbWVkaSVkOiBwY2k2MjA4OiAiLCBkZXYtPm1pbm9yKTsKKworCXJldHZhbCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTYyMDhfcHJpdmF0ZSkpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gcGNpNjIwOF9maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBwY2k2MjA4X3BjaV9zZXR1cChkZXZwcml2LT5wY2lfZGV2LCAmaW9fYmFzZSwgZGV2LT5taW5vcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkZXYtPmlvYmFzZSA9IGlvX2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOwkvL2FueXRoaW5nIGVsc2UgdG8gYWRkIGhlcmU/PworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fY2hhbnM7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsJLy8xNi1iaXQgREFDCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOwkvL3RoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZC4KKwlzLT5pbnNuX3dyaXRlID0gcGNpNjIwOF9hb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBwY2k2MjA4X2FvX3JpbnNuOworCisJLy9zPWRldi0+c3ViZGV2aWNlcysxOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCS8vcy0+dHlwZT1DT01FRElfU1VCRF9ESU87CisJLy9zLT5zdWJkZXZfZmxhZ3M9U0RGX1JFQURBQkxFfFNERl9XUklUQUJMRTsKKwkvL3MtPm5fY2hhbj0xNjsKKwkvL3MtPm1heGRhdGE9MTsKKwkvL3MtPnJhbmdlX3RhYmxlPSZyYW5nZV9kaWdpdGFsOworCS8vcy0+aW5zbl9iaXRzID0gcGNpNjIwOF9kaW9faW5zbl9iaXRzOworCS8vcy0+aW5zbl9jb25maWcgPSBwY2k2MjA4X2Rpb19pbnNuX2NvbmZpZzsKKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpNjIwODogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpNjIwOF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGkgPSAwLCBEYXRhX1JlYWQ7CisJdW5zaWduZWQgc2hvcnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgaW52ZXJ0ID0gMSA8PCAoMTYgLSAxKTsKKwl1bnNpZ25lZCBsb25nIG91dF92YWx1ZTsKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0X3ZhbHVlID0gZGF0YVtpXSBeIGludmVydDsKKwkJLyogYSB0eXBpY2FsIHByb2dyYW1taW5nIHNlcXVlbmNlICovCisJCWRvIHsKKwkJCURhdGFfUmVhZCA9IChpbncoZGV2LT5pb2Jhc2UpICYgMSk7CisJCX0gd2hpbGUgKERhdGFfUmVhZCk7CisJCW91dHcob3V0X3ZhbHVlLCBkZXYtPmlvYmFzZSArICgweDAyICogY2hhbikpOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IG91dF92YWx1ZTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KKy8vc3RhdGljIGludCBwY2k2MjA4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKy8vICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKKy8veworLy8gICAgICBpZihpbnNuLT5uIT0yKXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisvLyAgICAgIGlmKGRhdGFbMF0peworLy8gICAgICAgICAgICAgIHMtPnN0YXRlICY9IH5kYXRhWzBdOworLy8gICAgICAgICAgICAgIHMtPnN0YXRlIHw9IGRhdGFbMF0mZGF0YVsxXTsKKwkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgbGluZXMgKi8KKwkJLy9vdXR3KHMtPnN0YXRlLGRldi0+aW9iYXNlICsgU0tFTF9ESU8pOworLy8gICAgICB9CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwkvL2RhdGFbMV09aW53KGRldi0+aW9iYXNlICsgU0tFTF9ESU8pOworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8vZGF0YVsxXT1zLT5zdGF0ZTsKKworLy8gICAgICByZXR1cm4gMjsKKy8vfQorCisvL3N0YXRpYyBpbnQgcGNpNjIwOF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKy8vICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKKy8veworLy8gICAgICBpbnQgY2hhbj1DUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworLy8gICAgICBpZihkYXRhWzBdPT1DT01FRElfT1VUUFVUKXsKKy8vICAgICAgICAgICAgICBzLT5pb19iaXRzIHw9IDE8PGNoYW47CisvLyAgICAgIH1lbHNleworLy8gICAgICAgICAgICAgIHMtPmlvX2JpdHMgJj0gfigxPDxjaGFuKTsKKy8vICAgICAgfQorCS8vb3V0dyhzLT5pb19iaXRzLGRldi0+aW9iYXNlICsgU0tFTF9ESU9fQ09ORklHKTsKKworLy8gICAgICByZXR1cm4gMTsKKy8vfQorCitzdGF0aWMgaW50IHBjaTYyMDhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCWludCBpOworCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJCWlmIChwY2lfZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTkspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwY2k2MjA4X2JvYXJkX25icjsgaSsrKSB7CisJCQkJaWYgKHBjaTYyMDhfYm9hcmRzW2ldLmRldl9pZCA9PSBwY2lfZGV2LT5kZXZpY2UpIHsKKwkJCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQkJCWlmICgoYnVzICE9IDApIHx8IChzbG90ICE9IDApKSB7CisJCQkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCQkJaWYgKHBjaV9kZXYtPmJ1cy0+bnVtYmVyCisJCQkJCQkJIT0gYnVzIHx8CisJCQkJCQkJUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pCisJCQkJCQkJIT0gc2xvdCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWRldi0+Ym9hcmRfcHRyID0gcGNpNjIwOF9ib2FyZHMgKyBpOworCQkJCQlnb3RvIGZvdW5kOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXByaW50aygiY29tZWRpJWQ6IG5vIHN1cHBvcnRlZCBib2FyZCBmb3VuZCEgKHJlcS4gYnVzL3Nsb3QgOiAlZC8lZClcbiIsCisJCWRldi0+bWlub3IsIGJ1cywgc2xvdCk7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCXByaW50aygiY29tZWRpJWQ6IGZvdW5kICVzIChiOnM6Zj0lZDolZDolZCkgLCBpcnE9JWRcbiIsCisJCWRldi0+bWlub3IsCisJCXBjaTYyMDhfYm9hcmRzW2ldLm5hbWUsCisJCXBjaV9kZXYtPmJ1cy0+bnVtYmVyLAorCQlQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbiksCisJCVBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKSwgcGNpX2Rldi0+aXJxKTsKKworCS8vIFRPRE86IFdhcm4gYWJvdXQgbm9uLXRlc3RlZCBib2FyZHMuCisJLy9zd2l0Y2goYm9hcmQtPmRldmljZV9pZCkKKwkvL3sKKwkvL307CisKKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwY2k2MjA4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgdW5zaWduZWQgbG9uZyAqaW9fYmFzZV9wdHIsCisJaW50IGRldl9taW5vcikKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGlvX3JhbmdlLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlOworCisJLy8gRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2LCBQQ0k2MjA4X0RSSVZFUl9OQU1FKSA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldl9taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKwkvLyBSZWFkIGxvY2FsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMxXS4KKwlsY3JfaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAxKTsKKwlsY3JfaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDEpOworCisJcHJpbnRrKCJjb21lZGklZDogbG9jYWwgY29uZmlnIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRseCBbMHglNGx4XVxuIiwKKwkJZGV2X21pbm9yLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlKTsKKworCS8vIFJlYWQgUENJNjIwOCByZWdpc3RlciBiYXNlIGFkZHJlc3MgW1BDSV9CQVNFX0FERFJFU1MgIzJdLgorCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfZW5kKHBjaV9kZXYsIDIpIC0gaW9fYmFzZSArIDE7CisKKwlwcmludGsoImNvbWVkaSVkOiA2MjA4IHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRseCBbMHglNGx4XVxuIiwKKwkJZGV2X21pbm9yLCBpb19iYXNlLCBpb19yYW5nZSk7CisKKwkqaW9fYmFzZV9wdHIgPSBpb19iYXNlOworCS8vZGV2cHJpdi0+aW9fcmFuZ2UgPSBpb19yYW5nZTsKKwkvL2RldnByaXYtPmlzX3ZhbGlkPTA7CisJLy9kZXZwcml2LT5sY3JfaW9fYmFzZT1sY3JfaW9fYmFzZTsKKwkvL2RldnByaXYtPmxjcl9pb19yYW5nZT1sY3JfaW9fcmFuZ2U7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k3Mjk2CitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciB0aGUgQWRsaW5rIFBDSS03Mjk2IDk2IGNoLiBkaWdpdGFsIGlvIGJvYXJkCitEZXZpY2VzOiBbQURMaW5rXSBQQ0ktNzI5NiAoYWRsX3BjaTcyOTYpCitBdXRob3I6IEpvbiBHcmllcnNvbiA8amRAcmVua28uY28udWs+CitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjA1OjU2ICswMTAwCitTdGF0dXM6IHRlc3RpbmcKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorLy8gI2luY2x1ZGUgIjgyNTMuaCIKKworI2RlZmluZSBQT1JUMUEgMAorI2RlZmluZSBQT1JUMkEgNAorI2RlZmluZSBQT1JUM0EgOAorI2RlZmluZSBQT1JUNEEgMTIKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSTcyOTYgMHg3Mjk2CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhZGxfcGNpNzI5Nl9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FETElOSywgUENJX0RFVklDRV9JRF9QQ0k3Mjk2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLAorCQkwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZGxfcGNpNzI5Nl9wY2lfdGFibGUpOworCitzdHJ1Y3QgYWRsX3BjaTcyOTZfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhZGxfcGNpNzI5Nl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFkbF9wY2k3Mjk2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFkbF9wY2k3Mjk2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkbF9wY2k3Mjk2ID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k3Mjk2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphZGxfcGNpNzI5Nl9hdHRhY2gsCisgICAgICBkZXRhY2g6YWRsX3BjaTcyOTZfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBhZGxfcGNpNzI5Nl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgYnVzLCBzbG90OworCWludCByZXQ7CisKKwlwcmludGsoImNvbWVkaTogYXR0ZW1wdCB0byBhdHRhY2guLi5cbiIpOworCXByaW50aygiY29tZWRpJWQ6IGFkbF9wY2k3NDMyXG4iLCBkZXYtPm1pbm9yKTsKKworCWRldi0+Ym9hcmRfbmFtZSA9ICJwY2k3NDMyIjsKKwlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwlzbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYWRsX3BjaTcyOTZfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCisJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSyAmJgorCQkJcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0k3Mjk2KSB7CisJCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCQkvKiByZXF1ZXN0ZWQgcGFydGljdWxhciBidXMvc2xvdCAqLworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGJ1cworCQkJCQl8fCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSAhPSBzbG90KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiYWRsX3BjaTcyOTYiKSA8IDApIHsKKwkJCQlwcmludGsoImNvbWVkaSVkOiBGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIiwgZGV2LT5taW5vcik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCWRldi0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisJCQlwcmludGsoImNvbWVkaTogYmFzZSBhZGRyICU0bHhcbiIsIGRldi0+aW9iYXNlKTsKKworCQkJLy8gZm91ciA4MjU1IGRpZ2l0YWwgaW8gc3ViZGV2aWNlcworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UpKTsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJCQlyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyBQT1JUMkEpKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCQkJcmV0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgUE9SVDNBKSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkJCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFBPUlQ0QSkpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKKwkJZGV2LT5taW5vciwgYnVzLCBzbG90KTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBhZGxfcGNpNzI5Nl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpNzQzMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJfQorCS8vIGRldGFjaCBmb3VyIDgyNTUgZGlnaXRhbCBpbyBzdWJkZXZpY2VzCisJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAxKTsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMyk7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTcyOTYsIGFkbF9wY2k3Mjk2X3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZjE3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCisKKyAgICBIYXJkd2FyZSBjb21lZGkgZHJpdmVyIGZvdCBQQ0k3NDMyIEFkbGluayBjYXJkCisgICAgQ29weXJpZ2h0IChDKSAyMDA0IE1pY2hlbCBMYWNoaW5lIDxtaWtlQG1pa2VsYWNoYWluZS5jYT4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogYWRsX3BjaTc0MzIKK0Rlc2NyaXB0aW9uOiBEcml2ZXIgZm9yIHRoZSBBZGxpbmsgUENJLTc0MzIgNjQgY2guIGlzb2xhdGVkIGRpZ2l0YWwgaW8gYm9hcmQKK0RldmljZXM6IFtBRExpbmtdIFBDSS03NDMyIChhZGxfcGNpNzQzMikKK0F1dGhvcjogTWljaGVsIExhY2hhaW5lIDxtaWtlQG1pa2VsYWNoYWluZS5jYT4KK1N0YXR1czogZXhwZXJpbWVudGFsCitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjA4OjE0ICswMTAwCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBQQ0k3NDMyX0RJICAgICAgMHgwMAorI2RlZmluZSBQQ0k3NDMyX0RPCSAgICAweDAwCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ0k3NDMyIDB4NzQzMgorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWRsX3BjaTc0MzJfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSV9ERVZJQ0VfSURfUENJNzQzMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwKKwkJMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWRsX3BjaTc0MzJfcGNpX3RhYmxlKTsKKworc3RydWN0IGFkbF9wY2k3NDMyX3ByaXZhdGUgeworCWludCBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGFkbF9wY2k3NDMyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWRsX3BjaTc0MzIgPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWRsX3BjaTc0MzIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmFkbF9wY2k3NDMyX2F0dGFjaCwKKyAgICAgIGRldGFjaDphZGxfcGNpNzQzMl9kZXRhY2gsCit9OworCisvKiBEaWdpdGFsIElPICovCisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qICAgICAgICAgICAgKi8KKworc3RhdGljIGludCBhZGxfcGNpNzQzMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgYnVzLCBzbG90OworCisJcHJpbnRrKCJjb21lZGk6IGF0dGVtcHQgdG8gYXR0YWNoLi4uXG4iKTsKKwlwcmludGsoImNvbWVkaSVkOiBhZGxfcGNpNzQzMlxuIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpNzQzMiI7CisJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGFkbF9wY2k3NDMyX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKKwkJCXBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJNzQzMikgeworCQkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBidXMKKwkJCQkJfHwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0gc2xvdCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k3NDMyIikgPCAwKSB7CisJCQkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJZGV2LT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKwkJCXByaW50aygiY29tZWRpOiBiYXNlIGFkZHIgJTRseFxuIiwgZGV2LT5pb2Jhc2UpOworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSAzMjsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJCQlzLT5pb19iaXRzID0gMHgwMDAwMDAwMDsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2JpdHMgPSBhZGxfcGNpNzQzMl9kaV9pbnNuX2JpdHM7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IDMyOworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSAzMjsKKwkJCXMtPmlvX2JpdHMgPSAweGZmZmZmZmZmOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmluc25fYml0cyA9IGFkbF9wY2k3NDMyX2RvX2luc25fYml0czsKKworCQkJcHJpbnRrKCJjb21lZGk6IGF0dGFjaGVkXG4iKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCQlkZXYtPm1pbm9yLCBidXMsIHNsb3QpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2k3NDMyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgeworCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGxfcGNpNzQzMl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXByaW50aygiY29tZWRpOiBwY2k3NDMyX2RvX2luc25fYml0cyBjYWxsZWRcbiIpOworCXByaW50aygiY29tZWRpOiBkYXRhMDogJTh4IGRhdGExOiAlOHhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKworCQlwcmludGsoImNvbWVkaTogb3V0OiAlOHggb24gaW9iYXNlICU0bHhcbiIsIHMtPnN0YXRlLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0k3NDMyX0RPKTsKKwkJb3V0bChzLT5zdGF0ZSAmIDB4ZmZmZmZmZmYsIGRldi0+aW9iYXNlICsgUENJNzQzMl9ETyk7CisJfQorCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcHJpbnRrKCJjb21lZGk6IHBjaTc0MzJfZGlfaW5zbl9iaXRzIGNhbGxlZFxuIik7CisJcHJpbnRrKCJjb21lZGk6IGRhdGEwOiAlOHggZGF0YTE6ICU4eFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k3NDMyX0RJKSAmIDB4ZmZmZmZmZmY7CisJcHJpbnRrKCJjb21lZGk6IGRhdGExICU4eFxuIiwgZGF0YVsxXSk7CisKKwlyZXR1cm4gMjsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTc0MzIsIGFkbF9wY2k3NDMyX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpODE2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjkwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYwpAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpODE2NC5jCisKKyAgICBIYXJkd2FyZSBjb21lZGkgZHJpdmVyIGZvdCBQQ0ktODE2NCBBZGxpbmsgY2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNCBNaWNoZWwgTGFjaGluZSA8bWlrZUBtaWtlbGFjaGFpbmUuY2E+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k4MTY0CitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciB0aGUgQWRsaW5rIFBDSS04MTY0IDQgQXhlcyBNb3Rpb24gQ29udHJvbCBib2FyZAorRGV2aWNlczogW0FETGlua10gUENJLTgxNjQgKGFkbF9wY2k4MTY0KQorQXV0aG9yOiBNaWNoZWwgTGFjaGFpbmUgPG1pa2VAbWlrZWxhY2hhaW5lLmNhPgorU3RhdHVzOiBleHBlcmltZW50YWwKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6MTA6MzIgKzAxMDAKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1My5oIgorCisjZGVmaW5lIFBDSTgxNjRfQVhJU19YICAweDAwCisjZGVmaW5lIFBDSTgxNjRfQVhJU19ZICAweDA4CisjZGVmaW5lIFBDSTgxNjRfQVhJU19aICAweDEwCisjZGVmaW5lIFBDSTgxNjRfQVhJU19VICAweDE4CisKKyNkZWZpbmUgUENJODE2NF9NU1RTCTB4MDAKKyNkZWZpbmUgUENJODE2NF9TU1RTICAgIDB4MDIKKyNkZWZpbmUgUENJODE2NF9CVUYwICAgIDB4MDQKKyNkZWZpbmUgUENJODE2NF9CVUYxICAgIDB4MDYKKworI2RlZmluZSBQQ0k4MTY0X0NNRCAgICAgMHgwMAorI2RlZmluZSBQQ0k4MTY0X09UUCAgICAgMHgwMgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJODE2NCAweDgxNjQKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFkbF9wY2k4MTY0X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0lfREVWSUNFX0lEX1BDSTgxNjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsCisJCTAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFkbF9wY2k4MTY0X3BjaV90YWJsZSk7CisKK3N0cnVjdCBhZGxfcGNpODE2NF9wcml2YXRlIHsKKwlpbnQgZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhZGxfcGNpODE2NF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkbF9wY2k4MTY0ID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k4MTY0IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphZGxfcGNpODE2NF9hdHRhY2gsCisgICAgICBkZXRhY2g6YWRsX3BjaTgxNjRfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfbXN0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fcmVhZF9zc3RzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX2J1ZjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfYnVmMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9vdHAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2J1ZjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2J1ZjEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgYnVzLCBzbG90OworCisJcHJpbnRrKCJjb21lZGk6IGF0dGVtcHQgdG8gYXR0YWNoLi4uXG4iKTsKKwlwcmludGsoImNvbWVkaSVkOiBhZGxfcGNpODE2NFxuIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpODE2NCI7CisJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGFkbF9wY2k4MTY0X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKKwkJCXBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJODE2NCkgeworCQkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBidXMKKwkJCQkJfHwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0gc2xvdCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k4MTY0IikgPCAwKSB7CisJCQkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJZGV2LT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKwkJCXByaW50aygiY29tZWRpOiBiYXNlIGFkZHIgJTRseFxuIiwgZGV2LT5pb2Jhc2UpOworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9QUk9DOworCQkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQkJcy0+bl9jaGFuID0gNDsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSA0OworCQkJLy9zLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9heGlzOworCQkJcy0+aW5zbl9yZWFkID0gYWRsX3BjaTgxNjRfaW5zbl9yZWFkX21zdHM7CisJCQlzLT5pbnNuX3dyaXRlID0gYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9jbWQ7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BST0M7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCQlzLT5uX2NoYW4gPSA0OworCQkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJCQkvL3MtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F4aXM7CisJCQlzLT5pbnNuX3JlYWQgPSBhZGxfcGNpODE2NF9pbnNuX3JlYWRfc3N0czsKKwkJCXMtPmluc25fd3JpdGUgPSBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX290cDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDQ7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQkJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwkJCS8vcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXhpczsKKwkJCXMtPmluc25fcmVhZCA9IGFkbF9wY2k4MTY0X2luc25fcmVhZF9idWYwOworCQkJcy0+aW5zbl93cml0ZSA9IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfYnVmMDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDQ7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQkJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwkJCS8vcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXhpczsKKwkJCXMtPmluc25fcmVhZCA9IGFkbF9wY2k4MTY0X2luc25fcmVhZF9idWYxOworCQkJcy0+aW5zbl93cml0ZSA9IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfYnVmMTsKKworCQkJcHJpbnRrKCJjb21lZGk6IGF0dGFjaGVkXG4iKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCQlkZXYtPm1pbm9yLCBidXMsIHNsb3QpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2k4MTY0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgeworCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfbXN0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJZGF0YVswXSA9IGludyhkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9NU1RTKTsKKwlwcmludGsoImNvbWVkaTogcGNpODE2NCBNU1RTIHJlYWQgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fcmVhZF9zc3RzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlkYXRhWzBdID0gaW53KGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X1NTVFMpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IFNTVFMgcmVhZCAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX2J1ZjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBheGlzLCBheGlzX3JlZzsKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCWRhdGFbMF0gPSBpbncoZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQlVGMCk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgQlVGMCByZWFkIC0+ICUwNFg6JTA0WCBvbiBheGlzICVzXG4iLCBkYXRhWzBdLAorCQlkYXRhWzFdLCBheGlzbmFtZSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfYnVmMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlkYXRhWzBdID0gaW53KGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X0JVRjEpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IEJVRjEgcmVhZCAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBheGlzLCBheGlzX3JlZzsKKworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJb3V0dyhkYXRhWzBdLCBkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9DTUQpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IENNRCB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9vdHAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBheGlzLCBheGlzX3JlZzsKKworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJb3V0dyhkYXRhWzBdLCBkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9PVFApOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IE9UUCB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9idWYwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCW91dHcoZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQlVGMCk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgQlVGMCB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9idWYxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCW91dHcoZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQlVGMSk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgQlVGMSB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k4MTY0LCBhZGxfcGNpODE2NF9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE2MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKQEAgLTAsMCArMSwxMzkxIEBACisvKgorCisgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jCisKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgUENJOTExMSBBRExpbmsgY2FyZHM6CisKKyAgICAgUENJLTkxMTFIUgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBFbW1hbnVlbCBQYWNhdWQgPGVtbWFudWVsLnBhY2F1ZEB1bml2LXBvaXRpZXJzLmZyPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorRHJpdmVyOiBhZGxfcGNpOTExMQorRGVzY3JpcHRpb246IEFkbGluayBQQ0ktOTExMUhSCitBdXRob3I6IEVtbWFudWVsIFBhY2F1ZCA8ZW1tYW51ZWwucGFjYXVkQHVuaXYtcG9pdGllcnMuZnI+CitEZXZpY2VzOiBbQURMaW5rXSBQQ0ktOTExMUhSIChhZGxfcGNpOTExMSkKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK1N1cHBvcnRzOgorCisgIC0gYWlfaW5zbiByZWFkCisgIC0gYW9faW5zbiByZWFkL3dyaXRlCisgIC0gZGlfaW5zbiByZWFkCisgIC0gZG9faW5zbiByZWFkL3dyaXRlCisgIC0gYWlfZG9fY21kIG1vZGUgd2l0aCB0aGUgZm9sbG93aW5nIHNvdXJjZXM6CisKKyAgICAtIHN0YXJ0X3NyYyAJCVRSSUdfTk9XCisgICAgLSBzY2FuX2JlZ2luX3NyYyAJCVRSSUdfRk9MTE9XCVRSSUdfVElNRVIJVFJJR19FWFQKKyAgICAtIGNvbnZlcnRfc3JjCQkJCVRSSUdfVElNRVIJVFJJR19FWFQKKyAgICAtIHNjYW5fZW5kX3NyYwkJVFJJR19DT1VOVAorICAgIC0gc3RvcF9zcmMJCQlUUklHX0NPVU5UCVRSSUdfTk9ORQorCisgICAgVGhlIHNjYW5uZWQgY2hhbm5lbHMgbXVzdCBiZSBjb25zZWN1dGl2ZSBhbmQgc3RhcnQgZnJvbSAwLiBUaGV5IG11c3QKKyAgICBhbGwgaGF2ZSB0aGUgc2FtZSByYW5nZSBhbmQgYXJlZi4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorCisgICAgWzBdIC0gUENJIGJ1cyBudW1iZXIgKG9wdGlvbmFsKQorICAgIFsxXSAtIFBDSSBzbG90IG51bWJlciAob3B0aW9uYWwpCisKKyAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQorICAgIGRldmljZSB3aWxsIGJlIHVzZWQuCisKKyovCisKKy8qCitDSEFOR0VMT0c6CisKKyAgMjAwNS8wMi8xNyBFeHRlbmQgQUkgc3RyZWFtaW5nIGNhcGFiaWxpdGllcy4gTm93LCBzY2FuX2JlZ2luX2FyZyBjYW4gYmUKKyAgYSBtdWx0aXBsZSBvZiBjaGFubGlzdF9sZW4qY29udmVydF9hcmcuCisgIDIwMDIvMDIvMTkgRml4ZWQgdGhlIHR3bydzIGNvbXBsZW1lbnQgY29udmVyc2lvbiBpbiBwY2k5MTExXyhocl8pYWlfZ2V0X2RhdGEuCisgIDIwMDIvMDIvMTggQWRkZWQgZXh0ZXJuYWwgdHJpZ2dlciBzdXBwb3J0IGZvciBhbmFsb2cgaW5wdXQuCisKK1RPRE86CisKKyAgLSBSZWFsbHkgdGVzdCBpbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5LgorICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgUENJLTkxMTFERyB3aXRoIGEgcHJvYmUgcm91dGluZSB0byBpZGVudGlmeSB0aGUgY2FyZCB0eXBlCisgICAgKHBlcmhhcHMgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2hhbm5lbCBudW1iZXIgcmVhZGJhY2sgb2YgdGhlIEEvRCBEYXRhIHJlZ2lzdGVyKS4KKyAgLSBBZGQgZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgc3VwcG9ydC4KKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgUENJOTExMV9EUklWRVJfTkFNRSAJImFkbF9wY2k5MTExIgorI2RlZmluZSBQQ0k5MTExX0hSX0RFVklDRV9JRCAJMHg5MTExCisKKy8qICBUT0RPOiBBZGQgb3RoZXIgcGNpOTExMSBib2FyZCBpZCAqLworCisjZGVmaW5lIFBDSTkxMTFfSU9fUkFOR0UgCTB4MDEwMAorCisjZGVmaW5lIFBDSTkxMTFfRklGT19IQUxGX1NJWkUJNTEyCisKKyNkZWZpbmUgUENJOTExMV9BSV9DSEFOTkVMX05CUgkJCTE2CisKKyNkZWZpbmUgUENJOTExMV9BSV9SRVNPTFVUSU9OCQkJMTIKKyNkZWZpbmUgUENJOTExMV9BSV9SRVNPTFVUSU9OX01BU0sJCTB4MEZGRgorI2RlZmluZSBQQ0k5MTExX0FJX1JFU09MVVRJT05fMl9DTVBfQklUCQkweDA4MDAKKworI2RlZmluZSBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT04JCTE2CisjZGVmaW5lIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLCQkweEZGRkYKKyNkZWZpbmUgUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAkweDgwMDAKKworI2RlZmluZSBQQ0k5MTExX0FJX0FDUVVJU0lUSU9OX1BFUklPRF9NSU5fTlMJMTAwMDAKKyNkZWZpbmUgUENJOTExMV9BT19DSEFOTkVMX05CUgkJCTEKKyNkZWZpbmUJUENJOTExMV9BT19SRVNPTFVUSU9OCQkJMTIKKyNkZWZpbmUgUENJOTExMV9BT19SRVNPTFVUSU9OX01BU0sJCTB4MEZGRgorI2RlZmluZSBQQ0k5MTExX0RJX0NIQU5ORUxfTkJSCQkJMTYKKyNkZWZpbmUJUENJOTExMV9ET19DSEFOTkVMX05CUgkJCTE2CisjZGVmaW5lIFBDSTkxMTFfRE9fTUFTSwkJCQkweEZGRkYKKworI2RlZmluZSBQQ0k5MTExX1JBTkdFX1NFVFRJTkdfREVMQVkJCTEwCisjZGVmaW5lIFBDSTkxMTFfQUlfSU5TVEFOVF9SRUFEX1VERUxBWV9VUwkyCisjZGVmaW5lIFBDSTkxMTFfQUlfSU5TVEFOVF9SRUFEX1RJTUVPVVQJCTEwMAorCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DTE9DS19QRVJJT0RfTlMJCTUwMAorCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSXzAJCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSXzEJCQkweDQwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSXzIJCQkweDgwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSX0xBVENICQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9SRUFEX0xPQURfTFNCX09OTFkJCTB4MTAKKyNkZWZpbmUgUENJOTExMV84MjU0X1JFQURfTE9BRF9NU0JfT05MWQkJMHgyMAorI2RlZmluZSBQQ0k5MTExXzgyNTRfUkVBRF9MT0FEX0xTQl9NU0IJCTB4MzAKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMAkJCTB4MDAKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMQkJCTB4MDIKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMgkJCTB4MDQKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMwkJCTB4MDYKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfNAkJCTB4MDgKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfNQkJCTB4MEEKKyNkZWZpbmUgUENJOTExMV84MjU0X0JJTkFSWV9DT1VOVEVSCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9CQ0RfQ09VTlRFUgkJMHgwMQorCisvKiBJTyBhZGRyZXNzIG1hcCAqLworCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSAJCQkweDAwCS8qICBBRCBEYXRhIHN0b3JlZCBpbiBGSUZPICovCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfREFfT1VUUFVUIAkJCTB4MDAKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9ESUdJVEFMX0lPIAkJCTB4MDIKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9FWFRFTkRFRF9JT19QT1JUUyAJCTB4MDQKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX0NPTlRST0wgCQkweDA2CS8qICBDaGFubmVsIHNlbGVjdGlvbiAqLworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfUkVBREJBQ0sgCQkweDA2CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFIAkJMHgwOAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSyAJCTB4MDgKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9UUklHR0VSX01PREVfQ09OVFJPTCAJCTB4MEEKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSyAJMHgwQQorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIgCQkweDBFCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wgCQkweDBDCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzAJCQkweDQwCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzEJCQkweDQyCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzIgCQkwWDQ0CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT05UUk9MCQkJMHg0NgorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DTEVBUiAJCTB4NDgKKworI2RlZmluZSBQQ0k5MTExX1RSSUdHRVJfTUFTSyAJCQkJMHgwRgorI2RlZmluZSBQQ0k5MTExX1BUUkdfT0ZGIAkJCQkoMCA8PCAzKQorI2RlZmluZSBQQ0k5MTExX1BUUkdfT04gCQkJCSgxIDw8IDMpCisjZGVmaW5lIFBDSTkxMTFfRUlUU19FWFRFUk5BTAkJCQkoMSA8PCAyKQorI2RlZmluZSBQQ0k5MTExX0VJVFNfSU5URVJOQUwJCQkJKDAgPDwgMikKKyNkZWZpbmUgUENJOTExMV9UUFNUX1NPRlRXQVJFX1RSSUdHRVIJCQkoMCA8PCAxKQorI2RlZmluZSBQQ0k5MTExX1RQU1RfVElNRVJfUEFDRVIJCQkoMSA8PCAxKQorI2RlZmluZSBQQ0k5MTExX0FTQ0FOX09OCQkJCSgxIDw8IDApCisjZGVmaW5lIFBDSTkxMTFfQVNDQU5fT0ZGCQkJCSgwIDw8IDApCisKKyNkZWZpbmUgUENJOTExMV9JU0MwX1NFVF9JUlFfT05fRU5ESU5HX09GX0FEX0NPTlZFUlNJT04gKDAgPDwgMCkKKyNkZWZpbmUgUENJOTExMV9JU0MwX1NFVF9JUlFfT05fRklGT19IQUxGX0ZVTEwJCSgxIDw8IDApCisjZGVmaW5lIFBDSTkxMTFfSVNDMV9TRVRfSVJRX09OX1RJTUVSX1RJQ0sgIAkJKDAgPDwgMSkKKyNkZWZpbmUgUENJOTExMV9JU0MxX1NFVF9JUlFfT05fRVhUX1RSRyAJCSgxIDw8IDEpCisjZGVmaW5lIFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUgCQkJKDAgPDwgMikKKyNkZWZpbmUgUENJOTExMV9GRkVOX1NFVF9GSUZPX0RJU0FCTEUJCQkoMSA8PCAyKQorCisjZGVmaW5lIFBDSTkxMTFfQ0hBTk5FTF9NQVNLCQkJCTB4MEYKKworI2RlZmluZSBQQ0k5MTExX1JBTkdFX01BU0sJCQkJMHgwNworI2RlZmluZSBQQ0k5MTExX0ZJRk9fRU1QVFlfTUFTSwkJCQkweDEwCisjZGVmaW5lIFBDSTkxMTFfRklGT19IQUxGX0ZVTExfTUFTSwkJCTB4MjAKKyNkZWZpbmUgUENJOTExMV9GSUZPX0ZVTExfTUFTSwkJCQkweDQwCisjZGVmaW5lIFBDSTkxMTFfQURfQlVTWV9NQVNLCQkJCTB4ODAKKworI2RlZmluZSBQQ0k5MTExX0lPX0JBU0UgZGV2LT5pb2Jhc2UKKworLyoKKyAqIERlZmluZSBpbmxpbmVkIGZ1bmN0aW9uCisgKi8KKworI2RlZmluZSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpIFwKKyAgKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSykmMHgwRikKKworI2RlZmluZSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncykgXAorICBvdXRiKGZsYWdzLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1RSSUdHRVJfTU9ERV9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX2dldCgpIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0spID4+IDQpICYweDAzKQorCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX3NldChmbGFncykgXAorICBvdXRiKGZsYWdzLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2NsZWFyKCkgXAorICBvdXRiKDAsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NMRUFSKQorCisjZGVmaW5lIHBjaTkxMTFfc29mdHdhcmVfdHJpZ2dlcigpIFwKKyAgb3V0YigwLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIpCisKKyNkZWZpbmUgcGNpOTExMV9maWZvX3Jlc2V0KCkgXAorICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOyBcCisgIG91dGIoUENJOTExMV9GRkVOX1NFVF9GSUZPX0RJU0FCTEUsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOyBcCisgIG91dGIoUENJOTExMV9GRkVOX1NFVF9GSUZPX0VOQUJMRSxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCkKKworI2RlZmluZSBwY2k5MTExX2lzX2ZpZm9fZnVsbCgpIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAorICAgIFBDSTkxMTFfRklGT19GVUxMX01BU0spPT0wKQorCisjZGVmaW5lIHBjaTkxMTFfaXNfZmlmb19oYWxmX2Z1bGwoKSBcCisgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKKyAgICBQQ0k5MTExX0ZJRk9fSEFMRl9GVUxMX01BU0spPT0wKQorCisjZGVmaW5lIHBjaTkxMTFfaXNfZmlmb19lbXB0eSgpIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAorICAgIFBDSTkxMTFfRklGT19FTVBUWV9NQVNLKT09MCkKKworI2RlZmluZSBwY2k5MTExX2FpX2NoYW5uZWxfc2V0KGNoYW5uZWwpIFwKKyAgb3V0YigoY2hhbm5lbCkmUENJOTExMV9DSEFOTkVMX01BU0ssUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfYWlfY2hhbm5lbF9nZXQoKSBcCisgIGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX1JFQURCQUNLKSZQQ0k5MTExX0NIQU5ORUxfTUFTSworCisjZGVmaW5lIHBjaTkxMTFfYWlfcmFuZ2Vfc2V0KHJhbmdlKSBcCisgIG91dGIoKHJhbmdlKSZQQ0k5MTExX1JBTkdFX01BU0ssUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFKQorCisjZGVmaW5lIHBjaTkxMTFfYWlfcmFuZ2VfZ2V0KCkgXAorICBpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSZQQ0k5MTExX1JBTkdFX01BU0sKKworI2RlZmluZSBwY2k5MTExX2FpX2dldF9kYXRhKCkgXAorICAoKGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9GSUZPX1ZBTFVFKT4+NCkmUENJOTExMV9BSV9SRVNPTFVUSU9OX01BU0spIFwKKyAgXiBQQ0k5MTExX0FJX1JFU09MVVRJT05fMl9DTVBfQklUCisKKyNkZWZpbmUgcGNpOTExMV9ocl9haV9nZXRfZGF0YSgpIFwKKyAgKGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9GSUZPX1ZBTFVFKSAmIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLKSBcCisgIF4gUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAorCisjZGVmaW5lIHBjaTkxMTFfYW9fc2V0X2RhdGEoZGF0YSkgXAorICBvdXR3KGRhdGEmUENJOTExMV9BT19SRVNPTFVUSU9OX01BU0ssUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfREFfT1VUUFVUKQorCisjZGVmaW5lIHBjaTkxMTFfZGlfZ2V0X2JpdHMoKSBcCisgIGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9ESUdJVEFMX0lPKQorCisjZGVmaW5lIHBjaTkxMTFfZG9fc2V0X2JpdHMoYml0cykgXAorICBvdXR3KGJpdHMsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTykKKworI2RlZmluZSBwY2k5MTExXzgyNTRfY29udHJvbF9zZXQoZmxhZ3MpIFwKKyAgb3V0YihmbGFncyxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPTlRST0wpCisKKyNkZWZpbmUgcGNpOTExMV84MjU0X2NvdW50ZXJfMF9zZXQoZGF0YSkgXAorICBvdXRiKGRhdGEgJiAweEZGLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMCk7IFwKKyAgb3V0YiggKGRhdGEgPj4gOCkgJiAweEZGLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMCkKKworI2RlZmluZSBwY2k5MTExXzgyNTRfY291bnRlcl8xX3NldChkYXRhKSBcCisgIG91dGIoZGF0YSAmIDB4RkYsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8xKTsgXAorICBvdXRiKCAoZGF0YSA+PiA4KSAmIDB4RkYsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8xKQorCisjZGVmaW5lIHBjaTkxMTFfODI1NF9jb3VudGVyXzJfc2V0KGRhdGEpIFwKKyAgb3V0YihkYXRhICYgMHhGRiwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzIpOyBcCisgIG91dGIoIChkYXRhID4+IDgpICYgMHhGRiwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzIpCisKKy8qICBGdW5jdGlvbiBwcm90b3R5cGVzICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2k5MTExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBwY2k5MTExX2FpX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNpOTExMV9ocl9haV9yYW5nZSA9IHsKKwk1LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSkKKwkJfQorfTsKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTkxMTFfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSTkxMTFfSFJfREVWSUNFX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLAorCQkwLCAwfSwKKwkvKiB7IFBDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0k5MTExX0hHX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAqLworCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTkxMTFfcGNpX3RhYmxlKTsKKworLyogICovCisvKiAgQm9hcmQgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUgKi8KKy8qICAqLworCitzdHJ1Y3QgcGNpOTExMV9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogIGRyaXZlciBuYW1lICovCisJaW50IGRldmljZV9pZDsKKwlpbnQgYWlfY2hhbm5lbF9uYnI7CS8qICBudW0gb2YgQS9EIGNoYW5zICovCisJaW50IGFvX2NoYW5uZWxfbmJyOwkvKiAgbnVtIG9mIEQvQSBjaGFucyAqLworCWludCBhaV9yZXNvbHV0aW9uOwkvKiAgcmVzb2x1dGlvbiBvZiBBL0QgKi8KKwlpbnQgYWlfcmVzb2x1dGlvbl9tYXNrOworCWludCBhb19yZXNvbHV0aW9uOwkvKiAgcmVzb2x1dGlvbiBvZiBEL0EgKi8KKwlpbnQgYW9fcmVzb2x1dGlvbl9tYXNrOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV9saXN0OwkvKiAgcmFuZ2VsaXN0IGZvciBBL0QgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdDsJLyogIHJhbmdlbGlzdCBmb3IgRC9BICovCisJdW5zaWduZWQgaW50IGFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaTkxMTFfYm9hcmQgcGNpOTExMV9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaTkxMTFfaHIiLAorCSAgICAgIGRldmljZV9pZDpQQ0k5MTExX0hSX0RFVklDRV9JRCwKKwkgICAgICBhaV9jaGFubmVsX25icjpQQ0k5MTExX0FJX0NIQU5ORUxfTkJSLAorCSAgICAgIGFvX2NoYW5uZWxfbmJyOlBDSTkxMTFfQU9fQ0hBTk5FTF9OQlIsCisJICAgICAgYWlfcmVzb2x1dGlvbjpQQ0k5MTExX0hSX0FJX1JFU09MVVRJT04sCisJICAgICAgYWlfcmVzb2x1dGlvbl9tYXNrOlBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLLAorCSAgICAgIGFvX3Jlc29sdXRpb246UENJOTExMV9BT19SRVNPTFVUSU9OLAorCSAgICAgIGFvX3Jlc29sdXRpb25fbWFzazpQQ0k5MTExX0FPX1JFU09MVVRJT05fTUFTSywKKwkgICAgICBhaV9yYW5nZV9saXN0OiZwY2k5MTExX2hyX2FpX3JhbmdlLAorCSAgICAgIGFvX3JhbmdlX2xpc3Q6JnJhbmdlX2JpcG9sYXIxMCwKKyAgICAgIGFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnM6UENJOTExMV9BSV9BQ1FVSVNJVElPTl9QRVJJT0RfTUlOX05TfQorfTsKKworI2RlZmluZSBwY2k5MTExX2JvYXJkX25iciBcCisgIChzaXplb2YocGNpOTExMV9ib2FyZHMpL3NpemVvZihzdHJ1Y3QgcGNpOTExMV9ib2FyZCkpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBwY2k5MTExX2RyaXZlciA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOlBDSTkxMTFfRFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpOTExMV9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpOTExMV9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKHBjaTkxMTFfZHJpdmVyLCBwY2k5MTExX3BjaV90YWJsZSk7CisKKy8qICBQcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisKK3N0cnVjdCBwY2k5MTExX3ByaXZhdGVfZGF0YSB7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBpb19yYW5nZTsJLyogIFBDSTY1MDMgaW8gcmFuZ2UgKi8KKworCXVuc2lnbmVkIGxvbmcgbGNyX2lvX2Jhc2U7CS8qICBMb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbGNyX2lvX3JhbmdlOworCisJaW50IHN0b3BfY291bnRlcjsKKwlpbnQgc3RvcF9pc19ub25lOworCisJdW5zaWduZWQgaW50IHNjYW5fZGVsYXk7CisJdW5zaWduZWQgaW50IGNoYW5saXN0X2xlbjsKKwl1bnNpZ25lZCBpbnQgY2h1bmtfY291bnRlcjsKKwl1bnNpZ25lZCBpbnQgY2h1bmtfbnVtX3NhbXBsZXM7CisKKwlpbnQgYW9fcmVhZGJhY2s7CS8qICBMYXN0IHdyaXR0ZW4gYW5hbG9nIG91dHB1dCBkYXRhICovCisKKwlpbnQgdGltZXJfZGl2aXNvcl8xOwkvKiAgRGl2aXNvciB2YWx1ZXMgZm9yIHRoZSA4MjU0IHRpbWVyIHBhY2VyICovCisJaW50IHRpbWVyX2Rpdmlzb3JfMjsKKworCWludCBpc192YWxpZDsJCS8qICBJcyBkZXZpY2UgdmFsaWQgKi8KKworCXNob3J0IGFpX2JvdW5jZV9idWZmZXJbMiAqIFBDSTkxMTFfRklGT19IQUxGX1NJWkVdOworfTsKKworI2RlZmluZSBkZXZfcHJpdmF0ZSAJKChzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEgKilkZXYtPnByaXZhdGUpCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBQTFg5MDUwIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBQTFg5MDUwX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MIDB4NGMKKworI2RlZmluZSBQTFg5MDUwX0xJTlRJMV9FTkFCTEUJCSgxIDw8IDApCisjZGVmaW5lIFBMWDkwNTBfTElOVEkxX0FDVElWRV9ISUdICSgxIDw8IDEpCisjZGVmaW5lIFBMWDkwNTBfTElOVEkxX1NUQVRVUwkJKDEgPDwgMikKKyNkZWZpbmUgUExYOTA1MF9MSU5USTJfRU5BQkxFCQkoMSA8PCAzKQorI2RlZmluZSBQTFg5MDUwX0xJTlRJMl9BQ1RJVkVfSElHSAkoMSA8PCA0KQorI2RlZmluZSBQTFg5MDUwX0xJTlRJMl9TVEFUVVMJCSgxIDw8IDUpCisjZGVmaW5lIFBMWDkwNTBfUENJX0lOVEVSUlVQVF9FTkFCTEUJKDEgPDwgNikKKyNkZWZpbmUgUExYOTA1MF9TT0ZUV0FSRV9JTlRFUlJVUFQJKDEgPDwgNykKKworc3RhdGljIHZvaWQgcGx4OTA1MF9pbnRlcnJ1cHRfY29udHJvbCh1bnNpZ25lZCBsb25nIGlvX2Jhc2UsCisJYm9vbCBMSU5UaTFfZW5hYmxlLAorCWJvb2wgTElOVGkxX2FjdGl2ZV9oaWdoLAorCWJvb2wgTElOVGkyX2VuYWJsZSwgYm9vbCBMSU5UaTJfYWN0aXZlX2hpZ2gsIGJvb2wgaW50ZXJydXB0X2VuYWJsZSkKK3sKKwlpbnQgZmxhZ3MgPSAwOworCisJaWYgKExJTlRpMV9lbmFibGUpCisJCWZsYWdzIHw9IFBMWDkwNTBfTElOVEkxX0VOQUJMRTsKKwlpZiAoTElOVGkxX2FjdGl2ZV9oaWdoKQorCQlmbGFncyB8PSBQTFg5MDUwX0xJTlRJMV9BQ1RJVkVfSElHSDsKKwlpZiAoTElOVGkyX2VuYWJsZSkKKwkJZmxhZ3MgfD0gUExYOTA1MF9MSU5USTJfRU5BQkxFOworCWlmIChMSU5UaTJfYWN0aXZlX2hpZ2gpCisJCWZsYWdzIHw9IFBMWDkwNTBfTElOVEkyX0FDVElWRV9ISUdIOworCisJaWYgKGludGVycnVwdF9lbmFibGUpCisJCWZsYWdzIHw9IFBMWDkwNTBfUENJX0lOVEVSUlVQVF9FTkFCTEU7CisKKwlvdXRiKGZsYWdzLCBpb19iYXNlICsgUExYOTA1MF9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7Cit9CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBNSVNDRUxMQU5FT1VTIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIDgyNTQgdGltZXIgKi8KKworc3RhdGljIHZvaWQgcGNpOTExMV90aW1lcl9zZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcGNpOTExMV84MjU0X2NvbnRyb2xfc2V0KFBDSTkxMTFfODI1NF9DT1VOVEVSXzAgfAorCQlQQ0k5MTExXzgyNTRfUkVBRF9MT0FEX0xTQl9NU0IgfAorCQlQQ0k5MTExXzgyNTRfTU9ERV8wIHwgUENJOTExMV84MjU0X0JJTkFSWV9DT1VOVEVSKTsKKworCXBjaTkxMTFfODI1NF9jb250cm9sX3NldChQQ0k5MTExXzgyNTRfQ09VTlRFUl8xIHwKKwkJUENJOTExMV84MjU0X1JFQURfTE9BRF9MU0JfTVNCIHwKKwkJUENJOTExMV84MjU0X01PREVfMiB8IFBDSTkxMTFfODI1NF9CSU5BUllfQ09VTlRFUik7CisKKwlwY2k5MTExXzgyNTRfY29udHJvbF9zZXQoUENJOTExMV84MjU0X0NPVU5URVJfMiB8CisJCVBDSTkxMTFfODI1NF9SRUFEX0xPQURfTFNCX01TQiB8CisJCVBDSTkxMTFfODI1NF9NT0RFXzIgfCBQQ0k5MTExXzgyNTRfQklOQVJZX0NPVU5URVIpOworCisJY29tZWRpX3VkZWxheSgxKTsKKworCXBjaTkxMTFfODI1NF9jb3VudGVyXzJfc2V0KGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzIpOworCXBjaTkxMTFfODI1NF9jb3VudGVyXzFfc2V0KGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzEpOworfQorCitlbnVtIHBjaTkxMTFfdHJpZ2dlcl9zb3VyY2VzIHsKKwlzb2Z0d2FyZSwKKwl0aW1lcl9wYWNlciwKKwlleHRlcm5hbAorfTsKKworc3RhdGljIHZvaWQgcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJZW51bSBwY2k5MTExX3RyaWdnZXJfc291cmNlcyBzb3VyY2UpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpICYgMHgwOTsKKworCXN3aXRjaCAoc291cmNlKSB7CisJY2FzZSBzb2Z0d2FyZToKKwkJZmxhZ3MgfD0gUENJOTExMV9FSVRTX0lOVEVSTkFMIHwgUENJOTExMV9UUFNUX1NPRlRXQVJFX1RSSUdHRVI7CisJCWJyZWFrOworCisJY2FzZSB0aW1lcl9wYWNlcjoKKwkJZmxhZ3MgfD0gUENJOTExMV9FSVRTX0lOVEVSTkFMIHwgUENJOTExMV9UUFNUX1RJTUVSX1BBQ0VSOworCQlicmVhazsKKworCWNhc2UgZXh0ZXJuYWw6CisJCWZsYWdzIHw9IFBDSTkxMTFfRUlUU19FWFRFUk5BTDsKKwkJYnJlYWs7CisJfQorCisJcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9zZXQoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwY2k5MTExX3ByZXRyaWdnZXJfc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBib29sIHByZXRyaWdnZXIpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpICYgMHgwNzsKKworCWlmIChwcmV0cmlnZ2VyKQorCQlmbGFncyB8PSBQQ0k5MTExX1BUUkdfT047CisKKwlwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTkxMTFfYXV0b3NjYW5fc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBib29sIGF1dG9zY2FuKQoreworCWludCBmbGFnczsKKworCWZsYWdzID0gcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSAmIDB4MGU7CisKKwlpZiAoYXV0b3NjYW4pCisJCWZsYWdzIHw9IFBDSTkxMTFfQVNDQU5fT047CisKKwlwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncyk7Cit9CisKK2VudW0gcGNpOTExMV9JU0MwX3NvdXJjZXMgeworCWlycV9vbl9lb2MsCisJaXJxX29uX2ZpZm9faGFsZl9mdWxsCit9OworCitlbnVtIHBjaTkxMTFfSVNDMV9zb3VyY2VzIHsKKwlpcnFfb25fdGltZXJfdGljaywKKwlpcnFfb25fZXh0ZXJuYWxfdHJpZ2dlcgorfTsKKworc3RhdGljIHZvaWQgcGNpOTExMV9pbnRlcnJ1cHRfc291cmNlX3NldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwllbnVtIHBjaTkxMTFfSVNDMF9zb3VyY2VzIGlycV8wX3NvdXJjZSwgZW51bSBwY2k5MTExX0lTQzFfc291cmNlcyBpcnFfMV9zb3VyY2UpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwY2k5MTExX2ludGVycnVwdF9hbmRfZmlmb19nZXQoKSAmIDB4MDQ7CisKKwlpZiAoaXJxXzBfc291cmNlID09IGlycV9vbl9maWZvX2hhbGZfZnVsbCkKKwkJZmxhZ3MgfD0gUENJOTExMV9JU0MwX1NFVF9JUlFfT05fRklGT19IQUxGX0ZVTEw7CisKKwlpZiAoaXJxXzFfc291cmNlID09IGlycV9vbl9leHRlcm5hbF90cmlnZ2VyKQorCQlmbGFncyB8PSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9FWFRfVFJHOworCisJcGNpOTExMV9pbnRlcnJ1cHRfYW5kX2ZpZm9fc2V0KGZsYWdzKTsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEhBUkRXQVJFIFRSSUdHRVJFRCBBTkFMT0cgSU5QVVQgU0VDVElPTiAqLworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAgQ2FuY2VsIGFuYWxvZyBpbnB1dCBhdXRvc2NhbiAqLworCisjdW5kZWYgQUlfRE9fQ01EX0RFQlVHCisKK3N0YXRpYyBpbnQgcGNpOTExMV9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiAgRGlzYWJsZSBpbnRlcnJ1cHRzICovCisKKwlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKKwkJdHJ1ZSwgZmFsc2UpOworCisJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBzb2Z0d2FyZSk7CisKKwlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIGZhbHNlKTsKKworCXBjaTkxMTFfZmlmb19yZXNldCgpOworCisjaWZkZWYgQUlfRE9fQ01EX0RFQlVHCisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogYWlfY2FuY2VsXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qICBUZXN0IGFuYWxvZyBpbnB1dCBjb21tYW5kICovCisKKyNkZWZpbmUgcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhzcmMsZmxhZ3MpIFwKKyAgdG1wID0gc3JjOyBcCisgIHNyYyAmPSBmbGFnczsgXAorICBpZiAoIXNyYyB8fCB0bXAgIT0gc3JjKSBlcnJvcisrCisKK3N0YXRpYyBpbnQKK3BjaTkxMTFfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgdG1wOworCWludCBlcnJvciA9IDA7CisJaW50IHJhbmdlLCByZWZlcmVuY2U7CisJaW50IGk7CisJc3RydWN0IHBjaTkxMTFfYm9hcmQgKmJvYXJkID0gKHN0cnVjdCBwY2k5MTExX2JvYXJkICopIGRldi0+Ym9hcmRfcHRyOworCisJLyogIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXIgYXJlIHRyaXZpYWx5IHZhbGlkICovCisKKwlwY2k5MTExX2NoZWNrX3RyaWdnZXJfc3JjKGNtZC0+c3RhcnRfc3JjLCBUUklHX05PVyk7CisJcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhjbWQtPnNjYW5fYmVnaW5fc3JjLAorCQlUUklHX1RJTUVSIHwgVFJJR19GT0xMT1cgfCBUUklHX0VYVCk7CisJcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhjbWQtPmNvbnZlcnRfc3JjLCBUUklHX1RJTUVSIHwgVFJJR19FWFQpOworCXBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoY21kLT5zY2FuX2VuZF9zcmMsIFRSSUdfQ09VTlQpOworCXBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoY21kLT5zdG9wX3NyYywgVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAxOworCisJLyogIHN0ZXAgMiA6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnJvcisrOworCisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpICYmCisJCShjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSAmJgorCQkoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkpCisJCWVycm9yKys7CisKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikgJiYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpKSB7CisJCWVycm9yKys7CisJfQorCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSAmJgorCQkhKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHx8CisJCQkoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykpKSB7CisJCWVycm9yKys7CisJfQorCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgJiYKKwkJISgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgfHwKKwkJCShjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSkpIHsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyb3IrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkgJiYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKSkKKwkJZXJyb3IrKzsKKworCWlmIChlcnJvcikKKwkJcmV0dXJuIDI7CisKKwkvKiAgU3RlcCAzIDogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuIDwgMSkgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycm9yKys7CisJfQorCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gYm9hcmQtPmFpX2NoYW5uZWxfbmJyKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gYm9hcmQtPmFpX2NoYW5uZWxfbmJyOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpICYmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycm9yKys7CisJfQorCisJaWYgKChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpICYmCisJCShjbWQtPmNvbnZlcnRfYXJnIDwgYm9hcmQtPmFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnMpKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSBib2FyZC0+YWlfYWNxdWlzaXRpb25fcGVyaW9kX21pbl9uczsKKwkJZXJyb3IrKzsKKwl9CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSAmJiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgJiYKKwkJKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBib2FyZC0+YWlfYWNxdWlzaXRpb25fcGVyaW9kX21pbl9ucykpIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGJvYXJkLT5haV9hY3F1aXNpdGlvbl9wZXJpb2RfbWluX25zOworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpICYmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpICYmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgPT0gVFJJR19DT1VOVCkgJiYKKwkJKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSAmJiAoY21kLT5zdG9wX2FyZyA8IDEpKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAxOworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSAmJiAoY21kLT5zdG9wX2FyZyAhPSAwKSkgeworCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAzOworCisJLyogIFN0ZXAgNCA6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihQQ0k5MTExXzgyNTRfQ0xPQ0tfUEVSSU9EX05TLAorCQkJJihkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xKSwKKwkJCSYoZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyb3IrKzsKKwl9CisJLyogIFRoZXJlJ3Mgb25seSBvbmUgdGltZXIgb24gdGhpcyBjYXJkLCBzbyB0aGUgc2Nhbl9iZWdpbiB0aW1lciBtdXN0ICovCisJLyogIGJlIGEgbXVsdGlwbGUgb2YgY2hhbmxpc3RfbGVuKmNvbnZlcnRfYXJnICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisKKwkJdW5zaWduZWQgaW50IHNjYW5fYmVnaW5fbWluOworCQl1bnNpZ25lZCBpbnQgc2Nhbl9iZWdpbl9hcmc7CisJCXVuc2lnbmVkIGludCBzY2FuX2ZhY3RvcjsKKworCQlzY2FuX2JlZ2luX21pbiA9IGNtZC0+Y2hhbmxpc3RfbGVuICogY21kLT5jb252ZXJ0X2FyZzsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSBzY2FuX2JlZ2luX21pbikgeworCQkJaWYgKHNjYW5fYmVnaW5fbWluIDwgY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJCXNjYW5fZmFjdG9yID0KKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyAvIHNjYW5fYmVnaW5fbWluOworCQkJCXNjYW5fYmVnaW5fYXJnID0gc2Nhbl9mYWN0b3IgKiBzY2FuX2JlZ2luX21pbjsKKwkJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSBzY2FuX2JlZ2luX2FyZykgeworCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gc2Nhbl9iZWdpbl9hcmc7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gc2Nhbl9iZWdpbl9taW47CisJCQkJZXJyb3IrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnJvcikKKwkJcmV0dXJuIDQ7CisKKwkvKiAgU3RlcCA1IDogY2hlY2sgY2hhbm5lbCBsaXN0ICovCisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCisJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCXJlZmVyZW5jZSA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisKKwkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgeworCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPSBpKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlICIKKwkJCQkJCSJjaGFubmVscyxjb3VudGluZyB1cHdhcmRzIGZyb20gMFxuIik7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSByYW5nZSkgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQkJZXJyb3IrKzsKKwkJCQl9CisJCQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgIT0gcmVmZXJlbmNlKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJlZmVyZW5jZVxuIik7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pID4KKwkJCQkJKGJvYXJkLT5haV9jaGFubmVsX25iciAtIDEpKQorCQkJCXx8IChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pIDwgMCkpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiY2hhbm5lbCBudW1iZXIgaXMgb3V0IG9mIGxpbWl0c1xuIik7CisJCQkJZXJyb3IrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnJvcikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKKworfQorCisvKiAgQW5hbG9nIGlucHV0IGNvbW1hbmQgKi8KKworc3RhdGljIGludCBwY2k5MTExX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmFzeW5jX2NtZCA9ICZzdWJkZXZpY2UtPmFzeW5jLT5jbWQ7CisKKwlpZiAoIWRldi0+aXJxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkibm8gaXJxIGFzc2lnbmVkIGZvciBQQ0k5MTExLCBjYW5ub3QgZG8gaGFyZHdhcmUgY29udmVyc2lvbiIpOworCQlyZXR1cm4gLTE7CisJfQorCS8qICBTZXQgY2hhbm5lbCBzY2FuIGxpbWl0ICovCisJLyogIFBDSTkxMTEgYWxsb3dzIG9ubHkgc2Nhbm5pbmcgZnJvbSBjaGFubmVsIDAgdG8gY2hhbm5lbCBuICovCisJLyogIFRPRE86IGhhbmRsZSB0aGUgY2FzZSBvZiBhbiBleHRlcm5hbCBtdWx0aXBsZXhlciAqLworCisJaWYgKGFzeW5jX2NtZC0+Y2hhbmxpc3RfbGVuID4gMSkgeworCQlwY2k5MTExX2FpX2NoYW5uZWxfc2V0KChhc3luY19jbWQtPmNoYW5saXN0X2xlbikgLSAxKTsKKwkJcGNpOTExMV9hdXRvc2Nhbl9zZXQoZGV2LCB0cnVlKTsKKwl9IGVsc2UgeworCQlwY2k5MTExX2FpX2NoYW5uZWxfc2V0KENSX0NIQU4oYXN5bmNfY21kLT5jaGFubGlzdFswXSkpOworCQlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIGZhbHNlKTsKKwl9CisKKwkvKiAgU2V0IGdhaW4gKi8KKwkvKiAgVGhpcyBpcyB0aGUgc2FtZSBnYWluIG9uIGV2ZXJ5IGNoYW5uZWwgKi8KKworCXBjaTkxMTFfYWlfcmFuZ2Vfc2V0KENSX1JBTkdFKGFzeW5jX2NtZC0+Y2hhbmxpc3RbMF0pKTsKKworCS8qIFNldCBjb3VudGVyICovCisKKwlzd2l0Y2ggKGFzeW5jX2NtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgPQorCQkJYXN5bmNfY21kLT5zdG9wX2FyZyAqIGFzeW5jX2NtZC0+Y2hhbmxpc3RfbGVuOworCQlkZXZfcHJpdmF0ZS0+c3RvcF9pc19ub25lID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSSUdfTk9ORToKKwkJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciA9IDA7CisJCWRldl9wcml2YXRlLT5zdG9wX2lzX25vbmUgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJJbnZhbGlkIHN0b3AgdHJpZ2dlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogIFNldCB0aW1lciBwYWNlciAqLworCisJZGV2X3ByaXZhdGUtPnNjYW5fZGVsYXkgPSAwOworCXN3aXRjaCAoYXN5bmNfY21kLT5jb252ZXJ0X3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFBDSTkxMTFfODI1NF9DTE9DS19QRVJJT0RfTlMsCisJCQkmKGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzEpLAorCQkJJihkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8yKSwKKwkJCSYoYXN5bmNfY21kLT5jb252ZXJ0X2FyZyksCisJCQlhc3luY19jbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKyNpZmRlZiBBSV9ET19DTURfREVCVUcKKwkJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogZGl2aXNvcnMgPSAlZCwgJWRcbiIsCisJCQlkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xLAorCQkJZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMik7CisjZW5kaWYKKworCQlwY2k5MTExX3RyaWdnZXJfc291cmNlX3NldChkZXYsIHNvZnR3YXJlKTsKKwkJcGNpOTExMV90aW1lcl9zZXQoZGV2KTsKKwkJcGNpOTExMV9maWZvX3Jlc2V0KCk7CisJCXBjaTkxMTFfaW50ZXJydXB0X3NvdXJjZV9zZXQoZGV2LCBpcnFfb25fZmlmb19oYWxmX2Z1bGwsCisJCQlpcnFfb25fdGltZXJfdGljayk7CisJCXBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KGRldiwgdGltZXJfcGFjZXIpOworCQlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCWZhbHNlLCB0cnVlLCB0cnVlKTsKKworCQlkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSA9CisJCQkoYXN5bmNfY21kLT5zY2FuX2JlZ2luX2FyZyAvIChhc3luY19jbWQtPmNvbnZlcnRfYXJnICoKKwkJCQlhc3luY19jbWQtPmNoYW5saXN0X2xlbikpIC0gMTsKKworCQlicmVhazsKKworCWNhc2UgVFJJR19FWFQ6CisKKwkJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBleHRlcm5hbCk7CisJCXBjaTkxMTFfZmlmb19yZXNldCgpOworCQlwY2k5MTExX2ludGVycnVwdF9zb3VyY2Vfc2V0KGRldiwgaXJxX29uX2ZpZm9faGFsZl9mdWxsLAorCQkJaXJxX29uX3RpbWVyX3RpY2spOworCQlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCWZhbHNlLCB0cnVlLCB0cnVlKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJJbnZhbGlkIGNvbnZlcnQgdHJpZ2dlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciAqPSAoMSArIGRldl9wcml2YXRlLT5zY2FuX2RlbGF5KTsKKwlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuID0gYXN5bmNfY21kLT5jaGFubGlzdF9sZW47CisJZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgPSAwOworCWRldl9wcml2YXRlLT5jaHVua19udW1fc2FtcGxlcyA9CisJCWRldl9wcml2YXRlLT5jaGFubGlzdF9sZW4gKiAoMSArIGRldl9wcml2YXRlLT5zY2FuX2RlbGF5KTsKKworI2lmZGVmIEFJX0RPX0NNRF9ERUJVRworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IHN0YXJ0IGludGVycnVwdGlvbnMhXG4iKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiB0cmlnZ2VyIHNvdXJjZSA9ICUyeFxuIiwKKwkJcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSk7CisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogaXJxIHNvdXJjZSAgICAgPSAlMnhcbiIsCisJCXBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX2dldCgpKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBhaV9kb19jbWRcbiIpOworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IHN0b3AgY291bnRlciAgID0gJWRcbiIsCisJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIpOworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IHNjYW4gZGVsYXkgICAgID0gJWRcbiIsCisJCWRldl9wcml2YXRlLT5zY2FuX2RlbGF5KTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBjaGFubGlzdF9sZW4gICA9ICVkXG4iLAorCQlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBjaHVuayBudW0gc2FtcGxlcyA9ICVkXG4iLAorCQlkZXZfcHJpdmF0ZS0+Y2h1bmtfbnVtX3NhbXBsZXMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpOTExMV9haV9tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBzdGFydF9jaGFuX2luZGV4KQoreworCXVuc2lnbmVkIGludCBpLCBudW1fc2FtcGxlcyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CisJc2hvcnQgKmFycmF5ID0gZGF0YTsKKwlpbnQgcmVzb2x1dGlvbiA9CisJCSgoc3RydWN0IHBjaTkxMTFfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHIpLT5haV9yZXNvbHV0aW9uOworCisJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKKwkJaWYgKHJlc29sdXRpb24gPT0gUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OKQorCQkJYXJyYXlbaV0gPQorCQkJCShhcnJheVtpXSAmIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLKSBeCisJCQkJUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVDsKKwkJZWxzZQorCQkJYXJyYXlbaV0gPQorCQkJCSgoYXJyYXlbaV0gPj4gNCkgJiBQQ0k5MTExX0FJX1JFU09MVVRJT05fTUFTSykgXgorCQkJCVBDSTkxMTFfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQ7CisJfQorfQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSU5URVJSVVBUIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI3VuZGVmIElOVEVSUlVQVF9ERUJVRworCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNpOTExMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcF9kZXZpY2UgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IHBfZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIgaW50Y3NyOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCS8qICBJZ25vcmUgaW50ZXJydXB0IGJlZm9yZSBkZXZpY2UgZnVsbHkgYXR0YWNoZWQuICovCisJCS8qICBNaWdodCBub3QgZXZlbiBoYXZlIGFsbG9jYXRlZCBzdWJkZXZpY2VzIHlldCEgKi8KKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWFzeW5jID0gc3ViZGV2aWNlLT5hc3luYzsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCS8qICBDaGVjayBpZiB3ZSBhcmUgc291cmNlIG9mIGludGVycnVwdCAqLworCWludGNzciA9IGluYihkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UgKworCQlQTFg5MDUwX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsKKwlpZiAoISgoKGludGNzciAmIFBMWDkwNTBfUENJX0lOVEVSUlVQVF9FTkFCTEUpICE9IDApCisJCQkmJiAoKChpbnRjc3IgJiAoUExYOTA1MF9MSU5USTFfRU5BQkxFIHwKKwkJCQkJCQlQTFg5MDUwX0xJTlRJMV9TVEFUVVMpKQorCQkJCQk9PQorCQkJCQkoUExYOTA1MF9MSU5USTFfRU5BQkxFIHwKKwkJCQkJCVBMWDkwNTBfTElOVEkxX1NUQVRVUykpCisJCQkJfHwgKChpbnRjc3IgJiAoUExYOTA1MF9MSU5USTJfRU5BQkxFIHwKKwkJCQkJCQlQTFg5MDUwX0xJTlRJMl9TVEFUVVMpKQorCQkJCQk9PQorCQkJCQkoUExYOTA1MF9MSU5USTJfRU5BQkxFIHwKKwkJCQkJCVBMWDkwNTBfTElOVEkyX1NUQVRVUykpKSkpIHsKKwkJLyogIE5vdCB0aGUgc291cmNlIG9mIHRoZSBpbnRlcnJ1cHQuICovCisJCS8qICAoTi5CLiBub3QgdXNpbmcgUExYOTA1MF9TT0ZUV0FSRV9JTlRFUlJVUFQpICovCisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKChpbnRjc3IgJiAoUExYOTA1MF9MSU5USTFfRU5BQkxFIHwgUExYOTA1MF9MSU5USTFfU1RBVFVTKSkgPT0KKwkJKFBMWDkwNTBfTElOVEkxX0VOQUJMRSB8IFBMWDkwNTBfTElOVEkxX1NUQVRVUykpIHsKKwkJLyogIEludGVycnVwdCBjb21lcyBmcm9tIGZpZm9faGFsZi1mdWxsIHNpZ25hbCAqLworCisJCWlmIChwY2k5MTExX2lzX2ZpZm9fZnVsbCgpKSB7CisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywKKwkJCQlpcnFfZmxhZ3MpOworCQkJY29tZWRpX2Vycm9yKGRldiwgUENJOTExMV9EUklWRVJfTkFNRSAiIGZpZm8gb3ZlcmZsb3ciKTsKKwkJCXBjaTkxMTFfaW50ZXJydXB0X2NsZWFyKCk7CisJCQlwY2k5MTExX2FpX2NhbmNlbChkZXYsIHN1YmRldmljZSk7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzdWJkZXZpY2UpOworCisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKworCQlpZiAocGNpOTExMV9pc19maWZvX2hhbGZfZnVsbCgpKSB7CisJCQl1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXM7CisJCQl1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CisKKyNpZmRlZiBJTlRFUlJVUFRfREVCVUcKKwkJCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IGZpZm8gaXMgaGFsZiBmdWxsXG4iKTsKKyNlbmRpZgorCisJCQludW1fc2FtcGxlcyA9CisJCQkJUENJOTExMV9GSUZPX0hBTEZfU0laRSA+CisJCQkJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlcgorCQkJCSYmICFkZXZfcHJpdmF0ZS0+c3RvcF9pc19ub25lID8gZGV2X3ByaXZhdGUtPgorCQkJCXN0b3BfY291bnRlciA6IFBDSTkxMTFfRklGT19IQUxGX1NJWkU7CisJCQlpbnN3KFBDSTkxMTFfSU9fQkFTRSArIFBDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSwKKwkJCQlkZXZfcHJpdmF0ZS0+YWlfYm91bmNlX2J1ZmZlciwgbnVtX3NhbXBsZXMpOworCisJCQlpZiAoZGV2X3ByaXZhdGUtPnNjYW5fZGVsYXkgPCAxKSB7CisJCQkJYnl0ZXNfd3JpdHRlbiA9CisJCQkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIoc3ViZGV2aWNlLAorCQkJCQlkZXZfcHJpdmF0ZS0+YWlfYm91bmNlX2J1ZmZlciwKKwkJCQkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwkJCX0gZWxzZSB7CisJCQkJaW50IHBvc2l0aW9uID0gMDsKKwkJCQlpbnQgdG9fcmVhZDsKKworCQkJCXdoaWxlIChwb3NpdGlvbiA8IG51bV9zYW1wbGVzKSB7CisJCQkJCWlmIChkZXZfcHJpdmF0ZS0+Y2h1bmtfY291bnRlciA8CisJCQkJCQlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuKSB7CisJCQkJCQl0b19yZWFkID0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2hhbmxpc3RfbGVuIC0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2h1bmtfY291bnRlcjsKKworCQkJCQkJaWYgKHRvX3JlYWQgPgorCQkJCQkJCW51bV9zYW1wbGVzIC0gcG9zaXRpb24pCisJCQkJCQkJdG9fcmVhZCA9CisJCQkJCQkJCW51bV9zYW1wbGVzIC0KKwkJCQkJCQkJcG9zaXRpb247CisKKwkJCQkJCWJ5dGVzX3dyaXR0ZW4gKz0KKwkJCQkJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyCisJCQkJCQkJKHN1YmRldmljZSwKKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJYWlfYm91bmNlX2J1ZmZlciArCisJCQkJCQkJcG9zaXRpb24sCisJCQkJCQkJdG9fcmVhZCAqCisJCQkJCQkJc2l6ZW9mKHNob3J0KSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl0b19yZWFkID0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2h1bmtfbnVtX3NhbXBsZXMgLQorCQkJCQkJCWRldl9wcml2YXRlLT4KKwkJCQkJCQljaHVua19jb3VudGVyOworCQkJCQkJaWYgKHRvX3JlYWQgPgorCQkJCQkJCW51bV9zYW1wbGVzIC0gcG9zaXRpb24pCisJCQkJCQkJdG9fcmVhZCA9CisJCQkJCQkJCW51bV9zYW1wbGVzIC0KKwkJCQkJCQkJcG9zaXRpb247CisKKwkJCQkJCWJ5dGVzX3dyaXR0ZW4gKz0KKwkJCQkJCQlzaXplb2Yoc2hvcnQpICoKKwkJCQkJCQl0b19yZWFkOworCQkJCQl9CisKKwkJCQkJcG9zaXRpb24gKz0gdG9fcmVhZDsKKwkJCQkJZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgKz0gdG9fcmVhZDsKKworCQkJCQlpZiAoZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgPj0KKwkJCQkJCWRldl9wcml2YXRlLT5jaHVua19udW1fc2FtcGxlcykKKwkJCQkJCWRldl9wcml2YXRlLT5jaHVua19jb3VudGVyID0gMDsKKwkJCQl9CisJCQl9CisKKwkJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgLT0KKwkJCQlieXRlc193cml0dGVuIC8gc2l6ZW9mKHNob3J0KTsKKwkJfQorCX0KKworCWlmICgoZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciA9PSAwKSAmJiAoIWRldl9wcml2YXRlLT5zdG9wX2lzX25vbmUpKSB7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExMV9haV9jYW5jZWwoZGV2LCBzdWJkZXZpY2UpOworCX0KKworCS8qIFZlcnkgaW1wb3J0YW50LCBvdGhlcndpc2UgYW5vdGhlciBpbnRlcnJ1cHQgcmVxdWVzdCB3aWxsIGJlIGluc2VydGVkCisJICogYW5kIHdpbGwgY2F1c2UgZHJpdmVyIGhhbmdzIG9uIHByb2Nlc3NpbmcgaW50ZXJydXB0IGV2ZW50LiAqLworCisJcGNpOTExMV9pbnRlcnJ1cHRfY2xlYXIoKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJY29tZWRpX2V2ZW50KGRldiwgc3ViZGV2aWNlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIElOU1RBTlQgQU5BTE9HIElOUFVUIE9VVFBVVCBTRUNUSU9OICovCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qICBhbmFsb2cgaW5zdGFudCBpbnB1dCAqLworCisjdW5kZWYgQUlfSU5TTl9ERUJVRworCitzdGF0aWMgaW50IHBjaTkxMTFfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2aWNlLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXNvbHV0aW9uID0KKwkJKChzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqKSBkZXYtPmJvYXJkX3B0ciktPmFpX3Jlc29sdXRpb247CisKKwlpbnQgdGltZW91dCwgaTsKKworI2lmZGVmIEFJX0lOU05fREVCVUcKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBhaV9pbnNuIHNldCBjL3IvbiA9ICUyeC8lMngvJTJ4XG4iLAorCQlDUl9DSEFOKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSwKKwkJQ1JfUkFOR0UoKCZpbnNuLT5jaGFuc3BlYylbMF0pLCBpbnNuLT5uKTsKKyNlbmRpZgorCisJcGNpOTExMV9haV9jaGFubmVsX3NldChDUl9DSEFOKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSk7CisKKwlpZiAoKHBjaTkxMTFfYWlfcmFuZ2VfZ2V0KCkpICE9IENSX1JBTkdFKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSkgeworCQlwY2k5MTExX2FpX3JhbmdlX3NldChDUl9SQU5HRSgoJmluc24tPmNoYW5zcGVjKVswXSkpOworCX0KKworCXBjaTkxMTFfZmlmb19yZXNldCgpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlwY2k5MTExX3NvZnR3YXJlX3RyaWdnZXIoKTsKKworCQl0aW1lb3V0ID0gUENJOTExMV9BSV9JTlNUQU5UX1JFQURfVElNRU9VVDsKKworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIXBjaTkxMTFfaXNfZmlmb19lbXB0eSgpKQorCQkJCWdvdG8gY29udmVyc2lvbl9kb25lOworCQl9CisKKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCByZWFkIHRpbWVvdXQiKTsKKwkJZGF0YVtpXSA9IDA7CisJCXBjaTkxMTFfZmlmb19yZXNldCgpOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udmVyc2lvbl9kb25lOgorCisJCWlmIChyZXNvbHV0aW9uID09IFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTikgeworCQkJZGF0YVtpXSA9IHBjaTkxMTFfaHJfYWlfZ2V0X2RhdGEoKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbaV0gPSBwY2k5MTExX2FpX2dldF9kYXRhKCk7CisJCX0KKwl9CisKKyNpZmRlZiBBSV9JTlNOX0RFQlVHCisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogYWlfaW5zbiBnZXQgYy9yL3QgPSAlMngvJTJ4LyUyeFxuIiwKKwkJcGNpOTExMV9haV9jaGFubmVsX2dldCgpLAorCQlwY2k5MTExX2FpX3JhbmdlX2dldCgpLCBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpKTsKKyNlbmRpZgorCisJcmV0dXJuIGk7Cit9CisKKy8qICBBbmFsb2cgaW5zdGFudCBvdXRwdXQgKi8KKworc3RhdGljIGludAorcGNpOTExMV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJcGNpOTExMV9hb19zZXRfZGF0YShkYXRhW2ldKTsKKwkJZGV2X3ByaXZhdGUtPmFvX3JlYWRiYWNrID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyogIEFuYWxvZyBvdXRwdXQgcmVhZGJhY2sgKi8KKworc3RhdGljIGludCBwY2k5MTExX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZfcHJpdmF0ZS0+YW9fcmVhZGJhY2sgJiBQQ0k5MTExX0FPX1JFU09MVVRJT05fTUFTSzsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIERJR0lUQUwgSU5QVVQgT1VUUFVUIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIERpZ2l0YWwgaW5wdXRzICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwliaXRzID0gcGNpOTExMV9kaV9nZXRfYml0cygpOworCWRhdGFbMV0gPSBiaXRzOworCisJcmV0dXJuIDI7Cit9CisKKy8qICBEaWdpdGFsIG91dHB1dHMgKi8KKworc3RhdGljIGludCBwY2k5MTExX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldmljZSwgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCS8qICBPbmx5IHNldCBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZCAqLworCS8qICBkYXRhWzBdID0gbWFzayAqLworCS8qICBkYXRhWzFdID0gYml0IHN0YXRlICovCisKKwlkYXRhWzBdICY9IFBDSTkxMTFfRE9fTUFTSzsKKworCWJpdHMgPSBzdWJkZXZpY2UtPnN0YXRlOworCWJpdHMgJj0gfmRhdGFbMF07CisJYml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlzdWJkZXZpY2UtPnN0YXRlID0gYml0czsKKworCXBjaTkxMTFfZG9fc2V0X2JpdHMoYml0cyk7CisKKwlkYXRhWzFdID0gYml0czsKKworCXJldHVybiAyOworfQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSU5JVElBTElTQVRJT04gU0VDVElPTiAqLworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAgUmVzZXQgZGV2aWNlICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvKiAgU2V0IHRyaWdnZXIgc291cmNlIHRvIHNvZnR3YXJlICovCisKKwlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKKwkJdHJ1ZSwgZmFsc2UpOworCisJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBzb2Z0d2FyZSk7CisJcGNpOTExMV9wcmV0cmlnZ2VyX3NldChkZXYsIGZhbHNlKTsKKwlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIGZhbHNlKTsKKworCS8qICBSZXNldCA4MjU0IGNoaXAgKi8KKworCWRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzEgPSAwOworCWRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzIgPSAwOworCisJcGNpOTExMV90aW1lcl9zZXQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiAgQXR0YWNoICovCisvKiAgICAgICAtIFJlZ2lzdGVyIFBDSSBkZXZpY2UgKi8KKy8qICAgICAgIC0gRGVjbGFyZSBkZXZpY2UgZHJpdmVyIGNhcGFiaWxpdHkgKi8KKworc3RhdGljIGludCBwY2k5MTExX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZSwgaW9fcmFuZ2UsIGxjcl9pb19iYXNlLCBsY3JfaW9fcmFuZ2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJaW50IGVycm9yLCBpOworCWNvbnN0IHN0cnVjdCBwY2k5MTExX2JvYXJkICpib2FyZDsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2k5MTExX3ByaXZhdGVfZGF0YSkpIDwgMCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuICovCisKKwlwcmludGsoImNvbWVkaSVkOiAiIFBDSTkxMTFfRFJJVkVSX05BTUUgIiBkcml2ZXJcbiIsIGRldi0+bWlub3IpOworCisJZm9yIChwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXZpY2UgIT0gTlVMTDsKKwkJcGNpX2RldmljZSA9CisJCXBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTkspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwY2k5MTExX2JvYXJkX25icjsgaSsrKSB7CisJCQkJaWYgKHBjaTkxMTFfYm9hcmRzW2ldLmRldmljZV9pZCA9PQorCQkJCQlwY2lfZGV2aWNlLT5kZXZpY2UpIHsKKwkJCQkJLyogIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLworCQkJCQlpZiAoKGl0LT5vcHRpb25zWzBdICE9IDApCisJCQkJCQl8fCAoaXQtPm9wdGlvbnNbMV0gIT0gMCkpIHsKKwkJCQkJCS8qICBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PyAqLworCQkJCQkJaWYgKHBjaV9kZXZpY2UtPmJ1cy0+bnVtYmVyICE9CisJCQkJCQkJaXQtPm9wdGlvbnNbMF0KKwkJCQkJCQl8fCBQQ0lfU0xPVChwY2lfZGV2aWNlLT4KKwkJCQkJCQkJZGV2Zm4pICE9CisJCQkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWRldi0+Ym9hcmRfcHRyID0gcGNpOTExMV9ib2FyZHMgKyBpOworCQkJCQlib2FyZCA9IChzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqKSBkZXYtPgorCQkJCQkJYm9hcmRfcHRyOworCQkJCQlkZXZfcHJpdmF0ZS0+cGNpX2RldmljZSA9IHBjaV9kZXZpY2U7CisJCQkJCWdvdG8gZm91bmQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKKwkJZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlyZXR1cm4gLUVJTzsKKworICAgICAgZm91bmQ6CisKKwlwcmludGsoImNvbWVkaSVkOiBmb3VuZCAlcyAoYjpzOmY9JWQ6JWQ6JWQpICwgaXJxPSVkXG4iLAorCQlkZXYtPm1pbm9yLAorCQlwY2k5MTExX2JvYXJkc1tpXS5uYW1lLAorCQlwY2lfZGV2aWNlLT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QocGNpX2RldmljZS0+ZGV2Zm4pLAorCQlQQ0lfRlVOQyhwY2lfZGV2aWNlLT5kZXZmbiksIHBjaV9kZXZpY2UtPmlycSk7CisKKwkvKiAgVE9ETzogV2FybiBhYm91dCBub24tdGVzdGVkIGJvYXJkcy4gKi8KKworCXN3aXRjaCAoYm9hcmQtPmRldmljZV9pZCkgeworCX07CisKKwkvKiAgUmVhZCBsb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBbUENJX0JBU0VfQUREUkVTUyAjMV0uICovCisKKwlsY3JfaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2aWNlLCAxKTsKKwlsY3JfaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZpY2UsIDEpOworCisJcHJpbnRrKCJjb21lZGklZDogbG9jYWwgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bHggWzB4JTRseF1cbiIsIGRldi0+bWlub3IsIGxjcl9pb19iYXNlLCBsY3JfaW9fcmFuZ2UpOworCisJLyogIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMgKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpX2RldmljZSwgUENJOTExMV9EUklWRVJfTkFNRSkgPCAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qICBSZWFkIFBDSTYzMDggcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMyXS4gKi8KKworCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldmljZSwgMik7CisJaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZpY2UsIDIpOworCisJcHJpbnRrKCJjb21lZGklZDogNjUwMyByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bHggWzB4JTRseF1cbiIsCisJCWRldi0+bWlub3IsIGlvX2Jhc2UsIGlvX3JhbmdlKTsKKworCWRldi0+aW9iYXNlID0gaW9fYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZC0+bmFtZTsKKwlkZXZfcHJpdmF0ZS0+aW9fcmFuZ2UgPSBpb19yYW5nZTsKKwlkZXZfcHJpdmF0ZS0+aXNfdmFsaWQgPSAwOworCWRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSA9IGxjcl9pb19iYXNlOworCWRldl9wcml2YXRlLT5sY3JfaW9fcmFuZ2UgPSBsY3JfaW9fcmFuZ2U7CisKKwlwY2k5MTExX3Jlc2V0KGRldik7CisKKwkvKiAgSXJxIHNldHVwICovCisKKwlkZXYtPmlycSA9IDA7CisJaWYgKHBjaV9kZXZpY2UtPmlycSA+IDApIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShwY2lfZGV2aWNlLT5pcnEsCisJCQkJcGNpOTExMV9pbnRlcnJ1cHQsCisJCQkJSVJRRl9TSEFSRUQsIFBDSTkxMTFfRFJJVkVSX05BTUUsIGRldikgIT0gMCkgeworCQkJcHJpbnRrKCJjb21lZGklZDogdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAgJXVcbiIsCisJCQkJZGV2LT5taW5vciwgcGNpX2RldmljZS0+aXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWRldi0+aXJxID0gcGNpX2RldmljZS0+aXJxOworCisJLyogIFRPRE86IEFkZCBleHRlcm5hbCBtdWx0aXBsZXhlciBzZXR1cCAoYWNjb3JkaW5nIHRvIG9wdGlvblsyXSkuICovCisKKwlpZiAoKGVycm9yID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXN1YmRldmljZSA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHN1YmRldmljZTsKKworCXN1YmRldmljZS0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXN1YmRldmljZS0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9DTURfUkVBRDsKKworCS8qICBUT0RPOiBBZGQgZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgZGF0YSAqLworCS8qICAgICBpZiAoZGV2cHJpdi0+dXNlbXV4KSB7IHN1YmRldmljZS0+bl9jaGFuID0gZGV2cHJpdi0+dXNlbXV4OyB9ICovCisJLyogICAgIGVsc2UgeyBzdWJkZXZpY2UtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOyB9ICovCisKKwlzdWJkZXZpY2UtPm5fY2hhbiA9IGJvYXJkLT5haV9jaGFubmVsX25icjsKKwlzdWJkZXZpY2UtPm1heGRhdGEgPSBib2FyZC0+YWlfcmVzb2x1dGlvbl9tYXNrOworCXN1YmRldmljZS0+bGVuX2NoYW5saXN0ID0gYm9hcmQtPmFpX2NoYW5uZWxfbmJyOworCXN1YmRldmljZS0+cmFuZ2VfdGFibGUgPSBib2FyZC0+YWlfcmFuZ2VfbGlzdDsKKwlzdWJkZXZpY2UtPmNhbmNlbCA9IHBjaTkxMTFfYWlfY2FuY2VsOworCXN1YmRldmljZS0+aW5zbl9yZWFkID0gcGNpOTExMV9haV9pbnNuX3JlYWQ7CisJc3ViZGV2aWNlLT5kb19jbWR0ZXN0ID0gcGNpOTExMV9haV9kb19jbWRfdGVzdDsKKwlzdWJkZXZpY2UtPmRvX2NtZCA9IHBjaTkxMTFfYWlfZG9fY21kOworCXN1YmRldmljZS0+bXVuZ2UgPSBwY2k5MTExX2FpX211bmdlOworCisJc3ViZGV2aWNlID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9DT01NT047CisJc3ViZGV2aWNlLT5uX2NoYW4gPSBib2FyZC0+YW9fY2hhbm5lbF9uYnI7CisJc3ViZGV2aWNlLT5tYXhkYXRhID0gYm9hcmQtPmFvX3Jlc29sdXRpb25fbWFzazsKKwlzdWJkZXZpY2UtPmxlbl9jaGFubGlzdCA9IGJvYXJkLT5hb19jaGFubmVsX25icjsKKwlzdWJkZXZpY2UtPnJhbmdlX3RhYmxlID0gYm9hcmQtPmFvX3JhbmdlX2xpc3Q7CisJc3ViZGV2aWNlLT5pbnNuX3dyaXRlID0gcGNpOTExMV9hb19pbnNuX3dyaXRlOworCXN1YmRldmljZS0+aW5zbl9yZWFkID0gcGNpOTExMV9hb19pbnNuX3JlYWQ7CisKKwlzdWJkZXZpY2UgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXN1YmRldmljZS0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXN1YmRldmljZS0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXN1YmRldmljZS0+bl9jaGFuID0gUENJOTExMV9ESV9DSEFOTkVMX05CUjsKKwlzdWJkZXZpY2UtPm1heGRhdGEgPSAxOworCXN1YmRldmljZS0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzdWJkZXZpY2UtPmluc25fYml0cyA9IHBjaTkxMTFfZGlfaW5zbl9iaXRzOworCisJc3ViZGV2aWNlID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzdWJkZXZpY2UtPm5fY2hhbiA9IFBDSTkxMTFfRE9fQ0hBTk5FTF9OQlI7CisJc3ViZGV2aWNlLT5tYXhkYXRhID0gMTsKKwlzdWJkZXZpY2UtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJc3ViZGV2aWNlLT5pbnNuX2JpdHMgPSBwY2k5MTExX2RvX2luc25fYml0czsKKworCWRldl9wcml2YXRlLT5pc192YWxpZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogIERldGFjaCAqLworCitzdGF0aWMgaW50IHBjaTkxMTFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qICBSZXNldCBkZXZpY2UgKi8KKworCWlmIChkZXYtPnByaXZhdGUgIT0gMCkgeworCQlpZiAoZGV2X3ByaXZhdGUtPmlzX3ZhbGlkKQorCQkJcGNpOTExMV9yZXNldChkZXYpOworCisJfQorCS8qICBSZWxlYXNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGlycSAqLworCisJaWYgKGRldi0+aXJxICE9IDApIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCWlmIChkZXZfcHJpdmF0ZSAhPSAwICYmIGRldl9wcml2YXRlLT5wY2lfZGV2aWNlICE9IDApIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2X3ByaXZhdGUtPnBjaV9kZXZpY2UpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldl9wcml2YXRlLT5wY2lfZGV2aWNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4Y2YzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCkBAIC0wLDAgKzEsMjEwMCBAQAorLyoKKyAqICBjb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCisgKgorICogIGhhcmR3YXJlIGRyaXZlciBmb3IgQURMaW5rIGNhcmRzOgorICogICBjYXJkOiAgIFBDSS05MTE4REcsIFBDSS05MTE4SEcsIFBDSS05MTE4SFIKKyAqICAgZHJpdmVyOiBwY2k5MTE4ZGcsICBwY2k5MTE4aGcsICBwY2k5MTE4aHIKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyovCisvKgorRHJpdmVyOiBhZGxfcGNpOTExOAorRGVzY3JpcHRpb246IEFkbGluayBQQ0ktOTExOERHLCBQQ0ktOTExOEhHLCBQQ0ktOTExOEhSCitBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorRGV2aWNlczogW0FETGlua10gUENJLTkxMThERyAocGNpOTExOGRnKSwgUENJLTkxMThIRyAocGNpOTExOGhnKSwKKyAgUENJLTkxMThIUiAocGNpOTExOGhyKQorU3RhdHVzOiB3b3JrcworCitUaGlzIGRyaXZlciBzdXBwb3J0cyBBSSwgQU8sIERJIGFuZCBETyBzdWJkZXZpY2VzLgorQUkgc3ViZGV2aWNlIHN1cHBvcnRzIGNtZCBhbmQgaW5zbiBpbnRlcmZhY2UsCitvdGhlciBzdWJkZXZpY2VzIHN1cHBvcnQgb25seSBpbnNuIGludGVyZmFjZS4KK0ZvciBBSToKKy0gSWYgY21kLT5zY2FuX2JlZ2luX3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgVEdJTiAocGluIDQ2KS4KKy0gSWYgY21kLT5jb252ZXJ0X3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgRVhUVFJHIChwaW4gNDQpLgorLSBJZiBjbWQtPnN0YXJ0X3NyYy9zdG9wX3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgVEdJTiAocGluIDQ2KS4KKy0gSXQgaXMgbm90IG5lY2Nlc3NhcnkgdG8gaGF2ZSBjbWQuc2Nhbl9lbmRfYXJnPWNtZC5jaGFubGlzdF9sZW4gYnV0CisgIGNtZC5zY2FuX2VuZF9hcmcgbW9kdWxvIGNtZC5jaGFubGlzdF9sZW4gbXVzdCBieSAwLgorLSBJZiByZXR1cm4gdmFsdWUgb2YgY21kdGVzdCBpcyA1IHRoZW4geW91J3ZlIGJhZCBjaGFubmVsIGxpc3QKKyAgKGl0IGlzbid0IHBvc3NpYmxlIG1peHR1cmUgUy5FLiBhbmQgRElGRiBpbnB1dHMgb3IgYmlwb2xhciBhbmQgdW5pcG9sYXIKKyAgcmFuZ2VzKS4KKworVGhlcmUgYXJlIHNvbWUgaGFyZHdhcmUgbGltaXRhdGlvbnM6CithKSBZb3UgY2Fubid0IHVzZSBtaXh0dXJlIG9mIHVuaXBvbGFyL2JpcG9hciByYW5nZXMgb3IgZGlmZmVyZW5jaWFsL3NpbmdsZQorICAgZW5kZWQgaW5wdXRzLgorYikgRE1BIHRyYW5zZmVycyBtdXN0IGhhdmUgdGhlIGxlbmd0aCBhbGlnbmVkIHRvIHR3byBzYW1wbGVzICgzMiBiaXQpLAorICAgc28gdGhlcmUgaXMgc29tZSBwcm9ibGVtcyBpZiBjbWQtPmNoYW5saXN0X2xlbiBpcyBvZGQuIFRoaXMgZHJpdmVyIHRyaWVzCisgICBieXBhc3MgdGhpcyB3aXRoIGFkZGluZyBvbmUgc2FtcGxlIHRvIHRoZSBlbmQgb2YgdGhlIGV2ZXJ5IHNjYW4gYW5kIGRpc2NhcmQKKyAgIGl0IG9uIG91dHB1dCBidXQgdGhpcyBjYW5uJ3QgYmUgdXNlZCBpZiBjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfRk9MTE9XCisgICBhbmQgaXMgdXNlZCBmbGFnIFRSSUdfV0FLRV9FT1MsIHRoZW4gZHJpdmVyIHN3aXRjaCB0byBpbnRlcnJ1cHQgZHJpdmVuIG1vZGUKKyAgIHdpdGggaW50ZXJydXB0IGFmdGVyIGV2ZXJ5IHNhbXBsZS4KK2MpIElmIGlzbid0IHVzZWQgRE1BIHRoZW4geW91IGNhbiB1c2Ugb25seSBtb2RlIHdoZXJlCisgICBjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfRk9MTE9XLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKyAgICAgICAgICBjYXJkIHdpbGwgYmUgdXNlZC4KKyAgWzJdIC0gMD0gc3RhbmRhcmQgOCBESUZGLzE2IFNFIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgbj0gZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgY29ubmVjdGVkLCAxPD1uPD0yNTYKKyAgWzNdIC0gMD1hdXRvc2VsZWN0IERNQSBvciBFT0MgaW50ZXJydXB0cyBvcGVyYXRpb24KKyAgICAgICAgMT1kaXNhYmxlIERNQSBtb2RlCisgICAgICAgIDM9ZGlzYWJsZSBETUEgYW5kIElOVCwgb25seSBpbnNuIGludGVyZmFjZSB3aWxsIHdvcmsKKyAgWzRdIC0gc2FtcGxlJmhvbGQgc2lnbmFsIC0gY2FyZCBjYW4gZ2VuZXJhdGUgc2lnbmFsIGZvciBleHRlcm5hbCBTJkggYm9hcmQKKyAgICAgICAgMD11c2UgU1NITyAocGluIDQ1KSBzaWduYWwgaXMgZ2VuZXJhdGVkIGluIG9uYm9hcmQgaGFyZHdhcmUgUyZIIGxvZ2ljCisgICAgICAgIDAhPXVzZSBBRENITjcgKHBpbiAyMykgc2lnbmFsIGlzIGdlbmVyYXRlZCBmcm9tIGRyaXZlciwgbnVtYmVyCisgICAgICAgICAgIHNheSBob3cgbG9uZyBkZWxheSBpcyByZXF1ZXN0ZWQgaW4gbnMgYW5kIHNpZ24gcG9sYXJpdHkgb2YgdGhlIGhvbGQKKyAgICAgICAgICAgKGluIHRoaXMgY2FzZSBleHRlcm5hbCBtdWx0aXBsZXhvciBjYW4gc2VydmUgb25seSAxMjggY2hhbm5lbHMpCisgIFs1XSAtIDA9c3RvcCBtZWFzdXJlIG9uIGFsbCBoYXJkd2FyZSBlcnJvcnMKKyAgICAgICAgMnw9aWdub3JlIEFET1IgLSBBL0QgT3ZlcnJ1biBzdGF0dXMKKwk4fD1pZ25vcmUgQm92ZXIgLSBBL0QgQnVyc3QgTW9kZSBPdmVycnVuIHN0YXR1cworCTI1Nnw9aWdub3JlIG5GdWxsIC0gQS9EIEZJRk8gRnVsbCBzdGF0dXMKKworKi8KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICIuLi9wY2lfaWRzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiYW1jY19zNTkzMy5oIgorI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKy8qIHBhcmFub2lkIGNoZWNrcyBhcmUgYnJva2VuICovCisjdW5kZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCS8qIGlmIGRlZmluZWQsIHRoZW4gaXMgdXNlZCBjb2RlIHdoaWNoIGNvbnRyb2wgY29ycmVjdCBjaGFubmVsIG51bWJlciBvbiBldmVyeSAxMiBiaXQgc2FtcGxlICovCisKKyN1bmRlZiBQQ0k5MTE4X0VYVERFQlVHCQkvKiBpZiBkZWZpbmVkIHRoZW4gZHJpdmVyIHByaW50cyBhIGxvdCBvZiBtZXNzYWdlcyAqLworCisjdW5kZWYgRFBSSU5USworI2lmZGVmIFBDSTkxMThfRVhUREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHJ0X3ByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIElPUkFOR0VfOTExOCAJNjQJLyogSSBob3BlICovCisjZGVmaW5lIFBDSTkxMThfQ0hBTkxFTgkyNTUJLyogbGVuIG9mIGNoYW5saXN0LCBzb21lIHNvdXJjZSBzYXkgMjU2LCBidXQgcmVhbGl0eSBsb29rcyBsaWtlIDI1NSA6LSggKi8KKworI2RlZmluZSBQQ0k5MTE4X0NOVDAJMHgwMAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KKyNkZWZpbmUgUENJOTExOF9DTlQxCTB4MDQJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCisjZGVmaW5lIFBDSTkxMThfQ05UMgkweDA4CS8qIFIvVzogODI1NCBjb3V0ZXIgMCAqLworI2RlZmluZSBQQ0k5MTE4X0NOVENUUkwJMHgwYwkvKiBXOiAgIDgyNTQgY291bnRlciBjb250cm9sICovCisjZGVmaW5lIFBDSTkxMThfQURfREFUQQkweDEwCS8qIFI6ICAgQS9EIGRhdGEgKi8KKyNkZWZpbmUgUENJOTExOF9EQTEJMHgxMAkvKiBXOiAgIEQvQSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENJOTExOF9EQTIJMHgxNAorI2RlZmluZSBQQ0k5MTE4X0FEU1RBVAkweDE4CS8qIFI6ICAgQS9EIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X0FEQ05UUkwJMHgxOAkvKiBXOiAgIEEvRCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfREkJMHgxYwkvKiBSOiAgIGRpZ2kgaW5wdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9ETwkweDFjCS8qIFc6ICAgZGlnaSBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9TT0ZUVFJHCTB4MjAJLyogVzogICBzb2Z0IHRyaWdnZXIgZm9yIEEvRCAqLworI2RlZmluZSBQQ0k5MTE4X0dBSU4JMHgyNAkvKiBXOiAgIEEvRCBnYWluL2NoYW5uZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9CVVJTVAkweDI4CS8qIFc6ICAgQS9EIGJ1cnN0IG51bWJlciByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X1NDQU5NT0QJMHgyYwkvKiBXOiAgIEEvRCBhdXRvIHNjYW4gbW9kZSAqLworI2RlZmluZSBQQ0k5MTE4X0FERlVOQwkweDMwCS8qIFc6ICAgQS9EIGZ1bmN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfREVMRklGTwkweDM0CS8qIFc6ICAgQS9EIGRhdGEgRklGTyByZXNldCAqLworI2RlZmluZSBQQ0k5MTE4X0lOVFNSQwkweDM4CS8qIFI6ICAgaW50ZXJydXB0IHJlYXNvbiByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X0lOVENUUkwJMHgzOAkvKiBXOiAgIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisKKy8vIGJpdHMgZnJvbSBBL0QgY29udHJvbCByZWdpc3RlciAoUENJOTExOF9BRENOVFJMKQorI2RlZmluZSBBZENvbnRyb2xfVW5pUAkweDgwCS8qIDE9Ymlwb2xhciwgMD11bmlwb2xhciAqLworI2RlZmluZSBBZENvbnRyb2xfRGlmZgkweDQwCS8qIDE9ZGlmZmVyZW50aWFsLCAwPSBzaW5nbGUgZW5kIGlucHV0cyAqLworI2RlZmluZSBBZENvbnRyb2xfU29mdEcJMHgyMAkvKiAxPTgyNTQgY291bnRlciB3b3JrcywgMD1jb3VudGVyIHN0b3BzICovCisjZGVmaW5lCUFkQ29udHJvbF9FeHRHCTB4MTAJLyogMT04MjU0IGNvdW50cm9sIGNvbnRyb2xsZWQgYnkgVEdJTihwaW4gNDYpLCAwPWNvbnRyb2xlZCBieSBTb2Z0RyAqLworI2RlZmluZSBBZENvbnRyb2xfRXh0TQkweDA4CS8qIDE9ZXh0ZXJuYWwgaGFyZHdhcmUgdHJpZ2dlciAocGluIDQ0KSwgMD1pbnRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIEFkQ29udHJvbF9UbXJUcgkweDA0CS8qIDE9ODI1NCBpcyBpdGVybmFsIHRyaWdnZXIgc291cmNlLCAwPXNvZnR3YXJlIHRyaWdnZXIgaXMgc291cmNlIChyZWdpc3RlciBQQ0k5MTE4X1NPRlRUUkcpICovCisjZGVmaW5lIEFkQ29udHJvbF9JbnQJMHgwMgkvKiAxPWVuYWJsZSBJTlQsIDA9ZGlzYWJsZSAqLworI2RlZmluZSBBZENvbnRyb2xfRG1hCTB4MDEJLyogMT1lbmFibGUgRE1BLCAwPWRpc2FibGUgKi8KKworLy8gYml0cyBmcm9tIEEvRCBmdW5jdGlvbiByZWdpc3RlciAoUENJOTExOF9BREZVTkMpCisjZGVmaW5lIEFkRnVuY3Rpb25fUERUcmcJMHg4MAkvKiAxPXBvc2l0aXZlLCAwPW5lZ2F0aXZlIGRpZ2l0YWwgdHJpZ2dlciAob25seSBwb3NpdGl2ZSBpcyBjb3JyZWN0KSAqLworI2RlZmluZSBBZEZ1bmN0aW9uX1BFVHJnCTB4NDAJLyogMT1wb3NpdGl2ZSwgMD1uZWdhdGl2ZSBleHRlcm5hbCB0cmlnZ2VyIChvbmx5IHBvc2l0aXZlIGlzIGNvcnJlY3QpICovCisjZGVmaW5lIEFkRnVuY3Rpb25fQlNTSAkJMHgyMAkvKiAxPXdpdGggc2FtcGxlJmhvbGQsIDA9d2l0aG91dCAqLworI2RlZmluZSBBZEZ1bmN0aW9uX0JNCQkweDEwCS8qIDE9YnVyc3QgbW9kZSwgMD1ub3JtYWwgbW9kZSAqLworI2RlZmluZSBBZEZ1bmN0aW9uX0JTCQkweDA4CS8qIDE9YnVyc3QgbW9kZSBzdGFydCwgMD1idXJzdCBtb2RlIHN0b3AgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9QTQkJMHgwNAkvKiAxPXBvc3QgdHJpZ2dlciBtb2RlLCAwPW5vdCBwb3N0IHRyaWdnZXIgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9BTQkJMHgwMgkvKiAxPWFib3V0IHRyaWdnZXIgbW9kZSwgMD1ub3QgYWJvdXQgdHJpZ2dlciAqLworI2RlZmluZSBBZEZ1bmN0aW9uX1N0YXJ0CTB4MDEJLyogMT10cmlnZ2VyIHN0YXJ0LCAwPXRyaWdnZXIgc3RvcCAqLworCisvLyBiaXRzIGZyb20gQS9EIHN0YXR1cyByZWdpc3RlciAoUENJOTExOF9BRFNUQVQpCisjZGVmaW5lIEFkU3RhdHVzX25GdWxsCTB4MTAwCS8qIDA9RklGTyBmdWxsIChmYXRhbCksIDE9bm90IGZ1bGwgKi8KKyNkZWZpbmUgQWRTdGF0dXNfbkhmdWxsCTB4MDgwCS8qIDA9RklGTyBoYWxmIGZ1bGwsIDE9RklGTyBub3QgaGFsZiBmdWxsICovCisjZGVmaW5lIEFkU3RhdHVzX25FcHR5CTB4MDQwCS8qIDA9RklGTyBlbXB0eSwgMT1GSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBBZFN0YXR1c19BY21wCTB4MDIwCS8qICAqLworI2RlZmluZSBBZFN0YXR1c19EVEgJMHgwMTAJLyogMT1leHRlcm5hbCBkaWdpdGFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgQWRTdGF0dXNfQm92ZXIJMHgwMDgJLyogMT1idXJzdCBtb2RlIG92ZXJydW4gKGZhdGFsKSAqLworI2RlZmluZSBBZFN0YXR1c19BRE9TCTB4MDA0CS8qIDE9QS9EIG92ZXIgc3BlZWQgKHdhcm5pbmcpICovCisjZGVmaW5lIEFkU3RhdHVzX0FET1IJMHgwMDIJLyogMT1BL0Qgb3ZlcnJ1biAoZmF0YWwpICovCisjZGVmaW5lIEFkU3RhdHVzX0FEcmR5CTB4MDAxCS8qIDE9QS9EIGFscmVhZHkgcmVhZHksIDA9bm90IHJlYWR5ICovCisKKy8vIGJpdHMgZm9yIGludGVycnVwdCByZWFzb24gYW5kIGNvbnRyb2wgKFBDSTkxMThfSU5UU1JDLCBQQ0k5MTE4X0lOVENUUkwpCisvLyAxPWludGVycnVwdCBvY2N1ciwgZW5hYmxlIHNvdXJjZSwgIDA9aW50ZXJydXB0IG5vdCBvY2N1ciwgZGlzYWJsZSBzb3VyY2UKKyNkZWZpbmUgSW50X1RpbWVyCTB4MDgJLyogdGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIEludF9BYm91dAkweDA0CS8qIGFib3V0IHRyaWdnZXIgY29tcGxldGUgKi8KKyNkZWZpbmUgSW50X0hmdWxsCTB4MDIJLyogQS9EIEZJRk8gaGxhZiBmdWxsICovCisjZGVmaW5lIEludF9EVHJnCTB4MDEJLyogZXh0ZXJuYWwgZGlnaXRhbCB0cmlnZ2VyICovCisKKyNkZWZpbmUgU1RBUlRfQUlfRVhUCTB4MDEJLyogc3RhcnQgbWVhc3VyZSBvbiBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFNUT1BfQUlfRVhUCTB4MDIJLyogc3RvcCBtZWFzdXJlIG9uIGV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgU1RBUlRfQUlfSU5UCTB4MDQJLyogc3RhcnQgbWVhc3VyZSBvbiBpbnRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFNUT1BfQUlfSU5UCTB4MDgJLyogc3RvcCBtZWFzdXJlIG9uIGludGVybmFsIHRyaWdnZXIgKi8KKworI2RlZmluZSBFWFRUUkdfQUkJMAkvKiBleHQgdHJnIGlzIHVzZWQgYnkgQUkgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTkxMThkZ19ociA9IHsgOCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTkxMThoZyA9IHsgOCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpCisJfQorfTsKKworI2RlZmluZSBQQ0k5MTE4X0JJUE9MQVJfUkFOR0VTCTQJLyogdXNlZCBmb3IgdGVzdCBvbiBtaXh0dXJlIG9mIEJJUC9VTkkgcmFuZ2VzICovCisKK3N0YXRpYyBpbnQgcGNpOTExOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2k5MTE4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwlpbnQgdmVuZG9yX2lkOwkJLy8gUENJIHZlbmRvciBhIGRldmljZSBJRCBvZiBjYXJkCisJaW50IGRldmljZV9pZDsKKwlpbnQgaW9yYW5nZV9hbWNjOwkvLyBpb3JhbmdlIGZvciBvd24gUzU5MzMgcmVnaW9uCisJaW50IGlvcmFuZ2VfOTExODsJLy8gcGFzcyB0aHJ1IGNhcmQgcmVnaW9uIHNpemUKKwlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zCisJaW50IG5fYWljaGFuZDsJCS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlCisJaW50IG11eF9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zIHdpdGggZXh0ZXJuYWwgbXVsdGlwbGV4b3IKKwlpbnQgbl9haWNoYW5saXN0OwkvLyBsZW4gb2YgY2hhbmxpc3QKKwlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCisJaW50IGFpX21heGRhdGE7CQkvLyByZXNvbHV0aW9uIG9mIEEvRAorCWludCBhb19tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBEL0EKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FpOwkvLyByYW5nZWxpc3QgZm9yIEEvRAorCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYW87CS8vIHJhbmdlbGlzdCBmb3IgRC9BCisJdW5zaWduZWQgaW50IGFpX25zX21pbjsJLy8gbWF4IHNhbXBsZSBzcGVlZCBvZiBjYXJkIHYgbnMKKwl1bnNpZ25lZCBpbnQgYWlfcGFjZXJfbWluOwkvLyBtaW5pbWFsIHBhY2VyIHZhbHVlIChjMSpjMiBvciBjMSBpbiBidXJzdCkKKwlpbnQgaGFsZl9maWZvX3NpemU7CS8vIHNpemUgb2YgRklGTy8yCisKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2k5MTE4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1DQywgMHg4MGQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2k5MTE4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjaTkxMThkZyIsIFBDSV9WRU5ET1JfSURfQU1DQywgMHg4MGQ5LAorCQkJQU1DQ19PUF9SRUdfU0laRSwgSU9SQU5HRV85MTE4LAorCQkJMTYsIDgsIDI1NiwgUENJOTExOF9DSEFOTEVOLCAyLCAweDBmZmYsIDB4MGZmZiwKKwkJCSZyYW5nZV9wY2k5MTE4ZGdfaHIsICZyYW5nZV9iaXBvbGFyMTAsCisJCTMwMDAsIDEyLCA1MTJ9LAorCXsicGNpOTExOGhnIiwgUENJX1ZFTkRPUl9JRF9BTUNDLCAweDgwZDksCisJCQlBTUNDX09QX1JFR19TSVpFLCBJT1JBTkdFXzkxMTgsCisJCQkxNiwgOCwgMjU2LCBQQ0k5MTE4X0NIQU5MRU4sIDIsIDB4MGZmZiwgMHgwZmZmLAorCQkJJnJhbmdlX3BjaTkxMThoZywgJnJhbmdlX2JpcG9sYXIxMCwKKwkJMzAwMCwgMTIsIDUxMn0sCisJeyJwY2k5MTE4aHIiLCBQQ0lfVkVORE9SX0lEX0FNQ0MsIDB4ODBkOSwKKwkJCUFNQ0NfT1BfUkVHX1NJWkUsIElPUkFOR0VfOTExOCwKKwkJCTE2LCA4LCAyNTYsIFBDSTkxMThfQ0hBTkxFTiwgMiwgMHhmZmZmLCAweDBmZmYsCisJCQkmcmFuZ2VfcGNpOTExOGRnX2hyLCAmcmFuZ2VfYmlwb2xhcjEwLAorCQkxMDAwMCwgNDAsIDUxMn0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2k5MTE4ID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k5MTE4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2k5MTE4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2k5MTE4X2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpOTExOCwgcGNpOTExOF9wY2lfdGFibGUpOworCitzdHJ1Y3QgcGNpOTExOF9wcml2YXRlIHsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZV9hOwkvLyBiYXNlK3NpemUgZm9yIEFNQ0MgY2hpcAorCXVuc2lnbmVkIGludCBtYXN0ZXI7CS8vIG1hc3RlciBjYXBhYmxlCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsJLy8gcHRyIHRvIGFjdHVhbCBwY2lkZXYKKwl1bnNpZ25lZCBpbnQgdXNlbXV4OwkvLyB3ZSB3YW50IHRvIHVzZSBleHRlcm5hbCBtdWx0aXBsZXhvciEKKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwl1bnNpZ25lZCBzaG9ydCBjaGFubGlzdFtQQ0k5MTE4X0NIQU5MRU4gKyAxXTsJLy8gbGlzdCBvZiBzY2FuZWQgY2hhbm5lbAorCXVuc2lnbmVkIGNoYXIgY2hhbmxpc3RsZW47CS8vIG51bWJlciBvZiBzY2FubGlzdAorI2VuZGlmCisJdW5zaWduZWQgY2hhciBBZENvbnRyb2xSZWc7CS8vIEEvRCBjb250cm9sIHJlZ2lzdGVyCisJdW5zaWduZWQgY2hhciBJbnRDb250cm9sUmVnOwkvLyBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlcgorCXVuc2lnbmVkIGNoYXIgQWRGdW5jdGlvblJlZzsJLy8gQS9EIGZ1bmN0aW9uIHJlZ2lzdGVyCisJY2hhciB2YWxpZDsJCS8vIGRyaXZlciBpcyBvaworCWNoYXIgYWlfbmV2ZXJlbmRpbmc7CS8vIHdlIGRvIHVubGltaXRlZCBBSQorCXVuc2lnbmVkIGludCBpODI1NF9vc2NfYmFzZTsJLy8gZnJlcXVlbmNlIG9mIG9uYm9hcmQgb3NjaWxhdG9yCisJdW5zaWduZWQgaW50IGFpX2RvOwkvLyB3aGF0IGRvIEFJPyAwPW5vdGhpbmcsIDEgdG8gNCBtb2RlCisJdW5zaWduZWQgaW50IGFpX2FjdF9zY2FuOwkvLyBob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZAorCXVuc2lnbmVkIGludCBhaV9idWZfcHRyOwkvLyBkYXRhIGJ1ZmZlciBwdHIgaW4gc2FtcGxlcworCXVuc2lnbmVkIGludCBhaV9uX2NoYW47CS8vIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkCisJdW5zaWduZWQgaW50IGFpX25fc2NhbmxlbjsJLy8gbGVuIG9mIGFjdHVhbCBzY2FubGlzdAorCXVuc2lnbmVkIGludCBhaV9uX3JlYWxzY2FubGVuOwkvLyB3aGF0IHdlIG11c3QgdHJhbnNmZXIgZm9yIG9uZSBvdXRnb2luZyBzY2FuIGluY2x1ZGUgZnJvbnQvYmFjayBhZGRzCisJdW5zaWduZWQgaW50IGFpX2FjdF9kbWFwb3M7CS8vIHBvc2l0aW9uIGluIGFjdHVhbCByZWFsIHN0cmVhbQorCXVuc2lnbmVkIGludCBhaV9hZGRfZnJvbnQ7CS8vIGhvdyBtYW55IGNoYW5uZWxzIHdlIG11c3QgYWRkIGJlZm9yZSBzY2FuIHRvIHNhdGlzZnkgUyZIPworCXVuc2lnbmVkIGludCBhaV9hZGRfYmFjazsJLy8gaG93IG1hbnkgY2hhbm5lbHMgd2UgbXVzdCBhZGQgYmVmb3JlIHNjYW4gdG8gc2F0aXNmeSBETUE/CisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLy8gYWN0YXVsIGNoYW5saXN0CisJdW5zaWduZWQgaW50IGFpX3RpbWVyMTsKKwl1bnNpZ25lZCBpbnQgYWlfdGltZXIyOworCXVuc2lnbmVkIGludCBhaV9mbGFnczsKKwljaGFyIGFpMTJfc3RhcnRzdG9wOwkvLyBtZWFzdXJlIGNhbiBzdGFydC9zdG9wIG9uIGV4dGVybmFsIHRyaWdnZXIKKwl1bnNpZ25lZCBpbnQgYWlfZGl2aXNvcjEsIGFpX2Rpdmlzb3IyOwkvLyBkaXZpc29ycyBmb3Igc3RhcnQgb2YgbWVhc3VyZSBvbiBleHRlcm5hbCBzdGFydAorCXVuc2lnbmVkIGludCBhaV9kYXRhX2xlbjsKKwlzaG9ydCAqYWlfZGF0YTsKKwlzaG9ydCBhb19kYXRhWzJdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8vIG51bWJlciBvZiBzY2FucyB0byBkbworCWNoYXIgZG1hX2RvdWJsZWJ1ZjsJLy8gd2UgY2FuIHVzZSBkb3VibGUgYnVmZnJpbmcKKwl1bnNpZ25lZCBpbnQgZG1hX2FjdGJ1ZjsJLy8gd2hpY2ggYnVmZmVyIGlzIHVzZWQgbm93CisJc2hvcnQgKmRtYWJ1Zl92aXJ0WzJdOwkvLyBwb2ludGVycyB0byBiZWdpbiBvZiBETUEgYnVmZmVyCisJdW5zaWduZWQgbG9uZyBkbWFidWZfaHdbMl07CS8vIGh3IGFkZHJlc3Mgb2YgRE1BIGJ1ZmYKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3NpemVbMl07CS8vIHNpemUgb2YgZG1hIGJ1ZmZlciBpbiBieXRlcworCXVuc2lnbmVkIGludCBkbWFidWZfdXNlX3NpemVbMl07CS8vIHdoaWNoIHNpemUgd2UgbWF5IG5vdyB1c2VkIGZvciB0cmFuc2ZlcgorCXVuc2lnbmVkIGludCBkbWFidWZfdXNlZF9zaXplWzJdOwkvLyB3aGljaCBzaXplIHdhcyB0cnVsbHkgdXNlZAorCXVuc2lnbmVkIGludCBkbWFidWZfcGFuaWNfc2l6ZVsyXTsKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3NhbXBsZXNbMl07CS8vIHNpemUgaW4gc2FtcGxlcworCWludCBkbWFidWZfcGFnZXNbMl07CS8vIG51bWJlciBvZiBwYWdlcyBpbiBidWZmZXIKKwl1bnNpZ25lZCBjaGFyIGNudDBfdXNlcnM7CS8vIGJpdCBmaWVsZCBvZiA4MjU0IENOVDAgdXNlcnMgKDAtdW51c2VkLCAxLUFPLCAyLURJLCAzLURPKQorCXVuc2lnbmVkIGNoYXIgZXh0dHJnX3VzZXJzOwkvLyBiaXQgZmllbGQgb2YgZXh0ZXJuYWwgdHJpZ2dlciB1c2VycyAoMC1BSSwgMS1BTywgMi1ESSwgMy1ETykKKwl1bnNpZ25lZCBpbnQgY250MF9kaXZpc29yOwkvLyBhY3R1YWwgQ05UMCBkaXZpc29yCisJdm9pZCAoKmludF9haV9mdW5jKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgc2hvcnQpOwkvLyBwdHIgdG8gYWN0dWFsIGludGVycnVwdCBBSSBmdW5jdGlvbgorCXVuc2lnbmVkIGNoYXIgYWkxNmJpdHM7CS8vID0xIDE2IGJpdCBjYXJkCisJdW5zaWduZWQgY2hhciB1c2VkbWE7CS8vID0xIHVzZSBETUEgdHJhbnNmZXIgYW5kIG5vdCBJTlQKKwl1bnNpZ25lZCBjaGFyIHVzZWVvc2hhbmRsZTsJLy8gPTEgY2hhbmdlIFdBS0VfRU9TIERNQSB0cmFuc2ZlciB0byBmaXQgb24gZXZlcnkgc2Vjb25kCisJdW5zaWduZWQgY2hhciB1c2Vzc2g7CS8vID0xIHR1cm4gb24gUyZIIHN1cHBvcnQKKwlpbnQgc29mdHNzaGRlbGF5OwkvLyA+MCB1c2Ugc29mdHdhcmUgUyZILCBudW1lciBpcyByZXF1ZXN0ZWQgZGVsYXkgaW4gbnMKKwl1bnNpZ25lZCBjaGFyIHNvZnRzc2hzYW1wbGU7CS8vIHBvbGFyaXR5IG9mIFMmSCBzaWduYWwgaW4gc2FtcGxlIHN0YXRlCisJdW5zaWduZWQgY2hhciBzb2Z0c3NoaG9sZDsJLy8gcG9sYXJpdHkgb2YgUyZIIHNpZ25hbCBpbiBob2xkIHN0YXRlCisJdW5zaWduZWQgaW50IGFpX21hc2tlcnI7CS8vIHdoaWNoIHdhcm5pbmcgd2FzIHByaW50ZWQKKwl1bnNpZ25lZCBpbnQgYWlfbWFza2hhcmRlcnI7CS8vIG9uIHdoaWNoIGVycm9yIGJpdHMgc3RvcHMKKwl1bnNpZ25lZCBpbnQgYWlfaW50dHJpZ19zdGFydDsJLy8gVFJJR19JTlQgZm9yIHN0YXJ0Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoc3RydWN0IGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBmcm9udGFkZCwgaW50IGJhY2thZGQpOworc3RhdGljIGludCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgcm90LCBpbnQgZnJvbnRhZGQsIGludCBiYWNrYWRkLAorCWludCB1c2VkbWEsIGNoYXIgZW9zaGFuZGxlKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMik7CitzdGF0aWMgaW50IHBjaTkxMThfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBwY2k5MTE4X2V4dHRyZ19hZGQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgc291cmNlKTsKK3N0YXRpYyBpbnQgcGNpOTExOF9leHR0cmdfZGVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFyIHNvdXJjZSk7CitzdGF0aWMgaW50IHBjaTkxMThfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgcGNpOTExOF9jYWxjX2Rpdmlzb3JzKGNoYXIgbW9kZSwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBpbnQgKnRpbTEsIHVuc2lnbmVkIGludCAqdGltMiwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBjaGFucywgdW5zaWduZWQgaW50ICpkaXYxLCB1bnNpZ25lZCBpbnQgKmRpdjIsCisJY2hhciB1c2Vzc2gsIHVuc2lnbmVkIGludCBjaG5zc2hmcm9udCk7CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl9yZWFkX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWludCBuLCB0aW1lb3V0OworCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gQWRDb250cm9sX0ludCAmIDB4ZmY7CisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CS8vIHBvc2l0aXZlIHRyaWdnZXJzLCBubyBTJkgsIG5vIGJ1cnN0LCBidXJzdCBzdG9wLCBubyBwb3N0IHRyaWdnZXIsIG5vIGFib3V0IHRyaWdnZXIsIHRyaWdnZXIgc3RvcAorCisJaWYgKCFzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCAxLCAmaW5zbi0+Y2hhbnNwZWMsIDAsIDAsIDAsIDAsIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NPRlRUUkcpOwkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCWNvbWVkaV91ZGVsYXkoMik7CisJCXRpbWVvdXQgPSAxMDA7CisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmIChpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEU1RBVCkgJiBBZFN0YXR1c19BRHJkeSkKKwkJCQlnb3RvIGNvbnZfZmluaXNoOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0Iik7CisJCWRhdGFbbl0gPSAwOworCQlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udl9maW5pc2g6CisJCWlmIChkZXZwcml2LT5haTE2Yml0cykgeworCQkJZGF0YVtuXSA9CisJCQkJKGlubChkZXYtPmlvYmFzZSArCisJCQkJCVBDSTkxMThfQURfREFUQSkgJiAweGZmZmYpIF4gMHg4MDAwOworCQl9IGVsc2UgeworCQkJZGF0YVtuXSA9CisJCQkJKGludyhkZXYtPmlvYmFzZSArCisJCQkJCVBDSTkxMThfQURfREFUQSkgPj4gNCkgJiAweGZmZjsKKwkJfQorCX0KKworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisJcmV0dXJuIG47CisKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbnJlZywgY2g7CisKKwljaCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChjaCkgeworCQljaGFucmVnID0gUENJOTExOF9EQTI7CisJfSBlbHNlIHsKKwkJY2hhbnJlZyA9IFBDSTkxMThfREExOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0bChkYXRhW25dLCBkZXYtPmlvYmFzZSArIGNoYW5yZWcpOworCQlkZXZwcml2LT5hb19kYXRhW2NoXSA9IGRhdGFbbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl9yZWFkX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fZGF0YVtjaGFuXTsKKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2luc25fYml0c19kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVsxXSA9IGlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfREkpICYgMHhmOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl9iaXRzX2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0bChzLT5zdGF0ZSAmIDB4MGYsIGRldi0+aW9iYXNlICsgUENJOTExOF9ETyk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTkxMThfYWlfbW9kZTRfc3dpdGNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPQorCQlBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZyB8IEFkRnVuY3Rpb25fQU07CisJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsKKwlvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMSAtIGRldnByaXYtPmRtYV9hY3RidWZdID4+IDEpICYgMHhmZiwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCW91dGwoKGRldnByaXYtPmRtYWJ1Zl9od1sxIC0gZGV2cHJpdi0+ZG1hX2FjdGJ1Zl0gPj4gOSkgJiAweGZmLAorCQlkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UMCk7CisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyB8PSBBZEZ1bmN0aW9uX1N0YXJ0OworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmcmFnbWVudF9kbWFfYnVmZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc2hvcnQgKiBkbWFfYnVmZmVyLCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpCit7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfcG9zID0gZGV2cHJpdi0+YWlfYWRkX2Zyb250LAorCQlzdG9wX3BvcyA9IGRldnByaXYtPmFpX2FkZF9mcm9udCArIGRldnByaXYtPmFpX25fY2hhbjsKKwl1bnNpZ25lZCBpbnQgcmF3X3NjYW5sZW4gPSBkZXZwcml2LT5haV9hZGRfZnJvbnQgKyBkZXZwcml2LT5haV9uX2NoYW4gKworCQlkZXZwcml2LT5haV9hZGRfYmFjazsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7CisJCWlmIChkZXZwcml2LT5haV9hY3RfZG1hcG9zID49IHN0YXJ0X3BvcyAmJgorCQkJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA8IHN0b3BfcG9zKSB7CisJCQlkbWFfYnVmZmVyW2orK10gPSBkbWFfYnVmZmVyW2ldOworCQl9CisJCWRldnByaXYtPmFpX2FjdF9kbWFwb3MrKzsKKwkJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyAlPSByYXdfc2NhbmxlbjsKKwl9CisKKwlyZXR1cm4gajsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9ibG9ja19mcm9tX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHNob3J0ICogZG1hX2J1ZmZlciwgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CisKKwludW1fc2FtcGxlcyA9IGRlZnJhZ21lbnRfZG1hX2J1ZmZlcihkZXYsIHMsIGRtYV9idWZmZXIsIG51bV9zYW1wbGVzKTsKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiArPQorCQkocy0+YXN5bmMtPmN1cl9jaGFuICsgbnVtX3NhbXBsZXMpIC8gZGV2cHJpdi0+YWlfbl9zY2FubGVuOworCXMtPmFzeW5jLT5jdXJfY2hhbiArPSBudW1fc2FtcGxlczsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gJT0gZGV2cHJpdi0+YWlfbl9zY2FubGVuOworCW51bV9ieXRlcyA9CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZG1hX2J1ZmZlciwKKwkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwlpZiAobnVtX2J5dGVzIDwgbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgY2hhciBwY2k5MTE4X2RlY29kZV9lcnJvcl9zdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBjaGFyIG0pCit7CisJaWYgKG0gJiAweDEwMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIEZJRk8gRnVsbCBzdGF0dXMgKEZhdGFsIEVycm9yISkiKTsKKwkJZGV2cHJpdi0+YWlfbWFza2VyciAmPSB+MHgxMDBMOworCX0KKwlpZiAobSAmIDB4MDA4KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiQS9EIEJ1cnN0IE1vZGUgT3ZlcnJ1biBTdGF0dXMgKEZhdGFsIEVycm9yISkiKTsKKwkJZGV2cHJpdi0+YWlfbWFza2VyciAmPSB+MHgwMDhMOworCX0KKwlpZiAobSAmIDB4MDA0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgT3ZlciBTcGVlZCBTdGF0dXMgKFdhcm5pbmchKSIpOworCQlkZXZwcml2LT5haV9tYXNrZXJyICY9IH4weDAwNEw7CisJfQorCWlmIChtICYgMHgwMDIpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBPdmVycnVuIFN0YXR1cyAoRmF0YWwgRXJyb3IhKSIpOworCQlkZXZwcml2LT5haV9tYXNrZXJyICY9IH4weDAwMkw7CisJfQorCWlmIChtICYgZGV2cHJpdi0+YWlfbWFza2hhcmRlcnIpIHsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQlwY2k5MTE4X2FpX2NhbmNlbChkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTkxMThfYWlfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgc3RhcnRfY2hhbl9pbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICphcnJheSA9IGRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQlpZiAoZGV2cHJpdi0+dXNlZG1hKQorCQkJYXJyYXlbaV0gPSBiZTE2X3RvX2NwdShhcnJheVtpXSk7CisJCWlmIChkZXZwcml2LT5haTE2Yml0cykgeworCQkJYXJyYXlbaV0gXj0gMHg4MDAwOworCQl9IGVsc2UgeworCQkJYXJyYXlbaV0gPSAoYXJyYXlbaV0gPj4gNCkgJiAweDBmZmY7CisJCX0KKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfcGNpOTExOF9haV9vbmVzYW1wbGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBzaG9ydCBpbnRfYWRzdGF0LCB1bnNpZ25lZCBpbnQgaW50X2FtY2MsCisJdW5zaWduZWQgc2hvcnQgaW50X2RhcSkKK3sKKwlyZWdpc3RlciBzaG9ydCBzYW1wbDsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJaWYgKGludF9hZHN0YXQgJiBkZXZwcml2LT5haV9tYXNrZXJyKQorCQlpZiAocGNpOTExOF9kZWNvZGVfZXJyb3Jfc3RhdHVzKGRldiwgcywgaW50X2Fkc3RhdCkpCisJCQlyZXR1cm47CisKKwlzYW1wbCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTkxMThfQURfREFUQSk7CisKKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwlpZiAoZGV2cHJpdi0+YWkxNmJpdHMgPT0gMCkgeworCQlpZiAoKHNhbXBsICYgMHgwMDBmKSAhPSBkZXZwcml2LT5jaGFubGlzdFtzLT5hc3luYy0+Y3VyX2NoYW5dKSB7CS8vIGRhdGEgZHJvcG91dCEKKwkJCXJ0X3ByaW50aworCQkJCSgiY29tZWRpOiBBL0QgIFNBTVBMIC0gZGF0YSBkcm9wb3V0OiByZWNlaXZlZCBjaGFubmVsICVkLCBleHBlY3RlZCAlZCFcbiIsCisJCQkJc2FtcGwgJiAweDAwMGYsCisJCQkJZGV2cHJpdi0+Y2hhbmxpc3Rbcy0+YXN5bmMtPmN1cl9jaGFuXSk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCQlwY2k5MTE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYKKwljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIHNhbXBsKTsKKwlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fc2NhbmxlbikgewkvKiBvbmUgc2NhbiBkb25lICovCisJCXMtPmFzeW5jLT5jdXJfY2hhbiAlPSBkZXZwcml2LT5haV9uX3NjYW5sZW47CisJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQl9CisJfQorCisJaWYgKHMtPmFzeW5jLT5ldmVudHMpCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTkxMThfYWlfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgc2hvcnQgaW50X2Fkc3RhdCwgdW5zaWduZWQgaW50IGludF9hbWNjLAorCXVuc2lnbmVkIHNob3J0IGludF9kYXEpCit7CisJdW5zaWduZWQgaW50IG5leHRfZG1hX2J1Ziwgc2FtcGxlc2luYnVmLCBzYW1wbHMsIG07CisKKwlpZiAoaW50X2FtY2MgJiBNQVNURVJfQUJPUlRfSU5UKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIE1BU1RFUiBETUEgQUJPUlQhIik7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW50X2FtY2MgJiBUQVJHRVRfQUJPUlRfSU5UKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIFRBUkdFVCBETUEgQUJPUlQhIik7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW50X2Fkc3RhdCAmIGRldnByaXYtPmFpX21hc2tlcnIpCisvLyAgICAgIGlmIChpbnRfYWRzdGF0ICYgMHgxMDYpCisJCWlmIChwY2k5MTE4X2RlY29kZV9lcnJvcl9zdGF0dXMoZGV2LCBzLCBpbnRfYWRzdGF0KSkKKwkJCXJldHVybjsKKworCXNhbXBsZXNpbmJ1ZiA9IGRldnByaXYtPmRtYWJ1Zl91c2Vfc2l6ZVtkZXZwcml2LT5kbWFfYWN0YnVmXSA+PiAxOwkvLyBudW1iZXIgb2YgcmVjZWl2ZWQgcmVhbCBzYW1wbGVzCisvLyAgICAgIERQUklOVEsoImRtYV9hY3RidWY9JWRcbiIsZGV2cHJpdi0+ZG1hX2FjdGJ1Zik7CisKKwlpZiAoZGV2cHJpdi0+ZG1hX2RvdWJsZWJ1ZikgewkvLyBzd2l0Y2ggRE1BIGJ1ZmZlcnMgaWYgaXMgdXNlZCBkb3VibGUgYnVmZmVyaW5nCisJCW5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5kbWFfYWN0YnVmOworCQlvdXRsKGRldnByaXYtPmRtYWJ1Zl9od1tuZXh0X2RtYV9idWZdLAorCQkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV0FSKTsKKwkJb3V0bChkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbbmV4dF9kbWFfYnVmXSwKKwkJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTVdUQyk7CisJCWRldnByaXYtPmRtYWJ1Zl91c2VkX3NpemVbbmV4dF9kbWFfYnVmXSA9CisJCQlkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbbmV4dF9kbWFfYnVmXTsKKwkJaWYgKGRldnByaXYtPmFpX2RvID09IDQpCisJCQlpbnRlcnJ1cHRfcGNpOTExOF9haV9tb2RlNF9zd2l0Y2goZGV2KTsKKwl9CisKKwlpZiAoc2FtcGxlc2luYnVmKSB7CisJCW0gPSBkZXZwcml2LT5haV9kYXRhX2xlbiA+PiAxOwkvLyBob3cgbWFueSBzYW1wbGVzIGlzIHRvIGVuZCBvZiBidWZmZXIKKy8vICAgICAgICAgICAgICBEUFJJTlRLKCJzYW1wcz0lZCBtPSVkICVkICVkXG4iLHNhbXBsZXNpbmJ1ZixtLHMtPmFzeW5jLT5idWZfaW50X2NvdW50LHMtPmFzeW5jLT5idWZfaW50X3B0cik7CisJCXNhbXBscyA9IG07CisJCW1vdmVfYmxvY2tfZnJvbV9kbWEoZGV2LCBzLAorCQkJZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbZGV2cHJpdi0+ZG1hX2FjdGJ1Zl0sCisJCQlzYW1wbGVzaW5idWYpOworCQltID0gbSAtIHNhbXBsczsJLy8gbT0gaG93IG1hbnkgc2FtcGxlcyB3YXMgdHJhbnNmZXJlZAorCX0KKy8vICAgICAgRFBSSU5USygiWVlZXG4iKTsKKworCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpCisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQlwY2k5MTE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisKKwlpZiAoZGV2cHJpdi0+ZG1hX2RvdWJsZWJ1ZikgewkvLyBzd2l0Y2ggZG1hIGJ1ZmZlcnMKKwkJZGV2cHJpdi0+ZG1hX2FjdGJ1ZiA9IDEgLSBkZXZwcml2LT5kbWFfYWN0YnVmOworCX0gZWxzZSB7CQkvLyByZXN0YXJ0IERNQSBpZiBpcyBub3QgdXNlZCBkb3VibGUgYnVmZmVyaW5nCisJCW91dGwoZGV2cHJpdi0+ZG1hYnVmX2h3WzBdLAorCQkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV0FSKTsKKwkJb3V0bChkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbMF0sCisJCQlkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XVEMpOworCQlpZiAoZGV2cHJpdi0+YWlfZG8gPT0gNCkKKwkJCWludGVycnVwdF9wY2k5MTE4X2FpX21vZGU0X3N3aXRjaChkZXYpOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2k5MTE4KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdW5zaWduZWQgaW50IGludF9kYXEgPSAwLCBpbnRfYW1jYywgaW50X2Fkc3RhdDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkKKwkJcmV0dXJuIElSUV9OT05FOwkvLyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQKKworCWludF9kYXEgPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQykgJiAweGY7CS8vIGdldCBJUlEgcmVhc29ucyBmcm9tIGNhcmQKKwlpbnRfYW1jYyA9IGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGdldCBJTlQgcmVnaXN0ZXIgZnJvbSBBTUNDIGNoaXAKKworLy8gICAgICBEUFJJTlRLKCJJTlQgZGFxPTB4JTAxeCBhbWNjPTB4JTA4eCBNV0FSPTB4JTA4eCBNV1RDPTB4JTA4eCBBRFNUQVQ9MHglMDJ4IGFpX2RvPSVkXG4iLCBpbnRfZGFxLCBpbnRfYW1jYywgaW5sKGRldnByaXYtPmlvYmFzZV9hK0FNQ0NfT1BfUkVHX01XQVIpLCBpbmwoZGV2cHJpdi0+aW9iYXNlX2ErQU1DQ19PUF9SRUdfTVdUQyksIGludyhkZXYtPmlvYmFzZStQQ0k5MTE4X0FEU1RBVCkmMHgxZmYsZGV2cHJpdi0+YWlfZG8pOworCisJaWYgKCghaW50X2RhcSkgJiYgKCEoaW50X2FtY2MgJiBBTllfUzU5M1hfSU5UKSkpCisJCXJldHVybiBJUlFfTk9ORTsJLy8gaW50ZXJydXB0IGZyb20gb3RoZXIgc291cmNlCisKKwlvdXRsKGludF9hbWNjIHwgMHgwMGZmMDAwMCwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBzaHV0ZG93biBJUlEgcmVhc29ucyBpbiBBTUNDCisKKwlpbnRfYWRzdGF0ID0gaW53KGRldi0+aW9iYXNlICsgUENJOTExOF9BRFNUQVQpICYgMHgxZmY7CS8vIGdldCBTVEFUVVMgcmVnaXN0ZXIKKworCWlmIChkZXZwcml2LT5haV9kbykgeworCQlpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3ApCisJCQlpZiAoKGludF9hZHN0YXQgJiBBZFN0YXR1c19EVEgpICYmIChpbnRfZGFxICYgSW50X0RUcmcpKSB7CS8vIHN0YXJ0IHN0b3Agb2YgbWVhc3VyZQorCQkJCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmIFNUQVJUX0FJX0VYVCkgeworCQkJCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmPQorCQkJCQkJflNUQVJUX0FJX0VYVDsKKwkJCQkJaWYgKCEoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJgorCQkJCQkJCVNUT1BfQUlfRVhUKSkKKwkJCQkJCXBjaTkxMThfZXh0dHJnX2RlbChkZXYsIEVYVFRSR19BSSk7CS8vIGRlYWN0aXZhdGUgRVhUIHRyaWdnZXIKKwkJCQkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsIGRldnByaXYtPmFpX2Rpdmlzb3IyKTsJLy8gc3RhcnQgcGFjZXIKKwkJCQkJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsCisJCQkJCQlkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJYWkxMl9zdGFydHN0b3AgJiBTVE9QX0FJX0VYVCkgeworCQkJCQkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJj0KKwkJCQkJCQl+U1RPUF9BSV9FWFQ7CisJCQkJCQlwY2k5MTE4X2V4dHRyZ19kZWwoZGV2LCBFWFRUUkdfQUkpOwkvLyBkZWFjdGl2YXRlIEVYVCB0cmlnZ2VyCisJCQkJCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDA7CS8vd2VsbCwgb24gbmV4dCBpbnRlcnJ1cHQgZnJvbSBETUEvRU9DIG1lYXN1cmUgd2lsbCBzdG9wCisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJKGRldnByaXYtPmludF9haV9mdW5jKSAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAwLCBpbnRfYWRzdGF0LAorCQkJaW50X2FtY2MsIGludF9kYXEpOworCisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaWYgKHRyaWdudW0gIT0gZGV2cHJpdi0+YWlfaW50dHJpZ19zdGFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmPSB+U1RBUlRfQUlfSU5UOworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJaWYgKGRldnByaXYtPmFpX2RvICE9IDMpIHsKKwkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsCisJCQlkZXZwcml2LT5haV9kaXZpc29yMik7CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfU29mdEc7CisJfQorCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcCwgZGl2aXNvcjEsIGRpdmlzb3IyOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQgfCBUUklHX0lOVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWlmIChkZXZwcml2LT5tYXN0ZXIpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQgfCBUUklHX0ZPTExPVzsKKwl9IGVsc2UgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCX0KKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlpZiAoZGV2cHJpdi0+bWFzdGVyKSB7CisJCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUIHwgVFJJR19OT1c7CisJfSBlbHNlIHsKKwkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJfQorCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJgorCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0lOVCAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPSBUUklHX0ZPTExPVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfSU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJY21kLT5zdG9wX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCWNtZC0+c3RhcnRfc3JjID0gVFJJR19OT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfSU5UKSB7CisJCWNtZC0+c3RhcnRfc3JjID0gVFJJR19OT1c7CisJCWVycisrOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19FWFQpKSAmJgorCQkoIShjbWQtPmNvbnZlcnRfc3JjICYgKFRSSUdfVElNRVIgfCBUUklHX05PVykpKSkgeworCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKKwkJZXJyKys7CisJfQorCisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSAmJgorCQkoIShjbWQtPmNvbnZlcnRfc3JjICYgKFRSSUdfVElNRVIgfCBUUklHX0VYVCkpKSkgeworCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQljbWQtPnN0b3Bfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgJiAoVFJJR19OT1cgfCBUUklHX0VYVCkpCisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoVFJJR19GT0xMT1cgfCBUUklHX0VYVCkpCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSAmJgorCQkoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSAmJiAoY21kLT5zY2FuX2VuZF9hcmcgPT0gMSkpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQljbWQtPmNvbnZlcnRfYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCQllcnIrKzsKKwkJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQkJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnID4gNjU1MzUpIHsKKwkJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDY1NTM1OworCQkJCWVycisrOworCQkJfQorCQl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19OT1cpKQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJCWVycisrOworCQl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHRoaXNfYm9hcmQtPm5fYWljaGFubGlzdCkgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFubGlzdDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnIDwgY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKChjbWQtPnNjYW5fZW5kX2FyZyAlIGNtZC0+Y2hhbmxpc3RfbGVuKSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9CisJCQljbWQtPmNoYW5saXN0X2xlbiAqIChjbWQtPnNjYW5fZW5kX2FyZyAvCisJCQljbWQtPmNoYW5saXN0X2xlbik7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiUzEgdGltZXIxPSV1IHRpbWVyMj0ldVxuIixjbWQtPnNjYW5fYmVnaW5fYXJnLGNtZC0+Y29udmVydF9hcmcpOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJTMiB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLGNtZC0+c2Nhbl9iZWdpbl9hcmcsY21kLT5jb252ZXJ0X2FyZyk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgJiAoVFJJR19USU1FUiB8IFRSSUdfTk9XKSkgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJzMSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLGNtZC0+c2Nhbl9iZWdpbl9hcmcsY21kLT5jb252ZXJ0X2FyZyk7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIKKwkJCSYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnID09IDApIHsKKwkJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQkJCXRoaXNfYm9hcmQtPmFpX25zX21pbiAqCisJCQkJCShjbWQtPnNjYW5fZW5kX2FyZyArIDIpKSB7CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCQkJdGhpc19ib2FyZC0+YWlfbnNfbWluICoKKwkJCQkJCShjbWQtPnNjYW5fZW5kX2FyZyArIDIpOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiczIgdGltZXIxPSV1IHRpbWVyMj0ldVxuIixjbWQtPnNjYW5fYmVnaW5fYXJnLGNtZC0+Y29udmVydF9hcmcpOworCQkJCQllcnIrKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCQkJY21kLT5jb252ZXJ0X2FyZyAqCisJCQkJCQljbWQtPmNoYW5saXN0X2xlbjsKKy8vICAgICAgICAgICAgICBydF9wcmludGsoInMzIHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsY21kLT5zY2FuX2JlZ2luX2FyZyxjbWQtPmNvbnZlcnRfYXJnKTsKKwkJCQkJZXJyKys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoY21kLT5jaGFubGlzdCkKKwkJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0X2xlbiwKKwkJCQljbWQtPmNoYW5saXN0LCAwLCAwKSkKKwkJCXJldHVybiA1OwkvLyBpbmNvcnJlY3QgY2hhbm5lbHMgbGlzdAorCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IENvbXB1dGVfYW5kX3NldHVwX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgZG1hbGVuMCwgZG1hbGVuMSwgaTsKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKClcbiIpOworCWRtYWxlbjAgPSBkZXZwcml2LT5kbWFidWZfc2l6ZVswXTsKKwlkbWFsZW4xID0gZGV2cHJpdi0+ZG1hYnVmX3NpemVbMV07CisJRFBSSU5USygiMSBkbWFsZW4wPSVkIGRtYWxlbjE9JWQgYWlfZGF0YV9sZW49JWRcbiIsIGRtYWxlbjAsIGRtYWxlbjEsCisJCWRldnByaXYtPmFpX2RhdGFfbGVuKTsKKwkvLyBpc24ndCBvdXRwdXQgYnVmZiBzbWFsbGVyIHRoYXQgb3VyIERNQSBidWZmPworCWlmIChkbWFsZW4wID4gKGRldnByaXYtPmFpX2RhdGFfbGVuKSkgeworCQlkbWFsZW4wID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gJiB+M0w7CS8vIGFsbGlnbiB0byAzMmJpdCBkb3duCisJfQorCWlmIChkbWFsZW4xID4gKGRldnByaXYtPmFpX2RhdGFfbGVuKSkgeworCQlkbWFsZW4xID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gJiB+M0w7CS8vIGFsbGlnbiB0byAzMmJpdCBkb3duCisJfQorCURQUklOVEsoIjIgZG1hbGVuMD0lZCBkbWFsZW4xPSVkIFxuIiwgZG1hbGVuMCwgZG1hbGVuMSk7CisKKwkvLyB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwlpZiAoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCWlmIChkbWFsZW4wIDwgKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkpIHsKKwkJCS8vIHVmZiwgdG9vIHNob3J0IERNQSBidWZmZXIsIGRpc2FibGUgRU9TIHN1cHBvcnQhCisJCQlkZXZwcml2LT5haV9mbGFncyAmPSAoflRSSUdfV0FLRV9FT1MpOworCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGklZDogV0FSOiBETUEwIGJ1ZiB0b28gc2hvcnQsIGNhbm4ndCBzdXBwb3J0IFRSSUdfV0FLRV9FT1MgKCVkPCVkKVxuIiwKKwkJCQlkZXYtPm1pbm9yLCBkbWFsZW4wLAorCQkJCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSk7CisJCX0gZWxzZSB7CisJCQkvLyBzaG9ydCBmaXJzdCBETUEgYnVmZmVyIHRvIG9uZSBzY2FuCisJCQlkbWFsZW4wID0gZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxOworCQkJRFBSSU5USygiMjEgZG1hbGVuMD0lZCBhaV9uX3JlYWxzY2FubGVuPSVkIHVzZWVvc2hhbmRsZT0lZFxuIiwgZG1hbGVuMCwgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwgZGV2cHJpdi0+dXNlZW9zaGFuZGxlKTsKKwkJCWlmIChkZXZwcml2LT51c2Vlb3NoYW5kbGUpCisJCQkJZG1hbGVuMCArPSAyOworCQkJaWYgKGRtYWxlbjAgPCA0KSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpJWQ6IEVSUjogRE1BMCBidWYgbGVuIGJ1Zz8gKCVkPDQpXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBkbWFsZW4wKTsKKwkJCQlkbWFsZW4wID0gNDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCWlmIChkbWFsZW4xIDwgKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkpIHsKKwkJCS8vIHVmZiwgdG9vIHNob3J0IERNQSBidWZmZXIsIGRpc2FibGUgRU9TIHN1cHBvcnQhCisJCQlkZXZwcml2LT5haV9mbGFncyAmPSAoflRSSUdfV0FLRV9FT1MpOworCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGklZDogV0FSOiBETUExIGJ1ZiB0b28gc2hvcnQsIGNhbm4ndCBzdXBwb3J0IFRSSUdfV0FLRV9FT1MgKCVkPCVkKVxuIiwKKwkJCQlkZXYtPm1pbm9yLCBkbWFsZW4xLAorCQkJCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSk7CisJCX0gZWxzZSB7CisJCQkvLyBzaG9ydCBzZWNvbmQgRE1BIGJ1ZmZlciB0byBvbmUgc2NhbgorCQkJZG1hbGVuMSA9IGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMTsKKwkJCURQUklOVEsoIjIyIGRtYWxlbjE9JWQgYWlfbl9yZWFsc2Nhbmxlbj0lZCB1c2Vlb3NoYW5kbGU9JWRcbiIsIGRtYWxlbjEsIGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sIGRldnByaXYtPnVzZWVvc2hhbmRsZSk7CisJCQlpZiAoZGV2cHJpdi0+dXNlZW9zaGFuZGxlKQorCQkJCWRtYWxlbjEgLT0gMjsKKwkJCWlmIChkbWFsZW4xIDwgNCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBFUlI6IERNQTEgYnVmIGxlbiBidWc/ICglZDw0KVxuIiwKKwkJCQkJZGV2LT5taW5vciwgZG1hbGVuMSk7CisJCQkJZG1hbGVuMSA9IDQ7CisJCQl9CisJCX0KKwl9CisKKwlEUFJJTlRLKCIzIGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworCS8vIHRyYW5zZmVyIHdpdGhvdXQgVFJJR19XQUtFX0VPUworCWlmICghKGRldnByaXYtPmFpX2ZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsKKwkJLy8gaWYgaXQncyBwb3NzaWJsZSB0aGVuIGFsbGlnbiBETUEgYnVmZmVycyB0byBsZW5ndGggb2Ygc2NhbgorCQlpID0gZG1hbGVuMDsKKwkJZG1hbGVuMCA9CisJCQkoZG1hbGVuMCAvIChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSAqCisJCQkoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKTsKKwkJZG1hbGVuMCAmPSB+M0w7CisJCWlmICghZG1hbGVuMCkKKwkJCWRtYWxlbjAgPSBpOwkvLyB1ZmYuIHZlcnkgbG9uZyBzY2FuPworCQlpID0gZG1hbGVuMTsKKwkJZG1hbGVuMSA9CisJCQkoZG1hbGVuMSAvIChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSAqCisJCQkoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKTsKKwkJZG1hbGVuMSAmPSB+M0w7CisJCWlmICghZG1hbGVuMSkKKwkJCWRtYWxlbjEgPSBpOwkvLyB1ZmYuIHZlcnkgbG9uZyBzY2FuPworCQkvLyBpZiBtZWFzdXJlIGlzbid0IG5ldmVyZW5kaW5nIHRoZW4gdGVzdCwgaWYgaXQgd2hvbGUgZml0cyBpbnRvIG9uZSBvciB0d28gRE1BIGJ1ZmZlcnMKKwkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykgeworCQkJLy8gZml0cyB3aG9sZSBtZWFzdXJlIGludG8gb25lIERNQSBidWZmZXI/CisJCQlpZiAoZG1hbGVuMCA+CisJCQkJKChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJZGV2cHJpdi0+YWlfc2NhbnMpKSB7CisJCQkJRFBSSU5USygiMy4wIGFpX25fcmVhbHNjYW5sZW49JWQgYWlfc2NhbnM9JWQgXG4iLCBkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuLCBkZXZwcml2LT5haV9zY2Fucyk7CisJCQkJZG1hbGVuMCA9CisJCQkJCShkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJZGV2cHJpdi0+YWlfc2NhbnM7CisJCQkJRFBSSU5USygiMy4xIGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsCisJCQkJCWRtYWxlbjEpOworCQkJCWRtYWxlbjAgJj0gfjNMOworCQkJfSBlbHNlIHsJLy8gZml0cyB3aG9sZSBtZWFzdXJlIGludG8gdHdvIERNQSBidWZmZXI/CisJCQkJaWYgKGRtYWxlbjEgPgorCQkJCQkoKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkgKgorCQkJCQkJZGV2cHJpdi0+YWlfc2NhbnMgLSBkbWFsZW4wKSkKKwkJCQkJZG1hbGVuMSA9CisJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQlhaV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJCWRldnByaXYtPmFpX3NjYW5zIC0gZG1hbGVuMDsKKwkJCQlEUFJJTlRLKCIzLjIgZG1hbGVuMD0lZCBkbWFsZW4xPSVkIFxuIiwgZG1hbGVuMCwKKwkJCQkJZG1hbGVuMSk7CisJCQkJZG1hbGVuMSAmPSB+M0w7CisJCQl9CisJCX0KKwl9CisKKwlEUFJJTlRLKCI0IGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworCisJLy8gdGhlc2UgRE1BIGJ1ZmZlciBzaXplIHdlJ2xsIGJlIHVzZWQKKwlkZXZwcml2LT5kbWFfYWN0YnVmID0gMDsKKwlkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbMF0gPSBkbWFsZW4wOworCWRldnByaXYtPmRtYWJ1Zl91c2Vfc2l6ZVsxXSA9IGRtYWxlbjE7CisKKwlEUFJJTlRLKCI1IGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworI2lmIDAKKwlpZiAoZGV2cHJpdi0+YWlfbl9zY2FubGVuIDwgdGhpc19ib2FyZC0+aGFsZl9maWZvX3NpemUpIHsKKwkJZGV2cHJpdi0+ZG1hYnVmX3BhbmljX3NpemVbMF0gPQorCQkJKHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplIC8gZGV2cHJpdi0+YWlfbl9zY2FubGVuICsKKwkJCTEpICogZGV2cHJpdi0+YWlfbl9zY2FubGVuICogc2l6ZW9mKHNob3J0KTsKKwkJZGV2cHJpdi0+ZG1hYnVmX3BhbmljX3NpemVbMV0gPQorCQkJKHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplIC8gZGV2cHJpdi0+YWlfbl9zY2FubGVuICsKKwkJCTEpICogZGV2cHJpdi0+YWlfbl9zY2FubGVuICogc2l6ZW9mKHNob3J0KTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kbWFidWZfcGFuaWNfc2l6ZVswXSA9CisJCQkoZGV2cHJpdi0+YWlfbl9zY2FubGVuIDw8IDEpICUgZGV2cHJpdi0+ZG1hYnVmX3NpemVbMF07CisJCWRldnByaXYtPmRtYWJ1Zl9wYW5pY19zaXplWzFdID0KKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gPDwgMSkgJSBkZXZwcml2LT5kbWFidWZfc2l6ZVsxXTsKKwl9CisjZW5kaWYKKworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUikgJiAofkVOX0EyUF9UUkFOU0ZFUlMpLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01DU1IpOwkvLyBzdG9wIERNQQorCW91dGwoZGV2cHJpdi0+ZG1hYnVmX2h3WzBdLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XQVIpOworCW91dGwoZGV2cHJpdi0+ZG1hYnVmX3VzZV9zaXplWzBdLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XVEMpOworCS8vIGluaXQgRE1BIHRyYW5zZmVyCisJb3V0bCgweDAwMDAwMDAwIHwgQUlOVF9XUklURV9DT01QTCwKKwkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOworLy8gICAgICBvdXRsKDB4MDIwMDAwMDB8QUlOVF9XUklURV9DT01QTCwgZGV2cHJpdi0+aW9iYXNlX2ErQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsKKwkJCUFNQ0NfT1BfUkVHX01DU1IpIHwgUkVTRVRfQTJQX0ZMQUdTIHwgQTJQX0hJX1BSSU9SSVRZIHwKKwkJRU5fQTJQX1RSQU5TRkVSUywgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NQ1NSKTsKKwlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUikgfCBFTl9BMlBfVFJBTlNGRVJTLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGFsbG93IGJ1cyBtYXN0ZXJpbmcKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEVORDogQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKClcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2FpX2RvY21kX3NhbXBsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogQkdOOiBwY2k5MTE4X2FpX2RvY21kX3NhbXBsKCVkLCkgWyVkXVxuIiwKKwkJZGV2LT5taW5vciwgZGV2cHJpdi0+YWlfZG8pOworCXN3aXRjaCAoZGV2cHJpdi0+YWlfZG8pIHsKKwljYXNlIDE6CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfVG1yVHI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY29tZWRpX2Vycm9yKGRldiwgInBjaTkxMThfYWlfZG9jbWRfc2FtcGwoKSBtb2RlIDIgYnVnIVxuIik7CisJCXJldHVybiAtRUlPOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9FeHRNOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJwY2k5MTE4X2FpX2RvY21kX3NhbXBsKCkgbW9kZSA0IGJ1ZyFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LAorCQkJInBjaTkxMThfYWlfZG9jbWRfc2FtcGwoKSBtb2RlIG51bWJlciBidWchXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfTsKKworCWRldnByaXYtPmludF9haV9mdW5jID0gaW50ZXJydXB0X3BjaTkxMThfYWlfb25lc2FtcGxlOwkvL3RyYW5zZmVyIGZ1bmN0aW9uCisKKwlpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3ApCisJCXBjaTkxMThfZXh0dHJnX2FkZChkZXYsIEVYVFRSR19BSSk7CS8vIGFjdGl2YXRlIEVYVCB0cmlnZ2VyCisKKwlpZiAoKGRldnByaXYtPmFpX2RvID09IDEpIHx8IChkZXZwcml2LT5haV9kbyA9PSAyKSkKKwkJZGV2cHJpdi0+SW50Q29udHJvbFJlZyB8PSBJbnRfVGltZXI7CisKKwlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX0ludDsKKworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKSB8IDB4MWYwMCwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBhbGxvdyBJTlQgaW4gQU1DQworCisJaWYgKCEoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJiAoU1RBUlRfQUlfRVhUIHwgU1RBUlRfQUlfSU5UKSkpIHsKKwkJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CisJCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJCWlmIChkZXZwcml2LT5haV9kbyAhPSAzKSB7CisJCQlzdGFydF9wYWNlcihkZXYsIGRldnByaXYtPmFpX2RvLCBkZXZwcml2LT5haV9kaXZpc29yMSwKKwkJCQlkZXZwcml2LT5haV9kaXZpc29yMik7CisJCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX1NvZnRHOworCQl9CisJCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCX0KKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEVORDogcGNpOTExOF9haV9kb2NtZF9zYW1wbCgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9kb2NtZF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IHBjaTkxMThfYWlfZG9jbWRfZG1hKCVkLCkgWyVkLCVkXVxuIiwKKwkJZGV2LT5taW5vciwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPnVzZWRtYSk7CisJQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKGRldik7CisKKwlzd2l0Y2ggKGRldnByaXYtPmFpX2RvKSB7CisJY2FzZSAxOgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX1RtclRyIHwgQWRDb250cm9sX0RtYSkgJiAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX1RtclRyIHwgQWRDb250cm9sX0RtYSkgJiAweGZmKTsKKwkJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9CisJCQlBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZyB8IEFkRnVuY3Rpb25fQk0gfAorCQkJQWRGdW5jdGlvbl9CUzsKKwkJaWYgKGRldnByaXYtPnVzZXNzaCAmJiAoIWRldnByaXYtPnNvZnRzc2hkZWxheSkpCisJCQlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnIHw9IEFkRnVuY3Rpb25fQlNTSDsKKwkJb3V0bChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQlVSU1QpOworCQlicmVhazsKKwljYXNlIDM6CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PQorCQkJKChBZENvbnRyb2xfRXh0TSB8IEFkQ29udHJvbF9EbWEpICYgMHhmZik7CisJCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPSBBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX1RtclRyIHwgQWRDb250cm9sX0RtYSkgJiAweGZmKTsKKwkJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9CisJCQlBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZyB8IEFkRnVuY3Rpb25fQU07CisJCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJCW91dGwoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworCQlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMF0gPj4gMSkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCQlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMF0gPj4gOSkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCQlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnIHw9IEFkRnVuY3Rpb25fU3RhcnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJwY2k5MTE4X2FpX2RvY21kX2RtYSgpIG1vZGUgbnVtYmVyIGJ1ZyFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9OworCisJaWYgKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wKSB7CisJCXBjaTkxMThfZXh0dHJnX2FkZChkZXYsIEVYVFRSR19BSSk7CS8vIGFjdGl2YXRlIEVYVCB0cmlnZ2VyCisJfQorCisJZGV2cHJpdi0+aW50X2FpX2Z1bmMgPSBpbnRlcnJ1cHRfcGNpOTExOF9haV9kbWE7CS8vdHJhbnNmZXIgZnVuY3Rpb24KKworCW91dGwoMHgwMjAwMDAwMCB8IEFJTlRfV1JJVEVfQ09NUEwsCisJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCWlmICghKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wICYgKFNUQVJUX0FJX0VYVCB8IFNUQVJUX0FJX0lOVCkpKSB7CisJCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCQlpZiAoZGV2cHJpdi0+YWlfZG8gIT0gMykgeworCQkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsCisJCQkJZGV2cHJpdi0+YWlfZGl2aXNvcjIpOworCQkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9Tb2Z0RzsKKwkJfQorCQlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOworCX0KKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogcGNpOTExOF9haV9kb2NtZF9kbWEoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBhZGRjaGFucyA9IDA7CisJaW50IHJldCA9IDA7CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IHBjaTkxMThfYWlfY21kKCVkLClcbiIsIGRldi0+bWlub3IpOworCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wID0gMDsKKwlkZXZwcml2LT5haV9mbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+YWlfbl9jaGFuID0gY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+YWlfbl9zY2FubGVuID0gY21kLT5zY2FuX2VuZF9hcmc7CisJZGV2cHJpdi0+YWlfY2hhbmxpc3QgPSBjbWQtPmNoYW5saXN0OworCWRldnByaXYtPmFpX2RhdGEgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmOworCWRldnByaXYtPmFpX2RhdGFfbGVuID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6OworCWRldnByaXYtPmFpX3RpbWVyMSA9IDA7CisJZGV2cHJpdi0+YWlfdGltZXIyID0gMDsKKwlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSAwOworCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMDsKKwlkZXZwcml2LT5haV9tYXNrZXJyID0gMHgxMGU7CisKKwkvLyBwcmVwYXJlIGZvciBzdGFydC9zdG9wIGNvbmRpdGlvbnMKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wIHw9IFNUQVJUX0FJX0VYVDsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDE7CisJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wIHw9IFNUT1BfQUlfRVhUOworCX0KKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQpIHsKKwkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgfD0gU1RBUlRfQUlfSU5UOworCQlkZXZwcml2LT5haV9pbnR0cmlnX3N0YXJ0ID0gY21kLT5zdGFydF9hcmc7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNpOTExOF9haV9pbnR0cmlnOworCX0KKyNpZiAwCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19JTlQpIHsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOworCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCB8PSBTVE9QX0FJX0lOVDsKKwl9CisjZW5kaWYKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpCisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gMDsKKwl9CisKKwkvLyB1c2Ugc2FtcGxlJmhvbGQgc2lnbmFsPworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCWRldnByaXYtPnVzZXNzaCA9IDE7CisJfQkJCS8vIHllcworCWVsc2UgeworCQlkZXZwcml2LT51c2Vzc2ggPSAwOworCX0JCQkvLyBubworCisJRFBSSU5USygiMSBuZXZlcmVuZGluZz0lZCBzY2Fucz0ldSB1c2Vzc2g9JWQgYWlfc3RhcnRzdG9wPTB4JTJ4XG4iLAorCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZywgZGV2cHJpdi0+YWlfc2NhbnMsIGRldnByaXYtPnVzZXNzaCwKKwkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3ApOworCisJLy8gdXNlIGFkZGl0aW9uYWwgc2FtcGxlIGF0IGVuZCBvZiBldmVyeSBzY2FuIHRvIHNhdGlzdHkgRE1BIDMyIGJpdCB0cmFuc2Zlcj8KKwlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSAwOworCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMDsKKwlkZXZwcml2LT51c2Vlb3NoYW5kbGUgPSAwOworCWlmIChkZXZwcml2LT5tYXN0ZXIpIHsKKwkJZGV2cHJpdi0+dXNlZG1hID0gMTsKKwkJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgJiYKKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gPT0gMSkpIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2sgPSAxOworCQkJfQorCQkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCWRldnByaXYtPnVzZWRtYSA9IDA7CS8vIHVzZSBJTlQgdHJhbnNmZXIgaWYgc2Nhbmxpc3QgaGF2ZSBvbmx5IG9uZSBjaGFubmVsCisJCQl9CisJCX0KKwkJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgJiYKKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gJiAxKSAmJgorCQkJKGRldnByaXYtPmFpX25fc2NhbmxlbiA+IDEpKSB7CisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkJCS8vdnByaXYtPnVzZWVvc2hhbmRsZT0xOyAvLyBjaGFuZ2UgRE1BIHRyYW5zZmVyIGJsb2NrIHRvIGZpdCBFT1Mgb24gZXZlcnkgc2Vjb25kIGNhbGwKKwkJCQlkZXZwcml2LT51c2VkbWEgPSAwOwkvLyBYWFggbWF5YmUgY2FuIGJlIGNvcnJlY3RlZCB0byB1c2UgMTYgYml0IERNQQorCQkJfSBlbHNlIHsJLy8gd2VsbCwgd2UgbXVzdCBpbnNlcnQgb25lIHNhbXBsZSB0byBlbmQgb2YgRU9TIHRvIG1lZXQgMzIgYml0IHRyYW5zZmVyCisJCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2sgPSAxOworCQkJfQorCQl9CisJfSBlbHNlIHsJCS8vIGludGVycnVwdCB0cmFuc2ZlciBkb24ndCBuZWVkIGFueSBjb3JyZWN0aW9uCisJCWRldnByaXYtPnVzZWRtYSA9IDA7CisJfQorCisJLy8gd2UgbmVlZCBzb2Z0d2FyZSBTJkggc2lnbmFsPyBJdCBhZGQgIHR3byBzYW1wbGVzIGJlZm9yZSBldmVyeSBzY2FuIGFzIG1pbmltdW0KKwlpZiAoZGV2cHJpdi0+dXNlc3NoICYmIGRldnByaXYtPnNvZnRzc2hkZWxheSkgeworCQlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSAyOworCQlpZiAoKGRldnByaXYtPnVzZWRtYSA9PSAxKSAmJiAoZGV2cHJpdi0+YWlfYWRkX2JhY2sgPT0gMSkpIHsJLy8gbW92ZSBpdCB0byBmcm9udAorCQkJZGV2cHJpdi0+YWlfYWRkX2Zyb250Kys7CisJCQlkZXZwcml2LT5haV9hZGRfYmFjayA9IDA7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlhZGRjaGFucyA9IGRldnByaXYtPnNvZnRzc2hkZWxheSAvIGNtZC0+Y29udmVydF9hcmc7CisJCWlmIChkZXZwcml2LT5zb2Z0c3NoZGVsYXkgJSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJYWRkY2hhbnMrKzsKKwkJaWYgKGFkZGNoYW5zID4gKGRldnByaXYtPmFpX2FkZF9mcm9udCAtIDEpKSB7CS8vIHVmZiwgc3RpbGwgc2hvcnQgOi0oCisJCQlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSBhZGRjaGFucyArIDE7CisJCQlpZiAoZGV2cHJpdi0+dXNlZG1hID09IDEpCisJCQkJaWYgKChkZXZwcml2LT5haV9hZGRfZnJvbnQgKworCQkJCQkJZGV2cHJpdi0+YWlfbl9jaGFuICsKKwkJCQkJCWRldnByaXYtPmFpX2FkZF9iYWNrKSAmIDEpCisJCQkJCWRldnByaXYtPmFpX2FkZF9mcm9udCsrOwkvLyByb3VuZCB1cCB0byAzMiBiaXQKKwkJfQorCX0JCQkvLyB3ZWxsLCB3ZSBub3cga25vdyB3aGF0IG11c3QgYmUgYWxsIGFkZGVkCisKKwlkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuID0JLy8gd2hhdCB3ZSBtdXN0IHRha2UgZnJvbSBjYXJkIGluIHJlYWwgdG8gaGF2ZSBhaV9uX3NjYW5sZW4gb24gb3V0cHV0PworCQkoZGV2cHJpdi0+YWlfYWRkX2Zyb250ICsgZGV2cHJpdi0+YWlfbl9jaGFuICsKKwkJZGV2cHJpdi0+YWlfYWRkX2JhY2spICogKGRldnByaXYtPmFpX25fc2NhbmxlbiAvCisJCWRldnByaXYtPmFpX25fY2hhbik7CisKKwlEUFJJTlRLKCIyIHVzZWRtYT0lZCByZWFsc2Nhbj0lZCBhZj0ldSBuX2NoYW49JWQgYWI9JWQgbl9zY2FubGVuPSVkXG4iLAorCQlkZXZwcml2LT51c2VkbWEsCisJCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sIGRldnByaXYtPmFpX2FkZF9mcm9udCwKKwkJZGV2cHJpdi0+YWlfbl9jaGFuLCBkZXZwcml2LT5haV9hZGRfYmFjaywKKwkJZGV2cHJpdi0+YWlfbl9zY2FubGVuKTsKKworCS8vIGNoZWNrIGFuZCBzZXR1cCBjaGFubmVsIGxpc3QKKwlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGRldnByaXYtPmFpX25fY2hhbiwKKwkJCWRldnByaXYtPmFpX2NoYW5saXN0LCBkZXZwcml2LT5haV9hZGRfZnJvbnQsCisJCQlkZXZwcml2LT5haV9hZGRfYmFjaykpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfbl9jaGFuLAorCQkJZGV2cHJpdi0+YWlfY2hhbmxpc3QsIDAsIGRldnByaXYtPmFpX2FkZF9mcm9udCwKKwkJCWRldnByaXYtPmFpX2FkZF9iYWNrLCBkZXZwcml2LT51c2VkbWEsCisJCQlkZXZwcml2LT51c2Vlb3NoYW5kbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vIGNvbXB1dGUgdGltZXJzIHNldHRpbmdzCisJLy8gc2ltcGxlc3Qgd2F5LCBmcj00TWh6Lyh0aW0xKnRpbTIpLCBjaGFubmVsIG1hbmlwdWxhdGlvbiB3aXRob3V0IHRpbWVycyBlZmZlY3QKKwlpZiAoKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB8fCAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgfHwgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19JTlQpKSAmJiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSkgewkvLyBib3RoIHRpbWVyIGlzIHVzZWQgZm9yIG9uZSB0aW1lCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCQlkZXZwcml2LT5haV9kbyA9IDQ7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9kbyA9IDE7CisJCX0KKwkJcGNpOTExOF9jYWxjX2Rpdmlzb3JzKGRldnByaXYtPmFpX2RvLCBkZXYsIHMsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgJmNtZC0+Y29udmVydF9hcmcsCisJCQlkZXZwcml2LT5haV9mbGFncywgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwKKwkJCSZkZXZwcml2LT5haV9kaXZpc29yMSwgJmRldnByaXYtPmFpX2Rpdmlzb3IyLAorCQkJZGV2cHJpdi0+dXNlc3NoLCBkZXZwcml2LT5haV9hZGRfZnJvbnQpOworCQlkZXZwcml2LT5haV90aW1lcjIgPSBjbWQtPmNvbnZlcnRfYXJnOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSAmJiAoKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgfHwgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpKSkgewkvLyBkb3VibGUgdGltZWQgYWN0aW9uCisJCWlmICghZGV2cHJpdi0+dXNlZG1hKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfVElNRVIgd29ya3Mgb25seSB3aXRoIGJ1cyBtYXN0ZXJpbmchIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWRldnByaXYtPmFpX2RvID0gMjsKKwkJcGNpOTExOF9jYWxjX2Rpdmlzb3JzKGRldnByaXYtPmFpX2RvLCBkZXYsIHMsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgJmNtZC0+Y29udmVydF9hcmcsCisJCQlkZXZwcml2LT5haV9mbGFncywgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwKKwkJCSZkZXZwcml2LT5haV9kaXZpc29yMSwgJmRldnByaXYtPmFpX2Rpdmlzb3IyLAorCQkJZGV2cHJpdi0+dXNlc3NoLCBkZXZwcml2LT5haV9hZGRfZnJvbnQpOworCQlkZXZwcml2LT5haV90aW1lcjEgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkZXZwcml2LT5haV90aW1lcjIgPSBjbWQtPmNvbnZlcnRfYXJnOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwkJJiYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpKSB7CisJCWRldnByaXYtPmFpX2RvID0gMzsKKwl9CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMDsJLy8gYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwgaW50ZXJuYWwgdHJpZ2dlciwgc29mdCB0cmlnZ2VyLCBkaXNhYmxlIERNQQorCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOwkvLyBwb3NpdGl2ZSB0cmlnZ2Vycywgbm8gUyZILCBubyBidXJzdCwgYnVyc3Qgc3RvcCwgbm8gcG9zdCB0cmlnZ2VyLCBubyBhYm91dCB0cmlnZ2VyLCB0cmlnZ2VyIHN0b3AKKwlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREVMRklGTyk7CS8vIGZsdXNoIEZJRk8KKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEU1RBVCk7CS8vIGZsdXNoIEEvRCBhbmQgSU5UIHN0YXR1cyByZWdpc3RlcgorCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UU1JDKTsKKworCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKKwlkZXZwcml2LT5haV9hY3RfZG1hcG9zID0gMDsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOworCWRldnByaXYtPmFpX2J1Zl9wdHIgPSAwOworCisJaWYgKGRldnByaXYtPnVzZWRtYSkgeworCQlyZXQgPSBwY2k5MTE4X2FpX2RvY21kX2RtYShkZXYsIHMpOworCX0gZWxzZSB7CisJCXJldCA9IHBjaTkxMThfYWlfZG9jbWRfc2FtcGwoZGV2LCBzKTsKKwl9CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBFTkQ6IHBjaTkxMThfYWlfY21kKClcbiIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBmcm9udGFkZCwgaW50IGJhY2thZGQpCit7CisJdW5zaWduZWQgaW50IGksIGRpZmZlcmVuY2lhbCA9IDAsIGJpcG9sYXIgPSAwOworCisJLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCisJaWYgKG5fY2hhbiA8IDEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgoZnJvbnRhZGQgKyBuX2NoYW4gKyBiYWNrYWRkKSA+IHMtPmxlbl9jaGFubGlzdCkgeworCQlydF9wcmludGsKKwkJCSgiY29tZWRpJWQ6IHJhbmdlL2NoYW5uZWwgbGlzdCBpcyB0b28gbG9uZyBmb3IgYWN0dWFsIGNvbmZpZ3VyYXRpb24gKCVkPiVkKSEiLAorCQkJZGV2LT5taW5vciwgbl9jaGFuLAorCQkJcy0+bGVuX2NoYW5saXN0IC0gZnJvbnRhZGQgLSBiYWNrYWRkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKENSX0FSRUYoY2hhbmxpc3RbMF0pID09IEFSRUZfRElGRikKKwkJZGlmZmVyZW5jaWFsID0gMTsJLy8gYWxsIGlucHV0IG11c3QgYmUgZGlmZgorCWlmIChDUl9SQU5HRShjaGFubGlzdFswXSkgPCBQQ0k5MTE4X0JJUE9MQVJfUkFOR0VTKQorCQliaXBvbGFyID0gMTsJLy8gYWxsIGlucHV0IG11c3QgYmUgYmlwb2xhcgorCWlmIChuX2NoYW4gPiAxKQorCQlmb3IgKGkgPSAxOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gY2hlY2sgUy5FL2RpZmYKKwkJCWlmICgoQ1JfQVJFRihjaGFubGlzdFtpXSkgPT0gQVJFRl9ESUZGKSAhPQorCQkJCShkaWZmZXJlbmNpYWwpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJIkRpZmZlcmVuY2lhbCBhbmQgc2luZ2xlIGVuZGVkIGlucHV0cyBjYW5uJ3QgYmUgbWl4dHVyZWQhIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlpZiAoKENSX1JBTkdFKGNoYW5saXN0W2ldKSA8IFBDSTkxMThfQklQT0xBUl9SQU5HRVMpICE9CisJCQkJKGJpcG9sYXIpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJIkJpcG9sYXIgYW5kIHVuaXBvbGFyIHJhbmdlcyBjYW5uJ3QgYmUgbWl4dHVyZWQhIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlpZiAoKCFkZXZwcml2LT51c2VtdXgpICYgKGRpZmZlcmVuY2lhbCkgJgorCQkJCShDUl9DSEFOKGNoYW5saXN0W2ldKSA+PQorCQkJCQl0aGlzX2JvYXJkLT5uX2FpY2hhbmQpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJIklmIEFSRUZfRElGRiBpcyB1c2VkIHRoZW4gaXMgYXZhaWxhYmxlIG9ubHkgZmlyc3QgOCBjaGFubmVscyEiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCByb3QsIGludCBmcm9udGFkZCwgaW50IGJhY2thZGQsCisJaW50IHVzZWRtYSwgY2hhciB1c2Vlb3MpCit7CisJdW5zaWduZWQgaW50IGksIGRpZmZlcmVuY2lhbCA9IDAsIGJpcG9sYXIgPSAwOworCXVuc2lnbmVkIGludCBzY2FucXVhZCwgZ2Fpbiwgc3NoID0gMHgwMDsKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogc2V0dXBfY2hhbm5lbF9saXN0KCVkLC4sJWQsLiwlZCwlZCwlZCwlZClcbiIsIGRldi0+bWlub3IsIG5fY2hhbiwgcm90LCBmcm9udGFkZCwgYmFja2FkZCwgdXNlZG1hKTsKKworCWlmICh1c2VkbWEgPT0gMSkgeworCQlyb3QgPSA4OworCQl1c2VkbWEgPSAwOworCX0KKworCWlmIChDUl9BUkVGKGNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpCisJCWRpZmZlcmVuY2lhbCA9IDE7CS8vIGFsbCBpbnB1dCBtdXN0IGJlIGRpZmYKKwlpZiAoQ1JfUkFOR0UoY2hhbmxpc3RbMF0pIDwgUENJOTExOF9CSVBPTEFSX1JBTkdFUykKKwkJYmlwb2xhciA9IDE7CS8vIGFsbCBpbnB1dCBtdXN0IGJlIGJpcG9sYXIKKworCS8vIEFsbCBpcyBvaywgc28gd2UgY2FuIHNldHVwIGNoYW5uZWwvcmFuZ2UgbGlzdAorCisJaWYgKCFiaXBvbGFyKSB7CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfVW5pUDsJLy8gc2V0IHVuaWJpcG9sYXIKKwl9IGVsc2UgeworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgJj0gKCh+QWRDb250cm9sX1VuaVApICYgMHhmZik7CS8vIGVuYWJsZSBiaXBvbGFyCisJfQorCisJaWYgKGRpZmZlcmVuY2lhbCkgeworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX0RpZmY7CS8vIGVuYWJsZSBkaWZmIGlucHV0cworCX0gZWxzZSB7CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyAmPSAoKH5BZENvbnRyb2xfRGlmZikgJiAweGZmKTsJLy8gc2V0IHNpbmdsZSBlbmRlZCBpbnB1dHMKKwl9CisKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwkvLyBzZXR1cCBtb2RlCisKKwlvdXRsKDIsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsJLy8gZ29kcyBrbm93IHdoeSB0aGlzIHNlcXVlbmNlIQorCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCW91dGwoMSwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCisjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCisJZGV2cHJpdi0+Y2hhbmxpc3RsZW4gPSBuX2NoYW47CisJZm9yIChpID0gMDsgaSA8IChQQ0k5MTE4X0NIQU5MRU4gKyAxKTsgaSsrKQorCQlkZXZwcml2LT5jaGFubGlzdFtpXSA9IDB4NTVhYTsKKyNlbmRpZgorCisJaWYgKGZyb250YWRkKSB7CQkvLyBpbnNlcnQgY2hhbm5lbHMgZm9yIFMmSAorCQlzc2ggPSBkZXZwcml2LT5zb2Z0c3Noc2FtcGxlOworCQlEUFJJTlRLKCJGQTogJTA0eDogIiwgc3NoKTsKKwkJZm9yIChpID0gMDsgaSA8IGZyb250YWRkOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCQlzY2FucXVhZCA9IENSX0NIQU4oY2hhbmxpc3RbMF0pOwkvLyBnZXQgY2hhbm5lbCBudW1iZXI7CisJCQlnYWluID0gQ1JfUkFOR0UoY2hhbmxpc3RbMF0pOwkvLyBnZXQgZ2FpbiBudW1iZXIKKwkJCXNjYW5xdWFkIHw9ICgoZ2FpbiAmIDB4MDMpIDw8IDgpOworCQkJb3V0bChzY2FucXVhZCB8IHNzaCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0dBSU4pOworCQkJRFBSSU5USygiJTAyeCAiLCBzY2FucXVhZCB8IHNzaCk7CisJCQlzc2ggPSBkZXZwcml2LT5zb2Z0c3NoaG9sZDsKKwkJfQorCQlEUFJJTlRLKCJcbiAiKTsKKwl9CisKKwlEUFJJTlRLKCJTTDogIiwgc3NoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCXNjYW5xdWFkID0gQ1JfQ0hBTihjaGFubGlzdFtpXSk7CS8vIGdldCBjaGFubmVsIG51bWJlcjsKKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwkJZGV2cHJpdi0+Y2hhbmxpc3RbaSBeIHVzZWRtYV0gPSAoc2NhbnF1YWQgJiAweGYpIDw8IHJvdDsKKyNlbmRpZgorCQlnYWluID0gQ1JfUkFOR0UoY2hhbmxpc3RbaV0pOwkvLyBnZXQgZ2FpbiBudW1iZXIKKwkJc2NhbnF1YWQgfD0gKChnYWluICYgMHgwMykgPDwgOCk7CisJCW91dGwoc2NhbnF1YWQgfCBzc2gsIGRldi0+aW9iYXNlICsgUENJOTExOF9HQUlOKTsKKwkJRFBSSU5USygiJTAyeCAiLCBzY2FucXVhZCB8IHNzaCk7CisJfQorCURQUklOVEsoIlxuICIpOworCisJaWYgKGJhY2thZGQpIHsJCS8vIGluc2VydCBjaGFubmVscyBmb3IgZml0IG9udG8gMzJiaXQgRE1BCisJCURQUklOVEsoIkJBOiAlMDR4OiAiLCBzc2gpOworCQlmb3IgKGkgPSAwOyBpIDwgYmFja2FkZDsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQkJc2NhbnF1YWQgPSBDUl9DSEFOKGNoYW5saXN0WzBdKTsJLy8gZ2V0IGNoYW5uZWwgbnVtYmVyOworCQkJZ2FpbiA9IENSX1JBTkdFKGNoYW5saXN0WzBdKTsJLy8gZ2V0IGdhaW4gbnVtYmVyCisJCQlzY2FucXVhZCB8PSAoKGdhaW4gJiAweDAzKSA8PCA4KTsKKwkJCW91dGwoc2NhbnF1YWQgfCBzc2gsIGRldi0+aW9iYXNlICsgUENJOTExOF9HQUlOKTsKKwkJCURQUklOVEsoIiUwMnggIiwgc2NhbnF1YWQgfCBzc2gpOworCQl9CisJCURQUklOVEsoIlxuICIpOworCX0KKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwlkZXZwcml2LT5jaGFubGlzdFtuX2NoYW4gXiB1c2VkbWFdID0gZGV2cHJpdi0+Y2hhbmxpc3RbMCBeIHVzZWRtYV07CS8vIGZvciAzMmJpdCBvZXJhdGlvbnMKKwlpZiAodXNlZW9zKSB7CisJCWZvciAoaSA9IDE7IGkgPCBuX2NoYW47IGkrKykgewkvLyBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQKKwkJCWRldnByaXYtPmNoYW5saXN0WyhuX2NoYW4gKyBpKSBeIHVzZWRtYV0gPQorCQkJCShDUl9DSEFOKGNoYW5saXN0W2ldKSAmIDB4ZikgPDwgcm90OworCQl9CisJCWRldnByaXYtPmNoYW5saXN0WygyICogbl9jaGFuKSBeIHVzZWRtYV0gPSBkZXZwcml2LT5jaGFubGlzdFswIF4gdXNlZG1hXTsJLy8gZm9yIDMyYml0IG9lcmF0aW9ucworCQl1c2Vlb3MgPSAyOworCX0gZWxzZSB7CisJCXVzZWVvcyA9IDE7CisJfQorI2lmZGVmIFBDSTkxMThfRVhUREVCVUcKKwlEUFJJTlRLKCJDSEw6ICIpOworCWZvciAoaSA9IDA7IGkgPD0gKHVzZWVvcyAqIG5fY2hhbik7IGkrKykgeworCQlEUFJJTlRLKCIlMDR4ICIsIGRldnByaXYtPmNoYW5saXN0W2ldKTsKKwl9CisJRFBSSU5USygiXG4gIik7CisjZW5kaWYKKyNlbmRpZgorCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOwkvLyBjbG9zZSBzY2FuIHF1ZXVlCisvLyAgICAgIGNvbWVkaV91ZGVsYXkoMTAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydGFudCBkZWxheSwgb3IgZmlyc3Qgc2FtcGxlIHdpbGwgYmUgY3JpcGxlZAorCisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogRU5EOiBzZXR1cF9jaGFubmVsX2xpc3QoKVxuIik7CisJcmV0dXJuIDE7CQkvLyB3ZSBjYW4gc2VydmUgdGhpcyB3aXRoIHNjYW4gbG9naWMKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBjYWxjdWxhdGUgODI1NCBkaXZpc29ycyBpZiB0aGV5IGFyZSB1c2VkIGZvciBkdWFsIHRpbWluZworKi8KK3N0YXRpYyB2b2lkIHBjaTkxMThfY2FsY19kaXZpc29ycyhjaGFyIG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50ICp0aW0xLCB1bnNpZ25lZCBpbnQgKnRpbTIsCisJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgY2hhbnMsIHVuc2lnbmVkIGludCAqZGl2MSwgdW5zaWduZWQgaW50ICpkaXYyLAorCWNoYXIgdXNlc3NoLCB1bnNpZ25lZCBpbnQgY2huc3NoZnJvbnQpCit7CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogQkdOOiBwY2k5MTE4X2NhbGNfZGl2aXNvcnMoJWQsJWQsLiwldSwldSwldSwlZCwuLC4sLCV1LCV1KVxuIiwgbW9kZSwgZGV2LT5taW5vciwgKnRpbTEsICp0aW0yLCBmbGFncywgY2hhbnMsIHVzZXNzaCwgY2huc3NoZnJvbnQpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwljYXNlIDQ6CisJCWlmICgqdGltMiA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCSp0aW0yID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCBkaXYxLCBkaXYyLAorCQkJdGltMiwgZmxhZ3MgJiBUUklHX1JPVU5EX05FQVJFU1QpOworCQlEUFJJTlRLKCJPU0MgYmFzZT0ldSBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1XG4iLAorCQkJZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsICpkaXYxLCAqZGl2MiwgKnRpbTEpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmICgqdGltMiA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCSp0aW0yID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlEUFJJTlRLKCIxIGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQkqZGl2MSA9ICp0aW0yIC8gZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2U7CS8vIGNvbnZlcnQgdGltZXIgKGJ1cnN0KQorCQlEUFJJTlRLKCIyIGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQlpZiAoKmRpdjEgPCB0aGlzX2JvYXJkLT5haV9wYWNlcl9taW4pCisJCQkqZGl2MSA9IHRoaXNfYm9hcmQtPmFpX3BhY2VyX21pbjsKKwkJRFBSSU5USygiMyBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJKmRpdjIgPSAqdGltMSAvIGRldnByaXYtPmk4MjU0X29zY19iYXNlOwkvLyBzY2FuIHRpbWVyCisJCURQUklOVEsoIjQgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsICpkaXYxLCAqZGl2MiwKKwkJCSp0aW0xLCAqdGltMik7CisJCSpkaXYyID0gKmRpdjIgLyAqZGl2MTsJLy8gbWFqb3IgdGltZXIgaXMgYzEqYzIKKwkJRFBSSU5USygiNSBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJaWYgKCpkaXYyIDwgY2hhbnMpCisJCQkqZGl2MiA9IGNoYW5zOworCQlEUFJJTlRLKCI2IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCisJCSp0aW0yID0gKmRpdjEgKiBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsJLy8gcmVhbCBjb252ZXJ0IHRpbWVyCisKKwkJaWYgKHVzZXNzaCAmIChjaG5zc2hmcm9udCA9PSAwKSkJLy8gdXNlIEJTU0ggc2lnbmFsCisJCQlpZiAoKmRpdjIgPCAoY2hhbnMgKyAyKSkKKwkJCQkqZGl2MiA9IGNoYW5zICsgMjsKKworCQlEUFJJTlRLKCI3IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQkqdGltMSA9ICpkaXYxICogKmRpdjIgKiBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsKKwkJRFBSSU5USygiT1NDIGJhc2U9JXUgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsCisJCQlkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgKmRpdjEsICpkaXYyLCAqdGltMSwgKnRpbTIpOworCQlicmVhazsKKwl9CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogRU5EOiBwY2k5MTE4X2NhbGNfZGl2aXNvcnMoJXUsJXUpXG4iLAorCQkqZGl2MSwgKmRpdjIpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCW91dGwoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworCW91dGwoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworLy8gICAgICBvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwljb21lZGlfdWRlbGF5KDEpOworCisJaWYgKChtb2RlID09IDEpIHx8IChtb2RlID09IDIpIHx8IChtb2RlID09IDQpKSB7CisJCW91dGwoZGl2aXNvcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UMik7CisJCW91dGwoKGRpdmlzb3IyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDIpOworCQlvdXRsKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDEpOworCQlvdXRsKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlQxKTsKKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfZXh0dHJnX2FkZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciBzb3VyY2UpCit7CisJaWYgKHNvdXJjZSA+IDMpCisJCXJldHVybiAtMTsJLy8gaW5jb3JyZWN0IHNvdXJjZQorCWRldnByaXYtPmV4dHRyZ191c2VycyB8PSAoMSA8PCBzb3VyY2UpOworCWRldnByaXYtPkludENvbnRyb2xSZWcgfD0gSW50X0RUcmc7CisJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CisJb3V0bChpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpIHwgMHgxZjAwLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGFsbG93IElOVCBpbiBBTUNDCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfZXh0dHJnX2RlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciBzb3VyY2UpCit7CisJaWYgKHNvdXJjZSA+IDMpCisJCXJldHVybiAtMTsJLy8gaW5jb3JyZWN0IHNvdXJjZQorCWRldnByaXYtPmV4dHRyZ191c2VycyAmPSB+KDEgPDwgc291cmNlKTsKKwlpZiAoIWRldnByaXYtPmV4dHRyZ191c2VycykgewkvLyBzaHV0ZG93biBleHQgdHJnIGludHRlcnJ1cHRzCisJCWRldnByaXYtPkludENvbnRyb2xSZWcgJj0gfkludF9EVHJnOworCQlpZiAoIWRldnByaXYtPkludENvbnRyb2xSZWcpCS8vIGFsbCBJUlEgZGlzYWJsZWQKKwkJCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKSAmICh+MHgwMDAwMWYwMCksIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gZGlzYWJsZSBpbnQgaW4gQU1DQworCQlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKGRldnByaXYtPnVzZWRtYSkKKwkJb3V0bChpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NQ1NSKSAmICh+RU5fQTJQX1RSQU5TRkVSUyksIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUik7CS8vIHN0b3AgRE1BCisJcGNpOTExOF9leHR0cmdfZGVsKGRldiwgRVhUVFJHX0FJKTsKKwlzdGFydF9wYWNlcihkZXYsIDAsIDAsIDApOwkvLyBzdG9wIDgyNTQgY291bnRlcnMKKwlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnID0gQWRGdW5jdGlvbl9QRFRyZyB8IEFkRnVuY3Rpb25fUEVUcmc7CisJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsJLy8gcG9zaXRpdmUgdHJpZ2dlcnMsIG5vIFMmSCwgbm8gYnVyc3QsIGJ1cnN0IHN0b3AsIG5vIHBvc3QgdHJpZ2dlciwgbm8gYWJvdXQgdHJpZ2dlciwgdHJpZ2dlciBzdG9wCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMHgwMDsKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwkvLyBiaXBvbGFyLCBTLkUuLCB1c2UgODI1NCwgc3RvcCA4MzU0LCBpbnRlcm5hbCB0cmlnZ2VyLCBzb2Z0IHRyaWdnZXIsIGRpc2FibGUgSU5UIGFuZCBETUEKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9CVVJTVCk7CisJb3V0bCgxLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfU0NBTk1PRCk7CisJb3V0bCgyLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfU0NBTk1PRCk7CS8vIHJlc2V0IHNjYW4gcXVldWUKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCisJZGV2cHJpdi0+YWlfZG8gPSAwOworCWRldnByaXYtPnVzZWRtYSA9IDA7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisJZGV2cHJpdi0+YWlfYnVmX3B0ciA9IDA7CisJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOworCWRldnByaXYtPmRtYV9hY3RidWYgPSAwOworCisJaWYgKCFkZXZwcml2LT5JbnRDb250cm9sUmVnKQorCQlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUikgfCAweDFmMDAsIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gYWxsb3cgSU5UIGluIEFNQ0MKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRldnByaXYtPkludENvbnRyb2xSZWcgPSAwOworCWRldnByaXYtPmV4dHRyZ191c2VycyA9IDA7CisJaW5sKGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzIHNvdXJjZQorCW91dGwoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworLy8gICAgICAgIG91dGwoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworCXN0YXJ0X3BhY2VyKGRldiwgMCwgMCwgMCk7CS8vIHN0b3AgODI1NCBjb3VudGVycworCWRldnByaXYtPkFkQ29udHJvbFJlZyA9IDA7CisJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsJLy8gYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwgaW50ZXJuYWwgdHJpZ2dlciwgc29mdCB0cmlnZ2VyLCBkaXNhYmxlIElOVCBhbmQgRE1BCisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQlVSU1QpOworCW91dGwoMSwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCW91dGwoMiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOwkvLyByZXNldCBzY2FuIHF1ZXVlCisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CS8vIHBvc2l0aXZlIHRyaWdnZXJzLCBubyBTJkgsIG5vIGJ1cnN0LCBidXJzdCBzdG9wLCBubyBwb3N0IHRyaWdnZXIsIG5vIGFib3V0IHRyaWdnZXIsIHRyaWdnZXIgc3RvcAorCisJZGV2cHJpdi0+YW9fZGF0YVswXSA9IDIwNDc7CisJZGV2cHJpdi0+YW9fZGF0YVsxXSA9IDIwNDc7CisJb3V0bChkZXZwcml2LT5hb19kYXRhWzBdLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREExKTsJLy8gcmVzZXQgQS9EIG91dHMgdG8gMFYKKwlvdXRsKGRldnByaXYtPmFvX2RhdGFbMV0sIGRldi0+aW9iYXNlICsgUENJOTExOF9EQTIpOworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RPKTsJLy8gcmVzZXQgZGlnaSBvdXRzIHRvIEwKKwljb21lZGlfdWRlbGF5KDEwKTsKKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEX0RBVEEpOworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UU1JDKTsJLy8gcmVtb3ZlIElOVCByZXF1ZXN0cworCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfQURTVEFUKTsJLy8gZmx1c2ggQS9EIHN0YXR1cyByZWdpc3RlcgorCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UU1JDKTsJLy8gZmx1c2ggSU5UIHJlcXVlc3RzCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMDsKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwkvLyBiaXBvbGFyLCBTLkUuLCB1c2UgODI1NCwgc3RvcCA4MzU0LCBpbnRlcm5hbCB0cmlnZ2VyLCBzb2Z0IHRyaWdnZXIsIGRpc2FibGUgSU5UIGFuZCBETUEKKworCWRldnByaXYtPmNudDBfdXNlcnMgPSAwOworCWRldnByaXYtPmV4dHRyZ191c2VycyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldCwgcGFnZXMsIGk7CisJdW5zaWduZWQgc2hvcnQgbWFzdGVyOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2VfYSwgaW9iYXNlXzk7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgb3B0X2J1cywgb3B0X3Nsb3Q7CisJY29uc3QgY2hhciAqZXJyc3RyOworCXVuc2lnbmVkIGNoYXIgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jOworCXUxNiB1MTZ3OworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWRsX3BjaTkxMTg6IGJvYXJkPSVzIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSk7CisKKwlvcHRfYnVzID0gaXQtPm9wdGlvbnNbMF07CisJb3B0X3Nsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXQtPm9wdGlvbnNbM10gJiAxKSB7CisJCW1hc3RlciA9IDA7CS8vIHVzZXIgZG9uJ3Qgd2FudCB1c2UgYnVzIG1hc3RlcgorCX0gZWxzZSB7CisJCW1hc3RlciA9IDE7CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2k5MTE4X3ByaXZhdGUpKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiIC0gQWxsb2NhdGlvbiBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZSAqLworCWVycnN0ciA9ICJub3QgZm91bmQhIjsKKwlwY2lkZXYgPSBOVUxMOworCXdoaWxlIChOVUxMICE9IChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNQ0MsCisJCQkJdGhpc19ib2FyZC0+ZGV2aWNlX2lkLCBwY2lkZXYpKSkgeworCQkvKiBGb3VuZCBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlLiAqLworCQlpZiAob3B0X2J1cyB8fCBvcHRfc2xvdCkgeworCQkJLyogQ2hlY2sgYnVzL3Nsb3QuICovCisJCQlpZiAob3B0X2J1cyAhPSBwY2lkZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgb3B0X3Nsb3QgIT0gUENJX1NMT1QocGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CS8qIG5vIG1hdGNoICovCisJCX0KKwkJLyoKKwkJICogTG9vayBmb3IgZGV2aWNlIHRoYXQgaXNuJ3QgaW4gdXNlLgorCQkgKiBFbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zLgorCQkgKi8KKwkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k5MTE4IikpIHsKKwkJCWVycnN0ciA9ICJmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyEiOworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKCFwY2lkZXYpIHsKKwkJaWYgKG9wdF9idXMgfHwgb3B0X3Nsb3QpIHsKKwkJCXJ0X3ByaW50aygiIC0gQ2FyZCBhdCBiOnMgJWQ6JWQgJXNcbiIsCisJCQkJb3B0X2J1cywgb3B0X3Nsb3QsIGVycnN0cik7CisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgJXNcbiIsIGVycnN0cik7CisJCX0KKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKG1hc3RlcikgeworCQlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCX0KKworCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCXBjaV9zbG90ID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CisJcGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwlpcnEgPSBwY2lkZXYtPmlycTsKKwlpb2Jhc2VfYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCWlvYmFzZV85ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisKKwlydF9wcmludGsoIiwgYjpzOmY9JWQ6JWQ6JWQsIGlvPTB4JTRseCwgMHglNGx4IiwgcGNpX2J1cywgcGNpX3Nsb3QsCisJCXBjaV9mdW5jLCBpb2Jhc2VfOSwgaW9iYXNlX2EpOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2VfOTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJZGV2cHJpdi0+cGNpZGV2ID0gcGNpZGV2OworCWRldnByaXYtPmlvYmFzZV9hID0gaW9iYXNlX2E7CisKKwlwY2k5MTE4X3Jlc2V0KGRldik7CisKKwlpZiAoaXQtPm9wdGlvbnNbM10gJiAyKQorCQlpcnEgPSAwOwkvLyB1c2VyIGRvbid0IHdhbnQgdXNlIElSUQorCWlmIChpcnEgPiAwKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNpOTExOCwgSVJRRl9TSEFSRUQsCisJCQkJIkFETGluayBQQ0ktOTExOCIsIGRldikpIHsKKwkJCXJ0X3ByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICVkLCBESVNBQkxJTkcgSVQiLAorCQkJCWlycSk7CisJCQlpcnEgPSAwOwkvKiBDYW4ndCB1c2UgSVJRICovCisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJfQorCX0gZWxzZSB7CisJCXJ0X3ByaW50aygiLCBJUlEgZGlzYWJsZWQiKTsKKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKworCWlmIChtYXN0ZXIpIHsJCS8vIGFsbG9jIERNQSBidWZmZXJzCisJCWRldnByaXYtPmRtYV9kb3VibGVidWYgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlmb3IgKHBhZ2VzID0gNDsgcGFnZXMgPj0gMDsgcGFnZXMtLSkKKwkJCQlpZiAoKGRldnByaXYtPmRtYWJ1Zl92aXJ0W2ldID0gKHNob3J0ICopCisJCQkJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsCisJCQkJCQkJcGFnZXMpKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbaV0pIHsKKwkJCQlkZXZwcml2LT5kbWFidWZfcGFnZXNbaV0gPSBwYWdlczsKKwkJCQlkZXZwcml2LT5kbWFidWZfc2l6ZVtpXSA9IFBBR0VfU0laRSAqIHBhZ2VzOworCQkJCWRldnByaXYtPmRtYWJ1Zl9zYW1wbGVzW2ldID0KKwkJCQkJZGV2cHJpdi0+ZG1hYnVmX3NpemVbaV0gPj4gMTsKKwkJCQlkZXZwcml2LT5kbWFidWZfaHdbaV0gPQorCQkJCQl2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPgorCQkJCQlkbWFidWZfdmlydFtpXSk7CisJCQl9CisJCX0KKwkJaWYgKCFkZXZwcml2LT5kbWFidWZfdmlydFswXSkgeworCQkJcnRfcHJpbnRrKCIsIENhbid0IGFsbG9jYXRlIERNQSBidWZmZXIsIERNQSBkaXNhYmxlZCEiKTsKKwkJCW1hc3RlciA9IDA7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMV0pCisJCQlkZXZwcml2LT5kbWFfZG91YmxlYnVmID0gMTsKKworCX0KKworCWlmICgoZGV2cHJpdi0+bWFzdGVyID0gbWFzdGVyKSkgeworCQlydF9wcmludGsoIiwgYnVzIG1hc3RlciIpOworCX0gZWxzZSB7CisJCXJ0X3ByaW50aygiLCBubyBidXMgbWFzdGVyIik7CisJfQorCisJZGV2cHJpdi0+dXNlbXV4ID0gMDsKKwlpZiAoaXQtPm9wdGlvbnNbMl0gPiAwKSB7CisJCWRldnByaXYtPnVzZW11eCA9IGl0LT5vcHRpb25zWzJdOworCQlpZiAoZGV2cHJpdi0+dXNlbXV4ID4gMjU2KQorCQkJZGV2cHJpdi0+dXNlbXV4ID0gMjU2OwkvLyBtYXggMjU2IGNoYW5uZWxzIQorCQlpZiAoaXQtPm9wdGlvbnNbNF0gPiAwKQorCQkJaWYgKGRldnByaXYtPnVzZW11eCA+IDEyOCkgeworCQkJCWRldnByaXYtPnVzZW11eCA9IDEyODsJLy8gbWF4IDEyOCBjaGFubmVscyB3aXRoIHNvZnRhcmUgUyZIIQorCQkJfQorCQlydF9wcmludGsoIiwgZXh0LiBtdXggJWQgY2hhbm5lbHMiLCBkZXZwcml2LT51c2VtdXgpOworCX0KKworCWRldnByaXYtPnNvZnRzc2hkZWxheSA9IGl0LT5vcHRpb25zWzRdOworCWlmIChkZXZwcml2LT5zb2Z0c3NoZGVsYXkgPCAwKSB7CS8vIHNlbGVjdCBzYW1wbGUmaG9sZCBzaWduYWwgcG9sYXJpdHkKKwkJZGV2cHJpdi0+c29mdHNzaGRlbGF5ID0gLWRldnByaXYtPnNvZnRzc2hkZWxheTsKKwkJZGV2cHJpdi0+c29mdHNzaHNhbXBsZSA9IDB4ODA7CisJCWRldnByaXYtPnNvZnRzc2hob2xkID0gMHgwMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zb2Z0c3Noc2FtcGxlID0gMHgwMDsKKwkJZGV2cHJpdi0+c29mdHNzaGhvbGQgPSAweDgwOworCX0KKworCXJ0X3ByaW50aygiLlxuIik7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXZwcml2LT5wY2lkZXYsIFBDSV9DT01NQU5ELCAmdTE2dyk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldnByaXYtPnBjaWRldiwgUENJX0NPTU1BTkQsIHUxNncgfCA2NCk7CS8vIEVuYWJsZSBwYXJpdHkgY2hlY2sgZm9yIHBhcml0eSBlcnJvcgorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ09NTU9OIHwgU0RGX0dST1VORCB8IFNERl9ESUZGOworCWlmIChkZXZwcml2LT51c2VtdXgpIHsKKwkJcy0+bl9jaGFuID0gZGV2cHJpdi0+dXNlbXV4OworCX0gZWxzZSB7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCX0KKwlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FpY2hhbmxpc3Q7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYWk7CisJcy0+Y2FuY2VsID0gcGNpOTExOF9haV9jYW5jZWw7CisJcy0+aW5zbl9yZWFkID0gcGNpOTExOF9pbnNuX3JlYWRfYWk7CisJaWYgKGRldi0+aXJxKSB7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCXMtPmRvX2NtZHRlc3QgPSBwY2k5MTE4X2FpX2NtZHRlc3Q7CisJCXMtPmRvX2NtZCA9IHBjaTkxMThfYWlfY21kOworCQlzLT5tdW5nZSA9IHBjaTkxMThfYWlfbXVuZ2U7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5hb19tYXhkYXRhOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FvOworCXMtPmluc25fd3JpdGUgPSBwY2k5MTE4X2luc25fd3JpdGVfYW87CisJcy0+aW5zbl9yZWFkID0gcGNpOTExOF9pbnNuX3JlYWRfYW87CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CQkvKiBhbGwgYml0cyBpbnB1dCAqLworCXMtPmluc25fYml0cyA9IHBjaTkxMThfaW5zbl9iaXRzX2RpOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmlvX2JpdHMgPSAweGY7CS8qIGFsbCBiaXRzIG91dHB1dCAqLworCXMtPmluc25fYml0cyA9IHBjaTkxMThfaW5zbl9iaXRzX2RvOworCisJZGV2cHJpdi0+dmFsaWQgPSAxOworCWRldnByaXYtPmk4MjU0X29zY19iYXNlID0gMjUwOwkvLyAyNTBucz00TUh6CisJZGV2cHJpdi0+YWlfbWFza2hhcmRlcnIgPSAweDEwYTsJLy8gZGVmYXVsdCBtZWFzdXJlIGNyYXNoIGNvbmRpdGlvbgorCWlmIChpdC0+b3B0aW9uc1s1XSkJLy8gZGlzYWJsZSBzb21lIHJlcXVlc3RlZAorCQlkZXZwcml2LT5haV9tYXNraGFyZGVyciAmPSB+aXQtPm9wdGlvbnNbNV07CisKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmFpX21heGRhdGEpIHsKKwljYXNlIDB4ZmZmZjoKKwkJZGV2cHJpdi0+YWkxNmJpdHMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5haTE2Yml0cyA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpCisJCQlwY2k5MTE4X3Jlc2V0KGRldik7CisJCWlmIChkZXYtPmlycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisJCWlmIChkZXZwcml2LT5kbWFidWZfdmlydFswXSkKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMF0sCisJCQkJZGV2cHJpdi0+ZG1hYnVmX3BhZ2VzWzBdKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1Zl92aXJ0WzFdKQorCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylkZXZwcml2LT5kbWFidWZfdmlydFsxXSwKKwkJCQlkZXZwcml2LT5kbWFidWZfcGFnZXNbMV0pOworCX0KKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjYyODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKKyAgICBkcml2ZXIgZm9yIE1pY3JvQXhpYWwgQURRMTItQiBkYXRhIGFjcXVpc2l0aW9uIGFuZCBjb250cm9sIGNhcmQKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkcTEyYgorRGVzY3JpcHRpb246IGRyaXZlciBmb3IgTWljcm9BeGlhbCBBRFExMi1CIGRhdGEgYWNxdWlzaXRpb24gYW5kIGNvbnRyb2wgY2FyZAorRGV2aWNlczogW01pY3JvQXhpYWxdIEFEUTEyLUIgKGFkcTEyYikKK0F1dGhvcjogamVyZW15IHRoZWxlciA8dGhlbGVyZ0BpYi5jbmVhLmdvdi5hcj4KK1VwZGF0ZWQ6IFRodSwgMjEgRmViIDIwMDggMDI6NTY6MjcgLTAzMDAKK1N0YXR1czogd29ya3MKKworRHJpdmVyIGZvciB0aGUgYWNxdWlzaXRpb24gY2FyZCBBRFExMi1CICh3aXRob3V0IGFueSBhZGQtb24pLgorCisgLSBBbmFsb2cgaW5wdXQgaXMgc3ViZGV2aWNlIDAgKDE2IGNoYW5uZWxzIHNpbmdsZS1lbmRlZCBvciA4IGRpZmZlcmVudGlhbCkKKyAtIERpZ2l0YWwgaW5wdXQgaXMgc3ViZGV2aWNlIDEgKDUgY2hhbm5lbHMpCisgLSBEaWdpdGFsIG91dHB1dCBpcyBzdWJkZXZpY2UgMSAoOCBjaGFubmVscykKKyAtIFRoZSBQQUNFUiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbgorCitJZiB5b3UgZG8gbm90IHNwZWNpZnkgYW55IG9wdGlvbnMsIHRoZXkgd2lsbCBkZWZhdWx0IHRvCisKKyAgIyBjb21lZGlfY29uZmlnIC9kZXYvY29tZWRpMCBhZHExMmIgMHgzMDAsMCwwCisKKyAgb3B0aW9uIDE6IEkvTyBiYXNlIGFkZHJlc3MuIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgcHJvdmlkZWQgYXMgYSBoZWxwCisgICBvZiB0aGUgaGFyZHdhcmUganVtcGVycy4KKworICAgICAgICAgYWRkcmVzcyAgICAgICAgICAgIGp1bXBlciBKQURSCisgICAgICAgICAgMHgzMDAgICAgICAgICAgICAgICAgIDEgKGZhY3RvcnkgZGVmYXVsdCkKKyAgICAgICAgICAweDMyMCAgICAgICAgICAgICAgICAgMgorICAgICAgICAgIDB4MzQwICAgICAgICAgICAgICAgICAzCisgICAgICAgICAgMHgzNjAgICAgICAgICAgICAgICAgIDQKKyAgICAgICAgICAweDM4MCAgICAgICAgICAgICAgICAgNQorICAgICAgICAgIDB4M0EwICAgICAgICAgICAgICAgICA2CisKKyAgb3B0aW9uIDI6IHVuaXBvbGFyL2JpcG9sYXIgQURDIHNlbGVjdGlvbjogMCAtPiBiaXBvbGFyLCAxIC0+IHVuaXBvbGFyCisKKyAgICAgICAgc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgICAgICAgICBKVUIKKyAgICAgICAgIGJpcG9sYXIgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAyLTMgKGZhY3RvcnkgZGVmYXVsdCkKKyAgICAgICAgIHVuaXBvbGFyICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAxLTIKKworICBvcHRpb24gMzogc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbCBBSSBzZWxlY3Rpb246IDAgLT4gU0UsIDEgLT4gZGlmZmVyZW50aWFsCisKKyAgICAgICAgc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgIEpDSEEgICAgSkNIQgorICAgICAgIHNpbmdsZS1lbmRlZCAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgMS0yICAgICAxLTIgKGZhY3RvcnkgZGVmYXVsdCkKKyAgICAgICBkaWZmZXJlbnRpYWwgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgIDItMyAgICAgMi0zCisKKworICAgd3JpdHRlbiBieSBqZXJlbXkgdGhlbGVyIDx0aGVsZXJnQGliLmNuZWEuZ292LmFyPgorCisgICBpbnN0aXR1dG8gYmFsc2Vpcm8KKyAgIGNvbWlzaW9uIG5hY2lvbmFsIGRlIGVuZXJnaWEgYXRvbWljYQorICAgdW5pdmVyc2lkYWQgbmFjaW9uYWwgZGUgY3V5bworICAgYXJnZW50aW5hCisKKyAgIDIxLWZlYi0yMDA4CisgICAgICsgY2hhbmdlZCBzdXBwb3J0ZWQgZGV2aWNlcyBzdHJpbmcgKG1pc3N1c2VkIHRoZSBbXSBhbmQgKCkpCisKKyAgIDEzLW9jdC0yMDA3CisgICAgICsgZmlyc3QgdHJ5CisKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisvLyBhZGRyZXNzIHNjaGVtZSAocGFnZSAyLjE3IG9mIHRoZSBtYW51YWwpCisjZGVmaW5lIEFEUTEyQl9TSVpFICAgICAxNgorCisjZGVmaW5lIEFEUTEyQl9DVFJFRyAgICAweDAwCisjZGVmaW5lIEFEUTEyQl9TVElOUiAgICAweDAwCisjZGVmaW5lIEFEUTEyQl9PVVRCUiAgICAweDA0CisjZGVmaW5lIEFEUTEyQl9BRExPVyAgICAweDA4CisjZGVmaW5lIEFEUTEyQl9BREhJRyAgICAweDA5CisjZGVmaW5lIEFEUTEyQl9DT05UMCAgICAweDBjCisjZGVmaW5lIEFEUTEyQl9DT05UMSAgICAweDBkCisjZGVmaW5lIEFEUTEyQl9DT05UMiAgICAweDBlCisjZGVmaW5lIEFEUTEyQl9DT1dPUkQgICAweDBmCisKKy8vIG1hc2sgb2YgdGhlIGJpdCBhdCBTVElOUiB0byBjaGVjayBlbmQgb2YgY29udmVyc2lvbgorI2RlZmluZSBBRFExMkJfRU9DICAgICAweDIwCisKKyNkZWZpbmUgVElNRU9VVCAgICAgICAgMjAKKworLy8gYXZhaWxhYmxlIHJhbmdlcyB0aHJvdWdoIHRoZSBQR0EgZ2FpbnMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hZHExMmJfYWlfYmlwb2xhciA9IHsgNCwgeworICAgICAgICBCSVBfUkFOR0UoIDUgKSwKKyAgICAgICAgQklQX1JBTkdFKCAyICksCisgICAgICAgIEJJUF9SQU5HRSggMSApLAorICAgICAgICBCSVBfUkFOR0UoIDAuNSApCit9fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FkcTEyYl9haV91bmlwb2xhciA9IHsgNCwgeworICAgICAgICBVTklfUkFOR0UoIDUgKSwKKyAgICAgICAgVU5JX1JBTkdFKCAyICksCisgICAgICAgIFVOSV9SQU5HRSggMSApLAorICAgICAgICBVTklfUkFOR0UoIDAuNSApCit9fTsKKworCisKK3N0cnVjdCBhZHExMmJfYm9hcmQgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICBpbnQgYWlfc2VfY2hhbnM7CisgICAgICAgIGludCBhaV9kaWZmX2NoYW5zOworICAgICAgICBpbnQgYWlfYml0czsKKyAgICAgICAgaW50IGRpX2NoYW5zOworICAgICAgICBpbnQgZG9fY2hhbnM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkcTEyYl9ib2FyZCBhZHExMmJfYm9hcmRzW10gPSB7CisgICAgICAgIHsKKyAgICAgICAgbmFtZTogICAgICAgICAgICJhZHExMmIiLAorICAgICAgICBhaV9zZV9jaGFuczogICAgMTYsCisgICAgICAgIGFpX2RpZmZfY2hhbnM6ICA4LAorICAgICAgICBhaV9iaXRzOiAgICAgICAgMTIsCisgICAgICAgIGRpX2NoYW5zOiAgICAgICA1LAorICAgICAgICBkb19jaGFuczogICAgICAgOAorICAgICAgICB9CisvLyBwb3RlbnRpYWxseSwgbW9yZSBhZHEtYmFzZWQgZGV2aWNlZCB3aWxsIGJlIGFkZGVkCisvKiwKKyAgICAgICAgbmFtZTogICAgICAgICAgICJhZHExMmIiLAorICAgICAgICBhaV9jaGFuczogICAgICAgMTYsICAvLyB0aGlzIGlzIGp1c3QgZm9yIHJlZmVyZW5jZSwgaGFyZGNvZGVkIGFnYWluIGxhdGVyCisgICAgICAgIGFpX2JpdHM6ICAgICAgICAxMiwKKyAgICAgICAgZGlfY2hhbnM6ICAgICAgIDgsCisgICAgICAgIGRvX2NoYW5zOiAgICAgICA1CisgICAgICAgIH0qLworfTsKKworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgYWRxMTJiX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBhZHExMmJfcHJpdmF0ZSB7CisgICAgICAgIGludCB1bmlwb2xhcjsgICAgICAgICAgLyogb3B0aW9uIDIgb2YgY29tZWRpX2NvbmZpZyAoMSBpcyBpb2Jhc2UpICovCisgICAgICAgIGludCBkaWZmZXJlbnRpYWw7ICAgICAgLyogb3B0aW9uIDMgb2YgY29tZWRpX2NvbmZpZyAqLworICAgICAgICBpbnQgbGFzdF9jaGFubmVsOworICAgICAgICBpbnQgbGFzdF9yYW5nZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGRpZ2l0YWxfc3RhdGU7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYWRxMTJiX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGFkcTEyYl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBhZHExMmJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hZHExMmI9eworICAgICAgICBkcml2ZXJfbmFtZTogICAgImFkcTEyYiIsCisgICAgICAgIG1vZHVsZTogICAgICAgICBUSElTX01PRFVMRSwKKyAgICAgICAgYXR0YWNoOiAgICAgICAgIGFkcTEyYl9hdHRhY2gsCisgICAgICAgIGRldGFjaDogICAgICAgICBhZHExMmJfZGV0YWNoLAorICAgICAgICBib2FyZF9uYW1lOiAgICAgJmFkcTEyYl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgICAgb2Zmc2V0OiAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWRxMTJiX2JvYXJkKSwKKyAgICAgICAgbnVtX25hbWVzOiAgICAgIHNpemVvZihhZHExMmJfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgYWRxMTJiX2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgYWRxMTJiX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGFkcTEyYl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGFkcTEyYl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBhZHExMmJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQoreworICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisgICAgICAgIGludCB1bmlwb2xhciwgZGlmZmVyZW50aWFsOworCisgICAgICAgIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworICAgICAgICB1bmlwb2xhciA9IGl0LT5vcHRpb25zWzFdOworICAgICAgICBkaWZmZXJlbnRpYWwgPSBpdC0+b3B0aW9uc1syXTsKKworICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmIgY2FsbGVkIHdpdGggb3B0aW9ucyBiYXNlPTB4JTAzbHgsICVzIGFuZCAlc1xuIixkZXYtPm1pbm9yLCBpb2Jhc2UsICh1bmlwb2xhcj09MSk/InVuaXBvbGFyIjoiYmlwb2xhciIsIChkaWZmZXJlbnRpYWw9PTEpPyJkaWZmZXJlbnRpYWwiOiJzaW5nbGUtZW5kZWQiKTsKKworICAgICAgICAvKiBpZiBubyBhZGRyZXNzIHdhcyBzcGVjaWZpZWQsIHRyeSB0aGUgZGVmYXVsdCAweDMwMCAqLworICAgICAgICBpZiAoaW9iYXNlID09IDApIHsKKyAgICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmIgd2FybmluZzogSS9PIGJhc2UgYWRkcmVzcyBub3Qgc3BlY2lmaWVkLiBUcnlpbmcgdGhlIGRlZmF1bHQgMHgzMDAuXG4iLCBkZXYtPm1pbm9yKTsKKyAgICAgICAgICBpb2Jhc2UgPSAweDMwMDsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50aygiY29tZWRpJWQ6IGFkcTEyYjogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworICAgICAgICBpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgQURRMTJCX1NJWkUsICJhZHExMmIiKSkgeworICAgICAgICAgIHByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworICAgICAgICAgIHJldHVybiAtRUlPOworICAgICAgICB9CisgICAgICAgIGRldi0+aW9iYXNlID0gaW9iYXNlOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisgICAgICAgIGRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworICAgICAgICBpZihhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhZHExMmJfcHJpdmF0ZSkpIDwgMCkKKyAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworLyogZmlsbCBpbiBkZXZwcml2IHN0cnVjdHVyZSAqLworICAgICAgICBkZXZwcml2LT51bmlwb2xhciA9IHVuaXBvbGFyOworICAgICAgICBkZXZwcml2LT5kaWZmZXJlbnRpYWwgPSBkaWZmZXJlbnRpYWw7CisJZGV2cHJpdi0+ZGlnaXRhbF9zdGF0ZSA9IDA7CisvKiBpbml0aWFsaXplIGNoYW5uZWwgYW5kIHJhbmdlIHRvIC0xIHNvIHdlIG1ha2Ugc3VyZSB3ZSBhbHdheXMgd3JpdGUKKyAgIGF0IGxlYXN0IG9uY2UgdG8gdGhlIENUUkVHIGluIHRoZSBpbnN0cnVjdGlvbiAqLworICAgICAgICBkZXZwcml2LT5sYXN0X2NoYW5uZWwgPSAtMTsKKyAgICAgICAgZGV2cHJpdi0+bGFzdF9yYW5nZSA9IC0xOworCisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKyAgICAgICAgaWYoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpPDApCisgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgICAgIHMgPSBkZXYtPnN1YmRldmljZXMrMDsKKyAgICAgICAgLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworICAgICAgICBzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisgICAgICAgIGlmIChkaWZmZXJlbnRpYWwpIHsKKyAgICAgICAgICBzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEV8U0RGX0dST1VORHxTREZfRElGRjsKKyAgICAgICAgICBzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2RpZmZfY2hhbnM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFfFNERl9HUk9VTkQ7CisgICAgICAgICAgcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9zZV9jaGFuczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1bmlwb2xhcikgeworICAgICAgICAgIHMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FkcTEyYl9haV91bmlwb2xhcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hZHExMmJfYWlfYmlwb2xhcjsKKyAgICAgICAgfQorCisgICAgICAgIHMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpLTE7CisKKworICAgICAgICBzLT5sZW5fY2hhbmxpc3QgPSA0OyAgLyogVGhpcyBpcyB0aGUgbWF4aW11bSBjaGFubGlzdCBsZW5ndGggdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJvYXJkIGNhbiBoYW5kbGUgKi8KKyAgICAgICAgcy0+aW5zbl9yZWFkID0gYWRxMTJiX2FpX3JpbnNuOworCisKKyAgICAgICAgcyA9IGRldi0+c3ViZGV2aWNlcysxOworICAgICAgICAvKiBkaWdpdGFsIGlucHV0IHN1YmRldmljZSAqLworICAgICAgICBzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisgICAgICAgIHMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKyAgICAgICAgcy0+bl9jaGFuPXRoaXNib2FyZC0+ZGlfY2hhbnM7CisgICAgICAgIHMtPm1heGRhdGEgPSAxOworICAgICAgICBzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworICAgICAgICBzLT5pbnNuX2JpdHMgPSBhZHExMmJfZGlfaW5zbl9iaXRzOworCisgICAgICAgIHMgPSBkZXYtPnN1YmRldmljZXMrMjsKKyAgICAgICAgLyogZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCisgICAgICAgIHMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKyAgICAgICAgcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworICAgICAgICBzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRvX2NoYW5zOworICAgICAgICBzLT5tYXhkYXRhID0gMTsKKyAgICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKyAgICAgICAgcy0+aW5zbl9iaXRzID0gYWRxMTJiX2RvX2luc25fYml0czsKKworCisgICAgICAgIHByaW50aygiYXR0YWNoZWRcbiIpOworCisgICAgICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgYWRxMTJiX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQoreworICAgICAgICBpZiAoZGV2LT5pb2Jhc2UpCisgICAgICAgICAgcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEFEUTEyQl9TSVpFKTsKKworICAgICAgICBrZnJlZShkZXZwcml2KTsKKworICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmI6IHJlbW92ZWRcbiIsZGV2LT5taW5vcik7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiAiaW5zdHJ1Y3Rpb25zIiByZWFkL3dyaXRlIGRhdGEgaW4gIm9uZS1zaG90IiBvciAic29mdHdhcmUtdHJpZ2dlcmVkIgorICogbW9kZS4KKyAqLworCitzdGF0aWMgaW50IGFkcTEyYl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisgICAgICAgIGludCBuLCBpOworICAgICAgICBpbnQgcmFuZ2UsIGNoYW5uZWw7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGksIGxvLCBzdGF0dXM7CisKKyAgICAgICAgLyogY2hhbmdlIGNoYW5uZWwgYW5kIHJhbmdlIG9ubHkgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzICovCisgICAgICAgIHJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworICAgICAgICBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisgICAgICAgIGlmIChjaGFubmVsICE9IGRldnByaXYtPmxhc3RfY2hhbm5lbCB8fCByYW5nZSAhPSBkZXZwcml2LT5sYXN0X3JhbmdlKSB7CisgICAgICAgICAgb3V0YigocmFuZ2UgPDwgNCkgfCBjaGFubmVsLCBkZXYtPmlvYmFzZSArIEFEUTEyQl9DVFJFRyk7CisgICAgICAgICAgY29tZWRpX3VkZWxheSg1MCk7ICAgLyogd2FpdCBmb3IgdGhlIG11eCB0byBzZXR0bGUgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworICAgICAgICBzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfQURMT1cpOworCisgICAgICAgIC8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisgICAgICAgIGZvcihuPTA7IG4gPCBpbnNuLT5uOyBuKyspeworCisgICAgICAgICAgLyogd2FpdCBmb3IgZW5kIG9mIGNvbnZlcnRpb24gKi8KKwkgIGkgPSAwOworICAgICAgICAgIGRvIHsKKy8vICAgICAgICAgICAgY29tZWRpX3VkZWxheSgxKTsKKwkgICAgc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgQURRMTJCX1NUSU5SKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cyAmIEFEUTEyQl9FT0M7CisgICAgICAgICAgfSB3aGlsZSAoc3RhdHVzID09IDAgJiYgKytpIDwgVElNRU9VVCk7CisvLyAgICAgICAgICB9IHdoaWxlICgrK2kgPCAxMCk7CisKKyAgICAgICAgICAvKiByZWFkIGRhdGEgKi8KKyAgICAgICAgICBoaSA9IGluYihkZXYtPmlvYmFzZSArIEFEUTEyQl9BREhJRyk7CisgICAgICAgICAgbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfQURMT1cpOworCisgICAgICAgICAgLy9ydF9wcmludGsoImRlYnVnOiBjaGFuPSVkIHJhbmdlPSVkIHN0YXR1cz0lZCBoaT0lZCBsbz0lZFxuIiwgY2hhbm5lbCwgcmFuZ2UsIHN0YXR1cywgIGhpLCBsbyk7CisgICAgICAgICAgZGF0YVtuXSA9IChoaSA8PCA4KSB8IGxvOworCisgICAgICAgIH0KKworICAgICAgICAvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworICAgICAgICByZXR1cm4gbjsKK30KKworCitzdGF0aWMgaW50IGFkcTEyYl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisKKyAgICAgICAgLyogb25seSBiaXRzIDAtNCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IGRpZ2l0YWwgaW5wdXRzICovCisgICAgICAgIGRhdGFbMV0gPSAoaW5iKGRldi0+aW9iYXNlK0FEUTEyQl9TVElOUikgJiAoMHgxZikpOworCisgICAgICAgIHJldHVybiAyOworfQorCisKK3N0YXRpYyBpbnQgYWRxMTJiX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKyAgICAgICAgaW50IGNoYW5uZWw7CisKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgODsgY2hhbm5lbCsrKQorCSAgaWYgKCgoZGF0YVswXT4+Y2hhbm5lbCkgJiAweDAxKSAhPSAwKQorICAgICAgICAgICAgb3V0YigoKChkYXRhWzFdPj5jaGFubmVsKSYweDAxKTw8MykgfCBjaGFubmVsLCBkZXYtPmlvYmFzZSArIEFEUTEyQl9PVVRCUik7CisKKyAgICAgICAgLyogc3RvcmUgaW5mb3JtYXRpb24gdG8gcmV0cmlldmUgd2hlbiBhc2tlZCBmb3IgcmVhZGluZyAqLworICAgICAgICBpZiAoZGF0YVswXSkgeworICAgICAgICAgIGRldnByaXYtPmRpZ2l0YWxfc3RhdGUgJj0gfmRhdGFbMF07CisgICAgICAgICAgZGV2cHJpdi0+ZGlnaXRhbF9zdGF0ZSB8PSAoZGF0YVswXSZkYXRhWzFdKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFbMV0gPSBkZXZwcml2LT5kaWdpdGFsX3N0YXRlOworCisgICAgICAgIHJldHVybiAyOworfQorCisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWRxMTJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllYWM3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCkBAIC0wLDAgKzEsMTU2OCBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyAqIFRoYW5rcyB0byBaaGVuR2FuZyBTaGFuZyA8WmhlbkdhbmcuU2hhbmdAQWR2YW50ZWNoLmNvbS5jbj4KKyAqIGZvciB0ZXN0aW5nIGFuZCBpbmZvcm1hdGlvbnMuCisgKgorICogIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgorICogICBjYXJkOiAgIFBDSS0xNzEwLCBQQ0ktMTcxMEhHLCBQQ0ktMTcxMSwgUENJLTE3MTMsIFBDSS0xNzIwLCBQQ0ktMTczMQorICogICBkcml2ZXI6IHBjaTE3MTAsICBwY2kxNzEwaGcsICBwY2kxNzExLCAgcGNpMTcxMywgIHBjaTE3MjAsICBwY2kxNzMxCisgKgorICogT3B0aW9uczoKKyAqICBbMF0gLSBQQ0kgYnVzIG51bWJlciAtIGlmIGJ1cyBudW1iZXIgYW5kIHNsb3QgbnVtYmVyIGFyZSAwLAorICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkcml2ZXIgc2VhcmNoIGZvciBmaXJzdCB1bnVzZWQgY2FyZAorICogIFsxXSAtIFBDSSBzbG90IG51bWJlcgorICoKKyovCisvKgorRHJpdmVyOiBhZHZfcGNpMTcxMAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTcxMCwgUENJLTE3MTBIRywgUENJLTE3MTEsIFBDSS0xNzEzLAorICAgICAgICAgICAgIEFkdmFudGVjaCBQQ0ktMTcyMCwgUENJLTE3MzEKK0F1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0ktMTcxMCAoYWR2X3BjaTE3MTApLCBQQ0ktMTcxMEhHIChwY2kxNzEwaGcpLAorICBQQ0ktMTcxMSAoYWR2X3BjaTE3MTApLCBQQ0ktMTcxMywgUENJLTE3MjAsCisgIFBDSS0xNzMxCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIEFJLCBBTywgREkgYW5kIERPIHN1YmRldmljZXMuCitBSSBzdWJkZXZpY2Ugc3VwcG9ydHMgY21kIGFuZCBpbnNuIGludGVyZmFjZSwKK290aGVyIHN1YmRldmljZXMgc3VwcG9ydCBvbmx5IGluc24gaW50ZXJmYWNlLgorCitUaGUgUENJLTE3MTAgYW5kIFBDSS0xNzEwSEcgaGF2ZSB0aGUgc2FtZSBQQ0kgZGV2aWNlIElELCBzbyB0aGUKK2RyaXZlciBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLCBhcyB3b3VsZCBiZSBub3JtYWwgZm9yIGEKK1BDSSBkcml2ZXIuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICAgICAgICAgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJCisgICAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJhbWNjX3M1OTMzLmgiCisKKyNkZWZpbmUgUENJMTcxeF9QQVJBTk9JRENIRUNLCS8qIGlmIGRlZmluZWQsIHRoZW4gaXMgdXNlZCBjb2RlIHdoaWNoIGNvbnRyb2wgY29ycmVjdCBjaGFubmVsIG51bWJlciBvbiBldmVyeSAxMiBiaXQgc2FtcGxlICovCisKKyN1bmRlZiBQQ0kxNzFYX0VYVERFQlVHCisKKyNkZWZpbmUgRFJWX05BTUUgImFkdl9wY2kxNzEwIgorCisjdW5kZWYgRFBSSU5USworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHJ0X3ByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisvLyBoYXJkd2FyZSB0eXBlcyBvZiB0aGUgY2FyZHMKKyNkZWZpbmUgVFlQRV9QQ0kxNzFYCTAKKyNkZWZpbmUgVFlQRV9QQ0kxNzEzCTIKKyNkZWZpbmUgVFlQRV9QQ0kxNzIwCTMKKworI2RlZmluZSBJT1JBTkdFXzE3MXggCTMyCisjZGVmaW5lIElPUkFOR0VfMTcyMCAJMTYKKworI2RlZmluZSBQQ0kxNzF4X0FEX0RBVEEJIDAJLyogUjogICBBL0QgZGF0YSAqLworI2RlZmluZSBQQ0kxNzF4X1NPRlRUUkcJIDAJLyogVzogICBzb2Z0IHRyaWdnZXIgZm9yIEEvRCAqLworI2RlZmluZSBQQ0kxNzF4X1JBTkdFCSAyCS8qIFc6ICAgQS9EIGdhaW4vcmFuZ2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9NVVgJIDQJLyogVzogICBBL0QgbXVsdGlwbGV4b3IgY29udHJvbCAqLworI2RlZmluZSBQQ0kxNzF4X1NUQVRVUwkgNgkvKiBSOiAgIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQQ0kxNzF4X0NPTlRST0wJIDYJLyogVzogICBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MXhfQ0xSSU5UCSA4CS8qIFc6ICAgY2xlYXIgaW50ZXJydXB0cyByZXF1ZXN0ICovCisjZGVmaW5lIFBDSTE3MXhfQ0xSRklGTwkgOQkvKiBXOiAgIGNsZWFyIEZJRk8gKi8KKyNkZWZpbmUgUENJMTcxeF9EQTEJMTAJLyogVzogICBEL0EgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9EQTIJMTIJLyogVzogICBEL0EgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9EQVJFRgkxNAkvKiBXOiAgIEQvQSByZWZlcmVuY2UgY29udHJvbCAqLworI2RlZmluZSBQQ0kxNzF4X0RJCTE2CS8qIFI6ICAgZGlnaSBpbnB1dHMgKi8KKyNkZWZpbmUgUENJMTcxeF9ETwkxNgkvKiBSOiAgIGRpZ2kgaW5wdXRzICovCisjZGVmaW5lIFBDSTE3MXhfQ05UMAkyNAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KKyNkZWZpbmUgUENJMTcxeF9DTlQxCTI2CS8qIFIvVzogODI1NCBjb3V0ZXIgMSAqLworI2RlZmluZSBQQ0kxNzF4X0NOVDIJMjgJLyogUi9XOiA4MjU0IGNvdXRlciAyICovCisjZGVmaW5lIFBDSTE3MXhfQ05UQ1RSTAkzMAkvKiBXOiAgIDgyNTQgY291bnRlciBjb250cm9sICovCisKKy8vIHVwcGVyIGJpdHMgZnJvbSBzdGF0dXMgcmVnaXN0ZXIgKFBDSTE3MXhfU1RBVFVTKSAobG93ZXIgaXMgc2FtZSB3b3RoIGNvbnRyb2wgcmVnKQorI2RlZmluZQlTdGF0dXNfRkUJMHgwMTAwCS8qIDE9RklGTyBpcyBlbXB0eSAqLworI2RlZmluZSBTdGF0dXNfRkgJMHgwMjAwCS8qIDE9RklGTyBpcyBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgU3RhdHVzX0ZGCTB4MDQwMAkvKiAxPUZJRk8gaXMgZnVsbCwgZmF0YWwgZXJyb3IgKi8KKyNkZWZpbmUgU3RhdHVzX0lSUQkweDA4MDAJLyogMT1JUlEgb2NjdXJlZCAqLworLy8gYml0cyBmcm9tIGNvbnRyb2wgcmVnaXN0ZXIgKFBDSTE3MXhfQ09OVFJPTCkKKyNkZWZpbmUgQ29udHJvbF9DTlQwCTB4MDA0MAkvKiAxPUNOVDAgaGF2ZSBleHRlcm5hbCBzb3VyY2UsIDA9aGF2ZSBpbnRlcm5hbCAxMDBrSHogc291cmNlICovCisjZGVmaW5lIENvbnRyb2xfT05FRkgJMHgwMDIwCS8qIDE9SVJRIG9uIEZJRk8gaXMgaGFsZiBmdWxsLCAwPWV2ZXJ5IHNhbXBsZSAqLworI2RlZmluZSBDb250cm9sX0lSUUVOCTB4MDAxMAkvKiAxPWVuYWJsZSBJUlEgKi8KKyNkZWZpbmUgQ29udHJvbF9HQVRFCTB4MDAwOAkvKiAxPWVuYWJsZSBleHRlcm5hbCB0cmlnZ2VyIEdBVEUgKDgyNTQ/KSAqLworI2RlZmluZSBDb250cm9sX0VYVAkweDAwMDQJLyogMT1leHRlcm5hbCB0cmlnZ2VyIHNvdXJjZSAqLworI2RlZmluZSBDb250cm9sX1BBQ0VSCTB4MDAwMgkvKiAxPWVuYWJsZSBpbnRlcm5hbCA4MjU0IHRyaWdnZXIgc291cmNlICovCisjZGVmaW5lIENvbnRyb2xfU1cJMHgwMDAxCS8qIDE9ZW5hYmxlIHNvZnR3YXJlIHRyaWdnZXIgc291cmNlICovCisvLyBiaXRzIGZyb20gY291bnRlciBjb250cm9sIHJlZ2lzdGVyIChQQ0kxNzF4X0NOVENUUkwpCisjZGVmaW5lIENvdW50ZXJfQkNEICAgICAweDAwMDEJLyogMCA9IGJpbmFyeSBjb3VudGVyLCAxID0gQkNEIGNvdW50ZXIgKi8KKyNkZWZpbmUgQ291bnRlcl9NMCAgICAgIDB4MDAwMgkvKiBNMC1NMiBzZWxlY3QgbW9kZXMgMC01ICovCisjZGVmaW5lIENvdW50ZXJfTTEgICAgICAweDAwMDQJLyogMDAwID0gbW9kZSAwLCAwMTAgPSBtb2RlIDIgLi4uICovCisjZGVmaW5lIENvdW50ZXJfTTIgICAgICAweDAwMDgKKyNkZWZpbmUgQ291bnRlcl9SVzAgICAgIDB4MDAxMAkvKiBSVzAvUlcxIHNlbGVjdCByZWFkL3dyaXRlIG1vZGUgKi8KKyNkZWZpbmUgQ291bnRlcl9SVzEgICAgIDB4MDAyMAorI2RlZmluZSBDb3VudGVyX1NDMCAgICAgMHgwMDQwCS8qIFNlbGVjdCBDb3VudGVyLiBPbmx5IDAwIG9yIDExIG1heSAqLworI2RlZmluZSBDb3VudGVyX1NDMSAgICAgMHgwMDgwCS8qIGJlIHVzZWQsIDAwIGZvciBDTlQwLCAxMSBmb3IgcmVhZC1iYWNrIGNvbW1hbmQgKi8KKworI2RlZmluZSBQQ0kxNzIwX0RBMAkgMAkvKiBXOiAgIEQvQSByZWdpc3RlciAwICovCisjZGVmaW5lIFBDSTE3MjBfREExCSAyCS8qIFc6ICAgRC9BIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUENJMTcyMF9EQTIJIDQJLyogVzogICBEL0EgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBQQ0kxNzIwX0RBMwkgNgkvKiBXOiAgIEQvQSByZWdpc3RlciAzICovCisjZGVmaW5lIFBDSTE3MjBfUkFOR0UJIDgJLyogUi9XOiBEL0EgcmFuZ2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcyMF9TWU5DT1VUCSA5CS8qIFc6ICAgRC9BIHN5bmNocm9uaXplZCBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcyMF9TWU5DT05UCTE1CS8qIFIvVzogRC9BIHN5bmNocm9uaXplZCBjb250cm9sICovCisKKy8vIEQvQSBzeW5jaHJvbml6ZWQgY29udHJvbCAoUENJMTcyMF9TWU5DT05UKQorI2RlZmluZSBTeW5jb250X1NDMAkgMQkvKiBzZXQgc3luY2hyb25vdXMgb3V0cHV0IG1vZGUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MTBfMyA9IHsgOSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCX0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHJhbmdlX2NvZGVzX3BjaTE3MTBfM1tdID0KKwl7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MTBoZyA9IHsgMTIsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKQorCX0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHJhbmdlX2NvZGVzX3BjaTE3MTBoZ1tdID0KKwl7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsCisJCTB4MTMgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3eDEgPSB7IDUsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSkKKwl9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxN3gxW10gPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MjAgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MXhfZGEgPSB7IDIsIHsKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJfQorfTsKKworc3RhdGljIGludCBwY2kxNzEwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaTE3MTBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IGJvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCWludCBkZXZpY2VfaWQ7CisJaW50IGlvcmFuZ2U7CQkvLyBJL08gcmFuZ2UgbGVuCisJY2hhciBoYXZlX2lycTsJCS8vIDE9Y2FyZCBzdXBwb3J0IElSUQorCWNoYXIgY2FyZHR5cGU7CQkvLyAwPTE3MTAmIGNvLiAyPTE3MTMsIC4uLgorCWludCBuX2FpY2hhbjsJCS8vIG51bSBvZiBBL0QgY2hhbnMKKwlpbnQgbl9haWNoYW5kOwkJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZmIG1vZGUKKwlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCisJaW50IG5fZGljaGFuOwkJLy8gbnVtIG9mIERJIGNoYW5zCisJaW50IG5fZG9jaGFuOwkJLy8gbnVtIG9mIERPIGNoYW5zCisJaW50IG5fY291bnRlcjsJCS8vIG51bSBvZiBjb3VudGVycworCWludCBhaV9tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBBL0QKKwlpbnQgYW9fbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgRC9BCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9haTsJLy8gcmFuZ2VsaXN0IGZvciBBL0QKKwljb25zdCBjaGFyICpyYW5nZWNvZGVfYWk7CS8vIHJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYW87CS8vIHJhbmdlbGlzdCBmb3IgRC9BCisJdW5zaWduZWQgaW50IGFpX25zX21pbjsJLy8gbWF4IHNhbXBsZSBzcGVlZCBvZiBjYXJkIHYgbnMKKwl1bnNpZ25lZCBpbnQgZmlmb19oYWxmX3NpemU7CS8vIHNpemUgb2YgRklGTy8yCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpMTcxMF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTcxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpMTcxMF9wY2lfdGFibGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisJeyJwY2kxNzEwIiwgMHgxNzEwLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxWCwKKwkJMTYsIDgsIDIsIDE2LCAxNiwgMSwgMHgwZmZmLCAweDBmZmYsCisJCSZyYW5nZV9wY2kxNzEwXzMsIHJhbmdlX2NvZGVzX3BjaTE3MTBfMywKKwkJJnJhbmdlX3BjaTE3MXhfZGEsCisJCTEwMDAwLCAyMDQ4fSwKKwl7InBjaTE3MTBoZyIsIDB4MTcxMCwKKwkJSU9SQU5HRV8xNzF4LCAxLCBUWVBFX1BDSTE3MVgsCisJCTE2LCA4LCAyLCAxNiwgMTYsIDEsIDB4MGZmZiwgMHgwZmZmLAorCQkmcmFuZ2VfcGNpMTcxMGhnLCByYW5nZV9jb2Rlc19wY2kxNzEwaGcsCisJCSZyYW5nZV9wY2kxNzF4X2RhLAorCQkxMDAwMCwgMjA0OH0sCisJeyJwY2kxNzExIiwgMHgxNzExLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxWCwKKwkJMTYsIDAsIDIsIDE2LCAxNiwgMSwgMHgwZmZmLCAweDBmZmYsCisJCSZyYW5nZV9wY2kxN3gxLCByYW5nZV9jb2Rlc19wY2kxN3gxLCAmcmFuZ2VfcGNpMTcxeF9kYSwKKwkJMTAwMDAsIDUxMn0sCisJeyJwY2kxNzEzIiwgMHgxNzEzLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxMywKKwkJMzIsIDE2LCAwLCAwLCAwLCAwLCAweDBmZmYsIDB4MDAwMCwKKwkJJnJhbmdlX3BjaTE3MTBfMywgcmFuZ2VfY29kZXNfcGNpMTcxMF8zLCBOVUxMLAorCQkxMDAwMCwgMjA0OH0sCisJeyJwY2kxNzIwIiwgMHgxNzIwLAorCQlJT1JBTkdFXzE3MjAsIDAsIFRZUEVfUENJMTcyMCwKKwkJMCwgMCwgNCwgMCwgMCwgMCwgMHgwMDAwLCAweDBmZmYsCisJCU5VTEwsIE5VTEwsICZyYW5nZV9wY2kxNzIwLAorCQkwLCAwfSwKKwl7InBjaTE3MzEiLCAweDE3MzEsCisJCUlPUkFOR0VfMTcxeCwgMSwgVFlQRV9QQ0kxNzFYLAorCQkxNiwgMCwgMCwgMTYsIDE2LCAwLCAweDBmZmYsIDB4MDAwMCwKKwkJJnJhbmdlX3BjaTE3eDEsIHJhbmdlX2NvZGVzX3BjaTE3eDEsIE5VTEwsCisJCTEwMDAwLCA1MTJ9LAorCS8vIGR1bW15IGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gZHJpdmVyIG5hbWUKKwl7Lm5hbWUgPSBEUlZfTkFNRX0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2kxNzEwID0geworCS5kcml2ZXJfbmFtZSA9IERSVl9OQU1FLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuYXR0YWNoID0gcGNpMTcxMF9hdHRhY2gsCisJLmRldGFjaCA9IHBjaTE3MTBfZGV0YWNoLAorCS5udW1fbmFtZXMgPSBuX2JvYXJkdHlwZXMsCisJLmJvYXJkX25hbWUgPSAmYm9hcmR0eXBlc1swXS5uYW1lLAorCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCit9OworCitzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwkvLyBwdHIgdG8gUENJIGRldmljZQorCWNoYXIgdmFsaWQ7CQkvLyBjYXJkIGlzIHVzYWJsZQorCWNoYXIgbmV2ZXJlbmRpbmdfYWk7CS8vIHdlIGRvIHVubGltaXRlZCBBSQorCXVuc2lnbmVkIGludCBDbnRybFJlZzsJLy8gQ29udHJvbCByZWdpc3RlcgorCXVuc2lnbmVkIGludCBpODI1NF9vc2NfYmFzZTsJLy8gZnJlcXVlbmNlIG9mIG9uYm9hcmQgb3NjaWxhdG9yCisJdW5zaWduZWQgaW50IGFpX2RvOwkvLyB3aGF0IGRvIEFJPyAwPW5vdGhpbmcsIDEgdG8gNCBtb2RlCisJdW5zaWduZWQgaW50IGFpX2FjdF9zY2FuOwkvLyBob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZAorCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbjsJLy8gYWN0dWFsIHBvc2l0aW9uIGluIGFjdHVhbCBzY2FuCisJdW5zaWduZWQgaW50IGFpX2J1Zl9wdHI7CS8vIGRhdGEgYnVmZmVyIHB0ciBpbiBzYW1wbGVzCisJdW5zaWduZWQgY2hhciBhaV9lb3M7CS8vIDE9RU9TIHdha2UgdXAKKwl1bnNpZ25lZCBjaGFyIGFpX2V0OworCXVuc2lnbmVkIGludCBhaV9ldF9DbnRybFJlZzsKKwl1bnNpZ25lZCBpbnQgYWlfZXRfTXV4VmFsOworCXVuc2lnbmVkIGludCBhaV9ldF9kaXYxLCBhaV9ldF9kaXYyOworCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMzJdOwkvLyBsaXN0IG9mIHNjYW5lZCBjaGFubmVsCisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfbGVuOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKKwl1bnNpZ25lZCBjaGFyIGFjdF9jaGFubGlzdF9wb3M7CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdAorCXVuc2lnbmVkIGNoYXIgZGFfcmFuZ2VzOwkvLyBjb3B5IG9mIEQvQSBvdXRwaXQgcmFuZ2UgcmVnaXN0ZXIKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8vIGxlbiBvZiBzY2FubGlzdAorCXVuc2lnbmVkIGludCBhaV9uX2NoYW47CS8vIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkCisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLy8gYWN0YXVsIGNoYW5saXN0CisJdW5zaWduZWQgaW50IGFpX2ZsYWdzOwkvLyBmbGFnbGlzdAorCXVuc2lnbmVkIGludCBhaV9kYXRhX2xlbjsJLy8gbGVuIG9mIGRhdGEgYnVmZmVyCisJc2hvcnQgKmFpX2RhdGE7CS8vIGRhdGEgYnVmZmVyCisJdW5zaWduZWQgaW50IGFpX3RpbWVyMTsJLy8gdGltZXJzCisJdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKKwlzaG9ydCBhb19kYXRhWzRdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKKwl1bnNpZ25lZCBpbnQgY250MF93cml0ZV93YWl0OwkvLyBhZnRlciBhIHdyaXRlLCB3YWl0IGZvciB1cGRhdGUgb2YgdGhlIGludGVybmFsIHN0YXRlCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pOworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbik7CitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworc3RhdGljIGludCBwY2kxNzEwX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcGNpMTcxeF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV4b25lY2hhbltdID0geyAweDAwMDAsIDB4MDEwMSwgMHgwMjAyLCAweDAzMDMsIDB4MDQwNCwgMHgwNTA1LCAweDA2MDYsIDB4MDcwNywJLy8gdXNlZCBmb3IgZ2FpbiBsaXN0IHByb2dyYW1taW5nCisJMHgwODA4LCAweDA5MDksIDB4MGEwYSwgMHgwYjBiLCAweDBjMGMsIDB4MGQwZCwgMHgwZTBlLCAweDBmMGYsCisJMHgxMDEwLCAweDExMTEsIDB4MTIxMiwgMHgxMzEzLCAweDE0MTQsIDB4MTUxNSwgMHgxNjE2LCAweDE3MTcsCisJMHgxODE4LCAweDE5MTksIDB4MWExYSwgMHgxYjFiLCAweDFjMWMsIDB4MWQxZCwgMHgxZTFlLCAweDFmMWYKK307CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9yZWFkX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgdGltZW91dDsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwl1bnNpZ25lZCBpbnQgaWRhdGE7CisjZW5kaWYKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9pbnNuX3JlYWRfYWkoLi4uKVxuIik7CisJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOworCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfU1c7CS8vIHNldCBzb2Z0d2FyZSB0cmlnZ2VyCisJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisKKwlzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCAmaW5zbi0+Y2hhbnNwZWMsIDEsIDEpOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgQSBTVD0lNHggSU89JXhcbiIsCisJCWludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUyk7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9TT0ZUVFJHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBCIG49JWQgU1Q9JTR4XG4iLCBuLAorCQkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpKTsKKwkJLy9jb21lZGlfdWRlbGF5KDEpOworCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBDIG49JWQgU1Q9JTR4XG4iLCBuLAorCQkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpKTsKKwkJdGltZW91dCA9IDEwMDsKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaWYgKCEoaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0ZFKSkKKwkJCQlnb3RvIGNvbnZfZmluaXNoOworCQkJaWYgKCEodGltZW91dCAlIDEwKSkKKwkJCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBEIG49JWQgdG09JWQgU1Q9JTR4XG4iLCBuLAorCQkJCQl0aW1lb3V0LAorCQkJCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUykpOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0Iik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCQlkYXRhW25dID0gMDsKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU5EOiBwY2kxNzF4X2luc25fcmVhZF9haSguLi4pIG49JWRcbiIsIG4pOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udl9maW5pc2g6CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJCWlkYXRhID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKKwkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKKwkJCWlmICgoaWRhdGEgJiAweGYwMDApICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFswXSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiBkYXRhIGRyb3B1dCEiKTsKKwkJCQlyZXR1cm4gLUVUSU1FOworCQkJfQorCQlkYXRhW25dID0gaWRhdGEgJiAweDBmZmY7CisjZWxzZQorCQlkYXRhW25dID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKSAmIDB4MGZmZjsKKyNlbmRpZgorCisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9pbnNuX3JlYWRfYWkoLi4uKSBuPSVkXG4iLCBuKTsKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbiwgcmFuZ2UsIG9mczsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoY2hhbikgeworCQlkZXZwcml2LT5kYV9yYW5nZXMgJj0gMHhmYjsKKwkJZGV2cHJpdi0+ZGFfcmFuZ2VzIHw9IChyYW5nZSA8PCAyKTsKKwkJb3V0dyhkZXZwcml2LT5kYV9yYW5nZXMsIGRldi0+aW9iYXNlICsgUENJMTcxeF9EQVJFRik7CisJCW9mcyA9IFBDSTE3MXhfREEyOworCX0gZWxzZSB7CisJCWRldnByaXYtPmRhX3JhbmdlcyAmPSAweGZlOworCQlkZXZwcml2LT5kYV9yYW5nZXMgfD0gcmFuZ2U7CisJCW91dHcoZGV2cHJpdi0+ZGFfcmFuZ2VzLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREFSRUYpOworCQlvZnMgPSBQQ0kxNzF4X0RBMTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlvdXR3KGRhdGFbbl0sIGRldi0+aW9iYXNlICsgb2ZzKTsKKworCWRldnByaXYtPmFvX2RhdGFbY2hhbl0gPSBkYXRhW25dOworCisJcmV0dXJuIG47CisKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX3JlYWRfYW8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspCisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19kYXRhW2NoYW5dOworCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9iaXRzX2RpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9ESSk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX2JpdHNfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfRE8pOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX2NvdW50ZXJfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1zYiwgbHNiLCBjY250cmw7CisJaW50IGk7CisKKwljY250cmwgPSAweEQyOwkJLyogY291bnQgb25seSAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0dyhjY250cmwsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKworCQlsc2IgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDApICYgMHhGRjsKKwkJbXNiID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKSAmIDB4RkY7CisKKwkJZGF0YVswXSA9IGxzYiB8IChtc2IgPDwgOCk7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9jb3VudGVyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1aW50IG1zYiwgbHNiLCBjY250cmwsIHN0YXR1czsKKworCWxzYiA9IGRhdGFbMF0gJiAweDAwRkY7CisJbXNiID0gKGRhdGFbMF0gJiAweEZGMDApID4+IDg7CisKKwkvKiB3cml0ZSBsc2IsIHRoZW4gbXNiICovCisJb3V0dyhsc2IsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKTsKKwlvdXR3KG1zYiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDApOworCisJaWYgKGRldnByaXYtPmNudDBfd3JpdGVfd2FpdCkgeworCQkvKiB3YWl0IGZvciB0aGUgbmV3IGNvdW50IHRvIGJlIGxvYWRlZCAqLworCQljY250cmwgPSAweEUyOworCQlkbyB7CisJCQlvdXR3KGNjbnRybCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCQkJc3RhdHVzID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKSAmIDB4RkY7CisJCX0gd2hpbGUgKHN0YXR1cyAmIDB4NDApOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2luc25fY291bnRlcl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworI2lmZGVmIHVudXNlZAorCS8qIFRoaXMgZG9lc24ndCB3b3JrIGxpa2UgYSBub3JtYWwgQ29tZWRpIGNvdW50ZXIgY29uZmlnICovCisJdWludCBjY250cmwgPSAwOworCisJZGV2cHJpdi0+Y250MF93cml0ZV93YWl0ID0gZGF0YVswXSAmIDB4MjA7CisKKwkvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBjbG9jaz8gKi8KKwlpZiAoIShkYXRhWzBdICYgMHgxMCkpIHsJLyogaW50ZXJuYWwgKi8KKwkJZGV2cHJpdi0+Q250cmxSZWcgJj0gfkNvbnRyb2xfQ05UMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX0NOVDA7CisJfQorCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKKworCWlmIChkYXRhWzBdICYgMHgwMSkKKwkJY2NudHJsIHw9IENvdW50ZXJfTTA7CisJaWYgKGRhdGFbMF0gJiAweDAyKQorCQljY250cmwgfD0gQ291bnRlcl9NMTsKKwlpZiAoZGF0YVswXSAmIDB4MDQpCisJCWNjbnRybCB8PSBDb3VudGVyX00yOworCWlmIChkYXRhWzBdICYgMHgwOCkKKwkJY2NudHJsIHw9IENvdW50ZXJfQkNEOworCWNjbnRybCB8PSBDb3VudGVyX1JXMDsJLyogc2V0IHJlYWQvd3JpdGUgbW9kZSAqLworCWNjbnRybCB8PSBDb3VudGVyX1JXMTsKKwlvdXR3KGNjbnRybCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyMF9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgcmFuZ2VyZWcsIGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2VyZWcgPSBkZXZwcml2LT5kYV9yYW5nZXMgJiAofigweDAzIDw8IChjaGFuIDw8IDEpKSk7CisJcmFuZ2VyZWcgfD0gKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSA8PCAoY2hhbiA8PCAxKSk7CisJaWYgKHJhbmdlcmVnICE9IGRldnByaXYtPmRhX3JhbmdlcykgeworCQlvdXRiKHJhbmdlcmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfUkFOR0UpOworCQlkZXZwcml2LT5kYV9yYW5nZXMgPSByYW5nZXJlZzsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dHcoZGF0YVtuXSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX0RBMCArIChjaGFuIDw8IDEpKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfU1lOQ09VVCk7CS8vIHVwZGF0ZSBvdXRwdXRzCisJfQorCisJZGV2cHJpdi0+YW9fZGF0YVtjaGFuXSA9IGRhdGFbbl07CisKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIGludGVycnVwdF9wY2kxNzEwX2V2ZXJ5X3NhbXBsZSh2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgbTsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwlzaG9ydCBzYW1wbDsKKyNlbmRpZgorCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBpbnRlcnJ1cHRfcGNpMTcxMF9ldmVyeV9zYW1wbGUoLi4uKVxuIik7CisJbSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKTsKKwlpZiAobSAmIFN0YXR1c19GRSkgeworCQlydF9wcmludGsoImNvbWVkaSVkOiBBL0QgRklGTyBlbXB0eSAoJTR4KVxuIiwgZGV2LT5taW5vciwgbSk7CisJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisJaWYgKG0gJiBTdGF0dXNfRkYpIHsKKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBBL0QgRklGTyBGdWxsIHN0YXR1cyAoRmF0YWwgRXJyb3IhKSAoJTR4KVxuIiwKKwkJCWRldi0+bWlub3IsIG0pOworCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLy8gY2xlYXIgb3VyIElOVCByZXF1ZXN0CisKKwlEUFJJTlRLKCJGT1IgIik7CisJZm9yICg7ICEoaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0ZFKTspIHsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwkJc2FtcGwgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpOworCQlEUFJJTlRLKCIlMDR4OiIsIHNhbXBsKTsKKwkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKKwkJCWlmICgoc2FtcGwgJiAweGYwMDApICE9CisJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W3MtPmFzeW5jLT5jdXJfY2hhbl0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGk6IEEvRCBkYXRhIGRyb3BvdXQ6IHJlY2VpdmVkIGRhdGEgZnJvbSBjaGFubmVsICVkLCBleHBlY3RlZCAlZCFcbiIsCisJCQkJCShzYW1wbCAmIDB4ZjAwMCkgPj4gMTIsCisJCQkJCShkZXZwcml2LT5hY3RfY2hhbmxpc3Rbcy0+YXN5bmMtPgorCQkJCQkJCWN1cl9jaGFuXSAmIDB4ZjAwMCkgPj4KKwkJCQkJMTIpOworCQkJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQlDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybjsKKwkJCX0KKwkJRFBSSU5USygiJThkICUyZCAlOGR+Iiwgcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyLAorCQkJcy0+YXN5bmMtPmN1cl9jaGFuLCBzLT5hc3luYy0+YnVmX2ludF9jb3VudCk7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBzYW1wbCAmIDB4MGZmZik7CisjZWxzZQorCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywKKwkJCWludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSkgJiAweDBmZmYpOworI2VuZGlmCisJCSsrcy0+YXN5bmMtPmN1cl9jaGFuOworCisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKSB7CisJCQlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOworCQl9CisKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CS8vIG9uZSBzY2FuIGRvbmUKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFT1MxIGJpYyAlZCBiaXAgJWQgYnVjICVkIGJ1cCAlZFxuIiwgcy0+YXN5bmMtPmJ1Zl9pbnRfY291bnQsIHMtPmFzeW5jLT5idWZfaW50X3B0ciwgcy0+YXN5bmMtPmJ1Zl91c2VyX2NvdW50LCBzLT5hc3luYy0+YnVmX3VzZXJfcHRyKTsKKwkJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVPUzJcbiIpOworCQkJaWYgKCghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpICYmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykpIHsJLy8gYWxsIGRhdGEgc2FtcGxlZAorCQkJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CS8vIGNsZWFyIG91ciBJTlQgcmVxdWVzdAorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogaW50ZXJydXB0X3BjaTE3MTBfZXZlcnlfc2FtcGxlKC4uLilcbiIpOworCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IG1vdmVfYmxvY2tfZnJvbV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG4sIGludCB0dXJuKQoreworCWludCBpLCBqOworI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSworCWludCBzYW1wbDsKKyNlbmRpZgorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogbW92ZV9ibG9ja19mcm9tX2ZpZm8oLi4uLCVkLCVkKVxuIiwgbiwKKwkJdHVybik7CisJaiA9IHMtPmFzeW5jLT5jdXJfY2hhbjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJCXNhbXBsID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKKwkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKKwkJCWlmICgoc2FtcGwgJiAweGYwMDApICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFtqXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBBL0QgIEZJRk8gZGF0YSBkcm9wb3V0OiByZWNlaXZlZCBkYXRhIGZyb20gY2hhbm5lbCAlZCwgZXhwZWN0ZWQgJWQhICglZC8lZC8lZC8lZC8lZC8lNHgpXG4iLAorCQkJCQlkZXYtPm1pbm9yLCAoc2FtcGwgJiAweGYwMDApID4+IDEyLAorCQkJCQkoZGV2cHJpdi0+CisJCQkJCQlhY3RfY2hhbmxpc3Rbal0gJiAweGYwMDApID4+IDEyLAorCQkJCQlpLCBqLCBkZXZwcml2LT5haV9hY3Rfc2NhbiwgbiwgdHVybiwKKwkJCQkJc2FtcGwpOworCQkJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQlDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybiAxOworCQkJfQorCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcGwgJiAweDBmZmYpOworI2Vsc2UKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsCisJCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpICYgMHgwZmZmKTsKKyNlbmRpZgorCQlqKys7CisJCWlmIChqID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJaiA9IDA7CisJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCQl9CisJfQorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogbW92ZV9ibG9ja19mcm9tX2ZpZm8oLi4uKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfcGNpMTcxMF9oYWxmX2ZpZm8odm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IG0sIHNhbXBsZXNpbmJ1ZjsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjaTE3MTBfaGFsZl9maWZvKC4uLilcbiIpOworCW0gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUyk7CisJaWYgKCEobSAmIFN0YXR1c19GSCkpIHsKKwkJcnRfcHJpbnRrKCJjb21lZGklZDogQS9EIEZJRk8gbm90IGhhbGYgZnVsbCEgKCU0eClcbiIsCisJCQlkZXYtPm1pbm9yLCBtKTsKKwkJcGNpMTcxeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobSAmIFN0YXR1c19GRikgeworCQlydF9wcmludGsKKwkJCSgiY29tZWRpJWQ6IEEvRCBGSUZPIEZ1bGwgc3RhdHVzIChGYXRhbCBFcnJvciEpICglNHgpXG4iLAorCQkJZGV2LT5taW5vciwgbSk7CisJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisKKwlzYW1wbGVzaW5idWYgPSB0aGlzX2JvYXJkLT5maWZvX2hhbGZfc2l6ZTsKKwlpZiAoc2FtcGxlc2luYnVmICogc2l6ZW9mKHNob3J0KSA+PSBkZXZwcml2LT5haV9kYXRhX2xlbikgeworCQltID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gLyBzaXplb2Yoc2hvcnQpOworCQlpZiAobW92ZV9ibG9ja19mcm9tX2ZpZm8oZGV2LCBzLCBtLCAwKSkKKwkJCXJldHVybjsKKwkJc2FtcGxlc2luYnVmIC09IG07CisJfQorCisJaWYgKHNhbXBsZXNpbmJ1ZikgeworCQlpZiAobW92ZV9ibG9ja19mcm9tX2ZpZm8oZGV2LCBzLCBzYW1wbGVzaW5idWYsIDEpKQorCQkJcmV0dXJuOworCX0KKworCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOwkvLyBjbGVhciBvdXIgSU5UIHJlcXVlc3QKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IGludGVycnVwdF9wY2kxNzEwX2hhbGZfZmlmbyguLi4pXG4iKTsKKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogaW50ZXJydXB0X3NlcnZpY2VfcGNpMTcxMCglZCwuLi4pXG4iLAorCQlpcnEpOworCWlmICghZGV2LT5hdHRhY2hlZCkJLy8gaXMgZGV2aWNlIGF0dGFjaGVkPworCQlyZXR1cm4gSVJRX05PTkU7CS8vIG5vLCBleGl0CisKKwlpZiAoIShpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUykgJiBTdGF0dXNfSVJRKSkJLy8gaXMgdGhpcyBpbnRlcnJ1cHQgZnJvbSBvdXIgYm9hcmQ/CisJCXJldHVybiBJUlFfTk9ORTsJLy8gbm8sIGV4aXQKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoKSBTVDogJTR4XG4iLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUykpOworCisJaWYgKGRldnByaXYtPmFpX2V0KSB7CS8vIFN3aXRjaCBmcm9tIGluaXRpYWwgVFJJR19FWFQgdG8gVFJJR194eHguCisJCWRldnByaXYtPmFpX2V0ID0gMDsKKwkJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1NXOwkvLyBzZXQgc29mdHdhcmUgdHJpZ2dlcgorCQlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CisJCWRldnByaXYtPkNudHJsUmVnID0gZGV2cHJpdi0+YWlfZXRfQ250cmxSZWc7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCQlvdXR3KGRldnByaXYtPmFpX2V0X011eFZhbCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7CisJCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKKwkJLy8gc3RhcnQgcGFjZXIKKwkJc3RhcnRfcGFjZXIoZGV2LCAxLCBkZXZwcml2LT5haV9ldF9kaXYxLCBkZXZwcml2LT5haV9ldF9kaXYyKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7CS8vIFdlIHVzZSBGSUZPIGhhbGYgZnVsbCBJTlQgb3Igbm90PworCQlpbnRlcnJ1cHRfcGNpMTcxMF9ldmVyeV9zYW1wbGUoZCk7CisJfSBlbHNlIHsKKwkJaW50ZXJydXB0X3BjaTE3MTBfaGFsZl9maWZvKGQpOworCX0KKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoLi4uKVxuIik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IGRpdmlzb3IxLCBkaXZpc29yMjsKKwl1bnNpZ25lZCBpbnQgc2VnbGVuOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKCVkLC4uLilcbiIsCisJCW1vZGUpOworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlzZWdsZW4gPSBjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdCwKKwkJZGV2cHJpdi0+YWlfbl9jaGFuKTsKKwlpZiAoc2VnbGVuIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCisJCWRldnByaXYtPmFpX25fY2hhbiwgc2VnbGVuKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisKKwlkZXZwcml2LT5haV9kbyA9IG1vZGU7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT5haV9idWZfcHRyID0gMDsKKwlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisKKwlkZXZwcml2LT5DbnRybFJlZyAmPSBDb250cm9sX0NOVDA7CisJaWYgKChkZXZwcml2LT5haV9mbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7CS8vIGRvbid0IHdlIHdhbnQgd2FrZSB1cCBldmVyeSBzY2FuPyAgICAgICAgICAgIGRldnByaXYtPmFpX2Vvcz0xOworCQlkZXZwcml2LT5haV9lb3MgPSAxOworCX0gZWxzZSB7CisJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfT05FRkg7CisJCWRldnByaXYtPmFpX2VvcyA9IDA7CisJfQorCisJaWYgKChkZXZwcml2LT5haV9zY2FucyA9PSAwKSB8fCAoZGV2cHJpdi0+YWlfc2NhbnMgPT0gLTEpKSB7CisJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMTsKKwl9CQkJLy93ZWxsLCB1c2VyIHdhbnQgbmV2ZXJlbmRpbmcKKwllbHNlIHsKKwkJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCX0KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlpZiAoZGV2cHJpdi0+YWlfdGltZXIxIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJZGV2cHJpdi0+YWlfdGltZXIxID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1BBQ0VSIHwgQ29udHJvbF9JUlFFTjsKKwkJaWYgKG1vZGUgPT0gMikgeworCQkJZGV2cHJpdi0+YWlfZXRfQ250cmxSZWcgPSBkZXZwcml2LT5DbnRybFJlZzsKKwkJCWRldnByaXYtPkNudHJsUmVnICY9CisJCQkJfihDb250cm9sX1BBQ0VSIHwgQ29udHJvbF9PTkVGSCB8IENvbnRyb2xfR0FURSk7CisJCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX0VYVDsKKwkJCWRldnByaXYtPmFpX2V0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmFpX2V0ID0gMDsKKwkJfQorCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZkZXZwcml2LT5haV90aW1lcjEsCisJCQlkZXZwcml2LT5haV9mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IE9TQyBiYXNlPSV1IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcj0ldVxuIiwgZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsIGRpdmlzb3IxLCBkaXZpc29yMiwgZGV2cHJpdi0+YWlfdGltZXIxKTsKKwkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOworCQlpZiAobW9kZSAhPSAyKSB7CisJCQkvLyBzdGFydCBwYWNlcgorCQkJc3RhcnRfcGFjZXIoZGV2LCBtb2RlLCBkaXZpc29yMSwgZGl2aXNvcjIpOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+YWlfZXRfZGl2MSA9IGRpdmlzb3IxOworCQkJZGV2cHJpdi0+YWlfZXRfZGl2MiA9IGRpdmlzb3IyOworCQl9CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9FWFQgfCBDb250cm9sX0lSUUVOOworCQlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CisJCWJyZWFrOworCX0KKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9haV9kb2NtZF9hbmRfbW9kZSguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBwY2kxNzF4X2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlydF9wcmludGsoImFkdl9wY2kxNzEwIGU9JWQgc3RhcnRzcmM9JXggc2NhbnNyYz0leCBjb252c3JjPSV4XG4iLCBlLAorCQljbWQtPnN0YXJ0X3NyYywgY21kLT5zY2FuX2JlZ2luX3NyYywgY21kLT5jb252ZXJ0X3NyYyk7CisJcnRfcHJpbnRrKCJhZHZfcGNpMTcxMCBlPSVkIHN0YXJ0YXJnPSVkIHNjYW5hcmc9JWQgY29udmFyZz0lZFxuIiwgZSwKKwkJY21kLT5zdGFydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+Y29udmVydF9hcmcpOworCXJ0X3ByaW50aygiYWR2X3BjaTE3MTAgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCisJCWNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlydF9wcmludGsoImFkdl9wY2kxNzEwIGU9JWQgc3RvcGFyZz0lZCBzY2FuZW5kYXJnPSVkIGNoYW5saXN0bGVuPSVkXG4iLAorCQllLCBjbWQtPnN0b3BfYXJnLCBjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOworfQorI2VuZGlmCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLilcbiIpOworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKwlwY2kxNzF4X2NtZHRlc3Rfb3V0KC0xLCBjbWQpOworI2VuZGlmCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENJMTcxWF9FWFRERUJVRworCQlwY2kxNzF4X2NtZHRlc3Rfb3V0KDEsIGNtZCk7CisjZW5kaWYKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTFcbiIsIGVycik7CisJCXJldHVybiAxOworCX0KKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX0NPVU5UOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKyNpZmRlZiBQQ0kxNzFYX0VYVERFQlVHCisJCXBjaTE3MXhfY21kdGVzdF9vdXQoMiwgY21kKTsKKyNlbmRpZgorCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfYWlfY21kdGVzdCguLi4pIGVycj0lZCByZXQ9MlxuIiwgZXJyKTsKKwkJcmV0dXJuIDI7CisJfQorCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19GT0xMT1cgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gdGhpc19ib2FyZC0+bl9haWNoYW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENJMTcxWF9FWFRERUJVRworCQlwY2kxNzF4X2NtZHRlc3Rfb3V0KDMsIGNtZCk7CisjZW5kaWYKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTNcbiIsIGVycik7CisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTRcbiIsIGVycik7CisJCXJldHVybiA0OworCX0KKworCS8qIHN0ZXAgNTogY29tcGxhaW4gYWJvdXQgc3BlY2lhbCBjaGFubGlzdCBjb25zaWRlcmF0aW9ucyAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LAorCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkKKwkJCXJldHVybiA1OwkvLyBpbmNvcnJlY3QgY2hhbm5lbHMgbGlzdAorCX0KKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLikgcmV0PTBcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWQoLi4uKVxuIik7CisJZGV2cHJpdi0+YWlfbl9jaGFuID0gY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+YWlfY2hhbmxpc3QgPSBjbWQtPmNoYW5saXN0OworCWRldnByaXYtPmFpX2ZsYWdzID0gY21kLT5mbGFnczsKKwlkZXZwcml2LT5haV9kYXRhX2xlbiA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKKwlkZXZwcml2LT5haV9kYXRhID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKKwlkZXZwcml2LT5haV90aW1lcjEgPSAwOworCWRldnByaXYtPmFpX3RpbWVyMiA9IDA7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zY2FucyA9IDA7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsJLy8gbW9kZSAxLCAyLCAzCisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsJLy8gbW9kZSAxIGFuZCAyCisJCQlkZXZwcml2LT5haV90aW1lcjEgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkJcmV0dXJuIHBjaTE3MXhfYWlfZG9jbWRfYW5kX21vZGUoY21kLT5zdGFydF9zcmMgPT0KKwkJCQlUUklHX0VYVCA/IDIgOiAxLCBkZXYsIHMpOworCQl9CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CS8vIG1vZGUgMworCQkJcmV0dXJuIHBjaTE3MXhfYWlfZG9jbWRfYW5kX21vZGUoMywgZGV2LCBzKTsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbGRlZCBjb3JyZWN0bHkKKyBJZiBpdCdzIG9rLCB0aGVuIHByb2dyYW0gc2Nhbi9nYWluIGxvZ2ljLgorIFRoaXMgd29ya3MgZm9yIGFsbCBjYXJkcy4KKyovCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCit7CisJdW5zaWduZWQgaW50IGNoYW5zZWdtZW50WzMyXTsKKwl1bnNpZ25lZCBpbnQgaSwgbm93bXVzdGJlY2hhbiwgc2VnbGVuLCBzZWdwb3M7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiAgY2hlY2tfY2hhbm5lbF9saXN0KC4uLiwlZClcbiIsIG5fY2hhbik7CisJLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCisJaWYgKG5fY2hhbiA8IDEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5fY2hhbiA+IDEpIHsKKwkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLy8gZmlyc3QgY2hhbm5lbCBpcyBldmVyeXRpbWUgb2sKKwkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IG5fY2hhbjsgaSsrLCBzZWdsZW4rKykgewkvLyBidWlsZCBwYXJ0IG9mIGNoYW5saXN0CisJCQkvLyBydF9wcmludGsoIiVkLiAlZCAlZFxuIixpLENSX0NIQU4oY2hhbmxpc3RbaV0pLENSX1JBTkdFKGNoYW5saXN0W2ldKSk7CisJCQlpZiAoY2hhbmxpc3RbMF0gPT0gY2hhbmxpc3RbaV0pCisJCQkJYnJlYWs7CS8vIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoCisJCQlpZiAoQ1JfQ0hBTihjaGFubGlzdFtpXSkgJiAxKQkvLyBvZGQgY2hhbm5lbCBjYW5uJ3QgYnkgZGlmZmVyZW5jaWFsCisJCQkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJIk9kZCBjaGFubmVsIGNhbid0IGJlIGRpZmZlcmVudGlhbCBpbnB1dCFcbiIpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlub3dtdXN0YmVjaGFuID0KKwkJCQkoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBzLT5uX2NoYW47CisJCQlpZiAoQ1JfQVJFRihjaGFuc2VnbWVudFtpIC0gMV0pID09IEFSRUZfRElGRikKKwkJCQlub3dtdXN0YmVjaGFuID0gKG5vd211c3RiZWNoYW4gKyAxKSAlIHMtPm5fY2hhbjsKKwkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8vIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW5vdXMgOi0oCisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY2hhbm5lbCBsaXN0IG11c3QgYmUgY29udGlub3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAorCQkJCQlpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwgbm93bXVzdGJlY2hhbiwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFswXSkpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJY2hhbnNlZ21lbnRbaV0gPSBjaGFubGlzdFtpXTsJLy8gd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0CisJCX0KKworCQlmb3IgKGkgPSAwLCBzZWdwb3MgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gY2hlY2sgd2hvbGUgY2hhbmxpc3QKKwkJCS8vcnRfcHJpbnRrKCIlZCAlZD0lZCAlZFxuIixDUl9DSEFOKGNoYW5zZWdtZW50W2klc2VnbGVuXSksQ1JfUkFOR0UoY2hhbnNlZ21lbnRbaSVzZWdsZW5dKSxDUl9DSEFOKGNoYW5saXN0W2ldKSxDUl9SQU5HRShjaGFubGlzdFtpXSkpOworCQkJaWYgKGNoYW5saXN0W2ldICE9IGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiYmFkIGNoYW5uZWwsIHJlZmVyZW5jZSBvciByYW5nZSBudW1iZXIhIGNoYW5saXN0WyVpXT0lZCwlZCwlZCBhbmQgbm90ICVkLCVkLCVkIVxuIiwKKwkJCQkJaSwgQ1JfQ0hBTihjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX1JBTkdFKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX0NIQU4oY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9SQU5HRShjaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaSAlIHNlZ2xlbl0pKTsKKwkJCQlyZXR1cm4gMDsJLy8gY2hhbi9nYWluIGxpc3QgaXMgc3RyYW5nZQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc2VnbGVuID0gMTsKKwl9CisJcmV0dXJuIHNlZ2xlbjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgcmFuZ2UsIGNoYW5wcm9nOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogIHNldHVwX2NoYW5uZWxfbGlzdCguLi4sJWQsJWQpXG4iLCBuX2NoYW4sCisJCXNlZ2xlbik7CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X2xlbiA9IHNlZ2xlbjsKKwlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKworCURQUklOVEsoIlNlZ0xlbjogJWRcbiIsIHNlZ2xlbik7CisJZm9yIChpID0gMDsgaSA8IHNlZ2xlbjsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQljaGFucHJvZyA9IG11eG9uZWNoYW5bQ1JfQ0hBTihjaGFubGlzdFtpXSldOworCQlvdXR3KGNoYW5wcm9nLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgKi8KKwkJcmFuZ2UgPSB0aGlzX2JvYXJkLT5yYW5nZWNvZGVfYWlbQ1JfUkFOR0UoY2hhbmxpc3RbaV0pXTsKKwkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikKKwkJCXJhbmdlIHw9IDB4MDAyMDsKKwkJb3V0dyhyYW5nZSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1JBTkdFKTsJLyogc2VsZWN0IGdhaW4gKi8KKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2ldID0KKwkJCShDUl9DSEFOKGNoYW5saXN0W2ldKSA8PCAxMikgJiAweGYwMDA7CisjZW5kaWYKKwkJRFBSSU5USygiR1M6ICUyZC4gWyU0eF09JTR4ICU0eFxuIiwgaSwgY2hhbnByb2csIHJhbmdlLAorCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2ldKTsKKwl9CisKKwlkZXZwcml2LT5haV9ldF9NdXhWYWwgPQorCQlDUl9DSEFOKGNoYW5saXN0WzBdKSB8IChDUl9DSEFOKGNoYW5saXN0W3NlZ2xlbiAtIDFdKSA8PCA4KTsKKwlvdXR3KGRldnByaXYtPmFpX2V0X011eFZhbCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7CS8qIHNlbGVjdCBjaGFubmVsIGludGVydmFsIHRvIHNjYW4gKi8KKwlEUFJJTlRLKCJNVVg6ICU0eCBMJTR4LkglNHhcbiIsCisJCUNSX0NIQU4oY2hhbmxpc3RbMF0pIHwgKENSX0NIQU4oY2hhbmxpc3Rbc2VnbGVuIC0gMV0pIDw8IDgpLAorCQlDUl9DSEFOKGNoYW5saXN0WzBdKSwgQ1JfQ0hBTihjaGFubGlzdFtzZWdsZW4gLSAxXSkpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogc3RhcnRfcGFjZXIoJWQsJXUsJXUpXG4iLCBtb2RlLAorCQlkaXZpc29yMSwgZGl2aXNvcjIpOworCW91dHcoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCW91dHcoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCisJaWYgKG1vZGUgPT0gMSkgeworCQlvdXR3KGRpdmlzb3IyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDIpOworCQlvdXR3KChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQyKTsKKwkJb3V0dyhkaXZpc29yMSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQxKTsKKwkJb3V0dygoZGl2aXNvcjEgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMSk7CisJfQorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogc3RhcnRfcGFjZXIoLi4uKVxuIik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NhbmNlbCguLi4pXG4iKTsKKworCXN3aXRjaCAodGhpc19ib2FyZC0+Y2FyZHR5cGUpIHsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5DbnRybFJlZyAmPSBDb250cm9sX0NOVDA7CisJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfU1c7CisKKwkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOwkvLyByZXNldCBhbnkgb3BlcmF0aW9ucworCQlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisJCWJyZWFrOworCX0KKworCWRldnByaXYtPmFpX2RvID0gMDsKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT5haV9idWZfcHRyID0gMDsKKwlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MXhfYWlfY2FuY2VsKC4uLilcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9yZXNldCguLi4pXG4iKTsKKwlvdXR3KDB4MzAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKwlkZXZwcml2LT5DbnRybFJlZyA9IENvbnRyb2xfU1cgfCBDb250cm9sX0NOVDA7CS8vIFNvZnR3YXJlIHRyaWdnZXIsIENOVDA9ZXh0ZXJuYWwKKwlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CS8vIHJlc2V0IGFueSBvcGVyYXRpb25zCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CS8vIGNsZWFyIEZJRk8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOwkvLyBjbGVhciBJTlQgcmVxdWVzdAorCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIDgyNTQKKwlkZXZwcml2LT5kYV9yYW5nZXMgPSAwOworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlvdXRiKGRldnByaXYtPmRhX3JhbmdlcywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RBUkVGKTsJLy8gc2V0IERBQ3MgdG8gMC4uNVYKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREExKTsJLy8gc2V0IERBIG91dHB1dHMgdG8gMFYKKwkJZGV2cHJpdi0+YW9fZGF0YVswXSA9IDB4MDAwMDsKKwkJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuID4gMSkgeworCQkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREEyKTsKKwkJCWRldnByaXYtPmFvX2RhdGFbMV0gPSAweDAwMDA7CisJCX0KKwl9CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfRE8pOwkvLyBkaWdpdGFsIG91dHB1dHMgdG8gMAorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOwkvLyBjbGVhciBGSUZPCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLy8gY2xlYXIgSU5UIHJlcXVlc3QKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9yZXNldCguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyMF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MjBfcmVzZXQoLi4uKVxuIik7CisJb3V0YihTeW5jb250X1NDMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX1NZTkNPTlQpOwkvLyBzZXQgc3luY2hyb25vdXMgb3V0cHV0IG1vZGUKKwlkZXZwcml2LT5kYV9yYW5nZXMgPSAweEFBOworCW91dGIoZGV2cHJpdi0+ZGFfcmFuZ2VzLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfUkFOR0UpOwkvLyBzZXQgYWxsIHJhbmdlcyB0byArLy01VgorCW91dHcoMHgwODAwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfREEwKTsJLy8gc2V0IG91dHB1dHMgdG8gMFYKKwlvdXR3KDB4MDgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX0RBMSk7CisJb3V0dygweDA4MDAsIGRldi0+aW9iYXNlICsgUENJMTcyMF9EQTIpOworCW91dHcoMHgwODAwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfREEzKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcyMF9TWU5DT1VUKTsJLy8gdXBkYXRlIG91dHB1dHMKKwlkZXZwcml2LT5hb19kYXRhWzBdID0gMHgwODAwOworCWRldnByaXYtPmFvX2RhdGFbMV0gPSAweDA4MDA7CisJZGV2cHJpdi0+YW9fZGF0YVsyXSA9IDB4MDgwMDsKKwlkZXZwcml2LT5hb19kYXRhWzNdID0gMHgwODAwOworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcyMF9yZXNldCguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxMF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MTBfcmVzZXQoLi4uKVxuIik7CisJc3dpdGNoICh0aGlzX2JvYXJkLT5jYXJkdHlwZSkgeworCWNhc2UgVFlQRV9QQ0kxNzIwOgorCQlyZXR1cm4gcGNpMTcyMF9yZXNldChkZXYpOworCWRlZmF1bHQ6CisJCXJldHVybiBwY2kxNzF4X3Jlc2V0KGRldik7CisJfQorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxMF9yZXNldCguLi4pXG4iKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldCwgc3ViZGV2LCBuX3N1YmRldmljZXM7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBvcHRfYnVzLCBvcHRfc2xvdDsKKwljb25zdCBjaGFyICplcnJzdHI7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmM7CisJaW50IGk7CisJaW50IGJvYXJkX2luZGV4OworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaTE3MTA6ICIsIGRldi0+bWlub3IpOworCisJb3B0X2J1cyA9IGl0LT5vcHRpb25zWzBdOworCW9wdF9zbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIgLSBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBMb29rIGZvciBtYXRjaGluZyBQQ0kgZGV2aWNlICovCisJZXJyc3RyID0gIm5vdCBmb3VuZCEiOworCXBjaWRldiA9IE5VTEw7CisJYm9hcmRfaW5kZXggPSB0aGlzX2JvYXJkIC0gYm9hcmR0eXBlczsKKwl3aGlsZSAoTlVMTCAhPSAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsCisJCVBDSV9BTllfSUQsIHBjaWRldikpKSB7CisJCWlmKHN0cmNtcCh0aGlzX2JvYXJkLT5uYW1lLCBEUlZfTkFNRSkgPT0gMCkKKwkJeworCQkJZm9yKGkgPSAwOyBpIDwgbl9ib2FyZHR5cGVzOyArK2kpCisJCQl7CisJCQkJaWYocGNpZGV2LT5kZXZpY2UgPT0gYm9hcmR0eXBlc1tpXS5kZXZpY2VfaWQpCisJCQkJeworCQkJCQlib2FyZF9pbmRleCA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmKGkgPT0gbl9ib2FyZHR5cGVzKSBjb250aW51ZTsKKwkJfWVsc2UKKwkJeworCQkJaWYocGNpZGV2LT5kZXZpY2UgIT0gYm9hcmR0eXBlc1tib2FyZF9pbmRleF0uZGV2aWNlX2lkKSBjb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIG1hdGNoaW5nIHZlbmRvci9kZXZpY2UuICovCisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQkvKiBDaGVjayBidXMvc2xvdC4gKi8KKwkJCWlmIChvcHRfYnVzICE9IHBjaWRldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBvcHRfc2xvdCAhPSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsJLyogbm8gbWF0Y2ggKi8KKwkJfQorCQkvKgorCQkqIExvb2sgZm9yIGRldmljZSB0aGF0IGlzbid0IGluIHVzZS4KKwkJKiBFbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zLgorCQkqLworCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBEUlZfTkFNRSkpIHsKKwkJCWVycnN0ciA9ICJmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyEiOworCQkJY29udGludWU7CisJCX0KKwkJLy8gZml4dXAgYm9hcmRfcHRyIGluIGNhc2Ugd2Ugd2VyZSB1c2luZyB0aGUgZHVtbXkgZW50cnkgd2l0aCB0aGUgZHJpdmVyIG5hbWUKKwkJZGV2LT5ib2FyZF9wdHIgPSAmYm9hcmR0eXBlc1tib2FyZF9pbmRleF07CisJCWJyZWFrOworCX0KKworCWlmICghcGNpZGV2KSB7CisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgYXQgYjpzICVkOiVkICVzXG4iLAorCQkJCW9wdF9idXMsIG9wdF9zbG90LCBlcnJzdHIpOworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkICVzXG4iLCBlcnJzdHIpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCXBjaV9zbG90ID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CisJcGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwlpcnEgPSBwY2lkZXYtPmlycTsKKwlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCXJ0X3ByaW50aygiLCBiOnM6Zj0lZDolZDolZCwgaW89MHglNGx4IiwgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jLAorCQlpb2Jhc2UpOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCWRldnByaXYtPnBjaWRldiA9IHBjaWRldjsKKworCW5fc3ViZGV2aWNlcyA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4pCisJCW5fc3ViZGV2aWNlcysrOworCWlmICh0aGlzX2JvYXJkLT5uX2RpY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fZG9jaGFuKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9jb3VudGVyKQorCQluX3N1YmRldmljZXMrKzsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkgeworCQlydF9wcmludGsoIiAtIEFsbG9jYXRpb24gZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpMTcxMF9yZXNldChkZXYpOworCisJaWYgKHRoaXNfYm9hcmQtPmhhdmVfaXJxKSB7CisJCWlmIChpcnEpIHsKKwkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfc2VydmljZV9wY2kxNzEwLAorCQkJCQlJUlFGX1NIQVJFRCwgIkFkdmFudGVjaCBQQ0ktMTcxMCIsCisJCQkJCWRldikpIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJWQsIERJU0FCTElORyBJVCIsCisJCQkJCWlycSk7CisJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJfSBlbHNlIHsKKwkJCQlydF9wcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJ0X3ByaW50aygiLCBJUlEgZGlzYWJsZWQiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlycSA9IDA7CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisKKwlwcmludGsoIi5cbiIpOworCisJc3ViZGV2ID0gMDsKKworCWlmICh0aGlzX2JvYXJkLT5uX2FpY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ09NTU9OIHwgU0RGX0dST1VORDsKKwkJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuZCkKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5haV9tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYWk7CisJCXMtPmNhbmNlbCA9IHBjaTE3MXhfYWlfY2FuY2VsOworCQlzLT5pbnNuX3JlYWQgPSBwY2kxNzF4X2luc25fcmVhZF9haTsKKwkJaWYgKGlycSkgeworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJCXMtPmRvX2NtZHRlc3QgPSBwY2kxNzF4X2FpX2NtZHRlc3Q7CisJCQlzLT5kb19jbWQgPSBwY2kxNzF4X2FpX2NtZDsKKwkJfQorCQlkZXZwcml2LT5pODI1NF9vc2NfYmFzZSA9IDEwMDsJLy8gMTAwbnM9MTBNSHoKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YW9fbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FvOworCQlzd2l0Y2ggKHRoaXNfYm9hcmQtPmNhcmR0eXBlKSB7CisJCWNhc2UgVFlQRV9QQ0kxNzIwOgorCQkJcy0+aW5zbl93cml0ZSA9IHBjaTE3MjBfaW5zbl93cml0ZV9hbzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcy0+aW5zbl93cml0ZSA9IHBjaTE3MXhfaW5zbl93cml0ZV9hbzsKKwkJCWJyZWFrOworCQl9CisJCXMtPmluc25fcmVhZCA9IHBjaTE3MXhfaW5zbl9yZWFkX2FvOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kaWNoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW9fYml0cyA9IDA7CS8qIGFsbCBiaXRzIGlucHV0ICovCisJCXMtPmluc25fYml0cyA9IHBjaTE3MXhfaW5zbl9iaXRzX2RpOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+bl9kb2NoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW9fYml0cyA9ICgxIDw8IHRoaXNfYm9hcmQtPm5fZG9jaGFuKSAtIDE7CS8qIGFsbCBiaXRzIG91dHB1dCAqLworCQlzLT5zdGF0ZSA9IDA7CisJCXMtPmluc25fYml0cyA9IHBjaTE3MXhfaW5zbl9iaXRzX2RvOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+bl9jb3VudGVyKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fY291bnRlcjsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9jb3VudGVyOworCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQlzLT5pbnNuX3JlYWQgPSBwY2kxNzF4X2luc25fY291bnRlcl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gcGNpMTcxeF9pbnNuX2NvdW50ZXJfd3JpdGU7CisJCXMtPmluc25fY29uZmlnID0gcGNpMTcxeF9pbnNuX2NvdW50ZXJfY29uZmlnOworCQlzdWJkZXYrKzsKKwl9CisKKwlkZXZwcml2LT52YWxpZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT52YWxpZCkKKwkJCXBjaTE3MTBfcmVzZXQoZGV2KTsKKwkJaWYgKGRldi0+aXJxKQorCQkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlpZiAoZGV2cHJpdi0+cGNpZGV2KSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaWRldik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTE3MTAsIHBjaTE3MTBfcGNpX3RhYmxlKTsKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcyMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjdlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYwpAQCAtMCwwICsxLDQ2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIGNvbWVkaS9kcml2ZXJzL3BjaTE3MjMuYworCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorRHJpdmVyOiBhZHZfcGNpMTcyMworRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTcyMworQXV0aG9yOiB5b25nZ2FuZyA8cnNtZ251QGdtYWlsLmNvbT4sIElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MjMgKGFkdl9wY2kxNzIzKQorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxNToxMjo1NiArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKworICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorCitTdWJkZXZpY2UgMCBpcyA4LWNoYW5uZWwgQU8sIDE2LWJpdCwgcmFuZ2UgKy8tIDEwIFYuCisKK1N1YmRldmljZSAxIGlzIDE2LWNoYW5uZWwgRElPLiAgVGhlIGNoYW5uZWxzIGFyZSBjb25maWd1cmFibGUgYXMgaW5wdXQgb3IKK291dHB1dCBpbiAyIGdyb3VwcyAoMCB0byA3LCA4IHRvIDE1KS4gIENvbmZpZ3VyaW5nIGFueSBjaGFubmVsIGltcGxpY2l0bHkKK2NvbmZpZ3VyZXMgYWxsIGNoYW5uZWxzIGluIHRoZSBzYW1lIGdyb3VwLgorCitUT0RPOgorCisxLiBBZGQgdGhlIHR3byBtaWxsaWFtcCByYW5nZXMgdG8gdGhlIEFPIHN1YmRldmljZSAoMCB0byAyMCBtQSwgNCB0byAyMCBtQSkuCisyLiBSZWFkIHRoZSBpbml0aWFsIHJhbmdlcyBhbmQgdmFsdWVzIG9mIHRoZSBBTyBzdWJkZXZpY2UgYXQgc3RhcnQtdXAgaW5zdGVhZAorICAgb2YgcmVpbml0aWFsaXppbmcgdGhlbS4KKzMuIEltcGxlbWVudCBjYWxpYnJhdGlvbi4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBBRFZBTlRFQ0hfVkVORE9SICAgICAgICAweDEzZmUJLyogQWR2YW50ZWNoIFBDSSB2ZW5kb3IgSUQgKi8KKworLy8gaGFyZHdhcmUgdHlwZXMgb2YgdGhlIGNhcmRzCisjZGVmaW5lIFRZUEVfUENJMTcyMyAwCisKKyNkZWZpbmUgSU9SQU5HRV8xNzIzICAweDJBCisKKy8qIGFsbCB0aGUgcmVnaXN0ZXJzIGZvciB0aGUgcGNpMTcyMyBib2FyZCAqLworI2RlZmluZSBQQ0kxNzIzX0RBKE4pICAgKChOKTw8MSkJLyogVzogICBEL0EgcmVnaXN0ZXIgTiAoMCB0byA3KSAqLworCisjZGVmaW5lIFBDSTE3MjNfU1lOX1NFVCAgMHgxMgkvKnN5bmNocm9uaXplZCBzZXQgcmVnaXN0ZXIgICAgICAgKi8KKyNkZWZpbmUgUENJMTcyM19BTExfQ0hOTkVMRV9TWU5fU1RST0JFICAweDEyCS8qc3luY2hyb25pemVkIHN0YXR1cyByZWdpc3RlciAgICAqLworCisjZGVmaW5lIFBDSTE3MjNfUkFOR0VfQ0FMSUJSQVRJT05fTU9ERSAweDE0CS8qIHJhbmdlIGFuZCBjYWxpYnJhdGlvbiBtb2RlICAgKi8KKyNkZWZpbmUgUENJMTcyM19SQU5HRV9DQUxJQlJBVElPTl9TVEFUVVMgMHgxNAkvKiByYW5nZSBhbmQgY2FsaWJyYXRpb24gc3RhdHVzICovCisKKyNkZWZpbmUgUENJMTcyM19DT05UUk9MX0NNRF9DQUxJQlJBVElPTl9GVU4gMHgxNgkvKiBTQURDIGNvbnRyb2wgY29tbWFuZCBmb3IgY2FsaWJyYXRpb24gZnVuY3Rpb24gKi8KKyNkZWZpbmUgUENJMTcyM19TVEFUVVNfQ01EX0NBTElCUkFUSU9OX0ZVTiAweDE2CS8qIFNBREMgY29udHJvbCBzdGF0dXMgZm9yIGNhbGlicmF0aW9uIGZ1bmN0aW9uICovCisKKyNkZWZpbmUgUENJMTcyM19DQUxJQlJBVElPTl9QQVJBX1NUUk9CRSAweDE4CS8qIENhbGlicmF0aW9uIHBhcmFtZXRlciBzdHJvYmUgKi8KKworI2RlZmluZSBQQ0kxNzIzX0RJR0lUQUxfSU9fUE9SVF9TRVQgMHgxQQkvKiBEaWdpdGFsIEkvTyBwb3J0IHNldHRpbmcgKi8KKyNkZWZpbmUgUENJMTcyM19ESUdJVEFMX0lPX1BPUlRfTU9ERSAweDFBCS8qIERpZ2l0YWwgSS9PIHBvcnQgbW9kZSAqLworCisjZGVmaW5lIFBDSTE3MjNfV1JJVEVfRElHSVRBTF9PVVRQVVRfQ01EIDB4MUMJLyogV3JpdGUgZGlnaXRhbCBvdXRwdXQgY29tbWFuZCAqLworI2RlZmluZSBQQ0kxNzIzX1JFQURfRElHSVRBTF9JTlBVVF9EQVRBIDB4MUMJLyogUmVhZCBkaWdpdGFsIGlucHV0IGRhdGEgKi8KKworI2RlZmluZSBQQ0kxNzIzX1dSSVRFX0NBTF9DTUQgMHgxRQkvKiBXcml0ZSBjYWxpYnJhdGlvbiBjb21tYW5kICovCisjZGVmaW5lIFBDSTE3MjNfUkVBRF9DQUxfU1RBVFVTIDB4MUUJLyogUmVhZCBjYWxpYnJhdGlvbiBzdGF0dXMgKi8KKworI2RlZmluZSBQQ0kxNzIzX1NZTl9TVFJPQkUgMHgyMAkvKiBTeW5jaHJvbml6ZWQgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19SRVNFVF9BTExfQ0hOX1NUUk9CRSAweDIyCS8qIFJlc2V0IGFsbCBEL0EgY2hhbm5lbHMgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19SRVNFVF9DQUxfQ09OVFJPTF9TVFJPQkUgMHgyNAkvKiBSZXNldCB0aGUgY2FsaWJyYXRpb24gY29udHJvbGxlciBzdHJvYmUgKi8KKworI2RlZmluZSBQQ0kxNzIzX0NIQU5HRV9DSEFfT1VUUFVUX1RZUEVfU1RST0JFIDB4MjYJLyogQ2hhbmdlIEQvQSBjaGFubmVscyBvdXRwdXQgdHlwZSBzdHJvYmUgKi8KKworI2RlZmluZSBQQ0kxNzIzX1NFTEVDVF9DQUxJQlJBVElPTiAweDI4CS8qIFNlbGVjdCB0aGUgY2FsaWJyYXRpb24gUmVmX1YgKi8KKworLy9zdGF0aWMgdW5zaWduZWQgc2hvcnQgcGNpX2xpc3RfYnVpbGRlZD0wOyAgICAgLyo9MSBsaXN0IG9mIGNhcmQgaXMga25vdyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMTcyMyA9IHsgMSwgeworCQkJQklQX1JBTkdFKDEwKQorCX0KK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHBjaTE3MjMgYm9hcmRzLgorICovCitzdHJ1Y3QgcGNpMTcyM19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdmVuZG9yX2lkOwkJLy8gUENJIHZlbmRvciBhIGRldmljZSBJRCBvZiBjYXJkCisJaW50IGRldmljZV9pZDsKKwlpbnQgaW9yYW5nZTsKKwljaGFyIGNhcmR0eXBlOworCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEL0EgY2hhbnMKKwlpbnQgbl9kaW9jaGFuOwkJLy8gbnVtIG9mIERJTyBjaGFucworCWludCBhb19tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBEL0EKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2kxNzIzX2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaTE3MjMiLAorCSAgICAgIHZlbmRvcl9pZDpBRFZBTlRFQ0hfVkVORE9SLAorCSAgICAgIGRldmljZV9pZDoweDE3MjMsCisJICAgICAgaW9yYW5nZToJSU9SQU5HRV8xNzIzLAorCSAgICAgIGNhcmR0eXBlOlRZUEVfUENJMTcyMywKKwkgICAgICBuX2FvY2hhbjo4LAorCSAgICAgIG5fZGlvY2hhbjoxNiwKKwkgICAgICBhb19tYXhkYXRhOjB4ZmZmZiwKKwkgICAgICByYW5nZWxpc3RfYW86JnJhbmdlX3BjaTE3MjMsCisJCX0sCit9OworCisvKiBUaGlzIGlzIHVzZWQgYnkgbW9kcHJvYmUgdG8gdHJhbnNsYXRlIFBDSSBJRHMgdG8gZHJpdmVycy4gIFNob3VsZAorICogb25seSBiZSB1c2VkIGZvciBQQ0kgYW5kIElTQS1QblAgZGV2aWNlcyAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTE3MjNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTcyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpMTcyM19wY2lfdGFibGUpOworCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY2kxNzIzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaTE3MjNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjaTE3MjNfYm9hcmQpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaTE3MjMgPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWR2X3BjaTE3MjMiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTE3MjNfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaTE3MjNfZGV0YWNoLAorfTsKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAqLworc3RydWN0IHBjaTE3MjNfcHJpdmF0ZSB7CisJaW50IHZhbGlkOwkJLy9jYXJkIGlzIHVzYWJsZTsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgY2hhciBkYV9yYW5nZVs4XTsJLy8gRC9BIG91dHB1dCByYW5nZSBmb3IgZWFjaCBjaGFubmVsCisKKwlzaG9ydCBhb19kYXRhWzhdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKK307CisKKy8qdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMTcyM19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisjZGVmaW5lIHRoaXNfYm9hcmQgYm9hcmR0eXBlcworCisvKgorICogICB0aGUgcGNpMTcyMyBjYXJkIHJlc2V0OworICovCitzdGF0aWMgaW50IHBjaTE3MjNfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJRFBSSU5USygiYWR2X3BjaTE3MjMgRURCRzogQkdOOiBwY2kxNzIzX3Jlc2V0KC4uLilcbiIpOworCisJb3V0dygweDAxLCBkZXYtPmlvYmFzZSArIFBDSTE3MjNfU1lOX1NFVCk7CS8vIHNldCBzeW5jaHJvbm91cyBvdXRwdXQgbW9kZQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvLyBzZXQgYWxsIG91dHB1dHMgdG8gMFYKKwkJZGV2cHJpdi0+YW9fZGF0YVtpXSA9IDB4ODAwMDsKKwkJb3V0dyhkZXZwcml2LT5hb19kYXRhW2ldLCBkZXYtPmlvYmFzZSArIFBDSTE3MjNfREEoaSkpOworCQkvLyBzZXQgYWxsIHJhbmdlcyB0byArLy0gMTBWCisJCWRldnByaXYtPmRhX3JhbmdlW2ldID0gMDsKKwkJb3V0dygoKGRldnByaXYtPmRhX3JhbmdlW2ldIDw8IDQpIHwgaSksCisJCQlQQ0kxNzIzX1JBTkdFX0NBTElCUkFUSU9OX01PREUpOworCX0KKworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX0NIQU5HRV9DSEFfT1VUUFVUX1RZUEVfU1RST0JFKTsJLy8gdXBkYXRlIHJhbmdlcworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1NZTl9TVFJPQkUpOwkvLyB1cGRhdGUgb3V0cHV0cworCisJLy8gc2V0IGFzeW5jaHJvbm91cyBvdXRwdXQgbW9kZQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1NZTl9TRVQpOworCisJRFBSSU5USygiYWR2X3BjaTE3MjMgRURCRzogRU5EOiBwY2kxNzIzX3Jlc2V0KC4uLilcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTE3MjNfaW5zbl9yZWFkX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEUFJJTlRLKCIgYWR2X1BDSTE3MjMgREVCVUc6IHBjaTE3MjNfaW5zbl9yZWFkX2FvKCkgLS0tLS0gXG4iKTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fZGF0YVtjaGFuXTsKKworCXJldHVybiBuOworfQorCisvKgorICBhbmFsb2cgZGF0YSBvdXRwdXQ7CisqLworc3RhdGljIGludCBwY2kxNzIzX2FvX3dyaXRlX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlEUFJJTlRLKCJQQ0kxNzIzOiB0aGUgcGNpMTcyM19hb193cml0ZV93aW5zbigpIC0tLS0tLVxuIik7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisKKwkJZGV2cHJpdi0+YW9fZGF0YVtjaGFuXSA9IGRhdGFbbl07CisJCW91dHcoZGF0YVtuXSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX0RBKGNoYW4pKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAgZGlnaXRhbCBpL28gY29uZmlnL3F1ZXJ5CisqLworc3RhdGljIGludCBwY2kxNzIzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IGJpdHM7CisJdW5zaWduZWQgc2hvcnQgZGlvX21vZGU7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIDB4MDBGRikgeworCQliaXRzID0gMHgwMEZGOworCX0gZWxzZSB7CisJCWJpdHMgPSAweEZGMDA7CisJfQorCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5iaXRzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIGJpdHMpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLy8gdXBkYXRlIGhhcmR3YXJlIERJTyBtb2RlCisJZGlvX21vZGUgPSAweDAwMDA7CS8vIGxvdyBieXRlIG91dHB1dCwgaGlnaCBieXRlIG91dHB1dAorCWlmICgocy0+aW9fYml0cyAmIDB4MDBGRikgPT0gMCkKKwkJZGlvX21vZGUgfD0gMHgwMDAxOwkvLyBsb3cgYnl0ZSBpbnB1dAorCWlmICgocy0+aW9fYml0cyAmIDB4RkYwMCkgPT0gMCkKKwkJZGlvX21vZGUgfD0gMHgwMDAyOwkvLyBoaWdoIGJ5dGUgaW5wdXQKKwlvdXR3KGRpb19tb2RlLCBkZXYtPmlvYmFzZSArIFBDSTE3MjNfRElHSVRBTF9JT19QT1JUX1NFVCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgIGRpZ2l0YWwgaS9vIGJpdHMgcmVhZC93cml0ZQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyM19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1dSSVRFX0RJR0lUQUxfT1VUUFVUX0NNRCk7CisJfQorCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1JFQURfRElHSVRBTF9JTlBVVF9EQVRBKTsKKwlyZXR1cm4gMjsKK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwY2kxNzIzIGJvYXJkLgorICovCitzdGF0aWMgaW50IHBjaTE3MjNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQsIHN1YmRldiwgbl9zdWJkZXZpY2VzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgaW50IGlvYmFzZTsKKwl1bnNpZ25lZCBjaGFyIHBjaV9idXMsIHBjaV9zbG90LCBwY2lfZnVuYzsKKwlpbnQgb3B0X2J1cywgb3B0X3Nsb3Q7CisJY29uc3QgY2hhciAqZXJyc3RyOworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaTE3MjM6IGJvYXJkPSVzIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSk7CisKKwlvcHRfYnVzID0gaXQtPm9wdGlvbnNbMF07CisJb3B0X3Nsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNpMTcyM19wcml2YXRlKSkpIDwgMCkgeworCQlydF9wcmludGsoIiAtIEFsbG9jYXRpb24gZmFpbGVkIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UgKi8KKwllcnJzdHIgPSAibm90IGZvdW5kISI7CisJcGNpZGV2ID0gTlVMTDsKKwl3aGlsZSAoTlVMTCAhPSAocGNpZGV2ID0KKwkJCXBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQURWQU5URUNILAorCQkJCXRoaXNfYm9hcmQtPmRldmljZV9pZCwgcGNpZGV2KSkpIHsKKwkJLyogRm91bmQgbWF0Y2hpbmcgdmVuZG9yL2RldmljZS4gKi8KKwkJaWYgKG9wdF9idXMgfHwgb3B0X3Nsb3QpIHsKKwkJCS8qIENoZWNrIGJ1cy9zbG90LiAqLworCQkJaWYgKG9wdF9idXMgIT0gcGNpZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IG9wdF9zbG90ICE9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOwkvKiBubyBtYXRjaCAqLworCQl9CisJCS8qCisJCSAqIExvb2sgZm9yIGRldmljZSB0aGF0IGlzbid0IGluIHVzZS4KKwkJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy4KKwkJICovCisJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJhZHZfcGNpMTcyMyIpKSB7CisJCQllcnJzdHIgPSAiZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhIjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmICghcGNpZGV2KSB7CisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgYXQgYjpzICVkOiVkICVzXG4iLAorCQkJCW9wdF9idXMsIG9wdF9zbG90LCBlcnJzdHIpOworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkICVzXG4iLCBlcnJzdHIpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCXBjaV9zbG90ID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CisJcGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCXJ0X3ByaW50aygiLCBiOnM6Zj0lZDolZDolZCwgaW89MHglNHgiLCBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmMsCisJCWlvYmFzZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJZGV2cHJpdi0+cGNpZGV2ID0gcGNpZGV2OworCisJbl9zdWJkZXZpY2VzID0gMDsKKworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fZGlvY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIgLSBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBjaTE3MjNfcmVzZXQoZGV2KTsKKwlzdWJkZXYgPSAwOworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFvX21heGRhdGE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlbGlzdF9hbzsKKworCQlzLT5pbnNuX3dyaXRlID0gcGNpMTcyM19hb193cml0ZV93aW5zbjsKKwkJcy0+aW5zbl9yZWFkID0gcGNpMTcyM19pbnNuX3JlYWRfYW87CisKKwkJLy8gcmVhZCBESU8gY29uZmlnCisJCXN3aXRjaCAoaW53KGRldi0+aW9iYXNlICsgUENJMTcyM19ESUdJVEFMX0lPX1BPUlRfTU9ERSkgJiAweDAzKSB7CisJCWNhc2UgMHgwMDoJLy8gbG93IGJ5dGUgb3V0cHV0LCBoaWdoIGJ5dGUgb3V0cHV0CisJCQlzLT5pb19iaXRzID0gMHhGRkZGOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMToJLy8gbG93IGJ5dGUgaW5wdXQsIGhpZ2ggYnl0ZSBvdXRwdXQKKwkJCXMtPmlvX2JpdHMgPSAweEZGMDA7CisJCQlicmVhazsKKwkJY2FzZSAweDAyOgkvLyBsb3cgYnl0ZSBvdXRwdXQsIGhpZ2ggYnl0ZSBpbnB1dAorCQkJcy0+aW9fYml0cyA9IDB4MDBGRjsKKwkJCWJyZWFrOworCQljYXNlIDB4MDM6CS8vIGxvdyBieXRlIGlucHV0LCBoaWdoIGJ5dGUgaW5wdXQKKwkJCXMtPmlvX2JpdHMgPSAweDAwMDA7CisJCQlicmVhazsKKwkJfQorCQkvLyByZWFkIERJTyBwb3J0IHN0YXRlCisJCXMtPnN0YXRlID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcyM19SRUFEX0RJR0lUQUxfSU5QVVRfREFUQSk7CisKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fZGlvY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZGlvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGlvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9jb25maWcgPSBwY2kxNzIzX2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gcGNpMTcyM19kaW9faW5zbl9iaXRzOworCQlzdWJkZXYrKzsKKwl9CisKKwlkZXZwcml2LT52YWxpZCA9IDE7CisKKwlwY2kxNzIzX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2kxNzIzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2kxNzIzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpCisJCQlwY2kxNzIzX3Jlc2V0KGRldik7CisKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTE3MjMsIHBjaTE3MjNfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwNDQyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCkBAIC0wLDAgKzEsMTA3NyBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyAqICBIYXJkd2FyZSBkcml2ZXIgZm9yIEFkdmFudGVjaCBQQ0kgRElPIGNhcmRzLgorKi8KKy8qCitEcml2ZXI6IGFkdl9wY2lfZGlvCitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDSS0xNzMwLCBQQ0ktMTczMywgUENJLTE3MzQsIFBDSS0xNzM2VVAsCisgICAgICAgICAgICAgUENJLTE3NTAsIFBDSS0xNzUxLCBQQ0ktMTc1MiwgUENJLTE3NTMvRSwgUENJLTE3NTQsCisgICAgICAgICAgICAgUENJLTE3NTYsIFBDSS0xNzYyCitBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MzAgKGFkdl9wY2lfZGlvKSwgUENJLTE3MzMsCisgIFBDSS0xNzM0LCBQQ0ktMTczNlVQLCBQQ0ktMTc1MCwKKyAgUENJLTE3NTEsIFBDSS0xNzUyLCBQQ0ktMTc1MywKKyAgUENJLTE3NTMrUENJLTE3NTNFLCBQQ0ktMTc1NCwgUENJLTE3NTYsCisgIFBDSS0xNzYwLCBQQ0ktMTc2MgorU3RhdHVzOiB1bnRlc3RlZAorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxMDo0MzowOCArMDEwMAorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBub3cgb25seSBpbnNuIGludGVyZmFjZSBmb3IgREkvRE8vRElPLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQorICAgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjdW5kZWYgUENJX0RJT19FWFRERUJVRwkJLyogaWYgZGVmaW5lZCwgZW5hYmxlIGV4dGVuc2l2ZSBkZWJ1ZyBsb2dnaW5nICovCisKKyN1bmRlZiBEUFJJTlRLCisjaWZkZWYgUENJX0RJT19FWFRERUJVRworI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgcnRfcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLworZW51bSBod19jYXJkc19pZCB7CisJVFlQRV9QQ0kxNzMwLCBUWVBFX1BDSTE3MzMsIFRZUEVfUENJMTczNCwgVFlQRV9QQ0kxNzM2LAorCVRZUEVfUENJMTc1MCwKKwlUWVBFX1BDSTE3NTEsCisJVFlQRV9QQ0kxNzUyLAorCVRZUEVfUENJMTc1MywgVFlQRV9QQ0kxNzUzRSwKKwlUWVBFX1BDSTE3NTQsIFRZUEVfUENJMTc1NiwKKwlUWVBFX1BDSTE3NjAsCisJVFlQRV9QQ0kxNzYyCit9OworCisvKiB3aGljaCBJL08gaW5zdHJ1Y3Rpb25zIHRvIHVzZSAqLworZW51bSBod19pb19hY2Nlc3MgeworCUlPXzhiLCBJT18xNmIKK307CisKKyNkZWZpbmUgTUFYX0RJX1NVQkRFVlMJMgkvKiBtYXggbnVtYmVyIG9mIERJIHN1YmRldmljZXMgcGVyIGNhcmQgKi8KKyNkZWZpbmUgTUFYX0RPX1NVQkRFVlMJMgkvKiBtYXggbnVtYmVyIG9mIERPIHN1YmRldmljZXMgcGVyIGNhcmQgKi8KKyNkZWZpbmUgTUFYX0RJT19TVUJERVZHCTIJLyogbWF4IG51bWJlciBvZiBESU8gc3ViZGV2aWNlcyBncm91cCBwZXIgY2FyZCAqLworCisjZGVmaW5lIFNJWkVfODI1NQkgICA0CS8qIDgyNTUgSU8gc3BhY2UgbGVuZ3RoICovCisKKyNkZWZpbmUgUENJRElPX01BSU5SRUcJICAgMgkvKiBtYWluIEkvTyByZWdpb24gZm9yIGFsbCBBZHZhbnRlY2ggY2FyZHM/ICovCisKKy8qIFJlZ2lzdGVyIG9mZnNldCBkZWZpbml0aW9ucyAqLworLyogIEFkdmFudGVjaCBQQ0ktMTczMC8zLzQgKi8KKyNkZWZpbmUgUENJMTczMF9JREkJICAgMAkvKiBSOiAgIElzb2xhdGVkIGRpZ2l0YWwgaW5wdXQgIDAtMTUgKi8KKyNkZWZpbmUgUENJMTczMF9JRE8JICAgMAkvKiBXOiAgIElzb2xhdGVkIGRpZ2l0YWwgb3V0cHV0IDAtMTUgKi8KKyNkZWZpbmUgUENJMTczMF9ESQkgICAyCS8qIFI6ICAgRGlnaXRhbCBpbnB1dCAgMC0xNSAqLworI2RlZmluZSBQQ0kxNzMwX0RPCSAgIDIJLyogVzogICBEaWdpdGFsIG91dHB1dCAwLTE1ICovCisjZGVmaW5lIFBDSTE3MzNfSURJCSAgIDAJLyogUjogICBJc29sYXRlZCBkaWdpdGFsIGlucHV0ICAwLTMxICovCisjZGVmaW5lCVBDSTE3MzBfM19JTlRfRU4JMHgwOAkvKiBSL1c6IGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMgKi8KKyNkZWZpbmUJUENJMTczMF8zX0lOVF9SRgkweDBjCS8qIFIvVzogc2V0IGZhbGxpbmcvcmFpc2luZyBlZGdlIGZvciBpbnRlcnJ1cHRzICovCisjZGVmaW5lCVBDSTE3MzBfM19JTlRfQ0xSCTB4MTAJLyogUi9XOiBjbGVhciBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFBDSTE3MzRfSURPCSAgIDAJLyogVzogICBJc29sYXRlZCBkaWdpdGFsIG91dHB1dCAwLTMxICovCisjZGVmaW5lIFBDSTE3M3hfQk9BUkRJRAkgICA0CS8qIFI6ICAgQm9hcmQgSS9EIHN3aXRjaCBmb3IgMTczMC8zLzQgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTczNlVQICovCisjZGVmaW5lIFBDSTE3MzZfSURJICAgICAgICAwICAgIC8qIFI6ICAgSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dCAgMC0xNSAqLworI2RlZmluZSBQQ0kxNzM2X0lETyAgICAgICAgMCAgICAvKiBXOiAgIElzb2xhdGVkIGRpZ2l0YWwgb3V0cHV0IDAtMTUgKi8KKyNkZWZpbmUgUENJMTczNl8zX0lOVF9FTiAgICAgICAgMHgwOCAgICAvKiBSL1c6IGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMgKi8KKyNkZWZpbmUgUENJMTczNl8zX0lOVF9SRiAgICAgICAgMHgwYyAgICAvKiBSL1c6IHNldCBmYWxsaW5nL3JhaXNpbmcgZWRnZSBmb3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBQQ0kxNzM2XzNfSU5UX0NMUiAgICAgICAweDEwICAgIC8qIFIvVzogY2xlYXIgaW50ZXJydXB0cyAqLworI2RlZmluZSBQQ0kxNzM2X0JPQVJESUQgICAgNCAgICAgICAgICAgIC8qIFI6ICAgQm9hcmQgSS9EIHN3aXRjaCBmb3IgMTczNlVQICovCisjZGVmaW5lIFBDSTE3MzZfTUFJTlJFRyAgICAwICAgICAgICAgICAgLyogTm9ybWFsIHJlZ2lzdGVyICgyKSBkb2Vzbid0IHdvcmsgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc1MCAqLworI2RlZmluZSBQQ0kxNzUwX0lESQkgICAwCS8qIFI6ICAgSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dCAgMC0xNSAqLworI2RlZmluZSBQQ0kxNzUwX0lETwkgICAwCS8qIFc6ICAgSXNvbGF0ZWQgZGlnaXRhbCBvdXRwdXQgMC0xNSAqLworI2RlZmluZSBQQ0kxNzUwX0lDUgkgIDMyCS8qIFc6ICAgSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTc1MF9JU1IJICAzMgkvKiBSOiAgIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc1MS8zLzNFICovCisjZGVmaW5lIFBDSTE3NTFfRElPCSAgIDAJLyogUi9XOiBiZWdpbiBvZiA4MjU1IHJlZ2lzdGVycyBibG9jayAqLworI2RlZmluZSBQQ0kxNzUxX0lDUgkgIDMyCS8qIFc6ICAgSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTc1MV9JU1IJICAzMgkvKiBSOiAgIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTc1M19ESU8JICAgMAkvKiBSL1c6IGJlZ2luIG9mIDgyNTUgcmVnaXN0ZXJzIGJsb2NrICovCisjZGVmaW5lIFBDSTE3NTNfSUNSMAkgIDE2CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMCAqLworI2RlZmluZSBQQ0kxNzUzX0lDUjEJICAxNwkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDEgKi8KKyNkZWZpbmUgUENJMTc1M19JQ1IyCSAgMTgJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAyICovCisjZGVmaW5lIFBDSTE3NTNfSUNSMwkgIDE5CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMyAqLworI2RlZmluZSBQQ0kxNzUzRV9ESU8JICAzMgkvKiBSL1c6IGJlZ2luIG9mIDgyNTUgcmVnaXN0ZXJzIGJsb2NrICovCisjZGVmaW5lIFBDSTE3NTNFX0lDUjAJICA0OAkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDAgKi8KKyNkZWZpbmUgUENJMTc1M0VfSUNSMQkgIDQ5CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMSAqLworI2RlZmluZSBQQ0kxNzUzRV9JQ1IyCSAgNTAJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAyICovCisjZGVmaW5lIFBDSTE3NTNFX0lDUjMJICA1MQkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDMgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc1Mi80LzYgKi8KKyNkZWZpbmUgUENJMTc1Ml9JRE8JICAgMAkvKiBSL1c6IERpZ2l0YWwgb3V0cHV0ICAwLTMxICovCisjZGVmaW5lIFBDSTE3NTJfSURPMgkgICA0CS8qIFIvVzogRGlnaXRhbCBvdXRwdXQgMzItNjMgKi8KKyNkZWZpbmUgUENJMTc1NF9JREkJICAgMAkvKiBSOiAgIERpZ2l0YWwgaW5wdXQgICAwLTMxICovCisjZGVmaW5lIFBDSTE3NTRfSURJMgkgICA0CS8qIFI6ICAgRGlnaXRhbCBpbnB1dCAgMzItNjQgKi8KKyNkZWZpbmUgUENJMTc1Nl9JREkJICAgMAkvKiBSOiAgIERpZ2l0YWwgaW5wdXQgICAwLTMxICovCisjZGVmaW5lIFBDSTE3NTZfSURPCSAgIDQJLyogUi9XOiBEaWdpdGFsIG91dHB1dCAgMC0zMSAqLworI2RlZmluZSBQQ0kxNzU0XzZfSUNSMAkweDA4CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMCAqLworI2RlZmluZSBQQ0kxNzU0XzZfSUNSMQkweDBhCS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMSAqLworI2RlZmluZSBQQ0kxNzU0X0lDUjIJMHgwYwkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDIgKi8KKyNkZWZpbmUgUENJMTc1NF9JQ1IzCTB4MGUJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAzICovCisjZGVmaW5lIFBDSTE3NTJfNl9DRkMJMHgxMgkvKiBSL1c6IHNldC9yZWFkIGNoYW5uZWwgZnJlZXplIGZ1bmN0aW9uICovCisjZGVmaW5lIFBDSTE3NXhfQk9BUkRJRAkweDEwCS8qIFI6ICAgQm9hcmQgSS9EIHN3aXRjaCBmb3IgMTc1Mi80LzYgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc2MiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENJMTc2Ml9STwkgICAwCS8qIFIvVzogUmVsYXlzIHN0YXR1cy9vdXRwdXQgKi8KKyNkZWZpbmUgUENJMTc2Ml9JREkJICAgMgkvKiBSOiAgIElzb2xhdGVkIGlucHV0IHN0YXR1cyAqLworI2RlZmluZSBQQ0kxNzYyX0JPQVJESUQJICAgNAkvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggKi8KKyNkZWZpbmUgUENJMTc2Ml9JQ1IJICAgNgkvKiBXOiAgIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3NjJfSVNSCSAgIDYJLyogUjogICBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3NjAgcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQjAJCTB4MGMJLyogVzogICBNYWlsYm94IG91dGdvaW5nIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUIxCQkweDBkCisjZGVmaW5lIE9NQjIJCTB4MGUKKyNkZWZpbmUgT01CMwkJMHgwZgorI2RlZmluZSBJTUIwCQkweDFjCS8qIFI6ICAgTWFpbGJveCBpbmNvbWluZyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSU1CMQkJMHgxZAorI2RlZmluZSBJTUIyCQkweDFlCisjZGVmaW5lIElNQjMJCTB4MWYKKyNkZWZpbmUgSU5UQ1NSMAkJMHgzOAkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBJTlRDU1IxCQkweDM5CisjZGVmaW5lIElOVENTUjIJCTB4M2EKKyNkZWZpbmUgSU5UQ1NSMwkJMHgzYgorCisvKiAgUENJLTE3NjAgbWFpbGJveCBjb21tYW5kcyAqLworI2RlZmluZSBDTURfQ2xlYXJJTUIyCQkweDAwCS8qIENsZWFyIElNQjIgc3RhdHVzIGFuZCByZXR1cm4gYWN0YXVsIERJIHN0YXR1cyBpbiBJTUIzICovCisjZGVmaW5lIENNRF9TZXRSZWxheXNPdXRwdXQJMHgwMQkvKiBTZXQgcmVsYXkgb3V0cHV0IGZyb20gT01CMCAqLworI2RlZmluZSBDTURfR2V0UmVsYXlzU3RhdHVzCTB4MDIJLyogR2V0IHJlbGF5IHN0YXR1cyB0byBJTUIwICovCisjZGVmaW5lIENNRF9SZWFkQ3VycmVudFN0YXR1cwkweDA3CS8qIFJlYWQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSByZWdpc3RlciBpbiBPTUIwLCByZXN1bHQgaW4gSU1CMCAqLworI2RlZmluZSBDTURfUmVhZEZpcm13YXJlVmVyc2lvbgkweDBlCS8qIFJlYWQgdGhlIGZpcm13YXJlIHZlci4sIHJlc3VsdCBpbiBJTUIxLklNQjAgKi8KKyNkZWZpbmUgQ01EX1JlYWRIYXJkd2FyZVZlcnNpb24JMHgwZgkvKiBSZWFkIHRoZSBoYXJkd2FyZSB2ZXIuLCByZXN1bHQgaW4gSU1CMS5JTUIwICovCisjZGVmaW5lIENNRF9FbmFibGVJRElGaWx0ZXJzCTB4MjAJLyogRW5hYmxlIElESSBmaWx0ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJUGF0dGVybk1hdGNoIDB4MjEJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJUGF0dGVybk1hdGNoCTB4MjIJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJQ291bnRlcnMJMHgyOAkvKiBFbmFibGUgSURJIGNvdW50ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfUmVzZXRJRElDb3VudGVycwkweDI5CS8qIFJlc2V0IElESSBjb3VudGVycyBiYXNlZCBvbiBiaXRzIGluIE9NQjAgdG8gaXRzIHJlc2V0IHZhbHVlcyAqLworI2RlZmluZSBDTURfT3ZlcmZsb3dJRElDb3VudGVycwkweDJhCS8qIEVuYWJsZSBJREkgY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0cyAgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCisjZGVmaW5lIENNRF9NYXRjaEludElESUNvdW50ZXJzCTB4MmIJLyogRW5hYmxlIElESSBjb3VudGVycyBtYXRjaCB2YWx1ZSBpbnRlcnJ1cHRzICBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VkZ2VJRElDb3VudGVycwkweDJjCS8qIFNldCBJREkgdXAgY291bnRlcnMgY291bnQgZWRnZSAoYml0PTAgLSByaXNpbmcsID0xIC0gZmFsbGluZykgKi8KKyNkZWZpbmUgQ01EX0dldElESUNudEN1clZhbHVlCTB4MmYJLyogUmVhZCBJREl7T01CMH0gdXAgY291bnRlciBjdXJyZW50IHZhbHVlICovCisjZGVmaW5lIENNRF9TZXRJREkwQ250UmVzZXRWYWx1ZSAweDQwCS8qIFNldCBJREkwIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMUNudFJlc2V0VmFsdWUgMHg0MQkvKiBTZXQgSURJMSBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTJDbnRSZXNldFZhbHVlIDB4NDIJLyogU2V0IElESTIgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkzQ250UmVzZXRWYWx1ZSAweDQzCS8qIFNldCBJREkzIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNENudFJlc2V0VmFsdWUgMHg0NAkvKiBTZXQgSURJNCBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTVDbnRSZXNldFZhbHVlIDB4NDUJLyogU2V0IElESTUgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk2Q250UmVzZXRWYWx1ZSAweDQ2CS8qIFNldCBJREk2IENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJN0NudFJlc2V0VmFsdWUgMHg0NwkvKiBTZXQgSURJNyBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTBDbnRNYXRjaFZhbHVlIDB4NDgJLyogU2V0IElESTAgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkxQ250TWF0Y2hWYWx1ZSAweDQ5CS8qIFNldCBJREkxIENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMkNudE1hdGNoVmFsdWUgMHg0YQkvKiBTZXQgSURJMiBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTNDbnRNYXRjaFZhbHVlIDB4NGIJLyogU2V0IElESTMgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk0Q250TWF0Y2hWYWx1ZSAweDRjCS8qIFNldCBJREk0IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNUNudE1hdGNoVmFsdWUgMHg0ZAkvKiBTZXQgSURJNSBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTZDbnRNYXRjaFZhbHVlIDB4NGUJLyogU2V0IElESTYgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk3Q250TWF0Y2hWYWx1ZSAweDRmCS8qIFNldCBJREk3IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworCisjZGVmaW5lIE9NQkNNRF9SRVRSWQkweDAzCS8qIDMgdGltZXMgdHJ5IHJlcXVlc3QgYmVmb3JlIGVycm9yICovCisKK3N0YXRpYyBpbnQgcGNpX2Rpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2lfZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBkaW9zdWJkX2RhdGEgeworCWludCBjaGFuczsJCS8qICBudW0gb2YgY2hhbnMgKi8KKwlpbnQgYWRkcjsJCS8qICBQQ0kgYWRkcmVzcyBvZnNldCAqLworCWludCByZWdzOwkJLyogIG51bWJlciBvZiByZWdpc3RlcnMgdG8gcmVhZCBvciA4MjU1IHN1YmRldmljZXMgKi8KKwl1bnNpZ25lZCBpbnQgc3BlY2ZsYWdzOwkvKiAgYWRkb24gc3ViZGV2aWNlIGZsYWdzICovCit9OworCitzdHJ1Y3QgZGlvX2JvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogIGJvYXJkIG5hbWUgKi8KKwlpbnQgdmVuZG9yX2lkOwkJLyogIHZlbmRvci9kZXZpY2UgUENJIElEICovCisJaW50IGRldmljZV9pZDsKKwlpbnQgbWFpbl9wY2lfcmVnaW9uOwkvKiAgbWFpbiBJL08gUENJIHJlZ2lvbiAqLworCWVudW0gaHdfY2FyZHNfaWQgY2FyZHR5cGU7CisJc3RydWN0IGRpb3N1YmRfZGF0YSBzZGlbTUFYX0RJX1NVQkRFVlNdOwkvKiAgREkgY2hhbnMgKi8KKwlzdHJ1Y3QgZGlvc3ViZF9kYXRhIHNkb1tNQVhfRE9fU1VCREVWU107CS8qICBETyBjaGFucyAqLworCXN0cnVjdCBkaW9zdWJkX2RhdGEgc2Rpb1tNQVhfRElPX1NVQkRFVkddOwkvKiAgRElPIDgyNTUgY2hhbnMgKi8KKwlzdHJ1Y3QgZGlvc3ViZF9kYXRhIGJvYXJkaWQ7CS8qICBjYXJkIHN1cHBvcnRzIGJvYXJkIElEIHN3aXRjaCAqLworCWVudW0gaHdfaW9fYWNjZXNzIGlvX2FjY2VzczsKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfZGlvX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzMzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX2Rpb19wY2lfdGFibGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpb19ib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworCXsicGNpMTczMCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzAsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzMwLAorCQkJe3sxNiwgUENJMTczMF9ESSwgMiwgMH0sIHsxNiwgUENJMTczMF9JREksIDIsIDB9fSwKKwkJCXt7MTYsIFBDSTE3MzBfRE8sIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURPLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3M3hfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJCUlPXzhiLAorCQl9LAorCXsicGNpMTczMyIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzMsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzMzLAorCQkJe3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzMzX0lESSwgNCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7NCwgUENJMTczeF9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAorCQlJT184Yn0sCisJeyJwY2kxNzM0IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNCwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3MzQsCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzM0X0lETywgNCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzN4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzhifSwKKwl7InBjaTE3MzYiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzM2LCBQQ0kxNzM2X01BSU5SRUcsCisJCQlUWVBFX1BDSTE3MzYsCisJCQl7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3MzZfSURJLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3MzZfSURPLCAyLCAwfX0sCisJCQl7eyAwLCAwLCAwLCAwfSwgeyAwLCAwLCAwLCAwfX0sCisJCQl7IDQsIFBDSTE3MzZfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJCUlPXzhiLAorICAgICAgICB9LAorCXsicGNpMTc1MCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTAsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzUwLAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzUwX0lESSwgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzUwX0lETywgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXswLCAwLCAwLCAwfSwKKwkJSU9fOGJ9LAorCXsicGNpMTc1MSIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTEsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzUxLAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezQ4LCBQQ0kxNzUxX0RJTywgMiwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7MCwgMCwgMCwgMH0sCisJCUlPXzhifSwKKwl7InBjaTE3NTIiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUyLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1MiwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezMyLCBQQ0kxNzUyX0lETywgMiwgMH0sIHszMiwgUENJMTc1Ml9JRE8yLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fMTZifSwKKwl7InBjaTE3NTMiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1MywKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3s5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezAsIDAsIDAsIDB9LAorCQlJT184Yn0sCisJeyJwY2kxNzUzZSIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTMsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzUzRSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3s5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7OTYsIFBDSTE3NTNFX0RJTywgNCwgMH19LAorCQkJezAsIDAsIDAsIDB9LAorCQlJT184Yn0sCisJeyJwY2kxNzU0IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NCwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3NTQsCisJCQl7ezMyLCBQQ0kxNzU0X0lESSwgMiwgMH0sIHszMiwgUENJMTc1NF9JREkyLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzV4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzE2Yn0sCisJeyJwY2kxNzU2IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NiwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3NTYsCisJCQl7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3NTZfSURJLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3NTZfSURPLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fMTZifSwKKwl7InBjaTE3NjAiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzYwLCAwLAorCQkJVFlQRV9QQ0kxNzYwLAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwJLyogIFRoaXMgY2FyZCBoYXZlIG93biBzZXR1cCB3b3JrICovCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXswLCAwLCAwLCAwfSwKKwkJSU9fOGJ9LAorCXsicGNpMTc2MiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NjIsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzYyLAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX0lESSwgMSwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX1JPLCAxLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3NjJfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fMTZifQorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IGRpb19ib2FyZHR5cGUpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaV9kaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWR2X3BjaV9kaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaV9kaW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaV9kaW9fZGV0YWNoCit9OworCitzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpwcmV2OwkvKiAgcHJldmlvdXMgcHJpdmF0ZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpuZXh0OwkvKiAgbmV4dCBwcml2YXRlIHN0cnVjdCAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CS8qICBwb2ludGVyIHRvIGJvYXJkJ3MgcGNpX2RldiAqLworCWNoYXIgdmFsaWQ7CQkvKiAgY2FyZCBpcyB1c2FibGUgKi8KKwljaGFyIEdsb2JhbElycUVuYWJsZWQ7CS8qICAxPSBhbnkgSVJRIHNvdXJjZSBpcyBlbmFibGVkICovCisJLyogIFBDSS0xNzYwIHNwZWNpZmljIGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudEVuYWJsZTsJLyogIGNvdW50ZXIncyBjb3VudGluZyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElDbnRPdmVyRW5hYmxlOwkvKiAgY291bnRlcidzIG92ZXJmbG93IGludGVycnVwdHMgZW5hYmxlIHN0YXR1cyAqLworCXVuc2lnbmVkIGNoYXIgSURJQ250TWF0Y2hFbmFibGU7CS8qICBjb3VudGVyJ3MgbWF0Y2ggaW50ZXJydXB0cyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElDbnRFZGdlOwkvKiAgY291bnRlcidzIGNvdW50IGVkZ2UgdmFsdWUgKGJpdD0wIC0gcmlzaW5nLCA9MSAtIGZhbGxpbmcpICovCisJdW5zaWduZWQgc2hvcnQgQ250UmVzVmFsdWVbOF07CS8qICBjb3VudGVycycgcmVzZXQgdmFsdWUgKi8KKwl1bnNpZ25lZCBzaG9ydCBDbnRNYXRjaFZhbHVlWzhdOwkvKiAgY291bnRlcnMnIG1hdGNoIGludGVycnVwdCB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgSURJRmlsdGVyc0VuOwkvKiAgSURJJ3MgZGlnaXRhbCBmaWx0ZXJzIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESVBhdE1hdGNoRW47CS8qICBJREkncyBwYXR0ZXJuIG1hdGNoIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESVBhdE1hdGNoVmFsdWU7CS8qICBJREkncyBwYXR0ZXJuIG1hdGNoIHZhbHVlICovCisJdW5zaWduZWQgc2hvcnQgSURJRmlsdHJMb3dbOF07CS8qICBJREkncyBmaWx0ZXIgdmFsdWUgbG93IHNpZ25hbCAqLworCXVuc2lnbmVkIHNob3J0IElESUZpbHRySGlnaFs4XTsJLyogIElESSdzIGZpbHRlciB2YWx1ZSBoaWdoIHNpZ25hbCAqLworfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGlvX3ByaXZhdGUgKnBjaV9wcml2ID0gTlVMTDsJLyogbGlzdCBvZiBhbGxvY2F0ZWQgY2FyZHMgKi8KKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaV9kaW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBkaW9fYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9faW5zbl9iaXRzX2RpX2Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQgPSAoY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqKXMtPnByaXZhdGU7CisJaW50IGk7CisKKwlkYXRhWzFdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKSB7CisJCWRhdGFbMV0gfD0gaW5iKGRldi0+aW9iYXNlICsgZC0+YWRkciArIGkpIDw8ICg4ICogaSk7CisJfQorCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9faW5zbl9iaXRzX2RpX3coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQgPSAoY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqKXMtPnByaXZhdGU7CisJaW50IGk7CisKKwlkYXRhWzFdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKQorCQlkYXRhWzFdIHw9IGludyhkZXYtPmlvYmFzZSArIGQtPmFkZHIgKyAyICogaSkgPDwgKDE2ICogaSk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19pbnNuX2JpdHNfZG9fYihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqZCA9IChjb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICopcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gKDggKiBpKSkgJiAweGZmLAorCQkJCWRldi0+aW9iYXNlICsgZC0+YWRkciArIGkpOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19pbnNuX2JpdHNfZG9fdyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqZCA9IChjb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICopcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKQorCQkJb3V0dygocy0+c3RhdGUgPj4gKDE2ICogaSkpICYgMHhmZmZmLAorCQkJCWRldi0+aW9iYXNlICsgZC0+YWRkciArIDIgKiBpKTsKKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfdW5jaGVja2VkX21ieHJlcXVlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hhciAqb21iLCB1bnNpZ25lZCBjaGFyICppbWIsIGludCByZXBlYXRzKQoreworCWludCBjbnQsIHRvdXQsIG9rID0gMDsKKworCWZvciAoY250ID0gMDsgY250IDwgcmVwZWF0czsgY250KyspIHsKKwkJb3V0YihvbWJbMF0sIGRldi0+aW9iYXNlICsgT01CMCk7CisJCW91dGIob21iWzFdLCBkZXYtPmlvYmFzZSArIE9NQjEpOworCQlvdXRiKG9tYlsyXSwgZGV2LT5pb2Jhc2UgKyBPTUIyKTsKKwkJb3V0YihvbWJbM10sIGRldi0+aW9iYXNlICsgT01CMyk7CisJCWZvciAodG91dCA9IDA7IHRvdXQgPCAyNTE7IHRvdXQrKykgeworCQkJaWYgKChpbWJbMl0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBJTUIyKSkgPT0gb21iWzJdKSB7CisJCQkJaW1iWzBdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMCk7CisJCQkJaW1iWzFdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMSk7CisJCQkJaW1iWzNdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMyk7CisJCQkJb2sgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQlpZiAob2spCisJCQlyZXR1cm4gMDsKKwl9CisKKwljb21lZGlfZXJyb3IoZGV2LCAiUENJLTE3NjAgbWFpbGJveCByZXF1ZXN0IHRpbWVvdXQhIik7CisJcmV0dXJuIC1FVElNRTsKK30KKworc3RhdGljIGludCBwY2kxNzYwX2NsZWFyX2ltYjIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7IDB4MCwgMHgwLCBDTURfQ2xlYXJJTUIyLCAweDAgfTsKKwl1bnNpZ25lZCBjaGFyIGltYls0XTsKKwkvKiBjaGVjayBpZiBpbWIyIGlzIGFscmVhZHkgY2xlYXIgKi8KKwlpZiAoaW5iKGRldi0+aW9iYXNlICsgSU1CMikgPT0gQ01EX0NsZWFySU1CMikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBjaTE3NjBfdW5jaGVja2VkX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYiwgT01CQ01EX1JFVFJZKTsKK30KKworc3RhdGljIGludCBwY2kxNzYwX21ieHJlcXVlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hhciAqb21iLCB1bnNpZ25lZCBjaGFyICppbWIpCit7CisJaWYgKG9tYlsyXSA9PSBDTURfQ2xlYXJJTUIyKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiYnVnISB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgQ01EX0NsZWFySU1CMiBjb21tYW5kIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaW5iKGRldi0+aW9iYXNlICsgSU1CMikgPT0gb21iWzJdKSB7CisJCWludCByZXR2YWw7CisJCXJldHZhbCA9IHBjaTE3NjBfY2xlYXJfaW1iMihkZXYpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHVybiBwY2kxNzYwX3VuY2hlY2tlZF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIsIE9NQkNNRF9SRVRSWSk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9iaXRzX2RpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMyk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTc2MF9pbnNuX2JpdHNfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7CisJCTB4MDAsCisJCTB4MDAsCisJCUNNRF9TZXRSZWxheXNPdXRwdXQsCisJCTB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW9tYlswXSA9IHMtPnN0YXRlOworCQlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQkJcmV0dXJuIHJldDsKKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9jbnRfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHJldCwgbjsKKwl1bnNpZ25lZCBjaGFyIG9tYls0XSA9IHsKKwkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgJiAweDA3LAorCQkweDAwLAorCQlDTURfR2V0SURJQ250Q3VyVmFsdWUsCisJCTB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQkJcmV0dXJuIHJldDsKKwkJZGF0YVtuXSA9IChpbWJbMV0gPDwgOCkgKyBpbWJbMF07CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9jbnRfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgJiAweDA3OworCXVuc2lnbmVkIGNoYXIgYml0bWFzayA9IDEgPDwgY2hhbjsKKwl1bnNpZ25lZCBjaGFyIG9tYls0XSA9IHsKKwkJZGF0YVswXSAmIDB4ZmYsCisJCShkYXRhWzBdID4+IDgpICYgMHhmZiwKKwkJQ01EX1NldElESTBDbnRSZXNldFZhbHVlICsgY2hhbiwKKwkJMHgwMAorCX07CisJdW5zaWduZWQgY2hhciBpbWJbNF07CisKKwlpZiAoZGV2cHJpdi0+Q250UmVzVmFsdWVbY2hhbl0gIT0gKGRhdGFbMF0gJiAweGZmZmYpKSB7CS8qICBTZXQgcmVzZXQgdmFsdWUgaWYgZGlmZmVyZW50ICovCisJCWlmICghKHJldCA9IHBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKSkpCisJCQlyZXR1cm4gcmV0OworCQlkZXZwcml2LT5DbnRSZXNWYWx1ZVtjaGFuXSA9IGRhdGFbMF0gJiAweGZmZmY7CisJfQorCisJb21iWzBdID0gYml0bWFzazsJLyogIHJlc2V0IGNvdW50ZXIgdG8gaXQgcmVzZXQgdmFsdWUgKi8KKwlvbWJbMl0gPSBDTURfUmVzZXRJRElDb3VudGVyczsKKwlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCEoYml0bWFzayAmIGRldnByaXYtPklESUNudEVuYWJsZSkpIHsJLyogIHN0YXJ0IGNvdW50ZXIgaWYgaXQgZG9uJ3QgcnVuICovCisJCW9tYlswXSA9IGJpdG1hc2s7CisJCW9tYlsyXSA9IENNRF9FbmFibGVJRElDb3VudGVyczsKKwkJaWYgKCEocmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpKSkKKwkJCXJldHVybiByZXQ7CisJCWRldnByaXYtPklESUNudEVuYWJsZSB8PSBiaXRtYXNrOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTc2MF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG9tYls0XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIElOVENTUjApOwkvKiAgZGlzYWJsZSBJUlEgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgSU5UQ1NSMSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIElOVENTUjIpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBJTlRDU1IzKTsKKwlkZXZwcml2LT5HbG9iYWxJcnFFbmFibGVkID0gMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX1NldFJlbGF5c091dHB1dDsJLyogIHJlc2V0IHJlbGF5IG91dHB1dHMgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9FbmFibGVJRElDb3VudGVyczsJLyogIGRpc2FibGUgSURJIHVwIGNvdW50ZXJzICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESUNudEVuYWJsZSA9IDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9PdmVyZmxvd0lESUNvdW50ZXJzOwkvKiAgZGlzYWJsZSBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHRzICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESUNudE92ZXJFbmFibGUgPSAwOworCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMl0gPSBDTURfTWF0Y2hJbnRJRElDb3VudGVyczsJLyogIGRpc2FibGUgY291bnRlcnMgbWF0Y2ggdmFsdWUgaW50ZXJydXB0cyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElDbnRNYXRjaEVuYWJsZSA9IDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsxXSA9IDB4ODA7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewkvKiAgc2V0IElESSB1cCBjb3VudGVycyBtYXRjaCB2YWx1ZSAqLworCQlvbWJbMl0gPSBDTURfU2V0SURJMENudE1hdGNoVmFsdWUgKyBpOworCQlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJCWRldnByaXYtPkNudE1hdGNoVmFsdWVbaV0gPSAweDgwMDA7CisJfQorCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMV0gPSAweDAwOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsJLyogIHNldCBJREkgdXAgY291bnRlcnMgcmVzZXQgdmFsdWUgKi8KKwkJb21iWzJdID0gQ01EX1NldElESTBDbnRSZXNldFZhbHVlICsgaTsKKwkJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCQlkZXZwcml2LT5DbnRSZXNWYWx1ZVtpXSA9IDB4MDAwMDsKKwl9CisKKwlvbWJbMF0gPSAweGZmOworCW9tYlsyXSA9IENNRF9SZXNldElESUNvdW50ZXJzOwkvKiAgcmVzZXQgSURJIHVwIGNvdW50ZXJzIHRvIHJlc2V0IHZhbHVlcyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX0VkZ2VJRElDb3VudGVyczsJLyogIHNldCBJREkgdXAgY291bnRlcnMgY291bnQgZWRnZSAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElDbnRFZGdlID0gMHgwMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX0VuYWJsZUlESUZpbHRlcnM7CS8qICBkaXNhYmxlIGFsbCBkaWdpdGFsIGluIGZpbHRlcnMgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJZGV2cHJpdi0+SURJRmlsdGVyc0VuID0gMHgwMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX0VuYWJsZUlESVBhdHRlcm5NYXRjaDsJLyogIGRpc2FibGUgcGF0dGVybiBtYXRjaGluZyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElQYXRNYXRjaEVuID0gMHgwMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX1NldElESVBhdHRlcm5NYXRjaDsJLyogIHNldCBwYXR0ZXJuIG1hdGNoIHZhbHVlICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESVBhdE1hdGNoVmFsdWUgPSAweDAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJRFBSSU5USygiYWR2X3BjaV9kaW8gRURCRzogQkdOOiBwY2kxNzF4X3Jlc2V0KC4uLilcbiIpOworCisJc3dpdGNoICh0aGlzX2JvYXJkLT5jYXJkdHlwZSkgeworCWNhc2UgVFlQRV9QQ0kxNzMwOgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF9ETyk7CS8qICBjbGVhciBvdXRwdXRzICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0RPICsgMSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0lETyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0lETyArIDEpOworCQkvKiBOTyBicmVhayB0aGVyZSEgKi8KKwljYXNlIFRZUEVfUENJMTczMzoKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfM19JTlRfRU4pOwkvKiAgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJCW91dGIoMHgwZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX0NMUik7CS8qICBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX1JGKTsJLyogIHNldCByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzM0OgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNF9JRE8pOwkvKiAgY2xlYXIgb3V0cHV0cyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNF9JRE8gKyAxKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzRfSURPICsgMik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM0X0lETyArIDMpOworCQlicmVhazsKKworCWNhc2UgVFlQRV9QQ0kxNzM2OgorCQlvdXRiKDAsIGRldi0+aW9iYXNlK1BDSTE3MzZfSURPKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2X0lETysxKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2XzNfSU5UX0VOKTsgIC8qICBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJb3V0YigweDBmLCBkZXYtPmlvYmFzZStQQ0kxNzM2XzNfSU5UX0NMUik7LyogIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2XzNfSU5UX1JGKTsgIC8qICBzZXQgcmlzaW5nIGVkZ2UgdHJpZ2dlciAqLworCQlicmVhazsKKworCWNhc2UgVFlQRV9QQ0kxNzUwOgorCWNhc2UgVFlQRV9QQ0kxNzUxOgorCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1MF9JQ1IpOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJYnJlYWs7CisJY2FzZSBUWVBFX1BDSTE3NTI6CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsJLyogIGRpc2FibGUgY2hhbm5lbCBmcmVlemUgZnVuY3Rpb24gKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPICsgMik7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETzIpOworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml9JRE8yICsgMik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzUzRToKKwkJb3V0YigweDg4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjApOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjEpOworCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMik7CisJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IzKTsKKwkJLyogTk8gYnJlYWsgdGhlcmUhICovCisJY2FzZSBUWVBFX1BDSTE3NTM6CisJCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjApOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNfSUNSMSk7CisJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjIpOworCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IzKTsKKwkJYnJlYWs7CisJY2FzZSBUWVBFX1BDSTE3NTQ6CisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMCk7CS8qICBkaXNhYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMSk7CisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0X0lDUjIpOworCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF9JQ1IzKTsKKwkJYnJlYWs7CisJY2FzZSBUWVBFX1BDSTE3NTY6CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsJLyogIGRpc2FibGUgY2hhbm5lbCBmcmVlemUgZnVuY3Rpb24gKi8KKwkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IwKTsJLyogIGRpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IxKTsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTZfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTZfSURPICsgMik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzYwOgorCQlwY2kxNzYwX3Jlc2V0KGRldik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzYyOgorCQlvdXR3KDB4MDEwMSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzYyX0lDUik7CS8qICBkaXNhYmxlICYgY2xlYXIgaW50ZXJydXB0cyAqLworCQlicmVhazsKKwl9CisKKwlEUFJJTlRLKCJhZHZfcGNpX2RpbyBFREJHOiBFTkQ6IHBjaTE3MXhfcmVzZXQoLi4uKVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTc2MF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHN1YmRldiA9IDA7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBwY2kxNzYwX2luc25fYml0c19kaTsKKwlzdWJkZXYrKzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnN0YXRlID0gMDsKKwlzLT5pbnNuX2JpdHMgPSBwY2kxNzYwX2luc25fYml0c19kbzsKKwlzdWJkZXYrKzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5tYXhkYXRhID0gMHhmZmZmZmZmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAyOworLyogICAgICAgcy0+aW5zbl9jb25maWc9cGNpMTc2MF9pbnNuX3B3bV9jZmc7ICovCisJc3ViZGV2Kys7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5pbnNuX3JlYWQgPSBwY2kxNzYwX2luc25fY250X3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IHBjaTE3NjBfaW5zbl9jbnRfd3JpdGU7CisvKiAgICAgICBzLT5pbnNuX2NvbmZpZz1wY2kxNzYwX2luc25fY250X2NmZzsgKi8KKwlzdWJkZXYrKzsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2FkZF9kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKiBkLCBpbnQgc3ViZGV2KQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8IGQtPnNwZWNmbGFnczsKKwlpZiAoZC0+Y2hhbnMgPiAxNikKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gZC0+Y2hhbnM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gZC0+Y2hhbnM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmlvX2FjY2VzcykgeworCWNhc2UgSU9fOGI6CisJCXMtPmluc25fYml0cyA9IHBjaV9kaW9faW5zbl9iaXRzX2RpX2I7CisJCWJyZWFrOworCWNhc2UgSU9fMTZiOgorCQlzLT5pbnNuX2JpdHMgPSBwY2lfZGlvX2luc25fYml0c19kaV93OworCQlicmVhazsKKwl9CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopZDsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2FkZF9kbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKiBkLCBpbnQgc3ViZGV2KQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlpZiAoZC0+Y2hhbnMgPiAxNikKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gZC0+Y2hhbnM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gZC0+Y2hhbnM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5zdGF0ZSA9IDA7CisJc3dpdGNoICh0aGlzX2JvYXJkLT5pb19hY2Nlc3MpIHsKKwljYXNlIElPXzhiOgorCQlzLT5pbnNuX2JpdHMgPSBwY2lfZGlvX2luc25fYml0c19kb19iOworCQlicmVhazsKKwljYXNlIElPXzE2YjoKKwkJcy0+aW5zbl9iaXRzID0gcGNpX2Rpb19pbnNuX2JpdHNfZG9fdzsKKwkJYnJlYWs7CisJfQorCXMtPnByaXZhdGUgPSAodm9pZCAqKWQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgQ2hlY2tBbmRBbGxvY0NhcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQsCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpwciwgKnByZXY7CisKKwlmb3IgKHByID0gcGNpX3ByaXYsIHByZXYgPSBOVUxMOyBwciAhPSBOVUxMOyBwcmV2ID0gcHIsIHByID0gcHItPm5leHQpIHsKKwkJaWYgKHByLT5wY2lkZXYgPT0gcGNpZGV2KSB7CisJCQlyZXR1cm4gMDsJLyogIHRoaXMgY2FyZCBpcyB1c2VkLCBsb29rIGZvciBhbm90aGVyICovCisJCX0KKwl9CisKKwlpZiAocHJldikgeworCQlkZXZwcml2LT5wcmV2ID0gcHJldjsKKwkJcHJldi0+bmV4dCA9IGRldnByaXY7CisJfSBlbHNlIHsKKwkJcGNpX3ByaXYgPSBkZXZwcml2OworCX0KKworCWRldnByaXYtPnBjaWRldiA9IHBjaWRldjsKKworCXJldHVybiAxOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0LCBzdWJkZXYsIG5fc3ViZGV2aWNlcywgaSwgajsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaV9kaW86ICIsIGRldi0+bWlub3IpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2lfZGlvX3ByaXZhdGUpKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiLCBFcnJvcjogQ2Fubid0IGFsbG9jYXRlIHByaXZhdGUgbWVtb3J5IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8qICBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCisJCWZvciAoaSA9IDA7IGkgPCBuX2JvYXJkdHlwZXM7ICsraSkgeworCQkJaWYgKGJvYXJkdHlwZXNbaV0udmVuZG9yX2lkICE9IHBjaWRldi0+dmVuZG9yKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGJvYXJkdHlwZXNbaV0uZGV2aWNlX2lkICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLyogIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLyogIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/ICovCisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJcmV0ID0gQ2hlY2tBbmRBbGxvY0NhcmQoZGV2LCBpdCwgcGNpZGV2KTsKKwkJCWlmIChyZXQgIT0gMSkgY29udGludWU7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXMgKyBpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRldi0+Ym9hcmRfcHRyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFkZXYtPmJvYXJkX3B0cikgeworCQlydF9wcmludGsKKwkJCSgiLCBFcnJvcjogUmVxdWVzdGVkIHR5cGUgb2YgdGhlIGNhcmQgd2FzIG5vdCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBkcml2ZXJfcGNpX2Rpby5kcml2ZXJfbmFtZSkpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiwgRXJyb3I6IENhbid0IGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIHRoaXNfYm9hcmQtPm1haW5fcGNpX3JlZ2lvbik7CisJcnRfcHJpbnRrKCIsIGI6czpmPSVkOiVkOiVkLCBpbz0weCU0bHgiLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSwKKwkJUENJX0ZVTkMocGNpZGV2LT5kZXZmbiksIGlvYmFzZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlID09IFRZUEVfUENJMTc2MCkgeworCQluX3N1YmRldmljZXMgPSA0OwkvKiAgOCBJREksIDggSURPLCAyIFBXTSwgOCBDTlQgKi8KKwl9IGVsc2UgeworCQluX3N1YmRldmljZXMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RJX1NVQkRFVlM7IGkrKykKKwkJCWlmICh0aGlzX2JvYXJkLT5zZGlbaV0uY2hhbnMpCisJCQkJbl9zdWJkZXZpY2VzKys7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRE9fU1VCREVWUzsgaSsrKQorCQkJaWYgKHRoaXNfYm9hcmQtPnNkb1tpXS5jaGFucykKKwkJCQluX3N1YmRldmljZXMrKzsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ESU9fU1VCREVWRzsgaSsrKQorCQkJbl9zdWJkZXZpY2VzICs9IHRoaXNfYm9hcmQtPnNkaW9baV0ucmVnczsKKwkJaWYgKHRoaXNfYm9hcmQtPmJvYXJkaWQuY2hhbnMpCisJCQluX3N1YmRldmljZXMrKzsKKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIsIEVycm9yOiBDYW5uJ3QgYWxsb2NhdGUgc3ViZGV2aWNlIG1lbW9yeSFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJ0X3ByaW50aygiLlxuIik7CisKKwlzdWJkZXYgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ESV9TVUJERVZTOyBpKyspCisJCWlmICh0aGlzX2JvYXJkLT5zZGlbaV0uY2hhbnMpIHsKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCQlwY2lfZGlvX2FkZF9kaShkZXYsIHMsICZ0aGlzX2JvYXJkLT5zZGlbaV0sIHN1YmRldik7CisJCQlzdWJkZXYrKzsKKwkJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9ET19TVUJERVZTOyBpKyspCisJCWlmICh0aGlzX2JvYXJkLT5zZG9baV0uY2hhbnMpIHsKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCQlwY2lfZGlvX2FkZF9kbyhkZXYsIHMsICZ0aGlzX2JvYXJkLT5zZG9baV0sIHN1YmRldik7CisJCQlzdWJkZXYrKzsKKwkJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9ESU9fU1VCREVWRzsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgdGhpc19ib2FyZC0+c2Rpb1tpXS5yZWdzOyBqKyspIHsKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQlkZXYtPmlvYmFzZSArIHRoaXNfYm9hcmQtPnNkaW9baV0uYWRkciArCisJCQkJU0laRV84MjU1ICogaik7CisJCQlzdWJkZXYrKzsKKwkJfQorCisJaWYgKHRoaXNfYm9hcmQtPmJvYXJkaWQuY2hhbnMpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlwY2lfZGlvX2FkZF9kaShkZXYsIHMsICZ0aGlzX2JvYXJkLT5ib2FyZGlkLCBzdWJkZXYpOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+Y2FyZHR5cGUgPT0gVFlQRV9QQ0kxNzYwKQorCQlwY2kxNzYwX2F0dGFjaChkZXYsIGl0KTsKKworCWRldnByaXYtPnZhbGlkID0gMTsKKworCXBjaV9kaW9fcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgc3ViZGV2OworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpIHsKKwkJCXBjaV9kaW9fcmVzZXQoZGV2KTsKKwkJfQorCisJCS8qIFRoaXMgc2hvd3MgdGhlIHNpbGxpbmVzcyBvZiB1c2luZyB0aGlzIGtpbmQgb2YKKwkJICogc2NoZW1lIGZvciBudW1iZXJpbmcgc3ViZGV2aWNlcy4gIERvbid0IGRvIGl0LiAgLS1kcyAqLworCQlzdWJkZXYgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RJX1NVQkRFVlM7IGkrKykgeworCQkJaWYgKHRoaXNfYm9hcmQtPnNkaVtpXS5jaGFucykgeworCQkJCXN1YmRldisrOworCQkJfQorCQl9CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRE9fU1VCREVWUzsgaSsrKSB7CisJCQlpZiAodGhpc19ib2FyZC0+c2RvW2ldLmNoYW5zKSB7CisJCQkJc3ViZGV2Kys7CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ESU9fU1VCREVWRzsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgdGhpc19ib2FyZC0+c2Rpb1tpXS5yZWdzOyBqKyspIHsKKwkJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQkJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBzKTsKKwkJCQlzdWJkZXYrKzsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJCXMtPnByaXZhdGUgPSBOVUxMOworCQl9CisKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisKKwkJaWYgKGRldnByaXYtPnByZXYpIHsKKwkJCWRldnByaXYtPnByZXYtPm5leHQgPSBkZXZwcml2LT5uZXh0OworCQl9IGVsc2UgeworCQkJcGNpX3ByaXYgPSBkZXZwcml2LT5uZXh0OworCQl9CisJCWlmIChkZXZwcml2LT5uZXh0KSB7CisJCQlkZXZwcml2LT5uZXh0LT5wcmV2ID0gZGV2cHJpdi0+cHJldjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpX2RpbywgcGNpX2Rpb19wY2lfdGFibGUpOworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19haW8xMl84LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3YjRkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jCkBAIC0wLDAgKzEsMjI2IEBACisvKgorCisgICAgY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYworCisgICAgRHJpdmVyIGZvciBBY2NlcyBJL08gUHJvZHVjdHMgUEMtMTA0IEFJTzEyLTggQW5hbG9nIEkvTyBCb2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNiBDJkMgVGVjaG5vbG9naWVzLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCisKK0RyaXZlcjogYWlvX2FpbzEyXzgKK0Rlc2NyaXB0aW9uOiBBY2NlcyBJL08gUHJvZHVjdHMgUEMtMTA0IEFJTzEyLTggQW5hbG9nIEkvTyBCb2FyZAorQXV0aG9yOiBQYWJsbyBNZWppYSA8cGFibG8ubWVqaWFAY2N0ZWNobm9sLmNvbT4KK0RldmljZXM6CisgW0FjY2VzIEkvT10gUEMtMTA0IEFJTzEyLTgKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisKK05vdGVzOgorCisgIE9ubHkgc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIEFJTzEyXzhfU1RBVFVTCQkJMHgwMAorI2RlZmluZSBBSU8xMl84X0lOVEVSUlVQVAkJMHgwMQorI2RlZmluZSBBSU8xMl84X0FEQwkJCTB4MDIKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMAkJCTB4MDQKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMQkJCTB4MDYKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMgkJCTB4MDgKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMwkJCTB4MEEKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSXzAJCTB4MEMKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSXzEJCTB4MEQKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSXzIJCTB4MEUKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSX0NPTlRST0wJCTB4MEYKKyNkZWZpbmUgQUlPMTJfOF9ESU9fMAkJCTB4MTAKKyNkZWZpbmUgQUlPMTJfOF9ESU9fMQkJCTB4MTEKKyNkZWZpbmUgQUlPMTJfOF9ESU9fMgkJCTB4MTIKKyNkZWZpbmUgQUlPMTJfOF9ESU9fU1RBVFVTCQkweDEzCisjZGVmaW5lIEFJTzEyXzhfRElPX0NPTlRST0wJCTB4MTQKKyNkZWZpbmUgQUlPMTJfOF9BRENfVFJJR0dFUl9DT05UUk9MCTB4MTUKKyNkZWZpbmUgQUlPMTJfOF9UUklHR0VSCQkJMHgxNgorI2RlZmluZSBBSU8xMl84X1BPV0VSCQkJMHgxNworCisjZGVmaW5lIFNUQVRVU19BRENfRU9DCQkJMHg4MAorCisjZGVmaW5lIEFEQ19NT0RFX05PUk1BTAkJCTB4MDAKKyNkZWZpbmUgQURDX01PREVfSU5URVJOQUxfQ0xPQ0sJCTB4NDAKKyNkZWZpbmUgQURDX01PREVfU1RBTkRCWQkJMHg4MAorI2RlZmluZSBBRENfTU9ERV9QT1dFUkRPV04JCTB4QzAKKworI2RlZmluZSBEQUNfRU5BQkxFCQkJMHgxOAorCitzdHJ1Y3QgYWlvMTJfOF9ib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFpbzEyXzhfYm9hcmR0eXBlIGJvYXJkX3R5cGVzW10gPSB7CisJeworICAgICAgbmFtZToJImFpb19haW8xMl84In0sCit9OworCisjZGVmaW5lCXRoaXNib2FyZAkoKGNvbnN0IHN0cnVjdCBhaW8xMl84X2JvYXJkdHlwZSAgKikgZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBhaW8xMl84X3ByaXZhdGUgeworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1s0XTsKK307CisKKyNkZWZpbmUgZGV2cHJpdgkoKHN0cnVjdCBhaW8xMl84X3ByaXZhdGUgKikgZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2FpX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGNoYXIgY29udHJvbCA9CisJCUFEQ19NT0RFX05PUk1BTCB8CisJCShDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykgPDwgMykgfCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vcmVhZCBzdGF0dXMgdG8gY2xlYXIgRU9DIGxhdGNoCisJaW5iKGRldi0+aW9iYXNlICsgQUlPMTJfOF9TVEFUVVMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlpbnQgdGltZW91dCA9IDU7CisKKwkJLy8gU2V0dXAgYW5kIHN0YXJ0IGNvbnZlcnNpb24KKwkJb3V0Yihjb250cm9sLCBkZXYtPmlvYmFzZSArIEFJTzEyXzhfQURDKTsKKworCQkvLyBXYWl0IGZvciBjb252ZXJzaW9uIHRvIGNvbXBsZXRlCisJCXdoaWxlICh0aW1lb3V0ICYmCisJCQkhKGluYihkZXYtPmlvYmFzZSArIEFJTzEyXzhfU1RBVFVTKSAmIFNUQVRVU19BRENfRU9DKSkgeworCQkJdGltZW91dC0tOworCQkJcHJpbnRrKCJ0aW1lb3V0ICVkXG4iLCB0aW1lb3V0KTsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgIkFEQyB0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWRhdGFbbl0gPSBpbncoZGV2LT5pb2Jhc2UgKyBBSU8xMl84X0FEQykgJiAweDBGRkY7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2FvX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCB2YWwgPSBkZXZwcml2LT5hb19yZWFkYmFja1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gdmFsOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2FvX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGRldi0+aW9iYXNlICsgQUlPMTJfOF9EQUNfMCArICgyICogY2hhbik7CisKKwkvL2VuYWJsZSBEQUNzCisJb3V0YigweDAxLCBkZXYtPmlvYmFzZSArIERBQ19FTkFCTEUpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKGRhdGFbaV0gJiAweEZGLCBwb3J0KTsJLy8gTFNCCisJCW91dGIoKGRhdGFbaV0gPj4gOCkgJiAweDBGLCBwb3J0ICsgMSk7CS8vIE1TQgorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWlvX2FpbzEyXzggPSB7CisJNCwKKwl7CisJCQlVTklfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJfQorfTsKKworc3RhdGljIGludCBhaW9fYWlvMTJfOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCAyNCwgImFpb19haW8xMl84IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhaW8xMl84X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9ICZkZXYtPnN1YmRldmljZXNbMF07CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2Fpb19haW8xMl84OworCXMtPmluc25fcmVhZCA9IGFpb19haW8xMl84X2FpX3JlYWQ7CisKKwlzID0gJmRldi0+c3ViZGV2aWNlc1sxXTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWlvX2FpbzEyXzg7CisJcy0+aW5zbl9yZWFkID0gYWlvX2FpbzEyXzhfYW9fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gYWlvX2FpbzEyXzhfYW9fd3JpdGU7CisKKwlzID0gJmRldi0+c3ViZGV2aWNlc1syXTsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2LT5pb2Jhc2UgKyBBSU8xMl84X0RJT18wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgJmRldi0+c3ViZGV2aWNlc1syXSk7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgMjQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2Fpb19haW8xMl84ID0geworICAgICAgZHJpdmVyX25hbWU6ImFpb19haW8xMl84IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphaW9fYWlvMTJfOF9hdHRhY2gsCisgICAgICBkZXRhY2g6YWlvX2FpbzEyXzhfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmRfdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczoxLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYWlvMTJfOF9ib2FyZHR5cGUpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9haW9fYWlvMTJfOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjBmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKworICAgIGNvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKKworICAgIERyaXZlciBmb3IgQWNjZXMgSS9PIFByb2R1Y3RzIFBDLTEwNCBBSU8tSUlSTy0xNiBEaWdpdGFsIEkvTyBib2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNiBDJkMgVGVjaG5vbG9naWVzLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCisKK0RyaXZlcjogYWlvX2lpcm9fMTYKK0Rlc2NyaXB0aW9uOiBBY2NlcyBJL08gUHJvZHVjdHMgUEMtMTA0IElJUk8xNiBSZWxheSBBbmQgSXNvbGF0ZWQgSW5wdXQgQm9hcmQKK0F1dGhvcjogWmFjaGFyeSBXYXJlIDx6YWNoLndhcmVAY2N0ZWNobm9sLmNvbT4KK0RldmljZXM6CisgW0FjY2VzIEkvT10gUEMtMTA0IEFJTzEyLTgKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBBSU9fSUlST18xNl9TSVpFCTB4MDgKKyNkZWZpbmUgQUlPX0lJUk9fMTZfUkVMQVlfMF83CTB4MDAKKyNkZWZpbmUgQUlPX0lJUk9fMTZfSU5QVVRfMF83CTB4MDEKKyNkZWZpbmUgQUlPX0lJUk9fMTZfSVJRCQkweDAyCisjZGVmaW5lIEFJT19JSVJPXzE2X1JFTEFZXzhfMTUJMHgwNAorI2RlZmluZSBBSU9fSUlST18xNl9JTlBVVF84XzE1CTB4MDUKKworc3RydWN0IGFpb19paXJvXzE2X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkb187CisJaW50IGRpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhaW9faWlyb18xNl9ib2FyZCBhaW9faWlyb18xNl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImFpb19paXJvXzE2IiwKKwkgICAgICBkaToJMTYsCisgICAgICBkb186CTE2fSwKK307CisKKyNkZWZpbmUJdGhpc2JvYXJkCSgoY29uc3Qgc3RydWN0IGFpb19paXJvXzE2X2JvYXJkICopIGRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYWlvX2lpcm9fMTZfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZQlkZXZwcml2CSgoc3RydWN0IGFpb19paXJvXzE2X3ByaXZhdGUgKikgZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKK3N0YXRpYyBpbnQgYWlvX2lpcm9fMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9haW9faWlyb18xNiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhaW9faWlyb18xNiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YWlvX2lpcm9fMTZfYXR0YWNoLAorICAgICAgZGV0YWNoOmFpb19paXJvXzE2X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmFpb19paXJvXzE2X2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYWlvX2lpcm9fMTZfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihhaW9faWlyb18xNl9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBhaW9faWlyb18xNl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhaW9faWlyb18xNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IGFpb19paXJvXzE2OiAiLCBkZXYtPm1pbm9yKTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEFJT19JSVJPXzE2X1NJWkUsIGRldi0+Ym9hcmRfbmFtZSkpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhaW9faWlyb18xNl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gYWlvX2lpcm9fMTZfZGlvX2luc25fYml0c193cml0ZTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gYWlvX2lpcm9fMTZfZGlvX2luc25fYml0c19yZWFkOworCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhaW9faWlyb18xNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogYWlvX2lpcm9fMTY6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBSU9fSUlST18xNl9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBBSU9fSUlST18xNl9SRUxBWV8wXzcpOworCQlvdXRiKChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsCisJCQlkZXYtPmlvYmFzZSArIEFJT19JSVJPXzE2X1JFTEFZXzhfMTUpOworCX0KKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gMDsKKwlkYXRhWzFdIHw9IGluYihkZXYtPmlvYmFzZSArIEFJT19JSVJPXzE2X0lOUFVUXzBfNyk7CisJZGF0YVsxXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBBSU9fSUlST18xNl9JTlBVVF84XzE1KSA8PCA4OworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWlvX2lpcm9fMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzNjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW05NTEzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAgICBtb2R1bGUvYW05NTEzLmgKKyAgICB2YWx1ZSBhZGRlZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZm9yIEFtOTUxMyB0aW1lciBjaGlwCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgX0FNOTUxM19IXworI2RlZmluZSBfQU05NTEzX0hfCisKKyNpZiAwCisKKy8qCisgKglCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSwgdGhlIGZvbGxvd2luZyBuZWVkIHRvIGJlIGRlZmluZWQ6CisgKi8KKyNkZWZpbmUgQW05NTEzXzhCSVRCVVMgeHh4CisvKiBvciAqLworI2RlZmluZSBBbTk1MTNfMTZCSVRCVVMgeHh4CisKKyNkZWZpbmUgQW05NTEzX291dHB1dF9jb250cm9sKGEpCXh4eAorI2RlZmluZSBBbTk1MTNfaW5wdXRfc3RhdHVzKCkJCXh4eAorI2RlZmluZSBBbTk1MTNfb3V0cHV0X2RhdGEoYSkJCXh4eAorI2RlZmluZSBBbTk1MTNfaW5wdXRfZGF0YSgpCQl4eHgKKworI2VuZGlmCisKKy8qCisgKgorICovCisKKyNpZmRlZiBBbTk1MTNfOEJJVEJVUworCisjZGVmaW5lIEFtOTUxM193cml0ZV9yZWdpc3RlcihyZWcsdmFsKQkJCQlcCisJZG97CQkJCQkJCVwKKwkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAorCQlBbTk1MTNfb3V0cHV0X2RhdGEodmFsPj44KTsJCQlcCisJCUFtOTUxM19vdXRwdXRfZGF0YSh2YWwmMHhmZik7CQkJXAorCX13aGlsZSgwKQorCisjZGVmaW5lIEFtOTUxM19yZWFkX3JlZ2lzdGVyKHJlZyx2YWwpCQkJCVwKKwlkb3sJCQkJCQkJXAorCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCisJCXZhbD1BbTk1MTNfaW5wdXRfZGF0YSgpPDw4OwkJCVwKKwkJdmFsfD1BbTk1MTNfaW5wdXRfZGF0YSgpOwkJCVwKKwl9d2hpbGUoMCkKKworI2Vsc2UgLyogQW05NTEzXzE2QklUQlVTICovCisKKyNkZWZpbmUgQW05NTEzX3dyaXRlX3JlZ2lzdGVyKHJlZyx2YWwpCQkJCVwKKwlkb3sJCQkJCQkJXAorCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCisJCUFtOTUxM19vdXRwdXRfZGF0YSh2YWwpOwkJCVwKKwl9d2hpbGUoMCkKKworI2RlZmluZSBBbTk1MTNfcmVhZF9yZWdpc3RlcihyZWcsdmFsKQkJCQlcCisJZG97CQkJCQkJCVwKKwkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAorCQl2YWw9QW05NTEzX2lucHV0X2RhdGEoKTsJCQlcCisJfXdoaWxlKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbWNjX3M1OTMzLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWZmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzMy5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FtY2NfczU5MzMuaAorCisgICAgU3R1ZmYgZm9yIEFNQ0MgUzU5MzMgUENJIENvbnRyb2xsZXIKKworICAgIEF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisKKyAgICBJbnNwaXJhdGVkIGZyb20gZ2VuZXJhbC1wdXJwb3NlIEFNQ0MgUzU5MzMgUENJIE1hdGNobWFrZXIgZHJpdmVyCisgICAgbWFkZSBieSBBbmRyZWEgQ2lzdGVybmlubyAgPGFjaXN0ZXJAcGNhcGUxLnBpLmluZm4uaXQ+CisgICAgYW5kIGFzIHJlc3VsdCBvZiBlc3Bpb25hZ2UgZnJvbSBNSVRFIGNvZGUgbWFkZSBieSBEYXZpZCBBLiBTY2hsZWVmLgorICAgIFRoYW5rcyB0byBBTUNDIGZvciB0aGVpciBvbi1saW5lIGRvY3VtZW50YXRpb24gYW5kIGJ1cyBtYXN0ZXIgRE1BCisgICAgZXhhbXBsZS4KKyovCisKKyNpZm5kZWYgX0FNQ0NfUzU5MzNfSF8KKyNkZWZpbmUgX0FNQ0NfUzU5MzNfSF8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlciBPZmZzZXRzIC0gUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjEgICAgICAgICAweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjIgICAgICAgICAweDA0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjMgICAgICAgICAweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjQgICAgICAgICAweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjEgICAgICAgICAweDEwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjIgICAgICAgICAweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjMgICAgICAgICAweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjQgICAgICAgICAweDFjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0ZJRk8gICAgICAgICAweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XQVIgICAgICAgICAweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XVEMgICAgICAgICAweDI4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX01SQVIgICAgICAgICAweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01SVEMgICAgICAgICAweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01CRUYgICAgICAgICAweDM0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lOVENTUiAgICAgICAweDM4CisjZGVmaW5lICBBTUNDX09QX1JFR19JTlRDU1JfU1JDICAoQU1DQ19PUF9SRUdfSU5UQ1NSICsgMikJLyogSU5UIHNvdXJjZSAqLworI2RlZmluZSAgQU1DQ19PUF9SRUdfSU5UQ1NSX0ZFQyAgKEFNQ0NfT1BfUkVHX0lOVENTUiArIDMpCS8qIEZJRk8gY3RybCAqLworI2RlZmluZSBBTUNDX09QX1JFR19NQ1NSICAgICAgICAgMHgzYworI2RlZmluZSAgQU1DQ19PUF9SRUdfTUNTUl9OVkRBVEEgKEFNQ0NfT1BfUkVHX01DU1IgKyAyKQkvKiBEYXRhIGluIGJ5dGUgMiAqLworI2RlZmluZSAgQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCAgKEFNQ0NfT1BfUkVHX01DU1IgKyAzKQkvKiBDb21tYW5kIGluIGJ5dGUgMyAqLworCisjZGVmaW5lIEFNQ0NfRklGT19ERVBUSF9EV09SRAk4CisjZGVmaW5lIEFNQ0NfRklGT19ERVBUSF9CWVRFUwkoOCAqIHNpemVvZiAodTMyKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIC0gUENJIEludGVycnVwdCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElOVENTUl9PVVRCT1hfQllURSh4KQkoKHgpICYgMHgzKQorI2RlZmluZSBJTlRDU1JfT1VUQk9YX1NFTEVDVCh4KQkoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgSU5UQ1NSX09VVEJPWF9FTVBUWV9JTlQJMHgxMAkvLyBlbmFibGUgb3V0Ym94IGVtcHR5IGludGVycnVwdAorI2RlZmluZSBJTlRDU1JfSU5CT1hfQllURSh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgSU5UQ1NSX0lOQk9YX1NFTEVDVCh4KQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIElOVENTUl9JTkJPWF9GVUxMX0lOVAkweDEwMDAJLy8gZW5hYmxlIGluYm94IGZ1bGwgaW50ZXJydXB0CisjZGVmaW5lIElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUwkweDIwMDAwCS8vIHJlYWQsIG9yIHdyaXRlIGNsZWFyIGluYm94IGZ1bGwgaW50ZXJydXB0CisjZGVmaW5lIElOVENTUl9JTlRSX0FTU0VSVEVECTB4ODAwMDAwCS8vIHJlYWQgb25seSwgaW50ZXJydXB0IGFzc2VydGVkCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIFBDSSBub24tdm9sYXRpbGUgcmFtIGNvbW1hbmQgcmVnaXN0ZXIgKGJ5dGUgMyBvZiBtYXN0ZXIgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIpICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUNTUl9OVl9MT0FEX0xPV19BRERSCTB4MAorI2RlZmluZSBNQ1NSX05WX0xPQURfSElHSF9BRERSCTB4MjAKKyNkZWZpbmUgTUNTUl9OVl9XUklURQkweDQwCisjZGVmaW5lIE1DU1JfTlZfUkVBRAkweDYwCisjZGVmaW5lIE1DU1JfTlZfTUFTSwkweDYwCisjZGVmaW5lIE1DU1JfTlZfRU5BQkxFCTB4ODAKKyNkZWZpbmUgTUNTUl9OVl9CVVNZCU1DU1JfTlZfRU5BQkxFCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXJzIFNpemUgLSBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19TSVpFCSA2NAkvKiBpbiBieXRlcyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVyIE9mZnNldHMgLSBBZGQtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjEgICAgICAgICAweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMyAgICAgICAgIDB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjQgICAgICAgICAweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CMiAgICAgICAgIDB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjMgICAgICAgICAweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19BRklGTyAgICAgICAgIDB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XQVIgICAgICAgICAweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FQVEEgICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19BUFREICAgICAgICAgIDB4MmMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SQVIgICAgICAgICAweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU5UICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUdDU1RTICAgICAgICAweDNjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV1RDICAgICAgICAgMHg1OAorI2RlZmluZSBBTUNDX09QX1JFR19BTVJUQyAgICAgICAgIDB4NWMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIC0gQWRkLW9uIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFHQ1NUU19DT05UUk9MX01BU0sJMHhmZmZmZjAwMAorI2RlZmluZSAgQUdDU1RTX05WX0FDQ19NQVNLCTB4ZTAwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19SRVNFVF9NQVNLCTB4MGUwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9EQV9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgIEFHQ1NUU19CSVNUX01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSBBR0NTVFNfU1RBVFVTX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSAgQUdDU1RTX1RDWkVST19NQVNLCTB4MDAwMDAwYzAKKyNkZWZpbmUgIEFHQ1NUU19GSUZPX1NUX01BU0sJMHgwMDAwMDAzZgorCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9NQkZMQUdTCTB4MDgwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX1AyQV9GSUZPCTB4MDQwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0EyUF9GSUZPCTB4MDIwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0ZJRk9TCShBR0NTVFNfUkVTRVRfQTJQX0ZJRk8gfCBBR0NTVFNfUkVTRVRfUDJBX0ZJRk8pCisKKyNkZWZpbmUgQUdDU1RTX0EyUF9UQ09VTlQJMHgwMDAwMDA4MAorI2RlZmluZSBBR0NTVFNfUDJBX1RDT1VOVAkweDAwMDAwMDQwCisKKyNkZWZpbmUgQUdDU1RTX0ZTX1AyQV9FTVBUWQkweDAwMDAwMDIwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfSEFMRgkweDAwMDAwMDEwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRlVMTAkweDAwMDAwMDA4CisKKyNkZWZpbmUgQUdDU1RTX0ZTX0EyUF9FTVBUWQkweDAwMDAwMDA0CisjZGVmaW5lIEFHQ1NUU19GU19BMlBfSEFMRgkweDAwMDAwMDAyCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRlVMTAkweDAwMDAwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIEFkZC1vbiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFJTlRfSU5UX01BU0sJCTB4MDBmZjAwMDAKKyNkZWZpbmUgQUlOVF9TRUxfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSAgQUlOVF9JU19FTlNFTF9NQVNLCTB4MDAwMDFmMWYKKworI2RlZmluZSBBSU5UX0lOVF9BU1NFUlRFRAkweDAwODAwMDAwCisjZGVmaW5lIEFJTlRfQk1fRVJST1IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgQUlOVF9CSVNUX0lOVAkJMHgwMDEwMDAwMAorCisjZGVmaW5lIEFJTlRfUlRfQ09NUExFVEUJMHgwMDA4MDAwMAorI2RlZmluZSBBSU5UX1dUX0NPTVBMRVRFCTB4MDAwNDAwMDAKKworI2RlZmluZSBBSU5UX09VVF9NQl9JTlQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQUlOVF9JTl9NQl9JTlQJCTB4MDAwMTAwMDAKKworI2RlZmluZSBBSU5UX1JFQURfQ09NUEwJCTB4MDAwMDgwMDAKKyNkZWZpbmUgQUlOVF9XUklURV9DT01QTAkweDAwMDA0MDAwCisKKyNkZWZpbmUgQUlOVF9PTUJfRU5BQkxFIAkweDAwMDAxMDAwCisjZGVmaW5lIEFJTlRfT01CX1NFTEVDVCAJMHgwMDAwMGMwMAorI2RlZmluZSBBSU5UX09NQl9CWVRFCQkweDAwMDAwMzAwCisKKyNkZWZpbmUgQUlOVF9JTUJfRU5BQkxFIAkweDAwMDAwMDEwCisjZGVmaW5lIEFJTlRfSU1CX1NFTEVDVCAJMHgwMDAwMDAwYworI2RlZmluZSBBSU5UX0lNQl9CWVRFCQkweDAwMDAwMDAzCisKKy8vIHRoZXNlIGFyZSBiaXRzIGZyb20gdmFyaW91cyBkaWZmZXJlbnQgcmVnaXN0ZXJzLCBuZWVkcyBjbGVhbnVwIFhYWAorLyogRW5hYmxlIEJ1cyBNYXN0ZXJpbmcgKi8KKyNkZWZpbmUgRU5fQTJQX1RSQU5TRkVSUwkweDAwMDAwNDAwCisvKiBGSUZPIEZsYWcgUmVzZXQgKi8KKyNkZWZpbmUgUkVTRVRfQTJQX0ZMQUdTCQkweDA0MDAwMDAwTAorLyogRklGTyBSZWxhdGl2ZSBQcmlvcml0eSAqLworI2RlZmluZSBBMlBfSElfUFJJT1JJVFkJCTB4MDAwMDAxMDBMCisvKiBJZGVudGlmeSBJbnRlcnJ1cHQgU291cmNlcyAqLworI2RlZmluZSBBTllfUzU5M1hfSU5UCQkweDAwODAwMDAwTAorI2RlZmluZSBSRUFEX1RDX0lOVAkJMHgwMDA4MDAwMEwKKyNkZWZpbmUgV1JJVEVfVENfSU5UCQkweDAwMDQwMDAwTAorI2RlZmluZSBJTl9NQl9JTlQJCTB4MDAwMjAwMDBMCisjZGVmaW5lIE1BU1RFUl9BQk9SVF9JTlQJMHgwMDEwMDAwMEwKKyNkZWZpbmUgVEFSR0VUX0FCT1JUX0lOVAkweDAwMjAwMDAwTAorI2RlZmluZSBCVVNfTUFTVEVSX0lOVAkJMHgwMDIwMDAwMEwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1NWUyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYwpAQCAtMCwwICsxLDE0ODMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKKyAgICBEcml2ZXIgZm9yIEFtcGxpY29uIFBDMjcyRSBhbmQgUENJMjcyIERJTyBib2FyZHMuCisgICAgKFN1cHBvcnQgZm9yIG90aGVyIGJvYXJkcyBpbiBBbXBsaWNvbiAyMDAgc2VyaWVzIG1heSBiZSBhZGRlZCBhdAorICAgIGEgbGF0ZXIgZGF0ZSwgZS5nLiBQQ0kyMTUuKQorCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IE1FViBMdGQuIDxodHRwOi8vd3d3Lm1ldi5jby51ay8+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFtcGxjX2RpbzIwMAorRGVzY3JpcHRpb246IEFtcGxpY29uIDIwMCBTZXJpZXMgRGlnaXRhbCBJL08KK0F1dGhvcjogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+CitEZXZpY2VzOiBbQW1wbGljb25dIFBDMjEyRSAocGMyMTJlKSwgUEMyMTRFIChwYzIxNGUpLCBQQzIxNUUgKHBjMjE1ZSksCisgIFBDSTIxNSAocGNpMjE1IG9yIGFtcGxjX2RpbzIwMCksIFBDMjE4RSAocGMyMThlKSwgUEMyNzJFIChwYzI3MmUpLAorICBQQ0kyNzIgKHBjaTI3MiBvciBhbXBsY19kaW8yMDApCitVcGRhdGVkOiBXZWQsIDIyIE9jdCAyMDA4IDEzOjM2OjAyICswMTAwCitTdGF0dXM6IHdvcmtzCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDMjEyRSwgUEMyMTRFLCBQQzIxNUUsIFBDMjE4RSwgUEMyNzJFOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgYnV0IGNvbW1hbmRzIHdvbid0IHdvcmsgd2l0aG91dCBpdCkKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjE1LCBQQ0kyNzI6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlIHdpbGwKKyAgYmUgdXNlZC4KKworUGFzc2luZyBhIHplcm8gZm9yIGFuIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBsZWF2aW5nIGl0IHVuc3BlY2lmaWVkLgorCitTVUJERVZJQ0VTCisKKyAgICAgICAgICAgICAgICAgICAgUEMyMThFICAgICAgICAgUEMyMTJFICAgICAgUEMyMTVFL1BDSTIxNQorICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCisgIFN1YmRldmljZXMgICAgICAgICAgIDcgICAgICAgICAgICAgIDYgICAgICAgICAgICAgIDUKKyAgIDAgICAgICAgICAgICAgICAgIENUUi1YMSAgICAgICAgIFBQSS1YICAgICAgICAgIFBQSS1YCisgICAxICAgICAgICAgICAgICAgICBDVFItWDIgICAgICAgICBDVFItWTEgICAgICAgICBQUEktWQorICAgMiAgICAgICAgICAgICAgICAgQ1RSLVkxICAgICAgICAgQ1RSLVkyICAgICAgICAgQ1RSLVoxCisgICAzICAgICAgICAgICAgICAgICBDVFItWTIgICAgICAgICBDVFItWjEgICAgICAgICBDVFItWjIKKyAgIDQgICAgICAgICAgICAgICAgIENUUi1aMSAgICAgICAgIENUUi1aMiAgICAgICBJTlRFUlJVUFQKKyAgIDUgICAgICAgICAgICAgICAgIENUUi1aMiAgICAgICBJTlRFUlJVUFQKKyAgIDYgICAgICAgICAgICAgICBJTlRFUlJVUFQKKworICAgICAgICAgICAgICAgICAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCisgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKyAgU3ViZGV2aWNlcyAgICAgICAgICAgNCAgICAgICAgICAgICAgNAorICAgMCAgICAgICAgICAgICAgICAgUFBJLVggICAgICAgICAgUFBJLVgKKyAgIDEgICAgICAgICAgICAgICAgIFBQSS1ZICAgICAgICAgIFBQSS1ZCisgICAyICAgICAgICAgICAgICAgICBDVFItWjEqICAgICAgICBQUEktWgorICAgMyAgICAgICAgICAgICAgIElOVEVSUlVQVCogICAgIElOVEVSUlVQVAorCitFYWNoIFBQSSBpcyBhIDgyNTUgY2hpcCBwcm92aWRpbmcgMjQgRElPIGNoYW5uZWxzLiAgVGhlIERJTyBjaGFubmVscworYXJlIGNvbmZpZ3VyYWJsZSBhcyBpbnB1dHMgb3Igb3V0cHV0cyBpbiBmb3VyIGdyb3VwczoKKworICBQb3J0IEEgIC0gY2hhbm5lbHMgIDAgdG8gIDcKKyAgUG9ydCBCICAtIGNoYW5uZWxzICA4IHRvIDE1CisgIFBvcnQgQ0wgLSBjaGFubmVscyAxNiB0byAxOQorICBQb3J0IENIIC0gY2hhbm5lbHMgMjAgdG8gMjMKKworT25seSBtb2RlIDAgb2YgdGhlIDgyNTUgY2hpcHMgaXMgc3VwcG9ydGVkLgorCitFYWNoIENUUiBpcyBhIDgyNTQgY2hpcCBwcm92aWRpbmcgMyAxNi1iaXQgY291bnRlciBjaGFubmVscy4gIEVhY2gKK2NoYW5uZWwgaXMgY29uZmlndXJlZCBpbmRpdmlkdWFsbHkgd2l0aCBJTlNOX0NPTkZJRyBpbnN0cnVjdGlvbnMuICBUaGUKK3NwZWNpZmljIHR5cGUgb2YgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbiBpcyBzcGVjaWZpZWQgaW4gZGF0YVswXS4KK1NvbWUgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbnMgZXhwZWN0IGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluCitkYXRhWzFdOyBvdGhlcnMgcmV0dXJuIGEgdmFsdWUgaW4gZGF0YVsxXS4gIFRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbgoraW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERS4gIFNldHMgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIG1vZGUgYW5kCisgICAgQkNEL2JpbmFyeSBzZXR0aW5nIHNwZWNpZmllZCBpbiBkYXRhWzFdLgorCisgIElOU05fQ09ORklHXzgyNTRfUkVBRF9TVEFUVVMuICBSZWFkcyB0aGUgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlIGZvciB0aGUKKyAgICBjb3VudGVyIGNoYW5uZWwgaW50byBkYXRhWzFdLgorCisgIElOU05fQ09ORklHX1NFVF9DTE9DS19TUkMuICBTZXRzIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjbG9jayBzb3VyY2UgYXMKKyAgICBzcGVjaWZpZWQgaW4gZGF0YVsxXSAodGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHZhbHVlKS4gIE5vdAorICAgIHN1cHBvcnRlZCBvbiBQQzIxNEUuICBGb3IgdGhlIG90aGVyIGJvYXJkcywgdmFsaWQgY2xvY2sgc291cmNlcyBhcmUKKyAgICAwIHRvIDcgYXMgZm9sbG93czoKKworICAgICAgMC4gIENMSyBuLCB0aGUgY291bnRlciBjaGFubmVsJ3MgZGVkaWNhdGVkIENMSyBpbnB1dCBmcm9tIHRoZSBTSzEKKyAgICAgICAgY29ubmVjdG9yLiAgKE4uQi4gZm9yIG90aGVyIHZhbHVlcywgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIENMS24KKyAgICAgICAgcGluIG9uIHRoZSBTSzEgY29ubmVjdG9yIGlzIGFuIG91dHB1dCEpCisgICAgICAxLiAgSW50ZXJuYWwgMTAgTUh6IGNsb2NrLgorICAgICAgMi4gIEludGVybmFsIDEgTUh6IGNsb2NrLgorICAgICAgMy4gIEludGVybmFsIDEwMCBrSHogY2xvY2suCisgICAgICA0LiAgSW50ZXJuYWwgMTAga0h6IGNsb2NrLgorICAgICAgNS4gIEludGVybmFsIDEga0h6IGNsb2NrLgorICAgICAgNi4gIE9VVCBuLTEsIHRoZSBvdXRwdXQgb2YgY291bnRlciBjaGFubmVsIG4tMSAoc2VlIG5vdGUgMSBiZWxvdykuCisgICAgICA3LiAgRXh0IENsb2NrLCB0aGUgY291bnRlciBjaGlwJ3MgZGVkaWNhdGVkIEV4dCBDbG9jayBpbnB1dCBmcm9tCisgICAgICAgIHRoZSBTSzEgY29ubmVjdG9yLiAgVGhpcyBwaW4gaXMgc2hhcmVkIGJ5IGFsbCB0aHJlZSBjb3VudGVyCisgICAgICAgIGNoYW5uZWxzIG9uIHRoZSBjaGlwLgorCisgIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkMuICBSZXR1cm5zIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjdXJyZW50CisgICAgY2xvY2sgc291cmNlIGluIGRhdGFbMV0uICBGb3IgaW50ZXJuYWwgY2xvY2sgc291cmNlcywgZGF0YVsyXSBpcyBzZXQKKyAgICB0byB0aGUgcGVyaW9kIGluIG5zLgorCisgIElOU05fQ09ORklHX1NFVF9HQVRFX1NSQy4gIFNldHMgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIGdhdGUgc291cmNlIGFzCisgICAgc3BlY2lmaWVkIGluIGRhdGFbMl0gKHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyB2YWx1ZSkuICBOb3QKKyAgICBzdXBwb3J0ZWQgb24gUEMyMTRFLiAgRm9yIHRoZSBvdGhlciBib2FyZHMsIHZhbGlkIGdhdGUgc291cmNlcyBhcmUgMAorICAgIHRvIDcgYXMgZm9sbG93czoKKworICAgICAgMC4gIFZDQyAoaW50ZXJuYWwgKzVWIGQuYy4pLCBpLmUuIGdhdGUgcGVybWFuZW50bHkgZW5hYmxlZC4KKyAgICAgIDEuICBHTkQgKGludGVybmFsIDBWIGQuYy4pLCBpLmUuIGdhdGUgcGVybWFuZW50bHkgZGlzYWJsZWQuCisgICAgICAyLiAgR0FUIG4sIHRoZSBjb3VudGVyIGNoYW5uZWwncyBkZWRpY2F0ZWQgR0FUIGlucHV0IGZyb20gdGhlIFNLMQorICAgICAgICBjb25uZWN0b3IuICAoTi5CLiBmb3Igb3RoZXIgdmFsdWVzLCB0aGUgY291bnRlciBjaGFubmVsJ3MgR0FUbgorICAgICAgICBwaW4gb24gdGhlIFNLMSBjb25uZWN0b3IgaXMgYW4gb3V0cHV0ISkKKyAgICAgIDMuICAvT1VUIG4tMiwgdGhlIGludmVydGVkIG91dHB1dCBvZiBjb3VudGVyIGNoYW5uZWwgbi0yIChzZWUgbm90ZQorICAgICAgICAyIGJlbG93KS4KKyAgICAgIDQuICBSZXNlcnZlZC4KKyAgICAgIDUuICBSZXNlcnZlZC4KKyAgICAgIDYuICBSZXNlcnZlZC4KKyAgICAgIDcuICBSZXNlcnZlZC4KKworICBJTlNOX0NPTkZJR19HRVRfR0FURV9TUkMuICBSZXR1cm5zIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjdXJyZW50IGdhdGUKKyAgICBzb3VyY2UgaW4gZGF0YVsyXS4KKworQ2xvY2sgYW5kIGdhdGUgaW50ZXJjb25uZWN0aW9uIG5vdGVzOgorCisgIDEuICBDbG9jayBzb3VyY2UgT1VUIG4tMSBpcyB0aGUgb3V0cHV0IG9mIHRoZSBwcmVjZWRpbmcgY2hhbm5lbCBvbiB0aGUKKyAgc2FtZSBjb3VudGVyIHN1YmRldmljZSBpZiBuID4gMCwgb3IgdGhlIG91dHB1dCBvZiBjaGFubmVsIDIgb24gdGhlCisgIHByZWNlZGluZyBjb3VudGVyIHN1YmRldmljZSAoc2VlIG5vdGUgMykgaWYgbiA9IDAuCisKKyAgMi4gIEdhdGUgc291cmNlIC9PVVQgbi0yIGlzIHRoZSBpbnZlcnRlZCBvdXRwdXQgb2YgY2hhbm5lbCAwIG9uIHRoZQorICBzYW1lIGNvdW50ZXIgc3ViZGV2aWNlIGlmIG4gPSAyLCBvciB0aGUgaW52ZXJ0ZWQgb3V0cHV0IG9mIGNoYW5uZWwgbisxCisgIG9uIHRoZSBwcmVjZWRpbmcgY291bnRlciBzdWJkZXZpY2UgKHNlZSBub3RlIDMpIGlmIG4gPCAyLgorCisgIDMuICBUaGUgY291bnRlciBzdWJkZXZpY2VzIGFyZSBjb25uZWN0ZWQgaW4gYSByaW5nLCBzbyB0aGUgaGlnaGVzdAorICBjb3VudGVyIHN1YmRldmljZSBwcmVjZWRlcyB0aGUgbG93ZXN0LgorCitUaGUgJ0lOVEVSUlVQVCcgc3ViZGV2aWNlIHByZXRlbmRzIHRvIGJlIGEgZGlnaXRhbCBpbnB1dCBzdWJkZXZpY2UuICBUaGUKK2RpZ2l0YWwgaW5wdXRzIGNvbWUgZnJvbSB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4gIFRoZSBudW1iZXIgb2YKK2NoYW5uZWxzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgc291cmNlcy4gIFRoZSBQQzIxNEUgZG9lcyBub3QKK2hhdmUgYW4gaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlcjsgc2VlIG5vdGVzIG9uICdJTlRFUlJVUFQgU09VUkNFUycKK2JlbG93LgorCitJTlRFUlJVUFQgU09VUkNFUworCisgICAgICAgICAgICAgICAgICAgIFBDMjE4RSAgICAgICAgIFBDMjEyRSAgICAgIFBDMjE1RS9QQ0kyMTUKKyAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQorICBTb3VyY2VzICAgICAgICAgICAgICA2ICAgICAgICAgICAgICA2ICAgICAgICAgICAgICA2CisgICAwICAgICAgICAgICAgICBDVFItWDEtT1VUICAgICAgUFBJLVgtQzAgICAgICAgUFBJLVgtQzAKKyAgIDEgICAgICAgICAgICAgIENUUi1YMi1PVVQgICAgICBQUEktWC1DMyAgICAgICBQUEktWC1DMworICAgMiAgICAgICAgICAgICAgQ1RSLVkxLU9VVCAgICAgQ1RSLVkxLU9VVCAgICAgIFBQSS1ZLUMwCisgICAzICAgICAgICAgICAgICBDVFItWTItT1VUICAgICBDVFItWTItT1VUICAgICAgUFBJLVktQzMKKyAgIDQgICAgICAgICAgICAgIENUUi1aMS1PVVQgICAgIENUUi1aMS1PVVQgICAgIENUUi1aMS1PVVQKKyAgIDUgICAgICAgICAgICAgIENUUi1aMi1PVVQgICAgIENUUi1aMi1PVVQgICAgIENUUi1aMi1PVVQKKworICAgICAgICAgICAgICAgICAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCisgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKyAgU291cmNlcyAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgNgorICAgMCAgICAgICAgICAgICAgIEpVTVBFUi1KNSAgICAgIFBQSS1YLUMwCisgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVgtQzMKKyAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEktWS1DMAorICAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQSS1ZLUMzCisgICA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVotQzAKKyAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEktWi1DMworCitXaGVuIGFuIGludGVycnVwdCBzb3VyY2UgaXMgZW5hYmxlZCBpbiB0aGUgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUKK3JlZ2lzdGVyLCBhIHJpc2luZyBlZGdlIG9uIHRoZSBzb3VyY2Ugc2lnbmFsIGxhdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcKK2JpdCB0byAxIGluIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorCitXaGVuIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlIGFzIGEgd2hvbGUgKGFjdHVhbGx5LCBqdXN0IHRoZQorNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzKSBnb2VzIGZyb20gemVybyB0byBub24temVybywgdGhlIGJvYXJkIHdpbGwKK2dlbmVyYXRlIGFuIGludGVycnVwdC4gIEZvciBsZXZlbC10cmlnZ2VyZWQgaGFyZHdhcmUgaW50ZXJydXB0cyAoUENJCitjYXJkKSwgdGhlIGludGVycnVwdCB3aWxsIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCB0aGUgaW50ZXJydXB0IHN0YXR1cworcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byB6ZXJvLiAgRm9yIGVkZ2UtdHJpZ2dlcmVkIGhhcmR3YXJlIGludGVycnVwdHMKKyhJU0EgY2FyZCksIG5vIGZ1cnRoZXIgaW50ZXJydXB0cyB3aWxsIG9jY3VyIHVudGlsIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCityZWdpc3RlciBpcyBjbGVhcmVkIHRvIHplcm8uICBUbyBjbGVhciBhIGJpdCB0byB6ZXJvIGluIHRoZSBpbnRlcnJ1cHQKK3N0YXR1cyByZWdpc3RlciwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGJlIGRpc2FibGVkCitpbiB0aGUgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgKHRoZXJlIGlzIG5vIHNlcGFyYXRlIGludGVycnVwdAorY2xlYXIgcmVnaXN0ZXIpLgorCitUaGUgUEMyMTRFIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgb3IgYW4KK2ludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXI7IGl0cyAnSU5URVJSVVBUJyBzdWJkZXZpY2UgaGFzIGEgc2luZ2xlCitjaGFubmVsIGFuZCBpdHMgaW50ZXJydXB0IHNvdXJjZSBpcyBzZWxlY3RlZCBieSB0aGUgcG9zaXRpb24gb2YganVtcGVyCitKNS4KKworQ09NTUFORFMKKworVGhlIGRyaXZlciBzdXBwb3J0cyBhIHJlYWQgc3RyZWFtaW5nIGFjcXVpc2l0aW9uIGNvbW1hbmQgb24gdGhlCisnSU5URVJSVVBUJyBzdWJkZXZpY2UuICBUaGUgY2hhbm5lbCBsaXN0IHNlbGVjdHMgdGhlIGludGVycnVwdCBzb3VyY2VzCit0byBiZSBlbmFibGVkLiAgQWxsIGNoYW5uZWxzIHdpbGwgYmUgc2FtcGxlZCB0b2dldGhlciAoY29udmVydF9zcmMgPT0KK1RSSUdfTk9XKS4gIFRoZSBzY2FuIGJlZ2lucyBhIHNob3J0IHRpbWUgYWZ0ZXIgdGhlIGhhcmR3YXJlIGludGVycnVwdAorb2NjdXJzLCBzdWJqZWN0IHRvIGludGVycnVwdCBsYXRlbmNpZXMgKHNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhULAorc2Nhbl9iZWdpbl9hcmcgPT0gMCkuICBUaGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCitpcyBwYWNrZWQgaW50byBhIHNob3J0IHZhbHVlLCBvbmUgYml0IHBlciByZXF1ZXN0ZWQgY2hhbm5lbCwgaW4gdGhlCitvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgY2hhbm5lbCBsaXN0LgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjaW5jbHVkZSAiODI1NS5oIgorI2luY2x1ZGUgIjgyNTMuaCIKKworI2RlZmluZSBESU8yMDBfRFJJVkVSX05BTUUJImFtcGxjX2RpbzIwMCIKKworLyogUENJIElEcyAqLworLyogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FNUExJQ09OIDB4MTRkYyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI3MiAweDAwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMTUgMHgwMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5WQUxJRCAweGZmZmYKKworLyogMjAwIHNlcmllcyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRElPMjAwX0lPX1NJWkUJCTB4MjAKKyNkZWZpbmUgRElPMjAwX1hDTEtfU0NFCQkweDE4CS8qIEdyb3VwIFggY2xvY2sgc2VsZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTzIwMF9ZQ0xLX1NDRQkJMHgxOQkvKiBHcm91cCBZIGNsb2NrIHNlbGVjdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBESU8yMDBfWkNMS19TQ0UJCTB4MWEJLyogR3JvdXAgWiBjbG9jayBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1hHQVRfU0NFCQkweDFiCS8qIEdyb3VwIFggZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1lHQVRfU0NFCQkweDFjCS8qIEdyb3VwIFkgZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1pHQVRfU0NFCQkweDFkCS8qIEdyb3VwIFogZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX0lOVF9TQ0UJCTB4MWUJLyogSW50ZXJydXB0IGVuYWJsZS9zdGF0dXMgcmVnaXN0ZXIgKi8KKworLyoKKyAqIE1hY3JvcyBmb3IgY29uc3RydWN0aW5nIHZhbHVlIGZvciBESU9fMjAwXz9DTEtfU0NFIGFuZAorICogRElPXzIwMF8/R0FUX1NDRSByZWdpc3RlcnM6CisgKgorICogJ3doaWNoJyBpczogMCBmb3IgQ1RSLVgxLCBDVFItWTEsIENUUi1aMTsgMSBmb3IgQ1RSLVgyLCBDVFItWTIgb3IgQ1RSLVoyLgorICogJ2NoYW4nIGlzIHRoZSBjaGFubmVsOiAwLCAxIG9yIDIuCisgKiAnc291cmNlJyBpcyB0aGUgc2lnbmFsIHNvdXJjZTogMCB0byA3LgorICovCisjZGVmaW5lIENMS19TQ0Uod2hpY2gsIGNoYW4sIHNvdXJjZSkgKCgod2hpY2gpIDw8IDUpIHwgKChjaGFuKSA8PCAzKSB8IChzb3VyY2UpKQorI2RlZmluZSBHQVRfU0NFKHdoaWNoLCBjaGFuLCBzb3VyY2UpICgoKHdoaWNoKSA8PCA1KSB8ICgoY2hhbikgPDwgMykgfCAoc291cmNlKSkKKworLyoKKyAqIFBlcmlvZHMgb2YgdGhlIGludGVybmFsIGNsb2NrIHNvdXJjZXMgaW4gbmFub3NlY29uZHMuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjbG9ja19wZXJpb2RbOF0gPSB7CisJMCwJCQkvKiBkZWRpY2F0ZWQgY2xvY2sgaW5wdXQvb3V0cHV0IHBpbiAqLworCTEwMCwJCQkvKiAxMCBNSHogKi8KKwkxMDAwLAkJCS8qIDEgTUh6ICovCisJMTAwMDAsCQkJLyogMTAwIGtIeiAqLworCTEwMDAwMCwJCQkvKiAxMCBrSHogKi8KKwkxMDAwMDAwLAkJLyogMSBrSHogKi8KKwkwLAkJCS8qIE9VVCBOLTEgKi8KKwkwCQkJLyogZ3JvdXAgY2xvY2sgaW5wdXQgcGluICovCit9OworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zLgorICovCisKK2VudW0gZGlvMjAwX2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUgfTsKKworZW51bSBkaW8yMDBfbW9kZWwgeworCXBjMjEyZV9tb2RlbCwKKwlwYzIxNGVfbW9kZWwsCisJcGMyMTVlX21vZGVsLCBwY2kyMTVfbW9kZWwsCisJcGMyMThlX21vZGVsLAorCXBjMjcyZV9tb2RlbCwgcGNpMjcyX21vZGVsLAorCWFueXBjaV9tb2RlbAorfTsKKworZW51bSBkaW8yMDBfbGF5b3V0IHsKKwlwYzIxMl9sYXlvdXQsCisJcGMyMTRfbGF5b3V0LAorCXBjMjE1X2xheW91dCwKKwlwYzIxOF9sYXlvdXQsCisJcGMyNzJfbGF5b3V0Cit9OworCitzdHJ1Y3QgZGlvMjAwX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmlkOworCWVudW0gZGlvMjAwX2J1c3R5cGUgYnVzdHlwZTsKKwllbnVtIGRpbzIwMF9tb2RlbCBtb2RlbDsKKwllbnVtIGRpbzIwMF9sYXlvdXQgbGF5b3V0OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaW8yMDBfYm9hcmQgZGlvMjAwX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGMyMTJlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMTJlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTJfbGF5b3V0LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMyMTRlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMTRlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTRfbGF5b3V0LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMyMTVlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMTVlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTVfbGF5b3V0LAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJwY2kyMTUiLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIxNSwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGNpMjE1X21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTVfbGF5b3V0LAorCQl9LAorI2VuZGlmCisJeworCSAgICAgIG5hbWU6CSJwYzIxOGUiLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwYzIxOGVfbW9kZWwsCisJICAgICAgbGF5b3V0OglwYzIxOF9sYXlvdXQsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwYzI3MmUiLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwYzI3MmVfbW9kZWwsCisJICAgICAgbGF5b3V0OglwYzI3Ml9sYXlvdXQsCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJInBjaTI3MiIsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjcyLAorCSAgICAgIGJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwY2kyNzJfbW9kZWwsCisJICAgICAgbGF5b3V0OglwYzI3Ml9sYXlvdXQsCisJCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOglESU8yMDBfRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJYW55cGNpX21vZGVsLAkvKiB3aWxkY2FyZCAqLworCQl9LAorI2VuZGlmCit9OworCisvKgorICogTGF5b3V0IGRlc2NyaXB0aW9ucyAtIHNvbWUgSVNBIGFuZCBQQ0kgYm9hcmQgZGVzY3JpcHRpb25zIHNoYXJlIHRoZSBzYW1lCisgKiBsYXlvdXQuCisgKi8KKworZW51bSBkaW8yMDBfc2R0eXBlIHsgc2Rfbm9uZSwgc2RfaW50ciwgc2RfODI1NSwgc2RfODI1NCB9OworCisjZGVmaW5lIERJTzIwMF9NQVhfU1VCREVWUwk3CisjZGVmaW5lIERJTzIwMF9NQVhfSVNOUwkJNgorCitzdHJ1Y3QgZGlvMjAwX2xheW91dF9zdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IG5fc3ViZGV2czsJLyogbnVtYmVyIG9mIHN1YmRldmljZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHNkdHlwZVtESU8yMDBfTUFYX1NVQkRFVlNdOwkvKiBlbnVtIGRpbzIwMF9zZHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHNkaW5mb1tESU8yMDBfTUFYX1NVQkRFVlNdOwkvKiBkZXBlbmRzIG9uIHNkdHlwZSAqLworCWNoYXIgaGFzX2ludF9zY2U7CS8qIGhhcyBpbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyByZWdpc3RlciAqLworCWNoYXIgaGFzX2Nsa19nYXRfc2NlOwkvKiBoYXMgY2xvY2svZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXJzICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpbzIwMF9sYXlvdXRfc3RydWN0IGRpbzIwMF9sYXlvdXRzW10gPSB7CisJW3BjMjEyX2xheW91dF0gPSB7CisJICAgICAgbl9zdWJkZXZzOjYsCisJICAgICAgc2R0eXBlOgl7c2RfODI1NSwgc2RfODI1NCwgc2RfODI1NCwgc2RfODI1NCwKKwkJCQkJc2RfODI1NCwKKwkJCQlzZF9pbnRyfSwKKwkgICAgICBzZGluZm86CXsweDAwLCAweDA4LCAweDBDLCAweDEwLCAweDE0LAorCQkJCTB4M0Z9LAorCSAgICAgIGhhc19pbnRfc2NlOjEsCisJICAgICAgaGFzX2Nsa19nYXRfc2NlOjEsCisJCX0sCisJW3BjMjE0X2xheW91dF0gPSB7CisJICAgICAgbl9zdWJkZXZzOjQsCisJICAgICAgc2R0eXBlOgl7c2RfODI1NSwgc2RfODI1NSwgc2RfODI1NCwKKwkJCQlzZF9pbnRyfSwKKwkgICAgICBzZGluZm86CXsweDAwLCAweDA4LCAweDEwLCAweDAxfSwKKwkgICAgICBoYXNfaW50X3NjZTowLAorCSAgICAgIGhhc19jbGtfZ2F0X3NjZTowLAorCQl9LAorCVtwYzIxNV9sYXlvdXRdID0geworCSAgICAgIG5fc3ViZGV2czo1LAorCSAgICAgIHNkdHlwZToJe3NkXzgyNTUsIHNkXzgyNTUsIHNkXzgyNTQsCisJCQkJCXNkXzgyNTQsCisJCQkJc2RfaW50cn0sCisJICAgICAgc2RpbmZvOgl7MHgwMCwgMHgwOCwgMHgxMCwgMHgxNCwgMHgzRn0sCisJICAgICAgaGFzX2ludF9zY2U6MSwKKwkgICAgICBoYXNfY2xrX2dhdF9zY2U6MSwKKwkJfSwKKwlbcGMyMThfbGF5b3V0XSA9IHsKKwkgICAgICBuX3N1YmRldnM6NywKKwkgICAgICBzZHR5cGU6CXtzZF84MjU0LCBzZF84MjU0LCBzZF84MjU1LCBzZF84MjU0LAorCQkJCQlzZF84MjU0LAorCQkJCXNkX2ludHJ9LAorCSAgICAgIHNkaW5mbzoJezB4MDAsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MTAsCisJCQkJCTB4MTQsCisJCQkJMHgzRn0sCisJICAgICAgaGFzX2ludF9zY2U6MSwKKwkgICAgICBoYXNfY2xrX2dhdF9zY2U6MSwKKwkJfSwKKwlbcGMyNzJfbGF5b3V0XSA9IHsKKwkgICAgICBuX3N1YmRldnM6NCwKKwkgICAgICBzZHR5cGU6CXtzZF84MjU1LCBzZF84MjU1LCBzZF84MjU1LAorCQkJCXNkX2ludHJ9LAorCSAgICAgIHNkaW5mbzoJezB4MDAsIDB4MDgsIDB4MTAsIDB4M0Z9LAorCSAgICAgIGhhc19pbnRfc2NlOjEsCisJICAgICAgaGFzX2Nsa19nYXRfc2NlOjAsCisJCX0sCit9OworCisvKgorICogUENJIGRyaXZlciB0YWJsZS4KKyAqLworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkaW8yMDBfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMTUsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI3MiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGlvMjAwX3BjaV90YWJsZSk7CisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGlvMjAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIHRoaXNsYXlvdXQgKCZkaW8yMDBfbGF5b3V0c1soKHN0cnVjdCBkaW8yMDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0ciktPmxheW91dF0pCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBkaW8yMDBfcHJpdmF0ZSB7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLworI2VuZGlmCisJaW50IGludHJfc2Q7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZGlvMjAwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgeworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwkvKiBDb3VudGVyIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgY2xrX3NjZV9pb2Jhc2U7CS8qIENMS19TQ0UgYmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBnYXRfc2NlX2lvYmFzZTsJLyogR0FUX1NDRSBiYXNlIGFkZHJlc3MgKi8KKwlpbnQgd2hpY2g7CQkvKiBCaXQgNSBvZiBDTEtfU0NFIG9yIEdBVF9TQ0UgKi8KKwlpbnQgaGFzX2Nsa19nYXRfc2NlOworCXVuc2lnbmVkIGNsb2NrX3NyY1szXTsJLyogQ3VycmVudCBjbG9jayBzb3VyY2VzICovCisJdW5zaWduZWQgZ2F0ZV9zcmNbM107CS8qIEN1cnJlbnQgZ2F0ZSBzb3VyY2VzICovCit9OworCitzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyIHsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzcGlubG9ja190IHNwaW5sb2NrOworCWludCBhY3RpdmU7CisJaW50IGhhc19pbnRfc2NlOworCXVuc2lnbmVkIGludCB2YWxpZF9pc25zOworCXVuc2lnbmVkIGludCBlbmFibGVkX2lzbnM7CisJdW5zaWduZWQgaW50IHN0b3Bjb3VudDsKKwlpbnQgY29udGludW91czsKK307CisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGRpbzIwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkaW8yMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfZGlvMjAwID0geworICAgICAgZHJpdmVyX25hbWU6RElPMjAwX0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRpbzIwMF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGlvMjAwX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmRpbzIwMF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGRpbzIwMF9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRpbzIwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkaW8yMDBfYm9hcmQpLAorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19kaW8yMDAsIGRpbzIwMF9wY2lfdGFibGUpOworI2Vsc2UKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfZGlvMjAwKTsKKyNlbmRpZgorCisvKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgYm9hcmQgbmFtZSwKKyAqIGJ1cyBhbmQgc2xvdC4KKyAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgaW50CitkaW8yMDBfZmluZF9wY2koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90LAorCXN0cnVjdCBwY2lfZGV2ICoqcGNpX2Rldl9wKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKworCSpwY2lfZGV2X3AgPSBOVUxMOworCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZS4gKi8KKwlmb3IgKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpX2RldiAhPSBOVUxMOworCQlwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwKKwkJCVBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJCS8qIElmIGJ1cy9zbG90IHNwZWNpZmllZCwgY2hlY2sgdGhlbS4gKi8KKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRoaXNib2FyZC0+bW9kZWwgPT0gYW55cGNpX21vZGVsKSB7CisJCQkvKiBNYXRjaCBhbnkgc3VwcG9ydGVkIG1vZGVsLiAqLworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpbzIwMF9ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAoZGlvMjAwX2JvYXJkc1tpXS5idXN0eXBlICE9IHBjaV9idXN0eXBlKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocGNpX2Rldi0+ZGV2aWNlID09IGRpbzIwMF9ib2FyZHNbaV0uZGV2aWQpIHsKKwkJCQkJLyogQ2hhbmdlIGJvYXJkX3B0ciB0byBtYXRjaGVkIGJvYXJkLiAqLworCQkJCQlkZXYtPmJvYXJkX3B0ciA9ICZkaW8yMDBfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGRpbzIwMF9ib2FyZHMpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc3BlY2lmaWMgbW9kZWwgbmFtZS4gKi8KKwkJCWlmIChwY2lfZGV2LT5kZXZpY2UgIT0gdGhpc2JvYXJkLT5kZXZpZCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIGEgbWF0Y2guICovCisJCSpwY2lfZGV2X3AgPSBwY2lfZGV2OworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gbWF0Y2ggZm91bmQuICovCisJaWYgKGJ1cyB8fCBzbG90KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQgYXQgcGNpICUwMng6JTAyeCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsIGJ1cywgc2xvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhbmQgcmVxdWVzdHMgYW4gSS9PIHJlZ2lvbiwgcmVwb3J0aW5nIGFuIGVycm9yCisgKiBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LgorICovCitzdGF0aWMgaW50CitkaW8yMDBfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBleHRlbnQpCit7CisJaWYgKCFmcm9tIHx8ICFyZXF1ZXN0X3JlZ2lvbihmcm9tLCBleHRlbnQsIERJTzIwMF9EUklWRVJfTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogSS9PIHBvcnQgY29uZmxpY3QgKCUjbHgsJWx1KSFcbiIsCisJCQltaW5vciwgZnJvbSwgZXh0ZW50KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKgorICogJ2luc25fYml0cycgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3N1YmRldl9pbnRyX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisKKwlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJLyogSnVzdCByZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAgKi8KKwkJZGF0YVsxXSA9IGluYihzdWJwcml2LT5pb2Jhc2UpICYgc3VicHJpdi0+dmFsaWRfaXNuczsKKwl9IGVsc2UgeworCQkvKiBObyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlkYXRhWzBdID0gMDsKKwl9CisKKwlyZXR1cm4gMjsKK30KKworLyoKKyAqIENhbGxlZCB0byBzdG9wIGFjcXVpc2l0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIGRpbzIwMF9zdG9wX2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCXN1YnByaXYtPmFjdGl2ZSA9IDA7CisJc3VicHJpdi0+ZW5hYmxlZF9pc25zID0gMDsKKwlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UpOworCX0KK30KKworLyoKKyAqIENhbGxlZCB0byBzdGFydCBhY3F1aXNpdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IGRpbzIwMF9zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IG47CisJdW5zaWduZWQgaXNuX2JpdHM7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFzdWJwcml2LT5jb250aW51b3VzICYmIHN1YnByaXYtPnN0b3Bjb3VudCA9PSAwKSB7CisJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXN1YnByaXYtPmFjdGl2ZSA9IDA7CisJCXJldHZhbCA9IDE7CisJfSBlbHNlIHsKKwkJLyogRGV0ZXJtaW5lIGludGVycnVwdCBzb3VyY2VzIHRvIGVuYWJsZS4gKi8KKwkJaXNuX2JpdHMgPSAwOworCQlpZiAoY21kLT5jaGFubGlzdCkgeworCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCQlpc25fYml0cyB8PSAoMVUgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKSk7CisJCQl9CisJCX0KKwkJaXNuX2JpdHMgJj0gc3VicHJpdi0+dmFsaWRfaXNuczsKKwkJLyogRW5hYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCQlzdWJwcml2LT5lbmFibGVkX2lzbnMgPSBpc25fYml0czsKKwkJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCQlvdXRiKGlzbl9iaXRzLCBzdWJwcml2LT5pb2Jhc2UpOworCQl9CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJaWYgKHN1YnByaXYtPmFjdGl2ZSkgeworCQlldmVudCA9IGRpbzIwMF9zdGFydF9pbnRyKGRldiwgcyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGV2ZW50KSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBoYW5kbGUgYSByZWFkCisgKiBzY2FuIG9uIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfaGFuZGxlX3JlYWRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIHRyaWdnZXJlZDsKKwl1bnNpZ25lZCBpbnRzdGF0OworCXVuc2lnbmVkIGN1cl9lbmFibGVkOworCXVuc2lnbmVkIGludCBvbGRldmVudHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXRyaWdnZXJlZCA9IDA7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisJb2xkZXZlbnRzID0gcy0+YXN5bmMtPmV2ZW50czsKKwlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJLyoKKwkJICogQ29sbGVjdCBpbnRlcnJ1cHQgc291cmNlcyB0aGF0IGhhdmUgdHJpZ2dlcmVkIGFuZCBkaXNhYmxlCisJCSAqIHRoZW0gdGVtcG9yYXJpbHkuICBMb29wIGFyb3VuZCB1bnRpbCBubyBleHRyYSBpbnRlcnJ1cHQKKwkJICogc291cmNlcyBoYXZlIHRyaWdnZXJlZCwgYXQgd2hpY2ggcG9pbnQsIHRoZSB2YWxpZCBwYXJ0IG9mCisJCSAqIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHdpbGwgcmVhZCB6ZXJvLCBjbGVhcmluZyB0aGUKKwkJICogY2F1c2Ugb2YgdGhlIGludGVycnVwdC4KKwkJICoKKwkJICogTWFzayBvZmYgaW50ZXJydXB0IHNvdXJjZXMgYWxyZWFkeSBzZWVuIHRvIGF2b2lkIGluZmluaXRlCisJCSAqIGxvb3AgaW4gY2FzZSBvZiBtaXNjb25maWd1cmF0aW9uLgorCQkgKi8KKwkJY3VyX2VuYWJsZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7CisJCXdoaWxlICgoaW50c3RhdCA9IChpbmIoc3VicHJpdi0+aW9iYXNlKSAmIHN1YnByaXYtPnZhbGlkX2lzbnMKKwkJCQkJJiB+dHJpZ2dlcmVkKSkgIT0gMCkgeworCQkJdHJpZ2dlcmVkIHw9IGludHN0YXQ7CisJCQljdXJfZW5hYmxlZCAmPSB+dHJpZ2dlcmVkOworCQkJb3V0YihjdXJfZW5hYmxlZCwgc3VicHJpdi0+aW9iYXNlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIE5vIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuICBBc3N1bWUgdGhlIHNpbmdsZSBpbnRlcnJ1cHQKKwkJICogc291cmNlIGhhcyB0cmlnZ2VyZWQuCisJCSAqLworCQl0cmlnZ2VyZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7CisJfQorCisJaWYgKHRyaWdnZXJlZCkgeworCQkvKgorCQkgKiBTb21lIGludGVycnVwdCBzb3VyY2VzIGhhdmUgdHJpZ2dlcmVkIGFuZCBoYXZlIGJlZW4KKwkJICogdGVtcG9yYXJpbHkgZGlzYWJsZWQgdG8gY2xlYXIgdGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQuCisJCSAqCisJCSAqIFJlZW5hYmxlIHRoZW0gTk9XIHRvIG1pbmltaXplIHRoZSB0aW1lIHRoZXkgYXJlIGRpc2FibGVkLgorCQkgKi8KKwkJY3VyX2VuYWJsZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7CisJCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkgeworCQkJb3V0YihjdXJfZW5hYmxlZCwgc3VicHJpdi0+aW9iYXNlKTsKKwkJfQorCisJCWlmIChzdWJwcml2LT5hY3RpdmUpIHsKKwkJCS8qCisJCQkgKiBUaGUgY29tbWFuZCBpcyBzdGlsbCBhY3RpdmUuCisJCQkgKgorCQkJICogSWdub3JlIGludGVycnVwdCBzb3VyY2VzIHRoYXQgdGhlIGNvbW1hbmQgaXNuJ3QKKwkJCSAqIGludGVyZXN0ZWQgaW4gKGp1c3QgaW4gY2FzZSB0aGVyZSdzIGEgcmFjZQorCQkJICogY29uZGl0aW9uKS4KKwkJCSAqLworCQkJaWYgKHRyaWdnZXJlZCAmIHN1YnByaXYtPmVuYWJsZWRfaXNucykgeworCQkJCS8qIENvbGxlY3Qgc2NhbiBkYXRhLiAqLworCQkJCXNob3J0IHZhbDsKKwkJCQl1bnNpZ25lZCBpbnQgbiwgY2gsIGxlbjsKKworCQkJCXZhbCA9IDA7CisJCQkJbGVuID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CisJCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKSB7CisJCQkJCWNoID0gQ1JfQ0hBTihzLT5hc3luYy0+Y21kLmNoYW5saXN0W25dKTsKKwkJCQkJaWYgKHRyaWdnZXJlZCAmICgxVSA8PCBjaCkpIHsKKwkJCQkJCXZhbCB8PSAoMVUgPDwgbik7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KKwkJCQlpZiAoY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHZhbCkpIHsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSAoQ09NRURJX0NCX0JMT0NLIHwKKwkJCQkJCUNPTUVESV9DQl9FT1MpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEVycm9yISAgU3RvcCBhY3F1aXNpdGlvbi4gICovCisJCQkJCWRpbzIwMF9zdG9wX2ludHIoZGV2LCBzKTsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IKKwkJCQkJCXwgQ09NRURJX0NCX09WRVJGTE9XOworCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVmZmVyIG92ZXJmbG93Iik7CisJCQkJfQorCisJCQkJLyogQ2hlY2sgZm9yIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJCQlpZiAoIXN1YnByaXYtPmNvbnRpbnVvdXMpIHsKKwkJCQkJLyogc3RvcF9zcmMgPT0gVFJJR19DT1VOVCAqLworCQkJCQlpZiAoc3VicHJpdi0+c3RvcGNvdW50ID4gMCkgeworCQkJCQkJc3VicHJpdi0+c3RvcGNvdW50LS07CisJCQkJCQlpZiAoc3VicHJpdi0+c3RvcGNvdW50ID09IDApIHsKKwkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCQkJCUNPTUVESV9DQl9FT0E7CisJCQkJCQkJZGlvMjAwX3N0b3BfaW50cihkZXYsCisJCQkJCQkJCXMpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKG9sZGV2ZW50cyAhPSBzLT5hc3luYy0+ZXZlbnRzKSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAodHJpZ2dlcmVkICE9IDApOworfQorCisvKgorICogJ2NhbmNlbCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfc3ViZGV2X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoc3VicHJpdi0+YWN0aXZlKSB7CisJCWRpbzIwMF9zdG9wX2ludHIoZGV2LCBzKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdkb19jbWR0ZXN0JyBmdW5jdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2X2ludHJfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gKFRSSUdfTk9XIHwgVFJJR19JTlQpOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSAoVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwkvKiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyB8fCBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogYW55IGNvdW50IGFsbG93ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwkvKiBpZiAoZXJyKSByZXR1cm4gNDsgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfc3ViZGV2X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzdWJwcml2LT5hY3RpdmUgPSAxOworCisJLyogU2V0IHVwIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCXN1YnByaXYtPmNvbnRpbnVvdXMgPSAwOworCQlzdWJwcml2LT5zdG9wY291bnQgPSBjbWQtPnN0b3BfYXJnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PTkUgKi8KKwkJc3VicHJpdi0+Y29udGludW91cyA9IDE7CisJCXN1YnByaXYtPnN0b3Bjb3VudCA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB1cCBzdGFydCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBkaW8yMDBfaW50dHJpZ19zdGFydF9pbnRyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PVyAqLworCQlldmVudCA9IGRpbzIwMF9zdGFydF9pbnRyKGRldiwgcyk7CisJCWJyZWFrOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChldmVudCkgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2X2ludHJfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgaW9iYXNlLCB1bnNpZ25lZCB2YWxpZF9pc25zLCBpbnQgaGFzX2ludF9zY2UpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdjsKKworCXN1YnByaXYgPSBremFsbG9jKHNpemVvZigqc3VicHJpdiksIEdGUF9LRVJORUwpOworCWlmICghc3VicHJpdikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXN1YnByaXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlzdWJwcml2LT5oYXNfaW50X3NjZSA9IGhhc19pbnRfc2NlOworCXN1YnByaXYtPnZhbGlkX2lzbnMgPSB2YWxpZF9pc25zOworCXNwaW5fbG9ja19pbml0KCZzdWJwcml2LT5zcGlubG9jayk7CisKKwlpZiAoaGFzX2ludF9zY2UpIHsKKwkJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UpOwkvKiBEaXNhYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCX0KKworCXMtPnByaXZhdGUgPSBzdWJwcml2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJaWYgKGhhc19pbnRfc2NlKSB7CisJCXMtPm5fY2hhbiA9IERJTzIwMF9NQVhfSVNOUzsKKwkJcy0+bGVuX2NoYW5saXN0ID0gRElPMjAwX01BWF9JU05TOworCX0gZWxzZSB7CisJCS8qIE5vIGludGVycnVwdCBzb3VyY2UgcmVnaXN0ZXIuICBTdXBwb3J0IHNpbmdsZSBjaGFubmVsLiAqLworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSAxOworCX0KKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPm1heGRhdGEgPSAxOworCXMtPmluc25fYml0cyA9IGRpbzIwMF9zdWJkZXZfaW50cl9pbnNuX2JpdHM7CisJcy0+ZG9fY21kdGVzdCA9IGRpbzIwMF9zdWJkZXZfaW50cl9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IGRpbzIwMF9zdWJkZXZfaW50cl9jbWQ7CisJcy0+Y2FuY2VsID0gZGlvMjAwX3N1YmRldl9pbnRyX2NhbmNlbDsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgdm9pZAorZGlvMjAwX3N1YmRldl9pbnRyX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCWlmIChzdWJwcml2KSB7CisJCWtmcmVlKHN1YnByaXYpOworCX0KK30KKworLyoKKyAqIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkaW8yMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJaW50IGhhbmRsZWQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChkZXZwcml2LT5pbnRyX3NkID49IDApIHsKKwkJaGFuZGxlZCA9IGRpbzIwMF9oYW5kbGVfcmVhZF9pbnRyKGRldiwKKwkJCWRldi0+c3ViZGV2aWNlcyArIGRldnByaXYtPmludHJfc2QpOworCX0gZWxzZSB7CisJCWhhbmRsZWQgPSAwOworCX0KKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisvKgorICogSGFuZGxlICdpbnNuX3JlYWQnIGZvciBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zdWJkZXZfODI1NF9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGF0YVswXSA9IGk4MjU0X3JlYWQoc3VicHJpdi0+aW9iYXNlLCAwLCBjaGFuKTsKKworCXJldHVybiAxOworfQorCisvKgorICogSGFuZGxlICdpbnNuX3dyaXRlJyBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2XzgyNTRfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlpODI1NF93cml0ZShzdWJwcml2LT5pb2Jhc2UsIDAsIGNoYW4sIGRhdGFbMF0pOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTZXQgZ2F0ZSBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc2V0X2dhdGVfc3JjKHN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKiBzdWJwcml2LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsCisJdW5zaWduZWQgaW50IGdhdGVfc3JjKQoreworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKKworCWlmICghc3VicHJpdi0+aGFzX2Nsa19nYXRfc2NlKQorCQlyZXR1cm4gLTE7CisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCWlmIChnYXRlX3NyYyA+IDcpCisJCXJldHVybiAtMTsKKworCXN1YnByaXYtPmdhdGVfc3JjW2NvdW50ZXJfbnVtYmVyXSA9IGdhdGVfc3JjOworCWJ5dGUgPSBHQVRfU0NFKHN1YnByaXYtPndoaWNoLCBjb3VudGVyX251bWJlciwgZ2F0ZV9zcmMpOworCW91dGIoYnl0ZSwgc3VicHJpdi0+Z2F0X3NjZV9pb2Jhc2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgZ2F0ZSBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfZ2V0X2dhdGVfc3JjKHN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKiBzdWJwcml2LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIpCit7CisJaWYgKCFzdWJwcml2LT5oYXNfY2xrX2dhdF9zY2UpCisJCXJldHVybiAtMTsKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gc3VicHJpdi0+Z2F0ZV9zcmNbY291bnRlcl9udW1iZXJdOworfQorCisvKgorICogU2V0IGNsb2NrIHNvdXJjZSBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlIGNoYW5uZWwuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zZXRfY2xvY2tfc3JjKHN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKiBzdWJwcml2LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsCisJdW5zaWduZWQgaW50IGNsb2NrX3NyYykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKwlpZiAoIXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSkKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAoY2xvY2tfc3JjID4gNykKKwkJcmV0dXJuIC0xOworCisJc3VicHJpdi0+Y2xvY2tfc3JjW2NvdW50ZXJfbnVtYmVyXSA9IGNsb2NrX3NyYzsKKwlieXRlID0gQ0xLX1NDRShzdWJwcml2LT53aGljaCwgY291bnRlcl9udW1iZXIsIGNsb2NrX3NyYyk7CisJb3V0YihieXRlLCBzdWJwcml2LT5jbGtfc2NlX2lvYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCBjbG9jayBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfZ2V0X2Nsb2NrX3NyYyhzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICogc3VicHJpdiwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLAorCXVuc2lnbmVkIGludCAqIHBlcmlvZF9ucykKK3sKKwl1bnNpZ25lZCBjbG9ja19zcmM7CisKKwlpZiAoIXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSkKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKworCWNsb2NrX3NyYyA9IHN1YnByaXYtPmNsb2NrX3NyY1tjb3VudGVyX251bWJlcl07CisJKnBlcmlvZF9ucyA9IGNsb2NrX3BlcmlvZFtjbG9ja19zcmNdOworCXJldHVybiBjbG9ja19zcmM7Cit9CisKKy8qCisgKiBIYW5kbGUgJ2luc25fY29uZmlnJyBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2XzgyNTRfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwlpbnQgcmV0OworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREU6CisJCXJldCA9IGk4MjU0X3NldF9tb2RlKHN1YnByaXYtPmlvYmFzZSwgMCwgY2hhbiwgZGF0YVsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfODI1NF9SRUFEX1NUQVRVUzoKKwkJZGF0YVsxXSA9IGk4MjU0X3N0YXR1cyhzdWJwcml2LT5pb2Jhc2UsIDAsIGNoYW4pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1NFVF9HQVRFX1NSQzoKKwkJcmV0ID0gZGlvMjAwX3NldF9nYXRlX3NyYyhzdWJwcml2LCBjaGFuLCBkYXRhWzJdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfR0FURV9TUkM6CisJCXJldCA9IGRpbzIwMF9nZXRfZ2F0ZV9zcmMoc3VicHJpdiwgY2hhbik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRhdGFbMl0gPSByZXQ7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NMT0NLX1NSQzoKKwkJcmV0ID0gZGlvMjAwX3NldF9jbG9ja19zcmMoc3VicHJpdiwgY2hhbiwgZGF0YVsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0NMT0NLX1NSQzoKKwkJcmV0ID0gZGlvMjAwX2dldF9jbG9ja19zcmMoc3VicHJpdiwgY2hhbiwgJmRhdGFbMl0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYXRhWzFdID0gcmV0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UuCisgKgorICogTm90ZTogaW9iYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGJvYXJkLCBub3QgdGhlIHN1YmRldmljZTsKKyAqIG9mZnNldCBpcyB0aGUgb2Zmc2V0IHRvIHRoZSA4MjU0IGNoaXAuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zdWJkZXZfODI1NF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UsIHVuc2lnbmVkIG9mZnNldCwgaW50IGhhc19jbGtfZ2F0X3NjZSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2OworCXVuc2lnbmVkIGludCBjaGFuOworCisJc3VicHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdWJwcml2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzLT5wcml2YXRlID0gc3VicHJpdjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMzsKKwlzLT5tYXhkYXRhID0gMHhGRkZGOworCXMtPmluc25fcmVhZCA9IGRpbzIwMF9zdWJkZXZfODI1NF9yZWFkOworCXMtPmluc25fd3JpdGUgPSBkaW8yMDBfc3ViZGV2XzgyNTRfd3JpdGU7CisJcy0+aW5zbl9jb25maWcgPSBkaW8yMDBfc3ViZGV2XzgyNTRfY29uZmlnOworCisJc3VicHJpdi0+aW9iYXNlID0gb2Zmc2V0ICsgaW9iYXNlOworCXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSA9IGhhc19jbGtfZ2F0X3NjZTsKKwlpZiAoaGFzX2Nsa19nYXRfc2NlKSB7CisJCS8qIERlcml2ZSBDTEtfU0NFIGFuZCBHQVRfU0NFIHJlZ2lzdGVyIG9mZnNldHMgZnJvbQorCQkgKiA4MjU0IG9mZnNldC4gKi8KKwkJc3VicHJpdi0+Y2xrX3NjZV9pb2Jhc2UgPQorCQkJRElPMjAwX1hDTEtfU0NFICsgKG9mZnNldCA+PiAzKSArIGlvYmFzZTsKKwkJc3VicHJpdi0+Z2F0X3NjZV9pb2Jhc2UgPQorCQkJRElPMjAwX1hHQVRfU0NFICsgKG9mZnNldCA+PiAzKSArIGlvYmFzZTsKKwkJc3VicHJpdi0+d2hpY2ggPSAob2Zmc2V0ID4+IDIpICYgMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGNoYW5uZWxzLiAqLworCWZvciAoY2hhbiA9IDA7IGNoYW4gPCAzOyBjaGFuKyspIHsKKwkJaTgyNTRfc2V0X21vZGUoc3VicHJpdi0+aW9iYXNlLCAwLCBjaGFuLAorCQkJSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlkpOworCQlpZiAoc3VicHJpdi0+aGFzX2Nsa19nYXRfc2NlKSB7CisJCQkvKiBHYXRlIHNvdXJjZSAwIGlzIFZDQyAobG9naWMgMSkuICovCisJCQlkaW8yMDBfc2V0X2dhdGVfc3JjKHN1YnByaXYsIGNoYW4sIDApOworCQkJLyogQ2xvY2sgc291cmNlIDAgaXMgdGhlIGRlZGljYXRlZCBjbG9jayBpbnB1dC4gKi8KKwkJCWRpbzIwMF9zZXRfY2xvY2tfc3JjKHN1YnByaXYsIGNoYW4sIDApOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitkaW8yMDBfc3ViZGV2XzgyNTRfY2xlYW51cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCisJaWYgKHN1YnByaXYpIHsKKwkJa2ZyZWUoc3VicHJpdik7CisJfQorfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgZGlvMjAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisJaW50IGJ1cyA9IDAsIHNsb3QgPSAwOworI2VuZGlmCisJY29uc3Qgc3RydWN0IGRpbzIwMF9sYXlvdXRfc3RydWN0ICpsYXlvdXQ7CisJaW50IHNoYXJlX2lycSA9IDA7CisJaW50IHNkeDsKKwl1bnNpZ25lZCBuOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBhdHRhY2hcbiIsIGRldi0+bWlub3IsCisJCURJTzIwMF9EUklWRVJfTkFNRSk7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRpbzIwMF9wcml2YXRlKSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBQcm9jZXNzIG9wdGlvbnMuICovCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCXNoYXJlX2lycSA9IDA7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJY2FzZSBwY2lfYnVzdHlwZToKKwkJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwkJc2hhcmVfaXJxID0gMTsKKworCQlpZiAoKHJldCA9IGRpbzIwMF9maW5kX3BjaShkZXYsIGJ1cywgc2xvdCwgJnBjaV9kZXYpKSA8IDApCisJCQlyZXR1cm4gcmV0OworCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogJXM6IEJVRyEgY2Fubm90IGRldGVybWluZSBib2FyZCB0eXBlIVxuIiwKKwkJCWRldi0+bWlub3IsIERJTzIwMF9EUklWRVJfTkFNRSk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlkZXZwcml2LT5pbnRyX3NkID0gLTE7CisKKwkvKiBFbmFibGUgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMuICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAocGNpX2RldikgeworCQlyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2LCBESU8yMDBfRFJJVkVSX05BTUUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImNvbWVkaSVkOiBlcnJvciEgY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iLAorCQkJCWRldi0+bWlub3IpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJCWlycSA9IHBjaV9kZXYtPmlycTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJcmV0ID0gZGlvMjAwX3JlcXVlc3RfcmVnaW9uKGRldi0+bWlub3IsIGlvYmFzZSwgRElPMjAwX0lPX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWxheW91dCA9IHRoaXNsYXlvdXQ7CisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbGF5b3V0LT5uX3N1YmRldnMpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGRldi0+bl9zdWJkZXZpY2VzOyBuKyspIHsKKwkJcyA9ICZkZXYtPnN1YmRldmljZXNbbl07CisJCXN3aXRjaCAobGF5b3V0LT5zZHR5cGVbbl0pIHsKKwkJY2FzZSBzZF84MjU0OgorCQkJLyogY291bnRlciBzdWJkZXZpY2UgKDgyNTQpICovCisJCQlyZXQgPSBkaW8yMDBfc3ViZGV2XzgyNTRfaW5pdChkZXYsIHMsIGlvYmFzZSwKKwkJCQlsYXlvdXQtPnNkaW5mb1tuXSwgbGF5b3V0LT5oYXNfY2xrX2dhdF9zY2UpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc2RfODI1NToKKwkJCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAoODI1NSkgKi8KKwkJCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCAwLAorCQkJCWlvYmFzZSArIGxheW91dC0+c2RpbmZvW25dKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHNkX2ludHI6CisJCQkvKiAnSU5URVJSVVBUJyBzdWJkZXZpY2UgKi8KKwkJCWlmIChpcnEpIHsKKwkJCQlyZXQgPSBkaW8yMDBfc3ViZGV2X2ludHJfaW5pdChkZXYsIHMsCisJCQkJCWlvYmFzZSArIERJTzIwMF9JTlRfU0NFLAorCQkJCQlsYXlvdXQtPnNkaW5mb1tuXSwgbGF5b3V0LT5oYXNfaW50X3NjZSk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisJCQkJZGV2cHJpdi0+aW50cl9zZCA9IG47CisJCQl9IGVsc2UgeworCQkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNkeCA9IGRldnByaXYtPmludHJfc2Q7CisJaWYgKHNkeCA+PSAwICYmIHNkeCA8IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJCWRldi0+cmVhZF9zdWJkZXYgPSAmZGV2LT5zdWJkZXZpY2VzW3NkeF07CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGlycSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gc2hhcmVfaXJxID8gSVJRRl9TSEFSRUQgOiAwOworCisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkaW8yMDBfaW50ZXJydXB0LCBmbGFncywKKwkJCQlESU8yMDBfRFJJVkVSX05BTUUsIGRldikgPj0gMCkgeworCQkJZGV2LT5pcnEgPSBpcnE7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJImNvbWVkaSVkOiB3YXJuaW5nISBpcnEgJXUgdW5hdmFpbGFibGUhXG4iLAorCQkJCWRldi0+bWlub3IsIGlycSk7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgIiwgZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCXByaW50aygiKGJhc2UgJSNseCkgIiwgaW9iYXNlKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCXByaW50aygiKHBjaSAlcykgIiwgcGNpX25hbWUocGNpX2RldikpOworI2VuZGlmCisJfQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoaXJxICV1JXMpICIsIGlycSwgKGRldi0+aXJxID8gIiIgOiAiIFVOQVZBSUxBQkxFIikpOworCX0gZWxzZSB7CisJCXByaW50aygiKG5vIGlycSkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWNvbnN0IHN0cnVjdCBkaW8yMDBfbGF5b3V0X3N0cnVjdCAqbGF5b3V0OworCXVuc2lnbmVkIG47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBkZXRhY2hcbiIsIGRldi0+bWlub3IsCisJCURJTzIwMF9EUklWRVJfTkFNRSk7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCWxheW91dCA9IHRoaXNsYXlvdXQ7CisJCWZvciAobiA9IDA7IG4gPCBkZXYtPm5fc3ViZGV2aWNlczsgbisrKSB7CisJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9ICZkZXYtPnN1YmRldmljZXNbbl07CisJCQlzd2l0Y2ggKGxheW91dC0+c2R0eXBlW25dKSB7CisJCQljYXNlIHNkXzgyNTQ6CisJCQkJZGlvMjAwX3N1YmRldl84MjU0X2NsZWFudXAoZGV2LCBzKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ugc2RfODI1NToKKwkJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgcyk7CisJCQkJYnJlYWs7CisJCQljYXNlIHNkX2ludHI6CisJCQkJZGlvMjAwX3N1YmRldl9pbnRyX2NsZWFudXAoZGV2LCBzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldnByaXYpIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0gZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBESU8yMDBfSU9fU0laRSk7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldi0+Ym9hcmRfbmFtZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgcmVtb3ZlZFxuIiwKKwkJCWRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjdjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwpAQCAtMCwwICsxLDY1NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCisgICAgRHJpdmVyIGZvciBBbXBsaWNvbiBQQzM2QVQgYW5kIFBDSTIzNiBESU8gYm9hcmRzLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIE1FViBMdGQuIDxodHRwOi8vd3d3Lm1ldi5jby51ay8+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhbXBsY19wYzIzNgorRGVzY3JpcHRpb246IEFtcGxpY29uIFBDMzZBVCwgUENJMjM2CitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQzM2QVQgKHBjMzZhdCksIFBDSTIzNiAocGNpMjM2IG9yIGFtcGxjX3BjMjM2KQorVXBkYXRlZDogV2VkLCAyMiBPY3QgMjAwOCAxMzo0MDowMyArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQzM2QVQ6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKG9wdGlvbmFsKQorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQ0kyMzY6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlIHdpbGwgYmUKKyAgdXNlZC4KKworVGhlIFBDMzZBVCBJU0EgYm9hcmQgYW5kIFBDSTIzNiBQQ0kgYm9hcmQgaGF2ZSBhIHNpbmdsZSA4MjU1IGFwcGVhcmluZworYXMgc3ViZGV2aWNlIDAuCisKK1N1YmRldmljZSAxIHByZXRlbmRzIHRvIGJlIGEgZGlnaXRhbCBpbnB1dCBkZXZpY2UsIGJ1dCBpdCBhbHdheXMgcmV0dXJucworMCB3aGVuIHJlYWQuIEhvd2V2ZXIsIGlmIHlvdSBydW4gYSBjb21tYW5kIHdpdGggc2Nhbl9iZWdpbl9zcmM9VFJJR19FWFQsCithIHJpc2luZyBlZGdlIG9uIHBvcnQgQyBiaXQgNyBhY3RzIGFzIGFuIGV4dGVybmFsIHRyaWdnZXIsIHdoaWNoIGNhbiBiZQordXNlZCB0byB3YWtlIHVwIHRhc2tzLiAgVGhpcyBpcyBsaWtlIHRoZSBjb21lZGlfcGFycG9ydCBkZXZpY2UsIGJ1dCB0aGUKK29ubHkgd2F5IHRvIHBoeXNpY2FsbHkgZGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBQQzM2QVQgaXMgdG8gcmVtb3ZlCit0aGUgSVJRIGp1bXBlci4gIElmIG5vIGludGVycnVwdCBpcyBjb25uZWN0ZWQsIHRoZW4gc3ViZGV2aWNlIDEgaXMKK3VudXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJwbHg5MDUyLmgiCisKKyNkZWZpbmUgUEMyMzZfRFJJVkVSX05BTUUJImFtcGxjX3BjMjM2IgorCisvKiBQQ0kyMzYgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzYgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5WQUxJRCAweGZmZmYKKworLyogUEMzNkFUIC8gUENJMjM2IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDMjM2X0lPX1NJWkUJCTQKKyNkZWZpbmUgUEMyMzZfTENSX0lPX1NJWkUJMTI4CisKKy8qCisgKiBJTlRDU1IgdmFsdWVzIGZvciBQQ0kyMzYuCisgKi8KKy8qIERpc2FibGUgaW50ZXJydXB0LCBhbHNvIGNsZWFyIGFueSBpbnRlcnJ1cHQgdGhlcmUgKi8KKyNkZWZpbmUgUENJMjM2X0lOVFJfRElTQUJMRSAoIFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRElTQUJMRUQgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdIIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTJQT0xfSElHSCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9ESVNBQkxFRCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX0VER0UgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMUNMUklOVF9BU1NFUlRFRCApCisvKiBFbmFibGUgaW50ZXJydXB0LCBhbHNvIGNsZWFyIGFueSBpbnRlcnJ1cHQgdGhlcmUuICovCisjZGVmaW5lIFBDSTIzNl9JTlRSX0VOQUJMRSAoIFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRU5BQkxFRCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0hJR0ggXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdIIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0VOQUJMRUQgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9FREdFIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQgKQorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciBBbXBsaWNvbiBQQzM2QVQgYW5kIFBDSTIzNi4KKyAqLworCitlbnVtIHBjMjM2X2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUgfTsKK2VudW0gcGMyMzZfbW9kZWwgeyBwYzM2YXRfbW9kZWwsIHBjaTIzNl9tb2RlbCwgYW55cGNpX21vZGVsIH07CisKK3N0cnVjdCBwYzIzNl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpmYW5jeV9uYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmlkOworCWVudW0gcGMyMzZfYnVzdHlwZSBidXN0eXBlOworCWVudW0gcGMyMzZfbW9kZWwgbW9kZWw7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBwYzIzNl9ib2FyZCBwYzIzNl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjMzZhdCIsCisJICAgICAgZmFuY3lfbmFtZToiUEMzNkFUIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMzNmF0X21vZGVsLAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJwY2kyMzYiLAorCSAgICAgIGZhbmN5X25hbWU6IlBDSTIzNiIsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM2LAorCSAgICAgIGJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwY2kyMzZfbW9kZWwsCisJCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOglQQzIzNl9EUklWRVJfTkFNRSwKKwkgICAgICBmYW5jeV9uYW1lOlBDMjM2X0RSSVZFUl9OQU1FLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0lOVkFMSUQsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CWFueXBjaV9tb2RlbCwJLyogd2lsZGNhcmQgKi8KKwkJfSwKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGMyMzZfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzYsIFBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjMjM2X3BjaV90YWJsZSk7CisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGMyMzZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHBjMjM2X3ByaXZhdGUgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJLyogUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXVuc2lnbmVkIGxvbmcgbGNyX2lvYmFzZTsJLyogUExYIFBDSTkwNTIgY29uZmlnIHJlZ2lzdGVycyBpbiBQQ0lCQVIxICovCisjZW5kaWYKKwlpbnQgZW5hYmxlX2lycTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwYzIzNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwYzIzNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwYzIzNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hbXBsY19wYzIzNiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOlBDMjM2X0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjMjM2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwYzIzNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZwYzIzNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjMjM2X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YocGMyMzZfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGMyMzZfYm9hcmQpLAorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzIzNiwgcGMyMzZfcGNpX3RhYmxlKTsKKyNlbHNlCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjM2KTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHBjMjM2X3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCisJdW5zaWduZWQgbG9uZyBleHRlbnQpOworc3RhdGljIHZvaWQgcGMyMzZfaW50cl9kaXNhYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIHBjMjM2X2ludHJfZW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9jaGVjayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHBjMjM2X2ludHJfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHBjMjM2X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwYzIzNl9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBwYzIzNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3RlZCBib2FyZCBuYW1lLAorICogYnVzIGFuZCBzbG90LgorICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBpbnQKK3BjMjM2X2ZpbmRfcGNpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwlzdHJ1Y3QgcGNpX2RldiAqKnBjaV9kZXZfcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisKKwkqcGNpX2Rldl9wID0gTlVMTDsKKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UuICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sCisJCQlQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQkvKiBJZiBidXMvc2xvdCBzcGVjaWZpZWQsIGNoZWNrIHRoZW0uICovCisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0aGlzYm9hcmQtPm1vZGVsID09IGFueXBjaV9tb2RlbCkgeworCQkJLyogTWF0Y2ggYW55IHN1cHBvcnRlZCBtb2RlbC4gKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYzIzNl9ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAocGMyMzZfYm9hcmRzW2ldLmJ1c3R5cGUgIT0gcGNpX2J1c3R5cGUpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwY2lfZGV2LT5kZXZpY2UgPT0gcGMyMzZfYm9hcmRzW2ldLmRldmlkKSB7CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZC4gKi8KKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSAmcGMyMzZfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBjMjM2X2JvYXJkcykpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQkvKiBNYXRjaCBzcGVjaWZpYyBtb2RlbCBuYW1lLiAqLworCQkJaWYgKHBjaV9kZXYtPmRldmljZSAhPSB0aGlzYm9hcmQtPmRldmlkKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRm91bmQgYSBtYXRjaC4gKi8KKwkJKnBjaV9kZXZfcCA9IHBjaV9kZXY7CisJCXJldHVybiAwOworCX0KKwkvKiBObyBtYXRjaCBmb3VuZC4gKi8KKwlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IGVycm9yISBubyAlcyBmb3VuZCBhdCBwY2kgJTAyeDolMDJ4IVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwgYnVzLCBzbG90KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQhXG4iLAorCQkJZGV2LT5taW5vciwgdGhpc2JvYXJkLT5uYW1lKTsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjMjM2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisJaW50IGJ1cyA9IDAsIHNsb3QgPSAwOworI2VuZGlmCisJaW50IHNoYXJlX2lycSA9IDA7CisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGF0dGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyMzZfRFJJVkVSX05BTUUpOworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGMyMzZfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFByb2Nlc3Mgb3B0aW9ucy4gKi8KKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgaXNhX2J1c3R5cGU6CisJCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJc2hhcmVfaXJxID0gMDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwljYXNlIHBjaV9idXN0eXBlOgorCQlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwkJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCQlzaGFyZV9pcnEgPSAxOworCisJCWlmICgocmV0ID0gcGMyMzZfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6ICVzOiBCVUchIGNhbm5vdCBkZXRlcm1pbmUgYm9hcmQgdHlwZSFcbiIsCisJCQlkZXYtPm1pbm9yLCBQQzIzNl9EUklWRVJfTkFNRSk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8qIEVuYWJsZSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHNwYWNlcy4gKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChwY2lfZGV2KSB7CisJCWlmICgocmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgUEMyMzZfRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIiwKKwkJCQlkZXYtPm1pbm9yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2cHJpdi0+bGNyX2lvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAxKTsKKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCQlpcnEgPSBwY2lfZGV2LT5pcnE7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXJldCA9IHBjMjM2X3JlcXVlc3RfcmVnaW9uKGRldi0+bWlub3IsIGlvYmFzZSwgUEMyMzZfSU9fU0laRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMikpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKDgyNTUpICovCisJaWYgKChyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgaW9iYXNlKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCXBjMjM2X2ludHJfZGlzYWJsZShkZXYpOworCWlmIChpcnEpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IHNoYXJlX2lycSA/IElSUUZfU0hBUkVEIDogMDsKKworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgcGMyMzZfaW50ZXJydXB0LCBmbGFncywKKwkJCQlQQzIzNl9EUklWRVJfTkFNRSwgZGV2KSA+PSAwKSB7CisJCQlkZXYtPmlycSA9IGlycTsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwkJCXMtPm5fY2hhbiA9IDE7CisJCQlzLT5tYXhkYXRhID0gMTsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2JpdHMgPSBwYzIzNl9pbnRyX2luc247CisJCQlzLT5kb19jbWR0ZXN0ID0gcGMyMzZfaW50cl9jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gcGMyMzZfaW50cl9jbWQ7CisJCQlzLT5jYW5jZWwgPSBwYzIzNl9pbnRyX2NhbmNlbDsKKwkJfQorCX0KKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgIiwgZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCXByaW50aygiKGJhc2UgJSNseCkgIiwgaW9iYXNlKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCXByaW50aygiKHBjaSAlcykgIiwgcGNpX25hbWUocGNpX2RldikpOworI2VuZGlmCisJfQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoaXJxICV1JXMpICIsIGlycSwgKGRldi0+aXJxID8gIiIgOiAiIFVOQVZBSUxBQkxFIikpOworCX0gZWxzZSB7CisJCXByaW50aygiKG5vIGlycSkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwYzIzNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogZGV0YWNoXG4iLCBkZXYtPm1pbm9yLAorCQlQQzIzNl9EUklWRVJfTkFNRSk7CisJaWYgKGRldnByaXYpIHsKKwkJcGMyMzZfaW50cl9kaXNhYmxlKGRldik7CisJfQorCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDApOworCX0KKwlpZiAoZGV2cHJpdikgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfSBlbHNlCisjZW5kaWYKKwkJeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDMjM2X0lPX1NJWkUpOworCQkJfQorCQl9CisJfQorCWlmIChkZXYtPmJvYXJkX25hbWUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzIHJlbW92ZWRcbiIsCisJCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGFuZCByZXF1ZXN0cyBhbiBJL08gcmVnaW9uLCByZXBvcnRpbmcgYW4gZXJyb3IKKyAqIGlmIHRoZXJlIGlzIGEgY29uZmxpY3QuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwKKwl1bnNpZ25lZCBsb25nIGV4dGVudCkKK3sKKwlpZiAoIWZyb20gfHwgIXJlcXVlc3RfcmVnaW9uKGZyb20sIGV4dGVudCwgUEMyMzZfRFJJVkVSX05BTUUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IEkvTyBwb3J0IGNvbmZsaWN0ICglI2x4LCVsdSkhXG4iLAorCQkJbWlub3IsIGZyb20sIGV4dGVudCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIG1hcmsgdGhlIGludGVycnVwdCBhcyBkaXNhYmxlZCAobm8gY29tbWFuZAorICogY29uZmlndXJlZCBvbiBzdWJkZXZpY2UgMSkgYW5kIHRvIHBoeXNpY2FsbHkgZGlzYWJsZSB0aGUgaW50ZXJydXB0CisgKiAobm90IHBvc3NpYmxlIG9uIHRoZSBQQzM2QVQsIGV4Y2VwdCBieSByZW1vdmluZyB0aGUgSVJRIGp1bXBlciEpLgorICovCitzdGF0aWMgdm9pZCBwYzIzNl9pbnRyX2Rpc2FibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmVuYWJsZV9pcnEgPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKGRldnByaXYtPmxjcl9pb2Jhc2UpCisJCW91dGwoUENJMjM2X0lOVFJfRElTQUJMRSwgZGV2cHJpdi0+bGNyX2lvYmFzZSArIFBMWDkwNTJfSU5UQ1NSKTsKKyNlbmRpZgorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBtYXJrIHRoZSBpbnRlcnJ1cHQgYXMgZW5hYmxlZCAoYSBjb21tYW5kCisgKiBjb25maWd1cmVkIG9uIHN1YmRldmljZSAxKSBhbmQgdG8gcGh5c2ljYWxseSBlbmFibGUgdGhlIGludGVycnVwdAorICogKG5vdCBwb3NzaWJsZSBvbiB0aGUgUEMzNkFULCBleGNlcHQgYnkgKHJlKWNvbm5lY3RpbmcgdGhlIElSUSBqdW1wZXIhKS4KKyAqLworc3RhdGljIHZvaWQgcGMyMzZfaW50cl9lbmFibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmVuYWJsZV9pcnEgPSAxOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKGRldnByaXYtPmxjcl9pb2Jhc2UpCisJCW91dGwoUENJMjM2X0lOVFJfRU5BQkxFLCBkZXZwcml2LT5sY3JfaW9iYXNlICsgUExYOTA1Ml9JTlRDU1IpOworI2VuZGlmCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3VycyB0byBjaGVjayB3aGV0aGVyCisgKiB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIG1hcmtlZCBhcyBlbmFibGVkIGFuZCB3YXMgZ2VuZXJhdGVkIGJ5IHRoZQorICogYm9hcmQuICBJZiBzbywgdGhlIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBoYXJkd2FyZSBmb3IgdGhlIG5leHQKKyAqIGludGVycnVwdC4KKyAqIFJldHVybnMgMCBpZiB0aGUgaW50ZXJydXB0IHNob3VsZCBiZSBpZ25vcmVkLgorICovCitzdGF0aWMgaW50IHBjMjM2X2ludHJfY2hlY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5lbmFibGVfaXJxKSB7CisJCXJldHZhbCA9IDE7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJaWYgKGRldnByaXYtPmxjcl9pb2Jhc2UpIHsKKwkJCWlmICgoaW5sKGRldnByaXYtPmxjcl9pb2Jhc2UgKyBQTFg5MDUyX0lOVENTUikKKwkJCQkJJiBQTFg5MDUyX0lOVENTUl9MSTFTVEFUX01BU0spCisJCQkJPT0gUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9JTkFDVElWRSkgeworCQkJCXJldHZhbCA9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIENsZWFyIGludGVycnVwdCBhbmQga2VlcCBpdCBlbmFibGVkLiAqLworCQkJCW91dGwoUENJMjM2X0lOVFJfRU5BQkxFLAorCQkJCQlkZXZwcml2LT5sY3JfaW9iYXNlICsgUExYOTA1Ml9JTlRDU1IpOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBJbnB1dCBmcm9tIHN1YmRldmljZSAxLgorICogQ29waWVkIGZyb20gdGhlIGNvbWVkaV9wYXJwb3J0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMV0gPSAwOworCXJldHVybiAyOworfQorCisvKgorICogU3ViZGV2aWNlIDEgY29tbWFuZCB0ZXN0LgorICogQ29waWVkIGZyb20gdGhlIGNvbWVkaV9wYXJwb3J0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogaWdub3JlZCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6ICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBpZ25vcmVkICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCisvKgorICogU3ViZGV2aWNlIDEgY29tbWFuZC4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXBjMjM2X2ludHJfZW5hYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN1YmRldmljZSAxIGNhbmNlbCBjb21tYW5kLgorICovCitzdGF0aWMgaW50IHBjMjM2X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcGMyMzZfaW50cl9kaXNhYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBCYXNlZCBvbiB0aGUgY29tZWRpX3BhcnBvcnQgZHJpdmVyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcGMyMzZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWludCBoYW5kbGVkOworCisJaGFuZGxlZCA9IHBjMjM2X2ludHJfY2hlY2soZGV2KTsKKwlpZiAoZGV2LT5hdHRhY2hlZCAmJiBoYW5kbGVkKSB7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzI2My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YWM0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYwpAQCAtMCwwICsxLDQzMSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbXBsY19wYzI2My5jCisgICAgRHJpdmVyIGZvciBBbXBsaWNvbiBQQzI2MyBhbmQgUENJMjYzIHJlbGF5IGJvYXJkcy4KKworICAgIENvcHlyaWdodCAoQykgMjAwMiBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogYW1wbGNfcGMyNjMKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiBQQzI2MywgUENJMjYzCitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQzI2MyAocGMyNjMpLCBQQ0kyNjMgKHBjaTI2MyBvciBhbXBsY19wYzI2MykKK1VwZGF0ZWQ6IFdlZCwgMjIgT2N0IDIwMDggMTQ6MTA6NTMgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUEMyNjM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQ0kyNjM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlIHdpbGwgYmUKKyAgdXNlZC4KKworRWFjaCBib2FyZCBhcHBlYXJzIGFzIG9uZSBzdWJkZXZpY2UsIHdpdGggMTYgZGlnaXRhbCBvdXRwdXRzLCBlYWNoCitjb25uZWN0ZWQgdG8gYSByZWVkLXJlbGF5LiBSZWxheSBjb250YWN0cyBhcmUgY2xvc2VkIHdoZW4gb3V0cHV0IGlzIDEuCitUaGUgc3RhdGUgb2YgdGhlIG91dHB1dHMgY2FuIGJlIHJlYWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgUEMyNjNfRFJJVkVSX05BTUUJImFtcGxjX3BjMjYzIgorCisvKiBQQ0kyNjMgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNjMgMHgwMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5WQUxJRCAweGZmZmYKKworLyogUEMyNjMgLyBQQ0kyNjMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDMjYzX0lPX1NJWkUJMgorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciBBbXBsaWNvbiBQQzI2MyAvIFBDSTI2My4KKyAqLworCitlbnVtIHBjMjYzX2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUgfTsKK2VudW0gcGMyNjNfbW9kZWwgeyBwYzI2M19tb2RlbCwgcGNpMjYzX21vZGVsLCBhbnlwY2lfbW9kZWwgfTsKKworc3RydWN0IHBjMjYzX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmZhbmN5X25hbWU7CisJdW5zaWduZWQgc2hvcnQgZGV2aWQ7CisJZW51bSBwYzI2M19idXN0eXBlIGJ1c3R5cGU7CisJZW51bSBwYzI2M19tb2RlbCBtb2RlbDsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjMjYzX2JvYXJkIHBjMjYzX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGMyNjMiLAorCSAgICAgIGZhbmN5X25hbWU6IlBDMjYzIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyNjNfbW9kZWwsCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJInBjaTI2MyIsCisJICAgICAgZmFuY3lfbmFtZToiUENJMjYzIiwKKwkgICAgICBkZXZpZDoJUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNjMsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjaTI2M19tb2RlbCwKKwkJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CVBDMjYzX0RSSVZFUl9OQU1FLAorCSAgICAgIGZhbmN5X25hbWU6UEMyNjNfRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJYW55cGNpX21vZGVsLAkvKiB3aWxkY2FyZCAqLworCQl9LAorI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwYzI2M19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI2MywgUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGMyNjNfcGNpX3RhYmxlKTsKKyNlbmRpZiAvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwYzI2M19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0cnVjdCBwYzI2M19wcml2YXRlIHsKKwkvKiBQQ0kgZGV2aWNlLiAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjMjYzX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGMyNjNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGMyNjNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGMyNjMgPSB7CisgICAgICBkcml2ZXJfbmFtZTpQQzI2M19EUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwYzI2M19hdHRhY2gsCisgICAgICBkZXRhY2g6cGMyNjNfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGMyNjNfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwYzI2M19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjMjYzX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjMjYzX2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgcGMyNjNfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwKKwl1bnNpZ25lZCBsb25nIGV4dGVudCk7CitzdGF0aWMgaW50IHBjMjYzX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGMyNjNfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3RlZCBib2FyZCBuYW1lLAorICogYnVzIGFuZCBzbG90LgorICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBpbnQKK3BjMjYzX2ZpbmRfcGNpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwlzdHJ1Y3QgcGNpX2RldiAqKnBjaV9kZXZfcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisKKwkqcGNpX2Rldl9wID0gTlVMTDsKKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UuICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sCisJCQlQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQkvKiBJZiBidXMvc2xvdCBzcGVjaWZpZWQsIGNoZWNrIHRoZW0uICovCisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0aGlzYm9hcmQtPm1vZGVsID09IGFueXBjaV9tb2RlbCkgeworCQkJLyogTWF0Y2ggYW55IHN1cHBvcnRlZCBtb2RlbC4gKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYzI2M19ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAocGMyNjNfYm9hcmRzW2ldLmJ1c3R5cGUgIT0gcGNpX2J1c3R5cGUpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwY2lfZGV2LT5kZXZpY2UgPT0gcGMyNjNfYm9hcmRzW2ldLmRldmlkKSB7CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZC4gKi8KKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSAmcGMyNjNfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBjMjYzX2JvYXJkcykpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQkvKiBNYXRjaCBzcGVjaWZpYyBtb2RlbCBuYW1lLiAqLworCQkJaWYgKHBjaV9kZXYtPmRldmljZSAhPSB0aGlzYm9hcmQtPmRldmlkKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRm91bmQgYSBtYXRjaC4gKi8KKwkJKnBjaV9kZXZfcCA9IHBjaV9kZXY7CisJCXJldHVybiAwOworCX0KKwkvKiBObyBtYXRjaCBmb3VuZC4gKi8KKwlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IGVycm9yISBubyAlcyBmb3VuZCBhdCBwY2kgJTAyeDolMDJ4IVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwgYnVzLCBzbG90KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQhXG4iLAorCQkJZGV2LT5taW5vciwgdGhpc2JvYXJkLT5uYW1lKTsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjMjYzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisJaW50IGJ1cyA9IDAsIHNsb3QgPSAwOworI2VuZGlmCisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGF0dGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyNjNfRFJJVkVSX05BTUUpOworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwYzI2M19wcml2YXRlKSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisjZW5kaWYKKwkvKiBQcm9jZXNzIG9wdGlvbnMuICovCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwljYXNlIHBjaV9idXN0eXBlOgorCQlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwkJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJCWlmICgocmV0ID0gcGMyNjNfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6ICVzOiBCVUchIGNhbm5vdCBkZXRlcm1pbmUgYm9hcmQgdHlwZSFcbiIsCisJCQlkZXYtPm1pbm9yLCBQQzI2M19EUklWRVJfTkFNRSk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8qIEVuYWJsZSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHNwYWNlcy4gKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChwY2lfZGV2KSB7CisJCWlmICgocmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgUEMyNjNfRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIiwKKwkJCQlkZXYtPm1pbm9yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCX0gZWxzZQorI2VuZGlmCisJeworCQlyZXQgPSBwYzI2M19yZXF1ZXN0X3JlZ2lvbihkZXYtPm1pbm9yLCBpb2Jhc2UsIFBDMjYzX0lPX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfUlQ7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBwYzI2M19kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gcGMyNjNfZGlvX2luc25fY29uZmlnOworCS8qIGFsbCBvdXRwdXRzICovCisJcy0+aW9fYml0cyA9IDB4ZmZmZjsKKwkvKiByZWFkIGluaXRpYWwgcmVsYXkgc3RhdGUgKi8KKwlzLT5zdGF0ZSA9IGluYihkZXYtPmlvYmFzZSk7CisJcy0+c3RhdGUgPSBzLT5zdGF0ZSB8IChpbmIoZGV2LT5pb2Jhc2UpIDw8IDgpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzICIsIGRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBpc2FfYnVzdHlwZSkgeworCQlwcmludGsoIihiYXNlICUjbHgpICIsIGlvYmFzZSk7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlwcmludGsoIihwY2kgJXMpICIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKKyNlbmRpZgorCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGMyNjNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGRldGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyNjNfRFJJVkVSX05BTUUpOworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAoZGV2cHJpdikKKyNlbmRpZgorCXsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0gZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQzI2M19JT19TSVpFKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGV2LT5ib2FyZF9uYW1lKSB7CisJCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyByZW1vdmVkXG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhbmQgcmVxdWVzdHMgYW4gSS9PIHJlZ2lvbiwgcmVwb3J0aW5nIGFuIGVycm9yCisgKiBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LgorICovCitzdGF0aWMgaW50IHBjMjYzX3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCisJdW5zaWduZWQgbG9uZyBleHRlbnQpCit7CisJaWYgKCFmcm9tIHx8ICFyZXF1ZXN0X3JlZ2lvbihmcm9tLCBleHRlbnQsIFBDMjYzX0RSSVZFUl9OQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdCAoJSNseCwlbHUpIVxuIiwKKwkJCW1pbm9yLCBmcm9tLCBleHRlbnQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBwYzI2M19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgbGluZXMgKi8KKwkJb3V0YihzLT5zdGF0ZSAmIDB4RkYsIGRldi0+aW9iYXNlKTsKKwkJb3V0YihzLT5zdGF0ZSA+PiA4LCBkZXYtPmlvYmFzZSArIDEpOworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwKKwkgKiBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiAqLworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjMjYzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGMyNjMsIHBjMjYzX3BjaV90YWJsZSk7CisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzI2Myk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzBiOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCkBAIC0wLDAgKzEsMTU0NSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYworICAgIERyaXZlciBmb3IgQW1wbGljb24gUENJMjI0IGFuZCBQQ0kyMzQgQU8gYm9hcmRzLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IE1FViBMdGQuIDxodHRwOi8vd3d3Lm1ldi5jby51ay8+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFtcGxjX3BjaTIyNAorRGVzY3JpcHRpb246IEFtcGxpY29uIFBDSTIyNCwgUENJMjM0CitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQ0kyMjQgKGFtcGxjX3BjaTIyNCBvciBwY2kyMjQpLAorICBQQ0kyMzQgKGFtcGxjX3BjaTIyNCBvciBwY2kyMzQpCitVcGRhdGVkOiBXZWQsIDIyIE9jdCAyMDA4IDEyOjI1OjA4ICswMTAwCitTdGF0dXM6IHdvcmtzLCBidXQgc2VlIGNhdmVhdHMKKworU3VwcG9ydHM6CisKKyAgLSBhb19pbnNuIHJlYWQvd3JpdGUKKyAgLSBhb19kb19jbWQgbW9kZSB3aXRoIHRoZSBmb2xsb3dpbmcgc291cmNlczoKKworICAgIC0gc3RhcnRfc3JjICAgICAgICAgVFJJR19JTlQgICAgICAgIFRSSUdfRVhUCisgICAgLSBzY2FuX2JlZ2luX3NyYyAgICBUUklHX1RJTUVSICAgICAgVFJJR19FWFQKKyAgICAtIGNvbnZlcnRfc3JjICAgICAgIFRSSUdfTk9XCisgICAgLSBzY2FuX2VuZF9zcmMgICAgICBUUklHX0NPVU5UCisgICAgLSBzdG9wX3NyYyAgICAgICAgICBUUklHX0NPVU5UICAgICAgVFJJR19FWFQgICAgICAgIFRSSUdfTk9ORQorCisgICAgVGhlIGNoYW5uZWwgbGlzdCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYW5uZWwgd2l0aCBubyByZXBlYXRlZAorICAgIGNoYW5uZWxzLiAgVGhlIHNjYW4gZW5kIGNvdW50IG11c3QgZXF1YWwgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbgorICAgIHRoZSBjaGFubmVsIGxpc3QuCisKKyAgICBUaGVyZSBpcyBvbmx5IG9uZSBleHRlcm5hbCB0cmlnZ2VyIHNvdXJjZSBzbyBvbmx5IG9uZSBvZiBzdGFydF9zcmMsCisgICAgc2Nhbl9iZWdpbl9zcmMgb3Igc3RvcF9zcmMgbWF5IHVzZSBUUklHX0VYVC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjI0OgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpLgorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSSBkZXZpY2UKKyAgICAgICAgICB3aWxsIGJlIHVzZWQuCisgIFsyXSAtIFNlbGVjdCBhdmFpbGFibGUgcmFuZ2VzIGFjY29yZGluZyB0byBqdW1wZXIgTEsxLiAgQWxsIGNoYW5uZWxzCisgICAgICAgIGFyZSBzZXQgdG8gdGhlIHNhbWUgcmFuZ2U6CisgICAgICAgIDA9SnVtcGVyIHBvc2l0aW9uIDEtMiAoZmFjdG9yeSBkZWZhdWx0KSwgNCBzb2Z0d2FyZS1zZWxlY3RhYmxlCisgICAgICAgICAgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2VzLCBnaXZpbmcgNCBiaXBvbGFyIGFuZCA0IHVuaXBvbGFyCisgICAgICAgICAgcmFuZ2VzOgorICAgICAgICAgICAgWy0xMFYsKzEwVl0sIFstNVYsKzVWXSwgWy0yLjVWLCsyLjVWXSwgWy0xLjI1ViwrMS4yNVZdLAorICAgICAgICAgICAgWzAsKzEwVl0sIFswLCs1Vl0sIFswLCsyLjVWXSwgWzAsMS4yNVZdLgorICAgICAgICAxPUp1bXBlciBwb3NpdGlvbiAyLTMsIDEgZXh0ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UsIGdpdmluZworICAgICAgICAgIDEgYmlwb2xhciBhbmQgMSB1bmlwb2xhciByYW5nZToKKyAgICAgICAgICAgIFstVmV4dCwrVmV4dF0sIFswLCtWZXh0XS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjM0OgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpLgorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSSBkZXZpY2UKKyAgICAgICAgICB3aWxsIGJlIHVzZWQuCisgIFsyXSAtIFNlbGVjdCBpbnRlcm5hbCBvciBleHRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBhY2NvcmRpbmcgdG8KKyAgICAgICAganVtcGVyIExLMS4gIFRoaXMgYWZmZWN0cyBhbGwgY2hhbm5lbHM6CisgICAgICAgIDA9SnVtcGVyIHBvc2l0aW9uIDEtMiAoZmFjdG9yeSBkZWZhdWx0KSwgVnJlZj01ViBpbnRlcm5hbC4KKyAgICAgICAgMT1KdW1wZXIgcG9zaXRpb24gMi0zLCBWcmVmPVZleHQgZXh0ZXJuYWwuCisgIFszXSAtIFNlbGVjdCBjaGFubmVsIDAgcmFuZ2UgYWNjb3JkaW5nIHRvIGp1bXBlciBMSzI6CisgICAgICAgIDA9SnVtcGVyIHBvc2l0aW9uIDItMyAoZmFjdG9yeSBkZWZhdWx0KSwgcmFuZ2UgWy0yKlZyZWYsKzIqVnJlZl0KKyAgICAgICAgICAoMTBWIGJpcG9sYXIgd2hlbiBvcHRpb25zWzJdPTApLgorICAgICAgICAxPUp1bXBlciBwb3NpdGlvbiAxLTIsIHJhbmdlIFstVnJlZiwrVnJlZl0KKyAgICAgICAgICAoNVYgYmlwb2xhciB3aGVuIG9wdGlvbnNbMl09MCkuCisgIFs0XSAtIFNlbGVjdCBjaGFubmVsIDEgcmFuZ2UgYWNjb3JkaW5nIHRvIGp1bXBlciBMSzM6IGNmLiBvcHRpb25zWzNdLgorICBbNV0gLSBTZWxlY3QgY2hhbm5lbCAyIHJhbmdlIGFjY29yZGluZyB0byBqdW1wZXIgTEs0OiBjZi4gb3B0aW9uc1szXS4KKyAgWzZdIC0gU2VsZWN0IGNoYW5uZWwgMyByYW5nZSBhY2NvcmRpbmcgdG8ganVtcGVyIExLNTogY2YuIG9wdGlvbnNbM10uCisKK1Bhc3NpbmcgYSB6ZXJvIGZvciBhbiBvcHRpb24gaXMgdGhlIHNhbWUgYXMgbGVhdmluZyBpdCB1bnNwZWNpZmllZC4KKworQ2F2ZWF0czoKKworICAxKSBBbGwgY2hhbm5lbHMgb24gdGhlIFBDSTIyNCBzaGFyZSB0aGUgc2FtZSByYW5nZS4gIEFueSBjaGFuZ2UgdG8gdGhlCisgICAgIHJhbmdlIGFzIGEgcmVzdWx0IG9mIGluc25fd3JpdGUgb3IgYSBzdHJlYW1pbmcgY29tbWFuZCB3aWxsIGFmZmVjdAorICAgICB0aGUgb3V0cHV0IHZvbHRhZ2VzIG9mIGFsbCBjaGFubmVscywgaW5jbHVkaW5nIHRob3NlIG5vdCBzcGVjaWZpZWQKKyAgICAgYnkgdGhlIGluc3RydWN0aW9uIG9yIGNvbW1hbmQuCisKKyAgMikgRm9yIHRoZSBhbmFsb2cgb3V0cHV0IGNvbW1hbmQsICB0aGUgZmlyc3Qgc2NhbiBtYXkgYmUgdHJpZ2dlcmVkCisgICAgIGZhbHNlbHkgYXQgdGhlIHN0YXJ0IG9mIGFjcXVpc2l0aW9uLiAgVGhpcyBvY2N1cnMgd2hlbiB0aGUgREFDIHNjYW4KKyAgICAgdHJpZ2dlciBzb3VyY2UgaXMgc3dpdGNoZWQgZnJvbSAnbm9uZScgdG8gJ3RpbWVyJyAoc2Nhbl9iZWdpbl9zcmMgPQorICAgICBUUklHX1RJTUVSKSBvciAnZXh0ZXJuYWwnIChzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgYXQgdGhlIHN0YXJ0CisgICAgIG9mIGFjcXVpc2l0aW9uIGFuZCB0aGUgdHJpZ2dlciBzb3VyY2UgaXMgYXQgbG9naWMgbGV2ZWwgMSBhdCB0aGUKKyAgICAgdGltZSBvZiB0aGUgc3dpdGNoLiAgVGhpcyBpcyB2ZXJ5IGxpa2VseSBmb3IgVFJJR19USU1FUi4gIEZvcgorICAgICBUUklHX0VYVCwgaXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YgdGhlIGV4dGVybmFsIGxpbmUgYW5kIHdoZXRoZXIKKyAgICAgdGhlIENSX0lOVkVSVCBmbGFnIGhhcyBiZWVuIHNldC4gIFRoZSByZW1haW5pbmcgc2NhbnMgYXJlIHRyaWdnZXJlZAorICAgICBjb3JyZWN0bHkuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJImFtcGxjX3BjaTIyNCIKKworLyoKKyAqIFBDSSBJRHMuCisgKi8KKy8qICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMjQgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM0IDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKy8qCisgKiBQQ0kyMjQvMjM0IGkvbyBzcGFjZSAxIChQQ0lCQVIyKSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgUENJMjI0X0lPMV9TSVpFCTB4MjAJLyogU2l6ZSBvZiBpL28gc3BhY2UgMSAoOC1iaXQgcmVnaXN0ZXJzKSAqLworI2RlZmluZSBQQ0kyMjRfWjJfQ1QwCTB4MTQJLyogODJDNTQgY291bnRlci90aW1lciAwICovCisjZGVmaW5lIFBDSTIyNF9aMl9DVDEJMHgxNQkvKiA4MkM1NCBjb3VudGVyL3RpbWVyIDEgKi8KKyNkZWZpbmUgUENJMjI0X1oyX0NUMgkweDE2CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgMiAqLworI2RlZmluZSBQQ0kyMjRfWjJfQ1RDCTB4MTcJLyogODJDNTQgY291bnRlci90aW1lciBjb250cm9sIHdvcmQgKi8KKyNkZWZpbmUgUENJMjI0X1pDTEtfU0NFCTB4MUEJLyogR3JvdXAgWiBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTIyNF9aR0FUX1NDRQkweDFECS8qIEdyb3VwIFogR2F0ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTIyNF9JTlRfU0NFCTB4MUUJLyogSVNSIEludGVycnVwdCBzb3VyY2UgbWFzayByZWdpc3RlciAqLworCQkJCS8qIC9JbnRlcnJ1cHQgc3RhdHVzICovCisKKy8qCisgKiBQQ0kyMjQvMjM0IGkvbyBzcGFjZSAyIChQQ0lCQVIzKSAxNi1iaXQgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFBDSTIyNF9JTzJfU0laRQkweDEwCS8qIFNpemUgb2YgaS9vIHNwYWNlIDIgKDE2LWJpdCByZWdpc3RlcnMpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDREFUQQkweDAwCS8qICh3LW8pIERBQyBGSUZPIGRhdGEuICovCisjZGVmaW5lIFBDSTIyNF9TT0ZUVFJJRwkweDAwCS8qIChyLW8pIERBQyBzb2Z0d2FyZSBzY2FuIHRyaWdnZXIuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT04JMHgwMgkvKiAoci93KSBEQUMgc3RhdHVzL2NvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIFBDSTIyNF9GSUZPU0laCTB4MDQJLyogKHctbykgRklGTyBzaXplIGZvciB3cmFwYXJvdW5kIG1vZGUuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDRU4JMHgwNgkvKiAody1vKSBEQUMgY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIuICovCisKKy8qCisgKiBEQUNDT04gdmFsdWVzLgorICovCisvKiAoci93KSBTY2FuIHRyaWdnZXIuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19NQVNLCQkoNyA8PCAwKQorI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfTk9ORQkJKDAgPDwgMCkJLyogbm9uZSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfU1cJCSgxIDw8IDApCS8qIHNvZnR3YXJlIHRyaWcgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9UUklHX0VYVFAJCSgyIDw8IDApCS8qIGV4dCArdmUgZWRnZSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfRVhUTgkJKDMgPDwgMCkJLyogZXh0IC12ZSBlZGdlICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMAkoNCA8PCAwKQkvKiBaMiBDVDAgb3V0ICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMQkoNSA8PCAwKQkvKiBaMiBDVDEgb3V0ICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMgkoNiA8PCAwKQkvKiBaMiBDVDIgb3V0ICovCisvKiAoci93KSBQb2xhcml0eSAoUENJMjI0IG9ubHksIFBDSTIzNCBhbHdheXMgYmlwb2xhciEpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0sJKDEgPDwgMykKKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkJCSgwIDw8IDMpCS8qIHJhbmdlIFswLFZyZWZdICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fUE9MQVJfQkkJCSgxIDw8IDMpCS8qIHJhbmdlIFstVnJlZixWcmVmXSAqLworLyogKHIvdykgSW50ZXJuYWwgVnJlZiAoUENJMjI0IG9ubHksIHdoZW4gTEsxIGluIHBvc2l0aW9uIDEtMikuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl9NQVNLCQkoMyA8PCA0KQorI2RlZmluZSBQQ0kyMjRfREFDQ09OX1ZSRUZfMV8yNQkJKDAgPDwgNCkJLyogVnJlZiA9IDEuMjVWICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl8yXzUJCSgxIDw8IDQpCS8qIFZyZWYgPSAyLjVWICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl81CQkoMiA8PCA0KQkvKiBWcmVmID0gNVYgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9WUkVGXzEwCQkoMyA8PCA0KQkvKiBWcmVmID0gMTBWICovCisvKiAoci93KSBXcmFwYXJvdW5kIG1vZGUgZW5hYmxlICh0byBwbGF5IGJhY2sgc3RvcmVkIHdhdmVmb3JtKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPV1JBUAkJKDEgPDwgNykKKy8qIChyL3cpIEZJRk8gZW5hYmxlLiAgSXQgTVVTVCBiZSBzZXQhICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0VOQUIJCSgxIDw8IDgpCisvKiAoci93KSBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIChtb3N0IHZhbHVlcyBhcmUgbm90IHZlcnkgdXNlZnVsKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9NQVNLCSg3IDw8IDkpCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0lOVFJfRU1QVFkJKDAgPDwgOSkJLyogd2hlbiBlbXB0eSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX05FTVBUWQkoMSA8PCA5KQkvKiB3aGVuIG5vdCBlbXB0eSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX05IQUxGCSgyIDw8IDkpCS8qIHdoZW4gbm90IGhhbGYgZnVsbCAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0hBTEYJKDMgPDwgOSkJLyogd2hlbiBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9ORlVMTAkoNCA8PCA5KQkvKiB3aGVuIG5vdCBmdWxsICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0lOVFJfRlVMTAkoNSA8PCA5KQkvKiB3aGVuIGZ1bGwgKi8KKy8qIChyLW8pIEZJRk8gZmlsbCBsZXZlbC4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfTUFTSwkoNyA8PCAxMikKKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfRU1QVFkJKDEgPDwgMTIpCS8qIDAgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfT05FVE9IQUxGCSgwIDw8IDEyKQkvKiBbMSwyMDQ4XSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9IQUxGVE9GVUxMCSg0IDw8IDEyKQkvKiBbMjA0OSw0MDk1XSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9GVUxMCSg2IDw8IDEyKQkvKiA0MDk2ICovCisvKiAoci1vKSBEQUMgYnVzeSBmbGFnLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0JVU1kJCSgxIDw8IDE1KQorLyogKHctbykgRklGTyByZXNldC4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPUkVTRVQJCSgxIDw8IDEyKQorLyogKHctbykgR2xvYmFsIHJlc2V0IChub3Qgc3VyZSB3aGF0IGl0IGRvZXMpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0dMT0JBTFJFU0VUCSgxIDw8IDEzKQorCisvKgorICogREFDIEZJRk8gc2l6ZS4KKyAqLworI2RlZmluZSBQQ0kyMjRfRklGT19TSVpFCTQwOTYKKworLyoKKyAqIERBQyBGSUZPIGd1YXJhbnRlZWQgbWluaW11bSByb29tIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHJlcG9ydGVkIGZpbGwgbGV2ZWwuCisgKiBUaGUgbWF4aW11bSByb29tIGF2YWlsYWJsZSBkZXBlbmRzIG9uIHRoZSByZXBvcnRlZCBmaWxsIGxldmVsIGFuZCBob3cgbXVjaAorICogaGFzIGJlZW4gd3JpdHRlbiEKKyAqLworI2RlZmluZSBQQ0kyMjRfRklGT19ST09NX0VNUFRZCQlQQ0kyMjRfRklGT19TSVpFCisjZGVmaW5lIFBDSTIyNF9GSUZPX1JPT01fT05FVE9IQUxGCShQQ0kyMjRfRklGT19TSVpFIC8gMikKKyNkZWZpbmUgUENJMjI0X0ZJRk9fUk9PTV9IQUxGVE9GVUxMCTEKKyNkZWZpbmUgUENJMjI0X0ZJRk9fUk9PTV9GVUxMCQkwCisKKy8qCisgKiBDb3VudGVyL3RpbWVyIGNsb2NrIGlucHV0IGNvbmZpZ3VyYXRpb24gc291cmNlcy4KKyAqLworI2RlZmluZSBDTEtfQ0xLCQkwCS8qIHJlc2VydmVkIChjaGFubmVsLXNwZWNpZmljIGNsb2NrKSAqLworI2RlZmluZSBDTEtfMTBNSFoJMQkvKiBpbnRlcm5hbCAxMCBNSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzFNSFoJMgkvKiBpbnRlcm5hbCAxIE1IeiBjbG9jayAqLworI2RlZmluZSBDTEtfMTAwS0haCTMJLyogaW50ZXJuYWwgMTAwIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfMTBLSFoJNAkvKiBpbnRlcm5hbCAxMCBrSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzFLSFoJNQkvKiBpbnRlcm5hbCAxIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfT1VUTk0xCTYJLyogb3V0cHV0IG9mIGNoYW5uZWwtMSBtb2R1bG8gdG90YWwgKi8KKyNkZWZpbmUgQ0xLX0VYVAkJNwkvKiBleHRlcm5hbCBjbG9jayAqLworLyogTWFjcm8gdG8gY29uc3RydWN0IGNsb2NrIGlucHV0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUuICovCisjZGVmaW5lIENMS19DT05GSUcoY2hhbiwgc3JjKQkoKCgoY2hhbikgJiAzKSA8PCAzKSB8ICgoc3JjKSAmIDcpKQorLyogVGltZWJhc2VzIGluIG5zLiAqLworI2RlZmluZSBUSU1FQkFTRV8xME1IWgkJMTAwCisjZGVmaW5lIFRJTUVCQVNFXzFNSFoJCTEwMDAKKyNkZWZpbmUgVElNRUJBU0VfMTAwS0haCQkxMDAwMAorI2RlZmluZSBUSU1FQkFTRV8xMEtIWgkJMTAwMDAwCisjZGVmaW5lIFRJTUVCQVNFXzFLSFoJCTEwMDAwMDAKKworLyoKKyAqIENvdW50ZXIvdGltZXIgZ2F0ZSBpbnB1dCBjb25maWd1cmF0aW9uIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgR0FUX1ZDQwkJMAkvKiBWQ0MgKGkuZS4gZW5hYmxlZCkgKi8KKyNkZWZpbmUgR0FUX0dORAkJMQkvKiBHTkQgKGkuZS4gZGlzYWJsZWQpICovCisjZGVmaW5lIEdBVF9FWFQJCTIJLyogcmVzZXJ2ZWQgKGV4dGVybmFsIGdhdGUgaW5wdXQpICovCisjZGVmaW5lIEdBVF9OT1VUTk0yCTMJLyogaW52ZXJ0ZWQgb3V0cHV0IG9mIGNoYW5uZWwtMiBtb2R1bG8gdG90YWwgKi8KKy8qIE1hY3JvIHRvIGNvbnN0cnVjdCBnYXRlIGlucHV0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUuICovCisjZGVmaW5lIEdBVF9DT05GSUcoY2hhbiwgc3JjKQkoKCgoY2hhbikgJiAzKSA8PCAzKSB8ICgoc3JjKSAmIDcpKQorCisvKgorICogU3VtbWFyeSBvZiBDTEtfT1VUTk0xIGFuZCBHQVRfTk9VVE5NMiBjb25uZWN0aW9ucyBmb3IgUENJMjI0IGFuZCBQQ0kyMzQ6CisgKgorICogICAgICAgICAgICAgIENoYW5uZWwncyAgICAgICBDaGFubmVsJ3MKKyAqICAgICAgICAgICAgICBjbG9jayBpbnB1dCAgICAgZ2F0ZSBpbnB1dAorICogQ2hhbm5lbCAgICAgIENMS19PVVROTTEgICAgICBHQVRfTk9VVE5NMgorICogLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLQorICogWjItQ1QwICAgICAgIFoyLUNUMi1PVVQgICAgICAvWjItQ1QxLU9VVAorICogWjItQ1QxICAgICAgIFoyLUNUMC1PVVQgICAgICAvWjItQ1QyLU9VVAorICogWjItQ1QyICAgICAgIFoyLUNUMS1PVVQgICAgICAvWjItQ1QwLU9VVAorICovCisKKy8qCisgKiBJbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyBiaXRzCisgKi8KKyNkZWZpbmUgUENJMjI0X0lOVFJfRVhUCQkweDAxCS8qIHJpc2luZyBlZGdlIG9uIGV4dGVybmFsIGlucHV0ICovCisjZGVmaW5lIFBDSTIyNF9JTlRSX0RBQwkJMHgwNAkvKiBEQUMgKEZJRk8pIGludGVycnVwdCAqLworI2RlZmluZSBQQ0kyMjRfSU5UUl9aMkNUMQkweDIwCS8qIHJpc2luZyBlZGdlIG9uIFoyLUNUMSBvdXRwdXQgKi8KKworI2RlZmluZSBQQ0kyMjRfSU5UUl9FREdFX0JJVFMJKFBDSTIyNF9JTlRSX0VYVCB8IFBDSTIyNF9JTlRSX1oyQ1QxKQorI2RlZmluZSBQQ0kyMjRfSU5UUl9MRVZFTF9CSVRTCVBDSTIyNF9JTlRSX0RBQ0ZJRk8KKworLyoKKyAqIEhhbmR5IG1hY3Jvcy4KKyAqLworCisvKiBDb21iaW5lIG9sZCBhbmQgbmV3IGJpdHMuICovCisjZGVmaW5lIENPTUJJTkUob2xkLCBuZXcsIG1hc2spCSgoKG9sZCkgJiB+KG1hc2spKSB8ICgobmV3KSAmIChtYXNrKSkpCisKKy8qIEEgZ2VuZXJpYyBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgdmFsdWUuICAqLworI2RlZmluZSBOVUxMRlVOQwkwCisKKy8qIEN1cnJlbnQgQ1BVLiAgWFhYIHNob3VsZCB0aGlzIGJlIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpPyAqLworI2RlZmluZSBUSElTQ1BVCQlzbXBfcHJvY2Vzc29yX2lkKCkKKworLyogU3RhdGUgYml0cyBmb3IgdXNlIHdpdGggYXRvbWljIGJpdCBvcGVyYXRpb25zLiAqLworI2RlZmluZSBBT19DTURfU1RBUlRFRAkwCisKKy8qCisgKiBSYW5nZSB0YWJsZXMuCisgKi8KKworLyogVGhlIHNvZnR3YXJlIHNlbGVjdGFibGUgaW50ZXJuYWwgcmFuZ2VzIGZvciBQQ0kyMjQgKG9wdGlvblsyXSA9PSAwKS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kyMjRfaW50ZXJuYWwgPSB7CisJOCwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBod3JhbmdlX3BjaTIyNF9pbnRlcm5hbFs4XSA9IHsKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzEwLAorCVBDSTIyNF9EQUNDT05fUE9MQVJfQkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfNSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzJfNSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzFfMjUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfMTAsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfNSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX1VOSSB8IFBDSTIyNF9EQUNDT05fVlJFRl8yXzUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfMV8yNSwKK307CisKKy8qIFRoZSBzb2Z0d2FyZSBzZWxlY3RhYmxlIGV4dGVybmFsIHJhbmdlcyBmb3IgUENJMjI0IChvcHRpb25bMl0gPT0gMSkuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMjI0X2V4dGVybmFsID0geworCTIsCisJeworCQkJUkFOR0VfZXh0KC0xLCAxKSwJLyogYmlwb2xhciBbLVZyZWYsK1ZyZWZdICovCisJCQlSQU5HRV9leHQoMCwgMSksCS8qIHVuaXBvbGFyIFswLCtWcmVmXSAqLworCQl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaHdyYW5nZV9wY2kyMjRfZXh0ZXJuYWxbMl0gPSB7CisJUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX1VOSSwKK307CisKKy8qIFRoZSBoYXJkd2FyZSBzZWxlY3RhYmxlIFZyZWYqMiBleHRlcm5hbCByYW5nZSBmb3IgUENJMjM0CisgKiAob3B0aW9uWzJdID09IDEsIG9wdGlvblszK25dID09IDApLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTIzNF9leHQyID0geworCTEsCisJeworCQkJUkFOR0VfZXh0KC0yLCAyKSwKKwkJfQorfTsKKworLyogVGhlIGhhcmR3YXJlIHNlbGVjdGFibGUgVnJlZiBleHRlcm5hbCByYW5nZSBmb3IgUENJMjM0CisgKiAob3B0aW9uWzJdID09IDEsIG9wdGlvblszK25dID09IDEpLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTIzNF9leHQgPSB7CisJMSwKKwl7CisJCQlSQU5HRV9leHQoLTEsIDEpLAorCQl9Cit9OworCisvKiBUaGlzIHNlcnZlcyBmb3IgYWxsIHRoZSBQQ0kyMzQgcmFuZ2VzLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGh3cmFuZ2VfcGNpMjM0WzFdID0geworCVBDSTIyNF9EQUNDT05fUE9MQVJfQkksCS8qIGJpcG9sYXIgLSBoYXJkd2FyZSBpZ25vcmVzIGl0ISAqLworfTsKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucy4KKyAqLworCitlbnVtIHBjaTIyNF9tb2RlbCB7IGFueV9tb2RlbCwgcGNpMjI0X21vZGVsLCBwY2kyMzRfbW9kZWwgfTsKKworc3RydWN0IHBjaTIyNF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpZDsKKwllbnVtIHBjaTIyNF9tb2RlbCBtb2RlbDsKKwl1bnNpZ25lZCBpbnQgYW9fY2hhbnM7CisJdW5zaWduZWQgaW50IGFvX2JpdHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaTIyNF9ib2FyZCBwY2kyMjRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2kyMjQiLAorCSAgICAgIGRldmlkOiBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIyNCwKKwkgICAgICBtb2RlbDoJcGNpMjI0X21vZGVsLAorCSAgICAgIGFvX2NoYW5zOjE2LAorCSAgICAgIGFvX2JpdHM6CTEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpMjM0IiwKKwkgICAgICBkZXZpZDogUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzQsCisJICAgICAgbW9kZWw6CXBjaTIzNF9tb2RlbCwKKwkgICAgICBhb19jaGFuczo0LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCQl9LAorCXsKKwkgICAgICBuYW1lOglEUklWRVJfTkFNRSwKKwkgICAgICBkZXZpZDogUENJX0RFVklDRV9JRF9JTlZBTElELAorCSAgICAgIG1vZGVsOglhbnlfbW9kZWwsCS8qIHdpbGRjYXJkICovCisJCX0sCit9OworCisvKgorICogUENJIGRyaXZlciB0YWJsZS4KKyAqLworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpMjI0X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjI0LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTIyNF9wY2lfdGFibGUpOworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKHN0cnVjdCBwY2kyMjRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHBjaTIyNF9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpod3JhbmdlOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlMTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXNwaW5sb2NrX3QgYW9fc3BpbmxvY2s7CisJdW5zaWduZWQgaW50ICphb19yZWFkYmFjazsKKwlzaG9ydCAqYW9fc2Nhbl92YWxzOworCXVuc2lnbmVkIGNoYXIgKmFvX3NjYW5fb3JkZXI7CisJaW50IGludHJfY3B1aWQ7CisJc2hvcnQgaW50cl9ydW5uaW5nOworCXVuc2lnbmVkIHNob3J0IGRhY2NvbjsKKwl1bnNpZ25lZCBpbnQgY2FjaGVkX2RpdjE7CisJdW5zaWduZWQgaW50IGNhY2hlZF9kaXYyOworCXVuc2lnbmVkIGludCBhb19zdG9wX2NvdW50OworCXNob3J0IGFvX3N0b3BfY29udGludW91czsKKwl1bnNpZ25lZCBzaG9ydCBhb19lbmFiOwkvKiBtYXggMTYgY2hhbm5lbHMgc28gJ3Nob3J0JyB3aWxsIGRvICovCisJdW5zaWduZWQgY2hhciBpbnRzY2U7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMjI0X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kyMjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGNpMjI0ID0geworICAgICAgZHJpdmVyX25hbWU6RFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpMjI0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kyMjRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGNpMjI0X2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNpMjI0X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YocGNpMjI0X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjaTIyNF9ib2FyZCksCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wY2kyMjQsIHBjaTIyNF9wY2lfdGFibGUpOworCisvKgorICogQ2FsbGVkIGZyb20gdGhlICdpbnNuX3dyaXRlJyBmdW5jdGlvbiB0byBwZXJmb3JtIGEgc2luZ2xlIHdyaXRlLgorICovCitzdGF0aWMgdm9pZAorcGNpMjI0X2FvX3NldF9kYXRhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbiwgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgZGF0YSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBtYW5nbGVkOworCisJLyogU3RvcmUgdW5tYW5nbGVkIGRhdGEgZm9yIHJlYWRiYWNrLiAqLworCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YTsKKwkvKiBFbmFibGUgdGhlIGNoYW5uZWwuICovCisJb3V0dygxIDw8IGNoYW4sIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CisJLyogU2V0IHJhbmdlIGFuZCByZXNldCBGSUZPLiAqLworCWRldnByaXYtPmRhY2NvbiA9IENPTUJJTkUoZGV2cHJpdi0+ZGFjY29uLCBkZXZwcml2LT5od3JhbmdlW3JhbmdlXSwKKwkJKFBDSTIyNF9EQUNDT05fUE9MQVJfTUFTSyB8IFBDSTIyNF9EQUNDT05fVlJFRl9NQVNLKSk7CisJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwkvKgorCSAqIE1hbmdsZSB0aGUgZGF0YS4gIFRoZSBoYXJkd2FyZSBleHBlY3RzOgorCSAqIC0gYmlwb2xhcjogMTYtYml0IDIncyBjb21wbGVtZW50CisJICogLSB1bmlwb2xhcjogMTYtYml0IHVuc2lnbmVkCisJICovCisJbWFuZ2xlZCA9ICh1bnNpZ25lZCBzaG9ydClkYXRhIDw8ICgxNiAtIHRoaXNib2FyZC0+YW9fYml0cyk7CisJaWYgKChkZXZwcml2LT5kYWNjb24gJiBQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0spID09CisJCVBDSTIyNF9EQUNDT05fUE9MQVJfQkkpIHsKKwkJbWFuZ2xlZCBePSAweDgwMDA7CisJfQorCS8qIFdyaXRlIG1hbmdsZWQgZGF0YSB0byB0aGUgRklGTy4gKi8KKwlvdXR3KG1hbmdsZWQsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0RBVEEpOworCS8qIFRyaWdnZXIgdGhlIGNvbnZlcnNpb24uICovCisJaW53KGRldi0+aW9iYXNlICsgUENJMjI0X1NPRlRUUklHKTsKK30KKworLyoKKyAqICdpbnNuX3dyaXRlJyBmdW5jdGlvbiBmb3IgQU8gc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitwY2kyMjRfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4sIHJhbmdlOworCisJLyogVW5wYWNrIGNoYW5uZWwgYW5kIHJhbmdlLiAqLworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlwY2kyMjRfYW9fc2V0X2RhdGEoZGV2LCBjaGFuLCByYW5nZSwgZGF0YVtpXSk7CisJfQorCXJldHVybiBpOworfQorCisvKgorICogJ2luc25fcmVhZCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqCisgKiBOLkIuIFRoZSB2YWx1ZSByZWFkIHdpbGwgbm90IGJlIHZhbGlkIGlmIHRoZSBEQUMgY2hhbm5lbCBoYXMKKyAqIG5ldmVyIGJlZW4gd3JpdHRlbiBzdWNjZXNzZnVsbHkgc2luY2UgdGhlIGRldmljZSB3YXMgYXR0YWNoZWQKKyAqIG9yIHNpbmNlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQgYnkgYW4gQU8gc3RyZWFtaW5nIHdyaXRlCisgKiBjb21tYW5kLgorICovCitzdGF0aWMgaW50CitwY2kyMjRfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCisvKgorICogSnVzdCBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUgZnVuY3Rpb24gJ2k4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXInLgorICovCitzdGF0aWMgdm9pZAorcGNpMjI0X2Nhc2NhZGVfbnNfdG9fdGltZXIoaW50IG9zY19iYXNlLCB1bnNpZ25lZCBpbnQgKmQxLCB1bnNpZ25lZCBpbnQgKmQyLAorCXVuc2lnbmVkIGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpCit7CisJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihvc2NfYmFzZSwgZDEsIGQyLCBuYW5vc2VjLCByb3VuZF9tb2RlKTsKK30KKworLyoKKyAqIEtpbGxzIGEgY29tbWFuZCBydW5uaW5nIG9uIHRoZSBBTyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHBjaTIyNF9hb19zdG9wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpKSB7CisJCXJldHVybjsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJLyogS2lsbCB0aGUgaW50ZXJydXB0cy4gKi8KKwlkZXZwcml2LT5pbnRzY2UgPSAwOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9JTlRfU0NFKTsKKwkvKgorCSAqIEludGVycnVwdCByb3V0aW5lIG1heSBvciBtYXkgbm90IGJlIHJ1bm5pbmcuICBXZSBtYXkgb3IgbWF5IG5vdAorCSAqIGhhdmUgYmVlbiBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHJvdXRpbmUgKGRpcmVjdGx5IG9yCisJICogaW5kaXJlY3RseSB2aWEgYSBjb21lZGlfZXZlbnRzKCkgY2FsbGJhY2sgcm91dGluZSkuICBJdCdzIGhpZ2hseQorCSAqIHVubGlrZWx5IHRoYXQgd2UndmUgYmVlbiBjYWxsZWQgZnJvbSBzb21lIG90aGVyIGludGVycnVwdCByb3V0aW5lCisJICogYnV0IHdobyBrbm93cyB3aGF0IHN0cmFuZ2UgdGhpbmdzIGNvZGVycyBnZXQgdXAgdG8hCisJICoKKwkgKiBJZiB0aGUgaW50ZXJydXB0IHJvdXRpbmUgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHdhaXQgZm9yIGl0IHRvCisJICogZmluaXNoLCB1bmxlc3Mgd2UgYXBwZWFyIHRvIGhhdmUgYmVlbiBjYWxsZWQgdmlhIHRoZSBpbnRlcnJ1cHQKKwkgKiByb3V0aW5lLgorCSAqLworCXdoaWxlIChkZXZwcml2LT5pbnRyX3J1bm5pbmcgJiYgZGV2cHJpdi0+aW50cl9jcHVpZCAhPSBUSElTQ1BVKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCS8qIFJlY29uZmlndXJlIERBQyBmb3IgaW5zbl93cml0ZSB1c2FnZS4gKi8KKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CS8qIERpc2FibGUgY2hhbm5lbHMuICovCisJZGV2cHJpdi0+ZGFjY29uID0gQ09NQklORShkZXZwcml2LT5kYWNjb24sCisJCVBDSTIyNF9EQUNDT05fVFJJR19TVyB8IFBDSTIyNF9EQUNDT05fRklGT0lOVFJfRU1QVFksCisJCVBDSTIyNF9EQUNDT05fVFJJR19NQVNLIHwgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9NQVNLKTsKKwlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIyNF9EQUNDT05fRklGT1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworfQorCisvKgorICogSGFuZGxlcyBzdGFydCBvZiBhY3F1aXNpdGlvbiBmb3IgdGhlIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIHZvaWQgcGNpMjI0X2FvX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZXRfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzICYmIGRldnByaXYtPmFvX3N0b3BfY291bnQgPT0gMCkgeworCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KKwkJcGNpMjI0X2FvX3N0b3AoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgaW50ZXJydXB0cy4gKi8KKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQkJZGV2cHJpdi0+aW50c2NlID0gUENJMjI0X0lOVFJfRVhUIHwgUENJMjI0X0lOVFJfREFDOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+aW50c2NlID0gUENJMjI0X0lOVFJfREFDOworCQl9CisJCW91dGIoZGV2cHJpdi0+aW50c2NlLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGVzIGludGVycnVwdHMgZnJvbSB0aGUgREFDIEZJRk8uCisgKi8KK3N0YXRpYyB2b2lkIHBjaTIyNF9hb19oYW5kbGVfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgbnVtX3NjYW5zOworCXVuc2lnbmVkIGludCByb29tOworCXVuc2lnbmVkIHNob3J0IGRhY3N0YXQ7CisJdW5zaWduZWQgaW50IGksIG47CisJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zY2FuOworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWJ5dGVzX3Blcl9zY2FuID0gY21kLT5jaGFubGlzdF9sZW4gKiBzaXplb2Yoc2hvcnQpOworCX0gZWxzZSB7CisJCS8qIFNob3VsZG4ndCBnZXQgaGVyZSEgKi8KKwkJYnl0ZXNfcGVyX3NjYW4gPSBzaXplb2Yoc2hvcnQpOworCX0KKwkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHNjYW5zIGF2YWlsYWJsZSBpbiBidWZmZXIuICovCisJbnVtX3NjYW5zID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHMtPmFzeW5jKSAvIGJ5dGVzX3Blcl9zY2FuOworCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzKSB7CisJCS8qIEZpeGVkIG51bWJlciBvZiBzY2Fucy4gKi8KKwkJaWYgKG51bV9zY2FucyA+IGRldnByaXYtPmFvX3N0b3BfY291bnQpIHsKKwkJCW51bV9zY2FucyA9IGRldnByaXYtPmFvX3N0b3BfY291bnQ7CisJCX0KKwl9CisKKwkvKiBEZXRlcm1pbmUgaG93IG11Y2ggcm9vbSBpcyBpbiB0aGUgRklGTyAoaW4gc2FtcGxlcykuICovCisJZGFjc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCXN3aXRjaCAoZGFjc3RhdCAmIFBDSTIyNF9EQUNDT05fRklGT0ZMX01BU0spIHsKKwljYXNlIFBDSTIyNF9EQUNDT05fRklGT0ZMX0VNUFRZOgorCQlyb29tID0gUENJMjI0X0ZJRk9fUk9PTV9FTVBUWTsKKwkJaWYgKCFkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMKKwkJCSYmIGRldnByaXYtPmFvX3N0b3BfY291bnQgPT0gMCkgeworCQkJLyogRklGTyBlbXB0eSBhdCBlbmQgb2YgY291bnRlZCBhY3F1aXNpdGlvbi4gKi8KKwkJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDSTIyNF9EQUNDT05fRklGT0ZMX09ORVRPSEFMRjoKKwkJcm9vbSA9IFBDSTIyNF9GSUZPX1JPT01fT05FVE9IQUxGOworCQlicmVhazsKKwljYXNlIFBDSTIyNF9EQUNDT05fRklGT0ZMX0hBTEZUT0ZVTEw6CisJCXJvb20gPSBQQ0kyMjRfRklGT19ST09NX0hBTEZUT0ZVTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJvb20gPSBQQ0kyMjRfRklGT19ST09NX0ZVTEw7CisJCWJyZWFrOworCX0KKwlpZiAocm9vbSA+PSBQQ0kyMjRfRklGT19ST09NX09ORVRPSEFMRikgeworCQkvKiBGSUZPIGlzIGxlc3MgdGhhbiBoYWxmLWZ1bGwuICovCisJCWlmIChudW1fc2NhbnMgPT0gMCkgeworCQkJLyogTm90aGluZyBsZWZ0IHRvIHB1dCBpbiB0aGUgRklGTy4gKi8KKwkJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCXJ0X3ByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6ICIKKwkJCQkiQU8gYnVmZmVyIHVuZGVycnVuXG4iLCBkZXYtPm1pbm9yKTsKKwkJfQorCX0KKwkvKiBEZXRlcm1pbmUgaG93IG1hbnkgbmV3IHNjYW5zIGNhbiBiZSBwdXQgaW4gdGhlIEZJRk8uICovCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCXJvb20gLz0gY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8qIERldGVybWluZSBob3cgbWFueSBzY2FucyB0byBwcm9jZXNzLiAqLworCWlmIChudW1fc2NhbnMgPiByb29tKSB7CisJCW51bV9zY2FucyA9IHJvb207CisJfQorCS8qIFByb2Nlc3Mgc2NhbnMuICovCisJZm9yIChuID0gMDsgbiA8IG51bV9zY2FuczsgbisrKSB7CisJCWNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsICZkZXZwcml2LT5hb19zY2FuX3ZhbHNbMF0sCisJCQlieXRlc19wZXJfc2Nhbik7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlvdXR3KGRldnByaXYtPmFvX3NjYW5fdmFsc1tkZXZwcml2LT4KKwkJCQkJYW9fc2Nhbl9vcmRlcltpXV0sCisJCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDREFUQSk7CisJCX0KKwl9CisJaWYgKCFkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMpIHsKKwkJZGV2cHJpdi0+YW9fc3RvcF9jb3VudCAtPSBudW1fc2NhbnM7CisJCWlmIChkZXZwcml2LT5hb19zdG9wX2NvdW50ID09IDApIHsKKwkJCS8qCisJCQkgKiBDaGFuZ2UgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCB0byB3YWl0CisJCQkgKiB1bnRpbCBGSUZPIGlzIGVtcHR5LgorCQkJICovCisJCQlkZXZwcml2LT5kYWNjb24gPSBDT01CSU5FKGRldnByaXYtPmRhY2NvbiwKKwkJCQlQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0VNUFRZLAorCQkJCVBDSTIyNF9EQUNDT05fRklGT0lOVFJfTUFTSyk7CisJCQlvdXR3KGRldnByaXYtPmRhY2NvbiwKKwkJCQlkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCQl9CisJfQorCWlmICgoZGV2cHJpdi0+ZGFjY29uICYgUENJMjI0X0RBQ0NPTl9UUklHX01BU0spID09CisJCVBDSTIyNF9EQUNDT05fVFJJR19OT05FKSB7CisJCXVuc2lnbmVkIHNob3J0IHRyaWc7CisKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBEQUMgRklGTyBpbnRlcnJ1cHQgYXQgdGhlCisJCSAqIHN0YXJ0IG9mIHRoZSBhY3F1aXNpdGlvbi4gIFRoZSBEQUMncyBzY2FuIHRyaWdnZXIKKwkJICogaGFzIGJlZW4gc2V0IHRvICdub25lJyB1cCB1bnRpbCBub3cuCisJCSAqCisJCSAqIE5vdyB0aGF0IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byB0aGUgRklGTywgdGhlCisJCSAqIERBQydzIHNjYW4gdHJpZ2dlciBzb3VyY2UgY2FuIGJlIHNldCB0byB0aGUKKwkJICogY29ycmVjdCB2YWx1ZS4KKwkJICoKKwkJICogQlVHOiBUaGUgZmlyc3Qgc2NhbiB3aWxsIGJlIHRyaWdnZXJlZCBpbW1lZGlhdGVseQorCQkgKiBpZiB0aGUgc2NhbiB0cmlnZ2VyIHNvdXJjZSBpcyBhdCBsb2dpYyBsZXZlbCAxLgorCQkgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJdHJpZyA9IFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMDsKKwkJfSBlbHNlIHsKKwkJCS8qIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgKi8KKwkJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfSU5WRVJUKSB7CisJCQkJdHJpZyA9IFBDSTIyNF9EQUNDT05fVFJJR19FWFROOworCQkJfSBlbHNlIHsKKwkJCQl0cmlnID0gUENJMjI0X0RBQ0NPTl9UUklHX0VYVFA7CisJCQl9CisJCX0KKwkJZGV2cHJpdi0+ZGFjY29uID0gQ09NQklORShkZXZwcml2LT5kYWNjb24sIHRyaWcsCisJCQlQQ0kyMjRfREFDQ09OX1RSSUdfTUFTSyk7CisJCW91dHcoZGV2cHJpdi0+ZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCX0KKwlpZiAocy0+YXN5bmMtPmV2ZW50cykgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9Cit9CisKKy8qCisgKiBJbnRlcm5hbCB0cmlnZ2VyIGZ1bmN0aW9uIHRvIHN0YXJ0IGFjcXVpc2l0aW9uIG9uIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2FvX2ludHRyaWdfc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTEZVTkM7CisJcGNpMjI0X2FvX3N0YXJ0KGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBNQVhfU0NBTl9QRVJJT0QJCTB4RkZGRkZGRkZVCisjZGVmaW5lIE1JTl9TQ0FOX1BFUklPRAkJMjUwMAorI2RlZmluZSBDT05WRVJUX1BFUklPRAkJNjI1CisKKy8qCisgKiAnZG9fY21kdGVzdCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIFN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkLiAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQgfCBUUklHX1RJTUVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX0VYVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBTdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwkgKiBjb21wYXRpYmxlLiAqLworCisJLyogdGhlc2UgdGVzdHMgYXJlIHRydWUgaWYgbW9yZSB0aGFuIG9uZSBfc3JjIGJpdCBpcyBzZXQgKi8KKwlpZiAoKGNtZC0+c3RhcnRfc3JjICYgKGNtZC0+c3RhcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChjbWQtPnNjYW5fYmVnaW5fc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5jb252ZXJ0X3NyYyAmIChjbWQtPmNvbnZlcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgJiAoY21kLT5zY2FuX2VuZF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnN0b3Bfc3JjICYgKGNtZC0+c3RvcF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisKKwkvKiBUaGVyZSdzIG9ubHkgb25lIGV4dGVybmFsIHRyaWdnZXIgc2lnbmFsICh3aGljaCBtYWtlcyB0aGVzZQorCSAqIHRlc3RzIGVhc2llcikuICBPbmx5IG9uZSB0aGluZyBjYW4gdXNlIGl0LiAqLworCXRtcCA9IDA7CisJaWYgKGNtZC0+c3RhcnRfc3JjICYgVFJJR19FWFQpCisJCXRtcCsrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICYgVFJJR19FWFQpCisJCXRtcCsrOworCWlmIChjbWQtPnN0b3Bfc3JjICYgVFJJR19FWFQpCisJCXRtcCsrOworCWlmICh0bXAgPiAxKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogU3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZS4gKi8KKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRm9yY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciAwLiAqLworCQlpZiAoKGNtZC0+c3RhcnRfYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gQ09NQklORShjbWQtPnN0YXJ0X2FyZywgMCwKKwkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQllcnIrKzsKKwkJfQorCQkvKiBUaGUgb25seSBmbGFnIGFsbG93ZWQgaXMgQ1JfRURHRSwgd2hpY2ggaXMgaWdub3JlZC4gKi8KKwkJaWYgKChjbWQtPnN0YXJ0X2FyZyAmIENSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSkgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSBDT01CSU5FKGNtZC0+c3RhcnRfYXJnLCAwLAorCQkJCUNSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSk7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUFYX1NDQU5fUEVSSU9EKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NDQU5fUEVSSU9EOworCQkJZXJyKys7CisJCX0KKwkJdG1wID0gY21kLT5jaGFubGlzdF9sZW4gKiBDT05WRVJUX1BFUklPRDsKKwkJaWYgKHRtcCA8IE1JTl9TQ0FOX1BFUklPRCkgeworCQkJdG1wID0gTUlOX1NDQU5fUEVSSU9EOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdG1wKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRm9yY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciAwLiAqLworCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiB+Q1JfRkxBR1NfTUFTSykgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IENPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQllcnIrKzsKKwkJfQorCQkvKiBPbmx5IGFsbG93IGZsYWdzIENSX0VER0UgYW5kIENSX0lOVkVSVC4gIElnbm9yZSBDUl9FREdFLiAqLworCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiBDUl9GTEFHU19NQVNLICYKKwkJCQl+KENSX0VER0UgfCBDUl9JTlZFUlQpKSAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCUNSX0ZMQUdTX01BU0sgJiB+KENSX0VER0UgfCBDUl9JTlZFUlQpKTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX2FyZyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogQW55IGNvdW50IGFsbG93ZWQuICovCisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIEZvcmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgMC4gKi8KKwkJaWYgKChjbWQtPnN0b3BfYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSBDT01CSU5FKGNtZC0+c3RvcF9hcmcsIDAsCisJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJZXJyKys7CisJCX0KKwkJLyogVGhlIG9ubHkgZmxhZyBhbGxvd2VkIGlzIENSX0VER0UsIHdoaWNoIGlzIGlnbm9yZWQuICovCisJCWlmICgoY21kLT5zdG9wX2FyZyAmIENSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSkgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IENPTUJJTkUoY21kLT5zdG9wX2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogU3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cy4gKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IGRpdjEsIGRpdjIsIHJvdW5kOworCQlpbnQgcm91bmRfbW9kZSA9IGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0s7CisKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJLyogQ2hlY2sgd2hldGhlciB0byB1c2UgYSBzaW5nbGUgdGltZXIuICovCisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLyAyOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJcm91bmQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLSAxOworCQkJYnJlYWs7CisJCX0KKwkJLyogQmUgY2FyZWZ1bCB0byBhdm9pZCBvdmVyZmxvdyEgKi8KKwkJZGl2MiA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBUSU1FQkFTRV8xME1IWjsKKwkJZGl2MiArPSAocm91bmQgKyBjbWQtPnNjYW5fYmVnaW5fYXJnICUgVElNRUJBU0VfMTBNSFopIC8KKwkJCVRJTUVCQVNFXzEwTUhaOworCQlpZiAoZGl2MiA8PSAweDEwMDAwKSB7CisJCQkvKiBBIHNpbmdsZSB0aW1lciB3aWxsIHN1ZmZpY2UuICovCisJCQlpZiAoZGl2MiA8IDIpCisJCQkJZGl2MiA9IDI7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gZGl2MiAqIFRJTUVCQVNFXzEwTUhaOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBkaXYyIHx8CisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8IFRJTUVCQVNFXzEwTUhaKSB7CisJCQkJLyogT3ZlcmZsb3chICovCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TQ0FOX1BFUklPRDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFVzZSB0d28gdGltZXJzLiAqLworCQkJZGl2MSA9IGRldnByaXYtPmNhY2hlZF9kaXYxOworCQkJZGl2MiA9IGRldnByaXYtPmNhY2hlZF9kaXYyOworCQkJcGNpMjI0X2Nhc2NhZGVfbnNfdG9fdGltZXIoVElNRUJBU0VfMTBNSFosICZkaXYxLCAmZGl2MiwKKwkJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgcm91bmRfbW9kZSk7CisJCQlkZXZwcml2LT5jYWNoZWRfZGl2MSA9IGRpdjE7CisJCQlkZXZwcml2LT5jYWNoZWRfZGl2MiA9IGRpdjI7CisJCX0KKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QuICovCisKKwlpZiAoY21kLT5jaGFubGlzdCAmJiAoY21kLT5jaGFubGlzdF9sZW4gPiAwKSkgeworCQl1bnNpZ25lZCBpbnQgcmFuZ2U7CisJCWVudW0geyByYW5nZV9lcnIgPSAxLCBkdXBjaGFuX2VyciA9IDIsIH07CisJCXVuc2lnbmVkIGVycm9yczsKKwkJdW5zaWduZWQgaW50IG47CisJCXVuc2lnbmVkIGludCBjaDsKKworCQkvKgorCQkgKiBDaGVjayBhbGwgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSByYW5nZSBpbmRleC4gIERvbid0IGNhcmUKKwkJICogYWJvdXQgYW5hbG9ndWUgcmVmZXJlbmNlLCBhcyB3ZSBjYW4ndCBjb25maWd1cmUgaXQuCisJCSAqCisJCSAqIENoZWNrIHRoZSBsaXN0IGhhcyBubyBkdXBsaWNhdGUgY2hhbm5lbHMuCisJCSAqLworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQllcnJvcnMgPSAwOworCQl0bXAgPSAwOworCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykgeworCQkJY2ggPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJaWYgKHRtcCAmICgxVSA8PCBjaCkpIHsKKwkJCQllcnJvcnMgfD0gZHVwY2hhbl9lcnI7CisJCQl9CisJCQl0bXAgfD0gKDFVIDw8IGNoKTsKKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKSAhPSByYW5nZSkgeworCQkJCWVycm9ycyB8PSByYW5nZV9lcnI7CisJCQl9CisJCX0KKwkJaWYgKGVycm9ycykgeworCQkJaWYgKGVycm9ycyAmIGR1cGNoYW5fZXJyKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6ICIgRFJJVkVSX05BTUUKKwkJCQkJIjogYW9fY21kdGVzdDogIgorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGNvbnRhaW4gbm8gIgorCQkJCQkiZHVwbGljYXRlIGNoYW5uZWxzXG4iLCBkZXYtPm1pbm9yKTsKKwkJCX0KKwkJCWlmIChlcnJvcnMgJiByYW5nZV9lcnIpIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogIiBEUklWRVJfTkFNRQorCQkJCQkiOiBhb19jbWR0ZXN0OiAiCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgIgorCQkJCQkidGhlIHNhbWUgcmFuZ2UgaW5kZXhcbiIsIGRldi0+bWlub3IpOworCQkJfQorCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBwY2kyMjRfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByYW5nZTsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBpbnQgY2g7CisJdW5zaWduZWQgaW50IHJhbms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIENhbm5vdCBoYW5kbGUgbnVsbC9lbXB0eSBjaGFubGlzdC4gKi8KKwlpZiAoY21kLT5jaGFubGlzdCA9PSBOVUxMIHx8IGNtZC0+Y2hhbmxpc3RfbGVuID09IDApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGV0ZXJtaW5lIHdoaWNoIGNoYW5uZWxzIGFyZSBlbmFibGVkIGFuZCB0aGVpciBsb2FkIG9yZGVyLiAgKi8KKwlkZXZwcml2LT5hb19lbmFiID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWNoID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJZGV2cHJpdi0+YW9fZW5hYiB8PSAxVSA8PCBjaDsKKwkJcmFuayA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBjbWQtPmNoYW5saXN0X2xlbjsgaisrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2pdKSA8IGNoKSB7CisJCQkJcmFuaysrOworCQkJfQorCQl9CisJCWRldnByaXYtPmFvX3NjYW5fb3JkZXJbcmFua10gPSBpOworCX0KKworCS8qIFNldCBlbmFibGVkIGNoYW5uZWxzLiAqLworCW91dHcoZGV2cHJpdi0+YW9fZW5hYiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ0VOKTsKKworCS8qIERldGVybWluZSByYW5nZSBhbmQgcG9sYXJpdHkuICBBbGwgY2hhbm5lbHMgdGhlIHNhbWUuICAqLworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisKKwkvKgorCSAqIFNldCBEQUMgcmFuZ2UgYW5kIHBvbGFyaXR5LgorCSAqIFNldCBEQUMgc2NhbiB0cmlnZ2VyIHNvdXJjZSB0byAnbm9uZScuCisJICogU2V0IERBQyBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIHRvICdub3QgaGFsZiBmdWxsJy4KKwkgKiBSZXNldCBEQUMgRklGTy4KKwkgKgorCSAqIE4uQi4gREFDIEZJRk8gaW50ZXJydXB0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkLgorCSAqLworCWRldnByaXYtPmRhY2NvbiA9IENPTUJJTkUoZGV2cHJpdi0+ZGFjY29uLAorCQkoZGV2cHJpdi0+aHdyYW5nZVtyYW5nZV0gfCBQQ0kyMjRfREFDQ09OX1RSSUdfTk9ORSB8CisJCQlQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX05IQUxGKSwKKwkJKFBDSTIyNF9EQUNDT05fUE9MQVJfTUFTSyB8IFBDSTIyNF9EQUNDT05fVlJFRl9NQVNLIHwKKwkJCVBDSTIyNF9EQUNDT05fVFJJR19NQVNLIHwgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9NQVNLKSk7CisJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IGRpdjEsIGRpdjIsIHJvdW5kOworCQl1bnNpZ25lZCBpbnQgbnMgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpbnQgcm91bmRfbW9kZSA9IGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0s7CisKKwkJLyogQ2hlY2sgd2hldGhlciB0byB1c2UgYSBzaW5nbGUgdGltZXIuICovCisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLyAyOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJcm91bmQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLSAxOworCQkJYnJlYWs7CisJCX0KKwkJLyogQmUgY2FyZWZ1bCB0byBhdm9pZCBvdmVyZmxvdyEgKi8KKwkJZGl2MiA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBUSU1FQkFTRV8xME1IWjsKKwkJZGl2MiArPSAocm91bmQgKyBjbWQtPnNjYW5fYmVnaW5fYXJnICUgVElNRUJBU0VfMTBNSFopIC8KKwkJCVRJTUVCQVNFXzEwTUhaOworCQlpZiAoZGl2MiA8PSAweDEwMDAwKSB7CisJCQkvKiBBIHNpbmdsZSB0aW1lciB3aWxsIHN1ZmZpY2UuICovCisJCQlpZiAoZGl2MiA8IDIpCisJCQkJZGl2MiA9IDI7CisJCQlkaXYyICY9IDB4ZmZmZjsKKwkJCWRpdjEgPSAxOwkvKiBGbGFnIHRoYXQgc2luZ2xlIHRpbWVyIHRvIGJlIHVzZWQuICovCisJCX0gZWxzZSB7CisJCQkvKiBVc2UgdHdvIHRpbWVycy4gKi8KKwkJCWRpdjEgPSBkZXZwcml2LT5jYWNoZWRfZGl2MTsKKwkJCWRpdjIgPSBkZXZwcml2LT5jYWNoZWRfZGl2MjsKKwkJCXBjaTIyNF9jYXNjYWRlX25zX3RvX3RpbWVyKFRJTUVCQVNFXzEwTUhaLCAmZGl2MSwgJmRpdjIsCisJCQkJJm5zLCByb3VuZF9tb2RlKTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBvdXRwdXQgb2YgdGltZXIgWjItMCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNjYW4gdHJpZ2dlcgorCQkgKiBzb3VyY2UuCisJCSAqLworCQkvKiBNYWtlIHN1cmUgWjItMCBpcyBnYXRlZCBvbi4gICovCisJCW91dGIoR0FUX0NPTkZJRygwLCBHQVRfVkNDKSwKKwkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkdBVF9TQ0UpOworCQlpZiAoZGl2MSA9PSAxKSB7CisJCQkvKiBOb3QgY2FzY2FkaW5nLiAgWjItMCBuZWVkcyAxMCBNSHogY2xvY2suICovCisJCQlvdXRiKENMS19DT05GSUcoMCwgQ0xLXzEwTUhaKSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1pDTEtfU0NFKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENhc2NhZGluZyB3aXRoIFoyLTIuICovCisJCQkvKiBNYWtlIHN1cmUgWjItMiBpcyBnYXRlZCBvbi4gICovCisJCQlvdXRiKEdBVF9DT05GSUcoMiwgR0FUX1ZDQyksCisJCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aR0FUX1NDRSk7CisJCQkvKiBaMi0yIG5lZWRzIDEwIE1IeiBjbG9jay4gKi8KKwkJCW91dGIoQ0xLX0NPTkZJRygyLCBDTEtfMTBNSFopLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkNMS19TQ0UpOworCQkJLyogTG9hZCBaMi0yIG1vZGUgKDIpIGFuZCBjb3VudGVyIChkaXYxKS4gKi8KKwkJCWk4MjU0X2xvYWQoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aMl9DVDAsIDAsCisJCQkJMiwgZGl2MSwgMik7CisJCQkvKiBaMi0wIGlzIGNsb2NrZWQgZnJvbSBaMi0yJ3Mgb3V0cHV0LiAqLworCQkJb3V0YihDTEtfQ09ORklHKDAsIENMS19PVVROTTEpLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkNMS19TQ0UpOworCQl9CisJCS8qIExvYWQgWjItMCBtb2RlICgyKSBhbmQgY291bnRlciAoZGl2MikuICovCisJCWk4MjU0X2xvYWQoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aMl9DVDAsIDAsIDAsIGRpdjIsIDIpOworCX0KKworCS8qCisJICogU29ydCBvdXQgZW5kIG9mIGFjcXVpc2l0aW9uLgorCSAqLworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogRml4ZWQgbnVtYmVyIG9mIHNjYW5zLiAgKi8KKwkJZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzID0gMDsKKwkJZGV2cHJpdi0+YW9fc3RvcF9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIENvbnRpbnVvdXMgc2NhbnMuICovCisJCWRldnByaXYtPmFvX3N0b3BfY29udGludW91cyA9IDE7CisJCWRldnByaXYtPmFvX3N0b3BfY291bnQgPSAwOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFNvcnQgb3V0IHN0YXJ0IG9mIGFjcXVpc2l0aW9uLgorCSAqLworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gJnBjaTIyNF9hb19pbnR0cmlnX3N0YXJ0OworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRW5hYmxlIGV4dGVybmFsIGludGVycnVwdCB0cmlnZ2VyIHRvIHN0YXJ0IGFjcXVpc2l0aW9uLiAqLworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCWRldnByaXYtPmludHNjZSB8PSBQQ0kyMjRfSU5UUl9FWFQ7CisJCW91dGIoZGV2cHJpdi0+aW50c2NlLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnY2FuY2VsJyBmdW5jdGlvbiBmb3IgQU8gc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlwY2kyMjRfYW9fc3RvcChkZXYsIHMpOworCXJldHVybiAwOworfQorCisvKgorICogJ211bmdlJyBkYXRhIGZvciBBTyBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorcGNpMjI0X2FvX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHZvaWQgKmRhdGEsCisJdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IGNoYW5faW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzaG9ydCAqYXJyYXkgPSBkYXRhOworCXVuc2lnbmVkIGludCBsZW5ndGggPSBudW1fYnl0ZXMgLyBzaXplb2YoKmFycmF5KTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBzaGlmdDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIFRoZSBoYXJkd2FyZSBleHBlY3RzIDE2LWJpdCBudW1iZXJzLiAqLworCXNoaWZ0ID0gMTYgLSB0aGlzYm9hcmQtPmFvX2JpdHM7CisJLyogQ2hhbm5lbHMgd2lsbCBiZSBhbGwgYmlwb2xhciBvciBhbGwgdW5pcG9sYXIuICovCisJaWYgKChkZXZwcml2LT5od3JhbmdlW0NSX1JBTkdFKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pXSAmCisJCQlQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0spID09IFBDSTIyNF9EQUNDT05fUE9MQVJfVU5JKSB7CisJCS8qIFVuaXBvbGFyICovCisJCW9mZnNldCA9IDA7CisJfSBlbHNlIHsKKwkJLyogQmlwb2xhciAqLworCQlvZmZzZXQgPSAzMjc2ODsKKwl9CisJLyogTXVuZ2UgdGhlIGRhdGEuICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWFycmF5W2ldID0gKGFycmF5W2ldIDw8IHNoaWZ0KSAtIG9mZnNldDsKKwl9Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIGlycXJldHVybl90IHBjaTIyNF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9ICZkZXYtPnN1YmRldmljZXNbMF07CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwl1bnNpZ25lZCBjaGFyIGludHN0YXQsIHZhbGlkX2ludHN0YXQ7CisJdW5zaWduZWQgY2hhciBjdXJlbmFiOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnRzdGF0ID0gaW5iKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfSU5UX1NDRSkgJiAweDNGOworCWlmIChpbnRzdGF0KSB7CisJCXJldHZhbCA9IDE7CisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJdmFsaWRfaW50c3RhdCA9IGRldnByaXYtPmludHNjZSAmIGludHN0YXQ7CisJCS8qIFRlbXBvcmFyaWx5IGRpc2FibGUgaW50ZXJydXB0IHNvdXJjZXMuICovCisJCWN1cmVuYWIgPSBkZXZwcml2LT5pbnRzY2UgJiB+aW50c3RhdDsKKwkJb3V0YihjdXJlbmFiLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQlkZXZwcml2LT5pbnRyX3J1bm5pbmcgPSAxOworCQlkZXZwcml2LT5pbnRyX2NwdWlkID0gVEhJU0NQVTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCWlmICh2YWxpZF9pbnRzdGF0ICE9IDApIHsKKwkJCWNtZCA9ICZzLT5hc3luYy0+Y21kOworCQkJaWYgKHZhbGlkX2ludHN0YXQgJiBQQ0kyMjRfSU5UUl9FWFQpIHsKKwkJCQlkZXZwcml2LT5pbnRzY2UgJj0gflBDSTIyNF9JTlRSX0VYVDsKKwkJCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJCQkJcGNpMjI0X2FvX3N0YXJ0KGRldiwgcyk7CisJCQkJfSBlbHNlIGlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCQkJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCQkJfQorCQkJfQorCQkJaWYgKHZhbGlkX2ludHN0YXQgJiBQQ0kyMjRfSU5UUl9EQUMpIHsKKwkJCQlwY2kyMjRfYW9faGFuZGxlX2ZpZm8oZGV2LCBzKTsKKwkJCX0KKwkJfQorCQkvKiBSZWVuYWJsZSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlpZiAoY3VyZW5hYiAhPSBkZXZwcml2LT5pbnRzY2UpIHsKKwkJCW91dGIoZGV2cHJpdi0+aW50c2NlLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfSU5UX1NDRSk7CisJCX0KKwkJZGV2cHJpdi0+aW50cl9ydW5uaW5nID0gMDsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiBJUlFfUkVUVkFMKHJldHZhbCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3RlZCBib2FyZCBuYW1lLAorICogYnVzIGFuZCBzbG90LgorICovCitzdGF0aWMgaW50CitwY2kyMjRfZmluZF9wY2koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90LAorCXN0cnVjdCBwY2lfZGV2ICoqcGNpX2Rldl9wKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKworCSpwY2lfZGV2X3AgPSBOVUxMOworCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZS4gKi8KKwlmb3IgKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpX2RldiAhPSBOVUxMOworCQlwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwKKwkJCXBjaV9kZXYpKSB7CisJCS8qIElmIGJ1cy9zbG90IHNwZWNpZmllZCwgY2hlY2sgdGhlbS4gKi8KKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRoaXNib2FyZC0+bW9kZWwgPT0gYW55X21vZGVsKSB7CisJCQkvKiBNYXRjaCBhbnkgc3VwcG9ydGVkIG1vZGVsLiAqLworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaTIyNF9ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAocGNpX2Rldi0+ZGV2aWNlID09IHBjaTIyNF9ib2FyZHNbaV0uZGV2aWQpIHsKKwkJCQkJLyogQ2hhbmdlIGJvYXJkX3B0ciB0byBtYXRjaGVkIGJvYXJkLiAqLworCQkJCQlkZXYtPmJvYXJkX3B0ciA9ICZwY2kyMjRfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBjaTIyNF9ib2FyZHMpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc3BlY2lmaWMgbW9kZWwgbmFtZS4gKi8KKwkJCWlmICh0aGlzYm9hcmQtPmRldmlkICE9IHBjaV9kZXYtPmRldmljZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIGEgbWF0Y2guICovCisJCSpwY2lfZGV2X3AgPSBwY2lfZGV2OworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gbWF0Y2ggZm91bmQuICovCisJaWYgKGJ1cyB8fCBzbG90KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISAiCisJCQkibm8gJXMgZm91bmQgYXQgcGNpICUwMng6JTAyeCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsIGJ1cywgc2xvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNpMjI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCBidXMgPSAwLCBzbG90ID0gMDsKKwl1bnNpZ25lZCBuOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBhdHRhY2hcbiIsIGRldi0+bWlub3IsIERSSVZFUl9OQU1FKTsKKworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTIyNF9wcml2YXRlKSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKChyZXQgPSBwY2kyMjRfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWRldnByaXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCisJaWYgKChyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2LCBEUklWRVJfTkFNRSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSAiCisJCQkiYW5kIHJlcXVlc3QgcmVnaW9ucyFcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+YW9fc3BpbmxvY2spOworCisJZGV2cHJpdi0+aW9iYXNlMSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAyKTsKKwlkZXYtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAzKTsKKwlpcnEgPSBwY2lfZGV2LT5pcnE7CisKKwkvKiBBbGxvY2F0ZSByZWFkYmFjayBidWZmZXIgZm9yIEFPIGNoYW5uZWxzLiAqLworCWRldnByaXYtPmFvX3JlYWRiYWNrID0ga21hbGxvYyhzaXplb2YoZGV2cHJpdi0+YW9fcmVhZGJhY2tbMF0pICoKKwkJdGhpc2JvYXJkLT5hb19jaGFucywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZwcml2LT5hb19yZWFkYmFjaykgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgdG8gaG9sZCB2YWx1ZXMgZm9yIEFPIGNoYW5uZWwgc2Nhbi4gKi8KKwlkZXZwcml2LT5hb19zY2FuX3ZhbHMgPSBrbWFsbG9jKHNpemVvZihkZXZwcml2LT5hb19zY2FuX3ZhbHNbMF0pICoKKwkJdGhpc2JvYXJkLT5hb19jaGFucywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZwcml2LT5hb19zY2FuX3ZhbHMpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQWxsb2NhdGUgYnVmZmVyIHRvIGhvbGQgQU8gY2hhbm5lbCBzY2FuIG9yZGVyLiAqLworCWRldnByaXYtPmFvX3NjYW5fb3JkZXIgPSBrbWFsbG9jKHNpemVvZihkZXZwcml2LT5hb19zY2FuX29yZGVyWzBdKSAqCisJCXRoaXNib2FyZC0+YW9fY2hhbnMsIEdGUF9LRVJORUwpOworCWlmICghZGV2cHJpdi0+YW9fc2Nhbl9vcmRlcikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCWRldnByaXYtPmludHNjZSA9IDA7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgREFDIGhhcmR3YXJlLiAqLworCW91dHcoUENJMjI0X0RBQ0NPTl9HTE9CQUxSRVNFVCwgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9GSUZPU0laKTsKKwlkZXZwcml2LT5kYWNjb24gPSAoUENJMjI0X0RBQ0NPTl9UUklHX1NXIHwgUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSB8CisJCVBDSTIyNF9EQUNDT05fRklGT0VOQUIgfCBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0VNUFRZKTsKKwlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIyNF9EQUNDT05fRklGT1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCisJLyogQWxsb2NhdGUgc3ViZGV2aWNlcy4gIFRoZXJlIGlzIG9ubHkgb25lISAgKi8KKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIEFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlLiAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9XUklURTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX2JpdHMpIC0gMTsKKwlzLT5pbnNuX3dyaXRlID0gJnBjaTIyNF9hb19pbnNuX3dyaXRlOworCXMtPmluc25fcmVhZCA9ICZwY2kyMjRfYW9faW5zbl9yZWFkOworCXMtPmxlbl9jaGFubGlzdCA9IHMtPm5fY2hhbjsKKworCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwlzLT5kb19jbWQgPSAmcGNpMjI0X2FvX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gJnBjaTIyNF9hb19jbWR0ZXN0OworCXMtPmNhbmNlbCA9ICZwY2kyMjRfYW9fY2FuY2VsOworCXMtPm11bmdlID0gJnBjaTIyNF9hb19tdW5nZTsKKworCS8qIFNvcnQgb3V0IGNoYW5uZWwgcmFuZ2Ugb3B0aW9ucy4gKi8KKwlpZiAodGhpc2JvYXJkLT5tb2RlbCA9PSBwY2kyMzRfbW9kZWwpIHsKKwkJLyogUENJMjM0IHJhbmdlIG9wdGlvbnMuICovCisJCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICoqcmFuZ2VfdGFibGVfbGlzdDsKKworCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gcmFuZ2VfdGFibGVfbGlzdCA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAqIHMtPm5fY2hhbiwKKwkJCUdGUF9LRVJORUwpOworCQlpZiAoIXMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWZvciAobiA9IDI7IG4gPCAzICsgcy0+bl9jaGFuOyBuKyspIHsKKwkJCWlmIChpdC0+b3B0aW9uc1tuXSA8IDAgfHwgaXQtPm9wdGlvbnNbbl0gPiAxKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY29tZWRpJWQ6ICVzOiB3YXJuaW5nISAiCisJCQkJCSJiYWQgb3B0aW9uc1sldV09JWRcbiIsCisJCQkJCWRldi0+bWlub3IsIERSSVZFUl9OQU1FLCBuLAorCQkJCQlpdC0+b3B0aW9uc1tuXSk7CisJCQl9CisJCX0KKwkJZm9yIChuID0gMDsgbiA8IHMtPm5fY2hhbjsgbisrKSB7CisJCQlpZiAobiA8IENPTUVESV9OREVWQ09ORk9QVFMgLSAzICYmCisJCQkJaXQtPm9wdGlvbnNbMyArIG5dID09IDEpIHsKKwkJCQlpZiAoaXQtPm9wdGlvbnNbMl0gPT0gMSkgeworCQkJCQlyYW5nZV90YWJsZV9saXN0W25dID0gJnJhbmdlX3BjaTIzNF9leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmFuZ2VfdGFibGVfbGlzdFtuXSA9ICZyYW5nZV9iaXBvbGFyNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChpdC0+b3B0aW9uc1syXSA9PSAxKSB7CisJCQkJCXJhbmdlX3RhYmxlX2xpc3Rbbl0gPQorCQkJCQkJJnJhbmdlX3BjaTIzNF9leHQyOworCQkJCX0gZWxzZSB7CisJCQkJCXJhbmdlX3RhYmxlX2xpc3Rbbl0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCX0KKwkJCX0KKwkJfQorCQlkZXZwcml2LT5od3JhbmdlID0gaHdyYW5nZV9wY2kyMzQ7CisJfSBlbHNlIHsKKwkJLyogUENJMjI0IHJhbmdlIG9wdGlvbnMuICovCisJCWlmIChpdC0+b3B0aW9uc1syXSA9PSAxKSB7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2kyMjRfZXh0ZXJuYWw7CisJCQlkZXZwcml2LT5od3JhbmdlID0gaHdyYW5nZV9wY2kyMjRfZXh0ZXJuYWw7CisJCX0gZWxzZSB7CisJCQlpZiAoaXQtPm9wdGlvbnNbMl0gIT0gMCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbWVkaSVkOiAlczogd2FybmluZyEgIgorCQkJCQkiYmFkIG9wdGlvbnNbMl09JWRcbiIsCisJCQkJCWRldi0+bWlub3IsIERSSVZFUl9OQU1FLAorCQkJCQlpdC0+b3B0aW9uc1syXSk7CisJCQl9CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2kyMjRfaW50ZXJuYWw7CisJCQlkZXZwcml2LT5od3JhbmdlID0gaHdyYW5nZV9wY2kyMjRfaW50ZXJuYWw7CisJCX0KKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoaXJxKSB7CisJCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIHBjaTIyNF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJRFJJVkVSX05BTUUsIGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgIgorCQkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBkZXYtPm1pbm9yLCBpcnEpOworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aXJxID0gaXJxOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzICIsIGRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJcHJpbnRrKCIocGNpICVzKSAiLCBwY2lfbmFtZShwY2lfZGV2KSk7CisJaWYgKGlycSkgeworCQlwcmludGsoIihpcnEgJXUlcykgIiwgaXJxLCAoZGV2LT5pcnEgPyAiIiA6ICIgVU5BVkFJTEFCTEUiKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIobm8gaXJxKSAiKTsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogZGV0YWNoXG4iLCBkZXYtPm1pbm9yLCBEUklWRVJfTkFNRSk7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCQkvKiBBTyBzdWJkZXZpY2UgKi8KKwkJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCWtmcmVlKHMtPnJhbmdlX3RhYmxlX2xpc3QpOworCQl9CisJfQorCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5hb19yZWFkYmFjaykgeworCQkJa2ZyZWUoZGV2cHJpdi0+YW9fcmVhZGJhY2spOworCQl9CisJCWlmIChkZXZwcml2LT5hb19zY2FuX3ZhbHMpIHsKKwkJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fdmFscyk7CisJCX0KKwkJaWYgKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpIHsKKwkJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpOworCQl9CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKwlpZiAoZGV2LT5ib2FyZF9uYW1lKSB7CisJCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyByZW1vdmVkXG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzllNTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jCkBAIC0wLDAgKzEsMjk3NyBAQAorIC8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMKKyAgICBEcml2ZXIgZm9yIEFtcGxpY29uIFBDSTIzMCBhbmQgUENJMjYwIE11bHRpZnVuY3Rpb24gSS9PIGJvYXJkcy4KKworICAgIENvcHlyaWdodCAoQykgMjAwMSBBbGxhbiBXaWxsY294IDxhbGxhbndpbGxjb3hAb3plbWFpbC5jb20uYXU+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgICovCisvKgorRHJpdmVyOiBhbXBsY19wY2kyMzAKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiBQQ0kyMzAsIFBDSTI2MCBNdWx0aWZ1bmN0aW9uIEkvTyBib2FyZHMKK0F1dGhvcjogQWxsYW4gV2lsbGNveCA8YWxsYW53aWxsY294QG96ZW1haWwuY29tLmF1PiwKKyAgU3RldmUgRCBTaGFycGxlcyA8c3RldmUuc2hhcnBsZXNAbm90dGluZ2hhbS5hYy51az4sCisgIElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorVXBkYXRlZDogV2VkLCAyMiBPY3QgMjAwOCAxMjozNDo0OSArMDEwMAorRGV2aWNlczogW0FtcGxpY29uXSBQQ0kyMzAgKHBjaTIzMCBvciBhbXBsY19wY2kyMzApLAorICBQQ0kyMzArIChwY2kyMzArIG9yIGFtcGxjX3BjaTIzMCksCisgIFBDSTI2MCAocGNpMjYwIG9yIGFtcGxjX3BjaTIzMCksIFBDSTI2MCsgKHBjaTI2MCsgb3IgYW1wbGNfcGNpMjMwKQorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkuCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpLgorICAgICAgICAgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZQorICAgICAgICAgIHdpbGwgYmUgdXNlZC4KKworQ29uZmlndXJpbmcgYSAiYW1wbGNfcGNpMjMwIiB3aWxsIG1hdGNoIGFueSBzdXBwb3J0ZWQgY2FyZCBhbmQgaXQgd2lsbAorY2hvb3NlIHRoZSBiZXN0IG1hdGNoLCBwaWNraW5nIHRoZSAiKyIgbW9kZWxzIGlmIHBvc3NpYmxlLiAgQ29uZmlndXJpbmcKK2EgInBjaTIzMCIgd2lsbCBtYXRjaCBhIFBDSTIzMCBvciBQQ0kyMzArIGNhcmQgYW5kIGl0IHdpbGwgYmUgdHJlYXRlZCBhcworYSBQQ0kyMzAuICBDb25maWd1cmluZyBhICJwY2kyNjAiIHdpbGwgbWF0Y2ggYSBQQ0kyNjAgb3IgUENJMjYwKyBjYXJkCithbmQgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgUENJMjYwLiAgQ29uZmlndXJpbmcgYSAicGNpMjMwKyIgd2lsbCBtYXRjaAorYSBQQ0kyMzArIGNhcmQuICBDb25maWd1cmluZyBhICJwY2kyNjArIiB3aWxsIG1hdGNoIGEgUENJMjYwKyBjYXJkLgorCitTdWJkZXZpY2VzOgorCisgICAgICAgICAgICAgICAgUENJMjMwKCspICAgIFBDSTI2MCgrKQorICAgICAgICAgICAgICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0KKyAgU3ViZGV2aWNlcyAgICAgICAzICAgICAgICAgICAgMQorICAgICAgICAwICAgICAgICAgIEFJICAgICAgICAgICBBSQorCTEgICAgICAgICAgQU8KKwkyICAgICAgICAgIERJTworCitBSSBTdWJkZXZpY2U6CisKKyAgVGhlIEFJIHN1YmRldmljZSBoYXMgMTYgc2luZ2xlLWVuZGVkIGNoYW5uZWxzIG9yIDggZGlmZmVyZW50aWFsCisgIGNoYW5uZWxzLgorCisgIFRoZSBQQ0kyMzAgYW5kIFBDSTI2MCBjYXJkcyBoYXZlIDEyLWJpdCByZXNvbHV0aW9uLiAgVGhlIFBDSTIzMCsgYW5kCisgIFBDSTI2MCsgY2FyZHMgaGF2ZSAxNi1iaXQgcmVzb2x1dGlvbi4KKworICBGb3IgZGlmZmVyZW50aWFsIG1vZGUsIHVzZSBpbnB1dHMgMk4gYW5kIDJOKzEgZm9yIGNoYW5uZWwgTiAoZS5nLiB1c2UKKyAgaW5wdXRzIDE0IGFuZCAxNSBmb3IgY2hhbm5lbCA3KS4gIElmIHRoZSBjYXJkIGlzIHBoeXNpY2FsbHkgYSBQQ0kyMzAKKyAgb3IgUENJMjYwIHRoZW4gaXQgYWN0dWFsbHkgdXNlcyBhICJwc2V1ZG8tZGlmZmVyZW50aWFsIiBtb2RlIHdoZXJlIHRoZQorICBpbnB1dHMgYXJlIHNhbXBsZWQgYSBmZXcgbWljcm9zZWNvbmRzIGFwYXJ0LiAgVGhlIFBDSTIzMCsgYW5kIFBDSTI2MCsKKyAgdXNlIHRydWUgZGlmZmVyZW50aWFsIHNhbXBsaW5nLiAgQW5vdGhlciBkaWZmZXJlbmNlIGlzIHRoYXQgaWYgdGhlCisgIGNhcmQgaXMgcGh5c2ljYWxseSBhIFBDSTIzMCBvciBQQ0kyNjAsIHRoZSBpbnZlcnRpbmcgaW5wdXQgaXMgMk4sCisgIHdoZXJlYXMgZm9yIGEgUENJMjMwKyBvciBQQ0kyNjArIHRoZSBpbnZlcnRpbmcgaW5wdXQgaXMgMk4rMS4gIFNvIGlmIGEKKyAgUENJMjMwIGlzIHBoeXNpY2FsbHkgcmVwbGFjZWQgYnkgYSBQQ0kyMzArIChvciBhIFBDSTI2MCB3aXRoIGEKKyAgUENJMjYwKykgYW5kIGRpZmZlcmVudGlhbCBtb2RlIGlzIHVzZWQsIHRoZSBkaWZmZXJlbnRpYWwgaW5wdXRzIG5lZWQKKyAgdG8gYmUgcGh5c2ljYWxseSBzd2FwcGVkIG9uIHRoZSBjb25uZWN0b3IuCisKKyAgVGhlIGZvbGxvd2luZyBpbnB1dCByYW5nZXMgYXJlIHN1cHBvcnRlZDoKKworICAgIDAgPT4gWy0xMCwgKzEwXSBWCisgICAgMSA9PiBbLTUsICs1XSBWCisgICAgMiA9PiBbLTIuNSwgKzIuNV0gVgorICAgIDMgPT4gWy0xLjI1LCArMS4yNV0gVgorICAgIDQgPT4gWzAsIDEwXSBWCisgICAgNSA9PiBbMCwgNV0gVgorICAgIDYgPT4gWzAsIDIuNV0gVgorCitBSSBDb21tYW5kczoKKworICArPT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09KworICB8c3RhcnRfc3JjfHNjYW5fYmVnaW5fc3JjfGNvbnZlcnRfc3JjfHNjYW5fZW5kX3NyY3wgc3RvcF9zcmMgfAorICArPT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09KworICB8VFJJR19OT1cgfCBUUklHX0ZPTExPVyAgfFRSSUdfVElNRVIgfCBUUklHX0NPVU5UIHxUUklHX05PTkUgfAorICB8VFJJR19JTlQgfCAgICAgICAgICAgICAgfFRSSUdfRVhUKDMpfCAgICAgICAgICAgIHxUUklHX0NPVU5UfAorICB8ICAgICAgICAgfCAgICAgICAgICAgICAgfFRSSUdfSU5UICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfCBUUklHX1RJTUVSKDEpfFRSSUdfVElNRVIgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfCBUUklHX0VYVCgyKSAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfCBUUklHX0lOVCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgIE5vdGUgMTogSWYgQUkgY29tbWFuZCBhbmQgQU8gY29tbWFuZCBhcmUgdXNlZCBzaW11bHRhbmVvdXNseSwgb25seQorICAgICAgICAgIG9uZSBtYXkgaGF2ZSBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSLgorCisgIE5vdGUgMjogRm9yIFBDSTIzMCBhbmQgUENJMjMwKywgc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgdXNlcworICAgICAgICAgIERJTyBjaGFubmVsIDE2IChwaW4gNDkpIHdoaWNoIHdpbGwgbmVlZCB0byBiZSBjb25maWd1cmVkIGFzCisgICAgICAgICAgYSBkaWdpdGFsIGlucHV0LiAgRm9yIFBDSTI2MCssIHRoZSBFWFRUUklHL0VYVENPTlZDTEsgaW5wdXQKKyAgICAgICAgICAocGluIDE3KSBpcyB1c2VkIGluc3RlYWQuICBGb3IgUENJMjMwLCBzY2FuX2JlZ2luX3NyYyA9PQorICAgICAgICAgIFRSSUdfRVhUIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGUgdHJpZ2dlciBpcyBhIHJpc2luZyBlZGdlCisgICAgICAgICAgb24gdGhlIGlucHV0LgorCisgIE5vdGUgMzogRm9yIGNvbnZlcnRfc3JjID09IFRSSUdfRVhULCB0aGUgRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0CisgICAgICAgICAgKHBpbiAyNSBvbiBQQ0kyMzAoKyksIHBpbiAxNyBvbiBQQ0kyNjAoKykpIGlzIHVzZWQuICBUaGUKKyAgICAgICAgICBjb252ZXJ0X2FyZyB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICBjb252ZXJ0X2FyZyA9PSAoQ1JfRURHRSB8IDApID0+IHJpc2luZyBlZGdlCisgICAgICAgICAgICBjb252ZXJ0X2FyZyA9PSAoQ1JfRURHRSB8IENSX0lOVkVSVCB8IDApID0+IGZhbGxpbmcgZWRnZQorICAgICAgICAgICAgY29udmVydF9hcmcgPT0gMCA9PiBmYWxsaW5nIGVkZ2UgKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQorICAgICAgICAgICAgY29udmVydF9hcmcgPT0gMSA9PiByaXNpbmcgZWRnZSAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisKKyAgQWxsIGVudHJpZXMgaW4gdGhlIGNoYW5uZWwgbGlzdCBtdXN0IHVzZSB0aGUgc2FtZSBhbmFsb2d1ZSByZWZlcmVuY2UuCisgIElmIHRoZSBhbmFsb2d1ZSByZWZlcmVuY2UgaXMgbm90IEFSRUZfRElGRiAobm90IGRpZmZlcmVudGlhbCkgZWFjaAorICBwYWlyIG9mIGNoYW5uZWwgbnVtYmVycyAoMCBhbmQgMSwgMiBhbmQgMywgZXRjLikgbXVzdCB1c2UgdGhlIHNhbWUKKyAgaW5wdXQgcmFuZ2UuICBUaGUgaW5wdXQgcmFuZ2VzIHVzZWQgaW4gdGhlIHNlcXVlbmNlIG11c3QgYmUgYWxsCisgIGJpcG9sYXIgKHJhbmdlcyAwIHRvIDMpIG9yIGFsbCB1bmlwb2xhciAocmFuZ2VzIDQgdG8gNikuICBUaGUgY2hhbm5lbAorICBzZXF1ZW5jZSBtdXN0IGNvbnNpc3Qgb2YgMSBvciBtb3JlIGlkZW50aWNhbCBzdWJzZXF1ZW5jZXMuICBXaXRoaW4gdGhlCisgIHN1YnNlcXVlbmNlLCBjaGFubmVscyBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciB3aXRoIG5vIHJlcGVhdGVkCisgIGNoYW5uZWxzLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2VzIGFyZSB2YWxpZDogMCAxIDIgMworICAoc2luZ2xlIHZhbGlkIHN1YnNlcXVlbmNlKSwgMCAyIDMgNSAwIDIgMyA1IChyZXBlYXRlZCB2YWxpZAorICBzdWJzZXF1ZW5jZSksIDEgMSAxIDEgKHJlcGVhdGVkIHZhbGlkIHN1YnNlcXVlbmNlKS4gIFRoZSBmb2xsb3dpbmcKKyAgc2VxdWVuY2VzIGFyZSBpbnZhbGlkOiAwIDMgMiAxIChpbnZhbGlkIHN1YnNlcXVlbmNlKSwgMCAyIDMgNSAwIDIgMworICAoaW5jb21wbGV0ZWx5IHJlcGVhdGVkIHN1YnNlcXVlbmNlKS4gIFNvbWUgdmVyc2lvbnMgb2YgdGhlIFBDSTIzMCsgYW5kCisgIFBDSTI2MCsgaGF2ZSBhIGJ1ZyB0aGF0IHJlcXVpcmVzIGEgc3Vic2VxdWVuY2UgbG9uZ2VyIHRoYW4gb25lIGVudHJ5CisgIGxvbmcgdG8gaW5jbHVkZSBjaGFubmVsIDAuCisKK0FPIFN1YmRldmljZToKKworICBUaGUgQU8gc3ViZGV2aWNlIGhhcyAyIGNoYW5uZWxzIHdpdGggMTItYml0IHJlc29sdXRpb24uCisKKyAgVGhlIGZvbGxvd2luZyBvdXRwdXQgcmFuZ2VzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICAwID0+IFswLCAxMF0gVgorICAgIDEgPT4gWy0xMCwgKzEwXSBWCisKK0FPIENvbW1hbmRzOgorCisgICs9PT09PT09PT0rPT09PT09PT09PT09PT0rPT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rCisgIHxzdGFydF9zcmN8c2Nhbl9iZWdpbl9zcmN8Y29udmVydF9zcmN8c2Nhbl9lbmRfc3JjfCBzdG9wX3NyYyB8CisgICs9PT09PT09PT0rPT09PT09PT09PT09PT0rPT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rCisgIHxUUklHX0lOVCB8IFRSSUdfVElNRVIoMSl8IFRSSUdfTk9XICB8IFRSSUdfQ09VTlQgfFRSSUdfTk9ORSB8CisgIHwgICAgICAgICB8IFRSSUdfRVhUKDIpICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfFRSSUdfQ09VTlR8CisgIHwgICAgICAgICB8IFRSSUdfSU5UICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICB8CisgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgTm90ZSAxOiBJZiBBSSBjb21tYW5kIGFuZCBBTyBjb21tYW5kIGFyZSB1c2VkIHNpbXVsdGFuZW91c2x5LCBvbmx5CisgICAgICAgICAgb25lIG1heSBoYXZlIHNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIuCisKKyAgTm90ZSAyOiBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgY2FyZCBpcworICAgICAgICAgIGNvbmZpZ3VyZWQgYXMgYSBQQ0kyMzArIGFuZCBpcyBvbmx5IHN1cHBvcnRlZCBvbiBsYXRlcgorICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBjYXJkLiAgQXMgYSBjYXJkIGNvbmZpZ3VyZWQgYXMgYSBQQ0kyMzArIGlzCisgICAgICAgICAgbm90IGd1YXJhbnRlZWQgdG8gc3VwcG9ydCBleHRlcm5hbCB0cmlnZ2VyaW5nLCBwbGVhc2UgY29uc2lkZXIKKyAgICAgICAgICB0aGlzIHN1cHBvcnQgdG8gYmUgYSBib251cy4gIEl0IHVzZXMgdGhlIEVYVFRSSUcvIEVYVENPTlZDTEsKKyAgICAgICAgICBpbnB1dCAoUENJMjMwKyBwaW4gMjUpLiAgVHJpZ2dlcmluZyB3aWxsIGJlIG9uIHRoZSByaXNpbmcgZWRnZQorICAgICAgICAgIHVubGVzcyB0aGUgQ1JfSU5WRVJUIGZsYWcgaXMgc2V0IGluIHNjYW5fYmVnaW5fYXJnLgorCisgIFRoZSBjaGFubmVscyBpbiB0aGUgY2hhbm5lbCBzZXF1ZW5jZSBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciB3aXRoCisgIG5vIHJlcGVhdHMuICBBbGwgZW50cmllcyBpbiB0aGUgY2hhbm5lbCBzZXF1ZW5jZSBtdXN0IHVzZSB0aGUgc2FtZQorICBvdXRwdXQgcmFuZ2UuCisKK0RJTyBTdWJkZXZpY2U6CisKKyAgVGhlIERJTyBzdWJkZXZpY2UgaXMgYSA4MjU1IGNoaXAgcHJvdmlkaW5nIDI0IERJTyBjaGFubmVscy4gIFRoZSBESU8KKyAgY2hhbm5lbHMgYXJlIGNvbmZpZ3VyYWJsZSBhcyBpbnB1dHMgb3Igb3V0cHV0cyBpbiBmb3VyIGdyb3VwczoKKworICAgIFBvcnQgQSAgLSBjaGFubmVscyAgMCB0byAgNworICAgIFBvcnQgQiAgLSBjaGFubmVscyAgOCB0byAxNQorICAgIFBvcnQgQ0wgLSBjaGFubmVscyAxNiB0byAxOQorICAgIFBvcnQgQ0ggLSBjaGFubmVscyAyMCB0byAyMworCisgIE9ubHkgbW9kZSAwIG9mIHRoZSA4MjU1IGNoaXAgaXMgc3VwcG9ydGVkLgorCisgIEJpdCAwIG9mIHBvcnQgQyAoRElPIGNoYW5uZWwgMTYpIGlzIGFsc28gdXNlZCBhcyBhbiBleHRlcm5hbCBzY2FuCisgIHRyaWdnZXIgaW5wdXQgZm9yIEFJIGNvbW1hbmRzIG9uIFBDSTIzMCBhbmQgUENJMjMwKywgc28gd291bGQgbmVlZCB0bworICBiZSBjb25maWd1cmVkIGFzIGFuIGlucHV0IHRvIHVzZSBpdCBmb3IgdGhhdCBwdXJwb3NlLgorKi8KKy8qCitFeHRyYSB0cmlnZ2VyZWQgc2NhbiBmdW5jdGlvbmFsaXR5LCBpbnRlcnJ1cHQgYnVnLWZpeCBhZGRlZCBieSBTdGV2ZSBTaGFycGxlcy4KK1N1cHBvcnQgZm9yIFBDSTIzMCsvMjYwKywgbW9yZSB0cmlnZ2VyZWQgc2NhbiBmdW5jdGlvbmFsaXR5LCBhbmQgd29ya2Fyb3VuZHMKK2ZvciAob3IgZGV0ZWN0aW9uIG9mKSB2YXJpb3VzIGhhcmR3YXJlIHByb2JsZW1zIGFkZGVkIGJ5IElhbiBBYmJvdHQuCisqLworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisvKiBQQ0kyMzAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ0kyMzAgMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJMjYwIDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKyNkZWZpbmUgUENJMjMwX0lPMV9TSVpFIDMyCS8qIFNpemUgb2YgSS9PIHNwYWNlIDEgKi8KKyNkZWZpbmUgUENJMjMwX0lPMl9TSVpFIDE2CS8qIFNpemUgb2YgSS9PIHNwYWNlIDIgKi8KKworLyogUENJMjMwIGkvbyBzcGFjZSAxIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0JBU0UJMHgwMAkvKiBVc2VyIFBQSSAoODJDNTUpIGJhc2UgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0EJCTB4MDAJLyogVXNlciBQUEkgKDgyQzU1KSBwb3J0IEEgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0IJCTB4MDEJLyogVXNlciBQUEkgKDgyQzU1KSBwb3J0IEIgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0MJCTB4MDIJLyogVXNlciBQUEkgKDgyQzU1KSBwb3J0IEMgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0NNRAkweDAzCS8qIFVzZXIgUFBJICg4MkM1NSkgY29udHJvbCB3b3JkICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVF9CQVNFCTB4MTQJLyogODJDNTQgY291bnRlci90aW1lciBiYXNlICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVDAJCTB4MTQJLyogODJDNTQgY291bnRlci90aW1lciAwICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVDEJCTB4MTUJLyogODJDNTQgY291bnRlci90aW1lciAxICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVDIJCTB4MTYJLyogODJDNTQgY291bnRlci90aW1lciAyICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVEMJCTB4MTcJLyogODJDNTQgY291bnRlci90aW1lciBjb250cm9sIHdvcmQgKi8KKyNkZWZpbmUgUENJMjMwX1pDTEtfU0NFCQkweDFBCS8qIEdyb3VwIFogQ2xvY2sgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBQQ0kyMzBfWkdBVF9TQ0UJCTB4MUQJLyogR3JvdXAgWiBHYXRlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUENJMjMwX0lOVF9TQ0UJCTB4MUUJLyogSW50ZXJydXB0IHNvdXJjZSBtYXNrICh3KSAqLworI2RlZmluZSBQQ0kyMzBfSU5UX1NUQVQJCTB4MUUJLyogSW50ZXJydXB0IHN0YXR1cyAocikgKi8KKworLyogUENJMjMwIGkvbyBzcGFjZSAyIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgUENJMjMwX0RBQ0NPTgkJMHgwMAkvKiBEQUMgY29udHJvbCAqLworI2RlZmluZSBQQ0kyMzBfREFDT1VUMQkJMHgwMgkvKiBEQUMgY2hhbm5lbCAwICh3KSAqLworI2RlZmluZSBQQ0kyMzBfREFDT1VUMgkJMHgwNAkvKiBEQUMgY2hhbm5lbCAxICh3KSAobm90IEZJRk8gbW9kZSkgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0RBVEEJCTB4MDgJLyogQURDIGRhdGEgKHIpICovCisjZGVmaW5lIFBDSTIzMF9BRENTV1RSSUcJMHgwOAkvKiBBREMgc29mdHdhcmUgdHJpZ2dlciAodykgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0NPTgkJMHgwQQkvKiBBREMgY29udHJvbCAqLworI2RlZmluZSBQQ0kyMzBfQURDRU4JCTB4MEMJLyogQURDIGNoYW5uZWwgZW5hYmxlIGJpdHMgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0cJCTB4MEUJLyogQURDIGdhaW4gY29udHJvbCBiaXRzICovCisvKiBQQ0kyMzArIGkvbyBzcGFjZSAyIGFkZGl0aW9uYWwgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBQQ0kyMzBQX0FEQ1RSSUcJCTB4MTAJLyogQURDIHN0YXJ0IGFjcXVpc2l0aW9uIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUF9BRENUSAkJMHgxMgkvKiBBREMgYW5hbG9nIHRyaWdnZXIgdGhyZXNob2xkICovCisjZGVmaW5lIFBDSTIzMFBfQURDRkZUSAkJMHgxNAkvKiBBREMgRklGTyBpbnRlcnJ1cHQgdGhyZXNob2xkICovCisjZGVmaW5lIFBDSTIzMFBfQURDRkZMRVYJMHgxNgkvKiBBREMgRklGTyBsZXZlbCAocikgKi8KKyNkZWZpbmUgUENJMjMwUF9BRENQVFNDCQkweDE4CS8qIEFEQyBwcmUtdHJpZ2dlciBzYW1wbGUgY291bnQgKHIpICovCisjZGVmaW5lIFBDSTIzMFBfQURDSFlTVAkJMHgxQQkvKiBBREMgYW5hbG9nIHRyaWdnZXIgaHlzdGVyZXN5cyAqLworI2RlZmluZSBQQ0kyMzBQX0VYVEZVTkMJCTB4MUMJLyogRXh0ZW5kZWQgZnVuY3Rpb25zICovCisjZGVmaW5lIFBDSTIzMFBfSFdWRVIJCTB4MUUJLyogSGFyZHdhcmUgdmVyc2lvbiAocikgKi8KKy8qIFBDSTIzMCsgaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ0RBVEEJMHgwMgkvKiBEQUMgZGF0YSAoRklGTyBtb2RlKSAodykgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDU1dUUklHCTB4MDIJLyogREFDIHNvZnQgdHJpZ2dlciAoRklGTyBtb2RlKSAocikgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDRU4JCTB4MDYJLyogREFDIGNoYW5uZWwgZW5hYmxlIChGSUZPIG1vZGUpICovCisKKy8qIENvbnZlcnRvciByZWxhdGVkIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgUENJMjMwX0RBQ19TRVRUTEUgNQkvKiBBbmFsb2d1ZSBvdXRwdXQgc2V0dGxpbmcgdGltZSBpbiDCtXMgKi8KKwkJCQkvKiAoREFDIGl0c2VsZiBpcyAxwrVzIG5vbWluYWxseSkuICovCisjZGVmaW5lIFBDSTIzMF9BRENfU0VUVExFIDEJLyogQW5hbG9ndWUgaW5wdXQgc2V0dGxpbmcgdGltZSBpbiDCtXMgKi8KKwkJCQkvKiAoQURDIGl0c2VsZiBpcyAxLjbCtXMgbm9taW5hbGx5IGJ1dCB3ZSBwb2xsCisJCQkJICogYW55d2F5KS4gKi8KKyNkZWZpbmUgUENJMjMwX01VWF9TRVRUTEUgMTAJLyogQURDIE1VWCBzZXR0bGluZyB0aW1lIGluIMK1UyAqLworCQkJCS8qIC0gMTDCtXMgZm9yIHNlLCAyMMK1cyBkZS4gKi8KKworLyogREFDQ09OIHJlYWQtd3JpdGUgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBfREFDX09SX1VOSQkJKDA8PDApCS8qIE91dHB1dCByYW5nZSB1bmlwb2xhciAqLworI2RlZmluZSBQQ0kyMzBfREFDX09SX0JJUAkJKDE8PDApCS8qIE91dHB1dCByYW5nZSBiaXBvbGFyICovCisjZGVmaW5lIFBDSTIzMF9EQUNfT1JfTUFTSwkJKDE8PDApCisvKiBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSBpZiBEQUMgRklGTyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIEVYVEZVTkMKKyAqIHJlZ2lzdGVyIChhbmQgb25seSBmb3IgUENJMjMwKyBoYXJkd2FyZSB2ZXJzaW9uIDIgb253YXJkcykuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPX0VOCQkoMTw8OCkJLyogRklGTyBlbmFibGUgKi8KKy8qIFRoZSBmb2xsb3dpbmcgYXBwbHkgb25seSBpZiB0aGUgREFDIEZJRk8gaXMgZW5hYmxlZCAoYW5kIG9ubHkgZm9yIFBDSTIzMCsKKyAqIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzKS4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfTk9ORQkJKDA8PDIpCS8qIE5vIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfU1cJCSgxPDwyKQkvKiBTb2Z0d2FyZSB0cmlnZ2VyIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfRVhUUAkJKDI8PDIpCS8qIEVYVFRSSUcgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfVFJJR19FWFROCQkoMzw8MikJLyogRVhUVFJJRyAtdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1oyQ1QwCQkoNDw8MikJLyogQ1QwLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1oyQ1QxCQkoNTw8MikJLyogQ1QxLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1oyQ1QyCQkoNjw8MikJLyogQ1QyLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX01BU0sJCSg3PDwyKQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19XUkFQCQkoMTw8NykJLyogRklGTyB3cmFwYXJvdW5kIG1vZGUgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0lOVF9GSUZPX0VNUFRZCSgwPDw5KQkvKiBGSUZPIGludGVycnVwdCBlbXB0eSAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkVNUFRZCSgxPDw5KQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkhBTEYJKDI8PDkpCS8qIEZJRk8gaW50ciBub3QgaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19JTlRfRklGT19IQUxGCSgzPDw5KQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkZVTEwJKDQ8PDkpCS8qIEZJRk8gaW50ZXJydXB0IG5vdCBmdWxsICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19JTlRfRklGT19GVUxMCSg1PDw5KQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTUFTSwkoNzw8OSkKKworLyogREFDQ09OIHJlYWQtb25seSB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9EQUNfQlVTWQkJCSgxPDwxKQkvKiBEQUMgYnVzeS4gKi8KKy8qIFRoZSBmb2xsb3dpbmcgYXBwbHkgb25seSBpZiB0aGUgREFDIEZJRk8gaXMgZW5hYmxlZCAoYW5kIG9ubHkgZm9yIFBDSTIzMCsKKyAqIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzKS4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fVU5ERVJSVU5fTEFUQ0hFRAkoMTw8NSkJLyogVW5kZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fRU1QVFkJCSgxPDwxMykJLyogRklGTyBlbXB0eSAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19GVUxMCQkoMTw8MTQpCS8qIEZJRk8gZnVsbCAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19IQUxGCQkoMTw8MTUpCS8qIEZJRk8gaGFsZiBmdWxsICovCisKKy8qIERBQ0NPTiB3cml0ZS1vbmx5LCB0cmFuc2llbnQgdmFsdWVzLiAqLworLyogVGhlIGZvbGxvd2luZyBhcHBseSBvbmx5IGlmIHRoZSBEQUMgRklGTyBpcyBlbmFibGVkIChhbmQgb25seSBmb3IgUENJMjMwKworICogaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMpLiAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19VTkRFUlJVTl9DTEVBUgkoMTw8NSkJLyogQ2xlYXIgdW5kZXJydW4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fUkVTRVQJCSgxPDwxMikJLyogRklGTyByZXNldCAqLworCisvKiBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBEQUMgRklGTyBsZXZlbHMuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPTEVWRUxfSEFMRgk1MTIKKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9GVUxMCTEwMjQKKy8qIEZyZWUgc3BhY2UgaW4gREFDIEZJRk8uICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9FTVBUWQkJUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9GVUxMCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9PTkVUT0hBTEYJCVwKKwkoUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9GVUxMIC0gUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9IQUxGKQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fSEFMRlRPRlVMTAkxCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9GVUxMCQkwCisKKy8qIEFEQ0NPTiByZWFkL3dyaXRlIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX05PTkUJCSgwPDwwKQkvKiBObyB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMF9BRENfVFJJR19TVwkJKDE8PDApCS8qIFNvZnR3YXJlIHRyaWdnZXIgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfRVhUUAkJKDI8PDApCS8qIEVYVFRSSUcgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfRVhUTgkJKDM8PDApCS8qIEVYVFRSSUcgLXZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfWjJDVDAJCSg0PDwwKQkvKiBDVDAtT1VUICt2ZSBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX1oyQ1QxCQkoNTw8MCkJLyogQ1QxLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMF9BRENfVFJJR19aMkNUMgkJKDY8PDApCS8qIENUMi1PVVQgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfTUFTSwkJKDc8PDApCisjZGVmaW5lIFBDSTIzMF9BRENfSVJfVU5JCQkoMDw8MykJLyogSW5wdXQgcmFuZ2UgdW5pcG9sYXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JUl9CSVAJCSgxPDwzKQkvKiBJbnB1dCByYW5nZSBiaXBvbGFyICovCisjZGVmaW5lIFBDSTIzMF9BRENfSVJfTUFTSwkJKDE8PDMpCisjZGVmaW5lIFBDSTIzMF9BRENfSU1fU0UJCSgwPDw0KQkvKiBJbnB1dCBtb2RlIHNpbmdsZSBlbmRlZCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0lNX0RJRgkJKDE8PDQpCS8qIElucHV0IG1vZGUgZGlmZmVyZW50aWFsICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU1fTUFTSwkJKDE8PDQpCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19FTgkJKDE8PDgpCS8qIEZJRk8gZW5hYmxlICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fRU1QVFkJKDA8PDkpCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fTkVNUFRZCSgxPDw5KQkvKiBGSUZPIGludGVycnVwdCBub3QgZW1wdHkgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19OSEFMRgkoMjw8OSkKKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19IQUxGCSgzPDw5KQkvKiBGSUZPIGludGVycnVwdCBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19ORlVMTAkoNDw8OSkKKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19GVUxMCSg1PDw5KQkvKiBGSUZPIGludGVycnVwdCBmdWxsICovCisjZGVmaW5lIFBDSTIzMFBfQURDX0lOVF9GSUZPX1RIUkVTSAkoNzw8OSkJLyogRklGTyBpbnRlcnJ1cHQgdGhyZXNob2xkICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fTUFTSwkoNzw8OSkKKworLyogQURDQ09OIHdyaXRlLW9ubHksIHRyYW5zaWVudCB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19SRVNFVAkJKDE8PDEyKQkvKiBGSUZPIHJlc2V0ICovCisjZGVmaW5lIFBDSTIzMF9BRENfR0xPQl9SRVNFVAkJKDE8PDEzKQkvKiBHbG9iYWwgcmVzZXQgKi8KKworLyogQURDQ09OIHJlYWQtb25seSB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfQlVTWQkJCSgxPDwxNSkJLyogQURDIGJ1c3kgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19GSUZPX0VNUFRZCQkoMTw8MTIpCS8qIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19GSUZPX0ZVTEwJCSgxPDwxMykJLyogRklGTyBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19IQUxGCQkoMTw8MTQpCS8qIEZJRk8gaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19GVUxMX0xBVENIRUQJKDE8PDUpCS8qIEluZGljYXRlcyBvdmVycnVuIG9jY3VycmVkICovCisKKy8qIFBDSTIzMCBBREMgRklGTyBsZXZlbHMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMCTIwNDkJLyogVmFsdWUgZm9yIEZJRk8gaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT0xFVkVMX0ZVTEwJNDA5NgkvKiBGSUZPIHNpemUgKi8KKworLyogVmFsdWUgdG8gd3JpdGUgdG8gQURDU1dUUklHIHRvIHRyaWdnZXIgQURDIGNvbnZlcnNpb24gaW4gc29mdHdhcmUgdHJpZ2dlcgorICogbW9kZS4gIENhbiBiZSBhbnl0aGluZy4gICovCisjZGVmaW5lIFBDSTIzMF9BRENfQ09OVgkJCTB4ZmZmZgorCisvKiBQQ0kyMzArIEVYVEZVTkMgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBQX0VYVEZVTkNfR0FUX0VYVFRSSUcJKDE8PDApCisJCQkvKiBSb3V0ZSBFWFRUUklHIHBpbiB0byBleHRlcm5hbCBnYXRlIGlucHV0cy4gKi8KKy8qIFBDSTIzMCsgaGFyZHdhcmUgdmVyc2lvbiAyIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwUDJfRVhURlVOQ19EQUNGSUZPCSgxPDwxKQorCQkJLyogQWxsb3cgREFDIEZJRk8gdG8gYmUgZW5hYmxlZC4gKi8KKworLyoKKyAqIENvdW50ZXIvdGltZXIgY2xvY2sgaW5wdXQgY29uZmlndXJhdGlvbiBzb3VyY2VzLgorICovCisjZGVmaW5lIENMS19DTEsJCTAJLyogcmVzZXJ2ZWQgKGNoYW5uZWwtc3BlY2lmaWMgY2xvY2spICovCisjZGVmaW5lIENMS18xME1IWgkxCS8qIGludGVybmFsIDEwIE1IeiBjbG9jayAqLworI2RlZmluZSBDTEtfMU1IWgkyCS8qIGludGVybmFsIDEgTUh6IGNsb2NrICovCisjZGVmaW5lIENMS18xMDBLSFoJMwkvKiBpbnRlcm5hbCAxMDAga0h6IGNsb2NrICovCisjZGVmaW5lIENMS18xMEtIWgk0CS8qIGludGVybmFsIDEwIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfMUtIWgk1CS8qIGludGVybmFsIDEga0h6IGNsb2NrICovCisjZGVmaW5lIENMS19PVVROTTEJNgkvKiBvdXRwdXQgb2YgY2hhbm5lbC0xIG1vZHVsbyB0b3RhbCAqLworI2RlZmluZSBDTEtfRVhUCQk3CS8qIGV4dGVybmFsIGNsb2NrICovCisvKiBNYWNybyB0byBjb25zdHJ1Y3QgY2xvY2sgaW5wdXQgY29uZmlndXJhdGlvbiByZWdpc3RlciB2YWx1ZS4gKi8KKyNkZWZpbmUgQ0xLX0NPTkZJRyhjaGFuLCBzcmMpCSgoKChjaGFuKSAmIDMpIDw8IDMpIHwgKChzcmMpICYgNykpCisvKiBUaW1lYmFzZXMgaW4gbnMuICovCisjZGVmaW5lIFRJTUVCQVNFXzEwTUhaCQkxMDAKKyNkZWZpbmUgVElNRUJBU0VfMU1IWgkJMTAwMAorI2RlZmluZSBUSU1FQkFTRV8xMDBLSFoJCTEwMDAwCisjZGVmaW5lIFRJTUVCQVNFXzEwS0haCQkxMDAwMDAKKyNkZWZpbmUgVElNRUJBU0VfMUtIWgkJMTAwMDAwMAorCisvKgorICogQ291bnRlci90aW1lciBnYXRlIGlucHV0IGNvbmZpZ3VyYXRpb24gc291cmNlcy4KKyAqLworI2RlZmluZSBHQVRfVkNDCQkwCS8qIFZDQyAoaS5lLiBlbmFibGVkKSAqLworI2RlZmluZSBHQVRfR05ECQkxCS8qIEdORCAoaS5lLiBkaXNhYmxlZCkgKi8KKyNkZWZpbmUgR0FUX0VYVAkJMgkvKiBleHRlcm5hbCBnYXRlIGlucHV0IChQUENuIG9uIFBDSTIzMCkgKi8KKyNkZWZpbmUgR0FUX05PVVROTTIJMwkvKiBpbnZlcnRlZCBvdXRwdXQgb2YgY2hhbm5lbC0yIG1vZHVsbyB0b3RhbCAqLworLyogTWFjcm8gdG8gY29uc3RydWN0IGdhdGUgaW5wdXQgY29uZmlndXJhdGlvbiByZWdpc3RlciB2YWx1ZS4gKi8KKyNkZWZpbmUgR0FUX0NPTkZJRyhjaGFuLCBzcmMpCSgoKChjaGFuKSAmIDMpIDw8IDMpIHwgKChzcmMpICYgNykpCisKKy8qCisgKiBTdW1tYXJ5IG9mIENMS19PVVROTTEgYW5kIEdBVF9OT1VUTk0yIGNvbm5lY3Rpb25zIGZvciBQQ0kyMzAgYW5kIFBDSTI2MDoKKyAqCisgKiAgICAgICAgICAgICAgQ2hhbm5lbCdzICAgICAgIENoYW5uZWwncworICogICAgICAgICAgICAgIGNsb2NrIGlucHV0ICAgICBnYXRlIGlucHV0CisgKiBDaGFubmVsICAgICAgQ0xLX09VVE5NMSAgICAgIEdBVF9OT1VUTk0yCisgKiAtLS0tLS0tICAgICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tCisgKiBaMi1DVDAgICAgICAgWjItQ1QyLU9VVCAgICAgIC9aMi1DVDEtT1VUCisgKiBaMi1DVDEgICAgICAgWjItQ1QwLU9VVCAgICAgIC9aMi1DVDItT1VUCisgKiBaMi1DVDIgICAgICAgWjItQ1QxLU9VVCAgICAgIC9aMi1DVDAtT1VUCisgKi8KKworLyogSW50ZXJydXB0IGVuYWJsZXMvc3RhdHVzIHJlZ2lzdGVyIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwX0lOVF9ESVNBQkxFCQkwCisjZGVmaW5lIFBDSTIzMF9JTlRfUFBJX0MwCQkoMTw8MCkKKyNkZWZpbmUgUENJMjMwX0lOVF9QUElfQzMJCSgxPDwxKQorI2RlZmluZSBQQ0kyMzBfSU5UX0FEQwkJCSgxPDwyKQorI2RlZmluZSBQQ0kyMzBfSU5UX1pDTEtfQ1QxCQkoMTw8NSkKKy8qIEZvciBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiB3aGVuIERBQyBGSUZPIGVuYWJsZWQuICovCisjZGVmaW5lIFBDSTIzMFAyX0lOVF9EQUMJCSgxPDw0KQorCisjZGVmaW5lIFBDSTIzMF9URVNUX0JJVCh2YWwsIG4pCSgodmFsPj5uKSYxKQorCQkJLyogQXNzdW1lcyBiaXRzIG51bWJlcmVkIHdpdGggemVybyBvZmZzZXQsIGllLiAwLTE1ICovCisKKy8qIChQb3RlbnRpYWxseSkgc2hhcmVkIHJlc291cmNlcyBhbmQgdGhlaXIgb3duZXJzICovCitlbnVtIHsKKwlSRVNfWjJDVDAsCQkvKiBaMi1DVDAgKi8KKwlSRVNfWjJDVDEsCQkvKiBaMi1DVDEgKi8KKwlSRVNfWjJDVDIsCQkvKiBaMi1DVDIgKi8KKwlOVU1fUkVTT1VSQ0VTCQkvKiBOdW1iZXIgb2YgKHBvdGVudGlhbGx5KSBzaGFyZWQgcmVzb3VyY2VzLiAqLworfTsKKworZW51bSB7CisJT1dORVJfTk9ORSwJCS8qIE5vdCBvd25lZCAqLworCU9XTkVSX0FJQ01ELAkJLyogT3duZWQgYnkgQUkgY29tbWFuZCAqLworCU9XTkVSX0FPQ01ECQkvKiBPd25lZCBieSBBTyBjb21tYW5kICovCit9OworCisvKgorICogSGFuZHkgbWFjcm9zLgorICovCisKKy8qIENvbWJpbmUgb2xkIGFuZCBuZXcgYml0cy4gKi8KKyNkZWZpbmUgQ09NQklORShvbGQsIG5ldywgbWFzaykJKCgob2xkKSAmIH4obWFzaykpIHwgKChuZXcpICYgKG1hc2spKSkKKworLyogQSBnZW5lcmljIG51bGwgZnVuY3Rpb24gcG9pbnRlciB2YWx1ZS4gICovCisjZGVmaW5lIE5VTExGVU5DCTAKKworLyogQ3VycmVudCBDUFUuICBYWFggc2hvdWxkIHRoaXMgYmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk/ICovCisjZGVmaW5lIFRISVNDUFUJCXNtcF9wcm9jZXNzb3JfaWQoKQorCisvKiBTdGF0ZSBmbGFncyBmb3IgYXRvbWljIGJpdCBvcGVyYXRpb25zICovCisjZGVmaW5lIEFJX0NNRF9TVEFSVEVECTAKKyNkZWZpbmUgQU9fQ01EX1NUQVJURUQJMQorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0aGUgdHdvIGJvYXJkcyBzdXBwb3J0ZWQuCisgKi8KKworc3RydWN0IHBjaTIzMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBpZDsKKwlpbnQgYWlfY2hhbnM7CisJaW50IGFpX2JpdHM7CisJaW50IGFvX2NoYW5zOworCWludCBhb19iaXRzOworCWludCBoYXZlX2RpbzsKKwl1bnNpZ25lZCBpbnQgbWluX2h3dmVyOwkvKiBNaW5pbXVtIGhhcmR3YXJlIHZlcnNpb24gc3VwcG9ydGVkLiAqLworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpMjMwX2JvYXJkIHBjaTIzMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaTIzMCsiLAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSTIzMCwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhb19jaGFuczoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJICAgICAgbWluX2h3dmVyOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2kyNjArIiwKKwkgICAgICBpZDoJUENJX0RFVklDRV9JRF9QQ0kyNjAsCisJICAgICAgYWlfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYW9fY2hhbnM6MCwKKwkgICAgICBhb19iaXRzOgkwLAorCSAgICAgIGhhdmVfZGlvOjAsCisJICAgICAgbWluX2h3dmVyOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2kyMzAiLAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSTIzMCwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhb19jaGFuczoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2kyNjAiLAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSTI2MCwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhb19jaGFuczowLAorCSAgICAgIGFvX2JpdHM6CTAsCisJICAgICAgaGF2ZV9kaW86MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImFtcGxjX3BjaTIzMCIsCS8qIFdpbGRjYXJkIG1hdGNoZXMgYW55IGFib3ZlICovCisJICAgICAgaWQ6CVBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkJfSwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2kyMzBfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9QQ0kyMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX1BDSTI2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpMjMwX3BjaV90YWJsZSk7CisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIG5fcGNpMjMwX2JvYXJkcyAoc2l6ZW9mKHBjaTIzMF9ib2FyZHMpL3NpemVvZihwY2kyMzBfYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjaTIzMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgcGNpMjMwX3ByaXZhdGUgeworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXNwaW5sb2NrX3QgaXNyX3NwaW5sb2NrOwkvKiBJbnRlcnJ1cHQgc3BpbiBsb2NrICovCisJc3BpbmxvY2tfdCByZXNfc3BpbmxvY2s7CS8qIFNoYXJlZCByZXNvdXJjZXMgc3BpbiBsb2NrICovCisJc3BpbmxvY2tfdCBhaV9zdG9wX3NwaW5sb2NrOwkvKiBTcGluIGxvY2sgZm9yIHN0b3BwaW5nIEFJIGNvbW1hbmQgKi8KKwlzcGlubG9ja190IGFvX3N0b3Bfc3BpbmxvY2s7CS8qIFNwaW4gbG9jayBmb3Igc3RvcHBpbmcgQU8gY29tbWFuZCAqLworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CS8qIFN0YXRlIGZsYWdzICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UxOwkvKiBQQ0kyMzAncyBJL08gc3BhY2UgMSAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYWlfc2Nhbl9jb3VudDsJLyogTnVtYmVyIG9mIGFuYWxvZ3VlIGlucHV0IHNjYW5zCisJCQkJCSAqIHJlbWFpbmluZy4gICovCisJdW5zaWduZWQgaW50IGFpX3NjYW5fcG9zOwkvKiBDdXJyZW50IHBvc2l0aW9uIHdpdGhpbiBhbmFsb2d1ZQorCQkJCQkgKiBpbnB1dCBzY2FuICovCisJdW5zaWduZWQgaW50IGFvX3NjYW5fY291bnQ7CS8qIE51bWJlciBvZiBhbmFsb2d1ZSBvdXRwdXQgc2NhbnMKKwkJCQkJICogcmVtYWluaW5nLiAgKi8KKwlpbnQgaW50cl9jcHVpZDsJCS8qIElEIG9mIENQVSBydW5uaW5nIGludGVycnVwdCByb3V0aW5lLiAqLworCXVuc2lnbmVkIHNob3J0IGh3dmVyOwkvKiBIYXJkd2FyZSB2ZXJzaW9uIChmb3IgJysnIG1vZGVscykuICovCisJdW5zaWduZWQgc2hvcnQgYWRjY29uOwkvKiBBRENDT04gcmVnaXN0ZXIgdmFsdWUuICovCisJdW5zaWduZWQgc2hvcnQgZGFjY29uOwkvKiBEQUNDT04gcmVnaXN0ZXIgdmFsdWUuICovCisJdW5zaWduZWQgc2hvcnQgYWRjZmlmb3RocmVzaDsJLyogQURDIEZJRk8gcHJvZ3JhbW1hYmxlIGludGVycnVwdAorCQkJCQkgKiBsZXZlbCB0aHJlc2hvbGQgKFBDSTIzMCsvMjYwKykuICovCisJdW5zaWduZWQgc2hvcnQgYWRjZzsJLyogQURDRyByZWdpc3RlciB2YWx1ZS4gKi8KKwl1bnNpZ25lZCBjaGFyIGludF9lbjsJLyogSW50ZXJydXB0IGVuYWJsZXMgYml0cy4gKi8KKwl1bnNpZ25lZCBjaGFyIGFpX2NvbnRpbnVvdXM7CS8qIEZsYWcgc2V0IHdoZW4gY21kLT5zdG9wX3NyYyA9PQorCQkJCQkgKiBUUklHX05PTkUgLSB1c2VyIGNob29zZXMgdG8gc3RvcAorCQkJCQkgKiBjb250aW51b3VzIGNvbnZlcnNpb24gYnkKKwkJCQkJICogY2FuY2VsYXRpb24uICovCisJdW5zaWduZWQgY2hhciBhb19jb250aW51b3VzOwkvKiBGbGFnIHNldCB3aGVuIGNtZC0+c3RvcF9zcmMgPT0KKwkJCQkJICogVFJJR19OT05FIC0gdXNlciBjaG9vc2VzIHRvIHN0b3AKKwkJCQkJICogY29udGludW91cyBjb252ZXJzaW9uIGJ5CisJCQkJCSAqIGNhbmNlbGF0aW9uLiAqLworCXVuc2lnbmVkIGNoYXIgYWlfYmlwb2xhcjsJLyogU2V0IGlmIGJpcG9sYXIgaW5wdXQgcmFuZ2Ugc28gd2UKKwkJCQkJICoga25vdyB0byBtYW5nbGUgaXQuICovCisJdW5zaWduZWQgY2hhciBhb19iaXBvbGFyOwkvKiBTZXQgaWYgYmlwb2xhciBvdXRwdXQgcmFuZ2Ugc28gd2UKKwkJCQkJICoga25vdyB0byBtYW5nbGUgaXQuICovCisJdW5zaWduZWQgY2hhciBpZXI7CS8qIENvcHkgb2YgaW50ZXJydXB0IGVuYWJsZXMvc3RhdHVzIHJlZ2lzdGVyLiAqLworCXVuc2lnbmVkIGNoYXIgaW50cl9ydW5uaW5nOwkvKiBGbGFnIHNldCBpbiBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwl1bnNpZ25lZCBjaGFyIHJlc19vd25lcltOVU1fUkVTT1VSQ0VTXTsJLyogU2hhcmVkIHJlc291cmNlIG93bmVycy4gKi8KK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2kyMzBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyogUENJMjMwIGNsb2NrIHNvdXJjZSBwZXJpb2RzIGluIG5zICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBjaTIzMF90aW1lYmFzZVs4XSA9IHsKKwlbQ0xLXzEwTUhaXSA9IFRJTUVCQVNFXzEwTUhaLAorCVtDTEtfMU1IWl0gPSBUSU1FQkFTRV8xTUhaLAorCVtDTEtfMTAwS0haXSA9IFRJTUVCQVNFXzEwMEtIWiwKKwlbQ0xLXzEwS0haXSA9IFRJTUVCQVNFXzEwS0haLAorCVtDTEtfMUtIWl0gPSBUSU1FQkFTRV8xS0haLAorfTsKKworLyogUENJMjMwIGFuYWxvZ3VlIGlucHV0IHJhbmdlIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNpMjMwX2FpX3JhbmdlID0geyA3LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSkKKwl9Cit9OworCisvKiBQQ0kyMzAgYW5hbG9ndWUgZ2FpbiBiaXRzIGZvciBlYWNoIGlucHV0IHJhbmdlLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGNpMjMwX2FpX2dhaW5bN10gPSB7IDAsIDEsIDIsIDMsIDEsIDIsIDMgfTsKKworLyogUENJMjMwIGFkY2NvbiBiaXBvbGFyIGZsYWcgZm9yIGVhY2ggYW5hbG9ndWUgaW5wdXQgcmFuZ2UuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwY2kyMzBfYWlfYmlwb2xhcls3XSA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCB9OworCisvKiBQQ0kyMzAgYW5hbG9ndWUgb3V0cHV0IHJhbmdlIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNpMjMwX2FvX3JhbmdlID0geyAyLCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEwKQorCX0KK307CisKKy8qIFBDSTIzMCBkYWNjb24gYmlwb2xhciBmbGFnIGZvciBlYWNoIGFuYWxvZ3VlIG91dHB1dCByYW5nZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBjaTIzMF9hb19iaXBvbGFyWzJdID0geyAwLCAxIH07CisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHBjaTIzMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kyMzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGNpMjMwID0geworICAgICAgZHJpdmVyX25hbWU6ImFtcGxjX3BjaTIzMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpMjMwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kyMzBfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGNpMjMwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihwY2kyMzBfYm9hcmRzWzBdKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YocGNpMjMwX2JvYXJkcykgLyBzaXplb2YocGNpMjMwX2JvYXJkc1swXSksCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wY2kyMzAsIHBjaTIzMF9wY2lfdGFibGUpOworCitzdGF0aWMgaW50IHBjaTIzMF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY2kyMzBfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgdm9pZCBwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGN0LAorCXVuc2lnbmVkIGludCBtb2RlLCB1aW50NjRfdCBucywgdW5zaWduZWQgaW50IHJvdW5kKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9uc190b19zaW5nbGVfdGltZXIodW5zaWduZWQgaW50ICpucywgdW5zaWduZWQgaW50IHJvdW5kKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9jYW5jZWxfY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjdCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcGNpMjMwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHBjaTIzMF9hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjaTIzMF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBwY2kyMzBfYW9fc3RvcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9oYW5kbGVfYW9fbm9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMzBfaGFuZGxlX2FvX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjaTIzMF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBwY2kyMzBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMzBfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgcGNpMjMwX2FpX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBwY2kyMzBfaGFuZGxlX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgc2hvcnQgcGNpMjMwX2FpX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogUmVhZCBzYW1wbGUuICovCisJc2hvcnQgZGF0YSA9IChzaG9ydCkgaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0RBVEEpOworCisJLyogUENJMjMwIGlzIDEyIGJpdCAtIHN0b3JlZCBpbiB1cHBlciBiaXRzIG9mIDE2IGJpdCByZWdpc3RlciAobG93ZXIKKwkgKiBmb3VyIGJpdHMgcmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbikuICovCisJLyogUENJMjMwKyBpcyAxNiBiaXQgQUkuICovCisJZGF0YSA9IGRhdGEgPj4gKDE2IC0gdGhpc2JvYXJkLT5haV9iaXRzKTsKKworCS8qIElmIGEgYmlwb2xhciByYW5nZSB3YXMgc3BlY2lmaWVkLCBtYW5nbGUgaXQgKHR3b3MKKwkgKiBjb21wbGVtZW50LT5zdHJhaWdodCBiaW5hcnkpLiAqLworCWlmIChkZXZwcml2LT5haV9iaXBvbGFyKSB7CisJCWRhdGEgXj0gMSA8PCAodGhpc2JvYXJkLT5haV9iaXRzIC0gMSk7CisJfQorCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHBjaTIzMF9hb19tYW5nbGVfZGF0dW0oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc2hvcnQgZGF0dW0pCit7CisJLyogSWYgYSBiaXBvbGFyIHJhbmdlIHdhcyBzcGVjaWZpZWQsIG1hbmdsZSBpdCAoc3RyYWlnaHQgYmluYXJ5LT50d29zCisJICogY29tcGxlbWVudCkuICovCisJaWYgKGRldnByaXYtPmFvX2JpcG9sYXIpIHsKKwkJZGF0dW0gXj0gMSA8PCAodGhpc2JvYXJkLT5hb19iaXRzIC0gMSk7CisJfQorCisJLyogUENJMjMwIGlzIDEyIGJpdCAtIHN0b3JlZCBpbiB1cHBlciBiaXRzIG9mIDE2IGJpdCByZWdpc3RlciAobG93ZXIKKwkgKiBmb3VyIGJpdHMgcmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbikuICovCisJLyogUENJMjMwKyBpcyBhbHNvIDEyIGJpdCBBTy4gKi8KKwlkYXR1bSA8PD0gKDE2IC0gdGhpc2JvYXJkLT5hb19iaXRzKTsKKwlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWRhdHVtOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpMjMwX2FvX3dyaXRlX25vZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc2hvcnQgZGF0dW0sCisJdW5zaWduZWQgaW50IGNoYW4pCit7CisJLyogU3RvcmUgdW5tYW5nbGVkIGRhdHVtIHRvIGJlIHJlYWQgYmFjayBsYXRlci4gKi8KKwlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdHVtOworCisJLyogV3JpdGUgbWFuZ2xlZCBkYXR1bSB0byBhcHByb3ByaWF0ZSBEQUNPVVQgcmVnaXN0ZXIuICovCisJb3V0dyhwY2kyMzBfYW9fbWFuZ2xlX2RhdHVtKGRldiwgZGF0dW0pLCBkZXYtPmlvYmFzZSArICgoKGNoYW4pID09IDApCisJCQk/IFBDSTIzMF9EQUNPVVQxIDogUENJMjMwX0RBQ09VVDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaTIzMF9hb193cml0ZV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzaG9ydCBkYXR1bSwKKwl1bnNpZ25lZCBpbnQgY2hhbikKK3sKKwkvKiBTdG9yZSB1bm1hbmdsZWQgZGF0dW0gdG8gYmUgcmVhZCBiYWNrIGxhdGVyLiAqLworCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0dW07CisKKwkvKiBXcml0ZSBtYW5nbGVkIGRhdHVtIHRvIGFwcHJvcHJpYXRlIERBQ0RBVEEgcmVnaXN0ZXIuICovCisJb3V0dyhwY2kyMzBfYW9fbWFuZ2xlX2RhdHVtKGRldiwgZGF0dW0pLAorCQlkZXYtPmlvYmFzZSArIFBDSTIzMFAyX0RBQ0RBVEEpOworfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTEsIGlvYmFzZTI7CisJLyogUENJMjMwJ3MgSS9PIHNwYWNlcyAxIGFuZCAyIHJlc3BlY3RpdmVseS4gKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlpbnQgaSA9IDAsIGlycV9oZGwsIHJjOworCisJcHJpbnRrKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhdHRhY2ggJXMgJWQsJWRcbiIsIGRldi0+bWlub3IsCisJCXRoaXNib2FyZC0+bmFtZSwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKworCS8qIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhIHVzaW5nIGFsbG9jX3ByaXZhdGUoKS4KKwkgKiBNYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oIC0gbWVtc2V0cyBzdHJ1Y3QgZmllbGRzIHRvIDAuICovCisJaWYgKChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2kyMzBfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5pc3Jfc3BpbmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5yZXNfc3BpbmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+YW9fc3RvcF9zcGlubG9jayk7CisJLyogRmluZCBjYXJkICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJLyogTWF0Y2ggYWdhaW5zdCBidXMvc2xvdCBvcHRpb25zLiAqLworCQkJaWYgKGl0LT5vcHRpb25zWzBdICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyIHx8CisJCQkJaXQtPm9wdGlvbnNbMV0gIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwY2lfZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9BTVBMSUNPTikKKwkJCWNvbnRpbnVlOworCQlpZiAodGhpc2JvYXJkLT5pZCA9PSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQpIHsKKwkJCS8qIFRoZSBuYW1lIHdhcyBzcGVjaWZpZWQgYXMgImFtcGxjX3BjaTIzMCIgd2hpY2ggaXMKKwkJCSAqIHVzZWQgdG8gbWF0Y2ggYW55IHN1cHBvcnRlZCBkZXZpY2UuICBSZXBsYWNlIHRoZQorCQkJICogY3VycmVudCBkZXYtPmJvYXJkX3B0ciB3aXRoIG9uZSB0aGF0IG1hdGNoZXMgdGhlCisJCQkgKiBQQ0kgZGV2aWNlIElELiAqLworCQkJZm9yIChpID0gMDsgaSA8IG5fcGNpMjMwX2JvYXJkczsgaSsrKSB7CisJCQkJaWYgKHBjaV9kZXYtPmRldmljZSA9PSBwY2kyMzBfYm9hcmRzW2ldLmlkKSB7CisJCQkJCWlmIChwY2kyMzBfYm9hcmRzW2ldLm1pbl9od3ZlciA+IDApIHsKKwkJCQkJCS8qIENoZWNrIGZvciBhICcrJyBtb2RlbC4KKwkJCQkJCSAqIEZpcnN0IGNoZWNrIGxlbmd0aCBvZgorCQkJCQkJICogcmVnaXN0ZXJzLiAqLworCQkJCQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMykKKwkJCQkJCQk8IDMyKSB7CisJCQkJCQkJLyogTm90IGEgJysnIG1vZGVsLiAqLworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQkJLyogVE9ETzogdGVtcG9yYXJpbHkgZW5hYmxlIHRoZQorCQkJCQkJICogUENJIGRldmljZSBhbmQgcmVhZCB0aGUKKwkJCQkJCSAqIGhhcmR3YXJlIHZlcnNpb24gcmVnaXN0ZXIuCisJCQkJCQkgKiBGb3Igbm93IGFzc3VtZSBpdCdzIG9rYXkuICovCisJCQkJCX0KKwkJCQkJLyogQ2hhbmdlIGJvYXJkX3B0ciB0byBtYXRjaGVkIGJvYXJkICovCisJCQkJCWRldi0+Ym9hcmRfcHRyID0gJnBjaTIzMF9ib2FyZHNbaV07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChpIDwgbl9wY2kyMzBfYm9hcmRzKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogVGhlIG5hbWUgd2FzIHNwZWNpZmllZCBhcyBhIHNwZWNpZmljIGRldmljZSBuYW1lLgorCQkJICogVGhlIGN1cnJlbnQgZGV2LT5ib2FyZF9wdHIgaXMgY29ycmVjdC4gIENoZWNrCisJCQkgKiB3aGV0aGVyIGl0IG1hdGNoZXMgdGhlIFBDSSBkZXZpY2UgSUQuICovCisJCQlpZiAodGhpc2JvYXJkLT5pZCA9PSBwY2lfZGV2LT5kZXZpY2UpIHsKKwkJCQkvKiBDaGVjayBtaW5pbXVtIGhhcmR3YXJlIHZlcnNpb24uICovCisJCQkJaWYgKHRoaXNib2FyZC0+bWluX2h3dmVyID4gMCkgeworCQkJCQkvKiBMb29raW5nIGZvciBhICcrJyBtb2RlbC4gIEZpcnN0CisJCQkJCSAqIGNoZWNrIGxlbmd0aCBvZiByZWdpc3RlcnMuICovCisJCQkJCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDMpIDwgMzIpIHsKKwkJCQkJCS8qIE5vdCBhICcrJyBtb2RlbC4gKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCS8qIFRPRE86IHRlbXBvcmFyaWx5IGVuYWJsZSB0aGUgUENJCisJCQkJCSAqIGRldmljZSBhbmQgcmVhZCB0aGUgaGFyZHdhcmUgdmVyc2lvbgorCQkJCQkgKiByZWdpc3Rlci4gIEZvciBub3csIGFzc3VtZSBpdCdzCisJCQkJCSAqIG9rYXkuICovCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoIXBjaV9kZXYpIHsKKwkJcHJpbnRrKCJjb21lZGklZDogTm8gJXMgY2FyZCBmb3VuZFxuIiwgZGV2LT5taW5vciwKKwkJCXRoaXNib2FyZC0+bmFtZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKworCS8qCisJICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuCisJICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJLyogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHNwYWNlcy4gKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgImFtcGxjX3BjaTIzMCIpIDwgMCkgeworCQlwcmludGsoImNvbWVkaSVkOiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgIgorCQkJImFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBSZWFkIGJhc2UgYWRkcmVzc2VzIG9mIHRoZSBQQ0kyMzAncyB0d28gSS9PIHJlZ2lvbnMgZnJvbSBQQ0kKKwkgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAqLworCWlvYmFzZTEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJaW9iYXNlMiA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAzKTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzIEkvTyByZWdpb24gMSAweCUwNGx4IEkvTyByZWdpb24gMiAweCUwNGx4XG4iLAorCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUsIGlvYmFzZTEsIGlvYmFzZTIpOworCisJZGV2cHJpdi0+aW9iYXNlMSA9IGlvYmFzZTE7CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2UyOworCisJLyogUmVhZCBiaXRzIG9mIERBQ0NPTiByZWdpc3RlciAtIG9ubHkgdGhlIG91dHB1dCByYW5nZS4gKi8KKwlkZXZwcml2LT5kYWNjb24gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKSAmIFBDSTIzMF9EQUNfT1JfTUFTSzsKKworCS8qIFJlYWQgaGFyZHdhcmUgdmVyc2lvbiByZWdpc3RlciBhbmQgc2V0IGV4dGVuZGVkIGZ1bmN0aW9uIHJlZ2lzdGVyCisJICogaWYgdGhleSBleGlzdC4gKi8KKwlpZiAocGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCAzKSA+PSAzMikgeworCQl1bnNpZ25lZCBzaG9ydCBleHRmdW5jID0gMDsKKworCQlkZXZwcml2LT5od3ZlciA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMFBfSFdWRVIpOworCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPCB0aGlzYm9hcmQtPm1pbl9od3ZlcikgeworCQkJcHJpbnRrKCJjb21lZGklZDogJXMgLSBiYWQgaGFyZHdhcmUgdmVyc2lvbiAiCisJCQkJIi0gZ290ICV1LCBuZWVkICV1XG4iLCBkZXYtPm1pbm9yLAorCQkJCWRldi0+Ym9hcmRfbmFtZSwgZGV2cHJpdi0+aHd2ZXIsCisJCQkJdGhpc2JvYXJkLT5taW5faHd2ZXIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKGRldnByaXYtPmh3dmVyID4gMCkgeworCQkJaWYgKCF0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCQkJLyogTm8gRElPIHBvcnRzLiAgUm91dGUgY291bnRlcnMnIGV4dGVybmFsIGdhdGVzCisJCQkJICogdG8gdGhlIEVYVFRSSUcgc2lnbmFsIChQQ0kyNjArIHBpbiAxNykuCisJCQkJICogKE90aGVyd2lzZSwgdGhleSB3b3VsZCBiZSByb3V0ZWQgdG8gRElPCisJCQkJICogaW5wdXRzIFBDMCwgUEMxIGFuZCBQQzIgd2hpY2ggZG9uJ3QgZXhpc3QKKwkJCQkgKiBvbiBQQ0kyNjBbK10uKSAqLworCQkJCWV4dGZ1bmMgfD0gUENJMjMwUF9FWFRGVU5DX0dBVF9FWFRUUklHOworCQkJfQorCQkJaWYgKCh0aGlzYm9hcmQtPmFvX2NoYW5zID4gMCkKKwkJCQkmJiAoZGV2cHJpdi0+aHd2ZXIgPj0gMikpIHsKKwkJCQkvKiBFbmFibGUgREFDIEZJRk8gZnVuY3Rpb25hbGl0eS4gKi8KKwkJCQlleHRmdW5jIHw9IFBDSTIzMFAyX0VYVEZVTkNfREFDRklGTzsKKwkJCX0KKwkJfQorCQlvdXR3KGV4dGZ1bmMsIGRldi0+aW9iYXNlICsgUENJMjMwUF9FWFRGVU5DKTsKKwkJaWYgKChleHRmdW5jICYgUENJMjMwUDJfRVhURlVOQ19EQUNGSUZPKSAhPSAwKSB7CisJCQkvKiBUZW1wb3JhcmlseSBlbmFibGUgREFDIEZJRk8sIHJlc2V0IGl0IGFuZCBkaXNhYmxlCisJCQkgKiBGSUZPIHdyYXBhcm91bmQuICovCisJCQlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIzMFAyX0RBQ19GSUZPX0VOCisJCQkJfCBQQ0kyMzBQMl9EQUNfRklGT19SRVNFVCwKKwkJCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQkJLyogQ2xlYXIgREFDIEZJRk8gY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIuICovCisJCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMjMwUDJfREFDRU4pOworCQkJLyogRGlzYWJsZSBEQUMgRklGTy4gKi8KKwkJCW91dHcoZGV2cHJpdi0+ZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQl9CisJfQorCisJLyogRGlzYWJsZSBib2FyZCdzIGludGVycnVwdHMuICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TQ0UpOworCisJLyogU2V0IEFEQyB0byBhIHJlYXNvbmFibGUgc3RhdGUuICovCisJZGV2cHJpdi0+YWRjZyA9IDA7CisJZGV2cHJpdi0+YWRjY29uID0gUENJMjMwX0FEQ19UUklHX05PTkUgfCBQQ0kyMzBfQURDX0lNX1NFCisJCXwgUENJMjMwX0FEQ19JUl9CSVA7CisJb3V0dygxIDw8IDAsIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0VOKTsKKwlvdXR3KGRldnByaXYtPmFkY2csIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0cpOworCW91dHcoZGV2cHJpdi0+YWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLiAqLworCWlycV9oZGwgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBwY2kyMzBfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgImFtcGxjX3BjaTIzMCIsIGRldik7CisJaWYgKGlycV9oZGwgPCAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IHVuYWJsZSB0byByZWdpc3RlciBpcnEsICIKKwkJCSJjb21tYW5kcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgJWRcbiIsIGRldi0+bWlub3IsCisJCQlkZXZwcml2LT5wY2lfZGV2LT5pcnEpOworCX0gZWxzZSB7CisJCWRldi0+aXJxID0gZGV2cHJpdi0+cGNpX2Rldi0+aXJxOworCQlwcmludGsoImNvbWVkaSVkOiByZWdpc3RlcmVkIGlycSAldVxuIiwgZGV2LT5taW5vciwKKwkJCWRldnByaXYtPnBjaV9kZXYtPmlycSk7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkYgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YWlfY2hhbnM7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnBjaTIzMF9haV9yYW5nZTsKKwlzLT5pbnNuX3JlYWQgPSAmcGNpMjMwX2FpX3JpbnNuOworCXMtPmxlbl9jaGFubGlzdCA9IDI1NjsJLyogYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuICovCisJLyogT25seSByZWdpc3RlciBjb21tYW5kcyBpZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgaW5zdGFsbGVkLiAqLworCWlmIChpcnFfaGRsID09IDApIHsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCXMtPmRvX2NtZCA9ICZwY2kyMzBfYWlfY21kOworCQlzLT5kb19jbWR0ZXN0ID0gJnBjaTIzMF9haV9jbWR0ZXN0OworCQlzLT5jYW5jZWwgPSBwY2kyMzBfYWlfY2FuY2VsOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+YW9fY2hhbnMgPiAwKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczs7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX2JpdHMpIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcGNpMjMwX2FvX3JhbmdlOworCQlzLT5pbnNuX3dyaXRlID0gJnBjaTIzMF9hb193aW5zbjsKKwkJcy0+aW5zbl9yZWFkID0gJnBjaTIzMF9hb19yaW5zbjsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwkJLyogT25seSByZWdpc3RlciBjb21tYW5kcyBpZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMKKwkJICogaW5zdGFsbGVkLiAqLworCQlpZiAoaXJxX2hkbCA9PSAwKSB7CisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9XUklURTsKKwkJCXMtPmRvX2NtZCA9ICZwY2kyMzBfYW9fY21kOworCQkJcy0+ZG9fY21kdGVzdCA9ICZwY2kyMzBfYW9fY21kdGVzdDsKKwkJCXMtPmNhbmNlbCA9IHBjaTIzMF9hb19jYW5jZWw7CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCXJjID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9QUElfWF9CQVNFKSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBhdHRhY2hlZFxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2kyMzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMgJiYgdGhpc2JvYXJkLT5oYXZlX2RpbykKKwkJLyogQ2xlYW4gdXAgZGlvIHN1YmRldmljZS4gKi8KKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzX21hc2ssCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwlpbnQgb2s7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGI7CisJdW5zaWduZWQgaW50IGNsYWltZWQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCW9rID0gMTsKKwljbGFpbWVkID0gMDsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnJlc19zcGlubG9jaywgaXJxZmxhZ3MpOworCWZvciAoYiA9IDEsIGkgPSAwOyAoaSA8IE5VTV9SRVNPVVJDRVMpCisJCSYmIChyZXNfbWFzayAhPSAwKTsgYiA8PD0gMSwgaSsrKSB7CisJCWlmICgocmVzX21hc2sgJiBiKSAhPSAwKSB7CisJCQlyZXNfbWFzayAmPSB+YjsKKwkJCWlmIChkZXZwcml2LT5yZXNfb3duZXJbaV0gPT0gT1dORVJfTk9ORSkgeworCQkJCWRldnByaXYtPnJlc19vd25lcltpXSA9IG93bmVyOworCQkJCWNsYWltZWQgfD0gYjsKKwkJCX0gZWxzZSBpZiAoZGV2cHJpdi0+cmVzX293bmVyW2ldICE9IG93bmVyKSB7CisJCQkJZm9yIChiID0gMSwgaSA9IDA7IGNsYWltZWQgIT0gMDsgYiA8PD0gMSwgaSsrKSB7CisJCQkJCWlmICgoY2xhaW1lZCAmIGIpICE9IDApIHsKKwkJCQkJCWRldnByaXYtPnJlc19vd25lcltpXQorCQkJCQkJCT0gT1dORVJfTk9ORTsKKwkJCQkJCWNsYWltZWQgJj0gfmI7CisJCQkJCX0KKwkJCQl9CisJCQkJb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5yZXNfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9vbmVfcmVzb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSwKKwl1bnNpZ25lZCBjaGFyIG93bmVyKQoreworCXJldHVybiBnZXRfcmVzb3VyY2VzKGRldiwgKDFVIDw8IHJlc291cmNlKSwgb3duZXIpOworfQorCitzdGF0aWMgdm9pZCBwdXRfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzX21hc2ssCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYjsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5yZXNfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlmb3IgKGIgPSAxLCBpID0gMDsgKGkgPCBOVU1fUkVTT1VSQ0VTKQorCQkmJiAocmVzX21hc2sgIT0gMCk7IGIgPDw9IDEsIGkrKykgeworCQlpZiAoKHJlc19tYXNrICYgYikgIT0gMCkgeworCQkJcmVzX21hc2sgJj0gfmI7CisJCQlpZiAoZGV2cHJpdi0+cmVzX293bmVyW2ldID09IG93bmVyKSB7CisJCQkJZGV2cHJpdi0+cmVzX293bmVyW2ldID0gT1dORVJfTk9ORTsKKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+cmVzX3NwaW5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfb25lX3Jlc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwlwdXRfcmVzb3VyY2VzKGRldiwgKDFVIDw8IHJlc291cmNlKSwgb3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2FsbF9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgb3duZXIpCit7CisJcHV0X3Jlc291cmNlcyhkZXYsICgxVSA8PCBOVU1fUkVTT1VSQ0VTKSAtIDEsIG93bmVyKTsKK30KKworLyoKKyAqICBDT01FRElfU1VCRF9BSSBpbnN0cnVjdGlvbjsKKyAqLworc3RhdGljIGludCBwY2kyMzBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBuLCBpOworCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBpbnQgZ2FpbnNoaWZ0OworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgYWRjY29uLCBhZGNlbjsKKworCS8qIFVucGFjayBjaGFubmVsIGFuZCByYW5nZS4gKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWlmIChhcmVmID09IEFSRUZfRElGRikgeworCQkvKiBEaWZmZXJlbnRpYWwuICovCisJCWlmIChjaGFuID49IHMtPm5fY2hhbiAvIDIpIHsKKwkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFpX3JpbnNuOiAiCisJCQkJImRpZmZlcmVudGlhbCBjaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgIgorCQkJCSIwIHRvICV1XG4iLCBkZXYtPm1pbm9yLCAocy0+bl9jaGFuIC8gMikgLSAxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogVXNlIFoyLUNUMiBhcyBhIGNvbnZlcnNpb24gdHJpZ2dlciBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbgorCSAqIHNvZnR3YXJlIHRyaWdnZXIsIGFzIG90aGVyd2lzZSB0cmlnZ2VyaW5nIG9mIGRpZmZlcmVudGlhbCBjaGFubmVscworCSAqIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3Igc29tZSB2ZXJzaW9ucyBvZiBQQ0kyMzAvMjYwLiAgQWxzbyBzZXQKKwkgKiBGSUZPIG1vZGUgYmVjYXVzZSB0aGUgQURDIGJ1c3kgYml0IG9ubHkgd29ya3MgZm9yIHNvZnR3YXJlIHRyaWdnZXJzLgorCSAqLworCWFkY2NvbiA9IFBDSTIzMF9BRENfVFJJR19aMkNUMiB8IFBDSTIzMF9BRENfRklGT19FTjsKKwkvKiBTZXQgWjItQ1QyIG91dHB1dCBsb3cgdG8gYXZvaWQgYW55IGZhbHNlIHRyaWdnZXJzLiAqLworCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwgSTgyNTRfTU9ERTApOworCWRldnByaXYtPmFpX2JpcG9sYXIgPSBwY2kyMzBfYWlfYmlwb2xhcltyYW5nZV07CisJaWYgKGFyZWYgPT0gQVJFRl9ESUZGKSB7CisJCS8qIERpZmZlcmVudGlhbC4gKi8KKwkJZ2FpbnNoaWZ0ID0gY2hhbiAqIDI7CisJCWlmIChkZXZwcml2LT5od3ZlciA9PSAwKSB7CisJCQkvKiBPcmlnaW5hbCBQQ0kyMzAvMjYwIGV4cGVjdHMgYm90aCBpbnB1dHMgb2YgdGhlCisJCQkgKiBkaWZmZXJlbnRpYWwgY2hhbm5lbCB0byBiZSBlbmFibGVkLiAqLworCQkJYWRjZW4gPSAzIDw8IGdhaW5zaGlmdDsKKwkJfSBlbHNlIHsKKwkJCS8qIFBDSTIzMCsvMjYwKyBleHBlY3RzIG9ubHkgb25lIGlucHV0IG9mIHRoZQorCQkJICogZGlmZmVyZW50aWFsIGNoYW5uZWwgdG8gYmUgZW5hYmxlZC4gKi8KKwkJCWFkY2VuID0gMSA8PCBnYWluc2hpZnQ7CisJCX0KKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSU1fRElGOworCX0gZWxzZSB7CisJCS8qIFNpbmdsZSBlbmRlZC4gKi8KKwkJYWRjZW4gPSAxIDw8IGNoYW47CisJCWdhaW5zaGlmdCA9IGNoYW4gJiB+MTsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSU1fU0U7CisJfQorCWRldnByaXYtPmFkY2cgPSAoZGV2cHJpdi0+YWRjZyAmIH4oMyA8PCBnYWluc2hpZnQpKQorCQl8IChwY2kyMzBfYWlfZ2FpbltyYW5nZV0gPDwgZ2FpbnNoaWZ0KTsKKwlpZiAoZGV2cHJpdi0+YWlfYmlwb2xhcikgeworCQlhZGNjb24gfD0gUENJMjMwX0FEQ19JUl9CSVA7CisJfSBlbHNlIHsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSVJfVU5JOworCX0KKworCS8qIEVuYWJsZSBvbmx5IHRoaXMgY2hhbm5lbCBpbiB0aGUgc2NhbiBsaXN0IC0gb3RoZXJ3aXNlIGJ5IGRlZmF1bHQKKwkgKiB3ZSdsbCBnZXQgb25lIHNhbXBsZSBmcm9tIGVhY2ggY2hhbm5lbC4gKi8KKwlvdXR3KGFkY2VuLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENFTik7CisKKwkvKiBTZXQgZ2FpbiBmb3IgY2hhbm5lbC4gKi8KKwlvdXR3KGRldnByaXYtPmFkY2csIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0cpOworCisJLyogU3BlY2lmeSB1bmkvYmlwLCBzZS9kaWZmLCBjb252ZXJzaW9uIHNvdXJjZSwgYW5kIHJlc2V0IEZJRk8uICovCisJZGV2cHJpdi0+YWRjY29uID0gYWRjY29uOworCW91dHcoYWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogQ29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIFRyaWdnZXIgY29udmVyc2lvbiBieSB0b2dnbGluZyBaMi1DVDIgb3V0cHV0IChmaW5pc2ggd2l0aAorCQkgKiBvdXRwdXQgaGlnaCkuICovCisJCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwKKwkJCUk4MjU0X01PREUwKTsKKwkJaTgyNTRfc2V0X21vZGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCAyLAorCQkJSTgyNTRfTU9ERTEpOworCisjZGVmaW5lIFRJTUVPVVQgMTAwCisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCXN0YXR1cyA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCQkJaWYgKCEoc3RhdHVzICYgUENJMjMwX0FEQ19GSUZPX0VNUFRZKSkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJLyogcnRfcHJpbnRrKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBwcmludGsoKQorCQkJICogd2hlbmV2ZXIgdGhlIGNvZGUgY2FuIGJlIGNhbGxlZCBmcm9tIHJlYWwtdGltZS4gKi8KKwkJCXJ0X3ByaW50aygidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQlkYXRhW25dID0gcGNpMjMwX2FpX3JlYWQoZGV2KTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCisvKgorICogIENPTUVESV9TVUJEX0FPIGluc3RydWN0aW9uczsKKyAqLworc3RhdGljIGludCBwY2kyMzBfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuLCByYW5nZTsKKworCS8qIFVucGFjayBjaGFubmVsIGFuZCByYW5nZS4gKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBTZXQgcmFuZ2UgLSBzZWUgYW5hbG9ndWUgb3V0cHV0IHJhbmdlIHRhYmxlOyAwID0+IHVuaXBvbGFyIDEwViwKKwkgKiAxID0+IGJpcG9sYXIgKy8tMTBWIHJhbmdlIHNjYWxlICovCisJZGV2cHJpdi0+YW9fYmlwb2xhciA9IHBjaTIzMF9hb19iaXBvbGFyW3JhbmdlXTsKKwlvdXR3KHJhbmdlLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCS8qIFdyaXRlIHZhbHVlIHRvIERBQyBhbmQgc3RvcmUgaXQuICovCisJCXBjaTIzMF9hb193cml0ZV9ub2ZpZm8oZGV2LCBkYXRhW2ldLCBjaGFuKTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisJICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisJICogYW5kIHRoZW4gaGF2ZSBpdCBleGVjdXRlcyBieSB0aGUgY21kIGlvY3RsLgorCSAqCisJICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQgb3IgMCwgZGVwZW5kaW5nIG9uIHdoaWNoIHRlc3RzCisJICogdGhlIGNvbW1hbmQgcGFzc2VzLiAqLworCisJLyogU3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQuCisJICogImludmFsaWQgc291cmNlIiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwlpZiAoKHRoaXNib2FyZC0+bWluX2h3dmVyID4gMCkgJiYgKGRldnByaXYtPmh3dmVyID49IDIpKSB7CisJCS8qCisJCSAqIEZvciBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzLCBhbGxvdyBleHRlcm5hbAorCQkgKiB0cmlnZ2VyIGZyb20gRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0IChQQ0kyMzArIHBpbiAyNSkuCisJCSAqCisJCSAqIEZJWE1FOiBUaGUgcGVybWl0dGVkIHNjYW5fYmVnaW5fc3JjIHZhbHVlcyBzaG91bGRuJ3QgZGVwZW5kCisJCSAqIG9uIGRldnByaXYtPmh3dmVyICh0aGUgZGV0ZWN0ZWQgY2FyZCdzIGFjdHVhbCBoYXJkd2FyZQorCQkgKiB2ZXJzaW9uKS4gIFRoZXkgc2hvdWxkIG9ubHkgZGVwZW5kIG9uIHRoaXNib2FyZC0+bWluX2h3dmVyCisJCSAqICh0aGUgc3RhdGljIGNhcGFiaWxpdGllcyBvZiB0aGUgY29uZmlndXJlZCBjYXJkKS4gIFRvIGZpeAorCQkgKiBpdCwgYSBuZXcgY2FyZCBtb2RlbCwgZS5nLiAicGNpMjMwKzIiIHdvdWxkIGhhdmUgdG8gYmUKKwkJICogZGVmaW5lZCB3aXRoIG1pbl9od3ZlciBzZXQgdG8gMi4gIEl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBpdAorCQkgKiBmb3IgdGhpcyBhbG9uZS4gIEF0IHRoZSBtb21lbnQsIHBsZWFzZSBjb25zaWRlcgorCQkgKiBzY2FuX2JlZ2luX3NyYz09VFJJR19FWFQgc3VwcG9ydCB0byBiZSBhIGJvbnVzIHJhdGhlciB0aGFuIGEKKwkJICogZ3VhcmFudGVlIQorCQkgKi8KKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19JTlQgfCBUUklHX0VYVDsKKwl9IGVsc2UgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0lOVDsKKwl9CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBTdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZQorCSAqICJzb3VyY2UgY29uZmxpY3QiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwkvKiB0aGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIF9zcmMgYml0IGlzIHNldCAqLworCWlmICgoY21kLT5zdGFydF9zcmMgJiAoY21kLT5zdGFydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjICYgKGNtZC0+Y29udmVydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fZW5kX3NyYyAmIChjbWQtPnNjYW5fZW5kX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgJiAoY21kLT5zdG9wX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogU3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZS4KKwkgKiAiaW52YWxpZCBhcmd1bWVudCIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRURfQU8JODAwMAkvKiA4MDAwIG5zID0+IDEyNSBrSHogKi8KKyNkZWZpbmUgTUlOX1NQRUVEX0FPCTQyOTQ5NjcyOTV1CS8qIDQyOTQ5NjcyOTVucyA9IDQuMjlzICovCisJCQkvKi0gQ29tZWRpIGxpbWl0IGR1ZSB0byB1bnNpZ25lZCBpbnQgY21kLiAgRHJpdmVyIGxpbWl0CisJCQkgKiA9IDJeMTYgKDE2Yml0ICogY291bnRlcikgKiAxMDAwMDAwbnMgKDFrSHogb25ib2FyZAorCQkJICogY2xvY2spID0gNjUuNTM2cyAqLworCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRF9BTykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRF9BTzsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEX0FPKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEX0FPOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRXh0ZXJuYWwgdHJpZ2dlciAtIGZvciBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzLiAqLworCQkvKiBUcmlnZ2VyIG51bWJlciBtdXN0IGJlIDAuICovCisJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIH5DUl9GTEFHU19NQVNLKSAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCX5DUl9GTEFHU19NQVNLKTsKKwkJCWVycisrOworCQl9CisJCS8qIFRoZSBvbmx5IGZsYWdzIGFsbG93ZWQgYXJlIENSX0VER0UgYW5kIENSX0lOVkVSVC4gIFRoZQorCQkgKiBDUl9FREdFIGZsYWcgaXMgaWdub3JlZC4gKi8KKwkJaWYgKChjbWQtPnNjYW5fYmVnaW5fYXJnCisJCQkJJiAoQ1JfRkxBR1NfTUFTSyAmIH4oQ1JfRURHRSB8IENSX0lOVkVSVCkpKSAhPQorCQkJMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCUNSX0ZMQUdTX01BU0sgJiB+KENSX0VER0UgfCBDUl9JTlZFUlQpKTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIFN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMuCisJICogImFyZ3VtZW50IGNvbmZsaWN0IiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzLiAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKSB7CisJCWVudW0geworCQkJc2VxX2VyciA9ICgxIDw8IDApLAorCQkJcmFuZ2VfZXJyID0gKDEgPDwgMSkKKwkJfTsKKwkJdW5zaWduZWQgaW50IGVycm9yczsKKwkJdW5zaWduZWQgaW50IG47CisJCXVuc2lnbmVkIGludCBjaGFuLCBwcmV2X2NoYW47CisJCXVuc2lnbmVkIGludCByYW5nZSwgZmlyc3RfcmFuZ2U7CisKKwkJcHJldl9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZmlyc3RfcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJZXJyb3JzID0gMDsKKwkJZm9yIChuID0gMTsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKTsKKwkJCS8qIENoYW5uZWwgbnVtYmVycyBtdXN0IHN0cmljdGx5IGluY3JlYXNlLiAqLworCQkJaWYgKGNoYW4gPCBwcmV2X2NoYW4pIHsKKwkJCQllcnJvcnMgfD0gc2VxX2VycjsKKwkJCX0KKwkJCS8qIFJhbmdlcyBtdXN0IGJlIHRoZSBzYW1lLiAqLworCQkJaWYgKHJhbmdlICE9IGZpcnN0X3JhbmdlKSB7CisJCQkJZXJyb3JzIHw9IHJhbmdlX2VycjsKKwkJCX0KKwkJCXByZXZfY2hhbiA9IGNoYW47CisJCX0KKwkJaWYgKGVycm9ycyAhPSAwKSB7CisJCQllcnIrKzsKKwkJCWlmICgoZXJyb3JzICYgc2VxX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFvX2NtZHRlc3Q6ICIKKwkJCQkJImNoYW5uZWwgbnVtYmVycyBtdXN0IGluY3JlYXNlXG4iLAorCQkJCQlkZXYtPm1pbm9yKTsKKwkJCX0KKwkJCWlmICgoZXJyb3JzICYgcmFuZ2VfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYW9fY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHJhbmdlXG4iLAorCQkJCQlkZXYtPm1pbm9yKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2ludHRyaWdfc2Nhbl9iZWdpbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKHRlc3RfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpKSB7CisJCS8qIFBlcmZvcm0gc2Nhbi4gKi8KKwkJaWYgKGRldnByaXYtPmh3dmVyIDwgMikgeworCQkJLyogTm90IHVzaW5nIERBQyBGSUZPLiAqLworCQkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPgorCQkJCWFvX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkJCXBjaTIzMF9oYW5kbGVfYW9fbm9maWZvKGRldiwgcyk7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFVzaW5nIERBQyBGSUZPLiAqLworCQkJLyogUmVhZCBEQUNTV1RSSUcgcmVnaXN0ZXIgdG8gdHJpZ2dlciBjb252ZXJzaW9uLiAqLworCQkJaW53KGRldi0+aW9iYXNlICsgUENJMjMwUDJfREFDU1dUUklHKTsKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT4KKwkJCQlhb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCX0KKwkJLyogRGVsYXkuICBTaG91bGQgZHJpdmVyIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzPyAqLworCQkvKiBYWFggVE9ETzogU2VlIGlmIERBQyBidXN5IGJpdCBjYW4gYmUgdXNlZC4gKi8KKwkJY29tZWRpX3VkZWxheSg4KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2FvX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNldF9iaXQoQU9fQ01EX1NUQVJURUQsICZkZXZwcml2LT5zdGF0ZSk7CisJaWYgKCFkZXZwcml2LT5hb19jb250aW51b3VzICYmIChkZXZwcml2LT5hb19zY2FuX2NvdW50ID09IDApKSB7CisJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXBjaTIzMF9hb19zdG9wKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0gZWxzZSB7CisJCWlmIChkZXZwcml2LT5od3ZlciA+PSAyKSB7CisJCQkvKiBVc2luZyBEQUMgRklGTy4gKi8KKwkJCXVuc2lnbmVkIHNob3J0IHNjYW50cmlnOworCQkJaW50IHJ1bjsKKworCQkJLyogUHJlbG9hZCBGSUZPIGRhdGEuICovCisJCQlydW4gPSBwY2kyMzBfaGFuZGxlX2FvX2ZpZm8oZGV2LCBzKTsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJaWYgKCFydW4pIHsKKwkJCQkvKiBTdG9wcGVkLiAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIFNldCBzY2FuIHRyaWdnZXIgc291cmNlLiAqLworCQkJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJCQljYXNlIFRSSUdfVElNRVI6CisJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19aMkNUMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVFJJR19FWFQ6CisJCQkJLyogVHJpZ2dlciBvbiBFWFRUUklHL0VYVENPTlZDTEsgcGluLiAqLworCQkJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkgPT0gMCkgeworCQkJCQkvKiArdmUgZWRnZSAqLworCQkJCQlzY2FudHJpZyA9IFBDSTIzMFAyX0RBQ19UUklHX0VYVFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogLXZlIGVkZ2UgKi8KKwkJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19FWFROOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVFJJR19JTlQ6CisJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19TVzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogU2hvdWxkbid0IGdldCBoZXJlLiAqLworCQkJCXNjYW50cmlnID0gUENJMjMwUDJfREFDX1RSSUdfTk9ORTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRldnByaXYtPmRhY2NvbiA9IChkZXZwcml2LT5kYWNjb24KKwkJCQkmIH5QQ0kyMzBQMl9EQUNfVFJJR19NQVNLKSB8IHNjYW50cmlnOworCQkJb3V0dyhkZXZwcml2LT5kYWNjb24sIGRldi0+aW9iYXNlICsgUENJMjMwX0RBQ0NPTik7CisKKwkJfQorCQlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwkJY2FzZSBUUklHX1RJTUVSOgorCQkJaWYgKGRldnByaXYtPmh3dmVyIDwgMikgeworCQkJCS8qIE5vdCB1c2luZyBEQUMgRklGTy4gKi8KKwkJCQkvKiBFbmFibGUgQ1QxIHRpbWVyIGludGVycnVwdC4gKi8KKwkJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywKKwkJCQkJaXJxZmxhZ3MpOworCQkJCWRldnByaXYtPmludF9lbiB8PSBQQ0kyMzBfSU5UX1pDTEtfQ1QxOworCQkJCWRldnByaXYtPmllciB8PSBQQ0kyMzBfSU5UX1pDTEtfQ1QxOworCQkJCW91dGIoZGV2cHJpdi0+aWVyLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TQ0UpOworCQkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT4KKwkJCQkJaXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCQl9CisJCQkvKiBTZXQgQ1QxIGdhdGUgaGlnaCB0byBzdGFydCBjb3VudGluZy4gKi8KKwkJCW91dGIoR0FUX0NPTkZJRygxLCBHQVRfVkNDKSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfSU5UOgorCQkJYXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYW9faW50dHJpZ19zY2FuX2JlZ2luOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRldnByaXYtPmh3dmVyID49IDIpIHsKKwkJCS8qIFVzaW5nIERBQyBGSUZPLiAgRW5hYmxlIERBQyBGSUZPIGludGVycnVwdC4gKi8KKwkJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLAorCQkJCWlycWZsYWdzKTsKKwkJCWRldnByaXYtPmludF9lbiB8PSBQQ0kyMzBQMl9JTlRfREFDOworCQkJZGV2cHJpdi0+aWVyIHw9IFBDSTIzMFAyX0lOVF9EQUM7CisJCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssCisJCQkJaXJxZmxhZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHBjaTIzMF9hb19pbnR0cmlnX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTEZVTkM7CisJcGNpMjMwX2FvX3N0YXJ0KGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgc2hvcnQgZGFjY29uOworCXVuc2lnbmVkIGludCByYW5nZTsKKworCS8qIEdldCB0aGUgY29tbWFuZC4gKi8KKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIENsYWltIFoyLUNUMS4gKi8KKwkJaWYgKCFnZXRfb25lX3Jlc291cmNlKGRldiwgUkVTX1oyQ1QxLCBPV05FUl9BT0NNRCkpIHsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBHZXQgbnVtYmVyIG9mIHNjYW5zIHJlcXVpcmVkLiAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFvX2NvbnRpbnVvdXMgPSAwOworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSwgdXNlciBjYWxscyBjYW5jZWwuICovCisJCWRldnByaXYtPmFvX3NjYW5fY291bnQgPSAwOworCQlkZXZwcml2LT5hb19jb250aW51b3VzID0gMTsKKwl9CisKKwkvKiBTZXQgcmFuZ2UgLSBzZWUgYW5hbG9ndWUgb3V0cHV0IHJhbmdlIHRhYmxlOyAwID0+IHVuaXBvbGFyIDEwViwKKwkgKiAxID0+IGJpcG9sYXIgKy8tMTBWIHJhbmdlIHNjYWxlICovCisJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwlkZXZwcml2LT5hb19iaXBvbGFyID0gcGNpMjMwX2FvX2JpcG9sYXJbcmFuZ2VdOworCWRhY2NvbiA9IGRldnByaXYtPmFvX2JpcG9sYXIgPyBQQ0kyMzBfREFDX09SX0JJUCA6IFBDSTIzMF9EQUNfT1JfVU5JOworCS8qIFVzZSBEQUMgRklGTyBmb3IgaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMuICovCisJaWYgKGRldnByaXYtPmh3dmVyID49IDIpIHsKKwkJdW5zaWduZWQgc2hvcnQgZGFjZW47CisJCXVuc2lnbmVkIGludCBpOworCisJCWRhY2VuID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWRhY2VuIHw9IDEgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJfQorCQkvKiBTZXQgY2hhbm5lbCBzY2FuIGxpc3QuICovCisJCW91dHcoZGFjZW4sIGRldi0+aW9iYXNlICsgUENJMjMwUDJfREFDRU4pOworCQkvKgorCQkgKiBFbmFibGUgREFDIEZJRk8uCisJCSAqIFNldCBEQUMgc2NhbiBzb3VyY2UgdG8gJ25vbmUnLgorCQkgKiBTZXQgREFDIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgdG8gJ25vdCBoYWxmIGZ1bGwnLgorCQkgKiBSZXNldCBEQUMgRklGTyBhbmQgY2xlYXIgdW5kZXJydW4uCisJCSAqCisJCSAqIE4uQi4gREFDIEZJRk8gaW50ZXJydXB0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkLgorCQkgKi8KKwkJZGFjY29uIHw9IFBDSTIzMFAyX0RBQ19GSUZPX0VOIHwgUENJMjMwUDJfREFDX0ZJRk9fUkVTRVQKKwkJCXwgUENJMjMwUDJfREFDX0ZJRk9fVU5ERVJSVU5fQ0xFQVIKKwkJCXwgUENJMjMwUDJfREFDX1RSSUdfTk9ORSB8IFBDSTIzMFAyX0RBQ19JTlRfRklGT19OSEFMRjsKKwl9CisKKwkvKiBTZXQgREFDQ09OLiAqLworCW91dHcoZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCS8qIFByZXNlcnZlIG1vc3Qgb2YgREFDQ09OIGFwYXJ0IGZyb20gd3JpdGUtb25seSwgdHJhbnNpZW50IGJpdHMuICovCisJZGV2cHJpdi0+ZGFjY29uID0gZGFjY29uCisJCSYgfihQQ0kyMzBQMl9EQUNfRklGT19SRVNFVCB8IFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0NMRUFSKTsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogU2V0IHRoZSBjb3VudGVyIHRpbWVyIDEgdG8gdGhlIHNwZWNpZmllZCBzY2FuIGZyZXF1ZW5jeS4gKi8KKwkJLyogY21kLT5zY2FuX2JlZ2luX2FyZyBpcyBzYW1wbGluZyBwZXJpb2QgaW4gbnMgKi8KKwkJLyogZ2F0ZSBpdCBvZmYgZm9yIG5vdy4gKi8KKwkJb3V0YihHQVRfQ09ORklHKDEsIEdBVF9HTkQpLAorCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCXBjaTIzMF9jdF9zZXR1cF9uc19tb2RlKGRldiwgMSwgSTgyNTRfTU9ERTMsCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwl9CisKKwkvKiBOLkIuIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UICovCisJcy0+YXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYW9faW50dHJpZ19zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9jaGVja19zY2FuX3BlcmlvZChzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbWluX3NjYW5fcGVyaW9kLCBjaGFubGlzdF9sZW47CisJaW50IGVyciA9IDA7CisKKwljaGFubGlzdF9sZW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMCkgeworCQljaGFubGlzdF9sZW4gPSAxOworCX0KKwltaW5fc2Nhbl9wZXJpb2QgPSBjaGFubGlzdF9sZW4gKiBjbWQtPmNvbnZlcnRfYXJnOworCWlmICgobWluX3NjYW5fcGVyaW9kIDwgY2hhbmxpc3RfbGVuKQorCQl8fCAobWluX3NjYW5fcGVyaW9kIDwgY21kLT5jb252ZXJ0X2FyZykpIHsKKwkJLyogQXJpdGhtZXRpYyBvdmVyZmxvdy4gKi8KKwkJbWluX3NjYW5fcGVyaW9kID0gVUlOVF9NQVg7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IG1pbl9zY2FuX3BlcmlvZCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gbWluX3NjYW5fcGVyaW9kOworCQllcnIrKzsKKwl9CisKKwlyZXR1cm4gIWVycjsKK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCw1IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIFN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkLgorCSAqICJpbnZhbGlkIHNvdXJjZSIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwkvKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW5ub3QgdHJpZ2dlciBhIHNjYW4gb2ZmIGFuIGV4dGVybmFsIHNvdXJjZQorCSAqIG9uIHRoZSBQQ0kyNjAgYm9hcmQsIHNpbmNlIGl0IHVzZXMgdGhlIFBQSUMwIChESU8pIGlucHV0LCB3aGljaAorCSAqIGlzbid0IHByZXNlbnQgb24gdGhlIFBDSTI2MC4gIEZvciBQQ0kyNjArIHdlIGNhbiB1c2UgdGhlCisJICogRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0IG9uIHBpbiAxNyBpbnN0ZWFkLiAqLworCWlmICgodGhpc2JvYXJkLT5oYXZlX2RpbykgfHwgKHRoaXNib2FyZC0+bWluX2h3dmVyID4gMCkpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVyB8IFRSSUdfVElNRVIgfCBUUklHX0lOVAorCQkJfCBUUklHX0VYVDsKKwl9IGVsc2UgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19USU1FUiB8IFRSSUdfSU5UOworCX0KKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0lOVCB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIFN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlCisJICogInNvdXJjZSBjb25mbGljdCIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJLyogSWYgc2Nhbl9iZWdpbl9zcmMgaXMgbm90IFRSSUdfRk9MTE9XLCB0aGVuIGEgbW9ub3N0YWJsZSB3aWxsIGJlCisJICogc2V0IHVwIHRvIGdlbmVyYXRlIGEgZml4ZWQgbnVtYmVyIG9mIHRpbWVkIGNvbnZlcnNpb24gcHVsc2VzLiAqLworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJJiYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBTdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlLgorCSAqICJpbnZhbGlkIGFyZ3VtZW50IiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRF9BSV9TRQkJMzIwMAkvKiBQQ0kyMzAgU0U6ICAgMzIwMCBucyA9PiAzMTIuNSBrSHogKi8KKyNkZWZpbmUgTUFYX1NQRUVEX0FJX0RJRkYJODAwMAkvKiBQQ0kyMzAgRElGRjogODAwMCBucyA9PiAxMjUga0h6ICovCisjZGVmaW5lIE1BWF9TUEVFRF9BSV9QTFVTCTQwMDAJLyogUENJMjMwKzogICAgIDQwMDAgbnMgPT4gMjUwIGtIeiAqLworI2RlZmluZSBNSU5fU1BFRURfQUkJNDI5NDk2NzI5NXUJLyogNDI5NDk2NzI5NW5zID0gNC4yOXMgKi8KKwkJCS8qLSBDb21lZGkgbGltaXQgZHVlIHRvIHVuc2lnbmVkIGludCBjbWQuICBEcml2ZXIgbGltaXQKKwkJCSAqID0gMl4xNiAoMTZiaXQgKiBjb3VudGVyKSAqIDEwMDAwMDBucyAoMWtIeiBvbmJvYXJkCisJCQkgKiBjbG9jaykgPSA2NS41MzZzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBtYXhfc3BlZWRfYWk7CisKKwkJaWYgKGRldnByaXYtPmh3dmVyID09IDApIHsKKwkJCS8qIFBDSTIzMCBvciBQQ0kyNjAuICBNYXggc3BlZWQgZGVwZW5kcyB3aGV0aGVyCisJCQkgKiBzaW5nbGUtZW5kZWQgb3IgcHNldWRvLWRpZmZlcmVudGlhbC4gKi8KKwkJCWlmIChjbWQtPmNoYW5saXN0ICYmIChjbWQtPmNoYW5saXN0X2xlbiA+IDApKSB7CisJCQkJLyogUGVlayBhbmFsb2d1ZSByZWZlcmVuY2Ugb2YgZmlyc3QgY2hhbm5lbC4gKi8KKwkJCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpIHsKKwkJCQkJbWF4X3NwZWVkX2FpID0gTUFYX1NQRUVEX0FJX0RJRkY7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWF4X3NwZWVkX2FpID0gTUFYX1NQRUVEX0FJX1NFOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gY2hhbm5lbCBsaXN0LiAgQXNzdW1lIHNpbmdsZS1lbmRlZC4gKi8KKwkJCQltYXhfc3BlZWRfYWkgPSBNQVhfU1BFRURfQUlfU0U7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBQQ0kyMzArIG9yIFBDSTI2MCsuICovCisJCQltYXhfc3BlZWRfYWkgPSBNQVhfU1BFRURfQUlfUExVUzsKKwkJfQorCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgbWF4X3NwZWVkX2FpKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gbWF4X3NwZWVkX2FpOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBNSU5fU1BFRURfQUkpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNSU5fU1BFRURfQUk7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkvKgorCQkgKiBleHRlcm5hbCB0cmlnZ2VyCisJCSAqCisJCSAqIGNvbnZlcnRfYXJnID09IChDUl9FREdFIHwgMCkKKwkJICogICAgICAgICAgICAgICAgPT4gdHJpZ2dlciBvbiArdmUgZWRnZS4KKwkJICogY29udmVydF9hcmcgPT0gKENSX0VER0UgfCBDUl9JTlZFUlQgfCAwKQorCQkgKiAgICAgICAgICAgICAgICA9PiB0cmlnZ2VyIG9uIC12ZSBlZGdlLgorCQkgKi8KKwkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgQ1JfRkxBR1NfTUFTSykgIT0gMCkgeworCQkJLyogVHJpZ2dlciBudW1iZXIgbXVzdCBiZSAwLiAqLworCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gQ09NQklORShjbWQtPmNvbnZlcnRfYXJnLCAwLAorCQkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQkJZXJyKys7CisJCQl9CisJCQkvKiBUaGUgb25seSBmbGFncyBhbGxvd2VkIGFyZSBDUl9JTlZFUlQgYW5kIENSX0VER0UuCisJCQkgKiBDUl9FREdFIGlzIHJlcXVpcmVkLiAqLworCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgKENSX0ZMQUdTX01BU0sgJiB+Q1JfSU5WRVJUKSkKKwkJCQkhPSBDUl9FREdFKSB7CisJCQkJLyogU2V0IENSX0VER0UsIHByZXNlcnZlIENSX0lOVkVSVC4gKi8KKwkJCQljbWQtPmNvbnZlcnRfYXJnID0KKwkJCQkJQ09NQklORShjbWQtPnN0YXJ0X2FyZywgKENSX0VER0UgfCAwKSwKKwkJCQkJQ1JfRkxBR1NfTUFTSyAmIH5DUl9JTlZFUlQpOworCQkJCWVycisrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucy4gKi8KKwkJCS8qIGNvbnZlcnRfYXJnID09IDAgPT4gdHJpZ2dlciBvbiAtdmUgZWRnZS4gKi8KKwkJCS8qIGNvbnZlcnRfYXJnID09IDEgPT4gdHJpZ2dlciBvbiArdmUgZWRnZS4gKi8KKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gMSkgeworCQkJCS8qIERlZmF1bHQgdG8gdHJpZ2dlciBvbiArdmUgZWRnZS4gKi8KKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gMTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQkvKiBleHRlcm5hbCAidHJpZ2dlciIgdG8gYmVnaW4gZWFjaCBzY2FuCisJCSAqIHNjYW5fYmVnaW5fYXJnPT0wID0+IHVzZSBQUEMwIGlucHV0IC0+IGdhdGUgb2YgQ1QwIC0+IGdhdGUKKwkJICogb2YgQ1QyIChzYW1wbGUgY29udmVydCB0cmlnZ2VyIGlzIENUMikgKi8KKwkJaWYgKChjbWQtPnNjYW5fYmVnaW5fYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBDT01CSU5FKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIDAsCisJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJZXJyKys7CisJCX0KKwkJLyogVGhlIG9ubHkgZmxhZyBhbGxvd2VkIGlzIENSX0VER0UsIHdoaWNoIGlzIGlnbm9yZWQuICovCisJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSkgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IENPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBOLkIuIGNtZC0+Y29udmVydF9hcmcgaXMgYWxzbyBUUklHX1RJTUVSICovCisJCWlmICghcGNpMjMwX2FpX2NoZWNrX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogU3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cy4KKwkgKiAiYXJndW1lbnQgY29uZmxpY3QiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCXBjaTIzMF9uc190b19zaW5nbGVfdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBOLkIuIGNtZC0+Y29udmVydF9hcmcgaXMgYWxzbyBUUklHX1RJTUVSICovCisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCXBjaTIzMF9uc190b19zaW5nbGVfdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKCFwY2kyMzBfYWlfY2hlY2tfc2Nhbl9wZXJpb2QoY21kKSkgeworCQkJLyogV2FzIGJlbG93IG1pbmltdW0gcmVxdWlyZWQuICBSb3VuZCB1cC4gKi8KKwkJCXBjaTIzMF9uc190b19zaW5nbGVfdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJVFJJR19ST1VORF9VUCk7CisJCQlwY2kyMzBfYWlfY2hlY2tfc2Nhbl9wZXJpb2QoY21kKTsKKwkJfQorCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cy4gKi8KKworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkgeworCQllbnVtIHsKKwkJCXNlcV9lcnIgPSAxIDw8IDAsCisJCQlyYW5nZXBhaXJfZXJyID0gMSA8PCAxLAorCQkJcG9sYXJpdHlfZXJyID0gMSA8PCAyLAorCQkJYXJlZl9lcnIgPSAxIDw8IDMsCisJCQlkaWZmY2hhbl9lcnIgPSAxIDw8IDQsCisJCQlidWdneV9jaGFuMF9lcnIgPSAxIDw8IDUKKwkJfTsKKwkJdW5zaWduZWQgaW50IGVycm9yczsKKwkJdW5zaWduZWQgaW50IGNoYW4sIHByZXZfY2hhbjsKKwkJdW5zaWduZWQgaW50IHJhbmdlLCBwcmV2X3JhbmdlOworCQl1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHByZXZfcG9sYXJpdHk7CisJCXVuc2lnbmVkIGludCBhcmVmLCBwcmV2X2FyZWY7CisJCXVuc2lnbmVkIGludCBzdWJzZXFfbGVuOworCQl1bnNpZ25lZCBpbnQgbjsKKworCQlzdWJzZXFfbGVuID0gMDsKKwkJZXJyb3JzID0gMDsKKwkJcHJldl9jaGFuID0gcHJldl9hcmVmID0gcHJldl9yYW5nZSA9IHByZXZfcG9sYXJpdHkgPSAwOworCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykgeworCQkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CisJCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFtuXSk7CisJCQlwb2xhcml0eSA9IHBjaTIzMF9haV9iaXBvbGFyW3JhbmdlXTsKKwkJCS8qIE9ubHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUgaWYKKwkJCSAqIGRpZmZlcmVudGlhbC4gIChUaGVzZSBhcmUgcmVtYXBwZWQgaW4gc29mdHdhcmUuICBJbgorCQkJICogaGFyZHdhcmUsIG9ubHkgdGhlIGV2ZW4gY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS4pICovCisJCQlpZiAoKGFyZWYgPT0gQVJFRl9ESUZGKQorCQkJCSYmIChjaGFuID49IChzLT5uX2NoYW4gLyAyKSkpIHsKKwkJCQllcnJvcnMgfD0gZGlmZmNoYW5fZXJyOworCQkJfQorCQkJaWYgKG4gPiAwKSB7CisJCQkJLyogQ2hhbm5lbCBudW1iZXJzIG11c3Qgc3RyaWN0bHkgaW5jcmVhc2Ugb3IKKwkJCQkgKiBzdWJzZXF1ZW5jZSBtdXN0IHJlcGVhdCBleGFjdGx5LiAqLworCQkJCWlmICgoY2hhbiA8PSBwcmV2X2NoYW4pCisJCQkJCSYmIChzdWJzZXFfbGVuID09IDApKSB7CisJCQkJCXN1YnNlcV9sZW4gPSBuOworCQkJCX0KKwkJCQlpZiAoKHN1YnNlcV9sZW4gPiAwKQorCQkJCQkmJiAoY21kLT5jaGFubGlzdFtuXSAhPQorCQkJCQkJY21kLT5jaGFubGlzdFtuICUKKwkJCQkJCQlzdWJzZXFfbGVuXSkpIHsKKwkJCQkJZXJyb3JzIHw9IHNlcV9lcnI7CisJCQkJfQorCQkJCS8qIENoYW5uZWxzIG11c3QgaGF2ZSBzYW1lIEFSRUYuICovCisJCQkJaWYgKGFyZWYgIT0gcHJldl9hcmVmKSB7CisJCQkJCWVycm9ycyB8PSBhcmVmX2VycjsKKwkJCQl9CisJCQkJLyogQ2hhbm5lbCByYW5nZXMgbXVzdCBoYXZlIHNhbWUgcG9sYXJpdHkuICovCisJCQkJaWYgKHBvbGFyaXR5ICE9IHByZXZfcG9sYXJpdHkpIHsKKwkJCQkJZXJyb3JzIHw9IHBvbGFyaXR5X2VycjsKKwkJCQl9CisJCQkJLyogU2luZ2xlLWVuZGVkIGNoYW5uZWwgcGFpcnMgbXVzdCBoYXZlIHNhbWUKKwkJCQkgKiByYW5nZS4gICovCisJCQkJaWYgKChhcmVmICE9IEFSRUZfRElGRikKKwkJCQkJJiYgKCgoY2hhbiBeIHByZXZfY2hhbikgJiB+MSkgPT0gMCkKKwkJCQkJJiYgKHJhbmdlICE9IHByZXZfcmFuZ2UpKSB7CisJCQkJCWVycm9ycyB8PSByYW5nZXBhaXJfZXJyOworCQkJCX0KKwkJCX0KKwkJCXByZXZfY2hhbiA9IGNoYW47CisJCQlwcmV2X3JhbmdlID0gcmFuZ2U7CisJCQlwcmV2X2FyZWYgPSBhcmVmOworCQkJcHJldl9wb2xhcml0eSA9IHBvbGFyaXR5OworCQl9CisJCWlmIChzdWJzZXFfbGVuID09IDApIHsKKwkJCS8qIFN1YnNlcXVlbmNlIGlzIHdob2xlIHNlcXVlbmNlLiAqLworCQkJc3Vic2VxX2xlbiA9IG47CisJCX0KKwkJLyogSWYgY2hhbm5lbCBsaXN0IGlzIGEgcmVwZWF0aW5nIHN1YnNlcXVlbmNlLCBuZWVkIGEgd2hvbGUKKwkJICogbnVtYmVyIG9mIHJlcGVhdHMuICovCisJCWlmICgobiAlIHN1YnNlcV9sZW4pICE9IDApIHsKKwkJCWVycm9ycyB8PSBzZXFfZXJyOworCQl9CisJCWlmICgoZGV2cHJpdi0+aHd2ZXIgPiAwKSAmJiAoZGV2cHJpdi0+aHd2ZXIgPCA0KSkgeworCQkJLyoKKwkJCSAqIEJ1Z2d5IFBDSTIzMCsgb3IgUENJMjYwKyByZXF1aXJlcyBjaGFubmVsIDAgdG8gYmUKKwkJCSAqIChmaXJzdCkgaW4gdGhlIHNlcXVlbmNlIGlmIHRoZSBzZXF1ZW5jZSBjb250YWlucworCQkJICogbW9yZSB0aGFuIG9uZSBjaGFubmVsLiAgSGFyZHdhcmUgdmVyc2lvbnMgMSBhbmQgMgorCQkJICogaGF2ZSB0aGUgYnVnLiAgVGhlcmUgaXMgbm8gaGFyZHdhcmUgdmVyc2lvbiAzLgorCQkJICoKKwkJCSAqIEFjdHVhbGx5LCB0aGVyZSBhcmUgdHdvIGZpcm13YXJlcyB0aGF0IHJlcG9ydAorCQkJICogdGhlbXNlbHZlcyBhcyBoYXJkd2FyZSB2ZXJzaW9uIDEgKHRoZSBib2FyZHMKKwkJCSAqIGhhdmUgZGlmZmVyZW50IEFEQyBjaGlwcyB3aXRoIHNsaWdodGx5IGRpZmZlcmVudAorCQkJICogdGltaW5nIHJlcXVpcmVtZW50cywgd2hpY2ggd2FzIHN1cHBvc2VkIHRvIGJlCisJCQkgKiBpbnZpc2libGUgdG8gc29mdHdhcmUpLiAgVGhlIGZpcnN0IG9uZSBkb2Vzbid0CisJCQkgKiBzZWVtIHRvIGhhdmUgdGhlIGJ1ZywgYnV0IHRoZSBzZWNvbmQgb25lCisJCQkgKiBkb2VzLCBhbmQgd2UgY2FuJ3QgdGVsbCB0aGVtIGFwYXJ0IQorCQkJICovCisJCQlpZiAoKHN1YnNlcV9sZW4gPiAxKQorCQkJCSYmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pICE9IDApKSB7CisJCQkJZXJyb3JzIHw9IGJ1Z2d5X2NoYW4wX2VycjsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3JzICE9IDApIHsKKwkJCWVycisrOworCQkJaWYgKChlcnJvcnMgJiBzZXFfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYWlfY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbCBudW1iZXJzIG11c3QgaW5jcmVhc2Ugb3IgIgorCQkJCQkic2VxdWVuY2UgbXVzdCByZXBlYXQgZXhhY3RseVxuIiwKKwkJCQkJZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIHJhbmdlcGFpcl9lcnIpICE9IDApIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiAiCisJCQkJCSJzaW5nbGUtZW5kZWQgY2hhbm5lbCBwYWlycyBtdXN0ICIKKwkJCQkJImhhdmUgdGhlIHNhbWUgcmFuZ2VcbiIsIGRldi0+bWlub3IpOworCQkJfQorCQkJaWYgKChlcnJvcnMgJiBwb2xhcml0eV9lcnIpICE9IDApIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiAiCisJCQkJCSJjaGFubmVsIHNlcXVlbmNlIHJhbmdlcyBtdXN0IGJlIGFsbCAiCisJCQkJCSJiaXBvbGFyIG9yIGFsbCB1bmlwb2xhclxuIiwKKwkJCQkJZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIGFyZWZfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYWlfY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbCBzZXF1ZW5jZSBhbmFsb2d1ZSByZWZlcmVuY2VzICIKKwkJCQkJIm11c3QgYmUgYWxsIHRoZSBzYW1lIChzaW5nbGUtZW5kZWQgIgorCQkJCQkib3IgZGlmZmVyZW50aWFsKVxuIiwgZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIGRpZmZjaGFuX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFpX2NtZHRlc3Q6ICIKKwkJCQkJImRpZmZlcmVudGlhbCBjaGFubmVsIG51bWJlciBvdXQgb2YgIgorCQkJCQkicmFuZ2UgMCB0byAldVxuIiwgZGV2LT5taW5vciwKKwkJCQkJKHMtPm5fY2hhbiAvIDIpIC0gMSk7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIGJ1Z2d5X2NoYW4wX2VycikgIT0gMCkgeworCQkJCS8qIFVzZSBwcmludGsgaW5zdGVhZCBvZiBEUFJJTlRLIGhlcmUuICovCisJCQkJcHJpbnRrKCJjb21lZGk6IGNvbWVkaSVkOiBhbXBsY19wY2kyMzA6ICIKKwkJCQkJImFpX2NtZHRlc3Q6IEJ1Z2d5IFBDSTIzMCsvMjYwKyAiCisJCQkJCSJoL3cgdmVyc2lvbiAldSByZXF1aXJlcyBmaXJzdCBjaGFubmVsICIKKwkJCQkJIm9mIG11bHRpLWNoYW5uZWwgc2VxdWVuY2UgdG8gYmUgMCAiCisJCQkJCSIoY29ycmVjdGVkIGluIGgvdyB2ZXJzaW9uIDQpXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBkZXZwcml2LT5od3Zlcik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfYWlfdXBkYXRlX2ZpZm9fdHJpZ2dlcl9sZXZlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBzY2FubGVuID0gY21kLT5zY2FuX2VuZF9hcmc7CisJdW5zaWduZWQgaW50IHdha2U7CisJdW5zaWduZWQgc2hvcnQgdHJpZ2xldjsKKwl1bnNpZ25lZCBzaG9ydCBhZGNjb247CisKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSAhPSAwKSB7CisJCS8qIFdha2UgYXQgZW5kIG9mIHNjYW4uICovCisJCXdha2UgPSBzY2FubGVuIC0gZGV2cHJpdi0+YWlfc2Nhbl9wb3M7CisJfSBlbHNlIHsKKwkJaWYgKGRldnByaXYtPmFpX2NvbnRpbnVvdXMKKwkJCXx8IChkZXZwcml2LT5haV9zY2FuX2NvdW50CisJCQkJPj0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEwpCisJCQl8fCAoc2NhbmxlbiA+PSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkpIHsKKwkJCXdha2UgPSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTDsKKwkJfSBlbHNlIHsKKwkJCXdha2UgPSAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCAqIHNjYW5sZW4pCisJCQkJLSBkZXZwcml2LT5haV9zY2FuX3BvczsKKwkJfQorCX0KKwlpZiAod2FrZSA+PSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkgeworCQl0cmlnbGV2ID0gUENJMjMwX0FEQ19JTlRfRklGT19IQUxGOworCX0gZWxzZSB7CisJCWlmICgod2FrZSA+IDEpICYmIChkZXZwcml2LT5od3ZlciA+IDApKSB7CisJCQkvKiBQQ0kyMzArLzI2MCsgcHJvZ3JhbW1hYmxlIEZJRk8gaW50ZXJydXB0IGxldmVsLiAqLworCQkJaWYgKGRldnByaXYtPmFkY2ZpZm90aHJlc2ggIT0gd2FrZSkgeworCQkJCWRldnByaXYtPmFkY2ZpZm90aHJlc2ggPSB3YWtlOworCQkJCW91dHcod2FrZSwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBQX0FEQ0ZGVEgpOworCQkJfQorCQkJdHJpZ2xldiA9IFBDSTIzMFBfQURDX0lOVF9GSUZPX1RIUkVTSDsKKwkJfSBlbHNlIHsKKwkJCXRyaWdsZXYgPSBQQ0kyMzBfQURDX0lOVF9GSUZPX05FTVBUWTsKKwkJfQorCX0KKwlhZGNjb24gPSAoZGV2cHJpdi0+YWRjY29uICYgflBDSTIzMF9BRENfSU5UX0ZJRk9fTUFTSykgfCB0cmlnbGV2OworCWlmIChhZGNjb24gIT0gZGV2cHJpdi0+YWRjY29uKSB7CisJCWRldnByaXYtPmFkY2NvbiA9IGFkY2NvbjsKKwkJb3V0dyhhZGNjb24sIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisJfQorfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9pbnR0cmlnX2NvbnZlcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICh0ZXN0X2JpdChBSV9DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKSkgeworCQl1bnNpZ25lZCBpbnQgZGVsYXl1czsKKworCQkvKiBUcmlnZ2VyIGNvbnZlcnNpb24gYnkgdG9nZ2xpbmcgWjItQ1QyIG91dHB1dC4gIEZpbmlzaAorCQkgKiB3aXRoIG91dHB1dCBoaWdoLiAqLworCQlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIDIsCisJCQlJODI1NF9NT0RFMCk7CisJCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwKKwkJCUk4MjU0X01PREUxKTsKKwkJLyogRGVsYXkuICBTaG91bGQgZHJpdmVyIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzPyAgQW4KKwkJICogYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gd2FpdCB1bnRpbCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlLAorCQkgKiBidXQgd2UgY2FuJ3QgdGVsbCB3aGVuIGl0J3MgY29tcGxldGUgYmVjYXVzZSB0aGUgQURDIGJ1c3kKKwkJICogYml0IGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nIHdoZW4gRklGTyBlbmFibGVkIChhbmQgd2hlbgorCQkgKiBGSUZPIG5vdCBlbmFibGVkLCBpdCBvbmx5IHdvcmtzIGZvciBzb2Z0d2FyZSB0cmlnZ2VycykuICovCisJCWlmICgoKGRldnByaXYtPmFkY2NvbiAmIFBDSTIzMF9BRENfSU1fTUFTSykKKwkJCQk9PSBQQ0kyMzBfQURDX0lNX0RJRikKKwkJCSYmIChkZXZwcml2LT5od3ZlciA9PSAwKSkgeworCQkJLyogUENJMjMwLzI2MCBpbiBkaWZmZXJlbnRpYWwgbW9kZSAqLworCQkJZGVsYXl1cyA9IDg7CisJCX0gZWxzZSB7CisJCQkvKiBzaW5nbGUtZW5kZWQgb3IgUENJMjMwKy8yNjArICovCisJCQlkZWxheXVzID0gNDsKKwkJfQorCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywKKwkJCWlycWZsYWdzKTsKKwkJY29tZWRpX3VkZWxheShkZWxheXVzKTsKKwl9IGVsc2UgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywKKwkJCWlycWZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfaW50dHJpZ19zY2FuX2JlZ2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdW5zaWduZWQgY2hhciB6Z2F0OworCisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKHRlc3RfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpKSB7CisJCS8qIFRyaWdnZXIgc2NhbiBieSB3YWdnbGluZyBDVDAgZ2F0ZSBzb3VyY2UuICovCisJCXpnYXQgPSBHQVRfQ09ORklHKDAsIEdBVF9HTkQpOworCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQl6Z2F0ID0gR0FUX0NPTkZJRygwLCBHQVRfVkNDKTsKKwkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfYWlfc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIHNob3J0IGNvbnY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisKKwlzZXRfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cyAmJiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSkgeworCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQlwY2kyMzBfYWlfc3RvcChkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgQURDIEZJRk8gdHJpZ2dlciBsZXZlbCBpbnRlcnJ1cHQuICovCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCWRldnByaXYtPmludF9lbiB8PSBQQ0kyMzBfSU5UX0FEQzsKKwkJZGV2cHJpdi0+aWVyIHw9IFBDSTIzMF9JTlRfQURDOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCisJCS8qIFVwZGF0ZSBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIHdoaWNoIGlzIGN1cnJlbnRseSBzZXQKKwkJICogdG8gQ1QyIG91dHB1dCwgd2hpY2ggaXMgY3VycmVudGx5IHN0dWNrIGhpZ2guICovCisJCXN3aXRjaCAoY21kLT5jb252ZXJ0X3NyYykgeworCQlkZWZhdWx0OgorCQkJY29udiA9IFBDSTIzMF9BRENfVFJJR19OT05FOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19USU1FUjoKKwkJCS8qIFVzaW5nIENUMiBvdXRwdXQuICovCisJCQljb252ID0gUENJMjMwX0FEQ19UUklHX1oyQ1QyOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19FWFQ6CisJCQlpZiAoKGNtZC0+Y29udmVydF9hcmcgJiBDUl9FREdFKSAhPSAwKSB7CisJCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgQ1JfSU5WRVJUKSA9PSAwKSB7CisJCQkJCS8qIFRyaWdnZXIgb24gK3ZlIGVkZ2UuICovCisJCQkJCWNvbnYgPSBQQ0kyMzBfQURDX1RSSUdfRVhUUDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUcmlnZ2VyIG9uIC12ZSBlZGdlLiAqLworCQkJCQljb252ID0gUENJMjMwX0FEQ19UUklHX0VYVE47CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KKwkJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQkJCS8qIFRyaWdnZXIgb24gK3ZlIGVkZ2UuICovCisJCQkJCWNvbnYgPSBQQ0kyMzBfQURDX1RSSUdfRVhUUDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUcmlnZ2VyIG9uIC12ZSBlZGdlLiAqLworCQkJCQljb252ID0gUENJMjMwX0FEQ19UUklHX0VYVE47CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVFJJR19JTlQ6CisJCQkvKiBVc2UgQ1QyIG91dHB1dCBmb3Igc29mdHdhcmUgdHJpZ2dlciBkdWUgdG8gcHJvYmxlbXMKKwkJCSAqIGluIGRpZmZlcmVudGlhbCBtb2RlIG9uIFBDSTIzMC8yNjAuICovCisJCQljb252ID0gUENJMjMwX0FEQ19UUklHX1oyQ1QyOworCQkJYnJlYWs7CisJCX0KKwkJZGV2cHJpdi0+YWRjY29uID0gKGRldnByaXYtPmFkY2NvbiAmIH5QQ0kyMzBfQURDX1RSSUdfTUFTSykKKwkJCXwgY29udjsKKwkJb3V0dyhkZXZwcml2LT5hZGNjb24sIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCQlhc3luYy0+aW50dHJpZyA9IHBjaTIzMF9haV9pbnR0cmlnX2NvbnZlcnQ7CisJCX0KKwkJLyogVXBkYXRlIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwsIHdoaWNoIGlzIGN1cnJlbnRseQorCQkgKiBzZXQgdG8gImZ1bGwiLiAgKi8KKwkJcGNpMjMwX2FpX3VwZGF0ZV9maWZvX3RyaWdnZXJfbGV2ZWwoZGV2LCBzKTsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJLyogVXBkYXRlIHRpbWVyIGdhdGVzLiAqLworCQkJdW5zaWduZWQgY2hhciB6Z2F0OworCisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkJCS8qIENvbnZlcnNpb24gdGltZXIgQ1QyIG5lZWRzIHRvIGJlIGdhdGVkIGJ5CisJCQkJICogaW52ZXJ0ZWQgb3V0cHV0IG9mIG1vbm9zdGFibGUgQ1QyLiAqLworCQkJCXpnYXQgPSBHQVRfQ09ORklHKDIsIEdBVF9OT1VUTk0yKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ29udmVyc2lvbiB0aW1lciBDVDIgbmVlZHMgdG8gYmUgZ2F0ZWQgb24KKwkJCQkgKiBjb250aW51b3VzbHkuICovCisJCQkJemdhdCA9IEdBVF9DT05GSUcoMiwgR0FUX1ZDQyk7CisJCQl9CisJCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJCQkvKiBTZXQgbW9ub3N0YWJsZSBDVDAgdHJpZ2dlciBzb3VyY2UuICovCisJCQkJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJCQkJZGVmYXVsdDoKKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX1ZDQyk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR19FWFQ6CisJCQkJCS8qCisJCQkJCSAqIEZvciBDVDAgb24gUENJMjMwLCB0aGUgZXh0ZXJuYWwKKwkJCQkJICogdHJpZ2dlciAoZ2F0ZSkgc2lnbmFsIGNvbWVzIGZyb20KKwkJCQkJICogUFBDMCwgd2hpY2ggaXMgY2hhbm5lbCAxNiBvZiB0aGUgRElPCisJCQkJCSAqIHN1YmRldmljZS4gIFRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0bworCQkJCQkgKiBjb25maWd1cmUgdGhpcyBhcyBhbiBpbnB1dCBpbiBvcmRlcgorCQkJCQkgKiB0byB1c2UgaXQgYXMgYW4gZXh0ZXJuYWwgc2NhbgorCQkJCQkgKiB0cmlnZ2VyLgorCQkJCQkgKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX0VYVCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR19USU1FUjoKKwkJCQkJLyoKKwkJCQkJICogTW9ub3N0YWJsZSBDVDAgdHJpZ2dlcmVkIGJ5IHJpc2luZworCQkJCQkgKiBlZGdlIG9uIGludmVydGVkIG91dHB1dCBvZiBDVDEKKwkJCQkJICogKGZhbGxpbmcgZWRnZSBvbiBDVDEpLgorCQkJCQkgKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX05PVVROTTIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRSSUdfSU5UOgorCQkJCQkvKgorCQkJCQkgKiBNb25vc3RhYmxlIENUMCBpcyB0cmlnZ2VyZWQgYnkKKwkJCQkJICogaW50dHJpZyBmdW5jdGlvbiB3YWdnbGluZyB0aGUgQ1QwCisJCQkJCSAqIGdhdGUgc291cmNlLgorCQkJCQkgKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX1ZDQyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCQkJCWNhc2UgVFJJR19USU1FUjoKKwkJCQkJLyogU2NhbiBwZXJpb2QgdGltZXIgQ1QxIG5lZWRzIHRvIGJlCisJCQkJCSAqIGdhdGVkIG9uIHRvIHN0YXJ0IGNvdW50aW5nLiAqLworCQkJCQl6Z2F0ID0gR0FUX0NPTkZJRygxLCBHQVRfVkNDKTsKKwkJCQkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxCisJCQkJCQkrIFBDSTIzMF9aR0FUX1NDRSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR19JTlQ6CisJCQkJCWFzeW5jLT5pbnR0cmlnID0KKwkJCQkJCXBjaTIzMF9haV9pbnR0cmlnX3NjYW5fYmVnaW47CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfSU5UKSB7CisJCQkvKiBObyBsb25nZXIgbmVlZCBaMi1DVDIuICovCisJCQlwdXRfb25lX3Jlc291cmNlKGRldiwgUkVTX1oyQ1QyLCBPV05FUl9BSUNNRCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2ludHRyaWdfc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMRlVOQzsKKwlwY2kyMzBfYWlfc3RhcnQoZGV2LCBzKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY2hhbiwgcmFuZ2UsIGRpZmY7CisJdW5zaWduZWQgaW50IHJlc19tYXNrOworCXVuc2lnbmVkIHNob3J0IGFkY2NvbiwgYWRjZW47CisJdW5zaWduZWQgY2hhciB6Z2F0OworCisJLyogR2V0IHRoZSBjb21tYW5kLiAqLworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hpY2ggc2hhcmVkIHJlc291cmNlcyBhcmUgbmVlZGVkLgorCSAqLworCXJlc19tYXNrID0gMDsKKwkvKiBOZWVkIFoyLUNUMiB0byBzdXBwbHkgYSBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIGF0IGEgaGlnaAorCSAqIGxvZ2ljIGxldmVsLCBldmVuIGlmIG5vdCBkb2luZyB0aW1lZCBjb252ZXJzaW9ucy4gKi8KKwlyZXNfbWFzayB8PSAoMVUgPDwgUkVTX1oyQ1QyKTsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkvKiBVc2luZyBaMi1DVDAgbW9ub3N0YWJsZSB0byBnYXRlIFoyLUNUMiBjb252ZXJzaW9uIHRpbWVyICovCisJCXJlc19tYXNrIHw9ICgxVSA8PCBSRVNfWjJDVDApOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvKiBVc2luZyBaMi1DVDEgZm9yIHNjYW4gZnJlcXVlbmN5ICovCisJCQlyZXNfbWFzayB8PSAoMVUgPDwgUkVTX1oyQ1QxKTsKKwkJfQorCX0KKwkvKiBDbGFpbSByZXNvdXJjZXMuICovCisJaWYgKCFnZXRfcmVzb3VyY2VzKGRldiwgcmVzX21hc2ssIE9XTkVSX0FJQ01EKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEdldCBudW1iZXIgb2Ygc2NhbnMgcmVxdWlyZWQuICovCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FuX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKKwkJZGV2cHJpdi0+YWlfY29udGludW91cyA9IDA7CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FLCB1c2VyIGNhbGxzIGNhbmNlbC4gKi8KKwkJZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9IDA7CisJCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAxOworCX0KKwlkZXZwcml2LT5haV9zY2FuX3BvcyA9IDA7CS8qIFBvc2l0aW9uIHdpdGhpbiBzY2FuLiAqLworCisJLyogU3RlcHM7CisJICogLSBTZXQgY2hhbm5lbCBzY2FuIGxpc3QuCisJICogLSBTZXQgY2hhbm5lbCBnYWlucy4KKwkgKiAtIEVuYWJsZSBhbmQgcmVzZXQgRklGTywgc3BlY2lmeSB1bmkvYmlwLCBzZS9kaWZmLCBhbmQgc2V0CisJICogICBzdGFydCBjb252ZXJzaW9uIHNvdXJjZSB0byBwb2ludCB0byBzb21ldGhpbmcgYXQgYSBoaWdoIGxvZ2ljCisJICogICBsZXZlbCAod2UgdXNlIHRoZSBvdXRwdXQgb2YgY291bnRlci90aW1lciAyIGZvciB0aGlzIHB1cnBvc2UuCisJICogLSBQQVVTRSB0byBhbGxvdyB0aGluZ3MgdG8gc2V0dGxlIGRvd24uCisJICogLSBSZXNldCB0aGUgRklGTyBhZ2FpbiBiZWNhdXNlIGl0IG5lZWRzIHJlc2V0dGluZyB0d2ljZSBhbmQgdGhlcmUKKwkgKiAgIG1heSBoYXZlIGJlZW4gYSBmYWxzZSBjb252ZXJzaW9uIHRyaWdnZXIgb24gc29tZSB2ZXJzaW9ucyBvZgorCSAqICAgUENJMjMwLzI2MCBkdWUgdG8gdGhlIHN0YXJ0IGNvbnZlcnNpb24gc291cmNlIGJlaW5nIHNldCB0byBhCisJICogICBoaWdoIGxvZ2ljIGxldmVsLgorCSAqIC0gRW5hYmxlIEFEQyBGSUZPIGxldmVsIGludGVycnVwdC4KKwkgKiAtIFNldCBhY3R1YWwgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSBhbmQgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlcgorCSAqICAgbGV2ZWwuCisJICogLSBJZiBjb252ZXJ0X3NyYyBpcyBUUklHX1RJTUVSLCBzZXQgdXAgdGhlIHRpbWVycy4KKwkgKi8KKworCWFkY2NvbiA9IFBDSTIzMF9BRENfRklGT19FTjsKKwlhZGNlbiA9IDA7CisKKwlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpIHsKKwkJLyogRGlmZmVyZW50aWFsIC0gYWxsIGNoYW5uZWxzIG11c3QgYmUgZGlmZmVyZW50aWFsLiAqLworCQlkaWZmID0gMTsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSU1fRElGOworCX0gZWxzZSB7CisJCS8qIFNpbmdsZSBlbmRlZCAtIGFsbCBjaGFubmVscyBtdXN0IGJlIHNpbmdsZS1lbmRlZC4gKi8KKwkJZGlmZiA9IDA7CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lNX1NFOworCX0KKworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJZGV2cHJpdi0+YWlfYmlwb2xhciA9IHBjaTIzMF9haV9iaXBvbGFyW3JhbmdlXTsKKwlpZiAoZGV2cHJpdi0+YWlfYmlwb2xhcikgeworCQlhZGNjb24gfD0gUENJMjMwX0FEQ19JUl9CSVA7CisJfSBlbHNlIHsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSVJfVU5JOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgZ2FpbnNoaWZ0OworCisJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlpZiAoZGlmZikgeworCQkJZ2FpbnNoaWZ0ID0gMiAqIGNoYW47CisJCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPT0gMCkgeworCQkJCS8qIE9yaWdpbmFsIFBDSTIzMC8yNjAgZXhwZWN0cyBib3RoIGlucHV0cyBvZgorCQkJCSAqIHRoZSBkaWZmZXJlbnRpYWwgY2hhbm5lbCB0byBiZSBlbmFibGVkLiAqLworCQkJCWFkY2VuIHw9IDMgPDwgZ2FpbnNoaWZ0OworCQkJfSBlbHNlIHsKKwkJCQkvKiBQQ0kyMzArLzI2MCsgZXhwZWN0cyBvbmx5IG9uZSBpbnB1dCBvZiB0aGUKKwkJCQkgKiBkaWZmZXJlbnRpYWwgY2hhbm5lbCB0byBiZSBlbmFibGVkLiAqLworCQkJCWFkY2VuIHw9IDEgPDwgZ2FpbnNoaWZ0OworCQkJfQorCQl9IGVsc2UgeworCQkJZ2FpbnNoaWZ0ID0gKGNoYW4gJiB+MSk7CisJCQlhZGNlbiB8PSAxIDw8IGNoYW47CisJCX0KKwkJZGV2cHJpdi0+YWRjZyA9IChkZXZwcml2LT5hZGNnICYgfigzIDw8IGdhaW5zaGlmdCkpCisJCQl8IChwY2kyMzBfYWlfZ2FpbltyYW5nZV0gPDwgZ2FpbnNoaWZ0KTsKKwl9CisKKwkvKiBTZXQgY2hhbm5lbCBzY2FuIGxpc3QuICovCisJb3V0dyhhZGNlbiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDRU4pOworCisJLyogU2V0IGNoYW5uZWwgZ2FpbnMuICovCisJb3V0dyhkZXZwcml2LT5hZGNnLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENHKTsKKworCS8qIFNldCBjb3VudGVyL3RpbWVyIDIgb3V0cHV0IGhpZ2ggZm9yIHVzZSBhcyB0aGUgaW5pdGlhbCBzdGFydAorCSAqIGNvbnZlcnNpb24gc291cmNlLiAqLworCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwgSTgyNTRfTU9ERTEpOworCisJLyogVGVtcG9yYXJpbHkgdXNlIENUMiBvdXRwdXQgYXMgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSBhbmQKKwkgKiB0ZW1wb3JhcmlseSBzZXQgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCB0byAnZnVsbCcuICovCisJYWRjY29uIHw9IFBDSTIzMF9BRENfSU5UX0ZJRk9fRlVMTCB8IFBDSTIzMF9BRENfVFJJR19aMkNUMjsKKworCS8qIEVuYWJsZSBhbmQgcmVzZXQgRklGTywgc3BlY2lmeSBGSUZPIHRyaWdnZXIgbGV2ZWwgZnVsbCwgc3BlY2lmeQorCSAqIHVuaS9iaXAsIHNlL2RpZmYsIGFuZCB0ZW1wb3JhcmlseSBzZXQgdGhlIHN0YXJ0IGNvbnZlcnNpb24gc291cmNlCisJICogdG8gQ1QyIG91dHB1dC4gIE5vdGUgdGhhdCBDVDIgb3V0cHV0IGlzIGN1cnJlbnRseSBoaWdoLCBhbmQgdGhpcworCSAqIHdpbGwgcHJvZHVjZSBhIGZhbHNlIGNvbnZlcnNpb24gdHJpZ2dlciBvbiBzb21lIHZlcnNpb25zIG9mIHRoZQorCSAqIFBDSTIzMC8yNjAsIGJ1dCB0aGF0IHdpbGwgYmUgZGVhbHQgd2l0aCBsYXRlci4gKi8KKwlkZXZwcml2LT5hZGNjb24gPSBhZGNjb247CisJb3V0dyhhZGNjb24gfCBQQ0kyMzBfQURDX0ZJRk9fUkVTRVQsIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisKKwkvKiBEZWxheSAqLworCS8qIEZhaWx1cmUgdG8gaW5jbHVkZSB0aGlzIHdpbGwgcmVzdWx0IGluIHRoZSBmaXJzdCBmZXcgY2hhbm5lbHMnLXdvcnRoCisJICogb2YgZGF0YSBiZWluZyBjb3JydXB0LCBub3JtYWxseSBtYW5pZmVzdGluZyBpdHNlbGYgYnkgbGFyZ2UgbmVnYXRpdmUKKwkgKiB2b2x0YWdlcy4gSXQgc2VlbXMgdGhlIGJvYXJkIG5lZWRzIHRpbWUgdG8gc2V0dGxlIGJldHdlZW4gdGhlIGZpcnN0CisJICogRklGTyByZXNldCAoYWJvdmUpIGFuZCB0aGUgc2Vjb25kIEZJRk8gcmVzZXQgKGJlbG93KS4gU2V0dGluZyB0aGUKKwkgKiBjaGFubmVsIGdhaW5zIGFuZCBzY2FuIGxpc3QgX2JlZm9yZV8gdGhlIGZpcnN0IEZJRk8gcmVzZXQgYWxzbworCSAqIGhlbHBzLCB0aG91Z2ggb25seSBzbGlnaHRseS4gKi8KKwljb21lZGlfdWRlbGF5KDI1KTsKKworCS8qIFJlc2V0IEZJRk8gYWdhaW4uICovCisJb3V0dyhhZGNjb24gfCBQQ0kyMzBfQURDX0ZJRk9fUkVTRVQsIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIFNldCB1cCBDVDIgYXMgY29udmVyc2lvbiB0aW1lciwgYnV0IGdhdGUgaXQgb2ZmIGZvciBub3cuCisJCSAqIE5vdGUsIGNvdW50ZXIvdGltZXIgb3V0cHV0IDIgY2FuIGJlIG1vbml0b3JlZCBvbiB0aGUKKwkJICogY29ubmVjdG9yOiBQQ0kyMzAgcGluIDIxLCBQQ0kyNjAgcGluIDE4LiAqLworCQl6Z2F0ID0gR0FUX0NPTkZJRygyLCBHQVRfR05EKTsKKwkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJLyogU2V0IGNvdW50ZXIvdGltZXIgMiB0byB0aGUgc3BlY2lmaWVkIGNvbnZlcnNpb24gcGVyaW9kLiAqLworCQlwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShkZXYsIDIsIEk4MjU0X01PREUzLCBjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCQkvKgorCQkJICogU2V0IHVwIG1vbm9zdGFibGUgb24gQ1QwIG91dHB1dCBmb3Igc2NhbiB0aW1pbmcuICBBCisJCQkgKiByaXNpbmcgZWRnZSBvbiB0aGUgdHJpZ2dlciAoZ2F0ZSkgaW5wdXQgb2YgQ1QwIHdpbGwKKwkJCSAqIHRyaWdnZXIgdGhlIG1vbm9zdGFibGUsIGNhdXNpbmcgaXRzIG91dHB1dCB0byBnbyBsb3cKKwkJCSAqIGZvciB0aGUgY29uZmlndXJlZCBwZXJpb2QuICBUaGUgcGVyaW9kIGRlcGVuZHMgb24KKwkJCSAqIHRoZSBjb252ZXJzaW9uIHBlcmlvZCBhbmQgdGhlIG51bWJlciBvZiBjb252ZXJzaW9ucworCQkJICogaW4gdGhlIHNjYW4uCisJCQkgKgorCQkJICogU2V0IHRoZSB0cmlnZ2VyIGhpZ2ggYmVmb3JlIHNldHRpbmcgdXAgdGhlCisJCQkgKiBtb25vc3RhYmxlIHRvIHN0b3AgaXQgdHJpZ2dlcmluZy4gIFRoZSB0cmlnZ2VyCisJCQkgKiBzb3VyY2Ugd2lsbCBiZSBjaGFuZ2VkIGxhdGVyLgorCQkJICovCisJCQl6Z2F0ID0gR0FUX0NPTkZJRygwLCBHQVRfVkNDKTsKKwkJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCQlwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShkZXYsIDAsIEk4MjU0X01PREUxLAorCQkJCSgodWludDY0X3QpIGNtZC0+Y29udmVydF9hcmcKKwkJCQkJKiBjbWQtPnNjYW5fZW5kX2FyZyksIFRSSUdfUk9VTkRfVVApOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCS8qCisJCQkJICogTW9ub3N0YWJsZSBvbiBDVDAgd2lsbCBiZSB0cmlnZ2VyZWQgYnkKKwkJCQkgKiBvdXRwdXQgb2YgQ1QxIGF0IGNvbmZpZ3VyZWQgc2NhbiBmcmVxdWVuY3kuCisJCQkJICoKKwkJCQkgKiBTZXQgdXAgQ1QxIGJ1dCBnYXRlIGl0IG9mZiBmb3Igbm93LgorCQkJCSAqLworCQkJCXpnYXQgPSBHQVRfQ09ORklHKDEsIEdBVF9HTkQpOworCQkJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCQkJcGNpMjMwX2N0X3NldHVwX25zX21vZGUoZGV2LCAxLCBJODI1NF9NT0RFMywKKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQpIHsKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYWlfaW50dHJpZ19zdGFydDsKKwl9IGVsc2UgeworCQkvKiBUUklHX05PVyAqLworCQlwY2kyMzBfYWlfc3RhcnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkaXZpZGVfbnModWludDY0X3QgbnMsIHVuc2lnbmVkIGludCB0aW1lYmFzZSwKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSkKK3sKKwl1aW50NjRfdCBkaXY7CisJdW5zaWduZWQgaW50IHJlbTsKKworCWRpdiA9IG5zOworCXJlbSA9IGRvX2RpdihkaXYsIHRpbWViYXNlKTsKKwlyb3VuZF9tb2RlICY9IFRSSUdfUk9VTkRfTUFTSzsKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQlkaXYgKz0gKHJlbSArICh0aW1lYmFzZSAvIDIpKSAvIHRpbWViYXNlOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXYgKz0gKHJlbSArIHRpbWViYXNlIC0gMSkgLyB0aW1lYmFzZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBkaXYgPiBVSU5UX01BWCA/IFVJTlRfTUFYIDogKHVuc2lnbmVkIGludClkaXY7Cit9CisKKy8qIEdpdmVuIGRlc2lyZWQgcGVyaW9kIGluIG5zLCByZXR1cm5zIHRoZSByZXF1aXJlZCBpbnRlcm5hbCBjbG9jayBzb3VyY2UKKyAqIGFuZCBnZXRzIHRoZSBpbml0aWFsIGNvdW50LiAqLworc3RhdGljIHVuc2lnbmVkIGludCBwY2kyMzBfY2hvb3NlX2Nsa19jb3VudCh1aW50NjRfdCBucywgdW5zaWduZWQgaW50ICpjb3VudCwKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2xrX3NyYywgY250OworCisJZm9yIChjbGtfc3JjID0gQ0xLXzEwTUhaOzsgY2xrX3NyYysrKSB7CisJCWNudCA9IGRpdmlkZV9ucyhucywgcGNpMjMwX3RpbWViYXNlW2Nsa19zcmNdLCByb3VuZF9tb2RlKTsKKwkJaWYgKChjbnQgPD0gNjU1MzYpIHx8IChjbGtfc3JjID09IENMS18xS0haKSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJKmNvdW50ID0gY250OworCXJldHVybiBjbGtfc3JjOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIHVuc2lnbmVkIGludCByb3VuZCkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGNsa19zcmM7CisKKwljbGtfc3JjID0gcGNpMjMwX2Nob29zZV9jbGtfY291bnQoKm5zLCAmY291bnQsIHJvdW5kKTsKKwkqbnMgPSBjb3VudCAqIHBjaTIzMF90aW1lYmFzZVtjbGtfc3JjXTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9jdF9zZXR1cF9uc19tb2RlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY3QsCisJdW5zaWduZWQgaW50IG1vZGUsIHVpbnQ2NF90IG5zLCB1bnNpZ25lZCBpbnQgcm91bmQpCit7CisJdW5zaWduZWQgaW50IGNsa19zcmM7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJLyogU2V0IG1vZGUuICovCisJaTgyNTRfc2V0X21vZGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCBjdCwgbW9kZSk7CisJLyogRGV0ZXJtaW5lIGNsb2NrIHNvdXJjZSBhbmQgY291bnQuICovCisJY2xrX3NyYyA9IHBjaTIzMF9jaG9vc2VfY2xrX2NvdW50KG5zLCAmY291bnQsIHJvdW5kKTsKKwkvKiBQcm9ncmFtIGNsb2NrIHNvdXJjZS4gKi8KKwlvdXRiKENMS19DT05GSUcoY3QsIGNsa19zcmMpLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pDTEtfU0NFKTsKKwkvKiBTZXQgaW5pdGlhbCBjb3VudC4gKi8KKwlpZiAoY291bnQgPj0gNjU1MzYpIHsKKwkJY291bnQgPSAwOworCX0KKwlpODI1NF93cml0ZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIGN0LCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9jYW5jZWxfY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjdCkKK3sKKwlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIGN0LAorCQlJODI1NF9NT0RFMSk7CisJLyogQ291bnRlciBjdCwgODI1NCBtb2RlIDEsIGluaXRpYWwgY291bnQgbm90IHdyaXR0ZW4uICovCit9CisKKy8qIEludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNpMjMwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzX2ludCwgdmFsaWRfc3RhdHVzX2ludDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCS8qIFJlYWQgaW50ZXJydXB0IHN0YXR1cy9lbmFibGUgcmVnaXN0ZXIuICovCisJc3RhdHVzX2ludCA9IGluYihkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TVEFUKTsKKworCWlmIChzdGF0dXNfaW50ID09IFBDSTIzMF9JTlRfRElTQUJMRSkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwl2YWxpZF9zdGF0dXNfaW50ID0gZGV2cHJpdi0+aW50X2VuICYgc3RhdHVzX2ludDsKKwkvKiBEaXNhYmxlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLgorCSAqIChPbmx5IHRob3NlIGludGVycnVwdHMgdGhhdCBuZWVkIHJlLWVuYWJsaW5nLCBhcmUsIGxhdGVyIGluIHRoZQorCSAqIGhhbmRsZXIpLiAgKi8KKwlkZXZwcml2LT5pZXIgPSBkZXZwcml2LT5pbnRfZW4gJiB+c3RhdHVzX2ludDsKKwlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwlkZXZwcml2LT5pbnRyX3J1bm5pbmcgPSAxOworCWRldnByaXYtPmludHJfY3B1aWQgPSBUSElTQ1BVOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCS8qCisJICogQ2hlY2sgdGhlIHNvdXJjZSBvZiBpbnRlcnJ1cHQgYW5kIGhhbmRsZSBpdC4KKwkgKiBUaGUgUENJMjMwIGNhbiBjb3BlIHdpdGggY29uY3VycmVudCBBREMsIERBQywgUFBJIEMwIGFuZCBDMworCSAqIGludGVycnVwdHMuICBIb3dldmVyLCBhdCBwcmVzZW50IChDb21lZGktMC43LjYwKSBkb2VzIG5vdCBhbGxvdworCSAqIGNvbmN1cnJlbnQgZXhlY3V0aW9uIG9mIGNvbW1hbmRzLCBpbnN0cnVjdGlvbnMgb3IgYSBtaXh0dXJlIG9mIHRoZQorCSAqIHR3by4KKwkgKi8KKworCWlmICgodmFsaWRfc3RhdHVzX2ludCAmIFBDSTIzMF9JTlRfWkNMS19DVDEpICE9IDApIHsKKwkJcyA9IGRldi0+d3JpdGVfc3ViZGV2OworCQlwY2kyMzBfaGFuZGxlX2FvX25vZmlmbyhkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlpZiAoKHZhbGlkX3N0YXR1c19pbnQgJiBQQ0kyMzBQMl9JTlRfREFDKSAhPSAwKSB7CisJCXMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwkJcGNpMjMwX2hhbmRsZV9hb19maWZvKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCWlmICgodmFsaWRfc3RhdHVzX2ludCAmIFBDSTIzMF9JTlRfQURDKSAhPSAwKSB7CisJCXMgPSBkZXYtPnJlYWRfc3ViZGV2OworCQlwY2kyMzBfaGFuZGxlX2FpKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCS8qIFJlZW5hYmxlIGludGVycnVwdHMuICovCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+aWVyICE9IGRldnByaXYtPmludF9lbikgeworCQlkZXZwcml2LT5pZXIgPSBkZXZwcml2LT5pbnRfZW47CisJCW91dGIoZGV2cHJpdi0+aWVyLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TQ0UpOworCX0KKwlkZXZwcml2LT5pbnRyX3J1bm5pbmcgPSAwOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2hhbmRsZV9hb19ub2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzaG9ydCBkYXRhOworCWludCBpLCByZXQ7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisKKwlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMgJiYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkpIHsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCS8qIFJlYWQgc2FtcGxlIGZyb20gQ29tZWRpJ3MgY2lyY3VsYXIgYnVmZmVyLiAqLworCQlyZXQgPSBjb21lZGlfYnVmX2dldChzLT5hc3luYywgJmRhdGEpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCQkJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBidWZmZXIgdW5kZXJydW4iKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBXcml0ZSB2YWx1ZSB0byBEQUMuICovCisJCXBjaTIzMF9hb193cml0ZV9ub2ZpZm8oZGV2LCBkYXRhLCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pKTsKKwl9CisKKwlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1M7CisJaWYgKCFkZXZwcml2LT5hb19jb250aW51b3VzKSB7CisJCWRldnByaXYtPmFvX3NjYW5fY291bnQtLTsKKwkJaWYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkgeworCQkJLyogRW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwkJfQorCX0KK30KKworLyogTG9hZHMgREFDIEZJRk8gKGlmIHVzaW5nIGl0KSBmcm9tIGJ1ZmZlci4gKi8KKy8qIFJldHVybnMgMCBpZiBBTyBmaW5pc2hlZCBkdWUgdG8gY29tcGxldGlvbiBvciBlcnJvciwgMSBpZiBzdGlsbCBnb2luZy4gKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2hhbmRsZV9hb19maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IG51bV9zY2FuczsKKwl1bnNpZ25lZCBpbnQgcm9vbTsKKwl1bnNpZ25lZCBzaG9ydCBkYWNzdGF0OworCXVuc2lnbmVkIGludCBpLCBuOworCXVuc2lnbmVkIGludCBieXRlc19wZXJfc2NhbjsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKwlpbnQgcnVubmluZzsKKworCS8qIEdldCBEQUMgRklGTyBzdGF0dXMuICovCisJZGFjc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCisJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBzY2FucyBhdmFpbGFibGUgaW4gYnVmZmVyLiAqLworCWJ5dGVzX3Blcl9zY2FuID0gY21kLT5jaGFubGlzdF9sZW4gKiBzaXplb2Yoc2hvcnQpOworCW51bV9zY2FucyA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShhc3luYykgLyBieXRlc19wZXJfc2NhbjsKKwlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMpIHsKKwkJLyogRml4ZWQgbnVtYmVyIG9mIHNjYW5zLiAqLworCQlpZiAobnVtX3NjYW5zID4gZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCkgeworCQkJbnVtX3NjYW5zID0gZGV2cHJpdi0+YW9fc2Nhbl9jb3VudDsKKwkJfQorCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9PSAwKSB7CisJCQkvKiBFbmQgb2YgYWNxdWlzaXRpb24uICovCisJCQlldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0KKwlpZiAoZXZlbnRzID09IDApIHsKKwkJLyogQ2hlY2sgZm9yIEZJRk8gdW5kZXJydW4uICovCisJCWlmICgoZGFjc3RhdCAmIFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0xBVENIRUQpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBGSUZPIHVuZGVycnVuIik7CisJCQlldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XIHwgQ09NRURJX0NCX0VSUk9SOworCQl9CisJCS8qIENoZWNrIGZvciBidWZmZXIgdW5kZXJydW4gaWYgRklGTyBsZXNzIHRoYW4gaGFsZiBmdWxsCisJCSAqIChvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBsb2FkcyBvZiAiREFDIEZJRk8gbm90IGhhbGYgZnVsbCIKKwkJICogaW50ZXJydXB0cykuICovCisJCWlmICgobnVtX3NjYW5zID09IDApCisJCQkmJiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19IQUxGKSA9PSAwKSkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgIkFPIGJ1ZmZlciB1bmRlcnJ1biIpOworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKKwkJfQorCX0KKwlpZiAoZXZlbnRzID09IDApIHsKKwkJLyogRGV0ZXJtaW5lIGhvdyBtdWNoIHJvb20gaXMgaW4gdGhlIEZJRk8gKGluIHNhbXBsZXMpLiAqLworCQlpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19GVUxMKSAhPSAwKSB7CisJCQlyb29tID0gUENJMjMwUDJfREFDX0ZJRk9ST09NX0ZVTEw7CisJCX0gZWxzZSBpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19IQUxGKSAhPSAwKSB7CisJCQlyb29tID0gUENJMjMwUDJfREFDX0ZJRk9ST09NX0hBTEZUT0ZVTEw7CisJCX0gZWxzZSBpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19FTVBUWSkgIT0gMCkgeworCQkJcm9vbSA9IFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9FTVBUWTsKKwkJfSBlbHNlIHsKKwkJCXJvb20gPSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fT05FVE9IQUxGOworCQl9CisJCS8qIENvbnZlcnQgcm9vbSB0byBudW1iZXIgb2Ygc2NhbnMgdGhhdCBjYW4gYmUgYWRkZWQuICovCisJCXJvb20gLz0gY21kLT5jaGFubGlzdF9sZW47CisJCS8qIERldGVybWluZSBudW1iZXIgb2Ygc2NhbnMgdG8gcHJvY2Vzcy4gKi8KKwkJaWYgKG51bV9zY2FucyA+IHJvb20pIHsKKwkJCW51bV9zY2FucyA9IHJvb207CisJCX0KKwkJLyogUHJvY2VzcyBzY2Fucy4gKi8KKwkJZm9yIChuID0gMDsgbiA8IG51bV9zY2FuczsgbisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJCXNob3J0IGRhdHVtOworCisJCQkJY29tZWRpX2J1Zl9nZXQoYXN5bmMsICZkYXR1bSk7CisJCQkJcGNpMjMwX2FvX3dyaXRlX2ZpZm8oZGV2LCBkYXR1bSwKKwkJCQkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSk7CisJCQl9CisJCX0KKwkJZXZlbnRzIHw9IENPTUVESV9DQl9FT1MgfCBDT01FRElfQ0JfQkxPQ0s7CisJCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCQkJZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCAtPSBudW1fc2NhbnM7CisJCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9PSAwKSB7CisJCQkJLyogQWxsIGRhdGEgZm9yIHRoZSBjb21tYW5kIGhhcyBiZWVuIHdyaXR0ZW4KKwkJCQkgKiB0byBGSUZPLiAgU2V0IEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwKKwkJCQkgKiB0byAnZW1wdHknLiAqLworCQkJCWRldnByaXYtPmRhY2NvbiA9IChkZXZwcml2LT5kYWNjb24KKwkJCQkJJiB+UENJMjMwUDJfREFDX0lOVF9GSUZPX01BU0spCisJCQkJCXwgUENJMjMwUDJfREFDX0lOVF9GSUZPX0VNUFRZOworCQkJCW91dHcoZGV2cHJpdi0+ZGFjY29uLAorCQkJCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQkJfQorCQl9CisJCS8qIENoZWNrIGlmIEZJRk8gdW5kZXJydW4gb2NjdXJyZWQgd2hpbGUgd3JpdGluZyB0byBGSUZPLiAqLworCQlkYWNzdGF0ID0gaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0RBQ0NPTik7CisJCWlmICgoZGFjc3RhdCAmIFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0xBVENIRUQpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBGSUZPIHVuZGVycnVuIik7CisJCQlldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XIHwgQ09NRURJX0NCX0VSUk9SOworCQl9CisJfQorCWlmICgoZXZlbnRzICYgKENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfT1ZFUkZMT1cpKQorCQkhPSAwKSB7CisJCS8qIFN0b3BwaW5nIEFPIGR1ZSB0byBjb21wbGV0aW9uIG9yIGVycm9yLiAqLworCQlwY2kyMzBfYW9fc3RvcChkZXYsIHMpOworCQlydW5uaW5nID0gMDsKKwl9IGVsc2UgeworCQlydW5uaW5nID0gMTsKKwl9CisJYXN5bmMtPmV2ZW50cyB8PSBldmVudHM7CisJcmV0dXJuIHJ1bm5pbmc7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9oYW5kbGVfYWkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzX2ZpZm87CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHRvZG87CisJdW5zaWduZWQgaW50IGZpZm9hbW91bnQ7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwl1bnNpZ25lZCBpbnQgc2NhbmxlbiA9IGFzeW5jLT5jbWQuc2Nhbl9lbmRfYXJnOworCisJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBzYW1wbGVzIHRvIHJlYWQuICovCisJaWYgKGRldnByaXYtPmFpX2NvbnRpbnVvdXMpIHsKKwkJdG9kbyA9IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMOworCX0gZWxzZSBpZiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSB7CisJCXRvZG8gPSAwOworCX0gZWxzZSBpZiAoKGRldnByaXYtPmFpX3NjYW5fY291bnQgPiBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkKKwkJfHwgKHNjYW5sZW4gPiBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkpIHsKKwkJdG9kbyA9IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMOworCX0gZWxzZSB7CisJCXRvZG8gPSAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCAqIHNjYW5sZW4pCisJCQktIGRldnByaXYtPmFpX3NjYW5fcG9zOworCQlpZiAodG9kbyA+IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMKSB7CisJCQl0b2RvID0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEw7CisJCX0KKwl9CisKKwlpZiAodG9kbyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlmaWZvYW1vdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdG9kbzsgaSsrKSB7CisJCWlmIChmaWZvYW1vdW50ID09IDApIHsKKwkJCS8qIFJlYWQgRklGTyBzdGF0ZS4gKi8KKwkJCXN0YXR1c19maWZvID0gaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisKKwkJCWlmICgoc3RhdHVzX2ZpZm8gJiBQQ0kyMzBfQURDX0ZJRk9fRlVMTF9MQVRDSEVEKSAhPSAwKSB7CisJCQkJLyogUmVwb3J0IGVycm9yIG90aGVyd2lzZSBGSUZPIG92ZXJydW5zIHdpbGwgZ28KKwkJCQkgKiB1bm5vdGljZWQgYnkgdGhlIGNhbGxlci4gKi8KKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiQUkgRklGTyBvdmVycnVuIik7CisJCQkJZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKHN0YXR1c19maWZvICYgUENJMjMwX0FEQ19GSUZPX0VNUFRZKSAhPSAwKSB7CisJCQkJLyogRklGTyBlbXB0eS4gKi8KKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKHN0YXR1c19maWZvICYgUENJMjMwX0FEQ19GSUZPX0hBTEYpICE9IDApIHsKKwkJCQkvKiBGSUZPIGhhbGYgZnVsbC4gKi8KKwkJCQlmaWZvYW1vdW50ID0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEw7CisJCQl9IGVsc2UgeworCQkJCS8qIEZJRk8gbm90IGVtcHR5LiAqLworCQkJCWlmIChkZXZwcml2LT5od3ZlciA+IDApIHsKKwkJCQkJLyogUmVhZCBQQ0kyMzArLzI2MCsgQURDIEZJRk8gbGV2ZWwuICovCisJCQkJCWZpZm9hbW91bnQgPSBpbncoZGV2LT5pb2Jhc2UKKwkJCQkJCSsgUENJMjMwUF9BRENGRkxFVik7CisJCQkJCWlmIChmaWZvYW1vdW50ID09IDApIHsKKwkJCQkJCS8qIFNob3VsZG4ndCBoYXBwZW4uICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWZpZm9hbW91bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIFJlYWQgc2FtcGxlIGFuZCBzdG9yZSBpbiBDb21lZGkncyBjaXJjdWxhciBidWZmZXIuICovCisJCWlmIChjb21lZGlfYnVmX3B1dChhc3luYywgcGNpMjMwX2FpX3JlYWQoZGV2KSkgPT0gMCkgeworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBSSBidWZmZXIgb3ZlcmZsb3ciKTsKKwkJCWJyZWFrOworCQl9CisJCWZpZm9hbW91bnQtLTsKKwkJZGV2cHJpdi0+YWlfc2Nhbl9wb3MrKzsKKwkJaWYgKGRldnByaXYtPmFpX3NjYW5fcG9zID09IHNjYW5sZW4pIHsKKwkJCS8qIEVuZCBvZiBzY2FuLiAqLworCQkJZGV2cHJpdi0+YWlfc2Nhbl9wb3MgPSAwOworCQkJZGV2cHJpdi0+YWlfc2Nhbl9jb3VudC0tOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCQl9CisJfQorCisJaWYgKCFkZXZwcml2LT5haV9jb250aW51b3VzICYmIChkZXZwcml2LT5haV9zY2FuX2NvdW50ID09IDApKSB7CisJCS8qIEVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfSBlbHNlIHsKKwkJLyogTW9yZSBzYW1wbGVzIHJlcXVpcmVkLCB0ZWxsIENvbWVkaSB0byBibG9jay4gKi8KKwkJZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKwl9CisJYXN5bmMtPmV2ZW50cyB8PSBldmVudHM7CisKKwlpZiAoKGFzeW5jLT5ldmVudHMgJiAoQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUiB8CisJCQkJQ09NRURJX0NCX09WRVJGTE9XKSkgIT0gMCkgeworCQkvKiBkaXNhYmxlIGhhcmR3YXJlIGNvbnZlcnNpb25zICovCisJCXBjaTIzMF9haV9zdG9wKGRldiwgcyk7CisJfSBlbHNlIHsKKwkJLyogdXBkYXRlIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgKi8KKwkJcGNpMjMwX2FpX3VwZGF0ZV9maWZvX3RyaWdnZXJfbGV2ZWwoZGV2LCBzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9hb19zdG9wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1bnNpZ25lZCBjaGFyIGludHNyYzsKKwlpbnQgc3RhcnRlZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJc3RhcnRlZCA9IHRlc3RfYW5kX2NsZWFyX2JpdChBT19DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICghc3RhcnRlZCkgeworCQlyZXR1cm47CisJfQorCisJY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBTdG9wIHNjYW4gcmF0ZSBnZW5lcmF0b3IuICovCisJCXBjaTIzMF9jYW5jZWxfY3QoZGV2LCAxKTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaW50ZXJydXB0IHNvdXJjZS4gKi8KKwlpZiAoZGV2cHJpdi0+aHd2ZXIgPCAyKSB7CisJCS8qIE5vdCB1c2luZyBEQUMgRklGTy4gIFVzaW5nIENUMSBpbnRlcnJ1cHQuICovCisJCWludHNyYyA9IFBDSTIzMF9JTlRfWkNMS19DVDE7CisJfSBlbHNlIHsKKwkJLyogVXNpbmcgREFDIEZJRk8gaW50ZXJydXB0LiAqLworCQlpbnRzcmMgPSBQQ0kyMzBQMl9JTlRfREFDOworCX0KKwkvKiBEaXNhYmxlIGludGVycnVwdCBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHJvdXRpbmUgdG8gZmluaXNoIHJ1bm5pbmcKKwkgKiB1bmxlc3Mgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCWRldnByaXYtPmludF9lbiAmPSB+aW50c3JjOworCXdoaWxlIChkZXZwcml2LT5pbnRyX3J1bm5pbmcgJiYgZGV2cHJpdi0+aW50cl9jcHVpZCAhPSBUSElTQ1BVKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwl9CisJaWYgKGRldnByaXYtPmllciAhPSBkZXZwcml2LT5pbnRfZW4pIHsKKwkJZGV2cHJpdi0+aWVyID0gZGV2cHJpdi0+aW50X2VuOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCisJaWYgKGRldnByaXYtPmh3dmVyID49IDIpIHsKKwkJLyogVXNpbmcgREFDIEZJRk8uICBSZXNldCBGSUZPLCBjbGVhciB1bmRlcnJ1biBlcnJvciwKKwkJICogZGlzYWJsZSBGSUZPLiAqLworCQlkZXZwcml2LT5kYWNjb24gJj0gUENJMjMwX0RBQ19PUl9NQVNLOworCQlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIzMFAyX0RBQ19GSUZPX1JFU0VUCisJCQl8IFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0NMRUFSLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKwl9CisKKwkvKiBSZWxlYXNlIHJlc291cmNlcy4gKi8KKwlwdXRfYWxsX3Jlc291cmNlcyhkZXYsIE9XTkVSX0FPQ01EKTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2FpX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJaW50IHN0YXJ0ZWQ7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlzdGFydGVkID0gdGVzdF9hbmRfY2xlYXJfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKCFzdGFydGVkKSB7CisJCXJldHVybjsKKwl9CisKKwljbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIFN0b3AgY29udmVyc2lvbiByYXRlIGdlbmVyYXRvci4gKi8KKwkJcGNpMjMwX2NhbmNlbF9jdChkZXYsIDIpOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkvKiBTdG9wIHNjYW4gcGVyaW9kIG1vbm9zdGFibGUuICovCisJCXBjaTIzMF9jYW5jZWxfY3QoZGV2LCAwKTsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCS8qIERpc2FibGUgQURDIGludGVycnVwdCBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHJvdXRpbmUgdG8gZmluaXNoCisJICogcnVubmluZyB1bmxlc3Mgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwlkZXZwcml2LT5pbnRfZW4gJj0gflBDSTIzMF9JTlRfQURDOworCXdoaWxlIChkZXZwcml2LT5pbnRyX3J1bm5pbmcgJiYgZGV2cHJpdi0+aW50cl9jcHVpZCAhPSBUSElTQ1BVKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwl9CisJaWYgKGRldnByaXYtPmllciAhPSBkZXZwcml2LT5pbnRfZW4pIHsKKwkJZGV2cHJpdi0+aWVyID0gZGV2cHJpdi0+aW50X2VuOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCisJLyogUmVzZXQgRklGTywgZGlzYWJsZSBGSUZPIGFuZCBzZXQgc3RhcnQgY29udmVyc2lvbiBzb3VyY2UgdG8gbm9uZS4KKwkgKiBLZWVwIHNlL2RpZmYgYW5kIGJpcC91bmkgc2V0dGluZ3MgKi8KKwlkZXZwcml2LT5hZGNjb24gPSAoZGV2cHJpdi0+YWRjY29uICYgKFBDSTIzMF9BRENfSVJfTUFTSworCQkJfCBQQ0kyMzBfQURDX0lNX01BU0spKSB8IFBDSTIzMF9BRENfVFJJR19OT05FOworCW91dHcoZGV2cHJpdi0+YWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogUmVsZWFzZSByZXNvdXJjZXMuICovCisJcHV0X2FsbF9yZXNvdXJjZXMoZGV2LCBPV05FUl9BSUNNRCk7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXBjaTIzMF9haV9zdG9wKGRldiwgcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZmZmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYwpAQCAtMCwwICsxLDUxNyBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMKKworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBNZWNoYXRyb25pYyBTeXN0ZW1zIEluYy4gQzZ4X0RJR0lPIERTUCBkYXVnaHRlciBjYXJkLgorICAgKGh0dHA6Ly9yb2JvdDAuZ2UudWl1Yy5lZHUvfnNwb25nL21lY2hhLykKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk5IERhbiBCbG9jaworCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IGM2eGRpZ2lvCitEZXNjcmlwdGlvbjogTWVjaGF0cm9uaWMgU3lzdGVtcyBJbmMuIEM2eF9ESUdJTyBEU1AgZGF1Z2h0ZXIgY2FyZAorQXV0aG9yOiBEYW4gQmxvY2sKK1N0YXR1czogdW5rbm93bgorRGV2aWNlczogW01lY2hhdHJvbmljIFN5c3RlbXMgSW5jLl0gQzZ4X0RJR0lPIERTUCBkYXVnaHRlciBjYXJkIChjNnhkaWdpbykKK1VwZGF0ZWQ6IFN1biBOb3YgMjAgMjA6MTg6MzQgRVNUIDIwMDUKKworVGhpcyBkcml2ZXIgd2lsbCBub3Qgd29yayB3aXRoIGEgMi40IGtlcm5lbC4KK2h0dHA6Ly9yb2JvdDAuZ2UudWl1Yy5lZHUvfnNwb25nL21lY2hhLworCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworc3RhdGljIHU4IFJlYWRCeXRlRnJvbUh3UG9ydCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTggcmVzdWx0ID0gaW5iKGFkZHIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIFdyaXRlQnl0ZVRvSHdQb3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdTggdmFsKQoreworCW91dGJfcCh2YWwsIGFkZHIpOworfQorCisjZGVmaW5lIEM2WERJR0lPX1NJWkUgMworCisvKgorICogcG9ydCBvZmZzZXRzCisgKi8KKyNkZWZpbmUgQzZYRElHSU9fUEFSQUxMRUxfREFUQSAwCisjZGVmaW5lIEM2WERJR0lPX1BBUkFMTEVMX1NUQVRVUyAxCisjZGVmaW5lIEM2WERJR0lPX1BBUkFMTEVMX0NPTlRST0wgMgorc3RydWN0IHB3bWJpdHN0eXBlIHsKKwl1bnNpZ25lZCBzYjA6MjsKKwl1bnNpZ25lZCBzYjE6MjsKKwl1bnNpZ25lZCBzYjI6MjsKKwl1bnNpZ25lZCBzYjM6MjsKKwl1bnNpZ25lZCBzYjQ6MjsKK307Cit1bmlvbiBwd21jbWR0eXBlIHsKKwl1bnNpZ25lZCBjbWQ7CQkvLyBhc3N1bWluZyBoZXJlIHRoYXQgaW50IGlzIDMyYml0CisJc3RydWN0IHB3bWJpdHN0eXBlIGJpdHM7Cit9Oworc3RydWN0IGVuY2JpdHN0eXBlIHsKKwl1bnNpZ25lZCBzYjA6MzsKKwl1bnNpZ25lZCBzYjE6MzsKKwl1bnNpZ25lZCBzYjI6MzsKKwl1bnNpZ25lZCBzYjM6MzsKKwl1bnNpZ25lZCBzYjQ6MzsKKwl1bnNpZ25lZCBzYjU6MzsKKwl1bnNpZ25lZCBzYjY6MzsKKwl1bnNpZ25lZCBzYjc6MzsKK307Cit1bmlvbiBlbmN2YWx1ZXR5cGUgeworCXVuc2lnbmVkIHZhbHVlOworCXN0cnVjdCBlbmNiaXRzdHlwZSBiaXRzOworfTsKKworI2RlZmluZSBDNlhESUdJT19USU1FX09VVCAyMAorCitzdGF0aWMgaW50IGM2eGRpZ2lvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGM2eGRpZ2lvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYzZ4ZGlnaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToiYzZ4ZGlnaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmM2eGRpZ2lvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpjNnhkaWdpb19kZXRhY2gsCit9OworCitzdGF0aWMgdm9pZCBDNlhfcHdtSW5pdCh1bnNpZ25lZCBsb25nIGJhc2VBZGRyKQoreworCWludCB0aW1lb3V0ID0gMDsKKworLy9wcmludGsoIkluc2lkZSBDNlhfcHdtSW5pdFxuIik7CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHg3MCk7CisJd2hpbGUgKCgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgJiAweDgwKSA9PSAwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIDB4NzQpOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHg4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDcwKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHg4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworfQorCitzdGF0aWMgdm9pZCBDNlhfcHdtT3V0cHV0KHVuc2lnbmVkIGxvbmcgYmFzZUFkZHIsIHVuc2lnbmVkIGNoYW5uZWwsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBwcGNtZDsKKwl1bmlvbiBwd21jbWR0eXBlIHB3bTsKKwlpbnQgdGltZW91dCA9IDA7CisJdW5zaWduZWQgdG1wOworCisJLy9wcmludGsoIkluc2lkZSBDNlhfcHdtT3V0cHV0XG4iKTsKKworCXB3bS5jbWQgPSB2YWx1ZTsKKwlpZiAocHdtLmNtZCA+IDQ5OCkKKwkJcHdtLmNtZCA9IDQ5ODsKKwlpZiAocHdtLmNtZCA8IDIpCisJCXB3bS5jbWQgPSAyOworCisJaWYgKGNoYW5uZWwgPT0gMCkgeworCQlwcGNtZCA9IDB4Mjg7CisJfSBlbHNlIHsJCS8vIGlmIGNoYW5uZWwgPT0gMQorCQlwcGNtZCA9IDB4MzA7CisJfQkJCS8qIGVuZGlmICovCisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyBwd20uYml0cy5zYjApOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgcHdtLmJpdHMuc2IxICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIHB3bS5iaXRzLnNiMik7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyBwd20uYml0cy5zYjMgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgcHdtLmJpdHMuc2I0KTsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCit9CisKK3N0YXRpYyBpbnQgQzZYX2VuY0lucHV0KHVuc2lnbmVkIGxvbmcgYmFzZUFkZHIsIHVuc2lnbmVkIGNoYW5uZWwpCit7CisJdW5zaWduZWQgcHBjbWQ7CisJdW5pb24gZW5jdmFsdWV0eXBlIGVuYzsKKwlpbnQgdGltZW91dCA9IDA7CisJaW50IHRtcDsKKworCS8vcHJpbnRrKCJJbnNpZGUgQzZYX2VuY0lucHV0XG4iKTsKKworCWVuYy52YWx1ZSA9IDA7CisJaWYgKGNoYW5uZWwgPT0gMCkgeworCQlwcGNtZCA9IDB4NDg7CisJfSBlbHNlIHsKKwkJcHBjbWQgPSAweDUwOworCX0KKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJZW5jLmJpdHMuc2IwID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjEgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiMiA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIDB4NCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHg4MCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisJZW5jLmJpdHMuc2IzID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kKTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjQgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiNSA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjYgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiNyA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJcmV0dXJuIChlbmMudmFsdWUgXiAweDgwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIEM2WF9lbmNSZXNldEFsbCh1bnNpZ25lZCBsb25nIGJhc2VBZGRyKQoreworCXVuc2lnbmVkIHRpbWVvdXQgPSAwOworCisvL3ByaW50aygiSW5zaWRlIEM2WF9lbmNSZXNldEFsbFxuIik7CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHg2OCk7CisJd2hpbGUgKCgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgJiAweDgwKSA9PSAwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDZDKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4ODApCisJCSYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRpbWVvdXQrKzsKKwl9CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIDB4NjgpOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHgwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHg4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KK30KKworc3RhdGljIGludCBjNnhkaWdpb19wd21vX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcHJpbnRrKCJjNnhkaWdpb19wd21vX2luc25fcmVhZCAleFxuIiwgaW5zbi0+bik7CisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgYzZ4ZGlnaW9fcHdtb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gIHByaW50aygiYzZ4ZGlnaW9fcHdtb19pbnNuX3dyaXRlICV4XG4iLCBpbnNuLT5uKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCUM2WF9wd21PdXRwdXQoZGV2LT5pb2Jhc2UsIGNoYW4sIGRhdGFbaV0pOworCQkvKiAgICBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07ICovCisJfQorCXJldHVybiBpOworfQorCisvL3N0YXRpYyBpbnQgYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKQorLy97CisvLyAgcHJpbnRrKCJjNnhkaWdpb19laV9pbml0X2luc25fcmVhZCAleFxuIiwgaW5zbi0+bik7CisvLyAgcmV0dXJuIGluc24tPm47CisvL30KKworLy9zdGF0aWMgaW50IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCisvL3sKKy8vICBpbnQgaTsKKy8vICBpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworLy8KKy8vICBDNlhfZW5jUmVzZXRBbGwoIGRldi0+aW9iYXNlICk7CisvLworLy8gIHJldHVybiBpbnNuLT5uOworLy99CisKK3N0YXRpYyBpbnQgYzZ4ZGlnaW9fZWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkvLyAgcHJpbnRrKCJjNnhkaWdpb19laV9faW5zbl9yZWFkICV4XG4iLCBpbnNuLT5uKTsKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gKEM2WF9lbmNJbnB1dChkZXYtPmlvYmFzZSwgY2hhbikgJiAweGZmZmZmZik7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIGJvYXJkX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwkvL3ByaW50aygiSW5zaWRlIGJvYXJkX2luaXRcbiIpOworCisJQzZYX3B3bUluaXQoZGV2LT5pb2Jhc2UpOworCUM2WF9lbmNSZXNldEFsbChkZXYtPmlvYmFzZSk7CisKK30KKworLy9zdGF0aWMgdm9pZCBib2FyZF9oYWx0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpIHsKKy8vICBDNlhfcHdtSW5pdChkZXYtPmlvYmFzZSk7CisvL30KKworLyoKKyAgIG9wdGlvbnNbMF0gLSBJL08gcG9ydAorICAgb3B0aW9uc1sxXSAtIGlycQorICAgb3B0aW9uc1syXSAtIG51bWJlciBvZiBlbmNvZGVyIGNoaXBzIGluc3RhbGxlZAorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBjNnhkaWdpb19wbnBfdGJsW10gPSB7CisJLyogU3RhbmRhcmQgTFBUIFByaW50ZXIgUG9ydCAqLworCXsuaWQgPSAiUE5QMDQwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJLyogRUNQIFByaW50ZXIgUG9ydCAqLworCXsuaWQgPSAiUE5QMDQwMSIsLmRyaXZlcl9kYXRhID0gMH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjNnhkaWdpb19wbnBfZHJpdmVyID0geworCS5uYW1lID0gImM2eGRpZ2lvIiwKKwkuaWRfdGFibGUgPSBjNnhkaWdpb19wbnBfdGJsLAorfTsKKworc3RhdGljIGludCBjNnhkaWdpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IGM2eGRpZ2lvOiAweCUwNGx4XG4iLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBDNlhESUdJT19TSVpFLCAiYzZ4ZGlnaW8iKSkgeworCQlwcmludGsoImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdFxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiYzZ4ZGlnaW8iOworCisJcmVzdWx0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpOwkvLyAzIHdpdGggZW5jb2Rlcl9pbml0IHdyaXRlCisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkvLyBNYWtlIHN1cmUgdGhhdCBQblAgcG9ydHMgZ2V0cyBhY3RpdmF0ZWQKKwlwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjNnhkaWdpb19wbnBfZHJpdmVyKTsKKworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEgPiAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IGlycSA9ICV1IGlnbm9yZWRcbiIsIGRldi0+bWlub3IsIGlycSk7CisJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQlwcmludGsoImNvbWVkaSVkOiBubyBpcnFcbiIsIGRldi0+bWlub3IpOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIHB3bSBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwkvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlCisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCS8qICAgICAgcy0+dHJpZ1swXSA9IGM2eGRpZ2lvX3B3bW87ICovCisJcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fcHdtb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGM2eGRpZ2lvX3B3bW9faW5zbl93cml0ZTsKKwlzLT5tYXhkYXRhID0gNTAwOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsJLy8gQSBzdWl0YWJsZSBsaWUKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGVuY29kZXIgKGNvdW50ZXIpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gMjsKKwkvKiBzLT50cmlnWzBdID0gYzZ4ZGlnaW9fZWk7ICovCisJcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fZWlfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCisJLy8gICAgICAgICAgcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLy8gICAgICAvKiBwd20gb3V0cHV0IHN1YmRldmljZSAqLworCS8vICAgICAgcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7ICAvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlCisJLy8gICAgICBzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCS8vICAgICAgcy0+bl9jaGFuID0gMTsKKwkvLyAgICAgIC8qIHMtPnRyaWdbMF0gPSBjNnhkaWdpb19laV9pbml0OyAqLworCS8vICAgICAgcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3JlYWQ7CisJLy8gICAgICBzLT5pbnNuX3dyaXRlID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3dyaXRlOworCS8vICAgICAgcy0+bWF4ZGF0YSA9IDB4RkZGRjsgIC8vIFJlYWxseSBqdXN0IGEgZG9uJ3QgY2FyZQorCS8vICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsgLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZQorCisJLy8gSSB3aWxsIGNhbGwgdGhpcyBpbml0IGFueXdheSBidXQgbW9yZSB0aGFuIGxpa2VseSB0aGUgRFNQIGJvYXJkIHdpbGwgbm90IGJlIGNvbm5lY3QKKwkvLyB3aGVuIGRldmljZSBkcml2ZXIgaXMgbG9hZGVkLgorCWJvYXJkX2luaXQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGM2eGRpZ2lvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8vICBib2FyZF9oYWx0KGRldik7ICAvLyBtYXkgbm90IG5lZWQgdGhpcworCisJcHJpbnRrKCJjb21lZGklZDogYzZ4ZGlnaW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEM2WERJR0lPX1NJWkUpOworCX0KKwlpZiAoZGV2LT5pcnEpIHsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQkJCS8vIE5vdCB1c2luZyBJUlEgc28gSSBhbSBub3Qgc3VyZSBpZiBJIG5lZWQgdGhpcworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmYzZ4ZGlnaW9fcG5wX2RyaXZlcik7CisKKwlyZXR1cm4gMDsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9jNnhkaWdpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmU0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYwpAQCAtMCwwICsxLDk3NiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXMxNmNzLmMKKyAgICBEcml2ZXIgZm9yIENvbXB1dGVyIEJvYXJkcyBQQy1DQVJEIERBUzE2LzE2LgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogY2JfZGFzMTZfY3MKK0Rlc2NyaXB0aW9uOiBDb21wdXRlciBCb2FyZHMgUEMtQ0FSRCBEQVMxNi8xNgorRGV2aWNlczogW0NvbXB1dGVyQm9hcmRzXSBQQy1DQVJEIERBUzE2LzE2IChjYl9kYXMxNl9jcyksIFBDLUNBUkQgREFTMTYvMTYtQU8KK0F1dGhvcjogZHMKK1VwZGF0ZWQ6IE1vbiwgMDQgTm92IDIwMDIgMjA6MDQ6MjEgLTA4MDAKK1N0YXR1czogZXhwZXJpbWVudGFsCisKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgREFTMTZDU19TSVpFCQkJMTgKKworI2RlZmluZSBEQVMxNkNTX0FEQ19EQVRBCQkwCisjZGVmaW5lIERBUzE2Q1NfRElPX01VWAkJCTIKKyNkZWZpbmUgREFTMTZDU19NSVNDMQkJCTQKKyNkZWZpbmUgREFTMTZDU19NSVNDMgkJCTYKKyNkZWZpbmUgREFTMTZDU19DVFIwCQkJOAorI2RlZmluZSBEQVMxNkNTX0NUUjEJCQkxMAorI2RlZmluZSBEQVMxNkNTX0NUUjIJCQkxMgorI2RlZmluZSBEQVMxNkNTX0NUUl9DT05UUk9MCQkxNAorI2RlZmluZSBEQVMxNkNTX0RJTwkJCTE2CisKK3N0cnVjdCBkYXMxNmNzX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CisJaW50IG5fYW9fY2hhbnM7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNmNzX2JvYXJkIGRhczE2Y3NfYm9hcmRzW10gPSB7CisJeworCSAgICAgIGRldmljZV9pZDoweDAwMDAsLyogdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJQQy1DQVJEIERBUzE2LzE2IiwKKwkgICAgICBuX2FvX2NoYW5zOjAsCisJCX0sCisJeworCSAgICAgIGRldmljZV9pZDoweDAwMzksCisJICAgICAgbmFtZToJIlBDLUNBUkQgREFTMTYvMTYtQU8iLAorCSAgICAgIG5fYW9fY2hhbnM6MiwKKwkJfSwKKwl7CisJICAgICAgZGV2aWNlX2lkOjB4NDAwOSwKKwkgICAgICBuYW1lOgkiUENNLURBUzE2cy8xNiIsCisJICAgICAgbl9hb19jaGFuczowLAorCQl9LAorfTsKKworI2RlZmluZSBuX2JvYXJkcyAoc2l6ZW9mKGRhczE2Y3NfYm9hcmRzKS9zaXplb2YoZGFzMTZjc19ib2FyZHNbMF0pKQorI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMTZjc19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGFzMTZjc19wcml2YXRlIHsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMxOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czI7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2Y3NfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBkYXMxNmNzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhczE2Y3NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMTZjcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9kYXMxNl9jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMTZjc19hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMTZjc19kZXRhY2gsCit9OworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmN1cl9kZXYgPSBOVUxMOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZGFzMTZjc19haV9yYW5nZSA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCX0KK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXMxNmNzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNmNzX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxNmNzX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfdGltZXJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfdGltZXJfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBnZXRfcHJvZGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwl0dXBsZV90IHR1cGxlOworCXVfc2hvcnQgYnVmWzEyOF07CisJaW50IHByb2RpZCA9IDA7CisKKwl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CisJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgJiYKKwkJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IDApKSB7CisJCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CisJfQorCisJcmV0dXJuIHByb2RpZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNmNzX2JvYXJkICpkYXMxNmNzX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWludCBpZDsKKwlpbnQgaTsKKworCWlkID0gZ2V0X3Byb2RpZChkZXYsIGxpbmspOworCisJZm9yIChpID0gMDsgaSA8IG5fYm9hcmRzOyBpKyspIHsKKwkJaWYgKGRhczE2Y3NfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBpZCkgeworCQkJcmV0dXJuIGRhczE2Y3NfYm9hcmRzICsgaTsKKwkJfQorCX0KKworCXByaW50aygidW5rbm93biBib2FyZCFcbiIpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IGNiX2RhczE2X2NzOiAiLCBkZXYtPm1pbm9yKTsKKworCWxpbmsgPSBjdXJfZGV2OwkJLyogWFhYIGhhY2sgKi8KKwlpZiAoIWxpbmspCisJCXJldHVybiAtRUlPOworCisJZGV2LT5pb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJcHJpbnRrKCJJL08gYmFzZT0weCUwNGx4ICIsIGRldi0+aW9iYXNlKTsKKworCXByaW50aygiZmluZ2VycHJpbnQ6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDg7IGkgKz0gMikgeworCQlwcmludGsoIiUwNHggIiwgaW53KGRldi0+aW9iYXNlICsgaSkpOworCX0KKwlwcmludGsoIlxuIik7CisKKwlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEobGluay0+aXJxLkFzc2lnbmVkSVJRLCBkYXMxNmNzX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJjYl9kYXMxNl9jcyIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CisJcHJpbnRrKCJpcnE9JXUgIiwgZGV2LT5pcnEpOworCisJZGV2LT5ib2FyZF9wdHIgPSBkYXMxNmNzX3Byb2JlKGRldiwgbGluayk7CisJaWYgKCFkZXYtPmJvYXJkX3B0cikKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMTZjc19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmZGFzMTZjc19haV9yYW5nZTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwlzLT5pbnNuX3JlYWQgPSBkYXMxNmNzX2FpX3JpbnNuOworCXMtPmRvX2NtZCA9IGRhczE2Y3NfYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBkYXMxNmNzX2FpX2NtZHRlc3Q7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPm5fYW9fY2hhbnMpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+bl9hb19jaGFuczsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQlzLT5pbnNuX3dyaXRlID0gJmRhczE2Y3NfYW9fd2luc247CisJCXMtPmluc25fcmVhZCA9ICZkYXMxNmNzX2FvX3JpbnNuOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICgxKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gODsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IGRhczE2Y3NfZGlvX2luc25fYml0czsKKwkJcy0+aW5zbl9jb25maWcgPSBkYXMxNmNzX2Rpb19pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIHRpbWVyIHN1YmRldmljZSAqLworCWlmICgwKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9USU1FUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5tYXhkYXRhID0gMHhmZjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJcy0+aW5zbl9yZWFkID0gZGFzMTZjc190aW1lcl9pbnNuX3JlYWQ7CisJCXMtPmluc25fY29uZmlnID0gZGFzMTZjc190aW1lcl9pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZGFzMTZjczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXMxNmNzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCS8vc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgZGFzMTZjc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IHRvOworCWludCBhcmVmOworCWludCByYW5nZTsKKwlpbnQgY2hhbjsKKwlzdGF0aWMgaW50IHJhbmdlX2JpdHNbXSA9IHsgMHg4MDAsIDB4MDAwLCAweDEwMCwgMHgyMDAgfTsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlhcmVmID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwlvdXR3KGNoYW4sIGRldi0+aW9iYXNlICsgMik7CisKKwlkZXZwcml2LT5zdGF0dXMxICY9IH4weGYzMjA7CisJZGV2cHJpdi0+c3RhdHVzMSB8PSAoYXJlZiA9PSBBUkVGX0RJRkYpID8gMCA6IDB4MDAyMDsKKwlvdXR3KGRldnByaXYtPnN0YXR1czEsIGRldi0+aW9iYXNlICsgNCk7CisKKwlkZXZwcml2LT5zdGF0dXMyICY9IH4weGZmMDA7CisJZGV2cHJpdi0+c3RhdHVzMiB8PSByYW5nZV9iaXRzW3JhbmdlXTsKKwlvdXR3KGRldnByaXYtPnN0YXR1czIsIGRldi0+aW9iYXNlICsgNik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UpOworCisjZGVmaW5lIFRJTUVPVVQgMTAwMAorCQlmb3IgKHRvID0gMDsgdG8gPCBUSU1FT1VUOyB0bysrKSB7CisJCQlpZiAoaW53KGRldi0+aW9iYXNlICsgNCkgJiAweDAwODApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHRvID09IFRJTUVPVVQpIHsKKwkJCXByaW50aygiY2JfZGFzMTZfY3M6IGFpIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlkYXRhW2ldID0gKHVuc2lnbmVkIHNob3J0KWludyhkZXYtPmlvYmFzZSArIDApOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkxMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBNSU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzZWUgYWJvdmUgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA5KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyOworCisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoMTAwLCAmZGl2MSwgJmRpdjIsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyOworCisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoMTAwLCAmZGl2MSwgJmRpdjIsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzMTsKKwl1bnNpZ25lZCBzaG9ydCBkOworCWludCBiaXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwkJZCA9IGRhdGFbaV07CisKKwkJb3V0dyhkZXZwcml2LT5zdGF0dXMxLCBkZXYtPmlvYmFzZSArIDQpOworCQljb21lZGlfdWRlbGF5KDEpOworCisJCXN0YXR1czEgPSBkZXZwcml2LT5zdGF0dXMxICYgfjB4ZjsKKwkJaWYgKGNoYW4pCisJCQlzdGF0dXMxIHw9IDB4MDAwMTsKKwkJZWxzZQorCQkJc3RhdHVzMSB8PSAweDAwMDg7CisKKy8qIAkJcHJpbnRrKCIweCUwNHhcbiIsc3RhdHVzMSk7Ki8KKwkJb3V0dyhzdGF0dXMxLCBkZXYtPmlvYmFzZSArIDQpOworCQljb21lZGlfdWRlbGF5KDEpOworCisJCWZvciAoYml0ID0gMTU7IGJpdCA+PSAwOyBiaXQtLSkgeworCQkJaW50IGIgPSAoZCA+PiBiaXQpICYgMHgxOworCQkJYiA8PD0gMTsKKy8qCQkJcHJpbnRrKCIweCUwNHhcbiIsc3RhdHVzMSB8IGIgfCAweDAwMDApOyovCisJCQlvdXR3KHN0YXR1czEgfCBiIHwgMHgwMDAwLCBkZXYtPmlvYmFzZSArIDQpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKy8qCQkJcHJpbnRrKCIweCUwNHhcbiIsc3RhdHVzMSB8IGIgfCAweDAwMDQpOyovCisJCQlvdXR3KHN0YXR1czEgfCBiIHwgMHgwMDA0LCBkZXYtPmlvYmFzZSArIDQpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorLyoJCW1ha2UgaGlnaCBib3RoIERBQzBDUyBhbmQgREFDMUNTIHRvIGxvYWQKKwkJbmV3IGRhdGEgYW5kIHVwZGF0ZSBhbmFsb2cgb3V0cHV0Ki8KKwkJb3V0dyhzdGF0dXMxIHwgMHg5LCBkZXYtPmlvYmFzZSArIDQpOworCX0KKworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgZGFzMTZjc19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KK3N0YXRpYyBpbnQgZGFzMTZjc19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKworCQlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIDE2KTsKKwl9CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgMTYpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IGJpdHM7CisKKwlpZiAoY2hhbiA8IDQpCisJCWJpdHMgPSAweDBmOworCWVsc2UKKwkJYml0cyA9IDB4ZjA7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJZGV2cHJpdi0+c3RhdHVzMiAmPSB+MHgwMGMwOworCWRldnByaXYtPnN0YXR1czIgfD0gKHMtPmlvX2JpdHMgJiAweGYwKSA/IDB4MDA4MCA6IDA7CisJZGV2cHJpdi0+c3RhdHVzMiB8PSAocy0+aW9fYml0cyAmIDB4MGYpID8gMHgwMDQwIDogMDsKKworCW91dHcoZGV2cHJpdi0+c3RhdHVzMiwgZGV2LT5pb2Jhc2UgKyA2KTsKKworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfdGltZXJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkYXMxNmNzX3RpbWVyX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogUENNQ0lBIHN0dWZmICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGZvbGxvd2luZyBwY21jaWEgY29kZSBmb3IgdGhlIHBjbS1kYXMwOCBpcyBhZGFwdGVkIGZyb20gdGhlCisgICAgZHVtbXlfY3MuYyBkcml2ZXIgb2YgdGhlIExpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzIHBhY2thZ2UuCisKKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSB8fCBkZWZpbmVkKENPTkZJR19QQ01DSUFfTU9EVUxFKQorCisjaWZkZWYgUENNQ0lBX0RFQlVHCitzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOworbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQorc3RhdGljIGNoYXIgKnZlcnNpb24gPQorCSJjYl9kYXMxNl9jcy5jIHBjbWNpYSBjb2RlIChEYXZpZCBTY2hsZWVmKSwgbW9kaWZpZWQgZnJvbSBkdW1teV9jcy5jIDEuMzEgMjAwMS8wOC8yNCAxMjoxMzoxMyAoRGF2aWQgSGluZHMpIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkYXMxNmNzX3BjbWNpYV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBkZXZfaW5mb190IGRldl9pbmZvID0gImNiX2RhczE2X2NzIjsKKworc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCXN0cnVjdCBidXNfb3BlcmF0aW9ucyAqYnVzOworfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBkYXMxNmNzX3BjbWNpYV9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZworICAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KKworICAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCisgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRhczE2Y3NfcGNtY2lhX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghbG9jYWwpCisJCXJldHVybiAtRU5PTUVNOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbml0aWFsaXplIHRoZSBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAqLworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CisKKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJY3VyX2RldiA9IGxpbms7CisKKwlkYXMxNmNzX3BjbWNpYV9jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFzMTZjc19wY21jaWFfYXR0YWNoICovCisKK3N0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGFzMTZjc19wY21jaWFfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgbGluay0+cHJpdiktPnN0b3AgPSAxOworCQlkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKGxpbmspOworCX0KKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IHN0cnVjdCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9kZXRhY2ggKi8KKworc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCWxhc3RfZm4gPSBHZXRUdXBsZURhdGE7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKwlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJbGFzdF9mbiA9IEdldEZpcnN0VHVwbGU7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisvKglpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKyovCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJbGFzdF9mbiA9IEdldE5leHRUdXBsZTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCisJICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCWxhc3RfZm4gPSBSZXF1ZXN0SVJROworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlsYXN0X2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJjYl9kYXMxNl9jcyIpOworCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCisJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMngiLAorCQlkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAorCQkJbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMikKKwkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAorCQkJbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworCWRhczE2Y3NfcGNtY2lhX3JlbGVhc2UobGluayk7Cit9CQkJCS8qIGRhczE2Y3NfcGNtY2lhX2NvbmZpZyAqLworCitzdGF0aWMgdm9pZCBkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGRhczE2Y3NfcGNtY2lhX3JlbGVhc2UgKi8KKworc3RhdGljIGludCBkYXMxNmNzX3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLworCWxvY2FsLT5zdG9wID0gMTsKKworCXJldHVybiAwOworfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCWxvY2FsLT5zdG9wID0gMDsKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFzMTZjc19wY21jaWFfcmVzdW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGFzMTZjc19pZF90YWJsZVtdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFjNSwgMHgwMDM5KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYzUsIDB4NDAwOSksCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgZGFzMTZjc19pZF90YWJsZSk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIGRhczE2Y3NfZHJpdmVyID0geworCS5wcm9iZSA9IGRhczE2Y3NfcGNtY2lhX2F0dGFjaCwKKwkucmVtb3ZlID0gZGFzMTZjc19wY21jaWFfZGV0YWNoLAorCS5zdXNwZW5kID0gZGFzMTZjc19wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lID0gZGFzMTZjc19wY21jaWFfcmVzdW1lLAorCS5pZF90YWJsZSA9IGRhczE2Y3NfaWRfdGFibGUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJCS5uYW1lID0gZGV2X2luZm8sCisJCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2RhczE2Y3NfcGNtY2lhX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZkYXMxNmNzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RhczE2Y3NfcGNtY2lhX2NzKHZvaWQpCit7CisJREVCVUcoMCwgImRhczE2Y3NfcGNtY2lhX2NzOiB1bmxvYWRpbmdcbiIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmZGFzMTZjc19kcml2ZXIpOworfQorCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGFzMTZjc19wY21jaWFfY3MoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzMTZjcyk7Cit9CisKK3ZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJZXhpdF9kYXMxNmNzX3BjbWNpYV9jcygpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczE2Y3MpOworfQorCisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNmNzKTsKKyNlbmRpZiAvL0NPTkZJR19QQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2M1NTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCkBAIC0wLDAgKzEsMTgzMSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYworCisgICAgRGV2ZWxvcGVkIGJ5IEl2YW4gTWFydGluZXogYW5kIEZyYW5rIE1vcmkgSGVzcywgd2l0aCB2YWx1YWJsZSBoZWxwIGZyb20KKyAgICBEYXZpZCBTY2hsZWVmIGFuZCB0aGUgcmVzdCBvZiB0aGUgQ29tZWRpIGRldmVsb3BlcnMgY29tdW5pdHkuCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBJdmFuIE1hcnRpbmV6IDxpbXJAb2Vyc3RlZC5kdHUuZGs+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny04IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGNiX3BjaWRhcworRGVzY3JpcHRpb246IE1lYXN1cmVtZW50Q29tcHV0aW5nIFBDSS1EQVMgc2VyaWVzIHdpdGggdGhlIEFNQ0MgUzU5MzMgUENJIGNvbnRyb2xsZXIKK0F1dGhvcjogSXZhbiBNYXJ0aW5leiA8aW1yQG9lcnN0ZWQuZHR1LmRrPiwKKyAgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorVXBkYXRlZDogMjAwMy0zLTExCitEZXZpY2VzOiBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBQQ0ktREFTMTYwMi8xNiAoY2JfcGNpZGFzKSwKKyAgUENJLURBUzE2MDIvMTZqciwgUENJLURBUzE2MDIvMTIsIFBDSS1EQVMxMjAwLCBQQ0ktREFTMTIwMGpyLAorICBQQ0ktREFTMTAwMCwgUENJLURBUzEwMDEsIFBDSV9EQVMxMDAyCisKK1N0YXR1czoKKyAgVGhlcmUgYXJlIG1hbnkgcmVwb3J0cyBvZiB0aGUgZHJpdmVyIGJlaW5nIHVzZWQgd2l0aCBtb3N0IG9mIHRoZQorICBzdXBwb3J0ZWQgY2FyZHMuIERlc3BpdGUgbm8gZGV0YWlsZWQgbG9nIGlzIG1haW50YWluZWQsIGl0IGNhbgorICBiZSBzYWlkIHRoYXQgdGhlIGRyaXZlciBpcyBxdWl0ZSB0ZXN0ZWQgYW5kIHN0YWJsZS4KKworICBUaGUgYm9hcmRzIG1heSBiZSBhdXRvY2FsaWJyYXRlZCB1c2luZyB0aGUgY29tZWRpX2NhbGlicmF0ZQorICB1dGlsaXR5LgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKworRm9yIGNvbW1hbmRzLCB0aGUgc2Nhbm5lZCBjaGFubmVscyBtdXN0IGJlIGNvbnNlY3V0aXZlCisoaS5lLiA0LTUtNi03LCAyLTMtNCwuLi4pLCBhbmQgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZQorcmFuZ2UgYW5kIGFyZWYuCisqLworLyoKKworVE9ETzoKKworYW5hbG9nIHRyaWdnZXJpbmcgb24gMTYwMiBzZXJpZXMKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJhbWNjX3M1OTMzLmgiCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisjdW5kZWYgQ0JfUENJREFTX0RFQlVHCQkvLyBkaXNhYmxlIGRlYnVnZ2luZyBjb2RlCisvLyNkZWZpbmUgQ0JfUENJREFTX0RFQlVHICAgICAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorCisvLyBQQ0kgdmVuZG9yIG51bWJlciBvZiBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NCCTB4MTMwNworI2RlZmluZSBUSU1FUl9CQVNFIDEwMAkJLy8gMTBNSHogbWFzdGVyIGNsb2NrCisjZGVmaW5lIEFJX0JVRkZFUl9TSVpFIDEwMjQJLy8gbWF4aW11bSBmaWZvIHNpemUgb2YgYW55IHN1cHBvcnRlZCBib2FyZAorI2RlZmluZSBBT19CVUZGRVJfU0laRSAxMDI0CS8vIG1heGltdW0gZmlmbyBzaXplIG9mIGFueSBzdXBwb3J0ZWQgYm9hcmQKKyNkZWZpbmUgTlVNX0NIQU5ORUxTXzg4MDAgOAorI2RlZmluZSBOVU1fQ0hBTk5FTFNfNzM3NiAxCisjZGVmaW5lIE5VTV9DSEFOTkVMU184NDAyIDIKKyNkZWZpbmUgTlVNX0NIQU5ORUxTX0RBQzA4IDEKKworLyogUENJLURBUyBiYXNlIGFkZHJlc3NlcyAqLworCisvLyBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zCisjZGVmaW5lIFM1OTMzX0JBRFJJTkRFWCAwCisjZGVmaW5lIENPTlRfU1RBVF9CQURSSU5ERVggMQorI2RlZmluZSBBRENfRklGT19CQURSSU5ERVggMgorI2RlZmluZSBQQUNFUl9CQURSSU5ERVggMworI2RlZmluZSBBT19CQURSSU5ERVggNAorLy8gc2l6ZXMgb2YgaW8gcmVnaW9ucworI2RlZmluZSBDT05UX1NUQVRfU0laRSAxMAorI2RlZmluZSBBRENfRklGT19TSVpFIDQKKyNkZWZpbmUgUEFDRVJfU0laRSAxMgorI2RlZmluZSBBT19TSVpFIDQKKworLyogQ29udHJvbC9TdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIElOVF9BRENGSUZPCTAJLy8gSU5URVJSVVBUIC8gQURDIEZJRk8gcmVnaXN0ZXIKKyNkZWZpbmUgICBJTlRfRU9TIDB4MQkJLy8gaW50ZXJydXB0IGVuZCBvZiBzY2FuCisjZGVmaW5lICAgSU5UX0ZIRiAweDIJCS8vIGludGVycnVwdCBmaWZvIGhhbGYgZnVsbAorI2RlZmluZSAgIElOVF9GTkUgMHgzCQkvLyBpbnRlcnJ1cHQgZmlmbyBub3QgZW1wdHkKKyNkZWZpbmUgICBJTlRfTUFTSyAweDMJCS8vIG1hc2sgb2YgaW50ZXJydXB0IHNlbGVjdCBiaXRzCisjZGVmaW5lICAgSU5URSAweDQJCS8vIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgICBEQUhGSUUgMHg4CQkvLyBkYWMgaGFsZiBmdWxsIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgICBFT0FJRQkweDEwCQkvLyBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICAgREFIRkkJMHgyMAkJLy8gZGFjIGhhbGYgZnVsbCByZWFkIHN0YXR1cyAvIHdyaXRlIGludGVycnVwdCBjbGVhcgorI2RlZmluZSAgIEVPQUkgMHg0MAkJLy8gcmVhZCBlbmQgb2YgYWNxLiBpbnRlcnJ1cHQgc3RhdHVzIC8gd3JpdGUgY2xlYXIKKyNkZWZpbmUgICBJTlQgMHg4MAkJLy8gcmVhZCBpbnRlcnJ1cHQgc3RhdHVzIC8gd3JpdGUgY2xlYXIKKyNkZWZpbmUgICBFT0JJIDB4MjAwCQkvLyByZWFkIGVuZCBvZiBidXJzdCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICAgQURIRkkgMHg0MDAJCS8vIHJlYWQgaGFsZi1mdWxsIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgICBBRE5FSSAweDgwMAkJLy8gcmVhZCBmaWZvIG5vdCBlbXB0eSBpbnRlcnJ1cHQgbGF0Y2ggc3RhdHVzCisjZGVmaW5lICAgQURORSAweDEwMDAJCS8vIHJlYWQsIGZpZm8gbm90IGVtcHR5IChyZWFsdGltZSwgbm90IGxhdGNoZWQpIHN0YXR1cworI2RlZmluZSAgIERBRU1JRQkweDEwMDAJLy8gd3JpdGUsIGRhYyBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICAgTEFERlVMIDB4MjAwMAkJLy8gcmVhZCBmaWZvIG92ZXJmbG93IC8gd3JpdGUgY2xlYXIKKyNkZWZpbmUgICBEQUVNSSAweDQwMDAJCS8vIGRhYyBmaWZvIGVtcHR5IGludGVycnVwdCBzdGF0dXMgLyB3cml0ZSBjbGVhcgorCisjZGVmaW5lIEFEQ01VWF9DT05UCTIJLy8gQURDIENIQU5ORUwgTVVYIEFORCBDT05UUk9MIHJlZ2lzdGVyCisjZGVmaW5lICAgQkVHSU5fU0NBTih4KQkoKHgpICYgMHhmKQorI2RlZmluZSAgIEVORF9TQ0FOKHgpCSgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSAgIEdBSU5fQklUUyh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgICBVTklQCTB4ODAwCQkvLyBBbmFsb2cgZnJvbnQtZW5kIHVuaXBvbGFyIGZvciByYW5nZQorI2RlZmluZSAgIFNFCTB4NDAwCQkvLyBJbnB1dHMgaW4gc2luZ2xlLWVuZGVkIG1vZGUKKyNkZWZpbmUgICBQQUNFUl9NQVNLCTB4MzAwMAkvLyBwYWNlciBzb3VyY2UgYml0cworI2RlZmluZSAgIFBBQ0VSX0lOVCAweDEwMDAJLy8gaW50ZXJuYWwgcGFjZXIKKyNkZWZpbmUgICBQQUNFUl9FWFRfRkFMTAkweDIwMDAJLy8gZXh0ZXJuYWwgZmFsbGluZyBlZGdlCisjZGVmaW5lICAgUEFDRVJfRVhUX1JJU0UJMHgzMDAwCS8vIGV4dGVybmFsIHJpc2luZyBlZGdlCisjZGVmaW5lICAgRU9DCTB4NDAwMAkJLy8gYWRjIG5vdCBidXN5CisKKyNkZWZpbmUgVFJJR19DT05UU1RBVCA0CQkvLyBUUklHR0VSIENPTlRST0wvU1RBVFVTIHJlZ2lzdGVyCisjZGVmaW5lICAgU1dfVFJJR0dFUiAweDEJLy8gc29mdHdhcmUgc3RhcnQgdHJpZ2dlcgorI2RlZmluZSAgIEVYVF9UUklHR0VSIDB4MgkvLyBleHRlcm5hbCBzdGFydCB0cmlnZ2VyCisjZGVmaW5lICAgQU5BTE9HX1RSSUdHRVIgMHgzCS8vIGV4dGVybmFsIGFuYWxvZyB0cmlnZ2VyCisjZGVmaW5lICAgVFJJR0dFUl9NQVNLCTB4MwkvLyBtYXNrIG9mIGJpdHMgdGhhdCBkZXRlcm1pbmUgc3RhcnQgdHJpZ2dlcgorI2RlZmluZSAgIFRHRU4JMHgxMAkJLy8gZW5hYmxlIGV4dGVybmFsIHN0YXJ0IHRyaWdnZXIKKyNkZWZpbmUgICBCVVJTVEUgMHgyMAkJLy8gYnVyc3QgbW9kZSBlbmFibGUKKyNkZWZpbmUgICBYVFJDTAkweDgwCQkvLyBjbGVhciBleHRlcm5hbCB0cmlnZ2VyCisKKyNkZWZpbmUgQ0FMSUJSQVRJT05fUkVHCTYJLy8gQ0FMSUJSQVRJT04gcmVnaXN0ZXIKKyNkZWZpbmUgICBTRUxFQ1RfODgwMF9CSVQJMHgxMDAJLy8gc2VsZWN0IDg4MDAgY2FsZGFjCisjZGVmaW5lICAgU0VMRUNUX1RSSU1QT1RfQklUCTB4MjAwCS8vIHNlbGVjdCBhZDczNzYgdHJpbSBwb3QKKyNkZWZpbmUgICBTRUxFQ1RfREFDMDhfQklUCTB4NDAwCS8vIHNlbGVjdCBkYWMwOCBjYWxkYWMKKyNkZWZpbmUgICBDQUxfU1JDX0JJVFMoeCkJKCgoeCkgJiAweDcpIDw8IDExKQorI2RlZmluZSAgIENBTF9FTl9CSVQJMHg0MDAwCS8vIHJlYWQgY2FsaWJyYXRpb24gc291cmNlIGluc3RlYWQgb2YgYW5hbG9nIGlucHV0IGNoYW5uZWwgMAorI2RlZmluZSAgIFNFUklBTF9EQVRBX0lOX0JJVAkweDgwMDAJLy8gc2VyaWFsIGRhdGEgc3RyZWFtIGdvaW5nIHRvIDg4MDAgYW5kIDczNzYKKworI2RlZmluZSBEQUNfQ1NSCTB4OAkJLy8gZGFjIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorZW51bSBkYWNfY3NyX2JpdHMgeworCURBQ0VOID0gMHgyLAkJLy8gZGFjIGVuYWJsZQorCURBQ19NT0RFX1VQREFURV9CT1RIID0gMHg4MCwJLy8gdXBkYXRlIGJvdGggZGFjcyB3aGVuIGRhYzAgaXMgd3JpdHRlbgorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IERBQ19SQU5HRSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHJhbmdlKQoreworCXJldHVybiAocmFuZ2UgJiAweDMpIDw8ICg4ICsgMiAqIChjaGFubmVsICYgMHgxKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUNfUkFOR0VfTUFTSyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgzIDw8ICg4ICsgMiAqIChjaGFubmVsICYgMHgxKSk7Cit9OworCisvLyBiaXRzIGZvciAxNjAyIHNlcmllcyBvbmx5CitlbnVtIGRhY19jc3JfYml0c18xNjAyIHsKKwlEQUNfRU1QVFkgPSAweDEsCS8vIGRhYyBmaWZvIGVtcHR5LCByZWFkLCB3cml0ZSBjbGVhcgorCURBQ19TVEFSVCA9IDB4NCwJLy8gc3RhcnQvYXJtIGRhYyBmaWZvIG9wZXJhdGlvbnMKKwlEQUNfUEFDRVJfTUFTSyA9IDB4MTgsCS8vIGJpdHMgdGhhdCBzZXQgZGFjIHBhY2VyIHNvdXJjZQorCURBQ19QQUNFUl9JTlQgPSAweDgsCS8vIGRhYyBpbnRlcm5hbCBwYWNpbmcKKwlEQUNfUEFDRVJfRVhUX0ZBTEwgPSAweDEwLAkvLyBkYWMgZXh0ZXJuYWwgcGFjaW5nLCBmYWxsaW5nIGVkZ2UKKwlEQUNfUEFDRVJfRVhUX1JJU0UgPSAweDE4LAkvLyBkYWMgZXh0ZXJuYWwgcGFjaW5nLCByaXNpbmcgZWRnZQorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IERBQ19DSEFOX0VOKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAxIDw8ICg1ICsgKGNoYW5uZWwgJiAweDEpKTsJLy8gZW5hYmxlIGNoYW5uZWwgMCBvciAxCit9OworCisvKiBhbmFsb2cgaW5wdXQgZmlmbyAqLworI2RlZmluZSBBRENEQVRBCTAJCS8vIEFEQyBEQVRBIHJlZ2lzdGVyCisjZGVmaW5lIEFEQ0ZJRk9DTFIJMgkvLyBBREMgRklGTyBDTEVBUgorCisvLyBwYWNlciwgY291bnRlciwgZGlvIHJlZ2lzdGVycworI2RlZmluZSBBREM4MjU0IDAKKyNkZWZpbmUgRElPXzgyNTUgNAorI2RlZmluZSBEQUM4MjU0IDgKKworLy8gYW5hbG9nIG91dHB1dCByZWdpc3RlcnMgZm9yIDEwMHgsIDEyMDAgc2VyaWVzCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUNfREFUQV9SRUcodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDIgKiAoY2hhbm5lbCAmIDB4MSk7Cit9CisKKy8qIGFuYWxvZyBvdXRwdXQgcmVnaXN0ZXJzIGZvciAxNjAyIHNlcmllcyovCisjZGVmaW5lIERBQ0RBVEEJMAkJLy8gREFDIERBVEEgcmVnaXN0ZXIKKyNkZWZpbmUgREFDRklGT0NMUgkyCS8vIERBQyBGSUZPIENMRUFSCisKKy8vIGJpdCBpbiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiByYW5nZSBpbmRleCB0aGF0IGluZGljYXRlcyB1bmlwb2xhciBpbnB1dCByYW5nZQorI2RlZmluZSBJU19VTklQT0xBUiAweDQKKy8vIGFuYWxvZyBpbnB1dCByYW5nZXMgZm9yIG1vc3QgYm9hcmRzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgY2JfcGNpZGFzX3JhbmdlcyA9IHsKKwk4LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCQl9Cit9OworCisvLyBwY2ktZGFzMTAwMSBpbnB1dCByYW5nZXMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBjYl9wY2lkYXNfYWx0X3JhbmdlcyA9IHsKKwk4LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKQorCQl9Cit9OworCisvLyBhbmFsb2cgb3V0cHV0IHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGNiX3BjaWRhc19hb19yYW5nZXMgPSB7CisJNCwKKwl7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJfQorfTsKKworZW51bSB0cmltcG90X21vZGVsIHsKKwlBRDczNzYsCisJQUQ4NDAyLAorfTsKKworc3RydWN0IGNiX3BjaWRhc19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CisJaW50IGFpX3NlX2NoYW5zOwkvLyBJbnB1dHMgaW4gc2luZ2xlLWVuZGVkIG1vZGUKKwlpbnQgYWlfZGlmZl9jaGFuczsJLy8gSW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlCisJaW50IGFpX2JpdHM7CQkvLyBhbmFsb2cgaW5wdXQgcmVzb2x1dGlvbgorCWludCBhaV9zcGVlZDsJCS8vIGZhc3Rlc3QgY29udmVyc2lvbiBwZXJpb2QgaW4gbnMKKwlpbnQgYW9fbmNoYW47CQkvLyBudW1iZXIgb2YgYW5hbG9nIG91dCBjaGFubmVscworCWludCBoYXNfYW9fZmlmbzsJLy8gYW5hbG9nIG91dHB1dCBoYXMgZmlmbworCWludCBhb19zY2FuX3NwZWVkOwkvLyBhbmFsb2cgb3V0cHV0IHNwZWVkIGZvciAxNjAyIHNlcmllcyAoZm9yIGEgc2Nhbiwgbm90IGNvbnZlcnNpb24pCisJaW50IGZpZm9fc2l6ZTsJCS8vIG51bWJlciBvZiBzYW1wbGVzIGZpZm8gY2FuIGhvbGQKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VzOworCWVudW0gdHJpbXBvdF9tb2RlbCB0cmltcG90OworCXVuc2lnbmVkIGhhc19kYWMwODoxOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYl9wY2lkYXNfYm9hcmQgY2JfcGNpZGFzX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczE2MDIvMTYiLAorCSAgICAgIGRldmljZV9pZDoweDEsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBoYXNfYW9fZmlmbzoxLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgZmlmb19zaXplOjUxMiwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFEODQwMiwKKwkgICAgICBoYXNfZGFjMDg6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMjAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHhGLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDozMjAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgaGFzX2FvX2ZpZm86MCwKKwkgICAgICBmaWZvX3NpemU6MTAyNCwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxNjAyLzEyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxMCwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6MzIwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGhhc19hb19maWZvOjEsCisJICAgICAgYW9fc2Nhbl9zcGVlZDo0MDAwLAorCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRhc19yYW5nZXMsCisJICAgICAgdHJpbXBvdDoJQUQ3Mzc2LAorCSAgICAgIGhhc19kYWMwODowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczEyMDAvanIiLAorCSAgICAgIGRldmljZV9pZDoweDE5LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDozMjAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgaGFzX2FvX2ZpZm86MCwKKwkgICAgICBmaWZvX3NpemU6MTAyNCwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxNjAyLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxQywKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjUxMiwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFEODQwMiwKKwkgICAgICBoYXNfZGFjMDg6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMDAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0QywKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6NDAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTAwMSIsCisJICAgICAgZGV2aWNlX2lkOjB4MWEsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjY4MDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBoYXNfYW9fZmlmbzowLAorCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRhc19hbHRfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMDAyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxYiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6NjgwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCit9OworCisvLyBOdW1iZXIgb2YgYm9hcmRzIGluIGNiX3BjaWRhc19ib2FyZHMKKyNkZWZpbmUgTl9CT0FSRFMJKHNpemVvZihjYl9wY2lkYXNfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgY2JfcGNpZGFzX2JvYXJkKSkKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNiX3BjaWRhc19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMWMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMWEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMWIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNiX3BjaWRhc19wY2lfdGFibGUpOworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBjYl9wY2lkYXNfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IGNiX3BjaWRhc19wcml2YXRlIHsKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCS8vIGJhc2UgYWRkcmVzc2VzCisJdW5zaWduZWQgbG9uZyBzNTkzM19jb25maWc7CisJdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGFkY19maWZvOworCXVuc2lnbmVkIGxvbmcgcGFjZXJfY291bnRlcl9kaW87CisJdW5zaWduZWQgbG9uZyBhb19yZWdpc3RlcnM7CisJLy8gZGl2aXNvcnMgb2YgbWFzdGVyIGNsb2NrIGZvciBhbmFsb2cgaW5wdXQgcGFjaW5nCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOworCXVuc2lnbmVkIGludCBkaXZpc29yMjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8vIG51bWJlciBvZiBhbmFsb2cgaW5wdXQgc2FtcGxlcyByZW1haW5pbmcKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYWRjX2ZpZm9fYml0czsJLy8gYml0cyB0byB3cml0ZSB0byBpbnRlcnVwdC9hZGNmaWZvIHJlZ2lzdGVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHM1OTMzX2ludGNzcl9iaXRzOwkvLyBiaXRzIHRvIHdyaXRlIHRvIGFtY2MgczU5MzMgaW50ZXJydXB0IGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFvX2NvbnRyb2xfYml0czsJLy8gYml0cyB0byB3cml0ZSB0byBhbyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKwlzaG9ydCBhaV9idWZmZXJbQUlfQlVGRkVSX1NJWkVdOworCXNob3J0IGFvX2J1ZmZlcltBT19CVUZGRVJfU0laRV07CisJLy8gZGl2aXNvcnMgb2YgbWFzdGVyIGNsb2NrIGZvciBhbmFsb2cgb3V0cHV0IHBhY2luZworCXVuc2lnbmVkIGludCBhb19kaXZpc29yMTsKKwl1bnNpZ25lZCBpbnQgYW9fZGl2aXNvcjI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFvX2NvdW50OwkvLyBudW1iZXIgb2YgYW5hbG9nIG91dHB1dCBzYW1wbGVzIHJlbWFpbmluZworCWludCBhb192YWx1ZVsyXTsJLy8gcmVtZW1iZXIgd2hhdCB0aGUgYW5hbG9nIG91dHB1dHMgYXJlIHNldCB0bywgdG8gYWxsb3cgcmVhZGJhY2sKKwl1bnNpZ25lZCBpbnQgY2FsZGFjX3ZhbHVlW05VTV9DSEFOTkVMU184ODAwXTsJLy8gZm9yIHJlYWRiYWNrIG9mIGNhbGRhYworCXVuc2lnbmVkIGludCB0cmltcG90X3ZhbHVlW05VTV9DSEFOTkVMU184NDAyXTsJLy8gZm9yIHJlYWRiYWNrIG9mIHRyaW1wb3QKKwl1bnNpZ25lZCBpbnQgZGFjMDhfdmFsdWU7CisJdW5zaWduZWQgaW50IGNhbGlicmF0aW9uX3NvdXJjZTsKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY2JfcGNpZGFzX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjYl9wY2lkYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfY2JfcGNpZGFzID0geworICAgICAgZHJpdmVyX25hbWU6ImNiX3BjaWRhcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6Y2JfcGNpZGFzX2F0dGFjaCwKKyAgICAgIGRldGFjaDpjYl9wY2lkYXNfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhaV9jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fbm9maWZvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19maWZvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19yZWFkYmFja19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXYsCisJCQkJdW5zaWduZWQgaW50IHRyaWdfbnVtKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgY2JfcGNpZGFzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9hb19pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpOworc3RhdGljIGludCBjYl9wY2lkYXNfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqbnMsCisJaW50IHJvdW5kX2ZsYWdzKTsKK3N0YXRpYyBpbnQgZWVwcm9tX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYWxkYWNfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGRhY193cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHRyaW1wb3RfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc190cmltcG90X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCB0cmltcG90X3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFjMDhfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhYzA4X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCBkYWMwOF93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGRhY184ODAwX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKKwl1aW50OF90IHZhbHVlKTsKK3N0YXRpYyBpbnQgdHJpbXBvdF83Mzc2X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IHZhbHVlKTsKK3N0YXRpYyBpbnQgdHJpbXBvdF84NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1aW50OF90IHZhbHVlKTsKK3N0YXRpYyBpbnQgbnZyYW1fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJdWludDhfdCAqIGRhdGEpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxfZW5hYmxlX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIENBTF9FTl9CSVQgfCBDQUxfU1JDX0JJVFMoZGV2cHJpdi0+Y2FsaWJyYXRpb25fc291cmNlKTsKK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgaW5kZXg7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkYXM6ICIsIGRldi0+bWlub3IpOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgY2JfcGNpZGFzX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4KKyAqLworCXByaW50aygiXG4iKTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DQikKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5fQk9BUkRTOyBpbmRleCsrKSB7CisJCQlpZiAoY2JfcGNpZGFzX2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGNiX3BjaWRhc19ib2FyZHMgKyBpbmRleDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcmludGsoIk5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyBjYXJkIGZvdW5kIG9uICIKKwkJInJlcXVlc3RlZCBwb3NpdGlvblxuIik7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisJcHJpbnRrKCJGb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIGNiX3BjaWRhc19ib2FyZHNbaW5kZXhdLm5hbWUsCisJCXBjaWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKTsKKworCS8qCisJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHBvcnRzLgorCSAqLworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJjYl9wY2lkYXMiKSkgeworCQlwcmludGsoIiBGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwkvKgorCSAqIEluaXRpYWxpemUgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgYW5kIGRldnByaXYtPmFkY19maWZvIHRvIHBvaW50IHRvCisJICogdGhlaXIgYmFzZSBhZGRyZXNzLgorCSAqLworCWRldnByaXYtPnM1OTMzX2NvbmZpZyA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCBTNTkzM19CQURSSU5ERVgpOworCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIENPTlRfU1RBVF9CQURSSU5ERVgpOworCWRldnByaXYtPmFkY19maWZvID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIEFEQ19GSUZPX0JBRFJJTkRFWCk7CisJZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgUEFDRVJfQkFEUklOREVYKTsKKwlpZiAodGhpc2JvYXJkLT5hb19uY2hhbikgeworCQlkZXZwcml2LT5hb19yZWdpc3RlcnMgPQorCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIEFPX0JBRFJJTkRFWCk7CisJfQorCS8vIGRpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMgb24gYW1jYyBzNTkzMworCW91dGwoSU5UQ1NSX0lOQk9YX0lOVFJfU1RBVFVTLAorCQlkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTlRDU1IpOworCisJLy8gZ2V0IGlycQorCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBjYl9wY2lkYXNfaW50ZXJydXB0LAorCQkJSVJRRl9TSEFSRUQsICJjYl9wY2lkYXMiLCBkZXYpKSB7CisJCXByaW50aygiIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJWRcbiIsIGRldnByaXYtPnBjaV9kZXYtPmlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmlycSA9IGRldnByaXYtPnBjaV9kZXYtPmlycTsKKworCS8vSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDcpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRiB8IFNERl9DTURfUkVBRDsKKwkvKiBXQVJOSU5HOiBOdW1iZXIgb2YgaW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlIGlzIGlnbm9yZWQgKi8KKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX3NlX2NoYW5zOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNib2FyZC0+YWlfc2VfY2hhbnM7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc2JvYXJkLT5yYW5nZXM7CisJcy0+aW5zbl9yZWFkID0gY2JfcGNpZGFzX2FpX3JpbnNuOworCXMtPmluc25fY29uZmlnID0gYWlfY29uZmlnX2luc247CisJcy0+ZG9fY21kID0gY2JfcGNpZGFzX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gY2JfcGNpZGFzX2FpX2NtZHRlc3Q7CisJcy0+Y2FuY2VsID0gY2JfcGNpZGFzX2NhbmNlbDsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKHRoaXNib2FyZC0+YW9fbmNoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX25jaGFuOworCQkvLyBhbmFsb2cgb3V0IHJlc29sdXRpb24gaXMgdGhlIHNhbWUgYXMgYW5hbG9nIGlucHV0IHJlc29sdXRpb24sIHNvIHVzZSBhaV9iaXRzCisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmY2JfcGNpZGFzX2FvX3JhbmdlczsKKwkJcy0+aW5zbl9yZWFkID0gY2JfcGNpZGFzX2FvX3JlYWRiYWNrX2luc247CisJCWlmICh0aGlzYm9hcmQtPmhhc19hb19maWZvKSB7CisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9XUklURTsKKwkJCXMtPmluc25fd3JpdGUgPSBjYl9wY2lkYXNfYW9fZmlmb193aW5zbjsKKwkJCXMtPmRvX2NtZHRlc3QgPSBjYl9wY2lkYXNfYW9fY21kdGVzdDsKKwkJCXMtPmRvX2NtZCA9IGNiX3BjaWRhc19hb19jbWQ7CisJCQlzLT5jYW5jZWwgPSBjYl9wY2lkYXNfYW9fY2FuY2VsOworCQl9IGVsc2UgeworCQkJcy0+aW5zbl93cml0ZSA9IGNiX3BjaWRhc19hb19ub2ZpZm9fd2luc247CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIDgyNTUgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBESU9fODI1NSk7CisKKwkvLyBzZXJpYWwgRUVQUk9NLAorCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IDI1NjsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBlZXByb21fcmVhZF9pbnNuOworCisJLy8gODgwMCBjYWxkYWMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IE5VTV9DSEFOTkVMU184ODAwOworCXMtPm1heGRhdGEgPSAweGZmOworCXMtPmluc25fcmVhZCA9IGNhbGRhY19yZWFkX2luc247CisJcy0+aW5zbl93cml0ZSA9IGNhbGRhY193cml0ZV9pbnNuOworCWZvciAoaSA9IDA7IGkgPCBzLT5uX2NoYW47IGkrKykKKwkJY2FsZGFjXzg4MDBfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisKKwkvLyB0cmltIHBvdGVudGlvbWV0ZXIKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCWlmICh0aGlzYm9hcmQtPnRyaW1wb3QgPT0gQUQ3Mzc2KSB7CisJCXMtPm5fY2hhbiA9IE5VTV9DSEFOTkVMU183Mzc2OworCQlzLT5tYXhkYXRhID0gMHg3ZjsKKwl9IGVsc2UgeworCQlzLT5uX2NoYW4gPSBOVU1fQ0hBTk5FTFNfODQwMjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJfQorCXMtPmluc25fcmVhZCA9IHRyaW1wb3RfcmVhZF9pbnNuOworCXMtPmluc25fd3JpdGUgPSB0cmltcG90X3dyaXRlX2luc247CisJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQljYl9wY2lkYXNfdHJpbXBvdF93cml0ZShkZXYsIGksIHMtPm1heGRhdGEgLyAyKTsKKworCS8vIGRhYzA4IGNhbGRhYworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCWlmICh0aGlzYm9hcmQtPmhhc19kYWMwOCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gTlVNX0NIQU5ORUxTX0RBQzA4OworCQlzLT5pbnNuX3JlYWQgPSBkYWMwOF9yZWFkX2luc247CisJCXMtPmluc25fd3JpdGUgPSBkYWMwOF93cml0ZV9pbnNuOworCQlzLT5tYXhkYXRhID0gMHhmZjsKKwkJZGFjMDhfd3JpdGUoZGV2LCBzLT5tYXhkYXRhIC8gMik7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyBtYWtlIHN1cmUgbWFpbGJveCA0IGlzIGVtcHR5CisJaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lNQjQpOworCS8qIFNldCBiaXRzIHRvIGVuYWJsZSBpbmNvbWluZyBtYWlsYm94IGludGVycnVwdHMgb24gYW1jYyBzNTkzMy4gKi8KKwlkZXZwcml2LT5zNTkzM19pbnRjc3JfYml0cyA9CisJCUlOVENTUl9JTkJPWF9CWVRFKDMpIHwgSU5UQ1NSX0lOQk9YX1NFTEVDVCgzKSB8CisJCUlOVENTUl9JTkJPWF9GVUxMX0lOVDsKKwkvLyBjbGVhciBhbmQgZW5hYmxlIGludGVycnVwdCBvbiBhbWNjIHM1OTMzCisJb3V0bChkZXZwcml2LT5zNTkzM19pbnRjc3JfYml0cyB8IElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJZGV2cHJpdi0+czU5MzNfY29uZmlnICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCXJldHVybiAxOworfQorCisvKgorICogY2JfcGNpZGFzX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGFzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPnM1OTMzX2NvbmZpZykgeworCQkJLy8gZGlzYWJsZSBhbmQgY2xlYXIgaW50ZXJydXB0cyBvbiBhbWNjIHM1OTMzCisJCQlvdXRsKElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJCQlkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTlRDU1IpOworI2lmZGVmIENCX1BDSURBU19ERUJVRworCQkJcnRfcHJpbnRrKCJkZXRhY2hpbmcsIGluY3NyIGlzIDB4JXhcbiIsCisJCQkJaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArCisJCQkJCUFNQ0NfT1BfUkVHX0lOVENTUikpOworI2VuZGlmCisJCX0KKwl9CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldnByaXYtPnM1OTMzX2NvbmZpZykgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgaTsKKwl1bnNpZ25lZCBpbnQgYml0czsKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwMDsKKwlpbnQgY2hhbm5lbDsKKwkvLyBlbmFibGUgY2FsaWJyYXRpb24gaW5wdXQgaWYgYXBwcm9wcmlhdGUKKwlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKSB7CisJCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldiksCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJCWNoYW5uZWwgPSAwOworCX0gZWxzZSB7CisJCW91dHcoMCwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCQljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJfQorCS8vIHNldCBtdXggbGltaXRzIGFuZCBnYWluCisJYml0cyA9IEJFR0lOX1NDQU4oY2hhbm5lbCkgfAorCQlFTkRfU0NBTihjaGFubmVsKSB8IEdBSU5fQklUUyhDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpOworCS8vIHNldCB1bmlwb2xhci9iaXBvbGFyCisJaWYgKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIElTX1VOSVBPTEFSKQorCQliaXRzIHw9IFVOSVA7CisJLy8gc2V0IHNpbmdsZWVuZGVkL2RpZmZlcmVudGlhbAorCWlmIChDUl9BUkVGKGluc24tPmNoYW5zcGVjKSAhPSBBUkVGX0RJRkYpCisJCWJpdHMgfD0gU0U7CisJb3V0dyhiaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIEFEQ01VWF9DT05UKTsKKworCS8qIGNsZWFyIGZpZm8gKi8KKwlvdXR3KDAsIGRldnByaXYtPmFkY19maWZvICsgQURDRklGT0NMUik7CisKKwkvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCW91dHcoMCwgZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENEQVRBKTsKKworCQkvKiB3YWl0IGZvciBjb252ZXJzaW9uIHRvIGVuZCAqLworCQkvKiByZXR1cm4gLUVUSU1FRE9VVCBpZiB0aGVyZSBpcyBhIHRpbWVvdXQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJaWYgKGludyhkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIEFEQ01VWF9DT05UKSAmIEVPQykKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkJLyogcmVhZCBkYXRhICovCisJCWRhdGFbbl0gPSBpbncoZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENEQVRBKTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGFpX2NvbmZpZ19jYWxpYnJhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RhdGljIGNvbnN0IGludCBudW1fY2FsaWJyYXRpb25fc291cmNlcyA9IDg7CisJdW5zaWduZWQgaW50IHNvdXJjZSA9IGRhdGFbMV07CisKKwlpZiAoc291cmNlID49IG51bV9jYWxpYnJhdGlvbl9zb3VyY2VzKSB7CisJCXByaW50aygiaW52YWxpZCBjYWxpYnJhdGlvbiBzb3VyY2U6ICVpXG4iLCBzb3VyY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZwcml2LT5jYWxpYnJhdGlvbl9zb3VyY2UgPSBzb3VyY2U7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhaV9jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlkID0gZGF0YVswXTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIElOU05fQ09ORklHX0FMVF9TT1VSQ0U6CisJCXJldHVybiBhaV9jb25maWdfY2FsaWJyYXRpb25fc291cmNlKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8vIGFuYWxvZyBvdXRwdXQgaW5zbiBmb3IgcGNpZGFzLTEwMDAgYW5kIDEyMDAgc2VyaWVzCitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19ub2ZpZm9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBzZXQgY2hhbm5lbCBhbmQgcmFuZ2UKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzICY9CisJCX5EQUNfTU9ERV9VUERBVEVfQk9USCAmIH5EQUNfUkFOR0VfTUFTSyhjaGFubmVsKTsKKwlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0KKwkJREFDRU4gfCBEQUNfUkFOR0UoY2hhbm5lbCwgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpKTsKKwlvdXR3KGRldnByaXYtPmFvX2NvbnRyb2xfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBEQUNfQ1NSKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gcmVtZW1iZXIgdmFsdWUgZm9yIHJlYWRiYWNrCisJZGV2cHJpdi0+YW9fdmFsdWVbY2hhbm5lbF0gPSBkYXRhWzBdOworCS8vIHNlbmQgZGF0YQorCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDX0RBVEFfUkVHKGNoYW5uZWwpKTsKKworCXJldHVybiAxOworfQorCisvLyBhbmFsb2cgb3V0cHV0IGluc24gZm9yIHBjaWRhcy0xNjAyIHNlcmllcworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fZmlmb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIGNsZWFyIGRhYyBmaWZvCisJb3V0dygwLCBkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNGSUZPQ0xSKTsKKworCS8vIHNldCBjaGFubmVsIGFuZCByYW5nZQorCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgJj0KKwkJfkRBQ19DSEFOX0VOKDApICYgfkRBQ19DSEFOX0VOKDEpICYgfkRBQ19SQU5HRV9NQVNLKGNoYW5uZWwpICYKKwkJfkRBQ19QQUNFUl9NQVNLOworCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PQorCQlEQUNFTiB8IERBQ19SQU5HRShjaGFubmVsLAorCQlDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpIHwgREFDX0NIQU5fRU4oY2hhbm5lbCkgfCBEQUNfU1RBUlQ7CisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjaworCWRldnByaXYtPmFvX3ZhbHVlW2NoYW5uZWxdID0gZGF0YVswXTsKKwkvLyBzZW5kIGRhdGEKKwlvdXR3KGRhdGFbMF0sIGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0RBVEEpOworCisJcmV0dXJuIDE7Cit9CisKKy8vIGFuYWxvZyBvdXRwdXQgcmVhZGJhY2sgaW5zbgorLy8gWFhYIGxvc2VzIHRyYWNrIG9mIGFuYWxvZyBvdXRwdXQgdmFsdWUgYmFjayBhZnRlciBhbiBhbmFsb2cgb3VwdXQgY29tbWFuZCBpcyBleGVjdXRlZAorc3RhdGljIGludCBjYl9wY2lkYXNfYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmFvX3ZhbHVlW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGVlcHJvbV9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVpbnQ4X3QgbnZyYW1fZGF0YTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gbnZyYW1fcmVhZChkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCAmbnZyYW1fZGF0YSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkYXRhWzBdID0gbnZyYW1fZGF0YTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNhbGRhY193cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJcmV0dXJuIGNhbGRhY184ODAwX3dyaXRlKGRldiwgY2hhbm5lbCwgZGF0YVswXSk7Cit9CisKK3N0YXRpYyBpbnQgY2FsZGFjX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmNhbGRhY192YWx1ZVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworLyogMTYwMi8xNiBwcmVnYWluIG9mZnNldCAqLworc3RhdGljIGludCBkYWMwOF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCWlmIChkZXZwcml2LT5kYWMwOF92YWx1ZSA9PSB2YWx1ZSkKKwkJcmV0dXJuIDE7CisKKwlkZXZwcml2LT5kYWMwOF92YWx1ZSA9IHZhbHVlOworCisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSB8ICh2YWx1ZSAmIDB4ZmYpLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpIHwgU0VMRUNUX0RBQzA4X0JJVCB8ICh2YWx1ZSAmIDB4ZmYpLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpIHwgKHZhbHVlICYgMHhmZiksCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KDEpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFjMDhfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIGRhYzA4X3dyaXRlKGRldiwgZGF0YVswXSk7Cit9CisKK3N0YXRpYyBpbnQgZGFjMDhfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+ZGFjMDhfdmFsdWU7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfdHJpbXBvdF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCWlmIChkZXZwcml2LT50cmltcG90X3ZhbHVlW2NoYW5uZWxdID09IHZhbHVlKQorCQlyZXR1cm4gMTsKKworCWRldnByaXYtPnRyaW1wb3RfdmFsdWVbY2hhbm5lbF0gPSB2YWx1ZTsKKwlzd2l0Y2ggKHRoaXNib2FyZC0+dHJpbXBvdCkgeworCWNhc2UgQUQ3Mzc2OgorCQl0cmltcG90XzczNzZfd3JpdGUoZGV2LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQUQ4NDAyOgorCQl0cmltcG90Xzg0MDJfd3JpdGUoZGV2LCBjaGFubmVsLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJkcml2ZXIgYnVnPyIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyaW1wb3Rfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXJldHVybiBjYl9wY2lkYXNfdHJpbXBvdF93cml0ZShkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworfQorCitzdGF0aWMgaW50IHRyaW1wb3RfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGF0YVswXSA9IGRldnByaXYtPnRyaW1wb3RfdmFsdWVbY2hhbm5lbF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IGksIGdhaW4sIHN0YXJ0X2NoYW47CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJLy8gbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGVhY2ggb3RoZXIKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVyAmJiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKKwkJKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQKKwkJCXx8IGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJdGhpc2JvYXJkLT5haV9zcGVlZCAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCSYoY21kLT5zY2FuX2JlZ2luX2FyZyksIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCSYoY21kLT5jb252ZXJ0X2FyZyksIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlzdGFydF9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJKHN0YXJ0X2NoYW4gKyBpKSAlIHMtPm5fY2hhbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJCWVycisrOworCQkJfQorCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGdhaW4pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJCWVycisrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGJpdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIG1ha2Ugc3VyZSBDQUxfRU5fQklUIGlzIGRpc2FibGVkCisJb3V0dygwLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJLy8gaW5pdGlhbGl6ZSBiZWZvcmUgc2V0dGluZ3MgcGFjZXIgc291cmNlIGFuZCBjb3VudCB2YWx1ZXMKKwlvdXR3KDAsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgVFJJR19DT05UU1RBVCk7CisJLy8gY2xlYXIgZmlmbworCW91dHcoMCwgZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENGSUZPQ0xSKTsKKworCS8vIHNldCBtdXggbGltaXRzLCBnYWluIGFuZCBwYWNlciBzb3VyY2UKKwliaXRzID0gQkVHSU5fU0NBTihDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pKSB8CisJCUVORF9TQ0FOKENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKSkgfAorCQlHQUlOX0JJVFMoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkpOworCS8vIHNldCB1bmlwb2xhci9iaXBvbGFyCisJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pICYgSVNfVU5JUE9MQVIpCisJCWJpdHMgfD0gVU5JUDsKKwkvLyBzZXQgc2luZ2xlZW5kZWQvZGlmZmVyZW50aWFsCisJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgIT0gQVJFRl9ESUZGKQorCQliaXRzIHw9IFNFOworCS8vIHNldCBwYWNlciBzb3VyY2UKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCB8fCBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKQorCQliaXRzIHw9IFBBQ0VSX0VYVF9SSVNFOworCWVsc2UKKwkJYml0cyB8PSBQQUNFUl9JTlQ7CisJb3V0dyhiaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIEFEQ01VWF9DT05UKTsKKworI2lmZGVmIENCX1BDSURBU19ERUJVRworCXJ0X3ByaW50aygiY29tZWRpOiBzZW50IDB4JXggdG8gYWRjbXV4IGNvbnRyb2xcbiIsIGJpdHMpOworI2VuZGlmCisKKwkvLyBsb2FkIGNvdW50ZXJzCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKKwkJY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoZGV2LCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoZGV2LCAmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLy8gc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+Y291bnQgPSBjbWQtPmNoYW5saXN0X2xlbiAqIGNtZC0+c3RvcF9hcmc7CisJfQorCS8vIGVuYWJsZSBpbnRlcnJ1cHRzCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBJTlRFOworCWRldnByaXYtPmFkY19maWZvX2JpdHMgJj0gfklOVF9NQVNLOworCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDEpCisJCQlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IElOVF9FT1M7CS8vIGludGVycnVwdCBlbmQgb2YgYnVyc3QKKwkJZWxzZQorCQkJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBJTlRfRk5FOwkvLyBpbnRlcnJ1cHQgZmlmbyBub3QgZW1wdHkKKwl9IGVsc2UgeworCQlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IElOVF9GSEY7CS8vaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsCisJfQorI2lmZGVmIENCX1BDSURBU19ERUJVRworCXJ0X3ByaW50aygiY29tZWRpOiBhZGNfZmlmb19iaXRzIGFyZSAweCV4XG4iLCBkZXZwcml2LT5hZGNfZmlmb19iaXRzKTsKKyNlbmRpZgorCS8vIGVuYWJsZSAoYW5kIGNsZWFyKSBpbnRlcnJ1cHRzCisJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgRU9BSSB8IElOVCB8IExBREZVTCwKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHNldCBzdGFydCB0cmlnZ2VyIGFuZCBidXJzdCBtb2RlCisJYml0cyA9IDA7CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQliaXRzIHw9IFNXX1RSSUdHRVI7CisJZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWJpdHMgfD0gRVhUX1RSSUdHRVIgfCBUR0VOIHwgWFRSQ0w7CisJZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAxKQorCQliaXRzIHw9IEJVUlNURTsKKwlvdXR3KGJpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgVFJJR19DT05UU1RBVCk7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJcnRfcHJpbnRrKCJjb21lZGk6IHNlbnQgMHgleCB0byB0cmlnIGNvbnRyb2xcbiIsIGJpdHMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzYm9hcmQtPmFvX3NjYW5fc3BlZWQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzYm9hcmQtPmFvX3NjYW5fc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5hb19kaXZpc29yMSksICYoZGV2cHJpdi0+YW9fZGl2aXNvcjIpLAorCQkJJihjbWQtPnNjYW5fYmVnaW5fYXJnKSwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMKKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgIT0gMCB8fAorCQkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzFdKSAhPSAxKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJjaGFubmVscyBtdXN0IGJlIG9yZGVyZWQgY2hhbm5lbCAwLCBjaGFubmVsIDEgaW4gY2hhbmxpc3RcbiIpOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc2V0IGNoYW5uZWwgbGltaXRzLCBnYWluCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJLy8gZW5hYmxlIGNoYW5uZWwKKwkJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzIHw9CisJCQlEQUNfQ0hBTl9FTihDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pKTsKKwkJLy8gc2V0IHJhbmdlCisJCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PSBEQUNfUkFOR0UoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSwKKwkJCUNSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pKTsKKwl9CisKKwkvLyBkaXNhYmxlIGFuYWxvZyBvdXQgYmVmb3JlIHNldHRpbmdzIHBhY2VyIHNvdXJjZSBhbmQgY291bnQgdmFsdWVzCisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIGNsZWFyIGZpZm8KKwlvdXR3KDAsIGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0ZJRk9DTFIpOworCisJLy8gbG9hZCBjb3VudGVycworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkmKGRldnByaXYtPmFvX2Rpdmlzb3IxKSwgJihkZXZwcml2LT5hb19kaXZpc29yMiksCisJCQkmKGNtZC0+c2Nhbl9iZWdpbl9hcmcpLCBjbWQtPmZsYWdzKTsKKworCQkvKiBXcml0ZSB0aGUgdmFsdWVzIG9mIGN0cjEgYW5kIGN0cjIgaW50byBjb3VudGVycyAxIGFuZCAyICovCisJCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBEQUM4MjU0LCAwLCAxLAorCQkJZGV2cHJpdi0+YW9fZGl2aXNvcjEsIDIpOworCQlpODI1NF9sb2FkKGRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvICsgREFDODI1NCwgMCwgMiwKKwkJCWRldnByaXYtPmFvX2Rpdmlzb3IyLCAyKTsKKwl9CisJLy8gc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YW9fY291bnQgPSBjbWQtPmNoYW5saXN0X2xlbiAqIGNtZC0+c3RvcF9hcmc7CisJfQorCS8vIHNldCBwYWNlciBzb3VyY2UKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PSBEQUNfUEFDRVJfSU5UOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0gREFDX1BBQ0VSX0VYVF9SSVNFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3Igc2V0dGluZyBkYWMgcGFjZXIgc291cmNlIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlhc3luYy0+aW50dHJpZyA9IGNiX3BjaWRhc19hb19pbnR0cmlnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJdW5zaWduZWQgaW50IG51bV9ieXRlcywgbnVtX3BvaW50cyA9IHRoaXNib2FyZC0+Zmlmb19zaXplOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHJpZ19udW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvLyBsb2FkIHVwIGZpZm8KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmFvX2NvdW50IDwgbnVtX3BvaW50cykKKwkJbnVtX3BvaW50cyA9IGRldnByaXYtPmFvX2NvdW50OworCisJbnVtX2J5dGVzID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIocywgZGV2cHJpdi0+YW9fYnVmZmVyLAorCQludW1fcG9pbnRzICogc2l6ZW9mKHNob3J0KSk7CisJbnVtX3BvaW50cyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFvX2NvdW50IC09IG51bV9wb2ludHM7CisJfQorCS8vIHdyaXRlIGRhdGEgdG8gYm9hcmQncyBmaWZvCisJb3V0c3coZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDREFUQSwgZGV2cHJpdi0+YW9fYnVmZmVyLCBudW1fYnl0ZXMpOworCisJLy8gZW5hYmxlIGRhYyBoYWxmLWZ1bGwgYW5kIGVtcHR5IGludGVycnVwdHMKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IERBRU1JRSB8IERBSEZJRTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlydF9wcmludGsoImNvbWVkaTogYWRjX2ZpZm9fYml0cyBhcmUgMHgleFxuIiwgZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyk7CisjZW5kaWYKKwkvLyBlbmFibGUgYW5kIGNsZWFyIGludGVycnVwdHMKKwlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBEQUVNSSB8IERBSEZJLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKworCS8vIHN0YXJ0IGRhYworCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PSBEQUNfU1RBUlQgfCBEQUNFTiB8IERBQ19FTVBUWTsKKwlvdXR3KGRldnByaXYtPmFvX2NvbnRyb2xfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBEQUNfQ1NSKTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlydF9wcmludGsoImNvbWVkaTogc2VudCAweCV4IHRvIGRhYyBjb250cm9sXG4iLAorCQlkZXZwcml2LT5hb19jb250cm9sX2JpdHMpOworI2VuZGlmCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2JfcGNpZGFzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJaW50IHN0YXR1cywgczU5MzNfc3RhdHVzOworCWludCBoYWxmX2ZpZm8gPSB0aGlzYm9hcmQtPmZpZm9fc2l6ZSAvIDI7CisJdW5zaWduZWQgaW50IG51bV9zYW1wbGVzLCBpOworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlhc3luYyA9IHMtPmFzeW5jOworCWFzeW5jLT5ldmVudHMgPSAwOworCisJczU5MzNfc3RhdHVzID0gaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJcnRfcHJpbnRrKCJpbnRjc3IgMHgleFxuIiwgczU5MzNfc3RhdHVzKTsKKwlydF9wcmludGsoIm1iZWYgMHgleFxuIiwgaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX01CRUYpKTsKKyNlbmRpZgorCisJaWYgKChJTlRDU1JfSU5UUl9BU1NFUlRFRCAmIHM1OTMzX3N0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJLy8gbWFrZSBzdXJlIG1haWxib3ggNCBpcyBlbXB0eQorCWlubF9wKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lNQjQpOworCS8vIGNsZWFyIGludGVycnVwdCBvbiBhbWNjIHM1OTMzCisJb3V0bChkZXZwcml2LT5zNTkzM19pbnRjc3JfYml0cyB8IElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJZGV2cHJpdi0+czU5MzNfY29uZmlnICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCXN0YXR1cyA9IGludyhkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlpZiAoKHN0YXR1cyAmIChJTlQgfCBFT0FJIHwgTEFERlVMIHwgREFIRkkgfCBEQUVNSSkpID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCX0KKyNlbmRpZgorCisJLy8gY2hlY2sgZm9yIGFuYWxvZyBvdXRwdXQgaW50ZXJydXB0CisJaWYgKHN0YXR1cyAmIChEQUhGSSB8IERBRU1JKSkgeworCQloYW5kbGVfYW9faW50ZXJydXB0KGRldiwgc3RhdHVzKTsKKwl9CisJLy8gY2hlY2sgZm9yIGFuYWxvZyBpbnB1dCBpbnRlcnJ1cHRzCisJLy8gaWYgZmlmbyBoYWxmLWZ1bGwKKwlpZiAoc3RhdHVzICYgQURIRkkpIHsKKwkJLy8gcmVhZCBkYXRhCisJCW51bV9zYW1wbGVzID0gaGFsZl9maWZvOworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCQludW1fc2FtcGxlcyA+IGRldnByaXYtPmNvdW50KSB7CisJCQludW1fc2FtcGxlcyA9IGRldnByaXYtPmNvdW50OworCQl9CisJCWluc3coZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENEQVRBLCBkZXZwcml2LT5haV9idWZmZXIsCisJCQludW1fc2FtcGxlcyk7CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfYnVmZmVyLAorCQkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3NhbXBsZXM7CisJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPT0gMCkgeworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY2JfcGNpZGFzX2NhbmNlbChkZXYsIHMpOworCQl9CisJCS8vIGNsZWFyIGhhbGYtZnVsbCBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IElOVCwKKwkJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQkvLyBlbHNlIGlmIGZpZm8gbm90IGVtcHR5CisJfSBlbHNlIGlmIChzdGF0dXMgJiAoQURORUkgfCBFT0JJKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQkvLyBicmVhayBpZiBmaWZvIGlzIGVtcHR5CisJCQlpZiAoKEFETkUgJiBpbncoZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKworCQkJCQkJSU5UX0FEQ0ZJRk8pKSA9PSAwKQorCQkJCWJyZWFrOworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBpbncoZGV2cHJpdi0+YWRjX2ZpZm8pKTsKKwkJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgLS1kZXZwcml2LT5jb3VudCA9PSAwKSB7CS8qIGVuZCBvZiBhY3F1aXNpdGlvbiAqLworCQkJCWNiX3BjaWRhc19jYW5jZWwoZGV2LCBzKTsKKwkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLy8gY2xlYXIgbm90LWVtcHR5IGludGVycnVwdCBsYXRjaAorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgSU5ULAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBFT0FJKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiYnVnISBlbmNvdW50ZXJlZCBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQ/Iik7CisJCS8vIGNsZWFyIEVPQSBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IEVPQUksCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9CisJLy9jaGVjayBmb3IgZmlmbyBvdmVyZmxvdworCWlmIChzdGF0dXMgJiBMQURGVUwpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImZpZm8gb3ZlcmZsb3ciKTsKKwkJLy8gY2xlYXIgb3ZlcmZsb3cgaW50ZXJydXB0IGxhdGNoCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBMQURGVUwsCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJY2JfcGNpZGFzX2NhbmNlbChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hb19pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaGFsZl9maWZvID0gdGhpc2JvYXJkLT5maWZvX3NpemUgLyAyOworCXVuc2lnbmVkIGludCBudW1fcG9pbnRzOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCWFzeW5jLT5ldmVudHMgPSAwOworCisJaWYgKHN0YXR1cyAmIERBRU1JKSB7CisJCS8vIGNsZWFyIGRhYyBlbXB0eSBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IERBRU1JLAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCWlmIChpbncoZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDX0NTUikgJiBEQUNfRU1QVFkpIHsKKwkJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSB8fAorCQkJCShjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQKKwkJCQkJJiYgZGV2cHJpdi0+YW9fY291bnQpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwgImRhYyBmaWZvIHVuZGVyZmxvdyIpOworCQkJCWNiX3BjaWRhc19hb19jYW5jZWwoZGV2LCBzKTsKKwkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCX0KKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0gZWxzZSBpZiAoc3RhdHVzICYgREFIRkkpIHsKKwkJdW5zaWduZWQgaW50IG51bV9ieXRlczsKKworCQkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB3ZSBhcmUgd3JpdGluZyB0byBmaWZvCisJCW51bV9wb2ludHMgPSBoYWxmX2ZpZm87CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJCWRldnByaXYtPmFvX2NvdW50IDwgbnVtX3BvaW50cykKKwkJCW51bV9wb2ludHMgPSBkZXZwcml2LT5hb19jb3VudDsKKwkJbnVtX2J5dGVzID0KKwkJCWNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIGRldnByaXYtPmFvX2J1ZmZlciwKKwkJCW51bV9wb2ludHMgKiBzaXplb2Yoc2hvcnQpKTsKKwkJbnVtX3BvaW50cyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CisKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkJZGV2cHJpdi0+YW9fY291bnQgLT0gbnVtX3BvaW50czsKKwkJfQorCQkvLyB3cml0ZSBkYXRhIHRvIGJvYXJkJ3MgZmlmbworCQlvdXRzdyhkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNEQVRBLCBkZXZwcml2LT5hb19idWZmZXIsCisJCQludW1fcG9pbnRzKTsKKwkJLy8gY2xlYXIgaGFsZi1mdWxsIGludGVycnVwdCBsYXRjaAorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgREFIRkksCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyogY2FuY2VsIGFuYWxvZyBpbnB1dCBjb21tYW5kICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzCisJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyAmPSB+SU5URSAmIH5FT0FJRTsKKwlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBkaXNhYmxlIHN0YXJ0IHRyaWdnZXIgc291cmNlIGFuZCBidXJzdCBtb2RlCisJb3V0dygwLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIFRSSUdfQ09OVFNUQVQpOworCS8vIHNvZnR3YXJlIHBhY2VyIHNvdXJjZQorCW91dHcoMCwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBBRENNVVhfQ09OVCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FuY2VsIGFuYWxvZyBvdXRwdXQgY29tbWFuZCAqLworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCS8vIGRpc2FibGUgaW50ZXJydXB0cworCWRldnByaXYtPmFkY19maWZvX2JpdHMgJj0gfkRBSEZJRSAmIH5EQUVNSUU7CisJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKworCS8vIGRpc2FibGUgb3V0cHV0CisJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzICY9IH5EQUNFTiAmIH5EQUNfUEFDRVJfTUFTSzsKKwlvdXR3KGRldnByaXYtPmFvX2NvbnRyb2xfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBEQUNfQ1NSKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNiX3BjaWRhc19sb2FkX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKm5zLAorCWludCByb3VuZGluZ19mbGFncykKK3sKKwlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCSYoZGV2cHJpdi0+ZGl2aXNvcjIpLCBucywgcm91bmRpbmdfZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLyogV3JpdGUgdGhlIHZhbHVlcyBvZiBjdHIxIGFuZCBjdHIyIGludG8gY291bnRlcnMgMSBhbmQgMiAqLworCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBBREM4MjU0LCAwLCAxLAorCQlkZXZwcml2LT5kaXZpc29yMSwgMik7CisJaTgyNTRfbG9hZChkZXZwcml2LT5wYWNlcl9jb3VudGVyX2RpbyArIEFEQzgyNTQsIDAsIDIsCisJCWRldnByaXYtPmRpdmlzb3IyLCAyKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfY2FsaWJyYXRpb25fYml0c3RyZWFtKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCByZWdpc3Rlcl9iaXRzLCB1bnNpZ25lZCBpbnQgYml0c3RyZWFtLAorCXVuc2lnbmVkIGludCBiaXRzdHJlYW1fbGVuZ3RoKQoreworCXN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZGVsYXkgPSAxOworCXVuc2lnbmVkIGludCBiaXQ7CisKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJaWYgKGJpdHN0cmVhbSAmIGJpdCkKKwkJCXJlZ2lzdGVyX2JpdHMgfD0gU0VSSUFMX0RBVEFfSU5fQklUOworCQllbHNlCisJCQlyZWdpc3Rlcl9iaXRzICY9IH5TRVJJQUxfREFUQV9JTl9CSVQ7CisJCWNvbWVkaV91ZGVsYXkod3JpdGVfZGVsYXkpOworCQlvdXR3KHJlZ2lzdGVyX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2FsZGFjXzg4MDBfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCXVpbnQ4X3QgdmFsdWUpCit7CisJc3RhdGljIGNvbnN0IGludCBudW1fY2FsZGFjX2NoYW5uZWxzID0gODsKKwlzdGF0aWMgY29uc3QgaW50IGJpdHN0cmVhbV9sZW5ndGggPSAxMTsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtID0gKChhZGRyZXNzICYgMHg3KSA8PCA4KSB8IHZhbHVlOworCXN0YXRpYyBjb25zdCBpbnQgY2FsZGFjXzg4MDBfY29tZWRpX3VkZWxheSA9IDE7CisKKwlpZiAoYWRkcmVzcyA+PSBudW1fY2FsZGFjX2NoYW5uZWxzKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpbGxlZ2FsIGNhbGRhYyBjaGFubmVsIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodmFsdWUgPT0gZGV2cHJpdi0+Y2FsZGFjX3ZhbHVlW2FkZHJlc3NdKQorCQlyZXR1cm4gMTsKKworCWRldnByaXYtPmNhbGRhY192YWx1ZVthZGRyZXNzXSA9IHZhbHVlOworCisJd3JpdGVfY2FsaWJyYXRpb25fYml0c3RyZWFtKGRldiwgY2FsX2VuYWJsZV9iaXRzKGRldiksIGJpdHN0cmVhbSwKKwkJYml0c3RyZWFtX2xlbmd0aCk7CisKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX2NvbWVkaV91ZGVsYXkpOworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldikgfCBTRUxFQ1RfODgwMF9CSVQsCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX2NvbWVkaV91ZGVsYXkpOworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldiksIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyaW1wb3RfNzM3Nl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCB2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IGJpdHN0cmVhbV9sZW5ndGggPSA3OworCXVuc2lnbmVkIGludCBiaXRzdHJlYW0gPSB2YWx1ZSAmIDB4N2Y7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyX2JpdHM7CisJc3RhdGljIGNvbnN0IGludCBhZDczNzZfY29tZWRpX3VkZWxheSA9IDE7CisKKwlyZWdpc3Rlcl9iaXRzID0gY2FsX2VuYWJsZV9iaXRzKGRldikgfCBTRUxFQ1RfVFJJTVBPVF9CSVQ7CisJY29tZWRpX3VkZWxheShhZDczNzZfY29tZWRpX3VkZWxheSk7CisJb3V0dyhyZWdpc3Rlcl9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisKKwl3cml0ZV9jYWxpYnJhdGlvbl9iaXRzdHJlYW0oZGV2LCByZWdpc3Rlcl9iaXRzLCBiaXRzdHJlYW0sCisJCWJpdHN0cmVhbV9sZW5ndGgpOworCisJY29tZWRpX3VkZWxheShhZDczNzZfY29tZWRpX3VkZWxheSk7CisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZvciAxNjAyLzE2IG9ubHkKKyAqIGNoIDAgOiBhZGMgZ2FpbgorICogY2ggMSA6IGFkYyBwb3N0Z2FpbiBvZmZzZXQgKi8KK3N0YXRpYyBpbnQgdHJpbXBvdF84NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1aW50OF90IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgYml0c3RyZWFtX2xlbmd0aCA9IDEwOworCXVuc2lnbmVkIGludCBiaXRzdHJlYW0gPSAoKGNoYW5uZWwgJiAweDMpIDw8IDgpIHwgKHZhbHVlICYgMHhmZik7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyX2JpdHM7CisJc3RhdGljIGNvbnN0IGludCBhZDg0MDJfY29tZWRpX3VkZWxheSA9IDE7CisKKwlyZWdpc3Rlcl9iaXRzID0gY2FsX2VuYWJsZV9iaXRzKGRldikgfCBTRUxFQ1RfVFJJTVBPVF9CSVQ7CisJY29tZWRpX3VkZWxheShhZDg0MDJfY29tZWRpX3VkZWxheSk7CisJb3V0dyhyZWdpc3Rlcl9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisKKwl3cml0ZV9jYWxpYnJhdGlvbl9iaXRzdHJlYW0oZGV2LCByZWdpc3Rlcl9iaXRzLCBiaXRzdHJlYW0sCisJCWJpdHN0cmVhbV9sZW5ndGgpOworCisJY29tZWRpX3VkZWxheShhZDg0MDJfY29tZWRpX3VkZWxheSk7CisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfbnZyYW1fcmVhZHkodW5zaWduZWQgbG9uZyBzNTkzM19iYXNlX2FkZHIpCit7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChpbmIoczU5MzNfYmFzZV9hZGRyICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCkgJiBNQ1NSX05WX0JVU1kpCisJCQk9PSAwKQorCQkJcmV0dXJuIDA7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBudnJhbV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdWludDhfdCAqIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXZwcml2LT5zNTkzM19jb25maWc7CisKKwlpZiAod2FpdF9mb3JfbnZyYW1fcmVhZHkoaW9iYXNlKSA8IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCisJb3V0YihNQ1NSX05WX0VOQUJMRSB8IE1DU1JfTlZfTE9BRF9MT1dfQUREUiwKKwkJaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCk7CisJb3V0YihhZGRyZXNzICYgMHhmZiwgaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkRBVEEpOworCW91dGIoTUNTUl9OVl9FTkFCTEUgfCBNQ1NSX05WX0xPQURfSElHSF9BRERSLAorCQlpb2Jhc2UgKyBBTUNDX09QX1JFR19NQ1NSX05WQ01EKTsKKwlvdXRiKChhZGRyZXNzID4+IDgpICYgMHhmZiwgaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkRBVEEpOworCW91dGIoTUNTUl9OVl9FTkFCTEUgfCBNQ1NSX05WX1JFQUQsIGlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZDTUQpOworCisJaWYgKHdhaXRfZm9yX252cmFtX3JlYWR5KGlvYmFzZSkgPCAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCSpkYXRhID0gaW5iKGlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkYXMsIGNiX3BjaWRhc19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTU4MGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKQEAgLTAsMCArMSw0MjIyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKKyAgICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgUENJLURBUworICAgIDY0eHgsIDYweHgsIGFuZCA0MDIwIGNhcmRzLgorCisgICAgQXV0aG9yOiAgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmFuayBNb3JpIEhlc3MKKworICAgIFRoYW5rcyBhbHNvIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlOgorCisgICAgU3RldmUgUm9zZW5ibHV0aCwgZm9yIHByb3ZpZGluZyB0aGUgc291cmNlIGNvZGUgZm9yCisgICAgaGlzIHBjaS1kYXM2NDAyIGRyaXZlciwgYW5kIHNvdXJjZSBjb2RlIGZvciB3b3JraW5nIFFOWCBwY2ktNjQwMgorICAgIGRyaXZlcnMgYnkgR3JlZyBMYWlyZCBhbmQgTWFyaXVzeiBCb2dhY3ouICBOb25lIG9mIHRoZSBjb2RlIHdhcworICAgIHVzZWQgZGlyZWN0bHkgaGVyZSwgYnV0IGl0IHdhcyB1c2VmdWwgYXMgYW4gYWRkaXRpb25hbCBzb3VyY2Ugb2YKKyAgICBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBwcm9ncmFtIHRoZSBib2FyZHMuCisKKyAgICBKb2huIFNpbXMsIGZvciBtdWNoIHRlc3RpbmcgYW5kIGZlZWRiYWNrIG9uIHBjaWRhcy00MDIwIHN1cHBvcnQuCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorCitEcml2ZXI6IGNiX3BjaWRhczY0CitEZXNjcmlwdGlvbjogTWVhc3VyZW1lbnRDb21wdXRpbmcgUENJLURBUzY0eHgsIDYwWFgsIGFuZCA0MDIwIHNlcmllcyB3aXRoIHRoZSBQTFggOTA4MCBQQ0kgY29udHJvbGxlcgorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiAyMDAyLTEwLTA5CitEZXZpY2VzOiBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBQQ0ktREFTNjQwMi8xNiAoY2JfcGNpZGFzNjQpLAorICBQQ0ktREFTNjQwMi8xMiwgUENJLURBUzY0L00xLzE2LCBQQ0ktREFTNjQvTTIvMTYsCisgIFBDSS1EQVM2NC9NMy8xNiwgUENJLURBUzY0MDIvMTYvSlIsIFBDSS1EQVM2NC9NMS8xNi9KUiwKKyAgUENJLURBUzY0L00yLzE2L0pSLCBQQ0ktREFTNjQvTTMvMTYvSlIsIFBDSS1EQVM2NC9NMS8xNCwKKyAgUENJLURBUzY0L00yLzE0LCBQQ0ktREFTNjQvTTMvMTQsIFBDSS1EQVM2MDEzLCBQQ0ktREFTNjAxNCwKKyAgUENJLURBUzYwMjMsIFBDSS1EQVM2MDI1LCBQQ0ktREFTNjAzMCwKKyAgUENJLURBUzYwMzEsIFBDSS1EQVM2MDMyLCBQQ0ktREFTNjAzMywgUENJLURBUzYwMzQsCisgIFBDSS1EQVM2MDM1LCBQQ0ktREFTNjAzNiwgUENJLURBUzYwNDAsIFBDSS1EQVM2MDUyLAorICBQQ0ktREFTNjA3MCwgUENJLURBUzYwNzEsIFBDSS1EQVM0MDIwLzEyCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisKK1RoZXNlIGJvYXJkcyBtYXkgYmUgYXV0b2NhbGlicmF0ZWQgd2l0aCB0aGUgY29tZWRpX2NhbGlicmF0ZSB1dGlsaXR5LgorCitUbyBzZWxlY3QgdGhlIGJuYyB0cmlnZ2VyIGlucHV0IG9uIHRoZSA0MDIwIChpbnN0ZWFkIG9mIHRoZSBkaW8gaW5wdXQpLAorc3BlY2lmeSBhIG5vbnplcm8gY2hhbm5lbCBpbiB0aGUgY2hhbnNwZWMuICBJZiB5b3Ugd2lzaCB0byB1c2UgYW4gZXh0ZXJuYWwKK21hc3RlciBjbG9jayBvbiB0aGUgNDAyMCwgeW91IG1heSBkbyBzbyBieSBzZXR0aW5nIHRoZSBzY2FuX2JlZ2luX3NyYwordG8gVFJJR19PVEhFUiwgYW5kIHVzaW5nIGFuIElOU05fQ09ORklHX1RJTUVSXzEgY29uZmlndXJhdGlvbiBpbnNuCit0byBjb25maWd1cmUgdGhlIGRpdmlzb3IgdG8gdXNlIGZvciB0aGUgZXh0ZXJuYWwgY2xvY2suCisKK1NvbWUgZGV2aWNlcyBhcmUgbm90IGlkZW50aWZpZWQgYmVjYXVzZSB0aGUgUENJIGRldmljZSBJRHMgYXJlIG5vdCB5ZXQKK2tub3duLiBJZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQsIHBsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydCBhdAoraHR0cHM6Ly9idWdzLmNvbWVkaS5vcmcuCisKKyovCisKKy8qCisKK1RPRE86CisJbWFrZSBpdCByZXR1cm4gZXJyb3IgaWYgdXNlciBhdHRlbXB0cyBhbiBhaSBjb21tYW5kIHRoYXQgdXNlcyB0aGUKKwkJZXh0ZXJuYWwgcXVldWUsIGFuZCBhbiBhbyBjb21tYW5kIHNpbXVsdGFuZW91c2x5CisJdXNlciBjb3VudGVyIHN1YmRldmljZQorCXRoZXJlIGFyZSBhIG51bWJlciBvZiBib2FyZHMgdGhpcyBkcml2ZXIgd2lsbCBzdXBwb3J0IHdoZW4gdGhleSBhcmUKKwkJZnVsbHkgcmVsZWFzZWQsIGJ1dCBkb2VzIG5vdCB5ZXQgc2luY2UgdGhlIHBjaSBkZXZpY2UgaWQgbnVtYmVycworCQlhcmUgbm90IHlldCBhdmFpbGFibGUuCisJc3VwcG9ydCBwcmVzY2FsZWQgMTAwa2h6IGNsb2NrIGZvciBzbG93IHBhY2luZyAobm90IGF2YWlsYWJsZSBvbiA2MDAwIHNlcmllcz8pCisJbWFrZSBhbyBmaWZvIHNpemUgYWRqdXN0YWJsZSBsaWtlIGFpIGZpZm8KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiODI1NS5oIgorI2luY2x1ZGUgInBseDkwODAuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI3VuZGVmIFBDSURBUzY0X0RFQlVHCQkvLyBkaXNhYmxlIGRlYnVnZ2luZyBjb2RlCisvLyNkZWZpbmUgUENJREFTNjRfREVCVUcgICAgICAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorCisjaWZkZWYgUENJREFTNjRfREVCVUcKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKSAgcnRfcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MgKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgVElNRVJfQkFTRSAyNQkJLy8gNDBNSHogbWFzdGVyIGNsb2NrCisjZGVmaW5lIFBSRVNDQUxFRF9USU1FUl9CQVNFCTEwMDAwCS8vIDEwMGtIeiAncHJlc2NhbGVkJyBjbG9jayBmb3Igc2xvdyBhcXVpc2l0aW9uLCBtYXliZSBJJ2xsIHN1cHBvcnQgdGhpcyBzb21lZGF5CisjZGVmaW5lIERNQV9CVUZGRVJfU0laRSAweDEwMDAKKworLyogbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBib2FyZCdzIDI0LWJpdCBjb3VudGVycyovCitzdGF0aWMgY29uc3QgaW50IG1heF9jb3VudGVyX3ZhbHVlID0gMHhmZmZmZmY7CisKKy8qIFBDSS1EQVM2NHh4eCBiYXNlIGFkZHJlc3NlcyAqLworCisvLyBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zCitlbnVtIGJhc2VfYWRkcmVzc19yZWdpb25zIHsKKwlQTFg5MDgwX0JBRERSSU5ERVggPSAwLAorCU1BSU5fQkFERFJJTkRFWCA9IDIsCisJRElPX0NPVU5URVJfQkFERFJJTkRFWCA9IDMsCit9OworCisvLyBwcml2KGRldiktPm1haW5faW9iYXNlIHJlZ2lzdGVycworZW51bSB3cml0ZV9vbmx5X3JlZ2lzdGVycyB7CisJSU5UUl9FTkFCTEVfUkVHID0gMHgwLAkvLyBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCisJSFdfQ09ORklHX1JFRyA9IDB4MiwJLy8gaGFyZHdhcmUgY29uZmlnIHJlZ2lzdGVyCisJREFRX1NZTkNfUkVHID0gMHhjLAorCURBUV9BVFJJR19MT1dfNDAyMF9SRUcgPSAweGMsCisJQURDX0NPTlRST0wwX1JFRyA9IDB4MTAsCS8vIGFkYyBjb250cm9sIHJlZ2lzdGVyIDAKKwlBRENfQ09OVFJPTDFfUkVHID0gMHgxMiwJLy8gYWRjIGNvbnRyb2wgcmVnaXN0ZXIgMQorCUNBTElCUkFUSU9OX1JFRyA9IDB4MTQsCisJQURDX1NBTVBMRV9JTlRFUlZBTF9MT1dFUl9SRUcgPSAweDE2LAkvLyBsb3dlciAxNiBiaXRzIG9mIGFkYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCUFEQ19TQU1QTEVfSU5URVJWQUxfVVBQRVJfUkVHID0gMHgxOCwJLy8gdXBwZXIgOCBiaXRzIG9mIGFkYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCUFEQ19ERUxBWV9JTlRFUlZBTF9MT1dFUl9SRUcgPSAweDFhLAkvLyBsb3dlciAxNiBiaXRzIG9mIGRlbGF5IGludGVydmFsIGNvdW50ZXIKKwlBRENfREVMQVlfSU5URVJWQUxfVVBQRVJfUkVHID0gMHgxYywJLy8gdXBwZXIgOCBiaXRzIG9mIGRlbGF5IGludGVydmFsIGNvdW50ZXIKKwlBRENfQ09VTlRfTE9XRVJfUkVHID0gMHgxZSwJLy8gbG93ZXIgMTYgYml0cyBvZiBoYXJkd2FyZSBjb252ZXJzaW9uL3NjYW4gY291bnRlcgorCUFEQ19DT1VOVF9VUFBFUl9SRUcgPSAweDIwLAkvLyB1cHBlciA4IGJpdHMgb2YgaGFyZHdhcmUgY29udmVyc2lvbi9zY2FuIGNvdW50ZXIKKwlBRENfU1RBUlRfUkVHID0gMHgyMiwJLy8gc29mdHdhcmUgdHJpZ2dlciB0byBzdGFydCBhcXVpc2l0aW9uCisJQURDX0NPTlZFUlRfUkVHID0gMHgyNCwJLy8gaW5pdGlhdGVzIHNpbmdsZSBjb252ZXJzaW9uCisJQURDX1FVRVVFX0NMRUFSX1JFRyA9IDB4MjYsCS8vIGNsZWFycyBhZGMgcXVldWUKKwlBRENfUVVFVUVfTE9BRF9SRUcgPSAweDI4LAkvLyBsb2FkcyBhZGMgcXVldWUKKwlBRENfQlVGRkVSX0NMRUFSX1JFRyA9IDB4MmEsCisJQURDX1FVRVVFX0hJR0hfUkVHID0gMHgyYywJLy8gaGlnaCBjaGFubmVsIGZvciBpbnRlcm5hbCBxdWV1ZSwgdXNlIGFkY19jaGFuX2JpdHMoKSBpbmxpbmUgYWJvdmUKKwlEQUNfQ09OVFJPTDBfUkVHID0gMHg1MCwJLy8gZGFjIGNvbnRyb2wgcmVnaXN0ZXIgMAorCURBQ19DT05UUk9MMV9SRUcgPSAweDUyLAkvLyBkYWMgY29udHJvbCByZWdpc3RlciAwCisJREFDX1NBTVBMRV9JTlRFUlZBTF9MT1dFUl9SRUcgPSAweDU0LAkvLyBsb3dlciAxNiBiaXRzIG9mIGRhYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCURBQ19TQU1QTEVfSU5URVJWQUxfVVBQRVJfUkVHID0gMHg1NiwJLy8gdXBwZXIgOCBiaXRzIG9mIGRhYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCURBQ19TRUxFQ1RfUkVHID0gMHg2MCwKKwlEQUNfU1RBUlRfUkVHID0gMHg2NCwKKwlEQUNfQlVGRkVSX0NMRUFSX1JFRyA9IDB4NjYsCS8vIGNsZWFyIGRhYyBidWZmZXIKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYWNfY29udmVydF9yZWcodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4NzAgKyAoMiAqIChjaGFubmVsICYgMHgxKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYWNfbHNiXzQwMjBfcmVnKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAweDcwICsgKDQgKiAoY2hhbm5lbCAmIDB4MSkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFjX21zYl80MDIwX3JlZyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHg3MiArICg0ICogKGNoYW5uZWwgJiAweDEpKTsKK30KKworZW51bSByZWFkX29ubHlfcmVnaXN0ZXJzIHsKKwlIV19TVEFUVVNfUkVHID0gMHgwLAkvLyBoYXJkd2FyZSBzdGF0dXMgcmVnaXN0ZXIsIHJlYWRpbmcgdGhpcyBhcHBhcmVudGx5IGNsZWFycyBwZW5kaW5nIGludGVycnVwdHMgYXMgd2VsbAorCVBJUEUxX1JFQURfUkVHID0gMHg0LAorCUFEQ19SRUFEX1BOVFJfUkVHID0gMHg4LAorCUxPV0VSX1hGRVJfUkVHID0gMHgxMCwKKwlBRENfV1JJVEVfUE5UUl9SRUcgPSAweGMsCisJUFJFUE9TVF9SRUcgPSAweDE0LAorfTsKKworZW51bSByZWFkX3dyaXRlX3JlZ2lzdGVycyB7CisJSTgyNTVfNDAyMF9SRUcgPSAweDQ4LAkvLyA4MjU1IG9mZnNldCwgZm9yIDQwMjAgb25seQorCUFEQ19RVUVVRV9GSUZPX1JFRyA9IDB4MTAwLAkvLyBleHRlcm5hbCBjaGFubmVsL2dhaW4gcXVldWUsIHVzZXMgc2FtZSBiaXRzIGFzIEFEQ19RVUVVRV9MT0FEX1JFRworCUFEQ19GSUZPX1JFRyA9IDB4MjAwLAkvKiBhZGMgZGF0YSBmaWZvICovCisJREFDX0ZJRk9fUkVHID0gMHgzMDAsCS8qIGRhYyBkYXRhIGZpZm8sIGhhcyB3ZWlyZCBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBjaGFubmVsIHF1ZXVlICovCit9OworCisvLyBwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSByZWdpc3RlcnMKK2VudW0gZGlvX2NvdW50ZXJfcmVnaXN0ZXJzIHsKKwlESU9fODI1NV9PRkZTRVQgPSAweDAsCisJRE9fUkVHID0gMHgyMCwKKwlESV9SRUcgPSAweDI4LAorCURJT19ESVJFQ1RJT05fNjBYWF9SRUcgPSAweDQwLAorCURJT19EQVRBXzYwWFhfUkVHID0gMHg0OCwKK307CisKKy8vIGJpdCBkZWZpbml0aW9ucyBmb3Igd3JpdGUtb25seSByZWdpc3RlcnMKKworZW51bSBpbnRyX2VuYWJsZV9jb250ZW50cyB7CisJQURDX0lOVFJfU1JDX01BU0sgPSAweDMsCS8vIGJpdHMgdGhhdCBzZXQgYWRjIGludGVycnVwdCBzb3VyY2UKKwlBRENfSU5UUl9RRlVMTF9CSVRTID0gMHgwLAkvLyBpbnRlcnJ1cHQgZmlmbyBxdWF0ZXIgZnVsbAorCUFEQ19JTlRSX0VPQ19CSVRTID0gMHgxLAkvLyBpbnRlcnJ1cHQgZW5kIG9mIGNvbnZlcnNpb24KKwlBRENfSU5UUl9FT1NDQU5fQklUUyA9IDB4MiwJLy8gaW50ZXJydXB0IGVuZCBvZiBzY2FuCisJQURDX0lOVFJfRU9TRVFfQklUUyA9IDB4MywJLy8gaW50ZXJydXB0IGVuZCBvZiBzZXF1ZW5jZSAocHJvYmFibHkgd29udCB1c2UgdGhpcyBpdCdzIHByZXR0eSBmYW5jeSkKKwlFTl9BRENfSU5UUl9TUkNfQklUID0gMHg0LAkvLyBlbmFibGUgYWRjIGludGVycnVwdCBzb3VyY2UKKwlFTl9BRENfRE9ORV9JTlRSX0JJVCA9IDB4OCwJLy8gZW5hYmxlIGFkYyBhcXVpc2l0aW9uIGRvbmUgaW50ZXJydXB0CisJREFDX0lOVFJfU1JDX01BU0sgPSAweDMwLAorCURBQ19JTlRSX1FFTVBUWV9CSVRTID0gMHgwLAorCURBQ19JTlRSX0hJR0hfQ0hBTl9CSVRTID0gMHgxMCwKKwlFTl9EQUNfSU5UUl9TUkNfQklUID0gMHg0MCwJLy8gZW5hYmxlIGRhYyBpbnRlcnJ1cHQgc291cmNlCisJRU5fREFDX0RPTkVfSU5UUl9CSVQgPSAweDgwLAorCUVOX0FEQ19BQ1RJVkVfSU5UUl9CSVQgPSAweDIwMCwJLy8gZW5hYmxlIGFkYyBhY3RpdmUgaW50ZXJydXB0CisJRU5fQURDX1NUT1BfSU5UUl9CSVQgPSAweDQwMCwJLy8gZW5hYmxlIGFkYyBzdG9wIHRyaWdnZXIgaW50ZXJydXB0CisJRU5fREFDX0FDVElWRV9JTlRSX0JJVCA9IDB4ODAwLAkvLyBlbmFibGUgZGFjIGFjdGl2ZSBpbnRlcnJ1cHQKKwlFTl9EQUNfVU5ERVJSVU5fQklUID0gMHg0MDAwLAkvLyBlbmFibGUgZGFjIHVuZGVycnVuIHN0YXR1cyBiaXQKKwlFTl9BRENfT1ZFUlJVTl9CSVQgPSAweDgwMDAsCS8vIGVuYWJsZSBhZGMgb3ZlcnJ1biBzdGF0dXMgYml0Cit9OworCitlbnVtIGh3X2NvbmZpZ19jb250ZW50cyB7CisJTUFTVEVSX0NMT0NLXzQwMjBfTUFTSyA9IDB4MywJLy8gYml0cyB0aGF0IHNwZWNpZnkgbWFzdGVyIGNsb2NrIHNvdXJjZSBmb3IgNDAyMAorCUlOVEVSTkFMX0NMT0NLXzQwMjBfQklUUyA9IDB4MSwJLy8gdXNlIDQwIE1IeiBpbnRlcm5hbCBtYXN0ZXIgY2xvY2sgZm9yIDQwMjAKKwlCTkNfQ0xPQ0tfNDAyMF9CSVRTID0gMHgyLAkvLyB1c2UgQk5DIGlucHV0IGZvciBtYXN0ZXIgY2xvY2sKKwlFWFRfQ0xPQ0tfNDAyMF9CSVRTID0gMHgzLAkvLyB1c2UgZGlvIGlucHV0IGZvciBtYXN0ZXIgY2xvY2sKKwlFWFRfUVVFVUVfQklUID0gMHgyMDAsCS8vIHVzZSBleHRlcm5hbCBjaGFubmVsL2dhaW4gcXVldWUgKG1vcmUgdmVyc2F0aWxlIHRoYW4gaW50ZXJuYWwgcXVldWUpCisJU0xPV19EQUNfQklUID0gMHg0MDAsCS8vIHVzZSAyMjUgbmFub3NlYyBzdHJvYmUgd2hlbiBsb2FkaW5nIGRhYyBpbnN0ZWFkIG9mIDUwIG5hbm9zZWMKKwlIV19DT05GSUdfRFVNTVlfQklUUyA9IDB4MjAwMCwJLy8gYml0IHdpdGggdW5rbm93biBmdW5jdGlvbiB5ZXQgZ2l2ZW4gYXMgZGVmYXVsdCB2YWx1ZSBpbiBwY2ktZGFzNjQgbWFudWFsCisJRE1BX0NIX1NFTEVDVF9CSVQgPSAweDgwMDAsCS8vIGJpdCBzZWxlY3RzIGNoYW5uZWxzIDEvMCBmb3IgYW5hbG9nIGlucHV0L291dHB1dCwgb3RoZXJ3aXNlIDAvMQorCUZJRk9fU0laRV9SRUcgPSAweDQsCS8vIGFsbG93cyBhZGp1c3RtZW50IG9mIGZpZm8gc2l6ZXMKKwlEQUNfRklGT19TSVpFX01BU0sgPSAweGZmMDAsCS8vIGJpdHMgdGhhdCBzZXQgZGFjIGZpZm8gc2l6ZQorCURBQ19GSUZPX0JJVFMgPSAweGY4MDAsCS8qIDhrIHNhbXBsZSBhbyBmaWZvICovCit9OworI2RlZmluZSBEQUNfRklGT19TSVpFIDB4MjAwMAorCitlbnVtIGRhcV9hdHJpZ19sb3dfNDAyMF9jb250ZW50cyB7CisJRVhUX0FHQVRFX0JOQ19CSVQgPSAweDgwMDAsCS8vIHVzZSB0cmlnL2V4dCBjbGsgYm5jIGlucHV0IGZvciBhbmFsb2cgZ2F0ZSBzaWduYWwKKwlFWFRfU1RPUF9UUklHX0JOQ19CSVQgPSAweDQwMDAsCS8vIHVzZSB0cmlnL2V4dCBjbGsgYm5jIGlucHV0IGZvciBleHRlcm5hbCBzdG9wIHRyaWdnZXIgc2lnbmFsCisJRVhUX1NUQVJUX1RSSUdfQk5DX0JJVCA9IDB4MjAwMCwJLy8gdXNlIHRyaWcvZXh0IGNsayBibmMgaW5wdXQgZm9yIGV4dGVybmFsIHN0YXJ0IHRyaWdnZXIgc2lnbmFsCit9Oworc3RhdGljIGlubGluZSB1aW50MTZfdCBhbmFsb2dfdHJpZ19sb3dfdGhyZXNob2xkX2JpdHModWludDE2X3QgdGhyZXNob2xkKQoreworCXJldHVybiB0aHJlc2hvbGQgJiAweGZmZjsKK30KKworZW51bSBhZGNfY29udHJvbDBfY29udGVudHMgeworCUFEQ19HQVRFX1NSQ19NQVNLID0gMHgzLAkvLyBiaXRzIHRoYXQgc2VsZWN0IGdhdGUKKwlBRENfU09GVF9HQVRFX0JJVFMgPSAweDEsCS8vIHNvZnR3YXJlIGdhdGUKKwlBRENfRVhUX0dBVEVfQklUUyA9IDB4MiwJLy8gZXh0ZXJuYWwgZGlnaXRhbCBnYXRlCisJQURDX0FOQUxPR19HQVRFX0JJVFMgPSAweDMsCS8vIGFuYWxvZyBsZXZlbCBnYXRlCisJQURDX0dBVEVfTEVWRUxfQklUID0gMHg0LAkvLyBsZXZlbC1zZW5zaXRpdmUgZ2F0ZSAoZm9yIGRpZ2l0YWwpCisJQURDX0dBVEVfUE9MQVJJVFlfQklUID0gMHg4LAkvLyBnYXRlIGFjdGl2ZSBsb3cKKwlBRENfU1RBUlRfVFJJR19TT0ZUX0JJVFMgPSAweDEwLAorCUFEQ19TVEFSVF9UUklHX0VYVF9CSVRTID0gMHgyMCwKKwlBRENfU1RBUlRfVFJJR19BTkFMT0dfQklUUyA9IDB4MzAsCisJQURDX1NUQVJUX1RSSUdfTUFTSyA9IDB4MzAsCisJQURDX1NUQVJUX1RSSUdfRkFMTElOR19CSVQgPSAweDQwLAkvLyB0cmlnIDEgdXNlcyBmYWxsaW5nIGVkZ2UKKwlBRENfRVhUX0NPTlZfRkFMTElOR19CSVQgPSAweDgwMCwJLy8gZXh0ZXJuYWwgcGFjaW5nIHVzZXMgZmFsbGluZyBlZGdlCisJQURDX1NBTVBMRV9DT1VOVEVSX0VOX0JJVCA9IDB4MTAwMCwJLy8gZW5hYmxlIGhhcmR3YXJlIHNjYW4gY291bnRlcgorCUFEQ19ETUFfRElTQUJMRV9CSVQgPSAweDQwMDAsCS8vIGRpc2FibGVzIGRtYQorCUFEQ19FTkFCTEVfQklUID0gMHg4MDAwLAkvLyBtYXN0ZXIgYWRjIGVuYWJsZQorfTsKKworZW51bSBhZGNfY29udHJvbDFfY29udGVudHMgeworCUFEQ19RVUVVRV9DT05GSUdfQklUID0gMHgxLAkvLyBzaG91bGQgYmUgc2V0IGZvciBib2FyZHMgd2l0aCA+IDE2IGNoYW5uZWxzCisJQ09OVkVSVF9QT0xBUklUWV9CSVQgPSAweDEwLAorCUVPQ19QT0xBUklUWV9CSVQgPSAweDIwLAorCUFEQ19TV19HQVRFX0JJVCA9IDB4NDAsCS8vIHNvZnR3YXJlIGdhdGUgb2YgYWRjCisJQURDX0RJVEhFUl9CSVQgPSAweDIwMCwJLy8gdHVybiBvbiBleHRyYSBub2lzZSBmb3IgZGl0aGVyaW5nCisJUkVUUklHR0VSX0JJVCA9IDB4ODAwLAorCUFEQ19MT19DSEFOTkVMXzQwMjBfTUFTSyA9IDB4MzAwLAorCUFEQ19ISV9DSEFOTkVMXzQwMjBfTUFTSyA9IDB4YzAwLAorCVRXT19DSEFOTkVMXzQwMjBfQklUUyA9IDB4MTAwMCwJLy8gdHdvIGNoYW5uZWwgbW9kZSBmb3IgNDAyMAorCUZPVVJfQ0hBTk5FTF80MDIwX0JJVFMgPSAweDIwMDAsCS8vIGZvdXIgY2hhbm5lbCBtb2RlIGZvciA0MDIwCisJQ0hBTk5FTF9NT0RFXzQwMjBfTUFTSyA9IDB4MzAwMCwKKwlBRENfTU9ERV9NQVNLID0gMHhmMDAwLAorfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX2xvX2NoYW5fNDAyMF9iaXRzKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbCAmIDB4MykgPDwgODsKK307CitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19oaV9jaGFuXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiAweDMpIDw8IDEwOworfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX21vZGVfYml0cyh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gKG1vZGUgJiAweGYpIDw8IDEyOworfTsKKworZW51bSBjYWxpYnJhdGlvbl9jb250ZW50cyB7CisJU0VMRUNUXzg4MDBfQklUID0gMHgxLAorCVNFTEVDVF84NDAyXzY0WFhfQklUID0gMHgyLAorCVNFTEVDVF8xNTkwXzYwWFhfQklUID0gMHgyLAorCUNBTF9FTl82NFhYX0JJVCA9IDB4NDAsCS8vIGNhbGlicmF0aW9uIGVuYWJsZSBmb3IgNjR4eCBzZXJpZXMKKwlTRVJJQUxfREFUQV9JTl9CSVQgPSAweDgwLAorCVNFUklBTF9DTE9DS19CSVQgPSAweDEwMCwKKwlDQUxfRU5fNjBYWF9CSVQgPSAweDIwMCwJLy8gY2FsaWJyYXRpb24gZW5hYmxlIGZvciA2MHh4IHNlcmllcworCUNBTF9HQUlOX0JJVCA9IDB4ODAwLAorfTsKKy8qIGNhbGlicmF0aW9uIHNvdXJjZXMgZm9yIDYwMjUgYXJlOgorICogIDAgOiBncm91bmQKKyAqICAxIDogMTBWCisgKiAgMiA6IDVWCisgKiAgMyA6IDAuNVYKKyAqICA0IDogMC4wNVYKKyAqICA1IDogZ3JvdW5kCisgKiAgNiA6IGRhYyBjaGFubmVsIDAKKyAqICA3IDogZGFjIGNoYW5uZWwgMQorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19zcmNfYml0cyh1bnNpZ25lZCBpbnQgc291cmNlKQoreworCXJldHVybiAoc291cmNlICYgMHhmKSA8PCAzOworfTsKKworc3RhdGljIGlubGluZSB1aW50MTZfdCBhZGNfY29udmVydF9jaGFuXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiAweDMpIDw8IDg7Cit9OworCitlbnVtIGFkY19xdWV1ZV9sb2FkX2NvbnRlbnRzIHsKKwlVTklQX0JJVCA9IDB4ODAwLAkvLyB1bmlwb2xhci9iaXBvbGFyIGJpdAorCUFEQ19TRV9ESUZGX0JJVCA9IDB4MTAwMCwJLy8gc2luZ2xlLWVuZGVkLyBkaWZmZXJlbnRpYWwgYml0CisJQURDX0NPTU1PTl9CSVQgPSAweDIwMDAsCS8vIG5vbi1yZWZlcmVuY2VkIHNpbmdsZS1lbmRlZCAoY29tbW9uLW1vZGUgaW5wdXQpCisJUVVFVUVfRU9TRVFfQklUID0gMHg0MDAwLAkvLyBxdWV1ZSBlbmQgb2Ygc2VxdWVuY2UKKwlRVUVVRV9FT1NDQU5fQklUID0gMHg4MDAwLAkvLyBxdWV1ZSBlbmQgb2Ygc2NhbgorfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX2NoYW5fYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAmIDB4M2Y7Cit9OworCitlbnVtIGRhY19jb250cm9sMF9jb250ZW50cyB7CisJREFDX0VOQUJMRV9CSVQgPSAweDgwMDAsCS8vIGRhYyBjb250cm9sbGVyIGVuYWJsZSBiaXQKKwlEQUNfQ1lDTElDX1NUT1BfQklUID0gMHg0MDAwLAorCURBQ19XQVZFRk9STV9NT0RFX0JJVCA9IDB4MTAwLAorCURBQ19FWFRfVVBEQVRFX0ZBTExJTkdfQklUID0gMHg4MCwKKwlEQUNfRVhUX1VQREFURV9FTkFCTEVfQklUID0gMHg0MCwKKwlXQVZFRk9STV9UUklHX01BU0sgPSAweDMwLAorCVdBVkVGT1JNX1RSSUdfRElTQUJMRURfQklUUyA9IDB4MCwKKwlXQVZFRk9STV9UUklHX1NPRlRfQklUUyA9IDB4MTAsCisJV0FWRUZPUk1fVFJJR19FWFRfQklUUyA9IDB4MjAsCisJV0FWRUZPUk1fVFJJR19BREMxX0JJVFMgPSAweDMwLAorCVdBVkVGT1JNX1RSSUdfRkFMTElOR19CSVQgPSAweDgsCisJV0FWRUZPUk1fR0FURV9MRVZFTF9CSVQgPSAweDQsCisJV0FWRUZPUk1fR0FURV9FTkFCTEVfQklUID0gMHgyLAorCVdBVkVGT1JNX0dBVEVfU0VMRUNUX0JJVCA9IDB4MSwKK307CisKK2VudW0gZGFjX2NvbnRyb2wxX2NvbnRlbnRzIHsKKwlEQUNfV1JJVEVfUE9MQVJJVFlfQklUID0gMHg4MDAsCS8qIGJvYXJkLWRlcGVuZGVudCBzZXR0aW5nICovCisJREFDMV9FWFRfUkVGX0JJVCA9IDB4MjAwLAorCURBQzBfRVhUX1JFRl9CSVQgPSAweDEwMCwKKwlEQUNfT1VUUFVUX0VOQUJMRV9CSVQgPSAweDgwLAkvLyBkYWMgb3V0cHV0IGVuYWJsZSBiaXQKKwlEQUNfVVBEQVRFX1BPTEFSSVRZX0JJVCA9IDB4NDAsCS8qIGJvYXJkLWRlcGVuZGVudCBzZXR0aW5nICovCisJREFDX1NXX0dBVEVfQklUID0gMHgyMCwKKwlEQUMxX1VOSVBPTEFSX0JJVCA9IDB4OCwKKwlEQUMwX1VOSVBPTEFSX0JJVCA9IDB4MiwKK307CisKKy8vIGJpdCBkZWZpbml0aW9ucyBmb3IgcmVhZC1vbmx5IHJlZ2lzdGVycworZW51bSBod19zdGF0dXNfY29udGVudHMgeworCURBQ19VTkRFUlJVTl9CSVQgPSAweDEsCisJQURDX09WRVJSVU5fQklUID0gMHgyLAorCURBQ19BQ1RJVkVfQklUID0gMHg0LAorCUFEQ19BQ1RJVkVfQklUID0gMHg4LAorCURBQ19JTlRSX1BFTkRJTkdfQklUID0gMHgxMCwKKwlBRENfSU5UUl9QRU5ESU5HX0JJVCA9IDB4MjAsCisJREFDX0RPTkVfQklUID0gMHg0MCwKKwlBRENfRE9ORV9CSVQgPSAweDgwLAorCUVYVF9JTlRSX1BFTkRJTkdfQklUID0gMHgxMDAsCisJQURDX1NUT1BfQklUID0gMHgyMDAsCit9Oworc3RhdGljIGlubGluZSB1aW50MTZfdCBwaXBlX2Z1bGxfYml0cyh1aW50MTZfdCBod19zdGF0dXNfYml0cykKK3sKKwlyZXR1cm4gKGh3X3N0YXR1c19iaXRzID4+IDEwKSAmIDB4MzsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRtYV9jaGFpbl9mbGFnX2JpdHModWludDE2X3QgcHJlcG9zdF9iaXRzKQoreworCXJldHVybiAocHJlcG9zdF9iaXRzID4+IDYpICYgMHgzOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWRjX3VwcGVyX3JlYWRfcHRyX2NvZGUodWludDE2X3QgcHJlcG9zdF9iaXRzKQoreworCXJldHVybiAocHJlcG9zdF9iaXRzID4+IDEyKSAmIDB4MzsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFkY191cHBlcl93cml0ZV9wdHJfY29kZSh1aW50MTZfdCBwcmVwb3N0X2JpdHMpCit7CisJcmV0dXJuIChwcmVwb3N0X2JpdHMgPj4gMTQpICYgMHgzOworfQorCisvLyBJMkMgYWRkcmVzc2VzIGZvciA0MDIwCitlbnVtIGkyY19hZGRyZXNzZXMgeworCVJBTkdFX0NBTF9JMkNfQUREUiA9IDB4MjAsCisJQ0FMREFDMF9JMkNfQUREUiA9IDB4YywKKwlDQUxEQUMxX0kyQ19BRERSID0gMHhkLAorfTsKKworZW51bSByYW5nZV9jYWxfaTJjX2NvbnRlbnRzIHsKKwlBRENfU1JDXzQwMjBfTUFTSyA9IDB4NzAsCS8vIGJpdHMgdGhhdCBzZXQgd2hhdCBzb3VyY2UgdGhlIGFkYyBjb252ZXJ0ZXIgbWVhc3VyZXMKKwlCTkNfVFJJR19USFJFU0hPTERfMFZfQklUID0gMHg4MCwJLy8gbWFrZSBibmMgdHJpZy9leHQgY2xvY2sgdGhyZXNob2xkIDBWIGluc3RlYWQgb2YgMi41VgorfTsKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBhZGNfc3JjXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgc291cmNlKQoreworCXJldHVybiAoc291cmNlIDw8IDQpICYgQURDX1NSQ180MDIwX01BU0s7Cit9Oworc3RhdGljIGlubGluZSB1aW50OF90IGF0dGVudWF0ZV9iaXQodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJLy8gYXR0ZW51YXRlIGNoYW5uZWwgKCstNVYgaW5wdXQgcmFuZ2UpCisJcmV0dXJuIDEgPDwgKGNoYW5uZWwgJiAweDMpOworfTsKKworLy8gYW5hbG9nIGlucHV0IHJhbmdlcyBmb3IgNjR4eCBib2FyZHMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhaV9yYW5nZXNfNjR4eCA9IHsKKwk4LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCQl9Cit9OworCisvKiBhbmFsb2cgaW5wdXQgcmFuZ2VzIGZvciA2MHh4IGJvYXJkcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFpX3Jhbmdlc182MHh4ID0geworCTQsCisJeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQl9Cit9OworCisvKiBhbmFsb2cgaW5wdXQgcmFuZ2VzIGZvciA2MDMwLCBldGMgYm9hcmRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgYWlfcmFuZ2VzXzYwMzAgPSB7CisJMTQsCisJeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMiksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMiksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC41KSwKKwkJCVVOSV9SQU5HRSgwLjIpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCX0KK307CisKKy8qIGFuYWxvZyBpbnB1dCByYW5nZXMgZm9yIDYwNTIsIGV0YyBib2FyZHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhaV9yYW5nZXNfNjA1MiA9IHsKKwkxNSwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjUpLAorCQkJVU5JX1JBTkdFKDAuMiksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJfQorfTsKKworLy8gYW5hbG9nIGlucHV0IHJhbmdlcyBmb3IgNDAyMCBib2FyZAorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFpX3Jhbmdlc180MDIwID0geworCTIsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEpLAorCQl9Cit9OworCisvLyBhbmFsb2cgb3V0cHV0IHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFvX3Jhbmdlc182NHh4ID0geworCTQsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCX0KK307CitzdGF0aWMgY29uc3QgaW50IGFvX3JhbmdlX2NvZGVfNjR4eFtdID0geworCTB4MCwKKwkweDEsCisJMHgyLAorCTB4MywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhb19yYW5nZXNfNjB4eCA9IHsKKwkxLAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCX0KK307CitzdGF0aWMgY29uc3QgaW50IGFvX3JhbmdlX2NvZGVfNjB4eFtdID0geworCTB4MCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhb19yYW5nZXNfNjAzMCA9IHsKKwkyLAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMTApLAorCQl9Cit9Oworc3RhdGljIGNvbnN0IGludCBhb19yYW5nZV9jb2RlXzYwMzBbXSA9IHsKKwkweDAsCisJMHgyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFvX3Jhbmdlc180MDIwID0geworCTIsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJfQorfTsKK3N0YXRpYyBjb25zdCBpbnQgYW9fcmFuZ2VfY29kZV80MDIwW10gPSB7CisJMHgxLAorCTB4MCwKK307CisKK2VudW0gcmVnaXN0ZXJfbGF5b3V0IHsKKwlMQVlPVVRfNjBYWCwKKwlMQVlPVVRfNjRYWCwKKwlMQVlPVVRfNDAyMCwKK307CisKK3N0cnVjdCBod19maWZvX2luZm8geworCXVuc2lnbmVkIGludCBudW1fc2VnbWVudHM7CisJdW5zaWduZWQgaW50IG1heF9zZWdtZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3BhY2tpbmdfcmF0aW87CisJdWludDE2X3QgZmlmb19zaXplX3JlZ19tYXNrOworfTsKKworc3RydWN0IHBjaWRhczY0X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBwY2kgZGV2aWNlIGlkCisJaW50IGFpX3NlX2NoYW5zOwkvLyBudW1iZXIgb2YgYWkgaW5wdXRzIGluIHNpbmdsZS1lbmRlZCBtb2RlCisJaW50IGFpX2JpdHM7CQkvLyBhbmFsb2cgaW5wdXQgcmVzb2x1dGlvbgorCWludCBhaV9zcGVlZDsJCS8vIGZhc3Rlc3QgY29udmVyc2lvbiBwZXJpb2QgaW4gbnMKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdGFibGU7CisJaW50IGFvX25jaGFuOwkJLy8gbnVtYmVyIG9mIGFuYWxvZyBvdXQgY2hhbm5lbHMKKwlpbnQgYW9fYml0czsJCS8vIGFuYWxvZyBvdXRwdXQgcmVzb2x1dGlvbgorCWludCBhb19zY2FuX3NwZWVkOwkvLyBhbmFsb2cgb3V0cHV0IHNwZWVkIChmb3IgYSBzY2FuLCBub3QgY29udmVyc2lvbikKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdGFibGU7CisJY29uc3QgaW50ICphb19yYW5nZV9jb2RlOworCWNvbnN0IHN0cnVjdCBod19maWZvX2luZm8gKmNvbnN0IGFpX2ZpZm87CisJZW51bSByZWdpc3Rlcl9sYXlvdXQgbGF5b3V0OwkvLyBkaWZmZXJlbnQgYm9hcmQgZmFtaWxpZXMgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgcmVnaXN0ZXJzCisJdW5zaWduZWQgaGFzXzgyNTU6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvIGFpX2ZpZm9fNDAyMCA9IHsKKyAgICAgIG51bV9zZWdtZW50czoyLAorICAgICAgbWF4X3NlZ21lbnRfbGVuZ3RoOjB4ODAwMCwKKyAgICAgIHNhbXBsZV9wYWNraW5nX3JhdGlvOjIsCisgICAgICBmaWZvX3NpemVfcmVnX21hc2s6MHg3ZiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvIGFpX2ZpZm9fNjR4eCA9IHsKKyAgICAgIG51bV9zZWdtZW50czo0LAorICAgICAgbWF4X3NlZ21lbnRfbGVuZ3RoOjB4ODAwLAorICAgICAgc2FtcGxlX3BhY2tpbmdfcmF0aW86MSwKKyAgICAgIGZpZm9fc2l6ZV9yZWdfbWFzazoweDNmLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBod19maWZvX2luZm8gYWlfZmlmb182MHh4ID0geworICAgICAgbnVtX3NlZ21lbnRzOjQsCisgICAgICBtYXhfc2VnbWVudF9sZW5ndGg6MHg4MDAsCisgICAgICBzYW1wbGVfcGFja2luZ19yYXRpbzoxLAorICAgICAgZmlmb19zaXplX3JlZ19tYXNrOjB4N2YsCit9OworCisvKiBtYXhpbXVtIG51bWJlciBvZiBkbWEgdHJhbnNmZXJzIHdlIHdpbGwgY2hhaW4gdG9nZXRoZXIgaW50byBhIHJpbmcKKyAqIChhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRtYSBidWZmZXJzIHdlIG1haW50YWluKSAqLworI2RlZmluZSBNQVhfQUlfRE1BX1JJTkdfQ09VTlQgKDB4ODAwMDAgLyBETUFfQlVGRkVSX1NJWkUpCisjZGVmaW5lIE1JTl9BSV9ETUFfUklOR19DT1VOVCAoMHgxMDAwMCAvIERNQV9CVUZGRVJfU0laRSkKKyNkZWZpbmUgQU9fRE1BX1JJTkdfQ09VTlQgKDB4MTAwMDAgLyBETUFfQlVGRkVSX1NJWkUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhaV9kbWFfcmluZ19jb3VudChzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgKiBib2FyZCkKK3sKKwlpZiAoYm9hcmQtPmxheW91dCA9PSBMQVlPVVRfNDAyMCkKKwkJcmV0dXJuIE1BWF9BSV9ETUFfUklOR19DT1VOVDsKKwllbHNlCisJCXJldHVybiBNSU5fQUlfRE1BX1JJTkdfQ09VTlQ7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgYnl0ZXNfaW5fc2FtcGxlID0gMjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lkYXM2NF9ib2FyZCBwY2lkYXM2NF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NDAyLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxZCwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0MDIvMTIiLAkvLyBYWFggY2hlY2sKKwkgICAgICBkZXZpY2VfaWQ6MHgxZSwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20xLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgzNSwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20yLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgzNiwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjR4eCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQvbTMvMTYiLAorCSAgICAgIGRldmljZV9pZDoweDM3LAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjMzMywKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82NHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJCS5uYW1lID0gInBjaS1kYXM2MDEzIiwKKwkJLmRldmljZV9pZCA9IDB4NzgsCisJCS5haV9zZV9jaGFucyA9IDE2LAorCQkuYWlfYml0cyA9IDE2LAorCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkuYW9fbmNoYW4gPSAwLAorCQkuYW9fYml0cyA9IDE2LAorCQkubGF5b3V0ID0gTEFZT1VUXzYwWFgsCisJCS5haV9yYW5nZV90YWJsZSA9ICZhaV9yYW5nZXNfNjB4eCwKKwkJLmFvX3JhbmdlX3RhYmxlID0gJmFvX3Jhbmdlc182MHh4LAorCQkuYW9fcmFuZ2VfY29kZSA9IGFvX3JhbmdlX2NvZGVfNjB4eCwKKwkJLmFpX2ZpZm8gPSAmYWlfZmlmb182MHh4LAorCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMTQiLAorCSAgICAgIGRldmljZV9pZDoweDc5LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMjMiLAorCSAgICAgIGRldmljZV9pZDoweDVkLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMjUiLAorCSAgICAgIGRldmljZV9pZDoweDVlLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzAiLAorCSAgICAgIGRldmljZV9pZDoweDVmLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzEiLAorCSAgICAgIGRldmljZV9pZDoweDYwLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzIiLAorCSAgICAgIGRldmljZV9pZDoweDYxLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzMiLAorCSAgICAgIGRldmljZV9pZDoweDYyLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzQiLAorCSAgICAgIGRldmljZV9pZDoweDYzLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzUiLAorCSAgICAgIGRldmljZV9pZDoweDY0LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzYiLAorCSAgICAgIGRldmljZV9pZDoweDZmLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwNDAiLAorCSAgICAgIGRldmljZV9pZDoweDY1LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjIwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwNTIsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MDMwLAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MDMwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDUyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2NiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDozMzMzLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDozMzMzLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjA3MCIsCisJICAgICAgZGV2aWNlX2lkOjB4NjcsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6ODAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjA3MSIsCisJICAgICAgZGV2aWNlX2lkOjB4NjgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6ODAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNDAyMC8xMiIsCisJICAgICAgZGV2aWNlX2lkOjB4NTIsCisJICAgICAgYWlfc2VfY2hhbnM6NCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo1MCwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MCwJLy8gbm8gaGFyZHdhcmUgcGFjaW5nIG9uIGFvCisJICAgICAgbGF5b3V0OglMQVlPVVRfNDAyMCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzQwMjAsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc180MDIwLAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV80MDIwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzQwMjAsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKyNpZiAwCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQwMi8xNi9qciIsCisJICAgICAgZGV2aWNlX2lkOjAJLy8gWFhYLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20xLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MAkvLyBYWFgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYWlfZmlmbzoJYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQvbTIvMTYvanIiLAorCSAgICAgIGRldmljZV9pZDowCS8vIFhYWCwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20zLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MAkvLyBYWFgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MzMzLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMS8xNCIsCisJICAgICAgZGV2aWNlX2lkOjAsCS8vIFhYWAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE0LAorCSAgICAgIGFpX3NwZWVkOjEwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20yLzE0IiwKKwkgICAgICBkZXZpY2VfaWQ6MCwJLy8gWFhYCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTQsCisJICAgICAgYWlfc3BlZWQ6NTAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMy8xNCIsCisJICAgICAgZGV2aWNlX2lkOjAsCS8vIFhYWAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE0LAorCSAgICAgIGFpX3NwZWVkOjMzMywKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYWlfZmlmbzoJYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisjZW5kaWYKK307CisKKy8vIE51bWJlciBvZiBib2FyZHMgaW4gY2JfcGNpZGFzX2JvYXJkcworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2JvYXJkcyh2b2lkKQoreworCXJldHVybiBzaXplb2YocGNpZGFzNjRfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQpOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpZGFzNjRfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDFkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDVkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDVlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDVmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDc4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDc5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lkYXM2NF9wY2lfdGFibGUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lkYXM2NF9ib2FyZCAqYm9hcmQoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc2VfZGlmZl9iaXRfNnh4eChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlpbnQgdXNlX2RpZmZlcmVudGlhbCkKK3sKKwlpZiAoKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjRYWCAmJiAhdXNlX2RpZmZlcmVudGlhbCkgfHwKKwkJKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjBYWCAmJiB1c2VfZGlmZmVyZW50aWFsKSkKKwkJcmV0dXJuIEFEQ19TRV9ESUZGX0JJVDsKKwllbHNlCisJCXJldHVybiAwOworfTsKKworc3RydWN0IGV4dF9jbG9ja19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsJLy8gbWFzdGVyIGNsb2NrIGRpdmlzb3IgdG8gdXNlIGZvciBzY2FucyB3aXRoIGV4dGVybmFsIG1hc3RlciBjbG9jaworCXVuc2lnbmVkIGludCBjaGFuc3BlYzsJLy8gY2hhbnNwZWMgZm9yIG1hc3RlciBjbG9jayBpbnB1dCB3aGVuIHVzZWQgYXMgc2NhbiBiZWdpbiBzcmMKK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gKi8KK3N0cnVjdCBwY2lkYXM2NF9wcml2YXRlIHsKKworCXN0cnVjdCBwY2lfZGV2ICpod19kZXY7CS8vIHBvaW50ZXIgdG8gYm9hcmQncyBwY2lfZGV2IHN0cnVjdAorCS8vIGJhc2UgYWRkcmVzc2VzIChwaHlzaWNhbCkKKwlyZXNvdXJjZV9zaXplX3QgcGx4OTA4MF9waHlzX2lvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgbWFpbl9waHlzX2lvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgZGlvX2NvdW50ZXJfcGh5c19pb2Jhc2U7CisJLy8gYmFzZSBhZGRyZXNzZXMgKGlvcmVtYXBwZWQpCisJdm9pZCAqcGx4OTA4MF9pb2Jhc2U7CisJdm9pZCAqbWFpbl9pb2Jhc2U7CisJdm9pZCAqZGlvX2NvdW50ZXJfaW9iYXNlOworCS8vIGxvY2FsIGFkZHJlc3MgKHVzZWQgYnkgZG1hIGNvbnRyb2xsZXIpCisJdWludDMyX3QgbG9jYWwwX2lvYmFzZTsKKwl1aW50MzJfdCBsb2NhbDFfaW9iYXNlOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhaV9jb3VudDsJLy8gbnVtYmVyIG9mIGFuYWxvZyBpbnB1dCBzYW1wbGVzIHJlbWFpbmluZworCXVpbnQxNl90ICphaV9idWZmZXJbTUFYX0FJX0RNQV9SSU5HX0NPVU5UXTsJLy8gZG1hIGJ1ZmZlcnMgZm9yIGFuYWxvZyBpbnB1dAorCWRtYV9hZGRyX3QgYWlfYnVmZmVyX2J1c19hZGRyW01BWF9BSV9ETUFfUklOR19DT1VOVF07CS8vIHBoeXNpY2FsIGFkZHJlc3NlcyBvZiBhaSBkbWEgYnVmZmVycworCXN0cnVjdCBwbHhfZG1hX2Rlc2MgKmFpX2RtYV9kZXNjOwkvLyBhcnJheSBvZiBhaSBkbWEgZGVzY3JpcHRvcnMgcmVhZCBieSBwbHg5MDgwLCBhbGxvY2F0ZWQgdG8gZ2V0IHByb3BlciBhbGlnbm1lbnQKKwlkbWFfYWRkcl90IGFpX2RtYV9kZXNjX2J1c19hZGRyOwkvLyBwaHlzaWNhbCBhZGRyZXNzIG9mIGFpIGRtYSBkZXNjcmlwdG9yIGFycmF5CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFpX2RtYV9pbmRleDsJLy8gaW5kZXggb2YgdGhlIGFpIGRtYSBkZXNjcmlwdG9yL2J1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkCisJdWludDE2X3QgKmFvX2J1ZmZlcltBT19ETUFfUklOR19DT1VOVF07CS8vIGRtYSBidWZmZXJzIGZvciBhbmFsb2cgb3V0cHV0CisJZG1hX2FkZHJfdCBhb19idWZmZXJfYnVzX2FkZHJbQU9fRE1BX1JJTkdfQ09VTlRdOwkvLyBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYW8gZG1hIGJ1ZmZlcnMKKwlzdHJ1Y3QgcGx4X2RtYV9kZXNjICphb19kbWFfZGVzYzsKKwlkbWFfYWRkcl90IGFvX2RtYV9kZXNjX2J1c19hZGRyOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhb19kbWFfaW5kZXg7CS8vIGtlZXBzIHRyYWNrIG9mIGJ1ZmZlciB3aGVyZSB0aGUgbmV4dCBhbyBzYW1wbGUgc2hvdWxkIGdvCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhb19jb3VudDsJLy8gbnVtYmVyIG9mIGFuYWxvZyBvdXRwdXQgc2FtcGxlcyByZW1haW5pbmcKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYW9fdmFsdWVbMl07CS8vIHJlbWVtYmVyIHdoYXQgdGhlIGFuYWxvZyBvdXRwdXRzIGFyZSBzZXQgdG8sIHRvIGFsbG93IHJlYWRiYWNrCisJdW5zaWduZWQgaW50IGh3X3JldmlzaW9uOwkvLyBzdGMgY2hpcCBoYXJkd2FyZSByZXZpc2lvbiBudW1iZXIKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50cl9lbmFibGVfYml0czsJLy8gbGFzdCBiaXRzIHNlbnQgdG8gSU5UUl9FTkFCTEVfUkVHIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDE2X3QgYWRjX2NvbnRyb2wxX2JpdHM7CS8vIGxhc3QgYml0cyBzZW50IHRvIEFEQ19DT05UUk9MMV9SRUcgcmVnaXN0ZXIKKwl2b2xhdGlsZSB1aW50MTZfdCBmaWZvX3NpemVfYml0czsJLy8gbGFzdCBiaXRzIHNlbnQgdG8gRklGT19TSVpFX1JFRyByZWdpc3RlcgorCXZvbGF0aWxlIHVpbnQxNl90IGh3X2NvbmZpZ19iaXRzOwkvLyBsYXN0IGJpdHMgc2VudCB0byBIV19DT05GSUdfUkVHIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDE2X3QgZGFjX2NvbnRyb2wxX2JpdHM7CisJdm9sYXRpbGUgdWludDMyX3QgcGx4X2NvbnRyb2xfYml0czsJLy8gbGFzdCBiaXRzIHdyaXR0ZW4gdG8gcGx4OTA4MCBjb250cm9sIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDMyX3QgcGx4X2ludGNzcl9iaXRzOwkvLyBsYXN0IGJpdHMgd3JpdHRlbiB0byBwbHggaW50ZXJydXB0IGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorCXZvbGF0aWxlIGludCBjYWxpYnJhdGlvbl9zb3VyY2U7CS8vIGluZGV4IG9mIGNhbGlicmF0aW9uIHNvdXJjZSByZWFkYWJsZSB0aHJvdWdoIGFpIGNoMAorCXZvbGF0aWxlIHVpbnQ4X3QgaTJjX2NhbF9yYW5nZV9iaXRzOwkvLyBiaXRzIHdyaXR0ZW4gdG8gaTJjIGNhbGlicmF0aW9uL3JhbmdlIHJlZ2lzdGVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGV4dF90cmlnX2ZhbGxpbmc7CS8vIGNvbmZpZ3VyZSBkaWdpdGFsIHRyaWdnZXJzIHRvIHRyaWdnZXIgb24gZmFsbGluZyBlZGdlCisJLy8gc3RhdGVzIG9mIHZhcmlvdXMgZGV2aWNlcyBzdG9yZWQgdG8gZW5hYmxlIHJlYWQtYmFjaworCXVuc2lnbmVkIGludCBhZDg0MDJfc3RhdGVbMl07CisJdW5zaWduZWQgaW50IGNhbGRhY19zdGF0ZVs4XTsKKwl2b2xhdGlsZSBzaG9ydCBhaV9jbWRfcnVubmluZzsKKwl1bnNpZ25lZCBpbnQgYWlfZmlmb19zZWdtZW50X2xlbmd0aDsKKwlzdHJ1Y3QgZXh0X2Nsb2NrX2luZm8gZXh0X2Nsb2NrOworCXNob3J0IGFvX2JvdW5jZV9idWZmZXJbREFDX0ZJRk9fU0laRV07Cit9OworCisKKy8qIGlubGluZSBmdW5jdGlvbiB0aGF0IG1ha2VzIGl0IGVhc2llciB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpZGFzNjRfcHJpdmF0ZSAqcHJpdihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXR1cm4gZGV2LT5wcml2YXRlOworfQorCisvKgorICogVGhlIGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGF0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRhcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2lkYXM2NCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YXR0YWNoLAorICAgICAgZGV0YWNoOmRldGFjaCwKK307CisKK3N0YXRpYyBpbnQgYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGFpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGFvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKTsKK3N0YXRpYyBpbnQgYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBhaV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGFvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCBkaW9fY2FsbGJhY2tfNDAyMChpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGlvXzYweHhfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGlvXzYweHhfd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgY2FsaWJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGliX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYWQ4NDAyX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHZvaWQgYWQ4NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCBhZDg0MDJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBlZXByb21fcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgdm9pZCBjaGVja19hZGNfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kaXZpc29yKHVuc2lnbmVkIGludCBucywgdW5zaWduZWQgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJY29uc3QgdWludDhfdCAqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpOworc3RhdGljIHZvaWQgY2FsZGFjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCBjYWxkYWNfODgwMF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJdWludDhfdCB2YWx1ZSk7CisvL3N0YXRpYyBpbnQgZGFjXzE1OTBfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRhY19hLCB1bnNpZ25lZCBpbnQgZGFjX2IpOworc3RhdGljIGludCBjYWxkYWNfaTJjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2FsZGFjX2NoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFib3J0X2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOworc3RhdGljIHZvaWQgZGlzYWJsZV9wbHhfaW50ZXJydXB0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHNldF9haV9maWZvX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBudW1fc2FtcGxlcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGFpX2ZpZm9fc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBudW1fZW50cmllcyk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2FpX3BhY2luZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2FpX2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZW5hYmxlX2FpX2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2FvX2Rpdmlzb3IodW5zaWduZWQgaW50IG5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworc3RhdGljIHZvaWQgbG9hZF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGFzLCBwY2lkYXM2NF9wY2lfdGFibGUpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGFpX3JhbmdlX2JpdHNfNnh4eChjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgpCit7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKnJhbmdlID0KKwkJJmJvYXJkKGRldiktPmFpX3JhbmdlX3RhYmxlLT5yYW5nZVtyYW5nZV9pbmRleF07CisJdW5zaWduZWQgaW50IGJpdHMgPSAwOworCisJc3dpdGNoIChyYW5nZS0+bWF4KSB7CisJY2FzZSAxMDAwMDAwMDoKKwkJYml0cyA9IDB4MDAwOworCQlicmVhazsKKwljYXNlIDUwMDAwMDA6CisJCWJpdHMgPSAweDEwMDsKKwkJYnJlYWs7CisJY2FzZSAyMDAwMDAwOgorCWNhc2UgMjUwMDAwMDoKKwkJYml0cyA9IDB4MjAwOworCQlicmVhazsKKwljYXNlIDEwMDAwMDA6CisJY2FzZSAxMjUwMDAwOgorCQliaXRzID0gMHgzMDA7CisJCWJyZWFrOworCWNhc2UgNTAwMDAwOgorCQliaXRzID0gMHg0MDA7CisJCWJyZWFrOworCWNhc2UgMjAwMDAwOgorCWNhc2UgMjUwMDAwOgorCQliaXRzID0gMHg1MDA7CisJCWJyZWFrOworCWNhc2UgMTAwMDAwOgorCQliaXRzID0gMHg2MDA7CisJCWJyZWFrOworCWNhc2UgNTAwMDA6CisJCWJpdHMgPSAweDcwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgaW4gYWlfcmFuZ2VfYml0c182eHh4Iik7CisJCWJyZWFrOworCX0KKwlpZiAocmFuZ2UtPm1pbiA9PSAwKQorCQliaXRzICs9IDB4OTAwOworCXJldHVybiBiaXRzOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGh3X3JldmlzaW9uKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVpbnQxNl90IGh3X3N0YXR1c19iaXRzKQoreworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCXJldHVybiAoaHdfc3RhdHVzX2JpdHMgPj4gMTMpICYgMHg3OworCisJcmV0dXJuIChod19zdGF0dXNfYml0cyA+PiAxMikgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfcmFuZ2VfYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdm9sYXRpbGUgdWludDE2X3QgKiBiaXRzLAorCXVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJdW5zaWduZWQgaW50IGNvZGUgPSBib2FyZChkZXYpLT5hb19yYW5nZV9jb2RlW3JhbmdlXTsKKworCWlmIChjaGFubmVsID4gMSkKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgYmFkIGNoYW5uZWw/Iik7CisJaWYgKGNvZGUgJiB+MHgzKQorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBiYWQgcmFuZ2UgY29kZT8iKTsKKworCSpiaXRzICY9IH4oMHgzIDw8ICgyICogY2hhbm5lbCkpOworCSpiaXRzIHw9IGNvZGUgPDwgKDIgKiBjaGFubmVsKTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGFvX2NtZF9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHBjaWRhczY0X2JvYXJkICogYm9hcmQpCit7CisJcmV0dXJuIGJvYXJkLT5hb19uY2hhbiAmJiBib2FyZC0+bGF5b3V0ICE9IExBWU9VVF80MDIwOworfQorCisvLyBpbml0aWFsaXplIHBseDkwODAgY2hpcAorc3RhdGljIHZvaWQgaW5pdF9wbHg5MDgwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVpbnQzMl90IGJpdHM7CisJdm9pZCAqcGx4X2lvYmFzZSA9IHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2U7CisKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHKTsKKworCS8vIHBseDkwODAgZHVtcAorCURFQlVHX1BSSU5UKCIgcGx4IGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggaWQgYml0cyAweCV4XG4iLCByZWFkbChwbHhfaW9iYXNlICsgUExYX0lEX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGNvbnRyb2wgcmVnIDB4JXhcbiIsIHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyk7CisJREVCVUdfUFJJTlQoIiBwbHggbW9kZS9hcmJpdHJhdGlvbiByZWcgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9NQVJCX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IHJlZ2lvbjAgcmVnIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfUkVHSU9OMF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCByZWdpb24xIHJlZyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFR0lPTjFfUkVHKSk7CisKKwlERUJVR19QUklOVCgiIHBseCByZXZpc2lvbiAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFVklTSU9OX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgbW9kZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAxIG1vZGUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUExX01PREVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBwY2kgYWRkcmVzcyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBsb2NhbCBhZGRyZXNzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9MT0NBTF9BRERSRVNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgdHJhbnNmZXIgc2l6ZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIGRlc2NyaXB0b3IgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBjb21tYW5kIHN0YXR1cyAweCV4XG4iLAorCQlyZWFkYihwbHhfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCB0aHJlc2hvbGQgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBiaWdlbmQgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9CSUdFTkRfUkVHKSk7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwliaXRzID0gQklHRU5EX0RNQTAgfCBCSUdFTkRfRE1BMTsKKyNlbHNlCisJYml0cyA9IDA7CisjZW5kaWYKKwl3cml0ZWwoYml0cywgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9CSUdFTkRfUkVHKTsKKworCWRpc2FibGVfcGx4X2ludGVycnVwdHMoZGV2KTsKKworCWFib3J0X2RtYShkZXYsIDApOworCWFib3J0X2RtYShkZXYsIDEpOworCisJLy8gY29uZmlndXJlIGRtYTAgbW9kZQorCWJpdHMgPSAwOworCS8vIGVuYWJsZSByZWFkeSBpbnB1dCwgbm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkKKwliaXRzIHw9IFBMWF9ETUFfRU5fUkVBRFlJTl9CSVQ7CisJLy8gZW5hYmxlIGJ0ZXJtLCBub3Qgc3VyZSBpZiB0aGlzIGlzIG5lY2Vzc2FyeQorCWJpdHMgfD0gUExYX0VOX0JURVJNX0JJVDsKKwkvLyBlbmFibGUgZG1hIGNoYWluaW5nCisJYml0cyB8PSBQTFhfRU5fQ0hBSU5fQklUOworCS8vIGVuYWJsZSBpbnRlcnJ1cHQgb24gZG1hIGRvbmUgKHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcywgc2luY2UgY2hhaW4gbmV2ZXIgZmluaXNoZXMpCisJYml0cyB8PSBQTFhfRU5fRE1BX0RPTkVfSU5UUl9CSVQ7CisJLy8gZG9uJ3QgaW5jcmVtZW50IGxvY2FsIGFkZHJlc3MgZHVyaW5nIHRyYW5zZmVycyAod2UgYXJlIHRyYW5zZmVycmluZyBmcm9tIGEgZml4ZWQgZmlmbyByZWdpc3RlcikKKwliaXRzIHw9IFBMWF9MT0NBTF9BRERSX0NPTlNUX0JJVDsKKwkvLyByb3V0ZSBkbWEgaW50ZXJydXB0IHRvIHBjaSBidXMKKwliaXRzIHw9IFBMWF9ETUFfSU5UUl9QQ0lfQklUOworCS8vIGVuYWJsZSBkZW1hbmQgbW9kZQorCWJpdHMgfD0gUExYX0RFTUFORF9NT0RFX0JJVDsKKwkvLyBlbmFibGUgbG9jYWwgYnVyc3QgbW9kZQorCWJpdHMgfD0gUExYX0RNQV9MT0NBTF9CVVJTVF9FTl9CSVQ7CisJLy8gNDAyMCB1c2VzIDMyIGJpdCBkbWEKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCWJpdHMgfD0gUExYX0xPQ0FMX0JVU18zMl9XSURFX0JJVFM7CisJfSBlbHNlIHsJCS8vIGxvY2Fsc3BhY2UwIGJ1cyBpcyAxNiBiaXRzIHdpZGUKKwkJYml0cyB8PSBQTFhfTE9DQUxfQlVTXzE2X1dJREVfQklUUzsKKwl9CisJd3JpdGVsKGJpdHMsIHBseF9pb2Jhc2UgKyBQTFhfRE1BMV9NT0RFX1JFRyk7CisJaWYgKGFvX2NtZF9pc19zdXBwb3J0ZWQoYm9hcmQoZGV2KSkpCisJCXdyaXRlbChiaXRzLCBwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpOworCisJLy8gZW5hYmxlIGludGVycnVwdHMgb24gcGx4IDkwODAKKwlwcml2KGRldiktPnBseF9pbnRjc3JfYml0cyB8PQorCQlJQ1NfQUVSUiB8IElDU19QRVJSIHwgSUNTX1BJRSB8IElDU19QTElFIHwgSUNTX1BBSUUgfCBJQ1NfTElFIHwKKwkJSUNTX0RNQTBfRSB8IElDU19ETUExX0U7CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2ludGNzcl9iaXRzLAorCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0lOVFJDU19SRUcpOworfQorCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfc3ViZGV2aWNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl2b2lkICpkaW9fODI1NV9pb2Jhc2U7CisJaW50IGk7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEwKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJVEhFUiB8IFNERl9DTURfUkVBRDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82MFhYKQorCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NPTU1PTiB8IFNERl9ESUZGOworCWVsc2UgaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjRYWCkKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9ESUZGOworCS8qIFhYWCBOdW1iZXIgb2YgaW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlIGlzIGlnbm9yZWQgKi8KKwlzLT5uX2NoYW4gPSBib2FyZChkZXYpLT5haV9zZV9jaGFuczsKKwlzLT5sZW5fY2hhbmxpc3QgPSAweDIwMDA7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkKGRldiktPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IGJvYXJkKGRldiktPmFpX3JhbmdlX3RhYmxlOworCXMtPmluc25fcmVhZCA9IGFpX3JpbnNuOworCXMtPmluc25fY29uZmlnID0gYWlfY29uZmlnX2luc247CisJcy0+ZG9fY21kID0gYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBhaV9jbWR0ZXN0OworCXMtPmNhbmNlbCA9IGFpX2NhbmNlbDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCXVuc2lnbmVkIGludCBpOworCQl1aW50OF90IGRhdGE7CisJCS8vIHNldCBhZGMgdG8gcmVhZCBmcm9tIGlucHV0cyAobm90IGludGVybmFsIGNhbGlicmF0aW9uIHNvdXJjZXMpCisJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzID0gYWRjX3NyY180MDIwX2JpdHMoNCk7CisJCS8vIHNldCBjaGFubmVscyB0byArLTUgdm9sdCBpbnB1dCByYW5nZXMKKwkJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0gYXR0ZW51YXRlX2JpdChpKTsKKwkJZGF0YSA9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzOworCQlpMmNfd3JpdGUoZGV2LCBSQU5HRV9DQUxfSTJDX0FERFIsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCX0KKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKGJvYXJkKGRldiktPmFvX25jaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfAorCQkJU0RGX0NNRF9XUklURTsKKwkJcy0+bl9jaGFuID0gYm9hcmQoZGV2KS0+YW9fbmNoYW47CisJCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZChkZXYpLT5hb19iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gYm9hcmQoZGV2KS0+YW9fcmFuZ2VfdGFibGU7CisJCXMtPmluc25fcmVhZCA9IGFvX3JlYWRiYWNrX2luc247CisJCXMtPmluc25fd3JpdGUgPSBhb193aW5zbjsKKwkJaWYgKGFvX2NtZF9pc19zdXBwb3J0ZWQoYm9hcmQoZGV2KSkpIHsKKwkJCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwkJCXMtPmRvX2NtZHRlc3QgPSBhb19jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gYW9fY21kOworCQkJcy0+bGVuX2NoYW5saXN0ID0gYm9hcmQoZGV2KS0+YW9fbmNoYW47CisJCQlzLT5jYW5jZWwgPSBhb19jYW5jZWw7CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8vIGRpZ2l0YWwgaW5wdXQKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82NFhYKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSA0OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gZGlfcmJpdHM7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyBkaWdpdGFsIG91dHB1dAorCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzY0WFgpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSA0OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gZG9fd2JpdHM7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvKiA4MjU1ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJaWYgKGJvYXJkKGRldiktPmhhc184MjU1KSB7CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJCWRpb184MjU1X2lvYmFzZSA9CisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEk4MjU1XzQwMjBfUkVHOworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGRpb19jYWxsYmFja180MDIwLAorCQkJCSh1bnNpZ25lZCBsb25nKWRpb184MjU1X2lvYmFzZSk7CisJCX0gZWxzZSB7CisJCQlkaW9fODI1NV9pb2Jhc2UgPQorCQkJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElPXzgyNTVfT0ZGU0VUOworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGRpb19jYWxsYmFjaywKKwkJCQkodW5zaWduZWQgbG9uZylkaW9fODI1NV9pb2Jhc2UpOworCQl9CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyA4IGNoYW5uZWwgZGlvIGZvciA2MHh4CisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDU7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjBYWCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9IDg7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2NvbmZpZyA9IGRpb182MHh4X2NvbmZpZ19pbnNuOworCQlzLT5pbnNuX2JpdHMgPSBkaW9fNjB4eF93Yml0czsKKwl9IGVsc2UKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCS8vIGNhbGRhYworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gODsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQlzLT5tYXhkYXRhID0gMHhmZmY7CisJZWxzZQorCQlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBjYWxpYl9yZWFkX2luc247CisJcy0+aW5zbl93cml0ZSA9IGNhbGliX3dyaXRlX2luc247CisJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQljYWxkYWNfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisKKwkvLyAyIGNoYW5uZWwgYWQ4NDAyIHBvdGVudGlvbWV0ZXIKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNzsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82NFhYKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5uX2NoYW4gPSAyOworCQlzLT5pbnNuX3JlYWQgPSBhZDg0MDJfcmVhZF9pbnNuOworCQlzLT5pbnNuX3dyaXRlID0gYWQ4NDAyX3dyaXRlX2luc247CisJCXMtPm1heGRhdGEgPSAweGZmOworCQlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspCisJCQlhZDg0MDJfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvL3NlcmlhbCBFRVBST00sIGlmIHByZXNlbnQKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgODsKKwlpZiAocmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9DT05UUk9MX1JFRykgJiBDVExfRUVDSEspIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5uX2NoYW4gPSAxMjg7CisJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCXMtPmluc25fcmVhZCA9IGVlcHJvbV9yZWFkX2luc247CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyB1c2VyIGNvdW50ZXIgc3ViZCBYWFgKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgOTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfcGx4X2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpdihkZXYpLT5wbHhfaW50Y3NyX2JpdHMgPSAwOworCXdyaXRlbChwcml2KGRldiktPnBseF9pbnRjc3JfYml0cywKKwkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zdGNfcmVnaXN0ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVpbnQxNl90IGJpdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gYml0IHNob3VsZCBiZSBzZXQgZm9yIDYwMjUsIGFsdGhvdWdoIGRvY3Mgc2F5IGJvYXJkcyB3aXRoIDw9IDE2IGNoYW5zIHNob3VsZCBiZSBjbGVhcmVkIFhYWAorCWlmICgxKQorCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IEFEQ19RVUVVRV9DT05GSUdfQklUOworCXdyaXRldyhwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlRST0wxX1JFRyk7CisKKwkvLyA2NDAyLzE2IG1hbnVhbCBzYXlzIHRoaXMgcmVnaXN0ZXIgbXVzdCBiZSBpbml0aWFsaXplZCB0byAweGZmPworCXdyaXRldygweGZmLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NBTVBMRV9JTlRFUlZBTF9VUFBFUl9SRUcpOworCisJYml0cyA9IFNMT1dfREFDX0JJVCB8IERNQV9DSF9TRUxFQ1RfQklUOworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCWJpdHMgfD0gSU5URVJOQUxfQ0xPQ0tfNDAyMF9CSVRTOworCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gYml0czsKKwl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX0NPTkZJR19SRUcpOworCisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQVFfU1lOQ19SRUcpOworCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzZXQgZmlmb3MgdG8gbWF4aW11bSBzaXplCisJcHJpdihkZXYpLT5maWZvX3NpemVfYml0cyB8PSBEQUNfRklGT19CSVRTOworCXNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKGRldiwKKwkJYm9hcmQoZGV2KS0+YWlfZmlmby0+bWF4X3NlZ21lbnRfbGVuZ3RoKTsKKworCXByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMgPSBEQUNfT1VUUFVUX0VOQUJMRV9CSVQ7CisJcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzID0JLyogRU5fREFDX0lOVFJfU1JDX0JJVCB8IERBQ19JTlRSX1FFTVBUWV9CSVRTIHwgKi8KKwkJRU5fREFDX0RPTkVfSU5UUl9CSVQgfCBFTl9EQUNfVU5ERVJSVU5fQklUOworCXdyaXRldyhwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBJTlRSX0VOQUJMRV9SRUcpOworCisJZGlzYWJsZV9haV9wYWNpbmcoZGV2KTsKK307CisKK2ludCBhbGxvY19hbmRfaW5pdF9kbWFfbWVtYmVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCS8vIGFsb2NhdGUgcGNpIGRtYSBidWZmZXJzCisJZm9yIChpID0gMDsgaSA8IGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpOyBpKyspIHsKKwkJcHJpdihkZXYpLT5haV9idWZmZXJbaV0gPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsIERNQV9CVUZGRVJfU0laRSwKKwkJCSZwcml2KGRldiktPmFpX2J1ZmZlcl9idXNfYWRkcltpXSk7CisJCWlmIChwcml2KGRldiktPmFpX2J1ZmZlcltpXSA9PSBOVUxMKSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgQU9fRE1BX1JJTkdfQ09VTlQ7IGkrKykgeworCQlpZiAoYW9fY21kX2lzX3N1cHBvcnRlZChib2FyZChkZXYpKSkgeworCQkJcHJpdihkZXYpLT5hb19idWZmZXJbaV0gPQorCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCURNQV9CVUZGRVJfU0laRSwKKwkJCQkmcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJaWYgKHByaXYoZGV2KS0+YW9fYnVmZmVyW2ldID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKwkvLyBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvcnMKKwlwcml2KGRldiktPmFpX2RtYV9kZXNjID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqIGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpLAorCQkmcHJpdihkZXYpLT5haV9kbWFfZGVzY19idXNfYWRkcik7CisJaWYgKHByaXYoZGV2KS0+YWlfZG1hX2Rlc2MgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJREVCVUdfUFJJTlQoImFpIGRtYSBkZXNjcmlwdG9ycyBzdGFydCBhdCBidXMgYWRkciAweCV4XG4iLAorCQlwcml2KGRldiktPmFpX2RtYV9kZXNjX2J1c19hZGRyKTsKKwlpZiAoYW9fY21kX2lzX3N1cHBvcnRlZChib2FyZChkZXYpKSkgeworCQlwcml2KGRldiktPmFvX2RtYV9kZXNjID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBwbHhfZG1hX2Rlc2MpICogQU9fRE1BX1JJTkdfQ09VTlQsCisJCQkmcHJpdihkZXYpLT5hb19kbWFfZGVzY19idXNfYWRkcik7CisJCWlmIChwcml2KGRldiktPmFvX2RtYV9kZXNjID09IE5VTEwpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCURFQlVHX1BSSU5UKCJhbyBkbWEgZGVzY3JpcHRvcnMgc3RhcnQgYXQgYnVzIGFkZHIgMHgleFxuIiwKKwkJCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NfYnVzX2FkZHIpOworCX0KKwkvLyBpbml0aWFsaXplIGRtYSBkZXNjcmlwdG9ycworCWZvciAoaSA9IDA7IGkgPCBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKTsgaSsrKSB7CisJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0ucGNpX3N0YXJ0X2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5haV9idWZmZXJfYnVzX2FkZHJbaV0pOworCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQkJcHJpdihkZXYpLT5haV9kbWFfZGVzY1tpXS5sb2NhbF9zdGFydF9hZGRyID0KKwkJCQljcHVfdG9fbGUzMihwcml2KGRldiktPmxvY2FsMV9pb2Jhc2UgKworCQkJCUFEQ19GSUZPX1JFRyk7CisJCWVsc2UKKwkJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0ubG9jYWxfc3RhcnRfYWRkciA9CisJCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5sb2NhbDBfaW9iYXNlICsKKwkJCQlBRENfRklGT19SRUcpOworCQlwcml2KGRldiktPmFpX2RtYV9kZXNjW2ldLnRyYW5zZmVyX3NpemUgPSBjcHVfdG9fbGUzMigwKTsKKwkJcHJpdihkZXYpLT5haV9kbWFfZGVzY1tpXS5uZXh0ID0KKwkJCWNwdV90b19sZTMyKChwcml2KGRldiktPmFpX2RtYV9kZXNjX2J1c19hZGRyICsgKChpICsKKwkJCQkJCTEpICUKKwkJCQkJYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSkpICoKKwkJCQlzaXplb2YocHJpdihkZXYpLT4KKwkJCQkJYWlfZG1hX2Rlc2NbMF0pKSB8IFBMWF9ERVNDX0lOX1BDSV9CSVQgfAorCQkJUExYX0lOVFJfVEVSTV9DT1VOVCB8IFBMWF9YRkVSX0xPQ0FMX1RPX1BDSSk7CisJfQorCWlmIChhb19jbWRfaXNfc3VwcG9ydGVkKGJvYXJkKGRldikpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBT19ETUFfUklOR19DT1VOVDsgaSsrKSB7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLnBjaV9zdGFydF9hZGRyID0KKwkJCQljcHVfdG9fbGUzMihwcml2KGRldiktPmFvX2J1ZmZlcl9idXNfYWRkcltpXSk7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLmxvY2FsX3N0YXJ0X2FkZHIgPQorCQkJCWNwdV90b19sZTMyKHByaXYoZGV2KS0+bG9jYWwwX2lvYmFzZSArCisJCQkJREFDX0ZJRk9fUkVHKTsKKwkJCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbaV0udHJhbnNmZXJfc2l6ZSA9CisJCQkJY3B1X3RvX2xlMzIoMCk7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLm5leHQgPQorCQkJCWNwdV90b19sZTMyKChwcml2KGRldiktPmFvX2RtYV9kZXNjX2J1c19hZGRyICsKKwkJCQkJKChpICsgMSkgJSAoQU9fRE1BX1JJTkdfQ09VTlQpKSAqCisJCQkJCXNpemVvZihwcml2KGRldiktPgorCQkJCQkJYW9fZG1hX2Rlc2NbMF0pKSB8CisJCQkJUExYX0RFU0NfSU5fUENJX0JJVCB8IFBMWF9JTlRSX1RFUk1fQ09VTlQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Fybl9leHRlcm5hbF9xdWV1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwljb21lZGlfZXJyb3IoZGV2LAorCQkiQU8gY29tbWFuZCBhbmQgQUkgZXh0ZXJuYWwgY2hhbm5lbCBxdWV1ZSBjYW5ub3QgYmUgdXNlZCBzaW11bHRhbmVvdXNseS4iKTsKKwljb21lZGlfZXJyb3IoZGV2LAorCQkiVXNlIGludGVybmFsIEFJIGNoYW5uZWwgcXVldWUgKGNoYW5uZWxzIG11c3QgYmUgY29uc2VjdXRpdmUgYW5kIHVzZSBzYW1lIHJhbmdlL2FyZWYpIik7Cit9CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4KKyAqLworc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCXVpbnQzMl90IGxvY2FsX3JhbmdlLCBsb2NhbF9kZWNvZGU7CisJaW50IHJldHZhbDsKKworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRhczY0XG4iLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaWRhczY0X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4KKyAqLworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJLy8gaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/CisJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQorCQkJY29udGludWU7CisJCS8vIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX2JvYXJkcygpOyBpbmRleCsrKSB7CisJCQlpZiAocGNpZGFzNjRfYm9hcmRzW2luZGV4XS5kZXZpY2VfaWQgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJcHJpdihkZXYpLT5od19kZXYgPSBwY2lkZXY7CisJCQlkZXYtPmJvYXJkX3B0ciA9IHBjaWRhczY0X2JvYXJkcyArIGluZGV4OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRldi0+Ym9hcmRfcHRyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRldi0+Ym9hcmRfcHRyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJObyBzdXBwb3J0ZWQgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXByaW50aygiRm91bmQgJXMgb24gYnVzICVpLCBzbG90ICVpXG4iLCBib2FyZChkZXYpLT5uYW1lLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSk7CisKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBkcml2ZXJfY2JfcGNpZGFzLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiIGZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwkvL0luaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKKworCXByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIFBMWDkwODBfQkFERFJJTkRFWCk7CisJcHJpdihkZXYpLT5tYWluX3BoeXNfaW9iYXNlID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgTUFJTl9CQUREUklOREVYKTsKKwlwcml2KGRldiktPmRpb19jb3VudGVyX3BoeXNfaW9iYXNlID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgRElPX0NPVU5URVJfQkFERFJJTkRFWCk7CisKKwkvLyByZW1hcCwgd29uJ3Qgd29yayB3aXRoIDIuMCBrZXJuZWxzIGJ1dCB3aG8gY2FyZXMKKwlwcml2KGRldiktPnBseDkwODBfaW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPnBseDkwODBfcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBQTFg5MDgwX0JBRERSSU5ERVgpKTsKKwlwcml2KGRldiktPm1haW5faW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPm1haW5fcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBNQUlOX0JBRERSSU5ERVgpKTsKKwlwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSA9CisJCWlvcmVtYXAocHJpdihkZXYpLT5kaW9fY291bnRlcl9waHlzX2lvYmFzZSwKKwkJcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIERJT19DT1VOVEVSX0JBRERSSU5ERVgpKTsKKworCWlmICghcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSB8fCAhcHJpdihkZXYpLT5tYWluX2lvYmFzZQorCQl8fCAhcHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UpIHsKKwkJcHJpbnRrKCIgZmFpbGVkIHRvIHJlbWFwIGlvIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCURFQlVHX1BSSU5UKCIgcGx4OTA4MCByZW1hcHBlZCB0byAweCVwXG4iLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlKTsKKwlERUJVR19QUklOVCgiIG1haW4gcmVtYXBwZWQgdG8gMHglcFxuIiwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSk7CisJREVCVUdfUFJJTlQoIiBkaW9jb3VudGVyIHJlbWFwcGVkIHRvIDB4JXBcbiIsCisJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlKTsKKworCS8vIGZpZ3VyZSBvdXQgd2hhdCBsb2NhbCBhZGRyZXNzZXMgYXJlCisJbG9jYWxfcmFuZ2UgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsKKwkJUExYX0xBUzBSTkdfUkVHKSAmIExSTkdfTUVNX01BU0s7CisJbG9jYWxfZGVjb2RlID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCVBMWF9MQVMwTUFQX1JFRykgJiBsb2NhbF9yYW5nZSAmIExNQVBfTUVNX01BU0s7CisJcHJpdihkZXYpLT5sb2NhbDBfaW9iYXNlID0KKwkJKCh1aW50MzJfdCkgcHJpdihkZXYpLT4KKwkJbWFpbl9waHlzX2lvYmFzZSAmIH5sb2NhbF9yYW5nZSkgfCBsb2NhbF9kZWNvZGU7CisJbG9jYWxfcmFuZ2UgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsKKwkJUExYX0xBUzFSTkdfUkVHKSAmIExSTkdfTUVNX01BU0s7CisJbG9jYWxfZGVjb2RlID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCVBMWF9MQVMxTUFQX1JFRykgJiBsb2NhbF9yYW5nZSAmIExNQVBfTUVNX01BU0s7CisJcHJpdihkZXYpLT5sb2NhbDFfaW9iYXNlID0KKwkJKCh1aW50MzJfdCkgcHJpdihkZXYpLT4KKwkJZGlvX2NvdW50ZXJfcGh5c19pb2Jhc2UgJiB+bG9jYWxfcmFuZ2UpIHwgbG9jYWxfZGVjb2RlOworCisJREVCVUdfUFJJTlQoIiBsb2NhbCAwIGlvIGFkZHIgMHgleFxuIiwgcHJpdihkZXYpLT5sb2NhbDBfaW9iYXNlKTsKKwlERUJVR19QUklOVCgiIGxvY2FsIDEgaW8gYWRkciAweCV4XG4iLCBwcml2KGRldiktPmxvY2FsMV9pb2Jhc2UpOworCisJcmV0dmFsID0gYWxsb2NfYW5kX2luaXRfZG1hX21lbWJlcnMoZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXByaXYoZGV2KS0+aHdfcmV2aXNpb24gPQorCQlod19yZXZpc2lvbihkZXYsIHJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19TVEFUVVNfUkVHKSk7CisJcHJpbnRrKCIgc3RjIGhhcmR3YXJlIHJldmlzaW9uICVpXG4iLCBwcml2KGRldiktPmh3X3JldmlzaW9uKTsKKwlpbml0X3BseDkwODAoZGV2KTsKKwlpbml0X3N0Y19yZWdpc3RlcnMoZGV2KTsKKwkvLyBnZXQgaXJxCisJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgaGFuZGxlX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkiY2JfcGNpZGFzNjQiLCBkZXYpKSB7CisJCXByaW50aygiIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIHBjaWRldi0+aXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+aXJxID0gcGNpZGV2LT5pcnE7CisJcHJpbnRrKCIgaXJxICV1XG4iLCBkZXYtPmlycSk7CisKKwlyZXR2YWwgPSBzZXR1cF9zdWJkZXZpY2VzKGRldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBkZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkYXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAocHJpdihkZXYpKSB7CisJCWlmIChwcml2KGRldiktPmh3X2RldikgeworCQkJaWYgKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpIHsKKwkJCQlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpOworCQkJfQorCQkJaWYgKHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UpCisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UpOworCQkJaWYgKHByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlKQorCQkJCWlvdW5tYXAoKHZvaWQgKilwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSk7CisJCQkvLyBmcmVlIHBjaSBkbWEgYnVmZmVycworCQkJZm9yIChpID0gMDsgaSA8IGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpOyBpKyspIHsKKwkJCQlpZiAocHJpdihkZXYpLT5haV9idWZmZXJbaV0pCisJCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJCQlwcml2KGRldiktPmFpX2J1ZmZlcltpXSwKKwkJCQkJCXByaXYoZGV2KS0+CisJCQkJCQlhaV9idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IEFPX0RNQV9SSU5HX0NPVU5UOyBpKyspIHsKKwkJCQlpZiAocHJpdihkZXYpLT5hb19idWZmZXJbaV0pCisJCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJCQlwcml2KGRldiktPmFvX2J1ZmZlcltpXSwKKwkJCQkJCXByaXYoZGV2KS0+CisJCQkJCQlhb19idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJfQorCQkJLy8gZnJlZSBkbWEgZGVzY3JpcHRvcnMKKwkJCWlmIChwcml2KGRldiktPmFpX2RtYV9kZXNjKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqCisJCQkJCWFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpLAorCQkJCQlwcml2KGRldiktPmFpX2RtYV9kZXNjLAorCQkJCQlwcml2KGRldiktPmFpX2RtYV9kZXNjX2J1c19hZGRyKTsKKwkJCWlmIChwcml2KGRldiktPmFvX2RtYV9kZXNjKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqCisJCQkJCUFPX0RNQV9SSU5HX0NPVU5ULAorCQkJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjLAorCQkJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjX2J1c19hZGRyKTsKKwkJCWlmIChwcml2KGRldiktPm1haW5fcGh5c19pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUocHJpdihkZXYpLT5od19kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQocHJpdihkZXYpLT5od19kZXYpOworCQl9CisJfQorCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0cyA9IDAsIG4sIGk7CisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwOworCisJREVCVUdfUFJJTlQoImNoYW5zcGVjIDB4JXhcbiIsIGluc24tPmNoYW5zcGVjKTsKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gZGlzYWJsZSBjYXJkJ3MgYW5hbG9nIGlucHV0IGludGVycnVwdCBzb3VyY2VzIGFuZCBwYWNpbmcKKwkvLyA0MDIwIGdlbmVyYXRlcyBkYWMgZG9uZSBpbnRlcnJ1cHRzIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRpc2FibGVkCisJZGlzYWJsZV9haV9wYWNpbmcoZGV2KTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWlmIChpbnNuLT5jaGFuc3BlYyAmIENSX0FMVF9GSUxURVIpCisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gQURDX0RJVEhFUl9CSVQ7CisJZWxzZQorCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfRElUSEVSX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05UUk9MMV9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ICE9IExBWU9VVF80MDIwKSB7CisJCS8vIHVzZSBpbnRlcm5hbCBxdWV1ZQorCQlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzICY9IH5FWFRfUVVFVUVfQklUOworCQl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19DT05GSUdfUkVHKTsKKworCQkvLyBBTFRfU09VUkNFIGlzIGludGVybmFsIGNhbGlicmF0aW9uIHJlZmVyZW5jZQorCQlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKSB7CisJCQl1bnNpZ25lZCBpbnQgY2FsX2VuX2JpdDsKKworCQkJREVCVUdfUFJJTlQoInJlYWRpbmcgY2FsaWJyYXRpb24gc291cmNlXG4iKTsKKwkJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzYwWFgpCisJCQkJY2FsX2VuX2JpdCA9IENBTF9FTl82MFhYX0JJVDsKKwkJCWVsc2UKKwkJCQljYWxfZW5fYml0ID0gQ0FMX0VOXzY0WFhfQklUOworCQkJLy8gc2VsZWN0IGludGVybmFsIHJlZmVyZW5jZSBzb3VyY2UgdG8gY29ubmVjdCB0byBjaGFubmVsIDAKKwkJCXdyaXRldyhjYWxfZW5fYml0IHwgYWRjX3NyY19iaXRzKHByaXYoZGV2KS0+CisJCQkJCWNhbGlicmF0aW9uX3NvdXJjZSksCisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCX0gZWxzZSB7CisJCQkvLyBtYWtlIHN1cmUgaW50ZXJuYWwgY2FsaWJyYXRpb24gc291cmNlIGlzIHR1cm5lZCBvZmYKKwkJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwkJfQorCQkvLyBsb2FkIGludGVybmFsIHF1ZXVlCisJCWJpdHMgPSAwOworCQkvLyBzZXQgZ2FpbgorCQliaXRzIHw9IGFpX3JhbmdlX2JpdHNfNnh4eChkZXYsIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CisJCS8vIHNldCBzaW5nbGUtZW5kZWQgLyBkaWZmZXJlbnRpYWwKKwkJYml0cyB8PSBzZV9kaWZmX2JpdF82eHh4KGRldiwgYXJlZiA9PSBBUkVGX0RJRkYpOworCQlpZiAoYXJlZiA9PSBBUkVGX0NPTU1PTikKKwkJCWJpdHMgfD0gQURDX0NPTU1PTl9CSVQ7CisJCWJpdHMgfD0gYWRjX2NoYW5fYml0cyhjaGFubmVsKTsKKwkJLy8gc2V0IHN0b3AgY2hhbm5lbAorCQl3cml0ZXcoYWRjX2NoYW5fYml0cyhjaGFubmVsKSwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfSElHSF9SRUcpOworCQkvLyBzZXQgc3RhcnQgY2hhbm5lbCwgYW5kIHJlc3Qgb2Ygc2V0dGluZ3MKKwkJd3JpdGV3KGJpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfTE9BRF9SRUcpOworCX0gZWxzZSB7CisJCXVpbnQ4X3Qgb2xkX2NhbF9yYW5nZV9iaXRzID0gcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisKKwkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgJj0gfkFEQ19TUkNfNDAyMF9NQVNLOworCQlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKSB7CisJCQlERUJVR19QUklOVCgicmVhZGluZyBjYWxpYnJhdGlvbiBzb3VyY2VcbiIpOworCQkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0KKwkJCQlhZGNfc3JjXzQwMjBfYml0cyhwcml2KGRldiktPgorCQkJCWNhbGlicmF0aW9uX3NvdXJjZSk7CisJCX0gZWxzZSB7CS8vc2VsZWN0IEJOQyBpbnB1dHMKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9IGFkY19zcmNfNDAyMF9iaXRzKDQpOworCQl9CisJCS8vIHNlbGVjdCByYW5nZQorCQlpZiAocmFuZ2UgPT0gMCkKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9IGF0dGVudWF0ZV9iaXQoY2hhbm5lbCk7CisJCWVsc2UKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzICY9CisJCQkJfmF0dGVudWF0ZV9iaXQoY2hhbm5lbCk7CisJCS8vIHVwZGF0ZSBjYWxpYnJhdGlvbi9yYW5nZSBpMmMgcmVnaXN0ZXIgb25seSBpZiBuZWNlc3NhcnksIGFzIGl0IGlzIHZlcnkgc2xvdworCQlpZiAob2xkX2NhbF9yYW5nZV9iaXRzICE9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzKSB7CisJCQl1aW50OF90IGkyY19kYXRhID0gcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisJCQlpMmNfd3JpdGUoZGV2LCBSQU5HRV9DQUxfSTJDX0FERFIsICZpMmNfZGF0YSwKKwkJCQlzaXplb2YoaTJjX2RhdGEpKTsKKwkJfQorCisJCS8qIDQwMjAgbWFudWFsIGFza3MgdGhhdCBzYW1wbGUgaW50ZXJ2YWwgcmVnaXN0ZXIgdG8gYmUgc2V0IGJlZm9yZSB3cml0aW5nIHRvIGNvbnZlcnQgcmVnaXN0ZXIuCisJCSAqIFVzaW5nIHNvbWV3aGF0IGFyYml0cmFyeSBzZXR0aW5nIG9mIDQgbWFzdGVyIGNsb2NrIHRpY2tzID0gMC4xIHVzZWMgKi8KKwkJd3JpdGV3KDAsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NBTVBMRV9JTlRFUlZBTF9VUFBFUl9SRUcpOworCQl3cml0ZXcoMiwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfU0FNUExFX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCisJCS8vIGNsZWFyIGFkYyBidWZmZXIgKGluc2lkZSBsb29wIGZvciA0MDIwIHNha2UpCisJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0JVRkZFUl9DTEVBUl9SRUcpOworCisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiwgYml0cyBzZW50IG9ubHkgbWF0dGVyIGZvciA0MDIwICovCisJCXdyaXRldyhhZGNfY29udmVydF9jaGFuXzQwMjBfYml0cyhDUl9DSEFOKGluc24tPmNoYW5zcGVjKSksCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlZFUlRfUkVHKTsKKworCQkvLyB3YWl0IGZvciBkYXRhCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWJpdHMgPSByZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfU1RBVFVTX1JFRyk7CisJCQlERUJVR19QUklOVCgiIHBpcGUgYml0cyAweCV4XG4iLCBwaXBlX2Z1bGxfYml0cyhiaXRzKSk7CisJCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCQkJaWYgKHJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJCQkJQURDX1dSSVRFX1BOVFJfUkVHKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmIChwaXBlX2Z1bGxfYml0cyhiaXRzKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCURFQlVHX1BSSU5UKCIgbG9vcGVkICVpIHRpbWVzIHdhaXRpbmcgZm9yIGRhdGFcbiIsIGkpOworCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiIGFuYWxvZyBpbnB1dCByZWFkIGluc24gdGltZWQgb3V0Iik7CisJCQlydF9wcmludGsoIiBzdGF0dXMgMHgleFxuIiwgYml0cyk7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCQlkYXRhW25dID0KKwkJCQlyZWFkbChwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArCisJCQkJQURDX0ZJRk9fUkVHKSAmIDB4ZmZmZjsKKwkJZWxzZQorCQkJZGF0YVtuXSA9CisJCQkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIFBJUEUxX1JFQURfUkVHKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBhaV9jb25maWdfY2FsaWJyYXRpb25fc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBzb3VyY2UgPSBkYXRhWzFdOworCWludCBudW1fY2FsaWJyYXRpb25fc291cmNlczsKKworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzYwWFgpCisJCW51bV9jYWxpYnJhdGlvbl9zb3VyY2VzID0gMTY7CisJZWxzZQorCQludW1fY2FsaWJyYXRpb25fc291cmNlcyA9IDg7CisJaWYgKHNvdXJjZSA+PSBudW1fY2FsaWJyYXRpb25fc291cmNlcykgeworCQlwcmludGsoImludmFsaWQgY2FsaWJyYXRpb24gc291cmNlOiAlaVxuIiwgc291cmNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCVUdfUFJJTlQoInNldHRpbmcgY2FsaWJyYXRpb24gc291cmNlIHRvICVpXG4iLCBzb3VyY2UpOworCXByaXYoZGV2KS0+Y2FsaWJyYXRpb25fc291cmNlID0gc291cmNlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2Jsb2NrX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGZpZm9fc2l6ZTsKKwljb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvICpjb25zdCBmaWZvID0gYm9hcmQoZGV2KS0+YWlfZmlmbzsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSwgcmVxdWVzdGVkX2Jsb2NrX3NpemU7CisJaW50IHJldHZhbDsKKworCXJlcXVlc3RlZF9ibG9ja19zaXplID0gZGF0YVsxXTsKKworCWlmIChyZXF1ZXN0ZWRfYmxvY2tfc2l6ZSkgeworCQlmaWZvX3NpemUgPQorCQkJcmVxdWVzdGVkX2Jsb2NrX3NpemUgKiBmaWZvLT5udW1fc2VnbWVudHMgLworCQkJYnl0ZXNfaW5fc2FtcGxlOworCisJCXJldHZhbCA9IHNldF9haV9maWZvX3NpemUoZGV2LCBmaWZvX3NpemUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisKKwl9CisKKwlibG9ja19zaXplID0gYWlfZmlmb19zaXplKGRldikgLyBmaWZvLT5udW1fc2VnbWVudHMgKiBieXRlc19pbl9zYW1wbGU7CisKKwlkYXRhWzFdID0gYmxvY2tfc2l6ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFpX2NvbmZpZ19tYXN0ZXJfY2xvY2tfNDAyMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aXNvciA9IGRhdGFbNF07CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoZGl2aXNvciA8IDIpIHsKKwkJZGl2aXNvciA9IDI7CisJCXJldHZhbCA9IC1FQUdBSU47CisJfQorCisJc3dpdGNoIChkYXRhWzFdKSB7CisJY2FzZSBDT01FRElfRVZfU0NBTl9CRUdJTjoKKwkJcHJpdihkZXYpLT5leHRfY2xvY2suZGl2aXNvciA9IGRpdmlzb3I7CisJCXByaXYoZGV2KS0+ZXh0X2Nsb2NrLmNoYW5zcGVjID0gZGF0YVsyXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWRhdGFbNF0gPSBkaXZpc29yOworCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IDU7Cit9CisKKy8vIFhYWCBjb3VsZCBhZGQgc3VwcG9ydCBmb3IgNjB4eCBzZXJpZXMKK3N0YXRpYyBpbnQgYWlfY29uZmlnX21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXN3aXRjaCAoYm9hcmQoZGV2KS0+bGF5b3V0KSB7CisJY2FzZSBMQVlPVVRfNDAyMDoKKwkJcmV0dXJuIGFpX2NvbmZpZ19tYXN0ZXJfY2xvY2tfNDAyMChkZXYsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpZCA9IGRhdGFbMF07CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBJTlNOX0NPTkZJR19BTFRfU09VUkNFOgorCQlyZXR1cm4gYWlfY29uZmlnX2NhbGlicmF0aW9uX3NvdXJjZShkZXYsIGRhdGEpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0JMT0NLX1NJWkU6CisJCXJldHVybiBhaV9jb25maWdfYmxvY2tfc2l6ZShkZXYsIGRhdGEpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1RJTUVSXzE6CisJCXJldHVybiBhaV9jb25maWdfbWFzdGVyX2Nsb2NrKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJdW5zaWduZWQgaW50IHRtcF9hcmcsIHRtcF9hcmcyOworCWludCBpOworCWludCBhcmVmOworCXVuc2lnbmVkIGludCB0cmlnZ2VyczsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJdHJpZ2dlcnMgPSBUUklHX1RJTUVSOworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCXRyaWdnZXJzIHw9IFRSSUdfT1RIRVI7CisJZWxzZQorCQl0cmlnZ2VycyB8PSBUUklHX0ZPTExPVzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IHRyaWdnZXJzOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCXRyaWdnZXJzID0gVFJJR19USU1FUjsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQl0cmlnZ2VycyB8PSBUUklHX05PVzsKKwllbHNlCisJCXRyaWdnZXJzIHw9IFRSSUdfRVhUOworCWNtZC0+Y29udmVydF9zcmMgJj0gdHJpZ2dlcnM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX0VYVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLy8gdW5pcXVlbmVzcyBjaGVjaworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfT1RIRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYKKwkJY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwkvLyBjb21wYXRpYmlsaXR5IGNoZWNrCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQkJZXJyKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IGJvYXJkKGRldiktPmFpX3NwZWVkKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IGJvYXJkKGRldiktPmFpX3NwZWVkOworCQkJCWVycisrOworCQkJfQorCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCS8vIGlmIHNjYW5zIGFyZSB0aW1lZCBmYXN0ZXIgdGhhbiBjb252ZXJzaW9uIHJhdGUgYWxsb3dzCisJCQkJaWYgKGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbiA+CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJCQljbWQtPmNvbnZlcnRfYXJnICoKKwkJCQkJCWNtZC0+Y2hhbmxpc3RfbGVuOworCQkJCQllcnIrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfRVhUOgorCQlicmVhazsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wX2FyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCXRtcF9hcmcyID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY2hlY2tfYWRjX3RpbWluZyhkZXYsIGNtZCk7CisJCWlmICh0bXBfYXJnICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKHRtcF9hcmcyICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIGRvZXNuJ3QgY2hhbmdlIGFuYWxvZyByZWZlcmVuY2UgbWlkIGNoYW5saXN0CisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoYXJlZiAhPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImFsbCBlbGVtZW50cyBpbiBjaGFubGlzdCBtdXN0IHVzZSB0aGUgc2FtZSBhbmFsb2cgcmVmZXJlbmNlIik7CisJCQkJZXJyKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLy8gY2hlY2sgNDAyMCBjaGFubGlzdAorCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCQl1bnNpZ25lZCBpbnQgZmlyc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJCWZpcnN0X2NoYW5uZWwgKyBpKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiY2hhbmxpc3QgbXVzdCB1c2UgY29uc2VjdXRpdmUgY2hhbm5lbHMiKTsKKwkJCQkJZXJyKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAzKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5saXN0IGNhbm5vdCBiZSAzIGNoYW5uZWxzIGxvbmcsIHVzZSAxLCAyLCBvciA0IGNoYW5uZWxzIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzZV9od19zYW1wbGVfY291bnRlcihzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKy8vIGRpc2FibGUgZm9yIG5vdyB1bnRpbCBJIHdvcmsgb3V0IGEgcmFjZQorCXJldHVybiAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3BfYXJnIDw9IG1heF9jb3VudGVyX3ZhbHVlKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9zYW1wbGVfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJLy8gc2V0IHNvZnR3YXJlIGNvdW50CisJCXByaXYoZGV2KS0+YWlfY291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8vIGxvYWQgaGFyZHdhcmUgY29udmVyc2lvbiBjb3VudGVyCisJaWYgKHVzZV9od19zYW1wbGVfY291bnRlcihjbWQpKSB7CisJCXdyaXRldyhjbWQtPnN0b3BfYXJnICYgMHhmZmZmLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT1VOVF9MT1dFUl9SRUcpOworCQl3cml0ZXcoKGNtZC0+c3RvcF9hcmcgPj4gMTYpICYgMHhmZiwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09VTlRfVVBQRVJfUkVHKTsKKwl9IGVsc2UgeworCQl3cml0ZXcoMSwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT1VOVF9MT1dFUl9SRUcpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZG1hX3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IG51bV9zYW1wbGVzOworCisJbnVtX3NhbXBsZXMgPQorCQlwcml2KGRldiktPmFpX2ZpZm9fc2VnbWVudF9sZW5ndGggKgorCQlib2FyZChkZXYpLT5haV9maWZvLT5zYW1wbGVfcGFja2luZ19yYXRpbzsKKwlpZiAobnVtX3NhbXBsZXMgPiBETUFfQlVGRkVSX1NJWkUgLyBzaXplb2YodWludDE2X3QpKQorCQludW1fc2FtcGxlcyA9IERNQV9CVUZGRVJfU0laRSAvIHNpemVvZih1aW50MTZfdCk7CisKKwlyZXR1cm4gbnVtX3NhbXBsZXM7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfYWlfcGFjaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkaXNhYmxlX2FpX2ludGVycnVwdHMoZGV2KTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19TV19HQVRFX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05UUk9MMV9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvKiBkaXNhYmxlIHBhY2luZywgdHJpZ2dlcmluZywgZXRjICovCisJd3JpdGV3KEFEQ19ETUFfRElTQUJMRV9CSVQgfCBBRENfU09GVF9HQVRFX0JJVFMgfCBBRENfR0FURV9MRVZFTF9CSVQsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09OVFJPTDBfUkVHKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9haV9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMgJj0KKwkJfkVOX0FEQ19JTlRSX1NSQ19CSVQgJiB+RU5fQURDX0RPTkVfSU5UUl9CSVQgJgorCQl+RU5fQURDX0FDVElWRV9JTlRSX0JJVCAmIH5FTl9BRENfU1RPUF9JTlRSX0JJVCAmCisJCX5FTl9BRENfT1ZFUlJVTl9CSVQgJiB+QURDX0lOVFJfU1JDX01BU0s7CisJd3JpdGV3KHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIElOVFJfRU5BQkxFX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCURFQlVHX1BSSU5UKCJpbnRyIGVuYWJsZSBiaXRzIDB4JXhcbiIsIHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9haV9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1aW50MzJfdCBiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwliaXRzID0gRU5fQURDX09WRVJSVU5fQklUIHwgRU5fQURDX0RPTkVfSU5UUl9CSVQgfAorCQlFTl9BRENfQUNUSVZFX0lOVFJfQklUIHwgRU5fQURDX1NUT1BfSU5UUl9CSVQ7CisJLy8gVXNlIHBpbyB0cmFuc2ZlciBhbmQgaW50ZXJydXB0IG9uIGVuZCBvZiBjb252ZXJzaW9uIGlmIFRSSUdfV0FLRV9FT1MgZmxhZyBpcyBzZXQuCisJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCS8vIDQwMjAgZG9lc24ndCBzdXBwb3J0IHBpbyB0cmFuc2ZlcnMgZXhjZXB0IGZvciBmaWZvIGRyZWdzCisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApCisJCQliaXRzIHw9IEFEQ19JTlRSX0VPU0NBTl9CSVRTIHwgRU5fQURDX0lOVFJfU1JDX0JJVDsKKwl9CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzIHw9IGJpdHM7CisJd3JpdGV3KHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIElOVFJfRU5BQkxFX1JFRyk7CisJREVCVUdfUFJJTlQoImludHIgZW5hYmxlIGJpdHMgMHgleFxuIiwgcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdWludDMyX3QgYWlfY29udmVydF9jb3VudGVyXzZ4eHgoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJLy8gc3VwcG9zZWQgdG8gbG9hZCBjb3VudGVyIHdpdGggZGVzaXJlZCBkaXZpc29yIG1pbnVzIDMKKwlyZXR1cm4gY21kLT5jb252ZXJ0X2FyZyAvIFRJTUVSX0JBU0UgLSAzOworfQorCitzdGF0aWMgdWludDMyX3QgYWlfc2Nhbl9jb3VudGVyXzZ4eHgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVpbnQzMl90IGNvdW50OworCS8vIGZpZ3VyZSBvdXQgaG93IGxvbmcgd2UgbmVlZCB0byBkZWxheSBhdCBlbmQgb2Ygc2NhbgorCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJY291bnQgPSAoY21kLT5zY2FuX2JlZ2luX2FyZyAtCisJCQkoY21kLT5jb252ZXJ0X2FyZyAqIChjbWQtPmNoYW5saXN0X2xlbiAtIDEpKSkKKwkJCS8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0ZPTExPVzoKKwkJY291bnQgPSBjbWQtPmNvbnZlcnRfYXJnIC8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gY291bnQgLSAzOworfQorCitzdGF0aWMgdWludDMyX3QgYWlfY29udmVydF9jb3VudGVyXzQwMjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yOworCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkaXZpc29yID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWNhc2UgVFJJR19PVEhFUjoKKwkJZGl2aXNvciA9IHByaXYoZGV2KS0+ZXh0X2Nsb2NrLmRpdmlzb3I7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGZhaWxlZCB0byBzZXQgYWkgcGFjaW5nISIpOworCQlkaXZpc29yID0gMTAwMDsKKwkJYnJlYWs7CisJfQorCisJLy8gc3VwcG9zZWQgdG8gbG9hZCBjb3VudGVyIHdpdGggZGVzaXJlZCBkaXZpc29yIG1pbnVzIDIgZm9yIDQwMjAKKwlyZXR1cm4gZGl2aXNvciAtIDI7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9tYXN0ZXJfY2xvY2tfNDAyMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwkvLyBzZWxlY3QgaW50ZXJuYWwvZXh0ZXJuYWwgbWFzdGVyIGNsb2NrCisJcHJpdihkZXYpLT5od19jb25maWdfYml0cyAmPSB+TUFTVEVSX0NMT0NLXzQwMjBfTUFTSzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX09USEVSKSB7CisJCWludCBjaGFuc3BlYyA9IHByaXYoZGV2KS0+ZXh0X2Nsb2NrLmNoYW5zcGVjOworCisJCWlmIChDUl9DSEFOKGNoYW5zcGVjKSkKKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gQk5DX0NMT0NLXzQwMjBfQklUUzsKKwkJZWxzZQorCQkJcHJpdihkZXYpLT5od19jb25maWdfYml0cyB8PSBFWFRfQ0xPQ0tfNDAyMF9CSVRTOworCX0gZWxzZSB7CisJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gSU5URVJOQUxfQ0xPQ0tfNDAyMF9CSVRTOworCX0KKwl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX0NPTkZJR19SRUcpOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RfbWFzdGVyX2Nsb2NrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlzd2l0Y2ggKGJvYXJkKGRldiktPmxheW91dCkgeworCWNhc2UgTEFZT1VUXzQwMjA6CisJCXNlbGVjdF9tYXN0ZXJfY2xvY2tfNDAyMChkZXYsIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zdGFydF9zeW5jKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKGNoYW5uZWwpCisJCXdyaXRlYihQTFhfRE1BX0VOX0JJVCB8IFBMWF9ETUFfU1RBUlRfQklUIHwKKwkJCVBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwllbHNlCisJCXdyaXRlYihQTFhfRE1BX0VOX0JJVCB8IFBMWF9ETUFfU1RBUlRfQklUIHwKKwkJCVBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYWlfcGFjaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1aW50MzJfdCBjb252ZXJ0X2NvdW50ZXIgPSAwLCBzY2FuX2NvdW50ZXIgPSAwOworCisJY2hlY2tfYWRjX3RpbWluZyhkZXYsIGNtZCk7CisKKwlzZWxlY3RfbWFzdGVyX2Nsb2NrKGRldiwgY21kKTsKKworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJY29udmVydF9jb3VudGVyID0gYWlfY29udmVydF9jb3VudGVyXzQwMjAoZGV2LCBjbWQpOworCX0gZWxzZSB7CisJCWNvbnZlcnRfY291bnRlciA9IGFpX2NvbnZlcnRfY291bnRlcl82eHh4KGRldiwgY21kKTsKKwkJc2Nhbl9jb3VudGVyID0gYWlfc2Nhbl9jb3VudGVyXzZ4eHgoZGV2LCBjbWQpOworCX0KKworCS8vIGxvYWQgbG93ZXIgMTYgYml0cyBvZiBjb252ZXJ0IGludGVydmFsCisJd3JpdGV3KGNvbnZlcnRfY291bnRlciAmIDB4ZmZmZiwKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TQU1QTEVfSU5URVJWQUxfTE9XRVJfUkVHKTsKKwlERUJVR19QUklOVCgiY29udmVydCBjb3VudGVyIDB4JXhcbiIsIGNvbnZlcnRfY291bnRlcik7CisJLy8gbG9hZCB1cHBlciA4IGJpdHMgb2YgY29udmVydCBpbnRlcnZhbAorCXdyaXRldygoY29udmVydF9jb3VudGVyID4+IDE2KSAmIDB4ZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfU0FNUExFX0lOVEVSVkFMX1VQUEVSX1JFRyk7CisJLy8gbG9hZCBsb3dlciAxNiBiaXRzIG9mIHNjYW4gZGVsYXkKKwl3cml0ZXcoc2Nhbl9jb3VudGVyICYgMHhmZmZmLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0RFTEFZX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJLy8gbG9hZCB1cHBlciA4IGJpdHMgb2Ygc2NhbiBkZWxheQorCXdyaXRldygoc2Nhbl9jb3VudGVyID4+IDE2KSAmIDB4ZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfREVMQVlfSU5URVJWQUxfVVBQRVJfUkVHKTsKKwlERUJVR19QUklOVCgic2NhbiBjb3VudGVyIDB4JXhcbiIsIHNjYW5fY291bnRlcik7Cit9CisKK3N0YXRpYyBpbnQgdXNlX2ludGVybmFsX3F1ZXVlXzZ4eHgoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSArIDEgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaSArIDFdKSAhPQorCQkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSArIDEpCisJCQlyZXR1cm4gMDsKKwkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaSArIDFdKSAhPQorCQkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpICsgMV0pICE9IENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfY2hhbm5lbF9xdWV1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgc2hvcnQgYml0czsKKwlpbnQgaTsKKworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApIHsKKwkJaWYgKHVzZV9pbnRlcm5hbF9xdWV1ZV82eHh4KGNtZCkpIHsKKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgJj0gfkVYVF9RVUVVRV9CSVQ7CisJCQl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfQ09ORklHX1JFRyk7CisJCQliaXRzID0gMDsKKwkJCS8vIHNldCBjaGFubmVsCisJCQliaXRzIHw9IGFkY19jaGFuX2JpdHMoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSk7CisJCQkvLyBzZXQgZ2FpbgorCQkJYml0cyB8PSBhaV9yYW5nZV9iaXRzXzZ4eHgoZGV2LAorCQkJCUNSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pKTsKKwkJCS8vIHNldCBzaW5nbGUtZW5kZWQgLyBkaWZmZXJlbnRpYWwKKwkJCWJpdHMgfD0gc2VfZGlmZl9iaXRfNnh4eChkZXYsCisJCQkJQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpOworCQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgPT0gQVJFRl9DT01NT04pCisJCQkJYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKKwkJCS8vIHNldCBzdG9wIGNoYW5uZWwKKwkJCXdyaXRldyhhZGNfY2hhbl9iaXRzKENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPgorCQkJCQkJCWNoYW5saXN0X2xlbiAtIDFdKSksCisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9ISUdIX1JFRyk7CisJCQkvLyBzZXQgc3RhcnQgY2hhbm5lbCwgYW5kIHJlc3Qgb2Ygc2V0dGluZ3MKKwkJCXdyaXRldyhiaXRzLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfTE9BRF9SRUcpOworCQl9IGVsc2UgeworCQkJLy8gdXNlIGV4dGVybmFsIHF1ZXVlCisJCQlpZiAoZGV2LT53cml0ZV9zdWJkZXYgJiYgZGV2LT53cml0ZV9zdWJkZXYtPmJ1c3kpIHsKKwkJCQl3YXJuX2V4dGVybmFsX3F1ZXVlKGRldik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gRVhUX1FVRVVFX0JJVDsKKwkJCXdyaXRldyhwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19DT05GSUdfUkVHKTsKKwkJCS8vIGNsZWFyIERBQyBidWZmZXIgdG8gcHJldmVudCB3ZWlyZCBpbnRlcmFjdGlvbnMKKwkJCXdyaXRldygwLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfQlVGRkVSX0NMRUFSX1JFRyk7CisJCQkvLyBjbGVhciBxdWV1ZSBwb2ludGVyCisJCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9DTEVBUl9SRUcpOworCQkJLy8gbG9hZCBleHRlcm5hbCBxdWV1ZQorCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCQliaXRzID0gMDsKKwkJCQkvLyBzZXQgY2hhbm5lbAorCQkJCWJpdHMgfD0gYWRjX2NoYW5fYml0cyhDUl9DSEFOKGNtZC0+CisJCQkJCQljaGFubGlzdFtpXSkpOworCQkJCS8vIHNldCBnYWluCisJCQkJYml0cyB8PSBhaV9yYW5nZV9iaXRzXzZ4eHgoZGV2LAorCQkJCQlDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSk7CisJCQkJLy8gc2V0IHNpbmdsZS1lbmRlZCAvIGRpZmZlcmVudGlhbAorCQkJCWJpdHMgfD0gc2VfZGlmZl9iaXRfNnh4eChkZXYsCisJCQkJCUNSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgPT0gQVJFRl9ESUZGKTsKKwkJCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSA9PSBBUkVGX0NPTU1PTikKKwkJCQkJYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKKwkJCQkvLyBtYXJrIGVuZCBvZiBxdWV1ZQorCQkJCWlmIChpID09IGNtZC0+Y2hhbmxpc3RfbGVuIC0gMSkKKwkJCQkJYml0cyB8PSBRVUVVRV9FT1NDQU5fQklUIHwKKwkJCQkJCVFVRVVFX0VPU0VRX0JJVDsKKwkJCQl3cml0ZXcoYml0cywKKwkJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArCisJCQkJCUFEQ19RVUVVRV9GSUZPX1JFRyk7CisJCQkJREVCVUdfUFJJTlQKKwkJCQkJKCJ3cm90ZSAweCV4IHRvIGV4dGVybmFsIGNoYW5uZWwgcXVldWVcbiIsCisJCQkJCWJpdHMpOworCQkJfQorCQkJLyogZG9pbmcgYSBxdWV1ZSBjbGVhciBpcyBub3Qgc3BlY2lmaWVkIGluIGJvYXJkIGRvY3MsCisJCQkgKiBidXQgcmVxdWlyZWQgZm9yIHJlbGlhYmxlIG9wZXJhdGlvbiAqLworCQkJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfQ0xFQVJfUkVHKTsKKwkJCS8vIHByaW1lIHF1ZXVlIGhvbGRpbmcgcmVnaXN0ZXIKKwkJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1FVRVVFX0xPQURfUkVHKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIHNob3J0IG9sZF9jYWxfcmFuZ2VfYml0cyA9CisJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0czsKKworCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyAmPSB+QURDX1NSQ180MDIwX01BU0s7CisJCS8vc2VsZWN0IEJOQyBpbnB1dHMKKwkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0gYWRjX3NyY180MDIwX2JpdHMoNCk7CisJCS8vIHNlbGVjdCByYW5nZXMKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCQlpZiAocmFuZ2UgPT0gMCkKKwkJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyB8PQorCQkJCQlhdHRlbnVhdGVfYml0KGNoYW5uZWwpOworCQkJZWxzZQorCQkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzICY9CisJCQkJCX5hdHRlbnVhdGVfYml0KGNoYW5uZWwpOworCQl9CisJCS8vIHVwZGF0ZSBjYWxpYnJhdGlvbi9yYW5nZSBpMmMgcmVnaXN0ZXIgb25seSBpZiBuZWNlc3NhcnksIGFzIGl0IGlzIHZlcnkgc2xvdworCQlpZiAob2xkX2NhbF9yYW5nZV9iaXRzICE9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzKSB7CisJCQl1aW50OF90IGkyY19kYXRhID0gcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisJCQlpMmNfd3JpdGUoZGV2LCBSQU5HRV9DQUxfSTJDX0FERFIsICZpMmNfZGF0YSwKKwkJCQlzaXplb2YoaTJjX2RhdGEpKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfZmlyc3RfZG1hX2Rlc2NyaXB0b3Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IGRtYV9jaGFubmVsLCB1bnNpZ25lZCBpbnQgZGVzY3JpcHRvcl9iaXRzKQoreworCS8qIFRoZSB0cmFuc2ZlciBzaXplLCBwY2kgYWRkcmVzcywgYW5kIGxvY2FsIGFkZHJlc3MgcmVnaXN0ZXJzCisJICogYXJlIHN1cHBvc2VkbHkgdW51c2VkIGR1cmluZyBjaGFpbmVkIGRtYSwKKwkgKiBidXQgSSBoYXZlIGZvdW5kIHRoYXQgbGVmdCBvdmVyIHZhbHVlcyBmcm9tIGxhc3Qgb3BlcmF0aW9uCisJICogb2NjYXNpb25hbGx5IGNhdXNlIHByb2JsZW1zIHdpdGggdHJhbnNmZXIgb2YgZmlyc3QgZG1hCisJICogYmxvY2suICBJbml0aWFsaXppbmcgdGhlbSB0byB6ZXJvIHNlZW1zIHRvIGZpeCB0aGUgcHJvYmxlbS4gKi8KKwlpZiAoZG1hX2NoYW5uZWwpIHsKKwkJd3JpdGVsKDAsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfVFJBTlNGRVJfU0laRV9SRUcpOworCQl3cml0ZWwoMCwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX1BDSV9BRERSRVNTX1JFRyk7CisJCXdyaXRlbCgwLAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0xPQ0FMX0FERFJFU1NfUkVHKTsKKwkJd3JpdGVsKGRlc2NyaXB0b3JfYml0cywKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9ERVNDUklQVE9SX1JFRyk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDAsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpOworCQl3cml0ZWwoMCwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRyk7CisJCXdyaXRlbCgwLAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0xPQ0FMX0FERFJFU1NfUkVHKTsKKwkJd3JpdGVsKGRlc2NyaXB0b3JfYml0cywKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRyk7CisJfQorfQorCitzdGF0aWMgaW50IGFpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVpbnQzMl90IGJpdHM7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCisJZGlzYWJsZV9haV9wYWNpbmcoZGV2KTsKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCXJldHZhbCA9IHNldHVwX2NoYW5uZWxfcXVldWUoZGV2LCBjbWQpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLy8gbWFrZSBzdXJlIGludGVybmFsIGNhbGlicmF0aW9uIHNvdXJjZSBpcyB0dXJuZWQgb2ZmCisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCisJc2V0X2FpX3BhY2luZyhkZXYsIGNtZCk7CisKKwlzZXR1cF9zYW1wbGVfY291bnRlcnMoZGV2LCBjbWQpOworCisJZW5hYmxlX2FpX2ludGVycnVwdHMoZGV2LCBjbWQpOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLyogc2V0IG1vZGUsIGFsbG93IGNvbnZlcnNpb25zIHRocm91Z2ggc29mdHdhcmUgZ2F0ZSAqLworCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gQURDX1NXX0dBVEVfQklUOworCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19ESVRIRVJfQklUOworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApIHsKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyAmPSB+QURDX01PREVfTUFTSzsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpCisJCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IGFkY19tb2RlX2JpdHMoMTMpOwkvLyBnb29kIG9sZCBtb2RlIDEzCisJCWVsc2UKKwkJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gYWRjX21vZGVfYml0cyg4KTsJLy8gbW9kZSA4LiAgV2hhdCBlbHNlIGNvdWxkIHlvdSBuZWVkPworCX0gZWxzZSB7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkNIQU5ORUxfTU9ERV80MDIwX01BU0s7CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSA0KQorCQkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PSBGT1VSX0NIQU5ORUxfNDAyMF9CSVRTOworCQllbHNlIGlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAyKQorCQkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PSBUV09fQ0hBTk5FTF80MDIwX0JJVFM7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19MT19DSEFOTkVMXzQwMjBfTUFTSzsKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PQorCQkJYWRjX2xvX2NoYW5fNDAyMF9iaXRzKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkpOworCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfSElfQ0hBTk5FTF80MDIwX01BU0s7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0KKwkJCWFkY19oaV9jaGFuXzQwMjBfYml0cyhDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbY21kLT4KKwkJCQkJY2hhbmxpc3RfbGVuIC0gMV0pKTsKKwl9CisJd3JpdGV3KHByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09OVFJPTDFfUkVHKTsKKwlERUJVR19QUklOVCgiY29udHJvbDEgYml0cyAweCV4XG4iLCBwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gY2xlYXIgYWRjIGJ1ZmZlcgorCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0JVRkZFUl9DTEVBUl9SRUcpOworCisJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgPT0gMCB8fAorCQlib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJcHJpdihkZXYpLT5haV9kbWFfaW5kZXggPSAwOworCisJCS8vIHNldCBkbWEgdHJhbnNmZXIgc2l6ZQorCQlmb3IgKGkgPSAwOyBpIDwgYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSk7IGkrKykKKwkJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0udHJhbnNmZXJfc2l6ZSA9CisJCQkJY3B1X3RvX2xlMzIoZG1hX3RyYW5zZmVyX3NpemUoZGV2KSAqCisJCQkJc2l6ZW9mKHVpbnQxNl90KSk7CisKKwkJLy8gZ2l2ZSBsb2NhdGlvbiBvZiBmaXJzdCBkbWEgZGVzY3JpcHRvcgorCQlsb2FkX2ZpcnN0X2RtYV9kZXNjcmlwdG9yKGRldiwgMSwKKwkJCXByaXYoZGV2KS0+CisJCQlhaV9kbWFfZGVzY19idXNfYWRkciB8IFBMWF9ERVNDX0lOX1BDSV9CSVQgfAorCQkJUExYX0lOVFJfVEVSTV9DT1VOVCB8IFBMWF9YRkVSX0xPQ0FMX1RPX1BDSSk7CisKKwkJZG1hX3N0YXJ0X3N5bmMoZGV2LCAxKTsKKwl9CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCS8qIHNldCBzb3VyY2UgZm9yIGV4dGVybmFsIHRyaWdnZXJzICovCisJCWJpdHMgPSAwOworCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgQ1JfQ0hBTihjbWQtPnN0YXJ0X2FyZykpCisJCQliaXRzIHw9IEVYVF9TVEFSVF9UUklHX0JOQ19CSVQ7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUICYmIENSX0NIQU4oY21kLT5zdG9wX2FyZykpCisJCQliaXRzIHw9IEVYVF9TVE9QX1RSSUdfQk5DX0JJVDsKKwkJd3JpdGV3KGJpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQVFfQVRSSUdfTE9XXzQwMjBfUkVHKTsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8qIGVuYWJsZSBwYWNpbmcsIHRyaWdnZXJpbmcsIGV0YyAqLworCWJpdHMgPSBBRENfRU5BQkxFX0JJVCB8IEFEQ19TT0ZUX0dBVEVfQklUUyB8IEFEQ19HQVRFX0xFVkVMX0JJVDsKKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpCisJCWJpdHMgfD0gQURDX0RNQV9ESVNBQkxFX0JJVDsKKwkvLyBzZXQgc3RhcnQgdHJpZ2dlcgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQliaXRzIHw9IEFEQ19TVEFSVF9UUklHX0VYVF9CSVRTOworCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQliaXRzIHw9IEFEQ19TVEFSVF9UUklHX0ZBTExJTkdfQklUOworCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpCisJCWJpdHMgfD0gQURDX1NUQVJUX1RSSUdfU09GVF9CSVRTOworCWlmICh1c2VfaHdfc2FtcGxlX2NvdW50ZXIoY21kKSkKKwkJYml0cyB8PSBBRENfU0FNUExFX0NPVU5URVJfRU5fQklUOworCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlRST0wwX1JFRyk7CisJREVCVUdfUFJJTlQoImNvbnRyb2wwIGJpdHMgMHgleFxuIiwgYml0cyk7CisKKwlwcml2KGRldiktPmFpX2NtZF9ydW5uaW5nID0gMTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzdGFydCBhcXVpc2l0aW9uCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NUQVJUX1JFRyk7CisJCURFQlVHX1BSSU5UKCJzb2Z0IHRyaWdcbiIpOworCX0KKworCXJldHVybiAwOworfQorCisvLyByZWFkIG51bV9zYW1wbGVzIGZyb20gMTYgYml0IHdpZGUgYWkgZmlmbworc3RhdGljIHZvaWQgcGlvX2RyYWluX2FpX2ZpZm9fMTYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBpOworCXVpbnQxNl90IHByZXBvc3RfYml0czsKKwlpbnQgcmVhZF9zZWdtZW50LCByZWFkX2luZGV4LCB3cml0ZV9zZWdtZW50LCB3cml0ZV9pbmRleDsKKwlpbnQgbnVtX3NhbXBsZXM7CisKKwlkbyB7CisJCS8vIGdldCBsZWFzdCBzaWduaWZpY2FudCAxNSBiaXRzCisJCXJlYWRfaW5kZXggPQorCQkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArCisJCQlBRENfUkVBRF9QTlRSX1JFRykgJiAweDdmZmY7CisJCXdyaXRlX2luZGV4ID0KKwkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJQURDX1dSSVRFX1BOVFJfUkVHKSAmIDB4N2ZmZjsKKwkJLyogR2V0IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyAoZ3JleSBjb2RlKS4gIERpZmZlcmVudCBib2FyZHMgdXNlIGRpZmZlcmVudCBjb2RlCisJCSAqIHNvIHVzZSBhIHNjaGVtZSB0aGF0IGRvZXNuJ3QgZGVwZW5kIG9uIGVuY29kaW5nLiAgVGhpcyByZWFkIG11c3QKKwkJICogb2NjdXIgYWZ0ZXIgcmVhZGluZyBsZWFzdCBzaWduaWZpY2FudCAxNSBiaXRzIHRvIGF2b2lkIHJhY2UKKwkJICogd2l0aCBmaWZvIHN3aXRjaGluZyB0byBuZXh0IHNlZ21lbnQuICovCisJCXByZXBvc3RfYml0cyA9IHJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBQUkVQT1NUX1JFRyk7CisKKwkJLyogaWYgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgYXJlIG5vdCBvbiB0aGUgc2FtZSBmaWZvIHNlZ21lbnQsIHJlYWQgdG8gdGhlCisJCSAqIGVuZCBvZiB0aGUgcmVhZCBzZWdtZW50ICovCisJCXJlYWRfc2VnbWVudCA9IGFkY191cHBlcl9yZWFkX3B0cl9jb2RlKHByZXBvc3RfYml0cyk7CisJCXdyaXRlX3NlZ21lbnQgPSBhZGNfdXBwZXJfd3JpdGVfcHRyX2NvZGUocHJlcG9zdF9iaXRzKTsKKworCQlERUJVR19QUklOVCgiIHJkIHNlZyAlaSwgd3J0IHNlZyAlaSwgcmQgaWR4ICVpLCB3cnQgaWR4ICVpXG4iLAorCQkJcmVhZF9zZWdtZW50LCB3cml0ZV9zZWdtZW50LCByZWFkX2luZGV4LCB3cml0ZV9pbmRleCk7CisKKwkJaWYgKHJlYWRfc2VnbWVudCAhPSB3cml0ZV9zZWdtZW50KQorCQkJbnVtX3NhbXBsZXMgPQorCQkJCXByaXYoZGV2KS0+YWlfZmlmb19zZWdtZW50X2xlbmd0aCAtIHJlYWRfaW5kZXg7CisJCWVsc2UKKwkJCW51bV9zYW1wbGVzID0gd3JpdGVfaW5kZXggLSByZWFkX2luZGV4OworCisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmIChwcml2KGRldiktPmFpX2NvdW50ID09IDApCisJCQkJYnJlYWs7CisJCQlpZiAobnVtX3NhbXBsZXMgPiBwcml2KGRldiktPmFpX2NvdW50KSB7CisJCQkJbnVtX3NhbXBsZXMgPSBwcml2KGRldiktPmFpX2NvdW50OworCQkJfQorCQkJcHJpdihkZXYpLT5haV9jb3VudCAtPSBudW1fc2FtcGxlczsKKwkJfQorCisJCWlmIChudW1fc2FtcGxlcyA8IDApIHsKKwkJCXJ0X3ByaW50aygiIGNiX3BjaWRhczY0OiBidWchIG51bV9zYW1wbGVzIDwgMFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCURFQlVHX1BSSU5UKCIgcmVhZCAlaSBzYW1wbGVzIGZyb20gZmlmb1xuIiwgbnVtX3NhbXBsZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7CisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsCisJCQkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19GSUZPX1JFRykpOworCQl9CisKKwl9IHdoaWxlIChyZWFkX3NlZ21lbnQgIT0gd3JpdGVfc2VnbWVudCk7Cit9CisKKy8qIFJlYWQgZnJvbSAzMiBiaXQgd2lkZSBhaSBmaWZvIG9mIDQwMjAgLSBkZWFsIHdpdGggaW5zYW5lIGdyZXkgY29kaW5nIG9mIHBvaW50ZXJzLgorICogVGhlIHBjaS00MDIwIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMKKyAqIGRtYSB0cmFuc2ZlcnMgKGl0IG9ubHkgc3VwcG9ydHMgdGhlIHVzZSBvZiBwaW8gZm9yIGRyYWluaW5nIHRoZSBsYXN0IHJlbWFpbmluZworICogcG9pbnRzIGZyb20gdGhlIGZpZm8gd2hlbiBhIGRhdGEgYXF1aXNpdGlvbiBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCkuCisgKi8KK3N0YXRpYyB2b2lkIHBpb19kcmFpbl9haV9maWZvXzMyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbWF4X3RyYW5zZmVyID0gMTAwMDAwOworCXVpbnQzMl90IGZpZm9fZGF0YTsKKwlpbnQgd3JpdGVfY29kZSA9CisJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfV1JJVEVfUE5UUl9SRUcpICYgMHg3ZmZmOworCWludCByZWFkX2NvZGUgPQorCQlyZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1JFQURfUE5UUl9SRUcpICYgMHg3ZmZmOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAobWF4X3RyYW5zZmVyID4gcHJpdihkZXYpLT5haV9jb3VudCkgeworCQkJbWF4X3RyYW5zZmVyID0gcHJpdihkZXYpLT5haV9jb3VudDsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyByZWFkX2NvZGUgIT0gd3JpdGVfY29kZSAmJiBpIDwgbWF4X3RyYW5zZmVyOykgeworCQlmaWZvX2RhdGEgPSByZWFkbChwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZmlmb19kYXRhICYgMHhmZmZmKTsKKwkJaSsrOworCQlpZiAoaSA8IG1heF90cmFuc2ZlcikgeworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCAoZmlmb19kYXRhID4+IDE2KSAmIDB4ZmZmZik7CisJCQlpKys7CisJCX0KKwkJcmVhZF9jb2RlID0KKwkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJQURDX1JFQURfUE5UUl9SRUcpICYgMHg3ZmZmOworCX0KKwlwcml2KGRldiktPmFpX2NvdW50IC09IGk7Cit9CisKKy8vIGVtcHR5IGZpZm8KK3N0YXRpYyB2b2lkIHBpb19kcmFpbl9haV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJcGlvX2RyYWluX2FpX2ZpZm9fMzIoZGV2KTsKKwl9IGVsc2UKKwkJcGlvX2RyYWluX2FpX2ZpZm9fMTYoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZHJhaW5fZG1hX2J1ZmZlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJdWludDMyX3QgbmV4dF90cmFuc2Zlcl9hZGRyOworCWludCBqOworCWludCBudW1fc2FtcGxlcyA9IDA7CisJdm9pZCAqcGNpX2FkZHJfcmVnOworCisJaWYgKGNoYW5uZWwpCisJCXBjaV9hZGRyX3JlZyA9CisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfUENJX0FERFJFU1NfUkVHOworCWVsc2UKKwkJcGNpX2FkZHJfcmVnID0KKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUc7CisKKwkvLyBsb29wIHVudGlsIHdlIGhhdmUgcmVhZCBhbGwgdGhlIGZ1bGwgYnVmZmVycworCWZvciAoaiA9IDAsIG5leHRfdHJhbnNmZXJfYWRkciA9IHJlYWRsKHBjaV9hZGRyX3JlZyk7CisJCShuZXh0X3RyYW5zZmVyX2FkZHIgPAorCQkJcHJpdihkZXYpLT5haV9idWZmZXJfYnVzX2FkZHJbcHJpdihkZXYpLT5haV9kbWFfaW5kZXhdCisJCQl8fCBuZXh0X3RyYW5zZmVyX2FkZHIgPj0KKwkJCXByaXYoZGV2KS0+YWlfYnVmZmVyX2J1c19hZGRyW3ByaXYoZGV2KS0+YWlfZG1hX2luZGV4XSArCisJCQlETUFfQlVGRkVSX1NJWkUpICYmIGogPCBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKTsKKwkJaisrKSB7CisJCS8vIHRyYW5zZmVyIGRhdGEgZnJvbSBkbWEgYnVmZmVyIHRvIGNvbWVkaSBidWZmZXIKKwkJbnVtX3NhbXBsZXMgPSBkbWFfdHJhbnNmZXJfc2l6ZShkZXYpOworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCQlpZiAobnVtX3NhbXBsZXMgPiBwcml2KGRldiktPmFpX2NvdW50KQorCQkJCW51bV9zYW1wbGVzID0gcHJpdihkZXYpLT5haV9jb3VudDsKKwkJCXByaXYoZGV2KS0+YWlfY291bnQgLT0gbnVtX3NhbXBsZXM7CisJCX0KKwkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihkZXYtPnJlYWRfc3ViZGV2LAorCQkJcHJpdihkZXYpLT5haV9idWZmZXJbcHJpdihkZXYpLT5haV9kbWFfaW5kZXhdLAorCQkJbnVtX3NhbXBsZXMgKiBzaXplb2YodWludDE2X3QpKTsKKwkJcHJpdihkZXYpLT5haV9kbWFfaW5kZXggPQorCQkJKHByaXYoZGV2KS0+YWlfZG1hX2luZGV4ICsKKwkJCTEpICUgYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSk7CisKKwkJREVCVUdfUFJJTlQoIm5leHQgYnVmZmVyIGFkZHIgMHglbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylwcml2KGRldiktPmFpX2J1ZmZlcl9idXNfYWRkcltwcml2KGRldiktPgorCQkJCWFpX2RtYV9pbmRleF0pOworCQlERUJVR19QUklOVCgicGNpIGFkZHIgcmVnIDB4JXhcbiIsIG5leHRfdHJhbnNmZXJfYWRkcik7CisJfQorCS8qIFhYWCBjaGVjayBmb3IgZG1hIHJpbmcgYnVmZmVyIG92ZXJydW4gKHVzZSBlbmQtb2YtY2hhaW4gYml0IHRvIG1hcmsgbGFzdAorCSAqIHVudXNlZCBidWZmZXIpICovCit9CisKK3ZvaWQgaGFuZGxlX2FpX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGludCBwbHhfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1aW50OF90IGRtYTFfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBjaGVjayBmb3IgZmlmbyBvdmVycnVuCisJaWYgKHN0YXR1cyAmIEFEQ19PVkVSUlVOX0JJVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZmlmbyBvdmVycnVuIik7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwl9CisJLy8gc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkbWExX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9DU19SRUcpOworCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTFfQSkgewkvLyBkbWEgY2hhbiAxIGludGVycnVwdAorCQl3cml0ZWIoKGRtYTFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9DU19SRUcpOworCQlERUJVR19QUklOVCgiZG1hMSBzdGF0dXMgMHgleFxuIiwgZG1hMV9zdGF0dXMpOworCisJCWlmIChkbWExX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSB7CisJCQlkcmFpbl9kbWFfYnVmZmVycyhkZXYsIDEpOworCQl9CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBkbWEgY2gxIGludGVycnVwdFxuIik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3RhdHVzICYgQURDX0RPTkVfQklUKQorCQlERUJVR19QUklOVCgiYWRjIGRvbmUgaW50ZXJydXB0XG4iKTsKKworCS8vIGRyYWluIGZpZm8gd2l0aCBwaW8KKwlpZiAoKHN0YXR1cyAmIEFEQ19ET05FX0JJVCkgfHwKKwkJKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgJiYKKwkJCShzdGF0dXMgJiBBRENfSU5UUl9QRU5ESU5HX0JJVCkgJiYKKwkJCShib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApKSkgeworCQlERUJVR19QUklOVCgicGlvIGZpZm8gZHJhaW5cbiIpOworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJaWYgKHByaXYoZGV2KS0+YWlfY21kX3J1bm5pbmcpIHsKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCQlwaW9fZHJhaW5fYWlfZmlmbyhkZXYpOworCQl9IGVsc2UKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJfQorCS8vIGlmIHdlIGFyZSBoYXZlIGFsbCB0aGUgZGF0YSwgdGhlbiBxdWl0CisJaWYgKChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgcHJpdihkZXYpLT5haV9jb3VudCA8PSAwKSB8fAorCQkoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCAmJiAoc3RhdHVzICYgQURDX1NUT1BfQklUKSkpIHsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKworCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByZXZfYW9fZG1hX2luZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBidWZmZXJfaW5kZXg7CisKKwlpZiAocHJpdihkZXYpLT5hb19kbWFfaW5kZXggPT0gMCkKKwkJYnVmZmVyX2luZGV4ID0gQU9fRE1BX1JJTkdfQ09VTlQgLSAxOworCWVsc2UKKwkJYnVmZmVyX2luZGV4ID0gcHJpdihkZXYpLT5hb19kbWFfaW5kZXggLSAxOworCXJldHVybiBidWZmZXJfaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgbGFzdF9hb19kbWFfbG9hZF9jb21wbGV0ZWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGJ1ZmZlcl9pbmRleDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfYWRkcmVzczsKKwl1bnNpZ25lZCBzaG9ydCBkbWFfc3RhdHVzOworCisJYnVmZmVyX2luZGV4ID0gcHJldl9hb19kbWFfaW5kZXgoZGV2KTsKKwlkbWFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJaWYgKChkbWFfc3RhdHVzICYgUExYX0RNQV9ET05FX0JJVCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl0cmFuc2Zlcl9hZGRyZXNzID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRyk7CisJaWYgKHRyYW5zZmVyX2FkZHJlc3MgIT0gcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbYnVmZmVyX2luZGV4XSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhb19zdG9wcGVkX2J5X2Vycm9yKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpCisJCXJldHVybiAxOworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKHByaXYoZGV2KS0+YW9fY291bnQpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGxhc3RfYW9fZG1hX2xvYWRfY29tcGxldGVkKGRldikgPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYW9fZG1hX25lZWRzX3Jlc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgc2hvcnQgZG1hX3N0YXR1cykKK3sKKwlpZiAoKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0RPTkVfQklUKSA9PSAwIHx8CisJCShkbWFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpID09IDApCisJCXJldHVybiAwOworCWlmIChsYXN0X2FvX2RtYV9sb2FkX2NvbXBsZXRlZChkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZXN0YXJ0X2FvX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfYml0czsKKworCWRtYV9kZXNjX2JpdHMgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfREVTQ1JJUFRPUl9SRUcpOworCWRtYV9kZXNjX2JpdHMgJj0gflBMWF9FTkRfT0ZfQ0hBSU5fQklUOworCURFQlVHX1BSSU5UKCJyZXN0YXJ0aW5nIGFvIGRtYSwgZGVzY3JpcHRvciByZWcgMHgleFxuIiwgZG1hX2Rlc2NfYml0cyk7CisJbG9hZF9maXJzdF9kbWFfZGVzY3JpcHRvcihkZXYsIDAsIGRtYV9kZXNjX2JpdHMpOworCisJZG1hX3N0YXJ0X3N5bmMoZGV2LCAwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2FvX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGludCBwbHhfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT53cml0ZV9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwl1aW50OF90IGRtYTBfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBib2FyZCBtaWdodCBub3Qgc3VwcG9ydCBhbywgaW4gd2hpY2ggY2FzZSB3cml0ZV9zdWJkZXYgaXMgTlVMTCAqLworCWlmIChzID09IE5VTEwpCisJCXJldHVybjsKKwlhc3luYyA9IHMtPmFzeW5jOworCWNtZCA9ICZhc3luYy0+Y21kOworCisJLy8gc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkbWEwX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTBfQSkgewkvLyBkbWEgY2hhbiAwIGludGVycnVwdAorCQlpZiAoKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpCisJCQkmJiAhKGRtYTBfc3RhdHVzICYgUExYX0RNQV9ET05FX0JJVCkpCisJCQl3cml0ZWIoUExYX0RNQV9FTl9CSVQgfCBQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCQllbHNlCisJCQl3cml0ZWIoUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJREVCVUdfUFJJTlQoImRtYTAgc3RhdHVzIDB4JXhcbiIsIGRtYTBfc3RhdHVzKTsKKwkJaWYgKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHsKKwkJCWxvYWRfYW9fZG1hKGRldiwgY21kKTsKKwkJCS8qIHRyeSB0byByZWNvdmVyIGZyb20gZG1hIGVuZC1vZi1jaGFpbiBldmVudCAqLworCQkJaWYgKGFvX2RtYV9uZWVkc19yZXN0YXJ0KGRldiwgZG1hMF9zdGF0dXMpKQorCQkJCXJlc3RhcnRfYW9fZG1hKGRldik7CisJCX0KKwkJREVCVUdfUFJJTlQoIiBjbGVhcmVkIGRtYSBjaDAgaW50ZXJydXB0XG4iKTsKKwl9IGVsc2UKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICgoc3RhdHVzICYgREFDX0RPTkVfQklUKSkgeworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCWlmIChhb19zdG9wcGVkX2J5X2Vycm9yKGRldiwgY21kKSkKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQlERUJVR19QUklOVCgicGx4IGRtYTAgZGVzYyByZWcgMHgleFxuIiwKKwkJCXJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKworCQkJCVBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKSk7CisJCURFQlVHX1BSSU5UKCJwbHggZG1hMCBhZGRyZXNzIHJlZyAweCV4XG4iLAorCQkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCQkJUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKSk7CisJfQorCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzOworCXVpbnQzMl90IHBseF9zdGF0dXM7CisJdWludDMyX3QgcGx4X2JpdHM7CisKKwlwbHhfc3RhdHVzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKKwlzdGF0dXMgPSByZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfU1RBVFVTX1JFRyk7CisKKwlERUJVR19QUklOVCgiY2JfcGNpZGFzNjQ6IGh3IHN0YXR1cyAweCV4ICIsIHN0YXR1cyk7CisJREVCVUdfUFJJTlQoInBseCBzdGF0dXMgMHgleFxuIiwgcGx4X3N0YXR1cyk7CisKKwkvKiBhbiBpbnRlcnJ1cHQgYmVmb3JlIGFsbCB0aGUgcG9zdGNvbmZpZyBzdHVmZiBnZXRzIGRvbmUgY291bGQKKwkgKiBjYXVzZSBhIE5VTEwgZGVyZWZlcmVuY2UgaWYgd2UgY29udGludWUgdGhyb3VnaCB0aGUKKwkgKiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJREVCVUdfUFJJTlQoImNiX3BjaWRhczY0OiBwcmVtYXR1cmUgaW50ZXJydXB0LCBpZ25vcmluZyIsCisJCQlzdGF0dXMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWhhbmRsZV9haV9pbnRlcnJ1cHQoZGV2LCBzdGF0dXMsIHBseF9zdGF0dXMpOworCWhhbmRsZV9hb19pbnRlcnJ1cHQoZGV2LCBzdGF0dXMsIHBseF9zdGF0dXMpOworCisJLy8gY2xlYXIgcG9zc2libGUgcGx4OTA4MCBpbnRlcnJ1cHQgc291cmNlcworCWlmIChwbHhfc3RhdHVzICYgSUNTX0xESUEpIHsJLy8gY2xlYXIgbG9jYWwgZG9vcmJlbGwgaW50ZXJydXB0CisJCXBseF9iaXRzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9EQlJfT1VUX1JFRyk7CisJCXdyaXRlbChwbHhfYml0cywgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9EQlJfT1VUX1JFRyk7CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBsb2NhbCBkb29yYmVsbCBiaXRzIDB4JXhcbiIsIHBseF9iaXRzKTsKKwl9CisKKwlERUJVR19QUklOVCgiZXhpdGluZyBoYW5kbGVyXG4iKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXBseDkwODBfYWJvcnRfZG1hKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UsIGNoYW5uZWwpOworCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhaV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYoZGV2KS0+YWlfY21kX3J1bm5pbmcgPT0gMCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpdihkZXYpLT5haV9jbWRfcnVubmluZyA9IDA7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWRpc2FibGVfYWlfcGFjaW5nKGRldik7CisKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCURFQlVHX1BSSU5UKCJhaSBjYW5jZWxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IHJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gZG8gc29tZSBpbml0aWFsaXppbmcKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMF9SRUcpOworCisJLy8gc2V0IHJhbmdlCisJc2V0X2RhY19yYW5nZV9iaXRzKGRldiwgJnByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMsIGNoYW4sIHJhbmdlKTsKKwl3cml0ZXcocHJpdihkZXYpLT5kYWNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMV9SRUcpOworCisJLy8gd3JpdGUgdG8gY2hhbm5lbAorCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJd3JpdGV3KGRhdGFbMF0gJiAweGZmLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIGRhY19sc2JfNDAyMF9yZWcoY2hhbikpOworCQl3cml0ZXcoKGRhdGFbMF0gPj4gOCkgJiAweGYsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgZGFjX21zYl80MDIwX3JlZyhjaGFuKSk7CisJfSBlbHNlIHsKKwkJd3JpdGV3KGRhdGFbMF0sIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBkYWNfY29udmVydF9yZWcoY2hhbikpOworCX0KKworCS8vIHJlbWVtYmVyIG91dHB1dCB2YWx1ZQorCXByaXYoZGV2KS0+YW9fdmFsdWVbY2hhbl0gPSBkYXRhWzBdOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IHByaXYoZGV2KS0+YW9fdmFsdWVbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfY29udHJvbDBfcmVnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0cyA9IERBQ19FTkFCTEVfQklUIHwgV0FWRUZPUk1fR0FURV9MRVZFTF9CSVQgfAorCQlXQVZFRk9STV9HQVRFX0VOQUJMRV9CSVQgfCBXQVZFRk9STV9HQVRFX1NFTEVDVF9CSVQ7CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJYml0cyB8PSBXQVZFRk9STV9UUklHX0VYVF9CSVRTOworCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQliaXRzIHw9IFdBVkVGT1JNX1RSSUdfRkFMTElOR19CSVQ7CisJfSBlbHNlIHsKKwkJYml0cyB8PSBXQVZFRk9STV9UUklHX1NPRlRfQklUUzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJYml0cyB8PSBEQUNfRVhUX1VQREFURV9FTkFCTEVfQklUOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkKKwkJCWJpdHMgfD0gREFDX0VYVF9VUERBVEVfRkFMTElOR19CSVQ7CisJfQorCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0NPTlRST0wwX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfY29udHJvbDFfcmVnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWludCBjaGFubmVsLCByYW5nZTsKKworCQljaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKwkJc2V0X2RhY19yYW5nZV9iaXRzKGRldiwgJnByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMsIGNoYW5uZWwsCisJCQlyYW5nZSk7CisJfQorCXByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMgfD0gREFDX1NXX0dBVEVfQklUOworCXdyaXRldyhwcml2KGRldiktPmRhY19jb250cm9sMV9iaXRzLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0NPTlRST0wxX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfc2VsZWN0X3JlZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdWludDE2X3QgYml0czsKKwl1bnNpZ25lZCBpbnQgZmlyc3RfY2hhbm5lbCwgbGFzdF9jaGFubmVsOworCisJZmlyc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJbGFzdF9jaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2NtZC0+Y2hhbmxpc3RfbGVuIC0gMV0pOworCWlmIChsYXN0X2NoYW5uZWwgPCBmaXJzdF9jaGFubmVsKQorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBsYXN0IGFvIGNoYW5uZWwgPCBmaXJzdCBhbyBjaGFubmVsIik7CisKKwliaXRzID0gKGZpcnN0X2NoYW5uZWwgJiAweDcpIHwgKGxhc3RfY2hhbm5lbCAmIDB4NykgPDwgMzsKKworCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX1NFTEVDVF9SRUcpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFjX2ludGVydmFsX3JlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJZGl2aXNvciA9IGdldF9hb19kaXZpc29yKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOworCWlmIChkaXZpc29yID4gbWF4X2NvdW50ZXJfdmFsdWUpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgYW8gZGl2aXNvciB0b28gYmlnIik7CisJCWRpdmlzb3IgPSBtYXhfY291bnRlcl92YWx1ZTsKKwl9CisJd3JpdGV3KGRpdmlzb3IgJiAweGZmZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfU0FNUExFX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJd3JpdGV3KChkaXZpc29yID4+IDE2KSAmIDB4ZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfU0FNUExFX0lOVEVSVkFMX1VQUEVSX1JFRyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbG9hZF9hb19kbWFfYnVmZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIGJ1ZmZlcl9pbmRleCwgcHJldl9idWZmZXJfaW5kZXg7CisJdW5zaWduZWQgaW50IG5leHRfYml0czsKKworCWJ1ZmZlcl9pbmRleCA9IHByaXYoZGV2KS0+YW9fZG1hX2luZGV4OworCXByZXZfYnVmZmVyX2luZGV4ID0gcHJldl9hb19kbWFfaW5kZXgoZGV2KTsKKworCURFQlVHX1BSSU5UKCJhdHRlbXB0aW5nIHRvIGxvYWQgYW8gYnVmZmVyICVpICgweCV4KVxuIiwgYnVmZmVyX2luZGV4LAorCQlwcml2KGRldiktPmFvX2J1ZmZlcl9idXNfYWRkcltidWZmZXJfaW5kZXhdKTsKKworCW51bV9ieXRlcyA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShkZXYtPndyaXRlX3N1YmRldi0+YXN5bmMpOworCWlmIChudW1fYnl0ZXMgPiBETUFfQlVGRkVSX1NJWkUpCisJCW51bV9ieXRlcyA9IERNQV9CVUZGRVJfU0laRTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIG51bV9ieXRlcyA+IHByaXYoZGV2KS0+YW9fY291bnQpCisJCW51bV9ieXRlcyA9IHByaXYoZGV2KS0+YW9fY291bnQ7CisJbnVtX2J5dGVzIC09IG51bV9ieXRlcyAlIGJ5dGVzX2luX3NhbXBsZTsKKworCWlmIChudW1fYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlERUJVR19QUklOVCgibG9hZGluZyAlaSBieXRlc1xuIiwgbnVtX2J5dGVzKTsKKworCW51bV9ieXRlcyA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKGRldi0+d3JpdGVfc3ViZGV2LAorCQlwcml2KGRldiktPmFvX2J1ZmZlcltidWZmZXJfaW5kZXhdLCBudW1fYnl0ZXMpOworCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbYnVmZmVyX2luZGV4XS50cmFuc2Zlcl9zaXplID0KKwkJY3B1X3RvX2xlMzIobnVtX2J5dGVzKTsKKwkvKiBzZXQgZW5kIG9mIGNoYWluIGJpdCBzbyB3ZSBjYXRjaCB1bmRlcnJ1bnMgKi8KKwluZXh0X2JpdHMgPSBsZTMyX3RvX2NwdShwcml2KGRldiktPmFvX2RtYV9kZXNjW2J1ZmZlcl9pbmRleF0ubmV4dCk7CisJbmV4dF9iaXRzIHw9IFBMWF9FTkRfT0ZfQ0hBSU5fQklUOworCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbYnVmZmVyX2luZGV4XS5uZXh0ID0gY3B1X3RvX2xlMzIobmV4dF9iaXRzKTsKKwkvKiBjbGVhciBlbmQgb2YgY2hhaW4gYml0IG9uIHByZXZpb3VzIGJ1ZmZlciBub3cgdGhhdCB3ZSBoYXZlIHNldCBpdAorCSAqIGZvciB0aGUgbGFzdCBidWZmZXIgKi8KKwluZXh0X2JpdHMgPSBsZTMyX3RvX2NwdShwcml2KGRldiktPmFvX2RtYV9kZXNjW3ByZXZfYnVmZmVyX2luZGV4XS5uZXh0KTsKKwluZXh0X2JpdHMgJj0gflBMWF9FTkRfT0ZfQ0hBSU5fQklUOworCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbcHJldl9idWZmZXJfaW5kZXhdLm5leHQgPSBjcHVfdG9fbGUzMihuZXh0X2JpdHMpOworCisJcHJpdihkZXYpLT5hb19kbWFfaW5kZXggPSAoYnVmZmVyX2luZGV4ICsgMSkgJSBBT19ETUFfUklOR19DT1VOVDsKKwlwcml2KGRldiktPmFvX2NvdW50IC09IG51bV9ieXRlczsKKworCXJldHVybiBudW1fYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOworCXVuc2lnbmVkIGludCBuZXh0X3RyYW5zZmVyX2FkZHI7CisJdm9pZCAqcGNpX2FkZHJfcmVnID0KKwkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRzsKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2luZGV4OworCisJZG8geworCQlidWZmZXJfaW5kZXggPSBwcml2KGRldiktPmFvX2RtYV9pbmRleDsKKwkJLyogZG9uJ3Qgb3ZlcndyaXRlIGRhdGEgdGhhdCBoYXNuJ3QgYmVlbiB0cmFuc2ZlcnJlZCB5ZXQgKi8KKwkJbmV4dF90cmFuc2Zlcl9hZGRyID0gcmVhZGwocGNpX2FkZHJfcmVnKTsKKwkJaWYgKG5leHRfdHJhbnNmZXJfYWRkciA+PQorCQkJcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbYnVmZmVyX2luZGV4XQorCQkJJiYgbmV4dF90cmFuc2Zlcl9hZGRyIDwKKwkJCXByaXYoZGV2KS0+YW9fYnVmZmVyX2J1c19hZGRyW2J1ZmZlcl9pbmRleF0gKworCQkJRE1BX0JVRkZFUl9TSVpFKQorCQkJcmV0dXJuOworCQludW1fYnl0ZXMgPSBsb2FkX2FvX2RtYV9idWZmZXIoZGV2LCBjbWQpOworCX0gd2hpbGUgKG51bV9ieXRlcyA+PSBETUFfQlVGRkVSX1NJWkUpOworfQorCitzdGF0aWMgaW50IHByZXBfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOworCWludCBpOworCisJLyogY2xlYXIgcXVldWUgcG9pbnRlciB0b28sIHNpbmNlIGV4dGVybmFsIHF1ZXVlIGhhcworCSAqIHdlaXJkIGludGVyYWN0aW9ucyB3aXRoIGFvIGZpZm8gKi8KKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9DTEVBUl9SRUcpOworCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0JVRkZFUl9DTEVBUl9SRUcpOworCisJbnVtX2J5dGVzID0gKERBQ19GSUZPX1NJWkUgLyAyKSAqIGJ5dGVzX2luX3NhbXBsZTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCW51bV9ieXRlcyAvIGJ5dGVzX2luX3NhbXBsZSA+IHByaXYoZGV2KS0+YW9fY291bnQpCisJCW51bV9ieXRlcyA9IHByaXYoZGV2KS0+YW9fY291bnQgKiBieXRlc19pbl9zYW1wbGU7CisJbnVtX2J5dGVzID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIoZGV2LT53cml0ZV9zdWJkZXYsCisJCXByaXYoZGV2KS0+YW9fYm91bmNlX2J1ZmZlciwgbnVtX2J5dGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J5dGVzIC8gYnl0ZXNfaW5fc2FtcGxlOyBpKyspIHsKKwkJd3JpdGV3KHByaXYoZGV2KS0+YW9fYm91bmNlX2J1ZmZlcltpXSwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfRklGT19SRUcpOworCX0KKwlwcml2KGRldiktPmFvX2NvdW50IC09IG51bV9ieXRlcyAvIGJ5dGVzX2luX3NhbXBsZTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIHByaXYoZGV2KS0+YW9fY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisJbnVtX2J5dGVzID0gbG9hZF9hb19kbWFfYnVmZmVyKGRldiwgY21kKTsKKwlpZiAobnVtX2J5dGVzID09IDApCisJCXJldHVybiAtMTsKKwlpZiAobnVtX2J5dGVzID49IERNQV9CVUZGRVJfU0laRSkgOworCWxvYWRfYW9fZG1hKGRldiwgY21kKTsKKworCWRtYV9zdGFydF9zeW5jKGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXh0ZXJuYWxfYWlfcXVldWVfaW5fdXNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXYtPnJlYWRfc3ViZGV2LT5idXN5KQorCQlyZXR1cm4gMDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICh1c2VfaW50ZXJuYWxfcXVldWVfNnh4eCgmZGV2LT5yZWFkX3N1YmRldi0+YXN5bmMtPmNtZCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWlmIChleHRlcm5hbF9haV9xdWV1ZV9pbl91c2UoZGV2KSkgeworCQl3YXJuX2V4dGVybmFsX3F1ZXVlKGRldik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGRpc2FibGUgYW5hbG9nIG91dHB1dCBzeXN0ZW0gZHVyaW5nIHNldHVwICovCisJd3JpdGV3KDB4MCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMF9SRUcpOworCisJcHJpdihkZXYpLT5hb19kbWFfaW5kZXggPSAwOworCXByaXYoZGV2KS0+YW9fY291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisKKwlzZXRfZGFjX3NlbGVjdF9yZWcoZGV2LCBjbWQpOworCXNldF9kYWNfaW50ZXJ2YWxfcmVncyhkZXYsIGNtZCk7CisJbG9hZF9maXJzdF9kbWFfZGVzY3JpcHRvcihkZXYsIDAsIHByaXYoZGV2KS0+YW9fZG1hX2Rlc2NfYnVzX2FkZHIgfAorCQlQTFhfREVTQ19JTl9QQ0lfQklUIHwgUExYX0lOVFJfVEVSTV9DT1VOVCk7CisKKwlzZXRfZGFjX2NvbnRyb2wxX3JlZyhkZXYsIGNtZCk7CisJcy0+YXN5bmMtPmludHRyaWcgPSBhb19pbnR0cmlnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IHJldHZhbDsKKworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHZhbCA9IHByZXBfYW9fZG1hKGRldiwgY21kKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIC1FUElQRTsKKworCXNldF9kYWNfY29udHJvbDBfcmVnKGRldiwgY21kKTsKKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCkKKwkJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfU1RBUlRfUkVHKTsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCXVuc2lnbmVkIGludCB0bXBfYXJnOworCWludCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8vIHVuaXF1ZW5lc3MgY2hlY2sKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwkvLyBjb21wYXRpYmlsaXR5IGNoZWNrCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgYm9hcmQoZGV2KS0+YW9fc2Nhbl9zcGVlZCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGJvYXJkKGRldiktPmFvX3NjYW5fc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoZ2V0X2FvX2Rpdmlzb3IoY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQljbWQtPmZsYWdzKSA+IG1heF9jb3VudGVyX3ZhbHVlKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQkobWF4X2NvdW50ZXJfdmFsdWUgKyAyKSAqIFRJTUVSX0JBU0U7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXBfYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQlnZXRfZGl2aXNvcihjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncykgKiBUSU1FUl9CQVNFOworCQlpZiAodG1wX2FyZyAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQl1bnNpZ25lZCBpbnQgZmlyc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPSBmaXJzdF9jaGFubmVsICsgaSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubGlzdCBtdXN0IHVzZSBjb25zZWN1dGl2ZSBjaGFubmVscyIpOworCQkJCWVycisrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl3cml0ZXcoMHgwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0NPTlRST0wwX1JFRyk7CisJYWJvcnRfZG1hKGRldiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZWIoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCQlERUJVR19QUklOVCgid3JvdGUgMHgleCB0byBwb3J0ICVpXG4iLCBkYXRhLCBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJlYWRiKCh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrXzQwMjAoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGlvYmFzZSkKK3sKKwlpZiAoZGlyKSB7CisJCXdyaXRldyhkYXRhLCAodm9pZCAqKShpb2Jhc2UgKyAyICogcG9ydCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmVhZHcoKHZvaWQgKikoaW9iYXNlICsgMiAqIHBvcnQpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBiaXRzOworCisJYml0cyA9IHJlYWRiKHByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElfUkVHKTsKKwliaXRzICY9IDB4ZjsKKwlkYXRhWzFdID0gYml0czsKKwlkYXRhWzBdID0gMDsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdICY9IDB4ZjsKKwkvLyB6ZXJvIGJpdHMgd2UgYXJlIGdvaW5nIHRvIGNoYW5nZQorCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCS8vIHNldCBuZXcgYml0cworCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCisJd3JpdGViKHMtPnN0YXRlLCBwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERPX1JFRyk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkaW9fNjB4eF9jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIDI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGViKHMtPmlvX2JpdHMsCisJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElPX0RJUkVDVElPTl82MFhYX1JFRyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkaW9fNjB4eF93Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCXdyaXRlYihzLT5zdGF0ZSwKKwkJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElPX0RBVEFfNjBYWF9SRUcpOworCX0KKworCWRhdGFbMV0gPSByZWFkYihwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERJT19EQVRBXzYwWFhfUkVHKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgdm9pZCBjYWxkYWNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlwcml2KGRldiktPmNhbGRhY19zdGF0ZVtjaGFubmVsXSA9IHZhbHVlOworCisJc3dpdGNoIChib2FyZChkZXYpLT5sYXlvdXQpIHsKKwljYXNlIExBWU9VVF82MFhYOgorCWNhc2UgTEFZT1VUXzY0WFg6CisJCWNhbGRhY184ODAwX3dyaXRlKGRldiwgY2hhbm5lbCwgdmFsdWUpOworCQlicmVhazsKKwljYXNlIExBWU9VVF80MDIwOgorCQljYWxkYWNfaTJjX3dyaXRlKGRldiwgY2hhbm5lbCwgdmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2FsaWJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIHJldHVybiBpbW1lZGlhdGVseSBpZiBzZXR0aW5nIGhhc24ndCBjaGFuZ2VkLCBzaW5jZQorCSAqIHByb2dyYW1taW5nIHRoZXNlIHRoaW5ncyBpcyBzbG93ICovCisJaWYgKHByaXYoZGV2KS0+Y2FsZGFjX3N0YXRlW2NoYW5uZWxdID09IGRhdGFbMF0pCisJCXJldHVybiAxOworCisJY2FsZGFjX3dyaXRlKGRldiwgY2hhbm5lbCwgZGF0YVswXSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYWxpYl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlkYXRhWzBdID0gcHJpdihkZXYpLT5jYWxkYWNfc3RhdGVbY2hhbm5lbF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgYWQ4NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTA7CisJdW5zaWduZWQgaW50IGJpdCwgcmVnaXN0ZXJfYml0czsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtID0gKChjaGFubmVsICYgMHgzKSA8PCA4KSB8ICh2YWx1ZSAmIDB4ZmYpOworCXN0YXRpYyBjb25zdCBpbnQgYWQ4NDAyX2NvbWVkaV91ZGVsYXkgPSAxOworCisJcHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF0gPSB2YWx1ZTsKKworCXJlZ2lzdGVyX2JpdHMgPSBTRUxFQ1RfODQwMl82NFhYX0JJVDsKKwljb21lZGlfdWRlbGF5KGFkODQwMl9jb21lZGlfdWRlbGF5KTsKKwl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJaWYgKGJpdHN0cmVhbSAmIGJpdCkKKwkJCXJlZ2lzdGVyX2JpdHMgfD0gU0VSSUFMX0RBVEFfSU5fQklUOworCQllbHNlCisJCQlyZWdpc3Rlcl9iaXRzICY9IH5TRVJJQUxfREFUQV9JTl9CSVQ7CisJCWNvbWVkaV91ZGVsYXkoYWQ4NDAyX2NvbWVkaV91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCWNvbWVkaV91ZGVsYXkoYWQ4NDAyX2NvbWVkaV91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cyB8IFNFUklBTF9DTE9DS19CSVQsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwl9CisKKwljb21lZGlfdWRlbGF5KGFkODQwMl9jb21lZGlfdWRlbGF5KTsKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7Cit9CisKKy8qIGZvciBwY2ktZGFzNjQwMi8xNiwgY2hhbm5lbCAwIGlzIGFuYWxvZyBpbnB1dCBnYWluIGFuZCBjaGFubmVsIDEgaXMgb2Zmc2V0ICovCitzdGF0aWMgaW50IGFkODQwMl93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHNldHRpbmcgaGFzbid0IGNoYW5nZWQsIHNpbmNlCisJICogcHJvZ3JhbW1pbmcgdGhlc2UgdGhpbmdzIGlzIHNsb3cgKi8KKwlpZiAocHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF0gPT0gZGF0YVswXSkKKwkJcmV0dXJuIDE7CisKKwlwcml2KGRldiktPmFkODQwMl9zdGF0ZVtjaGFubmVsXSA9IGRhdGFbMF07CisKKwlhZDg0MDJfd3JpdGUoZGV2LCBjaGFubmVsLCBkYXRhWzBdKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFkODQwMl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlkYXRhWzBdID0gcHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVpbnQxNl90IHJlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IGFkZHJlc3MpCit7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTE7CisJc3RhdGljIGNvbnN0IGludCByZWFkX2NvbW1hbmQgPSAweDY7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbSA9IChyZWFkX2NvbW1hbmQgPDwgOCkgfCBhZGRyZXNzOworCXVuc2lnbmVkIGludCBiaXQ7CisJdm9pZCAqY29uc3QgcGx4X2NvbnRyb2xfYWRkciA9CisJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfQ09OVFJPTF9SRUc7CisJdWludDE2X3QgdmFsdWU7CisJc3RhdGljIGNvbnN0IGludCB2YWx1ZV9sZW5ndGggPSAxNjsKKwlzdGF0aWMgY29uc3QgaW50IGVlcHJvbV9jb21lZGlfdWRlbGF5ID0gMTsKKworCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyAmPSB+Q1RMX0VFX0NMSyAmIH5DVExfRUVfQ1M7CisJLy8gbWFrZSBzdXJlIHdlIGRvbid0IHNlbmQgYW55dGhpbmcgdG8gdGhlIGkyYyBidXMgb24gNDAyMAorCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfVVNFUk87CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJLy8gYWN0aXZhdGUgc2VyaWFsIGVlcHJvbQorCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfRUVfQ1M7CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisKKwkvLyB3cml0ZSByZWFkIGNvbW1hbmQgYW5kIGRlc2lyZWQgbWVtb3J5IGFkZHJlc3MKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJLy8gc2V0IGJpdCB0byBiZSB3cml0dGVuCisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlpZiAoYml0c3RyZWFtICYgYml0KQorCQkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IENUTF9FRV9XOworCQllbHNlCisJCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9XOworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJLy8gY2xvY2sgaW4gYml0CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgfD0gQ1RMX0VFX0NMSzsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DTEs7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCX0KKwkvLyByZWFkIGJhY2sgdmFsdWUgZnJvbSBlZXByb20gbWVtb3J5IGxvY2F0aW9uCisJdmFsdWUgPSAwOworCWZvciAoYml0ID0gMSA8PCAodmFsdWVfbGVuZ3RoIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCS8vIGNsb2NrIG91dCBiaXQKKwkJY29tZWRpX3VkZWxheShlZXByb21fY29tZWRpX3VkZWxheSk7CisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfRUVfQ0xLOworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShlZXByb21fY29tZWRpX3VkZWxheSk7CisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyAmPSB+Q1RMX0VFX0NMSzsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlpZiAocmVhZGwocGx4X2NvbnRyb2xfYWRkcikgJiBDVExfRUVfUikKKwkJCXZhbHVlIHw9IGJpdDsKKwl9CisKKwkvLyBkZWFjdGl2YXRlIGVlcHJvbSBzZXJpYWwgaW5wdXQKKwljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DUzsKKwl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBlZXByb21fcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gcmVhZF9lZXByb20oZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisKKwlyZXR1cm4gMTsKK30KKworLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHJvdW5kcyBkZXNpcmVkIHRpbWluZyB0byBhbiBhY2hpZXZhYmxlIHRpbWUsIGFuZAorICogc2V0cyBjbWQgbWVtYmVycyBhcHByb3ByaWF0ZWx5LgorICogYWRjIHBhY2VzIGNvbnZlcnNpb25zIGZyb20gbWFzdGVyIGNsb2NrIGJ5IGRpdmlkaW5nIGJ5ICh4ICsgMykgd2hlcmUgeCBpcyAyNCBiaXQgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2FkY190aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udmVydF9kaXZpc29yID0gMCwgc2Nhbl9kaXZpc29yOworCXN0YXRpYyBjb25zdCBpbnQgbWluX2NvbnZlcnRfZGl2aXNvciA9IDM7CisJc3RhdGljIGNvbnN0IGludCBtYXhfY29udmVydF9kaXZpc29yID0KKwkJbWF4X2NvdW50ZXJfdmFsdWUgKyBtaW5fY29udmVydF9kaXZpc29yOworCXN0YXRpYyBjb25zdCBpbnQgbWluX3NjYW5fZGl2aXNvcl80MDIwID0gMjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3NjYW5fZGl2aXNvciwgbWluX3NjYW5fZGl2aXNvcjsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCX0gZWxzZSB7CisJCQljb252ZXJ0X2Rpdmlzb3IgPQorCQkJCWdldF9kaXZpc29yKGNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOworCQkJaWYgKGNvbnZlcnRfZGl2aXNvciA+IG1heF9jb252ZXJ0X2Rpdmlzb3IpCisJCQkJY29udmVydF9kaXZpc29yID0gbWF4X2NvbnZlcnRfZGl2aXNvcjsKKwkJCWlmIChjb252ZXJ0X2Rpdmlzb3IgPCBtaW5fY29udmVydF9kaXZpc29yKQorCQkJCWNvbnZlcnRfZGl2aXNvciA9IG1pbl9jb252ZXJ0X2Rpdmlzb3I7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gY29udmVydF9kaXZpc29yICogVElNRVJfQkFTRTsKKwkJfQorCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXNjYW5fZGl2aXNvciA9IGdldF9kaXZpc29yKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvLyBYWFggY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3dzCisJCQltaW5fc2Nhbl9kaXZpc29yID0gY29udmVydF9kaXZpc29yICogY21kLT5jaGFubGlzdF9sZW47CisJCQltYXhfc2Nhbl9kaXZpc29yID0KKwkJCQkoY29udmVydF9kaXZpc29yICogY21kLT5jaGFubGlzdF9sZW4gLSAxKSArCisJCQkJbWF4X2NvdW50ZXJfdmFsdWU7CisJCX0gZWxzZSB7CisJCQltaW5fc2Nhbl9kaXZpc29yID0gbWluX3NjYW5fZGl2aXNvcl80MDIwOworCQkJbWF4X3NjYW5fZGl2aXNvciA9IG1heF9jb3VudGVyX3ZhbHVlICsgbWluX3NjYW5fZGl2aXNvcjsKKwkJfQorCQlpZiAoc2Nhbl9kaXZpc29yID4gbWF4X3NjYW5fZGl2aXNvcikKKwkJCXNjYW5fZGl2aXNvciA9IG1heF9zY2FuX2Rpdmlzb3I7CisJCWlmIChzY2FuX2Rpdmlzb3IgPCBtaW5fc2Nhbl9kaXZpc29yKQorCQkJc2Nhbl9kaXZpc29yID0gbWluX3NjYW5fZGl2aXNvcjsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHNjYW5fZGl2aXNvciAqIFRJTUVSX0JBU0U7CisJfQorCisJcmV0dXJuOworfQorCisvKiBHZXRzIG5lYXJlc3QgYWNoaWV2YWJsZSB0aW1pbmcgZ2l2ZW4gbWFzdGVyIGNsb2NrIHNwZWVkLCBkb2VzIG5vdAorICogdGFrZSBpbnRvIGFjY291bnQgcG9zc2libGUgbWluaW11bS9tYXhpbXVtIGRpdmlzb3IgdmFsdWVzLiAgVXNlZAorICogYnkgb3RoZXIgdGltaW5nIGNoZWNraW5nIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2Rpdmlzb3IodW5zaWduZWQgaW50IG5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IGRpdmlzb3I7CisKKwlzd2l0Y2ggKGZsYWdzICYgVFJJR19ST1VORF9NQVNLKSB7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXZpc29yID0gKG5zICsgVElNRVJfQkFTRSAtIDEpIC8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCWRpdmlzb3IgPSBucyAvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCWRlZmF1bHQ6CisJCWRpdmlzb3IgPSAobnMgKyBUSU1FUl9CQVNFIC8gMikgLyBUSU1FUl9CQVNFOworCQlicmVhazsKKwl9CisJcmV0dXJuIGRpdmlzb3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2FvX2Rpdmlzb3IodW5zaWduZWQgaW50IG5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGdldF9kaXZpc29yKG5zLCBmbGFncykgLSAyOworfQorCisvLyBhZGp1c3RzIHRoZSBzaXplIG9mIGhhcmR3YXJlIGZpZm8gKHdoaWNoIGRldGVybWluZXMgYmxvY2sgc2l6ZSBmb3IgZG1hIHhmZXJzKQorc3RhdGljIGludCBzZXRfYWlfZmlmb19zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpCit7CisJdW5zaWduZWQgaW50IG51bV9maWZvX2VudHJpZXM7CisJaW50IHJldHZhbDsKKwljb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvICpjb25zdCBmaWZvID0gYm9hcmQoZGV2KS0+YWlfZmlmbzsKKworCW51bV9maWZvX2VudHJpZXMgPSBudW1fc2FtcGxlcyAvIGZpZm8tPnNhbXBsZV9wYWNraW5nX3JhdGlvOworCisJcmV0dmFsID0gc2V0X2FpX2ZpZm9fc2VnbWVudF9sZW5ndGgoZGV2LAorCQludW1fZmlmb19lbnRyaWVzIC8gZmlmby0+bnVtX3NlZ21lbnRzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW51bV9zYW1wbGVzID0gcmV0dmFsICogZmlmby0+bnVtX3NlZ21lbnRzICogZmlmby0+c2FtcGxlX3BhY2tpbmdfcmF0aW87CisKKwlERUJVR19QUklOVCgic2V0IGhhcmR3YXJlIGZpZm8gc2l6ZSB0byAlaVxuIiwgbnVtX3NhbXBsZXMpOworCisJcmV0dXJuIG51bV9zYW1wbGVzOworfQorCisvLyBxdWVyeSBsZW5ndGggb2YgZmlmbworc3RhdGljIHVuc2lnbmVkIGludCBhaV9maWZvX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIHByaXYoZGV2KS0+YWlfZmlmb19zZWdtZW50X2xlbmd0aCAqCisJCWJvYXJkKGRldiktPmFpX2ZpZm8tPm51bV9zZWdtZW50cyAqCisJCWJvYXJkKGRldiktPmFpX2ZpZm8tPnNhbXBsZV9wYWNraW5nX3JhdGlvOworfQorCitzdGF0aWMgaW50IHNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBudW1fZW50cmllcykKK3sKKwlzdGF0aWMgY29uc3QgaW50IGluY3JlbWVudF9zaXplID0gMHgxMDA7CisJY29uc3Qgc3RydWN0IGh3X2ZpZm9faW5mbyAqY29uc3QgZmlmbyA9IGJvYXJkKGRldiktPmFpX2ZpZm87CisJdW5zaWduZWQgaW50IG51bV9pbmNyZW1lbnRzOworCXVpbnQxNl90IGJpdHM7CisKKwlpZiAobnVtX2VudHJpZXMgPCBpbmNyZW1lbnRfc2l6ZSkKKwkJbnVtX2VudHJpZXMgPSBpbmNyZW1lbnRfc2l6ZTsKKwlpZiAobnVtX2VudHJpZXMgPiBmaWZvLT5tYXhfc2VnbWVudF9sZW5ndGgpCisJCW51bV9lbnRyaWVzID0gZmlmby0+bWF4X3NlZ21lbnRfbGVuZ3RoOworCisJLy8gMSA9PSAyNTYgZW50cmllcywgMiA9PSA1MTIgZW50cmllcywgZXRjCisJbnVtX2luY3JlbWVudHMgPSAobnVtX2VudHJpZXMgKyBpbmNyZW1lbnRfc2l6ZSAvIDIpIC8gaW5jcmVtZW50X3NpemU7CisKKwliaXRzID0gKH4obnVtX2luY3JlbWVudHMgLSAxKSkgJiBmaWZvLT5maWZvX3NpemVfcmVnX21hc2s7CisJcHJpdihkZXYpLT5maWZvX3NpemVfYml0cyAmPSB+Zmlmby0+Zmlmb19zaXplX3JlZ19tYXNrOworCXByaXYoZGV2KS0+Zmlmb19zaXplX2JpdHMgfD0gYml0czsKKwl3cml0ZXcocHJpdihkZXYpLT5maWZvX3NpemVfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEZJRk9fU0laRV9SRUcpOworCisJcHJpdihkZXYpLT5haV9maWZvX3NlZ21lbnRfbGVuZ3RoID0gbnVtX2luY3JlbWVudHMgKiBpbmNyZW1lbnRfc2l6ZTsKKworCURFQlVHX1BSSU5UKCJzZXQgaGFyZHdhcmUgZmlmbyBzZWdtZW50IGxlbmd0aCB0byAlaVxuIiwKKwkJcHJpdihkZXYpLT5haV9maWZvX3NlZ21lbnRfbGVuZ3RoKTsKKworCXJldHVybiBwcml2KGRldiktPmFpX2ZpZm9fc2VnbWVudF9sZW5ndGg7Cit9CisKKy8qIHBjaS02MDI1IDg4MDAgY2FsZGFjOgorICogYWRkcmVzcyAwID09IGRhYyBjaGFubmVsIDAgb2Zmc2V0CisgKiBhZGRyZXNzIDEgPT0gZGFjIGNoYW5uZWwgMCBnYWluCisgKiBhZGRyZXNzIDIgPT0gZGFjIGNoYW5uZWwgMSBvZmZzZXQKKyAqIGFkZHJlc3MgMyA9PSBkYWMgY2hhbm5lbCAxIGdhaW4KKyAqIGFkZHJlc3MgNCA9PSBmaW5lIGFkYyBvZmZzZXQKKyAqIGFkZHJlc3MgNSA9PSBjb2Fyc2UgYWRjIG9mZnNldAorICogYWRkcmVzcyA2ID09IGNvYXJzZSBhZGMgZ2FpbgorICogYWRkcmVzcyA3ID09IGZpbmUgYWRjIGdhaW4KKyAqLworLyogcGNpLTY0MDIvMTYgdXNlcyBhbGwgOCBjaGFubmVscyBmb3IgZGFjOgorICogYWRkcmVzcyAwID09IGRhYyBjaGFubmVsIDAgZmluZSBnYWluCisgKiBhZGRyZXNzIDEgPT0gZGFjIGNoYW5uZWwgMCBjb2Fyc2UgZ2FpbgorICogYWRkcmVzcyAyID09IGRhYyBjaGFubmVsIDAgY29hcnNlIG9mZnNldAorICogYWRkcmVzcyAzID09IGRhYyBjaGFubmVsIDEgY29hcnNlIG9mZnNldAorICogYWRkcmVzcyA0ID09IGRhYyBjaGFubmVsIDEgZmluZSBnYWluCisgKiBhZGRyZXNzIDUgPT0gZGFjIGNoYW5uZWwgMSBjb2Fyc2UgZ2FpbgorICogYWRkcmVzcyA2ID09IGRhYyBjaGFubmVsIDAgZmluZSBvZmZzZXQKKyAqIGFkZHJlc3MgNyA9PSBkYWMgY2hhbm5lbCAxIGZpbmUgb2Zmc2V0CisqLworCitzdGF0aWMgaW50IGNhbGRhY184ODAwX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKKwl1aW50OF90IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgbnVtX2NhbGRhY19jaGFubmVscyA9IDg7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTE7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbSA9ICgoYWRkcmVzcyAmIDB4NykgPDwgOCkgfCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgYml0LCByZWdpc3Rlcl9iaXRzOworCXN0YXRpYyBjb25zdCBpbnQgY2FsZGFjXzg4MDBfdWRlbGF5ID0gMTsKKworCWlmIChhZGRyZXNzID49IG51bV9jYWxkYWNfY2hhbm5lbHMpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImlsbGVnYWwgY2FsZGFjIGNoYW5uZWwiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJcmVnaXN0ZXJfYml0cyA9IDA7CisJCWlmIChiaXRzdHJlYW0gJiBiaXQpCisJCQlyZWdpc3Rlcl9iaXRzIHw9IFNFUklBTF9EQVRBX0lOX0JJVDsKKwkJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCXJlZ2lzdGVyX2JpdHMgfD0gU0VSSUFMX0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJfQorCWNvbWVkaV91ZGVsYXkoY2FsZGFjXzg4MDBfdWRlbGF5KTsKKwl3cml0ZXcoU0VMRUNUXzg4MDBfQklULCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX3VkZWxheSk7CisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCWNvbWVkaV91ZGVsYXkoY2FsZGFjXzg4MDBfdWRlbGF5KTsKKwlyZXR1cm4gMDsKK30KKworLy8gNDAyMCBjYWxkYWNzCitzdGF0aWMgaW50IGNhbGRhY19pMmNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjYWxkYWNfY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdWludDhfdCBzZXJpYWxfYnl0ZXNbM107CisJdWludDhfdCBpMmNfYWRkcjsKKwllbnVtIHBvaW50ZXJfYml0cyB7CisJCS8vIG1hbnVhbCBoYXMgZ2FpbiBhbmQgb2Zmc2V0IGJpdHMgc3dpdGNoZWQKKwkJT0ZGU0VUXzBfMiA9IDB4MSwKKwkJR0FJTl8wXzIgPSAweDIsCisJCU9GRlNFVF8xXzMgPSAweDQsCisJCUdBSU5fMV8zID0gMHg4LAorCX07CisJZW51bSBkYXRhX2JpdHMgeworCQlOT1RfQ0xFQVJfUkVHSVNURVJTID0gMHgyMCwKKwl9OworCisJc3dpdGNoIChjYWxkYWNfY2hhbm5lbCkgeworCWNhc2UgMDoJCS8vIGNoYW4gMCBvZmZzZXQKKwkJaTJjX2FkZHIgPSBDQUxEQUMwX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBPRkZTRVRfMF8yOworCQlicmVhazsKKwljYXNlIDE6CQkvLyBjaGFuIDEgb2Zmc2V0CisJCWkyY19hZGRyID0gQ0FMREFDMF9JMkNfQUREUjsKKwkJc2VyaWFsX2J5dGVzWzBdID0gT0ZGU0VUXzFfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLy8gY2hhbiAyIG9mZnNldAorCQlpMmNfYWRkciA9IENBTERBQzFfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IE9GRlNFVF8wXzI7CisJCWJyZWFrOworCWNhc2UgMzoJCS8vIGNoYW4gMyBvZmZzZXQKKwkJaTJjX2FkZHIgPSBDQUxEQUMxX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBPRkZTRVRfMV8zOworCQlicmVhazsKKwljYXNlIDQ6CQkvLyBjaGFuIDAgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzBfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMF8yOworCQlicmVhazsKKwljYXNlIDU6CQkvLyBjaGFuIDEgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzBfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMV8zOworCQlicmVhazsKKwljYXNlIDY6CQkvLyBjaGFuIDIgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzFfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMF8yOworCQlicmVhazsKKwljYXNlIDc6CQkvLyBjaGFuIDMgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzFfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMV8zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiaW52YWxpZCBjYWxkYWMgY2hhbm5lbFxuIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCXNlcmlhbF9ieXRlc1sxXSA9IE5PVF9DTEVBUl9SRUdJU1RFUlMgfCAoKHZhbHVlID4+IDgpICYgMHhmKTsKKwlzZXJpYWxfYnl0ZXNbMl0gPSB2YWx1ZSAmIDB4ZmY7CisJaTJjX3dyaXRlKGRldiwgaTJjX2FkZHIsIHNlcmlhbF9ieXRlcywgMyk7CisJcmV0dXJuIDA7Cit9CisKKy8vIFRoZWlyIGkyYyByZXF1aXJlcyBhIGh1Z2UgZGVsYXkgb24gc2V0dGluZyBjbG9jayBvciBkYXRhIGhpZ2ggZm9yIHNvbWUgcmVhc29uCitzdGF0aWMgY29uc3QgaW50IGkyY19oaWdoX2NvbWVkaV91ZGVsYXkgPSAxMDAwOworc3RhdGljIGNvbnN0IGludCBpMmNfbG93X2NvbWVkaV91ZGVsYXkgPSAxMDsKKworLy8gc2V0IGkyYyBkYXRhIGxpbmUgaGlnaCBvciBsb3cKK3N0YXRpYyB2b2lkIGkyY19zZXRfc2RhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgc3RhdGUpCit7CisJc3RhdGljIGNvbnN0IGludCBkYXRhX2JpdCA9IENUTF9FRV9XOworCXZvaWQgKnBseF9jb250cm9sX2FkZHIgPSBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHOworCisJaWYgKHN0YXRlKSB7CisJCS8vIHNldCBkYXRhIGxpbmUgaGlnaAorCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfmRhdGFfYml0OworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShpMmNfaGlnaF9jb21lZGlfdWRlbGF5KTsKKwl9IGVsc2UJCQkvLyBzZXQgZGF0YSBsaW5lIGxvdworCXsKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IGRhdGFfYml0OworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShpMmNfbG93X2NvbWVkaV91ZGVsYXkpOworCX0KK30KKworLy8gc2V0IGkyYyBjbG9jayBsaW5lIGhpZ2ggb3IgbG93CitzdGF0aWMgdm9pZCBpMmNfc2V0X3NjbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHN0YXRlKQoreworCXN0YXRpYyBjb25zdCBpbnQgY2xvY2tfYml0ID0gQ1RMX1VTRVJPOworCXZvaWQgKnBseF9jb250cm9sX2FkZHIgPSBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHOworCisJaWYgKHN0YXRlKSB7CisJCS8vIHNldCBjbG9jayBsaW5lIGhpZ2gKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5jbG9ja19iaXQ7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCQljb21lZGlfdWRlbGF5KGkyY19oaWdoX2NvbWVkaV91ZGVsYXkpOworCX0gZWxzZQkJCS8vIHNldCBjbG9jayBsaW5lIGxvdworCXsKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IGNsb2NrX2JpdDsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoaTJjX2xvd19jb21lZGlfdWRlbGF5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGkyY193cml0ZV9ieXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IGJ5dGUpCit7CisJdWludDhfdCBiaXQ7CisJdW5zaWduZWQgaW50IG51bV9iaXRzID0gODsKKworCURFQlVHX1BSSU5UKCJ3cml0aW5nIHRvIGkyYyBieXRlIDB4JXhcbiIsIGJ5dGUpOworCisJZm9yIChiaXQgPSAxIDw8IChudW1fYml0cyAtIDEpOyBiaXQ7IGJpdCA+Pj0gMSkgeworCQlpMmNfc2V0X3NjbChkZXYsIDApOworCQlpZiAoKGJ5dGUgJiBiaXQpKQorCQkJaTJjX3NldF9zZGEoZGV2LCAxKTsKKwkJZWxzZQorCQkJaTJjX3NldF9zZGEoZGV2LCAwKTsKKwkJaTJjX3NldF9zY2woZGV2LCAxKTsKKwl9Cit9CisKKy8vIHdlIGNhbid0IHJlYWxseSByZWFkIHRoZSBsaW5lcywgc28gZmFrZSBpdAorc3RhdGljIGludCBpMmNfcmVhZF9hY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaTJjX3NldF9zY2woZGV2LCAwKTsKKwlpMmNfc2V0X3NkYShkZXYsIDEpOworCWkyY19zZXRfc2NsKGRldiwgMSk7CisKKwlyZXR1cm4gMDsJCS8vIHJldHVybiBmYWtlIGFja25vd2xlZGdlIGJpdAorfQorCisvLyBzZW5kIHN0YXJ0IGJpdAorc3RhdGljIHZvaWQgaTJjX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWkyY19zZXRfc2NsKGRldiwgMSk7CisJaTJjX3NldF9zZGEoZGV2LCAxKTsKKwlpMmNfc2V0X3NkYShkZXYsIDApOworfQorCisvLyBzZW5kIHN0b3AgYml0CitzdGF0aWMgdm9pZCBpMmNfc3RvcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpMmNfc2V0X3NjbChkZXYsIDApOworCWkyY19zZXRfc2RhKGRldiwgMCk7CisJaTJjX3NldF9zY2woZGV2LCAxKTsKKwlpMmNfc2V0X3NkYShkZXYsIDEpOworfQorCitzdGF0aWMgdm9pZCBpMmNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCWNvbnN0IHVpbnQ4X3QgKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCXVuc2lnbmVkIGludCBpOworCXVpbnQ4X3QgYml0c3RyZWFtOworCXN0YXRpYyBjb25zdCBpbnQgcmVhZF9iaXQgPSAweDE7CisKKy8vWFhYIG5lZWQgbXV0ZXggdG8gcHJldmVudCBzaW11bHRhbmVvdXMgYXR0ZW1wdHMgdG8gYWNjZXNzIGVlcHJvbSBhbmQgaTJjIGJ1cworCisJLy8gbWFrZSBzdXJlIHdlIGRvbnQgc2VuZCBhbnl0aGluZyB0byBlZXByb20KKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DUzsKKworCWkyY19zdG9wKGRldik7CisJaTJjX3N0YXJ0KGRldik7CisKKwkvLyBzZW5kIGFkZHJlc3MgYW5kIHdyaXRlIGJpdAorCWJpdHN0cmVhbSA9IChhZGRyZXNzIDw8IDEpICYgfnJlYWRfYml0OworCWkyY193cml0ZV9ieXRlKGRldiwgYml0c3RyZWFtKTsKKworCS8vIGdldCBhY2tub3dsZWRnZQorCWlmIChpMmNfcmVhZF9hY2soZGV2KSAhPSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpMmMgd3JpdGUgZmFpbGVkOiBubyBhY2tub3dsZWRnZSIpOworCQlpMmNfc3RvcChkZXYpOworCQlyZXR1cm47CisJfQorCS8vIHdyaXRlIGRhdGEgYnl0ZXMKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaTJjX3dyaXRlX2J5dGUoZGV2LCBkYXRhW2ldKTsKKwkJaWYgKGkyY19yZWFkX2FjayhkZXYpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJpMmMgd3JpdGUgZmFpbGVkOiBubyBhY2tub3dsZWRnZSIpOworCQkJaTJjX3N0b3AoZGV2KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpMmNfc3RvcChkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMGE1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKQEAgLTAsMCArMSw4NDEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKKyAgICBUaGlzIGludGVuZHMgdG8gYmUgYSBkcml2ZXIgZm9yIHRoZSBDb21wdXRlckJvYXJkcyAvIE1lYXN1cmVtZW50Q29tcHV0aW5nCisgICAgUENJLUREQSBzZXJpZXMuCisKKwkgQ29weXJpZ2h0IChDKSAyMDAxIEl2YW4gTWFydGluZXogPGl2YW5tckBhbHRhdmlzdGEuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAwMSBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGNiX3BjaWRkYQorRGVzY3JpcHRpb246IE1lYXN1cmVtZW50Q29tcHV0aW5nIFBDSS1EREEgc2VyaWVzCitBdXRob3I6IEl2YW4gTWFydGluZXogPGl2YW5tckBhbHRhdmlzdGEuY29tPiwgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorU3RhdHVzOiBTdXBwb3J0cyAwOC8xNiwgMDQvMTYsIDAyLzE2LCAwOC8xMiwgMDQvMTIsIGFuZCAwMi8xMgorRGV2aWNlczogW01lYXN1cmVtZW50IENvbXB1dGluZ10gUENJLUREQTA4LzEyIChjYl9wY2lkZGEpLCBQQ0ktRERBMDQvMTIsCisgIFBDSS1EREEwMi8xMiwgUENJLUREQTA4LzE2LCBQQ0ktRERBMDQvMTYsIFBDSS1EREEwMi8xNgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKyAgZGV2aWNlIHdpbGwgYmUgdXNlZC4KKworT25seSBzaW1wbGUgYW5hbG9nIG91dHB1dCB3cml0aW5nIGlzIHN1cHBvcnRlZC4KKworU28gZmFyIGl0IGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGg6CisgIC0gUENJLUREQTA4LzEyCitQbGVhc2UgcmVwb3J0IHN1Y2Nlc3MvZmFpbHVyZSB3aXRoIG90aGVyIGRpZmZlcmVudCBjYXJkcyB0bworPGNvbWVkaUBjb21lZGkub3JnPi4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DQgkweDEzMDcJLy8gUENJIHZlbmRvciBudW1iZXIgb2YgQ29tcHV0ZXJCb2FyZHMKKyNkZWZpbmUgTl9CT0FSRFMJMTAJLy8gTnVtYmVyIG9mIGJvYXJkcyBpbiBjYl9wY2lkZGFfYm9hcmRzCisjZGVmaW5lIEVFUFJPTV9TSVpFCTEyOAkvLyBudW1iZXIgb2YgZW50cmllcyBpbiBlZXByb20KKyNkZWZpbmUgTUFYX0FPX0NIQU5ORUxTIDgJLy8gbWF4aW11bSBudW1iZXIgb2YgYW8gY2hhbm5lbHMgZm9yIHN1cHBvcnRlZCBib2FyZHMKKworLyogUENJLUREQSBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBESUdJVEFMSU9fQkFEUklOREVYCTIKKwkvLyBESUdJVEFMIEkvTyBpcyBwY2lfZGV2LT5yZXNvdXJjZVsyXQorI2RlZmluZSBESUdJVEFMSU9fU0laRSA4CisJLy8gRElHSVRBTCBJL08gdXNlcyA4IEkvTyBwb3J0IGFkZHJlc3NlcworI2RlZmluZSBEQUNfQkFEUklOREVYCTMKKwkvLyBEQUMgaXMgcGNpX2Rldi0+cmVzb3VyY2VbM10KKworLyogRGlnaXRhbCBJL08gcmVnaXN0ZXJzICovCisjZGVmaW5lIFBPUlQxQSAwCQkvLyBQT1JUIDFBIERBVEEKKworI2RlZmluZSBQT1JUMUIgMQkJLy8gUE9SVCAxQiBEQVRBCisKKyNkZWZpbmUgUE9SVDFDIDIJCS8vIFBPUlQgMUMgREFUQQorCisjZGVmaW5lIENPTlRST0wxIDMJCS8vIENPTlRST0wgUkVHSVNURVIgMQorCisjZGVmaW5lIFBPUlQyQSA0CQkvLyBQT1JUIDJBIERBVEEKKworI2RlZmluZSBQT1JUMkIgNQkJLy8gUE9SVCAyQiBEQVRBCisKKyNkZWZpbmUgUE9SVDJDIDYJCS8vIFBPUlQgMkMgREFUQQorCisjZGVmaW5lIENPTlRST0wyIDcJCS8vIENPTlRST0wgUkVHSVNURVIgMgorCisvKiBEQUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIERBQ09OVFJPTAkwCS8vIEQvQSBDT05UUk9MIFJFR0lTVEVSCisjZGVmaW5lCVNVCTAwMDAwMDEJCS8vIFNpbXVsdGFuZW91cyB1cGRhdGUgZW5hYmxlZAorI2RlZmluZSBOT1NVCTAwMDAwMDAJCS8vIFNpbXVsdGFuZW91cyB1cGRhdGUgZGlzYWJsZWQKKyNkZWZpbmUJRU5BQkxFREFDCTAwMDAwMDIJLy8gRW5hYmxlIHNwZWNpZmllZCBEQUMKKyNkZWZpbmUJRElTQUJMRURBQwkwMDAwMDAwCS8vIERpc2FibGUgc3BlY2lmaWVkIERBQworI2RlZmluZSBSQU5HRTJWNQkwMDAwMDAwCS8vIDIuNVYKKyNkZWZpbmUgUkFOR0U1VgkwMDAwMjAwCQkvLyA1VgorI2RlZmluZSBSQU5HRTEwVgkwMDAwMzAwCS8vIDEwVgorI2RlZmluZSBVTklQCTAwMDA0MDAJCS8vIFVuaXBvbGFyIG91dHB1dHMKKyNkZWZpbmUgQklQCTAwMDAwMDAJCS8vIEJpcG9sYXIgb3V0cHV0cworCisjZGVmaW5lIERBQ0FMSUJSQVRJT04xCTQJLy8gRC9BIENBTElCUkFUSU9OIFJFR0lTVEVSIDEKKy8vd3JpdGUgYml0cworI2RlZmluZQlTRVJJQUxfSU5fQklUCTB4MQkvLyBzZXJpYWwgZGF0YSBpbnB1dCBmb3IgZWVwcm9tLCBjYWxkYWNzLCByZWZlcmVuY2UgZGFjCisjZGVmaW5lCUNBTF9DSEFOTkVMX01BU0sJKDB4NyA8PCAxKQorI2RlZmluZQlDQUxfQ0hBTk5FTF9CSVRTKGNoYW5uZWwpCSgoKGNoYW5uZWwpIDw8IDEpICYgQ0FMX0NIQU5ORUxfTUFTSykKKy8vcmVhZCBiaXRzCisjZGVmaW5lCUNBTF9DT1VOVEVSX01BU0sJMHgxZgorI2RlZmluZQlDQUxfQ09VTlRFUl9PVkVSRkxPV19CSVQJMHgyMAkvLyBjYWxpYnJhdGlvbiBjb3VudGVyIG92ZXJmbG93IHN0YXR1cyBiaXQKKyNkZWZpbmUJQU9fQkVMT1dfUkVGX0JJVAkweDQwCS8vIGFuYWxvZyBvdXRwdXQgaXMgbGVzcyB0aGFuIHJlZmVyZW5jZSBkYWMgdm9sdGFnZQorI2RlZmluZQlTRVJJQUxfT1VUX0JJVAkweDgwCS8vIHNlcmlhbCBkYXRhIG91dCwgZm9yIHJlYWRpbmcgZnJvbSBlZXByb20KKworI2RlZmluZSBEQUNBTElCUkFUSU9OMgk2CS8vIEQvQSBDQUxJQlJBVElPTiBSRUdJU1RFUiAyCisjZGVmaW5lCVNFTEVDVF9FRVBST01fQklUCTB4MQkvLyBzZW5kIHNlcmlhbCBkYXRhIGluIHRvIGVlcHJvbQorI2RlZmluZQlERVNFTEVDVF9SRUZfREFDX0JJVAkweDIJLy8gZG9uJ3Qgc2VuZCBzZXJpYWwgZGF0YSB0byBNQVg1NDIgcmVmZXJlbmNlIGRhYworI2RlZmluZQlERVNFTEVDVF9DQUxEQUNfQklUKG4pCSgweDQgPDwgKG4pKQkvLyBkb24ndCBzZW5kIHNlcmlhbCBkYXRhIHRvIGNhbGRhYyBuCisjZGVmaW5lCURVTU1ZX0JJVAkweDQwCS8vIG1hbnVhbCBzYXlzIHRvIHNldCB0aGlzIGJpdCB3aXRoIG5vIGV4cGxhbmF0aW9uCisKKyNkZWZpbmUgREFEQVRBCTgJCS8vIEZJUlNUIEQvQSBEQVRBIFJFR0lTVEVSICgwKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgY2JfcGNpZGRhX3JhbmdlcyA9IHsKKwk2LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJfQorfTsKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdHdvIGltYWdpbmFyeSBib2FyZHMuICBEZXNjcmliaW5nIHRoZQorICogYm9hcmRzIGluIHRoaXMgd2F5IGlzIG9wdGlvbmFsLCBhbmQgY29tcGxldGVseSBkcml2ZXItZGVwZW5kZW50LgorICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCisgKi8KK3N0cnVjdCBjYl9wY2lkZGFfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciBzdGF0dXM7CQkvLyBEcml2ZXIgc3RhdHVzOgorCS8vIDAgLSB0ZXN0ZWQKKwkvLyAxIC0gbWFudWFsIHJlYWQsIG5vdCB0ZXN0ZWQKKwkvLyAyIC0gbWFudWFsIG5vdCByZWFkCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOworCWludCBhb19jaGFuczsKKwlpbnQgYW9fYml0czsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VzOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2JfcGNpZGRhX2JvYXJkIGNiX3BjaWRkYV9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwMi8xMiIsCisJICAgICAgc3RhdHVzOgkxLAorCSAgICAgIGRldmljZV9pZDoweDIwLAorCSAgICAgIGFvX2NoYW5zOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwNC8xMiIsCisJICAgICAgc3RhdHVzOgkxLAorCSAgICAgIGRldmljZV9pZDoweDIxLAorCSAgICAgIGFvX2NoYW5zOjQsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwOC8xMiIsCisJICAgICAgc3RhdHVzOgkwLAorCSAgICAgIGRldmljZV9pZDoweDIyLAorCSAgICAgIGFvX2NoYW5zOjgsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwMi8xNiIsCisJICAgICAgc3RhdHVzOgkyLAorCSAgICAgIGRldmljZV9pZDoweDIzLAorCSAgICAgIGFvX2NoYW5zOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwNC8xNiIsCisJICAgICAgc3RhdHVzOgkyLAorCSAgICAgIGRldmljZV9pZDoweDI0LAorCSAgICAgIGFvX2NoYW5zOjQsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwOC8xNiIsCisJICAgICAgc3RhdHVzOgkwLAorCSAgICAgIGRldmljZV9pZDoweDI1LAorCSAgICAgIGFvX2NoYW5zOjgsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYl9wY2lkZGFfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjYl9wY2lkZGFfcGNpX3RhYmxlKTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgY2JfcGNpZGRhX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBjYl9wY2lkZGFfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCisJdW5zaWduZWQgbG9uZyBkaWdpdGFsaW87CisJdW5zaWduZWQgbG9uZyBkYWM7CisJLy91bnNpZ25lZCBsb25nIGNvbnRyb2xfc3RhdHVzOworCS8vdW5zaWduZWQgbG9uZyBhZGNfZmlmbzsKKwl1bnNpZ25lZCBpbnQgZGFjX2NhbDFfYml0czsJLy8gYml0cyBsYXN0IHdyaXR0ZW4gdG8gZGEgY2FsaWJyYXRpb24gcmVnaXN0ZXIgMQorCXVuc2lnbmVkIGludCBhb19yYW5nZVtNQVhfQU9fQ0hBTk5FTFNdOwkvLyBjdXJyZW50IHJhbmdlIHNldHRpbmdzIGZvciBvdXRwdXQgY2hhbm5lbHMKKwl1MTYgZWVwcm9tX2RhdGFbRUVQUk9NX1NJWkVdOwkvLyBzb2Z0d2FyZSBjb3B5IG9mIGJvYXJkJ3MgZWVwcm9tCit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGNiX3BjaWRkYV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGNiX3BjaWRkYV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjYl9wY2lkZGFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKy8vc3RhdGljIGludCBjYl9wY2lkZGFfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisvL3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKKy8vc3RhdGljIGludCBjYl9wY2lkZGFfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKKy8vc3RhdGljIGludCBjYl9wY2lkZGFfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucyxpbnQgcm91bmQpOworc3RhdGljIHVuc2lnbmVkIGludCBjYl9wY2lkZGFfc2VyaWFsX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGNiX3BjaWRkYV9zZXJpYWxfb3V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUsCisJdW5zaWduZWQgaW50IG51bV9iaXRzKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2JfcGNpZGRhX3JlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzKTsKK3N0YXRpYyB2b2lkIGNiX3BjaWRkYV9jYWxpYnJhdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCByYW5nZSk7CisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRkYSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2lkZGEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNiX3BjaWRkYV9hdHRhY2gsCisgICAgICBkZXRhY2g6Y2JfcGNpZGRhX2RldGFjaCwKK307CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4KKyAqLworc3RhdGljIGludCBjYl9wY2lkZGFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGRhOiAiLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNiX3BjaWRkYV9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCisgKi8KKwlwcmludGsoIlxuIik7CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DQikgeworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTl9CT0FSRFM7IGluZGV4KyspIHsKKwkJCQlpZiAoY2JfcGNpZGRhX2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkID09CisJCQkJCXBjaWRldi0+ZGV2aWNlKSB7CisJCQkJCWdvdG8gZm91bmQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICghcGNpZGV2KSB7CisJCXByaW50aygiTm90IGEgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisgICAgICBmb3VuZDoKKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCWRldi0+Ym9hcmRfcHRyID0gY2JfcGNpZGRhX2JvYXJkcyArIGluZGV4OworCS8vICJ0aGlzYm9hcmQiIG1hY3JvIGNhbiBiZSB1c2VkIGZyb20gaGVyZS4KKwlwcmludGsoIkZvdW5kICVzIGF0IHJlcXVlc3RlZCBwb3NpdGlvblxuIiwgdGhpc2JvYXJkLT5uYW1lKTsKKworCS8qCisJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy4KKwkgKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCXByaW50aygiY2JfcGNpZGRhOiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworLyoKKyAqIEFsbG9jYXRlIHRoZSBJL08gcG9ydHMuCisgKi8KKwlkZXZwcml2LT5kaWdpdGFsaW8gPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgRElHSVRBTElPX0JBRFJJTkRFWCk7CisJZGV2cHJpdi0+ZGFjID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIERBQ19CQURSSU5ERVgpOworCisvKgorICogV2FybiBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBkcml2ZXIuCisgKi8KKwlpZiAodGhpc2JvYXJkLT5zdGF0dXMgPT0gMikKKwkJcHJpbnRrKCJXQVJOSU5HOiBEUklWRVIgRk9SIFRISVMgQk9BUkQgTk9UIENIRUNLRUQgV0lUSCBNQU5VQUwuICIgIldPUktTIEFTU1VNSU5HIEZVTEwgQ09NUEFUSUJJTElUWSBXSVRIIFBDSS1EREEwOC8xMi4gIiAiUExFQVNFIFJFUE9SVCBVU0FHRSBUTyA8aXZhbm1yQGFsdGF2aXN0YS5jb20+LlxuIik7CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+cmFuZ2VzOworCXMtPmluc25fd3JpdGUgPSBjYl9wY2lkZGFfYW9fd2luc247CisvLyAgICAgIHMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisvLyAgICAgIHMtPmRvX2NtZCA9IGNiX3BjaWRkYV9haV9jbWQ7CisvLyAgICAgIHMtPmRvX2NtZHRlc3QgPSBjYl9wY2lkZGFfYWlfY21kdGVzdDsKKworCS8vIHR3byA4MjU1IGRpZ2l0YWwgaW8gc3ViZGV2aWNlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5kaWdpdGFsaW8pOworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5kaWdpdGFsaW8gKyBQT1JUMkEpOworCisJcHJpbnRrKCIgZWVwcm9tOiIpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEVFUFJPTV9TSVpFOyBpbmRleCsrKSB7CisJCWRldnByaXYtPmVlcHJvbV9kYXRhW2luZGV4XSA9IGNiX3BjaWRkYV9yZWFkX2VlcHJvbShkZXYsIGluZGV4KTsKKwkJcHJpbnRrKCIgJWk6MHgleCAiLCBpbmRleCwgZGV2cHJpdi0+ZWVwcm9tX2RhdGFbaW5kZXhdKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJLy8gc2V0IGNhbGlicmF0aW9ucyBkYWNzCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpc2JvYXJkLT5hb19jaGFuczsgaW5kZXgrKykKKwkJY2JfcGNpZGRhX2NhbGlicmF0ZShkZXYsIGluZGV4LCBkZXZwcml2LT5hb19yYW5nZVtpbmRleF0pOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qCisgKiBEZWFsbG9jYXRlIHRoZSBJL08gcG9ydHMuCisgKi8KKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPmRhYykgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCS8vIGNsZWFudXAgODI1NQorCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDEpOworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMik7CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGRhOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJIHdpbGwgcHJvZ3JhbSB0aGlzIGxhdGVyLi4uIDstKQorICovCisjaWYgMAorc3RhdGljIGludCBjYl9wY2lkZGFfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcHJpbnRrKCJjYl9wY2lkZGFfYWlfY21kXG4iKTsKKwlwcmludGsoInN1YmRldjogJWRcbiIsIGNtZC0+c3ViZGV2KTsKKwlwcmludGsoImZsYWdzOiAlZFxuIiwgY21kLT5mbGFncyk7CisJcHJpbnRrKCJzdGFydF9zcmM6ICVkXG4iLCBjbWQtPnN0YXJ0X3NyYyk7CisJcHJpbnRrKCJzdGFydF9hcmc6ICVkXG4iLCBjbWQtPnN0YXJ0X2FyZyk7CisJcHJpbnRrKCJzY2FuX2JlZ2luX3NyYzogJWRcbiIsIGNtZC0+c2Nhbl9iZWdpbl9zcmMpOworCXByaW50aygiY29udmVydF9zcmM6ICVkXG4iLCBjbWQtPmNvbnZlcnRfc3JjKTsKKwlwcmludGsoImNvbnZlcnRfYXJnOiAlZFxuIiwgY21kLT5jb252ZXJ0X2FyZyk7CisJcHJpbnRrKCJzY2FuX2VuZF9zcmM6ICVkXG4iLCBjbWQtPnNjYW5fZW5kX3NyYyk7CisJcHJpbnRrKCJzY2FuX2VuZF9hcmc6ICVkXG4iLCBjbWQtPnNjYW5fZW5kX2FyZyk7CisJcHJpbnRrKCJzdG9wX3NyYzogJWRcbiIsIGNtZC0+c3RvcF9zcmMpOworCXByaW50aygic3RvcF9hcmc6ICVkXG4iLCBjbWQtPnN0b3BfYXJnKTsKKwlwcmludGsoImNoYW5saXN0X2xlbjogJWRcbiIsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKyNlbmRpZgorCisjaWYgMAorc3RhdGljIGludCBjYl9wY2lkZGFfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSCisJCSYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkxMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBNSU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzZWUgYWJvdmUgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA5KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNiX3BjaWRkYV9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQljYl9wY2lkZGFfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGZvcm0sIHRoaXMgaXMganVzdAorICogd2hhdCBoYXBwZW5zIHRvIGJlIHVzZWQgaW4gc29tZSBvZiB0aGUgZHJpdmVycy4gIEl0IHNob3VsZAorICogY29udmVydCBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nCisgKiB0aGUgZGV2aWNlLiAgQWxzbywgaXQgc2hvdWxkIGFkanVzdCBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvCisgKiB0aGUgYWN0dWFsIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLiAqLworI2lmIDAKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwkvKiB0cml2aWFsIHRpbWVyICovCisJcmV0dXJuICpuczsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNiX3BjaWRkYV9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNvbW1hbmQ7CisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHJhbmdlOworCisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gYWRqdXN0IGNhbGlicmF0aW9uIGRhY3MgaWYgcmFuZ2UgaGFzIGNoYW5nZWQKKwlpZiAocmFuZ2UgIT0gZGV2cHJpdi0+YW9fcmFuZ2VbY2hhbm5lbF0pCisJCWNiX3BjaWRkYV9jYWxpYnJhdGUoZGV2LCBjaGFubmVsLCByYW5nZSk7CisKKwkvKiBvdXRwdXQgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJY29tbWFuZCA9IE5PU1UgfCBFTkFCTEVEQUM7CisKKwkvKiBvdXRwdXQgY2hhbm5lbCByYW5nZSAqLworCXN3aXRjaCAocmFuZ2UpIHsKKwljYXNlIDA6CisJCWNvbW1hbmQgfD0gQklQIHwgUkFOR0UxMFY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY29tbWFuZCB8PSBCSVAgfCBSQU5HRTVWOworCQlicmVhazsKKwljYXNlIDI6CisJCWNvbW1hbmQgfD0gQklQIHwgUkFOR0UyVjU7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJY29tbWFuZCB8PSBVTklQIHwgUkFOR0UxMFY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJY29tbWFuZCB8PSBVTklQIHwgUkFOR0U1VjsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQljb21tYW5kIHw9IFVOSVAgfCBSQU5HRTJWNTsKKwkJYnJlYWs7CisJfTsKKworCS8qIG91dHB1dCBjaGFubmVsIHNwZWNpZmljYXRpb24gKi8KKwljb21tYW5kIHw9IGNoYW5uZWwgPDwgMjsKKwlvdXR3KGNvbW1hbmQsIGRldnByaXYtPmRhYyArIERBQ09OVFJPTCk7CisKKwkvKiB3cml0ZSBkYXRhICovCisJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5kYWMgKyBEQURBVEEgKyBjaGFubmVsICogMik7CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiAxOworfQorCisvLyBsb3dsZXZlbCByZWFkIGZyb20gZWVwcm9tCitzdGF0aWMgdW5zaWduZWQgaW50IGNiX3BjaWRkYV9zZXJpYWxfaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKwlpbnQgaTsKKwljb25zdCBpbnQgdmFsdWVfd2lkdGggPSAxNjsJLy8gbnVtYmVyIG9mIGJpdHMgd2lkZSB2YWx1ZXMgYXJlCisKKwlmb3IgKGkgPSAxOyBpIDw9IHZhbHVlX3dpZHRoOyBpKyspIHsKKwkJLy8gcmVhZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWlmIChpbndfcChkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMSkgJiBTRVJJQUxfT1VUX0JJVCkgeworCQkJdmFsdWUgfD0gMSA8PCAodmFsdWVfd2lkdGggLSBpKTsKKwkJfQorCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworLy8gbG93bGV2ZWwgd3JpdGUgdG8gZWVwcm9tL2RhYworc3RhdGljIHZvaWQgY2JfcGNpZGRhX3NlcmlhbF9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCB2YWx1ZSwKKwl1bnNpZ25lZCBpbnQgbnVtX2JpdHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IG51bV9iaXRzOyBpKyspIHsKKwkJLy8gc2VuZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWlmICh2YWx1ZSAmICgxIDw8IChudW1fYml0cyAtIGkpKSkKKwkJCWRldnByaXYtPmRhY19jYWwxX2JpdHMgfD0gU0VSSUFMX0lOX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+ZGFjX2NhbDFfYml0cyAmPSB+U0VSSUFMX0lOX0JJVDsKKwkJb3V0d19wKGRldnByaXYtPmRhY19jYWwxX2JpdHMsIGRldnByaXYtPmRhYyArIERBQ0FMSUJSQVRJT04xKTsKKwl9Cit9CisKKy8vIHJlYWRzIGEgMTYgYml0IHZhbHVlIGZyb20gYm9hcmQncyBlZXByb20KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2JfcGNpZGRhX3JlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjYWwyX2JpdHM7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWNvbnN0IGludCBtYXhfbnVtX2NhbGRhY3MgPSA0OwkvLyBvbmUgY2FsZGFjIGZvciBldmVyeSB0d28gZGFjIGNoYW5uZWxzCisJY29uc3QgaW50IHJlYWRfaW5zdHJ1Y3Rpb24gPSAweDY7CS8vIGJpdHMgdG8gc2VuZCB0byB0ZWxsIGVlcHJvbSB3ZSB3YW50IHRvIHJlYWQKKwljb25zdCBpbnQgaW5zdHJ1Y3Rpb25fbGVuZ3RoID0gMzsKKwljb25zdCBpbnQgYWRkcmVzc19sZW5ndGggPSA4OworCisJLy8gc2VuZCBzZXJpYWwgb3V0cHV0IHN0cmVhbSB0byBlZXByb20KKwljYWwyX2JpdHMgPSBTRUxFQ1RfRUVQUk9NX0JJVCB8IERFU0VMRUNUX1JFRl9EQUNfQklUIHwgRFVNTVlfQklUOworCS8vIGRlYWN0aXZhdGUgY2FsZGFjcyAob25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGNoYW5uZWxzKQorCWZvciAoaSA9IDA7IGkgPCBtYXhfbnVtX2NhbGRhY3M7IGkrKykgeworCQljYWwyX2JpdHMgfD0gREVTRUxFQ1RfQ0FMREFDX0JJVChpKTsKKwl9CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworCisJLy8gdGVsbCBlZXByb20gd2Ugd2FudCB0byByZWFkCisJY2JfcGNpZGRhX3NlcmlhbF9vdXQoZGV2LCByZWFkX2luc3RydWN0aW9uLCBpbnN0cnVjdGlvbl9sZW5ndGgpOworCS8vIHNlbmQgYWRkcmVzcyB3ZSB3YW50IHRvIHJlYWQgZnJvbQorCWNiX3BjaWRkYV9zZXJpYWxfb3V0KGRldiwgYWRkcmVzcywgYWRkcmVzc19sZW5ndGgpOworCisJdmFsdWUgPSBjYl9wY2lkZGFfc2VyaWFsX2luKGRldik7CisKKwkvLyBkZWFjdGl2YXRlIGVlcHJvbQorCWNhbDJfYml0cyAmPSB+U0VMRUNUX0VFUFJPTV9CSVQ7CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvLyB3cml0ZXMgdG8gOCBiaXQgY2FsaWJyYXRpb24gZGFjcworc3RhdGljIHZvaWQgY2JfcGNpZGRhX3dyaXRlX2NhbGRhYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNhbGRhYywKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBjYWwyX2JpdHM7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3QgaW50IG51bV9jaGFubmVsX2JpdHMgPSAzOwkvLyBjYWxkYWNzIHVzZSAzIGJpdCBjaGFubmVsIHNwZWNpZmljYXRpb24KKwljb25zdCBpbnQgbnVtX2NhbGRhY19iaXRzID0gODsJLy8gOCBiaXQgY2FsaWJyYXRpb24gZGFjcworCWNvbnN0IGludCBtYXhfbnVtX2NhbGRhY3MgPSA0OwkvLyBvbmUgY2FsZGFjIGZvciBldmVyeSB0d28gZGFjIGNoYW5uZWxzCisKKwkvKiB3cml0ZSAzIGJpdCBjaGFubmVsICovCisJY2JfcGNpZGRhX3NlcmlhbF9vdXQoZGV2LCBjaGFubmVsLCBudW1fY2hhbm5lbF9iaXRzKTsKKwkvLyB3cml0ZSA4IGJpdCBjYWxkYWMgdmFsdWUKKwljYl9wY2lkZGFfc2VyaWFsX291dChkZXYsIHZhbHVlLCBudW1fY2FsZGFjX2JpdHMpOworCisJLy8gbGF0Y2ggc3RyZWFtIGludG8gYXBwcm9wcmlhdGUgY2FsZGFjCisJLy8gZGVzZWxlY3QgcmVmZXJlbmNlIGRhYworCWNhbDJfYml0cyA9IERFU0VMRUNUX1JFRl9EQUNfQklUIHwgRFVNTVlfQklUOworCS8vIGRlYWN0aXZhdGUgY2FsZGFjcyAob25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGNoYW5uZWxzKQorCWZvciAoaSA9IDA7IGkgPCBtYXhfbnVtX2NhbGRhY3M7IGkrKykgeworCQljYWwyX2JpdHMgfD0gREVTRUxFQ1RfQ0FMREFDX0JJVChpKTsKKwl9CisJLy8gYWN0aXZhdGUgdGhlIGNhbGRhYyB3ZSB3YW50CisJY2FsMl9iaXRzICY9IH5ERVNFTEVDVF9DQUxEQUNfQklUKGNhbGRhYyk7CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworCS8vIGRlYWN0aXZhdGUgY2FsZGFjCisJY2FsMl9iaXRzIHw9IERFU0VMRUNUX0NBTERBQ19CSVQoY2FsZGFjKTsKKwlvdXR3X3AoY2FsMl9iaXRzLCBkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMik7Cit9CisKKy8vIHJldHVybnMgY2FsZGFjIHRoYXQgY2FsaWJyYXRlcyBnaXZlbiBhbmFsb2cgb3V0IGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsZGFjX251bWJlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAvIDI7Cit9CisKKy8vIHJldHVybnMgY2FsZGFjIGNoYW5uZWwgdGhhdCBwcm92aWRlcyBmaW5lIGdhaW4gZm9yIGdpdmVuIGFvIGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZV9nYWluX2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDQgKiAoYW9fY2hhbm5lbCAlIDIpOworfQorCisvLyByZXR1cm5zIGNhbGRhYyBjaGFubmVsIHRoYXQgcHJvdmlkZXMgY29hcnNlIGdhaW4gZm9yIGdpdmVuIGFvIGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29hcnNlX2dhaW5fY2hhbm5lbCh1bnNpZ25lZCBpbnQgYW9fY2hhbm5lbCkKK3sKKwlyZXR1cm4gMSArIDQgKiAoYW9fY2hhbm5lbCAlIDIpOworfQorCisvLyByZXR1cm5zIGNhbGRhYyBjaGFubmVsIHRoYXQgcHJvdmlkZXMgY29hcnNlIG9mZnNldCBmb3IgZ2l2ZW4gYW8gY2hhbm5lbAorc3RhdGljIHVuc2lnbmVkIGludCBjb2Fyc2Vfb2Zmc2V0X2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDIgKyA0ICogKGFvX2NoYW5uZWwgJSAyKTsKK30KKworLy8gcmV0dXJucyBjYWxkYWMgY2hhbm5lbCB0aGF0IHByb3ZpZGVzIGZpbmUgb2Zmc2V0IGZvciBnaXZlbiBhbyBjaGFubmVsCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbmVfb2Zmc2V0X2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDMgKyA0ICogKGFvX2NoYW5uZWwgJSAyKTsKK30KKworLy8gcmV0dXJucyBlZXByb20gYWRkcmVzcyB0aGF0IHByb3ZpZGVzIG9mZnNldCBmb3IgZ2l2ZW4gYW8gY2hhbm5lbCBhbmQgcmFuZ2UKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2Zmc2V0X2VlcHJvbV9hZGRyZXNzKHVuc2lnbmVkIGludCBhb19jaGFubmVsLAorCXVuc2lnbmVkIGludCByYW5nZSkKK3sKKwlyZXR1cm4gMHg3ICsgMiAqIHJhbmdlICsgMTIgKiBhb19jaGFubmVsOworfQorCisvLyByZXR1cm5zIGVlcHJvbSBhZGRyZXNzIHRoYXQgcHJvdmlkZXMgZ2FpbiBjYWxpYnJhdGlvbiBmb3IgZ2l2ZW4gYW8gY2hhbm5lbCBhbmQgcmFuZ2UKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2Fpbl9lZXByb21fYWRkcmVzcyh1bnNpZ25lZCBpbnQgYW9fY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIDB4OCArIDIgKiByYW5nZSArIDEyICogYW9fY2hhbm5lbDsKK30KKworLy8gcmV0dXJucyB1cHBlciBieXRlIG9mIGVlcHJvbSBlbnRyeSwgd2hpY2ggZ2l2ZXMgdGhlIGNvYXJzZSBhZGp1c3RtZW50IHZhbHVlcworc3RhdGljIHVuc2lnbmVkIGludCBlZXByb21fY29hcnNlX2J5dGUodW5zaWduZWQgaW50IHdvcmQpCit7CisJcmV0dXJuICh3b3JkID4+IDgpICYgMHhmZjsKK30KKworLy8gcmV0dXJucyBsb3dlciBieXRlIG9mIGVlcHJvbSBlbnRyeSwgd2hpY2ggZ2l2ZXMgdGhlIGZpbmUgYWRqdXN0bWVudCB2YWx1ZXMKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWVwcm9tX2ZpbmVfYnl0ZSh1bnNpZ25lZCBpbnQgd29yZCkKK3sKKwlyZXR1cm4gd29yZCAmIDB4ZmY7Cit9CisKKy8vIHNldCBjYWxkYWNzIHRvIGVlcHJvbSB2YWx1ZXMgZm9yIGdpdmVuIGNoYW5uZWwgYW5kIHJhbmdlCitzdGF0aWMgdm9pZCBjYl9wY2lkZGFfY2FsaWJyYXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJdW5zaWduZWQgaW50IGNvYXJzZV9vZmZzZXQsIGZpbmVfb2Zmc2V0LCBjb2Fyc2VfZ2FpbiwgZmluZV9nYWluOworCisJLy8gcmVtZW1iZXIgcmFuZ2Ugc28gd2UgY2FuIHRlbGwgd2hlbiB3ZSBuZWVkIHRvIHJlYWRqdXN0IGNhbGlicmF0aW9uCisJZGV2cHJpdi0+YW9fcmFuZ2VbY2hhbm5lbF0gPSByYW5nZTsKKworCS8vIGdldCB2YWx1ZXMgZnJvbSBlZXByb20gZGF0YQorCWNvYXJzZV9vZmZzZXQgPQorCQllZXByb21fY29hcnNlX2J5dGUoZGV2cHJpdi0+CisJCWVlcHJvbV9kYXRhW29mZnNldF9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKwlmaW5lX29mZnNldCA9CisJCWVlcHJvbV9maW5lX2J5dGUoZGV2cHJpdi0+CisJCWVlcHJvbV9kYXRhW29mZnNldF9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKwljb2Fyc2VfZ2FpbiA9CisJCWVlcHJvbV9jb2Fyc2VfYnl0ZShkZXZwcml2LT4KKwkJZWVwcm9tX2RhdGFbZ2Fpbl9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKwlmaW5lX2dhaW4gPQorCQllZXByb21fZmluZV9ieXRlKGRldnByaXYtPgorCQllZXByb21fZGF0YVtnYWluX2VlcHJvbV9hZGRyZXNzKGNoYW5uZWwsIHJhbmdlKV0pOworCisJLy8gc2V0IGNhbGRhY3MKKwljYl9wY2lkZGFfd3JpdGVfY2FsZGFjKGRldiwgY2FsZGFjX251bWJlcihjaGFubmVsKSwKKwkJY29hcnNlX29mZnNldF9jaGFubmVsKGNoYW5uZWwpLCBjb2Fyc2Vfb2Zmc2V0KTsKKwljYl9wY2lkZGFfd3JpdGVfY2FsZGFjKGRldiwgY2FsZGFjX251bWJlcihjaGFubmVsKSwKKwkJZmluZV9vZmZzZXRfY2hhbm5lbChjaGFubmVsKSwgZmluZV9vZmZzZXQpOworCWNiX3BjaWRkYV93cml0ZV9jYWxkYWMoZGV2LCBjYWxkYWNfbnVtYmVyKGNoYW5uZWwpLAorCQljb2Fyc2VfZ2Fpbl9jaGFubmVsKGNoYW5uZWwpLCBjb2Fyc2VfZ2Fpbik7CisJY2JfcGNpZGRhX3dyaXRlX2NhbGRhYyhkZXYsIGNhbGRhY19udW1iZXIoY2hhbm5lbCksCisJCWZpbmVfZ2Fpbl9jaGFubmVsKGNoYW5uZWwpLCBmaW5lX2dhaW4pOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkZGEsIGNiX3BjaWRkYV9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTRiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKKyAgICBBIENvbWVkaSBkcml2ZXIgZm9yIFBDSS1ESU8yNEggJiBQQ0ktRElPNDhIIG9mIENvbXB1dGVyQm9hcmRzIChjdXJyZW50bHkgTWVhc3VyZW1lbnRDb21wdXRpbmcpCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2lkaW8KK0Rlc2NyaXB0aW9uOiBDb21wdXRlckJvYXJkcycgRElPIGJvYXJkcyB3aXRoIFBDSSBpbnRlcmZhY2UKK0RldmljZXM6IFtNZWFzdXJlbWVudCBDb21wdXRpbmddIFBDSS1ESU8yNCAoY2JfcGNpZGlvKSwgUENJLURJTzI0SCwgUENJLURJTzQ4SAorQXV0aG9yOiBZb3NoaXlhIE1hdHN1emFrYQorVXBkYXRlZDogTW9uLCAyOSBPY3QgMjAwNyAxNTo0MDo0NyArMDAwMAorU3RhdHVzOiBleHBlcmltZW50YWwKKworVGhpcyBkcml2ZXIgaGFzIGJlZW4gbW9kaWZpZWQgZnJvbSBza2VsLmMgb2YgY29tZWRpLTAuNy43MC4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZSB3aWxsCisgIGJlIHVzZWQuCisKK1Bhc3NpbmcgYSB6ZXJvIGZvciBhbiBvcHRpb24gaXMgdGhlIHNhbWUgYXMgbGVhdmluZyBpdCB1bnNwZWNpZmllZC4KKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhFQURFUiBGSUxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUFDUk9TIGFuZCBEQVRBVFlQRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NCCTB4MTMwNworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHBjaWRpb19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLy8gYW5tZSBvZiB0aGUgYm9hcmQKKwlpbnQgbl84MjU1OwkJLy8gbnVtYmVyIG9mIDgyNTUgY2hpcHMgb24gYm9hcmQKKworCS8vIGluZGljZXMgb2YgYmFzZSBhZGRyZXNzIHJlZ2lvbnMKKwlpbnQgcGNpY29udHJvbGVyX2JhZHJpbmRleDsKKwlpbnQgZGlvcmVnc19iYWRyaW5kZXg7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaWRpb19ib2FyZCBwY2lkaW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2ktZGlvMjQiLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBwY2ljb250cm9sZXJfYmFkcmluZGV4OjEsCisJICAgICAgZGlvcmVnc19iYWRyaW5kZXg6MiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kaW8yNGgiLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBwY2ljb250cm9sZXJfYmFkcmluZGV4OjEsCisJICAgICAgZGlvcmVnc19iYWRyaW5kZXg6MiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kaW80OGgiLAorCSAgICAgIG5fODI1NToJMiwKKwkgICAgICBwY2ljb250cm9sZXJfYmFkcmluZGV4OjAsCisJICAgICAgZGlvcmVnc19iYWRyaW5kZXg6MSwKKwkJfSwKK307CisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCisvKiBQbGVhc2UgYWRkIHlvdXIgUENJIHZlbmRvciBJRCB0byBjb21lZGlkZXYuaCwgYW5kIGl0IHdpbGwgYmUgZm9yd2FyZGVkCisgKiB1cHN0cmVhbS4gKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lkaW9fcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDBiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lkaW9fcGNpX3RhYmxlKTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNpZGlvX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBwY2lkaW9fcHJpdmF0ZSB7CisJaW50IGRhdGE7CQkvLyBjdXJlbnRseSB1bnVzZWQKKworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvKiB1c2VkIGZvciBETyByZWFkYmFjaywgY3VyZW50bHkgdW51c2VkICovCisJdW5zaWduZWQgaW50IGRvX3JlYWRiYWNrWzRdOwkvKiB1cCB0byA0IHVuc2lnbmVkIGludCBzdWZmaWNlIHRvIGhvbGQgOTYgYml0cyBmb3IgUENJLURJTzk2ICovCisKKwl1bnNpZ25lZCBsb25nIGRpb19yZWdfYmFzZTsJLy8gYWRkcmVzcyBvZiBwb3J0IEEgb2YgdGhlIGZpcnN0IDgyNTUgY2hpcCBvbiBib2FyZAorfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2lkaW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGNpZGlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaWRpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9jYl9wY2lkaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpZGlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2lkaW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaWRpb19kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjaWRpb19ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKy8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIHNob3VsZCBOT1QgYmUgaW5pdGlhbGl6ZWQgaWYgeW91IGFyZSBkZWFsaW5nIHdpdGggUENJIGRldmljZXMKKy8vICAgICAgYm9hcmRfbmFtZTogICAgIHBjaWRpb19ib2FyZHMsCisvLyAgICAgIG9mZnNldDogICAgICAgICBzaXplb2Yoc3RydWN0IHBjaWRpb19ib2FyZCksCisvLyAgICAgIG51bV9uYW1lczogICAgICBzaXplb2YocGNpZGlvX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjaWRpb19ib2FyZCksCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjaWRpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CisJaW50IGluZGV4OworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGlvOiBcbiIsIGRldi0+bWlub3IpOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaWRpb19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworLyoKKyAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCisgKi8KKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DQikKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOworCQkJaW5kZXggPCBzaXplb2YgcGNpZGlvX2JvYXJkcyAvIHNpemVvZihzdHJ1Y3QgcGNpZGlvX2JvYXJkKTsKKwkJCWluZGV4KyspIHsKKwkJCWlmIChwY2lkaW9fcGNpX3RhYmxlW2luZGV4XS5kZXZpY2UgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisKKwkJCS8vIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLy8gYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBpdC0+b3B0aW9uc1swXSB8fAorCQkJCQlQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSAhPQorCQkJCQlpdC0+b3B0aW9uc1sxXSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXYtPmJvYXJkX3B0ciA9IHBjaWRpb19ib2FyZHMgKyBpbmRleDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcmludGsoIk5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyBjYXJkIGZvdW5kIG9uICIKKwkJInJlcXVlc3RlZCBwb3NpdGlvblxuIik7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwlwcmludGsoIkZvdW5kICVzIG9uIGJ1cyAlaSwgc2xvdCAlaVxuIiwgdGhpc2JvYXJkLT5uYW1lLAorCQlkZXZwcml2LT5wY2lfZGV2LT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QoZGV2cHJpdi0+cGNpX2Rldi0+ZGV2Zm4pKTsKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCXByaW50aygiY2JfcGNpZGlvOiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXZwcml2LT5kaW9fcmVnX2Jhc2UKKwkJPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwKKwkJcGNpZGlvX2JvYXJkc1tpbmRleF0uZGlvcmVnc19iYWRyaW5kZXgpOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCB0aGlzYm9hcmQtPm5fODI1NSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLAorCQkJTlVMTCwgZGV2cHJpdi0+ZGlvX3JlZ19iYXNlICsgaSAqIDQpOworCQlwcmludGsoIiBzdWJkZXYgJWQ6IGJhc2UgPSAweCVseFxuIiwgaSwKKwkJCWRldnByaXYtPmRpb19yZWdfYmFzZSArIGkgKiA0KTsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2lkaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRpbzogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPmRpb19yZWdfYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NiX3BjaWRpbywgcGNpZGlvX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjcwNWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKKyAgICBDb21lZGkgZHJpdmVyIGZvciBDb21wdXRlciBCb2FyZHMgUENJTS1EQVMxNjAyLzE2CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2ltZGFzCitEZXNjcmlwdGlvbjogTWVhc3VyZW1lbnQgQ29tcHV0aW5nIFBDSSBNaWdyYXRpb24gc2VyaWVzIGJvYXJkcworRGV2aWNlczogW0NvbXB1dGVyQm9hcmRzXSBQQ0lNLURBUzE2MDIvMTYgKGNiX3BjaW1kYXMpCitBdXRob3I6IFJpY2hhcmQgQnl0aGV3YXkKK1VwZGF0ZWQ6IFdlZCwgMTMgTm92IDIwMDIgMTI6MzQ6NTYgKzAwMDAKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK1dyaXR0ZW4gdG8gc3VwcG9ydCB0aGUgUENJTS1EQVMxNjAyLzE2IG9uIGEgMi40IHNlcmllcyBrZXJuZWwuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgICBbMF0gLSBQQ0kgYnVzIG51bWJlcgorICAgIFsxXSAtIFBDSSBzbG90IG51bWJlcgorCitEZXZlbG9wZWQgZnJvbSBjYl9wY2lkYXMgYW5kIHNrZWwgYnkgUmljaGFyZCBCeXRoZXdheSAobW9jZWxldEBzdWNzLm9yZykuCitPbmx5IHN1cHBvcnRzIERJTywgQU8gYW5kIHNpbXBsZSBBSSBpbiBpdCdzIHByZXNlbnQgZm9ybS4KK05vIGludGVycnVwdHMsIG11bHRpIGNoYW5uZWwgb3IgRklGTyBBSSwgYWx0aG91Z2ggdGhlIGNhcmQgbG9va3MgbGlrZSBpdCBjb3VsZCBzdXBwb3J0IHRoaXMuCitTZWUgaHR0cDovL3d3dy5tZWFzdXJlbWVudGNvbXB1dGluZy5jb20vUERGTWFudWFscy9wY2ltLWRhczE2MDJfMTYucGRmIGZvciBtb3JlIGRldGFpbHMuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgInBseDkwNTIuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKy8vI2RlZmluZSBDQlBDSU1EQVNfREVCVUcKKyN1bmRlZiBDQlBDSU1EQVNfREVCVUcKKworLyogUmVnaXN0ZXJzIGZvciB0aGUgUENJTS1EQVMxNjAyLzE2ICovCisKKy8vIHNpemVzIG9mIGlvIHJlZ2lvbnMgKGJ5dGVzKQorI2RlZmluZSBCQURSMF9TSVpFIDIJCS8vPz8KKyNkZWZpbmUgQkFEUjFfU0laRSA0CisjZGVmaW5lIEJBRFIyX1NJWkUgNgorI2RlZmluZSBCQURSM19TSVpFIDE2CisjZGVmaW5lIEJBRFI0X1NJWkUgNAorCisvL0RBQyBPZmZzZXRzCisjZGVmaW5lIEFEQ19UUklHIDAKKyNkZWZpbmUgREFDMF9PRkZTRVQgMgorI2RlZmluZSBEQUMxX09GRlNFVCA0CisKKy8vQUkgYW5kIENvdW50ZXIgQ29uc3RhbnRzCisjZGVmaW5lIE1VWF9MSU1JVFMgMAorI2RlZmluZSBNQUlOX0NPTk5fRElPIDEKKyNkZWZpbmUgQURDX1NUQVQgMgorI2RlZmluZSBBRENfQ09OVl9TVEFUIDMKKyNkZWZpbmUgQURDX0lOVCA0CisjZGVmaW5lIEFEQ19QQUNFUiA1CisjZGVmaW5lIEJVUlNUX01PREUgNgorI2RlZmluZSBQUk9HX0dBSU4gNworI2RlZmluZSBDTEs4MjU0XzFfREFUQSA4CisjZGVmaW5lIENMSzgyNTRfMl9EQVRBIDkKKyNkZWZpbmUgQ0xLODI1NF8zX0RBVEEgMTAKKyNkZWZpbmUgQ0xLODI1NF9DT05UUk9MIDExCisjZGVmaW5lIFVTRVJfQ09VTlRFUiAxMgorI2RlZmluZSBSRVNJRF9DT1VOVF9IIDEzCisjZGVmaW5lIFJFU0lEX0NPVU5UX0wgMTQKKworLyogQm9hcmQgZGVzY3JpcHRpb24gKi8KK3N0cnVjdCBjYl9wY2ltZGFzX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsKKwlpbnQgYWlfc2VfY2hhbnM7CS8vIElucHV0cyBpbiBzaW5nbGUtZW5kZWQgbW9kZQorCWludCBhaV9kaWZmX2NoYW5zOwkvLyBJbnB1dHMgaW4gZGlmZmVyZW50aWFsIG1vZGUKKwlpbnQgYWlfYml0czsJCS8vIGFuYWxvZyBpbnB1dCByZXNvbHV0aW9uCisJaW50IGFpX3NwZWVkOwkJLy8gZmFzdGVzdCBjb252ZXJzaW9uIHBlcmlvZCBpbiBucworCWludCBhb19uY2hhbjsJCS8vIG51bWJlciBvZiBhbmFsb2cgb3V0IGNoYW5uZWxzCisJaW50IGFvX2JpdHM7CQkvLyBhbmFsb2d1ZSBvdXRwdXQgcmVzb2x1dGlvbgorCWludCBoYXNfYW9fZmlmbzsJLy8gYW5hbG9nIG91dHB1dCBoYXMgZmlmbworCWludCBhb19zY2FuX3NwZWVkOwkvLyBhbmFsb2cgb3V0cHV0IHNwZWVkIGZvciAxNjAyIHNlcmllcyAoZm9yIGEgc2Nhbiwgbm90IGNvbnZlcnNpb24pCisJaW50IGZpZm9fc2l6ZTsJCS8vIG51bWJlciBvZiBzYW1wbGVzIGZpZm8gY2FuIGhvbGQKKwlpbnQgZGlvX2JpdHM7CQkvLyBudW1iZXIgb2YgZGlvIGJpdHMKKwlpbnQgaGFzX2RpbzsJCS8vIGhhcyBESU8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYl9wY2ltZGFzX2JvYXJkIGNiX3BjaW1kYXNfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJQQ0lNLURBUzE2MDIvMTYiLAorCSAgICAgIGRldmljZV9pZDoweDU2LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwJLy8/PworCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgaGFzX2FvX2ZpZm86MCwJLy8/PworCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJCQkvLz8/CisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgZGlvX2JpdHM6MjQsCisJICAgICAgaGFzX2RpbzoJMSwKKy8vICAgICAgICAgICAgICByYW5nZXM6ICAgICAgICAgJmNiX3BjaW1kYXNfcmFuZ2VzLAorCQl9LAorfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuICBTaG91bGQKKyAqIG9ubHkgYmUgdXNlZCBmb3IgUENJIGFuZCBJU0EtUG5QIGRldmljZXMgKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYl9wY2ltZGFzX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2JfcGNpbWRhc19wY2lfdGFibGUpOworCisjZGVmaW5lIE5fQk9BUkRTIDEJCS8vIE1heCBudW1iZXIgb2YgYm9hcmRzIHN1cHBvcnRlZAorCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBjYl9wY2ltZGFzX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBjYl9wY2ltZGFzX3ByaXZhdGUgeworCWludCBkYXRhOworCisJLy8gd291bGQgYmUgdXNlZnVsIGZvciBhIFBDSSBkZXZpY2UKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworCS8vYmFzZSBhZGRyZXNzZXMKKwl1bnNpZ25lZCBsb25nIEJBRFIwOworCXVuc2lnbmVkIGxvbmcgQkFEUjE7CisJdW5zaWduZWQgbG9uZyBCQURSMjsKKwl1bnNpZ25lZCBsb25nIEJBRFIzOworCXVuc2lnbmVkIGxvbmcgQkFEUjQ7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKworCS8vIFVzZWQgZm9yIERJTworCXVuc2lnbmVkIHNob3J0IGludCBwb3J0X2E7CS8vIGNvcHkgb2YgQkFEUjQrMAorCXVuc2lnbmVkIHNob3J0IGludCBwb3J0X2I7CS8vIGNvcHkgb2YgQkFEUjQrMQorCXVuc2lnbmVkIHNob3J0IGludCBwb3J0X2M7CS8vIGNvcHkgb2YgQkFEUjQrMgorCXVuc2lnbmVkIHNob3J0IGludCBkaW9fbW9kZTsJLy8gY29weSBvZiBCQURSNCszCisKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY2JfcGNpbWRhc19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBjYl9wY2ltZGFzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGNiX3BjaW1kYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfY2JfcGNpbWRhcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2ltZGFzIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpjYl9wY2ltZGFzX2F0dGFjaCwKKyAgICAgIGRldGFjaDpjYl9wY2ltZGFzX2RldGFjaCwKK307CisKK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2ltZGFzX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCS8vaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2ltZGFzOiAiLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNiX3BjaW1kYXNfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgorICovCisJcHJpbnRrKCJcbiIpOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJLy8gaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/CisJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQorCQkJY29udGludWU7CisJCS8vIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTl9CT0FSRFM7IGluZGV4KyspIHsKKwkJCWlmIChjYl9wY2ltZGFzX2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkICE9CisJCQkJcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWRldi0+Ym9hcmRfcHRyID0gY2JfcGNpbWRhc19ib2FyZHMgKyBpbmRleDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcmludGsoIk5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyBjYXJkIGZvdW5kIG9uICIKKwkJInJlcXVlc3RlZCBwb3NpdGlvblxuIik7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisJcHJpbnRrKCJGb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIGNiX3BjaW1kYXNfYm9hcmRzW2luZGV4XS5uYW1lLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSk7CisKKwkvLyBXYXJuIGFib3V0IG5vbi10ZXN0ZWQgZmVhdHVyZXMKKwlzd2l0Y2ggKHRoaXNib2FyZC0+ZGV2aWNlX2lkKSB7CisJY2FzZSAweDU2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlRISVMgQ0FSRCBJUyBVTlNVUFBPUlRFRC5cbiIKKwkJCSJQTEVBU0UgUkVQT1JUIFVTQUdFIFRPIDxtb2NlbGV0QHN1Y3Mub3JnPlxuIik7CisJfTsKKworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJjYl9wY2ltZGFzIikpIHsKKwkJcHJpbnRrKCIgRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZwcml2LT5CQURSMCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAwKTsKKwlkZXZwcml2LT5CQURSMSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAxKTsKKwlkZXZwcml2LT5CQURSMiA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAyKTsKKwlkZXZwcml2LT5CQURSMyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAzKTsKKwlkZXZwcml2LT5CQURSNCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCA0KTsKKworI2lmZGVmIENCUENJTURBU19ERUJVRworCXByaW50aygiZGV2cHJpdi0+QkFEUjAgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjApOworCXByaW50aygiZGV2cHJpdi0+QkFEUjEgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjEpOworCXByaW50aygiZGV2cHJpdi0+QkFEUjIgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjIpOworCXByaW50aygiZGV2cHJpdi0+QkFEUjMgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjMpOworCXByaW50aygiZGV2cHJpdi0+QkFEUjQgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjQpOworI2VuZGlmCisKKy8vIERvbnQgc3VwcG9ydCBJUlEgeWV0CisvLyAgICAgIC8vIGdldCBpcnEKKy8vICAgICAgaWYoY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgY2JfcGNpbWRhc19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiY2JfcGNpbWRhcyIsIGRldiApKQorLy8gICAgICB7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCIgdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgZGV2cHJpdi0+cGNpX2Rldi0+aXJxKTsKKy8vICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKy8vICAgICAgfQorLy8gICAgICBkZXYtPmlycSA9IGRldnByaXYtPnBjaV9kZXYtPmlycTsKKworCS8vSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvL2Rldi0+cmVhZF9zdWJkZXY9czsKKwkvLyBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9zZV9jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOwkvLyBUaGlzIGlzIHRoZSBtYXhpbXVtIGNoYW5saXN0IGxlbmd0aCB0aGF0CisJLy8gdGhlIGJvYXJkIGNhbiBoYW5kbGUKKwlzLT5pbnNuX3JlYWQgPSBjYl9wY2ltZGFzX2FpX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLy8gYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fbmNoYW47CisJcy0+bWF4ZGF0YSA9IDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CS8vcmFuZ2VzIGFyZSBoYXJkd2FyZSBzZXR0YWJsZSwgYnV0IG5vdCBzb2Z0d2FyZSByZWFkYWJsZS4KKwlzLT5pbnNuX3dyaXRlID0gJmNiX3BjaW1kYXNfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gJmNiX3BjaW1kYXNfYW9fcmluc247CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlpZiAodGhpc2JvYXJkLT5oYXNfZGlvKSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5CQURSNCk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIENCUENJTURBU19ERUJVRworCWlmIChkZXZwcml2KSB7CisJCXByaW50aygiZGV2cHJpdi0+QkFEUjAgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjApOworCQlwcmludGsoImRldnByaXYtPkJBRFIxID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIxKTsKKwkJcHJpbnRrKCJkZXZwcml2LT5CQURSMiA9IDB4JWx4XG4iLCBkZXZwcml2LT5CQURSMik7CisJCXByaW50aygiZGV2cHJpdi0+QkFEUjMgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjMpOworCQlwcmludGsoImRldnByaXYtPkJBRFI0ID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFI0KTsKKwl9CisjZW5kaWYKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2ltZGFzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+QkFEUjApIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJdW5zaWduZWQgaW50IGQ7CisJdW5zaWduZWQgaW50IGJ1c3k7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBzaG9ydCBjaGFubGltczsKKwlpbnQgbWF4Y2hhbnM7CisKKwkvLyBvbmx5IHN1cHBvcnQgc3cgaW5pdGlhdGVkIHJlYWRzIGZyb20gYSBzaW5nbGUgY2hhbm5lbAorCisJLy9jaGVjayBjaGFubmVsIG51bWJlcgorCWlmICgoaW5iKGRldnByaXYtPkJBRFIzICsgMikgJiAweDIwKSA9PSAwKQkvL2RpZmZlcmVudGlhbCBtb2RlCisJCW1heGNoYW5zID0gdGhpc2JvYXJkLT5haV9kaWZmX2NoYW5zOworCWVsc2UKKwkJbWF4Y2hhbnMgPSB0aGlzYm9hcmQtPmFpX3NlX2NoYW5zOworCisJaWYgKGNoYW4gPiAobWF4Y2hhbnMgLSAxKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CS8vKioqIFdyb25nIGVycm9yIGNvZGUuIEZpeG1lLgorCisJLy9jb25maWd1cmUgZm9yIHN3IGluaXRpYXRlZCByZWFkCisJZCA9IGluYihkZXZwcml2LT5CQURSMyArIDUpOworCWlmICgoZCAmIDB4MDMpID4gMCkgewkvL29ubHkgcmVzZXQgaWYgbmVlZGVkLgorCQlkID0gZCAmIDB4ZmQ7CisJCW91dGIoZCwgZGV2cHJpdi0+QkFEUjMgKyA1KTsKKwl9CisJb3V0YigweDAxLCBkZXZwcml2LT5CQURSMyArIDYpOwkvL3NldCBidXJzdGluZyBvZmYsIGNvbnZlcnNpb25zIG9uCisJb3V0YigweDAwLCBkZXZwcml2LT5CQURSMyArIDcpOwkvL3NldCByYW5nZSB0byAxMFYuIFVQL0JQIGlzIGNvbnRyb2xsZWQgYnkgYSBzd2l0Y2ggb24gdGhlIGJvYXJkCisKKwkvLyB3cml0ZSBjaGFubmVsIGxpbWl0cyB0byBtdWx0aXBsZXhlciwgc2V0IExvdyAoYml0cyAwLTMpIGFuZCBIaWdoIChiaXRzIDQtNykgY2hhbm5lbHMgdG8gY2hhbi4KKwljaGFubGltcyA9IGNoYW4gfCAoY2hhbiA8PCA0KTsKKwlvdXRiKGNoYW5saW1zLCBkZXZwcml2LT5CQURSMyArIDApOworCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXR3KDAsIGRldnByaXYtPkJBRFIyICsgMCk7CisKKyNkZWZpbmUgVElNRU9VVCAxMDAwCQkvL3R5cGljYWxseSB0YWtlcyA1IGxvb3BzIG9uIGEgbGlnaHRseSBsb2FkZWQgUGVudGl1bSAxMDBNSHosCisJCS8vdGhpcyBpcyBsaWtlbHkgdG8gYmUgMTAwIGxvb3BzIG9uIGEgMkdIeiBtYWNoaW5lLCBzbyBzZXQgMTAwMCBhcyB0aGUgbGltaXQuCisKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJYnVzeSA9IGluYihkZXZwcml2LT5CQURSMyArIDIpICYgMHg4MDsKKwkJCWlmICghYnVzeSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBUSU1FT1VUKSB7CisJCQlwcmludGsoInRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJLyogcmVhZCBkYXRhICovCisJCWQgPSBpbncoZGV2cHJpdi0+QkFEUjIgKyAwKTsKKworCQkvKiBtYW5nbGUgdGhlIGRhdGEgYXMgbmVjZXNzYXJ5ICovCisJCS8vZCBePSAxPDwodGhpc2JvYXJkLT5haV9iaXRzLTEpOyAvLyAxNiBiaXQgZGF0YSBmcm9tIEFEQywgc28gbm8gbWFuZ2xlIG5lZWRlZC4KKworCQlkYXRhW25dID0gZDsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJc3dpdGNoIChjaGFuKSB7CisJCWNhc2UgMDoKKwkJCW91dHcoZGF0YVtpXSAmIDB4MEZGRiwgZGV2cHJpdi0+QkFEUjIgKyBEQUMwX09GRlNFVCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJb3V0dyhkYXRhW2ldICYgMHgwRkZGLCBkZXZwcml2LT5CQURSMiArIERBQzFfT0ZGU0VUKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2ltZGFzLCBjYl9wY2ltZGFzX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM1YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKKyAgICBDb21wdXRlciBCb2FyZHMgUENJTS1EREEwNi0xNiBDb21lZGkgZHJpdmVyCisgICAgQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2ltZGRhCitEZXNjcmlwdGlvbjogTWVhc3VyZW1lbnQgQ29tcHV0aW5nIFBDSU0tRERBMDYtMTYKK0RldmljZXM6IFtNZWFzdXJlbWVudCBDb21wdXRpbmddIFBDSU0tRERBMDYtMTYgKGNiX3BjaW1kZGEpCitBdXRob3I6IENhbGluIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6MTU6NTEgKzAxMDAKK1N0YXR1czogd29ya3MKKworQWxsIGZlYXR1cmVzIG9mIHRoZSBQQ0lNLUREQTA2LTE2IGJvYXJkIGFyZSBzdXBwb3J0ZWQuICBUaGlzIGJvYXJkCitoYXMgNiAxNi1iaXQgQU8gY2hhbm5lbHMsIGFuZCB0aGUgdXN1YWwgODI1NSBESU8gc2V0dXAuICAoMjQgY2hhbm5lbHMsCitjb25maWd1cmFibGUgaW4gYmFua3Mgb2YgOCBhbmQgNCwgZXRjLikuICBUaGlzIGJvYXJkIGRvZXMgbm90IHN1cHBvcnQgY29tbWFuZHMuCisKK1RoZSBib2FyZCBoYXMgYSBwZWN1bGlhciB3YXkgb2Ygc3BlY2lmeWluZyBBTyBnYWluL3JhbmdlIHNldHRpbmdzIC0tIFlvdSBoYXZlCisxIGp1bXBlciBiYW5rIG9uIHRoZSBjYXJkLCB3aGljaCBlaXRoZXIgbWFrZXMgYWxsIDYgQU8gY2hhbm5lbHMgZWl0aGVyCis1IFZvbHQgdW5pcG9sYXIsIDVWIGJpcG9sYXIsIDEwIFZvbHQgdW5pcG9sYXIgb3IgMTBWIGJpcG9sYXIuCisKK1NpbmNlIHRoZXJlIGlzIGFic29sdXRlbHkgX25vXyB3YXkgdG8gdGVsbCBpbiBzb2Z0d2FyZSBob3cgdGhpcyBqdW1wZXIgaXMgc2V0Cisod2VsbCwgYXQgbGVhc3QgYWNjb3JkaW5nICB0byB0aGUgcmF0aGVyIHRoaW4gc3BlYy4gZnJvbSBNZWFzdXJlbWVudCBDb21wdXRpbmcKKyB0aGF0IGNvbWVzIHdpdGggdGhlIGJvYXJkKSwgdGhlIGRyaXZlciBhc3N1bWVzIHRoZSBqdW1wZXIgaXMgYXQgaXRzIGZhY3RvcnkKK2RlZmF1bHQgc2V0dGluZyBvZiArLy01Vi4KKworQWxzbyBvZiBub3RlIGlzIHRoZSBmYWN0IHRoYXQgdGhpcyBib2FyZCBmZWF0dXJlcyBhbm90aGVyIGp1bXBlciwgd2hvc2UKK3N0YXRlIGlzIGFsc28gY29tcGxldGVseSBpbnZpc2libGUgdG8gc29mdHdhcmUuICBJdCB0b2dnbGVzIHR3byBwb3NzaWJsZSBBTworb3V0cHV0IG1vZGVzIG9uIHRoZSBib2FyZDoKKworICAtIFVwZGF0ZSBNb2RlOiBXcml0aW5nIHRvIGFuIEFPIGNoYW5uZWwgaW5zdGFudGFuZW91c2x5IHVwZGF0ZXMgdGhlIGFjdHVhbAorICAgIHNpZ25hbCBvdXRwdXQgYnkgdGhlIERBQyBvbiB0aGUgYm9hcmQgKHRoaXMgaXMgdGhlIGZhY3RvcnkgZGVmYXVsdCkuCisgIC0gU2ltdWx0YW5lb3VzIFhGRVIgTW9kZTogV3JpdGluZyB0byBhbiBBTyBjaGFubmVsIGhhcyBubyBlZmZlY3QgdW50aWwKKyAgICB5b3UgcmVhZCBmcm9tIGFueSBvbmUgb2YgdGhlIEFPIGNoYW5uZWxzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGxvYWRpbmcKKyAgICBhbGwgNiBBTyB2YWx1ZXMsIGFuZCB0aGVuIHJlYWRpbmcgZnJvbSBhbnkgb25lIG9mIHRoZSBBTyBjaGFubmVscyBvbiB0aGUKKyAgICBkZXZpY2UgdG8gaW5zdGFudGx5IHVwZGF0ZSBhbGwgNiBBTyB2YWx1ZXMgaW4gdW5pc29uLiAgVXNlZnVsIGZvciBzb21lCisgICAgY29udHJvbCBhcHBzLCBJIHdvdWxkIGFzc3VtZT8gIElmIHlvdXIganVtcGVyIGlzIGluIHRoaXMgc2V0dGluZywgdGhlbiB5b3UKKyAgICBuZWVkIHRvIGlzc3VlIHlvdXIgY29tZWRpX2RhdGFfd3JpdGUoKXMgdG8gbG9hZCBhbGwgdGhlIHZhbHVlcyB5b3Ugd2FudCwKKyAgICB0aGVuIGlzc3VlIG9uZSBjb21lZGlfZGF0YV9yZWFkKCkgb24gYW55IGNoYW5uZWwgb24gdGhlIEFPIHN1YmRldmljZQorICAgIHRvIGluaXRpYXRlIHRoZSBzaW11bHRhbmVvdXMgWEZFUi4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gUENJIGJ1cyAob3B0aW9uYWwpCisgIFsxXSBQQ0kgc2xvdCAob3B0aW9uYWwpCisgIFsyXSBhbmFsb2cgb3V0cHV0IHJhbmdlIGp1bXBlciBzZXR0aW5nCisgICAgICAwID09ICsvLSA1IFYKKyAgICAgIDEgPT0gKy8tIDEwIFYKKyovCisKKy8qCisgICAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIENvbXB1dGVyIEJvYXJkcyBQQ0lNLUREQTA2LTE2IEFuYWxvZyBPdXRwdXQKKyAgICBjYXJkLiAgVGhpcyBib2FyZCBoYXMgYSB1bmlxdWUgcmVnaXN0ZXIgbGF5b3V0IGFuZCBhcyBzdWNoIHByb2JhYmx5CisgICAgZGVzZXJ2ZXMgaXRzIG93biBkcml2ZXIgZmlsZS4KKworICAgIEl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gaW50ZWdyYXRlIHRoaXMgYm9hcmQgaW50byB0aGUgY2JfcGNpZGRhCisgICAgZmlsZSwgYnV0IHNpbmNlIHRoYXQgaXNuJ3QgbXkgY29kZSwgSSBkaWRuJ3Qgd2FudCB0byBzaWduaWZpY2FudGx5CisgICAgbW9kaWZ5IHRoYXQgZmlsZSB0byBzdXBwb3J0IHRoaXMgYm9hcmQgKEkgdGhvdWdodCBpdCBpbXBvbGl0ZSB0byBkbyBzbykuCisKKyAgICBBdCBhbnkgcmF0ZSwgaWYgeW91IGZlZWwgYW1iaXRpb3VzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHRha2UKKyAgICB0aGUgY29kZSBvdXQgb2YgdGhpcyBmaWxlIGFuZCBjb21iaW5lIGl0IHdpdGggYSBtb3JlIHVuaWZpZWQgZHJpdmVyCisgICAgZmlsZS4KKworICAgIEkgd291bGQgbGlrZSB0byB0aGFuayBUaW1vdGh5IEN1cnJ5IDxUaW1vdGh5LkN1cnJ5QHJkZWMucmVkc3RvbmUuYXJteS5taWw+CisgICAgZm9yIGxlbmRpbmcgbWUgYSBib2FyZCBzbyB0aGF0IEkgY291bGQgd3JpdGUgdGhpcyBkcml2ZXIuCisKKyAgICAtQ2FsaW4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKworLyogZGV2aWNlIGlkcyBvZiB0aGUgY2FyZHMgd2Ugc3VwcG9ydCAtLSBjdXJyZW50bHkgb25seSAxIGNhcmQgc3VwcG9ydGVkICovCisjZGVmaW5lIFBDSV9JRF9QQ0lNX0REQTA2XzE2IDB4MDA1MworCisvKgorICogVGhpcyBpcyBzdHJhaWdodCBmcm9tIHNrZWwuYyAtLSBJIGRpZCB0aGlzIGluIGNhc2UgdGhpcyBzb3VyY2UgZmlsZQorICogd2lsbCBzb21lZGF5IHN1cHBvcnQgbW9yZSB0aGFuIDEgYm9hcmQuLi4KKyAqLworc3RydWN0IGJvYXJkX3N0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CisJaW50IGFvX2NoYW5zOworCWludCBhb19iaXRzOworCWludCBkaW9fY2hhbnM7CisJaW50IGRpb19tZXRob2Q7CisJaW50IGRpb19vZmZzZXQ7CQkvKiBob3cgbWFueSBieXRlcyBpbnRvIHRoZSBCQURSIGFyZSB0aGUgRElPIHBvcnRzICovCisJaW50IHJlZ3NfYmFkcmluZGV4OwkvKiBJTyBSZWdpb24gZm9yIHRoZSBjb250cm9sLCBhbmFsb2cgb3V0cHV0LAorCQkJCSAgIGFuZCBESU8gcmVnaXN0ZXJzICovCisJaW50IHJlZ19zejsJCS8qIG51bWJlciBvZiBieXRlcyBvZiByZWdpc3RlcnMgaW4gaW8gcmVnaW9uICovCit9OworCitlbnVtIERJT19NRVRIT0RTIHsKKwlESU9fTk9ORSA9IDAsCisJRElPXzgyNTUsCisJRElPX0lOVEVSTkFMCQkvKiB1bmltcGxlbWVudGVkICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkX3N0cnVjdCBib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImNiX3BjaW1kZGEwNi0xNiIsCisJICAgICAgZGV2aWNlX2lkOlBDSV9JRF9QQ0lNX0REQTA2XzE2LAorCSAgICAgIGFvX2NoYW5zOjYsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgZGlvX2NoYW5zOjI0LAorCSAgICAgIGRpb19tZXRob2Q6RElPXzgyNTUsCisJICAgICAgZGlvX29mZnNldDoxMiwKKwkgICAgICByZWdzX2JhZHJpbmRleDozLAorCSAgICAgIHJlZ19zejoJMTYsCisJCX0KK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICAgICgoY29uc3Qgc3RydWN0IGJvYXJkX3N0cnVjdCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiBOdW1iZXIgb2YgYm9hcmRzIGluIGJvYXJkc1tdICovCisjZGVmaW5lIE5fQk9BUkRTCShzaXplb2YoYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgYm9hcmRfc3RydWN0KSkKKyNkZWZpbmUgUkVHX1NaICh0aGlzYm9hcmQtPnJlZ19zeikKKyNkZWZpbmUgUkVHU19CQURSSU5ERVggKHRoaXNib2FyZC0+cmVnc19iYWRyaW5kZXgpCisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCisvKiBQbGVhc2UgYWRkIHlvdXIgUENJIHZlbmRvciBJRCB0byBjb21lZGlkZXYuaCwgYW5kIGl0IHdpbGwgYmUgZm9yd2FyZGVkCisgKiB1cHN0cmVhbS4gKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTLCBQQ0lfSURfUENJTV9EREEwNl8xNiwgUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RhYmxlKTsKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IGJvYXJkX3ByaXZhdGVfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyczsJLyogc2V0IGJ5IHByb2JlICovCisJdW5zaWduZWQgbG9uZyBkaW9fcmVnaXN0ZXJzOworCWNoYXIgYXR0YWNoZWRfdG9fODI1NTsJLyogYm9vbGVhbiAqLworCWNoYXIgYXR0YWNoZWRfc3VjY2Vzc2Z1bGx5OwkvKiBib29sZWFuICovCisJLyogd291bGQgYmUgdXNlZnVsIGZvciBhIFBDSSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworI2RlZmluZSBNQVhfQU9fUkVBREJBQ0tfQ0hBTk5FTFMgNgorCS8qIFVzZWQgZm9yIEFPIHJlYWRiYWNrICovCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrW01BWF9BT19SRUFEQkFDS19DSEFOTkVMU107CisKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYm9hcmRfcHJpdmF0ZV9zdHJ1Y3QgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGF0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgY2JfcGNpbWRkYV9kcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpbWRkYSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YXR0YWNoLAorICAgICAgZGV0YWNoOmRldGFjaCwKK307CisKK01PRFVMRV9BVVRIT1IoIkNhbGluIEEuIEN1bGlhbnUgPGNhbGluQHJ0bGFiLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIgZm9yIHRoZSBDb21wdXRlcmJvYXJkcyBQQ0lNLUREQSAiCisJInNlcmllcy4gIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFBDSU0tRERBMDYtMTYgKHdoaWNoICIKKwkiYWxzbyBoYXBwZW5zIHRvIGJlIHRoZSBvbmx5IGJvYXJkIGluIHRoaXMgc2VyaWVzLiA6KSApICIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworQ09NRURJX1BDSV9JTklUQ0xFQU5VUF9OT01PRFVMRShjYl9wY2ltZGRhX2RyaXZlciwgcGNpX3RhYmxlKTsKKworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIRUxQRVIgRlVOQ1RJT04gREVDTEFSQVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJldHVybnMgYSBtYXhkYXRhIHZhbHVlIGZvciBhIGdpdmVuIG5fYml0cyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZmlndXJlX291dF9tYXhkYXRhKGludCBiaXRzKQoreworCXJldHVybiAoKCh1bnNpZ25lZCBpbnQpIDEgPDwgYml0cykgLSAxKTsKK30KKworLyoKKyAqICBQcm9iZXMgZm9yIGEgc3VwcG9ydGVkIGRldmljZS4KKyAqCisgKiAgUHJlcmVxdWlzaXRlOiBwcml2YXRlIGJlIGFsbG9jYXRlZCBhbHJlYWR5IGluc2lkZSBkZXYKKyAqCisgKiAgSWYgdGhlIGRldmljZSBpcyBmb3VuZCwgaXQgcmV0dXJucyAwIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBzaWRlIGVmZmVjdHM6CisgKgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgcGNpX2RldiAqIHRvIGRldi0+cHJpdmF0ZS0+cGNpX2RldgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgYm9hcmQgKiB0byBkZXYtPmJvYXJkX3B0cgorICogIG8gIHNldHMgZGV2LT5wcml2YXRlLT5yZWdpc3RlcnMKKyAqICBvICBzZXRzIGRldi0+cHJpdmF0ZS0+ZGlvX3JlZ2lzdGVycworICoKKyAqICBPdGhlcndpc2UsIHJldHVybnMgYSAtZXJybm8gb24gZXJyb3IKKyAqLworc3RhdGljIGludCBwcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZVTkNUSU9OIERFRklOSVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGVycjsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqIGlmIHRoaXMgZnVuY3Rpb24gZmFpbHMgKHJldHVybnMgbmVnYXRpdmUpIHRoZW4gdGhlIHByaXZhdGUgYXJlYSBpcworICoga2ZyZWUnZCBieSBjb21lZGkKKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBib2FyZF9wcml2YXRlX3N0cnVjdCkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworCWlmICgoZXJyID0gcHJvYmUoZGV2LCBpdCkpKQorCQlyZXR1cm4gZXJyOworCisvKiBPdXRwdXQgc29tZSBpbmZvICovCisJcHJpbnRrKCJjb21lZGklZDogJXM6ICIsIGRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSBmaWd1cmVfb3V0X21heGRhdGEodGhpc2JvYXJkLT5hb19iaXRzKTsKKwkvKiB0aGlzIGlzIGhhcmQtY29kZWQgaGVyZSAqLworCWlmIChpdC0+b3B0aW9uc1syXSkgeworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJfSBlbHNlIHsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisJfQorCXMtPmluc25fd3JpdGUgPSAmYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gJmFvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+ZGlvX2NoYW5zKSB7CisJCXN3aXRjaCAodGhpc2JvYXJkLT5kaW9fbWV0aG9kKSB7CisJCWNhc2UgRElPXzgyNTU6CisJCQkvKiB0aGlzIGlzIGEgc3RyYWlnaHQgODI1NSwgc28gcmVnaXN0ZXIgdXMgd2l0aCB0aGUgODI1NSBkcml2ZXIgKi8KKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5kaW9fcmVnaXN0ZXJzKTsKKwkJCWRldnByaXYtPmF0dGFjaGVkX3RvXzgyNTUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgRElPX0lOVEVSTkFMOgorCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJESU9fSU5URVJOQUwgbm90IGltcGxlbWVudGVkIHlldCFcbiIpOworCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlkZXZwcml2LT5hdHRhY2hlZF9zdWNjZXNzZnVsbHkgPSAxOworCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBkZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYpIHsKKworCQlpZiAoZGV2LT5zdWJkZXZpY2VzICYmIGRldnByaXYtPmF0dGFjaGVkX3RvXzgyNTUpIHsKKwkJCS8qIGRlLXJlZ2lzdGVyIHVzIGZyb20gdGhlIDgyNTUgZHJpdmVyICovCisJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMik7CisJCQlkZXZwcml2LT5hdHRhY2hlZF90b184MjU1ID0gMDsKKwkJfQorCisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+cmVnaXN0ZXJzKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+YXR0YWNoZWRfc3VjY2Vzc2Z1bGx5ICYmIHRoaXNib2FyZCkKKwkJCXByaW50aygiY29tZWRpJWQ6ICVzOiBkZXRhY2hlZFxuIiwgZGV2LT5taW5vciwKKwkJCQl0aGlzYm9hcmQtPm5hbWUpOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBkZXZwcml2LT5yZWdpc3RlcnMgKyBjaGFuICogMjsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiAgZmlyc3QsIGxvYWQgdGhlIGxvdyBieXRlICovCisJCW91dGIoKGNoYXIpKGRhdGFbaV0gJiAweDAwZmYpLCBvZmZzZXQpOworCQkvKiAgbmV4dCwgd3JpdGUgdGhlIGhpZ2ggYnl0ZSAtLSBvbmx5IGFmdGVyIHRoaXMgaXMgd3JpdHRlbiBpcworCQkgICB0aGUgY2hhbm5lbCB2b2x0YWdlIHVwZGF0ZWQgaW4gdGhlIERBQywgdW5sZXNzCisJCSAgIHdlJ3JlIGluIHNpbXVsdGFuZW91cyB4ZmVyIG1vZGUgKGp1bXBlciBvbiBjYXJkKQorCQkgICB0aGVuIGEgcmluc24gaXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgREFDIC0tCisJCSAgIHNlZSBhb19yaW5zbigpIGJlbG93Li4uICovCisJCW91dGIoKGNoYXIpKGRhdGFbaV0gPj4gOCAmIDB4MDBmZiksIG9mZnNldCArIDEpOworCisJCS8qIGZvciB0ZXN0aW5nIG9ubHkuLiB0aGUgYWN0dWFsIHJpbnNuIFNIT1VMRCBkbyBhbiBpbnchCisJCSAgIChzZWUgdGhlIHN0dWZmIGFib3V0IHNpbXVsdGFuZW91cyBYRkVSIG1vZGUgb24gdGhpcyBib2FyZCkgKi8KKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIGk7Cit9CisKKy8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCisKKyAgIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYtPmFvX3JlYWRiYWNrLgorICAgSG93ZXZlciwgc2luY2UgdGhpcyBib2FyZCBoYXMgdGhpcyBqdW1wZXIgc2V0dGluZyBjYWxsZWQgIlNpbXVsdGFuZW91cworICAgWGZlciBtb2RlIiAob2ZmIGJ5IGRlZmF1bHQpLCB3ZSB3aWxsIHN1cHBvcnQgaXQuICBTaW11bHRhbmVhb3VzIHhmZXIKKyAgIG1vZGUgaXMgYWNjb21wbGlzaGVkIGJ5IGxvYWRpbmcgQUxMIHRoZSB2YWx1ZXMgeW91IHdhbnQgZm9yIEFPIGluIGFsbCB0aGUKKyAgIGNoYW5uZWxzLCB0aGVuIFJFQURpbmcgb2ZmIG9uZSBvZiB0aGUgQU8gcmVnaXN0ZXJzIHRvIGluaXRpYXRlIHRoZQorICAgaW5zdGFudGFuZW91cyBzaW11bHRhbmVvdXMgdXBkYXRlIG9mIGFsbCBEQUMgb3V0cHV0cywgd2hpY2ggbWFrZXMKKyAgIGFsbCBBTyBjaGFubmVscyB1cGRhdGUgc2ltdWx0YW5lb3VzbHkuICBUaGlzIGlzIHVzZWZ1bCBmb3Igc29tZSBjb250cm9sCisgICBhcHBsaWNhdGlvbnMsIEkgd291bGQgaW1hZ2luZS4KKyovCitzdGF0aWMgaW50IGFvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlpbncoZGV2cHJpdi0+cmVnaXN0ZXJzICsgY2hhbiAqIDIpOworCQkvKiBzaG91bGQgSSBzZXQgZGF0YVtpXSB0byB0aGUgcmVzdWx0IG9mIHRoZSBhY3R1YWwgcmVhZCBvbiB0aGUgcmVnaXN0ZXIKKwkJICAgb3IgdGhlIGNhY2hlZCB1bnNpZ25lZCBpbnQgaW4gZGV2cHJpdi0+YW9fcmVhZGJhY2tbXT8gKi8KKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIRUxQRVIgRlVOQ1RJT04gREVGSU5JVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqICBQcm9iZXMgZm9yIGEgc3VwcG9ydGVkIGRldmljZS4KKyAqCisgKiAgUHJlcmVxdWlzaXRlOiBwcml2YXRlIGJlIGFsbG9jYXRlZCBhbHJlYWR5IGluc2lkZSBkZXYKKyAqCisgKiAgSWYgdGhlIGRldmljZSBpcyBmb3VuZCwgaXQgcmV0dXJucyAwIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBzaWRlIGVmZmVjdHM6CisgKgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgcGNpX2RldiAqIHRvIGRldi0+cHJpdmF0ZS0+cGNpX2RldgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgYm9hcmQgKiB0byBkZXYtPmJvYXJkX3B0cgorICogIG8gIHNldHMgZGV2LT5wcml2YXRlLT5yZWdpc3RlcnMKKyAqICBvICBzZXRzIGRldi0+cHJpdmF0ZS0+ZGlvX3JlZ2lzdGVycworICoKKyAqICBPdGhlcndpc2UsIHJldHVybnMgYSAtZXJybm8gb24gZXJyb3IKKyAqLworc3RhdGljIGludCBwcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyczsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUykKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5fQk9BUkRTOyBpbmRleCsrKSB7CisJCQlpZiAoYm9hcmRzW2luZGV4XS5kZXZpY2VfaWQgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJLyogZm91bmQgISAqLworCisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJZGV2LT5ib2FyZF9wdHIgPSBib2FyZHMgKyBpbmRleDsKKwkJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIHRoaXNib2FyZC0+bmFtZSkpIHsKKwkJCQlwcmludGsoImNiX3BjaW1kZGE6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXJlZ2lzdGVycyA9CisJCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsCisJCQkJUkVHU19CQURSSU5ERVgpOworCQkJZGV2cHJpdi0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJzOworCQkJZGV2cHJpdi0+ZGlvX3JlZ2lzdGVycworCQkJCT0gZGV2cHJpdi0+cmVnaXN0ZXJzICsgdGhpc2JvYXJkLT5kaW9fb2Zmc2V0OworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlwcmludGsoImNiX3BjaW1kZGE6IE5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyAiCisJCSJjYXJkIGZvdW5kIGF0IHRoZSByZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCXJldHVybiAtRU5PREVWOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwppbmRleCA5ZTU0OTZmLi4xZWU0ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwpAQCAtNTksNyArNTksNyBAQAogICogRGV2aWNlczogYSBmdWxsIGxpc3Qgb2YgdGhlIGJvYXJkcyB0aGF0IGF0dGVtcHQgdG8gYmUgc3VwcG9ydGVkIGJ5CiAgKiAgIHRoZSBkcml2ZXIuICBGb3JtYXQgaXMgIihtYW51ZmFjdHVyZXIpIGJvYXJkIG5hbWUgW2NvbWVkaSBuYW1lXSIsCiAgKiAgIHdoZXJlIGNvbWVkaV9uYW1lIGlzIHRoZSBuYW1lIHRoYXQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGJvYXJkLgotICogICBTZWUgdGhlIGNvbW1lbnQgbmVhciBib2FyZF9uYW1lOiBpbiB0aGUgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKKyAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQogICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCiAgKiAgIHZhbHVlIGlzIHVzZWQuCiAgKiBBdXRob3I6IHlvdQpAQCAtMTQyLDcgKzE0Miw3IEBACiAjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBCb25kaW5nQm9hcmQgKilkZXYtPmJvYXJkX3B0cikKIAogc3RydWN0IEJvbmRlZERldmljZSB7Ci0JY29tZWRpX3QgKmRldjsKKwl2b2lkICpkZXY7CiAJdW5zaWduZWQgbWlub3I7CiAJdW5zaWduZWQgc3ViZGV2OwogCXVuc2lnbmVkIHN1YmRldl90eXBlOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIC8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCiAgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAotICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KIHN0cnVjdCBQcml2YXRlIHsKICMgZGVmaW5lIE1BWF9CT0FSRF9OQU1FIDI1NgogCWNoYXIgbmFtZVtNQVhfQk9BUkRfTkFNRV07CkBAIC0xNzEsMjEgKzE3MSwyMSBAQAogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IFByaXZhdGUgKilkZXYtPnByaXZhdGUpCiAKIC8qCi0gKiBUaGUgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCiAgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCiAgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKICAqIHRoZSBkZXZpY2UgY29kZS4KICAqLwotc3RhdGljIGludCBib25kaW5nX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLXN0YXRpYyBpbnQgYm9uZGluZ19kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgYm9uZGluZ19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAvKiogQnVpbGQgUHJpdmF0ZSBhcnJheSBvZiBhbGwgZGV2aWNlcy4uICovCi1zdGF0aWMgaW50IGRvRGV2Q29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotc3RhdGljIHZvaWQgZG9EZXZVbmNvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBkb0RldkNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIHZvaWQgZG9EZXZVbmNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIC8qIFVnbHkgaW1wbGVtZW50YXRpb24gb2YgcmVhbGxvYyB0aGF0IGFsd2F5cyBjb3BpZXMgbWVtb3J5IGFyb3VuZCAtLSBJJ20gbGF6eSwKICAqIHdoYXQgY2FuIEkgc2F5PyAgSSBsaWtlIHRvIGRvIHdhc3RlZnVsIG1lbWNvcGllcy4uIDopICovCiBzdGF0aWMgdm9pZCAqUmVhbGxvYyhjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4sIHNpemVfdCBvbGRfbGVuKTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX2JvbmRpbmcgPSB7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2JvbmRpbmcgPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQlNT0RVTEVfTkFNRSwKICAgICAgIC5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCiAgICAgICAuYXR0YWNoID0JCWJvbmRpbmdfYXR0YWNoLApAQCAtMjEzLDEwICsyMTMsMTAgQEAKICAgICAgIC5udW1fbmFtZXMgPQlzaXplb2YoYm9uZGluZ0JvYXJkcykgLyBzaXplb2Yoc3RydWN0IEJvbmRpbmdCb2FyZCksCiB9OwogCi1zdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSk7Ci1zdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpOworc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgYm9uZGluZ19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCiAvKgogICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKQEAgLTIyNCw5ICsyMjQsOSBAQAogICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKICAqIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3N0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlMT0dfTVNHKCJjb21lZGklZFxuIiwgZGV2LT5taW5vcik7CiAKQEAgLTI4MSw3ICsyODEsNyBAQAogICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQogICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KICAqLwotc3RhdGljIGludCBib25kaW5nX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJvbmRpbmdfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJTE9HX01TRygiY29tZWRpJWQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAJZG9EZXZVbmNvbmZpZyhkZXYpOwpAQCAtMjkzLDEwICsyOTMsMTAgQEAKICAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KICAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQogICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLwotc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7Ci0jZGVmaW5lIExTQU1QTF9CSVRTIChzaXplb2YobHNhbXBsX3QpKjgpCisjZGVmaW5lIExTQU1QTF9CSVRTIChzaXplb2YodW5zaWduZWQgaW50KSo4KQogCXVuc2lnbmVkIG5jaGFucyA9IExTQU1QTF9CSVRTLCBudW1fZG9uZSA9IDAsIGk7CiAJaWYgKGluc24tPm4gIT0gMikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTIsMTIgKzMxMiwxMiBAQAogCQkgICB0byB0aGlzIHN1YmRldmljZS4uIG5lZWQgdG8gc2hpZnQgdGhlbSB0byB6ZXJvIHBvc2l0aW9uIG9mCiAJCSAgIGNvdXJzZS4gKi8KIAkJLyogQml0cyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3ViZGV2LiAqLwotCQlsc2FtcGxfdCBzdWJkZXZNYXNrID0gKCgxIDw8IGJkZXYtPm5jaGFucykgLSAxKTsKLQkJbHNhbXBsX3Qgd3JpdGVNYXNrLCBkYXRhQml0czsKKwkJdW5zaWduZWQgaW50IHN1YmRldk1hc2sgPSAoKDEgPDwgYmRldi0+bmNoYW5zKSAtIDEpOworCQl1bnNpZ25lZCBpbnQgd3JpdGVNYXNrLCBkYXRhQml0czsKIAogCQkvKiBBcmdoLCB3ZSBoYXZlID49IExTQU1QTF9CSVRTIGNoYW5zLi4gdGFrZSBhbGwgYml0cyAqLwogCQlpZiAoYmRldi0+bmNoYW5zID49IExTQU1QTF9CSVRTKQotCQkJc3ViZGV2TWFzayA9IChsc2FtcGxfdCkgKC0xKTsKKwkJCXN1YmRldk1hc2sgPSAodW5zaWduZWQgaW50KSAoLTEpOwogCiAJCXdyaXRlTWFzayA9IChkYXRhWzBdID4+IG51bV9kb25lKSAmIHN1YmRldk1hc2s7CiAJCWRhdGFCaXRzID0gKGRhdGFbMV0gPj4gbnVtX2RvbmUpICYgc3ViZGV2TWFzazsKQEAgLTM0MCw4ICszNDAsOCBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi1zdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHJldCwgaW9fYml0cyA9IHMtPmlvX2JpdHM7CiAJdW5zaWduZWQgaW50IGlvOwpAQCAtMzk0LDEwICszOTQsMTAgQEAKIAlyZXR1cm4gbmV3bWVtOwogfQogCi1zdGF0aWMgaW50IGRvRGV2Q29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IGRvRGV2Q29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgaTsKLQljb21lZGlfdCAqZGV2c19vcGVuZWRbQ09NRURJX05VTV9CT0FSRF9NSU5PUlNdOworCXZvaWQgKmRldnNfb3BlbmVkW0NPTUVESV9OVU1fQk9BUkRfTUlOT1JTXTsKIAogCW1lbXNldChkZXZzX29wZW5lZCwgMCwgc2l6ZW9mKGRldnNfb3BlbmVkKSk7CiAJZGV2cHJpdi0+bmFtZVswXSA9IDA7OwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IENPTUVESV9OREVWQ09ORk9QVFMgJiYgKCFpIHx8IGl0LT5vcHRpb25zW2ldKTsgKytpKSB7CiAJCWNoYXIgZmlsZVtdID0gIi9kZXYvY29tZWRpWFhYWFhYIjsKIAkJaW50IG1pbm9yID0gaXQtPm9wdGlvbnNbaV07Ci0JCWNvbWVkaV90ICpkOworCQl2b2lkICpkOwogCQlpbnQgc2RldiA9IC0xLCBuY2hhbnMsIHRtcDsKIAkJc3RydWN0IEJvbmRlZERldmljZSAqYmRldiA9IE5VTEw7CiAKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBkb0RldlVuY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGRvRGV2VW5jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGRldnNfY2xvc2VkID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jCmluZGV4IGNkNzRkYmUuLjlmYTRjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCiAKLXN0YXRpYyB2b2lkIGluY3JlbWVudF9zY2FuX3Byb2dyZXNzKGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsCitzdGF0aWMgdm9pZCBpbmNyZW1lbnRfc2Nhbl9wcm9ncmVzcyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKIAkJCQkgICAgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gc3ViZC0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKIAl1bnNpZ25lZCBpbnQgc2Nhbl9sZW5ndGggPSBjZmNfYnl0ZXNfcGVyX3NjYW4oc3ViZCk7CiAKIAlhc3luYy0+c2Nhbl9wcm9ncmVzcyArPSBudW1fYnl0ZXM7CkBAIC00MiwxMCArNDIsMTAgQEAKIH0KIAogLyogV3JpdGVzIGFuIGFycmF5IG9mIGRhdGEgcG9pbnRzIHRvIGNvbWVkaSdzIGJ1ZmZlciAqLwotdW5zaWduZWQgaW50IGNmY193cml0ZV9hcnJheV90b19idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwgdm9pZCAqZGF0YSwKK3Vuc2lnbmVkIGludCBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLCB2b2lkICpkYXRhLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHN1YmQtPmFzeW5jOwogCXVuc2lnbmVkIGludCByZXR2YWw7CiAKIAlpZiAobnVtX2J5dGVzID09IDApCkBAIC02NywxMCArNjcsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcik7CiAKLXVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLCB2b2lkICpkYXRhLAordW5zaWduZWQgaW50IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLCB2b2lkICpkYXRhLAogCQkJCQl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHN1YmQtPmFzeW5jOwogCiAJaWYgKG51bV9ieXRlcyA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTg1LDcgKzg1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIpOwogCi11bnNpZ25lZCBpbnQgY2ZjX2hhbmRsZV9ldmVudHMoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKQordW5zaWduZWQgaW50IGNmY19oYW5kbGVfZXZlbnRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKQogewogCXVuc2lnbmVkIGludCBldmVudHMgPSBzdWJkLT5hc3luYy0+ZXZlbnRzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmgKaW5kZXggNjk1MmZlMi4uNDk0YWUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuaApAQCAtMzAsMzAgKzMwLDMwIEBACiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKIC8qIFdyaXRlcyBhbiBhcnJheSBvZiBkYXRhIHBvaW50cyB0byBjb21lZGkncyBidWZmZXIgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLAogCQkJCQkgICAgICB2b2lkICpkYXRhLAogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX3RvX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLAotCQkJCQkgICAgICAgc2FtcGxfdCBkYXRhKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX3RvX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKKwkJCQkJICAgICAgIHNob3J0IGRhdGEpCiB7CiAJcmV0dXJuIGNmY193cml0ZV9hcnJheV90b19idWZmZXIoc3ViZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7CiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjZmNfd3JpdGVfbG9uZ190b19idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwKLQkJCQkJCSAgICBsc2FtcGxfdCBkYXRhKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2xvbmdfdG9fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhKQogewogCXJldHVybiBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN1YmQsICZkYXRhLCBzaXplb2YoZGF0YSkpOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKIAkJCQkJICAgICAgIHZvaWQgKmRhdGEsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfaGFuZGxlX2V2ZW50cyhjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgY29tZWRpX3N1YmRldmljZSAqc3ViZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGNmY19oYW5kbGVfZXZlbnRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjZmNfYnl0ZXNfcGVyX3NjYW4oY29tZWRpX3N1YmRldmljZSAqc3ViZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNmY19ieXRlc19wZXJfc2NhbihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKIHsKIAlpbnQgbnVtX3NhbXBsZXM7CiAJaW50IGJpdHNfcGVyX3NhbXBsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKaW5kZXggYmE4MzhmZi4uYTIzMzM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKQEAgLTkwLDkgKzkwLDkgQEAKICNkZWZpbmUgUEFSUE9SVF9CIDEKICNkZWZpbmUgUEFSUE9SVF9DIDIKIAotc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLXN0YXRpYyBpbnQgcGFycG9ydF9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl9wYXJwb3J0ID0geworc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBwYXJwb3J0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGFycG9ydCA9IHsKICAgICAgIC5kcml2ZXJfbmFtZSA9CSJjb21lZGlfcGFycG9ydCIsCiAgICAgICAubW9kdWxlID0JCVRISVNfTU9EVUxFLAogICAgICAgLmF0dGFjaCA9CQlwYXJwb3J0X2F0dGFjaCwKQEAgLTEwOCw4ICsxMDgsOCBAQAogfTsKICNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwYXJwb3J0X3ByaXZhdGUgKikoZGV2LT5wcml2YXRlKSkKIAotc3RhdGljIGludCBwYXJwb3J0X2luc25fYShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChkYXRhWzBdKSB7CiAJCWRldnByaXYtPmFfZGF0YSAmPSB+ZGF0YVswXTsKQEAgLTEyMyw4ICsxMjMsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9jb25maWdfYShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2NvbmZpZ19hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpZiAoZGF0YVswXSkgewogCQlzLT5pb19iaXRzID0gMHhmZjsKQEAgLTEzOCw4ICsxMzgsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9iKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBwYXJwb3J0X2luc25fYihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaWYgKGRhdGFbMF0pIHsKIAkJLyogc2hvdWxkIHdyaXRlcyBiZSBpZ25vcmVkPyAqLwpAQCAtMTUxLDggKzE1MSw4IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2MoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlkYXRhWzBdICY9IDB4MGY7CiAJaWYgKGRhdGFbMF0pIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW50cl9pbnNuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBwYXJwb3J0X2ludHJfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaWYgKGluc24tPm4gPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3Nyw4ICsxNzcsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQljb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IHRtcDsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCBwYXJwb3J0X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWRldnByaXYtPmNfZGF0YSB8PSAweDEwOwogCW91dGIoZGV2cHJpdi0+Y19kYXRhLCBkZXYtPmlvYmFzZSArIFBBUlBPUlRfQyk7CkBAIC0yNjIsNyArMjYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2ludHJfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAicGFycG9ydF9pbnRyX2NhbmNlbCgpXG4iKTsKIApAQCAtMjc2LDggKzI3Niw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwYXJwb3J0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAzOwogCiAJaWYgKCFkZXZwcml2LT5lbmFibGVfaXJxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpX3BhcnBvcnQ6IGJvZ3VzIGlycSwgaWdub3JlZFxuIik7CkBAIC0yOTEsMTIgKzI5MSwxMiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKIAlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGFycG9ydDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcGFycG9ydF9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCBwYXJwb3J0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXByaW50aygiY29tZWRpJWQ6IHBhcnBvcnQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcnRfdGltZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcnRfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDBjOGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ydF90aW1lci5jCkBAIC0wLDAgKzEsNzI4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2NvbWVkaV9ydF90aW1lci5jCisgICAgdmlydHVhbCBkcml2ZXIgZm9yIHVzaW5nIFJUTCB0aW1pbmcgc291cmNlcworCisgICAgQXV0aG9yczogRGF2aWQgQS4gU2NobGVlZiwgRnJhbmsgTS4gSGVzcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogY29tZWRpX3J0X3RpbWVyCitEZXNjcmlwdGlvbjogQ29tbWFuZCBlbXVsYXRvciB1c2luZyByZWFsLXRpbWUgdGFza3MKK0F1dGhvcjogZHMsIGZtaGVzcworRGV2aWNlczoKK1N0YXR1czogd29ya3MKKworVGhpcyBkcml2ZXIgcmVxdWlyZXMgUlRBSSBvciBSVExpbnV4IHRvIHdvcmsgY29ycmVjdGx5LiAgSXQgZG9lc24ndAorYWN0dWFsbHkgZHJpdmUgaGFyZHdhcmUgZGlyZWN0bHksIGJ1dCBjYWxscyBvdGhlciBkcml2ZXJzIGFuZCB1c2VzCithIHJlYWwtdGltZSB0YXNrIHRvIGVtdWxhdGUgY29tbWFuZHMgZm9yIGRyaXZlcnMgYW5kIGRldmljZXMgdGhhdAorYXJlIGluY2FwYWJsZSBvZiBuYXRpdmUgY29tbWFuZHMuICBUaHVzLCB5b3UgY2FuIGdldCBhY2N1cmF0ZWx5Cit0aW1lZCBJL08gb24gYW55IGRldmljZS4KKworU2luY2UgdGhlIHRpbWluZyBpcyBhbGwgZG9uZSBpbiBzb2Z0d2FyZSwgc2FtcGxpbmcgaml0dGVyIGlzIG11Y2gKK2hpZ2hlciB0aGFuIHdpdGggYSBkZXZpY2UgdGhhdCBoYXMgYW4gb24tYm9hcmQgdGltZXIsIGFuZCBtYXhpbXVtCitzYW1wbGUgcmF0ZSBpcyBtdWNoIGxvd2VyLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIG1pbm9yIG51bWJlciBvZiBkZXZpY2UgeW91IHdpc2ggdG8gZW11bGF0ZSBjb21tYW5kcyBmb3IKKyAgWzFdIC0gc3ViZGV2aWNlIG51bWJlciB5b3Ugd2lzaCB0byBlbXVsYXRlIGNvbW1hbmRzIGZvcgorKi8KKy8qCitUT0RPOgorCVN1cHBvcnQgZm9yIGRpZ2l0YWwgaW8gY29tbWFuZHMgY291bGQgYmUgYWRkZWQsIGV4Y2VwdCBJIGNhbid0IHNlZSB3aHkKKwkJYW55b25lIHdvdWxkIHdhbnQgdG8gdXNlIHRoZW0KKwlXaGF0IGhhcHBlbnMgaWYgZGV2aWNlIHdlIGFyZSBlbXVsYXRpbmcgZm9yIGlzIGRlLWNvbmZpZ3VyZWQ/CisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAiLi4vY29tZWRpbGliLmgiCisKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI2lmZGVmIENPTkZJR19DT01FRElfUlRMX1YxCisjaW5jbHVkZSA8cnRsX3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3J0X2lycS5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NPTUVESV9SVEwKKyNpbmNsdWRlIDxydGwuaD4KKyNpbmNsdWRlIDxydGxfc2NoZWQuaD4KKyNpbmNsdWRlIDxydGxfY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpZm5kZWYgUlRMSU5VWF9WRVJTSU9OX0NPREUKKyNkZWZpbmUgUlRMSU5VWF9WRVJTSU9OX0NPREUgMAorI2VuZGlmCisjaWZuZGVmIFJUTElOVVhfVkVSU0lPTgorI2RlZmluZSBSVExJTlVYX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisjZW5kaWYKKworLy8gYmVnaW4gaGFjayB0byB3b3JrYXJvdW5kIGJyb2tlbiBIUlRfVE9fODI1NCgpIGZ1bmN0aW9uIG9uIHJ0bGludXgKKyNpZiBSVExJTlVYX1ZFUlNJT05fQ09ERSA8PSBSVExJTlVYX1ZFUlNJT04oMywwLDEwMCkKKy8vIHRoaXMgZnVuY3Rpb24gc29sZSBwdXJwb3NlIGlzIHRvIGRpdmlkZSBhIGxvbmcgbG9uZyBieSA4MzgKK3N0YXRpYyBpbmxpbmUgUlRJTUUgbmFubzJjb3VudChsb25nIGxvbmcgbnMpCit7CisJZG9fZGl2KG5zLCA4MzgpOworCXJldHVybiBuczsKK30KKworI2lmZGVmIHJ0X2dldF90aW1lKCkKKyN1bmRlZiBydF9nZXRfdGltZSgpCisjZW5kaWYKKyNkZWZpbmUgcnRfZ2V0X3RpbWUoKSBuYW5vMmNvdW50KGdldGhydGltZSgpKQorCisjZWxzZQorCisjZGVmaW5lIG5hbm8yY291bnQoeCkgSFJUX1RPXzgyNTQoeCkKKyNlbmRpZgorLy8gZW5kIGhhY2sKKworLy8gcnRsLXJ0YWkgY29tcGF0aWJpbGl0eQorI2RlZmluZSBydF90YXNrX3dhaXRfcGVyaW9kKCkgcnRfdGFza193YWl0KCkKKyNkZWZpbmUgcnRfcGVuZF9saW51eF9zcnEoaXJxKSBydGxfZ2xvYmFsX3BlbmRfaXJxKGlycSkKKyNkZWZpbmUgcnRfZnJlZV9zcnEoaXJxKSBydGxfZnJlZV9zb2Z0X2lycShpcnEpCisjZGVmaW5lIHJ0X3JlcXVlc3Rfc3JxKHgseSx6KSBydGxfZ2V0X3NvZnRfaXJxKHksInRpbWVyIikKKyNkZWZpbmUgcnRfdGFza19pbml0KGEsYixjLGQsZSxmLGcpIHJ0X3Rhc2tfaW5pdChhLGIsYyxkLChlKSsxKQorI2RlZmluZSBydF90YXNrX3Jlc3VtZSh4KSBydF90YXNrX3dha2V1cCh4KQorI2RlZmluZSBydF9zZXRfb25lc2hvdF9tb2RlKCkKKyNkZWZpbmUgc3RhcnRfcnRfdGltZXIoeCkKKyNkZWZpbmUgc3RvcF9ydF90aW1lcigpCisKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DT01FRElfUlRBSQorI2luY2x1ZGUgPHJ0YWkuaD4KKyNpbmNsdWRlIDxydGFpX3NjaGVkLmg+CisKKyNpZiBSVEFJX1ZFUlNJT05fQ09ERSA8IFJUQUlfTUFOR0xFX1ZFUlNJT04oMywzLDApCisjZGVmaW5lIGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdAlpbnQKKyNlbHNlCisjZGVmaW5lIGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdAlsb25nCisjZW5kaWYKKworI2VuZGlmCisKKy8qIFRoaXMgZGVmaW5lcyB0aGUgZmFzdGVzdCBzcGVlZCB3ZSB3aWxsIGVtdWxhdGUuICBOb3RlIHRoYXQKKyAqIHdpdGhvdXQgYSB3YXRjaGRvZyAobGlrZSBpbiBSVEFJKSwgd2UgY291bGQgZWFzaWx5IG92ZXJydW4gb3VyCisgKiB0YXNrIHBlcmlvZCBiZWNhdXNlIGFuYWxvZyBpbnB1dCB0ZW5kcyB0byBiZSBzbG93LiAqLworI2RlZmluZSBTUEVFRF9MSU1JVCAxMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKworc3RhdGljIGludCB0aW1lcl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCB0aW1lcl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCB0aW1lcl9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKTsKK3N0YXRpYyBpbnQgdGltZXJfc3RhcnRfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3RpbWVyID0geworICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgZHJpdmVyX25hbWU6ImNvbWVkaV9ydF90aW1lciIsCisgICAgICBhdHRhY2g6dGltZXJfYXR0YWNoLAorICAgICAgZGV0YWNoOnRpbWVyX2RldGFjaCwKKy8vICAgICAgb3BlbjogICAgICAgICAgIHRpbWVyX29wZW4sCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3RpbWVyKTsKKworc3RydWN0IHRpbWVyX3ByaXZhdGUgeworCWNvbWVkaV90ICpkZXZpY2U7CS8vIGRldmljZSB3ZSBhcmUgZW11bGF0aW5nIGNvbW1hbmRzIGZvcgorCWludCBzdWJkOwkJLy8gc3ViZGV2aWNlIHdlIGFyZSBlbXVsYXRpbmcgY29tbWFuZHMgZm9yCisJUlRfVEFTSyAqcnRfdGFzazsJLy8gcnQgdGFzayB0aGF0IHN0YXJ0cyBzY2FucworCVJUX1RBU0sgKnNjYW5fdGFzazsJLy8gcnQgdGFzayB0aGF0IGNvbnRyb2xzIGNvbnZlcnNpb24gdGltaW5nIGluIGEgc2NhbgorCS8qIGlvX2Z1bmN0aW9uIGNhbiBwb2ludCB0byBlaXRoZXIgYW4gaW5wdXQgb3Igb3V0cHV0IGZ1bmN0aW9uCisJICogZGVwZW5kaW5nIG9uIHdoYXQga2luZCBvZiBzdWJkZXZpY2Ugd2UgYXJlIGVtdWxhdGluZyBmb3IgKi8KKwlpbnQgKCppb19mdW5jdGlvbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwkJdW5zaWduZWQgaW50IGluZGV4KTsKKwkvLyBSVElNRSBoYXMgdW5pdHMgb2YgMSA9IDgzOCBuYW5vc2Vjb25kcworCS8vIHRpbWUgYXQgd2hpY2ggZmlyc3Qgc2NhbiBzdGFydGVkLCB1c2VkIHRvIGNoZWNrIHNjYW4gdGltaW5nCisJUlRJTUUgc3RhcnQ7CisJLy8gdGltZSBiZXR3ZWVuIHNjYW5zCisJUlRJTUUgc2Nhbl9wZXJpb2Q7CisJLy8gdGltZSBiZXR3ZWVuIGNvbnZlcnNpb25zIGluIGEgc2NhbgorCVJUSU1FIGNvbnZlcnRfcGVyaW9kOworCS8vIGZsYWdzCisJdm9sYXRpbGUgaW50IHN0b3A7CS8vIGluZGljYXRlcyB3ZSBzaG91bGQgc3RvcAorCXZvbGF0aWxlIGludCBydF90YXNrX2FjdGl2ZTsJLy8gaW5kaWNhdGVzIHJ0X3Rhc2sgaXMgc2VydmljaW5nIGEgc3RydWN0IGNvbWVkaV9jbWQKKwl2b2xhdGlsZSBpbnQgc2Nhbl90YXNrX2FjdGl2ZTsJLy8gaW5kaWNhdGVzIHNjYW5fdGFzayBpcyBzZXJ2aWNpbmcgYSBzdHJ1Y3QgY29tZWRpX2NtZAorCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6MTsKK307CisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgdGltZXJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCB0aW1lcl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkZXZwcml2LT5zdG9wID0gMTsKKworCXJldHVybiAwOworfQorCisvLyBjaGVja3MgZm9yIHNjYW4gdGltaW5nIGVycm9yCitpbmxpbmUgc3RhdGljIGludCBjaGVja19zY2FuX3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2NhbikKK3sKKwlSVElNRSBub3csIHRpbWluZ19lcnJvcjsKKworCW5vdyA9IHJ0X2dldF90aW1lKCk7CisJdGltaW5nX2Vycm9yID0gbm93IC0gKGRldnByaXYtPnN0YXJ0ICsgc2NhbiAqIGRldnByaXYtPnNjYW5fcGVyaW9kKTsKKwlpZiAodGltaW5nX2Vycm9yID4gZGV2cHJpdi0+c2Nhbl9wZXJpb2QpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInRpbWluZyBlcnJvciIpOworCQlydF9wcmludGsoInNjYW4gc3RhcnRlZCAlaSBucyBsYXRlXG4iLCB0aW1pbmdfZXJyb3IgKiA4MzgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGNoZWNrcyBmb3IgY29udmVyc2lvbiB0aW1pbmcgZXJyb3IKK2lubGluZSBzdGF0aWMgaW50IGNoZWNrX2NvbnZlcnNpb25fdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCVJUSU1FIHNjYW5fc3RhcnQsIHVuc2lnbmVkIGludCBjb252ZXJzaW9uKQoreworCVJUSU1FIG5vdywgdGltaW5nX2Vycm9yOworCisJbm93ID0gcnRfZ2V0X3RpbWUoKTsKKwl0aW1pbmdfZXJyb3IgPQorCQlub3cgLSAoc2Nhbl9zdGFydCArIGNvbnZlcnNpb24gKiBkZXZwcml2LT5jb252ZXJ0X3BlcmlvZCk7CisJaWYgKHRpbWluZ19lcnJvciA+IGRldnByaXYtPmNvbnZlcnRfcGVyaW9kKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1pbmcgZXJyb3IiKTsKKwkJcnRfcHJpbnRrKCJjb252ZXJzaW9uIHN0YXJ0ZWQgJWkgbnMgbGF0ZVxuIiwKKwkJCXRpbWluZ19lcnJvciAqIDgzOCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gZGV2cHJpdi0+aW9fZnVuY3Rpb24gZm9yIGFuIGlucHV0IHN1YmRldmljZQorc3RhdGljIGludCB0aW1lcl9kYXRhX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kLAorCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCXJldCA9IGNvbWVkaV9kYXRhX3JlYWQoZGV2cHJpdi0+ZGV2aWNlLCBkZXZwcml2LT5zdWJkLAorCQlDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwKKwkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpbmRleF0pLAorCQlDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwgJmRhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyZWFkIGVycm9yIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocy0+ZmxhZ3MgJiBTREZfTFNBTVBMKSB7CisJCWNmY193cml0ZV9sb25nX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwl9IGVsc2UgeworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGRldnByaXYtPmlvX2Z1bmN0aW9uIGZvciBhbiBvdXRwdXQgc3ViZGV2aWNlCitzdGF0aWMgaW50IHRpbWVyX2RhdGFfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kLAorCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+d3JpdGVfc3ViZGV2OworCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CisJc2hvcnQgZGF0YTsKKwl1bnNpZ25lZCBpbnQgbG9uZ19kYXRhOworCWludCByZXQ7CisKKwlpZiAocy0+ZmxhZ3MgJiBTREZfTFNBTVBMKSB7CisJCW51bV9ieXRlcyA9CisJCQljZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCAmbG9uZ19kYXRhLAorCQkJc2l6ZW9mKGxvbmdfZGF0YSkpOworCX0gZWxzZSB7CisJCW51bV9ieXRlcyA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCQlsb25nX2RhdGEgPSBkYXRhOworCX0KKworCWlmIChudW1fYnl0ZXMgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiYnVmZmVyIHVuZGVycnVuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlyZXQgPSBjb21lZGlfZGF0YV93cml0ZShkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQsCisJCUNSX0NIQU4oY21kLT5jaGFubGlzdFtpbmRleF0pLAorCQlDUl9SQU5HRShjbWQtPmNoYW5saXN0W2luZGV4XSksCisJCUNSX0FSRUYoY21kLT5jaGFubGlzdFtpbmRleF0pLCBsb25nX2RhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ3cml0ZSBlcnJvciIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gZGV2cHJpdi0+aW9fZnVuY3Rpb24gZm9yIERJTyBzdWJkZXZpY2VzCitzdGF0aWMgaW50IHRpbWVyX2Rpb19yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwl1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlyZXQgPSBjb21lZGlfZGlvX2JpdGZpZWxkKGRldnByaXYtPmRldmljZSwgZGV2cHJpdi0+c3ViZCwgMCwgJmRhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyZWFkIGVycm9yIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChzLT5mbGFncyAmIFNERl9MU0FNUEwpCisJCWNmY193cml0ZV9sb25nX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwllbHNlCisJCWNmY193cml0ZV90b19idWZmZXIocywgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gcGVyZm9ybXMgc2NhbnMKK3N0YXRpYyB2b2lkIHNjYW5fdGFza19mdW5jKGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdCBkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbjsKKwlSVElNRSBzY2FuX3N0YXJ0OworCisJLy8gZXZlcnkgc3RydWN0IGNvbWVkaV9jbWQgY2F1c2VzIG9uZSBleGVjdXRpb24gb2Ygd2hpbGUgbG9vcAorCXdoaWxlICgxKSB7CisJCWRldnByaXYtPnNjYW5fdGFza19hY3RpdmUgPSAxOworCQkvLyBlYWNoIGZvciBsb29wIGNvbXBsZXRlcyBvbmUgc2NhbgorCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5zdG9wX2FyZyB8fCBjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORTsKKwkJCW4rKykgeworCQkJaWYgKG4pIHsKKwkJCQkvLyBzdXNwZW5kIHRhc2sgdW50aWwgbmV4dCBzY2FuCisJCQkJcmV0ID0gcnRfdGFza19zdXNwZW5kKGRldnByaXYtPnNjYW5fdGFzayk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCSJlcnJvciBzdXNwZW5kaW5nIHNjYW4gdGFzayIpOworCQkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCX0KKwkJCS8vIGNoZWNrIGlmIHN0b3AgZmxhZyB3YXMgc2V0IChieSB0aW1lcl9jYW5jZWwoKSkKKwkJCWlmIChkZXZwcml2LT5zdG9wKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCXJldCA9IGNoZWNrX3NjYW5fdGltaW5nKGRldiwgbik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCXNjYW5fc3RhcnQgPSBydF9nZXRfdGltZSgpOworCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+c2Nhbl9lbmRfYXJnOyBpKyspIHsKKwkJCQkvLyBjb252ZXJzaW9uIHRpbWluZworCQkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgJiYgaSkgeworCQkJCQlydF90YXNrX3dhaXRfcGVyaW9kKCk7CisJCQkJCXJldCA9IGNoZWNrX2NvbnZlcnNpb25fdGltaW5nKGRldiwKKwkJCQkJCXNjYW5fc3RhcnQsIGkpOworCQkJCQlpZiAocmV0IDwgMCkgeworCQkJCQkJYXN5bmMtPmV2ZW50cyB8PQorCQkJCQkJCUNPTUVESV9DQl9FUlJPUjsKKwkJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXQgPSBkZXZwcml2LT5pb19mdW5jdGlvbihkZXYsIGNtZCwgaSk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyA9IDA7CisJCX0KKworCSAgICAgIGNsZWFudXA6CisKKwkJY29tZWRpX3VubG9jayhkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzID0gMDsKKwkJZGV2cHJpdi0+c2Nhbl90YXNrX2FjdGl2ZSA9IDA7CisJCS8vIHN1c3BlbmQgdGFzayB1bnRpbCBuZXh0IHN0cnVjdCBjb21lZGlfY21kCisJCXJ0X3Rhc2tfc3VzcGVuZChkZXZwcml2LT5zY2FuX3Rhc2spOworCX0KK30KKworc3RhdGljIHZvaWQgdGltZXJfdGFza19mdW5jKGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdCBkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIG47CisKKwkvLyBldmVyeSBzdHJ1Y3QgY29tZWRpX2NtZCBjYXVzZXMgb25lIGV4ZWN1dGlvbiBvZiB3aGlsZSBsb29wCisJd2hpbGUgKDEpIHsKKwkJZGV2cHJpdi0+cnRfdGFza19hY3RpdmUgPSAxOworCQlkZXZwcml2LT5zY2FuX3Rhc2tfYWN0aXZlID0gMTsKKwkJZGV2cHJpdi0+c3RhcnQgPSBydF9nZXRfdGltZSgpOworCisJCWZvciAobiA9IDA7IG4gPCBjbWQtPnN0b3BfYXJnIHx8IGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FOworCQkJbisrKSB7CisJCQkvLyBzY2FuIHRpbWluZworCQkJaWYgKG4pCisJCQkJcnRfdGFza193YWl0X3BlcmlvZCgpOworCQkJaWYgKGRldnByaXYtPnNjYW5fdGFza19hY3RpdmUgPT0gMCkgeworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCXJldCA9IHJ0X3Rhc2tfbWFrZV9wZXJpb2RpYyhkZXZwcml2LT5zY2FuX3Rhc2ssCisJCQkJZGV2cHJpdi0+c3RhcnQgKyBkZXZwcml2LT5zY2FuX3BlcmlvZCAqIG4sCisJCQkJZGV2cHJpdi0+Y29udmVydF9wZXJpb2QpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISIpOworCQkJfQorCQl9CisKKwkgICAgICBjbGVhbnVwOgorCisJCWRldnByaXYtPnJ0X3Rhc2tfYWN0aXZlID0gMDsKKwkJLy8gc3VzcGVuZCB1bnRpbCBuZXh0IHN0cnVjdCBjb21lZGlfY21kCisJCXJ0X3Rhc2tfc3VzcGVuZChkZXZwcml2LT5ydF90YXNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGNvbWVkaV9pbnNuIHhpbnNuID0gKmluc247CisKKwl4aW5zbi5kYXRhID0gZGF0YTsKKwl4aW5zbi5zdWJkZXYgPSBkZXZwcml2LT5zdWJkOworCisJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldnByaXYtPmRldmljZSwgJnhpbnNuKTsKK30KKworc3RhdGljIGludCBjbWR0ZXN0X2hlbHBlcihzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwl1bnNpZ25lZCBpbnQgc3RhcnRfc3JjLAorCXVuc2lnbmVkIGludCBzY2FuX2JlZ2luX3NyYywKKwl1bnNpZ25lZCBpbnQgY29udmVydF9zcmMsCisJdW5zaWduZWQgaW50IHNjYW5fZW5kX3NyYywgdW5zaWduZWQgaW50IHN0b3Bfc3JjKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBzdGFydF9zcmM7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IHNjYW5fYmVnaW5fc3JjOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gY29udmVydF9zcmM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IHNjYW5fZW5kX3NyYzsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gc3RvcF9zcmM7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBzdGFydF9zcmMgPSAwOworCisJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfQU8pCisJCXN0YXJ0X3NyYyA9IFRSSUdfSU5UOworCWVsc2UKKwkJc3RhcnRfc3JjID0gVFJJR19OT1c7CisKKwllcnIgPSBjbWR0ZXN0X2hlbHBlcihjbWQsIHN0YXJ0X3NyYywJLyogc3RhcnRfc3JjICovCisJCVRSSUdfVElNRVIgfCBUUklHX0ZPTExPVywJLyogc2Nhbl9iZWdpbl9zcmMgKi8KKwkJVFJJR19OT1cgfCBUUklHX1RJTUVSLAkvKiBjb252ZXJ0X3NyYyAqLworCQlUUklHX0NPVU5ULAkvKiBzY2FuX2VuZF9zcmMgKi8KKwkJVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CS8qIHN0b3Bfc3JjICovCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwkgKiBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVworCQkmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XICYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKwkvLyBsaW1pdCBmcmVxdWVuY3ksIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBTUEVFRF9MSU1JVCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IFNQRUVEX0xJTUlUOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IFNQRUVEX0xJTUlUKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gU1BFRURfTElNSVQ7CisJCQllcnIrKzsKKwkJfQorCX0KKwkvLyBtYWtlIHN1cmUgY29udmVyc2lvbiBhbmQgc2NhbiBmcmVxdWVuY2llcyBhcmUgY29tcGF0aWJsZQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcgPiBjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFuZCBhcmd1bWVudHMgKi8KKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWVyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJLyogaGFjayBhdHRhY2s6IGRyaXZlcnMgYXJlIG5vdCBzdXBwb3NlZCB0byBkbyB0aGlzOiAqLworCWRldi0+cnQgPSAxOworCisJLy8gbWFrZSBzdXJlIHRhc2tzIGhhdmUgZmluaXNoZWQgY2xlYW51cCBvZiBsYXN0IHN0cnVjdCBjb21lZGlfY21kCisJaWYgKGRldnByaXYtPnJ0X3Rhc2tfYWN0aXZlIHx8IGRldnByaXYtPnNjYW5fdGFza19hY3RpdmUpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBjb21lZGlfbG9jayhkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJmYWlsZWQgdG8gb2J0YWluIGxvY2siKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5zY2FuX3BlcmlvZCA9IG5hbm8yY291bnQoY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJCWJyZWFrOworCWNhc2UgVFJJR19GT0xMT1c6CisJCWRldnByaXYtPnNjYW5fcGVyaW9kID0KKwkJCW5hbm8yY291bnQoY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyBzZXR0aW5nIHNjYW4gcGVyaW9kISIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWRldnByaXYtPmNvbnZlcnRfcGVyaW9kID0gbmFubzJjb3VudChjbWQtPmNvbnZlcnRfYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PVzoKKwkJZGV2cHJpdi0+Y29udmVydF9wZXJpb2QgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnIHNldHRpbmcgY29udmVyc2lvbiBwZXJpb2QhIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQlyZXR1cm4gdGltZXJfc3RhcnRfY21kKGRldiwgcyk7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IHRpbWVyX2ludHRyaWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1lcl9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiB0aW1lcl9zdGFydF9jbWQoZGV2LCBzKTsKK30KKworc3RhdGljIGludCB0aW1lcl9zdGFydF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlSVElNRSBub3csIGRlbGF5LCBwZXJpb2Q7CisJaW50IHJldDsKKworCWRldnByaXYtPnN0b3AgPSAwOworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQlkZWxheSA9IG5hbm8yY291bnQoY21kLT5zdGFydF9hcmcpOworCWVsc2UKKwkJZGVsYXkgPSAwOworCisJbm93ID0gcnRfZ2V0X3RpbWUoKTsKKwkvKiBVc2luZyAncGVyaW9kJyB0aGlzIHdheSBnZXRzIGFyb3VuZCBzb21lIHdlaXJkIGJ1ZyBpbiBnY2MtMi45NS4yCisJICogdGhhdCBnZW5lcmF0ZXMgdGhlIGNvbXBpbGUgZXJyb3IgJ2ludGVybmFsIGVycm9yLS11bnJlY29nbml6YWJsZSBpbnNuJworCSAqIHdoZW4gcnRfdGFza19tYWtlX3BlcmlvZCgpIGlzIGNhbGxlZCAob2JzZXJ2ZWQgd2l0aCBydGxpbnV4LTMuMSwgbGludXgtMi4yLjE5KS4KKwkgKiAgLSBmbWhlc3MgKi8KKwlwZXJpb2QgPSBkZXZwcml2LT5zY2FuX3BlcmlvZDsKKwlyZXQgPSBydF90YXNrX21ha2VfcGVyaW9kaWMoZGV2cHJpdi0+cnRfdGFzaywgbm93ICsgZGVsYXksIHBlcmlvZCk7CisJaWYgKHJldCA8IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIHN0YXJ0aW5nIHJ0X3Rhc2siKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICplbXVsX3M7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmVtdWxfZGV2OworCS8qIFRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBkZXZjb25maWcgb3B0aW9uc1tdICovCisJY29uc3QgaW50IHRpbWVyX3ByaW9yaXR5ID0gNDsKKwljb25zdCBpbnQgc2Nhbl9wcmlvcml0eSA9IHRpbWVyX3ByaW9yaXR5ICsgMTsKKwljaGFyIHBhdGhbMjBdOworCisJcHJpbnRrKCJjb21lZGklZDogdGltZXI6ICIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gInRpbWVyIjsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCB0aW1lcl9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNwcmludGYocGF0aCwgIi9kZXYvY29tZWRpJWQiLCBpdC0+b3B0aW9uc1swXSk7CisJZGV2cHJpdi0+ZGV2aWNlID0gY29tZWRpX29wZW4ocGF0aCk7CisJZGV2cHJpdi0+c3ViZCA9IGl0LT5vcHRpb25zWzFdOworCisJcHJpbnRrKCJlbXVsYXRpbmcgY29tbWFuZHMgZm9yIG1pbm9yICVpLCBzdWJkZXZpY2UgJWRcbiIsCisJCWl0LT5vcHRpb25zWzBdLCBkZXZwcml2LT5zdWJkKTsKKworCWVtdWxfZGV2ID0gZGV2cHJpdi0+ZGV2aWNlOworCWVtdWxfcyA9IGVtdWxfZGV2LT5zdWJkZXZpY2VzICsgZGV2cHJpdi0+c3ViZDsKKworCS8vIGlucHV0IG9yIG91dHB1dCBzdWJkZXZpY2UKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gZW11bF9zLT50eXBlOworCXMtPnN1YmRldl9mbGFncyA9IGVtdWxfcy0+c3ViZGV2X2ZsYWdzOwkvKiBTREZfR1JPVU5EICh0byBmb29sIGNoZWNrX2RyaXZlcikgKi8KKwlzLT5uX2NoYW4gPSBlbXVsX3MtPm5fY2hhbjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxMDI0OworCXMtPmRvX2NtZCA9IHRpbWVyX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gdGltZXJfY21kdGVzdDsKKwlzLT5jYW5jZWwgPSB0aW1lcl9jYW5jZWw7CisJcy0+bWF4ZGF0YSA9IGVtdWxfcy0+bWF4ZGF0YTsKKwlzLT5yYW5nZV90YWJsZSA9IGVtdWxfcy0+cmFuZ2VfdGFibGU7CisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGVtdWxfcy0+cmFuZ2VfdGFibGVfbGlzdDsKKwlzd2l0Y2ggKGVtdWxfcy0+dHlwZSkgeworCWNhc2UgQ09NRURJX1NVQkRfQUk6CisJCXMtPmluc25fcmVhZCA9IHRpbWVyX2luc247CisJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworCQlkZXZwcml2LT5pb19mdW5jdGlvbiA9IHRpbWVyX2RhdGFfcmVhZDsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfU1VCRF9BTzoKKwkJcy0+aW5zbl93cml0ZSA9IHRpbWVyX2luc247CisJCXMtPmluc25fcmVhZCA9IHRpbWVyX2luc247CisJCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfV1JJVEU7CisJCWRldnByaXYtPmlvX2Z1bmN0aW9uID0gdGltZXJfZGF0YV93cml0ZTsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfU1VCRF9ESU86CisJCXMtPmluc25fd3JpdGUgPSB0aW1lcl9pbnNuOworCQlzLT5pbnNuX3JlYWQgPSB0aW1lcl9pbnNuOworCQlzLT5pbnNuX2JpdHMgPSB0aW1lcl9pbnNuOworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJZGV2cHJpdi0+aW9fZnVuY3Rpb24gPSB0aW1lcl9kaW9fcmVhZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImZhaWxlZCB0byBkZXRlcm1pbmUgc3ViZGV2aWNlIHR5cGUhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJ0X3NldF9vbmVzaG90X21vZGUoKTsKKwlzdGFydF9ydF90aW1lcigxKTsKKwlkZXZwcml2LT50aW1lcl9ydW5uaW5nID0gMTsKKworCWRldnByaXYtPnJ0X3Rhc2sgPSBremFsbG9jKHNpemVvZihSVF9UQVNLKSwgR0ZQX0tFUk5FTCk7CisKKwkvLyBpbml0aWFsaXplIHJlYWwtdGltZSB0YXNrcworCXJldCA9IHJ0X3Rhc2tfaW5pdChkZXZwcml2LT5ydF90YXNrLCB0aW1lcl90YXNrX2Z1bmMsCisJCShjb21lZGlfcnRfdGFza19jb250ZXh0X3QpIGRldiwgMzAwMCwgdGltZXJfcHJpb3JpdHksIDAsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBpbml0YWxpemluZyBydF90YXNrIik7CisJCWtmcmVlKGRldnByaXYtPnJ0X3Rhc2spOworCQlkZXZwcml2LT5ydF90YXNrID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZwcml2LT5zY2FuX3Rhc2sgPSBremFsbG9jKHNpemVvZihSVF9UQVNLKSwgR0ZQX0tFUk5FTCk7CisKKwlyZXQgPSBydF90YXNrX2luaXQoZGV2cHJpdi0+c2Nhbl90YXNrLCBzY2FuX3Rhc2tfZnVuYywKKwkJKGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdCkgZGV2LCAzMDAwLCBzY2FuX3ByaW9yaXR5LCAwLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgaW5pdGFsaXppbmcgc2Nhbl90YXNrIik7CisJCWtmcmVlKGRldnByaXYtPnNjYW5fdGFzayk7CisJCWRldnByaXYtPnNjYW5fdGFzayA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8vIGZyZWUgYWxsb2NhdGVkIHJlc291cmNlcworc3RhdGljIGludCB0aW1lcl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogdGltZXI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cnRfdGFzaykgeworCQkJcnRfdGFza19kZWxldGUoZGV2cHJpdi0+cnRfdGFzayk7CisJCQlrZnJlZShkZXZwcml2LT5ydF90YXNrKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+c2Nhbl90YXNrKSB7CisJCQlydF90YXNrX2RlbGV0ZShkZXZwcml2LT5zY2FuX3Rhc2spOworCQkJa2ZyZWUoZGV2cHJpdi0+c2Nhbl90YXNrKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+dGltZXJfcnVubmluZykKKwkJCXN0b3BfcnRfdGltZXIoKTsKKwkJaWYgKGRldnByaXYtPmRldmljZSkKKwkJCWNvbWVkaV9jbG9zZShkZXZwcml2LT5kZXZpY2UpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKaW5kZXggNGI0YzM3ZC4uZTY3OTMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKQEAgLTg5LDEzICs4OSwxMyBAQAogCXVuc2lnbmVkIGludCBzY2FuX3BlcmlvZDsJLyogc2NhbiBwZXJpb2QgaW4gdXNlYyAqLwogCXVuc2lnbmVkIGludCBjb252ZXJ0X3BlcmlvZDsJLyogY29udmVyc2lvbiBwZXJpb2QgaW4gdXNlYyAqLwogCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6MTsKLQlsc2FtcGxfdCBhb19sb29wYmFja3NbTl9DSEFOU107CisJdW5zaWduZWQgaW50IGFvX2xvb3BiYWNrc1tOX0NIQU5TXTsKIH07CiAjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgd2F2ZWZvcm1fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKIAotc3RhdGljIGludCB3YXZlZm9ybV9hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpOwotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX3dhdmVmb3JtID0geworc3RhdGljIGludCB3YXZlZm9ybV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl93YXZlZm9ybSA9IHsKICAgICAgIC5kcml2ZXJfbmFtZSA9CSJjb21lZGlfdGVzdCIsCiAgICAgICAubW9kdWxlID0JCVRISVNfTU9EVUxFLAogICAgICAgLmF0dGFjaCA9CQl3YXZlZm9ybV9hdHRhY2gsCkBAIC0xMDcsMjggKzEwNywyOCBAQAogCiBDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3dhdmVmb3JtKTsKIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBjb21lZGlfY21kICpjbWQpOwotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKTsKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2FvX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKTsKLXN0YXRpYyBzYW1wbF90IGZha2Vfc2F3dG9vdGgoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2UsCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCB3YXZlZm9ybV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIHNob3J0IGZha2Vfc2F3dG9vdGgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX3NxdWFyZXdhdmUoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2UsCitzdGF0aWMgc2hvcnQgZmFrZV9zcXVhcmV3YXZlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX2ZsYXRsaW5lKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAorc3RhdGljIHNob3J0IGZha2VfZmxhdGxpbmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX3dhdmVmb3JtKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCitzdGF0aWMgc2hvcnQgZmFrZV93YXZlZm9ybShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAkJCSAgICAgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7CiAKIC8qIDEwMDAgbmFub3NlYyBpbiBhIG1pY3Jvc2VjICovCiBzdGF0aWMgY29uc3QgaW50IG5hbm9fcGVyX21pY3JvID0gMTAwMDsKIAogLyogZmFrZSBhbmFsb2cgaW5wdXQgcmFuZ2VzICovCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSB3YXZlZm9ybV9haV9yYW5nZXMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2Ugd2F2ZWZvcm1fYWlfcmFuZ2VzID0gewogCTIsCiAJewogCQkJQklQX1JBTkdFKDEwKSwKQEAgLTE0Myw5ICsxNDMsOSBAQAogKi8KIHN0YXRpYyB2b2lkIHdhdmVmb3JtX2FpX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBhcmc7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IGRldi0+cmVhZF9zdWJkZXYtPmFzeW5jOwotCWNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgYXJnOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBpLCBqOwogCS8qIGFsbCB0aW1lcyBpbiBtaWNyb3NlYyAqLwogCXVuc2lnbmVkIGxvbmcgZWxhcHNlZF90aW1lOwpAQCAtMTkyLDkgKzE5Miw5IEBACiAJY29tZWRpX2V2ZW50KGRldiwgZGV2LT5yZWFkX3N1YmRldik7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IHdhdmVmb3JtX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgYW1wbGl0dWRlID0gaXQtPm9wdGlvbnNbMF07CiAJaW50IHBlcmlvZCA9IGl0LT5vcHRpb25zWzFdOwogCWludCBpOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJcHJpbnRrKCJjb21lZGklZDogY29tZWRpX3Rlc3Q6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKQEAgLTI2OSw4ICsyNjksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICAgIGNvbWVkaV9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwOwogCWludCB0bXA7CkBAIC0zOTcsOSArMzk3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCiAJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JUKSB7CiAJCWNvbWVkaV9lcnJvcihkZXYsCkBAIC00MjksMjAgKzQyOSwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlkZXZwcml2LT50aW1lcl9ydW5uaW5nID0gMDsKIAlkZWxfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNhbXBsX3QgZmFrZV9zYXd0b290aChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKK3N0YXRpYyBzaG9ydCBmYWtlX3Nhd3Rvb3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzLT5tYXhkYXRhIC8gMjsKIAl1NjQgdmFsdWU7Ci0JY29uc3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlID0gJnMtPnJhbmdlX3RhYmxlLT5yYW5nZVtyYW5nZV9pbmRleF07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSA9ICZzLT5yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOwogCXU2NCBiaW5hcnlfYW1wbGl0dWRlOwogCiAJYmluYXJ5X2FtcGxpdHVkZSA9IHMtPm1heGRhdGE7CkBAIC00NTcsMTMgKzQ1NywxMyBAQAogCiAJcmV0dXJuIG9mZnNldCArIHZhbHVlOwogfQotc3RhdGljIHNhbXBsX3QgZmFrZV9zcXVhcmV3YXZlKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAorc3RhdGljIHNob3J0IGZha2Vfc3F1YXJld2F2ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzLT5tYXhkYXRhIC8gMjsKIAl1NjQgdmFsdWU7Ci0JY29uc3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlID0gJnMtPnJhbmdlX3RhYmxlLT5yYW5nZVtyYW5nZV9pbmRleF07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSA9ICZzLT5yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOwogCWN1cnJlbnRfdGltZSAlPSBkZXZwcml2LT51c2VjX3BlcmlvZDsKIAogCXZhbHVlID0gcy0+bWF4ZGF0YTsKQEAgLTQ3NiwxNCArNDc2LDE0IEBACiAJcmV0dXJuIG9mZnNldCArIHZhbHVlOwogfQogCi1zdGF0aWMgc2FtcGxfdCBmYWtlX2ZsYXRsaW5lKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAorc3RhdGljIHNob3J0IGZha2VfZmxhdGxpbmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAogCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSkKIHsKIAlyZXR1cm4gZGV2LT5yZWFkX3N1YmRldi0+bWF4ZGF0YSAvIDI7CiB9CiAKIC8qIGdlbmVyYXRlcyBhIGRpZmZlcmVudCB3YXZlZm9ybSBkZXBlbmRpbmcgb24gd2hhdCBjaGFubmVsIGlzIHJlYWQgKi8KLXN0YXRpYyBzYW1wbF90IGZha2Vfd2F2ZWZvcm0oY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKK3N0YXRpYyBzaG9ydCBmYWtlX3dhdmVmb3JtKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGxvbmcgY3VycmVudF90aW1lKQogewogCWVudW0gewpAQCAtNTA0LDggKzUwNCw4IEBACiAJcmV0dXJuIGZha2VfZmxhdGxpbmUoZGV2LCByYW5nZSwgY3VycmVudF90aW1lKTsKIH0KIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGksIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApAQCAtNTE1LDggKzUxNSw4IEBACiAJcmV0dXJuIGluc24tPm47CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaSwgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMTk0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjb250ZWNfcGNpX2RpbworRGVzY3JpcHRpb246IENvbnRlYyBQSU8xNjE2TCBkaWdpdGFsIEkvTyBib2FyZAorRGV2aWNlczogW0NvbnRlY10gUElPMTYxNkwgKGNvbnRlY19wY2lfZGlvKQorQXV0aG9yOiBTdGVmYW5vIFJpdm9pciA8cy5yaXZvaXJAZ3RzLml0PgorVXBkYXRlZDogV2VkLCAyNyBKdW4gMjAwNyAxMzowMDowNiArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworZW51bSBjb250ZWNfbW9kZWwgeworCVBJTzE2MTZMID0gMCwKK307CisKK3N0cnVjdCBjb250ZWNfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG1vZGVsOworCWludCBpbl9wb3J0czsKKwlpbnQgb3V0X3BvcnRzOworCWludCBpbl9vZmZzOworCWludCBvdXRfb2ZmczsKKwlpbnQgb3V0X2JvZmZzOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVjX2JvYXJkIGNvbnRlY19ib2FyZHNbXSA9IHsKKwl7IlBJTzE2MTZMIiwgUElPMTYxNkwsIDE2LCAxNiwgMCwgMiwgMTB9LAorfTsKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BJTzE2MTZMIDB4ODE3Mgorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNvbnRlY19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NPTlRFQywgUENJX0RFVklDRV9JRF9QSU8xNjE2TCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwgUElPMTYxNkx9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNvbnRlY19wY2lfdGFibGUpOworCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBjb250ZWNfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGNvbnRlY19wcml2YXRlIHsKKwlpbnQgZGF0YTsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY29udGVjX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgY29udGVjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGNvbnRlY19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9jb250ZWMgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY29udGVjX3BjaV9kaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNvbnRlY19hdHRhY2gsCisgICAgICBkZXRhY2g6Y29udGVjX2RldGFjaCwKK307CisKKy8qIENsYXNzaWMgZGlnaXRhbCBJTyAqLworc3RhdGljIGludCBjb250ZWNfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNvbnRlY19kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworI2lmIDAKK3N0YXRpYyBpbnQgY29udGVjX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKK3N0YXRpYyBpbnQgY29udGVjX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCk7CisjZW5kaWYKKworc3RhdGljIGludCBjb250ZWNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiBjb250ZWM6ICIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNvbnRlY19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09OVEVDICYmCisJCQlwY2lkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BJTzE2MTZMKSB7CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvKiBDaGVjayBidXMgYW5kIHNsb3QuICovCisJCQkJaWYgKGl0LT5vcHRpb25zWzBdICE9IHBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQkJaXQtPm9wdGlvbnNbMV0gIT0KKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJjb250ZWNfcGNpX2RpbyIpKSB7CisJCQkJcHJpbnRrKCJlcnJvciBlbmFibGluZyBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWRldi0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJCQlwcmludGsoIiBiYXNlIGFkZHIgJWx4ICIsIGRldi0+aW9iYXNlKTsKKworCQkJZGV2LT5ib2FyZF9wdHIgPSBjb250ZWNfYm9hcmRzICsgMDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDE2OworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW5zbl9iaXRzID0gY29udGVjX2RpX2luc25fYml0czsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCQlzLT5uX2NoYW4gPSAxNjsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmluc25fYml0cyA9IGNvbnRlY19kb19pbnNuX2JpdHM7CisKKwkJCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXByaW50aygiY2FyZCBub3QgcHJlc2VudCFcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgY29udGVjX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBjb250ZWM6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5wY2lfZGV2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgMAorc3RhdGljIGludCBjb250ZWNfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXByaW50aygiY29udGVjX2NtZHRlc3QgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb250ZWNfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucywgaW50IHJvdW5kKQoreworCXJldHVybiAqbnM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjb250ZWNfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXByaW50aygiY29udGVjX2RvX2luc25fYml0cyBjYWxsZWRcbiIpOworCXByaW50aygiIGRhdGE6ICVkICVkXG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQlydF9wcmludGsoIiAgb3V0OiAlZCBvbiAlbHhcbiIsIHMtPnN0YXRlLAorCQkJZGV2LT5pb2Jhc2UgKyB0aGlzYm9hcmQtPm91dF9vZmZzKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyB0aGlzYm9hcmQtPm91dF9vZmZzKTsKKwl9CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgY29udGVjX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlydF9wcmludGsoImNvbnRlY19kaV9pbnNuX2JpdHMgY2FsbGVkXG4iKTsKKwlydF9wcmludGsoIiBkYXRhOiAlZCAlZFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyB0aGlzYm9hcmQtPmluX29mZnMpOworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NvbnRlYywgY29udGVjX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4NDQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXFib2FyZDIwMDAuYwpAQCAtMCwwICsxLDg3NyBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jCisgICBoYXJkd2FyZSBkcml2ZXIgZm9yIElPdGVjaCBEQVFib2FyZC8yMDAwCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OSBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBkYXFib2FyZDIwMDAKK0Rlc2NyaXB0aW9uOiBJT1RlY2ggREFRQm9hcmQvMjAwMAorQXV0aG9yOiBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6Mjg6NTIgKzAxMDAKK0RldmljZXM6IFtJT1RlY2hdIERBUUJvYXJkLzIwMDAgKGRhcWJvYXJkMjAwMCkKKworTXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGRyaXZlciB3YXMgZGV0ZXJtaW5lZCBmcm9tIHJlYWRpbmcKK3RoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFdpbmRvd3MgZHJpdmVyLgorCitUaGUgRlBHQSBvbiB0aGUgYm9hcmQgcmVxdWlyZXMgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggY2FuCitiZSBsb2FkZWQgYnkgY29tZWRpX2NvbmZpZyB1c2luZyB0aGUgLWkKK29wdGlvbi4gIFRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY29tZWRpLm9yZworaW4gdGhlIGNvbWVkaV9ub25mcmVlX2Zpcm13YXJlIHRhcmJhbGwuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorKi8KKy8qCisgICBUaGlzIGNhcmQgd2FzIG9idmlvdXNseSBuZXZlciBpbnRlbmRlZCB0byBsZWF2ZSB0aGUgV2luZG93cyB3b3JsZCwKKyAgIHNpbmNlIGl0IGxhY2tlZCBhbGwga2luZCBvZiBoYXJkd2FyZSBkb2N1bWVudGF0aW9uIChleGNlcHQgZm9yIGNhYmxlCisgICBwaW5vdXRzLCBwbHVnIGFuZCBwcmF5IGhhcyBzb21ldGhpbmcgdG8gY2F0Y2ggdXAgd2l0aCB5ZXQpLgorCisgICBXaXRoIHNvbWUgaGVscCBmcm9tIG91ciBzd2VkaXNoIGRpc3RyaWJ1dG9yLCB3ZSBnb3QgdGhlIFdpbmRvd3Mgc291cmNlY29kZQorICAgZm9yIHRoZSBjYXJkLCBhbmQgaGVyZSBhcmUgdGhlIGZpbmRpbmdzIHNvIGZhci4KKworICAgMS4gQSBnb29kIGRvY3VtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSBQQ0kgaW50ZXJmYWNlIGNoaXAgaXMgZm91bmQgYXQ6CisgICAgICBodHRwOi8vcGx4LnBseHRlY2guY29tL2Rvd25sb2FkLzkwODAvZGF0YWJvb2svOTA4MGRiLTEwNi5wZGYKKworICAgMi4gVGhlIGluaXRpYWxpemF0aW9uIGRvbmUgc28gZmFyIGlzOgorICAgICAgICBhLiBwcm9ncmFtIHRoZSBGUEdBICh3aW5kb3dzIGNvZGUgc2FucyBhIGxvdCBvZiBlcnJvciBtZXNzYWdlcykKKwliLgorCisgICAzLiBBbmFsb2cgb3V0IHNlZW1zIHRvIHdvcmsgT0sgd2l0aCBEQUMncyBkaXNhYmxlZCwgaWYgREFDJ3MgYXJlIGVuYWJsZWQsCisgICAgICB5b3UgaGF2ZSB0byBvdXRwdXQgdmFsdWVzIHRvIGFsbCBlbmFibGVkIERBQydzIHVudGlsIHJlc3VsdCBhcHBlYXJzLCBJCisgICAgICBndWVzcyB0aGF0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBwYWNlciBjbG9ja3MsIGJ1dCB0aGUgc291cmNlCisgICAgICBnaXZlcyBtZSBubyBjbHVlcy4gSSdsbCBrZWVwIGl0IHNpbXBsZSBzbyBmYXIuCisKKyAgIDQuIEFuYWxvZyBpbi4KKyAgICAgICAgRWFjaCBjaGFubmVsIGluIHRoZSBzY2FubGlzdCBzZWVtcyB0byBiZSBjb250cm9sbGVkIGJ5IGZvdXIKKwljb250cm9sIHdvcmRzOgorCisgICAgICAgIFdvcmQwOgorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgIQorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgICAgIFdvcmQxOgorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgIQorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgIHwgICAgICAgICAgICAgfCAgICAgICB8IHwgfCB8IHwKKyAgICAgICAgICAgKy0tLS0tLSstLS0tLS0rICAgICAgIHwgfCB8IHwgKy0tIERpZ2l0YWwgaW5wdXQgKD8/KQorCQkgIHwJCSB8IHwgfCArLS0tLSAxMCB1cyBzZXR0bGluZyB0aW1lCisJCSAgfAkJIHwgfCArLS0tLS0tIFN1c3BlbmQgYWNxdWlzaXRpb24gKGxhc3QgdG8gc2NhbikKKwkJICB8CQkgfCArLS0tLS0tLS0gU2ltdWx0YW5lb3VzIHNhbXBsZSBhbmQgaG9sZAorCQkgIHwJCSArLS0tLS0tLS0tLSBTaWduZWQgZGF0YSBmb3JtYXQKKwkJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIG9mZnNldCBsb3cKKworICAgICAgICBXb3JkMjoKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgfCAgICAgfCB8ICAgICB8IHwgfCB8IHwgfCAgICAgfAorICAgICAgICAgICArLS0tLS0rICstLSstLSsgKysrICsrKyArLS0rLS0rCisgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgfCAgIHwgICAgICstLS0tLSBFeHBhbnNpb24gY2hhbm5lbAorCSAgICAgIHwgICAgICAgfCAgICAgfCAgICstLS0tLS0tLS0tLSBFeHBhbnNpb24gZ2FpbgorICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0gQ2hhbm5lbCAobG93KQorCSAgICAgIHwgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIG9mZnNldCBoaWdoCisJICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvcnJlY3Rpb24gZ2FpbiBsb3cKKyAgICAgICAgV29yZDM6CisgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhCisgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgIHwgICAgICAgICAgICAgfCB8IHwgfCAgIHwgfCB8IHwKKyAgICAgICAgICAgKy0tLS0tLSstLS0tLS0rIHwgfCArLSstKyB8IHwgKy0tIExvdyBiYW5rIGVuYWJsZQorICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICAgfCAgIHwgKy0tLS0gSGlnaCBiYW5rIGVuYWJsZQorICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICAgfCAgICstLS0tLS0gSGkvbG93IHNlbGVjdAorCQkgIHwgICAgCSAgIHwgfCAgICstLS0tLS0tLS0tIEdhaW4gKDEsPywyLDQsOCwxNiwzMiw2NCkKKwkJICB8ICAgIAkgICB8ICstLS0tLS0tLS0tLS0tLSBkaWZmZXJlbnRpYWwvc2luZ2xlIGVuZGVkCisJCSAgfCAgICAJICAgKy0tLS0tLS0tLS0tLS0tLS0gVW5pcG9sYXIKKwkJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIGdhaW4gaGlnaAorCisKKworICAgOTk5LiBUaGUgY2FyZCBzZWVtcyB0byBoYXZlIGFuIGluY3JlZGlibGUgYW1vdW50IG9mIGNhcGFiaWxpdGllcywgYnV0CisgICAgICAgIHRyeWluZyB0byByZXZlcnNlIGVuZ2luZWVyIHRoZW0gZnJvbSB0aGUgV2luZG93cyBzb3VyY2UgaXMgYmV5b25kIG15CisJcGF0aWVuY2UuCisKKworICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTMiAJMHgwMDAyMTYxNgkvKiBEYXFib2FyZC8yMDAwIC0gMiBEYWNzICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTNCAJMHgwMDA0MTYxNgkvKiBEYXFib2FyZC8yMDAwIC0gNCBEYWNzICovCisKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RBUV9TSVpFIAkJMHgxMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9QTFhfU0laRSAJCTB4MTAwCisKKy8vIEluaXRpYWxpemF0aW9uIGJpdHMgZm9yIHRoZSBTZXJpYWwgRUVQUk9NIENvbnRyb2wgUmVnaXN0ZXIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NFQ1JQcm9nUGluSGkgICAgICAweDgwMDE3NjdlCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TRUNSUHJvZ1BpbkxvICAgICAgMHg4MDAwNzY3ZQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU0VDUkxvY2FsQnVzSGkgICAgIDB4YzAwMDc2N2UKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NFQ1JMb2NhbEJ1c0xvICAgICAweDgwMDA3NjdlCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TRUNSUmVsb2FkSGkgICAgICAgMHhhMDAwNzY3ZQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU0VDUlJlbG9hZExvICAgICAgIDB4ODAwMDc2N2UKKworLy8gU0VDUiBzdGF0dXMgYml0cworI2RlZmluZSBEQVFCT0FSRDIwMDBfRUVQUk9NX1BSRVNFTlQgICAgIDB4MTAwMDAwMDAKKworLy8gQ1BMRCBzdGF0dXMgYml0cworI2RlZmluZSBEQVFCT0FSRDIwMDBfQ1BMRF9JTklUIAkJMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9DUExEX0RPTkUgCQkweDAwMDQKKworLy8gQXZhaWxhYmxlIHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhcWJvYXJkMjAwMF9haSA9IHsgMTMsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKC0wLjYyNSwgMC42MjUpLAorCQkJUkFOR0UoLTAuMzEyNSwgMC4zMTI1KSwKKwkJCVJBTkdFKC0wLjE1NiwgMC4xNTYpLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCQlSQU5HRSgwLCAwLjYyNSksCisJCQlSQU5HRSgwLCAwLjMxMjUpCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhcWJvYXJkMjAwMF9hbyA9IHsgMSwgeworCQkJUkFOR0UoLTEwLCAxMCkKKwl9Cit9OworCitzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3IHsKKwl2b2xhdGlsZSB1MTYgYWNxQ29udHJvbDsJLy8gMHgwMAorCXZvbGF0aWxlIHUxNiBhY3FTY2FuTGlzdEZJRk87CS8vIDB4MDIKKwl2b2xhdGlsZSB1MzIgYWNxUGFjZXJDbG9ja0RpdkxvdzsJLy8gMHgwNAorCisJdm9sYXRpbGUgdTE2IGFjcVNjYW5Db3VudGVyOwkvLyAweDA4CisJdm9sYXRpbGUgdTE2IGFjcVBhY2VyQ2xvY2tEaXZIaWdoOwkvLyAweDBhCisJdm9sYXRpbGUgdTE2IGFjcVRyaWdnZXJDb3VudDsJLy8gMHgwYworCXZvbGF0aWxlIHUxNiBmaWxsMjsJLy8gMHgwZQorCXZvbGF0aWxlIHUxNiBhY3FSZXN1bHRzRklGTzsJLy8gMHgxMAorCXZvbGF0aWxlIHUxNiBmaWxsMzsJLy8gMHgxMgorCXZvbGF0aWxlIHUxNiBhY3FSZXN1bHRzU2hhZG93OwkvLyAweDE0CisJdm9sYXRpbGUgdTE2IGZpbGw0OwkvLyAweDE2CisJdm9sYXRpbGUgdTE2IGFjcUFkY1Jlc3VsdDsJLy8gMHgxOAorCXZvbGF0aWxlIHUxNiBmaWxsNTsJLy8gMHgxYQorCXZvbGF0aWxlIHUxNiBkYWNTY2FuQ291bnRlcjsJLy8gMHgxYworCXZvbGF0aWxlIHUxNiBmaWxsNjsJLy8gMHgxZQorCisJdm9sYXRpbGUgdTE2IGRhY0NvbnRyb2w7CS8vIDB4MjAKKwl2b2xhdGlsZSB1MTYgZmlsbDc7CS8vIDB4MjIKKwl2b2xhdGlsZSBzMTYgZGFjRklGTzsJLy8gMHgyNAorCXZvbGF0aWxlIHUxNiBmaWxsOFsyXTsJLy8gMHgyNgorCXZvbGF0aWxlIHUxNiBkYWNQYWNlckNsb2NrRGl2OwkvLyAweDJhCisJdm9sYXRpbGUgdTE2IHJlZkRhY3M7CS8vIDB4MmMKKwl2b2xhdGlsZSB1MTYgZmlsbDk7CS8vIDB4MmUKKworCXZvbGF0aWxlIHUxNiBkaW9Db250cm9sOwkvLyAweDMwCisJdm9sYXRpbGUgczE2IGRpb1AzaHNpb0RhdGE7CS8vIDB4MzIKKwl2b2xhdGlsZSB1MTYgZGlvUDNDb250cm9sOwkvLyAweDM0CisJdm9sYXRpbGUgdTE2IGNhbEVlcHJvbUNvbnRyb2w7CS8vIDB4MzYKKwl2b2xhdGlsZSBzMTYgZGFjU2V0dGluZ1s0XTsJLy8gMHgzOAorCXZvbGF0aWxlIHMxNiBkaW9QMkV4cGFuc2lvbklPOEJpdFszMl07CS8vIDB4NDAKKworCXZvbGF0aWxlIHUxNiBjdHJUbXJDb250cm9sOwkvLyAweDgwCisJdm9sYXRpbGUgdTE2IGZpbGwxMFszXTsJLy8gMHg4MgorCXZvbGF0aWxlIHMxNiBjdHJJbnB1dFs0XTsJLy8gMHg4OAorCXZvbGF0aWxlIHUxNiBmaWxsMTFbOF07CS8vIDB4OTAKKwl2b2xhdGlsZSB1MTYgdGltZXJEaXZpc29yWzJdOwkvLyAweGEwCisJdm9sYXRpbGUgdTE2IGZpbGwxMls2XTsJLy8gMHhhNAorCisJdm9sYXRpbGUgdTE2IGRtYUNvbnRyb2w7CS8vIDB4YjAKKwl2b2xhdGlsZSB1MTYgdHJpZ0NvbnRyb2w7CS8vIDB4YjIKKwl2b2xhdGlsZSB1MTYgZmlsbDEzWzJdOwkvLyAweGI0CisJdm9sYXRpbGUgdTE2IGNhbEVlcHJvbTsJLy8gMHhiOAorCXZvbGF0aWxlIHUxNiBhY3FEaWdpdGFsTWFyazsJLy8gMHhiYQorCXZvbGF0aWxlIHUxNiB0cmlnRGFjczsJLy8gMHhiYworCXZvbGF0aWxlIHUxNiBmaWxsMTQ7CS8vIDB4YmUKKwl2b2xhdGlsZSBzMTYgZGlvUDJFeHBhbnNpb25JTzE2Qml0WzMyXTsJLy8gMHhjMAorfTsKKworLyogU2NhbiBTZXF1ZW5jZXIgcHJvZ3JhbW1pbmcgKi8KKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NlcVN0YXJ0U2Nhbkxpc3QgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NlcVN0b3BTY2FuTGlzdCAgICAgICAgICAgICAweDAwMTAKKworLy8gUHJlcGFyZSBmb3IgYWNxdWlzaXRpb24KKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc2V0U2Nhbkxpc3RGaWZvICAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc2V0UmVzdWx0c0ZpZm8gICAgICAgICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc2V0Q29uZmlnUGlwZSAgICAgICAgICAweDAwMDEKKworLy8gQWNxdXNpdGlvbiBzdGF0dXMgYml0cworI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9Nb3JlMVNhbXBsZSAgIDB4MDAwMQorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9IYXNWYWxpZERhdGEgIDB4MDAwMgorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9PdmVycnVuICAgICAgIDB4MDAwNAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxTG9naWNTY2FubmluZyAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxQ29uZmlnUGlwZUZ1bGwgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxU2Nhbkxpc3RGSUZPRW1wdHkgICAgICAgIDB4MDAyMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxQWRjTm90UmVhZHkgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQXJiaXRyYXRpb25GYWlsdXJlICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUGFjZXJPdmVycnVuICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfRGFjUGFjZXJPdmVycnVuICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxSGFyZHdhcmVFcnJvciAgICAgICAgICAgIDB4MDFjMAorCisvLyBTY2FuIFNlcXVlbmNlciBwcm9ncmFtbWluZworI2RlZmluZSBEQVFCT0FSRDIwMDBfU2VxU3RhcnRTY2FuTGlzdCAgICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU2VxU3RvcFNjYW5MaXN0ICAgICAgICAgICAgIDB4MDAxMAorCisvKiBQYWNlciBDbG9jayBDb250cm9sICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckludGVybmFsICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckV4dGVybmFsICAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckVuYWJsZSAgICAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckVuYWJsZURhY1BhY2VyICAgICAgMHgwMDM0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckRpc2FibGUgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlck5vcm1hbE1vZGUgICAgICAgICAgMHgwMDYwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckNvbXBhdGliaWxpdHlNb2RlICAgMHgwMDYxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckludGVybmFsT3V0RW5hYmxlICAgMHgwMDA4CisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckV4dGVybmFsUmlzaW5nICAgICAgMHgwMTAwCisKKy8vIERBQyBzdGF0dXMKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY0Z1bGwgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1JlZkJ1c3kgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1RyZ0J1c3kgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0NhbEJ1c3kgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzBCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzFCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzJCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzNCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwODAKKworLy8gREFDIGNvbnRyb2wKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzBFbmFibGUgICAgICAgICAgICAgICAgICAweDAwMjEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzFFbmFibGUgICAgICAgICAgICAgICAgICAweDAwMzEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzJFbmFibGUgICAgICAgICAgICAgICAgICAweDAwNDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzNFbmFibGUgICAgICAgICAgICAgICAgICAweDAwNTEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY0VuYWJsZUJpdCAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzBEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzFEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzJEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzNEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwNTAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1Jlc2V0RmlmbyAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1BhdHRlcm5EaXNhYmxlICAgICAgICAgICAweDAwNjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1BhdHRlcm5FbmFibGUgICAgICAgICAgICAweDAwNjEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1NlbGVjdFNpZ25lZERhdGEgICAgICAgICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1NlbGVjdFVuc2lnbmVkRGF0YSAgICAgICAweDAwMDAKKworLyogVHJpZ2dlciBDb250cm9sICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnQW5hbG9nICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnVFRMICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnVHJhbnNIaUxvICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnVHJhbnNMb0hpICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnQWJvdmUgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnQmVsb3cgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnTGV2ZWxTZW5zZSAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnRWRnZVNlbnNlICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnRW5hYmxlICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnRGlzYWJsZSAgICAgICAgICAgICAgICAgMHgwMDAwCisKKy8vIFJlZmVyZW5jZSBEYWMgU2VsZWN0aW9uCisjZGVmaW5lIERBUUJPQVJEMjAwMF9Qb3NSZWZEYWNTZWxlY3QgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9OZWdSZWZEYWNTZWxlY3QgICAgICAgICAgICAgMHgwMDAwCisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhcWJvYXJkMjAwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXFib2FyZDIwMDAiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhcWJvYXJkMjAwMF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFxYm9hcmQyMDAwX2RldGFjaCwKK307CisKK3N0cnVjdCBkYXEyMDBfYm9hcmR0eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBpZDsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGRhcTIwMF9ib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworCXsiaWRzMiIsIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTMn0sCisJeyJpZHM0IiwgREFRQk9BUkQyMDAwX1NVQlNZU1RFTV9JRFM0fSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBkYXEyMDBfYm9hcmR0eXBlKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBkYXEyMDBfYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkYXFib2FyZDIwMDBfcGNpX3RhYmxlKSA9IHsKKwl7MHgxNjE2LCAweDA0MDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRhcWJvYXJkMjAwMF9wY2lfdGFibGUpOworCitzdHJ1Y3QgZGFxYm9hcmQyMDAwX3ByaXZhdGUgeworCWVudW0geworCQljYXJkX2RhcWJvYXJkXzIwMDAKKwl9IGNhcmQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdm9pZCAqZGFxOworCXZvaWQgKnBseDsKKwlpbnQgZ290X3JlZ2lvbnM7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhcWJvYXJkMjAwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgdm9pZCB3cml0ZUFjcVNjYW5MaXN0RW50cnkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHUxNiBlbnRyeSkKK3sKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCisvLyAgY29tZWRpX3VkZWxheSg0KTsKKwlmcGdhLT5hY3FTY2FuTGlzdEZJRk8gPSBlbnRyeSAmIDB4MDBmZjsKKy8vICBjb21lZGlfdWRlbGF5KDQpOworCWZwZ2EtPmFjcVNjYW5MaXN0RklGTyA9IChlbnRyeSA+PiA4KSAmIDB4MDBmZjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc2FtcGxpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuLCBpbnQgZ2FpbikKK3sKKwl1MTYgd29yZDAsIHdvcmQxLCB3b3JkMiwgd29yZDM7CisKKwkvKiBDaGFubmVsIDAtNyBkaWZmLCBjaGFubmVsIDgtMjMgc2luZ2xlIGVuZGVkICovCisJd29yZDAgPSAwOworCXdvcmQxID0gMHgwMDA0OwkJLyogTGFzdCBzY2FuICovCisJd29yZDIgPSAoY2hhbiA8PCA2KSAmIDB4MDBjMDsKKwlzd2l0Y2ggKGNoYW4gLyA0KSB7CisJY2FzZSAwOgorCQl3b3JkMyA9IDB4MDAwMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3b3JkMyA9IDB4MDAwMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkMyA9IDB4MDAwNTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl3b3JkMyA9IDB4MDAwNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl3b3JkMyA9IDB4MDA0MTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQl3b3JkMyA9IDB4MDA0MjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd29yZDMgPSAwOworCQlicmVhazsKKwl9CisvKgorICBkZXYtPmVlcHJvbS5jb3JyZWN0aW9uREFDU0VbaV1bal1ba10ub2Zmc2V0ID0gMHg4MDA7CisgIGRldi0+ZWVwcm9tLmNvcnJlY3Rpb25EQUNTRVtpXVtqXVtrXS5nYWluID0gMHhjMDA7CisqLworCS8qIFRoZXNlIHNob3VsZCBiZSByZWFkIGZyb20gRUVQUk9NICovCisJd29yZDIgfD0gMHgwODAwOworCXdvcmQzIHw9IDB4YzAwMDsKKy8qICBwcmludGsoIiVkICU0LjR4ICU0LjR4ICU0LjR4ICU0LjR4XG4iLCBjaGFuLCB3b3JkMCwgd29yZDEsIHdvcmQyLCB3b3JkMyk7Ki8KKwl3cml0ZUFjcVNjYW5MaXN0RW50cnkoZGV2LCB3b3JkMCk7CisJd3JpdGVBY3FTY2FuTGlzdEVudHJ5KGRldiwgd29yZDEpOworCXdyaXRlQWNxU2Nhbkxpc3RFbnRyeShkZXYsIHdvcmQyKTsKKwl3cml0ZUFjcVNjYW5MaXN0RW50cnkoZGV2LCB3b3JkMyk7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IGRhcWJvYXJkMjAwMF9odyAqZnBnYSA9IGRldnByaXYtPmRhcTsKKwlpbnQgZ2FpbiwgY2hhbiwgdGltZW91dDsKKworCWZwZ2EtPmFjcUNvbnRyb2wgPQorCQlEQVFCT0FSRDIwMDBfQWNxUmVzZXRTY2FuTGlzdEZpZm8gfAorCQlEQVFCT0FSRDIwMDBfQWNxUmVzZXRSZXN1bHRzRmlmbyB8CisJCURBUUJPQVJEMjAwMF9BY3FSZXNldENvbmZpZ1BpcGU7CisKKwkvKiBJZiBwYWNlciBjbG9jayBpcyBub3Qgc2V0IHRvIHNvbWUgaGlnaCB2YWx1ZSAoPiAxMCB1cyksIHdlCisJICAgcmlzayBtdWx0aXBsZSBzYW1wbGVzIHRvIGJlIHB1dCBpbnRvIHRoZSByZXN1bHQgRklGTy4gKi8KKwlmcGdhLT5hY3FQYWNlckNsb2NrRGl2TG93ID0gMTAwMDAwMDsJLyogMSBzZWNvbmQsIHNob3VsZCBiZSBsb25nIGVub3VnaCAqLworCWZwZ2EtPmFjcVBhY2VyQ2xvY2tEaXZIaWdoID0gMDsKKworCWdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogVGhpcyBkb2Vzbid0IGxvb2sgZWZmaWNpZW50LiAgSSBkZWNpZGVkIHRvIHRha2UgdGhlIGNvbnNlcnZhdGl2ZQorCSAqIGFwcHJvYWNoIHdoZW4gSSBkaWQgdGhlIGluc24gY29udmVyc2lvbi4gIFBlcmhhcHMgaXQgd291bGQgYmUKKwkgKiBiZXR0ZXIgdG8gaGF2ZSBicm9rZW4gaXQgY29tcGxldGVseSwgdGhlbiBzb21lb25lIHdvdWxkIGhhdmUgYmVlbgorCSAqIGZvcmNlZCB0byBmaXggaXQuICAtLWRzICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlzZXR1cF9zYW1wbGluZyhkZXYsIGNoYW4sIGdhaW4pOworCQkvKiBFbmFibGUgcmVhZGluZyBmcm9tIHRoZSBzY2FubGlzdCBGSUZPICovCisJCWZwZ2EtPmFjcUNvbnRyb2wgPSBEQVFCT0FSRDIwMDBfU2VxU3RhcnRTY2FuTGlzdDsKKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmIChmcGdhLT5hY3FDb250cm9sICYgREFRQk9BUkQyMDAwX0FjcUNvbmZpZ1BpcGVGdWxsKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvL2NvbWVkaV91ZGVsYXkoMik7CisJCX0KKwkJZnBnYS0+YWNxQ29udHJvbCA9IERBUUJPQVJEMjAwMF9BZGNQYWNlckVuYWJsZTsKKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmIChmcGdhLT5hY3FDb250cm9sICYgREFRQk9BUkQyMDAwX0FjcUxvZ2ljU2Nhbm5pbmcpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8vY29tZWRpX3VkZWxheSgyKTsKKwkJfQorCQlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMjA7IHRpbWVvdXQrKykgeworCQkJaWYgKGZwZ2EtPgorCQkJCWFjcUNvbnRyb2wgJgorCQkJCURBUUJPQVJEMjAwMF9BY3FSZXN1bHRzRklGT0hhc1ZhbGlkRGF0YSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJLy9jb21lZGlfdWRlbGF5KDIpOworCQl9CisJCWRhdGFbaV0gPSBmcGdhLT5hY3FSZXN1bHRzRklGTzsKKwkJZnBnYS0+YWNxQ29udHJvbCA9IERBUUJPQVJEMjAwMF9BZGNQYWNlckRpc2FibGU7CisJCWZwZ2EtPmFjcUNvbnRyb2wgPSBEQVFCT0FSRDIwMDBfU2VxU3RvcFNjYW5MaXN0OworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCWludCB0aW1lb3V0OworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKgorCQkgKiBPSywgc2luY2UgaXQgd29ya3MgT0sgd2l0aG91dCBlbmFibGluZyB0aGUgREFDJ3MsIGxldCdzIGtlZXAKKwkJICogaXQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLi4uCisJCSAqLworCQkvL2ZwZ2EtPmRhY0NvbnRyb2wgPSAoY2hhbiArIDIpICogMHgwMDEwIHwgMHgwMDAxOyBjb21lZGlfdWRlbGF5KDEwMDApOworCQlmcGdhLT5kYWNTZXR0aW5nW2NoYW5dID0gZGF0YVtpXTsKKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmICgoZnBnYS0+ZGFjQ29udHJvbCAmICgoY2hhbiArIDEpICogMHgwMDEwKSkgPT0gMCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJLy9jb21lZGlfdWRlbGF5KDIpOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwkJLyoKKwkJICogU2luY2Ugd2UgbmV2ZXIgZW5hYmxlZCB0aGUgREFDJ3MsIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBpdC4uLgorCQkgKiBmcGdhLT5kYWNDb250cm9sID0gKGNoYW4gKyAyKSAqIDB4MDAxMCB8IDB4MDAwMDsgY29tZWRpX3VkZWxheSgxMDAwKTsKKwkJICovCisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9yZXNldExvY2FsQnVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiZGFxYm9hcmQyMDAwX3Jlc2V0TG9jYWxCdXNcbiIpOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUkxvY2FsQnVzSGksIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUkxvY2FsQnVzTG8sIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfcmVsb2FkUExYKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiZGFxYm9hcmQyMDAwX3JlbG9hZFBMWFxuIik7CisJd3JpdGVsKERBUUJPQVJEMjAwMF9TRUNSUmVsb2FkTG8sIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUlJlbG9hZEhpLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsKKwl3cml0ZWwoREFRQk9BUkQyMDAwX1NFQ1JSZWxvYWRMbywgZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJY29tZWRpX3VkZWxheSgxMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9wdWxzZVByb2dQaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJkYXFib2FyZDIwMDBfcHVsc2VQcm9nUGluIDFcbiIpOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUlByb2dQaW5IaSwgZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJY29tZWRpX3VkZWxheSgxMDAwMCk7CisJd3JpdGVsKERBUUJPQVJEMjAwMF9TRUNSUHJvZ1BpbkxvLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsJLyogTm90IGluIHRoZSBvcmlnaW5hbCBjb2RlLCBidXQgSSBsaWtlIHN5bW1ldHJ5Li4uICovCit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX3BvbGxDUExEKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbWFzaykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaTsKKwlpbnQgY3BsZDsKKworCS8qIHRpbWVvdXQgYWZ0ZXIgNTAgdHJpZXMgLT4gNW1zICovCisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKKwkJY3BsZCA9IHJlYWR3KGRldnByaXYtPmRhcSArIDB4MTAwMCk7CisJCWlmICgoY3BsZCAmIG1hc2spID09IG1hc2spIHsKKwkJCXJlc3VsdCA9IDE7CisJCQlicmVhazsKKwkJfQorCQljb21lZGlfdWRlbGF5KDEwMCk7CisJfQorCWNvbWVkaV91ZGVsYXkoNSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfd3JpdGVDUExEKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZGF0YSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWNvbWVkaV91ZGVsYXkoMTApOworCXdyaXRldyhkYXRhLCBkZXZwcml2LT5kYXEgKyAweDEwMDApOworCWlmICgocmVhZHcoZGV2cHJpdi0+ZGFxICsgMHgxMDAwKSAmIERBUUJPQVJEMjAwMF9DUExEX0lOSVQpID09CisJCURBUUJPQVJEMjAwMF9DUExEX0lOSVQpIHsKKwkJcmVzdWx0ID0gMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpbml0aWFsaXplX2RhcWJvYXJkMjAwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBjaGFyICpjcGxkX2FycmF5LCBpbnQgbGVuKQoreworCWludCByZXN1bHQgPSAtRUlPOworCS8qIFJlYWQgdGhlIHNlcmlhbCBFRVBST00gY29udHJvbCByZWdpc3RlciAqLworCWludCBzZWNyOworCWludCByZXRyeTsKKwlpbnQgaTsKKworCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc2VyaWFsIGVlcHJvbSBpcyBwcmVzZW50IG9uIHRoZSBib2FyZCAqLworCXNlY3IgPSByZWFkbChkZXZwcml2LT5wbHggKyAweDZjKTsKKwlpZiAoIShzZWNyICYgREFRQk9BUkQyMDAwX0VFUFJPTV9QUkVTRU5UKSkgeworI2lmZGVmIERFQlVHX0VFUFJPTQorCQlwcmludGsoIm5vIHNlcmlhbCBlZXByb21cbiIpOworI2VuZGlmCisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDM7IHJldHJ5KyspIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJcHJpbnRrKCJQcm9ncmFtbWluZyBFRVBST00gdHJ5ICV4XG4iLCByZXRyeSk7CisjZW5kaWYKKworCQlkYXFib2FyZDIwMDBfcmVzZXRMb2NhbEJ1cyhkZXYpOworCQlkYXFib2FyZDIwMDBfcmVsb2FkUExYKGRldik7CisJCWRhcWJvYXJkMjAwMF9wdWxzZVByb2dQaW4oZGV2KTsKKwkJaWYgKGRhcWJvYXJkMjAwMF9wb2xsQ1BMRChkZXYsIERBUUJPQVJEMjAwMF9DUExEX0lOSVQpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCQlpZiAoY3BsZF9hcnJheVtpXSA9PSAweGZmCisJCQkJCSYmIGNwbGRfYXJyYXlbaSArIDFdID09IDB4MjApIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJCQkJcHJpbnRrKCJQcmVhbWJsZSBmb3VuZCBhdCAlZFxuIiwgaSk7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZm9yICg7IGkgPCBsZW47IGkgKz0gMikgeworCQkJCWludCBkYXRhID0KKwkJCQkJKGNwbGRfYXJyYXlbaV0gPDwgOCkgKyBjcGxkX2FycmF5W2kgKworCQkJCQkxXTsKKwkJCQlpZiAoIWRhcWJvYXJkMjAwMF93cml0ZUNQTEQoZGV2LCBkYXRhKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA+PSBsZW4pIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJCQlwcmludGsoIlByb2dyYW1tZWRcbiIpOworI2VuZGlmCisJCQkJZGFxYm9hcmQyMDAwX3Jlc2V0TG9jYWxCdXMoZGV2KTsKKwkJCQlkYXFib2FyZDIwMDBfcmVsb2FkUExYKGRldik7CisJCQkJcmVzdWx0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfYWRjU3RvcERtYVRyYW5zZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworLyogIHByaW50aygiSW1wbGVtZW50OiBkYXFib2FyZDIwMDBfYWRjU3RvcERtYVRyYW5zZmVyXG4iKTsqLworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfYWRjRGlzYXJtKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBkYXFib2FyZDIwMDBfaHcgKmZwZ2EgPSBkZXZwcml2LT5kYXE7CisKKwkvKiBEaXNhYmxlIGhhcmR3YXJlIHRyaWdnZXJzICovCisJY29tZWRpX3VkZWxheSgyKTsKKwlmcGdhLT50cmlnQ29udHJvbCA9IERBUUJPQVJEMjAwMF9UcmlnQW5hbG9nIHwgREFRQk9BUkQyMDAwX1RyaWdEaXNhYmxlOworCWNvbWVkaV91ZGVsYXkoMik7CisJZnBnYS0+dHJpZ0NvbnRyb2wgPSBEQVFCT0FSRDIwMDBfVHJpZ1RUTCB8IERBUUJPQVJEMjAwMF9UcmlnRGlzYWJsZTsKKworCS8qIFN0b3AgdGhlIHNjYW4gbGlzdCBGSUZPIGZyb20gbG9hZGluZyB0aGUgY29uZmlndXJhdGlvbiBwaXBlICovCisJY29tZWRpX3VkZWxheSgyKTsKKwlmcGdhLT5hY3FDb250cm9sID0gREFRQk9BUkQyMDAwX1NlcVN0b3BTY2FuTGlzdDsKKworCS8qIFN0b3AgdGhlIHBhY2VyIGNsb2NrICovCisJY29tZWRpX3VkZWxheSgyKTsKKwlmcGdhLT5hY3FDb250cm9sID0gREFRQk9BUkQyMDAwX0FkY1BhY2VyRGlzYWJsZTsKKworCS8qIFN0b3AgdGhlIGlucHV0IGRtYSAoYWJvcnQgY2hhbm5lbCAxKSAqLworCWRhcWJvYXJkMjAwMF9hZGNTdG9wRG1hVHJhbnNmZXIoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2FjdGl2YXRlUmVmZXJlbmNlRGFjcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCWludCB0aW1lb3V0OworCisJLy8gU2V0IHRoZSArIHJlZmVyZW5jZSBkYWMgdmFsdWUgaW4gdGhlIEZQR0EKKwlmcGdhLT5yZWZEYWNzID0gMHg4MCB8IERBUUJPQVJEMjAwMF9Qb3NSZWZEYWNTZWxlY3Q7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJaWYgKChmcGdhLT5kYWNDb250cm9sICYgREFRQk9BUkQyMDAwX1JlZkJ1c3kpID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJCWNvbWVkaV91ZGVsYXkoMik7CisJfQorLyogIHByaW50aygiREFRQk9BUkQyMDAwX1Bvc1JlZkRhY1NlbGVjdCAlZFxuIiwgdGltZW91dCk7Ki8KKworCS8vIFNldCB0aGUgLSByZWZlcmVuY2UgZGFjIHZhbHVlIGluIHRoZSBGUEdBCisJZnBnYS0+cmVmRGFjcyA9IDB4ODAgfCBEQVFCT0FSRDIwMDBfTmVnUmVmRGFjU2VsZWN0OworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAyMDsgdGltZW91dCsrKSB7CisJCWlmICgoZnBnYS0+ZGFjQ29udHJvbCAmIERBUUJPQVJEMjAwMF9SZWZCdXN5KSA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQljb21lZGlfdWRlbGF5KDIpOworCX0KKy8qICBwcmludGsoIkRBUUJPQVJEMjAwMF9OZWdSZWZEYWNTZWxlY3QgJWRcbiIsIHRpbWVvdXQpOyovCit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9pbml0aWFsaXplQ3RycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qICBwcmludGsoIkltcGxlbWVudDogZGFxYm9hcmQyMDAwX2luaXRpYWxpemVDdHJzXG4iKTsqLworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZVRtcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvKiAgcHJpbnRrKCJJbXBsZW1lbnQ6IGRhcWJvYXJkMjAwMF9pbml0aWFsaXplVG1yc1xuIik7Ki8KK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2RhY0Rpc2FybShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qICBwcmludGsoIkltcGxlbWVudDogZGFxYm9hcmQyMDAwX2RhY0Rpc2FybVxuIik7Ki8KK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2luaXRpYWxpemVBZGMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGFxYm9hcmQyMDAwX2FkY0Rpc2FybShkZXYpOworCWRhcWJvYXJkMjAwMF9hY3RpdmF0ZVJlZmVyZW5jZURhY3MoZGV2KTsKKwlkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZUN0cnMoZGV2KTsKKwlkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZVRtcnMoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2luaXRpYWxpemVEYWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGFxYm9hcmQyMDAwX2RhY0Rpc2FybShkZXYpOworfQorCisvKgorVGhlIHRlc3QgY29tbWFuZCwgUkVNT1ZFISE6CisKK3JtbW9kIGRhcWJvYXJkMjAwMCA7IHJtbW9kIGNvbWVkaTsgbWFrZSBpbnN0YWxsIDsgbW9kcHJvYmUgZGFxYm9hcmQyMDAwOyAvdXNyL3NiaW4vY29tZWRpX2NvbmZpZyAvZGV2L2NvbWVkaTAgZGFxYm9hcmQvMjAwMCA7IHRhaWwgLTQwIC92YXIvbG9nL21lc3NhZ2VzCisqLworCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwKKwl1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpZiAoZGlyKSB7CisJCXdyaXRldyhkYXRhLCAoKHZvaWQgKilpb2FkZHIpICsgcG9ydCAqIDIpOworCQlyZXN1bHQgPSAwOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IHJlYWR3KCgodm9pZCAqKWlvYWRkcikgKyBwb3J0ICogMik7CisJfQorLyoKKyAgcHJpbnRrKCJkYXFib2FyZDIwMDBfODI1NV9jYiAleCAlZCAlZCAlMi4yeCAtPiAlMi4yeFxuIiwKKyAgICAgICAgYXJnLCBkaXIsIHBvcnQsIGRhdGEsIHJlc3VsdCk7CisqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgcGNpX2RldiAqY2FyZCA9IE5VTEw7CisJdm9pZCAqYXV4X2RhdGE7CisJdW5zaWduZWQgaW50IGF1eF9sZW47CisJaW50IGJ1cywgc2xvdDsKKworCXByaW50aygiY29tZWRpJWQ6IGRhcWJvYXJkMjAwMDoiLCBkZXYtPm1pbm9yKTsKKworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCXJlc3VsdCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhcWJvYXJkMjAwMF9wcml2YXRlKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAoY2FyZCA9IHBjaV9nZXRfZGV2aWNlKDB4MTYxNiwgMHgwNDA5LCBOVUxMKTsKKwkJY2FyZCAhPSBOVUxMOworCQljYXJkID0gcGNpX2dldF9kZXZpY2UoMHgxNjE2LCAweDA0MDksIGNhcmQpKSB7CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCWlmIChjYXJkLT5idXMtPm51bWJlciAhPSBidXMgfHwKKwkJCQlQQ0lfU0xPVChjYXJkLT5kZXZmbikgIT0gc2xvdCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWJyZWFrOyAgLyogZm91bmQgb25lICovCisJfQorCWlmICghY2FyZCkgeworCQlpZiAoYnVzIHx8IHNsb3QpCisJCQlwcmludGsoIiBubyBkYXFib2FyZDIwMDAgZm91bmQgYXQgYnVzL3Nsb3Q6ICVkLyVkXG4iLAorCQkJCWJ1cywgc2xvdCk7CisJCWVsc2UKKwkJCXByaW50aygiIG5vIGRhcWJvYXJkMjAwMCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCXUzMiBpZDsKKwkJaW50IGk7CisJCWRldnByaXYtPnBjaV9kZXYgPSBjYXJkOworCQlpZCA9ICgodTMyKSBjYXJkLT5zdWJzeXN0ZW1fZGV2aWNlIDw8IDE2KSB8IGNhcmQtPgorCQkJc3Vic3lzdGVtX3ZlbmRvcjsKKwkJZm9yIChpID0gMDsgaSA8IG5fYm9hcmR0eXBlczsgaSsrKSB7CisJCQlpZiAoYm9hcmR0eXBlc1tpXS5pZCA9PSBpZCkgeworCQkJCXByaW50aygiICVzIiwgYm9hcmR0eXBlc1tpXS5uYW1lKTsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXMgKyBpOworCQkJfQorCQl9CisJCWlmICghZGV2LT5ib2FyZF9wdHIpIHsKKwkJCXByaW50aygiIHVua25vd24gc3Vic3lzdGVtIGlkICUwOHggKHByZXRlbmQgaXQgaXMgYW4gaWRzMikiLCBpZCk7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXM7CisJCX0KKwl9CisKKwlpZiAoKHJlc3VsdCA9IGNvbWVkaV9wY2lfZW5hYmxlKGNhcmQsICJkYXFib2FyZDIwMDAiKSkgPCAwKSB7CisJCXByaW50aygiIGZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldnByaXYtPmdvdF9yZWdpb25zID0gMTsKKwlkZXZwcml2LT5wbHggPQorCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwgREFRQk9BUkQyMDAwX1BMWF9TSVpFKTsKKwlkZXZwcml2LT5kYXEgPQorCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAyKSwgREFRQk9BUkQyMDAwX0RBUV9TSVpFKTsKKwlpZiAoIWRldnByaXYtPnBseCB8fCAhZGV2cHJpdi0+ZGFxKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZWFkbChkZXZwcml2LT5wbHggKyAweDZjKTsKKworCS8qCisJICAgdTggaW50ZXJydXB0OworCSAgIFdpbmRvd3MgY29kZSBkb2VzIHJlc3RvcmUgaW50ZXJydXB0cywgYnV0IHNpbmNlIHdlIGRvbid0IHVzZSB0aGVtLi4uCisJICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoY2FyZCwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaW50ZXJydXB0KTsKKwkgICBwcmludGsoIkludGVycnVwdCBiZWZvcmUgaXM6ICV4XG4iLCBpbnRlcnJ1cHQpOworCSAqLworCisJYXV4X2RhdGEgPSBjb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApOworCWF1eF9sZW4gPSBpdC0+b3B0aW9uc1tDT01FRElfREVWQ09ORl9BVVhfREFUQV9MRU5HVEhdOworCisJaWYgKGF1eF9kYXRhICYmIGF1eF9sZW4pIHsKKwkJcmVzdWx0ID0gaW5pdGlhbGl6ZV9kYXFib2FyZDIwMDAoZGV2LCBhdXhfZGF0YSwgYXV4X2xlbik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJubyBGUEdBIGluaXRpYWxpemF0aW9uIGNvZGUsIGFib3J0aW5nXG4iKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0OworCWRhcWJvYXJkMjAwMF9pbml0aWFsaXplQWRjKGRldik7CisJZGFxYm9hcmQyMDAwX2luaXRpYWxpemVEYWMoZGV2KTsKKwkvKgorCSAgIFdpbmRvd3MgY29kZSBkb2VzIHJlc3RvcmUgaW50ZXJydXB0cywgYnV0IHNpbmNlIHdlIGRvbid0IHVzZSB0aGVtLi4uCisJICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoY2FyZCwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaW50ZXJydXB0KTsKKwkgICBwcmludGsoIkludGVycnVwdCBhZnRlciBpczogJXhcbiIsIGludGVycnVwdCk7CisJICovCisKKwlkZXYtPmlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPmRhcTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAyNDsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPmluc25fcmVhZCA9IGRhcWJvYXJkMjAwMF9haV9pbnNuX3JlYWQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGFxYm9hcmQyMDAwX2FpOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+aW5zbl9yZWFkID0gZGFxYm9hcmQyMDAwX2FvX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gZGFxYm9hcmQyMDAwX2FvX2luc25fd3JpdGU7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGFxYm9hcmQyMDAwX2FvOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcmVzdWx0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGRhcWJvYXJkMjAwMF84MjU1X2NiLAorCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyAweDQwKSk7CisKKwlwcmludGsoIlxuIik7CisgICAgICBvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhcWJvYXJkMjAwMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAyKTsKKworCWlmIChkZXYtPmlycSkgeworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPmRhcSkKKwkJCWlvdW5tYXAoZGV2cHJpdi0+ZGFxKTsKKwkJaWYgKGRldnByaXYtPnBseCkKKwkJCWlvdW5tYXAoZGV2cHJpdi0+cGx4KTsKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXZwcml2LT5nb3RfcmVnaW9ucykgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXFib2FyZDIwMDAsIGRhcWJvYXJkMjAwMF9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU2MzMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMKQEAgLTAsMCArMSwxMDY4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczA4LmMKKyAgICBEQVMwOCBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIsMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0IFNhbHZhZG9yIEUuIFRyb3BlYSA8c2V0QHVzZXJzLnNmLm5ldD4gPHNldEBpZWVlLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqLworLyoKK0RyaXZlcjogZGFzMDgKK0Rlc2NyaXB0aW9uOiBEQVMtMDggY29tcGF0aWJsZSBib2FyZHMKK0F1dGhvcjogV2FycmVuIEphc3BlciwgZHMsIEZyYW5rIEhlc3MKK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUzA4IChpc2EtZGFzMDgpLCBbQ29tcHV0ZXJCb2FyZHNdIERBUzA4IChpc2EtZGFzMDgpLAorICBEQVMwOC1QR00gKGRhczA4LXBnbSksCisgIERBUzA4LVBHSCAoZGFzMDgtcGdoKSwgREFTMDgtUEdMIChkYXMwOC1wZ2wpLCBEQVMwOC1BT0ggKGRhczA4LWFvaCksCisgIERBUzA4LUFPTCAoZGFzMDgtYW9sKSwgREFTMDgtQU9NIChkYXMwOC1hb20pLCBEQVMwOC9KUi1BTyAoZGFzMDgvanItYW8pLAorICBEQVMwOC9KUi0xNi1BTyAoZGFzMDhqci0xNi1hbyksIFBDSS1EQVMwOCAoZGFzMDgpLAorICBQQzEwNC1EQVMwOCAocGMxMDQtZGFzMDgpLCBEQVMwOC9KUi8xNiAoZGFzMDhqci8xNikKK1N0YXR1czogd29ya3MKKworVGhpcyBpcyBhIHJld3JpdGUgb2YgdGhlIGRhczA4IGFuZCBkYXMwOGpyIGRyaXZlcnMuCisKK09wdGlvbnMgKGZvciBJU0EgY2FyZHMpOgorICAgICAgICBbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKworT3B0aW9ucyAoZm9yIHBjaS1kYXMwOCk6CisgICAgICAgIFswXSAtIGJ1cyAgKG9wdGlvbmFsKQorICAgICAgICBbMV0gPSBzbG90IChvcHRpb25hbCkKKworVGhlIGRhczA4IGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYXN5bmNocm9ub3VzIGNvbW1hbmRzLCBzaW5jZQordGhlIGNoZWFwIGRhczA4IGhhcmR3YXJlIGRvZXNuJ3QgcmVhbGx5IHN1cHBvcnQgdGhlbS4gIFRoZQorY29tZWRpX3J0X3RpbWVyIGRyaXZlciBjYW4gYmUgdXNlZCB0byBlbXVsYXRlIGNvbW1hbmRzIGZvciB0aGlzCitkcml2ZXIuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJkYXMwOC5oIgorCisjZGVmaW5lIERSVl9OQU1FICJkYXMwOCIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTIDB4MTMwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSURBUzA4IDB4MjkKKyNkZWZpbmUgUENJREFTMDhfU0laRSAweDU0CisKKy8vIHBjaSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworI2RlZmluZSBJTlRDU1IgICAgICAgICAgICAgICAweDRjCisjZGVmaW5lICAgSU5UUjFfRU5BQkxFICAgICAgICAgMHgxCisjZGVmaW5lICAgSU5UUjFfSElHSF9QT0xBUklUWSAgMHgyCisjZGVmaW5lICAgUENJX0lOVFJfRU5BQkxFICAgICAgMHg0MAorI2RlZmluZSAgIElOVFIxX0VER0VfVFJJRyAgICAgIDB4MTAwCS8vIHJlcXVpcmVzIGhpZ2ggcG9sYXJpdHkKKyNkZWZpbmUgQ05UUkwgICAgICAgICAgICAgICAgMHg1MAorI2RlZmluZSAgIENOVFJMX0RJUiAgICAgICAgICAgIDB4MgorI2RlZmluZSAgIENOVFJMX0lOVFIgICAgICAgICAgIDB4NAorCisvKgorICAgIGNpby1kYXMwOC5wZGYKKworICAiaXNhLWRhczA4IgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCA4IGJpdAorICAxCWEvZCBiaXRzIDQtMTEJCXN0YXJ0IDEyIGJpdAorICAyCWVvYywgaXAxLTMsIGlycSwgbXV4CW9wMS00LCBpbnRlLCBtdXgKKyAgMwl1bnVzZWQJCQl1bnVzZWQKKyAgNDU2Nwk4MjU0CisgIDg5YWIJODI1NQorCisgIHJlcXVpcmVzIGhhcmQtd2lyaW5nIGZvciBhc3luYyBhaQorCisqLworCisjZGVmaW5lIERBUzA4X0xTQgkJMAorI2RlZmluZSBEQVMwOF9NU0IJCTEKKyNkZWZpbmUgREFTMDhfVFJJR18xMkJJVAkxCisjZGVmaW5lIERBUzA4X1NUQVRVUwkJMgorI2RlZmluZSAgIERBUzA4X0VPQwkJCSgxPDw3KQorI2RlZmluZSAgIERBUzA4X0lSUQkJCSgxPDwzKQorI2RlZmluZSAgIERBUzA4X0lQKHgpCQkJKCgoeCk+PjQpJjB4NykKKyNkZWZpbmUgREFTMDhfQ09OVFJPTAkJMgorI2RlZmluZSAgIERBUzA4X01VWF9NQVNLCTB4NworI2RlZmluZSAgIERBUzA4X01VWCh4KQkJKCh4KSAmIERBUzA4X01VWF9NQVNLKQorI2RlZmluZSAgIERBUzA4X0lOVEUJCQkoMTw8MykKKyNkZWZpbmUgICBEQVMwOF9ET19NQVNLCQkweGYwCisjZGVmaW5lICAgREFTMDhfT1AoeCkJCSgoKHgpIDw8IDQpICYgREFTMDhfRE9fTUFTSykKKworLyoKKyAgICBjaW8tZGFzMDhqci5wZGYKKworICAiZGFzMDgvanItYW8iCisKKyAgMAlhL2QgYml0cyAwLTMJCXVudXNlZAorICAxCWEvZCBiaXRzIDQtMTEJCXN0YXJ0IDEyIGJpdAorICAyCWVvYywgbXV4CQltdXgKKyAgMwlkaQkJCWRvCisgIDQJdW51c2VkCQkJYW8wX2xzYgorICA1CXVudXNlZAkJCWFvMF9tc2IKKyAgNgl1bnVzZWQJCQlhbzFfbHNiCisgIDcJdW51c2VkCQkJYW8xX21zYgorCisqLworCisjZGVmaW5lIERBUzA4SlJfRElPCQkzCisjZGVmaW5lIERBUzA4SlJfQU9fTFNCKHgpCSgoeCk/Njo0KQorI2RlZmluZSBEQVMwOEpSX0FPX01TQih4KQkoKHgpPzc6NSkKKworLyoKKyAgICBjaW8tZGFzMDhfYW94LnBkZgorCisgICJkYXMwOC1hb2giCisgICJkYXMwOC1hb2wiCisgICJkYXMwOC1hb20iCisKKyAgMAlhL2QgYml0cyAwLTMJCXN0YXJ0IDggYml0CisgIDEJYS9kIGJpdHMgNC0xMQkJc3RhcnQgMTIgYml0CisgIDIJZW9jLCBpcDEtMywgaXJxLCBtdXgJb3AxLTQsIGludGUsIG11eAorICAzCW11eCwgZ2FpbiBzdGF0dXMJZ2FpbiBjb250cm9sCisgIDQ1NjcJODI1NAorICA4CXVudXNlZAkJCWFvMF9sc2IKKyAgOQl1bnVzZWQJCQlhbzBfbXNiCisgIGEJdW51c2VkCQkJYW8xX2xzYgorICBiCXVudXNlZAkJCWFvMV9tc2IKKyAgODlhYgorICBjZGVmCTgyNTUKKyovCisKKyNkZWZpbmUgREFTMDhBT19HQUlOX0NPTlRST0wJMworI2RlZmluZSBEQVMwOEFPX0dBSU5fU1RBVFVTCTMKKworI2RlZmluZSBEQVMwOEFPX0FPX0xTQih4KQkoKHgpPzB4YTo4KQorI2RlZmluZSBEQVMwOEFPX0FPX01TQih4KQkoKHgpPzB4Yjo5KQorI2RlZmluZSBEQVMwOEFPX0FPX1VQREFURQk4CisKKy8qIGdhaW5saXN0IHNhbWUgYXMgX3BneF8gYmVsb3cgKi8KKworc3RhdGljIGludCBkYXMwOF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOGpyX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczA4anJfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMDhqcl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOGFvX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgdm9pZCBpODI1NF9zZXRfbW9kZV9sb3codW5zaWduZWQgaW50IGJhc2UsIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCBtb2RlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczA4X3BnbCA9IHsgOSwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMDhfcGdoID0geyAxMiwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMDhfcGdtID0geyA5LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMC4wMSkKKwl9Cit9OwkJCQkvKgorCQkJCSAgIGNpby1kYXMwOGpyLnBkZgorCisJCQkJICAgImRhczA4L2pyLWFvIgorCisJCQkJICAgMCBhL2QgYml0cyAwLTMgICAgICAgICAgICB1bnVzZWQKKwkJCQkgICAxIGEvZCBiaXRzIDQtMTEgICAgICAgICAgIHN0YXJ0IDEyIGJpdAorCQkJCSAgIDIgZW9jLCBtdXggICAgICAgICAgICAgICAgbXV4CisJCQkJICAgMyBkaSAgICAgICAgICAgICAgICAgICAgICBkbworCQkJCSAgIDQgdW51c2VkICAgICAgICAgICAgICAgICAgYW8wX2xzYgorCQkJCSAgIDUgdW51c2VkICAgICAgICAgICAgICAgICAgYW8wX21zYgorCQkJCSAgIDYgdW51c2VkICAgICAgICAgICAgICAgICAgYW8xX2xzYgorCQkJCSAgIDcgdW51c2VkICAgICAgICAgICAgICAgICAgYW8xX21zYgorCisJCQkJICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgZGFzMDhfYWlfbHJhbmdlc1tdID0geworCSZyYW5nZV91bmtub3duLAorCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfZGFzMDhfcGdoLAorCSZyYW5nZV9kYXMwOF9wZ2wsCisJJnJhbmdlX2RhczA4X3BnbSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZGFzMDhfcGdoX2dhaW5saXN0W10gPQorCXsgOCwgMCwgMTAsIDIsIDEyLCA0LCAxNCwgNiwgMSwgMywgNSwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMwOF9wZ2xfZ2Fpbmxpc3RbXSA9IHsgOCwgMCwgMiwgNCwgNiwgMSwgMywgNSwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMwOF9wZ21fZ2Fpbmxpc3RbXSA9IHsgOCwgMCwgMTAsIDEyLCAxNCwgOSwgMTEsIDEzLCAxNSB9OworCitzdGF0aWMgY29uc3QgaW50ICpjb25zdCBkYXMwOF9nYWlubGlzdHNbXSA9IHsKKwlOVUxMLAorCU5VTEwsCisJZGFzMDhfcGdoX2dhaW5saXN0LAorCWRhczA4X3BnbF9nYWlubGlzdCwKKwlkYXMwOF9wZ21fZ2Fpbmxpc3QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCBkYXMwOF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImlzYS1kYXMwOCIsCS8vIGNpby1kYXMwOC5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ19ub25lLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjgsCisJICAgICAgaTgyNTRfb2Zmc2V0OjQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ20iLAkvLyBjaW8tZGFzMDhwZ3gucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdtLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ2giLAkvLyBjaW8tZGFzMDhwZ3gucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdoLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ2wiLAkvLyBjaW8tZGFzMDhwZ3gucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdsLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1hb2giLAkvLyBjaW8tZGFzMDhfYW94LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnaCwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhhb19hb193aW5zbiwJLy8gOAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MGMsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1hb2wiLAkvLyBjaW8tZGFzMDhfYW94LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnbCwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhhb19hb193aW5zbiwJLy8gOAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MGMsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1hb20iLAkvLyBjaW8tZGFzMDhfYW94LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnbSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhhb19hb193aW5zbiwJLy8gOAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MGMsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC9qci1hbyIsCS8vIGNpby1kYXMwOC1qci1hby5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ19ub25lLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglkYXMwOGpyX2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOGpyX2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMDhqcl9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo4LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDowLAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDhqci0xNi1hbyIsCS8vIGNpby1kYXMwOGpyLTE2LWFvLnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfcGc6CWRhczA4X3BnX25vbmUsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CWRhczA4anJfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTYsCisJICAgICAgZGk6CWRhczA4anJfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOGpyX2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjgsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJImRhczA4IiwJLy8gcGNpLWRhczA4CisJICAgICAgaWQ6CVBDSV9ERVZJQ0VfSURfUENJREFTMDgsCisJICAgICAgYnVzdHlwZToJcGNpLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfYmlwb2xhcjUsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgYW9fbmJpdHM6MCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDo0LAorCSAgICAgIGlvc2l6ZToJOCwKKwkJfSwKKyNlbmRpZgorCXsKKwkgICAgICBuYW1lOgkicGMxMDQtZGFzMDgiLAorCSAgICAgIGJ1c3R5cGU6CXBjMTA0LAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdfbm9uZSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisjaWYgMAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgvZiIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOGpyIiwKKwkJfSwKKyNlbmRpZgorCXsKKwkgICAgICBuYW1lOgkiZGFzMDhqci8xNiIsCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdfbm9uZSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxNiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOGpyX2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMDhqcl9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo4LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDowLAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJImRhczQ4LXBnYSIsCS8vIGNpby1kYXM0OC1wZ2EucGRmCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ2EtZzIiLAkvLyBhIEtNIGJvYXJkCisJCX0sCisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDTUNJQQorc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCBkYXMwOF9jc19ib2FyZHNbTlVNX0RBUzA4X0NTX0JPQVJEU10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY20tZGFzMDgiLAorCSAgICAgIGlkOgkweDAsCS8vIFhYWAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X2JpcG9sYXI1LAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X3BjbV9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjAsCisJICAgICAgaW9zaXplOgkxNiwKKwkJfSwKKwkvLyBkdXBsaWNhdGUgc28gZHJpdmVyIG5hbWUgY2FuIGJlIHVzZWQgYWxzbworCXsKKwkgICAgICBuYW1lOgkiZGFzMDhfY3MiLAorCSAgICAgIGlkOgkweDAsCS8vIFhYWAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X2JpcG9sYXI1LAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X3BjbV9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjAsCisJICAgICAgaW9zaXplOgkxNiwKKwkJfSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZGFzMDhfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgUENJX0RFVklDRV9JRF9QQ0lEQVMwOCwgUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGFzMDhfcGNpX3RhYmxlKTsKKyNlbmRpZgorCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgKilkZXYtPmJvYXJkX3B0cikKKworI2RlZmluZSBUSU1FT1VUIDEwMDAwMAorCitzdGF0aWMgaW50IGRhczA4X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgY2hhbjsKKwlpbnQgcmFuZ2U7CisJaW50IGxzYiwgbXNiOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLyogY2xlYXIgY3JhcCAqLworCWluYihkZXYtPmlvYmFzZSArIERBUzA4X0xTQik7CisJaW5iKGRldi0+aW9iYXNlICsgREFTMDhfTVNCKTsKKworCS8qIHNldCBtdWx0aXBsZXhlciAqLworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CS8vIGxvY2sgdG8gcHJldmVudCByYWNlIHdpdGggZGlnaXRhbCBvdXRwdXQKKwlkZXZwcml2LT5kb19tdXhfYml0cyAmPSB+REFTMDhfTVVYX01BU0s7CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgfD0gREFTMDhfTVVYKGNoYW4pOworCW91dGIoZGV2cHJpdi0+ZG9fbXV4X2JpdHMsIGRldi0+aW9iYXNlICsgREFTMDhfQ09OVFJPTCk7CisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCisJaWYgKHMtPnJhbmdlX3RhYmxlLT5sZW5ndGggPiAxKSB7CisJCS8qIHNldCBnYWluL3JhbmdlICovCisJCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCQlvdXRiKGRldnByaXYtPnBnX2dhaW5saXN0W3JhbmdlXSwKKwkJCWRldi0+aW9iYXNlICsgREFTMDhBT19HQUlOX0NPTlRST0wpOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogY2xlYXIgb3Zlci1yYW5nZSBiaXRzIGZvciAxNi1iaXQgYm9hcmRzICovCisJCWlmICh0aGlzYm9hcmQtPmFpX25iaXRzID09IDE2KQorCQkJaWYgKGluYihkZXYtPmlvYmFzZSArIERBUzA4X01TQikgJiAweDgwKQorCQkJCXJ0X3ByaW50aygiZGFzMDg6IG92ZXItcmFuZ2VcbiIpOworCisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXRiX3AoMCwgZGV2LT5pb2Jhc2UgKyBEQVMwOF9UUklHXzEyQklUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOF9TVEFUVVMpICYgREFTMDhfRU9DKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBUSU1FT1VUKSB7CisJCQlydF9wcmludGsoImRhczA4OiB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJbXNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTMDhfTVNCKTsKKwkJbHNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTMDhfTFNCKTsKKwkJaWYgKHRoaXNib2FyZC0+YWlfZW5jb2RpbmcgPT0gZGFzMDhfZW5jb2RlMTIpIHsKKwkJCWRhdGFbbl0gPSAobHNiID4+IDQpIHwgKG1zYiA8PCA0KTsKKwkJfSBlbHNlIGlmICh0aGlzYm9hcmQtPmFpX2VuY29kaW5nID09IGRhczA4X3BjbV9lbmNvZGUxMikgeworCQkJZGF0YVtuXSA9IChtc2IgPDwgOCkgKyBsc2I7CisJCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5haV9lbmNvZGluZyA9PSBkYXMwOF9lbmNvZGUxNikgeworCQkJLyogRlBPUyAxNi1iaXQgYm9hcmRzIGFyZSBzaWduLW1hZ25pdHVkZSAqLworCQkJaWYgKG1zYiAmIDB4ODApCisJCQkJZGF0YVtuXSA9ICgxIDw8IDE1KSB8IGxzYiB8ICgobXNiICYgMHg3ZikgPDwgOCk7CisJCQllbHNlCisJCQkJZGF0YVtuXSA9ICgxIDw8IDE1KSAtIChsc2IgfCAobXNiICYgMHg3ZikgPDwgOCk7CisJCX0gZWxzZSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISB1bmtub3duIGFpIGVuY29kaW5nIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkYXMwOF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IERBUzA4X0lQKGluYihkZXYtPmlvYmFzZSArIERBUzA4X1NUQVRVUykpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCB3Yml0czsKKworCS8vIGdldCBjdXJyZW50IHNldHRpbmdzIG9mIGRpZ2l0YWwgb3V0cHV0IGxpbmVzCisJd2JpdHMgPSAoZGV2cHJpdi0+ZG9fbXV4X2JpdHMgPj4gNCkgJiAweGY7CisJLy8gbnVsbCBiaXRzIHdlIGFyZSBnb2luZyB0byBzZXQKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbmV3IGJpdCB2YWx1ZXMKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkvLyByZW1lbWJlciBkaWdpdGFsIG91dHB1dCBiaXRzCisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsJLy8gcHJldmVudCByYWNlIHdpdGggc2V0dGluZyBvZiBhbmFsb2cgaW5wdXQgbXV4CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgJj0gfkRBUzA4X0RPX01BU0s7CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgfD0gREFTMDhfT1Aod2JpdHMpOworCW91dGIoZGV2cHJpdi0+ZG9fbXV4X2JpdHMsIGRldi0+aW9iYXNlICsgREFTMDhfQ09OVFJPTCk7CisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCisJZGF0YVsxXSA9IHdiaXRzOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhqcl9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIERBUzA4SlJfRElPKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczA4anJfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCS8vIG51bGwgYml0cyB3ZSBhcmUgZ29pbmcgdG8gc2V0CisJZGV2cHJpdi0+ZG9fYml0cyAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbmV3IGJpdCB2YWx1ZXMKKwlkZXZwcml2LT5kb19iaXRzIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMwOEpSX0RJTyk7CisKKwlkYXRhWzFdID0gZGV2cHJpdi0+ZG9fYml0czsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczA4anJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBsc2IsIG1zYjsKKwlpbnQgY2hhbjsKKworCWxzYiA9IGRhdGFbMF0gJiAweGZmOworCW1zYiA9IChkYXRhWzBdID4+IDgpICYgMHhmOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworI2lmIDAKKwkJb3V0Yihsc2IsIGRldi0+aW9iYXNlICsgZGV2cHJpdi0+YW9fb2Zmc2V0X2xzYltjaGFuXSk7CisJCW91dGIobXNiLCBkZXYtPmlvYmFzZSArIGRldnByaXYtPmFvX29mZnNldF9tc2JbY2hhbl0pOworI2Vsc2UKKwkJb3V0Yihsc2IsIGRldi0+aW9iYXNlICsgREFTMDhKUl9BT19MU0IoY2hhbikpOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBEQVMwOEpSX0FPX01TQihjaGFuKSk7CisjZW5kaWYKKworCQkvKiBsb2FkIERBQ3MgKi8KKwkJaW5iKGRldi0+aW9iYXNlICsgREFTMDhKUl9ESU8pOworCX0KKworCXJldHVybiBuOworfQorCisvKgorICoKKyAqIFRoZSAtYW94IGJvYXJkcyBoYXZlIHRoZSBEQUNzIGF0IGEgZGlmZmVyZW50IG9mZnNldCBhbmQgdXNlCisgKiBhIGRpZmZlcmVudCBtZXRob2QgdG8gZm9yY2UgYW4gdXBkYXRlLgorICoKKyAqLworc3RhdGljIGludCBkYXMwOGFvX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgbHNiLCBtc2I7CisJaW50IGNoYW47CisKKwlsc2IgPSBkYXRhWzBdICYgMHhmZjsKKwltc2IgPSAoZGF0YVswXSA+PiA4KSAmIDB4ZjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKyNpZiAwCisJCW91dGIobHNiLCBkZXYtPmlvYmFzZSArIGRldnByaXYtPmFvX29mZnNldF9sc2JbY2hhbl0pOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBkZXZwcml2LT5hb19vZmZzZXRfbXNiW2NoYW5dKTsKKyNlbHNlCisJCW91dGIobHNiLCBkZXYtPmlvYmFzZSArIERBUzA4QU9fQU9fTFNCKGNoYW4pKTsKKwkJb3V0Yihtc2IsIGRldi0+aW9iYXNlICsgREFTMDhBT19BT19NU0IoY2hhbikpOworI2VuZGlmCisKKwkJLyogbG9hZCBEQUNzICovCisJCWluYihkZXYtPmlvYmFzZSArIERBUzA4QU9fQU9fVVBEQVRFKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpODI1NF9yZWFkX2NoYW5uZWxfbG93KHVuc2lnbmVkIGludCBiYXNlLCBpbnQgY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgbXNiLCBsc2I7CisKKwkvKiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBtdXN0IGJlIGluIG9yZGVyLgorCSAgIFdlIG11c3QgYXZvaWQgb3RoZXIgcHJvY2VzcyByZWFkaW5nIHRoZSBjb3VudGVyJ3MgdmFsdWUgaW4gdGhlCisJICAgbWlkZGxlLgorCSAgIFRoZSBzcGluX2xvY2sgaXNuJ3QgbmVlZGVkIHNpbmNlIGlvY3RsIGNhbGxzIGdyYWIgdGhlIGJpZyBrZXJuZWwKKwkgICBsb2NrIGF1dG9tYXRpY2FsbHkgKi8KKwkvKnNwaW5fbG9jayhzcCk7ICovCisJb3V0YihjaGFuIDw8IDYsIGJhc2UgKyBJODI1NF9DVFJMKTsKKwliYXNlICs9IGNoYW47CisJbHNiID0gaW5iKGJhc2UpOworCW1zYiA9IGluYihiYXNlKTsKKwkvKnNwaW5fdW5sb2NrKHNwKTsgKi8KKworCXJldHVybiBsc2IgfCAobXNiIDw8IDgpOworfQorCitzdGF0aWMgdm9pZCBpODI1NF93cml0ZV9jaGFubmVsX2xvdyh1bnNpZ25lZCBpbnQgYmFzZSwgaW50IGNoYW4sCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBtc2IsIGxzYjsKKworCWxzYiA9IHZhbHVlICYgMHhGRjsKKwltc2IgPSB2YWx1ZSA+PiA4OworCisJLyogd3JpdGUgbHNiLCB0aGVuIG1zYiAqLworCWJhc2UgKz0gY2hhbjsKKwkvKiBTZWUgY29tbWVudHMgaW4gaTgyNTRfcmVhZF9jaGFubmVsX2xvdyAqLworCS8qc3Bpbl9sb2NrKHNwKTsgKi8KKwlvdXRiKGxzYiwgYmFzZSk7CisJb3V0Yihtc2IsIGJhc2UpOworCS8qc3Bpbl91bmxvY2soc3ApOyAqLworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGk4MjU0X3JlYWRfY2hhbm5lbChzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCXJldHVybiBpODI1NF9yZWFkX2NoYW5uZWxfbG93KHN0LT5pb2Jhc2UsIGNoYW4pOworfQorCitzdGF0aWMgdm9pZCBpODI1NF93cml0ZV9jaGFubmVsKHN0cnVjdCBpODI1NF9zdHJ1Y3QgKnN0LCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCWk4MjU0X3dyaXRlX2NoYW5uZWxfbG93KHN0LT5pb2Jhc2UsIGNoYW4sIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTRfaW5pdGlhbGl6ZShzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorCQlpODI1NF9zZXRfbW9kZV9sb3coc3QtPmlvYmFzZSwgaSwgc3QtPm1vZGVbaV0pOworfQorCitzdGF0aWMgdm9pZCBpODI1NF9zZXRfbW9kZV9sb3codW5zaWduZWQgaW50IGJhc2UsIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCBtb2RlKQoreworCW91dGIoKGNoYW5uZWwgPDwgNikgfCAweDMwIHwgKG1vZGUgJiAweDBGKSwgYmFzZSArIEk4MjU0X0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBpODI1NF9zZXRfbW9kZShzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IG1vZGUpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCXN0LT5tb2RlW2NoYW5dID0gbW9kZTsKKwlyZXR1cm4gaTgyNTRfc2V0X21vZGVfbG93KHN0LT5pb2Jhc2UsIGNoYW4sIG1vZGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGk4MjU0X3JlYWRfc3RhdHVzX2xvdyh1bnNpZ25lZCBpbnQgYmFzZSwgaW50IGNoYW5uZWwpCit7CisJb3V0YigweEUwIHwgKDIgPDwgY2hhbm5lbCksIGJhc2UgKyBJODI1NF9DVFJMKTsKKwlyZXR1cm4gaW5iKGJhc2UgKyBjaGFubmVsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpODI1NF9yZWFkX3N0YXR1cyhzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCXJldHVybiBpODI1NF9yZWFkX3N0YXR1c19sb3coc3QtPmlvYmFzZSwgY2hhbik7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfY291bnRlcl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IGluc24tPmNoYW5zcGVjOworCisJLy9wcmludGsoIlJlYWRpbmcgY291bnRlciBjaGFubmVsICVkICIsY2hhbik7CisJZGF0YVswXSA9IGk4MjU0X3JlYWRfY2hhbm5lbCgmZGV2cHJpdi0+aTgyNTQsIGNoYW4pOworCS8vcHJpbnRrKCI9PiAweCUwOFhcbiIsZGF0YVswXSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkYXMwOF9jb3VudGVyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IGluc24tPmNoYW5zcGVjOworCisJLy9wcmludGsoIldyaXRpbmcgY291bnRlciBjaGFubmVsICVkIHdpdGggMHglMDRYXG4iLGNoYW4sZGF0YVswXSk7CisJaTgyNTRfd3JpdGVfY2hhbm5lbCgmZGV2cHJpdi0+aTgyNTQsIGNoYW4sIGRhdGFbMF0pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfY291bnRlcl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gaW5zbi0+Y2hhbnNwZWM7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERToKKwkJaTgyNTRfc2V0X21vZGUoJmRldnByaXYtPmk4MjU0LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR184MjU0X1JFQURfU1RBVFVTOgorCQlkYXRhWzFdID0gaTgyNTRfcmVhZF9zdGF0dXMoJmRldnByaXYtPmk4MjU0LCBjaGFuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMwOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczA4ID0geworICAgICAgZHJpdmVyX25hbWU6IERSVl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczA4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMwOF9jb21tb25fZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomZGFzMDhfYm9hcmRzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRhczA4X2JvYXJkcykgLworCQlzaXplb2Yoc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCksCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QpLAorfTsKKworaW50IGRhczA4X2NvbW1vbl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQ7CisKKwkvLyBhbGxvY2F0ZSBpb3BvcnRzIGZvciBub24tcGNtY2lhLCBub24tcGNpIGJvYXJkcworCWlmICgodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYSkgJiYgKHRoaXNib2FyZC0+YnVzdHlwZSAhPSBwY2kpKSB7CisJCXByaW50aygiIGlvYmFzZSAweCVseFxuIiwgaW9iYXNlKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNib2FyZC0+aW9zaXplLCBEUlZfTkFNRSkpIHsKKwkJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFpICovCisJaWYgKHRoaXNib2FyZC0+YWkpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCQkvKiBYWFggc29tZSBib2FyZHMgYWN0dWFsbHkgaGF2ZSBkaWZmZXJlbnRpYWwgaW5wdXRzIGluc3RlYWQgb2Ygc2luZ2xlIGVuZGVkLgorCQkgKiAgVGhlIGRyaXZlciBkb2VzIG5vdGhpbmcgd2l0aCBhcmVmcyB0aG91Z2gsIHNvIGl0J3Mgbm8gYmlnIGRlYWwuICovCisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IDg7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX25iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gZGFzMDhfYWlfbHJhbmdlc1t0aGlzYm9hcmQtPmFpX3BnXTsKKwkJcy0+aW5zbl9yZWFkID0gdGhpc2JvYXJkLT5haTsKKwkJZGV2cHJpdi0+cGdfZ2Fpbmxpc3QgPSBkYXMwOF9nYWlubGlzdHNbdGhpc2JvYXJkLT5haV9wZ107CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbyAqLworCWlmICh0aGlzYm9hcmQtPmFvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKy8vIFhYWCBsYWNrcyByZWFkLWJhY2sgaW5zbgorCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDI7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX25iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCQlzLT5pbnNuX3dyaXRlID0gdGhpc2JvYXJkLT5hbzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpICovCisJaWYgKHRoaXNib2FyZC0+ZGkpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9ICh0aGlzYm9hcmQtPmRpID09IGRhczA4X2RpX3JiaXRzKSA/IDMgOiA4OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gdGhpc2JvYXJkLT5kaTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRvICovCisJaWYgKHRoaXNib2FyZC0+ZG9fKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRvX25jaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gdGhpc2JvYXJkLT5kb187CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwkvKiA4MjU1ICovCisJaWYgKHRoaXNib2FyZC0+aTgyNTVfb2Zmc2V0ICE9IDApIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsICh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArCisJCQkJdGhpc2JvYXJkLT5pODI1NV9vZmZzZXQpKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCS8qIDgyNTQgKi8KKwlpZiAodGhpc2JvYXJkLT5pODI1NF9vZmZzZXQgIT0gMCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSAzOworCQlzLT5tYXhkYXRhID0gMHhGRkZGOworCQlzLT5pbnNuX3JlYWQgPSBkYXMwOF9jb3VudGVyX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSBkYXMwOF9jb3VudGVyX3dyaXRlOworCQlzLT5pbnNuX2NvbmZpZyA9IGRhczA4X2NvdW50ZXJfY29uZmlnOworCQkvKiBTZXQtdXAgdGhlIDgyNTQgc3RydWN0dXJlICovCisJCWRldnByaXYtPmk4MjU0LmNoYW5uZWxzID0gMzsKKwkJZGV2cHJpdi0+aTgyNTQubG9naWMycGh5c1swXSA9IDA7CisJCWRldnByaXYtPmk4MjU0LmxvZ2ljMnBoeXNbMV0gPSAxOworCQlkZXZwcml2LT5pODI1NC5sb2dpYzJwaHlzWzJdID0gMjsKKwkJZGV2cHJpdi0+aTgyNTQuaW9iYXNlID0gaW9iYXNlICsgdGhpc2JvYXJkLT5pODI1NF9vZmZzZXQ7CisJCWRldnByaXYtPmk4MjU0Lm1vZGVbMF0gPQorCQkJZGV2cHJpdi0+aTgyNTQubW9kZVsxXSA9CisJCQlkZXZwcml2LT5pODI1NC5tb2RlWzJdID0gSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlk7CisJCWk4MjU0X2luaXRpYWxpemUoJmRldnByaXYtPmk4MjU0KTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczA4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJdW5zaWduZWQgbG9uZyBwY2lfaW9iYXNlID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKyNlbmRpZgorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkYXMwOF9wcml2YXRlX3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXMwODogIiwgZGV2LT5taW5vcik7CisJLy8gZGVhbCB3aXRoIGEgcGNpIGJvYXJkCisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY2kpIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCXByaW50aygiYnVzICVpIHNsb3QgJWkgIiwKKwkJCQlpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKwkJLy8gZmluZCBjYXJkCisJCWZvciAocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQkJcGRldiAhPSBOVUxMOworCQkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSB7CisJCQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMKKwkJCQkmJiBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0lEQVMwOCkgeworCQkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCQlpZiAocGRldi0+YnVzLT5udW1iZXIgPT0gaXQtPm9wdGlvbnNbMF0KKwkJCQkJCSYmIFBDSV9TTE9UKHBkZXYtPmRldmZuKSA9PQorCQkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICghcGRldikgeworCQkJcHJpbnRrKCJObyBwY2kgZGFzMDggY2FyZHMgZm91bmRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJZGV2cHJpdi0+cGRldiA9IHBkZXY7CisJCS8vIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMKKwkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBkZXYsIERSVl9OQU1FKSkgeworCQkJcHJpbnRrKCIgRXJyb3IgZW5hYmxpbmcgUENJIGRldmljZSBhbmQgcmVxdWVzdGluZyByZWdpb25zXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCS8vIHJlYWQgYmFzZSBhZGRyZXNzZXMKKwkJcGNpX2lvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCQlwcmludGsoInBjaWJhc2UgMHglbHggIGlvYmFzZSAweCVseFxuIiwgcGNpX2lvYmFzZSwgaW9iYXNlKTsKKwkJZGV2cHJpdi0+cGNpX2lvYmFzZSA9IHBjaV9pb2Jhc2U7CisjaWYgMAorLyogV2UgY291bGQgZW5hYmxlIHRvIHBjaS1kYXMwOCdzIGludGVycnVwdCBoZXJlIHRvIG1ha2UgaXQgcG9zc2libGUKKyAqIHRvIGRvIHRpbWVkIGlucHV0IGluIHRoaXMgZHJpdmVyLCBidXQgdGhlcmUgaXMgbGl0dGxlIHBvaW50IHNpbmNlCisgKiBjb252ZXJzaW9ucyB3b3VsZCBoYXZlIHRvIGJlIHN0YXJ0ZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyCisgKiBzbyB5b3UgbWlnaHQgYXMgd2VsbCB1c2UgY29tZWRpX3J0X3RpbWVyIHRvIGVtdWxhdGUgY29tbWFuZHMKKyAqLworCQkvKiBzZXQgc291cmNlIG9mIGludGVycnVwdCB0cmlnZ2VyIHRvIGNvdW50ZXIyIG91dHB1dCAqLworCQlvdXRiKENOVFJMX0lOVFIgfCBDTlRSTF9ESVIsIHBjaV9pb2Jhc2UgKyBDTlRSTCk7CisJCS8qIEVuYWJsZSBsb2NhbCBpbnRlcnJ1cHQgMSBhbmQgcGNpIGludGVycnVwdCAqLworCQlvdXR3KElOVFIxX0VOQUJMRSB8IFBDSV9JTlRSX0VOQUJMRSwgcGNpX2lvYmFzZSArIElOVENTUik7CisjZW5kaWYKKyNlbHNlCS8qIENPTkZJR19DT01FRElfUENJICovCisJCXByaW50aygidGhpcyBkcml2ZXIgaGFzIG5vdCBiZWVuIGJ1aWx0IHdpdGggUENJIHN1cHBvcnQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYJLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKwl9IGVsc2UgeworCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIGRhczA4X2NvbW1vbl9hdHRhY2goZGV2LCBpb2Jhc2UpOworfQorCitpbnQgZGFzMDhfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZGFzMDg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgNCk7CisKKwkvLyBkZWFsbG9jYXRlIGlvcG9ydHMgZm9yIG5vbi1wY21jaWEsIG5vbi1wY2kgYm9hcmRzCisJaWYgKCh0aGlzYm9hcmQtPmJ1c3R5cGUgIT0gcGNtY2lhKSAmJiAodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjaSkpIHsKKwkJaWYgKGRldi0+aW9iYXNlKQorCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNib2FyZC0+aW9zaXplKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5wZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+cGNpX2lvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBkZXYpOworCQl9CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMwOCwgZGFzMDhfcGNpX3RhYmxlKTsKKyNlbHNlCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczA4KTsKKyNlbmRpZgorCitFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jb21tb25fYXR0YWNoKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhczA4X2NvbW1vbl9kZXRhY2gpOworI2lmZGVmIENPTkZJR19DT01FRElfUENNQ0lBCitFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jc19ib2FyZHMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDg5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguaApAQCAtMCwwICsxLDc4IEBACisvKgorICAgIGRhczA4LmgKKworICAgIEhlYWRlciBmb3IgZGFzMDguYyBhbmQgZGFzMDhfY3MuYworCisgICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9EQVMwOF9ICisjZGVmaW5lIF9EQVMwOF9ICisKK2VudW0gZGFzMDhfYnVzdHlwZSB7IGlzYSwgcGNpLCBwY21jaWEsIHBjMTA0IH07CisvLyBkaWZmZXJlbnQgd2F5cyBhaSBkYXRhIGlzIGVuY29kZWQgaW4gZmlyc3QgdHdvIHJlZ2lzdGVycworZW51bSBkYXMwOF9haV9lbmNvZGluZyB7IGRhczA4X2VuY29kZTEyLCBkYXMwOF9lbmNvZGUxNiwgZGFzMDhfcGNtX2VuY29kZTEyIH07CitlbnVtIGRhczA4X2xyYW5nZSB7IGRhczA4X3BnX25vbmUsIGRhczA4X2JpcG9sYXI1LCBkYXMwOF9wZ2gsIGRhczA4X3BnbCwKKwkJZGFzMDhfcGdtIH07CisKK3N0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGlkOwkvLyBpZCBmb3IgcGNpL3BjbWNpYSBib2FyZHMKKwllbnVtIGRhczA4X2J1c3R5cGUgYnVzdHlwZTsKKwl2b2lkICphaTsKKwl1bnNpZ25lZCBpbnQgYWlfbmJpdHM7CisJZW51bSBkYXMwOF9scmFuZ2UgYWlfcGc7CisJZW51bSBkYXMwOF9haV9lbmNvZGluZyBhaV9lbmNvZGluZzsKKwl2b2lkICphbzsKKwl1bnNpZ25lZCBpbnQgYW9fbmJpdHM7CisJdm9pZCAqZGk7CisJdm9pZCAqZG9fOworCXVuc2lnbmVkIGludCBkb19uY2hhbjsKKwl1bnNpZ25lZCBpbnQgaTgyNTVfb2Zmc2V0OworCXVuc2lnbmVkIGludCBpODI1NF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGlvc2l6ZTsJLy8gbnVtYmVyIG9mIGlvcG9ydHMgdXNlZAorfTsKKworc3RydWN0IGk4MjU0X3N0cnVjdCB7CisJaW50IGNoYW5uZWxzOwkJLy8gYXZhaWxhYmxlIGNoYW5uZWxzLiBTb21lIGNvdWxkIGJlIHVzZWQgaW50ZXJuYWxseS4KKwlpbnQgbG9naWMycGh5c1szXTsJLy8gdG8ga25vdyB3aGljaCBwaHlzaWNhbCBjaGFubmVsIGlzLgorCWludCBtb2RlWzNdOwkJLy8gdGhlIGluZGV4IGlzIHRoZSByZWFsIGNvdW50ZXIuCisJdW5zaWduZWQgaW50IGlvYmFzZTsKK307CisKKyNkZWZpbmUgSTgyNTRfQ05UMCAwCisjZGVmaW5lIEk4MjU0X0NOVDEgMQorI2RlZmluZSBJODI1NF9DTlQyIDIKKyNkZWZpbmUgSTgyNTRfQ1RSTCAzCisKK3N0cnVjdCBkYXMwOF9wcml2YXRlX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IGRvX211eF9iaXRzOwkvLyBiaXRzIGZvciBkby9tdXggcmVnaXN0ZXIgb24gYm9hcmRzIHdpdGhvdXQgc2VwZXJhdGUgZG8gcmVnaXN0ZXIKKwl1bnNpZ25lZCBpbnQgZG9fYml0czsJLy8gYml0cyBmb3IgZG8gcmVnaXN0ZXIgb24gYm9hcmRzIHdpdGggcmVnaXN0ZXIgZGVkaWNhdGVkIHRvIGRpZ2l0YWwgb3V0IG9ubHkKKwljb25zdCB1bnNpZ25lZCBpbnQgKnBnX2dhaW5saXN0OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkvLyBzdHJ1Y3QgZm9yIHBjaS1kYXMwOAorCXVuc2lnbmVkIGludCBwY2lfaW9iYXNlOwkvLyBhZGRpdGlvbmFsIGJhc2UgYWRkcmVzcyBmb3IgcGNpLWRhczA4CisJc3RydWN0IGk4MjU0X3N0cnVjdCBpODI1NDsKK307CisKKyNkZWZpbmUgTlVNX0RBUzA4X0NTX0JPQVJEUyAyCitleHRlcm4gc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCBkYXMwOF9jc19ib2FyZHNbTlVNX0RBUzA4X0NTX0JPQVJEU107CisKK2ludCBkYXMwOF9jb21tb25fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIGlvYmFzZSk7CitpbnQgZGFzMDhfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKyNlbmRpZiAvKiBfREFTMDhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTZjODg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKQEAgLTAsMCArMSw0ODggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYworICAgIERBUzA4IGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiwyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqLworLyoKK0RyaXZlcjogZGFzMDhfY3MKK0Rlc2NyaXB0aW9uOiBEQVMtMDggUENNQ0lBIGJvYXJkcworQXV0aG9yOiBXYXJyZW4gSmFzcGVyLCBkcywgRnJhbmsgSGVzcworRGV2aWNlczogW0NvbXB1dGVyQm9hcmRzXSBQQ00tREFTMDggKHBjbS1kYXMwOCkKK1N0YXR1czogd29ya3MKKworVGhpcyBpcyB0aGUgUENNQ0lBLXNwZWNpZmljIHN1cHBvcnQgc3BsaXQgb2ZmIGZyb20gdGhlCitkYXMwOCBkcml2ZXIuCisKK09wdGlvbnMgKGZvciBwY20tZGFzMDgpOgorICAgICAgICBOT05FCisKK0NvbW1hbmQgc3VwcG9ydCBkb2VzIG5vdCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVkIGZvciB0aGlzIGJvYXJkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgImRhczA4LmgiCisKKy8vIHBjbWNpYSBpbmNsdWRlcworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpjdXJfZGV2ID0gTlVMTDsKKworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0ICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBpbnQgZGFzMDhfY3NfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXMwOF9jcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXMwOF9jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMDhfY3NfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczA4X2NvbW1vbl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkYXMwOF9jc19ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZGFzMDhfY3NfYm9hcmRzKSAvCisJCXNpemVvZihzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0KSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCksCit9OworCitzdGF0aWMgaW50IGRhczA4X2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gY3VyX2RldjsJLy8gWFhYIGhhY2sKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogZGFzMDhfY3M6ICIsIGRldi0+bWlub3IpOworCS8vIGRlYWwgd2l0aCBhIHBjaSBib2FyZAorCisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY21jaWEpIHsKKwkJaWYgKGxpbmsgPT0gTlVMTCkgeworCQkJcHJpbnRrKCIgbm8gcGNtY2lhIGNhcmRzIGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwl9IGVsc2UgeworCQlwcmludGsoIiBidWchIGJvYXJkIGRvZXMgbm90IGhhdmUgUENNQ0lBIGJ1c3R5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gZGFzMDhfY29tbW9uX2F0dGFjaChkZXYsIGlvYmFzZSk7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGZvbGxvd2luZyBwY21jaWEgY29kZSBmb3IgdGhlIHBjbS1kYXMwOCBpcyBhZGFwdGVkIGZyb20gdGhlCisgICAgZHVtbXlfY3MuYyBkcml2ZXIgb2YgdGhlIExpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzIHBhY2thZ2UuCisKKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisKKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9CisJImRhczA4LmMgcGNtY2lhIGNvZGUgKEZyYW5rIEhlc3MpLCBtb2RpZmllZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzIChEYXZpZCBIaW5kcykiOworI2Vsc2UKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZGFzMDhfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIGludCBkYXMwOF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkYXMwOF9wY21jaWFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGRhczA4X3BjbWNpYV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gInBjbS1kYXMwOCI7CisKK3N0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFzMDhfcGNtY2lhX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCisgICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLgorCisgICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKKyAgICBjYXJkIGluc2VydGlvbiBldmVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKworCURFQlVHKDAsICJkYXMwOF9wY21jaWFfYXR0YWNoKClcbiIpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsb2NhbC0+bGluayA9IGxpbms7CisJbGluay0+cHJpdiA9IGxvY2FsOworCisJLyogSW50ZXJydXB0IHNldHVwICovCisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKKworCS8qCisJICAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKKwkgICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CisJICAgZXZlcnl0aGluZy4gIEluIG1vc3QgY2xpZW50cywgbWFueSBkZXRhaWxzIChpLmUuLCBudW1iZXIsIHNpemVzLAorCSAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQorCSAgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCisJICovCisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCWN1cl9kZXYgPSBsaW5rOworCisJZGFzMDhfcGNtY2lhX2NvbmZpZyhsaW5rKTsKKworCXJldHVybiAwOworfQkJCQkvKiBkYXMwOF9wY21jaWFfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisKKwlERUJVRygwLCAiZGFzMDhfcGNtY2lhX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIGxpbmstPnByaXYpLT5zdG9wID0gMTsKKwkJZGFzMDhfcGNtY2lhX3JlbGVhc2UobGluayk7CisJfQorCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLworCWlmIChsaW5rLT5wcml2KQorCQlrZnJlZShsaW5rLT5wcml2KTsKKworfQkJCQkvKiBkYXMwOF9wY21jaWFfZGV0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFzMDhfcGNtY2lhX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCisJREVCVUcoMCwgImRhczA4X3BjbWNpYV9jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCWxhc3RfZm4gPSBHZXRUdXBsZURhdGE7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKwlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJbGFzdF9mbiA9IEdldEZpcnN0VHVwbGU7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisvKglpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKyovCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlsYXN0X2ZuID0gR2V0TmV4dFR1cGxlOworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCWxhc3RfZm4gPSBSZXF1ZXN0SVJROworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAorCSAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKKwkgICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgorCSAqLworCWxhc3RfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCisJLyoKKwkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQorCSAgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgKi8KKwlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgInBjbS1kYXMwOCIpOworCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCisJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMngiLAorCQlkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAorCQkJbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMikKKwkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAorCQkJbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworCWRhczA4X3BjbWNpYV9yZWxlYXNlKGxpbmspOworCit9CQkJCS8qIGRhczA4X3BjbWNpYV9jb25maWcgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBBZnRlciBhIGNhcmQgaXMgcmVtb3ZlZCwgZGFzMDhfcGNtY2lhX3JlbGVhc2UoKSB3aWxsIHVucmVnaXN0ZXIgdGhlCisgICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCisgICAgc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGFzMDhfcGNtY2lhX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK30JCQkJLyogZGFzMDhfcGNtY2lhX3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkYXMwOF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhczA4X3BjbWNpYV9zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwlsb2NhbC0+c3RvcCA9IDA7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhczA4X3BjbWNpYV9yZXN1bWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBkYXMwOF9jc19pZF90YWJsZVtdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFjNSwgMHg0MDAxKSwKKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkYXMwOF9jc19pZF90YWJsZSk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIGRhczA4X2NzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBkYXMwOF9wY21jaWFfYXR0YWNoLAorCS5yZW1vdmUgPSBkYXMwOF9wY21jaWFfZGV0YWNoLAorCS5zdXNwZW5kID0gZGFzMDhfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGRhczA4X3BjbWNpYV9yZXN1bWUsCisJLmlkX3RhYmxlID0gZGFzMDhfY3NfaWRfdGFibGUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJCS5uYW1lID0gZGV2X2luZm8sCisJCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2RhczA4X3BjbWNpYV9jcyh2b2lkKQoreworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGFzMDhfY3NfZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGFzMDhfcGNtY2lhX2NzKHZvaWQpCit7CisJREVCVUcoMCwgImRhczA4X3BjbWNpYV9jczogdW5sb2FkaW5nXG4iKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhczA4X2NzX2RyaXZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRhczA4X2NzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGFzMDhfcGNtY2lhX2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczA4X2NzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhczA4X2NzX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJZXhpdF9kYXMwOF9wY21jaWFfY3MoKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXMwOF9jcyk7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9pbml0KGRhczA4X2NzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRhczA4X2NzX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2YjA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNi5jCkBAIC0wLDAgKzEsMTczMCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXMxNi5jCisgICAgREFTMTYgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwMCBDaHJpcyBSLiBCYXVnaGVyIDxiYXVnaGVyQGVudGVyYWN0LmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogZGFzMTYKK0Rlc2NyaXB0aW9uOiBEQVMxNiBjb21wYXRpYmxlIGJvYXJkcworQXV0aG9yOiBTYW0gTW9vcmUsIFdhcnJlbiBKYXNwZXIsIGRzLCBDaHJpcyBCYXVnaGVyLCBGcmFuayBIZXNzLCBSb21hbiBGaWV0emUKK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUy0xNiAoZGFzLTE2KSwgREFTLTE2RyAoZGFzLTE2ZyksCisgIERBUy0xNkYgKGRhcy0xNmYpLCBEQVMtMTIwMSAoZGFzLTEyMDEpLCBEQVMtMTIwMiAoZGFzLTEyMDIpLAorICBEQVMtMTQwMSAoZGFzLTE0MDEpLCBEQVMtMTQwMiAoZGFzLTE0MDIpLCBEQVMtMTYwMSAoZGFzLTE2MDEpLAorICBEQVMtMTYwMiAoZGFzLTE2MDIpLAorICBbQ29tcHV0ZXJCb2FyZHNdIFBDMTA0LURBUzE2L0pSIChwYzEwNC1kYXMxNmpyKSwKKyAgUEMxMDQtREFTMTZKUi8xNiAocGMxMDQtZGFzMTZqci8xNiksCisgIENJTy1EQVMxNkpSLzE2IChjaW8tZGFzMTZqci8xNiksCisgIENJTy1EQVMxNi9KUiAoY2lvLWRhczE2L2pyKSwgQ0lPLURBUzE0MDEvMTIgKGNpby1kYXMxNDAxLzEyKSwKKyAgQ0lPLURBUzE0MDIvMTIgKGNpby1kYXMxNDAyLzEyKSwgQ0lPLURBUzE0MDIvMTYgKGNpby1kYXMxNDAyLzE2KSwKKyAgQ0lPLURBUzE2MDEvMTIgKGNpby1kYXMxNjAxLzEyKSwgQ0lPLURBUzE2MDIvMTIgKGNpby1kYXMxNjAyLzEyKSwKKyAgQ0lPLURBUzE2MDIvMTYgKGNpby1kYXMxNjAyLzE2KSwgQ0lPLURBUzE2LzMzMCAoY2lvLWRhczE2LzMzMCkKK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IDIwMDMtMTAtMTIKKworQSByZXdyaXRlIG9mIHRoZSBkYXMxNiBhbmQgZGFzMTYwMCBkcml2ZXJzLgorT3B0aW9uczoKKwlbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKwlbMV0gLSBpcnEgKGRvZXMgbm90aGluZywgaXJxIGlzIG5vdCB1c2VkIGFueW1vcmUpCisJWzJdIC0gZG1hIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIGNvbWVkaV9jb21tYW5kIHN1cHBvcnQpCisJWzNdIC0gbWFzdGVyIGNsb2NrIHNwZWVkIGluIE1IeiAob3B0aW9uYWwsIDEgb3IgMTAsIGlnbm9yZWQgaWYKKwkJYm9hcmQgY2FuIHByb2JlIGNsb2NrLCBkZWZhdWx0cyB0byAxKQorCVs0XSAtIGFuYWxvZyBpbnB1dCByYW5nZSBsb3dlc3Qgdm9sdGFnZSBpbiBtaWNyb3ZvbHRzIChvcHRpb25hbCwKKwkJb25seSB1c2VmdWwgaWYgeW91ciBib2FyZCBkb2VzIG5vdCBoYXZlIHNvZnR3YXJlCisJCXByb2dyYW1tYWJsZSBnYWluKQorCVs1XSAtIGFuYWxvZyBpbnB1dCByYW5nZSBoaWdoZXN0IHZvbHRhZ2UgaW4gbWljcm92b2x0cyAob3B0aW9uYWwsCisJCW9ubHkgdXNlZnVsIGlmIGJvYXJkIGRvZXMgbm90IGhhdmUgc29mdHdhcmUgcHJvZ3JhbW1hYmxlCisJCWdhaW4pCisJWzZdIC0gYW5hbG9nIG91dHB1dCByYW5nZSBsb3dlc3Qgdm9sdGFnZSBpbiBtaWNyb3ZvbHRzIChvcHRpb25hbCkKKwlbN10gLSBhbmFsb2cgb3V0cHV0IHJhbmdlIGhpZ2hlc3Qgdm9sdGFnZSBpbiBtaWNyb3ZvbHRzIChvcHRpb25hbCkKKwlbOF0gLSB1c2UgdGltZXIgbW9kZSBmb3IgRE1BLiAgVGltZXIgbW9kZSBpcyBuZWVkZWQgZS5nLiBmb3IKKwkJYnVnZ3kgRE1BIGNvbnRyb2xsZXJzIGluIE5TIENTNTUzMEEgKEdlb2RlIENvbXBhbmlvbiksIGFuZCBmb3IKKwkJJ2pyJyBjYXJkcyB0aGF0IGxhY2sgYSBoYXJkd2FyZSBmaWZvLiAgVGhpcyBvcHRpb24gaXMgbm8KKwkJbG9uZ2VyIG5lZWRlZCwgc2luY2UgdGltZXIgbW9kZSBpcyBfYWx3YXlzXyB1c2VkLgorCitQYXNzaW5nIGEgemVybyBmb3IgYW4gb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGxlYXZpbmcgaXQgdW5zcGVjaWZpZWQuCisKKyovCisvKgorCitUZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgaGVscCBwcm92aWRlZCBieSBEYW5pZWwgS29jaC4KKworS2VpdGhsZXkgTWFudWFsczoKKwkyMzA5LlBERiAoZGFzMTYpCisJNDkxOS5QREYgKGRhczE0MDAsIDE2MDApCisJNDkyMi5QREYgKGRhcy0xNDAwKQorCTQ5MjMuUERGIChkYXMxMjAwLCAxNDAwLCAxNjAwKQorCitDb21wdXRlciBib2FyZHMgbWFudWFscyBhbHNvIGF2YWlsYWJsZSBmcm9tIHRoZWlyIHdlYnNpdGUgd3d3Lm1lYXN1cmVtZW50Y29tcHV0aW5nLmNvbQorCisqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI3VuZGVmIERFQlVHCisvLyNkZWZpbmUgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERFQlVHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikgcnRfcHJpbnRrKCJkYXMxNjogIiBmb3JtYXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBEQVMxNl9TSVpFIDIwCQkvLyBudW1iZXIgb2YgaW9wb3J0cworI2RlZmluZSBEQVMxNl9ETUFfU0laRSAweGZmMDAJLy8gc2l6ZSBpbiBieXRlcyBvZiBhbGxvY2F0ZWQgZG1hIGJ1ZmZlcgorCisvKgorICAgIGNpby1kYXMxNi5wZGYKKworICAgICJkYXMxNiIKKyAgICAiZGFzMTYvZiIKKworICAwCWEvZCBiaXRzIDAtMwkJc3RhcnQgMTIgYml0CisgIDEJYS9kIGJpdHMgNC0xMQkJdW51c2VkCisgIDIJbXV4IHJlYWQJCW11eCBzZXQKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNAl1bnVzZWQJCQlhbzBfbHNiCisgIDUJdW51c2VkCQkJYW8wX21zYgorICA2CXVudXNlZAkJCWFvMV9sc2IKKyAgNwl1bnVzZWQJCQlhbzFfbXNiCisgIDgJc3RhdHVzIGVvYyB1bmkvYmlwCWludGVycnVwdCByZXNldAorICA5CWRtYSwgaW50LCB0cmlnIGN0cmwJc2V0IGRtYSwgaW50CisgIGEJcGFjZXIgY29udHJvbAkJdW51c2VkCisgIGIJcmVzZXJ2ZWQJCXJlc2VydmVkCisgIGNkZWYJODI1NAorICAwMTIzCTgyNTUKKworKi8KKworLyoKKyAgICBjaW8tZGFzMTZqci5wZGYKKworICAgICJkYXMxNmpyIgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCAxMiBiaXQKKyAgMQlhL2QgYml0cyA0LTExCQl1bnVzZWQKKyAgMgltdXggcmVhZAkJbXV4IHNldAorICAzCWRpIDQgYml0CQlkbyA0IGJpdAorICA0NTY3CXVudXNlZAkJCXVudXNlZAorICA4CXN0YXR1cyBlb2MgdW5pL2JpcAlpbnRlcnJ1cHQgcmVzZXQKKyAgOQlkbWEsIGludCwgdHJpZyBjdHJsCXNldCBkbWEsIGludAorICBhCXBhY2VyIGNvbnRyb2wJCXVudXNlZAorICBiCWdhaW4gc3RhdHVzCQlnYWluIGNvbnRyb2wKKyAgY2RlZgk4MjU0CisKKyovCisKKy8qCisgICAgY2lvLWRhczE2anJfMTYucGRmCisKKyAgICAiZGFzMTZqcl8xNiIKKworICAwCWEvZCBiaXRzIDAtNwkJc3RhcnQgMTYgYml0CisgIDEJYS9kIGJpdHMgOC0xNQkJdW51c2VkCisgIDIJbXV4IHJlYWQJCW11eCBzZXQKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNDU2Nwl1bnVzZWQJCQl1bnVzZWQKKyAgOAlzdGF0dXMgZW9jIHVuaS9iaXAJaW50ZXJydXB0IHJlc2V0CisgIDkJZG1hLCBpbnQsIHRyaWcgY3RybAlzZXQgZG1hLCBpbnQKKyAgYQlwYWNlciBjb250cm9sCQl1bnVzZWQKKyAgYglnYWluIHN0YXR1cwkJZ2FpbiBjb250cm9sCisgIGNkZWYJODI1NAorCisqLworLyoKKyAgICBjaW8tZGFzMTYweC0xeC5wZGYKKworICAgICJkYXMxNjAxLzEyIgorICAgICJkYXMxNjAyLzEyIgorICAgICJkYXMxNjAyLzE2IgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCAxMiBiaXQKKyAgMQlhL2QgYml0cyA0LTExCQl1bnVzZWQKKyAgMgltdXggcmVhZAkJbXV4IHNldAorICAzCWRpIDQgYml0CQlkbyA0IGJpdAorICA0CXVudXNlZAkJCWFvMF9sc2IKKyAgNQl1bnVzZWQJCQlhbzBfbXNiCisgIDYJdW51c2VkCQkJYW8xX2xzYgorICA3CXVudXNlZAkJCWFvMV9tc2IKKyAgOAlzdGF0dXMgZW9jIHVuaS9iaXAJaW50ZXJydXB0IHJlc2V0CisgIDkJZG1hLCBpbnQsIHRyaWcgY3RybAlzZXQgZG1hLCBpbnQKKyAgYQlwYWNlciBjb250cm9sCQl1bnVzZWQKKyAgYglnYWluIHN0YXR1cwkJZ2FpbiBjb250cm9sCisgIGNkZWYJODI1NAorICA0MDAJODI1NQorICA0MDQJdW51c2VkCQkJY29udmVyc2lvbiBlbmFibGUKKyAgNDA1CXVudXNlZAkJCWJ1cnN0IGVuYWJsZQorICA0MDYJdW51c2VkCQkJZGFzMTYwMCBlbmFibGUKKyAgNDA3CXN0YXR1cworCisqLworCitzdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gMjsJLy8gc2l6ZSBpbiBieXRlcyBvZiBhIHNhbXBsZSBmcm9tIGJvYXJkCisKKyNkZWZpbmUgREFTMTZfVFJJRwkJMAorI2RlZmluZSBEQVMxNl9BSV9MU0IJCTAKKyNkZWZpbmUgREFTMTZfQUlfTVNCCQkxCisjZGVmaW5lIERBUzE2X01VWAkJMgorI2RlZmluZSBEQVMxNl9ESU8JCTMKKyNkZWZpbmUgREFTMTZfQU9fTFNCKHgpCSgoeCk/Njo0KQorI2RlZmluZSBEQVMxNl9BT19NU0IoeCkJKCh4KT83OjUpCisjZGVmaW5lIERBUzE2X1NUQVRVUwkJOAorI2RlZmluZSAgIEJVU1kJCQkoMTw8NykKKyNkZWZpbmUgICBVTklQT0xBUgkJCSgxPDw2KQorI2RlZmluZSAgIERBUzE2X01VWEJJVAkJCSgxPDw1KQorI2RlZmluZSAgIERBUzE2X0lOVAkJCSgxPDw0KQorI2RlZmluZSBEQVMxNl9DT05UUk9MCQk5CisjZGVmaW5lICAgREFTMTZfSU5URQkJCSgxPDw3KQorI2RlZmluZSAgIERBUzE2X0lSUSh4KQkJCSgoKHgpICYgMHg3KSA8PCA0KQorI2RlZmluZSAgIERNQV9FTkFCTEUJCQkoMTw8MikKKyNkZWZpbmUgICBQQUNJTkdfTUFTSwkweDMKKyNkZWZpbmUgICBJTlRfUEFDRVIJCTB4MDMKKyNkZWZpbmUgICBFWFRfUEFDRVIJCQkweDAyCisjZGVmaW5lICAgREFTMTZfU09GVAkJMHgwMAorI2RlZmluZSBEQVMxNl9QQUNFUgkJMHgwQQorI2RlZmluZSAgIERBUzE2X0NUUjAJCQkoMTw8MSkKKyNkZWZpbmUgICBEQVMxNl9UUklHMAkJCSgxPDwwKQorI2RlZmluZSAgIEJVUlNUX0xFTl9CSVRTKHgpCQkJKCgoeCkgJiAweGYpIDw8IDQpCisjZGVmaW5lIERBUzE2X0dBSU4JCTB4MEIKKyNkZWZpbmUgREFTMTZfQ05UUjBfREFUQQkJMHgwQworI2RlZmluZSBEQVMxNl9DTlRSMV9EQVRBCQkweDBECisjZGVmaW5lIERBUzE2X0NOVFIyX0RBVEEJCTB4MEUKKyNkZWZpbmUgREFTMTZfQ05UUl9DT05UUk9MCTB4MEYKKyNkZWZpbmUgICBEQVMxNl9URVJNX0NOVAkweDAwCisjZGVmaW5lICAgREFTMTZfT05FX1NIT1QJMHgwMgorI2RlZmluZSAgIERBUzE2X1JBVEVfR0VOCTB4MDQKKyNkZWZpbmUgICBEQVMxNl9DTlRSX0xTQl9NU0IJMHgzMAorI2RlZmluZSAgIERBUzE2X0NOVFIwCQkweDAwCisjZGVmaW5lICAgREFTMTZfQ05UUjEJCTB4NDAKKyNkZWZpbmUgICBEQVMxNl9DTlRSMgkJMHg4MAorCisjZGVmaW5lIERBUzE2MDBfQ09OVgkJMHg0MDQKKyNkZWZpbmUgICBEQVMxNjAwX0NPTlZfRElTQUJMRQkJMHg0MAorI2RlZmluZSBEQVMxNjAwX0JVUlNUCQkweDQwNQorI2RlZmluZSAgIERBUzE2MDBfQlVSU1RfVkFMCQkweDQwCisjZGVmaW5lIERBUzE2MDBfRU5BQkxFCQkweDQwNgorI2RlZmluZSAgIERBUzE2MDBfRU5BQkxFX1ZBTAkJMHg0MAorI2RlZmluZSBEQVMxNjAwX1NUQVRVU19CCTB4NDA3CisjZGVmaW5lICAgREFTMTYwMF9CTUUJCTB4NDAKKyNkZWZpbmUgICBEQVMxNjAwX01FCQkweDIwCisjZGVmaW5lICAgREFTMTYwMF9DRAkJCTB4MTAKKyNkZWZpbmUgICBEQVMxNjAwX1dTCQkJMHgwMgorI2RlZmluZSAgIERBUzE2MDBfQ0xLXzEwTUhaCQkweDAxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxeDAxX2JpcCA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMXgwMV91bmlwID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMC4wMSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxeDAyX2JpcCA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMXgwMl91bmlwID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxNmpyID0geyA5LCB7CisJCQkvLyBhbHNvIHVzZWQgYnkgMTYvMzMwCisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMTZqcl8xNiA9IHsgOCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBpbnQgZGFzMTZqcl9nYWlubGlzdFtdID0geyA4LCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CitzdGF0aWMgY29uc3QgaW50IGRhczE2anJfMTZfZ2Fpbmxpc3RbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMxNjAwX2dhaW5saXN0W10gPSB7IDAsIDEsIDIsIDMgfTsKK2VudW0geworCWRhczE2X3BnX25vbmUgPSAwLAorCWRhczE2X3BnXzE2anIsCisJZGFzMTZfcGdfMTZqcl8xNiwKKwlkYXMxNl9wZ18xNjAxLAorCWRhczE2X3BnXzE2MDIsCit9Oworc3RhdGljIGNvbnN0IGludCAqY29uc3QgZGFzMTZfZ2Fpbmxpc3RzW10gPSB7CisJTlVMTCwKKwlkYXMxNmpyX2dhaW5saXN0LAorCWRhczE2anJfMTZfZ2Fpbmxpc3QsCisJZGFzMTYwMF9nYWlubGlzdCwKKwlkYXMxNjAwX2dhaW5saXN0LAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgZGFzMTZfYWlfdW5pX2xyYW5nZXNbXSA9IHsKKwkmcmFuZ2VfdW5rbm93biwKKwkmcmFuZ2VfZGFzMTZqciwKKwkmcmFuZ2VfZGFzMTZqcl8xNiwKKwkmcmFuZ2VfZGFzMXgwMV91bmlwLAorCSZyYW5nZV9kYXMxeDAyX3VuaXAsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCBkYXMxNl9haV9iaXBfbHJhbmdlc1tdID0geworCSZyYW5nZV91bmtub3duLAorCSZyYW5nZV9kYXMxNmpyLAorCSZyYW5nZV9kYXMxNmpyXzE2LAorCSZyYW5nZV9kYXMxeDAxX2JpcCwKKwkmcmFuZ2VfZGFzMXgwMl9iaXAsCit9OworCitzdHJ1Y3QgbXVuZ2VfaW5mbyB7CisJdWludDhfdCBieXRlOworCXVuc2lnbmVkIGhhdmVfYnl0ZToxOworfTsKKworc3RhdGljIGludCBkYXMxNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNl9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNl9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhczE2X2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxNl9jbWRfZXhlYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTZfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgZGFzMTZfYWlfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICphcnJheSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpOworCitzdGF0aWMgdm9pZCBkYXMxNl9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGRhczE2X3RpbWVyX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBkYXMxNl9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2X3NldF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5zLAorCWludCBmbGFncyk7CitzdGF0aWMgaW50IGRhczE2MDBfbW9kZV9kZXRlY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9jbWQgY21kKTsKKworc3RhdGljIHZvaWQgcmVnX2R1bXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgZGFzMTZfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAqYWk7CisJdW5zaWduZWQgaW50IGFpX25iaXRzOworCXVuc2lnbmVkIGludCBhaV9zcGVlZDsJLy8gbWF4IGNvbnZlcnNpb24gc3BlZWQgaW4gbmFub3NlYworCXVuc2lnbmVkIGludCBhaV9wZzsKKwl2b2lkICphbzsKKwl1bnNpZ25lZCBpbnQgYW9fbmJpdHM7CisJdm9pZCAqZGk7CisJdm9pZCAqZG9fOworCisJdW5zaWduZWQgaW50IGk4MjU1X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgaTgyNTRfb2Zmc2V0OworCisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGlkOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNl9ib2FyZCBkYXMxNl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcy0xNiIsCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjE1MDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2ZyIsCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjE1MDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2ZiIsCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjg1MDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnX25vbmUsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDEwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTQsCisJICAgICAgaWQ6CTB4MDAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYiLAkvLyBjaW8tZGFzMTYucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDgwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2L2YiLAkvLyBkYXMxNi5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnX25vbmUsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDEwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTQsCisJICAgICAgaWQ6CTB4ODAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYvanIiLAkvLyBjaW8tZGFzMTZqci5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6NzY5MiwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTZqciwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDEwLAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMxMDQtZGFzMTZqciIsCS8vIHBjMTA0LWRhczE2anJfeHgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjMzMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2anIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxMCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNmpyLzE2IiwJLy8gY2lvLWRhczE2anJfMTYucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNmpyXzE2LAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTAsCisJICAgICAgaWQ6CTB4MDAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwYzEwNC1kYXMxNmpyLzE2IiwJLy8gcGMxMDQtZGFzMTZqcl94eC5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2anJfMTYsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxMCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xMjAxIiwJLy8gNDkyNC5wZGYgKGtlaXRobGV5IHVzZXIncyBtYW51YWwpCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHgyMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xMjAyIiwJLy8gNDkyNC5wZGYgKGtlaXRobGV5IHVzZXIncyBtYW51YWwpCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHgyMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNDAxIiwJLy8gNDkxOS5wZGYgYW5kIDQ5MjIucGRmIChrZWl0aGxleSB1c2VyJ3MgbWFudWFsKQorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMSwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorCSAgICAgIGlkOgkweGMwCS8vIDQ5MTkucGRmIHNheXMgaWQgYml0cyBhcmUgMHhlMCwgNDkyMi5wZGYgc2F5cyAweGMwCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTQwMiIsCS8vIDQ5MTkucGRmIGFuZCA0OTIyLnBkZiAoa2VpdGhsZXkgdXNlcidzIG1hbnVhbCkKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHhjMAkvLyA0OTE5LnBkZiBzYXlzIGlkIGJpdHMgYXJlIDB4ZTAsIDQ5MjIucGRmIHNheXMgMHhjMAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2MDEiLAkvLyA0OTE5LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMSwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2MDIiLAkvLyA0OTE5LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE0MDEvMTIiLAkvLyBjaW8tZGFzMTQwMF9zZXJpZXMucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDEsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTQwMi8xMiIsCS8vIGNpby1kYXMxNDAwX3Nlcmllcy5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6NjI1MCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNDAyLzE2IiwJLy8gY2lvLWRhczE0MDBfc2VyaWVzLnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNjAxLzEyIiwJLy8gY2lvLWRhczE2MHgtMXgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDEsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNjAyLzEyIiwJLy8gY2lvLWRhczE2MHgtMXgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNjAyLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHg0MDAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYwMi8xNiIsCS8vIGNpby1kYXMxNjB4LTF4LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2LzMzMCIsCS8vID8KKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MzAzMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTZqciwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorICAgICAgaWQ6CTB4ZjB9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJImRhczE2LzMzMGkiLAkvLyA/CisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMxNi9qci9jdHI1IiwJLy8gPworCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2L20xLzE2IiwJLy8gY2lvLWRhczE2X20xXzE2LnBkZiwgdGhpcyBib2FyZCBpcyBhIGJpdCBxdWlya3ksIG5vIGRtYQorCQl9LAorI2VuZGlmCit9OworCisjZGVmaW5lIG5fZGFzMTZfYm9hcmRzICgoc2l6ZW9mKGRhczE2X2JvYXJkcykpLyhzaXplb2Yoc3RydWN0IGRhczE2X2JvYXJkKSkpCisKK3N0YXRpYyBpbnQgZGFzMTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMTYgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzMTYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczE2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMxNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkYXMxNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2RhczE2X2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YoZGFzMTZfYm9hcmRzWzBdKSwKK307CisKKyNkZWZpbmUgREFTMTZfVElNRU9VVCAxMDAwCisKKy8qIFBlcmlvZCBmb3IgdGltZXIgaW50ZXJydXB0IGluIGppZmZpZXMuICBJdCdzIGEgZnVuY3Rpb24KKyAqIHRvIGRlYWwgd2l0aCBwb3NzaWJpbGl0eSBvZiBkeW5hbWljIEhaIHBhdGNoZXMgICovCitzdGF0aWMgaW5saW5lIGludCB0aW1lcl9wZXJpb2Qodm9pZCkKK3sKKwlyZXR1cm4gSFogLyAyMDsKK30KK3N0cnVjdCBkYXMxNl9wcml2YXRlX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IGFpX3VuaXBvbGFyOwkvLyB1bmlwb2xhciBmbGFnCisJdW5zaWduZWQgaW50IGFpX3NpbmdsZWVuZGVkOwkvLyBzaW5nbGUgZW5kZWQgZmxhZworCXVuc2lnbmVkIGludCBjbG9ja2Jhc2U7CS8vIG1hc3RlciBjbG9jayBzcGVlZCBpbiBucworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwkvLyBkbWEsIGludGVycnVwdCBhbmQgdHJpZ2dlciBjb250cm9sIGJpdHMKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFkY19ieXRlX2NvdW50OwkvLyBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOwkvLyBkaXZpc29yIGRpdmlkaW5nIG1hc3RlciBjbG9jayB0byBnZXQgY29udmVyc2lvbiBmcmVxdWVuY3kKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CS8vIGRpdmlzb3IgZGl2aWRpbmcgbWFzdGVyIGNsb2NrIHRvIGdldCBjb252ZXJzaW9uIGZyZXF1ZW5jeQorCXVuc2lnbmVkIGludCBkbWFfY2hhbjsJLy8gZG1hIGNoYW5uZWwKKwl1aW50MTZfdCAqZG1hX2J1ZmZlclsyXTsKKwlkbWFfYWRkcl90IGRtYV9idWZmZXJfYWRkclsyXTsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF9idWZmZXI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGRtYV90cmFuc2Zlcl9zaXplOwkvLyB0YXJnZXQgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHBlciBkbWEgc2hvdAorCS8vIHVzZXItZGVmaW5lZCBhbmFsb2cgaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgZGVmaW5lZCBmcm9tIGNvbmZpZyBvcHRpb25zCisJc3RydWN0IGNvbWVkaV9scmFuZ2UgKnVzZXJfYWlfcmFuZ2VfdGFibGU7CisJc3RydWN0IGNvbWVkaV9scmFuZ2UgKnVzZXJfYW9fcmFuZ2VfdGFibGU7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLy8gZm9yIHRpbWVkIGludGVycnVwdAorCXZvbGF0aWxlIHNob3J0IHRpbWVyX3J1bm5pbmc7CisJdm9sYXRpbGUgc2hvcnQgdGltZXJfbW9kZTsJLy8gdHJ1ZSBpZiB1c2luZyB0aW1lciBtb2RlCit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2X3ByaXZhdGVfc3RydWN0ICopKGRldi0+cHJpdmF0ZSkpCisjZGVmaW5lIHRoaXNib2FyZCAoKHN0cnVjdCBkYXMxNl9ib2FyZCAqKShkZXYtPmJvYXJkX3B0cikpCisKK3N0YXRpYyBpbnQgZGFzMTZfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMCwgdG1wOworCWludCBnYWluLCBzdGFydF9jaGFuLCBpOworCWludCBtYXNrOworCisJLyogbWFrZSBzdXJlIHRyaWdnZXJzIGFyZSB2YWxpZCAqLworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJbWFzayA9IFRSSUdfRk9MTE9XOworCS8vIGlmIGJvYXJkIHN1cHBvcnRzIGJ1cnN0IG1vZGUKKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApCisJCW1hc2sgfD0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gbWFzazsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwltYXNrID0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCS8vIGlmIGJvYXJkIHN1cHBvcnRzIGJ1cnN0IG1vZGUKKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApCisJCW1hc2sgfD0gVFJJR19OT1c7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBtYXNrOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCS8vIG1ha2Ugc3VyZSBzY2FuX2JlZ2luX3NyYyBhbmQgY29udmVydF9zcmMgZG9udCBjb25mbGljdAorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCS8vIGNoZWNrIGFnYWluc3QgbWF4aW11bSBmcmVxdWVuY3kKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJdGhpc2JvYXJkLT5haV9zcGVlZCAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8vIHN0ZXAgNDogZml4IHVwIGFyZ3VtZW50cworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IHRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCS8vIHNldCBkaXZpc29ycywgY29ycmVjdCB0aW1pbmcgYXJndW1lbnRzCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihkZXZwcml2LT5jbG9ja2Jhc2UsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+c2Nhbl9iZWdpbl9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyICs9ICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IHRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCS8vIHNldCBkaXZpc29ycywgY29ycmVjdCB0aW1pbmcgYXJndW1lbnRzCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihkZXZwcml2LT5jbG9ja2Jhc2UsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyICs9ICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZyk7CisJfQorCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlnYWluID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCXN0YXJ0X2NoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQkoc3RhcnRfY2hhbiArIGkpICUgcy0+bl9jaGFuKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQkJZXJyKys7CisJCQl9CisJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgIT0gZ2FpbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNl9jbWRfZXhlYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBieXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJhbmdlOworCisJaWYgKGRldnByaXYtPmRtYV9jaGFuID09IDAgfHwgKGRldi0+aXJxID09IDAKKwkJCSYmIGRldnByaXYtPnRpbWVyX21vZGUgPT0gMCkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJpcnEgKG9yIHVzZSBvZiAndGltZXIgbW9kZScpIGRtYSByZXF1aXJlZCB0byBleGVjdXRlIGNvbWVkaV9jbWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfUlQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJpc2EgZG1hIHRyYW5zZmVycyBjYW5ub3QgYmUgcGVyZm9ybWVkIHdpdGggVFJJR19SVCwgYWJvcnRpbmciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldnByaXYtPmFkY19ieXRlX2NvdW50ID0KKwkJY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuICogc2l6ZW9mKHVpbnQxNl90KTsKKworCS8vIGRpc2FibGUgY29udmVyc2lvbnMgZm9yIGRhczE2MDAgbW9kZQorCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKERBUzE2MDBfQ09OVl9ESVNBQkxFLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQ09OVik7CisJfQorCS8vIHNldCBzY2FuIGxpbWl0cworCWJ5dGUgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCWJ5dGUgfD0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2NtZC0+Y2hhbmxpc3RfbGVuIC0gMV0pIDw8IDQ7CisJb3V0YihieXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X01VWCk7CisKKwkvKiBzZXQgZ2FpbiAodGhpcyBpcyBhbHNvIGJ1cnN0IHJhdGUgcmVnaXN0ZXIgYnV0IGFjY29yZGluZyB0bworCSAqIGNvbXB1dGVyIGJvYXJkcyBtYW51YWwsIGJ1cnN0IHJhdGUgZG9lcyBub3RoaW5nLCBldmVuIG9uIGtlaXRobGV5IGNhcmRzKSAqLworCWlmICh0aGlzYm9hcmQtPmFpX3BnICE9IGRhczE2X3BnX25vbmUpIHsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJb3V0YigoZGFzMTZfZ2Fpbmxpc3RzW3RoaXNib2FyZC0+YWlfcGddKVtyYW5nZV0sCisJCQlkZXYtPmlvYmFzZSArIERBUzE2X0dBSU4pOworCX0KKworCS8qIHNldCBjb3VudGVyIG1vZGUgYW5kIGNvdW50cyAqLworCWNtZC0+Y29udmVydF9hcmcgPQorCQlkYXMxNl9zZXRfcGFjZXIoZGV2LCBjbWQtPmNvbnZlcnRfYXJnLAorCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwlERUJVR19QUklOVCgicGFjZXIgcGVyaW9kOiAlZCBuc1xuIiwgY21kLT5jb252ZXJ0X2FyZyk7CisKKwkvKiBlbmFibGUgY291bnRlcnMgKi8KKwlieXRlID0gMDsKKwkvKiBFbmFibGUgYnVyc3QgbW9kZSBpZiBhcHByb3ByaWF0ZS4gKi8KKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJCW91dGIoREFTMTYwMF9CVVJTVF9WQUwsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJCQkvLyBzZXQgYnVyc3QgbGVuZ3RoCisJCQlieXRlIHw9IEJVUlNUX0xFTl9CSVRTKGNtZC0+Y2hhbmxpc3RfbGVuIC0gMSk7CisJCX0gZWxzZSB7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJCX0KKwl9CisJb3V0YihieXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X1BBQ0VSKTsKKworCS8vIHNldCB1cCBkbWEgdHJhbnNmZXIKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCS8qIGNsZWFyIGZsaXAtZmxvcCB0byBtYWtlIHN1cmUgMi1ieXRlIHJlZ2lzdGVycyBmb3IKKwkgKiBjb3VudCBhbmQgYWRkcmVzcyBnZXQgc2V0IGNvcnJlY3RseSAqLworCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWFfY2hhbik7CisJZGV2cHJpdi0+Y3VycmVudF9idWZmZXIgPSAwOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlcl9hZGRyW2RldnByaXYtPmN1cnJlbnRfYnVmZmVyXSk7CisJLy8gc2V0IGFwcHJvcHJpYXRlIHNpemUgb2YgdHJhbnNmZXIKKwlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA9IGRhczE2X3N1Z2dlc3RfdHJhbnNmZXJfc2l6ZShkZXYsICpjbWQpOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCS8vIHNldCB1cCBpbnRlcnJ1cHQKKwlpZiAoZGV2cHJpdi0+dGltZXJfbW9kZSkgeworCQlkZXZwcml2LT50aW1lcl9ydW5uaW5nID0gMTsKKwkJZGV2cHJpdi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lcl9wZXJpb2QoKTsKKwkJYWRkX3RpbWVyKCZkZXZwcml2LT50aW1lcik7CisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfkRBUzE2X0lOVEU7CisJfSBlbHNlIHsKKwkJLyogY2xlYXIgaW50ZXJydXB0IGJpdCAqLworCQlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKwkJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBEQVMxNl9JTlRFOworCX0KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IERNQV9FTkFCTEU7CisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+UEFDSU5HX01BU0s7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gRVhUX1BBQ0VSOworCWVsc2UKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBJTlRfUEFDRVI7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpOworCisJLyogRW5hYmxlIGNvbnZlcnNpb25zIGlmIHVzaW5nIGRhczE2MDAgbW9kZSAqLworCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzLCBkbWEgYW5kIHBhY2VyIGNsb2NrZWQgY29udmVyc2lvbnMgKi8KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlICY9IH5EQVMxNl9JTlRFICYgflBBQ0lOR19NQVNLICYgfkRNQV9FTkFCTEU7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpOworCWlmIChkZXZwcml2LT5kbWFfY2hhbikKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCisJLy8gZGlzYWJsZSBTVyB0aW1lcgorCWlmIChkZXZwcml2LT50aW1lcl9tb2RlICYmIGRldnByaXYtPnRpbWVyX3J1bm5pbmcpIHsKKwkJZGV2cHJpdi0+dGltZXJfcnVubmluZyA9IDA7CisJCWRlbF90aW1lcigmZGV2cHJpdi0+dGltZXIpOworCX0KKworCS8qIGRpc2FibGUgYnVyc3QgbW9kZSAqLworCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJfQorCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYXMxNl9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZfQ09OVFJPTCk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2X1BBQ0VSKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZfQ05UUl9DT05UUk9MKTsKK30KKworc3RhdGljIGludCBkYXMxNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IHJhbmdlOworCWludCBjaGFuOworCWludCBtc2IsIGxzYjsKKworCS8vIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgcGFjaW5nCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+REFTMTZfSU5URSAmIH5ETUFfRU5BQkxFICYgflBBQ0lOR19NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKTsKKworCS8qIHNldCBtdWx0aXBsZXhlciAqLworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwljaGFuIHw9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpIDw8IDQ7CisJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIERBUzE2X01VWCk7CisKKwkvKiBzZXQgZ2FpbiAqLworCWlmICh0aGlzYm9hcmQtPmFpX3BnICE9IGRhczE2X3BnX25vbmUpIHsKKwkJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJCW91dGIoKGRhczE2X2dhaW5saXN0c1t0aGlzYm9hcmQtPmFpX3BnXSlbcmFuZ2VdLAorCQkJZGV2LT5pb2Jhc2UgKyBEQVMxNl9HQUlOKTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXRiX3AoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9UUklHKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgREFTMTZfVElNRU9VVDsgaSsrKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpICYgQlVTWSkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gREFTMTZfVElNRU9VVCkgeworCQkJcnRfcHJpbnRrKCJkYXMxNjogdGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCW1zYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2X0FJX01TQik7CisJCWxzYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2X0FJX0xTQik7CisJCWlmICh0aGlzYm9hcmQtPmFpX25iaXRzID09IDEyKSB7CisJCQlkYXRhW25dID0gKChsc2IgPj4gNCkgJiAweGYpIHwgKG1zYiA8PCA0KTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbbl0gPSBsc2IgfCAobXNiIDw8IDgpOworCQl9CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBiaXRzOworCisJYml0cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2X0RJTykgJiAweGY7CisJZGF0YVsxXSA9IGJpdHM7CisJZGF0YVswXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNl9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHdiaXRzOworCisJLy8gb25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwlkYXRhWzBdICY9IDB4ZjsKKwl3Yml0cyA9IHMtPnN0YXRlOworCS8vIHplcm8gYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbWFza2VkIGJpdHMKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlzLT5zdGF0ZSA9IHdiaXRzOworCWRhdGFbMV0gPSB3Yml0czsKKworCW91dGIocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZfRElPKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczE2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgbHNiLCBtc2I7CisJaW50IGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWlmICh0aGlzYm9hcmQtPmFvX25iaXRzID09IDEyKSB7CisJCQlsc2IgPSAoZGF0YVtpXSA8PCA0KSAmIDB4ZmY7CisJCQltc2IgPSAoZGF0YVtpXSA+PiA0KSAmIDB4ZmY7CisJCX0gZWxzZSB7CisJCQlsc2IgPSBkYXRhW2ldICYgMHhmZjsKKwkJCW1zYiA9IChkYXRhW2ldID4+IDgpICYgMHhmZjsKKwkJfQorCQlvdXRiKGxzYiwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9BT19MU0IoY2hhbikpOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9BT19NU0IoY2hhbikpOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpOworCisJaWYgKChzdGF0dXMgJiBEQVMxNl9JTlQpID09IDApIHsKKwkJREVCVUdfUFJJTlQoInNwdXJpb3VzIGludGVycnVwdFxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKwlkYXMxNl9pbnRlcnJ1cHQoZGV2KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGRhczE2X3RpbWVyX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGFyZzsKKworCWRhczE2X2ludGVycnVwdChkZXYpOworCisJaWYgKGRldnByaXYtPnRpbWVyX3J1bm5pbmcpCisJCW1vZF90aW1lcigmZGV2cHJpdi0+dGltZXIsIGppZmZpZXMgKyB0aW1lcl9wZXJpb2QoKSk7Cit9CisKKy8qIHRoZSBwYzEwNC1kYXMxNmpyIChhdCBsZWFzdCkgaGFzIHByb2JsZW1zIGlmIHRoZSBkbWEKKwl0cmFuc2ZlciBpcyBpbnRlcnJ1cHRlZCBpbiB0aGUgbWlkZGxlIG9mIHRyYW5zZmVycmluZworCWEgMTYgYml0IHNhbXBsZSwgc28gdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIHRvIGdldAorCWFuIGV2ZW4gdHJhbnNmZXIgY291bnQgYWZ0ZXIgZGlzYWJsaW5nIGRtYQorCWNoYW5uZWwuCisqLworc3RhdGljIGludCBkaXNhYmxlX2RtYV9vbl9ldmVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCByZXNpZHVlOworCWludCBpOworCXN0YXRpYyBjb25zdCBpbnQgZGlzYWJsZV9saW1pdCA9IDEwMDsKKwlzdGF0aWMgY29uc3QgaW50IGVuYWJsZV90aW1lb3V0ID0gMTAwOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwlyZXNpZHVlID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYV9jaGFuKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlzYWJsZV9saW1pdCAmJiAocmVzaWR1ZSAlIDIpOyArK2kpIHsKKwkJaW50IGo7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQlmb3IgKGogPSAwOyBqIDwgZW5hYmxlX3RpbWVvdXQ7ICsraikgeworCQkJaW50IG5ld19yZXNpZHVlOworCQkJY29tZWRpX3VkZWxheSgyKTsKKwkJCW5ld19yZXNpZHVlID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJCWlmIChuZXdfcmVzaWR1ZSAhPSByZXNpZHVlKQorCQkJCWJyZWFrOworCQl9CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWFfY2hhbik7CisJfQorCWlmIChpID09IGRpc2FibGVfbGltaXQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IGFuIGV2ZW4gZG1hIHRyYW5zZmVyLCBjb3VsZCBiZSB0cm91YmxlLiIpOworCX0KKwlyZXR1cm4gcmVzaWR1ZTsKK30KKworc3RhdGljIHZvaWQgZGFzMTZfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzLCBzcGluX2ZsYWdzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCWludCBudW1fYnl0ZXMsIHJlc2lkdWU7CisJaW50IGJ1ZmZlcl9pbmRleDsKKworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuOworCX0KKwkvLyBpbml0aWFsaXplIGFzeW5jIGhlcmUgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBOVUxMCisJYXN5bmMgPSBzLT5hc3luYzsKKwljbWQgPSAmYXN5bmMtPmNtZDsKKworCWlmIChkZXZwcml2LT5kbWFfY2hhbiA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpbnRlcnJ1cHQgd2l0aCBubyBkbWEgY2hhbm5lbD8iKTsKKwkJcmV0dXJuOworCX0KKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgc3Bpbl9mbGFncyk7CisJaWYgKChkZXZwcml2LT5jb250cm9sX3N0YXRlICYgRE1BX0VOQUJMRSkgPT0gMCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgc3Bpbl9mbGFncyk7CisJCURFQlVHX1BSSU5UKCJpbnRlcnJ1cHQgd2hpbGUgZG1hIGRpc2FibGVkP1xuIik7CisJCXJldHVybjsKKwl9CisKKwlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWFfY2hhbik7CisJcmVzaWR1ZSA9IGRpc2FibGVfZG1hX29uX2V2ZW4oZGV2KTsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgcG9pbnRzIHRvIHJlYWQKKwlpZiAocmVzaWR1ZSA+IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyZXNpZHVlID4gdHJhbnNmZXIgc2l6ZSFcbiIpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCW51bV9ieXRlcyA9IDA7CisJfSBlbHNlCisJCW51bV9ieXRlcyA9IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIC0gcmVzaWR1ZTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgbnVtX2J5dGVzID49IGRldnByaXYtPmFkY19ieXRlX2NvdW50KSB7CisJCW51bV9ieXRlcyA9IGRldnByaXYtPmFkY19ieXRlX2NvdW50OworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCisJYnVmZmVyX2luZGV4ID0gZGV2cHJpdi0+Y3VycmVudF9idWZmZXI7CisJZGV2cHJpdi0+Y3VycmVudF9idWZmZXIgPSAoZGV2cHJpdi0+Y3VycmVudF9idWZmZXIgKyAxKSAlIDI7CisJZGV2cHJpdi0+YWRjX2J5dGVfY291bnQgLT0gbnVtX2J5dGVzOworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBieXRlcyBmb3IgbmV4dCB0cmFuc2ZlcgorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+dGltZXJfbW9kZSA9PSAwICYmCisJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID4gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQpCisJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQ7CisKKwkvLyByZS1lbmFibGUgIGRtYQorCWlmICgoYXN5bmMtPmV2ZW50cyAmIENPTUVESV9DQl9FT0EpID09IDApIHsKKwkJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYV9jaGFuLAorCQkJZGV2cHJpdi0+ZG1hX2J1ZmZlcl9hZGRyW2RldnByaXYtPmN1cnJlbnRfYnVmZmVyXSk7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCS8qIHJlZW5hYmxlIGNvbnZlcnNpb25zIGZvciBkYXMxNjAwIG1vZGUsIChzdHVwaWQgaGFyZHdhcmUpICovCisJCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCAmJiBkZXZwcml2LT50aW1lcl9tb2RlID09IDApIHsKKwkJCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0NPTlYpOworCQl9CisJfQorCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBzcGluX2ZsYWdzKTsKKworCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlcltidWZmZXJfaW5kZXhdLCBudW1fYnl0ZXMpOworCisJY2ZjX2hhbmRsZV9ldmVudHMoZGV2LCBzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zZXRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBucywKKwlpbnQgcm91bmRpbmdfZmxhZ3MpCit7CisJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KGRldnByaXYtPmNsb2NrYmFzZSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCSYoZGV2cHJpdi0+ZGl2aXNvcjIpLCAmbnMsIHJvdW5kaW5nX2ZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCS8qIFdyaXRlIHRoZSB2YWx1ZXMgb2YgY3RyMSBhbmQgY3RyMiBpbnRvIGNvdW50ZXJzIDEgYW5kIDIgKi8KKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZfQ05UUjBfREFUQSwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsIDIpOworCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNl9DTlRSMF9EQVRBLCAwLCAyLCBkZXZwcml2LT5kaXZpc29yMiwgMik7CisKKwlyZXR1cm4gbnM7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ19kdW1wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURFQlVHX1BSSU5UKCIqKioqKioqKkRBUzE2MDAgUkVHSVNURVIgRFVNUCoqKioqKioqXG4iKTsKKwlERUJVR19QUklOVCgiREFTMTZfTVVYOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTZfTVVYKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2X0RJTzogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2X0RJTykpOworCURFQlVHX1BSSU5UKCJEQVMxNl9TVEFUVVM6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpKTsKKwlERUJVR19QUklOVCgiREFTMTZfQ09OVFJPTDogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpKTsKKwlERUJVR19QUklOVCgiREFTMTZfUEFDRVI6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9QQUNFUikpOworCURFQlVHX1BSSU5UKCJEQVMxNl9HQUlOOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTZfR0FJTikpOworCURFQlVHX1BSSU5UKCJEQVMxNl9DTlRSX0NPTlRST0w6ICV4XG4iLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9DTlRSX0NPTlRST0wpKTsKKwlERUJVR19QUklOVCgiREFTMTYwMF9DT05WOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2MDBfQlVSU1Q6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0JVUlNUKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2MDBfRU5BQkxFOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTYwMF9FTkFCTEUpKTsKKwlERUJVR19QUklOVCgiREFTMTYwMF9TVEFUVVNfQjogJXhcbiIsCisJCWluYihkZXYtPmlvYmFzZSArIERBUzE2MDBfU1RBVFVTX0IpKTsKK30KKworc3RhdGljIGludCBkYXMxNl9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgc3RhdHVzOworCWludCBkaW9iaXRzOworCisJLyogc3RhdHVzIGlzIGF2YWlsYWJsZSBvbiBhbGwgYm9hcmRzICovCisKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpOworCisJaWYgKChzdGF0dXMgJiBVTklQT0xBUikpIHsKKwkJZGV2cHJpdi0+YWlfdW5pcG9sYXIgPSAxOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3VuaXBvbGFyID0gMDsKKwl9CisKKwlpZiAoKHN0YXR1cyAmIERBUzE2X01VWEJJVCkpIHsKKwkJZGV2cHJpdi0+YWlfc2luZ2xlZW5kZWQgPSAxOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NpbmdsZWVuZGVkID0gMDsKKwl9CisKKwkvKiBkaW9iaXRzIGluZGljYXRlcyBib2FyZHMgKi8KKworCWRpb2JpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9ESU8pICYgMHhmMDsKKworCXByaW50aygiIGlkIGJpdHMgYXJlIDB4JTAyeFxuIiwgZGlvYml0cyk7CisJaWYgKHRoaXNib2FyZC0+aWQgIT0gZGlvYml0cykgeworCQlwcmludGsoIiByZXF1ZXN0ZWQgYm9hcmQncyBpZCBiaXRzIGFyZSAweCV4IChpZ25vcmUpXG4iLAorCQkJdGhpc2JvYXJkLT5pZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTYwMF9tb2RlX2RldGVjdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2MDBfU1RBVFVTX0IpOworCisJaWYgKHN0YXR1cyAmIERBUzE2MDBfQ0xLXzEwTUhaKSB7CisJCWRldnByaXYtPmNsb2NrYmFzZSA9IDEwMDsKKwkJcHJpbnRrKCIgMTBNSHogcGFjZXIgY2xvY2tcbiIpOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNsb2NrYmFzZSA9IDEwMDA7CisJCXByaW50aygiIDFNSHogcGFjZXIgY2xvY2tcbiIpOworCX0KKworCXJlZ19kdW1wKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCisgKiBPcHRpb25zIGxpc3Q6CisgKiAgIDAgIEkvTyBiYXNlCisgKiAgIDEgIElSUQorICogICAyICBETUEKKyAqICAgMyAgQ2xvY2sgc3BlZWQgKGluIE1IeikKKyAqLworCitzdGF0aWMgaW50IGRhczE2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGRtYV9jaGFuOworCWludCB0aW1lcl9tb2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNvbWVkaV9rcmFuZ2UgKnVzZXJfYWlfcmFuZ2UsICp1c2VyX2FvX3JhbmdlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisjaWYgMAorCWlycSA9IGl0LT5vcHRpb25zWzFdOworCXRpbWVyX21vZGUgPSBpdC0+b3B0aW9uc1s4XTsKKyNlbmRpZgorCS8qIGFsd2F5cyB1c2UgdGltZV9tb2RlIHNpbmNlIHVzaW5nIGlycSBjYW4gZHJvcCBzYW1wbGVzIHdoaWxlCisJICogd2FpdGluZyBmb3IgZG1hIGRvbmUgaW50ZXJydXB0IChkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMpICovCisJaXJxID0gMDsKKwl0aW1lcl9tb2RlID0gMTsKKwlpZiAodGltZXJfbW9kZSkKKwkJaXJxID0gMDsKKworCXByaW50aygiY29tZWRpJWQ6IGRhczE2OiIsIGRldi0+bWlub3IpOworCisJLy8gY2hlY2sgdGhhdCBjbG9jayBzZXR0aW5nIGlzIHZhbGlkCisJaWYgKGl0LT5vcHRpb25zWzNdKSB7CisJCWlmIChpdC0+b3B0aW9uc1szXSAhPSAwICYmCisJCQlpdC0+b3B0aW9uc1szXSAhPSAxICYmIGl0LT5vcHRpb25zWzNdICE9IDEwKSB7CisJCQlwcmludGsoIlxuIEludmFsaWQgb3B0aW9uLiAgTWFzdGVyIGNsb2NrIG11c3QgYmUgc2V0IHRvIDEgb3IgMTAgKE1IeilcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczE2X3ByaXZhdGVfc3RydWN0KSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0aGlzYm9hcmQtPnNpemUgPCAweDQwMCkgeworCQlwcmludGsoIiAweCUwNGx4LTB4JTA0bHhcbiIsIGlvYmFzZSwgaW9iYXNlICsgdGhpc2JvYXJkLT5zaXplKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNib2FyZC0+c2l6ZSwgImRhczE2IikpIHsKKwkJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgMHglMDRseC0weCUwNGx4IDB4JTA0bHgtMHglMDRseFxuIiwKKwkJCWlvYmFzZSwgaW9iYXNlICsgMHgwZiwKKwkJCWlvYmFzZSArIDB4NDAwLAorCQkJaW9iYXNlICsgMHg0MDAgKyAodGhpc2JvYXJkLT5zaXplICYgMHgzZmYpKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIDB4MTAsICJkYXMxNiIpKSB7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdDogIDB4JTA0bHgtMHglMDRseFxuIiwKKwkJCQlpb2Jhc2UsIGlvYmFzZSArIDB4MGYpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UgKyAweDQwMCwgdGhpc2JvYXJkLT5zaXplICYgMHgzZmYsCisJCQkJImRhczE2IikpIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGlvYmFzZSwgMHgxMCk7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdDogIDB4JTA0bHgtMHglMDRseFxuIiwKKwkJCQlpb2Jhc2UgKyAweDQwMCwKKwkJCQlpb2Jhc2UgKyAweDQwMCArICh0aGlzYm9hcmQtPnNpemUgJiAweDNmZikpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8vIHByb2JlIGlkIGJpdHMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGNvbnNpc3RlbnQKKwlpZiAoZGFzMTZfcHJvYmUoZGV2LCBpdCkpIHsKKwkJcHJpbnRrKCIgaWQgYml0cyBkbyBub3QgbWF0Y2ggc2VsZWN0ZWQgYm9hcmQsIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8vIGdldCBtYXN0ZXIgY2xvY2sgc3BlZWQKKwlpZiAodGhpc2JvYXJkLT5zaXplIDwgMHg0MDApIHsKKwkJaWYgKGl0LT5vcHRpb25zWzNdKQorCQkJZGV2cHJpdi0+Y2xvY2tiYXNlID0gMTAwMCAvIGl0LT5vcHRpb25zWzNdOworCQllbHNlCisJCQlkZXZwcml2LT5jbG9ja2Jhc2UgPSAxMDAwOwkvLyAxIE1IeiBkZWZhdWx0CisJfSBlbHNlIHsKKwkJZGFzMTYwMF9tb2RlX2RldGVjdChkZXYpOworCX0KKworCS8qIG5vdyBmb3IgdGhlIGlycSAqLworCWlmIChpcnEgPiAxICYmIGlycSA8IDgpIHsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkYXMxNl9kbWFfaW50ZXJydXB0LCAwLAorCQkJCQkiZGFzMTYiLCBkZXYpKSA8IDApCisJCQlyZXR1cm4gcmV0OworCQlkZXYtPmlycSA9IGlycTsKKwkJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgaXJxKTsKKwl9IGVsc2UgaWYgKGlycSA9PSAwKSB7CisJCXByaW50aygiICggbm8gaXJxICkiKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiBpbnZhbGlkIGlycVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIGluaXRpYWxpemUgZG1hCisJZG1hX2NoYW4gPSBpdC0+b3B0aW9uc1syXTsKKwlpZiAoZG1hX2NoYW4gPT0gMSB8fCBkbWFfY2hhbiA9PSAzKSB7CisJCS8vIGFsbG9jYXRlIGRtYSBidWZmZXJzCisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlkZXZwcml2LT5kbWFfYnVmZmVyW2ldID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoTlVMTCwKKwkJCQlEQVMxNl9ETUFfU0laRSwgJmRldnByaXYtPmRtYV9idWZmZXJfYWRkcltpXSk7CisJCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWFfY2hhbiwgImRhczE2IikpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAlaVxuIiwKKwkJCQlkbWFfY2hhbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5kbWFfY2hhbiA9IGRtYV9jaGFuOworCQlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYV9jaGFuLCBETUFfTU9ERV9SRUFEKTsKKwkJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJCXByaW50aygiICggZG1hID0gJXUpXG4iLCBkbWFfY2hhbik7CisJfSBlbHNlIGlmIChkbWFfY2hhbiA9PSAwKSB7CisJCXByaW50aygiICggbm8gZG1hIClcbiIpOworCX0gZWxzZSB7CisJCXByaW50aygiIGludmFsaWQgZG1hIGNoYW5uZWxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBnZXQgYW55IHVzZXItZGVmaW5lZCBpbnB1dCByYW5nZQorCWlmICh0aGlzYm9hcmQtPmFpX3BnID09IGRhczE2X3BnX25vbmUgJiYKKwkJKGl0LT5vcHRpb25zWzRdIHx8IGl0LT5vcHRpb25zWzVdKSkgeworCQkvLyBhbGxvY2F0ZSBzaW5nbGUtcmFuZ2UgcmFuZ2UgdGFibGUKKwkJZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2xyYW5nZSkgKyBzaXplb2Yoc3RydWN0IGNvbWVkaV9rcmFuZ2UpLAorCQkJR0ZQX0tFUk5FTCk7CisJCS8vIGluaXRpYWxpemUgYWkgcmFuZ2UKKwkJZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZS0+bGVuZ3RoID0gMTsKKwkJdXNlcl9haV9yYW5nZSA9IGRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUtPnJhbmdlOworCQl1c2VyX2FpX3JhbmdlLT5taW4gPSBpdC0+b3B0aW9uc1s0XTsKKwkJdXNlcl9haV9yYW5nZS0+bWF4ID0gaXQtPm9wdGlvbnNbNV07CisJCXVzZXJfYWlfcmFuZ2UtPmZsYWdzID0gVU5JVF92b2x0OworCX0KKwkvLyBnZXQgYW55IHVzZXItZGVmaW5lZCBvdXRwdXQgcmFuZ2UKKwlpZiAoaXQtPm9wdGlvbnNbNl0gfHwgaXQtPm9wdGlvbnNbN10pIHsKKwkJLy8gYWxsb2NhdGUgc2luZ2xlLXJhbmdlIHJhbmdlIHRhYmxlCisJCWRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUgPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9scmFuZ2UpICsgc2l6ZW9mKHN0cnVjdCBjb21lZGlfa3JhbmdlKSwKKwkJCUdGUF9LRVJORUwpOworCQkvLyBpbml0aWFsaXplIGFvIHJhbmdlCisJCWRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUtPmxlbmd0aCA9IDE7CisJCXVzZXJfYW9fcmFuZ2UgPSBkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlLT5yYW5nZTsKKwkJdXNlcl9hb19yYW5nZS0+bWluID0gaXQtPm9wdGlvbnNbNl07CisJCXVzZXJfYW9fcmFuZ2UtPm1heCA9IGl0LT5vcHRpb25zWzddOworCQl1c2VyX2FvX3JhbmdlLT5mbGFncyA9IFVOSVRfdm9sdDsKKwl9CisKKwlpZiAodGltZXJfbW9kZSkgeworCQlpbml0X3RpbWVyKCYoZGV2cHJpdi0+dGltZXIpKTsKKwkJZGV2cHJpdi0+dGltZXIuZnVuY3Rpb24gPSBkYXMxNl90aW1lcl9pbnRlcnJ1cHQ7CisJCWRldnByaXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJfQorCWRldnByaXYtPnRpbWVyX21vZGUgPSB0aW1lcl9tb2RlID8gMSA6IDA7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA1KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgKi8KKwlpZiAodGhpc2JvYXJkLT5haSkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwkJaWYgKGRldnByaXYtPmFpX3NpbmdsZWVuZGVkKSB7CisJCQlzLT5uX2NoYW4gPSAxNjsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDE2OworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9HUk9VTkQ7CisJCX0gZWxzZSB7CisJCQlzLT5uX2NoYW4gPSA4OworCQkJcy0+bGVuX2NoYW5saXN0ID0gODsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJfQorCQlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9uYml0cykgLSAxOworCQlpZiAoZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZSkgewkvLyB1c2VyIGRlZmluZWQgYWkgcmFuZ2UKKwkJCXMtPnJhbmdlX3RhYmxlID0gZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZTsKKwkJfSBlbHNlIGlmIChkZXZwcml2LT5haV91bmlwb2xhcikgeworCQkJcy0+cmFuZ2VfdGFibGUgPSBkYXMxNl9haV91bmlfbHJhbmdlc1t0aGlzYm9hcmQtPmFpX3BnXTsKKwkJfSBlbHNlIHsKKwkJCXMtPnJhbmdlX3RhYmxlID0gZGFzMTZfYWlfYmlwX2xyYW5nZXNbdGhpc2JvYXJkLT5haV9wZ107CisJCX0KKwkJcy0+aW5zbl9yZWFkID0gdGhpc2JvYXJkLT5haTsKKwkJcy0+ZG9fY21kdGVzdCA9IGRhczE2X2NtZF90ZXN0OworCQlzLT5kb19jbWQgPSBkYXMxNl9jbWRfZXhlYzsKKwkJcy0+Y2FuY2VsID0gZGFzMTZfY2FuY2VsOworCQlzLT5tdW5nZSA9IGRhczE2X2FpX211bmdlOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gKi8KKwlpZiAodGhpc2JvYXJkLT5hbykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YW9fbmJpdHMpIC0gMTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUpIHsJLy8gdXNlciBkZWZpbmVkIGFvIHJhbmdlCisJCQlzLT5yYW5nZV90YWJsZSA9IGRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGU7CisJCX0gZWxzZSB7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQl9CisJCXMtPmluc25fd3JpdGUgPSB0aGlzYm9hcmQtPmFvOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGkgKi8KKwlpZiAodGhpc2JvYXJkLT5kaSkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gNDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHRoaXNib2FyZC0+ZGk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBkbyAqLworCWlmICh0aGlzYm9hcmQtPmRvXykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gNDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHRoaXNib2FyZC0+ZG9fOworCQkvLyBpbml0aWFsaXplIGRpZ2l0YWwgb3V0cHV0IGxpbmVzCisJCW91dGIocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZfRElPKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCS8qIDgyNTUgKi8KKwlpZiAodGhpc2JvYXJkLT5pODI1NV9vZmZzZXQgIT0gMCkgeworCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgKGRldi0+aW9iYXNlICsKKwkJCQl0aGlzYm9hcmQtPmk4MjU1X29mZnNldCkpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJZGFzMTZfcmVzZXQoZGV2KTsKKwkvKiBzZXQgdGhlIGludGVycnVwdCBsZXZlbCAqLworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgPSBEQVMxNl9JUlEoZGV2LT5pcnEpOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKTsKKworCS8vIHR1cm4gb24gZGFzMTYwMCBtb2RlIGlmIGF2YWlsYWJsZQorCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKERBUzE2MDBfRU5BQkxFX1ZBTCwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0VOQUJMRSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0NPTlYpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczE2OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJZGFzMTZfcmVzZXQoZGV2KTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyA0KTsKKworCWlmIChkZXZwcml2KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSkKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KE5VTEwsIERBUzE2X0RNQV9TSVpFLAorCQkJCQlkZXZwcml2LT5kbWFfYnVmZmVyW2ldLAorCQkJCQlkZXZwcml2LT5kbWFfYnVmZmVyX2FkZHJbaV0pOworCQl9CisJCWlmIChkZXZwcml2LT5kbWFfY2hhbikKKwkJCWZyZWVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUpCisJCQlrZnJlZShkZXZwcml2LT51c2VyX2FpX3JhbmdlX3RhYmxlKTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUpCisJCQlrZnJlZShkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlKTsKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXYtPmlvYmFzZSkgeworCQlpZiAodGhpc2JvYXJkLT5zaXplIDwgMHg0MDApIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzYm9hcmQtPnNpemUpOworCQl9IGVsc2UgeworCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIDB4MTApOworCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UgKyAweDQwMCwKKwkJCQl0aGlzYm9hcmQtPnNpemUgJiAweDNmZik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNik7CisKKy8vIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBzdWdnZXN0cyBhIGRtYSB0cmFuc2ZlciBzaXplIGluIGJ5dGVzCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2X3N1Z2dlc3RfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgdGltZXIgaW50ZXJydXB0LCB3ZSBkb24ndCBjYXJlIGhvdyBsb25nIGl0CisJICogd2lsbCB0YWtlIHRvIGNvbXBsZXRlIHRyYW5zZmVyIHNpbmNlIGl0IHdpbGwgYmUgaW50ZXJydXB0ZWQKKwkgKiBieSB0aW1lciBpbnRlcnJ1cHQgKi8KKwlpZiAoZGV2cHJpdi0+dGltZXJfbW9kZSkKKwkJcmV0dXJuIERBUzE2X0RNQV9TSVpFOworCisJLyogb3RoZXJ3aXNlLCB3ZSBhcmUgcmVseWluZyBvbiBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0LAorCSAqIHNvIHBpY2sgYSByZWFzb25hYmxlIHNpemUgKi8KKwlpZiAoY21kLmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCisJCWZyZXEgPSAxMDAwMDAwMDAwIC8gY21kLmNvbnZlcnRfYXJnOworCWVsc2UgaWYgKGNtZC5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQlmcmVxID0gKDEwMDAwMDAwMDAgLyBjbWQuc2Nhbl9iZWdpbl9hcmcpICogY21kLmNoYW5saXN0X2xlbjsKKwkvLyByZXR1cm4gc29tZSBkZWZhdWx0IHZhbHVlCisJZWxzZQorCQlmcmVxID0gMHhmZmZmZmZmZjsKKworCWlmIChjbWQuZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCXNpemUgPSBzYW1wbGVfc2l6ZSAqIGNtZC5jaGFubGlzdF9sZW47CisJfSBlbHNlIHsKKwkJLy8gbWFrZSBidWZmZXIgZmlsbCBpbiBubyBtb3JlIHRoYW4gMS8zIHNlY29uZAorCQlzaXplID0gKGZyZXEgLyAzKSAqIHNhbXBsZV9zaXplOworCX0KKworCS8vIHNldCBhIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSBhbGxvd2VkCisJaWYgKHNpemUgPiBEQVMxNl9ETUFfU0laRSkKKwkJc2l6ZSA9IERBUzE2X0RNQV9TSVpFIC0gREFTMTZfRE1BX1NJWkUgJSBzYW1wbGVfc2l6ZTsKKwllbHNlIGlmIChzaXplIDwgc2FtcGxlX3NpemUpCisJCXNpemUgPSBzYW1wbGVfc2l6ZTsKKworCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBzaXplID4gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQpCisJCXNpemUgPSBkZXZwcml2LT5hZGNfYnl0ZV9jb3VudDsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBkYXMxNl9haV9tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXZvaWQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgc3RhcnRfY2hhbl9pbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICpkYXRhID0gYXJyYXk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQlkYXRhW2ldID0gbGUxNl90b19jcHUoZGF0YVtpXSk7CisJCWlmICh0aGlzYm9hcmQtPmFpX25iaXRzID09IDEyKSB7CisJCQlkYXRhW2ldID0gKGRhdGFbaV0gPj4gNCkgJiAweGZmZjsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNm0xLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDIzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCkBAIC0wLDAgKzEsNzY1IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczE2bTEuYworICAgIENJTy1EQVMxNi9NMSBkcml2ZXIKKyAgICBBdXRob3I6IEZyYW5rIE1vcmkgSGVzcywgYmFzZWQgb24gY29kZSBmcm9tIHRoZSBkYXMxNgorICAgICAgZHJpdmVyLgorICAgIENvcHlyaWdodCAoQykgMjAwMSBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGRhczE2bTEKK0Rlc2NyaXB0aW9uOiBDSU8tREFTMTYvTTEKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGV2aWNlczogW01lYXN1cmVtZW50IENvbXB1dGluZ10gQ0lPLURBUzE2L00xIChjaW8tZGFzMTYvbTEpCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGEgc2luZ2xlIGJvYXJkIC0gdGhlIENJTy1EQVMxNi9NMS4KK0FzIGZhciBhcyBJIGtub3csIHRoZXJlIGFyZSBubyBvdGhlciBib2FyZHMgdGhhdCBoYXZlCit0aGUgc2FtZSByZWdpc3RlciBsYXlvdXQuICBFdmVuIHRoZSBDSU8tREFTMTYvTTEvMTYgaXMKK3NpZ25pZmljYW50bHkgZGlmZmVyZW50LgorCitJIHdhcyBfYmFyZWx5XyBhYmxlIHRvIHJlYWNoIHRoZSBmdWxsIDEgTUh6IGNhcGFiaWxpdHkKK29mIHRoaXMgYm9hcmQsIHVzaW5nIGEgaGFyZCByZWFsLXRpbWUgaW50ZXJydXB0Cisoc2V0IHRoZSBUUklHX1JUIGZsYWcgaW4geW91ciBzdHJ1Y3QgY29tZWRpX2NtZCBhbmQgdXNlCitydGxpbnV4IG9yIFJUQUkpLiAgVGhlIGJvYXJkIGNhbid0IGRvIGRtYSwgc28gdGhlIGJvdHRsZW5lY2sgaXMKK3B1bGxpbmcgdGhlIGRhdGEgYWNyb3NzIHRoZSBJU0EgYnVzLiAgSSB0aW1lZCB0aGUgaW50ZXJydXB0CitoYW5kbGVyLCBhbmQgaXQgdG9vayBteSBjb21wdXRlciB+NDcwIG1pY3Jvc2Vjb25kcyB0byBwdWxsIDUxMgorc2FtcGxlcyBmcm9tIHRoZSBib2FyZC4gIFNvIGF0IDEgTWh6IHNhbXBsaW5nIHJhdGUsCitleHBlY3QgeW91ciBDUFUgdG8gYmUgc3BlbmRpbmcgYWxtb3N0IGFsbCBvZiBpdHMKK3RpbWUgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLgorCitUaGlzIGJvYXJkIGhhcyBzb21lIHVudXN1YWwgcmVzdHJpY3Rpb25zIGZvciBpdHMgY2hhbm5lbC9nYWluIGxpc3QuICBJZiB0aGUKK2xpc3QgaGFzIDIgb3IgbW9yZSBjaGFubmVscyBpbiBpdCwgdGhlbiB0d28gY29uZGl0aW9ucyBtdXN0IGJlIHNhdGlzZmllZDoKKygxKSAtIGV2ZW4vb2RkIGNoYW5uZWxzIG11c3QgYXBwZWFyIGF0IGV2ZW4vb2RkIGluZGljZXMgaW4gdGhlIGxpc3QKKygyKSAtIHRoZSBsaXN0IG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBvZiBlbnRyaWVzLgorCitPcHRpb25zOgorICAgICAgICBbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKyAgICAgICAgWzFdIC0gaXJxIChvcHRpb25hbCwgYnV0IHlvdSBwcm9iYWJseSB3YW50IGl0KQorCitpcnEgY2FuIGJlIG9taXR0ZWQsIGFsdGhvdWdoIHRoZSBjbWQgaW50ZXJmYWNlIHdpbGwgbm90IHdvcmsgd2l0aG91dCBpdC4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgREFTMTZNMV9TSVpFIDE2CisjZGVmaW5lIERBUzE2TTFfU0laRTIgOAorCisjZGVmaW5lIERBUzE2TTFfWFRBTCAxMDAJLy8xMCBNSHogbWFzdGVyIGNsb2NrCisKKyNkZWZpbmUgRklGT19TSVpFIDEwMjQJCS8vIDEwMjQgc2FtcGxlIGZpZm8KKworLyoKKyAgICBDSU8tREFTMTZfTTEucGRmCisKKyAgICAiY2lvLWRhczE2L20xIgorCisgIDAJYS9kIGJpdHMgMC0zLCBtdXgJCXN0YXJ0IDEyIGJpdAorICAxCWEvZCBiaXRzIDQtMTEJCXVudXNlZAorICAyCXN0YXR1cwkJY29udHJvbAorICAzCWRpIDQgYml0CQlkbyA0IGJpdAorICA0CXVudXNlZAkJCWNsZWFyIGludGVycnVwdAorICA1CWludGVycnVwdCwgcGFjZXIKKyAgNgljaGFubmVsL2dhaW4gcXVldWUgYWRkcmVzcworICA3CWNoYW5uZWwvZ2FpbiBxdWV1ZSBkYXRhCisgIDg5YWIJODI1NAorICBjZGVmCTgyNTQKKyAgNDAwCTgyNTUKKyAgNDA0LTQwNyAJODI1NAorCisqLworCisjZGVmaW5lIERBUzE2TTFfQUkgICAgICAgICAgICAgMAkvLyAxNi1iaXQgd2lkZSByZWdpc3RlcgorI2RlZmluZSAgIEFJX0NIQU4oeCkgICAgICAgICAgICAgKCh4KSAmIDB4ZikKKyNkZWZpbmUgREFTMTZNMV9DUyAgICAgICAgICAgICAyCisjZGVmaW5lICAgRVhUX1RSSUdfQklUICAgICAgICAgICAweDEKKyNkZWZpbmUgICBPVlJVTiAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBJUlFEQVRBICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTZNMV9ESU8gICAgICAgICAgICAzCisjZGVmaW5lIERBUzE2TTFfQ0xFQVJfSU5UUiAgICAgNAorI2RlZmluZSBEQVMxNk0xX0lOVFJfQ09OVFJPTCAgIDUKKyNkZWZpbmUgICBFWFRfUEFDRVIgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgIElOVF9QQUNFUiAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgUEFDRVJfTUFTSyAgICAgICAgICAgICAweDMKKyNkZWZpbmUgICBJTlRFICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTZNMV9RVUVVRV9BRERSICAgICA2CisjZGVmaW5lIERBUzE2TTFfUVVFVUVfREFUQSAgICAgNworI2RlZmluZSAgIFFfQ0hBTih4KSAgICAgICAgICAgICAgKCh4KSAmIDB4NykKKyNkZWZpbmUgICBRX1JBTkdFKHgpICAgICAgICAgICAgICgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSAgIFVOSVBPTEFSICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBEQVMxNk0xXzgyNTRfRklSU1QgICAgICAgICAgICAgMHg4CisjZGVmaW5lIERBUzE2TTFfODI1NF9GSVJTVF9DTlRSTCAgICAgICAweGIKKyNkZWZpbmUgICBUT1RBTF9DTEVBUiAgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBEQVMxNk0xXzgyNTRfU0VDT05EICAgICAgICAgICAgMHhjCisjZGVmaW5lIERBUzE2TTFfODJDNTUgICAgICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSBEQVMxNk0xXzgyNTRfVEhJUkQgICAgICAgICAgICAgMHg0MDQKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczE2bTEgPSB7IDksCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJfQorfTsKKworc3RhdGljIGludCBkYXMxNm0xX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2bTFfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZtMV9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhczE2bTFfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGRhczE2bTFfY21kX2V4ZWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRhczE2bTFfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgaW50IGRhczE2bTFfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXMxNm0xX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGRhczE2bTFfaGFuZGxlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXR1cyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFzMTZtMV9zZXRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBucywKKwlpbnQgcm91bmRfZmxhZyk7CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9pcnFfYml0cyh1bnNpZ25lZCBpbnQgaXJxKTsKKworc3RydWN0IGRhczE2bTFfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGFpX3NwZWVkOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNm0xX2JvYXJkIGRhczE2bTFfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYvbTEiLAkvLyBDSU8tREFTMTZfTTEucGRmCisJICAgICAgYWlfc3BlZWQ6MTAwMCwJLy8gMU1IeiBtYXggc3BlZWQKKwkJfSwKK307CisKKyNkZWZpbmUgZGFzMTZtMV9udW1fYm9hcmRzICgoc2l6ZW9mKGRhczE2bTFfYm9hcmRzKSkgLyAoc2l6ZW9mKGRhczE2bTFfYm9hcmRzWzBdKSkpCisKK3N0YXRpYyBpbnQgZGFzMTZtMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkYXMxNm0xX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczE2bTEgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzMTZtMSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMTZtMV9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMTZtMV9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkYXMxNm0xX2JvYXJkc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOmRhczE2bTFfbnVtX2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YoZGFzMTZtMV9ib2FyZHNbMF0pLAorfTsKKworc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhZGNfY291bnQ7CS8vIG51bWJlciBvZiBzYW1wbGVzIGNvbXBsZXRlZAorCS8qIGluaXRpYWwgdmFsdWUgaW4gbG93ZXIgaGFsZiBvZiBoYXJkd2FyZSBjb252ZXJzaW9uIGNvdW50ZXIsCisJICogbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBuZXcgY291bnQgaGFzIGJlZW4gbG9hZGVkIGludG8KKwkgKiBjb3VudGVyIHlldCAobG9hZGVkIGJ5IGZpcnN0IHNhbXBsZSBjb252ZXJzaW9uKSAqLworCXUxNiBpbml0aWFsX2h3X2NvdW50OworCXNob3J0IGFpX2J1ZmZlcltGSUZPX1NJWkVdOworCXVuc2lnbmVkIGludCBkb19iaXRzOwkvLyBzYXZlcyBzdGF0dXMgb2YgZGlnaXRhbCBvdXRwdXQgYml0cworCXVuc2lnbmVkIGludCBkaXZpc29yMTsJLy8gZGl2aWRlcyBtYXN0ZXIgY2xvY2sgdG8gb2J0YWluIGNvbnZlcnNpb24gc3BlZWQKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CS8vIGRpdmlkZXMgbWFzdGVyIGNsb2NrIHRvIG9idGFpbiBjb252ZXJzaW9uIHNwZWVkCit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QgKikoZGV2LT5wcml2YXRlKSkKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczE2bTFfYm9hcmQgKikoZGV2LT5ib2FyZF9wdHIpKQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczE2bTEpOworCitzdGF0aWMgaW5saW5lIHNob3J0IG11bmdlX3NhbXBsZShzaG9ydCBkYXRhKQoreworCXJldHVybiAoZGF0YSA+PiA0KSAmIDB4ZmZmOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgZXJyID0gMCwgdG1wLCBpOworCisJLyogbWFrZSBzdXJlIHRyaWdnZXJzIGFyZSB2YWxpZCAqLworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCS8qIGFueSBjb3VudCBpcyBhbGxvd2VkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkvKiBjYWxjdWxhdGUgY291bnRlciB2YWx1ZXMgdGhhdCBnaXZlIGRlc2lyZWQgdGltaW5nICovCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihEQVMxNk0xX1hUQUwsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvLyBjaGVjayBjaGFubGlzdCBhZ2FpbnN0IGJvYXJkJ3MgcGVjdWxpYXJpdGllcworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJLy8gZXZlbi9vZGQgY2hhbm5lbHMgbXVzdCBnbyBpbnRvIGV2ZW4vb2RkIHF1ZXVlIGFkZHJlc3NlcworCQkJaWYgKChpICUgMikgIT0gKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgJSAyKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsICJiYWQgY2hhbmxpc3Q6XG4iCisJCQkJCSIgZXZlbi9vZGQgY2hhbm5lbHMgbXVzdCBnbyBoYXZlIGV2ZW4vb2RkIGNoYW5saXN0IGluZGljZXMiKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCQlpZiAoKGNtZC0+Y2hhbmxpc3RfbGVuICUgMikgIT0gMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY2hhbmxpc3QgbXVzdCBiZSBvZiBldmVuIGxlbmd0aCBvciBsZW5ndGggMSIpOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfY21kX2V4ZWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgYnl0ZSwgaTsKKworCWlmIChkZXYtPmlycSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpcnEgcmVxdWlyZWQgdG8gZXhlY3V0ZSBjb21lZGlfY21kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+SU5URSAmIH5QQUNFUl9NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwkvLyBzZXQgc29mdHdhcmUgY291bnQKKwlkZXZwcml2LT5hZGNfY291bnQgPSAwOworCS8qIEluaXRpYWxpemUgbG93ZXIgaGFsZiBvZiBoYXJkd2FyZSBjb3VudGVyLCB1c2VkIHRvIGRldGVybWluZSBob3cKKwkgKiBtYW55IHNhbXBsZXMgYXJlIGluIGZpZm8uICBWYWx1ZSBkb2Vzbid0IGFjdHVhbGx5IGxvYWQgaW50byBjb3VudGVyCisJICogdW50aWwgY291bnRlcidzIG5leHQgY2xvY2sgKHRoZSBuZXh0IGEvZCBjb252ZXJzaW9uKSAqLworCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1QsIDAsIDEsIDAsIDIpOworCS8qIHJlbWVtYmVyIGN1cnJlbnQgcmVhZGluZyBvZiBjb3VudGVyIHNvIHdlIGtub3cgd2hlbiBjb3VudGVyIGhhcworCSAqIGFjdHVhbGx5IGJlZW4gbG9hZGVkICovCisJZGV2cHJpdi0+aW5pdGlhbF9od19jb3VudCA9CisJCWk4MjU0X3JlYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1QsIDAsIDEpOworCS8qIHNldHVwIGNoYW5uZWwvZ2FpbiBxdWV1ZSAqLworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCW91dGIoaSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0FERFIpOworCQlieXRlID0gUV9DSEFOKENSX0NIQU4oY21kLT4KKwkJCQljaGFubGlzdFtpXSkpIHwgUV9SQU5HRShDUl9SQU5HRShjbWQtPgorCQkJCWNoYW5saXN0W2ldKSk7CisJCW91dGIoYnl0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0RBVEEpOworCX0KKworCS8qIHNldCBjb3VudGVyIG1vZGUgYW5kIGNvdW50cyAqLworCWNtZC0+Y29udmVydF9hcmcgPQorCQlkYXMxNm0xX3NldF9wYWNlcihkZXYsIGNtZC0+Y29udmVydF9hcmcsCisJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLy8gc2V0IGNvbnRyb2wgJiBzdGF0dXMgcmVnaXN0ZXIKKwlieXRlID0gMDsKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgZXh0ZXJuYWwgc3RhcnQgdHJpZ2dlciAoYWxzbyBib2FyZCBkaXNsaWtlcyBoYXZpbmcKKwkgKiBib3RoIHN0YXJ0IGFuZCBjb252ZXJzaW9uIHRyaWdnZXJzIGV4dGVybmFsIHNpbXVsdGFuZW91c2x5KSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCWJ5dGUgfD0gRVhUX1RSSUdfQklUOworCX0KKwlvdXRiKGJ5dGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9DUyk7CisJLyogY2xlYXIgaW50ZXJydXB0IGJpdCAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NMRUFSX0lOVFIpOworCisJLyogZW5hYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+UEFDRVJfTUFTSzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gSU5UX1BBQ0VSOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gRVhUX1BBQ0VSOworCX0KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IElOVEU7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfSU5UUl9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+SU5URSAmIH5QQUNFUl9NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgYnl0ZTsKKwljb25zdCBpbnQgdGltZW91dCA9IDEwMDA7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+SU5URSAmIH5QQUNFUl9NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwkvKiBzZXR1cCBjaGFubmVsL2dhaW4gcXVldWUgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZNMV9RVUVVRV9BRERSKTsKKwlieXRlID0gUV9DSEFOKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKSB8IFFfUkFOR0UoQ1JfUkFOR0UoaW5zbi0+CisJCQljaGFuc3BlYykpOworCW91dGIoYnl0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0RBVEEpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiBjbGVhciBJUlFEQVRBIGJpdCAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZNMV9DTEVBUl9JTlRSKTsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NTKSAmIElSUURBVEEpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJZGF0YVtuXSA9IG11bmdlX3NhbXBsZShpbncoZGV2LT5pb2Jhc2UpKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0RJTykgJiAweGY7CisJZGF0YVsxXSA9IGJpdHM7CisJZGF0YVswXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgd2JpdHM7CisKKwkvLyBvbmx5IHNldCBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZAorCWRhdGFbMF0gJj0gMHhmOworCXdiaXRzID0gZGV2cHJpdi0+ZG9fYml0czsKKwkvLyB6ZXJvIGJpdHMgdGhhdCBoYXZlIGJlZW4gbWFza2VkCisJd2JpdHMgJj0gfmRhdGFbMF07CisJLy8gc2V0IG1hc2tlZCBiaXRzCisJd2JpdHMgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJZGV2cHJpdi0+ZG9fYml0cyA9IHdiaXRzOworCWRhdGFbMV0gPSB3Yml0czsKKworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0RJTyk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkvLyBwcmV2ZW50IHJhY2Ugd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcgorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2TTFfQ1MpOworCWRhczE2bTFfaGFuZGxlcihkZXYsIHN0YXR1cyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gcy0+YXN5bmMtPmJ1Zl9yZWFkX2NvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZtMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCS8vIHByZXZlbnQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsKCkKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTZNMV9DUyk7CisKKwlpZiAoKHN0YXR1cyAmIChJUlFEQVRBIHwgT1ZSVU4pKSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJZGFzMTZtMV9oYW5kbGVyKGRldiwgc3RhdHVzKTsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NMRUFSX0lOVFIpOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXVuZ2Vfc2FtcGxlX2FycmF5KHNob3J0ICogYXJyYXksIHVuc2lnbmVkIGludCBudW1fZWxlbWVudHMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzOyBpKyspIHsKKwkJYXJyYXlbaV0gPSBtdW5nZV9zYW1wbGUoYXJyYXlbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgZGFzMTZtMV9oYW5kbGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJdTE2IG51bV9zYW1wbGVzOworCXUxNiBod19jb3VudGVyOworCisJcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJYXN5bmMgPSBzLT5hc3luYzsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwljbWQgPSAmYXN5bmMtPmNtZDsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgc2FtcGxlcyBhcmUgaW4gZmlmbworCWh3X2NvdW50ZXIgPSBpODI1NF9yZWFkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X0ZJUlNULCAwLCAxKTsKKwkvKiBtYWtlIHN1cmUgaGFyZHdhcmUgY291bnRlciByZWFkaW5nIGlzIG5vdCBib2d1cyBkdWUgdG8gaW5pdGlhbCB2YWx1ZQorCSAqIG5vdCBoYXZpbmcgYmVlbiBsb2FkZWQgeWV0ICovCisJaWYgKGRldnByaXYtPmFkY19jb3VudCA9PSAwICYmIGh3X2NvdW50ZXIgPT0gZGV2cHJpdi0+aW5pdGlhbF9od19jb3VudCkgeworCQludW1fc2FtcGxlcyA9IDA7CisJfSBlbHNlIHsKKwkJLyogVGhlIGNhbGN1bGF0aW9uIG9mIG51bV9zYW1wbGVzIGxvb2tzIG9kZCwgYnV0IGl0IHVzZXMgdGhlIGZvbGxvd2luZyBmYWN0cy4KKwkJICogMTYgYml0IGhhcmR3YXJlIGNvdW50ZXIgaXMgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZSBvZiB6ZXJvICh3aGljaCByZWFsbHkKKwkJICogbWVhbnMgMHgxMDAwKS4gIFRoZSBjb3VudGVyIGRlY3JlbWVudHMgYnkgb25lIG9uIGVhY2ggY29udmVyc2lvbgorCQkgKiAod2hlbiB0aGUgY291bnRlciBkZWNyZW1lbnRzIGZyb20gemVybyBpdCBnb2VzIHRvIDB4ZmZmZikuICBudW1fc2FtcGxlcworCQkgKiBpcyBhIDE2IGJpdCB2YXJpYWJsZSwgc28gaXQgd2lsbCByb2xsIG92ZXIgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gdGhlCisJCSAqIGhhcmR3YXJlIGNvdW50ZXIuICBXb3JrIGl0IG91dCwgYW5kIHRoaXMgaXMgd2hhdCB5b3UgZ2V0LiAqLworCQludW1fc2FtcGxlcyA9IC1od19jb3VudGVyIC0gZGV2cHJpdi0+YWRjX2NvdW50OworCX0KKwkvLyBjaGVjayBpZiB3ZSBvbmx5IG5lZWQgc29tZSBvZiB0aGUgcG9pbnRzCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAobnVtX3NhbXBsZXMgPiBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4pCisJCQludW1fc2FtcGxlcyA9IGNtZC0+c3RvcF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwl9CisJLy8gbWFrZSBzdXJlIHdlIGRvbnQgdHJ5IHRvIGdldCB0b28gbWFueSBwb2ludHMgaWYgZmlmbyBoYXMgb3ZlcnJ1bgorCWlmIChudW1fc2FtcGxlcyA+IEZJRk9fU0laRSkKKwkJbnVtX3NhbXBsZXMgPSBGSUZPX1NJWkU7CisJaW5zdyhkZXYtPmlvYmFzZSwgZGV2cHJpdi0+YWlfYnVmZmVyLCBudW1fc2FtcGxlcyk7CisJbXVuZ2Vfc2FtcGxlX2FycmF5KGRldnByaXYtPmFpX2J1ZmZlciwgbnVtX3NhbXBsZXMpOworCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfYnVmZmVyLAorCQludW1fc2FtcGxlcyAqIHNpemVvZihzaG9ydCkpOworCWRldnByaXYtPmFkY19jb3VudCArPSBudW1fc2FtcGxlczsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGRldnByaXYtPmFkY19jb3VudCA+PSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4pIHsJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCisJCQlkYXMxNm0xX2NhbmNlbChkZXYsIHMpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisJfQorCisJLyogdGhpcyBwcm9iYWJseSB3b24ndCBjYXRjaCBvdmVycnVucyBzaW5jZSB0aGUgY2FyZCBkb2Vzbid0IGdlbmVyYXRlCisJICogb3ZlcnJ1biBpbnRlcnJ1cHRzLCBidXQgd2UgbWlnaHQgYXMgd2VsbCB0cnkgKi8KKwlpZiAoc3RhdHVzICYgT1ZSVU4pIHsKKwkJZGFzMTZtMV9jYW5jZWwoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXJyb3IoZGV2LCAiZmlmbyBvdmVyZmxvdyIpOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSB0aW1lIGluIG5hbm9zZWNvbmRzIGFuZCBzZXRzIHRoZSAgICAgKgorICogMiBwYWNlciBjbG9ja3MgdG8gdGhlIGNsb3Nlc3QgZnJlcXVlbmN5IHBvc3NpYmxlLiBJdCBhbHNvICAqCisgKiByZXR1cm5zIHRoZSBhY3R1YWwgc2FtcGxpbmcgcGVyaW9kLiAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2bTFfc2V0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnMsCisJaW50IHJvdW5kaW5nX2ZsYWdzKQoreworCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihEQVMxNk0xX1hUQUwsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJm5zLCByb3VuZGluZ19mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisKKwkvKiBXcml0ZSB0aGUgdmFsdWVzIG9mIGN0cjEgYW5kIGN0cjIgaW50byBjb3VudGVycyAxIGFuZCAyICovCisJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE2TTFfODI1NF9TRUNPTkQsIDAsIDEsIGRldnByaXYtPmRpdmlzb3IxLAorCQkyKTsKKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X1NFQ09ORCwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsCisJCTIpOworCisJcmV0dXJuIG5zOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfaXJxX2JpdHModW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIDEwOgorCQlyZXQgPSAweDA7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCXJldCA9IDB4MTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcmV0ID0gMHgyOworCQlicmVhazsKKwljYXNlIDE1OgorCQlyZXQgPSAweDM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0ID0gMHg0OworCQlicmVhazsKKwljYXNlIDM6CisJCXJldCA9IDB4NTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlyZXQgPSAweDY7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcmV0ID0gMHg3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKHJldCA8PCA0KTsKK30KKworLyoKKyAqIE9wdGlvbnMgbGlzdDoKKyAqICAgMCAgSS9PIGJhc2UKKyAqICAgMSAgSVJRCisgKi8KKworc3RhdGljIGludCBkYXMxNm0xX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKworCXByaW50aygiY29tZWRpJWQ6IGRhczE2bTE6IiwgZGV2LT5taW5vcik7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgZGFzMTZtMV9wcml2YXRlX3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlwcmludGsoIiBpbyAweCVseC0weCVseCAweCVseC0weCVseCIsCisJCWlvYmFzZSwgaW9iYXNlICsgREFTMTZNMV9TSVpFLAorCQlpb2Jhc2UgKyBEQVMxNk0xXzgyQzU1LCBpb2Jhc2UgKyBEQVMxNk0xXzgyQzU1ICsgREFTMTZNMV9TSVpFMik7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERBUzE2TTFfU0laRSwgZHJpdmVyX2RhczE2bTEuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlICsgREFTMTZNMV84MkM1NSwgREFTMTZNMV9TSVpFMiwKKwkJCWRyaXZlcl9kYXMxNm0xLmRyaXZlcl9uYW1lKSkgeworCQlyZWxlYXNlX3JlZ2lvbihpb2Jhc2UsIERBUzE2TTFfU0laRSk7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogbm93IGZvciB0aGUgaXJxICovCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJLy8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkCisJaWYgKGRhczE2bTFfaXJxX2JpdHMoaXJxKSA+PSAwKSB7CisJCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRhczE2bTFfaW50ZXJydXB0LCAwLAorCQkJZHJpdmVyX2RhczE2bTEuZHJpdmVyX25hbWUsIGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoIiwgaXJxIHVuYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJCXByaW50aygiLCBpcnEgJXVcbiIsIGlycSk7CisJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQlwcmludGsoIiwgbm8gaXJxXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiwgaW52YWxpZCBpcnFcbiIKKwkJCSIgdmFsaWQgaXJxcyBhcmUgMiwgMywgNSwgNywgMTAsIDExLCAxMiwgb3IgMTVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDg7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX0RJRkY7CisJcy0+bGVuX2NoYW5saXN0ID0gMjU2OworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhczE2bTE7CisJcy0+aW5zbl9yZWFkID0gZGFzMTZtMV9haV9yaW5zbjsKKwlzLT5kb19jbWR0ZXN0ID0gZGFzMTZtMV9jbWRfdGVzdDsKKwlzLT5kb19jbWQgPSBkYXMxNm0xX2NtZF9leGVjOworCXMtPmNhbmNlbCA9IGRhczE2bTFfY2FuY2VsOworCXMtPnBvbGwgPSBkYXMxNm0xX3BvbGw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBkaSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE2bTFfZGlfcmJpdHM7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE2bTFfZG9fd2JpdHM7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiA4MjU1ICovCisJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlICsgREFTMTZNMV84MkM1NSk7CisKKwkvLyBkaXNhYmxlIHVwcGVyIGhhbGYgb2YgaGFyZHdhcmUgY29udmVyc2lvbiBjb3VudGVyIHNvIGl0IGRvZXNuJ3QgbWVzcyB3aXRoIHVzCisJb3V0YihUT1RBTF9DTEVBUiwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1RfQ05UUkwpOworCisJLy8gaW5pdGlhbGl6ZSBkaWdpdGFsIG91dHB1dCBsaW5lcworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0RJTyk7CisKKwkvKiBzZXQgdGhlIGludGVycnVwdCBsZXZlbCAqLworCWlmIChkZXYtPmlycSkKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSA9IGRhczE2bTFfaXJxX2JpdHMoZGV2LT5pcnEpOworCWVsc2UKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSA9IDA7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfSU5UUl9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczE2bTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKy8vICAgICAgZGFzMTZtMV9yZXNldChkZXYpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDMpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERBUzE2TTFfU0laRSk7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlICsgREFTMTZNMV84MkM1NSwgREFTMTZNMV9TSVpFMik7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRjZDRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYwpAQCAtMCwwICsxLDE3NTggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCisgICAgRHJpdmVyIGZvciBLZWl0bGV5IGRhczE3MDAvZGFzMTgwMCBzZXJpZXMgYm9hcmRzCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogZGFzMTgwMAorRGVzY3JpcHRpb246IEtlaXRobGV5IE1ldHJhYnl0ZSBEQVMxODAwICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXZpY2VzOiBbS2VpdGhsZXkgTWV0cmFieXRlXSBEQVMtMTcwMVNUIChkYXMtMTcwMXN0KSwKKyAgREFTLTE3MDFTVC1EQSAoZGFzLTE3MDFzdC1kYSksIERBUy0xNzAxL0FPIChkYXMtMTcwMWFvKSwKKyAgREFTLTE3MDJTVCAoZGFzLTE3MDJzdCksIERBUy0xNzAyU1QtREEgKGRhcy0xNzAyc3QtZGEpLAorICBEQVMtMTcwMkhSIChkYXMtMTcwMmhyKSwgREFTLTE3MDJIUi1EQSAoZGFzLTE3MDJoci1kYSksCisgIERBUy0xNzAyL0FPIChkYXMtMTcwMmFvKSwgREFTLTE4MDFTVCAoZGFzLTE4MDFzdCksCisgIERBUy0xODAxU1QtREEgKGRhcy0xODAxc3QtZGEpLCBEQVMtMTgwMUhDIChkYXMtMTgwMWhjKSwKKyAgREFTLTE4MDFBTyAoZGFzLTE4MDFhbyksIERBUy0xODAyU1QgKGRhcy0xODAyc3QpLAorICBEQVMtMTgwMlNULURBIChkYXMtMTgwMnN0LWRhKSwgREFTLTE4MDJIUiAoZGFzLTE4MDJociksCisgIERBUy0xODAySFItREEgKGRhcy0xODAyaHItZGEpLCBEQVMtMTgwMkhDIChkYXMtMTgwMmhjKSwKKyAgREFTLTE4MDJBTyAoZGFzLTE4MDJhbykKK1N0YXR1czogd29ya3MKKworVGhlIHdhdmVmb3JtIGFuYWxvZyBvdXRwdXQgb24gdGhlICdhbycgY2FyZHMgaXMgbm90IHN1cHBvcnRlZC4KK0lmIHlvdSBuZWVkIGl0LCBzZW5kIG1lIChGcmFuayBIZXNzKSBhbiBlbWFpbC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIG9yIGV4dGVybmFsbHkgdHJpZ2dlcmVkIGNvbnZlcnNpb25zKQorICBbMl0gLSBETUEwIChvcHRpb25hbCwgcmVxdWlyZXMgaXJxKQorICBbM10gLSBETUExIChvcHRpb25hbCwgcmVxdWlyZXMgaXJxIGFuZCBkbWEwKQorKi8KKy8qCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgS2VpdGhsZXkgYm9hcmRzOgorCitkYXMtMTcwMXN0CitkYXMtMTcwMXN0LWRhCitkYXMtMTcwMWFvCitkYXMtMTcwMnN0CitkYXMtMTcwMnN0LWRhCitkYXMtMTcwMmhyCitkYXMtMTcwMmhyLWRhCitkYXMtMTcwMmFvCitkYXMtMTgwMXN0CitkYXMtMTgwMXN0LWRhCitkYXMtMTgwMWhjCitkYXMtMTgwMWFvCitkYXMtMTgwMnN0CitkYXMtMTgwMnN0LWRhCitkYXMtMTgwMmhyCitkYXMtMTgwMmhyLWRhCitkYXMtMTgwMmhjCitkYXMtMTgwMmFvCisKK09wdGlvbnM6CisJWzBdIC0gYmFzZSBpbyBhZGRyZXNzCisJWzFdIC0gaXJxIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIG9yIGV4dGVybmFsbHkgdHJpZ2dlcmVkIGNvbnZlcnNpb25zKQorCVsyXSAtIGRtYTAgKG9wdGlvbmFsLCByZXF1aXJlcyBpcnEpCisJWzNdIC0gZG1hMSAob3B0aW9uYWwsIHJlcXVpcmVzIGlycSBhbmQgZG1hMCkKKworaXJxIGNhbiBiZSBvbWl0dGVkLCBhbHRob3VnaCB0aGUgY21kIGludGVyZmFjZSB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgaXQuCisKK2FuYWxvZyBpbnB1dCBjbWQgdHJpZ2dlcnMgc3VwcG9ydGVkOgorCXN0YXJ0X3NyYzogICAgICBUUklHX05PVyB8IFRSSUdfRVhUCisJc2Nhbl9iZWdpbl9zcmM6IFRSSUdfRk9MTE9XIHwgVFJJR19USU1FUiB8IFRSSUdfRVhUCisJc2Nhbl9lbmRfc3JjOiAgIFRSSUdfQ09VTlQKKwljb252ZXJ0X3NyYzogICAgVFJJR19USU1FUiB8IFRSSUdfRVhUIChUUklHX0VYVCByZXF1aXJlcyBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwlzdG9wX3NyYzogICAgICAgVFJJR19DT1VOVCB8IFRSSUdfRVhUIHwgVFJJR19OT05FCisKK3NjYW5fYmVnaW5fc3JjIHRyaWdnZXJzIFRSSUdfVElNRVIgYW5kIFRSSUdfRVhUIHVzZSB0aGUgY2FyZCdzCisnYnVyc3QgbW9kZScgd2hpY2ggbGltaXRzIHRoZSB2YWxpZCBjb252ZXJzaW9uIHRpbWUgdG8gNjQgbWljcm9zZWNvbmRzCisoY29udmVydF9hcmcgPD0gNjQwMDApLiAgVGhpcyBsaW1pdGF0aW9uIGRvZXMgbm90IGFwcGx5IGlmIHNjYW5fYmVnaW5fc3JjCitpcyBUUklHX0ZPTExPVy4KKworTk9URVM6CitPbmx5IHRoZSBEQVMtMTgwMVNUIGhhcyBiZWVuIHRlc3RlZCBieSBtZS4KK1VuaXBvbGFyIGFuZCBiaXBvbGFyIHJhbmdlcyBjYW5ub3QgYmUgbWl4ZWQgaW4gdGhlIGNoYW5uZWwvZ2FpbiBsaXN0LgorCitUT0RPOgorCU1ha2UgaXQgYXV0b21hdGljYWxseSBhbGxvY2F0ZSBpcnEgYW5kIGRtYSBjaGFubmVscyBpZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkCisJQWRkIHN1cHBvcnQgZm9yIGFuYWxvZyBvdXQgb24gJ2FvJyBjYXJkcworCXJlYWQgaW5zbiBmb3IgYW5hbG9nIG91dAorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisvLyBtaXNjLiBkZWZpbmVzCisjZGVmaW5lIERBUzE4MDBfU0laRSAgICAgICAgICAgMTYJLy91c2VzIDE2IGlvIGFkZHJlc3NlcworI2RlZmluZSBGSUZPX1NJWkUgICAgICAgICAgICAgIDEwMjQJLy8gMTAyNCBzYW1wbGUgZmlmbworI2RlZmluZSBUSU1FUl9CQVNFICAgICAgICAgICAgIDIwMAkvLyA1IE1oeiBtYXN0ZXIgY2xvY2sKKyNkZWZpbmUgVU5JUE9MQVIgICAgICAgICAgICAgICAweDQJLy8gYml0IHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGlucHV0IHJhbmdlIGlzIHVuaS9iaXBvbGFyCisjZGVmaW5lIERNQV9CVUZfU0laRSAgICAgICAgICAgMHgxZmYwMAkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSBidWZmZXJzCisKKy8qIFJlZ2lzdGVycyBmb3IgdGhlIGRhczE4MDAgKi8KKyNkZWZpbmUgREFTMTgwMF9GSUZPICAgICAgICAgICAgMHgwCisjZGVmaW5lIERBUzE4MDBfUVJBTSAgICAgICAgICAgIDB4MAorI2RlZmluZSBEQVMxODAwX0RBQyAgICAgICAgICAgICAweDAKKyNkZWZpbmUgREFTMTgwMF9TRUxFQ1QgICAgICAgICAgMHgyCisjZGVmaW5lICAgQURDICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgUVJBTSAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgREFDKGEpICAgICAgICAgICAgICAgICAgKDB4MiArIGEpCisjZGVmaW5lIERBUzE4MDBfRElHSVRBTCAgICAgICAgIDB4MworI2RlZmluZSBEQVMxODAwX0NPTlRST0xfQSAgICAgICAweDQKKyNkZWZpbmUgICBGRkVOICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBDR0VOICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICBDR1NMICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBUR0VOICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgVEdTTCAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgIEFURU4gICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTgwMF9DT05UUk9MX0IgICAgICAgMHg1CisjZGVmaW5lICAgRE1BX0NINSAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgRE1BX0NINiAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgRE1BX0NINyAgICAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgRE1BX0NINV9DSDYgICAgICAgICAgICAgMHg1CisjZGVmaW5lICAgRE1BX0NINl9DSDcgICAgICAgICAgICAgMHg2CisjZGVmaW5lICAgRE1BX0NIN19DSDUgICAgICAgICAgICAgMHg3CisjZGVmaW5lICAgRE1BX0VOQUJMRUQgICAgICAgICAgICAgMHgzCS8vbWFzayB1c2VkIHRvIGRldGVybWluZSBpZiBkbWEgaXMgZW5hYmxlZAorI2RlZmluZSAgIERNQV9EVUFMICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSAgIElSUTMgICAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgIElSUTUgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgICBJUlE3ICAgICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lICAgSVJRMTAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSAgIElSUTExICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgICBJUlExNSAgICAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lICAgRklNRCAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBEQVMxODAwX0NPTlRST0xfQyAgICAgICAwWDYKKyNkZWZpbmUgICBJUENMSyAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBYUENMSyAgICAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgICBCTURFICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICBDTUVOICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBVUUVOICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgU0QgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSAgIFVCICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTgwMF9TVEFUVVMgICAgICAgICAgMHg3CisvLyBiaXRzIHRoYXQgcHJldmVudCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgKGFuZCBDVkVOKSBmcm9tIGJlaW5nIGNsZWFyZWQgb24gd3JpdGUKKyNkZWZpbmUgICBDTEVBUl9JTlRSX01BU0sgICAgICAgICAoQ1ZFTl9NQVNLIHwgMHgxZikKKyNkZWZpbmUgICBJTlQgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBETUFUQyAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICBDVDBUQyAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBPVkYgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgRkhGICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgIEZORSAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICBDVkVOX01BU0sgICAgICAgICAgICAgICAweDQwCS8vIG1hc2tzIENWRU4gb24gd3JpdGUKKyNkZWZpbmUgICBDVkVOICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzE4MDBfQlVSU1RfTEVOR1RIICAgIDB4OAorI2RlZmluZSBEQVMxODAwX0JVUlNUX1JBVEUgICAgICAweDkKKyNkZWZpbmUgREFTMTgwMF9RUkFNX0FERFJFU1MgICAgMHhhCisjZGVmaW5lIERBUzE4MDBfQ09VTlRFUiAgICAgICAgIDB4YworCisjZGVmaW5lIElPQkFTRTIgICAgICAgICAgICAgICAgICAgMHg0MDAJLy9vZmZzZXQgb2YgYWRkaXRpb25hbCBpb3BvcnRzIHVzZWQgb24gJ2FvJyBjYXJkcworCitlbnVtIHsKKwlkYXMxNzAxc3QsIGRhczE3MDFzdF9kYSwgZGFzMTcwMnN0LCBkYXMxNzAyc3RfZGEsIGRhczE3MDJociwKKwlkYXMxNzAyaHJfZGEsCisJZGFzMTcwMWFvLCBkYXMxNzAyYW8sIGRhczE4MDFzdCwgZGFzMTgwMXN0X2RhLCBkYXMxODAyc3QsIGRhczE4MDJzdF9kYSwKKwlkYXMxODAyaHIsIGRhczE4MDJocl9kYSwgZGFzMTgwMWhjLCBkYXMxODAyaGMsIGRhczE4MDFhbywgZGFzMTgwMmFvCit9OworCitzdGF0aWMgaW50IGRhczE4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBkYXMxODAwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IGRhczE4MDBfYWlfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGRhczE4MDBfYWlfaGFuZGxlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgZGFzMTgwMF9mbHVzaF9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBjaGFubmVsLCB1aW50MTZfdCAqIGJ1ZmZlcik7CitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9maWZvX2hhbGZfZnVsbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZmlmb19ub3RfZW1wdHkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9kb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxODAwX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE4MDBfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhczE4MDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdW5zaWduZWQgaW50IGJ1cnN0X2NvbnZlcnRfYXJnKHVuc2lnbmVkIGludCBjb252ZXJ0X2FyZywgaW50IHJvdW5kX21vZGUpOworc3RhdGljIHVuc2lnbmVkIGludCBzdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworCisvLyBhbmFsb2cgaW5wdXQgcmFuZ2VzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWlfZGFzMTgwMSA9IHsKKwk4LAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgtMC4wMiwgMC4wMiksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKDAsIDAuMDIpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWlfZGFzMTgwMiA9IHsKKwk4LAorCXsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQl9Cit9OworCitzdHJ1Y3QgZGFzMTgwMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfc3BlZWQ7CQkvKiBtYXggY29udmVyc2lvbiBwZXJpb2QgaW4gbmFub3NlY29uZHMgKi8KKwlpbnQgcmVzb2x1dGlvbjsJCS8qIGJpdHMgb2YgYWkgcmVzb2x1dGlvbiAqLworCWludCBxcmFtX2xlbjsJCS8qIGxlbmd0aCBvZiBjYXJkJ3MgY2hhbm5lbCAvIGdhaW4gcXVldWUgKi8KKwlpbnQgY29tbW9uOwkJLyogc3VwcG9ydHMgQVJFRl9DT01NT04gZmxhZyAqLworCWludCBkb19uX2NoYW47CQkvKiBudW1iZXIgb2YgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbHMgKi8KKwlpbnQgYW9fYWJpbGl0eTsJCS8qIDAgPT0gbm8gYW5hbG9nIG91dCwgMSA9PSBiYXNpYyBhbmFsb2cgb3V0LCAyID09IHdhdmVmb3JtIGFuYWxvZyBvdXQgKi8KKwlpbnQgYW9fbl9jaGFuOwkJLyogbnVtYmVyIG9mIGFuYWxvZyBvdXQgY2hhbm5lbHMgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfYWk7CS8qIGF2YWlsYWJsZSBpbnB1dCByYW5nZXMgKi8KK307CisKKy8qIFdhcm5pbmc6IHRoZSBtYXhpbXVtIGNvbnZlcnNpb24gc3BlZWRzIGxpc3RlZCBiZWxvdyBhcmUKKyAqIG5vdCBhbHdheXMgYWNoaWV2YWJsZSBkZXBlbmRpbmcgb24gYm9hcmQgc2V0dXAgKHNlZQorICogdXNlciBtYW51YWwuKQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhczE4MDBfYm9hcmQgZGFzMTgwMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAxc3QiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAxc3QtZGEiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46NCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyc3QiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyc3QtZGEiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46NCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyaHIiLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIHJlc29sdXRpb246MTYsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjAsCisJICAgICAgYW9fbl9jaGFuOjAsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMmhyLWRhIiwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICByZXNvbHV0aW9uOjE2LAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE3MDFhbyIsCisJICAgICAgYWlfc3BlZWQ6NjI1MCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE3MDJhbyIsCisJICAgICAgYWlfc3BlZWQ6NjI1MCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFzdCIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjowLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFzdC1kYSIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjo0LAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJzdCIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjowLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJzdC1kYSIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjo0LAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJociIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxNiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyaHItZGEiLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIHJlc29sdXRpb246MTYsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjEsCisJICAgICAgYW9fbl9jaGFuOjIsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTgwMWhjIiwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46NjQsCisJICAgICAgY29tbW9uOgkwLAorCSAgICAgIGRvX25fY2hhbjo4LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyaGMiLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjo2NCwKKwkgICAgICBjb21tb246CTAsCisJICAgICAgZG9fbl9jaGFuOjgsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFhbyIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJhbyIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMTgwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIDEgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJdW5zaWduZWQgaW50IGRpdmlzb3IyOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIDIgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJaW50IGRvX2JpdHM7CQkvKiBkaWdpdGFsIG91dHB1dCBiaXRzICovCisJaW50IGlycV9kbWFfYml0czsJLyogYml0cyBmb3IgY29udHJvbCByZWdpc3RlciBiICovCisJLyogZG1hIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXIgYiwgc3RvcmVkIHNvIHRoYXQgZG1hIGNhbiBiZQorCSAqIHR1cm5lZCBvbiBhbmQgb2ZmICovCisJaW50IGRtYV9iaXRzOworCXVuc2lnbmVkIGludCBkbWEwOwkvKiBkbWEgY2hhbm5lbHMgdXNlZCAqLworCXVuc2lnbmVkIGludCBkbWExOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBkbWFfY3VycmVudDsJLyogZG1hIGNoYW5uZWwgY3VycmVudGx5IGluIHVzZSAqLworCXVpbnQxNl90ICphaV9idWYwOwkvKiBwb2ludGVycyB0byBkbWEgYnVmZmVycyAqLworCXVpbnQxNl90ICphaV9idWYxOworCXVpbnQxNl90ICpkbWFfY3VycmVudF9idWY7CS8qIHBvaW50ZXIgdG8gZG1hIGJ1ZmZlciBjdXJyZW50bHkgYmVpbmcgdXNlZCAqLworCXVuc2lnbmVkIGludCBkbWFfdHJhbnNmZXJfc2l6ZTsJLyogc2l6ZSBvZiB0cmFuc2ZlciBjdXJyZW50bHkgdXNlZCwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIGlvYmFzZTI7CS8qIHNlY29uZGFyeSBpbyBhZGRyZXNzIHVzZWQgZm9yIGFuYWxvZyBvdXQgb24gJ2FvJyBib2FyZHMgKi8KKwlzaG9ydCBhb191cGRhdGVfYml0czsJLyogcmVtZW1iZXJzIHRoZSBsYXN0IHdyaXRlIHRvIHRoZSAndXBkYXRlJyBkYWMgKi8KK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXMxODAwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8vIGFuYWxvZyBvdXQgcmFuZ2UgZm9yIGJvYXJkcyB3aXRoIGJhc2ljIGFuYWxvZyBvdXQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hb18xID0geworCTEsCisJeworCQkJUkFOR0UoLTEwLCAxMCksCisJCX0KK307CisKKy8vIGFuYWxvZyBvdXQgcmFuZ2UgZm9yICdhbycgYm9hcmRzCisvKgorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FvXzIgPSB7CisJMiwKKwl7CisJCVJBTkdFKC0xMCwgMTApLAorCQlSQU5HRSgtNSwgNSksCisJfQorfTsKKyovCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMTgwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXMxODAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXMxODAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMxODAwX2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZGFzMTgwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkYXMxODAwX2JvYXJkKSwKKyAgICAgIGJvYXJkX25hbWU6JmRhczE4MDBfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkYXMxODAwX2JvYXJkKSwKK307CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTgwMCk7CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9pbml0X2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGRtYTAsCisJdW5zaWduZWQgaW50IGRtYTEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIG5lZWQgYW4gaXJxIHRvIGRvIGRtYQorCWlmIChkZXYtPmlycSAmJiBkbWEwKSB7CisJCS8vZW5jb2RlIGRtYTAgYW5kIGRtYTEgaW50byAyIGRpZ2l0IGhleGFkZWNpbWFsIGZvciBzd2l0Y2gKKwkJc3dpdGNoICgoZG1hMCAmIDB4NykgfCAoZG1hMSA8PCA0KSkgeworCQljYXNlIDB4NToJLy8gZG1hMCA9PSA1CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g1OworCQkJYnJlYWs7CisJCWNhc2UgMHg2OgkvLyBkbWEwID09IDYKKwkJCWRldnByaXYtPmRtYV9iaXRzIHw9IERNQV9DSDY7CisJCQlicmVhazsKKwkJY2FzZSAweDc6CS8vIGRtYTAgPT0gNworCQkJZGV2cHJpdi0+ZG1hX2JpdHMgfD0gRE1BX0NINzsKKwkJCWJyZWFrOworCQljYXNlIDB4NjU6CS8vIGRtYTAgPT0gNSwgZG1hMSA9PSA2CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g1X0NINjsKKwkJCWJyZWFrOworCQljYXNlIDB4NzY6CS8vIGRtYTAgPT0gNiwgZG1hMSA9PSA3CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g2X0NINzsKKwkJCWJyZWFrOworCQljYXNlIDB4NTc6CS8vIGRtYTAgPT0gNywgZG1hMSA9PSA1CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g3X0NINTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCIgb25seSBzdXBwb3J0cyBkbWEgY2hhbm5lbHMgNSB0aHJvdWdoIDdcbiIKKwkJCQkiIER1YWwgZG1hIG9ubHkgYWxsb3dzIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb25zOlxuIgorCQkJCSIgZG1hIDUsNiAvIDYsNyAvIG9yIDcsNVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWEwLCBkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAlaVxuIiwgZG1hMCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5kbWEwID0gZG1hMDsKKwkJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkbWEwOworCQlpZiAoZG1hMSkgeworCQkJaWYgKHJlcXVlc3RfZG1hKGRtYTEsIGRyaXZlcl9kYXMxODAwLmRyaXZlcl9uYW1lKSkgeworCQkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAlaVxuIiwKKwkJCQkJZG1hMSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlkZXZwcml2LT5kbWExID0gZG1hMTsKKwkJfQorCQlkZXZwcml2LT5haV9idWYwID0ga21hbGxvYyhETUFfQlVGX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYgPSBkZXZwcml2LT5haV9idWYwOworCQlpZiAoZG1hMSkgeworCQkJZGV2cHJpdi0+YWlfYnVmMSA9CisJCQkJa21hbGxvYyhETUFfQlVGX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJCWlmIChkZXZwcml2LT5haV9idWYxID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEwKTsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYTAsIERNQV9NT0RFX1JFQUQpOworCQlpZiAoZG1hMSkgeworCQkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMSk7CisJCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hMSwgRE1BX01PREVfUkVBRCk7CisJCX0KKwkJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJdW5zaWduZWQgaW50IGlycSA9IGl0LT5vcHRpb25zWzFdOworCXVuc2lnbmVkIGludCBkbWEwID0gaXQtPm9wdGlvbnNbMl07CisJdW5zaWduZWQgaW50IGRtYTEgPSBpdC0+b3B0aW9uc1szXTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTI7CisJaW50IGJvYXJkOworCWludCByZXR2YWw7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbyAweCVseCIsIGRldi0+bWlub3IsIGRyaXZlcl9kYXMxODAwLmRyaXZlcl9uYW1lLAorCQlpb2Jhc2UpOworCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7CisJCWlmIChkbWEwKSB7CisJCQlwcmludGsoIiwgZG1hICV1IiwgZG1hMCk7CisJCQlpZiAoZG1hMSkKKwkJCQlwcmludGsoIiBhbmQgJXUiLCBkbWExKTsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7CisKKwlpZiAoaW9iYXNlID09IDApIHsKKwkJcHJpbnRrKCIgaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgREFTMTgwMF9TSVpFLCBkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3Q6IGZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0cyAweCVseCB0byAweCVseFxuIiwgaW9iYXNlLCBpb2Jhc2UgKyBEQVMxODAwX1NJWkUgLSAxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJYm9hcmQgPSBkYXMxODAwX3Byb2JlKGRldik7CisJaWYgKGJvYXJkIDwgMCkgeworCQlwcmludGsoIiB1bmFibGUgdG8gZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXYtPmJvYXJkX3B0ciA9IGRhczE4MDBfYm9hcmRzICsgYm9hcmQ7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJLy8gaWYgaXQgaXMgYW4gJ2FvJyBib2FyZCB3aXRoIGZhbmN5IGFuYWxvZyBvdXQgdGhlbiB3ZSBuZWVkIGV4dHJhIGlvIHBvcnRzCisJaWYgKHRoaXNib2FyZC0+YW9fYWJpbGl0eSA9PSAyKSB7CisJCWlvYmFzZTIgPSBpb2Jhc2UgKyBJT0JBU0UyOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZTIsIERBUzE4MDBfU0laRSwKKwkJCQlkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0OiBmYWlsZWQgdG8gYWxsb2NhdGUgcG9ydHMgMHglbHggdG8gMHglbHhcbiIsIGlvYmFzZTIsIGlvYmFzZTIgKyBEQVMxODAwX1NJWkUgLSAxKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWRldnByaXYtPmlvYmFzZTIgPSBpb2Jhc2UyOworCX0KKworCS8qIGdyYWIgb3VyIElSUSAqLworCWlmIChpcnEpIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRhczE4MDBfaW50ZXJydXB0LCAwLAorCQkJCWRyaXZlcl9kYXMxODAwLmRyaXZlcl9uYW1lLCBkZXYpKSB7CisJCQlwcmludGsoIiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwkvLyBzZXQgYml0cyB0aGF0IHRlbGwgY2FyZCB3aGljaCBpcnEgdG8gdXNlCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4ODsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgxODsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4Mjg7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSAweDMwOworCQlicmVhazsKKwljYXNlIDE1OgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgzODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgaXJxIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR2YWwgPSBkYXMxODAwX2luaXRfZG1hKGRldiwgZG1hMCwgZG1hMSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoZGV2cHJpdi0+YWlfYnVmMCA9PSBOVUxMKSB7CisJCWRldnByaXYtPmFpX2J1ZjAgPQorCQkJa21hbGxvYyhGSUZPX1NJWkUgKiBzaXplb2YodWludDE2X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkYgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOworCWlmICh0aGlzYm9hcmQtPmNvbW1vbikKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5xcmFtX2xlbjsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzYm9hcmQtPnFyYW1fbGVuOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPnJlc29sdXRpb24pIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+cmFuZ2VfYWk7CisJcy0+ZG9fY21kID0gZGFzMTgwMF9haV9kb19jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGRhczE4MDBfYWlfZG9fY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBkYXMxODAwX2FpX3JpbnNuOworCXMtPnBvbGwgPSBkYXMxODAwX2FpX3BvbGw7CisJcy0+Y2FuY2VsID0gZGFzMTgwMF9jYW5jZWw7CisKKwkvKiBhbmFsb2cgb3V0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKHRoaXNib2FyZC0+YW9fYWJpbGl0eSA9PSAxKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX25fY2hhbjsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+cmVzb2x1dGlvbikgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hb18xOworCQlzLT5pbnNuX3dyaXRlID0gZGFzMTgwMF9hb193aW5zbjsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIGRpICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSA0OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gZGFzMTgwMF9kaV9yYml0czsKKworCS8qIGRvICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRvX25fY2hhbjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE4MDBfZG9fd2JpdHM7CisKKwlkYXMxODAwX2NhbmNlbChkZXYsIGRldi0+cmVhZF9zdWJkZXYpOworCisJLy8gaW5pdGlhbGl6ZSBkaWdpdGFsIG91dCBjaGFubmVscworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0RJR0lUQUwpOworCisJLy8gaW5pdGlhbGl6ZSBhbmFsb2cgb3V0IGNoYW5uZWxzCisJaWYgKHRoaXNib2FyZC0+YW9fYWJpbGl0eSA9PSAxKSB7CisJCS8vIHNlbGVjdCAndXBkYXRlJyBkYWMgY2hhbm5lbCBmb3IgYmFzZUFkZHJlc3MgKyAweDAKKwkJb3V0YihEQUModGhpc2JvYXJkLT5hb19uX2NoYW4gLSAxKSwKKwkJCWRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOworCQlvdXR3KGRldnByaXYtPmFvX3VwZGF0ZV9iaXRzLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfREFDKTsKKwl9CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogb25seSBmcmVlIHN0dWZmIGlmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBfYXR0YWNoICovCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgREFTMTgwMF9TSVpFKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT5pb2Jhc2UyKQorCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+aW9iYXNlMiwgREFTMTgwMF9TSVpFKTsKKwkJaWYgKGRldnByaXYtPmRtYTApCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWEwKTsKKwkJaWYgKGRldnByaXYtPmRtYTEpCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWExKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjApCisJCQlrZnJlZShkZXZwcml2LT5haV9idWYwKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjEpCisJCQlrZnJlZShkZXZwcml2LT5haV9idWYxKTsKKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yLAorCQlkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSk7CisKKwlyZXR1cm4gMDsKK307CisKKy8qIHByb2JlcyBhbmQgY2hlY2tzIGRhcy0xODAwIHNlcmllcyBib2FyZCB0eXBlCisgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaWQ7CisJaW50IGJvYXJkOworCisJaWQgPSAoaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKSA+PiA0KSAmIDB4ZjsJLyogZ2V0IGlkIGJpdHMgKi8KKwlib2FyZCA9ICgoc3RydWN0IGRhczE4MDBfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHIpIC0gZGFzMTgwMF9ib2FyZHM7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSAweDM6CisJCWlmIChib2FyZCA9PSBkYXMxODAxc3RfZGEgfHwgYm9hcmQgPT0gZGFzMTgwMnN0X2RhIHx8CisJCQlib2FyZCA9PSBkYXMxNzAxc3RfZGEgfHwgYm9hcmQgPT0gZGFzMTcwMnN0X2RhKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogJXNcbiIsCisJCQkJZGFzMTgwMF9ib2FyZHNbYm9hcmRdLm5hbWUpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQsIG5vdCByZWNvbW1lbmRlZCk6IGRhcy0xODAwc3QtZGEgc2VyaWVzXG4iKTsKKwkJcmV0dXJuIGRhczE4MDFzdDsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCWlmIChib2FyZCA9PSBkYXMxODAyaHJfZGEgfHwgYm9hcmQgPT0gZGFzMTcwMmhyX2RhKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogJXNcbiIsCisJCQkJZGFzMTgwMF9ib2FyZHNbYm9hcmRdLm5hbWUpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQsIG5vdCByZWNvbW1lbmRlZCk6IGRhcy0xODAyaHItZGFcbiIpOworCQlyZXR1cm4gZGFzMTgwMmhyOworCQlicmVhazsKKwljYXNlIDB4NToKKwkJaWYgKGJvYXJkID09IGRhczE4MDFhbyB8fCBib2FyZCA9PSBkYXMxODAyYW8gfHwKKwkJCWJvYXJkID09IGRhczE3MDFhbyB8fCBib2FyZCA9PSBkYXMxNzAyYW8pIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiAlc1xuIiwKKwkJCQlkYXMxODAwX2JvYXJkc1tib2FyZF0ubmFtZSk7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCwgbm90IHJlY29tbWVuZGVkKTogZGFzLTE4MDBhbyBzZXJpZXNcbiIpOworCQlyZXR1cm4gZGFzMTgwMWFvOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJaWYgKGJvYXJkID09IGRhczE4MDJociB8fCBib2FyZCA9PSBkYXMxNzAyaHIpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiAlc1xuIiwKKwkJCQlkYXMxODAwX2JvYXJkc1tib2FyZF0ubmFtZSk7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCwgbm90IHJlY29tbWVuZGVkKTogZGFzLTE4MDJoclxuIik7CisJCXJldHVybiBkYXMxODAyaHI7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlpZiAoYm9hcmQgPT0gZGFzMTgwMXN0IHx8IGJvYXJkID09IGRhczE4MDJzdCB8fAorCQkJYm9hcmQgPT0gZGFzMTcwMXN0IHx8IGJvYXJkID09IGRhczE3MDJzdCkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6ICVzXG4iLAorCQkJCWRhczE4MDBfYm9hcmRzW2JvYXJkXS5uYW1lKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkLCBub3QgcmVjb21tZW5kZWQpOiBkYXMtMTgwMHN0IHNlcmllc1xuIik7CisJCXJldHVybiBkYXMxODAxc3Q7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQlpZiAoYm9hcmQgPT0gZGFzMTgwMWhjIHx8IGJvYXJkID09IGRhczE4MDJoYykgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6ICVzXG4iLAorCQkJCWRhczE4MDBfYm9hcmRzW2JvYXJkXS5uYW1lKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkLCBub3QgcmVjb21tZW5kZWQpOiBkYXMtMTgwMGhjIHNlcmllc1xuIik7CisJCXJldHVybiBkYXMxODAxaGM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiIEJvYXJkIG1vZGVsOiBwcm9iZSByZXR1cm5lZCAweCV4ICh1bmtub3duLCBwbGVhc2UgcmVwb3J0KVxuIiwgaWQpOworCQlyZXR1cm4gYm9hcmQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIHByZXZlbnQgcmFjZSB3aXRoIGludGVycnVwdCBoYW5kbGVyCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGFzMTgwMF9haV9oYW5kbGVyKGRldik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gcy0+YXN5bmMtPmJ1Zl9yZWFkX2NvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogUHJldmVudCByYWNlIHdpdGggZGFzMTgwMF9haV9wb2xsKCkgb24gbXVsdGkgcHJvY2Vzc29yIHN5c3RlbXMuCisJICogQWxzbyBwcm90ZWN0cyBpbmRpcmVjdCBhZGRyZXNzaW5nIGluIGRhczE4MDBfYWlfaGFuZGxlciAqLworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCisJLyogaWYgaW50ZXJydXB0IHdhcyBub3QgY2F1c2VkIGJ5IGRhcy0xODAwICovCisJaWYgKCEoc3RhdHVzICYgSU5UKSkgeworCQlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJLyogY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgYml0IElOVCAqLworCW91dGIoQ0xFQVJfSU5UUl9NQVNLICYgfklOVCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CisJLy8gaGFuZGxlIGludGVycnVwdAorCWRhczE4MDBfYWlfaGFuZGxlcihkZXYpOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLy8gdGhlIGd1dHMgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGF0IGlzIHNoYXJlZCB3aXRoIGRhczE4MDBfYWlfcG9sbAorc3RhdGljIHZvaWQgZGFzMTgwMF9haV9oYW5kbGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CisKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwkvLyBzZWxlY3QgYWRjIGZvciBiYXNlIGFkZHJlc3MgKyAwCisJb3V0YihBREMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOworCS8vIGRtYSBidWZmZXIgZnVsbAorCWlmIChkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRU5BQkxFRCkgeworCQkvLyBsb29rIGZvciBkYXRhIGZyb20gZG1hIHRyYW5zZmVyIGV2ZW4gaWYgZG1hIHRlcm1pbmFsIGNvdW50IGhhc24ndCBoYXBwZW5lZCB5ZXQKKwkJZGFzMTgwMF9oYW5kbGVfZG1hKGRldiwgcywgc3RhdHVzKTsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIEZIRikgewkvLyBpZiBmaWZvIGhhbGYgZnVsbAorCQlkYXMxODAwX2hhbmRsZV9maWZvX2hhbGZfZnVsbChkZXYsIHMpOworCX0gZWxzZSBpZiAoc3RhdHVzICYgRk5FKSB7CS8vIGlmIGZpZm8gbm90IGVtcHR5CisJCWRhczE4MDBfaGFuZGxlX2ZpZm9fbm90X2VtcHR5KGRldiwgcyk7CisJfQorCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJLyogaWYgdGhlIGNhcmQncyBmaWZvIGhhcyBvdmVyZmxvd2VkICovCisJaWYgKHN0YXR1cyAmIE9WRikgeworCQkvLyBjbGVhciBPVkYgaW50ZXJydXB0IGJpdAorCQlvdXRiKENMRUFSX0lOVFJfTUFTSyAmIH5PVkYsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCQljb21lZGlfZXJyb3IoZGV2LCAiREFTMTgwMCBGSUZPIG92ZXJmbG93Iik7CisJCWRhczE4MDBfY2FuY2VsKGRldiwgcyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisJLy8gc3RvcCB0YWtpbmcgZGF0YSBpZiBhcHByb3ByaWF0ZQorCS8qIHN0b3Bfc3JjIFRSSUdfRVhUICovCisJaWYgKHN0YXR1cyAmIENUMFRDKSB7CisJCS8vIGNsZWFyIENUMFRDIGludGVycnVwdCBiaXQKKwkJb3V0YihDTEVBUl9JTlRSX01BU0sgJiB+Q1QwVEMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCQkvLyBtYWtlIHN1cmUgd2UgZ2V0IGFsbCByZW1haW5pbmcgZGF0YSBmcm9tIGJvYXJkIGJlZm9yZSBxdWl0dGluZworCQlpZiAoZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0VOQUJMRUQpCisJCQlkYXMxODAwX2ZsdXNoX2RtYShkZXYsIHMpOworCQllbHNlCisJCQlkYXMxODAwX2hhbmRsZV9maWZvX25vdF9lbXB0eShkZXYsIHMpOworCQlkYXMxODAwX2NhbmNlbChkZXYsIHMpOwkvKiBkaXNhYmxlIGhhcmR3YXJlIGNvbnZlcnNpb25zICovCisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwl9IGVsc2UgaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5jb3VudCA9PSAwKSB7CS8vIHN0b3Bfc3JjIFRSSUdfQ09VTlQKKwkJZGFzMTgwMF9jYW5jZWwoZGV2LCBzKTsJLyogZGlzYWJsZSBoYXJkd2FyZSBjb252ZXJzaW9ucyAqLworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGRhczE4MDBfaGFuZGxlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBpbnQgZHVhbF9kbWEgPSBkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRFVBTDsKKworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwlkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCWRldnByaXYtPmRtYV9jdXJyZW50X2J1Zik7CisJLy8gcmUtZW5hYmxlICBkbWEgY2hhbm5lbAorCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY3VycmVudCwKKwkJdmlydF90b19idXMoZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmKSk7CisJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWFfY3VycmVudCwgZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2N1cnJlbnQpOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJaWYgKHN0YXR1cyAmIERNQVRDKSB7CisJCS8vIGNsZWFyIERNQVRDIGludGVycnVwdCBiaXQKKwkJb3V0YihDTEVBUl9JTlRSX01BU0sgJiB+RE1BVEMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCQkvLyBzd2l0Y2ggZG1hIGNoYW5uZWxzIGZvciBuZXh0IHRpbWUsIGlmIGFwcHJvcHJpYXRlCisJCWlmIChkdWFsX2RtYSkgeworCQkJLy8gcmVhZCBkYXRhIGZyb20gdGhlIG90aGVyIGNoYW5uZWwgbmV4dCB0aW1lCisJCQlpZiAoZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPT0gZGV2cHJpdi0+ZG1hMCkgeworCQkJCWRldnByaXYtPmRtYV9jdXJyZW50ID0gZGV2cHJpdi0+ZG1hMTsKKwkJCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYgPSBkZXZwcml2LT5haV9idWYxOworCQkJfSBlbHNlIHsKKwkJCQlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTA7CisJCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCBtdW5nZV9iaXBvbGFyX3NhbXBsZShjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1aW50MTZfdCBzYW1wbGUpCit7CisJc2FtcGxlICs9IDEgPDwgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiAtIDEpOworCXJldHVybiBzYW1wbGU7Cit9CisKK3N0YXRpYyB2b2lkIG11bmdlX2RhdGEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90ICogYXJyYXksCisJdW5zaWduZWQgaW50IG51bV9lbGVtZW50cykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgdW5pcG9sYXI7CisKKwkvKiBzZWUgaWYgY2FyZCBpcyB1c2luZyBhIHVuaXBvbGFyIG9yIGJpcG9sYXIgcmFuZ2Ugc28gd2UgY2FuIG11bmdlIGRhdGEgY29ycmVjdGx5ICovCisJdW5pcG9sYXIgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQykgJiBVQjsKKworCS8qIGNvbnZlcnQgdG8gdW5zaWduZWQgdHlwZSBpZiB3ZSBhcmUgaW4gYSBiaXBvbGFyIG1vZGUgKi8KKwlpZiAoIXVuaXBvbGFyKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZWxlbWVudHM7IGkrKykgeworCQkJYXJyYXlbaV0gPSBtdW5nZV9iaXBvbGFyX3NhbXBsZShkZXYsIGFycmF5W2ldKTsKKwkJfQorCX0KK30KKworLyogVXRpbGl0eSBmdW5jdGlvbiB1c2VkIGJ5IGRhczE4MDBfZmx1c2hfZG1hKCkgYW5kIGRhczE4MDBfaGFuZGxlX2RtYSgpLgorICogQXNzdW1lcyBkbWEgbG9jayBpcyBoZWxkICovCitzdGF0aWMgdm9pZCBkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHVpbnQxNl90ICogYnVmZmVyKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIG51bV9zYW1wbGVzOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWRpc2FibGVfZG1hKGNoYW5uZWwpOworCisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzCisJICogZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoY2hhbm5lbCk7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB0byByZWFkCisJbnVtX2J5dGVzID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLSBnZXRfZG1hX3Jlc2lkdWUoY2hhbm5lbCk7CisJbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCisJLyogaWYgd2Ugb25seSBuZWVkIHNvbWUgb2YgdGhlIHBvaW50cyAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPCBudW1fc2FtcGxlcykKKwkJbnVtX3NhbXBsZXMgPSBkZXZwcml2LT5jb3VudDsKKworCW11bmdlX2RhdGEoZGV2LCBidWZmZXIsIG51bV9zYW1wbGVzKTsKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGJ1ZmZlciwgbnVtX2J5dGVzKTsKKwlpZiAocy0+YXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQlkZXZwcml2LT5jb3VudCAtPSBudW1fc2FtcGxlczsKKworCXJldHVybjsKK30KKworLyogZmx1c2hlcyByZW1haW5pbmcgZGF0YSBmcm9tIGJvYXJkIHdoZW4gZXh0ZXJuYWwgdHJpZ2dlciBoYXMgc3RvcHBlZCBhcXVpc2l0aW9uCisgKiBhbmQgd2UgYXJlIHVzaW5nIGRtYSB0cmFuc2ZlcnMgKi8KK3N0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBpbnQgZHVhbF9kbWEgPSBkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRFVBTDsKKworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwlkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCWRldnByaXYtPmRtYV9jdXJyZW50X2J1Zik7CisKKwlpZiAoZHVhbF9kbWEpIHsKKwkJLy8gc3dpdGNoIHRvIG90aGVyIGNoYW5uZWwgYW5kIGZsdXNoIGl0CisJCWlmIChkZXZwcml2LT5kbWFfY3VycmVudCA9PSBkZXZwcml2LT5kbWEwKSB7CisJCQlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTE7CisJCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYgPSBkZXZwcml2LT5haV9idWYxOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkZXZwcml2LT5kbWEwOworCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwkJfQorCQlkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYpOworCX0KKworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJLy8gZ2V0IGFueSByZW1haW5pbmcgc2FtcGxlcyBpbiBmaWZvCisJZGFzMTgwMF9oYW5kbGVfZmlmb19ub3RfZW1wdHkoZGV2LCBzKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBudW1Qb2ludHMgPSAwOwkvKiBudW1iZXIgb2YgcG9pbnRzIHRvIHJlYWQgKi8KKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwludW1Qb2ludHMgPSBGSUZPX1NJWkUgLyAyOworCS8qIGlmIHdlIG9ubHkgbmVlZCBzb21lIG9mIHRoZSBwb2ludHMgKi8KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmNvdW50IDwgbnVtUG9pbnRzKQorCQludW1Qb2ludHMgPSBkZXZwcml2LT5jb3VudDsKKwlpbnN3KGRldi0+aW9iYXNlICsgREFTMTgwMF9GSUZPLCBkZXZwcml2LT5haV9idWYwLCBudW1Qb2ludHMpOworCW11bmdlX2RhdGEoZGV2LCBkZXZwcml2LT5haV9idWYwLCBudW1Qb2ludHMpOworCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfYnVmMCwKKwkJbnVtUG9pbnRzICogc2l6ZW9mKGRldnByaXYtPmFpX2J1ZjBbMF0pKTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQlkZXZwcml2LT5jb3VudCAtPSBudW1Qb2ludHM7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9maWZvX25vdF9lbXB0eShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZHBudDsKKwlpbnQgdW5pcG9sYXI7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJdW5pcG9sYXIgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQykgJiBVQjsKKworCXdoaWxlIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUykgJiBGTkUpIHsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5jb3VudCA9PSAwKQorCQkJYnJlYWs7CisJCWRwbnQgPSBpbncoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0ZJRk8pOworCQkvKiBjb252ZXJ0IHRvIHVuc2lnbmVkIHR5cGUgaWYgd2UgYXJlIGluIGEgYmlwb2xhciBtb2RlICovCisJCWlmICghdW5pcG9sYXIpIDsKKwkJZHBudCA9IG11bmdlX2JpcG9sYXJfc2FtcGxlKGRldiwgZHBudCk7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZHBudCk7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCQlkZXZwcml2LT5jb3VudC0tOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBkYXMxODAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsJLyogZGlzYWJsZSBjb252ZXJzaW9ucyAqLworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9CKTsJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBkbWEgKi8KKwlvdXRiKDB4MCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQSk7CS8qIGRpc2FibGUgYW5kIGNsZWFyIGZpZm8gYW5kIHN0b3AgdHJpZ2dlcmluZyAqLworCWlmIChkZXZwcml2LT5kbWEwKQorCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEwKTsKKwlpZiAoZGV2cHJpdi0+ZG1hMSkKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRlc3QgYW5hbG9nIGlucHV0IGNtZCAqLworc3RhdGljIGludCBkYXMxODAwX2FpX2RvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCXVuc2lnbmVkIGludCB0bXBfYXJnOworCWludCBpOworCWludCB1bmlwb2xhcjsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVyB8IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfRVhUIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvLyB1bmlxdWVuZXNzIGNoZWNrCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCS8vY29tcGF0aWJpbGl0eSBjaGVjaworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJfQorCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkvLyBpZiB3ZSBhcmUgbm90IGluIGJ1cnN0IG1vZGUKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJCXRtcF9hcmcgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkJJihkZXZwcml2LT5kaXZpc29yMSksICYoZGV2cHJpdi0+ZGl2aXNvcjIpLAorCQkJCSYoY21kLT5jb252ZXJ0X2FyZyksCisJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQlpZiAodG1wX2FyZyAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJCWVycisrOworCQl9CisJCS8vIGlmIHdlIGFyZSBpbiBidXJzdCBtb2RlCisJCWVsc2UgeworCQkJLy8gY2hlY2sgdGhhdCBjb252ZXJ0X2FyZyBpcyBjb21wYXRpYmxlCisJCQl0bXBfYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCWJ1cnN0X2NvbnZlcnRfYXJnKGNtZC0+Y29udmVydF9hcmcsCisJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQlpZiAodG1wX2FyZyAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJCWVycisrOworCisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkJLy8gaWYgc2NhbnMgYXJlIHRpbWVkIGZhc3RlciB0aGFuIGNvbnZlcnNpb24gcmF0ZSBhbGxvd3MKKwkJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuID4KKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQkJCWNtZC0+Y29udmVydF9hcmcgKgorCQkJCQkJY21kLT5jaGFubGlzdF9sZW47CisJCQkJCWVycisrOworCQkJCX0KKwkJCQl0bXBfYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJCQkvKiBjYWxjdWxhdGUgY291bnRlciB2YWx1ZXMgdGhhdCBnaXZlIGRlc2lyZWQgdGltaW5nICovCisJCQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCQkJJihjbWQtPnNjYW5fYmVnaW5fYXJnKSwKKwkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQkJaWYgKHRtcF9hcmcgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIG5vdCB0cnlpbmcgdG8gbWl4IHVuaXBvbGFyIGFuZCBiaXBvbGFyIHJhbmdlcworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCXVuaXBvbGFyID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgJiBVTklQT0xBUjsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmICh1bmlwb2xhciAhPSAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgJiBVTklQT0xBUikpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkidW5pcG9sYXIgYW5kIGJpcG9sYXIgcmFuZ2VzIGNhbm5vdCBiZSBtaXhlZCBpbiB0aGUgY2hhbmxpc3QiKTsKKwkJCQllcnIrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFuYWxvZyBpbnB1dCBjbWQgaW50ZXJmYWNlICovCisKKy8vIGZpcnN0LCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIG1haW4gYWlfZG9fY21kKCkKKworLy8gcmV0dXJucyBhcHByb3ByaWF0ZSBiaXRzIGZvciBjb250cm9sIHJlZ2lzdGVyIGEsIGRlcGVuZGluZyBvbiBjb21tYW5kCitzdGF0aWMgaW50IGNvbnRyb2xfYV9iaXRzKHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwlpbnQgY29udHJvbF9hOworCisJY29udHJvbF9hID0gRkZFTjsJLy9lbmFibGUgZmlmbworCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJY29udHJvbF9hIHw9IEFURU47CisJfQorCXN3aXRjaCAoY21kLnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19FWFQ6CisJCWNvbnRyb2xfYSB8PSBUR0VOIHwgQ0dTTDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PVzoKKwkJY29udHJvbF9hIHw9IENHRU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb250cm9sX2E7Cit9CisKKy8vIHJldHVybnMgYXBwcm9wcmlhdGUgYml0cyBmb3IgY29udHJvbCByZWdpc3RlciBjLCBkZXBlbmRpbmcgb24gY29tbWFuZAorc3RhdGljIGludCBjb250cm9sX2NfYml0cyhzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJaW50IGNvbnRyb2xfYzsKKwlpbnQgYXJlZjsKKworCS8qIHNldCBjbG9jayBzb3VyY2UgdG8gaW50ZXJuYWwgb3IgZXh0ZXJuYWwsIHNlbGVjdCBhbmFsb2cgcmVmZXJlbmNlLAorCSAqIHNlbGVjdCB1bmlwb2xhciAvIGJpcG9sYXIKKwkgKi8KKwlhcmVmID0gQ1JfQVJFRihjbWQuY2hhbmxpc3RbMF0pOworCWNvbnRyb2xfYyA9IFVRRU47CS8vZW5hYmxlIHVwcGVyIHFyYW0gYWRkcmVzc2VzCisJaWYgKGFyZWYgIT0gQVJFRl9ESUZGKQorCQljb250cm9sX2MgfD0gU0Q7CisJaWYgKGFyZWYgPT0gQVJFRl9DT01NT04pCisJCWNvbnRyb2xfYyB8PSBDTUVOOworCS8qIGlmIGEgdW5pcG9sYXIgcmFuZ2Ugd2FzIHNlbGVjdGVkICovCisJaWYgKENSX1JBTkdFKGNtZC5jaGFubGlzdFswXSkgJiBVTklQT0xBUikKKwkJY29udHJvbF9jIHw9IFVCOworCXN3aXRjaCAoY21kLnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX0ZPTExPVzoJLy8gbm90IGluIGJ1cnN0IG1vZGUKKwkJc3dpdGNoIChjbWQuY29udmVydF9zcmMpIHsKKwkJY2FzZSBUUklHX1RJTUVSOgorCQkJLyogdHJpZyBvbiBjYXNjYWRlZCBjb3VudGVycyAqLworCQkJY29udHJvbF9jIHw9IElQQ0xLOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19FWFQ6CisJCQkvKiB0cmlnIG9uIGZhbGxpbmcgZWRnZSBvZiBleHRlcm5hbCB0cmlnZ2VyICovCisJCQljb250cm9sX2MgfD0gWFBDTEs7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19USU1FUjoKKwkJLy8gYnVyc3QgbW9kZSB3aXRoIGludGVybmFsIHBhY2VyIGNsb2NrCisJCWNvbnRyb2xfYyB8PSBCTURFIHwgSVBDTEs7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8vIGJ1cnN0IG1vZGUgd2l0aCBleHRlcm5hbCB0cmlnZ2VyCisJCWNvbnRyb2xfYyB8PSBCTURFIHwgWFBDTEs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb250cm9sX2M7Cit9CisKKy8vIHNldHMgdXAgY291bnRlcnMKK3N0YXRpYyBpbnQgc2V0dXBfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwkvLyBzZXR1cCBjYXNjYWRlZCBjb3VudGVycyBmb3IgY29udmVyc2lvbi9zY2FuIGZyZXF1ZW5jeQorCXN3aXRjaCAoY21kLnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX0ZPTExPVzoJLy8gbm90IGluIGJ1cnN0IG1vZGUKKwkJaWYgKGNtZC5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvKiBzZXQgY29udmVyc2lvbiBmcmVxdWVuY3kgKi8KKwkJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCQkmKGNtZC5jb252ZXJ0X2FyZyksCisJCQkJY21kLmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJCWlmIChkYXMxODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX1RJTUVSOgkvLyBpbiBidXJzdCBtb2RlCisJCS8qIHNldCBzY2FuIGZyZXF1ZW5jeSAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJihjbWQuc2Nhbl9iZWdpbl9hcmcpLAorCQkJY21kLmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGRhczE4MDBfc2V0X2ZyZXF1ZW5jeShkZXYpIDwgMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8vIHNldHVwIGNvdW50ZXIgMCBmb3IgJ2Fib3V0IHRyaWdnZXJpbmcnCisJaWYgKGNtZC5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQkvLyBsb2FkIGNvdW50ZXIgMCBpbiBtb2RlIDAKKwkJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMCwgMSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIHNldHMgdXAgZG1hCitzdGF0aWMgdm9pZCBzZXR1cF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJY29uc3QgaW50IGR1YWxfZG1hID0gZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0RVQUw7CisKKwlpZiAoKGRldnByaXYtPmlycV9kbWFfYml0cyAmIERNQV9FTkFCTEVEKSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBkZXRlcm1pbmUgYSByZWFzb25hYmxlIGRtYSB0cmFuc2ZlciBzaXplICovCisJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBzdWdnZXN0X3RyYW5zZmVyX3NpemUoJmNtZCk7CisJbG9ja19mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMCk7CisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYTApOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEwLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5haV9idWYwKSk7CisJLy8gc2V0IGFwcHJvcHJpYXRlIHNpemUgb2YgdHJhbnNmZXIKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYTAsIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTA7CisJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYTApOworCS8vIHNldCB1cCBkdWFsIGRtYSBpZiBhcHByb3ByaWF0ZQorCWlmIChkdWFsX2RtYSkgeworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWExKTsKKwkJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCQkgKiBjb3VudCBhbmQgYWRkcmVzcyBnZXQgc2V0IGNvcnJlY3RseSAqLworCQljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hMSk7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWExLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5haV9idWYxKSk7CisJCS8vIHNldCBhcHByb3ByaWF0ZSBzaXplIG9mIHRyYW5zZmVyCisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hMSwgZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYTEpOworCX0KKwlyZWxlYXNlX2RtYV9sb2NrKGxvY2tfZmxhZ3MpOworCisJcmV0dXJuOworfQorCisvLyBwcm9ncmFtcyBjaGFubmVsL2dhaW4gbGlzdCBpbnRvIGNhcmQKK3N0YXRpYyB2b2lkIHByb2dyYW1fY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwlpbnQgaSwgbiwgY2hhbl9yYW5nZTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwljb25zdCBpbnQgcmFuZ2VfbWFzayA9IDB4MzsJLy9tYXNrcyB1bmlwb2xhci9iaXBvbGFyIGJpdCBvZmYgcmFuZ2UKKwljb25zdCBpbnQgcmFuZ2VfYml0c2hpZnQgPSA4OworCisJbiA9IGNtZC5jaGFubGlzdF9sZW47CisJLy8gc3BpbmxvY2sgcHJvdGVjdHMgaW5kaXJlY3QgYWRkcmVzc2luZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKFFSQU0sIGRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOwkvKiBzZWxlY3QgUVJBTSBmb3IgYmFzZUFkZHJlc3MgKyAweDAgKi8KKwlvdXRiKG4gLSAxLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTV9BRERSRVNTKTsJLypzZXQgUVJBTSBhZGRyZXNzIHN0YXJ0ICovCisJLyogbWFrZSBjaGFubmVsIC8gZ2FpbiBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljaGFuX3JhbmdlID0KKwkJCUNSX0NIQU4oY21kLmNoYW5saXN0W2ldKSB8ICgoQ1JfUkFOR0UoY21kLgorCQkJCQljaGFubGlzdFtpXSkgJiByYW5nZV9tYXNrKSA8PAorCQkJcmFuZ2VfYml0c2hpZnQpOworCQlvdXR3KGNoYW5fcmFuZ2UsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNKTsKKwl9CisJb3V0YihuIC0gMSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1FSQU1fQUREUkVTUyk7CS8qZmluaXNoIHdyaXRlIHRvIFFSQU0gKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybjsKK30KKworLy8gYW5hbG9nIGlucHV0IGRvX2NtZAorc3RhdGljIGludCBkYXMxODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXQ7CisJaW50IGNvbnRyb2xfYSwgY29udHJvbF9jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgY21kID0gYXN5bmMtPmNtZDsKKworCWlmICghZGV2LT5pcnEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJubyBpcnEgYXNzaWduZWQgZm9yIGRhcy0xODAwLCBjYW5ub3QgZG8gaGFyZHdhcmUgY29udmVyc2lvbnMiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGRpc2FibGUgZG1hIG9uIFRSSUdfV0FLRV9FT1MsIG9yIFRSSUdfUlQKKwkgKiAoYmVjYXVzZSBkbWEgaW4gaGFuZGxlciBpcyB1bnNhZmUgYXQgaGFyZCByZWFsLXRpbWUgcHJpb3JpdHkpICovCisJaWYgKGNtZC5mbGFncyAmIChUUklHX1dBS0VfRU9TIHwgVFJJR19SVCkpIHsKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzICY9IH5ETUFfRU5BQkxFRDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gZGV2cHJpdi0+ZG1hX2JpdHM7CisJfQorCS8vIGludGVycnVwdCBvbiBlbmQgb2YgY29udmVyc2lvbiBmb3IgVFJJR19XQUtFX0VPUworCWlmIChjbWQuZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCS8vIGludGVycnVwdCBmaWZvIG5vdCBlbXB0eQorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgJj0gfkZJTUQ7CisJfSBlbHNlIHsKKwkJLy8gaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsCisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBGSU1EOworCX0KKwkvLyBkZXRlcm1pbmUgaG93IG1hbnkgY29udmVyc2lvbnMgd2UgbmVlZAorCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5jb3VudCA9IGNtZC5zdG9wX2FyZyAqIGNtZC5jaGFubGlzdF9sZW47CisJfQorCisJZGFzMTgwMF9jYW5jZWwoZGV2LCBzKTsKKworCS8vIGRldGVybWluZSBwcm9wZXIgYml0cyBmb3IgY29udHJvbCByZWdpc3RlcnMKKwljb250cm9sX2EgPSBjb250cm9sX2FfYml0cyhjbWQpOworCWNvbnRyb2xfYyA9IGNvbnRyb2xfY19iaXRzKGNtZCk7CisKKwkvKiBzZXR1cCBjYXJkIGFuZCBzdGFydCAqLworCXByb2dyYW1fY2hhbmxpc3QoZGV2LCBjbWQpOworCXJldCA9IHNldHVwX2NvdW50ZXJzKGRldiwgY21kKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiRXJyb3Igc2V0dGluZyB1cCBjb3VudGVycyIpOworCQlyZXR1cm4gcmV0OworCX0KKwlzZXR1cF9kbWEoZGV2LCBjbWQpOworCW91dGIoY29udHJvbF9jLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9DKTsKKwkvLyBzZXQgY29udmVyc2lvbiByYXRlIGFuZCBsZW5ndGggZm9yIGJ1cnN0IG1vZGUKKwlpZiAoY29udHJvbF9jICYgQk1ERSkgeworCQkvLyBwcm9ncmFtIGNvbnZlcnNpb24gcGVyaW9kIHdpdGggbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBtaW51cyAxCisJCW91dGIoY21kLmNvbnZlcnRfYXJnIC8gMTAwMCAtIDEsCisJCQlkZXYtPmlvYmFzZSArIERBUzE4MDBfQlVSU1RfUkFURSk7CisJCW91dGIoY21kLmNoYW5saXN0X2xlbiAtIDEsIGRldi0+aW9iYXNlICsgREFTMTgwMF9CVVJTVF9MRU5HVEgpOworCX0KKwlvdXRiKGRldnByaXYtPmlycV9kbWFfYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQik7CS8vIGVuYWJsZSBpcnEvZG1hCisJb3V0Yihjb250cm9sX2EsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0EpOwkvKiBlbmFibGUgZmlmbyBhbmQgdHJpZ2dlcmluZyAqLworCW91dGIoQ1ZFTiwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CS8qIGVuYWJsZSBjb252ZXJzaW9ucyAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qIHJlYWQgYW5hbG9nIGlucHV0ICovCitzdGF0aWMgaW50IGRhczE4MDBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCBuOworCWludCBjaGFuLCByYW5nZSwgYXJlZiwgY2hhbl9yYW5nZTsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisJc2hvcnQgZHBudDsKKwlpbnQgY29udl9mbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwkvKiBzZXQgdXAgYW5hbG9nIHJlZmVyZW5jZSBhbmQgdW5pcG9sYXIgLyBiaXBvbGFyIG1vZGUgKi8KKwlhcmVmID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJY29udl9mbGFncyB8PSBVUUVOOworCWlmIChhcmVmICE9IEFSRUZfRElGRikKKwkJY29udl9mbGFncyB8PSBTRDsKKwlpZiAoYXJlZiA9PSBBUkVGX0NPTU1PTikKKwkJY29udl9mbGFncyB8PSBDTUVOOworCS8qIGlmIGEgdW5pcG9sYXIgcmFuZ2Ugd2FzIHNlbGVjdGVkICovCisJaWYgKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIFVOSVBPTEFSKQorCQljb252X2ZsYWdzIHw9IFVCOworCisJb3V0Yihjb252X2ZsYWdzLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9DKTsJLyogc29mdHdhcmUgY29udmVyc2lvbiBlbmFibGVkICovCisJb3V0YihDVkVOLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsJLyogZW5hYmxlIGNvbnZlcnNpb25zICovCisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0EpOwkvKiByZXNldCBmaWZvICovCisJb3V0YihGRkVOLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9BKTsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkvKiBtYXNrIG9mIHVuaXBvbGFyL2JpcG9sYXIgYml0IGZyb20gcmFuZ2UgKi8KKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIDB4MzsKKwljaGFuX3JhbmdlID0gY2hhbiB8IChyYW5nZSA8PCA4KTsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihRUkFNLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0IFFSQU0gZm9yIGJhc2VBZGRyZXNzICsgMHgwICovCisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNX0FERFJFU1MpOwkvKiBzZXQgUVJBTSBhZGRyZXNzIHN0YXJ0ICovCisJb3V0dyhjaGFuX3JhbmdlLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTSk7CisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNX0FERFJFU1MpOwkvKmZpbmlzaCB3cml0ZSB0byBRUkFNICovCisJb3V0YihBREMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOwkvKiBzZWxlY3QgQURDIGZvciBiYXNlQWRkcmVzcyArIDB4MCAqLworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfRklGTyk7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUykgJiBGTkUpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJZHBudCA9IGludyhkZXYtPmlvYmFzZSArIERBUzE4MDBfRklGTyk7CisJCS8qIHNoaWZ0IGRhdGEgdG8gb2Zmc2V0IGJpbmFyeSBmb3IgYmlwb2xhciByYW5nZXMgKi8KKwkJaWYgKChjb252X2ZsYWdzICYgVUIpID09IDApCisJCQlkcG50ICs9IDEgPDwgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiAtIDEpOworCQlkYXRhW25dID0gZHBudDsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gbjsKK30KKworLyogd3JpdGVzIHRvIGFuIGFuYWxvZyBvdXRwdXQgY2hhbm5lbCAqLworc3RhdGljIGludCBkYXMxODAwX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworLy8gICAgICBpbnQgcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJaW50IHVwZGF0ZV9jaGFuID0gdGhpc2JvYXJkLT5hb19uX2NoYW4gLSAxOworCXNob3J0IG91dHB1dDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCS8vICBjYXJkIGV4cGVjdHMgdHdvJ3MgY29tcGxlbWVudCBkYXRhCisJb3V0cHV0ID0gZGF0YVswXSAtICgxIDw8ICh0aGlzYm9hcmQtPnJlc29sdXRpb24gLSAxKSk7CisJLy8gaWYgdGhlIHdyaXRlIGlzIHRvIHRoZSAndXBkYXRlJyBjaGFubmVsLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIGl0cyB2YWx1ZQorCWlmIChjaGFuID09IHVwZGF0ZV9jaGFuKQorCQlkZXZwcml2LT5hb191cGRhdGVfYml0cyA9IG91dHB1dDsKKwkvLyB3cml0ZSB0byBjaGFubmVsCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoREFDKGNoYW4pLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0IGRhYyBjaGFubmVsIGZvciBiYXNlQWRkcmVzcyArIDB4MCAqLworCW91dHcob3V0cHV0LCBkZXYtPmlvYmFzZSArIERBUzE4MDBfREFDKTsKKwkvLyBub3cgd2UgbmVlZCB0byB3cml0ZSB0byAndXBkYXRlJyBjaGFubmVsIHRvIHVwZGF0ZSBhbGwgZGFjIGNoYW5uZWxzCisJaWYgKGNoYW4gIT0gdXBkYXRlX2NoYW4pIHsKKwkJb3V0YihEQUModXBkYXRlX2NoYW4pLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0ICd1cGRhdGUnIGNoYW5uZWwgZm9yIGJhc2VBZGRyZXNzICsgMHgwICovCisJCW91dHcoZGV2cHJpdi0+YW9fdXBkYXRlX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9EQUMpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiAxOworfQorCisvKiByZWFkcyBmcm9tIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbHMgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKSAmIDB4ZjsKKwlkYXRhWzBdID0gMDsKKworCXJldHVybiAyOworfQorCisvKiB3cml0ZXMgdG8gZGlnaXRhbCBvdXRwdXQgY2hhbm5lbHMgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHdiaXRzOworCisJLy8gb25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwlkYXRhWzBdICY9ICgxIDw8IHMtPm5fY2hhbikgLSAxOworCXdiaXRzID0gZGV2cHJpdi0+ZG9fYml0czsKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlkZXZwcml2LT5kb19iaXRzID0gd2JpdHM7CisKKwlvdXRiKGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKTsKKworCWRhdGFbMV0gPSBkZXZwcml2LT5kb19iaXRzOworCisJcmV0dXJuIDI7Cit9CisKKy8qIGxvYWRzIGNvdW50ZXJzIHdpdGggZGl2aXNvcjEsIGRpdmlzb3IyIGZyb20gcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBlcnIgPSAwOworCisJLy8gY291bnRlciAxLCBtb2RlIDIKKwlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsCisJCQkyKSkKKwkJZXJyKys7CisJLy8gY291bnRlciAyLCBtb2RlIDIKKwlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsCisJCQkyKSkKKwkJZXJyKys7CisJaWYgKGVycikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbnZlcnRzIHJlcXVlc3RlZCBjb252ZXJzaW9uIHRpbWluZyB0byB0aW1pbmcgY29tcGF0aWJsZSB3aXRoCisgKiBoYXJkd2FyZSwgdXNlZCBvbmx5IHdoZW4gY2FyZCBpcyBpbiAnYnVyc3QgbW9kZScKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBidXJzdF9jb252ZXJ0X2FyZyh1bnNpZ25lZCBpbnQgY29udmVydF9hcmcsIGludCByb3VuZF9tb2RlKQoreworCXVuc2lnbmVkIGludCBtaWNyb19zZWM7CisKKwkvLyBpbiBidXJzdCBtb2RlLCB0aGUgbWF4aW11bSBjb252ZXJzaW9uIHRpbWUgaXMgNjQgbWljcm9zZWNvbmRzCisJaWYgKGNvbnZlcnRfYXJnID4gNjQwMDApCisJCWNvbnZlcnRfYXJnID0gNjQwMDA7CisKKwkvLyB0aGUgY29udmVyc2lvbiB0aW1lIG11c3QgYmUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcworCXN3aXRjaCAocm91bmRfbW9kZSkgeworCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCWRlZmF1bHQ6CisJCW1pY3JvX3NlYyA9IChjb252ZXJ0X2FyZyArIDUwMCkgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJbWljcm9fc2VjID0gY29udmVydF9hcmcgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCW1pY3JvX3NlYyA9IChjb252ZXJ0X2FyZyAtIDEpIC8gMTAwMCArIDE7CisJCWJyZWFrOworCX0KKworCS8vIHJldHVybiBudW1iZXIgb2YgbmFub3NlY29uZHMKKwlyZXR1cm4gbWljcm9fc2VjICogMTAwMDsKK30KKworLy8gdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHN1Z2dlc3RzIGEgZG1hIHRyYW5zZmVyIHNpemUgYmFzZWQgb24gdGhlIGNvbnZlcnNpb24gcGVyaW9kICducycKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VnZ2VzdF90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBzaXplID0gRE1BX0JVRl9TSVpFOworCXN0YXRpYyBjb25zdCBpbnQgc2FtcGxlX3NpemUgPSAyOwkvLyBzaXplIGluIGJ5dGVzIG9mIG9uZSBzYW1wbGUgZnJvbSBib2FyZAorCXVuc2lnbmVkIGludCBmaWxsX3RpbWUgPSAzMDAwMDAwMDA7CS8vIHRhcmdldCB0aW1lIGluIG5hbm9zZWNvbmRzIGZvciBmaWxsaW5nIGRtYSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgbWF4X3NpemU7CS8vIG1heGltdW0gc2l6ZSB3ZSB3aWxsIGFsbG93IGZvciBhIHRyYW5zZmVyCisKKwkvLyBtYWtlIGRtYSBidWZmZXIgZmlsbCBpbiAwLjMgc2Vjb25kcyBmb3IgdGltZWQgbW9kZXMKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfRk9MTE9XOgkvLyBub3QgaW4gYnVyc3QgbW9kZQorCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQkJc2l6ZSA9IChmaWxsX3RpbWUgLyBjbWQtPmNvbnZlcnRfYXJnKSAqIHNhbXBsZV9zaXplOworCQlicmVhazsKKwljYXNlIFRSSUdfVElNRVI6CisJCXNpemUgPSAoZmlsbF90aW1lIC8gKGNtZC0+c2Nhbl9iZWdpbl9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbikpICoKKwkJCXNhbXBsZV9zaXplOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzaXplID0gRE1BX0JVRl9TSVpFOworCQlicmVhazsKKwl9CisKKwkvLyBzZXQgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgYWxsb3dlZAorCW1heF9zaXplID0gRE1BX0JVRl9TSVpFOworCS8vIGlmIHdlIGFyZSB0YWtpbmcgbGltaXRlZCBudW1iZXIgb2YgY29udmVyc2lvbnMsIGxpbWl0IHRyYW5zZmVyIHNpemUgdG8gdGhhdAorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuICogc2FtcGxlX3NpemUgPCBtYXhfc2l6ZSkKKwkJbWF4X3NpemUgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4gKiBzYW1wbGVfc2l6ZTsKKworCWlmIChzaXplID4gbWF4X3NpemUpCisJCXNpemUgPSBtYXhfc2l6ZTsKKwlpZiAoc2l6ZSA8IHNhbXBsZV9zaXplKQorCQlzaXplID0gc2FtcGxlX3NpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGNhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICAgU29tZSBjb21tZW50cyBvbiB0aGUgY29kZS4uCisKKyAgIC0gaXQgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSB0byB1c2Ugb3V0Yl9wKCkuCisKKyAgIC0gaWdub3JlaXJxIGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbi4gIEl0IG5lZWRzIHRvIGJlIGZpeGVkLgorCisgKi8KKworLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2RhczY0MDIuYworICAgQW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgQ29tcHV0ZXJib2FyZHMnIERBUzY0MDIgSS9PIGNhcmQKKworICAgQ29weXJpZ2h0IChDKSAxOTk5IE95c3RlaW4gU3ZlbmRzZW4gPHN2ZW5kc2VuQHB2di5vcmc+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogZGFzNjQwMgorRGVzY3JpcHRpb246IEtlaXRobGV5IE1ldHJhYnl0ZSBEQVM2NDAyICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBPeXN0ZWluIFN2ZW5kc2VuIDxzdmVuZHNlbkBwdnYub3JnPgorU3RhdHVzOiBiaXRyb3R0ZW4KK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUzY0MDIgKGRhczY0MDIpCisKK1RoaXMgZHJpdmVyIGhhcyBzdWZmZXJlZCBiaXRyb3QuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBEQVM2NDAyX1NJWkUgMTYKKworI2RlZmluZSBOX1dPUkRTIDMwMDAqNjQKKworI2RlZmluZSBTVE9QICAgIDAKKyNkZWZpbmUgU1RBUlQgICAxCisKKyNkZWZpbmUgU0NBTkwgMHgzZjAwCisjZGVmaW5lIEJZVEUgdW5zaWduZWQgY2hhcgorI2RlZmluZSBXT1JEIHVuc2lnbmVkIHNob3J0CisKKy8qLS0tLS0gcmVnaXN0ZXIgOCAtLS0tKi8KKyNkZWZpbmUgQ0xSSU5UIDB4MDEKKyNkZWZpbmUgQ0xSWFRSIDB4MDIKKyNkZWZpbmUgQ0xSWElOIDB4MDQKKyNkZWZpbmUgRVhURU5EIDB4MTAKKyNkZWZpbmUgQVJNRUQgMHgyMAkJLyogZW5hYmxlIGNvbnRpbmcgb2YgcG9zdCBzYW1wbGUgY29udiAqLworI2RlZmluZSBQT1NUTU9ERSAweDQwCisjZGVmaW5lIE1IWiAweDgwCQkvKiAxMCBNSHogY2xvY2sgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLSByZWdpc3RlciA5IC0tLS0qLworI2RlZmluZSBJUlEgKDB4MDQgPDwgNCkJCS8qIHRoZXNlIHR3byBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJRViAxMAkJCS8qICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIGVhY2ggb3RoZXIgKi8KKworI2RlZmluZSBDT05WU1JDIDB4MDMJCS8qIHRyaWcgc3JjIGlzIEludGFybmFsIHBhY2VyICovCisjZGVmaW5lIEJVUlNURU4gMHgwNAkJLyogZW5hYmxlIGJ1cnN0ICovCisjZGVmaW5lIFhJTlRFIDB4MDgJCS8qIHVzZSBleHRlcm5hbCBpbnQuIHRyaWcgKi8KKyNkZWZpbmUgSU5URSAweDgwCQkvKiBlbmFibGUgYW5hbG9nIGludGVycnVwdHMgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLSByZWdpc3RlciAxMCAtLS0qLworI2RlZmluZSBUR0VOIDB4MDEJCS8qIFVzZSBwaW4gREkxIGZvciBleHRlcm5sIHRyaWdnaW5nPyAqLworI2RlZmluZSBUR1NFTCAweDAyCQkvKiBVc2UgZWRnZSB0cmlnZ2VyaW5nICovCisjZGVmaW5lIFRHUE9MIDB4MDQJCS8qIGFjdGl2ZSBlZGdlIGlzIGZhbGxpbmcgKi8KKyNkZWZpbmUgUFJFVFJJRyAweDA4CQkvKiBwcmV0cmlnICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0gcmVnaXN0ZXIgMTEgLS0tKi8KKyNkZWZpbmUgRU9CIDB4MGMKKyNkZWZpbmUgRklGT0hGVUxMIDB4MDgKKyNkZWZpbmUgR0FJTiAweDAxCisjZGVmaW5lIEZJRk9ORVBUWSAweDA0CisjZGVmaW5lIE1PREUgMHgxMAorI2RlZmluZSBTRU0gMHgyMAorI2RlZmluZSBCSVAgMHg0MAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE0wIDB4MDAKKyNkZWZpbmUgTTIgMHgwNAorCisjZGVmaW5lCUMwIDB4MDAKKyNkZWZpbmUJQzEgMHg0MAorI2RlZmluZQlDMiAweDgwCisjZGVmaW5lCVJXTEggMHgzMAorCitzdGF0aWMgaW50IGRhczY0MDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzNjQwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXM2NDAyID0geworICAgICAgZHJpdmVyX25hbWU6ImRhczY0MDIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczY0MDJfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczY0MDJfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXM2NDAyKTsKKworc3RydWN0IGRhczY0MDJfcHJpdmF0ZSB7CisJaW50IGFpX2J5dGVzX3RvX3JlYWQ7CisKKwlpbnQgZGFzNjQwMl9pZ25vcmVpcnE7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczY0MDJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHZvaWQgZGFzNjQwMl9haV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgdm9pZCBkYXM2NDAyX3NldGNvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJQllURSBwOworCXVuc2lnbmVkIHNob3J0IGN0cmx3cmQ7CisKKwkvKiBzZXQgdXAgY291bnRlcjAgZmlyc3QsIG1vZGUgMCAqLworCXAgPSBNMCB8IEMwIHwgUldMSDsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxNSk7CisJY3RybHdyZCA9IDIwMDA7CisJcCA9IChCWVRFKSAoMHhmZiAmIGN0cmx3cmQpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEyKTsKKwlwID0gKEJZVEUpICgweGZmICYgKGN0cmx3cmQgPj4gOCkpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEyKTsKKworCS8qIHNldCB1cCBjb3VudGVyMSwgbW9kZSAyICovCisJcCA9IE0yIHwgQzEgfCBSV0xIOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDE1KTsKKwljdHJsd3JkID0gMTA7CisJcCA9IChCWVRFKSAoMHhmZiAmIGN0cmx3cmQpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEzKTsKKwlwID0gKEJZVEUpICgweGZmICYgKGN0cmx3cmQgPj4gOCkpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEzKTsKKworCS8qIHNldCB1cCBjb3VudGVyMSwgbW9kZSAyICovCisJcCA9IE0yIHwgQzIgfCBSV0xIOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDE1KTsKKwljdHJsd3JkID0gMTAwMDsKKwlwID0gKEJZVEUpICgweGZmICYgY3RybHdyZCk7CisJb3V0Yl9wKHAsIGRldi0+aW9iYXNlICsgMTQpOworCXAgPSAoQllURSkgKDB4ZmYgJiAoY3RybHdyZCA+PiA4KSk7CisJb3V0Yl9wKHAsIGRldi0+aW9iYXNlICsgMTQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQgfHwgZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEpIHsKKwkJcHJpbnRrKCJkYXM2NDAyOiBCVUc6IHNwdXJpb3VzIGludGVycnVwdFxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisjaWZkZWYgREVCVUcKKwlwcmludGsoImRhczY0MDI6IGludGVycnVwdCEgZGFzNjQwMl9pcnFjb3VudD0laVxuIiwKKwkJZGV2cHJpdi0+ZGFzNjQwMl9pcnFjb3VudCk7CisJcHJpbnRrKCJkYXM2NDAyOiBpb2Jhc2UrMj0laVxuIiwgaW53X3AoZGV2LT5pb2Jhc2UgKyAyKSk7CisjZW5kaWYKKworCWRhczY0MDJfYWlfZmlmb19kcmVncyhkZXYsIHMpOworCisJaWYgKHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgPj0gZGV2cHJpdi0+YWlfYnl0ZXNfdG9fcmVhZCkgeworCQlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIGNsZWFycyB0aGUgZmlmbyAqLworCQlvdXRiKDB4MDcsIGRldi0+aW9iYXNlICsgOCk7CS8qIGNsZWFycyBhbGwgZmxpcC1mbG9wcyAqLworI2lmZGVmIERFQlVHCisJCXByaW50aygiZGFzNjQwMjogR290ICVpIHNhbXBsZXNcblxuIiwKKwkJCWRldnByaXYtPmRhczY0MDJfd29yZHNyZWFkIC0gZGlmZik7CisjZW5kaWYKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlvdXRiKDB4MDEsIGRldi0+aW9iYXNlICsgOCk7CS8qIGNsZWFyIG9ubHkgdGhlIGludGVycnVwdCBmbGlwLWZsb3AgKi8KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGRhczY0MDJfYWlfZmlmb19yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzaG9ydCAqIGRhdGEsIGludCBuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZGF0YVtpXSA9IGludyhkZXYtPmlvYmFzZSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZGFzNjQwMl9haV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgOCkgJiAweDAxKSkKKwkJCXJldHVybjsKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSkpOworCX0KK30KKworc3RhdGljIGludCBkYXM2NDAyX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qCisJICogIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlc2V0IHRoZSBib2FyZCBmcm9tIHdoYXRldmVyIGNvbmRpdGlvbiBpdAorCSAqICBpcyBpbiAoaS5lLiwgYWNxdWlyaW5nIGRhdGEpLCB0byBhIG5vbi1hY3RpdmUgc3RhdGUuCisJICovCisKKwlkZXZwcml2LT5kYXM2NDAyX2lnbm9yZWlycSA9IDE7CisjaWZkZWYgREVCVUcKKwlwcmludGsoImRhczY0MDI6IFN0b3BwaW5nIGFjcXVpc2l0aW9uXG4iKTsKKyNlbmRpZgorCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMTsKKwlvdXRiX3AoMHgwMiwgZGV2LT5pb2Jhc2UgKyAxMCk7CS8qIGRpc2FibGUgZXh0ZXJuYWwgdHJpZ2dpbmcgKi8KKwlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIHJlc2V0cyB0aGUgY2FyZCBmaWZvICovCisJb3V0Yl9wKDAsIGRldi0+aW9iYXNlICsgOSk7CS8qIGRpc2FibGVzIGludGVycnVwdHMgKi8KKworCW91dHdfcChTQ0FOTCwgZGV2LT5pb2Jhc2UgKyAyKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgdW51c2VkCitzdGF0aWMgaW50IGRhczY0MDJfYWlfbW9kZTIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwljb21lZGlfdHJpZyAqIGl0KQoreworCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkYXM2NDAyOiBTdGFydGluZyBhY3F1aXNpdGlvblxuIik7CisjZW5kaWYKKwlvdXRiX3AoMHgwMywgZGV2LT5pb2Jhc2UgKyAxMCk7CS8qIGVuYWJsZSBleHRlcm5hbCB0cmlnZ2luZyAqLworCW91dHdfcChTQ0FOTCwgZGV2LT5pb2Jhc2UgKyAyKTsJLyogcmVzZXRzIHRoZSBjYXJkIGZpZm8gKi8KKwlvdXRiX3AoSVJRIHwgQ09OVlNSQyB8IEJVUlNURU4gfCBJTlRFLCBkZXYtPmlvYmFzZSArIDkpOworCisJZGV2cHJpdi0+YWlfYnl0ZXNfdG9fcmVhZCA9IGl0LT5uICogc2l6ZW9mKHNob3J0KTsKKworCS8qIHVtLi4uIGlnbm9yZWlycSBpcyBhIG5hc3R5IHJhY2UgY29uZGl0aW9uICovCisJZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEgPSAwOworCisJb3V0d19wKFNDQU5MLCBkZXYtPmlvYmFzZSArIDIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBib2FyZF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUJZVEUgYjsKKworCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMTsKKworCW91dGIoMHgwNywgZGV2LT5pb2Jhc2UgKyA4KTsKKworCS8qIHJlZ2lzdGVyIDExICAqLworCW91dGJfcChNT0RFLCBkZXYtPmlvYmFzZSArIDExKTsKKwliID0gQklQIHwgU0VNIHwgTU9ERSB8IEdBSU4gfCBGSUZPSEZVTEw7CisJb3V0Yl9wKGIsIGRldi0+aW9iYXNlICsgMTEpOworCisJLyogcmVnaXN0ZXIgOCAgICovCisJb3V0Yl9wKEVYVEVORCwgZGV2LT5pb2Jhc2UgKyA4KTsKKwliID0gRVhURU5EIHwgTUhaOworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDgpOworCWIgPSBNSFogfCBDTFJJTlQgfCBDTFJYVFIgfCBDTFJYSU47CisJb3V0Yl9wKGIsIGRldi0+aW9iYXNlICsgOCk7CisKKwkvKiByZWdpc3RlciA5ICAgICovCisJYiA9IElSUSB8IENPTlZTUkMgfCBCVVJTVEVOIHwgSU5URTsKKwlvdXRiX3AoYiwgZGV2LT5pb2Jhc2UgKyA5KTsKKworCS8qIHJlZ2lzdGVyIDEwICAgKi8KKwliID0gVEdTRUwgfCBUR0VOOworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDEwKTsKKworCWIgPSAweDA3OworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDgpOworCisJZGFzNjQwMl9zZXRjb3VudGVyKGRldik7CisKKwlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIHJlc2V0IGNhcmQgZmlmbyAqLworCisJZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzNjQwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgREFTNjQwMl9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczY0MDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWRldi0+Ym9hcmRfbmFtZSA9ICJkYXM2NDAyIjsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmIChpb2Jhc2UgPT0gMCkKKwkJaW9iYXNlID0gMHgzMDA7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXM2NDAyOiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEQVM2NDAyX1NJWkUsICJkYXM2NDAyIikpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiBzaG91bGQgZG8gYSBwcm9iZSBoZXJlICovCisKKwlpcnEgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoIiAoIGlycSA9ICV1ICkiLCBpcnEpOworCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludHJfaGFuZGxlciwgMCwgImRhczY0MDIiLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiaXJxIGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczY0MDJfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogYWkgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gODsKKwkvL3MtPnRyaWdbMl09ZGFzNjQwMl9haV9tb2RlMjsKKwlzLT5jYW5jZWwgPSBkYXM2NDAyX2FpX2NhbmNlbDsKKwlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsJLyogPyAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisKKwlib2FyZF9pbml0KGRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY2NTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCkBAIC0wLDAgKzEsODk0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczgwMC5jCisgICAgRHJpdmVyIGZvciBLZWl0bGV5IGRhczgwMCBzZXJpZXMgYm9hcmRzIGFuZCBjb21wYXRpYmxlcworICAgIENvcHlyaWdodCAoQykgMjAwMCBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGRhczgwMAorRGVzY3JpcHRpb246IEtlaXRobGV5IE1ldHJhYnl0ZSBEQVM4MDAgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUy04MDAgKGRhcy04MDApLCBEQVMtODAxIChkYXMtODAxKSwKKyAgREFTLTgwMiAoZGFzLTgwMiksCisgIFtNZWFzdXJlbWVudCBDb21wdXRpbmddIENJTy1EQVM4MDAgKGNpby1kYXM4MDApLAorICBDSU8tREFTODAxIChjaW8tZGFzODAxKSwgQ0lPLURBUzgwMiAoY2lvLWRhczgwMiksCisgIENJTy1EQVM4MDIvMTYgKGNpby1kYXM4MDIvMTYpCitTdGF0dXM6IHdvcmtzLCBjaW8tZGFzODAyLzE2IHVudGVzdGVkIC0gZW1haWwgbWUgaWYgeW91IGhhdmUgdGVzdGVkIGl0CisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciB0aW1lZCBvciBleHRlcm5hbGx5IHRyaWdnZXJlZCBjb252ZXJzaW9ucykKKworTm90ZXM6CisJSVJRIGNhbiBiZSBvbWl0dGVkLCBhbHRob3VnaCB0aGUgY21kIGludGVyZmFjZSB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgaXQuCisKKwlBbGwgZW50cmllcyBpbiB0aGUgY2hhbm5lbC9nYWluIGxpc3QgbXVzdCB1c2UgdGhlIHNhbWUgZ2FpbiBhbmQgYmUKKwljb25zZWN1dGl2ZSBjaGFubmVscyBjb3VudGluZyB1cHdhcmRzIGluIGNoYW5uZWwgbnVtYmVyICh0aGVzZSBhcmUKKwloYXJkd2FyZSBsaW1pdGF0aW9ucy4pCisKKwlJJ3ZlIG5ldmVyIHRlc3RlZCB0aGUgZ2FpbiBzZXR0aW5nIHN0dWZmIHNpbmNlIEkgb25seSBoYXZlIGEKKwlEQVMtODAwIGJvYXJkIHdpdGggZml4ZWQgZ2Fpbi4KKworCVRoZSBjaW8tZGFzODAyLzE2IGRvZXMgbm90IGhhdmUgYSBmaWZvLWVtcHR5IHN0YXR1cyBiaXQhICBUaGVyZWZvcmUKKwlvbmx5IGZpZm8taGFsZi1mdWxsIHRyYW5zZmVycyBhcmUgcG9zc2libGUgd2l0aCB0aGlzIGNhcmQuCisqLworLyoKKworY21kIHRyaWdnZXJzIHN1cHBvcnRlZDoKKwlzdGFydF9zcmM6ICAgICAgVFJJR19OT1cgfCBUUklHX0VYVAorCXNjYW5fYmVnaW5fc3JjOiBUUklHX0ZPTExPVworCXNjYW5fZW5kX3NyYzogICBUUklHX0NPVU5UCisJY29udmVydF9zcmM6ICAgIFRSSUdfVElNRVIgfCBUUklHX0VYVAorCXN0b3Bfc3JjOiAgICAgICBUUklHX05PTkUgfCBUUklHX0NPVU5UCisKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI2RlZmluZSBEQVM4MDBfU0laRSAgICAgICAgICAgOAorI2RlZmluZSBUSU1FUl9CQVNFICAgICAgICAgICAgMTAwMAorI2RlZmluZSBOX0NIQU5fQUkgICAgICAgICAgICAgOAkvLyBudW1iZXIgb2YgYW5hbG9nIGlucHV0IGNoYW5uZWxzCisKKy8qIFJlZ2lzdGVycyBmb3IgdGhlIGRhczgwMCAqLworCisjZGVmaW5lIERBUzgwMF9MU0IgICAgICAgICAgICAwCisjZGVmaW5lICAgRklGT19FTVBUWSAgICAgICAgICAgIDB4MQorI2RlZmluZSAgIEZJRk9fT1ZGICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgREFTODAwX01TQiAgICAgICAgICAgIDEKKyNkZWZpbmUgREFTODAwX0NPTlRST0wxICAgICAgIDIKKyNkZWZpbmUgICBDT05UUk9MMV9JTlRFICAgICAgICAgMHg4CisjZGVmaW5lIERBUzgwMF9DT05WX0NPTlRST0wgICAyCisjZGVmaW5lICAgSVRFICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgIENBU0MgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICBEVEVOICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgSUVPQyAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgIEVBQ1MgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgQ09OVl9IQ0VOICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTODAwX1NDQU5fTElNSVRTICAgIDIKKyNkZWZpbmUgREFTODAwX1NUQVRVUyAgICAgICAgIDIKKyNkZWZpbmUgICBJUlEgICAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lICAgQlVTWSAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTODAwX0dBSU4gICAgICAgICAgIDMKKyNkZWZpbmUgICBDSU9fRkZPViAgICAgICAgICAgICAgMHg4CS8vIGZpZm8gb3ZlcmZsb3cgZm9yIGNpby1kYXM4MDIvMTYKKyNkZWZpbmUgICBDSU9fRU5IRiAgICAgICAgICAgICAgMHg5MAkvLyBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwgZm9yIGNpby1kYXM4MDIvMTYKKyNkZWZpbmUgICBDT05UUk9MMSAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSAgIENPTlZfQ09OVFJPTCAgICAgICAgICAweGEwCisjZGVmaW5lICAgU0NBTl9MSU1JVFMgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgICBJRCAgICAgICAgICAgICAgICAgICAgMHhlMAorI2RlZmluZSBEQVM4MDBfODI1NCAgICAgICAgICAgNAorI2RlZmluZSBEQVM4MDBfU1RBVFVTMiAgICAgICAgNworI2RlZmluZSAgIFNUQVRVUzJfSENFTiAgICAgICAgICAweDgwCisjZGVmaW5lICAgU1RBVFVTMl9JTlRFICAgICAgICAgIDBYMjAKKyNkZWZpbmUgREFTODAwX0lEICAgICAgICAgICAgIDcKKworc3RydWN0IGRhczgwMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfc3BlZWQ7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlOworCWludCByZXNvbHV0aW9uOworfTsKKworLy9hbmFsb2cgaW5wdXQgcmFuZ2VzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzODAwX2FpID0geworCTEsCisJeworCQkJUkFOR0UoLTUsIDUpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzODAxX2FpID0geworCTksCisJeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgtMC4wNSwgMC4wNSksCisJCQlSQU5HRSgwLCAwLjEpLAorCQkJUkFOR0UoLTAuMDEsIDAuMDEpLAorCQkJUkFOR0UoMCwgMC4wMiksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9jaW9fZGFzODAxX2FpID0geworCTksCisJeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgtMC4wNSwgMC4wNSksCisJCQlSQU5HRSgwLCAwLjEpLAorCQkJUkFOR0UoLTAuMDA1LCAwLjAwNSksCisJCQlSQU5HRSgwLCAwLjAxKSwKKwkJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczgwMl9haSA9IHsKKwk5LAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKC0wLjYyNSwgMC42MjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXM4MDIxNl9haSA9IHsKKwk4LAorCXsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQl9Cit9OworCitlbnVtIHsgZGFzODAwLCBjaW9kYXM4MDAsIGRhczgwMSwgY2lvZGFzODAxLCBkYXM4MDIsIGNpb2RhczgwMiwgY2lvZGFzODAyMTYgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXM4MDBfYm9hcmQgZGFzODAwX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiZGFzLTgwMCIsCisJICAgICAgYWlfc3BlZWQ6MjUwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2RhczgwMF9haSwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczgwMCIsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2RhczgwMF9haSwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTgwMSIsCisJICAgICAgYWlfc3BlZWQ6MjUwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2RhczgwMV9haSwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczgwMSIsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2Npb19kYXM4MDFfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy04MDIiLAorCSAgICAgIGFpX3NwZWVkOjI1MDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDJfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXM4MDIiLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDJfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXM4MDIvMTYiLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDIxNl9haSwKKwkgICAgICByZXNvbHV0aW9uOjE2LAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzODAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBkYXM4MDBfcHJpdmF0ZSB7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworCXZvbGF0aWxlIGludCBmb3JldmVyOwkvKiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB3ZSBzaG91bGQgdGFrZSBkYXRhIGZvcmV2ZXIgKi8KKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjE7CS8qIHZhbHVlIHRvIGxvYWQgaW50byBib2FyZCdzIGNvdW50ZXIgMSBmb3IgdGltZWQgY29udmVyc2lvbnMgKi8KKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CS8qIHZhbHVlIHRvIGxvYWQgaW50byBib2FyZCdzIGNvdW50ZXIgMiBmb3IgdGltZWQgY29udmVyc2lvbnMgKi8KKwl2b2xhdGlsZSBpbnQgZG9fYml0czsJLyogZGlnaXRhbCBvdXRwdXQgYml0cyAqLworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczgwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGRhczgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkYXM4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgZGFzODAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXM4MDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzODAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXM4MDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczgwMF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRhczgwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkYXM4MDBfYm9hcmQpLAorICAgICAgYm9hcmRfbmFtZTomZGFzODAwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZGFzODAwX2JvYXJkKSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXM4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIHZvaWQgZW5hYmxlX2RhczgwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2RhczgwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGRhczgwMF9haV9kb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXM4MDBfYWlfZG9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkYXM4MDBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzODAwX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXM4MDBfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBkYXM4MDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKy8qIGNoZWNrcyBhbmQgcHJvYmVzIGRhcy04MDAgc2VyaWVzIGJvYXJkIHR5cGUgKi8KK3N0YXRpYyBpbnQgZGFzODAwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpZF9iaXRzOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBib2FyZDsKKworCS8vICdjb21lZGkgc3BpbiBsb2NrIGlycXNhdmUnIGRpc2FibGVzIGV2ZW4gcnQgaW50ZXJydXB0cywgd2UgdXNlIHRoZW0gdG8gcHJvdGVjdCBpbmRpcmVjdCBhZGRyZXNzaW5nCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoSUQsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgYmFzZSBhZGRyZXNzICsgNyB0byBiZSBJRCByZWdpc3RlciAqLworCWlkX2JpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfSUQpICYgMHgzOwkvKiBnZXQgaWQgYml0cyAqLworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJYm9hcmQgPSB0aGlzYm9hcmQgLSBkYXM4MDBfYm9hcmRzOworCisJc3dpdGNoIChpZF9iaXRzKSB7CisJY2FzZSAweDA6CisJCWlmIChib2FyZCA9PSBkYXM4MDApIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBEQVMtODAwXG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlpZiAoYm9hcmQgPT0gY2lvZGFzODAwKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogQ0lPLURBUzgwMFxuIik7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCk6IERBUy04MDBcbiIpOworCQlyZXR1cm4gZGFzODAwOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJaWYgKGJvYXJkID09IGRhczgwMSkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IERBUy04MDFcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCWlmIChib2FyZCA9PSBjaW9kYXM4MDEpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBDSU8tREFTODAxXG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkKTogREFTLTgwMVxuIik7CisJCXJldHVybiBkYXM4MDE7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlpZiAoYm9hcmQgPT0gZGFzODAyKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogREFTLTgwMlxuIik7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJaWYgKGJvYXJkID09IGNpb2RhczgwMikgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IENJTy1EQVM4MDJcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCWlmIChib2FyZCA9PSBjaW9kYXM4MDIxNikgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IENJTy1EQVM4MDIvMTZcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQpOiBEQVMtODAyXG4iKTsKKwkJcmV0dXJuIGRhczgwMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IHByb2JlIHJldHVybmVkIDB4JXggKHVua25vd24pXG4iLAorCQkJaWRfYml0cyk7CisJCXJldHVybiBib2FyZDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXM4MDApOworCisvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXNob3J0IGk7CQkvKiBsb29wIGluZGV4ICovCisJc2hvcnQgZGF0YVBvaW50ID0gMDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0YXRpYyBjb25zdCBpbnQgbWF4X2xvb3BzID0gMTI4OwkvLyBoYWxmLWZpZm8gc2l6ZSBmb3IgY2lvLWRhczgwMi8xNgorCS8vIGZsYWdzCisJaW50IGZpZm9fZW1wdHkgPSAwOworCWludCBmaWZvX292ZXJmbG93ID0gMDsKKworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9TVEFUVVMpOworCS8qIGlmIGludGVycnVwdCB3YXMgbm90IGdlbmVyYXRlZCBieSBib2FyZCBvciBkcml2ZXIgbm90IGF0dGFjaGVkLCBxdWl0ICovCisJaWYgKCEoc3RhdHVzICYgSVJRKSkKKwkJcmV0dXJuIElSUV9OT05FOworCWlmICghKGRldi0+YXR0YWNoZWQpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkvKiB3YWl0IHVudGlsIGhlcmUgdG8gaW5pdGlhbGl6ZSBhc3luYywgc2luY2Ugd2Ugd2lsbCBnZXQgbnVsbCBkZXJlZmVyZW5jZQorCSAqIGlmIGludGVycnVwdCBvY2N1cnMgYmVmb3JlIGRyaXZlciBpcyBmdWxseSBhdHRhY2hlZCEKKwkgKi8KKwlhc3luYyA9IHMtPmFzeW5jOworCisJLy8gaWYgaGFyZHdhcmUgY29udmVyc2lvbnMgYXJlIG5vdCBlbmFibGVkLCB0aGVuIHF1aXQKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihDT05UUk9MMSwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CS8qIHNlbGVjdCBiYXNlIGFkZHJlc3MgKyA3IHRvIGJlIFNUQVRVUzIgcmVnaXN0ZXIgKi8KKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU1RBVFVTMikgJiBTVEFUVVMyX0hDRU47CisJLyogZG9uJ3QgcmVsZWFzZSBzcGlubG9jayB5ZXQgc2luY2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgbm9vbmUgZWxzZSBkaXNhYmxlcyBoYXJkd2FyZSBjb252ZXJzaW9ucyAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIGxvb3Agd2hpbGUgY2FyZCdzIGZpZm8gaXMgbm90IGVtcHR5IChhbmQgbGltaXQgdG8gaGFsZiBmaWZvIGZvciBjaW8tZGFzODAyLzE2KSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9vcHM7IGkrKykgeworCQkvKiByZWFkIDE2IGJpdHMgZnJvbSBkZXYtPmlvYmFzZSBhbmQgZGV2LT5pb2Jhc2UgKyAxICovCisJCWRhdGFQb2ludCA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9MU0IpOworCQlkYXRhUG9pbnQgKz0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX01TQikgPDwgODsKKwkJaWYgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiA9PSAxMikgeworCQkJZmlmb19lbXB0eSA9IGRhdGFQb2ludCAmIEZJRk9fRU1QVFk7CisJCQlmaWZvX292ZXJmbG93ID0gZGF0YVBvaW50ICYgRklGT19PVkY7CisJCQlpZiAoZmlmb19vdmVyZmxvdykKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWZpZm9fZW1wdHkgPSAwOwkvLyBjaW8tZGFzODAyLzE2IGhhcyBubyBmaWZvIGVtcHR5IHN0YXR1cyBiaXQKKwkJfQorCQlpZiAoZmlmb19lbXB0eSkgeworCQkJYnJlYWs7CisJCX0KKwkJLyogc3RyaXAgb2ZmIGV4dHJhbmVvdXMgYml0cyBmb3IgMTIgYml0IGNhcmRzICovCisJCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIpCisJCQlkYXRhUG9pbnQgPSAoZGF0YVBvaW50ID4+IDQpICYgMHhmZmY7CisJCS8qIGlmIHRoZXJlIGFyZSBtb3JlIGRhdGEgcG9pbnRzIHRvIGNvbGxlY3QgKi8KKwkJaWYgKGRldnByaXYtPmNvdW50ID4gMCB8fCBkZXZwcml2LT5mb3JldmVyID09IDEpIHsKKwkJCS8qIHdyaXRlIGRhdGEgcG9pbnQgdG8gYnVmZmVyICovCisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGFQb2ludCk7CisJCQlpZiAoZGV2cHJpdi0+Y291bnQgPiAwKQorCQkJCWRldnByaXYtPmNvdW50LS07CisJCX0KKwl9CisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJLyogY2hlY2sgZm9yIGZpZm8gb3ZlcmZsb3cgKi8KKwlpZiAodGhpc2JvYXJkLT5yZXNvbHV0aW9uID09IDEyKSB7CisJCWZpZm9fb3ZlcmZsb3cgPSBkYXRhUG9pbnQgJiBGSUZPX09WRjsKKwkJLy8gZWxzZSBjaW8tZGFzODAyLzE2CisJfSBlbHNlIHsKKwkJZmlmb19vdmVyZmxvdyA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKSAmIENJT19GRk9WOworCX0KKwlpZiAoZmlmb19vdmVyZmxvdykgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkRBUzgwMCBGSUZPIG92ZXJmbG93Iik7CisJCWRhczgwMF9jYW5jZWwoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAwKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyA9IDA7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKGRldnByaXYtPmNvdW50ID4gMCB8fCBkZXZwcml2LT5mb3JldmVyID09IDEpIHsKKwkJLyogUmUtZW5hYmxlIGNhcmQncyBpbnRlcnJ1cHQuCisJCSAqIFdlIGFscmVhZHkgaGF2ZSBzcGlubG9jaywgc28gaW5kaXJlY3QgYWRkcmVzc2luZyBpcyBzYWZlICovCisJCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCQlvdXRiKENPTlRST0wxX0lOVEUgfCBkZXZwcml2LT5kb19iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVFJPTDEpOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJLyogb3RoZXJ3aXNlLCBzdG9wIHRha2luZyBkYXRhICovCisJfSBlbHNlIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJCWRpc2FibGVfZGFzODAwKGRldik7CS8qIGRpYWJsZSBoYXJkd2FyZSB0cmlnZ2VyZWQgY29udmVyc2lvbnMgKi8KKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXVuc2lnbmVkIGludCBpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgYm9hcmQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXM4MDA6IGlvIDB4JWx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0KKwlwcmludGsoIlxuIik7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzODAwX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkIGZvciBkYXM4MDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEQVM4MDBfU0laRSwgImRhczgwMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlib2FyZCA9IGRhczgwMF9wcm9iZShkZXYpOworCWlmIChib2FyZCA8IDApIHsKKwkJcHJpbnRrKCJ1bmFibGUgdG8gZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2LT5ib2FyZF9wdHIgPSBkYXM4MDBfYm9hcmRzICsgYm9hcmQ7CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpZiAoaXJxID09IDEgfHwgaXJxID4gNykgeworCQlwcmludGsoImlycSBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGlycSkgeworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgZGFzODAwX2ludGVycnVwdCwgMCwgImRhczgwMCIsIGRldikpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWRldi0+aXJxID0gaXJxOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5yZXNvbHV0aW9uKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlOworCXMtPmRvX2NtZCA9IGRhczgwMF9haV9kb19jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGRhczgwMF9haV9kb19jbWR0ZXN0OworCXMtPmluc25fcmVhZCA9IGRhczgwMF9haV9yaW5zbjsKKwlzLT5jYW5jZWwgPSBkYXM4MDBfY2FuY2VsOworCisJLyogZGkgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkYXM4MDBfZGlfcmJpdHM7CisKKwkvKiBkbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczgwMF9kb193Yml0czsKKworCWRpc2FibGVfZGFzODAwKGRldik7CisKKwkvKiBpbml0aWFsaXplIGRpZ2l0YWwgb3V0IGNoYW5uZWxzICovCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoQ09OVFJPTDFfSU5URSB8IGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBkYXM4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczgwMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERBUzgwMF9TSVpFKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGFzODAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWRldnByaXYtPmZvcmV2ZXIgPSAwOworCWRldnByaXYtPmNvdW50ID0gMDsKKwlkaXNhYmxlX2RhczgwMChkZXYpOworCXJldHVybiAwOworfQorCisvKiBlbmFibGVfZGFzODAwIG1ha2VzIHRoZSBjYXJkIHN0YXJ0IHRha2luZyBoYXJkd2FyZSB0cmlnZ2VyZWQgY29udmVyc2lvbnMgKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9kYXM4MDAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCS8vIGVuYWJsZSBmaWZvLWhhbGYgZnVsbCBpbnRlcnJ1cHRzIGZvciBjaW8tZGFzODAyLzE2CisJaWYgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiA9PSAxNikKKwkJb3V0YihDSU9fRU5IRiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CisJb3V0YihDT05WX0NPTlRST0wsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnZlcnNpb24gY29udHJvbCByZWdpc3RlciAqLworCW91dGIoQ09OVl9IQ0VOLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05WX0NPTlRST0wpOwkvKiBlbmFibGUgaGFyZHdhcmUgdHJpZ2dlcmluZyAqLworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoQ09OVFJPTDFfSU5URSB8IGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsJLyogZW5hYmxlIGNhcmQncyBpbnRlcnJ1cHQgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKK30KKworLyogZGlzYWJsZV9kYXM4MDAgc3RvcHMgaGFyZHdhcmUgdHJpZ2dlcmVkIGNvbnZlcnNpb25zICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2RhczgwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihDT05WX0NPTlRST0wsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnZlcnNpb24gY29udHJvbCByZWdpc3RlciAqLworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05WX0NPTlRST0wpOwkvKiBkaXNhYmxlIGhhcmR3YXJlIHRyaWdnZXJpbmcgb2YgY29udmVyc2lvbnMgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGludCBkYXM4MDBfYWlfZG9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IGdhaW4sIHN0YXJ0Q2hhbjsKKwlpbnQgaTsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJihjbWQtPmNvbnZlcnRfYXJnKSwKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlzdGFydENoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQkoc3RhcnRDaGFuICsgaSkgJSBOX0NIQU5fQUkpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSBnYWluKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBzdGFydENoYW4sIGVuZENoYW4sIHNjYW4sIGdhaW47CisJaW50IGNvbnZfYml0czsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCisJaWYgKCFkZXYtPmlycSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIm5vIGlycSBhc3NpZ25lZCBmb3IgZGFzLTgwMCwgY2Fubm90IGRvIGhhcmR3YXJlIGNvbnZlcnNpb25zIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkaXNhYmxlX2RhczgwMChkZXYpOworCisJLyogc2V0IGNoYW5uZWwgc2NhbiBsaW1pdHMgKi8KKwlzdGFydENoYW4gPSBDUl9DSEFOKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pOworCWVuZENoYW4gPSAoc3RhcnRDaGFuICsgYXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gLSAxKSAlIDg7CisJc2NhbiA9IChlbmRDaGFuIDw8IDMpIHwgc3RhcnRDaGFuOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoU0NBTl9MSU1JVFMsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgYmFzZSBhZGRyZXNzICsgMiB0byBiZSBzY2FuIGxpbWl0cyByZWdpc3RlciAqLworCW91dGIoc2NhbiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU0NBTl9MSU1JVFMpOwkvKiBzZXQgc2NhbiBsaW1pdHMgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCS8qIHNldCBnYWluICovCisJZ2FpbiA9IENSX1JBTkdFKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pOworCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIgJiYgZ2FpbiA+IDApCisJCWdhaW4gKz0gMHg3OworCWdhaW4gJj0gMHhmOworCW91dGIoZ2FpbiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CisKKwlzd2l0Y2ggKGFzeW5jLT5jbWQuc3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWRldnByaXYtPmNvdW50ID0gYXN5bmMtPmNtZC5zdG9wX2FyZyAqIGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCQlkZXZwcml2LT5mb3JldmVyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWRldnByaXYtPmZvcmV2ZXIgPSAxOworCQlkZXZwcml2LT5jb3VudCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIGVuYWJsZSBhdXRvIGNoYW5uZWwgc2Nhbiwgc2VuZCBpbnRlcnJ1cHRzIG9uIGVuZCBvZiBjb252ZXJzaW9uCisJICogYW5kIHNldCBjbG9jayBzb3VyY2UgdG8gaW50ZXJuYWwgb3IgZXh0ZXJuYWwKKwkgKi8KKwljb252X2JpdHMgPSAwOworCWNvbnZfYml0cyB8PSBFQUNTIHwgSUVPQzsKKwlpZiAoYXN5bmMtPmNtZC5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWNvbnZfYml0cyB8PSBEVEVOOworCXN3aXRjaCAoYXN5bmMtPmNtZC5jb252ZXJ0X3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJY29udl9iaXRzIHw9IENBU0MgfCBJVEU7CisJCS8qIHNldCBjb252ZXJzaW9uIGZyZXF1ZW5jeSAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJihhc3luYy0+Y21kLmNvbnZlcnRfYXJnKSwKKwkJCWFzeW5jLT5jbWQuZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoZGFzODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJFcnJvciBzZXR0aW5nIHVwIGNvdW50ZXJzIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVl9DT05UUk9MLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb252ZXJzaW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlvdXRiKGNvbnZfYml0cywgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVl9DT05UUk9MKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwllbmFibGVfZGFzODAwKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgY2hhbjsKKwlpbnQgcmFuZ2U7CisJaW50IGxzYiwgbXNiOworCWludCB0aW1lb3V0ID0gMTAwMDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWRpc2FibGVfZGFzODAwKGRldik7CS8qIGRpc2FibGUgaGFyZHdhcmUgY29udmVyc2lvbnMgKGVuYWJsZXMgc29mdHdhcmUgY29udmVyc2lvbnMpICovCisKKwkvKiBzZXQgbXVsdGlwbGV4ZXIgKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihDT05UUk9MMSwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CS8qIHNlbGVjdCBkZXYtPmlvYmFzZSArIDIgdG8gYmUgY29udHJvbCByZWdpc3RlciAxICovCisJb3V0YihjaGFuIHwgZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVFJPTDEpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJLyogc2V0IGdhaW4gLyByYW5nZSAqLworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIgJiYgcmFuZ2UpCisJCXJhbmdlICs9IDB4NzsKKwlyYW5nZSAmPSAweGY7CisJb3V0YihyYW5nZSwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CisKKwljb21lZGlfdWRlbGF5KDUpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0Yl9wKDAsIGRldi0+aW9iYXNlICsgREFTODAwX01TQik7CisKKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgREFTODAwX1NUQVRVUykgJiBCVVNZKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAidGltZW91dCIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlsc2IgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfTFNCKTsKKwkJbXNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX01TQik7CisJCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIpIHsKKwkJCWRhdGFbbl0gPSAobHNiID4+IDQpICYgMHhmZjsKKwkJCWRhdGFbbl0gfD0gKG1zYiA8PCA0KTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbbl0gPSAobXNiIDw8IDgpIHwgbHNiOworCQl9CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU1RBVFVTKSA+PiA0OworCWJpdHMgJj0gMHg3OworCWRhdGFbMV0gPSBiaXRzOworCWRhdGFbMF0gPSAwOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2JpdHM7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwkvLyBvbmx5IHNldCBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZAorCWRhdGFbMF0gJj0gMHhmOworCXdiaXRzID0gZGV2cHJpdi0+ZG9fYml0cyA+PiA0OworCXdiaXRzICY9IH5kYXRhWzBdOworCXdiaXRzIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCWRldnByaXYtPmRvX2JpdHMgPSB3Yml0cyA8PCA0OworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoZGV2cHJpdi0+ZG9fYml0cyB8IENPTlRST0wxX0lOVEUsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCWRhdGFbMV0gPSB3Yml0czsKKworCXJldHVybiAyOworfQorCisvKiBsb2FkcyBjb3VudGVycyB3aXRoIGRpdmlzb3IxLCBkaXZpc29yMiBmcm9tIHByaXZhdGUgc3RydWN0dXJlICovCitzdGF0aWMgaW50IGRhczgwMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBlcnIgPSAwOworCisJaWYgKGk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfODI1NCwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsIDIpKQorCQllcnIrKzsKKwlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzgwMF84MjU0LCAwLCAyLCBkZXZwcml2LT5kaXZpc29yMiwgMikpCisJCWVycisrOworCWlmIChlcnIpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5MDgzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKQEAgLTAsMCArMSwxMDgxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYworICAgIERpYW1vbmQgU3lzdGVtcyBtbTMyYXQgY29kZSBmb3IgYSBDb21lZGkgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBkbW0zMmF0CitEZXNjcmlwdGlvbjogRGlhbW9uZCBTeXN0ZW1zIG1tMzJhdCBkcml2ZXIuCitEZXZpY2VzOgorQXV0aG9yOiBQZXJyeSBKLiBQaXBsYW5pIDxwZXJyeS5qLnBpcGxhbmlAbmFzYS5nb3Y+CitVcGRhdGVkOiBGcmkgSnVuICA0IDA5OjEzOjI0IENEVCAyMDA0CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitUaGlzIGRyaXZlciBpcyBmb3IgdGhlIERpYW1vbmQgU3lzdGVtcyBNTS0zMi1BVCBib2FyZAoraHR0cDovL3d3dy5kaWFtb25kc3lzdGVtcy5jb20vcHJvZHVjdHMvZGlhbW9uZG1tMzJhdCBJdCBpcyBiZWluZyB1c2VkCitvbiBzZXJ2ZXJhbCBwcm9qZWN0cyBpbnNpZGUgTkFTQSwgd2l0aG91dCBwcm9ibGVtcyBzbyBmYXIuIEZvciBhbmFsb2cKK2lucHV0IGNvbW1hbmRzLCBUUklHX0VYVCBpcyBub3QgeWV0IHN1cHBvcnRlZCBhdCBhbGwuLgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIGNvbWVkaV9jb25maWcgL2Rldi9jb21lZGkwIGRtbTMyYXQgYmFzZWFkZHIsaXJxCisqLworCisvKgorICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCisgKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKKyAqCisgKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKKyAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KKyAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQorICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAorICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KKyAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQorICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCisgKiAgIHZhbHVlIGlzIHVzZWQuCisgKiBBdXRob3I6IHlvdQorICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKKyAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCisgKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6CisgKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAorICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KKyAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KKyAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKKyAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCisgKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQorICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKKyAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgorICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KKyAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgorICoKKyAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cworICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQorICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAorICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCisgKiBzdWJkZXZpY2VzLCBldGMuCisgKgorICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworLyogQm9hcmQgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisKKyNkZWZpbmUgRE1NMzJBVF9NRU1TSVpFIDB4MTAKKworI2RlZmluZSBETU0zMkFUX0NPTlYgMHgwMAorI2RlZmluZSBETU0zMkFUX0FJTFNCIDB4MDAKKyNkZWZpbmUgRE1NMzJBVF9BVVhET1VUIDB4MDEKKyNkZWZpbmUgRE1NMzJBVF9BSU1TQiAweDAxCisjZGVmaW5lIERNTTMyQVRfQUlMT1cgMHgwMgorI2RlZmluZSBETU0zMkFUX0FJSElHSCAweDAzCisKKyNkZWZpbmUgRE1NMzJBVF9EQUNMU0IgMHgwNAorI2RlZmluZSBETU0zMkFUX0RBQ1NUQVQgMHgwNAorI2RlZmluZSBETU0zMkFUX0RBQ01TQiAweDA1CisKKyNkZWZpbmUgRE1NMzJBVF9GSUZPQ05UUkwgMHgwNworI2RlZmluZSBETU0zMkFUX0ZJRk9TVEFUIDB4MDcKKworI2RlZmluZSBETU0zMkFUX0NOVFJMIDB4MDgKKyNkZWZpbmUgRE1NMzJBVF9BSVNUQVQgMHgwOAorCisjZGVmaW5lIERNTTMyQVRfSU5UQ0xPQ0sgMHgwOQorCisjZGVmaW5lIERNTTMyQVRfQ05UUkRJTyAweDBhCisKKyNkZWZpbmUgRE1NMzJBVF9BSUNPTkYgMHgwYgorI2RlZmluZSBETU0zMkFUX0FJUkJBQ0sgMHgwYgorCisjZGVmaW5lIERNTTMyQVRfQ0xLMSAweDBkCisjZGVmaW5lIERNTTMyQVRfQ0xLMiAweDBlCisjZGVmaW5lIERNTTMyQVRfQ0xLQ1QgMHgwZgorCisjZGVmaW5lIERNTTMyQVRfRElPQSAweDBjCisjZGVmaW5lIERNTTMyQVRfRElPQiAweDBkCisjZGVmaW5lIERNTTMyQVRfRElPQyAweDBlCisjZGVmaW5lIERNTTMyQVRfRElPQ09ORiAweDBmCisKKyNkZWZpbmUgZG1tX2luYihjZGV2LHJlZykgaW5iKChjZGV2LT5pb2Jhc2UpK3JlZykKKyNkZWZpbmUgZG1tX291dGIoY2RldixyZWcsdmFsdSkgb3V0Yih2YWx1LChjZGV2LT5pb2Jhc2UpK3JlZykKKworLyogQm9hcmQgcmVnaXN0ZXIgdmFsdWVzLiAqLworCisvKiBETU0zMkFUX0RBQ1NUQVQgMHgwNCAqLworI2RlZmluZSBETU0zMkFUX0RBQ0JVU1kgMHg4MAorCisvKiBETU0zMkFUX0ZJRk9DTlRSTCAweDA3ICovCisjZGVmaW5lIERNTTMyQVRfRklGT1JFU0VUIDB4MDIKKyNkZWZpbmUgRE1NMzJBVF9TQ0FORU5BQkxFIDB4MDQKKworLyogRE1NMzJBVF9DTlRSTCAweDA4ICovCisjZGVmaW5lIERNTTMyQVRfUkVTRVQgMHgyMAorI2RlZmluZSBETU0zMkFUX0lOVFJFU0VUIDB4MDgKKyNkZWZpbmUgRE1NMzJBVF9DTEtBQ0MgMHgwMAorI2RlZmluZSBETU0zMkFUX0RJT0FDQyAweDAxCisKKy8qIERNTTMyQVRfQUlTVEFUIDB4MDggKi8KKyNkZWZpbmUgRE1NMzJBVF9TVEFUVVMgMHg4MAorCisvKiBETU0zMkFUX0lOVENMT0NLIDB4MDkgKi8KKyNkZWZpbmUgRE1NMzJBVF9BRElOVCAweDgwCisjZGVmaW5lIERNTTMyQVRfQ0xLU0VMIDB4MDMKKworLyogRE1NMzJBVF9DTlRSRElPIDB4MGEgKi8KKyNkZWZpbmUgRE1NMzJBVF9GUkVRMTIgMHg4MAorCisvKiBETU0zMkFUX0FJQ09ORiAweDBiICovCisjZGVmaW5lIERNTTMyQVRfUkFOR0VfVTEwIDB4MGMKKyNkZWZpbmUgRE1NMzJBVF9SQU5HRV9VNSAweDBkCisjZGVmaW5lIERNTTMyQVRfUkFOR0VfQjEwIDB4MDgKKyNkZWZpbmUgRE1NMzJBVF9SQU5HRV9CNSAweDAwCisjZGVmaW5lIERNTTMyQVRfU0NJTlRfMjAgMHgwMAorI2RlZmluZSBETU0zMkFUX1NDSU5UXzE1IDB4MTAKKyNkZWZpbmUgRE1NMzJBVF9TQ0lOVF8xMCAweDIwCisjZGVmaW5lIERNTTMyQVRfU0NJTlRfNSAweDMwCisKKy8qIERNTTMyQVRfQ0xLQ1QgMHgwZiAqLworI2RlZmluZSBETU0zMkFUX0NMS0NUMSAweDU2CS8qIG1vZGUzIGNvdW50ZXIgMSAtIHdyaXRlIGxvdyBieXRlIG9ubHkgKi8KKyNkZWZpbmUgRE1NMzJBVF9DTEtDVDIgMHhiNgkvKiAgbW9kZTMgY291bnRlciAyIC0gd3JpdGUgaGlnaCBhbmQgbG93IGJ5dGUgKi8KKworLyogRE1NMzJBVF9ESU9DT05GIDB4MGYgKi8KKyNkZWZpbmUgRE1NMzJBVF9ESUVOQUJMRSAweDgwCisjZGVmaW5lIERNTTMyQVRfRElSQSAweDEwCisjZGVmaW5lIERNTTMyQVRfRElSQiAweDAyCisjZGVmaW5lIERNTTMyQVRfRElSQ0wgMHgwMQorI2RlZmluZSBETU0zMkFUX0RJUkNIIDB4MDgKKworLyogYm9hcmQgQUkgcmFuZ2VzIGluIGNvbWVkaSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkbW0zMmF0X2FpcmFuZ2VzID0geworCTQsCisJeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCX0KK307CisKKy8qIHJlZ2lzdGVyIHZhbHVlcyBmb3IgYWJvdmUgcmFuZ2VzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbW0zMmF0X3JhbmdlYml0c1tdID0geworCURNTTMyQVRfUkFOR0VfVTEwLAorCURNTTMyQVRfUkFOR0VfVTUsCisJRE1NMzJBVF9SQU5HRV9CMTAsCisJRE1NMzJBVF9SQU5HRV9CNSwKK307CisKKy8qIG9ubHkgb25lIG9mIHRoZXNlIHJhbmdlcyBpcyB2YWxpZCwgYXMgc2V0IGJ5IGEganVtcGVyIG9uIHRoZQorICogYm9hcmQuIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgb25seSB1c2UgdGhlIHJhbmdlIHNldCBieSB0aGUganVtcGVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkbW0zMmF0X2FvcmFuZ2VzID0geworCTQsCisJeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCX0KK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgZG1tMzJhdF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfY2hhbnM7CisJaW50IGFpX2JpdHM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlczsKKwlpbnQgYW9fY2hhbnM7CisJaW50IGFvX2JpdHM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlczsKKwlpbnQgaGF2ZV9kaW87CisJaW50IGRpb19jaGFuczsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtbTMyYXRfYm9hcmQgZG1tMzJhdF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRtbTMyYXQiLAorCSAgICAgIGFpX2NoYW5zOjMyLAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3JhbmdlczomZG1tMzJhdF9haXJhbmdlcywKKwkgICAgICBhb19jaGFuczo0LAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGFvX3JhbmdlczomZG1tMzJhdF9hb3JhbmdlcywKKwkgICAgICBoYXZlX2RpbzoxLAorCSAgICAgIGRpb19jaGFuczoyNCwKKwkJfSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRtbTMyYXRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAqIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgKiBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuCisgKi8KK3N0cnVjdCBkbW0zMmF0X3ByaXZhdGUgeworCisJaW50IGRhdGE7CisJaW50IGFpX2ludXNlOworCXVuc2lnbmVkIGludCBhaV9zY2Fuc19sZWZ0OworCisJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbNF07CisJdW5zaWduZWQgY2hhciBkaW9fY29uZmlnOworCit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRtbTMyYXRfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkbW0zMmF0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RtbTMyYXQgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZG1tMzJhdCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZG1tMzJhdF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZG1tMzJhdF9kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisvKiBNb3N0IGRyaXZlcnMgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHR5cGVzIG9mIGJvYXJkcyBieQorICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKyAqIGluIGRtbTMyYXRfYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKyAqIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlIGJvYXJkIHdpdGhvdXQga25vd2luZyBhbnkgZGV0YWlscworICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKyAqIG9mIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdG8gQ29tZWRpLCBhbmQgQ29tZWRpIHRyaWVzIHRvCisgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKyAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorICogaW50byBkZXYtPmJvYXJkX3B0ciBhbmQgZHJpdmVyLT5hdHRhY2goKSBpcyBjYWxsZWQuCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisgKiB0aGUgdHlwZSBvZiBib2FyZCBpbiBzb2Z0d2FyZS4gIElTQSBQblAsIFBDSSwgYW5kIFBDTUNJQQorICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisgKi8KKyAgICAgIGJvYXJkX25hbWU6JmRtbTMyYXRfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkbW0zMmF0X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZG1tMzJhdF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkbW0zMmF0X2JvYXJkKSwKK307CisKKy8qIHByb3RvdHlwZXMgZm9yIGRyaXZlciBmdW5jdGlvbnMgYmVsb3cgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkbW0zMmF0X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkbW0zMmF0X25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZG1tMzJhdF9pc3IoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7Cit2b2lkIGRtbTMyYXRfc2V0YWl0aW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5hbnNlYyk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBkbW0zMmF0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGNoYXIgYWloaSwgYWlsbywgZmlmb3N0YXQsIGFpc3RhdCwgaW50c3RhdCwgYWlyYmFjazsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisKKwlwcmludGsoImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hpbmdcbiIsIGRldi0+bWlub3IpOworCXByaW50aygiZG1tMzJhdDogcHJvYmluZyBhdCBhZGRyZXNzIDB4JTA0bHgsIGlycSAldVxuIiwgaW9iYXNlLCBpcnEpOworCisJLyogcmVnaXN0ZXIgYWRkcmVzcyBzcGFjZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBETU0zMkFUX01FTVNJWkUsIHRoaXNib2FyZC0+bmFtZSkpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8qIHRoZSBmb2xsb3dpbmcganVzdCBtYWtlcyBzdXJlIHRoZSBib2FyZCBpcyB0aGVyZSBhbmQgZ2V0cworCSAgIGl0IHRvIGEga25vd24gc3RhdGUgKi8KKworCS8qIHJlc2V0IHRoZSBib2FyZCAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9SRVNFVCk7CisKKwkvKiBhbGxvdyBhIG1pbGxpc2Vjb25kIHRvIHJlc2V0ICovCisJdWRlbGF5KDEwMDApOworCisJLyogemVybyBzY2FuIGFuZCBmaWZvIGNvbnRyb2wgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRklGT0NOVFJMLCAweDApOworCisJLyogemVybyBpbnRlcnJ1cHQgYW5kIGNsb2NrIGNvbnRyb2wgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfSU5UQ0xPQ0ssIDB4MCk7CisKKwkvKiB3cml0ZSBhIHRlc3QgY2hhbm5lbCByYW5nZSwgdGhlIGhpZ2ggMyBiaXRzIHNob3VsZCBkcm9wICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJTE9XLCAweDgwKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQUlISUdILCAweGZmKTsKKworCS8qIHNldCB0aGUgcmFuZ2UgYXQgMTB2IHVuaXBvbGFyICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJQ09ORiwgRE1NMzJBVF9SQU5HRV9VMTApOworCisJLyogc2hvdWxkIHRha2UgMTAgdXMgdG8gc2V0dGxlLCBoZXJlJ3MgYSBodW5kcmVkICovCisJdWRlbGF5KDEwMCk7CisKKwkvKiByZWFkIGJhY2sgdGhlIHZhbHVlcyAqLworCWFpbG8gPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSUxPVyk7CisJYWloaSA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJSElHSCk7CisJZmlmb3N0YXQgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9GSUZPU1RBVCk7CisJYWlzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlTVEFUKTsKKwlpbnRzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfSU5UQ0xPQ0spOworCWFpcmJhY2sgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSVJCQUNLKTsKKworCXByaW50aygiZG1tMzJhdDogbG89MHglMDJ4IGhpPTB4JTAyeCBmaWZvc3RhdD0weCUwMnhcbiIsCisJCWFpbG8sIGFpaGksIGZpZm9zdGF0KTsKKwlwcmludGsoImRtbTMyYXQ6IGFpc3RhdD0weCUwMnggaW50c3RhdD0weCUwMnggYWlyYmFjaz0weCUwMnhcbiIsCisJCWFpc3RhdCwgaW50c3RhdCwgYWlyYmFjayk7CisKKwlpZiAoKGFpbG8gIT0gMHgwMCkgfHwgKGFpaGkgIT0gMHgxZikgfHwgKGZpZm9zdGF0ICE9IDB4ODApIHx8CisJCShhaXN0YXQgIT0gMHg2MCB8fCAoaW50c3RhdCAhPSAweDAwKSB8fCBhaXJiYWNrICE9IDB4MGMpKSB7CisJCXByaW50aygiZG1tYXQzMjogYm9hcmQgZGV0ZWN0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGJvYXJkIGlzIHRoZXJlLCByZWdpc3RlciBpbnRlcnJ1cHQgKi8KKwlpZiAoaXJxKSB7CisJCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRtbTMyYXRfaXNyLCAwLCB0aGlzYm9hcmQtPm5hbWUsCisJCQlkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKCJpcnEgY29uZmxpY3RcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9CisKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworCS8vZGV2LT5ib2FyZF9wdHIgPSBkbW0zMmF0X3Byb2JlKGRldik7CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZG1tMzJhdF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJLyogd2Ugc3VwcG9ydCBzaW5nbGUtZW5kZWQgKGdyb3VuZCkgYW5kIGRpZmZlcmVudGlhbCAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRiB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+YWlfcmFuZ2VzOworCXMtPmxlbl9jaGFubGlzdCA9IDMyOwkvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGNoYW5saXN0IGxlbmd0aCB0aGF0CisJCQkJICAgdGhlIGJvYXJkIGNhbiBoYW5kbGUgKi8KKwlzLT5pbnNuX3JlYWQgPSBkbW0zMmF0X2FpX3JpbnNuOworCXMtPmRvX2NtZCA9IGRtbTMyYXRfYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBkbW0zMmF0X2FpX2NtZHRlc3Q7CisJcy0+Y2FuY2VsID0gZG1tMzJhdF9haV9jYW5jZWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFvX3JhbmdlczsKKwlzLT5pbnNuX3dyaXRlID0gZG1tMzJhdF9hb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBkbW0zMmF0X2FvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+aGF2ZV9kaW8pIHsKKworCQkvKiBnZXQgYWNjZXNzIHRvIHRoZSBESU8gcmVncyAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfRElPQUNDKTsKKwkJLyogc2V0IHRoZSBESU8ncyB0byB0aGUgZGVmdWFsdCBpbnB1dCBzZXR0aW5nICovCisJCWRldnByaXYtPmRpb19jb25maWcgPSBETU0zMkFUX0RJUkEgfCBETU0zMkFUX0RJUkIgfAorCQkJRE1NMzJBVF9ESVJDTCB8IERNTTMyQVRfRElSQ0ggfCBETU0zMkFUX0RJRU5BQkxFOworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfRElPQ09ORiwgZGV2cHJpdi0+ZGlvX2NvbmZpZyk7CisKKwkJLyogc2V0IHVwIHRoZSBzdWJkZXZpY2UgKi8KKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRpb19jaGFuczsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnN0YXRlID0gMDsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gZG1tMzJhdF9kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9IGRtbTMyYXRfZGlvX2luc25fY29uZmlnOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogc3VjY2VzcyAqLworCXByaW50aygiY29tZWRpJWQ6IGRtbTMyYXQ6IGF0dGFjaGVkXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAxOworCit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZG1tMzJhdDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBETU0zMkFUX01FTVNJWkUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAiaW5zdHJ1Y3Rpb25zIiByZWFkL3dyaXRlIGRhdGEgaW4gIm9uZS1zaG90IiBvciAic29mdHdhcmUtdHJpZ2dlcmVkIgorICogbW9kZS4KKyAqLworCitzdGF0aWMgaW50IGRtbTMyYXRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIHNob3J0IG1zYiwgbHNiOworCXVuc2lnbmVkIGNoYXIgY2hhbjsKKwlpbnQgcmFuZ2U7CisKKwkvKiBnZXQgdGhlIGNoYW5uZWwgYW5kIHJhbmdlIG51bWJlciAqLworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgKHMtPm5fY2hhbiAtIDEpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLy9wcmludGsoImNoYW5uZWw9MHglMDJ4LCByYW5nZT0lZFxuIixjaGFuLHJhbmdlKTsKKworCS8qIHplcm8gc2NhbiBhbmQgZmlmbyBjb250cm9sIGFuZCByZXNldCBmaWZvICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0ZJRk9DTlRSTCwgRE1NMzJBVF9GSUZPUkVTRVQpOworCisJLyogd3JpdGUgdGhlIGFpIGNoYW5uZWwgcmFuZ2UgcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUxPVywgY2hhbik7CisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJSElHSCwgY2hhbik7CisJLyogc2V0IHRoZSByYW5nZSBiaXRzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJQ09ORiwgZG1tMzJhdF9yYW5nZWJpdHNbcmFuZ2VdKTsKKworCS8qIHdhaXQgZm9yIGNpcmN1aXQgdG8gc2V0dGxlICovCisJZm9yIChpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKwkJc3RhdHVzID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlSQkFDSyk7CisJCWlmICgoc3RhdHVzICYgRE1NMzJBVF9TVEFUVVMpID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gNDAwMDApIHsKKwkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ09OViwgMHhmZik7CisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisJCQlzdGF0dXMgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSVNUQVQpOworCQkJaWYgKChzdGF0dXMgJiBETU0zMkFUX1NUQVRVUykgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSA0MDAwMCkgeworCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisKKwkJLyogcmVhZCBkYXRhICovCisJCWxzYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTFNCKTsKKwkJbXNiID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlNU0IpOworCisJCS8qIGludmVydCBzaWduIGJpdCB0byBtYWtlIHJhbmdlIHVuc2lnbmVkLCB0aGlzIGlzIGFuCisJCSAgIGlkaW9zeW5jcmFjeSBvZiB0aGUgZGlhbW9uZCBib2FyZCwgaXQgcmV0dXJuCisJCSAgIGNvbnZlcnNpb25zIGFzIGEgc2lnbmVkIHZhbHVlLCBpLmUuIC0zMjc2OCB0bworCQkgICAzMjc2NywgZmxpcHBpbmcgdGhlIGJpdCBhbmQgaW50ZXJwcmV0aW5nIGl0IGFzCisJCSAgIHNpZ25lZCBnaXZlcyB5b3UgYSByYW5nZSBvZiAwIHRvIDY1NTM1IHdoaWNoIGlzCisJCSAgIHVzZWQgYnkgY29tZWRpICovCisJCWQgPSAoKG1zYiBeIDB4MDA4MCkgPDwgOCkgKyBsc2I7CisKKwkJZGF0YVtuXSA9IGQ7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkbW0zMmF0X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBzdGFydF9jaGFuLCBnYWluLCBpOworCisJLy9wcmludGsoImRtbWF0MzIgaW4gY29tbWFuZCB0ZXN0XG4iKTsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiAvKnwgVFJJR19FWFQgKi8gOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiAvKnwgVFJJR19FWFQgKi8gOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TQ0FOX1NQRUVECTEwMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKyNkZWZpbmUgTUlOX1NDQU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TQ0FOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NDQU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1JTl9TQ0FOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NDQU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQkvKiBzaG91bGQgc3BlY2lmeSBtdWx0aXBsZSBleHRlcm5hbCB0cmlnZ2VycyAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IDkpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSA5OworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+PSAxNzUwMCkKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwMDsKKwkJZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA+PSAxMjUwMCkKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAxNTAwMDsKKwkJZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA+PSA3NTAwKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDEwMDAwOworCQllbHNlCisJCQljbWQtPmNvbnZlcnRfYXJnID0gNTAwMDsKKworCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2VlIGFib3ZlICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gOSkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA+IDB4ZmZmZmZmZjApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAweGZmZmZmZmYwOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c3RvcF9hcmcgPT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWRtbTMyYXRfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJZG1tMzJhdF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvKiBzdGVwIDUgY2hlY2sgdGhlIGNoYW5uZWwgbGlzdCwgdGhlIGNoYW5uZWwgbGlzdCBmb3IgdGhpcworCSAgIGJvYXJkIG11c3QgYmUgY29uc2VjdXRpdmUgYW5kIGdhaW5zIG11c3QgYmUgdGhlIHNhbWUgKi8KKworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJc3RhcnRfY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPQorCQkJCShzdGFydF9jaGFuICsgaSkgJSBzLT5uX2NoYW4pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSBnYWluKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGksIHJhbmdlOworCXVuc2lnbmVkIGNoYXIgY2hhbmxvLCBjaGFuaGksIHN0YXR1czsKKworCWlmICghY21kLT5jaGFubGlzdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIGNoYW5uZWwgbGlzdCBhbmQgcmFuZ2UgKi8KKwljaGFubG8gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pICYgKHMtPm5fY2hhbiAtIDEpOworCWNoYW5oaSA9IGNoYW5sbyArIGNtZC0+Y2hhbmxpc3RfbGVuIC0gMTsKKwlpZiAoY2hhbmhpID49IHMtPm5fY2hhbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKworCS8qIHJlc2V0IGZpZm8gKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRklGT0NOVFJMLCBETU0zMkFUX0ZJRk9SRVNFVCk7CisKKwkvKiBzZXQgc2NhbiBlbmFibGUgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRklGT0NOVFJMLCBETU0zMkFUX1NDQU5FTkFCTEUpOworCisJLyogd3JpdGUgdGhlIGFpIGNoYW5uZWwgcmFuZ2UgcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUxPVywgY2hhbmxvKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQUlISUdILCBjaGFuaGkpOworCisJLyogc2V0IHRoZSByYW5nZSBiaXRzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJQ09ORiwgZG1tMzJhdF9yYW5nZWJpdHNbcmFuZ2VdKTsKKworCS8qIHJlc2V0IHRoZSBpbnRlcnJ1cHQganVzdCBpbiBjYXNlICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0lOVFJFU0VUKTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCWRldnByaXYtPmFpX3NjYW5zX2xlZnQgPSBjbWQtPnN0b3BfYXJnOworCWVsc2UgewkJCS8qIFRSSUdfTk9ORSAqLworCQlkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID0gMHhmZmZmZmZmZjsJLyogaW5kaWNhdGVzIFRSSUdfTk9ORSB0byBpc3IgKi8KKwl9CisKKwkvKiB3YWl0IGZvciBjaXJjdWl0IHRvIHNldHRsZSAqLworCWZvciAoaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisJCXN0YXR1cyA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJUkJBQ0spOworCQlpZiAoKHN0YXR1cyAmIERNTTMyQVRfU1RBVFVTKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDQwMDAwKSB7CisJCXByaW50aygidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmIChkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID4gMSkgeworCQkvKiBzdGFydCB0aGUgY2xvY2sgYW5kIGVuYWJsZSB0aGUgaW50ZXJydXB0cyAqLworCQlkbW0zMmF0X3NldGFpdGltZXIoZGV2LCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKKwl9IGVsc2UgeworCQkvKiBzdGFydCB0aGUgaW50ZXJydXBzIGFuZCBpbml0aWF0ZSBhIHNpbmdsZSBzY2FuICovCisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9JTlRDTE9DSywgRE1NMzJBVF9BRElOVCk7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DT05WLCAweGZmKTsKKwl9CisKKy8qIAlwcmludGsoImRtbWF0MzIgaW4gY29tbWFuZFxuIik7ICovCisKKy8qIAlmb3IoaT0wO2k8Y21kLT5jaGFubGlzdF9sZW47aSsrKSAqLworLyogCQljb21lZGlfYnVmX3B1dChzLT5hc3luYyxpKjEwMCk7ICovCisKKy8qIAlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7ICovCisvKiAJY29tZWRpX2V2ZW50KGRldiwgcyk7ICovCisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbW0zMmF0X2lzcihpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXVuc2lnbmVkIGNoYXIgaW50c3RhdDsKKwl1bnNpZ25lZCBpbnQgc2FtcDsKKwl1bnNpZ25lZCBzaG9ydCBtc2IsIGxzYjsKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpbnRzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfSU5UQ0xPQ0spOworCisJaWYgKGludHN0YXQgJiBETU0zMkFUX0FESU5UKSB7CisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwkJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQkvKiByZWFkIGRhdGEgKi8KKwkJCWxzYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTFNCKTsKKwkJCW1zYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTVNCKTsKKworCQkJLyogaW52ZXJ0IHNpZ24gYml0IHRvIG1ha2UgcmFuZ2UgdW5zaWduZWQgKi8KKwkJCXNhbXAgPSAoKG1zYiBeIDB4MDA4MCkgPDwgOCkgKyBsc2I7CisJCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcCk7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCAhPSAweGZmZmZmZmZmKSB7CS8qIFRSSUdfQ09VTlQgKi8KKwkJCWRldnByaXYtPmFpX3NjYW5zX2xlZnQtLTsKKwkJCWlmIChkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID09IDApIHsKKwkJCQkvKiBkaXNhYmxlIGZ1cnRoZXIgaW50ZXJydXB0cyBhbmQgY2xvY2tzICovCisJCQkJZG1tX291dGIoZGV2LCBETU0zMkFUX0lOVENMT0NLLCAweDApOworCQkJCS8qIHNldCB0aGUgYnVmZmVyIHRvIGJlIGZsdXNoZWQgd2l0aCBhbiBFT0YgKi8KKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQl9CisKKwkJfQorCQkvKiBmbHVzaCB0aGUgYnVmZmVyICovCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCS8qIHJlc2V0IHRoZSBpbnRlcnJ1cHQgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfSU5UUkVTRVQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGZvcm0sIHRoaXMgaXMganVzdAorICogd2hhdCBoYXBwZW5zIHRvIGJlIHVzZWQgaW4gc29tZSBvZiB0aGUgZHJpdmVycy4gIEl0IHNob3VsZAorICogY29udmVydCBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nCisgKiB0aGUgZGV2aWNlLiAgQWxzbywgaXQgc2hvdWxkIGFkanVzdCBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvCisgKiB0aGUgYWN0dWFsIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLiAqLworc3RhdGljIGludCBkbW0zMmF0X25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwkvKiB0cml2aWFsIHRpbWVyICovCisJLyogaWYgeW91ciB0aW1pbmcgaXMgZG9uZSB0aHJvdWdoIHR3byBjYXNjYWRlZCB0aW1lcnMsIHRoZQorCSAqIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoKSBmdW5jdGlvbiBpbiA4MjUzLmggY2FuIGJlCisJICogdmVyeSBoZWxwZnVsLiAgVGhlcmUgYXJlIGFsc28gaTgyNTRfbG9hZCgpIGFuZCBpODI1NF9tbV9sb2FkKCkKKwkgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBsb2FkIHZhbHVlcyBpbnRvIHRoZSB1YmlxdWl0b3VzIDgyNTQgY291bnRlcnMKKwkgKi8KKworCXJldHVybiAqbnM7Cit9CisKK3N0YXRpYyBpbnQgZG1tMzJhdF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBjaGFyIGhpLCBsbywgc3RhdHVzOworCisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCisJCS8qIGdldCB0aGUgbG93IGJ5dGUgKi8KKwkJbG8gPSBkYXRhW2ldICYgMHgwMGZmOworCQkvKiBoaWdoIGJ5dGUgYWxzbyBjb250YWlucyBjaGFubmVsIG51bWJlciAqLworCQloaSA9IChkYXRhW2ldID4+IDgpICsgY2hhbiAqICgxIDw8IDYpOworCQkvL3ByaW50aygid3JpdGluZyAweCUwMnggIDB4JTAyeFxuIixoaSxsbyk7CisJCS8qIHdyaXRlIHRoZSBsb3cgYW5kIGhpZ2ggdmFsdWVzIHRvIHRoZSBib2FyZCAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfREFDTFNCLCBsbyk7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9EQUNNU0IsIGhpKTsKKworCQkvKiB3YWl0IGZvciBjaXJjdWl0IHRvIHNldHRsZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCQkJc3RhdHVzID0gZG1tX2luYihkZXYsIERNTTMyQVRfREFDU1RBVCk7CisJCQlpZiAoKHN0YXR1cyAmIERNTTMyQVRfREFDQlVTWSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSA0MDAwMCkgeworCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCS8qIGR1bW15IHJlYWQgdG8gdXBkYXRlIHRyaWdnZXIgdGhlIG91dHB1dCAqLworCQlzdGF0dXMgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9EQUNNU0IpOworCisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IGRtbTMyYXRfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgY2hhciBkaW9iaXRzOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCS8vb3V0dyhzLT5zdGF0ZSxkZXYtPmlvYmFzZSArIERNTTMyQVRfRElPKTsKKwl9CisKKwkvKiBnZXQgYWNjZXNzIHRvIHRoZSBESU8gcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9ESU9BQ0MpOworCisJLyogaWYgZWl0aGVyIHBhcnQgb2YgZGlvIGlzIHNldCBmb3Igb3V0cHV0ICovCisJaWYgKCgoZGV2cHJpdi0+ZGlvX2NvbmZpZyAmIERNTTMyQVRfRElSQ0wpID09IDApIHx8CisJCSgoZGV2cHJpdi0+ZGlvX2NvbmZpZyAmIERNTTMyQVRfRElSQ0gpID09IDApKSB7CisJCWRpb2JpdHMgPSAocy0+c3RhdGUgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0RJT0MsIGRpb2JpdHMpOworCX0KKwlpZiAoKGRldnByaXYtPmRpb19jb25maWcgJiBETU0zMkFUX0RJUkIpID09IDApIHsKKwkJZGlvYml0cyA9IChzLT5zdGF0ZSAmIDB4MDAwMGZmMDApID4+IDg7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9ESU9CLCBkaW9iaXRzKTsKKwl9CisJaWYgKChkZXZwcml2LT5kaW9fY29uZmlnICYgRE1NMzJBVF9ESVJBKSA9PSAwKSB7CisJCWRpb2JpdHMgPSAocy0+c3RhdGUgJiAweDAwMDAwMGZmKTsKKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0RJT0EsIGRpb2JpdHMpOworCX0KKworCS8qIG5vdyByZWFkIHRoZSBzdGF0ZSBiYWNrIGluICovCisJcy0+c3RhdGUgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9ESU9DKTsKKwlzLT5zdGF0ZSA8PD0gODsKKwlzLT5zdGF0ZSB8PSBkbW1faW5iKGRldiwgRE1NMzJBVF9ESU9CKTsKKwlzLT5zdGF0ZSA8PD0gODsKKwlzLT5zdGF0ZSB8PSBkbW1faW5iKGRldiwgRE1NMzJBVF9ESU9BKTsKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwkvL2RhdGFbMV09aW53KGRldi0+aW9iYXNlICsgRE1NMzJBVF9ESU8pOworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8vZGF0YVsxXT1zLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNoYW5iaXQ7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWlmIChpbnNuLT5uICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNoYW4gPCA4KQorCQljaGFuYml0ID0gRE1NMzJBVF9ESVJBOworCWVsc2UgaWYgKGNoYW4gPCAxNikKKwkJY2hhbmJpdCA9IERNTTMyQVRfRElSQjsKKwllbHNlIGlmIChjaGFuIDwgMjApCisJCWNoYW5iaXQgPSBETU0zMkFUX0RJUkNMOworCWVsc2UKKwkJY2hhbmJpdCA9IERNTTMyQVRfRElSQ0g7CisKKwkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKwkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCisKKwkvKiBpZiBvdXRwdXQgY2xlYXIgdGhlIGJpdCwgb3RoZXJ3aXNlIHNldCBpdCAqLworCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKKwkJZGV2cHJpdi0+ZGlvX2NvbmZpZyAmPSB+Y2hhbmJpdDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kaW9fY29uZmlnIHw9IGNoYW5iaXQ7CisJfQorCS8qIGdldCBhY2Nlc3MgdG8gdGhlIERJTyByZWdzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0RJT0FDQyk7CisJLyogc2V0IHRoZSBESU8ncyB0byB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gc2V0dGluZyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9ESU9DT05GLCBkZXZwcml2LT5kaW9fY29uZmlnKTsKKworCXJldHVybiAxOworfQorCit2b2lkIGRtbTMyYXRfc2V0YWl0aW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5hbnNlYykKK3sKKwl1bnNpZ25lZCBjaGFyIGxvMSwgbG8yLCBoaTI7CisJdW5zaWduZWQgc2hvcnQgYm90aDI7CisKKwkvKiBiYXNlZCBvbiAxMG1oeiBjbG9jayAqLworCWxvMSA9IDIwMDsKKwlib3RoMiA9IG5hbnNlYyAvIDIwMDAwOworCWhpMiA9IChib3RoMiAmIDB4ZmYwMCkgPj4gODsKKwlsbzIgPSBib3RoMiAmIDB4MDBmZjsKKworCS8qIHNldCB0aGUgY291bnRlciBmcmVxdWVuY3kgdG8gMTBtaHogKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkRJTywgMCk7CisKKwkvKiBnZXQgYWNjZXNzIHRvIHRoZSBjbG9jayByZWdzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0NMS0FDQyk7CisKKwkvKiB3cml0ZSB0aGUgY291bnRlciAxIGNvbnRyb2wgd29yZCBhbmQgbG93IGJ5dGUgdG8gY291bnRlciAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEtDVCwgRE1NMzJBVF9DTEtDVDEpOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEsxLCBsbzEpOworCisJLyogd3JpdGUgdGhlIGNvdW50ZXIgMiBjb250cm9sIHdvcmQgYW5kIGxvdyBieXRlIHRoZW4gdG8gY291bnRlciAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEtDVCwgRE1NMzJBVF9DTEtDVDIpOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEsyLCBsbzIpOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEsyLCBoaTIpOworCisJLyogZW5hYmxlIHRoZSBhaSBjb252ZXJzaW9uIGludGVycnVwdCBhbmQgdGhlIGNsb2NrIHRvIHN0YXJ0IHNjYW5zICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0lOVENMT0NLLCBETU0zMkFUX0FESU5UIHwgRE1NMzJBVF9DTEtTRUwpOworCit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZG1tMzJhdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwZWVkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYwpAQCAtMCwwICsxLDY5NyBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCisgKiBEZXZpY2UgRHJpdmVyIGZvciBEYXRhVHJhbnNsYXRpb24gRFQyODAxCisgKgorICovCisvKgorRHJpdmVyOiBkdDI4MDEKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgwMSBzZXJpZXMgYW5kIERUMDEtRVoKK0F1dGhvcjogZHMKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MDEgKGR0MjgwMSksIERUMjgwMS1BLCBEVDI4MDEvNTcxNkEsCisgIERUMjgwNSwgRFQyODA1LzU3MTZBLCBEVDI4MDgsIERUMjgxOCwgRFQyODA5LCBEVDAxLUVaCisKK1RoaXMgZHJpdmVyIGNhbiBhdXRvcHJvYmUgdGhlIHR5cGUgb2YgYm9hcmQuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIHVudXNlZAorICBbMl0gLSBBL0QgcmVmZXJlbmNlIDA9ZGlmZmVyZW50aWFsLCAxPXNpbmdsZS1lbmRlZAorICBbM10gLSBBL0QgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKwkgIDEgPSBbMCwxMF0KKyAgWzRdIC0gRC9BIDAgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKwkgIDEgPSBbLTUsNV0KKwkgIDIgPSBbLTIuNSwyLjVdCisJICAzID0gWzAsMTBdCisJICA0ID0gWzAsNV0KKyAgWzVdIC0gRC9BIDEgcmFuZ2UgKHNhbWUgY2hvaWNlcykKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIERUMjgwMV9USU1FT1VUIDEwMDAKKworLyogSGFyZHdhcmUgQ29uZmlndXJhdGlvbiAqLworLyogPT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIERUMjgwMV9NQVhfRE1BX1NJWkUgKDY0ICogMTAyNCkKKworLyogUG9ydHMgKi8KKyNkZWZpbmUgRFQyODAxX0lPU0laRSAyCisKKy8qIGRlZmluZSdzICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIENvbW1hbmRzICovCisjZGVmaW5lIERUX0NfUkVTRVQgICAgICAgMHgwCisjZGVmaW5lIERUX0NfQ0xFQVJfRVJSICAgMHgxCisjZGVmaW5lIERUX0NfUkVBRF9FUlJSRUcgMHgyCisjZGVmaW5lIERUX0NfU0VUX0NMT0NLICAgMHgzCisKKyNkZWZpbmUgRFRfQ19URVNUICAgICAgICAweGIKKyNkZWZpbmUgRFRfQ19TVE9QICAgICAgICAweGYKKworI2RlZmluZSBEVF9DX1NFVF9ESUdJTiAgIDB4NAorI2RlZmluZSBEVF9DX1NFVF9ESUdPVVQgIDB4NQorI2RlZmluZSBEVF9DX1JFQURfRElHICAgIDB4NgorI2RlZmluZSBEVF9DX1dSSVRFX0RJRyAgIDB4NworCisjZGVmaW5lIERUX0NfV1JJVEVfREFJTSAgMHg4CisjZGVmaW5lIERUX0NfU0VUX0RBICAgICAgMHg5CisjZGVmaW5lIERUX0NfV1JJVEVfREEgICAgMHhhCisKKyNkZWZpbmUgRFRfQ19SRUFEX0FESU0gICAweGMKKyNkZWZpbmUgRFRfQ19TRVRfQUQgICAgICAweGQKKyNkZWZpbmUgRFRfQ19SRUFEX0FEICAgICAweGUKKworLyogQ29tbWFuZCBtb2RpZmllcnMgKG9ubHkgdXNlZCB3aXRoIHJlYWQvd3JpdGUpLCBFWFRUUklHIGNhbiBiZQorICAgdXNlZCB3aXRoIHNvbWUgb3RoZXIgY29tbWFuZHMuCisqLworI2RlZmluZSBEVF9NT0RfRE1BICAgICAoMTw8NCkKKyNkZWZpbmUgRFRfTU9EX0NPTlQgICAgKDE8PDUpCisjZGVmaW5lIERUX01PRF9FWFRDTEsgICgxPDw2KQorI2RlZmluZSBEVF9NT0RfRVhUVFJJRyAoMTw8NykKKworLyogQml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRFRfU19EQVRBX09VVF9SRUFEWSAgICgxPDwwKQorI2RlZmluZSBEVF9TX0RBVEFfSU5fRlVMTCAgICAgKDE8PDEpCisjZGVmaW5lIERUX1NfUkVBRFkgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgRFRfU19DT01NQU5EICAgICAgICAgICgxPDwzKQorI2RlZmluZSBEVF9TX0NPTVBPU0lURV9FUlJPUiAgKDE8PDcpCisKKy8qIHJlZ2lzdGVycyAqLworI2RlZmluZSBEVDI4MDFfREFUQQkJMAorI2RlZmluZSBEVDI4MDFfU1RBVFVTCQkxCisjZGVmaW5lIERUMjgwMV9DTUQJCTEKKworc3RhdGljIGludCBkdDI4MDFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZHQyODAxX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2R0MjgwMSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdDI4MDEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmR0MjgwMV9hdHRhY2gsCisgICAgICBkZXRhY2g6ZHQyODAxX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODAxKTsKKworI2lmIDAKKy8vIGlnbm9yZSAnZGVmaW5lZCBidXQgbm90IHVzZWQnIHdhcm5pbmcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MDFfYWlfcGdoX2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwl9Cit9OworI2VuZGlmCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODAxX2FpX3BnbF9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgtMC4wMiwgMC4wMiksCisJfQorfTsKKworI2lmIDAKKy8vIGlnbm9yZSAnZGVmaW5lZCBidXQgbm90IHVzZWQnIHdhcm5pbmcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MDFfYWlfcGdoX3VuaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDIuNSksCisJCQlSQU5HRSgwLCAxLjI1KSwKKwl9Cit9OworI2VuZGlmCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODAxX2FpX3BnbF91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgwLCAwLjEpLAorCQkJUkFOR0UoMCwgMC4wMiksCisJfQorfTsKKworc3RydWN0IGR0MjgwMV9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWludCBib2FyZGNvZGU7CisJaW50IGFkX2RpZmY7CisJaW50IGFkX2NoYW47CisJaW50IGFkYml0czsKKwlpbnQgYWRyYW5nZXR5cGU7CisJaW50IGRhYml0czsKK307CisKKworLyogVHlwZWlkJ3MgZm9yIHRoZSBkaWZmZXJlbnQgYm9hcmRzIG9mIHRoZSBEVDI4MDEtc2VyaWVzCisgICAodGFrZW4gZnJvbSB0aGUgdGVzdC1zb2Z0d2FyZSwgdGhhdCBjb21lcyB3aXRoIHRoZSBib2FyZCkKKyAgICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGR0MjgwMV9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkdDI4MDEiLAorCSAgICAgIGJvYXJkY29kZToweDA5LAorCSAgICAgIGFkX2RpZmY6CTIsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZTowLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDEtYSIsCisJICAgICAgYm9hcmRjb2RlOjB4NTIsCisJICAgICAgYWRfZGlmZjoJMiwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjAsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwMS81NzE2YSIsCisJICAgICAgYm9hcmRjb2RlOjB4ODIsCisJICAgICAgYWRfZGlmZjoJMSwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkcmFuZ2V0eXBlOjEsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwNSIsCisJICAgICAgYm9hcmRjb2RlOjB4MTIsCisJICAgICAgYWRfZGlmZjoJMSwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjAsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwNS81NzE2YSIsCisJICAgICAgYm9hcmRjb2RlOjB4OTIsCisJICAgICAgYWRfZGlmZjoJMSwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkcmFuZ2V0eXBlOjEsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwOCIsCisJICAgICAgYm9hcmRjb2RlOjB4MjAsCisJICAgICAgYWRfZGlmZjoJMCwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjIsCisgICAgICBkYWJpdHM6CTh9LAorCXsKKwkgICAgICBuYW1lOgkiZHQyODE4IiwKKwkgICAgICBib2FyZGNvZGU6MHhhMiwKKwkgICAgICBhZF9kaWZmOgkwLAorCSAgICAgIGFkX2NoYW46CTQsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZTowLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDkiLAorCSAgICAgIGJvYXJkY29kZToweGIwLAorCSAgICAgIGFkX2RpZmY6CTAsCisJICAgICAgYWRfY2hhbjoJOCwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjEsCisgICAgICBkYWJpdHM6CTEyfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzICgoc2l6ZW9mKGJvYXJkdHlwZXMpKS8oc2l6ZW9mKGJvYXJkdHlwZXNbMF0pKSkKKyNkZWZpbmUgYm9hcmR0eXBlICgqKGNvbnN0IHN0cnVjdCBkdDI4MDFfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGR0MjgwMV9wcml2YXRlIHsKKworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYWNfcmFuZ2VfdHlwZXNbMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGR0MjgwMV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGR0MjgwMV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODAxX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MDFfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qIFRoZXNlIGFyZSB0aGUgbG93LWxldmVsIHJvdXRpbmVzOgorICAgd3JpdGVjb21tYW5kOiB3cml0ZSBhIGNvbW1hbmQgdG8gdGhlIGJvYXJkCisgICB3cml0ZWRhdGE6IHdyaXRlIGRhdGEgYnl0ZQorICAgcmVhZGRhdGE6IHJlYWQgZGF0YSBieXRlCisgKi8KKworLyogT25seSBjaGVja3MgRGF0YU91dFJlYWR5LWZsYWcsIG5vdCB0aGUgUmVhZHktZmxhZyBhcyBpdCBpcyBkb25lCisgICBpbiB0aGUgZXhhbXBsZXMgb2YgdGhlIG1hbnVhbC4gSSBkb24ndCBzZWUgd2h5IHRoaXMgc2hvdWxkIGJlCisgICBuZWNlc3NhcnkuICovCitzdGF0aWMgaW50IGR0MjgwMV9yZWFkZGF0YShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50ICpkYXRhKQoreworCWludCBzdGF0ID0gMDsKKwlpbnQgdGltZW91dCA9IERUMjgwMV9USU1FT1VUOworCisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKwkJaWYgKHN0YXQgJiAoRFRfU19DT01QT1NJVEVfRVJST1IgfCBEVF9TX1JFQURZKSkgeworCQkJcmV0dXJuIHN0YXQ7CisJCX0KKwkJaWYgKHN0YXQgJiBEVF9TX0RBVEFfT1VUX1JFQURZKSB7CisJCQkqZGF0YSA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX0RBVEEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3JlYWRkYXRhMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50ICpkYXRhKQoreworCWludCBsYiwgaGI7CisJaW50IHJldDsKKworCXJldCA9IGR0MjgwMV9yZWFkZGF0YShkZXYsICZsYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkdDI4MDFfcmVhZGRhdGEoZGV2LCAmaGIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqZGF0YSA9IChoYiA8PCA4KSArIGxiOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV93cml0ZWRhdGEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBkYXRhKQoreworCWludCBzdGF0ID0gMDsKKwlpbnQgdGltZW91dCA9IERUMjgwMV9USU1FT1VUOworCisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKworCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKSB7CisJCQlyZXR1cm4gc3RhdDsKKwkJfQorCQlpZiAoIShzdGF0ICYgRFRfU19EQVRBX0lOX0ZVTEwpKSB7CisJCQlvdXRiX3AoZGF0YSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgRFQyODAxX0RBVEEpOworCQkJcmV0dXJuIDA7CisJCX0KKyNpZiAwCisJCWlmIChzdGF0ICYgRFRfU19SRUFEWSkgeworCQkJcHJpbnRrKCJkdDI4MDE6IHJlYWR5IGZsYWcgc2V0IChiYWQhKSBpbiBkdDI4MDFfd3JpdGVkYXRhKClcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKyNlbmRpZgorCX0gd2hpbGUgKC0tdGltZW91dCA+IDApOworCisJcmV0dXJuIC1FVElNRTsKK30KKworc3RhdGljIGludCBkdDI4MDFfd3JpdGVkYXRhMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IGR0MjgwMV93cml0ZWRhdGEoZGV2LCBkYXRhICYgMHhmZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gZHQyODAxX3dyaXRlZGF0YShkZXYsIChkYXRhID4+IDgpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV93YWl0X2Zvcl9yZWFkeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgdGltZW91dCA9IERUMjgwMV9USU1FT1VUOworCWludCBzdGF0OworCisJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CisJaWYgKHN0YXQgJiBEVF9TX1JFQURZKSB7CisJCXJldHVybiAwOworCX0KKwlkbyB7CisJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCisJCWlmIChzdGF0ICYgRFRfU19DT01QT1NJVEVfRVJST1IpIHsKKwkJCXJldHVybiBzdGF0OworCQl9CisJCWlmIChzdGF0ICYgRFRfU19SRUFEWSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3dyaXRlY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY29tbWFuZCkKK3sKKwlpbnQgc3RhdDsKKworCWR0MjgwMV93YWl0X2Zvcl9yZWFkeShkZXYpOworCisJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CisJaWYgKHN0YXQgJiBEVF9TX0NPTVBPU0lURV9FUlJPUikgeworCQlwcmludGsoImR0MjgwMTogY29tcG9zaXRlLWVycm9yIGluIGR0MjgwMV93cml0ZWNtZCgpLCBpZ25vcmluZ1xuIik7CisJfQorCWlmICghKHN0YXQgJiBEVF9TX1JFQURZKSkgeworCQlwcmludGsoImR0MjgwMTogIXJlYWR5IGluIGR0MjgwMV93cml0ZWNtZCgpLCBpZ25vcmluZ1xuIik7CisJfQorCW91dGJfcChjb21tYW5kLCBkZXYtPmlvYmFzZSArIERUMjgwMV9DTUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBib2FyZF9jb2RlID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdDsKKwlpbnQgdGltZW91dDsKKworCURQUklOVEsoImR0MjgwMTogcmVzZXR0aW5nIGJvYXJkLi4uXG4iKTsKKwlEUFJJTlRLKCJmaW5nZXJwcmludDogMHglMDJ4IDB4JTAyeFxuIiwgaW5iX3AoZGV2LT5pb2Jhc2UpLAorCQlpbmJfcChkZXYtPmlvYmFzZSArIDEpKTsKKworCS8qIHB1bGwgcmFuZG9tIGRhdGEgZnJvbSBkYXRhIHBvcnQgKi8KKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKworCURQUklOVEsoImR0MjgwMTogc3RvcFxuIik7CisJLy9kdDI4MDFfd3JpdGVjbWQoZGV2LERUX0NfU1RPUCk7CisJb3V0Yl9wKERUX0NfU1RPUCwgZGV2LT5pb2Jhc2UgKyBEVDI4MDFfQ01EKTsKKworCS8vZHQyODAxX3dhaXRfZm9yX3JlYWR5KGRldik7CisJY29tZWRpX3VkZWxheSgxMDApOworCXRpbWVvdXQgPSAxMDAwMDsKKwlkbyB7CisJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpCisJCQlicmVhazsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCWlmICghdGltZW91dCkgeworCQlwcmludGsoImR0MjgwMTogdGltZW91dCAxIHN0YXR1cz0weCUwMnhcbiIsIHN0YXQpOworCX0KKwkvL3ByaW50aygiZHQyODAxOiByZWFkaW5nIGR1bW15XG4iKTsKKwkvL2R0MjgwMV9yZWFkZGF0YShkZXYsJmJvYXJkX2NvZGUpOworCisJRFBSSU5USygiZHQyODAxOiByZXNldFxuIik7CisJb3V0Yl9wKERUX0NfUkVTRVQsIGRldi0+aW9iYXNlICsgRFQyODAxX0NNRCk7CisJLy9kdDI4MDFfd3JpdGVjbWQoZGV2LERUX0NfUkVTRVQpOworCisJY29tZWRpX3VkZWxheSgxMDApOworCXRpbWVvdXQgPSAxMDAwMDsKKwlkbyB7CisJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpCisJCQlicmVhazsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCWlmICghdGltZW91dCkgeworCQlwcmludGsoImR0MjgwMTogdGltZW91dCAyIHN0YXR1cz0weCUwMnhcbiIsIHN0YXQpOworCX0KKworCURQUklOVEsoImR0MjgwMTogcmVhZGluZyBjb2RlXG4iKTsKKwlkdDI4MDFfcmVhZGRhdGEoZGV2LCAmYm9hcmRfY29kZSk7CisKKwlEUFJJTlRLKCJkdDI4MDE6IG9rLiAgY29kZT0weCUwMnhcbiIsIGJvYXJkX2NvZGUpOworCisJcmV0dXJuIGJvYXJkX2NvZGU7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfbnVtYmVyX29mX2FpX2NoYW5zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBuX2NoYW5zOworCWludCBzdGF0OworCWludCBkYXRhOworCisJZm9yIChuX2NoYW5zID0gMDsgbl9jaGFucyA8IDE2OyBuX2NoYW5zKyspIHsKKwkJc3RhdCA9IGR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfUkVBRF9BRElNKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIDApOworCQlkdDI4MDFfd3JpdGVkYXRhKGRldiwgbl9jaGFucyk7CisJCXN0YXQgPSBkdDI4MDFfcmVhZGRhdGEyKGRldiwgJmRhdGEpOworCisJCWlmIChzdGF0KQorCQkJYnJlYWs7CisJfQorCisJZHQyODAxX3Jlc2V0KGRldik7CisJZHQyODAxX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gbl9jaGFuczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYWNfcmFuZ2VfdGFibGVbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfYmlwb2xhcjJfNSwKKwkmcmFuZ2VfdW5pcG9sYXIxMCwKKwkmcmFuZ2VfdW5pcG9sYXI1Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmRhY19yYW5nZV9sa3VwKGludCBvcHQpCit7CisJaWYgKG9wdCA8IDAgfHwgb3B0ID4gNSkKKwkJcmV0dXJuICZyYW5nZV91bmtub3duOworCXJldHVybiBkYWNfcmFuZ2VfdGFibGVbb3B0XTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV9sa3VwKGludCB0eXBlLCBpbnQgb3B0KQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgMDoKKwkJcmV0dXJuIChvcHQpID8KKwkJCSZyYW5nZV9kdDI4MDFfYWlfcGdsX3VuaXBvbGFyIDoKKwkJCSZyYW5nZV9kdDI4MDFfYWlfcGdsX2JpcG9sYXI7CisJY2FzZSAxOgorCQlyZXR1cm4gKG9wdCkgPyAmcmFuZ2VfdW5pcG9sYXIxMCA6ICZyYW5nZV9iaXBvbGFyMTA7CisJY2FzZSAyOgorCQlyZXR1cm4gJnJhbmdlX3VuaXBvbGFyNTsKKwl9CisJcmV0dXJuICZyYW5nZV91bmtub3duOworfQorCisvKgorICAgb3B0aW9uczoKKwlbMF0gLSBpL28gYmFzZQorCVsxXSAtIHVudXNlZAorCVsyXSAtIGEvZCAwPWRpZmZlcmVudGlhbCwgMT1zaW5nbGUtZW5kZWQKKwlbM10gLSBhL2QgcmFuZ2UgMD1bLTEwLDEwXSwgMT1bMCwxMF0KKwlbNF0gLSBkYWMwIHJhbmdlIDA9Wy0xMCwxMF0sIDE9Wy01LDVdLCAyPVstMi41LDIuNV0gMz1bMCwxMF0sIDQ9WzAsNV0KKwlbNV0gLSBkYWMxIHJhbmdlIDA9Wy0xMCwxMF0sIDE9Wy01LDVdLCAyPVstMi41LDIuNV0gMz1bMCwxMF0sIDQ9WzAsNV0KKyovCitzdGF0aWMgaW50IGR0MjgwMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IGJvYXJkX2NvZGUsIHR5cGU7CisJaW50IHJldCA9IDA7CisJaW50IG5fYWlfY2hhbnM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODAxX0lPU0laRSwgImR0MjgwMSIpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiBkbyBzb21lIGNoZWNraW5nICovCisKKwlib2FyZF9jb2RlID0gZHQyODAxX3Jlc2V0KGRldik7CisKKwkvKiBoZWguICBpZiBpdCBkaWRuJ3Qgd29yaywgdHJ5IGl0IGFnYWluLiAqLworCWlmICghYm9hcmRfY29kZSkKKwkJYm9hcmRfY29kZSA9IGR0MjgwMV9yZXNldChkZXYpOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IG5fYm9hcmR0eXBlczsgdHlwZSsrKSB7CisJCWlmIChib2FyZHR5cGVzW3R5cGVdLmJvYXJkY29kZSA9PSBib2FyZF9jb2RlKQorCQkJZ290byBoYXZldHlwZTsKKwl9CisJcHJpbnRrKCJkdDI4MDE6IHVucmVjb2duaXplZCBib2FyZCBjb2RlPTB4JTAyeCwgY29udGFjdCBhdXRob3JcbiIsCisJCWJvYXJkX2NvZGUpOworCXR5cGUgPSAwOworCisgICAgICBoYXZldHlwZToKKwlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXMgKyB0eXBlOworCXByaW50aygiZHQyODAxOiAlcyBhdCBwb3J0IDB4JWx4IiwgYm9hcmR0eXBlLm5hbWUsIGlvYmFzZSk7CisKKwluX2FpX2NoYW5zID0gcHJvYmVfbnVtYmVyX29mX2FpX2NoYW5zKGRldik7CisJcHJpbnRrKCIgKGFpIGNoYW5uZWxzID0gJWQpIiwgbl9haV9jaGFucyk7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODAxX3ByaXZhdGUpKSkgPCAwKQorCQlnb3RvIG91dDsKKworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkdHlwZS5uYW1lOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisjaWYgMQorCXMtPm5fY2hhbiA9IG5fYWlfY2hhbnM7CisjZWxzZQorCWlmIChpdC0+b3B0aW9uc1syXSkKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLmFkX2NoYW47CisJZWxzZQorCQlzLT5uX2NoYW4gPSBib2FyZHR5cGUuYWRfY2hhbiAvIDI7CisjZW5kaWYKKwlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmFkYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gYWlfcmFuZ2VfbGt1cChib2FyZHR5cGUuYWRyYW5nZXR5cGUsIGl0LT5vcHRpb25zWzNdKTsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MDFfYWlfaW5zbl9yZWFkOworCisJcysrOworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmRhYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5kYWNfcmFuZ2VfdHlwZXM7CisJZGV2cHJpdi0+ZGFjX3JhbmdlX3R5cGVzWzBdID0gZGFjX3JhbmdlX2xrdXAoaXQtPm9wdGlvbnNbNF0pOworCWRldnByaXYtPmRhY19yYW5nZV90eXBlc1sxXSA9IGRhY19yYW5nZV9sa3VwKGl0LT5vcHRpb25zWzVdKTsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MDFfYW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBkdDI4MDFfYW9faW5zbl93cml0ZTsKKworCXMrKzsKKwkvKiAxc3QgZGlnaXRhbCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gZHQyODAxX2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MDFfZGlvX2luc25fY29uZmlnOworCisJcysrOworCS8qIDJuZCBkaWdpdGFsIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkdDI4MDFfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IGR0MjgwMV9kaW9faW5zbl9jb25maWc7CisKKwlyZXQgPSAwOworICAgICAgb3V0OgorCXByaW50aygiXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MDFfSU9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9lcnJvcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHN0YXQpCit7CisJaWYgKHN0YXQgPCAwKSB7CisJCWlmIChzdGF0ID09IC1FVElNRSkgeworCQkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXRcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJkdDI4MDE6IGVycm9yICVkXG4iLCBzdGF0KTsKKwkJfQorCQlyZXR1cm4gc3RhdDsKKwl9CisJcHJpbnRrKCJkdDI4MDE6IGVycm9yIHN0YXR1cyAweCUwMngsIHJlc2V0dGluZy4uLlxuIiwgc3RhdCk7CisKKwlkdDI4MDFfcmVzZXQoZGV2KTsKKwlkdDI4MDFfcmVzZXQoZGV2KTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBkOworCWludCBzdGF0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlzdGF0ID0gZHQyODAxX3dyaXRlY21kKGRldiwgRFRfQ19SRUFEX0FESU0pOworCQlkdDI4MDFfd3JpdGVkYXRhKGRldiwgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwkJc3RhdCA9IGR0MjgwMV9yZWFkZGF0YTIoZGV2LCAmZCk7CisKKwkJaWYgKHN0YXQgIT0gMCkKKwkJCXJldHVybiBkdDI4MDFfZXJyb3IoZGV2LCBzdGF0KTsKKworCQlkYXRhW2ldID0gZDsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MDFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfV1JJVEVfREFJTSk7CisJZHQyODAxX3dyaXRlZGF0YShkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwlkdDI4MDFfd3JpdGVkYXRhMihkZXYsIGRhdGFbMF0pOworCisJZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldID0gZGF0YVswXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2hpY2ggPSAwOworCisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzICsgNCkKKwkJd2hpY2ggPSAxOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfV1JJVEVfRElHKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIHdoaWNoKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIHMtPnN0YXRlKTsKKwl9CisJZHQyODAxX3dyaXRlY21kKGRldiwgRFRfQ19SRUFEX0RJRyk7CisJZHQyODAxX3dyaXRlZGF0YShkZXYsIHdoaWNoKTsKKwlkdDI4MDFfcmVhZGRhdGEoZGV2LCBkYXRhICsgMSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2hpY2ggPSAwOworCisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzICsgNCkKKwkJd2hpY2ggPSAxOworCisJLyogY29uZmlndXJlICovCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+aW9fYml0cyA9IDB4ZmY7CisJCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfU0VUX0RJR09VVCk7CisJfSBlbHNlIHsKKwkJcy0+aW9fYml0cyA9IDA7CisJCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfU0VUX0RJR0lOKTsKKwl9CisJZHQyODAxX3dyaXRlZGF0YShkZXYsIHdoaWNoKTsKKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTkzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9kdDI4MTEuYworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBEYXRhIFRyYW5zbGF0aW9uIERUMjgxMQorCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBIaXN0b3J5OgorICAgQmFzZSBWZXJzaW9uICAtIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgRGVjZW1iZXIgMTk5OCAtIFVwZGF0ZWQgdG8gd29yay4gIERhdmlkIGRvZXMgbm90IGhhdmUgYSBEVDI4MTEKKyAgIGJvYXJkIGFueSBsb25nZXIgc28gdGhpcyB3YXMgc3VmZmVyaW5nIGZyb20gYml0cm90LgorICAgVXBkYXRlZCBwZXJmb3JtZWQgYnkgLi4uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKy8qCitEcml2ZXI6IGR0MjgxMQorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQyODExCitBdXRob3I6IGRzCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODExLVBHTCAoZHQyODExLXBnbCksIERUMjgxMS1QR0ggKGR0MjgxMS1wZ2gpCitTdGF0dXM6IHdvcmtzCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSwgYWx0aG91Z2ggdGhpcyBpcyBjdXJyZW50bHkgdW51c2VkCisgIFsyXSAtIEEvRCByZWZlcmVuY2UKKyAgICAgICAgICAwID0gc2lnbmxlLWVuZGVkCisgICAgICAgICAgMSA9IGRpZmZlcmVudGlhbAorCSAgMiA9IHBzZXVkby1kaWZmZXJlbnRpYWwgKGNvbW1vbiByZWZlcmVuY2UpCisgIFszXSAtIEEvRCByYW5nZQorICAgICAgICAgIDAgPSBbLTUsNV0KKwkgIDEgPSBbLTIuNSwyLjVdCisJICAyID0gWzAsNV0KKyAgWzRdIC0gRC9BIDAgcmFuZ2UgKHNhbWUgY2hvaWNlcykKKyAgWzRdIC0gRC9BIDEgcmFuZ2UgKHNhbWUgY2hvaWNlcykKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSAiZHQyODExIjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2hfYWlfNV91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCQlSQU5HRSgwLCAwLjYyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2hfYWlfMl81X2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSksCisJCQlSQU5HRSgtMC42MjUsIDAuNjI1KSwKKwkJCVJBTkdFKC0wLjMxMjUsIDAuMzEyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2hfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoLTAuNjI1LCAwLjYyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2xfYWlfNV91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAwLjUpLAorCQkJUkFOR0UoMCwgMC4wNSksCisJCQlSQU5HRSgwLCAwLjAxKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODExX3BnbF9haV8yXzVfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0wLjI1LCAwLjI1KSwKKwkJCVJBTkdFKC0wLjAyNSwgMC4wMjUpLAorCQkJUkFOR0UoLTAuMDA1LCAwLjAwNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2xfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCQkJUkFOR0UoLTAuMDEsIDAuMDEpCisJfQorfTsKKworLyoKKworICAgMHgwMCAgICBBRENTUiBSL1cgIEEvRCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICAgYml0IDcgLSAoUikgMSBpbmRpY2F0ZXMgQS9EIGNvbnZlcnNpb24gZG9uZQorICAgcmVhZGluZyBBRERBVCBjbGVhcnMgYml0CisgICAoVykgaWdub3JlZAorICAgYml0IDYgLSAoUikgMSBpbmRpY2F0ZXMgQS9EIGVycm9yCisgICAoVykgaWdub3JlZAorICAgYml0IDUgLSAoUikgMSBpbmRpY2F0ZXMgQS9EIGJ1c3ksIGNsZWFyZWQgYXQgZW5kCisgICBvZiBjb252ZXJzaW9uCisgICAoVykgaWdub3JlZAorICAgYml0IDQgLSAoUikgMAorICAgKFcpCisgICBiaXQgMyAtIChSKSAwCisgICBiaXQgMiAtIChSL1cpIDEgaW5kaWNhdGVzIGludGVycnVwdHMgZW5hYmxlZAorICAgYml0cyAxLDAgLSAoUi9XKSBtb2RlIGJpdHMKKyAgIDAwICBzaW5nbGUgY29udmVyc2lvbiBvbiBBREdDUiBsb2FkCisgICAwMSAgY29udGludW91cyBjb252ZXJzaW9uLCBpbnRlcm5hbCBjbG9jaywKKyAgIChjbG9jayBlbmFibGVkIG9uIEFER0NSIGxvYWQpCisgICAxMCAgY29udGludW91cyBjb252ZXJzaW9uLCBpbnRlcm5hbCBjbG9jaywKKyAgIGV4dGVybmFsIHRyaWdnZXIKKyAgIDExICBjb250aW51b3VzIGNvbnZlcnNpb24sIGV4dGVybmFsIGNsb2NrLAorICAgZXh0ZXJuYWwgdHJpZ2dlcgorCisgICAweDAxICAgIEFER0NSIFIvVyBBL0QgR2Fpbi9DaGFubmVsIFJlZ2lzdGVyCisgICBiaXQgNiw3IC0gKFIvVykgZ2FpbiBzZWxlY3QKKyAgIDAwICBnYWluPTEsIGJvdGggUEdILCBQR0wgbW9kZWxzCisgICAwMSAgZ2Fpbj0yIFBHSCwgMTAgUEdMCisgICAxMCAgZ2Fpbj00IFBHSCwgMTAwIFBHTAorICAgMTEgIGdhaW49OCBQR0gsIDUwMCBQR0wKKyAgIGJpdCA0LDUgLSByZXNlcnZlZAorICAgYml0IDMtMCAtIChSL1cpIGNoYW5uZWwgc2VsZWN0CisgICBjaGFubmVsIG51bWJlciBmcm9tIDAtMTUKKworICAgMHgwMiwweDAzIChSKSBBRERBVCBBL0QgRGF0YSBSZWdpc3RlcgorICAgKFcpIERBREFUMCBEL0EgRGF0YSBSZWdpc3RlciAwCisgICAweDAyIGxvdyBieXRlCisgICAweDAzIGhpZ2ggYnl0ZQorCisgICAweDA0LDB4MDUgKFcpIERBREFUMCBEL0EgRGF0YSBSZWdpc3RlciAxCisKKyAgIDB4MDYgKFIpIERJTzAgRGlnaXRhbCBJbnB1dCBQb3J0IDAKKyAgIChXKSBESU8xIERpZ2l0YWwgT3V0cHV0IFBvcnQgMQorCisgICAweDA3IFRNUkNUUiAoUi9XKSBUaW1lci9Db3VudGVyIFJlZ2lzdGVyCisgICBiaXRzIDYsNyAtIHJlc2VydmVkCisgICBiaXRzIDUtMyAtIFRpbWVyIGZyZXF1ZW5jeSBjb250cm9sIChtYW50aXNzYSkKKyAgIDU0MyAgZGl2aXNvciAgZnJlcWVuY3kgKGtIeikKKyAgIDAwMCAgMSAgICAgICAgNjAwCisgICAwMDEgIDEwICAgICAgIDYwCisgICAwMTAgIDIgICAgICAgIDMwMAorICAgMDExICAzICAgICAgICAyMDAKKyAgIDEwMCAgNCAgICAgICAgMTUwCisgICAxMDEgIDUgICAgICAgIDEyMAorICAgMTEwICA2ICAgICAgICAxMDAKKyAgIDExMSAgMTIgICAgICAgNTAKKyAgIGJpdHMgMi0wIC0gVGltZXIgZnJlcXVlbmN5IGNvbnRyb2wgKGV4cG9uZW50KQorICAgMjEwICBtdWx0aXBseSBkaXZpc29yL2RpdmlkZSBmcmVxdWVuY3kgYnkKKyAgIDAwMCAgMQorICAgMDAxICAxMAorICAgMDEwICAxMDAKKyAgIDAxMSAgMTAwMAorICAgMTAwICAxMDAwMAorICAgMTAxICAxMDAwMDAKKyAgIDExMCAgMTAwMDAwMAorICAgMTExICAxMDAwMDAwMAorCisgKi8KKworI2RlZmluZSBUSU1FT1VUIDEwMDAwCisKKyNkZWZpbmUgRFQyODExX1NJWkUgOAorCisjZGVmaW5lIERUMjgxMV9BRENTUiAwCisjZGVmaW5lIERUMjgxMV9BREdDUiAxCisjZGVmaW5lIERUMjgxMV9BRERBVExPIDIKKyNkZWZpbmUgRFQyODExX0FEREFUSEkgMworI2RlZmluZSBEVDI4MTFfREFEQVQwTE8gMgorI2RlZmluZSBEVDI4MTFfREFEQVQwSEkgMworI2RlZmluZSBEVDI4MTFfREFEQVQxTE8gNAorI2RlZmluZSBEVDI4MTFfREFEQVQxSEkgNQorI2RlZmluZSBEVDI4MTFfRElPIDYKKyNkZWZpbmUgRFQyODExX1RNUkNUUiA3CisKKy8qCisgKiBmbGFncworICovCisKKy8qIEFEQ1NSICovCisKKyNkZWZpbmUgRFQyODExX0FERE9ORSAgIDB4ODAKKyNkZWZpbmUgRFQyODExX0FERVJST1IgIDB4NDAKKyNkZWZpbmUgRFQyODExX0FEQlVTWSAgIDB4MjAKKyNkZWZpbmUgRFQyODExX0NMUkVSUk9SIDB4MTAKKyNkZWZpbmUgRFQyODExX0lOVEVOQiAgIDB4MDQKKyNkZWZpbmUgRFQyODExX0FETU9ERSAgIDB4MDMKKworc3RydWN0IGR0MjgxMV9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpiaXBfNTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYmlwXzJfNTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqdW5pcF81OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkdDI4MTFfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsiZHQyODExLXBnaCIsCisJCQkmcmFuZ2VfZHQyODExX3BnaF9haV81X2JpcG9sYXIsCisJCQkmcmFuZ2VfZHQyODExX3BnaF9haV8yXzVfYmlwb2xhciwKKwkJCSZyYW5nZV9kdDI4MTFfcGdoX2FpXzVfdW5pcG9sYXIsCisJCX0sCisJeyJkdDI4MTEtcGdsIiwKKwkJCSZyYW5nZV9kdDI4MTFfcGdsX2FpXzVfYmlwb2xhciwKKwkJCSZyYW5nZV9kdDI4MTFfcGdsX2FpXzJfNV9iaXBvbGFyLAorCQkJJnJhbmdlX2R0MjgxMV9wZ2xfYWlfNV91bmlwb2xhciwKKwkJfSwKK307CisKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBkdDI4MTFfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIGludCBkdDI4MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZHQyODExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2R0MjgxMSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdDI4MTEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmR0MjgxMV9hdHRhY2gsCisgICAgICBkZXRhY2g6ZHQyODExX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoYm9hcmR0eXBlcykgLyBzaXplb2Yoc3RydWN0IGR0MjgxMV9ib2FyZCksCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkdDI4MTFfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTEpOworCitzdGF0aWMgaW50IGR0MjgxMV9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGR0MjgxMV9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGR0MjgxMV9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODExX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MTFfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK2VudW0geyBjYXJkXzI4MTFfcGdoLCBjYXJkXzI4MTFfcGdsIH07CisKK3N0cnVjdCBkdDI4MTFfcHJpdmF0ZSB7CisJaW50IG50cmlnOworCWludCBjdXJhZGNoYW47CisJZW51bSB7CisJCWFkY19zaW5nbGVlbmRlZCwgYWRjX2RpZmYsIGFkY19wc2V1ZG9fZGlmZgorCX0gYWRjX211eDsKKwllbnVtIHsKKwkJZGFjX2JpcG9sYXJfNSwgZGFjX2JpcG9sYXJfMl81LCBkYWNfdW5pcG9sYXJfNQorCX0gZGFjX3JhbmdlWzJdOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZV90eXBlX2xpc3RbMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGR0MjgxMV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmRhY19yYW5nZV90eXBlc1tdID0geworCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfYmlwb2xhcjJfNSwKKwkmcmFuZ2VfdW5pcG9sYXI1Cit9OworCisjZGVmaW5lIERUMjgxMV9USU1FT1VUIDUKKworI2lmIDAKK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IGxvLCBoaTsKKwlpbnQgZGF0YTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlsbyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwloaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVEhJKTsKKworCWRhdGEgPSBsbyArIChoaSA8PCA4KTsKKworCWlmICghKC0tZGV2cHJpdi0+bnRyaWcpKSB7CisJCS8qIGhvdyB0byB0dXJuIG9mZiBhY3F1aXNpdGlvbiAqLworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9TQl9FT0E7CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisvKgorICBvcHRpb25zWzBdICAgQm9hcmQgYmFzZSBhZGRyZXNzCisgIG9wdGlvbnNbMV0gICBJUlEKKyAgb3B0aW9uc1syXSAgIElucHV0IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBzaW5nbGUtZW5kZWQKKyAgICAgICAgICAgICAgICAgMSA9PSBkaWZmZXJlbnRpYWwKKyAgICAgICAgICAgICAgICAgMiA9PSBwc2V1ZG8tZGlmZmVyZW50aWFsCisgIG9wdGlvbnNbM10gICBBbmFsb2cgaW5wdXQgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IGJpcG9sYXIgNSAgKC01ViAtLSArNVYpCisgICAgICAgICAgICAgICAgIDEgPT0gYmlwb2xhciAyLjVWICAoLTIuNVYgLS0gKzIuNVYpCisgICAgICAgICAgICAgICAgIDIgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisgIG9wdGlvbnNbNF0gICBBbmFsb2cgb3V0cHV0IDAgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IGJpcG9sYXIgNSAgKC01ViAtLSArNVYpCisgICAgICAgICAgICAgICAgIDEgPT0gYmlwb2xhciAyLjVWICAoLTIuNVYgLS0gKzIuNVYpCisgICAgICAgICAgICAgICAgIDIgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisgIG9wdGlvbnNbNV0gICBBbmFsb2cgb3V0cHV0IDEgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IGJpcG9sYXIgNSAgKC01ViAtLSArNVYpCisgICAgICAgICAgICAgICAgIDEgPT0gYmlwb2xhciAyLjVWICAoLTIuNVYgLS0gKzIuNVYpCisgICAgICAgICAgICAgICAgIDIgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisqLworCitzdGF0aWMgaW50IGR0MjgxMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJLy9pbnQgaSwgaXJxOworCS8vdW5zaWduZWQgbG9uZyBpcnFzOworCS8vbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTE6IGJhc2U9MHglMDRseFxuIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEVDI4MTFfU0laRSwgZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisjaWYgMAorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURDU1IpOworCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEREFUTE8pOworCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSk7CisjZW5kaWYKKworI2lmIDAKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxIDwgMCkgeworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJc3RpKCk7CisJCWlycXMgPSBwcm9iZV9pcnFfb24oKTsKKworCQlvdXRiKERUMjgxMV9DTFJFUlJPUiB8IERUMjgxMV9JTlRFTkIsCisJCQlkZXYtPmlvYmFzZSArIERUMjgxMV9BRENTUik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURHQ1IpOworCisJCWNvbWVkaV91ZGVsYXkoMTAwKTsKKworCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCQkvKm91dGIoRFQyODExX0NMUkVSUk9SfERUMjgxMV9JTlRFTkIsZGV2LT5pb2Jhc2UrRFQyODExX0FEQ1NSKTsgKi8KKworCQlpZiAoaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEQ1NSKSAmIERUMjgxMV9BREVSUk9SKSB7CisJCQlwcmludGsoImVycm9yIHByb2JpbmcgaXJxIChiYWQpIFxuIik7CisJCX0KKwkJZGV2LT5pcnEgPSAwOworCQlpZiAoaXJxID4gMCkgeworCQkJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwkJCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSk7CisJCQlwcmludGsoIihpcnEgPSAlZClcbiIsIGlycSk7CisJCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkdDI4MTFfaW50ZXJydXB0LCAwLAorCQkJCWRyaXZlcl9uYW1lLCBkZXYpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQlkZXYtPmlycSA9IGlycTsKKwkJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQkJcHJpbnRrKCIobm8gaXJxKVxuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiggbXVsdGlwbGUgaXJxJ3MgLS0gdGhpcyBpcyBiYWQhIClcbiIpOworCQl9CisJfQorI2VuZGlmCisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODExX3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCXN3aXRjaCAoaXQtPm9wdGlvbnNbMl0pIHsKKwljYXNlIDA6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfc2luZ2xlZW5kZWQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+YWRjX211eCA9IGFkY19kaWZmOworCQlicmVhazsKKwljYXNlIDI6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfcHNldWRvX2RpZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfc2luZ2xlZW5kZWQ7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzRdKSB7CisJY2FzZSAwOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMF0gPSBkYWNfYmlwb2xhcl81OworCQlicmVhazsKKwljYXNlIDE6CisJCWRldnByaXYtPmRhY19yYW5nZVswXSA9IGRhY19iaXBvbGFyXzJfNTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMF0gPSBkYWNfdW5pcG9sYXJfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzBdID0gZGFjX2JpcG9sYXJfNTsKKwkJYnJlYWs7CisJfQorCXN3aXRjaCAoaXQtPm9wdGlvbnNbNV0pIHsKKwljYXNlIDA6CisJCWRldnByaXYtPmRhY19yYW5nZVsxXSA9IGRhY19iaXBvbGFyXzU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzFdID0gZGFjX2JpcG9sYXJfMl81OworCQlicmVhazsKKwljYXNlIDI6CisJCWRldnByaXYtPmRhY19yYW5nZVsxXSA9IGRhY191bmlwb2xhcl81OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMV0gPSBkYWNfYmlwb2xhcl81OworCQlicmVhazsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBpbml0aWFsaXplIHRoZSBBREMgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gZGV2cHJpdi0+YWRjX211eCA9PSBhZGNfZGlmZiA/IDggOiAxNjsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTFfYWlfaW5zbjsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJc3dpdGNoIChpdC0+b3B0aW9uc1szXSkgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmJpcF81OworCQlicmVhazsKKwljYXNlIDE6CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+YmlwXzJfNTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnVuaXBfNTsKKwkJYnJlYWs7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCXMtPmluc25fd3JpdGUgPSBkdDI4MTFfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTFfYW9faW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+cmFuZ2VfdHlwZV9saXN0OworCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFswXSA9IGRhY19yYW5nZV90eXBlc1tkZXZwcml2LT5kYWNfcmFuZ2VbMF1dOworCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFsxXSA9IGRhY19yYW5nZV90eXBlc1tkZXZwcml2LT5kYWNfcmFuZ2VbMV1dOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IGR0MjgxMV9kaV9pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBkdDI4MTFfZG9faW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnN0YXRlID0gMDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERUMjgxMV9TSVpFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MTFfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgdGltZW91dCA9IERUMjgxMV9USU1FT1VUOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKGNoYW4sIGRldi0+aW9iYXNlICsgRFQyODExX0FER0NSKTsKKworCQl3aGlsZSAodGltZW91dAorCQkJJiYgaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEQ1NSKSAmIERUMjgxMV9BREJVU1kpCisJCQl0aW1lb3V0LS07CisJCWlmICghdGltZW91dCkKKwkJCXJldHVybiAtRVRJTUU7CisKKwkJZGF0YVtpXSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwkJZGF0YVtpXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSkgPDwgODsKKwkJZGF0YVtpXSAmPSAweGZmZjsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworI2lmIDAKKy8qIFdvdy4gIFRoaXMgaXMgY29kZSBmcm9tIHRoZSBDb21lZGkgc3RvbmUgYWdlLiAgQnV0IGl0IGhhc24ndCBiZWVuCisgKiByZXBsYWNlZCwgc28gSSdsbCBsZXQgaXQgc3RheS4gKi8KK2ludCBkdDI4MTFfYWR0cmlnKGtkZXZfdCBtaW5vciwgY29tZWRpX2FkdHJpZyAqIGFkdHJpZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY29tZWRpX2RldmljZXMgKyBtaW5vcjsKKworCWlmIChhZHRyaWctPm4gPCAxKQorCQlyZXR1cm4gMDsKKwlkZXYtPmN1cmFkY2hhbiA9IGFkdHJpZy0+Y2hhbjsKKwlzd2l0Y2ggKGRldi0+aV9hZG1vZGUpIHsKKwljYXNlIENPTUVESV9NREVNQU5EOgorCQlkZXYtPm50cmlnID0gYWR0cmlnLT5uIC0gMTsKKwkJLypwcmludGsoImR0MjgxMTogQUQgc29mdCB0cmlnZ2VyXG4iKTsgKi8KKwkJLypvdXRiKERUMjgxMV9DTFJFUlJPUnxEVDI4MTFfSU5URU5CLGRldi0+aW9iYXNlK0RUMjgxMV9BRENTUik7ICovLyogbm90IG5lY2Nlc3NhcnkgKi8KKwkJb3V0YihkZXYtPmN1cmFkY2hhbiwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURHQ1IpOworCQlkb19nZXR0aW1lb2ZkYXkoJnRyaWd0aW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfTUNPTlRTOgorCQlkZXYtPm50cmlnID0gYWR0cmlnLT5uOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGR0MjgxMV9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0YihkYXRhW2ldICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfREFEQVQwTE8gKyAyICogY2hhbik7CisJCW91dGIoKGRhdGFbaV0gPj4gOCkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBEVDI4MTFfREFEQVQwSEkgKyAyICogY2hhbik7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MTFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0MjgxMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9ESU8pOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQyODExX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIERUMjgxMV9ESU8pOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMyMDEzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTQuYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kdDI4MTQuYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgRGF0YSBUcmFuc2xhdGlvbiBEVDI4MTQKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGR0MjgxNAorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQyODE0CitBdXRob3I6IGRzCitTdGF0dXM6IGNvbXBsZXRlCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODE0IChkdDI4MTQpCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUQorCitUaGlzIGNhcmQgaGFzIDE2IGFuYWxvZyBpbnB1dHMgbXVsdGlwbGV4ZWQgb250byBhIDEyIGJpdCBBREMuICBUaGVyZQoraXMgYSBtaW5pbWFsbHkgdXNlZnVsIG9uYm9hcmQgY2xvY2suICBUaGUgYmFzZSBmcmVxdWVuY3kgZm9yIHRoZQorY2xvY2sgaXMgc2VsZWN0ZWQgYnkganVtcGVycywgYW5kIHRoZSBjbG9jayBkaXZpZGVyIGNhbiBiZSBzZWxlY3RlZAordmlhIHByb2dyYW1tZWQgSS9PLiAgVW5mb3J0dW5hdGVseSwgdGhlIGNsb2NrIGRpdmlkZXIgY2FuIG9ubHkgYmUKK2EgcG93ZXIgb2YgMTAsIGZyb20gMSB0byAxMF43LCBvZiB3aGljaCBvbmx5IDMgb3IgNCBhcmUgdXNlZnVsLiAgSW4KK2FkZGl0aW9uLCB0aGUgY2xvY2sgZG9lcyBub3Qgc2VlbSB0byBiZSB2ZXJ5IGFjY3VyYXRlLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBEVDI4MTRfU0laRSAyCisKKyNkZWZpbmUgRFQyODE0X0NTUiAwCisjZGVmaW5lIERUMjgxNF9EQVRBIDEKKworLyoKKyAqIGZsYWdzCisgKi8KKworI2RlZmluZSBEVDI4MTRfRklOSVNIIDB4ODAKKyNkZWZpbmUgRFQyODE0X0VSUiAweDQwCisjZGVmaW5lIERUMjgxNF9CVVNZIDB4MjAKKyNkZWZpbmUgRFQyODE0X0VOQiAweDEwCisjZGVmaW5lIERUMjgxNF9DSEFOTUFTSyAweDBmCisKK3N0YXRpYyBpbnQgZHQyODE0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgxNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MTQgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODE0IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MTRfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgxNF9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldiBQVF9SRUdTX0FSRyk7CisKK3N0cnVjdCBkdDI4MTRfcHJpdmF0ZSB7CisKKwlpbnQgbnRyaWc7CisJaW50IGN1cmFkY2hhbjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MTRfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworI2RlZmluZSBEVDI4MTRfVElNRU9VVCAxMAorI2RlZmluZSBEVDI4MTRfTUFYX1NQRUVEIDEwMDAwMAkvKiBBcmJpdHJhcnkgMTAga2h6IGxpbWl0ICovCisKK3N0YXRpYyBpbnQgZHQyODE0X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGksIGhpLCBsbzsKKwlpbnQgY2hhbjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJCW91dGIoY2hhbiwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKwkJZm9yIChpID0gMDsgaSA8IERUMjgxNF9USU1FT1VUOyBpKyspIHsKKwkJCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpOworCQkJcHJpbnRrKCJkdDI4MTQ6IHN0YXR1czogJTAyeFxuIiwgc3RhdHVzKTsKKwkJCWNvbWVkaV91ZGVsYXkoMTApOworCQkJaWYgKHN0YXR1cyAmIERUMjgxNF9GSU5JU0gpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPj0gRFQyODE0X1RJTUVPVVQpIHsKKwkJCXByaW50aygiZHQyODE0OiBzdGF0dXM6ICUwMnhcbiIsIHN0YXR1cyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCWhpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCQlsbyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKworCQlkYXRhW25dID0gKGhpIDw8IDQpIHwgKGxvID4+IDQpOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGY7CisKKwkvKiBYWFggaWdub3JlcyBmbGFncyAqLworCisJZiA9IDEwMDAwOwkJLyogbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgoMiAqICgqbnMpKSA8IChmICogMTEpKQorCQkJYnJlYWs7CisJCWYgKj0gMTA7CisJfQorCisJKm5zID0gZjsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gMTAwMDAwMDAwMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMTAwMDAwMDAwMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgRFQyODE0X01BWF9TUEVFRCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gRFQyODE0X01BWF9TUEVFRDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA8IDIpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAyOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlkdDI4MTRfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGNoYW47CisJaW50IHRyaWd2YXI7CisKKwl0cmlndmFyID0KKwkJZHQyODE0X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJZGV2cHJpdi0+bnRyaWcgPSBjbWQtPnN0b3BfYXJnOworCW91dGIoY2hhbiB8IERUMjgxNF9FTkIgfCAodHJpZ3ZhciA8PCA1KSwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZHQyODE0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgaSwgaXJxOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODE0X1NJWkUsICJkdDI4MTQiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCWRldi0+Ym9hcmRfbmFtZSA9ICJkdDI4MTQiOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpOworCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwlpZiAoaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0NTUikgJiBEVDI4MTRfRVJSKSB7CisJCXByaW50aygicmVzZXQgZXJyb3IgKGZhdGFsKVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKyNpZiAwCisJaWYgKGlycSA8IDApIHsKKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCXN0aSgpOworCQlpcnFzID0gcHJvYmVfaXJxX29uKCk7CisKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpOworCisJCWNvbWVkaV91ZGVsYXkoMTAwKTsKKworCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpICYgRFQyODE0X0VSUikgeworCQkJcHJpbnRrKCJlcnJvciBwcm9iaW5nIGlycSAoYmFkKSBcbiIpOworCQl9CisKKwkJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwkJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwl9CisjZW5kaWYKKwlkZXYtPmlycSA9IDA7CisJaWYgKGlycSA+IDApIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGR0MjgxNF9pbnRlcnJ1cHQsIDAsICJkdDI4MTQiLCBkZXYpKSB7CisJCQlwcmludGsoIihpcnEgJWQgdW5hdmFpbGFibGUpXG4iLCBpcnEpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIoIGlycSA9ICVkIClcbiIsIGlycSk7CisJCQlkZXYtPmlycSA9IGlycTsKKwkJfQorCX0gZWxzZSBpZiAoaXJxID09IDApIHsKKwkJcHJpbnRrKCIobm8gaXJxKVxuIik7CisJfSBlbHNlIHsKKyNpZiAwCisJCXByaW50aygiKHByb2JlIHJldHVybmVkIG11bHRpcGxlIGlycXMtLWJhZClcbiIpOworI2Vsc2UKKwkJcHJpbnRrKCIoaXJxIHByb2JlIG5vdCBpbXBsZW1lbnRlZClcbiIpOworI2VuZGlmCisJfQorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0MjgxNF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDE2OwkJLyogWFhYICovCisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTRfYWlfaW5zbl9yZWFkOworCXMtPmRvX2NtZCA9IGR0MjgxNF9haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGR0MjgxNF9haV9jbWR0ZXN0OworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvKiBYWFggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+aW9iYXNlKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTRfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IGxvLCBoaTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgZGF0YTsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCWhpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCWxvID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCisJZGF0YSA9IChoaSA8PCA0KSB8IChsbyA+PiA0KTsKKworCWlmICghKC0tZGV2cHJpdi0+bnRyaWcpKSB7CisJCWludCBpOworCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKwkJLyogbm90ZTogdHVybmluZyBvZmYgdGltZWQgbW9kZSB0cmlnZ2VycyBhbm90aGVyCisJCSAgIHNhbXBsZS4gKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgRFQyODE0X1RJTUVPVVQ7IGkrKykgeworCQkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpICYgRFQyODE0X0ZJTklTSCkKKwkJCQlicmVhazsKKwkJfQorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisJCWluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2NlYzhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgRGF0YSBUcmFuc2xhdGlvbiBEVDI4MTUKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk5IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IGR0MjgxNQorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQyODE1CitBdXRob3I6IGRzCitTdGF0dXM6IG1vc3RseSBjb21wbGV0ZSwgdW50ZXN0ZWQKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MTUgKGR0MjgxNSkKKworSSdtIG5vdCBzdXJlIGFueW9uZSBoYXMgZXZlciB0ZXN0ZWQgdGhpcyBib2FyZC4gIElmIHlvdSBoYXZlIGluZm9ybWF0aW9uCitjb250cmFyeSwgcGxlYXNlIHVwZGF0ZS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKHVudXNlZCkKKyAgWzJdIC0gVm9sdGFnZSB1bmlwb2xhci9iaXBvbGFyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAwID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorCSAgMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKyAgWzNdIC0gQ3VycmVudCBvZmZzZXQgY29uZmlndXJhdGlvbgorICAgICAgICAgIDAgPT0gZGlzYWJsZWQgICgwbUEgLS0gKzMybUFWKQorICAgICAgICAgIDEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQorICBbNF0gLSBGaXJtd2FyZSBwcm9ncmFtIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAwID09IHByb2dyYW0gMSAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgICAgICAgICAgMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICAgICAgICAgIDIgPT0gcHJvZ3JhbSAzIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgICAgICAgICAzID09IHByb2dyYW0gNCAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgIFs1XSAtIEFuYWxvZyBvdXRwdXQgMCByYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgMCA9PSB2b2x0YWdlCisgICAgICAgICAgMSA9PSBjdXJyZW50CisgIFs2XSAtIEFuYWxvZyBvdXRwdXQgMSByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFs3XSAtIEFuYWxvZyBvdXRwdXQgMiByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFs4XSAtIEFuYWxvZyBvdXRwdXQgMyByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFs5XSAtIEFuYWxvZyBvdXRwdXQgNCByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFsxMF0gLSBBbmFsb2cgb3V0cHV0IDUgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorICBbMTFdIC0gQW5hbG9nIG91dHB1dCA2IHJhbmdlIGNvbmZpZ3VyYXRpb24gKHNhbWUgb3B0aW9ucykKKyAgWzEyXSAtIEFuYWxvZyBvdXRwdXQgNyByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODE1X2FvXzMyX2N1cnJlbnQgPSB7IDEsIHsKKwkJCVJBTkdFX21BKDAsIDMyKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODE1X2FvXzIwX2N1cnJlbnQgPSB7IDEsIHsKKwkJCVJBTkdFX21BKDQsIDIwKQorCX0KK307CisKKyNkZWZpbmUgRFQyODE1X1NJWkUgMgorCisjZGVmaW5lIERUMjgxNV9EQVRBIDAKKyNkZWZpbmUgRFQyODE1X1NUQVRVUyAxCisKK3N0YXRpYyBpbnQgZHQyODE1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgxNV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MTUgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODE1IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MTVfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgxNV9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNSk7CisKK3N0YXRpYyB2b2lkIGR0MjgxNV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBkdDI4MTVfcHJpdmF0ZSB7CisKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdHlwZV9saXN0WzhdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1s4XTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGR0MjgxNV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGR0MjgxNV93YWl0X2Zvcl9zdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBzdGF0dXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNV9TVEFUVVMpID09IHN0YXR1cykKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGR0MjgxNV9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MTVfYW9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBsbywgaGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWxvID0gKChkYXRhW2ldICYgMHgwZikgPDwgNCkgfCAoY2hhbiA8PCAxKSB8IDB4MDE7CisJCWhpID0gKGRhdGFbaV0gJiAweGZmMCkgPj4gNDsKKworCQlzdGF0dXMgPSBkdDI4MTVfd2FpdF9mb3Jfc3RhdHVzKGRldiwgMHgwMCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJcnRfcHJpbnRrCisJCQkJKCJkdDI4MTU6IGZhaWxlZCB0byB3cml0ZSBsb3cgYnl0ZSBvbiAlZCByZWFzb24gJXhcbiIsCisJCQkJY2hhbiwgc3RhdHVzKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlvdXRiKGxvLCBkZXYtPmlvYmFzZSArIERUMjgxNV9EQVRBKTsKKworCQlzdGF0dXMgPSBkdDI4MTVfd2FpdF9mb3Jfc3RhdHVzKGRldiwgMHgxMCk7CisJCWlmIChzdGF0dXMgIT0gMHgxMCkgeworCQkJcnRfcHJpbnRrCisJCQkJKCJkdDI4MTU6IGZhaWxlZCB0byB3cml0ZSBoaWdoIGJ5dGUgb24gJWQgcmVhc29uICV4XG4iLAorCQkJCWNoYW4sIHN0YXR1cyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisJcmV0dXJuIGk7Cit9CisKKy8qCisgIG9wdGlvbnNbMF0gICBCb2FyZCBiYXNlIGFkZHJlc3MKKyAgb3B0aW9uc1sxXSAgIElSUSAobm90IGFwcGxpY2FibGUpCisgIG9wdGlvbnNbMl0gICBWb2x0YWdlIHVuaXBvbGFyL2JpcG9sYXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorCQkgMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKyAgb3B0aW9uc1szXSAgIEN1cnJlbnQgb2Zmc2V0IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBkaXNhYmxlZCAgKDBtQSAtLSArMzJtQVYpCisgICAgICAgICAgICAgICAgIDEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQorICBvcHRpb25zWzRdICAgRmlybXdhcmUgcHJvZ3JhbSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gcHJvZ3JhbSAxIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgICAgICAgICAgICAgICAgMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICAgICAgICAgICAgICAgICAyID09IHByb2dyYW0gMyAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgICAgICAgICAgICAgICAgIDMgPT0gcHJvZ3JhbSA0IChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgb3B0aW9uc1s1XSAgIEFuYWxvZyBvdXRwdXQgMCByYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gdm9sdGFnZQorICAgICAgICAgICAgICAgICAxID09IGN1cnJlbnQKKyAgb3B0aW9uc1s2XSAgIEFuYWxvZyBvdXRwdXQgMSByYW5nZSBjb25maWd1cmF0aW9uCisgIC4uLgorICBvcHRpb25zWzEyXSAgIEFuYWxvZyBvdXRwdXQgNyByYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gdm9sdGFnZQorICAgICAgICAgICAgICAgICAxID09IGN1cnJlbnQKKyAqLworCitzdGF0aWMgaW50IGR0MjgxNV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmN1cnJlbnRfcmFuZ2VfdHlwZSwgKnZvbHRhZ2VfcmFuZ2VfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IGR0MjgxNTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEVDI4MTVfU0laRSwgImR0MjgxNSIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZHQyODE1IjsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODE1X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fd3JpdGUgPSBkdDI4MTVfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTVfYW9faW5zbl9yZWFkOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5yYW5nZV90eXBlX2xpc3Q7CisKKwljdXJyZW50X3JhbmdlX3R5cGUgPSAoaXQtPm9wdGlvbnNbM10pCisJCT8gJnJhbmdlX2R0MjgxNV9hb18yMF9jdXJyZW50IDogJnJhbmdlX2R0MjgxNV9hb18zMl9jdXJyZW50OworCXZvbHRhZ2VfcmFuZ2VfdHlwZSA9IChpdC0+b3B0aW9uc1syXSkKKwkJPyAmcmFuZ2VfYmlwb2xhcjUgOiAmcmFuZ2VfdW5pcG9sYXI1OworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZGV2cHJpdi0+cmFuZ2VfdHlwZV9saXN0W2ldID0gKGl0LT5vcHRpb25zWzUgKyBpXSkKKwkJCT8gY3VycmVudF9yYW5nZV90eXBlIDogdm9sdGFnZV9yYW5nZV90eXBlOworCX0KKworCS8qIEluaXQgdGhlIDI4MTUgKi8KKwlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgRFQyODE1X1NUQVRVUyk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCS8qIFRoaXMgaXMgaW5jcmVkaWJseSBzbG93IChhcHByb3ggMjAgbXMpICovCisJCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkJY29tZWRpX3VkZWxheSgxMDAwKTsKKwkJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE1X1NUQVRVUyk7CisJCWlmIChzdGF0dXMgPT0gNCkgeworCQkJdW5zaWduZWQgaW50IHByb2dyYW07CisJCQlwcm9ncmFtID0gKGl0LT5vcHRpb25zWzRdICYgMHgzKSA8PCAzIHwgMHg3OworCQkJb3V0Yihwcm9ncmFtLCBkZXYtPmlvYmFzZSArIERUMjgxNV9EQVRBKTsKKwkJCXByaW50aygiLCBwcm9ncmFtOiAweCV4IChAdD0lZClcbiIsIHByb2dyYW0sIGkpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoc3RhdHVzICE9IDB4MDApIHsKKwkJCXByaW50aygiZHQyODE1OiB1bmV4cGVjdGVkIHN0YXR1cyAweCV4IChAdD0lZClcbiIsCisJCQkJc3RhdHVzLCBpKTsKKwkJCWlmIChzdGF0dXMgJiAweDYwKSB7CisJCQkJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERUMjgxNV9TVEFUVVMpOworCQkJfQorCQl9CisJfQorCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0MjgxNV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTVfU0laRSk7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTU6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlkdDI4MTVfZnJlZV9yZXNvdXJjZXMoZGV2KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYzM5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE3LmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZHQyODE3LmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIERhdGEgVHJhbnNsYXRpb24gRFQyODE3CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBkdDI4MTcKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgxNworQXV0aG9yOiBkcworU3RhdHVzOiBjb21wbGV0ZQorRGV2aWNlczogW0RhdGEgVHJhbnNsYXRpb25dIERUMjgxNyAoZHQyODE3KQorCitBIHZlcnkgc2ltcGxlIGRpZ2l0YWwgSS9PIGNhcmQuICBGb3VyIGJhbmtzIG9mIDggbGluZXMsIGVhY2ggYmFuaworaXMgY29uZmlndXJhYmxlIGZvciBpbnB1dCBvciBvdXRwdXQuICBPbmUgd29uZGVycyB3aHkgaXQgdGFrZXMgYQorNTAgcGFnZSBtYW51YWwgdG8gZGVzY3JpYmUgdGhpcyB0aGluZy4KKworVGhlIGRyaXZlciAod2hpY2gsIGJ0dywgaXMgbXVjaCBsZXNzIHRoYW4gNTAgcGFnZXMpIGhhcyAxIHN1YmRldmljZQord2l0aCAzMiBjaGFubmVscywgY29uZmlndXJhYmxlIGluIGdyb3VwcyBvZiA4LgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYmFzZSBhZGRyZXNzCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBEVDI4MTdfU0laRSA1CisKKyNkZWZpbmUgRFQyODE3X0NSIDAKKyNkZWZpbmUgRFQyODE3X0RBVEEgMQorCitzdGF0aWMgaW50IGR0MjgxN19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkdDI4MTdfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZHQyODE3ID0geworICAgICAgZHJpdmVyX25hbWU6ImR0MjgxNyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZHQyODE3X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkdDI4MTdfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTcpOworCitzdGF0aWMgaW50IGR0MjgxN19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBtYXNrOworCWludCBjaGFuOworCWludCBvZSA9IDA7CisKKwlpZiAoaW5zbi0+biAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoY2hhbiA8IDgpIHsKKwkJbWFzayA9IDB4ZmY7CisJfSBlbHNlIGlmIChjaGFuIDwgMTYpIHsKKwkJbWFzayA9IDB4ZmYwMDsKKwl9IGVsc2UgaWYgKGNoYW4gPCAyNCkgeworCQltYXNrID0gMHhmZjAwMDA7CisJfSBlbHNlCisJCW1hc2sgPSAweGZmMDAwMDAwOworCWlmIChkYXRhWzBdKQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJZWxzZQorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCisJaWYgKHMtPmlvX2JpdHMgJiAweDAwMDAwMGZmKQorCQlvZSB8PSAweDE7CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwMDBmZjAwKQorCQlvZSB8PSAweDI7CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwZmYwMDAwKQorCQlvZSB8PSAweDQ7CisJaWYgKHMtPmlvX2JpdHMgJiAweGZmMDAwMDAwKQorCQlvZSB8PSAweDg7CisKKwlvdXRiKG9lLCBkZXYtPmlvYmFzZSArIERUMjgxN19DUik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MTdfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisKKwkvKiBJdCdzIHF1ZXN0aW9uYWJsZSB3aGV0aGVyIGl0IGlzIG1vcmUgaW1wb3J0YW50IGluCisJICogYSBkcml2ZXIgbGlrZSB0aGlzIHRvIGJlIGRldGVybWluaXN0aWMgb3IgZmFzdC4KKwkgKiBXZSBjaG9vc2UgZmFzdC4gKi8KKworCWlmIChkYXRhWzBdKSB7CisJCWNoYW5nZWQgPSBzLT5zdGF0ZTsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCWNoYW5nZWQgXj0gcy0+c3RhdGU7CisJCWNoYW5nZWQgJj0gcy0+aW9fYml0czsKKwkJaWYgKGNoYW5nZWQgJiAweDAwMDAwMGZmKQorCQkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAwKTsKKwkJaWYgKGNoYW5nZWQgJiAweDAwMDBmZjAwKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gOCkgJiAweGZmLAorCQkJCWRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAxKTsKKwkJaWYgKGNoYW5nZWQgJiAweDAwZmYwMDAwKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwKKwkJCQlkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMik7CisJCWlmIChjaGFuZ2VkICYgMHhmZjAwMDAwMCkKKwkJCW91dGIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsCisJCQkJZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDMpOworCX0KKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAwKTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDEpIDw8IDgpOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMikgPDwgMTYpOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMykgPDwgMjQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE3X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE3OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERUMjgxN19TSVpFLCAiZHQyODE3IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZHQyODE3IjsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCXMtPm5fY2hhbiA9IDMyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+aW5zbl9iaXRzID0gZHQyODE3X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MTdfZGlvX2luc25fY29uZmlnOworCisJcy0+c3RhdGUgPSAwOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTdfQ1IpOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE3X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTc6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTdfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgyYzNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCkBAIC0wLDAgKzEsMTQ3MSBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIERhdGEgVHJhbnNsYXRpb24gRFQyODIxIHNlcmllcworCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDE5OTctOCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBkdDI4MngKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgyMSBzZXJpZXMgKGluY2x1ZGluZyBEVC1FWikKK0F1dGhvcjogZHMKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MjEgKGR0MjgyMSksCisgIERUMjgyMS1GLTE2U0UgKGR0MjgyMS1mKSwgRFQyODIxLUYtOERJIChkdDI4MjEtZiksCisgIERUMjgyMS1HLTE2U0UgKGR0MjgyMS1mKSwgRFQyODIxLUctOERJIChkdDI4MjEtZyksCisgIERUMjgyMyAoZHQyODIzKSwKKyAgRFQyODI0LVBHSCAoZHQyODI0LXBnaCksIERUMjgyNC1QR0wgKGR0MjgyNC1wZ2wpLCBEVDI4MjUgKGR0MjgyNSksCisgIERUMjgyNyAoZHQyODI3KSwgRFQyODI4IChkdDI4MjgpLCBEVDIxLUVaIChkdDIxLWV6KSwgRFQyMy1FWiAoZHQyMy1leiksCisgIERUMjQtRVogKGR0MjQtZXopLCBEVDI0LUVaLVBHTCAoZHQyNC1lei1wZ2wpCitTdGF0dXM6IGNvbXBsZXRlCitVcGRhdGVkOiBXZWQsIDIyIEF1ZyAyMDAxIDE3OjExOjM0IC0wNzAwCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUQorICBbMl0gLSBETUEgMQorICBbM10gLSBETUEgMgorICBbNF0gLSBBSSBqdW1wZXJlZCBmb3IgMD1zaW5nbGUgZW5kZWQsIDE9ZGlmZmVyZW50aWFsCisgIFs1XSAtIEFJIGp1bXBlcmVkIGZvciAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcGxlbWVudAorICBbNl0gLSBBTyAwIGp1bXBlcmVkIGZvciAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcGxlbWVudAorICBbN10gLSBBTyAxIGp1bXBlcmVkIGZvciAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcGxlbWVudAorICBbOF0gLSBBSSBqdW1wZXJlZCBmb3IgMD1bLTEwLDEwXVYsIDE9WzAsMTBdLCAyPVstNSw1XSwgMz1bMCw1XQorICBbOV0gLSBBTyAwIGp1bXBlcmVkIGZvciAwPVstMTAsMTBdViwgMT1bMCwxMF0sIDI9Wy01LDVdLCAzPVswLDVdLAorICAgICAgICA0PVstMi41LDIuNV0KKyAgWzEwXS0gQTAgMSBqdW1wZXJlZCBmb3IgMD1bLTEwLDEwXVYsIDE9WzAsMTBdLCAyPVstNSw1XSwgMz1bMCw1XSwKKyAgICAgICAgND1bLTIuNSwyLjVdCisKK05vdGVzOgorICAtIEFPIGNvbW1hbmRzIG1pZ2h0IGJlIGJyb2tlbi4KKyAgLSBJZiB5b3UgdHJ5IHRvIHJ1biBhIGNvbW1hbmQgb24gYm90aCB0aGUgQUkgYW5kIEFPIHN1YmRldmljZXMKKyAgICBzaW11bHRhbmVvdXNseSwgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbi4gIFRoZSBkcml2ZXIgbmVlZHMgdG8KKyAgICBiZSBmaXhlZCB0byBjaGVjayBmb3IgdGhpcyBzaXR1YXRpb24gYW5kIHJldHVybiBhbiBlcnJvci4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI2RlZmluZSBERUJVRworCisjZGVmaW5lIERUMjgyMV9USU1FT1VUCQkxMDAJLyogNTAwIHVzICovCisjZGVmaW5lIERUMjgyMV9TSVpFIDB4MTAKKworLyoKKyAqICAgIFJlZ2lzdGVycyBpbiB0aGUgRFQyODJ4CisgKi8KKworI2RlZmluZSBEVDI4MjFfQURDU1IJMHgwMAkvKiBBL0QgQ29udHJvbC9TdGF0dXMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0NIQU5DU1IJMHgwMgkvKiBDaGFubmVsIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIERUMjgyMV9BRERBVAkweDA0CS8qIEEvRCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfREFDU1IJMHgwNgkvKiBEL0EgQ29udHJvbC9TdGF0dXMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBREFUCTB4MDgJLyogRC9BIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9ESU9EQVQJMHgwYQkvKiBkaWdpdGFsIGRhdGEgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1NVUENTUgkweDBjCS8qIFN1cGVydmlzb3IgQ29udHJvbC9TdGF0dXMgICAgICAqLworI2RlZmluZSBEVDI4MjFfVE1SQ1RSCTB4MGUJLyogVGltZXIvQ291bnRlciAgICAgICAgICAqLworCisvKgorICogIEF0IHBvd2VyIHVwLCBzb21lIHJlZ2lzdGVycyBhcmUgaW4gYSB3ZWxsLWtub3duIHN0YXRlLiAgVGhlCisgKiAgbWFza3MgYW5kIHZhbHVlcyBhcmUgYXMgZm9sbG93czoKKyAqLworCisjZGVmaW5lIERUMjgyMV9BRENTUl9NQVNLIDB4ZmZmMAorI2RlZmluZSBEVDI4MjFfQURDU1JfVkFMIDB4N2MwMAorCisjZGVmaW5lIERUMjgyMV9DSEFOQ1NSX01BU0sgMHhmMGYwCisjZGVmaW5lIERUMjgyMV9DSEFOQ1NSX1ZBTCAweDcwZjAKKworI2RlZmluZSBEVDI4MjFfREFDU1JfTUFTSyAweDdjOTMKKyNkZWZpbmUgRFQyODIxX0RBQ1NSX1ZBTCAweDdjOTAKKworI2RlZmluZSBEVDI4MjFfU1VQQ1NSX01BU0sgMHhmOGZmCisjZGVmaW5lIERUMjgyMV9TVVBDU1JfVkFMIDB4MDAwMAorCisjZGVmaW5lIERUMjgyMV9UTVJDVFJfTUFTSyAweGZmMDAKKyNkZWZpbmUgRFQyODIxX1RNUkNUUl9WQUwgMHhmMDAwCisKKy8qCisgKiAgICBCaXQgZmllbGRzIG9mIGVhY2ggcmVnaXN0ZXIKKyAqLworCisvKiBBRENTUiAqLworCisjZGVmaW5lIERUMjgyMV9BREVSUgkweDgwMDAJLyogKFIpICAgMSBmb3IgQS9EIGVycm9yICAqLworI2RlZmluZSBEVDI4MjFfQURDTEsJMHgwMjAwCS8qIChSL1cpIEEvRCBjbG9jayBlbmFibGUgKi8KKwkJLyogICAgICAweDdjMDAgICAgICAgICAgIHJlYWQgYXMgMSdzICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX01VWEJVU1kJMHgwMTAwCS8qIChSKSAgIG11bHRpcGxleGVyIGJ1c3kgKi8KKyNkZWZpbmUgRFQyODIxX0FERE9ORQkweDAwODAJLyogKFIpICAgQS9EIGRvbmUgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfSUFERE9ORQkweDAwNDAJLyogKFIvVykgaW50ZXJydXB0IG9uIEEvRCBkb25lICAgICovCisJCS8qICAgICAgMHgwMDMwICAgICAgICAgICBnYWluIHNlbGVjdCAgICAgICAgICAgICovCisJCS8qICAgICAgMHgwMDBmICAgICAgICAgICBjaGFubmVsIHNlbGVjdCAgICAgICAgICovCisKKy8qIENIQU5DU1IgKi8KKworI2RlZmluZSBEVDI4MjFfTExFCTB4ODAwMAkvKiAoUi9XKSBMb2FkIExpc3QgRW5hYmxlICovCisJCS8qICAgICAgMHg3MDAwICAgICAgICAgICByZWFkIGFzIDEncyAgICAgICAgICAgICovCisJCS8qICAgICAgMHgwZjAwICAgICAoUikgICBwcmVzZW50IGFkZHJlc3MgICAgICAgICovCisJCS8qICAgICAgMHgwMGYwICAgICAgICAgICByZWFkIGFzIDEncyAgICAgICAgICAgICovCisJCS8qICAgICAgMHgwMDBmICAgICAoUikgICBudW1iZXIgb2YgZW50cmllcyAtIDEgICovCisKKy8qIERBQ1NSICovCisKKyNkZWZpbmUgRFQyODIxX0RBRVJSCTB4ODAwMAkvKiAoUikgICBEL0EgZXJyb3IgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1lTRUwJMHgwMjAwCS8qIChSL1cpIERBQyAxIHNlbGVjdCAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfU1NFTAkweDAxMDAJLyogKFIvVykgc2luZ2xlIGNoYW5uZWwgc2VsZWN0ICAgICovCisjZGVmaW5lIERUMjgyMV9EQUNSRFkJMHgwMDgwCS8qIChSKSAgIERBQyByZWFkeSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfSURBUkRZCTB4MDA0MAkvKiAoUi9XKSBpbnRlcnJ1cHQgb24gREFDIHJlYWR5ICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ0xLCTB4MDAyMAkvKiAoUi9XKSBEL0EgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIERUMjgyMV9IQk9FCTB4MDAwMgkvKiAoUi9XKSBESU8gaGlnaCBieXRlIG91dHB1dCBlbmFibGUgICAgICAqLworI2RlZmluZSBEVDI4MjFfTEJPRQkweDAwMDEJLyogKFIvVykgRElPIGxvdyBieXRlIG91dHB1dCBlbmFibGUgICAgICAgKi8KKworLyogU1VQQ1NSICovCisKKyNkZWZpbmUgRFQyODIxX0RNQUQJMHg4MDAwCS8qIChSKSAgIERNQSBkb25lICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfRVJSSU5URU4JMHg0MDAwCS8qIChSL1cpIGludGVycnVwdCBvbiBlcnJvciAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9DTFJETUFETkUgMHgyMDAwCS8qIChXKSAgIGNsZWFyIERNQSBkb25lICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9ERE1BCTB4MTAwMAkvKiAoUi9XKSBkdWFsIERNQSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RTMQkweDA4MDAJLyogKFIvVykgRE1BIHNlbGVjdCAxICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RTMAkweDA0MDAJLyogKFIvVykgRE1BIHNlbGVjdCAwICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0JVRkZCCTB4MDIwMAkvKiAoUi9XKSBidWZmZXIgQiBzZWxlY3RlZCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfU0NETgkweDAxMDAJLyogKFIpICAgc2NhbiBkb25lICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ09OCTB4MDA4MAkvKiAoVykgICBEQUMgc2luZ2xlIGNvbnZlcnNpb24gICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfQURDSU5JVAkweDAwNDAJLyogKFcpICAgQS9EIGluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ0lOSVQJMHgwMDIwCS8qIChXKSAgIEQvQSBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9QUkxECTB4MDAxMAkvKiAoVykgICBwcmVsb2FkIG11bHRpcGxleGVyICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfU1RSSUcJMHgwMDA4CS8qIChXKSAgIHNvZnR3YXJlIHRyaWdnZXIgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfWFRSSUcJMHgwMDA0CS8qIChSL1cpIGV4dGVybmFsIHRyaWdnZXIgZW5hYmxlICAqLworI2RlZmluZSBEVDI4MjFfWENMSwkweDAwMDIJLyogKFIvVykgZXh0ZXJuYWwgY2xvY2sgZW5hYmxlICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0JESU5JVAkweDAwMDEJLyogKFcpICAgaW5pdGlhbGl6ZSBib2FyZCAgICAgICAgICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfbG9fYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfbG9fdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoLTAuNjI1LCAwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfNV91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCQlSQU5HRSgwLCAwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfaGlfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoLTAuMDIsIDAuMDIpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfaGlfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKDAsIDAuMDIpCisJfQorfTsKKworc3RydWN0IGR0MjgyeF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWRiaXRzOworCWludCBhZGNoYW5fc2U7CisJaW50IGFkY2hhbl9kaTsKKwlpbnQgYWlfc3BlZWQ7CisJaW50IGlzcGdsOworCWludCBkYWNoYW47CisJaW50IGRhYml0czsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHQyODJ4X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKyAgICAgIHtuYW1lOiJkdDI4MjEiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyMS1mIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDo2NTAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyMS1nIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDo0MDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyMyIsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZGNoYW5fc2U6MCwKKwkgICAgICBhZGNoYW5fZGk6NCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxNiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjQtcGdoIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyNC1wZ2wiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGlzcGdsOgkxLAorCSAgICAgIGRhY2hhbjoJMCwKKwkgICAgICBkYWJpdHM6CTAsCisJCX0sCisgICAgICB7bmFtZToiZHQyODI1IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBpc3BnbDoJMSwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjciLAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRjaGFuX3NlOjAsCisJICAgICAgYWRjaGFuX2RpOjQsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTIsCisJCX0sCisgICAgICB7bmFtZToiZHQyODI4IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZTo0LAorCSAgICAgIGFkY2hhbl9kaTowLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyOSIsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZGNoYW5fc2U6OCwKKwkgICAgICBhZGNoYW5fZGk6MCwKKwkgICAgICBhaV9zcGVlZDozMzI1MCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxNiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDIxLWV6IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDIzLWV6IiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MjQtZXoiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMCwKKwkgICAgICBkYWJpdHM6CTAsCisJCX0sCisgICAgICB7bmFtZToiZHQyNC1lei1wZ2wiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkxLAorCSAgICAgIGRhY2hhbjoJMCwKKwkgICAgICBkYWJpdHM6CTAsCisJCX0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyBzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBkdDI4MnhfYm9hcmQpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZHQyODJ4X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBkdDI4MnhfcHJpdmF0ZSB7CisJaW50IGFkXzJzY29tcDsJCS8qIHdlIGhhdmUgMidzIGNvbXAganVtcGVyIHNldCAgKi8KKwlpbnQgZGEwXzJzY29tcDsJCS8qIHNhbWUsIGZvciBEQUMwICAgICAgICAgICAgICAgKi8KKwlpbnQgZGExXzJzY29tcDsJCS8qIHNhbWUsIGZvciBEQUMxICAgICAgICAgICAgICAgKi8KKworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYXJhbmdlbGlzdFsyXTsKKworCXNob3J0IGFvWzJdOworCisJdm9sYXRpbGUgaW50IGRhY3NyOwkvKiBzb2Z0d2FyZSBjb3BpZXMgb2YgcmVnaXN0ZXJzICovCisJdm9sYXRpbGUgaW50IGFkY3NyOworCXZvbGF0aWxlIGludCBzdXBjc3I7CisKKwl2b2xhdGlsZSBpbnQgbnRyaWc7CisJdm9sYXRpbGUgaW50IG5yZWFkOworCisJc3RydWN0IHsKKwkJaW50IGNoYW47CisJCXNob3J0ICpidWY7CS8qIERNQSBidWZmZXIgKi8KKwkJdm9sYXRpbGUgaW50IHNpemU7CS8qIHNpemUgb2YgY3VycmVudCB0cmFuc2ZlciAqLworCX0gZG1hWzJdOworCWludCBkbWFfbWF4c2l6ZTsJLyogbWF4IHNpemUgb2YgRE1BIHRyYW5zZmVyIChpbiBieXRlcykgKi8KKwlpbnQgdXNlZG1hOwkJLyogZHJpdmVyIHVzZXMgRE1BICAgICAgICAgICAgICAqLworCXZvbGF0aWxlIGludCBjdXJyZW50X2RtYV9pbmRleDsKKwlpbnQgZG1hX2RpcjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MnhfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgYm9hcmR0eXBlICgqKGNvbnN0IHN0cnVjdCBkdDI4MnhfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyoKKyAqICAgIFNvbWUgdXNlbGVzcyBhYnN0cmFjdGlvbnMKKyAqLworI2RlZmluZSBjaGFuX3RvX0RBQyhhKQkoKGEpJjEpCisjZGVmaW5lIHVwZGF0ZV9kYWNzcihhKQlvdXR3KGRldnByaXYtPmRhY3NyfChhKSxkZXYtPmlvYmFzZStEVDI4MjFfREFDU1IpCisjZGVmaW5lIHVwZGF0ZV9hZGNzcihhKQlvdXR3KGRldnByaXYtPmFkY3NyfChhKSxkZXYtPmlvYmFzZStEVDI4MjFfQURDU1IpCisjZGVmaW5lIG11eF9idXN5KCkgKGludyhkZXYtPmlvYmFzZStEVDI4MjFfQURDU1IpJkRUMjgyMV9NVVhCVVNZKQorI2RlZmluZSBhZF9kb25lKCkgKGludyhkZXYtPmlvYmFzZStEVDI4MjFfQURDU1IpJkRUMjgyMV9BRERPTkUpCisjZGVmaW5lIHVwZGF0ZV9zdXBjc3IoYSkJb3V0dyhkZXZwcml2LT5zdXBjc3J8KGEpLGRldi0+aW9iYXNlK0RUMjgyMV9TVVBDU1IpCisKKy8qCisgKiAgICBkYW5nZXIhIG1hY3JvIGFidXNlLi4uIGEgaXMgdGhlIGV4cHJlc3Npb24gdG8gd2FpdCBvbiwgYW5kIGIgaXMKKyAqICAgICAgdGhlIHN0YXRlbWVudChzKSB0byBleGVjdXRlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuLgorICovCisjZGVmaW5lIHdhaXRfZm9yKGEsYikJIAkJCQlcCisJZG97CQkJCQkJXAorCQlpbnQgX2k7CQkJCQlcCisJCWZvcihfaT0wO19pPERUMjgyMV9USU1FT1VUO19pKyspewlcCisJCQlpZihhKXtfaT0wO2JyZWFrO30JCVwKKwkJCWNvbWVkaV91ZGVsYXkoNSk7CQkJXAorCQl9CQkJCQlcCisJCWlmKF9pKXtifQkJCQlcCisJfXdoaWxlKDApCisKK3N0YXRpYyBpbnQgZHQyODJ4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgyeF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MnggPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODJ4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MnhfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgyeF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZHQyODJ4X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODJ4KTsKKworc3RhdGljIHZvaWQgZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBwcmVwX2FpX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoYW4sIGludCBzaXplKTsKK3N0YXRpYyBpbnQgcHJlcF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IGR0MjgyeF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGR0MjgyeF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGR0MjgyeF9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKTsKK3N0YXRpYyB2b2lkIGR0MjgyeF9kaXNhYmxlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBpbnQgZHQyODJ4X2dyYWJfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hMSwgaW50IGRtYTIpOworCitzdGF0aWMgdm9pZCBkdDI4MnhfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHNob3J0ICogYnVmLAorCXVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgc2hvcnQgbWFzayA9ICgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMTsKKwl1bnNpZ25lZCBzaG9ydCBzaWduID0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCWludCBuOworCisJaWYgKGRldnByaXYtPmFkXzJzY29tcCkgeworCQlzaWduID0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCX0gZWxzZSB7CisJCXNpZ24gPSAwOworCX0KKworCWlmIChuYnl0ZXMgJSAyKQorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBvZGQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gZG1hIHhmZXIiKTsKKwluID0gbmJ5dGVzIC8gMjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWJ1ZltpXSA9IChidWZbaV0gJiBtYXNrKSBeIHNpZ247CisJfQorfQorCitzdGF0aWMgdm9pZCBkdDI4MnhfYW9fZG1hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl2b2lkICpwdHI7CisJaW50IHNpemU7CisJaW50IGk7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FKTsKKworCWlmICghcy0+YXN5bmMtPnByZWFsbG9jX2J1ZikgeworCQlwcmludGsoImFzeW5jLT5kYXRhIGRpc2FwcGVhcmVkLiAgZGFuZyFcbiIpOworCQlyZXR1cm47CisJfQorCisJaSA9IGRldnByaXYtPmN1cnJlbnRfZG1hX2luZGV4OworCXB0ciA9IGRldnByaXYtPmRtYVtpXS5idWY7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFbaV0uY2hhbik7CisKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDEgLSBpOworCisJc2l6ZSA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIHB0ciwgZGV2cHJpdi0+ZG1hX21heHNpemUpOworCWlmIChzaXplID09IDApIHsKKwkJcnRfcHJpbnRrKCJkdDI4Mng6IEFPIHVuZGVycnVuXG4iKTsKKwkJZHQyODJ4X2FvX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJcmV0dXJuOworCX0KKwlwcmVwX2FvX2RtYShkZXYsIGksIHNpemUpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2FpX2RtYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdm9pZCAqcHRyOworCWludCBzaXplOworCWludCBpOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9DTFJETUFETkUpOworCisJaWYgKCFzLT5hc3luYy0+cHJlYWxsb2NfYnVmKSB7CisJCXByaW50aygiYXN5bmMtPmRhdGEgZGlzYXBwZWFyZWQuICBkYW5nIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpID0gZGV2cHJpdi0+Y3VycmVudF9kbWFfaW5kZXg7CisJcHRyID0gZGV2cHJpdi0+ZG1hW2ldLmJ1ZjsKKwlzaXplID0gZGV2cHJpdi0+ZG1hW2ldLnNpemU7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFbaV0uY2hhbik7CisKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDEgLSBpOworCisJZHQyODJ4X211bmdlKGRldiwgcHRyLCBzaXplKTsKKwlyZXQgPSBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIHB0ciwgc2l6ZSk7CisJaWYgKHJldCAhPSBzaXplKSB7CisJCWR0MjgyeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcmV0dXJuOworCX0KKwlkZXZwcml2LT5ucmVhZCAtPSBzaXplIC8gMjsKKworCWlmIChkZXZwcml2LT5ucmVhZCA8IDApIHsKKwkJcHJpbnRrKCJkdDI4Mng6IG9mZiBieSBvbmVcbiIpOworCQlkZXZwcml2LT5ucmVhZCA9IDA7CisJfQorCWlmICghZGV2cHJpdi0+bnJlYWQpIHsKKwkJZHQyODJ4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXJldHVybjsKKwl9CisjaWYgMAorCS8qIGNsZWFyIHRoZSBkdWFsIGRtYSBmbGFnLCBtYWtpbmcgdGhpcyB0aGUgbGFzdCBkbWEgc2VnbWVudCAqLworCS8qIFhYWCBwcm9iYWJseSB3cm9uZyAqLworCWlmICghZGV2cHJpdi0+bnRyaWcpIHsKKwkJZGV2cHJpdi0+c3VwY3NyICY9IH4oRFQyODIxX0RETUEpOworCQl1cGRhdGVfc3VwY3NyKDApOworCX0KKyNlbmRpZgorCS8qIHJlc3RhcnQgdGhlIGNoYW5uZWwgKi8KKwlwcmVwX2FpX2RtYShkZXYsIGksIDApOworfQorCitzdGF0aWMgaW50IHByZXBfYWlfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hX2luZGV4LCBpbnQgbikKK3sKKwlpbnQgZG1hX2NoYW47CisJdW5zaWduZWQgbG9uZyBkbWFfcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWRldnByaXYtPm50cmlnKQorCQlyZXR1cm4gMDsKKworCWlmIChuID09IDApCisJCW4gPSBkZXZwcml2LT5kbWFfbWF4c2l6ZTsKKwlpZiAobiA+IGRldnByaXYtPm50cmlnICogMikKKwkJbiA9IGRldnByaXYtPm50cmlnICogMjsKKwlkZXZwcml2LT5udHJpZyAtPSBuIC8gMjsKKworCWRldnByaXYtPmRtYVtkbWFfaW5kZXhdLnNpemUgPSBuOworCWRtYV9jaGFuID0gZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uY2hhbjsKKwlkbWFfcHRyID0gdmlydF90b19idXMoZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uYnVmKTsKKworCXNldF9kbWFfbW9kZShkbWFfY2hhbiwgRE1BX01PREVfUkVBRCk7CisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWNsZWFyX2RtYV9mZihkbWFfY2hhbik7CisJc2V0X2RtYV9hZGRyKGRtYV9jaGFuLCBkbWFfcHRyKTsKKwlzZXRfZG1hX2NvdW50KGRtYV9jaGFuLCBuKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCWVuYWJsZV9kbWEoZG1hX2NoYW4pOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcHJlcF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBkbWFfaW5kZXgsIGludCBuKQoreworCWludCBkbWFfY2hhbjsKKwl1bnNpZ25lZCBsb25nIGRtYV9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldnByaXYtPmRtYVtkbWFfaW5kZXhdLnNpemUgPSBuOworCWRtYV9jaGFuID0gZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uY2hhbjsKKwlkbWFfcHRyID0gdmlydF90b19idXMoZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uYnVmKTsKKworCXNldF9kbWFfbW9kZShkbWFfY2hhbiwgRE1BX01PREVfV1JJVEUpOworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwljbGVhcl9kbWFfZmYoZG1hX2NoYW4pOworCXNldF9kbWFfYWRkcihkbWFfY2hhbiwgZG1hX3B0cik7CisJc2V0X2RtYV9jb3VudChkbWFfY2hhbiwgbik7CisJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisKKwllbmFibGVfZG1hKGRtYV9jaGFuKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZHQyODJ4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzX2FvOworCXVuc2lnbmVkIGludCBzdXBjc3IsIGFkY3NyLCBkYWNzcjsKKwlpbnQgaGFuZGxlZCA9IDA7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc19hbyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJYWRjc3IgPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpOworCWRhY3NyID0gaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0RBQ1NSKTsKKwlzdXBjc3IgPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfU1VQQ1NSKTsKKwlpZiAoc3VwY3NyICYgRFQyODIxX0RNQUQpIHsKKwkJaWYgKGRldnByaXYtPmRtYV9kaXIgPT0gRE1BX01PREVfUkVBRCkKKwkJCWR0MjgyeF9haV9kbWFfaW50ZXJydXB0KGRldik7CisJCWVsc2UKKwkJCWR0MjgyeF9hb19kbWFfaW50ZXJydXB0KGRldik7CisJCWhhbmRsZWQgPSAxOworCX0KKwlpZiAoYWRjc3IgJiBEVDI4MjFfQURFUlIpIHsKKwkJaWYgKGRldnByaXYtPm5yZWFkICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgZXJyb3IiKTsKKwkJCWR0MjgyeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQl9CisJCWhhbmRsZWQgPSAxOworCX0KKwlpZiAoZGFjc3IgJiBEVDI4MjFfREFFUlIpIHsKKyNpZiAwCisJCXN0YXRpYyBpbnQgd2FybiA9IDU7CisJCWlmICgtLXdhcm4gPD0gMCkgeworCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCQkJcHJpbnRrKCJkaXNhYmxpbmcgaXJxXG4iKTsKKwkJfQorI2VuZGlmCisJCWNvbWVkaV9lcnJvcihkZXYsICJEL0EgZXJyb3IiKTsKKwkJZHQyODJ4X2FvX2NhbmNlbChkZXYsIHNfYW8pOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJaGFuZGxlZCA9IDE7CisJfQorI2lmIDAKKwlpZiAoYWRjc3IgJiBEVDI4MjFfQURET05FKSB7CisJCWludCByZXQ7CisJCXNob3J0IGRhdGE7CisKKwkJZGF0YSA9IChzaG9ydCkgaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0FEREFUKTsKKwkJZGF0YSAmPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJCWlmIChkZXZwcml2LT5hZF8yc2NvbXApIHsKKwkJCWRhdGEgXj0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCQl9CisJCXJldCA9IGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkYXRhKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJfQorCisJCWRldnByaXYtPm5yZWFkLS07CisJCWlmICghZGV2cHJpdi0+bnJlYWQpIHsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdXBjc3IgJiBEVDI4MjFfU0NETikKKwkJCQl1cGRhdGVfc3VwY3NyKERUMjgyMV9TVFJJRyk7CisJCX0KKwkJaGFuZGxlZCA9IDE7CisJfQorI2VuZGlmCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJLyogcHJpbnRrKCJhZGNzcj0weCUwMnggZGFjc3ItMHglMDJ4IHN1cGNzcj0weCUwMnhcbiIsIGFkY3NyLCBkYWNzciwgc3VwY3NyKTsgKi8KKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2xvYWRfY2hhbmdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBuLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlOworCisJb3V0dyhEVDI4MjFfTExFIHwgKG4gLSAxKSwgZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQ0hBTkNTUik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljaGFuID0gQ1JfQ0hBTihjaGFubGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UoY2hhbmxpc3RbaV0pOworCQl1cGRhdGVfYWRjc3IoKHJhbmdlIDw8IDQpIHwgKGNoYW4pKTsKKwl9CisJb3V0dyhuIC0gMSwgZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQ0hBTkNTUik7Cit9CisKKy8qCisgKiAgICBQZXJmb3JtcyBhIHNpbmdsZSBBL0QgY29udmVyc2lvbi4KKyAqICAgICAgLSBQdXQgY2hhbm5lbC9nYWluIGludG8gY2hhbm5lbC1nYWluIGxpc3QKKyAqICAgICAgLSBwcmVsb2FkIG11bHRpcGxleGVyCisgKiAgICAgIC0gdHJpZ2dlciBjb252ZXJzaW9uIGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2gKKyAqLworc3RhdGljIGludCBkdDI4MnhfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCS8qIFhYWCBzaG91bGQgd2UgcmVhbGx5IGJlIGVuYWJsaW5nIHRoZSBhZCBjbG9jayBoZXJlPyAqLworCWRldnByaXYtPmFkY3NyID0gRFQyODIxX0FEQ0xLOworCXVwZGF0ZV9hZGNzcigwKTsKKworCWR0MjgyeF9sb2FkX2NoYW5nYWluKGRldiwgMSwgJmluc24tPmNoYW5zcGVjKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1BSTEQpOworCXdhaXRfZm9yKCFtdXhfYnVzeSgpLCBjb21lZGlfZXJyb3IoZGV2LCAidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUU7CisJCSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1NUUklHKTsKKwkJd2FpdF9mb3IoYWRfZG9uZSgpLCBjb21lZGlfZXJyb3IoZGV2LCAidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FOworCQkJKTsKKworCQlkYXRhW2ldID0KKwkJCWludyhkZXYtPmlvYmFzZSArCisJCQlEVDI4MjFfQUREQVQpICYgKCgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMSk7CisJCWlmIChkZXZwcml2LT5hZF8yc2NvbXApCisJCQlkYXRhW2ldIF49ICgxIDw8IChib2FyZHR5cGUuYWRiaXRzIC0gMSkpOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CisJCS8qIGludGVybmFsIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgNDAwMCkgeworCQkvKiBYWFggYm9hcmQgZGVwZW5kZW50ICovCisJCWNtZC0+Y29udmVydF9hcmcgPSA0MDAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIFNMT1dFU1RfVElNRVIJKDI1MCooMTw8MTUpKjI1NSkKKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IFNMT1dFU1RfVElNRVIpIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IFNMT1dFU1RfVElNRVI7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX3NwZWVkKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9zcGVlZDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkvKiBhbnkgY291bnQgaXMgYWxsb3dlZCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCWR0MjgyeF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgdGltZXI7CisKKwlpZiAoZGV2cHJpdi0+dXNlZG1hID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJkcml2ZXIgcmVxdWlyZXMgMiBkbWEgY2hhbm5lbHMgdG8gZXhlY3V0ZSBjb21tYW5kIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWR0MjgyeF9kaXNhYmxlX2RtYShkZXYpOworCisJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9zcGVlZCkKKwkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX3NwZWVkOworCXRpbWVyID0gZHQyODJ4X25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLCBUUklHX1JPVU5EX05FQVJFU1QpOworCW91dHcodGltZXIsIGRldi0+aW9iYXNlICsgRFQyODIxX1RNUkNUUik7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWRldnByaXYtPnN1cGNzciA9IERUMjgyMV9FUlJJTlRFTiB8IERUMjgyMV9EUzA7CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQlkZXZwcml2LT5zdXBjc3IgPSBEVDI4MjFfRVJSSU5URU4gfCBEVDI4MjFfRFMwIHwgRFQyODIxX0RTMTsKKwl9CisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FIHwgRFQyODIxX0JVRkZCIHwgRFQyODIxX0FEQ0lOSVQpOworCisJZGV2cHJpdi0+bnRyaWcgPSBjbWQtPnN0b3BfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJZGV2cHJpdi0+bnJlYWQgPSBkZXZwcml2LT5udHJpZzsKKworCWRldnByaXYtPmRtYV9kaXIgPSBETUFfTU9ERV9SRUFEOworCWRldnByaXYtPmN1cnJlbnRfZG1hX2luZGV4ID0gMDsKKwlwcmVwX2FpX2RtYShkZXYsIDAsIDApOworCWlmIChkZXZwcml2LT5udHJpZykgeworCQlwcmVwX2FpX2RtYShkZXYsIDEsIDApOworCQlkZXZwcml2LT5zdXBjc3IgfD0gRFQyODIxX0RETUE7CisJCXVwZGF0ZV9zdXBjc3IoMCk7CisJfQorCisJZGV2cHJpdi0+YWRjc3IgPSAwOworCisJZHQyODJ4X2xvYWRfY2hhbmdhaW4oZGV2LCBjbWQtPmNoYW5saXN0X2xlbiwgY21kLT5jaGFubGlzdCk7CisKKwlkZXZwcml2LT5hZGNzciA9IERUMjgyMV9BRENMSyB8IERUMjgyMV9JQURET05FOworCXVwZGF0ZV9hZGNzcigwKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1BSTEQpOworCXdhaXRfZm9yKCFtdXhfYnVzeSgpLCBjb21lZGlfZXJyb3IoZGV2LCAidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUU7CisJCSk7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQl1cGRhdGVfc3VwY3NyKERUMjgyMV9TVFJJRyk7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+c3VwY3NyIHw9IERUMjgyMV9YVFJJRzsKKwkJdXBkYXRlX3N1cGNzcigwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2Rpc2FibGVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXZwcml2LT51c2VkbWEpIHsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hWzBdLmNoYW4pOworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFbMV0uY2hhbik7CisJfQorfQorCitzdGF0aWMgaW50IGR0MjgyeF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkdDI4MnhfZGlzYWJsZV9kbWEoZGV2KTsKKworCWRldnByaXYtPmFkY3NyID0gMDsKKwl1cGRhdGVfYWRjc3IoMCk7CisKKwlkZXZwcml2LT5zdXBjc3IgPSAwOworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0FEQ0lOSVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X25zX3RvX3RpbWVyKGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpCit7CisJaW50IHByZXNjYWxlLCBiYXNlLCBkaXZpZGVyOworCisJZm9yIChwcmVzY2FsZSA9IDA7IHByZXNjYWxlIDwgMTY7IHByZXNjYWxlKyspIHsKKwkJaWYgKHByZXNjYWxlID09IDEpCisJCQljb250aW51ZTsKKwkJYmFzZSA9IDI1MCAqICgxIDw8IHByZXNjYWxlKTsKKwkJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQlkZWZhdWx0OgorCQkJZGl2aWRlciA9ICgqbmFub3NlYyArIGJhc2UgLyAyKSAvIGJhc2U7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkaXZpZGVyID0gKCpuYW5vc2VjKSAvIGJhc2U7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJZGl2aWRlciA9ICgqbmFub3NlYyArIGJhc2UgLSAxKSAvIGJhc2U7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGl2aWRlciA8IDI1NikgeworCQkJKm5hbm9zZWMgPSBkaXZpZGVyICogYmFzZTsKKwkJCXJldHVybiAocHJlc2NhbGUgPDwgOCkgfCAoMjU1IC0gZGl2aWRlcik7CisJCX0KKwl9CisJYmFzZSA9IDI1MCAqICgxIDw8IDE1KTsKKwlkaXZpZGVyID0gMjU1OworCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJcmV0dXJuICgxNSA8PCA4KSB8ICgyNTUgLSBkaXZpZGVyKTsKK30KKworLyoKKyAqICAgIEFuYWxvZyBvdXRwdXQgcm91dGluZS4gIFNlbGVjdHMgc2luZ2xlIGNoYW5uZWwgY29udmVyc2lvbiwKKyAqICAgICAgc2VsZWN0cyBjb3JyZWN0IGNoYW5uZWwsIGNvbnZlcnRzIGZyb20gMidzIGNvbXBsaW1lbnQgdG8KKyAqICAgICAgb2Zmc2V0IGJpbmFyeSBpZiBuZWNlc3NhcnksIGxvYWRzIHRoZSBkYXRhIGludG8gdGhlIERBQworICogICAgICBkYXRhIHJlZ2lzdGVyLCBhbmQgcGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCisgKi8KK3N0YXRpYyBpbnQgZHQyODJ4X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmFvW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzaG9ydCBkOworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWQgPSBkYXRhWzBdOworCWQgJj0gKDEgPDwgYm9hcmR0eXBlLmRhYml0cykgLSAxOworCWRldnByaXYtPmFvW2NoYW5dID0gZDsKKworCWRldnByaXYtPmRhY3NyIHw9IERUMjgyMV9TU0VMOworCisJaWYgKGNoYW4pIHsKKwkJLyogc2VsZWN0IGNoYW5uZWwgKi8KKwkJZGV2cHJpdi0+ZGFjc3IgfD0gRFQyODIxX1lTRUw7CisJCWlmIChkZXZwcml2LT5kYTBfMnNjb21wKQorCQkJZCBePSAoMSA8PCAoYm9hcmR0eXBlLmRhYml0cyAtIDEpKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kYWNzciAmPSB+RFQyODIxX1lTRUw7CisJCWlmIChkZXZwcml2LT5kYTFfMnNjb21wKQorCQkJZCBePSAoMSA8PCAoYm9hcmR0eXBlLmRhYml0cyAtIDEpKTsKKwl9CisKKwl1cGRhdGVfZGFjc3IoMCk7CisKKwlvdXR3KGQsIGRldi0+aW9iYXNlICsgRFQyODIxX0RBREFUKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0RBQ09OKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX0lOVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgNTAwMCAvKiBYWFggdW5rbm93biAqLyApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDUwMDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnID4gMikgeworCQkvKiBYWFggY2hhbmxpc3Qgc3R1ZmY/ICovCisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJLyogYW55IGNvdW50IGlzIGFsbG93ZWQgKi8KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlkdDI4MnhfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgeCkKK3sKKwlpbnQgc2l6ZTsKKworCWlmICh4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc2l6ZSA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIGRldnByaXYtPmRtYVswXS5idWYsCisJCWRldnByaXYtPmRtYV9tYXhzaXplKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXJ0X3ByaW50aygiZHQyODJ4OiBBTyB1bmRlcnJ1blxuIik7CisJCXJldHVybiAtRVBJUEU7CisJfQorCXByZXBfYW9fZG1hKGRldiwgMCwgc2l6ZSk7CisKKwlzaXplID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIocywgZGV2cHJpdi0+ZG1hWzFdLmJ1ZiwKKwkJZGV2cHJpdi0+ZG1hX21heHNpemUpOworCWlmIChzaXplID09IDApIHsKKwkJcnRfcHJpbnRrKCJkdDI4Mng6IEFPIHVuZGVycnVuXG4iKTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisJcHJlcF9hb19kbWEoZGV2LCAxLCBzaXplKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1NUUklHKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MnhfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IHRpbWVyOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWlmIChkZXZwcml2LT51c2VkbWEgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImRyaXZlciByZXF1aXJlcyAyIGRtYSBjaGFubmVscyB0byBleGVjdXRlIGNvbW1hbmQiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZHQyODJ4X2Rpc2FibGVfZG1hKGRldik7CisKKwlkZXZwcml2LT5zdXBjc3IgPSBEVDI4MjFfRVJSSU5URU4gfCBEVDI4MjFfRFMxIHwgRFQyODIxX0RETUE7CisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FIHwgRFQyODIxX0JVRkZCIHwgRFQyODIxX0RBQ0lOSVQpOworCisJZGV2cHJpdi0+bnRyaWcgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+bnJlYWQgPSBkZXZwcml2LT5udHJpZzsKKworCWRldnByaXYtPmRtYV9kaXIgPSBETUFfTU9ERV9XUklURTsKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDA7CisKKwl0aW1lciA9IGR0MjgyeF9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywgVFJJR19ST1VORF9ORUFSRVNUKTsKKwlvdXR3KHRpbWVyLCBkZXYtPmlvYmFzZSArIERUMjgyMV9UTVJDVFIpOworCisJZGV2cHJpdi0+ZGFjc3IgPSBEVDI4MjFfU1NFTCB8IERUMjgyMV9EQUNMSyB8IERUMjgyMV9JREFSRFk7CisJdXBkYXRlX2RhY3NyKDApOworCisJcy0+YXN5bmMtPmludHRyaWcgPSBkdDI4MnhfYW9faW50dHJpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkdDI4MnhfZGlzYWJsZV9kbWEoZGV2KTsKKworCWRldnByaXYtPmRhY3NyID0gMDsKKwl1cGRhdGVfZGFjc3IoMCk7CisKKwlkZXZwcml2LT5zdXBjc3IgPSAwOworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0RBQ0lOSVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgRFQyODIxX0RJT0RBVCk7CisJfQorCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfRElPREFUKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBtYXNrOworCisJbWFzayA9IChDUl9DSEFOKGluc24tPmNoYW5zcGVjKSA8IDgpID8gMHgwMGZmIDogMHhmZjAwOworCWlmIChkYXRhWzBdKQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJZWxzZQorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCisJaWYgKHMtPmlvX2JpdHMgJiAweDAwZmYpCisJCWRldnByaXYtPmRhY3NyIHw9IERUMjgyMV9MQk9FOworCWVsc2UKKwkJZGV2cHJpdi0+ZGFjc3IgJj0gfkRUMjgyMV9MQk9FOworCWlmIChzLT5pb19iaXRzICYgMHhmZjAwKQorCQlkZXZwcml2LT5kYWNzciB8PSBEVDI4MjFfSEJPRTsKKwllbHNlCisJCWRldnByaXYtPmRhY3NyICY9IH5EVDI4MjFfSEJPRTsKKworCW91dHcoZGV2cHJpdi0+ZGFjc3IsIGRldi0+aW9iYXNlICsgRFQyODIxX0RBQ1NSKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IGFpX3JhbmdlX3RhYmxlW10gPSB7CisJJnJhbmdlX2R0MjgyeF9haV9sb19iaXBvbGFyLAorCSZyYW5nZV9kdDI4MnhfYWlfbG9fdW5pcG9sYXIsCisJJnJhbmdlX2R0MjgyeF9haV81X2JpcG9sYXIsCisJJnJhbmdlX2R0MjgyeF9haV81X3VuaXBvbGFyCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCBhaV9yYW5nZV9wZ2xfdGFibGVbXSA9IHsKKwkmcmFuZ2VfZHQyODJ4X2FpX2hpX2JpcG9sYXIsCisJJnJhbmdlX2R0MjgyeF9haV9oaV91bmlwb2xhcgorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqb3B0X2FpX3JhbmdlX2xrdXAoaW50IGlzcGdsLCBpbnQgeCkKK3sKKwlpZiAoaXNwZ2wpIHsKKwkJaWYgKHggPCAwIHx8IHggPj0gMikKKwkJCXggPSAwOworCQlyZXR1cm4gYWlfcmFuZ2VfcGdsX3RhYmxlW3hdOworCX0gZWxzZSB7CisJCWlmICh4IDwgMCB8fCB4ID49IDQpCisJCQl4ID0gMDsKKwkJcmV0dXJuIGFpX3JhbmdlX3RhYmxlW3hdOworCX0KK30KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgYW9fcmFuZ2VfdGFibGVbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV91bmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfdW5pcG9sYXI1LAorCSZyYW5nZV9iaXBvbGFyMl81Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpvcHRfYW9fcmFuZ2VfbGt1cChpbnQgeCkKK3sKKwlpZiAoeCA8IDAgfHwgeCA+PSA1KQorCQl4ID0gMDsKKwlyZXR1cm4gYW9fcmFuZ2VfdGFibGVbeF07Cit9CisKK2VudW0geyBvcHRfaW9iYXNlID0gMCwgb3B0X2lycSwgb3B0X2RtYTEsIG9wdF9kbWEyLAkvKiBpL28gYmFzZSwgaXJxLCBkbWEgY2hhbm5lbHMgKi8KKwlvcHRfZGlmZiwJCS8qIGRpZmZlcmVudGlhbCAqLworCW9wdF9haV90d29zLCBvcHRfYW8wX3R3b3MsIG9wdF9hbzFfdHdvcywJLyogdHdvcyBjb21wICovCisJb3B0X2FpX3JhbmdlLCBvcHRfYW8wX3JhbmdlLCBvcHRfYW8xX3JhbmdlLAkvKiByYW5nZSAqLworfTsKKworLyoKKyAgIG9wdGlvbnM6CisgICAwCWkvbyBiYXNlCisgICAxCWlycQorICAgMglkbWExCisgICAzCWRtYTIKKyAgIDQJMD1zaW5nbGUgZW5kZWQsIDE9ZGlmZmVyZW50aWFsCisgICA1CWFpIDA9c3RyYWlnaHQgYmluYXJ5LCAxPTIncyBjb21wCisgICA2CWFvMCAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcAorICAgNwlhbzEgMD1zdHJhaWdodCBiaW5hcnksIDE9MidzIGNvbXAKKyAgIDgJYWkgMD3CsTEwIFYsIDE9MC0xMCBWLCAyPcKxNSBWLCAzPTAtNSBWCisgICA5CWFvMCAwPcKxMTAgViwgMT0wLTEwIFYsIDI9wrE1IFYsIDM9MC01IFYsIDQ9wrEyLjUgVgorICAgMTAJYW8xIDA9wrExMCBWLCAxPTAtMTAgViwgMj3CsTUgViwgMz0wLTUgViwgND3CsTIuNSBWCisgKi8KK3N0YXRpYyBpbnQgZHQyODJ4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgaSwgaXJxOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbb3B0X2lvYmFzZV07CisJaWYgKCFpb2Jhc2UpCisJCWlvYmFzZSA9IDB4MjQwOworCisJcHJpbnRrKCJjb21lZGklZDogZHQyODJ4OiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODIxX1NJWkUsICJkdDI4MngiKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJb3V0dyhEVDI4MjFfQkRJTklULCBkZXYtPmlvYmFzZSArIERUMjgyMV9TVVBDU1IpOworCWkgPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpOworI2lmZGVmIERFQlVHCisJcHJpbnRrKCIgZmluZ2VycHJpbnQ9JXgsJXgsJXgsJXgsJXgiLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQ0hBTkNTUiksCisJCWludyhkZXYtPmlvYmFzZSArIERUMjgyMV9EQUNTUiksCisJCWludyhkZXYtPmlvYmFzZSArIERUMjgyMV9TVVBDU1IpLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfVE1SQ1RSKSk7CisjZW5kaWYKKworCWlmICgoKGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9BRENTUikgJiBEVDI4MjFfQURDU1JfTUFTSykKKwkJCSE9IERUMjgyMV9BRENTUl9WQUwpIHx8CisJCSgoaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0NIQU5DU1IpICYgRFQyODIxX0NIQU5DU1JfTUFTSykKKwkJCSE9IERUMjgyMV9DSEFOQ1NSX1ZBTCkgfHwKKwkJKChpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfREFDU1IpICYgRFQyODIxX0RBQ1NSX01BU0spCisJCQkhPSBEVDI4MjFfREFDU1JfVkFMKSB8fAorCQkoKGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9TVVBDU1IpICYgRFQyODIxX1NVUENTUl9NQVNLKQorCQkJIT0gRFQyODIxX1NVUENTUl9WQUwpIHx8CisJCSgoaW53KGRldi0+aW9iYXNlICsgRFQyODIxX1RNUkNUUikgJiBEVDI4MjFfVE1SQ1RSX01BU0spCisJCQkhPSBEVDI4MjFfVE1SQ1RSX1ZBTCkpIHsKKwkJcHJpbnRrKCIgYm9hcmQgbm90IGZvdW5kIik7CisJCXJldHVybiAtRUlPOworCX0KKwkvKiBzaG91bGQgZG8gYm9hcmQgdGVzdCAqLworCisJaXJxID0gaXQtPm9wdGlvbnNbb3B0X2lycV07CisjaWYgMAorCWlmIChpcnEgPCAwKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBpcnFzOworCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQlzdGkoKTsKKwkJaXJxcyA9IHByb2JlX2lycV9vbigpOworCisJCS8qIHRyaWdnZXIgaW50ZXJydXB0ICovCisKKwkJY29tZWRpX3VkZWxheSgxMDApOworCisJCWlycSA9IHByb2JlX2lycV9vZmYoaXJxcyk7CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlpZiAoMCAvKiBlcnJvciAqLyApIHsKKwkJCXByaW50aygiIGVycm9yIHByb2JpbmcgaXJxIChiYWQpIik7CisJCX0KKwl9CisjZW5kaWYKKwlpZiAoaXJxID4gMCkgeworCQlwcmludGsoIiAoIGlycSA9ICVkICkiLCBpcnEpOworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkdDI4MnhfaW50ZXJydXB0LCAwLCAiZHQyODJ4IiwKKwkJCWRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoIiBmYWlsZWQgdG8gZ2V0IGlycVxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9IGVsc2UgaWYgKGlycSA9PSAwKSB7CisJCXByaW50aygiIChubyBpcnEpIik7CisJfSBlbHNlIHsKKyNpZiAwCisJCXByaW50aygiIChwcm9iZSByZXR1cm5lZCBtdWx0aXBsZSBpcnFzLS1iYWQpIik7CisjZWxzZQorCQlwcmludGsoIiAoaXJxIHByb2JlIG5vdCBpbXBsZW1lbnRlZCkiKTsKKyNlbmRpZgorCX0KKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODJ4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZHQyODJ4X2dyYWJfZG1hKGRldiwgaXQtPm9wdGlvbnNbb3B0X2RtYTFdLAorCQlpdC0+b3B0aW9uc1tvcHRfZG1hMl0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRCB8CisJCSgoaXQtPm9wdGlvbnNbb3B0X2RpZmZdKSA/IFNERl9ESUZGIDogU0RGX0NPTU1PTik7CisJcy0+bl9jaGFuID0KKwkJKGl0LT5vcHRpb25zW29wdF9kaWZmXSkgPyBib2FyZHR5cGUuYWRjaGFuX2RpIDogYm9hcmR0eXBlLgorCQlhZGNoYW5fc2U7CisJcy0+aW5zbl9yZWFkID0gZHQyODJ4X2FpX2luc25fcmVhZDsKKwlzLT5kb19jbWR0ZXN0ID0gZHQyODJ4X2FpX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gZHQyODJ4X2FpX2NtZDsKKwlzLT5jYW5jZWwgPSBkdDI4MnhfYWlfY2FuY2VsOworCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+cmFuZ2VfdGFibGUgPQorCQlvcHRfYWlfcmFuZ2VfbGt1cChib2FyZHR5cGUuaXNwZ2wsIGl0LT5vcHRpb25zW29wdF9haV9yYW5nZV0pOworCWRldnByaXYtPmFkXzJzY29tcCA9IGl0LT5vcHRpb25zW29wdF9haV90d29zXTsKKworCXMrKzsKKwlpZiAoKHMtPm5fY2hhbiA9IGJvYXJkdHlwZS5kYWNoYW4pKSB7CisJCS8qIGFvIHN1YnN5c3RlbSAqLworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0NNRF9XUklURTsKKwkJcy0+aW5zbl9yZWFkID0gZHQyODJ4X2FvX2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IGR0MjgyeF9hb19pbnNuX3dyaXRlOworCQlzLT5kb19jbWR0ZXN0ID0gZHQyODJ4X2FvX2NtZHRlc3Q7CisJCXMtPmRvX2NtZCA9IGR0MjgyeF9hb19jbWQ7CisJCXMtPmNhbmNlbCA9IGR0MjgyeF9hb19jYW5jZWw7CisJCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZHR5cGUuZGFiaXRzKSAtIDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IDI7CisJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5kYXJhbmdlbGlzdDsKKwkJZGV2cHJpdi0+ZGFyYW5nZWxpc3RbMF0gPQorCQkJb3B0X2FvX3JhbmdlX2xrdXAoaXQtPm9wdGlvbnNbb3B0X2FvMF9yYW5nZV0pOworCQlkZXZwcml2LT5kYXJhbmdlbGlzdFsxXSA9CisJCQlvcHRfYW9fcmFuZ2VfbGt1cChpdC0+b3B0aW9uc1tvcHRfYW8xX3JhbmdlXSk7CisJCWRldnByaXYtPmRhMF8yc2NvbXAgPSBpdC0+b3B0aW9uc1tvcHRfYW8wX3R3b3NdOworCQlkZXZwcml2LT5kYTFfMnNjb21wID0gaXQtPm9wdGlvbnNbb3B0X2FvMV90d29zXTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMrKzsKKwkvKiBkaW8gc3Vic3lzdGVtICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gZHQyODJ4X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MnhfZGlvX2luc25fY29uZmlnOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRFQyODIxX1NJWkUpOworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPmRtYVswXS5jaGFuKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hWzBdLmNoYW4pOworCQlpZiAoZGV2cHJpdi0+ZG1hWzFdLmNoYW4pCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWFbMV0uY2hhbik7CisJCWlmIChkZXZwcml2LT5kbWFbMF0uYnVmKQorCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRldnByaXYtPmRtYVswXS5idWYpOworCQlpZiAoZGV2cHJpdi0+ZG1hWzFdLmJ1ZikKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkZXZwcml2LT5kbWFbMV0uYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4Mng6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlmcmVlX3Jlc291cmNlcyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2dyYWJfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hMSwgaW50IGRtYTIpCit7CisJaW50IHJldDsKKworCWRldnByaXYtPnVzZWRtYSA9IDA7CisKKwlpZiAoIWRtYTEgJiYgIWRtYTIpIHsKKwkJcHJpbnRrKCIgKG5vIGRtYSkiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRtYTEgPT0gZG1hMiB8fCBkbWExIDwgNSB8fCBkbWEyIDwgNSB8fCBkbWExID4gNyB8fCBkbWEyID4gNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG1hMiA8IGRtYTEpIHsKKwkJaW50IGk7CisJCWkgPSBkbWExOworCQlkbWExID0gZG1hMjsKKwkJZG1hMiA9IGk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9kbWEoZG1hMSwgImR0MjgyeCBBIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlkZXZwcml2LT5kbWFbMF0uY2hhbiA9IGRtYTE7CisKKwlyZXQgPSByZXF1ZXN0X2RtYShkbWEyLCAiZHQyODJ4IEIiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVCVVNZOworCWRldnByaXYtPmRtYVsxXS5jaGFuID0gZG1hMjsKKworCWRldnByaXYtPmRtYV9tYXhzaXplID0gUEFHRV9TSVpFOworCWRldnByaXYtPmRtYVswXS5idWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJZGV2cHJpdi0+ZG1hWzFdLmJ1ZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWRldnByaXYtPmRtYVswXS5idWYgfHwgIWRldnByaXYtPmRtYVsxXS5idWYpIHsKKwkJcHJpbnRrKCIgY2FuJ3QgZ2V0IERNQSBtZW1vcnkiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpbnRrKCIgKGRtYT0lZCwlZCkiLCBkbWExLCBkbWEyKTsKKworCWRldnByaXYtPnVzZWRtYSA9IDE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQ2Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCkBAIC0wLDAgKzEsOTgzIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCisgICAgRGF0YSBUcmFuc2xhdGlvbiBEVDMwMDAgc2VyaWVzIGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogZHQzMDAwCitEZXNjcmlwdGlvbjogRGF0YSBUcmFuc2xhdGlvbiBEVDMwMDAgc2VyaWVzCitBdXRob3I6IGRzCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQzMDAxIChkdDMwMDApLCBEVDMwMDEtUEdMLCBEVDMwMDIsIERUMzAwMywKKyAgRFQzMDAzLVBHTCwgRFQzMDA0LCBEVDMwMDUsIERUMzAwNC0yMDAKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6NDE6MjQgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisKK1RoZXJlIGlzIGNvZGUgdG8gc3VwcG9ydCBBSSBjb21tYW5kcywgYnV0IGl0IG1heSBub3Qgd29yay4KKworQU8gY29tbWFuZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisqLworCisvKgorICAgVGhlIERUMzAwMCBzZXJpZXMgaXMgRGF0YSBUcmFuc2xhdGlvbidzIGF0dGVtcHQgdG8gbWFrZSBhIFBDSQorICAgZGF0YSBhY3F1aXNpdGlvbiBib2FyZC4gIFRoZSBkZXNpZ24gb2YgdGhpcyBzZXJpZXMgaXMgdmVyeSBuaWNlLAorICAgc2luY2UgZWFjaCBib2FyZCBoYXMgYW4gb24tYm9hcmQgRFNQIChUZXhhcyBJbnN0cnVtZW50cyBUTVMzMjBDNTIpLgorICAgSG93ZXZlciwgYSBmZXcgZGV0YWlscyBhcmUgYSBsaXR0bGUgYW5ub3lpbmcuICBUaGUgYm9hcmRzIGxhY2sKKyAgIGJ1cy1tYXN0ZXJpbmcgRE1BLCB3aGljaCBlbGltaW5hdGVzIHRoZW0gZnJvbSBzZXJpb3VzIHdvcmsuCisgICBUaGV5IGFsc28gYXJlIG5vdCBjYXBhYmxlIG9mIGF1dG9jYWxpYnJhdGlvbiwgd2hpY2ggaXMgYSBjb21tb24KKyAgIGZlYXR1cmUgaW4gbW9kZXJuIGhhcmR3YXJlLiAgVGhlIGRlZmF1bHQgZmlybXdhcmUgaXMgcHJldHR5IGJhZCwKKyAgIG1ha2luZyBpdCBuZWFybHkgaW1wb3NzaWJsZSB0byB3cml0ZSBhbiBSVCBjb21wYXRpYmxlIGRyaXZlci4KKyAgIEl0IHdvdWxkIG1ha2UgYW4gaW50ZXJlc3RpbmcgcHJvamVjdCB0byB3cml0ZSBhIGRlY2VudCBmaXJtd2FyZQorICAgZm9yIHRoZXNlIGJvYXJkcy4KKworICAgRGF0YSBUcmFuc2xhdGlvbiBvcmlnaW5hbGx5IHdhbnRlZCBhbiBOREEgZm9yIHRoZSBkb2N1bWVudGF0aW9uCisgICBmb3IgdGhlIDNrIHNlcmllcy4gIEhvd2V2ZXIsIGlmIHlvdSBhc2sgbmljZWx5LCB0aGV5IG1pZ2h0IHNlbmQKKyAgIHlvdSB0aGUgZG9jcyB3aXRob3V0IG9uZSwgYWxzby4KKyovCisKKyNkZWZpbmUgREVCVUcgMQorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RUCTB4MTExNgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQzMDAwX2FpID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MzAwMF9haV9wZ2wgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTEsIDEpLAorCQkJUkFOR0UoLTAuMSwgMC4xKSwKKwkJCVJBTkdFKC0wLjAyLCAwLjAyKQorCX0KK307CisKK3N0cnVjdCBkdDNrX2JvYXJkdHlwZSB7CisKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CisJaW50IGFkY2hhbjsKKwlpbnQgYWRiaXRzOworCWludCBhaV9zcGVlZDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWRyYW5nZTsKKwlpbnQgZGFjaGFuOworCWludCBkYWJpdHM7Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHQza19ib2FyZHR5cGUgZHQza19ib2FyZHR5cGVzW10gPSB7CisgICAgICB7bmFtZToiZHQzMDAxIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyMiwKKwkgICAgICBhZGNoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haSwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwMS1wZ2wiLAorCSAgICAgIGRldmljZV9pZDoweDI3LAorCSAgICAgIGFkY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdlOgkmcmFuZ2VfZHQzMDAwX2FpX3BnbCwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwMiIsCisJICAgICAgZGV2aWNlX2lkOjB4MjMsCisJICAgICAgYWRjaGFuOgkzMiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWksCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwMyIsCisJICAgICAgZGV2aWNlX2lkOjB4MjQsCisJICAgICAgYWRjaGFuOgk2NCwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWksCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDMtcGdsIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyOCwKKwkgICAgICBhZGNoYW46CTY0LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haV9wZ2wsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDQiLAorCSAgICAgIGRldmljZV9pZDoweDI1LAorCSAgICAgIGFkY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZHJhbmdlOgkmcmFuZ2VfZHQzMDAwX2FpLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwNSIsCQkvKiBhLmsuYS4gMzAwNC0yMDAgKi8KKwkgICAgICBkZXZpY2VfaWQ6MHgyNiwKKwkgICAgICBhZGNoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haSwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorfTsKKworI2RlZmluZSBuX2R0M2tfYm9hcmRzIHNpemVvZihkdDNrX2JvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgZHQza19ib2FyZHR5cGUpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZHQza19ib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGR0M2tfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkdDNrX3BjaV90YWJsZSk7CisKKyNkZWZpbmUgRFQzMDAwX1NJWkUJCSg0KjB4MTAwMCkKKworLyogZHVhbC1wb3J0ZWQgUkFNIGxvY2F0aW9uIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgRFBSX0RBQ19idWZmZXIJCSg0KjB4MDAwKQorI2RlZmluZSBEUFJfQURDX2J1ZmZlcgkJKDQqMHg4MDApCisjZGVmaW5lIERQUl9Db21tYW5kCQkoNCoweGZkMykKKyNkZWZpbmUgRFBSX1N1YlN5cwkJKDQqMHhmZDMpCisjZGVmaW5lIERQUl9FbmNvZGUJCSg0KjB4ZmQ0KQorI2RlZmluZSBEUFJfUGFyYW1zKGEpCQkoNCooMHhmZDUrKGEpKSkKKyNkZWZpbmUgRFBSX1RpY2tfUmVnX0xvCQkoNCoweGZmNSkKKyNkZWZpbmUgRFBSX1RpY2tfUmVnX0hpCQkoNCoweGZmNikKKyNkZWZpbmUgRFBSX0RBX0J1Zl9Gcm9udAkoNCoweGZmNykKKyNkZWZpbmUgRFBSX0RBX0J1Zl9SZWFyCQkoNCoweGZmOCkKKyNkZWZpbmUgRFBSX0FEX0J1Zl9Gcm9udAkoNCoweGZmOSkKKyNkZWZpbmUgRFBSX0FEX0J1Zl9SZWFyCQkoNCoweGZmYSkKKyNkZWZpbmUgRFBSX0ludF9NYXNrCQkoNCoweGZmYikKKyNkZWZpbmUgRFBSX0ludHJfRmxhZwkJKDQqMHhmZmMpCisjZGVmaW5lIERQUl9SZXNwb25zZV9NYngJKDQqMHhmZmUpCisjZGVmaW5lIERQUl9Db21tYW5kX01ieAkJKDQqMHhmZmYpCisKKyNkZWZpbmUgQUlfRklGT19ERVBUSAkyMDAzCisjZGVmaW5lIEFPX0ZJRk9fREVQVEgJMjA0OAorCisvKiBjb21tYW5kIGxpc3QgKi8KKworI2RlZmluZSBDTURfR0VUQlJESU5GTwkJMAorI2RlZmluZSBDTURfQ09ORklHCQkxCisjZGVmaW5lIENNRF9HRVRDT05GSUcJCTIKKyNkZWZpbmUgQ01EX1NUQVJUCQkzCisjZGVmaW5lIENNRF9TVE9QCQk0CisjZGVmaW5lIENNRF9SRUFEU0lOR0xFCQk1CisjZGVmaW5lIENNRF9XUklURVNJTkdMRQkJNgorI2RlZmluZSBDTURfQ0FMQ0NMT0NLCQk3CisjZGVmaW5lIENNRF9SRUFERVZFTlRTCQk4CisjZGVmaW5lIENNRF9XUklURUNUQ1RSTAkJMTYKKyNkZWZpbmUgQ01EX1JFQURDVENUUkwJCTE3CisjZGVmaW5lIENNRF9XUklURUNUCQkxOAorI2RlZmluZSBDTURfUkVBRENUCQkxOQorI2RlZmluZSBDTURfV1JJVEVEQVRBCQkzMgorI2RlZmluZSBDTURfUkVBRERBVEEJCTMzCisjZGVmaW5lIENNRF9XUklURUlPCQkzNAorI2RlZmluZSBDTURfUkVBRElPCQkzNQorI2RlZmluZSBDTURfV1JJVEVDT0RFCQkzNgorI2RlZmluZSBDTURfUkVBRENPREUJCTM3CisjZGVmaW5lIENNRF9FWEVDVVRFCQkzOAorI2RlZmluZSBDTURfSEFMVAkJNDgKKworI2RlZmluZSBTVUJTX0FJCQkwCisjZGVmaW5lIFNVQlNfQU8JCTEKKyNkZWZpbmUgU1VCU19ESU4JMgorI2RlZmluZSBTVUJTX0RPVVQJMworI2RlZmluZSBTVUJTX01FTQk0CisjZGVmaW5lIFNVQlNfQ1QJCTUKKworLyogaW50ZXJydXB0IGZsYWdzICovCisjZGVmaW5lIERUMzAwMF9DTURPTkUJCTB4ODAKKyNkZWZpbmUgRFQzMDAwX0NURE9ORQkJMHg0MAorI2RlZmluZSBEVDMwMDBfREFIV0VSUgkJMHgyMAorI2RlZmluZSBEVDMwMDBfREFTV0VSUgkJMHgxMAorI2RlZmluZSBEVDMwMDBfREFFTVBUWQkJMHgwOAorI2RlZmluZSBEVDMwMDBfQURIV0VSUgkJMHgwNAorI2RlZmluZSBEVDMwMDBfQURTV0VSUgkJMHgwMgorI2RlZmluZSBEVDMwMDBfQURGVUxMCQkweDAxCisKKyNkZWZpbmUgRFQzMDAwX0NPTVBMRVRJT05fTUFTSwkweGZmMDAKKyNkZWZpbmUgRFQzMDAwX0NPTU1BTkRfTUFTSwkweDAwZmYKKyNkZWZpbmUgRFQzMDAwX05PVFBST0NFU1NFRAkweDAwMDAKKyNkZWZpbmUgRFQzMDAwX05PRVJST1IJCTB4NTUwMAorI2RlZmluZSBEVDMwMDBfRVJST1IJCTB4YWEwMAorI2RlZmluZSBEVDMwMDBfTk9UU1VQUE9SVEVECTB4ZmYwMAorCisjZGVmaW5lIERUMzAwMF9FWFRFUk5BTF9DTE9DSwkxCisjZGVmaW5lIERUMzAwMF9SSVNJTkdfRURHRQkyCisKKyNkZWZpbmUgVE1PREVfTUFTSwkJMHgxYworCisjZGVmaW5lIERUMzAwMF9BRF9UUklHX0lOVEVSTkFMCQkoMDw8MikKKyNkZWZpbmUgRFQzMDAwX0FEX1RSSUdfRVhURVJOQUwJCSgxPDwyKQorI2RlZmluZSBEVDMwMDBfQURfUkVUUklHX0lOVEVSTkFMCSgyPDwyKQorI2RlZmluZSBEVDMwMDBfQURfUkVUUklHX0VYVEVSTkFMCSgzPDwyKQorI2RlZmluZSBEVDMwMDBfQURfRVhUUkVUUklHCQkoNDw8MikKKworI2RlZmluZSBEVDMwMDBfQ0hBTk5FTF9NT0RFX1NFCQkwCisjZGVmaW5lIERUMzAwMF9DSEFOTkVMX01PREVfREkJCTEKKworc3RydWN0IGR0M2tfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOworCXZvaWQgKmlvX2FkZHI7CisJdW5zaWduZWQgaW50IGxvY2s7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworCXVuc2lnbmVkIGludCBhaV9mcm9udDsKKwl1bnNpZ25lZCBpbnQgYWlfcmVhcjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDNrX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgZHQzMDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MzAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDMwMDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQzMDAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDMwMDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MzAwMF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDMwMDAsIGR0M2tfcGNpX3RhYmxlKTsKKworc3RhdGljIHZvaWQgZHQza19haV9lbXB0eV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkdDNrX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCB0aW1lcl9iYXNlLCB1bnNpZ25lZCBpbnQgKmFyZywKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSk7CitzdGF0aWMgaW50IGR0M2tfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBkZWJ1Z19pbnRyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncyk7CisjZW5kaWYKKworI2RlZmluZSBUSU1FT1VUIDEwMAorCitzdGF0aWMgaW50IGR0M2tfc2VuZF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjbWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisKKwl3cml0ZXcoY21kLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX0NvbW1hbmRfTWJ4KTsKKworCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJc3RhdHVzID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9Db21tYW5kX01ieCk7CisJCWlmICgoc3RhdHVzICYgRFQzMDAwX0NPTVBMRVRJT05fTUFTSykgIT0gRFQzMDAwX05PVFBST0NFU1NFRCkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlpZiAoKHN0YXR1cyAmIERUMzAwMF9DT01QTEVUSU9OX01BU0spID09IERUMzAwMF9OT0VSUk9SKSB7CisJCXJldHVybiAwOworCX0KKworCXByaW50aygiZHQza19zZW5kX2NtZCgpIHRpbWVvdXQvZXJyb3Igc3RhdHVzPTB4JTA0eFxuIiwgc3RhdHVzKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHQza19yZWFkc2luZ2xlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgc3Vic3lzLAorCXVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgZ2FpbikKK3sKKwl3cml0ZXcoc3Vic3lzLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisKKwl3cml0ZXcoY2hhbiwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMCkpOworCXdyaXRldyhnYWluLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygxKSk7CisKKwlkdDNrX3NlbmRfY21kKGRldiwgQ01EX1JFQURTSU5HTEUpOworCisJcmV0dXJuIHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDIpKTsKK30KKworc3RhdGljIHZvaWQgZHQza193cml0ZXNpbmdsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN1YnN5cywKKwl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJd3JpdGV3KHN1YnN5cywgZGV2cHJpdi0+aW9fYWRkciArIERQUl9TdWJTeXMpOworCisJd3JpdGV3KGNoYW4sIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDApKTsKKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMSkpOworCXdyaXRldyhkYXRhLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7CisKKwlkdDNrX3NlbmRfY21kKGRldiwgQ01EX1dSSVRFU0lOR0xFKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19uX2ludHMgPSAwOworCisvLyBGSVhNRSEgQXNzdW1lcyBzaGFyZWQgaW50ZXJydXB0IGlzIGZvciB0aGlzIGNhcmQuCisvLyBXaGF0J3MgdGhpcyBkZWJ1Z19uX2ludHMgc3R1ZmY/IE9idmlvdXNseSBuZWVkcyBzb21lIHdvcmsuLi4KK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDNrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXN0YXR1cyA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfSW50cl9GbGFnKTsKKyNpZmRlZiBERUJVRworCWRlYnVnX2ludHJfZmxhZ3Moc3RhdHVzKTsKKyNlbmRpZgorCisJaWYgKHN0YXR1cyAmIERUMzAwMF9BREZVTEwpIHsKKwkJZHQza19haV9lbXB0eV9maWZvKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCX0KKworCWlmIChzdGF0dXMgJiAoRFQzMDAwX0FEU1dFUlIgfCBEVDMwMDBfQURIV0VSUikpIHsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCX0KKworCWRlYnVnX25faW50cysrOworCWlmIChkZWJ1Z19uX2ludHMgPj0gMTApIHsKKwkJZHQza19haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgY2hhciAqaW50cl9mbGFnc1tdID0geworCSJBZEZ1bGwiLCAiQWRTd0Vycm9yIiwgIkFkSHdFcnJvciIsICJEYUVtcHR5IiwKKwkiRGFTd0Vycm9yIiwgIkRhSHdFcnJvciIsICJDdERvbmUiLCAiQ21Eb25lIiwKK307CitzdGF0aWMgdm9pZCBkZWJ1Z19pbnRyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgaTsKKwlwcmludGsoImR0M2s6IGludHJfZmxhZ3M6Iik7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoZmxhZ3MgJiAoMSA8PCBpKSkgeworCQkJcHJpbnRrKCIgJXMiLCBpbnRyX2ZsYWdzW2ldKTsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZHQza19haV9lbXB0eV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGZyb250OworCWludCByZWFyOworCWludCBjb3VudDsKKwlpbnQgaTsKKwlzaG9ydCBkYXRhOworCisJZnJvbnQgPSByZWFkdyhkZXZwcml2LT5pb19hZGRyICsgRFBSX0FEX0J1Zl9Gcm9udCk7CisJY291bnQgPSBmcm9udCAtIGRldnByaXYtPmFpX2Zyb250OworCWlmIChjb3VudCA8IDApCisJCWNvdW50ICs9IEFJX0ZJRk9fREVQVEg7CisKKwlwcmludGsoInJlYWRpbmcgJWQgc2FtcGxlc1xuIiwgY291bnQpOworCisJcmVhciA9IGRldnByaXYtPmFpX3JlYXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlkYXRhID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9BRENfYnVmZmVyICsgcmVhcik7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkYXRhKTsKKwkJcmVhcisrOworCQlpZiAocmVhciA+PSBBSV9GSUZPX0RFUFRIKQorCQkJcmVhciA9IDA7CisJfQorCisJZGV2cHJpdi0+YWlfcmVhciA9IHJlYXI7CisJd3JpdGV3KHJlYXIsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfQURfQnVmX1JlYXIpOworfQorCitzdGF0aWMgaW50IGR0M2tfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IHRoaXNfYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc19ib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IDEwMCAqIDE2ICogNjU1MzUpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAxMDAgKiAxNiAqIDY1NTM1OworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA1MCAqIDE2ICogNjU1MzUpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSA1MCAqIDE2ICogNjU1MzU7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGNtZC0+c3RvcF9hcmcgPiAweDAwZmZmZmZmKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMHgwMGZmZmZmZjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJZHQza19uc190b190aW1lcigxMDAsICZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlkdDNrX25zX3RvX3RpbWVyKDUwLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogbm90IHN1cHBvcnRlZCAqLworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQza19uc190b190aW1lcih1bnNpZ25lZCBpbnQgdGltZXJfYmFzZSwgdW5zaWduZWQgaW50ICpuYW5vc2VjLAorCXVuc2lnbmVkIGludCByb3VuZF9tb2RlKQoreworCWludCBkaXZpZGVyLCBiYXNlLCBwcmVzY2FsZTsKKworCS8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgaW1wcm92bWVudCAqLworCS8qIERvbid0IGtub3cgaWYgZGl2aWRlcj09MCB3b3Jrcy4gKi8KKworCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDE2OyBwcmVzY2FsZSsrKSB7CisJCWJhc2UgPSB0aW1lcl9iYXNlICogKHByZXNjYWxlICsgMSk7CisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBiYXNlIC8gMikgLyBiYXNlOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZGl2aWRlciA9ICgqbmFub3NlYykgLyBiYXNlOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkaXZpZGVyIDwgNjU1MzYpIHsKKwkJCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJCQlyZXR1cm4gKHByZXNjYWxlIDw8IDE2KSB8IChkaXZpZGVyKTsKKwkJfQorCX0KKworCXByZXNjYWxlID0gMTU7CisJYmFzZSA9IHRpbWVyX2Jhc2UgKiAoMSA8PCBwcmVzY2FsZSk7CisJZGl2aWRlciA9IDY1NTM1OworCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJcmV0dXJuIChwcmVzY2FsZSA8PCAxNikgfCAoZGl2aWRlcik7Cit9CisKK3N0YXRpYyBpbnQgZHQza19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGludCBkaXZpZGVyOworCXVuc2lnbmVkIGludCB0c2NhbmRpdjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBtb2RlOworCisJcHJpbnRrKCJkdDNrX2FpX2NtZDpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCXdyaXRldygocmFuZ2UgPDwgNikgfCBjaGFuLAorCQkJZGV2cHJpdi0+aW9fYWRkciArIERQUl9BRENfYnVmZmVyICsgaSk7CisJfQorCWFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJd3JpdGV3KGNtZC0+c2Nhbl9lbmRfYXJnLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygwKSk7CisJcHJpbnRrKCJwYXJhbVswXT0weCUwNHhcbiIsIGNtZC0+c2Nhbl9lbmRfYXJnKTsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJZGl2aWRlciA9IGR0M2tfbnNfdG9fdGltZXIoNTAsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCXdyaXRldygoZGl2aWRlciA+PiAxNiksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDEpKTsKKwkJcHJpbnRrKCJwYXJhbVsxXT0weCUwNHhcbiIsIGRpdmlkZXIgPj4gMTYpOworCQl3cml0ZXcoKGRpdmlkZXIgJiAweGZmZmYpLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7CisJCXByaW50aygicGFyYW1bMl09MHglMDR4XG4iLCBkaXZpZGVyICYgMHhmZmZmKTsKKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0c2NhbmRpdiA9IGR0M2tfbnNfdG9fdGltZXIoMTAwLCAmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQl3cml0ZXcoKHRzY2FuZGl2ID4+IDE2KSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMykpOworCQlwcmludGsoInBhcmFtWzNdPTB4JTA0eFxuIiwgdHNjYW5kaXYgPj4gMTYpOworCQl3cml0ZXcoKHRzY2FuZGl2ICYgMHhmZmZmKSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoNCkpOworCQlwcmludGsoInBhcmFtWzRdPTB4JTA0eFxuIiwgdHNjYW5kaXYgJiAweGZmZmYpOworCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisKKwltb2RlID0gRFQzMDAwX0FEX1JFVFJJR19JTlRFUk5BTCB8IDAgfCAwOworCXdyaXRldyhtb2RlLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcyg1KSk7CisJcHJpbnRrKCJwYXJhbVs1XT0weCUwNHhcbiIsIG1vZGUpOworCXdyaXRldyhhcmVmID09IEFSRUZfRElGRiwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoNikpOworCXByaW50aygicGFyYW1bNl09MHglMDR4XG4iLCBhcmVmID09IEFSRUZfRElGRik7CisKKwl3cml0ZXcoQUlfRklGT19ERVBUSCAvIDIsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDcpKTsKKwlwcmludGsoInBhcmFtWzddPTB4JTA0eFxuIiwgQUlfRklGT19ERVBUSCAvIDIpOworCisJd3JpdGV3KFNVQlNfQUksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKwlyZXQgPSBkdDNrX3NlbmRfY21kKGRldiwgQ01EX0NPTkZJRyk7CisKKwl3cml0ZXcoRFQzMDAwX0FERlVMTCB8IERUMzAwMF9BRFNXRVJSIHwgRFQzMDAwX0FESFdFUlIsCisJCWRldnByaXYtPmlvX2FkZHIgKyBEUFJfSW50X01hc2spOworCisJZGVidWdfbl9pbnRzID0gMDsKKworCXdyaXRldyhTVUJTX0FJLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisJcmV0ID0gZHQza19zZW5kX2NtZChkZXYsIENNRF9TVEFSVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDNrX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXQ7CisKKwl3cml0ZXcoU1VCU19BSSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9TdWJTeXMpOworCXJldCA9IGR0M2tfc2VuZF9jbWQoZGV2LCBDTURfU1RPUCk7CisKKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9JbnRfTWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDNrX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuLCBnYWluLCBhcmVmOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJLyogWFhYIGRvY3MgZG9uJ3QgZXhwbGFpbiBob3cgdG8gc2VsZWN0IGFyZWYgKi8KKwlhcmVmID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkdDNrX3JlYWRzaW5nbGUoZGV2LCBTVUJTX0FJLCBjaGFuLCBnYWluKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDNrX2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZHQza193cml0ZXNpbmdsZShkZXYsIFNVQlNfQU8sIGNoYW4sIGRhdGFbaV0pOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZHQza19hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBkdDNrX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBiaXRzKQoreworCS8qIFhYWCAqLworCXdyaXRldyhTVUJTX0RPVVQsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKworCXdyaXRldyhiaXRzLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygwKSk7CisjaWYgMAorCS8qIGRvbid0IGtub3cgKi8KKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMSkpOworCXdyaXRldygwLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7CisjZW5kaWYKKworCWR0M2tfc2VuZF9jbWQoZGV2LCBDTURfQ09ORklHKTsKK30KKworc3RhdGljIGludCBkdDNrX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG1hc2s7CisKKwltYXNrID0gKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpIDwgNCkgPyAweDBmIDogMHhmMDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPmlvX2JpdHMgJiAoMSA8PCBDUl9DSEFOKGluc24tPgorCQkJCQljaGFuc3BlYykpKSA/IENPTUVESV9PVVRQVVQgOgorCQkJQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwltYXNrID0gKHMtPmlvX2JpdHMgJiAweDAxKSB8ICgocy0+aW9fYml0cyAmIDB4MTApID4+IDMpOworCWR0M2tfZGlvX2NvbmZpZyhkZXYsIG1hc2spOworCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgZHQza19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzFdICYgZGF0YVswXTsKKwkJZHQza193cml0ZXNpbmdsZShkZXYsIFNVQlNfRE9VVCwgMCwgcy0+c3RhdGUpOworCX0KKwlkYXRhWzFdID0gZHQza19yZWFkc2luZ2xlKGRldiwgU1VCU19ESU4sIDAsIDApOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQza19tZW1faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQl3cml0ZXcoU1VCU19NRU0sIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKwkJd3JpdGV3KGFkZHIsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDApKTsKKwkJd3JpdGV3KDEsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDEpKTsKKworCQlkdDNrX3NlbmRfY21kKGRldiwgQ01EX1JFQURDT0RFKTsKKworCQlkYXRhW2ldID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMikpOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0X3BjaV9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworCitzdGF0aWMgaW50IGR0MzAwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGJ1cywgc2xvdDsKKwlpbnQgcmV0ID0gMDsKKworCXByaW50aygiZHQzMDAwOiIpOworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQza19wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGR0X3BjaV9wcm9iZShkZXYsIGJ1cywgc2xvdCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCA9PSAwKSB7CisJCXByaW50aygiIG5vIERUIGJvYXJkIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBkdDNrX2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCAiZHQzMDAwIiwgZGV2KSkgeworCQlwcmludGsoIiB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1XG4iLCBkZXZwcml2LT5wY2lfZGV2LT5pcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBkZXZwcml2LT5wY2lfZGV2LT5pcnE7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJRkYgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+YWRjaGFuOworCXMtPmluc25fcmVhZCA9IGR0M2tfYWlfaW5zbjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc19ib2FyZC0+YWRiaXRzKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNTEyOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2R0MzAwMF9haTsJLyogWFhYICovCisJcy0+ZG9fY21kID0gZHQza19haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGR0M2tfYWlfY21kdGVzdDsKKwlzLT5jYW5jZWwgPSBkdDNrX2FpX2NhbmNlbDsKKworCXMrKzsKKwkvKiBhbyBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+aW5zbl9yZWFkID0gZHQza19hb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGR0M2tfYW9faW5zbjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc19ib2FyZC0+ZGFiaXRzKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisKKwlzKys7CisJLyogZGlvIHN1YnN5c3RlbSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9jb25maWcgPSBkdDNrX2Rpb19pbnNuX2NvbmZpZzsKKwlzLT5pbnNuX2JpdHMgPSBkdDNrX2Rpb19pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcysrOworCS8qIG1lbSBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfTUVNT1JZOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSAweDEwMDA7CisJcy0+aW5zbl9yZWFkID0gZHQza19tZW1faW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKworI2lmIDAKKwlzKys7CisJLyogcHJvYyBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQzMDAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+cGh5c19hZGRyKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJaWYgKGRldnByaXYtPmlvX2FkZHIpCisJCQlpb3VubWFwKGRldnByaXYtPmlvX2FkZHIpOworCX0KKwkvKiBYWFggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmR0X3BjaV9maW5kX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZnJvbSwgaW50ICpib2FyZCk7CitzdGF0aWMgaW50IHNldHVwX3BjaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBpbnQgZHRfcGNpX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlpbnQgYm9hcmQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCisJcGNpZGV2ID0gTlVMTDsKKwl3aGlsZSAoKHBjaWRldiA9IGR0X3BjaV9maW5kX2RldmljZShwY2lkZXYsICZib2FyZCkpICE9IE5VTEwpIHsKKwkJaWYgKChidXMgPT0gMCAmJiBzbG90ID09IDApIHx8CisJCQkocGNpZGV2LT5idXMtPm51bWJlciA9PSBidXMgJiYKKwkJCSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSA9PSBzbG90KSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKworCWlmIChib2FyZCA+PSAwKQorCQlkZXYtPmJvYXJkX3B0ciA9IGR0M2tfYm9hcmR0eXBlcyArIGJvYXJkOworCisJaWYgKCFkZXZwcml2LT5wY2lfZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICgocmV0ID0gc2V0dXBfcGNpKGRldikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNldHVwX3BjaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXNvdXJjZV9zaXplX3QgYWRkcjsKKwlpbnQgcmV0OworCisJcmV0ID0gY29tZWRpX3BjaV9lbmFibGUoZGV2cHJpdi0+cGNpX2RldiwgImR0MzAwMCIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAwKTsKKwlkZXZwcml2LT5waHlzX2FkZHIgPSBhZGRyOworCWRldnByaXYtPmlvX2FkZHIgPSBpb3JlbWFwKGRldnByaXYtPnBoeXNfYWRkciwgRFQzMDAwX1NJWkUpOworCWlmICghZGV2cHJpdi0+aW9fYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisjaWYgREVCVUcKKwlwcmludGsoIjB4JTA4bGx4IG1hcHBlZCB0byAlcCwgIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylkZXZwcml2LT5waHlzX2FkZHIsIGRldnByaXYtPmlvX2FkZHIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkdF9wY2lfZmluZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmZyb20sIGludCAqYm9hcmQpCit7CisJaW50IGk7CisKKwlmb3IgKGZyb20gPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0RULCBQQ0lfQU5ZX0lELCBmcm9tKTsKKwkJZnJvbSAhPSBOVUxMOworCQlmcm9tID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9EVCwgUENJX0FOWV9JRCwgZnJvbSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5fZHQza19ib2FyZHM7IGkrKykgeworCQkJaWYgKGZyb20tPmRldmljZSA9PSBkdDNrX2JvYXJkdHlwZXNbaV0uZGV2aWNlX2lkKSB7CisJCQkJKmJvYXJkID0gaTsKKwkJCQlyZXR1cm4gZnJvbTsKKwkJCX0KKwkJfQorCQlwcmludGsoInVua25vd24gRGF0YSBUcmFuc2xhdGlvbiBQQ0kgZGV2aWNlIGZvdW5kIHdpdGggZGV2aWNlX2lkPTB4JTA0eFxuIiwgZnJvbS0+ZGV2aWNlKTsKKwl9CisJKmJvYXJkID0gLTE7CisJcmV0dXJuIGZyb207Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKaW5kZXggZjJkMjE3My4uY2M0YzA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYwpAQCAtMzAwLDIyICszMDAsMjIgQEAKIAlzdHJ1Y3QgY29tZWRpX2R0OTgxMiAqY29tZWRpOwogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzEwX2Fpbl9yYW5nZSA9IHsgMSwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8xMF9haW5fcmFuZ2UgPSB7IDEsIHsKIAkJCUJJUF9SQU5HRSgxMCksCiAJfQogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzJwdDVfYWluX3JhbmdlID0geyAxLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzJwdDVfYWluX3JhbmdlID0geyAxLCB7CiAJCQlVTklfUkFOR0UoMi41KSwKIAl9CiB9OwogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMTBfYW91dF9yYW5nZSA9IHsgMSwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8xMF9hb3V0X3JhbmdlID0geyAxLCB7CiAJCQlCSVBfUkFOR0UoMTApLAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8ycHQ1X2FvdXRfcmFuZ2UgPSB7IDEsIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMnB0NV9hb3V0X3JhbmdlID0geyAxLCB7CiAJCQlVTklfUkFOR0UoMi41KSwKIAl9CiB9OwpAQCAtODkyLDEyICs4OTIsMTIgQEAKICAqIENvbWVkaSBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCBkdDk4MTJfY29tZWRpX29wZW4oY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZHQ5ODEyX2NvbWVkaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJZG93bigmZGV2cHJpdi0+c2xvdC0+bXV0ZXgpOwogCWlmIChkZXZwcml2LT5zbG90LT51c2IpIHsKIAkJLyogV2UgaGF2ZSBhbiBhdHRhY2hlZCBkZXZpY2UsIGZpbGwgaW4gY3VycmVudCByYW5nZSBpbmZvICovCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJCXMgPSAmZGV2LT5zdWJkZXZpY2VzWzBdOwogCQlzLT5uX2NoYW4gPSA4OwpAQCAtOTQwLDggKzk0MCw4IEBACiAJdXAoJmRldnByaXYtPnNsb3QtPm11dGV4KTsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfZGlfcmluc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBkdDk4MTJfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbjsKIAl1OCBiaXRzID0gMDsKQEAgLTk1Miw4ICs5NTIsOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9kb193aW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9kb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCXU4IGJpdHMgPSAwOwpAQCAtOTcwLDggKzk3MCw4IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgZHQ5ODEyX2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgZHQ5ODEyX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG47CiAKQEAgLTk4NSw4ICs5ODUsOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9hb19yaW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCXUxNiB2YWx1ZTsKQEAgLTk5OSw4ICs5OTksOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9hb193aW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCkBAIC0xMDA5LDEwICsxMDA5LDEwIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgZHQ5ODEyX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCBkdDk4MTJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgaTsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJZGV2LT5ib2FyZF9uYW1lID0gImR0OTgxMiI7CiAKQEAgLTExMDMsMTIgKzExMDMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHQ5ODEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkdDk4MTJfY29tZWRpX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkdDk4MTJfY29tZWRpX2RyaXZlciA9IHsKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lID0gImR0OTgxMiIsCiAJLmF0dGFjaCA9IGR0OTgxMl9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9mbDUxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2JiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9mbDUxMi5jCisgICAgQW5kZXJzIEduaXN0cnVwIDxleDE4QGthbG1hbi5pYXUuZHR1LmRrPgorKi8KKworLyoKK0RyaXZlcjogZmw1MTIKK0Rlc2NyaXB0aW9uOiB1bmtub3duCitBdXRob3I6IEFuZGVycyBHbmlzdHJ1cCA8ZXgxOEBrYWxtYW4uaWF1LmR0dS5kaz4KK0RldmljZXM6IFt1bmtub3duXSBGTDUxMiAoZmw1MTIpCitTdGF0dXM6IHVua25vd24KKworRGlnaXRhbCBJL08gaXMgbm90IHN1cHBvcnRlZC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyovCisKKyNkZWZpbmUgREVCVUcgMAorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIEZMNTEyX1NJWkUgMTYJCS8qIHRoZSBzaXplIG9mIHRoZSB1c2VkIG1lbW9yeSAqLworc3RydWN0IGZsNTEyX3ByaXZhdGUgeworCisJc2hvcnQgYW9fcmVhZGJhY2tbMl07Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZmw1MTJfcHJpdmF0ZSAqKSBkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9mbDUxMiA9IHsgNCwgeworCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwl9Cit9OworCitzdGF0aWMgaW50IGZsNTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGZsNTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZmw1MTIgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZmw1MTIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmZsNTEyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpmbDUxMl9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2ZsNTEyKTsKKworc3RhdGljIGludCBmbDUxMl9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGZsNTEyX2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZmw1MTJfYW9faW5zbl9yZWFkYmFjayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKgorICogZmw1MTJfYWlfaW5zbiA6IHRoaXMgaXMgdGhlIGFuYWxvZyBpbnB1dCBmdW5jdGlvbgorICovCitzdGF0aWMgaW50IGZsNTEyX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGludCBsb19ieXRlLCBoaV9ieXRlOworCWNoYXIgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2LT5pb2Jhc2U7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CS8qIHNhbXBsZSBuIHRpbWVzIG9uIHNlbGVjdGVkIGNoYW5uZWwgKi8KKwkJLyogWFhYIHByb2JhYmx5IGNhbiBtb3ZlIG5leHQgc3RlcCBvdXQgb2YgZm9yKCkgbG9vcCAtLSB3aWxsIG1ha2UKKwkJICogQUkgYSBsaXR0bGUgYml0IGZhc3Rlci4gKi8KKwkJb3V0YihjaGFuLCBpb2Jhc2UgKyAyKTsJLyogc2VsZWN0IGNoYW4gKi8KKwkJb3V0YigwLCBpb2Jhc2UgKyAzKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQkvKiBYWFggc2hvdWxkIHRlc3QgImRvbmUiIGZsYWcgaW5zdGVhZCBvZiBkZWxheSAqLworCQljb21lZGlfdWRlbGF5KDMwKTsJLyogc2xlZXAgMzAgdXNlYyAqLworCQlsb19ieXRlID0gaW5iKGlvYmFzZSArIDIpOwkvKiBsb3cgOCBieXRlICovCisJCWhpX2J5dGUgPSBpbmIoaW9iYXNlICsgMykgJiAweGY7CS8qIGhpZ2ggNCBiaXQgYW5kIG1hc2sgKi8KKwkJZGF0YVtuXSA9IGxvX2J5dGUgKyAoaGlfYnl0ZSA8PCA4KTsKKwl9CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBmbDUxMl9hb19pbnNuIDogdXNlZCB0byB3cml0ZSB0byBhIERBIHBvcnQgbiB0aW1lcworICovCitzdGF0aWMgaW50IGZsNTEyX2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qIGdldCBjaGFuIHRvIHdyaXRlICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXYtPmlvYmFzZTsJLyogZ2V0IGJhc2UgYWRkcmVzcyAgKi8KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsJLyogd3JpdGUgbiBkYXRhIHNldCAqLworCQlvdXRiKGRhdGFbbl0gJiAweDBmZiwgaW9iYXNlICsgNCArIDIgKiBjaGFuKTsJLyogd3JpdGUgbG93IGJ5dGUgICAqLworCQlvdXRiKChkYXRhW25dICYgMHhmMDApID4+IDgsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHdyaXRlIGhpZ2ggYnl0ZSAgKi8KKwkJaW5iKGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHRyaWcgKi8KKworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCXJldHVybiBuOworfQorCisvKgorICogZmw1MTJfYW9faW5zbl9yZWFkYmFjayA6IHVzZWQgdG8gcmVhZCBwcmV2aW91cyB2YWx1ZXMgd3JpdHRlbiB0bworICogREEgcG9ydAorICovCitzdGF0aWMgaW50IGZsNTEyX2FvX2luc25fcmVhZGJhY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIHN0YXJ0IGF0dGFjaAorICovCitzdGF0aWMgaW50IGZsNTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsJLyogcG9pbnRlciB0byB0aGUgc3ViZGV2aWNlOgorCQkJCSAgIEFuYWxvZyBpbiwgQW5hbG9nIG91dCwgKCBub3QgbWFkZSAtPmFuZCBEaWdpdGFsIElPKSAqLworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGk6JWQgZmw1MTI6IDB4JTA0bHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBGTDUxMl9TSVpFLCAiZmw1MTIiKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZmw1MTIiOworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBmbDUxMl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmIERFQlVHCisJcHJpbnRrKCJtYWxsb2Mgb2tcbiIpOworI2VuZGlmCisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIHRoaXMgaWYgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBzdXBkZXZpY2VzLCAyIGhhdmUgYmVlbiBkZWZpbmVkCisJICovCisJLyogQW5hbG9nIGluZHB1dCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsJLyogZGVmaW5lIHN1YmRldmljZSBhcyBBbmFsb2cgSW4gICAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CS8qIHlvdSBjYW4gcmVhZCBpdCBmcm9tIHVzZXJzcGFjZSAgKi8KKwlzLT5uX2NoYW4gPSAxNjsJCS8qIE51bWJlciBvZiBBbmFsb2cgaW5wdXQgY2hhbm5lbHMgKi8KKwlzLT5tYXhkYXRhID0gMHgwZmZmOwkvKiBhY2NlcHQgb25seSAxMiBiaXRzIG9mIGRhdGEgICAgICovCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZmw1MTI7CS8qIGRldmljZSB1c2Ugb25lIG9mIHRoZSByYW5nZXMgICAgKi8KKwlzLT5pbnNuX3JlYWQgPSBmbDUxMl9haV9pbnNuOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVhZCBBRCAgICovCisJcHJpbnRrKCJjb21lZGk6IGZsNTEyOiBzdWJkZXZpY2UgMCBpbml0aWFsaXplZFxuIik7CisKKwkvKiBBbmFsb2cgb3V0cHV0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwkvKiBkZWZpbmUgc3ViZGV2aWNlIGFzIEFuYWxvZyBPVVQgICAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsJLyogeW91IGNhbiB3cml0ZSBpdCBmcm9tIHVzZXJzcGFjZSAgKi8KKwlzLT5uX2NoYW4gPSAyOwkJLyogTnVtYmVyIG9mIEFuYWxvZyBvdXRwdXQgY2hhbm5lbHMgKi8KKwlzLT5tYXhkYXRhID0gMHgwZmZmOwkvKiBhY2NlcHQgb25seSAxMiBiaXRzIG9mIGRhdGEgICAgICAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOwkvKiBkZXZpY2UgdXNlIG9uZSBvZiB0aGUgcmFuZ2VzICAgICAqLworCXMtPmluc25fd3JpdGUgPSBmbDUxMl9hb19pbnNuOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gd3JpdGUgREEgICAqLworCXMtPmluc25fcmVhZCA9IGZsNTEyX2FvX2luc25fcmVhZGJhY2s7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZWFkaW5nIERBICAgKi8KKwlwcmludGsoImNvbWVkaTogZmw1MTI6IHN1YmRldmljZSAxIGluaXRpYWxpemVkXG4iKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZsNTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBGTDUxMl9TSVpFKTsKKwlwcmludGsoImNvbWVkaSVkOiBmbDUxMjogZHVtbXkgaSBkZXRhY2hcbiIsIGRldi0+bWlub3IpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU1Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKQEAgLTAsMCArMSwxMDYwIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKKyAgICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgR2VuZXJhbCBTdGFuZGFyZHMgQ29ycG9yYXRpb24gSGlnaAorICAgIFNwZWVkIFBhcmFsbGVsIERpZ2l0YWwgSW50ZXJmYWNlIHJzNDg1IGJvYXJkcy4KKworICAgIEF1dGhvcjogIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMgQ29oZXJlbnQgSW1hZ2luZyBTeXN0ZW1zCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorCitEcml2ZXI6IGdzY19ocGRpCitEZXNjcmlwdGlvbjogR2VuZXJhbCBTdGFuZGFyZHMgQ29ycG9yYXRpb24gSGlnaAorICAgIFNwZWVkIFBhcmFsbGVsIERpZ2l0YWwgSW50ZXJmYWNlIHJzNDg1IGJvYXJkcworQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitTdGF0dXM6IG9ubHkgcmVjZWl2ZSBtb2RlIHdvcmtzLCB0cmFuc21pdCBub3Qgc3VwcG9ydGVkCitVcGRhdGVkOiAyMDAzLTAyLTIwCitEZXZpY2VzOiBbR2VuZXJhbCBTdGFuZGFyZHMgQ29ycG9yYXRpb25dIFBDSS1IUERJMzIgKGdzY19ocGRpKSwKKyAgUE1DLUhQREkzMgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorCitUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIGhwZGkgbW9kZWxzIGF2YWlsYWJsZSBmcm9tIEdTQyBmb3Igd2hpY2gKK3N1cHBvcnQgY291bGQgYmUgYWRkZWQgdG8gdGhpcyBkcml2ZXIuCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgInBseDkwODAuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworc3RhdGljIGludCBocGRpX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGhwZGlfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3ZvaWQgYWJvcnRfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCk7CitzdGF0aWMgaW50IGhwZGlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBocGRpX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBocGRpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBkaW9fY29uZmlnX2Jsb2NrX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisjdW5kZWYgSFBESV9ERUJVRwkJLy8gZGlzYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMKKy8vI2RlZmluZSBIUERJX0RFQlVHICAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorCisjaWZkZWYgSFBESV9ERUJVRworI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pICBydF9wcmludGsoZm9ybWF0ICwgIyMgYXJncyApCisjZWxzZQorI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBUSU1FUl9CQVNFIDUwCQkvLyAyME1IeiBtYXN0ZXIgY2xvY2sKKyNkZWZpbmUgRE1BX0JVRkZFUl9TSVpFIDB4MTAwMDAKKyNkZWZpbmUgTlVNX0RNQV9CVUZGRVJTIDQKKyNkZWZpbmUgTlVNX0RNQV9ERVNDUklQVE9SUyAyNTYKKworLy8gaW5kaWNlcyBvZiBiYXNlIGFkZHJlc3MgcmVnaW9ucworZW51bSBiYXNlX2FkZHJlc3NfcmVnaW9ucyB7CisJUExYOTA4MF9CQUREUklOREVYID0gMCwKKwlIUERJX0JBRERSSU5ERVggPSAyLAorfTsKKworZW51bSBocGRpX3JlZ2lzdGVycyB7CisJRklSTVdBUkVfUkVWX1JFRyA9IDB4MCwKKwlCT0FSRF9DT05UUk9MX1JFRyA9IDB4NCwKKwlCT0FSRF9TVEFUVVNfUkVHID0gMHg4LAorCVRYX1BST0dfQUxNT1NUX1JFRyA9IDB4YywKKwlSWF9QUk9HX0FMTU9TVF9SRUcgPSAweDEwLAorCUZFQVRVUkVTX1JFRyA9IDB4MTQsCisJRklGT19SRUcgPSAweDE4LAorCVRYX1NUQVRVU19DT1VOVF9SRUcgPSAweDFjLAorCVRYX0xJTkVfVkFMSURfQ09VTlRfUkVHID0gMHgyMCwKKwlUWF9MSU5FX0lOVkFMSURfQ09VTlRfUkVHID0gMHgyNCwKKwlSWF9TVEFUVVNfQ09VTlRfUkVHID0gMHgyOCwKKwlSWF9MSU5FX0NPVU5UX1JFRyA9IDB4MmMsCisJSU5URVJSVVBUX0NPTlRST0xfUkVHID0gMHgzMCwKKwlJTlRFUlJVUFRfU1RBVFVTX1JFRyA9IDB4MzQsCisJVFhfQ0xPQ0tfRElWSURFUl9SRUcgPSAweDM4LAorCVRYX0ZJRk9fU0laRV9SRUcgPSAweDQwLAorCVJYX0ZJRk9fU0laRV9SRUcgPSAweDQ0LAorCVRYX0ZJRk9fV09SRFNfUkVHID0gMHg0OCwKKwlSWF9GSUZPX1dPUkRTX1JFRyA9IDB4NGMsCisJSU5URVJSVVBUX0VER0VfTEVWRUxfUkVHID0gMHg1MCwKKwlJTlRFUlJVUFRfUE9MQVJJVFlfUkVHID0gMHg1NCwKK307CisKK2ludCBjb21tYW5kX2NoYW5uZWxfdmFsaWQodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJaWYgKGNoYW5uZWwgPT0gMCB8fCBjaGFubmVsID4gNikgeworCQlydF9wcmludGsoImdzY19ocGRpOiBidWchIGludmFsaWQgY2FibGUgY29tbWFuZCBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvLyBiaXQgZGVmaW5pdGlvbnMKKworZW51bSBmaXJtd2FyZV9yZXZpc2lvbl9iaXRzIHsKKwlGRUFUVVJFU19SRUdfUFJFU0VOVF9CSVQgPSAweDgwMDAsCit9OworaW50IGZpcm13YXJlX3JldmlzaW9uKHVpbnQzMl90IGZ3cl9iaXRzKQoreworCXJldHVybiBmd3JfYml0cyAmIDB4ZmY7Cit9CisKK2ludCBwY2JfcmV2aXNpb24odWludDMyX3QgZndyX2JpdHMpCit7CisJcmV0dXJuIChmd3JfYml0cyA+PiA4KSAmIDB4ZmY7Cit9CisKK2ludCBocGRpX3N1YmlkKHVpbnQzMl90IGZ3cl9iaXRzKQoreworCXJldHVybiAoZndyX2JpdHMgPj4gMTYpICYgMHhmZjsKK30KKworZW51bSBib2FyZF9jb250cm9sX2JpdHMgeworCUJPQVJEX1JFU0VUX0JJVCA9IDB4MSwJLyogd2FpdCAxMHVzZWMgYmVmb3JlIGFjY2Vzc2luZyBmaWZvcyAqLworCVRYX0ZJRk9fUkVTRVRfQklUID0gMHgyLAorCVJYX0ZJRk9fUkVTRVRfQklUID0gMHg0LAorCVRYX0VOQUJMRV9CSVQgPSAweDEwLAorCVJYX0VOQUJMRV9CSVQgPSAweDIwLAorCURFTUFORF9ETUFfRElSRUNUSU9OX1RYX0JJVCA9IDB4NDAsCS8qIGZvciBjaGFubmVsIDAsIGNoYW5uZWwgMSBjYW4gb25seSB0cmFuc21pdCAod2hlbiBwcmVzZW50KSAqLworCUxJTkVfVkFMSURfT05fU1RBVFVTX1ZBTElEX0JJVCA9IDB4ODAsCisJU1RBUlRfVFhfQklUID0gMHgxMCwKKwlDQUJMRV9USFJPVFRMRV9FTkFCTEVfQklUID0gMHgyMCwKKwlURVNUX01PREVfRU5BQkxFX0JJVCA9IDB4ODAwMDAwMDAsCit9OwordWludDMyX3QgY29tbWFuZF9kaXNjcmV0ZV9vdXRwdXRfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgaW50IG91dHB1dCwKKwlpbnQgb3V0cHV0X3ZhbHVlKQoreworCXVpbnQzMl90IGJpdHMgPSAwOworCisJaWYgKGNvbW1hbmRfY2hhbm5lbF92YWxpZChjaGFubmVsKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAob3V0cHV0KSB7CisJCWJpdHMgfD0gMHgxIDw8ICgxNiArIGNoYW5uZWwpOworCQlpZiAob3V0cHV0X3ZhbHVlKQorCQkJYml0cyB8PSAweDEgPDwgKDI0ICsgY2hhbm5lbCk7CisJfSBlbHNlCisJCWJpdHMgfD0gMHgxIDw8ICgyNCArIGNoYW5uZWwpOworCisJcmV0dXJuIGJpdHM7Cit9CisKK2VudW0gYm9hcmRfc3RhdHVzX2JpdHMgeworCUNPTU1BTkRfTElORV9TVEFUVVNfTUFTSyA9IDB4N2YsCisJVFhfSU5fUFJPR1JFU1NfQklUID0gMHg4MCwKKwlUWF9OT1RfRU1QVFlfQklUID0gMHgxMDAsCisJVFhfTk9UX0FMTU9TVF9FTVBUWV9CSVQgPSAweDIwMCwKKwlUWF9OT1RfQUxNT1NUX0ZVTExfQklUID0gMHg0MDAsCisJVFhfTk9UX0ZVTExfQklUID0gMHg4MDAsCisJUlhfTk9UX0VNUFRZX0JJVCA9IDB4MTAwMCwKKwlSWF9OT1RfQUxNT1NUX0VNUFRZX0JJVCA9IDB4MjAwMCwKKwlSWF9OT1RfQUxNT1NUX0ZVTExfQklUID0gMHg0MDAwLAorCVJYX05PVF9GVUxMX0JJVCA9IDB4ODAwMCwKKwlCT0FSRF9KVU1QRVIwX0lOU1RBTExFRF9CSVQgPSAweDEwMDAwLAorCUJPQVJEX0pVTVBFUjFfSU5TVEFMTEVEX0JJVCA9IDB4MjAwMDAsCisJVFhfT1ZFUlJVTl9CSVQgPSAweDIwMDAwMCwKKwlSWF9VTkRFUlJVTl9CSVQgPSAweDQwMDAwMCwKKwlSWF9PVkVSUlVOX0JJVCA9IDB4ODAwMDAwLAorfTsKKwordWludDMyX3QgYWxtb3N0X2Z1bGxfYml0cyh1bnNpZ25lZCBpbnQgbnVtX3dvcmRzKQoreworLy8gWFhYIG5lZWQgdG8gYWRkIG9yIHN1YnRyYWN0IG9uZT8KKwlyZXR1cm4gKG51bV93b3JkcyA8PCAxNikgJiAweGZmMDAwMDsKK30KKwordWludDMyX3QgYWxtb3N0X2VtcHR5X2JpdHModW5zaWduZWQgaW50IG51bV93b3JkcykKK3sKKwlyZXR1cm4gbnVtX3dvcmRzICYgMHhmZmZmOworfQordW5zaWduZWQgaW50IGFsbW9zdF9mdWxsX251bV93b3Jkcyh1aW50MzJfdCBiaXRzKQoreworLy8gWFhYIG5lZWQgdG8gYWRkIG9yIHN1YnRyYWN0IG9uZT8KKwlyZXR1cm4gKGJpdHMgPj4gMTYpICYgMHhmZmZmOworfQordW5zaWduZWQgaW50IGFsbW9zdF9lbXB0eV9udW1fd29yZHModWludDMyX3QgYml0cykKK3sKKwlyZXR1cm4gYml0cyAmIDB4ZmZmZjsKK30KKworZW51bSBmZWF0dXJlc19iaXRzIHsKKwlGSUZPX1NJWkVfUFJFU0VOVF9CSVQgPSAweDEsCisJRklGT19XT1JEU19QUkVTRU5UX0JJVCA9IDB4MiwKKwlMRVZFTF9FREdFX0lOVEVSUlVQVFNfUFJFU0VOVF9CSVQgPSAweDQsCisJR1BJT19TVVBQT1JURURfQklUID0gMHg4LAorCVBMWF9ETUFfQ0gxX1NVUFBPUlRFRF9CSVQgPSAweDEwLAorCU9WRVJSVU5fVU5ERVJSVU5fU1VQUE9SVEVEX0JJVCA9IDB4MjAsCit9OworCitlbnVtIGludGVycnVwdF9zb3VyY2VzIHsKKwlGUkFNRV9WQUxJRF9TVEFSVF9JTlRSID0gMCwKKwlGUkFNRV9WQUxJRF9FTkRfSU5UUiA9IDEsCisJVFhfRklGT19FTVBUWV9JTlRSID0gOCwKKwlUWF9GSUZPX0FMTU9TVF9FTVBUWV9JTlRSID0gOSwKKwlUWF9GSUZPX0FMTU9TVF9GVUxMX0lOVFIgPSAxMCwKKwlUWF9GSUZPX0ZVTExfSU5UUiA9IDExLAorCVJYX0VNUFRZX0lOVFIgPSAxMiwKKwlSWF9BTE1PU1RfRU1QVFlfSU5UUiA9IDEzLAorCVJYX0FMTU9TVF9GVUxMX0lOVFIgPSAxNCwKKwlSWF9GVUxMX0lOVFIgPSAxNSwKK307CitpbnQgY29tbWFuZF9pbnRyX3NvdXJjZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlpZiAoY29tbWFuZF9jaGFubmVsX3ZhbGlkKGNoYW5uZWwpID09IDApCisJCWNoYW5uZWwgPSAxOworCXJldHVybiBjaGFubmVsICsgMTsKK30KKwordWludDMyX3QgaW50cl9iaXQoaW50IGludGVycnVwdF9zb3VyY2UpCit7CisJcmV0dXJuIDB4MSA8PCBpbnRlcnJ1cHRfc291cmNlOworfQorCit1aW50MzJfdCB0eF9jbG9ja19kaXZpc29yX2JpdHModW5zaWduZWQgaW50IGRpdmlzb3IpCit7CisJcmV0dXJuIGRpdmlzb3IgJiAweGZmOworfQorCit1bnNpZ25lZCBpbnQgZmlmb19zaXplKHVpbnQzMl90IGZpZm9fc2l6ZV9iaXRzKQoreworCXJldHVybiBmaWZvX3NpemVfYml0cyAmIDB4ZmZmZmY7Cit9CisKK3Vuc2lnbmVkIGludCBmaWZvX3dvcmRzKHVpbnQzMl90IGZpZm9fd29yZHNfYml0cykKK3sKKwlyZXR1cm4gZmlmb193b3Jkc19iaXRzICYgMHhmZmZmZjsKK30KKwordWludDMyX3QgaW50cl9lZGdlX2JpdChpbnQgaW50ZXJydXB0X3NvdXJjZSkKK3sKKwlyZXR1cm4gMHgxIDw8IGludGVycnVwdF9zb3VyY2U7Cit9CisKK3VpbnQzMl90IGludHJfYWN0aXZlX2hpZ2hfYml0KGludCBpbnRlcnJ1cHRfc291cmNlKQoreworCXJldHVybiAweDEgPDwgaW50ZXJydXB0X3NvdXJjZTsKK30KKworc3RydWN0IGhwZGlfYm9hcmQgeworCisJY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOwkJLy8gcGNpIGRldmljZSBpZAorCWludCBzdWJkZXZpY2VfaWQ7CS8vIHBjaSBzdWJkZXZpY2UgaWQKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBocGRpX2JvYXJkIGhwZGlfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2ktaHBkaTMyIiwKKwkgICAgICBkZXZpY2VfaWQ6UENJX0RFVklDRV9JRF9QTFhfOTA4MCwKKwkgICAgICBzdWJkZXZpY2VfaWQ6MHgyNDAwLAorCQl9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJInB4aS1ocGRpMzIiLAorCSAgICAgIGRldmljZV9pZDoweDk2NTYsCisJICAgICAgc3ViZGV2aWNlX2lkOjB4MjcwNSwKKwkJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2JvYXJkcyh2b2lkKQoreworCXJldHVybiBzaXplb2YoaHBkaV9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBocGRpX2JvYXJkKTsKK30KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhwZGlfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwODAsIFBDSV9WRU5ET1JfSURfUExYLCAweDI0MDAsCisJCTAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwZGlfcGNpX3RhYmxlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHBkaV9ib2FyZCAqYm9hcmQoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgaHBkaV9ib2FyZCAqKSBkZXYtPmJvYXJkX3B0cjsKK30KKworc3RydWN0IGhwZGlfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNpX2RldiAqaHdfZGV2OwkvLyBwb2ludGVyIHRvIGJvYXJkJ3MgcGNpX2RldiBzdHJ1Y3QKKwkvLyBiYXNlIGFkZHJlc3NlcyAocGh5c2ljYWwpCisJcmVzb3VyY2Vfc2l6ZV90IHBseDkwODBfcGh5c19pb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGhwZGlfcGh5c19pb2Jhc2U7CisJLy8gYmFzZSBhZGRyZXNzZXMgKGlvcmVtYXBwZWQpCisJdm9pZCAqcGx4OTA4MF9pb2Jhc2U7CisJdm9pZCAqaHBkaV9pb2Jhc2U7CisJdWludDMyX3QgKmRpb19idWZmZXJbTlVNX0RNQV9CVUZGRVJTXTsJLy8gZG1hIGJ1ZmZlcnMKKwlkbWFfYWRkcl90IGRpb19idWZmZXJfcGh5c19hZGRyW05VTV9ETUFfQlVGRkVSU107CS8vIHBoeXNpY2FsIGFkZHJlc3NlcyBvZiBkbWEgYnVmZmVycworCXN0cnVjdCBwbHhfZG1hX2Rlc2MgKmRtYV9kZXNjOwkvLyBhcnJheSBvZiBkbWEgZGVzY3JpcHRvcnMgcmVhZCBieSBwbHg5MDgwLCBhbGxvY2F0ZWQgdG8gZ2V0IHByb3BlciBhbGlnbm1lbnQKKwlkbWFfYWRkcl90IGRtYV9kZXNjX3BoeXNfYWRkcjsJLy8gcGh5c2ljYWwgYWRkcmVzcyBvZiBkbWEgZGVzY3JpcHRvciBhcnJheQorCXVuc2lnbmVkIGludCBudW1fZG1hX2Rlc2NyaXB0b3JzOworCXVpbnQzMl90ICpkZXNjX2Rpb19idWZmZXJbTlVNX0RNQV9ERVNDUklQVE9SU107CS8vIHBvaW50ZXIgdG8gc3RhcnQgb2YgYnVmZmVycyBpbmRleGVkIGJ5IGRlc2NyaXB0b3IKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfaW5kZXg7CS8vIGluZGV4IG9mIHRoZSBkbWEgZGVzY3JpcHRvciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkCisJdW5zaWduZWQgaW50IHR4X2ZpZm9fc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhfZmlmb19zaXplOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGlvX2NvdW50OworCXZvbGF0aWxlIHVpbnQzMl90IGJpdHNbMjRdOwkvLyBzb2Z0d2FyZSBjb3BpZXMgb2YgdmFsdWVzIHdyaXR0ZW4gdG8gaHBkaSByZWdpc3RlcnMKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZTsJLy8gbnVtYmVyIG9mIGJ5dGVzIGF0IHdoaWNoIHRvIGdlbmVyYXRlIENPTUVESV9DQl9CTE9DSyBldmVudHMKKwl1bnNpZ25lZCBkaW9fY29uZmlnX291dHB1dDoxOworfTsKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBocGRpX3ByaXZhdGUgKnByaXYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+cHJpdmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9ocGRpID0geworICAgICAgZHJpdmVyX25hbWU6ImdzY19ocGRpIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpocGRpX2F0dGFjaCwKKyAgICAgIGRldGFjaDpocGRpX2RldGFjaCwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2hwZGksIGhwZGlfcGNpX3RhYmxlKTsKKworc3RhdGljIGludCBkaW9fY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCA9IDE7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCA9IDA7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQlwcml2KGRldiktPgorCQkJZGlvX2NvbmZpZ19vdXRwdXQgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19CTE9DS19TSVpFOgorCQlyZXR1cm4gZGlvX2NvbmZpZ19ibG9ja19zaXplKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXdyaXRlbCgwLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0lOVFJDU19SRUcpOworfQorCisvLyBpbml0aWFsaXplIHBseDkwODAgY2hpcAorc3RhdGljIHZvaWQgaW5pdF9wbHg5MDgwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVpbnQzMl90IGJpdHM7CisJdm9pZCAqcGx4X2lvYmFzZSA9IHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2U7CisKKwkvLyBwbHg5MDgwIGR1bXAKKwlERUJVR19QUklOVCgiIHBseCBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGlkIGJpdHMgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9JRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBjb250cm9sIHJlZyAweCV4XG4iLAorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHKSk7CisKKwlERUJVR19QUklOVCgiIHBseCByZXZpc2lvbiAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFVklTSU9OX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgbW9kZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAxIG1vZGUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUExX01PREVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBwY2kgYWRkcmVzcyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBsb2NhbCBhZGRyZXNzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9MT0NBTF9BRERSRVNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgdHJhbnNmZXIgc2l6ZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIGRlc2NyaXB0b3IgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBjb21tYW5kIHN0YXR1cyAweCV4XG4iLAorCQlyZWFkYihwbHhfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCB0aHJlc2hvbGQgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBiaWdlbmQgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9CSUdFTkRfUkVHKSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJYml0cyA9IEJJR0VORF9ETUEwIHwgQklHRU5EX0RNQTE7CisjZWxzZQorCWJpdHMgPSAwOworI2VuZGlmCisJd3JpdGVsKGJpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfQklHRU5EX1JFRyk7CisKKwlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisKKwlhYm9ydF9kbWEoZGV2LCAwKTsKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCS8vIGNvbmZpZ3VyZSBkbWEwIG1vZGUKKwliaXRzID0gMDsKKwkvLyBlbmFibGUgcmVhZHkgaW5wdXQKKwliaXRzIHw9IFBMWF9ETUFfRU5fUkVBRFlJTl9CSVQ7CisJLy8gZW5hYmxlIGRtYSBjaGFpbmluZworCWJpdHMgfD0gUExYX0VOX0NIQUlOX0JJVDsKKwkvLyBlbmFibGUgaW50ZXJydXB0IG9uIGRtYSBkb25lIChwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMsIHNpbmNlIGNoYWluIG5ldmVyIGZpbmlzaGVzKQorCWJpdHMgfD0gUExYX0VOX0RNQV9ET05FX0lOVFJfQklUOworCS8vIGRvbid0IGluY3JlbWVudCBsb2NhbCBhZGRyZXNzIGR1cmluZyB0cmFuc2ZlcnMgKHdlIGFyZSB0cmFuc2ZlcnJpbmcgZnJvbSBhIGZpeGVkIGZpZm8gcmVnaXN0ZXIpCisJYml0cyB8PSBQTFhfTE9DQUxfQUREUl9DT05TVF9CSVQ7CisJLy8gcm91dGUgZG1hIGludGVycnVwdCB0byBwY2kgYnVzCisJYml0cyB8PSBQTFhfRE1BX0lOVFJfUENJX0JJVDsKKwkvLyBlbmFibGUgZGVtYW5kIG1vZGUKKwliaXRzIHw9IFBMWF9ERU1BTkRfTU9ERV9CSVQ7CisJLy8gZW5hYmxlIGxvY2FsIGJ1cnN0IG1vZGUKKwliaXRzIHw9IFBMWF9ETUFfTE9DQUxfQlVSU1RfRU5fQklUOworCWJpdHMgfD0gUExYX0xPQ0FMX0JVU18zMl9XSURFX0JJVFM7CisJd3JpdGVsKGJpdHMsIHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9NT0RFX1JFRyk7Cit9CisKKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4KKyAqLworc3RhdGljIGludCBzZXR1cF9zdWJkZXZpY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworLyoJZGV2LT53cml0ZV9zdWJkZXYgPSBzOyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRFQUJMRSB8IFNERl9MU0FNUEwgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gMzI7CisJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2NvbmZpZyA9IGRpb19jb25maWdfaW5zbjsKKwlzLT5kb19jbWQgPSBocGRpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gaHBkaV9jbWRfdGVzdDsKKwlzLT5jYW5jZWwgPSBocGRpX2NhbmNlbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfaHBkaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1aW50MzJfdCBwbHhfaW50Y3NyX2JpdHM7CisKKwl3cml0ZWwoQk9BUkRfUkVTRVRfQklULCBwcml2KGRldiktPmhwZGlfaW9iYXNlICsgQk9BUkRfQ09OVFJPTF9SRUcpOworCWNvbWVkaV91ZGVsYXkoMTApOworCisJd3JpdGVsKGFsbW9zdF9lbXB0eV9iaXRzKDMyKSB8IGFsbW9zdF9mdWxsX2JpdHMoMzIpLAorCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgUlhfUFJPR19BTE1PU1RfUkVHKTsKKwl3cml0ZWwoYWxtb3N0X2VtcHR5X2JpdHMoMzIpIHwgYWxtb3N0X2Z1bGxfYml0cygzMiksCisJCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBUWF9QUk9HX0FMTU9TVF9SRUcpOworCisJcHJpdihkZXYpLT50eF9maWZvX3NpemUgPSBmaWZvX3NpemUocmVhZGwocHJpdihkZXYpLT5ocGRpX2lvYmFzZSArCisJCQlUWF9GSUZPX1NJWkVfUkVHKSk7CisJcHJpdihkZXYpLT5yeF9maWZvX3NpemUgPSBmaWZvX3NpemUocmVhZGwocHJpdihkZXYpLT5ocGRpX2lvYmFzZSArCisJCQlSWF9GSUZPX1NJWkVfUkVHKSk7CisKKwl3cml0ZWwoMCwgcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIElOVEVSUlVQVF9DT05UUk9MX1JFRyk7CisKKwkvLyBlbmFibGUgaW50ZXJydXB0cworCXBseF9pbnRjc3JfYml0cyA9CisJCUlDU19BRVJSIHwgSUNTX1BFUlIgfCBJQ1NfUElFIHwgSUNTX1BMSUUgfCBJQ1NfUEFJRSB8IElDU19MSUUgfAorCQlJQ1NfRE1BMF9FOworCXdyaXRlbChwbHhfaW50Y3NyX2JpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gc2V0dXAgZG1hIGRlc2NyaXB0b3JzIHNvIGEgbGluayBjb21wbGV0ZXMgZXZlcnkgJ3RyYW5zZmVyX3NpemUnIGJ5dGVzCitzdGF0aWMgaW50IHNldHVwX2RtYV9kZXNjcmlwdG9ycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2luZGV4LCBidWZmZXJfb2Zmc2V0OworCXVpbnQzMl90IG5leHRfYml0cyA9IFBMWF9ERVNDX0lOX1BDSV9CSVQgfCBQTFhfSU5UUl9URVJNX0NPVU5UIHwKKwkJUExYX1hGRVJfTE9DQUxfVE9fUENJOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHRyYW5zZmVyX3NpemUgPiBETUFfQlVGRkVSX1NJWkUpCisJCXRyYW5zZmVyX3NpemUgPSBETUFfQlVGRkVSX1NJWkU7CisJdHJhbnNmZXJfc2l6ZSAtPSB0cmFuc2Zlcl9zaXplICUgc2l6ZW9mKHVpbnQzMl90KTsKKwlpZiAodHJhbnNmZXJfc2l6ZSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlERUJVR19QUklOVCgiIHRyYW5zZmVyX3NpemUgJWlcbiIsIHRyYW5zZmVyX3NpemUpOworCURFQlVHX1BSSU5UKCIgZGVzY3JpcHRvcnMgYXQgMHglbHhcbiIsCisJCSh1bnNpZ25lZCBsb25nKXByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyKTsKKworCWJ1ZmZlcl9vZmZzZXQgPSAwOworCWJ1ZmZlcl9pbmRleCA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfREVTQ1JJUFRPUlMgJiYKKwkJYnVmZmVyX2luZGV4IDwgTlVNX0RNQV9CVUZGRVJTOyBpKyspIHsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5wY2lfc3RhcnRfYWRkciA9CisJCQljcHVfdG9fbGUzMihwcml2KGRldiktPgorCQkJZGlvX2J1ZmZlcl9waHlzX2FkZHJbYnVmZmVyX2luZGV4XSArIGJ1ZmZlcl9vZmZzZXQpOworCQlwcml2KGRldiktPmRtYV9kZXNjW2ldLmxvY2FsX3N0YXJ0X2FkZHIgPSBjcHVfdG9fbGUzMihGSUZPX1JFRyk7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NbaV0udHJhbnNmZXJfc2l6ZSA9CisJCQljcHVfdG9fbGUzMih0cmFuc2Zlcl9zaXplKTsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5uZXh0ID0KKwkJCWNwdV90b19sZTMyKChwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkciArIChpICsKKwkJCQkJMSkgKgorCQkJCXNpemVvZihwcml2KGRldiktPmRtYV9kZXNjWzBdKSkgfCBuZXh0X2JpdHMpOworCisJCXByaXYoZGV2KS0+ZGVzY19kaW9fYnVmZmVyW2ldID0KKwkJCXByaXYoZGV2KS0+ZGlvX2J1ZmZlcltidWZmZXJfaW5kZXhdICsKKwkJCShidWZmZXJfb2Zmc2V0IC8gc2l6ZW9mKHVpbnQzMl90KSk7CisKKwkJYnVmZmVyX29mZnNldCArPSB0cmFuc2Zlcl9zaXplOworCQlpZiAodHJhbnNmZXJfc2l6ZSArIGJ1ZmZlcl9vZmZzZXQgPiBETUFfQlVGRkVSX1NJWkUpIHsKKwkJCWJ1ZmZlcl9vZmZzZXQgPSAwOworCQkJYnVmZmVyX2luZGV4Kys7CisJCX0KKworCQlERUJVR19QUklOVCgiIGRlc2MgJWlcbiIsIGkpOworCQlERUJVR19QUklOVCgiIHN0YXJ0IGFkZHIgdmlydCAweCVwLCBwaHlzIDB4JWx4XG4iLAorCQkJcHJpdihkZXYpLT5kZXNjX2Rpb19idWZmZXJbaV0sCisJCQkodW5zaWduZWQgbG9uZylwcml2KGRldiktPmRtYV9kZXNjW2ldLnBjaV9zdGFydF9hZGRyKTsKKwkJREVCVUdfUFJJTlQoIiBuZXh0IDB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5uZXh0KTsKKwl9CisJcHJpdihkZXYpLT5udW1fZG1hX2Rlc2NyaXB0b3JzID0gaTsKKwkvLyBmaXggbGFzdCBkZXNjcmlwdG9yIHRvIHBvaW50IGJhY2sgdG8gZmlyc3QKKwlwcml2KGRldiktPmRtYV9kZXNjW2kgLSAxXS5uZXh0ID0KKwkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5kbWFfZGVzY19waHlzX2FkZHIgfCBuZXh0X2JpdHMpOworCURFQlVHX1BSSU5UKCIgZGVzYyAlaSBuZXh0IGZpeHVwIDB4JWx4XG4iLCBpIC0gMSwKKwkJKHVuc2lnbmVkIGxvbmcpcHJpdihkZXYpLT5kbWFfZGVzY1tpIC0gMV0ubmV4dCk7CisKKwlwcml2KGRldiktPmJsb2NrX3NpemUgPSB0cmFuc2Zlcl9zaXplOworCisJcmV0dXJuIHRyYW5zZmVyX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgaHBkaV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsOworCisJcHJpbnRrKCJjb21lZGklZDogZ3NjX2hwZGlcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGhwZGlfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lkZXYgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBudW1fYm9hcmRzKCkgJiYgZGV2LT5ib2FyZF9wdHIgPT0gTlVMTDsgaSsrKSB7CisJCWRvIHsKKwkJCXBjaWRldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfUExYLAorCQkJCWhwZGlfYm9hcmRzW2ldLmRldmljZV9pZCwgUENJX1ZFTkRPUl9JRF9QTFgsCisJCQkJaHBkaV9ib2FyZHNbaV0uc3ViZGV2aWNlX2lkLCBwY2lkZXYpOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChwY2lkZXYpIHsKKwkJCQlwcml2KGRldiktPmh3X2RldiA9IHBjaWRldjsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IGhwZGlfYm9hcmRzICsgaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAocGNpZGV2ICE9IE5VTEwpOworCX0KKwlpZiAoZGV2LT5ib2FyZF9wdHIgPT0gTlVMTCkgeworCQlwcmludGsoImdzY19ocGRpOiBubyBocGRpIGNhcmQgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwcmludGsoImdzY19ocGRpOiBmb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIGJvYXJkKGRldiktPm5hbWUsCisJCXBjaWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKTsKKworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIGRyaXZlcl9ocGRpLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiIGZhaWxlZCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwkvL0luaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKKworCXByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIFBMWDkwODBfQkFERFJJTkRFWCk7CisJcHJpdihkZXYpLT5ocGRpX3BoeXNfaW9iYXNlID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgSFBESV9CQUREUklOREVYKTsKKworCS8vIHJlbWFwLCB3b24ndCB3b3JrIHdpdGggMi4wIGtlcm5lbHMgYnV0IHdobyBjYXJlcworCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgPSBpb3JlbWFwKHByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSwKKwkJcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIFBMWDkwODBfQkFERFJJTkRFWCkpOworCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgPSBpb3JlbWFwKHByaXYoZGV2KS0+aHBkaV9waHlzX2lvYmFzZSwKKwkJcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIEhQRElfQkFERFJJTkRFWCkpOworCWlmICghcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSB8fCAhcHJpdihkZXYpLT5ocGRpX2lvYmFzZSkgeworCQlwcmludGsoIiBmYWlsZWQgdG8gcmVtYXAgaW8gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJREVCVUdfUFJJTlQoIiBwbHg5MDgwIHJlbWFwcGVkIHRvIDB4JXBcbiIsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpOworCURFQlVHX1BSSU5UKCIgaHBkaSByZW1hcHBlZCB0byAweCVwXG4iLCBwcml2KGRldiktPmhwZGlfaW9iYXNlKTsKKworCWluaXRfcGx4OTA4MChkZXYpOworCisJLy8gZ2V0IGlycQorCWlmIChjb21lZGlfcmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIGhhbmRsZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJZHJpdmVyX2hwZGkuZHJpdmVyX25hbWUsIGRldikpIHsKKwkJcHJpbnRrKCIgdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgcGNpZGV2LT5pcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBwY2lkZXYtPmlycTsKKworCXByaW50aygiIGlycSAldVxuIiwgZGV2LT5pcnEpOworCisJLy8gYWxvY2F0ZSBwY2kgZG1hIGJ1ZmZlcnMKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9CVUZGRVJTOyBpKyspIHsKKwkJcHJpdihkZXYpLT5kaW9fYnVmZmVyW2ldID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LCBETUFfQlVGRkVSX1NJWkUsCisJCQkmcHJpdihkZXYpLT5kaW9fYnVmZmVyX3BoeXNfYWRkcltpXSk7CisJCURFQlVHX1BSSU5UKCJkaW9fYnVmZmVyIGF0IHZpcnQgMHglcCwgcGh5cyAweCVseFxuIiwKKwkJCXByaXYoZGV2KS0+ZGlvX2J1ZmZlcltpXSwKKwkJCSh1bnNpZ25lZCBsb25nKXByaXYoZGV2KS0+ZGlvX2J1ZmZlcl9waHlzX2FkZHJbaV0pOworCX0KKwkvLyBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvcnMKKwlwcml2KGRldiktPmRtYV9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqIE5VTV9ETUFfREVTQ1JJUFRPUlMsCisJCSZwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkcik7CisJaWYgKHByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyICYgMHhmKSB7CisJCXByaW50aygiIGRtYSBkZXNjcmlwdG9ycyBub3QgcXVhZC13b3JkIGFsaWduZWQgKGJ1ZylcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR2YWwgPSBzZXR1cF9kbWFfZGVzY3JpcHRvcnMoZGV2LCAweDEwMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gc2V0dXBfc3ViZGV2aWNlcyhkZXYpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIGluaXRfaHBkaShkZXYpOworfQorCitzdGF0aWMgaW50IGhwZGlfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogZ3NjX2hwZGk6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAocHJpdihkZXYpKSB7CisJCWlmIChwcml2KGRldiktPmh3X2RldikgeworCQkJaWYgKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpIHsKKwkJCQlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpOworCQkJfQorCQkJaWYgKHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UpCisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UpOworCQkJLy8gZnJlZSBwY2kgZG1hIGJ1ZmZlcnMKKwkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRE1BX0JVRkZFUlM7IGkrKykgeworCQkJCWlmIChwcml2KGRldiktPmRpb19idWZmZXJbaV0pCisJCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJCQlwcml2KGRldiktPmRpb19idWZmZXJbaV0sCisJCQkJCQlwcml2KGRldiktPgorCQkJCQkJZGlvX2J1ZmZlcl9waHlzX2FkZHJbaV0pOworCQkJfQorCQkJLy8gZnJlZSBkbWEgZGVzY3JpcHRvcnMKKwkJCWlmIChwcml2KGRldiktPmRtYV9kZXNjKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqCisJCQkJCU5VTV9ETUFfREVTQ1JJUFRPUlMsCisJCQkJCXByaXYoZGV2KS0+ZG1hX2Rlc2MsCisJCQkJCXByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyKTsKKwkJCWlmIChwcml2KGRldiktPmhwZGlfcGh5c19pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUocHJpdihkZXYpLT5od19kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQocHJpdihkZXYpLT5od19kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpb19jb25maWdfYmxvY2tfc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVxdWVzdGVkX2Jsb2NrX3NpemU7CisJaW50IHJldHZhbDsKKworCXJlcXVlc3RlZF9ibG9ja19zaXplID0gZGF0YVsxXTsKKworCXJldHZhbCA9IHNldHVwX2RtYV9kZXNjcmlwdG9ycyhkZXYsIHJlcXVlc3RlZF9ibG9ja19zaXplKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRhdGFbMV0gPSByZXR2YWw7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkaV9jbWRfdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IGk7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8vIHVuaXF1ZW5lc3MgY2hlY2sKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDMyOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gaSkgeworCQkJCS8vIFhYWCBjb3VsZCBzdXBwb3J0IDggY2hhbm5lbHMgb3IgMTYgY2hhbm5lbHMKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiY2hhbmxpc3QgbXVzdCBiZSBjaGFubmVscyAwIHRvIDMxIGluIG9yZGVyIik7CisJCQkJZXJyKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwZGlfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAocHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJcmV0dXJuIGRpX2NtZF90ZXN0KGRldiwgcywgY21kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhwZGlfd3JpdGVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCBiaXRzLAorCXVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJd3JpdGVsKGJpdHMgfCBwcml2KGRldiktPmJpdHNbb2Zmc2V0IC8gc2l6ZW9mKHVpbnQzMl90KV0sCisJCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IGRpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVpbnQzMl90IGJpdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKworCWhwZGlfd3JpdGVsKGRldiwgUlhfRklGT19SRVNFVF9CSVQsIEJPQVJEX0NPTlRST0xfUkVHKTsKKworCURFQlVHX1BSSU5UKCJocGRpOiBpbiBkaV9jbWRcbiIpOworCisJYWJvcnRfZG1hKGRldiwgMCk7CisKKwlwcml2KGRldiktPmRtYV9kZXNjX2luZGV4ID0gMDsKKworCS8qIFRoZXNlIHJlZ2lzdGVyIGFyZSBzdXBwb3NlZGx5IHVudXNlZCBkdXJpbmcgY2hhaW5lZCBkbWEsCisJICogYnV0IEkgaGF2ZSBmb3VuZCB0aGF0IGxlZnQgb3ZlciB2YWx1ZXMgZnJvbSBsYXN0IG9wZXJhdGlvbgorCSAqIG9jY2FzaW9uYWxseSBjYXVzZSBwcm9ibGVtcyB3aXRoIHRyYW5zZmVyIG9mIGZpcnN0IGRtYQorCSAqIGJsb2NrLiAgSW5pdGlhbGl6aW5nIHRoZW0gdG8gemVybyBzZWVtcyB0byBmaXggdGhlIHByb2JsZW0uICovCisJd3JpdGVsKDAsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9UUkFOU0ZFUl9TSVpFX1JFRyk7CisJd3JpdGVsKDAsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUcpOworCXdyaXRlbCgwLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfTE9DQUxfQUREUkVTU19SRUcpOworCS8vIGdpdmUgbG9jYXRpb24gb2YgZmlyc3QgZG1hIGRlc2NyaXB0b3IKKwliaXRzID0gcHJpdihkZXYpLT4KKwkJZG1hX2Rlc2NfcGh5c19hZGRyIHwgUExYX0RFU0NfSU5fUENJX0JJVCB8IFBMWF9JTlRSX1RFUk1fQ09VTlQgfAorCQlQTFhfWEZFUl9MT0NBTF9UT19QQ0k7CisJd3JpdGVsKGJpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRyk7CisKKwkvLyBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkvLyBlbmFibGUgZG1hIHRyYW5zZmVyCisJd3JpdGViKFBMWF9ETUFfRU5fQklUIHwgUExYX0RNQV9TVEFSVF9CSVQgfCBQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJcHJpdihkZXYpLT5kaW9fY291bnQgPSBjbWQtPnN0b3BfYXJnOworCWVsc2UKKwkJcHJpdihkZXYpLT5kaW9fY291bnQgPSAxOworCisJLy8gY2xlYXIgb3Zlci91bmRlciBydW4gc3RhdHVzIGZsYWdzCisJd3JpdGVsKFJYX1VOREVSUlVOX0JJVCB8IFJYX09WRVJSVU5fQklULAorCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgQk9BUkRfU1RBVFVTX1JFRyk7CisJLy8gZW5hYmxlIGludGVycnVwdHMKKwl3cml0ZWwoaW50cl9iaXQoUlhfRlVMTF9JTlRSKSwKKwkJcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIElOVEVSUlVQVF9DT05UUk9MX1JFRyk7CisKKwlERUJVR19QUklOVCgiaHBkaTogc3RhcnRpbmcgcnhcbiIpOworCWhwZGlfd3JpdGVsKGRldiwgUlhfRU5BQkxFX0JJVCwgQk9BUkRfQ09OVFJPTF9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHBkaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJcmV0dXJuIGRpX2NtZChkZXYsIHMpOworfQorCitzdGF0aWMgdm9pZCBkcmFpbl9kbWFfYnVmZmVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBkZXYtPnJlYWRfc3ViZGV2LT5hc3luYzsKKwl1aW50MzJfdCBuZXh0X3RyYW5zZmVyX2FkZHI7CisJaW50IGo7CisJaW50IG51bV9zYW1wbGVzID0gMDsKKwl2b2lkICpwY2lfYWRkcl9yZWc7CisKKwlpZiAoY2hhbm5lbCkKKwkJcGNpX2FkZHJfcmVnID0KKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9QQ0lfQUREUkVTU19SRUc7CisJZWxzZQorCQlwY2lfYWRkcl9yZWcgPQorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRzsKKworCS8vIGxvb3AgdW50aWwgd2UgaGF2ZSByZWFkIGFsbCB0aGUgZnVsbCBidWZmZXJzCisJaiA9IDA7CisJZm9yIChuZXh0X3RyYW5zZmVyX2FkZHIgPSByZWFkbChwY2lfYWRkcl9yZWcpOworCQkobmV4dF90cmFuc2Zlcl9hZGRyIDwKKwkJCWxlMzJfdG9fY3B1KHByaXYoZGV2KS0+ZG1hX2Rlc2NbcHJpdihkZXYpLT4KKwkJCQkJZG1hX2Rlc2NfaW5kZXhdLnBjaV9zdGFydF9hZGRyKQorCQkJfHwgbmV4dF90cmFuc2Zlcl9hZGRyID49CisJCQlsZTMyX3RvX2NwdShwcml2KGRldiktPmRtYV9kZXNjW3ByaXYoZGV2KS0+CisJCQkJCWRtYV9kZXNjX2luZGV4XS5wY2lfc3RhcnRfYWRkcikgKworCQkJcHJpdihkZXYpLT5ibG9ja19zaXplKQorCQkmJiBqIDwgcHJpdihkZXYpLT5udW1fZG1hX2Rlc2NyaXB0b3JzOyBqKyspIHsKKwkJLy8gdHJhbnNmZXIgZGF0YSBmcm9tIGRtYSBidWZmZXIgdG8gY29tZWRpIGJ1ZmZlcgorCQludW1fc2FtcGxlcyA9IHByaXYoZGV2KS0+YmxvY2tfc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7CisJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmIChudW1fc2FtcGxlcyA+IHByaXYoZGV2KS0+ZGlvX2NvdW50KQorCQkJCW51bV9zYW1wbGVzID0gcHJpdihkZXYpLT5kaW9fY291bnQ7CisJCQlwcml2KGRldiktPmRpb19jb3VudCAtPSBudW1fc2FtcGxlczsKKwkJfQorCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKGRldi0+cmVhZF9zdWJkZXYsCisJCQlwcml2KGRldiktPmRlc2NfZGlvX2J1ZmZlcltwcml2KGRldiktPmRtYV9kZXNjX2luZGV4XSwKKwkJCW51bV9zYW1wbGVzICogc2l6ZW9mKHVpbnQzMl90KSk7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NfaW5kZXgrKzsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY19pbmRleCAlPSBwcml2KGRldiktPm51bV9kbWFfZGVzY3JpcHRvcnM7CisKKwkJREVCVUdfUFJJTlQoIm5leHQgZGVzYyBhZGRyIDB4JWx4XG4iLCAodW5zaWduZWQgbG9uZykKKwkJCXByaXYoZGV2KS0+ZG1hX2Rlc2NbcHJpdihkZXYpLT5kbWFfZGVzY19pbmRleF0ubmV4dCk7CisJCURFQlVHX1BSSU5UKCJwY2kgYWRkciByZWcgMHgleFxuIiwgbmV4dF90cmFuc2Zlcl9hZGRyKTsKKwl9CisJLy8gWFhYIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1biBzb21laG93Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJdWludDMyX3QgaHBkaV9pbnRyX3N0YXR1cywgaHBkaV9ib2FyZF9zdGF0dXM7CisJdWludDMyX3QgcGx4X3N0YXR1czsKKwl1aW50MzJfdCBwbHhfYml0czsKKwl1aW50OF90IGRtYTBfc3RhdHVzLCBkbWExX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlwbHhfc3RhdHVzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKKwlpZiAoKHBseF9zdGF0dXMgJiAoSUNTX0RNQTBfQSB8IElDU19ETUExX0EgfCBJQ1NfTElBKSkgPT0gMCkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaHBkaV9pbnRyX3N0YXR1cyA9IHJlYWRsKHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBJTlRFUlJVUFRfU1RBVFVTX1JFRyk7CisJaHBkaV9ib2FyZF9zdGF0dXMgPSByZWFkbChwcml2KGRldiktPmhwZGlfaW9iYXNlICsgQk9BUkRfU1RBVFVTX1JFRyk7CisKKwlhc3luYy0+ZXZlbnRzID0gMDsKKworCWlmIChocGRpX2ludHJfc3RhdHVzKSB7CisJCURFQlVHX1BSSU5UKCJocGRpOiBpbnRyIHN0YXR1cyAweCV4LCAiLCBocGRpX2ludHJfc3RhdHVzKTsKKwkJd3JpdGVsKGhwZGlfaW50cl9zdGF0dXMsCisJCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgSU5URVJSVVBUX1NUQVRVU19SRUcpOworCX0KKwkvLyBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRtYTBfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMF9BKSB7CS8vIGRtYSBjaGFuIDAgaW50ZXJydXB0CisJCXdyaXRlYigoZG1hMF9zdGF0dXMgJiBQTFhfRE1BX0VOX0JJVCkgfCBQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisKKwkJREVCVUdfUFJJTlQoImRtYTAgc3RhdHVzIDB4JXhcbiIsIGRtYTBfc3RhdHVzKTsKKwkJaWYgKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHsKKwkJCWRyYWluX2RtYV9idWZmZXJzKGRldiwgMCk7CisJCX0KKwkJREVCVUdfUFJJTlQoIiBjbGVhcmVkIGRtYSBjaDAgaW50ZXJydXB0XG4iKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZG1hMV9zdGF0dXMgPSByZWFkYihwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwlpZiAocGx4X3N0YXR1cyAmIElDU19ETUExX0EpCS8vIFhYWAorCXsJCQkvLyBkbWEgY2hhbiAxIGludGVycnVwdAorCQl3cml0ZWIoKGRtYTFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9DU19SRUcpOworCQlERUJVR19QUklOVCgiZG1hMSBzdGF0dXMgMHgleFxuIiwgZG1hMV9zdGF0dXMpOworCisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBkbWEgY2gxIGludGVycnVwdFxuIik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBjbGVhciBwb3NzaWJsZSBwbHg5MDgwIGludGVycnVwdCBzb3VyY2VzCisJaWYgKHBseF9zdGF0dXMgJiBJQ1NfTERJQSkgewkvLyBjbGVhciBsb2NhbCBkb29yYmVsbCBpbnRlcnJ1cHQKKwkJcGx4X2JpdHMgPSByZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RCUl9PVVRfUkVHKTsKKwkJd3JpdGVsKHBseF9iaXRzLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RCUl9PVVRfUkVHKTsKKwkJREVCVUdfUFJJTlQoIiBjbGVhcmVkIGxvY2FsIGRvb3JiZWxsIGJpdHMgMHgleFxuIiwgcGx4X2JpdHMpOworCX0KKworCWlmIChocGRpX2JvYXJkX3N0YXR1cyAmIFJYX09WRVJSVU5fQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyeCBmaWZvIG92ZXJydW4iKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQlERUJVR19QUklOVCgiZG1hMF9zdGF0dXMgMHgleFxuIiwKKwkJCShpbnQpcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCQkJUExYX0RNQTBfQ1NfUkVHKSk7CisJfQorCisJaWYgKGhwZGlfYm9hcmRfc3RhdHVzICYgUlhfVU5ERVJSVU5fQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyeCBmaWZvIHVuZGVycnVuIik7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwl9CisKKwlpZiAocHJpdihkZXYpLT5kaW9fY291bnQgPT0gMCkKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCisJREVCVUdfUFJJTlQoImJvYXJkIHN0YXR1cyAweCV4LCAiLCBocGRpX2JvYXJkX3N0YXR1cyk7CisJREVCVUdfUFJJTlQoInBseCBzdGF0dXMgMHgleFxuIiwgcGx4X3N0YXR1cyk7CisJaWYgKGFzeW5jLT5ldmVudHMpCisJCURFQlVHX1BSSU5UKCIgZXZlbnRzIDB4JXhcbiIsIGFzeW5jLT5ldmVudHMpOworCisJY2ZjX2hhbmRsZV9ldmVudHMoZGV2LCBzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXBseDkwODBfYWJvcnRfZG1hKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UsIGNoYW5uZWwpOworCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBocGRpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWhwZGlfd3JpdGVsKGRldiwgMCwgQk9BUkRfQ09OVFJPTF9SRUcpOworCisJd3JpdGVsKDAsIHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBJTlRFUlJVUFRfQ09OVFJPTF9SRUcpOworCisJYWJvcnRfZG1hKGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYwppbmRleCA1OTE0NGQ3Li4xNWZjZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCkBAIC02MSw3ICs2MSw3IEBACiAKICNkZWZpbmUgSUNQX01VTFRJX0VYVERFQlVHCiAKLS8vIEhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcworLyogIEhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLwogI2RlZmluZSBUWVBFX0lDUF9NVUxUSQkwCiAKICNkZWZpbmUgSU9SQU5HRV9JQ1BfTVVMVEkgCTMyCkBAIC04MSwyMCArODEsMjAgQEAKIAogI2RlZmluZSBJQ1BfTVVMVElfU0laRQkJMHgyMAkvKiAzMiBieXRlcyAqLwogCi0vLyBEZWZpbmUgYml0cyBmcm9tIEFEQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlcgorLyogIERlZmluZSBiaXRzIGZyb20gQURDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lCUFEQ19TVAkJMHgwMDAxCS8qIFN0YXJ0IEFEQyAqLwogI2RlZmluZQlBRENfQlNZCQkweDAwMDEJLyogQURDIGJ1c3kgKi8KICNkZWZpbmUgQURDX0JJCQkweDAwMTAJLyogQmlwb2xhciBpbnB1dCByYW5nZSAxID0gYmlwb2xhciAqLwogI2RlZmluZSBBRENfUkEJCTB4MDAyMAkvKiBJbnB1dCByYW5nZSAwID0gNVYsIDEgPSAxMFYgKi8KICNkZWZpbmUJQURDX0RJCQkweDAwNDAJLyogRGlmZmVyZW50aWFsIGlucHV0IG1vZGUgMSA9IGRpZmZlcmVudGlhbCAqLwogCi0vLyBEZWZpbmUgYml0cyBmcm9tIERBQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlcgorLyogIERlZmluZSBiaXRzIGZyb20gREFDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lCURBQ19TVAkJMHgwMDAxCS8qIFN0YXJ0IERBQyAqLwogI2RlZmluZSBEQUNfQlNZCQkweDAwMDEJLyogREFDIGJ1c3kgKi8KICNkZWZpbmUJREFDX0JJCQkweDAwMTAJLyogQmlwb2xhciBpbnB1dCByYW5nZSAxID0gYmlwb2xhciAqLwogI2RlZmluZQlEQUNfUkEJCTB4MDAyMAkvKiBJbnB1dCByYW5nZSAwID0gNVYsIDEgPSAxMFYgKi8KIAotLy8gRGVmaW5lIGJpdHMgZnJvbSBpbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyByZWdpc3RlcnMKKy8qICBEZWZpbmUgYml0cyBmcm9tIGludGVycnVwdCBlbmFibGUvc3RhdHVzIHJlZ2lzdGVycyAqLwogI2RlZmluZQlBRENfUkVBRFkJMHgwMDAxCS8qIEEvZCBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogI2RlZmluZQlEQUNfUkVBRFkJMHgwMDAyCS8qIEQvYSBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogI2RlZmluZQlET1VUX0VSUk9SCTB4MDAwNAkvKiBEaWdpdGFsIG91dHB1dCBlcnJvciBpbnRlcnJ1cHQgKi8KQEAgLTEwNCwxMSArMTA0LDExIEBACiAjZGVmaW5lCUNJRTIJCTB4MDA0MAkvKiBDb3VudGVyIDIgb3ZlcnJ1biBpbnRlcnJ1cHQgKi8KICNkZWZpbmUJQ0lFMwkJMHgwMDgwCS8qIENvdW50ZXIgMyBvdmVycnVuIGludGVycnVwdCAqLwogCi0vLyBVc2VmdWwgZGVmaW5pdGlvbnMKLSNkZWZpbmUJU3RhdHVzX0lSUQkweDAwZmYJLy8gQWxsIGludGVycnVwdHMKKy8qICBVc2VmdWwgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJU3RhdHVzX0lSUQkweDAwZmYJLyogIEFsbCBpbnRlcnJ1cHRzICovCiAKLS8vIERlZmluZSBhbmFsb2d1ZSByYW5nZQotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYW5hbG9nID0geyA0LCB7CisvKiAgRGVmaW5lIGFuYWxvZ3VlIHJhbmdlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYW5hbG9nID0geyA0LCB7CiAJCQlVTklfUkFOR0UoNSksCiAJCQlVTklfUkFOR0UoMTApLAogCQkJQklQX1JBTkdFKDUpLApAQCAtMTIzLDggKzEyMyw4IEBACiAJRm9yd2FyZCBkZWNsYXJhdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpOwotc3RhdGljIGludCBpY3BfbXVsdGlfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBpY3BfbXVsdGlfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IGljcF9tdWx0aV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEzMyw3OSArMTMzLDc5IEBACiAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBjaV9saXN0X2J1aWxkZWQgPSAwOwkvKj4wIGxpc3Qgb2YgY2FyZCBpcyBrbm93biAqLwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhciAqbmFtZTsJLy8gZHJpdmVyIG5hbWUKK3N0cnVjdCBib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBkcml2ZXIgbmFtZSAqLwogCWludCBkZXZpY2VfaWQ7Ci0JaW50IGlvcmFuZ2U7CQkvLyBJL08gcmFuZ2UgbGVuCi0JY2hhciBoYXZlX2lycTsJCS8vIDE9Y2FyZCBzdXBwb3J0IElSUQotCWNoYXIgY2FyZHR5cGU7CQkvLyAwPUlDUCBNdWx0aQotCWludCBuX2FpY2hhbjsJCS8vIG51bSBvZiBBL0QgY2hhbnMKLQlpbnQgbl9haWNoYW5kOwkJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZmIG1vZGUKLQlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCi0JaW50IG5fZGljaGFuOwkJLy8gbnVtIG9mIERJIGNoYW5zCi0JaW50IG5fZG9jaGFuOwkJLy8gbnVtIG9mIERPIGNoYW5zCi0JaW50IG5fY3RyczsJCS8vIG51bSBvZiBjb3VudGVycwotCWludCBhaV9tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBBL0QKLQlpbnQgYW9fbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgRC9BCi0JY29uc3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FpOwkvLyByYW5nZWxpc3QgZm9yIEEvRAotCWNvbnN0IGNoYXIgKnJhbmdlY29kZTsJLy8gcmFuZ2UgY29kZXMgZm9yIHByb2dyYW1taW5nCi0JY29uc3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQotfSBib2FyZHR5cGU7Ci0KLXN0YXRpYyBjb25zdCBib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0gewotCXsiaWNwX211bHRpIiwJCS8vIERyaXZlciBuYW1lCi0JCQlERVZJQ0VfSUQsCS8vIFBDSSBkZXZpY2UgSUQKLQkJCUlPUkFOR0VfSUNQX01VTFRJLAkvLyBJL08gcmFuZ2UgbGVuZ3RoCi0JCQkxLAkvLyAxPUNhcmQgc3VwcG9ydHMgaW50ZXJydXB0cwotCQkJVFlQRV9JQ1BfTVVMVEksCS8vIENhcmQgdHlwZSA9IElDUCBNVUxUSQotCQkJMTYsCS8vIE51bSBvZiBBL0QgY2hhbm5lbHMKLQkJCTgsCS8vIE51bSBvZiBBL0QgY2hhbm5lbHMgaW4gZGlmZiBtb2RlCi0JCQk0LAkvLyBOdW0gb2YgRC9BIGNoYW5uZWxzCi0JCQkxNiwJLy8gTnVtIG9mIGRpZ2l0YWwgaW5wdXRzCi0JCQk4LAkvLyBOdW0gb2YgZGlnaXRhbCBvdXRwdXRzCi0JCQk0LAkvLyBOdW0gb2YgY291bnRlcnMKLQkJCTB4MGZmZiwJLy8gUmVzb2x1dGlvbiBvZiBBL0QKLQkJCTB4MGZmZiwJLy8gUmVzb2x1dGlvbiBvZiBEL0EKLQkJCSZyYW5nZV9hbmFsb2csCS8vIFJhbmdlbGlzdCBmb3IgQS9ECi0JCQlyYW5nZV9jb2Rlc19hbmFsb2csCS8vIFJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZwotCQkmcmFuZ2VfYW5hbG9nfSwJLy8gUmFuZ2VsaXN0IGZvciBEL0EKKwlpbnQgaW9yYW5nZTsJCS8qICBJL08gcmFuZ2UgbGVuICovCisJY2hhciBoYXZlX2lycTsJCS8qICAxPWNhcmQgc3VwcG9ydCBJUlEgKi8KKwljaGFyIGNhcmR0eXBlOwkJLyogIDA9SUNQIE11bHRpICovCisJaW50IG5fYWljaGFuOwkJLyogIG51bSBvZiBBL0QgY2hhbnMgKi8KKwlpbnQgbl9haWNoYW5kOwkJLyogIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlICovCisJaW50IG5fYW9jaGFuOwkJLyogIG51bSBvZiBEL0EgY2hhbnMgKi8KKwlpbnQgbl9kaWNoYW47CQkvKiAgbnVtIG9mIERJIGNoYW5zICovCisJaW50IG5fZG9jaGFuOwkJLyogIG51bSBvZiBETyBjaGFucyAqLworCWludCBuX2N0cnM7CQkvKiAgbnVtIG9mIGNvdW50ZXJzICovCisJaW50IGFpX21heGRhdGE7CQkvKiAgcmVzb2x1dGlvbiBvZiBBL0QgKi8KKwlpbnQgYW9fbWF4ZGF0YTsJCS8qICByZXNvbHV0aW9uIG9mIEQvQSAqLworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYWk7CS8qICByYW5nZWxpc3QgZm9yIEEvRCAqLworCWNvbnN0IGNoYXIgKnJhbmdlY29kZTsJLyogIHJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZyAqLworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYW87CS8qICByYW5nZWxpc3QgZm9yIEQvQSAqLwogfTsKIAotI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2YoYm9hcmR0eXBlKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKKwl7ImljcF9tdWx0aSIsCQkvKiAgRHJpdmVyIG5hbWUgKi8KKwkJCURFVklDRV9JRCwJLyogIFBDSSBkZXZpY2UgSUQgKi8KKwkJCUlPUkFOR0VfSUNQX01VTFRJLAkvKiAgSS9PIHJhbmdlIGxlbmd0aCAqLworCQkJMSwJLyogIDE9Q2FyZCBzdXBwb3J0cyBpbnRlcnJ1cHRzICovCisJCQlUWVBFX0lDUF9NVUxUSSwJLyogIENhcmQgdHlwZSA9IElDUCBNVUxUSSAqLworCQkJMTYsCS8qICBOdW0gb2YgQS9EIGNoYW5uZWxzICovCisJCQk4LAkvKiAgTnVtIG9mIEEvRCBjaGFubmVscyBpbiBkaWZmIG1vZGUgKi8KKwkJCTQsCS8qICBOdW0gb2YgRC9BIGNoYW5uZWxzICovCisJCQkxNiwJLyogIE51bSBvZiBkaWdpdGFsIGlucHV0cyAqLworCQkJOCwJLyogIE51bSBvZiBkaWdpdGFsIG91dHB1dHMgKi8KKwkJCTQsCS8qICBOdW0gb2YgY291bnRlcnMgKi8KKwkJCTB4MGZmZiwJLyogIFJlc29sdXRpb24gb2YgQS9EICovCisJCQkweDBmZmYsCS8qICBSZXNvbHV0aW9uIG9mIEQvQSAqLworCQkJJnJhbmdlX2FuYWxvZywJLyogIFJhbmdlbGlzdCBmb3IgQS9EICovCisJCQlyYW5nZV9jb2Rlc19hbmFsb2csCS8qICBSYW5nZSBjb2RlcyBmb3IgcHJvZ3JhbW1pbmcgKi8KKwkJJnJhbmdlX2FuYWxvZ30sCS8qICBSYW5nZWxpc3QgZm9yIEQvQSAqLworfTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX2ljcF9tdWx0aSA9IHsKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2ljcF9tdWx0aSA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiJpY3BfbXVsdGkiLAotICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAotICAgICAgYXR0YWNoOmljcF9tdWx0aV9hdHRhY2gsCi0gICAgICBkZXRhY2g6aWNwX211bHRpX2RldGFjaCwKLSAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCi0gICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCi0gICAgICBvZmZzZXQ6c2l6ZW9mKGJvYXJkdHlwZSksCisgICAgICBtb2R1bGUgOiBUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaCA6IGljcF9tdWx0aV9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBpY3BfbXVsdGlfZGV0YWNoLAorICAgICAgbnVtX25hbWVzIDogbl9ib2FyZHR5cGVzLAorICAgICAgYm9hcmRfbmFtZSA6ICZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBvZmZzZXQgOiBzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCiB9OwogCiBDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2ljcF9tdWx0aSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsJLy8gcG9pbnRlciB0byBjYXJkCi0JY2hhciB2YWxpZDsJCS8vIGNhcmQgaXMgdXNhYmxlCi0Jdm9pZCAqaW9fYWRkcjsJCS8vIFBvaW50ZXIgdG8gbWFwcGVkIGlvIGFkZHJlc3MKLQlyZXNvdXJjZV9zaXplX3QgcGh5c19pb2Jhc2U7CS8vIFBoeXNpY2FsIGlvIGFkZHJlc3MKLQl1bnNpZ25lZCBpbnQgQWRjQ21kU3RhdHVzOwkvLyBBREMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIKLQl1bnNpZ25lZCBpbnQgRGFjQ21kU3RhdHVzOwkvLyBEQUMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIKLQl1bnNpZ25lZCBpbnQgSW50RW5hYmxlOwkvLyBJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyCi0JdW5zaWduZWQgaW50IEludFN0YXR1czsJLy8gSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlcgotCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMzJdOwkvLyBsaXN0IG9mIHNjYW5lZCBjaGFubmVsCi0JdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfbGVuOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKLQl1bnNpZ25lZCBjaGFyIGFjdF9jaGFubGlzdF9wb3M7CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdAotCXVuc2lnbmVkIGludCAqYWlfY2hhbmxpc3Q7CS8vIGFjdGF1bCBjaGFubGlzdAotCXNhbXBsX3QgKmFpX2RhdGE7CS8vIGRhdGEgYnVmZmVyCi0Jc2FtcGxfdCBhb19kYXRhWzRdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKLQlzYW1wbF90IGRpX2RhdGE7CS8vIERpZ2l0YWwgaW5wdXQgZGF0YQotCXVuc2lnbmVkIGludCBkb19kYXRhOwkvLyBSZW1lbWJlciBkaWdpdGFsIG91dHB1dCBkYXRhCi19IGljcF9tdWx0aV9wcml2YXRlOworc3RydWN0IGljcF9tdWx0aV9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsJLyogIHBvaW50ZXIgdG8gY2FyZCAqLworCWNoYXIgdmFsaWQ7CQkvKiAgY2FyZCBpcyB1c2FibGUgKi8KKwl2b2lkICppb19hZGRyOwkJLyogIFBvaW50ZXIgdG8gbWFwcGVkIGlvIGFkZHJlc3MgKi8KKwlyZXNvdXJjZV9zaXplX3QgcGh5c19pb2Jhc2U7CS8qICBQaHlzaWNhbCBpbyBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IEFkY0NtZFN0YXR1czsJLyogIEFEQyBDb21tYW5kL1N0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBEYWNDbWRTdGF0dXM7CS8qICBEQUMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgSW50RW5hYmxlOwkvKiAgSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBJbnRTdGF0dXM7CS8qICBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGFjdF9jaGFubGlzdFszMl07CS8qICBsaXN0IG9mIHNjYW5lZCBjaGFubmVsICovCisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfbGVuOwkvKiAgbGVuIG9mIHNjYW5saXN0ICovCisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfcG9zOwkvKiAgYWN0dWFsIHBvc2l0aW9uIGluIE1VWCBsaXN0ICovCisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLyogIGFjdGF1bCBjaGFubGlzdCAqLworCXNob3J0ICphaV9kYXRhOwkvKiAgZGF0YSBidWZmZXIgKi8KKwlzaG9ydCBhb19kYXRhWzRdOwkvKiAgZGF0YSBvdXRwdXQgYnVmZmVyICovCisJc2hvcnQgZGlfZGF0YTsJLyogIERpZ2l0YWwgaW5wdXQgZGF0YSAqLworCXVuc2lnbmVkIGludCBkb19kYXRhOwkvKiAgUmVtZW1iZXIgZGlnaXRhbCBvdXRwdXQgZGF0YSAqLworfTsKIAotI2RlZmluZSBkZXZwcml2ICgoaWNwX211bHRpX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCi0jZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBpY3BfbXVsdGlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKIAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjE0LDEyICsyMTQsMTIgQEAKICovCiAKICNpZiAwCi1zdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pOwogI2VuZGlmCi1zdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbik7Ci1zdGF0aWMgaW50IGljcF9tdWx0aV9yZXNldChjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgaWNwX211bHRpX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzYsMzIgKzIzNiwzMiBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlYWRzIGEgc2luZ2xlIGFuYWxvZ3VlIGlucHV0LgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBpbnB1dCBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGFuYWxvZ3VlIGlucHV0IGRhdGEKIAogCVJldHVybnM6aW50CQkJTm11YmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfYWkoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfYWkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG4sIHRpbWVvdXQ7CiAKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKIAlwcmludGsoImljcCBtdWx0aSBFREJHOiBCR046IGljcF9tdWx0aV9pbnNuX3JlYWRfYWkoLi4uKVxuIik7CiAjZW5kaWYKLQkvLyBEaXNhYmxlIEEvRCBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdAorCS8qICBEaXNhYmxlIEEvRCBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogCWRldnByaXYtPkludEVuYWJsZSAmPSB+QURDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCS8vIENsZWFyIGludGVycnVwdCBzdGF0dXMKKwkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCWRldnByaXYtPkludFN0YXR1cyB8PSBBRENfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkvLyBTZXQgdXAgYXBwcm9wcmlhdGUgY2hhbm5lbCwgbW9kZSBhbmQgcmFuZ2UgZGF0YSwgZm9yIHNwZWNpZmllZCBjaGFubmVsCisJLyogIFNldCB1cCBhcHByb3ByaWF0ZSBjaGFubmVsLCBtb2RlIGFuZCByYW5nZSBkYXRhLCBmb3Igc3BlY2lmaWVkIGNoYW5uZWwgKi8KIAlzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCAmaW5zbi0+Y2hhbnNwZWMsIDEpOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC0yNzEsNyArMjcxLDcgQEAKICNlbmRpZgogCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgewotCQkvLyBTZXQgc3RhcnQgQURDIGJpdAorCQkvKiAgU2V0IHN0YXJ0IEFEQyBiaXQgKi8KIAkJZGV2cHJpdi0+QWRjQ21kU3RhdHVzIHw9IEFEQ19TVDsKIAkJd3JpdGV3KGRldnByaXYtPkFkY0NtZFN0YXR1cywKIAkJCWRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQURDX0NTUik7CkBAIC0yODksNyArMjg5LDcgQEAKIAkJCXJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQURDX0NTUikpOwogI2VuZGlmCiAKLQkJLy8gV2FpdCBmb3IgY29udmVyc2lvbiB0byBjb21wbGV0ZSwgb3IgZ2V0IGZlZCB1cCB3YWl0aW5nCisJCS8qICBXYWl0IGZvciBjb252ZXJzaW9uIHRvIGNvbXBsZXRlLCBvciBnZXQgZmVkIHVwIHdhaXRpbmcgKi8KIAkJdGltZW91dCA9IDEwMDsKIAkJd2hpbGUgKHRpbWVvdXQtLSkgewogCQkJaWYgKCEocmVhZHcoZGV2cHJpdi0+aW9fYWRkciArCkBAIC0zMDcsMTkgKzMwNywxOSBAQAogCQkJY29tZWRpX3VkZWxheSgxKTsKIAkJfQogCi0JCS8vIElmIHdlIHJlYWNoIGhlcmUsIGEgdGltZW91dCBoYXMgb2NjdXJyZWQKKwkJLyogIElmIHdlIHJlYWNoIGhlcmUsIGEgdGltZW91dCBoYXMgb2NjdXJyZWQgKi8KIAkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBpbnNuIHRpbWVvdXQiKTsKIAotCQkvLyBEaXNhYmxlIGludGVycnVwdAorCQkvKiAgRGlzYWJsZSBpbnRlcnJ1cHQgKi8KIAkJZGV2cHJpdi0+SW50RW5hYmxlICY9IH5BRENfUkVBRFk7CiAJCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCQkvLyBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzCisJCS8qICBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJCWRldnByaXYtPkludFN0YXR1cyB8PSBBRENfUkVBRFk7CiAJCXdyaXRldyhkZXZwcml2LT5JbnRTdGF0dXMsCiAJCQlkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9TVEFUKTsKIAotCQkvLyBDbGVhciBkYXRhIHJlY2VpdmVkCisJCS8qICBDbGVhciBkYXRhIHJlY2VpdmVkICovCiAJCWRhdGFbbl0gPSAwOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC0zMzIsMTEgKzMzMiwxMSBAQAogCQkJKHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQUkpID4+IDQpICYgMHgwZmZmOwogCX0KIAotCS8vIERpc2FibGUgaW50ZXJydXB0CisJLyogIERpc2FibGUgaW50ZXJydXB0ICovCiAJZGV2cHJpdi0+SW50RW5hYmxlICY9IH5BRENfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludEVuYWJsZSwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfRU4pOwogCi0JLy8gQ2xlYXIgaW50ZXJydXB0IHN0YXR1cworCS8qICBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJZGV2cHJpdi0+SW50U3RhdHVzIHw9IEFEQ19SRUFEWTsKIAl3cml0ZXcoZGV2cHJpdi0+SW50U3RhdHVzLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9TVEFUKTsKIApAQCAtMzU1LDQwICszNTUsNDAgQEAKIAkJVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSBzaW5nbGUgYW5hbG9ndWUgb3V0cHV0LgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fd3JpdGVfYW8oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuLCBjaGFuLCByYW5nZSwgdGltZW91dDsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwIG11bHRpIEVEQkc6IEJHTjogaWNwX211bHRpX2luc25fd3JpdGVfYW8oLi4uKVxuIik7CiAjZW5kaWYKLQkvLyBEaXNhYmxlIEQvQSBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdAorCS8qICBEaXNhYmxlIEQvQSBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogCWRldnByaXYtPkludEVuYWJsZSAmPSB+REFDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCS8vIENsZWFyIGludGVycnVwdCBzdGF0dXMKKwkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCWRldnByaXYtPkludFN0YXR1cyB8PSBEQUNfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkvLyBHZXQgY2hhbm5lbCBudW1iZXIgYW5kIHJhbmdlCisJLyogIEdldCBjaGFubmVsIG51bWJlciBhbmQgcmFuZ2UgKi8KIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CiAKLQkvLyBTZXQgdXAgcmFuZ2UgYW5kIGNoYW5uZWwgZGF0YQotCS8vIEJpdCA0ID0gMSA6IEJpcG9sYXIKLQkvLyBCaXQgNSA9IDAgOiA1VgotCS8vIEJpdCA1ID0gMSA6IDEwVgotCS8vIEJpdHMgOC05IDogQ2hhbm5lbCBudW1iZXIKKwkvKiAgU2V0IHVwIHJhbmdlIGFuZCBjaGFubmVsIGRhdGEgKi8KKwkvKiAgQml0IDQgPSAxIDogQmlwb2xhciAqLworCS8qICBCaXQgNSA9IDAgOiA1ViAqLworCS8qICBCaXQgNSA9IDEgOiAxMFYgKi8KKwkvKiAgQml0cyA4LTkgOiBDaGFubmVsIG51bWJlciAqLwogCWRldnByaXYtPkRhY0NtZFN0YXR1cyAmPSAweGZjY2Y7CiAJZGV2cHJpdi0+RGFjQ21kU3RhdHVzIHw9IHRoaXNfYm9hcmQtPnJhbmdlY29kZVtyYW5nZV07CiAJZGV2cHJpdi0+RGFjQ21kU3RhdHVzIHw9IChjaGFuIDw8IDgpOwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJd3JpdGV3KGRldnByaXYtPkRhY0NtZFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9EQUNfQ1NSKTsKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJLy8gV2FpdCBmb3IgYW5hbG9ndWUgb3V0cHV0IGRhdGEgcmVnaXN0ZXIgdG8gYmUgcmVhZHkgZm9yIG5ldyBkYXRhLCBvciBnZXQgZmVkIHVwIHdhaXRpbmcKKwkJLyogIFdhaXQgZm9yIGFuYWxvZ3VlIG91dHB1dCBkYXRhIHJlZ2lzdGVyIHRvIGJlIHJlYWR5IGZvciBuZXcgZGF0YSwgb3IgZ2V0IGZlZCB1cCB3YWl0aW5nICovCiAJCXRpbWVvdXQgPSAxMDA7CiAJCXdoaWxlICh0aW1lb3V0LS0pIHsKIAkJCWlmICghKHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKwpAQCAtNDE0LDE5ICs0MTQsMTkgQEAKIAkJCWNvbWVkaV91ZGVsYXkoMSk7CiAJCX0KIAotCQkvLyBJZiB3ZSByZWFjaCBoZXJlLCBhIHRpbWVvdXQgaGFzIG9jY3VycmVkCisJCS8qICBJZiB3ZSByZWFjaCBoZXJlLCBhIHRpbWVvdXQgaGFzIG9jY3VycmVkICovCiAJCWNvbWVkaV9lcnJvcihkZXYsICJEL0EgaW5zbiB0aW1lb3V0Iik7CiAKLQkJLy8gRGlzYWJsZSBpbnRlcnJ1cHQKKwkJLyogIERpc2FibGUgaW50ZXJydXB0ICovCiAJCWRldnByaXYtPkludEVuYWJsZSAmPSB+REFDX1JFQURZOwogCQl3cml0ZXcoZGV2cHJpdi0+SW50RW5hYmxlLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9FTik7CiAKLQkJLy8gQ2xlYXIgaW50ZXJydXB0IHN0YXR1cworCQkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCQlkZXZwcml2LT5JbnRTdGF0dXMgfD0gREFDX1JFQURZOwogCQl3cml0ZXcoZGV2cHJpdi0+SW50U3RhdHVzLAogCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkJLy8gQ2xlYXIgZGF0YSByZWNlaXZlZAorCQkvKiAgQ2xlYXIgZGF0YSByZWNlaXZlZCAqLwogCQlkZXZwcml2LT5hb19kYXRhW2NoYW5dID0gMDsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtNDM1LDE2ICs0MzUsMTYgQEAKIAkJcmV0dXJuIC1FVElNRTsKIAogCSAgICAgIGRhY19yZWFkeToKLQkJLy8gV3JpdGUgZGF0YSB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YSByZWdpc3RlcgorCQkvKiAgV3JpdGUgZGF0YSB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YSByZWdpc3RlciAqLwogCQl3cml0ZXcoZGF0YVtuXSwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9BTyk7CiAKLQkJLy8gU2V0IERBQ19TVCBiaXQgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc2VsZWN0ZWQgY2hhbm5lbAorCQkvKiAgU2V0IERBQ19TVCBiaXQgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCQlkZXZwcml2LT5EYWNDbWRTdGF0dXMgfD0gREFDX1NUOwogCQl3cml0ZXcoZGV2cHJpdi0+RGFjQ21kU3RhdHVzLAogCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9EQUNfQ1NSKTsKIAkJZGV2cHJpdi0+RGFjQ21kU3RhdHVzICY9IH5EQUNfU1Q7CiAKLQkJLy8gU2F2ZSBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQkvKiAgU2F2ZSBhbmFsb2d1ZSBvdXRwdXQgZGF0YSAqLwogCQlkZXZwcml2LT5hb19kYXRhW2NoYW5dID0gZGF0YVtuXTsKIAl9CiAKQEAgLTQ2MywyNCArNDYzLDI0IEBACiAJCVRoaXMgZnVuY3Rpb24gcmVhZHMgYSBzaW5nbGUgYW5hbG9ndWUgb3V0cHV0LgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9hbyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbiwgY2hhbjsKIAotCS8vIEdldCBjaGFubmVsIG51bWJlcgorCS8qICBHZXQgY2hhbm5lbCBudW1iZXIgKi8KIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQkvLyBSZWFkIGFuYWxvZ3VlIG91dHB1dHMKKwkvKiAgUmVhZCBhbmFsb2d1ZSBvdXRwdXRzICovCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKIAkJZGF0YVtuXSA9IGRldnByaXYtPmFvX2RhdGFbY2hhbl07CiAKQEAgLTQ5NiwxNyArNDk2LDE3IEBACiAJCVRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGRpZ2l0YWwgaW5wdXRzLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fYml0c19kaShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fYml0c19kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlkYXRhWzFdID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9ESSk7CiAKQEAgLTUyMiwxNyArNTIyLDE3IEBACiAJCVRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBhcHByb3ByaWF0ZSBkaWdpdGFsIG91dHB1dHMuCiAKIAlQYXJhbWV0ZXJzOgotCQljb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCi0JCWxzYW1wbF90ICpkYXRhCQlQb2ludGVyIHRvIGFuYWxvZ3VlIG91dHB1dCBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGFuYWxvZ3VlIG91dHB1dCBkYXRhCiAKIAlSZXR1cm5zOmludAkJCU5tdWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9iaXRzX2RvKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9iaXRzX2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwIG11bHRpIEVEQkc6IEJHTjogaWNwX211bHRpX2luc25fYml0c19kbyguLi4pXG4iKTsKQEAgLTU2NCwxNyArNTY0LDE3IEBACiAJCVRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBjb3VudGVyLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBjb3VudGVyIGRhdGEKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgorCQl1bnNpZ25lZCBpbnQgKmRhdGEJCVBvaW50ZXIgdG8gY291bnRlciBkYXRhCiAKIAlSZXR1cm5zOmludAkJCU5tdWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9yZWFkX2N0cihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9jdHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC01ODgsMTcgKzU4OCwxNyBAQAogCQlUaGlzIGZ1bmN0aW9uIHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgY291bnRlci4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gY291bnRlciBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGNvdW50ZXIgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fd3JpdGVfY3RyKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl93cml0ZV9jdHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC02MjAsNyArNjIwLDcgQEAKICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3NlcnZpY2VfaWNwX211bHRpKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKIAlpbnQgaW50X25vOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC02MjgsMTAgKzYyOCwxMCBAQAogCQlpcnEpOwogI2VuZGlmCiAKLQkvLyBJcyB0aGlzIGludGVycnVwdCBmcm9tIG91ciBib2FyZD8KKwkvKiAgSXMgdGhpcyBpbnRlcnJ1cHQgZnJvbSBvdXIgYm9hcmQ/ICovCiAJaW50X25vID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCkgJiBTdGF0dXNfSVJROwogCWlmICghaW50X25vKQotCQkvLyBObywgZXhpdAorCQkvKiAgTm8sIGV4aXQgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC02MzksNyArNjM5LDcgQEAKIAkJcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCkpOwogI2VuZGlmCiAKLQkvLyBEZXRlcm1pbmUgd2hpY2ggaW50ZXJydXB0IGlzIGFjdGl2ZSAmIGhhbmRsZSBpdAorCS8qICBEZXRlcm1pbmUgd2hpY2ggaW50ZXJydXB0IGlzIGFjdGl2ZSAmIGhhbmRsZSBpdCAqLwogCXN3aXRjaCAoaW50X25vKSB7CiAJY2FzZSBBRENfUkVBRFk6CiAJCWJyZWFrOwpAQCAtNjc5LDggKzY3OSw4IEBACiAJCWlzIGJ1aWx0IGNvcnJlY3RseQogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2V2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQogCQl1bnNpZ25lZCBpbnQgKmNoYW5saXN0CVBvaW50ZXIgdG8gcGFja2VkIGNoYW5uZWwgbGlzdAogCQl1bnNpZ25lZCBpbnQgbl9jaGFuCU51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCiAKQEAgLTY4OSw3ICs2ODksNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC02OTcsMTQgKzY5NywxNCBAQAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwIG11bHRpIEVEQkc6ICBjaGVja19jaGFubmVsX2xpc3QoLi4uLCVkKVxuIiwgbl9jaGFuKTsKICNlbmRpZgotCS8vIENoZWNrIHRoYXQgd2UgYXQgbGVhc3QgaGF2ZSBvbmUgY2hhbm5lbCB0byBjaGVjaworCS8qICBDaGVjayB0aGF0IHdlIGF0IGxlYXN0IGhhdmUgb25lIGNoYW5uZWwgdG8gY2hlY2sgKi8KIAlpZiAobl9jaGFuIDwgMSkgewogCQljb21lZGlfZXJyb3IoZGV2LCAicmFuZ2UvY2hhbm5lbCBsaXN0IGlzIGVtcHR5ISIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JLy8gQ2hlY2sgYWxsIGNoYW5uZWxzCisJLyogIENoZWNrIGFsbCBjaGFubmVscyAqLwogCWZvciAoaSA9IDA7IGkgPCBuX2NoYW47IGkrKykgewotCQkvLyBDaGVjayB0aGF0IGNoYW5uZWwgbnVtYmVyIGlzIDwgbWF4aW11bQorCQkvKiAgQ2hlY2sgdGhhdCBjaGFubmVsIG51bWJlciBpcyA8IG1heGltdW0gKi8KIAkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgewogCQkJaWYgKENSX0NIQU4oY2hhbmxpc3RbaV0pID4gdGhpc19ib2FyZC0+bl9haWNoYW5kKSB7CiAJCQkJY29tZWRpX2Vycm9yKGRldiwKQEAgLTczNCw4ICs3MzQsOCBAQAogCQlTdGF0dXMgcmVnaXN0ZXIuCiAKIAlQYXJhbWV0ZXJzOgotCQljb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCiAJCXVuc2lnbmVkIGludCAqY2hhbmxpc3QJUG9pbnRlciB0byBwYWNrZWQgY2hhbm5lbCBsaXN0CiAJCXVuc2lnbmVkIGludCBuX2NoYW4JTnVtYmVyIG9mIGNoYW5uZWxzIHRvIHNjYW4KIApAQCAtNzQzLDcgKzc0Myw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKQogewogCXVuc2lnbmVkIGludCBpLCByYW5nZSwgY2hhbnByb2c7CkBAIC03NTYsMTAgKzc1NiwxMCBAQAogCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7Ci0JCS8vIEdldCBjaGFubmVsCisJCS8qICBHZXQgY2hhbm5lbCAqLwogCQljaGFucHJvZyA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwogCi0JCS8vIERldGVybWluZSBpZiBpdCBpcyBhIGRpZmZlcmVudGlhbCBjaGFubmVsIChCaXQgMTUgID0gMSkKKwkJLyogIERldGVybWluZSBpZiBpdCBpcyBhIGRpZmZlcmVudGlhbCBjaGFubmVsIChCaXQgMTUgID0gMSkgKi8KIAkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgewogCQkJZGlmZiA9IDE7CiAJCQljaGFucHJvZyAmPSAweDAwMDc7CkBAIC03NjgsMjEgKzc2OCwyMSBAQAogCQkJY2hhbnByb2cgJj0gMHgwMDBmOwogCQl9CiAKLQkJLy8gQ2xlYXIgY2hhbm5lbCwgcmFuZ2UgYW5kIGlucHV0IG1vZGUgYml0cyBpbiBBL0QgY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXIKKwkJLyogIENsZWFyIGNoYW5uZWwsIHJhbmdlIGFuZCBpbnB1dCBtb2RlIGJpdHMgaW4gQS9EIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCiAJCWRldnByaXYtPkFkY0NtZFN0YXR1cyAmPSAweGYwMGY7CiAKLQkJLy8gU2V0IGNoYW5uZWwgbnVtYmVyIGFuZCBkaWZmZXJlbnRpYWwgbW9kZSBzdGF0dXMgYml0CisJCS8qICBTZXQgY2hhbm5lbCBudW1iZXIgYW5kIGRpZmZlcmVudGlhbCBtb2RlIHN0YXR1cyBiaXQgKi8KIAkJaWYgKGRpZmYpIHsKLQkJCS8vIFNldCBjaGFubmVsIG51bWJlciwgYml0cyA5LTExICYgbW9kZSwgYml0IDYKKwkJCS8qICBTZXQgY2hhbm5lbCBudW1iZXIsIGJpdHMgOS0xMSAmIG1vZGUsIGJpdCA2ICovCiAJCQlkZXZwcml2LT5BZGNDbWRTdGF0dXMgfD0gKGNoYW5wcm9nIDw8IDkpOwogCQkJZGV2cHJpdi0+QWRjQ21kU3RhdHVzIHw9IEFEQ19ESTsKIAkJfSBlbHNlCi0JCQkvLyBTZXQgY2hhbm5lbCBudW1iZXIsIGJpdHMgOC0xMQorCQkJLyogIFNldCBjaGFubmVsIG51bWJlciwgYml0cyA4LTExICovCiAJCQlkZXZwcml2LT5BZGNDbWRTdGF0dXMgfD0gKGNoYW5wcm9nIDw8IDgpOwogCi0JCS8vIEdldCByYW5nZSBmb3IgY3VycmVudCBjaGFubmVsCisJCS8qICBHZXQgcmFuZ2UgZm9yIGN1cnJlbnQgY2hhbm5lbCAqLwogCQlyYW5nZSA9IHRoaXNfYm9hcmQtPnJhbmdlY29kZVtDUl9SQU5HRShjaGFubGlzdFtpXSldOwotCQkvLyBTZXQgcmFuZ2UuIGJpdHMgNC01CisJCS8qICBTZXQgcmFuZ2UuIGJpdHMgNC01ICovCiAJCWRldnByaXYtPkFkY0NtZFN0YXR1cyB8PSByYW5nZTsKIAogCQkvKiBPdXRwdXQgY2hhbm5lbCwgcmFuZ2UsIG1vZGUgdG8gSUNQIE11bHRpICovCkBAIC04MDYsNDUgKzgwNiw0NSBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgaWNwIG11bHRpIGRldmljZSB0byBhICdzYWZlJyBzdGF0ZQogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKIAogCVJldHVybnM6aW50CTAgPSBzdWNjZXNzCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX3Jlc2V0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGljcF9tdWx0aV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCiAJcHJpbnRrKCJpY3BfbXVsdGkgRURCRzogQkdOOiBpY3BfbXVsdGlfcmVzZXQoLi4uKVxuIik7CiAjZW5kaWYKLQkvLyBDbGVhciBJTlQgZW5hYmxlcyBhbmQgcmVxdWVzdHMKKwkvKiAgQ2xlYXIgSU5UIGVuYWJsZXMgYW5kIHJlcXVlc3RzICovCiAJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAl3cml0ZXcoMHgwMGZmLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9TVEFUKTsKIAogCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikKLQkJLy8gU2V0IERBQ3MgdG8gMC4uNVYgcmFuZ2UgYW5kIDBWIG91dHB1dAorCQkvKiAgU2V0IERBQ3MgdG8gMC4uNVYgcmFuZ2UgYW5kIDBWIG91dHB1dCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgdGhpc19ib2FyZC0+bl9hb2NoYW47IGkrKykgewogCQkJZGV2cHJpdi0+RGFjQ21kU3RhdHVzICY9IDB4ZmNjZTsKIAotCQkJLy8gU2V0IGNoYW5uZWwgbnVtYmVyCisJCQkvKiAgU2V0IGNoYW5uZWwgbnVtYmVyICovCiAJCQlkZXZwcml2LT5EYWNDbWRTdGF0dXMgfD0gKGkgPDwgOCk7CiAKLQkJCS8vIE91dHB1dCAwVgorCQkJLyogIE91dHB1dCAwViAqLwogCQkJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQU8pOwogCi0JCQkvLyBTZXQgc3RhcnQgY29udmVyc2lvbiBiaXQKKwkJCS8qICBTZXQgc3RhcnQgY29udmVyc2lvbiBiaXQgKi8KIAkJCWRldnByaXYtPkRhY0NtZFN0YXR1cyB8PSBEQUNfU1Q7CiAKLQkJCS8vIE91dHB1dCB0byBjb21tYW5kIC8gc3RhdHVzIHJlZ2lzdGVyCisJCQkvKiAgT3V0cHV0IHRvIGNvbW1hbmQgLyBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJCXdyaXRldyhkZXZwcml2LT5EYWNDbWRTdGF0dXMsCiAJCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9EQUNfQ1NSKTsKIAotCQkJLy8gRGVsYXkgdG8gYWxsb3cgREFDIHRpbWUgdG8gcmVjb3ZlcgorCQkJLyogIERlbGF5IHRvIGFsbG93IERBQyB0aW1lIHRvIHJlY292ZXIgKi8KIAkJCWNvbWVkaV91ZGVsYXkoMSk7CiAJCX0KLQkvLyBEaWdpdGFsIG91dHB1dHMgdG8gMAorCS8qICBEaWdpdGFsIG91dHB1dHMgdG8gMCAqLwogCXdyaXRldygwLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0RPKTsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtODYzLDE2ICs4NjMsMTYgQEAKIAkJZGV2aWNlLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9kZXZjb25maWcgKml0CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2UgY29uZmlndXJhdGlvbgorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdAlQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24KIAogCVJldHVybnM6aW50CTAgPSBzdWNjZXNzCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IGljcF9tdWx0aV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IHJldCwgc3ViZGV2LCBuX3N1YmRldmljZXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZCA9IE5VTEw7CkBAIC04ODEsMTEgKzg4MSwxMiBAQAogCiAJcHJpbnRrKCJpY3BfbXVsdGkgRURCRzogQkdOOiBpY3BfbXVsdGlfYXR0YWNoKC4uLilcbiIpOwogCi0JLy8gQWxvY2F0ZSBwcml2YXRlIGRhdGEgc3RvcmFnZSBzcGFjZQotCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihpY3BfbXVsdGlfcHJpdmF0ZSkpKSA8IDApCisJLyogIEFsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0b3JhZ2Ugc3BhY2UgKi8KKwlyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBpY3BfbXVsdGlfcHJpdmF0ZSkpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLy8gSW5pdGlhbGlzZSBsaXN0IG9mIFBDSSBjYXJkcyBpbiBzeXN0ZW0sIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28KKwkvKiAgSW5pdGlhbGlzZSBsaXN0IG9mIFBDSSBjYXJkcyBpbiBzeXN0ZW0sIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28gKi8KIAlpZiAocGNpX2xpc3RfYnVpbGRlZCsrID09IDApIHsKIAkJcGNpX2NhcmRfbGlzdF9pbml0KFBDSV9WRU5ET1JfSURfSUNQLAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtODk5LDkgKzkwMCwxMSBAQAogCXByaW50aygiQW5uZSdzIGNvbWVkaSVkOiBpY3BfbXVsdGk6IGJvYXJkPSVzIiwgZGV2LT5taW5vciwKIAkJdGhpc19ib2FyZC0+bmFtZSk7CiAKLQlpZiAoKGNhcmQgPSBzZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKFBDSV9WRU5ET1JfSURfSUNQLAotCQkJCXRoaXNfYm9hcmQtPmRldmljZV9pZCwgaXQtPm9wdGlvbnNbMF0sCi0JCQkJaXQtPm9wdGlvbnNbMV0pKSA9PSBOVUxMKQorCWNhcmQgPSBzZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKFBDSV9WRU5ET1JfSURfSUNQLAorCQkJCQkgdGhpc19ib2FyZC0+ZGV2aWNlX2lkLCBpdC0+b3B0aW9uc1swXSwKKwkJCQkJIGl0LT5vcHRpb25zWzFdKTsKKworCWlmIChjYXJkID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCiAJZGV2cHJpdi0+Y2FyZCA9IGNhcmQ7CkBAIC05NDMsOSArOTQ2LDkgQEAKIAlpZiAodGhpc19ib2FyZC0+bl9jdHJzKQogCQluX3N1YmRldmljZXMrKzsKIAotCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkgeworCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCX0KIAogCWljcF9tdWx0aV9yZXNldChkZXYpOwogCkBAIC0xMDU1LDEzICsxMDU4LDEzIEBACiAJCWRldmljZS4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCiAKIAlSZXR1cm5zOmludAkwID0gc3VjY2VzcwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaWNwX211bHRpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCiAJaWYgKGRldi0+cHJpdmF0ZSkKQEAgLTEwNzcsOSArMTA4MCw4IEBACiAJaWYgKGRldi0+cHJpdmF0ZSAmJiBkZXZwcml2LT5jYXJkKQogCQlwY2lfY2FyZF9mcmVlKGRldnByaXYtPmNhcmQpOwogCi0JaWYgKC0tcGNpX2xpc3RfYnVpbGRlZCA9PSAwKSB7CisJaWYgKC0tcGNpX2xpc3RfYnVpbGRlZCA9PSAwKQogCQlwY2lfY2FyZF9saXN0X2NsZWFudXAoUENJX1ZFTkRPUl9JRF9JQ1ApOwotCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oCmluZGV4IDZkZjRhOGQuLjIxZDg0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmgKQEAgLTI4LDcgKzI4LDggQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogfTsKIAotc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmlub3ZhX2RldmljZXM7CS8vIHB0ciB0byByb290IGxpc3Qgb2YgYWxsIElub3ZhIGRldmljZXMKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICppbm92YV9kZXZpY2VzOworLyogcHRyIHRvIHJvb3QgbGlzdCBvZiBhbGwgSW5vdmEgZGV2aWNlcyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTUwLDE0ICsxNTEsMTQgQEAKIAkJCSYmIChpbm92YS0+cGNpX3Nsb3QgPT0gcGNpX3Nsb3QpKSB7CiAJCQlpZiAoIShpbm92YS0+dXNlZCkpIHsKIAkJCQkqY2FyZCA9IGlub3ZhOwotCQkJCXJldHVybiAwOwkvLyBvaywgY2FyZCBpcyBmb3VuZAorCQkJCXJldHVybiAwOwkvKiBvaywgY2FyZCBpcyBmb3VuZCAqLwogCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gMjsJLy8gY2FyZCBleGlzdCBidXQgaXMgdXNlZAorCQkJCXJldHVybiAyOwkvKiBjYXJkIGV4aXN0IGJ1dCBpcyB1c2VkICovCiAJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gMTsJCS8vIG5vIGNhcmQgZm91bmQKKwlyZXR1cm4gMTsJCS8qIG5vIGNhcmQgZm91bmQgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNDMsOSArMjQ0LDEwIEBACiAJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQ7CiAJaW50IGVycjsKIAotCWlmICgocGNpX2J1cyA8IDEpICYgKHBjaV9zbG90IDwgMSkpIHsJLy8gdXNlIGF1dG9kZXRlY3Rpb24KLQkJaWYgKChjYXJkID0gZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh2ZW5kb3JfaWQsCi0JCQkJCWRldmljZV9pZCkpID09IE5VTEwpIHsKKwlpZiAoKHBjaV9idXMgPCAxKSAmIChwY2lfc2xvdCA8IDEpKSB7CS8qIHVzZSBhdXRvZGV0ZWN0aW9uICovCisKKwkJY2FyZCA9IGZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodmVuZG9yX2lkLCBkZXZpY2VfaWQpOworCQlpZiAoY2FyZCA9PSBOVUxMKSB7CiAJCQlydF9wcmludGsoIiAtIFVudXNlZCBjYXJkIG5vdCBmb3VuZCBpbiBzeXN0ZW0hXG4iKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yNjUsNyArMjY3LDggQEAKIAkJfQogCX0KIAotCWlmICgoZXJyID0gcGNpX2NhcmRfYWxsb2MoY2FyZCkpICE9IDApIHsKKwllcnIgPSBwY2lfY2FyZF9hbGxvYyhjYXJkKTsKKwlpZiAoZXJyICE9IDApIHsKIAkJaWYgKGVyciA+IDApCiAJCQlydF9wcmludGsoIiAtIENhbid0IGFsbG9jYXRlIGNhcmQhXG4iKTsKIAkJLyogZWxzZTogZXJyb3IgYWxyZWFkeSBwcmludGVkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2lpX3BjaTIwa2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4MjViYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKQEAgLTAsMCArMSw2MTIgQEAKKy8qCisgKgljb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKKyAqCURyaXZlciBmb3IgSW50ZWxsaWdlbnQgSW5zdHJ1bWVudHMgUENJLTIwMDAxQyBjYXJyaWVyIGJvYXJkCisgKglhbmQgbW9kdWxlcy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEtlbXBmIDxrZW1wZkBtYXRzY2kudW5pLXNiLmRlPgorICoJd2l0aCBzdWdnZXN0aW9ucyBmcm9tIERhdmlkIFNjaGxlZWYKKyAqCQkJMTYuMDYuMjAwMAorICoKKyAqCUxpbnV4IGRldmljZSBkcml2ZXIgZm9yIENPTUVESQorICoJSW50ZWxsaWdlbnQgSW5zdHJ1bWVudGF0aW9uCisgKglQQ0ktMjAwMDEgQy0yQSBDYXJyaWVyIEJvYXJkCisgKglQQ0ktMjAzNDEgTS0xQSAxNi1CaXQgYW5hbG9nIGlucHV0IG1vZHVsZQorICoJCQkJLSBkaWZmZXJlbnRpYWwKKyAqCQkJCS0gcmFuZ2UgKC01ViAtICs1VikKKyAqCQkJCS0gMTYgYml0CisgKglQQ0ktMjAwMDYgTS0yIDE2LUJpdCBhbmFsb2cgb3V0cHV0IG1vZHVsZQorICoJCQkJLSByYW5nZXMgKC0xMFYgLSArMTBWKSAoMFYgLSArMTBWKSAoLTVWIC0gKzVWKQorICoJCQkJLSAxNiBiaXQKKyAqCisgKglvbmx5IE9ORSBQQ0ktMjAzNDEgbW9kdWxlIHBvc3NpYmxlCisgKiAJb25seSBPTkUgUENJLTIwMDA2IG1vZHVsZSBwb3NzaWJsZQorICoJbm8gZXh0ZXJuIHRyaWdnZXIgaW1wbGVtZW50ZWQKKyAqCisgKglOT1QgV09SS0lORyAoYnV0IHNvb24pIG9ubHkgNCBvbi1ib2FyZCBkaWZmZXJlbnRpYWwgY2hhbm5lbHMgc3VwcG9ydGVkCisgKglOT1QgV09SS0lORyAoYnV0IHNvb24pIG9ubHkgT05FIGRpLXBvcnQgYW5kIE9ORSBkby1wb3J0IHN1cHBvcnRlZCBpbnN0ZWFkIG9mIDQgZGlnaXRhbCBwb3J0cworICoJZGktcG9ydCA9PSBQb3J0IDAKKyAqCWRvLXBvcnQgPT0gUG9ydCAxCisgKgorICoJVGhlIHN0YXRlIG9mIHRoaXMgZHJpdmVyIGlzIG9ubHkgYSBzdGFydGluZyBwb2ludCBmb3IgYSBjb21wbGV0ZQorICoJQ09NRURJLWRyaXZlci4gVGhlIGZpbmFsIGRyaXZlciBzaG91bGQgc3VwcG9ydCBhbGwgZmVhdHVyZXMgb2YgdGhlCisgKgljYXJyaWVyIGJvYXJkIGFuZCBtb2R1bGVzLgorICoKKyAqCVRoZSB0ZXN0IGNvbmZpZ3VyYXRpb246CisgKgorICoJa2VybmVsIDIuMi4xNCB3aXRoIFJUQUkgdjEuMiAgYW5kIHBhdGNoLTIuMi4xNHJ0aGFsMgorICoJQ09NRURJIDAuNy40NQorICoJQ09NRURJTElCIDAuNy45CisgKgorICovCisvKgorRHJpdmVyOiBpaV9wY2kyMGtjCitEZXNjcmlwdGlvbjogSW50ZWxsaWdlbnQgSW5zdHJ1bWVudHMgUENJLTIwMDAxQyBjYXJyaWVyIGJvYXJkCitBdXRob3I6IE1hcmt1cyBLZW1wZiA8a2VtcGZAbWF0c2NpLnVuaS1zYi5kZT4KK0RldmljZXM6IFtJbnRlbGxpZ2VudCBJbnN0cnVtZW50YXRpb25dIFBDSS0yMDAwMUMgKGlpX3BjaTIwa2MpCitTdGF0dXM6IHdvcmtzCisKK1N1cHBvcnRzIHRoZSBQQ0ktMjAwMDEgQy0yYSBDYXJyaWVyIGJvYXJkLCBhbmQgY291bGQgcHJvYmFibHkgc3VwcG9ydAordGhlIG90aGVyIGNhcnJpZXIgYm9hcmRzIHdpdGggc21hbGwgbW9kaWZpY2F0aW9ucy4gIE1vZHVsZXMgc3VwcG9ydGVkCithcmU6CisJUENJLTIwMDA2IE0tMiAxNi1iaXQgYW5hbG9nIG91dHB1dCBtb2R1bGUKKwlQQ0ktMjAzNDEgTS0xQSAxNi1iaXQgYW5hbG9nIGlucHV0IG1vZHVsZQorCitPcHRpb25zOgorICAwICAgQm9hcmQgYmFzZSBhZGRyZXNzCisgIDEgICBJUlEKKyAgMiAgIGZpcnN0IG9wdGlvbiBmb3IgbW9kdWxlIDEKKyAgMyAgIHNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAxCisgIDQgICBmaXJzdCBvcHRpb24gZm9yIG1vZHVsZSAyCisgIDUgICBzZWNvbmQgb3B0aW9uIGZvciBtb2R1bGUgMgorICA2ICAgZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMworICA3ICAgc2Vjb25kIG9wdGlvbiBmb3IgbW9kdWxlIDMKKworb3B0aW9ucyBmb3IgUENJLTIwMDA2TToKKyAgZmlyc3Q6ICAgQW5hbG9nIG91dHB1dCBjaGFubmVsIDAgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIDAgIGJpcG9sYXIgMTAgICgtMTBWIC0tICsxMFYpCisgICAgICAgICAgICAgMSAgdW5pcG9sYXIgMTAgICgwViAtLSArMTBWKQorICAgICAgICAgICAgIDIgIGJpcG9sYXIgNSAgKC01ViAtLSA1VikKKyAgc2Vjb25kOiAgQW5hbG9nIG91dHB1dCBjaGFubmVsIDEgcmFuZ2UgY29uZmlndXJhdGlvbgorCitvcHRpb25zIGZvciBQQ0ktMjAzNDFNOgorICBmaXJzdDogICBBbmFsb2cgaW5wdXQgZ2FpbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgMCAgMQorICAgICAgICAgICAgIDEgIDEwCisgICAgICAgICAgICAgMiAgMTAwCisgICAgICAgICAgICAgMyAgMjAwCisqLworCisvKiBYWFggbmVlZHMgdG8gdXNlIGlvcmVtYXAoKSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDIuNCBrZXJuZWxzLiAgU2hvdWxkIGFsc28KKyAqIGNoZWNrX21lbV9yZWdpb24oKSBldGMuIC0gZm1oZXNzICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2RlZmluZSBQQ0kyMDAwMF9JRAkJCTB4MWQKKyNkZWZpbmUgUENJMjAzNDFfSUQgICAgCQkJMHg3NworI2RlZmluZSBQQ0kyMDAwNl9JRCAgICAgIAkJMHhlMworI2RlZmluZSBQQ0kyMHh4eF9FTVBUWV9JRAkJMHhmZgorCisjZGVmaW5lIFBDSTIwMDAwX09GRlNFVCAJCTB4MTAwCisjZGVmaW5lIFBDSTIwMDAwX01PRFVMRVMJCTMKKworI2RlZmluZSBQQ0kyMDAwMF9ESU9fMAkJCTB4ODAKKyNkZWZpbmUgUENJMjAwMDBfRElPXzEJCQkweDgxCisjZGVmaW5lIFBDSTIwMDAwX0RJT18yCQkJMHhjMAorI2RlZmluZSBQQ0kyMDAwMF9ESU9fMwkJCTB4YzEKKyNkZWZpbmUgUENJMjAwMDBfRElPX0NPTlRST0xfMDEJCTB4ODMJLyogcG9ydCAwLCAxIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMjAwMDBfRElPX0NPTlRST0xfMjMJCTB4YzMJLyogcG9ydCAyLCAzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMjAwMDBfRElPX0JVRkZFUgkJMHg4MgkvKiBidWZmZXIgZGlyZWN0aW9uIGFuZCBlbmFibGUgKi8KKyNkZWZpbmUgUENJMjAwMDBfRElPX0VPQwkJMHhlZgkvKiBldmVuIHBvcnQsIGNvbnRyb2wgb3V0cHV0ICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19PT0MJCTB4ZmQJLyogb2RkIHBvcnQsIGNvbnRyb2wgb3V0cHV0ICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19FSUMJCTB4OTAJLyogZXZlbiBwb3J0LCBjb250cm9sIGlucHV0ICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19PSUMJCTB4ODIJLyogb2RkIHBvcnQsIGNvbnRyb2wgaW5wdXQgKi8KKyNkZWZpbmUgRElPX0NBTkQJCQkweDEyCS8qIGFuZCBiaXQgMSwgYml0IDQgb2YgY29udHJvbCAqLworI2RlZmluZSBESU9fQkUJCQkJMHgwMQkvKiBidWZmZXI6IHBvcnQgZW5hYmxlICovCisjZGVmaW5lIERJT19CTwkJCQkweDA0CS8qIGJ1ZmZlcjogb3V0cHV0ICovCisjZGVmaW5lIERJT19CSQkJCQkweDA1CS8qIGJ1ZmZlcjogaW5wdXQgKi8KKyNkZWZpbmUgRElPX1BTXzAJCQkweDAwCS8qIGJ1ZmZlcjogcG9ydCBzaGlmdCAwICovCisjZGVmaW5lIERJT19QU18xCQkJMHgwMQkvKiBidWZmZXI6IHBvcnQgc2hpZnQgMSAqLworI2RlZmluZSBESU9fUFNfMgkJCTB4MDQJLyogYnVmZmVyOiBwb3J0IHNoaWZ0IDIgKi8KKyNkZWZpbmUgRElPX1BTXzMJCQkweDA1CS8qIGJ1ZmZlcjogcG9ydCBzaGlmdCAzICovCisKKyNkZWZpbmUgUENJMjAwMDZfTENIQU4wCQkJMHgwZAorI2RlZmluZSBQQ0kyMDAwNl9TVFJPQkUwCQkweDBiCisjZGVmaW5lIFBDSTIwMDA2X0xDSEFOMQkJCTB4MTUKKyNkZWZpbmUgUENJMjAwMDZfU1RST0JFMQkJMHgxMworCisjZGVmaW5lIFBDSTIwMzQxX0lOSVQJCQkweDA0CisjZGVmaW5lIFBDSTIwMzQxX1JFUE1PREUJCTB4MDAJLyogc2luZ2xlIHNob3QgbW9kZSAqLworI2RlZmluZSBQQ0kyMDM0MV9QQUNFUgkJCTB4MDAJLyogSGFyZHdhcmUgUGFjZXIgZGlzYWJsZWQgKi8KKyNkZWZpbmUgUENJMjAzNDFfQ0hBTl9OUgkJMHgwNAkvKiBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMgKi8KKyNkZWZpbmUgUENJMjAzNDFfQ09ORklHX1JFRwkJMHgxMAorI2RlZmluZSBQQ0kyMDM0MV9NT0RfU1RBVFVTCQkweDAxCisjZGVmaW5lIFBDSTIwMzQxX09QVF9SRUcJCTB4MTEKKyNkZWZpbmUgUENJMjAzNDFfU0VUX1RJTUVfUkVHCQkweDE1CisjZGVmaW5lIFBDSTIwMzQxX0xDSEFOX0FERFJfUkVHCQkweDEzCisjZGVmaW5lIFBDSTIwMzQxX0NIQU5fTElTVAkJMHg4MAorI2RlZmluZSBQQ0kyMDM0MV9DQ19SRVNFVAkJMHgxYgorI2RlZmluZSBQQ0kyMDM0MV9DSEFOX1JFU0VUCQkweDE5CisjZGVmaW5lIFBDSTIwMzQxX1NPRlRfUEFDRVIJCTB4MDQKKyNkZWZpbmUgUENJMjAzNDFfU1RBVFVTX1JFRwkJMHgxMgorI2RlZmluZSBQQ0kyMDM0MV9MREFUQQkJCTB4MDIKKyNkZWZpbmUgUENJMjAzNDFfREFJU1lfQ0hBSU4JCTB4MjAJLyogT24tYm9hcmQgaW5wdXRzIG9ubHkgKi8KKyNkZWZpbmUgUENJMjAzNDFfTVVYCQkJMHgwNAkvKiBFbmFibGUgb24tYm9hcmQgTVVYICovCisjZGVmaW5lIFBDSTIwMzQxX1NDQU5MSVNUCQkweDgwCS8qIENoYW5uZWwvR2FpbiBTY2FuIExpc3QgKi8KKwordW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgeworCXZvaWQgKmlvYmFzZTsKKwlzdHJ1Y3QgeworCQl2b2lkICppb2Jhc2U7CisJCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphb19yYW5nZV9saXN0WzJdOwkvKiByYW5nZSBvZiBjaGFubmVscyBvZiBhbyBtb2R1bGUgKi8KKwkJdW5zaWduZWQgaW50IGxhc3RfZGF0YVsyXTsKKwl9IHBjaTIwMDA2OworCXN0cnVjdCB7CisJCXZvaWQgKmlvYmFzZTsKKwkJaW50IHRpbWViYXNlOworCQlpbnQgc2V0dGxpbmdfdGltZTsKKwkJaW50IGFpX2dhaW47CisJfSBwY2kyMDM0MTsKK307CisKK3N0cnVjdCBwY2kyMHh4eF9wcml2YXRlIHsKKworCXZvaWQgKmlvYWRkcjsKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSBzdWJkZXZfcHJpdmF0ZVtQQ0kyMDAwMF9NT0RVTEVTXTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTIweHh4X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIENIQU4gKENSX0NIQU4oaXQtPmNoYW5saXN0WzBdKSkKKworc3RhdGljIGludCBwY2kyMHh4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kyMHh4eF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaTIweHh4ID0geworICAgICAgZHJpdmVyX25hbWU6ImlpX3BjaTIwa2MiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTIweHh4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kyMHh4eF9kZXRhY2gsCit9OworCitzdGF0aWMgaW50IHBjaTIwMDA2X2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgb3B0MCwgaW50IG9wdDEpOworc3RhdGljIGludCBwY2kyMDM0MV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG9wdDAsIGludCBvcHQxKTsKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKKy8qCisgIG9wdGlvbnNbMF0JQm9hcmQgYmFzZSBhZGRyZXNzCisgIG9wdGlvbnNbMV0JSVJRCisgIG9wdGlvbnNbMl0JZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMQorICBvcHRpb25zWzNdCXNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAxCisgIG9wdGlvbnNbNF0JZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMgorICBvcHRpb25zWzVdCXNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAyCisgIG9wdGlvbnNbNl0JZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMworICBvcHRpb25zWzddCXNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAzCisKKyAgb3B0aW9ucyBmb3IgUENJLTIwMzQxTToKKyAgZmlyc3QJCUFuYWxvZyBpbnB1dCBnYWluIGNvbmZpZ3VyYXRpb24KKwkJMCA9PSAxCisJCTEgPT0gMTAKKwkJMiA9PSAxMDAKKwkJMyA9PSAyMDAKKworICBvcHRpb25zIGZvciBQQ0ktMjAwMDZNOgorICBmaXJzdAkJQW5hbG9nIG91dHB1dCBjaGFubmVsIDAgcmFuZ2UgY29uZmlndXJhdGlvbgorCQkwID09IGJpcG9sYXIgMTAgICgtMTBWIC0tICsxMFYpCisJCTEgPT0gdW5pcG9sYXIgMTBWICAoMFYgLS0gKzEwVikKKwkJMiA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKyAgc2Vjb25kCUFuYWxvZyBvdXRwdXQgY2hhbm5lbCAxIHJhbmdlIGNvbmZpZ3VyYXRpb24KKwkJMCA9PSBiaXBvbGFyIDEwICAoLTEwViAtLSArMTBWKQorCQkxID09IHVuaXBvbGFyIDEwViAgKDBWIC0tICsxMFYpCisJCTIgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisqLworc3RhdGljIGludCBwY2kyMHh4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJdW5zaWduZWQgY2hhciBpOworCWludCByZXQ7CisJaW50IGlkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuaW9uIHBjaTIweHh4X3N1YmRldl9wcml2YXRlICpzZHA7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxICsgUENJMjAwMDBfTU9EVUxFUykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTIweHh4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2cHJpdi0+aW9hZGRyID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylpdC0+b3B0aW9uc1swXTsKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpMjBrYyI7CisKKwkvKiBDaGVjayBQQ0ktMjAwMDEgQy0yQSBDYXJyaWVyIEJvYXJkIElEICovCisJaWYgKChyZWFkYihkZXZwcml2LT5pb2FkZHIpICYgUENJMjAwMDBfSUQpICE9IFBDSTIwMDAwX0lEKSB7CisJCXByaW50aygiY29tZWRpJWQ6IGlpX3BjaTIwa2MiLCBkZXYtPm1pbm9yKTsKKwkJcHJpbnRrKCIgUENJLTIwMDAxIEMtMkEgQ2FycmllciBCb2FyZCBhdCBiYXNlPTB4JXAgbm90IGZvdW5kICFcbiIsIGRldnByaXYtPmlvYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwcmludGsoImNvbWVkaSVkOlxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKCJpaV9wY2kyMGtjOiBQQ0ktMjAwMDEgQy0yQSBhdCBiYXNlPTB4JXBcbiIsIGRldnByaXYtPmlvYWRkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJMjAwMDBfTU9EVUxFUzsgaSsrKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBpOworCQlpZCA9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIChpICsgMSkgKiBQQ0kyMDAwMF9PRkZTRVQpOworCQlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ViZGV2X3ByaXZhdGUgKyBpOworCQlzZHAgPSBzLT5wcml2YXRlOworCQlzd2l0Y2ggKGlkKSB7CisJCWNhc2UgUENJMjAwMDZfSUQ6CisJCQlzZHAtPnBjaTIwMDA2LmlvYmFzZSA9CisJCQkJZGV2cHJpdi0+aW9hZGRyICsgKGkgKyAxKSAqIFBDSTIwMDAwX09GRlNFVDsKKwkJCXBjaTIwMDA2X2luaXQoZGV2LCBzLCBpdC0+b3B0aW9uc1syICogaSArIDJdLAorCQkJCWl0LT5vcHRpb25zWzIgKiBpICsgM10pOworCQkJcHJpbnRrKCJjb21lZGklZDogaWlfcGNpMjBrYyIsIGRldi0+bWlub3IpOworCQkJcHJpbnRrKCIgUENJLTIwMDA2IG1vZHVsZSBpbiBzbG90ICVkIFxuIiwgaSArIDEpOworCQkJYnJlYWs7CisJCWNhc2UgUENJMjAzNDFfSUQ6CisJCQlzZHAtPnBjaTIwMzQxLmlvYmFzZSA9CisJCQkJZGV2cHJpdi0+aW9hZGRyICsgKGkgKyAxKSAqIFBDSTIwMDAwX09GRlNFVDsKKwkJCXBjaTIwMzQxX2luaXQoZGV2LCBzLCBpdC0+b3B0aW9uc1syICogaSArIDJdLAorCQkJCWl0LT5vcHRpb25zWzIgKiBpICsgM10pOworCQkJcHJpbnRrKCJjb21lZGklZDogaWlfcGNpMjBrYyIsIGRldi0+bWlub3IpOworCQkJcHJpbnRrKCIgUENJLTIwMzQxIG1vZHVsZSBpbiBzbG90ICVkIFxuIiwgaSArIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoImlpX3BjaTIwa2M6IHVua25vd24gbW9kdWxlIGNvZGUgMHglMDJ4IGluIHNsb3QgJWQ6IG1vZHVsZSBkaXNhYmxlZFxuIiwgaWQsIGkpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgUENJMjB4eHhfRU1QVFlfSUQ6CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBpbml0aWFsaXplIHN0cnVjdCBwY2kyMHh4eF9wcml2YXRlICovCisJcGNpMjB4eHhfZGlvX2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBQQ0kyMDAwMF9NT0RVTEVTKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjaTIweHh4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2kyMHh4eDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCisvKiBwY2kyMDAwNm0gKi8KKworc3RhdGljIGludCBwY2kyMDAwNl9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnBjaTIwMDA2X3JhbmdlX2xpc3RbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV91bmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwKK307CisKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBvcHQwLCBpbnQgb3B0MSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKworCWlmIChvcHQwIDwgMCB8fCBvcHQwID4gMikKKwkJb3B0MCA9IDA7CisJaWYgKG9wdDEgPCAwIHx8IG9wdDEgPiAyKQorCQlvcHQxID0gMDsKKworCXNkcC0+cGNpMjAwMDYuYW9fcmFuZ2VfbGlzdFswXSA9IHBjaTIwMDA2X3JhbmdlX2xpc3Rbb3B0MF07CisJc2RwLT5wY2kyMDAwNi5hb19yYW5nZV9saXN0WzFdID0gcGNpMjAwMDZfcmFuZ2VfbGlzdFtvcHQxXTsKKworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAyOworCXMtPmluc25fcmVhZCA9IHBjaTIwMDA2X2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gcGNpMjAwMDZfaW5zbl93cml0ZTsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBzZHAtPnBjaTIwMDA2LmFvX3JhbmdlX2xpc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKworCWRhdGFbMF0gPSBzZHAtPnBjaTIwMDA2Lmxhc3RfZGF0YVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMDAwNl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKwlpbnQgaGksIGxvOworCXVuc2lnbmVkIGludCBib2FyZGRhdGE7CisKKwlzZHAtPnBjaTIwMDA2Lmxhc3RfZGF0YVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV0gPSBkYXRhWzBdOworCWJvYXJkZGF0YSA9ICgoKHVuc2lnbmVkIGludClkYXRhWzBdICsgMHg4MDAwKSAmIDB4ZmZmZik7CS8qIGNvbWVkaS1kYXRhIC0+IGJvYXJkLWRhdGEgKi8KKwlsbyA9IChib2FyZGRhdGEgJiAweGZmKTsKKwloaSA9ICgoYm9hcmRkYXRhID4+IDgpICYgMHhmZik7CisKKwlzd2l0Y2ggKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKSB7CisJY2FzZSAwOgorCQl3cml0ZWIobG8sIHNkcC0+aW9iYXNlICsgUENJMjAwMDZfTENIQU4wKTsKKwkJd3JpdGViKGhpLCBzZHAtPmlvYmFzZSArIFBDSTIwMDA2X0xDSEFOMCArIDEpOworCQl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDAwNl9TVFJPQkUwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3cml0ZWIobG8sIHNkcC0+aW9iYXNlICsgUENJMjAwMDZfTENIQU4xKTsKKwkJd3JpdGViKGhpLCBzZHAtPmlvYmFzZSArIFBDSTIwMDA2X0xDSEFOMSArIDEpOworCQl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDAwNl9TVFJPQkUxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgY29tZWRpJWQ6IHBjaTIweHh4OiBhbyBjaGFubmVsIEVycm9yIVxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAxOworfQorCisvKiBQQ0kyMDM0MU0gKi8KKworc3RhdGljIGludCBwY2kyMDM0MV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGNvbnN0IGludCBwY2kyMDM0MV90aW1lYmFzZVtdID0geyAweDAwLCAweDAwLCAweDAwLCAweDA0IH07CitzdGF0aWMgY29uc3QgaW50IHBjaTIwMzQxX3NldHRsaW5nX3RpbWVbXSA9IHsgMHg1OCwgMHg1OCwgMHg5MywgMHg5OSB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjBfNSA9IHsgMSwge0JJUF9SQU5HRSgwLjUpfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIwXzA1ID0geyAxLCB7QklQX1JBTkdFKDAuMDUpfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIwXzAyNSA9IHsgMSwge0JJUF9SQU5HRSgwLjAyNSl9IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgcGNpMjAzNDFfcmFuZ2VzW10gPSB7CisJJnJhbmdlX2JpcG9sYXI1LAorCSZyYW5nZV9iaXBvbGFyMF81LAorCSZyYW5nZV9iaXBvbGFyMF8wNSwKKwkmcmFuZ2VfYmlwb2xhcjBfMDI1LAorfTsKKworc3RhdGljIGludCBwY2kyMDM0MV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG9wdDAsIGludCBvcHQxKQoreworCXVuaW9uIHBjaTIweHh4X3N1YmRldl9wcml2YXRlICpzZHAgPSBzLT5wcml2YXRlOworCWludCBvcHRpb247CisKKwkvKiBvcHRpb25zIGhhbmRsaW5nICovCisJaWYgKG9wdDAgPCAwIHx8IG9wdDAgPiAzKQorCQlvcHQwID0gMDsKKwlzZHAtPnBjaTIwMzQxLnRpbWViYXNlID0gcGNpMjAzNDFfdGltZWJhc2Vbb3B0MF07CisJc2RwLT5wY2kyMDM0MS5zZXR0bGluZ190aW1lID0gcGNpMjAzNDFfc2V0dGxpbmdfdGltZVtvcHQwXTsKKworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gUENJMjAzNDFfQ0hBTl9OUjsKKwlzLT5sZW5fY2hhbmxpc3QgPSBQQ0kyMDM0MV9TQ0FOTElTVDsKKwlzLT5pbnNuX3JlYWQgPSBwY2kyMDM0MV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9IHBjaTIwMzQxX3Jhbmdlc1tvcHQwXTsKKworCW9wdGlvbiA9IHNkcC0+cGNpMjAzNDEudGltZWJhc2UgfCBQQ0kyMDM0MV9SRVBNT0RFOwkvKiBkZXBlbmRzIG9uIGdhaW4sIHRyaWdnZXIsIHJlcGV0aXRpb24gbW9kZSAqLworCisJd3JpdGViKFBDSTIwMzQxX0lOSVQsIHNkcC0+aW9iYXNlICsgUENJMjAzNDFfQ09ORklHX1JFRyk7CS8qIGluaXRpYWxpemUgTW9kdWxlICovCisJd3JpdGViKFBDSTIwMzQxX1BBQ0VSLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX01PRF9TVEFUVVMpOwkvKiBzZXQgUGFjZXIgKi8KKwl3cml0ZWIob3B0aW9uLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX09QVF9SRUcpOwkvKiBvcHRpb24gcmVnaXN0ZXIgKi8KKwl3cml0ZWIoc2RwLT5wY2kyMDM0MS5zZXR0bGluZ190aW1lLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX1NFVF9USU1FX1JFRyk7CS8qIHNldHRsaW5nIHRpbWUgY291bnRlciAqLworCS8qIHRyaWdnZXIgbm90IGltcGxlbWVudGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjAzNDFfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKyAgICAgICAgdW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgKnNkcCA9IHMtPnByaXZhdGU7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKwlpbnQgbG8sIGhpOworCXVuc2lnbmVkIGNoYXIgZW9jOwkvKiBlbmQgb2YgY29udmVyc2lvbiAqLworCXVuc2lnbmVkIGludCBjbGI7CS8qIGNoYW5uZWwgbGlzdCBieXRlICovCisJdW5zaWduZWQgaW50IGJvYXJkZGF0YTsKKworCXdyaXRlYigxLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0xDSEFOX0FERFJfUkVHKTsJLyogd3JpdGUgbnVtYmVyIG9mIGlucHV0IGNoYW5uZWxzICovCisJY2xiID0gUENJMjAzNDFfREFJU1lfQ0hBSU4gfCBQQ0kyMDM0MV9NVVggfCAoc2RwLT5wY2kyMDM0MS5haV9nYWluIDw8IDMpCisJCXwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJd3JpdGViKGNsYiwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9DSEFOX0xJU1QpOworCXdyaXRlYigweDAwLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0NDX1JFU0VUKTsJLyogcmVzZXQgc2V0dGxpbmcgdGltZSBjb3VudGVyIGFuZCB0cmlnZ2VyIGRlbGF5IGNvdW50ZXIgKi8KKwl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9DSEFOX1JFU0VUKTsKKworCS8qIGdlbmVyYXRlIFBhY2VyICovCisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCS8qIGRhdGEgcG9sbGluZyBpc24ndCB0aGUgbmljaWVzdCB3YXkgdG8gZ2V0IHRoZSBkYXRhLCBJIGtub3csCisJCSAqIGJ1dCB0aGVyZSBhcmUgb25seSA2IGN5Y2xlcyAobWVhbikgYW5kIGl0IGlzIGVhc2llciB0aGFuCisJCSAqIHRoZSB3aG9sZSBpbnRlcnJ1cHQgc3R1ZmYKKwkJICovCisJCWogPSAwOworCQlyZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX1NPRlRfUEFDRVIpOwkvKiBnZW5lcmF0ZSBQYWNlciAqLworCQllb2MgPSByZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX1NUQVRVU19SRUcpOworCQl3aGlsZSAoKGVvYyA8IDB4ODApICYmIGogPCAxMDApIHsJLyogcG9sbCBJbnRlcnJ1cHQgRmxhZyAqLworCQkJaisrOworCQkJZW9jID0gcmVhZGIoc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9TVEFUVVNfUkVHKTsKKwkJfQorCQlpZiAoaiA+PSAxMDApIHsKKwkJCXByaW50aygiY29tZWRpJWQ6ICBwY2kyMHh4eDogQUkgaW50ZXJydXB0IGNoYW5uZWwgJWkgcG9sbGluZyBleGl0ICFcbiIsIGRldi0+bWlub3IsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbG8gPSByZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0xEQVRBKTsKKwkJaGkgPSByZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0xEQVRBICsgMSk7CisJCWJvYXJkZGF0YSA9IGxvICsgMHgxMDAgKiBoaTsKKwkJZGF0YVtpXSA9IChzaG9ydCkgKChib2FyZGRhdGEgKyAweDgwMDApICYgMHhmZmZmKTsJLyogYm9hcmQtZGF0YSAtPiBjb21lZGktZGF0YSAqLworCX0KKworCXJldHVybiBpOworfQorCisvKiBuYXRpdmUgRElPICovCisKK3N0YXRpYyB2b2lkIHBjaTIweHh4X2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjaTIweHh4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qIGluaXRpYWxpemUgc3RydWN0IHBjaTIweHh4X3ByaXZhdGUgKi8KK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDMyOworCXMtPmluc25fYml0cyA9IHBjaTIweHh4X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBwY2kyMHh4eF9kaW9faW5zbl9jb25maWc7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pb19iaXRzID0gMDsKKworCS8qIGRpZ2l0YWwgSS9PIGxpbmVzIGRlZmF1bHQgdG8gaW5wdXQgb24gYm9hcmQgcmVzZXQuICovCisJcGNpMjB4eHhfZGlvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbWFzaywgYml0czsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChtYXNrICYgMHgwMDAwMDBmZikgeworCQliaXRzID0gMHgwMDAwMDBmZjsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDAwMDBmZjAwKSB7CisJCWJpdHMgPSAweDAwMDBmZjAwOworCX0gZWxzZSBpZiAobWFzayAmIDB4MDBmZjAwMDApIHsKKwkJYml0cyA9IDB4MDBmZjAwMDA7CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4ZmYwMDAwMDA7CisJfQorCWlmIChkYXRhWzBdKSB7CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwl9IGVsc2UgeworCQlzLT5pb19iaXRzICY9IH5iaXRzOworCX0KKwlwY2kyMHh4eF9kaW9fY29uZmlnKGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMHh4eF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGRhdGFbMF07CisKKwlzLT5zdGF0ZSAmPSB+bWFzazsKKwlzLT5zdGF0ZSB8PSAobWFzayAmIGRhdGFbMV0pOworCisJbWFzayAmPSBzLT5pb19iaXRzOworCWlmIChtYXNrICYgMHgwMDAwMDBmZikKKwkJd3JpdGViKChzLT5zdGF0ZSA+PiAwKSAmIDB4ZmYsCisJCQlkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJaWYgKG1hc2sgJiAweDAwMDBmZjAwKQorCQl3cml0ZWIoKHMtPnN0YXRlID4+IDgpICYgMHhmZiwKKwkJCWRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18xKTsKKwlpZiAobWFzayAmIDB4MDBmZjAwMDApCisJCXdyaXRlYigocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwKKwkJCWRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKTsKKwlpZiAobWFzayAmIDB4ZmYwMDAwMDApCisJCXdyaXRlYigocy0+c3RhdGUgPj4gMjQpICYgMHhmZiwKKwkJCWRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKTsKKworCWRhdGFbMV0gPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMSkgPDwgODsKKwlkYXRhWzFdIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKSA8PCAxNjsKKwlkYXRhWzFdIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKSA8PCAyNDsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgdm9pZCBwY2kyMHh4eF9kaW9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgY2hhciBjb250cm9sXzAxOworCXVuc2lnbmVkIGNoYXIgY29udHJvbF8yMzsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcjsKKworCWNvbnRyb2xfMDEgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQ09OVFJPTF8wMSk7CisJY29udHJvbF8yMyA9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19DT05UUk9MXzIzKTsKKwlidWZmZXIgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQlVGRkVSKTsKKworCWlmIChzLT5pb19iaXRzICYgMHgwMDAwMDBmZikgeworCQkvKiBvdXRwdXQgcG9ydCAwICovCisJCWNvbnRyb2xfMDEgJj0gUENJMjAwMDBfRElPX0VPQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CRSA8PCBESU9fUFNfMCkpKSB8IChESU9fQk8gPDwKKwkJCURJT19QU18wKTsKKwl9IGVsc2UgeworCQkvKiBpbnB1dCBwb3J0IDAgKi8KKwkJY29udHJvbF8wMSA9IChjb250cm9sXzAxICYgRElPX0NBTkQpIHwgUENJMjAwMDBfRElPX0VJQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CSSA8PCBESU9fUFNfMCkpKTsKKwl9CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwMDBmZjAwKSB7CisJCS8qIG91dHB1dCBwb3J0IDEgKi8KKwkJY29udHJvbF8wMSAmPSBQQ0kyMDAwMF9ESU9fT09DOworCQlidWZmZXIgPSAoYnVmZmVyICYgKH4oRElPX0JFIDw8IERJT19QU18xKSkpIHwgKERJT19CTyA8PAorCQkJRElPX1BTXzEpOworCX0gZWxzZSB7CisJCS8qIGlucHV0IHBvcnQgMSAqLworCQljb250cm9sXzAxID0gKGNvbnRyb2xfMDEgJiBESU9fQ0FORCkgfCBQQ0kyMDAwMF9ESU9fT0lDOworCQlidWZmZXIgPSAoYnVmZmVyICYgKH4oRElPX0JJIDw8IERJT19QU18xKSkpOworCX0KKwlpZiAocy0+aW9fYml0cyAmIDB4MDBmZjAwMDApIHsKKwkJLyogb3V0cHV0IHBvcnQgMiAqLworCQljb250cm9sXzIzICY9IFBDSTIwMDAwX0RJT19FT0M7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkUgPDwgRElPX1BTXzIpKSkgfCAoRElPX0JPIDw8CisJCQlESU9fUFNfMik7CisJfSBlbHNlIHsKKwkJLyogaW5wdXQgcG9ydCAyICovCisJCWNvbnRyb2xfMjMgPSAoY29udHJvbF8yMyAmIERJT19DQU5EKSB8IFBDSTIwMDAwX0RJT19FSUM7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkkgPDwgRElPX1BTXzIpKSk7CisJfQorCWlmIChzLT5pb19iaXRzICYgMHhmZjAwMDAwMCkgeworCQkvKiBvdXRwdXQgcG9ydCAzICovCisJCWNvbnRyb2xfMjMgJj0gUENJMjAwMDBfRElPX09PQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CRSA8PCBESU9fUFNfMykpKSB8IChESU9fQk8gPDwKKwkJCURJT19QU18zKTsKKwl9IGVsc2UgeworCQkvKiBpbnB1dCBwb3J0IDMgKi8KKwkJY29udHJvbF8yMyA9IChjb250cm9sXzIzICYgRElPX0NBTkQpIHwgUENJMjAwMDBfRElPX09JQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CSSA8PCBESU9fUFNfMykpKTsKKwl9CisJd3JpdGViKGNvbnRyb2xfMDEsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19DT05UUk9MXzAxKTsKKwl3cml0ZWIoY29udHJvbF8yMywgZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPX0NPTlRST0xfMjMpOworCXdyaXRlYihidWZmZXIsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19CVUZGRVIpOworfQorCisjaWYgMAorc3RhdGljIHZvaWQgcGNpMjB4eHhfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiBYWFggaWYgdGhlIGNoYW5uZWwgaXMgY29uZmlndXJlZCBmb3IgaW5wdXQsIGRvZXMgdGhpcworCSAgIGRvIGJhZCB0aGluZ3M/ICovCisJLyogWFhYIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIG9ubHkgdXBkYXRlIHRoZSByZWdpc3RlcnMKKwkgICB0aGF0IF9uZWVkXyB0byBiZSB1cGRhdGVkLiAgVGhpcyByZXF1aXJlcyBjaGFuZ2VzIHRvCisJICAgY29tZWRpLCBob3dldmVyLiAqLworCXdyaXRlYigocy0+c3RhdGUgPj4gMCkgJiAweGZmLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJd3JpdGViKChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18xKTsKKwl3cml0ZWIoKHMtPnN0YXRlID4+IDE2KSAmIDB4ZmYsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKTsKKwl3cml0ZWIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwY2kyMHh4eF9kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qIFhYWCBzYW1lIG5vdGUgYXMgYWJvdmUgKi8KKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJYml0cyB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMSkgPDwgODsKKwliaXRzIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKSA8PCAxNjsKKwliaXRzIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKSA8PCAyNDsKKworCXJldHVybiBiaXRzOworfQorI2VuZGlmCisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpMjB4eHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjODg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKQEAgLTAsMCArMSw5NzYgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworICBoYXJkd2FyZSBkcml2ZXIgZm9yIEpSMy9QQ0kgZm9yY2Ugc2Vuc29yIGJvYXJkCisKKyAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjoganIzX3BjaQorRGVzY3JpcHRpb246IEpSMy9QQ0kgZm9yY2Ugc2Vuc29yIGJvYXJkCitBdXRob3I6IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorU3RhdHVzOiB3b3JrcworRGV2aWNlczogW0pSM10gUENJIGZvcmNlIHNlbnNvciBib2FyZCAoanIzX3BjaSkKKworICBUaGUgRFNQIG9uIHRoZSBib2FyZCByZXF1aXJlcyBpbml0aWFsaXphdGlvbiBjb2RlLCB3aGljaCBjYW4KKyAgYmUgbG9hZGVkIGJ5IHBsYWNpbmcgaXQgaW4gL2xpYi9maXJtd2FyZS9jb21lZGkuCisgIFRoZSBpbml0aWFsaXphdGlvbiBjb2RlIHNob3VsZCBiZSBzb21ld2hlcmUgb24gdGhlIG1lZGlhIHlvdSBnb3QKKyAgd2l0aCB5b3VyIGNhcmQuIE9uZSB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY29tZWRpLm9yZworICBpbiB0aGUgY29tZWRpX25vbmZyZWVfZmlybXdhcmUgdGFyYmFsbC4KKworICBDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgbnVtYmVyIC0gaWYgYnVzIG51bWJlciBhbmQgc2xvdCBudW1iZXIgYXJlIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkcml2ZXIgc2VhcmNoIGZvciBmaXJzdCB1bnVzZWQgY2FyZAorICBbMV0gLSBQQ0kgc2xvdCBudW1iZXIKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgImpyM19wY2kuaCIKKworLyogSG90cGx1ZyBmaXJtd2FyZSBsb2FkaW5nIHN0dWZmICovCisKK3N0YXRpYyB2b2lkIGNvbWVkaV9md19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogZ2hvc3RfcmVsZWFzZVxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGNvbWVkaV9md19kZXZpY2UgPSB7CisJLmluaXRfbmFtZSA9ICJjb21lZGkiLAorCS5yZWxlYXNlID0gY29tZWRpX2Z3X3JlbGVhc2UKK307CisKK3R5cGVkZWYgaW50IGNvbWVkaV9maXJtd2FyZV9jYWxsYmFjayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljb25zdCB1OCAqIGRhdGEsIHNpemVfdCBzaXplKTsKKworc3RhdGljIGludCBjb21lZGlfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljaGFyICpuYW1lLCBjb21lZGlfZmlybXdhcmVfY2FsbGJhY2sgY2IpCit7CisJaW50IHJlc3VsdCA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljaGFyICpmaXJtd2FyZV9wYXRoOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXggPSAiY29tZWRpLyI7CisKKwlmaXJtd2FyZV9wYXRoID0ga21hbGxvYyhzdHJsZW4ocHJlZml4KSArIHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghZmlybXdhcmVfcGF0aCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCX0gZWxzZSB7CisJCWZpcm13YXJlX3BhdGhbMF0gPSAnXDAnOworCQlzdHJjYXQoZmlybXdhcmVfcGF0aCwgcHJlZml4KTsKKwkJc3RyY2F0KGZpcm13YXJlX3BhdGgsIG5hbWUpOworCQlyZXN1bHQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNvbWVkaV9md19kZXZpY2UpOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCXJlc3VsdCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaXJtd2FyZV9wYXRoLAorCQkJCSZjb21lZGlfZndfZGV2aWNlKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWlmICghY2IpIHsKKwkJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCQl9IGVsc2UgeworCQkJCQlyZXN1bHQgPSBjYihkZXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJCQkJfQorCQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJfQorCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmNvbWVkaV9md19kZXZpY2UpOworCQl9CisJCWtmcmVlKGZpcm13YXJlX3BhdGgpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSlIzIDB4MTc2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pSM18xX0NIQU5ORUwgMHgzMTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSlIzXzJfQ0hBTk5FTCAweDMxMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KUjNfM19DSEFOTkVMIDB4MzExMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pSM180X0NIQU5ORUwgMHgzMTE0CisKK3N0YXRpYyBpbnQganIzX3BjaV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBqcjNfcGNpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfanIzX3BjaSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJqcjNfcGNpIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpqcjNfcGNpX2F0dGFjaCwKKyAgICAgIGRldGFjaDpqcjNfcGNpX2RldGFjaCwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShqcjNfcGNpX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfSlIzLCBQQ0lfREVWSUNFX0lEX0pSM18xX0NIQU5ORUwsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0pSMywgUENJX0RFVklDRV9JRF9KUjNfMl9DSEFOTkVMLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9KUjMsIFBDSV9ERVZJQ0VfSURfSlIzXzNfQ0hBTk5FTCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfSlIzLCBQQ0lfREVWSUNFX0lEX0pSM180X0NIQU5ORUwsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGpyM19wY2lfcGNpX3RhYmxlKTsKKworc3RydWN0IGpyM19wY2lfZGV2X3ByaXZhdGUgeworCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJaW50IHBjaV9lbmFibGVkOworCXZvbGF0aWxlIHN0cnVjdCBqcjNfdCAqaW9iYXNlOworCWludCBuX2NoYW5uZWxzOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworCitzdHJ1Y3QgcG9sbF9kZWxheV90IHsKKworCWludCBtaW47CisJaW50IG1heDsKK307CisKKworc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgeworCXZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIG5leHRfdGltZV9taW47CisJdW5zaWduZWQgbG9uZyBuZXh0X3RpbWVfbWF4OworCWVudW0geyBzdGF0ZV9qcjNfcG9sbCwKKwkJc3RhdGVfanIzX2luaXRfd2FpdF9mb3Jfb2Zmc2V0LAorCQlzdGF0ZV9qcjNfaW5pdF90cmFuc2Zvcm1fY29tcGxldGUsCisJCXN0YXRlX2pyM19pbml0X3NldF9mdWxsX3NjYWxlX2NvbXBsZXRlLAorCQlzdGF0ZV9qcjNfaW5pdF91c2Vfb2Zmc2V0X2NvbXBsZXRlLAorCQlzdGF0ZV9qcjNfZG9uZQorCX0gc3RhdGU7CisJaW50IGNoYW5uZWxfbm87CisJaW50IHNlcmlhbF9ubzsKKwlpbnQgbW9kZWxfbm87CisJc3RydWN0IHsKKwkJaW50IGxlbmd0aDsKKwkJc3RydWN0IGNvbWVkaV9rcmFuZ2UgcmFuZ2U7CisJfSByYW5nZVs5XTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdGFibGVfbGlzdFs4ICogNyArIDJdOworCXVuc2lnbmVkIGludCBtYXhkYXRhX2xpc3RbOCAqIDcgKyAyXTsKKwl1MTYgZXJyb3JzOworCWludCByZXRyaWVzOworfTsKKworc3RhdGljIHN0cnVjdCBwb2xsX2RlbGF5X3QgcG9sbF9kZWxheV9taW5fbWF4KGludCBtaW4sIGludCBtYXgpCit7CisJc3RydWN0IHBvbGxfZGVsYXlfdCByZXN1bHQ7CisKKwlyZXN1bHQubWluID0gbWluOworCXJlc3VsdC5tYXggPSBtYXg7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpc19jb21wbGV0ZSh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJcmV0dXJuIGdldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDApID09IDA7Cit9CisKK3N0cnVjdCB0cmFuc2Zvcm1fdCB7CisJc3RydWN0IHsKKwkJdTE2IGxpbmtfdHlwZTsKKwkJczE2IGxpbmtfYW1vdW50OworCX0gbGlua1s4XTsKK307CisKK3N0YXRpYyB2b2lkIHNldF90cmFuc2Zvcm1zKHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCwKKwlzdHJ1Y3QgdHJhbnNmb3JtX3QgdHJhbnNmLCBzaG9ydCBudW0pCit7CisJaW50IGk7CisKKwludW0gJj0gMHgwMDBmOwkJLy8gTWFrZSBzdXJlIHRoYXQgMCA8PSBudW0gPD0gMTUKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisKKwkJc2V0X3UxNigmY2hhbm5lbC0+dHJhbnNmb3Jtc1tudW1dLmxpbmtbaV0ubGlua190eXBlLAorCQkJdHJhbnNmLmxpbmtbaV0ubGlua190eXBlKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJc2V0X3MxNigmY2hhbm5lbC0+dHJhbnNmb3Jtc1tudW1dLmxpbmtbaV0ubGlua19hbW91bnQsCisJCQl0cmFuc2YubGlua1tpXS5saW5rX2Ftb3VudCk7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWlmICh0cmFuc2YubGlua1tpXS5saW5rX3R5cGUgPT0gZW5kX3hfZm9ybSkgeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzZV90cmFuc2Zvcm0odm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsLCBzaG9ydCB0cmFuc2ZfbnVtKQoreworCXNldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDAsIDB4MDUwMCArICh0cmFuc2ZfbnVtICYgMHgwMDBmKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVzZV9vZmZzZXQodm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsLCBzaG9ydCBvZmZzZXRfbnVtKQoreworCXNldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDAsIDB4MDYwMCArIChvZmZzZXRfbnVtICYgMHgwMDBmKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9vZmZzZXQodm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsKQoreworCXNldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDAsIDB4MDcwMCk7Cit9CisKK3N0cnVjdCBzaXhfYXhpc190IHsKKwlzMTYgZng7CisJczE2IGZ5OworCXMxNiBmejsKKwlzMTYgbXg7CisJczE2IG15OworCXMxNiBtejsKK307CisKK3N0YXRpYyB2b2lkIHNldF9mdWxsX3NjYWxlcyh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwsCisJc3RydWN0IHNpeF9heGlzX3QgZnVsbF9zY2FsZSkKK3sKKwlwcmludGsoIiVkICVkICVkICVkICVkICVkXG4iLAorCQlmdWxsX3NjYWxlLmZ4LAorCQlmdWxsX3NjYWxlLmZ5LAorCQlmdWxsX3NjYWxlLmZ6LCBmdWxsX3NjYWxlLm14LCBmdWxsX3NjYWxlLm15LCBmdWxsX3NjYWxlLm16KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLmZ4LCBmdWxsX3NjYWxlLmZ4KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLmZ5LCBmdWxsX3NjYWxlLmZ5KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLmZ6LCBmdWxsX3NjYWxlLmZ6KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLm14LCBmdWxsX3NjYWxlLm14KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLm15LCBmdWxsX3NjYWxlLm15KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLm16LCBmdWxsX3NjYWxlLm16KTsKKwlzZXRfczE2KCZjaGFubmVsLT5jb21tYW5kX3dvcmQwLCAweDBhMDApOworfQorCitzdGF0aWMgc3RydWN0IHNpeF9heGlzX3QgZ2V0X21pbl9mdWxsX3NjYWxlcyh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IHNpeF9heGlzX3QgcmVzdWx0OworCXJlc3VsdC5meCA9IGdldF9zMTYoJmNoYW5uZWwtPm1pbl9mdWxsX3NjYWxlLmZ4KTsKKwlyZXN1bHQuZnkgPSBnZXRfczE2KCZjaGFubmVsLT5taW5fZnVsbF9zY2FsZS5meSk7CisJcmVzdWx0LmZ6ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWluX2Z1bGxfc2NhbGUuZnopOworCXJlc3VsdC5teCA9IGdldF9zMTYoJmNoYW5uZWwtPm1pbl9mdWxsX3NjYWxlLm14KTsKKwlyZXN1bHQubXkgPSBnZXRfczE2KCZjaGFubmVsLT5taW5fZnVsbF9zY2FsZS5teSk7CisJcmVzdWx0Lm16ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWluX2Z1bGxfc2NhbGUubXopOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2l4X2F4aXNfdCBnZXRfbWF4X2Z1bGxfc2NhbGVzKHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3Qgc2l4X2F4aXNfdCByZXN1bHQ7CisJcmVzdWx0LmZ4ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWF4X2Z1bGxfc2NhbGUuZngpOworCXJlc3VsdC5meSA9IGdldF9zMTYoJmNoYW5uZWwtPm1heF9mdWxsX3NjYWxlLmZ5KTsKKwlyZXN1bHQuZnogPSBnZXRfczE2KCZjaGFubmVsLT5tYXhfZnVsbF9zY2FsZS5meik7CisJcmVzdWx0Lm14ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWF4X2Z1bGxfc2NhbGUubXgpOworCXJlc3VsdC5teSA9IGdldF9zMTYoJmNoYW5uZWwtPm1heF9mdWxsX3NjYWxlLm15KTsKKwlyZXN1bHQubXogPSBnZXRfczE2KCZjaGFubmVsLT5tYXhfZnVsbF9zY2FsZS5teik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBqcjNfcGNpX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcDsKKwlpbnQgY2hhbm5lbDsKKworCXAgPSBzLT5wcml2YXRlOworCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAocCA9PSBOVUxMIHx8IGNoYW5uZWwgPiA1NykgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWludCBpOworCisJCXJlc3VsdCA9IGluc24tPm47CisJCWlmIChwLT5zdGF0ZSAhPSBzdGF0ZV9qcjNfZG9uZSB8fAorCQkJKGdldF91MTYoJnAtPmNoYW5uZWwtPgorCQkJCQllcnJvcnMpICYgKHdhdGNoX2RvZyB8IHdhdGNoX2RvZzIgfAorCQkJCQlzZW5zb3JfY2hhbmdlKSkpIHsKKwkJCS8qIE5vIHNlbnNvciBvciBzZW5zb3IgY2hhbmdlZCAqLworCQkJaWYgKHAtPnN0YXRlID09IHN0YXRlX2pyM19kb25lKSB7CisJCQkJLyogUmVzdGFydCBwb2xsaW5nICovCisJCQkJcC0+c3RhdGUgPSBzdGF0ZV9qcjNfcG9sbDsKKwkJCX0KKwkJCXJlc3VsdCA9IC1FQUdBSU47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkJaWYgKGNoYW5uZWwgPCA1NikgeworCQkJCWludCBheGlzLCBmaWx0ZXI7CisKKwkJCQlheGlzID0gY2hhbm5lbCAlIDg7CisJCQkJZmlsdGVyID0gY2hhbm5lbCAvIDg7CisJCQkJaWYgKHAtPnN0YXRlICE9IHN0YXRlX2pyM19kb25lKSB7CisJCQkJCWRhdGFbaV0gPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWludCBGID0gMDsKKwkJCQkJc3dpdGNoIChheGlzKSB7CisJCQkJCWNhc2UgMDp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCWZ4KTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQlmeSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJZnopOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMzp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCW14KTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQlteSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA1OnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJbXopOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNjp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCXYxKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDc6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQl2Mik7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkYXRhW2ldID0gRiArIDB4NDAwMDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGNoYW5uZWwgPT0gNTYpIHsKKwkJCQlpZiAocC0+c3RhdGUgIT0gc3RhdGVfanIzX2RvbmUpIHsKKwkJCQkJZGF0YVtpXSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGF0YVtpXSA9CisJCQkJCQlnZXRfdTE2KCZwLT5jaGFubmVsLT5tb2RlbF9ubyk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChjaGFubmVsID09IDU3KSB7CisJCQkJaWYgKHAtPnN0YXRlICE9IHN0YXRlX2pyM19kb25lKSB7CisJCQkJCWRhdGFbaV0gPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWRhdGFbaV0gPQorCQkJCQkJZ2V0X3UxNigmcC0+Y2hhbm5lbC0+c2VyaWFsX25vKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQganIzX3BjaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCisJcHJpbnRrKCJqcjNfcGNpX29wZW5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnA7CisKKwkJcCA9IGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlOworCQlpZiAocCkgeworCQkJcHJpbnRrKCJzZXJpYWw6ICVwICVkICglZClcbiIsIHAsIHAtPnNlcmlhbF9ubywKKwkJCQlwLT5jaGFubmVsX25vKTsKKwkJfQorCX0KK30KKworaW50IHJlYWRfaWRtX3dvcmQoY29uc3QgdTggKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50ICpwb3MsIHVuc2lnbmVkIGludCAqdmFsKQoreworCWludCByZXN1bHQgPSAwOworCWlmIChwb3MgIT0gMCAmJiB2YWwgIT0gMCkgeworCQkvLyBTa2lwIG92ZXIgbm9uIGhleAorCQlmb3IgKDsgKnBvcyA8IHNpemUgJiYgIWlzeGRpZ2l0KGRhdGFbKnBvc10pOyAoKnBvcykrKykgeworCQl9CisJCS8vIENvbGxlY3QgdmFsdWUKKwkJKnZhbCA9IDA7CisJCWZvciAoOyAqcG9zIDwgc2l6ZSAmJiBpc3hkaWdpdChkYXRhWypwb3NdKTsgKCpwb3MpKyspIHsKKwkJCWNoYXIgY2ggPSB0b2xvd2VyKGRhdGFbKnBvc10pOworCQkJcmVzdWx0ID0gMTsKKwkJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSB7CisJCQkJKnZhbCA9ICgqdmFsIDw8IDQpICsgKGNoIC0gJzAnKTsKKwkJCX0gZWxzZSBpZiAoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykgeworCQkJCSp2YWwgPSAoKnZhbCA8PCA0KSArIChjaCAtICdhJyArIDEwKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGpyM19kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3QgdTggKiBkYXRhLAorCXNpemVfdCBzaXplKQoreworCS8qCisJICogSURNIGZpbGUgZm9ybWF0IGlzOgorCSAqICAgeyBjb3VudCwgYWRkcmVzcywgZGF0YSA8Y291bnQ+IH0gKgorCSAqICAgZmZmZgorCSAqLworCWludCByZXN1bHQsIG1vcmUsIHBvcywgT0s7CisKKwlyZXN1bHQgPSAwOworCW1vcmUgPSAxOworCXBvcyA9IDA7CisJT0sgPSAwOworCXdoaWxlIChtb3JlKSB7CisJCXVuc2lnbmVkIGludCBjb3VudCwgYWRkcjsKKworCQltb3JlID0gbW9yZSAmJiByZWFkX2lkbV93b3JkKGRhdGEsIHNpemUsICZwb3MsICZjb3VudCk7CisJCWlmIChtb3JlICYmIGNvdW50ID09IDB4ZmZmZikgeworCQkJT0sgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJbW9yZSA9IG1vcmUgJiYgcmVhZF9pZG1fd29yZChkYXRhLCBzaXplLCAmcG9zLCAmYWRkcik7CisJCXdoaWxlIChtb3JlICYmIGNvdW50ID4gMCkgeworCQkJdW5zaWduZWQgaW50IGR1bW15OworCQkJbW9yZSA9IG1vcmUgJiYgcmVhZF9pZG1fd29yZChkYXRhLCBzaXplLCAmcG9zLCAmZHVtbXkpOworCQkJY291bnQtLTsKKwkJfQorCX0KKworCWlmICghT0spIHsKKwkJcmVzdWx0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpwID0gZGV2LT5wcml2YXRlOworCisJCWZvciAoaSA9IDA7IGkgPCBwLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpzcDsKKworCQkJc3AgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKwkJCW1vcmUgPSAxOworCQkJcG9zID0gMDsKKwkJCXdoaWxlIChtb3JlKSB7CisJCQkJdW5zaWduZWQgaW50IGNvdW50LCBhZGRyOworCQkJCW1vcmUgPSBtb3JlCisJCQkJCSYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywKKwkJCQkJJmNvdW50KTsKKwkJCQlpZiAobW9yZSAmJiBjb3VudCA9PSAweGZmZmYpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1vcmUgPSBtb3JlCisJCQkJCSYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywKKwkJCQkJJmFkZHIpOworCQkJCXByaW50aygiTG9hZGluZyMlZCAlNC40eCBieXRlcyBhdCAlNC40eFxuIiwgaSwKKwkJCQkJY291bnQsIGFkZHIpOworCQkJCXdoaWxlIChtb3JlICYmIGNvdW50ID4gMCkgeworCQkJCQlpZiAoYWRkciAmIDB4NDAwMCkgeworCQkJCQkJLy8gMTYgYml0IGRhdGEsIG5ldmVyIHNlZW4gaW4gcmVhbCBsaWZlISEKKwkJCQkJCXVuc2lnbmVkIGludCBkYXRhMTsKKworCQkJCQkJbW9yZSA9IG1vcmUKKwkJCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsCisJCQkJCQkJc2l6ZSwgJnBvcywgJmRhdGExKTsKKwkJCQkJCWNvdW50LS07CisJCQkJCQkvLyBwcmludGsoImpyM19kYXRhLCBub3QgdGVzdGVkXG4iKTsKKwkJCQkJCS8vICAgICAgICBqcjNbYWRkciArIDB4MjAwMDAgKiBwbnVtXSA9IGRhdGExOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gIERvd25sb2FkIDI0IGJpdCBwcm9ncmFtCisJCQkJCQl1bnNpZ25lZCBpbnQgZGF0YTEsIGRhdGEyOworCisJCQkJCQltb3JlID0gbW9yZQorCQkJCQkJCSYmIHJlYWRfaWRtX3dvcmQoZGF0YSwKKwkJCQkJCQlzaXplLCAmcG9zLCAmZGF0YTEpOworCQkJCQkJbW9yZSA9IG1vcmUKKwkJCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsCisJCQkJCQkJc2l6ZSwgJnBvcywgJmRhdGEyKTsKKwkJCQkJCWNvdW50IC09IDI7CisJCQkJCQlpZiAobW9yZSkgeworCQkJCQkJCXNldF91MTYoJnAtPmlvYmFzZS0+CisJCQkJCQkJCWNoYW5uZWxbaV0uCisJCQkJCQkJCXByb2dyYW1fbG93CisJCQkJCQkJCVthZGRyXSwgZGF0YTEpOworCQkJCQkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCQkJCQkJc2V0X3UxNigmcC0+aW9iYXNlLT4KKwkJCQkJCQkJY2hhbm5lbFtpXS4KKwkJCQkJCQkJcHJvZ3JhbV9oaWdoCisJCQkJCQkJCVthZGRyXSwgZGF0YTIpOworCQkJCQkJCWNvbWVkaV91ZGVsYXkoMSk7CisKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlhZGRyKys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9sbF9kZWxheV90IGpyM19wY2lfcG9sbF9zdWJkZXZpY2Uoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBwb2xsX2RlbGF5X3QgcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpwID0gcy0+cHJpdmF0ZTsKKworCWlmIChwKSB7CisJCXZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCA9IHAtPmNoYW5uZWw7CisJCWludCBlcnJvcnMgPSBnZXRfdTE2KCZjaGFubmVsLT5lcnJvcnMpOworCisJCWlmIChlcnJvcnMgIT0gcC0+ZXJyb3JzKSB7CisJCQlwcmludGsoIkVycm9yczogJXggLT4gJXhcbiIsIHAtPmVycm9ycywgZXJyb3JzKTsKKwkJCXAtPmVycm9ycyA9IGVycm9yczsKKwkJfQorCQlpZiAoZXJyb3JzICYgKHdhdGNoX2RvZyB8IHdhdGNoX2RvZzIgfCBzZW5zb3JfY2hhbmdlKSkgeworCQkJLy8gU2Vuc29yIGNvbW11bmljYXRpb24gbG9zdCwgZm9yY2UgcG9sbCBtb2RlCisJCQlwLT5zdGF0ZSA9IHN0YXRlX2pyM19wb2xsOworCisJCX0KKwkJc3dpdGNoIChwLT5zdGF0ZSkgeworCQljYXNlIHN0YXRlX2pyM19wb2xsOnsKKwkJCQl1MTYgbW9kZWxfbm8gPSBnZXRfdTE2KCZjaGFubmVsLT5tb2RlbF9ubyk7CisJCQkJdTE2IHNlcmlhbF9ubyA9IGdldF91MTYoJmNoYW5uZWwtPnNlcmlhbF9ubyk7CisJCQkJaWYgKChlcnJvcnMgJiAod2F0Y2hfZG9nIHwgd2F0Y2hfZG9nMikpIHx8CisJCQkJCW1vZGVsX25vID09IDAgfHwgc2VyaWFsX25vID09IDApIHsKKwkJCQkJLy8gU3RpbGwgbm8gc2Vuc29yLCBrZWVwIG9uIHBvbGxpbmcuIFNpbmNlIGl0IHRha2VzIHVwIHRvCisJCQkJCS8vIDEwIHNlY29uZHMgZm9yIG9mZnNldHMgdG8gc3RhYmlsaXplLCBwb2xsaW5nIGVhY2gKKwkJCQkJLy8gc2Vjb25kIHNob3VsZCBzdWZmaWNlLgorCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcC0+cmV0cmllcyA9IDA7CisJCQkJCXAtPnN0YXRlID0KKwkJCQkJCXN0YXRlX2pyM19pbml0X3dhaXRfZm9yX29mZnNldDsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19pbml0X3dhaXRfZm9yX29mZnNldDp7CisJCQkJcC0+cmV0cmllcysrOworCQkJCWlmIChwLT5yZXRyaWVzIDwgMTApIHsKKwkJCQkJLy8gV2FpdCBmb3Igb2ZmZXNldCB0byBzdGFiaWxpemUgKDwgMTAgcyBhY2NvcmRpbmcgdG8gbWFudWFsKQorCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IHRyYW5zZm9ybV90IHRyYW5zZjsKKworCQkJCQlwLT5tb2RlbF9ubyA9CisJCQkJCQlnZXRfdTE2KCZjaGFubmVsLT5tb2RlbF9ubyk7CisJCQkJCXAtPnNlcmlhbF9ubyA9CisJCQkJCQlnZXRfdTE2KCZjaGFubmVsLT5zZXJpYWxfbm8pOworCisJCQkJCXByaW50aygiU2V0dGluZyB0cmFuc2Zvcm0gZm9yIGNoYW5uZWwgJWRcbiIsIHAtPmNoYW5uZWxfbm8pOworCQkJCQlwcmludGsoIlNlbnNvciBNb2RlbCAgICAgPSAlaVxuIiwKKwkJCQkJCXAtPm1vZGVsX25vKTsKKwkJCQkJcHJpbnRrKCJTZW5zb3IgU2VyaWFsICAgID0gJWlcbiIsCisJCQkJCQlwLT5zZXJpYWxfbm8pOworCisJCQkJCS8vIFRyYW5zZm9ybWF0aW9uIGFsbCB6ZXJvcworCQkJCQl0cmFuc2YubGlua1swXS5saW5rX3R5cGUgPQorCQkJCQkJKGVudW0gbGlua190eXBlcykwOworCQkJCQl0cmFuc2YubGlua1swXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfdHlwZSA9CisJCQkJCQkoZW51bSBsaW5rX3R5cGVzKTA7CisJCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfYW1vdW50ID0gMDsKKwkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua190eXBlID0KKwkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua19hbW91bnQgPSAwOworCQkJCQl0cmFuc2YubGlua1szXS5saW5rX3R5cGUgPQorCQkJCQkJKGVudW0gbGlua190eXBlcykwOworCQkJCQl0cmFuc2YubGlua1szXS5saW5rX2Ftb3VudCA9IDA7CisKKwkJCQkJc2V0X3RyYW5zZm9ybXMoY2hhbm5lbCwgdHJhbnNmLCAwKTsKKwkJCQkJdXNlX3RyYW5zZm9ybShjaGFubmVsLCAwKTsKKwkJCQkJcC0+c3RhdGUgPQorCQkJCQkJc3RhdGVfanIzX2luaXRfdHJhbnNmb3JtX2NvbXBsZXRlOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CS8vIEFsbG93IDIwIG1zIGZvciBjb21wbGV0aW9uCisJCQkJfQorCQkJfSBicmVhazsKKwkJY2FzZSBzdGF0ZV9qcjNfaW5pdF90cmFuc2Zvcm1fY29tcGxldGU6eworCQkJCWlmICghaXNfY29tcGxldGUoY2hhbm5lbCkpIHsKKwkJCQkJcHJpbnRrKCJzdGF0ZV9qcjNfaW5pdF90cmFuc2Zvcm1fY29tcGxldGUgY29tcGxldGUgPSAlZFxuIiwgaXNfY29tcGxldGUoY2hhbm5lbCkpOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gU2V0IGZ1bGwgc2NhbGUKKwkJCQkJc3RydWN0IHNpeF9heGlzX3QgbWluX2Z1bGxfc2NhbGU7CisJCQkJCXN0cnVjdCBzaXhfYXhpc190IG1heF9mdWxsX3NjYWxlOworCisJCQkJCW1pbl9mdWxsX3NjYWxlID0KKwkJCQkJCWdldF9taW5fZnVsbF9zY2FsZXMoY2hhbm5lbCk7CisJCQkJCXByaW50aygiT2J0YWluZWQgTWluLiBGdWxsIFNjYWxlczpcbiIpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1pbl9mdWxsX3NjYWxlKS5meCk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWluX2Z1bGxfc2NhbGUpLmZ5KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtaW5fZnVsbF9zY2FsZSkuZnopOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1pbl9mdWxsX3NjYWxlKS5teCk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWluX2Z1bGxfc2NhbGUpLm15KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtaW5fZnVsbF9zY2FsZSkubXopOworCQkJCQlwcmludGsoIlxuIik7CisKKwkJCQkJbWF4X2Z1bGxfc2NhbGUgPQorCQkJCQkJZ2V0X21heF9mdWxsX3NjYWxlcyhjaGFubmVsKTsKKwkJCQkJcHJpbnRrKCJPYnRhaW5lZCBNYXguIEZ1bGwgU2NhbGVzOlxuIik7CisJCQkJCXByaW50aygiJWkgICAiLCAobWF4X2Z1bGxfc2NhbGUpLmZ4KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtYXhfZnVsbF9zY2FsZSkuZnkpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1heF9mdWxsX3NjYWxlKS5meik7CisJCQkJCXByaW50aygiJWkgICAiLCAobWF4X2Z1bGxfc2NhbGUpLm14KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtYXhfZnVsbF9zY2FsZSkubXkpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1heF9mdWxsX3NjYWxlKS5teik7CisJCQkJCXByaW50aygiXG4iKTsKKworCQkJCQlzZXRfZnVsbF9zY2FsZXMoY2hhbm5lbCwKKwkJCQkJCW1heF9mdWxsX3NjYWxlKTsKKworCQkJCQlwLT5zdGF0ZSA9CisJCQkJCQlzdGF0ZV9qcjNfaW5pdF9zZXRfZnVsbF9zY2FsZV9jb21wbGV0ZTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDIwLCAxMDApOwkvLyBBbGxvdyAyMCBtcyBmb3IgY29tcGxldGlvbgorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19pbml0X3NldF9mdWxsX3NjYWxlX2NvbXBsZXRlOnsKKwkJCQlpZiAoIWlzX2NvbXBsZXRlKGNoYW5uZWwpKSB7CisJCQkJCXByaW50aygic3RhdGVfanIzX2luaXRfc2V0X2Z1bGxfc2NhbGVfY29tcGxldGUgY29tcGxldGUgPSAlZFxuIiwgaXNfY29tcGxldGUoY2hhbm5lbCkpOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdm9sYXRpbGUgc3RydWN0IGZvcmNlX2FycmF5ICpmdWxsX3NjYWxlOworCisJCQkJCS8vIFVzZSByYW5nZXMgaW4ga04gb3Igd2Ugd2lsbCBvdmVyZmxvdyBhcm91bnQgMjAwME4hCisJCQkJCWZ1bGxfc2NhbGUgPSAmY2hhbm5lbC0+ZnVsbF9zY2FsZTsKKwkJCQkJcC0+cmFuZ2VbMF0ucmFuZ2UubWluID0KKwkJCQkJCS1nZXRfczE2KCZmdWxsX3NjYWxlLT5meCkgKgorCQkJCQkJMTAwMDsKKwkJCQkJcC0+cmFuZ2VbMF0ucmFuZ2UubWF4ID0KKwkJCQkJCWdldF9zMTYoJmZ1bGxfc2NhbGUtPmZ4KSAqIDEwMDA7CisJCQkJCXAtPnJhbmdlWzFdLnJhbmdlLm1pbiA9CisJCQkJCQktZ2V0X3MxNigmZnVsbF9zY2FsZS0+ZnkpICoKKwkJCQkJCTEwMDA7CisJCQkJCXAtPnJhbmdlWzFdLnJhbmdlLm1heCA9CisJCQkJCQlnZXRfczE2KCZmdWxsX3NjYWxlLT5meSkgKiAxMDAwOworCQkJCQlwLT5yYW5nZVsyXS5yYW5nZS5taW4gPQorCQkJCQkJLWdldF9zMTYoJmZ1bGxfc2NhbGUtPmZ6KSAqCisJCQkJCQkxMDAwOworCQkJCQlwLT5yYW5nZVsyXS5yYW5nZS5tYXggPQorCQkJCQkJZ2V0X3MxNigmZnVsbF9zY2FsZS0+ZnopICogMTAwMDsKKwkJCQkJcC0+cmFuZ2VbM10ucmFuZ2UubWluID0KKwkJCQkJCS1nZXRfczE2KCZmdWxsX3NjYWxlLT5teCkgKiAxMDA7CisJCQkJCXAtPnJhbmdlWzNdLnJhbmdlLm1heCA9CisJCQkJCQlnZXRfczE2KCZmdWxsX3NjYWxlLT5teCkgKiAxMDA7CisJCQkJCXAtPnJhbmdlWzRdLnJhbmdlLm1pbiA9CisJCQkJCQktZ2V0X3MxNigmZnVsbF9zY2FsZS0+bXkpICogMTAwOworCQkJCQlwLT5yYW5nZVs0XS5yYW5nZS5tYXggPQorCQkJCQkJZ2V0X3MxNigmZnVsbF9zY2FsZS0+bXkpICogMTAwOworCQkJCQlwLT5yYW5nZVs1XS5yYW5nZS5taW4gPQorCQkJCQkJLWdldF9zMTYoJmZ1bGxfc2NhbGUtPm16KSAqIDEwMDsKKwkJCQkJcC0+cmFuZ2VbNV0ucmFuZ2UubWF4ID0KKwkJCQkJCWdldF9zMTYoJmZ1bGxfc2NhbGUtPm16KSAqIDEwMDsKKwkJCQkJcC0+cmFuZ2VbNl0ucmFuZ2UubWluID0gLWdldF9zMTYoJmZ1bGxfc2NhbGUtPnYxKSAqIDEwMDsJLy8gPz8KKwkJCQkJcC0+cmFuZ2VbNl0ucmFuZ2UubWF4ID0gZ2V0X3MxNigmZnVsbF9zY2FsZS0+djEpICogMTAwOwkvLyA/PworCQkJCQlwLT5yYW5nZVs3XS5yYW5nZS5taW4gPSAtZ2V0X3MxNigmZnVsbF9zY2FsZS0+djIpICogMTAwOwkvLyA/PworCQkJCQlwLT5yYW5nZVs3XS5yYW5nZS5tYXggPSBnZXRfczE2KCZmdWxsX3NjYWxlLT52MikgKiAxMDA7CS8vID8/CisJCQkJCXAtPnJhbmdlWzhdLnJhbmdlLm1pbiA9IDA7CisJCQkJCXAtPnJhbmdlWzhdLnJhbmdlLm1heCA9IDY1NTM1OworCisJCQkJCXsKKwkJCQkJCWludCBpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQkJCQkJCXByaW50aygiJWQgJWQgLSAlZFxuIiwKKwkJCQkJCQkJaSwKKwkJCQkJCQkJcC0+cmFuZ2VbaV0uCisJCQkJCQkJCXJhbmdlLm1pbiwKKwkJCQkJCQkJcC0+cmFuZ2VbaV0uCisJCQkJCQkJCXJhbmdlLm1heCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl1c2Vfb2Zmc2V0KGNoYW5uZWwsIDApOworCQkJCQlwLT5zdGF0ZSA9CisJCQkJCQlzdGF0ZV9qcjNfaW5pdF91c2Vfb2Zmc2V0X2NvbXBsZXRlOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoNDAsIDEwMCk7CS8vIEFsbG93IDQwIG1zIGZvciBjb21wbGV0aW9uCisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfanIzX2luaXRfdXNlX29mZnNldF9jb21wbGV0ZTp7CisJCQkJaWYgKCFpc19jb21wbGV0ZShjaGFubmVsKSkgeworCQkJCQlwcmludGsoInN0YXRlX2pyM19pbml0X3VzZV9vZmZzZXRfY29tcGxldGUgY29tcGxldGUgPSAlZFxuIiwgaXNfY29tcGxldGUoY2hhbm5lbCkpOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRrKCJEZWZhdWx0IG9mZnNldHMgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIGdldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMuZngpLCBnZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLmZ5KSwgZ2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5meiksIGdldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMubXgpLCBnZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLm15KSwgZ2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5teikpOworCisJCQkJCXNldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMuZngsIDApOworCQkJCQlzZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLmZ5LCAwKTsKKwkJCQkJc2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5meiwgMCk7CisJCQkJCXNldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMubXgsIDApOworCQkJCQlzZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLm15LCAwKTsKKwkJCQkJc2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5teiwgMCk7CisKKwkJCQkJc2V0X29mZnNldChjaGFubmVsKTsKKworCQkJCQlwLT5zdGF0ZSA9IHN0YXRlX2pyM19kb25lOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19kb25lOnsKKwkJCQlwb2xsX2RlbGF5X21pbl9tYXgoMTAwMDAsIDIwMDAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OnsKKwkJCQlwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBqcjNfcGNpX3BvbGxfZGV2KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QganIzX3BjaV9kZXZfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIG5vdzsKKwlpbnQgZGVsYXk7CisJaW50IGk7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZWxheSA9IDEwMDA7CisJbm93ID0gamlmZmllczsKKwkvLyBQb2xsIGFsbCBjaGFubmVscyB0aGF0IGFyZSByZWFkeSB0byBiZSBwb2xsZWQKKwlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+bl9jaGFubmVsczsgaSsrKSB7CisJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpzdWJkZXZwcml2ID0gZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGU7CisJCWlmIChub3cgPiBzdWJkZXZwcml2LT5uZXh0X3RpbWVfbWluKSB7CisJCQlzdHJ1Y3QgcG9sbF9kZWxheV90IHN1Yl9kZWxheTsKKworCQkJc3ViX2RlbGF5ID0ganIzX3BjaV9wb2xsX3N1YmRldmljZSgmZGV2LT5zdWJkZXZpY2VzW2ldKTsKKwkJCXN1YmRldnByaXYtPm5leHRfdGltZV9taW4gPQorCQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHN1Yl9kZWxheS5taW4pOworCQkJc3ViZGV2cHJpdi0+bmV4dF90aW1lX21heCA9CisJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoc3ViX2RlbGF5Lm1heCk7CisJCQlpZiAoc3ViX2RlbGF5Lm1heCAmJiBzdWJfZGVsYXkubWF4IDwgZGVsYXkpIHsKKwkJCQkvLyBXYWtlIHVwIGFzIGxhdGUgYXMgcG9zc2libGUgLT4gcG9sbCBhcyBtYW55IGNoYW5uZWxzIGFzCisJCQkJLy8gcG9zc2libGUgYXQgb25jZQorCQkJCWRlbGF5ID0gc3ViX2RlbGF5Lm1heDsKKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJZGV2cHJpdi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRlbGF5KTsKKwlhZGRfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKK30KKworc3RhdGljIGludCBqcjNfcGNpX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqY2FyZCA9IE5VTEw7CisJaW50IG9wdF9idXMsIG9wdF9zbG90LCBpOworCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpkZXZwcml2OworCisJcHJpbnRrKCJjb21lZGklZDoganIzX3BjaVxuIiwgZGV2LT5taW5vcik7CisKKwlvcHRfYnVzID0gaXQtPm9wdGlvbnNbMF07CisJb3B0X3Nsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmIChzaXplb2Yoc3RydWN0IGpyM19jaGFubmVsKSAhPSAweGMwMCkgeworCQlwcmludGsoInNpemVvZihzdHJ1Y3QganIzX2NoYW5uZWwpID0gJXggW2V4cGVjdGVkICV4XVxuIiwKKwkJCSh1bnNpZ25lZClzaXplb2Yoc3RydWN0IGpyM19jaGFubmVsKSwgMHhjMDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXN1bHQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNhcmQgPSBOVUxMOworCWRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJaW5pdF90aW1lcigmZGV2cHJpdi0+dGltZXIpOworCXdoaWxlICgxKSB7CisJCWNhcmQgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0pSMywgUENJX0FOWV9JRCwgY2FyZCk7CisJCWlmIChjYXJkID09IE5VTEwpIHsKKwkJCS8qIE5vIGNhcmQgZm91bmQgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChjYXJkLT5kZXZpY2UpIHsKKwkJCWNhc2UgUENJX0RFVklDRV9JRF9KUjNfMV9DSEFOTkVMOnsKKwkJCQkJZGV2cHJpdi0+bl9jaGFubmVscyA9IDE7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0pSM18yX0NIQU5ORUw6eworCQkJCQlkZXZwcml2LT5uX2NoYW5uZWxzID0gMjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9ERVZJQ0VfSURfSlIzXzNfQ0hBTk5FTDp7CisJCQkJCWRldnByaXYtPm5fY2hhbm5lbHMgPSAzOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgUENJX0RFVklDRV9JRF9KUjNfNF9DSEFOTkVMOnsKKwkJCQkJZGV2cHJpdi0+bl9jaGFubmVscyA9IDQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDp7CisJCQkJCWRldnByaXYtPm5fY2hhbm5lbHMgPSAwOworCQkJCX0KKwkJCX0KKwkJCWlmIChkZXZwcml2LT5uX2NoYW5uZWxzID49IDEpIHsKKwkJCQlpZiAob3B0X2J1cyA9PSAwICYmIG9wdF9zbG90ID09IDApIHsKKwkJCQkJLyogVGFrZSBmaXJzdCBhdmFpbGFibGUgY2FyZCAqLworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKG9wdF9idXMgPT0gY2FyZC0+YnVzLT5udW1iZXIgJiYKKwkJCQkJb3B0X3Nsb3QgPT0gUENJX1NMT1QoY2FyZC0+ZGV2Zm4pKSB7CisJCQkJCS8qIFRha2UgcmVxdWVzdGVkIGNhcmQgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICghY2FyZCkgeworCQlwcmludGsoIiBubyBqcjNfcGNpIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IGNhcmQ7CisJCWRldi0+Ym9hcmRfbmFtZSA9ICJqcjNfcGNpIjsKKwl9CisJaWYgKChyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShjYXJkLCAianIzX3BjaSIpKSA8IDApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldnByaXYtPnBjaV9lbmFibGVkID0gMTsKKwlkZXZwcml2LT5pb2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwgc2l6ZW9mKHN0cnVjdCBqcjNfdCkpOworCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXZwcml2LT5uX2NoYW5uZWxzKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlkZXYtPm9wZW4gPSBqcjNfcGNpX29wZW47CisJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPm5fY2hhbm5lbHM7IGkrKykgeworCQlkZXYtPnN1YmRldmljZXNbaV0udHlwZSA9IENPTUVESV9TVUJEX0FJOworCQlkZXYtPnN1YmRldmljZXNbaV0uc3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLm5fY2hhbiA9IDggKiA3ICsgMjsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLmluc25fcmVhZCA9IGpyM19wY2lfYWlfaW5zbl9yZWFkOworCQlkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpIHsKKwkJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpwOworCQkJaW50IGo7CisKKwkJCXAgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKwkJCXAtPmNoYW5uZWwgPSAmZGV2cHJpdi0+aW9iYXNlLT5jaGFubmVsW2ldLmRhdGE7CisJCQlwcmludGsoInAtPmNoYW5uZWwgJXAgJXAgKCV0eClcbiIsCisJCQkJcC0+Y2hhbm5lbCwgZGV2cHJpdi0+aW9iYXNlLAorCQkJCSgoY2hhciAqKShwLT5jaGFubmVsKSAtCisJCQkJCShjaGFyICopKGRldnByaXYtPmlvYmFzZSkpKTsKKwkJCXAtPmNoYW5uZWxfbm8gPSBpOworCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJCWludCBrOworCisJCQkJcC0+cmFuZ2Vbal0ubGVuZ3RoID0gMTsKKwkJCQlwLT5yYW5nZVtqXS5yYW5nZS5taW4gPSAtMTAwMDAwMDsKKwkJCQlwLT5yYW5nZVtqXS5yYW5nZS5tYXggPSAxMDAwMDAwOworCQkJCWZvciAoayA9IDA7IGsgPCA3OyBrKyspIHsKKwkJCQkJcC0+cmFuZ2VfdGFibGVfbGlzdFtqICsgayAqIDhdID0KKwkJCQkJCShzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAmIHAtPnJhbmdlW2pdOworCQkJCQlwLT5tYXhkYXRhX2xpc3RbaiArIGsgKiA4XSA9IDB4N2ZmZjsKKwkJCQl9CisJCQl9CisJCQlwLT5yYW5nZVs4XS5sZW5ndGggPSAxOworCQkJcC0+cmFuZ2VbOF0ucmFuZ2UubWluID0gMDsKKwkJCXAtPnJhbmdlWzhdLnJhbmdlLm1heCA9IDY1NTM2OworCisJCQlwLT5yYW5nZV90YWJsZV9saXN0WzU2XSA9CisJCQkJKHN0cnVjdCBjb21lZGlfbHJhbmdlICopICYgcC0+cmFuZ2VbOF07CisJCQlwLT5yYW5nZV90YWJsZV9saXN0WzU3XSA9CisJCQkJKHN0cnVjdCBjb21lZGlfbHJhbmdlICopICYgcC0+cmFuZ2VbOF07CisJCQlwLT5tYXhkYXRhX2xpc3RbNTZdID0gMHhmZmZmOworCQkJcC0+bWF4ZGF0YV9saXN0WzU3XSA9IDB4ZmZmZjsKKwkJCS8vIENoYW5uZWwgc3BlY2lmaWMgcmFuZ2UgYW5kIG1heGRhdGEKKwkJCWRldi0+c3ViZGV2aWNlc1tpXS5yYW5nZV90YWJsZSA9IDA7CisJCQlkZXYtPnN1YmRldmljZXNbaV0ucmFuZ2VfdGFibGVfbGlzdCA9CisJCQkJcC0+cmFuZ2VfdGFibGVfbGlzdDsKKwkJCWRldi0+c3ViZGV2aWNlc1tpXS5tYXhkYXRhID0gMDsKKwkJCWRldi0+c3ViZGV2aWNlc1tpXS5tYXhkYXRhX2xpc3QgPSBwLT5tYXhkYXRhX2xpc3Q7CisJCX0KKwl9CisKKwkvLyBSZXNldCBEU1AgY2FyZAorCWRldnByaXYtPmlvYmFzZS0+Y2hhbm5lbFswXS5yZXNldCA9IDA7CisKKwlyZXN1bHQgPSBjb21lZGlfbG9hZF9maXJtd2FyZShkZXYsICJqcjNwY2kuaWRtIiwganIzX2Rvd25sb2FkX2Zpcm13YXJlKTsKKwlwcmludGsoIkZpcm1hcmUgbG9hZCAlZFxuIiwgcmVzdWx0KTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWdvdG8gb3V0OworCX0KKwkvLyBUT0RPOiB1c2UgZmlybXdhcmUgdG8gbG9hZCBwcmVmZXJyZWQgb2Zmc2V0IHRhYmxlcy4gU3VnZ2VzdGVkIGZvcm1hdDoKKwkvLyBtb2RlbCBzZXJpYWwgRnggRnkgRnogTXggTXkgTXpcbgorCS8vCisJLy8gY29tZWRpX2xvYWRfZmlybXdhcmUoZGV2LCAianIzX29mZnNldHNfdGFibGUiLCBqcjNfZG93bmxvYWRfZmlybXdhcmUpOworCisJLy8gSXQgdGFrZXMgYSBmZXcgbWlsbGlzZWNvbmRzIGZvciBzb2Z0d2FyZSB0byBzZXR0bGUKKwkvLyBhcyBtdWNoIGFzIHdlIGNhbiByZWFkIGZpcm13YXJlIHZlcnNpb24KKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyNSk7CisJZm9yIChpID0gMDsgaSA8IDB4MTg7IGkrKykgeworCQlwcmludGsoIiVjIiwKKwkJCWdldF91MTYoJmRldnByaXYtPmlvYmFzZS0+Y2hhbm5lbFswXS5kYXRhLgorCQkJCWNvcHlyaWdodFtpXSkgPj4gOCk7CisJfQorCisJLy8gU3RhcnQgY2FyZCB0aW1lcgorCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnAgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKworCQlwLT5uZXh0X3RpbWVfbWluID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwkJcC0+bmV4dF90aW1lX21heCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMDApOworCX0KKworCWRldnByaXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJZGV2cHJpdi0+dGltZXIuZnVuY3Rpb24gPSBqcjNfcGNpX3BvbGxfZGV2OworCWRldnByaXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwlhZGRfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKKworICAgICAgb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQganIzX3BjaV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGpyM19wY2lfZGV2X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisKKwlwcmludGsoImNvbWVkaSVkOiBqcjNfcGNpOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWlmIChkZXZwcml2KSB7CisJCWRlbF90aW1lcl9zeW5jKCZkZXZwcml2LT50aW1lcik7CisKKwkJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPm5fY2hhbm5lbHM7IGkrKykgeworCQkJCWtmcmVlKGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlKTsKKwkJCX0KKwkJfQorCisJCWlmIChkZXZwcml2LT5pb2Jhc2UpIHsKKwkJCWlvdW5tYXAoKHZvaWQgKilkZXZwcml2LT5pb2Jhc2UpOworCQl9CisJCWlmIChkZXZwcml2LT5wY2lfZW5hYmxlZCkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9qcjNfcGNpLCBqcjNfcGNpX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTg1ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuaApAQCAtMCwwICsxLDY4MSBAQAorLyogSGVscGVyIHR5cGVzIHRvIHRha2UgY2FyZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBEU1AgY2FyZCBtZW1vcnkKKyAqIGlzIDE2IGJpdHMsIGJ1dCBhbGlnbmVkIG9uIGEgMzIgYml0IFBDSSBib3VuZGFyeQorICovCisKK3N0YXRpYyBpbmxpbmUgdTE2IGdldF91MTYodm9sYXRpbGUgY29uc3QgdTMyICogcCkKK3sKKwlyZXR1cm4gKHUxNikgcmVhZGwocCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdTE2KHZvbGF0aWxlIHUzMiAqIHAsIHUxNiB2YWwpCit7CisJd3JpdGVsKHZhbCwgcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgczE2IGdldF9zMTYodm9sYXRpbGUgY29uc3QgczMyICogcCkKK3sKKwlyZXR1cm4gKHMxNikgcmVhZGwocCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfczE2KHZvbGF0aWxlIHMzMiAqIHAsIHMxNiB2YWwpCit7CisJd3JpdGVsKHZhbCwgcCk7Cit9CisKKy8qIFRoZSByYXcgZGF0YSBpcyBzdG9yZWQgaW4gYSBmb3JtYXQgd2hpY2ggZmFjaWxpdGF0ZXMgcmFwaWQKKyAqIHByb2Nlc3NpbmcgYnkgdGhlIEpSMyBEU1AgY2hpcC4gVGhlIHJhd19jaGFubmVsIHN0cnVjdHVyZSBzaG93cyB0aGUKKyAqIGZvcm1hdCBmb3IgYSBzaW5nbGUgY2hhbm5lbCBvZiBkYXRhLiBFYWNoIGNoYW5uZWwgdGFrZXMgZm91ciwKKyAqIHR3by1ieXRlIHdvcmRzLgorICoKKyAqIFJhd190aW1lIGlzIGFuIHVuc2lnbmVkIGludGVnZXIgd2hpY2ggc2hvd3MgdGhlIHZhbHVlIG9mIHRoZSBKUjMKKyAqIERTUCdzIGludGVybmFsIGNsb2NrIGF0IHRoZSB0aW1lIHRoZSBzYW1wbGUgd2FzIHJlY2VpdmVkLiBUaGUgY2xvY2sKKyAqIHJ1bnMgYXQgMS8xMCB0aGUgSlIzIERTUCBjeWNsZSB0aW1lLiBKUjMncyBzbG93ZXN0IERTUCBydW5zIGF0IDEwCisgKiBNaHouIEF0IDEwIE1oeiByYXdfdGltZSB3b3VsZCB0aGVyZWZvcmUgY2xvY2sgYXQgMSBNaHouCisgKgorICogUmF3X2RhdGEgaXMgdGhlIHJhdyBkYXRhIHJlY2VpdmVkIGRpcmVjdGx5IGZyb20gdGhlIHNlbnNvci4gVGhlCisgKiBzZW5zb3IgZGF0YSBzdHJlYW0gaXMgY2FwYWJsZSBvZiByZXByZXNlbnRpbmcgMTYgZGlmZmVyZW50CisgKiBjaGFubmVscy4gQ2hhbm5lbCAwIHNob3dzIHRoZSBleGNpdGF0aW9uIHZvbHRhZ2UgYXQgdGhlIHNlbnNvci4gSXQKKyAqIGlzIHVzZWQgdG8gcmVndWxhdGUgdGhlIHZvbHRhZ2Ugb3ZlciB2YXJpb3VzIGNhYmxlIGxlbmd0aHMuCisgKiBDaGFubmVscyAxLTYgY29udGFpbiB0aGUgY291cGxlZCBmb3JjZSBkYXRhIEZ4IHRocm91Z2ggTXouIENoYW5uZWwKKyAqIDcgY29udGFpbnMgdGhlIHNlbnNvcidzIGNhbGlicmF0aW9uIGRhdGEuIFRoZSB1c2Ugb2YgY2hhbm5lbHMgOC0xNQorICogdmFyaWVzIHdpdGggZGlmZmVyZW50IHNlbnNvcnMuCisgKi8KKworc3RydWN0IHJhd19jaGFubmVsIHsKKwl1MzIgcmF3X3RpbWU7CisJczMyIHJhd19kYXRhOworCXMzMiByZXNlcnZlZFsyXTsKK307CisKKy8qIFRoZSBmb3JjZV9hcnJheSBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGxheW91dCBmb3IgdGhlIGRlY291cGxlZCBhbmQKKyAqIGZpbHRlcmVkIGZvcmNlIGRhdGEuCisgKi8KK3N0cnVjdCBmb3JjZV9hcnJheSB7CisJczMyIGZ4OworCXMzMiBmeTsKKwlzMzIgZno7CisJczMyIG14OworCXMzMiBteTsKKwlzMzIgbXo7CisJczMyIHYxOworCXMzMiB2MjsKK307CisKKy8qIFRoZSBzaXhfYXhpc19hcnJheSBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGxheW91dCBmb3IgdGhlIG9mZnNldHMgYW5kCisgKiB0aGUgZnVsbCBzY2FsZXMuCisgKi8KK3N0cnVjdCBzaXhfYXhpc19hcnJheSB7CisJczMyIGZ4OworCXMzMiBmeTsKKwlzMzIgZno7CisJczMyIG14OworCXMzMiBteTsKKwlzMzIgbXo7Cit9OworCisvKiBWRUNUX0JJVFMgKi8KKy8qIFRoZSB2ZWN0X2JpdHMgc3RydWN0dXJlIHNob3dzIHRoZSBsYXlvdXQgZm9yIGluZGljYXRpbmcKKyAqIHdoaWNoIGF4ZXMgdG8gdXNlIGluIGNvbXB1dGluZyB0aGUgdmVjdG9ycy4gRWFjaCBiaXQgc2lnbmlmaWVzCisgKiBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgYXhpcy4gVGhlIFYxeCBheGlzIGJpdCBjb3JyZXNwb25kcyB0byBhIGhleAorICogdmFsdWUgb2YgMHgwMDAxIGFuZCB0aGUgVjJ6IGJpdCBjb3JyZXNwb25kcyB0byBhIGhleCB2YWx1ZSBvZgorICogMHgwMDIwLiBFeGFtcGxlOiB0byBzcGVjaWZ5IHRoZSBheGVzIFYxeCwgVjF5LCBWMngsIGFuZCBWMnogdGhlCisgKiBwYXR0ZXJuIHdvdWxkIGJlIDB4MDAyYi4gVmVjdG9yIDEgZGVmYXVsdHMgdG8gYSBmb3JjZSB2ZWN0b3IgYW5kCisgKiB2ZWN0b3IgMiBkZWZhdWx0cyB0byBhIG1vbWVudCB2ZWN0b3IuIEl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSBvbmUKKyAqIG9yIHRoZSBvdGhlciBzbyB0aGF0IHR3byBmb3JjZSB2ZWN0b3JzIG9yIHR3byBtb21lbnQgdmVjdG9ycyBhcmUKKyAqIGNhbGN1bGF0ZWQuIFNldHRpbmcgdGhlIGNoYW5nZVYxIGJpdCBvciB0aGUgY2hhbmdlVjIgYml0IHdpbGwKKyAqIGNoYW5nZSB0aGF0IHZlY3RvciB0byBiZSB0aGUgb3Bwb3NpdGUgb2YgaXRzIGRlZmF1bHQuIFRoZXJlZm9yZSB0bworICogaGF2ZSB0d28gZm9yY2UgdmVjdG9ycywgc2V0IGNoYW5nZVYxIHRvIDEuCisgKi8KKworLyogdmVjdF9iaXRzIGFwcGVhcnMgdG8gYmUgdW51c2VkIGF0IHRoaXMgdGltZSAqLworZW51bSB7CisJZnggPSAweDAwMDEsCisJZnkgPSAweDAwMDIsCisJZnogPSAweDAwMDQsCisJbXggPSAweDAwMDgsCisJbXkgPSAweDAwMTAsCisJbXogPSAweDAwMjAsCisJY2hhbmdlVjIgPSAweDAwNDAsCisJY2hhbmdlVjEgPSAweDAwODAKK30gdmVjdF9iaXRzX3Q7CisKKy8qIFdBUk5JTkdfQklUUyAqLworLyogVGhlIHdhcm5pbmdfYml0cyBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGJpdCBwYXR0ZXJuIGZvciB0aGUgd2FybmluZworICogd29yZC4gVGhlIGJpdCBmaWVsZHMgYXJlIHNob3duIGZyb20gYml0IDAgKGxzYikgdG8gYml0IDE1IChtc2IpLgorICovCisKKy8qICBYWF9ORUFSX1NFVCAqLworLyogVGhlIHh4X25lYXJfc2F0IGJpdHMgc2lnbmlmeSB0aGF0IHRoZSBpbmRpY2F0ZWQgYXhpcyBoYXMgcmVhY2hlZCBvcgorICogZXhjZWVkZWQgdGhlIG5lYXIgc2F0dXJhdGlvbiB2YWx1ZS4KKyAqLworCitlbnVtIHsKKwlmeF9uZWFyX3NhdCA9IDB4MDAwMSwKKwlmeV9uZWFyX3NhdCA9IDB4MDAwMiwKKwlmel9uZWFyX3NhdCA9IDB4MDAwNCwKKwlteF9uZWFyX3NhdCA9IDB4MDAwOCwKKwlteV9uZWFyX3NhdCA9IDB4MDAxMCwKKwltel9uZWFyX3NhdCA9IDB4MDAyMAorfSB3YXJuaW5nX2JpdHNfdDsKKworLyogIEVSUk9SX0JJVFMgKi8KKy8qICBYWF9TQVQgKi8KKy8qICBNRU1PUllfRVJST1IgKi8KKy8qICBTRU5TT1JfQ0hBTkdFICovCisKKy8qIFRoZSBlcnJvcl9iaXRzIHN0cnVjdHVyZSBzaG93cyB0aGUgYml0IHBhdHRlcm4gZm9yIHRoZSBlcnJvciB3b3JkLgorICogVGhlIGJpdCBmaWVsZHMgYXJlIHNob3duIGZyb20gYml0IDAgKGxzYikgdG8gYml0IDE1IChtc2IpLiBUaGUKKyAqIHh4X3NhdCBiaXRzIHNpZ25pZnkgdGhhdCB0aGUgaW5kaWNhdGVkIGF4aXMgaGFzIHJlYWNoZWQgb3IgZXhjZWVkZWQKKyAqIHRoZSBzYXR1cmF0aW9uIHZhbHVlLiBUaGUgbWVtb3J5X2Vycm9yIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHByb2JsZW0KKyAqIHdhcyBkZXRlY3RlZCBpbiB0aGUgb24tYm9hcmQgUkFNIGR1cmluZyB0aGUgcG93ZXItdXAKKyAqIGluaXRpYWxpemF0aW9uLiBUaGUgc2Vuc29yX2NoYW5nZSBiaXQgaW5kaWNhdGVzIHRoYXQgYSBzZW5zb3Igb3RoZXIKKyAqIHRoYW4gdGhlIG9uZSBvcmlnaW5hbGx5IHBsdWdnZWQgaW4gaGFzIHBhc3NlZCBpdHMgQ1JDIGNoZWNrLiBUaGlzCisgKiBiaXQgbGF0Y2hlcywgYW5kIG11c3QgYmUgcmVzZXQgYnkgdGhlIHVzZXIuCisgKgorICovCisKKy8qICBTWVNURU1fQlVTWSAqLworCisvKiBUaGUgc3lzdGVtX2J1c3kgYml0IGluZGljYXRlcyB0aGF0IHRoZSBKUjMgRFNQIGlzIGN1cnJlbnRseSBidXN5CisgKiBhbmQgaXMgbm90IGNhbGN1bGF0aW5nIGZvcmNlIGRhdGEuIFRoaXMgb2NjdXJzIHdoZW4gYSBuZXcKKyAqIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24sIG9yIG5ldyBzZW5zb3IgZnVsbCBzY2FsZSBpcyBzZXQgYnkgdGhlCisgKiB1c2VyLiBBIHZlcnkgZmFzdCBzeXN0ZW0gdXNpbmcgdGhlIGZvcmNlIGRhdGEgZm9yIGZlZWRiYWNrIG1pZ2h0CisgKiBiZWNvbWUgdW5zdGFibGUgZHVyaW5nIHRoZSBhcHByb3hpbWF0ZWx5IDQgbXMgbmVlZGVkIHRvIGFjY29tcGxpc2gKKyAqIHRoZXNlIGNhbGN1bGF0aW9ucy4gVGhpcyBiaXQgd2lsbCBhbHNvIGJlY29tZSBhY3RpdmUgd2hlbiBhIG5ldworICogc2Vuc29yIGlzIHBsdWdnZWQgaW4gYW5kIHRoZSBzeXN0ZW0gbmVlZHMgdG8gcmVjYWxjdWxhdGUgdGhlCisgKiBjYWxpYnJhdGlvbiBDUkMuCisgKi8KKworLyogIENBTF9DUkNfQkFEICovCisKKy8qIFRoZSBjYWxfY3JjX2JhZCBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGlicmF0aW9uIENSQyBoYXMgbm90CisgKiBjYWxjdWxhdGVkIHRvIHplcm8uIENSQyBpcyBzaG9ydCBmb3IgY3ljbGljIHJlZHVuZGFuY3kgY29kZS4gSXQgaXMKKyAqIGEgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZWdyaXR5IG9mIG1lc3NhZ2VzIGluIGRhdGEKKyAqIGNvbW11bmljYXRpb24uIFRoZSBjYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbnNpZGUgdGhlIHNlbnNvciBpcworICogdHJhbnNtaXR0ZWQgdG8gdGhlIEpSMyBEU1AgYWxvbmcgd2l0aCB0aGUgc2Vuc29yIGRhdGEuIFRoZQorICogY2FsaWJyYXRpb24gZGF0YSBoYXMgYSBDUkMgYXR0YWNoZWQgdG8gdGhlIGVuZCBvZiBpdCwgdG8gYXNzaXN0IGluCisgKiBkZXRlcm1pbmluZyB0aGUgY29tcGxldGVuZXNzIGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGNhbGlicmF0aW9uIGRhdGEKKyAqIHJlY2VpdmVkIGZyb20gdGhlIHNlbnNvci4gVGhlcmUgYXJlIHR3byByZWFzb25zIHRoZSBDUkMgbWF5IG5vdAorICogaGF2ZSBjYWxjdWxhdGVkIHRvIHplcm8uIFRoZSBmaXJzdCBpcyB0aGF0IGFsbCB0aGUgY2FsaWJyYXRpb24gZGF0YQorICogaGFzIG5vdCB5ZXQgYmVlbiByZWNlaXZlZCwgdGhlIHNlY29uZCBpcyB0aGF0IHRoZSBjYWxpYnJhdGlvbiBkYXRhCisgKiBoYXMgYmVlbiBjb3JydXB0ZWQuIEEgdHlwaWNhbCBzZW5zb3IgdHJhbnNtaXRzIHRoZSBlbnRpcmUgY29udGVudHMKKyAqIG9mIGl0cyBjYWxpYnJhdGlvbiBtYXRyaXggb3ZlciAzMCB0aW1lcyBhIHNlY29uZC4gVGhlcmVmb3JlLCBpZgorICogdGhpcyBiaXQgaXMgbm90IHplcm8gd2l0aGluIGEgY291cGxlIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIHNlbnNvcgorICogaGFzIGJlZW4gcGx1Z2dlZCBpbiwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIHNlbnNvcidzCisgKiBjYWxpYnJhdGlvbiBkYXRhLgorICovCisKKy8qIFdBVENIX0RPRyAqLworLyogV0FUQ0hfRE9HMiAqLworCisvKiBUaGUgd2F0Y2hfZG9nIGFuZCB3YXRjaF9kb2cyIGJpdHMgYXJlIHNlbnNvciwgbm90IHByb2Nlc3Nvciwgd2F0Y2gKKyAqIGRvZyBiaXRzLiBXYXRjaF9kb2cgaW5kaWNhdGVzIHRoYXQgdGhlIHNlbnNvciBkYXRhIGxpbmUgc2VlbXMgdG8gYmUKKyAqIGFjdGluZyBjb3JyZWN0bHksIHdoaWxlIHdhdGNoX2RvZzIgaW5kaWNhdGVzIHRoYXQgc2Vuc29yIGRhdGEgYW5kCisgKiBjbG9jayBhcmUgYmVpbmcgcmVjZWl2ZWQuIEl0IGlzIHBvc3NpYmxlIGZvciB3YXRjaF9kb2cyIHRvIGdvIG9mZgorICogd2hpbGUgd2F0Y2hfZG9nIGRvZXMgbm90LiBUaGlzIHdvdWxkIGluZGljYXRlIGFuIGltcHJvcGVyIGNsb2NrCisgKiBzaWduYWwsIHdoaWxlIGRhdGEgaXMgYWN0aW5nIGNvcnJlY3RseS4gSWYgZWl0aGVyIHdhdGNoIGRvZyBiYXJrcywKKyAqIHRoZSBzZW5zb3IgZGF0YSBpcyBub3QgYmVpbmcgcmVjZWl2ZWQgY29ycmVjdGx5LgorICovCisKK2VudW0gZXJyb3JfYml0c190IHsKKwlmeF9zYXQgPSAweDAwMDEsCisJZnlfc2F0ID0gMHgwMDAyLAorCWZ6X3NhdCA9IDB4MDAwNCwKKwlteF9zYXQgPSAweDAwMDgsCisJbXlfc2F0ID0gMHgwMDEwLAorCW16X3NhdCA9IDB4MDAyMCwKKwltZW1vcnlfZXJyb3IgPSAweDA0MDAsCisJc2Vuc29yX2NoYW5nZSA9IDB4MDgwMCwKKwlzeXN0ZW1fYnVzeSA9IDB4MTAwMCwKKwljYWxfY3JjX2JhZCA9IDB4MjAwMCwKKwl3YXRjaF9kb2cyID0gMHg0MDAwLAorCXdhdGNoX2RvZyA9IDB4ODAwMAorfTsKKworLyogIFRIUkVTSF9TVFJVQ1QgKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGxheW91dCBmb3IgYSBzaW5nbGUgdGhyZXNob2xkIHBhY2tldCBpbnNpZGUgb2YgYQorICogbG9hZCBlbnZlbG9wZS4gRWFjaCBsb2FkIGVudmVsb3BlIGNhbiBjb250YWluIHNldmVyYWwgdGhyZXNob2xkIHN0cnVjdHVyZXMuCisgKiAxLiBkYXRhX2FkZHJlc3MgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgZm9yIHRoYXQgdGhyZXNob2xkLiBUaGlzCisgKiAgICBpbmNsdWRlcyBmaWx0ZXJlZCwgdW5maWx0ZXJlZCwgcmF3LCByYXRlLCBjb3VudGVycywgZXJyb3IgYW5kIHdhcm5pbmcgZGF0YQorICogMi4gdGhyZXNob2xkIGlzIHRoZSBpcyB0aGUgdmFsdWUgYXQgd2hpY2gsIGlmIGRhdGEgaXMgYWJvdmUgb3IgYmVsb3csIHRoZQorICogICAgYml0cyB3aWxsIGJlIHNldCAuLi4gKHBhZy4yNCkuCisgKiAzLiBiaXRfcGF0dGVybiBjb250YWlucyB0aGUgYml0cyB0aGF0IHdpbGwgYmUgc2V0IGlmIHRoZSB0aHJlc2hvbGQgdmFsdWUgaXMKKyAqICAgIG1ldCBvciBleGNlZWRlZC4KKyAqLworCitzdHJ1Y3QgdGhyZXNoX3N0cnVjdCB7CisJczMyIGRhdGFfYWRkcmVzczsKKwlzMzIgdGhyZXNob2xkOworCXMzMiBiaXRfcGF0dGVybjsKK307CisKKy8qICBMRV9TVFJVQ1QgKi8KKworLyogTGF5b3V0IG9mIGEgbG9hZCBlbnZlbG9wZWQgcGFja2V0LiBGb3VyIHRocmVzaG9sZHMgYXJlIHNob3dlZCAuLi4gZm9yIG1vcmUKKyAqIHNlZSBtYW51YWwgKHBhZy4yNSkKKyAqIDEuIGxhdGNoX2JpdHMgaXMgYSBiaXQgcGF0dGVybiB0aGF0IHNob3cgd2hpY2ggYml0cyB0aGUgdXNlciB3YW50cyB0byBsYXRjaC4KKyAqICAgIFRoZSBsYXRjaGVkIGJpdHMgd2lsbCBub3QgYmUgcmVzZXQgb25jZSB0aGUgdGhyZXNob2xkIHdoaWNoIHNldCB0aGVtIGlzCisgKiAgICBubyBsb25nZXIgdHJ1ZS4gSW4gdGhhdCBjYXNlIHRoZSB1c2VyIG11c3QgcmVzZXQgdGhlbSB1c2luZyB0aGUgcmVzZXRfYml0CisgKiAgICBjb21tYW5kLgorICogMi4gbnVtYmVyX29mX3h4X3RocmVzaG9sZHMgc3BlY2lmeSBob3cgbWFueSBHRS9MRSB0aHJlc2hvbGQgdGhlcmUgYXJlLgorICovCitzdHJ1Y3QgbGVfc3RydWN0IHsKKwlzMzIgbGF0Y2hfYml0czsKKwlzMzIgbnVtYmVyX29mX2dlX3RocmVzaG9sZHM7CisJczMyIG51bWJlcl9vZl9sZV90aHJlc2hvbGRzOworCXN0cnVjdCB0aHJlc2hfc3RydWN0IHRocmVzaG9sZHNbNF07CisJczMyIHJlc2VydmVkOworfTsKKworLyogIExJTktfVFlQRVMgKi8KKy8qIExpbmsgdHlwZXMgaXMgYW4gZW51bWVyYXRlZCB2YWx1ZSBzaG93aW5nIHRoZSBkaWZmZXJlbnQgcG9zc2libGUgdHJhbnNmb3JtCisgKiBsaW5rIHR5cGVzLgorICogMCAtIGVuZCB0cmFuc2Zvcm0gcGFja2V0CisgKiAxIC0gdHJhbnNsYXRlIGFsb25nIFggYXhpcyAoVFgpCisgKiAyIC0gdHJhbnNsYXRlIGFsb25nIFkgYXhpcyAoVFkpCisgKiAzIC0gdHJhbnNsYXRlIGFsb25nIFogYXhpcyAoVFopCisgKiA0IC0gcm90YXRlIGFib3V0IFggYXhpcyAoUlgpCisgKiA1IC0gcm90YXRlIGFib3V0IFkgYXhpcyAoUlkpCisgKiA2IC0gcm90YXRlIGFib3V0IFogYXhpcyAoUlopCisgKiA3IC0gbmVnYXRlIGFsbCBheGVzIChORUcpCisgKi8KKworZW51bSBsaW5rX3R5cGVzIHsKKwllbmRfeF9mb3JtLAorCXR4LAorCXR5LAorCXR6LAorCXJ4LAorCXJ5LAorCXJ6LAorCW5lZworfTsKKworLyogIFRSQU5TRk9STSAqLworLyogIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgdHJhbnNmb3JtLiAqLworc3RydWN0IGludGVybl90cmFuc2Zvcm0geworCXN0cnVjdCB7CisJCXUzMiBsaW5rX3R5cGU7CisJCXMzMiBsaW5rX2Ftb3VudDsKKwl9IGxpbmtbOF07Cit9OworCisvKiAgSlIzIGZvcmNlL3RvcnF1ZSBzZW5zb3IgZGF0YSBkZWZpbml0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgc2Vuc29yIGFuZCAqLworLyogIGhhcmR3YXJlIG1hbnVhbHMuICovCisKK3N0cnVjdCBqcjNfY2hhbm5lbCB7CisJLyogIFJhd19jaGFubmVscyBpcyB0aGUgYXJlYSB1c2VkIHRvIHN0b3JlIHRoZSByYXcgZGF0YSBjb21pbmcgZnJvbSAqLworCS8qICB0aGUgc2Vuc29yLiAqLworCisJc3RydWN0IHJhd19jaGFubmVsIHJhd19jaGFubmVsc1sxNl07CS8qIG9mZnNldCAweDAwMDAgKi8KKworCS8qICBDb3B5cmlnaHQgaXMgYSBudWxsIHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEpSMyAqLworCS8qICBjb3B5cmlnaHQgbm90aWNlLiAqLworCisJdTMyIGNvcHlyaWdodFsweDAwMThdOwkvKiBvZmZzZXQgMHgwMDQwICovCisJczMyIHJlc2VydmVkMVsweDAwMDhdOwkvKiBvZmZzZXQgMHgwMDU4ICovCisKKwkvKiBTaHVudHMgY29udGFpbnMgdGhlIHNlbnNvciBzaHVudCByZWFkaW5ncy4gU29tZSBKUjMgc2Vuc29ycyBoYXZlCisJICogdGhlIGFiaWxpdHkgdG8gaGF2ZSB0aGVpciBnYWlucyBhZGp1c3RlZC4gVGhpcyBhbGxvd3MgdGhlCisJICogaGFyZHdhcmUgZnVsbCBzY2FsZXMgdG8gYmUgYWRqdXN0ZWQgdG8gcG90ZW50aWFsbHkgYWxsb3cKKwkgKiBiZXR0ZXIgcmVzb2x1dGlvbiBvciBkeW5hbWljIHJhbmdlLiBGb3Igc2Vuc29ycyB0aGF0IGhhdmUKKwkgKiB0aGlzIGFiaWxpdHksIHRoZSBnYWluIG9mIGVhY2ggc2Vuc29yIGNoYW5uZWwgaXMgbWVhc3VyZWQgYXQKKwkgKiB0aGUgdGltZSBvZiBjYWxpYnJhdGlvbiB1c2luZyBhIHNodW50IHJlc2lzdG9yLiBUaGUgc2h1bnQKKwkgKiByZXNpc3RvciBpcyBwbGFjZWQgYWNyb3NzIG9uZSBhcm0gb2YgdGhlIHJlc2lzdG9yIGJyaWRnZSwgYW5kCisJICogdGhlIHJlc3VsdGluZyBjaGFuZ2UgaW4gdGhlIG91dHB1dCBvZiB0aGF0IGNoYW5uZWwgaXMKKwkgKiBtZWFzdXJlZC4gVGhpcyBtZWFzdXJlbWVudCBpcyBjYWxsZWQgdGhlIHNodW50IHJlYWRpbmcsIGFuZAorCSAqIGlzIHJlY29yZGVkIGhlcmUuIElmIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBnYWluIG9mIHRoZSAvLworCSAqIHNlbnNvciwgYW5kIG1hZGUgbmV3IHNodW50IG1lYXN1cmVtZW50cywgdGhvc2Ugc2h1bnQKKwkgKiBtZWFzdXJlbWVudHMgY2FuIGJlIHBsYWNlZCBoZXJlLiBUaGUgSlIzIERTUCB3aWxsIHRoZW4gc2NhbGUKKwkgKiB0aGUgY2FsaWJyYXRpb24gbWF0cml4IHN1Y2ggc28gdGhhdCB0aGUgZ2FpbnMgYXJlIGFnYWluCisJICogcHJvcGVyIGZvciB0aGUgaW5kaWNhdGVkIHNodW50IHJlYWRpbmdzLiBJZiBzaHVudHMgaXMgMCwgdGhlbgorCSAqIHRoZSBzZW5zb3IgY2Fubm90IGhhdmUgaXRzIGdhaW4gY2hhbmdlZC4gRm9yIGRldGFpbHMgb24KKwkgKiBjaGFuZ2luZyB0aGUgc2Vuc29yIGdhaW4sIGFuZCBtYWtpbmcgc2h1bnRzIHJlYWRpbmdzLCBwbGVhc2UKKwkgKiBzZWUgdGhlIHNlbnNvciBtYW51YWwuIFRvIG1ha2UgdGhlc2UgdmFsdWVzIHRha2UgZWZmZWN0IHRoZQorCSAqIHVzZXIgbXVzdCBjYWxsIGVpdGhlciBjb21tYW5kICg1KSB1c2UgdHJhbnNmb3JtICMgKHBnLiAzMykgb3IKKwkgKiBjb21tYW5kICgxMCkgc2V0IG5ldyBmdWxsIHNjYWxlcyAocGcuIDM4KS4KKwkgKi8KKworCXN0cnVjdCBzaXhfYXhpc19hcnJheSBzaHVudHM7CS8qIG9mZnNldCAweDAwNjAgKi8KKwlzMzIgcmVzZXJ2ZWQyWzJdOwkvKiBvZmZzZXQgMHgwMDY2ICovCisKKwkvKiBEZWZhdWx0X0ZTIGNvbnRhaW5zIHRoZSBmdWxsIHNjYWxlIHRoYXQgaXMgdXNlZCBpZiB0aGUgdXNlciBkb2VzICovCisJLyogbm90IHNldCBhIGZ1bGwgc2NhbGUuICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgZGVmYXVsdF9GUzsJLyogb2Zmc2V0IDB4MDA2OCAqLworCXMzMiByZXNlcnZlZDM7CS8qIG9mZnNldCAweDAwNmUgKi8KKworCS8qIExvYWRfZW52ZWxvcGVfbnVtIGlzIHRoZSBsb2FkIGVudmVsb3BlIG51bWJlciB0aGF0IGlzIGN1cnJlbnRseQorCSAqIGluIHVzZS4gVGhpcyB2YWx1ZSBpcyBzZXQgYnkgdGhlIHVzZXIgYWZ0ZXIgb25lIG9mIHRoZSBsb2FkCisJICogZW52ZWxvcGVzIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCSAqLworCisJczMyIGxvYWRfZW52ZWxvcGVfbnVtOwkvKiBvZmZzZXQgMHgwMDZmICovCisKKwkvKiBNaW5fZnVsbF9zY2FsZSBpcyB0aGUgcmVjb21tZW5kIG1pbmltdW0gZnVsbCBzY2FsZS4gKi8KKworCS8qIFRoZXNlIHZhbHVlcyBpbiBjb25qdW5jdGlvbiB3aXRoIG1heF9mdWxsX3NjYWxlIChwZy4gOSkgaGVscHMKKwkgKiBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBzZXR0aW5nIHRoZSBmdWxsIHNjYWxlcy4gVGhlCisJICogc29mdHdhcmUgYWxsb3dzIHRoZSB1c2VyIHRvIHNldCB0aGUgc2Vuc29yIGZ1bGwgc2NhbGUgdG8gYW4KKwkgKiBhcmJpdHJhcnkgdmFsdWUuIEJ1dCBzZXR0aW5nIHRoZSBmdWxsIHNjYWxlcyBoYXMgc29tZSBoYXphcmRzLiBJZgorCSAqIHRoZSBmdWxsIHNjYWxlIGlzIHNldCB0b28gbG93LCB0aGUgZGF0YSB3aWxsIHNhdHVyYXRlCisJICogcHJlbWF0dXJlbHksIGFuZCBkeW5hbWljIHJhbmdlIHdpbGwgYmUgbG9zdC4gSWYgdGhlIGZ1bGwgc2NhbGUgaXMKKwkgKiBzZXQgdG9vIGhpZ2gsIHRoZW4gcmVzb2x1dGlvbiBpcyBsb3N0IGFzIHRoZSBkYXRhIGlzIHNoaWZ0ZWQgdG8KKwkgKiB0aGUgcmlnaHQgYW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGFyZSBsb3N0LiBUaGVyZWZvcmUgdGhlCisJICogbWF4aW11bSBmdWxsIHNjYWxlIGlzIHRoZSBtYXhpbXVtIHZhbHVlIGF0IHdoaWNoIG5vIHJlc29sdXRpb24gaXMKKwkgKiBsb3N0LCBhbmQgdGhlIG1pbmltdW0gZnVsbCBzY2FsZSBpcyB0aGUgdmFsdWUgYXQgd2hpY2ggdGhlIGRhdGEKKwkgKiB3aWxsIG5vdCBzYXR1cmF0ZSBwcmVtYXR1cmVseS4gVGhlc2UgdmFsdWVzIGFyZSBjYWxjdWxhdGVkCisJICogd2hlbmV2ZXIgYSBuZXcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBpcyBjYWxjdWxhdGVkLiBJdCBpcworCSAqIHBvc3NpYmxlIGZvciB0aGUgcmVjb21tZW5kZWQgbWF4aW11bSB0byBiZSBsZXNzIHRoYW4gdGhlCisJICogcmVjb21tZW5kZWQgbWluaW11bS4gVGhpcyBjb21lcyBhYm91dCBwcmltYXJpbHkgd2hlbiB1c2luZworCSAqIGNvb3JkaW5hdGUgdHJhbnNsYXRpb25zLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBpdCBtZWFucyB0aGF0IGFueQorCSAqIGZ1bGwgc2NhbGUgc2VsZWN0aW9uIHdpbGwgYmUgYSBjb21wcm9taXNlIGJldHdlZW4gZHluYW1pYyByYW5nZQorCSAqIGFuZCByZXNvbHV0aW9uLiBJdCBpcyB1c3VhbGx5IHJlY29tbWVuZGVkIHRvIGNvbXByb21pc2UgaW4gZmF2b3IKKwkgKiBvZiByZXNvbHV0aW9uIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHJlY29tbWVuZCBtYXhpbXVtIGZ1bGwgc2NhbGUKKwkgKiBzaG91bGQgYmUgY2hvc2VuLgorCSAqCisJICogV0FSTklORzogQmUgc3VyZSB0aGF0IHRoZSBmdWxsIHNjYWxlIGlzIG5vIGxlc3MgdGhhbiAwLjQlIG9mIHRoZQorCSAqIHJlY29tbWVuZGVkIG1pbmltdW0gZnVsbCBzY2FsZS4gRnVsbCBzY2FsZXMgYmVsb3cgdGhpcyB2YWx1ZSB3aWxsCisJICogY2F1c2UgZXJyb25lb3VzIHJlc3VsdHMuCisJICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgbWluX2Z1bGxfc2NhbGU7CS8qIG9mZnNldCAweDAwNzAgKi8KKwlzMzIgcmVzZXJ2ZWQ0OwkvKiBvZmZzZXQgMHgwMDc2ICovCisKKwkvKiBUcmFuc2Zvcm1fbnVtIGlzIHRoZSB0cmFuc2Zvcm0gbnVtYmVyIHRoYXQgaXMgY3VycmVudGx5IGluIHVzZS4KKwkgKiBUaGlzIHZhbHVlIGlzIHNldCBieSB0aGUgSlIzIERTUCBhZnRlciB0aGUgdXNlciBoYXMgdXNlZCBjb21tYW5kCisJICogKDUpIHVzZSB0cmFuc2Zvcm0gIyAocGcuIDMzKS4KKwkgKi8KKworCXMzMiB0cmFuc2Zvcm1fbnVtOwkvKiBvZmZzZXQgMHgwMDc3ICovCisKKwkvKiAgTWF4X2Z1bGxfc2NhbGUgaXMgdGhlIHJlY29tbWVuZGVkIG1heGltdW0gZnVsbCBzY2FsZS4gU2VlICovCisJLyogIG1pbl9mdWxsX3NjYWxlIChwZy4gOSkgZm9yIG1vcmUgZGV0YWlscy4gKi8KKworCXN0cnVjdCBzaXhfYXhpc19hcnJheSBtYXhfZnVsbF9zY2FsZTsJLyogb2Zmc2V0IDB4MDA3OCAqLworCXMzMiByZXNlcnZlZDU7CS8qIG9mZnNldCAweDAwN2UgKi8KKworCS8qIFBlYWtfYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZGF0YSB3aGljaCB3aWxsIGJlIG1vbml0b3JlZAorCSAqIGJ5IHRoZSBwZWFrIHJvdXRpbmUuIFRoaXMgdmFsdWUgaXMgc2V0IGJ5IHRoZSB1c2VyLiBUaGUgcGVhaworCSAqIHJvdXRpbmUgd2lsbCBtb25pdG9yIGFueSA4IGNvbnRpZ3VvdXMgYWRkcmVzc2VzIGZvciBwZWFrIHZhbHVlcy4KKwkgKiAoZXguIHRvIHdhdGNoIGZpbHRlcjMgZGF0YSBmb3IgcGVha3MsIHNldCB0aGlzIHZhbHVlIHRvIDB4MDBhOCkuCisJICovCisKKwlzMzIgcGVha19hZGRyZXNzOwkvKiBvZmZzZXQgMHgwMDdmICovCisKKwkvKiBGdWxsX3NjYWxlIGlzIHRoZSBzZW5zb3IgZnVsbCBzY2FsZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBpbiB1c2UuCisJICogRGVjb3VwbGVkIGFuZCBmaWx0ZXJlZCBkYXRhIGlzIHNjYWxlZCBzbyB0aGF0ICsvLSAxNjM4NCBpcyBlcXVhbAorCSAqIHRvIHRoZSBmdWxsIHNjYWxlcy4gVGhlIGVuZ2luZWVyaW5nIHVuaXRzIHVzZWQgYXJlIGluZGljYXRlZCBieQorCSAqIHRoZSB1bml0cyB2YWx1ZSBkaXNjdXNzZWQgb24gcGFnZSAxNi4gVGhlIGZ1bGwgc2NhbGVzIGZvciBGeCwgRnksCisJICogRnosIE14LCBNeSBhbmQgTXogY2FuIGJlIHdyaXR0ZW4gYnkgdGhlIHVzZXIgcHJpb3IgdG8gY2FsbGluZworCSAqIGNvbW1hbmQgKDEwKSBzZXQgbmV3IGZ1bGwgc2NhbGVzIChwZy4gMzgpLiBUaGUgZnVsbCBzY2FsZXMgZm9yIFYxCisJICogYW5kIFYyIGFyZSBzZXQgd2hlbmV2ZXIgdGhlIGZ1bGwgc2NhbGVzIGFyZSBjaGFuZ2VkIG9yIHdoZW4gdGhlCisJICogYXhlcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmVjdG9ycyBhcmUgY2hhbmdlZC4gVGhlIGZ1bGwgc2NhbGUgb2YKKwkgKiBWMSBhbmQgVjIgd2lsbCBhbHdheXMgYmUgZXF1YWwgdG8gdGhlIGxhcmdlc3QgZnVsbCBzY2FsZSBvZiB0aGUKKwkgKiBheGVzIHVzZWQgZm9yIGVhY2ggdmVjdG9yIHJlc3BlY3RpdmVseS4KKwkgKi8KKworCXN0cnVjdCBmb3JjZV9hcnJheSBmdWxsX3NjYWxlOwkvKiBvZmZzZXQgMHgwMDgwICovCisKKwkvKiBPZmZzZXRzIGNvbnRhaW5zIHRoZSBzZW5zb3Igb2Zmc2V0cy4gVGhlc2UgdmFsdWVzIGFyZSBzdWJ0cmFjdGVkIGZyb20KKwkgKiB0aGUgc2Vuc29yIGRhdGEgdG8gb2J0YWluIHRoZSBkZWNvdXBsZWQgZGF0YS4gVGhlIG9mZnNldHMgYXJlIHNldCBhCisJICogZmV3IHNlY29uZHMgKDwgMTApIGFmdGVyIHRoZSBjYWxpYnJhdGlvbiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLgorCSAqIFRoZXkgYXJlIHNldCBzbyB0aGF0IHRoZSBvdXRwdXQgZGF0YSB3aWxsIGJlIHplcm8uIFRoZXNlIHZhbHVlcworCSAqIGNhbiBiZSB3cml0dGVuIGFzIHdlbGwgYXMgcmVhZC4gVGhlIEpSMyBEU1Agd2lsbCB1c2UgdGhlIHZhbHVlcworCSAqIHdyaXR0ZW4gaGVyZSB3aXRoaW4gMiBtcyBvZiBiZWluZyB3cml0dGVuLiBUbyBzZXQgZnV0dXJlCisJICogZGVjb3VwbGVkIGRhdGEgdG8gemVybywgYWRkIHRoZXNlIHZhbHVlcyB0byB0aGUgY3VycmVudCBkZWNvdXBsZWQKKwkgKiBkYXRhIHZhbHVlcyBhbmQgcGxhY2UgdGhlIHN1bSBoZXJlLiBUaGUgSlIzIERTUCB3aWxsIGNoYW5nZSB0aGVzZQorCSAqIHZhbHVlcyB3aGVuIGEgbmV3IHRyYW5zZm9ybSBpcyBhcHBsaWVkLiBTbyBpZiB0aGUgb2Zmc2V0cyBhcmUKKwkgKiBzdWNoIHRoYXQgRlggaXMgNSBhbmQgYWxsIG90aGVyIHZhbHVlcyBhcmUgemVybywgYWZ0ZXIgcm90YXRpbmcKKwkgKiBhYm91dCBaIGJ5IDkwIGRlZ3JlZXMsIEZZIHdvdWxkIGJlIDUgYW5kIGFsbCBvdGhlcnMgd291bGQgYmUgemVyby4KKwkgKi8KKworCXN0cnVjdCBzaXhfYXhpc19hcnJheSBvZmZzZXRzOwkvKiBvZmZzZXQgMHgwMDg4ICovCisKKwkvKiBPZmZzZXRfbnVtIGlzIHRoZSBudW1iZXIgb2YgdGhlIG9mZnNldCBjdXJyZW50bHkgaW4gdXNlLiBUaGlzCisJICogdmFsdWUgaXMgc2V0IGJ5IHRoZSBKUjMgRFNQIGFmdGVyIHRoZSB1c2VyIGhhcyBleGVjdXRlZCB0aGUgdXNlCisJICogb2Zmc2V0ICMgY29tbWFuZCAocGcuIDM0KS4gSXQgY2FuIHZhcnkgYmV0d2VlbiAwIGFuZCAxNS4KKwkgKi8KKworCXMzMiBvZmZzZXRfbnVtOwkvKiBvZmZzZXQgMHgwMDhlICovCisKKwkvKiBWZWN0X2F4ZXMgaXMgYSBiaXQgbWFwIHNob3dpbmcgd2hpY2ggb2YgdGhlIGF4ZXMgYXJlIGJlaW5nIHVzZWQKKwkgKiBpbiB0aGUgdmVjdG9yIGNhbGN1bGF0aW9ucy4gVGhpcyB2YWx1ZSBpcyBzZXQgYnkgdGhlIEpSMyBEU1AKKwkgKiBhZnRlciB0aGUgdXNlciBoYXMgZXhlY3V0ZWQgdGhlIHNldCB2ZWN0b3IgYXhlcyBjb21tYW5kIChwZy4gMzcpLgorCSAqLworCisJdTMyIHZlY3RfYXhlczsJLyogb2Zmc2V0IDB4MDA4ZiAqLworCisJLyogRmlsdGVyMCBpcyB0aGUgZGVjb3VwbGVkLCB1bmZpbHRlcmVkIGRhdGEgZnJvbSB0aGUgSlIzIHNlbnNvci4KKwkgKiBUaGlzIGRhdGEgaGFzIGhhZCB0aGUgb2Zmc2V0cyByZW1vdmVkLgorCSAqCisJICogVGhlc2UgZm9yY2VfYXJyYXlzIGhvbGQgdGhlIGZpbHRlcmVkIGRhdGEuIFRoZSBkZWNvdXBsZWQgZGF0YSBpcworCSAqIHBhc3NlZCB0aHJvdWdoIGNhc2NhZGVkIGxvdyBwYXNzIGZpbHRlcnMuIEVhY2ggc3VjY2VlZGluZyBmaWx0ZXIKKwkgKiBoYXMgYSBjdXRvZmYgZnJlcXVlbmN5IG9mIDEvNCBvZiB0aGUgcHJlY2VkaW5nIGZpbHRlci4gVGhlIGN1dG9mZgorCSAqIGZyZXF1ZW5jeSBvZiBmaWx0ZXIxIGlzIDEvMTYgb2YgdGhlIHNhbXBsZSByYXRlIGZyb20gdGhlIHNlbnNvci4KKwkgKiBGb3IgYSB0eXBpY2FsIHNlbnNvciB3aXRoIGEgc2FtcGxlIHJhdGUgb2YgOCBrSHosIHRoZSBjdXRvZmYKKwkgKiBmcmVxdWVuY3kgb2YgZmlsdGVyMSB3b3VsZCBiZSA1MDAgSHouIFRoZSBmb2xsb3dpbmcgZmlsdGVycyB3b3VsZAorCSAqIGN1dG9mZiBhdCAxMjUgSHosIDMxLjI1IEh6LCA3LjgxMyBIeiwgMS45NTMgSHogYW5kIDAuNDg4MyBIei4KKwkgKi8KKworCXN0cnVjdCBmb3JjZV9hcnJheSBmaWx0ZXJbN107CS8qIG9mZnNldCAweDAwOTAsCisJCQkJCSAgIG9mZnNldCAweDAwOTgsCisJCQkJCSAgIG9mZnNldCAweDAwYTAsCisJCQkJCSAgIG9mZnNldCAweDAwYTgsCisJCQkJCSAgIG9mZnNldCAweDAwYjAsCisJCQkJCSAgIG9mZnNldCAweDAwYjggLAorCQkJCQkgICBvZmZzZXQgMHgwMGMwICovCisKKwkvKiBSYXRlX2RhdGEgaXMgdGhlIGNhbGN1bGF0ZWQgcmF0ZSBkYXRhLiBJdCBpcyBhIGZpcnN0IGRlcml2YXRpdmUKKwkgKiBjYWxjdWxhdGlvbi4gSXQgaXMgY2FsY3VsYXRlZCBhdCBhIGZyZXF1ZW5jeSBzcGVjaWZpZWQgYnkgdGhlCisJICogdmFyaWFibGUgcmF0ZV9kaXZpc29yIChwZy4gMTIpLiBUaGUgZGF0YSBvbiB3aGljaCB0aGUgcmF0ZSBpcworCSAqIGNhbGN1bGF0ZWQgaXMgc3BlY2lmaWVkIGJ5IHRoZSB2YXJpYWJsZSByYXRlX2FkZHJlc3MgKHBnLiAxMikuCisJICovCisKKwlzdHJ1Y3QgZm9yY2VfYXJyYXkgcmF0ZV9kYXRhOwkvKiBvZmZzZXQgMHgwMGM4ICovCisKKwkvKiBNaW5pbXVtX2RhdGEgJiBtYXhpbXVtX2RhdGEgYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIChwZWFrKQorCSAqIGRhdGEgdmFsdWVzLiBUaGUgSlIzIERTUCBjYW4gbW9uaXRvciBhbnkgOCBjb250aWd1b3VzIGRhdGEgaXRlbXMKKwkgKiBmb3IgbWluaW11bXMgYW5kIG1heGltdW1zIGF0IGZ1bGwgc2Vuc29yIGJhbmR3aWR0aC4gVGhpcyBhcmVhIGlzCisJICogb25seSB1cGRhdGVkIGF0IHVzZXIgcmVxdWVzdC4gVGhpcyBpcyBkb25lIHNvIHRoYXQgdGhlIHVzZXIgZG9lcworCSAqIG5vdCBtaXNzIGFueSBwZWFrcy4gVG8gcmVhZCB0aGUgZGF0YSwgdXNlIGVpdGhlciB0aGUgcmVhZCBwZWFrcworCSAqIGNvbW1hbmQgKHBnLiA0MCksIG9yIHRoZSByZWFkIGFuZCByZXNldCBwZWFrcyBjb21tYW5kIChwZy4gMzkpLgorCSAqIFRoZSBhZGRyZXNzIG9mIHRoZSBkYXRhIHRvIHdhdGNoIGZvciBwZWFrcyBpcyBzdG9yZWQgaW4gdGhlCisJICogdmFyaWFibGUgcGVha19hZGRyZXNzIChwZy4gMTApLiBQZWFrIGRhdGEgaXMgbG9zdCB3aGVuIGV4ZWN1dGluZworCSAqIGEgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBvciBhIGZ1bGwgc2NhbGUgY2hhbmdlLiBQZWFrIGRhdGEgaXMKKwkgKiBhbHNvIGxvc3Qgd2hlbiBwbHVnZ2luZyBpbiBhIG5ldyBzZW5zb3IuCisJICovCisKKwlzdHJ1Y3QgZm9yY2VfYXJyYXkgbWluaW11bV9kYXRhOwkvKiBvZmZzZXQgMHgwMGQwICovCisJc3RydWN0IGZvcmNlX2FycmF5IG1heGltdW1fZGF0YTsJLyogb2Zmc2V0IDB4MDBkOCAqLworCisJLyogTmVhcl9zYXRfdmFsdWUgJiBzYXRfdmFsdWUgY29udGFpbiB0aGUgdmFsdWUgdXNlZCB0byBkZXRlcm1pbmUgaWYKKwkgKiB0aGUgcmF3IHNlbnNvciBpcyBzYXR1cmF0ZWQuIEJlY2F1c2Ugb2YgZGVjb3VwbGluZyBhbmQgb2Zmc2V0CisJICogcmVtb3ZhbCwgaXQgaXMgZGlmZmljdWx0IHRvIHRlbGwgZnJvbSB0aGUgcHJvY2Vzc2VkIGRhdGEgaWYgdGhlCisJICogc2Vuc29yIGlzIHNhdHVyYXRlZC4gVGhlc2UgdmFsdWVzLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBlcnJvcgorCSAqIGFuZCB3YXJuaW5nIHdvcmRzIChwZy4gMTQpLCBwcm92aWRlIHRoaXMgY3JpdGljYWwgaW5mb3JtYXRpb24uCisJICogVGhlc2UgdHdvIHZhbHVlcyBtYXkgYmUgc2V0IGJ5IHRoZSBob3N0IHByb2Nlc3Nvci4gVGhlc2UgdmFsdWVzCisJICogYXJlIHBvc2l0aXZlIHNpZ25lZCB2YWx1ZXMsIHNpbmNlIHRoZSBzYXR1cmF0aW9uIGxvZ2ljIHVzZXMgdGhlCisJICogYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSByYXcgZGF0YS4gVGhlIG5lYXJfc2F0X3ZhbHVlIGRlZmF1bHRzIHRvCisJICogYXBwcm94aW1hdGVseSA4MCUgb2YgdGhlIEFEQydzIGZ1bGwgc2NhbGUsIHdoaWNoIGlzIDI2MjE0LCB3aGlsZQorCSAqIHNhdF92YWx1ZSBkZWZhdWx0cyB0byB0aGUgQURDJ3MgZnVsbCBzY2FsZToKKwkgKgorCSAqICAgc2F0X3ZhbHVlID0gMzI3NjggLSAyXigxNiAtIEFEQyBiaXRzKQorCSAqLworCisJczMyIG5lYXJfc2F0X3ZhbHVlOwkvKiBvZmZzZXQgMHgwMGUwICovCisJczMyIHNhdF92YWx1ZTsJLyogb2Zmc2V0IDB4MDBlMSAqLworCisJLyogUmF0ZV9hZGRyZXNzLCByYXRlX2Rpdmlzb3IgJiByYXRlX2NvdW50IGNvbnRhaW4gdGhlIGRhdGEgdXNlZCB0bworCSAqIGNvbnRyb2wgdGhlIGNhbGN1bGF0aW9ucyBvZiB0aGUgcmF0ZXMuIFJhdGVfYWRkcmVzcyBpcyB0aGUKKwkgKiBhZGRyZXNzIG9mIHRoZSBkYXRhIHVzZWQgZm9yIHRoZSByYXRlIGNhbGN1bGF0aW9uLiBUaGUgSlIzIERTUAorCSAqIHdpbGwgY2FsY3VsYXRlIHJhdGVzIGZvciBhbnkgOCBjb250aWd1b3VzIHZhbHVlcyAoZXguIHRvCisJICogY2FsY3VsYXRlIHJhdGVzIGZvciBmaWx0ZXIzIGRhdGEgc2V0IHJhdGVfYWRkcmVzcyB0byAweDAwYTgpLgorCSAqIFJhdGVfZGl2aXNvciBpcyBob3cgb2Z0ZW4gdGhlIHJhdGUgaXMgY2FsY3VsYXRlZC4gSWYgcmF0ZV9kaXZpc29yCisJICogaXMgMSwgdGhlIHJhdGVzIGFyZSBjYWxjdWxhdGVkIGF0IGZ1bGwgc2Vuc29yIGJhbmR3aWR0aC4gSWYKKwkgKiByYXRlX2Rpdmlzb3IgaXMgMjAwLCByYXRlcyBhcmUgY2FsY3VsYXRlZCBldmVyeSAyMDAgc2FtcGxlcy4KKwkgKiBSYXRlX2Rpdmlzb3IgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDY1NTM2LiBTZXQKKwkgKiByYXRlX2Rpdmlzb3IgdG8gMCB0byBjYWxjdWxhdGUgcmF0ZXMgZXZlcnkgNjU1MzYgc2FtcGxlcy4KKwkgKiBSYXRlX2NvdW50IHN0YXJ0cyBhdCB6ZXJvIGFuZCBjb3VudHMgdW50aWwgaXQgZXF1YWxzCisJICogcmF0ZV9kaXZpc29yLCBhdCB3aGljaCBwb2ludCB0aGUgcmF0ZXMgYXJlIGNhbGN1bGF0ZWQsIGFuZAorCSAqIHJhdGVfY291bnQgaXMgcmVzZXQgdG8gMC4gV2hlbiBzZXR0aW5nIGEgbmV3IHJhdGUgZGl2aXNvciwgaXQgaXMKKwkgKiBhIGdvb2QgaWRlYSB0byBzZXQgcmF0ZV9jb3VudCB0byBvbmUgbGVzcyB0aGFuIHJhdGUgZGl2aXNvci4gVGhpcworCSAqIHdpbGwgbWluaW1pemUgdGhlIHRpbWUgbmVjZXNzYXJ5IHRvIHN0YXJ0IHRoZSByYXRlIGNhbGN1bGF0aW9ucy4KKwkgKi8KKworCXMzMiByYXRlX2FkZHJlc3M7CS8qIG9mZnNldCAweDAwZTIgKi8KKwl1MzIgcmF0ZV9kaXZpc29yOwkvKiBvZmZzZXQgMHgwMGUzICovCisJdTMyIHJhdGVfY291bnQ7CS8qIG9mZnNldCAweDAwZTQgKi8KKworCS8qIENvbW1hbmRfd29yZDIgdGhyb3VnaCBjb21tYW5kX3dvcmQwIGFyZSB0aGUgbG9jYXRpb25zIHVzZWQgdG8KKwkgKiBzZW5kIGNvbW1hbmRzIHRvIHRoZSBKUjMgRFNQLiBUaGVpciB1c2FnZSB2YXJpZXMgd2l0aCB0aGUgY29tbWFuZAorCSAqIGFuZCBpcyBkZXRhaWxlZCBsYXRlciBpbiB0aGUgQ29tbWFuZCBEZWZpbml0aW9ucyBzZWN0aW9uIChwZy4KKwkgKiAyOSkuIEluIGdlbmVyYWwgdGhlIHVzZXIgcGxhY2VzIHZhbHVlcyBpbnRvIHZhcmlvdXMgbWVtb3J5CisJICogbG9jYXRpb25zLCBhbmQgdGhlbiBwbGFjZXMgdGhlIGNvbW1hbmQgd29yZCBpbnRvIGNvbW1hbmRfd29yZDAuCisJICogVGhlIEpSMyBEU1Agd2lsbCBwcm9jZXNzIHRoZSBjb21tYW5kIGFuZCBwbGFjZSBhIDAgaW50bworCSAqIGNvbW1hbmRfd29yZDAgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiBBbHRlcm5hdGl2ZWx5CisJICogdGhlIEpSMyBEU1Agd2lsbCBwbGFjZSBhIG5lZ2F0aXZlIG51bWJlciBpbnRvIGNvbW1hbmRfd29yZDAgdG8KKwkgKiBpbmRpY2F0ZSBhbiBlcnJvciBjb25kaXRpb24uIFBsZWFzZSBub3RlIHRoZSBjb21tYW5kIGxvY2F0aW9ucworCSAqIGFyZSBudW1iZXJlZCBiYWNrd2FyZHMuIChJLkUuIGNvbW1hbmRfd29yZDIgY29tZXMgYmVmb3JlCisJICogY29tbWFuZF93b3JkMSkuCisJICovCisKKwlzMzIgY29tbWFuZF93b3JkMjsJLyogb2Zmc2V0IDB4MDBlNSAqLworCXMzMiBjb21tYW5kX3dvcmQxOwkvKiBvZmZzZXQgMHgwMGU2ICovCisJczMyIGNvbW1hbmRfd29yZDA7CS8qIG9mZnNldCAweDAwZTcgKi8KKworCS8qIENvdW50MSB0aHJvdWdoIGNvdW50NiBhcmUgdW5zaWduZWQgY291bnRlcnMgd2hpY2ggYXJlIGluY3JlbWVudGVkCisJICogZXZlcnkgdGltZSB0aGUgbWF0Y2hpbmcgZmlsdGVycyBhcmUgY2FsY3VsYXRlZC4gRmlsdGVyMSBpcworCSAqIGNhbGN1bGF0ZWQgYXQgdGhlIHNlbnNvciBkYXRhIGJhbmR3aWR0aC4gU28gdGhpcyBjb3VudGVyIHdvdWxkCisJICogaW5jcmVtZW50IGF0IDgga0h6IGZvciBhIHR5cGljYWwgc2Vuc29yLiBUaGUgcmVzdCBvZiB0aGUgY291bnRlcnMKKwkgKiBhcmUgaW5jcmVtZW50ZWQgYXQgMS80IHRoZSBpbnRlcnZhbCBvZiB0aGUgY291bnRlciBpbW1lZGlhdGVseQorCSAqIHByZWNlZGluZyBpdCwgc28gdGhleSB3b3VsZCBjb3VudCBhdCAyIGtIeiwgNTAwIEh6LCAxMjUgSHogZXRjLgorCSAqIFRoZXNlIGNvdW50ZXJzIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIGRhdGEuIEVhY2ggdGltZSB0aGUKKwkgKiBjb3VudGVyIGNoYW5nZXMsIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgc2V0IGNhbiBiZSBzYW1wbGVkLCBhbmQKKwkgKiB0aGlzIHdpbGwgaW5zdXJlIHRoYXQgdGhlIHVzZXIgZ2V0cyBlYWNoIHNhbXBsZSwgb25jZSwgYW5kIG9ubHkKKwkgKiBvbmNlLgorCSAqLworCisJdTMyIGNvdW50MTsJCS8qIG9mZnNldCAweDAwZTggKi8KKwl1MzIgY291bnQyOwkJLyogb2Zmc2V0IDB4MDBlOSAqLworCXUzMiBjb3VudDM7CQkvKiBvZmZzZXQgMHgwMGVhICovCisJdTMyIGNvdW50NDsJCS8qIG9mZnNldCAweDAwZWIgKi8KKwl1MzIgY291bnQ1OwkJLyogb2Zmc2V0IDB4MDBlYyAqLworCXUzMiBjb3VudDY7CQkvKiBvZmZzZXQgMHgwMGVkICovCisKKwkvKiBFcnJvcl9jb3VudCBpcyBhIHJ1bm5pbmcgY291bnQgb2YgZGF0YSByZWNlcHRpb24gZXJyb3JzLiBJZiB0aGlzCisJICogY291bnRlciBpcyBjaGFuZ2luZyByYXBpZGx5LCBpdCBwcm9iYWJseSBpbmRpY2F0ZXMgYSBiYWQgc2Vuc29yCisJICogY2FibGUgY29ubmVjdGlvbiBvciBvdGhlciBoYXJkd2FyZSBwcm9ibGVtLiBJbiBtb3N0IGluc3RhbGxhdGlvbnMKKwkgKiBlcnJvcl9jb3VudCBzaG91bGQgbm90IGNoYW5nZSBhdCBhbGwuIEJ1dCBpdCBpcyBwb3NzaWJsZSBpbiBhbgorCSAqIGV4dHJlbWVseSBub2lzeSBlbnZpcm9ubWVudCB0byBleHBlcmllbmNlIG9jY2FzaW9uYWwgZXJyb3JzIGV2ZW4KKwkgKiB3aXRob3V0IGEgaGFyZHdhcmUgcHJvYmxlbS4gSWYgdGhlIHNlbnNvciBpcyB3ZWxsIGdyb3VuZGVkLCB0aGlzCisJICogaXMgcHJvYmFibHkgdW5hdm9pZGFibGUgaW4gdGhlc2UgZW52aXJvbm1lbnRzLiBPbiB0aGUgb2NjYXNpb25zCisJICogd2hlcmUgdGhpcyBjb3VudGVyIGNvdW50cyBhIGJhZCBzYW1wbGUsIHRoYXQgc2FtcGxlIGlzIGlnbm9yZWQuCisJICovCisKKwl1MzIgZXJyb3JfY291bnQ7CS8qIG9mZnNldCAweDAwZWUgKi8KKworCS8qIENvdW50X3ggaXMgYSBjb3VudGVyIHdoaWNoIGlzIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEpSMyBEU1AKKwkgKiBzZWFyY2hlcyBpdHMgam9iIHF1ZXVlcyBhbmQgZmluZHMgbm90aGluZyB0byBkby4gSXQgaW5kaWNhdGVzIHRoZQorCSAqIGFtb3VudCBvZiBpZGxlIHRpbWUgdGhlIEpSMyBEU1AgaGFzIGF2YWlsYWJsZS4gSXQgY2FuIGFsc28gYmUKKwkgKiB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgSlIzIERTUCBpcyBhbGl2ZS4gU2VlIHRoZSBQZXJmb3JtYW5jZQorCSAqIElzc3VlcyBzZWN0aW9uIG9uIHBnLiA0OSBmb3IgbW9yZSBkZXRhaWxzLgorCSAqLworCisJdTMyIGNvdW50X3g7CS8qIG9mZnNldCAweDAwZWYgKi8KKworCS8qIFdhcm5pbmdzICYgZXJyb3JzIGNvbnRhaW4gdGhlIHdhcm5pbmcgYW5kIGVycm9yIGJpdHMKKwkgKiByZXNwZWN0aXZlbHkuIFRoZSBmb3JtYXQgb2YgdGhlc2UgdHdvIHdvcmRzIGlzIGRpc2N1c3NlZCBvbiBwYWdlCisJICogMjEgdW5kZXIgdGhlIGhlYWRpbmdzIHdhcm5pbmdzX2JpdHMgYW5kIGVycm9yX2JpdHMuCisJICovCisKKwl1MzIgd2FybmluZ3M7CS8qIG9mZnNldCAweDAwZjAgKi8KKwl1MzIgZXJyb3JzOwkJLyogb2Zmc2V0IDB4MDBmMSAqLworCisJLyogVGhyZXNob2xkX2JpdHMgaXMgYSB3b3JkIGNvbnRhaW5pbmcgdGhlIGJpdHMgdGhhdCBhcmUgc2V0IGJ5IHRoZQorCSAqIGxvYWQgZW52ZWxvcGVzLiBTZWUgbG9hZF9lbnZlbG9wZXMgKHBnLiAxNykgYW5kIHRocmVzaF9zdHJ1Y3QKKwkgKiAocGcuIDIzKSBmb3IgbW9yZSBkZXRhaWxzLgorCSAqLworCisJczMyIHRocmVzaG9sZF9iaXRzOwkvKiBvZmZzZXQgMHgwMGYyICovCisKKwkvKiBMYXN0X2NyYyBpcyB0aGUgdmFsdWUgdGhhdCBzaG93cyB0aGUgYWN0dWFsIGNhbGN1bGF0ZWQgQ1JDLiBDUkMKKwkgKiBpcyBzaG9ydCBmb3IgY3ljbGljIHJlZHVuZGFuY3kgY29kZS4gSXQgc2hvdWxkIGJlIHplcm8uIFNlZSB0aGUKKwkgKiBkZXNjcmlwdGlvbiBmb3IgY2FsX2NyY19iYWQgKHBnLiAyMSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICovCisKKwlzMzIgbGFzdF9DUkM7CS8qIG9mZnNldCAweDAwZjMgKi8KKworCS8qIEVFUHJvbV92ZXJfbm8gY29udGFpbnMgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBzZW5zb3IgRUVQcm9tLgorCSAqIEVFUHJvbSB2ZXJzaW9uIG51bWJlcnMgY2FuIHZhcnkgYmV0d2VlbiAwIGFuZCAyNTUuCisJICogU29mdHdhcmVfdmVyX25vIGNvbnRhaW5zIHRoZSBzb2Z0d2FyZSB2ZXJzaW9uIG51bWJlci4gVmVyc2lvbgorCSAqIDMuMDIgd291bGQgYmUgc3RvcmVkIGFzIDMwMi4KKwkgKi8KKworCXMzMiBlZXByb21fdmVyX25vOwkvKiBvZmZzZXQgMHgwMGY0ICovCisJczMyIHNvZnR3YXJlX3Zlcl9ubzsJLyogb2Zmc2V0IDB4MDBmNSAqLworCisJLyogU29mdHdhcmVfZGF5ICYgc29mdHdhcmVfeWVhciBhcmUgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGUgc29mdHdhcmUKKwkgKiB0aGUgSlIzIERTUCBpcyBjdXJyZW50bHkgcnVubmluZy4gRGF5IGlzIHRoZSBkYXkgb2YgdGhlIHllYXIsCisJICogd2l0aCBKYW51YXJ5IDEgYmVpbmcgMSwgYW5kIERlY2VtYmVyIDMxLCBiZWluZyAzNjUgZm9yIG5vbiBsZWFwCisJICogeWVhcnMuCisJICovCisKKwlzMzIgc29mdHdhcmVfZGF5OwkvKiBvZmZzZXQgMHgwMGY2ICovCisJczMyIHNvZnR3YXJlX3llYXI7CS8qIG9mZnNldCAweDAwZjcgKi8KKworCS8qIFNlcmlhbF9ubyAmIG1vZGVsX25vIGFyZSB0aGUgdHdvIHZhbHVlcyB3aGljaCB1bmlxdWVseSBpZGVudGlmeSBhCisJICogc2Vuc29yLiBUaGlzIG1vZGVsIG51bWJlciBkb2VzIG5vdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIHRoZSBKUjMKKwkgKiBtb2RlbCBudW1iZXIsIGJ1dCBpdCB3aWxsIHByb3ZpZGUgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IKKwkgKiBkaWZmZXJlbnQgc2Vuc29yIGNvbmZpZ3VyYXRpb25zLgorCSAqLworCisJdTMyIHNlcmlhbF9ubzsJLyogb2Zmc2V0IDB4MDBmOCAqLworCXUzMiBtb2RlbF9ubzsJLyogb2Zmc2V0IDB4MDBmOSAqLworCisJLyogQ2FsX2RheSAmIGNhbF95ZWFyIGFyZSB0aGUgc2Vuc29yIGNhbGlicmF0aW9uIGRhdGUuIERheSBpcyB0aGUKKwkgKiBkYXkgb2YgdGhlIHllYXIsIHdpdGggSmFudWFyeSAxIGJlaW5nIDEsIGFuZCBEZWNlbWJlciAzMSwgYmVpbmcKKwkgKiAzNjYgZm9yIGxlYXAgeWVhcnMuCisJICovCisKKwlzMzIgY2FsX2RheTsJLyogb2Zmc2V0IDB4MDBmYSAqLworCXMzMiBjYWxfeWVhcjsJLyogb2Zmc2V0IDB4MDBmYiAqLworCisJLyogVW5pdHMgaXMgYW4gZW51bWVyYXRlZCByZWFkIG9ubHkgdmFsdWUgZGVmaW5pbmcgdGhlIGVuZ2luZWVyaW5nCisJICogdW5pdHMgdXNlZCBpbiB0aGUgc2Vuc29yIGZ1bGwgc2NhbGUuIFRoZSBtZWFuaW5ncyBvZiBwYXJ0aWN1bGFyCisJICogdmFsdWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlIHNlY3Rpb24gZGV0YWlsaW5nIHRoZSBmb3JjZV91bml0cworCSAqIHN0cnVjdHVyZSBvbiBwYWdlIDIyLiBUaGUgZW5naW5lZXJpbmcgdW5pdHMgYXJlIHNldHRvIGN1c3RvbWVyCisJICogc3BlY2lmaWNhdGlvbnMgZHVyaW5nIHNlbnNvciBtYW51ZmFjdHVyZSBhbmQgY2Fubm90IGJlIGNoYW5nZWQgYnkKKwkgKiB3cml0aW5nIHRvIFVuaXRzLgorCSAqCisJICogQml0cyBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgb2YgcmVzb2x1dGlvbiBvZiB0aGUgQURDCisJICogY3VycmVudGx5IGluIHVzZS4KKwkgKgorCSAqIENoYW5uZWxzIGlzIGEgYml0IGZpZWxkIHNob3dpbmcgd2hpY2ggY2hhbm5lbHMgdGhlIGN1cnJlbnQgc2Vuc29yCisJICogaXMgY2FwYWJsZSBvZiBzZW5kaW5nLiBJZiBiaXQgMCBpcyBhY3RpdmUsIHRoaXMgc2Vuc29yIGNhbiBzZW5kCisJICogY2hhbm5lbCAwLCBpZiBiaXQgMTMgaXMgYWN0aXZlLCB0aGlzIHNlbnNvciBjYW4gc2VuZCBjaGFubmVsIDEzLAorCSAqIGV0Yy4gVGhpcyBiaXQgY2FuIGJlIGFjdGl2ZSwgZXZlbiBpZiB0aGUgc2Vuc29yIGlzIG5vdCBjdXJyZW50bHkKKwkgKiBzZW5kaW5nIHRoaXMgY2hhbm5lbC4gU29tZSBzZW5zb3JzIGFyZSBjb25maWd1cmFibGUgYXMgdG8gd2hpY2gKKwkgKiBjaGFubmVscyB0byBzZW5kLCBhbmQgdGhpcyBmaWVsZCBvbmx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZQorCSAqIGNoYW5uZWxzIGF2YWlsYWJsZSB0byBzZW5kLCBub3Qgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVG8KKwkgKiBmaW5kIHdoaWNoIGNoYW5uZWxzIGFyZSBjdXJyZW50bHkgYmVpbmcgc2VudCwgbW9uaXRvciB0aGUKKwkgKiBSYXdfdGltZSBmaWVsZHMgKHBnLiAxOSkgaW4gdGhlIHJhd19jaGFubmVscyBhcnJheSAocGcuIDcpLiBJZgorCSAqIHRoZSB0aW1lIGlzIGNoYW5naW5nIHBlcmlvZGljYWxseSwgdGhlbiB0aGF0IGNoYW5uZWwgaXMgYmVpbmcKKwkgKiByZWNlaXZlZC4KKwkgKi8KKworCXUzMiB1bml0czsJCS8qIG9mZnNldCAweDAwZmMgKi8KKwlzMzIgYml0czsJCS8qIG9mZnNldCAweDAwZmQgKi8KKwlzMzIgY2hhbm5lbHM7CS8qIG9mZnNldCAweDAwZmUgKi8KKworCS8qIFRoaWNrbmVzcyBzcGVjaWZpZXMgdGhlIG92ZXJhbGwgdGhpY2tuZXNzIG9mIHRoZSBzZW5zb3IgZnJvbQorCSAqIGZsYW5nZSB0byBmbGFuZ2UuIFRoZSBlbmdpbmVlcmluZyB1bml0cyBmb3IgdGhpcyB2YWx1ZSBhcmUKKwkgKiBjb250YWluZWQgaW4gdW5pdHMgKHBnLiAxNikuIFRoZSBzZW5zb3IgY2FsaWJyYXRpb24gaXMgcmVsYXRpdmUKKwkgKiB0byB0aGUgY2VudGVyIG9mIHRoZSBzZW5zb3IuIFRoaXMgdmFsdWUgYWxsb3dzIGVhc3kgY29vcmRpbmF0ZQorCSAqIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgc2Vuc29yIHRvIGVpdGhlciBmbGFuZ2UuCisJICovCisKKwlzMzIgdGhpY2tuZXNzOwkvKiBvZmZzZXQgMHgwMGZmICovCisKKwkvKiBMb2FkX2VudmVsb3BlcyBpcyBhIHRhYmxlIGNvbnRhaW5pbmcgdGhlIGxvYWQgZW52ZWxvcGUKKwkgKiBkZXNjcmlwdGlvbnMuIFRoZXJlIGFyZSAxNiBwb3NzaWJsZSBsb2FkIGVudmVsb3BlIHNsb3RzIGluIHRoZQorCSAqIHRhYmxlLiBUaGUgc2xvdHMgYXJlIG9uIDE2IHdvcmQgYm91bmRhcmllcyBhbmQgYXJlIG51bWJlcmVkIDAtMTUuCisJICogRWFjaCBsb2FkIGVudmVsb3BlIG5lZWRzIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzbG90IGJ1dAorCSAqIG5lZWQgbm90IGJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGF0IHNsb3QuIFRoYXQgaXMgdG8gc2F5IHRoYXQgYQorCSAqIHNpbmdsZSBsb2FkIGVudmVsb3BlIGNhbiBiZSBsYXJnZXIgdGhhbiBhIHNpbmdsZSBzbG90LiBUaGUKKwkgKiBzb2Z0d2FyZSBoYXMgYmVlbiB0ZXN0ZWQgYW5kIHJhbiBzYXRpc2ZhY3RvcmlseSB3aXRoIDUwCisJICogdGhyZXNob2xkcyBhY3RpdmUuIEEgc2luZ2xlIGxvYWQgZW52ZWxvcGUgdGhpcyBsYXJnZSB3b3VsZCB0YWtlCisJICogdXAgNSBvZiB0aGUgMTYgc2xvdHMuIFRoZSBsb2FkIGVudmVsb3BlIGRhdGEgaXMgbGFpZCBvdXQgaW4gYW4KKwkgKiBvcmRlciB0aGF0IGlzIG1vc3QgZWZmaWNpZW50IGZvciB0aGUgSlIzIERTUC4gVGhlIHN0cnVjdHVyZSBpcworCSAqIGRldGFpbGVkIGxhdGVyIGluIHRoZSBzZWN0aW9uIHNob3dpbmcgdGhlIGRlZmluaXRpb24gb2YgdGhlCisJICogbGVfc3RydWN0IHN0cnVjdHVyZSAocGcuIDIzKS4KKwkgKi8KKworCXN0cnVjdCBsZV9zdHJ1Y3QgbG9hZF9lbnZlbG9wZXNbMHgxMF07CS8qIG9mZnNldCAweDAxMDAgKi8KKworCS8qIFRyYW5zZm9ybXMgaXMgYSB0YWJsZSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZGVzY3JpcHRpb25zLgorCSAqIFRoZXJlIGFyZSAxNiBwb3NzaWJsZSB0cmFuc2Zvcm0gc2xvdHMgaW4gdGhlIHRhYmxlLiBUaGUgc2xvdHMgYXJlCisJICogb24gMTYgd29yZCBib3VuZGFyaWVzIGFuZCBhcmUgbnVtYmVyZWQgMC0xNS4gRWFjaCB0cmFuc2Zvcm0gbmVlZHMKKwkgKiB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2xvdCBidXQgbmVlZCBub3QgYmUgZnVsbHkKKwkgKiBjb250YWluZWQgaW4gdGhhdCBzbG90LiBUaGF0IGlzIHRvIHNheSB0aGF0IGEgc2luZ2xlIHRyYW5zZm9ybQorCSAqIGNhbiBiZSBsYXJnZXIgdGhhbiBhIHNpbmdsZSBzbG90LiBBIHRyYW5zZm9ybSBpcyAyICogbm8gb2YgbGlua3MKKwkgKiArIDEgd29yZHMgaW4gbGVuZ3RoLiBTbyBhIHNpbmdsZSBzbG90IGNhbiBjb250YWluIGEgdHJhbnNmb3JtCisJICogd2l0aCA3IGxpbmtzLiBUd28gc2xvdHMgY2FuIGNvbnRhaW4gYSB0cmFuc2Zvcm0gdGhhdCBpcyAxNSBsaW5rcy4KKwkgKiBUaGUgbGF5b3V0IGlzIGRldGFpbGVkIGxhdGVyIGluIHRoZSBzZWN0aW9uIHNob3dpbmcgdGhlCisJICogZGVmaW5pdGlvbiBvZiB0aGUgdHJhbnNmb3JtIHN0cnVjdHVyZSAocGcuIDI2KS4KKwkgKi8KKworCXN0cnVjdCBpbnRlcm5fdHJhbnNmb3JtIHRyYW5zZm9ybXNbMHgxMF07CS8qIG9mZnNldCAweDAyMDAgKi8KK307CisKK3N0cnVjdCBqcjNfdCB7CisJc3RydWN0IHsKKwkJdTMyIHByb2dyYW1fbG93WzB4NDAwMF07CS8qICAweDAwMDAwIC0gMHgxMDAwMCAqLworCQlzdHJ1Y3QganIzX2NoYW5uZWwgZGF0YTsJLyogIDB4MTAwMDAgLSAweDEwYzAwICovCisJCWNoYXIgcGFkMlsweDMwMDAwIC0gMHgwMGMwMF07CS8qICAweDEwYzAwIC0gMHg0MDAwMCAqLworCQl1MzIgcHJvZ3JhbV9oaWdoWzB4ODAwMF07CS8qICAweDQwMDAwIC0gMHg2MDAwMCAqLworCQl1MzIgcmVzZXQ7CS8qICAweDYwMDAwIC0gMHg2MDAwNCAqLworCQljaGFyIHBhZDNbMHgyMDAwMCAtIDB4MDAwMDRdOwkvKiAgMHg2MDAwNCAtIDB4ODAwMDAgKi8KKwl9IGNoYW5uZWxbNF07Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2tlX2NvdW50ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmNmZlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jCisgICAgQ29tZWRpIGRyaXZlciBmb3IgS29sdGVyLUVsZWN0cm9uaWMgUENJIENvdW50ZXIgMSBDYXJkCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBrZV9jb3VudGVyCitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciBLb2x0ZXIgRWxlY3Ryb25pYyBDb3VudGVyIENhcmQKK0RldmljZXM6IFtLb2x0ZXIgRWxlY3Ryb25pY10gUENJIENvdW50ZXIgQ2FyZCAoa2VfY291bnRlcikKK0F1dGhvcjogTWljaGFlbCBIaWxsbWFubgorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxNTo0Mjo0MiArMDEwMAorU3RhdHVzOiB0ZXN0ZWQKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisKK1RoaXMgZHJpdmVyIGlzIGEgc2ltcGxlIGRyaXZlciB0byByZWFkIHRoZSBjb3VudGVyIHZhbHVlcyBmcm9tCitLb2x0ZXIgRWxlY3Ryb25pYyBQQ0kgQ291bnRlciBDYXJkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjZGVmaW5lIENOVF9EUklWRVJfTkFNRSAgICAgICAgICJrZV9jb3VudGVyIgorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0tPTFRFUiAgICAweDEwMDEKKyNkZWZpbmUgQ05UX0NBUkRfREVWSUNFX0lEICAgICAgMHgwMDE0CisKKy8qLS0gZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjbnRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgY250X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjbnRfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9LT0xURVIsIENOVF9DQVJEX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY250X3BjaV90YWJsZSk7CisKKy8qLS0gYm9hcmQgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOworCWludCBjbnRfY2hhbm5lbF9uYnI7CisJaW50IGNudF9iaXRzOworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgY250X2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOglDTlRfRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWNlX2lkOkNOVF9DQVJEX0RFVklDRV9JRCwKKwkgICAgICBjbnRfY2hhbm5lbF9uYnI6MywKKyAgICAgIGNudF9iaXRzOjI0fQorfTsKKworI2RlZmluZSBjbnRfYm9hcmRfbmJyIChzaXplb2YoY250X2JvYXJkcykvc2l6ZW9mKHN0cnVjdCBjbnRfYm9hcmRfc3RydWN0KSkKKworLyotLSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgY250X2RldmljZV9wcml2YXRlIHsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBjbnRfZGV2aWNlX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBjbnRfZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6Q05UX0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNudF9hdHRhY2gsCisgICAgICBkZXRhY2g6Y250X2RldGFjaCwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoY250X2RyaXZlciwgY250X3BjaV90YWJsZSk7CisKKy8qLS0gY291bnRlciB3cml0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhpcyBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciByZXNldHRpbmcgdGhlIGNvdW50ZXJzOyBtYXliZSBpdCBpcyBiZXR0ZXIKKyAgIHRvIG1ha2UgYSBzcGVjaWFsIGNvbW1hbmQgJ3Jlc2V0Jy4gKi8KK3N0YXRpYyBpbnQgY250X3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJb3V0YigodW5zaWduZWQgY2hhcikoKGRhdGFbMF0gPj4gMjQpICYgMHhmZiksCisJCWRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDEwKTsKKwlvdXRiKCh1bnNpZ25lZCBjaGFyKSgoZGF0YVswXSA+PiAxNikgJiAweGZmKSwKKwkJZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MGMpOworCW91dGIoKHVuc2lnbmVkIGNoYXIpKChkYXRhWzBdID4+IDgpICYgMHhmZiksCisJCWRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDA4KTsKKwlvdXRiKCh1bnNpZ25lZCBjaGFyKSgoZGF0YVswXSA+PiAwKSAmIDB4ZmYpLAorCQlkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgwNCk7CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4gKi8KKwlyZXR1cm4gMTsKK30KKworLyotLSBjb3VudGVyIHJlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGNudF9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgY2hhciBhMCwgYTEsIGEyLCBhMywgYTQ7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgcmVzdWx0OworCisJYTAgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCk7CisJYTEgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MDQpOworCWEyID0gaW5iKGRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDA4KTsKKwlhMyA9IGluYihkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgwYyk7CisJYTQgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MTApOworCisJcmVzdWx0ID0gKGExICsgKGEyICogMjU2KSArIChhMyAqIDY1NTM2KSk7CisJaWYgKGE0ID4gMCkKKwkJcmVzdWx0ID0gcmVzdWx0IC0gcy0+bWF4ZGF0YTsKKworCSpkYXRhID0gKHVuc2lnbmVkIGludCkgcmVzdWx0OworCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkICovCisJcmV0dXJuIDE7Cit9CisKKy8qLS0gYXR0YWNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjbnRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgKmJvYXJkOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKKwlpbnQgZXJyb3IsIGk7CisKKwkvKiBhbGxvY2F0ZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlpZiAoKGVycm9yID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgY250X2RldmljZV9wcml2YXRlKSkpIDwgMCkgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJLyogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4gKi8KKwlmb3IgKHBjaV9kZXZpY2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpX2RldmljZSAhPSBOVUxMOworCQlwY2lfZGV2aWNlID0KKwkJcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpX2RldmljZSkpIHsKKwkJaWYgKHBjaV9kZXZpY2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0tPTFRFUikgeworCQkJZm9yIChpID0gMDsgaSA8IGNudF9ib2FyZF9uYnI7IGkrKykgeworCQkJCWlmIChjbnRfYm9hcmRzW2ldLmRldmljZV9pZCA9PQorCQkJCQlwY2lfZGV2aWNlLT5kZXZpY2UpIHsKKwkJCQkJLyogd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/ICovCisJCQkJCWlmICgoaXQtPm9wdGlvbnNbMF0gIT0gMCkKKwkJCQkJCXx8IChpdC0+b3B0aW9uc1sxXSAhPSAwKSkgeworCQkJCQkJLyogYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8gKi8KKwkJCQkJCWlmIChwY2lfZGV2aWNlLT5idXMtPm51bWJlciAhPQorCQkJCQkJCWl0LT5vcHRpb25zWzBdCisJCQkJCQkJfHwgUENJX1NMT1QocGNpX2RldmljZS0+CisJCQkJCQkJCWRldmZuKSAhPQorCQkJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlkZXYtPmJvYXJkX3B0ciA9IGNudF9ib2FyZHMgKyBpOworCQkJCQlib2FyZCA9IChzdHJ1Y3QgY250X2JvYXJkX3N0cnVjdCAqKSBkZXYtPgorCQkJCQkJYm9hcmRfcHRyOworCQkJCQlnb3RvIGZvdW5kOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90OiAlZC8lZClcbiIsCisJCWRldi0+bWlub3IsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCXByaW50aygiY29tZWRpJWQ6IGZvdW5kICVzIGF0IFBDSSBidXMgJWQsIHNsb3QgJWRcbiIsIGRldi0+bWlub3IsCisJCWJvYXJkLT5uYW1lLCBwY2lfZGV2aWNlLT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QocGNpX2RldmljZS0+ZGV2Zm4pKTsKKwlkZXZwcml2LT5wY2lkZXYgPSBwY2lfZGV2aWNlOworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkLT5uYW1lOworCisJLyogZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyAqLworCWlmICgoZXJyb3IgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2aWNlLCBDTlRfRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGklZDogZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qIHJlYWQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMwXSAqLworCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldmljZSwgMCk7CisJZGV2LT5pb2Jhc2UgPSBpb19iYXNlOworCisJLyogYWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzICovCisJaWYgKChlcnJvciA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzdWJkZXZpY2UgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzdWJkZXZpY2U7CisKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCXN1YmRldmljZS0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIC8qIHwgU0RGX0NPTU1PTiAqLyA7CisJc3ViZGV2aWNlLT5uX2NoYW4gPSBib2FyZC0+Y250X2NoYW5uZWxfbmJyOworCXN1YmRldmljZS0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkLT5jbnRfYml0cykgLSAxOworCXN1YmRldmljZS0+aW5zbl9yZWFkID0gY250X3JpbnNuOworCXN1YmRldmljZS0+aW5zbl93cml0ZSA9IGNudF93aW5zbjsKKworCS8vIHNlbGVjdCAyME1IeiBjbG9jaworCW91dGIoMywgZGV2LT5pb2Jhc2UgKyAyNDgpOworCisJLy8gcmVzZXQgYWxsIGNvdW50ZXJzCisJb3V0YigwLCBkZXYtPmlvYmFzZSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIDB4MjApOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyAweDQwKTsKKworCXByaW50aygiY29tZWRpJWQ6ICIgQ05UX0RSSVZFUl9OQU1FICIgYXR0YWNoZWQuXG4iLCBkZXYtPm1pbm9yKTsKKwlyZXR1cm4gMDsKK30KKworLyotLSBkZXRhY2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGNudF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpZGV2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpZGV2KTsKKwl9CisJcHJpbnRrKCJjb21lZGklZDogIiBDTlRfRFJJVkVSX05BTUUgIiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCmluZGV4IGI0MzJhYTcuLjEyNDgxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1lNDAwMF9wY2lfdGFibGUpOwogCi1zdGF0aWMgY29uc3QgbWU0MDAwX2JvYXJkX3QgbWU0MDAwX2JvYXJkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtZTQwMDBfYm9hcmQgbWU0MDAwX2JvYXJkc1tdID0gewogCXsiTUUtNDY1MCIsIDB4NDY1MCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHswfX0sCiAKIAl7Ik1FLTQ2NjAiLCAweDQ2NjAsIHswLCAwfSwgezMyLCAwLCAxNiwgMH0sIHs0fSwgezN9fSwKQEAgLTExMywxMDggKzExMywxMDggQEAKIAl7MH0sCiB9OwogCi0jZGVmaW5lIE1FNDAwMF9CT0FSRF9WRVJTSU9OUyAoc2l6ZW9mKG1lNDAwMF9ib2FyZHMpIC8gc2l6ZW9mKG1lNDAwMF9ib2FyZF90KSAtIDEpCisjZGVmaW5lIE1FNDAwMF9CT0FSRF9WRVJTSU9OUyAoc2l6ZW9mKG1lNDAwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBtZTQwMDBfYm9hcmQpIC0gMSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBDb21lZGkgZnVuY3Rpb24gcHJvdG90eXBlcwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IG1lNDAwMF9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfbWU0MDAwID0geworc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IG1lNDAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX21lNDAwMCA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiJtZTQwMDAiLAotICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAotICAgICAgYXR0YWNoOm1lNDAwMF9hdHRhY2gsCi0gICAgICBkZXRhY2g6bWU0MDAwX2RldGFjaCwKKyAgICAgIG1vZHVsZSA6IFRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoIDogbWU0MDAwX2F0dGFjaCwKKyAgICAgIGRldGFjaCA6IG1lNDAwMF9kZXRhY2gsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1laWxoYXVzIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgbWU0MDAwX3Byb2JlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCk7Ci1zdGF0aWMgaW50IGluaXRfYm9hcmRfaW5mbyhjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wKTsKLXN0YXRpYyBpbnQgaW5pdF9hb19jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBpbml0X2FpX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IGluaXRfZGlvX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IGluaXRfY250X2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IHhpbGlueF9kb3dubG9hZChjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgcmVzZXRfYm9hcmQoY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApOworc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCk7CitzdGF0aWMgaW50IGluaXRfYW9fY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaW5pdF9haV9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpbml0X2Rpb19jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpbml0X2NudF9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCB4aWxpbnhfZG93bmxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHJlc2V0X2JvYXJkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBjbnRfcmVzZXQoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOworc3RhdGljIGludCBjbnRfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOwogCi1zdGF0aWMgaW50IGNudF9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKK3N0YXRpYyBpbnQgY250X2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl93cml0ZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfY250X2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBtZTQwMDBfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiAKLXN0YXRpYyBpbnQgYWlfY2hlY2tfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGFpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCi1zdGF0aWMgaW50IGFpX3JvdW5kX2NtZF9hcmdzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2NtZCAqIGNtZCwKK3N0YXRpYyBpbnQgYWlfcm91bmRfY21kX2FyZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCAqaW5pdF90aWNrcywKIAl1bnNpZ25lZCBpbnQgKnNjYW5fdGlja3MsIHVuc2lnbmVkIGludCAqY2hhbl90aWNrcyk7CiAKLXN0YXRpYyBpbnQgYWlfcHJlcGFyZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9jbWQgKiBjbWQsCitzdGF0aWMgaW50IGFpX3ByZXBhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCBzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgY2hhbl90aWNrcyk7CiAKLXN0YXRpYyBpbnQgYWlfd3JpdGVfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGFpX3dyaXRlX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQgUFRfUkVHU19BUkcpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWRfdGVzdChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIAotc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgTWVpbGhhdXMgaW5saW5lIGZ1bmN0aW9ucwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGIoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciB2YWx1ZSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZTQwMDBfb3V0YihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHZhbHVlLAogCXVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAlQT1JUX1BERUJVRygiLS0+IDB4JTAyWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKIAlvdXRiKHZhbHVlLCBwb3J0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lNDAwMF9vdXRsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCitzdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKIAl1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJUE9SVF9QREVCVUcoIi0tPiAweCUwOGxYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOwogCW91dGwodmFsdWUsIHBvcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWU0MDAwX2lubChjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWU0MDAwX2lubChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl2YWx1ZSA9IGlubChwb3J0KTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG1lNDAwMF9pbmIoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG1lNDAwMF9pbmIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgdmFsdWU7CiAJdmFsdWUgPSBpbmIocG9ydCk7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lNDAwMF9haV9yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTQwMDBfYWlfcmFuZ2UgPSB7CiAJNCwKIAl7CiAJCQlVTklfUkFOR0UoMi41KSwKQEAgLTI0MCwxNiArMjQwLDE2IEBACiAJCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lNDAwMF9hb19yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTQwMDBfYW9fcmFuZ2UgPSB7CiAJMSwKIAl7CiAJCQlCSVBfUkFOR0UoMTApLAogCQl9CiB9OwogCi1zdGF0aWMgaW50IG1lNDAwMF9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXN1bHQ7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2F0dGFjaCgpXG4iKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCQlzLT5zdWJkZXZfZmxhZ3MgPQogCQkJU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKIAkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haS5jb3VudDsKLQkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsJLy8gMTYgYml0IEFEQworCQlzLT5tYXhkYXRhID0gMHhGRkZGOwkvKiAgMTYgYml0IEFEQyAqLwogCQlzLT5sZW5fY2hhbmxpc3QgPSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX0NPVU5UOwogCQlzLT5yYW5nZV90YWJsZSA9ICZtZTQwMDBfYWlfcmFuZ2U7CiAJCXMtPmluc25fcmVhZCA9IG1lNDAwMF9haV9pbnNuX3JlYWQ7CkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwogCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQ7CiAJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW8uY291bnQ7Ci0JCXMtPm1heGRhdGEgPSAweEZGRkY7CS8vIDE2IGJpdCBEQUMKKwkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsJLyogIDE2IGJpdCBEQUMgKi8KIAkJcy0+cmFuZ2VfdGFibGUgPSAmbWU0MDAwX2FvX3JhbmdlOwogCQlzLT5pbnNuX3dyaXRlID0gbWU0MDAwX2FvX2luc25fd3JpdGU7CiAJCXMtPmluc25fcmVhZCA9IG1lNDAwMF9hb19pbnNuX3JlYWQ7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CiAJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKIAkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5jbnQuY291bnQ7Ci0JCXMtPm1heGRhdGEgPSAweEZGRkY7CS8vIDE2IGJpdCBjb3VudGVycworCQlzLT5tYXhkYXRhID0gMHhGRkZGOwkvKiAgMTYgYml0IGNvdW50ZXJzICovCiAJCXMtPmluc25fcmVhZCA9IG1lNDAwMF9jbnRfaW5zbl9yZWFkOwogCQlzLT5pbnNuX3dyaXRlID0gbWU0MDAwX2NudF9pbnNuX3dyaXRlOwogCQlzLT5pbnNuX2NvbmZpZyA9IG1lNDAwMF9jbnRfaW5zbl9jb25maWc7CkBAIC0zNjksMTggKzM2OSwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9wcm9iZShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CiAJaW50IHJlc3VsdCwgaTsKLQltZTQwMDBfYm9hcmRfdCAqYm9hcmQ7CisJc3RydWN0IG1lNDAwMF9ib2FyZCAqYm9hcmQ7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX3Byb2JlKClcbiIpOwogCiAJLyogQWxsb2NhdGUgcHJpdmF0ZSBtZW1vcnkgKi8KLQlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihtZTQwMDBfaW5mb190KSkgPCAwKSB7CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG1lNDAwMF9pbmZvKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKIAkvKgogCSAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCiAJICovCkBAIC00MDUsNyArNDA1LDcgQEAKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlkZXYtPmJvYXJkX3B0ciA9IG1lNDAwMF9ib2FyZHMgKyBpOwotCQkJCQlib2FyZCA9IChtZTQwMDBfYm9hcmRfdCAqKSBkZXYtPgorCQkJCQlib2FyZCA9IChzdHJ1Y3QgbWU0MDAwX2JvYXJkICopIGRldi0+CiAJCQkJCQlib2FyZF9wdHI7CiAJCQkJCWluZm8tPnBjaV9kZXZfcCA9IHBjaV9kZXZpY2U7CiAJCQkJCWdvdG8gZm91bmQ7CkBAIC01MTIsNyArNTEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApCitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCkKIHsKIAogCUNBTExfUERFQlVHKCJJbiBnZXRfcmVnaXN0ZXJzKClcbiIpOwpAQCAtNTY0LDI3ICs1NjQsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCkKK3N0YXRpYyBpbnQgaW5pdF9ib2FyZF9pbmZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApCiB7CiAJaW50IHJlc3VsdDsKIAogCUNBTExfUERFQlVHKCJJbiBpbml0X2JvYXJkX2luZm8oKVxuIik7CiAKIAkvKiBJbml0IHNwaW4gbG9ja3MgKi8KLQkvL3NwaW5fbG9ja19pbml0KCZpbmZvLT5wcmVsb2FkX2xvY2spOwotCS8vc3Bpbl9sb2NrX2luaXQoJmluZm8tPmFpX2N0cmxfbG9jayk7CisJLyogc3Bpbl9sb2NrX2luaXQoJmluZm8tPnByZWxvYWRfbG9jayk7ICovCisJLyogc3Bpbl9sb2NrX2luaXQoJmluZm8tPmFpX2N0cmxfbG9jayk7ICovCiAKIAkvKiBHZXQgdGhlIHNlcmlhbCBudW1iZXIgKi8KIAlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2Rldl9wLCAweDJDLCAmaW5mby0+c2VyaWFsX25vKTsKLQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKQogCQlyZXR1cm4gcmVzdWx0OwotCX0KIAogCS8qIEdldCB0aGUgaGFyZHdhcmUgcmV2aXNpb24gKi8KIAlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2X3AsIDB4MDgsICZpbmZvLT5od19yZXZpc2lvbik7Ci0JaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9CiAKIAkvKiBHZXQgdGhlIHZlbmRvciBpZCAqLwogCWluZm8tPnZlbmRvcl9pZCA9IHBjaV9kZXZfcC0+dmVuZG9yOwpAQCAtNTk4LDE0ICs1OTYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2FvX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaW5pdF9hb19jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9hb19jb250ZXh0KClcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IHRoaXNib2FyZC0+YW8uY291bnQ7IGkrKykgewotCQkvL3NwaW5fbG9ja19pbml0KCZpbmZvLT5hb19jb250ZXh0W2ldLnVzZV9sb2NrKTsKKwkJLyogc3Bpbl9sb2NrX2luaXQoJmluZm8tPmFvX2NvbnRleHRbaV0udXNlX2xvY2spOyAqLwogCQlpbmZvLT5hb19jb250ZXh0W2ldLmlycSA9IGluZm8tPmlycTsKIAogCQlzd2l0Y2ggKGkpIHsKQEAgLTY4MSw3ICs2NzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGluaXRfYWlfY29udGV4dChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpbml0X2FpX2NvbnRleHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAogCUNBTExfUERFQlVHKCJJbiBpbml0X2FpX2NvbnRleHQoKVxuIik7CkBAIC03MTUsNyArNzEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2Rpb19jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGluaXRfZGlvX2NvbnRleHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAogCUNBTExfUERFQlVHKCJJbiBpbml0X2Rpb19jb250ZXh0KClcbiIpOwpAQCAtNzM0LDcgKzczMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9jbnRfY29udGV4dChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpbml0X2NudF9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9jbnRfY29udGV4dCgpXG4iKTsKQEAgLTc1NSw3ICs3NTMsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnhpbGlueF9maXJtOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgeGlsaW54X2Rvd25sb2FkKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHhpbGlueF9kb3dubG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXUzMiB2YWx1ZSA9IDA7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CkBAIC03ODIsNyArNzgwLDcgQEAKIAogCS8qIFdhaXQgdW50aWwgL0lOSVQgcGluIGlzIHNldCAqLwogCXVkZWxheSgyMCk7Ci0JaWYgKCFpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKSAmIDB4MjApIHsKKwlpZiAoIShpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKSAmIDB4MjApKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJImNvbWVkaSVkOiBtZTQwMDA6IHhpbGlueF9kb3dubG9hZCgpOiBDYW4ndCBpbml0IFhpbGlueFxuIiwKIAkJCWRldi0+bWlub3IpOwpAQCAtODM3LDcgKzgzNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVzZXRfYm9hcmQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgcmVzZXRfYm9hcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGljcjsKIApAQCAtODk1LDE2ICs4OTMsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IG1lNDAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2RldGFjaCgpXG4iKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5wY2lfZGV2X3ApIHsKIAkJCXJlc2V0X2JvYXJkKGRldik7Ci0JCQlpZiAoaW5mby0+cGx4X3JlZ2Jhc2UpIHsKKwkJCWlmIChpbmZvLT5wbHhfcmVnYmFzZSkKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoaW5mby0+cGNpX2Rldl9wKTsKLQkJCX0KIAkJCXBjaV9kZXZfcHV0KGluZm8tPnBjaV9kZXZfcCk7CiAJCX0KIAl9CkBAIC05MTYsOCArOTEzLDggQEAKICAgQW5hbG9nIGlucHV0IHNlY3Rpb24KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBtZTQwMDBfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHN1YmRldmljZSwgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0xMDQwLDcgKzEwMzcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IG1lNDAwMF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTEwNTcsOCArMTA1NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlfY2hlY2tfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgYXJlZjsKIAlpbnQgaTsKQEAgLTExMzgsOSArMTEzNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlfcm91bmRfY21kX2FyZ3MoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kLAorc3RhdGljIGludCBhaV9yb3VuZF9jbWRfYXJncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQsCiAJdW5zaWduZWQgaW50ICppbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCAqc2Nhbl90aWNrcywgdW5zaWduZWQgaW50ICpjaGFuX3RpY2tzKQogewpAQCAtMTE2Myw5ICsxMTYwLDggQEAKIAkJcmVzdCA9IChjbWQtPnN0YXJ0X2FyZyAqIDMzKSAlIDEwMDA7CiAKIAkJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX05FQVJFU1QpIHsKLQkJCWlmIChyZXN0ID4gMzMpIHsKKwkJCWlmIChyZXN0ID4gMzMpCiAJCQkJKCppbml0X3RpY2tzKSsrOwotCQkJfQogCQl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX1VQKSB7CiAJCQlpZiAocmVzdCkKIAkJCQkoKmluaXRfdGlja3MpKys7CkBAIC0xMTc3LDkgKzExNzMsOCBAQAogCQlyZXN0ID0gKGNtZC0+c2Nhbl9iZWdpbl9hcmcgKiAzMykgJSAxMDAwOwogCiAJCWlmIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9ORUFSRVNUKSB7Ci0JCQlpZiAocmVzdCA+IDMzKSB7CisJCQlpZiAocmVzdCA+IDMzKQogCQkJCSgqc2Nhbl90aWNrcykrKzsKLQkJCX0KIAkJfSBlbHNlIGlmIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9VUCkgewogCQkJaWYgKHJlc3QpCiAJCQkJKCpzY2FuX3RpY2tzKSsrOwpAQCAtMTE5MSw5ICsxMTg2LDggQEAKIAkJcmVzdCA9IChjbWQtPmNvbnZlcnRfYXJnICogMzMpICUgMTAwMDsKIAogCQlpZiAoY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTkVBUkVTVCkgewotCQkJaWYgKHJlc3QgPiAzMykgeworCQkJaWYgKHJlc3QgPiAzMykKIAkJCQkoKmNoYW5fdGlja3MpKys7Ci0JCQl9CiAJCX0gZWxzZSBpZiAoY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfVVApIHsKIAkJCWlmIChyZXN0KQogCQkJCSgqY2hhbl90aWNrcykrKzsKQEAgLTEyMDcsNyArMTIwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFpX3dyaXRlX3RpbWVyKGNvbWVkaV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgdm9pZCBhaV93cml0ZV90aW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCBzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgY2hhbl90aWNrcykKIHsKQEAgLTEyMjgsOSArMTIyMiw5IEBACiAJbWU0MDAwX291dGwoZGV2LCBjaGFuX3RpY2tzIC0gMSwgaW5mby0+YWlfY29udGV4dC5jaGFuX3RpbWVyX3JlZyk7CiB9CiAKLXN0YXRpYyBpbnQgYWlfcHJlcGFyZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9jbWQgKiBjbWQsCitzdGF0aWMgaW50IGFpX3ByZXBhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCBzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgY2hhbl90aWNrcykKIHsKQEAgLTEyOTcsOCArMTI5MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlfd3JpdGVfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgYWlfd3JpdGVfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgZW50cnk7CiAJdW5zaWduZWQgaW50IGNoYW47CkBAIC0xMzM3LDEzICsxMzMxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzID0gMDsKIAl1bnNpZ25lZCBpbnQgc2Nhbl90aWNrcyA9IDA7CiAJdW5zaWduZWQgaW50IGNoYW5fdGlja3MgPSAwOwotCWNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAogCUNBTExfUERFQlVHKCJJbiBtZTQwMDBfYWlfZG9fY21kKClcbiIpOwogCkBAIC0xMzgxLDggKzEzNzUsOCBAQAogICogLSBpbnZhbGlkIGNoYW5saXN0CiAgKiBTbyBJIHRyaWVkIHRvIGFkb3B0IHRoaXMgc2NoZW1lLgogICovCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWRfdGVzdChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzOwpAQCAtMTUwMyw5ICsxNDk3LDggQEAKIAkJY21kLT5zdG9wX3NyYyA9IFRSSUdfTk9ORTsKIAkJZXJyKys7CiAJfQotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gMTsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDIuIENoZWNrIGZvciB0cmlnZ2VyIHNvdXJjZSBjb25mbGljdHMuCkBAIC0xNTUzLDkgKzE1NDYsOCBAQAogCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfTk9ORTsKIAkJZXJyKys7CiAJfQotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gMjsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDMuIENoZWNrIGlmIGFyZ3VtZW50cyBhcmUgZ2VuZXJhbGx5IHZhbGlkLgpAQCAtMTU4OCw5ICsxNTgwLDkgQEAKIAkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CiAJCWVycisrOwogCX0KLQlpZiAoZXJyKSB7CisKKwlpZiAoZXJyKQogCQlyZXR1cm4gMzsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDQuIENoZWNrIGZvciBhcmd1bWVudCBjb25mbGljdHMuCkBAIC0xNjA0LDIxICsxNTk2LDIxIEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoc2Nhbl90aWNrcyA8PSBjbWQtPmNoYW5saXN0X2xlbiAqIGNoYW5fdGlja3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzY2FuIGVuZCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvLyBBdCBsZWFzdCBvbmUgdGljayBtb3JlCisJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvKiAgQXQgbGVhc3Qgb25lIHRpY2sgbW9yZSAqLwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XICYmCkBAIC0xNjMwLDE0ICsxNjIyLDE0IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKQEAgLTE2NDksMjEgKzE2NDEsMjEgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChzY2FuX3RpY2tzIDw9IGNtZC0+Y2hhbmxpc3RfbGVuICogY2hhbl90aWNrcykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CS8vIEF0IGxlYXN0IG9uZSB0aWNrIG1vcmUKKwkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CS8qICBBdCBsZWFzdCBvbmUgdGljayBtb3JlICovCiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKQEAgLTE2NzUsMTQgKzE2NjcsMTQgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJfSBlbHNlIGlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJgpAQCAtMTY5NCwxNCArMTY4NiwxNCBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCkBAIC0xNzEzLDcgKzE3MDUsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCX0KQEAgLTE3MzUsOSArMTcyNyw5IEBACiAJCQllcnIrKzsKIAkJfQogCX0KLQlpZiAoZXJyKSB7CisKKwlpZiAoZXJyKQogCQlyZXR1cm4gNDsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDUuIENoZWNrIHRoZSBjaGFubmVsIGxpc3QuCkBAIC0xNzUxLDkgKzE3NDMsOSBAQAogc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1NfQVJHKQogewogCXVuc2lnbmVkIGludCB0bXA7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2lkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7Ci0JbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dCA9ICZpbmZvLT5haV9jb250ZXh0OworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0ID0gJmluZm8tPmFpX2NvbnRleHQ7CiAJaW50IGk7CiAJaW50IGMgPSAwOwogCWxvbmcgbHZhbDsKQEAgLTE5MTEsOCArMTkwMyw4IEBACiAgIEFuYWxvZyBvdXRwdXQgc2VjdGlvbgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0xOTY5LDggKzE5NjEsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApAQCAtMTk5MCwxNiArMTk4MiwxNiBAQAogICBEaWdpdGFsIEkvTyBzZWN0aW9uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJQ0FMTF9QREVCVUcoIkluIG1lNDAwMF9kaW9faW5zbl9iaXRzKClcbiIpOwogCiAJLyogTGVuZ3RoIG9mIGRhdGEgbXVzdCBiZSAyIChtYXNrIGFuZCBuZXcgZGF0YSwgc2VlIGJlbG93KSAqLwotCWlmIChpbnNuLT5uID09IDApIHsKKwlpZiAoaW5zbi0+biA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CisKIAlpZiAoaW5zbi0+biAhPSAyKSB7CiAJCXByaW50aygiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2Rpb19pbnNuX2JpdHMoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNDEsOCArMjAzMyw4IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMjEzNSw3ICsyMTI3LDcgQEAKICAgQ291bnRlciBzZWN0aW9uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgY250X3Jlc2V0KGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQorc3RhdGljIGludCBjbnRfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gY250X3Jlc2V0KClcbiIpOwpAQCAtMjE2Niw3ICsyMTU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbnRfY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorc3RhdGljIGludCBjbnRfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAogCXVuc2lnbmVkIGludCBtb2RlKQogewogCWludCB0bXAgPSAwOwpAQCAtMjIyMyw4ICsyMjE1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfY250X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJaW50IGVycjsKQEAgLTIyNjYsMTcgKzIyNTgsMTcgQEAKIAlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAl1bnNpZ25lZCBzaG9ydCB0bXA7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2NudF9pbnNuX3JlYWQoKVxuIik7CiAKLQlpZiAoaW5zbi0+biA9PSAwKSB7CisJaWYgKGluc24tPm4gPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJaWYgKGluc24tPm4gPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9yZWFkKCk6IEludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoICVkXG4iLApAQCAtMjMxMyw4ICsyMzA1LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCXVuc2lnbmVkIHNob3J0IHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuaAppbmRleCBmMTJiODg3Li43MzNiMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5oCkBAIC0yOCwzNyArMjgsMzcgQEAKICAgRGVidWcgc2VjdGlvbgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jdW5kZWYgTUU0MDAwX0NBTExfREVCVUcJLy8gRGVidWcgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKLSN1bmRlZiBNRTQwMDBfUE9SVF9ERUJVRwkvLyBEZWJ1ZyBwb3J0IGFjY2VzcwotI3VuZGVmIE1FNDAwMF9JU1JfREVCVUcJCS8vIERlYnVnIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0jdW5kZWYgTUU0MDAwX0RFQlVHCQkvLyBHZW5lcmFsIHB1cnBvc2UgZGVidWcgbWFzc2VnZXMKKyN1bmRlZiBNRTQwMDBfQ0FMTF9ERUJVRwkvKiAgRGVidWcgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQgKi8KKyN1bmRlZiBNRTQwMDBfUE9SVF9ERUJVRwkvKiAgRGVidWcgcG9ydCBhY2Nlc3MgKi8KKyN1bmRlZiBNRTQwMDBfSVNSX0RFQlVHCQkvKiAgRGVidWcgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKyN1bmRlZiBNRTQwMDBfREVCVUcJCS8qICBHZW5lcmFsIHB1cnBvc2UgZGVidWcgbWFzc2VnZXMgKi8KIAogI2lmZGVmIE1FNDAwMF9DQUxMX0RFQlVHCiAjdW5kZWYgQ0FMTF9QREVCVUcKICNkZWZpbmUgQ0FMTF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJjb21lZGklZDogbWU0MDAwOiAiIGZtdCwgZGV2LT5taW5vciwgIyNhcmdzKQogI2Vsc2UKLSMgZGVmaW5lIENBTExfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjIGRlZmluZSBDQUxMX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8qICBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcgKi8KICNlbmRpZgogCiAjaWZkZWYgTUU0MDAwX1BPUlRfREVCVUcKICN1bmRlZiBQT1JUX1BERUJVRwogI2RlZmluZSBQT1JUX1BERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHImNvbWVkaSVkOiBtZTQwMDA6ICIgZm10LCBkZXYtPm1pbm9yLCAgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKQkvKiAgbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nICovCiAjZW5kaWYKIAogI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKICN1bmRlZiBJU1JfUERFQlVHCiAjZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJjb21lZGklZDogbWU0MDAwOiAiIGZtdCwgZGV2LT5taW5vciwgICMjYXJncykKICNlbHNlCi0jZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNkZWZpbmUgSVNSX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8qICBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcgKi8KICNlbmRpZgogCiAjaWZkZWYgTUU0MDAwX0RFQlVHCiAjdW5kZWYgUERFQlVHCiAjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHImNvbWVkaSVkOiBtZTQwMDA6ICIgZm10LCBkZXYtPm1pbm9yLCAgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pCS8qICBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcgKi8KICNlbmRpZgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC02Nyw3OCArNjcsNzggQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01FSUxIQVVTIDB4MTQwMgogCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjUwCTB4NDY1MAkvLyBMb3cgQ29zdCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjUwCTB4NDY1MAkvKiAgTG93IENvc3QgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwCTB4NDY2MAkvLyBTdGFuZGFyZCB2ZXJzaW9uCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSQkweDQ2NjEJLy8gSXNvbGF0ZWQgdmVyc2lvbgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MFMJMHg0NjYyCS8vIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBJUwkweDQ2NjMJLy8gSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MAkweDQ2NjAJLyogIFN0YW5kYXJkIHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBJCTB4NDY2MQkvKiAgSXNvbGF0ZWQgdmVyc2lvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MFMJMHg0NjYyCS8qICBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSVMJMHg0NjYzCS8qICBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkICovCiAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzAJMHg0NjcwCS8vIFN0YW5kYXJkIHZlcnNpb24KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJCTB4NDY3MQkvLyBJc29sYXRlZCB2ZXJzaW9uCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwUwkweDQ2NzIJLy8gU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MElTCTB4NDY3MwkvLyBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwCTB4NDY3MAkvKiAgU3RhbmRhcmQgdmVyc2lvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MEkJMHg0NjcxCS8qICBJc29sYXRlZCB2ZXJzaW9uICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwUwkweDQ2NzIJLyogIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJUwkweDQ2NzMJLyogIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQgKi8KIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MAkweDQ2ODAJLy8gU3RhbmRhcmQgdmVyc2lvbgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MEkJMHg0NjgxCS8vIElzb2xhdGVkIHZlcnNpb24KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBTCTB4NDY4MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSVMJMHg0NjgzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODAJMHg0NjgwCS8qICBTdGFuZGFyZCB2ZXJzaW9uICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSQkweDQ2ODEJLyogIElzb2xhdGVkIHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBTCTB4NDY4MgkvKiAgU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MElTCTB4NDY4MwkvKiAgSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIE1FLTQwMDAgYmFzZSByZWdpc3RlciBvZmZzZXRzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgTUU0MDAwX0FPXzAwX0NUUkxfUkVHCQkJMHgwMAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAwX1NUQVRVU19SRUcJCQkweDA0CS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQU9fMDBfRklGT19SRUcJCQkweDA4CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRwkJCTB4MEMJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMF9USU1FUl9SRUcJCQkweDEwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcJCQkweDAwCS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAwX1NUQVRVU19SRUcJCQkweDA0CS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAwX0ZJRk9fUkVHCQkJMHgwOAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHCQkJMHgwQwkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMF9USU1FUl9SRUcJCQkweDEwCS8qICBfL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fMDFfQ1RSTF9SRUcJCQkweDE4CS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRwkJCTB4MUMJLy8gUi9fCi0jZGVmaW5lIE1FNDAwMF9BT18wMV9GSUZPX1JFRwkJCTB4MjAJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMV9TSU5HTEVfUkVHCQkJMHgyNAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRwkJCTB4MjgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMV9DVFJMX1JFRwkJCTB4MTgJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRwkJCTB4MUMJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDFfRklGT19SRUcJCQkweDIwCS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUcJCQkweDI0CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRwkJCTB4MjgJLyogIF8vVyAqLwogCi0jZGVmaW5lIE1FNDAwMF9BT18wMl9DVFJMX1JFRwkJCTB4MzAJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHCQkJMHgzNAkvLyBSL18KLSNkZWZpbmUgTUU0MDAwX0FPXzAyX0ZJRk9fUkVHCQkJMHgzOAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUcJCQkweDNDCS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDJfVElNRVJfUkVHCQkJMHg0MAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX0NUUkxfUkVHCQkJMHgzMAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHCQkJMHgzNAkvKiAgUi9fICovCisjZGVmaW5lIE1FNDAwMF9BT18wMl9GSUZPX1JFRwkJCTB4MzgJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDJfU0lOR0xFX1JFRwkJCTB4M0MJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDJfVElNRVJfUkVHCQkJMHg0MAkvKiAgXy9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0FPXzAzX0NUUkxfUkVHCQkJMHg0OAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAzX1NUQVRVU19SRUcJCQkweDRDCS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQU9fMDNfRklGT19SRUcJCQkweDUwCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRwkJCTB4NTQJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wM19USU1FUl9SRUcJCQkweDU4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDNfQ1RSTF9SRUcJCQkweDQ4CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAzX1NUQVRVU19SRUcJCQkweDRDCS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAzX0ZJRk9fUkVHCQkJMHg1MAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHCQkJMHg1NAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wM19USU1FUl9SRUcJCQkweDU4CS8qICBfL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9SRUcJCQkweDc0CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX1JFRwkJCTB4NzQJLy8gUi9fCi0jZGVmaW5lIE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfUkVHCQkweDc4CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfREFUQV9SRUcJCQkweDdDCS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9USU1FUl9SRUcJCTB4ODAJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9DSEFOX1BSRV9USU1FUl9SRUcJCTB4ODQJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0xPV19SRUcJCTB4ODgJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0hJR0hfUkVHCQkweDhDCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfTE9XX1JFRwkweDkwCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfSElHSF9SRUcJMHg5NAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FJX1NUQVJUX1JFRwkJCTB4OTgJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX1JFRwkJCTB4NzQJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX1JFRwkJCTB4NzQJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRwkJMHg3OAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9EQVRBX1JFRwkJCTB4N0MJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9USU1FUl9SRUcJCTB4ODAJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHCQkweDg0CS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fVElNRVJfTE9XX1JFRwkJMHg4OAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0hJR0hfUkVHCQkweDhDCS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0xPV19SRUcJMHg5MAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9ISUdIX1JFRwkweDk0CS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVJUX1JFRwkJCTB4OTgJLyogIFIvXyAqLwogCi0jZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX1JFRwkJCTB4OUMJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX1JFRwkJCTB4OUMJLyogIFIvXyAqLwogCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8wX1JFRwkJCTB4QTAJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8xX1JFRwkJCTB4QTQJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8yX1JFRwkJCTB4QTgJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8zX1JFRwkJCTB4QUMJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fRElSX1JFRwkJCTB4QjAJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8wX1JFRwkJCTB4QTAJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMV9SRUcJCQkweEE0CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzJfUkVHCQkJMHhBOAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8zX1JFRwkJCTB4QUMJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfRElPX0RJUl9SRUcJCQkweEIwCS8qICBSL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWAkJCTB4QjQJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYCQkJMHhCNAkvKiAgUi9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX1JFRwkJCTB4QjgJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9SRUcJCQkweEI4CS8qICBSL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1JFRwkJMHhCQwkvLyAtL1cKKyNkZWZpbmUgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcJCTB4QkMJLyogIC0vVyAqLwogCi0jZGVmaW5lIE1FNDAwMF9BSV9TQU1QTEVfQ09VTlRFUl9SRUcJCTB4QzAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TQU1QTEVfQ09VTlRFUl9SRUcJCTB4QzAJLyogIF8vVyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFZhbHVlIHRvIGFkanVzdCBEZW11eApAQCAtMTU5LDIxICsxNTksMjEgQEAKICAgUExYIGJhc2UgcmVnaXN0ZXIgb2Zmc2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIFBMWF9JTlRDU1IJMHg0QwkvLyBJbnRlcnJ1cHQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyCi0jZGVmaW5lIFBMWF9JQ1IJCTB4NTAJLy8gSW5pdGlhbGl6YXRpb24gY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBQTFhfSU5UQ1NSCTB4NEMJLyogIEludGVycnVwdCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUExYX0lDUgkJMHg1MAkvKiAgSW5pdGlhbGl6YXRpb24gY29udHJvbCByZWdpc3RlciAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEJpdHMgZm9yIHRoZSBQTFhfSUNTUiByZWdpc3RlcgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9FTiAgICAgICAgICAgICAweDAxCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgZW5hYmxlZCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfUE9MICAgICAgICAgICAgMHgwMgkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9TVEFURSAgICAgICAgICAweDA0CS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgYWN0aXZlIChyL18pCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9FTiAgICAgICAgICAgICAweDA4CS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgZW5hYmxlZCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfUE9MICAgICAgICAgICAgMHgxMAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9TVEFURSAgICAgICAgICAweDIwCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgYWN0aXZlICAoci9fKQotI2RlZmluZSBQTFhfSU5UQ1NSX1BDSV9JTlRfRU4gICAgICAgICAgICAgICAgMHg0MAkvLyBJZiBzZXQsIFBDSSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX1NPRlRfSU5UICAgICAgICAgICAgICAgICAgMHg4MAkvLyBJZiBzZXQsIGEgc29mdHdhcmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfRU4gICAgICAgICAgICAgMHgwMQkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBlbmFibGVkIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9QT0wgICAgICAgICAgICAweDAyCS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9TVEFURSAgICAgICAgICAweDA0CS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIGlzIGFjdGl2ZSAoci9fKSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfRU4gICAgICAgICAgICAgMHgwOAkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBlbmFibGVkIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9QT0wgICAgICAgICAgICAweDEwCS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9TVEFURSAgICAgICAgICAweDIwCS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIGlzIGFjdGl2ZSAgKHIvXykgKi8KKyNkZWZpbmUgUExYX0lOVENTUl9QQ0lfSU5UX0VOICAgICAgICAgICAgICAgIDB4NDAJLyogIElmIHNldCwgUENJIGludGVycnVwdCBpcyBlbmFibGVkIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfU09GVF9JTlQgICAgICAgICAgICAgICAgICAweDgwCS8qICBJZiBzZXQsIGEgc29mdHdhcmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCAoci93KSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEJpdHMgZm9yIHRoZSBQTFhfSUNSIHJlZ2lzdGVyCkBAIC0yOTMsNDUgKzI5Myw0NSBAQAogICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19pbmZvIHsKK3N0cnVjdCBtZTQwMDBfYW9faW5mbyB7CiAJaW50IGNvdW50OwogCWludCBmaWZvX2NvdW50OwotfSBtZTQwMDBfYW9faW5mb190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX2luZm8geworc3RydWN0IG1lNDAwMF9haV9pbmZvIHsKIAlpbnQgY291bnQ7CiAJaW50IHNoX2NvdW50OwogCWludCBkaWZmX2NvdW50OwogCWludCBleF90cmlnX2FuYWxvZzsKLX0gbWU0MDAwX2FpX2luZm9fdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9kaW9faW5mbyB7CitzdHJ1Y3QgbWU0MDAwX2Rpb19pbmZvIHsKIAlpbnQgY291bnQ7Ci19IG1lNDAwMF9kaW9faW5mb190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NudF9pbmZvIHsKK3N0cnVjdCBtZTQwMDBfY250X2luZm8gewogCWludCBjb3VudDsKLX0gbWU0MDAwX2NudF9pbmZvX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfYm9hcmQgeworc3RydWN0IG1lNDAwMF9ib2FyZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7Ci0JbWU0MDAwX2FvX2luZm9fdCBhbzsKLQltZTQwMDBfYWlfaW5mb190IGFpOwotCW1lNDAwMF9kaW9faW5mb190IGRpbzsKLQltZTQwMDBfY250X2luZm9fdCBjbnQ7Ci19IG1lNDAwMF9ib2FyZF90OworCXN0cnVjdCBtZTQwMDBfYW9faW5mbyBhbzsKKwlzdHJ1Y3QgbWU0MDAwX2FpX2luZm8gYWk7CisJc3RydWN0IG1lNDAwMF9kaW9faW5mbyBkaW87CisJc3RydWN0IG1lNDAwMF9jbnRfaW5mbyBjbnQ7Cit9OwogCi0jZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IG1lNDAwMF9ib2FyZF90ICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBtZTQwMDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBHbG9iYWwgYm9hcmQgYW5kIHN1YmRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0IHsKK3N0cnVjdCBtZTQwMDBfYW9fY29udGV4dCB7CiAJaW50IGlycTsKIAotCXVuc2lnbmVkIGxvbmcgbWlycm9yOwkvLyBTdG9yZSB0aGUgbGFzdCB3cml0dGVuIHZhbHVlCisJdW5zaWduZWQgbG9uZyBtaXJyb3I7CS8qICBTdG9yZSB0aGUgbGFzdCB3cml0dGVuIHZhbHVlICovCiAKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzX3JlZzsKQEAgLTM0MCw5ICszNDAsOSBAQAogCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CiAJdW5zaWduZWQgbG9uZyBwcmVsb2FkX3JlZzsKLX0gbWU0MDAwX2FvX2NvbnRleHRfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IHsKK3N0cnVjdCBtZTQwMDBfYWlfY29udGV4dCB7CiAJaW50IGlycTsKIAogCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CkBAIC0zNTgsNTEgKzM1OCw1MSBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcmVnOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfY291bnRlcl9yZWc7Ci19IG1lNDAwMF9haV9jb250ZXh0X3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgeworc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCB7CiAJdW5zaWduZWQgbG9uZyBkaXJfcmVnOwogCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CiAJdW5zaWduZWQgbG9uZyBwb3J0XzBfcmVnOwogCXVuc2lnbmVkIGxvbmcgcG9ydF8xX3JlZzsKIAl1bnNpZ25lZCBsb25nIHBvcnRfMl9yZWc7CiAJdW5zaWduZWQgbG9uZyBwb3J0XzNfcmVnOwotfSBtZTQwMDBfZGlvX2NvbnRleHRfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCB7CitzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOwogCXVuc2lnbmVkIGxvbmcgY291bnRlcl8wX3JlZzsKIAl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMV9yZWc7CiAJdW5zaWduZWQgbG9uZyBjb3VudGVyXzJfcmVnOwotfSBtZTQwMDBfY250X2NvbnRleHRfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlOwkvLyBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MKLQl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMAotCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBjaXJjdWl0Ci0JdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyB0byBzZXQgdGhlIHByb2dyYW0gcGluIGZvciB0aGUgeGlsaW54CitzdHJ1Y3QgbWU0MDAwX2luZm8geworCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2U7CS8qICBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlOwkvKiAgQmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2U7CS8qICBCYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIGNpcmN1aXQgKi8KKwl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZTsJLyogIEJhc2UgYWRkcmVzcyB0byBzZXQgdGhlIHByb2dyYW0gcGluIGZvciB0aGUgeGlsaW54ICovCiAKLQl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8vIFBMWCByZWdpc3RlciBzZXQgc3BhY2UKLQl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlX3NpemU7CS8vIE1FNDAwMCByZWdpc3RlciBzZXQgc3BhY2UKLQl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2Vfc2l6ZTsJLy8gVGltZXIgY2lyY3VpdCByZWdpc3RlciBzZXQgc3BhY2UKLQl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZV9zaXplOwkvLyBTaXplIG9mIHByb2dyYW0gYmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8qICBQTFggcmVnaXN0ZXIgc2V0IHNwYWNlICovCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZV9zaXplOwkvKiAgTUU0MDAwIHJlZ2lzdGVyIHNldCBzcGFjZSAqLworCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnYmFzZV9zaXplOwkvKiAgVGltZXIgY2lyY3VpdCByZWdpc3RlciBzZXQgc3BhY2UgKi8KKwl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZV9zaXplOwkvKiAgU2l6ZSBvZiBwcm9ncmFtIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwICovCiAKLQl1bnNpZ25lZCBpbnQgc2VyaWFsX25vOwkvLyBTZXJpYWwgbnVtYmVyIG9mIHRoZSBib2FyZAotCXVuc2lnbmVkIGNoYXIgaHdfcmV2aXNpb247CS8vIEhhcmR3YXJlIHJldmlzaW9uIG9mIHRoZSBib2FyZAotCXVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZDsJLy8gTWVpbGhhdXMgdmVuZG9yIGlkCi0JdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwkvLyBEZXZpY2UgaWQKKwl1bnNpZ25lZCBpbnQgc2VyaWFsX25vOwkvKiAgU2VyaWFsIG51bWJlciBvZiB0aGUgYm9hcmQgKi8KKwl1bnNpZ25lZCBjaGFyIGh3X3JldmlzaW9uOwkvKiAgSGFyZHdhcmUgcmV2aXNpb24gb2YgdGhlIGJvYXJkICovCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwkvKiAgTWVpbGhhdXMgdmVuZG9yIGlkICovCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwkvKiAgRGV2aWNlIGlkICovCiAKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wOwkvLyBHZW5lcmFsIFBDSSBpbmZvcm1hdGlvbgorCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3A7CS8qICBHZW5lcmFsIFBDSSBpbmZvcm1hdGlvbiAqLwogCi0JdW5zaWduZWQgaW50IGlycTsJLy8gSVJRIGFzc2lnbmVkIGZyb20gdGhlIFBDSSBCSU9TCisJdW5zaWduZWQgaW50IGlycTsJLyogIElSUSBhc3NpZ25lZCBmcm9tIHRoZSBQQ0kgQklPUyAqLwogCi0Jc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IGFpX2NvbnRleHQ7CS8vIEFuYWxvZyBpbnB1dCAgc3BlY2lmaWMgY29udGV4dAotCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCBhb19jb250ZXh0WzRdOwkvLyBWZWN0b3Igd2l0aCBhbmFsb2cgb3V0cHV0IHNwZWNpZmljIGNvbnRleHQKLQlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0IGRpb19jb250ZXh0OwkvLyBEaWdpdGFsIEkvTyBzcGVjaWZpYyBjb250ZXh0Ci0Jc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCBjbnRfY29udGV4dDsJLy8gQ291bnRlciBzcGVjaWZpYyBjb250ZXh0Ci19IG1lNDAwMF9pbmZvX3Q7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IGFpX2NvbnRleHQ7CS8qICBBbmFsb2cgaW5wdXQgIHNwZWNpZmljIGNvbnRleHQgKi8KKwlzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgYW9fY29udGV4dFs0XTsJLyogIFZlY3RvciB3aXRoIGFuYWxvZyBvdXRwdXQgc3BlY2lmaWMgY29udGV4dCAqLworCXN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgZGlvX2NvbnRleHQ7CS8qICBEaWdpdGFsIEkvTyBzcGVjaWZpYyBjb250ZXh0ICovCisJc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCBjbnRfY29udGV4dDsJLyogIENvdW50ZXIgc3BlY2lmaWMgY29udGV4dCAqLworfTsKIAotI2RlZmluZSBpbmZvCSgobWU0MDAwX2luZm9fdCAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgaW5mbwkoKHN0cnVjdCBtZTQwMDBfaW5mbyAqKWRldi0+cHJpdmF0ZSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEZWZpbmVzIGZvciBhbmFsb2cgaW5wdXQKQEAgLTQxMiw3ICs0MTIsNyBAQAogI2RlZmluZSBNRTQwMDBfQUlfRklGT19DT1VOVAkJCTIwNDgKIAogI2RlZmluZSBNRTQwMDBfQUlfTUlOX1RJQ0tTCQkJNjYKLSNkZWZpbmUgTUU0MDAwX0FJX01JTl9TQU1QTEVfVElNRQkJMjAwMAkvLyBNaW5pbXVtIHNhbXBsZSB0aW1lIFtuc10KKyNkZWZpbmUgTUU0MDAwX0FJX01JTl9TQU1QTEVfVElNRQkJMjAwMAkvKiAgTWluaW11bSBzYW1wbGUgdGltZSBbbnNdICovCiAjZGVmaW5lIE1FNDAwMF9BSV9CQVNFX0ZSRVFVRU5DWQkJKHVuc2lnbmVkIGludCkgMzNFNgogCiAvKiBDaGFubmVsIGxpc3QgZGVmaW5lcyBhbmQgbWFza3MgKi8KQEAgLTQzNiwxMSArNDM2LDExIEBACiAjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8xICAweDQwCiAjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8yICAweDgwCiAKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzAgICAgIDB4MDAJLy8gQ2hhbmdlIHN0YXRlIGlmIHplcm8gY3Jvc3NpbmcKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzEgICAgIDB4MDIJLy8gUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdAotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMiAgICAgMHgwNAkvLyBBc3ltbWV0cmljYWwgZGl2aWRlcgotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMyAgICAgMHgwNgkvLyBTeW1tZXRyaWNhbCBkaXZpZGVyCi0jZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV80ICAgICAweDA4CS8vIENvdW50ZXIgc3RhcnQgYnkgc29mdHdhcmUgdHJpZ2dlcgotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNSAgICAgMHgwQQkvLyBDb3VudGVyIHN0YXJ0IGJ5IGhhcmR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzAgICAgIDB4MDAJLyogIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nICovCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8xICAgICAweDAyCS8qICBSZXRyaWdnZXJhYmxlIE9uZS1TaG90ICovCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8yICAgICAweDA0CS8qICBBc3ltbWV0cmljYWwgZGl2aWRlciAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMyAgICAgMHgwNgkvKiAgU3ltbWV0cmljYWwgZGl2aWRlciAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNCAgICAgMHgwOAkvKiAgQ291bnRlciBzdGFydCBieSBzb2Z0d2FyZSB0cmlnZ2VyICovCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV81ICAgICAweDBBCS8qICBDb3VudGVyIHN0YXJ0IGJ5IGhhcmR3YXJlIHRyaWdnZXIgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggNmFjY2VjMi4uMGYwMjNkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKQEAgLTE0NCwxMCArMTQ0LDEwIEBACiAjZGVmaW5lIE1FX0NPVU5URVJfVkFMVUVfQgkJMHgwMDIyCS8qIFIgfCAtICovCiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgbWVfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotc3RhdGljIGludCBtZV9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbWVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IG1lX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgbWUyMDAwX2FpX3JhbmdlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIG1lMjAwMF9haV9yYW5nZSA9IHsKIAk4LAogCXsKIAkJQklQX1JBTkdFKDEwKSwKQEAgLTE2MSw3ICsxNjEsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lMjYwMF9haV9yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTI2MDBfYWlfcmFuZ2UgPSB7CiAJOCwKIAl7CiAJCQlCSVBfUkFOR0UoMTApLApAQCAtMTc1LDcgKzE3NSw3IEBACiAJCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lMjYwMF9hb19yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTI2MDBfYW9fcmFuZ2UgPSB7CiAJMywKIAl7CiAJCQlCSVBfUkFOR0UoMTApLApAQCAtMjAxLDExICsyMDEsMTEgQEAKIAlpbnQgYW9fY2hhbm5lbF9uYnI7CS8qIERBIGNvbmZpZyAqLwogCWludCBhb19yZXNvbHV0aW9uOwogCWludCBhb19yZXNvbHV0aW9uX21hc2s7Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdDsKIAlpbnQgYWlfY2hhbm5lbF9uYnI7CS8qIEFEIGNvbmZpZyAqLwogCWludCBhaV9yZXNvbHV0aW9uOwogCWludCBhaV9yZXNvbHV0aW9uX21hc2s7Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfbGlzdDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfbGlzdDsKIAlpbnQgZGlvX2NoYW5uZWxfbmJyOwkvKiBESU8gY29uZmlnICovCiB9OwogCkBAIC0yNDYsNyArMjQ2LDggQEAKIAogI2RlZmluZSBtZV9ib2FyZF9uYnIgKHNpemVvZihtZV9ib2FyZHMpL3NpemVvZihzdHJ1Y3QgbWVfYm9hcmQpKQogCi1zdGF0aWMgY29tZWRpX2RyaXZlciBtZV9kcml2ZXIgPSB7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBtZV9kcml2ZXIgPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQlNRV9EUklWRVJfTkFNRSwKICAgICAgIC5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCiAgICAgICAuYXR0YWNoID0JCW1lX2F0dGFjaCwKQEAgLTI5MCw4ICsyOTEsOCBAQAogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgaW50IG1lX2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IG1lX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBiaXRzOwogCWludCBtYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTMyNiw4ICszMjcsOCBAQAogfQogCiAvKiBEaWdpdGFsIGluc3RhbnQgaW5wdXQvb3V0cHV0cyAqLwotc3RhdGljIGludCBtZV9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IG1lX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSBkYXRhWzBdOwogCXMtPnN0YXRlICY9IH5tYXNrOwpAQCAtMzYyLDggKzM2Myw4IEBACiAgKi8KIAogLyogQW5hbG9nIGluc3RhbnQgaW5wdXQgKi8KLXN0YXRpYyBpbnQgbWVfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBtZV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZSwKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCWludCBjaGFuID0gQ1JfQ0hBTigoJmluc24tPmNoYW5zcGVjKVswXSk7CkBAIC00MzYsNyArNDM3LDcgQEAKICAqLwogCiAvKiBDYW5jZWwgYW5hbG9nIGlucHV0IGF1dG9zY2FuICovCi1zdGF0aWMgaW50IG1lX2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IG1lX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIApAQCAtNDQ4LDE0ICs0NDksMTQgQEAKIH0KIAogLyogVGVzdCBhbmFsb2cgaW5wdXQgY29tbWFuZCAqLwotc3RhdGljIGludCBtZV9haV9kb19jbWRfdGVzdChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGNvbWVkaV9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgbWVfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIEFuYWxvZyBpbnB1dCBjb21tYW5kICovCi1zdGF0aWMgaW50IG1lX2FpX2RvX2NtZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZSkKK3N0YXRpYyBpbnQgbWVfYWlfZG9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC00NjksOCArNDcwLDggQEAKICAqLwogCiAvKiBBbmFsb2cgaW5zdGFudCBvdXRwdXQgKi8KLXN0YXRpYyBpbnQgbWVfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBtZV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuOwogCWludCByYW5nOwpAQCAtNTE5LDggKzUyMCw4IEBACiB9CiAKIC8qIEFuYWxvZyBvdXRwdXQgcmVhZGJhY2sgKi8KLXN0YXRpYyBpbnQgbWVfYW9faW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgbWVfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7CiAKQEAgLTU0MSw3ICs1NDIsNyBAQAogICovCiAKIC8qIFhpbGlueCBmaXJtd2FyZSBkb3dubG9hZCBmb3IgY2FyZDogTUUtMjYwMGkgKi8KLXN0YXRpYyBpbnQgbWUyNjAwX3hpbGlueF9kb3dubG9hZChjb21lZGlfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IG1lMjYwMF94aWxpbnhfZG93bmxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgIHVuc2lnbmVkIGNoYXIgKm1lMjYwMF9maXJtd2FyZSwKIAkJCQkgIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CkBAIC02MDksNyArNjEwLDcgQEAKIH0KIAogLyogUmVzZXQgZGV2aWNlICovCi1zdGF0aWMgaW50IG1lX3Jlc2V0KGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWVfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAkvKiBSZXNldCBib2FyZCAqLwogCXdyaXRldygweDAwLCBkZXZfcHJpdmF0ZS0+bWVfcmVnYmFzZSArIE1FX0NPTlRST0xfMSk7CkBAIC02MzEsMTAgKzYzMiwxMCBAQAogICogLSBSZWdpc3RlciBQQ0kgZGV2aWNlCiAgKiAtIERlY2xhcmUgZGV2aWNlIGRyaXZlciBjYXBhYmlsaXR5CiAgKi8KLXN0YXRpYyBpbnQgbWVfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IG1lX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7Ci0JY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2U7CiAJc3RydWN0IG1lX2JvYXJkICpib2FyZDsKIAlyZXNvdXJjZV9zaXplX3QgcGx4X3JlZ2Jhc2VfdG1wOwogCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2Vfc2l6ZV90bXA7CkBAIC04MjUsNyArODI2LDcgQEAKIH0KIAogLyogRGV0YWNoICovCi1zdGF0aWMgaW50IG1lX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1lX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWlmIChkZXZfcHJpdmF0ZSkgewogCQlpZiAoZGV2X3ByaXZhdGUtPm1lX3JlZ2Jhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCmluZGV4IDljYzUyNzQuLmFlOTAxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAqLwogCi0vLyNkZWZpbmUgVVNFX0tNQUxMT0MKKy8qICNkZWZpbmUgVVNFX0tNQUxMT0MgKi8KIAogI2luY2x1ZGUgIm1pdGUuaCIKIApAQCAtNjMsNyArNjMsNyBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZV9kZXZpY2VzID0gTlVMTDsKK3N0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZV9kZXZpY2VzOwogCiAjZGVmaW5lIFRPUF9PRl9QQUdFKHgpICgoeCl8KH4oUEFHRV9NQVNLKSkpCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXByaW50aygibWl0ZTogbnVtIGNoYW5uZWxzID0gJWksIHdyaXRlIHBvc3QgZmlmbyBkZXB0aCA9ICVpLCB3aW5zID0gJWksIGlvd2lucyA9ICVpXG4iLCBtaXRlX2NzaWdyX2RtYWMoY3NpZ3JfYml0cyksIG1pdGVfY3NpZ3Jfd3BkZXAoY3NpZ3JfYml0cyksIG1pdGVfY3NpZ3Jfd2lucyhjc2lncl9iaXRzKSwgbWl0ZV9jc2lncl9pb3dpbnMoY3NpZ3JfYml0cykpOwogfQogCi11bnNpZ25lZCBtaXRlX2ZpZm9fc2l6ZShzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKiBtaXRlLCB1bnNpZ25lZCBjaGFubmVsKQordW5zaWduZWQgbWl0ZV9maWZvX3NpemUoc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCB1bnNpZ25lZCBjaGFubmVsKQogewogCXVuc2lnbmVkIGZjcl9iaXRzID0gcmVhZGwobWl0ZS0+bWl0ZV9pb19hZGRyICsKIAkJTUlURV9GQ1IoY2hhbm5lbCkpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChtaXRlLT5wY2lkZXYsIDEpOwogCW1pdGUtPmRhcV9waHlzX2FkZHIgPSBhZGRyOwogCWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4obWl0ZS0+cGNpZGV2LCAxKTsKLQkvLyBJbiBjYXNlIG9mIGEgNjYweCBib2FyZCwgREFRIHNpemUgaXMgOGsgaW5zdGVhZCBvZiA0ayAoc2VlIGFzIHNob3duIGJ5IGxzcGNpIG91dHB1dCkKKwkvKiAgSW4gY2FzZSBvZiBhIDY2MHggYm9hcmQsIERBUSBzaXplIGlzIDhrIGluc3RlYWQgb2YgNGsgKHNlZSBhcyBzaG93biBieSBsc3BjaSBvdXRwdXQpICovCiAJbWl0ZS0+ZGFxX2lvX2FkZHIgPSBpb3JlbWFwKG1pdGUtPmRhcV9waHlzX2FkZHIsIGxlbmd0aCk7CiAJaWYgKCFtaXRlLT5kYXFfaW9fYWRkcikgewogCQlwcmludGsoImZhaWxlZCB0byByZW1hcCBkYXEgaW8gbWVtb3J5IGFkZHJlc3NcbiIpOwpAQCAtMjEyLDcgKzIxMiw3IEBACiAKIHZvaWQgbWl0ZV91bnNldHVwKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSkKIHsKLQkvL3Vuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdGFydCwgbGVuZ3RoOworCS8qIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdGFydCwgbGVuZ3RoOyAqLwogCiAJaWYgKCFtaXRlKQogCQlyZXR1cm47CkBAIC0yNTcsNyArMjU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtaXRlX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMOwogCi0JLy8gc3BpbiBsb2NrIHNvIG1pdGVfcmVsZWFzZV9jaGFubmVsIGNhbiBiZSBjYWxsZWQgc2FmZWx5IGZyb20gaW50ZXJydXB0cworCS8qICBzcGluIGxvY2sgc28gbWl0ZV9yZWxlYXNlX2NoYW5uZWwgY2FuIGJlIGNhbGxlZCBzYWZlbHkgZnJvbSBpbnRlcnJ1cHRzICovCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZtaXRlLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gbWluX2NoYW5uZWw7IGkgPD0gbWF4X2NoYW5uZWw7ICsraSkgewogCQlpZiAobWl0ZS0+Y2hhbm5lbF9hbGxvY2F0ZWRbaV0gPT0gMCkgewpAQCAtMjc2LDcgKzI3Niw3IEBACiAJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlID0gbWl0ZV9jaGFuLT5taXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvLyBzcGluIGxvY2sgdG8gcHJldmVudCByYWNlcyB3aXRoIG1pdGVfcmVxdWVzdF9jaGFubmVsCisJLyogIHNwaW4gbG9jayB0byBwcmV2ZW50IHJhY2VzIHdpdGggbWl0ZV9yZXF1ZXN0X2NoYW5uZWwgKi8KIAljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJm1pdGUtPmxvY2ssIGZsYWdzKTsKIAlpZiAobWl0ZS0+Y2hhbm5lbF9hbGxvY2F0ZWRbbWl0ZV9jaGFuLT5jaGFubmVsXSkgewogCQltaXRlX2RtYV9kaXNhcm0obWl0ZV9jaGFuKTsKQEAgLTMxMiwxMiArMzEyLDEyIEBACiAJd3JpdGVsKGNob3IsIG1pdGUtPm1pdGVfaW9fYWRkciArIE1JVEVfQ0hPUihtaXRlX2NoYW4tPmNoYW5uZWwpKTsKIAltbWlvd2IoKTsKIAljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWl0ZS0+bG9jaywgZmxhZ3MpOwotLy8gICAgICBtaXRlX2RtYV90Y3IobWl0ZSwgY2hhbm5lbCk7CisvKiAgICAgICBtaXRlX2RtYV90Y3IobWl0ZSwgY2hhbm5lbCk7ICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IG1pdGVfYnVmX2NoYW5nZShzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpyaW5nLCBjb21lZGlfYXN5bmMgKiBhc3luYykKK2ludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywgc3RydWN0IGNvbWVkaV9hc3luYyAqIGFzeW5jKQogewogCXVuc2lnbmVkIGludCBuX2xpbmtzOwogCWludCBpOwpAQCAtMzMxLDkgKzMzMSw5IEBACiAJcmluZy0+ZGVzY3JpcHRvcnNfZG1hX2FkZHIgPSAwOwogCXJpbmctPm5fbGlua3MgPSAwOwogCi0JaWYgKGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSAwKSB7CisJaWYgKGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CisKIAluX2xpbmtzID0gYXN5bmMtPnByZWFsbG9jX2J1ZnN6ID4+IFBBR0VfU0hJRlQ7CiAKIAlNRFBSSU5USygicmluZy0+aHdfZGV2PSVwLCBuX2xpbmtzPTB4JTA0eFxuIiwgcmluZy0+aHdfZGV2LCBuX2xpbmtzKTsKQEAgLTM5NSw5ICszOTUsOSBAQAogCQkgICBvbiBlLXNlcmllcyBib2FyZHMuICAqLwogCQljaGNyIHw9IENIQ1JfQllURV9TV0FQX0RFVklDRSB8IENIQ1JfQllURV9TV0FQX01FTU9SWTsKIAl9Ci0JaWYgKG1pdGVfY2hhbi0+ZGlyID09IENPTUVESV9JTlBVVCkgeworCWlmIChtaXRlX2NoYW4tPmRpciA9PSBDT01FRElfSU5QVVQpCiAJCWNoY3IgfD0gQ0hDUl9ERVZfVE9fTUVNOwotCX0KKwogCXdyaXRlbChjaGNyLCBtaXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0NIQ1IobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiAKIAkvKiB0by9mcm9tIG1lbW9yeSAqLwpAQCAtNDU5LDE1ICs0NTksMTUgQEAKIAlyZXR1cm4gcmVhZGwobWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9EQVIobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiB9CiAKLXUzMiBtaXRlX2J5dGVzX2luX3RyYW5zaXQoc3RydWN0IG1pdGVfY2hhbm5lbCAqIG1pdGVfY2hhbikKK3UzMiBtaXRlX2J5dGVzX2luX3RyYW5zaXQoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKQogewogCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSA9IG1pdGVfY2hhbi0+bWl0ZTsKIAlyZXR1cm4gcmVhZGwobWl0ZS0+bWl0ZV9pb19hZGRyICsKIAkJTUlURV9GQ1IobWl0ZV9jaGFuLT5jaGFubmVsKSkgJiAweDAwMDAwMEZGOwogfQogCi0vLyByZXR1cm5zIGxvd2VyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSBkZXZpY2UgdG8gbWVtb3J5Ci11MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgbG93ZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIGRldmljZSB0byBtZW1vcnkgKi8KK3UzMiBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKIHsKIAl1MzIgZGV2aWNlX2J5dGVfY291bnQ7CiAKQEAgLTQ3NSw4ICs0NzUsOCBAQAogCXJldHVybiBkZXZpY2VfYnl0ZV9jb3VudCAtIG1pdGVfYnl0ZXNfaW5fdHJhbnNpdChtaXRlX2NoYW4pOwogfQogCi0vLyByZXR1cm5zIHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSBkZXZpY2UgdG8gbWVtb3J5Ci11MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV91YihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIGRldmljZSB0byBtZW1vcnkgKi8KK3UzMiBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X3ViKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKIHsKIAl1MzIgaW5fdHJhbnNpdF9jb3VudDsKIApAQCAtNDg0LDggKzQ4NCw4IEBACiAJcmV0dXJuIG1pdGVfZGV2aWNlX2J5dGVzX3RyYW5zZmVycmVkKG1pdGVfY2hhbikgLSBpbl90cmFuc2l0X2NvdW50OwogfQogCi0vLyByZXR1cm5zIGxvd2VyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIG1lbW9yeSBmb3IgdHJhbnNmZXIgdG8gZGV2aWNlCi11MzIgbWl0ZV9ieXRlc19yZWFkX2Zyb21fbWVtb3J5X2xiKHN0cnVjdCBtaXRlX2NoYW5uZWwgKiBtaXRlX2NoYW4pCisvKiAgcmV0dXJucyBsb3dlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBtZW1vcnkgZm9yIHRyYW5zZmVyIHRvIGRldmljZSAqLwordTMyIG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pCiB7CiAJdTMyIGRldmljZV9ieXRlX2NvdW50OwogCkBAIC00OTMsOCArNDkzLDggQEAKIAlyZXR1cm4gZGV2aWNlX2J5dGVfY291bnQgKyBtaXRlX2J5dGVzX2luX3RyYW5zaXQobWl0ZV9jaGFuKTsKIH0KIAotLy8gcmV0dXJucyB1cHBlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBtZW1vcnkgZm9yIHRyYW5zZmVyIHRvIGRldmljZQotdTMyIG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV91YihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gbWVtb3J5IGZvciB0cmFuc2ZlciB0byBkZXZpY2UgKi8KK3UzMiBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfdWIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKQogewogCXUzMiBpbl90cmFuc2l0X2NvdW50OwogCkBAIC01MjYsMTQgKzUyNiwxNCBAQAogCXdyaXRlbChjaG9yLCBtaXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0NIT1IobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiB9CiAKLWludCBtaXRlX3N5bmNfaW5wdXRfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwgY29tZWRpX2FzeW5jICogYXN5bmMpCitpbnQgbWl0ZV9zeW5jX2lucHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYykKIHsKIAlpbnQgY291bnQ7CiAJdW5zaWduZWQgaW50IG5ieXRlcywgb2xkX2FsbG9jX2NvdW50OwogCWNvbnN0IHVuc2lnbmVkIGJ5dGVzX3Blcl9zY2FuID0gY2ZjX2J5dGVzX3Blcl9zY2FuKGFzeW5jLT5zdWJkZXZpY2UpOwogCiAJb2xkX2FsbG9jX2NvdW50ID0gYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudDsKLQkvLyB3cml0ZSBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbgorCS8qICB3cml0ZSBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbiAqLwogCWNvbWVkaV9idWZfd3JpdGVfYWxsb2MoYXN5bmMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CiAKIAluYnl0ZXMgPSBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiKG1pdGVfY2hhbik7CkBAIC01NDcsOSArNTQ3LDkgQEAKIAljb3VudCA9IG5ieXRlcyAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQ7CiAJLyogaXQncyBwb3NzaWJsZSBjb3VudCB3aWxsIGJlIG5lZ2F0aXZlIGR1ZSB0bwogCSAqIGNvbnNlcnZhdGl2ZSB2YWx1ZSByZXR1cm5lZCBieSBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiICovCi0JaWYgKGNvdW50IDw9IDApIHsKKwlpZiAoY291bnQgPD0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJY29tZWRpX2J1Zl93cml0ZV9mcmVlKGFzeW5jLCBjb3VudCk7CiAKIAlhc3luYy0+c2Nhbl9wcm9ncmVzcyArPSBjb3VudDsKQEAgLTU2MSw3ICs1NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWl0ZV9zeW5jX291dHB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBjb21lZGlfYXN5bmMgKiBhc3luYykKK2ludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYykKIHsKIAlpbnQgY291bnQ7CiAJdTMyIG5ieXRlc191YiwgbmJ5dGVzX2xiOwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCWFzeW5jLT5jbWQuc3RvcF9hcmcgKiBjZmNfYnl0ZXNfcGVyX3NjYW4oYXN5bmMtPnN1YmRldmljZSk7CiAKIAlvbGRfYWxsb2NfY291bnQgPSBhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQ7Ci0JLy8gcmVhZCBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbgorCS8qICByZWFkIGFsbG9jIGFzIG11Y2ggYXMgd2UgY2FuICovCiAJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCW5ieXRlc19sYiA9IG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihtaXRlX2NoYW4pOwogCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKQEAgLTU4Niw5ICs1ODYsOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWNvdW50ID0gbmJ5dGVzX2xiIC0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50OwotCWlmIChjb3VudCA8PSAwKSB7CisJaWYgKGNvdW50IDw9IDApCiAJCXJldHVybiAwOwotCX0KKwogCWlmIChjb3VudCkgewogCQljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgY291bnQpOwogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKQEAgLTc1Myw5ICs3NTMsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMzE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChiaXRzICYgKDEgPDwgaSkpIHsKKwkJaWYgKGJpdHMgJiAoMSA8PCBpKSkKIAkJCXByaW50aygiICVzIiwgYml0X3N0cltpXSk7Ci0JCX0KIAl9CiAJcHJpbnRrKCJcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmgKaW5kZXggYjg0ZWFmYS4uY2RhZjhhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5oCkBAIC0yOSwxMyArMjksMTMgQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05BVElOU1QJCTB4MTA5MwogCi0vLyAjZGVmaW5lIERFQlVHX01JVEUKKy8qICAjZGVmaW5lIERFQlVHX01JVEUgKi8KICNkZWZpbmUgUENJTUlPX0NPTVBBVAogCiAjaWZkZWYgREVCVUdfTUlURQotI2RlZmluZSBNRFBSSU5USyhmb3JtYXQsYXJncy4uLikJcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MgKQorI2RlZmluZSBNRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhmb3JtYXQgLCAjIyBhcmdzKQogI2Vsc2UKLSNkZWZpbmUgTURQUklOVEsoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIE1EUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjZGVmaW5lIE1BWF9NSVRFX0RNQV9DSEFOTkVMUyA4CkBAIC0xNDIsOCArMTQyLDggQEAKIHVuc2lnbmVkIG1pdGVfZG1hX3RjcihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogdm9pZCBtaXRlX2RtYV9hcm0oc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIHZvaWQgbWl0ZV9kbWFfZGlzYXJtKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7Ci1pbnQgbWl0ZV9zeW5jX2lucHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIGNvbWVkaV9hc3luYyAqIGFzeW5jKTsKLWludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIGNvbWVkaV9hc3luYyAqIGFzeW5jKTsKK2ludCBtaXRlX3N5bmNfaW5wdXRfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwgc3RydWN0IGNvbWVkaV9hc3luYyAqIGFzeW5jKTsKK2ludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYyk7CiB1MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogdTMyIG1pdGVfYnl0ZXNfd3JpdHRlbl90b19tZW1vcnlfdWIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIHUzMiBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfbGIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKQEAgLTE1Myw3ICsxNTMsNyBAQAogaW50IG1pdGVfZG9uZShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogCiAjaWYgMAotdW5zaWduZWQgbG9uZyBtaXRlX2xsX2Zyb21fa3ZtZW0oc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCBjb21lZGlfYXN5bmMgKiBhc3luYywKK3Vuc2lnbmVkIGxvbmcgbWl0ZV9sbF9mcm9tX2t2bWVtKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSwgc3RydWN0IGNvbWVkaV9hc3luYyAqIGFzeW5jLAogCWludCBsZW4pOwogdm9pZCBtaXRlX3NldHJlZ3Moc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCB1bnNpZ25lZCBsb25nIGxsX3N0YXJ0LCBpbnQgY2hhbiwKIAlpbnQgZGlyKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogdm9pZCBtaXRlX3ByZXBfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwKIAl1bnNpZ25lZCBpbnQgbnVtX2RldmljZV9iaXRzLCB1bnNpZ25lZCBpbnQgbnVtX21lbW9yeV9iaXRzKTsKIGludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywKLQljb21lZGlfYXN5bmMgKiBhc3luYyk7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwogCiAjaWZkZWYgREVCVUdfTUlURQogdm9pZCBtaXRlX3ByaW50X2Noc3IodW5zaWduZWQgaW50IGNoc3IpOwpAQCAtMTc5LDgzICsxNzksODMgQEAKIAkgICB3cml0dGVuIGFuZCByZWFkIGJhY2suICBUaGUgYml0cyAweDFmIGFsd2F5cyByZWFkIGFzIDEuCiAJICAgVGhlIHJlc3QgYWx3YXlzIHJlYWQgYXMgemVyby4gKi8KIAlNSVRFX1VOS05PV05fRE1BX0JVUlNUX1JFRyA9IDB4MjgsCi0JTUlURV9JT0RXQlNSID0gMHhjMCwJLy9JTyBEZXZpY2UgV2luZG93IEJhc2UgU2l6ZSBSZWdpc3RlcgotCU1JVEVfSU9EV0JTUl8xID0gMHhjNCwJLy8gSU8gRGV2aWNlIFdpbmRvdyBCYXNlIFNpemUgUmVnaXN0ZXIgMQorCU1JVEVfSU9EV0JTUiA9IDB4YzAsCS8qIElPIERldmljZSBXaW5kb3cgQmFzZSBTaXplIFJlZ2lzdGVyICovCisJTUlURV9JT0RXQlNSXzEgPSAweGM0LAkvKiAgSU8gRGV2aWNlIFdpbmRvdyBCYXNlIFNpemUgUmVnaXN0ZXIgMSAqLwogCU1JVEVfSU9EV0NSXzEgPSAweGY0LAogCU1JVEVfUENJX0NPTkZJR19PRkZTRVQgPSAweDMwMCwKLQlNSVRFX0NTSUdSID0gMHg0NjAJLy9jaGlwIHNpZ25hdHVyZQorCU1JVEVfQ1NJR1IgPSAweDQ2MAkvKiBjaGlwIHNpZ25hdHVyZSAqLwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hPUihpbnQgY2hhbm5lbCkJLy8gY2hhbm5lbCBvcGVyYXRpb24KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hPUihpbnQgY2hhbm5lbCkJLyogIGNoYW5uZWwgb3BlcmF0aW9uICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgwOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hDUihpbnQgY2hhbm5lbCkJLy8gY2hhbm5lbCBjb250cm9sCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0NIQ1IoaW50IGNoYW5uZWwpCS8qICBjaGFubmVsIGNvbnRyb2wgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDQ7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9UQ1IoaW50IGNoYW5uZWwpCS8vIHRyYW5zZmVyIGNvdW50CitzdGF0aWMgaW5saW5lIGludCBNSVRFX1RDUihpbnQgY2hhbm5lbCkJLyogIHRyYW5zZmVyIGNvdW50ICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHg4OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfTUNSKGludCBjaGFubmVsKQkvLyBtZW1vcnkgY29uZmlndXJhdGlvbgorc3RhdGljIGlubGluZSBpbnQgTUlURV9NQ1IoaW50IGNoYW5uZWwpCS8qICBtZW1vcnkgY29uZmlndXJhdGlvbiAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4YzsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX01BUihpbnQgY2hhbm5lbCkJLy8gbWVtb3J5IGFkZHJlc3MKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfTUFSKGludCBjaGFubmVsKQkvKiAgbWVtb3J5IGFkZHJlc3MgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDEwOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfRENSKGludCBjaGFubmVsKQkvLyBkZXZpY2UgY29uZmlndXJhdGlvbgorc3RhdGljIGlubGluZSBpbnQgTUlURV9EQ1IoaW50IGNoYW5uZWwpCS8qICBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MTQ7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9EQVIoaW50IGNoYW5uZWwpCS8vIGRldmljZSBhZGRyZXNzCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0RBUihpbnQgY2hhbm5lbCkJLyogIGRldmljZSBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgxODsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0xLQ1IoaW50IGNoYW5uZWwpCS8vIGxpbmsgY29uZmlndXJhdGlvbgorc3RhdGljIGlubGluZSBpbnQgTUlURV9MS0NSKGludCBjaGFubmVsKQkvKiAgbGluayBjb25maWd1cmF0aW9uICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgxYzsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0xLQVIoaW50IGNoYW5uZWwpCS8vIGxpbmsgYWRkcmVzcworc3RhdGljIGlubGluZSBpbnQgTUlURV9MS0FSKGludCBjaGFubmVsKQkvKiAgbGluayBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgyMDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0xMS0FSKGludCBjaGFubmVsKQkvLyBzZWUgbWl0ZSBzZWN0aW9uIG9mIHRudDUwMDIgbWFudWFsCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0xMS0FSKGludCBjaGFubmVsKQkvKiAgc2VlIG1pdGUgc2VjdGlvbiBvZiB0bnQ1MDAyIG1hbnVhbCAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MjQ7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9CQVIoaW50IGNoYW5uZWwpCS8vIGJhc2UgYWRkcmVzcworc3RhdGljIGlubGluZSBpbnQgTUlURV9CQVIoaW50IGNoYW5uZWwpCS8qICBiYXNlIGFkZHJlc3MgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDI4OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQkNSKGludCBjaGFubmVsKQkvLyBiYXNlIGNvdW50CitzdGF0aWMgaW5saW5lIGludCBNSVRFX0JDUihpbnQgY2hhbm5lbCkJLyogIGJhc2UgY291bnQgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDJjOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfU0FSKGludCBjaGFubmVsKQkvLyA/IGFkZHJlc3MKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfU0FSKGludCBjaGFubmVsKQkvKiAgPyBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgzMDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX1dTQ1IoaW50IGNoYW5uZWwpCS8vID8KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfV1NDUihpbnQgY2hhbm5lbCkJLyogID8gKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDM0OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfV1NFUihpbnQgY2hhbm5lbCkJLy8gPworc3RhdGljIGlubGluZSBpbnQgTUlURV9XU0VSKGludCBjaGFubmVsKQkvKiAgPyAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4Mzg7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9DSFNSKGludCBjaGFubmVsKQkvLyBjaGFubmVsIHN0YXR1cworc3RhdGljIGlubGluZSBpbnQgTUlURV9DSFNSKGludCBjaGFubmVsKQkvKiAgY2hhbm5lbCBzdGF0dXMgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDNjOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfRkNSKGludCBjaGFubmVsKQkvLyBmaWZvIGNvdW50CitzdGF0aWMgaW5saW5lIGludCBNSVRFX0ZDUihpbnQgY2hhbm5lbCkJLyogIGZpZm8gY291bnQgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDQwOwogfTsKIAogZW51bSBNSVRFX0lPRFdCU1JfYml0cyB7Ci0JV0VOQUIgPSAweDgwLAkJLy8gd2luZG93IGVuYWJsZQorCVdFTkFCID0gMHg4MCwJCS8qICB3aW5kb3cgZW5hYmxlICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1JVEVfSU9EV0JTUl8xX1dTSVpFX2JpdHModW5zaWduZWQgc2l6ZSkKQEAgLTI3NiwyMyArMjc2LDIzIEBACiAJcmV0dXJuIGNzaWdyX2JpdHMgJiAweGY7CiB9Owogc3RhdGljIGlubGluZSBpbnQgbWl0ZV9jc2lncl90eXBlKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyBvcmlnaW5hbCBtaXRlID0gMCwgbWluaW1pdGUgPSAxCit7CQkJCS8qICBvcmlnaW5hbCBtaXRlID0gMCwgbWluaW1pdGUgPSAxICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDQpICYgMHhmOwogfTsKIHN0YXRpYyBpbmxpbmUgaW50IG1pdGVfY3NpZ3JfbW1vZGUodTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIG1pdGUgbW9kZSwgbWluaW1pdGUgPSAxCit7CQkJCS8qICBtaXRlIG1vZGUsIG1pbmltaXRlID0gMSAqLwogCXJldHVybiAoY3NpZ3JfYml0cyA+PiA4KSAmIDB4MzsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX2ltb2RlKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyBjcHUgcG9ydCBpbnRlcmZhY2UgbW9kZSwgcGNpID0gMHgzCit7CQkJCS8qICBjcHUgcG9ydCBpbnRlcmZhY2UgbW9kZSwgcGNpID0gMHgzICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDEyKSAmIDB4MzsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX2RtYWModTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIG51bWJlciBvZiBkbWEgY2hhbm5lbHMKK3sJCQkJLyogIG51bWJlciBvZiBkbWEgY2hhbm5lbHMgKi8KIAlyZXR1cm4gKGNzaWdyX2JpdHMgPj4gMTYpICYgMHhmOwogfTsKIHN0YXRpYyBpbmxpbmUgaW50IG1pdGVfY3NpZ3Jfd3BkZXAodTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIHdyaXRlIHBvc3QgZmlmbyBkZXB0aAorewkJCQkvKiAgd3JpdGUgcG9zdCBmaWZvIGRlcHRoICovCiAJdW5zaWduZWQgaW50IHdwZGVwX2JpdHMgPSAoY3NpZ3JfYml0cyA+PiAyMCkgJiAweDc7CiAJaWYgKHdwZGVwX2JpdHMgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAlyZXR1cm4gKGNzaWdyX2JpdHMgPj4gMjQpICYgMHgxZjsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX2lvd2lucyh1MzIgY3NpZ3JfYml0cykKLXsJCQkJLy8gbnVtYmVyIG9mIGlvIHdpbmRvd3MKK3sJCQkJLyogIG51bWJlciBvZiBpbyB3aW5kb3dzICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDI5KSAmIDB4NzsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTUxNjAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL21wYzYyNC5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBhIE1pY3JvL3N5cyBpbmMuIE1QQy02MjQgUEMvMTA0IGJvYXJkCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBtcGM2MjQKK0Rlc2NyaXB0aW9uOiBNaWNyby9zeXMgTVBDLTYyNCBQQy8xMDQgYm9hcmQKK0RldmljZXM6IFtNaWNyby9zeXNdIE1QQy02MjQgKG1wYzYyNCkKK0F1dGhvcjogU3RhbmlzbGF3IFJhY3p5bnNraSA8c3JhY3p5bnNraUBvcC5wbD4KK1VwZGF0ZWQ6IFRodSwgMTUgU2VwIDIwMDUgMTI6MDE6MTggKzAyMDAKK1N0YXR1czogd29ya2luZworCisgICAgVGhlIE1pY3JvL3N5cyBNUEMtNjI0IGJvYXJkIGlzIGJhc2VkIG9uIHRoZSBMVEMyNDQwIDI0LWJpdCBzaWdtYS1kZWx0YQorICAgIEFEQyBjaGlwLgorCisgICAgU3ViZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjoKKyAgICAtIEFuYWxvZyBJbjogICBzdXBwb3J0ZWQKKyAgICAtIERpZ2l0YWwgSS9POiBub3Qgc3VwcG9ydGVkCisgICAgLSBMRURzOiAgICAgICAgbm90IHN1cHBvcnRlZAorICAgIC0gRUVQUk9NOiAgICAgIG5vdCBzdXBwb3J0ZWQKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBJL08gYmFzZSBhZGRyZXNzCisgIFsxXSAtIGNvbnZlcnRpb24gcmF0ZQorICAgICAgICAgICAgQ29udmVydGlvbiByYXRlICBSTVMgbm9pc2UgIEVmZmVjdGl2ZSBOdW1iZXIgT2YgQml0cworICAgICAgICAgMCAgICAgIDMuNTJrSHogICAgICAgIDIzdVYgICAgICAgICAgICAgICAgMTcKKyAgICAgICAgIDEgICAgICAxLjc2a0h6ICAgICAgIDMuNXVWICAgICAgICAgICAgICAgIDIwCisgICAgICAgICAyICAgICAgIDg4MEh6ICAgICAgICAgMnVWICAgICAgICAgICAgICAgIDIxLjMKKyAgICAgICAgIDMgICAgICAgNDQwSHogICAgICAgIDEuNHVWICAgICAgICAgICAgICAgMjEuOAorICAgICAgICAgNCAgICAgICAyMjBIeiAgICAgICAgIDF1ViAgICAgICAgICAgICAgICAyMi40CisgICAgICAgICA1ICAgICAgIDExMEh6ICAgICAgICA3NTB1ViAgICAgICAgICAgICAgIDIyLjkKKyAgICAgICAgIDYgICAgICAgNTVIeiAgICAgICAgIDUxMG5WICAgICAgICAgICAgICAgMjMuNAorICAgICAgICAgNyAgICAgIDI3LjVIeiAgICAgICAgMzc1blYgICAgICAgICAgICAgICAgMjQKKyAgICAgICAgIDggICAgICAxMy43NUh6ICAgICAgIDI1MG5WICAgICAgICAgICAgICAgMjQuNAorICAgICAgICAgOSAgICAgIDYuODc1SHogICAgICAgMjAwblYgICAgICAgICAgICAgICAyNC42CisgICBbMl0gLSB2b2x0YWdlIHJhbmdlCisgICAgICAgICAwICAgICAgLTEuMDFWIC4uICsxLjAxVgorICAgICAgICAgMSAgICAgIC0xMC4xViAuLiArMTAuMVYKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8vIENvbnNlY3V0aXZlIEkvTyBwb3J0IGFkZHJlc3NlcworI2RlZmluZSBNUEM2MjRfU0laRSAgICAgICAgICAgICAxNgorCisvLyBPZmZzZXRzIG9mIGRpZmZlcmVudCBwb3J0cworI2RlZmluZSBNUEM2MjRfTUFTVEVSX0NPTlRST0wJMAkvLyBub3QgdXNlZAorI2RlZmluZSBNUEM2MjRfR05NVVhDSCAgICAgICAgICAxCS8vIEdhaW4sIE11eCwgQ2hhbm5lbCBvZiBBREMKKyNkZWZpbmUgTVBDNjI0X0FEQyAgICAgICAgICAgICAgMgkvLyByZWFkL3dyaXRlIHRvL2Zyb20gQURDCisjZGVmaW5lIE1QQzYyNF9FRSAgICAgICAgICAgICAgIDMJLy8gcmVhZC93cml0ZSB0by9mcm9tIHNlcmlhbCBFRVBST00gdmlhIEkyQworI2RlZmluZSBNUEM2MjRfTEVEUyAgICAgICAgICAgICA0CS8vIHdyaXRlIHRvIExFRHMKKyNkZWZpbmUgTVBDNjI0X0RJTyAgICAgICAgICAgICAgNQkvLyByZWFkL3dyaXRlIHRvL2Zyb20gZGlnaXRhbCBJL08gcG9ydHMKKyNkZWZpbmUgTVBDNjI0X0lSUV9NQVNLICAgICAgICAgNgkvLyBJUlEgbWFza2luZyBlbmFibGUvZGlzYWJsZQorCisvLyBSZWdpc3RlciBiaXRzJyBuYW1lcworI2RlZmluZSBNUEM2MjRfQURCVVNZICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgTVBDNjI0X0FEU0RPICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIE1QQzYyNF9BREZPICAgICAgICAgICAgICgxPDwzKQorI2RlZmluZSBNUEM2MjRfQURDUyAgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgTVBDNjI0X0FEU0NLICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIE1QQzYyNF9BRFNESSAgICAgICAgICAgICgxPDwwKQorCisvLyBTREkgU3BlZWQvUmVzb2x1dGlvbiBQcm9ncmFtbWluZyBiaXRzCisjZGVmaW5lIE1QQzYyNF9PU1I0ICAgICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgTVBDNjI0X09TUjMgICAgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBNUEM2MjRfT1NSMiAgICAgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIE1QQzYyNF9PU1IxICAgICAgICAgICAgICgxPDwyOCkKKyNkZWZpbmUgTVBDNjI0X09TUjAgICAgICAgICAgICAgKDE8PDI3KQorCisvLyAzMi1iaXQgb3V0cHV0IHZhbHVlIGJpdHMnIG5hbWVzCisjZGVmaW5lIE1QQzYyNF9FT0NfQklUICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgTVBDNjI0X0RNWV9CSVQgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBNUEM2MjRfU0dOX0JJVCAgICAgICAgICAoMTw8MjkpCisKKy8vIENvbnZlcnRpb24gc3BlZWRzCisvKiBPU1I0IE9TUjMgT1NSMiBPU1IxIE9TUjAgIENvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFTk9CXgorICogIFggICAgMCAgICAwICAgIDAgICAgMSAgICAgICAgMy41MmtIeiAgICAgICAgMjN1ViAgICAgIDE3CisgKiAgWCAgICAwICAgIDAgICAgMSAgICAwICAgICAgICAxLjc2a0h6ICAgICAgIDMuNXVWICAgICAgMjAKKyAqICBYICAgIDAgICAgMCAgICAxICAgIDEgICAgICAgICA4ODBIeiAgICAgICAgIDJ1ViAgICAgIDIxLjMKKyAqICBYICAgIDAgICAgMSAgICAwICAgIDAgICAgICAgICA0NDBIeiAgICAgICAgMS40dVYgICAgIDIxLjgKKyAqICBYICAgIDAgICAgMSAgICAwICAgIDEgICAgICAgICAyMjBIeiAgICAgICAgIDF1ViAgICAgIDIyLjQKKyAqICBYICAgIDAgICAgMSAgICAxICAgIDAgICAgICAgICAxMTBIeiAgICAgICAgNzUwdVYgICAgIDIyLjkKKyAqICBYICAgIDAgICAgMSAgICAxICAgIDEgICAgICAgICAgNTVIeiAgICAgICAgNTEwblYgICAgIDIzLjQKKyAqICBYICAgIDEgICAgMCAgICAwICAgIDAgICAgICAgICAyNy41SHogICAgICAgMzc1blYgICAgICAyNAorICogIFggICAgMSAgICAwICAgIDAgICAgMSAgICAgICAgMTMuNzVIeiAgICAgICAyNTBuViAgICAgMjQuNAorICogIFggICAgMSAgICAxICAgIDEgICAgMSAgICAgICAgNi44NzVIeiAgICAgICAyMDBuViAgICAgMjQuNgorICoKKyAqIF4gLSBFZmZlY3RpdmUgTnVtYmVyIE9mIEJpdHMKKyAqLworCisjZGVmaW5lIE1QQzYyNF9TUEVFRF8zXzUyX2tIeiAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IwKQorI2RlZmluZSBNUEM2MjRfU1BFRURfMV83Nl9rSHogICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjEgICAgICAgICAgICAgICkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzg4MF9IeiAgICAgKE1QQzYyNF9PU1I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IxIHwgTVBDNjI0X09TUjApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF80NDBfSHogICAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorI2RlZmluZSBNUEM2MjRfU1BFRURfMjIwX0h6ICAgICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IyICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMCkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzExMF9IeiAgICAgKE1QQzYyNF9PU1I0ICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMiB8IE1QQzYyNF9PU1IxICAgICAgICAgICAgICApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF81NV9IeiAgICAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjIgfCBNUEM2MjRfT1NSMSB8IE1QQzYyNF9PU1IwKQorI2RlZmluZSBNUEM2MjRfU1BFRURfMjdfNV9IeiAgICAoTVBDNjI0X09TUjQgfCBNUEM2MjRfT1NSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzEzXzc1X0h6ICAgKE1QQzYyNF9PU1I0IHwgTVBDNjI0X09TUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF82Xzg3NV9IeiAgIChNUEM2MjRfT1NSNCB8IE1QQzYyNF9PU1IzIHwgTVBDNjI0X09TUjIgfCBNUEM2MjRfT1NSMSB8IE1QQzYyNF9PU1IwKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdHJ1Y3Qgc2tlbF9wcml2YXRlIHsKKworCXVuc2lnbmVkIGxvbmcgaW50IHVsQ29udmVydGlvblJhdGU7CS8vIHNldCBieSBtcGM2MjRfYXR0YWNoKCkgZnJvbSBkcml2ZXIncyBwYXJhbWV0ZXJzCit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBza2VsX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9tcGM2MjRfYmlwb2xhcjEgPSB7CisJMSwKKwl7CisvLyAgICBCSVBfUkFOR0UoMS4wMSkgLy8gdGhpcyBpcyBjb3JyZWN0LAorCQkJLy8gYnV0IG15IE1QQy02MjQgYWN0dWFsbHkgc2VlbXMgdG8gaGF2ZSBhIHJhbmdlIG9mIDIuMDIKKwkJCUJJUF9SQU5HRSgyLjAyKQorCQl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX21wYzYyNF9iaXBvbGFyMTAgPSB7CisJMSwKKwl7CisvLyAgICBCSVBfUkFOR0UoMTAuMSkgLy8gdGhpcyBpcyBjb3JyZWN0LAorCQkJLy8gYnV0IG15IE1QQy02MjQgYWN0dWFsbHkgc2VlbXMgdG8gaGF2ZSBhIHJhbmdlIG9mIDIwLjIKKwkJCUJJUF9SQU5HRSgyMC4yKQorCQl9Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpbnQgbXBjNjI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG1wYzYyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX21wYzYyNCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJtcGM2MjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm1wYzYyNF9hdHRhY2gsCisgICAgICBkZXRhY2g6bXBjNjI0X2RldGFjaAorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW50IG1wYzYyNF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW50IG1wYzYyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlydF9wcmludGsoImNvbWVkaSVkOiBtcGM2MjQgWzB4JTA0bHgsICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKHJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgTVBDNjI0X1NJWkUsICJtcGM2MjQiKSA9PSBOVUxMKSB7CisJCXJ0X3ByaW50aygiSS9PIHBvcnQocykgaW4gdXNlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gIm1wYzYyNCI7CisKKwkvLyBQcml2YXRlIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbgorCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBza2VsX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCWNhc2UgMDoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8zXzUyX2tIejsKKwkJcnRfcHJpbnRrKCIzLjUyIGtIeiwgIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8xXzc2X2tIejsKKwkJcnRfcHJpbnRrKCIxLjc2IGtIeiwgIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF84ODBfSHo7CisJCXJ0X3ByaW50aygiODgwIEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzQ0MF9IejsKKwkJcnRfcHJpbnRrKCI0NDAgSHosICIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfMjIwX0h6OworCQlydF9wcmludGsoIjIyMCBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8xMTBfSHo7CisJCXJ0X3ByaW50aygiMTEwIEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzU1X0h6OworCQlydF9wcmludGsoIjU1IEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzI3XzVfSHo7CisJCXJ0X3ByaW50aygiMjcuNSBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8xM183NV9IejsKKwkJcnRfcHJpbnRrKCIxMy43NSBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgOToKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF82Xzg3NV9IejsKKwkJcnRfcHJpbnRrKCI2Ljg3NSBIeiwgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aworCQkJKCJpbGxlZ2FsIGNvbnZlcnRpb24gcmF0ZSBzZXR0aW5nISBWYWxpZCBudW1iZXJzIGFyZSAwLi45LiBVc2luZyA5ID0+IDYuODc1IEh6LCAiKTsKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8zXzUyX2tIejsKKwl9CisKKwkvLyBTdWJkZXZpY2VzIHN0cnVjdHVyZXMKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkY7CisJcy0+bl9jaGFuID0gODsKKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzFdKSB7CisJZGVmYXVsdDoKKwkJcy0+bWF4ZGF0YSA9IDB4M0ZGRkZGRkY7CisJCXJ0X3ByaW50aygiMzAgYml0LCAiKTsKKwl9CisKKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzFdKSB7CisJY2FzZSAwOgorCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9tcGM2MjRfYmlwb2xhcjE7CisJCXJ0X3ByaW50aygiMS4wMVZdOiAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfbXBjNjI0X2JpcG9sYXIxMDsKKwkJcnRfcHJpbnRrKCIxMC4xVl06ICIpOworCX0KKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPmluc25fcmVhZCA9IG1wYzYyNF9haV9yaW5zbjsKKworCXJ0X3ByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbXBjNjI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlydF9wcmludGsoImNvbWVkaSVkOiBtcGM2MjQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBNUEM2MjRfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gVGltZW91dCAyMDBtcworI2RlZmluZSBUSU1FT1VUIDIwMAorCitzdGF0aWMgaW50IG1wYzYyNF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJdW5zaWduZWQgbG9uZyBpbnQgZGF0YV9pbiwgZGF0YV9vdXQ7CisJdW5zaWduZWQgY2hhciB1Y1BvcnQ7CisKKwkvLyBXQVJOSU5HOiBXZSBhbHdheXMgd3JpdGUgMCB0byBHTlNXQSBiaXQsIHNvIHRoZSBjaGFubmVsIHJhbmdlIGlzICstLzEwLjFWZGMKKwlvdXRiKGluc24tPmNoYW5zcGVjLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9HTk1VWENIKTsKKy8vICAgIHJ0X3ByaW50aygiQ2hhbm5lbCAlZDogXG4iLCBpbnNuLT5jaGFuc3BlYyk7CisJaWYgKCFpbnNuLT5uKSB7CisJCXJ0X3ByaW50aygiTVBDNjI0OiBXYXJuaW5nLCBubyBkYXRhIHRvIGFxdWlyZVxuIik7CisJCXJldHVybiAwOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLy8gVHJpZ2dlciB0aGUgY29udmVydGlvbgorCQlvdXRiKE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJb3V0YihNUEM2MjRfQURDUyB8IE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQljb21lZGlfdWRlbGF5KDEpOworCisJCS8vIFdhaXQgZm9yIHRoZSBjb252ZXJ0aW9uIHRvIGVuZAorCQlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCQl1Y1BvcnQgPSBpbmIoZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCWlmICh1Y1BvcnQgJiBNUEM2MjRfQURCVVNZKQorCQkJCWNvbWVkaV91ZGVsYXkoMTAwMCk7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJcnRfcHJpbnRrKCJNUEM2MjQ6IHRpbWVvdXQgKCVkbXMpXG4iLCBUSU1FT1VUKTsKKwkJCWRhdGFbbl0gPSAwOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJLy8gU3RhcnQgcmVhZGluZyBkYXRhCisJCWRhdGFfaW4gPSAwOworCQlkYXRhX291dCA9IGRldnByaXYtPnVsQ29udmVydGlvblJhdGU7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQkvLyBTZXQgdGhlIGNsb2NrIGxvdworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKworCQkJaWYgKGRhdGFfb3V0ICYgKDEgPDwgMzEpKQkvLyB0aGUgbmV4dCBiaXQgaXMgYSAxCisJCQl7CisJCQkJLy8gU2V0IHRoZSBBRFNESSBsaW5lIChzZW5kIHRvIE1QQzYyNCkKKwkJCQlvdXRiKE1QQzYyNF9BRFNESSwgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCQljb21lZGlfdWRlbGF5KDEpOworCQkJCS8vIFNldCB0aGUgY2xvY2sgaGlnaAorCQkJCW91dGIoTVBDNjI0X0FEU0NLIHwgTVBDNjI0X0FEU0RJLAorCQkJCQlkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQkJfSBlbHNlCS8vIHRoZSBuZXh0IGJpdCBpcyBhIDAKKwkJCXsKKwkJCQkvLyBTZXQgdGhlIEFEU0RJIGxpbmUgKHNlbmQgdG8gTVBDNjI0KQorCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCQljb21lZGlfdWRlbGF5KDEpOworCQkJCS8vIFNldCB0aGUgY2xvY2sgaGlnaAorCQkJCW91dGIoTVBDNjI0X0FEU0NLLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQkJfQorCQkJLy8gUmVhZCBBRFNETyBvbiBoaWdoIGNsb2NrIChyZWNlaXZlIGZyb20gTVBDNjI0KQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJCWRhdGFfaW4gPDw9IDE7CisJCQlkYXRhX2luIHw9CisJCQkJKGluYihkZXYtPmlvYmFzZSArCisJCQkJCU1QQzYyNF9BREMpICYgTVBDNjI0X0FEU0RPKSA+PiA0OworCQkJY29tZWRpX3VkZWxheSgxKTsKKworCQkJZGF0YV9vdXQgPDw9IDE7CisJCX0KKworCQkvLyBSZWNlaXZlZCAzMi1iaXQgbG9uZyB2YWx1ZSBjb25zaXN0IG9mOgorCQkvLyAgIDMxOiBFT0MgKEVuZCBPZiBUcmFuc21pc3Npb24pIGJpdCAtIHNob3VsZCBiZSAwCisJCS8vICAgMzA6IERNWSAoRHVtbXkpIGJpdCAgICAgICAgICAgICAgIC0gc2hvdWxkIGJlIDAKKwkJLy8gICAyOTogU0lHIChTaWduKSBiaXQgICAgICAgICAgICAgICAgLSAxIGlmIHRoZSB2b2x0YWdlIGlzIHBvc2l0aXZlLCAwIGlmIG5lZ2F0aXZlCisJCS8vICAgMjg6IE1TQiAoTW9zdCBTaWduaWZpY2FudCBCaXQpICAgIC0gdGhlIGZpcnN0IGJpdCBvZiBjb252ZXJ0aW9uIHJlc3VsdAorCQkvLyAgIC4uLi4KKwkJLy8gICAwNTogTFNCIChMZWFzdCBTaWduaWZpY2FudCBCaXQpICAgLSB0aGUgbGFzdCBiaXQgb2YgY29udmVydGlvbiByZXN1bHQKKwkJLy8gICAwNDogc3ViLUxTQiAgICAgICAgICAgICAgICAgICAgICAgLSBzdWItTFNCcyBhcmUgYmFzaWNhbGx5IG5vaXNlLCBidXQgd2hlbgorCQkvLyAgIDAzOiBzdWItTFNCICAgICAgICAgICAgICAgICAgICAgICAgIGF2ZXJhZ2VkIHByb3Blcmx5LCB0aGV5IGNhbiBpbmNyZWFzZSBjb252ZXJ0aW9uCisJCS8vICAgMDI6IHN1Yi1MU0IgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIHVwIHRvIDI5IGJpdHM7IHRoZXkgY2FuIGJlIGRpc2NhcmRlZAorCQkvLyAgIDAxOiBzdWItTFNCICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgbG9zcyBvZiByZXNvbHV0aW9uLgorCQkvLyAgIDAwOiBzdWItTFNCCisKKwkJaWYgKGRhdGFfaW4gJiBNUEM2MjRfRU9DX0JJVCkKKwkJCXJ0X3ByaW50aygiTVBDNjI0OiBFT0MgYml0IGlzIHNldCAoZGF0YV9pbj0lbHUpISIsCisJCQkJZGF0YV9pbik7CisJCWlmIChkYXRhX2luICYgTVBDNjI0X0RNWV9CSVQpCisJCQlydF9wcmludGsoIk1QQzYyNDogRE1ZIGJpdCBpcyBzZXQgKGRhdGFfaW49JWx1KSEiLAorCQkJCWRhdGFfaW4pOworCQlpZiAoZGF0YV9pbiAmIE1QQzYyNF9TR05fQklUKQkvLyBjaGVjayB0aGUgc2lnbiBiaXQKKwkJewkJLy8gVGhlIHZvbHRhZ2UgaXMgcG9zaXRpdmUKKwkJCWRhdGFfaW4gJj0gMHgzRkZGRkZGRjsJLy8gRU9DIGFuZCBETVkgc2hvdWxkIGJlIDAsIGJ1dCB3ZSB3aWxsIG1hc2sgdGhlbSBvdXQganVzdCB0byBiZSBzdXJlCisJCQlkYXRhW25dID0gZGF0YV9pbjsJLy8gY29tZWRpIG9wZXJhdGVzIG9uIHVuc2lnbmVkIG51bWJlcnMsIHNvIHdlIGRvbid0IGNsZWFyIHRoZSBTR04gYml0CisJCQkvLyBTR04gYml0IGlzIHN0aWxsIHNldCEgSXQncyBjb3JyZWN0LCBzaW5jZSB3ZSdyZSBjb252ZXJ0aW5nIHRvIHVuc2lnbmVkLgorCQl9IGVsc2UgewkvLyBUaGUgdm9sdGFnZSBpcyBuZWdhdGl2ZQorCQkJLy8gZGF0YV9pbiBjb250YWlucyBhIG51bWJlciBpbiAzMC1iaXQgdHdvJ3MgY29tcGxlbWVudCBjb2RlIGFuZCB3ZSBtdXN0IGRlYWwgd2l0aCBpdAorCQkJZGF0YV9pbiB8PSBNUEM2MjRfU0dOX0JJVDsKKwkJCWRhdGFfaW4gPSB+ZGF0YV9pbjsKKwkJCWRhdGFfaW4gKz0gMTsKKwkJCWRhdGFfaW4gJj0gfihNUEM2MjRfRU9DX0JJVCB8IE1QQzYyNF9ETVlfQklUKTsKKwkJCS8vIGNsZWFyIEVPQyBhbmQgRE1ZIGJpdHMKKwkJCWRhdGFfaW4gPSAweDIwMDAwMDAwIC0gZGF0YV9pbjsKKwkJCWRhdGFbbl0gPSBkYXRhX2luOworCQl9CisJfQorCisJLy8gUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4KKwlyZXR1cm4gbjsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM2MjQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzgyNjBjcG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjMGE3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbXBjODI2MC5jCisgICAgZHJpdmVyIGZvciBkaWdpdGFsIEkvTyBwaW5zIG9uIHRoZSBNUEMgODI2MCBDUE0gbW9kdWxlCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG1wYzgyNjBjcG0KK0Rlc2NyaXB0aW9uOiBNUEM4MjYwIENQTSBtb2R1bGUgZ2VuZXJpYyBkaWdpdGFsIEkvTyBsaW5lcworRGV2aWNlczogW01vdG9yb2xhXSBNUEM4MjYwIENQTSAobXBjODI2MGNwbSkKK0F1dGhvcjogZHMKK1N0YXR1czogZXhwZXJpbWVudGFsCitVcGRhdGVkOiBTYXQsIDE2IE1hciAyMDAyIDE3OjM0OjQ4IC0wODAwCisKK1RoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIHRoZSBNb3Rvcm9sYSBNUEM4MjYwIHByb2Nlc3NvciwgYWxsb3dpbmcKK3lvdSB0byBhY2Nlc3MgdGhlIHByb2Nlc3NvcidzIGdlbmVyaWMgZGlnaXRhbCBJL08gbGluZXMuCisKK0l0IGlzIGFwcGFyZW50bHkgbWlzc2luZyBzb21lIGNvZGUuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1wYzgyNjBfZGlvX3Jlc2VydmVkWzRdOworCitzdHJ1Y3QgbXBjODI2MGNwbV9wcml2YXRlIHsKKworCWludCBkYXRhOworCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbXBjODI2MGNwbV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbXBjODI2MGNwbV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9tcGM4MjYwY3BtID0geworICAgICAgZHJpdmVyX25hbWU6Im1wYzgyNjBjcG0iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm1wYzgyNjBjcG1fYXR0YWNoLAorICAgICAgZGV0YWNoOm1wYzgyNjBjcG1fZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM4MjYwY3BtKTsKKworc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbXBjODI2MGNwbV9kaW9fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogbXBjODI2MGNwbTogIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX3B0ciA9IG1wYzgyNjBjcG1fYm9hcmRzICsgZGV2LT5ib2FyZDsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBtcGM4MjYwY3BtX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSAzMjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fY29uZmlnID0gbXBjODI2MGNwbV9kaW9fY29uZmlnOworCQlzLT5pbnNuX2JpdHMgPSBtcGM4MjYwY3BtX2Rpb19iaXRzOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG1wYzgyNjBjcG06IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmNwbV9wZGF0KGludCBwb3J0KQoreworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRhOworCWNhc2UgMToKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRiOworCWNhc2UgMjoKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRjOworCWNhc2UgMzoKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRkOworCX0KK30KKworc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGludCBtYXNrOworCWludCBwb3J0OworCisJcG9ydCA9IChpbnQpcy0+cHJpdmF0ZTsKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIGNwbV9yZXNlcnZlZF9iaXRzW3BvcnRdKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJhOworCWNhc2UgMToKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJiOworCWNhc2UgMjoKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJjOworCWNhc2UgMzoKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJkOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fZGlvX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBwb3J0OworCXVuc2lnbmVkIGxvbmcgKnA7CisKKwlwID0gY3BtX3BkYXQoKGludClzLT5wcml2YXRlKTsKKworCXJldHVybiAyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL211bHRpcTMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NzU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgUXVhbnNlciBDb25zdWx0aW5nIE11bHRpUS0zIGJvYXJkCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OSBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBtdWx0aXEzCitEZXNjcmlwdGlvbjogUXVhbnNlciBDb25zdWx0aW5nIE11bHRpUS0zCitBdXRob3I6IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorU3RhdHVzOiB3b3JrcworRGV2aWNlczogW1F1YW5zZXIgQ29uc3VsdGluZ10gTXVsdGlRLTMgKG11bHRpcTMpCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIE1VTFRJUTNfU0laRSAxNgorCisvKgorICogTVVMVElRLTMgcG9ydCBvZmZzZXRzCisgKi8KKyNkZWZpbmUgTVVMVElRM19ESUdJTl9QT1JUIDAKKyNkZWZpbmUgTVVMVElRM19ESUdPVVRfUE9SVCAwCisjZGVmaW5lIE1VTFRJUTNfREFDX0RBVEEgMgorI2RlZmluZSBNVUxUSVEzX0FEX0RBVEEgNAorI2RlZmluZSBNVUxUSVEzX0FEX0NTIDQKKyNkZWZpbmUgTVVMVElRM19TVEFUVVMgNgorI2RlZmluZSBNVUxUSVEzX0NPTlRST0wgNgorI2RlZmluZSBNVUxUSVEzX0NMS19EQVRBIDgKKyNkZWZpbmUgTVVMVElRM19FTkNfREFUQSAxMgorI2RlZmluZSBNVUxUSVEzX0VOQ19DT05UUk9MIDE0CisKKy8qCisgKiBmbGFncyBmb3IgQ09OVFJPTCByZWdpc3RlcgorICovCisjZGVmaW5lIE1VTFRJUTNfQURfTVVYX0VOICAgICAgMHgwMDQwCisjZGVmaW5lIE1VTFRJUTNfQURfQVVUT1ogICAgICAgMHgwMDgwCisjZGVmaW5lIE1VTFRJUTNfQURfQVVUT0NBTCAgICAgMHgwMTAwCisjZGVmaW5lIE1VTFRJUTNfQURfU0ggICAgICAgICAgMHgwMjAwCisjZGVmaW5lIE1VTFRJUTNfQURfQ0xPQ0tfNE0gICAgMHgwNDAwCisjZGVmaW5lIE1VTFRJUTNfREFfTE9BRCAgICAgICAgICAgICAgICAweDE4MDAKKworI2RlZmluZSBNVUxUSVEzX0NPTlRST0xfTVVTVCAgICAweDA2MDAKKworLyoKKyAqIGZsYWdzIGZvciBTVEFUVVMgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBNVUxUSVEzX1NUQVRVU19FT0MgICAgICAweDAwOAorI2RlZmluZSBNVUxUSVEzX1NUQVRVU19FT0NfSSAgICAweDAxMAorCisvKgorICogZmxhZ3MgZm9yIGVuY29kZXIgY29udHJvbAorICovCisjZGVmaW5lIE1VTFRJUTNfQ0xPQ0tfREFUQSAgICAgIDB4MDAKKyNkZWZpbmUgTVVMVElRM19DTE9DS19TRVRVUCAgICAgMHgxOAorI2RlZmluZSBNVUxUSVEzX0lOUFVUX1NFVFVQICAgICAweDQxCisjZGVmaW5lIE1VTFRJUTNfUVVBRF9YNCAgICAgICAgIDB4MzgKKyNkZWZpbmUgTVVMVElRM19CUF9SRVNFVCAgICAgICAgMHgwMQorI2RlZmluZSBNVUxUSVEzX0NOVFJfUkVTRVQgICAgICAweDAyCisjZGVmaW5lIE1VTFRJUTNfVFJTRlJQUl9DVFIgICAgIDB4MDgKKyNkZWZpbmUgTVVMVElRM19UUlNGUkNOVFJfT0wgICAgMHgxMAorI2RlZmluZSBNVUxUSVEzX0VGTEFHX1JFU0VUICAgICAweDA2CisKKyNkZWZpbmUgTVVMVElRM19USU1FT1VUIDMwCisKK3N0YXRpYyBpbnQgbXVsdGlxM19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBtdWx0aXEzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX211bHRpcTMgPSB7CisgICAgICBkcml2ZXJfbmFtZToibXVsdGlxMyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bXVsdGlxM19hdHRhY2gsCisgICAgICBkZXRhY2g6bXVsdGlxM19kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX211bHRpcTMpOworCitzdHJ1Y3QgbXVsdGlxM19wcml2YXRlIHsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG11bHRpcTNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBtdWx0aXEzX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGNoYW47CisJdW5zaWduZWQgaW50IGhpLCBsbzsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlvdXR3KE1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19BRF9NVVhfRU4gfCAoY2hhbiA8PCAzKSwKKwkJZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0NPTlRST0wpOworCisJZm9yIChpID0gMDsgaSA8IE1VTFRJUTNfVElNRU9VVDsgaSsrKSB7CisJCWlmIChpbncoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX1NUQVRVUykgJiBNVUxUSVEzX1NUQVRVU19FT0MpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gTVVMVElRM19USU1FT1VUKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQURfQ1MpOworCQlmb3IgKGkgPSAwOyBpIDwgTVVMVElRM19USU1FT1VUOyBpKyspIHsKKwkJCWlmIChpbncoZGV2LT5pb2Jhc2UgKworCQkJCQlNVUxUSVEzX1NUQVRVUykgJiBNVUxUSVEzX1NUQVRVU19FT0NfSSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBNVUxUSVEzX1RJTUVPVVQpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCQloaSA9IGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfQURfQ1MpOworCQlsbyA9IGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfQURfQ1MpOworCQlkYXRhW25dID0gKCgoaGkgPDwgOCkgfCBsbykgKyAweDEwMDApICYgMHgxZmZmOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXR3KE1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19EQV9MT0FEIHwgY2hhbiwKKwkJCWRldi0+aW9iYXNlICsgTVVMVElRM19DT05UUk9MKTsKKwkJb3V0dyhkYXRhW2ldLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfREFDX0RBVEEpOworCQlvdXR3KE1VTFRJUTNfQ09OVFJPTF9NVVNULCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQ09OVFJPTCk7CisKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0RJR0lOX1BPUlQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRElHT1VUX1BPUlQpOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19lbmNvZGVyX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgY29udHJvbCA9IE1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19BRF9NVVhfRU4gfCAoY2hhbiA8PCAzKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJaW50IHZhbHVlOworCQlvdXR3KGNvbnRyb2wsIGRldi0+aW9iYXNlICsgTVVMVElRM19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0JQX1JFU0VULCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfVFJTRlJDTlRSX09MLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQl2YWx1ZSA9IGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0RBVEEpOworCQl2YWx1ZSB8PSAoaW5iKGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfREFUQSkgPDwgOCk7CisJCXZhbHVlIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19EQVRBKSA8PCAxNik7CisJCWRhdGFbbl0gPSAodmFsdWUgKyAweDgwMDAwMCkgJiAweGZmZmZmZjsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgZW5jb2Rlcl9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgY2hhbjsKKwlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgZGV2LT5zdWJkZXZpY2VzWzRdLm5fY2hhbjsgY2hhbisrKSB7CisJCWludCBjb250cm9sID0KKwkJCU1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19BRF9NVVhfRU4gfCAoY2hhbiA8PCAzKTsKKwkJb3V0dyhjb250cm9sLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQ09OVFJPTCk7CisJCW91dGIoTVVMVElRM19FRkxBR19SRVNFVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0JQX1JFU0VULCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfQ0xPQ0tfREFUQSwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19EQVRBKTsKKwkJb3V0YihNVUxUSVEzX0NMT0NLX1NFVFVQLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfSU5QVVRfU0VUVVAsIGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfQ09OVFJPTCk7CisJCW91dGIoTVVMVElRM19RVUFEX1g0LCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfQ05UUl9SRVNFVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwl9Cit9CisKKy8qCisgICBvcHRpb25zWzBdIC0gSS9PIHBvcnQKKyAgIG9wdGlvbnNbMV0gLSBpcnEKKyAgIG9wdGlvbnNbMl0gLSBudW1iZXIgb2YgZW5jb2RlciBjaGlwcyBpbnN0YWxsZWQKKyAqLworCitzdGF0aWMgaW50IG11bHRpcTNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBtdWx0aXEzOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIE1VTFRJUTNfU0laRSwgIm11bHRpcTMiKSkgeworCQlwcmludGsoImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdFxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJaWYgKGlycSkgeworCQlwcmludGsoImNvbWVkaSVkOiBpcnEgPSAldSBpZ25vcmVkXG4iLCBkZXYtPm1pbm9yLCBpcnEpOworCX0gZWxzZSB7CisJCXByaW50aygiY29tZWRpJWQ6IG5vIGlycVxuIiwgZGV2LT5taW5vcik7CisJfQorCWRldi0+Ym9hcmRfbmFtZSA9ICJtdWx0aXEzIjsKKwlyZXN1bHQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNSk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBtdWx0aXEzX3ByaXZhdGUpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9yZWFkID0gbXVsdGlxM19haV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9IDB4MWZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX3JlYWQgPSBtdWx0aXEzX2FvX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gbXVsdGlxM19hb19pbnNuX3dyaXRlOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gbXVsdGlxM19kaV9pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gbXVsdGlxM19kb19pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5zdGF0ZSA9IDA7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwkvKiBlbmNvZGVyIChjb3VudGVyKSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IGl0LT5vcHRpb25zWzJdICogMjsKKwlzLT5pbnNuX3JlYWQgPSBtdWx0aXEzX2VuY29kZXJfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCisJZW5jb2Rlcl9yZXNldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogbXVsdGlxMzogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgTVVMVElRM19TSVpFKTsKKwl9CisJaWYgKGRldi0+aXJxKSB7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxZWNiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCisgICAgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktNjUyNworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAyLDIwMDMgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pXzY1MjcKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyA2NTI3CitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS02NTI3IChuaTY1MjcpLCBQWEktNjUyNworVXBkYXRlZDogU2F0LCAyNSBKYW4gMjAwMyAxMzoyNDo0MCAtMDgwMAorCisKKyovCisKKy8qCisgICBNYW51YWxzIChhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAubmF0aW5zdC5jb20vc3VwcG9ydC9tYW51YWxzKQorCisJMzcwMTA2Yi5wZGYJNjUyNyBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbAorCisgKi8KKworI2RlZmluZSBERUJVRyAxCisjZGVmaW5lIERFQlVHX0ZMQUdTCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIm1pdGUuaCIKKworI2RlZmluZSBOSTY1MjdfRElPX1NJWkUgNDA5NgorI2RlZmluZSBOSTY1MjdfTUlURV9TSVpFIDQwOTYKKworI2RlZmluZSBQb3J0X1JlZ2lzdGVyKHgpCQkJKDB4MDArKHgpKQorI2RlZmluZSBJRF9SZWdpc3RlcgkJCQkweDA2CisKKyNkZWZpbmUgQ2xlYXJfUmVnaXN0ZXIJCQkJMHgwNworI2RlZmluZSBDbHJFZGdlCQkJCTB4MDgKKyNkZWZpbmUgQ2xyT3ZlcmZsb3cJCQkweDA0CisjZGVmaW5lIENsckZpbHRlcgkJCTB4MDIKKyNkZWZpbmUgQ2xySW50ZXJ2YWwJCQkweDAxCisKKyNkZWZpbmUgRmlsdGVyX0ludGVydmFsKHgpCQkJKDB4MDgrKHgpKQorI2RlZmluZSBGaWx0ZXJfRW5hYmxlKHgpCQkJKDB4MGMrKHgpKQorCisjZGVmaW5lIENoYW5nZV9TdGF0dXMJCQkJMHgxNAorI2RlZmluZSBNYXN0ZXJJbnRlcnJ1cHRTdGF0dXMJCTB4MDQKKyNkZWZpbmUgT3ZlcmZsb3cJCQkweDAyCisjZGVmaW5lIEVkZ2VTdGF0dXMJCQkweDAxCisKKyNkZWZpbmUgTWFzdGVyX0ludGVycnVwdF9Db250cm9sCQkweDE1CisjZGVmaW5lIEZhbGxpbmdFZGdlSW50RW5hYmxlCQkweDEwCisjZGVmaW5lIFJpc2luZ0VkZ2VJbnRFbmFibGUJCTB4MDgKKyNkZWZpbmUgTWFzdGVySW50ZXJydXB0RW5hYmxlCQkweDA0CisjZGVmaW5lIE92ZXJmbG93SW50RW5hYmxlCQkweDAyCisjZGVmaW5lIEVkZ2VJbnRFbmFibGUJCQkweDAxCisKKyNkZWZpbmUgUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSh4KQkJKDB4MDE4Kyh4KSkKKyNkZWZpbmUgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoeCkJKDB4MDIwKyh4KSkKKworc3RhdGljIGludCBuaTY1MjdfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmk2NTI3X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pNjUyNyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaTY1MjciLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm5pNjUyN19hdHRhY2gsCisgICAgICBkZXRhY2g6bmk2NTI3X2RldGFjaCwKK307CisKK3N0cnVjdCBuaTY1MjdfYm9hcmQgeworCisJaW50IGRldl9pZDsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaTY1MjdfYm9hcmQgbmk2NTI3X2JvYXJkc1tdID0geworCXsKKwkgICAgICBkZXZfaWQ6CTB4MmIyMCwKKwkgICAgICBuYW1lOgkicGNpLTY1MjciLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MmIxMCwKKwkgICAgICBuYW1lOgkicHhpLTY1MjciLAorCQl9LAorfTsKKworI2RlZmluZSBuX25pNjUyN19ib2FyZHMgKHNpemVvZihuaTY1MjdfYm9hcmRzKS9zaXplb2Yobmk2NTI3X2JvYXJkc1swXSkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3Qgbmk2NTI3X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaTY1MjdfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJiMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmIyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmk2NTI3X3BjaV90YWJsZSk7CisKK3N0cnVjdCBuaTY1MjdfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCXVuc2lnbmVkIGludCBmaWx0ZXJfaW50ZXJ2YWw7CisJdW5zaWduZWQgaW50IGZpbHRlcl9lbmFibGU7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgbmk2NTI3X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgbmk2NTI3X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CisKK3N0YXRpYyBpbnQgbmk2NTI3X2RpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGludCBpbnRlcnZhbDsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfRklMVEVSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzFdKSB7CisJCWludGVydmFsID0gKGRhdGFbMV0gKyAxMDApIC8gMjAwOworCQlkYXRhWzFdID0gaW50ZXJ2YWwgKiAyMDA7CisKKwkJaWYgKGludGVydmFsICE9IGRldnByaXYtPmZpbHRlcl9pbnRlcnZhbCkgeworCQkJd3JpdGViKGludGVydmFsICYgMHhmZiwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJRmlsdGVyX0ludGVydmFsKDApKTsKKwkJCXdyaXRlYigoaW50ZXJ2YWwgPj4gOCkgJiAweGZmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlGaWx0ZXJfSW50ZXJ2YWwoMSkpOworCQkJd3JpdGViKChpbnRlcnZhbCA+PiAxNikgJiAweDBmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlGaWx0ZXJfSW50ZXJ2YWwoMikpOworCisJCQl3cml0ZWIoQ2xySW50ZXJ2YWwsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisKKwkJCWRldnByaXYtPmZpbHRlcl9pbnRlcnZhbCA9IGludGVydmFsOworCQl9CisKKwkJZGV2cHJpdi0+ZmlsdGVyX2VuYWJsZSB8PSAxIDw8IGNoYW47CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+ZmlsdGVyX2VuYWJsZSAmPSB+KDEgPDwgY2hhbik7CisJfQorCisJd3JpdGViKGRldnByaXYtPmZpbHRlcl9lbmFibGUsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlsdGVyX0VuYWJsZSgwKSk7CisJd3JpdGViKGRldnByaXYtPmZpbHRlcl9lbmFibGUgPj4gOCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDEpKTsKKwl3cml0ZWIoZGV2cHJpdi0+ZmlsdGVyX2VuYWJsZSA+PiAxNiwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDIpKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pNjUyN19kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9SZWdpc3RlcigwKSk7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMSkpIDw8IDg7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMikpIDw8IDE2OworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisKKwkJLyogVGhlIG9wZW4gcmVsYXkgc3RhdGUgb24gdGhlIGJvYXJkIGNvb3Jlc3BvbmRzIHRvIDEsCisJCSAqIGJ1dCBpbiBDb21lZGksIGl0IGlzIHJlcHJlc2VudGVkIGJ5IDAuICovCisJCWlmIChkYXRhWzBdICYgMHgwMDAwZmYpIHsKKwkJCXdyaXRlYigocy0+c3RhdGUgXiAweGZmKSwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMykpOworCQl9CisJCWlmIChkYXRhWzBdICYgMHgwMGZmMDApIHsKKwkJCXdyaXRlYigocy0+c3RhdGUgPj4gOCkgXiAweGZmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9SZWdpc3Rlcig0KSk7CisJCX0KKwkJaWYgKGRhdGFbMF0gJiAweGZmMDAwMCkgeworCQkJd3JpdGViKChzLT5zdGF0ZSA+PiAxNikgXiAweGZmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9SZWdpc3Rlcig1KSk7CisJCX0KKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuaTY1MjdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENoYW5nZV9TdGF0dXMpOworCWlmICgoc3RhdHVzICYgTWFzdGVySW50ZXJydXB0U3RhdHVzKSA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKChzdGF0dXMgJiBFZGdlU3RhdHVzKSA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwl3cml0ZWIoQ2xyRWRnZSB8IENsck92ZXJmbG93LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG5pNjUyN19pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX09USEVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaTY1MjdfaW50cl9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvL3N0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xlYXJfUmVnaXN0ZXIpOworCXdyaXRlYihGYWxsaW5nRWRnZUludEVuYWJsZSB8IFJpc2luZ0VkZ2VJbnRFbmFibGUgfAorCQlNYXN0ZXJJbnRlcnJ1cHRFbmFibGUgfCBFZGdlSW50RW5hYmxlLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaTY1MjdfaW50cl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2ludHJfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IDA7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2ludHJfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfQ0hBTkdFX05PVElGWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZWIoZGF0YVsxXSwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDApKTsKKwl3cml0ZWIoZGF0YVsxXSA+PiA4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMSkpOworCXdyaXRlYihkYXRhWzFdID4+IDE2LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMikpOworCisJd3JpdGViKGRhdGFbMl0sCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMCkpOworCXdyaXRlYihkYXRhWzJdID4+IDgsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMSkpOworCXdyaXRlYihkYXRhWzJdID4+IDE2LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZhbGxpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDIpKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pNjUyN19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKworCXByaW50aygiY29tZWRpJWQ6IG5pNjUyNzoiLCBkZXYtPm1pbm9yKTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3Qgbmk2NTI3X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbmk2NTI3X2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCisJcHJpbnRrKCIgSUQ9MHglMDJ4IiwgcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBJRF9SZWdpc3RlcikpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMjQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pNjUyN19kaV9pbnNuX2NvbmZpZzsKKwlzLT5pbnNuX2JpdHMgPSBuaTY1MjdfZGlfaW5zbl9iaXRzOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvKiBGSVhNRTogYWN0dWFsbHkgY29uZHVjdGFuY2UgKi8KKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2JpdHMgPSBuaTY1MjdfZG9faW5zbl9iaXRzOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+ZG9fY21kdGVzdCA9IG5pNjUyN19pbnRyX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gbmk2NTI3X2ludHJfY21kOworCXMtPmNhbmNlbCA9IG5pNjUyN19pbnRyX2NhbmNlbDsKKwlzLT5pbnNuX2JpdHMgPSBuaTY1MjdfaW50cl9pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBuaTY1MjdfaW50cl9pbnNuX2NvbmZpZzsKKworCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMCkpOworCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMSkpOworCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMikpOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdyB8IENsckZpbHRlciB8IENsckludGVydmFsLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKG1pdGVfaXJxKGRldnByaXYtPm1pdGUpLCBuaTY1MjdfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgIm5pNjUyNyIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGUiKTsKKwl9IGVsc2UKKwkJZGV2LT5pcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pNjUyN19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+bWl0ZSAmJiBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcikgeworCQl3cml0ZWIoMHgwMCwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKKwl9CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPm1pdGUpIHsKKwkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pNjUyN19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlciB8fAorCQkJCXNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5fbmk2NTI3X2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmk2NTI3X2JvYXJkc1tpXS5kZXZfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pNjUyN19ib2FyZHMgKyBpOworCQkJCWRldnByaXYtPm1pdGUgPSBtaXRlOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaTY1MjcsIG5pNjUyN19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NWRhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfNjUxNC5jCisgICAgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktNjUxNAorCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IEpvbiBHcmllcnNvbiA8amRAcmVua28uY28udWs+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMiwyMDAzIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBuaV82NXh4CitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgNjV4eCBzdGF0aWMgZGlvIGJvYXJkcworQXV0aG9yOiBKb24gR3JpZXJzb24gPGpkQHJlbmtvLmNvLnVrPiwgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorU3RhdHVzOiB0ZXN0aW5nCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS02NTA5IChuaV82NXh4KSwgUFhJLTY1MDksIFBDSS02NTEwLCBQQ0ktNjUxMSwKKyAgUFhJLTY1MTEsIFBDSS02NTEyLCBQWEktNjUxMiwgUENJLTY1MTMsIFBYSS02NTEzLCBQQ0ktNjUxNCwgUFhJLTY1MTQsIFBDSS02NTE1LAorICBQWEktNjUxNSwgUENJLTY1MTYsIFBDSS02NTE3LCBQQ0ktNjUxOCwgUENJLTY1MTksIFBDSS02NTIwLCBQQ0ktNjUyMSwgUFhJLTY1MjEsCisgIFBDSS02NTI4LCBQWEktNjUyOAorVXBkYXRlZDogV2VkIE9jdCAxOCAwODo1OToxMSBFRFQgMjAwNgorCitCYXNlZCBvbiB0aGUgUENJLTY1MjcgZHJpdmVyIGJ5IGRzLgorVGhlIGludGVycnVwdCBzdWJkZXZpY2UgKHN1YmRldmljZSAzKSBpcyBwcm9iYWJseSBicm9rZW4gZm9yIGFsbCBib2FyZHMKK2V4Y2VwdCBtYXliZSB0aGUgNjUxNC4KKworKi8KKworLyoKKyAgIE1hbnVhbHMgKGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5uYXRpbnN0LmNvbS9zdXBwb3J0L21hbnVhbHMpCisKKwkzNzAxMDZiLnBkZgk2NTE0IFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsCisKKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZGVmaW5lIERFQlVHIDEKKyNkZWZpbmUgREVCVUdfRkxBR1MKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIm1pdGUuaCIKKworI2RlZmluZSBOSTY1MTRfRElPX1NJWkUgNDA5NgorI2RlZmluZSBOSTY1MTRfTUlURV9TSVpFIDQwOTYKKworI2RlZmluZSBOSV82NVhYX01BWF9OVU1fUE9SVFMgMTIKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0ID0gODsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV82NXh4X3BvcnRfb2Zmc2V0ID0gMHgxMDsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBQb3J0X0RhdGEodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0MCArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBQb3J0X1NlbGVjdCh1bnNpZ25lZCBwb3J0KQoreworCXJldHVybiAweDQxICsgcG9ydCAqIG5pXzY1eHhfcG9ydF9vZmZzZXQ7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0MiArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSh1bnNpZ25lZCBwb3J0KQoreworCXJldHVybiAweDQzICsgcG9ydCAqIG5pXzY1eHhfcG9ydF9vZmZzZXQ7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEZpbHRlcl9FbmFibGUodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0NCArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorCisjZGVmaW5lIElEX1JlZ2lzdGVyCQkJCTB4MDAKKworI2RlZmluZSBDbGVhcl9SZWdpc3RlcgkJCQkweDAxCisjZGVmaW5lIENsckVkZ2UJCQkJMHgwOAorI2RlZmluZSBDbHJPdmVyZmxvdwkJCTB4MDQKKworI2RlZmluZSBGaWx0ZXJfSW50ZXJ2YWwJCQkweDA4CisKKyNkZWZpbmUgQ2hhbmdlX1N0YXR1cwkJCQkweDAyCisjZGVmaW5lIE1hc3RlckludGVycnVwdFN0YXR1cwkJMHgwNAorI2RlZmluZSBPdmVyZmxvdwkJCTB4MDIKKyNkZWZpbmUgRWRnZVN0YXR1cwkJCTB4MDEKKworI2RlZmluZSBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wJCTB4MDMKKyNkZWZpbmUgRmFsbGluZ0VkZ2VJbnRFbmFibGUJCTB4MTAKKyNkZWZpbmUgUmlzaW5nRWRnZUludEVuYWJsZQkJMHgwOAorI2RlZmluZSBNYXN0ZXJJbnRlcnJ1cHRFbmFibGUJCTB4MDQKKyNkZWZpbmUgT3ZlcmZsb3dJbnRFbmFibGUJCTB4MDIKKyNkZWZpbmUgRWRnZUludEVuYWJsZQkJCTB4MDEKKworc3RhdGljIGludCBuaV82NXh4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pXzY1eHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbmlfNjV4eCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV82NXh4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpuaV82NXh4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpuaV82NXh4X2RldGFjaCwKK307CisKK3N0cnVjdCBuaV82NXh4X2JvYXJkIHsKKworCWludCBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBudW1fZGlvX3BvcnRzOworCXVuc2lnbmVkIG51bV9kaV9wb3J0czsKKwl1bnNpZ25lZCBudW1fZG9fcG9ydHM7CisJdW5zaWduZWQgaW52ZXJ0X291dHB1dHM6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmlfNjV4eF9ib2FyZCBuaV82NXh4X2JvYXJkc1tdID0geworCXsKKwkgICAgICBkZXZfaWQ6CTB4NzA4NSwKKwkgICAgICBuYW1lOgkicGNpLTY1MDkiLAorCSAgICAgIG51bV9kaW9fcG9ydHM6MTIsCisgICAgICBpbnZlcnRfb3V0cHV0czowfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE3MTAsCisJICAgICAgbmFtZToJInB4aS02NTA5IiwKKwkgICAgICBudW1fZGlvX3BvcnRzOjEyLAorICAgICAgaW52ZXJ0X291dHB1dHM6MH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI0LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMCIsCisgICAgICBudW1fZGlfcG9ydHM6NH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGMzLAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMSIsCisgICAgICBudW1fZGlfcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGQzLAorCSAgICAgIG5hbWU6CSJweGktNjUxMSIsCisgICAgICBudW1fZGlfcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGNjLAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMiIsCisgICAgICBudW1fZG9fcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGQyLAorCSAgICAgIG5hbWU6CSJweGktNjUxMiIsCisgICAgICBudW1fZG9fcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGM4LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMyIsCisJICAgICAgbnVtX2RvX3BvcnRzOjgsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwZDEsCisJICAgICAgbmFtZToJInB4aS02NTEzIiwKKwkgICAgICBudW1fZG9fcG9ydHM6OCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzA4OCwKKwkgICAgICBuYW1lOgkicGNpLTY1MTQiLAorCSAgICAgIG51bV9kaV9wb3J0czo0LAorCSAgICAgIG51bV9kb19wb3J0czo0LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MENELAorCSAgICAgIG5hbWU6CSJweGktNjUxNCIsCisJICAgICAgbnVtX2RpX3BvcnRzOjQsCisJICAgICAgbnVtX2RvX3BvcnRzOjQsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwODcsCisJICAgICAgbmFtZToJInBjaS02NTE1IiwKKwkgICAgICBudW1fZGlfcG9ydHM6NCwKKwkgICAgICBudW1fZG9fcG9ydHM6NCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBjOSwKKwkgICAgICBuYW1lOgkicHhpLTY1MTUiLAorCSAgICAgIG51bV9kaV9wb3J0czo0LAorCSAgICAgIG51bV9kb19wb3J0czo0LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI1LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxNiIsCisJICAgICAgbnVtX2RvX3BvcnRzOjQsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxMjYsCisJICAgICAgbmFtZToJInBjaS02NTE3IiwKKwkgICAgICBudW1fZG9fcG9ydHM6NCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzEyNywKKwkgICAgICBuYW1lOgkicGNpLTY1MTgiLAorCSAgICAgIG51bV9kaV9wb3J0czoyLAorCSAgICAgIG51bV9kb19wb3J0czoyLAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI4LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxOSIsCisJICAgICAgbnVtX2RpX3BvcnRzOjIsCisJICAgICAgbnVtX2RvX3BvcnRzOjIsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxYzUsCisJICAgICAgbmFtZToJInBjaS02NTIwIiwKKwkgICAgICBudW1fZGlfcG9ydHM6MSwKKwkgICAgICBudW1fZG9fcG9ydHM6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxOGIsCisJICAgICAgbmFtZToJInBjaS02NTIxIiwKKwkgICAgICBudW1fZGlfcG9ydHM6MSwKKwkgICAgICBudW1fZG9fcG9ydHM6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxOGMsCisJICAgICAgbmFtZToJInB4aS02NTIxIiwKKwkgICAgICBudW1fZGlfcG9ydHM6MSwKKwkgICAgICBudW1fZG9fcG9ydHM6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwYTksCisJICAgICAgbmFtZToJInBjaS02NTI4IiwKKwkgICAgICBudW1fZGlfcG9ydHM6MywKKwkgICAgICBudW1fZG9fcG9ydHM6MywKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwODYsCisJICAgICAgbmFtZToJInB4aS02NTI4IiwKKwkgICAgICBudW1fZGlfcG9ydHM6MywKKwkgICAgICBudW1fZG9fcG9ydHM6MywKKwkJfSwKK307CisKKyNkZWZpbmUgbl9uaV82NXh4X2JvYXJkcyAoc2l6ZW9mKG5pXzY1eHhfYm9hcmRzKS9zaXplb2YobmlfNjV4eF9ib2FyZHNbMF0pKQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbmlfNjV4eF9ib2FyZCAqYm9hcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+Ym9hcmRfcHRyOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbCh1bnNpZ25lZCBjaGFubmVsKQoreworCXJldHVybiBjaGFubmVsIC8gbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfNjV4eF90b3RhbF9udW1fcG9ydHMoY29uc3Qgc3RydWN0IG5pXzY1eHhfYm9hcmQgKiBib2FyZCkKK3sKKwlyZXR1cm4gYm9hcmQtPm51bV9kaW9fcG9ydHMgKyBib2FyZC0+bnVtX2RpX3BvcnRzICsgYm9hcmQtPm51bV9kb19wb3J0czsKK30KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pXzY1eHhfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE3MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzA4NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MDg2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzA4OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYzMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBjOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwY2MsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBDRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwZDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBkMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTI3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE4YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MThjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxYzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pXzY1eHhfcGNpX3RhYmxlKTsKKworc3RydWN0IG5pXzY1eHhfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCXVuc2lnbmVkIGludCBmaWx0ZXJfaW50ZXJ2YWw7CisJdW5zaWduZWQgc2hvcnQgZmlsdGVyX2VuYWJsZVtOSV82NVhYX01BWF9OVU1fUE9SVFNdOworCXVuc2lnbmVkIHNob3J0IG91dHB1dF9iaXRzW05JXzY1WFhfTUFYX05VTV9QT1JUU107CisJdW5zaWduZWQgc2hvcnQgZGlvX2RpcmVjdGlvbltOSV82NVhYX01BWF9OVU1fUE9SVFNdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfNjV4eF9wcml2YXRlICpwcml2YXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPnByaXZhdGU7Cit9CisKK3N0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlIHsKKwl1bnNpZ25lZCBiYXNlX3BvcnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlICpzcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldikKK3sKKwlyZXR1cm4gc3ViZGV2LT5wcml2YXRlOworfQorc3RhdGljIHN0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlICpuaV82NXh4X2FsbG9jX3N1YmRldmljZV9wcml2YXRlKHZvaWQpCit7CisJc3RydWN0IG5pXzY1eHhfc3ViZGV2aWNlX3ByaXZhdGUgKnN1YmRldl9wcml2YXRlID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IG5pXzY1eHhfc3ViZGV2aWNlX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3ViZGV2X3ByaXZhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHN1YmRldl9wcml2YXRlOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKKworc3RhdGljIGludCBuaV82NXh4X2NvbmZpZ19maWx0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwljb25zdCB1bnNpZ25lZCBwb3J0ID0KKwkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIG5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKGNoYW4pOworCisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfRklMVEVSKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVsxXSkgeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgZmlsdGVyX3Jlc29sdXRpb25fbnMgPSAyMDA7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfZmlsdGVyX2ludGVydmFsID0gMHhmZmZmZjsKKwkJdW5zaWduZWQgaW50ZXJ2YWwgPQorCQkJKGRhdGFbMV0gKworCQkJKGZpbHRlcl9yZXNvbHV0aW9uX25zIC8gMikpIC8gZmlsdGVyX3Jlc29sdXRpb25fbnM7CisJCWlmIChpbnRlcnZhbCA+IG1heF9maWx0ZXJfaW50ZXJ2YWwpCisJCQlpbnRlcnZhbCA9IG1heF9maWx0ZXJfaW50ZXJ2YWw7CisJCWRhdGFbMV0gPSBpbnRlcnZhbCAqIGZpbHRlcl9yZXNvbHV0aW9uX25zOworCisJCWlmIChpbnRlcnZhbCAhPSBwcml2YXRlKGRldiktPmZpbHRlcl9pbnRlcnZhbCkgeworCQkJd3JpdGViKGludGVydmFsLAorCQkJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUZpbHRlcl9JbnRlcnZhbCk7CisJCQlwcml2YXRlKGRldiktPmZpbHRlcl9pbnRlcnZhbCA9IGludGVydmFsOworCQl9CisKKwkJcHJpdmF0ZShkZXYpLT5maWx0ZXJfZW5hYmxlW3BvcnRdIHw9CisJCQkxIDw8IChjaGFuICUgbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydCk7CisJfSBlbHNlIHsKKwkJcHJpdmF0ZShkZXYpLT5maWx0ZXJfZW5hYmxlW3BvcnRdICY9CisJCQl+KDEgPDwgKGNoYW4gJSBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0KSk7CisJfQorCisJd3JpdGViKHByaXZhdGUoZGV2KS0+ZmlsdGVyX2VuYWJsZVtwb3J0XSwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUocG9ydCkpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIHBvcnQ7CisKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCXBvcnQgPSBzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ICsKKwkJbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRklMVEVSOgorCQlyZXR1cm4gbmlfNjV4eF9jb25maWdfZmlsdGVyKGRldiwgcywgaW5zbiwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJaWYgKHMtPnR5cGUgIT0gQ09NRURJX1NVQkRfRElPKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXByaXZhdGUoZGV2KS0+ZGlvX2RpcmVjdGlvbltwb3J0XSA9IENPTUVESV9PVVRQVVQ7CisJCXdyaXRlYigwLCBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9TZWxlY3QocG9ydCkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCWlmIChzLT50eXBlICE9IENPTUVESV9TVUJEX0RJTykKKwkJCXJldHVybiAtRUlOVkFMOworCQlwcml2YXRlKGRldiktPmRpb19kaXJlY3Rpb25bcG9ydF0gPSBDT01FRElfSU5QVVQ7CisJCXdyaXRlYigxLCBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9TZWxlY3QocG9ydCkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWlmIChzLT50eXBlICE9IENPTUVESV9TVUJEX0RJTykKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYXRhWzFdID0gcHJpdmF0ZShkZXYpLT5kaW9fZGlyZWN0aW9uW3BvcnRdOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgYmFzZV9iaXRmaWVsZF9jaGFubmVsOworCWNvbnN0IHVuc2lnbmVkIG1heF9wb3J0c19wZXJfYml0ZmllbGQgPSA1OworCXVuc2lnbmVkIHJlYWRfYml0cyA9IDA7CisJdW5zaWduZWQgajsKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwliYXNlX2JpdGZpZWxkX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKGogPSAwOyBqIDwgbWF4X3BvcnRzX3Blcl9iaXRmaWVsZDsgKytqKSB7CisJCWNvbnN0IHVuc2lnbmVkIHBvcnQgPQorCQkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCArCisJCQluaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKKwkJdW5zaWduZWQgYmFzZV9wb3J0X2NoYW5uZWw7CisJCXVuc2lnbmVkIHBvcnRfbWFzaywgcG9ydF9kYXRhLCBwb3J0X3JlYWRfYml0czsKKwkJaW50IGJpdHNoaWZ0OworCQlpZiAocG9ydCA+PSBuaV82NXh4X3RvdGFsX251bV9wb3J0cyhib2FyZChkZXYpKSkKKwkJCWJyZWFrOworCQliYXNlX3BvcnRfY2hhbm5lbCA9IHBvcnQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlwb3J0X21hc2sgPSBkYXRhWzBdOworCQlwb3J0X2RhdGEgPSBkYXRhWzFdOworCQliaXRzaGlmdCA9IGJhc2VfcG9ydF9jaGFubmVsIC0gYmFzZV9iaXRmaWVsZF9jaGFubmVsOworCQlpZiAoYml0c2hpZnQgPj0gMzIgfHwgYml0c2hpZnQgPD0gLTMyKQorCQkJYnJlYWs7CisJCWlmIChiaXRzaGlmdCA+IDApIHsKKwkJCXBvcnRfbWFzayA+Pj0gYml0c2hpZnQ7CisJCQlwb3J0X2RhdGEgPj49IGJpdHNoaWZ0OworCQl9IGVsc2UgeworCQkJcG9ydF9tYXNrIDw8PSAtYml0c2hpZnQ7CisJCQlwb3J0X2RhdGEgPDw9IC1iaXRzaGlmdDsKKwkJfQorCQlwb3J0X21hc2sgJj0gMHhmZjsKKwkJcG9ydF9kYXRhICY9IDB4ZmY7CisJCWlmIChwb3J0X21hc2spIHsKKwkJCXVuc2lnbmVkIGJpdHM7CisJCQlwcml2YXRlKGRldiktPm91dHB1dF9iaXRzW3BvcnRdICY9IH5wb3J0X21hc2s7CisJCQlwcml2YXRlKGRldiktPm91dHB1dF9iaXRzW3BvcnRdIHw9CisJCQkJcG9ydF9kYXRhICYgcG9ydF9tYXNrOworCQkJYml0cyA9IHByaXZhdGUoZGV2KS0+b3V0cHV0X2JpdHNbcG9ydF07CisJCQlpZiAoYm9hcmQoZGV2KS0+aW52ZXJ0X291dHB1dHMpCisJCQkJYml0cyA9IH5iaXRzOworCQkJd3JpdGViKGJpdHMsCisJCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJUG9ydF9EYXRhKHBvcnQpKTsKKy8vICAgICAgICAgICAgICAgICAgICAgIHJ0X3ByaW50aygid3JvdGUgMHgleCB0byBwb3J0ICVpXG4iLCBiaXRzLCBwb3J0KTsKKwkJfQorCQlwb3J0X3JlYWRfYml0cyA9CisJCQlyZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCVBvcnRfRGF0YShwb3J0KSk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJyZWFkIDB4JXggZnJvbSBwb3J0ICVpXG4iLCBwb3J0X3JlYWRfYml0cywgcG9ydCk7CisJCWlmIChiaXRzaGlmdCA+IDApIHsKKwkJCXBvcnRfcmVhZF9iaXRzIDw8PSBiaXRzaGlmdDsKKwkJfSBlbHNlIHsKKwkJCXBvcnRfcmVhZF9iaXRzID4+PSAtYml0c2hpZnQ7CisJCX0KKwkJcmVhZF9iaXRzIHw9IHBvcnRfcmVhZF9iaXRzOworCX0KKwlkYXRhWzFdID0gcmVhZF9iaXRzOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlfNjV4eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRiKHByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDaGFuZ2VfU3RhdHVzKTsKKwlpZiAoKHN0YXR1cyAmIE1hc3RlckludGVycnVwdFN0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCWlmICgoc3RhdHVzICYgRWRnZVN0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdywKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19PVEhFUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gMSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8vc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdywKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKwl3cml0ZWIoRmFsbGluZ0VkZ2VJbnRFbmFibGUgfCBSaXNpbmdFZGdlSW50RW5hYmxlIHwKKwkJTWFzdGVySW50ZXJydXB0RW5hYmxlIHwgRWRnZUludEVuYWJsZSwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NXh4X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd3JpdGViKDB4MDAsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9pbnRyX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSAwOworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfaW50cl9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSAhPSBJTlNOX0NPTkZJR19DSEFOR0VfTk9USUZZKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlYihkYXRhWzFdLAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgwKSk7CisJd3JpdGViKGRhdGFbMV0gPj4gOCwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCVJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMHgxMCkpOworCXdyaXRlYihkYXRhWzFdID4+IDE2LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDIwKSk7CisJd3JpdGViKGRhdGFbMV0gPj4gMjQsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDB4MzApKTsKKworCXdyaXRlYihkYXRhWzJdLAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMCkpOworCXdyaXRlYihkYXRhWzJdID4+IDgsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDEwKSk7CisJd3JpdGViKGRhdGFbMl0gPj4gMTYsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDIwKSk7CisJd3JpdGViKGRhdGFbMl0gPj4gMjQsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDMwKSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV82NXh4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBpOworCWludCByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NXh4OiIsIGRldi0+bWlub3IpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaV82NXh4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbmlfNjV4eF9maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtaXRlX3NldHVwKHByaXZhdGUoZGV2KS0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkKGRldiktPm5hbWU7CisJZGV2LT5pcnEgPSBtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpOworCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKworCXByaW50aygiIElEPTB4JTAyeCIsCisJCXJlYWRiKHByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBJRF9SZWdpc3RlcikpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWlmIChib2FyZChkZXYpLT5udW1fZGlfcG9ydHMpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9CisJCQlib2FyZChkZXYpLT5udW1fZGlfcG9ydHMgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+aW5zbl9jb25maWcgPSBuaV82NXh4X2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9kaW9faW5zbl9iaXRzOworCQlzLT5wcml2YXRlID0gbmlfNjV4eF9hbGxvY19zdWJkZXZpY2VfcHJpdmF0ZSgpOworCQlpZiAocy0+cHJpdmF0ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgPSAwOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKGJvYXJkKGRldiktPm51bV9kb19wb3J0cykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0KKwkJCWJvYXJkKGRldiktPm51bV9kb19wb3J0cyAqIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQ7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5pbnNuX2JpdHMgPSBuaV82NXh4X2Rpb19pbnNuX2JpdHM7CisJCXMtPnByaXZhdGUgPSBuaV82NXh4X2FsbG9jX3N1YmRldmljZV9wcml2YXRlKCk7CisJCWlmIChzLT5wcml2YXRlID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCA9IGJvYXJkKGRldiktPm51bV9kaV9wb3J0czsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCWlmIChib2FyZChkZXYpLT5udW1fZGlvX3BvcnRzKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0KKwkJCWJvYXJkKGRldiktPm51bV9kaW9fcG9ydHMgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+aW5zbl9jb25maWcgPSBuaV82NXh4X2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9kaW9faW5zbl9iaXRzOworCQlzLT5wcml2YXRlID0gbmlfNjV4eF9hbGxvY19zdWJkZXZpY2VfcHJpdmF0ZSgpOworCQlpZiAocy0+cHJpdmF0ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bnVtX2Rpb19wb3J0czsgKytpKSB7CisJCQkvLyBjb25maWd1cmUgYWxsIHBvcnRzIGZvciBpbnB1dAorCQkJd3JpdGViKDB4MSwKKwkJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlQb3J0X1NlbGVjdChpKSk7CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCXMtPm1heGRhdGEgPSAxOworCXMtPmRvX2NtZHRlc3QgPSBuaV82NXh4X2ludHJfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBuaV82NXh4X2ludHJfY21kOworCXMtPmNhbmNlbCA9IG5pXzY1eHhfaW50cl9jYW5jZWw7CisJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9pbnRyX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pXzY1eHhfaW50cl9pbnNuX2NvbmZpZzsKKworCWZvciAoaSA9IDA7IGkgPCBuaV82NXh4X3RvdGFsX251bV9wb3J0cyhib2FyZChkZXYpKTsgKytpKSB7CisJCXdyaXRlYigweDAwLAorCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoaSkpOworCQlpZiAoYm9hcmQoZGV2KS0+aW52ZXJ0X291dHB1dHMpCisJCQl3cml0ZWIoMHgwMSwKKwkJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9EYXRhKGkpKTsKKwkJZWxzZQorCQkJd3JpdGViKDB4MDAsCisJCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfRGF0YShpKSk7CisJfQorCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisJd3JpdGViKDB4MDAsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJLyogU2V0IGZpbHRlciBpbnRlcnZhbCB0byAwICAoMzJiaXQgcmVnKSAqLworCXdyaXRlYigweDAwMDAwMDAwLCBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgRmlsdGVyX0ludGVydmFsKTsKKworCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShkZXYtPmlycSwgbmlfNjV4eF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkibmlfNjV4eCIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2LT5pcnEgPSAwOworCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZSIpOworCX0KKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChwcml2YXRlKGRldikgJiYgcHJpdmF0ZShkZXYpLT5taXRlCisJCSYmIHByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIpIHsKKwkJd3JpdGViKDB4MDAsCisJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCU1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisJfQorCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlpZiAocHJpdmF0ZShkZXYpKSB7CisJCXVuc2lnbmVkIGk7CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgKytpKSB7CisJCQlpZiAoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpIHsKKwkJCQlrZnJlZShkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSk7CisJCQkJZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChwcml2YXRlKGRldiktPm1pdGUpIHsKKwkJCW1pdGVfdW5zZXR1cChwcml2YXRlKGRldiktPm1pdGUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBuX25pXzY1eHhfYm9hcmRzOyBpKyspIHsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBuaV82NXh4X2JvYXJkc1tpXS5kZXZfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pXzY1eHhfYm9hcmRzICsgaTsKKwkJCQlwcml2YXRlKGRldiktPm1pdGUgPSBtaXRlOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NXh4LCBuaV82NXh4X3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUzNWJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwpAQCAtMCwwICsxLDEzMjQgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL25pXzY2MHguYworICBIYXJkd2FyZSBkcml2ZXIgZm9yIE5JIDY2MHggZGV2aWNlcworCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCitEcml2ZXI6IG5pXzY2MHgKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyA2NjB4IGNvdW50ZXIvdGltZXIgYm9hcmRzCitEZXZpY2VzOgorW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjYwMSAobmlfNjYweCksIFBDSS02NjAyLCBQWEktNjYwMiwKKwlQWEktNjYwOAorQXV0aG9yOiBKLlAuIE1lbGxvciA8anBtZWxsb3JAcm9zZS1odWxtYW4uZWR1PiwKKwlIZXJtYW4uQnJ1eW5pbmNreEBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCVdpbS5NZWV1c3NlbkBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUtsYWFzLkdhZGV5bmVAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitVcGRhdGVkOiBUaHUgT2N0IDE4IDEyOjU2OjA2IEVEVCAyMDA3CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitFbmNvZGVycyB3b3JrLiAgUHVsc2VHZW5lcmF0aW9uIChib3RoIHNpbmdsZSBwdWxzZSBhbmQgcHVsc2UgdHJhaW4pCit3b3Jrcy4gQnVmZmVyZWQgY29tbWFuZHMgd29yayBmb3IgaW5wdXQgYnV0IG5vdCBvdXRwdXQuCisKK1JlZmVyZW5jZXM6CitEQVEgNjYweCBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCAgKE5JIDM3MDUwNUEtMDEpCitEQVEgNjYwMS82NjAyIFVzZXIgTWFudWFsIChOSSAzMjIxMzdCLTAxKQorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAibWl0ZS5oIgorI2luY2x1ZGUgIm5pX3Rpby5oIgorCitlbnVtIG5pXzY2MHhfY29uc3RhbnRzIHsKKwltaW5fY291bnRlcl9wZmlfY2hhbiA9IDgsCisJbWF4X2Rpb19wZmlfY2hhbiA9IDMxLAorCWNvdW50ZXJzX3Blcl9jaGlwID0gNAorfTsKKworI2RlZmluZSBOVU1fUEZJX0NIQU5ORUxTIDQwCisvLyByZWFsbHkgdGhlcmUgYXJlIG9ubHkgdXAgdG8gMyBkbWEgY2hhbm5lbHMsIGJ1dCB0aGUgcmVnaXN0ZXIgbGF5b3V0IGFsbG93cyBmb3IgNAorI2RlZmluZSBNQVhfRE1BX0NIQU5ORUwgNAorCisvKiBTZWUgUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgcGFnZSAzLjEgKi8KK2VudW0gTklfNjYweF9SZWdpc3RlciB7CisJRzBJbnRlcnJ1cHRBY2tub3dsZWRnZSwKKwlHMFN0YXR1c1JlZ2lzdGVyLAorCUcxSW50ZXJydXB0QWNrbm93bGVkZ2UsCisJRzFTdGF0dXNSZWdpc3RlciwKKwlHMDFTdGF0dXNSZWdpc3RlciwKKwlHMENvbW1hbmRSZWdpc3RlciwKKwlTVENESU9QYXJhbGxlbElucHV0LAorCUcxQ29tbWFuZFJlZ2lzdGVyLAorCUcwSFdTYXZlUmVnaXN0ZXIsCisJRzFIV1NhdmVSZWdpc3RlciwKKwlTVENESU9PdXRwdXQsCisJU1RDRElPQ29udHJvbCwKKwlHMFNXU2F2ZVJlZ2lzdGVyLAorCUcxU1dTYXZlUmVnaXN0ZXIsCisJRzBNb2RlUmVnaXN0ZXIsCisJRzAxSm9pbnRTdGF0dXMxUmVnaXN0ZXIsCisJRzFNb2RlUmVnaXN0ZXIsCisJU1RDRElPU2VyaWFsSW5wdXQsCisJRzBMb2FkQVJlZ2lzdGVyLAorCUcwMUpvaW50U3RhdHVzMlJlZ2lzdGVyLAorCUcwTG9hZEJSZWdpc3RlciwKKwlHMUxvYWRBUmVnaXN0ZXIsCisJRzFMb2FkQlJlZ2lzdGVyLAorCUcwSW5wdXRTZWxlY3RSZWdpc3RlciwKKwlHMUlucHV0U2VsZWN0UmVnaXN0ZXIsCisJRzBBdXRvaW5jcmVtZW50UmVnaXN0ZXIsCisJRzFBdXRvaW5jcmVtZW50UmVnaXN0ZXIsCisJRzAxSm9pbnRSZXNldFJlZ2lzdGVyLAorCUcwSW50ZXJydXB0RW5hYmxlLAorCUcxSW50ZXJydXB0RW5hYmxlLAorCUcwQ291bnRpbmdNb2RlUmVnaXN0ZXIsCisJRzFDb3VudGluZ01vZGVSZWdpc3RlciwKKwlHMFNlY29uZEdhdGVSZWdpc3RlciwKKwlHMVNlY29uZEdhdGVSZWdpc3RlciwKKwlHMERNQUNvbmZpZ1JlZ2lzdGVyLAorCUcwRE1BU3RhdHVzUmVnaXN0ZXIsCisJRzFETUFDb25maWdSZWdpc3RlciwKKwlHMURNQVN0YXR1c1JlZ2lzdGVyLAorCUcySW50ZXJydXB0QWNrbm93bGVkZ2UsCisJRzJTdGF0dXNSZWdpc3RlciwKKwlHM0ludGVycnVwdEFja25vd2xlZGdlLAorCUczU3RhdHVzUmVnaXN0ZXIsCisJRzIzU3RhdHVzUmVnaXN0ZXIsCisJRzJDb21tYW5kUmVnaXN0ZXIsCisJRzNDb21tYW5kUmVnaXN0ZXIsCisJRzJIV1NhdmVSZWdpc3RlciwKKwlHM0hXU2F2ZVJlZ2lzdGVyLAorCUcyU1dTYXZlUmVnaXN0ZXIsCisJRzNTV1NhdmVSZWdpc3RlciwKKwlHMk1vZGVSZWdpc3RlciwKKwlHMjNKb2ludFN0YXR1czFSZWdpc3RlciwKKwlHM01vZGVSZWdpc3RlciwKKwlHMkxvYWRBUmVnaXN0ZXIsCisJRzIzSm9pbnRTdGF0dXMyUmVnaXN0ZXIsCisJRzJMb2FkQlJlZ2lzdGVyLAorCUczTG9hZEFSZWdpc3RlciwKKwlHM0xvYWRCUmVnaXN0ZXIsCisJRzJJbnB1dFNlbGVjdFJlZ2lzdGVyLAorCUczSW5wdXRTZWxlY3RSZWdpc3RlciwKKwlHMkF1dG9pbmNyZW1lbnRSZWdpc3RlciwKKwlHM0F1dG9pbmNyZW1lbnRSZWdpc3RlciwKKwlHMjNKb2ludFJlc2V0UmVnaXN0ZXIsCisJRzJJbnRlcnJ1cHRFbmFibGUsCisJRzNJbnRlcnJ1cHRFbmFibGUsCisJRzJDb3VudGluZ01vZGVSZWdpc3RlciwKKwlHM0NvdW50aW5nTW9kZVJlZ2lzdGVyLAorCUczU2Vjb25kR2F0ZVJlZ2lzdGVyLAorCUcyU2Vjb25kR2F0ZVJlZ2lzdGVyLAorCUcyRE1BQ29uZmlnUmVnaXN0ZXIsCisJRzJETUFTdGF0dXNSZWdpc3RlciwKKwlHM0RNQUNvbmZpZ1JlZ2lzdGVyLAorCUczRE1BU3RhdHVzUmVnaXN0ZXIsCisJRElPMzJJbnB1dCwKKwlESU8zMk91dHB1dCwKKwlDbG9ja0NvbmZpZ1JlZ2lzdGVyLAorCUdsb2JhbEludGVycnVwdFN0YXR1c1JlZ2lzdGVyLAorCURNQUNvbmZpZ1JlZ2lzdGVyLAorCUdsb2JhbEludGVycnVwdENvbmZpZ1JlZ2lzdGVyLAorCUlPQ29uZmlnUmVnMF8xLAorCUlPQ29uZmlnUmVnMl8zLAorCUlPQ29uZmlnUmVnNF81LAorCUlPQ29uZmlnUmVnNl83LAorCUlPQ29uZmlnUmVnOF85LAorCUlPQ29uZmlnUmVnMTBfMTEsCisJSU9Db25maWdSZWcxMl8xMywKKwlJT0NvbmZpZ1JlZzE0XzE1LAorCUlPQ29uZmlnUmVnMTZfMTcsCisJSU9Db25maWdSZWcxOF8xOSwKKwlJT0NvbmZpZ1JlZzIwXzIxLAorCUlPQ29uZmlnUmVnMjJfMjMsCisJSU9Db25maWdSZWcyNF8yNSwKKwlJT0NvbmZpZ1JlZzI2XzI3LAorCUlPQ29uZmlnUmVnMjhfMjksCisJSU9Db25maWdSZWczMF8zMSwKKwlJT0NvbmZpZ1JlZzMyXzMzLAorCUlPQ29uZmlnUmVnMzRfMzUsCisJSU9Db25maWdSZWczNl8zNywKKwlJT0NvbmZpZ1JlZzM4XzM5LAorCU51bVJlZ2lzdGVycywKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgSU9Db25maWdSZWcodW5zaWduZWQgcGZpX2NoYW5uZWwpCit7CisJdW5zaWduZWQgcmVnID0gSU9Db25maWdSZWcwXzEgKyBwZmlfY2hhbm5lbCAvIDI7CisJQlVHX09OKHJlZyA+IElPQ29uZmlnUmVnMzhfMzkpOworCXJldHVybiByZWc7Cit9CisKK2VudW0gbmlfNjYweF9yZWdpc3Rlcl93aWR0aCB7CisJREFUQV8xQiwKKwlEQVRBXzJCLAorCURBVEFfNEIKK307CisKK2VudW0gbmlfNjYweF9yZWdpc3Rlcl9kaXJlY3Rpb24geworCU5JXzY2MHhfUkVBRCwKKwlOSV82NjB4X1dSSVRFLAorCU5JXzY2MHhfUkVBRF9XUklURQorfTsKKworZW51bSBuaV82NjB4X3BmaV9vdXRwdXRfc2VsZWN0IHsKKwlwZmlfb3V0cHV0X3NlbGVjdF9oaWdoX1ogPSAwLAorCXBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXIgPSAxLAorCXBmaV9vdXRwdXRfc2VsZWN0X2RvID0gMiwKKwludW1fcGZpX291dHB1dF9zZWxlY3RzCit9OworCitlbnVtIG5pXzY2MHhfc3ViZGV2aWNlcyB7CisJTklfNjYwWF9ESU9fU1VCREVWID0gMSwKKwlOSV82NjBYX0dQQ1RfU1VCREVWXzAgPSAyCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV82NjBYX0dQQ1RfU1VCREVWKHVuc2lnbmVkIGluZGV4KQoreworCXJldHVybiBOSV82NjBYX0dQQ1RfU1VCREVWXzAgKyBpbmRleDsKK30KKworc3RydWN0IE5JXzY2MHhSZWdpc3RlckRhdGEgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gUmVnaXN0ZXIgTmFtZQorCWludCBvZmZzZXQ7CQkvLyBPZmZzZXQgZnJvbSBiYXNlIGFkZHJlc3MgZnJvbSBHUENUIGNoaXAKKwllbnVtIG5pXzY2MHhfcmVnaXN0ZXJfZGlyZWN0aW9uIGRpcmVjdGlvbjsKKwllbnVtIG5pXzY2MHhfcmVnaXN0ZXJfd2lkdGggc2l6ZTsJLy8gMSBieXRlLCAyIGJ5dGVzLCBvciA0IGJ5dGVzCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgTklfNjYweFJlZ2lzdGVyRGF0YSByZWdpc3RlckRhdGFbTnVtUmVnaXN0ZXJzXSA9IHsKKwl7IkcwIEludGVycnVwdCBBY2tub3dsZWRnZSIsIDB4MDA0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIFN0YXR1cyBSZWdpc3RlciIsIDB4MDA0LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzEgSW50ZXJydXB0IEFja25vd2xlZGdlIiwgMHgwMDYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgwMDYsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMDEgU3RhdHVzIFJlZ2lzdGVyICIsIDB4MDA4LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzAgQ29tbWFuZCBSZWdpc3RlciIsIDB4MDBDLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IlNUQyBESU8gUGFyYWxsZWwgSW5wdXQiLCAweDAwRSwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIENvbW1hbmQgUmVnaXN0ZXIiLCAweDAwRSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgwMTAsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMSBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgwMTQsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJTVEMgRElPIE91dHB1dCIsIDB4MDE0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IlNUQyBESU8gQ29udHJvbCIsIDB4MDE2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIFNXIFNhdmUgUmVnaXN0ZXIiLCAweDAxOCwgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IkcxIFNXIFNhdmUgUmVnaXN0ZXIiLCAweDAxQywgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IkcwIE1vZGUgUmVnaXN0ZXIiLCAweDAzNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMDEgSm9pbnQgU3RhdHVzIDEgUmVnaXN0ZXIiLCAweDAzNiwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIE1vZGUgUmVnaXN0ZXIiLCAweDAzNiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJTVEMgRElPIFNlcmlhbCBJbnB1dCIsIDB4MDM4LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzAgTG9hZCBBIFJlZ2lzdGVyIiwgMHgwMzgsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzAxIEpvaW50IFN0YXR1cyAyIFJlZ2lzdGVyIiwgMHgwM0EsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMCBMb2FkIEIgUmVnaXN0ZXIiLCAweDAzQywgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMSBMb2FkIEEgUmVnaXN0ZXIiLCAweDA0MCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMSBMb2FkIEIgUmVnaXN0ZXIiLCAweDA0NCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMCBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDA0OCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDA0QSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBBdXRvaW5jcmVtZW50IFJlZ2lzdGVyIiwgMHgwODgsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgQXV0b2luY3JlbWVudCBSZWdpc3RlciIsIDB4MDhBLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwMSBKb2ludCBSZXNldCBSZWdpc3RlciIsIDB4MDkwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIEludGVycnVwdCBFbmFibGUiLCAweDA5MiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBJbnRlcnJ1cHQgRW5hYmxlIiwgMHgwOTYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgQ291bnRpbmcgTW9kZSBSZWdpc3RlciIsIDB4MEIwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcxIENvdW50aW5nIE1vZGUgUmVnaXN0ZXIiLCAweDBCMiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBTZWNvbmQgR2F0ZSBSZWdpc3RlciIsIDB4MEI0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcxIFNlY29uZCBHYXRlIFJlZ2lzdGVyIiwgMHgwQjYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgRE1BIENvbmZpZyBSZWdpc3RlciIsIDB4MEI4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIERNQSBTdGF0dXMgUmVnaXN0ZXIiLCAweDBCOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIERNQSBDb25maWcgUmVnaXN0ZXIiLCAweDBCQSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBETUEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgwQkEsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMiBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UiLCAweDEwNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBTdGF0dXMgUmVnaXN0ZXIiLCAweDEwNCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkczIEludGVycnVwdCBBY2tub3dsZWRnZSIsIDB4MTA2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIFN0YXR1cyBSZWdpc3RlciIsIDB4MTA2LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzIzIFN0YXR1cyBSZWdpc3RlciIsIDB4MTA4LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzIgQ29tbWFuZCBSZWdpc3RlciIsIDB4MTBDLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIENvbW1hbmQgUmVnaXN0ZXIiLCAweDEwRSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMTAsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMyBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMTQsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMiBTVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMTgsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMyBTVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMUMsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMiBNb2RlIFJlZ2lzdGVyIiwgMHgxMzQsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIzIEpvaW50IFN0YXR1cyAxIFJlZ2lzdGVyIiwgMHgxMzYsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMyBNb2RlIFJlZ2lzdGVyIiwgMHgxMzYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgTG9hZCBBIFJlZ2lzdGVyIiwgMHgxMzgsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzIzIEpvaW50IFN0YXR1cyAyIFJlZ2lzdGVyIiwgMHgxM0EsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMiBMb2FkIEIgUmVnaXN0ZXIiLCAweDEzQywgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMyBMb2FkIEEgUmVnaXN0ZXIiLCAweDE0MCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMyBMb2FkIEIgUmVnaXN0ZXIiLCAweDE0NCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMiBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDE0OCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDE0QSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBBdXRvaW5jcmVtZW50IFJlZ2lzdGVyIiwgMHgxODgsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzMgQXV0b2luY3JlbWVudCBSZWdpc3RlciIsIDB4MThBLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyMyBKb2ludCBSZXNldCBSZWdpc3RlciIsIDB4MTkwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIEludGVycnVwdCBFbmFibGUiLCAweDE5MiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBJbnRlcnJ1cHQgRW5hYmxlIiwgMHgxOTYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgQ291bnRpbmcgTW9kZSBSZWdpc3RlciIsIDB4MUIwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIENvdW50aW5nIE1vZGUgUmVnaXN0ZXIiLCAweDFCMiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBTZWNvbmQgR2F0ZSBSZWdpc3RlciIsIDB4MUI2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIFNlY29uZCBHYXRlIFJlZ2lzdGVyIiwgMHgxQjQsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgRE1BIENvbmZpZyBSZWdpc3RlciIsIDB4MUI4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIERNQSBTdGF0dXMgUmVnaXN0ZXIiLCAweDFCOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkczIERNQSBDb25maWcgUmVnaXN0ZXIiLCAweDFCQSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBETUEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgxQkEsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyIzMiBiaXQgRGlnaXRhbCBJbnB1dCIsIDB4NDE0LCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiMzIgYml0IERpZ2l0YWwgT3V0cHV0IiwgMHg1MTAsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiQ2xvY2sgQ29uZmlnIFJlZ2lzdGVyIiwgMHg3M0MsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiR2xvYmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIiLCAweDc1NCwgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IkRNQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIiwgMHg3NkMsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiR2xvYmFsIEludGVycnVwdCBDb25maWcgUmVnaXN0ZXIiLCAweDc3MCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMC0xIiwgMHg3N0MsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMi0zIiwgMHg3N0UsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgNC01IiwgMHg3ODAsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgNi03IiwgMHg3ODIsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgOC05IiwgMHg3ODQsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMTAtMTEiLCAweDc4NiwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAxMi0xMyIsIDB4Nzg4LCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDE0LTE1IiwgMHg3OEEsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMTYtMTciLCAweDc4QywgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAxOC0xOSIsIDB4NzhFLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDIwLTIxIiwgMHg3OTAsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMjItMjMiLCAweDc5MiwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAyNC0yNSIsIDB4Nzk0LCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDI2LTI3IiwgMHg3OTYsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMjgtMjkiLCAweDc5OCwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAzMC0zMSIsIDB4NzlBLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDMyLTMzIiwgMHg3OUMsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMzQtMzUiLCAweDc5RSwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAzNi0zNyIsIDB4N0EwLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDM4LTM5IiwgMHg3QTIsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0KK307CisKKy8vIGtpbmQgb2YgRU5BQkxFIGZvciB0aGUgc2Vjb25kIGNvdW50ZXIKK2VudW0gY2xvY2tfY29uZmlnX3JlZ2lzdGVyX2JpdHMgeworCUNvdW50ZXJTd2FwID0gMHgxIDw8IDIxCit9OworCisvLyBpb2NvbmZpZ3JlZworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpb2NvbmZpZ19iaXRzaGlmdCh1bnNpZ25lZCBwZmlfY2hhbm5lbCkKK3sKKwlpZiAocGZpX2NoYW5uZWwgJSAyKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiA4OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwZmlfb3V0cHV0X3NlbGVjdF9tYXNrKHVuc2lnbmVkIHBmaV9jaGFubmVsKQoreworCXJldHVybiAweDMgPDwgaW9jb25maWdfYml0c2hpZnQocGZpX2NoYW5uZWwpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwZmlfb3V0cHV0X3NlbGVjdF9iaXRzKHVuc2lnbmVkIHBmaV9jaGFubmVsLAorCXVuc2lnbmVkIG91dHB1dF9zZWxlY3QpCit7CisJcmV0dXJuIChvdXRwdXRfc2VsZWN0ICYgMHgzKSA8PCBpb2NvbmZpZ19iaXRzaGlmdChwZmlfY2hhbm5lbCk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBmaV9pbnB1dF9zZWxlY3RfbWFzayh1bnNpZ25lZCBwZmlfY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHg3IDw8ICg0ICsgaW9jb25maWdfYml0c2hpZnQocGZpX2NoYW5uZWwpKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGZpX2lucHV0X3NlbGVjdF9iaXRzKHVuc2lnbmVkIHBmaV9jaGFubmVsLAorCXVuc2lnbmVkIGlucHV0X3NlbGVjdCkKK3sKKwlyZXR1cm4gKGlucHV0X3NlbGVjdCAmIDB4NykgPDwgKDQgKyBpb2NvbmZpZ19iaXRzaGlmdChwZmlfY2hhbm5lbCkpOworfQorCisvLyBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciBiaXRzCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtYV9zZWxlY3RfbWFzayh1bnNpZ25lZCBkbWFfY2hhbm5lbCkKK3sKKwlCVUdfT04oZG1hX2NoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMKTsKKwlyZXR1cm4gMHgxZiA8PCAoOCAqIGRtYV9jaGFubmVsKTsKK30KK2VudW0gZG1hX3NlbGVjdGlvbiB7CisJZG1hX3NlbGVjdGlvbl9ub25lID0gMHgxZiwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtYV9zZWxlY3Rpb25fY291bnRlcih1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCUJVR19PTihjb3VudGVyX2luZGV4ID49IGNvdW50ZXJzX3Blcl9jaGlwKTsKKwlyZXR1cm4gY291bnRlcl9pbmRleDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG1hX3NlbGVjdF9iaXRzKHVuc2lnbmVkIGRtYV9jaGFubmVsLCB1bnNpZ25lZCBzZWxlY3Rpb24pCit7CisJQlVHX09OKGRtYV9jaGFubmVsID49IE1BWF9ETUFfQ0hBTk5FTCk7CisJcmV0dXJuIChzZWxlY3Rpb24gPDwgKDggKiBkbWFfY2hhbm5lbCkpICYgZG1hX3NlbGVjdF9tYXNrKGRtYV9jaGFubmVsKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG1hX3Jlc2V0X2JpdCh1bnNpZ25lZCBkbWFfY2hhbm5lbCkKK3sKKwlCVUdfT04oZG1hX2NoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMKTsKKwlyZXR1cm4gMHg4MCA8PCAoOCAqIGRtYV9jaGFubmVsKTsKK30KKworZW51bSBnbG9iYWxfaW50ZXJydXB0X3N0YXR1c19yZWdpc3Rlcl9iaXRzIHsKKwlDb3VudGVyXzBfSW50X0JpdCA9IDB4MTAwLAorCUNvdW50ZXJfMV9JbnRfQml0ID0gMHgyMDAsCisJQ291bnRlcl8yX0ludF9CaXQgPSAweDQwMCwKKwlDb3VudGVyXzNfSW50X0JpdCA9IDB4ODAwLAorCUNhc2NhZGVfSW50X0JpdCA9IDB4MjAwMDAwMDAsCisJR2xvYmFsX0ludF9CaXQgPSAweDgwMDAwMDAwCit9OworCitlbnVtIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX3JlZ2lzdGVyX2JpdHMgeworCUNhc2NhZGVfSW50X0VuYWJsZV9CaXQgPSAweDIwMDAwMDAwLAorCUdsb2JhbF9JbnRfUG9sYXJpdHlfQml0ID0gMHg0MDAwMDAwMCwKKwlHbG9iYWxfSW50X0VuYWJsZV9CaXQgPSAweDgwMDAwMDAwCit9OworCisvLyBPZmZzZXQgb2YgdGhlIEdQQ1QgY2hpcHMgZnJvbSB0aGUgYmFzZS1hZHJlc3Mgb2YgdGhlIGNhcmQKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHUENUX09GRlNFVFsyXSA9IHsgMHgwLCAweDgwMCB9OwkvKiBGaXJzdCBjaGlwIGlzIGF0IGJhc2UtYWRkcmVzcyArCisJCQkJCQkJICAgMHgwMCwgZXRjLiAqLworCisvKiBCb2FyZCBkZXNjcmlwdGlvbiovCitzdHJ1Y3QgbmlfNjYweF9ib2FyZCB7CisJdW5zaWduZWQgc2hvcnQgZGV2X2lkOwkvKiBgbHNwY2lgIHdpbGwgc2hvdyB5b3UgdGhpcyAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbl9jaGlwczsJLyogdG90YWwgbnVtYmVyIG9mIFRJTyBjaGlwcyAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaV82NjB4X2JvYXJkIG5pXzY2MHhfYm9hcmRzW10gPSB7CisJeworCSAgICAgIGRldl9pZDoJMHgyYzYwLAorCSAgICAgIG5hbWU6CSJQQ0ktNjYwMSIsCisJICAgICAgbl9jaGlwczoJMSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEzMTAsCisJICAgICAgbmFtZToJIlBDSS02NjAyIiwKKwkgICAgICBuX2NoaXBzOgkyLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTM2MCwKKwkgICAgICBuYW1lOgkiUFhJLTY2MDIiLAorCSAgICAgIG5fY2hpcHM6CTIsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgyY2MwLAorCSAgICAgIG5hbWU6CSJQWEktNjYwOCIsCisJICAgICAgbl9jaGlwczoJMiwKKwkJfSwKK307CisKKyNkZWZpbmUgTklfNjYwWF9NQVhfTlVNX0NISVBTIDIKKyNkZWZpbmUgTklfNjYwWF9NQVhfTlVNX0NPVU5URVJTIChOSV82NjBYX01BWF9OVU1fQ0hJUFMgKiBjb3VudGVyc19wZXJfY2hpcCkKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pXzY2MHhfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTMxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjYzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pXzY2MHhfcGNpX3RhYmxlKTsKKworc3RydWN0IG5pXzY2MHhfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXY7CisJdWludDY0X3QgcGZpX2RpcmVjdGlvbl9iaXRzOworCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcKKwkqbWl0ZV9yaW5nc1tOSV82NjBYX01BWF9OVU1fQ0hJUFNdW2NvdW50ZXJzX3Blcl9jaGlwXTsKKwlzcGlubG9ja190IG1pdGVfY2hhbm5lbF9sb2NrOworCXVuc2lnbmVkIGRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW05JXzY2MFhfTUFYX05VTV9DSElQU107CisJc3BpbmxvY2tfdCBzb2Z0X3JlZ19jb3B5X2xvY2s7CisJdW5zaWduZWQgc2hvcnQgcGZpX291dHB1dF9zZWxlY3RzW05VTV9QRklfQ0hBTk5FTFNdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfNjYweF9wcml2YXRlICpwcml2YXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPnByaXZhdGU7Cit9CisKKy8qIGluaXRpYWxpemVkIGluIG5pXzY2MHhfZmluZF9kZXZpY2UoKSAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbmlfNjYweF9ib2FyZCAqYm9hcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+Ym9hcmRfcHRyOworfQorCisjZGVmaW5lIG5fbmlfNjYweF9ib2FyZHMgKHNpemVvZihuaV82NjB4X2JvYXJkcykvc2l6ZW9mKG5pXzY2MHhfYm9hcmRzWzBdKSkKKworc3RhdGljIGludCBuaV82NjB4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pXzY2MHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGluaXRfdGlvX2NoaXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGlwc2V0KTsKK3N0YXRpYyB2b2lkIG5pXzY2MHhfc2VsZWN0X3BmaV9vdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHBmaV9jaGFubmVsLAorCXVuc2lnbmVkIG91dHB1dF9zZWxlY3QpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pXzY2MHggPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfNjYweCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bmlfNjYweF9hdHRhY2gsCisgICAgICBkZXRhY2g6bmlfNjYweF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NjB4LCBuaV82NjB4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgbmlfNjYweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworc3RhdGljIGludCBuaV82NjB4X3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpOworCisvKiBQb3NzaWJsZSBpbnN0cnVjdGlvbnMgZm9yIGEgR1BDVCAqLworc3RhdGljIGludCBuaV82NjB4X0dQQ1Rfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjYweF9HUENUX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzY2MHhfR1BDVF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKiBQb3NzaWJsZSBpbnN0cnVjdGlvbnMgZm9yIERpZ2l0YWwgSU8gKi8KK3N0YXRpYyBpbnQgbmlfNjYweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjYweF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfNjYweF9udW1fY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGJvYXJkKGRldiktPm5fY2hpcHMgKiBjb3VudGVyc19wZXJfY2hpcDsKK30KKworc3RhdGljIGVudW0gTklfNjYweF9SZWdpc3RlciBuaV9ncGN0X3RvXzY2MHhfcmVnaXN0ZXIoZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwllbnVtIE5JXzY2MHhfUmVnaXN0ZXIgbmlfNjYweF9yZWdpc3RlcjsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTklUSU9fRzBfQXV0b2luY3JlbWVudF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMEF1dG9pbmNyZW1lbnRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxQXV0b2luY3JlbWVudFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0F1dG9pbmNyZW1lbnRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJBdXRvaW5jcmVtZW50UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfQXV0b2luY3JlbWVudF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0F1dG9pbmNyZW1lbnRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Db21tYW5kX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwQ29tbWFuZFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0NvbW1hbmRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFDb21tYW5kUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfQ29tbWFuZF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkNvbW1hbmRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19Db21tYW5kX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczQ29tbWFuZFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0hXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBIV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9IV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxSFdTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfSFdfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkhXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0hXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNIV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU1dTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU1dfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMVNXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX1NXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJTV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19TV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczU1dTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHME1vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM01vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Mb2FkQV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMExvYWRBUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfTG9hZEFfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFMb2FkQVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0xvYWRBX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyTG9hZEFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19Mb2FkQV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0xvYWRBUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTG9hZEJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBMb2FkQlJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0xvYWRCX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxTG9hZEJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9Mb2FkQl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkxvYWRCUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfTG9hZEJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNMb2FkQlJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMElucHV0U2VsZWN0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfSW5wdXRfU2VsZWN0X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxSW5wdXRTZWxlY3RSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9JbnB1dF9TZWxlY3RfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJJbnB1dFNlbGVjdFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0lucHV0X1NlbGVjdF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0lucHV0U2VsZWN0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX1N0YXR1c19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMjNfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyM1N0YXR1c1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9Kb2ludF9SZXNldF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFKb2ludFJlc2V0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzIzX0pvaW50X1Jlc2V0X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyM0pvaW50UmVzZXRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFKb2ludFN0YXR1czFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMjNfSm9pbnRfU3RhdHVzMV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMjNKb2ludFN0YXR1czFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFKb2ludFN0YXR1czJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMjNfSm9pbnRfU3RhdHVzMl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMjNKb2ludFN0YXR1czJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Db3VudGluZ19Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwQ291bnRpbmdNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQ291bnRpbmdfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMUNvdW50aW5nTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0NvdW50aW5nX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJDb3VudGluZ01vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19Db3VudGluZ19Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczQ291bnRpbmdNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfRE1BX0NvbmZpZ19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMERNQUNvbmZpZ1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0RNQV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBETUFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9ETUFfQ29uZmlnX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxRE1BQ29uZmlnUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX1N0YXR1c19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMURNQVN0YXR1c1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0RNQV9Db25maWdfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJETUFDb25maWdSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9ETUFfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyRE1BU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfRE1BX0NvbmZpZ19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0RNQUNvbmZpZ1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0RNQV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNETUFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwSW50ZXJydXB0RW5hYmxlOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFJbnRlcnJ1cHRFbmFibGU7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkludGVycnVwdEVuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczSW50ZXJydXB0RW5hYmxlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiB1bmhhbmRsZWQgcmVnaXN0ZXIgMHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbmlfNjYweF9yZWdpc3RlcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hpcF9pbmRleCwgdW5zaWduZWQgYml0cywgZW51bSBOSV82NjB4X1JlZ2lzdGVyIHJlZykKK3sKKwl2b2lkICpjb25zdCB3cml0ZV9hZGRyZXNzID0KKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEdQQ1RfT0ZGU0VUW2NoaXBfaW5kZXhdICsKKwkJcmVnaXN0ZXJEYXRhW3JlZ10ub2Zmc2V0OworCisJc3dpdGNoIChyZWdpc3RlckRhdGFbcmVnXS5zaXplKSB7CisJY2FzZSBEQVRBXzJCOgorCQl3cml0ZXcoYml0cywgd3JpdGVfYWRkcmVzcyk7CisJCWJyZWFrOworCWNhc2UgREFUQV80QjoKKwkJd3JpdGVsKGJpdHMsIHdyaXRlX2FkZHJlc3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiAlczogYnVnISB1bmhhbmRsZWQgY2FzZSAocmVnPTB4JXgpIGluIHN3aXRjaC5cbiIsCisJCQlfX0ZJTEVfXywgX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5pXzY2MHhfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBjaGlwX2luZGV4LCBlbnVtIE5JXzY2MHhfUmVnaXN0ZXIgcmVnKQoreworCXZvaWQgKmNvbnN0IHJlYWRfYWRkcmVzcyA9CisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHUENUX09GRlNFVFtjaGlwX2luZGV4XSArCisJCXJlZ2lzdGVyRGF0YVtyZWddLm9mZnNldDsKKworCXN3aXRjaCAocmVnaXN0ZXJEYXRhW3JlZ10uc2l6ZSkgeworCWNhc2UgREFUQV8yQjoKKwkJcmV0dXJuIHJlYWR3KHJlYWRfYWRkcmVzcyk7CisJCWJyZWFrOworCWNhc2UgREFUQV80QjoKKwkJcmV0dXJuIHJlYWRsKHJlYWRfYWRkcmVzcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6ICVzOiBidWchIHVuaGFuZGxlZCBjYXNlIChyZWc9MHgleCkgaW4gc3dpdGNoLlxuIiwKKwkJCV9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIHJlZyk7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwllbnVtIE5JXzY2MHhfUmVnaXN0ZXIgbmlfNjYweF9yZWdpc3RlciA9IG5pX2dwY3RfdG9fNjYweF9yZWdpc3RlcihyZWcpOworCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjb3VudGVyLT5jaGlwX2luZGV4LCBiaXRzLAorCQluaV82NjB4X3JlZ2lzdGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX2dwY3RfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBjb3VudGVyLT5jb3VudGVyX2Rldi0+ZGV2OworCWVudW0gTklfNjYweF9SZWdpc3RlciBuaV82NjB4X3JlZ2lzdGVyID0gbmlfZ3BjdF90b182NjB4X3JlZ2lzdGVyKHJlZyk7CisJcmV0dXJuIG5pXzY2MHhfcmVhZF9yZWdpc3RlcihkZXYsIGNvdW50ZXItPmNoaXBfaW5kZXgsCisJCW5pXzY2MHhfcmVnaXN0ZXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKm1pdGVfcmluZyhzdHJ1Y3QgbmlfNjYweF9wcml2YXRlICogcHJpdiwKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwlyZXR1cm4gcHJpdi0+bWl0ZV9yaW5nc1tjb3VudGVyLT5jaGlwX2luZGV4XVtjb3VudGVyLT5jb3VudGVyX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pXzY2MHhfc2V0X2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIG1pdGVfY2hhbm5lbCwgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUoZGV2KS0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7CisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT5jaGlwX2luZGV4XSAmPQorCQl+ZG1hX3NlbGVjdF9tYXNrKG1pdGVfY2hhbm5lbCk7CisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT5jaGlwX2luZGV4XSB8PQorCQlkbWFfc2VsZWN0X2JpdHMobWl0ZV9jaGFubmVsLAorCQlkbWFfc2VsZWN0aW9uX2NvdW50ZXIoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjb3VudGVyLT5jaGlwX2luZGV4LAorCQlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPgorCQkJY2hpcF9pbmRleF0gfCBkbWFfcmVzZXRfYml0KG1pdGVfY2hhbm5lbCksCisJCURNQUNvbmZpZ1JlZ2lzdGVyKTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pXzY2MHhfdW5zZXRfZG1hX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgbWl0ZV9jaGFubmVsLCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKKwlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPmNoaXBfaW5kZXhdICY9CisJCX5kbWFfc2VsZWN0X21hc2sobWl0ZV9jaGFubmVsKTsKKwlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPmNoaXBfaW5kZXhdIHw9CisJCWRtYV9zZWxlY3RfYml0cyhtaXRlX2NoYW5uZWwsIGRtYV9zZWxlY3Rpb25fbm9uZSk7CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGNvdW50ZXItPmNoaXBfaW5kZXgsCisJCXByaXZhdGUoZGV2KS0+ZG1hX2NvbmZpZ3VyYXRpb25fc29mdF9jb3BpZXNbY291bnRlci0+CisJCQljaGlwX2luZGV4XSwgRE1BQ29uZmlnUmVnaXN0ZXIpOworCW1taW93YigpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfcmVxdWVzdF9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIGVudW0gY29tZWRpX2lvX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW47CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oY291bnRlci0+bWl0ZV9jaGFuKTsKKwltaXRlX2NoYW4gPQorCQltaXRlX3JlcXVlc3RfY2hhbm5lbChwcml2YXRlKGRldiktPm1pdGUsIG1pdGVfcmluZyhwcml2YXRlKGRldiksCisJCQljb3VudGVyKSk7CisJaWYgKG1pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGNvdW50ZXIuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW1pdGVfY2hhbi0+ZGlyID0gZGlyZWN0aW9uOworCW5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKGNvdW50ZXIsIG1pdGVfY2hhbik7CisJbmlfNjYweF9zZXRfZG1hX2NoYW5uZWwoZGV2LCBtaXRlX2NoYW4tPmNoYW5uZWwsIGNvdW50ZXIpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmlfNjYweF9yZWxlYXNlX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdmF0ZShkZXYpLT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4pIHsKKwkJc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuID0gY291bnRlci0+bWl0ZV9jaGFuOworCisJCW5pXzY2MHhfdW5zZXRfZG1hX2NoYW5uZWwoZGV2LCBtaXRlX2NoYW4tPmNoYW5uZWwsIGNvdW50ZXIpOworCQluaV90aW9fc2V0X21pdGVfY2hhbm5lbChjb3VudGVyLCBOVUxMKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwobWl0ZV9jaGFuKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXR2YWw7CisKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHN1YmRldl90b19jb3VudGVyKHMpOworLy8gICAgICBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlyZXR2YWwgPSBuaV82NjB4X3JlcXVlc3RfbWl0ZV9jaGFubmVsKGRldiwgY291bnRlciwgQ09NRURJX0lOUFVUKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkibm8gZG1hIGNoYW5uZWwgYXZhaWxhYmxlIGZvciB1c2UgYnkgY291bnRlciIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwluaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oY291bnRlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJcmV0dmFsID0gbmlfdGlvX2NtZChjb3VudGVyLCBzLT5hc3luYyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gc3ViZGV2X3RvX2NvdW50ZXIocyk7CisKKwlyZXR1cm4gbmlfdGlvX2NtZHRlc3QoY291bnRlciwgY21kKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gc3ViZGV2X3RvX2NvdW50ZXIocyk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG5pX3Rpb19jYW5jZWwoY291bnRlcik7CisJbmlfNjYweF9yZWxlYXNlX21pdGVfY2hhbm5lbChkZXYsIGNvdW50ZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90aW9fY291bnRlcnN3YXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGlwc2V0KQoreworCS8qIFNlZSBQLiAzLjUgb2YgdGhlIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1taW5nIG1hbnVhbC4gIFRoZQorCSAgIENvdW50ZXJTd2FwIGJpdCBoYXMgdG8gYmUgc2V0IG9uIHRoZSBzZWNvbmQgY2hpcCwgb3RoZXJ3aXNlCisJICAgaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBzYW1lIHBpbnMgYXMgdGhlIGZpcnN0IGNoaXAuCisJICovCisJaWYgKGNoaXBzZXQpCisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjaGlwc2V0LCBDb3VudGVyU3dhcCwKKwkJCUNsb2NrQ29uZmlnUmVnaXN0ZXIpOworCWVsc2UKKwkJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGNoaXBzZXQsIDAsIENsb2NrQ29uZmlnUmVnaXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBuaV82NjB4X2hhbmRsZV9ncGN0X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJbmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3ViZGV2X3RvX2NvdW50ZXIocyksIHMpOworCWlmIChzLT5hc3luYy0+ZXZlbnRzKSB7CisJCWlmIChzLT5hc3luYy0+CisJCQlldmVudHMgJiAoQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUiB8CisJCQkJQ09NRURJX0NCX09WRVJGTE9XKSkgeworCQkJbmlfNjYweF9jYW5jZWwoZGV2LCBzKTsKKwkJfQorCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuaV82NjB4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGk7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisJc21wX21iKCk7CisJZm9yIChpID0gMDsgaSA8IG5pXzY2MHhfbnVtX2NvdW50ZXJzKGRldik7ICsraSkgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfNjYwWF9HUENUX1NVQkRFVihpKTsKKwkJbmlfNjYweF9oYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoZGV2LCBzKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYnVmX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShtaXRlX3JpbmcocHJpdmF0ZShkZXYpLCBzdWJkZXZfdG9fY291bnRlcihzKSksCisJCXMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYWxsb2NhdGVfcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGk7CisKKwlpZiAoKHJldHZhbCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pXzY2MHhfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXR2YWw7CisJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2YXRlKGRldiktPnNvZnRfcmVnX2NvcHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkgeworCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tpXSA9IHBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYWxsb2NfbWl0ZV9yaW5ncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb3VudGVyc19wZXJfY2hpcDsgKytqKSB7CisJCQlwcml2YXRlKGRldiktPm1pdGVfcmluZ3NbaV1bal0gPQorCQkJCW1pdGVfYWxsb2NfcmluZyhwcml2YXRlKGRldiktPm1pdGUpOworCQkJaWYgKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSA9PSBOVUxMKSB7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pXzY2MHhfZnJlZV9taXRlX3JpbmdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGk7CisJdW5zaWduZWQgajsKKworCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50ZXJzX3Blcl9jaGlwOyArK2opIHsKKwkJCW1pdGVfZnJlZV9yaW5nKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHM7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NjB4OiAiLCBkZXYtPm1pbm9yKTsKKworCXJldCA9IG5pXzY2MHhfYWxsb2NhdGVfcHJpdmF0ZShkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IG5pXzY2MHhfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKKworCXJldCA9IG1pdGVfc2V0dXAyKHByaXZhdGUoZGV2KS0+bWl0ZSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljb21lZGlfc2V0X2h3X2RldihkZXYsICZwcml2YXRlKGRldiktPm1pdGUtPnBjaWRldi0+ZGV2KTsKKwlyZXQgPSBuaV82NjB4X2FsbG9jX21pdGVfcmluZ3MoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50aygiICVzICIsIGRldi0+Ym9hcmRfbmFtZSk7CisKKwlkZXYtPm5fc3ViZGV2aWNlcyA9IDIgKyBOSV82NjBYX01BWF9OVU1fQ09VTlRFUlM7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGRldi0+bl9zdWJkZXZpY2VzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogT2xkIEdFTkVSQUwtUFVSUE9TRSBDT1VOVEVSL1RJTUUgKEdQQ1QpIHN1YmRldmljZSwgbm8gbG9uZ2VyIHVzZWQgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzY2MFhfRElPX1NVQkRFVjsKKwkvKiBESUdJVEFMIEkvTyBTVUJERVZJQ0UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSBOVU1fUEZJX0NIQU5ORUxTOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gbmlfNjYweF9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gbmlfNjYweF9kaW9faW5zbl9jb25maWc7CisJcy0+aW9fYml0cyA9IDA7CQkvKiBhbGwgYml0cyBkZWZhdWx0IHRvIGlucHV0ICovCisJLy8gd2UgdXNlIHRoZSBpb2NvbmZpZyByZWdpc3RlcnMgdG8gY29udHJvbCBkaW8gZGlyZWN0aW9uLCBzbyB6ZXJvIG91dHB1dCBlbmFibGVzIGluIHN0YyBkaW8gY29udHJvbCByZWcKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgMCwgU1RDRElPQ29udHJvbCk7CisKKwlwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2ID0gbmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KGRldiwKKwkJJm5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIsICZuaV9ncGN0X3JlYWRfcmVnaXN0ZXIsCisJCW5pX2dwY3RfdmFyaWFudF82NjB4LCBuaV82NjB4X251bV9jb3VudGVycyhkZXYpKTsKKwlpZiAocHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgTklfNjYwWF9NQVhfTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzY2MFhfR1BDVF9TVUJERVYoaSk7CisJCWlmIChpIDwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KSkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEwgfAorCQkJCVNERl9DTURfUkVBRCAvKiB8IFNERl9DTURfV1JJVEUgKi8gOworCQkJcy0+bl9jaGFuID0gMzsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmZmZmZmOworCQkJcy0+aW5zbl9yZWFkID0gbmlfNjYweF9HUENUX3JpbnNuOworCQkJcy0+aW5zbl93cml0ZSA9IG5pXzY2MHhfR1BDVF93aW5zbjsKKwkJCXMtPmluc25fY29uZmlnID0gbmlfNjYweF9HUENUX2luc25fY29uZmlnOworCQkJcy0+ZG9fY21kID0gJm5pXzY2MHhfY21kOworCQkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJCXMtPmRvX2NtZHRlc3QgPSAmbmlfNjYweF9jbWR0ZXN0OworCQkJcy0+Y2FuY2VsID0gJm5pXzY2MHhfY2FuY2VsOworCQkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9CSURJUkVDVElPTkFMOworCQkJcy0+YnVmX2NoYW5nZSA9ICZuaV82NjB4X2J1Zl9jaGFuZ2U7CisJCQlzLT5wcml2YXRlID0gJnByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2ldOworCisJCQlwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXS5jaGlwX2luZGV4ID0KKwkJCQlpIC8gY291bnRlcnNfcGVyX2NoaXA7CisJCQlwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXS5jb3VudGVyX2luZGV4ID0KKwkJCQlpICUgY291bnRlcnNfcGVyX2NoaXA7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwkJaW5pdF90aW9fY2hpcChkZXYsIGkpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KTsgKytpKSB7CisJCW5pX3Rpb19pbml0X2NvdW50ZXIoJnByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkgeworCQlpZiAoaSA8IG1pbl9jb3VudGVyX3BmaV9jaGFuKQorCQkJbmlfNjYweF9zZXRfcGZpX3JvdXRpbmcoZGV2LCBpLCBwZmlfb3V0cHV0X3NlbGVjdF9kbyk7CisJCWVsc2UKKwkJCW5pXzY2MHhfc2V0X3BmaV9yb3V0aW5nKGRldiwgaSwKKwkJCQlwZmlfb3V0cHV0X3NlbGVjdF9jb3VudGVyKTsKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGksIHBmaV9vdXRwdXRfc2VsZWN0X2hpZ2hfWik7CisJfQorCS8qIHRvIGJlIHNhZmUsIHNldCBjb3VudGVyc3dhcCBiaXRzIG9uIHRpbyBjaGlwcyBhZnRlciBhbGwgdGhlIGNvdW50ZXIKKwkgICBvdXRwdXRzIGhhdmUgYmVlbiBzZXQgdG8gaGlnaCBpbXBlZGFuY2UgbW9kZSAqLworCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwkJc2V0X3Rpb19jb3VudGVyc3dhcChkZXYsIGkpOworCX0KKwlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpLAorCQkJCSZuaV82NjB4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJuaV82NjB4IiwKKwkJCQlkZXYpKSA8IDApIHsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXYtPmlycSA9IG1pdGVfaXJxKHByaXZhdGUoZGV2KS0+bWl0ZSk7CisJZ2xvYmFsX2ludGVycnVwdF9jb25maWdfYml0cyA9IEdsb2JhbF9JbnRfRW5hYmxlX0JpdDsKKwlpZiAoYm9hcmQoZGV2KS0+bl9jaGlwcyA+IDEpCisJCWdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHMgfD0gQ2FzY2FkZV9JbnRfRW5hYmxlX0JpdDsKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgZ2xvYmFsX2ludGVycnVwdF9jb25maWdfYml0cywKKwkJR2xvYmFsSW50ZXJydXB0Q29uZmlnUmVnaXN0ZXIpOworCXByaW50aygiYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG5pXzY2MHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwkvKiBGcmVlIGlycSAqLworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAocHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldikKKwkJCW5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3kocHJpdmF0ZShkZXYpLT5jb3VudGVyX2Rldik7CisJCWlmIChwcml2YXRlKGRldiktPm1pdGUpIHsKKwkJCW5pXzY2MHhfZnJlZV9taXRlX3JpbmdzKGRldik7CisJCQltaXRlX3Vuc2V0dXAocHJpdmF0ZShkZXYpLT5taXRlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmlfNjYweF9HUENUX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gbmlfdGlvX3JpbnNuKHN1YmRldl90b19jb3VudGVyKHMpLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF90aW9fY2hpcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoaXBzZXQpCit7CisJdW5zaWduZWQgaTsKKworCS8vIGluaXQgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKwlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NoaXBzZXRdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOTkVMOyArK2kpIHsKKwkJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjaGlwc2V0XSB8PQorCQkJZG1hX3NlbGVjdF9iaXRzKGksCisJCQlkbWFfc2VsZWN0aW9uX25vbmUpICYgZG1hX3NlbGVjdF9tYXNrKGkpOworCX0KKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgY2hpcHNldCwKKwkJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjaGlwc2V0XSwKKwkJRE1BQ29uZmlnUmVnaXN0ZXIpOworCWZvcihpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkKKwl7CisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjaGlwc2V0LCAwLCBJT0NvbmZpZ1JlZyhpKSk7CisJfQorfQorCitzdGF0aWMgaW50CituaV82NjB4X0dQQ1RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXJldHVybiBuaV90aW9faW5zbl9jb25maWcoc3ViZGV2X3RvX2NvdW50ZXIocyksIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfR1BDVF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIG5pX3Rpb193aW5zbihzdWJkZXZfdG9fY291bnRlcihzKSwgaW5zbiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlciB8fAorCQkJCXNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbl9uaV82NjB4X2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlfNjYweF9ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaV82NjB4X2JvYXJkcyArIGk7CisJCQkJcHJpdmF0ZShkZXYpLT5taXRlID0gbWl0ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBuaV82NjB4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGJhc2VfYml0ZmllbGRfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gQ2hlY2sgaWYgd2UgaGF2ZSB0byB3cml0ZSBzb21lIGJpdHMKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+KGRhdGFbMF0gPDwgYmFzZV9iaXRmaWVsZF9jaGFubmVsKTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKSA8PCBiYXNlX2JpdGZpZWxkX2NoYW5uZWw7CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCAwLCBzLT5zdGF0ZSwgRElPMzJPdXRwdXQpOworCX0KKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwlkYXRhWzFdID0KKwkJKG5pXzY2MHhfcmVhZF9yZWdpc3RlcihkZXYsIDAsCisJCQlESU8zMklucHV0KSA+PiBiYXNlX2JpdGZpZWxkX2NoYW5uZWwpOworCXJldHVybiAyOworfQorCitzdGF0aWMgdm9pZCBuaV82NjB4X3NlbGVjdF9wZmlfb3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwl1bnNpZ25lZCBvdXRwdXRfc2VsZWN0KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjb3VudGVyXzRfN19maXJzdF9wZmkgPSA4OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjb3VudGVyXzRfN19sYXN0X3BmaSA9IDIzOworCXVuc2lnbmVkIGFjdGl2ZV9jaGlwc2V0ID0gMDsKKwl1bnNpZ25lZCBpZGxlX2NoaXBzZXQgPSAwOworCXVuc2lnbmVkIGFjdGl2ZV9iaXRzOworCXVuc2lnbmVkIGlkbGVfYml0czsKKworCWlmKGJvYXJkKGRldiktPm5fY2hpcHMgPiAxKSB7CisJCWlmKG91dHB1dF9zZWxlY3QgPT0gcGZpX291dHB1dF9zZWxlY3RfY291bnRlciAmJgorCQkJcGZpX2NoYW5uZWwgPj0gY291bnRlcl80XzdfZmlyc3RfcGZpICYmCisJCQlwZmlfY2hhbm5lbCA8PSBjb3VudGVyXzRfN19sYXN0X3BmaSkgeworCQkJYWN0aXZlX2NoaXBzZXQgPSAxOworCQkJaWRsZV9jaGlwc2V0ID0gMDsKKwkJfWVsc2UgeworCQkJYWN0aXZlX2NoaXBzZXQgPSAwOworCQkJaWRsZV9jaGlwc2V0ID0gMTsKKwkJfQorCX0KKworCWlmKGlkbGVfY2hpcHNldCAhPSBhY3RpdmVfY2hpcHNldCkgeworCQlpZGxlX2JpdHMgPSBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCBpZGxlX2NoaXBzZXQsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJCWlkbGVfYml0cyAmPSB+cGZpX291dHB1dF9zZWxlY3RfbWFzayhwZmlfY2hhbm5lbCk7CisJCWlkbGVfYml0cyB8PSBwZmlfb3V0cHV0X3NlbGVjdF9iaXRzKHBmaV9jaGFubmVsLCBwZmlfb3V0cHV0X3NlbGVjdF9oaWdoX1opOworCQluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgaWRsZV9jaGlwc2V0LCBpZGxlX2JpdHMsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJfQorCisJYWN0aXZlX2JpdHMgPSBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCBhY3RpdmVfY2hpcHNldCwgSU9Db25maWdSZWcocGZpX2NoYW5uZWwpKTsKKwlhY3RpdmVfYml0cyAmPSB+cGZpX291dHB1dF9zZWxlY3RfbWFzayhwZmlfY2hhbm5lbCk7CisJYWN0aXZlX2JpdHMgfD0gcGZpX291dHB1dF9zZWxlY3RfYml0cyhwZmlfY2hhbm5lbCwgb3V0cHV0X3NlbGVjdCk7CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGFjdGl2ZV9jaGlwc2V0LCBhY3RpdmVfYml0cywgSU9Db25maWdSZWcocGZpX2NoYW5uZWwpKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJaWYgKHNvdXJjZSA+IG51bV9wZmlfb3V0cHV0X3NlbGVjdHMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzb3VyY2UgPT0gcGZpX291dHB1dF9zZWxlY3RfaGlnaF9aKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hhbiA8IG1pbl9jb3VudGVyX3BmaV9jaGFuKSB7CisJCWlmIChzb3VyY2UgPT0gcGZpX291dHB1dF9zZWxlY3RfY291bnRlcikKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoY2hhbiA+IG1heF9kaW9fcGZpX2NoYW4pIHsKKwkJaWYgKHNvdXJjZSA9PSBwZmlfb3V0cHV0X3NlbGVjdF9kbykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlCVUdfT04oY2hhbiA+PSBOVU1fUEZJX0NIQU5ORUxTKTsKKworCXByaXZhdGUoZGV2KS0+cGZpX291dHB1dF9zZWxlY3RzW2NoYW5dID0gc291cmNlOworCWlmIChwcml2YXRlKGRldiktPnBmaV9kaXJlY3Rpb25fYml0cyAmICgoKHVpbnQ2NF90KSAxKSA8PCBjaGFuKSkKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGNoYW4sCisJCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tjaGFuXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV82NjB4X2dldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbikKK3sKKwlCVUdfT04oY2hhbiA+PSBOVU1fUEZJX0NIQU5ORUxTKTsKKwlyZXR1cm4gcHJpdmF0ZShkZXYpLT5wZmlfb3V0cHV0X3NlbGVjdHNbY2hhbl07Cit9CisKK3N0YXRpYyB2b2lkIG5pNjYweF9jb25maWdfZmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwllbnVtIG5pX2dwY3RfZmlsdGVyX3NlbGVjdCBmaWx0ZXIpCit7CisJdW5zaWduZWQgYml0cyA9IG5pXzY2MHhfcmVhZF9yZWdpc3RlcihkZXYsIDAsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJYml0cyAmPSB+cGZpX2lucHV0X3NlbGVjdF9tYXNrKHBmaV9jaGFubmVsKTsKKwliaXRzIHw9IHBmaV9pbnB1dF9zZWxlY3RfYml0cyhwZmlfY2hhbm5lbCwgZmlsdGVyKTsKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgYml0cywgSU9Db25maWdSZWcocGZpX2NoYW5uZWwpKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcHJpdmF0ZShkZXYpLT5wZmlfZGlyZWN0aW9uX2JpdHMgfD0gKCh1aW50NjRfdCkgMSkgPDwgY2hhbjsKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGNoYW4sCisJCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tjaGFuXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlwcml2YXRlKGRldiktPnBmaV9kaXJlY3Rpb25fYml0cyAmPSB+KCgodWludDY0X3QpIDEpIDw8IGNoYW4pOworCQluaV82NjB4X3NlbGVjdF9wZmlfb3V0cHV0KGRldiwgY2hhbiwgcGZpX291dHB1dF9zZWxlY3RfaGlnaF9aKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHByaXZhdGUoZGV2KS0+CisJCQlwZmlfZGlyZWN0aW9uX2JpdHMgJiAoKCh1aW50NjRfdCkgMSkgPDwgY2hhbikpID8KKwkJCUNPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiAwOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX1JPVVRJTkc6CisJCXJldHVybiBuaV82NjB4X3NldF9wZmlfcm91dGluZyhkZXYsIGNoYW4sIGRhdGFbMV0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9ST1VUSU5HOgorCQlkYXRhWzFdID0gbmlfNjYweF9nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19GSUxURVI6CisJCW5pNjYweF9jb25maWdfZmlsdGVyKGRldiwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9OworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzMTJlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSA2NzB4IGRldmljZXMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogbmlfNjcweAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIDY3MHgKK0F1dGhvcjogQmFydCBKb3JpcyA8YmpvcmlzQGFkdmFsdmFzLmJlPgorVXBkYXRlZDogV2VkLCAxMSBEZWMgMjAwMiAxODoyNTozNSAtMDgwMAorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjcwMyAobmlfNjcweCksIFBDSS02NzA0CitTdGF0dXM6IHVua25vd24KKworQ29tbWFuZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisqLworCisvKgorCUJhcnQgSm9yaXMgPGJqb3Jpc0BhZHZhbHZhcy5iZT4gTGFzdCB1cGRhdGVkIG9uIDIwLzA4LzIwMDEKKworCU1hbnVhbHM6CisKKwkzMjIxMTBhLnBkZglQQ0kvUFhJLTY3MDQgVXNlciBNYW51YWwKKwkzMjIxMTBiLnBkZglQQ0kvUFhJLTY3MDMvNjcwNCBVc2VyIE1hbnVhbAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJtaXRlLmgiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OQVRJTlNUCTB4MTA5MworCisjZGVmaW5lIEFPX1ZBTFVFX09GRlNFVAkJCTB4MDAKKyNkZWZpbmUJQU9fQ0hBTl9PRkZTRVQJCQkweDBjCisjZGVmaW5lCUFPX1NUQVRVU19PRkZTRVQJCTB4MTAKKyNkZWZpbmUgQU9fQ09OVFJPTF9PRkZTRVQJCTB4MTAKKyNkZWZpbmUJRElPX1BPUlQwX0RJUl9PRkZTRVQJMHgyMAorI2RlZmluZQlESU9fUE9SVDBfREFUQV9PRkZTRVQJMHgyNAorI2RlZmluZQlESU9fUE9SVDFfRElSX09GRlNFVAkweDI4CisjZGVmaW5lCURJT19QT1JUMV9EQVRBX09GRlNFVAkweDJjCisjZGVmaW5lCU1JU0NfU1RBVFVTX09GRlNFVAkJMHgxNAorI2RlZmluZQlNSVNDX0NPTlRST0xfT0ZGU0VUCQkweDE0CisKKy8qIEJvYXJkIGRlc2NyaXB0aW9uKi8KKworc3RydWN0IG5pXzY3MHhfYm9hcmQgeworCXVuc2lnbmVkIHNob3J0IGRldl9pZDsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGFvX2NoYW5zOworCXVuc2lnbmVkIHNob3J0IGFvX2JpdHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5pXzY3MHhfYm9hcmQgbmlfNjcweF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgZGV2X2lkOgkweDJjOTAsCisJICAgICAgbmFtZToJIlBDSS02NzAzIiwKKwkgICAgICBhb19jaGFuczoxNiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE5MjAsCisJICAgICAgbmFtZToJIlBYSS02NzA0IiwKKwkgICAgICBhb19jaGFuczozMiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEyOTAsCisJICAgICAgbmFtZToJIlBDSS02NzA0IiwKKwkgICAgICBhb19jaGFuczozMiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaV82NzB4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYzkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE5MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCS8veyBQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MDAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pXzY3MHhfcGNpX3RhYmxlKTsKKworI2RlZmluZSB0aGlzYm9hcmQgKChzdHJ1Y3QgbmlfNjcweF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgbmlfNjcweF9wcml2YXRlIHsKKworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgYm9hcmR0eXBlOworCWludCBkaW87CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzMyXTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG5pXzY3MHhfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgbl9uaV82NzB4X2JvYXJkcyAoc2l6ZW9mKG5pXzY3MHhfYm9hcmRzKS9zaXplb2YobmlfNjcweF9ib2FyZHNbMF0pKQorCitzdGF0aWMgaW50IG5pXzY3MHhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmlfNjcweF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pXzY3MHggPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfNjcweCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bmlfNjcweF9hdHRhY2gsCisgICAgICBkZXRhY2g6bmlfNjcweF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NzB4LCBuaV82NzB4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV8wXzIwbUEgPSB7IDEsIHtSQU5HRV9tQSgwLCAyMCl9IH07CisKK3N0YXRpYyBpbnQgbmlfNjcweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworCitzdGF0aWMgaW50IG5pXzY3MHhfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjcweF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV82NzB4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV82NzB4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfNjcweDogIiwgZGV2LT5taW5vcik7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pXzY3MHhfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBuaV82NzB4X2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisJZGV2LT5pcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKKwlwcmludGsoIiAlcyIsIGRldi0+Ym9hcmRfbmFtZSk7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCWlmIChzLT5uX2NoYW4gPT0gMzIpIHsKKwkJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKipyYW5nZV90YWJsZV9saXN0OworCisJCXJhbmdlX3RhYmxlX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAqIDMyLAorCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcmFuZ2VfdGFibGVfbGlzdCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gcmFuZ2VfdGFibGVfbGlzdDsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCXJhbmdlX3RhYmxlX2xpc3RbaV0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJcmFuZ2VfdGFibGVfbGlzdFsxNiArIGldID0gJnJhbmdlXzBfMjBtQTsKKwkJfQorCX0gZWxzZSB7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwl9CisJcy0+aW5zbl93cml0ZSA9ICZuaV82NzB4X2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZuaV82NzB4X2FvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IG5pXzY3MHhfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pXzY3MHhfZGlvX2luc25fY29uZmlnOworCisJd3JpdGVsKDB4MTAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTUlTQ19DT05UUk9MX09GRlNFVCk7CS8qIENvbmZpZyBvZiBtaXNjIHJlZ2lzdGVycyAqLworCXdyaXRlbCgweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NPTlRST0xfT0ZGU0VUKTsJLyogQ29uZmlnIG9mIGFvIHJlZ2lzdGVycyAqLworCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV82NzB4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NzB4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlc1swXS5yYW5nZV90YWJsZV9saXN0KSB7CisJCWtmcmVlKGRldi0+c3ViZGV2aWNlc1swXS5yYW5nZV90YWJsZV9saXN0KTsKKwl9CisJaWYgKGRldi0+cHJpdmF0ZSAmJiBkZXZwcml2LT5taXRlKQorCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY3MHhfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBDaGFubmVsIG51bWJlciBtYXBwaW5nIDoKKworCSAgIE5JIDY3MDMvIE5JIDY3MDQgICAgIHwgTkkgNjcwNCBPbmx5CisJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgIHZjaCgwKSAgICAgICA6ICAgICAgIDAgICAgICAgfCBpY2goMTYpICAgICAgIDogICAgICAgMQorCSAgIHZjaCgxKSAgICAgICA6ICAgICAgIDIgICAgICAgfCBpY2goMTcpICAgICAgIDogICAgICAgMworCSAgIC4gICAgOiAgICAgICAuICAgICAgIHwgICAuICAgICAgICAgICAgICAgICAgIC4KKwkgICAuICAgIDogICAgICAgLiAgICAgICB8ICAgLiAgICAgICAgICAgICAgICAgICAuCisJICAgLiAgICA6ICAgICAgIC4gICAgICAgfCAgIC4gICAgICAgICAgICAgICAgICAgLgorCSAgIHZjaCgxNSkgICAgICA6ICAgICAgIDMwICAgICAgfCBpY2goMzEpICAgICAgIDogICAgICAgMzEgICAgICAqLworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQl3cml0ZWwoKChjaGFuICYgMTUpIDw8IDEpIHwgKChjaGFuICYgMTYpID4+IDQpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NIQU5fT0ZGU0VUKTsJLyogRmlyc3Qgd3JpdGUgaW4gY2hhbm5lbCByZWdpc3RlciB3aGljaCBjaGFubmVsIHRvIHVzZSAqLworCQl3cml0ZWwoZGF0YVtpXSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19WQUxVRV9PRkZTRVQpOwkvKiB3cml0ZSBjaGFubmVsIHZhbHVlICovCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBuaV82NzB4X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJd3JpdGVsKHMtPnN0YXRlLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBESU9fUE9SVDBfREFUQV9PRkZTRVQpOworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwKKwkgKiBpbnB1dCBsaW5lcy4gKi8KKwlkYXRhWzFdID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBESU9fUE9SVDBfREFUQV9PRkZTRVQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gMSA8PCBjaGFuOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgY2hhbik7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwl3cml0ZWwocy0+aW9fYml0cywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBESU9fUE9SVDBfRElSX09GRlNFVCk7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBuaV82NzB4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7CisJaW50IGk7CisKKwlmb3IgKG1pdGUgPSBtaXRlX2RldmljZXM7IG1pdGU7IG1pdGUgPSBtaXRlLT5uZXh0KSB7CisJCWlmIChtaXRlLT51c2VkKQorCQkJY29udGludWU7CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBtaXRlLT5wY2lkZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChtaXRlLT5wY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBuX25pXzY3MHhfYm9hcmRzOyBpKyspIHsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBuaV82NzB4X2JvYXJkc1tpXS5kZXZfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pXzY3MHhfYm9hcmRzICsgaTsKKwkJCQlkZXZwcml2LT5taXRlID0gbWl0ZTsKKworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQ1YmYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKQEAgLTAsMCArMSw5MDkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtQTIxNTAgYm9hcmRzCisgICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogbmlfYXRfYTIxNTAKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1BMjE1MAorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gQVQtQTIxNTBDIChhdF9hMjE1MGMpLCBBVC0yMTUwUyAoYXRfYTIxNTBzKQorCitJZiB5b3Ugd2FudCB0byBhYyBjb3VwbGUgdGhlIGJvYXJkJ3MgaW5wdXRzLCB1c2UgQVJFRl9PVEhFUi4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIGNvbnZlcnNpb25zKQorICBbMl0gLSBETUEgKG9wdGlvbmFsLCByZXF1aXJlZCBmb3IgdGltZWQgY29udmVyc2lvbnMpCisKKyovCisvKgorWWV0IGFub3RoZXIgZHJpdmVyIGZvciBvYnNvbGV0ZSBoYXJkd2FyZSBicm91Z2h0IHRvIHlvdSBieSBGcmFuayBIZXNzLgorVGVzdGluZyBhbmQgZGVidWdnaW5nIGhlbHAgcHJvdmlkZWQgYnkgRGF2ZSBBbmRydWN6eWsuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBib2FyZHM6CisKK0FULUEyMTUwQworQVQtQTIxNTBTCisKK1RoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlaXIgbWFzdGVyIGNsb2NrIGZyZXF1ZW5jaWVzLgorCitPcHRpb25zOgorCVswXSAtIGJhc2UgaW8gYWRkcmVzcworCVsxXSAtIGlycQorCVsyXSAtIGRtYSBjaGFubmVsCisKK1JlZmVyZW5jZXMgKGZyb20gZnRwOi8vZnRwLm5hdGluc3QuY29tL3N1cHBvcnQvbWFudWFscyk6CisKKwkgICAzMjAzNjAucGRmICBBVC1BMjE1MCBVc2VyIE1hbnVhbAorCitUT0RPOgorCithbmFsb2cgbGV2ZWwgdHJpZ2dlcmluZworVFJJR19XQUtFX0VPUworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgQTIxNTBfU0laRSAgICAgICAgICAgMjgKKyNkZWZpbmUgQTIxNTBfRE1BX0JVRkZFUl9TSVpFCTB4ZmYwMAkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSBidWZmZXIKKworLy8jZGVmaW5lIEEyMTUwX0RFQlVHICAgLy8gZW5hYmxlIGRlYnVnZ2luZyBjb2RlCisjdW5kZWYgQTIxNTBfREVCVUcJCS8vIGRpc2FibGUgZGVidWdnaW5nIGNvZGUKKworLyogUmVnaXN0ZXJzIGFuZCBiaXRzICovCisjZGVmaW5lIENPTkZJR19SRUcJCTB4MAorI2RlZmluZSAgIENIQU5ORUxfQklUUyh4KQkJKCh4KSAmIDB4NykKKyNkZWZpbmUgICBDSEFOTkVMX01BU0sJCTB4NworI2RlZmluZSAgIENMT0NLX1NFTEVDVF9CSVRTKHgpCQkoKCh4KSAmIDB4MykgPDwgMykKKyNkZWZpbmUgICBDTE9DS19ESVZJU09SX0JJVFMoeCkJCSgoKHgpICYgMHgzKSA8PCA1KQorI2RlZmluZSAgIENMT0NLX01BU0sJCSgweGYgPDwgMykKKyNkZWZpbmUgICBFTkFCTEUwX0JJVAkJMHg4MAkvLyBlbmFibGUgKGRvbid0IGludGVybmFsbHkgZ3JvdW5kKSBjaGFubmVscyAwIGFuZCAxCisjZGVmaW5lICAgRU5BQkxFMV9CSVQJCTB4MTAwCS8vIGVuYWJsZSAoZG9uJ3QgaW50ZXJuYWxseSBncm91bmQpIGNoYW5uZWxzIDIgYW5kIDMKKyNkZWZpbmUgICBBQzBfQklUCQkweDIwMAkvLyBhYyBjb3VwbGUgY2hhbm5lbHMgMCwxCisjZGVmaW5lICAgQUMxX0JJVAkJMHg0MDAJLy8gYWMgY291cGxlIGNoYW5uZWxzIDIsMworI2RlZmluZSAgIEFQRF9CSVQJCTB4ODAwCS8vIGFuYWxvZyBwb3dlciBkb3duCisjZGVmaW5lICAgRFBEX0JJVAkJMHgxMDAwCS8vIGRpZ2l0YWwgcG93ZXIgZG93bgorI2RlZmluZSBUUklHR0VSX1JFRwkJMHgyCS8vIHRyaWdnZXIgY29uZmlnIHJlZ2lzdGVyCisjZGVmaW5lICAgUE9TVF9UUklHR0VSX0JJVFMJCTB4MgorI2RlZmluZSAgIERFTEFZX1RSSUdHRVJfQklUUwkJMHgzCisjZGVmaW5lICAgSFdfVFJJR19FTgkJMHgxMAkvLyBlbmFibGUgaGFyZHdhcmUgdHJpZ2dlcgorI2RlZmluZSBGSUZPX1NUQVJUX1JFRwkJMHg2CS8vIHNvZnR3YXJlIHN0YXJ0IGFxdWlzdGlvbiB0cmlnZ2VyCisjZGVmaW5lIEZJRk9fUkVTRVRfUkVHCQkweDgJLy8gY2xlYXJzIGZpZm8gKyBmaWZvIGZsYWdzCisjZGVmaW5lIEZJRk9fREFUQV9SRUcJCTB4YQkvLyByZWFkIGRhdGEKKyNkZWZpbmUgRE1BX1RDX0NMRUFSX1JFRwkJMHhlCS8vIGNsZWFyIGRtYSB0ZXJtaW5hbCBjb3VudCBpbnRlcnJ1cHQKKyNkZWZpbmUgU1RBVFVTX1JFRwkJMHgxMgkvLyByZWFkIG9ubHkKKyNkZWZpbmUgICBGTkVfQklUCQkweDEJLy8gZmlmbyBub3QgZW1wdHkKKyNkZWZpbmUgICBPVkZMX0JJVAkJMHg4CS8vIGZpZm8gb3ZlcmZsb3cKKyNkZWZpbmUgICBFREFRX0JJVAkJMHgxMAkvLyBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQKKyNkZWZpbmUgICBEQ0FMX0JJVAkJMHgyMAkvLyBvZmZzZXQgY2FsaWJyYXRpb24gaW4gcHJvZ3Jlc3MKKyNkZWZpbmUgICBJTlRSX0JJVAkJMHg0MAkvLyBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQKKyNkZWZpbmUgICBETUFfVENfQklUCQkweDgwCS8vIGRtYSB0ZXJtaW5hbCBjb3VudCBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQKKyNkZWZpbmUgICBJRF9CSVRTKHgpCSgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSBJUlFfRE1BX0NOVFJMX1JFRwkJMHgxMgkvLyB3cml0ZSBvbmx5CisjZGVmaW5lICAgRE1BX0NIQU5fQklUUyh4KQkJKCh4KSAmIDB4NykJLy8gc2V0cyBkbWEgY2hhbm5lbAorI2RlZmluZSAgIERNQV9FTl9CSVQJCTB4OAkvLyBlbmFibGVzIGRtYQorI2RlZmluZSAgIElSUV9MVkxfQklUUyh4KQkJKCgoeCkgJiAweGYpIDw8IDQpCS8vIHNldHMgaXJxIGxldmVsCisjZGVmaW5lICAgRklGT19JTlRSX0VOX0JJVAkJMHgxMDAJLy8gZW5hYmxlIGZpZm8gaW50ZXJydXB0cworI2RlZmluZSAgIEZJRk9fSU5UUl9GSEZfQklUCQkweDIwMAkvLyBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwKKyNkZWZpbmUgICBETUFfSU5UUl9FTl9CSVQgCQkweDgwMAkvLyBlbmFibGUgaW50ZXJydXB0IG9uIGRtYSB0ZXJtaW5hbCBjb3VudAorI2RlZmluZSAgIERNQV9ERU1fRU5fQklUCTB4MTAwMAkvLyBlbmFibGVzIGRlbWFuZCBtb2RlIGRtYQorI2RlZmluZSBJODI1M19CQVNFX1JFRwkJMHgxNAorI2RlZmluZSBJODI1M19NT0RFX1JFRwkJMHgxNworI2RlZmluZSAgIEhXX0NPVU5UX0RJU0FCTEUJCTB4MzAJLy8gZGlzYWJsZSBoYXJkd2FyZSBjb3VudGluZyBvZiBjb252ZXJzaW9ucworCitzdHJ1Y3QgYTIxNTBfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGNsb2NrWzRdOwkJLy8gbWFzdGVyIGNsb2NrIHBlcmlvZHMsIGluIG5hbm9zZWNvbmRzCisJaW50IG51bV9jbG9ja3M7CQkvLyBudW1iZXIgb2YgYXZhaWxhYmxlIG1hc3RlciBjbG9jayBzcGVlZHMKKwlpbnQgYWlfc3BlZWQ7CQkvLyBtYXhpbXVtIGNvbnZlcnNpb24gcmF0ZSBpbiBuYW5vc2Vjb25kcworfTsKKworLy9hbmFsb2cgaW5wdXQgcmFuZ2UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hMjE1MCA9IHsKKwkxLAorCXsKKwkJCVJBTkdFKC0yLjgyOCwgMi44MjgpLAorCQl9Cit9OworCisvLyBlbnVtIG11c3QgbWF0Y2ggYm9hcmQgaW5kaWNlcworZW51bSB7IGEyMTUwX2MsIGEyMTUwX3MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTIxNTBfYm9hcmQgYTIxNTBfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJhdC1hMjE1MGMiLAorCSAgICAgIGNsb2NrOgl7MzEyNTAsIDIyNjc2LCAyMDgzMywgMTk1MzF9LAorCSAgICAgIG51bV9jbG9ja3M6NCwKKwkgICAgICBhaV9zcGVlZDoxOTUzMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImF0LWEyMTUwcyIsCisJICAgICAgY2xvY2s6CXs2MjUwMCwgNTAwMDAsIDQxNjY3LCAwfSwKKwkgICAgICBudW1fY2xvY2tzOjMsCisJICAgICAgYWlfc3BlZWQ6NDE2NjcsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBhMjE1MF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYTIxNTBfcHJpdmF0ZSB7CisKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCisJdW5zaWduZWQgaW50IGRtYTsJLy8gZG1hIGNoYW5uZWwKKwlzMTYgKmRtYV9idWZmZXI7CS8vIGRtYSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgZG1hX3RyYW5zZmVyX3NpemU7CS8vIHNpemUgaW4gYnl0ZXMgb2YgZG1hIHRyYW5zZmVycworCWludCBpcnFfZG1hX2JpdHM7CS8vIGlycS9kbWEgcmVnaXN0ZXIgYml0cworCWludCBjb25maWdfYml0czsJLy8gY29uZmlnIHJlZ2lzdGVyIGJpdHMKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGEyMTUwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgYTIxNTBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgYTIxNTBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgYTIxNTBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2EyMTUwID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2F0X2EyMTUwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphMjE1MF9hdHRhY2gsCisgICAgICBkZXRhY2g6YTIxNTBfZGV0YWNoLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGEyMTUwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgYTIxNTBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgYTIxNTBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBhMjE1MF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhMjE1MF9nZXRfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnBlcmlvZCwKKwlpbnQgZmxhZ3MpOworc3RhdGljIGludCBhMjE1MF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGEyMTUwX3NldF9jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5uZWwsCisJdW5zaWduZWQgaW50IG51bV9jaGFubmVscyk7CisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2EyMTUwKTsKKworI2lmZGVmIEEyMTUwX0RFQlVHCisKK3N0YXRpYyB2b2lkIG5pX2R1bXBfcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlydF9wcmludGsoImNvbmZpZyBiaXRzIDB4JXhcbiIsIGRldnByaXYtPmNvbmZpZ19iaXRzKTsKKwlydF9wcmludGsoImlycSBkbWEgYml0cyAweCV4XG4iLCBkZXZwcml2LT5pcnFfZG1hX2JpdHMpOworCXJ0X3ByaW50aygic3RhdHVzIGJpdHMgMHgleFxuIiwgaW53KGRldi0+aW9iYXNlICsgU1RBVFVTX1JFRykpOworfQorCisjZW5kaWYKKworLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworc3RhdGljIGlycXJldHVybl90IGEyMTUwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBpOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BvaW50cywgbnVtX3BvaW50cywgcmVzaWR1ZSwgbGVmdG92ZXI7CisJc2hvcnQgZHBudDsKKwlzdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gc2l6ZW9mKGRldnByaXYtPmRtYV9idWZmZXJbMF0pOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCS8vIGluaXRpYWxpemUgYXN5bmMgaGVyZSB0byBtYWtlIHN1cmUgcyBpcyBub3QgTlVMTAorCWFzeW5jID0gcy0+YXN5bmM7CisJYXN5bmMtPmV2ZW50cyA9IDA7CisJY21kID0gJmFzeW5jLT5jbWQ7CisKKwlzdGF0dXMgPSBpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKTsKKworCWlmICgoc3RhdHVzICYgSU5UUl9CSVQpID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKHN0YXR1cyAmIE9WRkxfQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJmaWZvIG92ZXJmbG93Iik7CisJCWEyMTUwX2NhbmNlbChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJfQorCisJaWYgKChzdGF0dXMgJiBETUFfVENfQklUKSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJjYXVnaHQgbm9uLWRtYSBpbnRlcnJ1cHQ/ICBBYm9ydGluZy4iKTsKKwkJYTIxNTBfY2FuY2VsKGRldiwgcyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgcG9pbnRzIHRvIHJlYWQKKwltYXhfcG9pbnRzID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLyBzYW1wbGVfc2l6ZTsKKwkvKiByZXNpZHVlIGlzIHRoZSBudW1iZXIgb2YgcG9pbnRzIGxlZnQgdG8gYmUgZG9uZSBvbiB0aGUgZG1hCisJICogdHJhbnNmZXIuICBJdCBzaG91bGQgYWx3YXlzIGJlIHplcm8gYXQgdGhpcyBwb2ludCB1bmxlc3MKKwkgKiB0aGUgc3RvcF9zcmMgaXMgc2V0IHRvIGV4dGVybmFsIHRyaWdnZXJpbmcuCisJICovCisJcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWEpIC8gc2FtcGxlX3NpemU7CisJbnVtX3BvaW50cyA9IG1heF9wb2ludHMgLSByZXNpZHVlOworCWlmIChkZXZwcml2LT5jb3VudCA8IG51bV9wb2ludHMgJiYgY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQludW1fcG9pbnRzID0gZGV2cHJpdi0+Y291bnQ7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB3aWxsIGJlIHN0b3JlZCBuZXh0IHRpbWUKKwlsZWZ0b3ZlciA9IDA7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWxlZnRvdmVyID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLyBzYW1wbGVfc2l6ZTsKKwl9IGVsc2UgaWYgKGRldnByaXYtPmNvdW50ID4gbWF4X3BvaW50cykgeworCQlsZWZ0b3ZlciA9IGRldnByaXYtPmNvdW50IC0gbWF4X3BvaW50czsKKwkJaWYgKGxlZnRvdmVyID4gbWF4X3BvaW50cykKKwkJCWxlZnRvdmVyID0gbWF4X3BvaW50czsKKwl9CisJLyogdGhlcmUgc2hvdWxkIG9ubHkgYmUgYSByZXNpZHVlIGlmIGNvbGxlY3Rpb24gd2FzIHN0b3BwZWQgYnkgaGF2aW5nCisJICogdGhlIHN0b3Bfc3JjIHNldCB0byBhbiBleHRlcm5hbCB0cmlnZ2VyLCBpbiB3aGljaCBjYXNlIHRoZXJlCisJICogd2lsbCBiZSBubyBtb3JlIGRhdGEKKwkgKi8KKwlpZiAocmVzaWR1ZSkKKwkJbGVmdG92ZXIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKykgeworCQkvKiB3cml0ZSBkYXRhIHBvaW50IHRvIGNvbWVkaSBidWZmZXIgKi8KKwkJZHBudCA9IGRldnByaXYtPmRtYV9idWZmZXJbaV07CisJCS8vIGNvbnZlcnQgZnJvbSAyJ3MgY29tcGxlbWVudCB0byB1bnNpZ25lZCBjb2RpbmcKKwkJZHBudCBePSAweDgwMDA7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZHBudCk7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmICgtLWRldnByaXYtPmNvdW50ID09IDApIHsJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCisJCQkJYTIxNTBfY2FuY2VsKGRldiwgcyk7CisJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8vIHJlLWVuYWJsZSAgZG1hCisJaWYgKGxlZnRvdmVyKSB7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIHZpcnRfdG9fYnVzKGRldnByaXYtPmRtYV9idWZmZXIpKTsKKwkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGxlZnRvdmVyICogc2FtcGxlX3NpemUpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisJfQorCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCW91dHcoMHgwMCwgZGV2LT5pb2Jhc2UgKyBETUFfVENfQ0xFQVJfUkVHKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLy8gcHJvYmVzIGJvYXJkIHR5cGUsIHJldHVybnMgb2Zmc2V0CitzdGF0aWMgaW50IGEyMTUwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBzdGF0dXMgPSBpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKTsKKwlyZXR1cm4gSURfQklUUyhzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGEyMTUwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXVuc2lnbmVkIGludCBpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwl1bnNpZ25lZCBpbnQgZG1hID0gaXQtPm9wdGlvbnNbMl07CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMjAwMDsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbyAweCVseCIsIGRldi0+bWlub3IsIGRyaXZlcl9hMjE1MC5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0gZWxzZSB7CisJCXByaW50aygiLCBubyBpcnEiKTsKKwl9CisJaWYgKGRtYSkgeworCQlwcmludGsoIiwgZG1hICV1IiwgZG1hKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiwgbm8gZG1hIik7CisJfQorCXByaW50aygiXG4iKTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRldi0+cHJpdmF0ZSAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhMjE1MF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoIiBpbyBiYXNlIGFkZHJlc3MgcmVxdWlyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBBMjE1MF9TSVpFLCBkcml2ZXJfYTIxNTAuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogZ3JhYiBvdXIgSVJRICovCisJaWYgKGlycSkgeworCQkvLyBjaGVjayB0aGF0IGlycSBpcyBzdXBwb3J0ZWQKKwkJaWYgKGlycSA8IDMgfHwgaXJxID09IDggfHwgaXJxID09IDEzIHx8IGlycSA+IDE1KSB7CisJCQlwcmludGsoIiBpbnZhbGlkIGlycSBsaW5lICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGEyMTUwX2ludGVycnVwdCwgMCwKKwkJCQlkcml2ZXJfYTIxNTAuZHJpdmVyX25hbWUsIGRldikpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBJUlFfTFZMX0JJVFMoaXJxKTsKKwkJZGV2LT5pcnEgPSBpcnE7CisJfQorCS8vIGluaXRpYWxpemUgZG1hCisJaWYgKGRtYSkgeworCQlpZiAoZG1hID09IDQgfHwgZG1hID4gNykgeworCQkJcHJpbnRrKCIgaW52YWxpZCBkbWEgY2hhbm5lbCAldVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWEsIGRyaXZlcl9hMjE1MC5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAldVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmRtYSA9IGRtYTsKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlciA9CisJCQlrbWFsbG9jKEEyMTUwX0RNQV9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlciA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGlzYWJsZV9kbWEoZG1hKTsKKwkJc2V0X2RtYV9tb2RlKGRtYSwgRE1BX01PREVfUkVBRCk7CisKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IERNQV9DSEFOX0JJVFMoZG1hKTsKKwl9CisKKwlkZXYtPmJvYXJkX3B0ciA9IGEyMTUwX2JvYXJkcyArIGEyMTUwX3Byb2JlKGRldik7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX09USEVSIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2EyMTUwOworCXMtPmRvX2NtZCA9IGEyMTUwX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gYTIxNTBfYWlfY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBhMjE1MF9haV9yaW5zbjsKKwlzLT5jYW5jZWwgPSBhMjE1MF9jYW5jZWw7CisKKwkvKiBuZWVkIHRvIGRvIHRoaXMgZm9yIHNvZnR3YXJlIGNvdW50aW5nIG9mIGNvbXBsZXRlZCBjb252ZXJzaW9ucywgdG8KKwkgKiBwcmV2ZW50IGhhcmR3YXJlIGNvdW50IGZyb20gc3RvcHBpbmcgYXF1aXNpdGlvbiAqLworCW91dHcoSFdfQ09VTlRfRElTQUJMRSwgZGV2LT5pb2Jhc2UgKyBJODI1M19NT0RFX1JFRyk7CisKKwkvLyBzZXQgY2FyZCdzIGlycSBhbmQgZG1hIGxldmVscworCW91dHcoZGV2cHJpdi0+aXJxX2RtYV9iaXRzLCBkZXYtPmlvYmFzZSArIElSUV9ETUFfQ05UUkxfUkVHKTsKKworCS8vIHJlc2V0IGFuZCBzeW5jIGFkYyBjbG9jayBjaXJjdWl0cnkKKwlvdXR3X3AoRFBEX0JJVCB8IEFQRF9CSVQsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJb3V0d19wKERQRF9CSVQsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJLy8gaW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisJZGV2cHJpdi0+Y29uZmlnX2JpdHMgPSAwOworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJLy8gd2FpdCB1bnRpbCBvZmZzZXQgY2FsaWJyYXRpb24gaXMgZG9uZSwgdGhlbiBlbmFibGUgYW5hbG9nIGlucHV0cworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChEQ0FMX0JJVCAmIGludyhkZXYtPmlvYmFzZSArIFNUQVRVU19SRUcpKSA9PSAwKQorCQkJYnJlYWs7CisJCWNvbWVkaV91ZGVsYXkoMTAwMCk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcHJpbnRrKCIgdGltZWQgb3V0IHdhaXRpbmcgZm9yIG9mZnNldCBjYWxpYnJhdGlvbiB0byBjb21wbGV0ZVxuIik7CisJCXJldHVybiAtRVRJTUU7CisJfQorCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IEVOQUJMRTBfQklUIHwgRU5BQkxFMV9CSVQ7CisJb3V0dyhkZXZwcml2LT5jb25maWdfYml0cywgZGV2LT5pb2Jhc2UgKyBDT05GSUdfUkVHKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBhMjE1MF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwgZHJpdmVyX2EyMTUwLmRyaXZlcl9uYW1lKTsKKworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkgeworCQkvLyBwdXQgYm9hcmQgaW4gcG93ZXItZG93biBtb2RlCisJCW91dHcoQVBEX0JJVCB8IERQRF9CSVQsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBMjE1MF9TSVpFKTsKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+ZG1hKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJaWYgKGRldnByaXYtPmRtYV9idWZmZXIpCisJCQlrZnJlZShkZXZwcml2LT5kbWFfYnVmZmVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgYTIxNTBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy8gZGlzYWJsZSBkbWEgb24gY2FyZAorCWRldnByaXYtPmlycV9kbWFfYml0cyAmPSB+RE1BX0lOVFJfRU5fQklUICYgfkRNQV9FTl9CSVQ7CisJb3V0dyhkZXZwcml2LT5pcnFfZG1hX2JpdHMsIGRldi0+aW9iYXNlICsgSVJRX0RNQV9DTlRSTF9SRUcpOworCisJLy8gZGlzYWJsZSBjb21wdXRlcidzIGRtYQorCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisKKwkvLyBjbGVhciBmaWZvIGFuZCByZXNldCB0cmlnZ2VyaW5nIGNpcmN1aXRyeQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1JFU0VUX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwlpbnQgc3RhcnRDaGFuOworCWludCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWEyMTUwX2dldF90aW1pbmcoZGV2LCAmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlzdGFydENoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gKHN0YXJ0Q2hhbiArIGkpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDIgJiYgQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA9PSAxKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJsZW5ndGggMiBjaGFubGlzdCBtdXN0IGJlIGNoYW5uZWxzIDAsMSBvciBjaGFubmVscyAyLDMiKTsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAzKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJjaGFubGlzdCBtdXN0IGhhdmUgMSwyIG9yIDQgY2hhbm5lbHMiKTsKKwkJCWVycisrOworCQl9CisJCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pICE9IENSX0FSRUYoY21kLT5jaGFubGlzdFsxXSkgfHwKKwkJCUNSX0FSRUYoY21kLT5jaGFubGlzdFsyXSkgIT0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzNdKSkKKwkJeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY2hhbm5lbHMgMC8xIGFuZCAyLzMgbXVzdCBoYXZlIHRoZSBzYW1lIGFuYWxvZyByZWZlcmVuY2UiKTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdW5zaWduZWQgaW50IG9sZF9jb25maWdfYml0cyA9IGRldnByaXYtPmNvbmZpZ19iaXRzOworCXVuc2lnbmVkIGludCB0cmlnZ2VyX2JpdHM7CisKKwlpZiAoIWRldi0+aXJxIHx8ICFkZXZwcml2LT5kbWEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSIgaXJxIGFuZCBkbWEgcmVxdWlyZWQsIGNhbm5vdCBkbyBoYXJkd2FyZSBjb252ZXJzaW9ucyIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjbWQtPmZsYWdzICYgVFJJR19SVCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIiBkbWEgaW5jb21wYXRpYmxlIHdpdGggaGFyZCByZWFsLXRpbWUgaW50ZXJydXB0IChUUklHX1JUKSwgYWJvcnRpbmciKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvLyBjbGVhciBmaWZvIGFuZCByZXNldCB0cmlnZ2VyaW5nIGNpcmN1aXRyeQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1JFU0VUX1JFRyk7CisKKwkvKiBzZXR1cCBjaGFubGlzdCAqLworCWlmIChhMjE1MF9zZXRfY2hhbmxpc3QoZGV2LCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pLAorCQkJY21kLT5jaGFubGlzdF9sZW4pIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLy8gc2V0dXAgYWMvZGMgY291cGxpbmcKKwlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX09USEVSKQorCQlkZXZwcml2LT5jb25maWdfYml0cyB8PSBBQzBfQklUOworCWVsc2UKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgJj0gfkFDMF9CSVQ7CisJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFsyXSkgPT0gQVJFRl9PVEhFUikKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQUMxX0JJVDsKKwllbHNlCisJCWRldnByaXYtPmNvbmZpZ19iaXRzICY9IH5BQzFfQklUOworCisJLy8gc2V0dXAgdGltaW5nCisJYTIxNTBfZ2V0X3RpbWluZyhkZXYsICZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKKworCS8vIHNlbmQgdGltaW5nLCBjaGFubmVsLCBjb25maWcgYml0cworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisKKwkvLyBpbml0aWFsaXplIG51bWJlciBvZiBzYW1wbGVzIHJlbWFpbmluZworCWRldnByaXYtPmNvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCisJLy8gZW5hYmxlIGNvbXB1dGVyJ3MgZG1hCisJbG9ja19mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5kbWFfYnVmZmVyKSk7CisJLy8gc2V0IHNpemUgb2YgdHJhbnNmZXIgdG8gZmlsbCBpbiAxLzMgc2Vjb25kCisjZGVmaW5lIE9ORV9USElSRF9TRUNPTkQgMzMzMzMzMzMzCisJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPQorCQlzaXplb2YoZGV2cHJpdi0+ZG1hX2J1ZmZlclswXSkgKiBjbWQtPmNoYW5saXN0X2xlbiAqCisJCU9ORV9USElSRF9TRUNPTkQgLyBjbWQtPnNjYW5fYmVnaW5fYXJnOworCWlmIChkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA+IEEyMTUwX0RNQV9CVUZGRVJfU0laRSkKKwkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBBMjE1MF9ETUFfQlVGRkVSX1NJWkU7CisJaWYgKGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIDwgc2l6ZW9mKGRldnByaXYtPmRtYV9idWZmZXJbMF0pKQorCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA9IHNpemVvZihkZXZwcml2LT5kbWFfYnVmZmVyWzBdKTsKKwlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAtPQorCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAlIHNpemVvZihkZXZwcml2LT5kbWFfYnVmZmVyWzBdKTsKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwgZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGxvY2tfZmxhZ3MpOworCisJLyogY2xlYXIgZG1hIGludGVycnVwdCBiZWZvcmUgZW5hYmxpbmcgaXQsIHRvIHRyeSBhbmQgZ2V0IHJpZCBvZiB0aGF0CisJICogb25lIHNwdXJpb3VzIGludGVycnVwdCB0aGF0IGhhcyBiZWVuIGhhcHBlbmluZyAqLworCW91dHcoMHgwMCwgZGV2LT5pb2Jhc2UgKyBETUFfVENfQ0xFQVJfUkVHKTsKKworCS8vIGVuYWJsZSBkbWEgb24gY2FyZAorCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBETUFfSU5UUl9FTl9CSVQgfCBETUFfRU5fQklUOworCW91dHcoZGV2cHJpdi0+aXJxX2RtYV9iaXRzLCBkZXYtPmlvYmFzZSArIElSUV9ETUFfQ05UUkxfUkVHKTsKKworCS8vIG1heSBuZWVkIHRvIHdhaXQgNzIgc2FtcGxpbmcgcGVyaW9kcyBpZiB0aW1pbmcgd2FzIGNoYW5nZWQKKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgSTgyNTNfQkFTRV9SRUcsIDAsIDIsIDcyLCAwKTsKKworCS8vIHNldHVwIHN0YXJ0IHRyaWdnZXJpbmcKKwl0cmlnZ2VyX2JpdHMgPSAwOworCS8vIGRlY2lkZSBpZiB3ZSBuZWVkIHRvIHdhaXQgNzIgcGVyaW9kcyBmb3IgdmFsaWQgZGF0YQorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyAmJgorCQkob2xkX2NvbmZpZ19iaXRzICYgQ0xPQ0tfTUFTSykgIT0KKwkJKGRldnByaXYtPmNvbmZpZ19iaXRzICYgQ0xPQ0tfTUFTSykpIHsKKwkJLy8gc2V0IHRyaWdnZXIgc291cmNlIHRvIGRlbGF5IHRyaWdnZXIKKwkJdHJpZ2dlcl9iaXRzIHw9IERFTEFZX1RSSUdHRVJfQklUUzsKKwl9IGVsc2UgeworCQkvLyBvdGhlcndpc2Ugbm8gZGVsYXkKKwkJdHJpZ2dlcl9iaXRzIHw9IFBPU1RfVFJJR0dFUl9CSVRTOworCX0KKwkvLyBlbmFibGUgZXh0ZXJuYWwgaGFyZHdhcmUgdHJpZ2dlcgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQl0cmlnZ2VyX2JpdHMgfD0gSFdfVFJJR19FTjsKKwl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfT1RIRVIpIHsKKwkJLy8gWFhYIGFkZCBzdXBwb3J0IGZvciBsZXZlbC9zbG9wZSBzdGFydCB0cmlnZ2VyIHVzaW5nIFRSSUdfT1RIRVIKKwkJY29tZWRpX2Vycm9yKGRldiwgInlvdSBzaG91bGRuJ3Qgc2VlIHRoaXM/Iik7CisJfQorCS8vIHNlbmQgdHJpZ2dlciBjb25maWcgYml0cworCW91dHcodHJpZ2dlcl9iaXRzLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKKworCS8vIHN0YXJ0IGFxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlcgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgeworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19TVEFSVF9SRUcpOworCX0KKyNpZmRlZiBBMjE1MF9ERUJVRworCW5pX2R1bXBfcmVncyhkZXYpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDAwOworCXN0YXRpYyBjb25zdCBpbnQgZmlsdGVyX2RlbGF5ID0gMzY7CisKKwkvLyBjbGVhciBmaWZvIGFuZCByZXNldCB0cmlnZ2VyaW5nIGNpcmN1aXRyeQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1JFU0VUX1JFRyk7CisKKwkvKiBzZXR1cCBjaGFubGlzdCAqLworCWlmIChhMjE1MF9zZXRfY2hhbmxpc3QoZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgMSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvLyBzZXQgZGMgY291cGxpbmcKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+QUMwX0JJVDsKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+QUMxX0JJVDsKKworCS8vIHNlbmQgdGltaW5nLCBjaGFubmVsLCBjb25maWcgYml0cworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisKKwkvLyBkaXNhYmxlIGRtYSBvbiBjYXJkCisJZGV2cHJpdi0+aXJxX2RtYV9iaXRzICY9IH5ETUFfSU5UUl9FTl9CSVQgJiB+RE1BX0VOX0JJVDsKKwlvdXR3KGRldnByaXYtPmlycV9kbWFfYml0cywgZGV2LT5pb2Jhc2UgKyBJUlFfRE1BX0NOVFJMX1JFRyk7CisKKwkvLyBzZXR1cCBzdGFydCB0cmlnZ2VyaW5nCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKKworCS8vIHN0YXJ0IGFxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlcgorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1NUQVJUX1JFRyk7CisKKwkvKiB0aGVyZSBpcyBhIDM1LjYgc2FtcGxlIGRlbGF5IGZvciBkYXRhIHRvIGdldCB0aHJvdWdoIHRoZSBhbnRpYWxpYXMgZmlsdGVyICovCisJZm9yIChuID0gMDsgbiA8IGZpbHRlcl9kZWxheTsgbisrKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKSAmIEZORV9CSVQpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWludyhkZXYtPmlvYmFzZSArIEZJRk9fREFUQV9SRUcpOworCX0KKworCS8vIHJlYWQgZGF0YQorCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJaWYgKGludyhkZXYtPmlvYmFzZSArIFNUQVRVU19SRUcpICYgRk5FX0JJVCkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKyNpZmRlZiBBMjE1MF9ERUJVRworCQluaV9kdW1wX3JlZ3MoZGV2KTsKKyNlbmRpZgorCQlkYXRhW25dID0gaW53KGRldi0+aW9iYXNlICsgRklGT19EQVRBX1JFRyk7CisjaWZkZWYgQTIxNTBfREVCVUcKKwkJcnRfcHJpbnRrKCIgZGF0YSBpcyAlaVxuIiwgZGF0YVtuXSk7CisjZW5kaWYKKwkJZGF0YVtuXSBePSAweDgwMDA7CisJfQorCisJLy8gY2xlYXIgZmlmbyBhbmQgcmVzZXQgdHJpZ2dlcmluZyBjaXJjdWl0cnkKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19SRVNFVF9SRUcpOworCisJcmV0dXJuIG47Cit9CisKKy8qIHNldHMgYml0cyBpbiBkZXZwcml2LT5jbG9ja19iaXRzIHRvIG5lYXJlc3QgYXBwcm94aW1hdGlvbiBvZiByZXF1ZXN0ZWQgcGVyaW9kLAorICogYWRqdXN0cyByZXF1ZXN0ZWQgcGVyaW9kIHRvIGFjdHVhbCB0aW1pbmcuICovCitzdGF0aWMgaW50IGEyMTUwX2dldF90aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqcGVyaW9kLAorCWludCBmbGFncykKK3sKKwlpbnQgbHViLCBnbGIsIHRlbXA7CisJaW50IGx1Yl9kaXZpc29yX3NoaWZ0LCBsdWJfaW5kZXgsIGdsYl9kaXZpc29yX3NoaWZ0LCBnbGJfaW5kZXg7CisJaW50IGksIGo7CisKKwkvLyBpbml0aWFsaXplIGdyZWF0ZXN0IGxvd2VyIGFuZCBsZWFzdCB1cHBlciBib3VuZHMKKwlsdWJfZGl2aXNvcl9zaGlmdCA9IDM7CisJbHViX2luZGV4ID0gMDsKKwlsdWIgPSB0aGlzYm9hcmQtPmNsb2NrW2x1Yl9pbmRleF0gKiAoMSA8PCBsdWJfZGl2aXNvcl9zaGlmdCk7CisJZ2xiX2Rpdmlzb3Jfc2hpZnQgPSAwOworCWdsYl9pbmRleCA9IHRoaXNib2FyZC0+bnVtX2Nsb2NrcyAtIDE7CisJZ2xiID0gdGhpc2JvYXJkLT5jbG9ja1tnbGJfaW5kZXhdICogKDEgPDwgZ2xiX2Rpdmlzb3Jfc2hpZnQpOworCisJLy8gbWFrZSBzdXJlIHBlcmlvZCBpcyBpbiBhdmFpbGFibGUgcmFuZ2UKKwlpZiAoKnBlcmlvZCA8IGdsYikKKwkJKnBlcmlvZCA9IGdsYjsKKwlpZiAoKnBlcmlvZCA+IGx1YikKKwkJKnBlcmlvZCA9IGx1YjsKKworCS8vIHdlIGNhbiBtdWx0aXBseSBwZXJpb2QgYnkgMSwgMiwgNCwgb3IgOCwgdXNpbmcgKDEgPDwgaSkKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCS8vIHRoZXJlIGFyZSBhIG1heGltdW0gb2YgNCBtYXN0ZXIgY2xvY2tzCisJCWZvciAoaiA9IDA7IGogPCB0aGlzYm9hcmQtPm51bV9jbG9ja3M7IGorKykgeworCQkJLy8gdGVtcCBpcyB0aGUgcGVyaW9kIGluIG5hbm9zZWMgd2UgYXJlIGV2YWx1YXRpbmcKKwkJCXRlbXAgPSB0aGlzYm9hcmQtPmNsb2NrW2pdICogKDEgPDwgaSk7CisJCQkvLyBpZiBpdCBpcyB0aGUgYmVzdCBtYXRjaCB5ZXQKKwkJCWlmICh0ZW1wIDwgbHViICYmIHRlbXAgPj0gKnBlcmlvZCkgeworCQkJCWx1Yl9kaXZpc29yX3NoaWZ0ID0gaTsKKwkJCQlsdWJfaW5kZXggPSBqOworCQkJCWx1YiA9IHRlbXA7CisJCQl9CisJCQlpZiAodGVtcCA+IGdsYiAmJiB0ZW1wIDw9ICpwZXJpb2QpIHsKKwkJCQlnbGJfZGl2aXNvcl9zaGlmdCA9IGk7CisJCQkJZ2xiX2luZGV4ID0gajsKKwkJCQlnbGIgPSB0ZW1wOworCQkJfQorCQl9CisJfQorCWZsYWdzICY9IFRSSUdfUk9VTkRfTUFTSzsKKwlzd2l0Y2ggKGZsYWdzKSB7CisJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJZGVmYXVsdDoKKwkJLy8gaWYgbGVhc3QgdXBwZXIgYm91bmQgaXMgYmV0dGVyIGFwcHJveGltYXRpb24KKwkJaWYgKGx1YiAtICpwZXJpb2QgPCAqcGVyaW9kIC0gZ2xiKSB7CisJCQkqcGVyaW9kID0gbHViOworCQl9IGVsc2UgeworCQkJKnBlcmlvZCA9IGdsYjsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCSpwZXJpb2QgPSBsdWI7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkqcGVyaW9kID0gZ2xiOworCQlicmVhazsKKwl9CisKKwkvLyBzZXQgY2xvY2sgYml0cyBmb3IgY29uZmlnIHJlZ2lzdGVyIGFwcHJvcHJpYXRlbHkKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+Q0xPQ0tfTUFTSzsKKwlpZiAoKnBlcmlvZCA9PSBsdWIpIHsKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0KKwkJCUNMT0NLX1NFTEVDVF9CSVRTKGx1Yl9pbmRleCkgfAorCQkJQ0xPQ0tfRElWSVNPUl9CSVRTKGx1Yl9kaXZpc29yX3NoaWZ0KTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jb25maWdfYml0cyB8PQorCQkJQ0xPQ0tfU0VMRUNUX0JJVFMoZ2xiX2luZGV4KSB8CisJCQlDTE9DS19ESVZJU09SX0JJVFMoZ2xiX2Rpdmlzb3Jfc2hpZnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGEyMTUwX3NldF9jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5uZWwsCisJdW5zaWduZWQgaW50IG51bV9jaGFubmVscykKK3sKKwlpZiAoc3RhcnRfY2hhbm5lbCArIG51bV9jaGFubmVscyA+IDQpCisJCXJldHVybiAtMTsKKworCWRldnByaXYtPmNvbmZpZ19iaXRzICY9IH5DSEFOTkVMX01BU0s7CisKKwlzd2l0Y2ggKG51bV9jaGFubmVscykgeworCWNhc2UgMToKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQ0hBTk5FTF9CSVRTKDB4NCB8IHN0YXJ0X2NoYW5uZWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmIChzdGFydF9jaGFubmVsID09IDApIHsKKwkJCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IENIQU5ORUxfQklUUygweDIpOworCQl9IGVsc2UgaWYgKHN0YXJ0X2NoYW5uZWwgPT0gMikgeworCQkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQ0hBTk5FTF9CSVRTKDB4Myk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkZXZwcml2LT5jb25maWdfYml0cyB8PSBDSEFOTkVMX0JJVFMoMHgxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2FvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjNDZiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hby5jCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX2F0X2FvLmMKKyAgICBEcml2ZXIgZm9yIE5JIEFULUFPLTYvMTAgYm9hcmRzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDIgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pX2F0X2FvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtQU8tNi8xMAorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBBVC1BTy02IChhdC1hby02KSwgQVQtQU8tMTAgKGF0LWFvLTEwKQorU3RhdHVzOiBzaG91bGQgd29yaworQXV0aG9yOiBkcworVXBkYXRlZDogU3VuIERlYyAyNiAxMjoyNjoyOCBFU1QgMjAwNAorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKHVudXNlZCkKKyAgWzJdIC0gRE1BICh1bnVzZWQpCisgIFszXSAtIGFuYWxvZyBvdXRwdXQgcmFuZ2UsIHNldCBieSBqdW1wZXJzIG9uIGhhcmR3YXJlICgwIGZvciAtMTAgdG8gMTBWIGJpcG9sYXIsIDEgZm9yIDBWIHRvIDEwViB1bmlwb2xhcikKKworKi8KKy8qCisgKiBSZWdpc3Rlci1sZXZlbCBwcm9ncmFtbWluZyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTkkKKyAqIGRvY3VtZW50IDMyMDM3OS5wZGYuCisgKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKy8qIGJvYXJkIGVnaXN0ZXJzICovCisvKiByZWdpc3RlcnMgd2l0aCBfMl8gYXJlIGFjY2Vzc2VkIHdoZW4gR1JQMldSIGlzIHNldCBpbiBDRkcxICovCisKKyNkZWZpbmUgQVRBT19TSVpFIDB4MjAKKworI2RlZmluZSBBVEFPXzJfRE1BVENDTFIJCTB4MDAJLyogVyAxNiAqLworI2RlZmluZSBBVEFPX0RJTgkJMHgwMAkvKiBSIDE2ICovCisjZGVmaW5lIEFUQU9fRE9VVAkJMHgwMAkvKiBXIDE2ICovCisKKyNkZWZpbmUgQVRBT19DRkcyCQkweDAyCS8qIFcgMTYgKi8KKyNkZWZpbmUgQ0FMTEQxCTB4ODAwMAorI2RlZmluZSBDQUxMRDAJMHg0MDAwCisjZGVmaW5lIEZGUlRFTgkweDIwMDAKKyNkZWZpbmUgREFDMlM4CTB4MTAwMAorI2RlZmluZSBEQUMyUzYJMHgwODAwCisjZGVmaW5lIERBQzJTNAkweDA0MDAKKyNkZWZpbmUgREFDMlMyCTB4MDIwMAorI2RlZmluZSBEQUMyUzAJMHgwMTAwCisjZGVmaW5lIExEQUM4CQkweDAwODAKKyNkZWZpbmUgTERBQzYJCTB4MDA0MAorI2RlZmluZSBMREFDNAkJMHgwMDIwCisjZGVmaW5lIExEQUMyCQkweDAwMTAKKyNkZWZpbmUgTERBQzAJCTB4MDAwOAorI2RlZmluZSBQUk9NRU4JMHgwMDA0CisjZGVmaW5lIFNDTEsJCTB4MDAwMgorI2RlZmluZSBTREFUQQkJMHgwMDAxCisKKyNkZWZpbmUgQVRBT18yX0lOVDFDTFIJCTB4MDIJLyogVyAxNiAqLworCisjZGVmaW5lIEFUQU9fQ0ZHMwkJMHgwNAkvKiBXIDE2ICovCisjZGVmaW5lIERNQU1PREUJMHgwMDQwCisjZGVmaW5lIENMS09VVAkweDAwMjAKKyNkZWZpbmUgUkNMS0VOCTB4MDAxMAorI2RlZmluZSBET1VURU4yCTB4MDAwOAorI2RlZmluZSBET1VURU4xCTB4MDAwNAorI2RlZmluZSBFTjJfNVYJMHgwMDAyCisjZGVmaW5lIFNDQU5FTgkweDAwMDEKKworI2RlZmluZSBBVEFPXzJfSU5UMkNMUgkJMHgwNAkvKiBXIDE2ICovCisKKyNkZWZpbmUgQVRBT184MkM1M19CQVNFCQkweDA2CS8qIFJXIDggKi8KKworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFIxCTB4MDYJLyogUlcgOCAqLworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFIyCTB4MDcJLyogUlcgOCAqLworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFIzCTB4MDgJLyogUlcgOCAqLworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFJDTUQJMHgwOQkvKiBXIDggKi8KKyNkZWZpbmUgQ05UUlNFTDEJMHg4MAorI2RlZmluZSBDTlRSU0VMMAkweDQwCisjZGVmaW5lIFJXU0VMMQkweDIwCisjZGVmaW5lIFJXU0VMMAkweDEwCisjZGVmaW5lIE1PREVTRUwyCTB4MDgKKyNkZWZpbmUgTU9ERVNFTDEJMHgwNAorI2RlZmluZSBNT0RFU0VMMAkweDAyCisjZGVmaW5lIEJDRFNFTAkweDAxCisgIC8qIHJlYWQtYmFjayBjb21tYW5kICovCisjZGVmaW5lIENPVU5UCQkweDIwCisjZGVmaW5lIFNUQVRVUwkweDEwCisjZGVmaW5lIENOVFIzCQkweDA4CisjZGVmaW5lIENOVFIyCQkweDA0CisjZGVmaW5lIENOVFIxCQkweDAyCisgIC8qIHN0YXR1cyAqLworI2RlZmluZSBPVVQJCTB4ODAKKyNkZWZpbmUgX05VTEwJCTB4NDAKKyNkZWZpbmUgUlcxCQkweDIwCisjZGVmaW5lIFJXMAkJMHgxMAorI2RlZmluZSBNT0RFMgkJMHgwOAorI2RlZmluZSBNT0RFMQkJMHgwNAorI2RlZmluZSBNT0RFMAkJMHgwMgorI2RlZmluZSBCQ0QJCTB4MDEKKworI2RlZmluZSBBVEFPXzJfUlRTSVNIRlQJCTB4MDYJLyogVyA4ICovCisjZGVmaW5lIFJTSQkJMHgwMQorCisjZGVmaW5lIEFUQU9fMl9SVFNJU1RSQgkJMHgwNwkvKiBXIDggKi8KKworI2RlZmluZSBBVEFPX0NGRzEJCTB4MGEJLyogVyAxNiAqLworI2RlZmluZSBFWFRJTlQyRU4JMHg4MDAwCisjZGVmaW5lIEVYVElOVDFFTgkweDQwMDAKKyNkZWZpbmUgQ05USU5UMkVOCTB4MjAwMAorI2RlZmluZSBDTlRJTlQxRU4JMHgxMDAwCisjZGVmaW5lIFRDSU5URU4JMHgwODAwCisjZGVmaW5lIENOVDFTUkMJMHgwNDAwCisjZGVmaW5lIENOVDJTUkMJMHgwMjAwCisjZGVmaW5lIEZJRk9FTgkweDAxMDAKKyNkZWZpbmUgR1JQMldSCTB4MDA4MAorI2RlZmluZSBFWFRVUERFTgkweDAwNDAKKyNkZWZpbmUgRE1BUlEJCTB4MDAyMAorI2RlZmluZSBETUFFTgkJMHgwMDEwCisjZGVmaW5lIENIX21hc2sJMHgwMDBmCisjZGVmaW5lIEFUQU9fU1RBVFVTCQkweDBhCS8qIFIgMTYgKi8KKyNkZWZpbmUgRkgJCTB4MDA0MAorI2RlZmluZSBGRQkJMHgwMDIwCisjZGVmaW5lIEZGCQkweDAwMTAKKyNkZWZpbmUgSU5UMgkJMHgwMDA4CisjZGVmaW5lIElOVDEJCTB4MDAwNAorI2RlZmluZSBUQ0lOVAkJMHgwMDAyCisjZGVmaW5lIFBST01PVVQJMHgwMDAxCisKKyNkZWZpbmUgQVRBT19GSUZPX1dSSVRFCQkweDBjCS8qIFcgMTYgKi8KKyNkZWZpbmUgQVRBT19GSUZPX0NMRUFSCQkweDBjCS8qIFIgMTYgKi8KKyNkZWZpbmUgQVRBT19EQUNuKHgpCQkoMHgwYyArIDIqKHgpKQkvKiBXICovCisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgYXRhb19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbl9hb19jaGFuczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhb19ib2FyZCBhdGFvX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiYWktYW8tNiIsCisJICAgICAgbl9hb19jaGFuczo2LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiYWktYW8tMTAiLAorCSAgICAgIG5fYW9fY2hhbnM6MTAsCisJCX0sCit9OworCisjZGVmaW5lIHRoaXNib2FyZCAoKHN0cnVjdCBhdGFvX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBhdGFvX3ByaXZhdGUgeworCisJdW5zaWduZWQgc2hvcnQgY2ZnMTsKKwl1bnNpZ25lZCBzaG9ydCBjZmcyOworCXVuc2lnbmVkIHNob3J0IGNmZzM7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1sxMF07Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYXRhb19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGF0YW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgYXRhb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hdGFvID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2F0X2FvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphdGFvX2F0dGFjaCwKKyAgICAgIGRldGFjaDphdGFvX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmF0YW9fYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBhdGFvX2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoYXRhb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBhdGFvX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYXRhbyk7CisKK3N0YXRpYyB2b2lkIGF0YW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgaW50IGF0YW9fYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhdGFvX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19jYWxpYl9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19jYWxpYl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYXRhb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IGFvX3VuaXBvbGFyOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaWYgKGlvYmFzZSA9PSAwKQorCQlpb2Jhc2UgPSAweDFjMDsKKwlhb191bmlwb2xhciA9IGl0LT5vcHRpb25zWzNdOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfYXRfYW86IDB4JTA0bHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEFUQU9fU0laRSwgIm5pX2F0X2FvIikpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvL2Rldi0+Ym9hcmRfcHRyID0gYXRhb19wcm9iZShkZXYpOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGF0YW9fcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5uX2FvX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCWlmIChhb191bmlwb2xhcikKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwllbHNlCisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwlzLT5pbnNuX3dyaXRlID0gJmF0YW9fYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gJmF0YW9fYW9fcmluc247CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gYXRhb19kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gYXRhb19kaW9faW5zbl9jb25maWc7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBjYWxkYWMgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlzLT5uX2NoYW4gPSAyMTsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBhdGFvX2NhbGliX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gYXRhb19jYWxpYl9pbnNuX3dyaXRlOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJLyogZWVwcm9tIHN1YmRldmljZSAqLworCS8vcy0+dHlwZT1DT01FRElfU1VCRF9FRVBST007CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCWF0YW9fcmVzZXQoZGV2KTsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0YW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGF0YW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBVEFPX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0YW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogVGhpcyBpcyB0aGUgcmVzZXQgc2VxdWVuY2UgZGVzY3JpYmVkIGluIHRoZSBtYW51YWwgKi8KKworCWRldnByaXYtPmNmZzEgPSAwOworCW91dHcoZGV2cHJpdi0+Y2ZnMSwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzEpOworCisJb3V0YihSV1NFTDAgfCBNT0RFU0VMMiwgZGV2LT5pb2Jhc2UgKyBBVEFPXzgyQzUzX0NOVFJDTUQpOworCW91dGIoMHgwMywgZGV2LT5pb2Jhc2UgKyBBVEFPXzgyQzUzX0NOVFIxKTsKKwlvdXRiKENOVFJTRUwwIHwgUldTRUwwIHwgTU9ERVNFTDIsIGRldi0+aW9iYXNlICsgQVRBT184MkM1M19DTlRSQ01EKTsKKworCWRldnByaXYtPmNmZzIgPSAwOworCW91dHcoZGV2cHJpdi0+Y2ZnMiwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCisJZGV2cHJpdi0+Y2ZnMyA9IDA7CisJb3V0dyhkZXZwcml2LT5jZmczLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMyk7CisKKwlpbncoZGV2LT5pb2Jhc2UgKyBBVEFPX0ZJRk9fQ0xFQVIpOworCisJZGV2cHJpdi0+Y2ZnMSB8PSBHUlAyV1I7CisJb3V0dyhkZXZwcml2LT5jZmcxLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMSk7CisKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgQVRBT18yX0lOVDFDTFIpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBVEFPXzJfSU5UMkNMUik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFUQU9fMl9ETUFUQ0NMUik7CisKKwlkZXZwcml2LT5jZmcxICY9IH5HUlAyV1I7CisJb3V0dyhkZXZwcml2LT5jZmcxLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMSk7Cit9CisKK3N0YXRpYyBpbnQgYXRhb19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzaG9ydCBiaXRzOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQliaXRzID0gZGF0YVtpXSAtIDB4ODAwOworCQlpZiAoY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5jZmcxIHw9IEdSUDJXUjsKKwkJCW91dHcoZGV2cHJpdi0+Y2ZnMSwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzEpOworCQl9CisJCW91dHcoYml0cywgZGV2LT5pb2Jhc2UgKyBBVEFPX0RBQ24oY2hhbikpOworCQlpZiAoY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5jZmcxICY9IH5HUlAyV1I7CisJCQlvdXR3KGRldnByaXYtPmNmZzEsIGRldi0+aW9iYXNlICsgQVRBT19DRkcxKTsKKwkJfQorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRhb19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0YW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgQVRBT19ET1VUKTsKKwl9CisKKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgQVRBT19ESU4pOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYXRhb19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgaW50IG1hc2ssIGJpdDsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworCW1hc2sgPSAoY2hhbiA8IDQpID8gMHgwZiA6IDB4ZjA7CisJYml0ID0gKGNoYW4gPCA0KSA/IERPVVRFTjEgOiBET1VURU4yOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJCWRldnByaXYtPmNmZzMgfD0gYml0OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJZGV2cHJpdi0+Y2ZnMyAmPSB+Yml0OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkocy0+CisJCQlpb19iaXRzICYgKDEgPDwgY2hhbikpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlvdXR3KGRldnByaXYtPmNmZzMsIGRldi0+aW9iYXNlICsgQVRBT19DRkczKTsKKworCXJldHVybiAxOworfQorCisvKgorICogRmlndXJlIDItMSBpbiB0aGUgbWFudWFsIHNob3dzIDMgY2hpcHMgbGFiZWxlZCBEQUM4ODAwLCB3aGljaAorICogYXJlIDgtY2hhbm5lbCA4LWJpdCBEQUNzLiAgVGhlc2UgYXJlIG1vc3QgbGlrZWx5IHRoZSBjYWxpYnJhdGlvbgorICogREFDcy4gIEl0IGlzIG5vdCBleHBsaWNpdGx5IHN0YXRlZCBpbiB0aGUgbWFudWFsIGhvdyB0byBhY2Nlc3MKKyAqIHRoZSBjYWxkYWNzLCBidXQgd2UgY2FuIGd1ZXNzLgorICovCitzdGF0aWMgaW50IGF0YW9fY2FsaWJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSAwOwkvKiBYWFggKi8KKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgYXRhb19jYWxpYl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0c3RyaW5nLCBiaXQ7CisJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWJpdHN0cmluZyA9ICgoY2hhbiAmIDB4NykgPDwgOCkgfCAoZGF0YVtpbnNuLT5uIC0gMV0gJiAweGZmKTsKKworCWZvciAoYml0ID0gMSA8PCAoMTEgLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJb3V0dyhkZXZwcml2LT5jZmcyIHwgKChiaXQgJiBiaXRzdHJpbmcpID8gU0RBVEEgOiAwKSwKKwkJCWRldi0+aW9iYXNlICsgQVRBT19DRkcyKTsKKwkJb3V0dyhkZXZwcml2LT5jZmcyIHwgU0NMSyB8ICgoYml0ICYgYml0c3RyaW5nKSA/IFNEQVRBIDogMCksCisJCQlkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMik7CisJfQorCS8qIHN0cm9iZSB0aGUgYXBwcm9wcmlhdGUgY2FsZGFjICovCisJb3V0dyhkZXZwcml2LT5jZmcyIHwgKCgoY2hhbiA+PiAzKSArIDEpIDw8IDE0KSwKKwkJZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCW91dHcoZGV2cHJpdi0+Y2ZnMiwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCisJcmV0dXJuIGluc24tPm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzM4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYwpAQCAtMCwwICsxLDUxMyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSBBVC1NSU8gRSBzZXJpZXMgY2FyZHMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IG5pX2F0bWlvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtTUlPLUUgc2VyaWVzCitBdXRob3I6IGRzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIEFULU1JTy0xNkUtMSAobmlfYXRtaW8pLAorICBBVC1NSU8tMTZFLTIsIEFULU1JTy0xNkUtMTAsIEFULU1JTy0xNkRFLTEwLCBBVC1NSU8tNjRFLTMsCisgIEFULU1JTy0xNlhFLTUwLCBBVC1NSU8tMTZYRS0xMCwgQVQtQUktMTZYRS0xMAorU3RhdHVzOiB3b3JrcworVXBkYXRlZDogVGh1IE1heSAgMSAyMDowMzowMiBDRFQgMjAwMworCitUaGUgZHJpdmVyIGhhcyAyLjYga2VybmVsIGlzYXBucCBzdXBwb3J0LCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSBwcm9iZSBmb3IgYSBzdXBwb3J0ZWQgYm9hcmQgaWYgdGhlCitJL08gYmFzZSBpcyBsZWZ0IHVuc3BlY2lmaWVkIHdpdGggY29tZWRpX2NvbmZpZy4KK0hvd2V2ZXIsIG1hbnkgb2YKK3RoZSBpc2FwbnAgaWQgbnVtYmVycyBhcmUgdW5rbm93bi4gIElmIHlvdXIgYm9hcmQgaXMgbm90CityZWNvZ25pemVkLCBwbGVhc2Ugc2VuZCB0aGUgb3V0cHV0IG9mICdjYXQgL3Byb2MvaXNhcG5wJworKHlvdSBtYXkgbmVlZCB0byBtb2Rwcm9iZSB0aGUgaXNhLXBucCBtb2R1bGUgZm9yCisvcHJvYy9pc2FwbnAgdG8gZXhpc3QpIHNvIHRoZQoraWQgbnVtYmVycyBmb3IgeW91ciBib2FyZCBjYW4gYmUgYWRkZWQgdG8gdGhlIGRyaXZlci4KKworT3RoZXJ3aXNlLCB5b3UgY2FuIHVzZSB0aGUgaXNhcG5wdG9vbHMgcGFja2FnZSB0byBjb25maWd1cmUKK3lvdXIgYm9hcmQuICBVc2UgaXNhcG5wIHRvCitjb25maWd1cmUgdGhlIEkvTyBiYXNlIGFuZCBJUlEgZm9yIHRoZSBib2FyZCwgYW5kIHRoZW4gcGFzcwordGhlIHNhbWUgdmFsdWVzIGFzCitwYXJhbWV0ZXJzIGluIGNvbWVkaV9jb25maWcuICBBIHNhbXBsZSBpc2FwbnAuY29uZiBmaWxlIGlzIGluY2x1ZGVkCitpbiB0aGUgZXRjLyBkaXJlY3Rvcnkgb2YgQ29tZWRpbGliLgorCitDb21lZGlsaWIgaW5jbHVkZXMgYSB1dGlsaXR5IHRvIGF1dG9jYWxpYnJhdGUgdGhlc2UgYm9hcmRzLiAgVGhlCitib2FyZHMgc2VlbSB0byBib290IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUgYWxsIGNhbGlicmF0aW9uIERBQ3MKK2FyZSBhdCBvbmUgZXh0cmVtZSBvZiB0aGVpciByYW5nZSwgdGh1cyB0aGUgZGVmYXVsdCBjYWxpYnJhdGlvbgoraXMgdGVycmlibGUuICBDYWxpYnJhdGlvbiBhdCBib290IGlzIHN0cm9uZ2x5IGVuY291cmFnZWQuCisKK1RvIHVzZSB0aGUgZXh0ZW5kZWQgZGlnaXRhbCBJL08gb24gc29tZSBvZiB0aGUgYm9hcmRzLCBlbmFibGUgdGhlCis4MjU1IGRyaXZlciB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBDb21lZGkgc291cmNlIHRyZWUuCisKK0V4dGVybmFsIHRyaWdnZXJpbmcgaXMgc3VwcG9ydGVkIGZvciBzb21lIGV2ZW50cy4gIFRoZSBjaGFubmVsIGluZGV4Cisoc2Nhbl9iZWdpbl9hcmcsIGV0Yy4pIG1hcHMgdG8gUEZJMCAtIFBGSTkuCisKK1NvbWUgb2YgdGhlIG1vcmUgZXNvdGVyaWMgdHJpZ2dlcmluZyBwb3NzaWJpbGl0aWVzIG9mIHRoZXNlIGJvYXJkcworYXJlIG5vdCBzdXBwb3J0ZWQuCisqLworLyoKKwlUaGUgcmVhbCBndXRzIG9mIHRoZSBkcml2ZXIgaXMgaW4gbmlfbWlvX2NvbW1vbi5jLCB3aGljaCBpcyBpbmNsdWRlZAorCWJvdGggaGVyZSBhbmQgaW4gbmlfcGNpbWlvLmMKKworCUludGVycnVwdCBzdXBwb3J0IGFkZGVkIGJ5IFRydXh0b24gRnVsdG9uIDx0cnV4QHRydXh0b24uY29tPgorCisJUmVmZXJlbmNlcyBmb3Igc3BlY2lmaWNhdGlvbnM6CisKKwkgICAzNDA3NDdiLnBkZiAgUmVnaXN0ZXIgTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgKG9ic29sZXRlKQorCSAgIDM0MDc0N2MucGRmICBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCAobmV3KQorCSAgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCisJT3RoZXIgcG9zc2libHkgcmVsZXZhbnQgaW5mbzoKKworCSAgIDMyMDUxN2MucGRmICBVc2VyIG1hbnVhbCAob2Jzb2xldGUpCisJICAgMzIwNTE3Zi5wZGYgIFVzZXIgbWFudWFsIChuZXcpCisJICAgMzIwODg5YS5wZGYgIGRlbGV0ZQorCSAgIDMyMDkwNmMucGRmICBtYXhpbXVtIHNpZ25hbCByYXRpbmdzCisJICAgMzIxMDY2YS5wZGYgIGFib3V0IDE2eAorCSAgIDMyMTc5MWEucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZS0xMCByZXYuIGMKKwkgICAzMjE4MDhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZS0xMCByZXYgUAorCSAgIDMyMTgzN2EucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZGUtMTAgcmV2IGQKKwkgICAzMjE4MzhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZGUtMTAgcmV2IE4KKworCUlTU1VFUzoKKworCW5lZWQgdG8gZGVhbCB3aXRoIGV4dGVybmFsIHJlZmVyZW5jZSBmb3IgREFDLCBhbmQgb3RoZXIgREFDCisJcHJvcGVydGllcyBpbiBib2FyZCBwcm9wZXJ0aWVzCisKKwlkZWFsIHdpdGggYXQtbWlvLTE2ZGUtMTAgcmV2aXNpb24gRCB0byBOIGNoYW5nZXMsIGV0Yy4KKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KKworI2luY2x1ZGUgIm5pX3N0Yy5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKworI3VuZGVmIERFQlVHCisKKyNkZWZpbmUgQVRNSU8gMQorI3VuZGVmIFBDSU1JTworCisvKgorICogIEFUIHNwZWNpZmljIHNldHVwCisgKi8KKworI2RlZmluZSBOSV9TSVpFIDB4MjAKKworI2RlZmluZSBNQVhfTl9DQUxEQUNTIDMyCisKK3N0YXRpYyBjb25zdCBuaV9ib2FyZCBuaV9ib2FyZHNbXSA9IHsKKyAgICAgIHtkZXZpY2VfaWQ6NDQsCisJICAgICAgaXNhcG5wX2lkOjB4MDAwMCwvKiBYWFggdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJhdC1taW8tMTZlLTEiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDo4MTkyLAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6ODAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCSAgICAgIGhhc184MjU1OjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MX0sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjI1LAorCSAgICAgIGlzYXBucF9pZDoweDE5MDAsCisJICAgICAgbmFtZToJImF0LW1pby0xNmUtMiIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjIwNDgsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCSAgICAgIGhhc184MjU1OjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MX0sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjM2LAorCSAgICAgIGlzYXBucF9pZDoweDI0MDAsCisJICAgICAgbmFtZToJImF0LW1pby0xNmUtMTAiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDo1MTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorICAgICAge2RldmljZV9pZDozNywKKwkgICAgICBpc2FwbnBfaWQ6MHgyNTAwLAorCSAgICAgIG5hbWU6CSJhdC1taW8tMTZkZS0xMCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjUxMiwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkgICAgICBjYWxkYWM6CXthZDg4MDRfZGVidWd9LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjM4LAorCSAgICAgIGlzYXBucF9pZDoweDI2MDAsCisJICAgICAgbmFtZToJImF0LW1pby02NGUtMyIsCisJICAgICAgbl9hZGNoYW46NjQsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjIwNDgsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCSAgICAgIGhhc184MjU1OjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MzksCisJICAgICAgaXNhcG5wX2lkOjB4MjcwMCwKKwkgICAgICBuYW1lOgkiYXQtbWlvLTE2eGUtNTAiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWlfZmlmb19kZXB0aDo1MTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjEsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl84LAorCSAgICAgIGFpX3NwZWVkOjUwMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgYW9fc3BlZWQ6NTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7ZGFjODgwMCwgZGFjODA0M30sCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6NTAsCisJICAgICAgaXNhcG5wX2lkOjB4MDAwMCwvKiBYWFggdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJhdC1taW8tMTZ4ZS0xMCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjUxMiwKKwkgICAgICBhbHdheXNkaXRoZXI6MSwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE0LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxNiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6NTEsCisJICAgICAgaXNhcG5wX2lkOjB4MDAwMCwvKiBYWFggdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJhdC1haS0xNnhlLTEwIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6NTEyLAorCSAgICAgIGFsd2F5c2RpdGhlcjoxLAkvKiB1bmtub3duICovCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBuX2FvY2hhbjowLAorCSAgICAgIGFvYml0czoJMCwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkgICAgICBjYWxkYWM6CXtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBpbnQgbmlfaXJxcGluW10gPQorCXsgLTEsIC0xLCAtMSwgMCwgMSwgMiwgLTEsIDMsIC0xLCAtMSwgNCwgNSwgNiwgLTEsIC0xLCA3IH07CisKKyNkZWZpbmUgaW50ZXJydXB0X3BpbihhKQkobmlfaXJxcGluWyhhKV0pCisKKyNkZWZpbmUgSVJRX1BPTEFSSVRZIDAKKworI2RlZmluZSBOSV9FX0lSUV9GTEFHUwkJMAorCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IHBucF9kZXYgKmlzYXBucF9kZXY7CisgTklfUFJJVkFURV9DT01NT059IG5pX3ByaXZhdGU7CisjZGVmaW5lIGRldnByaXYgKChuaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKiBIb3cgd2UgYWNjZXNzIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIG5pX3dyaXRlbChhLGIpCQkob3V0bCgoYSksKGIpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfcmVhZGwoYSkJCShpbmwoKGEpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfd3JpdGV3KGEsYikJCShvdXR3KChhKSwoYikrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV9yZWFkdyhhKQkJKGludygoYSkrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV93cml0ZWIoYSxiKQkJKG91dGIoKGEpLChiKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3JlYWRiKGEpCQkoaW5iKChhKStkZXYtPmlvYmFzZSkpCisKKy8qIEhvdyB3ZSBhY2Nlc3Mgd2luZG93ZWQgcmVnaXN0ZXJzICovCisKKy8qIFdlIGF1dG9tYXRpY2FsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgU1RDIHJlZ2lzdGVycyB0aGF0IGNhbiBiZQorICogcmVhZC93cml0dGVuIGRpcmVjdGx5IGluIHRoZSBJL08gc3BhY2Ugb2YgdGhlIGJvYXJkLiAgVGhlCisgKiBBVC1NSU8gZGV2aWNlcyBtYXAgdGhlIGxvdyA4IFNUQyByZWdpc3RlcnMgdG8gaW9iYXNlK2FkZHIqMi4gKi8KKworc3RhdGljIHZvaWQgbmlfYXRtaW9fd2luX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoKGFkZHIpIDwgOCkgeworCQluaV93cml0ZXcoZGF0YSwgYWRkciAqIDIpOworCX0gZWxzZSB7CisJCW5pX3dyaXRldyhhZGRyLCBXaW5kb3dfQWRkcmVzcyk7CisJCW5pX3dyaXRldyhkYXRhLCBXaW5kb3dfRGF0YSk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdWludDE2X3QgbmlfYXRtaW9fd2luX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQxNl90IHJldDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoYWRkciA8IDgpIHsKKwkJcmV0ID0gbmlfcmVhZHcoYWRkciAqIDIpOworCX0gZWxzZSB7CisJCW5pX3dyaXRldyhhZGRyLCBXaW5kb3dfQWRkcmVzcyk7CisJCXJldCA9IG5pX3JlYWR3KFdpbmRvd19EYXRhKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgZGV2aWNlX2lkc1tdID0geworCXsuaWQgPSAiTklDMTkwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNDAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI1MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXsuaWQgPSAiTklDMjYwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNzAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIiJ9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBpbnQgbmlfYXRtaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmlfYXRtaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYXRtaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfYXRtaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm5pX2F0bWlvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpuaV9hdG1pb19kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2F0bWlvKTsKKworI2luY2x1ZGUgIm5pX21pb19jb21tb24uYyIKKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisvKiBjbGVhbiB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCitzdGF0aWMgaW50IG5pX2F0bWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwltaW9fY29tbW9uX2RldGFjaChkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgTklfU0laRSk7CisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldnByaXYtPmlzYXBucF9kZXYpCisJCXBucF9kZXZpY2VfZGV0YWNoKGRldnByaXYtPmlzYXBucF9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfaXNhcG5wX2ZpbmRfYm9hcmQoc3RydWN0IHBucF9kZXYgKipkZXYpCit7CisJc3RydWN0IHBucF9kZXYgKmlzYXBucF9kZXYgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5fbmlfYm9hcmRzOyBpKyspIHsKKwkJaXNhcG5wX2RldiA9IHBucF9maW5kX2RldihOVUxMLAorCQkJSVNBUE5QX1ZFTkRPUignTicsICdJJywgJ0MnKSwKKwkJCUlTQVBOUF9GVU5DVElPTihuaV9ib2FyZHNbaV0uaXNhcG5wX2lkKSwgTlVMTCk7CisKKwkJaWYgKGlzYXBucF9kZXYgPT0gTlVMTCB8fCBpc2FwbnBfZGV2LT5jYXJkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAocG5wX2RldmljZV9hdHRhY2goaXNhcG5wX2RldikgPCAwKSB7CisJCQlwcmludGsoIm5pX2F0bWlvOiAlcyBmb3VuZCBidXQgYWxyZWFkeSBhY3RpdmUsIHNraXBwaW5nLlxuIiwgbmlfYm9hcmRzW2ldLm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBucF9hY3RpdmF0ZV9kZXYoaXNhcG5wX2RldikgPCAwKSB7CisJCQlwbnBfZGV2aWNlX2RldGFjaChpc2FwbnBfZGV2KTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWlmICghcG5wX3BvcnRfdmFsaWQoaXNhcG5wX2RldiwgMCkKKwkJCXx8ICFwbnBfaXJxX3ZhbGlkKGlzYXBucF9kZXYsIDApKSB7CisJCQlwbnBfZGV2aWNlX2RldGFjaChpc2FwbnBfZGV2KTsKKwkJCXByaW50aygibmlfYXRtaW86IHBucCBpbnZhbGlkIHBvcnQgb3IgaXJxLCBhYm9ydGluZ1xuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGkgPT0gbl9uaV9ib2FyZHMpCisJCXJldHVybiAtRU5PREVWOworCSpkZXYgPSBpc2FwbnBfZGV2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2F0bWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcG5wX2RldiAqaXNhcG5wX2RldjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCBib2FyZDsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJLyogYWxsb2NhdGUgcHJpdmF0ZSBhcmVhICovCisJaWYgKChyZXQgPSBuaV9hbGxvY19wcml2YXRlKGRldikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3ID0gJm5pX2F0bWlvX3dpbl9vdXQ7CisJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJm5pX2F0bWlvX3dpbl9pbjsKKwlkZXZwcml2LT5zdGNfd3JpdGVsID0gJndpbl9vdXQyOworCWRldnByaXYtPnN0Y19yZWFkbCA9ICZ3aW5faW4yOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJaXNhcG5wX2RldiA9IE5VTEw7CisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXJldCA9IG5pX2lzYXBucF9maW5kX2JvYXJkKCZpc2FwbnBfZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlvYmFzZSA9IHBucF9wb3J0X3N0YXJ0KGlzYXBucF9kZXYsIDApOworCQlpcnEgPSBwbnBfaXJxKGlzYXBucF9kZXYsIDApOworCQlkZXZwcml2LT5pc2FwbnBfZGV2ID0gaXNhcG5wX2RldjsKKwl9CisKKwkvKiByZXNlcnZlIG91ciBJL08gcmVnaW9uICovCisKKwlwcmludGsoImNvbWVkaSVkOiBuaV9hdG1pbzogMHglMDRseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIE5JX1NJWkUsICJuaV9hdG1pbyIpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKyNpZmRlZiBERUJVRworCS8qIGJvYXJkIGV4aXN0ZW5jZSBzYW5pdHkgY2hlY2sgKi8KKwl7CisJCWludCBpOworCisJCXByaW50aygiIGJvYXJkIGZpbmdlcnByaW50OiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMikgeworCQkJcHJpbnRrKCIgJTA0eCAlMDJ4IiwgaW53KGRldi0+aW9iYXNlICsgaSksCisJCQkJaW5iKGRldi0+aW9iYXNlICsgaSArIDEpKTsKKwkJfQorCX0KKyNlbmRpZgorCisJLyogZ2V0IGJvYXJkIHR5cGUgKi8KKworCWJvYXJkID0gbmlfZ2V0Ym9hcmR0eXBlKGRldik7CisJaWYgKGJvYXJkIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPmJvYXJkX3B0ciA9IG5pX2JvYXJkcyArIGJvYXJkOworCisJcHJpbnRrKCIgJXMiLCBib2FyZHR5cGUubmFtZSk7CisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmR0eXBlLm5hbWU7CisKKwkvKiBpcnEgc3R1ZmYgKi8KKworCWlmIChpcnEgIT0gMCkgeworCQlpZiAoaXJxID4gMTUgfHwgbmlfaXJxcGluW2lycV0gPT0gLTEpIHsKKwkJCXByaW50aygiIGludmFsaWQgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgaXJxKTsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBuaV9FX2ludGVycnVwdCwKKwkJCQkJTklfRV9JUlFfRkxBR1MsICJuaV9hdG1pbyIsIGRldikpIDwgMCkgeworCQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJfQorCisJLyogZ2VuZXJpYyBFIHNlcmllcyBzdHVmZiBpbiBuaV9taW9fY29tbW9uLmMgKi8KKworCWlmICgocmV0ID0gbmlfRV9pbml0KGRldiwgaXQpKSA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGRldmljZV9pZCA9IG5pX3JlYWRfZWVwcm9tKGRldiwgNTExKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuX25pX2JvYXJkczsgaSsrKSB7CisJCWlmIChuaV9ib2FyZHNbaV0uZGV2aWNlX2lkID09IGRldmljZV9pZCkgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJaWYgKGRldmljZV9pZCA9PSAyNTUpIHsKKwkJcHJpbnRrKCIgY2FuJ3QgZmluZCBib2FyZFxuIik7CisJfSBlbHNlIGlmIChkZXZpY2VfaWQgPT0gMCkgeworCQlwcmludGsoIiBFRVBST00gcmVhZCBlcnJvciAoPykgb3IgZGV2aWNlIG5vdCBmb3VuZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgdW5rbm93biBkZXZpY2UgSUQgJWQgLS0gY29udGFjdCBhdXRob3JcbiIsIGRldmljZV9pZCk7CisJfQorCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmY2QxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jCkBAIC0wLDAgKzEsODYwIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1NSU8xNkQgYm9hcmQKKyAgIENvcHlyaWdodCAoQykgMjAwMCBDaHJpcyBSLiBCYXVnaGVyIDxiYXVnaGVyQGVudGVyYWN0LmNvbT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBuaV9hdG1pbzE2ZAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIEFULU1JTy0xNkQKK0F1dGhvcjogQ2hyaXMgUi4gQmF1Z2hlciA8YmF1Z2hlckBlbnRlcmFjdC5jb20+CitTdGF0dXM6IHVua25vd24KK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gQVQtTUlPLTE2IChhdG1pbzE2KSwgQVQtTUlPLTE2RCAoYXRtaW8xNmQpCisqLworLyoKKyAqIEkgbXVzdCBnaXZlIGNyZWRpdCBoZXJlIHRvIE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PiB3aG8KKyAqIHdyb3RlIHRoZSBkcml2ZXIgZm9yIEFkdmFudGVjJ3MgcGNsODEyIGJvYXJkcy4gSSB1c2VkIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsaW5nIGNvZGUgZnJvbSBoaXMgZHJpdmVyIGFzIGFuIGV4YW1wbGUgZm9yIHRoaXMgb25lLgorICoKKyAqIENocmlzIEJhdWdoZXIKKyAqIDUvMS8yMDAwCisgKgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiODI1NS5oIgorCisvKiBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIENPTV9SRUdfMQkweDAwCS8qIHdvIDE2ICovCisjZGVmaW5lIFNUQVRfUkVHCTB4MDAJLyogcm8gMTYgKi8KKyNkZWZpbmUgQ09NX1JFR18yCTB4MDIJLyogd28gMTYgKi8KKy8qIEV2ZW50IFN0cm9iZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1RBUlRfQ09OVkVSVF9SRUcJMHgwOAkvKiB3byAxNiAqLworI2RlZmluZSBTVEFSVF9EQVFfUkVHCQkweDBBCS8qIHdvIDE2ICovCisjZGVmaW5lIEFEX0NMRUFSX1JFRwkJMHgwQwkvKiB3byAxNiAqLworI2RlZmluZSBFWFRfU1RST0JFX1JFRwkJMHgwRQkvKiB3byAxNiAqLworLyogQW5hbG9nIE91dHB1dCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREFDMF9SRUcJCTB4MTAJLyogd28gMTYgKi8KKyNkZWZpbmUgREFDMV9SRUcJCTB4MTIJLyogd28gMTYgKi8KKyNkZWZpbmUgSU5UMkNMUl9SRUcJCTB4MTQJLyogd28gMTYgKi8KKy8qIEFuYWxvZyBJbnB1dCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVVYX0NOVFJfUkVHCQkweDA0CS8qIHdvIDE2ICovCisjZGVmaW5lIE1VWF9HQUlOX1JFRwkJMHgwNgkvKiB3byAxNiAqLworI2RlZmluZSBBRF9GSUZPX1JFRwkJMHgxNgkvKiBybyAxNiAqLworI2RlZmluZSBETUFfVENfSU5UX0NMUl9SRUcJMHgxNgkvKiB3byAxNiAqLworLyogQU05NTEzQSBDb3VudGVyL1RpbWVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBBTTk1MTNBX0RBVEFfUkVHCTB4MTgJLyogcncgMTYgKi8KKyNkZWZpbmUgQU05NTEzQV9DT01fUkVHCQkweDFBCS8qIHdvIDE2ICovCisjZGVmaW5lIEFNOTUxM0FfU1RBVF9SRUcJMHgxQQkvKiBybyAxNiAqLworLyogTUlPLTE2IERpZ2l0YWwgSS9PIFJlZ2lzdGVycyAqLworI2RlZmluZSBNSU9fMTZfRElHX0lOX1JFRwkweDFDCS8qIHJvIDE2ICovCisjZGVmaW5lIE1JT18xNl9ESUdfT1VUX1JFRwkweDFDCS8qIHdvIDE2ICovCisvKiBSVFNJIFN3aXRjaCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlRTSV9TV19TSElGVF9SRUcJMHgxRQkvKiB3byA4ICovCisjZGVmaW5lIFJUU0lfU1dfU1RST0JFX1JFRwkweDFGCS8qIHdvIDggKi8KKy8qIERJTy0yNCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRElPXzI0X1BPUlRBX1JFRwkweDAwCS8qIHJ3IDggKi8KKyNkZWZpbmUgRElPXzI0X1BPUlRCX1JFRwkweDAxCS8qIHJ3IDggKi8KKyNkZWZpbmUgRElPXzI0X1BPUlRDX1JFRwkweDAyCS8qIHJ3IDggKi8KKyNkZWZpbmUgRElPXzI0X0NORkdfUkVHCQkweDAzCS8qIHdvIDggKi8KKworLyogQ29tbWFuZCBSZWdpc3RlciBiaXRzICovCisjZGVmaW5lIENPTVJFRzFfMlNDQURDCQkweDAwMDEKKyNkZWZpbmUgQ09NUkVHMV8xNjMyQ05UCQkweDAwMDIKKyNkZWZpbmUgQ09NUkVHMV9TQ0FORU4JCTB4MDAwOAorI2RlZmluZSBDT01SRUcxX0RBUUVOCQkweDAwMTAKKyNkZWZpbmUgQ09NUkVHMV9ETUFFTgkJMHgwMDIwCisjZGVmaW5lIENPTVJFRzFfQ09OVklOVEVOCTB4MDA4MAorI2RlZmluZSBDT01SRUcyX1NDTjIJCTB4MDAxMAorI2RlZmluZSBDT01SRUcyX0lOVEVOCQkweDAwODAKKyNkZWZpbmUgQ09NUkVHMl9ET1VURU4wCQkweDAxMDAKKyNkZWZpbmUgQ09NUkVHMl9ET1VURU4xCQkweDAyMDAKKy8qIFN0YXR1cyBSZWdpc3RlciBiaXRzICovCisjZGVmaW5lIFNUQVRfQURfT1ZFUlJVTgkJMHgwMTAwCisjZGVmaW5lIFNUQVRfQURfT1ZFUkZMT1cJMHgwMjAwCisjZGVmaW5lIFNUQVRfQURfREFRUFJPRwkJMHgwODAwCisjZGVmaW5lIFNUQVRfQURfQ09OVkFWQUlMCTB4MjAwMAorI2RlZmluZSBTVEFUX0FEX0RBUVNUT1BJTlQJMHg0MDAwCisvKiBBTTk1MTNBIENvdW50ZXIvVGltZXIgZGVmaW5lcyAqLworI2RlZmluZSBDTE9DS18xX01IWgkJMHg4QjI1CisjZGVmaW5lIENMT0NLXzEwMF9LSFoJMHg4QzI1CisjZGVmaW5lIENMT0NLXzEwX0tIWgkweDhEMjUKKyNkZWZpbmUgQ0xPQ0tfMV9LSFoJCTB4OEUyNQorI2RlZmluZSBDTE9DS18xMDBfSFoJMHg4RjI1CisvKiBPdGhlciBtaXNjZWxsYW5lb3VzIGRlZmluZXMgKi8KKyNkZWZpbmUgQVRNSU8xNkRfU0laRQkzMgkvKiBidXMgYWRkcmVzcyByYW5nZSAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGF0bWlvMTZkX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIEFUTUlPMTZEX1RJTUVPVVQgMTAKKworc3RydWN0IGF0bWlvMTZfYm9hcmRfdCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWludCBoYXNfODI1NTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtaW8xNl9ib2FyZF90IGF0bWlvMTZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJhdG1pbzE2IiwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiYXRtaW8xNmQiLAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCit9OworCisjZGVmaW5lIG5fYXRtaW8xNl9ib2FyZHMgc2l6ZW9mKGF0bWlvMTZfYm9hcmRzKS9zaXplb2YoYXRtaW8xNl9ib2FyZHNbMF0pCisKKyNkZWZpbmUgYm9hcmR0eXBlICgoY29uc3Qgc3RydWN0IGF0bWlvMTZfYm9hcmRfdCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IGF0bWlvMTZkX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGF0bWlvMTZkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaXJxcmV0dXJuX3QgYXRtaW8xNmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBhdG1pbzE2ZF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBhdG1pbzE2ZF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHJlc2V0X2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIHJlc2V0X2F0bWlvMTZkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworLyogbWFpbiBkcml2ZXIgc3RydWN0ICovCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2F0bWlvMTZkID0geworICAgICAgZHJpdmVyX25hbWU6ImF0bWlvMTYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmF0bWlvMTZkX2F0dGFjaCwKKyAgICAgIGRldGFjaDphdG1pbzE2ZF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZhdG1pbzE2X2JvYXJkc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYXRtaW8xNl9ib2FyZHMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBhdG1pbzE2X2JvYXJkX3QpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbzE2ZCk7CisKKy8qIHJhbmdlIHN0cnVjdHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hdG1pbzE2ZF9haV8xMF9iaXBvbGFyID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wMikKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXRtaW8xNmRfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJCUJJUF9SQU5HRSgwLjAxKQorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hdG1pbzE2ZF9haV91bmlwb2xhciA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDIpCisJfQorfTsKKworLyogcHJpdmF0ZSBkYXRhIHN0cnVjdCAqLworc3RydWN0IGF0bWlvMTZkX3ByaXZhdGUgeworCWVudW0geyBhZGNfZGlmZiwgYWRjX3NpbmdsZWVuZGVkIH0gYWRjX211eDsKKwllbnVtIHsgYWRjX2JpcG9sYXIxMCwgYWRjX2JpcG9sYXI1LCBhZGNfdW5pcG9sYXIxMCB9IGFkY19yYW5nZTsKKwllbnVtIHsgYWRjXzJjb21wLCBhZGNfc3RyYWlnaHQgfSBhZGNfY29kaW5nOworCWVudW0geyBkYWNfYmlwb2xhciwgZGFjX3VuaXBvbGFyIH0gZGFjMF9yYW5nZSwgZGFjMV9yYW5nZTsKKwllbnVtIHsgZGFjX2ludGVybmFsLCBkYWNfZXh0ZXJuYWwgfSBkYWMwX3JlZmVyZW5jZSwgZGFjMV9yZWZlcmVuY2U7CisJZW51bSB7IGRhY18yY29tcCwgZGFjX3N0cmFpZ2h0IH0gZGFjMF9jb2RpbmcsIGRhYzFfY29kaW5nOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphb19yYW5nZV90eXBlX2xpc3RbMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworCXVuc2lnbmVkIGludCBjb21fcmVnXzFfc3RhdGU7CS8qIGN1cnJlbnQgc3RhdGUgb2YgY29tbWFuZCByZWdpc3RlciAxICovCisJdW5zaWduZWQgaW50IGNvbV9yZWdfMl9zdGF0ZTsJLyogY3VycmVudCBzdGF0ZSBvZiBjb21tYW5kIHJlZ2lzdGVyIDIgKi8KK307CisKK3N0YXRpYyB2b2lkIHJlc2V0X2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIENvdW50ZXIgMiAqLworCW91dHcoMHhGRkMyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGMDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkYwQSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjQyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGNDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkvKiBDb3VudGVyIDMgKi8KKwlvdXR3KDB4RkZDNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjAzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMEIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4MywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkY0NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjQ0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJLyogQ291bnRlciA0ICovCisJb3V0dygweEZGQzgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkYwNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHg0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjBDLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGNDgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkY0OCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCS8qIENvdW50ZXIgNSAqLworCW91dHcoMHhGRkQwLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGMDUsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkYwRCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjUwLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGNTAsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBRF9DTEVBUl9SRUcpOworfQorCitzdGF0aWMgdm9pZCByZXNldF9hdG1pbzE2ZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCS8qIG5vdyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGJvYXJkICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIE1VWF9HQUlOX1JFRyk7CisJLyogaW5pdCBBTTk1MTNBIHRpbWVyICovCisJb3V0dygweEZGRkYsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkZFRiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjE3LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEYwMDAsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJZm9yIChpID0gMTsgaSA8PSA1OyArK2kpIHsKKwkJb3V0dygweEZGMDAgKyBpLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHgwMDA0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYwOCArIGksIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweDMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJfQorCW91dHcoMHhGRjVGLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJLyogdGltZXIgaW5pdCBkb25lICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFEX0NMRUFSX1JFRyk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIElOVDJDTFJfUkVHKTsKKwkvKiBzZWxlY3Qgc3RyYWlnaHQgYmluYXJ5IG1vZGUgZm9yIEFuYWxvZyBJbnB1dCAqLworCWRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSB8PSAxOworCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJZGV2cHJpdi0+YWRjX2NvZGluZyA9IGFkY19zdHJhaWdodDsKKwkvKiB6ZXJvIHRoZSBhbmFsb2cgb3V0cHV0cyAqLworCW91dHcoMjA0OCwgZGV2LT5pb2Jhc2UgKyBEQUMwX1JFRyk7CisJb3V0dygyMDQ4LCBkZXYtPmlvYmFzZSArIERBQzFfUkVHKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGF0bWlvMTZkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworLy8gICAgICBwcmludGsoImF0bWlvMTZkX2ludGVycnVwdCFcbiIpOworCisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSArIEFEX0ZJRk9fUkVHKSk7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwLCB0bXA7CisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9haV9jbWR0ZXN0XG4iKTsKKyNlbmRpZgorCS8qIG1ha2Ugc3VyZSB0cmlnZ2VycyBhcmUgdmFsaWQgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX1RJTUVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworI2lmIDAKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzaG91bGQgYmUgbGV2ZWwvZWRnZSwgaGkvbG8gc3BlY2lmaWNhdGlvbiBoZXJlICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgMTAwMDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDEwMDAwOworCQllcnIrKzsKKwl9CisjaWYgMAorCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gU0xPV0VTVF9USU1FUikgeworCQljbWQtPmNvbnZlcnRfYXJnID0gU0xPV0VTVF9USU1FUjsKKwkJZXJyKys7CisJfQorI2VuZGlmCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCS8qIGFueSBjb3VudCBpcyBhbGxvd2VkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgdGltZXIsIGJhc2VfY2xvY2s7CisJdW5zaWduZWQgaW50IHNhbXBsZV9jb3VudCwgdG1wLCBjaGFuLCBnYWluOworCWludCBpOworI2lmZGVmIERFQlVHMQorCXByaW50aygiYXRtaW8xNmRfYWlfY21kXG4iKTsKKyNlbmRpZgorCS8qIFRoaXMgaXMgc2xvd2x5IGJlY29taW5nIGEgd29ya2luZyBjb21tYW5kIGludGVyZmFjZS4gKgorCSAqIEl0IGlzIHN0aWxsIHViZXItZXhwZXJpbWVudGFsICovCisKKwlyZXNldF9jb3VudGVycyhkZXYpOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisKKwkvKiBjaGVjayBpZiBzY2FubmluZyBtdWx0aXBsZSBjaGFubmVscyAqLworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA8IDIpIHsKKwkJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlICY9IH5DT01SRUcxX1NDQU5FTjsKKwkJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV9TQ0FORU47CisJCWRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSB8PSBDT01SRUcyX1NDTjI7CisJCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMik7CisJfQorCisJLyogU2V0dXAgdGhlIE11eC1HYWluIENvdW50ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47ICsraSkgeworCQljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlvdXR3KGksIGRldi0+aW9iYXNlICsgTVVYX0NOVFJfUkVHKTsKKwkJdG1wID0gY2hhbiB8IChnYWluIDw8IDYpOworCQlpZiAoaSA9PSBjbWQtPnNjYW5fZW5kX2FyZyAtIDEpCisJCQl0bXAgfD0gMHgwMDEwOwkvKiBzZXQgTEFTVE9ORSBiaXQgKi8KKwkJb3V0dyh0bXAsIGRldi0+aW9iYXNlICsgTVVYX0dBSU5fUkVHKTsKKwl9CisKKwkvKiBOb3cgcHJvZ3JhbSB0aGUgc2FtcGxlIGludGVydmFsIHRpbWVyICovCisJLyogRmlndXJlIG91dCB3aGljaCBjbG9jayB0byB1c2UgdGhlbiBnZXQgYW4KKwkgKiBhcHByb3ByaWF0ZSB0aW1lciB2YWx1ZSAqLworCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgNjU1MzYwMDApIHsKKwkJYmFzZV9jbG9jayA9IENMT0NLXzFfTUhaOworCQl0aW1lciA9IGNtZC0+Y29udmVydF9hcmcgLyAxMDAwOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA8IDY1NTM2MDAwMCkgeworCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMTAwX0tIWjsKKwkJdGltZXIgPSBjbWQtPmNvbnZlcnRfYXJnIC8gMTAwMDA7CisJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfYXJnIDw9IDB4ZmZmZmZmZmYgLyogNjU1MzYwMDAwMCAqLyApIHsKKwkJYmFzZV9jbG9jayA9IENMT0NLXzEwX0tIWjsKKwkJdGltZXIgPSBjbWQtPmNvbnZlcnRfYXJnIC8gMTAwMDAwOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA8PSAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAwICovICkgeworCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMV9LSFo7CisJCXRpbWVyID0gY21kLT5jb252ZXJ0X2FyZyAvIDEwMDAwMDA7CisJfQorCW91dHcoMHhGRjAzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dyhiYXNlX2Nsb2NrLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjBCLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGNDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkZGMywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcodGltZXIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMjQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKworCS8qIE5vdyBmaWd1cmUgb3V0IGhvdyBtYW55IHNhbXBsZXMgdG8gZ2V0ICovCisJLyogYW5kIHByb2dyYW0gdGhlIHNhbXBsZSBjb3VudGVyICovCisJc2FtcGxlX2NvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCW91dHcoMHhGRjA0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDEwMjUsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMEMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlpZiAoc2FtcGxlX2NvdW50IDwgNjU1MzYpIHsKKwkJLyogdXNlIG9ubHkgQ291bnRlciA0ICovCisJCW91dHcoc2FtcGxlX2NvdW50LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkY0OCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4RkZGNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4RkYyOCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgJj0gfkNPTVJFRzFfMTYzMkNOVDsKKwkJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwl9IGVsc2UgeworCQkvKiBDb3VudGVyIDQgYW5kIDUgYXJlIG5lZWRlZCAqLworCQlpZiAoKHRtcCA9IHNhbXBsZV9jb3VudCAmIDB4RkZGRikpIHsKKwkJCW91dHcodG1wIC0gMSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfSBlbHNlIHsKKwkJCW91dHcoMHhGRkZGLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQl9CisJCW91dHcoMHhGRjQ4LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGMjgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweEZGMDUsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweDI1LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYwRCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQl0bXAgPSBzYW1wbGVfY291bnQgJiAweEZGRkY7CisJCWlmICgodG1wID09IDApIHx8ICh0bXAgPT0gMSkpIHsKKwkJCW91dHcoKHNhbXBsZV9jb3VudCA+PiAxNikgJiAweEZGRkYsCisJCQkJZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfSBlbHNlIHsKKwkJCW91dHcoKChzYW1wbGVfY291bnQgPj4gMTYpICYgMHhGRkZGKSArIDEsCisJCQkJZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfQorCQlvdXR3KDB4RkY3MCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV8xNjMyQ05UOworCQlvdXR3KGRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCX0KKworCS8qIFByb2dyYW0gdGhlIHNjYW4gaW50ZXJ2YWwgdGltZXIgT05MWSBJRiBTQ0FOTklORyBJUyBFTkFCTEVEICovCisJLyogRmlndXJlIG91dCB3aGljaCBjbG9jayB0byB1c2UgdGhlbiBnZXQgYW4KKwkgKiBhcHByb3ByaWF0ZSB0aW1lciB2YWx1ZSAqLworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCA2NTUzNjAwMCkgeworCQkJYmFzZV9jbG9jayA9IENMT0NLXzFfTUhaOworCQkJdGltZXIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gMTAwMDsKKwkJfSBlbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgNjU1MzYwMDAwKSB7CisJCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMTAwX0tIWjsKKwkJCXRpbWVyID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIDEwMDAwOworCQl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAgKi8gKSB7CisJCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMTBfS0haOworCQkJdGltZXIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gMTAwMDAwOworCQl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAwICovICkgeworCQkJYmFzZV9jbG9jayA9IENMT0NLXzFfS0haOworCQkJdGltZXIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gMTAwMDAwMDsKKwkJfQorCQlvdXR3KDB4RkYwMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KGJhc2VfY2xvY2ssIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJCW91dHcoMHhGRjBBLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHgyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkY0MiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4RkZGMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KHRpbWVyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYyMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCX0KKworCS8qIENsZWFyIHRoZSBBL0QgRklGTyBhbmQgcmVzZXQgdGhlIE1VWCBjb3VudGVyICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFEX0NMRUFSX1JFRyk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIE1VWF9DTlRSX1JFRyk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIElOVDJDTFJfUkVHKTsKKwkvKiBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KKwlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV9EQVFFTjsKKwlvdXR3KGRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBjb252ZXJzaW9uIGNvbXBsZXRpb24gKi8KKwlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV9DT05WSU5URU47CisJZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlIHw9IENPTVJFRzJfSU5URU47CisJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwlvdXR3KGRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzIpOworCS8qIGFwcGx5IGEgdHJpZ2dlci4gdGhpcyBzdGFydHMgdGhlIGNvdW50ZXJzISAqLworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBTVEFSVF9EQVFfUkVHKTsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcmVzZXRfYXRtaW8xNmQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiBNb2RlIDAgaXMgdXNlZCB0byBnZXQgYSBzaW5nbGUgY29udmVyc2lvbiBvbiBkZW1hbmQgKi8KK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgdDsKKwlpbnQgY2hhbjsKKwlpbnQgZ2FpbjsKKwlpbnQgc3RhdHVzOworCisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9haV9pbnNuX3JlYWRcbiIpOworI2VuZGlmCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiByZXNldCB0aGUgQW5hbG9nIGlucHV0IGNpcmN1aXRyeSAqLworCS8vb3V0dyggMCwgZGV2LT5pb2Jhc2UrQURfQ0xFQVJfUkVHICk7CisJLyogcmVzZXQgdGhlIEFuYWxvZyBJbnB1dCBNVVggQ291bnRlciB0byAwICovCisJLy9vdXR3KCAwLCBkZXYtPmlvYmFzZStNVVhfQ05UUl9SRUcgKTsKKworCS8qIHNldCB0aGUgSW5wdXQgTVVYIGdhaW4gKi8KKwlvdXR3KGNoYW4gfCAoZ2FpbiA8PCA2KSwgZGV2LT5pb2Jhc2UgKyBNVVhfR0FJTl9SRUcpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBzdGFydCB0aGUgY29udmVyc2lvbiAqLworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgU1RBUlRfQ09OVkVSVF9SRUcpOworCQkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwkJZm9yICh0ID0gMDsgdCA8IEFUTUlPMTZEX1RJTUVPVVQ7IHQrKykgeworCQkJLyogY2hlY2sgY29udmVyc2lvbiBzdGF0dXMgKi8KKwkJCXN0YXR1cyA9IGludyhkZXYtPmlvYmFzZSArIFNUQVRfUkVHKTsKKyNpZmRlZiBERUJVRzEKKwkJCXByaW50aygic3RhdHVzPSV4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCQlpZiAoc3RhdHVzICYgU1RBVF9BRF9DT05WQVZBSUwpIHsKKwkJCQkvKiByZWFkIHRoZSBkYXRhIG5vdyAqLworCQkJCWRhdGFbaV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBBRF9GSUZPX1JFRyk7CisJCQkJLyogY2hhbmdlIHRvIHR3bydzIGNvbXBsZW1lbnQgaWYgbmVlZCBiZSAqLworCQkJCWlmIChkZXZwcml2LT5hZGNfY29kaW5nID09IGFkY18yY29tcCkgeworCQkJCQlkYXRhW2ldIF49IDB4ODAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGF0dXMgJiBTVEFUX0FEX09WRVJGTE9XKSB7CisJCQkJcHJpbnRrKCJhdG1pbzE2ZDogYS9kIEZJRk8gb3ZlcmZsb3dcbiIpOworCQkJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBRF9DTEVBUl9SRUcpOworCisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJfQorCQkvKiBlbmQgd2FpdGluZywgbm93IGNoZWNrIGlmIGl0IHRpbWVkIG91dCAqLworCQlpZiAodCA9PSBBVE1JTzE2RF9USU1FT1VUKSB7CisJCQlydF9wcmludGsoImF0bWlvMTZkOiB0aW1lb3V0XG4iKTsKKworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9hb19pbnNuX3JlYWRcbiIpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW47CisJaW50IGQ7CisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9hb19pbnNuX3dyaXRlXG4iKTsKKyNlbmRpZgorCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkID0gZGF0YVtpXTsKKwkJc3dpdGNoIChjaGFuKSB7CisJCWNhc2UgMDoKKwkJCWlmIChkZXZwcml2LT5kYWMwX2NvZGluZyA9PSBkYWNfMmNvbXApIHsKKwkJCQlkIF49IDB4ODAwOworCQkJfQorCQkJb3V0dyhkLCBkZXYtPmlvYmFzZSArIERBQzBfUkVHKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAoZGV2cHJpdi0+ZGFjMV9jb2RpbmcgPT0gZGFjXzJjb21wKSB7CisJCQkJZCBePSAweDgwMDsKKwkJCX0KKwkJCW91dHcoZCwgZGV2LT5pb2Jhc2UgKyBEQUMxX1JFRyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gfCBkYXRhWzFdKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBNSU9fMTZfRElHX09VVF9SRUcpOworCX0KKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgTUlPXzE2X0RJR19JTl9SRUcpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJbWFzayA9IChDUl9DSEFOKGluc24tPmNoYW5zcGVjKSA8IDQpID8gMHgwZiA6IDB4ZjA7CisJCXMtPmlvX2JpdHMgJj0gfm1hc2s7CisJCWlmIChkYXRhW2ldKQorCQkJcy0+aW9fYml0cyB8PSBtYXNrOworCX0KKwlkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUgJj0gfihDT01SRUcyX0RPVVRFTjAgfCBDT01SRUcyX0RPVVRFTjEpOworCWlmIChzLT5pb19iaXRzICYgMHgwZikKKwkJZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlIHw9IENPTVJFRzJfRE9VVEVOMDsKKwlpZiAocy0+aW9fYml0cyAmIDB4ZjApCisJCWRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSB8PSBDT01SRUcyX0RPVVRFTjE7CisJb3V0dyhkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18yKTsKKworCXJldHVybiBpOworfQorCisvKgorICAgb3B0aW9uc1swXSAtIEkvTyBwb3J0CisgICBvcHRpb25zWzFdIC0gTUlPIGlycQorICAgICAgICAgICAgICAgIDAgPT0gbm8gaXJxCisgICAgICAgICAgICAgICAgTiA9PSBpcnEgTiB7Myw0LDUsNiw3LDksMTAsMTEsMTIsMTQsMTV9CisgICBvcHRpb25zWzJdIC0gRElPIGlycQorICAgICAgICAgICAgICAgIDAgPT0gbm8gaXJxCisgICAgICAgICAgICAgICAgTiA9PSBpcnEgTiB7Myw0LDUsNiw3LDl9CisgICBvcHRpb25zWzNdIC0gRE1BMSBjaGFubmVsCisgICAgICAgICAgICAgICAgMCA9PSBubyBETUEKKyAgICAgICAgICAgICAgICBOID09IERNQSBOIHs1LDYsN30KKyAgIG9wdGlvbnNbNF0gLSBETUEyIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAwID09IG5vIERNQQorICAgICAgICAgICAgICAgIE4gPT0gRE1BIE4gezUsNiw3fQorCisgICBvcHRpb25zWzVdIC0gYS9kIG11eAorICAgCTA9ZGlmZmVyZW50aWFsLCAxPXNpbmdsZQorICAgb3B0aW9uc1s2XSAtIGEvZCByYW5nZQorICAgCTA9Ymlwb2xhcjEwLCAxPWJpcG9sYXI1LCAyPXVuaXBvbGFyMTAKKworICAgb3B0aW9uc1s3XSAtIGRhYzAgcmFuZ2UKKyAgIAkwPWJpcG9sYXIsIDE9dW5pcG9sYXIKKyAgIG9wdGlvbnNbOF0gLSBkYWMwIHJlZmVyZW5jZQorICAgIDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwKKyAgIG9wdGlvbnNbOV0gLSBkYWMwIGNvZGluZworICAgCTA9MidzIGNvbXAsIDE9c3RyYWlnaHQgYmluYXJ5CisKKyAgIG9wdGlvbnNbMTBdIC0gZGFjMSByYW5nZQorICAgb3B0aW9uc1sxMV0gLSBkYWMxIHJlZmVyZW5jZQorICAgb3B0aW9uc1sxMl0gLSBkYWMxIGNvZGluZworICovCisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IHJldDsKKworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJLyogbWFrZSBzdXJlIHRoZSBhZGRyZXNzIHJhbmdlIGlzIGZyZWUgYW5kIGFsbG9jYXRlIGl0ICovCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogYXRtaW8xNmQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgQVRNSU8xNkRfU0laRSwgIm5pX2F0bWlvMTZkIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8qIGJvYXJkIG5hbWUgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZHR5cGUtPm5hbWU7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYXRtaW8xNmRfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiByZXNldCB0aGUgYXRtaW8xNmQgaGFyZHdhcmUgKi8KKwlyZXNldF9hdG1pbzE2ZChkZXYpOworCisJLyogY2hlY2sgaWYgb3VyIGludGVycnVwdCBpcyBhdmFpbGFibGUgYW5kIGdldCBpdCAqLworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEpIHsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBhdG1pbzE2ZF9pbnRlcnJ1cHQsCisJCQkJCTAsICJhdG1pbzE2ZCIsIGRldikpIDwgMCkgeworCQkJcHJpbnRrKCJmYWlsZWQgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwkJcHJpbnRrKCIoIGlycSA9ICV1IClcbiIsIGlycSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIoIG5vIGlycSApIik7CisJfQorCisJLyogc2V0IGRldmljZSBvcHRpb25zICovCisJZGV2cHJpdi0+YWRjX211eCA9IGl0LT5vcHRpb25zWzVdOworCWRldnByaXYtPmFkY19yYW5nZSA9IGl0LT5vcHRpb25zWzZdOworCisJZGV2cHJpdi0+ZGFjMF9yYW5nZSA9IGl0LT5vcHRpb25zWzddOworCWRldnByaXYtPmRhYzBfcmVmZXJlbmNlID0gaXQtPm9wdGlvbnNbOF07CisJZGV2cHJpdi0+ZGFjMF9jb2RpbmcgPSBpdC0+b3B0aW9uc1s5XTsKKwlkZXZwcml2LT5kYWMxX3JhbmdlID0gaXQtPm9wdGlvbnNbMTBdOworCWRldnByaXYtPmRhYzFfcmVmZXJlbmNlID0gaXQtPm9wdGlvbnNbMTFdOworCWRldnByaXYtPmRhYzFfY29kaW5nID0gaXQtPm9wdGlvbnNbMTJdOworCisJLyogc2V0dXAgc3ViLWRldmljZXMgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSAoZGV2cHJpdi0+YWRjX211eCA/IDE2IDogOCk7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+aW5zbl9yZWFkID0gYXRtaW8xNmRfYWlfaW5zbl9yZWFkOworCXMtPmRvX2NtZHRlc3QgPSBhdG1pbzE2ZF9haV9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IGF0bWlvMTZkX2FpX2NtZDsKKwlzLT5jYW5jZWwgPSBhdG1pbzE2ZF9haV9jYW5jZWw7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOwkvKiA0MDk1IGRlY2ltYWwgKi8KKwlzd2l0Y2ggKGRldnByaXYtPmFkY19yYW5nZSkgeworCWNhc2UgYWRjX2JpcG9sYXIxMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXRtaW8xNmRfYWlfMTBfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfYmlwb2xhcjU6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F0bWlvMTZkX2FpXzVfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfdW5pcG9sYXIxMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXRtaW8xNmRfYWlfdW5pcG9sYXI7CisJCWJyZWFrOworCX0KKworCS8qIGFvIHN1YmRldmljZSAqLworCXMrKzsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+aW5zbl9yZWFkID0gYXRtaW8xNmRfYW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBhdG1pbzE2ZF9hb19pbnNuX3dyaXRlOworCXMtPm1heGRhdGEgPSAweGZmZjsJLyogNDA5NSBkZWNpbWFsICovCisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGRldnByaXYtPmFvX3JhbmdlX3R5cGVfbGlzdDsKKwlzd2l0Y2ggKGRldnByaXYtPmRhYzBfcmFuZ2UpIHsKKwljYXNlIGRhY19iaXBvbGFyOgorCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMF0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQlicmVhazsKKwljYXNlIGRhY191bmlwb2xhcjoKKwkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzBdID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGRldnByaXYtPmRhYzFfcmFuZ2UpIHsKKwljYXNlIGRhY19iaXBvbGFyOgorCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMV0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQlicmVhazsKKwljYXNlIGRhY191bmlwb2xhcjoKKwkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzFdID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCWJyZWFrOworCX0KKworCS8qIERpZ2l0YWwgSS9PICovCisJcysrOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gYXRtaW8xNmRfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IGF0bWlvMTZkX2Rpb19pbnNuX2NvbmZpZzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJLyogODI1NSBzdWJkZXZpY2UgKi8KKwlzKys7CisJaWYgKGJvYXJkdHlwZS0+aGFzXzgyNTUpIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworLyogZG9uJ3QgeWV0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBjb3VudGVyL3RpbWVycyAqLworI2lmIDAKKwlzKys7CisJLyogZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVElNRVI7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMAorI2VuZGlmCisJCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBhdG1pbzE2ZDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMgJiYgYm9hcmR0eXBlLT5oYXNfODI1NSkKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDMpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXNldF9hdG1pbzE2ZChkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQVRNSU8xNkRfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTMxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCkBAIC0wLDAgKzEsODQxIEBACisvKgorICogICAgIGNvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYworICogICAgIERyaXZlciBmb3IgREFRQ2FyZC03MDAgRElPIG9ubHkKKyAqICAgICBjb3BpZWQgZnJvbSA4MjU1CisgKgorICogICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworLyoKK0RyaXZlcjogbmlfZGFxXzcwMAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIFBDTUNJQSBEQVFDYXJkLTcwMCBESU8gb25seQorQXV0aG9yOiBGcmVkIEJyb29rcyA8bnNhc3Bvb2tAbnNhc3Bvb2suY29tPiwKKyAgYmFzZWQgb24gbmlfZGFxX2RpbzI0IGJ5IERhbmllbCBWZWNpbm8gQ2FzdGVsIDxkdmVjaW5vQGFibGUuZXM+CitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDTUNJQSBEQVEtQ2FyZC03MDAgKG5pX2RhcV83MDApCitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiBUaHUsIDIxIEZlYiAyMDA4IDEyOjA3OjIwICswMDAwCisKK1RoZSBkYXFjYXJkLTcwMCBhcHBlYXJzIGluIENvbWVkaSBhcyBhIHNpbmdsZSBkaWdpdGFsIEkvTyBzdWJkZXZpY2Ugd2l0aAorMTYgY2hhbm5lbHMuICBUaGUgY2hhbm5lbCAwIGNvcnJlc3BvbmRzIHRvIHRoZSBkYXFjYXJkLTcwMCdzIG91dHB1dAorcG9ydCwgYml0IDA7IGNoYW5uZWwgOCBjb3JyZXNwb25kcyB0byB0aGUgaW5wdXQgcG9ydCwgYml0IDAuCisKK0RpcmVjdGlvbiBjb25maWd1cmF0aW9uOiBjaGFubmVscyAwLTcgb3V0cHV0LCA4LTE1IGlucHV0ICg4MjI1IGRldmljZQorZW11IGFzIHBvcnQgQSBvdXRwdXQsIHBvcnQgQiBpbnB1dCwgcG9ydCBDIE4vQSkuCisKK0lSUSBpcyBhc3NpZ25lZCBidXQgbm90IHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2N1cl9kZXYgPSBOVUxMOworCisjZGVmaW5lIERJTzcwMF9TSVpFIDgJCS8vIHNpemUgb2YgaW8gcmVnaW9uIHVzZWQgYnkgYm9hcmQKKworc3RhdGljIGludCBkaW83MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGlvNzAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK2VudW0gZGlvNzAwX2J1c3R5cGUgeyBwY21jaWFfYnVzdHlwZSB9OworCitzdHJ1Y3QgZGlvNzAwX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBkZXZpY2UgaWQgZm9yIHBjbWNpYSBib2FyZAorCWVudW0gZGlvNzAwX2J1c3R5cGUgYnVzdHlwZTsJLy8gUENNQ0lBCisJaW50IGhhdmVfZGlvOwkJLy8gaGF2ZSBkYXFjYXJkLTcwMCBkaW8KKwkvLyBmdW5jdGlvbiBwb2ludGVycyBzbyB3ZSBjYW4gdXNlIGluYi9vdXRiIG9yIHJlYWRiL3dyaXRlYgorCS8vIGFzIGFwcHJvcHJpYXRlCisJdW5zaWduZWQgaW50ICgqcmVhZF9ieXRlKSAodW5zaWduZWQgaW50IGFkZHJlc3MpOworCXZvaWQgKCp3cml0ZV9ieXRlKSAodW5zaWduZWQgaW50IGJ5dGUsIHVuc2lnbmVkIGludCBhZGRyZXNzKTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlvNzAwX2JvYXJkIGRpbzcwMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcWNhcmQtNzAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0NzQzLC8vIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzQzIGlzIGRldmljZSBpZAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJuaV9kYXFfNzAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0NzQzLC8vIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzQzIGlzIGRldmljZSBpZAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkaW83MDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGRpbzcwMF9wcml2YXRlIHsKKworCWludCBkYXRhOwkJLyogbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGxlZnQgdG8gYmUgdGFrZW4gKi8KK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRpbzcwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RpbzcwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV9kYXFfNzAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkaW83MDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRpbzcwMF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRpbzcwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkaW83MDBfYm9hcmQpLAorICAgICAgYm9hcmRfbmFtZTomZGlvNzAwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZGlvNzAwX2JvYXJkKSwKK307CisKKy8qCXRoZSByZWFsIGRyaXZlciByb3V0aW5lcwkqLworCisjZGVmaW5lIF83MDBfU0laRSA4CisKKyNkZWZpbmUgXzcwMF9EQVRBIDAKKworI2RlZmluZSBESU9fVwkJMHgwNAorI2RlZmluZSBESU9fUgkJMHgwNQorCitzdHJ1Y3Qgc3ViZGV2XzcwMF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgY2JfYXJnOworCWludCAoKmNiX2Z1bmMpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgaGF2ZV9pcnE7Cit9OworCisjZGVmaW5lIENBTExCQUNLX0FSRwkoKChzdHJ1Y3Qgc3ViZGV2XzcwMF9zdHJ1Y3QgKilzLT5wcml2YXRlKS0+Y2JfYXJnKQorI2RlZmluZSBDQUxMQkFDS19GVU5DCSgoKHN0cnVjdCBzdWJkZXZfNzAwX3N0cnVjdCAqKXMtPnByaXZhdGUpLT5jYl9mdW5jKQorI2RlZmluZSBzdWJkZXZwcml2CSgoc3RydWN0IHN1YmRldl83MDBfc3RydWN0ICopcy0+cHJpdmF0ZSkKKworc3RhdGljIHZvaWQgZG9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCit2b2lkIHN1YmRldl83MDBfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZDsKKworCWQgPSBDQUxMQkFDS19GVU5DKDAsIF83MDBfREFUQSwgMCwgQ0FMTEJBQ0tfQVJHKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIGludCBzdWJkZXZfNzAwX2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJLyogcG9ydCBpcyBhbHdheXMgQSBmb3Igb3V0cHV0IGFuZCBCIGZvciBpbnB1dCAoODI1NSBlbXUpICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBhcmc7CisKKwlpZiAoZGlyKSB7CisJCW91dGIoZGF0YSwgaW9iYXNlICsgRElPX1cpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW5iKGlvYmFzZSArIERJT19SKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzcwMF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKworCQlpZiAoZGF0YVswXSAmIDB4ZmYpCisJCQlDQUxMQkFDS19GVU5DKDEsIF83MDBfREFUQSwgcy0+c3RhdGUgJiAweGZmLAorCQkJCUNBTExCQUNLX0FSRyk7CisJfQorCisJZGF0YVsxXSA9IHMtPnN0YXRlICYgMHhmZjsKKwlkYXRhWzFdIHw9IENBTExCQUNLX0ZVTkMoMCwgXzcwMF9EQVRBLCAwLCBDQUxMQkFDS19BUkcpIDw8IDg7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBzdWJkZXZfNzAwX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sJCQkJLyogdXNlIHBvd2VydXAgZGVmYXVsdHMgKi8KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzcwMF9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIHN0ZXAgMSAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDIgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0ICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl83MDBfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl83MDBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzcwMF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCAoKmNiKSAoaW50LAorCQlpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisKKwlzLT5wcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN1YmRldl83MDBfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzLT5wcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUNBTExCQUNLX0FSRyA9IGFyZzsKKwlpZiAoY2IgPT0gTlVMTCkgeworCQlDQUxMQkFDS19GVU5DID0gc3ViZGV2XzcwMF9jYjsKKwl9IGVsc2UgeworCQlDQUxMQkFDS19GVU5DID0gY2I7CisJfQorCXMtPmluc25fYml0cyA9IHN1YmRldl83MDBfaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IHN1YmRldl83MDBfaW5zbl9jb25maWc7CisKKwlzLT5zdGF0ZSA9IDA7CisJcy0+aW9fYml0cyA9IDB4MDBmZjsKKwlkb19jb25maWcoZGV2LCBzKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzcwMF9pbml0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCAoKmNiKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzdWJkZXZfNzAwX2luaXQoZGV2LCBzLCBjYiwgYXJnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMtPmRvX2NtZHRlc3QgPSBzdWJkZXZfNzAwX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gc3ViZGV2XzcwMF9jbWQ7CisJcy0+Y2FuY2VsID0gc3ViZGV2XzcwMF9jYW5jZWw7CisKKwlzdWJkZXZwcml2LT5oYXZlX2lycSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdWJkZXZfNzAwX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocy0+cHJpdmF0ZSkgeworCQlpZiAoc3ViZGV2cHJpdi0+aGF2ZV9pcnEpIHsKKwkJfQorCisJCWtmcmVlKHMtPnByaXZhdGUpOworCX0KK30KKworRVhQT1JUX1NZTUJPTChzdWJkZXZfNzAwX2luaXQpOworRVhQT1JUX1NZTUJPTChzdWJkZXZfNzAwX2luaXRfaXJxKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9jbGVhbnVwKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9pbnRlcnJ1cHQpOworCitzdGF0aWMgaW50IGRpbzcwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworI2lmZGVmIGluY29tcGxldGUKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKyNlbmRpZgorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRpbzcwMF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8vIGdldCBiYXNlIGFkZHJlc3MsIGlycSBldGMuIGJhc2VkIG9uIGJ1c3R5cGUKKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KKwkJaWYgKCFsaW5rKQorCQkJcmV0dXJuIC1FSU87CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyNpZmRlZiBpbmNvbXBsZXRlCisJCWlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXByaW50aygiY29tZWRpJWQ6IG5pX2RhcV83MDA6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsCisJCXRoaXNib2FyZC0+bmFtZSwgaW9iYXNlKTsKKyNpZmRlZiBpbmNvbXBsZXRlCisJaWYgKGlycSkgeworCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKKwl9CisjZW5kaWYKKworCXByaW50aygiXG4iKTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoImlvIGJhc2UgYWRkcmVzcyBpcyB6ZXJvIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisjaWZkZWYgaW5jb21wbGV0ZQorCS8qIGdyYWIgb3VyIElSUSAqLworCWRldi0+aXJxID0gaXJxOworI2VuZGlmCisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBEQVFDYXJkLTcwMCBkaW8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzdWJkZXZfNzAwX2luaXQoZGV2LCBzLCBOVUxMLCBkZXYtPmlvYmFzZSk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGlvNzAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV9kYXFfNzAwOiBjcy1yZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzcwMF9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYV9idXN0eXBlICYmIGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRElPNzAwX1NJWkUpOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcmV0dXJuIDA7Cit9OworCisvLyBQQ01DSUEgY3JhcAorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJuaV9kYXFfNzAwLmMsIGJhc2VkIG9uIGR1bW15X2NzLmMiOworI2Vsc2UKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGlvNzAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkaW83MDBfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgaW50IGRpbzcwMF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitzdGF0aWMgaW50IGRpbzcwMF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGlvNzAwX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGRpbzcwMF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CisKKy8qCisgICBZb3UnbGwgYWxzbyBuZWVkIHRvIHByb3RvdHlwZSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYWN0dWFsbHkKKyAgIGJlIHVzZWQgdG8gdGFsayB0byB5b3VyIGRldmljZS4gIFNlZSAnbWVtb3J5X2NzJyBmb3IgYSBnb29kIGV4YW1wbGUKKyAgIG9mIGEgZnVsbHkgc2VsZi1zdWZmaWNpZW50IGRyaXZlcjsgdGhlIG90aGVyIGRyaXZlcnMgcmVseSBtb3JlIG9yCisgICBsZXNzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCisqLworCisvKgorICAgVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcworICAgZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KKyAgIGRhdGFiYXNlLgorKi8KKworc3RhdGljIGNvbnN0IGRldl9pbmZvX3QgZGV2X2luZm8gPSAibmlfZGFxXzcwMCI7CisKK3N0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvNzAwX2NzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCisgICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLgorCisgICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKKyAgICBjYXJkIGluc2VydGlvbiBldmVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGlvNzAwX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV83MDA6ICBjcy1hdHRhY2hcbiIpOworCisJREVCVUcoMCwgImRpbzcwMF9jc19hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghbG9jYWwpCisJCXJldHVybiAtRU5PTUVNOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJcGNtY2lhX2N1cl9kZXYgPSBsaW5rOworCisJZGlvNzAwX2NvbmZpZyhsaW5rKTsKKworCXJldHVybiAwOworfQkJCQkvKiBkaW83MDBfY3NfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzcwMF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfNzAwOiBjcy1kZXRhY2ghXG4iKTsKKworCURFQlVHKDAsICJkaW83MDBfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgbGluay0+cHJpdiktPnN0b3AgPSAxOworCQlkaW83MDBfcmVsZWFzZShsaW5rKTsKKwl9CisKKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IHN0cnVjdCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworCit9CQkJCS8qIGRpbzcwMF9jc19kZXRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBkaW83MDBfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CisgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCisgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGlvNzAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OworCXR1cGxlX3QgdHVwbGU7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwlpbnQgbGFzdF9yZXQ7CisJdV9jaGFyIGJ1Zls2NF07CisJd2luX3JlcV90IHJlcTsKKwltZW1yZXFfdCBtYXA7CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfNzAwOiAgY3MtY29uZmlnXG4iKTsKKworCURFQlVHKDAsICJkaW83MDBfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCWlmIChjZmctPmluZGV4ID09IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJCX0KKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7CisJCQljaXN0cGxfbWVtX3QgKm1lbSA9CisJCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOworCQkJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKKwkJCXJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7CisJCQlyZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJCXJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQkJaWYgKHJlcS5TaXplIDwgMHgxMDAwKQorCQkJCXJlcS5TaXplID0gMHgxMDAwOworCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJCW1hcC5QYWdlID0gMDsKKwkJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOworCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKwkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCQlicmVhazsKKworCSAgICAgIG5leHRfZW50cnk6CisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQkJY3NfZXJyb3IobGluaywgR2V0TmV4dFR1cGxlLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qCisJICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQorCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkgIT0gMCkgeworCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKworCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQorCSAgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgKi8KKwlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgIm5pX2RhcV83MDAiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT53aW4pCisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCisJCQlyZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxXzcwMCBjcyBmYWlsZWQiKTsKKwlkaW83MDBfcmVsZWFzZShsaW5rKTsKKworfQkJCQkvKiBkaW83MDBfY29uZmlnICovCisKK3N0YXRpYyB2b2lkIGRpbzcwMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkaW83MDBfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGRpbzcwMF9yZWxlYXNlICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICBNb3N0bHksIHRoaXMgc2NoZWR1bGVzIG90aGVyCisgICAgc3R1ZmYgdG8gcnVuIGFmdGVyIGFuIGV2ZW50IGlzIHJlY2VpdmVkLgorCisgICAgV2hlbiBhIENBUkRfUkVNT1ZBTCBldmVudCBpcyByZWNlaXZlZCwgd2UgaW1tZWRpYXRlbHkgc2V0IGEKKyAgICBwcml2YXRlIGZsYWcgdG8gYmxvY2sgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlLiAgQWxsIHRoZQorICAgIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGFjY2VzcyB0aGUgZGV2aWNlIHNob3VsZCBjaGVjayB0aGlzIGZsYWcKKyAgICB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGlvNzAwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQkJCQkvKiBkaW83MDBfY3Nfc3VzcGVuZCAqLworCitzdGF0aWMgaW50IGRpbzcwMF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJbG9jYWwtPnN0b3AgPSAwOworCXJldHVybiAwOworfQkJCQkvKiBkaW83MDBfY3NfcmVzdW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGlvNzAwX2NzX2lkc1tdID0geworCS8qIE4uQi4gVGhlc2UgSURzIHNob3VsZCBtYXRjaCB0aG9zZSBpbiBkaW83MDBfYm9hcmRzICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDQ3NDMpLAkvKiBkYXFjYXJkLTcwMCAqLworCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGRpbzcwMF9jc19pZHMpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBkaW83MDBfY3NfZHJpdmVyID0geworCS5wcm9iZSA9IGRpbzcwMF9jc19hdHRhY2gsCisJLnJlbW92ZSA9IGRpbzcwMF9jc19kZXRhY2gsCisJLnN1c3BlbmQgPSBkaW83MDBfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gZGlvNzAwX2NzX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBkaW83MDBfY3NfaWRzLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kaW83MDBfY3Modm9pZCkKK3sKKwlwcmludGsoIm5pX2RhcV83MDA6ICBjcy1pbml0IFxuIik7CisJREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZkaW83MDBfY3NfZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGlvNzAwX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIm5pX2RhcV83MDA6IHVubG9hZGluZ1xuIik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkaW83MDBfY3NfZHJpdmVyKTsKK30KK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW5pdF9kaW83MDBfY3MoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGlvNzAwKTsKK30KKwordm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlleGl0X2RpbzcwMF9jcygpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RpbzcwMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlYzVjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwpAQCAtMCwwICsxLDU5OCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENNQ0lBIERBUS1DYXJkIERJTy0yNAorICAgIENvcHlyaWdodCAoQykgMjAwMiBEYW5pZWwgVmVjaW5vIENhc3RlbCA8ZHZlY2lub0BhYmxlLmVzPgorCisgICAgUENNQ0lBIGNyYXAgYXQgZW5kIG9mIGZpbGUgaXMgYWRhcHRlZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzCisgICAgZnJvbSB0aGUgcGNtY2lhIHBhY2thZ2UuCisgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBwY21jaWEgZHVtbXlfY3MuYyBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBuaV9kYXFfZGlvMjQKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ01DSUEgREFRLUNhcmQgRElPLTI0CitBdXRob3I6IERhbmllbCBWZWNpbm8gQ2FzdGVsIDxkdmVjaW5vQGFibGUuZXM+CitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDTUNJQSBEQVEtQ2FyZCBESU8tMjQgKG5pX2RhcV9kaW8yNCkKK1N0YXR1czogPworVXBkYXRlZDogVGh1LCAwNyBOb3YgMjAwMiAyMTo1MzowNiAtMDgwMAorCitUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgODI1NS5vIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUKK3RoZSBQQ01DSUEgaW50ZXJmYWNlLgorKi8KKworLy8jZGVmaW5lIExBQlBDX0RFQlVHICAgLy8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcworI3VuZGVmIExBQlBDX0RFQlVHCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiODI1NS5oIgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfY3VyX2RldiA9IE5VTEw7CisKKyNkZWZpbmUgRElPMjRfU0laRSA0CQkvLyBzaXplIG9mIGlvIHJlZ2lvbiB1c2VkIGJ5IGJvYXJkCisKK3N0YXRpYyBpbnQgZGlvMjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGlvMjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworZW51bSBkaW8yNF9idXN0eXBlIHsgcGNtY2lhX2J1c3R5cGUgfTsKKwordHlwZWRlZiBzdHJ1Y3QgZGlvMjRfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBkZXZpY2UgaWQgZm9yIHBjbWNpYSBib2FyZAorCWVudW0gZGlvMjRfYnVzdHlwZSBidXN0eXBlOwkvLyBQQ01DSUEKKwlpbnQgaGF2ZV9kaW87CQkvLyBoYXZlIDgyNTUgY2hpcAorCS8vIGZ1bmN0aW9uIHBvaW50ZXJzIHNvIHdlIGNhbiB1c2UgaW5iL291dGIgb3IgcmVhZGIvd3JpdGViIGFzIGFwcHJvcHJpYXRlCisJdW5zaWduZWQgaW50ICgqcmVhZF9ieXRlKSAodW5zaWduZWQgaW50IGFkZHJlc3MpOworCXZvaWQgKCp3cml0ZV9ieXRlKSAodW5zaWduZWQgaW50IGJ5dGUsIHVuc2lnbmVkIGludCBhZGRyZXNzKTsKK30gZGlvMjRfYm9hcmQ7CisKK3N0YXRpYyBjb25zdCBkaW8yNF9ib2FyZCBkaW8yNF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcWNhcmQtZGlvMjQiLAorCSAgICAgIGRldmljZV9pZDoweDQ3NWMsLy8gMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NWMgaXMgZGV2aWNlIGlkCisJICAgICAgYnVzdHlwZToJcGNtY2lhX2J1c3R5cGUsCisJICAgICAgaGF2ZV9kaW86MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJIm5pX2RhcV9kaW8yNCIsCisJICAgICAgZGV2aWNlX2lkOjB4NDc1YywvLyAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4NDc1YyBpcyBkZXZpY2UgaWQKKwkgICAgICBidXN0eXBlOglwY21jaWFfYnVzdHlwZSwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBkaW8yNF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGlvMjRfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsJCS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkaW8yNF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RpbzI0ID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2RhcV9kaW8yNCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGlvMjRfYXR0YWNoLAorICAgICAgZGV0YWNoOmRpbzI0X2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZGlvMjRfYm9hcmRzKSAvIHNpemVvZihkaW8yNF9ib2FyZCksCisgICAgICBib2FyZF9uYW1lOiZkaW8yNF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2YoZGlvMjRfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBkaW8yNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworI2lmZGVmIGluY29tcGxldGUKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKyNlbmRpZgorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRpbzI0X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLy8gZ2V0IGJhc2UgYWRkcmVzcywgaXJxIGV0Yy4gYmFzZWQgb24gYnVzdHlwZQorCXN3aXRjaCAodGhpc2JvYXJkLT5idXN0eXBlKSB7CisJY2FzZSBwY21jaWFfYnVzdHlwZToKKwkJbGluayA9IHBjbWNpYV9jdXJfZGV2OwkvKiBYWFggaGFjayAqLworCQlpZiAoIWxpbmspCisJCQlyZXR1cm4gLUVJTzsKKwkJaW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworI2lmZGVmIGluY29tcGxldGUKKwkJaXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworI2VuZGlmCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiYnVnISBjb3VsZG4ndCBkZXRlcm1pbmUgYm9hcmQgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcHJpbnRrKCJjb21lZGklZDogbmlfZGFxX2RpbzI0OiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLAorCQl0aGlzYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisjaWZkZWYgaW5jb21wbGV0ZQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoIlxuIik7CisKKwlpZiAoaW9iYXNlID09IDApIHsKKwkJcHJpbnRrKCJpbyBiYXNlIGFkZHJlc3MgaXMgemVybyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworI2lmZGVmIGluY29tcGxldGUKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlkZXYtPmlycSA9IGlycTsKKyNlbmRpZgorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogODI1NSBkaW8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2LT5pb2Jhc2UpOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGRpbzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV9kYXFfZGlvMjQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYV9idXN0eXBlICYmIGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRElPMjRfU0laRSk7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXR1cm4gMDsKK307CisKKy8vIFBDTUNJQSBjcmFwCisKKy8qCisgICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgorICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKKyAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAorICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCisgICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCisqLworI2lmZGVmIFBDTUNJQV9ERUJVRworc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKK21vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0gIm5pX2RhcV9kaW8yNC5jLCBiYXNlZCBvbiBkdW1teV9jcy5jIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzI0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkaW8yNF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZGlvMjRfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkaW8yNF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGlvMjRfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgZGlvMjRfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV9kaW8yNCI7CisKK3R5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCXN0cnVjdCBidXNfb3BlcmF0aW9ucyAqYnVzOworfSBsb2NhbF9pbmZvX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvMjRfY3NfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKKyAgICBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuCisKKyAgICBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKyAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQorICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkaW8yNF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbDsKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8gLSBDUy1hdHRhY2ghXG4iKTsKKworCURFQlVHKDAsICJkaW8yNF9jc19hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CisKKwkvKgorCSAgIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCisJICAgY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yIGFsbW9zdAorCSAgIGV2ZXJ5dGhpbmcuICBJbiBtb3N0IGNsaWVudHMsIG1hbnkgZGV0YWlscyAoaS5lLiwgbnVtYmVyLCBzaXplcywKKwkgICBhbmQgYXR0cmlidXRlcyBvZiBJTyB3aW5kb3dzKSBhcmUgZml4ZWQgYnkgdGhlIG5hdHVyZSBvZiB0aGUKKwkgICBkZXZpY2UsIGFuZCBjYW4gYmUgaGFyZC13aXJlZCBoZXJlLgorCSAqLworCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CisJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKwlwY21jaWFfY3VyX2RldiA9IGxpbms7CisKKwlkaW8yNF9jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGlvMjRfY3NfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzI0X2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8gLSBjcy1kZXRhY2ghXG4iKTsKKworCURFQlVHKDAsICJkaW8yNF9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPmRldl9ub2RlKSB7CisJCSgobG9jYWxfaW5mb190ICopIGxpbmstPnByaXYpLT5zdG9wID0gMTsKKwkJZGlvMjRfcmVsZWFzZShsaW5rKTsKKwl9CisKKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KKwlpZiAobGluay0+cHJpdikKKwkJa2ZyZWUobGluay0+cHJpdik7CisKK30JCQkJLyogZGlvMjRfY3NfZGV0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvMjRfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CisgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCisgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGlvMjRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCXdpbl9yZXFfdCByZXE7CisJbWVtcmVxX3QgbWFwOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCisJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyEgLSBjb25maWdcbiIpOworCisJREVCVUcoMCwgImRpbzI0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKwkvKgorCSAgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgorCSAgIHJlZ2lzdGVycy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKwkvKgorCSAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCisJICAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZworCSAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKworCSAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCisJICAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKKwkgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKKwkgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCisJICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycworCSAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWRmbHQgPSAqY2ZnOworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKworCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCQl9CisKKwkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7CisJCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87CisJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7CisJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisKKwkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX21lbV90ICptZW0gPQorCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKKwkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007CisJCQlyZXEuQXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJCWlmIChyZXEuU2l6ZSA8IDB4MTAwMCkKKwkJCQlyZXEuU2l6ZSA9IDB4MTAwMDsKKwkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7CisJCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCQltYXAuUGFnZSA9IDA7CisJCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJCWNzX2Vycm9yKGxpbmssIEdldE5leHRUdXBsZSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKwl9CisKKwkvKgorCSAgIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEKKwkgICBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUKKwkgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgorCSAqLworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpICE9IDApIHsKKwkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisKKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJuaV9kYXFfZGlvMjQiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT53aW4pCisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCisJCQlyZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJcHJpbnRrKEtFUk5fSU5GTyAiRmFsbG8iKTsKKwlkaW8yNF9yZWxlYXNlKGxpbmspOworCit9CQkJCS8qIGRpbzI0X2NvbmZpZyAqLworCitzdGF0aWMgdm9pZCBkaW8yNF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkaW8yNF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK30JCQkJLyogZGlvMjRfcmVsZWFzZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBjYXJkIHN0YXR1cyBldmVudCBoYW5kbGVyLiAgTW9zdGx5LCB0aGlzIHNjaGVkdWxlcyBvdGhlcgorICAgIHN0dWZmIHRvIHJ1biBhZnRlciBhbiBldmVudCBpcyByZWNlaXZlZC4KKworICAgIFdoZW4gYSBDQVJEX1JFTU9WQUwgZXZlbnQgaXMgcmVjZWl2ZWQsIHdlIGltbWVkaWF0ZWx5IHNldCBhCisgICAgcHJpdmF0ZSBmbGFnIHRvIGJsb2NrIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGlzIGRldmljZS4gIEFsbCB0aGUKKyAgICBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBhY2Nlc3MgdGhlIGRldmljZSBzaG91bGQgY2hlY2sgdGhpcyBmbGFnCisgICAgdG8gbWFrZSBzdXJlIHRoZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRpbzI0X2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgc3RvcHBlZCwgdG8gYmxvY2sgSU8gdW50aWwgbGF0ZXIgKi8KKwlsb2NhbC0+c3RvcCA9IDE7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRpbzI0X2NzX3N1c3BlbmQgKi8KKworc3RhdGljIGludCBkaW8yNF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwlsb2NhbC0+c3RvcCA9IDA7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRpbzI0X2NzX3Jlc3VtZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIGRpbzI0X2NzX2lkc1tdID0geworCS8qIE4uQi4gVGhlc2UgSURzIHNob3VsZCBtYXRjaCB0aG9zZSBpbiBkaW8yNF9ib2FyZHMgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMGIsIDB4NDc1YyksCS8qIGRhcWNhcmQtZGlvMjQgKi8KKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkaW8yNF9jc19pZHMpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBkaW8yNF9jc19kcml2ZXIgPSB7CisJLnByb2JlID0gZGlvMjRfY3NfYXR0YWNoLAorCS5yZW1vdmUgPSBkaW8yNF9jc19kZXRhY2gsCisJLnN1c3BlbmQgPSBkaW8yNF9jc19zdXNwZW5kLAorCS5yZXN1bWUgPSBkaW8yNF9jc19yZXN1bWUsCisJLmlkX3RhYmxlID0gZGlvMjRfY3NfaWRzLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kaW8yNF9jcyh2b2lkKQoreworCXByaW50aygibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyFcbiIpOworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGlvMjRfY3NfZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGlvMjRfY3Modm9pZCkKK3sKKwlERUJVRygwLCAibmlfZGlvMjQ6IHVubG9hZGluZ1xuIik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkaW8yNF9jc19kcml2ZXIpOworfQorCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGlvMjRfY3MoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGlvMjQpOworfQorCit2b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWV4aXRfZGlvMjRfY3MoKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kaW8yNCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ODk4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtMCwwICsxLDIwMDUgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgTGFiLVBDIHNlcmllcyBib2FyZHMgYW5kIGNvbXBhdGlibGVzCisgICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBuaV9sYWJwYworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIExhYi1QQyAoJiBjb21wYXRpYmxlcykKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBMYWItUEMtMTIwMCAobGFicGMtMTIwMCksCisgIExhYi1QQy0xMjAwQUkgKGxhYnBjLTEyMDBhaSksIExhYi1QQysgKGxhYi1wYyspLCBQQ0ktMTIwMCAobmlfbGFicGMpCitTdGF0dXM6IHdvcmtzCisKK1Rlc3RlZCB3aXRoIGxhYi1wYy0xMjAwLiAgRm9yIHRoZSBvbGRlciBMYWItUEMrLCBub3QgYWxsIGlucHV0IHJhbmdlcworYW5kIGFuYWxvZyByZWZlcmVuY2VzIHdpbGwgd29yaywgdGhlIGF2YWlsYWJsZSByYW5nZXMvYXJlZnMgd2lsbAorZGVwZW5kIG9uIGhvdyB5b3UgaGF2ZSBjb25maWd1cmVkIHRoZSBqdW1wZXJzIG9uIHlvdXIgYm9hcmQKKyhzZWUgeW91ciBvd25lcidzIG1hbnVhbCkuCisKK0tlcm5lbC1sZXZlbCBJU0EgcGx1Zy1hbmQtcGxheSBzdXBwb3J0IGZvciB0aGUgbGFiLXBjLTEyMDAKK2JvYXJkcyBoYXMgbm90Cit5ZXQgYmVlbiBhZGRlZCB0byB0aGUgZHJpdmVyLCBtYWlubHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQKK0kgZG9uJ3Qga25vdyB0aGUgZGV2aWNlIGlkIG51bWJlcnMuICBJZiB5b3UgaGF2ZSBvbmUKK29mIHRoZXNlIGJvYXJkcywKK3BsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydCBhdCBodHRwczovL2J1Z3MuY29tZWRpLm9yZy8KK3NvIEkgY2FuIGdldCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20geW91LgorCitUaGUgMTIwMCBzZXJpZXMgYm9hcmRzIGhhdmUgb25ib2FyZCBjYWxpYnJhdGlvbiBkYWNzIGZvciBjb3JyZWN0aW5nCithbmFsb2cgaW5wdXQvb3V0cHV0IG9mZnNldHMgYW5kIGdhaW5zLiAgVGhlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhlc2UKK2NhbGRhY3MgYXJlIHN0b3JlZCBvbiB0aGUgYm9hcmQncyBlZXByb20uICBUbyByZWFkIHRoZSBjYWxkYWMgdmFsdWVzCitmcm9tIHRoZSBlZXByb20gYW5kIHN0b3JlIHRoZW0gaW50byBhIGZpbGUgdGhhdCBjYW4gYmUgdGhlbiBiZSB1c2VkIGJ5Citjb21lZGlsaWIsIHVzZSB0aGUgY29tZWRpX2NhbGlicmF0ZSBwcm9ncmFtLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBJU0EgYm9hcmRzOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIG9yIGV4dGVybmFsbHkgdHJpZ2dlcmVkIGNvbnZlcnNpb25zKQorICBbMl0gLSBETUEgY2hhbm5lbCAob3B0aW9uYWwpCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDSSBib2FyZHM6CisgIFswXSAtIGJ1cyAob3B0aW9uYWwpCisgIFsxXSAtIHNsb3QgKG9wdGlvbmFsKQorCitUaGUgTGFiLXBjKyBoYXMgcXVpcmt5IGNoYW5saXN0IHJlcXVpcmVtZW50cword2hlbiBzY2FubmluZyBtdWx0aXBsZSBjaGFubmVscy4gIE11bHRpcGxlIGNoYW5uZWwgc2Nhbgorc2VxdWVuY2UgbXVzdCBzdGFydCBhdCBoaWdoZXN0IGNoYW5uZWwsIHRoZW4gZGVjcmVtZW50IGRvd24gdG8KK2NoYW5uZWwgMC4gIFRoZSByZXN0IG9mIHRoZSBjYXJkcyBjYW4gc2NhbiBkb3duIGxpa2UgbGFiLXBjKyBvciBzY2FuCit1cCBmcm9tIGNoYW5uZWwgemVyby4gIENoYW5saXN0cyBjb25zaXN0aW5nIG9mIGFsbCBvbmUgY2hhbm5lbAorYXJlIGFsc28gbGVnYWwsIGFuZCBhbGxvdyB5b3UgdG8gcGFjZSBjb252ZXJzaW9ucyBpbiBidXJzdHMuCisKKyovCisKKy8qCisKK05JIG1hbnVhbHM6CiszNDEzMDlhIChsYWJwYy0xMjAwIHJlZ2lzdGVyIG1hbnVhbCkKKzM0MDkxNGEgKHBjaS0xMjAwKQorMzIwNTAyYiAobGFiLXBjKykKKworKi8KKworI3VuZGVmIExBQlBDX0RFQlVHCisvLyNkZWZpbmUgTEFCUENfREVCVUcgICAvLyBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJtaXRlLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisjaW5jbHVkZSAibmlfbGFicGMuaCIKKworI2RlZmluZSBEUlZfTkFNRSAibmlfbGFicGMiCisKKyNkZWZpbmUgTEFCUENfU0laRSAgICAgICAgICAgMzIJLy8gc2l6ZSBvZiBpbyByZWdpb24gdXNlZCBieSBib2FyZAorI2RlZmluZSBMQUJQQ19USU1FUl9CQVNFICAgICAgICAgICAgNTAwCS8vIDIgTUh6IG1hc3RlciBjbG9jaworCisvKiBSZWdpc3RlcnMgZm9yIHRoZSBsYWItcGMrICovCisKKy8vd3JpdGUtb25seSByZWdpc3RlcnMKKyNkZWZpbmUgQ09NTUFORDFfUkVHCTB4MAorI2RlZmluZSAgIEFEQ19HQUlOX01BU0sJKDB4NyA8PCA0KQorI2RlZmluZSAgIEFEQ19DSEFOX0JJVFMoeCkJKCh4KSAmIDB4NykKKyNkZWZpbmUgICBBRENfU0NBTl9FTl9CSVQJMHg4MAkvLyBlbmFibGVzIG11bHRpIGNoYW5uZWwgc2NhbnMKKyNkZWZpbmUgQ09NTUFORDJfUkVHCTB4MQorI2RlZmluZSAgIFBSRVRSSUdfQklUCTB4MQkvLyBlbmFibGUgcHJldHJpZ2dlcmluZyAodXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFNXVFJJRykKKyNkZWZpbmUgICBIV1RSSUdfQklUCTB4MgkvLyBlbmFibGUgcGFjZWQgY29udmVyc2lvbnMgb24gZXh0ZXJuYWwgdHJpZ2dlcgorI2RlZmluZSAgIFNXVFJJR19CSVQJMHg0CS8vIGVuYWJsZSBwYWNlZCBjb252ZXJzaW9ucworI2RlZmluZSAgIENBU0NBREVfQklUCTB4OAkvLyB1c2UgdHdvIGNhc2NhZGVkIGNvdW50ZXJzIGZvciBwYWNpbmcKKyNkZWZpbmUgICBEQUNfUEFDRURfQklUKGNoYW5uZWwpCSgweDQwIDw8ICgoY2hhbm5lbCkgJiAweDEpKQorI2RlZmluZSBDT01NQU5EM19SRUcJMHgyCisjZGVmaW5lICAgRE1BX0VOX0JJVAkweDEJLy8gZW5hYmxlIGRtYSB0cmFuc2ZlcnMKKyNkZWZpbmUgICBESU9fSU5UUl9FTl9CSVQJMHgyCS8vIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciA4MjU1CisjZGVmaW5lICAgRE1BVENfSU5UUl9FTl9CSVQJMHg0CS8vIGVuYWJsZSBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0CisjZGVmaW5lICAgVElNRVJfSU5UUl9FTl9CSVQJMHg4CS8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKKyNkZWZpbmUgICBFUlJfSU5UUl9FTl9CSVQJMHgxMAkvLyBlbmFibGUgZXJyb3IgaW50ZXJydXB0CisjZGVmaW5lICAgQURDX0ZORV9JTlRSX0VOX0JJVAkweDIwCS8vIGVuYWJsZSBmaWZvIG5vdCBlbXB0eSBpbnRlcnJ1cHQKKyNkZWZpbmUgQURDX0NPTlZFUlRfUkVHCTB4MworI2RlZmluZSBEQUNfTFNCX1JFRyhjaGFubmVsKQkoMHg0ICsgMiAqICgoY2hhbm5lbCkgJiAweDEpKQorI2RlZmluZSBEQUNfTVNCX1JFRyhjaGFubmVsKQkoMHg1ICsgMiAqICgoY2hhbm5lbCkgJiAweDEpKQorI2RlZmluZSBBRENfQ0xFQVJfUkVHCTB4OAorI2RlZmluZSBETUFUQ19DTEVBUl9SRUcJMHhhCisjZGVmaW5lIFRJTUVSX0NMRUFSX1JFRwkweGMKKyNkZWZpbmUgQ09NTUFORDZfUkVHCTB4ZQkvLyAxMjAwIGJvYXJkcyBvbmx5CisjZGVmaW5lICAgQURDX0NPTU1PTl9CSVQJMHgxCS8vIHNlbGVjdCBncm91bmQgb3IgY29tbW9uLW1vZGUgcmVmZXJlbmNlCisjZGVmaW5lICAgQURDX1VOSVBfQklUCTB4MgkvLyBhZGMgdW5pcG9sYXIKKyNkZWZpbmUgICBEQUNfVU5JUF9CSVQoY2hhbm5lbCkJKDB4NCA8PCAoKGNoYW5uZWwpICYgMHgxKSkJLy8gZGFjIHVuaXBvbGFyCisjZGVmaW5lICAgQURDX0ZIRl9JTlRSX0VOX0JJVAkweDIwCS8vIGVuYWJsZSBmaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHQKKyNkZWZpbmUgICBBMV9JTlRSX0VOX0JJVAkweDQwCS8vIGVuYWJsZSBpbnRlcnJ1cHQgb24gZW5kIG9mIGhhcmR3YXJlIGNvdW50CisjZGVmaW5lICAgQURDX1NDQU5fVVBfQklUIDB4ODAJLy8gc2NhbiB1cCBmcm9tIGNoYW5uZWwgemVybyBpbnN0ZWFkIG9mIGRvd24gdG8gemVybworI2RlZmluZSBDT01NQU5ENF9SRUcJMHhmCisjZGVmaW5lICAgSU5URVJWQUxfU0NBTl9FTl9CSVQJMHgxCS8vIGVuYWJsZXMgJ2ludGVydmFsJyBzY2FubmluZworI2RlZmluZSAgIEVYVF9TQ0FOX0VOX0JJVAkweDIJLy8gZW5hYmxlcyBleHRlcm5hbCBzaWduYWwgb24gY291bnRlciBiMSBvdXRwdXQgdG8gdHJpZ2dlciBzY2FuCisjZGVmaW5lICAgRVhUX0NPTlZFUlRfT1VUX0JJVAkweDQJLy8gY2hvb3NlcyBkaXJlY3Rpb24gKG91dHB1dCBvciBpbnB1dCkgZm9yIEVYVENPTlYqIGxpbmUKKyNkZWZpbmUgICBBRENfRElGRl9CSVQJMHg4CS8vIGNob29zZXMgZGlmZmVyZW50aWFsIGlucHV0cyBmb3IgYWRjIChpbiBjb25qdW5jdGlvbiB3aXRoIGJvYXJkIGp1bXBlcikKKyNkZWZpbmUgICBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVAkweDEwCisjZGVmaW5lIENPTU1BTkQ1X1JFRwkweDFjCS8vIDEyMDAgYm9hcmRzIG9ubHksIGNhbGlicmF0aW9uIHN0dWZmCisjZGVmaW5lICAgRUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQJMHg0CS8vIGVuYWJsZSBlZXByb20gZm9yIHdyaXRlCisjZGVmaW5lICAgRElUSEVSX0VOX0JJVAkweDgJLy8gZW5hYmxlIGRpdGhlcmluZworI2RlZmluZSAgIENBTERBQ19MT0FEX0JJVAkweDEwCS8vIGxvYWQgY2FsaWJyYXRpb24gZGFjCisjZGVmaW5lICAgU0NMT0NLX0JJVAkweDIwCS8vIHNlcmlhbCBjbG9jayAtIHJpc2luZyBlZGdlIHdyaXRlcywgZmFsbGluZyBlZGdlIHJlYWRzCisjZGVmaW5lICAgU0RBVEFfQklUCTB4NDAJLy8gc2VyaWFsIGRhdGEgYml0IGZvciB3cml0aW5nIHRvIGVlcHJvbSBvciBjYWxpYnJhdGlvbiBkYWNzCisjZGVmaW5lICAgRUVQUk9NX0VOX0JJVAkweDgwCS8vIGVuYWJsZSBlZXByb20gZm9yIHJlYWQvd3JpdGUKKyNkZWZpbmUgSU5URVJWQUxfQ09VTlRfUkVHCTB4MWUKKyNkZWZpbmUgSU5URVJWQUxfTE9BRF9SRUcJMHgxZgorI2RlZmluZSAgIElOVEVSVkFMX0xPQURfQklUUwkweDEKKworLy8gcmVhZC1vbmx5IHJlZ2lzdGVycworI2RlZmluZSBTVEFUVVMxX1JFRwkweDAKKyNkZWZpbmUgICBEQVRBX0FWQUlMX0JJVAkweDEJLy8gZGF0YSBpcyBhdmFpbGFibGUgaW4gZmlmbworI2RlZmluZSAgIE9WRVJSVU5fQklUCTB4MgkvLyBvdmVycnVuIGhhcyBvY2N1cnJlZAorI2RlZmluZSAgIE9WRVJGTE9XX0JJVAkweDQJLy8gZmlmbyBvdmVyZmxvdworI2RlZmluZSAgIFRJTUVSX0JJVAkweDgJLy8gdGltZXIgaW50ZXJydXB0IGhhcyBvY2N1cmVkCisjZGVmaW5lICAgRE1BVENfQklUCTB4MTAJLy8gZG1hIHRlcm1pbmFsIGNvdW50IGhhcyBvY2N1cmVkCisjZGVmaW5lICAgRVhUX1RSSUdfQklUCTB4NDAJLy8gZXh0ZXJuYWwgdHJpZ2dlciBoYXMgb2NjdXJlZAorI2RlZmluZSBTVEFUVVMyX1JFRwkweDFkCS8vIDEyMDAgYm9hcmRzIG9ubHkKKyNkZWZpbmUgICBFRVBST01fT1VUX0JJVAkweDEJLy8gcHJvZ3JhbW1hYmxlIGVlcHJvbSBzZXJpYWwgb3V0cHV0CisjZGVmaW5lICAgQTFfVENfQklUCTB4MgkvLyBjb3VudGVyIEExIHRlcm1pbmFsIGNvdW50CisjZGVmaW5lICAgRk5IRl9CSVQJMHg0CS8vIGZpZm8gbm90IGhhbGYgZnVsbAorI2RlZmluZSBBRENfRklGT19SRUcJMHhhCisKKyNkZWZpbmUgRElPX0JBU0VfUkVHCTB4MTAKKyNkZWZpbmUgQ09VTlRFUl9BX0JBU0VfUkVHCTB4MTQKKyNkZWZpbmUgQ09VTlRFUl9BX0NPTlRST0xfUkVHCShDT1VOVEVSX0FfQkFTRV9SRUcgKyAweDMpCisjZGVmaW5lICAgSU5JVF9BMF9CSVRTCTB4MTQJLy8gY2hlY2sgbW9kZXMgcHV0IGNvbnZlcnNpb24gcGFjZXIgb3V0cHV0IGluIGhhcm1sZXNzIHN0YXRlIChhMCBtb2RlIDIpCisjZGVmaW5lICAgSU5JVF9BMV9CSVRTCTB4NzAJLy8gcHV0IGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciBvdXRwdXQgaW4gaGFybWxlc3Mgc3RhdGUgKGExIG1vZGUgMCkKKyNkZWZpbmUgQ09VTlRFUl9CX0JBU0VfUkVHCTB4MTgKKworc3RhdGljIGludCBsYWJwY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBsYWJwY19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgbGFicGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBsYWJwY19kcmFpbl9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGxhYnBjX2RyYWluX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBoYW5kbGVfaXNhX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGxhYnBjX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGxhYnBjX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbGFicGNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfY2FsaWJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGxhYnBjX2NhbGliX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfZWVwcm9tX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBsYWJwY19lZXByb21fd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9jbWQgY21kKTsKK3N0YXRpYyB2b2lkIGxhYnBjX2FkY190aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIGludCBsYWJwY19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CisjZW5kaWYKK3N0YXRpYyBpbnQgbGFicGNfZGlvX21lbV9jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsCisJdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgbGFicGNfc2VyaWFsX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCBudW1fYml0cyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX3NlcmlhbF9pbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX2VlcHJvbV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfZWVwcm9tX3JlYWRfc3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfZWVwcm9tX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIHZvaWQgd3JpdGVfY2FsZGFjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworCitlbnVtIHNjYW5fbW9kZSB7CisJTU9ERV9TSU5HTEVfQ0hBTiwKKwlNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMLAorCU1PREVfTVVMVF9DSEFOX1VQLAorCU1PREVfTVVMVF9DSEFOX0RPV04sCit9OworCisvL2FuYWxvZyBpbnB1dCByYW5nZXMKKyNkZWZpbmUgTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTIDE2CisvLyBpbmRpY2F0ZXMgdW5pcG9sYXIgcmFuZ2VzCitzdGF0aWMgY29uc3QgaW50IGxhYnBjX3BsdXNfaXNfdW5pcG9sYXJbTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTXSA9IHsKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorfTsKKworLy8gbWFwIHJhbmdlIGluZGV4IHRvIGdhaW4gYml0cworc3RhdGljIGNvbnN0IGludCBsYWJwY19wbHVzX2FpX2dhaW5fYml0c1tOVU1fTEFCUENfUExVU19BSV9SQU5HRVNdID0geworCTB4MDAsCisJMHgxMCwKKwkweDIwLAorCTB4MzAsCisJMHg0MCwKKwkweDUwLAorCTB4NjAsCisJMHg3MCwKKwkweDAwLAorCTB4MTAsCisJMHgyMCwKKwkweDMwLAorCTB4NDAsCisJMHg1MCwKKwkweDYwLAorCTB4NzAsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2xhYnBjX3BsdXNfYWkgPSB7CisJTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTLAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSg0KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4yNSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoOCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMiksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC41KSwKKwkJCVVOSV9SQU5HRSgwLjIpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCX0KK307CisKKyNkZWZpbmUgTlVNX0xBQlBDXzEyMDBfQUlfUkFOR0VTIDE0CisvLyBpbmRpY2F0ZXMgdW5pcG9sYXIgcmFuZ2VzCitjb25zdCBpbnQgbGFicGNfMTIwMF9pc191bmlwb2xhcltOVU1fTEFCUENfMTIwMF9BSV9SQU5HRVNdID0geworCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKK307CisKKy8vIG1hcCByYW5nZSBpbmRleCB0byBnYWluIGJpdHMKK2NvbnN0IGludCBsYWJwY18xMjAwX2FpX2dhaW5fYml0c1tOVU1fTEFCUENfMTIwMF9BSV9SQU5HRVNdID0geworCTB4MDAsCisJMHgyMCwKKwkweDMwLAorCTB4NDAsCisJMHg1MCwKKwkweDYwLAorCTB4NzAsCisJMHgwMCwKKwkweDIwLAorCTB4MzAsCisJMHg0MCwKKwkweDUwLAorCTB4NjAsCisJMHg3MCwKK307Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9sYWJwY18xMjAwX2FpID0geworCU5VTV9MQUJQQ18xMjAwX0FJX1JBTkdFUywKKwl7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMjUpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIpLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuNSksCisJCQlVTklfUkFOR0UoMC4yKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQl9Cit9OworCisvL2FuYWxvZyBvdXRwdXQgcmFuZ2VzCisjZGVmaW5lIEFPX1JBTkdFX0lTX1VOSVBPTEFSIDB4MQorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2xhYnBjX2FvID0geworCTIsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJfQorfTsKKworLyogZnVuY3Rpb25zIHRoYXQgZG8gaW5iL291dGIgYW5kIHJlYWRiL3dyaXRlYiBzbyB3ZSBjYW4gdXNlCisgKiBmdW5jdGlvbiBwb2ludGVycyB0byBkZWNpZGUgd2hpY2ggdG8gdXNlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsYWJwY19pbmIodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBpbmIoYWRkcmVzcyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbGFicGNfb3V0Yih1bnNpZ25lZCBpbnQgYnl0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCW91dGIoYnl0ZSwgYWRkcmVzcyk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsYWJwY19yZWFkYih1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIHJlYWRiKCh2b2lkICopYWRkcmVzcyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbGFicGNfd3JpdGViKHVuc2lnbmVkIGludCBieXRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJd3JpdGViKGJ5dGUsICh2b2lkICopYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBjb25zdCBsYWJwY19ib2FyZCBsYWJwY19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImxhYi1wYy0xMjAwIiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICByZWdpc3Rlcl9sYXlvdXQ6bGFicGNfMTIwMF9sYXlvdXQsCisJICAgICAgaGFzX2FvOgkxLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZV9sYWJwY18xMjAwX2FpLAorCSAgICAgIGFpX3JhbmdlX2NvZGU6bGFicGNfMTIwMF9haV9nYWluX2JpdHMsCisJICAgICAgYWlfcmFuZ2VfaXNfdW5pcG9sYXI6bGFicGNfMTIwMF9pc191bmlwb2xhciwKKwkgICAgICBhaV9zY2FuX3VwOjEsCisJICAgICAgbWVtb3J5X21hcHBlZF9pbzowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkibGFiLXBjLTEyMDBhaSIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgcmVnaXN0ZXJfbGF5b3V0OmxhYnBjXzEyMDBfbGF5b3V0LAorCSAgICAgIGhhc19hbzoJMCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomcmFuZ2VfbGFicGNfMTIwMF9haSwKKwkgICAgICBhaV9yYW5nZV9jb2RlOmxhYnBjXzEyMDBfYWlfZ2Fpbl9iaXRzLAorCSAgICAgIGFpX3JhbmdlX2lzX3VuaXBvbGFyOmxhYnBjXzEyMDBfaXNfdW5pcG9sYXIsCisJICAgICAgYWlfc2Nhbl91cDoxLAorCSAgICAgIG1lbW9yeV9tYXBwZWRfaW86MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImxhYi1wYysiLAorCSAgICAgIGFpX3NwZWVkOjEyMDAwLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY19wbHVzX2xheW91dCwKKwkgICAgICBoYXNfYW86CTEsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjX3BsdXNfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY19wbHVzX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY19wbHVzX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MCwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJCW5hbWU6CSJwY2ktMTIwMCIsCisJCWRldmljZV9pZDoweDE2MSwKKwkJYWlfc3BlZWQ6MTAwMDAsCisJCWJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCQlyZWdpc3Rlcl9sYXlvdXQ6bGFicGNfMTIwMF9sYXlvdXQsCisJCWhhc19hbzoJMSwKKwkJYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJCWFpX3JhbmdlX2NvZGU6bGFicGNfMTIwMF9haV9nYWluX2JpdHMsCisJCWFpX3JhbmdlX2lzX3VuaXBvbGFyOmxhYnBjXzEyMDBfaXNfdW5pcG9sYXIsCisJCWFpX3NjYW5fdXA6MSwKKwkJbWVtb3J5X21hcHBlZF9pbzoxLAorCQl9LAorCS8vIGR1bW15IGVudHJ5IHNvIHBjaSBib2FyZCB3b3JrcyB3aGVuIGNvbWVkaV9jb25maWcgaXMgcGFzc2VkIGRyaXZlciBuYW1lCisJeworCQkubmFtZSA9IERSVl9OQU1FLAorCQkuYnVzdHlwZSA9IHBjaV9idXN0eXBlLAorCQl9LAorI2VuZGlmCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGxhYnBjX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBjb25zdCBpbnQgZG1hX2J1ZmZlcl9zaXplID0gMHhmZjAwOwkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSBidWZmZXIKK3N0YXRpYyBjb25zdCBpbnQgc2FtcGxlX3NpemUgPSAyOwkvLyAyIGJ5dGVzIHBlciBzYW1wbGUKKworI2RlZmluZSBkZXZwcml2ICgobGFicGNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9sYWJwYyA9IHsKKwkuZHJpdmVyX25hbWUgPSBEUlZfTkFNRSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dGFjaCA9IGxhYnBjX2F0dGFjaCwKKwkuZGV0YWNoID0gbGFicGNfY29tbW9uX2RldGFjaCwKKwkubnVtX25hbWVzID0gc2l6ZW9mKGxhYnBjX2JvYXJkcykgLyBzaXplb2YobGFicGNfYm9hcmQpLAorCS5ib2FyZF9uYW1lID0gJmxhYnBjX2JvYXJkc1swXS5uYW1lLAorCS5vZmZzZXQgPSBzaXplb2YobGFicGNfYm9hcmQpLAorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobGFicGNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbGFicGNfcGNpX3RhYmxlKTsKKyNlbmRpZiAvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCitzdGF0aWMgaW5saW5lIGludCBsYWJwY19jb3VudGVyX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwKKwl1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBtb2RlKQoreworCWlmICh0aGlzYm9hcmQtPm1lbW9yeV9tYXBwZWRfaW8pCisJCXJldHVybiBpODI1NF9tbV9sb2FkKCh2b2lkICopYmFzZV9hZGRyZXNzLCAwLCBjb3VudGVyX251bWJlciwKKwkJCWNvdW50LCBtb2RlKTsKKwllbHNlCisJCXJldHVybiBpODI1NF9sb2FkKGJhc2VfYWRkcmVzcywgMCwgY291bnRlcl9udW1iZXIsIGNvdW50LCBtb2RlKTsKK30KKworaW50IGxhYnBjX2NvbW1vbl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgaW9iYXNlLAorCXVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkbWFfY2hhbikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGRtYV9mbGFncywgaXNyX2ZsYWdzOworCXNob3J0IGxzYiwgbXNiOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfbGFicGM6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwKKwkJaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0KKwlpZiAoZG1hX2NoYW4pIHsKKwkJcHJpbnRrKCIsIGRtYSAldSIsIGRtYV9jaGFuKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIGlzIHplcm8hXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vIHJlcXVlc3QgaW8gcmVnaW9ucyBmb3IgaXNhIGJvYXJkcworCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUpIHsKKwkJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIExBQlBDX1NJWkUsCisJCQkJZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgeworCQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICh0aGlzYm9hcmQtPm1lbW9yeV9tYXBwZWRfaW8pIHsKKwkJZGV2cHJpdi0+cmVhZF9ieXRlID0gbGFicGNfcmVhZGI7CisJCWRldnByaXYtPndyaXRlX2J5dGUgPSBsYWJwY193cml0ZWI7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+cmVhZF9ieXRlID0gbGFicGNfaW5iOworCQlkZXZwcml2LT53cml0ZV9ieXRlID0gbGFicGNfb3V0YjsKKwl9CisJLy8gaW5pdGlhbGl6ZSBib2FyZCdzIGNvbW1hbmQgcmVnaXN0ZXJzCisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQxX1JFRyk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kM19iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQzX1JFRyk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNF9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ0X1JFRyk7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNl9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENl9SRUcpOworCX0KKworCS8qIGdyYWIgb3VyIElSUSAqLworCWlmIChpcnEpIHsKKwkJaXNyX2ZsYWdzID0gMDsKKwkJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY2lfYnVzdHlwZSkKKwkJCWlzcl9mbGFncyB8PSBJUlFGX1NIQVJFRDsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAorCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgeworCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwkvLyBncmFiIGRtYSBjaGFubmVsCisJaWYgKGRtYV9jaGFuID4gMykgeworCQlwcmludGsoIiBpbnZhbGlkIGRtYSBjaGFubmVsICV1XG4iLCBkbWFfY2hhbik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoZG1hX2NoYW4pIHsKKwkJLy8gYWxsb2NhdGUgZG1hIGJ1ZmZlcgorCQlkZXZwcml2LT5kbWFfYnVmZmVyID0KKwkJCWttYWxsb2MoZG1hX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyID09IE5VTEwpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWFfY2hhbiwgZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgeworCQkJcHJpbnRrKCIgZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBjaGFubmVsICV1XG4iLAorCQkJCWRtYV9jaGFuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmRtYV9jaGFuID0gZG1hX2NoYW47CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYV9jaGFuLCBETUFfTU9ERV9SRUFEKTsKKwkJcmVsZWFzZV9kbWFfbG9jayhkbWFfZmxhZ3MpOworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT04gfCBTREZfRElGRiB8CisJCVNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CS8vIDEyIGJpdCByZXNvbHV0aW9uCisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlX3RhYmxlOworCXMtPmRvX2NtZCA9IGxhYnBjX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gbGFicGNfYWlfY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBsYWJwY19haV9yaW5zbjsKKwlzLT5jYW5jZWwgPSBsYWJwY19jYW5jZWw7CisKKwkvKiBhbmFsb2cgb3V0cHV0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKHRoaXNib2FyZC0+aGFzX2FvKSB7CisvKiBDb3VsZCBwcm92aWRlIGNvbW1hbmQgc3VwcG9ydCwgZXhjZXB0IGl0IG9ubHkgaGFzIGEgb25lIHNhbXBsZQorICogaGFyZHdhcmUgYnVmZmVyIGZvciBhbmFsb2cgb3V0cHV0IGFuZCBubyB1bmRlcnJ1biBmbGFnLiAqLworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IE5VTV9BT19DSEFOOworCQlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsJLy8gMTIgYml0IHJlc29sdXRpb24KKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfbGFicGNfYW87CisJCXMtPmluc25fcmVhZCA9IGxhYnBjX2FvX3JpbnNuOworCQlzLT5pbnNuX3dyaXRlID0gbGFicGNfYW9fd2luc247CisJCS8qIGluaXRpYWxpemUgYW5hbG9nIG91dHB1dHMgdG8gYSBrbm93biB2YWx1ZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspIHsKKwkJCWRldnByaXYtPmFvX3ZhbHVlW2ldID0gcy0+bWF4ZGF0YSAvIDI7CisJCQlsc2IgPSBkZXZwcml2LT5hb192YWx1ZVtpXSAmIDB4ZmY7CisJCQltc2IgPSAoZGV2cHJpdi0+YW9fdmFsdWVbaV0gPj4gOCkgJiAweGZmOworCQkJZGV2cHJpdi0+d3JpdGVfYnl0ZShsc2IsIGRldi0+aW9iYXNlICsgREFDX0xTQl9SRUcoaSkpOworCQkJZGV2cHJpdi0+d3JpdGVfYnl0ZShtc2IsIGRldi0+aW9iYXNlICsgREFDX01TQl9SRUcoaSkpOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwkvKiA4MjU1IGRpbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8vIGlmIGJvYXJkIHVzZXMgaW8gbWVtb3J5IHdlIGhhdmUgdG8gZ2l2ZSBhIGN1c3RvbSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgODI1NSBkcml2ZXIKKwlpZiAodGhpc2JvYXJkLT5tZW1vcnlfbWFwcGVkX2lvKQorCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgbGFicGNfZGlvX21lbV9jYWxsYmFjaywKKwkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIERJT19CQVNFX1JFRykpOworCWVsc2UKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlICsgRElPX0JBU0VfUkVHKTsKKworCS8vIGNhbGlicmF0aW9uIHN1YmRldmljZXMgZm9yIGJvYXJkcyB0aGF0IGhhdmUgb25lCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5uX2NoYW4gPSAxNjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJCXMtPmluc25fcmVhZCA9IGxhYnBjX2NhbGliX3JlYWRfaW5zbjsKKwkJcy0+aW5zbl93cml0ZSA9IGxhYnBjX2NhbGliX3dyaXRlX2luc247CisKKwkJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQkJd3JpdGVfY2FsZGFjKGRldiwgaSwgcy0+bWF4ZGF0YSAvIDIpOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLyogRUVQUk9NICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gRUVQUk9NX1NJWkU7CisJCXMtPm1heGRhdGEgPSAweGZmOworCQlzLT5pbnNuX3JlYWQgPSBsYWJwY19lZXByb21fcmVhZF9pbnNuOworCQlzLT5pbnNuX3dyaXRlID0gbGFicGNfZWVwcm9tX3dyaXRlX2luc247CisKKwkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspIHsKKwkJCWRldnByaXYtPmVlcHJvbV9kYXRhW2ldID0gbGFicGNfZWVwcm9tX3JlYWQoZGV2LCBpKTsKKwkJfQorI2lmZGVmIExBQlBDX0RFQlVHCisJCXByaW50aygiIGVlcHJvbToiKTsKKwkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspIHsKKwkJCXByaW50aygiICVpOjB4JXggIiwgaSwgZGV2cHJpdi0+ZWVwcm9tX2RhdGFbaV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKyNlbmRpZgorCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gMDsKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKwl1bnNpZ25lZCBpbnQgZG1hX2NoYW4gPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaW50IHJldHZhbDsKKyNlbmRpZgorCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YobGFicGNfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvLyBnZXQgYmFzZSBhZGRyZXNzLCBpcnEgZXRjLiBiYXNlZCBvbiBidXN0eXBlCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCWRtYV9jaGFuID0gaXQtPm9wdGlvbnNbMl07CisJCWJyZWFrOworCWNhc2UgcGNpX2J1c3R5cGU6CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJcmV0dmFsID0gbGFicGNfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlyZXR2YWwgPSBtaXRlX3NldHVwKGRldnByaXYtPm1pdGUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyOworCQlpcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKKyNlbHNlCisJCXByaW50aygiIHRoaXMgZHJpdmVyIGhhcyBub3QgYmVlbiBidWlsdCB3aXRoIFBDSSBzdXBwb3J0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCXByaW50aygiIHRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgcGNtY2lhIGNhcmRzLCB1c2UgbmlfbGFicGNfY3Mub1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxhYnBjX2NvbW1vbl9hdHRhY2goZGV2LCBpb2Jhc2UsIGlycSwgZG1hX2NoYW4pOworfQorCisvLyBhZGFwdGVkIGZyb20gbmlfcGNpbWlvIGZvciBmaW5kaW5nIG1pdGUgYmFzZWQgYm9hcmRzIChwYy0xMjAwKQorI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgaW50IGxhYnBjX2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKwlmb3IgKG1pdGUgPSBtaXRlX2RldmljZXM7IG1pdGU7IG1pdGUgPSBtaXRlLT5uZXh0KSB7CisJCWlmIChtaXRlLT51c2VkKQorCQkJY29udGludWU7CisJCS8vIGlmIGJ1cy9zbG90IGFyZSBzcGVjaWZpZWQgdGhlbiBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgYnVzL3Nsb3QKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBkcml2ZXJfbGFicGMubnVtX25hbWVzOyBpKyspIHsKKwkJCWlmIChsYWJwY19ib2FyZHNbaV0uYnVzdHlwZSAhPSBwY2lfYnVzdHlwZSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBsYWJwY19ib2FyZHNbaV0uZGV2aWNlX2lkKSB7CisJCQkJZGV2cHJpdi0+bWl0ZSA9IG1pdGU7CisJCQkJLy8gZml4dXAgYm9hcmQgcG9pbnRlciwgaW4gY2FzZSB3ZSB3ZXJlIHVzaW5nIHRoZSBkdW1teSAibmlfbGFicGMiIGVudHJ5CisJCQkJZGV2LT5ib2FyZF9wdHIgPSAmbGFicGNfYm9hcmRzW2ldOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorI2VuZGlmCisKK2ludCBsYWJwY19jb21tb25fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiBkZXRhY2hcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCisJLyogb25seSBmcmVlIHN0dWZmIGlmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBfYXR0YWNoICovCisJaWYgKGRldnByaXYtPmRtYV9idWZmZXIpCisJCWtmcmVlKGRldnByaXYtPmRtYV9idWZmZXIpOworCWlmIChkZXZwcml2LT5kbWFfY2hhbikKKwkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUgJiYgZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBMQUJQQ19TSVpFKTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChkZXZwcml2LT5taXRlKQorCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisjZW5kaWYKKworCXJldHVybiAwOworfTsKKworc3RhdGljIHZvaWQgbGFicGNfY2xlYXJfYWRjX2ZpZm8oY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NMRUFSX1JFRyk7CisJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKKwlkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBBRENfRklGT19SRUcpOworfQorCitzdGF0aWMgaW50IGxhYnBjX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5TV1RSSUdfQklUICYgfkhXVFJJR19CSVQgJiB+UFJFVFJJR19CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWRldnByaXYtPmNvbW1hbmQzX2JpdHMgPSAwOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHNjYW5fbW9kZSBsYWJwY19haV9zY2FuX21vZGUoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDEpCisJCXJldHVybiBNT0RFX1NJTkdMRV9DSEFOOworCisJLyogY2hhbmxpc3QgbWF5IGJlIE5VTEwgZHVyaW5nIGNtZHRlc3QuICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE1PREVfTVVMVF9DSEFOX1VQOworCisJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgPT0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzFdKSkKKwkJcmV0dXJuIE1PREVfU0lOR0xFX0NIQU5fSU5URVJWQUw7CisKKwlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA8IENSX0NIQU4oY21kLT5jaGFubGlzdFsxXSkpCisJCXJldHVybiBNT0RFX01VTFRfQ0hBTl9VUDsKKworCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pID4gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzFdKSkKKwkJcmV0dXJuIE1PREVfTVVMVF9DSEFOX0RPV047CisKKwlydF9wcmludGsoIm5pX2xhYnBjOiBidWchIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsYWJwY19haV9jaGFubGlzdF9pbnZhbGlkKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBtb2RlLCBjaGFubmVsLCByYW5nZSwgYXJlZiwgaTsKKworCWlmIChjbWQtPmNoYW5saXN0ID09IE5VTEwpCisJCXJldHVybiAwOworCisJbW9kZSA9IGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpOworCisJaWYgKG1vZGUgPT0gTU9ERV9TSU5HTEVfQ0hBTikKKwkJcmV0dXJuIDA7CisKKwlpZiAobW9kZSA9PSBNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMKSB7CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDB4ZmYpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJIm5pX2xhYnBjOiBjaGFubGlzdCB0b28gbG9uZyBmb3Igc2luZ2xlIGNoYW5uZWwgaW50ZXJ2YWwgbW9kZVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWNoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIE1PREVfU0lOR0xFX0NIQU5fSU5URVJWQUw6CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPSBjaGFubmVsKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5uZWwgc2Nhbm5pbmcgb3JkZXIgc3BlY2lmaWVkIGluIGNoYW5saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUuXG4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE1PREVfTVVMVF9DSEFOX1VQOgorCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gaSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubmVsIHNjYW5uaW5nIG9yZGVyIHNwZWNpZmllZCBpbiBjaGFubGlzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLlxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBNT0RFX01VTFRfQ0hBTl9ET1dOOgorCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQljbWQtPmNoYW5saXN0X2xlbiAtIGkgLSAxKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5uZWwgc2Nhbm5pbmcgb3JkZXIgc3BlY2lmaWVkIGluIGNoYW5saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUuXG4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnRfcHJpbnRrKCJuaV9sYWJwYzogYnVnISBpbiBjaGFubGlzdCBjaGVja1xuIik7CisJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IHJhbmdlKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgcmFuZ2VcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSAhPSBhcmVmKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfdXNlX2NvbnRpbnVvdXNfbW9kZShjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9TSU5HTEVfQ0hBTikKKwkJcmV0dXJuIDE7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSKQorCQlyZXR1cm4gMDsKKworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX1NJTkdMRV9DSEFOICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJcmV0dXJuIGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisKKwlyZXR1cm4gY21kLT5jb252ZXJ0X2FyZzsKK30KKworc3RhdGljIHZvaWQgbGFicGNfc2V0X2FpX2NvbnZlcnRfcGVyaW9kKHN0cnVjdCBjb21lZGlfY21kICogY21kLCB1bnNpZ25lZCBpbnQgbnMpCit7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfU0lOR0xFX0NIQU4gJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBuczsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJfSBlbHNlCisJCWNtZC0+Y29udmVydF9hcmcgPSBuczsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19haV9zY2FuX3BlcmlvZChjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSKQorCQlyZXR1cm4gMDsKKworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX1NJTkdMRV9DSEFOICYmCisJCWNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY21kLT5zY2FuX2JlZ2luX2FyZzsKK30KKworc3RhdGljIHZvaWQgbGFicGNfc2V0X2FpX3NjYW5fcGVyaW9kKHN0cnVjdCBjb21lZGlfY21kICogY21kLCB1bnNpZ25lZCBpbnQgbnMpCit7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfU0lOR0xFX0NIQU4gJiYKKwkJY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQlyZXR1cm47CisKKwljbWQtPnNjYW5fYmVnaW5fYXJnID0gbnM7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIHRtcDI7CisJaW50IHN0b3BfbWFzazsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19GT0xMT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCXN0b3BfbWFzayA9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KQorCQlzdG9wX21hc2sgfD0gVFJJR19FWFQ7CisJY21kLT5zdG9wX3NyYyAmPSBzdG9wX21hc2s7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCS8vIGNhbid0IGhhdmUgZXh0ZXJuYWwgc3RvcCBhbmQgc3RhcnQgdHJpZ2dlcnMgYXQgb25jZQorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnID09IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisJLy8gbWFrZSBzdXJlIHNjYW4gdGltaW5nIGlzIG5vdCB0b28gZmFzdAorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJdGhpc2JvYXJkLT5haV9zcGVlZCAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJZXJyKys7CisJCX0KKwl9CisJLy8gc3RvcCBzb3VyY2UKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwkJLy8gVFJJR19FWFQgZG9lc24ndCBjYXJlIHNpbmNlIGl0IGRvZXNuJ3QgdHJpZ2dlciBvZmYgYSBudW1iZXJlZCBjaGFubmVsCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCXRtcDIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCWxhYnBjX2FkY190aW1pbmcoZGV2LCBjbWQpOworCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZyB8fCB0bXAyICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAobGFicGNfYWlfY2hhbmxpc3RfaW52YWxpZChkZXYsIGNtZCkpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGNoYW5uZWwsIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJZW51bSB0cmFuc2Zlcl90eXBlIHhmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGV2LT5pcnEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIm5vIGlycSBhc3NpZ25lZCwgY2Fubm90IHBlcmZvcm0gY29tbWFuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKKworCS8vIG1ha2Ugc3VyZSBib2FyZCBpcyBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB1cCBhcXVpc2l0aW9uCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+U1dUUklHX0JJVCAmIH5IV1RSSUdfQklUICYgflBSRVRSSUdfQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlkZXZwcml2LT5jb21tYW5kM19iaXRzID0gMDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKKworCS8vIGluaXRpYWxpemUgc29mdHdhcmUgY29udmVyc2lvbiBjb3VudAorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+Y291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8vIHNldHVwIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlcgorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCS8vIGxvYWQgY291bnRlciBhMSB3aXRoIGNvdW50IG9mIDMgKHBjKyBtYW51YWwgc2F5cyB0aGlzIGlzIG1pbmltdW0gYWxsb3dlZCkgdXNpbmcgbW9kZSAwCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAorCQkJMSwgMywgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGExIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UJCQkvLyBvdGhlcndpc2UsIGp1c3QgcHV0IGExIGluIG1vZGUgMCB3aXRoIG5vIGNvdW50IHRvIHNldCBpdHMgb3V0cHV0IGxvdworCQlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTFfQklUUywKKwkJCWRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0NPTlRST0xfUkVHKTsKKworCS8vIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2Qgd2Ugd2lsbCB1c2UgdG8gdHJhbnNmZXIgZGF0YQorCWlmIChkZXZwcml2LT5kbWFfY2hhbiAmJgkvLyBuZWVkIGEgZG1hIGNoYW5uZWwgYWxsb2NhdGVkCisJCS8vIGRtYSB1bnNhZmUgYXQgUlQgcHJpb3JpdHksIGFuZCB0b28gbXVjaCBzZXR1cCB0aW1lIGZvciBUUklHX1dBS0VfRU9TIGZvcgorCQkoY21kLT5mbGFncyAmIChUUklHX1dBS0VfRU9TIHwgVFJJR19SVCkpID09IDAgJiYKKwkJLy8gb25seSBhdmFpbGFibGUgb24gdGhlIGlzYSBib2FyZHMKKwkJdGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCXhmZXIgPSBpc2FfZG1hX3RyYW5zZmVyOworCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQgJiYJLy8gcGMtcGx1cyBoYXMgbm8gZmlmby1oYWxmIGZ1bGwgaW50ZXJydXB0CisJCS8vIHdha2UtZW5kLW9mLXNjYW4gc2hvdWxkIGludGVycnVwdCBvbiBmaWZvIG5vdCBlbXB0eQorCQkoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpID09IDAgJiYKKwkJLy8gbWFrZSBzdXJlIHdlIGFyZSB0YWtpbmcgbW9yZSB0aGFuIGp1c3QgYSBmZXcgcG9pbnRzCisJCShjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgfHwgZGV2cHJpdi0+Y291bnQgPiAyNTYpKSB7CisJCXhmZXIgPSBmaWZvX2hhbGZfZnVsbF90cmFuc2ZlcjsKKwl9IGVsc2UKKwkJeGZlciA9IGZpZm9fbm90X2VtcHR5X3RyYW5zZmVyOworCWRldnByaXYtPmN1cnJlbnRfdHJhbnNmZXIgPSB4ZmVyOworCisJLy8gc2V0dXAgY29tbWFuZDYgcmVnaXN0ZXIgZm9yIDEyMDAgYm9hcmRzCisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCS8vIHJlZmVyZW5jZSBpbnB1dHMgdG8gZ3JvdW5kIG9yIGNvbW1vbj8KKwkJaWYgKGFyZWYgIT0gQVJFRl9HUk9VTkQpCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19DT01NT05fQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfQ09NTU9OX0JJVDsKKwkJLy8gYmlwb2xhciBvciB1bmlwb2xhciByYW5nZT8KKwkJaWYgKHRoaXNib2FyZC0+YWlfcmFuZ2VfaXNfdW5pcG9sYXJbcmFuZ2VdKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfVU5JUF9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19VTklQX0JJVDsKKwkJLy8gaW50ZXJydXB0IG9uIGZpZm8gaGFsZiBmdWxsPworCQlpZiAoeGZlciA9PSBmaWZvX2hhbGZfZnVsbF90cmFuc2ZlcikKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQURDX0ZIRl9JTlRSX0VOX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX0ZIRl9JTlRSX0VOX0JJVDsKKwkJLy8gZW5hYmxlIGludGVycnVwdCBvbiBjb3VudGVyIGExIHRlcm1pbmFsIGNvdW50PworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQTFfSU5UUl9FTl9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkExX0lOVFJfRU5fQklUOworCQkvLyBhcmUgd2Ugc2Nhbm5pbmcgdXAgb3IgZG93biB0aHJvdWdoIGNoYW5uZWxzPworCQlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fVVApCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19TQ0FOX1VQX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX1NDQU5fVVBfQklUOworCQkvLyB3cml0ZSB0byByZWdpc3RlcgorCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ2X2JpdHMsCisJCQlkZXYtPmlvYmFzZSArIENPTU1BTkQ2X1JFRyk7CisJfQorCisJLyogc2V0dXAgY2hhbm5lbCBsaXN0LCBldGMgKGNvbW1hbmQxIHJlZ2lzdGVyKSAqLworCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgPSAwOworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX01VTFRfQ0hBTl9VUCkKKwkJY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKTsKKwllbHNlCisJCWNoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCS8vIG11bmdlIGNoYW5uZWwgYml0cyBmb3IgZGlmZmVyZW50aWFsIC8gc2NhbiBkaXNhYmxlZCBtb2RlCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpICE9IE1PREVfU0lOR0xFX0NIQU4gJiYgYXJlZiA9PSBBUkVGX0RJRkYpCisJCWNoYW5uZWwgKj0gMjsKKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19DSEFOX0JJVFMoY2hhbm5lbCk7CisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSB0aGlzYm9hcmQtPmFpX3JhbmdlX2NvZGVbcmFuZ2VdOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOworCS8vIG1hbnVhbCBzYXlzIHRvIHNldCBzY2FuIGVuYWJsZSBiaXQgb24gc2Vjb25kIHBhc3MKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fVVAgfHwKKwkJbGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fRE9XTikgeworCQlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19TQ0FOX0VOX0JJVDsKKwkJLyogbmVlZCBhIGJyaWVmIGRlbGF5IGJlZm9yZSBlbmFibGluZyBzY2FuLCBvciBzY2FuIGxpc3Qgd2lsbCBnZXQgc2NyZXdlZCB3aGVuIHlvdSBzd2l0Y2gKKwkJICogYmV0d2VlbiBzY2FuIHVwIHRvIHNjYW4gZG93biBtb2RlIC0gZHVubm8gd2h5ICovCisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDFfUkVHKTsKKwl9CisJLy8gc2V0dXAgYW55IGV4dGVybmFsIHRyaWdnZXJpbmcvcGFjaW5nIChjb21tYW5kNCByZWdpc3RlcikKKwlkZXZwcml2LT5jb21tYW5kNF9iaXRzID0gMDsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVDsKKwkvKiBYWFggc2hvdWxkIGRpc2NhcmQgZmlyc3Qgc2NhbiB3aGVuIHVzaW5nIGludGVydmFsIHNjYW5uaW5nCisJICogc2luY2UgbWFudWFsIHNheXMgaXQgaXMgbm90IHN5bmNlZCB3aXRoIHNjYW4gY2xvY2sgKi8KKwlpZiAobGFicGNfdXNlX2NvbnRpbnVvdXNfbW9kZShjbWQpID09IDApIHsKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBJTlRFUlZBTF9TQ0FOX0VOX0JJVDsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpCisJCQlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEVYVF9TQ0FOX0VOX0JJVDsKKwl9CisJLy8gc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbAorCWlmIChhcmVmID09IEFSRUZfRElGRikKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBBRENfRElGRl9CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNF9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ0X1JFRyk7CisKKwlkZXZwcml2LT53cml0ZV9ieXRlKGNtZC0+Y2hhbmxpc3RfbGVuLAorCQlkZXYtPmlvYmFzZSArIElOVEVSVkFMX0NPVU5UX1JFRyk7CisJLy8gbG9hZCBjb3VudAorCWRldnByaXYtPndyaXRlX2J5dGUoSU5URVJWQUxfTE9BRF9CSVRTLAorCQlkZXYtPmlvYmFzZSArIElOVEVSVkFMX0xPQURfUkVHKTsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgfHwgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8vIHNldCB1cCBwYWNpbmcKKwkJbGFicGNfYWRjX3RpbWluZyhkZXYsIGNtZCk7CisJCS8vIGxvYWQgY291bnRlciBiMCBpbiBtb2RlIDMKKwkJcmV0ID0gbGFicGNfY291bnRlcl9sb2FkKGRldiwgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0JfQkFTRV9SRUcsCisJCQkwLCBkZXZwcml2LT5kaXZpc29yX2IwLCAzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBsb2FkaW5nIGNvdW50ZXIgYjAiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvLyBzZXQgdXAgY29udmVyc2lvbiBwYWNpbmcKKwlpZiAobGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKSkgeworCQkvLyBsb2FkIGNvdW50ZXIgYTAgaW4gbW9kZSAyCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAorCQkJMCwgZGV2cHJpdi0+ZGl2aXNvcl9hMCwgMik7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGEwIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShJTklUX0EwX0JJVFMsCisJCQlkZXYtPmlvYmFzZSArIENPVU5URVJfQV9DT05UUk9MX1JFRyk7CisKKwkvLyBzZXQgdXAgc2NhbiBwYWNpbmcKKwlpZiAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSkgeworCQkvLyBsb2FkIGNvdW50ZXIgYjEgaW4gbW9kZSAyCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9CX0JBU0VfUkVHLAorCQkJMSwgZGV2cHJpdi0+ZGl2aXNvcl9iMSwgMik7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGIxIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlsYWJwY19jbGVhcl9hZGNfZmlmbyhkZXYpOworCisJLy8gc2V0IHVwIGRtYSB0cmFuc2ZlcgorCWlmICh4ZmVyID09IGlzYV9kbWFfdHJhbnNmZXIpIHsKKwkJaXJxX2ZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWFfY2hhbik7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwKKwkJCXZpcnRfdG9fYnVzKGRldnByaXYtPmRtYV9idWZmZXIpKTsKKwkJLy8gc2V0IGFwcHJvcHJpYXRlIHNpemUgb2YgdHJhbnNmZXIKKwkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBsYWJwY19zdWdnZXN0X3RyYW5zZmVyX3NpemUoKmNtZCk7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJCWRldnByaXYtPmNvdW50ICogc2FtcGxlX3NpemUgPAorCQkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpIHsKKwkJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0KKwkJCQlkZXZwcml2LT5jb3VudCAqIHNhbXBsZV9zaXplOworCQl9CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCXJlbGVhc2VfZG1hX2xvY2soaXJxX2ZsYWdzKTsKKwkJLy8gZW5hYmxlIGJvYXJkJ3MgZG1hCisJCWRldnByaXYtPmNvbW1hbmQzX2JpdHMgfD0gRE1BX0VOX0JJVCB8IERNQVRDX0lOVFJfRU5fQklUOworCX0gZWxzZQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzICY9IH5ETUFfRU5fQklUICYgfkRNQVRDX0lOVFJfRU5fQklUOworCisJLy8gZW5hYmxlIGVycm9yIGludGVycnVwdHMKKwlkZXZwcml2LT5jb21tYW5kM19iaXRzIHw9IEVSUl9JTlRSX0VOX0JJVDsKKwkvLyBlbmFibGUgZmlmbyBub3QgZW1wdHkgaW50ZXJydXB0PworCWlmICh4ZmVyID09IGZpZm9fbm90X2VtcHR5X3RyYW5zZmVyKQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzIHw9IEFEQ19GTkVfSU5UUl9FTl9CSVQ7CisJZWxzZQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzICY9IH5BRENfRk5FX0lOVFJfRU5fQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCisJLy8gc3RhcnR1cCBhcXVpc2l0aW9uCisKKwkvLyBjb21tYW5kMiByZWcKKwkvLyB1c2UgMiBjYXNjYWRlZCBjb3VudGVycyBmb3IgcGFjaW5nCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBDQVNDQURFX0JJVDsKKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0VYVDoKKwkJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBIV1RSSUdfQklUOworCQlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5QUkVUUklHX0JJVCAmIH5TV1RSSUdfQklUOworCQlicmVhazsKKwljYXNlIFRSSUdfTk9XOgorCQlkZXZwcml2LT5jb21tYW5kMl9iaXRzIHw9IFNXVFJJR19CSVQ7CisJCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgJj0gflBSRVRSSUdfQklUICYgfkhXVFJJR19CSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWcgd2l0aCBzdGFydF9zcmMiKTsKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0VYVDoKKwkJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBIV1RSSUdfQklUIHwgUFJFVFJJR19CSVQ7CisJCWJyZWFrOworCWNhc2UgVFJJR19DT1VOVDoKKwljYXNlIFRSSUdfTk9ORToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyB3aXRoIHN0b3Bfc3JjIik7CisJCXJldHVybiAtMTsKKwl9CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbGFicGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJwcmVtYXR1cmUgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlhc3luYyA9IHMtPmFzeW5jOworCWNtZCA9ICZhc3luYy0+Y21kOworCWFzeW5jLT5ldmVudHMgPSAwOworCisJLy8gcmVhZCBib2FyZCBzdGF0dXMKKwlkZXZwcml2LT5zdGF0dXMxX2JpdHMgPSBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBTVEFUVVMxX1JFRyk7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KQorCQlkZXZwcml2LT5zdGF0dXMyX2JpdHMgPQorCQkJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgU1RBVFVTMl9SRUcpOworCisJaWYgKChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiAoRE1BVENfQklUIHwgVElNRVJfQklUIHwgT1ZFUkZMT1dfQklUIHwKKwkJCQlPVkVSUlVOX0JJVCB8IERBVEFfQVZBSUxfQklUKSkgPT0gMAorCQkmJiAoZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgQTFfVENfQklUKSA9PSAwCisJCSYmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBGTkhGX0JJVCkpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBPVkVSUlVOX0JJVCkgeworCQkvLyBjbGVhciBlcnJvciBpbnRlcnJ1cHQKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NMRUFSX1JFRyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCWNvbWVkaV9lcnJvcihkZXYsICJvdmVycnVuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoZGV2cHJpdi0+Y3VycmVudF90cmFuc2ZlciA9PSBpc2FfZG1hX3RyYW5zZmVyKSB7CisJCS8vIGlmIGEgZG1hIHRlcm1pbmFsIGNvdW50IG9mIGV4dGVybmFsIHN0b3AgdHJpZ2dlciBoYXMgb2NjdXJyZWQKKwkJaWYgKGRldnByaXYtPnN0YXR1czFfYml0cyAmIERNQVRDX0JJVCB8fAorCQkJKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0CisJCQkJJiYgZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgQTFfVENfQklUKSkgeworCQkJaGFuZGxlX2lzYV9kbWEoZGV2KTsKKwkJfQorCX0gZWxzZQorCQlsYWJwY19kcmFpbl9maWZvKGRldik7CisKKwlpZiAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgVElNRVJfQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJoYW5kbGVkIHRpbWVyIGludGVycnVwdD8iKTsKKwkJLy8gY2xlYXIgaXQKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgVElNRVJfQ0xFQVJfUkVHKTsKKwl9CisKKwlpZiAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgT1ZFUkZMT1dfQklUKSB7CisJCS8vIGNsZWFyIGVycm9yIGludGVycnVwdAorCQlkZXZwcml2LT53cml0ZV9ieXRlKDB4MSwgZGV2LT5pb2Jhc2UgKyBBRENfQ0xFQVJfUkVHKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgIm92ZXJmbG93Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJLy8gaGFuZGxlIGV4dGVybmFsIHN0b3AgdHJpZ2dlcgorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCWlmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBBMV9UQ19CSVQpIHsKKwkJCWxhYnBjX2RyYWluX2RyZWdzKGRldik7CisJCQlsYWJwY19jYW5jZWwoZGV2LCBzKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0KKworCS8qIFRSSUdfQ09VTlQgZW5kIG9mIGFjcXVpc2l0aW9uICovCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoZGV2cHJpdi0+Y291bnQgPT0gMCkgeworCQkJbGFicGNfY2FuY2VsKGRldiwgcyk7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8vIHJlYWQgYWxsIGF2YWlsYWJsZSBzYW1wbGVzIGZyb20gYWkgZmlmbworc3RhdGljIGludCBsYWJwY19kcmFpbl9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBsc2IsIG1zYjsKKwlzaG9ydCBkYXRhOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRldnByaXYtPnN0YXR1czFfYml0cyA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzFfUkVHKTsKKworCWZvciAoaSA9IDA7IChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBEQVRBX0FWQUlMX0JJVCkgJiYgaSA8IHRpbWVvdXQ7CisJCWkrKykgeworCQkvLyBxdWl0IGlmIHdlIGhhdmUgYWxsIHRoZSBkYXRhIHdlIHdhbnQKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkJaWYgKGRldnByaXYtPmNvdW50ID09IDApCisJCQkJYnJlYWs7CisJCQlkZXZwcml2LT5jb3VudC0tOworCQl9CisJCWxzYiA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCW1zYiA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCWRhdGEgPSAobXNiIDw8IDgpIHwgbHNiOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKGRldi0+cmVhZF9zdWJkZXYsIGRhdGEpOworCQlkZXZwcml2LT5zdGF0dXMxX2JpdHMgPQorCQkJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgU1RBVFVTMV9SRUcpOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJhaSB0aW1lb3V0LCBmaWZvIG5ldmVyIGVtcHRpZXMiKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxhYnBjX2RyYWluX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1heF9wb2ludHMsIG51bV9wb2ludHMsIHJlc2lkdWUsIGxlZnRvdmVyOworCWludCBpOworCisJc3RhdHVzID0gZGV2cHJpdi0+c3RhdHVzMV9iaXRzOworCisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hX2NoYW4pOworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgdG8gcmVhZAorCW1heF9wb2ludHMgPSBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAvIHNhbXBsZV9zaXplOworCS8qIHJlc2lkdWUgaXMgdGhlIG51bWJlciBvZiBwb2ludHMgbGVmdCB0byBiZSBkb25lIG9uIHRoZSBkbWEKKwkgKiB0cmFuc2Zlci4gIEl0IHNob3VsZCBhbHdheXMgYmUgemVybyBhdCB0aGlzIHBvaW50IHVubGVzcworCSAqIHRoZSBzdG9wX3NyYyBpcyBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlcmluZy4KKwkgKi8KKwlyZXNpZHVlID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYV9jaGFuKSAvIHNhbXBsZV9zaXplOworCW51bV9wb2ludHMgPSBtYXhfcG9pbnRzIC0gcmVzaWR1ZTsKKwlpZiAoZGV2cHJpdi0+Y291bnQgPCBudW1fcG9pbnRzICYmIGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJbnVtX3BvaW50cyA9IGRldnByaXYtPmNvdW50OworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgd2lsbCBiZSBzdG9yZWQgbmV4dCB0aW1lCisJbGVmdG92ZXIgPSAwOworCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJbGVmdG92ZXIgPSBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAvIHNhbXBsZV9zaXplOworCX0gZWxzZSBpZiAoZGV2cHJpdi0+Y291bnQgPiBudW1fcG9pbnRzKSB7CisJCWxlZnRvdmVyID0gZGV2cHJpdi0+Y291bnQgLSBudW1fcG9pbnRzOworCQlpZiAobGVmdG92ZXIgPiBtYXhfcG9pbnRzKQorCQkJbGVmdG92ZXIgPSBtYXhfcG9pbnRzOworCX0KKworCS8qIHdyaXRlIGRhdGEgdG8gY29tZWRpIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcG9pbnRzOyBpKyspIHsKKwkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkZXZwcml2LT5kbWFfYnVmZmVyW2ldKTsKKwl9CisJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3BvaW50czsKKworCS8vIHNldCBhZGRyZXNzIGFuZCBjb3VudCBmb3IgbmV4dCB0cmFuc2ZlcgorCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwgdmlydF90b19idXMoZGV2cHJpdi0+ZG1hX2J1ZmZlcikpOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGxlZnRvdmVyICogc2FtcGxlX3NpemUpOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9pc2FfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWxhYnBjX2RyYWluX2RtYShkZXYpOworCisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisKKwkvLyBjbGVhciBkbWEgdGMgaW50ZXJydXB0CisJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgRE1BVENfQ0xFQVJfUkVHKTsKK30KKworLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhcXVpcmVkIGJ5IGJvYXJkIGlzIHRyYW5zZmVyZWQgdG8gY29tZWRpICh1c2VkCisgKiB3aGVuIGFxdWlzaXRpb24gaXMgdGVybWluYXRlZCBieSBzdG9wX3NyYyA9PSBUUklHX0VYVCkuICovCitzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2cHJpdi0+Y3VycmVudF90cmFuc2ZlciA9PSBpc2FfZG1hX3RyYW5zZmVyKQorCQlsYWJwY19kcmFpbl9kbWEoZGV2KTsKKworCWxhYnBjX2RyYWluX2ZpZm8oZGV2KTsKK30KKworc3RhdGljIGludCBsYWJwY19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGNoYW4sIHJhbmdlOworCWludCBsc2IsIG1zYjsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIGRpc2FibGUgdGltZWQgY29udmVyc2lvbnMKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5TV1RSSUdfQklUICYgfkhXVFJJR19CSVQgJiB+UFJFVFJJR19CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIGRpc2FibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gYW5kIGRtYQorCWRldnByaXYtPmNvbW1hbmQzX2JpdHMgPSAwOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCisJLyogc2V0IGdhaW4gYW5kIGNoYW5uZWwgKi8KKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzID0gMDsKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSB0aGlzYm9hcmQtPmFpX3JhbmdlX2NvZGVbcmFuZ2VdOworCS8vIG11bmdlIGNoYW5uZWwgYml0cyBmb3IgZGlmZmVyZW50aWFsL3NjYW4gZGlzYWJsZWQgbW9kZQorCWlmIChDUl9BUkVGKGluc24tPmNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpCisJCWNoYW4gKj0gMjsKKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19DSEFOX0JJVFMoY2hhbik7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQxX1JFRyk7CisKKwkvLyBzZXR1cCBjb21tYW5kNiByZWdpc3RlciBmb3IgMTIwMCBib2FyZHMKKwlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpIHsKKwkJLy8gcmVmZXJlbmNlIGlucHV0cyB0byBncm91bmQgb3IgY29tbW9uPworCQlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgIT0gQVJFRl9HUk9VTkQpCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19DT01NT05fQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfQ09NTU9OX0JJVDsKKwkJLy8gYmlwb2xhciBvciB1bmlwb2xhciByYW5nZT8KKwkJaWYgKHRoaXNib2FyZC0+YWlfcmFuZ2VfaXNfdW5pcG9sYXJbcmFuZ2VdKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfVU5JUF9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19VTklQX0JJVDsKKwkJLy8gZG9uJ3QgaW50ZXJydXB0IG9uIGZpZm8gaGFsZiBmdWxsCisJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19GSEZfSU5UUl9FTl9CSVQ7CisJCS8vIGRvbid0IGVuYWJsZSBpbnRlcnJ1cHQgb24gY291bnRlciBhMSB0ZXJtaW5hbCBjb3VudD8KKwkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QTFfSU5UUl9FTl9CSVQ7CisJCS8vIHdyaXRlIHRvIHJlZ2lzdGVyCisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDZfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDZfUkVHKTsKKwl9CisJLy8gc2V0dXAgY29tbWFuZDQgcmVnaXN0ZXIKKwlkZXZwcml2LT5jb21tYW5kNF9iaXRzID0gMDsKKwlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEVYVF9DT05WRVJUX0RJU0FCTEVfQklUOworCS8vIHNpbmdsZS1lbmRlZC9kaWZmZXJlbnRpYWwKKwlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKQorCQlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEFEQ19ESUZGX0JJVDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ0X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDRfUkVHKTsKKworCS8vIGluaXRpYWxpemUgcGFjZXIgY291bnRlciBvdXRwdXQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHByb2JsZW1zCisJZGV2cHJpdi0+d3JpdGVfYnl0ZShJTklUX0EwX0JJVFMsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0NPTlRST0xfUkVHKTsKKworCWxhYnBjX2NsZWFyX2FkY19maWZvKGRldik7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlkZXZwcml2LT53cml0ZV9ieXRlKDB4MSwgZGV2LT5pb2Jhc2UgKyBBRENfQ09OVkVSVF9SRUcpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKworCQkJCQlTVEFUVVMxX1JFRykgJiBEQVRBX0FWQUlMX0JJVCkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJbHNiID0gZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKKwkJbXNiID0gZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKKwkJZGF0YVtuXSA9IChtc2IgPDwgOCkgfCBsc2I7CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8vIGFuYWxvZyBvdXRwdXQgaW5zbgorc3RhdGljIGludCBsYWJwY19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwsIHJhbmdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxzYiwgbXNiOworCisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gdHVybiBvZmYgcGFjaW5nIG9mIGFuYWxvZyBvdXRwdXQgY2hhbm5lbAorCS8qIG5vdGU6IGhhcmR3YXJlIGJ1ZyBpbiBkYXFjYXJkLTEyMDAgbWVhbnMgcGFjaW5nIGNhbm5vdAorCSAqIGJlIGluZGVwZW5kZW50bHkgZW5hYmxlZC9kaXNhYmxlZCBmb3IgaXRzIHRoZSB0d28gY2hhbm5lbHMgKi8KKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5EQUNfUEFDRURfQklUKGNoYW5uZWwpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzZXQgcmFuZ2UKKwlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpIHsKKwkJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJCWlmIChyYW5nZSAmIEFPX1JBTkdFX0lTX1VOSVBPTEFSKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBEQUNfVU5JUF9CSVQoY2hhbm5lbCk7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkRBQ19VTklQX0JJVChjaGFubmVsKTsKKwkJLy8gd3JpdGUgdG8gcmVnaXN0ZXIKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNl9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENl9SRUcpOworCX0KKwkvLyBzZW5kIGRhdGEKKwlsc2IgPSBkYXRhWzBdICYgMHhmZjsKKwltc2IgPSAoZGF0YVswXSA+PiA4KSAmIDB4ZmY7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShsc2IsIGRldi0+aW9iYXNlICsgREFDX0xTQl9SRUcoY2hhbm5lbCkpOworCWRldnByaXYtPndyaXRlX2J5dGUobXNiLCBkZXYtPmlvYmFzZSArIERBQ19NU0JfUkVHKGNoYW5uZWwpKTsKKworCS8vIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjaworCWRldnByaXYtPmFvX3ZhbHVlW2NoYW5uZWxdID0gZGF0YVswXTsKKworCXJldHVybiAxOworfQorCisvLyBhbmFsb2cgb3V0cHV0IHJlYWRiYWNrIGluc24KK3N0YXRpYyBpbnQgbGFicGNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5hb192YWx1ZVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsYWJwY19jYWxpYl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5jYWxkYWNbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfY2FsaWJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXdyaXRlX2NhbGRhYyhkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxhYnBjX2VlcHJvbV9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5lZXByb21fZGF0YVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsYWJwY19lZXByb21fd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgcmV0OworCisJLy8gb25seSBhbGxvdyB3cml0ZXMgdG8gdXNlciBhcmVhIG9mIGVlcHJvbQorCWlmIChjaGFubmVsIDwgMTYgfHwgY2hhbm5lbCA+IDEyNykgeworCQlwcmludGsoImVlcHJvbSB3cml0ZXMgYXJlIG9ubHkgYWxsb3dlZCB0byBjaGFubmVscyAxNiB0aHJvdWdoIDEyNyAodGhlIHBvaW50ZXIgYW5kIHVzZXIgYXJlYXMpIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGxhYnBjX2VlcHJvbV93cml0ZShkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDE7Cit9CisKKy8vIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBzdWdnZXN0cyBhIGRtYSB0cmFuc2ZlciBzaXplIGluIGJ5dGVzCitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX3N1Z2dlc3RfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwlpZiAoY21kLmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCisJCWZyZXEgPSAxMDAwMDAwMDAwIC8gY21kLmNvbnZlcnRfYXJnOworCS8vIHJldHVybiBzb21lIGRlZmF1bHQgdmFsdWUKKwllbHNlCisJCWZyZXEgPSAweGZmZmZmZmZmOworCisJLy8gbWFrZSBidWZmZXIgZmlsbCBpbiBubyBtb3JlIHRoYW4gMS8zIHNlY29uZAorCXNpemUgPSAoZnJlcSAvIDMpICogc2FtcGxlX3NpemU7CisKKwkvLyBzZXQgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgYWxsb3dlZAorCWlmIChzaXplID4gZG1hX2J1ZmZlcl9zaXplKQorCQlzaXplID0gZG1hX2J1ZmZlcl9zaXplIC0gZG1hX2J1ZmZlcl9zaXplICUgc2FtcGxlX3NpemU7CisJZWxzZSBpZiAoc2l6ZSA8IHNhbXBsZV9zaXplKQorCQlzaXplID0gc2FtcGxlX3NpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLy8gZmlndXJlcyBvdXQgd2hhdCBjb3VudGVyIHZhbHVlcyB0byB1c2UgYmFzZWQgb24gY29tbWFuZAorc3RhdGljIHZvaWQgbGFicGNfYWRjX3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJY29uc3QgaW50IG1heF9jb3VudGVyX3ZhbHVlID0gMHgxMDAwMDsJLy8gbWF4IHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIKKwljb25zdCBpbnQgbWluX2NvdW50ZXJfdmFsdWUgPSAyOwkvLyBtaW4gdmFsdWUgZm9yIDE2IGJpdCBjb3VudGVyIGluIG1vZGUgMgorCXVuc2lnbmVkIGludCBiYXNlX3BlcmlvZDsKKworCS8vIGlmIGJvdGggY29udmVydCBhbmQgc2NhbiB0cmlnZ2VycyBhcmUgVFJJR19USU1FUiwgdGhlbiB0aGV5IGJvdGggcmVseSBvbiBjb3VudGVyIGIwCisJaWYgKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkgJiYgbGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSkgeworCQkvLyBwaWNrIHRoZSBsb3dlc3QgYjAgZGl2aXNvciB2YWx1ZSB3ZSBjYW4gKGZvciBtYXhpbXVtIGlucHV0IGNsb2NrIHNwZWVkIG9uIGNvbnZlcnQgYW5kIHNjYW4gY291bnRlcnMpCisJCWRldnByaXYtPmRpdmlzb3JfYjAgPSAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSAtIDEpIC8KKwkJCShMQUJQQ19USU1FUl9CQVNFICogbWF4X2NvdW50ZXJfdmFsdWUpICsgMTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjAgPCBtaW5fY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYjAgPSBtaW5fY291bnRlcl92YWx1ZTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjAgPiBtYXhfY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYjAgPSBtYXhfY291bnRlcl92YWx1ZTsKKworCQliYXNlX3BlcmlvZCA9IExBQlBDX1RJTUVSX0JBU0UgKiBkZXZwcml2LT5kaXZpc29yX2IwOworCisJCS8vIHNldCBhMCBmb3IgY29udmVyc2lvbiBmcmVxdWVuY3kgYW5kIGIxIGZvciBzY2FuIGZyZXF1ZW5jeQorCQlzd2l0Y2ggKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQlkZXZwcml2LT5kaXZpc29yX2EwID0KKwkJCQkobGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKSArCisJCQkJKGJhc2VfcGVyaW9kIC8gMikpIC8gYmFzZV9wZXJpb2Q7CisJCQlkZXZwcml2LT5kaXZpc29yX2IxID0KKwkJCQkobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSArCisJCQkJKGJhc2VfcGVyaW9kIC8gMikpIC8gYmFzZV9wZXJpb2Q7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9CisJCQkJKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkgKyAoYmFzZV9wZXJpb2QgLQorCQkJCQkxKSkgLyBiYXNlX3BlcmlvZDsKKwkJCWRldnByaXYtPmRpdmlzb3JfYjEgPQorCQkJCShsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpICsgKGJhc2VfcGVyaW9kIC0KKwkJCQkJMSkpIC8gYmFzZV9wZXJpb2Q7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkZXZwcml2LT5kaXZpc29yX2EwID0KKwkJCQlsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQpIC8gYmFzZV9wZXJpb2Q7CisJCQlkZXZwcml2LT5kaXZpc29yX2IxID0KKwkJCQlsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpIC8gYmFzZV9wZXJpb2Q7CisJCQlicmVhazsKKwkJfQorCQkvLyBtYWtlIHN1cmUgYTAgYW5kIGIxIHZhbHVlcyBhcmUgYWNjZXB0YWJsZQorCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9hMCA8IG1pbl9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9IG1pbl9jb3VudGVyX3ZhbHVlOworCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9hMCA+IG1heF9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9IG1heF9jb3VudGVyX3ZhbHVlOworCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9iMSA8IG1pbl9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9iMSA9IG1pbl9jb3VudGVyX3ZhbHVlOworCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9iMSA+IG1heF9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9iMSA9IG1heF9jb3VudGVyX3ZhbHVlOworCQkvLyB3cml0ZSBjb3JyZWN0ZWQgdGltaW5ncyB0byBjb21tYW5kCisJCWxhYnBjX3NldF9haV9jb252ZXJ0X3BlcmlvZChjbWQsCisJCQliYXNlX3BlcmlvZCAqIGRldnByaXYtPmRpdmlzb3JfYTApOworCQlsYWJwY19zZXRfYWlfc2Nhbl9wZXJpb2QoY21kLAorCQkJYmFzZV9wZXJpb2QgKiBkZXZwcml2LT5kaXZpc29yX2IxKTsKKwkJLy8gaWYgb25seSBvbmUgVFJJR19USU1FUiBpcyB1c2VkLCB3ZSBjYW4gZW1wbG95IHRoZSBnZW5lcmljIGNhc2NhZGVkIHRpbWluZyBmdW5jdGlvbnMKKwl9IGVsc2UgaWYgKGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJdW5zaWduZWQgaW50IHNjYW5fcGVyaW9kOworCisJCXNjYW5fcGVyaW9kID0gbGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKTsKKwkJLyogY2FsY3VsYXRlIGNhc2NhZGVkIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHNjYW4gdGltaW5nICovCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihMQUJQQ19USU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5kaXZpc29yX2IxKSwgJihkZXZwcml2LT5kaXZpc29yX2IwKSwKKwkJCSZzY2FuX3BlcmlvZCwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWxhYnBjX3NldF9haV9zY2FuX3BlcmlvZChjbWQsIHNjYW5fcGVyaW9kKTsKKwl9IGVsc2UgaWYgKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkpIHsKKwkJdW5zaWduZWQgaW50IGNvbnZlcnRfcGVyaW9kOworCisJCWNvbnZlcnRfcGVyaW9kID0gbGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKTsKKwkJLyogY2FsY3VsYXRlIGNhc2NhZGVkIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIGNvbnZlcnNpb24gdGltaW5nICovCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihMQUJQQ19USU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5kaXZpc29yX2EwKSwgJihkZXZwcml2LT5kaXZpc29yX2IwKSwKKwkJCSZjb252ZXJ0X3BlcmlvZCwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWxhYnBjX3NldF9haV9jb252ZXJ0X3BlcmlvZChjbWQsIGNvbnZlcnRfcGVyaW9kKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfZGlvX21lbV9jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZWIoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmVhZGIoKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCX0KK30KKworLy8gbG93bGV2ZWwgd3JpdGUgdG8gZWVwcm9tL2RhYworc3RhdGljIHZvaWQgbGFicGNfc2VyaWFsX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCB2YWx1ZV93aWR0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPD0gdmFsdWVfd2lkdGg7IGkrKykgeworCQkvLyBjbGVhciBzZXJpYWwgY2xvY2sKKwkJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+U0NMT0NLX0JJVDsKKwkJLy8gc2VuZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWlmICh2YWx1ZSAmICgxIDw8ICh2YWx1ZV93aWR0aCAtIGkpKSkKKwkJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gU0RBVEFfQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5TREFUQV9CSVQ7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwkJLy8gc2V0IGNsb2NrIHRvIGxvYWQgYml0CisJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gU0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCX0KK30KKworLy8gbG93bGV2ZWwgcmVhZCBmcm9tIGVlcHJvbQorc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19zZXJpYWxfaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKwlpbnQgaTsKKwljb25zdCBpbnQgdmFsdWVfd2lkdGggPSA4OwkvLyBudW1iZXIgb2YgYml0cyB3aWRlIHZhbHVlcyBhcmUKKworCWZvciAoaSA9IDE7IGkgPD0gdmFsdWVfd2lkdGg7IGkrKykgeworCQkvLyBzZXQgc2VyaWFsIGNsb2NrCisJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gU0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCQkvLyBjbGVhciBjbG9jayBiaXQKKwkJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+U0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCQkvLyByZWFkIGJpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgZmlyc3QKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+c3RhdHVzMl9iaXRzID0KKwkJCWRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzJfUkVHKTsKKwkJaWYgKGRldnByaXYtPnN0YXR1czJfYml0cyAmIEVFUFJPTV9PVVRfQklUKSB7CisJCQl2YWx1ZSB8PSAxIDw8ICh2YWx1ZV93aWR0aCAtIGkpOworCQl9CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX2VlcHJvbV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJY29uc3QgaW50IHJlYWRfaW5zdHJ1Y3Rpb24gPSAweDM7CS8vIGJpdHMgdG8gdGVsbCBlZXByb20gdG8gZXhwZWN0IGEgcmVhZAorCWNvbnN0IGludCB3cml0ZV9sZW5ndGggPSA4OwkvLyA4IGJpdCB3cml0ZSBsZW5ndGhzIHRvIGVlcHJvbQorCisJLy8gZW5hYmxlIHJlYWQvd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gRUVQUk9NX0VOX0JJVCB8IEVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyBzZW5kIHJlYWQgaW5zdHJ1Y3Rpb24KKwlsYWJwY19zZXJpYWxfb3V0KGRldiwgcmVhZF9pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwkvLyBzZW5kIDggYml0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCisJbGFicGNfc2VyaWFsX291dChkZXYsIGFkZHJlc3MsIHdyaXRlX2xlbmd0aCk7CisJLy8gcmVhZCByZXN1bHQKKwl2YWx1ZSA9IGxhYnBjX3NlcmlhbF9pbihkZXYpOworCisJLy8gZGlzYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQgJiB+RUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19lZXByb21fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwljb25zdCBpbnQgd3JpdGVfZW5hYmxlX2luc3RydWN0aW9uID0gMHg2OworCWNvbnN0IGludCB3cml0ZV9pbnN0cnVjdGlvbiA9IDB4MjsKKwljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsJLy8gOCBiaXQgd3JpdGUgbGVuZ3RocyB0byBlZXByb20KKwljb25zdCBpbnQgd3JpdGVfaW5fcHJvZ3Jlc3NfYml0ID0gMHgxOworCWNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJaW50IGk7CisKKwkvLyBtYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYWxyZWFkeSBhIHdyaXRlIGluIHByb2dyZXNzCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQlpZiAoKGxhYnBjX2VlcHJvbV9yZWFkX3N0YXR1cyhkZXYpICYgd3JpdGVfaW5fcHJvZ3Jlc3NfYml0KSA9PQorCQkJMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJlZXByb20gd3JpdGUgdGltZWQgb3V0Iik7CisJCXJldHVybiAtRVRJTUU7CisJfQorCS8vIHVwZGF0ZSBzb2Z0d2FyZSBjb3B5IG9mIGVlcHJvbQorCWRldnByaXYtPmVlcHJvbV9kYXRhW2FkZHJlc3NdID0gdmFsdWU7CisKKwkvLyBlbmFibGUgcmVhZC93cml0ZSB0byBlZXByb20KKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyB8PSBFRVBST01fRU5fQklUIHwgRUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIHNlbmQgd3JpdGVfZW5hYmxlIGluc3RydWN0aW9uCisJbGFicGNfc2VyaWFsX291dChkZXYsIHdyaXRlX2VuYWJsZV9pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyBzZW5kIHdyaXRlIGluc3RydWN0aW9uCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyB8PSBFRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJbGFicGNfc2VyaWFsX291dChkZXYsIHdyaXRlX2luc3RydWN0aW9uLCB3cml0ZV9sZW5ndGgpOworCS8vIHNlbmQgOCBiaXQgYWRkcmVzcyB0byB3cml0ZSB0bworCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCBhZGRyZXNzLCB3cml0ZV9sZW5ndGgpOworCS8vIHdyaXRlIHZhbHVlCisJbGFicGNfc2VyaWFsX291dChkZXYsIHZhbHVlLCB3cml0ZV9sZW5ndGgpOworCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIGRpc2FibGUgcmVhZC93cml0ZSB0byBlZXByb20KKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUICYgfkVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19lZXByb21fcmVhZF9zdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWNvbnN0IGludCByZWFkX3N0YXR1c19pbnN0cnVjdGlvbiA9IDB4NTsKKwljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsJLy8gOCBiaXQgd3JpdGUgbGVuZ3RocyB0byBlZXByb20KKworCS8vIGVuYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IEVFUFJPTV9FTl9CSVQgfCBFRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJLy8gc2VuZCByZWFkIHN0YXR1cyBpbnN0cnVjdGlvbgorCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCByZWFkX3N0YXR1c19pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwkvLyByZWFkIHJlc3VsdAorCXZhbHVlID0gbGFicGNfc2VyaWFsX2luKGRldik7CisKKwkvLyBkaXNhYmxlIHJlYWQvd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVCAmIH5FRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvLyB3cml0ZXMgdG8gOCBiaXQgY2FsaWJyYXRpb24gZGFjcworc3RhdGljIHZvaWQgd3JpdGVfY2FsZGFjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlID09IGRldnByaXYtPmNhbGRhY1tjaGFubmVsXSkKKwkJcmV0dXJuOworCWRldnByaXYtPmNhbGRhY1tjaGFubmVsXSA9IHZhbHVlOworCisJLy8gY2xlYXIgY2FsZGFjIGxvYWQgYml0IGFuZCBtYWtlIHN1cmUgd2UgZG9uJ3Qgd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPQorCQl+Q0FMREFDX0xPQURfQklUICYgfkVFUFJPTV9FTl9CSVQgJiB+RUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIHdyaXRlIDQgYml0IGNoYW5uZWwKKwlsYWJwY19zZXJpYWxfb3V0KGRldiwgY2hhbm5lbCwgNCk7CisJLy8gd3JpdGUgOCBiaXQgY2FsZGFjIHZhbHVlCisJbGFicGNfc2VyaWFsX291dChkZXYsIHZhbHVlLCA4KTsKKworCS8vIHNldCBhbmQgY2xlYXIgY2FsZGFjIGJpdCB0byBsb2FkIGNhbGRhYyB2YWx1ZQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gQ0FMREFDX0xPQURfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+Q0FMREFDX0xPQURfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfbGFicGMsIGxhYnBjX3BjaV90YWJsZSk7CisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9sYWJwYyk7CisjZW5kaWYKKworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfY29tbW9uX2F0dGFjaCk7CitFWFBPUlRfU1lNQk9MX0dQTChsYWJwY19jb21tb25fZGV0YWNoKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJhbmdlX2xhYnBjXzEyMDBfYWkpOworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfMTIwMF9haV9nYWluX2JpdHMpOworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfMTIwMF9pc191bmlwb2xhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NGIwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuaApAQCAtMCwwICsxLDg1IEBACisvKgorICAgIG5pX2xhYnBjLmgKKworICAgIEhlYWRlciBmb3IgbmlfbGFicGMuYyBhbmQgbmlfbGFicGNfY3MuYworCisgICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9OSV9MQUJQQ19ICisjZGVmaW5lIF9OSV9MQUJQQ19ICisKKyNkZWZpbmUgRUVQUk9NX1NJWkUJMjU2CS8vIDI1NiBieXRlIGVlcHJvbQorI2RlZmluZSBOVU1fQU9fQ0hBTgkyCS8vIGJvYXJkcyBoYXZlIHR3byBhbmFsb2cgb3V0cHV0IGNoYW5uZWxzCisKK2VudW0gbGFicGNfYnVzdHlwZSB7IGlzYV9idXN0eXBlLCBwY2lfYnVzdHlwZSwgcGNtY2lhX2J1c3R5cGUgfTsKK2VudW0gbGFicGNfcmVnaXN0ZXJfbGF5b3V0IHsgbGFicGNfcGx1c19sYXlvdXQsIGxhYnBjXzEyMDBfbGF5b3V0IH07CitlbnVtIHRyYW5zZmVyX3R5cGUgeyBmaWZvX25vdF9lbXB0eV90cmFuc2ZlciwgZmlmb19oYWxmX2Z1bGxfdHJhbnNmZXIsCisJCWlzYV9kbWFfdHJhbnNmZXIgfTsKKwordHlwZWRlZiBzdHJ1Y3QgbGFicGNfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBkZXZpY2UgaWQgZm9yIHBjaSBhbmQgcGNtY2lhIGJvYXJkcworCWludCBhaV9zcGVlZDsJCS8vIG1heGltdW0gaW5wdXQgc3BlZWQgaW4gbmFub3NlY29uZHMKKwllbnVtIGxhYnBjX2J1c3R5cGUgYnVzdHlwZTsJLy8gSVNBL1BDSS9ldGMuCisJZW51bSBsYWJwY19yZWdpc3Rlcl9sYXlvdXQgcmVnaXN0ZXJfbGF5b3V0OwkvLyAxMjAwIGhhcyBleHRyYSByZWdpc3RlcnMgY29tcGFyZWQgdG8gcGMrCisJaW50IGhhc19hbzsJCS8vIGhhcyBhbmFsb2cgb3V0cHV0IHRydWUvZmFsc2UKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdGFibGU7CisJY29uc3QgaW50ICphaV9yYW5nZV9jb2RlOworCWNvbnN0IGludCAqYWlfcmFuZ2VfaXNfdW5pcG9sYXI7CisJdW5zaWduZWQgYWlfc2Nhbl91cDoxOwkvLyBib2FyZCBjYW4gYXV0byBzY2FuIHVwIGluIGFpIGNoYW5uZWxzLCBub3QganVzdCBkb3duCisJdW5zaWduZWQgbWVtb3J5X21hcHBlZF9pbzoxOwkvKiB1c2VzIG1lbW9yeSBtYXBwZWQgaW8gaW5zdGVhZCBvZiBpb3BvcnRzICovCit9IGxhYnBjX2JvYXJkOworCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOwkvLyBmb3IgbWl0ZSBjaGlwIG9uIHBjaS0xMjAwCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNvdW50OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworCXVuc2lnbmVkIGludCBhb192YWx1ZVtOVU1fQU9fQ0hBTl07CS8vIHNvZnR3YXJlIGNvcHkgb2YgYW5hbG9nIG91dHB1dCB2YWx1ZXMKKwkvLyBzb2Z0d2FyZSBjb3B5cyBvZiBiaXRzIHdyaXR0ZW4gdG8gY29tbWFuZCByZWdpc3RlcnMKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDFfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDJfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDNfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDRfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDVfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDZfYml0czsKKwkvLyBzdG9yZSBsYXN0IHJlYWQgb2YgYm9hcmQgc3RhdHVzIHJlZ2lzdGVycworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzdGF0dXMxX2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHN0YXR1czJfYml0czsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcl9hMDsJLyogdmFsdWUgdG8gbG9hZCBpbnRvIGJvYXJkJ3MgY291bnRlciBhMCAoY29udmVyc2lvbiBwYWNpbmcpIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGludCBkaXZpc29yX2IwOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIGIwIChtYXN0ZXIpIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGludCBkaXZpc29yX2IxOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIGIxIChzY2FuIHBhY2luZykgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJdW5zaWduZWQgaW50IGRtYV9jaGFuOwkvLyBkbWEgY2hhbm5lbCB0byB1c2UKKwl1MTYgKmRtYV9idWZmZXI7CS8vIGJ1ZmZlciBhaSB3aWxsIGRtYSBpbnRvCisJdW5zaWduZWQgaW50IGRtYV90cmFuc2Zlcl9zaXplOwkvLyB0cmFuc2ZlciBzaXplIGluIGJ5dGVzIGZvciBjdXJyZW50IHRyYW5zZmVyCisJZW51bSB0cmFuc2Zlcl90eXBlIGN1cnJlbnRfdHJhbnNmZXI7CS8vIHdlIGFyZSB1c2luZyBkbWEvZmlmby1oYWxmLWZ1bGwvZXRjLgorCXVuc2lnbmVkIGludCBlZXByb21fZGF0YVtFRVBST01fU0laRV07CS8vIHN0b3JlcyBjb250ZW50cyBvZiBib2FyZCdzIGVlcHJvbQorCXVuc2lnbmVkIGludCBjYWxkYWNbMTZdOwkvLyBzdG9yZXMgc2V0dGluZ3Mgb2YgY2FsaWJyYXRpb24gZGFjcworCS8vIGZ1bmN0aW9uIHBvaW50ZXJzIHNvIHdlIGNhbiB1c2UgaW5iL291dGIgb3IgcmVhZGIvd3JpdGViIGFzIGFwcHJvcHJpYXRlCisJdW5zaWduZWQgaW50ICgqcmVhZF9ieXRlKSAodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKwl2b2lkICgqd3JpdGVfYnl0ZSkgKHVuc2lnbmVkIGludCBieXRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworfSBsYWJwY19wcml2YXRlOworCitpbnQgbGFicGNfY29tbW9uX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbG9uZyBpb2Jhc2UsCisJdW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRtYSk7CitpbnQgbGFicGNfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK2V4dGVybiBjb25zdCBpbnQgbGFicGNfMTIwMF9pc191bmlwb2xhcltdOworZXh0ZXJuIGNvbnN0IGludCBsYWJwY18xMjAwX2FpX2dhaW5fYml0c1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2xhYnBjXzEyMDBfYWk7CisKKyNlbmRpZiAvKiBfTklfTEFCUENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzBjZTJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZGFxY2FyZC0xMjAwIGJvYXJkcworICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBQQ01DSUEgY3JhcCBpcyBhZGFwdGVkIGZyb20gZHVtbXlfY3MuYyAxLjMxIDIwMDEvMDgvMjQgMTI6MTM6MTMKKyAgICBmcm9tIHRoZSBwY21jaWEgcGFja2FnZS4KKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIHBjbWNpYSBkdW1teV9jcy5jIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogbmlfbGFicGNfY3MKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBMYWItUEMgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gREFRQ2FyZC0xMjAwIChkYXFjYXJkLTEyMDApCitTdGF0dXM6IHdvcmtzCisKK1RoYW5rcyBnbyB0byBGcmVkcmlrIExpbmd2YWxsIGZvciBtdWNoIHRlc3RpbmcgYW5kIHBlcnNldmVyYW5jZSBpbgoraGVscGluZyB0byBkZWJ1ZyBkYXFjYXJkLTEyMDAgc3VwcG9ydC4KKworVGhlIDEyMDAgc2VyaWVzIGJvYXJkcyBoYXZlIG9uYm9hcmQgY2FsaWJyYXRpb24gZGFjcyBmb3IgY29ycmVjdGluZworYW5hbG9nIGlucHV0L291dHB1dCBvZmZzZXRzIGFuZCBnYWlucy4gIFRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yIHRoZXNlCitjYWxkYWNzIGFyZSBzdG9yZWQgb24gdGhlIGJvYXJkJ3MgZWVwcm9tLiAgVG8gcmVhZCB0aGUgY2FsZGFjIHZhbHVlcworZnJvbSB0aGUgZWVwcm9tIGFuZCBzdG9yZSB0aGVtIGludG8gYSBmaWxlIHRoYXQgY2FuIGJlIHRoZW4gYmUgdXNlZCBieQorY29tZWRpbGliLCB1c2UgdGhlIGNvbWVkaV9jYWxpYnJhdGUgcHJvZ3JhbS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBub25lCisKK1RoZSBkYXFjYXJkLTEyMDAgaGFzIHF1aXJreSBjaGFubGlzdCByZXF1aXJlbWVudHMKK3doZW4gc2Nhbm5pbmcgbXVsdGlwbGUgY2hhbm5lbHMuICBNdWx0aXBsZSBjaGFubmVsIHNjYW4KK3NlcXVlbmNlIG11c3Qgc3RhcnQgYXQgaGlnaGVzdCBjaGFubmVsLCB0aGVuIGRlY3JlbWVudCBkb3duIHRvCitjaGFubmVsIDAuICBDaGFubGlzdHMgY29uc2lzdGluZyBvZiBhbGwgb25lIGNoYW5uZWwKK2FyZSBhbHNvIGxlZ2FsLCBhbmQgYWxsb3cgeW91IHRvIHBhY2UgY29udmVyc2lvbnMgaW4gYnVyc3RzLgorCisqLworCisvKgorCitOSSBtYW51YWxzOgorMzQwOTg4YSAoZGFxY2FyZC0xMjAwKQorCisqLworCisjdW5kZWYgTEFCUENfREVCVUcKKy8vI2RlZmluZSBMQUJQQ19ERUJVRyAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMKKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisjaW5jbHVkZSAibmlfbGFicGMuaCIKKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2N1cl9kZXYgPSBOVUxMOworCitzdGF0aWMgaW50IGxhYnBjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKK3N0YXRpYyBjb25zdCBsYWJwY19ib2FyZCBsYWJwY19jc19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcWNhcmQtMTIwMCIsCisJICAgICAgZGV2aWNlX2lkOjB4MTAzLAkvLyAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4MTAzIGlzIGRldmljZSBpZAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY18xMjAwX2xheW91dCwKKwkgICAgICBoYXNfYW86CTEsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY18xMjAwX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY18xMjAwX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MCwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCisJLyogZHVwbGljYXRlIGVudHJ5LCB0byBzdXBwb3J0IHVzaW5nIGFsdGVybmF0ZSBuYW1lICovCisJeworCSAgICAgIG5hbWU6CSJuaV9sYWJwY19jcyIsCisJICAgICAgZGV2aWNlX2lkOjB4MTAzLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY18xMjAwX2xheW91dCwKKwkgICAgICBoYXNfYW86CTEsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY18xMjAwX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY18xMjAwX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MCwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IGxhYnBjX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbGFicGNfY3MgPSB7CisJLmRyaXZlcl9uYW1lID0gIm5pX2xhYnBjX2NzIiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dGFjaCA9ICZsYWJwY19hdHRhY2gsCisJLmRldGFjaCA9ICZsYWJwY19jb21tb25fZGV0YWNoLAorCS5udW1fbmFtZXMgPSBzaXplb2YobGFicGNfY3NfYm9hcmRzKSAvIHNpemVvZihsYWJwY19ib2FyZCksCisJLmJvYXJkX25hbWUgPSAmbGFicGNfY3NfYm9hcmRzWzBdLm5hbWUsCisJLm9mZnNldCA9IHNpemVvZihsYWJwY19ib2FyZCksCit9OworCitzdGF0aWMgaW50IGxhYnBjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihsYWJwY19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8vIGdldCBiYXNlIGFkZHJlc3MsIGlycSBldGMuIGJhc2VkIG9uIGJ1c3R5cGUKKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KKwkJaWYgKCFsaW5rKQorCQkJcmV0dXJuIC1FSU87CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwkJaXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBsYWJwY19jb21tb25fYXR0YWNoKGRldiwgaW9iYXNlLCBpcnEsIDApOworfQorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9CisJIm5pX2xhYnBjLmMsIGJhc2VkIG9uIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgICBUaGUgZXZlbnQoKSBmdW5jdGlvbiBpcyB0aGlzIGRyaXZlcidzIENhcmQgU2VydmljZXMgZXZlbnQgaGFuZGxlci4KKyAgIEl0IHdpbGwgYmUgY2FsbGVkIGJ5IENhcmQgU2VydmljZXMgd2hlbiBhbiBhcHByb3ByaWF0ZSBjYXJkIHN0YXR1cworICAgZXZlbnQgaXMgcmVjZWl2ZWQuICBUaGUgY29uZmlnKCkgYW5kIHJlbGVhc2UoKSBlbnRyeSBwb2ludHMgYXJlCisgICB1c2VkIHRvIGNvbmZpZ3VyZSBvciByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkCisgICBpbnNlcnRpb24gYW5kIGVqZWN0aW9uIGV2ZW50cy4gIFRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgZHVtbXkKKyAgIGV2ZW50IGhhbmRsZXIuCisKKyAgIEtlcm5lbCB2ZXJzaW9uIDIuNi4xNiB1cHdhcmRzIHVzZXMgc3VzcGVuZCgpIGFuZCByZXN1bWUoKSBmdW5jdGlvbnMKKyAgIGluc3RlYWQgb2YgYW4gZXZlbnQoKSBmdW5jdGlvbi4KKyovCisKK3N0YXRpYyB2b2lkIGxhYnBjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBsYWJwY19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgbGFicGNfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBsYWJwY19jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgbGFicGNfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgbGFicGNfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gImRhcWNhcmQtMTIwMCI7CisKK3R5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCXN0cnVjdCBidXNfb3BlcmF0aW9ucyAqYnVzOworfSBsb2NhbF9pbmZvX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgbGFicGNfY3NfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKKyAgICBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuCisKKyAgICBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKyAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQorICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBsYWJwY19jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbDsKKworCURFQlVHKDAsICJsYWJwY19jc19hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0ZPUkNFRF9QVUxTRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfSU5GTzJfVkFMSUQgfCBJUlFfUFVMU0VfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJcGNtY2lhX2N1cl9kZXYgPSBsaW5rOworCisJbGFicGNfY29uZmlnKGxpbmspOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGxhYnBjX2NzX2F0dGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCisgICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKKyAgICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBsYWJwY19jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJREVCVUcoMCwgImxhYnBjX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwkvKgorCSAgIElmIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSwgd2Ugd29uJ3QKKwkgICBhY3R1YWxseSBkZWxldGUgaXQgeWV0LiAgSW5zdGVhZCwgaXQgaXMgbWFya2VkIHNvIHRoYXQgd2hlbgorCSAgIHRoZSByZWxlYXNlKCkgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGF0IHdpbGwgdHJpZ2dlciBhIHByb3BlcgorCSAgIGRldGFjaCgpLgorCSAqLworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKGxvY2FsX2luZm9fdCAqKSBsaW5rLT5wcml2KS0+c3RvcCA9IDE7CisJCWxhYnBjX3JlbGVhc2UobGluayk7CisJfQorCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworCit9CQkJCS8qIGxhYnBjX2NzX2RldGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGxhYnBjX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGxhYnBjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKwl3aW5fcmVxX3QgcmVxOworCW1lbXJlcV90IG1hcDsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKworCURFQlVHKDAsICJsYWJwY19jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwkJfQorCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7CisJCQljaXN0cGxfbWVtX3QgKm1lbSA9CisJCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOworCQkJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKKwkJCXJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7CisJCQlyZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJCXJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQkJaWYgKHJlcS5TaXplIDwgMHgxMDAwKQorCQkJCXJlcS5TaXplID0gMHgxMDAwOworCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKKwkJCWxpbmstPndpbiA9ICh3aW5kb3dfaGFuZGxlX3QpIGxpbms7CisJCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCQltYXAuUGFnZSA9IDA7CisJCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCQljc19lcnJvcihsaW5rLCBHZXROZXh0VHVwbGUsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisJfQorCisJLyoKKwkgICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCisJICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSkgeworCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKworCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpKSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJkYXFjYXJkLTEyMDAiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT53aW4pCisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCisJCQlyZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJbGFicGNfcmVsZWFzZShsaW5rKTsKKworfQkJCQkvKiBsYWJwY19jb25maWcgKi8KKworc3RhdGljIHZvaWQgbGFicGNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAibGFicGNfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGxhYnBjX3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBsYWJwY19jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQkJCQkvKiBsYWJwY19jc19zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgbGFicGNfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJbG9jYWwtPnN0b3AgPSAwOworCXJldHVybiAwOworfQkJCQkvKiBsYWJwY19jc19yZXN1bWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBsYWJwY19jc19pZHNbXSA9IHsKKwkvKiBOLkIuIFRoZXNlIElEcyBzaG91bGQgbWF0Y2ggdGhvc2UgaW4gbGFicGNfY3NfYm9hcmRzIChuaV9sYWJwYy5jKSAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMTAzKSwJLyogZGFxY2FyZC0xMjAwICovCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgbGFicGNfY3NfaWRzKTsKKworc3RydWN0IHBjbWNpYV9kcml2ZXIgbGFicGNfY3NfZHJpdmVyID0geworCS5wcm9iZSA9IGxhYnBjX2NzX2F0dGFjaCwKKwkucmVtb3ZlID0gbGFicGNfY3NfZGV0YWNoLAorCS5zdXNwZW5kID0gbGFicGNfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gbGFicGNfY3NfcmVzdW1lLAorCS5pZF90YWJsZSA9IGxhYnBjX2NzX2lkcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbGFicGNfY3Modm9pZCkKK3sKKwlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmxhYnBjX2NzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2xhYnBjX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIm5pX2xhYnBjOiB1bmxvYWRpbmdcbiIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmbGFicGNfY3NfZHJpdmVyKTsKK30KKworaW50IF9faW5pdCBsYWJwY19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2xhYnBjX2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2xhYnBjX2NzKTsKK30KKwordm9pZCBfX2V4aXQgbGFicGNfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlleGl0X2xhYnBjX2NzKCk7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbGFicGNfY3MpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChsYWJwY19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChsYWJwY19leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDJiZDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtMCwwICsxLDU4NjIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBEQVEtU1RDIGJhc2VkIGJvYXJkcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny0yMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisvKgorCVRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBieSBhbm90aGVyIGZpbGUsIGUuZy4sCisJbmlfYXRtaW8uYyBvciBuaV9wY2ltaW8uYy4KKworCUludGVycnVwdCBzdXBwb3J0IG9yaWdpbmFsbHkgYWRkZWQgYnkgVHJ1eHRvbiBGdWx0b24KKwk8dHJ1eEB0cnV4dG9uLmNvbT4KKworCVJlZmVyZW5jZXMgKGZyb20gZnRwOi8vZnRwLm5hdGluc3QuY29tL3N1cHBvcnQvbWFudWFscyk6CisKKwkgICAzNDA3NDdiLnBkZiAgQVQtTUlPIEUgc2VyaWVzIFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsCisJICAgMzQxMDc5Yi5wZGYgIFBDSSBFIFNlcmllcyBSTFBNCisJICAgMzQwOTM0Yi5wZGYgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCTY3eHggYW5kIDYxMXggcmVnaXN0ZXJzIChmcm9tIGh0dHA6Ly93d3cubmkuY29tL3BkZi9kYXEvdXMpCisJcmVsZWFzZV9uaTYxMXgucGRmCisJcmVsZWFzZV9uaTY3eHgucGRmCisJT3RoZXIgcG9zc2libHkgcmVsZXZhbnQgaW5mbzoKKworCSAgIDMyMDUxN2MucGRmICBVc2VyIG1hbnVhbCAob2Jzb2xldGUpCisJICAgMzIwNTE3Zi5wZGYgIFVzZXIgbWFudWFsIChuZXcpCisJICAgMzIwODg5YS5wZGYgIGRlbGV0ZQorCSAgIDMyMDkwNmMucGRmICBtYXhpbXVtIHNpZ25hbCByYXRpbmdzCisJICAgMzIxMDY2YS5wZGYgIGFib3V0IDE2eAorCSAgIDMyMTc5MWEucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZS0xMCByZXYuIGMKKwkgICAzMjE4MDhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZS0xMCByZXYgUAorCSAgIDMyMTgzN2EucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZGUtMTAgcmV2IGQKKwkgICAzMjE4MzhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZGUtMTAgcmV2IE4KKworCUlTU1VFUzoKKworCSAtIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBuZWVkcyB0byBiZSBjbGVhbmVkIHVwCisKKwkyMDA2LTAyLTA3OiBTLVNlcmllcyBQQ0ktNjE0MzogU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBidXQgaXMgbm90CisJCWZ1bGx5IHRlc3RlZCBhcyB5ZXQuIFRlcnJ5IEJhcm5hYnksIEJFQU0gTHRkLgorKi8KKworLy8jZGVmaW5lIERFQlVHX0lOVEVSUlVQVAorLy8jZGVmaW5lIERFQlVHX1NUQVRVU19BCisvLyNkZWZpbmUgREVCVUdfU1RBVFVTX0IKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJtaXRlLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNpZm5kZWYgTURQUklOVEsKKyNkZWZpbmUgTURQUklOVEsoZm9ybWF0LGFyZ3MuLi4pCisjZW5kaWYKKworLyogQSB0aW1lb3V0IGNvdW50ICovCisjZGVmaW5lIE5JX1RJTUVPVVQgMTAwMAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwgPSA3OworCisvKiBOb3RlOiB0aGlzIHRhYmxlIG11c3QgbWF0Y2ggdGhlIGFpX2dhaW5fKiBkZWZpbml0aW9ucyAqLworc3RhdGljIGNvbnN0IHNob3J0IG5pX2dhaW5sa3VwW11bMTZdID0geworCVthaV9nYWluXzE2XSA9IHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorCQkweDEwMCwgMHgxMDEsIDB4MTAyLCAweDEwMywgMHgxMDQsIDB4MTA1LCAweDEwNiwgMHgxMDd9LAorCVthaV9nYWluXzhdID0gezEsIDIsIDQsIDcsIDB4MTAxLCAweDEwMiwgMHgxMDQsIDB4MTA3fSwKKwlbYWlfZ2Fpbl8xNF0gPSB7MSwgMiwgMywgNCwgNSwgNiwgNywKKwkJMHgxMDEsIDB4MTAyLCAweDEwMywgMHgxMDQsIDB4MTA1LCAweDEwNiwgMHgxMDd9LAorCVthaV9nYWluXzRdID0gezAsIDEsIDQsIDd9LAorCVthaV9nYWluXzYxMXhdID0gezB4MDBhLCAweDAwYiwgMHgwMDEsIDB4MDAyLAorCQkweDAwMywgMHgwMDQsIDB4MDA1LCAweDAwNn0sCisJW2FpX2dhaW5fNjIyeF0gPSB7MCwgMSwgNCwgNX0sCisJW2FpX2dhaW5fNjI4eF0gPSB7MSwgMiwgMywgNCwgNSwgNiwgN30sCisJW2FpX2dhaW5fNjE0M10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9haSA9IHsgMTYsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4yNSwgMC4yNSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCQkJUkFOR0UoMCwgMjApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyKSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC41KSwKKwkJCVJBTkdFKDAsIDAuMiksCisJCQlSQU5HRSgwLCAwLjEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9haV9saW1pdGVkID0geyA4LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX0VfYWlfbGltaXRlZDE0ID0geyAxNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMiwgMiksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMiwgMC4yKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDIpLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgwLCAwLjUpLAorCQkJUkFOR0UoMCwgMC4yKSwKKwkJCVJBTkdFKDAsIDAuMSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FpX2JpcG9sYXI0ID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4wNSwgMC4wNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FpXzYxMXggPSB7IDgsIHsKKwkJCVJBTkdFKC01MCwgNTApLAorCQkJUkFOR0UoLTIwLCAyMCksCisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLCAyKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4yLCAwLjIpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV9haV82MjJ4ID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjIsIDAuMiksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9NX2FpXzYyOHggPSB7IDcsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIsIDIpLAorCQkJUkFOR0UoLTEsIDEpLAorCQkJUkFOR0UoLTAuNSwgMC41KSwKKwkJCVJBTkdFKC0wLjIsIDAuMiksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfU19haV82MTQzID0geyAxLCB7CisJCQlSQU5HRSgtNSwgKzUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9hb19leHQgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0VfZXh0KC0xLCAxKSwKKwkJCVJBTkdFX2V4dCgwLCAxKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IG5pX3JhbmdlX2xrdXBbXSA9IHsKKwlbYWlfZ2Fpbl8xNl0gPSAmcmFuZ2VfbmlfRV9haSwKKwlbYWlfZ2Fpbl84XSA9ICZyYW5nZV9uaV9FX2FpX2xpbWl0ZWQsCisJW2FpX2dhaW5fMTRdID0gJnJhbmdlX25pX0VfYWlfbGltaXRlZDE0LAorCVthaV9nYWluXzRdID0gJnJhbmdlX25pX0VfYWlfYmlwb2xhcjQsCisJW2FpX2dhaW5fNjExeF0gPSAmcmFuZ2VfbmlfRV9haV82MTF4LAorCVthaV9nYWluXzYyMnhdID0gJnJhbmdlX25pX01fYWlfNjIyeCwKKwlbYWlfZ2Fpbl82Mjh4XSA9ICZyYW5nZV9uaV9NX2FpXzYyOHgsCisJW2FpX2dhaW5fNjE0M10gPSAmcmFuZ2VfbmlfU19haV82MTQzCit9OworCitzdGF0aWMgaW50IG5pX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2NkaW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbmlfY2Rpb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IG5pX2NkaW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgaGFuZGxlX2NkaW9faW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbmlfY2RvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSk7CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX3NlcmlhbF9od19yZWFkd3JpdGU4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgY2hhciBkYXRhX291dCwgdW5zaWduZWQgY2hhciAqZGF0YV9pbik7CitzdGF0aWMgaW50IG5pX3NlcmlhbF9zd19yZWFkd3JpdGU4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgY2hhciBkYXRhX291dCwgdW5zaWduZWQgY2hhciAqZGF0YV9pbik7CisKK3N0YXRpYyBpbnQgbmlfY2FsaWJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV9lZXByb21faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2VlcHJvbV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV9wZmlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX3BmaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHVuc2lnbmVkIG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pOworCitzdGF0aWMgdm9pZCBuaV9ydHNpX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBuaV9ydHNpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9ydHNpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyB2b2lkIGNhbGRhY19zZXR1cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbmlfcmVhZF9lZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKTsKKworI2lmZGVmIERFQlVHX1NUQVRVU19BCitzdGF0aWMgdm9pZCBuaV9taW9fcHJpbnRfc3RhdHVzX2EoaW50IHN0YXR1cyk7CisjZWxzZQorI2RlZmluZSBuaV9taW9fcHJpbnRfc3RhdHVzX2EoYSkKKyNlbmRpZgorI2lmZGVmIERFQlVHX1NUQVRVU19CCitzdGF0aWMgdm9pZCBuaV9taW9fcHJpbnRfc3RhdHVzX2IoaW50IHN0YXR1cyk7CisjZWxzZQorI2RlZmluZSBuaV9taW9fcHJpbnRfc3RhdHVzX2IoYSkKKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX2FpX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworI2lmbmRlZiBQQ0lETUEKK3N0YXRpYyB2b2lkIG5pX2hhbmRsZV9maWZvX2hhbGZfZnVsbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG5pX2FvX2ZpZm9faGFsZl9lbXB0eShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgbmlfaGFuZGxlX2ZpZm9fZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBuaV9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pOworc3RhdGljIHZvaWQgbmlfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbl9jaGFuLAorCXVuc2lnbmVkIGludCAqbGlzdCk7CitzdGF0aWMgdm9pZCBzaHV0ZG93bl9haV9jb21tYW5kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIGludCBuaV9hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pOworCitzdGF0aWMgaW50IG5pX2FvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgaW50IG5pXzgyNTVfY2FsbGJhY2soaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKK3N0YXRpYyBpbnQgbmlfZ3BjdF9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfZ3BjdF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IG5pX2dwY3RfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbmlfZ3BjdF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgc2hvcnQgY291bnRlcl9pbmRleCk7CisKK3N0YXRpYyBpbnQgaW5pdF9jczU1Mjkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBjczU1MjlfZG9fY29udmVyc2lvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgKmRhdGEpOworc3RhdGljIGludCBjczU1MjlfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisjaWZkZWYgTklfQ1M1NTI5X0RFQlVHCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUyOV9jb25maWdfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmVnX3NlbGVjdF9iaXRzKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgY3M1NTI5X2NvbmZpZ193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCByZWdfc2VsZWN0X2JpdHMpOworCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjE0M19wd21fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgbmlfc2V0X21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc291cmNlLAorCXVuc2lnbmVkIHBlcmlvZF9ucyk7CitzdGF0aWMgdm9pZCBhY2tfYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGFfc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGFja19iX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgYl9zdGF0dXMpOworCitlbnVtIGFpbW9kZXMgeworCUFJTU9ERV9OT05FID0gMCwKKwlBSU1PREVfSEFMRl9GVUxMID0gMSwKKwlBSU1PREVfU0NBTiA9IDIsCisJQUlNT0RFX1NBTVBMRSA9IDMsCit9OworCitlbnVtIG5pX2NvbW1vbl9zdWJkZXZpY2VzIHsKKwlOSV9BSV9TVUJERVYsCisJTklfQU9fU1VCREVWLAorCU5JX0RJT19TVUJERVYsCisJTklfODI1NV9ESU9fU1VCREVWLAorCU5JX1VOVVNFRF9TVUJERVYsCisJTklfQ0FMSUJSQVRJT05fU1VCREVWLAorCU5JX0VFUFJPTV9TVUJERVYsCisJTklfUEZJX0RJT19TVUJERVYsCisJTklfQ1M1NTI5X0NBTElCUkFUSU9OX1NVQkRFViwKKwlOSV9TRVJJQUxfU1VCREVWLAorCU5JX1JUU0lfU1VCREVWLAorCU5JX0dQQ1QwX1NVQkRFViwKKwlOSV9HUENUMV9TVUJERVYsCisJTklfRlJFUV9PVVRfU1VCREVWLAorCU5JX05VTV9TVUJERVZJQ0VTCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV9HUENUX1NVQkRFVih1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JX0dQQ1QwX1NVQkRFVjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklfR1BDVDFfU1VCREVWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJQlVHKCk7CisJcmV0dXJuIE5JX0dQQ1QwX1NVQkRFVjsKK30KKworZW51bSB0aW1lYmFzZV9uYW5vc2Vjb25kcyB7CisJVElNRUJBU0VfMV9OUyA9IDUwLAorCVRJTUVCQVNFXzJfTlMgPSAxMDAwMAorfTsKKworI2RlZmluZSBTRVJJQUxfRElTQUJMRUQJCTAKKyNkZWZpbmUgU0VSSUFMXzYwME5TCQk2MDAKKyNkZWZpbmUgU0VSSUFMXzFfMlVTCQkxMjAwCisjZGVmaW5lIFNFUklBTF8xMFVTCQkJMTAwMDAKKworc3RhdGljIGNvbnN0IGludCBudW1fYWRjX3N0YWdlc182MTF4ID0gMzsKKworc3RhdGljIHZvaWQgaGFuZGxlX2FfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMsCisJdW5zaWduZWQgYWlfbWl0ZV9zdGF0dXMpOworc3RhdGljIHZvaWQgaGFuZGxlX2JfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMsCisJdW5zaWduZWQgYW9fbWl0ZV9zdGF0dXMpOworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxMXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxNDMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2JpdGZpZWxkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnLAorCXVuc2lnbmVkIGJpdF9tYXNrLCB1bnNpZ25lZCBiaXRfdmFsdWVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXI6CisJCWRldnByaXYtPmludF9hX2VuYWJsZV9yZWcgJj0gfmJpdF9tYXNrOworCQlkZXZwcml2LT5pbnRfYV9lbmFibGVfcmVnIHw9IGJpdF92YWx1ZXMgJiBiaXRfbWFzazsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmludF9hX2VuYWJsZV9yZWcsCisJCQlJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3RlcjoKKwkJZGV2cHJpdi0+aW50X2JfZW5hYmxlX3JlZyAmPSB+Yml0X21hc2s7CisJCWRldnByaXYtPmludF9iX2VuYWJsZV9yZWcgfD0gYml0X3ZhbHVlcyAmIGJpdF9tYXNrOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+aW50X2JfZW5hYmxlX3JlZywKKwkJCUludGVycnVwdF9CX0VuYWJsZV9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyOgorCQlkZXZwcml2LT5pb19iaWRpcmVjdGlvbl9waW5fcmVnICY9IH5iaXRfbWFzazsKKwkJZGV2cHJpdi0+aW9fYmlkaXJlY3Rpb25fcGluX3JlZyB8PSBiaXRfdmFsdWVzICYgYml0X21hc2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5pb19iaWRpcmVjdGlvbl9waW5fcmVnLAorCQkJSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBBSV9BT19TZWxlY3Q6CisJCWRldnByaXYtPmFpX2FvX3NlbGVjdF9yZWcgJj0gfmJpdF9tYXNrOworCQlkZXZwcml2LT5haV9hb19zZWxlY3RfcmVnIHw9IGJpdF92YWx1ZXMgJiBiaXRfbWFzazsKKwkJbmlfd3JpdGViKGRldnByaXYtPmFpX2FvX3NlbGVjdF9yZWcsIEFJX0FPX1NlbGVjdCk7CisJCWJyZWFrOworCWNhc2UgRzBfRzFfU2VsZWN0OgorCQlkZXZwcml2LT5nMF9nMV9zZWxlY3RfcmVnICY9IH5iaXRfbWFzazsKKwkJZGV2cHJpdi0+ZzBfZzFfc2VsZWN0X3JlZyB8PSBiaXRfdmFsdWVzICYgYml0X21hc2s7CisJCW5pX3dyaXRlYihkZXZwcml2LT5nMF9nMV9zZWxlY3RfcmVnLCBHMF9HMV9TZWxlY3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIldhcm5pbmcgJXMoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIHJlZ2lzdGVyXG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcnRfcHJpbnRrKCJyZWcgaXMgJWRcbiIsIHJlZyk7CisJCWJyZWFrOworCX0KKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7Cit9CisKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyBpbnQgbmlfYWlfZHJhaW5fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworLyogRE1BIGNoYW5uZWwgc2V0dXAgKi8KKworLy8gbmVnYXRpdmUgY2hhbm5lbCBtZWFucyBubyBjaGFubmVsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2FpX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRmaWVsZDsKKworCWlmIChjaGFubmVsID49IDApIHsKKwkJYml0ZmllbGQgPQorCQkJKG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQoY2hhbm5lbCkgPDwKKwkJCUFJX0RNQV9TZWxlY3RfU2hpZnQpICYgQUlfRE1BX1NlbGVjdF9NYXNrOworCX0gZWxzZSB7CisJCWJpdGZpZWxkID0gMDsKKwl9CisJbmlfc2V0X2JpdGZpZWxkKGRldiwgQUlfQU9fU2VsZWN0LCBBSV9ETUFfU2VsZWN0X01hc2ssIGJpdGZpZWxkKTsKK30KKworLy8gbmVnYXRpdmUgY2hhbm5lbCBtZWFucyBubyBjaGFubmVsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2FvX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRmaWVsZDsKKworCWlmIChjaGFubmVsID49IDApIHsKKwkJYml0ZmllbGQgPQorCQkJKG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQoY2hhbm5lbCkgPDwKKwkJCUFPX0RNQV9TZWxlY3RfU2hpZnQpICYgQU9fRE1BX1NlbGVjdF9NYXNrOworCX0gZWxzZSB7CisJCWJpdGZpZWxkID0gMDsKKwl9CisJbmlfc2V0X2JpdGZpZWxkKGRldiwgQUlfQU9fU2VsZWN0LCBBT19ETUFfU2VsZWN0X01hc2ssIGJpdGZpZWxkKTsKK30KKworLy8gbmVnYXRpdmUgbWl0ZV9jaGFubmVsIG1lYW5zIG5vIGNoYW5uZWwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9zZXRfZ3BjdF9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBncGN0X2luZGV4LCBpbnQgbWl0ZV9jaGFubmVsKQoreworCXVuc2lnbmVkIGJpdGZpZWxkOworCisJaWYgKG1pdGVfY2hhbm5lbCA+PSAwKSB7CisJCWJpdGZpZWxkID0gR1BDVF9ETUFfU2VsZWN0X0JpdHMoZ3BjdF9pbmRleCwgbWl0ZV9jaGFubmVsKTsKKwl9IGVsc2UgeworCQliaXRmaWVsZCA9IDA7CisJfQorCW5pX3NldF9iaXRmaWVsZChkZXYsIEcwX0cxX1NlbGVjdCwgR1BDVF9ETUFfU2VsZWN0X01hc2soZ3BjdF9pbmRleCksCisJCWJpdGZpZWxkKTsKK30KKworLy8gbmVnYXRpdmUgbWl0ZV9jaGFubmVsIG1lYW5zIG5vIGNoYW5uZWwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9zZXRfY2RvX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbWl0ZV9jaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworCWRldnByaXYtPmNkaW9fZG1hX3NlbGVjdF9yZWcgJj0gfkNET19ETUFfU2VsZWN0X01hc2s7CisJaWYgKG1pdGVfY2hhbm5lbCA+PSAwKSB7CisJCS8qWFhYIGp1c3QgZ3Vlc3Npbmcgbmlfc3RjX2RtYV9jaGFubmVsX3NlbGVjdF9iaXRmaWVsZCgpIHJldHVybnMgdGhlIHJpZ2h0IGJpdHMsCisJCSAgIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoZSBjZGlvIGRtYSBzZWxlY3Rpb24gd29ya3MganVzdCBsaWtlIGFpL2FvL2dwY3QuCisJCSAgIERlZmluaXRlbHkgd29ya3MgZm9yIGRtYSBjaGFubmVscyAwIGFuZCAxLiAqLworCQlkZXZwcml2LT5jZGlvX2RtYV9zZWxlY3RfcmVnIHw9CisJCQkobmlfc3RjX2RtYV9jaGFubmVsX3NlbGVjdF9iaXRmaWVsZChtaXRlX2NoYW5uZWwpIDw8CisJCQlDRE9fRE1BX1NlbGVjdF9TaGlmdCkgJiBDRE9fRE1BX1NlbGVjdF9NYXNrOworCX0KKwluaV93cml0ZWIoZGV2cHJpdi0+Y2Rpb19kbWFfc2VsZWN0X3JlZywgTV9PZmZzZXRfQ0RJT19ETUFfU2VsZWN0KTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfcmVxdWVzdF9haV9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKTsKKwlkZXZwcml2LT5haV9taXRlX2NoYW4gPQorCQltaXRlX3JlcXVlc3RfY2hhbm5lbChkZXZwcml2LT5taXRlLCBkZXZwcml2LT5haV9taXRlX3JpbmcpOworCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4gPT0gTlVMTCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssCisJCQlmbGFncyk7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiZmFpbGVkIHRvIHJlc2VydmUgbWl0ZSBkbWEgY2hhbm5lbCBmb3IgYW5hbG9nIGlucHV0LiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlkZXZwcml2LT5haV9taXRlX2NoYW4tPmRpciA9IENPTUVESV9JTlBVVDsKKwluaV9zZXRfYWlfZG1hX2NoYW5uZWwoZGV2LCBkZXZwcml2LT5haV9taXRlX2NoYW4tPmNoYW5uZWwpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3JlcXVlc3RfYW9fbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmFvX21pdGVfY2hhbik7CisJZGV2cHJpdi0+YW9fbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWwoZGV2cHJpdi0+bWl0ZSwgZGV2cHJpdi0+YW9fbWl0ZV9yaW5nKTsKKwlpZiAoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGFuYWxvZyBvdXR1dC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2cHJpdi0+YW9fbWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfT1VUUFVUOworCW5pX3NldF9hb19kbWFfY2hhbm5lbChkZXYsIGRldnByaXYtPmFvX21pdGVfY2hhbi0+Y2hhbm5lbCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfcmVxdWVzdF9ncGN0X21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBncGN0X2luZGV4LCBlbnVtIGNvbWVkaV9pb19kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuOworCisJQlVHX09OKGdwY3RfaW5kZXggPj0gTlVNX0dQQ1QpOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2dwY3RfaW5kZXhdLm1pdGVfY2hhbik7CisJbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWwoZGV2cHJpdi0+bWl0ZSwKKwkJZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbZ3BjdF9pbmRleF0pOworCWlmIChtaXRlX2NoYW4gPT0gTlVMTCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssCisJCQlmbGFncyk7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiZmFpbGVkIHRvIHJlc2VydmUgbWl0ZSBkbWEgY2hhbm5lbCBmb3IgY291bnRlci4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbWl0ZV9jaGFuLT5kaXIgPSBkaXJlY3Rpb247CisJbmlfdGlvX3NldF9taXRlX2NoYW5uZWwoJmRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tncGN0X2luZGV4XSwKKwkJbWl0ZV9jaGFuKTsKKwluaV9zZXRfZ3BjdF9kbWFfY2hhbm5lbChkZXYsIGdwY3RfaW5kZXgsIG1pdGVfY2hhbi0+Y2hhbm5lbCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvLyBQQ0lETUEKKworc3RhdGljIGludCBuaV9yZXF1ZXN0X2Nkb19taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisjaWZkZWYgUENJRE1BCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oZGV2cHJpdi0+Y2RvX21pdGVfY2hhbik7CisJZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiA9CisJCW1pdGVfcmVxdWVzdF9jaGFubmVsKGRldnByaXYtPm1pdGUsIGRldnByaXYtPmNkb19taXRlX3JpbmcpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGNvcnJlbGF0ZWQgZGlnaXRhbCBvdXR1dC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2cHJpdi0+Y2RvX21pdGVfY2hhbi0+ZGlyID0gQ09NRURJX09VVFBVVDsKKwluaV9zZXRfY2RvX2RtYV9jaGFubmVsKGRldiwgZGV2cHJpdi0+Y2RvX21pdGVfY2hhbi0+Y2hhbm5lbCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisjZW5kaWYgLy8gUENJRE1BCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3JlbGVhc2VfYWlfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFpX21pdGVfY2hhbikgeworCQluaV9zZXRfYWlfZG1hX2NoYW5uZWwoZGV2LCAtMSk7CisJCW1pdGVfcmVsZWFzZV9jaGFubmVsKGRldnByaXYtPmFpX21pdGVfY2hhbik7CisJCWRldnByaXYtPmFpX21pdGVfY2hhbiA9IE5VTEw7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworI2VuZGlmIC8vIFBDSURNQQorfQorCitzdGF0aWMgdm9pZCBuaV9yZWxlYXNlX2FvX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5hb19taXRlX2NoYW4pIHsKKwkJbmlfc2V0X2FvX2RtYV9jaGFubmVsKGRldiwgLTEpOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChkZXZwcml2LT5hb19taXRlX2NoYW4pOworCQlkZXZwcml2LT5hb19taXRlX2NoYW4gPSBOVUxMOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKwordm9pZCBuaV9yZWxlYXNlX2dwY3RfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBncGN0X2luZGV4KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oZ3BjdF9pbmRleCA+PSBOVU1fR1BDVCk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbZ3BjdF9pbmRleF0ubWl0ZV9jaGFuKSB7CisJCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiA9CisJCQlkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbZ3BjdF9pbmRleF0ubWl0ZV9jaGFuOworCisJCW5pX3NldF9ncGN0X2RtYV9jaGFubmVsKGRldiwgZ3BjdF9pbmRleCwgLTEpOworCQluaV90aW9fc2V0X21pdGVfY2hhbm5lbCgmZGV2cHJpdi0+Y291bnRlcl9kZXYtPgorCQkJY291bnRlcnNbZ3BjdF9pbmRleF0sIE5VTEwpOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChtaXRlX2NoYW4pOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKworc3RhdGljIHZvaWQgbmlfcmVsZWFzZV9jZG9fbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmNkb19taXRlX2NoYW4pIHsKKwkJbmlfc2V0X2Nkb19kbWFfY2hhbm5lbChkZXYsIC0xKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbik7CisJCWRldnByaXYtPmNkb19taXRlX2NoYW4gPSBOVUxMOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKworLy8gZS1zZXJpZXMgYm9hcmRzIHVzZSB0aGUgc2Vjb25kIGlycSBzaWduYWxzIHRvIGdlbmVyYXRlIGRtYSByZXF1ZXN0cyBmb3IgdGhlaXIgY291bnRlcnMKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyB2b2lkIG5pX2Vfc2VyaWVzX2VuYWJsZV9zZWNvbmRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGdwY3RfaW5kZXgsIHNob3J0IGVuYWJsZSkKK3sKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXJldHVybjsKKwlzd2l0Y2ggKGdwY3RfaW5kZXgpIHsKKwljYXNlIDA6CisJCWlmIChlbmFibGUpIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBHMF9HYXRlX1NlY29uZF9JcnFfRW5hYmxlLAorCQkJCVNlY29uZF9JUlFfQV9FbmFibGVfUmVnaXN0ZXIpOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDAsCisJCQkJU2Vjb25kX0lSUV9BX0VuYWJsZV9SZWdpc3Rlcik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoZW5hYmxlKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzFfR2F0ZV9TZWNvbmRfSXJxX0VuYWJsZSwKKwkJCQlTZWNvbmRfSVJRX0JfRW5hYmxlX1JlZ2lzdGVyKTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLAorCQkJCVNlY29uZF9JUlFfQl9FbmFibGVfUmVnaXN0ZXIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9Cit9CisjZW5kaWYgLy8gUENJRE1BCisKK3N0YXRpYyB2b2lkIG5pX2NsZWFyX2FpX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQkvLyBGbHVzaCB0aGUgNjE0MyBkYXRhIEZJRk8KKwkJbmlfd3JpdGVsKDB4MTAsIEFJRklGT19Db250cm9sXzYxNDMpOwkvLyBGbHVzaCBmaWZvCisJCW5pX3dyaXRlbCgweDAwLCBBSUZJRk9fQ29udHJvbF82MTQzKTsJLy8gRmx1c2ggZmlmbworCQl3aGlsZSAobmlfcmVhZGwoQUlGSUZPX1N0YXR1c182MTQzKSAmIDB4MTApIDsJLy8gV2FpdCBmb3IgY29tcGxldGUKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQURDX0ZJRk9fQ2xlYXIpOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MjV4KSB7CisJCQluaV93cml0ZWIoMCwgTV9PZmZzZXRfU3RhdGljX0FJX0NvbnRyb2woMCkpOworCQkJbmlfd3JpdGViKDEsIE1fT2Zmc2V0X1N0YXRpY19BSV9Db250cm9sKDApKTsKKyNpZiAwCisJCQkvKiB0aGUgTkkgZXhhbXBsZSBjb2RlIGRvZXMgMyBjb252ZXJ0IHB1bHNlcyBmb3IgNjI1eCBib2FyZHMsCisJCQkgICBidXQgdGhhdCBhcHBlYXJzIHRvIGJlIHdyb25nIGluIHByYWN0aWNlLiAqLworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsCisJCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworI2VuZGlmCisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdpbl9vdXQyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCBkYXRhLCBpbnQgcmVnKQoreworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkYXRhID4+IDE2LCByZWcpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkYXRhICYgMHhmZmZmLCByZWcgKyAxKTsKK30KKworc3RhdGljIHVpbnQzMl90IHdpbl9pbjIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcpCit7CisJdWludDMyX3QgYml0czsKKwliaXRzID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgcmVnKSA8PCAxNjsKKwliaXRzIHw9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIHJlZyArIDEpOworCXJldHVybiBiaXRzOworfQorCisjZGVmaW5lIGFvX3dpbl9vdXQoZGF0YSxhZGRyKSBuaV9hb193aW5fb3V0dyhkZXYsZGF0YSxhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIG5pX2FvX3dpbl9vdXR3KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBkYXRhLCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCW5pX3dyaXRldyhhZGRyLCBBT19XaW5kb3dfQWRkcmVzc182MTF4KTsKKwluaV93cml0ZXcoZGF0YSwgQU9fV2luZG93X0RhdGFfNjExeCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9hb193aW5fb3V0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDMyX3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcoYWRkciwgQU9fV2luZG93X0FkZHJlc3NfNjExeCk7CisJbmlfd3JpdGVsKGRhdGEsIEFPX1dpbmRvd19EYXRhXzYxMXgpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG5pX2FvX3dpbl9pbncoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgZGF0YTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcoYWRkciwgQU9fV2luZG93X0FkZHJlc3NfNjExeCk7CisJZGF0YSA9IG5pX3JlYWR3KEFPX1dpbmRvd19EYXRhXzYxMXgpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCXJldHVybiBkYXRhOworfQorCisvKiBuaV9zZXRfYml0cyggKSBhbGxvd3MgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBuaV9taW9fY29tbW9uIGRyaXZlciB0bworKiBzaGFyZSByZWdpc3RlcnMgKHN1Y2ggYXMgSW50ZXJydXB0X0FfUmVnaXN0ZXIpIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aAorKiBlYWNoIG90aGVyLgorKgorKiBOT1RFOiB0aGUgc3dpdGNoL2Nhc2Ugc3RhdGVtZW50cyBhcmUgb3B0aW1pemVkIG91dCBmb3IgYSBjb25zdGFudCBhcmd1bWVudAorKiBzbyB0aGlzIGlzIGFjdHVhbGx5IHF1aXRlIGZhc3QtLS0gIElmIHlvdSBtdXN0IHdyYXAgYW5vdGhlciBmdW5jdGlvbiBhcm91bmQgdGhpcworKiBtYWtlIGl0IGlubGluZSB0byBhdm9pZCBhIGxhcmdlIHNwZWVkIHBlbmFsdHkuCisqCisqIHZhbHVlIHNob3VsZCBvbmx5IGJlIDEgb3IgMC4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcsIHVuc2lnbmVkIGJpdHMsCisJdW5zaWduZWQgdmFsdWUpCit7CisJdW5zaWduZWQgYml0X3ZhbHVlczsKKworCWlmICh2YWx1ZSkKKwkJYml0X3ZhbHVlcyA9IGJpdHM7CisJZWxzZQorCQliaXRfdmFsdWVzID0gMDsKKwluaV9zZXRfYml0ZmllbGQoZGV2LCByZWcsIGJpdHMsIGJpdF92YWx1ZXMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlfRV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl1bnNpZ25lZCBzaG9ydCBhX3N0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBiX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgYWlfbWl0ZV9zdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBhb19taXRlX3N0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUgPSBkZXZwcml2LT5taXRlOworI2VuZGlmCisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisJc21wX21iKCk7CQkvLyBtYWtlIHN1cmUgZGV2LT5hdHRhY2hlZCBpcyBjaGVja2VkIGJlZm9yZSBoYW5kbGVyIGRvZXMgYW55dGhpbmcgZWxzZS4KKworCS8vIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJYV9zdGF0dXMgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBSV9TdGF0dXNfMV9SZWdpc3Rlcik7CisJYl9zdGF0dXMgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBT19TdGF0dXNfMV9SZWdpc3Rlcik7CisjaWZkZWYgUENJRE1BCisJaWYgKG1pdGUpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnc190b287CisKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzX3Rvbyk7CisJCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4pIHsKKwkJCWFpX21pdGVfc3RhdHVzID0gbWl0ZV9nZXRfc3RhdHVzKGRldnByaXYtPmFpX21pdGVfY2hhbik7CisJCQlpZiAoYWlfbWl0ZV9zdGF0dXMgJiBDSFNSX0xJTktDKQorCQkJCXdyaXRlbChDSE9SX0NMUkxDLAorCQkJCQlkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKworCQkJCQlNSVRFX0NIT1IoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLT4KKwkJCQkJCWNoYW5uZWwpKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuKSB7CisJCQlhb19taXRlX3N0YXR1cyA9IG1pdGVfZ2V0X3N0YXR1cyhkZXZwcml2LT5hb19taXRlX2NoYW4pOworCQkJaWYgKGFvX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykKKwkJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQkJbWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCQkJTUlURV9DSE9SKGRldnByaXYtPmFvX21pdGVfY2hhbi0+CisJCQkJCQljaGFubmVsKSk7CisJCX0KKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3NfdG9vKTsKKwl9CisjZW5kaWYKKwlhY2tfYV9pbnRlcnJ1cHQoZGV2LCBhX3N0YXR1cyk7CisJYWNrX2JfaW50ZXJydXB0KGRldiwgYl9zdGF0dXMpOworCWlmICgoYV9zdGF0dXMgJiBJbnRlcnJ1cHRfQV9TdCkgfHwgKGFpX21pdGVfc3RhdHVzICYgQ0hTUl9JTlQpKQorCQloYW5kbGVfYV9pbnRlcnJ1cHQoZGV2LCBhX3N0YXR1cywgYWlfbWl0ZV9zdGF0dXMpOworCWlmICgoYl9zdGF0dXMgJiBJbnRlcnJ1cHRfQl9TdCkgfHwgKGFvX21pdGVfc3RhdHVzICYgQ0hTUl9JTlQpKQorCQloYW5kbGVfYl9pbnRlcnJ1cHQoZGV2LCBiX3N0YXR1cywgYW9fbWl0ZV9zdGF0dXMpOworCWhhbmRsZV9ncGN0X2ludGVycnVwdChkZXYsIDApOworCWhhbmRsZV9ncGN0X2ludGVycnVwdChkZXYsIDEpOworCWhhbmRsZV9jZGlvX2ludGVycnVwdChkZXYpOworCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyB2b2lkIG5pX3N5bmNfYWlfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFpX21pdGVfY2hhbikKKwkJbWl0ZV9zeW5jX2lucHV0X2RtYShkZXZwcml2LT5haV9taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbWl0ZV9oYW5kbGVfYl9saW5rYyhzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFvX21pdGVfY2hhbikgeworCQltaXRlX3N5bmNfb3V0cHV0X2RtYShkZXZwcml2LT5hb19taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9fd2FpdF9mb3JfZG1hX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQl1bnNpZ25lZCBzaG9ydCBiX3N0YXR1czsKKworCQliX3N0YXR1cyA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEFPX1N0YXR1c18xX1JlZ2lzdGVyKTsKKwkJaWYgKGJfc3RhdHVzICYgQU9fRklGT19IYWxmX0Z1bGxfU3QpCisJCQlicmVhazsKKwkJLyogaWYgd2UgcG9sbCB0b28gb2Z0ZW4sIHRoZSBwY2kgYnVzIGFjdGl2aXR5IHNlZW1zCisJCSAgIHRvIHNsb3cgdGhlIGRtYSB0cmFuc2ZlciBkb3duICovCisJCWNvbWVkaV91ZGVsYXkoMTApOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZG1hIGxvYWQiKTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvL1BDSURNQQorc3RhdGljIHZvaWQgbmlfaGFuZGxlX2VvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmIChkZXZwcml2LT5haW1vZGUgPT0gQUlNT0RFX1NDQU4pIHsKKyNpZmRlZiBQQ0lETUEKKwkJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTA7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCW5pX3N5bmNfYWlfZG1hKGRldik7CisJCQlpZiAoKHMtPmFzeW5jLT5ldmVudHMgJiBDT01FRElfQ0JfRU9TKSkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKyNlbHNlCisJCW5pX2hhbmRsZV9maWZvX2RyZWdzKGRldik7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKyNlbmRpZgorCX0KKwkvKiBoYW5kbGUgc3BlY2lhbCBjYXNlIG9mIHNpbmdsZSBzY2FuIHVzaW5nIEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbiAqLworCWlmICgoZGV2cHJpdi0+YWlfY21kMiAmIEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbikpIHsKKwkJc2h1dGRvd25fYWlfY29tbWFuZChkZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgc2h1dGRvd25fYWlfY29tbWFuZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKworI2lmZGVmIFBDSURNQQorCW5pX2FpX2RyYWluX2RtYShkZXYpOworI2VuZGlmCisJbmlfaGFuZGxlX2ZpZm9fZHJlZ3MoZGV2KTsKKwlnZXRfbGFzdF9zYW1wbGVfNjExeChkZXYpOworCWdldF9sYXN0X3NhbXBsZV82MTQzKGRldik7CisKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2V2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKHMtPmFzeW5jLT4KKwkJZXZlbnRzICYgKENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FT0EpKQorCXsKKwkJc3dpdGNoIChzIC0gZGV2LT5zdWJkZXZpY2VzKSB7CisJCWNhc2UgTklfQUlfU1VCREVWOgorCQkJbmlfYWlfcmVzZXQoZGV2LCBzKTsKKwkJCWJyZWFrOworCQljYXNlIE5JX0FPX1NVQkRFVjoKKwkJCW5pX2FvX3Jlc2V0KGRldiwgcyk7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUMF9TVUJERVY6CisJCWNhc2UgTklfR1BDVDFfU1VCREVWOgorCQkJbmlfZ3BjdF9jYW5jZWwoZGV2LCBzKTsKKwkJCWJyZWFrOworCQljYXNlIE5JX0RJT19TVUJERVY6CisJCQluaV9jZGlvX2NhbmNlbChkZXYsIHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2dwY3RfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIHNob3J0IGNvdW50ZXJfaW5kZXgpCit7CisjaWZkZWYgUENJRE1BCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9HUENUX1NVQkRFVihjb3VudGVyX2luZGV4KTsKKworCW5pX3Rpb19oYW5kbGVfaW50ZXJydXB0KCZkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbY291bnRlcl9pbmRleF0sCisJCXMpOworCWlmIChzLT5hc3luYy0+ZXZlbnRzKQorCQluaV9ldmVudChkZXYsIHMpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFja19hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgYV9zdGF0dXMpCit7CisJdW5zaWduZWQgc2hvcnQgYWNrID0gMDsKKworCWlmIChhX3N0YXR1cyAmIEFJX1NDX1RDX1N0KSB7CisJCWFjayB8PSBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYV9zdGF0dXMgJiBBSV9TVEFSVDFfU3QpIHsKKwkJYWNrIHw9IEFJX1NUQVJUMV9JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYV9zdGF0dXMgJiBBSV9TVEFSVF9TdCkgeworCQlhY2sgfD0gQUlfU1RBUlRfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGFfc3RhdHVzICYgQUlfU1RPUF9TdCkgeworCQkvKiBub3Qgc3VyZSB3aHkgd2UgdXNlZCB0byBhY2sgdGhlIFNUQVJUIGhlcmUgYWxzbywgaW5zdGVhZCBvZiBkb2luZyBpdCBpbmRlcGVuZGVudGx5LiBGcmFuayBIZXNzIDIwMDctMDctMDYgKi8KKwkJYWNrIHw9IEFJX1NUT1BfSW50ZXJydXB0X0FjayAvKnwgQUlfU1RBUlRfSW50ZXJydXB0X0FjayAqLyA7CisJfQorCWlmIChhY2spCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBhY2ssIEludGVycnVwdF9BX0Fja19SZWdpc3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGFpX21pdGVfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCisJLy82N3h4IGJvYXJkcyBkb24ndCBoYXZlIGFpIHN1YmRldmljZSwgYnV0IHRoZWlyIGdwY3QwIG1pZ2h0IGdlbmVyYXRlIGFuIGEgaW50ZXJydXB0CisJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfVU5VU0VEKQorCQlyZXR1cm47CisKKyNpZmRlZiBERUJVR19JTlRFUlJVUFQKKwlydF9wcmludGsKKwkJKCJuaV9taW9fY29tbW9uOiBpbnRlcnJ1cHQ6IGFfc3RhdHVzPSUwNHggYWlfbWl0ZV9zdGF0dXM9JTA4eFxuIiwKKwkJc3RhdHVzLCBhaV9taXRlX3N0YXR1cyk7CisJbmlfbWlvX3ByaW50X3N0YXR1c19hKHN0YXR1cyk7CisjZW5kaWYKKyNpZmRlZiBQQ0lETUEKKwlpZiAoYWlfbWl0ZV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CisJCW5pX3N5bmNfYWlfZG1hKGRldik7CisJfQorCisJaWYgKGFpX21pdGVfc3RhdHVzICYgfihDSFNSX0lOVCB8IENIU1JfTElOS0MgfCBDSFNSX0RPTkUgfCBDSFNSX01SRFkgfAorCQkJQ0hTUl9EUkRZIHwgQ0hTUl9EUlExIHwgQ0hTUl9EUlEwIHwgQ0hTUl9FUlJPUiB8CisJCQlDSFNSX1NBQk9SVCB8IENIU1JfWEZFUlIgfCBDSFNSX0x4RVJSX21hc2spKSB7CisJCXJ0X3ByaW50aworCQkJKCJ1bmtub3duIG1pdGUgaW50ZXJydXB0LCBhY2shIChhaV9taXRlX3N0YXR1cz0lMDh4KVxuIiwKKwkJCWFpX21pdGVfc3RhdHVzKTsKKwkJLy9taXRlX3ByaW50X2Noc3IoYWlfbWl0ZV9zdGF0dXMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCS8vZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCX0KKyNlbmRpZgorCisJLyogdGVzdCBmb3IgYWxsIHVuY29tbW9uIGludGVycnVwdCBldmVudHMgYXQgdGhlIHNhbWUgdGltZSAqLworCWlmIChzdGF0dXMgJiAoQUlfT3ZlcnJ1bl9TdCB8IEFJX092ZXJmbG93X1N0IHwgQUlfU0NfVENfRXJyb3JfU3QgfAorCQkJQUlfU0NfVENfU3QgfCBBSV9TVEFSVDFfU3QpKSB7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKSB7CisJCQlydF9wcmludGsKKwkJCQkoIm5pX21pb19jb21tb246IGFfc3RhdHVzPTB4ZmZmZi4gIENhcmQgcmVtb3ZlZD9cbiIpOworCQkJLyogd2UgcHJvYmFibHkgYXJlbid0IGV2ZW4gcnVubmluZyBhIGNvbW1hbmQgbm93LAorCQkJICogc28gaXQncyBhIGdvb2QgaWRlYSB0byBiZSBjYXJlZnVsLiAqLworCQkJaWYgKGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHMpICYgU1JGX1JVTk5JTkcpIHsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCUNPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCQkJbmlfZXZlbnQoZGV2LCBzKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCQlpZiAoc3RhdHVzICYgKEFJX092ZXJydW5fU3QgfCBBSV9PdmVyZmxvd19TdCB8CisJCQkJQUlfU0NfVENfRXJyb3JfU3QpKSB7CisJCQlydF9wcmludGsoIm5pX21pb19jb21tb246IGFpIGVycm9yIGFfc3RhdHVzPSUwNHhcbiIsCisJCQkJc3RhdHVzKTsKKwkJCW5pX21pb19wcmludF9zdGF0dXNfYShzdGF0dXMpOworCisJCQlzaHV0ZG93bl9haV9jb21tYW5kKGRldik7CisKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJaWYgKHN0YXR1cyAmIChBSV9PdmVycnVuX1N0IHwgQUlfT3ZlcmZsb3dfU3QpKQorCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCisJCQluaV9ldmVudChkZXYsIHMpOworCisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXR1cyAmIEFJX1NDX1RDX1N0KSB7CisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJCQlydF9wcmludGsoIm5pX21pb19jb21tb246IFNDX1RDIGludGVycnVwdFxuIik7CisjZW5kaWYKKwkJCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cykgeworCQkJCXNodXRkb3duX2FpX2NvbW1hbmQoZGV2KTsKKwkJCX0KKwkJfQorCX0KKyNpZm5kZWYgUENJRE1BCisJaWYgKHN0YXR1cyAmIEFJX0ZJRk9fSGFsZl9GdWxsX1N0KSB7CisJCWludCBpOworCQlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDsKKwkJLyogcGNtY2lhIGNhcmRzIChhdCBsZWFzdCA2MDM2KSBzZWVtIHRvIHN0b3AgcHJvZHVjaW5nIGludGVycnVwdHMgaWYgd2UKKwkJICpmYWlsIHRvIGdldCB0aGUgZmlmbyBsZXNzIHRoYW4gaGFsZiBmdWxsLCBzbyBsb29wIHRvIGJlIHN1cmUuKi8KKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7ICsraSkgeworCQkJbmlfaGFuZGxlX2ZpZm9faGFsZl9mdWxsKGRldik7CisJCQlpZiAoKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQlBSV9GSUZPX0hhbGZfRnVsbF9TdCkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZiAvLyAhUENJRE1BCisKKwlpZiAoKHN0YXR1cyAmIEFJX1NUT1BfU3QpKSB7CisJCW5pX2hhbmRsZV9lb3MoZGV2LCBzKTsKKwl9CisKKwluaV9ldmVudChkZXYsIHMpOworCisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJc3RhdHVzID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgQUlfU3RhdHVzXzFfUmVnaXN0ZXIpOworCWlmIChzdGF0dXMgJiBJbnRlcnJ1cHRfQV9TdCkgeworCQlydF9wcmludGsKKwkJCSgiaGFuZGxlX2FfaW50ZXJydXB0OiBkaWRuJ3QgY2xlYXIgaW50ZXJydXB0PyBzdGF0dXM9MHgleFxuIiwKKwkJCXN0YXR1cyk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFja19iX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgYl9zdGF0dXMpCit7CisJdW5zaWduZWQgc2hvcnQgYWNrID0gMDsKKwlpZiAoYl9zdGF0dXMgJiBBT19CQ19UQ19TdCkgeworCQlhY2sgfD0gQU9fQkNfVENfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGJfc3RhdHVzICYgQU9fT3ZlcnJ1bl9TdCkgeworCQlhY2sgfD0gQU9fRXJyb3JfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGJfc3RhdHVzICYgQU9fU1RBUlRfU3QpIHsKKwkJYWNrIHw9IEFPX1NUQVJUX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChiX3N0YXR1cyAmIEFPX1NUQVJUMV9TdCkgeworCQlhY2sgfD0gQU9fU1RBUlQxX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChiX3N0YXR1cyAmIEFPX1VDX1RDX1N0KSB7CisJCWFjayB8PSBBT19VQ19UQ19JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYl9zdGF0dXMgJiBBT19VSTJfVENfU3QpIHsKKwkJYWNrIHw9IEFPX1VJMl9UQ19JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYl9zdGF0dXMgJiBBT19VUERBVEVfU3QpIHsKKwkJYWNrIHw9IEFPX1VQREFURV9JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYWNrKQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYWNrLCBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYl9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGJfc3RhdHVzLAorCXVuc2lnbmVkIGFvX21pdGVfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCS8vdW5zaWduZWQgc2hvcnQgYWNrPTA7CisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJcnRfcHJpbnRrKCJuaV9taW9fY29tbW9uOiBpbnRlcnJ1cHQ6IGJfc3RhdHVzPSUwNHggbTFfc3RhdHVzPSUwOHhcbiIsCisJCWJfc3RhdHVzLCBhb19taXRlX3N0YXR1cyk7CisJbmlfbWlvX3ByaW50X3N0YXR1c19iKGJfc3RhdHVzKTsKKyNlbmRpZgorCisjaWZkZWYgUENJRE1BCisJLyogQ3VycmVudGx5LCBtaXRlLmMgcmVxdWlyZXMgdXMgdG8gaGFuZGxlIExJTktDICovCisJaWYgKGFvX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQltaXRlX2hhbmRsZV9iX2xpbmtjKGRldnByaXYtPm1pdGUsIGRldik7CisJfQorCisJaWYgKGFvX21pdGVfc3RhdHVzICYgfihDSFNSX0lOVCB8IENIU1JfTElOS0MgfCBDSFNSX0RPTkUgfCBDSFNSX01SRFkgfAorCQkJQ0hTUl9EUkRZIHwgQ0hTUl9EUlExIHwgQ0hTUl9EUlEwIHwgQ0hTUl9FUlJPUiB8CisJCQlDSFNSX1NBQk9SVCB8IENIU1JfWEZFUlIgfCBDSFNSX0x4RVJSX21hc2spKSB7CisJCXJ0X3ByaW50aworCQkJKCJ1bmtub3duIG1pdGUgaW50ZXJydXB0LCBhY2shIChhb19taXRlX3N0YXR1cz0lMDh4KVxuIiwKKwkJCWFvX21pdGVfc3RhdHVzKTsKKwkJLy9taXRlX3ByaW50X2Noc3IoYW9fbWl0ZV9zdGF0dXMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJfQorI2VuZGlmCisKKwlpZiAoYl9zdGF0dXMgPT0gMHhmZmZmKQorCQlyZXR1cm47CisJaWYgKGJfc3RhdHVzICYgQU9fT3ZlcnJ1bl9TdCkgeworCQlydF9wcmludGsKKwkJCSgibmlfbWlvX2NvbW1vbjogQU8gRklGTyB1bmRlcnJ1biBzdGF0dXM9MHglMDR4IHN0YXR1czI9MHglMDR4XG4iLAorCQkJYl9zdGF0dXMsIGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJQU9fU3RhdHVzXzJfUmVnaXN0ZXIpKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJfQorCisJaWYgKGJfc3RhdHVzICYgQU9fQkNfVENfU3QpIHsKKwkJTURQUklOVEsoIm5pX21pb19jb21tb246IEFPIEJDX1RDIHN0YXR1cz0weCUwNHggc3RhdHVzMj0weCUwNHhcbiIsIGJfc3RhdHVzLCBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBT19TdGF0dXNfMl9SZWdpc3RlcikpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorI2lmbmRlZiBQQ0lETUEKKwlpZiAoYl9zdGF0dXMgJiBBT19GSUZPX1JlcXVlc3RfU3QpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBuaV9hb19maWZvX2hhbGZfZW1wdHkoZGV2LCBzKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXJ0X3ByaW50aygibmlfbWlvX2NvbW1vbjogQU8gYnVmZmVyIHVuZGVycnVuXG4iKTsKKwkJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJCUFPX0ZJRk9fSW50ZXJydXB0X0VuYWJsZSB8CisJCQkJQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZSwgMCk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJfQorCX0KKyNlbmRpZgorCisJbmlfZXZlbnQoZGV2LCBzKTsKK30KKworI2lmZGVmIERFQlVHX1NUQVRVU19BCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhdHVzX2Ffc3RyaW5nc1tdID0geworCSJwYXNzdGhydTAiLCAiZmlmbyIsICJHMF9nYXRlIiwgIkcwX1RDIiwKKwkic3RvcCIsICJzdGFydCIsICJzY190YyIsICJzdGFydDEiLAorCSJzdGFydDIiLCAic2NfdGNfZXJyb3IiLCAib3ZlcmZsb3ciLCAib3ZlcnJ1biIsCisJImZpZm9fZW1wdHkiLCAiZmlmb19oYWxmX2Z1bGwiLCAiZmlmb19mdWxsIiwgImludGVycnVwdF9hIgorfTsKKworc3RhdGljIHZvaWQgbmlfbWlvX3ByaW50X3N0YXR1c19hKGludCBzdGF0dXMpCit7CisJaW50IGk7CisKKwlydF9wcmludGsoIkEgc3RhdHVzOiIpOworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCXJ0X3ByaW50aygiICVzIiwgc3RhdHVzX2Ffc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcnRfcHJpbnRrKCJcbiIpOworfQorI2VuZGlmCisKKyNpZmRlZiBERUJVR19TVEFUVVNfQgorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YXR1c19iX3N0cmluZ3NbXSA9IHsKKwkicGFzc3RocnUxIiwgImZpZm8iLCAiRzFfZ2F0ZSIsICJHMV9UQyIsCisJIlVJMl9UQyIsICJVUERBVEUiLCAiVUNfVEMiLCAiQkNfVEMiLAorCSJzdGFydDEiLCAib3ZlcnJ1biIsICJzdGFydCIsICJiY190Y19lcnJvciIsCisJImZpZm9fZW1wdHkiLCAiZmlmb19oYWxmX2Z1bGwiLCAiZmlmb19mdWxsIiwgImludGVycnVwdF9iIgorfTsKKworc3RhdGljIHZvaWQgbmlfbWlvX3ByaW50X3N0YXR1c19iKGludCBzdGF0dXMpCit7CisJaW50IGk7CisKKwlydF9wcmludGsoIkIgc3RhdHVzOiIpOworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCXJ0X3ByaW50aygiICVzIiwgc3RhdHVzX2Jfc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcnRfcHJpbnRrKCJcbiIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgUENJRE1BCisKK3N0YXRpYyB2b2lkIG5pX2FvX2ZpZm9fbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgbikKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlpbnQgY2hhbjsKKwlpbnQgaTsKKwlzaG9ydCBkOworCXUzMiBwYWNrZWRfZGF0YTsKKwlpbnQgcmFuZ2U7CisJaW50IGVyciA9IDE7CisKKwljaGFuID0gYXN5bmMtPmN1cl9jaGFuOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZXJyICY9IGNvbWVkaV9idWZfZ2V0KGFzeW5jLCAmZCk7CisJCWlmIChlcnIgPT0gMCkKKwkJCWJyZWFrOworCisJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtjaGFuXSk7CisKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJCXBhY2tlZF9kYXRhID0gZCAmIDB4ZmZmZjsKKwkJCS8qIDY3MTEgb25seSBoYXMgMTYgYml0IHdpZGUgYW8gZmlmbyAqLworCQkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjcxMSkgeworCQkJCWVyciAmPSBjb21lZGlfYnVmX2dldChhc3luYywgJmQpOworCQkJCWlmIChlcnIgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQkJY2hhbisrOworCQkJCWkrKzsKKwkJCQlwYWNrZWRfZGF0YSB8PSAoZCA8PCAxNikgJiAweGZmZmYwMDAwOworCQkJfQorCQkJbmlfd3JpdGVsKHBhY2tlZF9kYXRhLCBEQUNfRklGT19EYXRhXzYxMXgpOworCQl9IGVsc2UgeworCQkJbmlfd3JpdGV3KGQsIERBQ19GSUZPX0RhdGEpOworCQl9CisJCWNoYW4rKzsKKwkJY2hhbiAlPSBjbWQtPmNoYW5saXN0X2xlbjsKKwl9CisJYXN5bmMtPmN1cl9jaGFuID0gY2hhbjsKKwlpZiAoZXJyID09IDApIHsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJfQorfQorCisvKgorICogIFRoZXJlJ3MgYSBzbWFsbCBwcm9ibGVtIGlmIHRoZSBGSUZPIGdldHMgcmVhbGx5IGxvdyBhbmQgd2UKKyAqICBkb24ndCBoYXZlIHRoZSBkYXRhIHRvIGZpbGwgaXQuICBCYXNpY2FsbHksIGlmIGFmdGVyIHdlIGZpbGwKKyAqICB0aGUgRklGTyB3aXRoIGFsbCB0aGUgZGF0YSBhdmFpbGFibGUsIHRoZSBGSUZPIGlzIF9zdGlsbF8KKyAqICBsZXNzIHRoYW4gaGFsZiBmdWxsLCB3ZSBuZXZlciBjbGVhciB0aGUgaW50ZXJydXB0LiAgSWYgdGhlCisgKiAgSVJRIGlzIGluIGVkZ2UgbW9kZSwgd2UgbmV2ZXIgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBiZWNhdXNlCisgKiAgdGhpcyBvbmUgd2Fzbid0IGNsZWFyZWQuICBJZiBpbiBsZXZlbCBtb2RlLCB3ZSBnZXQgZmxvb2RlZAorICogIHdpdGggaW50ZXJydXB0cyB0aGF0IHdlIGNhbid0IGZ1bGZpbGwsIGJlY2F1c2Ugbm90aGluZyBldmVyCisgKiAgZ2V0cyBwdXQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqICBUaGlzIGtpbmQgb2Ygc2l0dWF0aW9uIGlzIHJlY292ZXJhYmxlLCBidXQgaXQgaXMgZWFzaWVyIHRvCisgKiAganVzdCBwcmV0ZW5kIHdlIGhhZCBhIEZJRk8gdW5kZXJydW4sIHNpbmNlIHRoZXJlIGlzIGEgZ29vZAorICogIGNoYW5jZSBpdCB3aWxsIGhhcHBlbiBhbnl3YXkuICBUaGlzIGlzIF9ub3RfIHRoZSBjYXNlIGZvcgorICogIFJUIGNvZGUsIGFzIFJUIGNvZGUgbWlnaHQgcHVycG9zZWx5IGJlIHJ1bm5pbmcgY2xvc2UgdG8gdGhlCisgKiAgbWV0YWwuICBOZWVkcyB0byBiZSBmaXhlZCBldmVudHVhbGx5LgorICovCitzdGF0aWMgaW50IG5pX2FvX2ZpZm9faGFsZl9lbXB0eShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBuOworCisJbiA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzLT5hc3luYyk7CisJaWYgKG4gPT0gMCkgeworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJcmV0dXJuIDA7CisJfQorCisJbiAvPSBzaXplb2Yoc2hvcnQpOworCWlmIChuID4gYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGggLyAyKQorCQluID0gYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGggLyAyOworCisJbmlfYW9fZmlmb19sb2FkKGRldiwgcywgbik7CisKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2FvX3ByZXBfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBuOworCisJLyogcmVzZXQgZmlmbyAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAxLCBEQUNfRklGT19DbGVhcik7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spCisJCW5pX2FvX3dpbl9vdXRsKGRldiwgMHg2LCBBT19GSUZPX09mZnNldF9Mb2FkXzYxMXgpOworCisJLyogbG9hZCBzb21lIGRhdGEgKi8KKwluID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHMtPmFzeW5jKTsKKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gMDsKKworCW4gLz0gc2l6ZW9mKHNob3J0KTsKKwlpZiAobiA+IGJvYXJkdHlwZS5hb19maWZvX2RlcHRoKQorCQluID0gYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGg7CisKKwluaV9hb19maWZvX2xvYWQoZGV2LCBzLCBuKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgdm9pZCBuaV9haV9maWZvX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgaW50IG4pCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlpbnQgaTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpIHsKKwkJc2hvcnQgZGF0YVsyXTsKKwkJdTMyIGRsOworCisJCWZvciAoaSA9IDA7IGkgPCBuIC8gMjsgaSsrKSB7CisJCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisJCQkvKiBUaGlzIG1heSBnZXQgdGhlIGhpL2xvIGRhdGEgaW4gdGhlIHdyb25nIG9yZGVyICovCisJCQlkYXRhWzBdID0gKGRsID4+IDE2KSAmIDB4ZmZmZjsKKwkJCWRhdGFbMV0gPSBkbCAmIDB4ZmZmZjsKKwkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJfQorCQkvKiBDaGVjayBpZiB0aGVyZSdzIGEgc2luZ2xlIHNhbXBsZSBzdHVjayBpbiB0aGUgRklGTyAqLworCQlpZiAobiAlIDIpIHsKKwkJCWRsID0gbmlfcmVhZGwoQURDX0ZJRk9fRGF0YV82MTF4KTsKKwkJCWRhdGFbMF0gPSBkbCAmIDB4ZmZmZjsKKwkJCWNmY193cml0ZV90b19idWZmZXIocywgZGF0YVswXSk7CisJCX0KKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlzaG9ydCBkYXRhWzJdOworCQl1MzIgZGw7CisKKwkJLy8gVGhpcyBqdXN0IHJlYWRzIHRoZSBGSUZPIGFzc3VtaW5nIHRoZSBkYXRhIGlzIHByZXNlbnQsIG5vIGNoZWNrcyBvbiB0aGUgRklGTyBzdGF0dXMgYXJlIHBlcmZvcm1lZAorCQlmb3IgKGkgPSAwOyBpIDwgbiAvIDI7IGkrKykgeworCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKworCQkJZGF0YVswXSA9IChkbCA+PiAxNikgJiAweGZmZmY7CisJCQlkYXRhWzFdID0gZGwgJiAweGZmZmY7CisJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJCX0KKwkJaWYgKG4gJSAyKSB7CisJCQkvKiBBc3N1bWUgdGhlcmUgaXMgYSBzaW5nbGUgc2FtcGxlIHN0dWNrIGluIHRoZSBGSUZPICovCisJCQluaV93cml0ZWwoMHgwMSwgQUlGSUZPX0NvbnRyb2xfNjE0Myk7CS8vIEdldCBzdHJhbmRlZCBzYW1wbGUgaW50byBGSUZPCisJCQlkbCA9IG5pX3JlYWRsKEFJRklGT19EYXRhXzYxNDMpOworCQkJZGF0YVswXSA9IChkbCA+PiAxNikgJiAweGZmZmY7CisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGFbMF0pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG4gPiBzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXIpIC8KKwkJCXNpemVvZihkZXZwcml2LT5haV9maWZvX2J1ZmZlclswXSkpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGFpX2ZpZm9fYnVmZmVyIHRvbyBzbWFsbCIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbaV0gPQorCQkJCW5pX3JlYWR3KEFEQ19GSUZPX0RhdGFfUmVnaXN0ZXIpOworCQl9CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfZmlmb19idWZmZXIsCisJCQluICogc2l6ZW9mKGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyWzBdKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBuaV9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IG47CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisKKwluID0gYm9hcmR0eXBlLmFpX2ZpZm9fZGVwdGggLyAyOworCisJbmlfYWlfZmlmb19yZWFkKGRldiwgcywgbik7Cit9CisjZW5kaWYKKworI2lmZGVmIFBDSURNQQorc3RhdGljIGludCBuaV9haV9kcmFpbl9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmICgoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJCUFJX1N0YXR1c18xX1JlZ2lzdGVyKSAmCisJCQkJCUFJX0ZJRk9fRW1wdHlfU3QpCisJCQkJJiYgbWl0ZV9ieXRlc19pbl90cmFuc2l0KGRldnByaXYtPgorCQkJCQlhaV9taXRlX2NoYW4pID09IDApCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDUpOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCXJ0X3ByaW50aworCQkJCSgibmlfbWlvX2NvbW1vbjogd2FpdCBmb3IgZG1hIGRyYWluIHRpbWVkIG91dFxuIik7CisJCQlydF9wcmludGsKKwkJCQkoIm1pdGVfYnl0ZXNfaW5fdHJhbnNpdD0laSwgQUlfU3RhdHVzMV9SZWdpc3Rlcj0weCV4XG4iLAorCQkJCW1pdGVfYnl0ZXNfaW5fdHJhbnNpdChkZXZwcml2LT5haV9taXRlX2NoYW4pLAorCQkJCWRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEFJX1N0YXR1c18xX1JlZ2lzdGVyKSk7CisJCQlyZXR2YWwgPSAtMTsKKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKworCW5pX3N5bmNfYWlfZG1hKGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorI2VuZGlmCisvKgorICAgRW1wdGllcyB0aGUgQUkgZmlmbworKi8KK3N0YXRpYyB2b2lkIG5pX2hhbmRsZV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCXNob3J0IGRhdGFbMl07CisJdTMyIGRsOworCXNob3J0IGZpZm9fZW1wdHk7CisJaW50IGk7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCXdoaWxlICgoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQlBSV9GSUZPX0VtcHR5X1N0KSA9PSAwKSB7CisJCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisKKwkJCS8qIFRoaXMgbWF5IGdldCB0aGUgaGkvbG8gZGF0YSBpbiB0aGUgd3Jvbmcgb3JkZXIgKi8KKwkJCWRhdGFbMF0gPSAoZGwgPj4gMTYpOworCQkJZGF0YVsxXSA9IChkbCAmIDB4ZmZmZik7CisJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJCX0KKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlpID0gMDsKKwkJd2hpbGUgKG5pX3JlYWRsKEFJRklGT19TdGF0dXNfNjE0MykgJiAweDA0KSB7CisJCQlkbCA9IG5pX3JlYWRsKEFJRklGT19EYXRhXzYxNDMpOworCisJCQkvKiBUaGlzIG1heSBnZXQgdGhlIGhpL2xvIGRhdGEgaW4gdGhlIHdyb25nIG9yZGVyICovCisJCQlkYXRhWzBdID0gKGRsID4+IDE2KTsKKwkJCWRhdGFbMV0gPSAoZGwgJiAweGZmZmYpOworCQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQkJaSArPSAyOworCQl9CisJCS8vIENoZWNrIGlmIHN0cmFuZGVkIHNhbXBsZSBpcyBwcmVzZW50CisJCWlmIChuaV9yZWFkbChBSUZJRk9fU3RhdHVzXzYxNDMpICYgMHgwMSkgeworCQkJbmlfd3JpdGVsKDB4MDEsIEFJRklGT19Db250cm9sXzYxNDMpOwkvLyBHZXQgc3RyYW5kZWQgc2FtcGxlIGludG8gRklGTworCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKwkJCWRhdGFbMF0gPSAoZGwgPj4gMTYpICYgMHhmZmZmOworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhWzBdKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJZmlmb19lbXB0eSA9CisJCQlkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYgQUlfRklGT19FbXB0eV9TdDsKKwkJd2hpbGUgKGZpZm9fZW1wdHkgPT0gMCkgeworCQkJZm9yIChpID0gMDsKKwkJCQlpIDwKKwkJCQlzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXIpIC8KKwkJCQlzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbMF0pOyBpKyspIHsKKwkJCQlmaWZvX2VtcHR5ID0KKwkJCQkJZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQkJQUlfRklGT19FbXB0eV9TdDsKKwkJCQlpZiAoZmlmb19lbXB0eSkKKwkJCQkJYnJlYWs7CisJCQkJZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbaV0gPQorCQkJCQluaV9yZWFkdyhBRENfRklGT19EYXRhX1JlZ2lzdGVyKTsKKwkJCX0KKwkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfZmlmb19idWZmZXIsCisJCQkJaSAqIHNpemVvZihkZXZwcml2LT5haV9maWZvX2J1ZmZlclswXSkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfbGFzdF9zYW1wbGVfNjExeChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwlzaG9ydCBkYXRhOworCXUzMiBkbDsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCXJldHVybjsKKworCS8qIENoZWNrIGlmIHRoZXJlJ3MgYSBzaW5nbGUgc2FtcGxlIHN0dWNrIGluIHRoZSBGSUZPICovCisJaWYgKG5pX3JlYWRiKFhYWF9TdGF0dXMpICYgMHg4MCkgeworCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisJCWRhdGEgPSAoZGwgJiAweGZmZmYpOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxNDMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisJc2hvcnQgZGF0YTsKKwl1MzIgZGw7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiB0aGVyZSdzIGEgc2luZ2xlIHNhbXBsZSBzdHVjayBpbiB0aGUgRklGTyAqLworCWlmIChuaV9yZWFkbChBSUZJRk9fU3RhdHVzXzYxNDMpICYgMHgwMSkgeworCQluaV93cml0ZWwoMHgwMSwgQUlGSUZPX0NvbnRyb2xfNjE0Myk7CS8vIEdldCBzdHJhbmRlZCBzYW1wbGUgaW50byBGSUZPCisJCWRsID0gbmlfcmVhZGwoQUlGSUZPX0RhdGFfNjE0Myk7CisKKwkJLyogVGhpcyBtYXkgZ2V0IHRoZSBoaS9sbyBkYXRhIGluIHRoZSB3cm9uZyBvcmRlciAqLworCQlkYXRhID0gKGRsID4+IDE2KSAmIDB4ZmZmZjsKKwkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5pX2FpX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IGNoYW5faW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtX2J5dGVzIC8gYnl0ZXNfcGVyX3NhbXBsZShzKTsKKwlzaG9ydCAqYXJyYXkgPSBkYXRhOworCXVuc2lnbmVkIGludCAqbGFycmF5ID0gZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyNpZmRlZiBQQ0lETUEKKwkJaWYgKHMtPnN1YmRldl9mbGFncyAmIFNERl9MU0FNUEwpCisJCQlsYXJyYXlbaV0gPSBsZTMyX3RvX2NwdShsYXJyYXlbaV0pOworCQllbHNlCisJCQlhcnJheVtpXSA9IGxlMTZfdG9fY3B1KGFycmF5W2ldKTsKKyNlbmRpZgorCQlpZiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0xTQU1QTCkKKwkJCWxhcnJheVtpXSArPSBkZXZwcml2LT5haV9vZmZzZXRbY2hhbl9pbmRleF07CisJCWVsc2UKKwkJCWFycmF5W2ldICs9IGRldnByaXYtPmFpX29mZnNldFtjaGFuX2luZGV4XTsKKwkJY2hhbl9pbmRleCsrOworCQljaGFuX2luZGV4ICU9IGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCX0KK30KKworI2lmZGVmIFBDSURNQQorCitzdGF0aWMgaW50IG5pX2FpX3NldHVwX01JVEVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJldHZhbCA9IG5pX3JlcXVlc3RfYWlfbWl0ZV9jaGFubmVsKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKy8vICAgICAgcnRfcHJpbnRrKCJjb21lZGlfZGVidWc6IHVzaW5nIG1pdGUgY2hhbm5lbCAlaSBmb3IgYWkuXG4iLCBkZXZwcml2LT5haV9taXRlX2NoYW4tPmNoYW5uZWwpOworCisJLyogd3JpdGUgYWxsb2MgdGhlIGVudGlyZSBidWZmZXIgKi8KKwljb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmKGRldnByaXYtPmFpX21pdGVfY2hhbiA9PSBOVUxMKQorCXsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXN3aXRjaCAoYm9hcmR0eXBlLnJlZ190eXBlKSB7CisJY2FzZSBuaV9yZWdfNjExeDoKKwljYXNlIG5pX3JlZ182MTQzOgorCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmFpX21pdGVfY2hhbiwgMzIsIDE2KTsKKwkJYnJlYWs7CisJY2FzZSBuaV9yZWdfNjI4eDoKKwkJbWl0ZV9wcmVwX2RtYShkZXZwcml2LT5haV9taXRlX2NoYW4sIDMyLCAzMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLCAxNiwgMTYpOworCQlicmVhazsKKwl9OworCS8qc3RhcnQgdGhlIE1JVEUgKi8KKwltaXRlX2RtYV9hcm0oZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FvX3NldHVwX01JVEVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJldHZhbCA9IG5pX3JlcXVlc3RfYW9fbWl0ZV9jaGFubmVsKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIHJlYWQgYWxsb2MgdGhlIGVudGlyZSBidWZmZXIgKi8KKwljb21lZGlfYnVmX3JlYWRfYWxsb2Mocy0+YXN5bmMsIHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeik7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFvX21pdGVfY2hhbikgeworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgKG5pX3JlZ182MTF4IHwgbmlfcmVnXzY3MTMpKSB7CisJCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmFvX21pdGVfY2hhbiwgMzIsIDMyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRvaW5nIDMyIGluc3RlYWQgb2YgMTYgYml0IHdpZGUgdHJhbnNmZXJzIGZyb20gbWVtb3J5CisJCQkgICBtYWtlcyB0aGUgbWl0ZSBkbyAzMiBiaXQgcGNpIHRyYW5zZmVycywgZG91YmxpbmcgcGNpIGJhbmR3aWR0aC4gKi8KKwkJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuLCAxNiwgMzIpOworCQl9CisJCW1pdGVfZG1hX2FybShkZXZwcml2LT5hb19taXRlX2NoYW4pOworCX0gZWxzZQorCQlyZXR2YWwgPSAtRUlPOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8vIFBDSURNQQorCisvKgorICAgdXNlZCBmb3IgYm90aCBjYW5jZWwgaW9jdGwgYW5kIGJvYXJkIGluaXRpYWxpemF0aW9uCisKKyAgIHRoaXMgaXMgcHJldHR5IGhhcnNoIGZvciBhIGNhbmNlbCwgYnV0IGl0IHdvcmtzLi4uCisgKi8KKworc3RhdGljIGludCBuaV9haV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCW5pX3JlbGVhc2VfYWlfbWl0ZV9jaGFubmVsKGRldik7CisJLyogYWkgY29uZmlndXJhdGlvbiAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9Db25maWd1cmF0aW9uX1N0YXJ0IHwgQUlfUmVzZXQsCisJCUpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQlBSV9TQ19UQ19JbnRlcnJ1cHRfRW5hYmxlIHwgQUlfU1RBUlQxX0ludGVycnVwdF9FbmFibGUgfAorCQlBSV9TVEFSVDJfSW50ZXJydXB0X0VuYWJsZSB8IEFJX1NUQVJUX0ludGVycnVwdF9FbmFibGUgfAorCQlBSV9TVE9QX0ludGVycnVwdF9FbmFibGUgfCBBSV9FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlIHwKKwkJQUlfRklGT19JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKworCW5pX2NsZWFyX2FpX2ZpZm8oZGV2KTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpCisJCW5pX3dyaXRlYigwLCBNaXNjX0NvbW1hbmQpOworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0Rpc2FybSwgQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsJLyogcmVzZXQgcHVsc2VzICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsCisJCUFJX1N0YXJ0X1N0b3AgfCBBSV9Nb2RlXzFfUmVzZXJ2ZWQgLyp8IEFJX1RyaWdnZXJfT25jZSAqLyAsCisJCUFJX01vZGVfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDB4MDAwMCwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKwkvKiBnZW5lcmF0ZSBGSUZPIGludGVycnVwdHMgb24gbm9uLWVtcHR5ICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsICgwIDw8IDYpIHwgMHgwMDAwLCBBSV9Nb2RlXzNfUmVnaXN0ZXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpIHsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NISUZUSU5fUHVsc2VfV2lkdGggfAorCQkJQUlfU09DX1BvbGFyaXR5IHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19QdWxzZV9XaWR0aCwgQUlfUGVyc29uYWxfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0NBTl9JTl9QUk9HX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfRVhUTVVYX0NMS19PdXRwdXRfU2VsZWN0KDApIHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19PdXRwdXRfU2VsZWN0KDIpIHwKKwkJCUFJX1NDX1RDX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfQ09OVkVSVF9PdXRwdXRfU2VsZWN0KEFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9IaWdoKSwKKwkJCUFJX091dHB1dF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0hJRlRJTl9QdWxzZV9XaWR0aCB8CisJCQlBSV9TT0NfUG9sYXJpdHkgfAorCQkJQUlfTE9DQUxNVVhfQ0xLX1B1bHNlX1dpZHRoLCBBSV9QZXJzb25hbF9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ0FOX0lOX1BST0dfT3V0cHV0X1NlbGVjdCgzKSB8CisJCQlBSV9FWFRNVVhfQ0xLX091dHB1dF9TZWxlY3QoMCkgfAorCQkJQUlfTE9DQUxNVVhfQ0xLX091dHB1dF9TZWxlY3QoMikgfAorCQkJQUlfU0NfVENfT3V0cHV0X1NlbGVjdCgzKSB8CisJCQlBSV9DT05WRVJUX091dHB1dF9TZWxlY3QoQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0xvdyksCisJCQlBSV9PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYWlfb3V0cHV0X2NvbnRyb2xfYml0czsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NISUZUSU5fUHVsc2VfV2lkdGggfAorCQkJQUlfU09DX1BvbGFyaXR5IHwKKwkJCUFJX0NPTlZFUlRfUHVsc2VfV2lkdGggfAorCQkJQUlfTE9DQUxNVVhfQ0xLX1B1bHNlX1dpZHRoLCBBSV9QZXJzb25hbF9SZWdpc3Rlcik7CisJCWFpX291dHB1dF9jb250cm9sX2JpdHMgPSBBSV9TQ0FOX0lOX1BST0dfT3V0cHV0X1NlbGVjdCgzKSB8CisJCQlBSV9FWFRNVVhfQ0xLX091dHB1dF9TZWxlY3QoMCkgfAorCQkJQUlfTE9DQUxNVVhfQ0xLX091dHB1dF9TZWxlY3QoMikgfAorCQkJQUlfU0NfVENfT3V0cHV0X1NlbGVjdCgzKTsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjIyeCkKKwkJCWFpX291dHB1dF9jb250cm9sX2JpdHMgfD0KKwkJCQlBSV9DT05WRVJUX091dHB1dF9TZWxlY3QKKwkJCQkoQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0hpZ2gpOworCQllbHNlCisJCQlhaV9vdXRwdXRfY29udHJvbF9iaXRzIHw9CisJCQkJQUlfQ09OVkVSVF9PdXRwdXRfU2VsZWN0CisJCQkJKEFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9Mb3cpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYWlfb3V0cHV0X2NvbnRyb2xfYml0cywKKwkJCUFJX091dHB1dF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9CisJLyogdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLCBiZWNhdXNlIHRoZXJlCisJICogYXJlIG5vIGJhY2t1cCByZWdpc3RlcnMgaW4gZGV2cHJpdi4gIElmIHlvdSB3YW50IHRvIGNoYW5nZQorCSAqIGFueSBvZiB0aGVzZSwgYWRkIGEgYmFja3VwIHJlZ2lzdGVyIGFuZCBvdGhlciBhcHByb3ByaWF0ZSBjb2RlOgorCSAqICAgICAgQUlfTW9kZV8xX1JlZ2lzdGVyCisJICogICAgICBBSV9Nb2RlXzNfUmVnaXN0ZXIKKwkgKiAgICAgIEFJX1BlcnNvbmFsX1JlZ2lzdGVyCisJICogICAgICBBSV9PdXRwdXRfQ29udHJvbF9SZWdpc3RlcgorCSAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ19UQ19FcnJvcl9Db25maXJtIHwgQUlfU1RBUlRfSW50ZXJydXB0X0FjayB8IEFJX1NUQVJUMl9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RBUlQxX0ludGVycnVwdF9BY2sgfCBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrIHwgQUlfRXJyb3JfSW50ZXJydXB0X0FjayB8IEFJX1NUT1BfSW50ZXJydXB0X0FjaywgSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NvbmZpZ3VyYXRpb25fRW5kLCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9haV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IGNvdW50OworCisJLy8gbG9jayB0byBhdm9pZCByYWNlIHdpdGggaW50ZXJydXB0IGhhbmRsZXIKKwlpZiAoaW5faW50ZXJydXB0KCkgPT0gMCkKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisjaWZuZGVmIFBDSURNQQorCW5pX2hhbmRsZV9maWZvX2RyZWdzKGRldik7CisjZWxzZQorCW5pX3N5bmNfYWlfZG1hKGRldik7CisjZW5kaWYKKwljb3VudCA9IHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgLSBzLT5hc3luYy0+YnVmX3JlYWRfY291bnQ7CisJaWYgKGluX2ludGVycnVwdCgpID09IDApCisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMTsKKwl1bnNpZ25lZCBzaWduYml0czsKKwl1bnNpZ25lZCBzaG9ydCBkOworCXVuc2lnbmVkIGxvbmcgZGw7CisKKwluaV9sb2FkX2NoYW5uZWxnYWluX2xpc3QoZGV2LCAxLCAmaW5zbi0+Y2hhbnNwZWMpOworCisJbmlfY2xlYXJfYWlfZmlmbyhkZXYpOworCisJc2lnbmJpdHMgPSBkZXZwcml2LT5haV9vZmZzZXRbMF07CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkgeworCQlmb3IgKG4gPSAwOyBuIDwgbnVtX2FkY19zdGFnZXNfNjExeDsgbisrKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJLyogVGhlIDYxMXggaGFzIHNjcmV3eSAzMi1iaXQgRklGT3MuICovCisJCQlkID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBOSV9USU1FT1VUOyBpKyspIHsKKwkJCQlpZiAobmlfcmVhZGIoWFhYX1N0YXR1cykgJiAweDgwKSB7CisJCQkJCWQgPSAobmlfcmVhZGwoQURDX0ZJRk9fRGF0YV82MTF4KSA+PiAxNikKKwkJCQkJCSYgMHhmZmZmOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCEoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQkJQUlfRklGT19FbXB0eV9TdCkpIHsKKwkJCQkJZCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCkgJgorCQkJCQkJMHhmZmZmOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBOSV9USU1FT1VUKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgibmlfbWlvX2NvbW1vbjogdGltZW91dCBpbiA2MTF4IG5pX2FpX2luc25fcmVhZFxuIik7CisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJCWQgKz0gc2lnbmJpdHM7CisJCQlkYXRhW25dID0gZDsKKwkJfQorCX0gZWxzZSBpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSB7CisJCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwkJCS8qIFRoZSA2MTQzIGhhcyAzMi1iaXQgRklGT3MuIFlvdSBuZWVkIHRvIHN0cm9iZSBhIGJpdCB0byBtb3ZlIGEgc2luZ2xlIDE2Yml0IHN0cmFuZGVkIHNhbXBsZSBpbnRvIHRoZSBGSUZPICovCisJCQlkbCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgTklfVElNRU9VVDsgaSsrKSB7CisJCQkJaWYgKG5pX3JlYWRsKEFJRklGT19TdGF0dXNfNjE0MykgJiAweDAxKSB7CisJCQkJCW5pX3dyaXRlbCgweDAxLCBBSUZJRk9fQ29udHJvbF82MTQzKTsJLy8gR2V0IHN0cmFuZGVkIHNhbXBsZSBpbnRvIEZJRk8KKwkJCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gTklfVElNRU9VVCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIm5pX21pb19jb21tb246IHRpbWVvdXQgaW4gNjE0MyBuaV9haV9pbnNuX3JlYWRcbiIpOworCQkJCXJldHVybiAtRVRJTUU7CisJCQl9CisJCQlkYXRhW25dID0gKCgoZGwgPj4gMTYpICYgMHhGRkZGKSArIHNpZ25iaXRzKSAmIDB4RkZGRjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlmb3IgKGkgPSAwOyBpIDwgTklfVElNRU9VVDsgaSsrKSB7CisJCQkJaWYgKCEoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQkJQUlfRklGT19FbXB0eV9TdCkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPT0gTklfVElNRU9VVCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIm5pX21pb19jb21tb246IHRpbWVvdXQgaW4gbmlfYWlfaW5zbl9yZWFkXG4iKTsKKwkJCQlyZXR1cm4gLUVUSU1FOworCQkJfQorCQkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQkJZGF0YVtuXSA9CisJCQkJCW5pX3JlYWRsKE1fT2Zmc2V0X0FJX0ZJRk9fRGF0YSkgJiBtYXNrOworCQkJfSBlbHNlIHsKKwkJCQlkID0gbmlfcmVhZHcoQURDX0ZJRk9fRGF0YV9SZWdpc3Rlcik7CisJCQkJZCArPSBzaWduYml0czsJLyogc3VidGxlOiBuZWVkcyB0byBiZSBzaG9ydCBhZGRpdGlvbiAqLworCQkJCWRhdGFbbl0gPSBkOworCQkJfQorCQl9CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCit2b2lkIG5pX3ByaW1lX2NoYW5uZWxnYWluX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJZm9yIChpID0gMDsgaSA8IE5JX1RJTUVPVVQ7ICsraSkgeworCQlpZiAoIShkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCUFJX0ZJRk9fRW1wdHlfU3QpKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQURDX0ZJRk9fQ2xlYXIpOworCQkJcmV0dXJuOworCQl9CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorCXJ0X3ByaW50aygibmlfbWlvX2NvbW1vbjogdGltZW91dCBsb2FkaW5nIGNoYW5uZWwvZ2FpbiBsaXN0XG4iKTsKK30KKworc3RhdGljIHZvaWQgbmlfbV9zZXJpZXNfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbiwgcmFuZ2UsIGFyZWY7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkaXRoZXI7CisJdW5zaWduZWQgcmFuZ2VfY29kZTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAxLCBDb25maWd1cmF0aW9uX01lbW9yeV9DbGVhcik7CisKKy8vICAgICAgb2Zmc2V0ID0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCWlmICgobGlzdFswXSAmIENSX0FMVF9TT1VSQ0UpKSB7CisJCXVuc2lnbmVkIGJ5cGFzc19iaXRzOworCQljaGFuID0gQ1JfQ0hBTihsaXN0WzBdKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShsaXN0WzBdKTsKKwkJcmFuZ2VfY29kZSA9IG5pX2dhaW5sa3VwW2JvYXJkdHlwZS5nYWlubGt1cF1bcmFuZ2VdOworCQlkaXRoZXIgPSAoKGxpc3RbMF0gJiBDUl9BTFRfRklMVEVSKSAhPSAwKTsKKwkJYnlwYXNzX2JpdHMgPSBNU2VyaWVzX0FJX0J5cGFzc19Db25maWdfRklGT19CaXQ7CisJCWJ5cGFzc19iaXRzIHw9IGNoYW47CisJCWJ5cGFzc19iaXRzIHw9CisJCQkoZGV2cHJpdi0+CisJCQlhaV9jYWxpYl9zb3VyY2UpICYgKE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX01hc2sgfAorCQkJTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9OZWdfTWFzayB8CisJCQlNU2VyaWVzX0FJX0J5cGFzc19Nb2RlX011eF9NYXNrIHwKKwkJCU1TZXJpZXNfQU9fQnlwYXNzX0FPX0NhbF9TZWxfTWFzayk7CisJCWJ5cGFzc19iaXRzIHw9IE1TZXJpZXNfQUlfQnlwYXNzX0dhaW5fQml0cyhyYW5nZV9jb2RlKTsKKwkJaWYgKGRpdGhlcikKKwkJCWJ5cGFzc19iaXRzIHw9IE1TZXJpZXNfQUlfQnlwYXNzX0RpdGhlcl9CaXQ7CisJCS8vIGRvbid0IHVzZSAyJ3MgY29tcGxlbWVudCBlbmNvZGluZworCQlieXBhc3NfYml0cyB8PSBNU2VyaWVzX0FJX0J5cGFzc19Qb2xhcml0eV9CaXQ7CisJCW5pX3dyaXRlbChieXBhc3NfYml0cywgTV9PZmZzZXRfQUlfQ29uZmlnX0ZJRk9fQnlwYXNzKTsKKwl9IGVsc2UgeworCQluaV93cml0ZWwoMCwgTV9PZmZzZXRfQUlfQ29uZmlnX0ZJRk9fQnlwYXNzKTsKKwl9CisJb2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsKKwkJdW5zaWduZWQgY29uZmlnX2JpdHMgPSAwOworCQljaGFuID0gQ1JfQ0hBTihsaXN0W2ldKTsKKwkJYXJlZiA9IENSX0FSRUYobGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UobGlzdFtpXSk7CisJCWRpdGhlciA9ICgobGlzdFtpXSAmIENSX0FMVF9GSUxURVIpICE9IDApOworCisJCXJhbmdlX2NvZGUgPSBuaV9nYWlubGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdW3JhbmdlXTsKKwkJZGV2cHJpdi0+YWlfb2Zmc2V0W2ldID0gb2Zmc2V0OworCQlzd2l0Y2ggKGFyZWYpIHsKKwkJY2FzZSBBUkVGX0RJRkY6CisJCQljb25maWdfYml0cyB8PQorCQkJCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9EaWZmZXJlbnRpYWxfQml0czsKKwkJCWJyZWFrOworCQljYXNlIEFSRUZfQ09NTU9OOgorCQkJY29uZmlnX2JpdHMgfD0KKwkJCQlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfQ29tbW9uX1JlZl9CaXRzOworCQkJYnJlYWs7CisJCWNhc2UgQVJFRl9HUk9VTkQ6CisJCQljb25maWdfYml0cyB8PQorCQkJCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9Hcm91bmRfUmVmX0JpdHM7CisJCQlicmVhazsKKwkJY2FzZSBBUkVGX09USEVSOgorCQkJYnJlYWs7CisJCX0KKwkJY29uZmlnX2JpdHMgfD0gTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9CaXRzKGNoYW4pOworCQljb25maWdfYml0cyB8PQorCQkJTVNlcmllc19BSV9Db25maWdfQmFua19CaXRzKGJvYXJkdHlwZS5yZWdfdHlwZSwgY2hhbik7CisJCWNvbmZpZ19iaXRzIHw9IE1TZXJpZXNfQUlfQ29uZmlnX0dhaW5fQml0cyhyYW5nZV9jb2RlKTsKKwkJaWYgKGkgPT0gbl9jaGFuIC0gMSkKKwkJCWNvbmZpZ19iaXRzIHw9IE1TZXJpZXNfQUlfQ29uZmlnX0xhc3RfQ2hhbm5lbF9CaXQ7CisJCWlmIChkaXRoZXIpCisJCQljb25maWdfYml0cyB8PSBNU2VyaWVzX0FJX0NvbmZpZ19EaXRoZXJfQml0OworCQkvLyBkb24ndCB1c2UgMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKwkJY29uZmlnX2JpdHMgfD0gTVNlcmllc19BSV9Db25maWdfUG9sYXJpdHlfQml0OworCQluaV93cml0ZXcoY29uZmlnX2JpdHMsIE1fT2Zmc2V0X0FJX0NvbmZpZ19GSUZPX0RhdGEpOworCX0KKwluaV9wcmltZV9jaGFubmVsZ2Fpbl9saXN0KGRldik7Cit9CisKKy8qCisgKiBOb3RlcyBvbiB0aGUgNjExMCBhbmQgNjExMToKKyAqIFRoZXNlIGJvYXJkcyBhIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIHRoZSByZXN0IG9mIHRoZSBzZXJpZXMsIHNpbmNlCisgKiB0aGV5IGhhdmUgbXVsdGlwbGUgQS9EIGNvbnZlcnRlcnMuCisgKiBGcm9tIHRoZSBkcml2ZXIgc2lkZSwgdGhlIGNvbmZpZ3VyYXRpb24gbWVtb3J5IGlzIGEKKyAqIGxpdHRsZSBkaWZmZXJlbnQuCisgKiBDb25maWd1cmF0aW9uIE1lbW9yeSBMb3c6CisgKiAgIGJpdHMgMTUtOTogc2FtZQorICogICBiaXQgODogdW5pcG9sYXIvYmlwb2xhciAoc2hvdWxkIGJlIDAgZm9yIGJpcG9sYXIpCisgKiAgIGJpdHMgMC0zOiBnYWluLiAgVGhpcyBpcyA0IGJpdHMgaW5zdGVhZCBvZiAzIGZvciB0aGUgb3RoZXIgYm9hcmRzCisgKiAgICAgICAxMDAxIGdhaW49MC4xICgrLy0gNTApCisgKiAgICAgICAxMDEwIDAuMgorICogICAgICAgMTAxMSAwLjEKKyAqICAgICAgIDAwMDEgMQorICogICAgICAgMDAxMCAyCisgKiAgICAgICAwMDExIDUKKyAqICAgICAgIDAxMDAgMTAKKyAqICAgICAgIDAxMDEgMjAKKyAqICAgICAgIDAxMTAgNTAKKyAqIENvbmZpZ3VyYXRpb24gTWVtb3J5IEhpZ2g6CisgKiAgIGJpdHMgMTItMTQ6IENoYW5uZWwgVHlwZQorICogICAgICAgMDAxIGZvciBkaWZmZXJlbnRpYWwKKyAqICAgICAgIDAwMCBmb3IgY2FsaWJyYXRpb24KKyAqICAgYml0IDExOiBjb3VwbGluZyAgKHRoaXMgaXMgbm90IGN1cnJlbnRseSBoYW5kbGVkKQorICogICAgICAgMSBBQyBjb3VwbGluZworICogICAgICAgMCBEQyBjb3VwbGluZworICogICBiaXRzIDAtMjogY2hhbm5lbAorICogICAgICAgdmFsaWQgY2hhbm5lbHMgYXJlIDAtMworICovCitzdGF0aWMgdm9pZCBuaV9sb2FkX2NoYW5uZWxnYWluX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBuX2NoYW4sCisJdW5zaWduZWQgaW50ICpsaXN0KQoreworCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaGksIGxvOworCXVuc2lnbmVkIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGl0aGVyOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCW5pX21fc2VyaWVzX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChkZXYsIG5fY2hhbiwgbGlzdCk7CisJCXJldHVybjsKKwl9CisJaWYgKG5fY2hhbiA9PSAxICYmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCSYmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpKSB7CisJCWlmIChkZXZwcml2LT5jaGFuZ2Fpbl9zdGF0ZQorCQkJJiYgZGV2cHJpdi0+Y2hhbmdhaW5fc3BlYyA9PSBsaXN0WzBdKSB7CisJCQkvLyByZWFkeSB0byBnby4KKwkJCXJldHVybjsKKwkJfQorCQlkZXZwcml2LT5jaGFuZ2Fpbl9zdGF0ZSA9IDE7CisJCWRldnByaXYtPmNoYW5nYWluX3NwZWMgPSBsaXN0WzBdOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNoYW5nYWluX3N0YXRlID0gMDsKKwl9CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXIpOworCisJLy8gU2V0IHVwIENhbGlicmF0aW9uIG1vZGUgaWYgcmVxdWlyZWQKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSB7CisJCWlmICgobGlzdFswXSAmIENSX0FMVF9TT1VSQ0UpCisJCQkmJiAhZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlX2VuYWJsZWQpIHsKKwkJCS8vIFN0cm9iZSBSZWxheSBlbmFibGUgYml0CisJCQluaV93cml0ZXcoZGV2cHJpdi0+CisJCQkJYWlfY2FsaWJfc291cmNlIHwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDNfUmVsYXlPbiwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCQkJbmlfd3JpdGV3KGRldnByaXYtPmFpX2NhbGliX3NvdXJjZSwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCQkJZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlX2VuYWJsZWQgPSAxOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsJLy8gQWxsb3cgcmVsYXlzIHRvIGNoYW5nZQorCQl9IGVsc2UgaWYgKCEobGlzdFswXSAmIENSX0FMVF9TT1VSQ0UpCisJCQkmJiBkZXZwcml2LT5haV9jYWxpYl9zb3VyY2VfZW5hYmxlZCkgeworCQkJLy8gU3Ryb2JlIFJlbGF5IGRpc2FibGUgYml0CisJCQluaV93cml0ZXcoZGV2cHJpdi0+CisJCQkJYWlfY2FsaWJfc291cmNlIHwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDNfUmVsYXlPZmYsCisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwkJCW5pX3dyaXRldyhkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UsCisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwkJCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZV9lbmFibGVkID0gMDsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CS8vIEFsbG93IHJlbGF5cyB0byBjaGFuZ2UKKwkJfQorCX0KKworCW9mZnNldCA9IDEgPDwgKGJvYXJkdHlwZS5hZGJpdHMgLSAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsKKwkJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpCisJCQkmJiAobGlzdFtpXSAmIENSX0FMVF9TT1VSQ0UpKSB7CisJCQljaGFuID0gZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlOworCQl9IGVsc2UgeworCQkJY2hhbiA9IENSX0NIQU4obGlzdFtpXSk7CisJCX0KKwkJYXJlZiA9IENSX0FSRUYobGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UobGlzdFtpXSk7CisJCWRpdGhlciA9ICgobGlzdFtpXSAmIENSX0FMVF9GSUxURVIpICE9IDApOworCisJCS8qIGZpeCB0aGUgZXh0ZXJuYWwvaW50ZXJuYWwgcmFuZ2UgZGlmZmVyZW5jZXMgKi8KKwkJcmFuZ2UgPSBuaV9nYWlubGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdW3JhbmdlXTsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJCWRldnByaXYtPmFpX29mZnNldFtpXSA9IG9mZnNldDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+YWlfb2Zmc2V0W2ldID0gKHJhbmdlICYgMHgxMDApID8gMCA6IG9mZnNldDsKKworCQloaSA9IDA7CisJCWlmICgobGlzdFtpXSAmIENSX0FMVF9TT1VSQ0UpKSB7CisJCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJCW5pX3dyaXRldyhDUl9DSEFOKGxpc3RbaV0pICYgMHgwMDAzLAorCQkJCQlDYWxpYnJhdGlvbl9DaGFubmVsX1NlbGVjdF82MTF4KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpCisJCQkJYXJlZiA9IEFSRUZfRElGRjsKKwkJCWVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykKKwkJCQlhcmVmID0gQVJFRl9PVEhFUjsKKwkJCXN3aXRjaCAoYXJlZikgeworCQkJY2FzZSBBUkVGX0RJRkY6CisJCQkJaGkgfD0gQUlfRElGRkVSRU5USUFMOworCQkJCWJyZWFrOworCQkJY2FzZSBBUkVGX0NPTU1PTjoKKwkJCQloaSB8PSBBSV9DT01NT047CisJCQkJYnJlYWs7CisJCQljYXNlIEFSRUZfR1JPVU5EOgorCQkJCWhpIHw9IEFJX0dST1VORDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVJFRl9PVEhFUjoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQloaSB8PSBBSV9DT05GSUdfQ0hBTk5FTChjaGFuKTsKKworCQluaV93cml0ZXcoaGksIENvbmZpZ3VyYXRpb25fTWVtb3J5X0hpZ2gpOworCisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpIHsKKwkJCWxvID0gcmFuZ2U7CisJCQlpZiAoaSA9PSBuX2NoYW4gLSAxKQorCQkJCWxvIHw9IEFJX0xBU1RfQ0hBTk5FTDsKKwkJCWlmIChkaXRoZXIpCisJCQkJbG8gfD0gQUlfRElUSEVSOworCisJCQluaV93cml0ZXcobG8sIENvbmZpZ3VyYXRpb25fTWVtb3J5X0xvdyk7CisJCX0KKwl9CisKKwkvKiBwcmltZSB0aGUgY2hhbm5lbC9nYWluIGxpc3QgKi8KKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjExeCkKKwkJJiYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjE0MykpIHsKKwkJbmlfcHJpbWVfY2hhbm5lbGdhaW5fbGlzdChkZXYpOworCX0KK30KKworc3RhdGljIGludCBuaV9uc190b190aW1lcihjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2aWRlcjsKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwlkZWZhdWx0OgorCQlkaXZpZGVyID0gKG5hbm9zZWMgKyBkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQlkaXZpZGVyID0gKG5hbm9zZWMpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJZGl2aWRlciA9IChuYW5vc2VjICsgZGV2cHJpdi0+Y2xvY2tfbnMgLSAxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQlicmVhazsKKwl9CisJcmV0dXJuIGRpdmlkZXIgLSAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfdGltZXJfdG9fbnMoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCB0aW1lcikKK3sKKwlyZXR1cm4gZGV2cHJpdi0+Y2xvY2tfbnMgKiAodGltZXIgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX21pbl9haV9zY2FuX3BlcmlvZF9ucyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBudW1fY2hhbm5lbHMpCit7CisJc3dpdGNoIChib2FyZHR5cGUucmVnX3R5cGUpIHsKKwljYXNlIG5pX3JlZ182MTF4OgorCWNhc2UgbmlfcmVnXzYxNDM6CisJCS8vIHNpbXVsdGFuZW91c2x5LXNhbXBsZWQgaW5wdXRzCisJCXJldHVybiBib2FyZHR5cGUuYWlfc3BlZWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8vIG11bHRpcGxleGVkIGlucHV0cworCQlicmVhazsKKwl9OworCXJldHVybiBib2FyZHR5cGUuYWlfc3BlZWQgKiBudW1fY2hhbm5lbHM7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IHNvdXJjZXM7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJaWYgKChjbWQtPmZsYWdzICYgQ01ERl9XUklURSkpIHsKKwkJY21kLT5mbGFncyAmPSB+Q01ERl9XUklURTsKKwl9CisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlzb3VyY2VzID0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQl8fCAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSkKKwkJc291cmNlcyB8PSBUUklHX05PVzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IHNvdXJjZXM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmCisJCWNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX09USEVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCXVuc2lnbmVkIGludCB0bXAgPSBDUl9DSEFOKGNtZC0+c3RhcnRfYXJnKTsKKworCQlpZiAodG1wID4gMTYpCisJCQl0bXAgPSAxNjsKKwkJdG1wIHw9IChjbWQtPnN0YXJ0X2FyZyAmIChDUl9JTlZFUlQgfCBDUl9FREdFKSk7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSB0bXApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJLyogdHJ1ZSBmb3IgYm90aCBUUklHX05PVyBhbmQgVFJJR19JTlQgKi8KKwkJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBuaV9taW5fYWlfc2Nhbl9wZXJpb2RfbnMoZGV2LAorCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJbmlfbWluX2FpX3NjYW5fcGVyaW9kX25zKGRldiwKKwkJCQljbWQtPmNoYW5saXN0X2xlbik7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IGRldnByaXYtPmNsb2NrX25zICogMHhmZmZmZmYpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBkZXZwcml2LT5jbG9ja19ucyAqIDB4ZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPnNjYW5fYmVnaW5fYXJnKTsKKworCQlpZiAodG1wID4gMTYpCisJCQl0bXAgPSAxNjsKKwkJdG1wIHw9IChjbWQtPnNjYW5fYmVnaW5fYXJnICYgKENSX0lOVkVSVCB8IENSX0VER0UpKTsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gdG1wKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19PVEhFUiAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykpIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgYm9hcmR0eXBlLmFpX3NwZWVkKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IGJvYXJkdHlwZS5haV9zcGVlZDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmYpIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmY7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPmNvbnZlcnRfYXJnKTsKKworCQlpZiAodG1wID4gMTYpCisJCQl0bXAgPSAxNjsKKwkJdG1wIHw9IChjbWQtPmNvbnZlcnRfYXJnICYgKENSX0FMVF9GSUxURVIgfCBDUl9JTlZFUlQpKTsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gdG1wKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQl1bnNpZ25lZCBpbnQgbWF4X2NvdW50ID0gMHgwMTAwMDAwMDsKKworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJbWF4X2NvdW50IC09IG51bV9hZGNfc3RhZ2VzXzYxMXg7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gbWF4X2NvdW50KSB7CisJCQljbWQtPnN0b3BfYXJnID0gbWF4X2NvdW50OworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c3RvcF9hcmcgPCAxKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQluaV90aW1lcl90b19ucyhkZXYsIG5pX25zX3RvX3RpbWVyKGRldiwKKwkJCQljbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCQkmJiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKSkgeworCQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCW5pX3RpbWVyX3RvX25zKGRldiwgbmlfbnNfdG9fdGltZXIoZGV2LAorCQkJCQljbWQtPmNvbnZlcnRfYXJnLAorCQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKSk7CisJCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQkJZXJyKys7CisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCB0aW1lcjsKKwlpbnQgbW9kZTEgPSAwOwkJLyogbW9kZTEgaXMgbmVlZGVkIGZvciBib3RoIHN0b3AgYW5kIGNvbnZlcnQgKi8KKwlpbnQgbW9kZTIgPSAwOworCWludCBzdGFydF9zdG9wX3NlbGVjdCA9IDA7CisJdW5zaWduZWQgaW50IHN0b3BfY291bnQ7CisJaW50IGludGVycnVwdF9hX2VuYWJsZSA9IDA7CisKKwlNRFBSSU5USygibmlfYWlfY21kXG4iKTsKKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiY2Fubm90IHJ1biBjb21tYW5kIHdpdGhvdXQgYW4gaXJxIik7CisJCXJldHVybiAtRUlPOworCX0KKwluaV9jbGVhcl9haV9maWZvKGRldik7CisKKwluaV9sb2FkX2NoYW5uZWxnYWluX2xpc3QoZGV2LCBjbWQtPmNoYW5saXN0X2xlbiwgY21kLT5jaGFubGlzdCk7CisKKwkvKiBzdGFydCBjb25maWd1cmF0aW9uICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NvbmZpZ3VyYXRpb25fU3RhcnQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCS8qIGRpc2FibGUgYW5hbG9nIHRyaWdnZXJpbmcgZm9yIG5vdywgc2luY2UgaXQKKwkgKiBpbnRlcmZlcmVzIHdpdGggdGhlIHVzZSBvZiBwZmkwICovCisJZGV2cHJpdi0+YW5fdHJpZ19ldGNfcmVnICY9IH5BbmFsb2dfVHJpZ2dlcl9FbmFibGU7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFuX3RyaWdfZXRjX3JlZywKKwkJQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyKTsKKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCWNhc2UgVFJJR19OT1c6CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TVEFSVDJfU2VsZWN0KDApIHwKKwkJCUFJX1NUQVJUMV9TeW5jIHwgQUlfU1RBUlQxX0VkZ2UgfCBBSV9TVEFSVDFfU2VsZWN0KDApLAorCQkJQUlfVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQl7CisJCQlpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5zdGFydF9hcmcpOworCQkJdW5zaWduZWQgaW50IGJpdHMgPSBBSV9TVEFSVDJfU2VsZWN0KDApIHwKKwkJCQlBSV9TVEFSVDFfU3luYyB8IEFJX1NUQVJUMV9TZWxlY3QoY2hhbiArIDEpOworCisJCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQkJYml0cyB8PSBBSV9TVEFSVDFfUG9sYXJpdHk7CisJCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9FREdFKQorCQkJCWJpdHMgfD0gQUlfU1RBUlQxX0VkZ2U7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYml0cywKKwkJCQlBSV9UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcik7CisJCQlicmVhazsKKwkJfQorCX0KKworCW1vZGUyICY9IH5BSV9QcmVfVHJpZ2dlcjsKKwltb2RlMiAmPSB+QUlfU0NfSW5pdGlhbF9Mb2FkX1NvdXJjZTsKKwltb2RlMiAmPSB+QUlfU0NfUmVsb2FkX01vZGU7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUyLCBBSV9Nb2RlXzJfUmVnaXN0ZXIpOworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDEgfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykpIHsKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RPUF9Qb2xhcml0eTsKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RPUF9TZWxlY3QoMzEpOwkvLyBsb2dpYyBsb3cKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RPUF9TeW5jOworCX0gZWxzZSB7CisJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUT1BfU2VsZWN0KDE5KTsJLy8gYWkgY29uZmlndXJhdGlvbiBtZW1vcnkKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHN0YXJ0X3N0b3Bfc2VsZWN0LAorCQlBSV9TVEFSVF9TVE9QX1NlbGVjdF9SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5haV9jbWQyID0gMDsKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCXN0b3BfY291bnQgPSBjbWQtPnN0b3BfYXJnIC0gMTsKKworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCQkvLyBoYXZlIHRvIHRha2UgMyBzdGFnZSBhZGMgcGlwZWxpbmUgaW50byBhY2NvdW50CisJCQlzdG9wX2NvdW50ICs9IG51bV9hZGNfc3RhZ2VzXzYxMXg7CisJCX0KKwkJLyogc3RhZ2UgbnVtYmVyIG9mIHNjYW5zICovCisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBzdG9wX2NvdW50LCBBSV9TQ19Mb2FkX0FfUmVnaXN0ZXJzKTsKKworCQltb2RlMSB8PSBBSV9TdGFydF9TdG9wIHwgQUlfTW9kZV8xX1Jlc2VydmVkIHwgQUlfVHJpZ2dlcl9PbmNlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTEsIEFJX01vZGVfMV9SZWdpc3Rlcik7CisJCS8qIGxvYWQgU0MgKFNjYW4gQ291bnQpICovCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ19Mb2FkLCBBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAwOworCQlpZiAoc3RvcF9jb3VudCA9PSAwKSB7CisJCQlkZXZwcml2LT5haV9jbWQyIHw9IEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbjsKKwkJCWludGVycnVwdF9hX2VuYWJsZSB8PSBBSV9TVE9QX0ludGVycnVwdF9FbmFibGU7CisJCQkvLyB0aGlzIGlzIHJlcXVpcmVkIHRvIGdldCB0aGUgbGFzdCBzYW1wbGUgZm9yIGNoYW5saXN0X2xlbiA+IDEsIG5vdCBzdXJlIHdoeQorCQkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkKKwkJCQlzdGFydF9zdG9wX3NlbGVjdCB8PQorCQkJCQlBSV9TVE9QX1BvbGFyaXR5IHwgQUlfU1RPUF9FZGdlOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQkvKiBzdGFnZSBudW1iZXIgb2Ygc2NhbnMgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDAsIEFJX1NDX0xvYWRfQV9SZWdpc3RlcnMpOworCisJCW1vZGUxIHw9IEFJX1N0YXJ0X1N0b3AgfCBBSV9Nb2RlXzFfUmVzZXJ2ZWQgfCBBSV9Db250aW51b3VzOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTEsIEFJX01vZGVfMV9SZWdpc3Rlcik7CisKKwkJLyogbG9hZCBTQyAoU2NhbiBDb3VudCkgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NDX0xvYWQsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwkJZGV2cHJpdi0+YWlfY29udGludW91cyA9IDE7CisKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQkvKgorCQkgICBzdG9wIGJpdHMgZm9yIG5vbiA2MTF4IGJvYXJkcworCQkgICBBSV9TSV9TcGVjaWFsX1RyaWdnZXJfRGVsYXk9MAorCQkgICBBSV9QcmVfVHJpZ2dlcj0wCisJCSAgIEFJX1NUQVJUX1NUT1BfU2VsZWN0X1JlZ2lzdGVyOgorCQkgICBBSV9TVEFSVF9Qb2xhcml0eT0wICg/KSAgICAgIHJpc2luZyBlZGdlCisJCSAgIEFJX1NUQVJUX0VkZ2U9MSAgICAgICAgICAgICAgZWRnZSB0cmlnZ2VyZWQKKwkJICAgQUlfU1RBUlRfU3luYz0xICg/KQorCQkgICBBSV9TVEFSVF9TZWxlY3Q9MCAgICAgICAgICAgIFNJX1RDCisJCSAgIEFJX1NUT1BfUG9sYXJpdHk9MCAgICAgICAgICAgcmlzaW5nIGVkZ2UKKwkJICAgQUlfU1RPUF9FZGdlPTAgICAgICAgICAgICAgICBsZXZlbAorCQkgICBBSV9TVE9QX1N5bmM9MQorCQkgICBBSV9TVE9QX1NlbGVjdD0xOSAgICAgICAgICAgIGV4dGVybmFsIHBpbiAoY29uZmlndXJhdGlvbiBtZW0pCisJCSAqLworCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVEFSVF9FZGdlIHwgQUlfU1RBUlRfU3luYzsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHN0YXJ0X3N0b3Bfc2VsZWN0LAorCQkJQUlfU1RBUlRfU1RPUF9TZWxlY3RfUmVnaXN0ZXIpOworCisJCW1vZGUyIHw9IEFJX1NJX1JlbG9hZF9Nb2RlKDApOworCQkvKiBBSV9TSV9Jbml0aWFsX0xvYWRfU291cmNlPUEgKi8KKwkJbW9kZTIgJj0gfkFJX1NJX0luaXRpYWxfTG9hZF9Tb3VyY2U7CisJCS8vbW9kZTIgfD0gQUlfU0NfUmVsb2FkX01vZGU7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBtb2RlMiwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKworCQkvKiBsb2FkIFNJICovCisJCXRpbWVyID0gbmlfbnNfdG9fdGltZXIoZGV2LCBjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIHRpbWVyLCBBSV9TSV9Mb2FkX0FfUmVnaXN0ZXJzKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NJX0xvYWQsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfRURHRSkKKwkJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUQVJUX0VkZ2U7CisJCS8qIEFJX1NUQVJUX1BvbGFyaXR5PT0xIGlzIGZhbGxpbmcgZWRnZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkKKwkJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUQVJUX1BvbGFyaXR5OworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBjbWQtPmNvbnZlcnRfc3JjIHx8CisJCQkoY21kLT5zY2FuX2JlZ2luX2FyZyAmIH5DUl9FREdFKSAhPQorCQkJKGNtZC0+Y29udmVydF9hcmcgJiB+Q1JfRURHRSkpCisJCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVEFSVF9TeW5jOworCQlzdGFydF9zdG9wX3NlbGVjdCB8PQorCQkJQUlfU1RBUlRfU2VsZWN0KDEgKyBDUl9DSEFOKGNtZC0+c2Nhbl9iZWdpbl9hcmcpKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHN0YXJ0X3N0b3Bfc2VsZWN0LAorCQkJQUlfU1RBUlRfU1RPUF9TZWxlY3RfUmVnaXN0ZXIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJY2FzZSBUUklHX05PVzoKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPT0gMCB8fCBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQorCQkJdGltZXIgPSAxOworCQllbHNlCisJCQl0aW1lciA9IG5pX25zX3RvX3RpbWVyKGRldiwgY21kLT5jb252ZXJ0X2FyZywKKwkJCQlUUklHX1JPVU5EX05FQVJFU1QpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQUlfU0kyX0xvYWRfQV9SZWdpc3Rlcik7CS8qIDAsMCBkb2VzIG5vdCB3b3JrLiAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgdGltZXIsIEFJX1NJMl9Mb2FkX0JfUmVnaXN0ZXIpOworCisJCS8qIEFJX1NJMl9SZWxvYWRfTW9kZSA9IGFsdGVybmF0ZSAqLworCQkvKiBBSV9TSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZSA9IEEgKi8KKwkJbW9kZTIgJj0gfkFJX1NJMl9Jbml0aWFsX0xvYWRfU291cmNlOworCQltb2RlMiB8PSBBSV9TSTJfUmVsb2FkX01vZGU7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBtb2RlMiwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKworCQkvKiBBSV9TSTJfTG9hZCAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0kyX0xvYWQsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwkJbW9kZTIgfD0gQUlfU0kyX1JlbG9hZF9Nb2RlOwkvLyBhbHRlcm5hdGUKKwkJbW9kZTIgfD0gQUlfU0kyX0luaXRpYWxfTG9hZF9Tb3VyY2U7CS8vIEIKKworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTIsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCW1vZGUxIHw9IEFJX0NPTlZFUlRfU291cmNlX1NlbGVjdCgxICsgY21kLT5jb252ZXJ0X2FyZyk7CisJCWlmICgoY21kLT5jb252ZXJ0X2FyZyAmIENSX0lOVkVSVCkgPT0gMCkKKwkJCW1vZGUxIHw9IEFJX0NPTlZFUlRfU291cmNlX1BvbGFyaXR5OworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTEsIEFJX01vZGVfMV9SZWdpc3Rlcik7CisKKwkJbW9kZTIgfD0gQUlfU3RhcnRfU3RvcF9HYXRlX0VuYWJsZSB8IEFJX1NDX0dhdGVfRW5hYmxlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTIsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisKKwkJYnJlYWs7CisJfQorCisJaWYgKGRldi0+aXJxKSB7CisKKwkJLyogaW50ZXJydXB0IG9uIEZJRk8sIGVycm9ycywgU0NfVEMgKi8KKwkJaW50ZXJydXB0X2FfZW5hYmxlIHw9IEFJX0Vycm9yX0ludGVycnVwdF9FbmFibGUgfAorCQkJQUlfU0NfVENfSW50ZXJydXB0X0VuYWJsZTsKKworI2lmbmRlZiBQQ0lETUEKKwkJaW50ZXJydXB0X2FfZW5hYmxlIHw9IEFJX0ZJRk9fSW50ZXJydXB0X0VuYWJsZTsKKyNlbmRpZgorCisJCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUworCQkJfHwgKGRldnByaXYtPmFpX2NtZDIgJiBBSV9FbmRfT25fRW5kX09mX1NjYW4pKSB7CisJCQkvKiB3YWtlIG9uIGVuZC1vZi1zY2FuICovCisJCQlkZXZwcml2LT5haW1vZGUgPSBBSU1PREVfU0NBTjsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmFpbW9kZSA9IEFJTU9ERV9IQUxGX0ZVTEw7CisJCX0KKworCQlzd2l0Y2ggKGRldnByaXYtPmFpbW9kZSkgeworCQljYXNlIEFJTU9ERV9IQUxGX0ZVTEw6CisJCQkvKmdlbmVyYXRlIEZJRk8gaW50ZXJydXB0cyBhbmQgRE1BIHJlcXVlc3RzIG9uIGhhbGYtZnVsbCAqLworI2lmZGVmIFBDSURNQQorCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0ZJRk9fTW9kZV9IRl90b19FLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisjZWxzZQorCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0ZJRk9fTW9kZV9IRiwKKwkJCQlBSV9Nb2RlXzNfUmVnaXN0ZXIpOworI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBBSU1PREVfU0FNUExFOgorCQkJLypnZW5lcmF0ZSBGSUZPIGludGVycnVwdHMgb24gbm9uLWVtcHR5ICovCisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfRklGT19Nb2RlX05FLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisJCQlicmVhazsKKwkJY2FzZSBBSU1PREVfU0NBTjoKKyNpZmRlZiBQQ0lETUEKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9GSUZPX01vZGVfTkUsCisJCQkJQUlfTW9kZV8zX1JlZ2lzdGVyKTsKKyNlbHNlCisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfRklGT19Nb2RlX0hGLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisjZW5kaWYKKwkJCWludGVycnVwdF9hX2VuYWJsZSB8PSBBSV9TVE9QX0ludGVycnVwdF9FbmFibGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0Vycm9yX0ludGVycnVwdF9BY2sgfCBBSV9TVE9QX0ludGVycnVwdF9BY2sgfCBBSV9TVEFSVF9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RBUlQyX0ludGVycnVwdF9BY2sgfCBBSV9TVEFSVDFfSW50ZXJydXB0X0FjayB8IEFJX1NDX1RDX0ludGVycnVwdF9BY2sgfCBBSV9TQ19UQ19FcnJvcl9Db25maXJtLCBJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXIpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCisKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsCisJCQlpbnRlcnJ1cHRfYV9lbmFibGUsIDEpOworCisJCU1EUFJJTlRLKCJJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIgPSAweCUwNHhcbiIsCisJCQlkZXZwcml2LT5pbnRfYV9lbmFibGVfcmVnKTsKKwl9IGVsc2UgeworCQkvKiBpbnRlcnJ1cHQgb24gbm90aGluZyAqLworCQluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9BX0VuYWJsZV9SZWdpc3RlciwgfjAsIDApOworCisJCS8qIFhYWCBzdGFydCBwb2xsaW5nIGlmIG5lY2Vzc2FyeSAqLworCQlNRFBSSU5USygiaW50ZXJydXB0aW5nIG9uIG5vdGhpbmdcbiIpOworCX0KKworCS8qIGVuZCBjb25maWd1cmF0aW9uICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NvbmZpZ3VyYXRpb25fRW5kLCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQkJQUlfU0kyX0FybSB8IEFJX1NJX0FybSB8IEFJX0RJVl9Bcm0gfCBBSV9TQ19Bcm0sCisJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQkvKiBYWFggQUlfU0lfQXJtPyAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCUFJX1NJMl9Bcm0gfCBBSV9TSV9Bcm0gfCBBSV9ESVZfQXJtIHwgQUlfU0NfQXJtLAorCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJfQorCisjaWZkZWYgUENJRE1BCisJeworCQlpbnQgcmV0dmFsID0gbmlfYWlfc2V0dXBfTUlURV9kbWEoZGV2KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCS8vbWl0ZV9kdW1wX3JlZ3MoZGV2cHJpdi0+bWl0ZSk7CisjZW5kaWYKKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCQkvKiBBSV9TVEFSVDFfUHVsc2UgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NUQVJUMV9QdWxzZSB8IGRldnByaXYtPmFpX2NtZDIsCisJCQlBSV9Db21tYW5kXzJfUmVnaXN0ZXIpOworCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0lOVDoKKwkJcy0+YXN5bmMtPmludHRyaWcgPSAmbmlfYWlfaW50dHJpZzsKKwkJYnJlYWs7CisJfQorCisJTURQUklOVEsoImV4aXQgbmlfYWlfY21kXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FpX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TVEFSVDFfUHVsc2UgfCBkZXZwcml2LT5haV9jbWQyLAorCQlBSV9Db21tYW5kXzJfUmVnaXN0ZXIpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2FpX2NvbmZpZ19hbmFsb2dfdHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IG5pX2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19BTkFMT0dfVFJJRzoKKwkJcmV0dXJuIG5pX2FpX2NvbmZpZ19hbmFsb2dfdHJpZyhkZXYsIHMsIGluc24sIGRhdGEpOworCWNhc2UgSU5TTl9DT05GSUdfQUxUX1NPVVJDRToKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQlpZiAoZGF0YVsxXSAmIH4oTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzayB8CisJCQkJCU1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfTmVnX01hc2sgfAorCQkJCQlNU2VyaWVzX0FJX0J5cGFzc19Nb2RlX011eF9NYXNrIHwKKwkJCQkJTVNlcmllc19BT19CeXBhc3NfQU9fQ2FsX1NlbF9NYXNrKSkgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlID0gZGF0YVsxXTsKKwkJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJCXVuc2lnbmVkIGludCBjYWxpYl9zb3VyY2U7CisKKwkJCWNhbGliX3NvdXJjZSA9IGRhdGFbMV0gJiAweGY7CisKKwkJCWlmIChjYWxpYl9zb3VyY2UgPiAweEYpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZSA9IGNhbGliX3NvdXJjZTsKKwkJCW5pX3dyaXRldyhjYWxpYl9zb3VyY2UsIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0Myk7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgY2FsaWJfc291cmNlOworCQkJdW5zaWduZWQgaW50IGNhbGliX3NvdXJjZV9hZGp1c3Q7CisKKwkJCWNhbGliX3NvdXJjZSA9IGRhdGFbMV0gJiAweGY7CisJCQljYWxpYl9zb3VyY2VfYWRqdXN0ID0gKGRhdGFbMV0gPj4gNCkgJiAweGZmOworCisJCQlpZiAoY2FsaWJfc291cmNlID49IDgpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UgPSBjYWxpYl9zb3VyY2U7CisJCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCQkJbmlfd3JpdGViKGNhbGliX3NvdXJjZV9hZGp1c3QsCisJCQkJCUNhbF9HYWluX1NlbGVjdF82MTF4KTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMjsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBuaV9haV9jb25maWdfYW5hbG9nX3RyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBhLCBiLCBtb2RlYml0czsKKwlpbnQgZXJyID0gMDsKKworCS8qIGRhdGFbMV0gaXMgZmxhZ3MKKwkgKiBkYXRhWzJdIGlzIGFuYWxvZyBsaW5lCisJICogZGF0YVszXSBpcyBzZXQgbGV2ZWwKKwkgKiBkYXRhWzRdIGlzIHJlc2V0IGxldmVsICovCisJaWYgKCFib2FyZHR5cGUuaGFzX2FuYWxvZ190cmlnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKGRhdGFbMV0gJiAweGZmZmYwMDAwKSAhPSBDT01FRElfRVZfU0NBTl9CRUdJTikgeworCQlkYXRhWzFdICY9IChDT01FRElfRVZfU0NBTl9CRUdJTiB8IDB4ZmZmZik7CisJCWVycisrOworCX0KKwlpZiAoZGF0YVsyXSA+PSBib2FyZHR5cGUubl9hZGNoYW4pIHsKKwkJZGF0YVsyXSA9IGJvYXJkdHlwZS5uX2FkY2hhbiAtIDE7CisJCWVycisrOworCX0KKwlpZiAoZGF0YVszXSA+IDI1NSkgewkvKiBhICovCisJCWRhdGFbM10gPSAyNTU7CisJCWVycisrOworCX0KKwlpZiAoZGF0YVs0XSA+IDI1NSkgewkvKiBiICovCisJCWRhdGFbNF0gPSAyNTU7CisJCWVycisrOworCX0KKwkvKgorCSAqIDAwIGlnbm9yZQorCSAqIDAxIHNldAorCSAqIDEwIHJlc2V0CisJICoKKwkgKiBtb2RlczoKKwkgKiAgIDEgbGV2ZWw6ICAgICAgICAgICAgICAgICAgICArYi0gICArYS0KKwkgKiAgICAgaGlnaCBtb2RlICAgICAgICAgICAgICAgIDAwIDAwIDAxIDEwCisJICogICAgIGxvdyBtb2RlICAgICAgICAgICAgICAgICAwMCAwMCAxMCAwMQorCSAqICAgMiBsZXZlbDogKGE8YikKKwkgKiAgICAgaHlzdGVyZXNpcyBsb3cgbW9kZSAgICAgIDEwIDAwIDAwIDAxCisJICogICAgIGh5c3RlcmVzaXMgaGlnaCBtb2RlICAgICAwMSAwMCAwMCAxMAorCSAqICAgICBtaWRkbGUgbW9kZSAgICAgICAgICAgICAgMTAgMDEgMDEgMTAKKwkgKi8KKworCWEgPSBkYXRhWzNdOworCWIgPSBkYXRhWzRdOworCW1vZGViaXRzID0gZGF0YVsxXSAmIDB4ZmY7CisJaWYgKG1vZGViaXRzICYgMHhmMCkgeworCQkvKiB0d28gbGV2ZWwgbW9kZSAqLworCQlpZiAoYiA8IGEpIHsKKwkJCS8qIHN3YXAgb3JkZXIgKi8KKwkJCWEgPSBkYXRhWzRdOworCQkJYiA9IGRhdGFbM107CisJCQltb2RlYml0cyA9CisJCQkJKChkYXRhWzFdICYgMHhmKSA8PCA0KSB8ICgoZGF0YVsxXSAmIDB4ZjApID4+CisJCQkJNCk7CisJCX0KKwkJZGV2cHJpdi0+YXRyaWdfbG93ID0gYTsKKwkJZGV2cHJpdi0+YXRyaWdfaGlnaCA9IGI7CisJCXN3aXRjaCAobW9kZWJpdHMpIHsKKwkJY2FzZSAweDgxOgkvKiBsb3cgaHlzdGVyZXNpcyBtb2RlICovCisJCQlkZXZwcml2LT5hdHJpZ19tb2RlID0gNjsKKwkJCWJyZWFrOworCQljYXNlIDB4NDI6CS8qIGhpZ2ggaHlzdGVyZXNpcyBtb2RlICovCisJCQlkZXZwcml2LT5hdHJpZ19tb2RlID0gMzsKKwkJCWJyZWFrOworCQljYXNlIDB4OTY6CS8qIG1pZGRsZSB3aW5kb3cgbW9kZSAqLworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRhdGFbMV0gJj0gfjB4ZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIG9uZSBsZXZlbCBtb2RlICovCisJCWlmIChiICE9IDApIHsKKwkJCWRhdGFbNF0gPSAwOworCQkJZXJyKys7CisJCX0KKwkJc3dpdGNoIChtb2RlYml0cykgeworCQljYXNlIDB4MDY6CS8qIGhpZ2ggd2luZG93IG1vZGUgKi8KKwkJCWRldnByaXYtPmF0cmlnX2hpZ2ggPSBhOworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAweDA5OgkvKiBsb3cgd2luZG93IG1vZGUgKi8KKwkJCWRldnByaXYtPmF0cmlnX2xvdyA9IGE7CisJCQlkZXZwcml2LT5hdHJpZ19tb2RlID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGF0YVsxXSAmPSB+MHhmZjsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChlcnIpCisJCXJldHVybiAtRUFHQUlOOworCXJldHVybiA1OworfQorCisvKiBtdW5nZSBkYXRhIGZyb20gdW5zaWduZWQgdG8gMidzIGNvbXBsZW1lbnQgZm9yIGFuYWxvZyBvdXRwdXQgYmlwb2xhciBtb2RlcyAqLworc3RhdGljIHZvaWQgbmlfYW9fbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgY2hhbl9pbmRleCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXVuc2lnbmVkIGludCByYW5nZTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5ndGggPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICphcnJheSA9IGRhdGE7CisKKwlvZmZzZXQgPSAxIDw8IChib2FyZHR5cGUuYW9iaXRzIC0gMSk7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXJhbmdlID0gQ1JfUkFOR0UoYXN5bmMtPmNtZC5jaGFubGlzdFtjaGFuX2luZGV4XSk7CisJCWlmIChib2FyZHR5cGUuYW9fdW5pcG9sYXIgPT0gMCB8fCAocmFuZ2UgJiAxKSA9PSAwKQorCQkJYXJyYXlbaV0gLT0gb2Zmc2V0OworI2lmZGVmIFBDSURNQQorCQlhcnJheVtpXSA9IGNwdV90b19sZTE2KGFycmF5W2ldKTsKKyNlbmRpZgorCQljaGFuX2luZGV4Kys7CisJCWNoYW5faW5kZXggJT0gYXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CisJfQorfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2FvX2NvbmZpZ19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCBjaGFuc3BlY1tdLCB1bnNpZ25lZCBpbnQgbl9jaGFucywKKwlpbnQgdGltZWQpCit7CisJdW5zaWduZWQgaW50IHJhbmdlOworCXVuc2lnbmVkIGludCBjaGFuOworCXVuc2lnbmVkIGludCBjb25mOworCWludCBpOworCWludCBpbnZlcnQgPSAwOworCisJaWYodGltZWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJvYXJkdHlwZS5uX2FvY2hhbjsgKytpKSB7CisJCQlkZXZwcml2LT5hb19jb25mW2ldICY9IH5NU2VyaWVzX0FPX1VwZGF0ZV9UaW1lZF9CaXQ7CisJCQluaV93cml0ZWIoZGV2cHJpdi0+YW9fY29uZltpXSwgTV9PZmZzZXRfQU9fQ29uZmlnX0JhbmsoaSkpOworCQkJbmlfd3JpdGViKDB4ZiwgTV9PZmZzZXRfQU9fV2F2ZWZvcm1fT3JkZXIoaSkpOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBuX2NoYW5zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZTsKKwkJY2hhbiA9IENSX0NIQU4oY2hhbnNwZWNbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNoYW5zcGVjW2ldKTsKKwkJa3JhbmdlID0gcy0+cmFuZ2VfdGFibGUtPnJhbmdlICsgcmFuZ2U7CisJCWludmVydCA9IDA7CisJCWNvbmYgPSAwOworCQlzd2l0Y2ggKGtyYW5nZS0+bWF4IC0ga3JhbmdlLT5taW4pIHsKKwkJY2FzZSAyMDAwMDAwMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfUmVmZXJlbmNlXzEwVl9JbnRlcm5hbF9CaXRzOworCQkJbmlfd3JpdGViKDAsIE1fT2Zmc2V0X0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbihjaGFuKSk7CisJCQlicmVhazsKKwkJY2FzZSAxMDAwMDAwMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfUmVmZXJlbmNlXzVWX0ludGVybmFsX0JpdHM7CisJCQluaV93cml0ZWIoMCwgTV9PZmZzZXRfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uKGNoYW4pKTsKKwkJCWJyZWFrOworCQljYXNlIDQwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV8xMFZfSW50ZXJuYWxfQml0czsKKwkJCW5pX3dyaXRlYihNU2VyaWVzX0F0dGVudWF0ZV94NV9CaXQsCisJCQkJTV9PZmZzZXRfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uKGNoYW4pKTsKKwkJCWJyZWFrOworCQljYXNlIDIwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV81Vl9JbnRlcm5hbF9CaXRzOworCQkJbmlfd3JpdGViKE1TZXJpZXNfQXR0ZW51YXRlX3g1X0JpdCwKKwkJCQlNX09mZnNldF9BT19SZWZlcmVuY2VfQXR0ZW51YXRpb24oY2hhbikpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydF9wcmludGsoIiVzOiBidWchIHVuaGFuZGxlZCBhbyByZWZlcmVuY2Ugdm9sdGFnZVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChrcmFuZ2UtPm1heCArIGtyYW5nZS0+bWluKSB7CisJCWNhc2UgMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfT2Zmc2V0XzBWX0JpdHM7CisJCQlicmVhazsKKwkJY2FzZSAxMDAwMDAwMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfT2Zmc2V0XzVWX0JpdHM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIGFvIG9mZnNldCB2b2x0YWdlXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJfQorCQlpZiAodGltZWQpCisJCQljb25mIHw9IE1TZXJpZXNfQU9fVXBkYXRlX1RpbWVkX0JpdDsKKwkJbmlfd3JpdGViKGNvbmYsIE1fT2Zmc2V0X0FPX0NvbmZpZ19CYW5rKGNoYW4pKTsKKwkJZGV2cHJpdi0+YW9fY29uZltjaGFuXSA9IGNvbmY7CisJCW5pX3dyaXRlYihpLCBNX09mZnNldF9BT19XYXZlZm9ybV9PcmRlcihjaGFuKSk7CisJfQorCXJldHVybiBpbnZlcnQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfb2xkX2FvX2NvbmZpZ19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBjaGFuc3BlY1tdLCB1bnNpZ25lZCBpbnQgbl9jaGFucykKK3sKKwl1bnNpZ25lZCBpbnQgcmFuZ2U7CisJdW5zaWduZWQgaW50IGNoYW47CisJdW5zaWduZWQgaW50IGNvbmY7CisJaW50IGk7CisJaW50IGludmVydCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuczsgaSsrKSB7CisJCWNoYW4gPSBDUl9DSEFOKGNoYW5zcGVjW2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjaGFuc3BlY1tpXSk7CisJCWNvbmYgPSBBT19DaGFubmVsKGNoYW4pOworCisJCWlmIChib2FyZHR5cGUuYW9fdW5pcG9sYXIpIHsKKwkJCWlmICgocmFuZ2UgJiAxKSA9PSAwKSB7CisJCQkJY29uZiB8PSBBT19CaXBvbGFyOworCQkJCWludmVydCA9ICgxIDw8IChib2FyZHR5cGUuYW9iaXRzIC0gMSkpOworCQkJfSBlbHNlIHsKKwkJCQlpbnZlcnQgPSAwOworCQkJfQorCQkJaWYgKHJhbmdlICYgMikKKwkJCQljb25mIHw9IEFPX0V4dF9SZWY7CisJCX0gZWxzZSB7CisJCQljb25mIHw9IEFPX0JpcG9sYXI7CisJCQlpbnZlcnQgPSAoMSA8PCAoYm9hcmR0eXBlLmFvYml0cyAtIDEpKTsKKwkJfQorCisJCS8qIG5vdCBhbGwgYm9hcmRzIGNhbiBkZWdsaXRjaCwgYnV0IHRoaXMgc2hvdWxkbid0IGh1cnQgKi8KKwkJaWYgKGNoYW5zcGVjW2ldICYgQ1JfREVHTElUQ0gpCisJCQljb25mIHw9IEFPX0RlZ2xpdGNoOworCisJCS8qIGFuYWxvZyByZWZlcmVuY2UgKi8KKwkJLyogQVJFRl9PVEhFUiBjb25uZWN0cyBBTyBncm91bmQgdG8gQUkgZ3JvdW5kLCBpIHRoaW5rICovCisJCWNvbmYgfD0gKENSX0FSRUYoY2hhbnNwZWNbaV0pID09CisJCQlBUkVGX09USEVSKSA/IEFPX0dyb3VuZF9SZWYgOiAwOworCisJCW5pX3dyaXRldyhjb25mLCBBT19Db25maWd1cmF0aW9uKTsKKwkJZGV2cHJpdi0+YW9fY29uZltjaGFuXSA9IGNvbmY7CisJfQorCXJldHVybiBpbnZlcnQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9fY29uZmlnX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IGNoYW5zcGVjW10sIHVuc2lnbmVkIGludCBuX2NoYW5zLCBpbnQgdGltZWQpCit7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQlyZXR1cm4gbmlfbV9zZXJpZXNfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgY2hhbnNwZWMsIG5fY2hhbnMsCisJCQl0aW1lZCk7CisJZWxzZQorCQlyZXR1cm4gbmlfb2xkX2FvX2NvbmZpZ19jaGFubGlzdChkZXYsIHMsIGNoYW5zcGVjLCBuX2NoYW5zKTsKK30KK3N0YXRpYyBpbnQgbmlfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+YW9bQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBpbnQgaW52ZXJ0OworCisJaW52ZXJ0ID0gbmlfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgJmluc24tPmNoYW5zcGVjLCAxLCAwKTsKKworCWRldnByaXYtPmFvW2NoYW5dID0gZGF0YVswXTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQluaV93cml0ZXcoZGF0YVswXSwgTV9PZmZzZXRfREFDX0RpcmVjdF9EYXRhKGNoYW4pKTsKKwl9IGVsc2UKKwkJbmlfd3JpdGV3KGRhdGFbMF0gXiBpbnZlcnQsCisJCQkoY2hhbikgPyBEQUMxX0RpcmVjdF9EYXRhIDogREFDMF9EaXJlY3RfRGF0YSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9hb19pbnNuX3dyaXRlXzY3MXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgaW50IGludmVydDsKKworCWFvX3dpbl9vdXQoMSA8PCBjaGFuLCBBT19JbW1lZGlhdGVfNjcxeCk7CisJaW52ZXJ0ID0gMSA8PCAoYm9hcmR0eXBlLmFvYml0cyAtIDEpOworCisJbmlfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgJmluc24tPmNoYW5zcGVjLCAxLCAwKTsKKworCWRldnByaXYtPmFvW2NoYW5dID0gZGF0YVswXTsKKwlhb193aW5fb3V0KGRhdGFbMF0gXiBpbnZlcnQsIERBQ3hfRGlyZWN0X0RhdGFfNjcxeChjaGFuKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9hb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfSEFSRFdBUkVfQlVGRkVSX1NJWkU6CisJCXN3aXRjaChkYXRhWzFdKQorCQl7CisJCWNhc2UgQ09NRURJX09VVFBVVDoKKwkJCWRhdGFbMl0gPSAxICsgYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGggKiBzaXplb2Yoc2hvcnQpOworCQkJaWYoZGV2cHJpdi0+bWl0ZSkgZGF0YVsyXSArPSBkZXZwcml2LT5taXRlLT5maWZvX3NpemU7CisJCQlicmVhazsKKwkJY2FzZSBDT01FRElfSU5QVVQ6CisJCQlkYXRhWzJdID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBuaV9hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaW50IHJldDsKKwlpbnQgaW50ZXJydXB0X2JfYml0czsKKwlpbnQgaTsKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwOworCisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOdWxsIHRyaWcgYXQgYmVnaW5uaW5nIHByZXZlbnQgYW8gc3RhcnQgdHJpZ2dlciBmcm9tIGV4ZWN1dGluZyBtb3JlIHRoYW4KKwkgICBvbmNlIHBlciBjb21tYW5kIChhbmQgZG9pbmcgdGhpbmdzIGxpa2UgdHJ5aW5nIHRvIGFsbG9jYXRlIHRoZSBhbyBkbWEgY2hhbm5lbAorCSAgIG11bHRpcGxlIHRpbWVzKSAqLworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQlBT19GSUZPX0ludGVycnVwdF9FbmFibGUgfCBBT19FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwlpbnRlcnJ1cHRfYl9iaXRzID0gQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZTsKKyNpZmRlZiBQQ0lETUEKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgREFDX0ZJRk9fQ2xlYXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKQorCQluaV9hb193aW5fb3V0bChkZXYsIDB4NiwgQU9fRklGT19PZmZzZXRfTG9hZF82MTF4KTsKKwlyZXQgPSBuaV9hb19zZXR1cF9NSVRFX2RtYShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gbmlfYW9fd2FpdF9mb3JfZG1hX2xvYWQoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0ID0gbmlfYW9fcHJlcF9maWZvKGRldiwgcyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVQSVBFOworCisJaW50ZXJydXB0X2JfYml0cyB8PSBBT19GSUZPX0ludGVycnVwdF9FbmFibGU7CisjZW5kaWYKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMyB8IEFPX05vdF9Bbl9VUERBVEUsCisJCUFPX01vZGVfM19SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUzLCBBT19Nb2RlXzNfUmVnaXN0ZXIpOworCS8qIHdhaXQgZm9yIERBQ3MgdG8gYmUgbG9hZGVkICovCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQljb21lZGlfdWRlbGF5KDEpOworCQlpZiAoKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCUpvaW50X1N0YXR1c18yX1JlZ2lzdGVyKSAmCisJCQkJQU9fVE1SREFDV1JzX0luX1Byb2dyZXNzX1N0KSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgQU9fVE1SREFDV1JzX0luX1Byb2dyZXNzX1N0IHRvIGNsZWFyIik7CisJCXJldHVybiAtRUlPOworCX0KKwkvLyBzdGMgbWFudWFsIHNheXMgd2UgYXJlIG5lZWQgdG8gY2xlYXIgZXJyb3IgaW50ZXJydXB0IGFmdGVyIEFPX1RNUkRBQ1dSc19Jbl9Qcm9ncmVzc19TdCBjbGVhcnMKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fRXJyb3JfSW50ZXJydXB0X0FjaywKKwkJSW50ZXJydXB0X0JfQWNrX1JlZ2lzdGVyKTsKKworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLCBpbnRlcnJ1cHRfYl9iaXRzLCAxKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQlkZXZwcml2LT4KKwkJYW9fY21kMSB8IEFPX1VJX0FybSB8IEFPX1VDX0FybSB8IEFPX0JDX0FybSB8CisJCUFPX0RBQzFfVXBkYXRlX01vZGUgfCBBT19EQUMwX1VwZGF0ZV9Nb2RlLAorCQlBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDIgfCBBT19TVEFSVDFfUHVsc2UsCisJCUFPX0NvbW1hbmRfMl9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGJpdHM7CisJaW50IGk7CisJdW5zaWduZWQgdHJpZ3ZhcjsKKworCWlmIChkZXYtPmlycSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJjYW5ub3QgcnVuIGNvbW1hbmQgd2l0aG91dCBhbiBpcnEiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0NvbmZpZ3VyYXRpb25fU3RhcnQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19EaXNhcm0sIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzZ4eHhfbWFzaykgeworCQlhb193aW5fb3V0KENMRUFSX1dHLCBBT19NaXNjXzYxMXgpOworCisJCWJpdHMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaW50IGNoYW47CisKKwkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQkJYml0cyB8PSAxIDw8IGNoYW47CisJCQlhb193aW5fb3V0KGNoYW4sIEFPX1dhdmVmb3JtX0dlbmVyYXRpb25fNjExeCk7CisJCX0KKwkJYW9fd2luX291dChiaXRzLCBBT19UaW1lZF82MTF4KTsKKwl9CisKKwluaV9hb19jb25maWdfY2hhbmxpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LCBjbWQtPmNoYW5saXN0X2xlbiwgMSk7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fQ29udGludW91czsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgJj0gfkFPX1RyaWdnZXJfT25jZTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5hb19tb2RlMSAmPSB+QU9fQ29udGludW91czsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fVHJpZ2dlcl9PbmNlOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJY2FzZSBUUklHX05PVzoKKwkJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgJj0KKwkJCX4oQU9fU1RBUlQxX1BvbGFyaXR5IHwgQU9fU1RBUlQxX1NlbGVjdCgtMSkpOworCQlkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCB8PSBBT19TVEFSVDFfRWRnZSB8IEFPX1NUQVJUMV9TeW5jOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QsCisJCQlBT19UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisgICAgICAgICAgICAgICAgZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgPSBBT19TVEFSVDFfU2VsZWN0KENSX0NIQU4oY21kLT5zdGFydF9hcmcpKzEpOworCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQlkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCB8PSBBT19TVEFSVDFfUG9sYXJpdHk7ICAvLyAwPWFjdGl2ZSBoaWdoLCAxPWFjdGl2ZSBsb3cuIHNlZSBkYXEtc3RjIDMtMjQgKHAxODYpCisJCWlmIChjbWQtPnN0YXJ0X2FyZyAmIENSX0VER0UpCisJCQlkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCB8PSBBT19TVEFSVDFfRWRnZTsgICAgICAvLyAwPWVkZ2UgZGV0ZWN0aW9uIGRpc2FibGVkLCAxPWVuYWJsZWQKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX3RyaWdnZXJfc2VsZWN0LCBBT19UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJZGV2cHJpdi0+YW9fbW9kZTMgJj0gfkFPX1RyaWdnZXJfTGVuZ3RoOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMywgQU9fTW9kZV8zX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMSwgQU9fTW9kZV8xX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5hb19tb2RlMiAmPSB+QU9fQkNfSW5pdGlhbF9Mb2FkX1NvdXJjZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTIsIEFPX01vZGVfMl9SZWdpc3Rlcik7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCAweGZmZmZmZiwgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMCwgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyKTsKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0JDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTIgJj0gfkFPX1VDX0luaXRpYWxfTG9hZF9Tb3VyY2U7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUyLCBBT19Nb2RlXzJfUmVnaXN0ZXIpOworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJaWYoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXsKKwkJCS8vIHRoaXMgaXMgaG93IHRoZSBOSSBleGFtcGxlIGNvZGUgZG9lcyBpdCBmb3IgbS1zZXJpZXMgYm9hcmRzLCB2ZXJpZmllZCBjb3JyZWN0IHdpdGggNjI1OQorCQkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIGNtZC0+c3RvcF9hcmcgLSAxLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCX1lbHNlCisJCXsKKwkJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBjbWQtPnN0b3BfYXJnLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgY21kLT5zdG9wX2FyZyAtIDEsCisJCQkJQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDB4ZmZmZmZmLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fVUNfTG9hZCwgQU9fQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDB4ZmZmZmZmLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMCwgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBjbWQtPnN0b3BfYXJnLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCX0KKworCWRldnByaXYtPmFvX21vZGUxICY9CisJCX4oQU9fVUlfU291cmNlX1NlbGVjdCgweDFmKSB8IEFPX1VJX1NvdXJjZV9Qb2xhcml0eSB8CisJCUFPX1VQREFURV9Tb3VyY2VfU2VsZWN0KDB4MWYpIHwgQU9fVVBEQVRFX1NvdXJjZV9Qb2xhcml0eSk7CisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5hb19jbWQyICY9IH5BT19CQ19HYXRlX0VuYWJsZTsKKwkJdHJpZ3ZhciA9CisJCQluaV9uc190b190aW1lcihkZXYsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQlUUklHX1JPVU5EX05FQVJFU1QpOworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMSwgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VJX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCB0cmlndmFyLCBBT19VSV9Mb2FkX0FfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlkZXZwcml2LT5hb19tb2RlMSB8PQorCQkJQU9fVVBEQVRFX1NvdXJjZV9TZWxlY3QoY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfSU5WRVJUKQorCQkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fVVBEQVRFX1NvdXJjZV9Qb2xhcml0eTsKKwkJZGV2cHJpdi0+YW9fY21kMiB8PSBBT19CQ19HYXRlX0VuYWJsZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fY21kMiwgQU9fQ29tbWFuZF8yX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTIgJj0KKwkJfihBT19VSV9SZWxvYWRfTW9kZSgzKSB8IEFPX1VJX0luaXRpYWxfTG9hZF9Tb3VyY2UpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMiwgQU9fTW9kZV8yX1JlZ2lzdGVyKTsKKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA+IDEpIHsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fTXVsdGlwbGVfQ2hhbm5lbHM7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQkJQU9fTnVtYmVyX09mX0NoYW5uZWxzKGNtZC0+c2Nhbl9lbmRfYXJnIC0KKwkJCQkxKSB8CisJCQlBT19VUERBVEVfT3V0cHV0X1NlbGVjdAorCQkJKEFPX1VwZGF0ZV9PdXRwdXRfSGlnaF9aKSwKKwkJCUFPX091dHB1dF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBiaXRzOworCQlkZXZwcml2LT5hb19tb2RlMSAmPSB+QU9fTXVsdGlwbGVfQ2hhbm5lbHM7CisJCWJpdHMgPSBBT19VUERBVEVfT3V0cHV0X1NlbGVjdChBT19VcGRhdGVfT3V0cHV0X0hpZ2hfWik7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiAobmlfcmVnX21fc2VyaWVzX21hc2sgfCBuaV9yZWdfNnh4eF9tYXNrKSkgeworCQkJYml0cyB8PSBBT19OdW1iZXJfT2ZfQ2hhbm5lbHMoMCk7CisJCX0gZWxzZSB7CisJCQliaXRzIHw9IEFPX051bWJlcl9PZl9DaGFubmVscyhDUl9DSEFOKGNtZC0+CisJCQkJCWNoYW5saXN0WzBdKSk7CisJCX0KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGJpdHMsCisJCQlBT19PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMSwgQU9fTW9kZV8xX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19EQUMwX1VwZGF0ZV9Nb2RlIHwgQU9fREFDMV9VcGRhdGVfTW9kZSwKKwkJQU9fQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPmFvX21vZGUzIHw9IEFPX1N0b3BfT25fT3ZlcnJ1bl9FcnJvcjsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTMsIEFPX01vZGVfM19SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5hb19tb2RlMiAmPSB+QU9fRklGT19Nb2RlX01hc2s7CisjaWZkZWYgUENJRE1BCisJZGV2cHJpdi0+YW9fbW9kZTIgfD0gQU9fRklGT19Nb2RlX0hGX3RvX0Y7CisjZWxzZQorCWRldnByaXYtPmFvX21vZGUyIHw9IEFPX0ZJRk9fTW9kZV9IRjsKKyNlbmRpZgorCWRldnByaXYtPmFvX21vZGUyICY9IH5BT19GSUZPX1JldHJhbnNtaXRfRW5hYmxlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMiwgQU9fTW9kZV8yX1JlZ2lzdGVyKTsKKworCWJpdHMgPSBBT19CQ19Tb3VyY2VfU2VsZWN0IHwgQU9fVVBEQVRFX1B1bHNlX1dpZHRoIHwKKwkJQU9fVE1SREFDV1JfUHVsc2VfV2lkdGg7CisJaWYgKGJvYXJkdHlwZS5hb19maWZvX2RlcHRoKQorCQliaXRzIHw9IEFPX0ZJRk9fRW5hYmxlOworCWVsc2UKKwkJYml0cyB8PSBBT19ETUFfUElPX0NvbnRyb2w7CisjaWYgMAorCS8qIEYgSGVzczogd2luZG93cyBkcml2ZXIgZG9lcyBub3Qgc2V0IEFPX051bWJlcl9PZl9EQUNfUGFja2FnZXMgYml0IGZvciA2MjgxLAorCSAgIHZlcmlmaWVkIHdpdGggYnVzIGFuYWx5emVyLiAqLworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJYml0cyB8PSBBT19OdW1iZXJfT2ZfREFDX1BhY2thZ2VzOworI2VuZGlmCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGJpdHMsIEFPX1BlcnNvbmFsX1JlZ2lzdGVyKTsKKwkvLyBlbmFibGUgc2VuZGluZyBvZiBhbyBkbWEgcmVxdWVzdHMKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQU9GUkVRX0VuYWJsZSwgQU9fU3RhcnRfU2VsZWN0X1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19Db25maWd1cmF0aW9uX0VuZCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQkNfVENfSW50ZXJydXB0X0FjaywKKwkJCUludGVycnVwdF9CX0Fja19SZWdpc3Rlcik7CisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJQU9fQkNfVENfSW50ZXJydXB0X0VuYWJsZSwgMSk7CisJfQorCisJcy0+YXN5bmMtPmludHRyaWcgPSAmbmlfYW9faW50dHJpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCWlmICgoY21kLT5mbGFncyAmIENNREZfV1JJVEUpID09IDApIHsKKwkJY21kLT5mbGFncyB8PSBDTURGX1dSSVRFOworCX0KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJdW5zaWduZWQgaW50IHRtcCA9IENSX0NIQU4oY21kLT5zdGFydF9hcmcpOworCisJCWlmICh0bXAgPiAxOCkKKwkJCXRtcCA9IDE4OworCQl0bXAgfD0gKGNtZC0+c3RhcnRfYXJnICYgKENSX0lOVkVSVCB8IENSX0VER0UpKTsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICE9IHRtcCkgeworCQkJY21kLT5zdGFydF9hcmcgPSB0bXA7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCQkvKiB0cnVlIGZvciBib3RoIFRSSUdfTk9XIGFuZCBUUklHX0lOVCAqLworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IGJvYXJkdHlwZS5hb19zcGVlZCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGJvYXJkdHlwZS5hb19zcGVlZDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmZmZikgewkvKiBYWFggY2hlY2sgKi8KKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBkZXZwcml2LT5jbG9ja19ucyAqIDB4ZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewkvKiBYWFggY2hlY2sgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgPiAweDAwZmZmZmZmKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMHgwMGZmZmZmZjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJbmlfdGltZXJfdG9fbnMoZGV2LCBuaV9uc190b190aW1lcihkZXYsCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKSk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIHN0ZXAgNTogZml4IHVwIGNoYW5saXN0ICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy9kZXZwcml2LT5hbzBwPTB4MDAwMDsKKwkvL25pX3dyaXRldyhkZXZwcml2LT5hbzBwLEFPX0NvbmZpZ3VyYXRpb24pOworCisJLy9kZXZwcml2LT5hbzFwPUFPX0NoYW5uZWwoMSk7CisJLy9uaV93cml0ZXcoZGV2cHJpdi0+YW8xcCxBT19Db25maWd1cmF0aW9uKTsKKworCW5pX3JlbGVhc2VfYW9fbWl0ZV9jaGFubmVsKGRldik7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQ29uZmlndXJhdGlvbl9TdGFydCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19EaXNhcm0sIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsIH4wLCAwKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQkNfU291cmNlX1NlbGVjdCwgQU9fUGVyc29uYWxfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAweDNmOTgsIEludGVycnVwdF9CX0Fja19SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0JDX1NvdXJjZV9TZWxlY3QgfCBBT19VUERBVEVfUHVsc2VfV2lkdGggfAorCQlBT19UTVJEQUNXUl9QdWxzZV9XaWR0aCwgQU9fUGVyc29uYWxfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBBT19PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDAsIEFPX1N0YXJ0X1NlbGVjdF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fY21kMSA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDEsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fY21kMiA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDIsIEFPX0NvbW1hbmRfMl9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTEgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMSwgQU9fTW9kZV8xX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5hb19tb2RlMiA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUyLCBBT19Nb2RlXzJfUmVnaXN0ZXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJZGV2cHJpdi0+YW9fbW9kZTMgPSBBT19MYXN0X0dhdGVfRGlzYWJsZTsKKwllbHNlCisJCWRldnByaXYtPmFvX21vZGUzID0gMDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTMsIEFPX01vZGVfM19SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCwKKwkJQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKSB7CisJCXVuc2lnbmVkIGltbWVkaWF0ZV9iaXRzID0gMDsKKwkJdW5zaWduZWQgaTsKKwkJZm9yKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyArK2kpCisJCXsKKwkJCWltbWVkaWF0ZV9iaXRzIHw9IDEgPDwgaTsKKwkJfQorCQlhb193aW5fb3V0KGltbWVkaWF0ZV9iaXRzLCBBT19JbW1lZGlhdGVfNjcxeCk7CisJCWFvX3dpbl9vdXQoQ0xFQVJfV0csIEFPX01pc2NfNjExeCk7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19Db25maWd1cmF0aW9uX0VuZCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8vIGRpZ2l0YWwgaW8KKworc3RhdGljIGludCBuaV9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworI2lmZGVmIERFQlVHX0RJTworCXJ0X3ByaW50aygibmlfZGlvX2luc25fY29uZmlnKCkgY2hhbj0lZCBpbz0lZFxuIiwKKwkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIGRhdGFbMF0pOworI2VuZGlmCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fUGluc19EaXJfTWFzazsKKwlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fUGluc19EaXIocy0+aW9fYml0cyk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19jb250cm9sLCBESU9fQ29udHJvbF9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKyNpZmRlZiBERUJVR19ESU8KKwlydF9wcmludGsoIm5pX2Rpb19pbnNuX2JpdHMoKSBtYXNrPTB4JXggYml0cz0weCV4XG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKyNlbmRpZgorCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCS8qIFBlcmZvcm0gY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCB1c2luZyB0aGUKKwkJICAgc2VyaWFsIHBhcnQgb2YgdGhlIGRpbyAqLworCQlpZiAoKGRhdGFbMF0gJiAoRElPX1NESU4gfCBESU9fU0RPVVQpKQorCQkJJiYgZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJZGV2cHJpdi0+ZGlvX291dHB1dCAmPSB+RElPX1BhcmFsbGVsX0RhdGFfTWFzazsKKwkJZGV2cHJpdi0+ZGlvX291dHB1dCB8PSBESU9fUGFyYWxsZWxfRGF0YV9PdXQocy0+c3RhdGUpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX291dHB1dCwKKwkJCURJT19PdXRwdXRfUmVnaXN0ZXIpOworCX0KKwlkYXRhWzFdID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9tX3Nlcmllc19kaW9faW5zbl9jb25maWcoKSBjaGFuPSVkIGlvPSVkXG4iLAorCQlDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgZGF0YVswXSk7CisjZW5kaWYKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gfigxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPmlvX2JpdHMgJiAoMSA8PCBDUl9DSEFOKGluc24tPgorCQkJCQljaGFuc3BlYykpKSA/IENPTUVESV9PVVRQVVQgOgorCQkJQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmlfd3JpdGVsKHMtPmlvX2JpdHMsIE1fT2Zmc2V0X0RJT19EaXJlY3Rpb24pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfbV9zZXJpZXNfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9tX3Nlcmllc19kaW9faW5zbl9iaXRzKCkgbWFzaz0weCV4IGJpdHM9MHgleFxuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSk7CisjZW5kaWYKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJbmlfd3JpdGVsKHMtPnN0YXRlLCBNX09mZnNldF9TdGF0aWNfRGlnaXRhbF9PdXRwdXQpOworCX0KKwlkYXRhWzFdID0gbmlfcmVhZGwoTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfSW5wdXQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfY2Rpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwlpbnQgc291cmNlczsKKwl1bnNpZ25lZCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCXNvdXJjZXMgPSBUUklHX0lOVDsKKwljbWQtPnN0YXJ0X3NyYyAmPSBzb3VyY2VzOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUuLi4gKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCS8qIC4uLiBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQl0bXAgJj0gQ1JfUEFDS19GTEFHUyhDRE9fU2FtcGxlX1NvdXJjZV9TZWxlY3RfTWFzaywgMCwgMCwKKwkJCUNSX0lOVkVSVCk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogc3RlcCA1OiBjaGVjayBjaGFubGlzdCAqLworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpIHsKKwkJaWYgKGNtZC0+Y2hhbmxpc3RbaV0gIT0gaSkKKwkJCWVyciA9IDE7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9jZGlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBjZG9fbW9kZV9iaXRzID0gQ0RPX0ZJRk9fTW9kZV9CaXQgfCBDRE9fSGFsdF9Pbl9FcnJvcl9CaXQ7CisJaW50IHJldHZhbDsKKworCW5pX3dyaXRlbChDRE9fUmVzZXRfQml0LCBNX09mZnNldF9DRElPX0NvbW1hbmQpOworCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19FWFQ6CisJCWNkb19tb2RlX2JpdHMgfD0KKwkJCUNSX0NIQU4oY21kLT4KKwkJCXNjYW5fYmVnaW5fYXJnKSAmIENET19TYW1wbGVfU291cmNlX1NlbGVjdF9NYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfSU5WRVJUKQorCQljZG9fbW9kZV9iaXRzIHw9IENET19Qb2xhcml0eV9CaXQ7CisJbmlfd3JpdGVsKGNkb19tb2RlX2JpdHMsIE1fT2Zmc2V0X0NET19Nb2RlKTsKKwlpZiAocy0+aW9fYml0cykgeworCQluaV93cml0ZWwocy0+c3RhdGUsIE1fT2Zmc2V0X0NET19GSUZPX0RhdGEpOworCQluaV93cml0ZWwoQ0RPX1NXX1VwZGF0ZV9CaXQsIE1fT2Zmc2V0X0NESU9fQ29tbWFuZCk7CisJCW5pX3dyaXRlbChzLT5pb19iaXRzLCBNX09mZnNldF9DRE9fTWFza19FbmFibGUpOworCX0gZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiYXR0ZW1wdGVkIHRvIHJ1biBkaWdpdGFsIG91dHB1dCBjb21tYW5kIHdpdGggbm8gbGluZXMgY29uZmlndXJlZCBhcyBvdXRwdXRzIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR2YWwgPSBuaV9yZXF1ZXN0X2Nkb19taXRlX2NoYW5uZWwoZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlzLT5hc3luYy0+aW50dHJpZyA9ICZuaV9jZG9faW50dHJpZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9jZG9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZW5kaWYKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIHRpbWVvdXQgPSAxMDA7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwkvKiByZWFkIGFsbG9jIHRoZSBlbnRpcmUgYnVmZmVyICovCisJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCisjaWZkZWYgUENJRE1BCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuKSB7CisJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiwgMzIsIDMyKTsKKwkJbWl0ZV9kbWFfYXJtKGRldnByaXYtPmNkb19taXRlX2NoYW4pOworCX0gZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJCVUc6IG5vIGNkbyBtaXRlIGNoYW5uZWw/Iik7CisJCXJldHZhbCA9IC1FSU87CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworI2VuZGlmCisvLyBYWFggbm90IHN1cmUgd2hhdCBpbnRlcnJ1cHQgQyBncm91cCBkb2VzCisvLyAgICAgIG5pX3dyaXRlYihJbnRlcnJ1cHRfR3JvdXBfQ19FbmFibGVfQml0LCBNX09mZnNldF9JbnRlcnJ1cHRfQ19FbmFibGUpOworCS8vd2FpdCBmb3IgZG1hIHRvIGZpbGwgb3V0cHV0IGZpZm8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgKytpKSB7CisJCWlmIChuaV9yZWFkbChNX09mZnNldF9DRElPX1N0YXR1cykgJiBDRE9fRklGT19GdWxsX0JpdCkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEwKTsKKwl9CisJaWYgKGkgPT0gdGltZW91dCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZG1hIGZhaWxlZCB0byBmaWxsIGNkbyBmaWZvISIpOworCQluaV9jZGlvX2NhbmNlbChkZXYsIHMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbmlfd3JpdGVsKENET19Bcm1fQml0IHwgQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCB8CisJCUNET19FbXB0eV9GSUZPX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCwgTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX2NkaW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJbmlfd3JpdGVsKENET19EaXNhcm1fQml0IHwgQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0IHwKKwkJQ0RPX0VtcHR5X0ZJRk9fSW50ZXJydXB0X0VuYWJsZV9DbGVhcl9CaXQgfAorCQlDRE9fRklGT19SZXF1ZXN0X0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0LAorCQlNX09mZnNldF9DRElPX0NvbW1hbmQpOworLy8gWFhYIG5vdCBzdXJlIHdoYXQgaW50ZXJydXB0IEMgZ3JvdXAgZG9lcworLy8gICAgICBuaV93cml0ZWIoMCwgTV9PZmZzZXRfSW50ZXJydXB0X0NfRW5hYmxlKTsKKwluaV93cml0ZWwoMCwgTV9PZmZzZXRfQ0RPX01hc2tfRW5hYmxlKTsKKwluaV9yZWxlYXNlX2Nkb19taXRlX2NoYW5uZWwoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NkaW9faW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGNkaW9fc3RhdHVzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfRElPX1NVQkRFVjsKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2VuZGlmCisKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSA9PSAwKSB7CisJCXJldHVybjsKKwl9CisjaWZkZWYgUENJRE1BCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuKSB7CisJCXVuc2lnbmVkIGNkb19taXRlX3N0YXR1cyA9CisJCQltaXRlX2dldF9zdGF0dXMoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbik7CisJCWlmIChjZG9fbWl0ZV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CisJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQlkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKworCQkJCU1JVEVfQ0hPUihkZXZwcml2LT5jZG9fbWl0ZV9jaGFuLT5jaGFubmVsKSk7CisJCX0KKwkJbWl0ZV9zeW5jX291dHB1dF9kbWEoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiwgcy0+YXN5bmMpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZgorCisJY2Rpb19zdGF0dXMgPSBuaV9yZWFkbChNX09mZnNldF9DRElPX1N0YXR1cyk7CisJaWYgKGNkaW9fc3RhdHVzICYgKENET19PdmVycnVuX0JpdCB8IENET19VbmRlcmZsb3dfQml0KSkgeworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiY2RpbyBlcnJvcjogc3RhdHV4PTB4JXhcbiIsIGNkaW9fc3RhdHVzKTsKKwkJbmlfd3JpdGVsKENET19FcnJvcl9JbnRlcnJ1cHRfQ29uZmlybV9CaXQsIE1fT2Zmc2V0X0NESU9fQ29tbWFuZCk7CS8vIFhYWCBqdXN0IGd1ZXNzaW5nIHRoaXMgaXMgbmVlZGVkIGFuZCBkb2VzIHNvbWV0aGluZyB1c2VmdWwKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJfQorCWlmIChjZGlvX3N0YXR1cyAmIENET19GSUZPX0VtcHR5X0JpdCkgeworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiY2RpbyBmaWZvIGVtcHR5XG4iKTsKKwkJbmlfd3JpdGVsKENET19FbXB0eV9GSUZPX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0LAorCQkJTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKy8vICAgICAgICAgICAgICBzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCW5pX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgZXJyID0gaW5zbi0+bjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfb3V0LCBieXRlX2luID0gMDsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19TRVJJQUxfQ0xPQ0s6CisKKyNpZmRlZiBERUJVR19ESU8KKwkJcnRfcHJpbnRrKCJTUEkgc2VyaWFsIGNsb2NrIENvbmZpZyBjZFxuIiwgZGF0YVsxXSk7CisjZW5kaWYKKwkJZGV2cHJpdi0+c2VyaWFsX2h3X21vZGUgPSAxOworCQlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fSFdfU2VyaWFsX0VuYWJsZTsKKworCQlpZiAoZGF0YVsxXSA9PSBTRVJJQUxfRElTQUJMRUQpIHsKKwkJCWRldnByaXYtPnNlcmlhbF9od19tb2RlID0gMDsKKwkJCWRldnByaXYtPmRpb19jb250cm9sICY9IH4oRElPX0hXX1NlcmlhbF9FbmFibGUgfAorCQkJCURJT19Tb2Z0d2FyZV9TZXJpYWxfQ29udHJvbCk7CisJCQlkYXRhWzFdID0gU0VSSUFMX0RJU0FCTEVEOworCQkJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gZGF0YVsxXTsKKwkJfSBlbHNlIGlmIChkYXRhWzFdIDw9IFNFUklBTF82MDBOUykgeworCQkJLyogV2FybmluZzogdGhpcyBjbG9jayBzcGVlZCBpcyB0b28gZmFzdCB0byByZWxpYWJseQorCQkJICAgY29udHJvbCBTQ1hJLiAqLworCQkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgJj0gfkRJT19IV19TZXJpYWxfVGltZWJhc2U7CisJCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dCB8PSBTbG93X0ludGVybmFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgJj0gfkRJT19TZXJpYWxfT3V0X0RpdmlkZV9CeV8yOworCQkJZGF0YVsxXSA9IFNFUklBTF82MDBOUzsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA8PSBTRVJJQUxfMV8yVVMpIHsKKwkJCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fSFdfU2VyaWFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gU2xvd19JbnRlcm5hbF9UaW1lYmFzZSB8CisJCQkJRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzI7CisJCQlkYXRhWzFdID0gU0VSSUFMXzFfMlVTOworCQkJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gZGF0YVsxXTsKKwkJfSBlbHNlIGlmIChkYXRhWzFdIDw9IFNFUklBTF8xMFVTKSB7CisJCQlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fSFdfU2VyaWFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gU2xvd19JbnRlcm5hbF9UaW1lYmFzZSB8CisJCQkJRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzI7CisJCQkvKiBOb3RlOiBESU9fU2VyaWFsX091dF9EaXZpZGVfQnlfMiBvbmx5IGFmZmVjdHMKKwkJCSAgIDYwMG5zLzEuMnVzLiBJZiB5b3UgdHVybiBkaXZpZGVfYnlfMiBvZmYgd2l0aCB0aGUKKwkJCSAgIHNsb3cgY2xvY2ssIHlvdSB3aWxsIHN0aWxsIGdldCAxMHVzLCBleGNlcHQgdGhlbgorCQkJICAgYWxsIHlvdXIgZGVsYXlzIGFyZSB3cm9uZy4gKi8KKwkJCWRhdGFbMV0gPSBTRVJJQUxfMTBVUzsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5kaW9fY29udHJvbCAmPSB+KERJT19IV19TZXJpYWxfRW5hYmxlIHwKKwkJCQlESU9fU29mdHdhcmVfU2VyaWFsX0NvbnRyb2wpOworCQkJZGV2cHJpdi0+c2VyaWFsX2h3X21vZGUgPSAwOworCQkJZGF0YVsxXSA9IChkYXRhWzFdIC8gMTAwMCkgKiAxMDAwOworCQkJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gZGF0YVsxXTsKKwkJfQorCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwKKwkJCURJT19Db250cm9sX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmNsb2NrX2FuZF9mb3V0LAorCQkJQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIpOworCQlyZXR1cm4gMTsKKworCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfQklESVJFQ1RJT05BTF9EQVRBOgorCisJCWlmIChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgPT0gMCkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlieXRlX291dCA9IGRhdGFbMV0gJiAweEZGOworCisJCWlmIChkZXZwcml2LT5zZXJpYWxfaHdfbW9kZSkgeworCQkJZXJyID0gbmlfc2VyaWFsX2h3X3JlYWR3cml0ZTgoZGV2LCBzLCBieXRlX291dCwKKwkJCQkmYnl0ZV9pbik7CisJCX0gZWxzZSBpZiAoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID4gMCkgeworCQkJZXJyID0gbmlfc2VyaWFsX3N3X3JlYWR3cml0ZTgoZGV2LCBzLCBieXRlX291dCwKKwkJCQkmYnl0ZV9pbik7CisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIm5pX3NlcmlhbF9pbnNuX2NvbmZpZzogc2VyaWFsIGRpc2FibGVkIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWRhdGFbMV0gPSBieXRlX2luICYgMHhGRjsKKwkJcmV0dXJuIGluc24tPm47CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCit9CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX2h3X3JlYWR3cml0ZTgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBjaGFyIGRhdGFfb3V0LCB1bnNpZ25lZCBjaGFyICpkYXRhX2luKQoreworCXVuc2lnbmVkIGludCBzdGF0dXMxOworCWludCBlcnIgPSAwLCBjb3VudCA9IDIwOworCisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9zZXJpYWxfaHdfcmVhZHdyaXRlODogb3V0cHV0dGluZyAweCV4XG4iLCBkYXRhX291dCk7CisjZW5kaWYKKworCWRldnByaXYtPmRpb19vdXRwdXQgJj0gfkRJT19TZXJpYWxfRGF0YV9NYXNrOworCWRldnByaXYtPmRpb19vdXRwdXQgfD0gRElPX1NlcmlhbF9EYXRhX091dChkYXRhX291dCk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19vdXRwdXQsIERJT19PdXRwdXRfUmVnaXN0ZXIpOworCisJc3RhdHVzMSA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEpvaW50X1N0YXR1c18xX1JlZ2lzdGVyKTsKKwlpZiAoc3RhdHVzMSAmIERJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIEVycm9yOworCX0KKworCWRldnByaXYtPmRpb19jb250cm9sIHw9IERJT19IV19TZXJpYWxfU3RhcnQ7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19jb250cm9sLCBESU9fQ29udHJvbF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgJj0gfkRJT19IV19TZXJpYWxfU3RhcnQ7CisKKwkvKiBXYWl0IHVudGlsIFNUQyBzYXlzIHdlJ3JlIGRvbmUsIGJ1dCBkb24ndCBsb29wIGluZmluaXRlbHkuICovCisJd2hpbGUgKChzdGF0dXMxID0KKwkJCWRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJSm9pbnRfU3RhdHVzXzFfUmVnaXN0ZXIpKSAmCisJCURJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QpIHsKKwkJLyogRGVsYXkgb25lIGJpdCBwZXIgbG9vcCAqLworCQljb21lZGlfdWRlbGF5KChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgKyA5OTkpIC8gMTAwMCk7CisJCWlmICgtLWNvdW50IDwgMCkgeworCQkJcnRfcHJpbnRrCisJCQkJKCJuaV9zZXJpYWxfaHdfcmVhZHdyaXRlODogU1BJIHNlcmlhbCBJL08gZGlkbid0IGZpbmlzaCBpbiB0aW1lIVxuIik7CisJCQllcnIgPSAtRVRJTUU7CisJCQlnb3RvIEVycm9yOworCQl9CisJfQorCisJLyogRGVsYXkgZm9yIGxhc3QgYml0LiBUaGlzIGRlbGF5IGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5LCBiZWNhdXNlCisJICAgRElPX1NlcmlhbF9JT19Jbl9Qcm9ncmVzc19TdCBnb2VzIGhpZ2ggb25lIGJpdCB0b28gZWFybHkuICovCisJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDEwMDApOworCisJaWYgKGRhdGFfaW4gIT0gTlVMTCkgeworCQkqZGF0YV9pbiA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIERJT19TZXJpYWxfSW5wdXRfUmVnaXN0ZXIpOworI2lmZGVmIERFQlVHX0RJTworCQlydF9wcmludGsoIm5pX3NlcmlhbF9od19yZWFkd3JpdGU4OiBpbnB1dHRlZCAweCV4XG4iLCAqZGF0YV9pbik7CisjZW5kaWYKKwl9CisKKyAgICAgIEVycm9yOgorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwgRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBuaV9zZXJpYWxfc3dfcmVhZHdyaXRlOChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGNoYXIgZGF0YV9vdXQsIHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4pCit7CisJdW5zaWduZWQgY2hhciBtYXNrLCBpbnB1dCA9IDA7CisKKyNpZmRlZiBERUJVR19ESU8KKwlydF9wcmludGsoIm5pX3NlcmlhbF9zd19yZWFkd3JpdGU4OiBvdXRwdXR0aW5nIDB4JXhcbiIsIGRhdGFfb3V0KTsKKyNlbmRpZgorCisJLyogV2FpdCBmb3Igb25lIGJpdCBiZWZvcmUgdHJhbnNmZXIgKi8KKwljb21lZGlfdWRlbGF5KChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgKyA5OTkpIC8gMTAwMCk7CisKKwlmb3IgKG1hc2sgPSAweDgwOyBtYXNrOyBtYXNrID4+PSAxKSB7CisJCS8qIE91dHB1dCBjdXJyZW50IGJpdDsgbm90ZSB0aGF0IHdlIGNhbm5vdCB0b3VjaCBzLT5zdGF0ZQorCQkgICBiZWNhdXNlIGl0IGlzIGEgcGVyLXN1YmRldmljZSBmaWVsZCwgYW5kIHNlcmlhbCBpcworCQkgICBhIHNlcGFyYXRlIHN1YmRldmljZSBmcm9tIERJTy4gKi8KKwkJZGV2cHJpdi0+ZGlvX291dHB1dCAmPSB+RElPX1NET1VUOworCQlpZiAoZGF0YV9vdXQgJiBtYXNrKSB7CisJCQlkZXZwcml2LT5kaW9fb3V0cHV0IHw9IERJT19TRE9VVDsKKwkJfQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX291dHB1dCwKKwkJCURJT19PdXRwdXRfUmVnaXN0ZXIpOworCisJCS8qIEFzc2VydCBTRENMSyAoYWN0aXZlIGxvdywgaW52ZXJ0ZWQpLCB3YWl0IGZvciBoYWxmIG9mCisJCSAgIHRoZSBkZWxheSwgZGVhc3NlcnQgU0RDTEssIGFuZCB3YWl0IGZvciB0aGUgb3RoZXIgaGFsZi4gKi8KKwkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgfD0gRElPX1NvZnR3YXJlX1NlcmlhbF9Db250cm9sOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX2NvbnRyb2wsCisJCQlESU9fQ29udHJvbF9SZWdpc3Rlcik7CisKKwkJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDIwMDApOworCisJCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fU29mdHdhcmVfU2VyaWFsX0NvbnRyb2w7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwKKwkJCURJT19Db250cm9sX1JlZ2lzdGVyKTsKKworCQljb21lZGlfdWRlbGF5KChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgKyA5OTkpIC8gMjAwMCk7CisKKwkJLyogSW5wdXQgY3VycmVudCBiaXQgKi8KKwkJaWYgKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyKSAmIERJT19TRElOKSB7CisvKgkJCXJ0X3ByaW50aygiRElPX1BfSV9SOiAweCV4XG4iLCBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBESU9fUGFyYWxsZWxfSW5wdXRfUmVnaXN0ZXIpKTsgKi8KKwkJCWlucHV0IHw9IG1hc2s7CisJCX0KKwl9CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9zZXJpYWxfc3dfcmVhZHdyaXRlODogaW5wdXR0ZWQgMHgleFxuIiwgaW5wdXQpOworI2VuZGlmCisJaWYgKGRhdGFfaW4pCisJCSpkYXRhX2luID0gaW5wdXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlvX2NvbW1vbl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+Y291bnRlcl9kZXYpIHsKKwkJCW5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koZGV2cHJpdi0+Y291bnRlcl9kZXYpOworCQl9CisJfQorCWlmIChkZXYtPnN1YmRldmljZXMgJiYgYm9hcmR0eXBlLmhhc184MjU1KQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgTklfODI1NV9ESU9fU1VCREVWKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9hb182N3h4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspCisJeworCQluaV9hb193aW5fb3V0dyhkZXYsIEFPX0NoYW5uZWwoaSkgfCAweDAsCisJCQlBT19Db25maWd1cmF0aW9uXzJfNjd4eCk7CisJfQorCWFvX3dpbl9vdXQoMHgwLCBBT19MYXRlcl9TaW5nbGVfUG9pbnRfVXBkYXRlcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9ncGN0X3RvX3N0Y19yZWdpc3RlcihlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCXVuc2lnbmVkIHN0Y19yZWdpc3RlcjsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTklUSU9fRzBfQXV0b2luY3JlbWVudF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19BdXRvaW5jcmVtZW50X1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0NvbW1hbmRfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0NvbW1hbmRfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQ29tbWFuZF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfQ29tbWFuZF9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9IV19TYXZlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19IV19TYXZlX1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0hXX1NhdmVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0hXX1NhdmVfUmVnaXN0ZXIoMSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU1dfU2F2ZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfU2F2ZV9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9TV19TYXZlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19TYXZlX1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX01vZGVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX01vZGVfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfTW9kZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTW9kZV9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Mb2FkQV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTG9hZF9BX1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0xvYWRBX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19Mb2FkX0FfUmVnaXN0ZXIoMSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTG9hZEJfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0xvYWRfQl9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Mb2FkQl9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTG9hZF9CX1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0lucHV0X1NlbGVjdF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9TdGF0dXNfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX1N0YXR1c19SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBKb2ludF9SZXNldF9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEpvaW50X1N0YXR1c18xX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9Kb2ludF9TdGF0dXMyX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSm9pbnRfU3RhdHVzXzJfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEludGVycnVwdF9CX0Fja19SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TdGF0dXNfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBBSV9TdGF0dXNfMV9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9TdGF0dXNfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBBT19TdGF0dXNfMV9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IHVuaGFuZGxlZCByZWdpc3RlciAweCV4IGluIHN3aXRjaC5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlZyk7CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzdGNfcmVnaXN0ZXI7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwl1bnNpZ25lZCBzdGNfcmVnaXN0ZXI7CisJLyogYml0cyBpbiB0aGUgam9pbiByZXNldCByZWdpc3RlciB3aGljaCBhcmUgcmVsZXZhbnQgdG8gY291bnRlcnMgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZ3BjdF9qb2ludF9yZXNldF9tYXNrID0gRzBfUmVzZXQgfCBHMV9SZXNldDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZ3BjdF9pbnRlcnJ1cHRfYV9lbmFibGVfbWFzayA9CisJCUcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZSB8IEcwX1RDX0ludGVycnVwdF9FbmFibGU7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdwY3RfaW50ZXJydXB0X2JfZW5hYmxlX21hc2sgPQorCQlHMV9HYXRlX0ludGVycnVwdF9FbmFibGUgfCBHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlOworCisJc3dpdGNoIChyZWcpIHsKKwkJLyogbS1zZXJpZXMtb25seSByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0NvdW50aW5nX01vZGVfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfQ291bnRpbmdfTW9kZSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQ291bnRpbmdfTW9kZV9SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMV9Db3VudGluZ19Nb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TZWNvbmRfR2F0ZV9SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMF9TZWNvbmRfR2F0ZSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU2Vjb25kX0dhdGVfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzFfU2Vjb25kX0dhdGUpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0RNQV9Db25maWdfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfRE1BX0NvbmZpZyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX0NvbmZpZ19SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMV9ETUFfQ29uZmlnKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9BQlpfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfTVNlcmllc19BQlopOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0FCWl9SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMV9NU2VyaWVzX0FCWik7CisJCWJyZWFrOworCisJCS8qIDMyIGJpdCByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0xvYWRBX1JlZzoKKwljYXNlIE5JVElPX0cxX0xvYWRBX1JlZzoKKwljYXNlIE5JVElPX0cwX0xvYWRCX1JlZzoKKwljYXNlIE5JVElPX0cxX0xvYWRCX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gbmlfZ3BjdF90b19zdGNfcmVnaXN0ZXIocmVnKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIGJpdHMsIHN0Y19yZWdpc3Rlcik7CisJCWJyZWFrOworCisJCS8qIDE2IGJpdCByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQlCVUdfT04oYml0cyAmIH5ncGN0X2ludGVycnVwdF9hX2VuYWJsZV9tYXNrKTsKKwkJbmlfc2V0X2JpdGZpZWxkKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQkJZ3BjdF9pbnRlcnJ1cHRfYV9lbmFibGVfbWFzaywgYml0cyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCUJVR19PTihiaXRzICYgfmdwY3RfaW50ZXJydXB0X2JfZW5hYmxlX21hc2spOworCQluaV9zZXRfYml0ZmllbGQoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsCisJCQlncGN0X2ludGVycnVwdF9iX2VuYWJsZV9tYXNrLCBiaXRzKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOgorCQlCVUdfT04oYml0cyAmIH5ncGN0X2pvaW50X3Jlc2V0X21hc2spOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlzdGNfcmVnaXN0ZXIgPSBuaV9ncGN0X3RvX3N0Y19yZWdpc3RlcihyZWcpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYml0cywgc3RjX3JlZ2lzdGVyKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9ncGN0X3JlYWRfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwl1bnNpZ25lZCBzdGNfcmVnaXN0ZXI7CisJc3dpdGNoIChyZWcpIHsKKwkJLyogbS1zZXJpZXMgb25seSByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0RNQV9TdGF0dXNfUmVnOgorCQlyZXR1cm4gbmlfcmVhZHcoTV9PZmZzZXRfRzBfRE1BX1N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX1N0YXR1c19SZWc6CisJCXJldHVybiBuaV9yZWFkdyhNX09mZnNldF9HMV9ETUFfU3RhdHVzKTsKKwkJYnJlYWs7CisKKwkJLyogMzIgYml0IHJlZ2lzdGVycyAqLworCWNhc2UgTklUSU9fRzBfSFdfU2F2ZV9SZWc6CisJY2FzZSBOSVRJT19HMV9IV19TYXZlX1JlZzoKKwljYXNlIE5JVElPX0cwX1NXX1NhdmVfUmVnOgorCWNhc2UgTklUSU9fRzFfU1dfU2F2ZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IG5pX2dwY3RfdG9fc3RjX3JlZ2lzdGVyKHJlZyk7CisJCXJldHVybiBkZXZwcml2LT5zdGNfcmVhZGwoZGV2LCBzdGNfcmVnaXN0ZXIpOworCQlicmVhazsKKworCQkvKiAxNiBiaXQgcmVnaXN0ZXJzICovCisJZGVmYXVsdDoKKwkJc3RjX3JlZ2lzdGVyID0gbmlfZ3BjdF90b19zdGNfcmVnaXN0ZXIocmVnKTsKKwkJcmV0dXJuIGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIHN0Y19yZWdpc3Rlcik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9mcmVxX291dF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmIEZPVVRfRGl2aWRlcl9tYXNrOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2ZyZXFfb3V0X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ICY9IH5GT1VUX0VuYWJsZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQsCisJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmPSB+Rk9VVF9EaXZpZGVyX21hc2s7CisJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gRk9VVF9EaXZpZGVyKGRhdGFbMF0pOworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0IHw9IEZPVVRfRW5hYmxlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5jbG9ja19hbmRfZm91dCwKKwkJQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIpOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IG5pX3NldF9mcmVxX291dF9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSkKK3sKKwlzd2l0Y2ggKGNsb2NrX3NvdXJjZSkgeworCWNhc2UgTklfRlJFUV9PVVRfVElNRUJBU0VfMV9ESVZfMl9DTE9DS19TUkM6CisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ICY9IH5GT1VUX1RpbWViYXNlX1NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBOSV9GUkVRX09VVF9USU1FQkFTRV8yX0NMT0NLX1NSQzoKKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gRk9VVF9UaW1lYmFzZV9TZWxlY3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQsCisJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKwlyZXR1cm4gMzsKK30KKworc3RhdGljIHZvaWQgbmlfZ2V0X2ZyZXFfb3V0X2Nsb2NrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBjbG9ja19zb3VyY2UsCisJdW5zaWduZWQgaW50ICogY2xvY2tfcGVyaW9kX25zKQoreworCWlmIChkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmIEZPVVRfVGltZWJhc2VfU2VsZWN0KSB7CisJCSpjbG9ja19zb3VyY2UgPSBOSV9GUkVRX09VVF9USU1FQkFTRV8yX0NMT0NLX1NSQzsKKwkJKmNsb2NrX3BlcmlvZF9ucyA9IFRJTUVCQVNFXzJfTlM7CisJfSBlbHNlIHsKKwkJKmNsb2NrX3NvdXJjZSA9IE5JX0ZSRVFfT1VUX1RJTUVCQVNFXzFfRElWXzJfQ0xPQ0tfU1JDOworCQkqY2xvY2tfcGVyaW9kX25zID0gVElNRUJBU0VfMV9OUyAqIDI7CisJfQorfQorCitzdGF0aWMgaW50IG5pX2ZyZXFfb3V0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DTE9DS19TUkM6CisJCXJldHVybiBuaV9zZXRfZnJlcV9vdXRfY2xvY2soZGV2LCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDOgorCQluaV9nZXRfZnJlcV9vdXRfY2xvY2soZGV2LCAmZGF0YVsxXSwgJmRhdGFbMl0pOworCQlyZXR1cm4gMzsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWxsb2NfcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihuaV9wcml2YXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+d2luZG93X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5zb2Z0X3JlZ19jb3B5X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jayk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgbmlfRV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGo7CisJZW51bSBuaV9ncGN0X3ZhcmlhbnQgY291bnRlcl92YXJpYW50OworCisJaWYgKGJvYXJkdHlwZS5uX2FvY2hhbiA+IE1BWF9OX0FPX0NIQU4pIHsKKwkJcHJpbnRrKCJidWchIGJvYXJkdHlwZS5uX2FvY2hhbiA+IE1BWF9OX0FPX0NIQU5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIE5JX05VTV9TVUJERVZJQ0VTKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlpZiAoYm9hcmR0eXBlLm5fYWRjaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9ESUZGIHwgU0RGX0RJVEhFUiB8IFNERl9DTURfUkVBRDsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjExeCkKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8IFNERl9PVEhFUjsKKwkJaWYgKGJvYXJkdHlwZS5hZGJpdHMgPiAxNikKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfTFNBTVBMOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX1NPRlRfQ0FMSUJSQVRFRDsKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLm5fYWRjaGFuOworCQlzLT5sZW5fY2hhbmxpc3QgPSA1MTI7CisJCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gbmlfcmFuZ2VfbGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfYWlfaW5zbl9yZWFkOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9haV9pbnNuX2NvbmZpZzsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9haV9jbWR0ZXN0OworCQlzLT5kb19jbWQgPSAmbmlfYWlfY21kOworCQlzLT5jYW5jZWwgPSAmbmlfYWlfcmVzZXQ7CisJCXMtPnBvbGwgPSAmbmlfYWlfcG9sbDsKKwkJcy0+bXVuZ2UgPSAmbmlfYWlfbXVuZ2U7CisjaWZkZWYgUENJRE1BCisJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCWlmIChib2FyZHR5cGUubl9hb2NoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfREVHTElUQ0ggfCBTREZfR1JPVU5EOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX1NPRlRfQ0FMSUJSQVRFRDsKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmFvYml0cykgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9IGJvYXJkdHlwZS5hb19yYW5nZV90YWJsZTsKKwkJcy0+aW5zbl9yZWFkID0gJm5pX2FvX2luc25fcmVhZDsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJCXMtPmluc25fd3JpdGUgPSAmbmlfYW9faW5zbl93cml0ZV82NzF4OworCQl9IGVsc2UgeworCQkJcy0+aW5zbl93cml0ZSA9ICZuaV9hb19pbnNuX3dyaXRlOworCQl9CisJCXMtPmluc25fY29uZmlnID0gJm5pX2FvX2luc25fY29uZmlnOworI2lmZGVmIFBDSURNQQorCQlpZiAoYm9hcmR0eXBlLm5fYW9jaGFuKSB7CisJCQlzLT5hc3luY19kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKKyNlbHNlCisJCWlmIChib2FyZHR5cGUuYW9fZmlmb19kZXB0aCkgeworI2VuZGlmCisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9XUklURTsKKwkJCXMtPmRvX2NtZCA9ICZuaV9hb19jbWQ7CisJCQlzLT5kb19jbWR0ZXN0ID0gJm5pX2FvX2NtZHRlc3Q7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSBib2FyZHR5cGUubl9hb2NoYW47CisJCQlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSA9PSAwKQorCQkJCXMtPm11bmdlID0gbmlfYW9fbXVuZ2U7CisJCX0KKwkJcy0+Y2FuY2VsID0gJm5pX2FvX3Jlc2V0OworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzY3eHhfbWFzaykpCisJCWluaXRfYW9fNjd4eChkZXYsIHMpOworCisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfRElPX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pb19iaXRzID0gMDsJCS8qIGFsbCBiaXRzIGlucHV0ICovCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5uX2NoYW4gPSBib2FyZHR5cGUubnVtX3AwX2Rpb19jaGFubmVsczsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9CisJCQlTREZfTFNBTVBMIHwgU0RGX0NNRF9XUklURSAvKiB8IFNERl9DTURfUkVBRCAqLyA7CisJCXMtPmluc25fYml0cyA9ICZuaV9tX3Nlcmllc19kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9tX3Nlcmllc19kaW9faW5zbl9jb25maWc7CisJCXMtPmRvX2NtZCA9ICZuaV9jZGlvX2NtZDsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9jZGlvX2NtZHRlc3Q7CisJCXMtPmNhbmNlbCA9ICZuaV9jZGlvX2NhbmNlbDsKKwkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9CSURJUkVDVElPTkFMOworCQlzLT5sZW5fY2hhbmxpc3QgPSBzLT5uX2NoYW47CisKKwkJbmlfd3JpdGVsKENET19SZXNldF9CaXQgfCBDRElfUmVzZXRfQml0LCBNX09mZnNldF9DRElPX0NvbW1hbmQpOworCQluaV93cml0ZWwocy0+aW9fYml0cywgTV9PZmZzZXRfRElPX0RpcmVjdGlvbik7CisJfSBlbHNlIHsKKwkJcy0+aW5zbl9iaXRzID0gJm5pX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gJm5pX2Rpb19pbnNuX2NvbmZpZzsKKwkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgPSBESU9fUGluc19EaXIocy0+aW9fYml0cyk7CisJCW5pX3dyaXRldyhkZXZwcml2LT5kaW9fY29udHJvbCwgRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCX0KKworCS8qIDgyNTUgZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzgyNTVfRElPX1NVQkRFVjsKKwlpZiAoYm9hcmR0eXBlLmhhc184MjU1KSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBuaV84MjU1X2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZylkZXYpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogZm9ybWVybHkgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIvdGltZXIgZGV2aWNlLCBidXQgbm8gbG9uZ2VyIHVzZWQgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfVU5VU0VEX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLyogY2FsaWJyYXRpb24gc3ViZGV2aWNlIC0tIGFpIGFuZCBhbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9DQUxJQlJBVElPTl9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQkvLyBpbnRlcm5hbCBQV00gYW5hbG9nIG91dHB1dCB1c2VkIGZvciBBSSBub25saW5lYXJpdHkgY2FsaWJyYXRpb24KKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX0lOVEVSTkFMOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9tX3Nlcmllc19wd21fY29uZmlnOworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5tYXhkYXRhID0gMDsKKwkJbmlfd3JpdGVsKDB4MCwgTV9PZmZzZXRfQ2FsX1BXTSk7CisJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJLy8gaW50ZXJuYWwgUFdNIGFuYWxvZyBvdXRwdXQgdXNlZCBmb3IgQUkgbm9ubGluZWFyaXR5IGNhbGlicmF0aW9uCisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9JTlRFUk5BTDsKKwkJcy0+aW5zbl9jb25maWcgPSAmbmlfNjE0M19wd21fY29uZmlnOworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5tYXhkYXRhID0gMDsKKwl9IGVsc2UgeworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJCXMtPmluc25fcmVhZCA9ICZuaV9jYWxpYl9pbnNuX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSAmbmlfY2FsaWJfaW5zbl93cml0ZTsKKwkJY2FsZGFjX3NldHVwKGRldiwgcyk7CisJfQorCisJLyogRUVQUk9NICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0VFUFJPTV9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCXMtPm5fY2hhbiA9IE1fU0VSSUVTX0VFUFJPTV9TSVpFOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfbV9zZXJpZXNfZWVwcm9tX2luc25fcmVhZDsKKwl9IGVsc2UgeworCQlzLT5uX2NoYW4gPSA1MTI7CisJCXMtPmluc25fcmVhZCA9ICZuaV9lZXByb21faW5zbl9yZWFkOworCX0KKworCS8qIFBGSSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9QRklfRElPX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJdW5zaWduZWQgaTsKKwkJcy0+bl9jaGFuID0gMTY7CisJCW5pX3dyaXRldyhzLT5zdGF0ZSwgTV9PZmZzZXRfUEZJX0RPKTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfT1VUUFVUX1NFTEVDVF9SRUdTOyArK2kpIHsKKwkJCW5pX3dyaXRldyhkZXZwcml2LT5wZmlfb3V0cHV0X3NlbGVjdF9yZWdbaV0sCisJCQkJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3QoaSArIDEpKTsKKwkJfQorCX0gZWxzZSB7CisJCXMtPm5fY2hhbiA9IDEwOworCX0KKwlzLT5tYXhkYXRhID0gMTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJcy0+aW5zbl9iaXRzID0gJm5pX3BmaV9pbnNuX2JpdHM7CisJfQorCXMtPmluc25fY29uZmlnID0gJm5pX3BmaV9pbnNuX2NvbmZpZzsKKwluaV9zZXRfYml0cyhkZXYsIElPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3RlciwgfjAsIDApOworCisJLyogY3M1NTI5IGNhbGlicmF0aW9uIGFkYyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9DUzU1MjlfQ0FMSUJSQVRJT05fU1VCREVWOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNjd4eF9tYXNrKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkYgfCBTREZfSU5URVJOQUw7CisJCS8vIG9uZSBjaGFubmVsIGZvciBlYWNoIGFuYWxvZyBvdXRwdXQgY2hhbm5lbAorCQlzLT5uX2NoYW4gPSBib2FyZHR5cGUubl9hb2NoYW47CisJCXMtPm1heGRhdGEgPSAoMSA8PCAxNikgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvKiBYWFggKi8KKwkJcy0+aW5zbl9yZWFkID0gY3M1NTI5X2FpX2luc25fcmVhZDsKKwkJcy0+aW5zbl9jb25maWcgPSBOVUxMOworCQlpbml0X2NzNTUyOShkZXYpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogU2VyaWFsICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX1NFUklBTF9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1NFUklBTDsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pX3NlcmlhbF9pbnNuX2NvbmZpZzsKKwlkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgPSAwOworCWRldnByaXYtPnNlcmlhbF9od19tb2RlID0gMDsKKworCS8qIFJUU0kgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfUlRTSV9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2JpdHMgPSBuaV9ydHNpX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pX3J0c2lfaW5zbl9jb25maWc7CisJbmlfcnRzaV9pbml0KGRldik7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJY291bnRlcl92YXJpYW50ID0gbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOworCX0gZWxzZSB7CisJCWNvdW50ZXJfdmFyaWFudCA9IG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczsKKwl9CisJZGV2cHJpdi0+Y291bnRlcl9kZXYgPSBuaV9ncGN0X2RldmljZV9jb25zdHJ1Y3QoZGV2LAorCQkmbmlfZ3BjdF93cml0ZV9yZWdpc3RlciwgJm5pX2dwY3RfcmVhZF9yZWdpc3RlciwKKwkJY291bnRlcl92YXJpYW50LCBOVU1fR1BDVCk7CisJLyogR2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzICovCisJZm9yIChqID0gMDsgaiA8IE5VTV9HUENUOyArK2opIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0dQQ1RfU1VCREVWKGopOworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEwgfCBTREZfQ01EX1JFQUQKKwkJCS8qIHwgU0RGX0NNRF9XUklURSAqLyA7CisJCXMtPm5fY2hhbiA9IDM7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJCXMtPm1heGRhdGEgPSAweGZmZmZmZmZmOworCQllbHNlCisJCQlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CisJCXMtPmluc25fcmVhZCA9ICZuaV9ncGN0X2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9ICZuaV9ncGN0X2luc25fd3JpdGU7CisJCXMtPmluc25fY29uZmlnID0gJm5pX2dwY3RfaW5zbl9jb25maWc7CisJCXMtPmRvX2NtZCA9ICZuaV9ncGN0X2NtZDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9ncGN0X2NtZHRlc3Q7CisJCXMtPmNhbmNlbCA9ICZuaV9ncGN0X2NhbmNlbDsKKwkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9CSURJUkVDVElPTkFMOworCQlzLT5wcml2YXRlID0gJmRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tqXTsKKworCQlkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbal0uY2hpcF9pbmRleCA9IDA7CisJCWRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tqXS5jb3VudGVyX2luZGV4ID0gajsKKwkJbmlfdGlvX2luaXRfY291bnRlcigmZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2pdKTsKKwl9CisKKwkvKiBGcmVxdWVuY3kgb3V0cHV0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0ZSRVFfT1VUX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5tYXhkYXRhID0gMHhmOworCXMtPmluc25fcmVhZCA9ICZuaV9mcmVxX291dF9pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9ICZuaV9mcmVxX291dF9pbnNuX3dyaXRlOworCXMtPmluc25fY29uZmlnID0gJm5pX2ZyZXFfb3V0X2luc25fY29uZmlnOworCisJLyogYWkgY29uZmlndXJhdGlvbiAqLworCW5pX2FpX3Jlc2V0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWKTsKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spID09IDApIHsKKwkJLy8gQkVBTSBpcyB0aGlzIG5lZWRlZCBmb3IgUENJLTYxNDMgPz8KKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgPQorCQkJU2xvd19JbnRlcm5hbF9UaW1lX0RpdmlkZV9CeV8yIHwKKwkJCVNsb3dfSW50ZXJuYWxfVGltZWJhc2UgfAorCQkJQ2xvY2tfVG9fQm9hcmRfRGl2aWRlX0J5XzIgfAorCQkJQ2xvY2tfVG9fQm9hcmQgfAorCQkJQUlfT3V0cHV0X0RpdmlkZV9CeV8yIHwgQU9fT3V0cHV0X0RpdmlkZV9CeV8yOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ID0KKwkJCVNsb3dfSW50ZXJuYWxfVGltZV9EaXZpZGVfQnlfMiB8CisJCQlTbG93X0ludGVybmFsX1RpbWViYXNlIHwKKwkJCUNsb2NrX1RvX0JvYXJkX0RpdmlkZV9CeV8yIHwgQ2xvY2tfVG9fQm9hcmQ7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5jbG9ja19hbmRfZm91dCwKKwkJQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIpOworCisJLyogYW5hbG9nIG91dHB1dCBjb25maWd1cmF0aW9uICovCisJbmlfYW9fcmVzZXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBOSV9BT19TVUJERVYpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQkJKElSUV9QT0xBUklUWSA/IEludGVycnVwdF9PdXRwdXRfUG9sYXJpdHkgOiAwKSB8CisJCQkoSW50ZXJydXB0X091dHB1dF9Pbl8zX1BpbnMgJiAwKSB8IEludGVycnVwdF9BX0VuYWJsZSB8CisJCQlJbnRlcnJ1cHRfQl9FbmFibGUgfAorCQkJSW50ZXJydXB0X0FfT3V0cHV0X1NlbGVjdChpbnRlcnJ1cHRfcGluKGRldi0+CisJCQkJCWlycSkpIHwKKwkJCUludGVycnVwdF9CX091dHB1dF9TZWxlY3QoaW50ZXJydXB0X3BpbihkZXYtPmlycSkpLAorCQkJSW50ZXJydXB0X0NvbnRyb2xfUmVnaXN0ZXIpOworCX0KKworCS8qIERNQSBzZXR1cCAqLworCW5pX3dyaXRlYihkZXZwcml2LT5haV9hb19zZWxlY3RfcmVnLCBBSV9BT19TZWxlY3QpOworCW5pX3dyaXRlYihkZXZwcml2LT5nMF9nMV9zZWxlY3RfcmVnLCBHMF9HMV9TZWxlY3QpOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJbmlfd3JpdGViKDAsIE1hZ2ljXzYxMXgpOworCX0gZWxzZSBpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJaW50IGNoYW5uZWw7CisJCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBib2FyZHR5cGUubl9hb2NoYW47ICsrY2hhbm5lbCkgeworCQkJbmlfd3JpdGViKDB4ZiwgTV9PZmZzZXRfQU9fV2F2ZWZvcm1fT3JkZXIoY2hhbm5lbCkpOworCQkJbmlfd3JpdGViKDB4MCwKKwkJCQlNX09mZnNldF9BT19SZWZlcmVuY2VfQXR0ZW51YXRpb24oY2hhbm5lbCkpOworCQl9CisJCW5pX3dyaXRlYigweDAsIE1fT2Zmc2V0X0FPX0NhbGlicmF0aW9uKTsKKwl9CisKKwlwcmludGsoIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfODI1NV9jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgYXJnOworCisJaWYgKGRpcikgeworCQluaV93cml0ZWIoZGF0YSwgUG9ydF9BICsgMiAqIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gbmlfcmVhZGIoUG9ydF9BICsgMiAqIHBvcnQpOworCX0KK30KKworLyoKKwlwcmVzZW50cyB0aGUgRUVQUk9NIGFzIGEgc3ViZGV2aWNlCisqLworCitzdGF0aWMgaW50IG5pX2VlcHJvbV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBuaV9yZWFkX2VlcHJvbShkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKworCXJldHVybiAxOworfQorCisvKgorCXJlYWRzIGJ5dGVzIG91dCBvZiBlZXByb20KKyovCisKK3N0YXRpYyBpbnQgbmlfcmVhZF9lZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQoreworCWludCBiaXQ7CisJaW50IGJpdHN0cmluZzsKKworCWJpdHN0cmluZyA9IDB4MDMwMCB8ICgoYWRkciAmIDB4MTAwKSA8PCAzKSB8IChhZGRyICYgMHhmZik7CisJbmlfd3JpdGViKDB4MDQsIFNlcmlhbF9Db21tYW5kKTsKKwlmb3IgKGJpdCA9IDB4ODAwMDsgYml0OyBiaXQgPj49IDEpIHsKKwkJbmlfd3JpdGViKDB4MDQgfCAoKGJpdCAmIGJpdHN0cmluZykgPyAweDAyIDogMCksCisJCQlTZXJpYWxfQ29tbWFuZCk7CisJCW5pX3dyaXRlYigweDA1IHwgKChiaXQgJiBiaXRzdHJpbmcpID8gMHgwMiA6IDApLAorCQkJU2VyaWFsX0NvbW1hbmQpOworCX0KKwliaXRzdHJpbmcgPSAwOworCWZvciAoYml0ID0gMHg4MDsgYml0OyBiaXQgPj49IDEpIHsKKwkJbmlfd3JpdGViKDB4MDQsIFNlcmlhbF9Db21tYW5kKTsKKwkJbmlfd3JpdGViKDB4MDUsIFNlcmlhbF9Db21tYW5kKTsKKwkJYml0c3RyaW5nIHw9ICgobmlfcmVhZGIoWFhYX1N0YXR1cykgJiBQUk9NT1VUKSA/IGJpdCA6IDApOworCX0KKwluaV93cml0ZWIoMHgwMCwgU2VyaWFsX0NvbW1hbmQpOworCisJcmV0dXJuIGJpdHN0cmluZzsKK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19lZXByb21faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+ZWVwcm9tX2J1ZmZlcltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9nZXRfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gZGV2cHJpdi0+cHdtX3VwX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJZGF0YVsyXSA9IGRldnByaXYtPnB3bV9kb3duX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJcmV0dXJuIDM7Cit9CisKK3N0YXRpYyBpbnQgbmlfbV9zZXJpZXNfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgdXBfY291bnQsIGRvd25fY291bnQ7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19QV01fT1VUUFVUOgorCQlzd2l0Y2ggKGRhdGFbMV0pIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQl1cF9jb3VudCA9CisJCQkJKGRhdGFbMl0gKworCQkJCWRldnByaXYtPmNsb2NrX25zIC8gMikgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCXVwX2NvdW50ID0gZGF0YVsyXSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCXVwX2NvdW50ID0KKwkJCQkoZGF0YVsyXSArIGRldnByaXYtPmNsb2NrX25zIC0KKwkJCQkxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoZGF0YVszXSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJCWRvd25fY291bnQgPQorCQkJCShkYXRhWzRdICsKKwkJCQlkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkb3duX2NvdW50ID0gZGF0YVs0XSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCWRvd25fY291bnQgPQorCQkJCShkYXRhWzRdICsgZGV2cHJpdi0+Y2xvY2tfbnMgLQorCQkJCTEpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHVwX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnMgIT0gZGF0YVsyXSB8fAorCQkJZG93bl9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zICE9IGRhdGFbNF0pIHsKKwkJCWRhdGFbMl0gPSB1cF9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zOworCQkJZGF0YVs0XSA9IGRvd25fY291bnQgKiBkZXZwcml2LT5jbG9ja19uczsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCW5pX3dyaXRlbChNU2VyaWVzX0NhbF9QV01fSGlnaF9UaW1lX0JpdHModXBfY291bnQpIHwKKwkJCU1TZXJpZXNfQ2FsX1BXTV9Mb3dfVGltZV9CaXRzKGRvd25fY291bnQpLAorCQkJTV9PZmZzZXRfQ2FsX1BXTSk7CisJCWRldnByaXYtPnB3bV91cF9jb3VudCA9IHVwX2NvdW50OworCQlkZXZwcml2LT5wd21fZG93bl9jb3VudCA9IGRvd25fY291bnQ7CisJCXJldHVybiA1OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9QV01fT1VUUFVUOgorCQlyZXR1cm4gbmlfZ2V0X3B3bV9jb25maWcoZGV2LCBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82MTQzX3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIHVwX2NvdW50LCBkb3duX2NvdW50OworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfUFdNX09VVFBVVDoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQkJdXBfY291bnQgPQorCQkJCShkYXRhWzJdICsKKwkJCQlkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQl1cF9jb3VudCA9IGRhdGFbMl0gLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQl1cF9jb3VudCA9CisJCQkJKGRhdGFbMl0gKyBkZXZwcml2LT5jbG9ja19ucyAtCisJCQkJMSkgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzd2l0Y2ggKGRhdGFbM10pIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQlkb3duX2NvdW50ID0KKwkJCQkoZGF0YVs0XSArCisJCQkJZGV2cHJpdi0+Y2xvY2tfbnMgLyAyKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZG93bl9jb3VudCA9IGRhdGFbNF0gLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlkb3duX2NvdW50ID0KKwkJCQkoZGF0YVs0XSArIGRldnByaXYtPmNsb2NrX25zIC0KKwkJCQkxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICh1cF9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zICE9IGRhdGFbMl0gfHwKKwkJCWRvd25fY291bnQgKiBkZXZwcml2LT5jbG9ja19ucyAhPSBkYXRhWzRdKSB7CisJCQlkYXRhWzJdID0gdXBfY291bnQgKiBkZXZwcml2LT5jbG9ja19uczsKKwkJCWRhdGFbNF0gPSBkb3duX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQluaV93cml0ZWwodXBfY291bnQsIENhbGlicmF0aW9uX0hpZ2hUaW1lXzYxNDMpOworCQlkZXZwcml2LT5wd21fdXBfY291bnQgPSB1cF9jb3VudDsKKwkJbmlfd3JpdGVsKGRvd25fY291bnQsIENhbGlicmF0aW9uX0xvd1RpbWVfNjE0Myk7CisJCWRldnByaXYtPnB3bV9kb3duX2NvdW50ID0gZG93bl9jb3VudDsKKwkJcmV0dXJuIDU7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX1BXTV9PVVRQVVQ6CisJCXJldHVybiBuaV9nZXRfcHdtX2NvbmZpZyhkZXYsIGRhdGEpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3dyaXRlX2NhbGRhYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFkZHIsIGludCB2YWwpOworLyoKKwljYWxpYnJhdGlvbiBzdWJkZXZpY2UKKyovCitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCW5pX3dyaXRlX2NhbGRhYyhkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCBkYXRhWzBdKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmNhbGRhY3NbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFja19tYjg4MzQxKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZyk7CitzdGF0aWMgaW50IHBhY2tfZGFjODgwMChpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpOworc3RhdGljIGludCBwYWNrX2RhYzgwNDMoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19hZDg1MjIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19hZDg4MDQoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19hZDg4NDIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKKworc3RydWN0IGNhbGRhY19zdHJ1Y3QgeworCWludCBuX2NoYW5zOworCWludCBuX2JpdHM7CisJaW50ICgqcGFja2JpdHMpIChpbnQsIGludCwgaW50ICopOworfTsKKworc3RhdGljIHN0cnVjdCBjYWxkYWNfc3RydWN0IGNhbGRhY3NbXSA9IHsKKwlbbWI4ODM0MV0gPSB7MTIsIDgsIHBhY2tfbWI4ODM0MX0sCisJW2RhYzg4MDBdID0gezgsIDgsIHBhY2tfZGFjODgwMH0sCisJW2RhYzgwNDNdID0gezEsIDEyLCBwYWNrX2RhYzgwNDN9LAorCVthZDg1MjJdID0gezIsIDEyLCBwYWNrX2FkODUyMn0sCisJW2FkODgwNF0gPSB7MTIsIDgsIHBhY2tfYWQ4ODA0fSwKKwlbYWQ4ODQyXSA9IHs4LCA4LCBwYWNrX2FkODg0Mn0sCisJW2FkODgwNF9kZWJ1Z10gPSB7MTYsIDgsIHBhY2tfYWQ4ODA0fSwKK307CisKK3N0YXRpYyB2b2lkIGNhbGRhY19zZXR1cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBpLCBqOworCWludCBuX2RhY3M7CisJaW50IG5fY2hhbnMgPSAwOworCWludCBuX2JpdHM7CisJaW50IGRpZmZiaXRzID0gMDsKKwlpbnQgdHlwZTsKKwlpbnQgY2hhbjsKKworCXR5cGUgPSBib2FyZHR5cGUuY2FsZGFjWzBdOworCWlmICh0eXBlID09IGNhbGRhY19ub25lKQorCQlyZXR1cm47CisJbl9iaXRzID0gY2FsZGFjc1t0eXBlXS5uX2JpdHM7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl0eXBlID0gYm9hcmR0eXBlLmNhbGRhY1tpXTsKKwkJaWYgKHR5cGUgPT0gY2FsZGFjX25vbmUpCisJCQlicmVhazsKKwkJaWYgKGNhbGRhY3NbdHlwZV0ubl9iaXRzICE9IG5fYml0cykKKwkJCWRpZmZiaXRzID0gMTsKKwkJbl9jaGFucyArPSBjYWxkYWNzW3R5cGVdLm5fY2hhbnM7CisJfQorCW5fZGFjcyA9IGk7CisJcy0+bl9jaGFuID0gbl9jaGFuczsKKworCWlmIChkaWZmYml0cykgeworCQl1bnNpZ25lZCBpbnQgKm1heGRhdGFfbGlzdDsKKworCQlpZiAobl9jaGFucyA+IE1BWF9OX0NBTERBQ1MpIHsKKwkJCXByaW50aygiQlVHISBNQVhfTl9DQUxEQUNTIHRvbyBzbWFsbFxuIik7CisJCX0KKwkJcy0+bWF4ZGF0YV9saXN0ID0gbWF4ZGF0YV9saXN0ID0gZGV2cHJpdi0+Y2FsZGFjX21heGRhdGFfbGlzdDsKKwkJY2hhbiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuX2RhY3M7IGkrKykgeworCQkJdHlwZSA9IGJvYXJkdHlwZS5jYWxkYWNbaV07CisJCQlmb3IgKGogPSAwOyBqIDwgY2FsZGFjc1t0eXBlXS5uX2NoYW5zOyBqKyspIHsKKwkJCQltYXhkYXRhX2xpc3RbY2hhbl0gPQorCQkJCQkoMSA8PCBjYWxkYWNzW3R5cGVdLm5fYml0cykgLSAxOworCQkJCWNoYW4rKzsKKwkJCX0KKwkJfQorCisJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBzLT5uX2NoYW47IGNoYW4rKykKKwkJCW5pX3dyaXRlX2NhbGRhYyhkZXYsIGksIHMtPm1heGRhdGFfbGlzdFtpXSAvIDIpOworCX0gZWxzZSB7CisJCXR5cGUgPSBib2FyZHR5cGUuY2FsZGFjWzBdOworCQlzLT5tYXhkYXRhID0gKDEgPDwgY2FsZGFjc1t0eXBlXS5uX2JpdHMpIC0gMTsKKworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgcy0+bl9jaGFuOyBjaGFuKyspCisJCQluaV93cml0ZV9jYWxkYWMoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBuaV93cml0ZV9jYWxkYWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyLCBpbnQgdmFsKQoreworCXVuc2lnbmVkIGludCBsb2FkYml0ID0gMCwgYml0cyA9IDAsIGJpdCwgYml0c3RyaW5nID0gMDsKKwlpbnQgaTsKKwlpbnQgdHlwZTsKKworCS8vcHJpbnRrKCJuaV93cml0ZV9jYWxkYWM6IGNoYW49JWQgdmFsPSVkXG4iLGFkZHIsdmFsKTsKKwlpZiAoZGV2cHJpdi0+Y2FsZGFjc1thZGRyXSA9PSB2YWwpCisJCXJldHVybjsKKwlkZXZwcml2LT5jYWxkYWNzW2FkZHJdID0gdmFsOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl0eXBlID0gYm9hcmR0eXBlLmNhbGRhY1tpXTsKKwkJaWYgKHR5cGUgPT0gY2FsZGFjX25vbmUpCisJCQlicmVhazsKKwkJaWYgKGFkZHIgPCBjYWxkYWNzW3R5cGVdLm5fY2hhbnMpIHsKKwkJCWJpdHMgPSBjYWxkYWNzW3R5cGVdLnBhY2tiaXRzKGFkZHIsIHZhbCwgJmJpdHN0cmluZyk7CisJCQlsb2FkYml0ID0gU2VyRGFjTGQoaSk7CisJCQkvL3ByaW50aygiY2FsZGFjOiB1c2luZyBpPSVkIGFkZHI9JWQgJXhcbiIsaSxhZGRyLGJpdHN0cmluZyk7CisJCQlicmVhazsKKwkJfQorCQlhZGRyIC09IGNhbGRhY3NbdHlwZV0ubl9jaGFuczsKKwl9CisKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHMgLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJbmlfd3JpdGViKCgoYml0ICYgYml0c3RyaW5nKSA/IDB4MDIgOiAwKSwgU2VyaWFsX0NvbW1hbmQpOworCQljb21lZGlfdWRlbGF5KDEpOworCQluaV93cml0ZWIoMSB8ICgoYml0ICYgYml0c3RyaW5nKSA/IDB4MDIgOiAwKSwgU2VyaWFsX0NvbW1hbmQpOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwluaV93cml0ZWIobG9hZGJpdCwgU2VyaWFsX0NvbW1hbmQpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJbmlfd3JpdGViKDAsIFNlcmlhbF9Db21tYW5kKTsKK30KKworc3RhdGljIGludCBwYWNrX21iODgzNDEoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCS8qCisJICAgRnVqaXRzdSBNQiA4ODM0MQorCSAgIE5vdGUgdGhhdCBhZGRyZXNzIGJpdHMgYXJlIHJldmVyc2VkLiAgVGhhbmtzIHRvCisJICAgSW5nbyBLZWVuIGZvciBub3RpY2luZyB0aGlzLgorCisJICAgTm90ZSBhbHNvIHRoYXQgdGhlIDg4MzQxIGV4cGVjdHMgYWRkcmVzcyB2YWx1ZXMgZnJvbQorCSAgIDEtMTIsIHdoZXJlYXMgd2UgdXNlIGNoYW5uZWwgbnVtYmVycyAwLTExLiAgVGhlIE5JCisJICAgZG9jcyB1c2UgMS0xMiwgYWxzbywgc28gYmUgY2FyZWZ1bCBoZXJlLgorCSAqLworCWFkZHIrKzsKKwkqYml0c3RyaW5nID0gKChhZGRyICYgMHgxKSA8PCAxMSkgfAorCQkoKGFkZHIgJiAweDIpIDw8IDkpIHwKKwkJKChhZGRyICYgMHg0KSA8PCA3KSB8ICgoYWRkciAmIDB4OCkgPDwgNSkgfCAodmFsICYgMHhmZik7CisJcmV0dXJuIDEyOworfQorCitzdGF0aWMgaW50IHBhY2tfZGFjODgwMChpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9ICgoYWRkciAmIDB4NykgPDwgOCkgfCAodmFsICYgMHhmZik7CisJcmV0dXJuIDExOworfQorCitzdGF0aWMgaW50IHBhY2tfZGFjODA0MyhpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9IHZhbCAmIDB4ZmZmOworCXJldHVybiAxMjsKK30KKworc3RhdGljIGludCBwYWNrX2FkODUyMihpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9ICh2YWwgJiAweGZmZikgfCAoYWRkciA/IDB4YzAwMCA6IDB4YTAwMCk7CisJcmV0dXJuIDE2OworfQorCitzdGF0aWMgaW50IHBhY2tfYWQ4ODA0KGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZykKK3sKKwkqYml0c3RyaW5nID0gKChhZGRyICYgMHhmKSA8PCA4KSB8ICh2YWwgJiAweGZmKTsKKwlyZXR1cm4gMTI7Cit9CisKK3N0YXRpYyBpbnQgcGFja19hZDg4NDIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCSpiaXRzdHJpbmcgPSAoKGFkZHIgKyAxKSA8PCA4KSB8ICh2YWwgJiAweGZmKTsKKwlyZXR1cm4gMTI7Cit9CisKKyNpZiAwCisvKgorICoJUmVhZCB0aGUgR1BDVHMgY3VycmVudCB2YWx1ZS4KKyAqLworc3RhdGljIGludCBHUENUX0dfV2F0Y2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuKQoreworCXVuc2lnbmVkIGludCBoaTEsIGhpMiwgbG87CisKKwlkZXZwcml2LT5ncGN0X2NvbW1hbmRbY2hhbl0gJj0gfkdfU2F2ZV9UcmFjZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dLAorCQlHX0NvbW1hbmRfUmVnaXN0ZXIoY2hhbikpOworCisJZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dIHw9IEdfU2F2ZV9UcmFjZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dLAorCQlHX0NvbW1hbmRfUmVnaXN0ZXIoY2hhbikpOworCisJLyogVGhpcyBwcm9jZWR1cmUgaXMgdXNlZCBiZWNhdXNlIHRoZSB0d28gcmVnaXN0ZXJzIGNhbm5vdAorCSAqIGJlIHJlYWQgYXRvbWljYWxseS4gKi8KKwlkbyB7CisJCWhpMSA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEdfU2F2ZV9SZWdpc3Rlcl9IaWdoKGNoYW4pKTsKKwkJbG8gPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBHX1NhdmVfUmVnaXN0ZXJfTG93KGNoYW4pKTsKKwkJaGkyID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgR19TYXZlX1JlZ2lzdGVyX0hpZ2goY2hhbikpOworCX0gd2hpbGUgKGhpMSAhPSBoaTIpOworCisJcmV0dXJuIChoaTEgPDwgMTYpIHwgbG87Cit9CisKK3N0YXRpYyB2b2lkIEdQQ1RfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuKQoreworCWludCB0ZW1wX2Fja19yZWcgPSAwOworCisJLy9wcmludGsoIkdQQ1RfUmVzZXQuLi4iKTsKKwlkZXZwcml2LT5ncGN0X2N1cl9vcGVyYXRpb25bY2hhbl0gPSBHUENUX1JFU0VUOworCisJc3dpdGNoIChjaGFuKSB7CisJY2FzZSAwOgorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzBfUmVzZXQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMF9HYXRlX0ludGVycnVwdF9FbmFibGUsIDApOworCQl0ZW1wX2Fja19yZWcgfD0gRzBfR2F0ZV9FcnJvcl9Db25maXJtOworCQl0ZW1wX2Fja19yZWcgfD0gRzBfVENfRXJyb3JfQ29uZmlybTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcwX1RDX0ludGVycnVwdF9BY2s7CisJCXRlbXBfYWNrX3JlZyB8PSBHMF9HYXRlX0ludGVycnVwdF9BY2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCB0ZW1wX2Fja19yZWcsCisJCQlJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXIpOworCisJCS8vcHJvYmxlbS4uLnRoaXMgaW50ZXJmZXJlcyB3aXRoIHRoZSBvdGhlciBjdHIuLi4KKwkJZGV2cHJpdi0+YW5fdHJpZ19ldGNfcmVnIHw9IEdQRk9fMF9PdXRwdXRfRW5hYmxlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW5fdHJpZ19ldGNfcmVnLAorCQkJQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzFfUmVzZXQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMF9HYXRlX0ludGVycnVwdF9FbmFibGUsIDApOworCQl0ZW1wX2Fja19yZWcgfD0gRzFfR2F0ZV9FcnJvcl9Db25maXJtOworCQl0ZW1wX2Fja19yZWcgfD0gRzFfVENfRXJyb3JfQ29uZmlybTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcxX1RDX0ludGVycnVwdF9BY2s7CisJCXRlbXBfYWNrX3JlZyB8PSBHMV9HYXRlX0ludGVycnVwdF9BY2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCB0ZW1wX2Fja19yZWcsCisJCQlJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIpOworCisJCWRldnByaXYtPmFuX3RyaWdfZXRjX3JlZyB8PSBHUEZPXzFfT3V0cHV0X0VuYWJsZTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFuX3RyaWdfZXRjX3JlZywKKwkJCUFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3Rlcik7CisJCWJyZWFrOworCX07CisKKwlkZXZwcml2LT5ncGN0X21vZGVbY2hhbl0gPSAwOworCWRldnByaXYtPmdwY3RfaW5wdXRfc2VsZWN0W2NoYW5dID0gMDsKKwlkZXZwcml2LT5ncGN0X2NvbW1hbmRbY2hhbl0gPSAwOworCisJZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dIHw9IEdfU3luY2hyb25pemVkX0dhdGU7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9tb2RlW2NoYW5dLAorCQlHX01vZGVfUmVnaXN0ZXIoY2hhbikpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ncGN0X2lucHV0X3NlbGVjdFtjaGFuXSwKKwkJR19JbnB1dF9TZWxlY3RfUmVnaXN0ZXIoY2hhbikpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoY2hhbikpOworCisJLy9wcmludGsoImV4aXQgR1BDVF9SZXNldFxuIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKwlyZXR1cm4gbmlfdGlvX2luc25fY29uZmlnKGNvdW50ZXIsIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisJcmV0dXJuIG5pX3Rpb19yaW5zbihjb3VudGVyLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIGludCBuaV9ncGN0X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKwlyZXR1cm4gbmlfdGlvX3dpbnNuKGNvdW50ZXIsIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pX2dwY3RfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IHJldHZhbDsKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisvLyAgICAgIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXJldHZhbCA9IG5pX3JlcXVlc3RfZ3BjdF9taXRlX2NoYW5uZWwoZGV2LCBjb3VudGVyLT5jb3VudGVyX2luZGV4LAorCQlDT01FRElfSU5QVVQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJubyBkbWEgY2hhbm5lbCBhdmFpbGFibGUgZm9yIHVzZSBieSBjb3VudGVyIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCW5pX3Rpb19hY2tub3dsZWRnZV9hbmRfY29uZmlybShjb3VudGVyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwluaV9lX3Nlcmllc19lbmFibGVfc2Vjb25kX2lycShkZXYsIGNvdW50ZXItPmNvdW50ZXJfaW5kZXgsIDEpOworCXJldHZhbCA9IG5pX3Rpb19jbWQoY291bnRlciwgcy0+YXN5bmMpOworI2Vsc2UKKwlyZXR2YWwgPSAtRU5PVFNVUFA7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX2dwY3RfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworI2lmZGVmIFBDSURNQQorCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKworCXJldHVybiBuaV90aW9fY21kdGVzdChjb3VudGVyLCBjbWQpOworI2Vsc2UKKwlyZXR1cm4gLUVOT1RTVVBQOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgbmlfZ3BjdF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG5pX3Rpb19jYW5jZWwoY291bnRlcik7CisJbmlfZV9zZXJpZXNfZW5hYmxlX3NlY29uZF9pcnEoZGV2LCBjb3VudGVyLT5jb3VudGVyX2luZGV4LCAwKTsKKwluaV9yZWxlYXNlX2dwY3RfbWl0ZV9jaGFubmVsKGRldiwgY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJcmV0dXJuIHJldHZhbDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoKKyAqCisgKiAgUHJvZ3JhbW1hYmxlIEZ1bmN0aW9uIElucHV0cworICoKKyAqLworCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJdW5zaWduZWQgcGZpX3JlZ19pbmRleDsKKwl1bnNpZ25lZCBhcnJheV9vZmZzZXQ7CisJaWYgKChzb3VyY2UgJiAweDFmKSAhPSBzb3VyY2UpCisJCXJldHVybiAtRUlOVkFMOworCXBmaV9yZWdfaW5kZXggPSAxICsgY2hhbiAvIDM7CisJYXJyYXlfb2Zmc2V0ID0gcGZpX3JlZ19pbmRleCAtIDE7CisJZGV2cHJpdi0+cGZpX291dHB1dF9zZWxlY3RfcmVnW2FycmF5X29mZnNldF0gJj0KKwkJfk1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfTWFzayhjaGFuKTsKKwlkZXZwcml2LT5wZmlfb3V0cHV0X3NlbGVjdF9yZWdbYXJyYXlfb2Zmc2V0XSB8PQorCQlNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X0JpdHMoY2hhbiwgc291cmNlKTsKKwluaV93cml0ZXcoZGV2cHJpdi0+cGZpX291dHB1dF9zZWxlY3RfcmVnW2FycmF5X29mZnNldF0sCisJCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0KHBmaV9yZWdfaW5kZXgpKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV9vbGRfc2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwkvLyBwcmUtbS1zZXJpZXMgYm9hcmRzIGhhdmUgZml4ZWQgc2lnbmFscyBvbiBwZmkgcGlucworCWlmIChzb3VyY2UgIT0gbmlfb2xkX2dldF9wZmlfcm91dGluZyhkZXYsIGNoYW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV9zZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJcmV0dXJuIG5pX21fc2VyaWVzX3NldF9wZmlfcm91dGluZyhkZXYsIGNoYW4sIHNvdXJjZSk7CisJZWxzZQorCQlyZXR1cm4gbmlfb2xkX3NldF9wZmlfcm91dGluZyhkZXYsIGNoYW4sIHNvdXJjZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pCit7CisJY29uc3QgdW5zaWduZWQgYXJyYXlfb2Zmc2V0ID0gY2hhbiAvIDM7CisJcmV0dXJuIE1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfU291cmNlKGNoYW4sCisJCWRldnByaXYtPnBmaV9vdXRwdXRfc2VsZWN0X3JlZ1thcnJheV9vZmZzZXRdKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pCit7CisJLy8gcHJlLW0tc2VyaWVzIGJvYXJkcyBoYXZlIGZpeGVkIHNpZ25hbHMgb24gcGZpIHBpbnMKKwlzd2l0Y2ggKGNoYW4pIHsKKwljYXNlIDA6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0FJX1NUQVJUMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BSV9TVEFSVDI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQUlfQ09OVkVSVDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9HX1NSQzE7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfR19HQVRFMTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BT19VUERBVEVfTjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BT19TVEFSVDE7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQUlfU1RBUlRfUFVMU0U7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfR19TUkMwOworCQlicmVhazsKKwljYXNlIDk6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0dfR0FURTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgdW5oYW5kbGVkIGNhc2UgaW4gc3dpdGNoLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfZ2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKQoreworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJcmV0dXJuIG5pX21fc2VyaWVzX2dldF9wZmlfcm91dGluZyhkZXYsIGNoYW4pOworCWVsc2UKKwkJcmV0dXJuIG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKTsKK30KKworc3RhdGljIGludCBuaV9jb25maWdfZmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwllbnVtIG5pX3BmaV9maWx0ZXJfc2VsZWN0IGZpbHRlcikKK3sKKwl1bnNpZ25lZCBiaXRzOworCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spID09IDApIHsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisJYml0cyA9IG5pX3JlYWRsKE1fT2Zmc2V0X1BGSV9GaWx0ZXIpOworCWJpdHMgJj0gfk1TZXJpZXNfUEZJX0ZpbHRlcl9TZWxlY3RfTWFzayhwZmlfY2hhbm5lbCk7CisJYml0cyB8PSBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X0JpdHMocGZpX2NoYW5uZWwsIGZpbHRlcik7CisJbmlfd3JpdGVsKGJpdHMsIE1fT2Zmc2V0X1BGSV9GaWx0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3BmaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spID09IDApIHsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW5pX3dyaXRldyhzLT5zdGF0ZSwgTV9PZmZzZXRfUEZJX0RPKTsKKwl9CisJZGF0YVsxXSA9IG5pX3JlYWR3KE1fT2Zmc2V0X1BGSV9ESSk7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfcGZpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIENPTUVESV9PVVRQVVQ6CisJCW5pX3NldF9iaXRzKGRldiwgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyLCAxIDw8IGNoYW4sIDEpOworCQlicmVhazsKKwljYXNlIENPTUVESV9JTlBVVDoKKwkJbmlfc2V0X2JpdHMoZGV2LCBJT19CaWRpcmVjdGlvbl9QaW5fUmVnaXN0ZXIsIDEgPDwgY2hhbiwgMCk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShkZXZwcml2LT4KKwkJCWlvX2JpZGlyZWN0aW9uX3Bpbl9yZWcgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX1JPVVRJTkc6CisJCXJldHVybiBuaV9zZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfUk9VVElORzoKKwkJZGF0YVsxXSA9IG5pX2dldF9wZmlfcm91dGluZyhkZXYsIGNoYW4pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0ZJTFRFUjoKKwkJcmV0dXJuIG5pX2NvbmZpZ19maWx0ZXIoZGV2LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKgorICoKKyAqICBOSSBSVFNJIEJ1cyBGdW5jdGlvbnMKKyAqCisgKi8KK3N0YXRpYyB2b2lkIG5pX3J0c2lfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvLyBJbml0aWFsaXNlcyB0aGUgUlRTSSBidXMgc2lnbmFsIHN3aXRjaCB0byBhIGRlZmF1bHQgc3RhdGUKKworCS8vIFNldCBjbG9jayBtb2RlIHRvIGludGVybmFsCisJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyID0gTVNlcmllc19SVFNJXzEwTUh6X0JpdDsKKwlpZiAobmlfc2V0X21hc3Rlcl9jbG9jayhkZXYsIE5JX01JT19JTlRFUk5BTF9DTE9DSywgMCkgPCAwKSB7CisJCXJ0X3ByaW50aygibmlfc2V0X21hc3Rlcl9jbG9jayBmYWlsZWQsIGJ1Zz8iKTsKKwl9CisJLy8gZGVmYXVsdCBpbnRlcm5hbCBsaW5lcyByb3V0aW5nIHRvIFJUU0kgYnVzIGxpbmVzCisJZGV2cHJpdi0+cnRzaV90cmlnX2Ffb3V0cHV0X3JlZyA9CisJCVJUU0lfVHJpZ19PdXRwdXRfQml0cygwLAorCQlOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQxKSB8IFJUU0lfVHJpZ19PdXRwdXRfQml0cygxLAorCQlOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQyKSB8IFJUU0lfVHJpZ19PdXRwdXRfQml0cygyLAorCQlOSV9SVFNJX09VVFBVVF9TQ0xLRykgfCBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoMywKKwkJTklfUlRTSV9PVVRQVVRfREFDVVBETik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcsCisJCVJUU0lfVHJpZ19BX091dHB1dF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyA9CisJCVJUU0lfVHJpZ19PdXRwdXRfQml0cyg0LAorCQlOSV9SVFNJX09VVFBVVF9EQV9TVEFSVDEpIHwgUlRTSV9UcmlnX091dHB1dF9CaXRzKDUsCisJCU5JX1JUU0lfT1VUUFVUX0dfU1JDMCkgfCBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoNiwKKwkJTklfUlRTSV9PVVRQVVRfR19HQVRFMCk7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQlkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnIHw9CisJCQlSVFNJX1RyaWdfT3V0cHV0X0JpdHMoNywgTklfUlRTSV9PVVRQVVRfUlRTSV9PU0MpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnLAorCQlSVFNJX1RyaWdfQl9PdXRwdXRfUmVnaXN0ZXIpOworCisJLy8gU2V0cyB0aGUgc291cmNlIGFuZCBkaXJlY3Rpb24gb2YgdGhlIDQgb24gYm9hcmQgbGluZXMKKy8vICAgICAgZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDB4MDAwMCwgUlRTSV9Cb2FyZF9SZWdpc3Rlcik7Cit9CisKK3N0YXRpYyBpbnQgbmlfcnRzaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworLyogRmluZCBiZXN0IG11bHRpcGxpZXIvZGl2aWRlciB0byB0cnkgYW5kIGdldCB0aGUgUExMIHJ1bm5pbmcgYXQgODAgTUh6CisgKiBnaXZlbiBhbiBhcmJpdHJhcnkgZnJlcXVlbmN5IGlucHV0IGNsb2NrICovCitzdGF0aWMgaW50IG5pX21zZXJpZXNfZ2V0X3BsbF9wYXJhbWV0ZXJzKHVuc2lnbmVkIHJlZmVyZW5jZV9wZXJpb2RfbnMsCisJdW5zaWduZWQgKmZyZXFfZGl2aWRlciwgdW5zaWduZWQgKmZyZXFfbXVsdGlwbGllciwKKwl1bnNpZ25lZCAqYWN0dWFsX3BlcmlvZF9ucykKK3sKKwl1bnNpZ25lZCBkaXY7CisJdW5zaWduZWQgYmVzdF9kaXYgPSAxOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfZGl2ID0gMHgxMDsKKwl1bnNpZ25lZCBtdWx0OworCXVuc2lnbmVkIGJlc3RfbXVsdCA9IDE7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF9tdWx0ID0gMHgxMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBpY29fcGVyX25hbm8gPSAxMDAwOworCisJY29uc3QgdW5zaWduZWQgcmVmZXJlbmNlX3BpY29zZWMgPSByZWZlcmVuY2VfcGVyaW9kX25zICogcGljb19wZXJfbmFubzsKKwkvKiBtLXNlcmllcyB3YW50cyB0aGUgcGhhc2VkLWxvY2tlZCBsb29wIHRvIG91dHB1dCA4ME1Ieiwgd2hpY2ggaXMgZGl2aWRlZCBieSA0IHRvCisJICogMjAgTUh6IGZvciBtb3N0IHRpbWluZyBjbG9ja3MgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgdGFyZ2V0X3BpY29zZWMgPSAxMjUwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZnVkZ2VfZmFjdG9yXzgwX3RvXzIwTWh6ID0gNDsKKwlpbnQgYmVzdF9wZXJpb2RfcGljb3NlYyA9IDA7CisJZm9yIChkaXYgPSAxOyBkaXYgPD0gbWF4X2RpdjsgKytkaXYpIHsKKwkJZm9yIChtdWx0ID0gMTsgbXVsdCA8PSBtYXhfbXVsdDsgKyttdWx0KSB7CisJCQl1bnNpZ25lZCBuZXdfcGVyaW9kX3BzID0KKwkJCQkocmVmZXJlbmNlX3BpY29zZWMgKiBkaXYpIC8gbXVsdDsKKwkJCWlmIChhYnMobmV3X3BlcmlvZF9wcyAtIHRhcmdldF9waWNvc2VjKSA8CisJCQkJYWJzKGJlc3RfcGVyaW9kX3BpY29zZWMgLSB0YXJnZXRfcGljb3NlYykpIHsKKwkJCQliZXN0X3BlcmlvZF9waWNvc2VjID0gbmV3X3BlcmlvZF9wczsKKwkJCQliZXN0X2RpdiA9IGRpdjsKKwkJCQliZXN0X211bHQgPSBtdWx0OworCQkJfQorCQl9CisJfQorCWlmIChiZXN0X3BlcmlvZF9waWNvc2VjID09IDApIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBmYWlsZWQgdG8gZmluZCBwbGwgcGFyYW1ldGVyc1xuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlPOworCX0KKwkqZnJlcV9kaXZpZGVyID0gYmVzdF9kaXY7CisJKmZyZXFfbXVsdGlwbGllciA9IGJlc3RfbXVsdDsKKwkqYWN0dWFsX3BlcmlvZF9ucyA9CisJCShiZXN0X3BlcmlvZF9waWNvc2VjICogZnVkZ2VfZmFjdG9yXzgwX3RvXzIwTWh6ICsKKwkJKHBpY29fcGVyX25hbm8gLyAyKSkgLyBwaWNvX3Blcl9uYW5vOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXJldHVybiA4OworCWVsc2UKKwkJcmV0dXJuIDc7Cit9CisKK3N0YXRpYyBpbnQgbmlfbXNlcmllc19zZXRfcGxsX21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc291cmNlLAorCXVuc2lnbmVkIHBlcmlvZF9ucykKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluX3BlcmlvZF9ucyA9IDUwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfcGVyaW9kX25zID0gMTAwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgdGltZW91dCA9IDEwMDA7CisJdW5zaWduZWQgcGxsX2NvbnRyb2xfYml0czsKKwl1bnNpZ25lZCBmcmVxX2RpdmlkZXI7CisJdW5zaWduZWQgZnJlcV9tdWx0aXBsaWVyOworCXVuc2lnbmVkIGk7CisJaW50IHJldHZhbDsKKwlpZiAoc291cmNlID09IE5JX01JT19QTExfUFhJMTBfQ0xPQ0spCisJCXBlcmlvZF9ucyA9IDEwMDsKKwkvLyB0aGVzZSBsaW1pdHMgYXJlIHNvbWV3aGF0IGFyYml0cmFyeSwgYnV0IE5JIGFkdmVydGlzZXMgMSB0byAyME1IeiByYW5nZSBzbyB3ZSdsbCB1c2UgdGhhdAorCWlmIChwZXJpb2RfbnMgPCBtaW5fcGVyaW9kX25zIHx8IHBlcmlvZF9ucyA+IG1heF9wZXJpb2RfbnMpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiVzOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBiZXR3ZWVuICVpIGFuZCAlaSBuYW5vc2VjICIKKwkJCSJmb3IgdGhlIHBoYXNlZC1sb2NrIGxvb3AuXG4iLCBfX0ZVTkNUSU9OX18sCisJCQltaW5fcGVyaW9kX25zLCBtYXhfcGVyaW9kX25zKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9IH5Vc2VfUlRTSV9DbG9ja19CaXQ7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnLAorCQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyKTsKKwlwbGxfY29udHJvbF9iaXRzID0KKwkJTVNlcmllc19QTExfRW5hYmxlX0JpdCB8IE1TZXJpZXNfUExMX1ZDT19Nb2RlXzc1XzE1ME1Iel9CaXRzOworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiB8PQorCQlNU2VyaWVzX1RpbWViYXNlMV9TZWxlY3RfQml0IHwgTVNlcmllc19UaW1lYmFzZTNfU2VsZWN0X0JpdDsKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgJj0gfk1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfTWFzazsKKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgTklfTUlPX1BMTF9QWElfU1RBUl9UUklHR0VSX0NMT0NLOgorCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgfD0KKwkJCU1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfU3Rhcl9UcmlnZ2VyX0JpdHM7CisJCXJldHZhbCA9IG5pX21zZXJpZXNfZ2V0X3BsbF9wYXJhbWV0ZXJzKHBlcmlvZF9ucywgJmZyZXFfZGl2aWRlciwKKwkJCSZmcmVxX211bHRpcGxpZXIsICZkZXZwcml2LT5jbG9ja19ucyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJYnJlYWs7CisJY2FzZSBOSV9NSU9fUExMX1BYSTEwX0NMT0NLOgorCQkvKiBweGkgY2xvY2sgaXMgMTBNSHogKi8KKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyIHw9CisJCQlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1BYSV9DbG9jazEwOworCQlyZXR2YWwgPSBuaV9tc2VyaWVzX2dldF9wbGxfcGFyYW1ldGVycyhwZXJpb2RfbnMsICZmcmVxX2RpdmlkZXIsCisJCQkmZnJlcV9tdWx0aXBsaWVyLCAmZGV2cHJpdi0+Y2xvY2tfbnMpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXsKKwkJCXVuc2lnbmVkIHJ0c2lfY2hhbm5lbDsKKwkJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfcnRzaV9jaGFubmVsID0gNzsKKwkJCWZvciAocnRzaV9jaGFubmVsID0gMDsgcnRzaV9jaGFubmVsIDw9IG1heF9ydHNpX2NoYW5uZWw7CisJCQkJKytydHNpX2NoYW5uZWwpIHsKKwkJCQlpZiAoc291cmNlID09CisJCQkJCU5JX01JT19QTExfUlRTSV9DTE9DSyhydHNpX2NoYW5uZWwpKSB7CisJCQkJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiB8PQorCQkJCQkJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJX0JpdHMKKwkJCQkJCShydHNpX2NoYW5uZWwpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAocnRzaV9jaGFubmVsID4gbWF4X3J0c2lfY2hhbm5lbCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHZhbCA9IG5pX21zZXJpZXNfZ2V0X3BsbF9wYXJhbWV0ZXJzKHBlcmlvZF9ucywKKwkJCQkmZnJlcV9kaXZpZGVyLCAmZnJlcV9tdWx0aXBsaWVyLAorCQkJCSZkZXZwcml2LT5jbG9ja19ucyk7CisJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJyZWFrOworCX0KKwluaV93cml0ZXcoZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyLCBNX09mZnNldF9DbG9ja19hbmRfRm91dDIpOworCXBsbF9jb250cm9sX2JpdHMgfD0KKwkJTVNlcmllc19QTExfRGl2aXNvcl9CaXRzKGZyZXFfZGl2aWRlcikgfAorCQlNU2VyaWVzX1BMTF9NdWx0aXBsaWVyX0JpdHMoZnJlcV9tdWx0aXBsaWVyKTsKKy8vICAgICAgcnRfcHJpbnRrKCJ1c2luZyBkaXZpZGVyPSVpLCBtdWx0aXBsaWVyPSVpIGZvciBQTEwuICBwbGxfY29udHJvbF9iaXRzID0gMHgleFxuIiwgZnJlcV9kaXZpZGVyLCBmcmVxX211bHRpcGxpZXIsIHBsbF9jb250cm9sX2JpdHMpOworLy8gICAgICBydF9wcmludGsoImNsb2NrX25zPSVkXG4iLCBkZXZwcml2LT5jbG9ja19ucyk7CisJbmlfd3JpdGV3KHBsbF9jb250cm9sX2JpdHMsIE1fT2Zmc2V0X1BMTF9Db250cm9sKTsKKwlkZXZwcml2LT5jbG9ja19zb3VyY2UgPSBzb3VyY2U7CisJLyogaXQgc2VlbXMgdG8gdHlwaWNhbGx5IHRha2UgYSBmZXcgaHVuZHJlZCBtaWNyb3NlY29uZHMgZm9yIFBMTCB0byBsb2NrICovCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7ICsraSkgeworCQlpZiAobmlfcmVhZHcoTV9PZmZzZXRfUExMX1N0YXR1cykgJiBNU2VyaWVzX1BMTF9Mb2NrZWRfQml0KSB7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiVzOiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgUExMIHRvIGxvY2sgdG8gcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSAlaSB3aXRoIHBlcmlvZCAlaSBucy5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHNvdXJjZSwgcGVyaW9kX25zKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCXJldHVybiAzOworfQorCitzdGF0aWMgaW50IG5pX3NldF9tYXN0ZXJfY2xvY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNvdXJjZSwKKwl1bnNpZ25lZCBwZXJpb2RfbnMpCit7CisJaWYgKHNvdXJjZSA9PSBOSV9NSU9fSU5URVJOQUxfQ0xPQ0spIHsKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcgJj0gflVzZV9SVFNJX0Nsb2NrX0JpdDsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnLAorCQkJUlRTSV9UcmlnX0RpcmVjdGlvbl9SZWdpc3Rlcik7CisJCWRldnByaXYtPmNsb2NrX25zID0gVElNRUJBU0VfMV9OUzsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgJj0KKwkJCQl+KE1TZXJpZXNfVGltZWJhc2UxX1NlbGVjdF9CaXQgfAorCQkJCU1TZXJpZXNfVGltZWJhc2UzX1NlbGVjdF9CaXQpOworCQkJbmlfd3JpdGV3KGRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiwKKwkJCQlNX09mZnNldF9DbG9ja19hbmRfRm91dDIpOworCQkJbmlfd3JpdGV3KDAsIE1fT2Zmc2V0X1BMTF9Db250cm9sKTsKKwkJfQorCQlkZXZwcml2LT5jbG9ja19zb3VyY2UgPSBzb3VyY2U7CisJfSBlbHNlIHsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQlyZXR1cm4gbmlfbXNlcmllc19zZXRfcGxsX21hc3Rlcl9jbG9jayhkZXYsIHNvdXJjZSwKKwkJCQlwZXJpb2RfbnMpOworCQl9IGVsc2UgeworCQkJaWYgKHNvdXJjZSA9PSBOSV9NSU9fUlRTSV9DTE9DSykgeworCQkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnIHw9CisJCQkJCVVzZV9SVFNJX0Nsb2NrX0JpdDsKKwkJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCQkJZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcsCisJCQkJCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIpOworCQkJCWlmIChwZXJpb2RfbnMgPT0gMCkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiJXM6IHdlIGRvbid0IGhhbmRsZSBhbiB1bnNwZWNpZmllZCBjbG9jayBwZXJpb2QgY29ycmVjdGx5IHlldCwgcmV0dXJuaW5nIGVycm9yLlxuIiwKKwkJCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0gZWxzZSB7CisJCQkJCWRldnByaXYtPmNsb2NrX25zID0gcGVyaW9kX25zOworCQkJCX0KKwkJCQlkZXZwcml2LT5jbG9ja19zb3VyY2UgPSBzb3VyY2U7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMzsKK30KKworc3RhdGljIGludCBuaV92YWxpZF9ydHNpX291dHB1dF9zb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCWlmIChjaGFuID49IG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhkZXYpKSB7CisJCWlmIChjaGFuID09IG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwpIHsKKwkJCWlmIChzb3VyY2UgPT0gTklfUlRTSV9PVVRQVVRfUlRTSV9PU0MpCisJCQkJcmV0dXJuIDE7CisJCQllbHNlIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIlczogaW52YWxpZCBzb3VyY2UgZm9yIGNoYW5uZWw9JWksIGNoYW5uZWwgJWkgaXMgYWx3YXlzIHRoZSBSVFNJIGNsb2NrIGZvciBwcmUtbS1zZXJpZXMgYm9hcmRzLlxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBjaGFuLAorCQkJCQlvbGRfUlRTSV9jbG9ja19jaGFubmVsKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIE5JX1JUU0lfT1VUUFVUX0FEUl9TVEFSVDE6CisJY2FzZSBOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQyOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfU0NMS0c6CisJY2FzZSBOSV9SVFNJX09VVFBVVF9EQUNVUEROOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfREFfU1RBUlQxOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfR19TUkMwOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfR19HQVRFMDoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1JHT1VUMDoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1JUU0lfQlJEXzA6CisJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1JUU0lfT1NDOgorCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfc2V0X3J0c2lfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJaWYgKG5pX3ZhbGlkX3J0c2lfb3V0cHV0X3NvdXJjZShkZXYsIGNoYW4sIHNvdXJjZSkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoYW4gPCA0KSB7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcgJj0gflJUU0lfVHJpZ19PdXRwdXRfTWFzayhjaGFuKTsKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2Ffb3V0cHV0X3JlZyB8PQorCQkJUlRTSV9UcmlnX091dHB1dF9CaXRzKGNoYW4sIHNvdXJjZSk7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYV9vdXRwdXRfcmVnLAorCQkJUlRTSV9UcmlnX0FfT3V0cHV0X1JlZ2lzdGVyKTsKKwl9IGVsc2UgaWYgKGNoYW4gPCA4KSB7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19iX291dHB1dF9yZWcgJj0gflJUU0lfVHJpZ19PdXRwdXRfTWFzayhjaGFuKTsKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyB8PQorCQkJUlRTSV9UcmlnX091dHB1dF9CaXRzKGNoYW4sIHNvdXJjZSk7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnLAorCQkJUlRTSV9UcmlnX0JfT3V0cHV0X1JlZ2lzdGVyKTsKKwl9CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9nZXRfcnRzaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKQoreworCWlmIChjaGFuIDwgNCkgeworCQlyZXR1cm4gUlRTSV9UcmlnX091dHB1dF9Tb3VyY2UoY2hhbiwKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcpOworCX0gZWxzZSBpZiAoY2hhbiA8IG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhkZXYpKSB7CisJCXJldHVybiBSVFNJX1RyaWdfT3V0cHV0X1NvdXJjZShjaGFuLAorCQkJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyk7CisJfSBlbHNlIHsKKwkJaWYgKGNoYW4gPT0gb2xkX1JUU0lfY2xvY2tfY2hhbm5lbCkKKwkJCXJldHVybiBOSV9SVFNJX09VVFBVVF9SVFNJX09TQzsKKwkJcnRfcHJpbnRrKCIlczogYnVnISBzaG91bGQgbmV2ZXIgZ2V0IGhlcmU/XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfcnRzaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCWlmIChjaGFuIDwgbnVtX2NvbmZpZ3VyYWJsZV9ydHNpX2NoYW5uZWxzKGRldikpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnIHw9CisJCQkJUlRTSV9PdXRwdXRfQml0KGNoYW4sCisJCQkJKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSAhPQorCQkJCTApOworCQl9IGVsc2UgaWYgKGNoYW4gPT0gb2xkX1JUU0lfY2xvY2tfY2hhbm5lbCkgeworCQkJZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcgfD0KKwkJCQlEcml2ZV9SVFNJX0Nsb2NrX0JpdDsKKwkJfQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcsCisJCQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCWlmIChjaGFuIDwgbnVtX2NvbmZpZ3VyYWJsZV9ydHNpX2NoYW5uZWxzKGRldikpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9CisJCQkJflJUU0lfT3V0cHV0X0JpdChjaGFuLAorCQkJCShib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgIT0KKwkJCQkwKTsKKwkJfSBlbHNlIGlmIChjaGFuID09IG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9CisJCQkJfkRyaXZlX1JUU0lfQ2xvY2tfQml0OworCQl9CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZywKKwkJCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJaWYgKGNoYW4gPCBudW1fY29uZmlndXJhYmxlX3J0c2lfY2hhbm5lbHMoZGV2KSkgeworCQkJZGF0YVsxXSA9CisJCQkJKGRldnByaXYtPgorCQkJCXJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICYgUlRTSV9PdXRwdXRfQml0KGNoYW4sCisJCQkJCShib2FyZHR5cGUuCisJCQkJCQlyZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQkJCQkhPQorCQkJCQkwKSkgPyBJTlNOX0NPTkZJR19ESU9fT1VUUFVUIDoKKwkJCQlJTlNOX0NPTkZJR19ESU9fSU5QVVQ7CisJCX0gZWxzZSBpZiAoY2hhbiA9PSBvbGRfUlRTSV9jbG9ja19jaGFubmVsKSB7CisJCQlkYXRhWzFdID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJcnRzaV90cmlnX2RpcmVjdGlvbl9yZWcgJiBEcml2ZV9SVFNJX0Nsb2NrX0JpdCkKKwkJCQk/IElOU05fQ09ORklHX0RJT19PVVRQVVQgOgorCQkJCUlOU05fQ09ORklHX0RJT19JTlBVVDsKKwkJfQorCQlyZXR1cm4gMjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfQ0xPQ0tfU1JDOgorCQlyZXR1cm4gbmlfc2V0X21hc3Rlcl9jbG9jayhkZXYsIGRhdGFbMV0sIGRhdGFbMl0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkM6CisJCWRhdGFbMV0gPSBkZXZwcml2LT5jbG9ja19zb3VyY2U7CisJCWRhdGFbMl0gPSBkZXZwcml2LT5jbG9ja19uczsKKwkJcmV0dXJuIDM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX1JPVVRJTkc6CisJCXJldHVybiBuaV9zZXRfcnRzaV9yb3V0aW5nKGRldiwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX1JPVVRJTkc6CisJCWRhdGFbMV0gPSBuaV9nZXRfcnRzaV9yb3V0aW5nKGRldiwgY2hhbik7CisJCXJldHVybiAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNzNTUyOV93YWl0X2Zvcl9pZGxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKwljb25zdCBpbnQgdGltZW91dCA9IEhaOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQlzdGF0dXMgPSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19TdGF0dXNfNjd4eCk7CisJCWlmICgoc3RhdHVzICYgQ1NTX0FEQ19CVVNZKSA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoc2NoZWR1bGVfdGltZW91dCgxKSkgeworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisvL3ByaW50aygibG9vcGVkICVpIHRpbWVzIHdhaXRpbmcgZm9yIGlkbGVcbiIsIGkpOworCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcnRfcHJpbnRrKCIlczogJXM6IHRpbWVvdXRcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3M1NTI5X2NvbW1hbmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKwlpbnQgaTsKKworCW5pX2FvX3dpbl9vdXR3KGRldiwgdmFsdWUsIENBTF9BRENfQ29tbWFuZF82N3h4KTsKKwkvKiBnaXZlIHRpbWUgZm9yIGNvbW1hbmQgdG8gc3RhcnQgYmVpbmcgc2VyaWFsbHkgY2xvY2tlZCBpbnRvIGNzNTUyOS4KKwkgKiB0aGlzIGluc3VyZXMgdGhhdCB0aGUgQ1NTX0FEQ19CVVNZIGJpdCB3aWxsIGdldCBwcm9wZXJseQorCSAqIHNldCBiZWZvcmUgd2UgZXhpdCB0aGlzIGZ1bmN0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19TdGF0dXNfNjd4eCkgJiBDU1NfQURDX0JVU1kpKQorCQkJYnJlYWs7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorLy9wcmludGsoImxvb3BlZCAlaSB0aW1lcyB3cml0aW5nIGNvbW1hbmQgdG8gY3M1NTI5XG4iLCBpKTsKKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJwb3NzaWJsZSBwcm9ibGVtIC0gbmV2ZXIgc2F3IGFkYyBnbyBidXN5PyIpOworCX0KK30KKworLyogd3JpdGUgdG8gY3M1NTI5IHJlZ2lzdGVyICovCitzdGF0aWMgdm9pZCBjczU1MjlfY29uZmlnX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUsCisJdW5zaWduZWQgaW50IHJlZ19zZWxlY3RfYml0cykKK3sKKwluaV9hb193aW5fb3V0dyhkZXYsICgodmFsdWUgPj4gMTYpICYgMHhmZiksCisJCUNBTF9BRENfQ29uZmlnX0RhdGFfSGlnaF9Xb3JkXzY3eHgpOworCW5pX2FvX3dpbl9vdXR3KGRldiwgKHZhbHVlICYgMHhmZmZmKSwKKwkJQ0FMX0FEQ19Db25maWdfRGF0YV9Mb3dfV29yZF82N3h4KTsKKwlyZWdfc2VsZWN0X2JpdHMgJj0gQ1NDTURfUkVHSVNURVJfU0VMRUNUX01BU0s7CisJY3M1NTI5X2NvbW1hbmQoZGV2LCBDU0NNRF9DT01NQU5EIHwgcmVnX3NlbGVjdF9iaXRzKTsKKwlpZiAoY3M1NTI5X3dhaXRfZm9yX2lkbGUoZGV2KSkKKwkJY29tZWRpX2Vycm9yKGRldiwgInRpbWUgb3Igc2lnbmFsIGluIGNzNTUyOV9jb25maWdfd3JpdGUoKSIpOworfQorCisjaWZkZWYgTklfQ1M1NTI5X0RFQlVHCisvKiByZWFkIGZyb20gY3M1NTI5IHJlZ2lzdGVyICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUyOV9jb25maWdfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmVnX3NlbGVjdF9iaXRzKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXJlZ19zZWxlY3RfYml0cyAmPSBDU0NNRF9SRUdJU1RFUl9TRUxFQ1RfTUFTSzsKKwljczU1MjlfY29tbWFuZChkZXYsIENTQ01EX0NPTU1BTkQgfCBDU0NNRF9SRUFEIHwgcmVnX3NlbGVjdF9iaXRzKTsKKwlpZiAoY3M1NTI5X3dhaXRfZm9yX2lkbGUoZGV2KSkKKwkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQgb3Igc2lnbmFsIGluIGNzNTUyOV9jb25maWdfcmVhZCgpIik7CisJdmFsdWUgPSAobmlfYW9fd2luX2ludyhkZXYsCisJCQlDQUxfQURDX0NvbmZpZ19EYXRhX0hpZ2hfV29yZF82N3h4KSA8PCAxNikgJiAweGZmMDAwMDsKKwl2YWx1ZSB8PSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19Db25maWdfRGF0YV9Mb3dfV29yZF82N3h4KSAmIDB4ZmZmZjsKKwlyZXR1cm4gdmFsdWU7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjczU1MjlfZG9fY29udmVyc2lvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgKmRhdGEpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisKKwljczU1MjlfY29tbWFuZChkZXYsIENTQ01EX0NPTU1BTkQgfCBDU0NNRF9TSU5HTEVfQ09OVkVSU0lPTik7CisJcmV0dmFsID0gY3M1NTI5X3dhaXRfZm9yX2lkbGUoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkidGltZW91dCBvciBzaWduYWwgaW4gY3M1NTI5X2RvX2NvbnZlcnNpb24oKSIpOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwlzdGF0dXMgPSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19TdGF0dXNfNjd4eCk7CisJaWYgKHN0YXR1cyAmIENTU19PU0NfREVURUNUKSB7CisJCXJ0X3ByaW50aworCQkJKCJuaV9taW9fY29tbW9uOiBjczU1MjkgY29udmVyc2lvbiBlcnJvciwgc3RhdHVzIENTU19PU0NfREVURUNUXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChzdGF0dXMgJiBDU1NfT1ZFUlJBTkdFKSB7CisJCXJ0X3ByaW50aworCQkJKCJuaV9taW9fY29tbW9uOiBjczU1MjkgY29udmVyc2lvbiBlcnJvciwgb3ZlcnJhbmdlIChpZ25vcmluZylcbiIpOworCX0KKwlpZiAoZGF0YSkgeworCQkqZGF0YSA9IG5pX2FvX3dpbl9pbncoZGV2LCBDQUxfQURDX0RhdGFfNjd4eCk7CisJCS8qIGNzNTUyOSByZXR1cm5zIDE2IGJpdCBzaWduZWQgZGF0YSBpbiBiaXBvbGFyIG1vZGUgKi8KKwkJKmRhdGEgXj0gKDEgPDwgMTUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczU1MjlfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgcmV0dmFsOworCXVuc2lnbmVkIHNob3J0IHNhbXBsZTsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbF9zZWxlY3Q7CisJY29uc3QgdW5zaWduZWQgaW50IElOVEVSTkFMX1JFRiA9IDB4MTAwMDsKKworCS8qIFNldCBjYWxpYnJhdGlvbiBhZGMgc291cmNlLiAgRG9jcyBsaWUsIHJlZmVyZW5jZSBzZWxlY3QgYml0cyA4IHRvIDExCisJICogZG8gbm90aGluZy4gYml0IDEyIHNlZW1zIHRvIGNob29zZXMgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UsIGJpdAorCSAqIDEzIGNhdXNlcyB0aGUgYWRjIGlucHV0IHRvIGdvIG92ZXJyYW5nZSAobWF5YmUgcmVhZHMgZXh0ZXJuYWwgcmVmZXJlbmNlPykgKi8KKwlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKQorCQljaGFubmVsX3NlbGVjdCA9IElOVEVSTkFMX1JFRjsKKwllbHNlCisJCWNoYW5uZWxfc2VsZWN0ID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJbmlfYW9fd2luX291dHcoZGV2LCBjaGFubmVsX3NlbGVjdCwgQU9fQ2FsaWJyYXRpb25fQ2hhbm5lbF9TZWxlY3RfNjd4eCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXJldHZhbCA9IGNzNTUyOV9kb19jb252ZXJzaW9uKGRldiwgJnNhbXBsZSk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJZGF0YVtuXSA9IHNhbXBsZTsKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jczU1Mjkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGNvbmZpZ19iaXRzID0KKwkJQ1NDRkdfUE9SVF9NT0RFIHwgQ1NDRkdfV09SRF9SQVRFXzIxODBfQ1lDTEVTOworCisjaWYgMQorCS8qIGRvIHNlbGYtY2FsaWJyYXRpb24gKi8KKwljczU1MjlfY29uZmlnX3dyaXRlKGRldiwgY29uZmlnX2JpdHMgfCBDU0NGR19TRUxGX0NBTF9PRkZTRVRfR0FJTiwKKwkJQ1NDTURfQ09ORklHX1JFR0lTVEVSKTsKKwkvKiBuZWVkIHRvIGZvcmNlIGEgY29udmVyc2lvbiBmb3IgY2FsaWJyYXRpb24gdG8gcnVuICovCisJY3M1NTI5X2RvX2NvbnZlcnNpb24oZGV2LCBOVUxMKTsKKyNlbHNlCisJLyogZm9yY2UgZ2FpbiBjYWxpYnJhdGlvbiB0byAxICovCisJY3M1NTI5X2NvbmZpZ193cml0ZShkZXYsIDB4NDAwMDAwLCBDU0NNRF9HQUlOX1JFR0lTVEVSKTsKKwljczU1MjlfY29uZmlnX3dyaXRlKGRldiwgY29uZmlnX2JpdHMgfCBDU0NGR19TRUxGX0NBTF9PRkZTRVQsCisJCUNTQ01EX0NPTkZJR19SRUdJU1RFUik7CisJaWYgKGNzNTUyOV93YWl0X2Zvcl9pZGxlKGRldikpCisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0IG9yIHNpZ25hbCBpbiBpbml0X2NzNTUyOSgpXG4iKTsKKyNlbmRpZgorI2lmZGVmIE5JX0NTNTUyOV9ERUJVRworCXJ0X3ByaW50aygiY29uZmlnOiAweCV4XG4iLCBjczU1MjlfY29uZmlnX3JlYWQoZGV2LAorCQlDU0NNRF9DT05GSUdfUkVHSVNURVIpKTsKKwlydF9wcmludGsoImdhaW46IDB4JXhcbiIsIGNzNTUyOV9jb25maWdfcmVhZChkZXYsCisJCUNTQ01EX0dBSU5fUkVHSVNURVIpKTsKKwlydF9wcmludGsoIm9mZnNldDogMHgleFxuIiwgY3M1NTI5X2NvbmZpZ19yZWFkKGRldiwKKwkJQ1NDTURfT0ZGU0VUX1JFR0lTVEVSKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM1N2MyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCkBAIC0wLDAgKzEsNTUxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSBQQ01DSUEgTUlPIEUgc2VyaWVzIGNhcmRzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pX21pb19jcworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIERBUUNhcmQgRSBzZXJpZXMKK0F1dGhvcjogZHMKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gREFRQ2FyZC1BSS0xNlhFLTUwIChuaV9taW9fY3MpLAorICBEQVFDYXJkLUFJLTE2RS00LCBEQVFDYXJkLTYwNjJFLCBEQVFDYXJkLTYwMjRFLCBEQVFDYXJkLTYwMzZFCitVcGRhdGVkOiBUaHUgT2N0IDIzIDE5OjQzOjE3IENEVCAyMDAzCisKK1NlZSB0aGUgbm90ZXMgaW4gdGhlIG5pX2F0bWlvLm8gZHJpdmVyLgorKi8KKy8qCisJVGhlIHJlYWwgZ3V0cyBvZiB0aGUgZHJpdmVyIGlzIGluIG5pX21pb19jb21tb24uYywgd2hpY2ggaXMKKwlpbmNsdWRlZCBieSBhbGwgdGhlIEUgc2VyaWVzIGRyaXZlcnMuCisKKwlSZWZlcmVuY2VzIGZvciBzcGVjaWZpY2F0aW9uczoKKworCSAgIDM0MTA4MGEucGRmICBEQVFDYXJkIEUgU2VyaWVzIFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJuaV9zdGMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKKyN1bmRlZiBERUJVRworCisjZGVmaW5lIEFUTUlPIDEKKyN1bmRlZiBQQ0lNSU8KKworLyoKKyAqICBBVCBzcGVjaWZpYyBzZXR1cAorICovCisKKyNkZWZpbmUgTklfU0laRSAweDIwCisKKyNkZWZpbmUgTUFYX05fQ0FMREFDUyAzMgorCitzdGF0aWMgY29uc3QgbmlfYm9hcmQgbmlfYm9hcmRzW10gPSB7CisgICAgICB7ZGV2aWNlX2lkOjB4MDEwZCwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC1haS0xNnhlLTUwIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzgsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBuX2FvY2hhbjowLAorCSAgICAgIGFvYml0czoJMCwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBudW1fcDBfZGlvX2NoYW5uZWxzOjgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkgICAgICBjYWxkYWM6CXtkYWM4ODAwLCBkYWM4MDQzfSwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MHgwMTBjLAorCSAgICAgIG5hbWU6CSJEQVFDYXJkLWFpLTE2ZS00IiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE2LAorCSAgICAgIGFpX3NwZWVkOjQwMDAsCisJICAgICAgbl9hb2NoYW46MCwKKwkgICAgICBhb2JpdHM6CTAsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgbnVtX3AwX2Rpb19jaGFubmVsczo4LAorCSAgICAgIGhhc184MjU1OjAsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MX0sCS8qIHZlcmlmaWVkICovCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjB4MDJjNCwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC02MDYyRSIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjgxOTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JnJhbmdlX2JpcG9sYXIxMCwKKwkgICAgICBhb191bmlwb2xhcjowLAorCSAgICAgIGFvX3NwZWVkOjExNzYsCisJICAgICAgbnVtX3AwX2Rpb19jaGFubmVsczo4LAorCSAgICAgIGhhc184MjU1OjAsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwJLyogdmVyaWZpZWQgKi8KKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MHgwNzVlLAorCSAgICAgIG5hbWU6CSJEQVFDYXJkLTYwMjRFIiwJLyogc3BlY3MgaW5jb3JyZWN0ISAqLworCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDoxMDI0LAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZyYW5nZV9iaXBvbGFyMTAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBhb19zcGVlZDoxMDAwMDAwLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBoYXNfODI1NTowLAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjB4MDI0NSwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC02MDM2RSIsCS8qIHNwZWNzIGluY29ycmVjdCEgKi8KKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MSwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzQsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTYsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZyYW5nZV9iaXBvbGFyMTAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBhb19zcGVlZDoxMDAwMDAwLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBoYXNfODI1NTowLAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCisJCX0sCisjaWYgMAorICAgICAge2RldmljZV9pZDoweDAwMDAsCS8qIHVua25vd24gKi8KKwkgICAgICBuYW1lOgkiREFRQ2FyZC02NzE1IiwKKwkgICAgICBuX2FkY2hhbjowLAorCSAgICAgIG5fYW9jaGFuOjgsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb182NzF4Ogk4MTkyLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBjYWxkYWM6CXttYjg4MzQxLCBtYjg4MzQxfSwKKwkJfSwKKyNlbmRpZgorCS8qIE4uQi4gVXBkYXRlIG5pX21pb19jc19pZHNbXSB3aGVuIGVudHJpZXMgYWRkZWQgYWJvdmUuICovCit9OworCisjZGVmaW5lIGludGVycnVwdF9waW4oYSkJMAorCisjZGVmaW5lIElSUV9QT0xBUklUWSAxCisKKyNkZWZpbmUgTklfRV9JUlFfRkxBR1MJCUlSUUZfU0hBUkVECisKK3N0cnVjdCBuaV9wcml2YXRlIHsKKworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisgTklfUFJJVkFURV9DT01NT059OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbmlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyogSG93IHdlIGFjY2VzcyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBuaV93cml0ZWwoYSxiKQkJKG91dGwoKGEpLChiKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3JlYWRsKGEpCQkoaW5sKChhKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3dyaXRldyhhLGIpCQkob3V0dygoYSksKGIpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfcmVhZHcoYSkJCShpbncoKGEpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfd3JpdGViKGEsYikJCShvdXRiKChhKSwoYikrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV9yZWFkYihhKQkJKGluYigoYSkrZGV2LT5pb2Jhc2UpKQorCisvKiBIb3cgd2UgYWNjZXNzIHdpbmRvd2VkIHJlZ2lzdGVycyAqLworCisvKiBXZSBhdXRvbWF0aWNhbGx5IHRha2UgYWR2YW50YWdlIG9mIFNUQyByZWdpc3RlcnMgdGhhdCBjYW4gYmUKKyAqIHJlYWQvd3JpdHRlbiBkaXJlY3RseSBpbiB0aGUgSS9PIHNwYWNlIG9mIHRoZSBib2FyZC4gIFRoZQorICogREFRQ2FyZCBkZXZpY2VzIG1hcCB0aGUgbG93IDggU1RDIHJlZ2lzdGVycyB0byBpb2Jhc2UrYWRkcioyLiAqLworCitzdGF0aWMgdm9pZCBtaW9fY3Nfd2luX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoYWRkciA8IDgpIHsKKwkJbmlfd3JpdGV3KGRhdGEsIGFkZHIgKiAyKTsKKwl9IGVsc2UgeworCQluaV93cml0ZXcoYWRkciwgV2luZG93X0FkZHJlc3MpOworCQluaV93cml0ZXcoZGF0YSwgV2luZG93X0RhdGEpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVpbnQxNl90IG1pb19jc193aW5faW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDE2X3QgcmV0OworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCWlmIChhZGRyIDwgOCkgeworCQlyZXQgPSBuaV9yZWFkdyhhZGRyICogMik7CisJfSBlbHNlIHsKKwkJbmlfd3JpdGV3KGFkZHIsIFdpbmRvd19BZGRyZXNzKTsKKwkJcmV0ID0gbmlfcmVhZHcoV2luZG93X0RhdGEpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWlvX2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG1pb19jc19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9uaV9taW9fY3MgPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfbWlvX2NzIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDptaW9fY3NfYXR0YWNoLAorICAgICAgZGV0YWNoOm1pb19jc19kZXRhY2gsCit9OworCisjaW5jbHVkZSAibmlfbWlvX2NvbW1vbi5jIgorCitzdGF0aWMgaW50IG5pX2dldGJvYXJkdHlwZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworCisvKiBjbGVhbiB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCisvKiBjYWxsZWQgd2hlbiBkcml2ZXIgaXMgcmVtb3ZlZCAqLworc3RhdGljIGludCBtaW9fY3NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW1pb19jb21tb25fZGV0YWNoKGRldik7CisKKwkvKiBQQ01DSUEgbGF5ZXIgZnJlZXMgdGhlIElPIHJlZ2lvbiAqLworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlvX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBjc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpjdXJfZGV2ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX21pb19jcyI7CitzdGF0aWMgZGV2X25vZGVfdCBkZXZfbm9kZSA9IHsKKwkibmlfbWlvX2NzIiwKKwlDT01FRElfTUFKT1IsIDAsCisJTlVMTAorfTsKK3N0YXRpYyBpbnQgY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKwljdXJfZGV2ID0gbGluazsKKworCW1pb19jc19jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CisKK3N0YXRpYyB2b2lkIGNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlEUFJJTlRLKCJjc19kZXRhY2gobGluaz0lcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPmRldl9ub2RlKSB7CisJCWNzX3JlbGVhc2UobGluayk7CisJfQorfQorCitzdGF0aWMgaW50IG1pb19jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURQUklOVEsoInBtIHN1c3BlbmRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlvX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlEUFJJTlRLKCJwbSByZXN1bWVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtaW9fY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXR1cGxlX3QgdHVwbGU7CisJdV9zaG9ydCBidWZbMTI4XTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBtYW5maWQgPSAwLCBwcm9kaWQgPSAwOworCWludCByZXQ7CisKKwlEUFJJTlRLKCJtaW9fY3NfY29uZmlnKGxpbms9JXApXG4iLCBsaW5rKTsKKworCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKKwlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOworCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworI2lmIDAKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OIHwgVFVQTEVfUkVUVVJOX0xJTks7CisJaW5mby0+bXVsdGkoZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpID09IDApOworI2VuZGlmCisKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApICYmCisJCShwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSAwKSkgeworCQltYW5maWQgPSBsZTE2X3RvX2NwdShidWZbMF0pOworCQlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOworCX0KKwkvL3ByaW50aygibWFuZmlkID0gMHglMDR4LCAweCUwNHhcbiIsbWFuZmlkLHByb2RpZCk7CisKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CisJcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CisJcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKKworI2lmIDAKKwlwcmludGsoIiBpbmRleDogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleCk7CisJcHJpbnRrKCIgZmxhZ3M6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuZmxhZ3MpOworCXByaW50aygiIGlvIGZsYWdzOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzKTsKKwlwcmludGsoIiBpbyBud2luOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLm53aW4pOworCXByaW50aygiIGlvIGJhc2U6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2UpOworCXByaW50aygiIGlvIGxlbjogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuKTsKKwlwcmludGsoIiBpcnExOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMSk7CisJcHJpbnRrKCIgaXJxMjogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pcnEuSVJRSW5mbzIpOworCXByaW50aygiIG1lbSBmbGFnczogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5tZW0uZmxhZ3MpOworCXByaW50aygiIG1lbSBud2luOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5Lm1lbS5ud2luKTsKKwlwcmludGsoIiBzdWJ0dXBsZXM6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuc3VidHVwbGVzKTsKKyNlbmRpZgorCisjaWYgMAorCWxpbmstPmlvLk51bVBvcnRzMSA9IDB4MjA7CisJbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisjZW5kaWYKKwlsaW5rLT5pby5OdW1Qb3J0czEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5sZW47CisJbGluay0+aW8uSU9BZGRyTGluZXMgPQorCQlwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKworCXsKKwkJaW50IGJhc2U7CisJCWZvciAoYmFzZSA9IDB4MDAwOyBiYXNlIDwgMHg0MDA7IGJhc2UgKz0gMHgyMCkgeworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZTsKKwkJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJCQkvL3ByaW50aygiUmVxdWVzdElPIDB4JTAyeFxuIixyZXQpOworCQkJaWYgKCFyZXQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMTsKKwlsaW5rLT5pcnEuSVJRSW5mbzIgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMjsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkgeworCQlwcmludGsoInBjbWNpYV9yZXF1ZXN0X2lycSgpIHJldHVybmVkIGVycm9yOiAlaVxuIiwgcmV0KTsKKwl9CisJLy9wcmludGsoIlJlcXVlc3RJUlEgMHglMDJ4XG4iLHJldCk7CisKKwlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCS8vcHJpbnRrKCJSZXF1ZXN0Q29uZmlndXJhdGlvbiAlZFxuIixyZXQpOworCisJbGluay0+ZGV2X25vZGUgPSAmZGV2X25vZGU7Cit9CisKK3N0YXRpYyBpbnQgbWlvX2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXQ7CisKKwlEUFJJTlRLKCJtaW9fY3NfYXR0YWNoKGRldj0lcCxpdD0lcClcbiIsIGRldiwgaXQpOworCisJbGluayA9IGN1cl9kZXY7CQkvKiBYWFggaGFjayAqLworCWlmICghbGluaykKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPmRyaXZlciA9ICZkcml2ZXJfbmlfbWlvX2NzOworCWRldi0+aW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworCisJaXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCisJcHJpbnRrKCJjb21lZGklZDogJXM6IERBUUNhcmQ6IGlvIDB4JTA0bHgsIGlycSAldSwgIiwKKwkJZGV2LT5taW5vciwgZGV2LT5kcml2ZXItPmRyaXZlcl9uYW1lLCBkZXYtPmlvYmFzZSwgaXJxKTsKKworI2lmIDAKKwl7CisJCWludCBpOworCisJCXByaW50aygiIGJvYXJkIGZpbmdlcnByaW50OiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkgKz0gMikgeworCQkJcHJpbnRrKCIgJTA0eCAlMDJ4IiwgaW53KGRldi0+aW9iYXNlICsgaSksCisJCQkJaW5iKGRldi0+aW9iYXNlICsgaSArIDEpKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJCXByaW50aygiIGJvYXJkIGZpbmdlcnByaW50ICh3aW5kb3dlZCk6Iik7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlwcmludGsoIiAweCUwNHgiLCB3aW5faW4oaSkpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWRldi0+Ym9hcmRfcHRyID0gbmlfYm9hcmRzICsgbmlfZ2V0Ym9hcmR0eXBlKGRldiwgbGluayk7CisKKwlwcmludGsoIiAlcyIsIGJvYXJkdHlwZS5uYW1lKTsKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZHR5cGUubmFtZTsKKworCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgbmlfRV9pbnRlcnJ1cHQsIE5JX0VfSVJRX0ZMQUdTLAorCQkJCSJuaV9taW9fY3MiLCBkZXYpKSA8IDApIHsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwkvKiBhbGxvY2F0ZSBwcml2YXRlIGFyZWEgKi8KKwlpZiAoKHJldCA9IG5pX2FsbG9jX3ByaXZhdGUoZGV2KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWRldnByaXYtPnN0Y193cml0ZXcgPSAmbWlvX2NzX3dpbl9vdXQ7CisJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJm1pb19jc193aW5faW47CisJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZ3aW5fb3V0MjsKKwlkZXZwcml2LT5zdGNfcmVhZGwgPSAmd2luX2luMjsKKworCWlmICgocmV0ID0gbmlfRV9pbml0KGRldiwgaXQpKSA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcHJvZGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwl0dXBsZV90IHR1cGxlOworCXVfc2hvcnQgYnVmWzEyOF07CisJaW50IHByb2RpZCA9IDA7CisKKwl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CisJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgJiYKKwkJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IDApKSB7CisJCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CisJfQorCisJcmV0dXJuIHByb2RpZDsKK30KKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWludCBpZDsKKwlpbnQgaTsKKworCWlkID0gZ2V0X3Byb2RpZChkZXYsIGxpbmspOworCisJZm9yIChpID0gMDsgaSA8IG5fbmlfYm9hcmRzOyBpKyspIHsKKwkJaWYgKG5pX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gaWQpIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJcHJpbnRrKCJ1bmtub3duIGJvYXJkIDB4JTA0eCAtLSBwcmV0ZW5kIGl0IGlzIGEgIiwgaWQpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBNT0RVTEUKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgbmlfbWlvX2NzX2lkc1tdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMTBkKSwJLyogREFRQ2FyZC1haS0xNnhlLTUwICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDAxMGMpLAkvKiBEQVFDYXJkLWFpLTE2ZS00ICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDAyYzQpLAkvKiBEQVFDYXJkLTYwNjJFICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDA3NWUpLAkvKiBEQVFDYXJkLTYwMjRFICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDAyNDUpLAkvKiBEQVFDYXJkLTYwMzZFICovCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgbmlfbWlvX2NzX2lkcyk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIG5pX21pb19jc19kcml2ZXIgPSB7CisJLnByb2JlID0gJmNzX2F0dGFjaCwKKwkucmVtb3ZlID0gJmNzX2RldGFjaCwKKwkuc3VzcGVuZCA9ICZtaW9fY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gJm1pb19jc19yZXN1bWUsCisJLmlkX3RhYmxlID0gbmlfbWlvX2NzX2lkcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJm5pX21pb19jc19kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9uaV9taW9fY3MpOworCXJldHVybiAwOworfQorCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZuaV9taW9fY3NfZHJpdmVyKTsKKyNpZiAwCisJd2hpbGUgKGN1cl9kZXYgIT0gTlVMTCkKKwkJY3NfZGV0YWNoKGN1cl9kZXYtPmhhbmRsZSk7CisjZW5kaWYKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9uaV9taW9fY3MpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkZWYyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtMCwwICsxLDEzMDIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKyAgICBkcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8tOTYvUENJLTY1MDgKKyAgICAgICAgICAgICAgIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8tMzJIUworICAgICAgICAgICAgICAgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLTY1MDMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogbmlfcGNpZGlvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLURJTzMySFMsIFBDSS1ESU85NiwgUENJLTY1MzMsIFBDSS02NTAzCitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS1ESU8tMzJIUyAobmlfcGNpZGlvKSwgUFhJLTY1MzMsCisgIFBDSS1ESU8tOTYsIFBDSS1ESU8tOTZCLCBQWEktNjUwOCwgUENJLTY1MDMsIFBDSS02NTAzQiwgUENJLTY1MDNYLAorICBQWEktNjUwMywgUENJLTY1MzMsIFBDSS02NTM0CitVcGRhdGVkOiBTdW4sIDIxIEFwciAyMDAyIDIxOjAzOjM4IC0wNzAwCisKK1RoZSBESU8tOTYgYXBwZWFycyBhcyBmb3VyIDgyNTUgc3ViZGV2aWNlcy4gIFNlZSB0aGUgODI1NQorZHJpdmVyIG5vdGVzIGZvciBkZXRhaWxzLgorCitUaGUgRElPMzJIUyBib2FyZCBhcHBlYXJzIGFzIG9uZSBzdWJkZXZpY2UsIHdpdGggMzIgY2hhbm5lbHMuCitFYWNoIGNoYW5uZWwgaXMgaW5kaXZpZHVhbGx5IEkvTyBjb25maWd1cmFibGUuICBUaGUgY2hhbm5lbCBvcmRlcgoraXMgMD1BMCwgMT1BMSwgMj1BMiwgLi4uIDg9QjAsIDE2PUMwLCAyND1EMC4gIFRoZSBkcml2ZXIgb25seQorc3VwcG9ydHMgc2ltcGxlIGRpZ2l0YWwgSS9POyBubyBoYW5kc2hha2luZyBpcyBzdXBwb3J0ZWQuCisKK0RNQSBtb3N0bHkgd29ya3MgZm9yIHRoZSBQQ0ktRElPMzJIUywgYnV0IG9ubHkgaW4gdGltZWQgaW5wdXQgbW9kZS4KKworVGhpcyBkcml2ZXIgY291bGQgYmUgZWFzaWx5IG1vZGlmaWVkIHRvIHN1cHBvcnQgQVQtTUlPMzJIUyBhbmQKK0FULU1JTzk2LgorCitUaGUgUENJLTY1MzQgcmVxdWlyZXMgYSBmaXJtd2FyZSB1cGxvYWQgYWZ0ZXIgcG93ZXItdXAgdG8gd29yaywgdGhlCitmaXJtd2FyZSBkYXRhIGFuZCBpbnN0cnVjdGlvbnMgZm9yIGxvYWRpbmcgaXQgd2l0aCBjb21lZGlfY29uZmlnCitpdCBhcmUgY29udGFpbmVkIGluIHRoZQorY29tZWRpX25vbmZyZWVfZmlybXdhcmUgdGFyYmFsbCBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmNvbWVkaS5vcmcKKyovCisKKy8qCisgICBUaGlzIGRyaXZlciBpcyBmb3IgYm90aCB0aGUgTkkgUENJLURJTy0zMkhTIGFuZCB0aGUgUENJLURJTy05NiwKKyAgIHdoaWNoIGhhdmUgdmVyeSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gIEJ1dCwgc2luY2UgdGhlICc5NiBpcworICAgc28gc2ltcGxlLCBpdCBpcyBpbmNsdWRlZCBoZXJlLgorCisgICBNYW51YWxzIChhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAubmF0aW5zdC5jb20vc3VwcG9ydC9tYW51YWxzKQorCisJMzIwOTM4Yy5wZGYJUENJLURJTy05Ni9QWEktNjUwOC9QQ0ktNjUwMyBVc2VyIE1hbnVhbAorCTMyMTQ2NGIucGRmCUFUL1BDSS1ESU8tMzJIUyBVc2VyIE1hbnVhbAorCTM0MTMyOUEucGRmCVBDSS02NTMzIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1tZXIgTWFudWFsCisJMzQxMzMwQS5wZGYJREFRLURJTyBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbAorCisgKi8KKworI2RlZmluZSBVU0VfRE1BCisvLyNkZWZpbmUgREVCVUcgMQorLy8jZGVmaW5lIERFQlVHX0ZMQUdTCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIm1pdGUuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyN1bmRlZiBEUFJJTlRLCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhmb3JtYXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkFUSU5TVAkweDEwOTMKKworI2RlZmluZSBQQ0lfRElPX1NJWkUgNDA5NgorI2RlZmluZSBQQ0lfTUlURV9TSVpFIDQwOTYKKworLyogZGVmaW5lcyBmb3IgdGhlIFBDSS1ESU8tOTYgKi8KKworI2RlZmluZSBOSURJT184MjU1X0JBU0UoeCkJKCh4KSo0KQorI2RlZmluZSBOSURJT19BIDAKKyNkZWZpbmUgTklESU9fQiA0CisjZGVmaW5lIE5JRElPX0MgOAorI2RlZmluZSBOSURJT19EIDEyCisKKy8qIGRlZmluZXMgZm9yIHRoZSBQQ0ktRElPLTMySFMgKi8KKworI2RlZmluZSBXaW5kb3dfQWRkcmVzcwkJCTQJLyogVyAqLworI2RlZmluZSBJbnRlcnJ1cHRfQW5kX1dpbmRvd19TdGF0dXMJNAkvKiBSICovCisjZGVmaW5lIEludFN0YXR1czEJCQkJKDE8PDApCisjZGVmaW5lIEludFN0YXR1czIJCQkJKDE8PDEpCisjZGVmaW5lIFdpbmRvd0FkZHJlc3NTdGF0dXNfbWFzawkJMHg3YworCisjZGVmaW5lIE1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sIDUJLyogVyAqLworI2RlZmluZSBJbnRlcnJ1cHRMaW5lKHgpCQkJKCh4KSYzKQorI2RlZmluZSBPcGVuSW50CQkJCSgxPDwyKQorI2RlZmluZSBHcm91cF9TdGF0dXMJCQk1CS8qIFIgKi8KKyNkZWZpbmUgRGF0YUxlZnQJCQkJKDE8PDApCisjZGVmaW5lIFJlcQkJCQkJKDE8PDIpCisjZGVmaW5lIFN0b3BUcmlnCQkJCSgxPDwzKQorCisjZGVmaW5lIEdyb3VwXzFfRmxhZ3MJCQk2CS8qIFIgKi8KKyNkZWZpbmUgR3JvdXBfMl9GbGFncwkJCTcJLyogUiAqLworI2RlZmluZSBUcmFuc2ZlclJlYWR5CQkJCSgxPDwwKQorI2RlZmluZSBDb3VudEV4cGlyZWQJCQkJKDE8PDEpCisjZGVmaW5lIFdhaXRlZAkJCQkoMTw8NSkKKyNkZWZpbmUgUHJpbWFyeVRDCQkJCSgxPDw2KQorI2RlZmluZSBTZWNvbmRhcnlUQwkJCQkoMTw8NykKKyAgLy8jZGVmaW5lIFNlcmlhbFJvc2UKKyAgLy8jZGVmaW5lIFJlcVJvc2UKKyAgLy8jZGVmaW5lIFBhdXNlZAorCisjZGVmaW5lIEdyb3VwXzFfRmlyc3RfQ2xlYXIJCTYJLyogVyAqLworI2RlZmluZSBHcm91cF8yX0ZpcnN0X0NsZWFyCQk3CS8qIFcgKi8KKyNkZWZpbmUgQ2xlYXJXYWl0ZWQJCQkJKDE8PDMpCisjZGVmaW5lIENsZWFyUHJpbWFyeVRDCQkJKDE8PDQpCisjZGVmaW5lIENsZWFyU2Vjb25kYXJ5VEMJCQkoMTw8NSkKKyNkZWZpbmUgRE1BUmVzZXQJCQkJKDE8PDYpCisjZGVmaW5lIEZJRk9SZXNldAkJCQkoMTw8NykKKyNkZWZpbmUgQ2xlYXJBbGwJCQkJMHhmOAorCisjZGVmaW5lIEdyb3VwXzFfRklGTwkJCTgJLyogVyAqLworI2RlZmluZSBHcm91cF8yX0ZJRk8JCQkxMgkvKiBXICovCisKKyNkZWZpbmUgVHJhbnNmZXJfQ291bnQJCQkyMAorI2RlZmluZSBDaGlwX0lEX0QJCQkyNAorI2RlZmluZSBDaGlwX0lEX0kJCQkyNQorI2RlZmluZSBDaGlwX0lEX08JCQkyNgorI2RlZmluZSBDaGlwX1ZlcnNpb24JCQkyNworI2RlZmluZSBQb3J0X0lPKHgpCQkJKDI4Kyh4KSkKKyNkZWZpbmUgUG9ydF9QaW5fRGlyZWN0aW9ucyh4KQkJKDMyKyh4KSkKKyNkZWZpbmUgUG9ydF9QaW5fTWFzayh4KQkJKDM2Kyh4KSkKKyNkZWZpbmUgUG9ydF9QaW5fUG9sYXJpdGllcyh4KQkJKDQwKyh4KSkKKworI2RlZmluZSBNYXN0ZXJfQ2xvY2tfUm91dGluZwkJNDUKKyNkZWZpbmUgUlRTSUNsb2NraW5nKHgpCQkJKCgoeCkmMyk8PDQpCisKKyNkZWZpbmUgR3JvdXBfMV9TZWNvbmRfQ2xlYXIJCTQ2CS8qIFcgKi8KKyNkZWZpbmUgR3JvdXBfMl9TZWNvbmRfQ2xlYXIJCTQ3CS8qIFcgKi8KKyNkZWZpbmUgQ2xlYXJFeHBpcmVkCQkJCSgxPDwwKQorCisjZGVmaW5lIFBvcnRfUGF0dGVybih4KQkJCSg0OCsoeCkpCisKKyNkZWZpbmUgRGF0YV9QYXRoCQkJNjQKKyNkZWZpbmUgRklGT0VuYWJsZUEJCSgxPDwwKQorI2RlZmluZSBGSUZPRW5hYmxlQgkJKDE8PDEpCisjZGVmaW5lIEZJRk9FbmFibGVDCQkoMTw8MikKKyNkZWZpbmUgRklGT0VuYWJsZUQJCSgxPDwzKQorI2RlZmluZSBGdW5uZWxpbmcoeCkJCSgoKHgpJjMpPDw0KQorI2RlZmluZSBHcm91cERpcmVjdGlvbgkoMTw8NykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xCQk2NQorI2RlZmluZSBPcE1vZGUJCQkJUHJvdG9jb2xfUmVnaXN0ZXJfMQorI2RlZmluZSBSdW5Nb2RlKHgpCQkoKHgpJjcpCisjZGVmaW5lIE51bWJlcmVkCQkoMTw8MykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8yCQk2NgorI2RlZmluZSBDbG9ja1JlZwkJCVByb3RvY29sX1JlZ2lzdGVyXzIKKyNkZWZpbmUgQ2xvY2tMaW5lKHgpCQkoKCh4KSYzKTw8NSkKKyNkZWZpbmUgSW52ZXJ0U3RvcFRyaWcJKDE8PDcpCisjZGVmaW5lIERhdGFMYXRjaGluZyh4KSAgICAgICAoKCh4KSYzKTw8NSkKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8zCQk2NworI2RlZmluZSBTZXF1ZW5jZQkJCVByb3RvY29sX1JlZ2lzdGVyXzMKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xNAkJNjgJLyogMTYgYml0ICovCisjZGVmaW5lIENsb2NrU3BlZWQJCQlQcm90b2NvbF9SZWdpc3Rlcl8xNAorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzQJCTcwCisjZGVmaW5lIFJlcVJlZwkJCQlQcm90b2NvbF9SZWdpc3Rlcl80CisjZGVmaW5lIFJlcUNvbmRpdGlvbmluZyh4KQkoKCh4KSY3KTw8MykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl81CQk3MQorI2RlZmluZSBCbG9ja01vZGUJCQlQcm90b2NvbF9SZWdpc3Rlcl81CisKKyNkZWZpbmUgRklGT19Db250cm9sCQkJNzIKKyNkZWZpbmUgUmVhZHlMZXZlbCh4KQkJKCh4KSY3KQorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzYJCTczCisjZGVmaW5lIExpbmVQb2xhcml0aWVzCQkJUHJvdG9jb2xfUmVnaXN0ZXJfNgorI2RlZmluZSBJbnZlcnRBY2sJCSgxPDwwKQorI2RlZmluZSBJbnZlcnRSZXEJCSgxPDwxKQorI2RlZmluZSBJbnZlcnRDbG9jawkJKDE8PDIpCisjZGVmaW5lIEludmVydFNlcmlhbAkJKDE8PDMpCisjZGVmaW5lIE9wZW5BY2sJCSgxPDw0KQorI2RlZmluZSBPcGVuQ2xvY2sJCSgxPDw1KQorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzcJCTc0CisjZGVmaW5lIEFja1NlcgkJCQlQcm90b2NvbF9SZWdpc3Rlcl83CisjZGVmaW5lIEFja0xpbmUoeCkJCSgoKHgpJjMpPDwyKQorI2RlZmluZSBFeGNoYW5nZVBpbnMJCSgxPDw3KQorCisjZGVmaW5lIEludGVycnVwdF9Db250cm9sCQk3NQorICAvKiBiaXRzIHNhbWUgYXMgZmxhZ3MgKi8KKworI2RlZmluZSBETUFfTGluZV9Db250cm9sX0dyb3VwMQkJNzYKKyNkZWZpbmUgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDIJCTEwOAorLy8gY2hhbm5lbCB6ZXJvIGlzIG5vbmUKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJpbWFyeV9ETUFDaGFubmVsX2JpdHModW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAmIDB4MzsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2Vjb25kYXJ5X0RNQUNoYW5uZWxfYml0cyh1bnNpZ25lZCBjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbCA8PCAyKSAmIDB4YzsKK30KKworI2RlZmluZSBUcmFuc2Zlcl9TaXplX0NvbnRyb2wJCTc3CisjZGVmaW5lIFRyYW5zZmVyV2lkdGgoeCkJKCh4KSYzKQorI2RlZmluZSBUcmFuc2Zlckxlbmd0aCh4KQkoKCh4KSYzKTw8MykKKyNkZWZpbmUgUmVxdWlyZVJMZXZlbAkJKDE8PDUpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTUJCTc5CisjZGVmaW5lIERBUU9wdGlvbnMJCQlQcm90b2NvbF9SZWdpc3Rlcl8xNQorI2RlZmluZSBTdGFydFNvdXJjZSh4KQkJCSgoeCkmMHgzKQorI2RlZmluZSBJbnZlcnRTdGFydAkJCQkoMTw8MikKKyNkZWZpbmUgU3RvcFNvdXJjZSh4KQkJCQkoKCh4KSYweDMpPDwzKQorI2RlZmluZSBSZXFTdGFydAkJCQkoMTw8NikKKyNkZWZpbmUgUHJlU3RhcnQJCQkJKDE8PDcpCisKKyNkZWZpbmUgUGF0dGVybl9EZXRlY3Rpb24JCTgxCisjZGVmaW5lIERldGVjdGlvbk1ldGhvZAkJCSgxPDwwKQorI2RlZmluZSBJbnZlcnRNYXRjaAkJCQkoMTw8MSkKKyNkZWZpbmUgSUVfUGF0dGVybl9EZXRlY3Rpb24JCQkoMTw8MikKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl85CQk4MgorI2RlZmluZSBSZXFEZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzkKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xMAkJODMKKyNkZWZpbmUgUmVxTm90RGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl8xMAorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzExCQk4NAorI2RlZmluZSBBY2tEZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzExCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTIJCTg1CisjZGVmaW5lIEFja05vdERlbGF5CQkJUHJvdG9jb2xfUmVnaXN0ZXJfMTIKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xMwkJODYKKyNkZWZpbmUgRGF0YTFEZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzEzCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfOAkJODgJLyogMzIgYml0ICovCisjZGVmaW5lIFN0YXJ0RGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl84CisKK2VudW0gcGNpXzY1MzRfZmlybXdhcmVfcmVnaXN0ZXJzIHsJLyogMTYgYml0ICovCisJRmlybXdhcmVfQ29udHJvbF9SZWdpc3RlciA9IDB4MTAwLAorCUZpcm13YXJlX1N0YXR1c19SZWdpc3RlciA9IDB4MTA0LAorCUZpcm13YXJlX0RhdGFfUmVnaXN0ZXIgPSAweDEwOCwKKwlGaXJtd2FyZV9NYXNrX1JlZ2lzdGVyID0gMHgxMGMsCisJRmlybXdhcmVfRGVidWdfUmVnaXN0ZXIgPSAweDExMCwKK307CisvKiBtYWluIGZwZ2EgcmVnaXN0ZXJzICgzMiBiaXQpKi8KK2VudW0gcGNpXzY1MzRfZnBnYV9yZWdpc3RlcnMgeworCUZQR0FfQ29udHJvbDFfUmVnaXN0ZXIgPSAweDIwMCwKKwlGUEdBX0NvbnRyb2wyX1JlZ2lzdGVyID0gMHgyMDQsCisJRlBHQV9JcnFfTWFza19SZWdpc3RlciA9IDB4MjA4LAorCUZQR0FfU3RhdHVzX1JlZ2lzdGVyID0gMHgyMGMsCisJRlBHQV9TaWduYXR1cmVfUmVnaXN0ZXIgPSAweDIxMCwKKwlGUEdBX1NDQUxTX0NvdW50ZXJfUmVnaXN0ZXIgPSAweDI4MCwJLyp3cml0ZS1jbGVhciAqLworCUZQR0FfU0NBTVNfQ291bnRlcl9SZWdpc3RlciA9IDB4Mjg0LAkvKndyaXRlLWNsZWFyICovCisJRlBHQV9TQ0JMU19Db3VudGVyX1JlZ2lzdGVyID0gMHgyODgsCS8qd3JpdGUtY2xlYXIgKi8KKwlGUEdBX1NDQk1TX0NvdW50ZXJfUmVnaXN0ZXIgPSAweDI4YywJLyp3cml0ZS1jbGVhciAqLworCUZQR0FfVGVtcF9Db250cm9sX1JlZ2lzdGVyID0gMHgyYTAsCisJRlBHQV9EQVJfUmVnaXN0ZXIgPSAweDJhOCwKKwlGUEdBX0VMQ19SZWFkX1JlZ2lzdGVyID0gMHgyYjgsCisJRlBHQV9FTENfV3JpdGVfUmVnaXN0ZXIgPSAweDJiYywKK307CitlbnVtIEZQR0FfQ29udHJvbF9CaXRzIHsKKwlGUEdBX0VuYWJsZV9CaXQgPSAweDgwMDAsCit9OworCisjZGVmaW5lIFRJTUVSX0JBU0UgNTAJCS8qIG5hbm9zZWNvbmRzICovCisKKyNpZmRlZiBVU0VfRE1BCisjZGVmaW5lIEludEVuIChDb3VudEV4cGlyZWR8V2FpdGVkfFByaW1hcnlUQ3xTZWNvbmRhcnlUQykKKyNlbHNlCisjZGVmaW5lIEludEVuIChUcmFuc2ZlclJlYWR5fENvdW50RXhwaXJlZHxXYWl0ZWR8UHJpbWFyeVRDfFNlY29uZGFyeVRDKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbmlkaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmlkaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2lkaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfcGNpZGlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpuaWRpb19hdHRhY2gsCisgICAgICBkZXRhY2g6bmlkaW9fZGV0YWNoLAorfTsKKworc3RydWN0IG5pZGlvX2JvYXJkIHsKKworCWludCBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbl84MjU1OworCXVuc2lnbmVkIGludCBpc19kaW9kYXE6MTsKKwl1bnNpZ25lZCBpbnQgdXNlc19maXJtd2FyZToxOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaWRpb19ib2FyZCBuaWRpb19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgZGV2X2lkOgkweDExNTAsCisJICAgICAgbmFtZToJInBjaS1kaW8tMzJocyIsCisJICAgICAgbl84MjU1OgkwLAorCSAgICAgIGlzX2Rpb2RhcToxLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTMyMCwKKwkgICAgICBuYW1lOgkicHhpLTY1MzMiLAorCSAgICAgIG5fODI1NToJMCwKKwkgICAgICBpc19kaW9kYXE6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEyYjAsCisJICAgICAgbmFtZToJInBjaS02NTM0IiwKKwkgICAgICBuXzgyNTU6CTAsCisJICAgICAgaXNfZGlvZGFxOjEsCisJICAgICAgdXNlc19maXJtd2FyZToxLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MDE2MCwKKwkgICAgICBuYW1lOgkicGNpLWRpby05NiIsCisJICAgICAgbl84MjU1Ogk0LAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTYzMCwKKwkgICAgICBuYW1lOgkicGNpLWRpby05NmIiLAorCSAgICAgIG5fODI1NToJNCwKKwkgICAgICBpc19kaW9kYXE6MCwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEzYzAsCisJICAgICAgbmFtZToJInB4aS02NTA4IiwKKwkgICAgICBuXzgyNTU6CTQsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgwNDAwLAorCSAgICAgIG5hbWU6CSJwY2ktNjUwMyIsCisJICAgICAgbl84MjU1OgkxLAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTI1MCwKKwkgICAgICBuYW1lOgkicGNpLTY1MDNiIiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxN2QwLAorCSAgICAgIG5hbWU6CSJwY2ktNjUwM3giLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBpc19kaW9kYXE6MCwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE4MDAsCisJICAgICAgbmFtZToJInB4aS02NTAzIiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCit9OworCisjZGVmaW5lIG5fbmlkaW9fYm9hcmRzIChzaXplb2YobmlkaW9fYm9hcmRzKS9zaXplb2YobmlkaW9fYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBuaWRpb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmlfcGNpZGlvX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMTUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTJiMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwMTYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE2MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTNjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwNDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEyNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTdkMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxODAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV9wY2lkaW9fcGNpX3RhYmxlKTsKKworc3RydWN0IG5pZGlvOTZfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBib2FyZHR5cGU7CisJaW50IGRpbzsKKwl1bnNpZ25lZCBzaG9ydCBPcE1vZGVCaXRzOworCXN0cnVjdCBtaXRlX2NoYW5uZWwgKmRpX21pdGVfY2hhbjsKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpkaV9taXRlX3Jpbmc7CisJc3BpbmxvY2tfdCBtaXRlX2NoYW5uZWxfbG9jazsKK307CisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbmlkaW85Nl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBuaV9wY2lkaW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBuaV9wY2lkaW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKTsKK3N0YXRpYyBpbnQgbmlkaW9fZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX25zX3RvX3RpbWVyKGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpOworc3RhdGljIGludCBzZXR1cF9taXRlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworI2lmZGVmIERFQlVHX0ZMQUdTCitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcHJpbnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lkIG5pX3BjaWRpb19wcmludF9zdGF0dXModW5zaWduZWQgaW50IHN0YXR1cyk7CisjZWxzZQorI2RlZmluZSBuaV9wY2lkaW9fcHJpbnRfZmxhZ3MoeCkKKyNkZWZpbmUgbmlfcGNpZGlvX3ByaW50X3N0YXR1cyh4KQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX3JlcXVlc3RfZGlfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmRpX21pdGVfY2hhbik7CisJZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWxfaW5fcmFuZ2UoZGV2cHJpdi0+bWl0ZSwKKwkJZGV2cHJpdi0+ZGlfbWl0ZV9yaW5nLCAxLCAyKTsKKwlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LCAiZmFpbGVkIHRvIHJlc2VydmUgbWl0ZSBkbWEgY2hhbm5lbC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJd3JpdGViKHByaW1hcnlfRE1BQ2hhbm5lbF9iaXRzKGRldnByaXYtPmRpX21pdGVfY2hhbi0+Y2hhbm5lbCkgfAorCQlzZWNvbmRhcnlfRE1BQ2hhbm5lbF9iaXRzKGRldnByaXYtPmRpX21pdGVfY2hhbi0+Y2hhbm5lbCksCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDEpOworCW1taW93YigpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcmVsZWFzZV9kaV9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKSB7CisJCW1pdGVfZG1hX2Rpc2FybShkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCQltaXRlX2RtYV9yZXNldChkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCQlkZXZwcml2LT5kaV9taXRlX2NoYW4gPSBOVUxMOworCQl3cml0ZWIocHJpbWFyeV9ETUFDaGFubmVsX2JpdHMoMCkgfAorCQkJc2Vjb25kYXJ5X0RNQUNoYW5uZWxfYml0cygwKSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDEpOworCQltbWlvd2IoKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlkaW85Nl84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZWIoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmVhZGIoKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCX0KK30KKwordm9pZCBuaV9wY2lkaW9fZXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocy0+YXN5bmMtPgorCQlldmVudHMgJiAoQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9PVkVSRkxPVykpCisJeworCQluaV9wY2lkaW9fY2FuY2VsKGRldiwgcyk7CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlkaW9faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUgPSBkZXZwcml2LT5taXRlOworCisJLy9pbnQgaSwgajsKKwlsb25nIGludCBBdXhEYXRhID0gMDsKKwlzaG9ydCBkYXRhMSA9IDA7CisJc2hvcnQgZGF0YTIgPSAwOworCWludCBmbGFnczsKKwlpbnQgc3RhdHVzOworCWludCB3b3JrID0gMDsKKwl1bnNpZ25lZCBpbnQgbV9zdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJLy9pbnRlcnJ1cGNpb25zIHBhcmFzaXRlcworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJLy8gYXNzdW1lIGl0J3MgZnJvbSBhbm90aGVyIGNhcmQKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXN0YXR1cyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJSW50ZXJydXB0X0FuZF9XaW5kb3dfU3RhdHVzKTsKKwlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GbGFncyk7CisKKwlEUFJJTlRLKCJuaV9wY2lkaW9faW50ZXJydXB0OiBzdGF0dXM9MHglMDJ4LGZsYWdzPTB4JTAyeFxuIiwKKwkJc3RhdHVzLCBmbGFncyk7CisJbmlfcGNpZGlvX3ByaW50X2ZsYWdzKGZsYWdzKTsKKwluaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7CisKKwkvL3ByaW50aygiYnVmWzBdPSUwOHhcbiIsKih1bnNpZ25lZCBpbnQgKilhc3luYy0+cHJlYWxsb2NfYnVmKTsKKwkvL3ByaW50aygiYnVmWzQwOTZdPSUwOHhcbiIsKih1bnNpZ25lZCBpbnQgKikoYXN5bmMtPnByZWFsbG9jX2J1Zis0MDk2KSk7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBpcnFfZmxhZ3MpOworCWlmIChkZXZwcml2LT5kaV9taXRlX2NoYW4pCisJCW1fc3RhdHVzID0gbWl0ZV9nZXRfc3RhdHVzKGRldnByaXYtPmRpX21pdGVfY2hhbik7CisjaWZkZWYgTUlURV9ERUJVRworCW1pdGVfcHJpbnRfY2hzcihtX3N0YXR1cyk7CisjZW5kaWYKKwkvL3ByaW50aygibWl0ZV9ieXRlc190cmFuc2ZlcnJlZDogJWRcbiIsbWl0ZV9ieXRlc190cmFuc2ZlcnJlZChtaXRlLERJX0RNQV9DSEFOKSk7CisJLy9taXRlX2R1bXBfcmVncyhtaXRlKTsKKwlpZiAobV9zdGF0dXMgJiBDSFNSX0lOVCkgeworCQlpZiAobV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CisJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQltaXRlLT5taXRlX2lvX2FkZHIgKworCQkJCU1JVEVfQ0hPUihkZXZwcml2LT5kaV9taXRlX2NoYW4tPmNoYW5uZWwpKTsKKwkJCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJCQkvKiBYWFggbmVlZCB0byBieXRlc3dhcCAqLworCQl9CisJCWlmIChtX3N0YXR1cyAmIH4oQ0hTUl9JTlQgfCBDSFNSX0xJTktDIHwgQ0hTUl9ET05FIHwgQ0hTUl9EUkRZIHwKKwkJCQlDSFNSX0RSUTEgfCBDSFNSX01SRFkpKSB7CisJCQlEUFJJTlRLKCJ1bmtub3duIG1pdGUgaW50ZXJydXB0LCBkaXNhYmxpbmcgSVJRXG4iKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGlycV9mbGFncyk7CisKKwl3aGlsZSAoc3RhdHVzICYgRGF0YUxlZnQpIHsKKwkJd29yaysrOworCQlpZiAod29yayA+IDIwKSB7CisJCQlEUFJJTlRLKCJ0b28gbXVjaCB3b3JrIGluIGludGVycnVwdFxuIik7CisJCQl3cml0ZWIoMHgwMCwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCQkJYnJlYWs7CisJCX0KKworCQlmbGFncyAmPSBJbnRFbjsKKworCQlpZiAoZmxhZ3MgJiBUcmFuc2ZlclJlYWR5KSB7CisJCQkvL0RQUklOVEsoIlRyYW5zZmVyUmVhZHlcbiIpOworCQkJd2hpbGUgKGZsYWdzICYgVHJhbnNmZXJSZWFkeSkgeworCQkJCXdvcmsrKzsKKwkJCQlpZiAod29yayA+IDEwMCkgeworCQkJCQlEUFJJTlRLKCJ0b28gbXVjaCB3b3JrIGluIGludGVycnVwdFxuIik7CisJCQkJCXdyaXRlYigweDAwLAorCQkJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCQkJTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJQXV4RGF0YSA9CisJCQkJCXJlYWRsKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJR3JvdXBfMV9GSUZPKTsKKwkJCQlkYXRhMSA9IEF1eERhdGEgJiAweGZmZmY7CisJCQkJZGF0YTIgPSAoQXV4RGF0YSAmIDB4ZmZmZjAwMDApID4+IDE2OworCQkJCWNvbWVkaV9idWZfcHV0KGFzeW5jLCBkYXRhMSk7CisJCQkJY29tZWRpX2J1Zl9wdXQoYXN5bmMsIGRhdGEyKTsKKwkJCQkvL0RQUklOVEsoInJlYWQ6JWQsICVkXG4iLGRhdGExLGRhdGEyKTsKKwkJCQlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJR3JvdXBfMV9GbGFncyk7CisJCQl9CisJCQkvL0RQUklOVEsoImJ1Zl9pbnRfY291bnQ6ICVkXG4iLGFzeW5jLT5idWZfaW50X2NvdW50KTsKKwkJCS8vRFBSSU5USygiMSkgSW50RW49JWQsZmxhZ3M9JWQsc3RhdHVzPSVkXG4iLEludEVuLGZsYWdzLHN0YXR1cyk7CisJCQkvL25pX3BjaWRpb19wcmludF9mbGFncyhmbGFncyk7CisJCQkvL25pX3BjaWRpb19wcmludF9zdGF0dXMoc3RhdHVzKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCQl9CisKKwkJaWYgKGZsYWdzICYgQ291bnRFeHBpcmVkKSB7CisJCQlEUFJJTlRLKCJDb3VudEV4cGlyZWRcbiIpOworCQkJd3JpdGViKENsZWFyRXhwaXJlZCwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJR3JvdXBfMV9TZWNvbmRfQ2xlYXIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCisJCQl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBPcE1vZGUpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBXYWl0ZWQpIHsKKwkJCURQUklOVEsoIldhaXRlZFxuIik7CisJCQl3cml0ZWIoQ2xlYXJXYWl0ZWQsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBQcmltYXJ5VEMpIHsKKwkJCURQUklOVEsoIlByaW1hcnlUQ1xuIik7CisJCQl3cml0ZWIoQ2xlYXJQcmltYXJ5VEMsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9IGVsc2UgaWYgKGZsYWdzICYgU2Vjb25kYXJ5VEMpIHsKKwkJCURQUklOVEsoIlNlY29uZGFyeVRDXG4iKTsKKwkJCXdyaXRlYihDbGVhclNlY29uZGFyeVRDLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlHcm91cF8xX0ZpcnN0X0NsZWFyKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorI2lmIDAKKwkJZWxzZSB7CisJCQlwcmludGsoIm5pX3BjaWRpbzogdW5rbm93biBpbnRlcnJ1cHRcbiIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQkJd3JpdGViKDB4MDAsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKwkJfQorI2VuZGlmCisJCWZsYWdzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKKwkJc3RhdHVzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJSW50ZXJydXB0X0FuZF9XaW5kb3dfU3RhdHVzKTsKKwkJLy9EUFJJTlRLKCJsb29wIGVuZDogSW50RW49MHglMDJ4LGZsYWdzPTB4JTAyeCxzdGF0dXM9MHglMDJ4XG4iLAorCQkvLyAgICAgIEludEVuLGZsYWdzLHN0YXR1cyk7CisJCS8vbmlfcGNpZGlvX3ByaW50X2ZsYWdzKGZsYWdzKTsKKwkJLy9uaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7CisJfQorCisgICAgICBvdXQ6CisJbmlfcGNpZGlvX2V2ZW50KGRldiwgcyk7CisjaWYgMAorCWlmICghdGFnKSB7CisJCXdyaXRlYigweDAzLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCX0KKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIERFQlVHX0ZMQUdTCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZmxhZ3Nfc3RyaW5nc1tdID0geworCSJUcmFuc2ZlclJlYWR5IiwgIkNvdW50RXhwaXJlZCIsICIyIiwgIjMiLAorCSI0IiwgIldhaXRlZCIsICJQcmltYXJ5VEMiLCAiU2Vjb25kYXJ5VEMiLAorfTsKK3N0YXRpYyB2b2lkIG5pX3BjaWRpb19wcmludF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlwcmludGsoImdyb3VwXzFfZmxhZ3M6Iik7CisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKGZsYWdzICYgKDEgPDwgaSkpIHsKKwkJCXByaW50aygiICVzIiwgZmxhZ3Nfc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworfQorc3RhdGljIGNoYXIgKnN0YXR1c19zdHJpbmdzW10gPSB7CisJIkRhdGFMZWZ0MSIsICJSZXNlcnZlZDEiLCAiUmVxMSIsICJTdG9wVHJpZzEiLAorCSJEYXRhTGVmdDIiLCAiUmVzZXJ2ZWQyIiwgIlJlcTIiLCAiU3RvcFRyaWcyIiwKK307CitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgaTsKKworCXByaW50aygiZ3JvdXBfc3RhdHVzOiIpOworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChmbGFncyAmICgxIDw8IGkpKSB7CisJCQlwcmludGsoIiAlcyIsIHN0YXR1c19zdHJpbmdzW2ldKTsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7Cit9CisjZW5kaWYKKworI2lmZGVmIHVudXNlZAorc3RhdGljIHZvaWQgZGVidWdfaW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBhLCBiOworCXN0YXRpYyBpbnQgbl9pbnQgPSAwOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJYSA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfU3RhdHVzKTsKKwliID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKKworCWlmIChuX2ludCA8IDEwKSB7CisJCURQUklOVEsoInN0YXR1cyAweCUwMnggZmxhZ3MgMHglMDJ4IHRpbWUgJTA2ZFxuIiwgYSwgYiwKKwkJCShpbnQpdHYudHZfdXNlYyk7CisJfQorCisJd2hpbGUgKGIgJiAxKSB7CisJCXdyaXRldygweGZmLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRklGTyk7CisJCWIgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmxhZ3MpOworCX0KKworCWIgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmxhZ3MpOworCisJaWYgKG5faW50IDwgMTApIHsKKwkJRFBSSU5USygibmV3IHN0YXR1cyAweCUwMnhcbiIsIGIpOworCQluX2ludCsrOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX3BjaWRpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3cml0ZWwocy0+aW9fYml0cywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1Bpbl9EaXJlY3Rpb25zKDApKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQl3cml0ZWwocy0+c3RhdGUsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9JTygwKSk7CisJfQorCWRhdGFbMV0gPSByZWFkbChkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfSU8oMCkpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJLyogc2FtZSBmb3IgYm90aCBUUklHX0lOVCBhbmQgVFJJR19OT1cgKi8KKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkoVElNRVJfQkFTRSkJLyogaW4gbmFub3NlY29uZHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQkvKiBubyBtaW51bXVtIHNwZWVkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19FWFQgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkvKiBubyBsaW1pdCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCW5pX3BjaWRpb19uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKQoreworCWludCBkaXZpZGVyLCBiYXNlOworCisJYmFzZSA9IFRJTUVSX0JBU0U7CisKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwlkZWZhdWx0OgorCQlkaXZpZGVyID0gKCpuYW5vc2VjICsgYmFzZSAvIDIpIC8gYmFzZTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCWRpdmlkZXIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXZpZGVyID0gKCpuYW5vc2VjICsgYmFzZSAtIDEpIC8gYmFzZTsKKwkJYnJlYWs7CisJfQorCisJKm5hbm9zZWMgPSBiYXNlICogZGl2aWRlcjsKKwlyZXR1cm4gZGl2aWRlcjsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJLyogWFhYIGNvbmZpZ3VyZSBwb3J0cyBmb3IgaW5wdXQgKi8KKwl3cml0ZWwoMHgwMDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUGluX0RpcmVjdGlvbnMoMCkpOworCisJaWYgKDEpIHsKKwkJLyogZW5hYmxlIGZpZm9zIEEgQiBDIEQgKi8KKwkJd3JpdGViKDB4MGYsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YV9QYXRoKTsKKworCQkvKiBzZXQgdHJhbnNmZXIgd2lkdGggYSAzMiBiaXRzICovCisJCXdyaXRlYihUcmFuc2ZlcldpZHRoKDApIHwgVHJhbnNmZXJMZW5ndGgoMCksCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFRyYW5zZmVyX1NpemVfQ29udHJvbCk7CisJfSBlbHNlIHsKKwkJd3JpdGViKDB4MDMsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YV9QYXRoKTsKKwkJd3JpdGViKFRyYW5zZmVyV2lkdGgoMykgfCBUcmFuc2Zlckxlbmd0aCgwKSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgVHJhbnNmZXJfU2l6ZV9Db250cm9sKTsKKwl9CisKKwkvKiBwcm90b2NvbCBjb25maWd1cmF0aW9uICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBwYWdlIDQtNSwgImlucHV0IHdpdGggaW50ZXJuYWwgUkVRcyIgKi8KKwkJd3JpdGViKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKKwkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xvY2tSZWcpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBTZXF1ZW5jZSk7CisJCXdyaXRlYigweDA0LCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcVJlZyk7CisJCXdyaXRlYig0LCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEJsb2NrTW9kZSk7CisJCXdyaXRlYigzLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIExpbmVQb2xhcml0aWVzKTsKKwkJd3JpdGViKDB4YzAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrU2VyKTsKKwkJd3JpdGVsKG5pX3BjaWRpb19uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQlUUklHX1JPVU5EX05FQVJFU1QpLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBTdGFydERlbGF5KTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUmVxRGVsYXkpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSZXFOb3REZWxheSk7CisJCXdyaXRlYigxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja0RlbGF5KTsKKwkJd3JpdGViKDB4MGIsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrTm90RGVsYXkpOworCQl3cml0ZWIoMHgwMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBEYXRhMURlbGF5KTsKKwkJLyogbWFudWFsLCBwYWdlIDQtNTogQ2xvY2tTcGVlZCBjb21tZW50IGlzIGluY29ycmVjdGx5IGxpc3RlZAorCQkgKiBvbiBEQVFPcHRpb25zICovCisJCXdyaXRldygwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsb2NrU3BlZWQpOworCQl3cml0ZWIoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBEQVFPcHRpb25zKTsKKwl9IGVsc2UgeworCQkvKiBUUklHX0VYVCAqLworCQkvKiBwYWdlIDQtNSwgImlucHV0IHdpdGggZXh0ZXJuYWwgUkVRcyIgKi8KKwkJd3JpdGViKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKKwkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xvY2tSZWcpOworCQl3cml0ZWIoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBTZXF1ZW5jZSk7CisJCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcVJlZyk7CisJCXdyaXRlYig0LCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEJsb2NrTW9kZSk7CisJCXdyaXRlYigwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIExpbmVQb2xhcml0aWVzKTsKKwkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrU2VyKTsKKwkJd3JpdGVsKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgU3RhcnREZWxheSk7CisJCXdyaXRlYigxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcURlbGF5KTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUmVxTm90RGVsYXkpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBY2tEZWxheSk7CisJCXdyaXRlYigweDBDLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja05vdERlbGF5KTsKKwkJd3JpdGViKDB4MTAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YTFEZWxheSk7CisJCXdyaXRldygwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsb2NrU3BlZWQpOworCQl3cml0ZWIoMHg2MCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBEQVFPcHRpb25zKTsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCXdyaXRlbChjbWQtPnN0b3BfYXJnLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBUcmFuc2Zlcl9Db3VudCk7CisJfSBlbHNlIHsKKwkJLyogWFhYICovCisJfQorCisjaWZkZWYgVVNFX0RNQQorCXdyaXRlYihDbGVhclByaW1hcnlUQyB8IENsZWFyU2Vjb25kYXJ5VEMsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GaXJzdF9DbGVhcik7CisKKwl7CisJCWludCByZXR2YWwgPSBzZXR1cF9taXRlX2RtYShkZXYsIHMpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisjZWxzZQorCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAxKTsKKyNlbmRpZgorCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAyKTsKKworCS8qIGNsZWFyIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLworCXdyaXRlYigweGZmLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCS8vd3JpdGViKENsZWFyRXhwaXJlZCxkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcitHcm91cF8xX1NlY29uZF9DbGVhcik7CisKKwl3cml0ZWIoSW50RW4sIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgSW50ZXJydXB0X0NvbnRyb2wpOworCXdyaXRlYigweDAzLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlkZXZwcml2LT5PcE1vZGVCaXRzID0gRGF0YUxhdGNoaW5nKDApIHwgUnVuTW9kZSg3KTsKKwl9IGVsc2UgewkJLy8gVFJJR19USU1FUgorCQlkZXZwcml2LT5PcE1vZGVCaXRzID0gTnVtYmVyZWQgfCBSdW5Nb2RlKDcpOworCX0KKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJLyogc3RhcnQgKi8KKwkJd3JpdGViKGRldnByaXYtPk9wTW9kZUJpdHMsCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE9wTW9kZSk7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBUUklHX0lOVCAqLworCQlzLT5hc3luYy0+aW50dHJpZyA9IG5pX3BjaWRpb19pbnR0cmlnOworCX0KKworCURQUklOVEsoIm5pX3BjaWRpbzogY29tbWFuZCBzdGFydGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXR1cF9taXRlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBuaV9wY2lkaW9fcmVxdWVzdF9kaV9taXRlX2NoYW5uZWwoZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfSU5QVVQ7CisKKwltaXRlX3ByZXBfZG1hKGRldnByaXYtPmRpX21pdGVfY2hhbiwgMzIsIDMyKTsKKworCW1pdGVfZG1hX2FybShkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZWIoZGV2cHJpdi0+T3BNb2RlQml0cywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBPcE1vZGUpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl3cml0ZWIoMHgwMCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCk7CisJbmlfcGNpZGlvX3JlbGVhc2VfZGlfbWl0ZV9jaGFubmVsKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9fY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmRpX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWVtc2V0KHMtPmFzeW5jLT5wcmVhbGxvY19idWYsIDB4YWEsIHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF9sb2FkX2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBmcGdhX2luZGV4LCB1OCAqIGRhdGEsCisJaW50IGRhdGFfbGVuKQoreworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDA7CisJaW50IGksIGo7CisJd3JpdGV3KDB4ODAgfCBmcGdhX2luZGV4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCXdyaXRldygweGMwIHwgZnBnYV9pbmRleCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9Db250cm9sX1JlZ2lzdGVyKTsKKwlmb3IgKGkgPSAwOworCQkocmVhZHcoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUZpcm13YXJlX1N0YXR1c19SZWdpc3RlcikgJiAweDIpID09IDAKKwkJJiYgaSA8IHRpbWVvdXQ7ICsraSkgeworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcHJpbnRrKCJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIGZwZ2EgJWksIHdhaXRpbmcgZm9yIHN0YXR1cyAweDJcbiIsIGZwZ2FfaW5kZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJd3JpdGV3KDB4ODAgfCBmcGdhX2luZGV4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCWZvciAoaSA9IDA7CisJCXJlYWR3KGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfU3RhdHVzX1JlZ2lzdGVyKSAhPQorCQkweDMgJiYgaSA8IHRpbWVvdXQ7ICsraSkgeworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcHJpbnRrKCJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIGZwZ2EgJWksIHdhaXRpbmcgZm9yIHN0YXR1cyAweDNcbiIsIGZwZ2FfaW5kZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZm9yIChqID0gMDsgaiArIDEgPCBkYXRhX2xlbjspIHsKKwkJdW5zaWduZWQgaW50IHZhbHVlID0gZGF0YVtqKytdOworCQl2YWx1ZSB8PSBkYXRhW2orK10gPDwgODsKKwkJd3JpdGV3KHZhbHVlLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9EYXRhX1JlZ2lzdGVyKTsKKwkJZm9yIChpID0gMDsKKwkJCShyZWFkdyhkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJCUZpcm13YXJlX1N0YXR1c19SZWdpc3RlcikgJiAweDIpID09IDAKKwkJCSYmIGkgPCB0aW1lb3V0OyArK2kpIHsKKwkJCXVkZWxheSgxKTsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQlwcmludGsoIm5pX3BjaWRpbzogZmFpbGVkIHRvIGxvYWQgd29yZCBpbnRvIGZwZ2EgJWlcbiIsCisJCQkJZnBnYV9pbmRleCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAobmVlZF9yZXNjaGVkKCkpCisJCQlzY2hlZHVsZSgpOworCX0KKwl3cml0ZXcoMHgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV82NTM0X3Jlc2V0X2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBmcGdhX2luZGV4KQoreworCXJldHVybiBwY2lfNjUzNF9sb2FkX2ZwZ2EoZGV2LCBmcGdhX2luZGV4LCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF9yZXNldF9mcGdhcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmV0OworCWludCBpOworCXdyaXRldygweDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfQ29udHJvbF9SZWdpc3Rlcik7CisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkgeworCQlyZXQgPSBwY2lfNjUzNF9yZXNldF9mcGdhKGRldiwgaSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQorCXdyaXRldygweDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfTWFza19SZWdpc3Rlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNpXzY1MzRfaW5pdF9tYWluX2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9Db250cm9sMV9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9Db250cm9sMl9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9TQ0FMU19Db3VudGVyX1JlZ2lzdGVyKTsKKwl3cml0ZWwoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGUEdBX1NDQU1TX0NvdW50ZXJfUmVnaXN0ZXIpOworCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZQR0FfU0NCTFNfQ291bnRlcl9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9TQ0JNU19Db3VudGVyX1JlZ2lzdGVyKTsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF91cGxvYWRfZmlybXdhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBvcHRpb25zW10pCit7CisJaW50IHJldDsKKwl2b2lkICptYWluX2ZwZ2FfZGF0YSwgKnNjYXJhYl9hX2RhdGEsICpzY2FyYWJfYl9kYXRhOworCWludCBtYWluX2ZwZ2FfZGF0YV9sZW4sIHNjYXJhYl9hX2RhdGFfbGVuLCBzY2FyYWJfYl9kYXRhX2xlbjsKKworCWlmIChvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0gPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gcGNpXzY1MzRfcmVzZXRfZnBnYXMoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwltYWluX2ZwZ2FfZGF0YSA9IGNvbWVkaV9hdXhfZGF0YShvcHRpb25zLCAwKTsKKwltYWluX2ZwZ2FfZGF0YV9sZW4gPSBvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBMF9MRU5HVEhdOworCXJldCA9IHBjaV82NTM0X2xvYWRfZnBnYShkZXYsIDIsIG1haW5fZnBnYV9kYXRhLCBtYWluX2ZwZ2FfZGF0YV9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjaV82NTM0X2luaXRfbWFpbl9mcGdhKGRldik7CisJc2NhcmFiX2FfZGF0YSA9IGNvbWVkaV9hdXhfZGF0YShvcHRpb25zLCAxKTsKKwlzY2FyYWJfYV9kYXRhX2xlbiA9IG9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEExX0xFTkdUSF07CisJcmV0ID0gcGNpXzY1MzRfbG9hZF9mcGdhKGRldiwgMCwgc2NhcmFiX2FfZGF0YSwgc2NhcmFiX2FfZGF0YV9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXNjYXJhYl9iX2RhdGEgPSBjb21lZGlfYXV4X2RhdGEob3B0aW9ucywgMik7CisJc2NhcmFiX2JfZGF0YV9sZW4gPSBvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBMl9MRU5HVEhdOworCXJldCA9IHBjaV82NTM0X2xvYWRfZnBnYShkZXYsIDEsIHNjYXJhYl9iX2RhdGEsIHNjYXJhYl9iX2RhdGFfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaWRpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisJaW50IHJldDsKKwlpbnQgbl9zdWJkZXZpY2VzOworCXVuc2lnbmVkIGludCBpcnE7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaWRpbzoiLCBkZXYtPm1pbm9yKTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbmlkaW85Nl9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2spOworCisJcmV0ID0gbmlkaW9fZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWNvbWVkaV9zZXRfaHdfZGV2KGRldiwgJmRldnByaXYtPm1pdGUtPnBjaWRldi0+ZGV2KTsKKwlkZXZwcml2LT5kaV9taXRlX3JpbmcgPSBtaXRlX2FsbG9jX3JpbmcoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKGRldnByaXYtPmRpX21pdGVfcmluZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJaXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisJcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCWlmICh0aGlzX2JvYXJkLT51c2VzX2Zpcm13YXJlKSB7CisJCXJldCA9IHBjaV82NTM0X3VwbG9hZF9maXJtd2FyZShkZXYsIGl0LT5vcHRpb25zKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoIXRoaXNfYm9hcmQtPmlzX2Rpb2RhcSkgeworCQluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5uXzgyNTU7CisJfSBlbHNlIHsKKwkJbl9zdWJkZXZpY2VzID0gMTsKKwl9CisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSwKKwkJCQluaWRpbzk2XzgyNTVfY2IsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJTklESU9fODI1NV9CQVNFKGkpKSk7CisJCX0KKwl9IGVsc2UgeworCisJCXByaW50aygiIHJldj0lZCIsCisJCQlyZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENoaXBfVmVyc2lvbikpOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0xTQU1QTCB8IFNERl9QQUNLRUQgfAorCQkJU0RGX0NNRF9SRUFEOworCQlzLT5uX2NoYW4gPSAzMjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmluc25fY29uZmlnID0gJm5pX3BjaWRpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gJm5pX3BjaWRpb19pbnNuX2JpdHM7CisJCXMtPmRvX2NtZCA9ICZuaV9wY2lkaW9fY21kOworCQlzLT5kb19jbWR0ZXN0ID0gJm5pX3BjaWRpb19jbWR0ZXN0OworCQlzLT5jYW5jZWwgPSAmbmlfcGNpZGlvX2NhbmNlbDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMzI7CS8qIFhYWCAqLworCQlzLT5idWZfY2hhbmdlID0gJm5pX3BjaWRpb19jaGFuZ2U7CisJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKworCQl3cml0ZWwoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X0lPKDApKTsKKwkJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9QaW5fRGlyZWN0aW9ucygwKSk7CisJCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUGluX01hc2soMCkpOworCisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiBib2FyZCAqLworCQl3cml0ZWIoMHgwMCwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBuaWRpb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJIm5pX3BjaWRpbyIsIGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZSIpOworCQl9CisJCWRldi0+aXJxID0gaXJxOworCX0KKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCWlmICh0aGlzX2JvYXJkICYmICF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5kaV9taXRlX3JpbmcpIHsKKwkJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmRpX21pdGVfcmluZyk7CisJCQlkZXZwcml2LT5kaV9taXRlX3JpbmcgPSBOVUxMOworCQl9CisJCWlmIChkZXZwcml2LT5taXRlKQorCQkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaWRpb19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlciB8fAorCQkJCXNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5fbmlkaW9fYm9hcmRzOyBpKyspIHsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBuaWRpb19ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaWRpb19ib2FyZHMgKyBpOworCQkJCWRldnByaXYtPm1pdGUgPSBtaXRlOworCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJcHJpbnRrKCJubyBkZXZpY2UgZm91bmRcbiIpOworCW1pdGVfbGlzdF9kZXZpY2VzKCk7CisJcmV0dXJuIC1FSU87Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaWRpbywgbmlfcGNpZGlvX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYWJhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwpAQCAtMCwwICsxLDE3ODggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIE5JIFBDSS1NSU8gRSBzZXJpZXMgY2FyZHMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctOCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IG5pX3BjaW1pbworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1NSU8tRSBzZXJpZXMgYW5kIE0gc2VyaWVzIChhbGwgYm9hcmRzKQorQXV0aG9yOiBkcywgSm9obiBIYWxsZW4sIEZyYW5rIE1vcmkgSGVzcywgUm9sZiBNdWVsbGVyLCBIZXJiZXJ0IFBlcmVtYW5zLAorICBIZXJtYW4gQnJ1eW5pbmNreCwgVGVycnkgQmFybmFieQorU3RhdHVzOiB3b3JrcworRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktTUlPLTE2WEUtNTAgKG5pX3BjaW1pbyksCisgIFBDSS1NSU8tMTZYRS0xMCwgUFhJLTYwMzBFLCBQQ0ktTUlPLTE2RS0xLCBQQ0ktTUlPLTE2RS00LCBQQ0ktNjAxNCwgUENJLTYwNDBFLAorICBQWEktNjA0MEUsIFBDSS02MDMwRSwgUENJLTYwMzFFLCBQQ0ktNjAzMkUsIFBDSS02MDMzRSwgUENJLTYwNzFFLCBQQ0ktNjAyM0UsCisgIFBDSS02MDI0RSwgUENJLTYwMjVFLCBQWEktNjAyNUUsIFBDSS02MDM0RSwgUENJLTYwMzVFLCBQQ0ktNjA1MkUsCisgIFBDSS02MTEwLCBQQ0ktNjExMSwgUENJLTYyMjAsIFBDSS02MjIxLCBQQ0ktNjIyNCwgUFhJLTYyMjQsIFBDSS02MjI1LAorICBQQ0ktNjIyOSwgUENJLTYyNTAsIFBDSS02MjUxLCBQQ0llLTYyNTEsIFBDSS02MjU0LCBQQ0ktNjI1OSwgUENJZS02MjU5LAorICBQQ0ktNjI4MCwgUENJLTYyODEsIFBYSS02MjgxLCBQQ0ktNjI4NCwgUENJLTYyODksCisgIFBDSS02NzExLCBQWEktNjcxMSwgUENJLTY3MTMsIFBYSS02NzEzLAorICBQWEktNjA3MUUsIFBDSS02MDcwRSwgUFhJLTYwNzBFLAorICBQWEktNjA1MkUsIFBDSS02MDM2RSwgUENJLTY3MzEsIFBDSS02NzMzLCBQWEktNjczMywKKyAgUENJLTYxNDMsIFBYSS02MTQzCitVcGRhdGVkOiBXZWQsIDAzIERlYyAyMDA4IDEwOjUxOjQ3ICswMDAwCisKK1RoZXNlIGJvYXJkcyBhcmUgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgQVQtTUlPIEUgc2VyaWVzLCBleGNlcHQgdGhhdAordGhleSB1c2UgdGhlIFBDSSBidXMgaW5zdGVhZCBvZiBJU0EgKGkuZS4sIEFUKS4gIFNlZSB0aGUgbm90ZXMgZm9yCit0aGUgbmlfYXRtaW8ubyBkcml2ZXIgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgYm9hcmRzLgorCitBdXRvY2FsaWJyYXRpb24gaXMgc3VwcG9ydGVkIG9uIG1hbnkgb2YgdGhlIGRldmljZXMsIHVzaW5nIHRoZQorY29tZWRpX2NhbGlicmF0ZSAob3IgY29tZWRpX3NvZnRfY2FsaWJyYXRlIGZvciBtLXNlcmllcykgdXRpbGl0eS4KK00tU2VyaWVzIGJvYXJkcyBkbyBhbmFsb2cgaW5wdXQgYW5kIGFuYWxvZyBvdXRwdXQgY2FsaWJyYXRpb24gZW50aXJlbHkKK2luIHNvZnR3YXJlLiBUaGUgc29mdHdhcmUgY2FsaWJyYXRpb24gY29ycmVjdHMKK3RoZSBhbmFsb2cgaW5wdXQgZm9yIG9mZnNldCwgZ2FpbiBhbmQKK25vbmxpbmVhcml0eS4gIFRoZSBhbmFsb2cgb3V0cHV0cyBhcmUgY29ycmVjdGVkIGZvciBvZmZzZXQgYW5kIGdhaW4uCitTZWUgdGhlIGNvbWVkaWxpYiBkb2N1bWVudGF0aW9uIG9uIGNvbWVkaV9nZXRfc29mdGNhbF9jb252ZXJ0ZXIoKSBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKK0J5IGRlZmF1bHQsIHRoZSBkcml2ZXIgdXNlcyBETUEgdG8gdHJhbnNmZXIgYW5hbG9nIGlucHV0IGRhdGEgdG8KK21lbW9yeS4gIFdoZW4gRE1BIGlzIGVuYWJsZWQsIG5vdCBhbGwgdHJpZ2dlcmluZyBmZWF0dXJlcyBhcmUKK3N1cHBvcnRlZC4KKworRGlnaXRhbCBJL08gbWF5IG5vdCB3b3JrIG9uIDY3M3guCisKK05vdGUgdGhhdCB0aGUgUENJLTYxNDMgaXMgYSBzaW11bHRhaW5lb3VzIHNhbXBsaW5nIGRldmljZSB3aXRoIDggY29udmVydG9ycy4KK1dpdGggdGhpcyBib2FyZCBhbGwgb2YgdGhlIGNvbnZlcnRvcnMgcGVyZm9ybSBvbmUgc2ltdWx0YWluZW91cyBzYW1wbGUgZHVyaW5nCithIHNjYW4gaW50ZXJ2YWwuIFRoZSBwZXJpb2QgZm9yIGEgc2NhbiBpcyB1c2VkIGZvciB0aGUgY29udmVydCB0aW1lIGluIGEKK0NvbWVkaSBjbWQuIFRoZSBjb252ZXJ0IHRyaWdnZXIgc291cmNlIGlzIG5vcm1hbGx5IHNldCB0byBUUklHX05PVyBieSBkZWZhdWx0LgorCitUaGUgUlRTSSB0cmlnZ2VyIGJ1cyBpcyBzdXBwb3J0ZWQgb24gdGhlc2UgY2FyZHMgb24KK3N1YmRldmljZSAxMC4gU2VlIHRoZSBjb21lZGlsaWIgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworSW5mb3JtYXRpb24gKG51bWJlciBvZiBjaGFubmVscywgYml0cywgZXRjLikgZm9yIHNvbWUgZGV2aWNlcyBtYXkgYmUKK2luY29ycmVjdC4gIFBsZWFzZSBjaGVjayB0aGlzIGFuZCBzdWJtaXQgYSBidWcgaWYgdGhlcmUgYXJlIHByb2JsZW1zCitmb3IgeW91ciBkZXZpY2UuCisKK1NDWEkgaXMgcHJvYmFibHkgYnJva2VuIGZvciBtLXNlcmllcyBib2FyZHMuCisKK0J1Z3M6CisgLSBXaGVuIERNQSBpcyBlbmFibGVkLCBDT01FRElfRVZfQ09OVkVSVCBkb2VzCisgICBub3Qgd29yayBjb3JyZWN0bHkuCisKKyovCisvKgorCVRoZSBQQ0ktTUlPIEUgc2VyaWVzIGRyaXZlciB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5CisJVG9tYXN6IE1vdHlsZXdza2kgPC4uLj4sIGFuZCBwb3J0ZWQgdG8gY29tZWRpIGJ5IGRzLgorCisJUmVmZXJlbmNlczoKKworCSAgIDM0MTA3OWIucGRmICBQQ0kgRSBTZXJpZXMgUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwKKwkgICAzNDA5MzRiLnBkZiAgREFRLVNUQyByZWZlcmVuY2UgbWFudWFsCisKKwkgICAzMjIwODBiLnBkZiAgNjcxMS82NzEzLzY3MTUgVXNlciBNYW51YWwKKworCSAgIDMyMDk0NWMucGRmICBQQ0kgRSBTZXJpZXMgVXNlciBNYW51YWwKKwkgICAzMjIxMzhhLnBkZiAgUENJLTYwNTJFIGFuZCBEQVFQYWQtNjA1MkUgVXNlciBNYW51YWwKKworCUlTU1VFUzoKKworCW5lZWQgdG8gZGVhbCB3aXRoIGV4dGVybmFsIHJlZmVyZW5jZSBmb3IgREFDLCBhbmQgb3RoZXIgREFDCisJcHJvcGVydGllcyBpbiBib2FyZCBwcm9wZXJ0aWVzCisKKwlkZWFsIHdpdGggYXQtbWlvLTE2ZGUtMTAgcmV2aXNpb24gRCB0byBOIGNoYW5nZXMsIGV0Yy4KKworCW5lZWQgdG8gYWRkIG90aGVyIENBTERBQyB0eXBlCisKKwluZWVkIHRvIHNsb3cgZG93biBEQUMgbG9hZGluZy4gIEkgZG9uJ3QgdHJ1c3QgTkkncyBjbGFpbSB0aGF0CisJdHdvIHdyaXRlcyB0byB0aGUgUENJIGJ1cyBzbG93cyBJTyBlbm91Z2guICBJIHdvdWxkIHByZWZlciB0bworCXVzZSBjb21lZGlfdWRlbGF5KCkuICBUaW1pbmcgc3BlY3M6IChjbG9jaykKKwkJQUQ4NTIyCQkzMG5zCisJCURBQzgwNDMJCTEyMG5zCisJCURBQzg4MDAJCTYwbnMKKwkJTUI4ODM0MQkJPworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIm5pX3N0Yy5oIgorI2luY2x1ZGUgIm1pdGUuaCIKKworLy8jZGVmaW5lIFBDSV9ERUJVRworCisjZGVmaW5lIFBDSURNQQorCisjZGVmaW5lIFBDSU1JTyAxCisjdW5kZWYgQVRNSU8KKworI2RlZmluZSBNQVhfTl9DQUxEQUNTICgxNisxNisyKQorCisjZGVmaW5lIERSVl9OQU1FICJuaV9wY2ltaW8iCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIHRhYmxlcyBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmlfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDAxNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTE3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMTgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDExOTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTFiMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMWMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDExZDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTI3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMzMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzNDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTM1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNGUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE0ZjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTU4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNWIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE4ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTg3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxOGIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE4YzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MjQxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyNDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDI0MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4Mjg5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyOGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJhNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmE3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYTgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJhYjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmI4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYjkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmNhMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGFhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYWIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBhYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGI2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYjcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGJjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYmQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwZjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEwZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxN2YsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzFiYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTdkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV9wY2lfdGFibGUpOworCisvKiBUaGVzZSBhcmUgbm90IGFsbCB0aGUgcG9zc2libGUgYW8gcmFuZ2VzIGZvciA2Mjh4IGJvYXJkcy4KKyBUaGV5IGNhbiBkbyBPRkZTRVQgKy0gUkVGRVJFTkNFIHdoZXJlIE9GRlNFVCBjYW4gYmUKKyAwViwgNVYsIEFQRkk8MCwxPiwgb3IgQU88MC4uLjM+IGFuZCBSQU5HRSBjYW4KKyBiZSAxMFYsIDVWLCAyViwgMVYsIEFQRkk8MCwxPiwgQU88MC4uLjM+LiAgVGhhdCdzCisgNjMgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMuICBBbiBBTyBjaGFubmVsCisgY2FuIG5vdCBhY3QgYXMgaXQncyBvd24gT0ZGU0VUIG9yIFJFRkVSRU5DRS4KKyovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV82Mjh4X2FvID0geyA4LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLCAyKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC01LCAxNSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgzLCA3KSwKKwkJCVJBTkdFKDQsIDYpLAorCQkJUkFOR0VfZXh0KC0xLCAxKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV82MjV4X2FvID0geyAzLCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFX2V4dCgtMSwgMSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX01fNjIyeF9hbyA9IHsgMSwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJfQorfTsKKworc3RhdGljIGNvbnN0IG5pX2JvYXJkIG5pX2JvYXJkc1tdID0geworCXsKKwkJCS5kZXZpY2VfaWQgPSAweDAxNjIsCS8vIE5JIGFsc28gc2F5cyAweDE2MjAuICB0eXBvPworCQkJLm5hbWUgPSAicGNpLW1pby0xNnhlLTUwIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzgsCisJCQkuYWlfc3BlZWQgPSA1MDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDUwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTE3MCwKKwkJCS5uYW1lID0gInBjaS1taW8tMTZ4ZS0xMCIsCS8vIGFrYSBwY2ktNjAzMEUKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI4YzAsCisJCQkubmFtZSA9ICJwY2ktNjAxNCIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMWQwLAorCQkJLm5hbWUgPSAicHhpLTYwMzBlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExODAsCisJCQkubmFtZSA9ICJwY2ktbWlvLTE2ZS0xIiwJLyogYWthIHBjaS02MDcwZSAqLworCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7bWI4ODM0MX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExOTAsCisJCQkubmFtZSA9ICJwY2ktbWlvLTE2ZS00IiwJLyogYWthIHBjaS02MDQwZSAqLworCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS8qIE5vdGU6IHRoZXJlIGhhdmUgYmVlbiByZXBvcnRlZCBwcm9ibGVtcyB3aXRoIGZ1bGwgc3BlZWQKKwkJCSAqIG9uIHRoaXMgYm9hcmQgKi8KKwkJCS5haV9zcGVlZCA9IDIwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLy8gZG9jIHNheXMgbWI4ODM0MQorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMWMwLAorCQkJLm5hbWUgPSAicHhpLTYwNDBlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSAyMDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb19maWZvX2RlcHRoID0gNTEyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge21iODgzNDF9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKworCXsKKwkJCS5kZXZpY2VfaWQgPSAweDEzMzAsCisJCQkubmFtZSA9ICJwY2ktNjAzMWUiLAorCQkJLm5fYWRjaGFuID0gNjQsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNCwKKwkJCS5haV9zcGVlZCA9IDEwMDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAxMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7ZGFjODgwMCwgZGFjODA0MywgYWQ4NTIyfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTI3MCwKKwkJCS5uYW1lID0gInBjaS02MDMyZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE0LAorCQkJLmFpX3NwZWVkID0gMTAwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMzQwLAorCQkJLm5hbWUgPSAicGNpLTYwMzNlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDEzNTAsCisJCQkubmFtZSA9ICJwY2ktNjA3MWUiLAorCQkJLm5fYWRjaGFuID0gNjQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmE2MCwKKwkJCS5uYW1lID0gInBjaS02MDIzZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxMiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhNzAsCisJCQkubmFtZSA9ICJwY2ktNjAyNGUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhODAsCisJCQkubmFtZSA9ICJwY2ktNjAyNWUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAxLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhYjAsCisJCQkubmFtZSA9ICJweGktNjAyNWUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAkvKiBtYW51YWwgaXMgd3JvbmcgKi8KKwkJCS5oYXNfODI1NSA9IDEsCisJCX0sCisKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyY2EwLAorCQkJLm5hbWUgPSAicGNpLTYwMzRlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyYzgwLAorCQkJLm5hbWUgPSAicGNpLTYwMzVlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMDAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDE4YjAsCisJCQkubmFtZSA9ICJwY2ktNjA1MmUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDMwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb19zcGVlZCA9IDMwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnLCBhZDg1MjJ9LAkvKiBtYW51YWwgaXMgd3JvbmcgKi8KKwkJfSwKKwl7LmRldmljZV9pZCA9IDB4MTRlMCwKKwkJCS5uYW1lID0gInBjaS02MTEwIiwKKwkJCS5uX2FkY2hhbiA9IDQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDIwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjExeCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDQsIGFkODgwNH0sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTRmMCwKKwkJCS5uYW1lID0gInBjaS02MTExIiwKKwkJCS5uX2FkY2hhbiA9IDIsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDIwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjExeCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDQsIGFkODgwNH0sCisJCX0sCisjaWYgMAorCS8qIFRoZSA2MTE1IGJvYXJkcyBwcm9iYWJseSBuZWVkIHRoZWlyIG93biBkcml2ZXIgKi8KKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyZWQwLAorCQkJLm5hbWUgPSAicGNpLTYxMTUiLAorCQkJLm5fYWRjaGFuID0gNCwKKwkJCS5hZGJpdHMgPSAxMiwKKwkJCS5haV9maWZvX2RlcHRoID0gODE5MiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MTF4LAorCQkJLmFpX3NwZWVkID0gMTAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb182NzF4ID0gMSwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fc3BlZWQgPSAyNTAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnXzYxMXggPSAxLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwJLyogWFhYICovCisJCX0sCisjZW5kaWYKKyNpZiAwCisJeworCQkJLmRldmljZV9pZCA9IDB4MDAwMCwKKwkJCS5uYW1lID0gInB4aS02MTE1IiwKKwkJCS5uX2FkY2hhbiA9IDQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDEwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fNjcxeCA9IDEsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLnJlZ182MTF4ID0gMSwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCWNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwJLyogWFhYICovCisJCX0sCisjZW5kaWYKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxODgwLAorCQkJLm5hbWUgPSAicGNpLTY3MTEiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA0LAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMTYzODQsCisJCQkvKiBkYXRhIHNoZWV0IHNheXMgODE5MiwgYnV0IGZpZm8gcmVhbGx5IGhvbGRzIDE2Mzg0IHNhbXBsZXMgKi8KKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTEsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmI5MCwKKwkJCS5uYW1lID0gInB4aS02NzExIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMSwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxODcwLAorCQkJLm5hbWUgPSAicGNpLTY3MTMiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA4LAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMTYzODQsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182NzEzLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmI4MCwKKwkJCS5uYW1lID0gInB4aS02NzEzIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gOCwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMywKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI0MzAsCisJCQkubmFtZSA9ICJwY2ktNjczMSIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMSwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKyNpZiAwCQkJCS8qIG5lZWQgZGV2aWNlIGlkcyAqLworCXsKKwkJCS5kZXZpY2VfaWQgPSAweDAsCisJCQkubmFtZSA9ICJweGktNjczMSIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182NzExLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQl9LAorI2VuZGlmCisJeworCQkJLmRldmljZV9pZCA9IDB4MjQxMCwKKwkJCS5uYW1lID0gInBjaS02NzMzIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gOCwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMywKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI0MjAsCisJCQkubmFtZSA9ICJweGktNjczMyIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDgsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAxNjM4NCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTMsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxNWIwLAorCQkJLm5hbWUgPSAicHhpLTYwNzFlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExYjAsCisJCQkubmFtZSA9ICJweGktNjA3MGUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MThjMCwKKwkJCS5uYW1lID0gInB4aS02MDUyZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE2LAorCQkJLmFpX3NwZWVkID0gMzAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3NwZWVkID0gMzAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7bWI4ODM0MSwgbWI4ODM0MSwgYWQ4NTIyfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxNTgwLAorCQkJLm5hbWUgPSAicHhpLTYwMzFlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4Mjg5MCwKKwkJCS5uYW1lID0gInBjaS02MDM2ZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGIwLAorCQkJLm5hbWUgPSAicGNpLTYyMjAiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS8vRklYTUU6ICBndWVzcworCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGFmLAorCQkJLm5hbWUgPSAicGNpLTYyMjEiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyMngsCisJCQkuYWlfc3BlZWQgPSA0MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyMnhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMjAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcxYmMsCisJCQkubmFtZSA9ICJwY2ktNjIyMV8zN3BpbiIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjIyeF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEyMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBmMiwKKwkJCS5uYW1lID0gInBjaS02MjI0IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBmMywKKwkJCS5uYW1lID0gInB4aS02MjI0IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzE2YywKKwkJCS5uYW1lID0gInBjaS02MjI1IiwKKwkJCS5uX2FkY2hhbiA9IDgwLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyMngsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTIwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBhYSwKKwkJCS5uYW1lID0gInBjaS02MjI5IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyMngsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTIwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiNCwKKwkJCS5uYW1lID0gInBjaS02MjUwIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYjgsCisJCQkubmFtZSA9ICJwY2ktNjI1MSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjV4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcxN2QsCisJCQkubmFtZSA9ICJwY2llLTYyNTEiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI1eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjV4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGI3LAorCQkJLm5hbWUgPSAicGNpLTYyNTQiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI1eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYWIsCisJCQkubmFtZSA9ICJwY2ktNjI1OSIsCisJCQkubl9hZGNoYW4gPSAzMiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjV4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MTdmLAorCQkJLm5hbWUgPSAicGNpZS02MjU5IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyNXhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI1eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAzNTcsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYjYsCisJCQkubmFtZSA9ICJwY2ktNjI4MCIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxOCwKKwkJCS5haV9maWZvX2RlcHRoID0gMjA0NywKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDE2MDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI4eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiZCwKKwkJCS5uYW1lID0gInBjaS02MjgxIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE4LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAyMDQ3LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gMTYwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82Mjh4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyOHgsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYmYsCisJCQkubmFtZSA9ICJweGktNjI4MSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxOCwKKwkJCS5haV9maWZvX2RlcHRoID0gMjA0NywKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDE2MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI4eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182Mjh4LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGJjLAorCQkJLm5hbWUgPSAicGNpLTYyODQiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTgsCisJCQkuYWlfZmlmb19kZXB0aCA9IDIwNDcsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSAxNjAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyOHgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGFjLAorCQkJLm5hbWUgPSAicGNpLTYyODkiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTgsCisJCQkuYWlfZmlmb19kZXB0aCA9IDIwNDcsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSAxNjAwLAorCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyOHhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI4eCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAzNTcsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwQzAsCisJCQkubmFtZSA9ICJwY2ktNjE0MyIsCisJCQkubl9hZGNoYW4gPSA4LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAxMDI0LAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYxNDMsCisJCQkuYWlfc3BlZWQgPSA0MDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYxNDMsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzEwRCwKKwkJCS5uYW1lID0gInB4aS02MTQzIiwKKwkJCS5uX2FkY2hhbiA9IDgsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDEwMjQsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjE0MywKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjE0MywKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwKKwkJfSwKK307CisKKyNkZWZpbmUgbl9wY2ltaW9fYm9hcmRzICgoc2l6ZW9mKG5pX2JvYXJkcykvc2l6ZW9mKG5pX2JvYXJkc1swXSkpKQorCitzdGF0aWMgaW50IHBjaW1pb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2ltaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpbWlvID0geworCWRyaXZlcl9uYW1lOiBEUlZfTkFNRSwKKwltb2R1bGU6VEhJU19NT0RVTEUsCisJYXR0YWNoOnBjaW1pb19hdHRhY2gsCisJZGV0YWNoOnBjaW1pb19kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2ltaW8sIG5pX3BjaV90YWJsZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworTklfUFJJVkFURV9DT01NT059IG5pX3ByaXZhdGU7CisjZGVmaW5lIGRldnByaXYgKChuaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKiBIb3cgd2UgYWNjZXNzIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIG5pX3dyaXRlbChhLGIpCSh3cml0ZWwoKGEpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChiKSkpCisjZGVmaW5lIG5pX3JlYWRsKGEpCShyZWFkbChkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChhKSkpCisjZGVmaW5lIG5pX3dyaXRldyhhLGIpCSh3cml0ZXcoKGEpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChiKSkpCisjZGVmaW5lIG5pX3JlYWR3KGEpCShyZWFkdyhkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChhKSkpCisjZGVmaW5lIG5pX3dyaXRlYihhLGIpCSh3cml0ZWIoKGEpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChiKSkpCisjZGVmaW5lIG5pX3JlYWRiKGEpCShyZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChhKSkpCisKKy8qIEhvdyB3ZSBhY2Nlc3MgU1RDIHJlZ2lzdGVycyAqLworCisvKiBXZSBhdXRvbWF0aWNhbGx5IHRha2UgYWR2YW50YWdlIG9mIFNUQyByZWdpc3RlcnMgdGhhdCBjYW4gYmUKKyAqIHJlYWQvd3JpdHRlbiBkaXJlY3RseSBpbiB0aGUgSS9PIHNwYWNlIG9mIHRoZSBib2FyZC4gIE1vc3QKKyAqIFBDSU1JTyBkZXZpY2VzIG1hcCB0aGUgbG93IDggU1RDIHJlZ2lzdGVycyB0byBpb2Jhc2UrYWRkcioyLgorICogVGhlIDYxMXggZGV2aWNlcyBtYXAgdGhlIHdyaXRlIHJlZ2lzdGVycyB0byBpb2Jhc2UrYWRkcioyLCBhbmQKKyAqIHRoZSByZWFkIHJlZ2lzdGVycyB0byBpb2Jhc2UrKGFkZHItMSkqMi4gKi8KKy8qIEhvd2V2ZXIsIHRoZSA2MTF4IGJvYXJkcyBzdGlsbCBhcmVuJ3Qgd29ya2luZywgc28gSSdtIGRpc2FibGluZworICogbm9uLXdpbmRvd2VkIFNUQyBhY2Nlc3MgdGVtcG9yYXJpbHkgKi8KKworc3RhdGljIHZvaWQgZV9zZXJpZXNfd2luX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCW5pX3dyaXRldyhyZWcsIFdpbmRvd19BZGRyZXNzKTsKKwluaV93cml0ZXcoZGF0YSwgV2luZG93X0RhdGEpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdWludDE2X3QgZV9zZXJpZXNfd2luX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDE2X3QgcmV0OworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCW5pX3dyaXRldyhyZWcsIFdpbmRvd19BZGRyZXNzKTsKKwlyZXQgPSBuaV9yZWFkdyhXaW5kb3dfRGF0YSk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtX3Nlcmllc19zdGNfd3JpdGV3KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBkYXRhLCBpbnQgcmVnKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQURDX0ZJRk9fQ2xlYXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX0ZJRk9fQ2xlYXI7CisJCWJyZWFrOworCWNhc2UgQUlfQ29tbWFuZF8xX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Db21tYW5kXzE7CisJCWJyZWFrOworCWNhc2UgQUlfQ29tbWFuZF8yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Db21tYW5kXzI7CisJCWJyZWFrOworCWNhc2UgQUlfTW9kZV8xX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Nb2RlXzE7CisJCWJyZWFrOworCWNhc2UgQUlfTW9kZV8yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Nb2RlXzI7CisJCWJyZWFrOworCWNhc2UgQUlfTW9kZV8zX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Nb2RlXzM7CisJCWJyZWFrOworCWNhc2UgQUlfT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX091dHB1dF9Db250cm9sOworCQlicmVhazsKKwljYXNlIEFJX1BlcnNvbmFsX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9QZXJzb25hbDsKKwkJYnJlYWs7CisJY2FzZSBBSV9TSTJfTG9hZF9BX1JlZ2lzdGVyOgorCQkvLyB0aGlzIGlzIGFjdHVhbGx5IGEgMzIgYml0IHJlZ2lzdGVyIG9uIG0gc2VyaWVzIGJvYXJkcworCQluaV93cml0ZWwoZGF0YSwgTV9PZmZzZXRfQUlfU0kyX0xvYWRfQSk7CisJCXJldHVybjsKKwkJYnJlYWs7CisJY2FzZSBBSV9TSTJfTG9hZF9CX1JlZ2lzdGVyOgorCQkvLyB0aGlzIGlzIGFjdHVhbGx5IGEgMzIgYml0IHJlZ2lzdGVyIG9uIG0gc2VyaWVzIGJvYXJkcworCQluaV93cml0ZWwoZGF0YSwgTV9PZmZzZXRfQUlfU0kyX0xvYWRfQik7CisJCXJldHVybjsKKwkJYnJlYWs7CisJY2FzZSBBSV9TVEFSVF9TVE9QX1NlbGVjdF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfU1RBUlRfU1RPUF9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgQUlfVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX1RyaWdnZXJfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQW5hbG9nX1RyaWdnZXJfRXRjOworCQlicmVhazsKKwljYXNlIEFPX0NvbW1hbmRfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fQ29tbWFuZF8xOworCQlicmVhazsKKwljYXNlIEFPX0NvbW1hbmRfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fQ29tbWFuZF8yOworCQlicmVhazsKKwljYXNlIEFPX01vZGVfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fTW9kZV8xOworCQlicmVhazsKKwljYXNlIEFPX01vZGVfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fTW9kZV8yOworCQlicmVhazsKKwljYXNlIEFPX01vZGVfM19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fTW9kZV8zOworCQlicmVhazsKKwljYXNlIEFPX091dHB1dF9Db250cm9sX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19PdXRwdXRfQ29udHJvbDsKKwkJYnJlYWs7CisJY2FzZSBBT19QZXJzb25hbF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fUGVyc29uYWw7CisJCWJyZWFrOworCWNhc2UgQU9fU3RhcnRfU2VsZWN0X1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19TdGFydF9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX1RyaWdnZXJfU2VsZWN0OworCQlicmVhazsKKwljYXNlIENsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9DbG9ja19hbmRfRk9VVDsKKwkJYnJlYWs7CisJY2FzZSBDb25maWd1cmF0aW9uX01lbW9yeV9DbGVhcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXI7CisJCWJyZWFrOworCWNhc2UgREFDX0ZJRk9fQ2xlYXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX0ZJRk9fQ2xlYXI7CisJCWJyZWFrOworCWNhc2UgRElPX0NvbnRyb2xfUmVnaXN0ZXI6CisJCXJ0X3ByaW50aworCQkJKCIlczogRklYTUU6IHJlZ2lzdGVyIDB4JXggZG9lcyBub3QgbWFwIGNsZWFubHkgb24gdG8gbS1zZXJpZXMgYm9hcmRzLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwljYXNlIEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfQXV0b2luY3JlbWVudDsKKwkJYnJlYWs7CisJY2FzZSBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX0F1dG9pbmNyZW1lbnQ7CisJCWJyZWFrOworCWNhc2UgR19Db21tYW5kX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Db21tYW5kOworCQlicmVhazsKKwljYXNlIEdfQ29tbWFuZF9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfQ29tbWFuZDsKKwkJYnJlYWs7CisJY2FzZSBHX0lucHV0X1NlbGVjdF9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfSW5wdXRfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9JbnB1dF9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgR19Nb2RlX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Nb2RlOworCQlicmVhazsKKwljYXNlIEdfTW9kZV9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfTW9kZTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9BX0FjazsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9BX0VuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9CX0FjazsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9CX0VuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQ29udHJvbF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfSW50ZXJydXB0X0NvbnRyb2w7CisJCWJyZWFrOworCWNhc2UgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9JT19CaWRpcmVjdGlvbl9QaW47CisJCWJyZWFrOworCWNhc2UgSm9pbnRfUmVzZXRfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0pvaW50X1Jlc2V0OworCQlicmVhazsKKwljYXNlIFJUU0lfVHJpZ19BX091dHB1dF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfUlRTSV9UcmlnX0FfT3V0cHV0OworCQlicmVhazsKKwljYXNlIFJUU0lfVHJpZ19CX091dHB1dF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfUlRTSV9UcmlnX0JfT3V0cHV0OworCQlicmVhazsKKwljYXNlIFJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X1JUU0lfVHJpZ19EaXJlY3Rpb247CisJCWJyZWFrOworCQkvKiBGSVhNRTogRElPX091dHB1dF9SZWdpc3RlciAoMTYgYml0IHJlZykgaXMgcmVwbGFjZWQgYnkgTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfT3V0cHV0ICgzMiBiaXQpCisJCSAgIGFuZCBNX09mZnNldF9TQ1hJX1NlcmlhbF9EYXRhX091dCAoOCBiaXQpICovCisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgcmVnaXN0ZXI9MHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJbmlfd3JpdGV3KGRhdGEsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBtX3Nlcmllc19zdGNfcmVhZHcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcpCit7CisJdW5zaWduZWQgb2Zmc2V0OworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBSV9TdGF0dXNfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfU3RhdHVzXzE7CisJCWJyZWFrOworCWNhc2UgQU9fU3RhdHVzXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX1N0YXR1c18xOworCQlicmVhazsKKwljYXNlIEFPX1N0YXR1c18yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19TdGF0dXNfMjsKKwkJYnJlYWs7CisJY2FzZSBESU9fU2VyaWFsX0lucHV0X1JlZ2lzdGVyOgorCQlyZXR1cm4gbmlfcmVhZGIoTV9PZmZzZXRfU0NYSV9TZXJpYWxfRGF0YV9Jbik7CisJCWJyZWFrOworCWNhc2UgSm9pbnRfU3RhdHVzXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0pvaW50X1N0YXR1c18xOworCQlicmVhazsKKwljYXNlIEpvaW50X1N0YXR1c18yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9Kb2ludF9TdGF0dXNfMjsKKwkJYnJlYWs7CisJY2FzZSBHX1N0YXR1c19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzAxX1N0YXR1czsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgcmVnaXN0ZXI9MHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbmlfcmVhZHcob2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbV9zZXJpZXNfc3RjX3dyaXRlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDMyX3QgZGF0YSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBvZmZzZXQ7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFJX1NDX0xvYWRfQV9SZWdpc3RlcnM6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX1NDX0xvYWRfQTsKKwkJYnJlYWs7CisJY2FzZSBBSV9TSV9Mb2FkX0FfUmVnaXN0ZXJzOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9TSV9Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19CQ19Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19VQ19Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19VSV9Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgR19Mb2FkX0FfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX0xvYWRfQTsKKwkJYnJlYWs7CisJY2FzZSBHX0xvYWRfQV9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfTG9hZF9BOworCQlicmVhazsKKwljYXNlIEdfTG9hZF9CX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Mb2FkX0I7CisJCWJyZWFrOworCWNhc2UgR19Mb2FkX0JfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX0xvYWRfQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgcmVnaXN0ZXI9MHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJbmlfd3JpdGVsKGRhdGEsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBtX3Nlcmllc19zdGNfcmVhZGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcpCit7CisJdW5zaWduZWQgb2Zmc2V0OworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBHX0hXX1NhdmVfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX0hXX1NhdmU7CisJCWJyZWFrOworCWNhc2UgR19IV19TYXZlX1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9IV19TYXZlOworCQlicmVhazsKKwljYXNlIEdfU2F2ZV9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfU2F2ZTsKKwkJYnJlYWs7CisJY2FzZSBHX1NhdmVfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX1NhdmU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIHJlZ2lzdGVyPTB4JXggaW4gc3dpdGNoLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCXJldHVybiAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIG5pX3JlYWRsKG9mZnNldCk7Cit9CisKKyNkZWZpbmUgaW50ZXJydXB0X3BpbihhKQkwCisjZGVmaW5lIElSUV9QT0xBUklUWSAxCisKKyNkZWZpbmUgTklfRV9JUlFfRkxBR1MJCUlSUUZfU0hBUkVECisKKyNpbmNsdWRlICJuaV9taW9fY29tbW9uLmMiCisKK3N0YXRpYyBpbnQgcGNpbWlvX2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CitzdGF0aWMgaW50IHBjaW1pb19haV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKK3N0YXRpYyBpbnQgcGNpbWlvX2FvX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpOworc3RhdGljIGludCBwY2ltaW9fZ3BjdDBfY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CitzdGF0aWMgaW50IHBjaW1pb19ncGN0MV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKK3N0YXRpYyBpbnQgcGNpbWlvX2Rpb19jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKKworc3RhdGljIHZvaWQgbV9zZXJpZXNfaW5pdF9lZXByb21fYnVmZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0YXRpYyBjb25zdCBpbnQgU3RhcnRfQ2FsX0VFUFJPTSA9IDB4NDAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCB3aW5kb3dfc2l6ZSA9IDEwOworCXN0YXRpYyBjb25zdCBpbnQgc2VyaWFsX251bWJlcl9lZXByb21fb2Zmc2V0ID0gMHg0OworCXN0YXRpYyBjb25zdCBpbnQgc2VyaWFsX251bWJlcl9lZXByb21fbGVuZ3RoID0gMHg0OworCXVuc2lnbmVkIG9sZF9pb2R3YnNyX2JpdHM7CisJdW5zaWduZWQgb2xkX2lvZHdic3IxX2JpdHM7CisJdW5zaWduZWQgb2xkX2lvZHdjcjFfYml0czsKKwlpbnQgaTsKKworCW9sZF9pb2R3YnNyX2JpdHMgPSByZWFkbChkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdCU1IpOworCW9sZF9pb2R3YnNyMV9iaXRzID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSXzEpOworCW9sZF9pb2R3Y3IxX2JpdHMgPSByZWFkbChkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdDUl8xKTsKKwl3cml0ZWwoMHgwLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdCU1IpOworCXdyaXRlbCgoKDB4ODAgfCB3aW5kb3dfc2l6ZSkgfCBkZXZwcml2LT5taXRlLT5kYXFfcGh5c19hZGRyKSwKKwkJZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSXzEpOworCXdyaXRlbCgweDEgfCBvbGRfaW9kd2NyMV9iaXRzLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdDUl8xKTsKKwl3cml0ZWwoMHhmLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyAweDMwKTsKKworCUJVR19PTihzZXJpYWxfbnVtYmVyX2VlcHJvbV9sZW5ndGggPiBzaXplb2YoZGV2cHJpdi0+c2VyaWFsX251bWJlcikpOworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWxfbnVtYmVyX2VlcHJvbV9sZW5ndGg7ICsraSkgeworCQljaGFyICpieXRlX3B0ciA9IChjaGFyKikmZGV2cHJpdi0+c2VyaWFsX251bWJlciArIGk7CisJCSpieXRlX3B0ciA9IG5pX3JlYWRiKHNlcmlhbF9udW1iZXJfZWVwcm9tX29mZnNldCArIGkpOworCX0KKwlkZXZwcml2LT5zZXJpYWxfbnVtYmVyID0gYmUzMl90b19jcHUoZGV2cHJpdi0+c2VyaWFsX251bWJlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTV9TRVJJRVNfRUVQUk9NX1NJWkU7ICsraSkgeworCQlkZXZwcml2LT5lZXByb21fYnVmZmVyW2ldID0gbmlfcmVhZGIoU3RhcnRfQ2FsX0VFUFJPTSArIGkpOworCX0KKworCXdyaXRlbChvbGRfaW9kd2JzcjFfYml0cywgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSXzEpOworCXdyaXRlbChvbGRfaW9kd2Jzcl9iaXRzLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdCU1IpOworCXdyaXRlbChvbGRfaW9kd2NyMV9iaXRzLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdDUl8xKTsKKwl3cml0ZWwoMHgwLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyAweDMwKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF82MTQzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8vIERpc2FibGUgaW50ZXJydXB0cworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBJbnRlcnJ1cHRfQ29udHJvbF9SZWdpc3Rlcik7CisKKwkvLyBJbml0aWFsaXNlIDYxNDMgQUkgc3BlY2lmaWMgYml0cworCW5pX3dyaXRlYigweDAwLCBNYWdpY182MTQzKTsJLy8gU2V0IEcwLEcxIERNQSBtb2RlIHRvIEUgc2VyaWVzIHZlcnNpb24KKwluaV93cml0ZWIoMHg4MCwgUGlwZWxpbmVEZWxheV82MTQzKTsJLy8gU2V0IEVPQ01vZGUsIEFEQ01vZGUgYW5kIHBpcGVsaW5lZGVsYXkKKwluaV93cml0ZWIoMHgwMCwgRU9DX1NldF82MTQzKTsJLy8gU2V0IEVPQyBEZWxheQorCisJbmlfd3JpdGVsKGJvYXJkdHlwZS5haV9maWZvX2RlcHRoIC8gMiwgQUlGSUZPX0ZsYWdfNjE0Myk7CS8vIFNldCB0aGUgRklGTyBoYWxmIGZ1bGwgbGV2ZWwKKworCS8vIFN0cm9iZSBSZWxheSBkaXNhYmxlIGJpdAorCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZV9lbmFibGVkID0gMDsKKwluaV93cml0ZXcoZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlIHwgQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzX1JlbGF5T2ZmLAorCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCW5pX3dyaXRldyhkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UsIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0Myk7Cit9CisKKy8qIGNsZWFucyB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCitzdGF0aWMgaW50IHBjaW1pb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJbWlvX2NvbW1vbl9kZXRhY2goZGV2KTsKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmFpX21pdGVfcmluZyk7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmFvX21pdGVfcmluZyk7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmNkb19taXRlX3JpbmcpOworCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5ncGN0X21pdGVfcmluZ1swXSk7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmdwY3RfbWl0ZV9yaW5nWzFdKTsKKwkJaWYgKGRldnByaXYtPm1pdGUpCisJCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogbmlfcGNpbWlvOiIsIGRldi0+bWlub3IpOworCisJcmV0ID0gbmlfYWxsb2NfcHJpdmF0ZShkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGNpbWlvX2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50aygiICVzIiwgYm9hcmR0eXBlLm5hbWUpOworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkdHlwZS5uYW1lOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcgPSAmbV9zZXJpZXNfc3RjX3dyaXRldzsKKwkJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJm1fc2VyaWVzX3N0Y19yZWFkdzsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZtX3Nlcmllc19zdGNfd3JpdGVsOworCQlkZXZwcml2LT5zdGNfcmVhZGwgPSAmbV9zZXJpZXNfc3RjX3JlYWRsOworCX0gZWxzZSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcgPSAmZV9zZXJpZXNfd2luX291dDsKKwkJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJmVfc2VyaWVzX3dpbl9pbjsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZ3aW5fb3V0MjsKKwkJZGV2cHJpdi0+c3RjX3JlYWRsID0gJndpbl9pbjI7CisJfQorCisJcmV0ID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIiBlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljb21lZGlfc2V0X2h3X2RldihkZXYsICZkZXZwcml2LT5taXRlLT5wY2lkZXYtPmRldik7CisJZGV2cHJpdi0+YWlfbWl0ZV9yaW5nID0gbWl0ZV9hbGxvY19yaW5nKGRldnByaXYtPm1pdGUpOworCWlmIChkZXZwcml2LT5haV9taXRlX3JpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+YW9fbWl0ZV9yaW5nID0gbWl0ZV9hbGxvY19yaW5nKGRldnByaXYtPm1pdGUpOworCWlmIChkZXZwcml2LT5hb19taXRlX3JpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+Y2RvX21pdGVfcmluZyA9IG1pdGVfYWxsb2NfcmluZyhkZXZwcml2LT5taXRlKTsKKwlpZiAoZGV2cHJpdi0+Y2RvX21pdGVfcmluZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZwcml2LT5ncGN0X21pdGVfcmluZ1swXSA9IG1pdGVfYWxsb2NfcmluZyhkZXZwcml2LT5taXRlKTsKKwlpZiAoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMV0gPSBtaXRlX2FsbG9jX3JpbmcoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKGRldnByaXYtPmdwY3RfbWl0ZV9yaW5nWzFdID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQltX3Nlcmllc19pbml0X2VlcHJvbV9idWZmZXIoZGV2KTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKQorCQlpbml0XzYxNDMoZGV2KTsKKworCWRldi0+aXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisKKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQlwcmludGsoIiB1bmtub3duIGlycSAoYmFkKVxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgZGV2LT5pcnEpOworCQlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShkZXYtPmlycSwgbmlfRV9pbnRlcnJ1cHQsCisJCQkJCU5JX0VfSVJRX0ZMQUdTLCBEUlZfTkFNRSwKKwkJCQkJZGV2KSkgPCAwKSB7CisJCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZVxuIik7CisJCQlkZXYtPmlycSA9IDA7CisJCX0KKwl9CisKKwlyZXQgPSBuaV9FX2luaXQoZGV2LCBpdCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXYtPnN1YmRldmljZXNbTklfQUlfU1VCREVWXS5idWZfY2hhbmdlID0gJnBjaW1pb19haV9jaGFuZ2U7CisJZGV2LT5zdWJkZXZpY2VzW05JX0FPX1NVQkRFVl0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fYW9fY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9HUENUX1NVQkRFVigwKV0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fZ3BjdDBfY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9HUENUX1NVQkRFVigxKV0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fZ3BjdDFfY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9ESU9fU1VCREVWXS5idWZfY2hhbmdlID0gJnBjaW1pb19kaW9fY2hhbmdlOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwY2ltaW9fZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG5fcGNpbWlvX2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlfYm9hcmRzW2ldLmRldmljZV9pZCkgeworCQkJCWRldi0+Ym9hcmRfcHRyID0gbmlfYm9hcmRzICsgaTsKKwkJCQlkZXZwcml2LT5taXRlID0gbWl0ZTsKKworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHBjaW1pb19haV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+YWlfbWl0ZV9yaW5nLCBzLT5hc3luYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2ltaW9fYW9fY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmFvX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2dwY3QwX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5ncGN0X21pdGVfcmluZ1swXSwgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2dwY3QxX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5ncGN0X21pdGVfcmluZ1sxXSwgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2Rpb19jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Y2RvX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfc3RjLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfc3RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViZjUyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9zdGMuaApAQCAtMCwwICsxLDE0OTggQEAKKy8qCisgICAgbW9kdWxlL25pX3N0Yy5oCisgICAgUmVnaXN0ZXIgZGVzY3JpcHRpb25zIGZvciBOSSBEQVEtU1RDIGNoaXAKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtOSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisvKgorCVJlZmVyZW5jZXM6CisJICAgIERBUS1TVEMgVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwKKyovCisKKyNpZm5kZWYgX0NPTUVESV9OSV9TVENfSAorI2RlZmluZSBfQ09NRURJX05JX1NUQ19ICisKKyNpbmNsdWRlICJuaV90aW8uaCIKKworI2RlZmluZSBfYml0MTUJCTB4ODAwMAorI2RlZmluZSBfYml0MTQJCTB4NDAwMAorI2RlZmluZSBfYml0MTMJCTB4MjAwMAorI2RlZmluZSBfYml0MTIJCTB4MTAwMAorI2RlZmluZSBfYml0MTEJCTB4MDgwMAorI2RlZmluZSBfYml0MTAJCTB4MDQwMAorI2RlZmluZSBfYml0OQkJMHgwMjAwCisjZGVmaW5lIF9iaXQ4CQkweDAxMDAKKyNkZWZpbmUgX2JpdDcJCTB4MDA4MAorI2RlZmluZSBfYml0NgkJMHgwMDQwCisjZGVmaW5lIF9iaXQ1CQkweDAwMjAKKyNkZWZpbmUgX2JpdDQJCTB4MDAxMAorI2RlZmluZSBfYml0MwkJMHgwMDA4CisjZGVmaW5lIF9iaXQyCQkweDAwMDQKKyNkZWZpbmUgX2JpdDEJCTB4MDAwMgorI2RlZmluZSBfYml0MAkJMHgwMDAxCisKKyNkZWZpbmUgTlVNX1BGSV9PVVRQVVRfU0VMRUNUX1JFR1MgNgorCisvKiBSZWdpc3RlcnMgaW4gdGhlIE5hdGlvbmFsIEluc3RydW1lbnRzIERBUS1TVEMgY2hpcCAqLworCisjZGVmaW5lIEludGVycnVwdF9BX0Fja19SZWdpc3RlcgkyCisjZGVmaW5lIEcwX0dhdGVfSW50ZXJydXB0X0FjawkJCV9iaXQxNQorI2RlZmluZSBHMF9UQ19JbnRlcnJ1cHRfQWNrCQkJX2JpdDE0CisjZGVmaW5lIEFJX0Vycm9yX0ludGVycnVwdF9BY2sJCQlfYml0MTMKKyNkZWZpbmUgQUlfU1RPUF9JbnRlcnJ1cHRfQWNrCQkJX2JpdDEyCisjZGVmaW5lIEFJX1NUQVJUX0ludGVycnVwdF9BY2sJCQlfYml0MTEKKyNkZWZpbmUgQUlfU1RBUlQyX0ludGVycnVwdF9BY2sJCQlfYml0MTAKKyNkZWZpbmUgQUlfU1RBUlQxX0ludGVycnVwdF9BY2sJCQlfYml0OQorI2RlZmluZSBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrCQkJX2JpdDgKKyNkZWZpbmUgQUlfU0NfVENfRXJyb3JfQ29uZmlybQkJCV9iaXQ3CisjZGVmaW5lIEcwX1RDX0Vycm9yX0NvbmZpcm0JCQlfYml0NgorI2RlZmluZSBHMF9HYXRlX0Vycm9yX0NvbmZpcm0JCQlfYml0NQorCisjZGVmaW5lIEFJX1N0YXR1c18xX1JlZ2lzdGVyCQkyCisjZGVmaW5lIEludGVycnVwdF9BX1N0CQkJCTB4ODAwMAorI2RlZmluZSBBSV9GSUZPX0Z1bGxfU3QJCQkJMHg0MDAwCisjZGVmaW5lIEFJX0ZJRk9fSGFsZl9GdWxsX1N0CQkJMHgyMDAwCisjZGVmaW5lIEFJX0ZJRk9fRW1wdHlfU3QJCQkweDEwMDAKKyNkZWZpbmUgQUlfT3ZlcnJ1bl9TdAkJCQkweDA4MDAKKyNkZWZpbmUgQUlfT3ZlcmZsb3dfU3QJCQkJMHgwNDAwCisjZGVmaW5lIEFJX1NDX1RDX0Vycm9yX1N0CQkJMHgwMjAwCisjZGVmaW5lIEFJX1NUQVJUMl9TdAkJCQkweDAxMDAKKyNkZWZpbmUgQUlfU1RBUlQxX1N0CQkJCTB4MDA4MAorI2RlZmluZSBBSV9TQ19UQ19TdAkJCQkweDAwNDAKKyNkZWZpbmUgQUlfU1RBUlRfU3QJCQkJMHgwMDIwCisjZGVmaW5lIEFJX1NUT1BfU3QJCQkJMHgwMDEwCisjZGVmaW5lIEcwX1RDX1N0CQkJCTB4MDAwOAorI2RlZmluZSBHMF9HYXRlX0ludGVycnVwdF9TdAkJCTB4MDAwNAorI2RlZmluZSBBSV9GSUZPX1JlcXVlc3RfU3QJCQkweDAwMDIKKyNkZWZpbmUgUGFzc19UaHJ1XzBfSW50ZXJydXB0X1N0CQkweDAwMDEKKworI2RlZmluZSBBSV9TdGF0dXNfMl9SZWdpc3RlcgkJNQorCisjZGVmaW5lIEludGVycnVwdF9CX0Fja19SZWdpc3RlcgkzCitlbnVtIEludGVycnVwdF9CX0Fja19CaXRzIHsKKwlHMV9HYXRlX0Vycm9yX0NvbmZpcm0gPSBfYml0MSwKKwlHMV9UQ19FcnJvcl9Db25maXJtID0gX2JpdDIsCisJQU9fQkNfVENfVHJpZ2dlcl9FcnJvcl9Db25maXJtID0gX2JpdDMsCisJQU9fQkNfVENfRXJyb3JfQ29uZmlybSA9IF9iaXQ0LAorCUFPX1VJMl9UQ19FcnJvcl9Db25mcmltID0gX2JpdDUsCisJQU9fVUkyX1RDX0ludGVycnVwdF9BY2sgPSBfYml0NiwKKwlBT19VQ19UQ19JbnRlcnJ1cHRfQWNrID0gX2JpdDcsCisJQU9fQkNfVENfSW50ZXJydXB0X0FjayA9IF9iaXQ4LAorCUFPX1NUQVJUMV9JbnRlcnJ1cHRfQWNrID0gX2JpdDksCisJQU9fVVBEQVRFX0ludGVycnVwdF9BY2sgPSBfYml0MTAsCisJQU9fU1RBUlRfSW50ZXJydXB0X0FjayA9IF9iaXQxMSwKKwlBT19TVE9QX0ludGVycnVwdF9BY2sgPSBfYml0MTIsCisJQU9fRXJyb3JfSW50ZXJydXB0X0FjayA9IF9iaXQxMywKKwlHMV9UQ19JbnRlcnJ1cHRfQWNrID0gX2JpdDE0LAorCUcxX0dhdGVfSW50ZXJydXB0X0FjayA9IF9iaXQxNQorfTsKKworI2RlZmluZSBBT19TdGF0dXNfMV9SZWdpc3RlcgkJMworI2RlZmluZSBJbnRlcnJ1cHRfQl9TdAkJCQlfYml0MTUKKyNkZWZpbmUgQU9fRklGT19GdWxsX1N0CQkJCV9iaXQxNAorI2RlZmluZSBBT19GSUZPX0hhbGZfRnVsbF9TdAkJCV9iaXQxMworI2RlZmluZSBBT19GSUZPX0VtcHR5X1N0CQkJX2JpdDEyCisjZGVmaW5lIEFPX0JDX1RDX0Vycm9yX1N0CQkJX2JpdDExCisjZGVmaW5lIEFPX1NUQVJUX1N0CQkJCV9iaXQxMAorI2RlZmluZSBBT19PdmVycnVuX1N0CQkJCV9iaXQ5CisjZGVmaW5lIEFPX1NUQVJUMV9TdAkJCQlfYml0OAorI2RlZmluZSBBT19CQ19UQ19TdAkJCQlfYml0NworI2RlZmluZSBBT19VQ19UQ19TdAkJCQlfYml0NgorI2RlZmluZSBBT19VUERBVEVfU3QJCQkJX2JpdDUKKyNkZWZpbmUgQU9fVUkyX1RDX1N0CQkJCV9iaXQ0CisjZGVmaW5lIEcxX1RDX1N0CQkJCV9iaXQzCisjZGVmaW5lIEcxX0dhdGVfSW50ZXJydXB0X1N0CQkJX2JpdDIKKyNkZWZpbmUgQU9fRklGT19SZXF1ZXN0X1N0CQkJX2JpdDEKKyNkZWZpbmUgUGFzc19UaHJ1XzFfSW50ZXJydXB0X1N0CQlfYml0MAorCisjZGVmaW5lIEFJX0NvbW1hbmRfMl9SZWdpc3RlcgkJNAorI2RlZmluZSBBSV9FbmRfT25fU0NfVEMJCQkJX2JpdDE1CisjZGVmaW5lIEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbgkJCV9iaXQxNAorI2RlZmluZSBBSV9TVEFSVDFfRGlzYWJsZQkJCV9iaXQxMQorI2RlZmluZSBBSV9TQ19TYXZlX1RyYWNlCQkJX2JpdDEwCisjZGVmaW5lIEFJX1NJX1N3aXRjaF9Mb2FkX09uX1NDX1RDCQlfYml0OQorI2RlZmluZSBBSV9TSV9Td2l0Y2hfTG9hZF9Pbl9TVE9QCQlfYml0OAorI2RlZmluZSBBSV9TSV9Td2l0Y2hfTG9hZF9Pbl9UQwkJCV9iaXQ3CisjZGVmaW5lIEFJX1NDX1N3aXRjaF9Mb2FkX09uX1RDCQkJX2JpdDQKKyNkZWZpbmUgQUlfU1RPUF9QdWxzZQkJCQlfYml0MworI2RlZmluZSBBSV9TVEFSVF9QdWxzZQkJCQlfYml0MgorI2RlZmluZSBBSV9TVEFSVDJfUHVsc2UJCQkJX2JpdDEKKyNkZWZpbmUgQUlfU1RBUlQxX1B1bHNlCQkJCV9iaXQwCisKKyNkZWZpbmUgQU9fQ29tbWFuZF8yX1JlZ2lzdGVyCQk1CisjZGVmaW5lIEFPX0VuZF9Pbl9CQ19UQyh4KQkJCSgoKHgpICYgMHgzKSA8PCAxNCkKKyNkZWZpbmUgQU9fU3RhcnRfU3RvcF9HYXRlX0VuYWJsZQkJX2JpdDEzCisjZGVmaW5lIEFPX1VDX1NhdmVfVHJhY2UJCQlfYml0MTIKKyNkZWZpbmUgQU9fQkNfR2F0ZV9FbmFibGUJCQlfYml0MTEKKyNkZWZpbmUgQU9fQkNfU2F2ZV9UcmFjZQkJCV9iaXQxMAorI2RlZmluZSBBT19VSV9Td2l0Y2hfTG9hZF9Pbl9CQ19UQwkJX2JpdDkKKyNkZWZpbmUgQU9fVUlfU3dpdGNoX0xvYWRfT25fU3RvcAkJX2JpdDgKKyNkZWZpbmUgQU9fVUlfU3dpdGNoX0xvYWRfT25fVEMJCQlfYml0NworI2RlZmluZSBBT19VQ19Td2l0Y2hfTG9hZF9Pbl9CQ19UQwkJX2JpdDYKKyNkZWZpbmUgQU9fVUNfU3dpdGNoX0xvYWRfT25fVEMJCQlfYml0NQorI2RlZmluZSBBT19CQ19Td2l0Y2hfTG9hZF9Pbl9UQwkJCV9iaXQ0CisjZGVmaW5lIEFPX011dGVfQgkJCQlfYml0MworI2RlZmluZSBBT19NdXRlX0EJCQkJX2JpdDIKKyNkZWZpbmUgQU9fVVBEQVRFMl9QdWxzZQkJCV9iaXQxCisjZGVmaW5lIEFPX1NUQVJUMV9QdWxzZQkJCQlfYml0MAorCisjZGVmaW5lIEFPX1N0YXR1c18yX1JlZ2lzdGVyCQk2CisKKyNkZWZpbmUgRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyCTcKKworI2RlZmluZSBBSV9Db21tYW5kXzFfUmVnaXN0ZXIJCTgKKyNkZWZpbmUgQUlfQW5hbG9nX1RyaWdnZXJfUmVzZXQJCQlfYml0MTQKKyNkZWZpbmUgQUlfRGlzYXJtCQkJCV9iaXQxMworI2RlZmluZSBBSV9TSTJfQXJtCQkJCV9iaXQxMgorI2RlZmluZSBBSV9TSTJfTG9hZAkJCQlfYml0MTEKKyNkZWZpbmUgQUlfU0lfQXJtCQkJCV9iaXQxMAorI2RlZmluZSBBSV9TSV9Mb2FkCQkJCV9iaXQ5CisjZGVmaW5lIEFJX0RJVl9Bcm0JCQkJX2JpdDgKKyNkZWZpbmUgQUlfRElWX0xvYWQJCQkJX2JpdDcKKyNkZWZpbmUgQUlfU0NfQXJtCQkJCV9iaXQ2CisjZGVmaW5lIEFJX1NDX0xvYWQJCQkJX2JpdDUKKyNkZWZpbmUgQUlfU0NBTl9JTl9QUk9HX1B1bHNlCQkJX2JpdDQKKyNkZWZpbmUgQUlfRVhUTVVYX0NMS19QdWxzZQkJCV9iaXQzCisjZGVmaW5lIEFJX0xPQ0FMTVVYX0NMS19QdWxzZQkJCV9iaXQyCisjZGVmaW5lIEFJX1NDX1RDX1B1bHNlCQkJIAlfYml0MQorI2RlZmluZSBBSV9DT05WRVJUX1B1bHNlCQkJX2JpdDAKKworI2RlZmluZSBBT19Db21tYW5kXzFfUmVnaXN0ZXIJCTkKKyNkZWZpbmUgQU9fQW5hbG9nX1RyaWdnZXJfUmVzZXQJCQlfYml0MTUKKyNkZWZpbmUgQU9fU1RBUlRfUHVsc2UJCQkJX2JpdDE0CisjZGVmaW5lIEFPX0Rpc2FybQkJCQlfYml0MTMKKyNkZWZpbmUgQU9fVUkyX0FybV9EaXNhcm0JCQlfYml0MTIKKyNkZWZpbmUgQU9fVUkyX0xvYWQJCQkJX2JpdDExCisjZGVmaW5lIEFPX1VJX0FybQkJCQlfYml0MTAKKyNkZWZpbmUgQU9fVUlfTG9hZAkJCQlfYml0OQorI2RlZmluZSBBT19VQ19Bcm0JCQkJX2JpdDgKKyNkZWZpbmUgQU9fVUNfTG9hZAkJCQlfYml0NworI2RlZmluZSBBT19CQ19Bcm0JCQkJX2JpdDYKKyNkZWZpbmUgQU9fQkNfTG9hZAkJCQlfYml0NQorI2RlZmluZSBBT19EQUMxX1VwZGF0ZV9Nb2RlCQkJX2JpdDQKKyNkZWZpbmUgQU9fTERBQzFfU291cmNlX1NlbGVjdAkJCV9iaXQzCisjZGVmaW5lIEFPX0RBQzBfVXBkYXRlX01vZGUJCQlfYml0MgorI2RlZmluZSBBT19MREFDMF9Tb3VyY2VfU2VsZWN0CQkJX2JpdDEKKyNkZWZpbmUgQU9fVVBEQVRFX1B1bHNlCQkJCV9iaXQwCisKKyNkZWZpbmUgRElPX091dHB1dF9SZWdpc3RlcgkJMTAKKyNkZWZpbmUgRElPX1BhcmFsbGVsX0RhdGFfT3V0KGEpICAgICAgICAgICAgICAgICgoYSkmMHhmZikKKyNkZWZpbmUgRElPX1BhcmFsbGVsX0RhdGFfTWFzayAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgRElPX1NET1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iaXQwCisjZGVmaW5lIERJT19TRElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYml0NAorI2RlZmluZSBESU9fU2VyaWFsX0RhdGFfT3V0KGEpICAgICAgICAgICAgICAgICAgKCgoYSkmMHhmZik8PDgpCisjZGVmaW5lIERJT19TZXJpYWxfRGF0YV9NYXNrICAgICAgICAgICAgICAgICAgICAweGZmMDAKKworI2RlZmluZSBESU9fQ29udHJvbF9SZWdpc3RlcgkJMTEKKyNkZWZpbmUgRElPX1NvZnR3YXJlX1NlcmlhbF9Db250cm9sICAgICAgICAgICAgIF9iaXQxMQorI2RlZmluZSBESU9fSFdfU2VyaWFsX1RpbWViYXNlICAgICAgICAgICAgICAgICAgX2JpdDEwCisjZGVmaW5lIERJT19IV19TZXJpYWxfRW5hYmxlICAgICAgICAgICAgICAgICAgICBfYml0OQorI2RlZmluZSBESU9fSFdfU2VyaWFsX1N0YXJ0ICAgICAgICAgICAgICAgICAgICAgX2JpdDgKKyNkZWZpbmUgRElPX1BpbnNfRGlyKGEpICAgICAgICAgICAgICAgICAgICAgICAgICgoYSkmMHhmZikKKyNkZWZpbmUgRElPX1BpbnNfRGlyX01hc2sgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYKKworI2RlZmluZSBBSV9Nb2RlXzFfUmVnaXN0ZXIJCTEyCisjZGVmaW5lIEFJX0NPTlZFUlRfU291cmNlX1NlbGVjdChhKQkJKCgoYSkgJiAweDFmKSA8PCAxMSkKKyNkZWZpbmUgQUlfU0lfU291cmNlX3NlbGVjdChhKQkJCSgoKGEpICYgMHgxZikgPDwgNikKKyNkZWZpbmUgQUlfQ09OVkVSVF9Tb3VyY2VfUG9sYXJpdHkJCV9iaXQ1CisjZGVmaW5lIEFJX1NJX1NvdXJjZV9Qb2xhcml0eQkJX2JpdDQKKyNkZWZpbmUgQUlfU3RhcnRfU3RvcAkJCQlfYml0MworI2RlZmluZSBBSV9Nb2RlXzFfUmVzZXJ2ZWQJCQlfYml0MgorI2RlZmluZSBBSV9Db250aW51b3VzCQkJCV9iaXQxCisjZGVmaW5lIEFJX1RyaWdnZXJfT25jZQkJCQlfYml0MAorCisjZGVmaW5lIEFJX01vZGVfMl9SZWdpc3RlcgkJMTMKKyNkZWZpbmUgQUlfU0NfR2F0ZV9FbmFibGUJCQlfYml0MTUKKyNkZWZpbmUgQUlfU3RhcnRfU3RvcF9HYXRlX0VuYWJsZQkJX2JpdDE0CisjZGVmaW5lIEFJX1ByZV9UcmlnZ2VyCQkJCV9iaXQxMworI2RlZmluZSBBSV9FeHRlcm5hbF9NVVhfUHJlc2VudAkJCV9iaXQxMgorI2RlZmluZSBBSV9TSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDkKKyNkZWZpbmUgQUlfU0kyX1JlbG9hZF9Nb2RlCQkJX2JpdDgKKyNkZWZpbmUgQUlfU0lfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDcKKyNkZWZpbmUgQUlfU0lfUmVsb2FkX01vZGUoYSkJCQkoKChhKSAmIDB4Nyk8PDQpCisjZGVmaW5lIEFJX1NJX1dyaXRlX1N3aXRjaAkJCV9iaXQzCisjZGVmaW5lIEFJX1NDX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQyCisjZGVmaW5lIEFJX1NDX1JlbG9hZF9Nb2RlCQkJX2JpdDEKKyNkZWZpbmUgQUlfU0NfV3JpdGVfU3dpdGNoCQkJX2JpdDAKKworI2RlZmluZSBBSV9TSV9Mb2FkX0FfUmVnaXN0ZXJzCQkxNAorI2RlZmluZSBBSV9TSV9Mb2FkX0JfUmVnaXN0ZXJzCQkxNgorI2RlZmluZSBBSV9TQ19Mb2FkX0FfUmVnaXN0ZXJzCQkxOAorI2RlZmluZSBBSV9TQ19Mb2FkX0JfUmVnaXN0ZXJzCQkyMAorI2RlZmluZSBBSV9TSV9TYXZlX1JlZ2lzdGVycwkJNjQKKyNkZWZpbmUgQUlfU0NfU2F2ZV9SZWdpc3RlcnMJCTY2CisKKyNkZWZpbmUgQUlfU0kyX0xvYWRfQV9SZWdpc3RlcgkJMjMKKyNkZWZpbmUgQUlfU0kyX0xvYWRfQl9SZWdpc3RlcgkJMjUKKworI2RlZmluZSBKb2ludF9TdGF0dXNfMV9SZWdpc3RlciAgICAgICAgIDI3CisjZGVmaW5lIERJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QgICAgICAgICAgICBfYml0MTIKKworI2RlZmluZSBESU9fU2VyaWFsX0lucHV0X1JlZ2lzdGVyICAgICAgIDI4CisjZGVmaW5lIEpvaW50X1N0YXR1c18yX1JlZ2lzdGVyICAgICAgICAgMjkKK2VudW0gSm9pbnRfU3RhdHVzXzJfQml0cyB7CisJQU9fVE1SREFDV1JzX0luX1Byb2dyZXNzX1N0ID0gMHgyMCwKK307CisKKyNkZWZpbmUgQU9fTW9kZV8xX1JlZ2lzdGVyCQkzOAorI2RlZmluZSBBT19VUERBVEVfU291cmNlX1NlbGVjdCh4KQkJKCgoeCkmMHgxZik8PDExKQorI2RlZmluZSBBT19VSV9Tb3VyY2VfU2VsZWN0KHgpCQkJKCgoeCkmMHgxZik8PDYpCisjZGVmaW5lIEFPX011bHRpcGxlX0NoYW5uZWxzCQkJX2JpdDUKKyNkZWZpbmUgQU9fVVBEQVRFX1NvdXJjZV9Qb2xhcml0eQkJX2JpdDQKKyNkZWZpbmUgQU9fVUlfU291cmNlX1BvbGFyaXR5CQkJX2JpdDMKKyNkZWZpbmUgQU9fVUNfU3dpdGNoX0xvYWRfRXZlcnlfVEMJCV9iaXQyCisjZGVmaW5lIEFPX0NvbnRpbnVvdXMJCQkJX2JpdDEKKyNkZWZpbmUgQU9fVHJpZ2dlcl9PbmNlCQkJCV9iaXQwCisKKyNkZWZpbmUgQU9fTW9kZV8yX1JlZ2lzdGVyCQkzOQorI2RlZmluZSBBT19GSUZPX01vZGVfTWFzayAoIDB4MyA8PCAxNCApCitlbnVtIEFPX0ZJRk9fTW9kZV9CaXRzIHsKKwlBT19GSUZPX01vZGVfSEZfdG9fRiA9ICgzIDw8IDE0KSwKKwlBT19GSUZPX01vZGVfRiA9ICgyIDw8IDE0KSwKKwlBT19GSUZPX01vZGVfSEYgPSAoMSA8PCAxNCksCisJQU9fRklGT19Nb2RlX0UgPSAoMCA8PCAxNCksCit9OworI2RlZmluZSBBT19GSUZPX1JldHJhbnNtaXRfRW5hYmxlCQlfYml0MTMKKyNkZWZpbmUgQU9fU1RBUlQxX0Rpc2FibGUJCQlfYml0MTIKKyNkZWZpbmUgQU9fVUNfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDExCisjZGVmaW5lIEFPX1VDX1dyaXRlX1N3aXRjaAkJCV9iaXQxMAorI2RlZmluZSBBT19VSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDkKKyNkZWZpbmUgQU9fVUkyX1JlbG9hZF9Nb2RlCQkJX2JpdDgKKyNkZWZpbmUgQU9fVUlfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDcKKyNkZWZpbmUgQU9fVUlfUmVsb2FkX01vZGUoeCkJCQkoKCh4KSAmIDB4NykgPDwgNCkKKyNkZWZpbmUgQU9fVUlfV3JpdGVfU3dpdGNoCQkJX2JpdDMKKyNkZWZpbmUgQU9fQkNfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDIKKyNkZWZpbmUgQU9fQkNfUmVsb2FkX01vZGUJCQlfYml0MQorI2RlZmluZSBBT19CQ19Xcml0ZV9Td2l0Y2gJCQlfYml0MAorCisjZGVmaW5lIEFPX1VJX0xvYWRfQV9SZWdpc3RlcgkJNDAKKyNkZWZpbmUgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyX0hpZ2gJNDAKKyNkZWZpbmUgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyX0xvdwk0MQorI2RlZmluZSBBT19VSV9Mb2FkX0JfUmVnaXN0ZXIJCTQyCisjZGVmaW5lIEFPX1VJX1NhdmVfUmVnaXN0ZXJzCQkxNgorI2RlZmluZSBBT19CQ19Mb2FkX0FfUmVnaXN0ZXIJCTQ0CisjZGVmaW5lIEFPX0JDX0xvYWRfQV9SZWdpc3Rlcl9IaWdoCTQ0CisjZGVmaW5lIEFPX0JDX0xvYWRfQV9SZWdpc3Rlcl9Mb3cJNDUKKyNkZWZpbmUgQU9fQkNfTG9hZF9CX1JlZ2lzdGVyCQk0NgorI2RlZmluZSBBT19CQ19Mb2FkX0JfUmVnaXN0ZXJfSGlnaAk0NgorI2RlZmluZSBBT19CQ19Mb2FkX0JfUmVnaXN0ZXJfTG93CTQ3CisjZGVmaW5lIEFPX0JDX1NhdmVfUmVnaXN0ZXJzCQkxOAorI2RlZmluZSBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIJCTQ4CisjZGVmaW5lIEFPX1VDX0xvYWRfQV9SZWdpc3Rlcl9IaWdoCTQ4CisjZGVmaW5lIEFPX1VDX0xvYWRfQV9SZWdpc3Rlcl9Mb3cJNDkKKyNkZWZpbmUgQU9fVUNfTG9hZF9CX1JlZ2lzdGVyCQk1MAorI2RlZmluZSBBT19VQ19TYXZlX1JlZ2lzdGVycwkJMjAKKworI2RlZmluZSBDbG9ja19hbmRfRk9VVF9SZWdpc3RlcgkJNTYKK2VudW0gQ2xvY2tfYW5kX0ZPVVRfYml0cyB7CisJRk9VVF9FbmFibGUgPSBfYml0MTUsCisJRk9VVF9UaW1lYmFzZV9TZWxlY3QgPSBfYml0MTQsCisJRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzIgPSBfYml0MTMsCisJU2xvd19JbnRlcm5hbF9UaW1lX0RpdmlkZV9CeV8yID0gX2JpdDEyLAorCVNsb3dfSW50ZXJuYWxfVGltZWJhc2UgPSBfYml0MTEsCisJR19Tb3VyY2VfRGl2aWRlX0J5XzIgPSBfYml0MTAsCisJQ2xvY2tfVG9fQm9hcmRfRGl2aWRlX0J5XzIgPSBfYml0OSwKKwlDbG9ja19Ub19Cb2FyZCA9IF9iaXQ4LAorCUFJX091dHB1dF9EaXZpZGVfQnlfMiA9IF9iaXQ3LAorCUFJX1NvdXJjZV9EaXZpZGVfQnlfMiA9IF9iaXQ2LAorCUFPX091dHB1dF9EaXZpZGVfQnlfMiA9IF9iaXQ1LAorCUFPX1NvdXJjZV9EaXZpZGVfQnlfMiA9IF9iaXQ0LAorCUZPVVRfRGl2aWRlcl9tYXNrID0gMHhmCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBGT1VUX0RpdmlkZXIodW5zaWduZWQgZGl2aWRlcikKK3sKKwlyZXR1cm4gKGRpdmlkZXIgJiBGT1VUX0RpdmlkZXJfbWFzayk7Cit9CisKKyNkZWZpbmUgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyCTU3CisjZGVmaW5lCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIJNTgKK2VudW0gUlRTSV9UcmlnX0RpcmVjdGlvbl9CaXRzIHsKKwlEcml2ZV9SVFNJX0Nsb2NrX0JpdCA9IDB4MSwKKwlVc2VfUlRTSV9DbG9ja19CaXQgPSAweDIsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX091dHB1dF9CaXQodW5zaWduZWQgY2hhbm5lbCwgaW50IGlzX21zZXJpZXMpCit7CisJdW5zaWduZWQgbWF4X2NoYW5uZWw7CisJdW5zaWduZWQgYmFzZV9iaXRfc2hpZnQ7CisJaWYgKGlzX21zZXJpZXMpIHsKKwkJYmFzZV9iaXRfc2hpZnQgPSA4OworCQltYXhfY2hhbm5lbCA9IDc7CisJfSBlbHNlIHsKKwkJYmFzZV9iaXRfc2hpZnQgPSA5OworCQltYXhfY2hhbm5lbCA9IDY7CisJfQorCWlmIChjaGFubmVsID4gbWF4X2NoYW5uZWwpIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBpbnZhbGlkIFJUU0lfY2hhbm5lbD0laVxuIiwgX19GVU5DVElPTl9fLAorCQkJY2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMSA8PCAoYmFzZV9iaXRfc2hpZnQgKyBjaGFubmVsKTsKK30KKworI2RlZmluZSBJbnRlcnJ1cHRfQ29udHJvbF9SZWdpc3Rlcgk1OQorI2RlZmluZSBJbnRlcnJ1cHRfQl9FbmFibGUJCQlfYml0MTUKKyNkZWZpbmUgSW50ZXJydXB0X0JfT3V0cHV0X1NlbGVjdCh4KQkJKCh4KTw8MTIpCisjZGVmaW5lIEludGVycnVwdF9BX0VuYWJsZQkJCV9iaXQxMQorI2RlZmluZSBJbnRlcnJ1cHRfQV9PdXRwdXRfU2VsZWN0KHgpCQkoKHgpPDw4KQorI2RlZmluZSBQYXNzX1RocnVfMF9JbnRlcnJ1cHRfUG9sYXJpdHkJCV9iaXQzCisjZGVmaW5lIFBhc3NfVGhydV8xX0ludGVycnVwdF9Qb2xhcml0eQkJX2JpdDIKKyNkZWZpbmUgSW50ZXJydXB0X091dHB1dF9Pbl8zX1BpbnMJCV9iaXQxCisjZGVmaW5lIEludGVycnVwdF9PdXRwdXRfUG9sYXJpdHkJCV9iaXQwCisKKyNkZWZpbmUgQUlfT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIJNjAKKyNkZWZpbmUgQUlfU1RBUlRfT3V0cHV0X1NlbGVjdAkJCV9iaXQxMAorI2RlZmluZSBBSV9TQ0FOX0lOX1BST0dfT3V0cHV0X1NlbGVjdCh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgQUlfRVhUTVVYX0NMS19PdXRwdXRfU2VsZWN0KHgpCQkoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgQUlfTE9DQUxNVVhfQ0xLX091dHB1dF9TZWxlY3QoeCkJKCh4KTw8NCkKKyNkZWZpbmUgQUlfU0NfVENfT3V0cHV0X1NlbGVjdCh4KQkJKCh4KTw8MikKK2VudW0gYWlfY29udmVydF9vdXRwdXRfc2VsZWN0aW9uIHsKKwlBSV9DT05WRVJUX091dHB1dF9IaWdoX1ogPSAwLAorCUFJX0NPTlZFUlRfT3V0cHV0X0dyb3VuZCA9IDEsCisJQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0xvdyA9IDIsCisJQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0hpZ2ggPSAzCit9Oworc3RhdGljIHVuc2lnbmVkIEFJX0NPTlZFUlRfT3V0cHV0X1NlbGVjdChlbnVtIGFpX2NvbnZlcnRfb3V0cHV0X3NlbGVjdGlvbgorCXNlbGVjdGlvbikKK3sKKwlyZXR1cm4gc2VsZWN0aW9uICYgMHgzOworfQorCisjZGVmaW5lIEFJX1NUQVJUX1NUT1BfU2VsZWN0X1JlZ2lzdGVyCTYyCisjZGVmaW5lIEFJX1NUQVJUX1BvbGFyaXR5CQkJX2JpdDE1CisjZGVmaW5lIEFJX1NUT1BfUG9sYXJpdHkJCQlfYml0MTQKKyNkZWZpbmUgQUlfU1RPUF9TeW5jCQkJCV9iaXQxMworI2RlZmluZSBBSV9TVE9QX0VkZ2UJCQkJX2JpdDEyCisjZGVmaW5lIEFJX1NUT1BfU2VsZWN0KGEpCQkJKCgoYSkgJiAweDFmKTw8NykKKyNkZWZpbmUgQUlfU1RBUlRfU3luYwkJCQlfYml0NgorI2RlZmluZSBBSV9TVEFSVF9FZGdlCQkJCV9iaXQ1CisjZGVmaW5lIEFJX1NUQVJUX1NlbGVjdChhKQkJCSgoYSkgJiAweDFmKQorCisjZGVmaW5lIEFJX1RyaWdnZXJfU2VsZWN0X1JlZ2lzdGVyCTYzCisjZGVmaW5lIEFJX1NUQVJUMV9Qb2xhcml0eQkJCV9iaXQxNQorI2RlZmluZSBBSV9TVEFSVDJfUG9sYXJpdHkJCQlfYml0MTQKKyNkZWZpbmUgQUlfU1RBUlQyX1N5bmMJCQkJX2JpdDEzCisjZGVmaW5lIEFJX1NUQVJUMl9FZGdlCQkJCV9iaXQxMgorI2RlZmluZSBBSV9TVEFSVDJfU2VsZWN0KGEpCQkJKCgoYSkgJiAweDFmKSA8PCA3KQorI2RlZmluZSBBSV9TVEFSVDFfU3luYwkJCQlfYml0NgorI2RlZmluZSBBSV9TVEFSVDFfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBSV9TVEFSVDFfU2VsZWN0KGEpCQkJKChhKSAmIDB4MWYpCisKKyNkZWZpbmUgQUlfRElWX0xvYWRfQV9SZWdpc3Rlcgk2NAorCisjZGVmaW5lIEFPX1N0YXJ0X1NlbGVjdF9SZWdpc3Rlcgk2NgorI2RlZmluZSBBT19VSTJfU29mdHdhcmVfR2F0ZQkJCV9iaXQxNQorI2RlZmluZSBBT19VSTJfRXh0ZXJuYWxfR2F0ZV9Qb2xhcml0eQkJX2JpdDE0CisjZGVmaW5lIEFPX1NUQVJUX1BvbGFyaXR5CQkJX2JpdDEzCisjZGVmaW5lIEFPX0FPRlJFUV9FbmFibGUJCQlfYml0MTIKKyNkZWZpbmUgQU9fVUkyX0V4dGVybmFsX0dhdGVfU2VsZWN0KGEpCQkoKChhKSAmIDB4MWYpIDw8IDcpCisjZGVmaW5lIEFPX1NUQVJUX1N5bmMJCQkJX2JpdDYKKyNkZWZpbmUgQU9fU1RBUlRfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBT19TVEFSVF9TZWxlY3QoYSkJCQkoKGEpICYgMHgxZikKKworI2RlZmluZSBBT19UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcgk2NworI2RlZmluZSBBT19VSTJfRXh0ZXJuYWxfR2F0ZV9FbmFibGUJCV9iaXQxNQorI2RlZmluZSBBT19EZWxheWVkX1NUQVJUMQkJCV9iaXQxNAorI2RlZmluZSBBT19TVEFSVDFfUG9sYXJpdHkJCQlfYml0MTMKKyNkZWZpbmUgQU9fVUkyX1NvdXJjZV9Qb2xhcml0eQkJCV9iaXQxMgorI2RlZmluZSBBT19VSTJfU291cmNlX1NlbGVjdCh4KQkJCSgoKHgpJjB4MWYpPDw3KQorI2RlZmluZSBBT19TVEFSVDFfU3luYwkJCQlfYml0NgorI2RlZmluZSBBT19TVEFSVDFfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBT19TVEFSVDFfU2VsZWN0KHgpCQkJKCgoeCkmMHgxZik8PDApCisKKyNkZWZpbmUgQU9fTW9kZV8zX1JlZ2lzdGVyCQk3MAorI2RlZmluZSBBT19VSTJfU3dpdGNoX0xvYWRfTmV4dF9UQwkJX2JpdDEzCisjZGVmaW5lIEFPX1VDX1N3aXRjaF9Mb2FkX0V2ZXJ5X0JDX1RDCQlfYml0MTIKKyNkZWZpbmUgQU9fVHJpZ2dlcl9MZW5ndGgJCQlfYml0MTEKKyNkZWZpbmUgQU9fU3RvcF9Pbl9PdmVycnVuX0Vycm9yCQlfYml0NQorI2RlZmluZSBBT19TdG9wX09uX0JDX1RDX1RyaWdnZXJfRXJyb3IJCV9iaXQ0CisjZGVmaW5lIEFPX1N0b3BfT25fQkNfVENfRXJyb3IJCQlfYml0MworI2RlZmluZSBBT19Ob3RfQW5fVVBEQVRFCQkJX2JpdDIKKyNkZWZpbmUgQU9fU29mdHdhcmVfR2F0ZQkJCV9iaXQxCisjZGVmaW5lIEFPX0xhc3RfR2F0ZV9EaXNhYmxlCQlfYml0MAkvKiBNIFNlcmllcyBvbmx5ICovCisKKyNkZWZpbmUgSm9pbnRfUmVzZXRfUmVnaXN0ZXIJCTcyCisjZGVmaW5lIFNvZnR3YXJlX1Jlc2V0CQkJX2JpdDExCisjZGVmaW5lIEFPX0NvbmZpZ3VyYXRpb25fRW5kCQkJX2JpdDkKKyNkZWZpbmUgQUlfQ29uZmlndXJhdGlvbl9FbmQJCQlfYml0OAorI2RlZmluZSBBT19Db25maWd1cmF0aW9uX1N0YXJ0CQkJX2JpdDUKKyNkZWZpbmUgQUlfQ29uZmlndXJhdGlvbl9TdGFydAkJCV9iaXQ0CisjZGVmaW5lIEcxX1Jlc2V0CQkJCV9iaXQzCisjZGVmaW5lIEcwX1Jlc2V0CQkJCV9iaXQyCisjZGVmaW5lIEFPX1Jlc2V0CQkJCV9iaXQxCisjZGVmaW5lIEFJX1Jlc2V0CQkJCV9iaXQwCisKKyNkZWZpbmUgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyCTczCisjZGVmaW5lIFBhc3NfVGhydV8wX0ludGVycnVwdF9FbmFibGUJCV9iaXQ5CisjZGVmaW5lIEcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDgKKyNkZWZpbmUgQUlfRklGT19JbnRlcnJ1cHRfRW5hYmxlCQlfYml0NworI2RlZmluZSBHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlCQkJX2JpdDYKKyNkZWZpbmUgQUlfRXJyb3JfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDUKKyNkZWZpbmUgQUlfU1RPUF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0NAorI2RlZmluZSBBSV9TVEFSVF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MworI2RlZmluZSBBSV9TVEFSVDJfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDIKKyNkZWZpbmUgQUlfU1RBUlQxX0ludGVycnVwdF9FbmFibGUJCV9iaXQxCisjZGVmaW5lIEFJX1NDX1RDX0ludGVycnVwdF9FbmFibGUJCV9iaXQwCisKKyNkZWZpbmUgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyCTc1CisjZGVmaW5lIFBhc3NfVGhydV8xX0ludGVycnVwdF9FbmFibGUJCV9iaXQxMQorI2RlZmluZSBHMV9HYXRlX0ludGVycnVwdF9FbmFibGUJCV9iaXQxMAorI2RlZmluZSBHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlCQkJX2JpdDkKKyNkZWZpbmUgQU9fRklGT19JbnRlcnJ1cHRfRW5hYmxlCQlfYml0OAorI2RlZmluZSBBT19VSTJfVENfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDcKKyNkZWZpbmUgQU9fVUNfVENfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDYKKyNkZWZpbmUgQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDUKKyNkZWZpbmUgQU9fU1RPUF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0NAorI2RlZmluZSBBT19TVEFSVF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MworI2RlZmluZSBBT19VUERBVEVfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDIKKyNkZWZpbmUgQU9fU1RBUlQxX0ludGVycnVwdF9FbmFibGUJCV9iaXQxCisjZGVmaW5lIEFPX0JDX1RDX0ludGVycnVwdF9FbmFibGUJCV9iaXQwCisKKyNkZWZpbmUgU2Vjb25kX0lSUV9BX0VuYWJsZV9SZWdpc3Rlcgk3NAorZW51bSBTZWNvbmRfSVJRX0FfRW5hYmxlX0JpdHMgeworCUFJX1NDX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDAsCisJQUlfU1RBUlQxX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDEsCisJQUlfU1RBUlQyX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDIsCisJQUlfU1RBUlRfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MywKKwlBSV9TVE9QX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDQsCisJQUlfRXJyb3JfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NSwKKwlHMF9UQ19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ2LAorCUFJX0ZJRk9fU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NywKKwlHMF9HYXRlX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDgsCisJUGFzc19UaHJ1XzBfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0OQorfTsKKworI2RlZmluZSBTZWNvbmRfSVJRX0JfRW5hYmxlX1JlZ2lzdGVyCTc2CitlbnVtIFNlY29uZF9JUlFfQl9FbmFibGVfQml0cyB7CisJQU9fQkNfVENfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MCwKKwlBT19TVEFSVDFfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MSwKKwlBT19VUERBVEVfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MiwKKwlBT19TVEFSVF9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQzLAorCUFPX1NUT1BfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NCwKKwlBT19FcnJvcl9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ1LAorCUFPX1VDX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDYsCisJQU9fVUkyX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDcsCisJQU9fRklGT19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ4LAorCUcxX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDksCisJRzFfR2F0ZV9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQxMCwKKwlQYXNzX1RocnVfMV9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQxMQorfTsKKworI2RlZmluZSBBSV9QZXJzb25hbF9SZWdpc3RlcgkJNzcKKyNkZWZpbmUgQUlfU0hJRlRJTl9QdWxzZV9XaWR0aAkJCV9iaXQxNQorI2RlZmluZSBBSV9FT0NfUG9sYXJpdHkJCQkJX2JpdDE0CisjZGVmaW5lIEFJX1NPQ19Qb2xhcml0eQkJCQlfYml0MTMKKyNkZWZpbmUgQUlfU0hJRlRJTl9Qb2xhcml0eQkJCV9iaXQxMgorI2RlZmluZSBBSV9DT05WRVJUX1B1bHNlX1RpbWViYXNlCQlfYml0MTEKKyNkZWZpbmUgQUlfQ09OVkVSVF9QdWxzZV9XaWR0aAkJCV9iaXQxMAorI2RlZmluZSBBSV9DT05WRVJUX09yaWdpbmFsX1B1bHNlCQlfYml0OQorI2RlZmluZSBBSV9GSUZPX0ZsYWdzX1BvbGFyaXR5CQkJX2JpdDgKKyNkZWZpbmUgQUlfT3ZlcnJ1bl9Nb2RlCQkJCV9iaXQ3CisjZGVmaW5lIEFJX0VYVE1VWF9DTEtfUHVsc2VfV2lkdGgJCV9iaXQ2CisjZGVmaW5lIEFJX0xPQ0FMTVVYX0NMS19QdWxzZV9XaWR0aAkJX2JpdDUKKyNkZWZpbmUgQUlfQUlGUkVRX1BvbGFyaXR5CQkJX2JpdDQKKworI2RlZmluZSBBT19QZXJzb25hbF9SZWdpc3RlcgkJNzgKK2VudW0gQU9fUGVyc29uYWxfQml0cyB7CisJQU9fSW50ZXJ2YWxfQnVmZmVyX01vZGUgPSAxIDw8IDMsCisJQU9fQkNfU291cmNlX1NlbGVjdCA9IDEgPDwgNCwKKwlBT19VUERBVEVfUHVsc2VfV2lkdGggPSAxIDw8IDUsCisJQU9fVVBEQVRFX1B1bHNlX1RpbWViYXNlID0gMSA8PCA2LAorCUFPX1VQREFURV9PcmlnaW5hbF9QdWxzZSA9IDEgPDwgNywKKwlBT19ETUFfUElPX0NvbnRyb2wgPSAxIDw8IDgsCS8qIE0gU2VyaWVzOiByZXNlcnZlZCAqLworCUFPX0FPRlJFUV9Qb2xhcml0eSA9IDEgPDwgOSwJLyogTSBTZXJpZXM6IHJlc2VydmVkICovCisJQU9fRklGT19FbmFibGUgPSAxIDw8IDEwLAorCUFPX0ZJRk9fRmxhZ3NfUG9sYXJpdHkgPSAxIDw8IDExLAkvKiBNIFNlcmllczogcmVzZXJ2ZWQgKi8KKwlBT19UTVJEQUNXUl9QdWxzZV9XaWR0aCA9IDEgPDwgMTIsCisJQU9fRmFzdF9DUFUgPSAxIDw8IDEzLAkvKiBNIFNlcmllczogcmVzZXJ2ZWQgKi8KKwlBT19OdW1iZXJfT2ZfREFDX1BhY2thZ2VzID0gMSA8PCAxNCwJLy8gMSBmb3IgInNpbmdsZSIgbW9kZSwgMCBmb3IgImR1YWwiCisJQU9fTXVsdGlwbGVfREFDU19QZXJfUGFja2FnZSA9IDEgPDwgMTUJLy8gbS1zZXJpZXMgb25seQorfTsKKyNkZWZpbmUJUlRTSV9UcmlnX0FfT3V0cHV0X1JlZ2lzdGVyCTc5CisjZGVmaW5lCVJUU0lfVHJpZ19CX091dHB1dF9SZWdpc3Rlcgk4MAorZW51bSBSVFNJX1RyaWdfQl9PdXRwdXRfQml0cyB7CisJUlRTSV9TdWJfU2VsZWN0aW9uXzFfQml0ID0gMHg4MDAwCS8vIG5vdCBmb3IgbS1zZXJpZXMKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJUU0lfVHJpZ19PdXRwdXRfQml0cyh1bnNpZ25lZCBydHNpX2NoYW5uZWwsCisJdW5zaWduZWQgc291cmNlKQoreworCXJldHVybiAoc291cmNlICYgMHhmKSA8PCAoKHJ0c2lfY2hhbm5lbCAlIDQpICogNCk7Cit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX1RyaWdfT3V0cHV0X01hc2sodW5zaWduZWQgcnRzaV9jaGFubmVsKQoreworCXJldHVybiAweGYgPDwgKChydHNpX2NoYW5uZWwgJSA0KSAqIDQpOworfTsKKworLy8gaW52ZXJzZSB0byBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX1RyaWdfT3V0cHV0X1NvdXJjZSh1bnNpZ25lZCBydHNpX2NoYW5uZWwsCisJdW5zaWduZWQgYml0cykKK3sKKwlyZXR1cm4gKGJpdHMgPj4gKChydHNpX2NoYW5uZWwgJSA0KSAqIDQpKSAmIDB4ZjsKK307CisKKyNkZWZpbmUJUlRTSV9Cb2FyZF9SZWdpc3RlcgkJODEKKyNkZWZpbmUgV3JpdGVfU3Ryb2JlXzBfUmVnaXN0ZXIJCTgyCisjZGVmaW5lIFdyaXRlX1N0cm9iZV8xX1JlZ2lzdGVyCQk4MworI2RlZmluZSBXcml0ZV9TdHJvYmVfMl9SZWdpc3RlcgkJODQKKyNkZWZpbmUgV3JpdGVfU3Ryb2JlXzNfUmVnaXN0ZXIJCTg1CisKKyNkZWZpbmUgQU9fT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIJODYKKyNkZWZpbmUgQU9fRXh0ZXJuYWxfR2F0ZV9FbmFibGUJCQlfYml0MTUKKyNkZWZpbmUgQU9fRXh0ZXJuYWxfR2F0ZV9TZWxlY3QoeCkJCSgoKHgpJjB4MWYpPDwxMCkKKyNkZWZpbmUgQU9fTnVtYmVyX09mX0NoYW5uZWxzKHgpCQkoKCh4KSYweGYpPDw2KQorI2RlZmluZSBBT19VUERBVEUyX091dHB1dF9TZWxlY3QoeCkJCSgoKHgpJjB4Myk8PDQpCisjZGVmaW5lIEFPX0V4dGVybmFsX0dhdGVfUG9sYXJpdHkJCV9iaXQzCisjZGVmaW5lIEFPX1VQREFURTJfT3V0cHV0X1RvZ2dsZQkJX2JpdDIKK2VudW0gYW9fdXBkYXRlX291dHB1dF9zZWxlY3Rpb24geworCUFPX1VwZGF0ZV9PdXRwdXRfSGlnaF9aID0gMCwKKwlBT19VcGRhdGVfT3V0cHV0X0dyb3VuZCA9IDEsCisJQU9fVXBkYXRlX091dHB1dF9FbmFibGVfTG93ID0gMiwKKwlBT19VcGRhdGVfT3V0cHV0X0VuYWJsZV9IaWdoID0gMworfTsKK3N0YXRpYyB1bnNpZ25lZCBBT19VUERBVEVfT3V0cHV0X1NlbGVjdChlbnVtIGFvX3VwZGF0ZV9vdXRwdXRfc2VsZWN0aW9uCisJc2VsZWN0aW9uKQoreworCXJldHVybiBzZWxlY3Rpb24gJiAweDM7Cit9CisKKyNkZWZpbmUgQUlfTW9kZV8zX1JlZ2lzdGVyCQk4NworI2RlZmluZSBBSV9UcmlnZ2VyX0xlbmd0aAkJCV9iaXQxNQorI2RlZmluZSBBSV9EZWxheV9TVEFSVAkJCQlfYml0MTQKKyNkZWZpbmUgQUlfU29mdHdhcmVfR2F0ZQkJCV9iaXQxMworI2RlZmluZSBBSV9TSV9TcGVjaWFsX1RyaWdnZXJfRGVsYXkJCV9iaXQxMgorI2RlZmluZSBBSV9TSTJfU291cmNlX1NlbGVjdAkJCV9iaXQxMQorI2RlZmluZSBBSV9EZWxheWVkX1NUQVJUMgkJCV9iaXQxMAorI2RlZmluZSBBSV9EZWxheWVkX1NUQVJUMQkJCV9iaXQ5CisjZGVmaW5lIEFJX0V4dGVybmFsX0dhdGVfTW9kZQkJCV9iaXQ4CisjZGVmaW5lIEFJX0ZJRk9fTW9kZV9IRl90b19FCQkJKDM8PDYpCisjZGVmaW5lIEFJX0ZJRk9fTW9kZV9GCQkJCSgyPDw2KQorI2RlZmluZSBBSV9GSUZPX01vZGVfSEYJCQkJKDE8PDYpCisjZGVmaW5lIEFJX0ZJRk9fTW9kZV9ORQkJCQkoMDw8NikKKyNkZWZpbmUgQUlfRXh0ZXJuYWxfR2F0ZV9Qb2xhcml0eQkJX2JpdDUKKyNkZWZpbmUgQUlfRXh0ZXJuYWxfR2F0ZV9TZWxlY3QoYSkJCSgoYSkgJiAweDFmKQorCisjZGVmaW5lIEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcihhKQkoNjgrKGEpKQorI2RlZmluZSBHX0NvbW1hbmRfUmVnaXN0ZXIoYSkJCSg2KyhhKSkKKyNkZWZpbmUgR19IV19TYXZlX1JlZ2lzdGVyKGEpCQkoOCsoYSkqMikKKyNkZWZpbmUgR19IV19TYXZlX1JlZ2lzdGVyX0hpZ2goYSkJKDgrKGEpKjIpCisjZGVmaW5lIEdfSFdfU2F2ZV9SZWdpc3Rlcl9Mb3coYSkJKDkrKGEpKjIpCisjZGVmaW5lIEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKGEpCSgzNisoYSkpCisjZGVmaW5lIEdfTG9hZF9BX1JlZ2lzdGVyKGEpCQkoMjgrKGEpKjQpCisjZGVmaW5lIEdfTG9hZF9BX1JlZ2lzdGVyX0hpZ2goYSkJKDI4KyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQV9SZWdpc3Rlcl9Mb3coYSkJKDI5KyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQl9SZWdpc3RlcihhKQkJKDMwKyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQl9SZWdpc3Rlcl9IaWdoKGEpCSgzMCsoYSkqNCkKKyNkZWZpbmUgR19Mb2FkX0JfUmVnaXN0ZXJfTG93KGEpCSgzMSsoYSkqNCkKKyNkZWZpbmUgR19Nb2RlX1JlZ2lzdGVyKGEpCQkoMjYrKGEpKQorI2RlZmluZSBHX1NhdmVfUmVnaXN0ZXIoYSkJCSgxMisoYSkqMikKKyNkZWZpbmUgR19TYXZlX1JlZ2lzdGVyX0hpZ2goYSkJCSgxMisoYSkqMikKKyNkZWZpbmUgR19TYXZlX1JlZ2lzdGVyX0xvdyhhKQkJKDEzKyhhKSoyKQorI2RlZmluZSBHX1N0YXR1c19SZWdpc3RlcgkJNAorI2RlZmluZSBBbmFsb2dfVHJpZ2dlcl9FdGNfUmVnaXN0ZXIJNjEKKworLyogY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZSBHX0Rpc2FybV9Db3B5CQkJX2JpdDE1CS8qIHN0cm9iZSAqLworI2RlZmluZSBHX1NhdmVfVHJhY2VfQ29weQkJX2JpdDE0CisjZGVmaW5lIEdfQXJtX0NvcHkJCQlfYml0MTMJLyogc3Ryb2JlICovCisjZGVmaW5lIEdfQmFua19Td2l0Y2hfU3RhcnQJCV9iaXQxMAkvKiBzdHJvYmUgKi8KKyNkZWZpbmUgR19MaXR0bGVfQmlnX0VuZGlhbgkJX2JpdDkKKyNkZWZpbmUgR19TeW5jaHJvbml6ZWRfR2F0ZQkJX2JpdDgKKyNkZWZpbmUgR19Xcml0ZV9Td2l0Y2gJCQlfYml0NworI2RlZmluZSBHX1VwX0Rvd24oYSkJCQkoKChhKSYweDAzKTw8NSkKKyNkZWZpbmUgR19EaXNhcm0JCQlfYml0NAkvKiBzdHJvYmUgKi8KKyNkZWZpbmUgR19BbmFsb2dfVHJpZ2dlcl9SZXNldAkJX2JpdDMJLyogc3Ryb2JlICovCisjZGVmaW5lIEdfU2F2ZV9UcmFjZQkJCV9iaXQxCisjZGVmaW5lIEdfQXJtCQkJCV9iaXQwCS8qIHN0cm9iZSAqLworCisvKmNoYW5uZWwgYWdub3N0aWMgbmFtZXMgZm9yIHRoZSBjb21tYW5kIHJlZ2lzdGVyICNkZWZpbmVzICovCisjZGVmaW5lIEdfQmFua19Td2l0Y2hfRW5hYmxlCQlfYml0MTIKKyNkZWZpbmUgR19CYW5rX1N3aXRjaF9Nb2RlCQlfYml0MTEKKyNkZWZpbmUgR19Mb2FkCQkJCV9iaXQyCS8qIHN0cm9iZSAqLworCisvKiBpbnB1dCBzZWxlY3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR19HYXRlX1NlbGVjdChhKQkJKCgoYSkmMHgxZik8PDcpCisjZGVmaW5lIEdfU291cmNlX1NlbGVjdChhKQkJKCgoYSkmMHgxZik8PDIpCisjZGVmaW5lIEdfV3JpdGVfQWNrbm93bGVkZ2VzX0lycQlfYml0MQorI2RlZmluZSBHX1JlYWRfQWNrbm93bGVkZ2VzX0lycQkJX2JpdDAKKworLyogc2FtZSBpbnB1dCBzZWxlY3QgcmVnaXN0ZXIsIGJ1dCB3aXRoIGNoYW5uZWwgYWdub3N0aWMgbmFtZXMgKi8KKyNkZWZpbmUgR19Tb3VyY2VfUG9sYXJpdHkJCV9iaXQxNQorI2RlZmluZSBHX091dHB1dF9Qb2xhcml0eQkJX2JpdDE0CisjZGVmaW5lIEdfT1JfR2F0ZQkJCV9iaXQxMworI2RlZmluZSBHX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlCV9iaXQxMgorCisvKiBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lIEdfTG9hZGluZ19Pbl9UQwkJCV9iaXQxMgorI2RlZmluZSBHX091dHB1dF9Nb2RlKGEpCQkoKChhKSYweDAzKTw8OCkKKyNkZWZpbmUgR19UcmlnZ2VyX01vZGVfRm9yX0VkZ2VfR2F0ZShhKQkoKChhKSYweDAzKTw8MykKKyNkZWZpbmUgR19HYXRpbmdfTW9kZShhKQkJKCgoYSkmMHgwMyk8PDApCisKKy8qIHNhbWUgaW5wdXQgbW9kZSByZWdpc3RlciwgYnV0IHdpdGggY2hhbm5lbCBhZ25vc3RpYyBuYW1lcyAqLworI2RlZmluZSBHX0xvYWRfU291cmNlX1NlbGVjdAkJX2JpdDcKKyNkZWZpbmUgR19SZWxvYWRfU291cmNlX1N3aXRjaGluZwlfYml0MTUKKyNkZWZpbmUgR19Mb2FkaW5nX09uX0dhdGUJCV9iaXQxNAorI2RlZmluZSBHX0dhdGVfUG9sYXJpdHkgCQlfYml0MTMKKworI2RlZmluZSBHX0NvdW50aW5nX09uY2UoYSkJCSgoKGEpJjB4MDMpPDwxMCkKKyNkZWZpbmUgR19TdG9wX01vZGUoYSkJCQkoKChhKSYweDAzKTw8NSkKKyNkZWZpbmUgR19HYXRlX09uX0JvdGhfRWRnZXMJCV9iaXQyCisKKy8qIEdfU3RhdHVzX1JlZ2lzdGVyICovCisjZGVmaW5lIEcxX0dhdGVfRXJyb3JfU3QJCV9iaXQxNQorI2RlZmluZSBHMF9HYXRlX0Vycm9yX1N0CQlfYml0MTQKKyNkZWZpbmUgRzFfVENfRXJyb3JfU3QJCQlfYml0MTMKKyNkZWZpbmUgRzBfVENfRXJyb3JfU3QJCQlfYml0MTIKKyNkZWZpbmUgRzFfTm9fTG9hZF9CZXR3ZWVuX0dhdGVzX1N0CV9iaXQxMQorI2RlZmluZSBHMF9Ob19Mb2FkX0JldHdlZW5fR2F0ZXNfU3QJX2JpdDEwCisjZGVmaW5lIEcxX0FybWVkX1N0CQkJX2JpdDkKKyNkZWZpbmUgRzBfQXJtZWRfU3QJCQlfYml0OAorI2RlZmluZSBHMV9TdGFsZV9EYXRhX1N0CQlfYml0NworI2RlZmluZSBHMF9TdGFsZV9EYXRhX1N0CQlfYml0NgorI2RlZmluZSBHMV9OZXh0X0xvYWRfU291cmNlX1N0CQlfYml0NQorI2RlZmluZSBHMF9OZXh0X0xvYWRfU291cmNlX1N0CQlfYml0NAorI2RlZmluZSBHMV9Db3VudGluZ19TdAkJCV9iaXQzCisjZGVmaW5lIEcwX0NvdW50aW5nX1N0CQkJX2JpdDIKKyNkZWZpbmUgRzFfU2F2ZV9TdAkJCV9iaXQxCisjZGVmaW5lIEcwX1NhdmVfU3QJCQlfYml0MAorCisvKiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciB0aW1lciAqLworI2RlZmluZSBHX0F1dG9pbmNyZW1lbnQoYSkgICAgICAgICAgICAgICgoYSk8PDApCisKKy8qQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyKi8KKyNkZWZpbmUgQW5hbG9nX1RyaWdnZXJfTW9kZSh4KSAoKHgpICYgMHg3KQorI2RlZmluZSBBbmFsb2dfVHJpZ2dlcl9FbmFibGUgX2JpdDMKKyNkZWZpbmUgQW5hbG9nX1RyaWdnZXJfRHJpdmUgX2JpdDQKKyNkZWZpbmUgR1BGT18xX091dHB1dF9TZWxlY3QJCV9iaXQ3CisjZGVmaW5lIEdQRk9fMF9PdXRwdXRfU2VsZWN0KGEpCQkoKGEpPDwxMSkKKyNkZWZpbmUgR1BGT18wX091dHB1dF9FbmFibGUJCV9iaXQxNAorI2RlZmluZSBHUEZPXzFfT3V0cHV0X0VuYWJsZQkJX2JpdDE1CisKKy8qIEFkZGl0aW9uYWwgd2luZG93ZWQgcmVnaXN0ZXJzIHVuaXF1ZSB0byBFIHNlcmllcyAqLworCisvKiAxNiBiaXQgcmVnaXN0ZXJzIHNoYWRvd2VkIGZyb20gREFRLVNUQyAqLworI2RlZmluZSBXaW5kb3dfQWRkcmVzcwkJCTB4MDAKKyNkZWZpbmUgV2luZG93X0RhdGEJCQkweDAyCisKKyNkZWZpbmUgQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXIJODIKKyNkZWZpbmUgQURDX0ZJRk9fQ2xlYXIJCQk4MworI2RlZmluZSBEQUNfRklGT19DbGVhcgkJCTg0CisKKy8qIGkvbyBwb3J0IG9mZnNldHMgKi8KKworLyogOCBiaXQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFhYWF9TdGF0dXMJCQkweDAxCitlbnVtIFhYWF9TdGF0dXNfQml0cyB7CisJUFJPTU9VVCA9IDB4MSwKKwlBSV9GSUZPX0xPV0VSX05PVF9FTVBUWSA9IDB4OCwKK307CisjZGVmaW5lIFNlcmlhbF9Db21tYW5kCQkJMHgwZAorI2RlZmluZSBNaXNjX0NvbW1hbmQJCQkweDBmCisjZGVmaW5lIFBvcnRfQQkJCQkweDE5CisjZGVmaW5lIFBvcnRfQgkJCQkweDFiCisjZGVmaW5lIFBvcnRfQwkJCQkweDFkCisjZGVmaW5lIENvbmZpZ3VyYXRpb24JCQkweDFmCisjZGVmaW5lIFN0cm9iZXMJCQkJMHgwMQorI2RlZmluZSBDaGFubmVsX0FfTW9kZQkJCTB4MDMKKyNkZWZpbmUgQ2hhbm5lbF9CX01vZGUJCQkweDA1CisjZGVmaW5lIENoYW5uZWxfQ19Nb2RlCQkJMHgwNworI2RlZmluZSBBSV9BT19TZWxlY3QJCQkweDA5CitlbnVtIEFJX0FPX1NlbGVjdF9CaXRzIHsKKwlBSV9ETUFfU2VsZWN0X1NoaWZ0ID0gMCwKKwlBSV9ETUFfU2VsZWN0X01hc2sgPSAweGYsCisJQU9fRE1BX1NlbGVjdF9TaGlmdCA9IDQsCisJQU9fRE1BX1NlbGVjdF9NYXNrID0gMHhmIDw8IEFPX0RNQV9TZWxlY3RfU2hpZnQKK307CisjZGVmaW5lIEcwX0cxX1NlbGVjdAkJCTB4MGIKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfc3RjX2RtYV9jaGFubmVsX3NlbGVjdF9iaXRmaWVsZCh1bnNpZ25lZCBjaGFubmVsKQoreworCWlmIChjaGFubmVsIDwgNCkKKwkJcmV0dXJuIDEgPDwgY2hhbm5lbDsKKwlpZiAoY2hhbm5lbCA9PSA0KQorCQlyZXR1cm4gMHgzOworCWlmIChjaGFubmVsID09IDUpCisJCXJldHVybiAweDU7CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEdQQ1RfRE1BX1NlbGVjdF9CaXRzKHVuc2lnbmVkIGdwY3RfaW5kZXgsCisJdW5zaWduZWQgbWl0ZV9jaGFubmVsKQoreworCUJVR19PTihncGN0X2luZGV4ID4gMSk7CisJcmV0dXJuIG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQobWl0ZV9jaGFubmVsKSA8PCAoNCAqCisJCWdwY3RfaW5kZXgpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHUENUX0RNQV9TZWxlY3RfTWFzayh1bnNpZ25lZCBncGN0X2luZGV4KQoreworCUJVR19PTihncGN0X2luZGV4ID4gMSk7CisJcmV0dXJuIDB4ZiA8PCAoNCAqIGdwY3RfaW5kZXgpOworfQorCisvKiAxNiBiaXQgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQ29uZmlndXJhdGlvbl9NZW1vcnlfTG93CTB4MTAKK2VudW0gQ29uZmlndXJhdGlvbl9NZW1vcnlfTG93X0JpdHMgeworCUFJX0RJVEhFUiA9IDB4MjAwLAorCUFJX0xBU1RfQ0hBTk5FTCA9IDB4ODAwMCwKK307CisjZGVmaW5lIENvbmZpZ3VyYXRpb25fTWVtb3J5X0hpZ2gJMHgxMgorZW51bSBDb25maWd1cmF0aW9uX01lbW9yeV9IaWdoX0JpdHMgeworCUFJX0FDX0NPVVBMRSA9IDB4ODAwLAorCUFJX0RJRkZFUkVOVElBTCA9IDB4MTAwMCwKKwlBSV9DT01NT04gPSAweDIwMDAsCisJQUlfR1JPVU5EID0gMHgzMDAwLAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IEFJX0NPTkZJR19DSEFOTkVMKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbCAmIDB4M2YpOworfQorCisjZGVmaW5lIEFEQ19GSUZPX0RhdGFfUmVnaXN0ZXIJCTB4MWMKKworI2RlZmluZSBBT19Db25maWd1cmF0aW9uCQkweDE2CisjZGVmaW5lIEFPX0JpcG9sYXIJCV9iaXQwCisjZGVmaW5lIEFPX0RlZ2xpdGNoCQlfYml0MQorI2RlZmluZSBBT19FeHRfUmVmCQlfYml0MgorI2RlZmluZSBBT19Hcm91bmRfUmVmCQlfYml0MworI2RlZmluZSBBT19DaGFubmVsKHgpCQkoKHgpIDw8IDgpCisKKyNkZWZpbmUgREFDX0ZJRk9fRGF0YQkJCTB4MWUKKyNkZWZpbmUgREFDMF9EaXJlY3RfRGF0YQkJMHgxOAorI2RlZmluZSBEQUMxX0RpcmVjdF9EYXRhCQkweDFhCisKKy8qIDYxMXggcmVnaXN0ZXJzICh0aGVzZSBib2FyZHMgZGlmZmVyIGZyb20gdGhlIGUtc2VyaWVzKSAqLworCisjZGVmaW5lIE1hZ2ljXzYxMXgJCQkweDE5CS8qIHc4IChuZXcpICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfU2VsZWN0XzYxMXgJMHgxYQkvKiB3MTYgKG5ldykgKi8KKyNkZWZpbmUgQURDX0ZJRk9fRGF0YV82MTF4CQkweDFjCS8qIHIzMiAoaW5jb21wYXRpYmxlKSAqLworI2RlZmluZSBBSV9GSUZPX09mZnNldF9Mb2FkXzYxMXgJMHgwNQkvKiByOCAobmV3KSAqLworI2RlZmluZSBEQUNfRklGT19EYXRhXzYxMXgJCTB4MTQJLyogdzMyIChpbmNvbXBhdGlibGUpICovCisjZGVmaW5lIENhbF9HYWluX1NlbGVjdF82MTF4CQkweDA1CS8qIHc4IChuZXcpICovCisKKyNkZWZpbmUgQU9fV2luZG93X0FkZHJlc3NfNjExeAkJMHgxOAorI2RlZmluZSBBT19XaW5kb3dfRGF0YV82MTF4CQkweDFlCisKKy8qIDYxNDMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1hZ2ljXzYxNDMJCQkweDE5CS8qIHc4ICovCisjZGVmaW5lIEcwRzFfRE1BX1NlbGVjdF82MTQzCQkweDBCCS8qIHc4ICovCisjZGVmaW5lIFBpcGVsaW5lRGVsYXlfNjE0MwkJMHgxZgkvKiB3OCAqLworI2RlZmluZSBFT0NfU2V0XzYxNDMJCQkweDFECS8qIHc4ICovCisjZGVmaW5lIEFJRE1BX1NlbGVjdF82MTQzCQkweDA5CS8qIHc4ICovCisjZGVmaW5lIEFJRklGT19EYXRhXzYxNDMJCTB4OEMJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19GbGFnXzYxNDMJCTB4ODQJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19Db250cm9sXzYxNDMJCTB4ODgJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19TdGF0dXNfNjE0MwkJMHg4OAkvKiB3MzIgKi8KKyNkZWZpbmUgQUlGSUZPX0RNQVRocmVzaG9sZF82MTQzCTB4OTAJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19Xb3Jkc19BdmFpbGFibGVfNjE0MwkweDk0CS8qIHczMiAqLworCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0MwkweDQyCS8qIHcxNiAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9Mb3dUaW1lXzYxNDMJMHgyMAkvKiB3MTYgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fSGlnaFRpbWVfNjE0MwkweDIyCS8qIHcxNiAqLworI2RlZmluZSBSZWxheV9Db3VudGVyX0xvYWRfVmFsX182MTQzCTB4NEMJLyogdzMyICovCisjZGVmaW5lIFNpZ25hdHVyZV82MTQzCQkJMHg1MAkvKiB3MzIgKi8KKyNkZWZpbmUgUmVsZWFzZV9EYXRlXzYxNDMJCTB4NTQJLyogdzMyICovCisjZGVmaW5lIFJlbGVhc2VfT2xkZXN0X0RhdGVfNjE0MwkweDU4CS8qIHczMiAqLworCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0M19SZWxheU9uCTB4ODAwMAkvKiBDYWxpYnJhdGlvbiByZWxheSBzd2l0Y2ggT24gKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzX1JlbGF5T2ZmCTB4NDAwMAkvKiBDYWxpYnJhdGlvbiByZWxheSBzd2l0Y2ggT2ZmICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfR25kX0duZAkweDAwCS8qIE9mZnNldCBDYWxpYnJhdGlvbiAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsXzJ2NV9HbmQJMHgwMgkvKiAyLjVWIFJlZmVyZW5jZSAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsX1B3bV9HbmQJMHgwNQkvKiArLy0gNVYgU2VsZiBDYWwgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF8ydjVfUHdtCTB4MGEJLyogUFdNIENhbGlicmF0aW9uICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfUHdtX1B3bQkweDBkCS8qIENNUlIgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF9HbmRfUHdtCTB4MGUJLyogUFdNIENhbGlicmF0aW9uICovCisKKy8qIDY3MXgsIDYxMXggcmVnaXN0ZXJzICovCisKKy8qIDY3MXhpLCA2MTF4IHdpbmRvd2VkIGFvIHJlZ2lzdGVycyAqLworZW51bSB3aW5kb3dlZF9yZWdzXzY3eHhfNjF4eCB7CisJQU9fSW1tZWRpYXRlXzY3MXggPSAweDExLAkvKiBXIDE2ICovCisJQU9fVGltZWRfNjExeCA9IDB4MTAsCS8qIFcgMTYgKi8KKwlBT19GSUZPX09mZnNldF9Mb2FkXzYxMXggPSAweDEzLAkvKiBXMzIgKi8KKwlBT19MYXRlcl9TaW5nbGVfUG9pbnRfVXBkYXRlcyA9IDB4MTQsCS8qIFcgMTYgKi8KKwlBT19XYXZlZm9ybV9HZW5lcmF0aW9uXzYxMXggPSAweDE1LAkvKiBXIDE2ICovCisJQU9fTWlzY182MTF4ID0gMHgxNiwJLyogVyAxNiAqLworCUFPX0NhbGlicmF0aW9uX0NoYW5uZWxfU2VsZWN0XzY3eHggPSAweDE3LAkvKiBXIDE2ICovCisJQU9fQ29uZmlndXJhdGlvbl8yXzY3eHggPSAweDE4LAkvKiBXIDE2ICovCisJQ0FMX0FEQ19Db21tYW5kXzY3eHggPSAweDE5LAkvKiBXIDggKi8KKwlDQUxfQURDX1N0YXR1c182N3h4ID0gMHgxYSwJLyogUiA4ICovCisJQ0FMX0FEQ19EYXRhXzY3eHggPSAweDFiLAkvKiBSIDE2ICovCisJQ0FMX0FEQ19Db25maWdfRGF0YV9IaWdoX1dvcmRfNjd4eCA9IDB4MWMsCS8qIFJXIDE2ICovCisJQ0FMX0FEQ19Db25maWdfRGF0YV9Mb3dfV29yZF82N3h4ID0gMHgxZCwJLyogUlcgMTYgKi8KK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUN4X0RpcmVjdF9EYXRhXzY3MXgoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWw7Cit9CitlbnVtIEFPX01pc2NfNjExeF9CaXRzIHsKKwlDTEVBUl9XRyA9IDEsCit9OworZW51bSBjczU1MjlfY29uZmlndXJhdGlvbl9iaXRzIHsKKwlDU0NGR19DQUxfQ09OVFJPTF9NQVNLID0gMHg3LAorCUNTQ0ZHX1NFTEZfQ0FMX09GRlNFVCA9IDB4MSwKKwlDU0NGR19TRUxGX0NBTF9HQUlOID0gMHgyLAorCUNTQ0ZHX1NFTEZfQ0FMX09GRlNFVF9HQUlOID0gMHgzLAorCUNTQ0ZHX1NZU1RFTV9DQUxfT0ZGU0VUID0gMHg1LAorCUNTQ0ZHX1NZU1RFTV9DQUxfR0FJTiA9IDB4NiwKKwlDU0NGR19ET05FID0gMSA8PCAzLAorCUNTQ0ZHX1BPV0VSX1NBVkVfU0VMRUNUID0gMSA8PCA0LAorCUNTQ0ZHX1BPUlRfTU9ERSA9IDEgPDwgNSwKKwlDU0NGR19SRVNFVF9WQUxJRCA9IDEgPDwgNiwKKwlDU0NGR19SRVNFVCA9IDEgPDwgNywKKwlDU0NGR19VTklQT0xBUiA9IDEgPDwgMTIsCisJQ1NDRkdfV09SRF9SQVRFXzIxODBfQ1lDTEVTID0gMHgwIDw8IDEzLAorCUNTQ0ZHX1dPUkRfUkFURV8xMDkyX0NZQ0xFUyA9IDB4MSA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfNTMyX0NZQ0xFUyA9IDB4MiA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMzg4X0NZQ0xFUyA9IDB4MyA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMzI0X0NZQ0xFUyA9IDB4NCA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMTc0NDRfQ1lDTEVTID0gMHg1IDw8IDEzLAorCUNTQ0ZHX1dPUkRfUkFURV84NzI0X0NZQ0xFUyA9IDB4NiA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfNDM2NF9DWUNMRVMgPSAweDcgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFX01BU0sgPSAweDcgPDwgMTMsCisJQ1NDRkdfTE9XX1BPV0VSID0gMSA8PCAxNiwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBDUzU1MjlfQ09ORklHX0RPVVQoaW50IG91dHB1dCkKK3sKKwlyZXR1cm4gMSA8PCAoMTggKyBvdXRwdXQpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgQ1M1NTI5X0NPTkZJR19BT1VUKGludCBvdXRwdXQpCit7CisJcmV0dXJuIDEgPDwgKDIyICsgb3V0cHV0KTsKK30KK2VudW0gY3M1NTI5X2NvbW1hbmRfYml0cyB7CisJQ1NDTURfUE9XRVJfU0FWRSA9IDB4MSwKKwlDU0NNRF9SRUdJU1RFUl9TRUxFQ1RfTUFTSyA9IDB4ZSwKKwlDU0NNRF9PRkZTRVRfUkVHSVNURVIgPSAweDAsCisJQ1NDTURfR0FJTl9SRUdJU1RFUiA9IDB4MiwKKwlDU0NNRF9DT05GSUdfUkVHSVNURVIgPSAweDQsCisJQ1NDTURfUkVBRCA9IDB4MTAsCisJQ1NDTURfQ09OVElOVU9VU19DT05WRVJTSU9OUyA9IDB4MjAsCisJQ1NDTURfU0lOR0xFX0NPTlZFUlNJT04gPSAweDQwLAorCUNTQ01EX0NPTU1BTkQgPSAweDgwLAorfTsKK2VudW0gY3M1NTI5X3N0YXR1c19iaXRzIHsKKwlDU1NfQURDX0JVU1kgPSAweDEsCisJQ1NTX09TQ19ERVRFQ1QgPSAweDIsCS8qIGluZGljYXRlcyBhZGMgZXJyb3IgKi8KKwlDU1NfT1ZFUlJBTkdFID0gMHg0LAorfTsKKyNkZWZpbmUgU2VyRGFjTGQoeCkJCQkoMHgwODw8KHgpKQorCisvKgorCVRoaXMgaXMgc3R1ZmYgdW5pcXVlIHRvIHRoZSBOSSBFIHNlcmllcyBkcml2ZXJzLAorCWJ1dCBJIHRob3VnaHQgSSdkIHB1dCBpdCBoZXJlIGFueXdheS4KKyovCisKK2VudW0geyBhaV9nYWluXzE2ID0KKwkJMCwgYWlfZ2Fpbl84LCBhaV9nYWluXzE0LCBhaV9nYWluXzQsIGFpX2dhaW5fNjExeCwgYWlfZ2Fpbl82MjJ4LAorCQlhaV9nYWluXzYyOHgsIGFpX2dhaW5fNjE0MyB9OworZW51bSBjYWxkYWNfZW51bSB7IGNhbGRhY19ub25lID0gMCwgbWI4ODM0MSwgZGFjODgwMCwgZGFjODA0MywgYWQ4NTIyLAorCWFkODgwNCwgYWQ4ODQyLCBhZDg4MDRfZGVidWcKK307CitlbnVtIG5pX3JlZ190eXBlIHsKKwluaV9yZWdfbm9ybWFsID0gMHgwLAorCW5pX3JlZ182MTF4ID0gMHgxLAorCW5pX3JlZ182NzExID0gMHgyLAorCW5pX3JlZ182NzEzID0gMHg0LAorCW5pX3JlZ182N3h4X21hc2sgPSAweDYsCisJbmlfcmVnXzZ4eHhfbWFzayA9IDB4NywKKwluaV9yZWdfNjIyeCA9IDB4OCwKKwluaV9yZWdfNjI1eCA9IDB4MTAsCisJbmlfcmVnXzYyOHggPSAweDE4LAorCW5pX3JlZ19tX3Nlcmllc19tYXNrID0gMHgxOCwKKwluaV9yZWdfNjE0MyA9IDB4MjAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FvX2V4dDsKKworZW51bSBtX3Nlcmllc19yZWdpc3Rlcl9vZmZzZXRzIHsKKwlNX09mZnNldF9DRElPX0RNQV9TZWxlY3QgPSAweDcsCS8vIHdyaXRlCisJTV9PZmZzZXRfU0NYSV9TdGF0dXMgPSAweDcsCS8vIHJlYWQKKwlNX09mZnNldF9BSV9BT19TZWxlY3QgPSAweDksCS8vIHdyaXRlLCBzYW1lIG9mZnNldCBhcyBlLXNlcmllcworCU1fT2Zmc2V0X1NDWElfU2VyaWFsX0RhdGFfSW4gPSAweDksCS8vIHJlYWQKKwlNX09mZnNldF9HMF9HMV9TZWxlY3QgPSAweGIsCS8vIHdyaXRlLCBzYW1lIG9mZnNldCBhcyBlLXNlcmllcworCU1fT2Zmc2V0X01pc2NfQ29tbWFuZCA9IDB4ZiwKKwlNX09mZnNldF9TQ1hJX1NlcmlhbF9EYXRhX091dCA9IDB4MTEsCisJTV9PZmZzZXRfU0NYSV9Db250cm9sID0gMHgxMywKKwlNX09mZnNldF9TQ1hJX091dHB1dF9FbmFibGUgPSAweDE1LAorCU1fT2Zmc2V0X0FJX0ZJRk9fRGF0YSA9IDB4MWMsCisJTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfT3V0cHV0ID0gMHgyNCwJLy8gd3JpdGUKKwlNX09mZnNldF9TdGF0aWNfRGlnaXRhbF9JbnB1dCA9IDB4MjQsCS8vIHJlYWQKKwlNX09mZnNldF9ESU9fRGlyZWN0aW9uID0gMHgyOCwKKwlNX09mZnNldF9DYWxfUFdNID0gMHg0MCwKKwlNX09mZnNldF9BSV9Db25maWdfRklGT19EYXRhID0gMHg1ZSwKKwlNX09mZnNldF9JbnRlcnJ1cHRfQ19FbmFibGUgPSAweDg4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0ludGVycnVwdF9DX1N0YXR1cyA9IDB4ODgsCS8vIHJlYWQKKwlNX09mZnNldF9BbmFsb2dfVHJpZ2dlcl9Db250cm9sID0gMHg4YywKKwlNX09mZnNldF9BT19TZXJpYWxfSW50ZXJydXB0X0VuYWJsZSA9IDB4YTAsCisJTV9PZmZzZXRfQU9fU2VyaWFsX0ludGVycnVwdF9BY2sgPSAweGExLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1NlcmlhbF9JbnRlcnJ1cHRfU3RhdHVzID0gMHhhMSwJLy8gcmVhZAorCU1fT2Zmc2V0X0FPX0NhbGlicmF0aW9uID0gMHhhMywKKwlNX09mZnNldF9BT19GSUZPX0RhdGEgPSAweGE0LAorCU1fT2Zmc2V0X1BGSV9GaWx0ZXIgPSAweGIwLAorCU1fT2Zmc2V0X1JUU0lfRmlsdGVyID0gMHhiNCwKKwlNX09mZnNldF9TQ1hJX0xlZ2FjeV9Db21wYXRpYmlsaXR5ID0gMHhiYywKKwlNX09mZnNldF9JbnRlcnJ1cHRfQV9BY2sgPSAweDEwNCwJLy8gd3JpdGUKKwlNX09mZnNldF9BSV9TdGF0dXNfMSA9IDB4MTA0LAkvLyByZWFkCisJTV9PZmZzZXRfSW50ZXJydXB0X0JfQWNrID0gMHgxMDYsCS8vIHdyaXRlCisJTV9PZmZzZXRfQU9fU3RhdHVzXzEgPSAweDEwNiwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX0NvbW1hbmRfMiA9IDB4MTA4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cwMV9TdGF0dXMgPSAweDEwOCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FPX0NvbW1hbmRfMiA9IDB4MTBhLAorCU1fT2Zmc2V0X0FPX1N0YXR1c18yID0gMHgxMGMsCS8vIHJlYWQKKwlNX09mZnNldF9HMF9Db21tYW5kID0gMHgxMGMsCS8vIHdyaXRlCisJTV9PZmZzZXRfRzFfQ29tbWFuZCA9IDB4MTBlLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cwX0hXX1NhdmUgPSAweDExMCwKKwlNX09mZnNldF9HMF9IV19TYXZlX0hpZ2ggPSAweDExMCwKKwlNX09mZnNldF9BSV9Db21tYW5kXzEgPSAweDExMCwKKwlNX09mZnNldF9HMF9IV19TYXZlX0xvdyA9IDB4MTEyLAorCU1fT2Zmc2V0X0FPX0NvbW1hbmRfMSA9IDB4MTEyLAorCU1fT2Zmc2V0X0cxX0hXX1NhdmUgPSAweDExNCwKKwlNX09mZnNldF9HMV9IV19TYXZlX0hpZ2ggPSAweDExNCwKKwlNX09mZnNldF9HMV9IV19TYXZlX0xvdyA9IDB4MTE2LAorCU1fT2Zmc2V0X0FJX01vZGVfMSA9IDB4MTE4LAorCU1fT2Zmc2V0X0cwX1NhdmUgPSAweDExOCwKKwlNX09mZnNldF9HMF9TYXZlX0hpZ2ggPSAweDExOCwKKwlNX09mZnNldF9BSV9Nb2RlXzIgPSAweDExYSwKKwlNX09mZnNldF9HMF9TYXZlX0xvdyA9IDB4MTFhLAorCU1fT2Zmc2V0X0FJX1NJX0xvYWRfQSA9IDB4MTFjLAorCU1fT2Zmc2V0X0cxX1NhdmUgPSAweDExYywKKwlNX09mZnNldF9HMV9TYXZlX0hpZ2ggPSAweDExYywKKwlNX09mZnNldF9HMV9TYXZlX0xvdyA9IDB4MTFlLAorCU1fT2Zmc2V0X0FJX1NJX0xvYWRfQiA9IDB4MTIwLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1VJX1NhdmUgPSAweDEyMCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX1NDX0xvYWRfQSA9IDB4MTI0LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX0JDX1NhdmUgPSAweDEyNCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX1NDX0xvYWRfQiA9IDB4MTI4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1VDX1NhdmUgPSAweDEyOCwJLy9yZWFkCisJTV9PZmZzZXRfQUlfU0kyX0xvYWRfQSA9IDB4MTJjLAorCU1fT2Zmc2V0X0FJX1NJMl9Mb2FkX0IgPSAweDEzMCwKKwlNX09mZnNldF9HMF9Nb2RlID0gMHgxMzQsCisJTV9PZmZzZXRfRzFfTW9kZSA9IDB4MTM2LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0pvaW50X1N0YXR1c18xID0gMHgxMzYsCS8vIHJlYWQKKwlNX09mZnNldF9HMF9Mb2FkX0EgPSAweDEzOCwKKwlNX09mZnNldF9Kb2ludF9TdGF0dXNfMiA9IDB4MTNhLAorCU1fT2Zmc2V0X0cwX0xvYWRfQiA9IDB4MTNjLAorCU1fT2Zmc2V0X0cxX0xvYWRfQSA9IDB4MTQwLAorCU1fT2Zmc2V0X0cxX0xvYWRfQiA9IDB4MTQ0LAorCU1fT2Zmc2V0X0cwX0lucHV0X1NlbGVjdCA9IDB4MTQ4LAorCU1fT2Zmc2V0X0cxX0lucHV0X1NlbGVjdCA9IDB4MTRhLAorCU1fT2Zmc2V0X0FPX01vZGVfMSA9IDB4MTRjLAorCU1fT2Zmc2V0X0FPX01vZGVfMiA9IDB4MTRlLAorCU1fT2Zmc2V0X0FPX1VJX0xvYWRfQSA9IDB4MTUwLAorCU1fT2Zmc2V0X0FPX1VJX0xvYWRfQiA9IDB4MTU0LAorCU1fT2Zmc2V0X0FPX0JDX0xvYWRfQSA9IDB4MTU4LAorCU1fT2Zmc2V0X0FPX0JDX0xvYWRfQiA9IDB4MTVjLAorCU1fT2Zmc2V0X0FPX1VDX0xvYWRfQSA9IDB4MTYwLAorCU1fT2Zmc2V0X0FPX1VDX0xvYWRfQiA9IDB4MTY0LAorCU1fT2Zmc2V0X0Nsb2NrX2FuZF9GT1VUID0gMHgxNzAsCisJTV9PZmZzZXRfSU9fQmlkaXJlY3Rpb25fUGluID0gMHgxNzIsCisJTV9PZmZzZXRfUlRTSV9UcmlnX0RpcmVjdGlvbiA9IDB4MTc0LAorCU1fT2Zmc2V0X0ludGVycnVwdF9Db250cm9sID0gMHgxNzYsCisJTV9PZmZzZXRfQUlfT3V0cHV0X0NvbnRyb2wgPSAweDE3OCwKKwlNX09mZnNldF9BbmFsb2dfVHJpZ2dlcl9FdGMgPSAweDE3YSwKKwlNX09mZnNldF9BSV9TVEFSVF9TVE9QX1NlbGVjdCA9IDB4MTdjLAorCU1fT2Zmc2V0X0FJX1RyaWdnZXJfU2VsZWN0ID0gMHgxN2UsCisJTV9PZmZzZXRfQUlfU0lfU2F2ZSA9IDB4MTgwLAkvLyByZWFkCisJTV9PZmZzZXRfQUlfRElWX0xvYWRfQSA9IDB4MTgwLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FJX1NDX1NhdmUgPSAweDE4NCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FPX1N0YXJ0X1NlbGVjdCA9IDB4MTg0LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1RyaWdnZXJfU2VsZWN0ID0gMHgxODYsCisJTV9PZmZzZXRfQU9fTW9kZV8zID0gMHgxOGMsCisJTV9PZmZzZXRfRzBfQXV0b2luY3JlbWVudCA9IDB4MTg4LAorCU1fT2Zmc2V0X0cxX0F1dG9pbmNyZW1lbnQgPSAweDE4YSwKKwlNX09mZnNldF9Kb2ludF9SZXNldCA9IDB4MTkwLAorCU1fT2Zmc2V0X0ludGVycnVwdF9BX0VuYWJsZSA9IDB4MTkyLAorCU1fT2Zmc2V0X0ludGVycnVwdF9CX0VuYWJsZSA9IDB4MTk2LAorCU1fT2Zmc2V0X0FJX1BlcnNvbmFsID0gMHgxOWEsCisJTV9PZmZzZXRfQU9fUGVyc29uYWwgPSAweDE5YywKKwlNX09mZnNldF9SVFNJX1RyaWdfQV9PdXRwdXQgPSAweDE5ZSwKKwlNX09mZnNldF9SVFNJX1RyaWdfQl9PdXRwdXQgPSAweDFhMCwKKwlNX09mZnNldF9SVFNJX1NoYXJlZF9NVVggPSAweDFhMiwKKwlNX09mZnNldF9BT19PdXRwdXRfQ29udHJvbCA9IDB4MWFjLAorCU1fT2Zmc2V0X0FJX01vZGVfMyA9IDB4MWFlLAorCU1fT2Zmc2V0X0NvbmZpZ3VyYXRpb25fTWVtb3J5X0NsZWFyID0gMHgxYTQsCisJTV9PZmZzZXRfQUlfRklGT19DbGVhciA9IDB4MWE2LAorCU1fT2Zmc2V0X0FPX0ZJRk9fQ2xlYXIgPSAweDFhOCwKKwlNX09mZnNldF9HMF9Db3VudGluZ19Nb2RlID0gMHgxYjAsCisJTV9PZmZzZXRfRzFfQ291bnRpbmdfTW9kZSA9IDB4MWIyLAorCU1fT2Zmc2V0X0cwX1NlY29uZF9HYXRlID0gMHgxYjQsCisJTV9PZmZzZXRfRzFfU2Vjb25kX0dhdGUgPSAweDFiNiwKKwlNX09mZnNldF9HMF9ETUFfQ29uZmlnID0gMHgxYjgsCS8vIHdyaXRlCisJTV9PZmZzZXRfRzBfRE1BX1N0YXR1cyA9IDB4MWI4LAkvLyByZWFkCisJTV9PZmZzZXRfRzFfRE1BX0NvbmZpZyA9IDB4MWJhLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cxX0RNQV9TdGF0dXMgPSAweDFiYSwJLy8gcmVhZAorCU1fT2Zmc2V0X0cwX01TZXJpZXNfQUJaID0gMHgxYzAsCisJTV9PZmZzZXRfRzFfTVNlcmllc19BQlogPSAweDFjMiwKKwlNX09mZnNldF9DbG9ja19hbmRfRm91dDIgPSAweDFjNCwKKwlNX09mZnNldF9QTExfQ29udHJvbCA9IDB4MWM2LAorCU1fT2Zmc2V0X1BMTF9TdGF0dXMgPSAweDFjOCwKKwlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF8xID0gMHgxZDAsCisJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfMiA9IDB4MWQyLAorCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzMgPSAweDFkNCwKKwlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF80ID0gMHgxZDYsCisJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfNSA9IDB4MWQ4LAorCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzYgPSAweDFkYSwKKwlNX09mZnNldF9QRklfREkgPSAweDFkYywKKwlNX09mZnNldF9QRklfRE8gPSAweDFkZSwKKwlNX09mZnNldF9BSV9Db25maWdfRklGT19CeXBhc3MgPSAweDIxOCwKKwlNX09mZnNldF9TQ1hJX0RJT19FbmFibGUgPSAweDIxYywKKwlNX09mZnNldF9DRElfRklGT19EYXRhID0gMHgyMjAsCS8vIHJlYWQKKwlNX09mZnNldF9DRE9fRklGT19EYXRhID0gMHgyMjAsCS8vIHdyaXRlCisJTV9PZmZzZXRfQ0RJT19TdGF0dXMgPSAweDIyNCwJLy8gcmVhZAorCU1fT2Zmc2V0X0NESU9fQ29tbWFuZCA9IDB4MjI0LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0NESV9Nb2RlID0gMHgyMjgsCisJTV9PZmZzZXRfQ0RPX01vZGUgPSAweDIyYywKKwlNX09mZnNldF9DRElfTWFza19FbmFibGUgPSAweDIzMCwKKwlNX09mZnNldF9DRE9fTWFza19FbmFibGUgPSAweDIzNCwKK307CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9BT19XYXZlZm9ybV9PcmRlcihpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHhjMiArIDB4NCAqIGNoYW5uZWw7Cit9Oworc3RhdGljIGlubGluZSBpbnQgTV9PZmZzZXRfQU9fQ29uZmlnX0JhbmsoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4YzMgKyAweDQgKiBjaGFubmVsOworfTsKK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X0RBQ19EaXJlY3RfRGF0YShpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHhjMCArIDB4NCAqIGNoYW5uZWw7Cit9CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9HZW5fUFdNKGludCBjaGFubmVsKQoreworCXJldHVybiAweDQ0ICsgMHgyICogY2hhbm5lbDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X1N0YXRpY19BSV9Db250cm9sKGludCBpKQoreworCWludCBvZmZzZXRbXSA9IHsKKwkJMHg2NCwKKwkJMHgyNjEsCisJCTB4MjYyLAorCQkweDI2MywKKwl9OworCWlmICgoKHVuc2lnbmVkKWkpID49IHNpemVvZihvZmZzZXQpIC8gc2l6ZW9mKG9mZnNldFswXSkpIHsKKwkJcnRfcHJpbnRrKCIlczogaW52YWxpZCBjaGFubmVsPSVpXG4iLCBfX0ZVTkNUSU9OX18sIGkpOworCQlyZXR1cm4gb2Zmc2V0WzBdOworCX0KKwlyZXR1cm4gb2Zmc2V0W2ldOworfTsKK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbihpbnQgY2hhbm5lbCkKK3sKKwlpbnQgb2Zmc2V0W10gPSB7CisJCTB4MjY0LAorCQkweDI2NSwKKwkJMHgyNjYsCisJCTB4MjY3CisJfTsKKwlpZiAoKCh1bnNpZ25lZCljaGFubmVsKSA+PSBzaXplb2Yob2Zmc2V0KSAvIHNpemVvZihvZmZzZXRbMF0pKSB7CisJCXJ0X3ByaW50aygiJXM6IGludmFsaWQgY2hhbm5lbD0laVxuIiwgX19GVU5DVElPTl9fLCBjaGFubmVsKTsKKwkJcmV0dXJuIG9mZnNldFswXTsKKwl9CisJcmV0dXJuIG9mZnNldFtjaGFubmVsXTsKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJaWYgKG4gPCAxIHx8IG4gPiBOVU1fUEZJX09VVFBVVF9TRUxFQ1RfUkVHUykgeworCQlydF9wcmludGsoIiVzOiBpbnZhbGlkIHBmaSBvdXRwdXQgc2VsZWN0IHJlZ2lzdGVyPSVpXG4iLAorCQkJX19GVU5DVElPTl9fLCBuKTsKKwkJcmV0dXJuIE1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzE7CisJfQorCXJldHVybiBNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF8xICsgKG4gLSAxKSAqIDI7Cit9CisKK2VudW0gTVNlcmllc19BSV9Db25maWdfRklGT19EYXRhX0JpdHMgeworCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9NYXNrID0gMHg3IDw8IDYsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0NhbGlicmF0aW9uX0JpdHMgPSAweDAsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0RpZmZlcmVudGlhbF9CaXRzID0gMHgxIDw8IDYsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0NvbW1vbl9SZWZfQml0cyA9IDB4MiA8PCA2LAorCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9Hcm91bmRfUmVmX0JpdHMgPSAweDMgPDwgNiwKKwlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfQXV4X0JpdHMgPSAweDUgPDwgNiwKKwlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfR2hvc3RfQml0cyA9IDB4NyA8PCA2LAorCU1TZXJpZXNfQUlfQ29uZmlnX1BvbGFyaXR5X0JpdCA9IDB4MTAwMCwJLy8gMCBmb3IgMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKwlNU2VyaWVzX0FJX0NvbmZpZ19EaXRoZXJfQml0ID0gMHgyMDAwLAorCU1TZXJpZXNfQUlfQ29uZmlnX0xhc3RfQ2hhbm5lbF9CaXQgPSAweDQwMDAsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX0JpdHModW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAmIDB4ZjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9Db25maWdfQmFua19CaXRzKGVudW0gbmlfcmVnX3R5cGUgcmVnX3R5cGUsCisJdW5zaWduZWQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRzID0gY2hhbm5lbCAmIDB4MzA7CisJaWYgKHJlZ190eXBlID09IG5pX3JlZ182MjJ4KSB7CisJCWlmIChjaGFubmVsICYgMHg0MCkKKwkJCWJpdHMgfD0gMHg0MDA7CisJfQorCXJldHVybiBiaXRzOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0FJX0NvbmZpZ19HYWluX0JpdHModW5zaWduZWQgcmFuZ2UpCit7CisJcmV0dXJuIChyYW5nZSAmIDB4NykgPDwgOTsKK30KKworZW51bSBNU2VyaWVzX0Nsb2NrX2FuZF9Gb3V0Ml9CaXRzIHsKKwlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1JUU0kwX0JpdHMgPSAweGIsCisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9TdGFyX1RyaWdnZXJfQml0cyA9IDB4MTQsCisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJN19CaXRzID0gMHgxYiwKKwlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1BYSV9DbG9jazEwID0gMHgxZCwKKwlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X01hc2sgPSAweDFmLAorCU1TZXJpZXNfVGltZWJhc2UxX1NlbGVjdF9CaXQgPSAweDIwLAkvLyB1c2UgUExMIGZvciB0aW1lYmFzZSAxCisJTVNlcmllc19UaW1lYmFzZTNfU2VsZWN0X0JpdCA9IDB4NDAsCS8vIHVzZSBQTEwgZm9yIHRpbWViYXNlIDMKKwkvKiB1c2UgMTBNSHogaW5zdGVhZCBvZiAyME1IeiBmb3IgUlRTSSBjbG9jayBmcmVxdWVuY3kuICBBcHBlYXJzCisJICAgdG8gaGF2ZSBubyBlZmZlY3QsIGF0IGxlYXN0IG9uIHB4aS02MjgxLCB3aGljaCBhbHdheXMgdXNlcworCSAgIDIwTUh6IHJ0c2kgY2xvY2sgZnJlcXVlbmN5ICovCisJTVNlcmllc19SVFNJXzEwTUh6X0JpdCA9IDB4ODAKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfUlRTSV9CaXRzKHVuc2lnbmVkCisJUlRTSV9jaGFubmVsKQoreworCWlmIChSVFNJX2NoYW5uZWwgPiA3KSB7CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgaW52YWxpZCBSVFNJX2NoYW5uZWw9JWlcbiIsIF9fRlVOQ1RJT05fXywKKwkJCVJUU0lfY2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoUlRTSV9jaGFubmVsID09IDcpCisJCXJldHVybiBNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1JUU0k3X0JpdHM7CisJZWxzZQorCQlyZXR1cm4gTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJMF9CaXRzICsgUlRTSV9jaGFubmVsOworfQorCitlbnVtIE1TZXJpZXNfUExMX0NvbnRyb2xfQml0cyB7CisJTVNlcmllc19QTExfRW5hYmxlX0JpdCA9IDB4MTAwMCwKKwlNU2VyaWVzX1BMTF9WQ09fTW9kZV8yMDBfMzI1TUh6X0JpdHMgPSAweDAsCisJTVNlcmllc19QTExfVkNPX01vZGVfMTc1XzIyNU1Iel9CaXRzID0gMHgyMDAwLAorCU1TZXJpZXNfUExMX1ZDT19Nb2RlXzEwMF8yMjVNSHpfQml0cyA9IDB4NDAwMCwKKwlNU2VyaWVzX1BMTF9WQ09fTW9kZV83NV8xNTBNSHpfQml0cyA9IDB4NjAwMCwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUExMX0Rpdmlzb3JfQml0cyh1bnNpZ25lZCBkaXZpc29yKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfZGl2aXNvciA9IDB4MTA7CisJaWYgKGRpdmlzb3IgPCAxIHx8IGRpdmlzb3IgPiBtYXhfZGl2aXNvcikgeworCQlydF9wcmludGsoIiVzOiBidWcsIGludmFsaWQgZGl2aXNvcj0laVxuIiwgX19GVU5DVElPTl9fLAorCQkJZGl2aXNvcik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gKGRpdmlzb3IgJiAweGYpIDw8IDg7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUExMX011bHRpcGxpZXJfQml0cyh1bnNpZ25lZCBtdWx0aXBsaWVyKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfbXVsdGlwbGllciA9IDB4MTAwOworCWlmIChtdWx0aXBsaWVyIDwgMSB8fCBtdWx0aXBsaWVyID4gbWF4X211bHRpcGxpZXIpIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBpbnZhbGlkIG11bHRpcGxpZXI9JWlcbiIsIF9fRlVOQ1RJT05fXywKKwkJCW11bHRpcGxpZXIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIG11bHRpcGxpZXIgJiAweGZmOworfQorCitlbnVtIE1TZXJpZXNfUExMX1N0YXR1cyB7CisJTVNlcmllc19QTExfTG9ja2VkX0JpdCA9IDB4MQorfTsKKworZW51bSBNU2VyaWVzX0FJX0NvbmZpZ19GSUZPX0J5cGFzc19CaXRzIHsKKwlNU2VyaWVzX0FJX0J5cGFzc19DaGFubmVsX01hc2sgPSAweDcsCisJTVNlcmllc19BSV9CeXBhc3NfQmFua19NYXNrID0gMHg3OCwKKwlNU2VyaWVzX0FJX0J5cGFzc19DYWxfU2VsX1Bvc19NYXNrID0gMHgzODAsCisJTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9OZWdfTWFzayA9IDB4MWMwMCwKKwlNU2VyaWVzX0FJX0J5cGFzc19Nb2RlX011eF9NYXNrID0gMHg2MDAwLAorCU1TZXJpZXNfQU9fQnlwYXNzX0FPX0NhbF9TZWxfTWFzayA9IDB4MzgwMDAsCisJTVNlcmllc19BSV9CeXBhc3NfR2Fpbl9NYXNrID0gMHgxYzAwMDAsCisJTVNlcmllc19BSV9CeXBhc3NfRGl0aGVyX0JpdCA9IDB4MjAwMDAwLAorCU1TZXJpZXNfQUlfQnlwYXNzX1BvbGFyaXR5X0JpdCA9IDB4NDAwMDAwLAkvLyAwIGZvciAyJ3MgY29tcGxlbWVudCBlbmNvZGluZworCU1TZXJpZXNfQUlfQnlwYXNzX0NvbmZpZ19GSUZPX0JpdCA9IDB4ODAwMDAwMDAKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX0JpdHMoaW50CisJY2FsaWJyYXRpb25fc291cmNlKQoreworCXJldHVybiAoY2FsaWJyYXRpb25fc291cmNlIDw8IDcpICYgTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzazsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9OZWdfQml0cyhpbnQKKwljYWxpYnJhdGlvbl9zb3VyY2UpCit7CisJcmV0dXJuIChjYWxpYnJhdGlvbl9zb3VyY2UgPDwgMTApICYgTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzazsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9CeXBhc3NfR2Fpbl9CaXRzKGludCBnYWluKQoreworCXJldHVybiAoZ2FpbiA8PCAxOCkgJiBNU2VyaWVzX0FJX0J5cGFzc19HYWluX01hc2s7Cit9CisKK2VudW0gTVNlcmllc19BT19Db25maWdfQmFua19CaXRzIHsKKwlNU2VyaWVzX0FPX0RBQ19PZmZzZXRfU2VsZWN0X01hc2sgPSAweDcsCisJTVNlcmllc19BT19EQUNfT2Zmc2V0XzBWX0JpdHMgPSAweDAsCisJTVNlcmllc19BT19EQUNfT2Zmc2V0XzVWX0JpdHMgPSAweDEsCisJTVNlcmllc19BT19EQUNfUmVmZXJlbmNlX01hc2sgPSAweDM4LAorCU1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV8xMFZfSW50ZXJuYWxfQml0cyA9IDB4MCwKKwlNU2VyaWVzX0FPX0RBQ19SZWZlcmVuY2VfNVZfSW50ZXJuYWxfQml0cyA9IDB4OCwKKwlNU2VyaWVzX0FPX1VwZGF0ZV9UaW1lZF9CaXQgPSAweDQwLAorCU1TZXJpZXNfQU9fQmlwb2xhcl9CaXQgPSAweDgwCS8vIHR1cm5zIG9uIDIncyBjb21wbGVtZW50IGVuY29kaW5nCit9OworCitlbnVtIE1TZXJpZXNfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uX0JpdHMgeworCU1TZXJpZXNfQXR0ZW51YXRlX3g1X0JpdCA9IDB4MQorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0NhbF9QV01fSGlnaF9UaW1lX0JpdHModW5zaWduZWQgY291bnQpCit7CisJcmV0dXJuIChjb3VudCA8PCAxNikgJiAweGZmZmYwMDAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQ2FsX1BXTV9Mb3dfVGltZV9CaXRzKHVuc2lnbmVkIGNvdW50KQoreworCXJldHVybiBjb3VudCAmIDB4ZmZmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X01hc2sodW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgxZiA8PCAoY2hhbm5lbCAlIDMpICogNTsKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfQml0cyh1bnNpZ25lZCBjaGFubmVsLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwlyZXR1cm4gKHNvdXJjZSAmIDB4MWYpIDw8ICgoY2hhbm5lbCAlIDMpICogNSk7Cit9OworCisvLyBpbnZlcnNlIHRvIE1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfQml0cworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X1NvdXJjZSh1bnNpZ25lZCBjaGFubmVsLAorCXVuc2lnbmVkIGJpdHMpCit7CisJcmV0dXJuIChiaXRzID4+ICgoY2hhbm5lbCAlIDMpICogNSkpICYgMHgxZjsKK307CisKK2VudW0gTVNlcmllc19HaV9ETUFfQ29uZmlnX0JpdHMgeworCUdpX0RNQV9CYW5rU1dfRXJyb3JfQml0ID0gMHgxMCwKKwlHaV9ETUFfUmVzZXRfQml0ID0gMHg4LAorCUdpX0RNQV9JbnRfRW5hYmxlX0JpdCA9IDB4NCwKKwlHaV9ETUFfV3JpdGVfQml0ID0gMHgyLAorCUdpX0RNQV9FbmFibGVfQml0ID0gMHgxLAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X01hc2sodW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgzIDw8IChjaGFubmVsICogMik7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUEZJX0ZpbHRlcl9TZWxlY3RfQml0cyh1bnNpZ25lZCBjaGFubmVsLAorCXVuc2lnbmVkIGZpbHRlcikKK3sKKwlyZXR1cm4gKGZpbHRlciA8PCAoY2hhbm5lbCAqCisJCQkyKSkgJiBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X01hc2soY2hhbm5lbCk7Cit9CisKK2VudW0gQ0RJT19ETUFfU2VsZWN0X0JpdHMgeworCUNESV9ETUFfU2VsZWN0X1NoaWZ0ID0gMCwKKwlDRElfRE1BX1NlbGVjdF9NYXNrID0gMHhmLAorCUNET19ETUFfU2VsZWN0X1NoaWZ0ID0gNCwKKwlDRE9fRE1BX1NlbGVjdF9NYXNrID0gMHhmIDw8IENET19ETUFfU2VsZWN0X1NoaWZ0Cit9OworCitlbnVtIENESU9fU3RhdHVzX0JpdHMgeworCUNET19GSUZPX0VtcHR5X0JpdCA9IDB4MSwKKwlDRE9fRklGT19GdWxsX0JpdCA9IDB4MiwKKwlDRE9fRklGT19SZXF1ZXN0X0JpdCA9IDB4NCwKKwlDRE9fT3ZlcnJ1bl9CaXQgPSAweDgsCisJQ0RPX1VuZGVyZmxvd19CaXQgPSAweDEwLAorCUNESV9GSUZPX0VtcHR5X0JpdCA9IDB4MTAwMDAsCisJQ0RJX0ZJRk9fRnVsbF9CaXQgPSAweDIwMDAwLAorCUNESV9GSUZPX1JlcXVlc3RfQml0ID0gMHg0MDAwMCwKKwlDRElfT3ZlcnJ1bl9CaXQgPSAweDgwMDAwLAorCUNESV9PdmVyZmxvd19CaXQgPSAweDEwMDAwMAorfTsKKworZW51bSBDRElPX0NvbW1hbmRfQml0cyB7CisJQ0RPX0Rpc2FybV9CaXQgPSAweDEsCisJQ0RPX0FybV9CaXQgPSAweDIsCisJQ0RJX0Rpc2FybV9CaXQgPSAweDQsCisJQ0RJX0FybV9CaXQgPSAweDgsCisJQ0RPX1Jlc2V0X0JpdCA9IDB4MTAsCisJQ0RJX1Jlc2V0X0JpdCA9IDB4MjAsCisJQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCA9IDB4NDAsCisJQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0ID0gMHg4MCwKKwlDRElfRXJyb3JfSW50ZXJydXB0X0VuYWJsZV9TZXRfQml0ID0gMHgxMDAsCisJQ0RJX0Vycm9yX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0ID0gMHgyMDAsCisJQ0RPX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQgPSAweDQwMCwKKwlDRE9fRklGT19SZXF1ZXN0X0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0ID0gMHg4MDAsCisJQ0RJX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQgPSAweDEwMDAsCisJQ0RJX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4MjAwMCwKKwlDRE9fRXJyb3JfSW50ZXJydXB0X0NvbmZpcm1fQml0ID0gMHg0MDAwLAorCUNESV9FcnJvcl9JbnRlcnJ1cHRfQ29uZmlybV9CaXQgPSAweDgwMDAsCisJQ0RPX0VtcHR5X0ZJRk9fSW50ZXJydXB0X0VuYWJsZV9TZXRfQml0ID0gMHgxMDAwMCwKKwlDRE9fRW1wdHlfRklGT19JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4MjAwMDAsCisJQ0RPX1NXX1VwZGF0ZV9CaXQgPSAweDgwMDAwLAorCUNESV9TV19VcGRhdGVfQml0ID0gMHgxMDAwMDAKK307CisKK2VudW0gQ0RJX01vZGVfQml0cyB7CisJQ0RJX1NhbXBsZV9Tb3VyY2VfU2VsZWN0X01hc2sgPSAweDNmLAorCUNESV9IYWx0X09uX0Vycm9yX0JpdCA9IDB4MjAwLAorCUNESV9Qb2xhcml0eV9CaXQgPSAweDQwMCwJLy8gc2FtcGxlIGNsb2NrIG9uIGZhbGxpbmcgZWRnZQorCUNESV9GSUZPX01vZGVfQml0ID0gMHg4MDAsCS8vIHNldCBmb3IgaGFsZiBmdWxsIG1vZGUsIGNsZWFyIGZvciBub3QgZW1wdHkgbW9kZQorCUNESV9EYXRhX0xhbmVfTWFzayA9IDB4MzAwMCwJLy8gZGF0YSBsYW5lcyBzcGVjaWZ5IHdoaWNoIGRpbyBjaGFubmVscyBtYXAgdG8gYnl0ZSBvciB3b3JkIGFjY2Vzc2VzIHRvIHRoZSBkaW8gZmlmb3MKKwlDRElfRGF0YV9MYW5lXzBfMTVfQml0cyA9IDB4MCwKKwlDRElfRGF0YV9MYW5lXzE2XzMxX0JpdHMgPSAweDEwMDAsCisJQ0RJX0RhdGFfTGFuZV8wXzdfQml0cyA9IDB4MCwKKwlDRElfRGF0YV9MYW5lXzhfMTVfQml0cyA9IDB4MTAwMCwKKwlDRElfRGF0YV9MYW5lXzE2XzIzX0JpdHMgPSAweDIwMDAsCisJQ0RJX0RhdGFfTGFuZV8yNF8zMV9CaXRzID0gMHgzMDAwCit9OworCitlbnVtIENET19Nb2RlX0JpdHMgeworCUNET19TYW1wbGVfU291cmNlX1NlbGVjdF9NYXNrID0gMHgzZiwKKwlDRE9fUmV0cmFuc21pdF9CaXQgPSAweDEwMCwKKwlDRE9fSGFsdF9Pbl9FcnJvcl9CaXQgPSAweDIwMCwKKwlDRE9fUG9sYXJpdHlfQml0ID0gMHg0MDAsCS8vIHNhbXBsZSBjbG9jayBvbiBmYWxsaW5nIGVkZ2UKKwlDRE9fRklGT19Nb2RlX0JpdCA9IDB4ODAwLAkvLyBzZXQgZm9yIGhhbGYgZnVsbCBtb2RlLCBjbGVhciBmb3Igbm90IGZ1bGwgbW9kZQorCUNET19EYXRhX0xhbmVfTWFzayA9IDB4MzAwMCwJLy8gZGF0YSBsYW5lcyBzcGVjaWZ5IHdoaWNoIGRpbyBjaGFubmVscyBtYXAgdG8gYnl0ZSBvciB3b3JkIGFjY2Vzc2VzIHRvIHRoZSBkaW8gZmlmb3MKKwlDRE9fRGF0YV9MYW5lXzBfMTVfQml0cyA9IDB4MCwKKwlDRE9fRGF0YV9MYW5lXzE2XzMxX0JpdHMgPSAweDEwMDAsCisJQ0RPX0RhdGFfTGFuZV8wXzdfQml0cyA9IDB4MCwKKwlDRE9fRGF0YV9MYW5lXzhfMTVfQml0cyA9IDB4MTAwMCwKKwlDRE9fRGF0YV9MYW5lXzE2XzIzX0JpdHMgPSAweDIwMDAsCisJQ0RPX0RhdGFfTGFuZV8yNF8zMV9CaXRzID0gMHgzMDAwCit9OworCitlbnVtIEludGVycnVwdF9DX0VuYWJsZV9CaXRzIHsKKwlJbnRlcnJ1cHRfR3JvdXBfQ19FbmFibGVfQml0ID0gMHgxCit9OworCitlbnVtIEludGVycnVwdF9DX1N0YXR1c19CaXRzIHsKKwlJbnRlcnJ1cHRfR3JvdXBfQ19TdGF0dXNfQml0ID0gMHgxCit9OworCisjZGVmaW5lIE1fU0VSSUVTX0VFUFJPTV9TSVpFIDEwMjQKKwordHlwZWRlZiBzdHJ1Y3QgbmlfYm9hcmRfc3RydWN0IHsKKwlpbnQgZGV2aWNlX2lkOworCWludCBpc2FwbnBfaWQ7CisJY2hhciAqbmFtZTsKKworCWludCBuX2FkY2hhbjsKKwlpbnQgYWRiaXRzOworCisJaW50IGFpX2ZpZm9fZGVwdGg7CisJdW5zaWduZWQgaW50IGFsd2F5c2RpdGhlcjoxOworCWludCBnYWlubGt1cDsKKwlpbnQgYWlfc3BlZWQ7CisKKwlpbnQgbl9hb2NoYW47CisJaW50IGFvYml0czsKKwlpbnQgYW9fZmlmb19kZXB0aDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdGFibGU7CisJdW5zaWduZWQgYW9fc3BlZWQ7CisKKwl1bnNpZ25lZCBudW1fcDBfZGlvX2NoYW5uZWxzOworCisJaW50IHJlZ190eXBlOworCXVuc2lnbmVkIGludCBhb191bmlwb2xhcjoxOworCXVuc2lnbmVkIGludCBoYXNfODI1NToxOworCXVuc2lnbmVkIGludCBoYXNfYW5hbG9nX3RyaWc6MTsKKworCWVudW0gY2FsZGFjX2VudW0gY2FsZGFjWzNdOworfSBuaV9ib2FyZDsKKworI2RlZmluZSBuX25pX2JvYXJkcyAgKHNpemVvZihuaV9ib2FyZHMpL3NpemVvZihuaV9ib2FyZCkpCisKKyNkZWZpbmUgYm9hcmR0eXBlICgqKG5pX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKyNkZWZpbmUgTUFYX05fQU9fQ0hBTiA4CisjZGVmaW5lIE5VTV9HUENUIDIKKworI2RlZmluZSBOSV9QUklWQVRFX0NPTU1PTgkJCQkJXAorCXVpbnQxNl90ICgqc3RjX3JlYWR3KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgcmVnaXN0ZXIpOwlcCisJdWludDMyX3QgKCpzdGNfcmVhZGwpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCByZWdpc3Rlcik7CVwKKwl2b2lkICgqc3RjX3dyaXRldykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgdmFsdWUsIGludCByZWdpc3Rlcik7CVwKKwl2b2lkICgqc3RjX3dyaXRlbCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsdWUsIGludCByZWdpc3Rlcik7CVwKKwlcCisJdW5zaWduZWQgc2hvcnQgZGlvX291dHB1dDsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGRpb19jb250cm9sOwkJCQlcCisJaW50IGFvMHAsYW8xcDsJCQkJCQlcCisJaW50IGxhc3RjaGFuOwkJCQkJCVwKKwlpbnQgbGFzdF9kbzsJCQkJCQlcCisJaW50IHJ0X2lycTsJCQkJCQlcCisJaW50IGlycW1hc2s7CQkJCQkJXAorCWludCBhaW1vZGU7CQkJCQkJXAorCWludCBhaV9jb250aW51b3VzOwkJCQkJXAorCWludCBibG9ja3NpemU7CQkJCQkJXAorCWludCBuX2xlZnQ7CQkJCQkJXAorCXVuc2lnbmVkIGludCBhaV9jYWxpYl9zb3VyY2U7CQkJCVwKKwl1bnNpZ25lZCBpbnQgYWlfY2FsaWJfc291cmNlX2VuYWJsZWQ7CQkJXAorCXNwaW5sb2NrX3Qgd2luZG93X2xvY2s7IFwKKwlzcGlubG9ja190IHNvZnRfcmVnX2NvcHlfbG9jazsgXAorCXNwaW5sb2NrX3QgbWl0ZV9jaGFubmVsX2xvY2s7IFwKKwkJCQkJCQkJXAorCWludCBjaGFuZ2Fpbl9zdGF0ZTsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY2hhbmdhaW5fc3BlYzsJCQkJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGNhbGRhY19tYXhkYXRhX2xpc3RbTUFYX05fQ0FMREFDU107CVwKKwl1bnNpZ25lZCBzaG9ydCBhb1tNQVhfTl9BT19DSEFOXTsJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBjYWxkYWNzW01BWF9OX0NBTERBQ1NdOwkJCQlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhaV9jbWQyOwlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19jb25mW01BWF9OX0FPX0NIQU5dOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fbW9kZTE7CQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19tb2RlMjsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX21vZGUzOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fY21kMTsJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19jbWQyOwkJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX2NtZDM7CQkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fdHJpZ2dlcl9zZWxlY3Q7CQkJXAorCQkJCQkJCQlcCisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldjsJXAorCXVuc2lnbmVkIHNob3J0IGFuX3RyaWdfZXRjX3JlZzsJCQkJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgYWlfb2Zmc2V0WzUxMl07CQkJCVwKKwkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgc2VyaWFsX2ludGVydmFsX25zOyAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGNoYXIgc2VyaWFsX2h3X21vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIHNob3J0IGNsb2NrX2FuZF9mb3V0OwkJCQlcCisJdW5zaWduZWQgc2hvcnQgY2xvY2tfYW5kX2ZvdXQyOwkJCQlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBpbnRfYV9lbmFibGVfcmVnOwkJCVwKKwl1bnNpZ25lZCBzaG9ydCBpbnRfYl9lbmFibGVfcmVnOwkJCVwKKwl1bnNpZ25lZCBzaG9ydCBpb19iaWRpcmVjdGlvbl9waW5fcmVnOwkJCVwKKwl1bnNpZ25lZCBzaG9ydCBydHNpX3RyaWdfZGlyZWN0aW9uX3JlZzsJCQlcCisJdW5zaWduZWQgc2hvcnQgcnRzaV90cmlnX2Ffb3V0cHV0X3JlZzsgXAorCXVuc2lnbmVkIHNob3J0IHJ0c2lfdHJpZ19iX291dHB1dF9yZWc7IFwKKwl1bnNpZ25lZCBzaG9ydCBwZmlfb3V0cHV0X3NlbGVjdF9yZWdbTlVNX1BGSV9PVVRQVVRfU0VMRUNUX1JFR1NdOyBcCisJdW5zaWduZWQgc2hvcnQgYWlfYW9fc2VsZWN0X3JlZzsgXAorCXVuc2lnbmVkIHNob3J0IGcwX2cxX3NlbGVjdF9yZWc7IFwKKwl1bnNpZ25lZCBzaG9ydCBjZGlvX2RtYV9zZWxlY3RfcmVnOyBcCisJXAorCXVuc2lnbmVkIGNsb2NrX25zOyBcCisJdW5zaWduZWQgY2xvY2tfc291cmNlOyBcCisJXAorCXVuc2lnbmVkIHNob3J0IGF0cmlnX21vZGU7CQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhdHJpZ19oaWdoOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYXRyaWdfbG93OwkJCQlcCisJXAorCXVuc2lnbmVkIHNob3J0IHB3bV91cF9jb3VudDsJXAorCXVuc2lnbmVkIHNob3J0IHB3bV9kb3duX2NvdW50OwlcCisJXAorCXNob3J0IGFpX2ZpZm9fYnVmZmVyWzB4MjAwMF07CQkJCVwKKwl1aW50OF90IGVlcHJvbV9idWZmZXJbTV9TRVJJRVNfRUVQUk9NX1NJWkVdOyBcCisJdWludDMyX3Qgc2VyaWFsX251bWJlcjsgXAorCVwKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7IFwKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICphaV9taXRlX2NoYW47IFwKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICphb19taXRlX2NoYW47XAorCXN0cnVjdCBtaXRlX2NoYW5uZWwgKmNkb19taXRlX2NoYW47XAorCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKmFpX21pdGVfcmluZzsgXAorCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKmFvX21pdGVfcmluZzsgXAorCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKmNkb19taXRlX3Jpbmc7IFwKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpncGN0X21pdGVfcmluZ1tOVU1fR1BDVF07CisKKyNlbmRpZiAvKiBfQ09NRURJX05JX1NUQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOTU3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uYwpAQCAtMCwwICsxLDE2OTEgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL25pX3Rpby5jCisgIFN1cHBvcnQgZm9yIE5JIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycworCisgIENvcHlyaWdodCAoQykgMjAwNiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworLyoKK0RyaXZlcjogbmlfdGlvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzCitEZXZpY2VzOgorQXV0aG9yOiBKLlAuIE1lbGxvciA8anBtZWxsb3JAcm9zZS1odWxtYW4uZWR1PiwKKwlIZXJtYW4uQnJ1eW5pbmNreEBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCVdpbS5NZWV1c3NlbkBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUtsYWFzLkdhZGV5bmVAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitVcGRhdGVkOiBUaHUgTm92IDE2IDA5OjUwOjMyIEVTVCAyMDA2CitTdGF0dXM6IHdvcmtzCisKK1RoaXMgbW9kdWxlIGlzIG5vdCB1c2VkIGRpcmVjdGx5IGJ5IGVuZC11c2Vycy4gIFJhdGhlciwgaXQKK2lzIHVzZWQgYnkgb3RoZXIgZHJpdmVycyAoZm9yIGV4YW1wbGUgbmlfNjYweCBhbmQgbmlfcGNpbWlvKQordG8gcHJvdmlkZSBzdXBwb3J0IGZvciBOSSdzIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycy4gIEl0IHdhcworb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgY291bnRlciBjb2RlIGZyb20gbmlfNjYweC5jIGFuZAorbmlfbWlvX2NvbW1vbi5jLgorCitSZWZlcmVuY2VzOgorREFRIDY2MHggUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgIChOSSAzNzA1MDVBLTAxKQorREFRIDY2MDEvNjYwMiBVc2VyIE1hbnVhbCAoTkkgMzIyMTM3Qi0wMSkKKzM0MDkzNGIucGRmICBEQVEtU1RDIHJlZmVyZW5jZSBtYW51YWwKKworKi8KKy8qCitUT0RPOgorCVN1cHBvcnQgdXNlIG9mIGJvdGggYmFua3MgWCBhbmQgWQorKi8KKworI2luY2x1ZGUgIm5pX3Rpb19pbnRlcm5hbC5oIgorCitzdGF0aWMgdWludDY0X3QgbmlfdGlvX2Nsb2NrX3BlcmlvZF9wcyhjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBnZW5lcmljX2Nsb2NrX3NvdXJjZSk7CitzdGF0aWMgdW5zaWduZWQgbmlfdGlvX2dlbmVyaWNfY2xvY2tfc3JjX3NlbGVjdChjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcik7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSA8Y29tZWRpQGNvbWVkaS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBzdXBwb3J0IGZvciBOSSBnZW5lcmFsLXB1cnBvc2UgY291bnRlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGlubGluZSBlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGVudW0KKwluaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCkKK3sKKwlzd2l0Y2ggKHZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlyZXR1cm4gR2lfTV9TZXJpZXNfQWx0ZXJuYXRlX1N5bmNfQml0OworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gR2lfNjYweF9BbHRlcm5hdGVfU3luY19CaXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR2lfQ291bnRpbmdfTW9kZV9SZWdfQml0cyBHaV9QcmVzY2FsZV9YMl9CaXQoZW51bQorCW5pX2dwY3RfdmFyaWFudCB2YXJpYW50KQoreworCXN3aXRjaCAodmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCXJldHVybiBHaV9NX1Nlcmllc19QcmVzY2FsZV9YMl9CaXQ7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiBHaV82NjB4X1ByZXNjYWxlX1gyX0JpdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHaV9Db3VudGluZ19Nb2RlX1JlZ19CaXRzIEdpX1ByZXNjYWxlX1g4X0JpdChlbnVtCisJbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQpCit7CisJc3dpdGNoICh2YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJcmV0dXJuIEdpX01fU2VyaWVzX1ByZXNjYWxlX1g4X0JpdDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJcmV0dXJuIEdpXzY2MHhfUHJlc2NhbGVfWDhfQml0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgR2lfSFdfQXJtX1NlbGVjdF9NYXNrKGVudW0KKwluaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCkKK3sKKwlzd2l0Y2ggKHZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlyZXR1cm4gR2lfTV9TZXJpZXNfSFdfQXJtX1NlbGVjdF9NYXNrOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gR2lfNjYweF9IV19Bcm1fU2VsZWN0X01hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGNsb2NrIHNvdXJjZXMgZm9yIG5pXzY2MHggYm9hcmRzLCBnZXQgYml0cyB3aXRoIEdpX1NvdXJjZV9TZWxlY3RfQml0cygpICovCitlbnVtIG5pXzY2MHhfY2xvY2tfc291cmNlIHsKKwlOSV82NjB4X1RpbWViYXNlXzFfQ2xvY2sgPSAweDAsCS8qIDIwTUh6ICovCisJTklfNjYweF9Tb3VyY2VfUGluX2lfQ2xvY2sgPSAweDEsCisJTklfNjYweF9OZXh0X0dhdGVfQ2xvY2sgPSAweGEsCisJTklfNjYweF9UaW1lYmFzZV8yX0Nsb2NrID0gMHgxMiwJLyogMTAwS0h6ICovCisJTklfNjYweF9OZXh0X1RDX0Nsb2NrID0gMHgxMywKKwlOSV82NjB4X1RpbWViYXNlXzNfQ2xvY2sgPSAweDFlLAkvKiA4ME1IeiAqLworCU5JXzY2MHhfTG9naWNfTG93X0Nsb2NrID0gMHgxZiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsID0gNjsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9SVFNJX0Nsb2NrKHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV82NjB4X21heF9ydHNpX2NoYW5uZWwpOworCXJldHVybiAoMHhiICsgbik7Cit9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjYweF9tYXhfc291cmNlX3BpbiA9IDc7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfU291cmNlX1Bpbl9DbG9jayh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfc291cmNlX3Bpbik7CisJcmV0dXJuICgweDIgKyBuKTsKK30KKworLyogY2xvY2sgc291cmNlcyBmb3IgbmkgZSBhbmQgbSBzZXJpZXMgYm9hcmRzLCBnZXQgYml0cyB3aXRoIEdpX1NvdXJjZV9TZWxlY3RfQml0cygpICovCitlbnVtIG5pX21fc2VyaWVzX2Nsb2NrX3NvdXJjZSB7CisJTklfTV9TZXJpZXNfVGltZWJhc2VfMV9DbG9jayA9IDB4MCwJLyogMjBNSHogKi8KKwlOSV9NX1Nlcmllc19UaW1lYmFzZV8yX0Nsb2NrID0gMHgxMiwJLyogMTAwS0h6ICovCisJTklfTV9TZXJpZXNfTmV4dF9UQ19DbG9jayA9IDB4MTMsCisJTklfTV9TZXJpZXNfTmV4dF9HYXRlX0Nsb2NrID0gMHgxNCwJLyogd2hlbiBHaV9TcmNfU3ViU2VsZWN0ID0gMCAqLworCU5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfQ2xvY2sgPSAweDE0LAkvKiB3aGVuIEdpX1NyY19TdWJTZWxlY3QgPSAxICovCisJTklfTV9TZXJpZXNfUFhJMTBfQ2xvY2sgPSAweDFkLAorCU5JX01fU2VyaWVzX1RpbWViYXNlXzNfQ2xvY2sgPSAweDFlLAkvKiA4ME1Ieiwgd2hlbiBHaV9TcmNfU3ViU2VsZWN0ID0gMCAqLworCU5JX01fU2VyaWVzX0FuYWxvZ19UcmlnZ2VyX091dF9DbG9jayA9IDB4MWUsCS8qIHdoZW4gR2lfU3JjX1N1YlNlbGVjdCA9IDEgKi8KKwlOSV9NX1Nlcmllc19Mb2dpY19Mb3dfQ2xvY2sgPSAweDFmLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwgPSAxNTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfTV9TZXJpZXNfUEZJX0Nsb2NrKHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpOworCWlmIChuIDwgMTApCisJCXJldHVybiAxICsgbjsKKwllbHNlCisJCXJldHVybiAweGIgKyBuOworfQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWwgPSA3Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV9NX1Nlcmllc19SVFNJX0Nsb2NrKHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKTsKKwlpZiAobiA9PSA3KQorCQlyZXR1cm4gMHgxYjsKKwllbHNlCisJCXJldHVybiAweGIgKyBuOworfQorCitlbnVtIG5pXzY2MHhfZ2F0ZV9zZWxlY3QgeworCU5JXzY2MHhfU291cmNlX1Bpbl9pX0dhdGVfU2VsZWN0ID0gMHgwLAorCU5JXzY2MHhfR2F0ZV9QaW5faV9HYXRlX1NlbGVjdCA9IDB4MSwKKwlOSV82NjB4X05leHRfU1JDX0dhdGVfU2VsZWN0ID0gMHhhLAorCU5JXzY2MHhfTmV4dF9PdXRfR2F0ZV9TZWxlY3QgPSAweDE0LAorCU5JXzY2MHhfTG9naWNfTG93X0dhdGVfU2VsZWN0ID0gMHgxZiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjYweF9tYXhfZ2F0ZV9waW4gPSA3Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV82NjB4X0dhdGVfUGluX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV82NjB4X21heF9nYXRlX3Bpbik7CisJcmV0dXJuIDB4MiArIG47Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfUlRTSV9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKTsKKwlyZXR1cm4gMHhiICsgbjsKK30KKworZW51bSBuaV9tX3Nlcmllc19nYXRlX3NlbGVjdCB7CisJTklfTV9TZXJpZXNfVGltZXN0YW1wX011eF9HYXRlX1NlbGVjdCA9IDB4MCwKKwlOSV9NX1Nlcmllc19BSV9TVEFSVDJfR2F0ZV9TZWxlY3QgPSAweDEyLAorCU5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfR2F0ZV9TZWxlY3QgPSAweDEzLAorCU5JX01fU2VyaWVzX05leHRfT3V0X0dhdGVfU2VsZWN0ID0gMHgxNCwKKwlOSV9NX1Nlcmllc19BSV9TVEFSVDFfR2F0ZV9TZWxlY3QgPSAweDFjLAorCU5JX01fU2VyaWVzX05leHRfU1JDX0dhdGVfU2VsZWN0ID0gMHgxZCwKKwlOSV9NX1Nlcmllc19BbmFsb2dfVHJpZ2dlcl9PdXRfR2F0ZV9TZWxlY3QgPSAweDFlLAorCU5JX01fU2VyaWVzX0xvZ2ljX0xvd19HYXRlX1NlbGVjdCA9IDB4MWYsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV9NX1Nlcmllc19SVFNJX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKTsKKwlpZiAobiA9PSA3KQorCQlyZXR1cm4gMHgxYjsKKwlyZXR1cm4gMHhiICsgbjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfTV9TZXJpZXNfUEZJX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpOworCWlmIChuIDwgMTApCisJCXJldHVybiAxICsgbjsKKwlyZXR1cm4gMHhiICsgbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9Tb3VyY2VfU2VsZWN0X0JpdHModW5zaWduZWQgc291cmNlKQoreworCXJldHVybiAoc291cmNlIDw8IEdpX1NvdXJjZV9TZWxlY3RfU2hpZnQpICYgR2lfU291cmNlX1NlbGVjdF9NYXNrOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9HYXRlX1NlbGVjdF9CaXRzKHVuc2lnbmVkIGdhdGVfc2VsZWN0KQoreworCXJldHVybiAoZ2F0ZV9zZWxlY3QgPDwgR2lfR2F0ZV9TZWxlY3RfU2hpZnQpICYgR2lfR2F0ZV9TZWxlY3RfTWFzazsKK30KKworZW51bSBuaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdCB7CisJTklfNjYweF9Tb3VyY2VfUGluX2lfU2Vjb25kX0dhdGVfU2VsZWN0ID0gMHgwLAorCU5JXzY2MHhfVXBfRG93bl9QaW5faV9TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDEsCisJTklfNjYweF9OZXh0X1NSQ19TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweGEsCisJTklfNjYweF9OZXh0X091dF9TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDE0LAorCU5JXzY2MHhfU2VsZWN0ZWRfR2F0ZV9TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDFlLAorCU5JXzY2MHhfTG9naWNfTG93X1NlY29uZF9HYXRlX1NlbGVjdCA9IDB4MWYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluID0gNzsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9VcF9Eb3duX1Bpbl9TZWNvbmRfR2F0ZV9TZWxlY3QodW5zaWduZWQgbikKK3sKKwlCVUdfT04obiA+IG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluKTsKKwlyZXR1cm4gMHgyICsgbjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9SVFNJX1NlY29uZF9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKTsKKwlyZXR1cm4gMHhiICsgbjsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb3VudGVyX3N0YXR1c19tYXNrID0KKwlDT01FRElfQ09VTlRFUl9BUk1FRCB8IENPTUVESV9DT1VOVEVSX0NPVU5USU5HOworCitzdGF0aWMgaW50IF9faW5pdCBuaV90aW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobmlfdGlvX2luaXRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgX19leGl0IG5pX3Rpb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworfQorCittb2R1bGVfZXhpdChuaV90aW9fY2xlYW51cF9tb2R1bGUpOworCitzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKm5pX2dwY3RfZGV2aWNlX2NvbnN0cnVjdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl2b2lkICgqd3JpdGVfcmVnaXN0ZXIpIChzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpLAorCXVuc2lnbmVkICgqcmVhZF9yZWdpc3RlcikgKHN0cnVjdCBuaV9ncGN0ICogY291bnRlciwKKwkJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksIGVudW0gbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQsCisJdW5zaWduZWQgbnVtX2NvdW50ZXJzKQoreworCXVuc2lnbmVkIGk7CisKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IG5pX2dwY3RfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvdW50ZXJfZGV2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWNvdW50ZXJfZGV2LT5kZXYgPSBkZXY7CisJY291bnRlcl9kZXYtPndyaXRlX3JlZ2lzdGVyID0gd3JpdGVfcmVnaXN0ZXI7CisJY291bnRlcl9kZXYtPnJlYWRfcmVnaXN0ZXIgPSByZWFkX3JlZ2lzdGVyOworCWNvdW50ZXJfZGV2LT52YXJpYW50ID0gdmFyaWFudDsKKwlzcGluX2xvY2tfaW5pdCgmY291bnRlcl9kZXYtPnJlZ3NfbG9jayk7CisJQlVHX09OKG51bV9jb3VudGVycyA9PSAwKTsKKwljb3VudGVyX2Rldi0+Y291bnRlcnMgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbmlfZ3BjdCkgKiBudW1fY291bnRlcnMsIEdGUF9LRVJORUwpOworCWlmIChjb3VudGVyX2Rldi0+Y291bnRlcnMgPT0gTlVMTCkgeworCQlrZnJlZShjb3VudGVyX2Rldik7CisJCXJldHVybiBOVUxMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJY291bnRlcl9kZXYtPmNvdW50ZXJzW2ldLmNvdW50ZXJfZGV2ID0gY291bnRlcl9kZXY7CisJCXNwaW5fbG9ja19pbml0KCZjb3VudGVyX2Rldi0+Y291bnRlcnNbaV0ubG9jayk7CisJfQorCWNvdW50ZXJfZGV2LT5udW1fY291bnRlcnMgPSBudW1fY291bnRlcnM7CisJcmV0dXJuIGNvdW50ZXJfZGV2OworfQorCit2b2lkIG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldikKK3sKKwlpZiAoY291bnRlcl9kZXYtPmNvdW50ZXJzID09IE5VTEwpCisJCXJldHVybjsKKwlrZnJlZShjb3VudGVyX2Rldi0+Y291bnRlcnMpOworCWtmcmVlKGNvdW50ZXJfZGV2KTsKK30KKworc3RhdGljIGludCBuaV90aW9fc2Vjb25kX2dhdGVfcmVnaXN0ZXJzX3ByZXNlbnQoY29uc3Qgc3RydWN0IG5pX2dwY3RfZGV2aWNlCisJKmNvdW50ZXJfZGV2KQoreworCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV90aW9fcmVzZXRfY291bnRfYW5kX2Rpc2FybShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBHaV9SZXNldF9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCU5JVElPX0d4eF9Kb2ludF9SZXNldF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworfQorCit2b2lkIG5pX3Rpb19pbml0X2NvdW50ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCisJbmlfdGlvX3Jlc2V0X2NvdW50X2FuZF9kaXNhcm0oY291bnRlcik7CisJLyogaW5pdGlhbGl6ZSBjb3VudGVyIHJlZ2lzdGVycyAqLworCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0F1dG9pbmNyZW1lbnRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSA9CisJCTB4MDsKKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLAorCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9BdXRvaW5jcmVtZW50X1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KV0sCisJCU5JVElPX0dpX0F1dG9pbmNyZW1lbnRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCX4wLCBHaV9TeW5jaHJvbml6ZV9HYXRlX0JpdCk7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCB+MCwKKwkJMCk7CisJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEFfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSA9IDB4MDsKKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLAorCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCldLAorCQlOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPSAweDA7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSwKKwkJTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwgfjAsIDApOworCWlmIChuaV90aW9fY291bnRpbmdfbW9kZV9yZWdpc3RlcnNfcHJlc2VudChjb3VudGVyX2RldikpIHsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwgfjAsCisJCQkwKTsKKwl9CisJaWYgKG5pX3Rpb19zZWNvbmRfZ2F0ZV9yZWdpc3RlcnNfcHJlc2VudChjb3VudGVyX2RldikpIHsKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpXSA9IDB4MDsKKwkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT4KKwkJCQkJY291bnRlcl9pbmRleCldLAorCQkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0RNQV9Db25maWdfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCB+MCwgMHgwKTsKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW50ZXJydXB0X0VuYWJsZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIH4wLCAweDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG5pX3Rpb19jb3VudGVyX3N0YXR1cyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKKwljb25zdCB1bnNpZ25lZCBiaXRzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HeHhfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJaWYgKGJpdHMgJiBHaV9Bcm1lZF9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpIHsKKwkJc3RhdHVzIHw9IENPTUVESV9DT1VOVEVSX0FSTUVEOworCQlpZiAoYml0cyAmIEdpX0NvdW50aW5nX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkKKwkJCXN0YXR1cyB8PSBDT01FRElfQ09VTlRFUl9DT1VOVElORzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbmlfdGlvX3NldF9zeW5jX21vZGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIGludCBmb3JjZV9hbHRfc3luYykKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgY291bnRpbmdfbW9kZV9yZWcgPQorCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwlzdGF0aWMgY29uc3QgdWludDY0X3QgbWluX25vcm1hbF9zeW5jX3BlcmlvZF9wcyA9IDI1MDAwOworCWNvbnN0IHVpbnQ2NF90IGNsb2NrX3BlcmlvZF9wcyA9IG5pX3Rpb19jbG9ja19wZXJpb2RfcHMoY291bnRlciwKKwkJbmlfdGlvX2dlbmVyaWNfY2xvY2tfc3JjX3NlbGVjdChjb3VudGVyKSk7CisKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpID09IDApCisJCXJldHVybjsKKworCXN3aXRjaCAobmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJCWNvdW50aW5nX21vZGVfcmVnKSAmIEdpX0NvdW50aW5nX01vZGVfTWFzaykgeworCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDFfQml0czoKKwljYXNlIEdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVgyX0JpdHM6CisJY2FzZSBHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYNF9CaXRzOgorCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9TeW5jX1NvdXJjZV9CaXRzOgorCQlmb3JjZV9hbHRfc3luYyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkvKiBJdCdzIG5vdCBjbGVhciB3aGF0IHdlIHNob3VsZCBkbyBpZiBjbG9ja19wZXJpb2QgaXMgdW5rbm93biwgc28gd2UgYXJlIG5vdAorCSAgIHVzaW5nIHRoZSBhbHQgc3luYyBiaXQgaW4gdGhhdCBjYXNlLCBidXQgYWxsb3cgdGhlIGNhbGxlciB0byBkZWNpZGUgYnkgdXNpbmcgdGhlCisJICAgZm9yY2VfYWx0X3N5bmMgcGFyYW1ldGVyLiAqLworCWlmIChmb3JjZV9hbHRfc3luYyB8fAorCQkoY2xvY2tfcGVyaW9kX3BzCisJCQkmJiBjbG9ja19wZXJpb2RfcHMgPCBtaW5fbm9ybWFsX3N5bmNfcGVyaW9kX3BzKSkgeworCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwgY291bnRpbmdfbW9kZV9yZWcsCisJCQlHaV9BbHRlcm5hdGVfU3luY19CaXQoY291bnRlcl9kZXYtPnZhcmlhbnQpLAorCQkJR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSk7CisJfSBlbHNlIHsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIGNvdW50aW5nX21vZGVfcmVnLAorCQkJR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSwgMHgwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX3NldF9jb3VudGVyX21vZGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIG1vZGUpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIG1vZGVfcmVnX21hc2s7CisJdW5zaWduZWQgbW9kZV9yZWdfdmFsdWVzOworCXVuc2lnbmVkIGlucHV0X3NlbGVjdF9iaXRzID0gMDsKKwkvKiB0aGVzZSBiaXRzIG1hcCBkaXJlY3RseSBvbiB0byB0aGUgbW9kZSByZWdpc3RlciAqLworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtb2RlX3JlZ19kaXJlY3RfbWFzayA9CisJCU5JX0dQQ1RfR0FURV9PTl9CT1RIX0VER0VTX0JJVCB8IE5JX0dQQ1RfRURHRV9HQVRFX01PREVfTUFTSyB8CisJCU5JX0dQQ1RfU1RPUF9NT0RFX01BU0sgfCBOSV9HUENUX09VVFBVVF9NT0RFX01BU0sgfAorCQlOSV9HUENUX0hBUkRXQVJFX0RJU0FSTV9NQVNLIHwgTklfR1BDVF9MT0FESU5HX09OX1RDX0JJVCB8CisJCU5JX0dQQ1RfTE9BRElOR19PTl9HQVRFX0JJVCB8IE5JX0dQQ1RfTE9BRF9CX1NFTEVDVF9CSVQ7CisKKwltb2RlX3JlZ19tYXNrID0gbW9kZV9yZWdfZGlyZWN0X21hc2sgfCBHaV9SZWxvYWRfU291cmNlX1N3aXRjaGluZ19CaXQ7CisJbW9kZV9yZWdfdmFsdWVzID0gbW9kZSAmIG1vZGVfcmVnX2RpcmVjdF9tYXNrOworCXN3aXRjaCAobW9kZSAmIE5JX0dQQ1RfUkVMT0FEX1NPVVJDRV9NQVNLKSB7CisJY2FzZSBOSV9HUENUX1JFTE9BRF9TT1VSQ0VfRklYRURfQklUUzoKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1JFTE9BRF9TT1VSQ0VfU1dJVENISU5HX0JJVFM6CisJCW1vZGVfcmVnX3ZhbHVlcyB8PSBHaV9SZWxvYWRfU291cmNlX1N3aXRjaGluZ19CaXQ7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9SRUxPQURfU09VUkNFX0dBVEVfU0VMRUNUX0JJVFM6CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlX0JpdDsKKwkJbW9kZV9yZWdfbWFzayB8PSBHaV9HYXRpbmdfTW9kZV9NYXNrOworCQltb2RlX3JlZ192YWx1ZXMgfD0gR2lfTGV2ZWxfR2F0aW5nX0JpdHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCW1vZGVfcmVnX21hc2ssIG1vZGVfcmVnX3ZhbHVlcyk7CisKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCXVuc2lnbmVkIGNvdW50aW5nX21vZGVfYml0cyA9IDA7CisJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJKG1vZGUgPj4gTklfR1BDVF9DT1VOVElOR19NT0RFX1NISUZUKSAmCisJCQlHaV9Db3VudGluZ19Nb2RlX01hc2s7CisJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJKChtb2RlID4+IE5JX0dQQ1RfSU5ERVhfUEhBU0VfQklUU0hJRlQpIDw8CisJCQlHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCkgJiBHaV9JbmRleF9QaGFzZV9NYXNrOworCQlpZiAobW9kZSAmIE5JX0dQQ1RfSU5ERVhfRU5BQkxFX0JJVCkgeworCQkJY291bnRpbmdfbW9kZV9iaXRzIHw9IEdpX0luZGV4X01vZGVfQml0OworCQl9CisJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCQlHaV9Db3VudGluZ19Nb2RlX01hc2sgfCBHaV9JbmRleF9QaGFzZV9NYXNrIHwKKwkJCUdpX0luZGV4X01vZGVfQml0LCBjb3VudGluZ19tb2RlX2JpdHMpOworCQluaV90aW9fc2V0X3N5bmNfbW9kZShjb3VudGVyLCAwKTsKKwl9CisKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX1VwX0Rvd25fTWFzaywKKwkJKG1vZGUgPj4gTklfR1BDVF9DT1VOVElOR19ESVJFQ1RJT05fU0hJRlQpIDw8IEdpX1VwX0Rvd25fU2hpZnQpOworCisJaWYgKG1vZGUgJiBOSV9HUENUX09SX0dBVEVfQklUKSB7CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX09yX0dhdGVfQml0OworCX0KKwlpZiAobW9kZSAmIE5JX0dQQ1RfSU5WRVJUX09VVFBVVF9CSVQpIHsKKwkJaW5wdXRfc2VsZWN0X2JpdHMgfD0gR2lfT3V0cHV0X1BvbGFyaXR5X0JpdDsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlX0JpdCB8IEdpX09yX0dhdGVfQml0IHwKKwkJR2lfT3V0cHV0X1BvbGFyaXR5X0JpdCwgaW5wdXRfc2VsZWN0X2JpdHMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV90aW9fYXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgYXJtLCB1bnNpZ25lZCBzdGFydF90cmlnZ2VyKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKworCXVuc2lnbmVkIGNvbW1hbmRfdHJhbnNpZW50X2JpdHMgPSAwOworCisJaWYgKGFybSkgeworCQlzd2l0Y2ggKHN0YXJ0X3RyaWdnZXIpIHsKKwkJY2FzZSBOSV9HUENUX0FSTV9JTU1FRElBVEU6CisJCQljb21tYW5kX3RyYW5zaWVudF9iaXRzIHw9IEdpX0FybV9CaXQ7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUX0FSTV9QQUlSRURfSU1NRURJQVRFOgorCQkJY29tbWFuZF90cmFuc2llbnRfYml0cyB8PSBHaV9Bcm1fQml0IHwgR2lfQXJtX0NvcHlfQml0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCQl1bnNpZ25lZCBjb3VudGluZ19tb2RlX2JpdHMgPSAwOworCisJCQlzd2l0Y2ggKHN0YXJ0X3RyaWdnZXIpIHsKKwkJCWNhc2UgTklfR1BDVF9BUk1fSU1NRURJQVRFOgorCQkJY2FzZSBOSV9HUENUX0FSTV9QQUlSRURfSU1NRURJQVRFOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoc3RhcnRfdHJpZ2dlciAmIE5JX0dQQ1RfQVJNX1VOS05PV04pIHsKKwkJCQkJLyogcGFzcy10aHJvdWdoIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIHNvIHdlIGNhbiBmaWd1cmUgb3V0IHdoYXQgc2VsZWN0IGxhdGVyICovCisJCQkJCXVuc2lnbmVkIGh3X2FybV9zZWxlY3RfYml0cyA9CisJCQkJCQkoc3RhcnRfdHJpZ2dlciA8PAorCQkJCQkJR2lfSFdfQXJtX1NlbGVjdF9TaGlmdCkgJgorCQkJCQkJR2lfSFdfQXJtX1NlbGVjdF9NYXNrCisJCQkJCQkoY291bnRlcl9kZXYtPnZhcmlhbnQpOworCisJCQkJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJCQkJR2lfSFdfQXJtX0VuYWJsZV9CaXQgfAorCQkJCQkJaHdfYXJtX3NlbGVjdF9iaXRzOworCQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJCU5JVElPX0dpX0NvdW50aW5nX01vZGVfUmVnKGNvdW50ZXItPgorCQkJCQljb3VudGVyX2luZGV4KSwKKwkJCQlHaV9IV19Bcm1fU2VsZWN0X01hc2soY291bnRlcl9kZXYtPgorCQkJCQl2YXJpYW50KSB8IEdpX0hXX0FybV9FbmFibGVfQml0LAorCQkJCWNvdW50aW5nX21vZGVfYml0cyk7CisJCX0KKwl9IGVsc2UgeworCQljb21tYW5kX3RyYW5zaWVudF9iaXRzIHw9IEdpX0Rpc2FybV9CaXQ7CisJfQorCW5pX3Rpb19zZXRfYml0c190cmFuc2llbnQoY291bnRlciwKKwkJTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIDAsIDAsCisJCWNvbW1hbmRfdHJhbnNpZW50X2JpdHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfNjYweF9zb3VyY2Vfc2VsZWN0X2JpdHModW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSkKK3sKKwl1bnNpZ25lZCBuaV82NjB4X2Nsb2NrOworCXVuc2lnbmVkIGk7CisJY29uc3QgdW5zaWduZWQgY2xvY2tfc2VsZWN0X2JpdHMgPQorCQljbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSzsKKworCXN3aXRjaCAoY2xvY2tfc2VsZWN0X2JpdHMpIHsKKwljYXNlIE5JX0dQQ1RfVElNRUJBU0VfMV9DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfVGltZWJhc2VfMV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1RpbWViYXNlXzJfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8zX0NMT0NLX1NSQ19CSVRTOgorCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9UaW1lYmFzZV8zX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTE9HSUNfTE9XX0NMT0NLX1NSQ19CSVRTOgorCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9Mb2dpY19Mb3dfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9TT1VSQ0VfUElOX2lfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1NvdXJjZV9QaW5faV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX05FWFRfR0FURV9DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfTmV4dF9HYXRlX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfTmV4dF9UQ19DbG9jazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGNsb2NrX3NlbGVjdF9iaXRzID09IE5JX0dQQ1RfUlRTSV9DTE9DS19TUkNfQklUUyhpKSkgeworCQkJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1JUU0lfQ2xvY2soaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfc291cmNlX3BpbjsgKytpKSB7CisJCQlpZiAoY2xvY2tfc2VsZWN0X2JpdHMgPT0KKwkJCQlOSV9HUENUX1NPVVJDRV9QSU5fQ0xPQ0tfU1JDX0JJVFMoaSkpIHsKKwkJCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9Tb3VyY2VfUGluX0Nsb2NrKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3NvdXJjZV9waW4pCisJCQlicmVhazsKKwkJbmlfNjYweF9jbG9jayA9IDA7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIEdpX1NvdXJjZV9TZWxlY3RfQml0cyhuaV82NjB4X2Nsb2NrKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX21fc2VyaWVzX3NvdXJjZV9zZWxlY3RfYml0cyh1bnNpZ25lZCBpbnQgY2xvY2tfc291cmNlKQoreworCXVuc2lnbmVkIG5pX21fc2VyaWVzX2Nsb2NrOworCXVuc2lnbmVkIGk7CisJY29uc3QgdW5zaWduZWQgY2xvY2tfc2VsZWN0X2JpdHMgPQorCQljbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSzsKKwlzd2l0Y2ggKGNsb2NrX3NlbGVjdF9iaXRzKSB7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzFfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfVGltZWJhc2VfMV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfVGltZWJhc2VfMl9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfVGltZWJhc2VfM19DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19DTE9DS19TUkNfQklUUzoKKwkJbmlfbV9zZXJpZXNfY2xvY2sgPSBOSV9NX1Nlcmllc19Mb2dpY19Mb3dfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfTmV4dF9HYXRlX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzoKKwkJbmlfbV9zZXJpZXNfY2xvY2sgPSBOSV9NX1Nlcmllc19OZXh0X1RDX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFhJMTBfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfUFhJMTBfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9QWElfU1RBUl9UUklHR0VSX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9BTkFMT0dfVFJJR0dFUl9PVVRfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfQW5hbG9nX1RyaWdnZXJfT3V0X0Nsb2NrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGNsb2NrX3NlbGVjdF9iaXRzID09IE5JX0dQQ1RfUlRTSV9DTE9DS19TUkNfQklUUyhpKSkgeworCQkJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfUlRTSV9DbG9jayhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChjbG9ja19zZWxlY3RfYml0cyA9PSBOSV9HUENUX1BGSV9DTE9DS19TUkNfQklUUyhpKSkgeworCQkJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfUEZJX0Nsb2NrKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlydF9wcmludGsoImludmFsaWQgY2xvY2sgc291cmNlIDB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpY2xvY2tfc291cmNlKTsKKwkJQlVHKCk7CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBHaV9Tb3VyY2VfU2VsZWN0X0JpdHMobmlfbV9zZXJpZXNfY2xvY2spOworfTsKKworc3RhdGljIHZvaWQgbmlfdGlvX3NldF9zb3VyY2Vfc3Vic2VsZWN0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBjbG9ja19zb3VyY2UpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIHNlY29uZF9nYXRlX3JlZyA9CisJCU5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKworCWlmIChjb3VudGVyX2Rldi0+dmFyaWFudCAhPSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXMpCisJCXJldHVybjsKKwlzd2l0Y2ggKGNsb2NrX3NvdXJjZSAmIE5JX0dQQ1RfQ0xPQ0tfU1JDX1NFTEVDVF9NQVNLKSB7CisJCS8qIEdpX1NvdXJjZV9TdWJzZWxlY3QgaXMgemVybyAqLworCWNhc2UgTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM6CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM6CisJCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gJj0gfkdpX1NvdXJjZV9TdWJzZWxlY3RfQml0OworCQlicmVhazsKKwkJLyogR2lfU291cmNlX1N1YnNlbGVjdCBpcyBvbmUgKi8KKwljYXNlIE5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0NMT0NLX1NSQ19CSVRTOgorCWNhc2UgTklfR1BDVF9QWElfU1RBUl9UUklHR0VSX0NMT0NLX1NSQ19CSVRTOgorCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9IEdpX1NvdXJjZV9TdWJzZWxlY3RfQml0OworCQlicmVhazsKKwkJLyogR2lfU291cmNlX1N1YnNlbGVjdCBkb2Vzbid0IG1hdHRlciAqLworCWRlZmF1bHQ6CisJCXJldHVybjsKKwkJYnJlYWs7CisJfQorCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10sCisJCXNlY29uZF9nYXRlX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX3NldF9jbG9ja19zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJdW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSwgdW5zaWduZWQgaW50IHBlcmlvZF9ucykKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJdW5zaWduZWQgaW5wdXRfc2VsZWN0X2JpdHMgPSAwOworCXN0YXRpYyBjb25zdCB1aW50NjRfdCBwaWNvX3Blcl9uYW5vID0gMTAwMDsKKworLypGSVhNRTogdmFsaWRhdGUgY2xvY2sgc291cmNlICovCisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IG5pXzY2MHhfc291cmNlX3NlbGVjdF9iaXRzKGNsb2NrX3NvdXJjZSk7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlpbnB1dF9zZWxlY3RfYml0cyB8PQorCQkJbmlfbV9zZXJpZXNfc291cmNlX3NlbGVjdF9iaXRzKGNsb2NrX3NvdXJjZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJaWYgKGNsb2NrX3NvdXJjZSAmIE5JX0dQQ1RfSU5WRVJUX0NMT0NLX1NSQ19CSVQpCisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX1NvdXJjZV9Qb2xhcml0eV9CaXQ7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX1NvdXJjZV9TZWxlY3RfTWFzayB8IEdpX1NvdXJjZV9Qb2xhcml0eV9CaXQsCisJCWlucHV0X3NlbGVjdF9iaXRzKTsKKwluaV90aW9fc2V0X3NvdXJjZV9zdWJzZWxlY3QoY291bnRlciwgY2xvY2tfc291cmNlKTsKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCWNvbnN0IHVuc2lnbmVkIHByZXNjYWxpbmdfbW9kZSA9CisJCQljbG9ja19zb3VyY2UgJiBOSV9HUENUX1BSRVNDQUxFX01PREVfQ0xPQ0tfU1JDX01BU0s7CisJCXVuc2lnbmVkIGNvdW50aW5nX21vZGVfYml0cyA9IDA7CisKKwkJc3dpdGNoIChwcmVzY2FsaW5nX21vZGUpIHsKKwkJY2FzZSBOSV9HUENUX05PX1BSRVNDQUxFX0NMT0NLX1NSQ19CSVRTOgorCQkJYnJlYWs7CisJCWNhc2UgTklfR1BDVF9QUkVTQ0FMRV9YMl9DTE9DS19TUkNfQklUUzoKKwkJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJCUdpX1ByZXNjYWxlX1gyX0JpdChjb3VudGVyX2Rldi0+dmFyaWFudCk7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUX1BSRVNDQUxFX1g4X0NMT0NLX1NSQ19CSVRTOgorCQkJY291bnRpbmdfbW9kZV9iaXRzIHw9CisJCQkJR2lfUHJlc2NhbGVfWDhfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCU5JVElPX0dpX0NvdW50aW5nX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJR2lfUHJlc2NhbGVfWDJfQml0KGNvdW50ZXJfZGV2LT4KKwkJCQl2YXJpYW50KSB8IEdpX1ByZXNjYWxlX1g4X0JpdChjb3VudGVyX2Rldi0+CisJCQkJdmFyaWFudCksIGNvdW50aW5nX21vZGVfYml0cyk7CisJfQorCWNvdW50ZXItPmNsb2NrX3BlcmlvZF9wcyA9IHBpY29fcGVyX25hbm8gKiBwZXJpb2RfbnM7CisJbmlfdGlvX3NldF9zeW5jX21vZGUoY291bnRlciwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV90aW9fY2xvY2tfc3JjX21vZGlmaWVycyhjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgY291bnRpbmdfbW9kZV9iaXRzID0gbmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCXVuc2lnbmVkIGJpdHMgPSAwOworCisJaWYgKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpKSAmIEdpX1NvdXJjZV9Qb2xhcml0eV9CaXQpCisJCWJpdHMgfD0gTklfR1BDVF9JTlZFUlRfQ0xPQ0tfU1JDX0JJVDsKKwlpZiAoY291bnRpbmdfbW9kZV9iaXRzICYgR2lfUHJlc2NhbGVfWDJfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSkKKwkJYml0cyB8PSBOSV9HUENUX1BSRVNDQUxFX1gyX0NMT0NLX1NSQ19CSVRTOworCWlmIChjb3VudGluZ19tb2RlX2JpdHMgJiBHaV9QcmVzY2FsZV9YOF9CaXQoY291bnRlcl9kZXYtPnZhcmlhbnQpKQorCQliaXRzIHw9IE5JX0dQQ1RfUFJFU0NBTEVfWDhfQ0xPQ0tfU1JDX0JJVFM7CisJcmV0dXJuIGJpdHM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19jbG9ja19zcmNfc2VsZWN0KGNvbnN0IHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJdW5zaWduZWQgY2xvY2tfc291cmNlID0gMDsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGlucHV0X3NlbGVjdCA9IChuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KSkgJiBHaV9Tb3VyY2VfU2VsZWN0X01hc2spID4+CisJCUdpX1NvdXJjZV9TZWxlY3RfU2hpZnQ7CisKKwlzd2l0Y2ggKGlucHV0X3NlbGVjdCkgeworCWNhc2UgTklfTV9TZXJpZXNfVGltZWJhc2VfMV9DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9USU1FQkFTRV8xX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX1RpbWViYXNlXzJfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMl9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19UaW1lYmFzZV8zX0Nsb2NrOgorCQlpZiAoY291bnRlcl9kZXYtPgorCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYgR2lfU291cmNlX1N1YnNlbGVjdF9CaXQpCisJCQljbG9ja19zb3VyY2UgPQorCQkJCU5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0NMT0NLX1NSQ19CSVRTOworCQllbHNlCisJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTG9naWNfTG93X0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX0xPR0lDX0xPV19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19OZXh0X0dhdGVfQ2xvY2s6CisJCWlmIChjb3VudGVyX2Rldi0+CisJCQlyZWdzW3NlY29uZF9nYXRlX3JlZ10gJiBHaV9Tb3VyY2VfU3Vic2VsZWN0X0JpdCkKKwkJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9DTE9DS19TUkNfQklUUzsKKwkJZWxzZQorCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfUFhJMTBfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfUFhJMTBfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTmV4dF9UQ19DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9ORVhUX1RDX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV9NX1Nlcmllc19SVFNJX0Nsb2NrKGkpKSB7CisJCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9SVFNJX0NMT0NLX1NSQ19CSVRTKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV9NX1Nlcmllc19QRklfQ2xvY2soaSkpIHsKKwkJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1BGSV9DTE9DS19TUkNfQklUUyhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwljbG9ja19zb3VyY2UgfD0gbmlfdGlvX2Nsb2NrX3NyY19tb2RpZmllcnMoY291bnRlcik7CisJcmV0dXJuIGNsb2NrX3NvdXJjZTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pXzY2MHhfY2xvY2tfc3JjX3NlbGVjdChjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBjbG9ja19zb3VyY2UgPSAwOworCXVuc2lnbmVkIGk7CisJY29uc3QgdW5zaWduZWQgaW5wdXRfc2VsZWN0ID0gKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpKSAmIEdpX1NvdXJjZV9TZWxlY3RfTWFzaykgPj4KKwkJR2lfU291cmNlX1NlbGVjdF9TaGlmdDsKKworCXN3aXRjaCAoaW5wdXRfc2VsZWN0KSB7CisJY2FzZSBOSV82NjB4X1RpbWViYXNlXzFfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMV9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X1RpbWViYXNlXzJfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMl9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X1RpbWViYXNlXzNfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfM19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0xvZ2ljX0xvd19DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9MT0dJQ19MT1dfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9Tb3VyY2VfUGluX2lfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfU09VUkNFX1BJTl9pX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfTmV4dF9HYXRlX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX05FWFRfR0FURV9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfVENfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV82NjB4X1JUU0lfQ2xvY2soaSkpIHsKKwkJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1JUU0lfQ0xPQ0tfU1JDX0JJVFMoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfc291cmNlX3BpbjsgKytpKSB7CisJCQlpZiAoaW5wdXRfc2VsZWN0ID09IE5JXzY2MHhfU291cmNlX1Bpbl9DbG9jayhpKSkgeworCQkJCWNsb2NrX3NvdXJjZSA9CisJCQkJCU5JX0dQQ1RfU09VUkNFX1BJTl9DTE9DS19TUkNfQklUUyhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9zb3VyY2VfcGluKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJY2xvY2tfc291cmNlIHw9IG5pX3Rpb19jbG9ja19zcmNfbW9kaWZpZXJzKGNvdW50ZXIpOworCXJldHVybiBjbG9ja19zb3VyY2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV90aW9fZ2VuZXJpY19jbG9ja19zcmNfc2VsZWN0KGNvbnN0IHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXN3aXRjaCAoY291bnRlci0+Y291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJcmV0dXJuIG5pX21fc2VyaWVzX2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcik7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiBuaV82NjB4X2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBuaV90aW9fY2xvY2tfcGVyaW9kX3BzKGNvbnN0IHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGdlbmVyaWNfY2xvY2tfc291cmNlKQoreworCXVpbnQ2NF90IGNsb2NrX3BlcmlvZF9wczsKKworCXN3aXRjaCAoZ2VuZXJpY19jbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSykgeworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8xX0NMT0NLX1NSQ19CSVRTOgorCQljbG9ja19wZXJpb2RfcHMgPSA1MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyA9IDEwMDAwMDAwOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfVElNRUJBU0VfM19DTE9DS19TUkNfQklUUzoKKwkJY2xvY2tfcGVyaW9kX3BzID0gMTI1MDA7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9QWEkxMF9DTE9DS19TUkNfQklUUzoKKwkJY2xvY2tfcGVyaW9kX3BzID0gMTAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBjbG9jayBwZXJpb2QgaXMgc3BlY2lmaWVkIGJ5IHVzZXIgd2l0aCBwcmVzY2FsaW5nIGFscmVhZHkgdGFrZW4gaW50byBhY2NvdW50LiAqLworCQlyZXR1cm4gY291bnRlci0+Y2xvY2tfcGVyaW9kX3BzOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGdlbmVyaWNfY2xvY2tfc291cmNlICYgTklfR1BDVF9QUkVTQ0FMRV9NT0RFX0NMT0NLX1NSQ19NQVNLKSB7CisJY2FzZSBOSV9HUENUX05PX1BSRVNDQUxFX0NMT0NLX1NSQ19CSVRTOgorCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFJFU0NBTEVfWDJfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyAqPSAyOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFJFU0NBTEVfWDhfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyAqPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBjbG9ja19wZXJpb2RfcHM7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3Rpb19nZXRfY2xvY2tfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCAqIGNsb2NrX3NvdXJjZSwgdW5zaWduZWQgaW50ICogcGVyaW9kX25zKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBwaWNvX3Blcl9uYW5vID0gMTAwMDsKKwl1aW50NjRfdCB0ZW1wNjQ7CisJKmNsb2NrX3NvdXJjZSA9IG5pX3Rpb19nZW5lcmljX2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcik7CisJdGVtcDY0ID0gbmlfdGlvX2Nsb2NrX3BlcmlvZF9wcyhjb3VudGVyLCAqY2xvY2tfc291cmNlKTsKKwlkb19kaXYodGVtcDY0LCBwaWNvX3Blcl9uYW5vKTsKKwkqcGVyaW9kX25zID0gdGVtcDY0OworfQorCitzdGF0aWMgdm9pZCBuaV90aW9fc2V0X2ZpcnN0X2dhdGVfbW9kaWZpZXJzKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBtb2RlX21hc2sgPSBHaV9HYXRlX1BvbGFyaXR5X0JpdCB8IEdpX0dhdGluZ19Nb2RlX01hc2s7CisJdW5zaWduZWQgbW9kZV92YWx1ZXMgPSAwOworCisJaWYgKGdhdGVfc291cmNlICYgQ1JfSU5WRVJUKSB7CisJCW1vZGVfdmFsdWVzIHw9IEdpX0dhdGVfUG9sYXJpdHlfQml0OworCX0KKwlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9FREdFKSB7CisJCW1vZGVfdmFsdWVzIHw9IEdpX1Jpc2luZ19FZGdlX0dhdGluZ19CaXRzOworCX0gZWxzZSB7CisJCW1vZGVfdmFsdWVzIHw9IEdpX0xldmVsX0dhdGluZ19CaXRzOworCX0KKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCW1vZGVfbWFzaywgbW9kZV92YWx1ZXMpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfc2V0X2ZpcnN0X2dhdGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBzZWxlY3RlZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWxlY3RlZF9nYXRlIHRoYXQgbWF5IGJlIG1lYW5pbmdmdWwgdG8gaW5wdXQgc2VsZWN0IHJlZ2lzdGVyICovCisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfZ2F0ZV9tYXNrID0gMHgxZjsKKwl1bnNpZ25lZCBuaV82NjB4X2dhdGVfc2VsZWN0OworCXVuc2lnbmVkIGk7CisKKwlzd2l0Y2ggKHNlbGVjdGVkX2dhdGUpIHsKKwljYXNlIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q6CisJCW5pXzY2MHhfZ2F0ZV9zZWxlY3QgPSBOSV82NjB4X05leHRfU1JDX0dhdGVfU2VsZWN0OworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfU09VUkNFX1BJTl9pX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9HQVRFX1BJTl9pX0dBVEVfU0VMRUNUOgorCQluaV82NjB4X2dhdGVfc2VsZWN0ID0gc2VsZWN0ZWRfZ2F0ZSAmIHNlbGVjdGVkX2dhdGVfbWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX2dhdGUgPT0gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpKSB7CisJCQkJbmlfNjYweF9nYXRlX3NlbGVjdCA9CisJCQkJCXNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfZ2F0ZV9waW47ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX2dhdGUgPT0gTklfR1BDVF9HQVRFX1BJTl9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pXzY2MHhfZ2F0ZV9zZWxlY3QgPQorCQkJCQlzZWxlY3RlZF9nYXRlICYgc2VsZWN0ZWRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluKQorCQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfU2VsZWN0X01hc2ssIEdpX0dhdGVfU2VsZWN0X0JpdHMobmlfNjYweF9nYXRlX3NlbGVjdCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3NldF9maXJzdF9nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBzZWxlY3RlZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWxlY3RlZF9nYXRlIHRoYXQgbWF5IGJlIG1lYW5pbmdmdWwgdG8gaW5wdXQgc2VsZWN0IHJlZ2lzdGVyICovCisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfZ2F0ZV9tYXNrID0gMHgxZjsKKwl1bnNpZ25lZCBuaV9tX3Nlcmllc19nYXRlX3NlbGVjdDsKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChzZWxlY3RlZF9nYXRlKSB7CisJY2FzZSBOSV9HUENUX1RJTUVTVEFNUF9NVVhfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0FJX1NUQVJUMl9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0FJX1NUQVJUMV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0FOQUxPR19UUklHR0VSX09VVF9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTE9HSUNfTE9XX0dBVEVfU0VMRUNUOgorCQluaV9tX3Nlcmllc19nYXRlX3NlbGVjdCA9IHNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoc2VsZWN0ZWRfZ2F0ZSA9PSBOSV9HUENUX1JUU0lfR0FURV9TRUxFQ1QoaSkpIHsKKwkJCQluaV9tX3Nlcmllc19nYXRlX3NlbGVjdCA9CisJCQkJCXNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoc2VsZWN0ZWRfZ2F0ZSA9PSBOSV9HUENUX1BGSV9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pX21fc2VyaWVzX2dhdGVfc2VsZWN0ID0KKwkJCQkJc2VsZWN0ZWRfZ2F0ZSAmIHNlbGVjdGVkX2dhdGVfbWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJR2lfR2F0ZV9TZWxlY3RfTWFzaywKKwkJR2lfR2F0ZV9TZWxlY3RfQml0cyhuaV9tX3Nlcmllc19nYXRlX3NlbGVjdCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfc2V0X3NlY29uZF9nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgc2Vjb25kX2dhdGVfcmVnID0KKwkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCWNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX3NlY29uZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWNvbmRfZ2F0ZSB0aGF0IG1heSBiZSBtZWFuaW5nZnVsIHRvIHNlY29uZCBnYXRlIHJlZ2lzdGVyICovCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2sgPSAweDFmOworCXVuc2lnbmVkIG5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0OworCXVuc2lnbmVkIGk7CisKKwlzd2l0Y2ggKHNlbGVjdGVkX3NlY29uZF9nYXRlKSB7CisJY2FzZSBOSV9HUENUX1NPVVJDRV9QSU5faV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfVVBfRE9XTl9QSU5faV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfU0VMRUNURURfR0FURV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDoKKwkJbmlfNjYweF9zZWNvbmRfZ2F0ZV9zZWxlY3QgPQorCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJiBzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q6CisJCW5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0ID0KKwkJCU5JXzY2MHhfTmV4dF9TUkNfU2Vjb25kX0dhdGVfU2VsZWN0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoc2VsZWN0ZWRfc2Vjb25kX2dhdGUgPT0gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpKSB7CisJCQkJbmlfNjYweF9zZWNvbmRfZ2F0ZV9zZWxlY3QgPQorCQkJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZSAmCisJCQkJCXNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfdXBfZG93bl9waW47ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX3NlY29uZF9nYXRlID09CisJCQkJTklfR1BDVF9VUF9ET1dOX1BJTl9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0ID0KKwkJCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJgorCQkJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluKQorCQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9OworCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0gR2lfU2Vjb25kX0dhdGVfTW9kZV9CaXQ7CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmPSB+R2lfU2Vjb25kX0dhdGVfU2VsZWN0X01hc2s7CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PQorCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfQml0cyhuaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdCk7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSwKKwkJc2Vjb25kX2dhdGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19zZXRfc2Vjb25kX2dhdGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJdW5zaWduZWQgaW50IGdhdGVfc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfc2Vjb25kX2dhdGUgPSBDUl9DSEFOKGdhdGVfc291cmNlKTsKKwkvKiBiaXRzIG9mIHNlY29uZF9nYXRlIHRoYXQgbWF5IGJlIG1lYW5pbmdmdWwgdG8gc2Vjb25kIGdhdGUgcmVnaXN0ZXIgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfc2Vjb25kX2dhdGVfbWFzayA9IDB4MWY7CisJdW5zaWduZWQgbmlfbV9zZXJpZXNfc2Vjb25kX2dhdGVfc2VsZWN0OworCisJLyogRklYTUU6IFdlIGRvbid0IGtub3cgd2hhdCB0aGUgbS1zZXJpZXMgc2Vjb25kIGdhdGUgY29kZXMgYXJlLCBzbyB3ZSdsbCBqdXN0IHBhc3MKKwkgICB0aGUgYml0cyB0aHJvdWdoIGZvciBub3cuICovCisJc3dpdGNoIChzZWxlY3RlZF9zZWNvbmRfZ2F0ZSkgeworCWRlZmF1bHQ6CisJCW5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3NlbGVjdCA9CisJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZSAmIHNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2s7CisJCWJyZWFrOworCX07CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PSBHaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdDsKKwljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9IH5HaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzazsKKwljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9CisJCUdpX1NlY29uZF9HYXRlX1NlbGVjdF9CaXRzKG5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3NlbGVjdCk7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSwKKwkJc2Vjb25kX2dhdGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG5pX3Rpb19zZXRfZ2F0ZV9zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGdhdGVfaW5kZXgsCisJdW5zaWduZWQgaW50IGdhdGVfc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisKKwlzd2l0Y2ggKGdhdGVfaW5kZXgpIHsKKwljYXNlIDA6CisJCWlmIChDUl9DSEFOKGdhdGVfc291cmNlKSA9PSBOSV9HUENUX0RJU0FCTEVEX0dBVEVfU0VMRUNUKSB7CisJCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCQlOSVRJT19HaV9Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCQlHaV9HYXRpbmdfTW9kZV9NYXNrLCBHaV9HYXRpbmdfRGlzYWJsZWRfQml0cyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQluaV90aW9fc2V0X2ZpcnN0X2dhdGVfbW9kaWZpZXJzKGNvdW50ZXIsIGdhdGVfc291cmNlKTsKKwkJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCQljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCQlyZXR1cm4gbmlfbV9zZXJpZXNfc2V0X2ZpcnN0X2dhdGUoY291bnRlciwgZ2F0ZV9zb3VyY2UpOworCQkJYnJlYWs7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCQlyZXR1cm4gbmlfNjYweF9zZXRfZmlyc3RfZ2F0ZShjb3VudGVyLCBnYXRlX3NvdXJjZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAobmlfdGlvX3NlY29uZF9nYXRlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChDUl9DSEFOKGdhdGVfc291cmNlKSA9PSBOSV9HUENUX0RJU0FCTEVEX0dBVEVfU0VMRUNUKSB7CisJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9CisJCQkJfkdpX1NlY29uZF9HYXRlX01vZGVfQml0OworCQkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddLAorCQkJCXNlY29uZF9nYXRlX3JlZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9JTlZFUlQpIHsKKwkJCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0KKwkJCQlHaV9TZWNvbmRfR2F0ZV9Qb2xhcml0eV9CaXQ7CisJCX0gZWxzZSB7CisJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9CisJCQkJfkdpX1NlY29uZF9HYXRlX1BvbGFyaXR5X0JpdDsKKwkJfQorCQlzd2l0Y2ggKGNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQkJcmV0dXJuIG5pX21fc2VyaWVzX3NldF9zZWNvbmRfZ2F0ZShjb3VudGVyLAorCQkJCWdhdGVfc291cmNlKTsKKwkJCWJyZWFrOworCQljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQkJcmV0dXJuIG5pXzY2MHhfc2V0X3NlY29uZF9nYXRlKGNvdW50ZXIsIGdhdGVfc291cmNlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19zZXRfb3RoZXJfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBpbmRleCwKKwl1bnNpZ25lZCBpbnQgc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKworCWlmIChjb3VudGVyX2Rldi0+dmFyaWFudCA9PSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXMpIHsKKwkJdW5zaWduZWQgaW50IGFiel9yZWcsIHNoaWZ0LCBtYXNrOworCisJCWFiel9yZWcgPSBOSVRJT19HaV9BQlpfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCQlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgTklfR1BDVF9TT1VSQ0VfRU5DT0RFUl9BOgorCQkJc2hpZnQgPSAxMDsKKwkJCWJyZWFrOworCQljYXNlIE5JX0dQQ1RfU09VUkNFX0VOQ09ERVJfQjoKKwkJCXNoaWZ0ID0gNTsKKwkJCWJyZWFrOworCQljYXNlIE5JX0dQQ1RfU09VUkNFX0VOQ09ERVJfWjoKKwkJCXNoaWZ0ID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQltYXNrID0gMHgxZiA8PCBzaGlmdDsKKwkJaWYgKHNvdXJjZSA+IDB4MWYpIHsKKwkJCS8qIERpc2FibGUgZ2F0ZSAqLworCQkJc291cmNlID0gMHgxZjsKKwkJfQorCQljb3VudGVyX2Rldi0+cmVnc1thYnpfcmVnXSAmPSB+bWFzazsKKwkJY291bnRlcl9kZXYtPnJlZ3NbYWJ6X3JlZ10gfD0gKHNvdXJjZSA8PCBzaGlmdCkgJiBtYXNrOworCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBjb3VudGVyX2Rldi0+cmVnc1thYnpfcmVnXSwgYWJ6X3JlZyk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCIlcyAleCAlZCAlZFxuIiwgX19GVU5DVElPTl9fLCBjb3VudGVyX2Rldi0+cmVnc1thYnpfcmVnXSwgaW5kZXgsIHNvdXJjZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pXzY2MHhfZmlyc3RfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfNjYweF9nYXRlX3NlbGVjdCkKK3sKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChuaV82NjB4X2dhdGVfc2VsZWN0KSB7CisJY2FzZSBOSV82NjB4X1NvdXJjZV9QaW5faV9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfU09VUkNFX1BJTl9pX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfR2F0ZV9QaW5faV9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfR0FURV9QSU5faV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfU1JDX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX1NPVVJDRV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfT3V0X0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX09VVF9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0xvZ2ljX0xvd19HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTE9HSUNfTE9XX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAobmlfNjYweF9nYXRlX3NlbGVjdCA9PSBOSV82NjB4X1JUU0lfR2F0ZV9TZWxlY3QoaSkpIHsKKwkJCQlyZXR1cm4gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluOyArK2kpIHsKKwkJCWlmIChuaV82NjB4X2dhdGVfc2VsZWN0ID09CisJCQkJTklfNjYweF9HYXRlX1Bpbl9HYXRlX1NlbGVjdChpKSkgeworCQkJCXJldHVybiBOSV9HUENUX0dBVEVfUElOX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgdW5zaWduZWQgbmlfbV9zZXJpZXNfZmlyc3RfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpCit7CisJdW5zaWduZWQgaTsKKworCXN3aXRjaCAobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpIHsKKwljYXNlIE5JX01fU2VyaWVzX1RpbWVzdGFtcF9NdXhfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1RJTUVTVEFNUF9NVVhfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfQUlfU1RBUlQyX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9BSV9TVEFSVDJfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfUFhJX1N0YXJfVHJpZ2dlcl9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19OZXh0X091dF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfQUlfU1RBUlQxX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9BSV9TVEFSVDFfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTmV4dF9TUkNfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX05FWFRfU09VUkNFX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0FuYWxvZ19UcmlnZ2VyX091dF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0xvZ2ljX0xvd19HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTE9HSUNfTE9XX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKG5pX21fc2VyaWVzX2dhdGVfc2VsZWN0ID09CisJCQkJTklfTV9TZXJpZXNfUlRTSV9HYXRlX1NlbGVjdChpKSkgeworCQkJCXJldHVybiBOSV9HUENUX1JUU0lfR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QgPT0KKwkJCQlOSV9NX1Nlcmllc19QRklfR2F0ZV9TZWxlY3QoaSkpIHsKKwkJCQlyZXR1cm4gTklfR1BDVF9QRklfR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgdW5zaWduZWQgbmlfNjYweF9zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfNjYweF9nYXRlX3NlbGVjdCkKK3sKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChuaV82NjB4X2dhdGVfc2VsZWN0KSB7CisJY2FzZSBOSV82NjB4X1NvdXJjZV9QaW5faV9TZWNvbmRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1NPVVJDRV9QSU5faV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X1VwX0Rvd25fUGluX2lfU2Vjb25kX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9VUF9ET1dOX1BJTl9pX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfTmV4dF9TUkNfU2Vjb25kX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX1NPVVJDRV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfT3V0X1NlY29uZF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9TZWxlY3RlZF9HYXRlX1NlY29uZF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfU0VMRUNURURfR0FURV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0xvZ2ljX0xvd19TZWNvbmRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKG5pXzY2MHhfZ2F0ZV9zZWxlY3QgPT0KKwkJCQlOSV82NjB4X1JUU0lfU2Vjb25kX0dhdGVfU2VsZWN0KGkpKSB7CisJCQkJcmV0dXJuIE5JX0dQQ1RfUlRTSV9HQVRFX1NFTEVDVChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF91cF9kb3duX3BpbjsgKytpKSB7CisJCQlpZiAobmlfNjYweF9nYXRlX3NlbGVjdCA9PQorCQkJCU5JXzY2MHhfVXBfRG93bl9QaW5fU2Vjb25kX0dhdGVfU2VsZWN0KGkpKSB7CisJCQkJcmV0dXJuIE5JX0dQQ1RfVVBfRE9XTl9QSU5fR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfdXBfZG93bl9waW4pCisJCQlicmVhazsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpCit7CisJLypGSVhNRTogdGhlIHNlY29uZCBnYXRlIHNvdXJjZXMgZm9yIHRoZSBtIHNlcmllcyBhcmUgdW5kb2N1bWVudGVkLCBzbyB3ZSBqdXN0IHJldHVybgorCSAqIHRoZSByYXcgYml0cyBmb3Igbm93LiAqLworCXN3aXRjaCAobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3Q7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgbmlfdGlvX2dldF9nYXRlX3NyYyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgdW5zaWduZWQgZ2F0ZV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgKiBnYXRlX3NvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgbW9kZV9iaXRzID0gbmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCWNvbnN0IHVuc2lnbmVkIHNlY29uZF9nYXRlX3JlZyA9CisJCU5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwl1bnNpZ25lZCBnYXRlX3NlbGVjdF9iaXRzOworCisJc3dpdGNoIChnYXRlX2luZGV4KSB7CisJY2FzZSAwOgorCQlpZiAoKG1vZGVfYml0cyAmIEdpX0dhdGluZ19Nb2RlX01hc2spID09CisJCQlHaV9HYXRpbmdfRGlzYWJsZWRfQml0cykgeworCQkJKmdhdGVfc291cmNlID0gTklfR1BDVF9ESVNBQkxFRF9HQVRFX1NFTEVDVDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJZ2F0ZV9zZWxlY3RfYml0cyA9CisJCQkJKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQkJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+CisJCQkJCQljb3VudGVyX2luZGV4KSkgJgorCQkJCUdpX0dhdGVfU2VsZWN0X01hc2spID4+IEdpX0dhdGVfU2VsZWN0X1NoaWZ0OworCQl9CisJCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQkJKmdhdGVfc291cmNlID0KKwkJCQluaV9tX3Nlcmllc19maXJzdF9nYXRlX3RvX2dlbmVyaWNfZ2F0ZV9zb3VyY2UKKwkJCQkoZ2F0ZV9zZWxlY3RfYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJCSpnYXRlX3NvdXJjZSA9CisJCQkJbmlfNjYweF9maXJzdF9nYXRlX3RvX2dlbmVyaWNfZ2F0ZV9zb3VyY2UKKwkJCQkoZ2F0ZV9zZWxlY3RfYml0cyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG1vZGVfYml0cyAmIEdpX0dhdGVfUG9sYXJpdHlfQml0KSB7CisJCQkqZ2F0ZV9zb3VyY2UgfD0gQ1JfSU5WRVJUOworCQl9CisJCWlmICgobW9kZV9iaXRzICYgR2lfR2F0aW5nX01vZGVfTWFzaykgIT0gR2lfTGV2ZWxfR2F0aW5nX0JpdHMpIHsKKwkJCSpnYXRlX3NvdXJjZSB8PSBDUl9FREdFOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSA9PSBHaV9HYXRpbmdfRGlzYWJsZWRfQml0cworCQkJfHwgKGNvdW50ZXJfZGV2LT4KKwkJCQlyZWdzW3NlY29uZF9nYXRlX3JlZ10gJiBHaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdCkKKwkJCT09IDApIHsKKwkJCSpnYXRlX3NvdXJjZSA9IE5JX0dQQ1RfRElTQUJMRURfR0FURV9TRUxFQ1Q7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWdhdGVfc2VsZWN0X2JpdHMgPQorCQkJCShjb3VudGVyX2Rldi0+CisJCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYKKwkJCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzaykgPj4KKwkJCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfU2hpZnQ7CisJCX0KKwkJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCQljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCQkqZ2F0ZV9zb3VyY2UgPQorCQkJCW5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3RvX2dlbmVyaWNfZ2F0ZV9zb3VyY2UKKwkJCQkoZ2F0ZV9zZWxlY3RfYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJCSpnYXRlX3NvdXJjZSA9CisJCQkJbmlfNjYweF9zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlCisJCQkJKGdhdGVfc2VsZWN0X2JpdHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3VudGVyX2Rldi0+CisJCQlyZWdzW3NlY29uZF9nYXRlX3JlZ10gJiBHaV9TZWNvbmRfR2F0ZV9Qb2xhcml0eV9CaXQpIHsKKwkJCSpnYXRlX3NvdXJjZSB8PSBDUl9JTlZFUlQ7CisJCX0KKwkJLyogc2Vjb25kIGdhdGUgY2FuJ3QgaGF2ZSBlZGdlL2xldmVsIG1vZGUgc2V0IGluZGVwZW5kZW50bHkgKi8KKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSAhPSBHaV9MZXZlbF9HYXRpbmdfQml0cykgeworCQkJKmdhdGVfc291cmNlIHw9IENSX0VER0U7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG5pX3Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERToKKwkJcmV0dXJuIG5pX3Rpb19zZXRfY291bnRlcl9tb2RlKGNvdW50ZXIsIGRhdGFbMV0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0FSTToKKwkJcmV0dXJuIG5pX3Rpb19hcm0oY291bnRlciwgMSwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElTQVJNOgorCQluaV90aW9fYXJtKGNvdW50ZXIsIDAsIDApOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfQ09VTlRFUl9TVEFUVVM6CisJCWRhdGFbMV0gPSBuaV90aW9fY291bnRlcl9zdGF0dXMoY291bnRlcik7CisJCWRhdGFbMl0gPSBjb3VudGVyX3N0YXR1c19tYXNrOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfQ0xPQ0tfU1JDOgorCQlyZXR1cm4gbmlfdGlvX3NldF9jbG9ja19zcmMoY291bnRlciwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0NMT0NLX1NSQzoKKwkJbmlfdGlvX2dldF9jbG9ja19zcmMoY291bnRlciwgJmRhdGFbMV0sICZkYXRhWzJdKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0dBVEVfU1JDOgorCQlyZXR1cm4gbmlfdGlvX3NldF9nYXRlX3NyYyhjb3VudGVyLCBkYXRhWzFdLCBkYXRhWzJdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfR0FURV9TUkM6CisJCXJldHVybiBuaV90aW9fZ2V0X2dhdGVfc3JjKGNvdW50ZXIsIGRhdGFbMV0sICZkYXRhWzJdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfT1RIRVJfU1JDOgorCQlyZXR1cm4gbmlfdGlvX3NldF9vdGhlcl9zcmMoY291bnRlciwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfUkVTRVQ6CisJCW5pX3Rpb19yZXNldF9jb3VudF9hbmRfZGlzYXJtKGNvdW50ZXIpOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgbmlfdGlvX3JpbnNuKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgZmlyc3RfcmVhZDsKKwl1bnNpZ25lZCBzZWNvbmRfcmVhZDsKKwl1bnNpZ25lZCBjb3JyZWN0X3JlYWQ7CisKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAwOworCXN3aXRjaCAoY2hhbm5lbCkgeworCWNhc2UgMDoKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db21tYW5kX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX1NhdmVfVHJhY2VfQml0LCAwKTsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db21tYW5kX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX1NhdmVfVHJhY2VfQml0LCBHaV9TYXZlX1RyYWNlX0JpdCk7CisJCS8qIFRoZSBjb3VudCBkb2Vzbid0IGdldCBsYXRjaGVkIHVudGlsIHRoZSBuZXh0IGNsb2NrIGVkZ2UsIHNvIGl0IGlzIHBvc3NpYmxlIHRoZSBjb3VudAorCQkgICBtYXkgY2hhbmdlIChvbmNlKSB3aGlsZSB3ZSBhcmUgcmVhZGluZy4gIFNpbmNlIHRoZSByZWFkIG9mIHRoZSBTV19TYXZlX1JlZyBpc24ndAorCQkgICBhdG9taWMgKGFwcGFyZW50bHkgZXZlbiB3aGVuIGl0J3MgYSAzMiBiaXQgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIDY2MHggZG9jcyksCisJCSAgIHdlIG5lZWQgdG8gcmVhZCB0d2ljZSBhbmQgbWFrZSBzdXJlIHRoZSByZWFkaW5nIGhhc24ndCBjaGFuZ2VkLiAgSWYgaXQgaGFzLAorCQkgICBhIHRoaXJkIHJlYWQgd2lsbCBiZSBjb3JyZWN0IHNpbmNlIHRoZSBjb3VudCB2YWx1ZSB3aWxsIGRlZmluaXRlbHkgaGF2ZSBsYXRjaGVkIGJ5IHRoZW4uICovCisJCWZpcnN0X3JlYWQgPQorCQkJcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQkJTklUSU9fR2lfU1dfU2F2ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCQlzZWNvbmRfcmVhZCA9CisJCQlyZWFkX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQlOSVRJT19HaV9TV19TYXZlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJCWlmIChmaXJzdF9yZWFkICE9IHNlY29uZF9yZWFkKQorCQkJY29ycmVjdF9yZWFkID0KKwkJCQlyZWFkX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQkJTklUSU9fR2lfU1dfU2F2ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCQllbHNlCisJCQljb3JyZWN0X3JlYWQgPSBmaXJzdF9yZWFkOworCQlkYXRhWzBdID0gY29ycmVjdF9yZWFkOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkYXRhWzBdID0KKwkJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KV07CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YVswXSA9CisJCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQl9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCldOworCQlicmVhazsKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfdGlvX25leHRfbG9hZF9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwljb25zdCB1bnNpZ25lZCBiaXRzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HeHhfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisKKwlpZiAoYml0cyAmIEdpX05leHRfTG9hZF9Tb3VyY2VfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCXJldHVybiBOSVRJT19HaV9Mb2FkQl9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIE5JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwl9Cit9CisKK2ludCBuaV90aW9fd2luc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBsb2FkX3JlZzsKKworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChjaGFubmVsKSB7CisJY2FzZSAwOgorCQkvKiBVbnNhZmUgaWYgY291bnRlciBpcyBhcm1lZC4gIFNob3VsZCBwcm9iYWJseSBjaGVjayBzdGF0dXMgYW5kIHJldHVybiAtRUJVU1kgaWYgYXJtZWQuICovCisJCS8qIERvbid0IGRpc3R1cmIgbG9hZCBzb3VyY2Ugc2VsZWN0LCBqdXN0IHVzZSB3aGljaGV2ZXIgbG9hZCByZWdpc3RlciBpcyBhbHJlYWR5IHNlbGVjdGVkLiAqLworCQlsb2FkX3JlZyA9IG5pX3Rpb19uZXh0X2xvYWRfcmVnaXN0ZXIoY291bnRlcik7CisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGRhdGFbMF0sIGxvYWRfcmVnKTsKKwkJbmlfdGlvX3NldF9iaXRzX3RyYW5zaWVudChjb3VudGVyLAorCQkJTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIDAsIDAsCisJCQlHaV9Mb2FkX0JpdCk7CisJCS8qIHJlc3RvcmUgc3RhdGUgb2YgbG9hZCByZWcgdG8gd2hhdGV2ZXIgdGhlIHVzZXIgc2V0IGxhc3Qgc2V0IGl0IHRvICovCisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGNvdW50ZXJfZGV2LT5yZWdzW2xvYWRfcmVnXSwgbG9hZF9yZWcpOworCQlicmVhazsKKwljYXNlIDE6CisJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPQorCQkJZGF0YVswXTsKKwkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgZGF0YVswXSwKKwkJCU5JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSA9CisJCQlkYXRhWzBdOworCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBkYXRhWzBdLAorCQkJTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3JpbnNuKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb193aW5zbik7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faW5zbl9jb25maWcpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luaXRfY291bnRlcik7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fYXJtKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19zZXRfZ2F0ZV9zcmMpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MjlkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgICAgZHJpdmVycy9uaV90aW8uaAorICAgIEhlYWRlciBmaWxlIGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IGNvZGUgKG5pX3Rpby5jKQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgX0NPTUVESV9OSV9USU9fSAorI2RlZmluZSBfQ09NRURJX05JX1RJT19ICisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworLy8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKK3N0cnVjdCBtaXRlX3N0cnVjdDsKK3N0cnVjdCBuaV9ncGN0X2RldmljZTsKKworZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHsKKwlOSVRJT19HMF9BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HMl9BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HM19BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HMF9Db21tYW5kX1JlZywKKwlOSVRJT19HMV9Db21tYW5kX1JlZywKKwlOSVRJT19HMl9Db21tYW5kX1JlZywKKwlOSVRJT19HM19Db21tYW5kX1JlZywKKwlOSVRJT19HMF9IV19TYXZlX1JlZywKKwlOSVRJT19HMV9IV19TYXZlX1JlZywKKwlOSVRJT19HMl9IV19TYXZlX1JlZywKKwlOSVRJT19HM19IV19TYXZlX1JlZywKKwlOSVRJT19HMF9TV19TYXZlX1JlZywKKwlOSVRJT19HMV9TV19TYXZlX1JlZywKKwlOSVRJT19HMl9TV19TYXZlX1JlZywKKwlOSVRJT19HM19TV19TYXZlX1JlZywKKwlOSVRJT19HMF9Nb2RlX1JlZywKKwlOSVRJT19HMV9Nb2RlX1JlZywKKwlOSVRJT19HMl9Nb2RlX1JlZywKKwlOSVRJT19HM19Nb2RlX1JlZywKKwlOSVRJT19HMF9Mb2FkQV9SZWcsCisJTklUSU9fRzFfTG9hZEFfUmVnLAorCU5JVElPX0cyX0xvYWRBX1JlZywKKwlOSVRJT19HM19Mb2FkQV9SZWcsCisJTklUSU9fRzBfTG9hZEJfUmVnLAorCU5JVElPX0cxX0xvYWRCX1JlZywKKwlOSVRJT19HMl9Mb2FkQl9SZWcsCisJTklUSU9fRzNfTG9hZEJfUmVnLAorCU5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWcsCisJTklUSU9fRzFfSW5wdXRfU2VsZWN0X1JlZywKKwlOSVRJT19HMl9JbnB1dF9TZWxlY3RfUmVnLAorCU5JVElPX0czX0lucHV0X1NlbGVjdF9SZWcsCisJTklUSU9fRzBfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzFfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzJfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzNfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzBfU2Vjb25kX0dhdGVfUmVnLAorCU5JVElPX0cxX1NlY29uZF9HYXRlX1JlZywKKwlOSVRJT19HMl9TZWNvbmRfR2F0ZV9SZWcsCisJTklUSU9fRzNfU2Vjb25kX0dhdGVfUmVnLAorCU5JVElPX0cwMV9TdGF0dXNfUmVnLAorCU5JVElPX0cyM19TdGF0dXNfUmVnLAorCU5JVElPX0cwMV9Kb2ludF9SZXNldF9SZWcsCisJTklUSU9fRzIzX0pvaW50X1Jlc2V0X1JlZywKKwlOSVRJT19HMDFfSm9pbnRfU3RhdHVzMV9SZWcsCisJTklUSU9fRzIzX0pvaW50X1N0YXR1czFfUmVnLAorCU5JVElPX0cwMV9Kb2ludF9TdGF0dXMyX1JlZywKKwlOSVRJT19HMjNfSm9pbnRfU3RhdHVzMl9SZWcsCisJTklUSU9fRzBfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzFfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzJfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzNfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzBfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzFfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzJfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzNfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzBfQUJaX1JlZywKKwlOSVRJT19HMV9BQlpfUmVnLAorCU5JVElPX0cwX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcsCisJTklUSU9fRzFfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZywKKwlOSVRJT19HMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnLAorCU5JVElPX0czX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcsCisJTklUSU9fRzBfU3RhdHVzX1JlZywKKwlOSVRJT19HMV9TdGF0dXNfUmVnLAorCU5JVElPX0cyX1N0YXR1c19SZWcsCisJTklUSU9fRzNfU3RhdHVzX1JlZywKKwlOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19HMV9JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19HMl9JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19HM19JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19OdW1fUmVnaXN0ZXJzLAorfTsKKworZW51bSBuaV9ncGN0X3ZhcmlhbnQgeworCW5pX2dwY3RfdmFyaWFudF9lX3NlcmllcywKKwluaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXMsCisJbmlfZ3BjdF92YXJpYW50XzY2MHgKK307CisKK3N0cnVjdCBuaV9ncGN0IHsKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGNvdW50ZXJfaW5kZXg7CisJdW5zaWduZWQgY2hpcF9pbmRleDsKKwl1aW50NjRfdCBjbG9ja19wZXJpb2RfcHM7CS8qIGNsb2NrIHBlcmlvZCBpbiBwaWNvc2Vjb25kcyAqLworCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgeworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CisJdm9pZCAoKndyaXRlX3JlZ2lzdGVyKSAoc3RydWN0IG5pX2dwY3QgKiBjb3VudGVyLCB1bnNpZ25lZCBiaXRzLAorCQllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKTsKKwl1bnNpZ25lZCAoKnJlYWRfcmVnaXN0ZXIpIChzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsCisJCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpOworCWVudW0gbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQ7CisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXJzOworCXVuc2lnbmVkIG51bV9jb3VudGVyczsKKwl1bnNpZ25lZCByZWdzW05JVElPX051bV9SZWdpc3RlcnNdOworCXNwaW5sb2NrX3QgcmVnc19sb2NrOworfTsKKworZXh0ZXJuIHN0cnVjdCBuaV9ncGN0X2RldmljZSAqbmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXZvaWQgKCp3cml0ZV9yZWdpc3RlcikgKHN0cnVjdCBuaV9ncGN0ICogY291bnRlciwgdW5zaWduZWQgYml0cywKKwkJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksCisJdW5zaWduZWQgKCpyZWFkX3JlZ2lzdGVyKSAoc3RydWN0IG5pX2dwY3QgKiBjb3VudGVyLAorCQllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKSwgZW51bSBuaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCwKKwl1bnNpZ25lZCBudW1fY291bnRlcnMpOworZXh0ZXJuIHZvaWQgbmlfZ3BjdF9kZXZpY2VfZGVzdHJveShzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2KTsKK2V4dGVybiB2b2lkIG5pX3Rpb19pbml0X2NvdW50ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpOworZXh0ZXJuIGludCBuaV90aW9fcmluc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitleHRlcm4gaW50IG5pX3Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK2V4dGVybiBpbnQgbmlfdGlvX3dpbnNuKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworZXh0ZXJuIGludCBuaV90aW9fY21kKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyk7CitleHRlcm4gaW50IG5pX3Rpb19jbWR0ZXN0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitleHRlcm4gaW50IG5pX3Rpb19jYW5jZWwoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpOworZXh0ZXJuIHZvaWQgbmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK2V4dGVybiB2b2lkIG5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7CitleHRlcm4gdm9pZCBuaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJaW50ICpnYXRlX2Vycm9yLCBpbnQgKnRjX2Vycm9yLCBpbnQgKnBlcm1fc3RhbGVfZGF0YSwgaW50ICpzdGFsZV9kYXRhKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfZ3BjdCAqc3ViZGV2X3RvX2NvdW50ZXIoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXJldHVybiBzLT5wcml2YXRlOworfQorCisjZW5kaWYgLyogX0NPTUVESV9OSV9USU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb19pbnRlcm5hbC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWIxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvX2ludGVybmFsLmgKQEAgLTAsMCArMSw3NzQgQEAKKy8qCisgICAgZHJpdmVycy9uaV90aW9faW50ZXJuYWwuaAorICAgIEhlYWRlciBmaWxlIGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IGNvZGUgKG5pX3Rpby5jIGFuZAorICAgIG5pX3Rpb2NtZC5jKQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgX0NPTUVESV9OSV9USU9fSU5URVJOQUxfSAorI2RlZmluZSBfQ09NRURJX05JX1RJT19JTlRFUk5BTF9ICisKKyNpbmNsdWRlICJuaV90aW8uaCIKKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfQXV0b2luY3JlbWVudF9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0F1dG9pbmNyZW1lbnRfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfQXV0b2luY3JlbWVudF9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0F1dG9pbmNyZW1lbnRfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Db21tYW5kX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0NvbW1hbmRfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Db21tYW5kX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfQ29tbWFuZF9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0NvbW1hbmRfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyh1bnNpZ25lZAorCWNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfQ291bnRpbmdfTW9kZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0NvdW50aW5nX01vZGVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9Db3VudGluZ19Nb2RlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfQ291bnRpbmdfTW9kZV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0d4eF9Kb2ludF9SZXNldF9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX0pvaW50X1Jlc2V0X1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR3h4X0pvaW50X1N0YXR1czFfUmVnKHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzAxX0pvaW50X1N0YXR1czFfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX0pvaW50X1N0YXR1czFfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HeHhfSm9pbnRfU3RhdHVzMl9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMl9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HMjNfSm9pbnRfU3RhdHVzMl9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0d4eF9TdGF0dXNfUmVnKHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cwMV9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0xvYWRBX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0xvYWRBX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfTG9hZEFfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9Mb2FkQV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0xvYWRBX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfTG9hZEJfUmVnKHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfTG9hZEJfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Mb2FkQl9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0xvYWRCX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfTG9hZEJfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Nb2RlX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX01vZGVfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Nb2RlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfTW9kZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX01vZGVfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9TV19TYXZlX1JlZyhpbnQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9TV19TYXZlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfU1dfU2F2ZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX1NXX1NhdmVfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19TV19TYXZlX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX1NlY29uZF9HYXRlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfU2Vjb25kX0dhdGVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9TZWNvbmRfR2F0ZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX1NlY29uZF9HYXRlX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfRE1BX0NvbmZpZ19SZWcoaW50IGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfRE1BX0NvbmZpZ19SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0RNQV9Db25maWdfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9ETUFfQ29uZmlnX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfRE1BX0NvbmZpZ19SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0RNQV9TdGF0dXNfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0RNQV9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9ETUFfU3RhdHVzX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfRE1BX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0RNQV9TdGF0dXNfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9BQlpfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0FCWl9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0FCWl9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcoaW50CisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9TdGF0dXNfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0ludGVycnVwdF9FbmFibGVfUmVnKGludAorCWNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfSW50ZXJydXB0X0VuYWJsZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9JbnRlcnJ1cHRfRW5hYmxlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfSW50ZXJydXB0X0VuYWJsZV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2VudW0gR2lfQXV0b19JbmNyZW1lbnRfUmVnX0JpdHMgeworCUdpX0F1dG9fSW5jcmVtZW50X01hc2sgPSAweGZmCit9OworCisjZGVmaW5lIEdpX1VwX0Rvd25fU2hpZnQgNQorZW51bSBHaV9Db21tYW5kX1JlZ19CaXRzIHsKKwlHaV9Bcm1fQml0ID0gMHgxLAorCUdpX1NhdmVfVHJhY2VfQml0ID0gMHgyLAorCUdpX0xvYWRfQml0ID0gMHg0LAorCUdpX0Rpc2FybV9CaXQgPSAweDEwLAorCUdpX1VwX0Rvd25fTWFzayA9IDB4MyA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX0Fsd2F5c19Eb3duX0JpdHMgPSAweDAgPDwgR2lfVXBfRG93bl9TaGlmdCwKKwlHaV9BbHdheXNfVXBfQml0cyA9IDB4MSA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX1VwX0Rvd25fSGFyZHdhcmVfSU9fQml0cyA9IDB4MiA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX1VwX0Rvd25fSGFyZHdhcmVfR2F0ZV9CaXRzID0gMHgzIDw8IEdpX1VwX0Rvd25fU2hpZnQsCisJR2lfV3JpdGVfU3dpdGNoX0JpdCA9IDB4ODAsCisJR2lfU3luY2hyb25pemVfR2F0ZV9CaXQgPSAweDEwMCwKKwlHaV9MaXR0bGVfQmlnX0VuZGlhbl9CaXQgPSAweDIwMCwKKwlHaV9CYW5rX1N3aXRjaF9TdGFydF9CaXQgPSAweDQwMCwKKwlHaV9CYW5rX1N3aXRjaF9Nb2RlX0JpdCA9IDB4ODAwLAorCUdpX0JhbmtfU3dpdGNoX0VuYWJsZV9CaXQgPSAweDEwMDAsCisJR2lfQXJtX0NvcHlfQml0ID0gMHgyMDAwLAorCUdpX1NhdmVfVHJhY2VfQ29weV9CaXQgPSAweDQwMDAsCisJR2lfRGlzYXJtX0NvcHlfQml0ID0gMHg4MDAwCit9OworCisjZGVmaW5lIEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0IDUKKyNkZWZpbmUgR2lfSFdfQXJtX1NlbGVjdF9TaGlmdCA4CitlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgeworCUdpX0NvdW50aW5nX01vZGVfTWFzayA9IDB4NywKKwlHaV9Db3VudGluZ19Nb2RlX05vcm1hbF9CaXRzID0gMHgwLAorCUdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVgxX0JpdHMgPSAweDEsCisJR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDJfQml0cyA9IDB4MiwKKwlHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYNF9CaXRzID0gMHgzLAorCUdpX0NvdW50aW5nX01vZGVfVHdvX1B1bHNlX0JpdHMgPSAweDQsCisJR2lfQ291bnRpbmdfTW9kZV9TeW5jX1NvdXJjZV9CaXRzID0gMHg2LAorCUdpX0luZGV4X01vZGVfQml0ID0gMHgxMCwKKwlHaV9JbmRleF9QaGFzZV9NYXNrID0gMHgzIDw8IEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0LAorCUdpX0luZGV4X1BoYXNlX0xvd0FfTG93QiA9IDB4MCA8PCBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCwKKwlHaV9JbmRleF9QaGFzZV9Mb3dBX0hpZ2hCID0gMHgxIDw8IEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0LAorCUdpX0luZGV4X1BoYXNlX0hpZ2hBX0xvd0IgPSAweDIgPDwgR2lfSW5kZXhfUGhhc2VfQml0c2hpZnQsCisJR2lfSW5kZXhfUGhhc2VfSGlnaEFfSGlnaEIgPSAweDMgPDwgR2lfSW5kZXhfUGhhc2VfQml0c2hpZnQsCisJR2lfSFdfQXJtX0VuYWJsZV9CaXQgPSAweDgwLAkvKiBmcm9tIG0tc2VyaWVzIGV4YW1wbGUgY29kZSwgbm90IGRvY3VtZW50ZWQgaW4gNjYweCByZWdpc3RlciBsZXZlbCBtYW51YWwgKi8KKwlHaV82NjB4X0hXX0FybV9TZWxlY3RfTWFzayA9IDB4NyA8PCBHaV9IV19Bcm1fU2VsZWN0X1NoaWZ0LAkvKiBmcm9tIG0tc2VyaWVzIGV4YW1wbGUgY29kZSwgbm90IGRvY3VtZW50ZWQgaW4gNjYweCByZWdpc3RlciBsZXZlbCBtYW51YWwgKi8KKwlHaV82NjB4X1ByZXNjYWxlX1g4X0JpdCA9IDB4MTAwMCwKKwlHaV9NX1Nlcmllc19QcmVzY2FsZV9YOF9CaXQgPSAweDIwMDAsCisJR2lfTV9TZXJpZXNfSFdfQXJtX1NlbGVjdF9NYXNrID0gMHgxZiA8PCBHaV9IV19Bcm1fU2VsZWN0X1NoaWZ0LAorCS8qIG11c3QgYmUgc2V0IGZvciBjbG9ja3Mgb3ZlciA0ME1Ieiwgd2hpY2ggaW5jbHVkZXMgc3luY2hyb25vdXMgY291bnRpbmcgYW5kIHF1YWRyYXR1cmUgbW9kZXMgKi8KKwlHaV82NjB4X0FsdGVybmF0ZV9TeW5jX0JpdCA9IDB4MjAwMCwKKwlHaV9NX1Nlcmllc19BbHRlcm5hdGVfU3luY19CaXQgPSAweDQwMDAsCisJR2lfNjYweF9QcmVzY2FsZV9YMl9CaXQgPSAweDQwMDAsCS8qIGZyb20gbS1zZXJpZXMgZXhhbXBsZSBjb2RlLCBub3QgZG9jdW1lbnRlZCBpbiA2NjB4IHJlZ2lzdGVyIGxldmVsIG1hbnVhbCAqLworCUdpX01fU2VyaWVzX1ByZXNjYWxlX1gyX0JpdCA9IDB4ODAwMCwKK307CisKKyNkZWZpbmUgR2lfU291cmNlX1NlbGVjdF9TaGlmdCAyCisjZGVmaW5lIEdpX0dhdGVfU2VsZWN0X1NoaWZ0IDcKK2VudW0gR2lfSW5wdXRfU2VsZWN0X0JpdHMgeworCUdpX1JlYWRfQWNrbm93bGVkZ2VzX0lycSA9IDB4MSwJLy8gbm90IHByZXNlbnQgb24gNjYweAorCUdpX1dyaXRlX0Fja25vd2xlZGdlc19JcnEgPSAweDIsCS8vIG5vdCBwcmVzZW50IG9uIDY2MHgKKwlHaV9Tb3VyY2VfU2VsZWN0X01hc2sgPSAweDdjLAorCUdpX0dhdGVfU2VsZWN0X01hc2sgPSAweDFmIDw8IEdpX0dhdGVfU2VsZWN0X1NoaWZ0LAorCUdpX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlX0JpdCA9IDB4MTAwMCwKKwlHaV9Pcl9HYXRlX0JpdCA9IDB4MjAwMCwKKwlHaV9PdXRwdXRfUG9sYXJpdHlfQml0ID0gMHg0MDAwLAkvKiBzZXQgdG8gaW52ZXJ0ICovCisJR2lfU291cmNlX1BvbGFyaXR5X0JpdCA9IDB4ODAwMAkvKiBzZXQgdG8gaW52ZXJ0ICovCit9OworCitlbnVtIEdpX01vZGVfQml0cyB7CisJR2lfR2F0aW5nX01vZGVfTWFzayA9IDB4MywKKwlHaV9HYXRpbmdfRGlzYWJsZWRfQml0cyA9IDB4MCwKKwlHaV9MZXZlbF9HYXRpbmdfQml0cyA9IDB4MSwKKwlHaV9SaXNpbmdfRWRnZV9HYXRpbmdfQml0cyA9IDB4MiwKKwlHaV9GYWxsaW5nX0VkZ2VfR2F0aW5nX0JpdHMgPSAweDMsCisJR2lfR2F0ZV9Pbl9Cb3RoX0VkZ2VzX0JpdCA9IDB4NCwJLyogdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHJpc2luZyBlZGdlIGdhdGluZyBtb2RlICovCisJR2lfVHJpZ2dlcl9Nb2RlX2Zvcl9FZGdlX0dhdGVfTWFzayA9IDB4MTgsCisJR2lfRWRnZV9HYXRlX1N0YXJ0c19TdG9wc19CaXRzID0gMHgwLAorCUdpX0VkZ2VfR2F0ZV9TdG9wc19TdGFydHNfQml0cyA9IDB4OCwKKwlHaV9FZGdlX0dhdGVfU3RhcnRzX0JpdHMgPSAweDEwLAorCUdpX0VkZ2VfR2F0ZV9Ob19TdGFydHNfb3JfU3RvcHNfQml0cyA9IDB4MTgsCisJR2lfU3RvcF9Nb2RlX01hc2sgPSAweDYwLAorCUdpX1N0b3Bfb25fR2F0ZV9CaXRzID0gMHgwMCwKKwlHaV9TdG9wX29uX0dhdGVfb3JfVENfQml0cyA9IDB4MjAsCisJR2lfU3RvcF9vbl9HYXRlX29yX1NlY29uZF9UQ19CaXRzID0gMHg0MCwKKwlHaV9Mb2FkX1NvdXJjZV9TZWxlY3RfQml0ID0gMHg4MCwKKwlHaV9PdXRwdXRfTW9kZV9NYXNrID0gMHgzMDAsCisJR2lfT3V0cHV0X1RDX1B1bHNlX0JpdHMgPSAweDEwMCwKKwlHaV9PdXRwdXRfVENfVG9nZ2xlX0JpdHMgPSAweDIwMCwKKwlHaV9PdXRwdXRfVENfb3JfR2F0ZV9Ub2dnbGVfQml0cyA9IDB4MzAwLAorCUdpX0NvdW50aW5nX09uY2VfTWFzayA9IDB4YzAwLAorCUdpX05vX0hhcmR3YXJlX0Rpc2FybV9CaXRzID0gMHgwMDAsCisJR2lfRGlzYXJtX2F0X1RDX0JpdHMgPSAweDQwMCwKKwlHaV9EaXNhcm1fYXRfR2F0ZV9CaXRzID0gMHg4MDAsCisJR2lfRGlzYXJtX2F0X1RDX29yX0dhdGVfQml0cyA9IDB4YzAwLAorCUdpX0xvYWRpbmdfT25fVENfQml0ID0gMHgxMDAwLAorCUdpX0dhdGVfUG9sYXJpdHlfQml0ID0gMHgyMDAwLAorCUdpX0xvYWRpbmdfT25fR2F0ZV9CaXQgPSAweDQwMDAsCisJR2lfUmVsb2FkX1NvdXJjZV9Td2l0Y2hpbmdfQml0ID0gMHg4MDAwCit9OworCisjZGVmaW5lIEdpX1NlY29uZF9HYXRlX1NlbGVjdF9TaGlmdCA3CisvKkZJWE1FOiBtLXNlcmllcyBoYXMgYSBzZWNvbmQgZ2F0ZSBzdWJzZWxlY3QgYml0ICovCisvKkZJWE1FOiBtLXNlcmllcyBzZWNvbmQgZ2F0ZSBzb3VyY2VzIGFyZSB1bmRvY3VtZW50ZWQgKGJ5IE5JKSovCitlbnVtIEdpX1NlY29uZF9HYXRlX0JpdHMgeworCUdpX1NlY29uZF9HYXRlX01vZGVfQml0ID0gMHgxLAorCUdpX1NlY29uZF9HYXRlX1NlbGVjdF9NYXNrID0gMHgxZiA8PCBHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfU2hpZnQsCisJR2lfU2Vjb25kX0dhdGVfUG9sYXJpdHlfQml0ID0gMHgyMDAwLAorCUdpX1NlY29uZF9HYXRlX1N1YnNlbGVjdF9CaXQgPSAweDQwMDAsCS8qIG0tc2VyaWVzIG9ubHkgKi8KKwlHaV9Tb3VyY2VfU3Vic2VsZWN0X0JpdCA9IDB4ODAwMAkvKiBtLXNlcmllcyBvbmx5ICovCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfQml0cyh1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9zZWxlY3QpCit7CisJcmV0dXJuIChzZWNvbmRfZ2F0ZV9zZWxlY3QgPDwgR2lfU2Vjb25kX0dhdGVfU2VsZWN0X1NoaWZ0KSAmCisJCUdpX1NlY29uZF9HYXRlX1NlbGVjdF9NYXNrOworfQorCitlbnVtIEd4eF9TdGF0dXNfQml0cyB7CisJRzBfU2F2ZV9CaXQgPSAweDEsCisJRzFfU2F2ZV9CaXQgPSAweDIsCisJRzBfQ291bnRpbmdfQml0ID0gMHg0LAorCUcxX0NvdW50aW5nX0JpdCA9IDB4OCwKKwlHMF9OZXh0X0xvYWRfU291cmNlX0JpdCA9IDB4MTAsCisJRzFfTmV4dF9Mb2FkX1NvdXJjZV9CaXQgPSAweDIwLAorCUcwX1N0YWxlX0RhdGFfQml0ID0gMHg0MCwKKwlHMV9TdGFsZV9EYXRhX0JpdCA9IDB4ODAsCisJRzBfQXJtZWRfQml0ID0gMHgxMDAsCisJRzFfQXJtZWRfQml0ID0gMHgyMDAsCisJRzBfTm9fTG9hZF9CZXR3ZWVuX0dhdGVzX0JpdCA9IDB4NDAwLAorCUcxX05vX0xvYWRfQmV0d2Vlbl9HYXRlc19CaXQgPSAweDgwMCwKKwlHMF9UQ19FcnJvcl9CaXQgPSAweDEwMDAsCisJRzFfVENfRXJyb3JfQml0ID0gMHgyMDAwLAorCUcwX0dhdGVfRXJyb3JfQml0ID0gMHg0MDAwLAorCUcxX0dhdGVfRXJyb3JfQml0ID0gMHg4MDAwCit9Oworc3RhdGljIGlubGluZSBlbnVtIEd4eF9TdGF0dXNfQml0cyBHaV9Db3VudGluZ19CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9Db3VudGluZ19CaXQ7CisJcmV0dXJuIEcwX0NvdW50aW5nX0JpdDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHeHhfU3RhdHVzX0JpdHMgR2lfQXJtZWRfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfQXJtZWRfQml0OworCXJldHVybiBHMF9Bcm1lZF9CaXQ7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X1N0YXR1c19CaXRzIEdpX05leHRfTG9hZF9Tb3VyY2VfQml0KHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9OZXh0X0xvYWRfU291cmNlX0JpdDsKKwlyZXR1cm4gRzBfTmV4dF9Mb2FkX1NvdXJjZV9CaXQ7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X1N0YXR1c19CaXRzIEdpX1N0YWxlX0RhdGFfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfU3RhbGVfRGF0YV9CaXQ7CisJcmV0dXJuIEcwX1N0YWxlX0RhdGFfQml0OworfQorc3RhdGljIGlubGluZSBlbnVtIEd4eF9TdGF0dXNfQml0cyBHaV9UQ19FcnJvcl9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9UQ19FcnJvcl9CaXQ7CisJcmV0dXJuIEcwX1RDX0Vycm9yX0JpdDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHeHhfU3RhdHVzX0JpdHMgR2lfR2F0ZV9FcnJvcl9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9HYXRlX0Vycm9yX0JpdDsKKwlyZXR1cm4gRzBfR2F0ZV9FcnJvcl9CaXQ7Cit9CisKKy8qIGpvaW50IHJlc2V0IHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfUmVzZXRfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJcmV0dXJuIDB4MSA8PCAoMiArIChjb3VudGVyX2luZGV4ICUgMikpOworfQorCitlbnVtIEd4eF9Kb2ludF9TdGF0dXMyX0JpdHMgeworCUcwX091dHB1dF9CaXQgPSAweDEsCisJRzFfT3V0cHV0X0JpdCA9IDB4MiwKKwlHMF9IV19TYXZlX0JpdCA9IDB4MTAwMCwKKwlHMV9IV19TYXZlX0JpdCA9IDB4MjAwMCwKKwlHMF9QZXJtYW5lbnRfU3RhbGVfQml0ID0gMHg0MDAwLAorCUcxX1Blcm1hbmVudF9TdGFsZV9CaXQgPSAweDgwMDAKK307CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X0pvaW50X1N0YXR1czJfQml0cyBHaV9QZXJtYW5lbnRfU3RhbGVfQml0KHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9QZXJtYW5lbnRfU3RhbGVfQml0OworCXJldHVybiBHMF9QZXJtYW5lbnRfU3RhbGVfQml0OworfQorCitlbnVtIEdpX0RNQV9Db25maWdfUmVnX0JpdHMgeworCUdpX0RNQV9FbmFibGVfQml0ID0gMHgxLAorCUdpX0RNQV9Xcml0ZV9CaXQgPSAweDIsCisJR2lfRE1BX0ludF9CaXQgPSAweDQKK307CisKK2VudW0gR2lfRE1BX1N0YXR1c19SZWdfQml0cyB7CisJR2lfRE1BX1JlYWRiYW5rX0JpdCA9IDB4MjAwMCwKKwlHaV9EUlFfRXJyb3JfQml0ID0gMHg0MDAwLAorCUdpX0RSUV9TdGF0dXNfQml0ID0gMHg4MDAwCit9OworCitlbnVtIEcwMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfQml0cyB7CisJRzBfR2F0ZV9FcnJvcl9Db25maXJtX0JpdCA9IDB4MjAsCisJRzBfVENfRXJyb3JfQ29uZmlybV9CaXQgPSAweDQwCit9OworZW51bSBHMTNfSW50ZXJydXB0X0Fja25vd2xlZGdlX0JpdHMgeworCUcxX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQgPSAweDIsCisJRzFfVENfRXJyb3JfQ29uZmlybV9CaXQgPSAweDQKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEdpX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9HYXRlX0Vycm9yX0NvbmZpcm1fQml0OworCXJldHVybiBHMF9HYXRlX0Vycm9yX0NvbmZpcm1fQml0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9UQ19FcnJvcl9Db25maXJtX0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCWlmIChjb3VudGVyX2luZGV4ICUgMikKKwkJcmV0dXJuIEcxX1RDX0Vycm9yX0NvbmZpcm1fQml0OworCXJldHVybiBHMF9UQ19FcnJvcl9Db25maXJtX0JpdDsKK30KKworLy8gYml0cyB0aGF0IGFyZSB0aGUgc2FtZSBpbiBHMC9HMiBhbmQgRzEvRzMgaW50ZXJydXB0IGFja25vd2xlZGdlIHJlZ2lzdGVycworZW51bSBHeHhfSW50ZXJydXB0X0Fja25vd2xlZGdlX0JpdHMgeworCUdpX1RDX0ludGVycnVwdF9BY2tfQml0ID0gMHg0MDAwLAorCUdpX0dhdGVfSW50ZXJydXB0X0Fja19CaXQgPSAweDgwMDAKK307CisKK2VudW0gR2lfU3RhdHVzX0JpdHMgeworCUdpX0dhdGVfSW50ZXJydXB0X0JpdCA9IDB4NCwKKwlHaV9UQ19CaXQgPSAweDgsCisJR2lfSW50ZXJydXB0X0JpdCA9IDB4ODAwMAorfTsKKworZW51bSBHMDJfSW50ZXJydXB0X0VuYWJsZV9CaXRzIHsKKwlHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlX0JpdCA9IDB4NDAsCisJRzBfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdCA9IDB4MTAwCit9OworZW51bSBHMTNfSW50ZXJydXB0X0VuYWJsZV9CaXRzIHsKKwlHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlX0JpdCA9IDB4MjAwLAorCUcxX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQgPSAweDQwMAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXVuc2lnbmVkIGJpdDsKKworCWlmIChjb3VudGVyX2luZGV4ICUgMikgeworCQliaXQgPSBHMV9HYXRlX0ludGVycnVwdF9FbmFibGVfQml0OworCX0gZWxzZSB7CisJCWJpdCA9IEcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQ7CisJfQorCXJldHVybiBiaXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgdW5zaWduZWQgYml0cywKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCUJVR19PTihyZWcgPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJY291bnRlci0+Y291bnRlcl9kZXYtPndyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGJpdHMsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmVhZF9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCUJVR19PTihyZWcgPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJcmV0dXJuIGNvdW50ZXItPmNvdW50ZXJfZGV2LT5yZWFkX3JlZ2lzdGVyKGNvdW50ZXIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KAorCWNvbnN0IHN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYpCit7CisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV90aW9fc2V0X2JpdHNfdHJhbnNpZW50KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWdpc3Rlcl9pbmRleCwgdW5zaWduZWQgYml0X21hc2ssCisJdW5zaWduZWQgYml0X3ZhbHVlcywgdW5zaWduZWQgdHJhbnNpZW50X2JpdF92YWx1ZXMpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04ocmVnaXN0ZXJfaW5kZXggPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyX2Rldi0+cmVnc19sb2NrLCBmbGFncyk7CisJY291bnRlcl9kZXYtPnJlZ3NbcmVnaXN0ZXJfaW5kZXhdICY9IH5iaXRfbWFzazsKKwljb3VudGVyX2Rldi0+cmVnc1tyZWdpc3Rlcl9pbmRleF0gfD0gKGJpdF92YWx1ZXMgJiBiaXRfbWFzayk7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJY291bnRlcl9kZXYtPnJlZ3NbcmVnaXN0ZXJfaW5kZXhdIHwgdHJhbnNpZW50X2JpdF92YWx1ZXMsCisJCXJlZ2lzdGVyX2luZGV4KTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlcl9kZXYtPnJlZ3NfbG9jaywgZmxhZ3MpOworfQorCisvKiBuaV90aW9fc2V0X2JpdHMoICkgaXMgZm9yIHNhZmVseSB3cml0aW5nIHRvIHJlZ2lzdGVycyB3aG9zZSBiaXRzIG1heSBiZQordHdpZGRsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIG9yIHdob3NlIHNvZnR3YXJlIGNvcHkgbWF5IGJlIHJlYWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisqLworc3RhdGljIGlubGluZSB2b2lkIG5pX3Rpb19zZXRfYml0cyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnaXN0ZXJfaW5kZXgsIHVuc2lnbmVkIGJpdF9tYXNrLAorCXVuc2lnbmVkIGJpdF92YWx1ZXMpCit7CisJbmlfdGlvX3NldF9iaXRzX3RyYW5zaWVudChjb3VudGVyLCByZWdpc3Rlcl9pbmRleCwgYml0X21hc2ssIGJpdF92YWx1ZXMsCisJCTB4MCk7Cit9CisKKy8qIG5pX3Rpb19nZXRfc29mdF9jb3B5KCApIGlzIGZvciBzYWZlbHkgcmVhZGluZyB0aGUgc29mdHdhcmUgY29weSBvZiBhIHJlZ2lzdGVyCit3aG9zZSBiaXRzIG1pZ2h0IGJlIG1vZGlmaWVkIGluIGludGVycnVwdCBjb250ZXh0LCBvciB3aG9zZSBzb2Z0d2FyZSBjb3B5CittaWdodCBuZWVkIHRvIGJlIHJlYWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBuaV90aW9fZ2V0X3NvZnRfY29weShjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnaXN0ZXJfaW5kZXgpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgdmFsdWU7CisKKwlCVUdfT04ocmVnaXN0ZXJfaW5kZXggPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyX2Rldi0+cmVnc19sb2NrLCBmbGFncyk7CisJdmFsdWUgPSBjb3VudGVyX2Rldi0+cmVnc1tyZWdpc3Rlcl9pbmRleF07CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXJfZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK2ludCBuaV90aW9fYXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgYXJtLCB1bnNpZ25lZCBzdGFydF90cmlnZ2VyKTsKK2ludCBuaV90aW9fc2V0X2dhdGVfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBnYXRlX2luZGV4LAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSk7CisKKyNlbmRpZiAvKiBfQ09NRURJX05JX1RJT19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhMjZlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW9jbWQuYwpAQCAtMCwwICsxLDUyMyBAQAorLyoKKyAgY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMKKyAgQ29tbWFuZCBzdXBwb3J0IGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMKKworICBDb3B5cmlnaHQgKEMpIDIwMDYgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCitEcml2ZXI6IG5pX3Rpb2NtZAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycyBjb21tYW5kIHN1cHBvcnQKK0RldmljZXM6CitBdXRob3I6IEouUC4gTWVsbG9yIDxqcG1lbGxvckByb3NlLWh1bG1hbi5lZHU+LAorCUhlcm1hbi5CcnV5bmluY2t4QG1lY2gua3VsZXV2ZW4uYWMuYmUsCisJV2ltLk1lZXVzc2VuQG1lY2gua3VsZXV2ZW4uYWMuYmUsCisJS2xhYXMuR2FkZXluZUBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK1VwZGF0ZWQ6IEZyaSwgMTEgQXByIDIwMDggMTI6MzI6MzUgKzAxMDAKK1N0YXR1czogd29ya3MKKworVGhpcyBtb2R1bGUgaXMgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kLXVzZXJzLiAgUmF0aGVyLCBpdAoraXMgdXNlZCBieSBvdGhlciBkcml2ZXJzIChmb3IgZXhhbXBsZSBuaV82NjB4IGFuZCBuaV9wY2ltaW8pCit0byBwcm92aWRlIGNvbW1hbmQgc3VwcG9ydCBmb3IgTkkncyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMuCitJdCB3YXMgb3JpZ2luYWxseSBzcGxpdCBvdXQgb2YgbmlfdGlvLmMgdG8gc3RvcCB0aGUgJ25pX3RpbycKK21vZHVsZSBkZXBlbmRpbmcgb24gdGhlICdtaXRlJyBtb2R1bGUuCisKK1JlZmVyZW5jZXM6CitEQVEgNjYweCBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCAgKE5JIDM3MDUwNUEtMDEpCitEQVEgNjYwMS82NjAyIFVzZXIgTWFudWFsIChOSSAzMjIxMzdCLTAxKQorMzQwOTM0Yi5wZGYgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCisqLworLyoKK1RPRE86CisJU3VwcG9ydCB1c2Ugb2YgYm90aCBiYW5rcyBYIGFuZCBZCisqLworCisjaW5jbHVkZSAibmlfdGlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAibWl0ZS5oIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgPGNvbWVkaUBjb21lZGkub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgY29tbWFuZCBzdXBwb3J0IGZvciBOSSBnZW5lcmFsLXB1cnBvc2UgY291bnRlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHZvaWQgbmlfdGlvX2NvbmZpZ3VyZV9kbWEoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHNob3J0IGVuYWJsZSwKKwlzaG9ydCByZWFkX25vdF93cml0ZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJdW5zaWduZWQgaW5wdXRfc2VsZWN0X2JpdHMgPSAwOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAocmVhZF9ub3Rfd3JpdGUpIHsKKwkJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX1JlYWRfQWNrbm93bGVkZ2VzX0lycTsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX1dyaXRlX0Fja25vd2xlZGdlc19JcnE7CisJCX0KKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX1JlYWRfQWNrbm93bGVkZ2VzX0lycSB8IEdpX1dyaXRlX0Fja25vd2xlZGdlc19JcnEsCisJCWlucHV0X3NlbGVjdF9iaXRzKTsKKwlzd2l0Y2ggKGNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXsKKwkJCXVuc2lnbmVkIGdpX2RtYV9jb25maWdfYml0cyA9IDA7CisKKwkJCWlmIChlbmFibGUpIHsKKwkJCQlnaV9kbWFfY29uZmlnX2JpdHMgfD0gR2lfRE1BX0VuYWJsZV9CaXQ7CisJCQkJZ2lfZG1hX2NvbmZpZ19iaXRzIHw9IEdpX0RNQV9JbnRfQml0OworCQkJfQorCQkJaWYgKHJlYWRfbm90X3dyaXRlID09IDApIHsKKwkJCQlnaV9kbWFfY29uZmlnX2JpdHMgfD0gR2lfRE1BX1dyaXRlX0JpdDsKKwkJCX0KKwkJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJCU5JVElPX0dpX0RNQV9Db25maWdfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJCUdpX0RNQV9FbmFibGVfQml0IHwgR2lfRE1BX0ludF9CaXQgfAorCQkJCUdpX0RNQV9Xcml0ZV9CaXQsIGdpX2RtYV9jb25maWdfYml0cyk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pX3Rpb19pbnB1dF9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisKKwlCVUdfT04oY291bnRlciA9PSBOVUxMKTsKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4pCisJCW1pdGVfZG1hX2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCWVsc2UKKwkJcmV0dmFsID0gLUVJTzsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IG5pX3Rpb19hcm0oY291bnRlciwgMSwgTklfR1BDVF9BUk1fSU1NRURJQVRFKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19pbnB1dF9jbWQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiB3cml0ZSBhbGxvYyB0aGUgZW50aXJlIGJ1ZmZlciAqLworCWNvbWVkaV9idWZfd3JpdGVfYWxsb2MoYXN5bmMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CisJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfSU5QVVQ7CisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCW1pdGVfcHJlcF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCAzMiwgMzIpOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJbWl0ZV9wcmVwX2RtYShjb3VudGVyLT5taXRlX2NoYW4sIDE2LCAzMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX0NvbW1hbmRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9TYXZlX1RyYWNlX0JpdCwgMCk7CisJbmlfdGlvX2NvbmZpZ3VyZV9kbWEoY291bnRlciwgMSwgMSk7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19OT1c6CisJCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJbWl0ZV9kbWFfYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJCXJldHZhbCA9IG5pX3Rpb19hcm0oY291bnRlciwgMSwgTklfR1BDVF9BUk1fSU1NRURJQVRFKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0lOVDoKKwkJYXN5bmMtPmludHRyaWcgPSAmbmlfdGlvX2lucHV0X2ludHRyaWc7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJbWl0ZV9kbWFfYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJCXJldHZhbCA9IG5pX3Rpb19hcm0oY291bnRlciwgMSwgY21kLT5zdGFydF9hcmcpOworCWNhc2UgVFJJR19PVEhFUjoKKwkJYXN5bmMtPmludHRyaWcgPSBOVUxMOworCQltaXRlX2RtYV9hcm0oY291bnRlci0+bWl0ZV9jaGFuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19vdXRwdXRfY21kKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKK3sKKwlydF9wcmludGsoIm5pX3Rpbzogb3V0cHV0IGNvbW1hbmRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXG4iKTsKKwlyZXR1cm4gLUVOT1RTVVBQOworCisJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfT1VUUFVUOworCW1pdGVfcHJlcF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCAzMiwgMzIpOworCW5pX3Rpb19jb25maWd1cmVfZG1hKGNvdW50ZXIsIDEsIDApOworCW1pdGVfZG1hX2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCXJldHVybiBuaV90aW9fYXJtKGNvdW50ZXIsIDEsIE5JX0dQQ1RfQVJNX0lNTUVESUFURSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX2NtZF9zZXR1cChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWludCBzZXRfZ2F0ZV9zb3VyY2UgPSAwOworCXVuc2lnbmVkIGdhdGVfc291cmNlOworCWludCByZXR2YWwgPSAwOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJc2V0X2dhdGVfc291cmNlID0gMTsKKwkJZ2F0ZV9zb3VyY2UgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQlzZXRfZ2F0ZV9zb3VyY2UgPSAxOworCQlnYXRlX3NvdXJjZSA9IGNtZC0+Y29udmVydF9hcmc7CisJfQorCWlmIChzZXRfZ2F0ZV9zb3VyY2UpIHsKKwkJcmV0dmFsID0gbmlfdGlvX3NldF9nYXRlX3NyYyhjb3VudGVyLCAwLCBnYXRlX3NvdXJjZSk7CisJfQorCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCU5JVElPX0dpX0ludGVycnVwdF9FbmFibGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJR2lfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgbmlfdGlvX2NtZChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY291bnRlci0+bWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJcnRfcHJpbnRrCisJCQkoIm5pX3RpbzogY29tbWFuZHMgb25seSBzdXBwb3J0ZWQgd2l0aCBETUEuICBJbnRlcnJ1cHQtZHJpdmVuIGNvbW1hbmRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXG4iKTsKKwkJcmV0dmFsID0gLUVJTzsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBuaV90aW9fY21kX3NldHVwKGNvdW50ZXIsIGFzeW5jKTsKKwkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQlpZiAoY21kLT5mbGFncyAmIENNREZfV1JJVEUpIHsKKwkJCQlyZXR2YWwgPSBuaV90aW9fb3V0cHV0X2NtZChjb3VudGVyLCBhc3luYyk7CisJCQl9IGVsc2UgeworCQkJCXJldHZhbCA9IG5pX3Rpb19pbnB1dF9jbWQoY291bnRlciwgYXN5bmMpOworCQkJfQorCQl9CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IG5pX3Rpb19jbWR0ZXN0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBzb3VyY2VzOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCXNvdXJjZXMgPSBUUklHX05PVyB8IFRSSUdfSU5UIHwgVFJJR19PVEhFUjsKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlci0+Y291bnRlcl9kZXYpKQorCQlzb3VyY2VzIHw9IFRSSUdfRVhUOworCWNtZC0+c3RhcnRfc3JjICY9IHNvdXJjZXM7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19FWFQgfCBUUklHX09USEVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCXNvdXJjZXMgPSBUUklHX05PVyB8IFRSSUdfRVhUIHwgVFJJR19PVEhFUjsKKwljbWQtPmNvbnZlcnRfc3JjICY9IHNvdXJjZXM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZS4uLiAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmCisJCWNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UICYmCisJCWNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfT1RIRVIpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX09USEVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX09USEVSICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKwkvKiAuLi4gYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV90aW9fY2FuY2VsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwluaV90aW9fYXJtKGNvdW50ZXIsIDAsIDApOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4pIHsKKwkJbWl0ZV9kbWFfZGlzYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJbmlfdGlvX2NvbmZpZ3VyZV9kbWEoY291bnRlciwgMCwgMCk7CisKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW50ZXJydXB0X0VuYWJsZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCksIDB4MCk7CisJcmV0dXJuIDA7Cit9CisKKwkvKiBEdXJpbmcgYnVmZmVyZWQgaW5wdXQgY291bnRlciBvcGVyYXRpb24gZm9yIGUtc2VyaWVzLCB0aGUgZ2F0ZSBpbnRlcnJ1cHQgaXMgYWNrZWQKKwkgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBkbWEgY29udHJvbGxlciwgZHVlIHRvIHRoZSBHaV9SZWFkL1dyaXRlX0Fja25vd2xlZGdlc19JUlEgYml0cworCSAgIGluIHRoZSBpbnB1dCBzZWxlY3QgcmVnaXN0ZXIuICAqLworc3RhdGljIGludCBzaG91bGRfYWNrX2dhdGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAoY291bnRlci0+Y291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgkvLyBub3Qgc3VyZSBpZiA2NjB4IHJlYWxseSBzdXBwb3J0cyBnYXRlIGludGVycnVwdHMgKHRoZSBiaXRzIGFyZSBub3QgbGlzdGVkIGluIHJlZ2lzdGVyLWxldmVsIG1hbnVhbCkKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwkJeworCQkJaWYgKGNvdW50ZXItPm1pdGVfY2hhbiA9PSBOVUxMIHx8CisJCQkJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgIT0gQ09NRURJX0lOUFVUIHx8CisJCQkJKG1pdGVfZG9uZShjb3VudGVyLT5taXRlX2NoYW4pKSkgeworCQkJCXJldHZhbCA9IDE7CisJCQl9CisJCX0KKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgbmlfdGlvX2Fja25vd2xlZGdlX2FuZF9jb25maXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgKmdhdGVfZXJyb3IsCisJaW50ICp0Y19lcnJvciwgaW50ICpwZXJtX3N0YWxlX2RhdGEsIGludCAqc3RhbGVfZGF0YSkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCBneHhfc3RhdHVzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HeHhfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgZ2lfc3RhdHVzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HaV9TdGF0dXNfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwl1bnNpZ25lZCBhY2sgPSAwOworCisJaWYgKGdhdGVfZXJyb3IpCisJCSpnYXRlX2Vycm9yID0gMDsKKwlpZiAodGNfZXJyb3IpCisJCSp0Y19lcnJvciA9IDA7CisJaWYgKHBlcm1fc3RhbGVfZGF0YSkKKwkJKnBlcm1fc3RhbGVfZGF0YSA9IDA7CisJaWYgKHN0YWxlX2RhdGEpCisJCSpzdGFsZV9kYXRhID0gMDsKKworCWlmIChneHhfc3RhdHVzICYgR2lfR2F0ZV9FcnJvcl9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpIHsKKwkJYWNrIHw9IEdpX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJCWlmIChnYXRlX2Vycm9yKSB7CisJCQkvKjY2MHggZG9uJ3Qgc3VwcG9ydCBhdXRvbWF0aWMgYWNrbm93bGVkZ2VtZW50IG9mIGdhdGUgaW50ZXJydXB0IHZpYSBkbWEgcmVhZC93cml0ZQorCQkJICAgYW5kIHJlcG9ydCBib2d1cyBnYXRlIGVycm9ycyAqLworCQkJaWYgKGNvdW50ZXItPmNvdW50ZXJfZGV2LT52YXJpYW50ICE9CisJCQkJbmlfZ3BjdF92YXJpYW50XzY2MHgpIHsKKwkJCQkqZ2F0ZV9lcnJvciA9IDE7CisJCQl9CisJCX0KKwl9CisJaWYgKGd4eF9zdGF0dXMgJiBHaV9UQ19FcnJvcl9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpIHsKKwkJYWNrIHw9IEdpX1RDX0Vycm9yX0NvbmZpcm1fQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCQlpZiAodGNfZXJyb3IpCisJCQkqdGNfZXJyb3IgPSAxOworCX0KKwlpZiAoZ2lfc3RhdHVzICYgR2lfVENfQml0KSB7CisJCWFjayB8PSBHaV9UQ19JbnRlcnJ1cHRfQWNrX0JpdDsKKwl9CisJaWYgKGdpX3N0YXR1cyAmIEdpX0dhdGVfSW50ZXJydXB0X0JpdCkgeworCQlpZiAoc2hvdWxkX2Fja19nYXRlKGNvdW50ZXIpKQorCQkJYWNrIHw9IEdpX0dhdGVfSW50ZXJydXB0X0Fja19CaXQ7CisJfQorCWlmIChhY2spCisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGFjaywKKwkJCU5JVElPX0dpX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCkpOworCWlmIChuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCkpICYgR2lfTG9hZGluZ19Pbl9HYXRlX0JpdCkgeworCQlpZiAoZ3h4X3N0YXR1cyAmIEdpX1N0YWxlX0RhdGFfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCQlpZiAoc3RhbGVfZGF0YSkKKwkJCQkqc3RhbGVfZGF0YSA9IDE7CisJCX0KKwkJaWYgKHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJCQlOSVRJT19HeHhfSm9pbnRfU3RhdHVzMl9SZWcoY291bnRlci0+CisJCQkJCWNvdW50ZXJfaW5kZXgpKSAmCisJCQlHaV9QZXJtYW5lbnRfU3RhbGVfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCQlydF9wcmludGsoIiVzOiBHaV9QZXJtYW5lbnRfU3RhbGVfRGF0YSBkZXRlY3RlZC5cbiIsCisJCQkJX19GVU5DVElPTl9fKTsKKwkJCWlmIChwZXJtX3N0YWxlX2RhdGEpCisJCQkJKnBlcm1fc3RhbGVfZGF0YSA9IDE7CisJCX0KKwl9Cit9CisKK3ZvaWQgbmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBncGN0X21pdGVfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGdhdGVfZXJyb3I7CisJaW50IHRjX2Vycm9yOworCWludCBwZXJtX3N0YWxlX2RhdGE7CisKKwluaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oY291bnRlciwgJmdhdGVfZXJyb3IsICZ0Y19lcnJvciwKKwkJJnBlcm1fc3RhbGVfZGF0YSwgTlVMTCk7CisJaWYgKGdhdGVfZXJyb3IpIHsKKwkJcnRfcHJpbnRrKCIlczogR2lfR2F0ZV9FcnJvciBkZXRlY3RlZC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCX0KKwlpZiAocGVybV9zdGFsZV9kYXRhKSB7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCX0KKwlzd2l0Y2ggKGNvdW50ZXItPmNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJaWYgKHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJCQlOSVRJT19HaV9ETUFfU3RhdHVzX1JlZyhjb3VudGVyLT4KKwkJCQkJY291bnRlcl9pbmRleCkpICYgR2lfRFJRX0Vycm9yX0JpdCkgeworCQkJcnRfcHJpbnRrKCIlczogR2lfRFJRX0Vycm9yIGRldGVjdGVkLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCQl9CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlicmVhazsKKwl9CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJaWYgKGNvdW50ZXItPm1pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJZ3BjdF9taXRlX3N0YXR1cyA9IG1pdGVfZ2V0X3N0YXR1cyhjb3VudGVyLT5taXRlX2NoYW4pOworCWlmIChncGN0X21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCWNvdW50ZXItPm1pdGVfY2hhbi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCU1JVEVfQ0hPUihjb3VudGVyLT5taXRlX2NoYW4tPmNoYW5uZWwpKTsKKwl9CisJbWl0ZV9zeW5jX2lucHV0X2RtYShjb3VudGVyLT5taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIG5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJY291bnRlci0+bWl0ZV9jaGFuID0gbWl0ZV9jaGFuOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG5pX3Rpb2NtZF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChuaV90aW9jbWRfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbmlfdGlvY21kX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7Cit9CisKK21vZHVsZV9leGl0KG5pX3Rpb2NtZF9jbGVhbnVwX21vZHVsZSk7CisKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19jbWQpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2NtZHRlc3QpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2NhbmNlbCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faGFuZGxlX2ludGVycnVwdCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fc2V0X21pdGVfY2hhbm5lbCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDI1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9wY2w3MTEuYworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBQQy1MYWJDYXJkIFBDTC03MTEgYW5kIEFkU3lzIEFDTC04MTEyCisgICBhbmQgY29tcGF0aWJsZXMKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgSmFubmUgSmFsa2FuZW4gPGphbGthbmVuQGNzLmh1dC5maT4KKyAgIEVyaWMgQnVubiA8ZWJ1QGNzLmh1dC5maT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBwY2w3MTEKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTcxMSBhbmQgNzExYiwgQURMaW5rIEFDTC04MTEyCitBdXRob3I6IGRzLCBKYW5uZSBKYWxrYW5lbiA8amFsa2FuZW5AY3MuaHV0LmZpPiwgRXJpYyBCdW5uIDxlYnVAY3MuaHV0LmZpPgorU3RhdHVzOiBtb3N0bHkgY29tcGxldGUKK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC03MTEgKHBjbDcxMSksIFBDTC03MTFCIChwY2w3MTFiKSwKKyAgW0FkTGlua10gQUNMLTgxMTJIRyAoYWNsODExMmhnKSwgQUNMLTgxMTJERyAoYWNsODExMmRnKQorCitTaW5jZSB0aGVzZSBib2FyZHMgZG8gbm90IGhhdmUgRE1BIG9yIEZJRk9zLCBvbmx5IGltbWVkaWF0ZSBtb2RlIGlzCitzdXBwb3J0ZWQuCisKKyovCisKKy8qCisgICBEYXZlIEFuZHJ1Y3p5ayA8ZGF2ZUB0ZWNoLmJ1ZmZhbG9zdGF0ZS5lZHU+IGFsc28gd3JvdGUgYQorICAgZHJpdmVyIGZvciB0aGUgUENMLTcxMS4gIEkgdXNlZCBhIGZldyBpZGVhcyBmcm9tIGhpcyBkcml2ZXIKKyAgIGhlcmUuICBIaXMgZHJpdmVyIGFsc28gaGFzIG1vcmUgY29tbWVudHMsIGlmIHlvdSBhcmUKKyAgIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBkcml2ZXIgd29ya3MuCisgICBodHRwOi8vdGVjaC5idWZmYWxvc3RhdGUuZWR1L35kYXZlL2RyaXZlci8KKworICAgVGhlIEFDTC04MTEyIGRyaXZlciB3YXMgaGFja2VkIGZyb20gdGhlIHNvdXJjZXMgb2YgdGhlIFBDTC03MTEKKyAgIGRyaXZlciAodGhlIDc0NCBjaGlwIHVzZWQgb24gdGhlIDgxMTIgaXMgYWxtb3N0IHRoZSBzYW1lIGFzCisgICB0aGUgNzExYiBjaGlwLCBidXQgaXQgaGFzIG1vcmUgSS9PIGNoYW5uZWxzKSBieQorICAgSmFubmUgSmFsa2FuZW4gKGphbGthbmVuQGNzLmh1dC5maSkgYW5kCisgICBFcmlrIEJ1bm4gKGVidUBjcy5odXQuZmkpLiAgUmVtZXJnZWQgd2l0aCB0aGUgUENMLTcxMSBkcml2ZXIKKyAgIGJ5IGRzLgorCisgICBbYWNsLTgxMTJdCisgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIFRSSUdOT1cgYW5kIFRSSUdDTEssCisgICBidXQgZG9lcyBub3QgeWV0IHN1cHBvcnQgRE1BIHRyYW5zZmVycy4gIEl0IGFsc28gc3VwcG9ydHMKKyAgIGJvdGggaGlnaCAoSEcpIGFuZCBsb3cgKERHKSB2ZXJzaW9ucyBvZiB0aGUgY2FyZCwgdGhvdWdoCisgICB0aGUgSEcgdmVyc2lvbiBoYXMgYmVlbiB1bnRlc3RlZC4KKworICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgUENMNzExX1NJWkUgMTYKKworI2RlZmluZSBQQ0w3MTFfQ1RSMCAwCisjZGVmaW5lIFBDTDcxMV9DVFIxIDEKKyNkZWZpbmUgUENMNzExX0NUUjIgMgorI2RlZmluZSBQQ0w3MTFfQ1RSQ1RMIDMKKyNkZWZpbmUgUENMNzExX0FEX0xPIDQKKyNkZWZpbmUgUENMNzExX0RBMF9MTyA0CisjZGVmaW5lIFBDTDcxMV9BRF9ISSA1CisjZGVmaW5lIFBDTDcxMV9EQTBfSEkgNQorI2RlZmluZSBQQ0w3MTFfRElfTE8gNgorI2RlZmluZSBQQ0w3MTFfREExX0xPIDYKKyNkZWZpbmUgUENMNzExX0RJX0hJIDcKKyNkZWZpbmUgUENMNzExX0RBMV9ISSA3CisjZGVmaW5lIFBDTDcxMV9DTFJJTlRSIDgKKyNkZWZpbmUgUENMNzExX0dBSU4gOQorI2RlZmluZSBQQ0w3MTFfTVVYIDEwCisjZGVmaW5lIFBDTDcxMV9NT0RFIDExCisjZGVmaW5lIFBDTDcxMV9TT0ZUVFJJRyAxMgorI2RlZmluZSBQQ0w3MTFfRE9fTE8gMTMKKyNkZWZpbmUgUENMNzExX0RPX0hJIDE0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w3MTFiX2FpID0geyA1LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlCSVBfUkFOR0UoMC4zMTI1KQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmhnX2FpID0geyAxMiwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hY2w4MTEyZGdfYWkgPSB7IDksIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgxMCkKKwl9Cit9OworCisvKgorICogZmxhZ3MKKyAqLworCisjZGVmaW5lIFBDTDcxMV9USU1FT1VUIDEwMAorI2RlZmluZSBQQ0w3MTFfRFJEWSAweDEwCisKK3N0YXRpYyBjb25zdCBpbnQgaTgyNTNfb3NjX2Jhc2UgPSA1MDA7CS8qIDIgTWh6ICovCisKK3N0cnVjdCBwY2w3MTFfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaXNfcGNsNzExYjsKKwlpbnQgaXNfODExMjsKKwlpbnQgaXNfZGc7CisJaW50IG5fcmFuZ2VzOworCWludCBuX2FpY2hhbjsKKwlpbnQgbl9hb2NoYW47CisJaW50IG1heGlycTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdHlwZTsKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2w3MTFfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicGNsNzExIiwgMCwgMCwgMCwgNSwgOCwgMSwgMCwgJnJhbmdlX2JpcG9sYXI1fSwKKwl7InBjbDcxMWIiLCAxLCAwLCAwLCA1LCA4LCAxLCA3LCAmcmFuZ2VfcGNsNzExYl9haX0sCisJeyJhY2w4MTEyaGciLCAwLCAxLCAwLCAxMiwgMTYsIDIsIDE1LCAmcmFuZ2VfYWNsODExMmhnX2FpfSwKKwl7ImFjbDgxMTJkZyIsIDAsIDEsIDEsIDksIDE2LCAyLCAxNSwgJnJhbmdlX2FjbDgxMTJkZ19haX0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsNzExX2JvYXJkKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2w3MTFfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIGludCBwY2w3MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDcxMSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w3MTEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDcxMV9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsNzExX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w3MTFfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MTEpOworCitzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgeworCisJaW50IGJvYXJkOworCWludCBhZGNoYW47CisJaW50IG50cmlnOworCWludCBhaXBbOF07CisJaW50IG1vZGU7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworCXVuc2lnbmVkIGludCBkaXZpc29yMTsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2w3MTFfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGlycXJldHVybl90IHBjbDcxMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgbG8sIGhpOworCWludCBkYXRhOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwloaSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDcxMV9BRF9ISSk7CisJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfTE8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ0xSSU5UUik7CisKKwlkYXRhID0gKGhpIDw8IDgpIHwgbG87CisKKwkvKiBGSVhNRSEgTm90aGluZyBlbHNlIHNldHMgbnRyaWchICovCisJaWYgKCEoLS1kZXZwcml2LT5udHJpZykpIHsKKwkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxMTIpIHsKKwkJCW91dGIoMSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfTU9ERSk7CisJCX0gZWxzZSB7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOworCQl9CisKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjbDcxMV9zZXRfY2hhbmdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuKQoreworCWludCBjaGFuX3JlZ2lzdGVyOworCisJb3V0YihDUl9SQU5HRShjaGFuKSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfR0FJTik7CisKKwljaGFuX3JlZ2lzdGVyID0gQ1JfQ0hBTihjaGFuKTsKKworCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKSB7CisKKwkJLyoKKwkJICogIFNldCB0aGUgY29ycmVjdCBjaGFubmVsLiAgVGhlIHR3byBjaGFubmVsIGJhbmtzIGFyZSBzd2l0Y2hlZAorCQkgKiAgdXNpbmcgdGhlIG1hc2sgdmFsdWUuCisJCSAqICBOQjogVG8gdXNlIGRpZmZlcmVudGlhbCBjaGFubmVscywgeW91IHNob3VsZCB1c2UgbWFzayA9IDB4MzAsCisJCSAqICBidXQgSSBoYXZlbid0IHdyaXR0ZW4gdGhlIHN1cHBvcnQgZm9yIHRoaXMgeWV0LiAvSkoKKwkJICovCisKKwkJaWYgKGNoYW5fcmVnaXN0ZXIgPj0gOCkgeworCQkJY2hhbl9yZWdpc3RlciA9IDB4MjAgfCAoY2hhbl9yZWdpc3RlciAmIDB4Nyk7CisJCX0gZWxzZSB7CisJCQljaGFuX3JlZ2lzdGVyIHw9IDB4MTA7CisJCX0KKwl9IGVsc2UgeworCQlvdXRiKGNoYW5fcmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgUENMNzExX01VWCk7CisJfQorfQorCitzdGF0aWMgaW50IHBjbDcxMV9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgaGksIGxvOworCisJcGNsNzExX3NldF9jaGFuZ2FpbihkZXYsIGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyoKKwkJICogIFdyaXRlIHRoZSBjb3JyZWN0IG1vZGUgKHNvZnR3YXJlIHBvbGxpbmcpIGFuZCBzdGFydCBwb2xsaW5nIGJ5IHdyaXRpbmcKKwkJICogIHRvIHRoZSB0cmlnZ2VyIHJlZ2lzdGVyCisJCSAqLworCQlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOworCisJCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKSB7CisJCX0gZWxzZSB7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX1NPRlRUUklHKTsKKwkJfQorCisJCWkgPSBQQ0w3MTFfVElNRU9VVDsKKwkJd2hpbGUgKC0taSkgeworCQkJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfSEkpOworCQkJaWYgKCEoaGkgJiBQQ0w3MTFfRFJEWSkpCisJCQkJZ290byBvazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJcnRfcHJpbnRrKCJjb21lZGklZDogcGNsNzExOiBBL0QgdGltZW91dFxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRVRJTUU7CisKKwkgICAgICBvazoKKwkJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfTE8pOworCisJCWRhdGFbbl0gPSAoKGhpICYgMHhmKSA8PCA4KSB8IGxvOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHBjbDcxMV9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IHRtcDsKKwlpbnQgZXJyID0gMDsKKworCS8qIHN0ZXAgMSAqLworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDIgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMyAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisjZGVmaW5lIE1BWF9TUEVFRCAxMDAwCisjZGVmaW5lIFRJTUVSX0JBU0UgMTAwCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgTUFYX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBpZ25vcmUgKi8KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNCAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSZkZXZwcml2LT5kaXZpc29yMSwgJmRldnByaXYtPmRpdmlzb3IyLAorCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDcxMV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgdGltZXIxLCB0aW1lcjI7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJcGNsNzExX3NldF9jaGFuZ2FpbihkZXYsIGNtZC0+Y2hhbmxpc3RbMF0pOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKgorCQkgKiAgU2V0IHRpbWVycworCQkgKiAgICAgIHRpbWVyIGNoaXAgaXMgYW4gODI1Mywgd2l0aCB0aW1lcnMgMSBhbmQgMgorCQkgKiAgICAgIGNhc2NhZGVkCisJCSAqICAweDc0ID0gU2VsZWN0IENvdW50ZXIgMSB8IExTQi9NU0IgfCBNb2RlPTIgfCBCaW5hcnkKKwkJICogICAgICAgIE1vZGUgMiA9IFJhdGUgZ2VuZXJhdG9yCisJCSAqCisJCSAqICAweGI0ID0gU2VsZWN0IENvdW50ZXIgMiB8IExTQi9NU0IgfCBNb2RlPTIgfCBCaW5hcnkKKwkJICovCisKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihpODI1M19vc2NfYmFzZSwgJnRpbWVyMSwgJnRpbWVyMiwKKwkJCSZjbWQtPnNjYW5fYmVnaW5fYXJnLCBUUklHX1JPVU5EX05FQVJFU1QpOworCisJCW91dGIoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSQ1RMKTsKKwkJb3V0Yih0aW1lcjEgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9DVFIxKTsKKwkJb3V0YigodGltZXIxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSMSk7CisJCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSQ1RMKTsKKwkJb3V0Yih0aW1lcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9DVFIyKTsKKwkJb3V0YigodGltZXIyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSMik7CisKKwkJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzIChqdXN0IGluIGNhc2UpICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ0xSSU5UUik7CisKKwkJLyoKKwkJICogIFNldCBtb2RlIHRvIElSUSB0cmFuc2ZlcgorCQkgKi8KKwkJb3V0YihkZXZwcml2LT5tb2RlIHwgNiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfTU9ERSk7CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQlvdXRiKGRldnByaXYtPm1vZGUgfCAzLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgIGFuYWxvZyBvdXRwdXQKKyovCitzdGF0aWMgaW50IHBjbDcxMV9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXRiKChkYXRhW25dICYgMHhmZiksCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMNzExX0RBMV9MTyA6IFBDTDcxMV9EQTBfTE8pKTsKKwkJb3V0YigoZGF0YVtuXSA+PiA4KSwKKwkJCWRldi0+aW9iYXNlICsgKGNoYW4gPyBQQ0w3MTFfREExX0hJIDogUENMNzExX0RBMF9ISSkpOworCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w3MTFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIG47CisKK30KKworLyogRGlnaXRhbCBwb3J0IHJlYWQgLSBVbnRlc3RlZCBvbiA4MTEyICovCitzdGF0aWMgaW50IHBjbDcxMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDcxMV9ESV9MTykgfAorCQkoaW5iKGRldi0+aW9iYXNlICsgUENMNzExX0RJX0hJKSA8PCA4KTsKKworCXJldHVybiAyOworfQorCisvKiBEaWdpdGFsIHBvcnQgd3JpdGUgLSBVbnRlc3RlZCBvbiA4MTEyICovCitzdGF0aWMgaW50IHBjbDcxMV9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCX0KKwlpZiAoZGF0YVswXSAmIDB4MDBmZikKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMNzExX0RPX0xPKTsKKwlpZiAoZGF0YVswXSAmIDB4ZmYwMCkKKwkJb3V0Yigocy0+c3RhdGUgPj4gOCksIGRldi0+aW9iYXNlICsgUENMNzExX0RPX0hJKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisvKiAgRnJlZSBhbnkgcmVzb3VyY2VzIHRoYXQgd2UgaGF2ZSBjbGFpbWVkICAqLworc3RhdGljIGludCBwY2w3MTFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENMNzExX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qICBJbml0aWFsaXphdGlvbiAqLworc3RhdGljIGludCBwY2w3MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCS8qIGNsYWltIG91ciBJL08gc3BhY2UgKi8KKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBQQ0w3MTFfU0laRSwgInBjbDcxMSIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiB0aGVyZSBzaG91bGQgYmUgYSBzYW5pdHkgY2hlY2sgaGVyZSAqLworCisJLyogc2V0IHVwIHNvbWUgbmFtZSBzdHVmZiAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxID4gdGhpc19ib2FyZC0+bWF4aXJxKSB7CisJCXByaW50aygiaXJxIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaXJxKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBwY2w3MTFfaW50ZXJydXB0LCAwLCAicGNsNzExIiwgZGV2KSkgeworCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiggaXJxID0gJXUgKVxuIiwgaXJxKTsKKwkJfQorCX0KKwlkZXYtPmlycSA9IGlycTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w3MTFfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBBSSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmFpX3JhbmdlX3R5cGU7CisJcy0+aW5zbl9yZWFkID0gcGNsNzExX2FpX2luc247CisJaWYgKGlycSkgeworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJcy0+ZG9fY21kdGVzdCA9IHBjbDcxMV9haV9jbWR0ZXN0OworCQlzLT5kb19jbWQgPSBwY2w3MTFfYWlfY21kOworCX0KKworCXMrKzsKKwkvKiBBTyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCXMtPmluc25fd3JpdGUgPSBwY2w3MTFfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBwY2w3MTFfYW9faW5zbl9yZWFkOworCisJcysrOworCS8qIDE2LWJpdCBkaWdpdGFsIGlucHV0ICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IHBjbDcxMV9kaV9pbnNuX2JpdHM7CisKKwlzKys7CisJLyogMTYtYml0IGRpZ2l0YWwgb3V0ICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnN0YXRlID0gMDsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MTFfZG9faW5zbl9iaXRzOworCisJLyoKKwkgICB0aGlzIGlzIHRoZSAiYmFzZSB2YWx1ZSIgZm9yIHRoZSBtb2RlIHJlZ2lzdGVyLCB3aGljaCBpcworCSAgIHVzZWQgZm9yIHRoZSBpcnEgb24gdGhlIFBDTDcxMQorCSAqLworCWlmICh0aGlzX2JvYXJkLT5pc19wY2w3MTFiKSB7CisJCWRldnByaXYtPm1vZGUgPSAoZGV2LT5pcnEgPDwgNCk7CisJfQorCisJLyogY2xlYXIgREFDICovCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9EQTBfTE8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfREEwX0hJKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0RBMV9MTyk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9EQTFfSEkpOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxZTc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY2w3MjQuYworCisgICAgTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisKKyAgICBoYXJkd2FyZSBkcml2ZXIgZm9yIEFkdmFudGVjaCBjYXJkczoKKyAgICAgY2FyZDogICBQQ0wtNzI0LCBQQ0wtNzIyLCBQQ0wtNzMxCisgICAgIGRyaXZlcjogcGNsNzI0LCAgcGNsNzIyLCAgcGNsNzMxCisgICAgYW5kIEFETGluayBjYXJkczoKKyAgICAgY2FyZDogICBBQ0wtNzEyMiwgQUNMLTcxMjQsIFBFVC00OERJTworICAgICBkcml2ZXI6IGFjbDcxMjIsICBhY2w3MTI0LCAgcGV0NDhkaW8KKworICAgIE9wdGlvbnMgZm9yIFBDTC03MjQsIFBDTC03MzEsIEFDTC03MTI0IGFuZCBQRVQtNDhESU86CisgICAgIFswXSAtIElPIEJhc2UKKworICAgIE9wdGlvbnMgZm9yIFBDTC03MjIgYW5kIEFDTC03MTIyOgorICAgICBbMF0gLSBJTyBCYXNlCisgICAgIFsxXSAtIElSUSAoMD1kaXNhYmxlIElSUSkgSVJRIGlzbid0IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUhCisgICAgIFsyXSAtbnVtYmVyIG9mIERJTzoKKyAgICAgICAgICAgICAgMCwgMTQ0OiAxNDQgRElPIGNvbmZpZ3VyYXRpb24KKwkgICAgICAxLCAgOTY6ICA5NiBESU8gY29uZmlndXJhdGlvbgorKi8KKy8qCitEcml2ZXI6IHBjbDcyNAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtNzI0LCBQQ0wtNzIyLCBQQ0wtNzMxIEFETGluayBBQ0wtNzEyMiwgQUNMLTcxMjQsCisgIFBFVC00OERJTworQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC03MjQgKHBjbDcyNCksIFBDTC03MjIgKHBjbDcyMiksIFBDTC03MzEgKHBjbDczMSksCisgIFtBRExpbmtdIEFDTC03MTIyIChhY2w3MTIyKSwgQUNMLTcxMjQgKGFjbDcxMjQpLCBQRVQtNDhESU8gKHBldDQ4ZGlvKQorU3RhdHVzOiB1bnRlc3RlZAorCitUaGlzIGlzIGRyaXZlciBmb3IgZGlnaXRhbCBJL08gYm9hcmRzIFBDTC03MjIvNzI0LzczMSB3aXRoIDE0NC8yNC80OCBESU8KK2FuZCBmb3IgZGlnaXRhbCBJL08gYm9hcmRzIEFDTC03MTIyLzcxMjQvUEVULTQ4RElPIHdpdGggMTQ0LzI0LzQ4IERJTy4KK0l0IG5lZWQgODI1NS5vIGZvciBvcGVyYXRpb25zIGFuZCBvbmx5IGltbWVkaWF0ZSBtb2RlIGlzIHN1cHBvcnRlZC4KK1NlZSB0aGUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIGRldGFpbHMuCisqLworLyoKKyAqIGNoZWNrX2RyaXZlciBvdmVycmlkZXM6CisgKiAgIHN0cnVjdCBjb21lZGlfaW5zbgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNkZWZpbmUgUENMNzIyX1NJWkUgICAgMzIKKyNkZWZpbmUgUENMNzIyXzk2X1NJWkUgMTYKKyNkZWZpbmUgUENMNzI0X1NJWkUgICAgIDQKKyNkZWZpbmUgUENMNzMxX1NJWkUgICAgIDgKKyNkZWZpbmUgUEVUNDhfU0laRSAgICAgIDIKKworI2RlZmluZSBTSVpFXzgyNTUJNAorCisvLyAjZGVmaW5lIFBDTDcyNF9JUlEgICAxICAvKiBubyBJUlEgc3VwcG9ydCBub3cgKi8KKworc3RhdGljIGludCBwY2w3MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBwY2w3MjRfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCWludCBkaW87CQkvLyBudW0gb2YgRElPCisJaW50IG51bW9mcG9ydHM7CQkvLyBudW0gb2YgODI1NSBzdWJkZXZpY2VzCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJY2hhciBjYW5faGF2ZTk2OworCWNoYXIgaXNfcGV0NDg7Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsNzI0X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDcyNCIsIDI0LCAxLCAweDAwZmMsIFBDTDcyNF9TSVpFLCAwLCAwLH0sCisJeyJwY2w3MjIiLCAxNDQsIDYsIDB4MDBmYywgUENMNzIyX1NJWkUsIDEsIDAsfSwKKwl7InBjbDczMSIsIDQ4LCAyLCAweDljZmMsIFBDTDczMV9TSVpFLCAwLCAwLH0sCisJeyJhY2w3MTIyIiwgMTQ0LCA2LCAweDllZTgsIFBDTDcyMl9TSVpFLCAxLCAwLH0sCisJeyJhY2w3MTI0IiwgMjQsIDEsIDB4MDBmYywgUENMNzI0X1NJWkUsIDAsIDAsfSwKKwl7InBldDQ4ZGlvIiwgNDgsIDIsIDB4OWViOCwgUEVUNDhfU0laRSwgMCwgMSx9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbDcyNF9ib2FyZCkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsNzI0X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsNzI0ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDcyNCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsNzI0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w3MjRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbDcyNF9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDcyNCk7CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfY2IoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGFyZzsKKworCWlmIChkaXIpIHsKKwkJb3V0YihkYXRhLCBpb2Jhc2UgKyBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGluYihpb2Jhc2UgKyBwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVtYXBwZWRfY2IoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLAorCXVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCWludCBtb3Zwb3J0ID0gU0laRV84MjU1ICogKGlvYmFzZSA+PiAxMik7CisKKwlpb2Jhc2UgJj0gMHgwZmZmOworCisJaWYgKGRpcikgeworCQlvdXRiKHBvcnQgKyBtb3Zwb3J0LCBpb2Jhc2UpOworCQlvdXRiKGRhdGEsIGlvYmFzZSArIDEpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlvdXRiKHBvcnQgKyBtb3Zwb3J0LCBpb2Jhc2UpOworCQlyZXR1cm4gaW5iKGlvYmFzZSArIDEpOworCX0KK30KKworc3RhdGljIGludCBwY2w3MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpb3JhbmdlOworCWludCByZXQsIGksIG5fc3ViZGV2aWNlczsKKyNpZmRlZiBQQ0w3MjRfSVJRCisJdW5zaWduZWQgaW50IGlycTsKKyNlbmRpZgorCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaW9yYW5nZSA9IHRoaXNfYm9hcmQtPmlvX3JhbmdlOworCWlmICgodGhpc19ib2FyZC0+Y2FuX2hhdmU5NikgJiYgKChpdC0+b3B0aW9uc1sxXSA9PSAxKQorCQkJfHwgKGl0LT5vcHRpb25zWzFdID09IDk2KSkpCisJCWlvcmFuZ2UgPSBQQ0w3MjJfOTZfU0laRTsJLy8gUENMLTcyNCBpbiA5NiBESU8gY29uZmlndXJhdGlvbgorCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNDogYm9hcmQ9JXMsIDB4JTAzbHggIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbDcyNCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKyNpZmRlZiBQQ0w3MjRfSVJRCisJaXJxID0gMDsKKwlpZiAodGhpc19ib2FyZC0+SVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlpZiAoaXJxKSB7CS8qIHdlIHdhbnQgdG8gdXNlIElSUSAqLworCQkJaWYgKCgoMSA8PCBpcnEpICYgdGhpc19ib2FyZC0+SVJRYml0cykgPT0gMCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLAorCQkJCQlpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w3MjQsIDAsCisJCQkJCQkicGNsNzI0IiwgZGV2KSkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCBESVNBQkxJTkcgSVQiLAorCQkJCQkJaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXJ0X3ByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworI2VuZGlmCisKKwlwcmludGsoIlxuIik7CisKKwluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5udW1vZnBvcnRzOworCWlmICgodGhpc19ib2FyZC0+Y2FuX2hhdmU5NikgJiYgKChpdC0+b3B0aW9uc1sxXSA9PSAxKQorCQkJfHwgKGl0LT5vcHRpb25zWzFdID09IDk2KSkpCisJCW5fc3ViZGV2aWNlcyA9IDQ7CS8vIFBDTC03MjQgaW4gOTYgRElPIGNvbmZpZ3VyYXRpb24KKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCWlmICh0aGlzX2JvYXJkLT5pc19wZXQ0OCkgeworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGksCisJCQkJc3ViZGV2XzgyNTVtYXBwZWRfY2IsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgaSAqIDB4MTAwMCkpOworCQl9IGVsc2UKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLAorCQkJCXN1YmRldl84MjU1X2NiLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFNJWkVfODI1NSAqIGkpKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworLy8gICAgICBwcmludGsoImNvbWVkaSVkOiBwY2w3MjQ6IHJlbW92ZVxuIixkZXYtPm1pbm9yKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpKTsKKwl9CisKKyNpZmRlZiBQQ0w3MjRfSVJRCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisjZW5kaWYKKworCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzY2YmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKKyAqIERyaXZlciBmb3IgUENMNzI1IGFuZCBjbG9uZXMKKyAqIERhdmlkIEEuIFNjaGxlZWYKKyAqLworLyoKK0RyaXZlcjogcGNsNzI1CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC03MjUgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IGRzCitTdGF0dXM6IHVua25vd24KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC03MjUgKHBjbDcyNSkKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFBDTDcyNV9TSVpFIDIKKworI2RlZmluZSBQQ0w3MjVfRE8gMAorI2RlZmluZSBQQ0w3MjVfREkgMQorCitzdGF0aWMgaW50IHBjbDcyNV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2w3MjVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsNzI1ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDcyNSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsNzI1X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w3MjVfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MjUpOworCitzdGF0aWMgaW50IHBjbDcyNV9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIFBDTDcyNV9ETyk7CisJfQorCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI1X2RpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDcyNV9ESSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY2w3MjVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzI1OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTDcyNV9TSVpFLCAicGNsNzI1IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmJvYXJkX25hbWUgPSAicGNsNzI1IjsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmlycSA9IDA7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MjVfZG9faW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNsNzI1X2RpX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDcyNV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzI1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENMNzI1X1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiZDMzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjYuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY2w3MjYuYworCisgICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgIGNhcmQ6ICAgUENMLTcyNiwgUENMLTcyNywgUENMLTcyOAorICAgICBkcml2ZXI6IHBjbDcyNiwgIHBjbDcyNywgIHBjbDcyOAorICAgIGFuZCBmb3IgQURMaW5rIGNhcmRzOgorICAgICBjYXJkOiAgIEFDTC02MTI2LCBBQ0wtNjEyOAorICAgICBkcml2ZXI6IGFjbDYxMjYsICBhY2w2MTI4CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBwY2w3MjYKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTcyNiAmIGNvbXBhdGlibGVzCitBdXRob3I6IGRzCitTdGF0dXM6IHVudGVzdGVkCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzI2IChwY2w3MjYpLCBQQ0wtNzI3IChwY2w3MjcpLCBQQ0wtNzI4IChwY2w3MjgpLAorICBbQURMaW5rXSBBQ0wtNjEyNiAoYWNsNjEyNiksIEFDTC02MTI4IChhY2w2MTI4KQorCitJbnRlcnJ1cHRzIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICAgT3B0aW9ucyBmb3IgUENMLTcyNjoKKyAgICAgWzBdIC0gSU8gQmFzZQorICAgICBbMl0uLi5bN10gLSBEL0Egb3V0cHV0IHJhbmdlIGZvciBjaGFubmVsIDEtNjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwgMzogKy8tMTBWLAorCSAgICAgICA0OiA0LTIwbUEsIDU6IHVua25vd24gKGV4dGVybmFsIHJlZmVyZW5jZSkKKworICAgIE9wdGlvbnMgZm9yIFBDTC03Mjc6CisgICAgIFswXSAtIElPIEJhc2UKKyAgICAgWzJdLi4uWzEzXSAtIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGNoYW5uZWwgMS0xMjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwKKwkgICAgICAgMzogNC0yMG1BCisKKyAgICBPcHRpb25zIGZvciBQQ0wtNzI4IGFuZCBBQ0wtNjEyODoKKyAgICAgWzBdIC0gSU8gQmFzZQorICAgICBbMl0sIFszXSAtIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGNoYW5uZWwgMSBhbmQgMjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwgMzogKy8tMTBWLAorCSAgICAgICA0OiA0LTIwbUEsIDU6IDAtMjBtQQorCisgICAgT3B0aW9ucyBmb3IgQUNMLTYxMjY6CisgICAgIFswXSAtIElPIEJhc2UKKyAgICAgWzFdIC0gSVJRICgwPWRpc2FibGUsIDMsIDUsIDYsIDcsIDksIDEwLCAxMSwgMTIsIDE1KSAoY3VycmVudGx5IGlnbm9yZWQpCisgICAgIFsyXS4uLls3XSAtIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGNoYW5uZWwgMS02OgorICAgICAgICAgICAgICAgMDogMC01ViwgMTogMC0xMFYsIDI6ICsvLTVWLCAzOiArLy0xMFYsCisJICAgICAgIDQ6IDQtMjBtQQorKi8KKworLyoKKyAgICBUaGFua3MgdG8gQ2lyY3VpdCBTcGVjaWFsaXN0cyBmb3IgaGF2aW5nIHByb2dyYW1taW5nIGluZm8gKCEpIG9uCisgICAgdGhlaXIgd2ViIHBhZ2UuICAoaHR0cDovL3d3dy5jaXIuY29tLykKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjdW5kZWYgQUNMNjEyNl9JUlEJCS8qIG5vIGludGVycnVwdCBzdXBwb3J0ICh5ZXQpICovCisKKyNkZWZpbmUgUENMNzI2X1NJWkUgMTYKKyNkZWZpbmUgUENMNzI3X1NJWkUgMzIKKyNkZWZpbmUgUENMNzI4X1NJWkUgOAorCisjZGVmaW5lIFBDTDcyNl9EQUMwX0hJIDAKKyNkZWZpbmUgUENMNzI2X0RBQzBfTE8gMQorCisjZGVmaW5lIFBDTDcyNl9ET19ISSAxMgorI2RlZmluZSBQQ0w3MjZfRE9fTE8gMTMKKyNkZWZpbmUgUENMNzI2X0RJX0hJIDE0CisjZGVmaW5lIFBDTDcyNl9ESV9MTyAxNQorCisjZGVmaW5lIFBDTDcyN19ET19ISSAyNAorI2RlZmluZSBQQ0w3MjdfRE9fTE8gMjUKKyNkZWZpbmUgUENMNzI3X0RJX0hJICAwCisjZGVmaW5lIFBDTDcyN19ESV9MTyAgMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfNF8yMG1BID0geyAxLCB7UkFOR0VfbUEoNCwgMjApfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlXzBfMjBtQSA9IHsgMSwge1JBTkdFX21BKDAsIDIwKX0gfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCByYW5nZWxpc3RfNzI2W10gPSB7CisJJnJhbmdlX3VuaXBvbGFyNSwgJnJhbmdlX3VuaXBvbGFyMTAsCisJJnJhbmdlX2JpcG9sYXI1LCAmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV80XzIwbUEsICZyYW5nZV91bmtub3duCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IHJhbmdlbGlzdF83MjdbXSA9IHsKKwkmcmFuZ2VfdW5pcG9sYXI1LCAmcmFuZ2VfdW5pcG9sYXIxMCwKKwkmcmFuZ2VfYmlwb2xhcjUsCisJJnJhbmdlXzRfMjBtQQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCByYW5nZWxpc3RfNzI4W10gPSB7CisJJnJhbmdlX3VuaXBvbGFyNSwgJnJhbmdlX3VuaXBvbGFyMTAsCisJJnJhbmdlX2JpcG9sYXI1LCAmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV80XzIwbUEsICZyYW5nZV8wXzIwbUEKK307CisKK3N0YXRpYyBpbnQgcGNsNzI2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDcyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgcGNsNzI2X2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucworCWludCBudW1fb2ZfcmFuZ2VzOwkvLyBudW0gb2YgcmFuZ2VzCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJY2hhciBoYXZlX2RpbzsJCS8vIDE9Y2FyZCBoYXZlIERJL0RPIHBvcnRzCisJaW50IGRpX2hpOwkJLy8gcG9ydHMgZm9yIERJL0RPIG9wZXJhdGlvbnMKKwlpbnQgZGlfbG87CisJaW50IGRvX2hpOworCWludCBkb19sbzsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgKnJhbmdlX3R5cGVfbGlzdDsJLy8gbGlzdCBvZiBzdXBwb3J0ZWQgcmFuZ2VzCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsNzI2X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDcyNiIsIDYsIDYsIDB4MDAwMCwgUENMNzI2X1NJWkUsIDEsCisJCQlQQ0w3MjZfRElfSEksIFBDTDcyNl9ESV9MTywgUENMNzI2X0RPX0hJLCBQQ0w3MjZfRE9fTE8sCisJCSZyYW5nZWxpc3RfNzI2WzBdLH0sCisJeyJwY2w3MjciLCAxMiwgNCwgMHgwMDAwLCBQQ0w3MjdfU0laRSwgMSwKKwkJCVBDTDcyN19ESV9ISSwgUENMNzI3X0RJX0xPLCBQQ0w3MjdfRE9fSEksIFBDTDcyN19ET19MTywKKwkJJnJhbmdlbGlzdF83MjdbMF0sfSwKKwl7InBjbDcyOCIsIDIsIDYsIDB4MDAwMCwgUENMNzI4X1NJWkUsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkmcmFuZ2VsaXN0XzcyOFswXSx9LAorCXsiYWNsNjEyNiIsIDYsIDUsIDB4OTZlOCwgUENMNzI2X1NJWkUsIDEsCisJCQlQQ0w3MjZfRElfSEksIFBDTDcyNl9ESV9MTywgUENMNzI2X0RPX0hJLCBQQ0w3MjZfRE9fTE8sCisJCSZyYW5nZWxpc3RfNzI2WzBdLH0sCisJeyJhY2w2MTI4IiwgMiwgNiwgMHgwMDAwLCBQQ0w3MjhfU0laRSwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCSZyYW5nZWxpc3RfNzI4WzBdLH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsNzI2X2JvYXJkKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2w3MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w3MjYgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsNzI2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w3MjZfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDcyNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsNzI2X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzI2KTsKKworc3RydWN0IHBjbDcyNl9wcml2YXRlIHsKKworCWludCBiaXBvbGFyWzEyXTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0WzEyXTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMTJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbDcyNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHBjbDcyNl9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaGksIGxvOworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWxvID0gZGF0YVtuXSAmIDB4ZmY7CisJCWhpID0gKGRhdGFbbl0gPj4gOCkgJiAweGY7CisJCWlmIChkZXZwcml2LT5iaXBvbGFyW2NoYW5dKQorCQkJaGkgXj0gMHg4OworCQkvKgorCQkgKiB0aGUgcHJvZ3JhbW1pbmcgaW5mbyBkaWQgbm90IHNheSB3aGljaCBvcmRlcgorCQkgKiB0byB3cml0ZSBieXRlcy4gIHN3aXRjaCB0aGUgb3JkZXIgb2YgdGhlIG5leHQKKwkJICogdHdvIGxpbmVzIGlmIHlvdSBnZXQgZ2xpdGNoZXMuCisJCSAqLworCQlvdXRiKGhpLCBkZXYtPmlvYmFzZSArIFBDTDcyNl9EQUMwX0hJICsgMiAqIGNoYW4pOworCQlvdXRiKGxvLCBkZXYtPmlvYmFzZSArIFBDTDcyNl9EQUMwX0xPICsgMiAqIGNoYW4pOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI2X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZGF0YVtuXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w3MjZfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyB0aGlzX2JvYXJkLT5kaV9sbykgfAorCQkoaW5iKGRldi0+aW9iYXNlICsgdGhpc19ib2FyZC0+ZGlfaGkpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI2X2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJfQorCWlmIChkYXRhWzFdICYgMHgwMGZmKQorCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyB0aGlzX2JvYXJkLT5kb19sbyk7CisJaWYgKGRhdGFbMV0gJiAweGZmMDApCisJCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIHRoaXNfYm9hcmQtPmRvX2hpKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDcyNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlvcmFuZ2U7CisJaW50IHJldCwgaTsKKyNpZmRlZiBBQ0w2MTI2X0lSUQorCXVuc2lnbmVkIGludCBpcnE7CisjZW5kaWYKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MjY6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJwY2w3MjYiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w3MjZfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJZGV2cHJpdi0+Ymlwb2xhcltpXSA9IDA7CisJCWRldnByaXYtPnJhbmdlbGlzdFtpXSA9ICZyYW5nZV91bmtub3duOworCX0KKworI2lmZGVmIEFDTDYxMjZfSVJRCisJaXJxID0gMDsKKwlpZiAoYm9hcmR0eXBlc1tib2FyZF0uSVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlkZXZwcml2LT5maXJzdF9jaGFuID0gMjsKKwkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KKwkJCWlmICgoKDEgPDwgaXJxKSAmIGJvYXJkdHlwZXNbYm9hcmRdLklSUWJpdHMpID09IDApIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIElSUSAlZCBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKKwkJCQkJaXJxKTsKKwkJCQlpcnEgPSAwOwkvKiBCYWQgSVJRICovCisJCQl9IGVsc2UgeworCQkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNsODE4LCAwLAorCQkJCQkJInBjbDcyNiIsIGRldikpIHsKKwkJCQkJcnRfcHJpbnRrCisJCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAlZCwgRElTQUJMSU5HIElUIiwKKwkJCQkJCWlycSk7CisJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlydF9wcmludGsoIiwgaXJxPSVkIiwgaXJxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKyNlbmRpZgorCisJcHJpbnRrKCJcbiIpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+aW5zbl93cml0ZSA9IHBjbDcyNl9hb19pbnNuOworCXMtPmluc25fcmVhZCA9IHBjbDcyNl9hb19pbnNuX3JlYWQ7CisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGRldnByaXYtPnJhbmdlbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgdGhpc19ib2FyZC0+bl9hb2NoYW47IGkrKykgeworCQlpbnQgajsKKworCQlqID0gaXQtPm9wdGlvbnNbMiArIDFdOworCQlpZiAoKGogPCAwKSB8fCAoaiA+PSB0aGlzX2JvYXJkLT5udW1fb2ZfcmFuZ2VzKSkgeworCQkJcHJpbnRrKCJJbnZhbGlkIHJhbmdlIGZvciBjaGFubmVsICVkISBNdXN0IGJlIDA8PSVkPCVkXG4iLCBpLCBqLCB0aGlzX2JvYXJkLT5udW1fb2ZfcmFuZ2VzIC0gMSk7CisJCQlqID0gMDsKKwkJfQorCQlkZXZwcml2LT5yYW5nZWxpc3RbaV0gPSB0aGlzX2JvYXJkLT5yYW5nZV90eXBlX2xpc3Rbal07CisJCWlmIChkZXZwcml2LT5yYW5nZWxpc3RbaV0tPnJhbmdlWzBdLm1pbiA9PQorCQkJLWRldnByaXYtPnJhbmdlbGlzdFtpXS0+cmFuZ2VbMF0ubWF4KQorCQkJZGV2cHJpdi0+Ymlwb2xhcltpXSA9IDE7CS8qIGJpcG9sYXIgcmFuZ2UgKi8KKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBkaSAqLworCWlmICghdGhpc19ib2FyZC0+aGF2ZV9kaW8pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IDE2OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJcy0+aW5zbl9iaXRzID0gcGNsNzI2X2RpX2luc25fYml0czsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkbyAqLworCWlmICghdGhpc19ib2FyZC0+aGF2ZV9kaW8pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IDE2OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJcy0+aW5zbl9iaXRzID0gcGNsNzI2X2RvX2luc25fYml0czsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2w3MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworLy8gICAgICBwcmludGsoImNvbWVkaSVkOiBwY2w3MjY6IHJlbW92ZVxuIixkZXYtPm1pbm9yKTsKKworI2lmZGVmIEFDTDYxMjZfSVJRCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisjZW5kaWYKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzZkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9wY2w3MzAuYworICogRHJpdmVyIGZvciBBZHZhbnRlY2ggUENMLTczMCBhbmQgY2xvbmVzCisgKiBKb3PDqSBMdWlzIFPDoW5jaGV6CisgKi8KKy8qCitEcml2ZXI6IHBjbDczMAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtNzMwICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBKb3PDqSBMdWlzIFPDoW5jaGV6IChqc2FuY2hlenZAdGVsZWxpbmUuZXMpCitTdGF0dXM6IHVudGVzdGVkCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzMwIChwY2w3MzApLCBbSUNQXSBJU08tNzMwIChpc283MzApLAorCQkgW0FkbGlua10gQUNMLTcxMzAgKGFjbDcxMzApCisKK0ludGVycnVwdHMgYXJlIG5vdCBzdXBwb3J0ZWQuCitUaGUgQUNMLTcxMzAgY2FyZCBoYXZlIGFuIDgyNTQgdGltZXIvY291bnRlciBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgUENMNzMwX1NJWkUJCTQKKyNkZWZpbmUgQUNMNzEzMF9TSVpFCTgKKyNkZWZpbmUgUENMNzMwX0lESU9fTE8JMAkvKiBJc29sYXRlZCBEaWdpdGFsIEkvTyBsb3cgYnl0ZSAoSUQwLUlENykgKi8KKyNkZWZpbmUgUENMNzMwX0lESU9fSEkJMQkvKiBJc29sYXRlZCBEaWdpdGFsIEkvTyBoaWdoIGJ5dGUgKElEOC1JRDE1KSAqLworI2RlZmluZSBQQ0w3MzBfRElPX0xPCTIJLyogVFRMIERpZ2l0YWwgSS9PIGxvdyBieXRlIChEMC1ENykgKi8KKyNkZWZpbmUgUENMNzMwX0RJT19ISQkzCS8qIFRUTCBEaWdpdGFsIEkvTyBoaWdoIGJ5dGUgKEQ4LUQxNSkgKi8KKworc3RhdGljIGludCBwY2w3MzBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzMwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBwY2w3MzBfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIEkvTyBzcGFjZQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDczMF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w3MzAiLCBQQ0w3MzBfU0laRSx9LAorCXsiaXNvNzMwIiwgUENMNzMwX1NJWkUsfSwKKwl7ImFjbDcxMzAiLCBBQ0w3MTMwX1NJWkUsfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w3MzBfYm9hcmQpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDczMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDczMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w3MzAiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDczMF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsNzMwX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w3MzBfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MzApOworCitzdGF0aWMgaW50IHBjbDczMF9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCX0KKwlpZiAoZGF0YVswXSAmIDB4MDBmZikKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsCisJCQlkZXYtPmlvYmFzZSArICgodW5zaWduZWQgbG9uZylzLT5wcml2YXRlKSk7CisJaWYgKGRhdGFbMF0gJiAweGZmMDApCisJCW91dGIoKHMtPnN0YXRlID4+IDgpLAorCQkJZGV2LT5pb2Jhc2UgKyAoKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkgKyAxKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDczMF9kaV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyAoKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkpIHwKKwkJKGluYihkZXYtPmlvYmFzZSArICgodW5zaWduZWQgbG9uZylzLT5wcml2YXRlKSArIDEpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaW9yYW5nZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MzA6IGJvYXJkPSVzIDB4JTA0bHggIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbDczMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmlycSA9IDA7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBJc29sYXRlZCBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gcGNsNzMwX2RvX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ0w3MzBfSURJT19MTzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIElzb2xhdGVkIGRpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MzBfZGlfaW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTDczMF9JRElPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogVFRMIGRvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MzBfZG9faW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTDczMF9ESU9fTE87CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBUVEwgZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IHBjbDczMF9kaV9pbnNuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENMNzMwX0RJT19MTzsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzMwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkZmQyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYwpAQCAtMCwwICsxLDE2MDUgQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9wY2w4MTIuYworICoKKyAqIEF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisgKgorICogaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHMKKyAqICBjYXJkOiAgIFBDTC04MTIsIFBDTC04MTJQRywgUENMLTgxMywgUENMLTgxM0IKKyAqICBkcml2ZXI6IHBjbDgxMiwgIHBjbDgxMnBnLCAgcGNsODEzLCAgcGNsODEzYgorICogYW5kIGZvciBBRGxpbmsgY2FyZHMKKyAqICBjYXJkOiAgIEFDTC04MTEyREcsIEFDTC04MTEySEcsIEFDTC04MTEyUEcsIEFDTC04MTEzLCBBQ0wtODIxNgorICogIGRyaXZlcjogYWNsODExMmRnLCAgYWNsODExMmhnLCAgYWNsODExMnBnLCAgYWNsODExMywgIGFjbDgyMTYKKyAqIGFuZCBmb3IgSUNQIERBUyBjYXJkcworICogIGNhcmQ6ICAgSVNPLTgxMywgQS04MjFQR0gsIEEtODIxUEdMLCBBLTgyMVBHTC1OREEsIEEtODIyUEdILCBBLTgyMlBHTCwKKyAqICBkcml2ZXI6IGlzbzgxMywgIGE4MjFwZ2gsICBhLTgyMXBnbCwgYS04MjFwZ2xuZGEsICBhODIycGdoLCAgYTgyMnBnbCwKKyAqICBjYXJkOiAgIEEtODIzUEdILCBBLTgyM1BHTCwgQS04MjZQRworICogZHJpdmVyOiAgYTgyM3BnaCwgIGE4MjNwZ2wsICBhODI2cGcKKyAqLworLyoKK0RyaXZlcjogcGNsODEyCitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC04MTIvUEcsIFBDTC04MTMvQiwKKyAgICAgICAgICAgICBBRExpbmsgQUNMLTgxMTJERy9IRy9QRywgQUNMLTgxMTMsIEFDTC04MjE2LAorICAgICAgICAgICAgIElDUCBEQVMgQS04MjFQR0gvUEdML1BHTC1OREEsIEEtODIyUEdIL1BHTCwgQS04MjNQR0gvUEdMLCBBLTgyNlBHLAorICAgICAgICAgICAgIElDUCBEQVMgSVNPLTgxMworQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC04MTIgKHBjbDgxMiksIFBDTC04MTJQRyAocGNsODEycGcpLAorICBQQ0wtODEzIChwY2w4MTMpLCBQQ0wtODEzQiAocGNsODEzYiksIFtBRExpbmtdIEFDTC04MTEyREcgKGFjbDgxMTJkZyksCisgIEFDTC04MTEySEcgKGFjbDgxMTJoZyksIEFDTC04MTEzIChhY2wtODExMyksIEFDTC04MjE2IChhY2w4MjE2KSwKKyAgW0lDUF0gSVNPLTgxMyAoaXNvODEzKSwgQS04MjFQR0ggKGE4MjFwZ2gpLCBBLTgyMVBHTCAoYTgyMXBnbCksCisgIEEtODIxUEdMLU5EQSAoYTgyMXBjbG5kYSksIEEtODIyUEdIIChhODIycGdoKSwgQS04MjJQR0wgKGE4MjJwZ2wpLAorICBBLTgyM1BHSCAoYTgyM3BnaCksIEEtODIzUEdMIChhODIzcGdsKSwgQS04MjZQRyAoYTgyNnBnKQorVXBkYXRlZDogTW9uLCAwNiBBdWcgMjAwNyAxMjowMzoxNSArMDEwMAorU3RhdHVzOiB3b3JrcyAoSSBob3BlLiBNeSBib2FyZCBmaXJlIHVwIHVuZGVyIG15IGhhbmRzCisgICAgICAgICAgICAgICBhbmQgSSBjYW5uJ3QgdGVzdCBhbGwgZmVhdHVyZXMuKQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBpbnNuIGFuZCBjbWQgaW50ZXJmYWNlcy4gU29tZSBib2FyZHMgc3VwcG9ydCBvbmx5IGluc24KK2JlY291c2UgdGhlaXIgaGFyZHdhcmUgZG9uJ3QgYWxsb3cgbW9yZSAoUENMLTgxMy9CLCBBQ0wtODExMywgSVNPLTgxMykuCitEYXRhIHRyYW5zZmVyIG92ZXIgRE1BIGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4geW91IG1lYXN1cmUgb25seSBvbmUKK2NoYW5uZWwsIHRoaXMgaXMgdG9vIGhhcmR3YXJlIGxpbWl0YXRpb24gb2YgdGhlc2UgYm9hcmRzLgorCitPcHRpb25zIGZvciBQQ0wtODEyOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAgICAgICAgMT10cmlnZ2VyIHNvdXJjZSBpcyBleHRlcm5hbAorICBbNF0gLSAwPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xMFYKKyAgICAgICAgMT1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tNVYKKyAgICAgICAgMj1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMi41VgorICAgICAgICAzPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xLjI1VgorICAgICAgICA0PUEvRCBpbnB1dCByYW5nZSBpcyArLy0wLjYyNVYKKyAgICAgICAgNT1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC4zMTI1VgorICBbNV0gLSAwPUQvQSBvdXRwdXRzIDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQorICAgICAgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAgICAgICAgMj1EL0Egb3V0cHV0cyB1bmtub3cgKGV4dGVybmFsIHJlZmVyZW5jZSkKKworT3B0aW9ucyBmb3IgUENMLTgxMlBHLCBBQ0wtODExMlBHOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAgICAgICAgMT10cmlnZ2VyIHNvdXJjZSBpcyBleHRlcm5hbAorICBbNF0gLSAwPUEvRCBoYXZlIG1heCArLy01ViBpbnB1dAorICAgICAgICAxPUEvRCBoYXZlIG1heCArLy0xMFYgaW5wdXQKKyAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisgICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKK09wdGlvbnMgZm9yIEFDTC04MTEyREcvSEcsIEEtODIyUEdML1BHSCwgQS04MjNQR0wvUEdILCBBQ0wtODIxNiwgQS04MjZQRzoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKKyAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQorICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCisgICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKKyAgWzRdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KKyAgICAgICAgMT1BL0QgY2hhbm5lbHMgYXJlIERJRkYKKyAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisgICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKK09wdGlvbnMgZm9yIEEtODIxUEdML1BHSDoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgICAgICAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCisgIFszXSAtIDA9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKworT3B0aW9ucyBmb3IgQS04MjFQR0wtTkRBOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgWzJdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KKyAgICAgICAgMT1BL0QgY2hhbm5lbHMgYXJlIERJRkYKKworT3B0aW9ucyBmb3IgUENMLTgxMzoKKyAgWzBdIC0gSU8gQmFzZQorCitPcHRpb25zIGZvciBQQ0wtODEzQjoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSAwPSBiaXBvbGFyIGlucHV0cworICAgICAgICAxPSB1bmlwb2xhciBpbnB1dHMKKworT3B0aW9ucyBmb3IgQUNMLTgxMTMsIElTTy04MTM6CisgIFswXSAtIElPIEJhc2UKKyAgWzFdIC0gMD0gMTBWIGJpcG9sYXIgaW5wdXRzCisgICAgICAgIDE9IDEwViB1bmlwb2xhciBpbnB1dHMKKyAgICAgICAgMj0gMjBWIGJpcG9sYXIgaW5wdXRzCisgICAgICAgIDM9IDIwViB1bmlwb2xhciBpbnB1dHMKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisjdW5kZWYgUENMODEyX0VYVERFQlVHCQkvKiBpZiB0aGlzIGlzIGRlZmluZWQgdGhlbiBhIGxvdCBvZiBtZXNzYWdlcyBpcyBwcmludGVkICovCisKKy8vIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcworI2RlZmluZSBib2FyZFBDTDgxMlBHIAkJIDAJLyogYW5kIEFDTC04MTEyUEcgKi8KKyNkZWZpbmUgYm9hcmRQQ0w4MTNCIAkJIDEKKyNkZWZpbmUgYm9hcmRQQ0w4MTIJCSAyCisjZGVmaW5lIGJvYXJkUENMODEzIAkJIDMKKyNkZWZpbmUgYm9hcmRJU084MTMgCQkgNQorI2RlZmluZSBib2FyZEFDTDgxMTMgCQkgNgorI2RlZmluZSBib2FyZEFDTDgxMTIgCQkgNwkvKiBBQ0wtODExMkRHL0hHLCBBLTgyMlBHTC9QR0gsIEEtODIzUEdML1BHSCAqLworI2RlZmluZSBib2FyZEFDTDgyMTYJCSA4CS8qIGFuZCBJQ1AgREFTIEEtODI2UEcgKi8KKyNkZWZpbmUgYm9hcmRBODIxCQkgOQkvKiBQR0gsIFBHTCwgUEdML05EQSB2ZXJzaW9ucyAqLworCisjZGVmaW5lIFBDTHgxeF9JT1JBTkdFIAkJMTYKKworI2RlZmluZSBQQ0w4MTJfQ1RSMAkJIDAKKyNkZWZpbmUgUENMODEyX0NUUjEJCSAxCisjZGVmaW5lIFBDTDgxMl9DVFIyCQkgMgorI2RlZmluZSBQQ0w4MTJfQ1RSQ1RMCQkgMworI2RlZmluZSBQQ0w4MTJfQURfTE8JCSA0CisjZGVmaW5lIFBDTDgxMl9EQTFfTE8JCSA0CisjZGVmaW5lIFBDTDgxMl9BRF9ISQkJIDUKKyNkZWZpbmUgUENMODEyX0RBMV9ISQkJIDUKKyNkZWZpbmUgUENMODEyX0RBMl9MTwkJIDYKKyNkZWZpbmUgUENMODEyX0RJX0xPCQkgNgorI2RlZmluZSBQQ0w4MTJfREEyX0hJCQkgNworI2RlZmluZSBQQ0w4MTJfRElfSEkJCSA3CisjZGVmaW5lIFBDTDgxMl9DTFJJTlQJCSA4CisjZGVmaW5lIFBDTDgxMl9HQUlOCQkgOQorI2RlZmluZSBQQ0w4MTJfTVVYCQkxMAorI2RlZmluZSBQQ0w4MTJfTU9ERQkJMTEKKyNkZWZpbmUgUENMODEyX0NOVEVOQUJMRSAJMTAKKyNkZWZpbmUgUENMODEyX1NPRlRUUklHIAkxMgorI2RlZmluZSBQQ0w4MTJfRE9fTE8JCTEzCisjZGVmaW5lIFBDTDgxMl9ET19ISSAJCTE0CisKKyNkZWZpbmUgUENMODEyX0RSRFkgCQkweDEwCS8qID0wIGRhdGEgcmVhZHkgKi8KKworI2RlZmluZSBBQ0w4MjE2X1NUQVRVUyAJCSA4CS8qIDUuIGJpdCBzaWduYWxpemUgZGF0YSByZWFkeSAqLworCisjZGVmaW5lIEFDTDgyMTZfRFJEWSAJCTB4MjAJLyogPTAgZGF0YSByZWFkeSAqLworCisjZGVmaW5lIE1BWF9DSEFOTElTVF9MRU4JMjU2CS8qIGxlbmd0aCBvZiBzY2FuIGxpc3QgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxMnBnX2FpID0geyA1LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlCSVBfUkFOR0UoMC4zMTI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxMnBnMl9haSA9IHsgNSwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlODEyX2JpcG9sYXIxXzI1ID0geyAxLCB7CisJCQlCSVBfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTgxMl9iaXBvbGFyMF82MjUgPSB7IDEsIHsKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTgxMl9iaXBvbGFyMF8zMTI1ID0geyAxLCB7CisJCQlCSVBfUkFOR0UoMC4zMTI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxM2JfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxM2IyX2FpID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9pc284MTNfMV9haSA9IHsgNSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJQklQX1JBTkdFKDAuMzEyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9pc284MTNfMV8yX2FpID0geyA1LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfaXNvODEzXzJfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2lzbzgxM18yXzJfYWkgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTNfMV9haSA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExM18xXzJfYWkgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTNfMl9haSA9IHsgMywgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hY2w4MTEzXzJfMl9haSA9IHsgMywgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmRnX2FpID0geyA5LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMTApLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmhnX2FpID0geyAxMiwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYTgyMXBnaF9haSA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCX0KK307CisKK3N0YXRpYyBpbnQgcGNsODEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDgxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgcGNsODEyX2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwlpbnQgYm9hcmRfdHlwZTsJCS8vIHR5cGUgb2YgdGhpcyBib2FyZAorCWludCBuX2FpY2hhbjsJCS8vIG51bSBvZiBBSSBjaGFucyBpbiBTLkUuCisJaW50IG5fYWljaGFuX2RpZmY7CS8vIERJRkYgbnVtIG9mIGNoYW5zCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIERBIGNoYW5zCisJaW50IG5fZGljaGFuOwkJLy8gREkgYW5kIERPIGNoYW5zCisJaW50IG5fZG9jaGFuOworCWludCBhaV9tYXhkYXRhOwkJLy8gQUkgcmVzb2x1dGlvbgorCXVuc2lnbmVkIGludCBhaV9uc19taW47CS8vIG1heCBzYW1wbGUgc3BlZWQgb2YgY2FyZCB2IG5zCisJdW5zaWduZWQgaW50IGk4MjU0X29zY19iYXNlOwkvLyBjbG9jayBiYXNlCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9haTsJLy8gcmFuZ2VsaXN0IGZvciBBL0QKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQorCXVuc2lnbmVkIGludCBJUlFiaXRzOwkvLyBhbGxvd2VkIElSUQorCXVuc2lnbmVkIGNoYXIgRE1BYml0czsJLy8gYWxsb3dlZCBETUEgY2hhbnMKKwl1bnNpZ25lZCBjaGFyIGlvX3JhbmdlOwkvLyBpb3JhbmdlIGZvciB0aGlzIGJvYXJkCisJdW5zaWduZWQgY2hhciBoYXZlTVBDNTA4OwkvLyAxPWJvYXJkIHVzZSBNUEM1MDhBIG11bHRpcGxleG9yCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsODEyX2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDgxMiIsIGJvYXJkUENMODEyLCAxNiwgMCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkzMzAwMCwgNTAwLCAmcmFuZ2VfYmlwb2xhcjEwLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7InBjbDgxMnBnIiwgYm9hcmRQQ0w4MTJQRywgMTYsIDAsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJMzMwMDAsIDUwMCwgJnJhbmdlX3BjbDgxMnBnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImFjbDgxMTJwZyIsIGJvYXJkUENMODEyUEcsIDE2LCAwLCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9wY2w4MTJwZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MTEyZGciLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9hY2w4MTEyZGdfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDF9LAorCXsiYWNsODExMmhnIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmhnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAxfSwKKwl7ImE4MjFwZ2wiLCBib2FyZEE4MjEsIDE2LCA4LCAxLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9wY2w4MTNiX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweDAwMGMsIDB4MDAsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjFwZ2xuZGEiLCBib2FyZEE4MjEsIDE2LCA4LCAwLCAwLCAwLCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYl9haSwgTlVMTCwKKwkJMHgwMDBjLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIxcGdoIiwgYm9hcmRBODIxLCAxNiwgOCwgMSwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYTgyMXBnaF9haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHgwMDBjLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIycGdsIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmRnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjJwZ2giLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9hY2w4MTEyaGdfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYTgyM3BnbCIsIGJvYXJkQUNMODExMiwgMTYsIDgsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJODAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmRnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjNwZ2giLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTgwMDAsIDUwMCwgJnJhbmdlX2FjbDgxMTJoZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJwY2w4MTMiLCBib2FyZFBDTDgxMywgMzIsIDAsIDAsIDAsIDAsIDB4MGZmZiwKKwkJCTAsIDAsICZyYW5nZV9wY2w4MTNiX2FpLCBOVUxMLAorCQkweDAwMDAsIDB4MDAsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7InBjbDgxM2IiLCBib2FyZFBDTDgxM0IsIDMyLCAwLCAwLCAwLCAwLCAweDBmZmYsCisJCQkwLCAwLCAmcmFuZ2VfcGNsODEzYl9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MTEzIiwgYm9hcmRBQ0w4MTEzLCAzMiwgMCwgMCwgMCwgMCwgMHgwZmZmLAorCQkJMCwgMCwgJnJhbmdlX2FjbDgxMTNfMV9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJpc284MTMiLCBib2FyZElTTzgxMywgMzIsIDAsIDAsIDAsIDAsIDB4MGZmZiwKKwkJCTAsIDAsICZyYW5nZV9pc284MTNfMV9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MjE2IiwgYm9hcmRBQ0w4MjE2LCAxNiwgOCwgMiwgMTYsIDE2LCAweGZmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYjJfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDF9LAorCXsiYTgyNnBnIiwgYm9hcmRBQ0w4MjE2LCAxNiwgOCwgMiwgMTYsIDE2LCAweGZmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYjJfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDB9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbDgxMl9ib2FyZCkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsODEyX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsODEyID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDgxMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsODEyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w4MTJfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbDgxMl9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDgxMik7CisKK3N0cnVjdCBwY2w4MTJfcHJpdmF0ZSB7CisKKwl1bnNpZ25lZCBjaGFyIHZhbGlkOwkvLyA9MSBkZXZpY2UgaXMgT0sKKwl1bnNpZ25lZCBjaGFyIGRtYTsJLy8gPjAgdXNlIGRtYSAoIHVzZWRETUEgY2hhbm5lbCkKKwl1bnNpZ25lZCBjaGFyIHVzZV9kaWZmOwkvLyA9MSBkaWZmIGlucHV0cworCXVuc2lnbmVkIGNoYXIgdXNlX01QQzsJLy8gMT1ib2FyZCB1c2VzIE1QQzUwOEEgbXVsdGlwbGV4b3IKKwl1bnNpZ25lZCBjaGFyIHVzZV9leHRfdHJnOwkvLyAxPWJvYXJkIHVzZXMgZXh0ZXJuYWwgdHJpZ2dlcgorCXVuc2lnbmVkIGNoYXIgcmFuZ2VfY29ycmVjdGlvbjsJLy8gPTEgd2UgbXVzdCBhZGQgMSB0byByYW5nZSBudW1iZXIKKwl1bnNpZ25lZCBjaGFyIG9sZF9jaGFuX3JlZzsJLy8gbGFzdGx5IHVzZWQgY2hhbi9nYWluIHBhaXIKKwl1bnNpZ25lZCBjaGFyIG9sZF9nYWluX3JlZzsKKwl1bnNpZ25lZCBjaGFyIG1vZGVfcmVnX2ludDsJLy8gdGhlcmUgaXMgc3RvcmVkIElOVCBudW1iZXIgZm9yIHNvbWUgY2FyZAorCXVuc2lnbmVkIGNoYXIgYWlfbmV2ZXJlbmRpbmc7CS8vID0xIHdlIGRvIHVubGltaXRlZCBBSQorCXVuc2lnbmVkIGNoYXIgYWlfZW9zOwkvLyAxPUVPUyB3YWtlIHVwCisJdW5zaWduZWQgY2hhciBhaV9kbWE7CS8vID0xIHdlIHVzZSBETUEKKwl1bnNpZ25lZCBpbnQgYWlfcG9sbF9wdHI7CS8vIGhvdyBtYW55IHNhbXBlcyB0cmFuc2ZlciBwb2xsCisJdW5zaWduZWQgaW50IGFpX3NjYW5zOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfYWN0X3NjYW47CS8vIGhvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkCisJdW5zaWduZWQgaW50IGFpX2NoYW5saXN0W01BWF9DSEFOTElTVF9MRU5dOwkvLyBvdXIgY29weSBvZiBjaGFubmVsL3JhbmdlIGxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfbl9jaGFuOwkvLyBob3cgbWFueSBjaGFubmVscyBpcyBtZWFzdXJlZAorCXVuc2lnbmVkIGludCBhaV9mbGFnczsJLy8gZmxhZ2xpc3QKKwl1bnNpZ25lZCBpbnQgYWlfZGF0YV9sZW47CS8vIGxlbiBvZiBkYXRhIGJ1ZmZlcgorCXNob3J0ICphaV9kYXRhOwkvLyBkYXRhIGJ1ZmZlcgorCXVuc2lnbmVkIGludCBhaV9pczE2YjsJLy8gPTEgd2UgaGF2ZSAxNiBiaXQgY2FyZAorCXVuc2lnbmVkIGxvbmcgZG1hYnVmWzJdOwkvLyBQVFIgdG8gRE1BIGJ1ZgorCXVuc2lnbmVkIGludCBkbWFwYWdlc1syXTsJLy8gaG93IG1hbnkgcGFnZXMgd2UgaGF2ZSBhbGxvY2F0ZWQKKwl1bnNpZ25lZCBpbnQgaHdkbWFwdHJbMl07CS8vIEhXIFBUUiB0byBETUEgYnVmCisJdW5zaWduZWQgaW50IGh3ZG1hc2l6ZVsyXTsJLy8gRE1BIGJ1ZiBzaXplIGluIGJ5dGVzCisJdW5zaWduZWQgaW50IGRtYWJ5dGVzdG9tb3ZlWzJdOwkvLyBob3cgbWFueSBieXRlcyBETUEgdHJhbnNmZXIKKwlpbnQgbmV4dF9kbWFfYnVmOwkvLyB3aGljaCBidWZmZXIgaXMgbmV4dCB0byB1c2UKKwl1bnNpZ25lZCBpbnQgZG1hX3J1bnNfdG9fZW5kOwkvLyBob3cgbWFueSB0aW1lcyB3ZSBtdXN0IHN3aXRjaCBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBsYXN0X2RtYV9ydW47CS8vIGhvdyBtYW55IGJ5dGVzIHRvIHRyYW5zZmVyIG9uIGxhc3QgRE1BIGJ1ZmZlcgorCXVuc2lnbmVkIGludCBtYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdDsJLy8gc2V0bGluZyB0aW1lIGZvciBnYWluCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOwkvLyBkYXRhIGZvciBBTyByZWFkYmFjaworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNsODEyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworc3RhdGljIHZvaWQgc2V0dXBfcmFuZ2VfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCByYW5nZWNoYW4sIGNoYXIgd2FpdCk7CitzdGF0aWMgaW50IHBjbDgxMl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgdGltZW91dCwgaGk7CisKKwlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDEsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvKiBzZWxlY3Qgc29mdHdhcmUgdHJpZ2dlciAqLworCXNldHVwX3JhbmdlX2NoYW5uZWwoZGV2LCBzLCBpbnNuLT5jaGFuc3BlYywgMSk7CS8vIHNlbGVjdCBjaGFubmVsIGFuZCByZW5nZQorCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0YigyNTUsIGRldi0+aW9iYXNlICsgUENMODEyX1NPRlRUUklHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQljb21lZGlfdWRlbGF5KDUpOworCQl0aW1lb3V0ID0gNTA7CS8qIHdhaXQgbWF4IDUwdXMsIGl0IG11c3QgZmluaXNoIHVuZGVyIDMzdXMgKi8KKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQURfSEkpOworCQkJaWYgKCEoaGkgJiBQQ0w4MTJfRFJEWSkpCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBwY2w4MTI6ICglcyBhdCAweCVseCkgQS9EIGluc24gcmVhZCB0aW1lb3V0XG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lLCBkZXYtPmlvYmFzZSk7CisJCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJCXJldHVybiAtRVRJTUU7CisKKwkgICAgICBjb252X2ZpbmlzaDoKKwkJZGF0YVtuXSA9ICgoaGkgJiAweGYpIDw8IDgpIHwgaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0xPKTsKKwl9CisJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgYWNsODIxNl9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCB0aW1lb3V0OworCisJb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwkvLyBzZWxlY3QgY2hhbm5lbCBhbmQgcmVuZ2UKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJY29tZWRpX3VkZWxheSg1KTsKKwkJdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzLCBpdCBtdXN0IGZpbmlzaCB1bmRlciAzM3VzICovCisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmICghKGluYihkZXYtPmlvYmFzZSArIEFDTDgyMTZfU1RBVFVTKSAmIEFDTDgyMTZfRFJEWSkpCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBwY2w4MTI6ICglcyBhdCAweCVseCkgQS9EIGluc24gcmVhZCB0aW1lb3V0XG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lLCBkZXYtPmlvYmFzZSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJCXJldHVybiAtRVRJTUU7CisKKwkgICAgICBjb252X2ZpbmlzaDoKKwkJZGF0YVtuXSA9CisJCQkoaW5iKGRldi0+aW9iYXNlICsKKwkJCQlQQ0w4MTJfQURfSEkpIDw8IDgpIHwgaW5iKGRldi0+aW9iYXNlICsKKwkJCVBDTDgxMl9BRF9MTyk7CisJfQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKChkYXRhW2ldICYgMHhmZiksCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMODEyX0RBMl9MTyA6IFBDTDgxMl9EQTFfTE8pKTsKKwkJb3V0YigoZGF0YVtpXSA+PiA4KSAmIDB4MGYsCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMODEyX0RBMl9ISSA6IFBDTDgxMl9EQTFfSEkpKTsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCXJldHVybiBpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxMl9ESV9MTyk7CisJZGF0YVsxXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRElfSEkpIDw8IDg7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCW91dGIocy0+c3RhdGUgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9ET19MTyk7CisJCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9ET19ISSk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgcGNsODEyX2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlydF9wcmludGsoInBjbDgxMiBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKKwkJY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOworCXJ0X3ByaW50aygicGNsODEyIGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAorCQljbWQtPnN0YXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5jb252ZXJ0X2FyZyk7CisJcnRfcHJpbnRrKCJwY2w4MTIgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCisJCWNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlydF9wcmludGsoInBjbDgxMiBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwgZSwKKwkJY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKVxuIik7CisJcGNsODEyX2NtZHRlc3Rfb3V0KC0xLCBjbWQpOworI2VuZGlmCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlpZiAoZGV2cHJpdi0+dXNlX2V4dF90cmcpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0VYVDsKKwl9IGVsc2UgeworCQljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJfQorCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXBjbDgxMl9jbWR0ZXN0X291dCgxLCBjbWQpOworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTFcbiIsCisJCQllcnIpOworI2VuZGlmCisJCXJldHVybiAxOworCX0KKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoZGV2cHJpdi0+dXNlX2V4dF90cmcpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJCWNtZC0+Y29udmVydF9zcmMgPSBUUklHX0VYVDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikgeworCQkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXBjbDgxMl9jbWR0ZXN0X291dCgyLCBjbWQpOworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTJcbiIsCisJCQllcnIpOworI2VuZGlmCisJCXJldHVybiAyOworCX0KKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfRVhUICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IE1BWF9DSEFOTElTVF9MRU4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXBjbDgxMl9jbWR0ZXN0X291dCgzLCBjbWQpOworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTNcbiIsCisJCQllcnIpOworI2VuZGlmCisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwkJcnRfcHJpbnRrCisJCQkoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD00XG4iLAorCQkJZXJyKTsKKyNlbmRpZgorCQlyZXR1cm4gNDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMCwgaSwgZG1hX2ZsYWdzLCBieXRlczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CisjZW5kaWYKKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZXZwcml2LT51c2VfZXh0X3RyZykgeworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gTUFYX0NIQU5MSVNUX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwKKwkJCSZkaXZpc29yMSwgJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlkZXZwcml2LT5haV9uX2NoYW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKKwltZW1jcHkoZGV2cHJpdi0+YWlfY2hhbmxpc3QsIGNtZC0+Y2hhbmxpc3QsCisJCXNpemVvZih1bnNpZ25lZCBpbnQpICogY21kLT5zY2FuX2VuZF9hcmcpOworCXNldHVwX3JhbmdlX2NoYW5uZWwoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdFswXSwgMSk7CS8vIHNlbGVjdCBmaXJzdCBjaGFubmVsIGFuZCByYW5nZQorCisJaWYgKGRldnByaXYtPmRtYSkgewkvLyBjaGVjayBpZiB3ZSBjYW4gdXNlIERNQSB0cmFuc2ZlcgorCQlkZXZwcml2LT5haV9kbWEgPSAxOworCQlmb3IgKGkgPSAxOyBpIDwgZGV2cHJpdi0+YWlfbl9jaGFuOyBpKyspCisJCQlpZiAoZGV2cHJpdi0+YWlfY2hhbmxpc3RbMF0gIT0gZGV2cHJpdi0+YWlfY2hhbmxpc3RbaV0pIHsKKwkJCQlkZXZwcml2LT5haV9kbWEgPSAwOwkvLyB3ZSBjYW5uJ3QgdXNlIERNQSA6LSgKKwkJCQlicmVhazsKKwkJCX0KKwl9IGVsc2UKKwkJZGV2cHJpdi0+YWlfZG1hID0gMDsKKworCWRldnByaXYtPmFpX2ZsYWdzID0gY21kLT5mbGFnczsKKwlkZXZwcml2LT5haV9kYXRhX2xlbiA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKKwlkZXZwcml2LT5haV9kYXRhID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gMDsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOworCX0KKworCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKKwlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKworCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwkJZGV2cHJpdi0+YWlfZW9zID0gMTsKKwkJaWYgKGRldnByaXYtPmFpX25fY2hhbiA9PSAxKQorCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLy8gRE1BIGlzIHVzZWxlc3MgZm9yIHRoaXMgc2l0dWF0aW9uCisJfQorCisJaWYgKGRldnByaXYtPmFpX2RtYSkgeworCQlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7CS8vIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4KKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0KKwkJCQlkZXZwcml2LT5haV9uX2NoYW4gKiBzaXplb2Yoc2hvcnQpOworCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPQorCQkJCWRldnByaXYtPmFpX25fY2hhbiAqIHNpemVvZihzaG9ydCk7CisJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSAxOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxXSA9IGRldnByaXYtPmh3ZG1hc2l6ZVsxXTsKKwkJCWlmIChkZXZwcml2LT5haV9kYXRhX2xlbiA8IGRldnByaXYtPmh3ZG1hc2l6ZVswXSkKKwkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9CisJCQkJCWRldnByaXYtPmFpX2RhdGFfbGVuOworCQkJaWYgKGRldnByaXYtPmFpX2RhdGFfbGVuIDwgZGV2cHJpdi0+aHdkbWFzaXplWzFdKQorCQkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdID0KKwkJCQkJZGV2cHJpdi0+YWlfZGF0YV9sZW47CisJCQlpZiAoZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlieXRlcyA9IGRldnByaXYtPmFpX25fY2hhbiAqIGRldnByaXYtPmFpX3NjYW5zICogc2l6ZW9mKHNob3J0KTsJLy8gaG93IG1hbnkgc2FtcGxlcyB3ZSBtdXN0IHRyYW5zZmVyPworCQkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IGJ5dGVzIC8gZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF07CS8vIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwKKwkJCQlkZXZwcml2LT5sYXN0X2RtYV9ydW4gPSBieXRlcyAlIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOwkvL29uIGxhc3QgZG1hIHRyYW5zZmVyIG11c3QgYmUgbW92ZWQKKwkJCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID09IDApCisJCQkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0KKwkJCQkJCWRldnByaXYtPmxhc3RfZG1hX3J1bjsKKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKKwkJCX0KKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPiBkZXZwcml2LT5od2RtYXNpemVbMF0pIHsKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdOworCQkJZGV2cHJpdi0+YWlfZW9zID0gMDsKKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPiBkZXZwcml2LT5od2RtYXNpemVbMV0pIHsKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdID0gZGV2cHJpdi0+aHdkbWFzaXplWzFdOworCQkJZGV2cHJpdi0+YWlfZW9zID0gMDsKKwkJfQorCQlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAwOworCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKKwkJZG1hX2ZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwkJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyWzBdKTsKKwkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdKTsKKwkJcmVsZWFzZV9kbWFfbG9jayhkbWFfZmxhZ3MpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXJ0X3ByaW50aworCQkJKCJwY2w4MTIgRURCRzogICBETUEgJWQgUFRSIDB4JTB4LzB4JTB4IExFTiAldS8ldSBFT1MgJWRcbiIsCisJCQlkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyWzBdLAorCQkJZGV2cHJpdi0+aHdkbWFwdHJbMV0sIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdLAorCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0sIGRldnByaXYtPmFpX2Vvcyk7CisjZW5kaWYKKwl9CisKKwlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCXN0YXJ0X3BhY2VyKGRldiwgMSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGRldnByaXYtPmFpX2RtYSkgeworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDIsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvLyBsZXQncyBnbyEKKwl9IGVsc2UgeworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDYsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvLyBsZXQncyBnbyEKKwl9CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTJfYWlfaW50KGludCBpcnEsIHZvaWQgKmQpCit7CisJY2hhciBlcnIgPSAxOworCXVuc2lnbmVkIGludCBtYXNrLCB0aW1lb3V0OworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJdGltZW91dCA9IDUwOwkJLyogd2FpdCBtYXggNTB1cywgaXQgbXVzdCBmaW5pc2ggdW5kZXIgMzN1cyAqLworCWlmIChkZXZwcml2LT5haV9pczE2YikgeworCQltYXNrID0gMHhmZmZmOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBBQ0w4MjE2X1NUQVRVUykgJiBBQ0w4MjE2X0RSRFkpKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwl9IGVsc2UgeworCQltYXNrID0gMHgwZmZmOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQURfSEkpICYgUENMODEyX0RSRFkpKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCXJ0X3ByaW50aworCQkJKCJjb21lZGklZDogcGNsODEyOiAoJXMgYXQgMHglbHgpIEEvRCBjbWQgSVJRIHdpdGhvdXQgRFJEWSFcbiIsCisJCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUsIGRldi0+aW9iYXNlKTsKKwkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsCisJCSgoaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0hJKSA8PCA4KSB8IGluYihkZXYtPmlvYmFzZSArCisJCQkJUENMODEyX0FEX0xPKSkgJiBtYXNrKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgewkvKiBvbmUgc2NhbiBkb25lICovCisJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCX0KKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9mcm9tX2RtYV9idWYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzaG9ydCAqIHB0ciwgdW5zaWduZWQgaW50IGJ1ZnB0ciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCWZvciAoaSA9IGxlbjsgaTsgaS0tKSB7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsJLy8gZ2V0IG9uZSBzYW1wbGUKKworCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCQlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKQorCQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJCXBjbDgxMl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYShpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwl1bnNpZ25lZCBsb25nIGRtYV9mbGFnczsKKwlpbnQgbGVuLCBidWZwdHI7CisJc2hvcnQgKnB0cjsKKworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoLi4uKVxuIik7CisjZW5kaWYKKwlwdHIgPSAoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmW2RldnByaXYtPm5leHRfZG1hX2J1Zl07CisJbGVuID0gKGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlW2RldnByaXYtPm5leHRfZG1hX2J1Zl0gPj4gMSkgLQorCQlkZXZwcml2LT5haV9wb2xsX3B0cjsKKworCWRldnByaXYtPm5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5uZXh0X2RtYV9idWY7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKKwlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyW2RldnByaXYtPm5leHRfZG1hX2J1Zl0pOworCWlmIChkZXZwcml2LT5haV9lb3MpIHsKKwkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsCisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kKSB7CisJCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwKKwkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5sYXN0X2RtYV9ydW4pOworCQl9CisJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCX0KKwlyZWxlYXNlX2RtYV9sb2NrKGRtYV9mbGFncyk7CisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCisJYnVmcHRyID0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJZGV2cHJpdi0+YWlfcG9sbF9wdHIgPSAwOworCisJdHJhbnNmZXJfZnJvbV9kbWFfYnVmKGRldiwgcywgcHRyLCBidWZwdHIsIGxlbik7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IGludGVycnVwdF9wY2w4MTJfYWlfZG1hKC4uLilcbiIpOworI2VuZGlmCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTIoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKGRldnByaXYtPmFpX2RtYSkgeworCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoaXJxLCBkKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxMl9haV9pbnQoaXJxLCBkKTsKKwl9OworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRvcDEsIHRvcDIsIGk7CisKKwlpZiAoIWRldnByaXYtPmFpX2RtYSkKKwkJcmV0dXJuIDA7CS8vIHBvbGwgaXMgdmFsaWQgb25seSBmb3IgRE1BIHRyYW5zZmVyCisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXRvcDEgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+YWlfZG1hKTsJLy8gd2hlcmUgaXMgbm93IERNQQorCQl0b3AyID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmFpX2RtYSk7CisJCWlmICh0b3AxID09IHRvcDIpCisJCQlicmVhazsKKwl9CisKKwlpZiAodG9wMSAhPSB0b3AyKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXRvcDEgPSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSAtIHRvcDE7CS8vIHdoZXJlIGlzIG5vdyBETUEgaW4gYnVmZmVyCisJdG9wMSA+Pj0gMTsJCS8vIHNhbXBsZSBwb3NpdGlvbgorCXRvcDIgPSB0b3AxIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJaWYgKHRvcDIgPCAxKSB7CQkvLyBubyBuZXcgc2FtcGxlcworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0cmFuc2Zlcl9mcm9tX2RtYV9idWYoZGV2LCBzLAorCQkodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSwKKwkJZGV2cHJpdi0+YWlfcG9sbF9wdHIsIHRvcDIpOworCisJZGV2cHJpdi0+YWlfcG9sbF9wdHIgPSB0b3AxOwkvLyBuZXcgYnVmZmVyIHBvc2l0aW9uCisKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgLSBzLT5hc3luYy0+YnVmX3JlYWRfY291bnQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzZXR1cF9yYW5nZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHJhbmdlY2hhbiwgY2hhciB3YWl0KQoreworCXVuc2lnbmVkIGNoYXIgY2hhbl9yZWcgPSBDUl9DSEFOKHJhbmdlY2hhbik7CS8vIG5vcm1hbCBib2FyZAorCXVuc2lnbmVkIGNoYXIgZ2Fpbl9yZWcgPSBDUl9SQU5HRShyYW5nZWNoYW4pICsgZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbjsJLy8gZ2FpbiBpbmRleAorCisJaWYgKChjaGFuX3JlZyA9PSBkZXZwcml2LT5vbGRfY2hhbl9yZWcpCisJCSYmIChnYWluX3JlZyA9PSBkZXZwcml2LT5vbGRfZ2Fpbl9yZWcpKQorCQlyZXR1cm47CQkvLyB3ZSBjYW4gcmV0dXJuLCBubyBjaGFuZ2UKKworCWRldnByaXYtPm9sZF9jaGFuX3JlZyA9IGNoYW5fcmVnOworCWRldnByaXYtPm9sZF9nYWluX3JlZyA9IGdhaW5fcmVnOworCisJaWYgKGRldnByaXYtPnVzZV9NUEMpIHsKKwkJaWYgKGRldnByaXYtPnVzZV9kaWZmKSB7CisJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgzMDsJLy8gRElGRiBpbnB1dHMKKwkJfSBlbHNlIHsKKwkJCWlmIChjaGFuX3JlZyAmIDB4ODApIHsKKwkJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgyMDsJLy8gU0UgaW5wdXRzIDgtMTUKKwkJCX0gZWxzZSB7CisJCQkJY2hhbl9yZWcgPSBjaGFuX3JlZyB8IDB4MTA7CS8vIFNFIGlucHV0cyAwLTcKKwkJCX0KKwkJfQorCX0KKworCW91dGIoY2hhbl9yZWcsIGRldi0+aW9iYXNlICsgUENMODEyX01VWCk7CS8qIHNlbGVjdCBjaGFubmVsICovCisJb3V0YihnYWluX3JlZywgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfR0FJTik7CS8qIHNlbGVjdCBnYWluICovCisKKwlpZiAod2FpdCkgeworCQljb21lZGlfdWRlbGF5KGRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0KTsJLy8gWFhYIHRoaXMgZGVwZW5kcyBvbiBzZWxlY3RlZCByYW5nZSBhbmQgY2FuIGJlIHZlcnkgbG9uZyBmb3Igc29tZSBoaWdoIGdhaW4gcmFuZ2VzIQorCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMikKK3sKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHN0YXJ0X3BhY2VyKCVkLCV1LCV1KVxuIiwgbW9kZSwgZGl2aXNvcjEsCisJCWRpdmlzb3IyKTsKKyNlbmRpZgorCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSQ1RMKTsKKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUkNUTCk7CisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJb3V0YihkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjIpOworCQlvdXRiKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjIpOworCQlvdXRiKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSMSk7CisJCW91dGIoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSMSk7CisJfQorI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEVORDogc3RhcnRfcGFjZXIoLi4uKVxuIik7CisjZW5kaWYKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmWzBdKQorCQkJZnJlZV9wYWdlcyhkZXZwcml2LT5kbWFidWZbMF0sIGRldnByaXYtPmRtYXBhZ2VzWzBdKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlsxXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzFdLCBkZXZwcml2LT5kbWFwYWdlc1sxXSk7CisJCWlmIChkZXZwcml2LT5kbWEpCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jYW5jZWwoLi4uKVxuIik7CisjZW5kaWYKKwlpZiAoZGV2cHJpdi0+YWlfZG1hKQorCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvKiBTdG9wIEEvRCAqLworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIDgyNTQKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBwY2w4MTJfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfcmVzZXQoLi4uKVxuIik7CisjZW5kaWYKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX01VWCk7CisJb3V0YigwICsgZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfR0FJTik7CisJZGV2cHJpdi0+b2xkX2NoYW5fcmVnID0gLTE7CS8vIGludmFsaWRhdGUgY2hhaW4vZ2FpbiBtZW1vcnkKKwlkZXZwcml2LT5vbGRfZ2Fpbl9yZWcgPSAtMTsKKworCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCWNhc2UgYm9hcmRQQ0w4MTJQRzoKKwljYXNlIGJvYXJkUENMODEyOgorCWNhc2UgYm9hcmRBQ0w4MTEyOgorCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0RBMl9MTyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfREEyX0hJKTsKKwljYXNlIGJvYXJkQTgyMToKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9EQTFfTE8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0RBMV9ISSk7CisJCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIDgyNTQKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9ET19ISSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRE9fTE8pOworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CisJCWJyZWFrOworCWNhc2UgYm9hcmRQQ0w4MTNCOgorCWNhc2UgYm9hcmRQQ0w4MTM6CisJY2FzZSBib2FyZElTTzgxMzoKKwljYXNlIGJvYXJkQUNMODExMzoKKwkJY29tZWRpX3VkZWxheSg1KTsKKwkJYnJlYWs7CisJfQorCWNvbWVkaV91ZGVsYXkoNSk7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfcmVzZXQoLi4uKVxuIik7CisjZW5kaWYKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0LCBzdWJkZXY7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgZG1hOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IG5fc3ViZGV2aWNlczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDgxMjogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UsICJwY2w4MTIiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w4MTJfcHJpdmF0ZSkpKSA8IDApIHsKKwkJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKwkJcmV0dXJuIHJldDsJLyogQ2FuJ3QgYWxsb2MgbWVtICovCisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlycSA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPklSUWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IElSUSAqLworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KKwkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKKwkJCQlwcmludGsoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLCBpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w4MTIsIDAsCisJCQkJCQkicGNsODEyIiwgZGV2KSkgeworCQkJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldSwgRElTQUJMSU5HIElUIiwgaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworCisJZG1hID0gMDsKKwlkZXZwcml2LT5kbWEgPSBkbWE7CisJaWYgKCFkZXYtPmlycSkKKwkJZ290byBub19kbWE7CS8qIGlmIHdlIGhhdmVuJ3QgSVJRLCB3ZSBjYW4ndCB1c2UgRE1BICovCisJaWYgKHRoaXNfYm9hcmQtPkRNQWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IERNQSAqLworCQlkbWEgPSBpdC0+b3B0aW9uc1syXTsKKwkJaWYgKCgoMSA8PCBkbWEpICYgdGhpc19ib2FyZC0+RE1BYml0cykgPT0gMCkgeworCQkJcHJpbnRrKCIsIERNQSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRkFJTCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8qIEJhZCBETUEgKi8KKwkJfQorCQlyZXQgPSByZXF1ZXN0X2RtYShkbWEsICJwY2w4MTIiKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgJXUsIEZBSUwhXG4iLCBkbWEpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogRE1BIGlzbid0IGZyZWUgKi8KKwkJfQorCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCXByaW50aygiLCBkbWE9JXUiLCBkbWEpOworCQlwYWdlcyA9IDE7CS8qIHdlIHdhbnQgOEtCICovCisJCWRldnByaXYtPmRtYWJ1ZlswXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzBdKSB7CisJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCS8qIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpIHdpbGwgaGVscCAuLi4uICovCisJCQlmcmVlX3Jlc291cmNlcyhkZXYpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogbm8gYnVmZmVyIDotKCAqLworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzBdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzBdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMF0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMF0gPSBQQUdFX1NJWkUgKiAoMSA8PCBwYWdlcyk7CisJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzFdKSB7CisJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCWZyZWVfcmVzb3VyY2VzKGRldik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzFdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzFdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMV0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMV0gPSBQQUdFX1NJWkUgKiAoMSA8PCBwYWdlcyk7CisJfQorICAgICAgbm9fZG1hOgorCisJbl9zdWJkZXZpY2VzID0gMDsKKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9kb2NoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkgeworCQlmcmVlX3Jlc291cmNlcyhkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN1YmRldiA9IDA7CisKKwkvKiBhbmFsb2cgaW5wdXQgKi8KKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4gPiAwKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzd2l0Y2ggKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUpIHsKKwkJY2FzZSBib2FyZEE4MjE6CisJCQlpZiAoaXQtPm9wdGlvbnNbMl0gPT0gMSkgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuX2RpZmY7CisJCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9ESUZGOworCQkJCWRldnByaXYtPnVzZV9kaWZmID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9HUk9VTkQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBib2FyZEFDTDgxMTI6CisJCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQkJaWYgKGl0LT5vcHRpb25zWzRdID09IDEpIHsKKwkJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbl9kaWZmOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJCQlkZXZwcml2LT51c2VfZGlmZiA9IDE7CisJCQl9IGVsc2UgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EOworCQkJYnJlYWs7CisJCX0KKwkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFpX21heGRhdGE7CisJCXMtPmxlbl9jaGFubGlzdCA9IE1BWF9DSEFOTElTVF9MRU47CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FpOworCQlpZiAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSA9PSBib2FyZEFDTDgyMTYpIHsKKwkJCXMtPmluc25fcmVhZCA9IGFjbDgyMTZfYWlfaW5zbl9yZWFkOworCQl9IGVsc2UgeworCQkJcy0+aW5zbl9yZWFkID0gcGNsODEyX2FpX2luc25fcmVhZDsKKwkJfQorCQlkZXZwcml2LT51c2VfTVBDID0gdGhpc19ib2FyZC0+aGF2ZU1QQzUwODsKKwkJcy0+Y2FuY2VsID0gcGNsODEyX2FpX2NhbmNlbDsKKwkJaWYgKGRldi0+aXJxKSB7CisJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCQlzLT5kb19jbWR0ZXN0ID0gcGNsODEyX2FpX2NtZHRlc3Q7CisJCQlzLT5kb19jbWQgPSBwY2w4MTJfYWlfY21kOworCQkJcy0+cG9sbCA9IHBjbDgxMl9haV9wb2xsOworCQl9CisJCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCQljYXNlIGJvYXJkUENMODEyUEc6CisJCQlpZiAoaXQtPm9wdGlvbnNbNF0gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2w4MTJwZzJfYWk7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZFBDTDgxMjoKKwkJCXN3aXRjaCAoaXQtPm9wdGlvbnNbNF0pIHsKKwkJCWNhc2UgMDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjJfNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZTgxMl9iaXBvbGFyMV8yNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZTgxMl9iaXBvbGFyMF82MjU7CisJCQkJYnJlYWs7CisJCQljYXNlIDU6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U4MTJfYmlwb2xhcjBfMzEyNTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJCXByaW50aygiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyB0byAwICgrLy0xMFYpIiwgaXQtPm9wdGlvbnNbNF0pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZFBDTDgxM0I6CisJCQlpZiAoaXQtPm9wdGlvbnNbMV0gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2w4MTNiMl9haTsKKwkJCWJyZWFrOworCQljYXNlIGJvYXJkSVNPODEzOgorCQkJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCQkJY2FzZSAwOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18xX2FpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18xXzJfYWk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfaXNvODEzXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfaXNvODEzXzJfMl9haTsKKwkJCQlkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfaXNvODEzXzFfYWk7CisJCQkJYnJlYWs7CisJCQkJcHJpbnRrKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsIGNoYW5naW5nIHRvIDAgIiwgaXQtPm9wdGlvbnNbMV0pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgYm9hcmRBQ0w4MTEzOgorCQkJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCQkJY2FzZSAwOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FjbDgxMTNfMV9haTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzFfMl9haTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWNsODExM18yXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FjbDgxMTNfMV9haTsKKwkJCQlicmVhazsKKwkJCQlwcmludGsoIiwgaW5jb3JyZWN0IHJhbmdlIG51bWJlciAlZCwgY2hhbmdpbmcgdG8gMCAiLCBpdC0+b3B0aW9uc1sxXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlzdWJkZXYrKzsKKwl9CisKKwkvKiBhbmFsb2cgb3V0cHV0ICovCisJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuID4gMCkgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gMHhmZmY7CisJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FvOworCQlzLT5pbnNuX3JlYWQgPSBwY2w4MTJfYW9faW5zbl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gcGNsODEyX2FvX2luc25fd3JpdGU7CisJCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCQljYXNlIGJvYXJkQTgyMToKKwkJCWlmIChpdC0+b3B0aW9uc1szXSA9PSAxKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZFBDTDgxMjoKKwkJY2FzZSBib2FyZEFDTDgxMTI6CisJCWNhc2UgYm9hcmRQQ0w4MTJQRzoKKwkJY2FzZSBib2FyZEFDTDgyMTY6CisJCQlpZiAoaXQtPm9wdGlvbnNbNV0gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJaWYgKGl0LT5vcHRpb25zWzVdID09IDIpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJCWJyZWFrOworCQl9CisJCXN1YmRldisrOworCX0KKworCS8qIGRpZ2l0YWwgaW5wdXQgKi8KKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4gPiAwKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBwY2w4MTJfZGlfaW5zbl9iaXRzOworCQlzdWJkZXYrKzsKKwl9CisKKwkvKiBkaWdpdGFsIG91dHB1dCAqLworCWlmICh0aGlzX2JvYXJkLT5uX2RvY2hhbiA+IDApIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHBjbDgxMl9kb19pbnNuX2JpdHM7CisJCXN1YmRldisrOworCX0KKworCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQlkZXZwcml2LT5haV9pczE2YiA9IDE7CisJY2FzZSBib2FyZFBDTDgxMlBHOgorCWNhc2UgYm9hcmRQQ0w4MTI6CisJY2FzZSBib2FyZEFDTDgxMTI6CisJCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gMTsKKwkJaWYgKGl0LT5vcHRpb25zWzNdID4gMCkKKwkJCWRldnByaXYtPnVzZV9leHRfdHJnID0gMTsJLy8gd2UgdXNlIGV4dGVybmFsIHRyaWdnZXIKKwljYXNlIGJvYXJkQTgyMToKKwkJZGV2cHJpdi0+bWF4XzgxMl9haV9tb2RlMF9yYW5nZXdhaXQgPSAxOworCQlkZXZwcml2LT5tb2RlX3JlZ19pbnQgPSAoaXJxIDw8IDQpICYgMHhmMDsKKwkJYnJlYWs7CisJY2FzZSBib2FyZFBDTDgxM0I6CisJY2FzZSBib2FyZFBDTDgxMzoKKwljYXNlIGJvYXJkSVNPODEzOgorCWNhc2UgYm9hcmRBQ0w4MTEzOgorCQlkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCA9IDU7CS8qIG1heWJlIHRoZXJlIG11c3QgYnkgZ3JlYXRlc3QgdGltZW91dCAqLworCQlicmVhazsKKwl9CisKKwlwcmludGsoIlxuIik7CisJZGV2cHJpdi0+dmFsaWQgPSAxOworCisJcGNsODEyX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgaW50IHBjbDgxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoImNvbWVkaSVkOiBwY2w4MTI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisjZW5kaWYKKwlmcmVlX3Jlc291cmNlcyhkZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWJhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKQEAgLTAsMCArMSwxMjUxIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKKworICAgQXV0aG9yOiAgSnVhbiBHcmlnZXJhIDxqdWFuQGdyaWdlcmEuY29tLmFyPgorICAgICAgICAgICAgYmFzZWQgb24gcGNsODE4IGJ5IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PiBhbmQgYml0cyBvZiBwY2w4MTIKKworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgY2FyZDogICBQQ0wtODE2LCBQQ0w4MTRCCisgICAgZHJpdmVyOiBwY2w4MTYKKyovCisvKgorRHJpdmVyOiBwY2w4MTYKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTgxNiBjYXJkcywgUENMLTgxNAorQXV0aG9yOiBKdWFuIEdyaWdlcmEgPGp1YW5AZ3JpZ2VyYS5jb20uYXI+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtODE2IChwY2w4MTYpLCBQQ0wtODE0QiAocGNsODE0YikKK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IFR1ZSwgIDIgQXByIDIwMDIgMjM6MTU6MjEgLTA4MDAKKworUENMIDgxNiBhbmQgODE0QiBoYXZlIDE2IFNFL0RJRkYgQURDcywgMTYgREFDcywgMTYgREkgYW5kIDE2IERPLgorRGlmZmVyZW5jZXMgYXJlIGF0IHJlc29sdXRpb24gKDE2IHZzIDEyIGJpdHMpLgorCitUaGUgZHJpdmVyIHN1cHBvcnQgQUkgY29tbWFuZCBtb2RlLCBvdGhlciBzdWJkZXZpY2VzIG5vdCB3cml0dGVuLgorCitBbmFsb2cgb3V0cHV0IGFuZCBkaWdpdGFsIGlucHV0IGFuZCBvdXRwdXQgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCisgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgREVCVUcoeCkgeAorCisvLyBib2FyZHMgY29uc3RhbnRzCisvLyBJTyBzcGFjZSBsZW4KKyNkZWZpbmUgUENMeDF4X1JBTkdFIDE2CisKKy8vI2RlZmluZSBvdXRiKHgseSkgIHByaW50aygiT1VUQigleCwgMjAwKyVkKVxuIiwgeCx5LTB4MjAwKTsgb3V0Yih4LHkpCisKKy8vIElOVEVMIDgyNTQgY291bnRlcnMKKyNkZWZpbmUgUENMODE2X0NUUjAgNAorI2RlZmluZSBQQ0w4MTZfQ1RSMSA1CisjZGVmaW5lIFBDTDgxNl9DVFIyIDYKKy8vIFI6IGNvdW50ZXIgcmVhZC1iYWNrIHJlZ2lzdGVyIFc6IGNvdW50ZXIgY29udHJvbAorI2RlZmluZSBQQ0w4MTZfQ1RSQ1RMIDcKKworLy8gUjogQS9EIGhpZ2ggYnl0ZSBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MTZfUkFOR0UgOQorLy8gVzogY2xlYXIgSU5UIHJlcXVlc3QKKyNkZWZpbmUgUENMODE2X0NMUklOVCAxMAorLy8gUjogbmV4dCBtdXggc2NhbiBjaGFubmVsIFc6IG11eCBzY2FuIGNoYW5uZWwgJiByYW5nZSBjb250cm9sIHBvaW50ZXIKKyNkZWZpbmUgUENMODE2X01VWCAxMQorLy8gUi9XOiBvcGVyYXRpb24gY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBQQ0w4MTZfQ09OVFJPTCAxMgorCisvLyBSOiByZXR1cm4gc3RhdHVzIGJ5dGUgIFc6IHNldCBETUEvSVJRCisjZGVmaW5lIFBDTDgxNl9TVEFUVVMgMTMKKyNkZWZpbmUgUENMODE2X1NUQVRVU19EUkRZX01BU0sgMHg4MAorCisvLyBSOiBsb3cgYnl0ZSBvZiBBL0QgVzogc29mdCBBL0QgdHJpZ2dlcgorI2RlZmluZSBQQ0w4MTZfQURfTE8gOAorLy8gUjogaGlnaCBieXRlIG9mIEEvRCBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MTZfQURfSEkgOQorCisvLyB0eXBlIG9mIGludGVycnVwdCBoYW5kbGVyCisjZGVmaW5lIElOVF9UWVBFX0FJMV9JTlQgMQorI2RlZmluZSBJTlRfVFlQRV9BSTFfRE1BIDIKKyNkZWZpbmUgSU5UX1RZUEVfQUkzX0lOVCA0CisjZGVmaW5lIElOVF9UWVBFX0FJM19ETUEgNQorI2lmZGVmIHVudXNlZAorI2RlZmluZSBJTlRfVFlQRV9BSTFfRE1BX1JUQyA5CisjZGVmaW5lIElOVF9UWVBFX0FJM19ETUFfUlRDIDEwCisKKy8vIFJUQyBzdHVmZi4uLgorI2RlZmluZSBSVENfSVJRIAk4CisjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxMAorI2VuZGlmCisKKyNkZWZpbmUgTUFHSUNfRE1BX1dPUkQgMHg1YTVhCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MTYgPSB7IDgsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RydWN0IHBjbDgxNl9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOwkvLyBib2FyZCBuYW1lCisJaW50IG5fcmFuZ2VzOwkJLy8gbGVuIG9mIHJhbmdlIGxpc3QKKwlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zIGluIGRpZmVyZW5jaWFsIG1vZGUKKwl1bnNpZ25lZCBpbnQgYWlfbnNfbWluOwkvLyBtaW5pbWFsIGFsbGxvd2VkIGRlbGF5IGJldHdlZW4gc2FtcGxlcyAoaW4gbnMpCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucworCWludCBuX2RpY2hhbjsJCS8vIG51bSBvZiBESSBjaGFucworCWludCBuX2RvY2hhbjsJCS8vIG51bSBvZiBETyBjaGFucworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV90eXBlOwkvLyBkZWZhdWx0IEEvRCByYW5nZWxpc3QKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdHlwZTsJLy8gZGFmYXVsdCBEL0EgcmFuZ2VsaXN0CisJdW5zaWduZWQgaW50IGlvX3JhbmdlOwkvLyBsZW4gb2YgSU8gc3BhY2UKKwl1bnNpZ25lZCBpbnQgSVJRYml0czsJLy8gYWxsb3dlZCBpbnRlcnJ1cHRzCisJdW5zaWduZWQgaW50IERNQWJpdHM7CS8vIGFsbG93ZWQgRE1BIGNoYW5zCisJaW50IGFpX21heGRhdGE7CQkvLyBtYXhkYXRhIGZvciBBL0QKKwlpbnQgYW9fbWF4ZGF0YTsJCS8vIG1heGRhdGEgZm9yIEQvQQorCWludCBhaV9jaGFubGlzdDsJLy8gYWxsb3dlZCBsZW4gb2YgY2hhbm5lbCBsaXN0IEEvRAorCWludCBhb19jaGFubGlzdDsJLy8gYWxsb3dlZCBsZW4gb2YgY2hhbm5lbCBsaXN0IEQvQQorCWludCBpODI1NF9vc2NfYmFzZTsJLy8gMS9mcmVxdWVuY3kgb2Ygb24gYm9hcmQgb3NjaWxhdG9yIGluIG5zCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsODE2X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDgxNiIsIDgsIDE2LCAxMDAwMCwgMSwgMTYsIDE2LCAmcmFuZ2VfcGNsODE2LAorCQkJJnJhbmdlX3BjbDgxNiwgUENMeDF4X1JBTkdFLAorCQkJMHgwMGZjLAkvLyBJUlEgbWFzaworCQkJMHgwYSwJLy8gRE1BIG1hc2sKKwkJCTB4ZmZmZiwJLy8gMTYtYml0IGNhcmQKKwkJCTB4ZmZmZiwJLy8gRC9BIG1heGRhdGEKKwkJCTEwMjQsCisJCQkxLAkvLyBhbyBjaGFuIGxpc3QKKwkJMTAwfSwKKwl7InBjbDgxNGIiLCA4LCAxNiwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxNiwKKwkJCSZyYW5nZV9wY2w4MTYsIFBDTHgxeF9SQU5HRSwKKwkJCTB4MDBmYywKKwkJCTB4MGEsCisJCQkweDNmZmYsCS8qIDE0IGJpdCBjYXJkICovCisJCQkweDNmZmYsCisJCQkxMDI0LAorCQkJMSwKKwkJMTAwfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w4MTZfYm9hcmQpKQorI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbDgxNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDgxNl9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgaW50IHBjbDgxNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2w4MTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworI2lmZGVmIHVudXNlZAorc3RhdGljIGludCBSVENfbG9jayA9IDA7CS8qIFJUQyBsb2NrICovCitzdGF0aWMgaW50IFJUQ190aW1lcl9sb2NrID0gMDsJLyogUlRDIGludCBsb2NrICovCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w4MTYgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsODE2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w4MTZfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDgxNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsODE2X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsODE2KTsKKworc3RydWN0IHBjbDgxNl9wcml2YXRlIHsKKworCXVuc2lnbmVkIGludCBkbWE7CS8vIHVzZWQgRE1BLCAwPWRvbid0IHVzZSBETUEKKwlpbnQgZG1hX3J0YzsJCS8vIDE9UlRDIHVzZWQgd2l0aCBETUEsIDA9bm8gUlRDIGFsbG9jCisjaWZkZWYgdW51c2VkCisJdW5zaWduZWQgbG9uZyBydGNfaW9iYXNlOwkvLyBSVEMgcG9ydCByZWdpb24KKwl1bnNpZ25lZCBpbnQgcnRjX2lvc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnRjX2lycTsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgZG1hYnVmWzJdOwkvLyBwb2ludGVycyB0byBiZWdpbiBvZiBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBkbWFwYWdlc1syXTsJLy8gbGVuIG9mIERNQSBidWZmZXJzIGluIFBBR0VfU0laRXMKKwl1bnNpZ25lZCBpbnQgaHdkbWFwdHJbMl07CS8vIGhhcmR3YXJlIGFkZHJlc3Mgb2YgRE1BIGJ1ZmZlcnMKKwl1bnNpZ25lZCBpbnQgaHdkbWFzaXplWzJdOwkvLyBsZW4gb2YgRE1BIGJ1ZmZlcnMgaW4gQnl0ZXMKKwl1bnNpZ25lZCBpbnQgZG1hc2FtcGxzaXplOwkvLyBzaXplIGluIHNhbXBsZXMgaHdkbWFzaXplWzBdLzIKKwl1bnNpZ25lZCBpbnQgbGFzdF90b3BfZG1hOwkvLyBETUEgcG9pbnRlciBpbiBsYXN0IFJUQyBpbnQKKwlpbnQgbmV4dF9kbWFfYnVmOwkvLyB3aGljaCBETUEgYnVmZmVyIHdpbGwgYmUgdXNlZCBuZXh0IHJvdW5kCisJbG9uZyBkbWFfcnVuc190b19lbmQ7CS8vIGhvdyBtYW55IHdlIG11c3QgcGVybW9ybSBETUEgdHJhbnNmZXIgdG8gZW5kIG9mIHJlY29yZAorCXVuc2lnbmVkIGxvbmcgbGFzdF9kbWFfcnVuOwkvLyBob3cgbWFueSBieXRlcyB3ZSBtdXN0IHRyYW5zZmVyIG9uIGxhc3QgRE1BIHBhZ2UKKworCXVuc2lnbmVkIGludCBhaV9zY2FuczsJLy8gbGVuIG9mIHNjYW5saXN0CisJdW5zaWduZWQgY2hhciBhaV9uZXZlcmVuZGluZzsJLy8gaWY9MSwgdGhlbiB3ZSBkbyBuZXZlcmVuZGluZyByZWNvcmQgKHlvdSBtdXN0IHVzZSBjYW5jZWwoKSkKKwlpbnQgaXJxX2ZyZWU7CQkvLyAxPWhhdmUgYWxsb2NhdGVkIElSUQorCWludCBpcnFfYmxvY2tlZDsJLy8gMT1JUlEgbm93IHVzZXMgYW55IHN1YmRldgorI2lmZGVmIHVudXNlZAorCWludCBydGNfaXJxX2Jsb2NrZWQ7CS8vIDE9d2Ugbm93IGRvIEFJIHdpdGggRE1BJlJUQworI2VuZGlmCisJaW50IGlycV93YXNfbm93X2Nsb3NlZDsJLy8gd2hlbiBJUlEgZmluaXNoLCB0aGVyZSdzIHN0b3JlZCBpbnQ4MTZfbW9kZSBmb3IgbGFzdCBpbnRlcnJ1cHQKKwlpbnQgaW50ODE2X21vZGU7CS8vIHdobyBub3cgdXNlcyBJUlEgLSAxPUFJMSBpbnQsIDI9QUkxIGRtYSwgMz1BSTMgaW50LCA0QUkzIGRtYQorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpsYXN0X2ludF9zdWI7CS8vIHB0ciB0byBzdWJkZXZpY2Ugd2hpY2ggbm93IGZpbmlzaAorCWludCBhaV9hY3Rfc2NhbjsJLy8gaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQKKwl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW5saXN0WzE2XTsJLy8gTVVYIHNldHRpbmcgZm9yIGFjdHVhbCBBSSBvcGVyYXRpb25zCisJdW5zaWduZWQgaW50IGFpX2FjdF9jaGFubGlzdF9sZW47CS8vIGhvdyBsb25nIGlzIGFjdHVhbCBNVVggbGlzdAorCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbmxpc3RfcG9zOwkvLyBhY3R1YWwgcG9zaXRpb24gaW4gTVVYIGxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfcG9sbF9wdHI7CS8vIGhvdyBtYW55IHNhbXBlcyB0cmFuc2ZlciBwb2xsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1Yl9haTsJLy8gcHRyIHRvIEFJIHN1YmRldmljZQorI2lmZGVmIHVudXNlZAorCXN0cnVjdCB0aW1lcl9saXN0IHJ0Y19pcnFfdGltZXI7CS8vIHRpbWVyIGZvciBSVEMgc2FuaXR5IGNoZWNrCisJdW5zaWduZWQgbG9uZyBydGNfZnJlcTsJLy8gUlRDIGludCBmcmVxCisjZW5kaWYKK307CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgY2hlY2tfYW5kX3NldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBjaGFubGVuKTsKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMik7CisjaWZkZWYgdW51c2VkCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCk7CisjZW5kaWYKKworc3RhdGljIGludCBwY2w4MTZfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQU5BTE9HIElOUFVUIE1PREUwLCA4MTYgY2FyZHMsIHNsb3cgdmVyc2lvbgorKi8KK3N0YXRpYyBpbnQgcGNsODE2X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IHRpbWVvdXQ7CisKKwlEUFJJTlRLKCJtb2RlIDAgYW5hbG9nIGlucHV0XG4iKTsKKwkvLyBzb2Z0d2FyZSB0cmlnZ2VyLCBETUEgYW5kIElOVCBvZmYKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOworCS8vIGNsZWFyIElOVCAoY29udmVyc2lvbiBlbmQpIGZsYWcKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CisKKwkvLyBTZXQgdGhlIGlucHV0IGNoYW5uZWwKKwlvdXRiKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOworCW91dGIoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9SQU5HRSk7CS8qIHNlbGVjdCBnYWluICovCisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKworCQl0aW1lb3V0ID0gMTAwOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfU1RBVFVTKSAmCisJCQkJCVBDTDgxNl9TVEFUVVNfRFJEWV9NQVNLKSkgeworCQkJCS8vIHJldHVybiByZWFkIHZhbHVlCisJCQkJZGF0YVtuXSA9CisJCQkJCSgoaW5iKGRldi0+aW9iYXNlICsKKwkJCQkJCQlQQ0w4MTZfQURfSEkpIDw8IDgpIHwKKwkJCQkJKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTykpKTsKKworCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJCWJyZWFrOworCQkJfQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQkvLyBSZXR1cm4gdGltZW91dCBlcnJvcgorCQlpZiAoIXRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0XG4iKTsKKwkJCWRhdGFbMF0gPSAwOworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgKGNvbnZlcnNpb24gZW5kKSBmbGFnICovCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJfQorCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBhbmFsb2cgaW5wdXQgaW50ZXJydXB0IG1vZGUgMSAmIDMsIDgxOCBjYXJkcworICAgb25lIHNhbXBsZSBwZXIgaW50ZXJydXB0IHZlcnNpb24KKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfaW50KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBsb3csIGhpOworCWludCB0aW1lb3V0ID0gNTA7CS8qIHdhaXQgbWF4IDUwdXMgKi8KKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUykgJgorCQkJCVBDTDgxNl9TVEFUVVNfRFJEWV9NQVNLKSkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlpZiAoIXRpbWVvdXQpIHsJCS8vIHRpbWVvdXQsIGJhaWwgZXJyb3IKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgSVJRIHdpdGhvdXQgRFJEWSEiKTsKKwkJcGNsODE2X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwl9CisKKwkvLyBnZXQgdGhlIHNhbXBsZQorCWxvdyA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CisJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfSEkpOworCisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIChoaSA8PCA4KSB8IGxvdyk7CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisKKwlpZiAoKytkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4pCisJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOworCisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJfQorCisJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKKwkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGRtYSBtb2RlIDEgJiAzLCA4MTYgY2FyZHMKKyovCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9mcm9tX2RtYV9idWYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzaG9ydCAqIHB0ciwgdW5zaWduZWQgaW50IGJ1ZnB0ciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHB0cltidWZwdHIrK10pOworCisJCWlmICgrK2RldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPj0KKwkJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4pIHsKKwkJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOworCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4rKzsKKwkJfQorCisJCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLy8gYWxsIGRhdGEgc2FtcGxlZAorCQkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE2X2FpX21vZGUxM19kbWEoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IGxlbiwgYnVmcHRyLCB0aGlzX2RtYV9idWY7CisJdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3M7CisJc2hvcnQgKnB0cjsKKworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJdGhpc19kbWFfYnVmID0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmOworCisJaWYgKChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPiAtMSkgfHwgZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsJLy8gc3dpdGNoIGRtYSBidWZzCisKKwkJZGV2cHJpdi0+bmV4dF9kbWFfYnVmID0gMSAtIGRldnByaXYtPm5leHRfZG1hX2J1ZjsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCk7CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisvLyAgY2xlYXJfZG1hX2ZmIChkZXZwcml2LT5kbWEpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLAorCQkJZGV2cHJpdi0+aHdkbWFwdHJbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSk7CisJCWlmIChkZXZwcml2LT5kbWFfcnVuc190b19lbmQpIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLAorCQkJCWRldnByaXYtPmh3ZG1hc2l6ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5sYXN0X2RtYV9ydW4pOworCQl9CisJCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKworCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCXB0ciA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbdGhpc19kbWFfYnVmXTsKKworCWxlbiA9IChkZXZwcml2LT5od2RtYXNpemVbMF0gPj4gMSkgLSBkZXZwcml2LT5haV9wb2xsX3B0cjsKKwlidWZwdHIgPSBkZXZwcml2LT5haV9wb2xsX3B0cjsKKwlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CisKKwl0cmFuc2Zlcl9mcm9tX2RtYV9idWYoZGV2LCBzLCBwdHIsIGJ1ZnB0ciwgbGVuKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBJTlQgcHJvY2VkdXJlCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTYoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlEUFJJTlRLKCI8ST4iKTsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJc3dpdGNoIChkZXZwcml2LT5pbnQ4MTZfbW9kZSkgeworCWNhc2UgSU5UX1RZUEVfQUkxX0RNQToKKwljYXNlIElOVF9UWVBFX0FJM19ETUE6CisJCXJldHVybiBpbnRlcnJ1cHRfcGNsODE2X2FpX21vZGUxM19kbWEoaXJxLCBkKTsKKwljYXNlIElOVF9UWVBFX0FJMV9JTlQ6CisJY2FzZSBJTlRfVFlQRV9BSTNfSU5UOgorCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfaW50KGlycSwgZCk7CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCWlmICgoIWRldi0+aXJxKSB8ICghZGV2cHJpdi0+aXJxX2ZyZWUpIHwgKCFkZXZwcml2LT5pcnFfYmxvY2tlZCkgfAorCQkoIWRldnByaXYtPmludDgxNl9tb2RlKSkgeworCQlpZiAoZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkKSB7CisJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCQkJLy8gY29tZWRpX2Vycm9yKGRldiwibGFzdCBJUlEuLiIpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJiYWQgSVJRISIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgZnJvbSB1bmtub3cgc291cmNlISIpOworCXJldHVybiBJUlFfTk9ORTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQ09NTUFORCBNT0RFCisqLworc3RhdGljIHZvaWQgcGNsODE2X2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlydF9wcmludGsoInBjbDgxNiBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKKwkJY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOworCXJ0X3ByaW50aygicGNsODE2IGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAorCQljbWQtPnN0YXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5jb252ZXJ0X2FyZyk7CisJcnRfcHJpbnRrKCJwY2w4MTYgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCisJCWNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlydF9wcmludGsoInBjbDgxNiBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwgZSwKKwkJY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wLCBkaXZpc29yMSwgZGl2aXNvcjI7CisKKwlERUJVRyhydF9wcmludGsoInBjbDgxNiBwY2w4MTJfYWlfY21kdGVzdFxuIik7CisJCXBjbDgxNl9jbWR0ZXN0X291dCgtMSwgY21kKTspOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCWlmICghY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX0VYVCB8IFRSSUdfVElNRVIpKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjID0gVFJJR19GT0xMT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikgeworCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX0NPVU5UOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDI7CisJfQorCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX0VYVCAqLworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiB0aGlzX2JvYXJkLT5uX2FpY2hhbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDM7CisJfQorCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwKKwkJCSZkaXZpc29yMSwgJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMCwgZG1hX2ZsYWdzLCBieXRlcywgZG1haXJxOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworLy8gICAgICBpZihjbWQtPmNoYW5saXN0X2xlbj5NQVhfQ0hBTkxJU1RfTEVOKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKHRoaXNfYm9hcmQtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmIChkaXZpc29yMSA9PSAxKSB7CS8vIFBDTDgxNiBjcmFzaCBpZiBhbnkgZGl2aXNvciBpcyBzZXQgdG8gMQorCQkJZGl2aXNvcjEgPSAyOworCQkJZGl2aXNvcjIgLz0gMjsKKwkJfQorCQlpZiAoZGl2aXNvcjIgPT0gMSkgeworCQkJZGl2aXNvcjIgPSAyOworCQkJZGl2aXNvcjEgLz0gMjsKKwkJfQorCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlpZiAoIWNoZWNrX2FuZF9zZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LAorCQkJY21kLT5jaGFubGlzdF9sZW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljb21lZGlfdWRlbGF5KDEpOworCisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAxOworCWRldnByaXYtPmFpX3BvbGxfcHRyID0gMDsKKwlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zY2FucyA9IDA7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKKwl9CisKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwkJcHJpbnRrKCJwbDgxNjogWW91IHdhbmt0IFdBS0VfRU9TIGJ1dCBJIGRvbnQgd2FudCBoYW5kbGUgaXQiKTsKKwkJLy8gICAgICAgICAgICAgIGRldnByaXYtPmFpX2Vvcz0xOworCQkvL2lmIChkZXZwcml2LT5haV9uX2NoYW49PTEpCisJCS8vICAgICAgZGV2cHJpdi0+ZG1hPTA7IC8vIERNQSBpcyB1c2VsZXNzIGZvciB0aGlzIHNpdHVhdGlvbgorCX0KKworCWlmIChkZXZwcml2LT5kbWEpIHsKKwkJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKKwkJCWJ5dGVzID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKiBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbiAqIHNpemVvZihzaG9ydCk7CS8vIGhvdyBtYW55CisJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLy8gaG93IG1hbnkgRE1BIHBhZ2VzIHdlIG11c3QgZmlsbAorCQkJZGV2cHJpdi0+bGFzdF9kbWFfcnVuID0gYnl0ZXMgJSBkZXZwcml2LT5od2RtYXNpemVbMF07CS8vb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZAorCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kLS07CisJCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID49IDApCisJCQkJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJCX0gZWxzZQorCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gLTE7CisKKwkJZGV2cHJpdi0+bmV4dF9kbWFfYnVmID0gMDsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCk7CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWEpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0clswXSk7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBieXRlcyk7CisJCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgMSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKwlkbWFpcnEgPSAoKGRldnByaXYtPmRtYSAmIDB4MykgPDwgNCkgfCAoZGV2LT5pcnEgJiAweDcpOworCisJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IElOVF9UWVBFX0FJMV9ETUE7CisJCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8vIFBhY2VyK0lSUStETUEKKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CS8vIHdyaXRlIGlycSBhbmQgRE1BIHRvIGNhcmQKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IElOVF9UWVBFX0FJM19ETUE7CisJCW91dGIoMHgzNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8vIEV4dCB0cmlnK0lSUStETUEKKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CS8vIHdyaXRlIGlycSB0byBjYXJkCisJCWJyZWFrOworCX0KKworCURQUklOVEsoInBjbDgxNiBFTkQ6IHBjbDgxMl9haV9jbWQoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsODE2X2FpX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3AxLCB0b3AyLCBpOworCisJaWYgKCFkZXZwcml2LT5kbWEpCisJCXJldHVybiAwOwkvLyBwb2xsIGlzIHZhbGlkIG9ubHkgZm9yIERNQSB0cmFuc2ZlcgorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQl0b3AxID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYSk7CS8vIHdoZXJlIGlzIG5vdyBETUEKKwkJdG9wMiA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWEpOworCQlpZiAodG9wMSA9PSB0b3AyKQorCQkJYnJlYWs7CisJfQorCWlmICh0b3AxICE9IHRvcDIpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG9wMSA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXSAtIHRvcDE7CS8vIHdoZXJlIGlzIG5vdyBETUEgaW4gYnVmZmVyCisJdG9wMSA+Pj0gMTsJCS8vIHNhbXBsZSBwb3NpdGlvbgorCXRvcDIgPSB0b3AxIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJaWYgKHRvcDIgPCAxKSB7CQkvLyBubyBuZXcgc2FtcGxlcworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0cmFuc2Zlcl9mcm9tX2RtYV9idWYoZGV2LCBzLAorCQkoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmW2RldnByaXYtPm5leHRfZG1hX2J1Zl0sCisJCWRldnByaXYtPmFpX3BvbGxfcHRyLCB0b3AyKTsKKworCWRldnByaXYtPmFpX3BvbGxfcHRyID0gdG9wMTsJLy8gbmV3IGJ1ZmZlciBwb3NpdGlvbgorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcy0+YXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIHMtPmFzeW5jLT5idWZfcmVhZF9jb3VudDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGNhbmNlbCBhbnkgbW9kZSAxLTQgQUkKKyovCitzdGF0aWMgaW50IHBjbDgxNl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKy8vICBERUJVRyhydF9wcmludGsoInBjbDgxNl9haV9jYW5jZWwoKVxuIik7KQorCisJaWYgKGRldnByaXYtPmlycV9ibG9ja2VkID4gMCkgeworCQlzd2l0Y2ggKGRldnByaXYtPmludDgxNl9tb2RlKSB7CisjaWZkZWYgdW51c2VkCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQV9SVEM6CisJCWNhc2UgSU5UX1RZUEVfQUkzX0RNQV9SVEM6CisJCQlzZXRfcnRjX2lycV9iaXQoMCk7CS8vIHN0b3AgUlRDCisJCQlkZWxfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIpOworI2VuZGlmCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQToKKwkJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCQljYXNlIElOVF9UWVBFX0FJM19JTlQ6CisJCQlvdXRiKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKSAmIDB4NzMsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8qIFN0b3AgQS9EICovCisJCQlvdXRiKDB4YjAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CS8qIFN0b3AgcGFjZXIgKi8KKwkJCW91dGIoMHg3MCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfTE8pOworCQkJaW5iKGRldi0+aW9iYXNlICsgUENMODE2X0FEX0xPKTsKKwkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9ISSk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAwOworCQkJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gZGV2cHJpdi0+aW50ODE2X21vZGU7CisJCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IDA7CisJCQlkZXZwcml2LT5sYXN0X2ludF9zdWIgPSBzOworLy8gICAgICAgIHMtPmJ1c3kgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlERUJVRyhydF9wcmludGsoImNvbWVkaTogcGNsODE2X2FpX2NhbmNlbCgpIHN1Y2Nlc3NmdWxcbiIpOworCQkpCisJCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgY2hlY2ggZm9yIFBDTDgxNgorKi8KK3N0YXRpYyBpbnQgcGNsODE2X2NoZWNrKHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCW91dGIoMHgwMCwgaW9iYXNlICsgUENMODE2X01VWCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlpZiAoaW5iKGlvYmFzZSArIFBDTDgxNl9NVVgpICE9IDB4MDApCisJCXJldHVybiAxOwkvL3RoZXJlIGlzbid0IGNhcmQKKwlvdXRiKDB4NTUsIGlvYmFzZSArIFBDTDgxNl9NVVgpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MTZfTVVYKSAhPSAweDU1KQorCQlyZXR1cm4gMTsJLy90aGVyZSBpc24ndCBjYXJkCisJb3V0YigweDAwLCBpb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMHgxOCwgaW9iYXNlICsgUENMODE2X0NPTlRST0wpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCkgIT0gMHgxOCkKKwkJcmV0dXJuIDE7CS8vdGhlcmUgaXNuJ3QgY2FyZAorCXJldHVybiAwOwkJLy8gb2ssIGNhcmQgZXhpc3QKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHJlc2V0IHdob2xlIFBDTC04MTYgY2FyZHMKKyovCitzdGF0aWMgdm9pZCBwY2w4MTZfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvLyAgb3V0YiAoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfREFfTE8pOyAgICAgICAvLyBEQUM9MFYKKy8vICBvdXRiICgwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9EQV9ISSk7CisvLyAgY29tZWRpX3VkZWxheSAoMSk7CisvLyAgb3V0YiAoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fSEkpOyAgICAgICAvLyBETz0kMDAwMAorLy8gIG91dGIgKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RPX0xPKTsKKy8vICBjb21lZGlfdWRlbGF5ICgxKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CisJb3V0YigweGIwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOwkvKiBTdG9wIHBhY2VyICovCisJb3V0YigweDcwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOworCW91dGIoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X1JBTkdFKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIFN0YXJ0L3N0b3AgcGFjZXIgb25ib2FyZCBwYWNlcgorKi8KK3N0YXRpYyB2b2lkCitzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpCit7CisJb3V0YigweDMyLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOworCW91dGIoMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMCk7CisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFIwKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLy8gc2V0IGNvdW50ZXIgMiBhcyBtb2RlIDMKKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CS8vIHNldCBjb3VudGVyIDEgYXMgbW9kZSAzCisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJRFBSSU5USygibW9kZSAlZCwgZGl2aXNvcjEgJWQsIGRpdmlzb3IyICVkXG4iLCBtb2RlLCBkaXZpc29yMSwKKwkJCWRpdmlzb3IyKTsKKwkJb3V0YihkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjIpOworCQlvdXRiKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjIpOworCQlvdXRiKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMSk7CisJCW91dGIoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMSk7CisJfQorCisJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzIChqdXN0IGluIGNhc2UpICovCisvLyAgICAgIG91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbGRlZCBjb3JyZWN0bHkKKyBJZiBpdCdzIG9rLCB0aGVuIHByb2dyYW0gc2Nhbi9nYWluIGxvZ2ljCisqLworc3RhdGljIGludAorY2hlY2tfYW5kX3NldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBjaGFubGVuKQoreworCXVuc2lnbmVkIGludCBjaGFuc2VnbWVudFsxNl07CisJdW5zaWduZWQgaW50IGksIG5vd211c3RiZWNoYW4sIHNlZ2xlbiwgc2VncG9zOworCisJLy8gY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jCisJaWYgKGNoYW5sZW4gPCAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyYW5nZS9jaGFubmVsIGxpc3QgaXMgZW1wdHkhIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChjaGFubGVuID4gMSkgeworCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOwkvLyBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5dGltZSBvaworCQlmb3IgKGkgPSAxLCBzZWdsZW4gPSAxOyBpIDwgY2hhbmxlbjsgaSsrLCBzZWdsZW4rKykgeworCQkJLy8gYnVpbGQgcGFydCBvZiBjaGFubGlzdAorCQkJREVCVUcocnRfcHJpbnRrKCIlZC4gJWQgJWRcbiIsIGksIENSX0NIQU4oY2hhbmxpc3RbaV0pLAorCQkJCQlDUl9SQU5HRShjaGFubGlzdFtpXSkpOworCQkJCSkKKwkJCQlpZiAoY2hhbmxpc3RbMF0gPT0gY2hhbmxpc3RbaV0pCisJCQkJYnJlYWs7CS8vIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoCisJCQlub3dtdXN0YmVjaGFuID0KKwkJCQkoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBjaGFubGVuOworCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsKKwkJCQkvLyBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKAorCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBwY2w4MTY6IGNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkJZGV2LT5taW5vciwgaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksCisJCQkJCW5vd211c3RiZWNoYW4sIENSX0NIQU4oY2hhbmxpc3RbMF0pKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWNoYW5zZWdtZW50W2ldID0gY2hhbmxpc3RbaV07CS8vIHdlbGwsIHRoaXMgaXMgbmV4dCBjb3JyZWN0IGNoYW5uZWwgaW4gbGlzdAorCQl9CisKKwkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IGNoYW5sZW47IGkrKykgewkvLyBjaGVjayB3aG9sZSBjaGFubGlzdAorCQkJREVCVUcocnRfcHJpbnRrKCIlZCAlZD0lZCAlZFxuIiwKKwkJCQkJQ1JfQ0hBTihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSksCisJCQkJCUNSX1JBTkdFKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFtpXSksCisJCQkJCUNSX1JBTkdFKGNoYW5saXN0W2ldKSk7CisJCQkJKQorCQkJCWlmIChjaGFubGlzdFtpXSAhPSBjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBwY2w4MTY6IGJhZCBjaGFubmVsIG9yIHJhbmdlIG51bWJlciEgY2hhbmxpc3RbJWldPSVkLCVkLCVkIGFuZCBub3QgJWQsJWQsJWQhXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9BUkVGKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJCUNSX1JBTkdFKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkpOworCQkJCXJldHVybiAwOwkvLyBjaGFuL2dhaW4gbGlzdCBpcyBzdHJhbmdlCisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzZWdsZW4gPSAxOworCX0KKworCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4gPSBzZWdsZW47CisJZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VnbGVuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtpXSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOworCQlvdXRiKENSX0NIQU4oY2hhbmxpc3RbMF0pICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOworCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0WzBdKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCX0KKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlvdXRiKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFswXSB8IChkZXZwcml2LT5haV9hY3RfY2hhbmxpc3Rbc2VnbGVuIC0gMV0gPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE2X01VWCk7CS8qIHNlbGVjdCBjaGFubmVsIGludGVydmFsIHRvIHNjYW4gKi8KKworCXJldHVybiAxOwkJLy8gd2UgY2FuIHNlcnZlIHRoaXMgd2l0aCBNVVggbG9naWMKK30KKworI2lmZGVmIHVudXNlZAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFbmFibGUoMSkvZGlzYWJsZSgwKSBwZXJpb2RpYyBpbnRlcnJ1cHRzIGZyb20gUlRDCisqLworc3RhdGljIGludCBzZXRfcnRjX2lycV9iaXQodW5zaWduZWQgY2hhciBiaXQpCit7CisJdW5zaWduZWQgY2hhciB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChiaXQgPT0gMSkgeworCQlSVENfdGltZXJfbG9jaysrOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPiAxKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJUlRDX3RpbWVyX2xvY2stLTsKKwkJaWYgKFJUQ190aW1lcl9sb2NrIDwgMCkKKwkJCVJUQ190aW1lcl9sb2NrID0gMDsKKwkJaWYgKFJUQ190aW1lcl9sb2NrID4gMCkKKwkJCXJldHVybiAwOworCX0KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCXZhbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJaWYgKGJpdCkgeworCQl2YWwgfD0gUlRDX1BJRTsKKwl9IGVsc2UgeworCQl2YWwgJj0gflJUQ19QSUU7CisJfQorCUNNT1NfV1JJVEUodmFsLCBSVENfQ09OVFJPTCk7CisJQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEZyZWUgYW55IHJlc291cmNlcyB0aGF0IHdlIGhhdmUgY2xhaW1lZAorKi8KK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8vcnRfcHJpbnRrKCJmcmVlX3Jlc291cmNlKClcbiIpOworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJcGNsODE2X2FpX2NhbmNlbChkZXYsIGRldnByaXYtPnN1Yl9haSk7CisJCXBjbDgxNl9yZXNldChkZXYpOworCQlpZiAoZGV2cHJpdi0+ZG1hKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlswXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzBdLCBkZXZwcml2LT5kbWFwYWdlc1swXSk7CisJCWlmIChkZXZwcml2LT5kbWFidWZbMV0pCisJCQlmcmVlX3BhZ2VzKGRldnByaXYtPmRtYWJ1ZlsxXSwgZGV2cHJpdi0+ZG1hcGFnZXNbMV0pOworI2lmZGVmIHVudXNlZAorCQlpZiAoZGV2cHJpdi0+cnRjX2lycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXZwcml2LT5ydGNfaXJxLCBkZXYpOworCQlpZiAoKGRldnByaXYtPmRtYV9ydGMpICYmIChSVENfbG9jayA9PSAxKSkgeworCQkJaWYgKGRldnByaXYtPnJ0Y19pb2Jhc2UpCisJCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+cnRjX2lvYmFzZSwKKwkJCQkJZGV2cHJpdi0+cnRjX2lvc2l6ZSk7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChkZXYtPmlycSkKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCS8vcnRfcHJpbnRrKCJmcmVlX3Jlc291cmNlKCkgZW5kXG4iKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBJbml0aWFsaXphdGlvbgorCisqLworc3RhdGljIGludCBwY2w4MTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycSwgZG1hOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7CisJLy9pbnQgaTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCS8qIGNsYWltIG91ciBJL08gc3BhY2UgKi8KKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w4MTY6ICBib2FyZD0lcywgaW9wb3J0PTB4JTAzbHgiLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlLCAicGNsODE2IikpIHsKKwkJcnRfcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKHBjbDgxNl9jaGVjayhpb2Jhc2UpKSB7CisJCXJ0X3ByaW50aygiLCBJIGNhbm4ndCBkZXRlY3QgYm9hcmQuIEZBSUwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w4MTZfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CS8qIENhbid0IGFsbG9jIG1lbSAqLworCisJLyogc2V0IHVwIHNvbWUgbmFtZSBzdHVmZiAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpcnEgPSAwOworCWlmICh0aGlzX2JvYXJkLT5JUlFiaXRzICE9IDApIHsJLyogYm9hcmQgc3VwcG9ydCBJUlEgKi8KKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCWlmIChpcnEpIHsJLyogd2Ugd2FudCB0byB1c2UgSVJRICovCisJCQlpZiAoKCgxIDw8IGlycSkgJiB0aGlzX2JvYXJkLT5JUlFiaXRzKSA9PSAwKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIERJU0FCTElORyBJVCIsCisJCQkJCWlycSk7CisJCQkJaXJxID0gMDsJLyogQmFkIElSUSAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgaW50ZXJydXB0X3BjbDgxNiwgMCwKKwkJCQkJCSJwY2w4MTYiLCBkZXYpKSB7CisJCQkJCXJ0X3ByaW50aworCQkJCQkJKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCisJCQkJCQlpcnEpOworCQkJCQlpcnEgPSAwOwkvKiBDYW4ndCB1c2UgSVJRICovCisJCQkJfSBlbHNlIHsKKwkJCQkJcnRfcHJpbnRrKCIsIGlycT0ldSIsIGlycSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisJaWYgKGlycSkgeworCQlkZXZwcml2LT5pcnFfZnJlZSA9IDE7CisJfSAvKiAxPXdlIGhhdmUgYWxsb2NhdGVkIGlycSAqLworCWVsc2UgeworCQlkZXZwcml2LT5pcnFfZnJlZSA9IDA7CisJfQorCWRldnByaXYtPmlycV9ibG9ja2VkID0gMDsJLyogbnVtYmVyIG9mIHN1YmRldmljZSB3aGljaCB1c2UgSVJRICovCisJZGV2cHJpdi0+aW50ODE2X21vZGUgPSAwOwkvKiBtb2RlIG9mIGlycSAqLworCisjaWZkZWYgdW51c2VkCisJLyogZ3JhYiBSVEMgZm9yIERNQSBvcGVyYXRpb25zICovCisJZGV2cHJpdi0+ZG1hX3J0YyA9IDA7CisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgewkvLyB3ZSB3YW50IHRvIHVzZSBETUEKKwkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCWlmICghcmVxdWVzdF9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQsCisJCQkJCSJwY2w4MTYgKFJUQykiKSkKKwkJCQlnb3RvIG5vX3J0YzsKKwkJfQorCQlkZXZwcml2LT5ydGNfaW9iYXNlID0gUlRDX1BPUlQoMCk7CisJCWRldnByaXYtPnJ0Y19pb3NpemUgPSBSVENfSU9fRVhURU5UOworCQlSVENfbG9jaysrOworI2lmZGVmIFVOVEVTVEVEX0NPREUKKwkJaWYgKCFjb21lZGlfcmVxdWVzdF9pcnEoUlRDX0lSUSwKKwkJCQlpbnRlcnJ1cHRfcGNsODE2X2FpX21vZGUxM19kbWFfcnRjLCAwLAorCQkJCSJwY2w4MTYgRE1BIChSVEMpIiwgZGV2KSkgeworCQkJZGV2cHJpdi0+ZG1hX3J0YyA9IDE7CisJCQlkZXZwcml2LT5ydGNfaXJxID0gUlRDX0lSUTsKKwkJCXJ0X3ByaW50aygiLCBkbWFfaXJxPSV1IiwgZGV2cHJpdi0+cnRjX2lycSk7CisJCX0gZWxzZSB7CisJCQlSVENfbG9jay0tOworCQkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCQlpZiAoZGV2cHJpdi0+cnRjX2lvYmFzZSkKKwkJCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+cnRjX2lvYmFzZSwKKwkJCQkJCWRldnByaXYtPnJ0Y19pb3NpemUpOworCQkJfQorCQkJZGV2cHJpdi0+cnRjX2lvYmFzZSA9IDA7CisJCQlkZXZwcml2LT5ydGNfaW9zaXplID0gMDsKKwkJfQorI2Vsc2UKKwkJcHJpbnRrKCJwY2w4MTY6IFJUQyBjb2RlIG1pc3NpbmciKTsKKyNlbmRpZgorCisJfQorCisgICAgICBub19ydGM6CisjZW5kaWYKKwkvKiBncmFiIG91ciBETUEgKi8KKwlkbWEgPSAwOworCWRldnByaXYtPmRtYSA9IGRtYTsKKwlpZiAoKGRldnByaXYtPmlycV9mcmVlID09IDApICYmIChkZXZwcml2LT5kbWFfcnRjID09IDApKQorCQlnb3RvIG5vX2RtYTsJLyogaWYgd2UgaGF2ZW4ndCBJUlEsIHdlIGNhbid0IHVzZSBETUEgKi8KKworCWlmICh0aGlzX2JvYXJkLT5ETUFiaXRzICE9IDApIHsJLyogYm9hcmQgc3VwcG9ydCBETUEgKi8KKwkJZG1hID0gaXQtPm9wdGlvbnNbMl07CisJCWlmIChkbWEgPCAxKQorCQkJZ290byBub19kbWE7CS8qIERNQSBkaXNhYmxlZCAqLworCisJCWlmICgoKDEgPDwgZG1hKSAmIHRoaXNfYm9hcmQtPkRNQWJpdHMpID09IDApIHsKKwkJCXJ0X3ByaW50aygiLCBETUEgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIEZBSUwhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvKiBCYWQgRE1BICovCisJCX0KKwkJcmV0ID0gcmVxdWVzdF9kbWEoZG1hLCAicGNsODE2Iik7CisJCWlmIChyZXQpIHsKKwkJCXJ0X3ByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BICV1LCBGQUlMIVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUJVU1k7CS8qIERNQSBpc24ndCBmcmVlICovCisJCX0KKworCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCXJ0X3ByaW50aygiLCBkbWE9JXUiLCBkbWEpOworCQlwYWdlcyA9IDI7CS8qIHdlIG5lZWQgMTZLQiAqLworCQlkZXZwcml2LT5kbWFidWZbMF0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCisJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzBdKSB7CisJCQlydF9wcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCS8qIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpIHdpbGwgaGVscCAuLi4uICovCisJCQlyZXR1cm4gLUVCVVNZOwkvKiBubyBidWZmZXIgOi0oICovCisJCX0KKwkJZGV2cHJpdi0+ZG1hcGFnZXNbMF0gPSBwYWdlczsKKwkJZGV2cHJpdi0+aHdkbWFwdHJbMF0gPSB2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlswXSk7CisJCWRldnByaXYtPmh3ZG1hc2l6ZVswXSA9ICgxIDw8IHBhZ2VzKSAqIFBBR0VfU0laRTsKKwkJLy9ydF9wcmludGsoIiVkICVkICVsZCwgIixkZXZwcml2LT5kbWFwYWdlc1swXSxkZXZwcml2LT5od2RtYXNpemVbMF0sUEFHRV9TSVpFKTsKKworCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSB7CS8vIHdlIG11c3QgZG8gZHVibGUgYnVmZiA6LSgKKwkJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlsxXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQkJZGV2cHJpdi0+ZG1hcGFnZXNbMV0gPSBwYWdlczsKKwkJCWRldnByaXYtPmh3ZG1hcHRyWzFdID0KKwkJCQl2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlsxXSk7CisJCQlkZXZwcml2LT5od2RtYXNpemVbMV0gPSAoMSA8PCBwYWdlcykgKiBQQUdFX1NJWkU7CisJCX0KKwl9CisKKyAgICAgIG5vX2RtYToKKworLyogIGlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbiA+IDApCisgICAgc3ViZGV2c1sxXSA9IENPTUVESV9TVUJEX0FPOworICBpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4gPiAwKQorICAgIHN1YmRldnNbMl0gPSBDT01FRElfU1VCRF9ESTsKKyAgaWYgKHRoaXNfYm9hcmQtPm5fZG9jaGFuID4gMCkKKyAgICBzdWJkZXZzWzNdID0gQ09NRURJX1NVQkRfRE87CisqLworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4gPiAwKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJZGV2cHJpdi0+c3ViX2FpID0gczsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJLy9wcmludGsgKCIsICVkY2hhbnMgRElGRiBEQUMgLSAlZCIsIHMtPm5fY2hhbiwgaSk7CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5haV9tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5haV9jaGFubGlzdDsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5haV9yYW5nZV90eXBlOworCQlzLT5jYW5jZWwgPSBwY2w4MTZfYWlfY2FuY2VsOworCQlzLT5kb19jbWR0ZXN0ID0gcGNsODE2X2FpX2NtZHRlc3Q7CisJCXMtPmRvX2NtZCA9IHBjbDgxNl9haV9jbWQ7CisJCXMtPnBvbGwgPSBwY2w4MTZfYWlfcG9sbDsKKwkJcy0+aW5zbl9yZWFkID0gcGNsODE2X2FpX2luc25fcmVhZDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworI2lmIDAKK2Nhc2UgQ09NRURJX1NVQkRfQU86CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YW9fbWF4ZGF0YTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5hb19jaGFubGlzdDsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmFvX3JhbmdlX3R5cGU7CisJYnJlYWs7CisKK2Nhc2UgQ09NRURJX1NVQkRfREk6CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJYnJlYWs7CisKK2Nhc2UgQ09NRURJX1NVQkRfRE86CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJYnJlYWs7CisjZW5kaWYKKworCXBjbDgxNl9yZXNldChkZXYpOworCisJcnRfcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUmVtb3ZlcyBkZXZpY2UKKyAqLworc3RhdGljIGludCBwY2w4MTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURFQlVHKHJ0X3ByaW50aygiY29tZWRpJWQ6IHBjbDgxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwkJKQorCQlmcmVlX3Jlc291cmNlcyhkZXYpOworI2lmZGVmIHVudXNlZAorCWlmIChkZXZwcml2LT5kbWFfcnRjKQorCQlSVENfbG9jay0tOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhOWQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwpAQCAtMCwwICsxLDE5ODggQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9wY2w4MTguYworCisgICBBdXRob3I6ICBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KKworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgY2FyZDogICBQQ0wtODE4TCwgUENMLTgxOEgsIFBDTC04MThIRCwgUENMLTgxOEhHLCBQQ0wtODE4LCBQQ0wtNzE4CisgICAgZHJpdmVyOiBwY2w4MThsLCAgcGNsODE4aCwgIHBjbDgxOGhkLCAgcGNsODE4aGcsICBwY2w4MTgsICBwY2w3MTgKKyovCisvKgorRHJpdmVyOiBwY2w4MTgKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTgxOCBjYXJkcywgUENMLTcxOAorQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC04MThMIChwY2w4MThsKSwgUENMLTgxOEggKHBjbDgxOGgpLAorICBQQ0wtODE4SEQgKHBjbDgxOGhkKSwgUENMLTgxOEhHIChwY2w4MThoZyksIFBDTC04MTggKHBjbDgxOCksCisgIFBDTC03MTggKHBjbDcxOCkKK1N0YXR1czogd29ya3MKKworQWxsIGNhcmRzIGhhdmUgMTYgU0UvOCBESUZGIEFEQ3MsIG9uZSBvciB0d28gREFDcywgMTYgREkgYW5kIDE2IERPLgorRGlmZmVyZW5jZXMgYXJlIG9ubHkgYXQgbWF4aW1hbCBzYW1wbGUgc3BlZWQsIHJhbmdlIGxpc3QgYW5kIEZJRk8KK3N1cHBvcnQuCitUaGUgZHJpdmVyIHN1cHBvcnQgQUkgbW9kZSAwLCAxLCAzIG90aGVyIHN1YmRldmljZXMgKEFPLCBESSwgRE8pIHN1cHBvcnQKK29ubHkgbW9kZSAwLiBJZiBETUEvRklGTy9JTlQgYXJlIGRpc2FibGVkIHRoZW4gQUkgc3VwcG9ydCBvbmx5IG1vZGUgMC4KK1BDTC04MThIRCBhbmQgUENMLTgxOEhHIHN1cHBvcnQgMWt3b3JkIEZJRk8uIERyaXZlciBzdXBwb3J0IHRoaXMgRklGTworYnV0IHRoaXMgY29kZSBpcyB1bnRlc3RlZC4KK0Egd29yZCBvciB0d28gYWJvdXQgRE1BLiBEcml2ZXIgc3VwcG9ydCBETUEgb3BlcmF0aW9ucyBhdCB0d28gd2F5czoKKzEpIERNQSB1c2VzIHR3byBidWZmZXJzIGFuZCBhZnRlciBvbmUgaXMgZmlsbGVkIHRoZW4gaXMgZ2VuZXJhdGVkCisgICBJTlQgYW5kIERNQSByZXN0YXJ0IHdpdGggc2Vjb25kIGJ1ZmZlci4gV2l0aCB0aGlzIG1vZGUgSSdtIHVuYWJsZSBydW4KKyAgIG1vcmUgdGhhdCA4MEtzYW1wbGVzL3NlY3Mgd2l0aG91dCBkYXRhIGRyb3BvdXRzIG9uIEs2LzIzMy4KKzIpIERNQSB1c2VzIG9uZSBidWZmZXIgYW5kIHJ1biBpbiBhdXRvaW5pdCBtb2RlIGFuZCB0aGUgZGF0YSBhcmUKKyAgIGZyb20gRE1BIGJ1ZmZlciBtb3ZlZCBvbiB0aGUgZmx5IHdpdGggMmtIeiBpbnRlcnJ1cHRzIGZyb20gUlRDLgorICAgVGhpcyBtb2RlIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCA4IGlzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAgIElmIG5vdCwgdGhlbiBmaXJzdCBETUEgbW9kZSBpcyB1c2VkLiBXaXRoIHRoaXMgSSBjYW4gcnVuIGF0CisgICBmdWxsIHNwZWVkIG9uZSBjYXJkICgxMDBrc2FtcGxlcy9zZWNzKSBvciB0d28gY2FyZHMgd2l0aAorICAgNjBrc2FtcGxlcy9zZWNzIGVhY2ggKG1vcmUgaXMgcHJvYmxlbSBvbiBhY2NvdW50IG9mIElTQSBsaW1pdGF0aW9ucykuCisgICBUbyB1c2UgdGhpcyBtb2RlIHlvdSBtdXN0IGhhdmUgY29tcGlsZWQgIGtlcm5lbCB3aXRoIGRpc2FibGVkCisgICAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiLgorICAgTWF5YmUgeW91IGNhbiBoYXZlIHByb2JsZW1zIGlmIHlvdSB1c2UgeG50cGQgb3Igc2ltaWxhci4KKyAgIElmIHlvdSd2ZSBkYXRhIGRyb3BvdXRzIHdpdGggRE1BIG1vZGUgMiB0aGVuOgorICAgIGEpIGRpc2FibGUgSURFIERNQQorICAgIGIpIHN3aXRjaCB0ZXh0IG1vZGUgY29uc29sZSB0byBmYi4KKworICAgT3B0aW9ucyBmb3IgUENMLTgxOEw6CisgICAgWzBdIC0gSU8gQmFzZQorICAgIFsxXSAtIElSUQkoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgIFsyXSAtIERNQQkoMD1kaXNhYmxlLCAxLCAzKQorICAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKKyAgICBbNF0gLSAwLCAgNT1BL0QgaW5wdXQgIC01Vi4uICs1VgorICAgICAgICAgIDEsIDEwPUEvRCBpbnB1dCAtMTBWLi4rMTBWCisgICAgWzVdIC0gMCwgIDU9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgICAxLCAxMD1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKwkgIDIgICAgPUQvQSBvdXRwdXQgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKKyAgIE9wdGlvbnMgZm9yIFBDTC04MTgsIFBDTC04MThIOgorICAgIFswXSAtIElPIEJhc2UKKyAgICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgICBbMl0gLSBETUEJKDA9ZGlzYWJsZSwgMSwgMykKKyAgICBbM10gLSAwLCAxMD0xME1IeiBjbG9jayBmb3IgODI1NAorICAgICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisgICAgWzRdIC0gMCwgIDU9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgICAxLCAxMD1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKwkgIDIgICAgPUQvQSBvdXRwdXQgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKKyAgIE9wdGlvbnMgZm9yIFBDTC04MThIRCwgUENMLTgxOEhHOgorICAgIFswXSAtIElPIEJhc2UKKyAgICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgICBbMl0gLSBETUEvRklGTyAgKC0xPXVzZSBGSUZPLCAwPWRpc2FibGUgYm90aCBGSUZPIGFuZCBETUEsCisgICAgICAgICAgICAgICAgICAgICAgMT11c2UgRE1BIGNoIDEsIDM9dXNlIERNQSBjaCAzKQorICAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKKyAgICBbNF0gLSAwLCAgNT1EL0Egb3V0cHV0IDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQorICAgICAgICAgIDEsIDEwPUQvQSBvdXRwdXQgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICAgCSAgMiAgICA9RC9BIG91dHB1dCB1bmtub3cgKGV4dGVybmFsIHJlZmVyZW5jZSkKKworICAgT3B0aW9ucyBmb3IgUENMLTcxODoKKyAgICBbMF0gLSBJTyBCYXNlCisgICAgWzFdIC0gSVJRCSgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCisgICAgWzNdIC0gMCwgMTA9MTBNSHogY2xvY2sgZm9yIDgyNTQKKyAgICAgICAgICAgICAgMT0gMU1IeiBjbG9jayBmb3IgODI1NAorICAgIFs0XSAtICAgICAwPUEvRCBSYW5nZSBpcyArLy0xMFYKKwkgICAgICAxPSAgICAgICAgICAgICArLy01VgorCSAgICAgIDI9ICAgICAgICAgICAgICsvLTIuNVYKKwkgICAgICAzPSAgICAgICAgICAgICArLy0xVgorCSAgICAgIDQ9ICAgICAgICAgICAgICsvLTAuNVYKKwkgICAgICA1PSAgCSAgICAgdXNlciBkZWZpbmVkIGJpcG9sYXIKKwkgICAgICA2PQkgICAgIDAtMTBWCisJICAgICAgNz0JICAgICAwLTVWCisgCSAgICAgIDg9CSAgICAgMC0yVgorCSAgICAgIDk9CSAgICAgMC0xVgorCSAgICAgMTA9CSAgICAgdXNlciBkZWZpbmVkIHVuaXBvbGFyCisgICAgWzVdIC0gMCwgIDU9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgICAgMSwgMTA9RC9BIG91dHB1dHMgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorCSAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisgICAgWzZdIC0gMCwgNjA9bWF4ICA2MGtIeiBBL0Qgc2FtcGxpbmcKKyAgICAgICAgICAxLDEwMD1tYXggMTAwa0h6IEEvRCBzYW1wbGluZyAoUENMLTcxOCB3aXRoIE9wdGlvbiAwMDEgaW5zdGFsbGVkKQorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisvLyAjZGVmaW5lIFBDTDgxOF9NT0RFMTNfQU8gMQorCisvLyBib2FyZHMgY29uc3RhbnRzCisKKyNkZWZpbmUgYm9hcmRQQ0w4MThMIDAKKyNkZWZpbmUgYm9hcmRQQ0w4MThIIDEKKyNkZWZpbmUgYm9hcmRQQ0w4MThIRCAyCisjZGVmaW5lIGJvYXJkUENMODE4SEcgMworI2RlZmluZSBib2FyZFBDTDgxOCA0CisjZGVmaW5lIGJvYXJkUENMNzE4IDUKKworLy8gSU8gc3BhY2UgbGVuCisjZGVmaW5lIFBDTHgxeF9SQU5HRSAxNgorLy8gSU8gc3BhY2UgbGVuIGlmIHdlIHVzZSBGSUZPCisjZGVmaW5lIFBDTHgxeEZJRk9fUkFOR0UgMzIKKworLy8gVzogY2xlYXIgSU5UIHJlcXVlc3QKKyNkZWZpbmUgUENMODE4X0NMUklOVCA4CisvLyBSOiByZXR1cm4gc3RhdHVzIGJ5dGUKKyNkZWZpbmUgUENMODE4X1NUQVRVUyA4CisvLyBSOiBBL0QgaGlnaCBieXRlIFc6IEEvRCByYW5nZSBjb250cm9sCisjZGVmaW5lIFBDTDgxOF9SQU5HRSAxCisvLyBSOiBuZXh0IG11eCBzY2FuIGNoYW5uZWwgVzogbXV4IHNjYW4gY2hhbm5lbCAmIHJhbmdlIGNvbnRyb2wgcG9pbnRlcgorI2RlZmluZSBQQ0w4MThfTVVYIDIKKy8vIFIvVzogb3BlcmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgUENMODE4X0NPTlRST0wgOQorLy8gVzogY291bnRlciBlbmFibGUKKyNkZWZpbmUgUENMODE4X0NOVEVOQUJMRSAxMAorCisvLyBSOiBsb3cgYnl0ZSBvZiBBL0QgVzogc29mdCBBL0QgdHJpZ2dlcgorI2RlZmluZSBQQ0w4MThfQURfTE8gMAorLy8gUjogaGlnaCBieXRlIG9mIEEvRCBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MThfQURfSEkgMQorLy8gVzogRC9BIGxvdyZoaWdoIGJ5dGUKKyNkZWZpbmUgUENMODE4X0RBX0xPIDQKKyNkZWZpbmUgUENMODE4X0RBX0hJIDUKKy8vIFI6IGxvdyZoaWdoIGJ5dGUgb2YgREkKKyNkZWZpbmUgUENMODE4X0RJX0xPIDMKKyNkZWZpbmUgUENMODE4X0RJX0hJIDExCisvLyBXOiBsb3cmaGlnaCBieXRlIG9mIERPCisjZGVmaW5lIFBDTDgxOF9ET19MTyAzCisjZGVmaW5lIFBDTDgxOF9ET19ISSAxMQorLy8gVzogUENMNzE4IHNlY29uZCBEL0EKKyNkZWZpbmUgUENMNzE4X0RBMl9MTyA2CisjZGVmaW5lIFBDTDcxOF9EQTJfSEkgNworLy8gY291bnRlcnMKKyNkZWZpbmUgUENMODE4X0NUUjAgMTIKKyNkZWZpbmUgUENMODE4X0NUUjEgMTMKKyNkZWZpbmUgUENMODE4X0NUUjIgMTQKKy8vIFc6IGNvdW50ZXIgY29udHJvbAorI2RlZmluZSBQQ0w4MThfQ1RSQ1RMIDE1CisKKy8vIFc6IGZpZm8gZW5hYmxlL2Rpc2FibGUKKyNkZWZpbmUgUENMODE4X0ZJX0VOQUJMRSA2CisvLyBXOiBmaWZvIGludGVycnVwdCBjbGVhcgorI2RlZmluZSBQQ0w4MThfRklfSU5UQ0xSIDIwCisvLyBXOiBmaWZvIGludGVycnVwdCBjbGVhcgorI2RlZmluZSBQQ0w4MThfRklfRkxVU0ggMjUKKy8vIFI6IGZpZm8gc3RhdHVzCisjZGVmaW5lIFBDTDgxOF9GSV9TVEFUVVMgMjUKKy8vIFI6IG9uZSByZWNvcmQgZnJvbSBGSUZPCisjZGVmaW5lIFBDTDgxOF9GSV9EQVRBTE8gMjMKKyNkZWZpbmUgUENMODE4X0ZJX0RBVEFISSAyMworCisvLyB0eXBlIG9mIGludGVycnVwdCBoYW5kbGVyCisjZGVmaW5lIElOVF9UWVBFX0FJMV9JTlQgMQorI2RlZmluZSBJTlRfVFlQRV9BSTFfRE1BIDIKKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0ZJRk8gMworI2RlZmluZSBJTlRfVFlQRV9BSTNfSU5UIDQKKyNkZWZpbmUgSU5UX1RZUEVfQUkzX0RNQSA1CisjZGVmaW5lIElOVF9UWVBFX0FJM19GSUZPIDYKKyNpZmRlZiBQQ0w4MThfTU9ERTEzX0FPCisjZGVmaW5lIElOVF9UWVBFX0FPMV9JTlQgNworI2RlZmluZSBJTlRfVFlQRV9BTzNfSU5UIDgKKyNlbmRpZgorCisjaWZkZWYgdW51c2VkCisvLyBSVEMgc3R1ZmYuLi4KKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0RNQV9SVEMgOQorI2RlZmluZSBJTlRfVFlQRV9BSTNfRE1BX1JUQyAxMAorCisjZGVmaW5lIFJUQ19JUlEgCTgKKyNkZWZpbmUgUlRDX0lPX0VYVEVOVAkweDEwCisjZW5kaWYKKworI2RlZmluZSBNQUdJQ19ETUFfV09SRCAweDVhNWEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxOGhfYWkgPSB7IDksIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxOGhnX2FpID0geyAxMCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MThsX2xfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNsODE4bF9oX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlNzE4X2JpcG9sYXIxID0geyAxLCB7QklQX1JBTkdFKDEpLH0gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTcxOF9iaXBvbGFyMF81ID0geyAxLCB7QklQX1JBTkdFKDAuNSksfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlNzE4X3VuaXBvbGFyMiA9IHsgMSwge1VOSV9SQU5HRSgyKSx9IH07CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2U3MThfdW5pcG9sYXIxID0geyAxLCB7QklQX1JBTkdFKDEpLH0gfTsKKworc3RhdGljIGludCBwY2w4MThfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsODE4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKyNpZmRlZiB1bnVzZWQKK3N0YXRpYyBpbnQgUlRDX2xvY2sgPSAwOwkvKiBSVEMgbG9jayAqLworc3RhdGljIGludCBSVENfdGltZXJfbG9jayA9IDA7CS8qIFJUQyBpbnQgbG9jayAqLworI2VuZGlmCisKK3N0cnVjdCBwY2w4MThfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gZHJpdmVyIG5hbWUKKwlpbnQgbl9yYW5nZXM7CQkvLyBsZW4gb2YgcmFuZ2UgbGlzdAorCWludCBuX2FpY2hhbl9zZTsJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBzaW5nbGUgZW5kZWQgIG1vZGUKKwlpbnQgbl9haWNoYW5fZGlmZjsJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZlcmVuY2lhbCBtb2RlCisJdW5zaWduZWQgaW50IG5zX21pbjsJLy8gbWluaW1hbCBhbGxsb3dlZCBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKGluIG5zKQorCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEL0EgY2hhbnMKKwlpbnQgbl9kaWNoYW47CQkvLyBudW0gb2YgREkgY2hhbnMKKwlpbnQgbl9kb2NoYW47CQkvLyBudW0gb2YgRE8gY2hhbnMKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdHlwZTsJLy8gZGVmYXVsdCBBL0QgcmFuZ2VsaXN0CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX3R5cGU7CS8vIGRlZmF1bHQgRC9BIHJhbmdlbGlzdAorCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBETUFiaXRzOwkvLyBhbGxvd2VkIERNQSBjaGFucworCWludCBhaV9tYXhkYXRhOwkJLy8gbWF4ZGF0YSBmb3IgQS9ECisJaW50IGFvX21heGRhdGE7CQkvLyBtYXhkYXRhIGZvciBEL0EKKwl1bnNpZ25lZCBjaGFyIGZpZm87CS8vIDE9Ym9hcmQgaGFzIEZJRk8KKwlpbnQgaXNfODE4OworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDgxOF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w4MThsIiwgNCwgMTYsIDgsIDI1MDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MThsX2xfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxfSwKKwl7InBjbDgxOGgiLCA5LCAxNiwgOCwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxfSwKKwl7InBjbDgxOGhkIiwgOSwgMTYsIDgsIDEwMDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MThoX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMSwgMX0sCisJeyJwY2w4MThoZyIsIDEyLCAxNiwgOCwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhnX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMSwgMX0sCisJeyJwY2w4MTgiLCA5LCAxNiwgOCwgMTAwMDAsIDIsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxfSwKKwl7InBjbDcxOCIsIDEsIDE2LCA4LCAxNjAwMCwgMiwgMTYsIDE2LCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMCwgMH0sCisJLyogcGNtMzcxOCAqLworCXsicGNtMzcxOCIsIDksIDE2LCA4LCAxMDAwMCwgMCwgMTYsIDE2LCAmcmFuZ2VfcGNsODE4aF9haSwKKwkJCSZyYW5nZV91bmlwb2xhcjUsIFBDTHgxeF9SQU5HRSwgMHgwMGZjLAorCQkweDBhLCAweGZmZiwgMHhmZmYsIDAsIDEgLyogWFhYID8gKi8gfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w4MThfYm9hcmQpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDgxOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w4MTgiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDgxOF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsODE4X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w4MThfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTgpOworCitzdHJ1Y3QgcGNsODE4X3ByaXZhdGUgeworCisJdW5zaWduZWQgaW50IGRtYTsJLy8gdXNlZCBETUEsIDA9ZG9uJ3QgdXNlIERNQQorCWludCBkbWFfcnRjOwkJLy8gMT1SVEMgdXNlZCB3aXRoIERNQSwgMD1ubyBSVEMgYWxsb2MKKwl1bnNpZ25lZCBpbnQgaW9fcmFuZ2U7CisjaWZkZWYgdW51c2VkCisJdW5zaWduZWQgbG9uZyBydGNfaW9iYXNlOwkvLyBSVEMgcG9ydCByZWdpb24KKwl1bnNpZ25lZCBpbnQgcnRjX2lvc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnRjX2lycTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBydGNfaXJxX3RpbWVyOwkvLyB0aW1lciBmb3IgUlRDIHNhbml0eSBjaGVjaworCXVuc2lnbmVkIGxvbmcgcnRjX2ZyZXE7CS8vIFJUQyBpbnQgZnJlcQorCWludCBydGNfaXJxX2Jsb2NrZWQ7CS8vIDE9d2Ugbm93IGRvIEFJIHdpdGggRE1BJlJUQworI2VuZGlmCisJdW5zaWduZWQgbG9uZyBkbWFidWZbMl07CS8vIHBvaW50ZXJzIHRvIGJlZ2luIG9mIERNQSBidWZmZXJzCisJdW5zaWduZWQgaW50IGRtYXBhZ2VzWzJdOwkvLyBsZW4gb2YgRE1BIGJ1ZmZlcnMgaW4gUEFHRV9TSVpFcworCXVuc2lnbmVkIGludCBod2RtYXB0clsyXTsJLy8gaGFyZHdhcmUgYWRkcmVzcyBvZiBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBod2RtYXNpemVbMl07CS8vIGxlbiBvZiBETUEgYnVmZmVycyBpbiBCeXRlcworCXVuc2lnbmVkIGludCBkbWFzYW1wbHNpemU7CS8vIHNpemUgaW4gc2FtcGxlcyBod2RtYXNpemVbMF0vMgorCXVuc2lnbmVkIGludCBsYXN0X3RvcF9kbWE7CS8vIERNQSBwb2ludGVyIGluIGxhc3QgUlRDIGludAorCWludCBuZXh0X2RtYV9idWY7CS8vIHdoaWNoIERNQSBidWZmZXIgd2lsbCBiZSB1c2VkIG5leHQgcm91bmQKKwlsb25nIGRtYV9ydW5zX3RvX2VuZDsJLy8gaG93IG1hbnkgd2UgbXVzdCBwZXJtb3JtIERNQSB0cmFuc2ZlciB0byBlbmQgb2YgcmVjb3JkCisJdW5zaWduZWQgbG9uZyBsYXN0X2RtYV9ydW47CS8vIGhvdyBtYW55IGJ5dGVzIHdlIG11c3QgdHJhbnNmZXIgb24gbGFzdCBETUEgcGFnZQorCXVuc2lnbmVkIGNoYXIgbmV2ZXJlbmRpbmdfYWk7CS8vIGlmPTEsIHRoZW4gd2UgZG8gbmV2ZXJlbmRpbmcgcmVjb3JkICh5b3UgbXVzdCB1c2UgY2FuY2VsKCkpCisJdW5zaWduZWQgaW50IG5zX21pbjsJLy8gbWFuaW1hbCBhbGxsb3dlZCBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKGluIHVzKSBmb3IgYWN0dWFsIGNhcmQKKwlpbnQgaTgyNTNfb3NjX2Jhc2U7CS8vIDEvZnJlcXVlbmN5IG9mIG9uIGJvYXJkIG9zY2lsYXRvciBpbiBucworCWludCBpcnFfZnJlZTsJCS8vIDE9aGF2ZSBhbGxvY2F0ZWQgSVJRCisJaW50IGlycV9ibG9ja2VkOwkvLyAxPUlSUSBub3cgdXNlcyBhbnkgc3ViZGV2CisJaW50IGlycV93YXNfbm93X2Nsb3NlZDsJLy8gd2hlbiBJUlEgZmluaXNoLCB0aGVyZSdzIHN0b3JlZCBpbnQ4MThfbW9kZSBmb3IgbGFzdCBpbnRlcnJ1cHQKKwlpbnQgYWlfbW9kZTsJCS8vIHdobyBub3cgdXNlcyBJUlEgLSAxPUFJMSBpbnQsIDI9QUkxIGRtYSwgMz1BSTMgaW50LCA0QUkzIGRtYQorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpsYXN0X2ludF9zdWI7CS8vIHB0ciB0byBzdWJkZXZpY2Ugd2hpY2ggbm93IGZpbmlzaAorCWludCBhaV9hY3Rfc2NhbjsJLy8gaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQKKwlpbnQgYWlfYWN0X2NoYW47CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBhY3R1YWwgc2NhbgorCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMTZdOwkvLyBNVVggc2V0dGluZyBmb3IgYWN0dWFsIEFJIG9wZXJhdGlvbnMKKwl1bnNpZ25lZCBpbnQgYWN0X2NoYW5saXN0X2xlbjsJLy8gaG93IGxvbmcgaXMgYWN0dWFsIE1VWCBsaXN0CisJdW5zaWduZWQgaW50IGFjdF9jaGFubGlzdF9wb3M7CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdAorCXVuc2lnbmVkIGludCBhaV9zY2FuczsJLy8gbGVuIG9mIHNjYW5saXN0CisJdW5zaWduZWQgaW50IGFpX25fY2hhbjsJLy8gaG93IG1hbnkgY2hhbm5lbHMgaXMgbWVhc3VyZWQKKwl1bnNpZ25lZCBpbnQgKmFpX2NoYW5saXN0OwkvLyBhY3RhdWwgY2hhbmxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfZmxhZ3M7CS8vIGZsYWdsaXN0CisJdW5zaWduZWQgaW50IGFpX2RhdGFfbGVuOwkvLyBsZW4gb2YgZGF0YSBidWZmZXIKKwlzaG9ydCAqYWlfZGF0YTsJLy8gZGF0YSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgYWlfdGltZXIxOwkvLyB0aW1lcnMKKwl1bnNpZ25lZCBpbnQgYWlfdGltZXIyOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJfYWk7CS8vIHB0ciB0byBBSSBzdWJkZXZpY2UKKwl1bnNpZ25lZCBjaGFyIHVzZWZpZm87CS8vIDE9dXNlIGZpZm8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07Cit9OworCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV4b25lY2hhbltdID0geyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAkvLyB1c2VkIGZvciBnYWluIGxpc3QgcHJvZ3JhbW1pbmcKKwkweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNsODE4X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsODE4X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgc2VnbGVuKTsKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbik7CisKK3N0YXRpYyBpbnQgcGNsODE4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMik7CisKKyNpZmRlZiB1bnVzZWQKK3N0YXRpYyBpbnQgc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGNoYXIgYml0KTsKK3N0YXRpYyB2b2lkIHJ0Y19kcm9wcGVkX2lycSh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIGludCBydGNfc2V0ZnJlcV9pcnEoaW50IGZyZXEpOworI2VuZGlmCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBJTlBVVCBNT0RFMCwgODE4IGNhcmRzLCBzbG93IHZlcnNpb24KKyovCitzdGF0aWMgaW50IHBjbDgxOF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCB0aW1lb3V0OworCisJLyogc29mdHdhcmUgdHJpZ2dlciwgRE1BIGFuZCBJTlQgb2ZmICovCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsKKworCS8qIHNlbGVjdCBjaGFubmVsICovCisJb3V0YihtdXhvbmVjaGFuW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfTVVYKTsKKworCS8qIHNlbGVjdCBnYWluICovCisJb3V0YihDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIGRldi0+aW9iYXNlICsgUENMODE4X1JBTkdFKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKworCQkvKiBjbGVhciBJTlQgKGNvbnZlcnNpb24gZW5kKSBmbGFnICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsKKworCQkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfTE8pOworCisJCXRpbWVvdXQgPSAxMDA7CisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfU1RBVFVTKSAmIDB4MTApCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBpbnNuIHRpbWVvdXQiKTsKKwkJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CisJCXJldHVybiAtRUlPOworCisJICAgICAgY29udl9maW5pc2g6CisJCWRhdGFbbl0gPSAoKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9ISSkgPDwgNCkgfAorCQkJKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9MTykgPj4gNCkpOworCX0KKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgT1VUUFVUIE1PREUwLCA4MTggY2FyZHMKKyAgIG9ubHkgb25lIHNhbXBsZSBwZXIgY2FsbCBpcyBzdXBwb3J0ZWQKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w4MThfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW25dOworCQlvdXRiKChkYXRhW25dICYgMHgwMDBmKSA8PCA0LCBkZXYtPmlvYmFzZSArCisJCQkoY2hhbikgPyBQQ0w3MThfREEyX0xPIDogUENMODE4X0RBX0xPKTsKKwkJb3V0YigoZGF0YVtuXSAmIDB4MGZmMCkgPj4gNCwgZGV2LT5pb2Jhc2UgKworCQkJKGNoYW4pID8gUENMNzE4X0RBMl9ISSA6IFBDTDgxOF9EQV9ISSk7CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIERJR0lUQUwgSU5QVVQgTU9ERTAsIDgxOCBjYXJkcworCisgICBvbmx5IG9uZSBzYW1wbGUgcGVyIGNhbGwgaXMgc3VwcG9ydGVkCisqLworc3RhdGljIGludCBwY2w4MThfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRElfTE8pIHwKKwkJKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9ESV9ISSkgPDwgOCk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRElHSVRBTCBPVVRQVVQgTU9ERTAsIDgxOCBjYXJkcworCisgICBvbmx5IG9uZSBzYW1wbGUgcGVyIGNhbGwgaXMgc3VwcG9ydGVkCisqLworc3RhdGljIGludCBwY2w4MThfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisKKwlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fTE8pOworCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9ET19ISSk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGludGVycnVwdCBtb2RlIDEgJiAzLCA4MTggY2FyZHMKKyAgIG9uZSBzYW1wbGUgcGVyIGludGVycnVwdCB2ZXJzaW9uCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ludChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgbG93OworCWludCB0aW1lb3V0ID0gNTA7CS8qIHdhaXQgbWF4IDUwdXMgKi8KKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9TVEFUVVMpICYgMHgxMCkKKwkJCWdvdG8gY29udl9maW5pc2g7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfU1RBVFVTKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgSVJRIHdpdGhvdXQgRFJEWSEiKTsKKwlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKKworICAgICAgY29udl9maW5pc2g6CisJbG93ID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0FEX0xPKTsKKwljb21lZGlfYnVmX3B1dChzLT5hc3luYywgKChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfSEkpIDw8IDQpIHwgKGxvdyA+PiA0KSkpOwkvLyBnZXQgb25lIHNhbXBsZQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCWlmICgobG93ICYgMHhmKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pIHsJLy8gZHJvcG91dCEKKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaTogQS9EIG1vZGUxLzMgSVJRIC0gY2hhbm5lbCBkcm9wb3V0ICV4IT0leCAhXG4iLAorCQkJKGxvdyAmIDB4ZiksCisJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pOworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCS8vIHJ0X3ByaW50aygiRSIpOworCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCX0KKworCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpIHsKKwkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID09IDApIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGRtYSBtb2RlIDEgJiAzLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxOF9haV9tb2RlMTNfZG1hKGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBpLCBsZW4sIGJ1ZnB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNob3J0ICpwdHI7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOworCWRldnByaXYtPm5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5uZXh0X2RtYV9idWY7CisJaWYgKChkZXZwcml2LT5kbWFfcnVuc190b19lbmQpID4gLTEgfHwgZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpIHsJLy8gc3dpdGNoIGRtYSBidWZzCisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEsIERNQV9NT0RFX1JFQUQpOworCQlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsCisJCQlkZXZwcml2LT5od2RtYXB0cltkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCB8fCBkZXZwcml2LT5uZXZlcmVuZGluZ19haSkgeworCQkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsCisJCQkJZGV2cHJpdi0+aHdkbWFzaXplW2RldnByaXYtPm5leHRfZG1hX2J1Zl0pOworCQl9IGVsc2UgeworCQkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGRldnByaXYtPmxhc3RfZG1hX3J1bik7CisJCX0KKwkJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwl9CisJcnRfcHJpbnRrKCJjb21lZGk6IEEvRCBtb2RlMS8zIElSUSBcbiIpOworCisJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kLS07CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCXB0ciA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbMSAtIGRldnByaXYtPm5leHRfZG1hX2J1Zl07CisKKwlsZW4gPSBkZXZwcml2LT5od2RtYXNpemVbMF0gPj4gMTsKKwlidWZwdHIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICgocHRyW2J1ZnB0cl0gJiAweGYpICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFtkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zXSkgewkvLyBkcm9wb3V0IQorCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIERNQSAtIGNoYW5uZWwgZHJvcG91dCAlZChjYXJkKSE9JWQoY2hhbmxpc3QpIGF0ICVkICFcbiIsCisJCQkJKHB0cltidWZwdHJdICYgMHhmKSwKKwkJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+CisJCQkJCWFjdF9jaGFubGlzdF9wb3NdLAorCQkJCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MpOworCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgcHRyW2J1ZnB0cisrXSA+PiA0KTsJLy8gZ2V0IG9uZSBzYW1wbGUKKworCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKys7CisJCWlmIChkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4pIHsKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CisJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKwkJfQorCisJCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPT0gMCkgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQkvLyBwcmludGsoImRvbmUgaW50IGFpMTMgZG1hXG4iKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisJfQorCisJaWYgKGxlbiA+IDApCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIHVudXNlZAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGRtYSBtb2RlIDEgJiAzIG92ZXIgUlRDLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxOF9haV9tb2RlMTNfZG1hX3J0YyhpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwl1bnNpZ25lZCBpbnQgdG9wMSwgdG9wMiwgaSwgYnVmcHRyOworCWxvbmcgb2ZzX2RhdHM7CisJc2hvcnQgKmRtYWJ1ZiA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbMF07CisKKwkvL291dGIoMiwweDM3OCk7CisJc3dpdGNoIChkZXZwcml2LT5haV9tb2RlKSB7CisJY2FzZSBJTlRfVFlQRV9BSTFfRE1BX1JUQzoKKwljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQl0bXAgPSAoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIDB4RjApOworCQltb2RfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIsCisJCQlqaWZmaWVzICsgSFogLyBkZXZwcml2LT5ydGNfZnJlcSArIDIgKiBIWiAvIDEwMCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCXRvcDEgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hKTsKKwkJCXRvcDIgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hKTsKKwkJCWlmICh0b3AxID09IHRvcDIpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAodG9wMSAhPSB0b3AyKQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl0b3AxID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdIC0gdG9wMTsJLy8gd2hlcmUgaXMgbm93IERNQSBpbiBidWZmZXIKKwkJdG9wMSA+Pj0gMTsKKwkJb2ZzX2RhdHMgPSB0b3AxIC0gZGV2cHJpdi0+bGFzdF90b3BfZG1hOwkvLyBuZXcgc2FtcGxlcyBmcm9tIGxhc3QgY2FsbAorCQlpZiAob2ZzX2RhdHMgPCAwKQorCQkJb2ZzX2RhdHMgPSAoZGV2cHJpdi0+ZG1hc2FtcGxzaXplKSArIG9mc19kYXRzOworCQlpZiAoIW9mc19kYXRzKQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOwkvLyBleGl0PW5vIG5ldyBzYW1wbGVzIGZyb20gbGFzdCBjYWxsCisJCS8vIG9ic2x1eiBkYXRhCisJCWkgPSBkZXZwcml2LT5sYXN0X3RvcF9kbWEgLSAxOworCQlpICY9IChkZXZwcml2LT5kbWFzYW1wbHNpemUgLSAxKTsKKworCQlpZiAoZG1hYnVmW2ldICE9IE1BR0lDX0RNQV9XT1JEKSB7CS8vIERNQSBvdmVyZmxvdyEKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgbW9kZTEvMyBETUEgYnVmZmVyIG92ZXJmbG93ISIpOworCQkJLy9ydF9wcmludGsoIkkgJWQgZG1hYnVmW2ldICVkICVkXG4iLGksZG1hYnVmW2ldLGRldnByaXYtPmRtYXNhbXBsc2l6ZSk7CisJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCQkvL3J0X3ByaW50aygiciAlbGQgIixvZnNfZGF0cyk7CisKKwkJYnVmcHRyID0gZGV2cHJpdi0+bGFzdF90b3BfZG1hOworCisJCWZvciAoaSA9IDA7IGkgPCBvZnNfZGF0czsgaSsrKSB7CisJCQlpZiAoKGRtYWJ1ZltidWZwdHJdICYgMHhmKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pIHsJLy8gZHJvcG91dCEKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIERNQSAtIGNoYW5uZWwgZHJvcG91dCAlZCE9JWQgIVxuIiwKKwkJCQkJKGRtYWJ1ZltidWZwdHJdICYgMHhmKSwKKwkJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPgorCQkJCQkJYWN0X2NoYW5saXN0X3Bvc10pOworCQkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCUNPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCisJCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZG1hYnVmW2J1ZnB0cisrXSA+PiA0KTsJLy8gZ2V0IG9uZSBzYW1wbGUKKwkJCWJ1ZnB0ciAmPSAoZGV2cHJpdi0+ZG1hc2FtcGxzaXplIC0gMSk7CisKKwkJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CisJCQl9CisKKwkJCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID09IDApIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJCS8vcHJpbnRrKCJkb25lIGludCBhaTEzIGRtYVxuIik7CisJCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCQl9CisJCX0KKworCQlkZXZwcml2LT5sYXN0X3RvcF9kbWEgPSBidWZwdHI7CisJCWJ1ZnB0ci0tOworCQlidWZwdHIgJj0gKGRldnByaXYtPmRtYXNhbXBsc2l6ZSAtIDEpOworCQlkbWFidWZbYnVmcHRyXSA9IE1BR0lDX0RNQV9XT1JEOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJLy9vdXRiKDAsMHgzNzgpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLy9vdXRiKDAsMHgzNzgpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBhbmFsb2cgaW5wdXQgaW50ZXJydXB0IG1vZGUgMSAmIDMsIDgxOEhEL0hHIGNhcmRzCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ZpZm8oaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IGksIGxlbiwgbG87CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0lOVENMUik7CS8vIGNsZWFyIGZpZm8gaW50IHJlcXVlc3QKKworCWxvID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0ZJX1NUQVRVUyk7CisKKwlpZiAobG8gJiA0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgbW9kZTEvMyBGSUZPIG92ZXJmbG93ISIpOworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAobG8gJiAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgbW9kZTEvMyBGSUZPIGludGVycnVwdCB3aXRob3V0IGRhdGEhIik7CisJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChsbyAmIDIpIHsKKwkJbGVuID0gNTEyOworCX0gZWxzZSB7CisJCWxlbiA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWxvID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0RBVEFMTyk7CisJCWlmICgobG8gJiAweGYpICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFtkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zXSkgewkvLyBkcm9wb3V0IQorCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIEZJRk8gLSBjaGFubmVsIGRyb3BvdXQgJWQhPSVkICFcbiIsCisJCQkJKGxvICYgMHhmKSwKKwkJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+CisJCQkJCWFjdF9jaGFubGlzdF9wb3NdKTsKKwkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIChsbyA+PiA0KSB8IChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfREFUQUhJKSA8PCA0KSk7CS8vIGdldCBvbmUgc2FtcGxlCisKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCQl9CisKKwkJaWYgKCFkZXZwcml2LT5uZXZlcmVuZGluZ19haSkKKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA9PSAwKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKwl9CisKKwlpZiAobGVuID4gMCkKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgSU5UIHByb2NlZHVyZQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE4KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwkvL3J0X3ByaW50aygiSVxuIik7CisKKwlzd2l0Y2ggKGRldnByaXYtPmFpX21vZGUpIHsKKwljYXNlIElOVF9UWVBFX0FJMV9ETUE6CisJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxOF9haV9tb2RlMTNfZG1hKGlycSwgZCk7CisJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCWNhc2UgSU5UX1RZUEVfQUkzX0lOVDoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ludChpcnEsIGQpOworCWNhc2UgSU5UX1RZUEVfQUkxX0ZJRk86CisJY2FzZSBJTlRfVFlQRV9BSTNfRklGTzoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ZpZm8oaXJxLCBkKTsKKyNpZmRlZiBQQ0w4MThfTU9ERTEzX0FPCisJY2FzZSBJTlRfVFlQRV9BTzFfSU5UOgorCWNhc2UgSU5UX1RZUEVfQU8zX0lOVDoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYW9fbW9kZTEzX2ludChpcnEsIGQpOworI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCisJaWYgKCghZGV2LT5pcnEpIHx8ICghZGV2cHJpdi0+aXJxX2ZyZWUpIHx8ICghZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXx8ICghZGV2cHJpdi0+YWlfbW9kZSkpIHsKKwkJaWYgKGRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCkgeworCQkJaWYgKGRldnByaXYtPm5ldmVyZW5kaW5nX2FpICYmCisJCQkJKGRldnByaXYtPmFpX21vZGUgPT0gSU5UX1RZUEVfQUkxX0RNQQorCQkJCQl8fCBkZXZwcml2LT5haV9tb2RlID09CisJCQkJCUlOVF9UWVBFX0FJM19ETUEpKSB7CisJCQkJLyogd2UgaGFkIG5ldmVyZW5kaW5nIGFpIGJ1dCBhaV9jYW5jZWwoKSBoYXMgYmVlbiBjYWxsZWQKKwkJCQkgICB0aGUgY2xlYW51cCBmcm9tIGFpX2NhbmNlbCgpIGhhcyBiZWVuIGRlbGF5ZWQgdW50aWwga25vdworCQkJCSAgIGJlY2F1c2UgdGhlIGNhcmQgZG9lc24ndCBzZWVtIHRvIGxpa2UgYmVpbmcgcmVwcm9ncmFtbWVkCisJCQkJICAgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MKKwkJCQkgKi8KKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCQkJZGV2cHJpdi0+YWlfbW9kZSA9IGRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZDsKKwkJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCQkJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKKwkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQl9CisJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJiYWQgSVJRISIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJY29tZWRpX2Vycm9yKGRldiwgIklSUSBmcm9tIHVua25vdyBzb3VyY2UhIik7CisJcmV0dXJuIElSUV9OT05FOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERSAxIG9yIDMgRE1BICwgODE4IGNhcmRzCisqLworc3RhdGljIHZvaWQgcGNsODE4X2FpX21vZGUxM2RtYV9pbnQoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IGJ5dGVzOworCisJcnRfcHJpbnRrKCJtb2RlMTNkbWFfaW50LCBtb2RlOiAlZFxuIiwgbW9kZSk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsJLy8gZGlzYWJsZSBkbWEKKwlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSB7CisJCWJ5dGVzID0gZGV2cHJpdi0+YWlfbl9jaGFuICogZGV2cHJpdi0+YWlfc2NhbnMgKiBzaXplb2Yoc2hvcnQpOwkvLyBob3cgbWFueQorCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLy8gaG93IG1hbnkgRE1BIHBhZ2VzIHdlIG11c3QgZmlpbAorCQlkZXZwcml2LT5sYXN0X2RtYV9ydW4gPSBieXRlcyAlIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLy9vbiBsYXN0IGRtYSB0cmFuc2ZlciBtdXN0IGJlIG1vdmVkCisJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID49IDApCisJCQlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwl9CisKKwlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAwOworCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEsIERNQV9NT0RFX1JFQUQpOworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0clswXSk7CisJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGJ5dGVzKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisKKwlpZiAobW9kZSA9PSAxKSB7CisJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTFfRE1BOworCQlvdXRiKDB4ODcgfCAoZGV2LT5pcnEgPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBQYWNlcitJUlErRE1BICovCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWlfbW9kZSA9IElOVF9UWVBFX0FJM19ETUE7CisJCW91dGIoMHg4NiB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIEV4dCB0cmlnK0lSUStETUEgKi8KKwl9OworfQorCisjaWZkZWYgdW51c2VkCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERSAxIG9yIDMgRE1BIHJ0YywgODE4IGNhcmRzCisqLworc3RhdGljIHZvaWQgcGNsODE4X2FpX21vZGUxM2RtYV9ydGMoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc2hvcnQgKnBvbGU7CisKKwlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEIHwgRE1BX0FVVE9JTklUKTsKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYSwgZGV2cHJpdi0+aHdkbWFwdHJbMF0pOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXNpemVbMF0pOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlkZXZwcml2LT5sYXN0X3RvcF9kbWEgPSAwOwkvL2RldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwlwb2xlID0gKHNob3J0ICopIGRldnByaXYtPmRtYWJ1ZlswXTsKKwlkZXZwcml2LT5kbWFzYW1wbHNpemUgPSBkZXZwcml2LT5od2RtYXNpemVbMF0gLyAyOworCXBvbGVbZGV2cHJpdi0+ZG1hc2FtcGxzaXplIC0gMV0gPSBNQUdJQ19ETUFfV09SRDsKKyNpZmRlZiB1bnVzZWQKKwlkZXZwcml2LT5ydGNfZnJlcSA9IHJ0Y19zZXRmcmVxX2lycSgyMDQ4KTsKKwlkZXZwcml2LT5ydGNfaXJxX3RpbWVyLmV4cGlyZXMgPQorCQlqaWZmaWVzICsgSFogLyBkZXZwcml2LT5ydGNfZnJlcSArIDIgKiBIWiAvIDEwMDsKKwlkZXZwcml2LT5ydGNfaXJxX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJZGV2cHJpdi0+cnRjX2lycV90aW1lci5mdW5jdGlvbiA9IHJ0Y19kcm9wcGVkX2lycTsKKworCWFkZF90aW1lcigmZGV2cHJpdi0+cnRjX2lycV90aW1lcik7CisjZW5kaWYKKworCWlmIChtb2RlID09IDEpIHsKKwkJZGV2cHJpdi0+aW50ODE4X21vZGUgPSBJTlRfVFlQRV9BSTFfRE1BX1JUQzsKKwkJb3V0YigweDA3IHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrRE1BICovCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aW50ODE4X21vZGUgPSBJTlRfVFlQRV9BSTNfRE1BX1JUQzsKKwkJb3V0YigweDA2IHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogRXh0IHRyaWcrRE1BICovCisJfTsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERSAxIG9yIDMsIDgxOCBjYXJkcworKi8KK3N0YXRpYyBpbnQgcGNsODE4X2FpX2NtZF9tb2RlKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBkaXZpc29yMSwgZGl2aXNvcjI7CisJdW5zaWduZWQgaW50IHNlZ2xlbjsKKworCXJ0X3ByaW50aygicGNsODE4X2FpX2NtZF9tb2RlKClcbiIpOworCWlmICgoIWRldi0+aXJxKSAmJiAoIWRldnByaXYtPmRtYV9ydGMpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgbm90IGRlZmluZWQhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkZXZwcml2LT5pcnFfYmxvY2tlZCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlzZWdsZW4gPSBjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdCwKKwkJZGV2cHJpdi0+YWlfbl9jaGFuKTsKKwlpZiAoc2VnbGVuIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCisJCWRldnByaXYtPmFpX25fY2hhbiwgc2VnbGVuKTsKKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IGRldnByaXYtPmFpX3NjYW5zOworCWRldnByaXYtPmFpX2FjdF9jaGFuID0gMDsKKwlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDE7CisJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gMDsKKwlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gMDsKKworCWlmICgoZGV2cHJpdi0+YWlfc2NhbnMgPT0gMCkgfHwgKGRldnByaXYtPmFpX3NjYW5zID09IC0xKSkKKwkJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAxOwkvL3dlbGwsIHVzZXIgd2FudCBuZXZlcmVuZGluZworCisJaWYgKG1vZGUgPT0gMSkgeworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjUzX29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPmNvbnZlcnRfYXJnLCBUUklHX1JPVU5EX05FQVJFU1QpOworCQlpZiAoZGl2aXNvcjEgPT0gMSkgewkvKiBQQ0w3MTgvODE4IGNyYXNoIGlmIGFueSBkaXZpc29yIGlzIHNldCB0byAxICovCisJCQlkaXZpc29yMSA9IDI7CisJCQlkaXZpc29yMiAvPSAyOworCQl9CisJCWlmIChkaXZpc29yMiA9PSAxKSB7CisJCQlkaXZpc29yMiA9IDI7CisJCQlkaXZpc29yMSAvPSAyOworCQl9CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTlRFTkFCTEUpOwkvKiBlbmFibGUgcGFjZXIgKi8KKworCXN3aXRjaCAoZGV2cHJpdi0+ZG1hKSB7CisJY2FzZSAxOgkJLy8gRE1BCisJY2FzZSAzOgorCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSB7CisJCQlwY2w4MThfYWlfbW9kZTEzZG1hX2ludChtb2RlLCBkZXYsIHMpOworCQl9CisjaWZkZWYgdW51c2VkCisJCWVsc2UgeworCQkJcGNsODE4X2FpX21vZGUxM2RtYV9ydGMobW9kZSwgZGV2LCBzKTsKKwkJfQorI2Vsc2UKKwkJZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworCWNhc2UgMDoJCS8vIElSUQorCQkvLyBydF9wcmludGsoIklSUVxuIik7CisJCWlmIChtb2RlID09IDEpIHsKKwkJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTFfSU5UOworCQkJb3V0YigweDgzIHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrSVJRICovCisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkzX0lOVDsKKwkJCW91dGIoMHg4MiB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIEV4dCB0cmlnK0lSUSAqLworCQl9OworCQlicmVhazsKKwljYXNlIC0xOgkJLy8gRklGTworCQlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0VOQUJMRSk7CS8vIGVuYWJsZSBGSUZPCisJCWlmIChtb2RlID09IDEpIHsKKwkJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTFfRklGTzsKKwkJCW91dGIoMHgwMywgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIFBhY2VyICovCisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkzX0ZJRk87CisJCQlvdXRiKDB4MDIsIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOworCQl9OwkJLyogRXh0IHRyaWcgKi8KKwkJYnJlYWs7CisJfQorCisJc3RhcnRfcGFjZXIoZGV2LCBtb2RlLCBkaXZpc29yMSwgZGl2aXNvcjIpOworCisjaWZkZWYgdW51c2VkCisJc3dpdGNoIChkZXZwcml2LT5haV9tb2RlKSB7CisJY2FzZSBJTlRfVFlQRV9BSTFfRE1BX1JUQzoKKwljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQlzZXRfcnRjX2lycV9iaXQoMSk7CS8qIHN0YXJ0IFJUQyAqLworCQlicmVhazsKKwl9CisjZW5kaWYKKwlydF9wcmludGsoInBjbDgxOF9haV9jbWRfbW9kZSgpIGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiB1bnVzZWQKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBPVVRQVVQgTU9ERSAxIG9yIDMsIDgxOCBjYXJkcworKi8KKyNpZmRlZiBQQ0w4MThfTU9ERTEzX0FPCitzdGF0aWMgaW50IHBjbDgxOF9hb19tb2RlMTMoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJY29tZWRpX3RyaWcgKiBpdCkKK3sKKwlpbnQgZGl2aXNvcjEsIGRpdmlzb3IyOworCisJaWYgKCFkZXYtPmlycSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSVJRIG5vdCBkZWZpbmVkISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXJldHVybiAtRUJVU1k7CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJZGV2cHJpdi0+aW50MTNfYWN0X3NjYW4gPSBpdC0+bjsKKwlkZXZwcml2LT5pbnQxM19hY3RfY2hhbiA9IDA7CisJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAxOworCWRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCA9IDA7CisJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOworCisJaWYgKG1vZGUgPT0gMSkgeworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjUzX29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZpdC0+dHJpZ3ZhciwgVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJaWYgKGRpdmlzb3IxID09IDEpIHsJLyogUENMODE4IGNyYXNoIGlmIGFueSBkaXZpc29yIGlzIHNldCB0byAxICovCisJCQlkaXZpc29yMSA9IDI7CisJCQlkaXZpc29yMiAvPSAyOworCQl9CisJCWlmIChkaXZpc29yMiA9PSAxKSB7CisJCQlkaXZpc29yMiA9IDI7CisJCQlkaXZpc29yMSAvPSAyOworCQl9CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTlRFTkFCTEUpOwkvKiBlbmFibGUgcGFjZXIgKi8KKwlpZiAobW9kZSA9PSAxKSB7CisJCWRldnByaXYtPmludDgxOF9tb2RlID0gSU5UX1RZUEVfQU8xX0lOVDsKKwkJb3V0YigweDgzIHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrSVJRICovCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aW50ODE4X21vZGUgPSBJTlRfVFlQRV9BTzNfSU5UOworCQlvdXRiKDB4ODIgfCAoZGV2LT5pcnEgPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBFeHQgdHJpZytJUlEgKi8KKwl9OworCisJc3RhcnRfcGFjZXIoZGV2LCBtb2RlLCBkaXZpc29yMSwgZGl2aXNvcjIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBPVVRQVVQgTU9ERSAxLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hb19tb2RlMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbWVkaV90cmlnICogaXQpCit7CisJcmV0dXJuIHBjbDgxOF9hb19tb2RlMTMoMSwgZGV2LCBzLCBpdCk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBPVVRQVVQgTU9ERSAzLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hb19tb2RlMyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbWVkaV90cmlnICogaXQpCit7CisJcmV0dXJuIHBjbDgxOF9hb19tb2RlMTMoMywgZGV2LCBzLCBpdCk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgU3RhcnQvc3RvcCBwYWNlciBvbmJvYXJkIHBhY2VyCisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSQ1RMKTsKKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJb3V0YihkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUjIpOworCQlvdXRiKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUjIpOworCQlvdXRiKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSMSk7CisJCW91dGIoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSMSk7CisJfQorfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgQ2hlY2sgaWYgY2hhbm5lbCBsaXN0IGZyb20gdXNlciBpcyBidWlsZGVkIGNvcnJlY3RseQorIElmIGl0J3Mgb2ssIHRoZW4gcHJvZ3JhbSBzY2FuL2dhaW4gbG9naWMKKyovCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCit7CisJdW5zaWduZWQgaW50IGNoYW5zZWdtZW50WzE2XTsKKwl1bnNpZ25lZCBpbnQgaSwgbm93bXVzdGJlY2hhbiwgc2VnbGVuLCBzZWdwb3M7CisKKwkvKiBjb3JyZWN0IGNoYW5uZWwgYW5kIHJhbmdlIG51bWJlciBjaGVjayBpdHNlbGYgY29tZWRpL3JhbmdlLmMgKi8KKwlpZiAobl9jaGFuIDwgMSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicmFuZ2UvY2hhbm5lbCBsaXN0IGlzIGVtcHR5ISIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobl9jaGFuID4gMSkgeworCQkvLyBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5dGltZSBvaworCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOworCQkvLyBidWlsZCBwYXJ0IG9mIGNoYW5saXN0CisJCWZvciAoaSA9IDEsIHNlZ2xlbiA9IDE7IGkgPCBuX2NoYW47IGkrKywgc2VnbGVuKyspIHsKKwkJCS8vIHJ0X3ByaW50aygiJWQuICVkICVkXG4iLGksQ1JfQ0hBTihpdC0+Y2hhbmxpc3RbaV0pLENSX1JBTkdFKGl0LT5jaGFubGlzdFtpXSkpOworCQkJLy8gd2UgZGV0ZWN0IGxvb3AsIHRoaXMgbXVzdCBieSBmaW5pc2gKKwkJCWlmIChjaGFubGlzdFswXSA9PSBjaGFubGlzdFtpXSkKKwkJCQlicmVhazsKKwkJCW5vd211c3RiZWNoYW4gPQorCQkJCShDUl9DSEFOKGNoYW5zZWdtZW50W2kgLSAxXSkgKyAxKSAlIHMtPm5fY2hhbjsKKwkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8vIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW5vdXMgOi0oCisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpJWQ6IHBjbDgxODogY2hhbm5lbCBsaXN0IG11c3QgYmUgY29udGlub3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKKwkJCQkJbm93bXVzdGJlY2hhbiwgQ1JfQ0hBTihjaGFubGlzdFswXSkpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJLy8gd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0CisJCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOworCQl9CisKKwkJLy8gY2hlY2sgd2hvbGUgY2hhbmxpc3QKKwkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CisJCQkvL3J0X3ByaW50aygiJWQgJWQ9JWQgJWRcbiIsQ1JfQ0hBTihjaGFuc2VnbWVudFtpJXNlZ2xlbl0pLENSX1JBTkdFKGNoYW5zZWdtZW50W2klc2VnbGVuXSksQ1JfQ0hBTihpdC0+Y2hhbmxpc3RbaV0pLENSX1JBTkdFKGl0LT5jaGFubGlzdFtpXSkpOworCQkJaWYgKGNoYW5saXN0W2ldICE9IGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpJWQ6IHBjbDgxODogYmFkIGNoYW5uZWwgb3IgcmFuZ2UgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCAlZCwlZCwlZCFcbiIsCisJCQkJCWRldi0+bWlub3IsIGksIENSX0NIQU4oY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9SQU5HRShjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9DSEFOKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CisJCQkJcmV0dXJuIDA7CS8vIGNoYW4vZ2FpbiBsaXN0IGlzIHN0cmFuZ2UKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXNlZ2xlbiA9IDE7CisJfQorCXJ0X3ByaW50aygiY2hlY2tfY2hhbm5lbF9saXN0OiBzZWdsZW4gJWRcbiIsIHNlZ2xlbik7CisJcmV0dXJuIHNlZ2xlbjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbikKK3sKKwlpbnQgaTsKKworCWRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4gPSBzZWdsZW47CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VnbGVuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOworCQlvdXRiKG11eG9uZWNoYW5bQ1JfQ0hBTihjaGFubGlzdFtpXSldLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9NVVgpOwkvKiBzZWxlY3QgY2hhbm5lbCAqLworCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0W2ldKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCX0KKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwkvKiBzZWxlY3QgY2hhbm5lbCBpbnRlcnZhbCB0byBzY2FuICovCisJb3V0YihkZXZwcml2LT5hY3RfY2hhbmxpc3RbMF0gfCAoZGV2cHJpdi0+YWN0X2NoYW5saXN0W3NlZ2xlbiAtCisJCQkJMV0gPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X01VWCk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBDaGVjayBpZiBib2FyZCBpcyBzd2l0Y2hlZCB0byBTRSAoMSkgb3IgRElGRigwKSBtb2RlCisqLworc3RhdGljIGludCBjaGVja19zaW5nbGVfZW5kZWQodW5zaWduZWQgaW50IHBvcnQpCit7CisJaWYgKGluYihwb3J0ICsgUENMODE4X1NUQVRVUykgJiAweDIwKSB7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAyOworCX0KKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPm5zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPm5zX21pbjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfRVhUICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHMtPm5fY2hhbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IHMtPm5fY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1M19vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPm5zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDQ7CisJfQorCisJLyogc3RlcCA1OiBjb21wbGFpbiBhYm91dCBzcGVjaWFsIGNoYW5saXN0IGNvbnNpZGVyYXRpb25zICovCisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3QsCisJCQkJY21kLT5jaGFubGlzdF9sZW4pKQorCQkJcmV0dXJuIDU7CS8vIGluY29ycmVjdCBjaGFubmVscyBsaXN0CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGFpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgcmV0dmFsOworCisJcnRfcHJpbnRrKCJwY2w4MThfYWlfY21kKClcbiIpOworCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCWRldnByaXYtPmFpX2NoYW5saXN0ID0gY21kLT5jaGFubGlzdDsKKwlkZXZwcml2LT5haV9mbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+YWlfZGF0YV9sZW4gPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CisJZGV2cHJpdi0+YWlfZGF0YSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWY7CisJZGV2cHJpdi0+YWlfdGltZXIxID0gMDsKKwlkZXZwcml2LT5haV90aW1lcjIgPSAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWlfc2NhbnMgPSAwOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CS8vIG1vZGUgMSwgMworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CS8vIG1vZGUgMQorCQkJZGV2cHJpdi0+YWlfdGltZXIxID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCXJldHZhbCA9IHBjbDgxOF9haV9jbWRfbW9kZSgxLCBkZXYsIHMpOworCQkJcnRfcHJpbnRrKCJwY2w4MThfYWlfY21kKCkgZW5kXG4iKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsJLy8gbW9kZSAzCisJCQlyZXR1cm4gcGNsODE4X2FpX2NtZF9tb2RlKDMsIGRldiwgcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBjYW5jZWwgYW55IG1vZGUgMS00IEFJCisqLworc3RhdGljIGludCBwY2w4MThfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKGRldnByaXYtPmlycV9ibG9ja2VkID4gMCkgeworCQlydF9wcmludGsoInBjbDgxOF9haV9jYW5jZWwoKVxuIik7CisJCWRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCA9IGRldnByaXYtPmFpX21vZGU7CisJCWRldnByaXYtPmFpX21vZGUgPSAwOworCisJCXN3aXRjaCAoZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkKSB7CisjaWZkZWYgdW51c2VkCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQV9SVEM6CisJCWNhc2UgSU5UX1RZUEVfQUkzX0RNQV9SVEM6CisJCQlzZXRfcnRjX2lycV9iaXQoMCk7CS8vIHN0b3AgUlRDCisJCQlkZWxfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIpOworI2VuZGlmCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQToKKwkJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQkJaWYgKGRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSB7CisJCQkJLyogd2FpdCBmb3IgcnVubmluZyBkbWEgdHJhbnNmZXIgdG8gZW5kLCBkbyBjbGVhbnVwIGluIGludGVycnVwdCAqLworCQkJCWdvdG8gZW5kOworCQkJfQorCQkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCQljYXNlIElOVF9UWVBFX0FJM19JTlQ6CisJCWNhc2UgSU5UX1RZUEVfQUkxX0ZJRk86CisJCWNhc2UgSU5UX1RZUEVfQUkzX0ZJRk86CisjaWZkZWYgUENMODE4X01PREUxM19BTworCQljYXNlIElOVF9UWVBFX0FPMV9JTlQ6CisJCWNhc2UgSU5UX1RZUEVfQU8zX0lOVDoKKyNlbmRpZgorCQkJb3V0YihpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCkgJiAweDczLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCQlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfTE8pOworCQkJaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0FEX0xPKTsKKwkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9ISSk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJaWYgKGRldnByaXYtPnVzZWZpZm8pIHsJLy8gRklGTyBzaHV0ZG93bgorCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfSU5UQ0xSKTsKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0ZMVVNIKTsKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0VOQUJMRSk7CisJCQl9CisJCQlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CisJCQlkZXZwcml2LT5sYXN0X2ludF9zdWIgPSBzOworCQkJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKyAgICAgIGVuZDoKKwlydF9wcmludGsoInBjbDgxOF9haV9jYW5jZWwoKSBlbmRcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgY2hlY2ggZm9yIFBDTDgxOAorKi8KK3N0YXRpYyBpbnQgcGNsODE4X2NoZWNrKHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCW91dGIoMHgwMCwgaW9iYXNlICsgUENMODE4X01VWCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlpZiAoaW5iKGlvYmFzZSArIFBDTDgxOF9NVVgpICE9IDB4MDApCisJCXJldHVybiAxOwkvL3RoZXJlIGlzbid0IGNhcmQKKwlvdXRiKDB4NTUsIGlvYmFzZSArIFBDTDgxOF9NVVgpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MThfTVVYKSAhPSAweDU1KQorCQlyZXR1cm4gMTsJLy90aGVyZSBpc24ndCBjYXJkCisJb3V0YigweDAwLCBpb2Jhc2UgKyBQQ0w4MThfTVVYKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMHgxOCwgaW9iYXNlICsgUENMODE4X0NPTlRST0wpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCkgIT0gMHgxOCkKKwkJcmV0dXJuIDE7CS8vdGhlcmUgaXNuJ3QgY2FyZAorCXJldHVybiAwOwkJLy8gb2ssIGNhcmQgZXhpc3QKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHJlc2V0IHdob2xlIFBDTC04MTggY2FyZHMKKyovCitzdGF0aWMgdm9pZCBwY2w4MThfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYtPnVzZWZpZm8pIHsJLy8gRklGTyBzaHV0ZG93bgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0lOVENMUik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfRkxVU0gpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0VOQUJMRSk7CisJfQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfREFfTE8pOwkvLyBEQUM9MFYKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RBX0hJKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fSEkpOwkvLyBETz0kMDAwMAorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fTE8pOworCWNvbWVkaV91ZGVsYXkoMSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NOVEVOQUJMRSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9NVVgpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsKKwlvdXRiKDB4YjAsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CS8qIFN0b3AgcGFjZXIgKi8KKwlvdXRiKDB4NzAsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CisJb3V0YigweDMwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFJDVEwpOworCWlmICh0aGlzX2JvYXJkLT5pc184MTgpIHsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9SQU5HRSk7CisJfSBlbHNlIHsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxOF9EQTJfTE8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzE4X0RBMl9ISSk7CisJfQorfQorCisjaWZkZWYgdW51c2VkCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEVuYWJsZSgxKS9kaXNhYmxlKDApIHBlcmlvZGljIGludGVycnVwdHMgZnJvbSBSVEMKKyovCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGJpdCA9PSAxKSB7CisJCVJUQ190aW1lcl9sb2NrKys7CisJCWlmIChSVENfdGltZXJfbG9jayA+IDEpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlSVENfdGltZXJfbG9jay0tOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPCAwKQorCQkJUlRDX3RpbWVyX2xvY2sgPSAwOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPiAwKQorCQkJcmV0dXJuIDA7CisJfQorCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisJdmFsID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKKwlpZiAoYml0KSB7CisJCXZhbCB8PSBSVENfUElFOworCX0gZWxzZSB7CisJCXZhbCAmPSB+UlRDX1BJRTsKKwl9CisJQ01PU19XUklURSh2YWwsIFJUQ19DT05UUk9MKTsKKwlDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpOworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFJlc3RhcnQgUlRDIGlmIHNvbWV0aGluZyBzdG9wIGl0ICh4bnRwZCBldmVyeSAxMSBtaW5zIG9yIGxhcmdlIElERSB0cmFuc2ZlcnMpCisqLworc3RhdGljIHZvaWQgcnRjX2Ryb3BwZWRfaXJxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHZvaWQgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRtcDsKKworCXN3aXRjaCAoZGV2cHJpdi0+aW50ODE4X21vZGUpIHsKKwljYXNlIElOVF9UWVBFX0FJMV9ETUFfUlRDOgorCWNhc2UgSU5UX1RZUEVfQUkzX0RNQV9SVEM6CisJCW1vZF90aW1lcigmZGV2cHJpdi0+cnRjX2lycV90aW1lciwKKwkJCWppZmZpZXMgKyBIWiAvIGRldnByaXYtPnJ0Y19mcmVxICsgMiAqIEhaIC8gMTAwKTsKKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCWNsaSgpOworCQl0bXAgPSAoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIDB4RjApOwkvKiByZXN0YXJ0ICovCisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlicmVhazsKKwl9OworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFNldCBmcmVxdWVuY3kgb2YgaW50ZXJydXB0cyBmcm9tIFJUQworKi8KK3N0YXRpYyBpbnQgcnRjX3NldGZyZXFfaXJxKGludCBmcmVxKQoreworCWludCB0bXAgPSAwOworCWludCBydGNfZnJlcTsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGZyZXEgPCAyKQorCQlmcmVxID0gMjsKKwlpZiAoZnJlcSA+IDgxOTIpCisJCWZyZXEgPSA4MTkyOworCisJd2hpbGUgKGZyZXEgPiAoMSA8PCB0bXApKQorCQl0bXArKzsKKworCXJ0Y19mcmVxID0gMSA8PCB0bXA7CisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKwl2YWwgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKSAmIDB4ZjA7CisJdmFsIHw9ICgxNiAtIHRtcCk7CisJQ01PU19XUklURSh2YWwsIFJUQ19GUkVRX1NFTEVDVCk7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJcmV0dXJuIHJ0Y19mcmVxOworfQorI2VuZGlmCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRnJlZSBhbnkgcmVzb3VyY2VzIHRoYXQgd2UgaGF2ZSBjbGFpbWVkCisqLworc3RhdGljIHZvaWQgZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLy9ydF9wcmludGsoImZyZWVfcmVzb3VyY2UoKVxuIik7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgZGV2cHJpdi0+c3ViX2FpKTsKKwkJcGNsODE4X3Jlc2V0KGRldik7CisJCWlmIChkZXZwcml2LT5kbWEpCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWEpOworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmWzBdKQorCQkJZnJlZV9wYWdlcyhkZXZwcml2LT5kbWFidWZbMF0sIGRldnByaXYtPmRtYXBhZ2VzWzBdKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlsxXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzFdLCBkZXZwcml2LT5kbWFwYWdlc1sxXSk7CisjaWZkZWYgdW51c2VkCisJCWlmIChkZXZwcml2LT5ydGNfaXJxKQorCQkJY29tZWRpX2ZyZWVfaXJxKGRldnByaXYtPnJ0Y19pcnEsIGRldik7CisJCWlmICgoZGV2cHJpdi0+ZG1hX3J0YykgJiYgKFJUQ19sb2NrID09IDEpKSB7CisJCQlpZiAoZGV2cHJpdi0+cnRjX2lvYmFzZSkKKwkJCQlyZWxlYXNlX3JlZ2lvbihkZXZwcml2LT5ydGNfaW9iYXNlLAorCQkJCQlkZXZwcml2LT5ydGNfaW9zaXplKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YykKKwkJCVJUQ19sb2NrLS07CisjZW5kaWYKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIGRldnByaXYtPmlvX3JhbmdlKTsKKwkvL3J0X3ByaW50aygiZnJlZV9yZXNvdXJjZSgpIGVuZFxuIik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSW5pdGlhbGl6YXRpb24KKworKi8KK3N0YXRpYyBpbnQgcGNsODE4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnEsIGRtYTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w4MThfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CS8qIENhbid0IGFsbG9jIG1lbSAqLworCisJLyogY2xhaW0gb3VyIEkvTyBzcGFjZSAqLworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDgxODogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsCisJCWRldi0+bWlub3IsIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJZGV2cHJpdi0+aW9fcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlpZiAoKHRoaXNfYm9hcmQtPmZpZm8pICYmIChpdC0+b3B0aW9uc1syXSA9PSAtMSkpIHsJLy8gd2UndmUgYm9hcmQgd2l0aCBGSUZPIGFuZCB3ZSB3YW50IHRvIHVzZSBGSUZPCisJCWRldnByaXYtPmlvX3JhbmdlID0gUENMeDF4RklGT19SQU5HRTsKKwkJZGV2cHJpdi0+dXNlZmlmbyA9IDE7CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBkZXZwcml2LT5pb19yYW5nZSwgInBjbDgxOCIpKSB7CisJCXJ0X3ByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChwY2w4MThfY2hlY2soaW9iYXNlKSkgeworCQlydF9wcmludGsoIiwgSSBjYW4ndCBkZXRlY3QgYm9hcmQuIEZBSUwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogc2V0IHVwIHNvbWUgbmFtZSBzdHVmZiAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJLyogZ3JhYiBvdXIgSVJRICovCisJaXJxID0gMDsKKwlpZiAodGhpc19ib2FyZC0+SVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlpZiAoaXJxKSB7CS8qIHdlIHdhbnQgdG8gdXNlIElSUSAqLworCQkJaWYgKCgoMSA8PCBpcnEpICYgdGhpc19ib2FyZC0+SVJRYml0cykgPT0gMCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLAorCQkJCQlpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w4MTgsIDAsCisJCQkJCQkicGNsODE4IiwgZGV2KSkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCBESVNBQkxJTkcgSVQiLAorCQkJCQkJaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXJ0X3ByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworCWlmIChpcnEpIHsKKwkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAxOworCX0gLyogMT13ZSBoYXZlIGFsbG9jYXRlZCBpcnEgKi8KKwllbHNlIHsKKwkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAwOworCX0KKwlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CS8qIG51bWJlciBvZiBzdWJkZXZpY2Ugd2hpY2ggdXNlIElSUSAqLworCWRldnByaXYtPmFpX21vZGUgPSAwOwkvKiBtb2RlIG9mIGlycSAqLworCisjaWZkZWYgdW51c2VkCisJLyogZ3JhYiBSVEMgZm9yIERNQSBvcGVyYXRpb25zICovCisJZGV2cHJpdi0+ZG1hX3J0YyA9IDA7CisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgewkvLyB3ZSB3YW50IHRvIHVzZSBETUEKKwkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCWlmICghcmVxdWVzdF9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQsCisJCQkJCSJwY2w4MTggKFJUQykiKSkKKwkJCQlnb3RvIG5vX3J0YzsKKwkJfQorCQlkZXZwcml2LT5ydGNfaW9iYXNlID0gUlRDX1BPUlQoMCk7CisJCWRldnByaXYtPnJ0Y19pb3NpemUgPSBSVENfSU9fRVhURU5UOworCQlSVENfbG9jaysrOworCQlpZiAoIWNvbWVkaV9yZXF1ZXN0X2lycShSVENfSVJRLAorCQkJCWludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2RtYV9ydGMsIDAsCisJCQkJInBjbDgxOCBETUEgKFJUQykiLCBkZXYpKSB7CisJCQlkZXZwcml2LT5kbWFfcnRjID0gMTsKKwkJCWRldnByaXYtPnJ0Y19pcnEgPSBSVENfSVJROworCQkJcnRfcHJpbnRrKCIsIGRtYV9pcnE9JXUiLCBkZXZwcml2LT5ydGNfaXJxKTsKKwkJfSBlbHNlIHsKKwkJCVJUQ19sb2NrLS07CisJCQlpZiAoUlRDX2xvY2sgPT0gMCkgeworCQkJCWlmIChkZXZwcml2LT5ydGNfaW9iYXNlKQorCQkJCQlyZWxlYXNlX3JlZ2lvbihkZXZwcml2LT5ydGNfaW9iYXNlLAorCQkJCQkJZGV2cHJpdi0+cnRjX2lvc2l6ZSk7CisJCQl9CisJCQlkZXZwcml2LT5ydGNfaW9iYXNlID0gMDsKKwkJCWRldnByaXYtPnJ0Y19pb3NpemUgPSAwOworCQl9CisJfQorCisgICAgICBub19ydGM6CisjZW5kaWYKKwkvKiBncmFiIG91ciBETUEgKi8KKwlkbWEgPSAwOworCWRldnByaXYtPmRtYSA9IGRtYTsKKwlpZiAoKGRldnByaXYtPmlycV9mcmVlID09IDApICYmIChkZXZwcml2LT5kbWFfcnRjID09IDApKQorCQlnb3RvIG5vX2RtYTsJLyogaWYgd2UgaGF2ZW4ndCBJUlEsIHdlIGNhbid0IHVzZSBETUEgKi8KKwlpZiAodGhpc19ib2FyZC0+RE1BYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgRE1BICovCisJCWRtYSA9IGl0LT5vcHRpb25zWzJdOworCQlpZiAoZG1hIDwgMSkKKwkJCWdvdG8gbm9fZG1hOwkvKiBETUEgZGlzYWJsZWQgKi8KKwkJaWYgKCgoMSA8PCBkbWEpICYgdGhpc19ib2FyZC0+RE1BYml0cykgPT0gMCkgeworCQkJcnRfcHJpbnRrKCIsIERNQSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRkFJTCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8qIEJhZCBETUEgKi8KKwkJfQorCQlyZXQgPSByZXF1ZXN0X2RtYShkbWEsICJwY2w4MTgiKTsKKwkJaWYgKHJldCkgeworCQkJcnRfcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgJXUsIEZBSUwhXG4iLCBkbWEpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogRE1BIGlzbid0IGZyZWUgKi8KKwkJfQorCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCXJ0X3ByaW50aygiLCBkbWE9JXUiLCBkbWEpOworCQlwYWdlcyA9IDI7CS8qIHdlIG5lZWQgMTZLQiAqLworCQlkZXZwcml2LT5kbWFidWZbMF0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlswXSkgeworCQkJcnRfcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CisJCQkvKiBtYXliZSBleHBlcmltZW50IHdpdGggdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aWxsIGhlbHAgLi4uLiAqLworCQkJcmV0dXJuIC1FQlVTWTsJLyogbm8gYnVmZmVyIDotKCAqLworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzBdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzBdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMF0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMF0gPSAoMSA8PCBwYWdlcykgKiBQQUdFX1NJWkU7CisJCS8vcnRfcHJpbnRrKCIlZCAlZCAlbGQsICIsZGV2cHJpdi0+ZG1hcGFnZXNbMF0sZGV2cHJpdi0+aHdkbWFzaXplWzBdLFBBR0VfU0laRSk7CisJCWlmIChkZXZwcml2LT5kbWFfcnRjID09IDApIHsJLy8gd2UgbXVzdCBkbyBkdWJsZSBidWZmIDotKAorCQkJZGV2cHJpdi0+ZG1hYnVmWzFdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKKwkJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzFdKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciwgRkFJTCFcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQlkZXZwcml2LT5kbWFwYWdlc1sxXSA9IHBhZ2VzOworCQkJZGV2cHJpdi0+aHdkbWFwdHJbMV0gPQorCQkJCXZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+ZG1hYnVmWzFdKTsKKwkJCWRldnByaXYtPmh3ZG1hc2l6ZVsxXSA9ICgxIDw8IHBhZ2VzKSAqIFBBR0VfU0laRTsKKwkJfQorCX0KKworICAgICAgbm9fZG1hOgorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWlmICghdGhpc19ib2FyZC0+bl9haWNoYW5fc2UpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCWRldnByaXYtPnN1Yl9haSA9IHM7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJaWYgKGNoZWNrX3NpbmdsZV9lbmRlZChkZXYtPmlvYmFzZSkpIHsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuX3NlOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DT01NT04gfCBTREZfR1JPVU5EOworCQkJcHJpbnRrKCIsICVkY2hhbnMgUy5FLiBEQUMiLCBzLT5uX2NoYW4pOworCQl9IGVsc2UgeworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW5fZGlmZjsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJCXByaW50aygiLCAlZGNoYW5zIERJRkYgREFDIiwgcy0+bl9jaGFuKTsKKwkJfQorCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gcy0+bl9jaGFuOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmFpX3JhbmdlX3R5cGU7CisJCXMtPmNhbmNlbCA9IHBjbDgxOF9haV9jYW5jZWw7CisJCXMtPmluc25fcmVhZCA9IHBjbDgxOF9haV9pbnNuX3JlYWQ7CisJCWlmICgoaXJxKSB8fCAoZGV2cHJpdi0+ZG1hX3J0YykpIHsKKwkJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJCXMtPmRvX2NtZHRlc3QgPSBhaV9jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gYWlfY21kOworCQl9CisJCWlmICh0aGlzX2JvYXJkLT5pc184MTgpIHsKKwkJCWlmICgoaXQtPm9wdGlvbnNbNF0gPT0gMSkgfHwgKGl0LT5vcHRpb25zWzRdID09IDEwKSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2w4MThsX2hfYWk7CS8vIHNlY29uZGFyeSByYW5nZSBsaXN0IGp1bXBlciBzZWxlY3RhYmxlCisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGl0LT5vcHRpb25zWzRdKSB7CisJCQljYXNlIDA6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIyXzU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfYmlwb2xhcjE7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfYmlwb2xhcjBfNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJY2FzZSA3OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZTcxOF91bmlwb2xhcjI7CisJCQkJYnJlYWs7CisJCQljYXNlIDk6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfdW5pcG9sYXIxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKCF0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5hb19tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5hb19yYW5nZV90eXBlOworCQlzLT5pbnNuX3JlYWQgPSBwY2w4MThfYW9faW5zbl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gcGNsODE4X2FvX2luc25fd3JpdGU7CisjaWZkZWYgdW51c2VkCisjaWZkZWYgUENMODE4X01PREUxM19BTworCQlpZiAoaXJxKSB7CisJCQlzLT50cmlnWzFdID0gcGNsODE4X2FvX21vZGUxOworCQkJcy0+dHJpZ1szXSA9IHBjbDgxOF9hb19tb2RlMzsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxOCkgeworCQkJaWYgKChpdC0+b3B0aW9uc1s0XSA9PSAxKSB8fCAoaXQtPm9wdGlvbnNbNF0gPT0gMTApKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlpZiAoaXQtPm9wdGlvbnNbNF0gPT0gMikKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQl9IGVsc2UgeworCQkJaWYgKChpdC0+b3B0aW9uc1s1XSA9PSAxKSB8fCAoaXQtPm9wdGlvbnNbNV0gPT0gMTApKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlpZiAoaXQtPm9wdGlvbnNbNV0gPT0gMikKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQl9CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJaWYgKCF0aGlzX2JvYXJkLT5uX2RpY2hhbikgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBwY2w4MThfZGlfaW5zbl9iaXRzOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCWlmICghdGhpc19ib2FyZC0+bl9kb2NoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gcGNsODE4X2RvX2luc25fYml0czsKKwl9CisKKwkvKiBzZWxlY3QgMS8xME1IeiBvc2NpbGF0b3IgKi8KKwlpZiAoKGl0LT5vcHRpb25zWzNdID09IDApIHx8IChpdC0+b3B0aW9uc1szXSA9PSAxMCkpIHsKKwkJZGV2cHJpdi0+aTgyNTNfb3NjX2Jhc2UgPSAxMDA7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aTgyNTNfb3NjX2Jhc2UgPSAxMDAwOworCX0KKworCS8qIG1heCBzYW1wbGluZyBzcGVlZCAqLworCWRldnByaXYtPm5zX21pbiA9IHRoaXNfYm9hcmQtPm5zX21pbjsKKworCWlmICghdGhpc19ib2FyZC0+aXNfODE4KSB7CisJCWlmICgoaXQtPm9wdGlvbnNbNl0gPT0gMSkgfHwgKGl0LT5vcHRpb25zWzZdID09IDEwMCkpCisJCQlkZXZwcml2LT5uc19taW4gPSAxMDAwMDsJLyogZXh0ZW5kZWQgUENMNzE4IHRvIDEwMGtIeiBEQUMgKi8KKwl9CisKKwlwY2w4MThfcmVzZXQoZGV2KTsKKworCXJ0X3ByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFJlbW92ZXMgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgcGNsODE4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvLyAgcnRfcHJpbnRrKCJjb21lZGklZDogcGNsODE4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWZyZWVfcmVzb3VyY2VzKGRldik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkM2EwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY203MjQuYworCisgICAgRHJldyBDc2lsbGFnIDxkcmV3X2NzaWxsYWdAeWFob28uY29tPgorCisgICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZDoKKyAgICAgY2FyZDogICBQQ00tMzcyNAorICAgICBkcml2ZXI6IHBjbTM3MjQKKworICAgIE9wdGlvbnMgZm9yIFBDTS0zNzI0CisgICAgIFswXSAtIElPIEJhc2UKKyovCisvKgorRHJpdmVyOiBwY20zNzI0CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTS0zNzI0CitBdXRob3I6IERyZXcgQ3NpbGxhZyA8ZHJld19jc2lsbGFnQHlhaG9vLmNvbT4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTS0zNzI0IChwY203MjQpCitTdGF0dXM6IHRlc3RlZAorCitUaGlzIGlzIGRyaXZlciBmb3IgZGlnaXRhbCBJL08gYm9hcmRzIFBDTS0zNzI0IHdpdGggNDggRElPLgorSXQgbmVlZHMgODI1NS5vIGZvciBvcGVyYXRpb25zIGFuZCBvbmx5IGltbWVkaWF0ZSBtb2RlIGlzIHN1cHBvcnRlZC4KK1NlZSB0aGUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIGRldGFpbHMuCisKK0NvcHkvcGFzdGVkL2hhY2tlZCBmcm9tIHBjbTcyNC5jCisqLworLyoKKyAqIGNoZWNrX2RyaXZlciBvdmVycmlkZXM6CisgKiAgIHN0cnVjdCBjb21lZGlfaW5zbgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNkZWZpbmUgUENNMzcyNF9TSVpFICAgMTYKKyNkZWZpbmUgU0laRV84MjU1CTQKKworI2RlZmluZSBCVUZfQzAgMHgxCisjZGVmaW5lIEJVRl9CMCAweDIKKyNkZWZpbmUgQlVGX0EwIDB4NAorI2RlZmluZSBCVUZfQzEgMHg4CisjZGVmaW5lIEJVRl9CMSAweDEwCisjZGVmaW5lIEJVRl9BMSAweDIwCisKKyNkZWZpbmUgR0FURV9BMCAweDQKKyNkZWZpbmUgR0FURV9CMAkweDIKKyNkZWZpbmUgR0FURV9DMAkweDEKKyNkZWZpbmUgR0FURV9BMQkweDIwCisjZGVmaW5lIEdBVEVfQjEJMHgxMAorI2RlZmluZSBHQVRFX0MxIDB4OAorCisvKiBmcm9tIDgyNTUuYyAqLworI2RlZmluZSBDUl9DVwkJMHg4MAorI2RlZmluZSBfODI1NV9DUiAzCisjZGVmaW5lIENSX0JfSU8JCTB4MDIKKyNkZWZpbmUgQ1JfQl9NT0RFCTB4MDQKKyNkZWZpbmUgQ1JfQ19JTwkgICAgICAgIDB4MDkKKyNkZWZpbmUgQ1JfQV9JTwkJMHgxMAorI2RlZmluZSBDUl9BX01PREUoYSkJKChhKTw8NSkKKyNkZWZpbmUgQ1JfQ1cJCTB4ODAKKworc3RhdGljIGludCBwY20zNzI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbTM3MjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IHBjbTM3MjRfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCisJaW50IGRpbzsJCS8vIG51bSBvZiBESU8KKwlpbnQgbnVtb2Zwb3J0czsJCS8vIG51bSBvZiA4MjU1IHN1YmRldmljZXMKKwl1bnNpZ25lZCBpbnQgSVJRYml0czsJLy8gYWxsb3dlZCBpbnRlcnJ1cHRzCisJdW5zaWduZWQgaW50IGlvX3JhbmdlOwkvLyBsZW4gb2YgSU8gc3BhY2UKK307CisKKy8vdXNlZCB0byB0cmFjayBjb25maWd1cmVkIGRpb3MKK3N0cnVjdCBwcml2X3BjbTM3MjQgeworCWludCBkaW9fMTsKKwlpbnQgZGlvXzI7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbTM3MjRfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicGNtMzcyNCIsIDQ4LCAyLCAweDAwZmMsIFBDTTM3MjRfU0laRSx9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbTM3MjRfYm9hcmQpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbTM3MjRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY20zNzI0ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbTM3MjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbTM3MjRfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbTM3MjRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbTM3MjRfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY20zNzI0KTsKKworLy8gICAgICAgICAgKHNldHEgYy1iYXNpYy1vZmZzZXQgOCkKKworc3RhdGljIGludCBzdWJkZXZfODI1NV9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gYXJnOworCXVuc2lnbmVkIGNoYXIgaW5icmVzOworCS8vcHJpbnRrKCI4MjU1Y2IgJWQgJWQgJWQgJWx4XG4iLCBkaXIscG9ydCxkYXRhLGFyZyk7CisJaWYgKGRpcikgeworCQkvL3ByaW50aygiODI1NSBjYiAgIG91dGIoJXgsICVseClcbiIsIGRhdGEsIGlvYmFzZStwb3J0KTsKKwkJb3V0YihkYXRhLCBpb2Jhc2UgKyBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaW5icmVzID0gaW5iKGlvYmFzZSArIHBvcnQpOworCQkvL3ByaW50aygiODI1NSBjYiAgIGluYiglbHgpID0gJXhcbiIsIGlvYmFzZStwb3J0LCBpbmJyZXMpOworCQlyZXR1cm4gaW5icmVzOworCX0KK30KKworc3RhdGljIGludCBjb21wdXRlX2J1ZmZlcihpbnQgY29uZmlnLCBpbnQgZGV2bm8sIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiAxIGluIGlvX2JpdHMgaW5kaWNhdGVzIG91dHB1dCAqLworCWlmIChzLT5pb19iaXRzICYgMHgwMDAwZmYpIHsKKwkJaWYgKGRldm5vID09IDApIHsKKwkJCWNvbmZpZyB8PSBCVUZfQTA7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gQlVGX0ExOworCQl9CisJfQorCWlmIChzLT5pb19iaXRzICYgMHgwMGZmMDApIHsKKwkJaWYgKGRldm5vID09IDApIHsKKwkJCWNvbmZpZyB8PSBCVUZfQjA7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gQlVGX0IxOworCQl9CisJfQorCWlmIChzLT5pb19iaXRzICYgMHhmZjAwMDApIHsKKwkJaWYgKGRldm5vID09IDApIHsKKwkJCWNvbmZpZyB8PSBCVUZfQzA7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gQlVGX0MxOworCQl9CisJfQorCXJldHVybiBjb25maWc7Cit9CisKK3N0YXRpYyB2b2lkIGRvXzM3MjRfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IGNoYW5zcGVjKQoreworCWludCBjb25maWc7CisJaW50IGJ1ZmZlcl9jb25maWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzgyNTVfY2ZnOworCisJY29uZmlnID0gQ1JfQ1c7CisJYnVmZmVyX2NvbmZpZyA9IDA7CisKKwkvKiAxIGluIGlvX2JpdHMgaW5kaWNhdGVzIG91dHB1dCwgMSBpbiBjb25maWcgaW5kaWNhdGVzIGlucHV0ICovCisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDAwMGZmKSkgeworCQljb25maWcgfD0gQ1JfQV9JTzsKKwl9CisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDBmZjAwKSkgeworCQljb25maWcgfD0gQ1JfQl9JTzsKKwl9CisJaWYgKCEocy0+aW9fYml0cyAmIDB4ZmYwMDAwKSkgeworCQljb25maWcgfD0gQ1JfQ19JTzsKKwl9CisKKwlidWZmZXJfY29uZmlnID0gY29tcHV0ZV9idWZmZXIoMCwgMCwgZGV2LT5zdWJkZXZpY2VzKTsKKwlidWZmZXJfY29uZmlnID0gY29tcHV0ZV9idWZmZXIoYnVmZmVyX2NvbmZpZywgMSwgKGRldi0+c3ViZGV2aWNlcykgKyAxKTsKKworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykgeworCQlwb3J0XzgyNTVfY2ZnID0gZGV2LT5pb2Jhc2UgKyBfODI1NV9DUjsKKwl9IGVsc2UgeworCQlwb3J0XzgyNTVfY2ZnID0gZGV2LT5pb2Jhc2UgKyBTSVpFXzgyNTUgKyBfODI1NV9DUjsKKwl9CisJb3V0YihidWZmZXJfY29uZmlnLCBkZXYtPmlvYmFzZSArIDgpOwkvKiB1cGRhdGUgYnVmZmVyIHJlZ2lzdGVyICovCisJLy9wcmludGsoInBjbTM3MjQgYnVmZmVyX2NvbmZpZyAoJWx4KSAlZCwgJXhcbiIsIGRldi0+aW9iYXNlICsgXzgyNTVfQ1IsIGNoYW5zcGVjLCBidWZmZXJfY29uZmlnKTsKKwlvdXRiKGNvbmZpZywgcG9ydF84MjU1X2NmZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9jaGFuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCBjaGFuc3BlYykKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgZ2F0ZWNmZzsKKwlzdHJ1Y3QgcHJpdl9wY20zNzI0ICpwcml2OworCisJZ2F0ZWNmZyA9IDA7CisJcHJpdiA9IChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopIChkZXYtPnByaXZhdGUpOworCisJbWFzayA9IDEgPDwgQ1JfQ0hBTihjaGFuc3BlYyk7CisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzKSB7CS8vIHN1YmRldiAwCisJCXByaXYtPmRpb18xIHw9IG1hc2s7CisJfSBlbHNlIHsJCS8vc3ViZGV2IDEKKwkJcHJpdi0+ZGlvXzIgfD0gbWFzazsKKwl9CisJaWYgKHByaXYtPmRpb18xICYgMHhmZjAwMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0MwOworCX0KKwlpZiAocHJpdi0+ZGlvXzEgJiAweGZmMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0IwOworCX0KKwlpZiAocHJpdi0+ZGlvXzEgJiAweGZmKSB7CisJCWdhdGVjZmcgfD0gR0FURV9BMDsKKwl9CisJaWYgKHByaXYtPmRpb18yICYgMHhmZjAwMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0MxOworCX0KKwlpZiAocHJpdi0+ZGlvXzIgJiAweGZmMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0IxOworCX0KKwlpZiAocHJpdi0+ZGlvXzIgJiAweGZmKSB7CisJCWdhdGVjZmcgfD0gR0FURV9BMTsKKwl9CisJLy8gICAgICBwcmludGsoImdhdGUgY29udHJvbCAleFxuIiwgZ2F0ZWNmZyk7CisJb3V0YihnYXRlY2ZnLCBkZXYtPmlvYmFzZSArIDkpOworfQorCisvKiBvdmVycmlkaW5nIHRoZSA4MjU1IGluc24gY29uZmlnICovCitzdGF0aWMgaW50IHN1YmRldl8zNzI0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChtYXNrICYgMHgwMDAwZmYpIHsKKwkJYml0cyA9IDB4MDAwMGZmOworCX0gZWxzZSBpZiAobWFzayAmIDB4MDBmZjAwKSB7CisJCWJpdHMgPSAweDAwZmYwMDsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDBmMDAwMCkgeworCQliaXRzID0gMHgwZjAwMDA7CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4ZjAwMDAwOworCX0KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5iaXRzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIGJpdHMpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvXzM3MjRfY29uZmlnKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMpOworCWVuYWJsZV9jaGFuKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjbTM3MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpb3JhbmdlOworCWludCByZXQsIGksIG5fc3ViZGV2aWNlczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHByaXZfcGNtMzcyNCkpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJKChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopIChkZXYtPnByaXZhdGUpKS0+ZGlvXzEgPSAwOworCSgoc3RydWN0IHByaXZfcGNtMzcyNCAqKSAoZGV2LT5wcml2YXRlKSktPmRpb18yID0gMDsKKworCXByaW50aygiY29tZWRpJWQ6IHBjbTM3MjQ6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbTM3MjQiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlwcmludGsoIlxuIik7CisKKwluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5udW1vZnBvcnRzOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGksIHN1YmRldl84MjU1X2NiLAorCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgU0laRV84MjU1ICogaSkpOworCQkoKGRldi0+c3ViZGV2aWNlcykgKyBpKS0+aW5zbl9jb25maWcgPSBzdWJkZXZfMzcyNF9pbnNuX2NvbmZpZzsKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbTM3MjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOworCQl9CisJfQorCWlmIChkZXYtPmlvYmFzZSkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlNTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9wY20zNzMwLmMKKyAqIERyaXZlciBmb3IgUENNMzczMCBhbmQgY2xvbmVzCisgKiBCbGFpbmUgTGVlCisgKiBmcm9tIHBjbDcyNSBieSBEYXZpZCBTLgorICovCisvKgorRHJpdmVyOiBwY20zNzMwCitEZXNjcmlwdGlvbjogUENNMzczMAorQXV0aG9yOiBCbGFpbmUgTGVlCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ00tMzczMCAocGNtMzczMCkKK1N0YXR1czogdW5rbm93bgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFBDTTM3MzBfU0laRSA0CQkvLyBjb25zZWN1dGl2ZSBpbyBwb3J0IGFkZHJlc3NlcworCisjZGVmaW5lIFBDTTM3MzBfRE9BIDAJCS8vIG9mZnNldHMgZm9yIGVhY2ggcG9ydAorI2RlZmluZSBQQ00zNzMwX0RPQiAyCisjZGVmaW5lIFBDTTM3MzBfRE9DIDMKKyNkZWZpbmUgUENNMzczMF9ESUEgMAorI2RlZmluZSBQQ00zNzMwX0RJQiAyCisjZGVmaW5lIFBDTTM3MzBfRElDIDMKKworc3RhdGljIGludCBwY20zNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbTM3MzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNtMzczMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY20zNzMwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY20zNzMwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY20zNzMwX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNtMzczMCk7CisKK3N0YXRpYyBpbnQgcGNtMzczMF9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKShzLT5wcml2YXRlKSk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbTM3MzBfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpKHMtPnByaXZhdGUpKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY20zNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbTM3MzA6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENNMzczMF9TSVpFLCAicGNtMzczMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gInBjbTM3MzAiOworCWRldi0+aW9iYXNlID0gZGV2LT5pb2Jhc2U7CisJZGV2LT5pcnEgPSAwOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA2KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbTM3MzBfZG9faW5zbl9iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ET0E7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNtMzczMF9kb19pbnNuX2JpdHM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RPQjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY20zNzMwX2RvX2luc25fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTTM3MzBfRE9DOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbTM3MzBfZGlfaW5zbl9iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ESUE7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNtMzczMF9kaV9pbnNuX2JpdHM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RJQjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY20zNzMwX2RpX2luc25fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTTM3MzBfRElDOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtMzczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNtMzczMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTTM3MzBfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYTczZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BjbWFkLmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIFdpbnN5c3RlbXMgUENNLUEvRDEyIGFuZCBQQ00tQS9EMTYKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogcGNtYWQKK0Rlc2NyaXB0aW9uOiBXaW5zeXN0ZW1zIFBDTS1BL0QxMiwgUENNLUEvRDE2CitBdXRob3I6IGRzCitEZXZpY2VzOiBbV2luc3lzdGVtc10gUENNLUEvRDEyIChwY21hZDEyKSwgUENNLUEvRDE2IChwY21hZDE2KQorU3RhdHVzOiB1bnRlc3RlZAorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiBvbiBhIGJldCB0aGF0IEkgY291bGRuJ3Qgd3JpdGUgYSBkcml2ZXIKK2luIGxlc3MgdGhhbiAyIGhvdXJzLiAgSSB3b24gdGhlIGJldCwgYnV0IG5ldmVyIGdvdCBwYWlkLiAgPSgKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlCisgIFsxXSAtIHVudXNlZAorICBbMl0gLSBBbmFsb2cgaW5wdXQgcmVmZXJlbmNlCisgICAgICAgICAgMCA9IHNpbmdsZSBlbmRlZAorICAgICAgICAgIDEgPSBkaWZmZXJlbnRpYWwKKyAgWzNdIC0gQW5hbG9nIGlucHV0IGVuY29kaW5nIChtdXN0IG1hdGNoIGp1bXBlcnMpCisgICAgICAgICAgMCA9IHN0cmFpZ2h0IGJpbmFyeQorICAgICAgICAgIDEgPSB0d28ncyBjb21wbGVtZW50CisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBQQ01BRF9TSVpFCQk0CisKKyNkZWZpbmUgUENNQURfU1RBVFVTCQkwCisjZGVmaW5lIFBDTUFEX0xTQgkJMQorI2RlZmluZSBQQ01BRF9NU0IJCTIKKyNkZWZpbmUgUENNQURfQ09OVkVSVAkJMQorCitzdHJ1Y3QgcGNtYWRfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBuX2FpX2JpdHM7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBwY21hZF9ib2FyZF9zdHJ1Y3QgcGNtYWRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY21hZDEyIiwKKwkgICAgICBuX2FpX2JpdHM6MTIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY21hZDE2IiwKKwkgICAgICBuX2FpX2JpdHM6MTYsCisJCX0sCit9OworCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNtYWRfYm9hcmRfc3RydWN0ICopKGRldi0+Ym9hcmRfcHRyKSkKKyNkZWZpbmUgbl9wY21hZF9ib2FyZHMgKHNpemVvZihwY21hZF9ib2FyZHMpL3NpemVvZihwY21hZF9ib2FyZHNbMF0pKQorCitzdHJ1Y3QgcGNtYWRfcHJpdl9zdHJ1Y3QgeworCWludCBkaWZmZXJlbnRpYWw7CisJaW50IHR3b3NfY29tcDsKK307CisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNtYWRfcHJpdl9zdHJ1Y3QgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgcGNtYWRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNtYWRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNtYWQgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtYWQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbWFkX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY21hZF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZwY21hZF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX3BjbWFkX2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YocGNtYWRfYm9hcmRzWzBdKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNtYWQpOworCisjZGVmaW5lIFRJTUVPVVQJMTAwCisKK3N0YXRpYyBpbnQgcGNtYWRfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKwlpbnQgbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIFBDTUFEX0NPTlZFUlQpOworCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCWlmICgoaW5iKGRldi0+aW9iYXNlICsgUENNQURfU1RBVFVTKSAmIDB4MykgPT0gMHgzKQorCQkJCWJyZWFrOworCQl9CisJCWRhdGFbbl0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ01BRF9MU0IpOworCQlkYXRhW25dIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBQQ01BRF9NU0IpIDw8IDgpOworCisJCWlmIChkZXZwcml2LT50d29zX2NvbXApIHsKKwkJCWRhdGFbbl0gXj0gKDEgPDwgKHRoaXNfYm9hcmQtPm5fYWlfYml0cyAtIDEpKTsKKwkJfQorCX0KKworCXJldHVybiBuOworfQorCisvKgorICogb3B0aW9uczoKKyAqIDAJaS9vIGJhc2UKKyAqIDEJdW51c2VkCisgKiAyCTA9c2luZ2xlIGVuZGVkIDE9ZGlmZmVyZW50aWFsCisgKiAzCTA9c3RyYWlnaHQgYmluYXJ5IDE9dHdvJ3MgY29tcAorICovCitzdGF0aWMgaW50IHBjbWFkX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcGNtYWQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENNQURfU0laRSwgInBjbWFkIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY21hZF9wcml2X3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IEFSRUZfR1JPVU5EOworCXMtPm5fY2hhbiA9IDE2OwkJLyogWFhYICovCisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3JlYWQgPSBwY21hZF9haV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNfYm9hcmQtPm5fYWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21hZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNtYWQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTUFEX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtZGExMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFmZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYwpAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY21kYTEyLmMKKyAgICBEcml2ZXIgZm9yIFdpbnN5c3RlbXMgUEMtMTA0IGJhc2VkIFBDTS1EL0EtMTIgOC1jaGFubmVsIEFPIGJvYXJkLgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwNiBDYWxpbiBBLiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBwY21kYTEyCitEZXNjcmlwdGlvbjogQSBkcml2ZXIgZm9yIHRoZSBXaW5zeXN0ZW1zIFBDTS1EL0EtMTIKK0RldmljZXM6IFtXaW5zeXN0ZW1zXSBQQ00tRC9BLTEyIChwY21kYTEyKQorQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CitVcGRhdGVkOiBGcmksIDEzIEphbiAyMDA2IDEyOjAxOjAxIC0wNTAwCitTdGF0dXM6IHdvcmtzCisKK0EgZHJpdmVyIGZvciB0aGUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQtdG8tcHJvZ3JhbSBQQ00tRC9BLTEyLgorVGhpcyBib2FyZCBkb2Vzbid0IHN1cHBvcnQgY29tbWFuZHMsIGFuZCB0aGUgb25seSB3YXkgdG8gc2V0IGl0cworYW5hbG9nIG91dHB1dCByYW5nZSBpcyB0byBqdW1wZXIgdGhlIGJvYXJkLiAgQXMgc3VjaCwKK2NvbWVkaV9kYXRhX3dyaXRlKCkgaWdub3JlcyB0aGUgcmFuZ2UgdmFsdWUgc3BlY2lmaWVkLgorCitUaGUgYm9hcmQgdXNlcyAxNiBjb25zZWN1dGl2ZSBJL08gYWRkcmVzc2VzIHN0YXJ0aW5nIGF0IHRoZSBJL08gcG9ydAorYmFzZSBhZGRyZXNzLiAgRWFjaCBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIHRoZSBMU0IgdGhlbiBNU0Igb2YgYQorcGFydGljdWxhciBjaGFubmVsIGZyb20gMC03LgorCitOb3RlIHRoYXQgdGhlIGJvYXJkIGlzIG5vdCBJU0EtUE5QIGNhcGFibGUgYW5kIHRodXMKK25lZWRzIHRoZSBJL08gcG9ydCBjb21lZGlfY29uZmlnIHBhcmFtZXRlci4KKworTm90ZSB0aGF0IHBhc3NpbmcgYSBub256ZXJvIHZhbHVlIGFzIHRoZSBzZWNvbmQgY29uZmlnIG9wdGlvbiB3aWxsCitlbmFibGUgInNpbXVsdGFuZW91cyB4ZmVyIiBtb2RlIGZvciB0aGlzIGJvYXJkLCBpbiB3aGljaCBBTyB3cml0ZXMKK3dpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIGEgc3Vic2VxdWVudCByZWFkIG9mIGFueSBBTyBjaGFubmVsLiAgVGhpcworaXMgc28gdGhhdCBvbmUgY2FuIHNwZWVkIHVwIHByb2dyYW1taW5nIGJ5IHByZWxvYWRpbmcgYWxsIEFPIHJlZ2lzdGVycword2l0aCB2YWx1ZXMgYmVmb3JlIHNpbXVsdGFuZW91c2x5IHNldHRpbmcgdGhlbSB0byB0YWtlIGVmZmVjdCB3aXRoIG9uZQorcmVhZCBjb21tYW5kLgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBEbyBTaW11bHRhbmVvdXMgWGZlciAoc2VlIGRlc2NyaXB0aW9uKQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBmb3IgUENJIGRldmljZXMgKi8KKworI2RlZmluZSBNSU4oYSxiKSAoICgoYSkgPCAoYikpID8gKGEpIDogKGIpICkKKyNkZWZpbmUgU0RFVl9OTyAoKGludCkocyAtIGRldi0+c3ViZGV2aWNlcykpCisjZGVmaW5lIENIQU5TIDgKKyNkZWZpbmUgSU9TSVpFIDE2CisjZGVmaW5lIExTQih4KSAoKHVuc2lnbmVkIGNoYXIpKCh4KSAmIDB4ZmYpKQorI2RlZmluZSBNU0IoeCkgKCh1bnNpZ25lZCBjaGFyKSgoKCh1bnNpZ25lZCBzaG9ydCkoeCkpPj44KSAmIDB4ZmYpKQorI2RlZmluZSBMU0JfUE9SVChjaGFuKSAoZGV2LT5pb2Jhc2UgKyAoY2hhbikqMikKKyNkZWZpbmUgTVNCX1BPUlQoY2hhbikgKExTQl9QT1JUKGNoYW4pKzEpCisjZGVmaW5lIEJJVFMgMTIKKworLyoKKyAqIEJvcmRzCisgKi8KK3N0cnVjdCBwY21kYTEyX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworLyogbm90ZSB0aGVzZSBoYXZlIG5vIGVmZmVjdCBhbmQgYXJlIG1lcmVseSBoZXJlIGZvciByZWZlcmVuY2UuLgorICAgdGhlc2UgYXJlIGNvbmZpZ3VyZWQgYnkganVtcGVyaW5nIHRoZSBib2FyZCEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBwY21kYTEyX3JhbmdlcyA9IHsKKwkzLAorCXsKKwkJCVVOSV9SQU5HRSg1KSwgVU5JX1JBTkdFKDEwKSwgQklQX1JBTkdFKDUpCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNtZGExMl9ib2FyZCBwY21kYTEyX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNtZGExMiIsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwY21kYTEyX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBwY21kYTEyX3ByaXZhdGUgeworCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrW0NIQU5TXTsKKwlpbnQgc2ltdWx0YW5lb3VzX3hmZXJfbW9kZTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbWRhMTJfcHJpdmF0ZSAqKShkZXYtPnByaXZhdGUpKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY21kYTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbWRhMTJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHZvaWQgemVyb19jaGFucyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtZGExMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNtZGExMl9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNtZGExMl9kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjbWRhMTJfYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisgICAgICBib2FyZF9uYW1lOiZwY21kYTEyX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNtZGExMl9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjbWRhMTJfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNtZGExMl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGFvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwY21kYTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICVzICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlLCBpdC0+b3B0aW9uc1sxXSA/ICJzaW11bHRhbmVvdXMgeGZlciBtb2RlIGVuYWJsZWQiIDogIiIpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIElPU0laRSwgZHJpdmVyLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjbWRhMTJfcHJpdmF0ZSkpIDwgMCkgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2cHJpdi0+c2ltdWx0YW5lb3VzX3hmZXJfbW9kZSA9IGl0LT5vcHRpb25zWzFdOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqCisJICogQWxsb2NhdGUgMiBzdWJkZXZzICgzMiArIDE2IERJTyBsaW5lcykgb3IgMyAzMiBESU8gc3ViZGV2cyBmb3IgdGhlCisJICogOTYtY2hhbm5lbCB2ZXJzaW9uIG9mIHRoZSBib2FyZC4KKwkgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwlzLT5wcml2YXRlID0gTlVMTDsKKwlzLT5tYXhkYXRhID0gKDB4MSA8PCBCSVRTKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcGNtZGExMl9yYW5nZXM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSBDSEFOUzsKKwlzLT5pbnNuX3dyaXRlID0gJmFvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZhb19yaW5zbjsKKworCXplcm9fY2hhbnMoZGV2KTsJLyogY2xlYXIgb3V0IGFsbCB0aGUgcmVnaXN0ZXJzLCBiYXNpY2FsbHkgKi8KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNtZGExMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwgZHJpdmVyLmRyaXZlcl9uYW1lKTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBJT1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB6ZXJvX2NoYW5zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQorewkJCQkvKiBzZXRzIHVwIGFuCisJCQkJICAgQVNJQyBjaGlwIHRvIGRlZmF1bHRzICovCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENIQU5TOyArK2kpIHsKKy8qICAgICAgL1wqIGRvIHRoaXMgYXMgb25lIGluc3RydWN0aW9uPz8gKlwvICovCisvKiAgICAgIG91dHcoMCwgTFNCX1BPUlQoY2hhbikpOyAqLworCQlvdXRiKDAsIExTQl9QT1JUKGkpKTsKKwkJb3V0YigwLCBNU0JfUE9SVChpKSk7CisJfQorCWluYihMU0JfUE9SVCgwKSk7CS8qIHVwZGF0ZSBjaGFucy4gKi8KK30KKworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47ICsraSkgeworCisvKiAgICAgIC9cKiBkbyB0aGlzIGFzIG9uZSBpbnN0cnVjdGlvbj8/ICpcLyAqLworLyogICAgICBvdXR3KGRhdGFbaV0sIExTQl9QT1JUKGNoYW4pKTsgKi8KKworCQkvKiBOZWVkIHRvIGRvIHRoaXMgYXMgdHdvIGluc3RydWN0aW9ucyBkdWUgdG8gOC1iaXQgYnVzPz8gKi8KKwkJLyogIGZpcnN0LCBsb2FkIHRoZSBsb3cgYnl0ZSAqLworCQlvdXRiKExTQihkYXRhW2ldKSwgTFNCX1BPUlQoY2hhbikpOworCQkvKiAgbmV4dCwgd3JpdGUgdGhlIGhpZ2ggYnl0ZSAqLworCQlvdXRiKE1TQihkYXRhW2ldKSwgTVNCX1BPUlQoY2hhbikpOworCisJCS8qIHNhdmUgc2hhZG93IHJlZ2lzdGVyICovCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKworCQlpZiAoIWRldnByaXYtPnNpbXVsdGFuZW91c194ZmVyX21vZGUpCisJCQlpbmIoTFNCX1BPUlQoY2hhbikpOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorCisgICBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LT5hb19yZWFkYmFjay4KKyAgIEhvd2V2ZXIsIHNpbmNlIHRoaXMgZHJpdmVyIHN1cHBvcnRzIHNpbXVsdGFuZW91cyB4ZmVyIHRoZW4gc29tZXRpbWVzCisgICB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGFjY29tcGxpc2hlcyB3b3JrLgorCisgICBTaW11bHRhbmVhb3VzIHhmZXIgbW9kZSBpcyBhY2NvbXBsaXNoZWQgYnkgbG9hZGluZyBBTEwgdGhlIHZhbHVlcworICAgeW91IHdhbnQgZm9yIEFPIGluIGFsbCB0aGUgY2hhbm5lbHMsIHRoZW4gUkVBRGluZyBvZmYgb25lIG9mIHRoZSBBTworICAgcmVnaXN0ZXJzIHRvIGluaXRpYXRlIHRoZSBpbnN0YW50YW5lb3VzIHNpbXVsdGFuZW91cyB1cGRhdGUgb2YgYWxsCisgICBEQUMgb3V0cHV0cywgd2hpY2ggbWFrZXMgYWxsIEFPIGNoYW5uZWxzIHVwZGF0ZSBzaW11bHRhbmVvdXNseS4KKyAgIFRoaXMgaXMgdXNlZnVsIGZvciBzb21lIGNvbnRyb2wgYXBwbGljYXRpb25zLCBJIHdvdWxkIGltYWdpbmUuCisqLworc3RhdGljIGludCBhb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJaWYgKGRldnByaXYtPnNpbXVsdGFuZW91c194ZmVyX21vZGUpCisJCQlpbmIoTFNCX1BPUlQoY2hhbikpOworCQkvKiByZWFkIGJhY2sgc2hhZG93IHJlZ2lzdGVyICovCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlNDBmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwpAQCAtMCwwICsxLDEzMzMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKKyAgICBEcml2ZXIgZm9yIFdpbnN5c3RlbXMgUEMtMTA0IGJhc2VkIG11bHRpZnVuY3Rpb24gSU8gYm9hcmQuCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDA3IENhbGluIEEuIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IHBjbW1pbworRGVzY3JpcHRpb246IEEgZHJpdmVyIGZvciB0aGUgUENNLU1JTyBtdWx0aWZ1bmN0aW9uIGJvYXJkCitEZXZpY2VzOiBbV2luc3lzdGVtc10gUENNLU1JTyAocGNtbWlvKQorQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CitVcGRhdGVkOiBXZWQsIE1heSAxNiAyMDA3IDE2OjIxOjEwIC0wNTAwCitTdGF0dXM6IHdvcmtzCisKK0EgZHJpdmVyIGZvciB0aGUgcmVsYXRpdmVseSBuZXcgUENNLU1JTyBtdWx0aWZ1bmN0aW9uIGJvYXJkIGZyb20KK1dpbnN5c3RlbXMuICBUaGlzIGJvYXJkIGlzIGEgUEMtMTA0IGJhc2VkIEkvTyBib2FyZC4gIEl0IGNvbnRhaW5zCitmb3VyIHN1YmRldmljZXM6CisgIHN1YmRldmljZSAwIC0gMTYgY2hhbm5lbHMgb2YgMTYtYml0IEFJCisgIHN1YmRldmljZSAxIC0gOCBjaGFubmVscyBvZiAxNi1iaXQgQU8KKyAgc3ViZGV2aWNlIDIgLSBmaXJzdCAyNCBjaGFubmVscyBvZiB0aGUgNDggY2hhbm5lbCBvZiBESU8gKHdpdGggZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IHN1cHBvcnQpCisgIHN1YmRldmljZSAzIC0gbGFzdCAyNCBjaGFubmVscyBvZiB0aGUgNDggY2hhbm5lbCBESU8gKG5vIGludGVycnVwdCBzdXBwb3J0IGZvciB0aGlzIGJhbmsgb2YgY2hhbm5lbHMpCisKKyAgU29tZSBub3RlczoKKworICBTeW5jaHJvbm91cyByZWFkcyBhbmQgd3JpdGVzIGFyZSB0aGUgb25seSB0aGluZ3MgaW1wbGVtZW50ZWQgZm9yIEFJIGFuZCBBTywKKyAgZXZlbiB0aG91Z2ggdGhlIGhhcmR3YXJlIGl0c2VsZiBjYW4gZG8gc3RyZWFtaW5nIGFjcXVpc2l0aW9uLCBldGMuICBBbnlvbmUKKyAgd2FudCB0byBhZGQgYXN5bmNocm9ub3VzIEkvTyBmb3IgQUkvQU8gYXMgYSBmZWF0dXJlPyAgQmUgbXkgZ3Vlc3QuLi4KKworICBBc3luY2hyb25vdXMgSS9PIGZvciB0aGUgRElPIHN1YmRldmljZXMgKmlzKiBpbXBsZW1lbnRlZCwgaG93ZXZlciEgIFRoZXkgYXJlCisgIGJhc2ljYWxseSBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGZvciBhbnkgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlyc3QKKyAgMjQgRElPLWxpbmVzLgorCisgIEFsc28gbm90ZSB0aGF0IHRoaXMgaW50ZXJydXB0IHN1cHBvcnQgaXMgdW50ZXN0ZWQuCisKKyAgQSBmZXcgd29yZHMgYWJvdXQgZWRnZS1kZXRlY3Rpb24gSVJRIHN1cHBvcnQgKGNvbW1hbmRzIG9uIERJTyk6CisKKyAgKiBUbyB1c2UgZWRnZS1kZXRlY3Rpb24gSVJRIHN1cHBvcnQgZm9yIHRoZSBESU8gc3ViZGV2aWNlLCBwYXNzIHRoZSBJUlEKKyAgICBvZiB0aGUgYm9hcmQgdG8gdGhlIGNvbWVkaV9jb25maWcgY29tbWFuZC4gIFRoZSBib2FyZCBJUlEgaXMgbm90IGp1bXBlcmVkCisgICAgYnV0IHJhdGhlciBjb25maWd1cmVkIHRocm91Z2ggc29mdHdhcmUsIHNvIGFueSBJUlEgZnJvbSAxLTE1IGlzIE9LLgorCisgICogRHVlIHRvIHRoZSBnZW5lcmljaXR5IG9mIHRoZSBjb21lZGkgQVBJLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBzcGVjaWFsCisgICAgY29tZWRpX2NvbW1hbmQgaW4gb3JkZXIgdG8gdXNlIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgZm9yIERJTy4KKworICAqIFVzZSBjb21lZGlfY29tbWFuZHMgd2l0aCBUUklHX05PVy4gIFlvdXIgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZWFjaAorICAgIHRpbWUgYW4gZWRnZSBpcyBkZXRlY3RlZCBvbiB0aGUgc3BlY2lmaWVkIERJTyBsaW5lKHMpLCBhbmQgdGhlIGRhdGEKKyAgICB2YWx1ZXMgd2lsbCBiZSB0d28gc2FtcGxlX3Qncywgd2hpY2ggc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBmb3JtCisgICAgb25lIDMyLWJpdCB1bnNpZ25lZCBpbnQuICBUaGlzIHZhbHVlIGlzIHRoZSBtYXNrIG9mIGNoYW5uZWxzIHRoYXQgaGFkCisgICAgZWRnZXMgZGV0ZWN0ZWQgZnJvbSB5b3VyIGNoYW5uZWwgbGlzdC4gIE5vdGUgdGhhdCB0aGUgYml0cyBwb3NpdGlvbnMKKyAgICBpbiB0aGUgbWFzayBjb3JyZXNwb25kIHRvIHBvc2l0aW9ucyBpbiB5b3VyIGNoYW5saXN0IHdoZW4geW91CisgICAgc3BlY2lmaWVkIHRoZSBjb21tYW5kIGFuZCAqbm90KiBjaGFubmVsIGlkJ3MhCisKKyAqICBUbyBzZXQgdGhlIHBvbGFyaXR5IG9mIHRoZSBlZGdlLWRldGVjdGlvbiBpbnRlcnJ1cHRzIHBhc3MgYSBub256ZXJvIHZhbHVlCisgICAgZm9yIGVpdGhlciBDUl9SQU5HRSBvciBDUl9BUkVGIGZvciBlZGdlLXVwIHBvbGFyaXR5LCBvciBhIHplcm8KKyAgICB2YWx1ZSBmb3IgYm90aCBDUl9SQU5HRSBhbmQgQ1JfQVJFRiBpZiB5b3Ugd2FudCBlZGdlLWRvd24gcG9sYXJpdHkuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwgLS0gZm9yIGVkZ2UtZGV0ZWN0IGludGVycnVwdCBzdXBwb3J0IG9ubHksIGxlYXZlIG91dCBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzIGZlYXR1cmUpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBmb3IgUENJIGRldmljZXMgKi8KKworI2RlZmluZSBNSU4oYSxiKSAoICgoYSkgPCAoYikpID8gKGEpIDogKGIpICkKKworLyogVGhpcyBzdHVmZiBpcyBhbGwgZnJvbSBwY211aW8uYyAtLSBpdCByZWZlcnMgdG8gdGhlIERJTyBzdWJkZXZpY2VzIG9ubHkgKi8KKyNkZWZpbmUgQ0hBTlNfUEVSX1BPUlQgICA4CisjZGVmaW5lIFBPUlRTX1BFUl9BU0lDICAgNgorI2RlZmluZSBJTlRSX1BPUlRTX1BFUl9BU0lDICAgMworI2RlZmluZSBNQVhfQ0hBTlNfUEVSX1NVQkRFViAyNAkvKiBudW1iZXIgb2YgY2hhbm5lbHMgcGVyIGNvbWVkaSBzdWJkZXZpY2UgKi8KKyNkZWZpbmUgUE9SVFNfUEVSX1NVQkRFViAoTUFYX0NIQU5TX1BFUl9TVUJERVYvQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIENIQU5TX1BFUl9BU0lDIChDSEFOU19QRVJfUE9SVCpQT1JUU19QRVJfQVNJQykKKyNkZWZpbmUgSU5UUl9DSEFOU19QRVJfQVNJQyAyNAorI2RlZmluZSBJTlRSX1BPUlRTX1BFUl9TVUJERVYgKElOVFJfQ0hBTlNfUEVSX0FTSUMvQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIE1BWF9ESU9fQ0hBTlMgICAoUE9SVFNfUEVSX0FTSUMqMSpDSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgTUFYX0FTSUNTICAgICAgIChNQVhfRElPX0NIQU5TL0NIQU5TX1BFUl9BU0lDKQorI2RlZmluZSBTREVWX05PICgoaW50KShzIC0gZGV2LT5zdWJkZXZpY2VzKSkKKyNkZWZpbmUgQ0FMQ19OX0RJT19TVUJERVZTKG5jaGFucykgKChuY2hhbnMpL01BWF9DSEFOU19QRVJfU1VCREVWICsgKCEhKChuY2hhbnMpJU1BWF9DSEFOU19QRVJfU1VCREVWKSkgLyorIChuY2hhbnMgPiBJTlRSX0NIQU5TX1BFUl9BU0lDID8gMiA6IDEpKi8pCisvKiBJTyBNZW1vcnkgc2l6ZXMgKi8KKyNkZWZpbmUgQVNJQ19JT1NJWkUgKDB4MEIpCisjZGVmaW5lIFBDTU1JTzQ4X0lPU0laRSBBU0lDX0lPU0laRQorCisvKiBTb21lIG9mZnNldHMgLSB0aGVzZSBhcmUgYWxsIGluIHRoZSAxNmJ5dGUgSU8gbWVtb3J5IG9mZnNldCBmcm9tCisgICB0aGUgYmFzZSBhZGRyZXNzLiAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgcGFnaW5nIHNjaGVtZSB0byBzd2FwIG91dAorICAgb2Zmc2V0cyAweDgtMHhBIHVzaW5nIHRoZSBQQUdFTE9DSyByZWdpc3Rlci4gIFNlZSB0aGUgdGFibGUgYmVsb3cuCisKKyAgUmVnaXN0ZXIocykgICAgICAgUGFnZXMgICAgICAgIFIvVz8gICAgICAgIERlc2NyaXB0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJFR19QT1JUeCAgICAgICAgIEFsbCAgICAgICAgICBSL1cgICAgICAgICBSZWFkL1dyaXRlL0NvbmZpZ3VyZSBJTworICBSRUdfSU5UX1BFTkRJTkcgICBBbGwgICAgICAgICAgUmVhZE9ubHkgICAgUXVpY2tseSBzZWUgd2hpY2ggSU5UX0lEeCBoYXMgaW50LgorICBSRUdfUEFHRUxPQ0sgICAgICBBbGwgICAgICAgICAgV3JpdGVPbmx5ICAgU2VsZWN0IGEgcGFnZQorICBSRUdfUE9MeCAgICAgICAgICBQZy4gMSBvbmx5ICAgV3JpdGVPbmx5ICAgU2VsZWN0IGVkZ2UtZGV0ZWN0aW9uIHBvbGFyaXR5CisgIFJFR19FTkFCeCAgICAgICAgIFBnLiAyIG9ubHkgICBXcml0ZU9ubHkgICBFbmFibGUvRGlzYWJsZSBlZGdlLWRldGVjdC4gaW50LgorICBSRUdfSU5UX0lEeCAgICAgICBQZy4gMyBvbmx5ICAgUi9XICAgICAgICAgU2VlIHdoaWNoIHBvcnRzL2JpdHMgaGF2ZSBpbnRzLgorICovCisjZGVmaW5lIFJFR19QT1JUMCAweDAKKyNkZWZpbmUgUkVHX1BPUlQxIDB4MQorI2RlZmluZSBSRUdfUE9SVDIgMHgyCisjZGVmaW5lIFJFR19QT1JUMyAweDMKKyNkZWZpbmUgUkVHX1BPUlQ0IDB4NAorI2RlZmluZSBSRUdfUE9SVDUgMHg1CisjZGVmaW5lIFJFR19JTlRfUEVORElORyAweDYKKyNkZWZpbmUgUkVHX1BBR0VMT0NLIDB4NwkvKiBwYWdlIHNlbGVjdG9yIHJlZ2lzdGVyLCB1cHBlciAyIGJpdHMgc2VsZWN0IGEgcGFnZQorCQkJCSAgIGFuZCBiaXRzIDAtNSBhcmUgdXNlZCB0byAnbG9jayBkb3duJyBhIHBhcnRpY3VsYXIKKwkJCQkgICBwb3J0IGFib3ZlIHRvIG1ha2UgaXQgcmVhZG9ubHkuICAqLworI2RlZmluZSBSRUdfUE9MMCAweDgKKyNkZWZpbmUgUkVHX1BPTDEgMHg5CisjZGVmaW5lIFJFR19QT0wyIDB4QQorI2RlZmluZSBSRUdfRU5BQjAgMHg4CisjZGVmaW5lIFJFR19FTkFCMSAweDkKKyNkZWZpbmUgUkVHX0VOQUIyIDB4QQorI2RlZmluZSBSRUdfSU5UX0lEMCAweDgKKyNkZWZpbmUgUkVHX0lOVF9JRDEgMHg5CisjZGVmaW5lIFJFR19JTlRfSUQyIDB4QQorCisjZGVmaW5lIE5VTV9QQUdFRF9SRUdTIDMKKyNkZWZpbmUgTlVNX1BBR0VTIDQKKyNkZWZpbmUgRklSU1RfUEFHRURfUkVHIDB4OAorI2RlZmluZSBSRUdfUEFHRV9CSVRPRkZTRVQgNgorI2RlZmluZSBSRUdfTE9DS19CSVRPRkZTRVQgMAorI2RlZmluZSBSRUdfUEFHRV9NQVNLICh+KCgweDE8PFJFR19QQUdFX0JJVE9GRlNFVCktMSkpCisjZGVmaW5lIFJFR19MT0NLX01BU0sgfihSRUdfUEFHRV9NQVNLKQorI2RlZmluZSBQQUdFX1BPTCAxCisjZGVmaW5lIFBBR0VfRU5BQiAyCisjZGVmaW5lIFBBR0VfSU5UX0lEIDMKKwordHlwZWRlZiBpbnQgKCpjb21lZGlfaW5zbl9mbl90KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiwgdW5zaWduZWQgaW50ICopOworCitzdGF0aWMgaW50IGFpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCXVuc2lnbmVkIGludCAqKTsKK3N0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJdW5zaWduZWQgaW50ICopOworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwl1bnNpZ25lZCBpbnQgKik7CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgcGNtbWlvX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGludCBkaW9fbnVtX2FzaWNzOworCWNvbnN0IGludCBkaW9fbnVtX3BvcnRzOworCWNvbnN0IGludCB0b3RhbF9pb3NpemU7CisJY29uc3QgaW50IGFpX2JpdHM7CisJY29uc3QgaW50IGFvX2JpdHM7CisJY29uc3QgaW50IG5fYWlfY2hhbnM7CisJY29uc3QgaW50IG5fYW9fY2hhbnM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX3RhYmxlLCAqYW9fcmFuZ2VfdGFibGU7CisJY29tZWRpX2luc25fZm5fdCBhaV9yaW5zbiwgYW9fcmluc24sIGFvX3dpbnNuOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlc19haSA9CisJeyA0LCB7UkFOR0UoLTUuLCA1LiksIFJBTkdFKC0xMC4sIDEwLiksIFJBTkdFKDAuLCA1LiksIFJBTkdFKDAuLAorCQkxMC4pfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlc19hbyA9CisJeyA2LCB7UkFOR0UoMC4sIDUuKSwgUkFOR0UoMC4sIDEwLiksIFJBTkdFKC01LiwgNS4pLCBSQU5HRSgtMTAuLCAxMC4pLAorCVJBTkdFKC0yLjUsIDIuNSksIFJBTkdFKC0yLjUsIDcuNSl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbW1pb19ib2FyZCBwY21taW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY21taW8iLAorCSAgICAgIGRpb19udW1fYXNpY3M6MSwKKwkgICAgICBkaW9fbnVtX3BvcnRzOjYsCisJICAgICAgdG90YWxfaW9zaXplOjMyLAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIG5fYWlfY2hhbnM6MTYsCisJICAgICAgbl9hb19jaGFuczo4LAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZXNfYWksCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JnJhbmdlc19hbywKKwkgICAgICBhaV9yaW5zbjphaV9yaW5zbiwKKwkgICAgICBhb19yaW5zbjphb19yaW5zbiwKKyAgICAgIGFvX3dpbnNuOmFvX3dpbnNufSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbW1pb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBzdWJkZXZpY2UuICAqLworc3RydWN0IHBjbW1pb19zdWJkZXZfcHJpdmF0ZSB7CisKKwl1bmlvbiB7CisJCS8qIGZvciBESU86IG1hcHBpbmcgb2YgaGFsZndvcmRzIChieXRlcykgaW4gcG9ydC9jaGFuYXJyYXkgdG8gaW9iYXNlICovCisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlc1tQT1JUU19QRVJfU1VCREVWXTsKKworCQkvKiBmb3IgQUkvQU8gKi8KKwkJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJfTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisKKwkJCS8qIFRoZSBiZWxvdyBpcyBvbmx5IHVzZWQgZm9yIGludHIgc3ViZGV2aWNlcyAqLworCQkJc3RydWN0IHsKKwkJCQlpbnQgYXNpYzsJLyogaWYgbm9uLW5lZ2F0aXZlLCB0aGlzIHN1YmRldiBoYXMgYW4gaW50ZXJydXB0IGFzaWMgKi8KKwkJCQlpbnQgZmlyc3RfY2hhbjsJLyogaWYgbm9ubmVnYXRpdmUsIHRoZSBmaXJzdCBjaGFubmVsIGlkIGZvcgorCQkJCQkJICAgaW50ZXJydXB0cy4gKi8KKwkJCQlpbnQgbnVtX2FzaWNfY2hhbnM7CS8qIHRoZSBudW1iZXIgb2YgYXNpYyBjaGFubmVscyBpbiB0aGlzIHN1YmRldgorCQkJCQkJCSAgIHRoYXQgaGF2ZSBpbnRlcnJ1dHBzICovCisJCQkJaW50IGFzaWNfY2hhbjsJLyogaWYgbm9ubmVnYXRpdmUsIHRoZSBmaXJzdCBjaGFubmVsIGlkIHdpdGgKKwkJCQkJCSAgIHJlc3BlY3QgdG8gdGhlIGFzaWMgdGhhdCBoYXMgaW50ZXJydXB0cyAqLworCQkJCWludCBlbmFibGVkX21hc2s7CS8qIHN1YmRldi1yZWxhdGl2ZSBjaGFubmVsIG1hc2sgZm9yIGNoYW5uZWxzCisJCQkJCQkJICAgd2UgYXJlIGludGVyZXN0ZWQgaW4gKi8KKwkJCQlpbnQgYWN0aXZlOworCQkJCWludCBzdG9wX2NvdW50OworCQkJCWludCBjb250aW51b3VzOworCQkJCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisJCQl9IGludHI7CisJCX0gZGlvOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IHNoYWRvd19zYW1wbGVzWzhdOwkvKiB0aGUgbGFzdCB1bnNpZ25lZCBpbnQgZGF0YSB3cml0dGVuICovCisJCX0gYW87CisJfTsKK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBwY21taW9fcHJpdmF0ZSB7CisJLyogc3R1ZmYgZm9yIERJTyAqLworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgcGFnZWxvY2s7CS8qIGN1cnJlbnQgcGFnZSBhbmQgbG9jayAqLworCQl1bnNpZ25lZCBjaGFyIHBvbFtOVU1fUEFHRURfUkVHU107CS8qIHNoYWRvdyBvZiBQT0x4IHJlZ2lzdGVycyAqLworCQl1bnNpZ25lZCBjaGFyIGVuYWJbTlVNX1BBR0VEX1JFR1NdOwkvKiBzaGFkb3cgb2YgRU5BQnggcmVnaXN0ZXJzICovCisJCWludCBudW07CisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCQl1bnNpZ25lZCBpbnQgaXJxOworCQlzcGlubG9ja190IHNwaW5sb2NrOworCX0gYXNpY3NbTUFYX0FTSUNTXTsKKwlzdHJ1Y3QgcGNtbWlvX3N1YmRldl9wcml2YXRlICpzcHJpdnM7Cit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbW1pb19wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBzdWJwcml2ICgoc3RydWN0IHBjbW1pb19zdWJkZXZfcHJpdmF0ZSAqKXMtPnByaXZhdGUpCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY21taW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNtbWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtbWlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY21taW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbW1pb19kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjbW1pb19ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKyAgICAgIGJvYXJkX25hbWU6JnBjbW1pb19ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbW1pb19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjbW1pb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwY21taW9fYm9hcmQpLAorfTsKKworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNtbWlvKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIHZvaWQgcGNtbWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKKy8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggc3BlY2lmaWNzIG9mIHRoaXMgZGV2aWNlJ3MgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCBpbml0X2FzaWNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsJLyogc2V0cyB1cC9jbGVhcnMgQVNJQyBjaGlwcyB0byBkZWZhdWx0cyAqLworc3RhdGljIHZvaWQgc3dpdGNoX3BhZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcGFnZSk7CisjaWZkZWYgbm90dXNlZAorc3RhdGljIHZvaWQgbG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpOworc3RhdGljIHZvaWQgdW5sb2NrX3BvcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcG9ydCk7CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjbW1pb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHNkZXZfbm8sIGNoYW5zX2xlZnQsIG5fZGlvX3N1YmRldnMsIG5fc3ViZGV2cywgcG9ydCwgYXNpYywKKwkJdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxW01BWF9BU0lDU107CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpcnFbMF0gPSBpdC0+b3B0aW9uc1sxXTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwKKwkJCXRoaXNib2FyZC0+dG90YWxfaW9zaXplLCBkcml2ZXIuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNtbWlvX3ByaXZhdGUpKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5udW0gPSBhc2ljOworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgPQorCQkJZGV2LT5pb2Jhc2UgKyAxNiArIGFzaWMgKiBBU0lDX0lPU0laRTsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxID0gMDsJLyogdGhpcyBnZXRzIGFjdHVhbGx5IHNldCBhdCB0aGUgZW5kIG9mCisJCQkJCQkgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2UKKwkJCQkJCSAgIGNvbWVkaV9yZXF1ZXN0X2lycXMgKi8KKwkJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrKTsKKwl9CisKKwljaGFuc19sZWZ0ID0gQ0hBTlNfUEVSX0FTSUMgKiB0aGlzYm9hcmQtPmRpb19udW1fYXNpY3M7CisJbl9kaW9fc3ViZGV2cyA9IENBTENfTl9ESU9fU1VCREVWUyhjaGFuc19sZWZ0KTsKKwluX3N1YmRldnMgPSBuX2Rpb19zdWJkZXZzICsgMjsKKwlkZXZwcml2LT5zcHJpdnMgPQorCQlrY2FsbG9jKG5fc3ViZGV2cywgc2l6ZW9mKHN0cnVjdCBwY21taW9fc3ViZGV2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldnByaXYtPnNwcml2cykgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqCisJICogQWxsb2NhdGUgMSBBSSArIDEgQU8gKyAyIERJTyBzdWJkZXZzICgyNCBsaW5lcyBwZXIgRElPKQorCSAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZzKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIGRhdGEgc3RydWN0dXJlc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEZpcnN0LCBBSSAqLworCXNkZXZfbm8gPSAwOworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzZGV2X25vOworCXMtPnByaXZhdGUgPSBkZXZwcml2LT5zcHJpdnMgKyBzZGV2X25vOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+YWlfcmFuZ2VfdGFibGU7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPm5fYWlfY2hhbnM7CisJcy0+bGVuX2NoYW5saXN0ID0gcy0+bl9jaGFuOworCXMtPmluc25fcmVhZCA9IHRoaXNib2FyZC0+YWlfcmluc247CisJc3VicHJpdi0+aW9iYXNlID0gZGV2LT5pb2Jhc2UgKyAwOworCS8qIGluaXRpYWxpemUgdGhlIHJlc291cmNlIGVuYWJsZSByZWdpc3RlciBieSBjbGVhcmluZyBpdCAqLworCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlICsgMyk7CisJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UgKyA0ICsgMyk7CisKKwkvKiBOZXh0LCBBTyAqLworCSsrc2Rldl9ubzsKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc2Rldl9ubzsKKwlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFvX3JhbmdlX3RhYmxlOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5uX2FvX2NoYW5zOworCXMtPmxlbl9jaGFubGlzdCA9IHMtPm5fY2hhbjsKKwlzLT5pbnNuX3JlYWQgPSB0aGlzYm9hcmQtPmFvX3JpbnNuOworCXMtPmluc25fd3JpdGUgPSB0aGlzYm9hcmQtPmFvX3dpbnNuOworCXN1YnByaXYtPmlvYmFzZSA9IGRldi0+aW9iYXNlICsgODsKKwkvKiBpbml0aWFsaXplIHRoZSByZXNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgYnkgY2xlYXJpbmcgaXQgKi8KKwlvdXRiKDAsIHN1YnByaXYtPmlvYmFzZSArIDMpOworCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlICsgNCArIDMpOworCisJKytzZGV2X25vOworCXBvcnQgPSAwOworCWFzaWMgPSAwOworCWZvciAoOyBzZGV2X25vIDwgKGludClkZXYtPm5fc3ViZGV2aWNlczsgKytzZGV2X25vKSB7CisJCWludCBieXRlX25vOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzZGV2X25vOworCQlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+aW5zbl9iaXRzID0gcGNtbWlvX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gcGNtbWlvX2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+bl9jaGFuID0gTUlOKGNoYW5zX2xlZnQsIE1BWF9DSEFOU19QRVJfU1VCREVWKTsKKwkJc3VicHJpdi0+ZGlvLmludHIuYXNpYyA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuID0gLTE7CisJCXN1YnByaXYtPmRpby5pbnRyLmFzaWNfY2hhbiA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucyA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAwOworCQlzLT5sZW5fY2hhbmxpc3QgPSAxOworCisJCS8qIHNhdmUgdGhlIGlvcG9ydCBhZGRyZXNzIGZvciBlYWNoICdwb3J0JyBvZiA4IGNoYW5uZWxzIGluIHRoZQorCQkgICBzdWJkZXZpY2UgKi8KKwkJZm9yIChieXRlX25vID0gMDsgYnl0ZV9ubyA8IFBPUlRTX1BFUl9TVUJERVY7ICsrYnl0ZV9ubywgKytwb3J0KSB7CisJCQlpZiAocG9ydCA+PSBQT1JUU19QRVJfQVNJQykgeworCQkJCXBvcnQgPSAwOworCQkJCSsrYXNpYzsKKwkJCQl0aGlzYXNpY19jaGFuY3QgPSAwOworCQkJfQorCQkJc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXSA9CisJCQkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgcG9ydDsKKworCQkJaWYgKHRoaXNhc2ljX2NoYW5jdCA8CisJCQkJQ0hBTlNfUEVSX1BPUlQgKiBJTlRSX1BPUlRTX1BFUl9BU0lDCisJCQkJJiYgc3VicHJpdi0+ZGlvLmludHIuYXNpYyA8IDApIHsKKwkJCQkvKiB0aGlzIGlzIGFuIGludGVycnVwdCBzdWJkZXZpY2UsIHNvIHNldHVwIHRoZSBzdHJ1Y3QgKi8KKwkJCQlzdWJwcml2LT5kaW8uaW50ci5hc2ljID0gYXNpYzsKKwkJCQlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAwOworCQkJCXN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPSAwOworCQkJCXN1YnByaXYtPmRpby5pbnRyLmZpcnN0X2NoYW4gPSBieXRlX25vICogODsKKwkJCQlzdWJwcml2LT5kaW8uaW50ci5hc2ljX2NoYW4gPSB0aGlzYXNpY19jaGFuY3Q7CisJCQkJc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnMgPQorCQkJCQlzLT5uX2NoYW4gLQorCQkJCQlzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuOworCQkJCXMtPmNhbmNlbCA9IHBjbW1pb19jYW5jZWw7CisJCQkJcy0+ZG9fY21kID0gcGNtbWlvX2NtZDsKKwkJCQlzLT5kb19jbWR0ZXN0ID0gcGNtbWlvX2NtZHRlc3Q7CisJCQkJcy0+bGVuX2NoYW5saXN0ID0KKwkJCQkJc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnM7CisJCQl9CisJCQl0aGlzYXNpY19jaGFuY3QgKz0gQ0hBTlNfUEVSX1BPUlQ7CisJCX0KKwkJc3Bpbl9sb2NrX2luaXQoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrKTsKKworCQljaGFuc19sZWZ0IC09IHMtPm5fY2hhbjsKKworCQlpZiAoIWNoYW5zX2xlZnQpIHsKKwkJCWFzaWMgPSAwOwkvKiByZXNldCB0aGUgYXNpYyB0byBvdXIgZmlyc3QgYXNpYywgdG8gZG8gaW50ciBzdWJkZXZzICovCisJCQlwb3J0ID0gMDsKKwkJfQorCisJfQorCisJaW5pdF9hc2ljcyhkZXYpOwkvKiBjbGVhciBvdXQgYWxsIHRoZSByZWdpc3RlcnMsIGJhc2ljYWxseSAqLworCisJZm9yIChhc2ljID0gMDsgaXJxWzBdICYmIGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlpZiAoaXJxW2FzaWNdCisJCQkmJiBjb21lZGlfcmVxdWVzdF9pcnEoaXJxW2FzaWNdLCBpbnRlcnJ1cHRfcGNtbWlvLAorCQkJCUlSUUZfU0hBUkVELCB0aGlzYm9hcmQtPm5hbWUsIGRldikpIHsKKwkJCWludCBpOworCQkJLyogdW5yb2xsIHRoZSBhbGxvY2F0ZWQgaXJxcy4uICovCisJCQlmb3IgKGkgPSBhc2ljIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkJCQljb21lZGlfZnJlZV9pcnEoaXJxW2ldLCBkZXYpOworCQkJCWRldnByaXYtPmFzaWNzW2ldLmlycSA9IGlycVtpXSA9IDA7CisJCQl9CisJCQlpcnFbYXNpY10gPSAwOworCQl9CisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlycSA9IGlycVthc2ljXTsKKwl9CisKKwlkZXYtPmlycSA9IGlycVswXTsJLyogZ3JyLi4gd2lzaCBjb21lZGkgZGV2IHN0cnVjdCBzdXBwb3J0ZWQgbXVsdGlwbGUKKwkJCQkgICBpcnFzLi4gKi8KKworCWlmIChpcnFbMF0pIHsKKwkJcHJpbnRrKCJpcnE6ICV1ICIsIGlycVswXSk7CisJCWlmIChpcnFbMV0gJiYgdGhpc2JvYXJkLT5kaW9fbnVtX2FzaWNzID09IDIpCisJCQlwcmludGsoInNlY29uZCBBU0lDIGlycTogJXUgIiwgaXJxWzFdKTsKKwl9IGVsc2UgeworCQlwcmludGsoIihJUlEgbW9kZSBkaXNhYmxlZCkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY21taW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwgZHJpdmVyLmRyaXZlcl9uYW1lKTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzYm9hcmQtPnRvdGFsX2lvc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FTSUNTOyArK2kpIHsKKwkJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+YXNpY3NbaV0uaXJxKQorCQkJY29tZWRpX2ZyZWVfaXJxKGRldnByaXYtPmFzaWNzW2ldLmlycSwgZGV2KTsKKwl9CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5zcHJpdnMpCisJCWtmcmVlKGRldnByaXYtPnNwcml2cyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IHBjbW1pb19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYnl0ZV9ubzsKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE5PVEU6CisJICAgcmVhZGluZyBhIDAgbWVhbnMgdGhpcyBjaGFubmVsIHdhcyBoaWdoCisJICAgd3JpdGluZSBhIDAgc2V0cyB0aGUgY2hhbm5lbCBoaWdoCisJICAgcmVhZGluZyBhIDEgbWVhbnMgdGhpcyBjaGFubmVsIHdhcyBsb3cKKwkgICB3cml0aW5nIGEgMSBtZWFucyBzZXQgdGhpcyBjaGFubmVsIGxvdworCisJICAgVGhlcmVmb3JlIGV2ZXJ5dGhpbmcgaXMgYWx3YXlzIGludmVydGVkLiAqLworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCS8qIERFQlVHICovCisJcHJpbnRrKCJ3cml0ZSBtYXNrOiAlMDh4ICBkYXRhOiAlMDh4XG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKyNlbmRpZgorCisJcy0+c3RhdGUgPSAwOworCisJZm9yIChieXRlX25vID0gMDsgYnl0ZV9ubyA8IHMtPm5fY2hhbiAvIENIQU5TX1BFUl9QT1JUOyArK2J5dGVfbm8pIHsKKwkJLyogYWRkcmVzcyBvZiA4LWJpdCBwb3J0ICovCisJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXSwKKwkJCS8qIGJpdCBvZmZzZXQgb2YgcG9ydCBpbiAzMi1iaXQgZG91Ymxld29yZCAqLworCQkJb2Zmc2V0ID0gYnl0ZV9ubyAqIDg7CisJCS8qIHRoaXMgOC1iaXQgcG9ydCdzIGRhdGEgKi8KKwkJdW5zaWduZWQgY2hhciBieXRlID0gMCwKKwkJCS8qIFRoZSB3cml0ZSBtYXNrIGZvciB0aGlzIHBvcnQgKGlmIGFueSkgKi8KKwkJCXdyaXRlX21hc2tfYnl0ZSA9IChkYXRhWzBdID4+IG9mZnNldCkgJiAweGZmLAorCQkJLyogVGhlIGRhdGEgYnl0ZSBmb3IgdGhpcyBwb3J0ICovCisJCQlkYXRhX2J5dGUgPSAoZGF0YVsxXSA+PiBvZmZzZXQpICYgMHhmZjsKKworCQlieXRlID0gaW5iKGlvYWRkcik7CS8qIHJlYWQgYWxsIDgtYml0cyBmb3IgdGhpcyBwb3J0ICovCisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCQkvKiBERUJVRyAqLworCQlwcmludGsoImJ5dGUgJWQgd21iICUwMnggZGIgJTAyeCBvZmZzZXQgJTAyZCBpbyAlMDR4LCBkYXRhX2luICUwMnggIiwgYnl0ZV9ubywgKHVuc2lnbmVkKXdyaXRlX21hc2tfYnl0ZSwgKHVuc2lnbmVkKWRhdGFfYnl0ZSwgb2Zmc2V0LCBpb2FkZHIsICh1bnNpZ25lZClieXRlKTsKKyNlbmRpZgorCisJCWlmICh3cml0ZV9tYXNrX2J5dGUpIHsKKwkJCS8qIHRoaXMgYnl0ZSBoYXMgc29tZSB3cml0ZV9iaXRzIC0tIHNvIHNldCB0aGUgb3V0cHV0IGxpbmVzICovCisJCQlieXRlICY9IH53cml0ZV9tYXNrX2J5dGU7CS8qIGNsZWFyIGJpdHMgZm9yIHdyaXRlIG1hc2sgKi8KKwkJCWJ5dGUgfD0gfmRhdGFfYnl0ZSAmIHdyaXRlX21hc2tfYnl0ZTsJLyogc2V0IHRvIGludmVydGVkIGRhdGFfYnl0ZSAqLworCQkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgc3RhdGUgKi8KKwkJCW91dGIoYnl0ZSwgaW9hZGRyKTsKKwkJfQorI2lmZGVmIERBTU1JVF9JVFNfQlJPS0VOCisJCS8qIERFQlVHICovCisJCXByaW50aygiZGF0YV9vdXRfYnl0ZSAlMDJ4XG4iLCAodW5zaWduZWQpYnl0ZSk7CisjZW5kaWYKKwkJLyogc2F2ZSB0aGUgZGlnaXRhbCBpbnB1dCBsaW5lcyBmb3IgdGhpcyBieXRlLi4gKi8KKwkJcy0+c3RhdGUgfD0gKCh1bnNpZ25lZCBpbnQpYnl0ZSkgPDwgb2Zmc2V0OworCX0KKworCS8qIG5vdyByZXR1cm4gdGhlIERJTyBsaW5lcyB0byBkYXRhWzFdIC0gbm90ZSB0aGV5IGNhbWUgaW52ZXJ0ZWQhICovCisJZGF0YVsxXSA9IH5zLT5zdGF0ZTsKKworI2lmZGVmIERBTU1JVF9JVFNfQlJPS0VOCisJLyogREVCVUcgKi8KKwlwcmludGsoInMtPnN0YXRlICUwOHggZGF0YV9vdXQgJTA4eFxuIiwgcy0+c3RhdGUsIGRhdGFbMV0pOworI2VuZGlmCisKKwlyZXR1cm4gMjsKK30KKworLyogVGhlIGlucHV0IG9yIG91dHB1dCBjb25maWd1cmF0aW9uIG9mIGVhY2ggZGlnaXRhbCBsaW5lIGlzCisgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKyAqIHZhbHVlIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAqLworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCBieXRlX25vID0gY2hhbiAvIDgsIGJpdF9ubyA9CisJCWNoYW4gJSA4OworCXVuc2lnbmVkIGxvbmcgaW9hZGRyOworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKKworCS8qIENvbXB1dGUgaW9hZGRyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlpb2FkZHIgPSBzdWJwcml2LT5pb2Jhc2VzW2J5dGVfbm9dOworCisJLyogTk9URToKKwkgICB3cml0aW5nIGEgMCBhbiBJTyBjaGFubmVsJ3MgYml0IHNldHMgdGhlIGNoYW5uZWwgdG8gSU5QVVQKKwkgICBhbmQgcHVsbHMgdGhlIGxpbmUgaGlnaCBhcyB3ZWxsCisKKwkgICB3cml0aW5nIGEgMSB0byBhbiBJTyBjaGFubmVsJ3MgIGJpdCBwdWxscyB0aGUgbGluZSBsb3cKKworCSAgIEFsbCBjaGFubmVscyBhcmUgaW1wbGljaXRseSBhbHdheXMgaW4gT1VUUFVUIG1vZGUgLS0gYnV0IHdoZW4KKwkgICB0aGV5IGFyZSBoaWdoIHRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gSU5QVVQgbW9kZS4uCisKKwkgICBUaHVzLCB3ZSBvbmx5IGZvcmNlIGNoYW5uZWxzIGxvdyBpZiB0aGUgY29uZmlnIHJlcXVlc3Qgd2FzIElOUFVULAorCSAgIG90aGVyd2lzZSB3ZSBkbyBub3RoaW5nIHRvIHRoZSBoYXJkd2FyZS4gICAgKi8KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJLyogc2F2ZSB0byBpb19iaXRzIC0tIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHNpbmNlCisJCSAgIGFsbCBpbnB1dCBjaGFubmVscyBhcmUgYWxzbyBvdXRwdXQgY2hhbm5lbHMuLi4gKi8KKwkJcy0+aW9fYml0cyB8PSAxIDw8IGNoYW47CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQkvKiB3cml0ZSBhIDAgdG8gdGhlIGFjdHVhbCByZWdpc3RlciByZXByZXNlbnRpbmcgdGhlIGNoYW5uZWwKKwkJICAgdG8gc2V0IGl0IHRvICdpbnB1dCcuICAwIG1lYW5zICJmbG9hdCBoaWdoIi4gKi8KKwkJYnl0ZSA9IGluYihpb2FkZHIpOworCQlieXRlICY9IH4oMSA8PCBiaXRfbm8pOworCQkJCS8qKjwgc2V0IGlucHV0IGNoYW5uZWwgdG8gJzAnICovCisKKwkJLyogd3JpdGUgb3V0IGJ5dGUgLS0gdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGFjdHVhbGx5IGFmZmVjdCB0aGUKKwkJICAgaGFyZHdhcmUgYXMgYWxsIGNoYW5uZWxzIGFyZSBpbXBsaWNpdGx5IG91dHB1dCAtLSBidXQgaW5wdXQKKwkJICAgY2hhbm5lbHMgYXJlIHNldCB0byBmbG9hdC1oaWdoICovCisJCW91dGIoYnl0ZSwgaW9hZGRyKTsKKworCQkvKiBzYXZlIHRvIGlvX2JpdHMgKi8KKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgY2hhbik7CisJCWJyZWFrOworCisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCS8qIHJldHJlaXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIHZvaWQgaW5pdF9hc2ljcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sJCQkJLyogc2V0cyB1cCBhbgorCQkJCSAgIEFTSUMgY2hpcCB0byBkZWZhdWx0cyAqLworCWludCBhc2ljOworCisJZm9yIChhc2ljID0gMDsgYXNpYyA8IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljczsgKythc2ljKSB7CisJCWludCBwb3J0LCBwYWdlOworCQl1bnNpZ25lZCBsb25nIGJhc2VhZGRyID0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlOworCisJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgMCk7CS8qIHN3aXRjaCBiYWNrIHRvIHBhZ2UgMCAqLworCisJCS8qIGZpcnN0LCBjbGVhciBhbGwgdGhlIERJTyBwb3J0IGJpdHMgKi8KKwkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFBPUlRTX1BFUl9BU0lDOyArK3BvcnQpCisJCQlvdXRiKDAsIGJhc2VhZGRyICsgUkVHX1BPUlQwICsgcG9ydCk7CisKKwkJLyogTmV4dCwgY2xlYXIgYWxsIHRoZSBwYWdlZCByZWdpc3RlcnMgZm9yIGVhY2ggcGFnZSAqLworCQlmb3IgKHBhZ2UgPSAxOyBwYWdlIDwgTlVNX1BBR0VTOyArK3BhZ2UpIHsKKwkJCWludCByZWc7CisJCQkvKiBub3cgY2xlYXIgYWxsIHRoZSBwYWdlZCByZWdpc3RlcnMgKi8KKwkJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgcGFnZSk7CisJCQlmb3IgKHJlZyA9IEZJUlNUX1BBR0VEX1JFRzsKKwkJCQlyZWcgPCBGSVJTVF9QQUdFRF9SRUcgKyBOVU1fUEFHRURfUkVHUzsgKytyZWcpCisJCQkJb3V0YigwLCBiYXNlYWRkciArIHJlZyk7CisJCX0KKworCQkvKiBERUJVRyAgc2V0IHJpc2luZyBlZGdlIGludGVycnVwdHMgb24gcG9ydDAgb2YgYm90aCBhc2ljcyAqLworCQkvKnN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9QT0wpOworCQkgICBvdXRiKDB4ZmYsIGJhc2VhZGRyICsgUkVHX1BPTDApOworCQkgICBzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCSAgIG91dGIoMHhmZiwgYmFzZWFkZHIgKyBSRUdfRU5BQjApOyAqLworCQkvKiBFTkQgREVCVUcgKi8KKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIDApOwkvKiBzd2l0Y2ggYmFjayB0byBkZWZhdWx0IHBhZ2UgMCAqLworCisJfQorfQorCitzdGF0aWMgdm9pZCBzd2l0Y2hfcGFnZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwYWdlKQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcykKKwkJcmV0dXJuOwkJLyogcGFyYW5vaWEgKi8KKwlpZiAocGFnZSA8IDAgfHwgcGFnZSA+PSBOVU1fUEFHRVMpCisJCXJldHVybjsJCS8qIG1vcmUgcGFyYW5vaWEgKi8KKworCWRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrICY9IH5SRUdfUEFHRV9NQVNLOworCWRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrIHw9IHBhZ2UgPDwgUkVHX1BBR0VfQklUT0ZGU0VUOworCisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX1BBR0VMT0NLKTsKK30KKworI2lmZGVmIG5vdHVzZWQKK3N0YXRpYyB2b2lkIGxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcykKKwkJcmV0dXJuOwkJLyogcGFyYW5vaWEgKi8KKwlpZiAocG9ydCA8IDAgfHwgcG9ydCA+PSBQT1JUU19QRVJfQVNJQykKKwkJcmV0dXJuOwkJLyogbW9yZSBwYXJhbm9pYSAqLworCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgfD0gMHgxIDw8IHBvcnQ7CisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX1BBR0VMT0NLKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpCit7CisJaWYgKGFzaWMgPCAwIHx8IGFzaWMgPj0gdGhpc2JvYXJkLT5kaW9fbnVtX2FzaWNzKQorCQlyZXR1cm47CQkvKiBwYXJhbm9pYSAqLworCWlmIChwb3J0IDwgMCB8fCBwb3J0ID49IFBPUlRTX1BFUl9BU0lDKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgJj0gfigweDEgPDwgcG9ydCkgfCBSRUdfTE9DS19NQVNLOworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19QQUdFTE9DSyk7Cit9CisjZW5kaWYgLyogbm90dXNlZCAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbW1pbyhpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBhc2ljLCBnb3QxID0gMDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisKKwlmb3IgKGFzaWMgPSAwOyBhc2ljIDwgTUFYX0FTSUNTOyArK2FzaWMpIHsKKwkJaWYgKGlycSA9PSBkZXZwcml2LT5hc2ljc1thc2ljXS5pcnEpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQl1bnNpZ25lZCB0cmlnZ2VyZWQgPSAwOworCQkJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2U7CisJCQkvKiBpdCBpcyBhbiBpbnRlcnJ1cHQgZm9yIEFTSUMgI2FzaWMgKi8KKwkJCXVuc2lnbmVkIGNoYXIgaW50X3BlbmQ7CisKKwkJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YXNpY3NbYXNpY10uc3BpbmxvY2ssCisJCQkJZmxhZ3MpOworCisJCQlpbnRfcGVuZCA9IGluYihpb2Jhc2UgKyBSRUdfSU5UX1BFTkRJTkcpICYgMHgwNzsKKworCQkJaWYgKGludF9wZW5kKSB7CisJCQkJaW50IHBvcnQ7CisJCQkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IElOVFJfUE9SVFNfUEVSX0FTSUM7CisJCQkJCSsrcG9ydCkgeworCQkJCQlpZiAoaW50X3BlbmQgJiAoMHgxIDw8IHBvcnQpKSB7CisJCQkJCQl1bnNpZ25lZCBjaGFyCisJCQkJCQkJaW9fbGluZXNfd2l0aF9lZGdlcyA9IDA7CisJCQkJCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsCisJCQkJCQkJUEFHRV9JTlRfSUQpOworCQkJCQkJaW9fbGluZXNfd2l0aF9lZGdlcyA9CisJCQkJCQkJaW5iKGlvYmFzZSArCisJCQkJCQkJUkVHX0lOVF9JRDAgKyBwb3J0KTsKKworCQkJCQkJaWYgKGlvX2xpbmVzX3dpdGhfZWRnZXMpCisJCQkJCQkJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKwkJCQkJCQlvdXRiKDAsIGlvYmFzZSArCisJCQkJCQkJCVJFR19JTlRfSUQwICsKKwkJCQkJCQkJcG9ydCk7CisKKwkJCQkJCXRyaWdnZXJlZCB8PQorCQkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPDwKKwkJCQkJCQlwb3J0ICogODsKKwkJCQkJfQorCQkJCX0KKworCQkJCSsrZ290MTsKKwkJCX0KKworCQkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFzaWNzW2FzaWNdLgorCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCWlmICh0cmlnZ2VyZWQpIHsKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwkJCQkvKiBUT0RPIGhlcmU6IGRpc3BhdGNoIGlvIGxpbmVzIHRvIHN1YmRldnMgd2l0aCBjb21tYW5kcy4uICovCisJCQkJcHJpbnRrKCJQQ01NSU8gREVCVUc6IGdvdCBlZGdlIGRldGVjdCBpbnRlcnJ1cHQgJWQgYXNpYyAlZCB3aGljaF9jaGFuczogJTA2eFxuIiwgaXJxLCBhc2ljLCB0cmlnZ2VyZWQpOworCQkJCWZvciAocyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJCQkJCXMgPCBkZXYtPnN1YmRldmljZXMgKyBkZXYtPm5fc3ViZGV2aWNlczsKKwkJCQkJKytzKSB7CisJCQkJCWlmIChzdWJwcml2LT5kaW8uaW50ci5hc2ljID09IGFzaWMpIHsJLyogdGhpcyBpcyBhbiBpbnRlcnJ1cHQgc3ViZGV2LCBhbmQgaXQgbWF0Y2hlcyB0aGlzIGFzaWMhICovCisJCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJCQkJdW5zaWduZWQgb2xkZXZlbnRzOworCisJCQkJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUKKwkJCQkJCQkoJnN1YnByaXYtPmRpby5pbnRyLgorCQkJCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCQkJCW9sZGV2ZW50cyA9IHMtPmFzeW5jLT5ldmVudHM7CisKKwkJCQkJCWlmIChzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUpIHsKKwkJCQkJCQl1bnNpZ25lZCBteXRyaWcgPQorCQkJCQkJCQkoKHRyaWdnZXJlZCA+PgorCQkJCQkJCQkJc3VicHJpdi0+CisJCQkJCQkJCQlkaW8uCisJCQkJCQkJCQlpbnRyLgorCQkJCQkJCQkJYXNpY19jaGFuKQorCQkJCQkJCQkmICgoMHgxIDw8IHN1YnByaXYtPmRpby5pbnRyLm51bV9hc2ljX2NoYW5zKSAtIDEpKSA8PCBzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuOworCQkJCQkJCWlmIChteXRyaWcgJiBzdWJwcml2LT4KKwkJCQkJCQkJZGlvLmludHIuCisJCQkJCQkJCWVuYWJsZWRfbWFzaykgeworCQkJCQkJCQl1bnNpZ25lZCBpbnQgdmFsID0KKwkJCQkJCQkJCTA7CisJCQkJCQkJCXVuc2lnbmVkIGludCBuLAorCQkJCQkJCQkJY2gsIGxlbjsKKworCQkJCQkJCQlsZW4gPSBzLT5hc3luYy0+CisJCQkJCQkJCQljbWQuCisJCQkJCQkJCQljaGFubGlzdF9sZW47CisJCQkJCQkJCWZvciAobiA9IDA7CisJCQkJCQkJCQluIDwgbGVuOworCQkJCQkJCQkJbisrKSB7CisJCQkJCQkJCQljaCA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtuXSk7CisJCQkJCQkJCQlpZiAobXl0cmlnICYgKDFVIDw8IGNoKSkgeworCQkJCQkJCQkJCXZhbCB8PSAoMVUgPDwgbik7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQkJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KKwkJCQkJCQkJaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVswXSkKKwkJCQkJCQkJCSYmCisJCQkJCQkJCQljb21lZGlfYnVmX3B1dAorCQkJCQkJCQkJKHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVsxXSkpIHsKKwkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1MpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJLyogT3ZlcmZsb3chIFN0b3AgYWNxdWlzaXRpb24hISAqLworCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJcGNtbWlvX3N0b3BfaW50cgorCQkJCQkJCQkJCShkZXYsCisJCQkJCQkJCQkJcyk7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvKiBDaGVjayBmb3IgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJCQkJCQlpZiAoIXN1YnByaXYtPgorCQkJCQkJCQkJZGlvLgorCQkJCQkJCQkJaW50ci4KKwkJCQkJCQkJCWNvbnRpbnVvdXMpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIHN0b3Bfc3JjID09IFRSSUdfQ09VTlQgKi8KKwkJCQkJCQkJCWlmIChzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID4gMCkgeworCQkJCQkJCQkJCXN1YnByaXYtPgorCQkJCQkJCQkJCQlkaW8uCisJCQkJCQkJCQkJCWludHIuCisJCQkJCQkJCQkJCXN0b3BfY291bnQtLTsKKwkJCQkJCQkJCQlpZiAoc3VicHJpdi0+ZGlvLmludHIuc3RvcF9jb3VudCA9PSAwKSB7CisJCQkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJCQlwY21taW9fc3RvcF9pbnRyCisJCQkJCQkJCQkJCQkoZGV2LAorCQkJCQkJCQkJCQkJcyk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZQorCQkJCQkJCSgmc3VicHJpdi0+ZGlvLmludHIuCisJCQkJCQkJc3BpbmxvY2ssIGZsYWdzKTsKKworCQkJCQkJaWYgKG9sZGV2ZW50cyAhPQorCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMpIHsKKwkJCQkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQkJCX0KKworCQkJCQl9CisKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKwlpZiAoIWdvdDEpCisJCXJldHVybiBJUlFfTk9ORTsJLyogaW50ZXJydXB0IGZyb20gb3RoZXIgc291cmNlICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBwY21taW9fc3RvcF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IG5wb3J0cywgZmlyc3Rwb3J0LCBhc2ljLCBwb3J0OworCisJaWYgKChhc2ljID0gc3VicHJpdi0+ZGlvLmludHIuYXNpYykgPCAwKQorCQlyZXR1cm47CQkvKiBub3QgYW4gaW50ZXJydXB0IHN1YmRldiAqLworCisJc3VicHJpdi0+ZGlvLmludHIuZW5hYmxlZF9tYXNrID0gMDsKKwlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAwOworCXMtPmFzeW5jLT5pbnR0cmlnID0gMDsKKwlucG9ydHMgPSBzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCWZpcnN0cG9ydCA9IHN1YnByaXYtPmRpby5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9FTkFCKTsKKwlmb3IgKHBvcnQgPSBmaXJzdHBvcnQ7IHBvcnQgPCBmaXJzdHBvcnQgKyBucG9ydHM7ICsrcG9ydCkgeworCQkvKiBkaXNhYmxlIGFsbCBpbnRycyBmb3IgdGhpcyBzdWJkZXYuLiAqLworCQlvdXRiKDAsIGRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCX0KK30KKworc3RhdGljIGludCBwY21taW9fc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmICghc3VicHJpdi0+ZGlvLmludHIuY29udGludW91cyAmJiBzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID09IDApIHsKKwkJLyogQW4gZW1wdHkgYWNxdWlzaXRpb24hICovCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlID0gMDsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYml0cyA9IDAsIHBvbF9iaXRzID0gMCwgbjsKKwkJaW50IG5wb3J0cywgZmlyc3Rwb3J0LCBhc2ljLCBwb3J0OworCQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwkJaWYgKChhc2ljID0gc3VicHJpdi0+ZGlvLmludHIuYXNpYykgPCAwKQorCQkJcmV0dXJuIDE7CS8qIG5vdCBhbiBpbnRlcnJ1cHQKKwkJCQkJICAgc3ViZGV2ICovCisJCXN1YnByaXYtPmRpby5pbnRyLmVuYWJsZWRfbWFzayA9IDA7CisJCXN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSA9IDE7CisJCW5wb3J0cyA9IHN1YnByaXYtPmRpby5pbnRyLm51bV9hc2ljX2NoYW5zIC8gQ0hBTlNfUEVSX1BPUlQ7CisJCWZpcnN0cG9ydCA9IHN1YnByaXYtPmRpby5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCQlpZiAoY21kLT5jaGFubGlzdCkgeworCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCQliaXRzIHw9ICgxVSA8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pKTsKKwkJCQlwb2xfYml0cyB8PSAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W25dKQorCQkJCQl8fCBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKSA/IDFVIDogMFUpCisJCQkJCTw8IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CisJCQl9CisJCX0KKwkJYml0cyAmPSAoKDB4MSA8PCBzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucykgLQorCQkJMSkgPDwgc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbjsKKwkJc3VicHJpdi0+ZGlvLmludHIuZW5hYmxlZF9tYXNrID0gYml0czsKKworCQl7CQkvKiB0aGUgYmVsb3cgY29kZSBjb25maWd1cmVzIHRoZSBib2FyZCB0byB1c2UgYSBzcGVjaWZpYyBJUlEgZnJvbSAwLTE1LiAqLworCQkJdW5zaWduZWQgY2hhciBiOworCQkJLyogc2V0IHJlc291cmNlIGVuYWJsZSByZWdpc3RlciB0byBlbmFibGUgSVJRIG9wZXJhdGlvbiAqLworCQkJb3V0YigxIDw8IDQsIGRldi0+aW9iYXNlICsgMyk7CisJCQkvKiBzZXQgYml0cyAwLTMgb2YgYiB0byB0aGUgaXJxIG51bWJlciBmcm9tIDAtMTUgKi8KKwkJCWIgPSBkZXYtPmlycSAmICgoMSA8PCA0KSAtIDEpOworCQkJb3V0YihiLCBkZXYtPmlvYmFzZSArIDIpOworCQkJLyogZG9uZSwgd2UgdG9sZCB0aGUgYm9hcmQgd2hhdCBpcnEgdG8gdXNlICovCisJCX0KKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCWZvciAocG9ydCA9IGZpcnN0cG9ydDsgcG9ydCA8IGZpcnN0cG9ydCArIG5wb3J0czsgKytwb3J0KSB7CisJCQl1bnNpZ25lZCBlbmFiID0KKwkJCQliaXRzID4+IChzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuICsgKHBvcnQgLQorCQkJCQlmaXJzdHBvcnQpICogOCkgJiAweGZmLCBwb2wgPQorCQkJCXBvbF9iaXRzID4+IChzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuICsKKwkJCQkocG9ydCAtIGZpcnN0cG9ydCkgKiA4KSAmIDB4ZmY7CisJCQkvKiBzZXQgZW5hYiBpbnRycyBmb3IgdGhpcyBzdWJkZXYuLiAqLworCQkJb3V0YihlbmFiLAorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX1BPTCk7CisJCQlvdXRiKHBvbCwKKwkJCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBSRUdfRU5BQjAgKyBwb3J0KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21taW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+ZGlvLmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlKQorCQlwY21taW9fc3RvcF9pbnRyKGRldiwgcyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNtbWlvX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWlmICh0cmlnbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gMDsKKwlpZiAoc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlKSB7CisJCWV2ZW50ID0gcGNtbWlvX3N0YXJ0X2ludHIoZGV2LCBzKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXZlbnQpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAnZG9fY21kJyBmdW5jdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IHBjbW1pb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCXN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSA9IDE7CisKKwkvKiBTZXQgdXAgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJc3VicHJpdi0+ZGlvLmludHIuY29udGludW91cyA9IDA7CisJCXN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPSBjbWQtPnN0b3BfYXJnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PTkUgKi8KKwkJc3VicHJpdi0+ZGlvLmludHIuY29udGludW91cyA9IDE7CisJCXN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdXAgc3RhcnQgb2YgYWNxdWlzaXRpb24uICovCisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNtbWlvX2ludHRyaWdfc3RhcnRfaW50cjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT1cgKi8KKwkJZXZlbnQgPSBwY21taW9fc3RhcnRfaW50cihkZXYsIHMpOworCQlicmVhazsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXZlbnQpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnZG9fY21kdGVzdCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNtbWlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSAoVFJJR19OT1cgfCBUUklHX0lOVCk7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IChUUklHX0NPVU5UIHwgVFJJR19OT05FKTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogdGhlc2UgdGVzdHMgYXJlIHRydWUgaWYgbW9yZSB0aGFuIG9uZSBfc3JjIGJpdCBpcyBzZXQgKi8KKwlpZiAoKGNtZC0+c3RhcnRfc3JjICYgKGNtZC0+c3RhcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChjbWQtPnNjYW5fYmVnaW5fc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5jb252ZXJ0X3NyYyAmIChjbWQtPmNvbnZlcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgJiAoY21kLT5zY2FuX2VuZF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnN0b3Bfc3JjICYgKGNtZC0+c3RvcF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XIHx8IGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UICovCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAqLworCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+c2Nhbl9lbmRfc3JjID09IFRSSUdfQ09VTlQgKi8KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQkvKiBhbnkgY291bnQgYWxsb3dlZCAqLworCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCS8qIGlmIChlcnIpIHJldHVybiA0OyAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRjX3dhaXRfcmVhZHkodW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJdW5zaWduZWQgbG9uZyByZXRyeSA9IDEwMDAwMDsKKwl3aGlsZSAocmV0cnktLSkKKwkJaWYgKGluYihpb2Jhc2UgKyAzKSAmIDB4ODApCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogQWxsIHRoaXMgaXMgZm9yIEFJIGFuZCBBTyAqLworc3RhdGljIGludCBhaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBzdWJwcml2LT5pb2Jhc2U7CisKKwkvKgorCSAgIDEuIHdyaXRlIHRoZSBDTUQgYnl0ZSAodG8gQkFTRSsyKQorCSAgIDIuIHJlYWQganVuayBsbyBieXRlIChCQVNFKzApCisJICAgMy4gcmVhZCBqdW5rIGhpIGJ5dGUgKEJBU0UrMSkKKwkgICA0LiAobXV4IHNldHRsZWQgc28pIHdyaXRlIENNRCBieXRlIGFnYWluIChCQVNFKzIpCisJICAgNS4gcmVhZCB2YWxpZCBsbyBieXRlKEJBU0UrMCkKKwkgICA2LiByZWFkIHZhbGlkIGhpIGJ5dGUoQkFTRSsxKQorCisJICAgQWRkaXRpb25hbGx5IG5vdGUgdGhhdCB0aGUgQkFTRSArPSA0IGlmIHRoZSBjaGFubmVsID49IDgKKwkgKi8KKworCS8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQl1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHJhbmdlID0KKwkJCUNSX1JBTkdFKGluc24tPmNoYW5zcGVjKSwgYXJlZiA9CisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwkJdW5zaWduZWQgY2hhciBjb21tYW5kX2J5dGUgPSAwOworCQl1bnNpZ25lZCBpb29mZnNldCA9IDA7CisJCXNob3J0IHNhbXBsZSwgYWRjX2FkanVzdCA9IDA7CisKKwkJaWYgKGNoYW4gPiA3KQorCQkJY2hhbiAtPSA4LCBpb29mZnNldCA9IDQ7CS8qIHVzZSB0aGUgc2Vjb25kIGR3b3JkIGZvciBjaGFubmVscyA+IDcgKi8KKworCQlpZiAoYXJlZiAhPSBBUkVGX0RJRkYpIHsKKwkJCWFyZWYgPSBBUkVGX0dST1VORDsKKwkJCWNvbW1hbmRfYnl0ZSB8PSAxIDw8IDc7CS8qIHNldCBiaXQgNyB0byBpbmRpY2F0ZSBzaW5nbGUtZW5kZWQgKi8KKwkJfQorCQlpZiAocmFuZ2UgPCAyKQorCQkJYWRjX2FkanVzdCA9IDB4ODAwMDsJLyogYmlwb2xhciByYW5nZXMgKC01LDUgLi4gLTEwLDEwIG5lZWQgdG8gYmUgYWRqdXN0ZWQgLS0gdGhhdCBpcy4uIHRoZXkgbmVlZCB0byB3cmFwIGFyb3VuZCBieSBhZGRpbmcgMHg4MDAwICovCisKKwkJaWYgKGNoYW4gJSAyKSB7CisJCQljb21tYW5kX2J5dGUgfD0gMSA8PCA2OwkvKiBvZGQtbnVtYmVyZWQgY2hhbm5lbHMgaGF2ZSBiaXQgNiBzZXQgKi8KKwkJfQorCisJCS8qIHNlbGVjdCB0aGUgY2hhbm5lbCwgYml0cyA0LTUgPT0gY2hhbi8yICovCisJCWNvbW1hbmRfYnl0ZSB8PSAoKGNoYW4gLyAyKSAmIDB4MykgPDwgNDsKKworCQkvKiBzZXQgdGhlIHJhbmdlLCBiaXRzIDItMyAqLworCQljb21tYW5kX2J5dGUgfD0gKHJhbmdlICYgMHgzKSA8PCAyOworCisJCS8qIG5lZWQgdG8gZG8gdGhpcyB0d2ljZSB0byBtYWtlIHN1cmUgbXV4IHNldHRsZWQgKi8KKwkJb3V0Yihjb21tYW5kX2J5dGUsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMik7CS8qIGNoYW4vcmFuZ2UvYXJlZiBzZWxlY3QgKi8KKworCQlhZGNfd2FpdF9yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CS8qIHdhaXQgZm9yIHRoZSBhZGMgdG8gc2F5IGl0IGZpbmlzZWQgdGhlIGNvbnZlcnNpb24gKi8KKworCQlvdXRiKGNvbW1hbmRfYnl0ZSwgaW9iYXNlICsgaW9vZmZzZXQgKyAyKTsJLyogc2VsZWN0IHRoZSBjaGFuL3JhbmdlL2FyZWYgQUdBSU4gKi8KKworCQlhZGNfd2FpdF9yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CisKKwkJc2FtcGxlID0gaW5iKGlvYmFzZSArIGlvb2Zmc2V0ICsgMCk7CS8qIHJlYWQgZGF0YSBsbyBieXRlICovCisJCXNhbXBsZSB8PSBpbmIoaW9iYXNlICsgaW9vZmZzZXQgKyAxKSA8PCA4OwkvKiByZWFkIGRhdGEgaGkgYnl0ZSAqLworCQlzYW1wbGUgKz0gYWRjX2FkanVzdDsJLyogYWRqdXN0bWVudCAuLiBtdW5nZSBkYXRhICovCisJCWRhdGFbbl0gPSBzYW1wbGU7CisJfQorCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJdW5zaWduZWQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQlpZiAoY2hhbiA8IHMtPm5fY2hhbikKKwkJCWRhdGFbbl0gPSBzdWJwcml2LT5hby5zaGFkb3dfc2FtcGxlc1tjaGFuXTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9kYWNfcmVhZHkodW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJdW5zaWduZWQgbG9uZyByZXRyeSA9IDEwMDAwMEw7CisKKwkvKiBUaGlzIG1heSBzZWVtIGxpa2UgYW4gYWJzdXJkIHdheSB0byBoYW5kbGUgd2FpdGluZyBhbmQgdmlvbGF0ZXMgdGhlCisJICAgIm5vIGJ1c3kgd2FpdGluZyIgcG9saWN5LiBUaGUgZmFjdCBpcyB0aGF0IHRoZSBoYXJkd2FyZSBpcworCSAgIG5vcm1hbGx5IHNvIGZhc3QgdGhhdCB3ZSB1c3VhbGx5IG9ubHkgbmVlZCBvbmUgdGltZSB0aHJvdWdoIHRoZSBsb29wCisJICAgYW55d2F5LiBUaGUgbG9uZ2VyIHRpbWVvdXQgaXMgZm9yIHJhcmUgb2NjYXNpb25zIGFuZCBmb3IgZGV0ZWN0aW5nCisJICAgbm9uLWV4aXN0YW50IGhhcmR3YXJlLiAgKi8KKworCXdoaWxlIChyZXRyeS0tKSB7CisJCWlmIChpbmIoaW9iYXNlICsgMykgJiAweDgwKQorCQkJcmV0dXJuIDA7CisKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGlvYmFzZSA9IHN1YnByaXYtPmlvYmFzZSwgaW9vZmZzZXQgPSAwOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQl1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHJhbmdlID0KKwkJCUNSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwkJaWYgKGNoYW4gPCBzLT5uX2NoYW4pIHsKKwkJCXVuc2lnbmVkIGNoYXIgY29tbWFuZF9ieXRlID0gMCwgcmFuZ2VfYnl0ZSA9CisJCQkJcmFuZ2UgJiAoKDEgPDwgNCkgLSAxKTsKKwkJCWlmIChjaGFuID49IDQpCisJCQkJY2hhbiAtPSA0LCBpb29mZnNldCArPSA0OworCQkJLyogc2V0IHRoZSByYW5nZS4uICovCisJCQlvdXRiKHJhbmdlX2J5dGUsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMCk7CisJCQlvdXRiKDAsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMSk7CisKKwkJCS8qIHRlbGwgaXQgdG8gYmVnaW4gKi8KKwkJCWNvbW1hbmRfYnl0ZSA9IChjaGFuIDw8IDEpIHwgMHg2MDsKKwkJCW91dGIoY29tbWFuZF9ieXRlLCBpb2Jhc2UgKyBpb29mZnNldCArIDIpOworCisJCQl3YWl0X2RhY19yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CisKKwkJCW91dGIoZGF0YVtuXSAmIDB4ZmYsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMCk7CS8qIGxvdyBvcmRlciBieXRlICovCisJCQlvdXRiKChkYXRhW25dID4+IDgpICYgMHhmZiwgaW9iYXNlICsgaW9vZmZzZXQgKyAxKTsJLyogaGlnaCBvcmRlciBieXRlICovCisJCQljb21tYW5kX2J5dGUgPSAweDcwIHwgKGNoYW4gPDwgMSk7CS8qIHNldCBiaXQgNCBvZiBjb21tYW5kIGJ5dGUgdG8gaW5kaWNhdGUgZGF0YSBpcyBsb2FkZWQgYW5kIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQkJLyogdHJpZ2dlciBjb252ZXJpb24gKi8KKwkJCW91dGIoY29tbWFuZF9ieXRlLCBpb2Jhc2UgKyBpb29mZnNldCArIDIpOworCisJCQl3YWl0X2RhY19yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CisKKwkJCXN1YnByaXYtPmFvLnNoYWRvd19zYW1wbGVzW2NoYW5dID0gZGF0YVtuXTsJLyogc2F2ZSB0byBzaGFkb3cgcmVnaXN0ZXIgZm9yIGFvX3JpbnNuICovCisJCX0KKwl9CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2Q4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKQEAgLTAsMCArMSwxMTAxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BjbXVpby5jCisgICAgRHJpdmVyIGZvciBXaW5zeXN0ZW1zIFBDLTEwNCBiYXNlZCA0OC1jaGFubmVsIGFuZCA5Ni1jaGFubmVsIERJTyBib2FyZHMuCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IENhbGluIEEuIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IHBjbXVpbworRGVzY3JpcHRpb246IEEgZHJpdmVyIGZvciB0aGUgUENNLVVJTzQ4QSBhbmQgUENNLVVJTzk2QSBib2FyZHMgZnJvbSBXaW5zeXN0ZW1zLgorRGV2aWNlczogW1dpbnN5c3RlbXNdIFBDTS1VSU80OEEgKHBjbXVpbzQ4KSwgUENNLVVJTzk2QSAocGNtdWlvOTYpCitBdXRob3I6IENhbGluIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KK1VwZGF0ZWQ6IEZyaSwgMTMgSmFuIDIwMDYgMTI6MDE6MDEgLTA1MDAKK1N0YXR1czogd29ya3MKKworQSBkcml2ZXIgZm9yIHRoZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC10by1wcm9ncmFtIFBDTS1VSU80OEEgYW5kCitQQ00tVUlPOTZBIGJvYXJkcyBmcm9tIFdpbnN5c3RlbXMuICBUaGVzZSBib2FyZHMgdXNlIGVpdGhlciBvbmUgb3IgdHdvCisoaW4gdGhlIDk2LURJTyB2ZXJzaW9uKSBXUzE2QzQ4IEFTSUMgSGlnaERlbnNpdHkgSS9PIENoaXBzIChIRElPKS4KK1RoaXMgY2hpcCBpcyBpbnRlcmVzdGluZyBpbiB0aGF0IGVhY2ggSS9PIGxpbmUgaXMgaW5kaXZpZHVhbGx5Citwcm9ncmFtbWFibGUgZm9yIElOUFVUIG9yIE9VVFBVVCAodGh1cyBjb21lZGlfZGlvX2NvbmZpZyBjYW4gYmUgZG9uZQorb24gYSBwZXItY2hhbm5lbCBiYXNpcykuICBBbHNvLCBlYWNoIGNoaXAgc3VwcG9ydHMgZWRnZS10cmlnZ2VyZWQKK2ludGVycnVwdHMgZm9yIHRoZSBmaXJzdCAyNCBJL08gbGluZXMuICBPZiBjb3Vyc2UsIHNpbmNlIHRoZQorOTYtY2hhbm5lbCB2ZXJzaW9uIG9mIHRoZSBib2FyZCBoYXMgdHdvIEFTSUNzLCBpdCBjYW4gZGV0ZWN0IHBvbGFyaXR5CitjaGFuZ2VzIG9uIHVwIHRvIDQ4IEkvTyBsaW5lcy4gIFNpbmNlIHRoaXMgaXMgZXNzZW50aWFsbHkgYW4gKG5vbi1QblApCitJU0EgYm9hcmQsIEkvTyBBZGRyZXNzIGFuZCBJUlEgc2VsZWN0aW9uIGFyZSBkb25lIHRocm91Z2gganVtcGVycyBvbgordGhlIGJvYXJkLiAgWW91IG5lZWQgdG8gcGFzcyB0aGF0IGluZm9ybWF0aW9uIHRvIHRoaXMgZHJpdmVyIGFzIHRoZQorZmlyc3QgYW5kIHNlY29uZCBjb21lZGlfY29uZmlnIG9wdGlvbiwgcmVzcGVjdGl2ZWx5LiAgTm90ZSB0aGF0IHRoZQorNDgtY2hhbm5lbCB2ZXJzaW9uIHVzZXMgMTYgYnl0ZXMgb2YgSU8gbWVtb3J5IGFuZCB0aGUgOTYtY2hhbm5lbAordmVyc2lvbiB1c2VzIDMyLWJ5dGVzIChpbiBjYXNlIHlvdSBhcmUgd29ycmllZCBhYm91dCBjb25mbGljdHMpLiAgVGhlCis0OC1jaGFubmVsIGJvYXJkIGlzIHNwbGl0IGludG8gdHdvIDI0LWNoYW5uZWwgY29tZWRpIHN1YmRldmljZXMuCitUaGUgOTYtY2hhbm5lbCBib2FyZCBpcyBzcGxpdCBpbnRvIDQgMjQtY2hhbm5lbCBESU8gc3ViZGV2aWNlcy4KKworTm90ZSB0aGF0IElSUSBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkLCBidXQgaXQgaXMgdW50ZXN0ZWQuCisKK1RvIHVzZSBlZGdlLWRldGVjdGlvbiBJUlEgc3VwcG9ydCwgcGFzcyB0aGUgSVJRcyBvZiBib3RoIEFTSUNTCisoZm9yIHRoZSA5NiBjaGFubmVsIHZlcnNpb24pIG9yIGp1c3QgMSBBU0lDIChmb3IgNDgtY2hhbm5lbCB2ZXJzaW9uKS4KK1RoZW4sIHVzZSB1c2UgY29tZWRpX2NvbW1hbmRzIHdpdGggVFJJR19OT1cuCitZb3VyIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhbiBlZGdlIGlzIHRyaWdnZXJlZCwgYW5kIHRoZSBkYXRhCit2YWx1ZXMgd2lsbCBiZSB0d28gc2FtcGxlX3Qncywgd2hpY2ggc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBmb3JtIG9uZQorMzItYml0IHVuc2lnbmVkIGludC4gIFRoaXMgdmFsdWUgaXMgdGhlIG1hc2sgb2YgY2hhbm5lbHMgdGhhdCBoYWQKK2VkZ2VzIGRldGVjdGVkIGZyb20geW91ciBjaGFubmVsIGxpc3QuICBOb3RlIHRoYXQgdGhlIGJpdHMgcG9zaXRpb25zCitpbiB0aGUgbWFzayBjb3JyZXNwb25kIHRvIHBvc2l0aW9ucyBpbiB5b3VyIGNoYW5saXN0IHdoZW4geW91IHNwZWNpZmllZAordGhlIGNvbW1hbmQgYW5kICpub3QqIGNoYW5uZWwgaWQncyEKKworVG8gc2V0IHRoZSBwb2xhcml0eSBvZiB0aGUgZWRnZS1kZXRlY3Rpb24gaW50ZXJydXB0cyBwYXNzIGEgbm9uemVybyB2YWx1ZSBmb3IKK2VpdGhlciBDUl9SQU5HRSBvciBDUl9BUkVGIGZvciBlZGdlLXVwIHBvbGFyaXR5LCBvciBhIHplcm8gdmFsdWUgZm9yIGJvdGgKK0NSX1JBTkdFIGFuZCBDUl9BUkVGIGlmIHlvdSB3YW50IGVkZ2UtZG93biBwb2xhcml0eS4KKworSW4gdGhlIDQ4LWNoYW5uZWwgdmVyc2lvbjoKKworT24gc3ViZGV2IDAsIHRoZSBmaXJzdCAyNCBjaGFubmVscyBjaGFubmVscyBhcmUgZWRnZS1kZXRlY3QgY2hhbm5lbHMuCisKK0luIHRoZSA5Ni1jaGFubmVsIGJvYXJkIHlvdSBoYXZlIHRoZSBjb2xsb3dpbmcgY2hhbm5lbHMgdGhhdCBjYW4gZG8gZWRnZSBkZXRlY3Rpb246CisKK3N1YmRldiAwLCBjaGFubmVscyAwLTI0ICAoZmlyc3QgMjQgY2hhbm5lbHMgb2YgMXN0IEFTSUMpCitzdWJkZXYgMiwgY2hhbm5lbHMgMC0yNCAgKGZpcnN0IDI0IGNoYW5uZWxzIG9mIDJuZCBBU0lDKQorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKGZvciBmaXJzdCBBU0lDLCBvciBmaXJzdCAyNCBjaGFubmVscykKKyAgWzJdIC0gSVJRIGZvciBzZWNvbmQgQVNJQyAocGNtdWlvOTYgb25seSAtIElSUSBmb3IgY2hhbnMgNDgtNzIgLi4gY2FuIGJlIHRoZSBzYW1lIGFzIGZpcnN0IGlycSEpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIGZvciBQQ0kgZGV2aWNlcyAqLworCisjZGVmaW5lIE1JTihhLGIpICggKChhKSA8IChiKSkgPyAoYSkgOiAoYikgKQorI2RlZmluZSBDSEFOU19QRVJfUE9SVCAgIDgKKyNkZWZpbmUgUE9SVFNfUEVSX0FTSUMgICA2CisjZGVmaW5lIElOVFJfUE9SVFNfUEVSX0FTSUMgICAzCisjZGVmaW5lIE1BWF9DSEFOU19QRVJfU1VCREVWIDI0CS8qIG51bWJlciBvZiBjaGFubmVscyBwZXIgY29tZWRpIHN1YmRldmljZSAqLworI2RlZmluZSBQT1JUU19QRVJfU1VCREVWIChNQVhfQ0hBTlNfUEVSX1NVQkRFVi9DSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgQ0hBTlNfUEVSX0FTSUMgKENIQU5TX1BFUl9QT1JUKlBPUlRTX1BFUl9BU0lDKQorI2RlZmluZSBJTlRSX0NIQU5TX1BFUl9BU0lDIDI0CisjZGVmaW5lIElOVFJfUE9SVFNfUEVSX1NVQkRFViAoSU5UUl9DSEFOU19QRVJfQVNJQy9DSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgTUFYX0RJT19DSEFOUyAgIChQT1JUU19QRVJfQVNJQyoyKkNIQU5TX1BFUl9QT1JUKQorI2RlZmluZSBNQVhfQVNJQ1MgICAgICAgKE1BWF9ESU9fQ0hBTlMvQ0hBTlNfUEVSX0FTSUMpCisjZGVmaW5lIFNERVZfTk8gKChpbnQpKHMgLSBkZXYtPnN1YmRldmljZXMpKQorI2RlZmluZSBDQUxDX05fU1VCREVWUyhuY2hhbnMpICgobmNoYW5zKS9NQVhfQ0hBTlNfUEVSX1NVQkRFViArICghISgobmNoYW5zKSVNQVhfQ0hBTlNfUEVSX1NVQkRFVikpIC8qKyAobmNoYW5zID4gSU5UUl9DSEFOU19QRVJfQVNJQyA/IDIgOiAxKSovKQorLyogSU8gTWVtb3J5IHNpemVzICovCisjZGVmaW5lIEFTSUNfSU9TSVpFICgweDEwKQorI2RlZmluZSBQQ01VSU80OF9JT1NJWkUgQVNJQ19JT1NJWkUKKyNkZWZpbmUgUENNVUlPOTZfSU9TSVpFIChBU0lDX0lPU0laRSoyKQorCisvKiBTb21lIG9mZnNldHMgLSB0aGVzZSBhcmUgYWxsIGluIHRoZSAxNmJ5dGUgSU8gbWVtb3J5IG9mZnNldCBmcm9tCisgICB0aGUgYmFzZSBhZGRyZXNzLiAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgcGFnaW5nIHNjaGVtZSB0byBzd2FwIG91dAorICAgb2Zmc2V0cyAweDgtMHhBIHVzaW5nIHRoZSBQQUdFTE9DSyByZWdpc3Rlci4gIFNlZSB0aGUgdGFibGUgYmVsb3cuCisKKyAgUmVnaXN0ZXIocykgICAgICAgUGFnZXMgICAgICAgIFIvVz8gICAgICAgIERlc2NyaXB0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJFR19QT1JUeCAgICAgICAgIEFsbCAgICAgICAgICBSL1cgICAgICAgICBSZWFkL1dyaXRlL0NvbmZpZ3VyZSBJTworICBSRUdfSU5UX1BFTkRJTkcgICBBbGwgICAgICAgICAgUmVhZE9ubHkgICAgUXVpY2tseSBzZWUgd2hpY2ggSU5UX0lEeCBoYXMgaW50LgorICBSRUdfUEFHRUxPQ0sgICAgICBBbGwgICAgICAgICAgV3JpdGVPbmx5ICAgU2VsZWN0IGEgcGFnZQorICBSRUdfUE9MeCAgICAgICAgICBQZy4gMSBvbmx5ICAgV3JpdGVPbmx5ICAgU2VsZWN0IGVkZ2UtZGV0ZWN0aW9uIHBvbGFyaXR5CisgIFJFR19FTkFCeCAgICAgICAgIFBnLiAyIG9ubHkgICBXcml0ZU9ubHkgICBFbmFibGUvRGlzYWJsZSBlZGdlLWRldGVjdC4gaW50LgorICBSRUdfSU5UX0lEeCAgICAgICBQZy4gMyBvbmx5ICAgUi9XICAgICAgICAgU2VlIHdoaWNoIHBvcnRzL2JpdHMgaGF2ZSBpbnRzLgorICovCisjZGVmaW5lIFJFR19QT1JUMCAweDAKKyNkZWZpbmUgUkVHX1BPUlQxIDB4MQorI2RlZmluZSBSRUdfUE9SVDIgMHgyCisjZGVmaW5lIFJFR19QT1JUMyAweDMKKyNkZWZpbmUgUkVHX1BPUlQ0IDB4NAorI2RlZmluZSBSRUdfUE9SVDUgMHg1CisjZGVmaW5lIFJFR19JTlRfUEVORElORyAweDYKKyNkZWZpbmUgUkVHX1BBR0VMT0NLIDB4NwkvKiBwYWdlIHNlbGVjdG9yIHJlZ2lzdGVyLCB1cHBlciAyIGJpdHMgc2VsZWN0IGEgcGFnZQorCQkJCSAgIGFuZCBiaXRzIDAtNSBhcmUgdXNlZCB0byAnbG9jayBkb3duJyBhIHBhcnRpY3VsYXIKKwkJCQkgICBwb3J0IGFib3ZlIHRvIG1ha2UgaXQgcmVhZG9ubHkuICAqLworI2RlZmluZSBSRUdfUE9MMCAweDgKKyNkZWZpbmUgUkVHX1BPTDEgMHg5CisjZGVmaW5lIFJFR19QT0wyIDB4QQorI2RlZmluZSBSRUdfRU5BQjAgMHg4CisjZGVmaW5lIFJFR19FTkFCMSAweDkKKyNkZWZpbmUgUkVHX0VOQUIyIDB4QQorI2RlZmluZSBSRUdfSU5UX0lEMCAweDgKKyNkZWZpbmUgUkVHX0lOVF9JRDEgMHg5CisjZGVmaW5lIFJFR19JTlRfSUQyIDB4QQorCisjZGVmaW5lIE5VTV9QQUdFRF9SRUdTIDMKKyNkZWZpbmUgTlVNX1BBR0VTIDQKKyNkZWZpbmUgRklSU1RfUEFHRURfUkVHIDB4OAorI2RlZmluZSBSRUdfUEFHRV9CSVRPRkZTRVQgNgorI2RlZmluZSBSRUdfTE9DS19CSVRPRkZTRVQgMAorI2RlZmluZSBSRUdfUEFHRV9NQVNLICh+KCgweDE8PFJFR19QQUdFX0JJVE9GRlNFVCktMSkpCisjZGVmaW5lIFJFR19MT0NLX01BU0sgfihSRUdfUEFHRV9NQVNLKQorI2RlZmluZSBQQUdFX1BPTCAxCisjZGVmaW5lIFBBR0VfRU5BQiAyCisjZGVmaW5lIFBBR0VfSU5UX0lEIDMKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdHdvIGltYWdpbmFyeSBib2FyZHMuICBEZXNjcmliaW5nIHRoZQorICogYm9hcmRzIGluIHRoaXMgd2F5IGlzIG9wdGlvbmFsLCBhbmQgY29tcGxldGVseSBkcml2ZXItZGVwZW5kZW50LgorICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCisgKi8KK3N0cnVjdCBwY211aW9fYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgaW50IG51bV9hc2ljczsKKwljb25zdCBpbnQgbnVtX2NoYW5uZWxzX3Blcl9wb3J0OworCWNvbnN0IGludCBudW1fcG9ydHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbXVpb19ib2FyZCBwY211aW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY211aW80OCIsCisJICAgICAgbnVtX2FzaWNzOjEsCisJICAgICAgbnVtX3BvcnRzOjYsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY211aW85NiIsCisJICAgICAgbnVtX2FzaWNzOjIsCisJICAgICAgbnVtX3BvcnRzOjEyLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNtdWlvX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIHN1YmRldmljZS4gICovCitzdHJ1Y3QgcGNtdWlvX3N1YmRldl9wcml2YXRlIHsKKwkvKiBtYXBwaW5nIG9mIGhhbGZ3b3JkcyAoYnl0ZXMpIGluIHBvcnQvY2hhbmFycmF5IHRvIGlvYmFzZSAqLworCXVuc2lnbmVkIGxvbmcgaW9iYXNlc1tQT1JUU19QRVJfU1VCREVWXTsKKworCS8qIFRoZSBiZWxvdyBpcyBvbmx5IHVzZWQgZm9yIGludHIgc3ViZGV2aWNlcyAqLworCXN0cnVjdCB7CisJCWludCBhc2ljOwkvKiBpZiBub24tbmVnYXRpdmUsIHRoaXMgc3ViZGV2IGhhcyBhbiBpbnRlcnJ1cHQgYXNpYyAqLworCQlpbnQgZmlyc3RfY2hhbjsJLyogaWYgbm9ubmVnYXRpdmUsIHRoZSBmaXJzdCBjaGFubmVsIGlkIGZvcgorCQkJCSAgIGludGVycnVwdHMuICovCisJCWludCBudW1fYXNpY19jaGFuczsJLyogdGhlIG51bWJlciBvZiBhc2ljIGNoYW5uZWxzIGluIHRoaXMgc3ViZGV2CisJCQkJCSAgIHRoYXQgaGF2ZSBpbnRlcnJ1dHBzICovCisJCWludCBhc2ljX2NoYW47CS8qIGlmIG5vbm5lZ2F0aXZlLCB0aGUgZmlyc3QgY2hhbm5lbCBpZCB3aXRoCisJCQkJICAgcmVzcGVjdCB0byB0aGUgYXNpYyB0aGF0IGhhcyBpbnRlcnJ1cHRzICovCisJCWludCBlbmFibGVkX21hc2s7CS8qIHN1YmRldi1yZWxhdGl2ZSBjaGFubmVsIG1hc2sgZm9yIGNoYW5uZWxzCisJCQkJCSAgIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisJCWludCBhY3RpdmU7CisJCWludCBzdG9wX2NvdW50OworCQlpbnQgY29udGludW91czsKKwkJc3BpbmxvY2tfdCBzcGlubG9jazsKKwl9IGludHI7Cit9OworCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgcGNtdWlvX3ByaXZhdGUgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgcGFnZWxvY2s7CS8qIGN1cnJlbnQgcGFnZSBhbmQgbG9jayAqLworCQl1bnNpZ25lZCBjaGFyIHBvbFtOVU1fUEFHRURfUkVHU107CS8qIHNoYWRvdyBvZiBQT0x4IHJlZ2lzdGVycyAqLworCQl1bnNpZ25lZCBjaGFyIGVuYWJbTlVNX1BBR0VEX1JFR1NdOwkvKiBzaGFkb3cgb2YgRU5BQnggcmVnaXN0ZXJzICovCisJCWludCBudW07CisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCQl1bnNpZ25lZCBpbnQgaXJxOworCQlzcGlubG9ja190IHNwaW5sb2NrOworCX0gYXNpY3NbTUFYX0FTSUNTXTsKKwlzdHJ1Y3QgcGNtdWlvX3N1YmRldl9wcml2YXRlICpzcHJpdnM7Cit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbXVpb19wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBzdWJwcml2ICgoc3RydWN0IHBjbXVpb19zdWJkZXZfcHJpdmF0ZSAqKXMtPnByaXZhdGUpCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY211aW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNtdWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtdWlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY211aW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbXVpb19kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjbXVpb19ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKyAgICAgIGJvYXJkX25hbWU6JnBjbXVpb19ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbXVpb19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjbXVpb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwY211aW9fYm9hcmQpLAorfTsKKworc3RhdGljIGludCBwY211aW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY211aW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNtdWlvKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIHZvaWQgcGNtdWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKKy8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggc3BlY2lmaWNzIG9mIHRoaXMgZGV2aWNlJ3MgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCBpbml0X2FzaWNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsJLyogc2V0cyB1cC9jbGVhcnMgQVNJQyBjaGlwcyB0byBkZWZhdWx0cyAqLworc3RhdGljIHZvaWQgc3dpdGNoX3BhZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcGFnZSk7CisjaWZkZWYgbm90dXNlZAorc3RhdGljIHZvaWQgbG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpOworc3RhdGljIHZvaWQgdW5sb2NrX3BvcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcG9ydCk7CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjbXVpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHNkZXZfbm8sIGNoYW5zX2xlZnQsIG5fc3ViZGV2cywgcG9ydCwgYXNpYywgdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxW01BWF9BU0lDU107CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpcnFbMF0gPSBpdC0+b3B0aW9uc1sxXTsKKwlpcnFbMV0gPSBpdC0+b3B0aW9uc1syXTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwKKwkJCXRoaXNib2FyZC0+bnVtX2FzaWNzICogQVNJQ19JT1NJWkUsCisJCQlkcml2ZXIuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNtdWlvX3ByaXZhdGUpKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5udW0gPSBhc2ljOworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgPSBkZXYtPmlvYmFzZSArIGFzaWMgKiBBU0lDX0lPU0laRTsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxID0gMDsJLyogdGhpcyBnZXRzIGFjdHVhbGx5IHNldCBhdCB0aGUgZW5kIG9mCisJCQkJCQkgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2UKKwkJCQkJCSAgIGNvbWVkaV9yZXF1ZXN0X2lycXMgKi8KKwkJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrKTsKKwl9CisKKwljaGFuc19sZWZ0ID0gQ0hBTlNfUEVSX0FTSUMgKiB0aGlzYm9hcmQtPm51bV9hc2ljczsKKwluX3N1YmRldnMgPSBDQUxDX05fU1VCREVWUyhjaGFuc19sZWZ0KTsKKwlkZXZwcml2LT5zcHJpdnMgPQorCQlrY2FsbG9jKG5fc3ViZGV2cywgc2l6ZW9mKHN0cnVjdCBwY211aW9fc3ViZGV2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldnByaXYtPnNwcml2cykgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqCisJICogQWxsb2NhdGUgMiBzdWJkZXZzICgzMiArIDE2IERJTyBsaW5lcykgb3IgMyAzMiBESU8gc3ViZGV2cyBmb3IgdGhlCisJICogOTYtY2hhbm5lbCB2ZXJzaW9uIG9mIHRoZSBib2FyZC4KKwkgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2cykgPCAwKSB7CisJCXByaW50aygiY2Fubm90IGFsbG9jYXRlIHN1YmRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwb3J0ID0gMDsKKwlhc2ljID0gMDsKKwlmb3IgKHNkZXZfbm8gPSAwOyBzZGV2X25vIDwgKGludClkZXYtPm5fc3ViZGV2aWNlczsgKytzZGV2X25vKSB7CisJCWludCBieXRlX25vOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzZGV2X25vOworCQlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+aW5zbl9iaXRzID0gcGNtdWlvX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gcGNtdWlvX2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+bl9jaGFuID0gTUlOKGNoYW5zX2xlZnQsIE1BWF9DSEFOU19QRVJfU1VCREVWKTsKKwkJc3VicHJpdi0+aW50ci5hc2ljID0gLTE7CisJCXN1YnByaXYtPmludHIuZmlyc3RfY2hhbiA9IC0xOworCQlzdWJwcml2LT5pbnRyLmFzaWNfY2hhbiA9IC0xOworCQlzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zID0gLTE7CisJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKworCQkvKiBzYXZlIHRoZSBpb3BvcnQgYWRkcmVzcyBmb3IgZWFjaCAncG9ydCcgb2YgOCBjaGFubmVscyBpbiB0aGUKKwkJICAgc3ViZGV2aWNlICovCisJCWZvciAoYnl0ZV9ubyA9IDA7IGJ5dGVfbm8gPCBQT1JUU19QRVJfU1VCREVWOyArK2J5dGVfbm8sICsrcG9ydCkgeworCQkJaWYgKHBvcnQgPj0gUE9SVFNfUEVSX0FTSUMpIHsKKwkJCQlwb3J0ID0gMDsKKwkJCQkrK2FzaWM7CisJCQkJdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwkJCX0KKwkJCXN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub10gPQorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIHBvcnQ7CisKKwkJCWlmICh0aGlzYXNpY19jaGFuY3QgPAorCQkJCUNIQU5TX1BFUl9QT1JUICogSU5UUl9QT1JUU19QRVJfQVNJQworCQkJCSYmIHN1YnByaXYtPmludHIuYXNpYyA8IDApIHsKKwkJCQkvKiB0aGlzIGlzIGFuIGludGVycnVwdCBzdWJkZXZpY2UsIHNvIHNldHVwIHRoZSBzdHJ1Y3QgKi8KKwkJCQlzdWJwcml2LT5pbnRyLmFzaWMgPSBhc2ljOworCQkJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwkJCQlzdWJwcml2LT5pbnRyLnN0b3BfY291bnQgPSAwOworCQkJCXN1YnByaXYtPmludHIuZmlyc3RfY2hhbiA9IGJ5dGVfbm8gKiA4OworCQkJCXN1YnByaXYtPmludHIuYXNpY19jaGFuID0gdGhpc2FzaWNfY2hhbmN0OworCQkJCXN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnMgPQorCQkJCQlzLT5uX2NoYW4gLSBzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW47CisJCQkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJCQlzLT5jYW5jZWwgPSBwY211aW9fY2FuY2VsOworCQkJCXMtPmRvX2NtZCA9IHBjbXVpb19jbWQ7CisJCQkJcy0+ZG9fY21kdGVzdCA9IHBjbXVpb19jbWR0ZXN0OworCQkJCXMtPmxlbl9jaGFubGlzdCA9IHN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnM7CisJCQl9CisJCQl0aGlzYXNpY19jaGFuY3QgKz0gQ0hBTlNfUEVSX1BPUlQ7CisJCX0KKwkJc3Bpbl9sb2NrX2luaXQoJnN1YnByaXYtPmludHIuc3BpbmxvY2spOworCisJCWNoYW5zX2xlZnQgLT0gcy0+bl9jaGFuOworCisJCWlmICghY2hhbnNfbGVmdCkgeworCQkJYXNpYyA9IDA7CS8qIHJlc2V0IHRoZSBhc2ljIHRvIG91ciBmaXJzdCBhc2ljLCB0byBkbyBpbnRyIHN1YmRldnMgKi8KKwkJCXBvcnQgPSAwOworCQl9CisKKwl9CisKKwlpbml0X2FzaWNzKGRldik7CS8qIGNsZWFyIG91dCBhbGwgdGhlIHJlZ2lzdGVycywgYmFzaWNhbGx5ICovCisKKwlmb3IgKGFzaWMgPSAwOyBpcnFbMF0gJiYgYXNpYyA8IE1BWF9BU0lDUzsgKythc2ljKSB7CisJCWlmIChpcnFbYXNpY10KKwkJCSYmIGNvbWVkaV9yZXF1ZXN0X2lycShpcnFbYXNpY10sIGludGVycnVwdF9wY211aW8sCisJCQkJSVJRRl9TSEFSRUQsIHRoaXNib2FyZC0+bmFtZSwgZGV2KSkgeworCQkJaW50IGk7CisJCQkvKiB1bnJvbGwgdGhlIGFsbG9jYXRlZCBpcnFzLi4gKi8KKwkJCWZvciAoaSA9IGFzaWMgLSAxOyBpID49IDA7IC0taSkgeworCQkJCWNvbWVkaV9mcmVlX2lycShpcnFbaV0sIGRldik7CisJCQkJZGV2cHJpdi0+YXNpY3NbaV0uaXJxID0gaXJxW2ldID0gMDsKKwkJCX0KKwkJCWlycVthc2ljXSA9IDA7CisJCX0KKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxID0gaXJxW2FzaWNdOworCX0KKworCWRldi0+aXJxID0gaXJxWzBdOwkvKiBncnIuLiB3aXNoIGNvbWVkaSBkZXYgc3RydWN0IHN1cHBvcnRlZCBtdWx0aXBsZQorCQkJCSAgIGlycXMuLiAqLworCisJaWYgKGlycVswXSkgeworCQlwcmludGsoImlycTogJXUgIiwgaXJxWzBdKTsKKwkJaWYgKGlycVsxXSAmJiB0aGlzYm9hcmQtPm51bV9hc2ljcyA9PSAyKQorCQkJcHJpbnRrKCJzZWNvbmQgQVNJQyBpcnE6ICV1ICIsIGlycVsxXSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIoSVJRIG1vZGUgZGlzYWJsZWQpICIpOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQVNJQ19JT1NJWkUgKiB0aGlzYm9hcmQtPm51bV9hc2ljcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FTSUNTOyArK2kpIHsKKwkJaWYgKGRldnByaXYtPmFzaWNzW2ldLmlycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXZwcml2LT5hc2ljc1tpXS5pcnEsIGRldik7CisJfQorCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+c3ByaXZzKQorCQlrZnJlZShkZXZwcml2LT5zcHJpdnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBwY211aW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGJ5dGVfbm87CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOT1RFOgorCSAgIHJlYWRpbmcgYSAwIG1lYW5zIHRoaXMgY2hhbm5lbCB3YXMgaGlnaAorCSAgIHdyaXRpbmUgYSAwIHNldHMgdGhlIGNoYW5uZWwgaGlnaAorCSAgIHJlYWRpbmcgYSAxIG1lYW5zIHRoaXMgY2hhbm5lbCB3YXMgbG93CisJICAgd3JpdGluZyBhIDEgbWVhbnMgc2V0IHRoaXMgY2hhbm5lbCBsb3cKKworCSAgIFRoZXJlZm9yZSBldmVyeXRoaW5nIGlzIGFsd2F5cyBpbnZlcnRlZC4gKi8KKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkvKiBERUJVRyAqLworCXByaW50aygid3JpdGUgbWFzazogJTA4eCAgZGF0YTogJTA4eFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisjZW5kaWYKKworCXMtPnN0YXRlID0gMDsKKworCWZvciAoYnl0ZV9ubyA9IDA7IGJ5dGVfbm8gPCBzLT5uX2NoYW4gLyBDSEFOU19QRVJfUE9SVDsgKytieXRlX25vKSB7CisJCS8qIGFkZHJlc3Mgb2YgOC1iaXQgcG9ydCAqLworCQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IHN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub10sCisJCQkvKiBiaXQgb2Zmc2V0IG9mIHBvcnQgaW4gMzItYml0IGRvdWJsZXdvcmQgKi8KKwkJCW9mZnNldCA9IGJ5dGVfbm8gKiA4OworCQkvKiB0aGlzIDgtYml0IHBvcnQncyBkYXRhICovCisJCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDAsCisJCQkvKiBUaGUgd3JpdGUgbWFzayBmb3IgdGhpcyBwb3J0IChpZiBhbnkpICovCisJCQl3cml0ZV9tYXNrX2J5dGUgPSAoZGF0YVswXSA+PiBvZmZzZXQpICYgMHhmZiwKKwkJCS8qIFRoZSBkYXRhIGJ5dGUgZm9yIHRoaXMgcG9ydCAqLworCQkJZGF0YV9ieXRlID0gKGRhdGFbMV0gPj4gb2Zmc2V0KSAmIDB4ZmY7CisKKwkJYnl0ZSA9IGluYihpb2FkZHIpOwkvKiByZWFkIGFsbCA4LWJpdHMgZm9yIHRoaXMgcG9ydCAqLworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkJLyogREVCVUcgKi8KKwkJcHJpbnRrKCJieXRlICVkIHdtYiAlMDJ4IGRiICUwMnggb2Zmc2V0ICUwMmQgaW8gJTA0eCwgZGF0YV9pbiAlMDJ4ICIsIGJ5dGVfbm8sICh1bnNpZ25lZCl3cml0ZV9tYXNrX2J5dGUsICh1bnNpZ25lZClkYXRhX2J5dGUsIG9mZnNldCwgaW9hZGRyLCAodW5zaWduZWQpYnl0ZSk7CisjZW5kaWYKKworCQlpZiAod3JpdGVfbWFza19ieXRlKSB7CisJCQkvKiB0aGlzIGJ5dGUgaGFzIHNvbWUgd3JpdGVfYml0cyAtLSBzbyBzZXQgdGhlIG91dHB1dCBsaW5lcyAqLworCQkJYnl0ZSAmPSB+d3JpdGVfbWFza19ieXRlOwkvKiBjbGVhciBiaXRzIGZvciB3cml0ZSBtYXNrICovCisJCQlieXRlIHw9IH5kYXRhX2J5dGUgJiB3cml0ZV9tYXNrX2J5dGU7CS8qIHNldCB0byBpbnZlcnRlZCBkYXRhX2J5dGUgKi8KKwkJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IHN0YXRlICovCisJCQlvdXRiKGJ5dGUsIGlvYWRkcik7CisJCX0KKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCQkvKiBERUJVRyAqLworCQlwcmludGsoImRhdGFfb3V0X2J5dGUgJTAyeFxuIiwgKHVuc2lnbmVkKWJ5dGUpOworI2VuZGlmCisJCS8qIHNhdmUgdGhlIGRpZ2l0YWwgaW5wdXQgbGluZXMgZm9yIHRoaXMgYnl0ZS4uICovCisJCXMtPnN0YXRlIHw9ICgodW5zaWduZWQgaW50KWJ5dGUpIDw8IG9mZnNldDsKKwl9CisKKwkvKiBub3cgcmV0dXJuIHRoZSBESU8gbGluZXMgdG8gZGF0YVsxXSAtIG5vdGUgdGhleSBjYW1lIGludmVydGVkISAqLworCWRhdGFbMV0gPSB+cy0+c3RhdGU7CisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCS8qIERFQlVHICovCisJcHJpbnRrKCJzLT5zdGF0ZSAlMDh4IGRhdGFfb3V0ICUwOHhcbiIsIHMtPnN0YXRlLCBkYXRhWzFdKTsKKyNlbmRpZgorCisJcmV0dXJuIDI7Cit9CisKKy8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYworICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgYnl0ZV9ubyA9IGNoYW4gLyA4LCBiaXRfbm8gPQorCQljaGFuICUgODsKKwl1bnNpZ25lZCBsb25nIGlvYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKwkvKiBDb21wdXRlIGlvYWRkciBmb3IgdGhpcyBjaGFubmVsICovCisJaW9hZGRyID0gc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXTsKKworCS8qIE5PVEU6CisJICAgd3JpdGluZyBhIDAgYW4gSU8gY2hhbm5lbCdzIGJpdCBzZXRzIHRoZSBjaGFubmVsIHRvIElOUFVUCisJICAgYW5kIHB1bGxzIHRoZSBsaW5lIGhpZ2ggYXMgd2VsbAorCisJICAgd3JpdGluZyBhIDEgdG8gYW4gSU8gY2hhbm5lbCdzICBiaXQgcHVsbHMgdGhlIGxpbmUgbG93CisKKwkgICBBbGwgY2hhbm5lbHMgYXJlIGltcGxpY2l0bHkgYWx3YXlzIGluIE9VVFBVVCBtb2RlIC0tIGJ1dCB3aGVuCisJICAgdGhleSBhcmUgaGlnaCB0aGV5IGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIGluIElOUFVUIG1vZGUuLgorCisJICAgVGh1cywgd2Ugb25seSBmb3JjZSBjaGFubmVscyBsb3cgaWYgdGhlIGNvbmZpZyByZXF1ZXN0IHdhcyBJTlBVVCwKKwkgICBvdGhlcndpc2Ugd2UgZG8gbm90aGluZyB0byB0aGUgaGFyZHdhcmUuICAgICovCisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCS8qIHNhdmUgdG8gaW9fYml0cyAtLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBzaW5jZQorCQkgICBhbGwgaW5wdXQgY2hhbm5lbHMgYXJlIGFsc28gb3V0cHV0IGNoYW5uZWxzLi4uICovCisJCXMtPmlvX2JpdHMgfD0gMSA8PCBjaGFuOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJLyogd3JpdGUgYSAwIHRvIHRoZSBhY3R1YWwgcmVnaXN0ZXIgcmVwcmVzZW50aW5nIHRoZSBjaGFubmVsCisJCSAgIHRvIHNldCBpdCB0byAnaW5wdXQnLiAgMCBtZWFucyAiZmxvYXQgaGlnaCIuICovCisJCWJ5dGUgPSBpbmIoaW9hZGRyKTsKKwkJYnl0ZSAmPSB+KDEgPDwgYml0X25vKTsKKwkJCQkvKio8IHNldCBpbnB1dCBjaGFubmVsIHRvICcwJyAqLworCisJCS8qIHdyaXRlIG91dCBieXRlIC0tIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBhY3R1YWxseSBhZmZlY3QgdGhlCisJCSAgIGhhcmR3YXJlIGFzIGFsbCBjaGFubmVscyBhcmUgaW1wbGljaXRseSBvdXRwdXQgLS0gYnV0IGlucHV0CisJCSAgIGNoYW5uZWxzIGFyZSBzZXQgdG8gZmxvYXQtaGlnaCAqLworCQlvdXRiKGJ5dGUsIGlvYWRkcik7CisKKwkJLyogc2F2ZSB0byBpb19iaXRzICovCisJCXMtPmlvX2JpdHMgJj0gfigxIDw8IGNoYW4pOworCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQkvKiByZXRyZWl2ZSBmcm9tIHNoYWRvdyByZWdpc3RlciAqLworCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfYXNpY3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CQkJCS8qIHNldHMgdXAgYW4KKwkJCQkgICBBU0lDIGNoaXAgdG8gZGVmYXVsdHMgKi8KKwlpbnQgYXNpYzsKKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCB0aGlzYm9hcmQtPm51bV9hc2ljczsgKythc2ljKSB7CisJCWludCBwb3J0LCBwYWdlOworCQl1bnNpZ25lZCBsb25nIGJhc2VhZGRyID0gZGV2LT5pb2Jhc2UgKyBhc2ljICogQVNJQ19JT1NJWkU7CisKKwkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCAwKTsJLyogc3dpdGNoIGJhY2sgdG8gcGFnZSAwICovCisKKwkJLyogZmlyc3QsIGNsZWFyIGFsbCB0aGUgRElPIHBvcnQgYml0cyAqLworCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVFNfUEVSX0FTSUM7ICsrcG9ydCkKKwkJCW91dGIoMCwgYmFzZWFkZHIgKyBSRUdfUE9SVDAgKyBwb3J0KTsKKworCQkvKiBOZXh0LCBjbGVhciBhbGwgdGhlIHBhZ2VkIHJlZ2lzdGVycyBmb3IgZWFjaCBwYWdlICovCisJCWZvciAocGFnZSA9IDE7IHBhZ2UgPCBOVU1fUEFHRVM7ICsrcGFnZSkgeworCQkJaW50IHJlZzsKKwkJCS8qIG5vdyBjbGVhciBhbGwgdGhlIHBhZ2VkIHJlZ2lzdGVycyAqLworCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBwYWdlKTsKKwkJCWZvciAocmVnID0gRklSU1RfUEFHRURfUkVHOworCQkJCXJlZyA8IEZJUlNUX1BBR0VEX1JFRyArIE5VTV9QQUdFRF9SRUdTOyArK3JlZykKKwkJCQlvdXRiKDAsIGJhc2VhZGRyICsgcmVnKTsKKwkJfQorCisJCS8qIERFQlVHICBzZXQgcmlzaW5nIGVkZ2UgaW50ZXJydXB0cyBvbiBwb3J0MCBvZiBib3RoIGFzaWNzICovCisJCS8qc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX1BPTCk7CisJCSAgIG91dGIoMHhmZiwgYmFzZWFkZHIgKyBSRUdfUE9MMCk7CisJCSAgIHN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9FTkFCKTsKKwkJICAgb3V0YigweGZmLCBiYXNlYWRkciArIFJFR19FTkFCMCk7ICovCisJCS8qIEVORCBERUJVRyAqLworCisJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgMCk7CS8qIHN3aXRjaCBiYWNrIHRvIGRlZmF1bHQgcGFnZSAwICovCisKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN3aXRjaF9wYWdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBhZ2UpCit7CisJaWYgKGFzaWMgPCAwIHx8IGFzaWMgPj0gdGhpc2JvYXJkLT5udW1fYXNpY3MpCisJCXJldHVybjsJCS8qIHBhcmFub2lhICovCisJaWYgKHBhZ2UgPCAwIHx8IHBhZ2UgPj0gTlVNX1BBR0VTKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayAmPSB+UkVHX1BBR0VfTUFTSzsKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayB8PSBwYWdlIDw8IFJFR19QQUdFX0JJVE9GRlNFVDsKKworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldi0+aW9iYXNlICsgQVNJQ19JT1NJWkUgKiBhc2ljICsgUkVHX1BBR0VMT0NLKTsKK30KKworI2lmZGVmIG5vdHVzZWQKK3N0YXRpYyB2b2lkIGxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+bnVtX2FzaWNzKQorCQlyZXR1cm47CQkvKiBwYXJhbm9pYSAqLworCWlmIChwb3J0IDwgMCB8fCBwb3J0ID49IFBPUlRTX1BFUl9BU0lDKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayB8PSAweDEgPDwgcG9ydDsKKwkvKiBub3cgd3JpdGUgb3V0IHRoZSBzaGFkb3cgcmVnaXN0ZXIgKi8KKwlvdXRiKGRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrLAorCQlkZXYtPmlvYmFzZSArIEFTSUNfSU9TSVpFICogYXNpYyArIFJFR19QQUdFTE9DSyk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpCit7CisJaWYgKGFzaWMgPCAwIHx8IGFzaWMgPj0gdGhpc2JvYXJkLT5udW1fYXNpY3MpCisJCXJldHVybjsJCS8qIHBhcmFub2lhICovCisJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPj0gUE9SVFNfUEVSX0FTSUMpCisJCXJldHVybjsJCS8qIG1vcmUgcGFyYW5vaWEgKi8KKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayAmPSB+KDB4MSA8PCBwb3J0KSB8IFJFR19MT0NLX01BU0s7CisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2LT5pb2Jhc2UgKyBBU0lDX0lPU0laRSAqIGFzaWMgKyBSRUdfUEFHRUxPQ0spOworfQorI2VuZGlmIC8qIG5vdHVzZWQgKi8KKworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY211aW8oaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgYXNpYywgZ290MSA9IDA7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCisJZm9yIChhc2ljID0gMDsgYXNpYyA8IE1BWF9BU0lDUzsgKythc2ljKSB7CisJCWlmIChpcnEgPT0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJdW5zaWduZWQgdHJpZ2dlcmVkID0gMDsKKwkJCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlOworCQkJLyogaXQgaXMgYW4gaW50ZXJydXB0IGZvciBBU0lDICNhc2ljICovCisJCQl1bnNpZ25lZCBjaGFyIGludF9wZW5kOworCisJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrLAorCQkJCWZsYWdzKTsKKworCQkJaW50X3BlbmQgPSBpbmIoaW9iYXNlICsgUkVHX0lOVF9QRU5ESU5HKSAmIDB4MDc7CisKKwkJCWlmIChpbnRfcGVuZCkgeworCQkJCWludCBwb3J0OworCQkJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBJTlRSX1BPUlRTX1BFUl9BU0lDOworCQkJCQkrK3BvcnQpIHsKKwkJCQkJaWYgKGludF9wZW5kICYgKDB4MSA8PCBwb3J0KSkgeworCQkJCQkJdW5zaWduZWQgY2hhcgorCQkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPSAwOworCQkJCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLAorCQkJCQkJCVBBR0VfSU5UX0lEKTsKKwkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPQorCQkJCQkJCWluYihpb2Jhc2UgKworCQkJCQkJCVJFR19JTlRfSUQwICsgcG9ydCk7CisKKwkJCQkJCWlmIChpb19saW5lc193aXRoX2VkZ2VzKQorCQkJCQkJCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJCQkJCQkJb3V0YigwLCBpb2Jhc2UgKworCQkJCQkJCQlSRUdfSU5UX0lEMCArCisJCQkJCQkJCXBvcnQpOworCisJCQkJCQl0cmlnZ2VyZWQgfD0KKwkJCQkJCQlpb19saW5lc193aXRoX2VkZ2VzIDw8CisJCQkJCQkJcG9ydCAqIDg7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkrK2dvdDE7CisJCQl9CisKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hc2ljc1thc2ljXS4KKwkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQlpZiAodHJpZ2dlcmVkKSB7CisJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJCQkJLyogVE9ETyBoZXJlOiBkaXNwYXRjaCBpbyBsaW5lcyB0byBzdWJkZXZzIHdpdGggY29tbWFuZHMuLiAqLworCQkJCXByaW50aygiUENNVUlPIERFQlVHOiBnb3QgZWRnZSBkZXRlY3QgaW50ZXJydXB0ICVkIGFzaWMgJWQgd2hpY2hfY2hhbnM6ICUwNnhcbiIsIGlycSwgYXNpYywgdHJpZ2dlcmVkKTsKKwkJCQlmb3IgKHMgPSBkZXYtPnN1YmRldmljZXM7CisJCQkJCXMgPCBkZXYtPnN1YmRldmljZXMgKyBkZXYtPm5fc3ViZGV2aWNlczsKKwkJCQkJKytzKSB7CisJCQkJCWlmIChzdWJwcml2LT5pbnRyLmFzaWMgPT0gYXNpYykgewkvKiB0aGlzIGlzIGFuIGludGVycnVwdCBzdWJkZXYsIGFuZCBpdCBtYXRjaGVzIHRoaXMgYXNpYyEgKi8KKwkJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQkJCQl1bnNpZ25lZCBvbGRldmVudHM7CisKKwkJCQkJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZQorCQkJCQkJCSgmc3VicHJpdi0+aW50ci4KKwkJCQkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQkJCQlvbGRldmVudHMgPSBzLT5hc3luYy0+ZXZlbnRzOworCisJCQkJCQlpZiAoc3VicHJpdi0+aW50ci5hY3RpdmUpIHsKKwkJCQkJCQl1bnNpZ25lZCBteXRyaWcgPQorCQkJCQkJCQkoKHRyaWdnZXJlZCA+PgorCQkJCQkJCQkJc3VicHJpdi0+CisJCQkJCQkJCQlpbnRyLgorCQkJCQkJCQkJYXNpY19jaGFuKQorCQkJCQkJCQkmICgoMHgxIDw8IHN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnMpIC0gMSkpIDw8IHN1YnByaXYtPmludHIuZmlyc3RfY2hhbjsKKwkJCQkJCQlpZiAobXl0cmlnICYgc3VicHJpdi0+CisJCQkJCQkJCWludHIuCisJCQkJCQkJCWVuYWJsZWRfbWFzaykgeworCQkJCQkJCQl1bnNpZ25lZCBpbnQgdmFsID0KKwkJCQkJCQkJCTA7CisJCQkJCQkJCXVuc2lnbmVkIGludCBuLAorCQkJCQkJCQkJY2gsIGxlbjsKKworCQkJCQkJCQlsZW4gPSBzLT5hc3luYy0+CisJCQkJCQkJCQljbWQuCisJCQkJCQkJCQljaGFubGlzdF9sZW47CisJCQkJCQkJCWZvciAobiA9IDA7CisJCQkJCQkJCQluIDwgbGVuOworCQkJCQkJCQkJbisrKSB7CisJCQkJCQkJCQljaCA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtuXSk7CisJCQkJCQkJCQlpZiAobXl0cmlnICYgKDFVIDw8IGNoKSkgeworCQkJCQkJCQkJCXZhbCB8PSAoMVUgPDwgbik7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQkJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KKwkJCQkJCQkJaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVswXSkKKwkJCQkJCQkJCSYmCisJCQkJCQkJCQljb21lZGlfYnVmX3B1dAorCQkJCQkJCQkJKHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVsxXSkpIHsKKwkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1MpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJLyogT3ZlcmZsb3chIFN0b3AgYWNxdWlzaXRpb24hISAqLworCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJcGNtdWlvX3N0b3BfaW50cgorCQkJCQkJCQkJCShkZXYsCisJCQkJCQkJCQkJcyk7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvKiBDaGVjayBmb3IgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJCQkJCQlpZiAoIXN1YnByaXYtPgorCQkJCQkJCQkJaW50ci4KKwkJCQkJCQkJCWNvbnRpbnVvdXMpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIHN0b3Bfc3JjID09IFRSSUdfQ09VTlQgKi8KKwkJCQkJCQkJCWlmIChzdWJwcml2LT5pbnRyLnN0b3BfY291bnQgPiAwKSB7CisJCQkJCQkJCQkJc3VicHJpdi0+CisJCQkJCQkJCQkJCWludHIuCisJCQkJCQkJCQkJCXN0b3BfY291bnQtLTsKKwkJCQkJCQkJCQlpZiAoc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID09IDApIHsKKwkJCQkJCQkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCQkJCQkJCQkvKiBUT0RPOiBTVE9QX0FDUVVJU0lUSU9OX0NBTExfSEVSRSEhICovCisJCQkJCQkJCQkJCXBjbXVpb19zdG9wX2ludHIKKwkJCQkJCQkJCQkJCShkZXYsCisJCQkJCQkJCQkJCQlzKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlCisJCQkJCQkJKCZzdWJwcml2LT5pbnRyLgorCQkJCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCQkJCWlmIChvbGRldmVudHMgIT0KKwkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzKSB7CisJCQkJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJCQl9CisKKwkJCQkJfQorCisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJaWYgKCFnb3QxKQorCQlyZXR1cm4gSVJRX05PTkU7CS8qIGludGVycnVwdCBmcm9tIG90aGVyIHNvdXJjZSAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcGNtdWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBucG9ydHMsIGZpcnN0cG9ydCwgYXNpYywgcG9ydDsKKworCWlmICgoYXNpYyA9IHN1YnByaXYtPmludHIuYXNpYykgPCAwKQorCQlyZXR1cm47CQkvKiBub3QgYW4gaW50ZXJydXB0IHN1YmRldiAqLworCisJc3VicHJpdi0+aW50ci5lbmFibGVkX21hc2sgPSAwOworCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJbnBvcnRzID0gc3VicHJpdi0+aW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCWZpcnN0cG9ydCA9IHN1YnByaXYtPmludHIuYXNpY19jaGFuIC8gQ0hBTlNfUEVSX1BPUlQ7CisJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX0VOQUIpOworCWZvciAocG9ydCA9IGZpcnN0cG9ydDsgcG9ydCA8IGZpcnN0cG9ydCArIG5wb3J0czsgKytwb3J0KSB7CisJCS8qIGRpc2FibGUgYWxsIGludHJzIGZvciB0aGlzIHN1YmRldi4uICovCisJCW91dGIoMCwgZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX0VOQUIwICsgcG9ydCk7CisJfQorfQorCitzdGF0aWMgaW50IHBjbXVpb19zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKCFzdWJwcml2LT5pbnRyLmNvbnRpbnVvdXMgJiYgc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID09IDApIHsKKwkJLyogQW4gZW1wdHkgYWNxdWlzaXRpb24hICovCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJc3VicHJpdi0+aW50ci5hY3RpdmUgPSAwOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBiaXRzID0gMCwgcG9sX2JpdHMgPSAwLCBuOworCQlpbnQgbnBvcnRzLCBmaXJzdHBvcnQsIGFzaWMsIHBvcnQ7CisJCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCQlpZiAoKGFzaWMgPSBzdWJwcml2LT5pbnRyLmFzaWMpIDwgMCkKKwkJCXJldHVybiAxOwkvKiBub3QgYW4gaW50ZXJydXB0CisJCQkJCSAgIHN1YmRldiAqLworCQlzdWJwcml2LT5pbnRyLmVuYWJsZWRfbWFzayA9IDA7CisJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMTsKKwkJbnBvcnRzID0gc3VicHJpdi0+aW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCQlmaXJzdHBvcnQgPSBzdWJwcml2LT5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCQlpZiAoY21kLT5jaGFubGlzdCkgeworCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCQliaXRzIHw9ICgxVSA8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pKTsKKwkJCQlwb2xfYml0cyB8PSAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W25dKQorCQkJCQl8fCBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKSA/IDFVIDogMFUpCisJCQkJCTw8IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CisJCQl9CisJCX0KKwkJYml0cyAmPSAoKDB4MSA8PCBzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zKSAtCisJCQkxKSA8PCBzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW47CisJCXN1YnByaXYtPmludHIuZW5hYmxlZF9tYXNrID0gYml0czsKKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCWZvciAocG9ydCA9IGZpcnN0cG9ydDsgcG9ydCA8IGZpcnN0cG9ydCArIG5wb3J0czsgKytwb3J0KSB7CisJCQl1bnNpZ25lZCBlbmFiID0KKwkJCQliaXRzID4+IChzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW4gKyAocG9ydCAtCisJCQkJCWZpcnN0cG9ydCkgKiA4KSAmIDB4ZmYsIHBvbCA9CisJCQkJcG9sX2JpdHMgPj4gKHN1YnByaXYtPmludHIuZmlyc3RfY2hhbiArIChwb3J0IC0KKwkJCQkJZmlyc3Rwb3J0KSAqIDgpICYgMHhmZjsKKwkJCS8qIHNldCBlbmFiIGludHJzIGZvciB0aGlzIHN1YmRldi4uICovCisJCQlvdXRiKGVuYWIsCisJCQkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX0VOQUIwICsgcG9ydCk7CisJCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfUE9MKTsKKwkJCW91dGIocG9sLAorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbXVpb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHN1YnByaXYtPmludHIuYWN0aXZlKQorCQlwY211aW9fc3RvcF9pbnRyKGRldiwgcyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdHJpZ2dlciBmdW5jdGlvbiB0byBzdGFydCBhY3F1aXNpdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitwY211aW9faW50dHJpZ19zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJaWYgKHN1YnByaXYtPmludHIuYWN0aXZlKSB7CisJCWV2ZW50ID0gcGNtdWlvX3N0YXJ0X2ludHIoZGV2LCBzKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChldmVudCkgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICdkb19jbWQnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBldmVudCA9IDA7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlzdWJwcml2LT5pbnRyLmFjdGl2ZSA9IDE7CisKKwkvKiBTZXQgdXAgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJc3VicHJpdi0+aW50ci5jb250aW51b3VzID0gMDsKKwkJc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT05FICovCisJCXN1YnByaXYtPmludHIuY29udGludW91cyA9IDE7CisJCXN1YnByaXYtPmludHIuc3RvcF9jb3VudCA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB1cCBzdGFydCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBwY211aW9faW50dHJpZ19zdGFydF9pbnRyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PVyAqLworCQlldmVudCA9IHBjbXVpb19zdGFydF9pbnRyKGRldiwgcyk7CisJCWJyZWFrOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+aW50ci5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGV2ZW50KSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZHRlc3QnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3BjbXVpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gKFRSSUdfTk9XIHwgVFJJR19JTlQpOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSAoVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwkvKiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyB8fCBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogYW55IGNvdW50IGFsbG93ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwkvKiBpZiAoZXJyKSByZXR1cm4gNDsgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wbHg5MDUyLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTQ3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oCisgICAgRGVmaW5pdGlvbnMgZm9yIHRoZSBQTFgtOTA1MiBQQ0kgaW50ZXJmYWNlIGNoaXAKKworICAgIENvcHlyaWdodCAoQykgMjAwMiBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9QTFg5MDUyX0hfCisjZGVmaW5lIF9QTFg5MDUyX0hfCisKKy8qCisgKiBQTFggUENJOTA1MiBJTlRDU1IgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1IJMHg0QwkvKiBPZmZzZXQgaW4gTG9jYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKy8qIExvY2FsIEludGVycnVwdCAxIEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFFTkFCX01BU0sJCTB4MDAwMQorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFFTkFCX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxRU5BQl9FTkFCTEVECQkweDAwMDEKKy8qIExvY2FsIEludGVycnVwdCAxIFBvbGFyaXR5ICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9NQVNLCQkweDAwMDIKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0xPVwkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdICQkweDAwMDIKKy8qIExvY2FsIEludGVycnVwdCAxIFN0YXR1cyAocmVhZC1vbmx5KSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTVEFUX01BU0sJCTB4MDAwNAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTVEFUX0lOQUNUSVZFCQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9BQ1RJVkUJCTB4MDAwNAorLyogTG9jYWwgSW50ZXJydXB0IDIgRW5hYmxlICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMkVOQUJfTUFTSwkJMHgwMDA4CisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMkVOQUJfRElTQUJMRUQJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJFTkFCX0VOQUJMRUQJCTB4MDAwOAorLyogTG9jYWwgSW50ZXJydXB0IDIgUG9sYXJpdHkgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX01BU0sJCTB4MDAxMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJQT0xfTE9XCQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX0hJR0gJCTB4MDAxMAorLyogTG9jYWwgSW50ZXJydXB0IDIgU3RhdHVzIChyZWFkLW9ubHkpICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlNUQVRfTUFTSwkJMHgwMDIwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlNUQVRfSU5BQ1RJVkUJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTVEFUX0FDVElWRQkJMHgwMDIwCisvKiBQQ0kgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX01BU0sJCTB4MDA0MAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9FTkFCTEVECQkweDAwNDAKKy8qIFNvZnR3YXJlIEludGVycnVwdCAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9TT0ZUSU5UX01BU0sJCTB4MDA4MAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9TT0ZUSU5UX1VOQVNTRVJURUQJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX1NPRlRJTlRfQVNTRVJURUQJCTB4MDA4MAorLyogTG9jYWwgSW50ZXJydXB0IDEgU2VsZWN0IEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTRUxfTUFTSwkJMHgwMTAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9MRVZFTAkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9FREdFCQkweDAxMDAKKy8qIExvY2FsIEludGVycnVwdCAyIFNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyU0VMX01BU0sJCTB4MDIwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTRUxfTEVWRUwJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTRUxfRURHRQkJMHgwMjAwCisvKiBMb2NhbCBFZGdlIFRyaWdnZXJhYmxlIEludGVycnVwdCAxIENsZWFyIEJpdCAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfTUFTSwkJMHgwNDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMUNMUklOVF9VTkFTU0VSVEVECTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQJMHgwNDAwCisvKiBMb2NhbCBFZGdlIFRyaWdnZXJhYmxlIEludGVycnVwdCAyIENsZWFyIEJpdCAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJDTFJJTlRfTUFTSwkJMHgwODAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMkNMUklOVF9VTkFTU0VSVEVECTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJDTFJJTlRfQVNTRVJURUQJMHgwODAwCisvKiBJU0EgSW50ZXJmYWNlIE1vZGUgRW5hYmxlIChyZWFkLW9ubHkgb3ZlciBQQ0kgYnVzKSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9JU0FNT0RFX01BU0sJCTB4MTAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9JU0FNT0RFX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfSVNBTU9ERV9FTkFCTEVECQkweDEwMDAKKworI2VuZGlmIC8qIF9QTFg5MDUyX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA4MC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BseDkwODAuaAppbmRleCBhNWExYTY4Li45MjMxYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA4MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wbHg5MDgwLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgX19DT01FRElfUExYOTA4MF9ICiAjZGVmaW5lIF9fQ09NRURJX1BMWDkwODBfSAogCi0vLyBkZXNjcmlwdG9yIGJsb2NrIHVzZWQgZm9yIGNoYWluZWQgZG1hIHRyYW5zZmVycworLyogIGRlc2NyaXB0b3IgYmxvY2sgdXNlZCBmb3IgY2hhaW5lZCBkbWEgdHJhbnNmZXJzICovCiBzdHJ1Y3QgcGx4X2RtYV9kZXNjIHsKIAl2b2xhdGlsZSB1aW50MzJfdCBwY2lfc3RhcnRfYWRkcjsKIAl2b2xhdGlsZSB1aW50MzJfdCBsb2NhbF9zdGFydF9hZGRyOwpAQCAtNTIsMTQgKzUyLDE0IEBACiAjZGVmaW5lICBMUk5HX0FOWTMyICAgICAgICAweDAwMDAwMDAwCS8qIExvY2F0ZSBhbnl3aGVyZSBpbiAzMiBiaXQgKi8KICNkZWZpbmUgIExSTkdfTFQxTUIgICAgICAgIDB4MDAwMDAwMDIJLyogTG9jYXRlIGluIDFzdCBtZWcgKi8KICNkZWZpbmUgIExSTkdfQU5ZNjQgICAgICAgIDB4MDAwMDAwMDQJLyogTG9jYXRlIGFueXdoZXJlIGluIDY0IGJpdCAqLwotI2RlZmluZSAgTFJOR19NRU1fTUFTSyAgICAgMHhmZmZmZmZmMAkvLyBiaXRzIHRoYXQgc3BlY2lmeSByYW5nZSBmb3IgbWVtb3J5IGlvCi0jZGVmaW5lICBMUk5HX0lPX01BU0sgICAgIDB4ZmZmZmZmZmEJLy8gYml0cyB0aGF0IHNwZWNpZnkgcmFuZ2UgZm9yIG5vcm1hbCBpbworI2RlZmluZSAgTFJOR19NRU1fTUFTSyAgICAgMHhmZmZmZmZmMAkvKiAgYml0cyB0aGF0IHNwZWNpZnkgcmFuZ2UgZm9yIG1lbW9yeSBpbyAqLworI2RlZmluZSAgTFJOR19JT19NQVNLICAgICAweGZmZmZmZmZhCS8qICBiaXRzIHRoYXQgc3BlY2lmeSByYW5nZSBmb3Igbm9ybWFsIGlvICovCiAKICNkZWZpbmUgUExYX0xBUzBNQVBfUkVHICAgICAgICAgMHgwMDA0CS8qIEwsIExvY2FsIEFkZHIgU3BhY2UgMCBSZW1hcCBSZWdpc3RlciAqLwogI2RlZmluZSBQTFhfTEFTMU1BUF9SRUcgICAgICAgICAweDAwZjQJLyogTCwgTG9jYWwgQWRkciBTcGFjZSAxIFJlbWFwIFJlZ2lzdGVyICovCiAjZGVmaW5lICBMTUFQX0VOICAgICAgICAgICAweDAwMDAwMDAxCS8qIEVuYWJsZSBzbGF2ZSBkZWNvZGUgKi8KLSNkZWZpbmUgIExNQVBfTUVNX01BU0sgICAgIDB4ZmZmZmZmZjAJLy8gYml0cyB0aGF0IHNwZWNpZnkgZGVjb2RlIGZvciBtZW1vcnkgaW8KLSNkZWZpbmUgIExNQVBfSU9fTUFTSyAgICAgMHhmZmZmZmZmYQkvLyBiaXRzIHRoYXQgc3BlY2lmeSBkZWNvZGUgYml0cyBmb3Igbm9ybWFsIGlvCisjZGVmaW5lICBMTUFQX01FTV9NQVNLICAgICAweGZmZmZmZmYwCS8qICBiaXRzIHRoYXQgc3BlY2lmeSBkZWNvZGUgZm9yIG1lbW9yeSBpbyAqLworI2RlZmluZSAgTE1BUF9JT19NQVNLICAgICAweGZmZmZmZmZhCS8qICBiaXRzIHRoYXQgc3BlY2lmeSBkZWNvZGUgYml0cyBmb3Igbm9ybWFsIGlvICovCiAKIC8qIE1vZGUvQXJiaXRyYXRpb24gUmVnaXN0ZXIuCiAqLwpAQCAtMTY5LDcgKzE2OSw3IEBACiAjZGVmaW5lICBJQ1NfQUVSUiAgICAgICAgICAweDAwMDAwMDAxCS8qIEFzc2VydCBMU0VSUiBvbiBBQk9SVCAqLwogI2RlZmluZSAgSUNTX1BFUlIgICAgICAgICAgMHgwMDAwMDAwMgkvKiBBc3NlcnQgTFNFUlIgb24gUGFyaXR5IEVycm9yICovCiAjZGVmaW5lICBJQ1NfU0VSUiAgICAgICAgICAweDAwMDAwMDA0CS8qIEdlbmVyYXRlIFBDSSBTRVJSIyAqLwotI2RlZmluZSAgSUNTX01CSUUgICAgICAgICAgMHgwMDAwMDAwOAkvLyBtYWlsYm94IGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgIElDU19NQklFICAgICAgICAgIDB4MDAwMDAwMDgJLyogIG1haWxib3ggaW50ZXJydXB0IGVuYWJsZSAqLwogI2RlZmluZSAgSUNTX1BJRSAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBQQ0kgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSAgSUNTX1BESUUgICAgICAgICAgMHgwMDAwMDIwMAkvKiBQQ0kgRG9vcmJlbGwgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSAgSUNTX1BBSUUgICAgICAgICAgMHgwMDAwMDQwMAkvKiBQQ0kgQWJvcnQgSW50ZXJydXB0IEVuYWJsZSAqLwpAQCAtMTkwLDcgKzE5MCw3IEBACiAjZGVmaW5lICBJQ1NfVEFfRE1BMCAgICAgICAweDAyMDAwMDAwCS8qIFRhcmdldCBBYm9ydCAtIERNQSAjMCAqLwogI2RlZmluZSAgSUNTX1RBX0RNQTEgICAgICAgMHgwNDAwMDAwMAkvKiBUYXJnZXQgQWJvcnQgLSBETUEgIzEgKi8KICNkZWZpbmUgIElDU19UQV9SQSAgICAgICAgIDB4MDgwMDAwMDAJLyogVGFyZ2V0IEFib3J0IC0gUmV0cnkgVGltZW91dCAqLwotI2RlZmluZSAgSUNTX01CSUEoeCkgICAgICAgKDB4MTAwMDAwMDAgPDwgKCh4KSAmIDB4MykpCS8vIG1haWxib3ggeCBpcyBhY3RpdmUKKyNkZWZpbmUgIElDU19NQklBKHgpICAgICAgICgweDEwMDAwMDAwIDw8ICgoeCkgJiAweDMpKQkvKiAgbWFpbGJveCB4IGlzIGFjdGl2ZSAqLwogCiAjZGVmaW5lIFBMWF9DT05UUk9MX1JFRyAgICAgICAgMHgwMDZDCS8qIEwsIEVFUFJPTSBDbnRsICYgUENJIENtZCBDb2RlcyAqLwogI2RlZmluZSAgQ1RMX1JETUEgICAgICAgICAgMHgwMDAwMDAwRQkvKiBETUEgUmVhZCBDb21tYW5kICovCkBAIC0yMDgsNTEgKzIwOCw1MSBAQAogI2RlZmluZSAgQ1RMX1JFU0VUICAgICAgICAgMHg0MDAwMDAwMAkvKiAhISBBZGFwdGVyIFJlc2V0ICEhICovCiAjZGVmaW5lICBDVExfUkVBRFkgICAgICAgICAweDgwMDAwMDAwCS8qIExvY2FsIEluaXQgRG9uZSAqLwogCi0jZGVmaW5lIFBMWF9JRF9SRUcJMHg3MAkvLyBoYXJkLWNvZGVkIHBseCB2ZW5kb3IgYW5kIGRldmljZSBpZHMKKyNkZWZpbmUgUExYX0lEX1JFRwkweDcwCS8qICBoYXJkLWNvZGVkIHBseCB2ZW5kb3IgYW5kIGRldmljZSBpZHMgKi8KIAotI2RlZmluZSBQTFhfUkVWSVNJT05fUkVHCTB4NzQJLy8gc2lsaWNvbiByZXZpc2lvbgorI2RlZmluZSBQTFhfUkVWSVNJT05fUkVHCTB4NzQJLyogIHNpbGljb24gcmV2aXNpb24gKi8KIAotI2RlZmluZSBQTFhfRE1BMF9NT0RFX1JFRwkweDgwCS8vIGRtYSBjaGFubmVsIDAgbW9kZSByZWdpc3RlcgotI2RlZmluZSBQTFhfRE1BMV9NT0RFX1JFRwkweDk0CS8vIGRtYSBjaGFubmVsIDAgbW9kZSByZWdpc3RlcgorI2RlZmluZSBQTFhfRE1BMF9NT0RFX1JFRwkweDgwCS8qICBkbWEgY2hhbm5lbCAwIG1vZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUExYX0RNQTFfTU9ERV9SRUcJMHg5NAkvKiAgZG1hIGNoYW5uZWwgMCBtb2RlIHJlZ2lzdGVyICovCiAjZGVmaW5lICBQTFhfTE9DQUxfQlVTXzE2X1dJREVfQklUUwkweDEKICNkZWZpbmUgIFBMWF9MT0NBTF9CVVNfMzJfV0lERV9CSVRTCTB4MwogI2RlZmluZSAgUExYX0xPQ0FMX0JVU19XSURUSF9NQVNLCTB4MwotI2RlZmluZSAgUExYX0RNQV9FTl9SRUFEWUlOX0JJVAkweDQwCS8vIGVuYWJsZSByZWFkeSBpbiBpbnB1dAotI2RlZmluZSAgUExYX0VOX0JURVJNX0JJVAkweDgwCS8vIGVuYWJsZSBCVEVSTSMgaW5wdXQKLSNkZWZpbmUgIFBMWF9ETUFfTE9DQUxfQlVSU1RfRU5fQklUCTB4MTAwCS8vIGVuYWJsZSBsb2NhbCBidXJzdCBtb2RlCi0jZGVmaW5lICBQTFhfRU5fQ0hBSU5fQklUCTB4MjAwCS8vIGVuYWJsZXMgY2hhaW5pbmcKLSNkZWZpbmUgIFBMWF9FTl9ETUFfRE9ORV9JTlRSX0JJVAkweDQwMAkvLyBlbmFibGVzIGludGVycnVwdCBvbiBkbWEgZG9uZQotI2RlZmluZSAgUExYX0xPQ0FMX0FERFJfQ09OU1RfQklUCTB4ODAwCS8vIGhvbGQgbG9jYWwgYWRkcmVzcyBjb25zdGFudCAoZG9uJ3QgaW5jcmVtZW50KQotI2RlZmluZSAgUExYX0RFTUFORF9NT0RFX0JJVAkweDEwMDAJLy8gZW5hYmxlcyBkZW1hbmQtbW9kZSBmb3IgZG1hIHRyYW5zZmVyCisjZGVmaW5lICBQTFhfRE1BX0VOX1JFQURZSU5fQklUCTB4NDAJLyogIGVuYWJsZSByZWFkeSBpbiBpbnB1dCAqLworI2RlZmluZSAgUExYX0VOX0JURVJNX0JJVAkweDgwCS8qICBlbmFibGUgQlRFUk0jIGlucHV0ICovCisjZGVmaW5lICBQTFhfRE1BX0xPQ0FMX0JVUlNUX0VOX0JJVAkweDEwMAkvKiAgZW5hYmxlIGxvY2FsIGJ1cnN0IG1vZGUgKi8KKyNkZWZpbmUgIFBMWF9FTl9DSEFJTl9CSVQJMHgyMDAJLyogIGVuYWJsZXMgY2hhaW5pbmcgKi8KKyNkZWZpbmUgIFBMWF9FTl9ETUFfRE9ORV9JTlRSX0JJVAkweDQwMAkvKiAgZW5hYmxlcyBpbnRlcnJ1cHQgb24gZG1hIGRvbmUgKi8KKyNkZWZpbmUgIFBMWF9MT0NBTF9BRERSX0NPTlNUX0JJVAkweDgwMAkvKiAgaG9sZCBsb2NhbCBhZGRyZXNzIGNvbnN0YW50IChkb24ndCBpbmNyZW1lbnQpICovCisjZGVmaW5lICBQTFhfREVNQU5EX01PREVfQklUCTB4MTAwMAkvKiAgZW5hYmxlcyBkZW1hbmQtbW9kZSBmb3IgZG1hIHRyYW5zZmVyICovCiAjZGVmaW5lICBQTFhfRU9UX0VOQUJMRV9CSVQJMHg0MDAwCiAjZGVmaW5lICBQTFhfU1RPUF9NT0RFX0JJVCAweDgwMDAKLSNkZWZpbmUgIFBMWF9ETUFfSU5UUl9QQ0lfQklUCTB4MjAwMDAJLy8gcm91dGVzIGRtYSBpbnRlcnJ1cHQgdG8gcGNpIGJ1cyAoaW5zdGVhZCBvZiBsb2NhbCBidXMpCisjZGVmaW5lICBQTFhfRE1BX0lOVFJfUENJX0JJVAkweDIwMDAwCS8qICByb3V0ZXMgZG1hIGludGVycnVwdCB0byBwY2kgYnVzIChpbnN0ZWFkIG9mIGxvY2FsIGJ1cykgKi8KIAotI2RlZmluZSBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUcJMHg4NAkvLyBwY2kgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQKKyNkZWZpbmUgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHCTB4ODQJLyogIHBjaSBhZGRyZXNzIHRoYXQgZG1hIHRyYW5zZmVycyBzdGFydCBhdCAqLwogI2RlZmluZSBQTFhfRE1BMV9QQ0lfQUREUkVTU19SRUcJMHg5OAogCi0jZGVmaW5lIFBMWF9ETUEwX0xPQ0FMX0FERFJFU1NfUkVHCTB4ODgJLy8gbG9jYWwgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQKKyNkZWZpbmUgUExYX0RNQTBfTE9DQUxfQUREUkVTU19SRUcJMHg4OAkvKiAgbG9jYWwgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQgKi8KICNkZWZpbmUgUExYX0RNQTFfTE9DQUxfQUREUkVTU19SRUcJMHg5YwogCi0jZGVmaW5lIFBMWF9ETUEwX1RSQU5TRkVSX1NJWkVfUkVHCTB4OGMJLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIChmaXJzdCAyMyBiaXRzKQorI2RlZmluZSBQTFhfRE1BMF9UUkFOU0ZFUl9TSVpFX1JFRwkweDhjCS8qICBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKGZpcnN0IDIzIGJpdHMpICovCiAjZGVmaW5lIFBMWF9ETUExX1RSQU5TRkVSX1NJWkVfUkVHCTB4YTAKIAotI2RlZmluZSBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRwkweDkwCS8vIGRlc2NyaXB0b3IgcG9pbnRlciByZWdpc3RlcgorI2RlZmluZSBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRwkweDkwCS8qICBkZXNjcmlwdG9yIHBvaW50ZXIgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUExYX0RNQTFfREVTQ1JJUFRPUl9SRUcJMHhhNAotI2RlZmluZSAgUExYX0RFU0NfSU5fUENJX0JJVAkweDEJLy8gZGVzY3JpcHRvciBpcyBsb2NhdGVkIGluIHBjaSBzcGFjZSAobm90IGxvY2FsIHNwYWNlKQotI2RlZmluZSAgUExYX0VORF9PRl9DSEFJTl9CSVQJMHgyCS8vIGVuZCBvZiBjaGFpbiBiaXQKLSNkZWZpbmUgIFBMWF9JTlRSX1RFUk1fQ09VTlQJMHg0CS8vIGludGVycnVwdCB3aGVuIHRoaXMgZGVzY3JpcHRvcidzIHRyYW5zZmVyIGlzIGZpbmlzaGVkCi0jZGVmaW5lICBQTFhfWEZFUl9MT0NBTF9UT19QQ0kgMHg4CS8vIHRyYW5zZmVyIGZyb20gbG9jYWwgdG8gcGNpIGJ1cyAobm90IHBjaSB0byBsb2NhbCkKKyNkZWZpbmUgIFBMWF9ERVNDX0lOX1BDSV9CSVQJMHgxCS8qICBkZXNjcmlwdG9yIGlzIGxvY2F0ZWQgaW4gcGNpIHNwYWNlIChub3QgbG9jYWwgc3BhY2UpICovCisjZGVmaW5lICBQTFhfRU5EX09GX0NIQUlOX0JJVAkweDIJLyogIGVuZCBvZiBjaGFpbiBiaXQgKi8KKyNkZWZpbmUgIFBMWF9JTlRSX1RFUk1fQ09VTlQJMHg0CS8qICBpbnRlcnJ1cHQgd2hlbiB0aGlzIGRlc2NyaXB0b3IncyB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLworI2RlZmluZSAgUExYX1hGRVJfTE9DQUxfVE9fUENJIDB4OAkvKiAgdHJhbnNmZXIgZnJvbSBsb2NhbCB0byBwY2kgYnVzIChub3QgcGNpIHRvIGxvY2FsKSAqLwogCi0jZGVmaW5lIFBMWF9ETUEwX0NTX1JFRwkweGE4CS8vIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIFBMWF9ETUEwX0NTX1JFRwkweGE4CS8qICBjb21tYW5kIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBQTFhfRE1BMV9DU19SRUcJMHhhOQotI2RlZmluZSAgUExYX0RNQV9FTl9CSVQJMHgxCS8vIGVuYWJsZSBkbWEgY2hhbm5lbAotI2RlZmluZSAgUExYX0RNQV9TVEFSVF9CSVQJMHgyCS8vIHN0YXJ0IGRtYSB0cmFuc2ZlcgotI2RlZmluZSAgUExYX0RNQV9BQk9SVF9CSVQJMHg0CS8vIGFib3J0IGRtYSB0cmFuc2ZlcgotI2RlZmluZSAgUExYX0NMRUFSX0RNQV9JTlRSX0JJVAkweDgJLy8gY2xlYXIgZG1hIGludGVycnVwdAotI2RlZmluZSAgUExYX0RNQV9ET05FX0JJVAkweDEwCS8vIHRyYW5zZmVyIGRvbmUgc3RhdHVzIGJpdAorI2RlZmluZSAgUExYX0RNQV9FTl9CSVQJMHgxCS8qICBlbmFibGUgZG1hIGNoYW5uZWwgKi8KKyNkZWZpbmUgIFBMWF9ETUFfU1RBUlRfQklUCTB4MgkvKiAgc3RhcnQgZG1hIHRyYW5zZmVyICovCisjZGVmaW5lICBQTFhfRE1BX0FCT1JUX0JJVAkweDQJLyogIGFib3J0IGRtYSB0cmFuc2ZlciAqLworI2RlZmluZSAgUExYX0NMRUFSX0RNQV9JTlRSX0JJVAkweDgJLyogIGNsZWFyIGRtYSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFBMWF9ETUFfRE9ORV9CSVQJMHgxMAkvKiAgdHJhbnNmZXIgZG9uZSBzdGF0dXMgYml0ICovCiAKLSNkZWZpbmUgUExYX0RNQTBfVEhSRVNIT0xEX1JFRwkweGIwCS8vIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcJMHhiMAkvKiAgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KIAogLyoKICAqIEFjY2Vzc2VzIG5lYXIgdGhlIGVuZCBvZiBtZW1vcnkgY2FuIGNhdXNlIHRoZSBQTFggY2hpcApAQCAtMzkyLDEyICszOTIsMTIgQEAKIAllbHNlCiAJCWRtYV9jc19hZGRyID0gaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHOwogCi0JLy8gYWJvcnQgZG1hIHRyYW5zZmVyIGlmIG5lY2Vzc2FyeQorCS8qICBhYm9ydCBkbWEgdHJhbnNmZXIgaWYgbmVjZXNzYXJ5ICovCiAJZG1hX3N0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKLQlpZiAoKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0VOX0JJVCkgPT0gMCkgeworCWlmICgoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSA9PSAwKQogCQlyZXR1cm4gMDsKLQl9Ci0JLy8gd2FpdCB0byBtYWtlIHN1cmUgZG9uZSBiaXQgaXMgemVybworCisJLyogIHdhaXQgdG8gbWFrZSBzdXJlIGRvbmUgYml0IGlzIHplcm8gKi8KIAlmb3IgKGkgPSAwOyAoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRE9ORV9CSVQpICYmIGkgPCB0aW1lb3V0OyBpKyspIHsKIAkJY29tZWRpX3VkZWxheSgxKTsKIAkJZG1hX3N0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKQEAgLTQwOCw5ICs0MDgsOSBAQAogCQkJY2hhbm5lbCk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkvLyBkaXNhYmxlIGFuZCBhYm9ydCBjaGFubmVsCisJLyogIGRpc2FibGUgYW5kIGFib3J0IGNoYW5uZWwgKi8KIAl3cml0ZWIoUExYX0RNQV9BQk9SVF9CSVQsIGRtYV9jc19hZGRyKTsKLQkvLyB3YWl0IGZvciBkbWEgZG9uZSBiaXQKKwkvKiAgd2FpdCBmb3IgZG1hIGRvbmUgYml0ICovCiAJZG1hX3N0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKIAlmb3IgKGkgPSAwOyAoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRE9ORV9CSVQpID09IDAgJiYgaSA8IHRpbWVvdXQ7IGkrKykgewogCQljb21lZGlfdWRlbGF5KDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGJmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcG9jLmMKKyAgICBNaW5pLWRyaXZlcnMgZm9yIFBPQyAoUGllY2Ugb2YgQ3JhcCkgYm9hcmRzCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBwb2MKK0Rlc2NyaXB0aW9uOiBHZW5lcmljIGRyaXZlciBmb3IgdmVyeSBzaW1wbGUgZGV2aWNlcworQXV0aG9yOiBkcworRGV2aWNlczogW0tlaXRobGV5IE1ldHJhYnl0ZV0gREFDLTAyIChkYWMwMiksIFtBZHZhbnRlY2hdIFBDTC03MzMgKHBjbDczMyksCisgIFBDTC03MzQgKHBjbDczNCkKK1VwZGF0ZWQ6IFNhdCwgMTYgTWFyIDIwMDIgMTc6MzQ6NDggLTA4MDAKK1N0YXR1czogdW5rbm93bgorCitUaGlzIGRyaXZlciBpcyBpbmRlbmRlZCB0byBzdXBwb3J0IHZlcnkgc2ltcGxlIElTQS1iYXNlZCBkZXZpY2VzLAoraW5jbHVkaW5nOgorICBkYWMwMiAtIEtlaXRobGV5IERBQy0wMiBhbmFsb2cgb3V0cHV0IGJvYXJkCisgIHBjbDczMyAtIEFkdmFudGVjaCBQQ0wtNzMzCisgIHBjbDczNCAtIEFkdmFudGVjaCBQQ0wtNzM0CisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKK3N0YXRpYyBpbnQgcG9jX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBvY19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCByZWFkYmFja19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgZGFjMDJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNsNzMzX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY2w3MzRfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0cnVjdCBib2FyZGRlZl9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGlvc2l6ZTsKKwlpbnQgKCpzZXR1cCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICopOworCWludCB0eXBlOworCWludCBuX2NoYW47CisJaW50IG5fYml0czsKKwlpbnQgKCp3aW5zbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqcmluc24pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwkJdW5zaWduZWQgaW50ICopOworCWludCAoKmluc25iaXRzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJCXVuc2lnbmVkIGludCAqKTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2U7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBib2FyZGRlZl9zdHJ1Y3QgYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYWMwMiIsCisJICAgICAgaW9zaXplOgk4LAorCQkJLy9zZXR1cDogICAgICAgICAgICAgICAgZGFjMDJfc2V0dXAsCisJICAgICAgdHlwZToJQ09NRURJX1NVQkRfQU8sCisJICAgICAgbl9jaGFuOgkyLAorCSAgICAgIG5fYml0czoJMTIsCisJICAgICAgd2luc246CWRhYzAyX2FvX3dpbnNuLAorCSAgICAgIHJpbnNuOglyZWFkYmFja19pbnNuLAorCSAgICAgIHJhbmdlOgkmcmFuZ2VfdW5rbm93biwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjbDczMyIsCisJICAgICAgaW9zaXplOgk0LAorCSAgICAgIHR5cGU6CUNPTUVESV9TVUJEX0RJLAorCSAgICAgIG5fY2hhbjoJMzIsCisJICAgICAgbl9iaXRzOgkxLAorCSAgICAgIGluc25iaXRzOnBjbDczM19pbnNuX2JpdHMsCisJICAgICAgcmFuZ2U6CSZyYW5nZV9kaWdpdGFsLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNsNzM0IiwKKwkgICAgICBpb3NpemU6CTQsCisJICAgICAgdHlwZToJQ09NRURJX1NVQkRfRE8sCisJICAgICAgbl9jaGFuOgkzMiwKKwkgICAgICBuX2JpdHM6CTEsCisJICAgICAgaW5zbmJpdHM6cGNsNzM0X2luc25fYml0cywKKwkgICAgICByYW5nZToJJnJhbmdlX2RpZ2l0YWwsCisJCX0sCit9OworCisjZGVmaW5lIG5fYm9hcmRzIChzaXplb2YoYm9hcmRzKS9zaXplb2YoYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBib2FyZGRlZl9zdHJ1Y3QgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wb2MgPSB7CisgICAgICBkcml2ZXJfbmFtZToicG9jIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwb2NfYXR0YWNoLAorICAgICAgZGV0YWNoOnBvY19kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YoYm9hcmRzWzBdKSwKK307CisKK3N0YXRpYyBpbnQgcG9jX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaW9zaXplOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcG9jOiB1c2luZyAlcyBpb2Jhc2UgMHglbHhcbiIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW9zaXplID0gdGhpc19ib2FyZC0+aW9zaXplOworCS8qIGNoZWNrIGlmIGlvIGFkZHJlc3NlcyBhcmUgYXZhaWxhYmxlICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvc2l6ZSwgImRhYzAyIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdDogZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnRzIDB4JWx4IHRvIDB4JWx4XG4iLCBpb2Jhc2UsIGlvYmFzZSArIGlvc2l6ZSAtIDEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YodW5zaWduZWQgaW50KSAqIHRoaXNfYm9hcmQtPm5fY2hhbikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IHRoaXNfYm9hcmQtPnR5cGU7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9jaGFuOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzX2JvYXJkLT5uX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlOworCXMtPmluc25fd3JpdGUgPSB0aGlzX2JvYXJkLT53aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSB0aGlzX2JvYXJkLT5yaW5zbjsKKwlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pbnNuYml0czsKKwlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9BTyB8fCBzLT50eXBlID09IENPTUVESV9TVUJEX0RPKSB7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvc2l6ZSk7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYWMwMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRiYWNrX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRhdGFbMF0gPSAoKHVuc2lnbmVkIGludCAqKSBkZXYtPnByaXZhdGUpW2NoYW5dOworCisJcmV0dXJuIDE7Cit9CisKKy8qIERBQy0wMiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgREFDMDJfTFNCKGEpCSgyICogYSkKKyNkZWZpbmUgREFDMDJfTVNCKGEpCSgyICogYSArIDEpCisKK3N0YXRpYyBpbnQgZGFjMDJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCB0ZW1wOworCWludCBjaGFuOworCWludCBvdXRwdXQ7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJKCh1bnNpZ25lZCBpbnQgKikgZGV2LT5wcml2YXRlKVtjaGFuXSA9IGRhdGFbMF07CisJb3V0cHV0ID0gZGF0YVswXTsKKyNpZmRlZiB3cm9uZworCS8vIGNvbnZlcnQgdG8gY29tcGxlbWVudGFyeSBiaW5hcnkgaWYgcmFuZ2UgaXMgYmlwb2xhcgorCWlmICgoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpICYgMHgyKSA9PSAwKQorCQlvdXRwdXQgPSB+b3V0cHV0OworI2VuZGlmCisJdGVtcCA9IChvdXRwdXQgPDwgNCkgJiAweGYwOworCW91dGIodGVtcCwgZGV2LT5pb2Jhc2UgKyBEQUMwMl9MU0IoY2hhbikpOworCXRlbXAgPSAob3V0cHV0ID4+IDQpICYgMHhmZjsKKwlvdXRiKHRlbXAsIGRldi0+aW9iYXNlICsgREFDMDJfTVNCKGNoYW4pKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjbDczM19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIDApOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIDEpIDw8IDgpOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIDIpIDw8IDE2KTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyAzKSA8PCAyNCk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY2w3MzRfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJaWYgKChkYXRhWzBdID4+IDApICYgMHhmZikKKwkJCW91dGIoKHMtPnN0YXRlID4+IDApICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAwKTsKKwkJaWYgKChkYXRhWzBdID4+IDgpICYgMHhmZikKKwkJCW91dGIoKHMtPnN0YXRlID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAxKTsKKwkJaWYgKChkYXRhWzBdID4+IDE2KSAmIDB4ZmYpCisJCQlvdXRiKChzLT5zdGF0ZSA+PiAxNikgJiAweGZmLCBkZXYtPmlvYmFzZSArIDIpOworCQlpZiAoKGRhdGFbMF0gPj4gMjQpICYgMHhmZikKKwkJCW91dGIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgMyk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1YzQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwpAQCAtMCwwICsxLDEzNjMgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKworICAgIFF1YXRlY2ggREFRUCBQQ01DSUEgZGF0YSBjYXB0dXJlIGNhcmRzIENPTUVESSBjbGllbnQgZHJpdmVyCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAzIEJyZW50IEJhY2NhbGEgPGJhY2NhbGFAZnJlZXNvZnQub3JnPgorICAgIFRoZSBEQVFQIGludGVyZmFjZSBjb2RlIGluIHRoaXMgZmlsZSBpcyByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgICBodHRwOi8vd3d3LmNvbWVkaS5vcmcvCisKKyAgICBxdWF0ZWNoX2RhcXBfY3MuYyAxLjEwCisKKyAgICBEb2N1bWVudGF0aW9uIGZvciB0aGUgREFRUCBQQ01DSUEgY2FyZHMgY2FuIGJlIGZvdW5kIG9uIFF1YXRlY2gncyBzaXRlOgorCisgICAgICAgICAgICAgICAgZnRwOi8vZnRwLnF1YXRlY2guY29tL01hbnVhbHMvZGFxcC0yMDgucGRmCisKKyAgICBUaGlzIG1hbnVhbCBpcyBmb3IgYm90aCB0aGUgREFRUC0yMDggYW5kIHRoZSBEQVFQLTMwOC4KKworICAgIFdoYXQgd29ya3M6CisKKwktIEEvRCBjb252ZXJzaW9uCisJICAgIC0gOCBjaGFubmVscworCSAgICAtIDQgZ2FpbiByYW5nZXMKKwkgICAgLSBncm91bmQgcmVmIG9yIGRpZmZlcmVudGlhbAorCSAgICAtIHNpbmdsZS1zaG90IGFuZCB0aW1lZCBib3RoIHN1cHBvcnRlZAorCS0gRC9BIGNvbnZlcnNpb24sIHNpbmdsZS1zaG90CisJLSBkaWdpdGFsIEkvTworCisgICAgV2hhdCBkb2Vzbid0OgorCisJLSBhbnkga2luZCBvZiB0cmlnZ2VyaW5nIC0gZXh0ZXJuYWwgb3IgRC9BIGNoYW5uZWwgMQorCS0gdGhlIGNhcmQncyBvcHRpb25hbCBleHBhbnNpb24gYm9hcmQKKwktIHRoZSBjYXJkJ3MgdGltZXIgKGZvciBhbnl0aGluZyBvdGhlciB0aGFuIEEvRCBjb252ZXJzaW9uKQorCS0gRC9BIHVwZGF0ZSBtb2RlcyBvdGhlciB0aGFuIGltbWVkaWF0ZSAoaS5lLCB0aW1lZCkKKwktIGZhbmNpZXIgdGltaW5nIG1vZGVzCisJLSBzZXR0aW5nIGNhcmQncyBGSUZPIGJ1ZmZlciB0aHJlc2hvbGRzIHRvIGFueXRoaW5nIGJ1dCBkZWZhdWx0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorRHJpdmVyOiBxdWF0ZWNoX2RhcXBfY3MKK0Rlc2NyaXB0aW9uOiBRdWF0ZWNoIERBUVAgUENNQ0lBIGRhdGEgY2FwdHVyZSBjYXJkcworQXV0aG9yOiBCcmVudCBCYWNjYWxhIDxiYWNjYWxhQGZyZWVzb2Z0Lm9yZz4KK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtRdWF0ZWNoXSBEQVFQLTIwOCAoZGFxcCksIERBUVAtMzA4CisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKworI2lmZGVmIFBDTUNJQV9ERUJVRworc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKK21vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0gInF1YXRlY2hfZGFxcF9jcy5jIDEuMTAgMjAwMy8wNC8yMSAoQnJlbnQgQmFjY2FsYSkiOworI2Vsc2UKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKKyNlbmRpZgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBzZXBhcmF0ZSBEQVFQIGRldmljZXMgd2UnbGwgYWxsb3cgKi8KKyNkZWZpbmUgTUFYX0RFViAgICAgICAgIDQKKworc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCWludCB0YWJsZV9pbmRleDsKKwljaGFyIGJvYXJkX25hbWVbMzJdOworCisJZW51bSB7IHNlbWFwaG9yZSwgYnVmZmVyIH0gaW50ZXJydXB0X21vZGU7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGVvczsKKworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGNvdW50OworfTsKKworLyogQSBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSBkZXZpY2UuICovCisKK3N0YXRpYyBzdHJ1Y3QgbG9jYWxfaW5mb190ICpkZXZfdGFibGVbTUFYX0RFVl0gPSB7IE5VTEwsIC8qIC4uLiAqLyAgfTsKKworLyogVGhlIERBUVAgY29tbXVuaWNhdGVzIHdpdGggdGhlIHN5c3RlbSB0aHJvdWdoIGEgMTYgYnl0ZSBJL08gd2luZG93LiAqLworCisjZGVmaW5lIERBUVBfRklGT19TSVpFCQk0MDk2CisKKyNkZWZpbmUgREFRUF9GSUZPCQkwCisjZGVmaW5lIERBUVBfU0NBTkxJU1QJCTEKKyNkZWZpbmUgREFRUF9DT05UUk9MCQkyCisjZGVmaW5lIERBUVBfU1RBVFVTCQkyCisjZGVmaW5lIERBUVBfRElHSVRBTF9JTwkJMworI2RlZmluZSBEQVFQX1BBQ0VSX0xPVwkJNAorI2RlZmluZSBEQVFQX1BBQ0VSX01JRAkJNQorI2RlZmluZSBEQVFQX1BBQ0VSX0hJR0gJCTYKKyNkZWZpbmUgREFRUF9DT01NQU5ECQk3CisjZGVmaW5lIERBUVBfREEJCQk4CisjZGVmaW5lIERBUVBfVElNRVIJCTEwCisjZGVmaW5lIERBUVBfQVVYCQkxNQorCisjZGVmaW5lIERBUVBfU0NBTkxJU1RfRElGRkVSRU5USUFMCTB4NDAwMAorI2RlZmluZSBEQVFQX1NDQU5MSVNUX0dBSU4oeCkJCSgoeCk8PDEyKQorI2RlZmluZSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoeCkJKCh4KTw8OCkKKyNkZWZpbmUgREFRUF9TQ0FOTElTVF9TVEFSVAkJMHgwMDgwCisjZGVmaW5lIERBUVBfU0NBTkxJU1RfRVhUX0dBSU4oeCkJKCh4KTw8NCkKKyNkZWZpbmUgREFRUF9TQ0FOTElTVF9FWFRfQ0hBTk5FTCh4KQkoeCkKKworI2RlZmluZSBEQVFQX0NPTlRST0xfUEFDRVJfMTAwa0h6CTB4YzAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSXzFNSHoJCTB4ODAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSXzVNSHoJCTB4NDAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSX0VYVEVSTkFMCTB4MDAKKyNkZWZpbmUgREFRUF9DT05UT1JMX0VYUEFOU0lPTgkJMHgyMAorI2RlZmluZSBEQVFQX0NPTlRST0xfRU9TX0lOVF9FTkFCTEUJMHgxMAorI2RlZmluZSBEQVFQX0NPTlRST0xfRklGT19JTlRfRU5BQkxFCTB4MDgKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfT05FU0hPVAkweDAwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX0NPTlRJTlVPVVMJMHgwNAorI2RlZmluZSBEQVFQX0NPTlRST0xfVFJJR0dFUl9JTlRFUk5BTAkweDAwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX0VYVEVSTkFMCTB4MDIKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfUklTSU5HCTB4MDAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfRkFMTElORwkweDAxCisKKyNkZWZpbmUgREFRUF9TVEFUVVNfSURMRQkJMHg4MAorI2RlZmluZSBEQVFQX1NUQVRVU19SVU5OSU5HCQkweDQwCisjZGVmaW5lIERBUVBfU1RBVFVTX0VWRU5UUwkJMHgzOAorI2RlZmluZSBEQVFQX1NUQVRVU19EQVRBX0xPU1QJCTB4MjAKKyNkZWZpbmUgREFRUF9TVEFUVVNfRU5EX09GX1NDQU4JCTB4MTAKKyNkZWZpbmUgREFRUF9TVEFUVVNfRklGT19USFJFU0hPTEQJMHgwOAorI2RlZmluZSBEQVFQX1NUQVRVU19GSUZPX0ZVTEwJCTB4MDQKKyNkZWZpbmUgREFRUF9TVEFUVVNfRklGT19ORUFSRlVMTAkweDAyCisjZGVmaW5lIERBUVBfU1RBVFVTX0ZJRk9fRU1QVFkJCTB4MDEKKworI2RlZmluZSBEQVFQX0NPTU1BTkRfQVJNCQkweDgwCisjZGVmaW5lIERBUVBfQ09NTUFORF9SU1RGCQkweDQwCisjZGVmaW5lIERBUVBfQ09NTUFORF9SU1RRCQkweDIwCisjZGVmaW5lIERBUVBfQ09NTUFORF9TVE9QCQkweDEwCisjZGVmaW5lIERBUVBfQ09NTUFORF9MQVRDSAkJMHgwOAorI2RlZmluZSBEQVFQX0NPTU1BTkRfMTAwa0h6CQkweDAwCisjZGVmaW5lIERBUVBfQ09NTUFORF81MGtIegkJMHgwMgorI2RlZmluZSBEQVFQX0NPTU1BTkRfMjVrSHoJCTB4MDQKKyNkZWZpbmUgREFRUF9DT01NQU5EX0ZJRk9fREFUQQkJMHgwMQorI2RlZmluZSBEQVFQX0NPTU1BTkRfRklGT19QUk9HUkFNCTB4MDAKKworI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSX1RUTAkJMHgwMAorI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSX0FOQUxPRwkJMHg4MAorI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSX1BSRVRSSUdHRVIJMHg0MAorI2RlZmluZSBEQVFQX0FVWF9USU1FUl9JTlRfRU5BQkxFCTB4MjAKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfUkVMT0FECQkweDAwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX1BBVVNFCQkweDA4CisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX0dPCQkweDEwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX0dPX0VYVEVSTkFMCTB4MTgKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfRVhURVJOQUxfU1JDCTB4MDQKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfSU5URVJOQUxfU1JDCTB4MDAKKyNkZWZpbmUgREFRUF9BVVhfREFfRElSRUNUCQkweDAwCisjZGVmaW5lIERBUVBfQVVYX0RBX09WRVJGTE9XCQkweDAxCisjZGVmaW5lIERBUVBfQVVYX0RBX0VYVEVSTkFMCQkweDAyCisjZGVmaW5lIERBUVBfQVVYX0RBX1BBQ0VSCQkweDAzCisKKyNkZWZpbmUgREFRUF9BVVhfUlVOTklORwkJMHg4MAorI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSRUQJCTB4NDAKKyNkZWZpbmUgREFRUF9BVVhfREFfQlVGRkVSCQkweDIwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX09WRVJGTE9XCQkweDEwCisjZGVmaW5lIERBUVBfQVVYX0NPTlZFUlNJT04JCTB4MDgKKyNkZWZpbmUgREFRUF9BVVhfREFUQV9MT1NUCQkweDA0CisjZGVmaW5lIERBUVBfQVVYX0ZJRk9fTkVBUkZVTEwJCTB4MDIKKyNkZWZpbmUgREFRUF9BVVhfRklGT19FTVBUWQkJMHgwMQorCisvKiBUaGVzZSByYW5nZSBzdHJ1Y3R1cmVzIHRlbGwgQ09NRURJIGhvdyB0aGUgc2FtcGxlIHZhbHVlcyBtYXAgdG8KKyAqIHZvbHRhZ2VzLiAgVGhlIEEvRCBjb252ZXJ0ZXIgaGFzIGZvdXIgcmFuZ2VzOiArLy0gMTBWIHRocm91Z2gKKyAqICsvLSAxLjI1ViwgYW5kIHRoZSBEL0EgY29udmVydGVyIGhhcyBvbmx5IG9uZTogKy8tIDVWLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXFwX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSkKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFxcF9hbyA9IHsgMSwge0JJUF9SQU5HRSg1KX0gfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIGNvbWVkaSBpbnRlcmZhY2UgY29kZSAqLworCitzdGF0aWMgaW50IGRhcXBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFxcF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXFwID0geworICAgICAgZHJpdmVyX25hbWU6InF1YXRlY2hfZGFxcF9jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFxcF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFxcF9kZXRhY2gsCit9OworCisjaWZkZWYgREFRUF9ERUJVRworCitzdGF0aWMgdm9pZCBkYXFwX2R1bXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJEQVFQOiBzdGF0dXMgJTAyeDsgYXV4IHN0YXR1cyAlMDJ4XG4iLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX1NUQVRVUyksIGluYihkZXYtPmlvYmFzZSArIERBUVBfQVVYKSk7Cit9CisKK3N0YXRpYyB2b2lkIGhleF9kdW1wKGNoYXIgKnN0ciwgdm9pZCAqcHRyLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmNwdHIgPSBwdHI7CisJaW50IGk7CisKKwlwcmludGsoc3RyKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoaSAlIDE2ID09IDApIHsKKwkJCXByaW50aygiXG4weCUwOHg6IiwgKHVuc2lnbmVkIGludCljcHRyKTsKKwkJfQorCQlwcmludGsoIiAlMDJ4IiwgKihjcHRyKyspKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCisjZW5kaWYKKworLyogQ2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiAqLworCitzdGF0aWMgaW50IGRhcXBfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCisJaWYgKGxvY2FsLT5zdG9wKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCW91dGIoREFRUF9DT01NQU5EX1NUT1AsIGRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCS8qIGZsdXNoIGFueSBsaW5ndXJpbmcgZGF0YSBpbiBGSUZPIC0gc3VwZXJmbHVvdXMgaGVyZSAqLworCS8qIG91dGIoREFRUF9DT01NQU5EX1JTVEYsIGRldi0+aW9iYXNlK0RBUVBfQ09NTUFORCk7ICovCisKKwlsb2NhbC0+aW50ZXJydXB0X21vZGUgPSBzZW1hcGhvcmU7CisKKwlyZXR1cm4gMDsKK30KKworLyogSW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBPcGVyYXRlcyBpbiBvbmUgb2YgdHdvIG1vZGVzLiAgSWYgbG9jYWwtPmludGVycnVwdF9tb2RlIGlzCisgKiAnc2VtYXBob3JlJywganVzdCBzaWduYWwgdGhlIGxvY2FsLT5lb3Mgc2VtYXBob3JlIGFuZCByZXR1cm4KKyAqIChvbmUtc2hvdCBtb2RlKS4gIE90aGVyd2lzZSAoY29udGludW91cyBtb2RlKSwgcmVhZCBkYXRhIGluIGZyb20KKyAqIHRoZSBjYXJkLCB0cmFuc2ZlciBpdCB0byB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IHRoZSBoaWdoZXItbGV2ZWwKKyAqIGNvbWVkaSBrZXJuZWwgbW9kdWxlLCBhbmQgc2lnbmFsIHZhcmlvdXMgY29tZWRpIGNhbGxiYWNrIHJvdXRpbmVzLAorICogd2hpY2ggcnVuIHByZXR0eSBxdWljay4KKyAqLworCitzdGF0aWMgdm9pZCBkYXFwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBkZXZfaWQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgbG9vcF9saW1pdCA9IDEwMDAwOworCWludCBzdGF0dXM7CisKKwlpZiAobG9jYWwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZGFxcF9pbnRlcnJ1cHQoKTogaXJxICVkIGZvciB1bmtub3duIGRldmljZS5cbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlkZXYgPSBsb2NhbC0+ZGV2OworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJkYXFwX2ludGVycnVwdCgpOiBOVUxMIGNvbWVkaV9kZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZGFxcF9pbnRlcnJ1cHQoKTogc3RydWN0IGNvbWVkaV9kZXZpY2Ugbm90IHlldCBhdHRhY2hlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJcyA9IGxvY2FsLT5zOworCWlmIChzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImRhcXBfaW50ZXJydXB0KCk6IE5VTEwgY29tZWRpX3N1YmRldmljZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGUgIT0gbG9jYWwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImRhcXBfaW50ZXJydXB0KCk6IGludmFsaWQgY29tZWRpX3N1YmRldmljZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChsb2NhbC0+aW50ZXJydXB0X21vZGUpIHsKKworCWNhc2Ugc2VtYXBob3JlOgorCisJCXVwKCZsb2NhbC0+ZW9zKTsKKwkJYnJlYWs7CisKKwljYXNlIGJ1ZmZlcjoKKworCQl3aGlsZSAoISgoc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpKQorCQkJCSYgREFRUF9TVEFUVVNfRklGT19FTVBUWSkpIHsKKworCQkJc2hvcnQgZGF0YTsKKworCQkJaWYgKHN0YXR1cyAmIERBUVBfU1RBVFVTX0RBVEFfTE9TVCkgeworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0KKwkJCQkJQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCQlwcmludGsoImRhcXA6IGRhdGEgbG9zdFxuIik7CisJCQkJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZGF0YSA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJCQlkYXRhIHw9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTykgPDwgODsKKwkJCWRhdGEgXj0gMHg4MDAwOworCisJCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZGF0YSk7CisKKwkJCS8qIElmIHRoZXJlJ3MgYSBsaW1pdCwgZGVjcmVtZW50IGl0CisJCQkgKiBhbmQgc3RvcCBjb252ZXJzaW9uIGlmIHplcm8KKwkJCSAqLworCisJCQlpZiAobG9jYWwtPmNvdW50ID4gMCkgeworCQkJCWxvY2FsLT5jb3VudC0tOworCQkJCWlmIChsb2NhbC0+Y291bnQgPT0gMCkgeworCQkJCQlkYXFwX2FpX2NhbmNlbChkZXYsIHMpOworCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChsb29wX2xpbWl0LS0pIDw9IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAobG9vcF9saW1pdCA8PSAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJImxvb3BfbGltaXQgcmVhY2hlZCBpbiBkYXFwX2ludGVycnVwdCgpXG4iKTsKKwkJCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCX0KKworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9Cit9CisKKy8qIE9uZS1zaG90IGFuYWxvZyBkYXRhIGFjcXVpc2l0aW9uIHJvdXRpbmUgKi8KKworc3RhdGljIGludCBkYXFwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCWludCBpOworCWludCB2OworCWludCBjb3VudGVyID0gMTAwMDA7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU3RvcCBhbnkgcnVubmluZyBjb252ZXJzaW9uICovCisJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCk7CisKKwkvKiBSZXNldCBzY2FuIGxpc3QgcXVldWUgKi8KKwlvdXRiKERBUVBfQ09NTUFORF9SU1RRLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkvKiBQcm9ncmFtIG9uZSBzY2FuIGxpc3QgZW50cnkgKi8KKworCXYgPSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpCisJCXwgREFRUF9TQ0FOTElTVF9HQUlOKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CisKKwlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKSB7CisJCXYgfD0gREFRUF9TQ0FOTElTVF9ESUZGRVJFTlRJQUw7CisJfQorCisJdiB8PSBEQVFQX1NDQU5MSVNUX1NUQVJUOworCisJb3V0Yih2ICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKwlvdXRiKHYgPj4gOCwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKworCS8qIFJlc2V0IGRhdGEgRklGTyAoc2VlIHBhZ2UgMjggb2YgREFRUCBVc2VyJ3MgTWFudWFsKSAqLworCisJb3V0YihEQVFQX0NPTU1BTkRfUlNURiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTU1BTkQpOworCisJLyogU2V0IHRyaWdnZXIgKi8KKworCXYgPSBEQVFQX0NPTlRST0xfVFJJR0dFUl9PTkVTSE9UIHwgREFRUF9DT05UUk9MX1RSSUdHRVJfSU5URVJOQUwKKwkJfCBEQVFQX0NPTlRST0xfUEFDRVJfMTAwa0h6IHwgREFRUF9DT05UUk9MX0VPU19JTlRfRU5BQkxFOworCisJb3V0Yih2LCBkZXYtPmlvYmFzZSArIERBUVBfQ09OVFJPTCk7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIChteSBjYXJkIGhhcyBhIHRlbmRhbmN5IHRvIHJlcXVpcmUKKwkgKiByZXF1aXJlIG11bHRpcGxlIHJlYWRzIG9uIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGlzKQorCSAqLworCisJd2hpbGUgKC0tY291bnRlcgorCQkmJiAoaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpICYgREFRUF9TVEFUVVNfRVZFTlRTKSkgOworCWlmICghY291bnRlcikgeworCQlwcmludGsoImRhcXA6IGNvdWxkbid0IGNsZWFyIGludGVycnVwdHMgaW4gc3RhdHVzIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE1ha2Ugc3VyZSBzZW1hcGhvcmUgaXMgYmxvY2tlZCAqLworCXNlbWFfaW5pdCgmbG9jYWwtPmVvcywgMCk7CisJbG9jYWwtPmludGVycnVwdF9tb2RlID0gc2VtYXBob3JlOworCWxvY2FsLT5kZXYgPSBkZXY7CisJbG9jYWwtPnMgPSBzOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCisJCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJb3V0YihEQVFQX0NPTU1BTkRfQVJNIHwgREFRUF9DT01NQU5EX0ZJRk9fREFUQSwKKwkJCWRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCQkvKiBXYWl0IGZvciBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIHVuYmxvY2sgc2VtYXBob3JlICovCisJCS8qIE1heWJlIGNvdWxkIHVzZSBhIHRpbWVvdXQgaGVyZSwgYnV0IGl0J3MgaW50ZXJydXB0aWJsZSAqLworCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZsb2NhbC0+ZW9zKSkKKwkJCXJldHVybiAtRUlOVFI7CisKKwkJZGF0YVtpXSA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJCWRhdGFbaV0gfD0gaW5iKGRldi0+aW9iYXNlICsgREFRUF9GSUZPKSA8PCA4OworCQlkYXRhW2ldIF49IDB4ODAwMDsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUKKyAqIGZvciBwcm9ncmFtbWluZyB0aGUgZGV2aWNlLiAgV2UgYWx3YXlzIHVzZSB0aGUgREFRUCdzIDUgTUh6IGNsb2NrLAorICogd2hpY2ggd2l0aCBpdHMgMjQtYml0IGNvdW50ZXIsIGFsbG93cyB2YWx1ZXMgdXAgdG8gODQgc2Vjb25kcy4KKyAqIEFsc28sIHRoZSBmdW5jdGlvbiBhZGp1c3RzIG5zIHNvIHRoYXQgaXQgY29vcmVzcG9uZHMgdG8gdGhlIGFjdHVhbAorICogdGltZSB0aGF0IHRoZSBkZXZpY2Ugd2lsbCB1c2UuCisgKi8KKworc3RhdGljIGludCBkYXFwX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwlpbnQgdGltZXI7CisKKwl0aW1lciA9ICpucyAvIDIwMDsKKwkqbnMgPSB0aW1lciAqIDIwMDsKKworCXJldHVybiB0aW1lcjsKK30KKworLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKyAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZWQgYnkgdGhlIGNtZCBpb2N0bC4KKyAqCisgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKyAqIHRoZSBjb21tYW5kIHBhc3Nlcy4KKyAqLworCitzdGF0aWMgaW50IGRhcXBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cgJiYgY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRUQJMTAwMDAJLyogMTAwIGtIeiAtIGluIG5hbm9zZWNvbmRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSCisJCSYmIGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJZXJyKys7CisJfQorCisJLyogSWYgYm90aCBzY2FuX2JlZ2luIGFuZCBjb252ZXJ0IGFyZSBib3RoIHRpbWVyIHZhbHVlcywgdGhlIG9ubHkKKwkgKiB3YXkgdGhhdCBjYW4gbWFrZSBzZW5zZSBpcyBpZiB0aGUgc2NhbiB0aW1lIGlzIHRoZSBudW1iZXIgb2YKKwkgKiBjb252ZXJzaW9ucyB0aW1lcyB0aGUgY29udmVydCB0aW1lCisJICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUgorCQkmJiBjbWQtPnNjYW5fYmVnaW5fYXJnICE9CisJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IE1BWF9TUEVFRDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWRhcXBfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlkYXFwX25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFxcF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBjb3VudGVyID0gMTAwOworCWludCBzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeTsKKwlpbnQgdGhyZXNob2xkOworCisJaW50IGk7CisJaW50IHY7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU3RvcCBhbnkgcnVubmluZyBjb252ZXJzaW9uICovCisJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCk7CisKKwkvKiBSZXNldCBzY2FuIGxpc3QgcXVldWUgKi8KKwlvdXRiKERBUVBfQ09NTUFORF9SU1RRLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkvKiBQcm9ncmFtIHBhY2VyIGNsb2NrCisJICoKKwkgKiBUaGVyZSdzIHR3byBtb2RlcyB3ZSBjYW4gb3BlcmF0ZSBpbi4gIElmIGNvbnZlcnRfc3JjIGlzCisJICogVFJJR19USU1FUiwgdGhlbiBjb252ZXJ0X2FyZyBzcGVjaWZpZXMgdGhlIHRpbWUgYmV0d2VlbgorCSAqIGVhY2ggY29udmVyc2lvbiwgc28gd2UgcHJvZ3JhbSB0aGUgcGFjZXIgY2xvY2sgdG8gdGhhdAorCSAqIGZyZXF1ZW5jeSBhbmQgc2V0IHRoZSBTQ0FOTElTVF9TVEFSVCBiaXQgb24gZXZlcnkgc2Nhbmxpc3QKKwkgKiBlbnRyeS4gIE90aGVyd2lzZSwgY29udmVydF9zcmMgaXMgVFJJR19OT1csIHdoaWNoIG1lYW5zCisJICogd2Ugd2FudCB0aGUgZmFzdGVzdCBwb3NzaWJsZSBjb252ZXJzaW9ucywgc2Nhbl9iZWdpbl9zcmMKKwkgKiBpcyBUUklHX1RJTUVSLCBhbmQgc2Nhbl9iZWdpbl9hcmcgc3BlY2lmaWVzIHRoZSB0aW1lIGJldHdlZW4KKwkgKiBlYWNoIHNjYW4sIHNvIHdlIHByb2dyYW0gdGhlIHBhY2VyIGNsb2NrIHRvIHRoaXMgZnJlcXVlbmN5CisJICogYW5kIG9ubHkgc2V0IHRoZSBTQ0FOTElTVF9TVEFSVCBiaXQgb24gdGhlIGZpcnN0IGVudHJ5LgorCSAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpbnQgY291bnRlciA9IGRhcXBfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJb3V0Yihjb3VudGVyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX0xPVyk7CisJCW91dGIoKGNvdW50ZXIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfTUlEKTsKKwkJb3V0YigoY291bnRlciA+PiAxNikgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfSElHSCk7CisJCXNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5ID0gMTsKKwl9IGVsc2UgeworCQlpbnQgY291bnRlciA9IGRhcXBfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJb3V0Yihjb3VudGVyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX0xPVyk7CisJCW91dGIoKGNvdW50ZXIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfTUlEKTsKKwkJb3V0YigoY291bnRlciA+PiAxNikgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfSElHSCk7CisJCXNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5ID0gMDsKKwl9CisKKwkvKiBQcm9ncmFtIHNjYW4gbGlzdCAqLworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKworCQlpbnQgY2hhbnNwZWMgPSBjbWQtPmNoYW5saXN0W2ldOworCisJCS8qIFByb2dyYW0gb25lIHNjYW4gbGlzdCBlbnRyeSAqLworCisJCXYgPSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoQ1JfQ0hBTihjaGFuc3BlYykpCisJCQl8IERBUVBfU0NBTkxJU1RfR0FJTihDUl9SQU5HRShjaGFuc3BlYykpOworCisJCWlmIChDUl9BUkVGKGNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpIHsKKwkJCXYgfD0gREFRUF9TQ0FOTElTVF9ESUZGRVJFTlRJQUw7CisJCX0KKworCQlpZiAoaSA9PSAwIHx8IHNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5KSB7CisJCQl2IHw9IERBUVBfU0NBTkxJU1RfU1RBUlQ7CisJCX0KKworCQlvdXRiKHYgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfU0NBTkxJU1QpOworCQlvdXRiKHYgPj4gOCwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKwl9CisKKwkvKiBOb3cgaXQncyB0aW1lIHRvIHByb2dyYW0gdGhlIEZJRk8gdGhyZXNob2xkLCBiYXNpY2FsbHkgdGhlCisJICogbnVtYmVyIG9mIHNhbXBsZXMgdGhlIGNhcmQgd2lsbCBidWZmZXIgYmVmb3JlIGl0IGludGVycnVwdHMKKwkgKiB0aGUgQ1BVLgorCSAqCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHN0b3AgY291bnQsIHRoZW4gdXNlIGhhbGYgdGhlIHNpemUgb2YKKwkgKiB0aGUgRklGTyAodGhlIG1hbnVmYWN0dXJlcidzIHJlY29tbWVuZGF0aW9uKS4gIENvbnNpZGVyCisJICogdGhhdCB0aGUgRklGTyBjYW4gaG9sZCAySyBzYW1wbGVzICg0SyBieXRlcykuICBXaXRoIHRoZQorCSAqIHRocmVzaG9sZCBzZXQgYXQgaGFsZiB0aGUgRklGTyBzaXplLCB3ZSBoYXZlIGEgbWFyZ2luIG9mCisJICogZXJyb3Igb2YgMTAyNCBzYW1wbGVzLiAgQXQgdGhlIGNoaXAncyBtYXhpbXVtIHNhbXBsZSByYXRlCisJICogb2YgMTAwLDAwMCBIeiwgdGhlIENQVSB3b3VsZCBoYXZlIHRvIGRlbGF5IGludGVycnVwdAorCSAqIHNlcnZpY2UgZm9yIGEgZnVsbCAxMCBtaWxsaXNlY29uZHMgaW4gb3JkZXIgdG8gbG9zZSBkYXRhCisJICogaGVyZSAoYXMgb3Bwb3NlZCB0byBoaWdoZXIgdXAgaW4gdGhlIGtlcm5lbCkuICBJJ3ZlIG5ldmVyCisJICogc2VlbiBpdCBoYXBwZW4uICBIb3dldmVyLCBmb3Igc2xvdyBzYW1wbGUgcmF0ZXMgaXQgbWF5CisJICogYnVmZmVyIHRvbyBtdWNoIGRhdGEgYW5kIGludHJvZHVjZSB0b28gbXVjaCBkZWxheSBmb3IgdGhlCisJICogdXNlciBhcHBsaWNhdGlvbi4KKwkgKgorCSAqIElmIHdlIGhhdmUgYSBzdG9wIGNvdW50LCB0aGVuIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZy4KKwkgKiBJZiB0aGUgc3RvcCBjb3VudCBpcyBsZXNzIHRoYW4gdGhlIEZJRk8gc2l6ZSAoYWN0dWFsbHkKKwkgKiB0aHJlZS1xdWFydGVycyBvZiB0aGUgRklGTyBzaXplIC0gc2VlIGJlbG93KSwgd2UganVzdCB1c2UKKwkgKiB0aGUgc3RvcCBjb3VudCBpdHNlbGYgYXMgdGhlIHRocmVzaG9sZCwgdGhlIGNhcmQgaW50ZXJydXB0cworCSAqIHVzIHdoZW4gdGhhdCBtYW55IHNhbXBsZXMgaGF2ZSBiZWVuIHRha2VuLCBhbmQgd2Uga2lsbCB0aGUKKwkgKiBhY3F1aXNpdGlvbiBhdCB0aGF0IHBvaW50IGFuZCBhcmUgZG9uZS4gIElmIHRoZSBzdG9wIGNvdW50CisJICogaXMgbGFyZ2VyIHRoYW4gdGhhdCwgdGhlbiB3ZSBkaXZpZGUgaXQgYnkgMiB1bnRpbCBpdCdzIGxlc3MKKwkgKiB0aGFuIHRocmVlIHF1YXJ0ZXJzIG9mIHRoZSBGSUZPIHNpemUgKHdlIGFsd2F5cyBsZWF2ZSB0aGUKKwkgKiB0b3AgcXVhcnRlciBvZiB0aGUgRklGTyBhcyBwcm90ZWN0aW9uIGFnYWluc3Qgc2x1Z2dpc2ggQ1BVCisJICogaW50ZXJydXB0IHJlc3BvbnNlKSBhbmQgdXNlIHRoYXQgYXMgdGhlIHRocmVzaG9sZC4gIFNvLCBpZgorCSAqIHRoZSBzdG9wIGNvdW50IGlzIDQwMDAgc2FtcGxlcywgd2UgZGl2aWRlIGJ5IHR3byB0d2ljZSB0bworCSAqIGdldCAxMDAwIHNhbXBsZXMsIHVzZSB0aGF0IGFzIHRoZSB0aHJlc2hvbGQsIHRha2UgZm91cgorCSAqIGludGVycnVwdHMgdG8gZ2V0IG91ciA0MDAwIHNhbXBsZXMgYW5kIGFyZSBkb25lLgorCSAqCisJICogVGhlIGFsZ29yaXRobSBjb3VsZCBiZSBtb3JlIGNsZXZlci4gIEZvciBleGFtcGxlLCBpZiA4MTAwMAorCSAqIHNhbXBsZXMgYXJlIHJlcXVlc3RlZCwgd2UgY291bGQgc2V0IHRoZSB0aHJlc2hvbGQgdG8gMTUwMAorCSAqIHNhbXBsZXMgYW5kIHRha2UgNTQgaW50ZXJydXB0cyB0byBnZXQgODEwMDAuICBCdXQgNTQgaXNuJ3QKKwkgKiBhIHBvd2VyIG9mIHR3bywgc28gdGhpcyBhbGdvcml0aG0gd29uJ3QgZmluZCB0aGF0IG9wdGlvbi4KKwkgKiBJbnN0ZWFkLCBpdCdsbCBzZXQgdGhlIHRocmVzaG9sZCBhdCAxMjY2IGFuZCB0YWtlIDY0CisJICogaW50ZXJydXB0cyB0byBnZXQgODEwMjQgc2FtcGxlcywgb2Ygd2hpY2ggdGhlIGxhc3QgMjQgd2lsbAorCSAqIGJlIGRpc2NhcmRlZC4uLiBidXQgd2Ugd29uJ3QgZ2V0IHRoZSBsYXN0IGludGVycnVwdCB1bnRpbAorCSAqIHRoZXkndmUgYmVlbiBjb2xsZWN0ZWQuICBUbyBmaW5kIHRoZSBmaXJzdCBvcHRpb24sIHRoZQorCSAqIGNvbXB1dGVyIGNvdWxkIGxvb2sgYXQgdGhlIHByaW1lIGRlY29tcG9zaXRpb24gb2YgdGhlCisJICogc2FtcGxlIGNvdW50ICg4MTAwMCA9IDNeNCAqIDVeMyAqIDJeMykgYW5kIGZhY3RvciBpdCBpbnRvIGEKKwkgKiB0aHJlc2hvbGQgKDE1MDAgPSAzICogNV4zICogMl4yKSBhbmQgYW4gaW50ZXJydXB0IGNvdW50ICg1NAorCSAqID0gM14zICogMikuICBIbW1tLi4uIGEgb25lLWxpbmUgd2hpbGUgbG9vcCBvciBwcmltZQorCSAqIGRlY29tcG9zaXRpb24gb2YgaW50ZWdlcnMuLi4gSSdsbCBsZWF2ZSBpdCB0aGUgd2F5IGl0IGlzLgorCSAqCisJICogSSdsbCBhbHNvIG5vdGUgYSBtaW5pLXJhY2UgY29uZGl0aW9uIGJlZm9yZSBpZ25vcmluZyBpdCBpbgorCSAqIHRoZSBjb2RlLiAgTGV0J3Mgc2F5IHdlJ3JlIHRha2luZyA0MDAwIHNhbXBsZXMsIGFzIGJlZm9yZS4KKwkgKiBBZnRlciAxMDAwIHNhbXBsZXMsIHdlIGdldCBhbiBpbnRlcnJ1cHQuICBCdXQgYmVmb3JlIHRoYXQKKwkgKiBpbnRlcnJ1cHQgaXMgY29tcGxldGVseSBzZXJ2aWNlZCwgYW5vdGhlciBzYW1wbGUgaXMgdGFrZW4KKwkgKiBhbmQgbG9hZGVkIGludG8gdGhlIEZJRk8uICBTaW5jZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkgKiBlbXB0aWVzIHRoZSBGSUZPIGJlZm9yZSByZXR1cm5pbmcsIGl0IHdpbGwgcmVhZCAxMDAxIHNhbXBsZXMuCisJICogSWYgdGhhdCBoYXBwZW5zIGZvdXIgdGltZXMsIHdlJ2xsIGVuZCB1cCB0YWtpbmcgNDAwNCBzYW1wbGVzLAorCSAqIG5vdCA0MDAwLiAgVGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgZGlzY2FyZCB0aGUgZXh0cmEgZm91cgorCSAqIHNhbXBsZXMgKGJ5IGhhbHRpbmcgdGhlIGFjcXVpc2l0aW9uIHdpdGggZm91ciBzYW1wbGVzIHN0aWxsCisJICogaW4gdGhlIEZJRk8pLCBidXQgd2Ugd2lsbCBoYXZlIHRvIHdhaXQgZm9yIHRoZW0uCisJICoKKwkgKiBJbiBzaG9ydCwgdGhpcyBjb2RlIHdvcmtzIHByZXR0eSB3ZWxsLCBidXQgZm9yIGVpdGhlciBvZgorCSAqIHRoZSB0d28gcmVhc29ucyBub3RlZCwgbWlnaHQgZW5kIHVwIHdhaXRpbmcgZm9yIGEgZmV3IG1vcmUKKwkgKiBzYW1wbGVzIHRoYW4gYWN0dWFsbHkgcmVxdWVzdGVkLiAgU2hvdWxkbid0IG1ha2UgdG9vIG11Y2gKKwkgKiBvZiBhIGRpZmZlcmVuY2UuCisJICovCisKKwkvKiBTYXZlIGF3YXkgdGhlIG51bWJlciBvZiBjb252ZXJzaW9ucyB3ZSBzaG91bGQgcGVyZm9ybSwgYW5kCisJICogY29tcHV0ZSB0aGUgRklGTyB0aHJlc2hvbGQgKGluIGJ5dGVzLCBub3Qgc2FtcGxlcyAtIHRoYXQncworCSAqIHdoeSB3ZSBtdWx0aXBsZSBsb2NhbC0+Y291bnQgYnkgMiA9IHNpemVvZihzYW1wbGUpKQorCSAqLworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlsb2NhbC0+Y291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCXRocmVzaG9sZCA9IDIgKiBsb2NhbC0+Y291bnQ7CisJCXdoaWxlICh0aHJlc2hvbGQgPiBEQVFQX0ZJRk9fU0laRSAqIDMgLyA0KQorCQkJdGhyZXNob2xkIC89IDI7CisJfSBlbHNlIHsKKwkJbG9jYWwtPmNvdW50ID0gLTE7CisJCXRocmVzaG9sZCA9IERBUVBfRklGT19TSVpFIC8gMjsKKwl9CisKKwkvKiBSZXNldCBkYXRhIEZJRk8gKHNlZSBwYWdlIDI4IG9mIERBUVAgVXNlcidzIE1hbnVhbCkgKi8KKworCW91dGIoREFRUF9DT01NQU5EX1JTVEYsIGRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCS8qIFNldCBGSUZPIHRocmVzaG9sZC4gIEZpcnN0IHR3byBieXRlcyBhcmUgbmVhci1lbXB0eQorCSAqIHRocmVzaG9sZCwgd2hpY2ggaXMgdW51c2VkOyBuZXh0IHR3byBieXRlcyBhcmUgbmVhci1mdWxsCisJICogdGhyZXNob2xkLiAgV2UgY29tcHV0ZWQgdGhlIG51bWJlciBvZiBieXRlcyB3ZSB3YW50IGluIHRoZQorCSAqIEZJRk8gd2hlbiB0aGUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgd2hhdCB0aGUgY2FyZCB3YW50cworCSAqIGlzIGFjdHVhbGx5IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJ5dGVzIGxlZnQgaW4gdGhlIEZJRk8KKwkgKiB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgdG8gaGFwcGVuLgorCSAqLworCisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisKKwlvdXRiKChEQVFQX0ZJRk9fU0laRSAtIHRocmVzaG9sZCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJb3V0YigoREFRUF9GSUZPX1NJWkUgLSB0aHJlc2hvbGQpID4+IDgsIGRldi0+aW9iYXNlICsgREFRUF9GSUZPKTsKKworCS8qIFNldCB0cmlnZ2VyICovCisKKwl2ID0gREFRUF9DT05UUk9MX1RSSUdHRVJfQ09OVElOVU9VUyB8IERBUVBfQ09OVFJPTF9UUklHR0VSX0lOVEVSTkFMCisJCXwgREFRUF9DT05UUk9MX1BBQ0VSXzVNSHogfCBEQVFQX0NPTlRST0xfRklGT19JTlRfRU5BQkxFOworCisJb3V0Yih2LCBkZXYtPmlvYmFzZSArIERBUVBfQ09OVFJPTCk7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIChteSBjYXJkIGhhcyBhIHRlbmRhbmN5IHRvIHJlcXVpcmUKKwkgKiByZXF1aXJlIG11bHRpcGxlIHJlYWRzIG9uIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGlzKQorCSAqLworCisJd2hpbGUgKC0tY291bnRlcgorCQkmJiAoaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpICYgREFRUF9TVEFUVVNfRVZFTlRTKSkgOworCWlmICghY291bnRlcikgeworCQlwcmludGsoImRhcXA6IGNvdWxkbid0IGNsZWFyIGludGVycnVwdHMgaW4gc3RhdHVzIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxvY2FsLT5pbnRlcnJ1cHRfbW9kZSA9IGJ1ZmZlcjsKKwlsb2NhbC0+ZGV2ID0gZGV2OworCWxvY2FsLT5zID0gczsKKworCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KKwlvdXRiKERBUVBfQ09NTUFORF9BUk0gfCBEQVFQX0NPTU1BTkRfRklGT19EQVRBLAorCQlkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2luZ2xlLXNob3QgYW5hbG9nIG91dHB1dCByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisJaW50IGQ7CisJdW5zaWduZWQgaW50IGNoYW47CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWQgPSBkYXRhWzBdOworCWQgJj0gMHgwZmZmOworCWQgXj0gMHgwODAwOwkJLyogRmxpcCB0aGUgc2lnbiAqLworCWQgfD0gY2hhbiA8PCAxMjsKKworCS8qIE1ha2Ugc3VyZSBEL0EgdXBkYXRlIG1vZGUgaXMgZGlyZWN0IHVwZGF0ZSAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCk7CisKKwlvdXR3KGQsIGRldi0+aW9iYXNlICsgREFRUF9EQSk7CisKKwlyZXR1cm4gMTsKK30KKworLyogRGlnaXRhbCBpbnB1dCByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9kaV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgcy0+cHJpdmF0ZTsKKworCWlmIChsb2NhbC0+c3RvcCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkYXRhWzBdID0gaW5iKGRldi0+aW9iYXNlICsgREFRUF9ESUdJVEFMX0lPKTsKKworCXJldHVybiAxOworfQorCisvKiBEaWdpdGFsIG91dHB1dCByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9kb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJb3V0dyhkYXRhWzBdICYgMHhmLCBkZXYtPmlvYmFzZSArIERBUVBfRElHSVRBTF9JTyk7CisKKwlyZXR1cm4gMTsKK30KKworLyogZGFxcF9hdHRhY2ggaXMgY2FsbGVkIHZpYSBjb21lZGlfY29uZmlnIHRvIGF0dGFjaCBhIGNvbWVkaSBkZXZpY2UKKyAqIHRvIGEgL2Rldi9jb21lZGkqLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gZGFxcF9jc19hdHRhY2goKQorICogd2hpY2ggaXMgY2FsbGVkIGJ5IHRoZSBwY21jaWEgc3Vic3lzdGVtIHRvIGF0dGFjaCB0aGUgUENNQ0lBIGNhcmQKKyAqIHdoZW4gaXQgaXMgaW5zZXJ0ZWQuCisgKi8KKworc3RhdGljIGludCBkYXFwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gZGV2X3RhYmxlW2l0LT5vcHRpb25zWzBdXTsKKwl0dXBsZV90IHR1cGxlOworCWludCBpOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaWYgKGl0LT5vcHRpb25zWzBdIDwgMCB8fCBpdC0+b3B0aW9uc1swXSA+PSBNQVhfREVWIHx8ICFsb2NhbCkgeworCQlwcmludGsoImNvbWVkaSVkOiBObyBzdWNoIGRhcXAgZGV2aWNlICVkXG4iLAorCQkJZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBUeXBpY2FsbHkgYnJpdHRsZSBjb2RlIHRoYXQgSSBkb24ndCBjb21wbGV0ZWx5IHVuZGVyc3RhbmQsCisJICogYnV0ICJpdCB3b3JrcyBvbiBteSBjYXJkIi4gIFRoZSBpbnRlbnQgaXMgdG8gcHVsbCB0aGUgbW9kZWwKKwkgKiBudW1iZXIgb2YgdGhlIGNhcmQgb3V0IHRoZSBQQ01DSUEgQ0lTIGFuZCBzdGFzaCBpdCBhd2F5IGFzCisJICogdGhlIENPTUVESSBib2FyZF9uYW1lLiAgTG9va3MgbGlrZSB0aGUgdGhpcmQgZmllbGQgaW4KKwkgKiBDSVNUUExfVkVSU18xIChvZmZzZXQgMikgaG9sZHMgd2hhdCB3ZSdyZSBsb29raW5nIGZvci4gIElmCisJICogaXQgZG9lc24ndCB3b3JrLCB3aG8gY2FyZXMsIGp1c3QgbGVhdmUgaXQgYXMgIkRBUVAiLgorCSAqLworCisJc3RyY3B5KGxvY2FsLT5ib2FyZF9uYW1lLCAiREFRUCIpOworCWRldi0+Ym9hcmRfbmFtZSA9IGxvY2FsLT5ib2FyZF9uYW1lOworCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKKwlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsb2NhbC0+bGluaywgJnR1cGxlKSA9PSAwKSB7CisJCXVfY2hhciBidWZbMTI4XTsKKworCQlidWZbMF0gPSBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CisJCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKwkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMjsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsb2NhbC0+bGluaywgJnR1cGxlKSA9PSAwKSB7CisKKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZS5UdXBsZURhdGFMZW4gLSA0OyBpKyspCisJCQkJaWYgKGJ1ZltpXSA9PSAwKQorCQkJCQlicmVhazsKKwkJCWZvciAoaSsrOyBpIDwgdHVwbGUuVHVwbGVEYXRhTGVuIC0gNDsgaSsrKQorCQkJCWlmIChidWZbaV0gPT0gMCkKKwkJCQkJYnJlYWs7CisJCQlpKys7CisJCQlpZiAoKGkgPCB0dXBsZS5UdXBsZURhdGFMZW4gLSA0KQorCQkJCSYmIChzdHJuY21wKGJ1ZiArIGksICJEQVFQIiwgNCkgPT0gMCkpIHsKKwkJCQlzdHJuY3B5KGxvY2FsLT5ib2FyZF9uYW1lLCBidWYgKyBpLAorCQkJCQlzaXplb2YobG9jYWwtPmJvYXJkX25hbWUpKTsKKwkJCX0KKwkJfQorCX0KKworCWRldi0+aW9iYXNlID0gbG9jYWwtPmxpbmstPmlvLkJhc2VQb3J0MTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBhdHRhY2hpbmcgZGFxcCVkIChpbyAweCUwNGx4KVxuIiwKKwkJZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0sIGRldi0+aW9iYXNlKTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnByaXZhdGUgPSBsb2NhbDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bGVuX2NoYW5saXN0ID0gMjA0ODsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhcXBfYWk7CisJcy0+aW5zbl9yZWFkID0gZGFxcF9haV9pbnNuX3JlYWQ7CisJcy0+ZG9fY21kdGVzdCA9IGRhcXBfYWlfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBkYXFwX2FpX2NtZDsKKwlzLT5jYW5jZWwgPSBkYXFwX2FpX2NhbmNlbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwlzLT5wcml2YXRlID0gbG9jYWw7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPm1heGRhdGEgPSAweDBmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGFxcF9hbzsKKwlzLT5pbnNuX3dyaXRlID0gZGFxcF9hb19pbnNuX3dyaXRlOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcy0+cHJpdmF0ZSA9IGxvY2FsOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPmluc25fcmVhZCA9IGRhcXBfZGlfaW5zbl9yZWFkOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+cHJpdmF0ZSA9IGxvY2FsOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCXMtPm5fY2hhbiA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3dyaXRlID0gZGFxcF9kb19pbnNuX3dyaXRlOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGRhcXBfZGV0YWNoIChjYWxsZWQgZnJvbSBjb21lZGlfY29tZGlnKSBkb2VzIG5vdGhpbmcuIElmIHRoZSBQQ01DSUEKKyAqIGNhcmQgaXMgcmVtb3ZlZCwgZGFxcF9jc19kZXRhY2goKSBpcyBjYWxsZWQgYnkgdGhlIHBjbWNpYSBzdWJzeXN0ZW0uCisgKi8KKworc3RhdGljIGludCBkYXFwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkZXRhY2hpbmcgZGFxcFxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUENNQ0lBIGludGVyZmFjZSBjb2RlCisKKyAgICBUaGUgcmVzdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgYmFzZWQgb24gZHVtbXlfY3MuYyB2MS4yNAorICAgIGZyb20gdGhlIExpbnV4IHBjbWNpYV9jcyBkaXN0cmlidXRpb24gdjMuMS44IGFuZCBpcyBzdWJqZWN0CisgICAgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudC4KKworICAgIFRoZSByZW1haW5pbmcgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworICAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisgICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisKKyAgICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyAgICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisgICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICAgIDxkaGluZHNAcGNtY2lhLnNvdXJjZWZvcmdlLm9yZz4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorICAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorICAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorICAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyAgICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyAgICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisgICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAgIFRoZSBldmVudCgpIGZ1bmN0aW9uIGlzIHRoaXMgZHJpdmVyJ3MgQ2FyZCBTZXJ2aWNlcyBldmVudCBoYW5kbGVyLgorICAgSXQgd2lsbCBiZSBjYWxsZWQgYnkgQ2FyZCBTZXJ2aWNlcyB3aGVuIGFuIGFwcHJvcHJpYXRlIGNhcmQgc3RhdHVzCisgICBldmVudCBpcyByZWNlaXZlZC4gIFRoZSBjb25maWcoKSBhbmQgcmVsZWFzZSgpIGVudHJ5IHBvaW50cyBhcmUKKyAgIHVzZWQgdG8gY29uZmlndXJlIG9yIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQKKyAgIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLgorCisgICBLZXJuZWwgdmVyc2lvbiAyLjYuMTYgdXB3YXJkcyB1c2VzIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgZnVuY3Rpb25zCisgICBpbnN0ZWFkIG9mIGFuIGV2ZW50KCkgZnVuY3Rpb24uCisqLworCitzdGF0aWMgdm9pZCBkYXFwX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkYXFwX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIGludCBkYXFwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3N0YXRpYyBpbnQgZGFxcF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGFxcF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBkYXFwX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gInF1YXRlY2hfZGFxcF9jcyI7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFxcF9jc19hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZworICAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KKworICAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCisgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRhcXBfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsOworCWludCBpOworCisJREVCVUcoMCwgImRhcXBfY3NfYXR0YWNoKClcbiIpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ERVY7IGkrKykKKwkJaWYgKGRldl90YWJsZVtpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gTUFYX0RFVikgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgImRhcXBfY3M6IG5vIGRldmljZXMgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxvY2FsLT50YWJsZV9pbmRleCA9IGk7CisJZGV2X3RhYmxlW2ldID0gbG9jYWw7CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IGRhcXBfaW50ZXJydXB0OworCWxpbmstPmlycS5JbnN0YW5jZSA9IGxvY2FsOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJZGFxcF9jc19jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFxcF9jc19hdHRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4gIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YQorICAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCisgICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGFxcF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKworCURFQlVHKDAsICJkYXFwX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJZGV2LT5zdG9wID0gMTsKKwkJZGFxcF9jc19yZWxlYXNlKGxpbmspOworCX0KKworCS8qIFVubGluayBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgZnJlZSBpdCAqLworCWRldl90YWJsZVtkZXYtPnRhYmxlX2luZGV4XSA9IE5VTEw7CisJaWYgKGRldikKKwkJa2ZyZWUoZGV2KTsKKworfQkJCQkvKiBkYXFwX2NzX2RldGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRhcXBfY3NfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CisgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCisgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGFxcF9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCisJREVCVUcoMCwgImRhcXBfY3NfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOworCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpKQorCQkJZ290byBuZXh0X2VudHJ5OworCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWRmbHQgPSAqY2ZnOworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCX0KKworCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQkJY3NfZXJyb3IobGluaywgR2V0TmV4dFR1cGxlLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qCisJICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQorCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkpIHsKKwkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisKKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSkgeworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisKKwkvKgorCSAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCisJICAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LgorCSAqLworCS8qIENvbWVkaSdzIFBDTUNJQSBzY3JpcHQgdXNlcyB0aGlzIGRldmljZSBuYW1lIChleHRyYWN0ZWQKKwkgKiBmcm9tIC92YXIvbGliL3BjbWNpYS9zdGFiKSB0byBwYXNzIHRvIGNvbWVkaV9jb25maWcKKwkgKi8KKwkvKiBzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgImRhcXAlZCIsIGRldi0+dGFibGVfaW5kZXgpOyAqLworCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAicXVhdGVjaF9kYXFwX2NzIik7CisJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisKKwkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeCIsCisJCWRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJcHJpbnRrKCIsIGlycSAldSIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKKwkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQlsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMyKQorCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCisJCQlsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm47CisKKyAgICAgIGNzX2ZhaWxlZDoKKwlkYXFwX2NzX3JlbGVhc2UobGluayk7CisKK30JCQkJLyogZGFxcF9jc19jb25maWcgKi8KKworc3RhdGljIHZvaWQgZGFxcF9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkYXFwX2NzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworfQkJCQkvKiBkYXFwX2NzX3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkYXFwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhcXBfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCWxvY2FsLT5zdG9wID0gMDsKKworCXJldHVybiAwOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGFxcF9jc19pZF90YWJsZVtdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEzNywgMHgwMDI3KSwKKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkYXFwX2NzX2lkX3RhYmxlKTsKKworc3RydWN0IHBjbWNpYV9kcml2ZXIgZGFxcF9jc19kcml2ZXIgPSB7CisJLnByb2JlID0gZGFxcF9jc19hdHRhY2gsCisJLnJlbW92ZSA9IGRhcXBfY3NfZGV0YWNoLAorCS5zdXNwZW5kID0gZGFxcF9jc19zdXNwZW5kLAorCS5yZXN1bWUgPSBkYXFwX2NzX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBkYXFwX2NzX2lkX3RhYmxlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQoreworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGFxcF9jc19kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXFwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlERUJVRygwLCAiZGFxcF9jczogdW5sb2FkaW5nXG4iKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXFwKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhcXBfY3NfZHJpdmVyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKaW5kZXggNjVkNTI0Mi4uY2EzNDdmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAvKgogICBUaGUgYm9hcmQgaGFzIDMgaW5wdXQgbW9kZXMgYW5kIHRoZSBnYWlucyBvZiAxLDIsNCwuLi4zMiAoLCA2NCwgMTI4KQogKi8KLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJ0ZF9haV83NTIwX3JhbmdlID0geyAxOCwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJ0ZF9haV83NTIwX3JhbmdlID0geyAxOCwgewogCQkJLyogKy01ViBpbnB1dCByYW5nZSBnYWluIHN0ZXBzICovCiAJCQlCSVBfUkFOR0UoNS4wKSwKIAkJCUJJUF9SQU5HRSg1LjAgLyAyKSwKQEAgLTIyMyw3ICsyMjMsNyBAQAogfTsKIAogLyogUENJNDUyMCBoYXMgdHdvIG1vcmUgZ2FpbnMgKDYgbW9yZSBlbnRyaWVzKSAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcnRkX2FpXzQ1MjBfcmFuZ2UgPSB7IDI0LCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcnRkX2FpXzQ1MjBfcmFuZ2UgPSB7IDI0LCB7CiAJCQkvKiArLTVWIGlucHV0IHJhbmdlIGdhaW4gc3RlcHMgKi8KIAkJCUJJUF9SQU5HRSg1LjApLAogCQkJQklQX1JBTkdFKDUuMCAvIDIpLApAQCAtMjU1LDcgKzI1NSw3IEBACiB9OwogCiAvKiBUYWJsZSBvcmRlciBtYXRjaGVzIHJhbmdlIHZhbHVlcyAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcnRkX2FvX3JhbmdlID0geyA0LCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcnRkX2FvX3JhbmdlID0geyA0LCB7CiAJCQlSQU5HRSgwLCA1KSwKIAkJCVJBTkdFKDAsIDEwKSwKIAkJCVJBTkdFKC01LCA1KSwKQEAgLTI2Niw3ICsyNjYsNyBAQAogLyoKICAgQm9hcmQgZGVzY3JpcHRpb25zCiAgKi8KLXR5cGVkZWYgc3RydWN0IHJ0ZEJvYXJkX3N0cnVjdCB7CitzdHJ1Y3QgcnRkQm9hcmQgewogCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG11c3QgYmUgZmlyc3QgKi8KIAlpbnQgZGV2aWNlX2lkOwogCWludCBhaUNoYW5zOwpAQCAtMjc0LDEyICsyNzQsMTIgQEAKIAlpbnQgYWlNYXhHYWluOwogCWludCByYW5nZTEwU3RhcnQ7CS8qIHN0YXJ0IG9mICstMTBWIHJhbmdlICovCiAJaW50IHJhbmdlVW5pU3RhcnQ7CS8qIHN0YXJ0IG9mICsxMFYgcmFuZ2UgKi8KLX0gcnRkQm9hcmQ7Cit9OwogCi1zdGF0aWMgY29uc3QgcnRkQm9hcmQgcnRkNTIwQm9hcmRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZEJvYXJkIHJ0ZDUyMEJvYXJkc1tdID0gewogCXsKIAkgICAgICBuYW1lOgkiRE03NTIwIiwKLQkgICAgICBkZXZpY2VfaWQ6MHg3NTIwLAorCSAgICAgIGRldmljZV9pZCA6IDB4NzUyMCwKIAkgICAgICBhaUNoYW5zOgkxNiwKIAkgICAgICBhaUJpdHM6CTEyLAogCSAgICAgIGFpTWF4R2FpbjozMiwKQEAgLTI4OCw3ICsyODgsNyBAQAogCQl9LAogCXsKIAkgICAgICBuYW1lOgkiUENJNDUyMCIsCi0JICAgICAgZGV2aWNlX2lkOjB4NDUyMCwKKwkgICAgICBkZXZpY2VfaWQgOiAweDQ1MjAsCiAJICAgICAgYWlDaGFuczoJMTYsCiAJICAgICAgYWlCaXRzOgkxMiwKIAkgICAgICBhaU1heEdhaW46MTI4LApAQCAtMzA4LDEzICszMDgsMTMgQEAKIC8qCiAgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCiAgKi8KLSNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3QgcnRkQm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHJ0ZEJvYXJkICopZGV2LT5ib2FyZF9wdHIpCiAKIC8qCiAgICBUaGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuCiAgICBUaGlzIGlzIGFsc28gdW5pcXVlIGZvciBlYWNoIGJvYXJkIGluIHRoZSBzeXN0ZW0uCiAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHJ0ZFByaXZhdGUgewogCS8qIG1lbW9yeSBtYXBwZWQgYm9hcmQgc3RydWN0dXJlcyAqLwogCXZvaWQgKmxhczA7CiAJdm9pZCAqbGFzMTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCXVuc2lnbmVkIGNoYXIgY2hhbkJpcG9sYXJbUlREX01BWF9DSEFOTElTVCAvIDhdOwkvKiBiaXQgYXJyYXkgKi8KIAogCS8qIHJlYWQgYmFjayBkYXRhICovCi0JbHNhbXBsX3QgYW9WYWx1ZVsyXTsJLyogVXNlZCBmb3IgQU8gcmVhZCBiYWNrICovCisJdW5zaWduZWQgaW50IGFvVmFsdWVbMl07CS8qIFVzZWQgZm9yIEFPIHJlYWQgYmFjayAqLwogCiAJLyogdGltZXIgZ2F0ZSAod2hlbiBlbmFibGVkKSAqLwogCXU4IHV0Y0dhdGVbNF07CQkvKiAxIGV4dHJhIGFsbG93cyBzaW1wbGUgcmFuZ2UgY2hlY2sgKi8KQEAgLTM1OCw3ICszNTgsNyBAQAogCXU4IGRtYTFDb250cm9sOwogI2VuZGlmCQkJCS8qIFVTRV9ETUEgKi8KIAl1bnNpZ25lZCBmaWZvTGVuOwotfSBydGRQcml2YXRlOworfTsKIAogLyogYml0IGRlZmluZXMgZm9yICJmbGFncyIgKi8KICNkZWZpbmUgU0VORF9FT1MJMHgwMQkvKiBzZW5kIEVuZCBPZiBTY2FuIGV2ZW50cyAqLwpAQCAtMzY2LDE4ICszNjYsMTggQEAKICNkZWZpbmUgRE1BMV9BQ1RJVkUJMHgwNAkvKiBETUExIGlzIGFjdGl2ZSAqLwogCiAvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBjaGFubmVsIGxpc3QgYml0IGFycmF5ICovCi0jZGVmaW5lIENIQU5fQVJSQVlfVEVTVChhcnJheSxpbmRleCkgXAorI2RlZmluZSBDSEFOX0FSUkFZX1RFU1QoYXJyYXksIGluZGV4KSBcCiAJKCgoYXJyYXkpWyhpbmRleCkvOF0gPj4gKChpbmRleCkgJiAweDcpKSAmIDB4MSkKLSNkZWZpbmUgQ0hBTl9BUlJBWV9TRVQoYXJyYXksaW5kZXgpIFwKKyNkZWZpbmUgQ0hBTl9BUlJBWV9TRVQoYXJyYXksIGluZGV4KSBcCiAJKCgoYXJyYXkpWyhpbmRleCkvOF0gfD0gMSA8PCAoKGluZGV4KSAmIDB4NykpKQotI2RlZmluZSBDSEFOX0FSUkFZX0NMRUFSKGFycmF5LGluZGV4KSBcCisjZGVmaW5lIENIQU5fQVJSQVlfQ0xFQVIoYXJyYXksIGluZGV4KSBcCiAJKCgoYXJyYXkpWyhpbmRleCkvOF0gJj0gfigxIDw8ICgoaW5kZXgpICYgMHg3KSkpKQogCiAvKgogICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bwogICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBkZXZwcml2ICgocnRkUHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBydGRQcml2YXRlICopZGV2LT5wcml2YXRlKQogCiAvKiBNYWNyb3MgdG8gYWNjZXNzIHJlZ2lzdGVycyAqLwogCkBAIC0zOTQsMTUgKzM5NCwxNSBAQAogICAgIHdyaXRlbCAoMCwgZGV2cHJpdi0+bGFzMCtMQVMwX0NHVF9DTEVBUikKIAogLyogUmVzZXQgY2hhbm5lbCBnYWluIHRhYmxlIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzICovCi0jZGVmaW5lIFJ0ZEVuYWJsZUNHVChkZXYsdikgXAorI2RlZmluZSBSdGRFbmFibGVDR1QoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9DR1RfRU5BQkxFKQogCiAvKiBXcml0ZSBjaGFubmVsIGdhaW4gdGFibGUgZW50cnkgKi8KLSNkZWZpbmUgUnRkV3JpdGVDR1RhYmxlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFdyaXRlQ0dUYWJsZShkZXYsIHYpIFwKICAgICB3cml0ZWwgKHYsIGRldnByaXYtPmxhczArTEFTMF9DR1RfV1JJVEUpCiAKIC8qIFdyaXRlIENoYW5uZWwgR2FpbiBMYXRjaCAqLwotI2RlZmluZSBSdGRXcml0ZUNHTGF0Y2goZGV2LHYpIFwKKyNkZWZpbmUgUnRkV3JpdGVDR0xhdGNoKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX0NHTF9XUklURSkKIAogLyogUmVzZXQgQURDIEZJRk8gKi8KQEAgLTQxMCwzOSArNDEwLDM5IEBACiAgICAgd3JpdGVsICgwLCBkZXZwcml2LT5sYXMwK0xBUzBfQURDX0ZJRk9fQ0xFQVIpCiAKIC8qIFNldCBBREMgc3RhcnQgY29udmVyc2lvbiBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRBZGNDb252ZXJzaW9uU291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFkY0NvbnZlcnNpb25Tb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQURDX0NPTlZFUlNJT04pCiAKIC8qIFNldCBidXJzdCBzdGFydCBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRCdXJzdFN0YXJ0U291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZEJ1cnN0U3RhcnRTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQlVSU1RfU1RBUlQpCiAKIC8qIFNldCBQYWNlciBzdGFydCBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRQYWNlclN0YXJ0U291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBhY2VyU3RhcnRTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfUEFDRVJfU1RBUlQpCiAKIC8qIFNldCBQYWNlciBzdG9wIHNvdXJjZSBzZWxlY3QgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFJ0ZFBhY2VyU3RvcFNvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRQYWNlclN0b3BTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfUEFDRVJfU1RPUCkKIAogLyogU2V0IFBhY2VyIGNsb2NrIHNvdXJjZSBzZWxlY3QgKHdyaXRlIG9ubHkpIDA9ZXh0ZXJuYWwgMT1pbnRlcm5hbCAqLwotI2RlZmluZSBSdGRQYWNlckNsb2NrU291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBhY2VyQ2xvY2tTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9QQUNFUl9TRUxFQ1QpCiAKIC8qIFNldCBzYW1wbGUgY291bnRlciBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudGVyU291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFkY1NhbXBsZUNvdW50ZXJTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQURDX1NDTlRfU1JDKQogCiAvKiBTZXQgUGFjZXIgdHJpZ2dlciBtb2RlIHNlbGVjdCAod3JpdGUgb25seSkgMD1zaW5nbGUgY3ljbGUsIDE9cmVwZWF0ICovCi0jZGVmaW5lIFJ0ZFBhY2VyVHJpZ2dlck1vZGUoZGV2LHYpIFwKKyNkZWZpbmUgUnRkUGFjZXJUcmlnZ2VyTW9kZShkZXYsIHYpIFwKICAgICB3cml0ZWwgKCh2ID4gMCkgPyAxIDogMCwgZGV2cHJpdi0+bGFzMCtMQVMwX1BBQ0VSX1JFUEVBVCkKIAogLyogU2V0IEFib3V0IGNvdW50ZXIgc3RvcCBlbmFibGUgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFJ0ZEFib3V0U3RvcEVuYWJsZShkZXYsdikgXAorI2RlZmluZSBSdGRBYm91dFN0b3BFbmFibGUoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9BQ05UX1NUT1BfRU5BQkxFKQogCiAvKiBTZXQgZXh0ZXJuYWwgdHJpZ2dlciBwb2xhcml0eSAod3JpdGUgb25seSkgMD1wb3NpdGl2ZSBlZGdlLCAxPW5lZ2F0aXZlICovCi0jZGVmaW5lIFJ0ZFRyaWdnZXJQb2xhcml0eShkZXYsdikgXAorI2RlZmluZSBSdGRUcmlnZ2VyUG9sYXJpdHkoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9FVFJHX1BPTEFSSVRZKQogCiAvKiBTdGFydCBzaW5nbGUgQURDIGNvbnZlcnNpb24gKi8KQEAgLTQ3MywxNSArNDczLDE1IEBACiAgICAgcmVhZHcgKGRldnByaXYtPmxhczArTEFTMF9JVCkKIAogLyogSW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgUnRkSW50ZXJydXB0TWFzayhkZXYsdikgXAotICAgIHdyaXRldyAoKGRldnByaXYtPmludE1hc2sgPSAodikpLGRldnByaXYtPmxhczArTEFTMF9JVCkKKyNkZWZpbmUgUnRkSW50ZXJydXB0TWFzayhkZXYsIHYpIFwKKyAgICB3cml0ZXcgKChkZXZwcml2LT5pbnRNYXNrID0gKHYpKSwgZGV2cHJpdi0+bGFzMCtMQVMwX0lUKQogCiAvKiBJbnRlcnJ1cHQgc3RhdHVzIGNsZWFyIChvbmx5IGJpdHMgc2V0IGluIG1hc2spICovCiAjZGVmaW5lIFJ0ZEludGVycnVwdENsZWFyKGRldikgXAogICAgIHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfQ0xFQVIpCiAKIC8qIEludGVycnVwdCBjbGVhciBtYXNrICovCi0jZGVmaW5lIFJ0ZEludGVycnVwdENsZWFyTWFzayhkZXYsdikgXAorI2RlZmluZSBSdGRJbnRlcnJ1cHRDbGVhck1hc2soZGV2LCB2KSBcCiAgICAgd3JpdGV3ICgoZGV2cHJpdi0+aW50Q2xlYXJNYXNrID0gKHYpKSwgZGV2cHJpdi0+bGFzMCtMQVMwX0NMRUFSKQogCiAvKiBJbnRlcnJ1cHQgb3ZlcnJ1biBzdGF0dXMgKi8KQEAgLTQ5NSw5MiArNDk1LDkyIEBACiAvKiBQYWNlciBjb3VudGVyLCAyNGJpdCAqLwogI2RlZmluZSBSdGRQYWNlckNvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfUENMSykKLSNkZWZpbmUgUnRkUGFjZXJDb3VudGVyKGRldix2KSBcCi0gICAgd3JpdGVsICgodikgJiAweGZmZmZmZixkZXZwcml2LT5sYXMwK0xBUzBfUENMSykKKyNkZWZpbmUgUnRkUGFjZXJDb3VudGVyKGRldiwgdikgXAorICAgIHdyaXRlbCAoKHYpICYgMHhmZmZmZmYsIGRldnByaXYtPmxhczArTEFTMF9QQ0xLKQogCiAvKiBCdXJzdCBjb3VudGVyLCAxMGJpdCAqLwogI2RlZmluZSBSdGRCdXJzdENvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfQkNMSykKLSNkZWZpbmUgUnRkQnVyc3RDb3VudGVyKGRldix2KSBcCi0gICAgd3JpdGVsICgodikgJiAweDNmZixkZXZwcml2LT5sYXMwK0xBUzBfQkNMSykKKyNkZWZpbmUgUnRkQnVyc3RDb3VudGVyKGRldiwgdikgXAorICAgIHdyaXRlbCAoKHYpICYgMHgzZmYsIGRldnByaXYtPmxhczArTEFTMF9CQ0xLKQogCiAvKiBEZWxheSBjb3VudGVyLCAxNmJpdCAqLwogI2RlZmluZSBSdGREZWxheUNvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfRENMSykKLSNkZWZpbmUgUnRkRGVsYXlDb3VudGVyKGRldix2KSBcCisjZGVmaW5lIFJ0ZERlbGF5Q291bnRlcihkZXYsIHYpIFwKICAgICB3cml0ZWwgKCh2KSAmIDB4ZmZmZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0RDTEspCiAKIC8qIEFib3V0IGNvdW50ZXIsIDE2Yml0ICovCiAjZGVmaW5lIFJ0ZEFib3V0Q291bnQoZGV2KSBcCiAgICAgcmVhZGwgKGRldnByaXYtPmxhczArTEFTMF9BQ05UKQotI2RlZmluZSBSdGRBYm91dENvdW50ZXIoZGV2LHYpIFwKKyNkZWZpbmUgUnRkQWJvdXRDb3VudGVyKGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYpICYgMHhmZmZmLCBkZXZwcml2LT5sYXMwK0xBUzBfQUNOVCkKIAogLyogQURDIHNhbXBsZSBjb3VudGVyLCAxMGJpdCAqLwogI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudChkZXYpIFwKICAgICByZWFkbCAoZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19TQ05UKQotI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudGVyKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFkY1NhbXBsZUNvdW50ZXIoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodikgJiAweDNmZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19TQ05UKQogCiAvKiBVc2VyIFRpbWVyL0NvdW50ZXIgKDgyNTQpICovCi0jZGVmaW5lIFJ0ZFV0Y0NvdW50ZXJHZXQoZGV2LG4pIFwKKyNkZWZpbmUgUnRkVXRjQ291bnRlckdldChkZXYsIG4pIFwKICAgICByZWFkYiAoZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwIDogKCgxID09IG4pID8gTEFTMF9VVEMxIDogTEFTMF9VVEMyKSkpCiAKLSNkZWZpbmUgUnRkVXRjQ291bnRlclB1dChkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZFV0Y0NvdW50ZXJQdXQoZGV2LCBuLCB2KSBcCiAgICAgd3JpdGViICgodikgJiAweGZmLCBkZXZwcml2LT5sYXMwIFwKICAgICAgICAgKyAoKG4gPD0gMCkgPyBMQVMwX1VUQzAgOiAoKDEgPT0gbikgPyBMQVMwX1VUQzEgOiBMQVMwX1VUQzIpKSkKIAogLyogU2V0IFVUQyAoODI1NCkgY29udHJvbCBieXRlICAqLwotI2RlZmluZSBSdGRVdGNDdHJsUHV0KGRldixuLHYpIFwKKyNkZWZpbmUgUnRkVXRjQ3RybFB1dChkZXYsIG4sIHYpIFwKICAgICB3cml0ZWIgKGRldnByaXYtPnV0Y0N0cmxbKG4pICYgM10gPSAoKChuKSAmIDMpIDw8IDYpIHwgKCh2KSAmIDB4M2YpLCBcCiAgICAgICBkZXZwcml2LT5sYXMwICsgTEFTMF9VVENfQ1RSTCkKIAogLyogU2V0IFVUQ24gY2xvY2sgc291cmNlICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRVdGNDbG9ja1NvdXJjZShkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZFV0Y0Nsb2NrU291cmNlKGRldiwgbiwgdikgXAogICAgIHdyaXRldyAodiwgZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwX0NMT0NLIDogXAogICAgICAgICAgICAoKDEgPT0gbikgPyBMQVMwX1VUQzFfQ0xPQ0sgOiBMQVMwX1VUQzJfQ0xPQ0spKSkKIAogLyogU2V0IFVUQ24gZ2F0ZSBzb3VyY2UgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFJ0ZFV0Y0dhdGVTb3VyY2UoZGV2LG4sdikgXAorI2RlZmluZSBSdGRVdGNHYXRlU291cmNlKGRldiwgbiwgdikgXAogICAgIHdyaXRldyAodiwgZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwX0dBVEUgOiBcCiAgICAgICAgICAgICgoMSA9PSBuKSA/IExBUzBfVVRDMV9HQVRFIDogTEFTMF9VVEMyX0dBVEUpKSkKIAogLyogVXNlciBvdXRwdXQgTiBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRVc3JPdXRTb3VyY2UoZGV2LG4sdikgXAotICAgIHdyaXRlbCAodixkZXZwcml2LT5sYXMwKygobiA8PSAwKSA/IExBUzBfVU9VVDBfU0VMRUNUIDogTEFTMF9VT1VUMV9TRUxFQ1QpKQorI2RlZmluZSBSdGRVc3JPdXRTb3VyY2UoZGV2LCBuLCB2KSBcCisgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwKygobiA8PSAwKSA/IExBUzBfVU9VVDBfU0VMRUNUIDogTEFTMF9VT1VUMV9TRUxFQ1QpKQogCiAvKiBEaWdpdGFsIElPICovCiAjZGVmaW5lIFJ0ZERpbzBSZWFkKGRldikgXAogICAgIChyZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0RJTzApICYgMHhmZikKLSNkZWZpbmUgUnRkRGlvMFdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZERpbzBXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDB4ZmYsIGRldnByaXYtPmxhczArTEFTMF9ESU8wKQogCiAjZGVmaW5lIFJ0ZERpbzFSZWFkKGRldikgXAogICAgIChyZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0RJTzEpICYgMHhmZikKLSNkZWZpbmUgUnRkRGlvMVdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZERpbzFXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDB4ZmYsIGRldnByaXYtPmxhczArTEFTMF9ESU8xKQogCiAjZGVmaW5lIFJ0ZERpb1N0YXR1c1JlYWQoZGV2KSBcCiAgICAgKHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfRElPX1NUQVRVUykgJiAweGZmKQotI2RlZmluZSBSdGREaW9TdGF0dXNXcml0ZShkZXYsdikgXAorI2RlZmluZSBSdGREaW9TdGF0dXNXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKChkZXZwcml2LT5kaW9TdGF0dXMgPSAodikpLCBkZXZwcml2LT5sYXMwK0xBUzBfRElPX1NUQVRVUykKIAogI2RlZmluZSBSdGREaW8wQ3RybFJlYWQoZGV2KSBcCiAgICAgKHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfRElPMF9DVFJMKSAmIDB4ZmYpCi0jZGVmaW5lIFJ0ZERpbzBDdHJsV3JpdGUoZGV2LHYpIFwKKyNkZWZpbmUgUnRkRGlvMEN0cmxXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDB4ZmYsIGRldnByaXYtPmxhczArTEFTMF9ESU8wX0NUUkwpCiAKIC8qIERpZ2l0YWwgdG8gQW5hbG9nIGNvbnZlcnRlciAqLwogLyogV3JpdGUgb25lIGRhdGEgdmFsdWUgKHNpZ24gKyAxMmJpdCArIG1hcmtlciBiaXRzKSAqLwogLyogTm90ZTogbWF0Y2hlcyB3aGF0IERNQSB3b3VsZCBwdXQuICBBY3R1YWwgdmFsdWUgPDwgMyAqLwotI2RlZmluZSBSdGREYWNGaWZvUHV0KGRldixuLHYpIFwKKyNkZWZpbmUgUnRkRGFjRmlmb1B1dChkZXYsIG4sIHYpIFwKICAgICB3cml0ZXcgKCh2KSwgZGV2cHJpdi0+bGFzMSArKCgobikgPT0gMCkgPyBMQVMxX0RBQzFfRklGTyA6IExBUzFfREFDMl9GSUZPKSkKIAogLyogU3RhcnQgc2luZ2xlIERBQyBjb252ZXJzaW9uICovCi0jZGVmaW5lIFJ0ZERhY1VwZGF0ZShkZXYsbikgXAorI2RlZmluZSBSdGREYWNVcGRhdGUoZGV2LCBuKSBcCiAgICAgd3JpdGV3ICgwLCBkZXZwcml2LT5sYXMwICsoKChuKSA9PSAwKSA/IExBUzBfREFDMSA6IExBUzBfREFDMikpCiAKIC8qIFN0YXJ0IHNpbmdsZSBEQUMgY29udmVyc2lvbiBvbiBib3RoIERBQ3MgKi8KQEAgLTU4OCwyMCArNTg4LDIwIEBACiAgICAgd3JpdGV3ICgwLCBkZXZwcml2LT5sYXMwK0xBUzBfREFDKQogCiAvKiBTZXQgREFDIG91dHB1dCB0eXBlIGFuZCByYW5nZSAqLwotI2RlZmluZSBSdGREYWNSYW5nZShkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZERhY1JhbmdlKGRldiwgbiwgdikgXAogICAgIHdyaXRldyAoKHYpICYgNywgZGV2cHJpdi0+bGFzMCBcCiAJKygoKG4pID09IDApID8gTEFTMF9EQUMxX0NUUkwgOiBMQVMwX0RBQzJfQ1RSTCkpCiAKIC8qIFJlc2V0IERBQyBGSUZPICovCi0jZGVmaW5lIFJ0ZERhY0NsZWFyRmlmbyhkZXYsbikgXAorI2RlZmluZSBSdGREYWNDbGVhckZpZm8oZGV2LCBuKSBcCiAgICAgd3JpdGVsICgwLCBkZXZwcml2LT5sYXMwKygoKG4pID09IDApID8gTEFTMF9EQUMxX1JFU0VUIDogTEFTMF9EQUMyX1JFU0VUKSkKIAogLyogU2V0IHNvdXJjZSBmb3IgRE1BIDAgKHdyaXRlIG9ubHksIHNoYWRvdz8pICovCi0jZGVmaW5lIFJ0ZERtYTBTb3VyY2UoZGV2LG4pIFwKKyNkZWZpbmUgUnRkRG1hMFNvdXJjZShkZXYsIG4pIFwKICAgICB3cml0ZWwgKChuKSAmIDB4ZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0RNQTBfU1JDKQogCiAvKiBTZXQgc291cmNlIGZvciBETUEgMSAod3JpdGUgb25seSwgc2hhZG93PykgKi8KLSNkZWZpbmUgUnRkRG1hMVNvdXJjZShkZXYsbikgXAorI2RlZmluZSBSdGREbWExU291cmNlKGRldiwgbikgXAogICAgIHdyaXRlbCAoKG4pICYgMHhmLCBkZXZwcml2LT5sYXMwK0xBUzBfRE1BMV9TUkMpCiAKIC8qIFJlc2V0IGJvYXJkIHN0YXRlIGZvciBETUEgMCAqLwpAQCAtNjE1LDUxICs2MTUsNTEgQEAKIC8qIFBMWDkwODAgaW50ZXJydXB0IG1hc2sgYW5kIHN0YXR1cyAqLwogI2RlZmluZSBSdGRQbHhJbnRlcnJ1cHRSZWFkKGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sY2ZnK0xDRkdfSVRDU1IpCi0jZGVmaW5lIFJ0ZFBseEludGVycnVwdFdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBseEludGVycnVwdFdyaXRlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGNmZytMQ0ZHX0lUQ1NSKQogCiAvKiBTZXQgIG1vZGUgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBNb2RlKGRldixtKSBcCisjZGVmaW5lIFJ0ZERtYTBNb2RlKGRldiwgbSkgXAogICAgIHdyaXRlbCAoKG0pLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BTU9ERTApCiAKIC8qIFNldCBQQ0kgYWRkcmVzcyBmb3IgRE1BIDAgKi8KLSNkZWZpbmUgUnRkRG1hMFBjaUFkZHIoZGV2LGEpIFwKKyNkZWZpbmUgUnRkRG1hMFBjaUFkZHIoZGV2LCBhKSBcCiAgICAgd3JpdGVsICgoYSksIGRldnByaXYtPmxjZmcrTENGR19ETUFQQURSMCkKIAogLyogU2V0IGxvY2FsIGFkZHJlc3MgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBMb2NhbEFkZHIoZGV2LGEpIFwKKyNkZWZpbmUgUnRkRG1hMExvY2FsQWRkcihkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUxBRFIwKQogCiAvKiBTZXQgYnl0ZSBjb3VudCBmb3IgRE1BIDAgKi8KLSNkZWZpbmUgUnRkRG1hMENvdW50KGRldixjKSBcCisjZGVmaW5lIFJ0ZERtYTBDb3VudChkZXYsIGMpIFwKICAgICB3cml0ZWwgKChjKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQVNJWjApCiAKIC8qIFNldCBuZXh0IGRlc2NyaXB0b3IgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBOZXh0KGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTBOZXh0KGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BRFBSMCkKIAogLyogU2V0ICBtb2RlIGZvciBETUEgMSAqLwotI2RlZmluZSBSdGREbWExTW9kZShkZXYsbSkgXAorI2RlZmluZSBSdGREbWExTW9kZShkZXYsIG0pIFwKICAgICB3cml0ZWwgKChtKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQU1PREUxKQogCiAvKiBTZXQgUENJIGFkZHJlc3MgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFQY2lBZGRyKGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTFQY2lBZGRyKGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQURSMSkKIAogLyogU2V0IGxvY2FsIGFkZHJlc3MgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFMb2NhbEFkZHIoZGV2LGEpIFwKKyNkZWZpbmUgUnRkRG1hMUxvY2FsQWRkcihkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUxBRFIxKQogCiAvKiBTZXQgYnl0ZSBjb3VudCBmb3IgRE1BIDEgKi8KLSNkZWZpbmUgUnRkRG1hMUNvdW50KGRldixjKSBcCisjZGVmaW5lIFJ0ZERtYTFDb3VudChkZXYsIGMpIFwKICAgICB3cml0ZWwgKChjKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQVNJWjEpCiAKIC8qIFNldCBuZXh0IGRlc2NyaXB0b3IgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFOZXh0KGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTFOZXh0KGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BRFBSMSkKIAogLyogU2V0IGNvbnRyb2wgZm9yIERNQSAwICh3cml0ZSBvbmx5LCBzaGFkb3c/KSAqLwotI2RlZmluZSBSdGREbWEwQ29udHJvbChkZXYsbikgXAorI2RlZmluZSBSdGREbWEwQ29udHJvbChkZXYsIG4pIFwKICAgICB3cml0ZWIgKGRldnByaXYtPmRtYTBDb250cm9sID0gKG4pLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMCkKIAogLyogR2V0IHN0YXR1cyBmb3IgRE1BIDAgKi8KQEAgLTY2Nyw3ICs2NjcsNyBAQAogICAgIHJlYWRiIChkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMCkKIAogLyogU2V0IGNvbnRyb2wgZm9yIERNQSAxICh3cml0ZSBvbmx5LCBzaGFkb3c/KSAqLwotI2RlZmluZSBSdGREbWExQ29udHJvbChkZXYsbikgXAorI2RlZmluZSBSdGREbWExQ29udHJvbChkZXYsIG4pIFwKICAgICB3cml0ZWIgKGRldnByaXYtPmRtYTFDb250cm9sID0gKG4pLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMSkKIAogLyogR2V0IHN0YXR1cyBmb3IgRE1BIDEgKi8KQEAgLTY3NSwzOSArNjc1LDM5IEBACiAgICAgcmVhZGIgKGRldnByaXYtPmxjZmcrTENGR19ETUFDU1IxKQogCiAvKgotICogVGhlIGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQogICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhYy9kZXRhY2gpCiAgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKICAqIHRoZSBkZXZpY2UgY29kZS4KICAqLwotc3RhdGljIGludCBydGRfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IHJ0ZF9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHJ0ZF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgcnRkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgcnRkNTIwRHJpdmVyID0geworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIHJ0ZDUyMERyaXZlciA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiBEUlZfTkFNRSwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDpydGRfYXR0YWNoLAotICAgICAgZGV0YWNoOnJ0ZF9kZXRhY2gsCisgICAgICBtb2R1bGUgOiBUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaCA6IHJ0ZF9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBydGRfZGV0YWNoLAogfTsKIAotc3RhdGljIGludCBydGRfYWlfcmluc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfYW9fd2luc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfYW9fcmluc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kKTsKLXN0YXRpYyBpbnQgcnRkX2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7Ci1zdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotLy9zdGF0aWMgaW50IHJ0ZF9haV9wb2xsIChjb21lZGlfZGV2aWNlICpkZXYsY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHJ0ZF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgcnRkX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBydGRfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK3N0YXRpYyBpbnQgcnRkX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvKiBzdGF0aWMgaW50IHJ0ZF9haV9wb2xsIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsgKi8KIHN0YXRpYyBpbnQgcnRkX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZE1vZGUpOwogc3RhdGljIGlycXJldHVybl90IHJ0ZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7Ci1zdGF0aWMgaW50IHJ0ZDUyMF9wcm9iZV9maWZvX2RlcHRoKGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHJ0ZDUyMF9wcm9iZV9maWZvX2RlcHRoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAvKgogICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKQEAgLTcxNSw5ICs3MTUsOSBAQAogICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKICAqIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IHJ0ZF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewkJCQkvKiBib2FyZCBuYW1lIGFuZCBvcHRpb25zIGZsYWdzICovCi0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwogCWludCByZXQ7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNMYXMwOwkvKiBjb25maWd1YXRpb24gKi8KQEAgLTczOSw3ICs3MzksNyBAQAogCSAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKIAkgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCiAJICovCi0JaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YocnRkUHJpdmF0ZSkpIDwgMCkKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcnRkUHJpdmF0ZSkpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKgpAQCAtNzc5LDcgKzc3OSw4IEBACiAJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CiAKLQlpZiAoKHJldCA9IGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgRFJWX05BTUUpKSA8IDApIHsKKwlyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIERSVl9OQU1FKTsKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zLlxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtODY2LDcgKzg2Nyw3IEBACiAJcy0+ZG9fY21kID0gcnRkX2FpX2NtZDsKIAlzLT5kb19jbWR0ZXN0ID0gcnRkX2FpX2NtZHRlc3Q7CiAJcy0+Y2FuY2VsID0gcnRkX2FpX2NhbmNlbDsKLQkvKnMtPnBvbGwgPSBydGRfYWlfcG9sbDsgKi8vKiBub3QgcmVhZHkgeWV0ICovCisJLyogcy0+cG9sbCA9IHJ0ZF9haV9wb2xsOyAqLyAvKiBub3QgcmVhZHkgeWV0ICovCiAKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKIAkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLwpAQCAtOTE4LDggKzkxOSwxMCBAQAogCS8qIFRPRE86IHNldCB1c2VyIG91dCBzb3VyY2UgPz8/ICovCiAKIAkvKiBjaGVjayBpZiBvdXIgaW50ZXJydXB0IGlzIGF2YWlsYWJsZSBhbmQgZ2V0IGl0ICovCi0JaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBydGRfaW50ZXJydXB0LAotCQkJCUlSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KSkgPCAwKSB7CisJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgcnRkX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBkZXYpOworCisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGludGVycnVwdCEgKCV1KVxuIiwKIAkJCWRldnByaXYtPnBjaV9kZXYtPmlycSk7CiAJCXJldHVybiByZXQ7CkBAIC0xMDA1LDcgKzEwMDgsNyBAQAogCiAjaWYgMAogCS8qIGhpdCBhbiBlcnJvciwgY2xlYW4gdXAgbWVtb3J5IGFuZCByZXR1cm4gcmV0ICovCi0vL3J0ZF9hdHRhY2hfZGllX2Vycm9yOgorLyogcnRkX2F0dGFjaF9kaWVfZXJyb3I6ICovCiAjaWZkZWYgVVNFX0RNQQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IERNQV9DSEFJTl9DT1VOVDsgaW5kZXgrKykgewogCQlpZiAoTlVMTCAhPSBkZXZwcml2LT5kbWEwQnVmZltpbmRleF0pIHsJLyogZnJlZSBidWZmZXIgbWVtb3J5ICovCkBAIC0xMDU3LDcgKzEwNjAsNyBAQAogICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQogICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KICAqLwotc3RhdGljIGludCBydGRfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHJ0ZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBVU0VfRE1BCiAJaW50IGluZGV4OwpAQCAtMTEzNyw3ICsxMTQwLDcgQEAKIC8qCiAgIENvbnZlcnQgYSBzaW5nbGUgY29tZWRpIGNoYW5uZWwtZ2FpbiBlbnRyeSB0byBhIFJURDUyMCB0YWJsZSBlbnRyeQogKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBydGRDb252ZXJ0Q2hhbkdhaW4oY29tZWRpX2RldmljZSAqIGRldiwKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBydGRDb252ZXJ0Q2hhbkdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAl1bnNpZ25lZCBpbnQgY29tZWRpQ2hhbiwgaW50IGNoYW5JbmRleCkKIHsJCQkJLyogaW5kZXggaW4gY2hhbm5lbCBsaXN0ICovCiAJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlLCBhcmVmOwpAQCAtMTE4Nyw3ICsxMTkwLDcgQEAKIC8qCiAgIFNldHVwIHRoZSBjaGFubmVsLWdhaW4gdGFibGUgZnJvbSBhIGNvbWVkaSBsaXN0CiAqLwotc3RhdGljIHZvaWQgcnRkX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChjb21lZGlfZGV2aWNlICogZGV2LAorc3RhdGljIHZvaWQgcnRkX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqbGlzdCkKIHsKIAlpZiAobl9jaGFuID4gMSkgewkvKiBzZXR1cCBjaGFubmVsIGdhaW4gdGFibGUgKi8KQEAgLTEyMDYsOSArMTIwOSw5IEBACiAKIC8qIGRldGVybWluZSBmaWZvIHNpemUgYnkgZG9pbmcgYWRjIGNvbnZlcnNpb25zIHVudGlsIHRoZSBmaWZvIGhhbGYKIGVtcHR5IHN0YXR1cyBmbGFnIGNsZWFycyAqLwotc3RhdGljIGludCBydGQ1MjBfcHJvYmVfZmlmb19kZXB0aChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0ZDUyMF9wcm9iZV9maWZvX2RlcHRoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JbHNhbXBsX3QgY2hhbnNwZWMgPSBDUl9QQUNLKDAsIDAsIEFSRUZfR1JPVU5EKTsKKwl1bnNpZ25lZCBpbnQgY2hhbnNwZWMgPSBDUl9QQUNLKDAsIDAsIEFSRUZfR1JPVU5EKTsKIAl1bnNpZ25lZCBpOwogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsaW1pdCA9IDB4MjAwMDsKIAl1bnNpZ25lZCBmaWZvX3NpemUgPSAwOwpAQCAtMTIzNCw3ICsxMjM3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCVJ0ZEFkY0NsZWFyRmlmbyhkZXYpOwotCWlmKGZpZm9fc2l6ZSAhPSAweDQwMCB8fCBmaWZvX3NpemUgIT0gMHgyMDAwKQorCWlmKGZpZm9fc2l6ZSAhPSAweDQwMCAmJiBmaWZvX3NpemUgIT0gMHgyMDAwKQogCXsKIAkJcnRfcHJpbnRrKCJcbmNvbWVkaTogJXM6IHVuZXhwZWN0ZWQgZmlmbyBzaXplIG9mICVpLCBleHBlY3RlZCAxMDI0IG9yIDgxOTIuXG4iLAogCQkJRFJWX05BTUUsIGZpZm9fc2l6ZSk7CkBAIC0xMjUxLDggKzEyNTQsOCBAQAogICBOb3RlLCB3ZSBkb24ndCBkbyBhbnkgc2V0dGxpbmcgZGVsYXlzLiAgVXNlIGEgaW5zdHJ1Y3Rpb24gbGlzdCB0bwogICBzZWxlY3QsIGRlbGF5LCB0aGVuIHJlYWQuCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBydGRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG4sIGlpOwogCWludCBzdGF0OwpAQCAtMTMwNCwxMiArMTMwNywxMiBAQAogCiAgIFRoZSBtYW51YWwgY2xhaW1zIHRoYXQgd2UgY2FuIGRvIGEgbHdvcmQgcmVhZCwgYnV0IGl0IGRvZXNuJ3Qgd29yayBoZXJlLgogKi8KLXN0YXRpYyBpbnQgYWlfcmVhZF9uKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGFpX3JlYWRfbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IGNvdW50KQogewogCWludCBpaTsKIAogCWZvciAoaWkgPSAwOyBpaSA8IGNvdW50OyBpaSsrKSB7Ci0JCXNhbXBsX3Qgc2FtcGxlOworCQlzaG9ydCBzYW1wbGU7CiAJCXMxNiBkOwogCiAJCWlmICgwID09IGRldnByaXYtPmFpQ291bnQpIHsJLyogZG9uZSAqLwpAQCAtMTM0MywxMCArMTM0NiwxMCBAQAogLyoKICAgdW5rbm93biBhbW91dCBvZiBkYXRhIGlzIHdhaXRpbmcgaW4gZmlmby4KICovCi1zdGF0aWMgaW50IGFpX3JlYWRfZHJlZ3MoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IGFpX3JlYWRfZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJd2hpbGUgKFJ0ZEZpZm9TdGF0dXMoZGV2KSAmIEZTX0FEQ19OT1RfRU1QVFkpIHsJLyogMSAtPiBub3QgZW1wdHkgKi8KLQkJc2FtcGxfdCBzYW1wbGU7CisJCXNob3J0IHNhbXBsZTsKIAkJczE2IGQgPSBSdGRBZGNGaWZvR2V0KGRldik7CS8qIGdldCAycyBjb21wIHZhbHVlICovCiAKIAkJaWYgKDAgPT0gZGV2cHJpdi0+YWlDb3VudCkgewkvKiBkb25lICovCkBAIC0xMzcyLDIwICsxMzc1LDIwIEBACiAvKgogICBUZXJtaW5hdGUgYSBETUEgdHJhbnNmZXIgYW5kIHdhaXQgZm9yIGV2ZXJ5dGhpbmcgdG8gcXVpZXQgZG93bgogKi8KLXZvaWQgYWJvcnRfZG1hKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQordm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CQkJCS8qIERNQSBjaGFubmVsIDAsIDEgKi8KIAl1bnNpZ25lZCBsb25nIGRtYV9jc19hZGRyOwkvKiB0aGUgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KIAl1aW50OF90IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaWk7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOworCS8qIHVuc2lnbmVkIGxvbmcgZmxhZ3M7ICovCiAKIAlkbWFfY3NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPmxjZmcKIAkJKyAoKGNoYW5uZWwgPT0gMCkgPyBMQ0ZHX0RNQUNTUjAgOiBMQ0ZHX0RNQUNTUjEpOwogCi0JLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCi0JLy9jb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoICZkZXYtPnNwaW5sb2NrLCBmbGFncyApOworCS8qICBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcgKi8KKwkvKiBjb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoICZkZXYtPnNwaW5sb2NrLCBmbGFncyApOyAqLwogCi0JLy8gYWJvcnQgZG1hIHRyYW5zZmVyIGlmIG5lY2Vzc2FyeQorCS8qICBhYm9ydCBkbWEgdHJhbnNmZXIgaWYgbmVjZXNzYXJ5ICovCiAJc3RhdHVzID0gcmVhZGIoZG1hX2NzX2FkZHIpOwogCWlmICgoc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpID09IDApIHsJLyogbm90IGVuYWJsZWQgKEVycm9yPykgKi8KIAkJRFBSSU5USygicnRkNTIwOiBBYm9ydERtYSBvbiBub24tYWN0aXZlIGNoYW5uZWwgJWQgKDB4JXgpXG4iLApAQCAtMTQxMCw3ICsxNDEzLDcgQEAKIAkvKiBzZXQgYWJvcnQgYml0IGZvciBjaGFubmVsICovCiAJd3JpdGViKFBMWF9ETUFfQUJPUlRfQklULCBkbWFfY3NfYWRkcik7CiAKLQkvLyB3YWl0IGZvciBkbWEgZG9uZSBiaXQgdG8gYmUgc2V0CisJLyogIHdhaXQgZm9yIGRtYSBkb25lIGJpdCB0byBiZSBzZXQgKi8KIAlzdGF0dXMgPSByZWFkYihkbWFfY3NfYWRkcik7CiAJZm9yIChpaSA9IDA7CiAJCShzdGF0dXMgJiBQTFhfRE1BX0RPTkVfQklUKSA9PSAwICYmIGlpIDwgUlREX0RNQV9USU1FT1VUOwpAQCAtMTQyNCwxNCArMTQyNywxNCBAQAogCX0KIAogICAgICAgYWJvcnREbWFFeGl0OgotCS8vY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZkZXYtPnNwaW5sb2NrLCBmbGFncyApOworCS8qIGNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZGV2LT5zcGlubG9jaywgZmxhZ3MgKTsgKi8KIH0KIAogLyoKICAgUHJvY2VzcyB3aGF0IGlzIGluIHRoZSBETUEgdHJhbnNmZXIgYnVmZmVyIGFuZCBwYXNzIHRvIGNvbWVkaQogICBOb3RlOiB0aGlzIGlzIG5vdCByZS1lbnRyYW50CiAqLwotc3RhdGljIGludCBhaV9wcm9jZXNzX2RtYShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgYWlfcHJvY2Vzc19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJaW50IGlpLCBuOwogCXMxNiAqZHA7CkBAIC0xNDQxLDcgKzE0NDQsNyBAQAogCiAJZHAgPSBkZXZwcml2LT5kbWEwQnVmZltkZXZwcml2LT5kbWEwT2Zmc2V0XTsKIAlmb3IgKGlpID0gMDsgaWkgPCBkZXZwcml2LT5maWZvTGVuIC8gMjspIHsJLyogY29udmVydCBzYW1wbGVzICovCi0JCXNhbXBsX3Qgc2FtcGxlOworCQlzaG9ydCBzYW1wbGU7CiAKIAkJaWYgKENIQU5fQVJSQVlfVEVTVChkZXZwcml2LT5jaGFuQmlwb2xhciwgcy0+YXN5bmMtPmN1cl9jaGFuKSkgewogCQkJc2FtcGxlID0gKCpkcCA+PiAzKSArIDIwNDg7CS8qIGNvbnZlcnQgdG8gY29tZWRpIHVuc2lnbmVkIGRhdGEgKi8KQEAgLTE0OTQsMTAgKzE0OTcsMTAgQEAKIAl2b2lkICpkCQkJLyogb3VyIGRhdGEgKi8KIAlQVF9SRUdTX0FSRykKIHsJCQkJLyogY3B1IGNvbnRleHQgKGlnbm9yZWQpICovCi0JY29tZWRpX2RldmljZSAqZGV2ID0gZDsJLyogbXVzdCBiZSBjYWxsZWQgImRldiIgZm9yIGRldnByaXYgKi8KKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsJLyogbXVzdCBiZSBjYWxsZWQgImRldiIgZm9yIGRldnByaXYgKi8KIAl1MTYgc3RhdHVzOwogCXUxNiBmaWZvU3RhdHVzOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwkvKiBhbmFsb2cgaW4gc3ViZGV2aWNlICovCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwkvKiBhbmFsb2cgaW4gc3ViZGV2aWNlICovCiAKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtMTY0NSw3ICsxNjQ4LDcgQEAKIC8qCiAgIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgYXZhaWxhYmxlCiAqLwotc3RhdGljIGludCBydGRfYWlfcG9sbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgcnRkX2FpX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJLyogVE9ETzogVGhpcyBuZWVkcyB0byBtYXNrIGludGVycnVwdHMsIHJlYWRfZHJlZ3MsIGFuZCB0aGVuIHJlLWVuYWJsZSAqLwogCS8qIE5vdCBzdXJlIHdoYXQgdG8gZG8gaWYgRE1BIGlzIGFjdGl2ZSAqLwpAQCAtMTY2Miw4ICsxNjY1LDggQEAKICAgdGhlIGNvbW1hbmQgcGFzc2VzLgogKi8KIAotc3RhdGljIGludCBydGRfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBydGRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwOwogCWludCB0bXA7CkBAIC0xODY3LDkgKzE4NzAsOSBAQAogICBUaGlzIGlzIHVzdWFsbHkgZG9uZSBieSBhbiBpbnRlcnJ1cHQgaGFuZGxlci4KICAgVXNlcmxhbmQgZ2V0cyB0byB0aGUgZGF0YSB1c2luZyByZWFkIGNhbGxzLgogKi8KLXN0YXRpYyBpbnQgcnRkX2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgcnRkX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJaW50IHRpbWVyOwogCiAJLyogc3RvcCBhbnl0aGluZyBjdXJyZW50bHkgcnVubmluZyAqLwpAQCAtMjA2NCw3ICsyMDY3LDcgQEAKIC8qCiAgIFN0b3AgYSBydW5uaW5nIGRhdGEgYXF1aXNpdGlvbi4KICovCi1zdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdTE2IHN0YXR1czsKIApAQCAtMjEzMiw4ICsyMTM1LDggQEAKIC8qCiAgIE91dHB1dCBvbmUgKG9yIG1vcmUpIGFuYWxvZyB2YWx1ZXMgdG8gYSBzaW5nbGUgcG9ydCBhcyBmYXN0IGFzIHBvc3NpYmxlLgogKi8KLXN0YXRpYyBpbnQgcnRkX2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBydGRfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTIxNTIsNyArMjE1NSw3IEBACiAJCS8qIFZFUklGWTogY29tZWRpIHJhbmdlIGFuZCBvZmZzZXQgY29udmVyc2lvbnMgKi8KIAogCQlpZiAoKHJhbmdlID4gMSkJLyogYmlwb2xhciAqLwotCQkJJiYoZGF0YVtpXSA8IDIwNDgpKSB7CisJCQkmJiAoZGF0YVtpXSA8IDIwNDgpKSB7CiAJCQkvKiBvZmZzZXQgYW5kIHNpZ24gZXh0ZW5kICovCiAJCQl2YWwgPSAoKChpbnQpZGF0YVtpXSkgLSAyMDQ4KSA8PCAzOwogCQl9IGVsc2UgewkvKiB1bmlwb2xvciAqLwpAQCAtMjE4Nyw4ICsyMTkwLDggQEAKIAogLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KICAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCi1zdGF0aWMgaW50IHJ0ZF9hb19yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgcnRkX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0yMjEwLDggKzIyMTMsOCBAQAogICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCiAgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChpbnNuLT5uICE9IDIpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjIzNyw4ICsyMjQwLDggQEAKIC8qCiAgIENvbmZpZ3VyZSBvbmUgYml0IG9uIGEgSU8gcG9ydCBhcyBJbnB1dCBvciBPdXRwdXQgKGhlbmNlIHRoZSBuYW1lIDotKS4KICovCi1zdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5oCmluZGV4IDBlYjUwYjguLmEzZWMyNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmgKQEAgLTI5LDM2NiArMjksMzY2IEBACiAgIExBUzAgUnVudGltZSBBcmVhCiAgIExvY2FsIEFkZHJlc3MgU3BhY2UgMCBPZmZzZXQJCVJlYWQgRnVuY3Rpb24JV3JpdGUgRnVuY3Rpb24KICovCi0jZGVmaW5lIExBUzBfU1BBUkVfMDAgICAgMHgwMDAwCS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotI2RlZmluZSBMQVMwX1NQQVJFXzA0ICAgIDB4MDAwNAkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLSNkZWZpbmUgTEFTMF9VU0VSX0lPICAgICAweDAwMDgJLy8gUmVhZCBVc2VyIElucHV0cyAgICAgICAgICAgICAgICBXcml0ZSBVc2VyIE91dHB1dHMKLSNkZWZpbmUgTEFTMF9TUEFSRV8wQyAgICAweDAwMEMJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi0jZGVmaW5lIExBUzBfQURDICAgICAgICAgMHgwMDEwCS8vIFJlYWQgRklGTyBTdGF0dXMgICAgICAgICAgICAgICAgU29mdHdhcmUgQS9EIFN0YXJ0Ci0jZGVmaW5lIExBUzBfREFDMSAgICAgICAgMHgwMDE0CS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMSBVcGRhdGUKLSNkZWZpbmUgTEFTMF9EQUMyICAgICAgICAweDAwMTgJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBEL0EyIFVwZGF0ZQotI2RlZmluZSBMQVMwX1NQQVJFXzFDICAgIDB4MDAxQwkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLSNkZWZpbmUgTEFTMF9TUEFSRV8yMCAgICAweDAwMjAJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi0jZGVmaW5lIExBUzBfREFDICAgICAgICAgMHgwMDI0CS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgU2ltdWx0YW5lb3VzIEQvQTEgYW5kIEQvQTIgVXBkYXRlCi0jZGVmaW5lIExBUzBfUEFDRVIgICAgICAgMHgwMDI4CS8vIFNvZnR3YXJlIFBhY2VyIFN0YXJ0ICAgICAgICAgICAgU29mdHdhcmUgUGFjZXIgU3RvcAotI2RlZmluZSBMQVMwX1RJTUVSICAgICAgIDB4MDAyQwkvLyBSZWFkIFRpbWVyIENvdW50ZXJzIFN0YXR1cyAgICAgIEhESU4gU29mdHdhcmUgVHJpZ2dlcgotI2RlZmluZSBMQVMwX0lUICAgICAgICAgIDB4MDAzMAkvLyBSZWFkIEludGVycnVwdCBTdGF0dXMgICAgICAgICAgIFdyaXRlIEludGVycnVwdCBFbmFibGUgTWFzayBSZWdpc3RlcgotI2RlZmluZSBMQVMwX0NMRUFSICAgICAgIDB4MDAzNAkvLyBDbGVhciBJVHMgc2V0IGJ5IENsZWFyIE1hc2sgICAgIFNldCBJbnRlcnJ1cHQgQ2xlYXIgTWFzawotI2RlZmluZSBMQVMwX09WRVJSVU4gICAgIDB4MDAzOAkvLyBSZWFkIHBlbmRpbmcgaW50ZXJydXB0cyAgICAgICAgIENsZWFyIE92ZXJydW4gUmVnaXN0ZXIKLSNkZWZpbmUgTEFTMF9TUEFSRV8zQyAgICAweDAwM0MJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCisjZGVmaW5lIExBUzBfU1BBUkVfMDAgICAgMHgwMDAwCS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8wNCAgICAweDAwMDQJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX1VTRVJfSU8gICAgIDB4MDAwOAkvKiAgUmVhZCBVc2VyIElucHV0cyAgICAgICAgICAgICAgICBXcml0ZSBVc2VyIE91dHB1dHMgKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8wQyAgICAweDAwMEMJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX0FEQyAgICAgICAgIDB4MDAxMAkvKiAgUmVhZCBGSUZPIFN0YXR1cyAgICAgICAgICAgICAgICBTb2Z0d2FyZSBBL0QgU3RhcnQgKi8KKyNkZWZpbmUgTEFTMF9EQUMxICAgICAgICAweDAwMTQJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMSBVcGRhdGUgKi8KKyNkZWZpbmUgTEFTMF9EQUMyICAgICAgICAweDAwMTgJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMiBVcGRhdGUgKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8xQyAgICAweDAwMUMJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX1NQQVJFXzIwICAgIDB4MDAyMAkvKiAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICovCisjZGVmaW5lIExBUzBfREFDICAgICAgICAgMHgwMDI0CS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIFNpbXVsdGFuZW91cyBEL0ExIGFuZCBEL0EyIFVwZGF0ZSAqLworI2RlZmluZSBMQVMwX1BBQ0VSICAgICAgIDB4MDAyOAkvKiAgU29mdHdhcmUgUGFjZXIgU3RhcnQgICAgICAgICAgICBTb2Z0d2FyZSBQYWNlciBTdG9wICovCisjZGVmaW5lIExBUzBfVElNRVIgICAgICAgMHgwMDJDCS8qICBSZWFkIFRpbWVyIENvdW50ZXJzIFN0YXR1cyAgICAgIEhESU4gU29mdHdhcmUgVHJpZ2dlciAqLworI2RlZmluZSBMQVMwX0lUICAgICAgICAgIDB4MDAzMAkvKiAgUmVhZCBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICBXcml0ZSBJbnRlcnJ1cHQgRW5hYmxlIE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFTMF9DTEVBUiAgICAgICAweDAwMzQJLyogIENsZWFyIElUcyBzZXQgYnkgQ2xlYXIgTWFzayAgICAgU2V0IEludGVycnVwdCBDbGVhciBNYXNrICovCisjZGVmaW5lIExBUzBfT1ZFUlJVTiAgICAgMHgwMDM4CS8qICBSZWFkIHBlbmRpbmcgaW50ZXJydXB0cyAgICAgICAgIENsZWFyIE92ZXJydW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8zQyAgICAweDAwM0MJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLwogCiAvKgogICBMQVMwIFJ1bnRpbWUgQXJlYSBUaW1lci9Db3VudGVyLERpZy5JTwogICBOYW1lCQkJTG9jYWwgQWRkcmVzcwkJCUZ1bmN0aW9uCiAqLwotI2RlZmluZSBMQVMwX1BDTEsgICAgICAgIDB4MDA0MAkvLyBQYWNlciBDbG9jayB2YWx1ZSAoMjRiaXQpICAgICAgICAgICAgIFBhY2VyIENsb2NrIGxvYWQgKDI0Yml0KQotI2RlZmluZSBMQVMwX0JDTEsgICAgICAgIDB4MDA0NAkvLyBCdXJzdCBDbG9jayB2YWx1ZSAoMTBiaXQpICAgICAgICAgICAgIEJ1cnN0IENsb2NrIGxvYWQgKDEwYml0KQotI2RlZmluZSBMQVMwX0FEQ19TQ05UICAgIDB4MDA0OAkvLyBBL0QgU2FtcGxlIGNvdW50ZXIgdmFsdWUgKDEwYml0KSAgICAgIEEvRCBTYW1wbGUgY291bnRlciBsb2FkICgxMGJpdCkKLSNkZWZpbmUgTEFTMF9EQUMxX1VDTlQgICAweDAwNEMJLy8gRC9BMSBVcGRhdGUgY291bnRlciB2YWx1ZSAoMTAgYml0KSAgICBEL0ExIFVwZGF0ZSBjb3VudGVyIGxvYWQgKDEwYml0KQotI2RlZmluZSBMQVMwX0RBQzJfVUNOVCAgIDB4MDA1MAkvLyBEL0EyIFVwZGF0ZSBjb3VudGVyIHZhbHVlICgxMCBiaXQpICAgIEQvQTIgVXBkYXRlIGNvdW50ZXIgbG9hZCAoMTBiaXQpCi0jZGVmaW5lIExBUzBfRENOVCAgICAgICAgMHgwMDU0CS8vIERlbGF5IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgRGVsYXkgY291bnRlciBsb2FkICgxNmJpdCkKLSNkZWZpbmUgTEFTMF9BQ05UICAgICAgICAweDAwNTgJLy8gQWJvdXQgY291bnRlciB2YWx1ZSAoMTYgYml0KSAgICAgICAgICBBYm91dCBjb3VudGVyIGxvYWQgKDE2Yml0KQotI2RlZmluZSBMQVMwX0RBQ19DTEsgICAgIDB4MDA1QwkvLyBEQUMgY2xvY2sgdmFsdWUgKDE2Yml0KSAgICAgICAgICAgICAgIERBQyBjbG9jayBsb2FkICgxNmJpdCkKLSNkZWZpbmUgTEFTMF9VVEMwICAgICAgICAweDAwNjAJLy8gODI1NCBUQyBDb3VudGVyIDAgVXNlciBUQyAwIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMAotI2RlZmluZSBMQVMwX1VUQzEgICAgICAgIDB4MDA2NAkvLyA4MjU0IFRDIENvdW50ZXIgMSBVc2VyIFRDIDEgdmFsdWUgICAgIExvYWQgY291bnQgaW4gVEMgQ291bnRlciAxCi0jZGVmaW5lIExBUzBfVVRDMiAgICAgICAgMHgwMDY4CS8vIDgyNTQgVEMgQ291bnRlciAyIFVzZXIgVEMgMiB2YWx1ZSAgICAgTG9hZCBjb3VudCBpbiBUQyBDb3VudGVyIDIKLSNkZWZpbmUgTEFTMF9VVENfQ1RSTCAgICAweDAwNkMJLy8gODI1NCBUQyBDb250cm9sIFdvcmQgICAgICAgICAgICAgICAgICBQcm9ncmFtIGNvdW50ZXIgbW9kZSBmb3IgVEMKLSNkZWZpbmUgTEFTMF9ESU8wICAgICAgICAweDAwNzAJLy8gRGlnaXRhbCBJL08gUG9ydCAwIFJlYWQgUG9ydCAgICAgICAgICBEaWdpdGFsIEkvTyBQb3J0IDAgV3JpdGUgUG9ydAotI2RlZmluZSBMQVMwX0RJTzEgICAgICAgIDB4MDA3NAkvLyBEaWdpdGFsIEkvTyBQb3J0IDEgUmVhZCBQb3J0ICAgICAgICAgIERpZ2l0YWwgSS9PIFBvcnQgMSBXcml0ZSBQb3J0Ci0jZGVmaW5lIExBUzBfRElPMF9DVFJMICAgMHgwMDc4CS8vIENsZWFyIGRpZ2l0YWwgSVJRIHN0YXR1cyBmbGFnL3JlYWQgICAgQ2xlYXIgZGlnaXRhbCBjaGlwL3Byb2dyYW0gUG9ydCAwCi0jZGVmaW5lIExBUzBfRElPX1NUQVRVUyAgMHgwMDdDCS8vIFJlYWQgRGlnaXRhbCBJL08gU3RhdHVzIHdvcmQgICAgICAgICAgUHJvZ3JhbSBkaWdpdGFsIGNvbnRyb2wgcmVnaXN0ZXIgJgorI2RlZmluZSBMQVMwX1BDTEsgICAgICAgIDB4MDA0MAkvKiAgUGFjZXIgQ2xvY2sgdmFsdWUgKDI0Yml0KSAgICAgICAgICAgICBQYWNlciBDbG9jayBsb2FkICgyNGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9CQ0xLICAgICAgICAweDAwNDQJLyogIEJ1cnN0IENsb2NrIHZhbHVlICgxMGJpdCkgICAgICAgICAgICAgQnVyc3QgQ2xvY2sgbG9hZCAoMTBiaXQpICovCisjZGVmaW5lIExBUzBfQURDX1NDTlQgICAgMHgwMDQ4CS8qICBBL0QgU2FtcGxlIGNvdW50ZXIgdmFsdWUgKDEwYml0KSAgICAgIEEvRCBTYW1wbGUgY291bnRlciBsb2FkICgxMGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQUMxX1VDTlQgICAweDAwNEMJLyogIEQvQTEgVXBkYXRlIGNvdW50ZXIgdmFsdWUgKDEwIGJpdCkgICAgRC9BMSBVcGRhdGUgY291bnRlciBsb2FkICgxMGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX1VDTlQgICAweDAwNTAJLyogIEQvQTIgVXBkYXRlIGNvdW50ZXIgdmFsdWUgKDEwIGJpdCkgICAgRC9BMiBVcGRhdGUgY291bnRlciBsb2FkICgxMGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQ05UICAgICAgICAweDAwNTQJLyogIERlbGF5IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgRGVsYXkgY291bnRlciBsb2FkICgxNmJpdCkgKi8KKyNkZWZpbmUgTEFTMF9BQ05UICAgICAgICAweDAwNTgJLyogIEFib3V0IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgQWJvdXQgY291bnRlciBsb2FkICgxNmJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQUNfQ0xLICAgICAweDAwNUMJLyogIERBQyBjbG9jayB2YWx1ZSAoMTZiaXQpICAgICAgICAgICAgICAgREFDIGNsb2NrIGxvYWQgKDE2Yml0KSAqLworI2RlZmluZSBMQVMwX1VUQzAgICAgICAgIDB4MDA2MAkvKiAgODI1NCBUQyBDb3VudGVyIDAgVXNlciBUQyAwIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMCAqLworI2RlZmluZSBMQVMwX1VUQzEgICAgICAgIDB4MDA2NAkvKiAgODI1NCBUQyBDb3VudGVyIDEgVXNlciBUQyAxIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMSAqLworI2RlZmluZSBMQVMwX1VUQzIgICAgICAgIDB4MDA2OAkvKiAgODI1NCBUQyBDb3VudGVyIDIgVXNlciBUQyAyIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMiAqLworI2RlZmluZSBMQVMwX1VUQ19DVFJMICAgIDB4MDA2QwkvKiAgODI1NCBUQyBDb250cm9sIFdvcmQgICAgICAgICAgICAgICAgICBQcm9ncmFtIGNvdW50ZXIgbW9kZSBmb3IgVEMgKi8KKyNkZWZpbmUgTEFTMF9ESU8wICAgICAgICAweDAwNzAJLyogIERpZ2l0YWwgSS9PIFBvcnQgMCBSZWFkIFBvcnQgICAgICAgICAgRGlnaXRhbCBJL08gUG9ydCAwIFdyaXRlIFBvcnQgKi8KKyNkZWZpbmUgTEFTMF9ESU8xICAgICAgICAweDAwNzQJLyogIERpZ2l0YWwgSS9PIFBvcnQgMSBSZWFkIFBvcnQgICAgICAgICAgRGlnaXRhbCBJL08gUG9ydCAxIFdyaXRlIFBvcnQgKi8KKyNkZWZpbmUgTEFTMF9ESU8wX0NUUkwgICAweDAwNzgJLyogIENsZWFyIGRpZ2l0YWwgSVJRIHN0YXR1cyBmbGFnL3JlYWQgICAgQ2xlYXIgZGlnaXRhbCBjaGlwL3Byb2dyYW0gUG9ydCAwICovCisjZGVmaW5lIExBUzBfRElPX1NUQVRVUyAgMHgwMDdDCS8qICBSZWFkIERpZ2l0YWwgSS9PIFN0YXR1cyB3b3JkICAgICAgICAgIFByb2dyYW0gZGlnaXRhbCBjb250cm9sIHJlZ2lzdGVyICYgKi8KIAogLyoKICAgTEFTMCBTZXR1cCBBcmVhCiAgIE5hbWUJCQlMb2NhbCBBZGRyZXNzCQkJRnVuY3Rpb24KICovCi0jZGVmaW5lIExBUzBfQk9BUkRfUkVTRVQgICAgICAgIDB4MDEwMAkvLyBCb2FyZCByZXNldAotI2RlZmluZSBMQVMwX0RNQTBfU1JDICAgICAgICAgICAweDAxMDQJLy8gRE1BIDAgU291cmNlcyBzZWxlY3QKLSNkZWZpbmUgTEFTMF9ETUExX1NSQyAgICAgICAgICAgMHgwMTA4CS8vIERNQSAxIFNvdXJjZXMgc2VsZWN0Ci0jZGVmaW5lIExBUzBfQURDX0NPTlZFUlNJT04gICAgIDB4MDEwQwkvLyBBL0QgQ29udmVyc2lvbiBTaWduYWwgc2VsZWN0Ci0jZGVmaW5lIExBUzBfQlVSU1RfU1RBUlQgICAgICAgIDB4MDExMAkvLyBCdXJzdCBDbG9jayBTdGFydCBUcmlnZ2VyIHNlbGVjdAotI2RlZmluZSBMQVMwX1BBQ0VSX1NUQVJUICAgICAgICAweDAxMTQJLy8gUGFjZXIgQ2xvY2sgU3RhcnQgVHJpZ2dlciBzZWxlY3QKLSNkZWZpbmUgTEFTMF9QQUNFUl9TVE9QICAgICAgICAgMHgwMTE4CS8vIFBhY2VyIENsb2NrIFN0b3AgVHJpZ2dlciBzZWxlY3QKLSNkZWZpbmUgTEFTMF9BQ05UX1NUT1BfRU5BQkxFICAgMHgwMTFDCS8vIEFib3V0IENvdW50ZXIgU3RvcCBFbmFibGUKLSNkZWZpbmUgTEFTMF9QQUNFUl9SRVBFQVQgICAgICAgMHgwMTIwCS8vIFBhY2VyIFN0YXJ0IFRyaWdnZXIgTW9kZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9ESU5fU1RBUlQgICAgICAgICAgMHgwMTI0CS8vIEhpZ2ggU3BlZWQgRGlnaXRhbCBJbnB1dCBTYW1wbGluZyBTaWduYWwgc2VsZWN0Ci0jZGVmaW5lIExBUzBfRElOX0ZJRk9fQ0xFQVIgICAgIDB4MDEyOAkvLyBEaWdpdGFsIElucHV0IEZJRk8gQ2xlYXIKLSNkZWZpbmUgTEFTMF9BRENfRklGT19DTEVBUiAgICAgMHgwMTJDCS8vIEEvRCBGSUZPIENsZWFyCi0jZGVmaW5lIExBUzBfQ0dUX1dSSVRFICAgICAgICAgIDB4MDEzMAkvLyBDaGFubmVsIEdhaW4gVGFibGUgV3JpdGUKLSNkZWZpbmUgTEFTMF9DR0xfV1JJVEUgICAgICAgICAgMHgwMTM0CS8vIENoYW5uZWwgR2FpbiBMYXRjaCBXcml0ZQotI2RlZmluZSBMQVMwX0NHX0RBVEEgICAgICAgICAgICAweDAxMzgJLy8gRGlnaXRhbCBUYWJsZSBXcml0ZQotI2RlZmluZSBMQVMwX0NHVF9FTkFCTEUJCTB4MDEzQwkvLyBDaGFubmVsIEdhaW4gVGFibGUgRW5hYmxlCi0jZGVmaW5lIExBUzBfQ0dfRU5BQkxFICAgICAgICAgIDB4MDE0MAkvLyBEaWdpdGFsIFRhYmxlIEVuYWJsZQotI2RlZmluZSBMQVMwX0NHVF9QQVVTRSAgICAgICAgICAweDAxNDQJLy8gVGFibGUgUGF1c2UgRW5hYmxlCi0jZGVmaW5lIExBUzBfQ0dUX1JFU0VUICAgICAgICAgIDB4MDE0OAkvLyBSZXNldCBDaGFubmVsIEdhaW4gVGFibGUKLSNkZWZpbmUgTEFTMF9DR1RfQ0xFQVIgICAgICAgICAgMHgwMTRDCS8vIENsZWFyIENoYW5uZWwgR2FpbiBUYWJsZQotI2RlZmluZSBMQVMwX0RBQzFfQ1RSTCAgICAgICAgICAweDAxNTAJLy8gRC9BMSBvdXRwdXQgdHlwZS9yYW5nZQotI2RlZmluZSBMQVMwX0RBQzFfU1JDICAgICAgICAgICAweDAxNTQJLy8gRC9BMSB1cGRhdGUgc291cmNlCi0jZGVmaW5lIExBUzBfREFDMV9DWUNMRSAgICAgICAgIDB4MDE1OAkvLyBEL0ExIGN5Y2xlIG1vZGUKLSNkZWZpbmUgTEFTMF9EQUMxX1JFU0VUICAgICAgICAgMHgwMTVDCS8vIEQvQTEgRklGTyByZXNldAotI2RlZmluZSBMQVMwX0RBQzFfRklGT19DTEVBUiAgICAweDAxNjAJLy8gRC9BMSBGSUZPIGNsZWFyCi0jZGVmaW5lIExBUzBfREFDMl9DVFJMICAgICAgICAgIDB4MDE2NAkvLyBEL0EyIG91dHB1dCB0eXBlL3JhbmdlCi0jZGVmaW5lIExBUzBfREFDMl9TUkMgICAgICAgICAgIDB4MDE2OAkvLyBEL0EyIHVwZGF0ZSBzb3VyY2UKLSNkZWZpbmUgTEFTMF9EQUMyX0NZQ0xFICAgICAgICAgMHgwMTZDCS8vIEQvQTIgY3ljbGUgbW9kZQotI2RlZmluZSBMQVMwX0RBQzJfUkVTRVQgICAgICAgICAweDAxNzAJLy8gRC9BMiBGSUZPIHJlc2V0Ci0jZGVmaW5lIExBUzBfREFDMl9GSUZPX0NMRUFSICAgIDB4MDE3NAkvLyBEL0EyIEZJRk8gY2xlYXIKLSNkZWZpbmUgTEFTMF9BRENfU0NOVF9TUkMgICAgICAgMHgwMTc4CS8vIEEvRCBTYW1wbGUgQ291bnRlciBTb3VyY2Ugc2VsZWN0Ci0jZGVmaW5lIExBUzBfUEFDRVJfU0VMRUNUICAgICAgIDB4MDE4MAkvLyBQYWNlciBDbG9jayBzZWxlY3QKLSNkZWZpbmUgTEFTMF9TQlVTMF9TUkMgICAgICAgICAgMHgwMTg0CS8vIFN5bmNCdXMgMCBTb3VyY2Ugc2VsZWN0Ci0jZGVmaW5lIExBUzBfU0JVUzBfRU5BQkxFICAgICAgIDB4MDE4OAkvLyBTeW5jQnVzIDAgZW5hYmxlCi0jZGVmaW5lIExBUzBfU0JVUzFfU1JDICAgICAgICAgIDB4MDE4QwkvLyBTeW5jQnVzIDEgU291cmNlIHNlbGVjdAotI2RlZmluZSBMQVMwX1NCVVMxX0VOQUJMRSAgICAgICAweDAxOTAJLy8gU3luY0J1cyAxIGVuYWJsZQotI2RlZmluZSBMQVMwX1NCVVMyX1NSQyAgICAgICAgICAweDAxOTgJLy8gU3luY0J1cyAyIFNvdXJjZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9TQlVTMl9FTkFCTEUgICAgICAgMHgwMTlDCS8vIFN5bmNCdXMgMiBlbmFibGUKLSNkZWZpbmUgTEFTMF9FVFJHX1BPTEFSSVRZICAgICAgMHgwMUE0CS8vIEV4dGVybmFsIFRyaWdnZXIgcG9sYXJpdHkgc2VsZWN0Ci0jZGVmaW5lIExBUzBfRUlOVF9QT0xBUklUWSAgICAgIDB4MDFBOAkvLyBFeHRlcm5hbCBJbnRlcnJ1cHQgcG9sYXJpdHkgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVVRDMF9DTE9DSyAgICAgICAgIDB4MDFBQwkvLyBVVEMwIENsb2NrIHNlbGVjdAotI2RlZmluZSBMQVMwX1VUQzBfR0FURSAgICAgICAgICAweDAxQjAJLy8gVVRDMCBHYXRlIHNlbGVjdAotI2RlZmluZSBMQVMwX1VUQzFfQ0xPQ0sgICAgICAgICAweDAxQjQJLy8gVVRDMSBDbG9jayBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VVEMxX0dBVEUgICAgICAgICAgMHgwMUI4CS8vIFVUQzEgR2F0ZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VVEMyX0NMT0NLICAgICAgICAgMHgwMUJDCS8vIFVUQzIgQ2xvY2sgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVVRDMl9HQVRFICAgICAgICAgIDB4MDFDMAkvLyBVVEMyIEdhdGUgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVU9VVDBfU0VMRUNUICAgICAgIDB4MDFDNAkvLyBVc2VyIE91dHB1dCAwIHNvdXJjZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VT1VUMV9TRUxFQ1QgICAgICAgMHgwMUM4CS8vIFVzZXIgT3V0cHV0IDEgc291cmNlIHNlbGVjdAotI2RlZmluZSBMQVMwX0RNQTBfUkVTRVQgICAgICAgICAweDAxQ0MJLy8gRE1BMCBSZXF1ZXN0IHN0YXRlIG1hY2hpbmUgcmVzZXQKLSNkZWZpbmUgTEFTMF9ETUExX1JFU0VUICAgICAgICAgMHgwMUQwCS8vIERNQTEgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHJlc2V0CisjZGVmaW5lIExBUzBfQk9BUkRfUkVTRVQgICAgICAgIDB4MDEwMAkvKiAgQm9hcmQgcmVzZXQgKi8KKyNkZWZpbmUgTEFTMF9ETUEwX1NSQyAgICAgICAgICAgMHgwMTA0CS8qICBETUEgMCBTb3VyY2VzIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0RNQTFfU1JDICAgICAgICAgICAweDAxMDgJLyogIERNQSAxIFNvdXJjZXMgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfQURDX0NPTlZFUlNJT04gICAgIDB4MDEwQwkvKiAgQS9EIENvbnZlcnNpb24gU2lnbmFsIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0JVUlNUX1NUQVJUICAgICAgICAweDAxMTAJLyogIEJ1cnN0IENsb2NrIFN0YXJ0IFRyaWdnZXIgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfUEFDRVJfU1RBUlQgICAgICAgIDB4MDExNAkvKiAgUGFjZXIgQ2xvY2sgU3RhcnQgVHJpZ2dlciBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9QQUNFUl9TVE9QICAgICAgICAgMHgwMTE4CS8qICBQYWNlciBDbG9jayBTdG9wIFRyaWdnZXIgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfQUNOVF9TVE9QX0VOQUJMRSAgIDB4MDExQwkvKiAgQWJvdXQgQ291bnRlciBTdG9wIEVuYWJsZSAqLworI2RlZmluZSBMQVMwX1BBQ0VSX1JFUEVBVCAgICAgICAweDAxMjAJLyogIFBhY2VyIFN0YXJ0IFRyaWdnZXIgTW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9ESU5fU1RBUlQgICAgICAgICAgMHgwMTI0CS8qICBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgU2FtcGxpbmcgU2lnbmFsIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0RJTl9GSUZPX0NMRUFSICAgICAweDAxMjgJLyogIERpZ2l0YWwgSW5wdXQgRklGTyBDbGVhciAqLworI2RlZmluZSBMQVMwX0FEQ19GSUZPX0NMRUFSICAgICAweDAxMkMJLyogIEEvRCBGSUZPIENsZWFyICovCisjZGVmaW5lIExBUzBfQ0dUX1dSSVRFICAgICAgICAgIDB4MDEzMAkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIFdyaXRlICovCisjZGVmaW5lIExBUzBfQ0dMX1dSSVRFICAgICAgICAgIDB4MDEzNAkvKiAgQ2hhbm5lbCBHYWluIExhdGNoIFdyaXRlICovCisjZGVmaW5lIExBUzBfQ0dfREFUQSAgICAgICAgICAgIDB4MDEzOAkvKiAgRGlnaXRhbCBUYWJsZSBXcml0ZSAqLworI2RlZmluZSBMQVMwX0NHVF9FTkFCTEUJCTB4MDEzQwkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIEVuYWJsZSAqLworI2RlZmluZSBMQVMwX0NHX0VOQUJMRSAgICAgICAgICAweDAxNDAJLyogIERpZ2l0YWwgVGFibGUgRW5hYmxlICovCisjZGVmaW5lIExBUzBfQ0dUX1BBVVNFICAgICAgICAgIDB4MDE0NAkvKiAgVGFibGUgUGF1c2UgRW5hYmxlICovCisjZGVmaW5lIExBUzBfQ0dUX1JFU0VUICAgICAgICAgIDB4MDE0OAkvKiAgUmVzZXQgQ2hhbm5lbCBHYWluIFRhYmxlICovCisjZGVmaW5lIExBUzBfQ0dUX0NMRUFSICAgICAgICAgIDB4MDE0QwkvKiAgQ2xlYXIgQ2hhbm5lbCBHYWluIFRhYmxlICovCisjZGVmaW5lIExBUzBfREFDMV9DVFJMICAgICAgICAgIDB4MDE1MAkvKiAgRC9BMSBvdXRwdXQgdHlwZS9yYW5nZSAqLworI2RlZmluZSBMQVMwX0RBQzFfU1JDICAgICAgICAgICAweDAxNTQJLyogIEQvQTEgdXBkYXRlIHNvdXJjZSAqLworI2RlZmluZSBMQVMwX0RBQzFfQ1lDTEUgICAgICAgICAweDAxNTgJLyogIEQvQTEgY3ljbGUgbW9kZSAqLworI2RlZmluZSBMQVMwX0RBQzFfUkVTRVQgICAgICAgICAweDAxNUMJLyogIEQvQTEgRklGTyByZXNldCAqLworI2RlZmluZSBMQVMwX0RBQzFfRklGT19DTEVBUiAgICAweDAxNjAJLyogIEQvQTEgRklGTyBjbGVhciAqLworI2RlZmluZSBMQVMwX0RBQzJfQ1RSTCAgICAgICAgICAweDAxNjQJLyogIEQvQTIgb3V0cHV0IHR5cGUvcmFuZ2UgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX1NSQyAgICAgICAgICAgMHgwMTY4CS8qICBEL0EyIHVwZGF0ZSBzb3VyY2UgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX0NZQ0xFICAgICAgICAgMHgwMTZDCS8qICBEL0EyIGN5Y2xlIG1vZGUgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX1JFU0VUICAgICAgICAgMHgwMTcwCS8qICBEL0EyIEZJRk8gcmVzZXQgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX0ZJRk9fQ0xFQVIgICAgMHgwMTc0CS8qICBEL0EyIEZJRk8gY2xlYXIgKi8KKyNkZWZpbmUgTEFTMF9BRENfU0NOVF9TUkMgICAgICAgMHgwMTc4CS8qICBBL0QgU2FtcGxlIENvdW50ZXIgU291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1BBQ0VSX1NFTEVDVCAgICAgICAweDAxODAJLyogIFBhY2VyIENsb2NrIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1NCVVMwX1NSQyAgICAgICAgICAweDAxODQJLyogIFN5bmNCdXMgMCBTb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIExBUzBfU0JVUzBfRU5BQkxFICAgICAgIDB4MDE4OAkvKiAgU3luY0J1cyAwIGVuYWJsZSAqLworI2RlZmluZSBMQVMwX1NCVVMxX1NSQyAgICAgICAgICAweDAxOEMJLyogIFN5bmNCdXMgMSBTb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIExBUzBfU0JVUzFfRU5BQkxFICAgICAgIDB4MDE5MAkvKiAgU3luY0J1cyAxIGVuYWJsZSAqLworI2RlZmluZSBMQVMwX1NCVVMyX1NSQyAgICAgICAgICAweDAxOTgJLyogIFN5bmNCdXMgMiBTb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIExBUzBfU0JVUzJfRU5BQkxFICAgICAgIDB4MDE5QwkvKiAgU3luY0J1cyAyIGVuYWJsZSAqLworI2RlZmluZSBMQVMwX0VUUkdfUE9MQVJJVFkgICAgICAweDAxQTQJLyogIEV4dGVybmFsIFRyaWdnZXIgcG9sYXJpdHkgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfRUlOVF9QT0xBUklUWSAgICAgIDB4MDFBOAkvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzBfQ0xPQ0sgICAgICAgICAweDAxQUMJLyogIFVUQzAgQ2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfVVRDMF9HQVRFICAgICAgICAgIDB4MDFCMAkvKiAgVVRDMCBHYXRlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzFfQ0xPQ0sgICAgICAgICAweDAxQjQJLyogIFVUQzEgQ2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfVVRDMV9HQVRFICAgICAgICAgIDB4MDFCOAkvKiAgVVRDMSBHYXRlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzJfQ0xPQ0sgICAgICAgICAweDAxQkMJLyogIFVUQzIgQ2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfVVRDMl9HQVRFICAgICAgICAgIDB4MDFDMAkvKiAgVVRDMiBHYXRlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VPVVQwX1NFTEVDVCAgICAgICAweDAxQzQJLyogIFVzZXIgT3V0cHV0IDAgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VPVVQxX1NFTEVDVCAgICAgICAweDAxQzgJLyogIFVzZXIgT3V0cHV0IDEgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0RNQTBfUkVTRVQgICAgICAgICAweDAxQ0MJLyogIERNQTAgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHJlc2V0ICovCisjZGVmaW5lIExBUzBfRE1BMV9SRVNFVCAgICAgICAgIDB4MDFEMAkvKiAgRE1BMSBSZXF1ZXN0IHN0YXRlIG1hY2hpbmUgcmVzZXQgKi8KIAogLyoKICAgTEFTMQogICBOYW1lCQkJTG9jYWwgQWRkcmVzcwkJCUZ1bmN0aW9uCiAqLwotI2RlZmluZSBMQVMxX0FEQ19GSUZPICAgICAgICAgICAgMHgwMDAwCS8vIFJlYWQgQS9EIEZJRk8gKDE2Yml0KSAtCi0jZGVmaW5lIExBUzFfSERJT19GSUZPICAgICAgICAgICAweDAwMDQJLy8gUmVhZCBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgRklGTyAoMTZiaXQpIC0KLSNkZWZpbmUgTEFTMV9EQUMxX0ZJRk8gICAgICAgICAgIDB4MDAwOAkvLyAtIFdyaXRlIEQvQTEgRklGTyAoMTZiaXQpCi0jZGVmaW5lIExBUzFfREFDMl9GSUZPICAgICAgICAgICAweDAwMEMJLy8gLSBXcml0ZSBEL0EyIEZJRk8gKDE2Yml0KQorI2RlZmluZSBMQVMxX0FEQ19GSUZPICAgICAgICAgICAgMHgwMDAwCS8qICBSZWFkIEEvRCBGSUZPICgxNmJpdCkgLSAqLworI2RlZmluZSBMQVMxX0hESU9fRklGTyAgICAgICAgICAgMHgwMDA0CS8qICBSZWFkIEhpZ2ggU3BlZWQgRGlnaXRhbCBJbnB1dCBGSUZPICgxNmJpdCkgLSAqLworI2RlZmluZSBMQVMxX0RBQzFfRklGTyAgICAgICAgICAgMHgwMDA4CS8qICAtIFdyaXRlIEQvQTEgRklGTyAoMTZiaXQpICovCisjZGVmaW5lIExBUzFfREFDMl9GSUZPICAgICAgICAgICAweDAwMEMJLyogIC0gV3JpdGUgRC9BMiBGSUZPICgxNmJpdCkgKi8KIAogLyoKICAgTENGRzogUExYIDkwODAgbG9jYWwgY29uZmlnICYgcnVudGltZSByZWdpc3RlcnMKICAgTmFtZQkJCUxvY2FsIEFkZHJlc3MJCQlGdW5jdGlvbgogKi8KLSNkZWZpbmUgTENGR19JVENTUiAgICAgICAgICAgICAgMHgwMDY4CS8vIElOVENTUiwgSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BTU9ERTAgICAgICAgICAgIDB4MDA4MAkvLyBETUEgQ2hhbm5lbCAwIE1vZGUgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFQQURSMCAgICAgICAgICAgMHgwMDg0CS8vIERNQSBDaGFubmVsIDAgUENJIEFkZHJlc3MgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFMQURSMCAgICAgICAgICAgMHgwMDg4CS8vIERNQSBDaGFubmVsIDAgTG9jYWwgQWRkcmVzcyBSZWcKLSNkZWZpbmUgTENGR19ETUFTSVowICAgICAgICAgICAgMHgwMDhDCS8vIERNQSBDaGFubmVsIDAgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BRFBSMCAgICAgICAgICAgIDB4MDA5MAkvLyBETUEgQ2hhbm5lbCAwIERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQU1PREUxICAgICAgICAgICAweDAwOTQJLy8gRE1BIENoYW5uZWwgMSBNb2RlIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BUEFEUjEgICAgICAgICAgIDB4MDA5OAkvLyBETUEgQ2hhbm5lbCAxIFBDSSBBZGRyZXNzIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BTEFEUjEgICAgICAgICAgIDB4MDA5QwkvLyBETUEgQ2hhbm5lbCAxIExvY2FsIEFkZHJlc3MgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFTSVoxICAgICAgICAgICAgMHgwMEEwCS8vIERNQSBDaGFubmVsIDEgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BRFBSMSAgICAgICAgICAgIDB4MDBBNAkvLyBETUEgQ2hhbm5lbCAxIERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUNTUjAgICAgICAgICAgICAweDAwQTgJLy8gRE1BIENoYW5uZWwgMCBDb21tYW5kL1N0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUNTUjEgICAgICAgICAgICAweDAwQTkJLy8gRE1BIENoYW5uZWwgMCBDb21tYW5kL1N0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUFSQiAgICAgICAgICAgICAweDAwQUMJLy8gRE1BIEFyYml0cmF0aW9uIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BVEhSICAgICAgICAgICAgIDB4MDBCMAkvLyBETUEgVGhyZXNob2xkIFJlZ2lzdGVyCisjZGVmaW5lIExDRkdfSVRDU1IgICAgICAgICAgICAgIDB4MDA2OAkvKiAgSU5UQ1NSLCBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFNT0RFMCAgICAgICAgICAgMHgwMDgwCS8qICBETUEgQ2hhbm5lbCAwIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFQQURSMCAgICAgICAgICAgMHgwMDg0CS8qICBETUEgQ2hhbm5lbCAwIFBDSSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BTEFEUjAgICAgICAgICAgIDB4MDA4OAkvKiAgRE1BIENoYW5uZWwgMCBMb2NhbCBBZGRyZXNzIFJlZyAqLworI2RlZmluZSBMQ0ZHX0RNQVNJWjAgICAgICAgICAgICAweDAwOEMJLyogIERNQSBDaGFubmVsIDAgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BRFBSMCAgICAgICAgICAgIDB4MDA5MAkvKiAgRE1BIENoYW5uZWwgMCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFNT0RFMSAgICAgICAgICAgMHgwMDk0CS8qICBETUEgQ2hhbm5lbCAxIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFQQURSMSAgICAgICAgICAgMHgwMDk4CS8qICBETUEgQ2hhbm5lbCAxIFBDSSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BTEFEUjEgICAgICAgICAgIDB4MDA5QwkvKiAgRE1BIENoYW5uZWwgMSBMb2NhbCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BU0laMSAgICAgICAgICAgIDB4MDBBMAkvKiAgRE1BIENoYW5uZWwgMSBUcmFuc2ZlciBTaXplIChCeXRlcykgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFEUFIxICAgICAgICAgICAgMHgwMEE0CS8qICBETUEgQ2hhbm5lbCAxIERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQUNTUjAgICAgICAgICAgICAweDAwQTgJLyogIERNQSBDaGFubmVsIDAgQ29tbWFuZC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFDU1IxICAgICAgICAgICAgMHgwMEE5CS8qICBETUEgQ2hhbm5lbCAwIENvbW1hbmQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BQVJCICAgICAgICAgICAgIDB4MDBBQwkvKiAgRE1BIEFyYml0cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BVEhSICAgICAgICAgICAgIDB4MDBCMAkvKiAgRE1BIFRocmVzaG9sZCBSZWdpc3RlciAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgUmVzaXN0ZXIgYml0IGRlZmluaXRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotLy8gRklGTyBTdGF0dXMgV29yZCBCaXRzIChSdGRGaWZvU3RhdHVzKQotI2RlZmluZSBGU19EQUMxX05PVF9FTVBUWSAgICAweDAwMDEJLy8gRDAgIC0gREFDMSBGSUZPIG5vdCBlbXB0eQotI2RlZmluZSBGU19EQUMxX0hFTVBUWSAgIDB4MDAwMgkvLyBEMSAgLSBEQUMxIEZJRk8gaGFsZiBlbXB0eQotI2RlZmluZSBGU19EQUMxX05PVF9GVUxMICAgICAweDAwMDQJLy8gRDIgIC0gREFDMSBGSUZPIG5vdCBmdWxsCi0jZGVmaW5lIEZTX0RBQzJfTk9UX0VNUFRZICAgIDB4MDAxMAkvLyBENCAgLSBEQUMyIEZJRk8gbm90IGVtcHR5Ci0jZGVmaW5lIEZTX0RBQzJfSEVNUFRZICAgMHgwMDIwCS8vIEQ1ICAtIERBQzIgRklGTyBoYWxmIGVtcHR5Ci0jZGVmaW5lIEZTX0RBQzJfTk9UX0ZVTEwgICAgIDB4MDA0MAkvLyBENiAgLSBEQUMyIEZJRk8gbm90IGZ1bGwKLSNkZWZpbmUgRlNfQURDX05PVF9FTVBUWSAgICAgMHgwMTAwCS8vIEQ4ICAtIEFEQyBGSUZPIG5vdCBlbXB0eQotI2RlZmluZSBGU19BRENfSEVNUFRZICAgIDB4MDIwMAkvLyBEOSAgLSBBREMgRklGTyBoYWxmIGVtcHR5Ci0jZGVmaW5lIEZTX0FEQ19OT1RfRlVMTCAgICAgIDB4MDQwMAkvLyBEMTAgLSBBREMgRklGTyBub3QgZnVsbAotI2RlZmluZSBGU19ESU5fTk9UX0VNUFRZICAgICAweDEwMDAJLy8gRDEyIC0gRElOIEZJRk8gbm90IGVtcHR5Ci0jZGVmaW5lIEZTX0RJTl9IRU1QVFkgICAgMHgyMDAwCS8vIEQxMyAtIERJTiBGSUZPIGhhbGYgZW1wdHkKLSNkZWZpbmUgRlNfRElOX05PVF9GVUxMICAgICAgMHg0MDAwCS8vIEQxNCAtIERJTiBGSUZPIG5vdCBmdWxsCisvKiAgRklGTyBTdGF0dXMgV29yZCBCaXRzIChSdGRGaWZvU3RhdHVzKSAqLworI2RlZmluZSBGU19EQUMxX05PVF9FTVBUWSAgICAweDAwMDEJLyogIEQwICAtIERBQzEgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRlNfREFDMV9IRU1QVFkgICAweDAwMDIJLyogIEQxICAtIERBQzEgRklGTyBoYWxmIGVtcHR5ICovCisjZGVmaW5lIEZTX0RBQzFfTk9UX0ZVTEwgICAgIDB4MDAwNAkvKiAgRDIgIC0gREFDMSBGSUZPIG5vdCBmdWxsICovCisjZGVmaW5lIEZTX0RBQzJfTk9UX0VNUFRZICAgIDB4MDAxMAkvKiAgRDQgIC0gREFDMiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBGU19EQUMyX0hFTVBUWSAgIDB4MDAyMAkvKiAgRDUgIC0gREFDMiBGSUZPIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgRlNfREFDMl9OT1RfRlVMTCAgICAgMHgwMDQwCS8qICBENiAgLSBEQUMyIEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgRlNfQURDX05PVF9FTVBUWSAgICAgMHgwMTAwCS8qICBEOCAgLSBBREMgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRlNfQURDX0hFTVBUWSAgICAweDAyMDAJLyogIEQ5ICAtIEFEQyBGSUZPIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgRlNfQURDX05PVF9GVUxMICAgICAgMHgwNDAwCS8qICBEMTAgLSBBREMgRklGTyBub3QgZnVsbCAqLworI2RlZmluZSBGU19ESU5fTk9UX0VNUFRZICAgICAweDEwMDAJLyogIEQxMiAtIERJTiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBGU19ESU5fSEVNUFRZICAgIDB4MjAwMAkvKiAgRDEzIC0gRElOIEZJRk8gaGFsZiBlbXB0eSAqLworI2RlZmluZSBGU19ESU5fTk9UX0ZVTEwgICAgICAweDQwMDAJLyogIEQxNCAtIERJTiBGSUZPIG5vdCBmdWxsICovCiAKLS8vIFRpbWVyIFN0YXR1cyBXb3JkIEJpdHMgKEdldFRpbWVyU3RhdHVzKQorLyogIFRpbWVyIFN0YXR1cyBXb3JkIEJpdHMgKEdldFRpbWVyU3RhdHVzKSAqLwogI2RlZmluZSBUU19QQ0xLX0dBVEUgICAweDAwMDEKLS8vIEQwIC0gUGFjZXIgQ2xvY2sgR2F0ZSBbMCAtIGdhdGVkLCAxIC0gZW5hYmxlZF0KKy8qICBEMCAtIFBhY2VyIENsb2NrIEdhdGUgWzAgLSBnYXRlZCwgMSAtIGVuYWJsZWRdICovCiAjZGVmaW5lIFRTX0JDTEtfR0FURSAgIDB4MDAwMgotLy8gRDEgLSBCdXJzdCBDbG9jayBHYXRlIFswIC0gZGlzYWJsZWQsIDEgLSBydW5uaW5nXQorLyogIEQxIC0gQnVyc3QgQ2xvY2sgR2F0ZSBbMCAtIGRpc2FibGVkLCAxIC0gcnVubmluZ10gKi8KICNkZWZpbmUgVFNfRENOVF9HQVRFICAgMHgwMDA0Ci0vLyBEMiAtIFBhY2VyIENsb2NrIERlbGF5ZWQgU3RhcnQgVHJpZ2dlciBbMCAtIGRlbGF5IG92ZXIsIDEgLSBkZWxheSBpbgotLy8gcHJvZ3Jlc3NdCisvKiAgRDIgLSBQYWNlciBDbG9jayBEZWxheWVkIFN0YXJ0IFRyaWdnZXIgWzAgLSBkZWxheSBvdmVyLCAxIC0gZGVsYXkgaW4gKi8KKy8qICBwcm9ncmVzc10gKi8KICNkZWZpbmUgVFNfQUNOVF9HQVRFICAgMHgwMDA4Ci0vLyBEMyAtIFBhY2VyIENsb2NrIEFib3V0IFRyaWdnZXIgWzAgLSBjb21wbGV0ZWQsIDEgLSBpbiBwcm9ncmVzc10KKy8qICBEMyAtIFBhY2VyIENsb2NrIEFib3V0IFRyaWdnZXIgWzAgLSBjb21wbGV0ZWQsIDEgLSBpbiBwcm9ncmVzc10gKi8KICNkZWZpbmUgVFNfUENMS19SVU4gICAgMHgwMDEwCi0vLyBENCAtIFBhY2VyIENsb2NrIFNodXRkb3duIEZsYWcgWzAgLSBQYWNlciBDbG9jayBjYW5ub3QgYmUgc3RhcnQKLS8vIHRyaWdnZXJlZCBvbmx5IGJ5IFNvZnR3YXJlIFBhY2VyIFN0YXJ0IENvbW1hbmQsIDEgLSBQYWNlciBDbG9jayBjYW4KLS8vIGJlIHN0YXJ0IHRyaWdnZXJlZF0KKy8qICBENCAtIFBhY2VyIENsb2NrIFNodXRkb3duIEZsYWcgWzAgLSBQYWNlciBDbG9jayBjYW5ub3QgYmUgc3RhcnQgKi8KKy8qICB0cmlnZ2VyZWQgb25seSBieSBTb2Z0d2FyZSBQYWNlciBTdGFydCBDb21tYW5kLCAxIC0gUGFjZXIgQ2xvY2sgY2FuICovCisvKiAgYmUgc3RhcnQgdHJpZ2dlcmVkXSAqLwogCi0vLyBFeHRlcm5hbCBUcmlnZ2VyIHBvbGFyaXR5IHNlbGVjdAotLy8gRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdAotI2RlZmluZSBQT0xfUE9TSVRJVkUgICAgICAgICAweDAJLy8gcG9zaXRpdmUgZWRnZQotI2RlZmluZSBQT0xfTkVHQVRJVkUgICAgICAgICAweDEJLy8gbmVnYXRpdmUgZWRnZQorLyogIEV4dGVybmFsIFRyaWdnZXIgcG9sYXJpdHkgc2VsZWN0ICovCisvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBQT0xfUE9TSVRJVkUgICAgICAgICAweDAJLyogIHBvc2l0aXZlIGVkZ2UgKi8KKyNkZWZpbmUgUE9MX05FR0FUSVZFICAgICAgICAgMHgxCS8qICBuZWdhdGl2ZSBlZGdlICovCiAKLS8vIFVzZXIgT3V0cHV0IFNpZ25hbCBzZWxlY3QgKFNldFVvdXQwU291cmNlLCBTZXRVb3V0MVNvdXJjZSkKLSNkZWZpbmUgVU9VVF9BREMgICAgICAgICAgICAgICAgMHgwCS8vIEEvRCBDb252ZXJzaW9uIFNpZ25hbAotI2RlZmluZSBVT1VUX0RBQzEgICAgICAgICAgICAgICAweDEJLy8gRC9BMSBVcGRhdGUKLSNkZWZpbmUgVU9VVF9EQUMyICAgICAgICAgICAgICAgMHgyCS8vIEQvQTIgVXBkYXRlCi0jZGVmaW5lIFVPVVRfU09GVFdBUkUgICAgICAgICAgIDB4MwkvLyBTb2Z0d2FyZSBQcm9ncmFtbWFibGUKKy8qICBVc2VyIE91dHB1dCBTaWduYWwgc2VsZWN0IChTZXRVb3V0MFNvdXJjZSwgU2V0VW91dDFTb3VyY2UpICovCisjZGVmaW5lIFVPVVRfQURDICAgICAgICAgICAgICAgIDB4MAkvKiAgQS9EIENvbnZlcnNpb24gU2lnbmFsICovCisjZGVmaW5lIFVPVVRfREFDMSAgICAgICAgICAgICAgIDB4MQkvKiAgRC9BMSBVcGRhdGUgKi8KKyNkZWZpbmUgVU9VVF9EQUMyICAgICAgICAgICAgICAgMHgyCS8qICBEL0EyIFVwZGF0ZSAqLworI2RlZmluZSBVT1VUX1NPRlRXQVJFICAgICAgICAgICAweDMJLyogIFNvZnR3YXJlIFByb2dyYW1tYWJsZSAqLwogCi0vLyBQYWNlciBjbG9jayBzZWxlY3QgKFNldFBhY2VyU291cmNlKQotI2RlZmluZSBQQ0xLX0lOVEVSTkFMICAgICAgICAgICAxCS8vIEludGVybmFsIFBhY2VyIENsb2NrCi0jZGVmaW5lIFBDTEtfRVhURVJOQUwgICAgICAgICAgIDAJLy8gRXh0ZXJuYWwgUGFjZXIgQ2xvY2sKKy8qICBQYWNlciBjbG9jayBzZWxlY3QgKFNldFBhY2VyU291cmNlKSAqLworI2RlZmluZSBQQ0xLX0lOVEVSTkFMICAgICAgICAgICAxCS8qICBJbnRlcm5hbCBQYWNlciBDbG9jayAqLworI2RlZmluZSBQQ0xLX0VYVEVSTkFMICAgICAgICAgICAwCS8qICBFeHRlcm5hbCBQYWNlciBDbG9jayAqLwogCi0vLyBBL0QgU2FtcGxlIENvdW50ZXIgU291cmNlcyAoU2V0QWRjbnRTb3VyY2UsIFNldHVwU2FtcGxlQ291bnRlcikKLSNkZWZpbmUgQURDX1NDTlRfQ0dUX1JFU0VUICAgICAgICAgMHgwCS8vIG5lZWRzIHJlc3RhcnQgd2l0aCBTdGFydFBhY2VyCisvKiAgQS9EIFNhbXBsZSBDb3VudGVyIFNvdXJjZXMgKFNldEFkY250U291cmNlLCBTZXR1cFNhbXBsZUNvdW50ZXIpICovCisjZGVmaW5lIEFEQ19TQ05UX0NHVF9SRVNFVCAgICAgICAgIDB4MAkvKiAgbmVlZHMgcmVzdGFydCB3aXRoIFN0YXJ0UGFjZXIgKi8KICNkZWZpbmUgQURDX1NDTlRfRklGT19XUklURSAgICAgICAgMHgxCiAKLS8vIEEvRCBDb252ZXJzaW9uIFNpZ25hbCBTZWxlY3QgKGZvciBTZXRDb252ZXJzaW9uU2VsZWN0KQotI2RlZmluZSBBRENfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLy8gU29mdHdhcmUgQS9EIFN0YXJ0Ci0jZGVmaW5lIEFEQ19TVEFSVF9QQ0xLICAgICAgICAgICAgIDB4MQkvLyBQYWNlciBDbG9jayAoRXh0LiBJbnQuIHNlZSBGdW5jLjUwOSkKLSNkZWZpbmUgQURDX1NUQVJUX0JDTEsgICAgICAgICAgICAgMHgyCS8vIEJ1cnN0IENsb2NrCi0jZGVmaW5lIEFEQ19TVEFSVF9ESUdJVEFMX0lUICAgICAgIDB4MwkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBBRENfU1RBUlRfREFDMV9NQVJLRVIxICAgICAweDQJLy8gRC9BIDEgRGF0YSBNYXJrZXIgMQotI2RlZmluZSBBRENfU1RBUlRfREFDMl9NQVJLRVIxICAgICAweDUJLy8gRC9BIDIgRGF0YSBNYXJrZXIgMQotI2RlZmluZSBBRENfU1RBUlRfU0JVUzAgICAgICAgICAgICAweDYJLy8gU3luY0J1cyAwCi0jZGVmaW5lIEFEQ19TVEFSVF9TQlVTMSAgICAgICAgICAgIDB4NwkvLyBTeW5jQnVzIDEKLSNkZWZpbmUgQURDX1NUQVJUX1NCVVMyICAgICAgICAgICAgMHg4CS8vIFN5bmNCdXMgMgorLyogIEEvRCBDb252ZXJzaW9uIFNpZ25hbCBTZWxlY3QgKGZvciBTZXRDb252ZXJzaW9uU2VsZWN0KSAqLworI2RlZmluZSBBRENfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLyogIFNvZnR3YXJlIEEvRCBTdGFydCAqLworI2RlZmluZSBBRENfU1RBUlRfUENMSyAgICAgICAgICAgICAweDEJLyogIFBhY2VyIENsb2NrIChFeHQuIEludC4gc2VlIEZ1bmMuNTA5KSAqLworI2RlZmluZSBBRENfU1RBUlRfQkNMSyAgICAgICAgICAgICAweDIJLyogIEJ1cnN0IENsb2NrICovCisjZGVmaW5lIEFEQ19TVEFSVF9ESUdJVEFMX0lUICAgICAgIDB4MwkvKiAgRGlnaXRhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQURDX1NUQVJUX0RBQzFfTUFSS0VSMSAgICAgMHg0CS8qICBEL0EgMSBEYXRhIE1hcmtlciAxICovCisjZGVmaW5lIEFEQ19TVEFSVF9EQUMyX01BUktFUjEgICAgIDB4NQkvKiAgRC9BIDIgRGF0YSBNYXJrZXIgMSAqLworI2RlZmluZSBBRENfU1RBUlRfU0JVUzAgICAgICAgICAgICAweDYJLyogIFN5bmNCdXMgMCAqLworI2RlZmluZSBBRENfU1RBUlRfU0JVUzEgICAgICAgICAgICAweDcJLyogIFN5bmNCdXMgMSAqLworI2RlZmluZSBBRENfU1RBUlRfU0JVUzIgICAgICAgICAgICAweDgJLyogIFN5bmNCdXMgMiAqLwogCi0vLyBCdXJzdCBDbG9jayBzdGFydCB0cmlnZ2VyIHNlbGVjdCAoU2V0QnVyc3RTdGFydCkKLSNkZWZpbmUgQkNMS19TVEFSVF9TT0ZUV0FSRSAgICAgICAgMHgwCS8vIFNvZnR3YXJlIEEvRCBTdGFydCAoU3RhcnRCdXJzdCkKLSNkZWZpbmUgQkNMS19TVEFSVF9QQ0xLICAgICAgICAgICAgMHgxCS8vIFBhY2VyIENsb2NrCi0jZGVmaW5lIEJDTEtfU1RBUlRfRVRSSUcgICAgICAgICAgIDB4MgkvLyBFeHRlcm5hbCBUcmlnZ2VyCi0jZGVmaW5lIEJDTEtfU1RBUlRfRElHSVRBTF9JVCAgICAgIDB4MwkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMwICAgICAgICAgICAweDQJLy8gU3luY0J1cyAwCi0jZGVmaW5lIEJDTEtfU1RBUlRfU0JVUzEgICAgICAgICAgIDB4NQkvLyBTeW5jQnVzIDEKLSNkZWZpbmUgQkNMS19TVEFSVF9TQlVTMiAgICAgICAgICAgMHg2CS8vIFN5bmNCdXMgMgorLyogIEJ1cnN0IENsb2NrIHN0YXJ0IHRyaWdnZXIgc2VsZWN0IChTZXRCdXJzdFN0YXJ0KSAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NPRlRXQVJFICAgICAgICAweDAJLyogIFNvZnR3YXJlIEEvRCBTdGFydCAoU3RhcnRCdXJzdCkgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9QQ0xLICAgICAgICAgICAgMHgxCS8qICBQYWNlciBDbG9jayAqLworI2RlZmluZSBCQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDIJLyogIEV4dGVybmFsIFRyaWdnZXIgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9ESUdJVEFMX0lUICAgICAgMHgzCS8qICBEaWdpdGFsIEludGVycnVwdCAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMwICAgICAgICAgICAweDQJLyogIFN5bmNCdXMgMCAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMxICAgICAgICAgICAweDUJLyogIFN5bmNCdXMgMSAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMyICAgICAgICAgICAweDYJLyogIFN5bmNCdXMgMiAqLwogCi0vLyBQYWNlciBDbG9jayBzdGFydCB0cmlnZ2VyIHNlbGVjdCAoU2V0UGFjZXJTdGFydCkKLSNkZWZpbmUgUENMS19TVEFSVF9TT0ZUV0FSRSAgICAgICAgMHgwCS8vIFNvZnR3YXJlIFBhY2VyIFN0YXJ0IChTdGFydFBhY2VyKQotI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDEJLy8gRXh0ZXJuYWwgdHJpZ2dlcgotI2RlZmluZSBQQ0xLX1NUQVJUX0RJR0lUQUxfSVQgICAgICAweDIJLy8gRGlnaXRhbCBpbnRlcnJ1cHQKLSNkZWZpbmUgUENMS19TVEFSVF9VVEMyICAgICAgICAgICAgMHgzCS8vIFVzZXIgVEMgMiBvdXQKLSNkZWZpbmUgUENMS19TVEFSVF9TQlVTMCAgICAgICAgICAgMHg0CS8vIFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUQVJUX1NCVVMxICAgICAgICAgICAweDUJLy8gU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RBUlRfU0JVUzIgICAgICAgICAgIDB4NgkvLyBTeW5jQnVzIDIKLSNkZWZpbmUgUENMS19TVEFSVF9EX1NPRlRXQVJFICAgICAgMHg4CS8vIERlbGF5ZWQgU29mdHdhcmUgUGFjZXIgU3RhcnQKLSNkZWZpbmUgUENMS19TVEFSVF9EX0VUUklHICAgICAgICAgMHg5CS8vIERlbGF5ZWQgZXh0ZXJuYWwgdHJpZ2dlcgotI2RlZmluZSBQQ0xLX1NUQVJUX0RfRElHSVRBTF9JVCAgICAweEEJLy8gRGVsYXllZCBkaWdpdGFsIGludGVycnVwdAotI2RlZmluZSBQQ0xLX1NUQVJUX0RfVVRDMiAgICAgICAgICAweEIJLy8gRGVsYXllZCBVc2VyIFRDIDIgb3V0Ci0jZGVmaW5lIFBDTEtfU1RBUlRfRF9TQlVTMCAgICAgICAgIDB4QwkvLyBEZWxheWVkIFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUQVJUX0RfU0JVUzEgICAgICAgICAweEQJLy8gRGVsYXllZCBTeW5jQnVzIDEKLSNkZWZpbmUgUENMS19TVEFSVF9EX1NCVVMyICAgICAgICAgMHhFCS8vIERlbGF5ZWQgU3luY0J1cyAyCi0jZGVmaW5lIFBDTEtfU1RBUlRfRVRSSUdfR0FURUQgICAgIDB4RgkvLyBFeHRlcm5hbCBUcmlnZ2VyIEdhdGVkIGNvbnRyb2xsZWQgbW9kZQorLyogIFBhY2VyIENsb2NrIHN0YXJ0IHRyaWdnZXIgc2VsZWN0IChTZXRQYWNlclN0YXJ0KSAqLworI2RlZmluZSBQQ0xLX1NUQVJUX1NPRlRXQVJFICAgICAgICAweDAJLyogIFNvZnR3YXJlIFBhY2VyIFN0YXJ0IChTdGFydFBhY2VyKSAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDEJLyogIEV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9ESUdJVEFMX0lUICAgICAgMHgyCS8qICBEaWdpdGFsIGludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX1VUQzIgICAgICAgICAgICAweDMJLyogIFVzZXIgVEMgMiBvdXQgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TQlVTMCAgICAgICAgICAgMHg0CS8qICBTeW5jQnVzIDAgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TQlVTMSAgICAgICAgICAgMHg1CS8qICBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TQlVTMiAgICAgICAgICAgMHg2CS8qICBTeW5jQnVzIDIgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9EX1NPRlRXQVJFICAgICAgMHg4CS8qICBEZWxheWVkIFNvZnR3YXJlIFBhY2VyIFN0YXJ0ICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9FVFJJRyAgICAgICAgIDB4OQkvKiAgRGVsYXllZCBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9ESUdJVEFMX0lUICAgIDB4QQkvKiAgRGVsYXllZCBkaWdpdGFsIGludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfVVRDMiAgICAgICAgICAweEIJLyogIERlbGF5ZWQgVXNlciBUQyAyIG91dCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfU0JVUzAgICAgICAgICAweEMJLyogIERlbGF5ZWQgU3luY0J1cyAwICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9TQlVTMSAgICAgICAgIDB4RAkvKiAgRGVsYXllZCBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9EX1NCVVMyICAgICAgICAgMHhFCS8qICBEZWxheWVkIFN5bmNCdXMgMiAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHX0dBVEVEICAgICAweEYJLyogIEV4dGVybmFsIFRyaWdnZXIgR2F0ZWQgY29udHJvbGxlZCBtb2RlICovCiAKLS8vIFBhY2VyIENsb2NrIFN0b3AgVHJpZ2dlciBzZWxlY3QgKFNldFBhY2VyU3RvcCkKLSNkZWZpbmUgUENMS19TVE9QX1NPRlRXQVJFICAgICAgICAgMHgwCS8vIFNvZnR3YXJlIFBhY2VyIFN0b3AgKFN0b3BQYWNlcikKLSNkZWZpbmUgUENMS19TVE9QX0VUUklHICAgICAgICAgICAgMHgxCS8vIEV4dGVybmFsIFRyaWdnZXIKLSNkZWZpbmUgUENMS19TVE9QX0RJR0lUQUxfSVQgICAgICAgMHgyCS8vIERpZ2l0YWwgSW50ZXJydXB0Ci0jZGVmaW5lIFBDTEtfU1RPUF9BQ05UICAgICAgICAgICAgIDB4MwkvLyBBYm91dCBDb3VudGVyCi0jZGVmaW5lIFBDTEtfU1RPUF9VVEMyICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRDMiBvdXQKLSNkZWZpbmUgUENMS19TVE9QX1NCVVMwICAgICAgICAgICAgMHg1CS8vIFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUT1BfU0JVUzEgICAgICAgICAgICAweDYJLy8gU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RPUF9TQlVTMiAgICAgICAgICAgIDB4NwkvLyBTeW5jQnVzIDIKLSNkZWZpbmUgUENMS19TVE9QX0FfU09GVFdBUkUgICAgICAgMHg4CS8vIEFib3V0IFNvZnR3YXJlIFBhY2VyIFN0b3AKLSNkZWZpbmUgUENMS19TVE9QX0FfRVRSSUcgICAgICAgICAgMHg5CS8vIEFib3V0IEV4dGVybmFsIFRyaWdnZXIKLSNkZWZpbmUgUENMS19TVE9QX0FfRElHSVRBTF9JVCAgICAgMHhBCS8vIEFib3V0IERpZ2l0YWwgSW50ZXJydXB0Ci0jZGVmaW5lIFBDTEtfU1RPUF9BX1VUQzIgICAgICAgICAgIDB4QwkvLyBBYm91dCBVc2VyIFRDMiBvdXQKLSNkZWZpbmUgUENMS19TVE9QX0FfU0JVUzAgICAgICAgICAgMHhECS8vIEFib3V0IFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUT1BfQV9TQlVTMSAgICAgICAgICAweEUJLy8gQWJvdXQgU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMyICAgICAgICAgIDB4RgkvLyBBYm91dCBTeW5jQnVzIDIKKy8qICBQYWNlciBDbG9jayBTdG9wIFRyaWdnZXIgc2VsZWN0IChTZXRQYWNlclN0b3ApICovCisjZGVmaW5lIFBDTEtfU1RPUF9TT0ZUV0FSRSAgICAgICAgIDB4MAkvKiAgU29mdHdhcmUgUGFjZXIgU3RvcCAoU3RvcFBhY2VyKSAqLworI2RlZmluZSBQQ0xLX1NUT1BfRVRSSUcgICAgICAgICAgICAweDEJLyogIEV4dGVybmFsIFRyaWdnZXIgKi8KKyNkZWZpbmUgUENMS19TVE9QX0RJR0lUQUxfSVQgICAgICAgMHgyCS8qICBEaWdpdGFsIEludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUT1BfQUNOVCAgICAgICAgICAgICAweDMJLyogIEFib3V0IENvdW50ZXIgKi8KKyNkZWZpbmUgUENMS19TVE9QX1VUQzIgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRDMiBvdXQgKi8KKyNkZWZpbmUgUENMS19TVE9QX1NCVVMwICAgICAgICAgICAgMHg1CS8qICBTeW5jQnVzIDAgKi8KKyNkZWZpbmUgUENMS19TVE9QX1NCVVMxICAgICAgICAgICAgMHg2CS8qICBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgUENMS19TVE9QX1NCVVMyICAgICAgICAgICAgMHg3CS8qICBTeW5jQnVzIDIgKi8KKyNkZWZpbmUgUENMS19TVE9QX0FfU09GVFdBUkUgICAgICAgMHg4CS8qICBBYm91dCBTb2Z0d2FyZSBQYWNlciBTdG9wICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX0VUUklHICAgICAgICAgIDB4OQkvKiAgQWJvdXQgRXh0ZXJuYWwgVHJpZ2dlciAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9ESUdJVEFMX0lUICAgICAweEEJLyogIEFib3V0IERpZ2l0YWwgSW50ZXJydXB0ICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1VUQzIgICAgICAgICAgIDB4QwkvKiAgQWJvdXQgVXNlciBUQzIgb3V0ICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMwICAgICAgICAgIDB4RAkvKiAgQWJvdXQgU3luY0J1cyAwICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMxICAgICAgICAgIDB4RQkvKiAgQWJvdXQgU3luY0J1cyAxICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMyICAgICAgICAgIDB4RgkvKiAgQWJvdXQgU3luY0J1cyAyICovCiAKLS8vIEFib3V0IENvdW50ZXIgU3RvcCBFbmFibGUKLSNkZWZpbmUgQUNOVF9TVE9QICAgICAgICAgICAgICAgICAgMHgwCS8vIHN0b3AgZW5hYmxlCi0jZGVmaW5lIEFDTlRfTk9fU1RPUCAgICAgICAgICAgICAgIDB4MQkvLyBzdG9wIGRpc2FibGVkCisvKiAgQWJvdXQgQ291bnRlciBTdG9wIEVuYWJsZSAqLworI2RlZmluZSBBQ05UX1NUT1AgICAgICAgICAgICAgICAgICAweDAJLyogIHN0b3AgZW5hYmxlICovCisjZGVmaW5lIEFDTlRfTk9fU1RPUCAgICAgICAgICAgICAgIDB4MQkvKiAgc3RvcCBkaXNhYmxlZCAqLwogCi0vLyBEQUMgdXBkYXRlIHNvdXJjZSAoU2V0REFDMVN0YXJ0ICYgU2V0REFDMlN0YXJ0KQotI2RlZmluZSBEQUNfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLy8gU29mdHdhcmUgVXBkYXRlCi0jZGVmaW5lIERBQ19TVEFSVF9DR1QgICAgICAgICAgICAgIDB4MQkvLyBDR1QgY29udHJvbGxlZCBVcGRhdGUKLSNkZWZpbmUgREFDX1NUQVJUX0RBQ19DTEsgICAgICAgICAgMHgyCS8vIEQvQSBDbG9jawotI2RlZmluZSBEQUNfU1RBUlRfRVBDTEsgICAgICAgICAgICAweDMJLy8gRXh0ZXJuYWwgUGFjZXIgQ2xvY2sKLSNkZWZpbmUgREFDX1NUQVJUX1NCVVMwICAgICAgICAgICAgMHg0CS8vIFN5bmNCdXMgMAotI2RlZmluZSBEQUNfU1RBUlRfU0JVUzEgICAgICAgICAgICAweDUJLy8gU3luY0J1cyAxCi0jZGVmaW5lIERBQ19TVEFSVF9TQlVTMiAgICAgICAgICAgIDB4NgkvLyBTeW5jQnVzIDIKKy8qICBEQUMgdXBkYXRlIHNvdXJjZSAoU2V0REFDMVN0YXJ0ICYgU2V0REFDMlN0YXJ0KSAqLworI2RlZmluZSBEQUNfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLyogIFNvZnR3YXJlIFVwZGF0ZSAqLworI2RlZmluZSBEQUNfU1RBUlRfQ0dUICAgICAgICAgICAgICAweDEJLyogIENHVCBjb250cm9sbGVkIFVwZGF0ZSAqLworI2RlZmluZSBEQUNfU1RBUlRfREFDX0NMSyAgICAgICAgICAweDIJLyogIEQvQSBDbG9jayAqLworI2RlZmluZSBEQUNfU1RBUlRfRVBDTEsgICAgICAgICAgICAweDMJLyogIEV4dGVybmFsIFBhY2VyIENsb2NrICovCisjZGVmaW5lIERBQ19TVEFSVF9TQlVTMCAgICAgICAgICAgIDB4NAkvKiAgU3luY0J1cyAwICovCisjZGVmaW5lIERBQ19TVEFSVF9TQlVTMSAgICAgICAgICAgIDB4NQkvKiAgU3luY0J1cyAxICovCisjZGVmaW5lIERBQ19TVEFSVF9TQlVTMiAgICAgICAgICAgIDB4NgkvKiAgU3luY0J1cyAyICovCiAKLS8vIERBQyBDeWNsZSBNb2RlIChTZXREQUMxQ3ljbGUsIFNldERBQzJDeWNsZSwgU2V0dXBEQUMpCi0jZGVmaW5lIERBQ19DWUNMRV9TSU5HTEUgICAgICAgICAgIDB4MAkvLyBub3QgY3ljbGUKLSNkZWZpbmUgREFDX0NZQ0xFX01VTFRJICAgICAgICAgICAgMHgxCS8vIGN5Y2xlCisvKiAgREFDIEN5Y2xlIE1vZGUgKFNldERBQzFDeWNsZSwgU2V0REFDMkN5Y2xlLCBTZXR1cERBQykgKi8KKyNkZWZpbmUgREFDX0NZQ0xFX1NJTkdMRSAgICAgICAgICAgMHgwCS8qICBub3QgY3ljbGUgKi8KKyNkZWZpbmUgREFDX0NZQ0xFX01VTFRJICAgICAgICAgICAgMHgxCS8qICBjeWNsZSAqLwogCi0vLyA4MjU0IE9wZXJhdGlvbiBNb2RlcyAoU2V0ODI1NE1vZGUsIFNldHVwVGltZXJDb3VudGVyKQotI2RlZmluZSBNODI1NF9FVkVOVF9DT1VOVEVSICAgICAgICAwCS8vIEV2ZW50IENvdW50ZXIKLSNkZWZpbmUgTTgyNTRfSFdfT05FX1NIT1QgICAgICAgICAgMQkvLyBIYXJkd2FyZS1SZXRyaWdnZXJhYmxlIE9uZS1TaG90Ci0jZGVmaW5lIE04MjU0X1JBVEVfR0VORVJBVE9SICAgICAgIDIJLy8gUmF0ZSBHZW5lcmF0b3IKLSNkZWZpbmUgTTgyNTRfU1FVQVJFX1dBVkUgICAgICAgICAgMwkvLyBTcXVhcmUgV2F2ZSBNb2RlCi0jZGVmaW5lIE04MjU0X1NXX1NUUk9CRSAgICAgICAgICAgIDQJLy8gU29mdHdhcmUgVHJpZ2dlcmVkIFN0cm9iZQotI2RlZmluZSBNODI1NF9IV19TVFJPQkUgICAgICAgICAgICA1CS8vIEhhcmR3YXJlIFRyaWdnZXJlZCBTdHJvYmUgKFJldHJpZ2dlcmFibGUpCisvKiAgODI1NCBPcGVyYXRpb24gTW9kZXMgKFNldDgyNTRNb2RlLCBTZXR1cFRpbWVyQ291bnRlcikgKi8KKyNkZWZpbmUgTTgyNTRfRVZFTlRfQ09VTlRFUiAgICAgICAgMAkvKiAgRXZlbnQgQ291bnRlciAqLworI2RlZmluZSBNODI1NF9IV19PTkVfU0hPVCAgICAgICAgICAxCS8qICBIYXJkd2FyZS1SZXRyaWdnZXJhYmxlIE9uZS1TaG90ICovCisjZGVmaW5lIE04MjU0X1JBVEVfR0VORVJBVE9SICAgICAgIDIJLyogIFJhdGUgR2VuZXJhdG9yICovCisjZGVmaW5lIE04MjU0X1NRVUFSRV9XQVZFICAgICAgICAgIDMJLyogIFNxdWFyZSBXYXZlIE1vZGUgKi8KKyNkZWZpbmUgTTgyNTRfU1dfU1RST0JFICAgICAgICAgICAgNAkvKiAgU29mdHdhcmUgVHJpZ2dlcmVkIFN0cm9iZSAqLworI2RlZmluZSBNODI1NF9IV19TVFJPQkUgICAgICAgICAgICA1CS8qICBIYXJkd2FyZSBUcmlnZ2VyZWQgU3Ryb2JlIChSZXRyaWdnZXJhYmxlKSAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMCBDbG9jayBTZWxlY3QgKFNldFV0YzBDbG9jaykKLSNkZWZpbmUgQ1VUQzBfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8vIDhNSHoKLSNkZWZpbmUgQ1VUQzBfRVhUX1RDX0NMT0NLMSAgICAgICAgMHgxCS8vIEV4dC4gVEMgQ2xvY2sgMQotI2RlZmluZSBDVVRDMF9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLy8gRXh0LiBUQyBDbG9jayAyCi0jZGVmaW5lIENVVEMwX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvLyBFeHQuIFBhY2VyIENsb2NrCisvKiAgVXNlciBUaW1lci9Db3VudGVyIDAgQ2xvY2sgU2VsZWN0IChTZXRVdGMwQ2xvY2spICovCisjZGVmaW5lIENVVEMwXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvKiAgOE1IeiAqLworI2RlZmluZSBDVVRDMF9FWFRfVENfQ0xPQ0sxICAgICAgICAweDEJLyogIEV4dC4gVEMgQ2xvY2sgMSAqLworI2RlZmluZSBDVVRDMF9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLyogIEV4dC4gVEMgQ2xvY2sgMiAqLworI2RlZmluZSBDVVRDMF9FWFRfUENMSyAgICAgICAgICAgICAweDMJLyogIEV4dC4gUGFjZXIgQ2xvY2sgKi8KIAotLy8gVXNlciBUaW1lci9Db3VudGVyIDEgQ2xvY2sgU2VsZWN0IChTZXRVdGMxQ2xvY2spCi0jZGVmaW5lIENVVEMxXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvLyA4TUh6Ci0jZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvLyBFeHQuIFRDIENsb2NrIDEKLSNkZWZpbmUgQ1VUQzFfRVhUX1RDX0NMT0NLMiAgICAgICAgMHgyCS8vIEV4dC4gVEMgQ2xvY2sgMgotI2RlZmluZSBDVVRDMV9FWFRfUENMSyAgICAgICAgICAgICAweDMJLy8gRXh0LiBQYWNlciBDbG9jawotI2RlZmluZSBDVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLy8gVXNlciBUaW1lci9Db3VudGVyIDAgb3V0Ci0jZGVmaW5lIENVVEMxX0RJTl9TSUdOQUwgICAgICAgICAgIDB4NQkvLyBIaWdoLVNwZWVkIERpZ2l0YWwgSW5wdXQgICBTYW1wbGluZyBzaWduYWwKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMSBDbG9jayBTZWxlY3QgKFNldFV0YzFDbG9jaykgKi8KKyNkZWZpbmUgQ1VUQzFfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8qICA4TUh6ICovCisjZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvKiAgRXh0LiBUQyBDbG9jayAxICovCisjZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzIgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBDbG9jayAyICovCisjZGVmaW5lIENVVEMxX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvKiAgRXh0LiBQYWNlciBDbG9jayAqLworI2RlZmluZSBDVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLyogIFVzZXIgVGltZXIvQ291bnRlciAwIG91dCAqLworI2RlZmluZSBDVVRDMV9ESU5fU0lHTkFMICAgICAgICAgICAweDUJLyogIEhpZ2gtU3BlZWQgRGlnaXRhbCBJbnB1dCAgIFNhbXBsaW5nIHNpZ25hbCAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMiBDbG9jayBTZWxlY3QgKFNldFV0YzJDbG9jaykKLSNkZWZpbmUgQ1VUQzJfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8vIDhNSHoKLSNkZWZpbmUgQ1VUQzJfRVhUX1RDX0NMT0NLMSAgICAgICAgMHgxCS8vIEV4dC4gVEMgQ2xvY2sgMQotI2RlZmluZSBDVVRDMl9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLy8gRXh0LiBUQyBDbG9jayAyCi0jZGVmaW5lIENVVEMyX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvLyBFeHQuIFBhY2VyIENsb2NrCi0jZGVmaW5lIENVVEMyX1VUQzFfT1VUICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRpbWVyL0NvdW50ZXIgMSBvdXQKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMiBDbG9jayBTZWxlY3QgKFNldFV0YzJDbG9jaykgKi8KKyNkZWZpbmUgQ1VUQzJfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8qICA4TUh6ICovCisjZGVmaW5lIENVVEMyX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvKiAgRXh0LiBUQyBDbG9jayAxICovCisjZGVmaW5lIENVVEMyX0VYVF9UQ19DTE9DSzIgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBDbG9jayAyICovCisjZGVmaW5lIENVVEMyX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvKiAgRXh0LiBQYWNlciBDbG9jayAqLworI2RlZmluZSBDVVRDMl9VVEMxX09VVCAgICAgICAgICAgICAweDQJLyogIFVzZXIgVGltZXIvQ291bnRlciAxIG91dCAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMCBHYXRlIFNlbGVjdCAoU2V0VXRjMEdhdGUpCi0jZGVmaW5lIEdVVEMwX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvLyBOb3QgZ2F0ZWQKLSNkZWZpbmUgR1VUQzBfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8vIEdhdGVkCi0jZGVmaW5lIEdVVEMwX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvLyBFeHQuIFRDIEdhdGUgMQotI2RlZmluZSBHVVRDMF9FWFRfVENfR0FURTIgICAgICAgICAweDMJLy8gRXh0LiBUQyBHYXRlIDIKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMCBHYXRlIFNlbGVjdCAoU2V0VXRjMEdhdGUpICovCisjZGVmaW5lIEdVVEMwX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvKiAgTm90IGdhdGVkICovCisjZGVmaW5lIEdVVEMwX0dBVEVEICAgICAgICAgICAgICAgIDB4MQkvKiAgR2F0ZWQgKi8KKyNkZWZpbmUgR1VUQzBfRVhUX1RDX0dBVEUxICAgICAgICAgMHgyCS8qICBFeHQuIFRDIEdhdGUgMSAqLworI2RlZmluZSBHVVRDMF9FWFRfVENfR0FURTIgICAgICAgICAweDMJLyogIEV4dC4gVEMgR2F0ZSAyICovCiAKLS8vIFVzZXIgVGltZXIvQ291bnRlciAxIEdhdGUgU2VsZWN0IChTZXRVdGMxR2F0ZSkKLSNkZWZpbmUgR1VUQzFfTk9UX0dBVEVEICAgICAgICAgICAgMHgwCS8vIE5vdCBnYXRlZAotI2RlZmluZSBHVVRDMV9HQVRFRCAgICAgICAgICAgICAgICAweDEJLy8gR2F0ZWQKLSNkZWZpbmUgR1VUQzFfRVhUX1RDX0dBVEUxICAgICAgICAgMHgyCS8vIEV4dC4gVEMgR2F0ZSAxCi0jZGVmaW5lIEdVVEMxX0VYVF9UQ19HQVRFMiAgICAgICAgIDB4MwkvLyBFeHQuIFRDIEdhdGUgMgotI2RlZmluZSBHVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLy8gVXNlciBUaW1lci9Db3VudGVyIDAgb3V0CisvKiAgVXNlciBUaW1lci9Db3VudGVyIDEgR2F0ZSBTZWxlY3QgKFNldFV0YzFHYXRlKSAqLworI2RlZmluZSBHVVRDMV9OT1RfR0FURUQgICAgICAgICAgICAweDAJLyogIE5vdCBnYXRlZCAqLworI2RlZmluZSBHVVRDMV9HQVRFRCAgICAgICAgICAgICAgICAweDEJLyogIEdhdGVkICovCisjZGVmaW5lIEdVVEMxX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBHYXRlIDEgKi8KKyNkZWZpbmUgR1VUQzFfRVhUX1RDX0dBVEUyICAgICAgICAgMHgzCS8qICBFeHQuIFRDIEdhdGUgMiAqLworI2RlZmluZSBHVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLyogIFVzZXIgVGltZXIvQ291bnRlciAwIG91dCAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMiBHYXRlIFNlbGVjdCAoU2V0VXRjMkdhdGUpCi0jZGVmaW5lIEdVVEMyX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvLyBOb3QgZ2F0ZWQKLSNkZWZpbmUgR1VUQzJfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8vIEdhdGVkCi0jZGVmaW5lIEdVVEMyX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvLyBFeHQuIFRDIEdhdGUgMQotI2RlZmluZSBHVVRDMl9FWFRfVENfR0FURTIgICAgICAgICAweDMJLy8gRXh0LiBUQyBHYXRlIDIKLSNkZWZpbmUgR1VUQzJfVVRDMV9PVVQgICAgICAgICAgICAgMHg0CS8vIFVzZXIgVGltZXIvQ291bnRlciAxIG91dAorLyogIFVzZXIgVGltZXIvQ291bnRlciAyIEdhdGUgU2VsZWN0IChTZXRVdGMyR2F0ZSkgKi8KKyNkZWZpbmUgR1VUQzJfTk9UX0dBVEVEICAgICAgICAgICAgMHgwCS8qICBOb3QgZ2F0ZWQgKi8KKyNkZWZpbmUgR1VUQzJfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8qICBHYXRlZCAqLworI2RlZmluZSBHVVRDMl9FWFRfVENfR0FURTEgICAgICAgICAweDIJLyogIEV4dC4gVEMgR2F0ZSAxICovCisjZGVmaW5lIEdVVEMyX0VYVF9UQ19HQVRFMiAgICAgICAgIDB4MwkvKiAgRXh0LiBUQyBHYXRlIDIgKi8KKyNkZWZpbmUgR1VUQzJfVVRDMV9PVVQgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMSBvdXQgKi8KIAotLy8gSW50ZXJydXB0IFNvdXJjZSBNYXNrcyAoU2V0SVRNYXNrLCBDbGVhcklUTWFzaywgR2V0SVRTdGF0dXMpCi0jZGVmaW5lIElSUU1fQURDX0ZJRk9fV1JJVEUgICAgICAgIDB4MDAwMQkvLyBBREMgRklGTyBXcml0ZQotI2RlZmluZSBJUlFNX0NHVF9SRVNFVCAgICAgICAgICAgICAweDAwMDIJLy8gUmVzZXQgQ0dUCi0jZGVmaW5lIElSUU1fQ0dUX1BBVVNFICAgICAgICAgICAgIDB4MDAwOAkvLyBQYXVzZSBDR1QKLSNkZWZpbmUgSVJRTV9BRENfQUJPVVRfQ05UICAgICAgICAgMHgwMDEwCS8vIEFib3V0IENvdW50ZXIgb3V0Ci0jZGVmaW5lIElSUU1fQURDX0RFTEFZX0NOVCAgICAgICAgIDB4MDAyMAkvLyBEZWxheSBDb3VudGVyIG91dAotI2RlZmluZSBJUlFNX0FEQ19TQU1QTEVfQ05UCSAgIDB4MDA0MAkvLyBBREMgU2FtcGxlIENvdW50ZXIKLSNkZWZpbmUgSVJRTV9EQUMxX1VDTlQgICAgICAgICAgICAgMHgwMDgwCS8vIERBQzEgVXBkYXRlIENvdW50ZXIKLSNkZWZpbmUgSVJRTV9EQUMyX1VDTlQgICAgICAgICAgICAgMHgwMTAwCS8vIERBQzIgVXBkYXRlIENvdW50ZXIKLSNkZWZpbmUgSVJRTV9VVEMxICAgICAgICAgICAgICAgICAgMHgwMjAwCS8vIFVzZXIgVEMxIG91dAotI2RlZmluZSBJUlFNX1VUQzFfSU5WICAgICAgICAgICAgICAweDA0MDAJLy8gVXNlciBUQzEgb3V0LCBpbnZlcnRlZAotI2RlZmluZSBJUlFNX1VUQzIgICAgICAgICAgICAgICAgICAweDA4MDAJLy8gVXNlciBUQzIgb3V0Ci0jZGVmaW5lIElSUU1fRElHSVRBTF9JVCAgICAgICAgICAgIDB4MTAwMAkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBJUlFNX0VYVEVSTkFMX0lUICAgICAgICAgICAweDIwMDAJLy8gRXh0ZXJuYWwgSW50ZXJydXB0Ci0jZGVmaW5lIElSUU1fRVRSSUdfUklTSU5HICAgICAgICAgIDB4NDAwMAkvLyBFeHRlcm5hbCBUcmlnZ2VyIHJpc2luZy1lZGdlCi0jZGVmaW5lIElSUU1fRVRSSUdfRkFMTElORyAgICAgICAgIDB4ODAwMAkvLyBFeHRlcm5hbCBUcmlnZ2VyIGZhbGxpbmctZWRnZQorLyogIEludGVycnVwdCBTb3VyY2UgTWFza3MgKFNldElUTWFzaywgQ2xlYXJJVE1hc2ssIEdldElUU3RhdHVzKSAqLworI2RlZmluZSBJUlFNX0FEQ19GSUZPX1dSSVRFICAgICAgICAweDAwMDEJLyogIEFEQyBGSUZPIFdyaXRlICovCisjZGVmaW5lIElSUU1fQ0dUX1JFU0VUICAgICAgICAgICAgIDB4MDAwMgkvKiAgUmVzZXQgQ0dUICovCisjZGVmaW5lIElSUU1fQ0dUX1BBVVNFICAgICAgICAgICAgIDB4MDAwOAkvKiAgUGF1c2UgQ0dUICovCisjZGVmaW5lIElSUU1fQURDX0FCT1VUX0NOVCAgICAgICAgIDB4MDAxMAkvKiAgQWJvdXQgQ291bnRlciBvdXQgKi8KKyNkZWZpbmUgSVJRTV9BRENfREVMQVlfQ05UICAgICAgICAgMHgwMDIwCS8qICBEZWxheSBDb3VudGVyIG91dCAqLworI2RlZmluZSBJUlFNX0FEQ19TQU1QTEVfQ05UCSAgIDB4MDA0MAkvKiAgQURDIFNhbXBsZSBDb3VudGVyICovCisjZGVmaW5lIElSUU1fREFDMV9VQ05UICAgICAgICAgICAgIDB4MDA4MAkvKiAgREFDMSBVcGRhdGUgQ291bnRlciAqLworI2RlZmluZSBJUlFNX0RBQzJfVUNOVCAgICAgICAgICAgICAweDAxMDAJLyogIERBQzIgVXBkYXRlIENvdW50ZXIgKi8KKyNkZWZpbmUgSVJRTV9VVEMxICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qICBVc2VyIFRDMSBvdXQgKi8KKyNkZWZpbmUgSVJRTV9VVEMxX0lOViAgICAgICAgICAgICAgMHgwNDAwCS8qICBVc2VyIFRDMSBvdXQsIGludmVydGVkICovCisjZGVmaW5lIElSUU1fVVRDMiAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiAgVXNlciBUQzIgb3V0ICovCisjZGVmaW5lIElSUU1fRElHSVRBTF9JVCAgICAgICAgICAgIDB4MTAwMAkvKiAgRGlnaXRhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRTV9FWFRFUk5BTF9JVCAgICAgICAgICAgMHgyMDAwCS8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRTV9FVFJJR19SSVNJTkcgICAgICAgICAgMHg0MDAwCS8qICBFeHRlcm5hbCBUcmlnZ2VyIHJpc2luZy1lZGdlICovCisjZGVmaW5lIElSUU1fRVRSSUdfRkFMTElORyAgICAgICAgIDB4ODAwMAkvKiAgRXh0ZXJuYWwgVHJpZ2dlciBmYWxsaW5nLWVkZ2UgKi8KIAotLy8gRE1BIFJlcXVlc3QgU291cmNlcyAoTEFTMCkKLSNkZWZpbmUgRE1BU19ESVNBQkxFRCAgICAgICAgICAgICAgMHgwCS8vIERNQSBEaXNhYmxlZAotI2RlZmluZSBETUFTX0FEQ19TQ05UICAgICAgICAgICAgICAweDEJLy8gQURDIFNhbXBsZSBDb3VudGVyCi0jZGVmaW5lIERNQVNfREFDMV9VQ05UICAgICAgICAgICAgIDB4MgkvLyBEL0ExIFVwZGF0ZSBDb3VudGVyCi0jZGVmaW5lIERNQVNfREFDMl9VQ05UICAgICAgICAgICAgIDB4MwkvLyBEL0EyIFVwZGF0ZSBDb3VudGVyCi0jZGVmaW5lIERNQVNfVVRDMSAgICAgICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRDMSBvdXQKLSNkZWZpbmUgRE1BU19BREZJRk9fSEFMRl9GVUxMICAgICAgMHg4CS8vIEEvRCBGSUZPIGhhbGYgZnVsbAotI2RlZmluZSBETUFTX0RBQzFfRklGT19IQUxGX0VNUFRZICAweDkJLy8gRC9BMSBGSUZPIGhhbGYgZW1wdHkKLSNkZWZpbmUgRE1BU19EQUMyX0ZJRk9fSEFMRl9FTVBUWSAgMHhBCS8vIEQvQTIgRklGTyBoYWxmIGVtcHR5CisvKiAgRE1BIFJlcXVlc3QgU291cmNlcyAoTEFTMCkgKi8KKyNkZWZpbmUgRE1BU19ESVNBQkxFRCAgICAgICAgICAgICAgMHgwCS8qICBETUEgRGlzYWJsZWQgKi8KKyNkZWZpbmUgRE1BU19BRENfU0NOVCAgICAgICAgICAgICAgMHgxCS8qICBBREMgU2FtcGxlIENvdW50ZXIgKi8KKyNkZWZpbmUgRE1BU19EQUMxX1VDTlQgICAgICAgICAgICAgMHgyCS8qICBEL0ExIFVwZGF0ZSBDb3VudGVyICovCisjZGVmaW5lIERNQVNfREFDMl9VQ05UICAgICAgICAgICAgIDB4MwkvKiAgRC9BMiBVcGRhdGUgQ291bnRlciAqLworI2RlZmluZSBETUFTX1VUQzEgICAgICAgICAgICAgICAgICAweDQJLyogIFVzZXIgVEMxIG91dCAqLworI2RlZmluZSBETUFTX0FERklGT19IQUxGX0ZVTEwgICAgICAweDgJLyogIEEvRCBGSUZPIGhhbGYgZnVsbCAqLworI2RlZmluZSBETUFTX0RBQzFfRklGT19IQUxGX0VNUFRZICAweDkJLyogIEQvQTEgRklGTyBoYWxmIGVtcHR5ICovCisjZGVmaW5lIERNQVNfREFDMl9GSUZPX0hBTEZfRU1QVFkgIDB4QQkvKiAgRC9BMiBGSUZPIGhhbGYgZW1wdHkgKi8KIAotLy8gRE1BIExvY2FsIEFkZHJlc3NlcyAgICgweDQwMDAwMDAwK0xBUzEgb2Zmc2V0KQotI2RlZmluZSBETUFMQUREUl9BREMgICAgICAgMHg0MDAwMDAwMAkvLyBBL0QgRklGTwotI2RlZmluZSBETUFMQUREUl9IRElOICAgICAgMHg0MDAwMDAwNAkvLyBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgRklGTwotI2RlZmluZSBETUFMQUREUl9EQUMxICAgICAgMHg0MDAwMDAwOAkvLyBEL0ExIEZJRk8KLSNkZWZpbmUgRE1BTEFERFJfREFDMiAgICAgIDB4NDAwMDAwMEMJLy8gRC9BMiBGSUZPCisvKiAgRE1BIExvY2FsIEFkZHJlc3NlcyAgICgweDQwMDAwMDAwK0xBUzEgb2Zmc2V0KSAqLworI2RlZmluZSBETUFMQUREUl9BREMgICAgICAgMHg0MDAwMDAwMAkvKiAgQS9EIEZJRk8gKi8KKyNkZWZpbmUgRE1BTEFERFJfSERJTiAgICAgIDB4NDAwMDAwMDQJLyogIEhpZ2ggU3BlZWQgRGlnaXRhbCBJbnB1dCBGSUZPICovCisjZGVmaW5lIERNQUxBRERSX0RBQzEgICAgICAweDQwMDAwMDA4CS8qICBEL0ExIEZJRk8gKi8KKyNkZWZpbmUgRE1BTEFERFJfREFDMiAgICAgIDB4NDAwMDAwMEMJLyogIEQvQTIgRklGTyAqLwogCi0vLyBQb3J0IDAgY29tcGFyZSBtb2RlcyAoU2V0RElPMENvbXBhcmVNb2RlKQotI2RlZmluZSBESU9fTU9ERV9FVkVOVCAgICAgMAkvLyBFdmVudCBNb2RlCi0jZGVmaW5lIERJT19NT0RFX01BVENIICAgICAxCS8vIE1hdGNoIE1vZGUKKy8qICBQb3J0IDAgY29tcGFyZSBtb2RlcyAoU2V0RElPMENvbXBhcmVNb2RlKSAqLworI2RlZmluZSBESU9fTU9ERV9FVkVOVCAgICAgMAkvKiAgRXZlbnQgTW9kZSAqLworI2RlZmluZSBESU9fTU9ERV9NQVRDSCAgICAgMQkvKiAgTWF0Y2ggTW9kZSAqLwogCi0vLyBEaWdpdGFsIFRhYmxlIEVuYWJsZSAoUG9ydCAxIGRpc2FibGUpCi0jZGVmaW5lIERUQkxfRElTQUJMRSAgICAgICAwCS8vIEVuYWJsZSBEaWdpdGFsIFRhYmxlCi0jZGVmaW5lIERUQkxfRU5BQkxFICAgICAgICAxCS8vIERpc2FibGUgRGlnaXRhbCBUYWJsZQorLyogIERpZ2l0YWwgVGFibGUgRW5hYmxlIChQb3J0IDEgZGlzYWJsZSkgKi8KKyNkZWZpbmUgRFRCTF9ESVNBQkxFICAgICAgIDAJLyogIEVuYWJsZSBEaWdpdGFsIFRhYmxlICovCisjZGVmaW5lIERUQkxfRU5BQkxFICAgICAgICAxCS8qICBEaXNhYmxlIERpZ2l0YWwgVGFibGUgKi8KIAotLy8gU2FtcGxpbmcgU2lnbmFsIGZvciBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgKFNldEhkaW5TdGFydCkKLSNkZWZpbmUgSERJTl9TT0ZUV0FSRSAgICAgIDB4MAkvLyBTb2Z0d2FyZSBUcmlnZ2VyCi0jZGVmaW5lIEhESU5fQURDICAgICAgICAgICAweDEJLy8gQS9EIENvbnZlcnNpb24gU2lnbmFsCi0jZGVmaW5lIEhESU5fVVRDMCAgICAgICAgICAweDIJLy8gVXNlciBUQyBvdXQgMAotI2RlZmluZSBIRElOX1VUQzEgICAgICAgICAgMHgzCS8vIFVzZXIgVEMgb3V0IDEKLSNkZWZpbmUgSERJTl9VVEMyICAgICAgICAgIDB4NAkvLyBVc2VyIFRDIG91dCAyCi0jZGVmaW5lIEhESU5fRVBDTEsgICAgICAgICAweDUJLy8gRXh0ZXJuYWwgUGFjZXIgQ2xvY2sKLSNkZWZpbmUgSERJTl9FVFJHICAgICAgICAgIDB4NgkvLyBFeHRlcm5hbCBUcmlnZ2VyCisvKiAgU2FtcGxpbmcgU2lnbmFsIGZvciBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgKFNldEhkaW5TdGFydCkgKi8KKyNkZWZpbmUgSERJTl9TT0ZUV0FSRSAgICAgIDB4MAkvKiAgU29mdHdhcmUgVHJpZ2dlciAqLworI2RlZmluZSBIRElOX0FEQyAgICAgICAgICAgMHgxCS8qICBBL0QgQ29udmVyc2lvbiBTaWduYWwgKi8KKyNkZWZpbmUgSERJTl9VVEMwICAgICAgICAgIDB4MgkvKiAgVXNlciBUQyBvdXQgMCAqLworI2RlZmluZSBIRElOX1VUQzEgICAgICAgICAgMHgzCS8qICBVc2VyIFRDIG91dCAxICovCisjZGVmaW5lIEhESU5fVVRDMiAgICAgICAgICAweDQJLyogIFVzZXIgVEMgb3V0IDIgKi8KKyNkZWZpbmUgSERJTl9FUENMSyAgICAgICAgIDB4NQkvKiAgRXh0ZXJuYWwgUGFjZXIgQ2xvY2sgKi8KKyNkZWZpbmUgSERJTl9FVFJHICAgICAgICAgIDB4NgkvKiAgRXh0ZXJuYWwgVHJpZ2dlciAqLwogCi0vLyBDaGFubmVsIEdhaW4gVGFibGUgLyBDaGFubmVsIEdhaW4gTGF0Y2gKLSNkZWZpbmUgQ1NDX0xBVENIICAgICAgICAgIDAJLy8gQ2hhbm5lbCBHYWluIExhdGNoIG1vZGUKLSNkZWZpbmUgQ1NDX0NHVCAgICAgICAgICAgIDEJLy8gQ2hhbm5lbCBHYWluIFRhYmxlIG1vZGUKKy8qICBDaGFubmVsIEdhaW4gVGFibGUgLyBDaGFubmVsIEdhaW4gTGF0Y2ggKi8KKyNkZWZpbmUgQ1NDX0xBVENIICAgICAgICAgIDAJLyogIENoYW5uZWwgR2FpbiBMYXRjaCBtb2RlICovCisjZGVmaW5lIENTQ19DR1QgICAgICAgICAgICAxCS8qICBDaGFubmVsIEdhaW4gVGFibGUgbW9kZSAqLwogCi0vLyBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRW5hYmxlCi0jZGVmaW5lIENHVF9QQVVTRV9ESVNBQkxFICAwCS8vIENoYW5uZWwgR2FpbiBUYWJsZSBQYXVzZSBEaXNhYmxlCi0jZGVmaW5lIENHVF9QQVVTRV9FTkFCTEUgICAxCS8vIENoYW5uZWwgR2FpbiBUYWJsZSBQYXVzZSBFbmFibGUKKy8qICBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRW5hYmxlICovCisjZGVmaW5lIENHVF9QQVVTRV9ESVNBQkxFICAwCS8qICBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRGlzYWJsZSAqLworI2RlZmluZSBDR1RfUEFVU0VfRU5BQkxFICAgMQkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIFBhdXNlIEVuYWJsZSAqLwogCi0vLyBEQUMgb3V0cHV0IHR5cGUvcmFuZ2UgKHA2MykKLSNkZWZpbmUgQU9VVF9VTklQNSAgICAgICAgIDAJLy8gMC4uKzUgVm9sdAotI2RlZmluZSBBT1VUX1VOSVAxMCAgICAgICAgMQkvLyAwLi4rMTAgVm9sdAotI2RlZmluZSBBT1VUX0JJUDUgICAgICAgICAgMgkvLyAtNS4uKzUgVm9sdAotI2RlZmluZSBBT1VUX0JJUDEwICAgICAgICAgMwkvLyAtMTAuLisxMCBWb2x0CisvKiAgREFDIG91dHB1dCB0eXBlL3JhbmdlIChwNjMpICovCisjZGVmaW5lIEFPVVRfVU5JUDUgICAgICAgICAwCS8qICAwLi4rNSBWb2x0ICovCisjZGVmaW5lIEFPVVRfVU5JUDEwICAgICAgICAxCS8qICAwLi4rMTAgVm9sdCAqLworI2RlZmluZSBBT1VUX0JJUDUgICAgICAgICAgMgkvKiAgLTUuLis1IFZvbHQgKi8KKyNkZWZpbmUgQU9VVF9CSVAxMCAgICAgICAgIDMJLyogIC0xMC4uKzEwIFZvbHQgKi8KIAotLy8gR2hhbm5lbCBHYWluIFRhYmxlIGZpZWxkIGRlZmluaXRpb25zIChwNjEpCi0vLyBHYWluCisvKiAgR2hhbm5lbCBHYWluIFRhYmxlIGZpZWxkIGRlZmluaXRpb25zIChwNjEpICovCisvKiAgR2FpbiAqLwogI2RlZmluZSBHQUlOMSAgICAgICAgICAgICAgMAogI2RlZmluZSBHQUlOMiAgICAgICAgICAgICAgMQogI2RlZmluZSBHQUlONCAgICAgICAgICAgICAgMgpAQCAtMzk4LDE1ICszOTgsMTUgQEAKICNkZWZpbmUgR0FJTjY0ICAgICAgICAgICAgIDYKICNkZWZpbmUgR0FJTjEyOCAgICAgICAgICAgIDcKIAotLy8gSW5wdXQgcmFuZ2UvcG9sYXJpdHkKLSNkZWZpbmUgQUlOX0JJUDUgICAgICAgICAgIDAJLy8gLTUuLis1IFZvbHQKLSNkZWZpbmUgQUlOX0JJUDEwICAgICAgICAgIDEJLy8gLTEwLi4rMTAgVm9sdAotI2RlZmluZSBBSU5fVU5JUDEwICAgICAgICAgMgkvLyAwLi4rMTAgVm9sdAorLyogIElucHV0IHJhbmdlL3BvbGFyaXR5ICovCisjZGVmaW5lIEFJTl9CSVA1ICAgICAgICAgICAwCS8qICAtNS4uKzUgVm9sdCAqLworI2RlZmluZSBBSU5fQklQMTAgICAgICAgICAgMQkvKiAgLTEwLi4rMTAgVm9sdCAqLworI2RlZmluZSBBSU5fVU5JUDEwICAgICAgICAgMgkvKiAgMC4uKzEwIFZvbHQgKi8KIAotLy8gbm9uIHJlZmVyZW5jZWQgc2luZ2xlIGVuZGVkIHNlbGVjdCBiaXQKLSNkZWZpbmUgTlJTRV9BR05EICAgICAgICAgIDAJLy8gQUdORCByZWZlcmVuY2VkIFNFIGlucHV0Ci0jZGVmaW5lIE5SU0VfQUlOUyAgICAgICAgICAxCS8vIEFJTiBTRU5TRSByZWZlcmVuY2VkIFNFIGlucHV0CisvKiAgbm9uIHJlZmVyZW5jZWQgc2luZ2xlIGVuZGVkIHNlbGVjdCBiaXQgKi8KKyNkZWZpbmUgTlJTRV9BR05EICAgICAgICAgIDAJLyogIEFHTkQgcmVmZXJlbmNlZCBTRSBpbnB1dCAqLworI2RlZmluZSBOUlNFX0FJTlMgICAgICAgICAgMQkvKiAgQUlOIFNFTlNFIHJlZmVyZW5jZWQgU0UgaW5wdXQgKi8KIAotLy8gc2luZ2xlIGVuZGVkIHZzIGRpZmZlcmVudGlhbAotI2RlZmluZSBHTkRfU0UJCTAJLy8gU2luZ2xlLUVuZGVkCi0jZGVmaW5lIEdORF9ESUZGCTEJLy8gRGlmZmVyZW50aWFsCisvKiAgc2luZ2xlIGVuZGVkIHZzIGRpZmZlcmVudGlhbCAqLworI2RlZmluZSBHTkRfU0UJCTAJLyogIFNpbmdsZS1FbmRlZCAqLworI2RlZmluZSBHTkRfRElGRgkxCS8qICBEaWZmZXJlbnRpYWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzRhYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgUlRJLTgwMC84MTUgYm9hcmQKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IHJ0aTgwMAorRGVzY3JpcHRpb246IEFuYWxvZyBEZXZpY2VzIFJUSS04MDAvODE1CitBdXRob3I6IGRzCitTdGF0dXM6IHVua25vd24KK1VwZGF0ZWQ6IEZyaSwgMDUgU2VwIDIwMDggMTQ6NTA6NDQgKzAxMDAKK0RldmljZXM6IFtBbmFsb2cgRGV2aWNlc10gUlRJLTgwMCAocnRpODAwKSwgUlRJLTgxNSAocnRpODE1KQorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEKKyAgWzJdIC0gQS9EIHJlZmVyZW5jZQorICAgICAgICAgIDAgPSBkaWZmZXJlbnRpYWwKKyAgICAgICAgICAxID0gcHNldWRvZGlmZmVyZW50aWFsIChjb21tb24pCisgICAgICAgICAgMiA9IHNpbmdsZS1lbmRlZAorICBbM10gLSBBL0QgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKyAgICAgICAgICAxID0gWy01LDVdCisgICAgICAgICAgMiA9IFswLDEwXQorICBbNF0gLSBBL0QgZW5jb2RpbmcKKyAgICAgICAgICAwID0gdHdvJ3MgY29tcGxlbWVudAorICAgICAgICAgIDEgPSBzdHJhaWdodCBiaW5hcnkKKyAgWzVdIC0gREFDIDAgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKyAgICAgICAgICAxID0gWzAsMTBdCisgIFs2XSAtIERBQyAwIGVuY29kaW5nCisgICAgICAgICAgMCA9IHR3bydzIGNvbXBsZW1lbnQKKyAgICAgICAgICAxID0gc3RyYWlnaHQgYmluYXJ5CisgIFs3XSAtIERBQyAxIHJhbmdlIChzYW1lIGFzIERBQyAwKQorICBbOF0gLSBEQUMgMSBlbmNvZGluZyAoc2FtZSBhcyBEQUMgMCkKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFJUSTgwMF9TSVpFIDE2CisKKyNkZWZpbmUgUlRJODAwX0NTUiAwCisjZGVmaW5lIFJUSTgwMF9NVVhHQUlOIDEKKyNkZWZpbmUgUlRJODAwX0NPTlZFUlQgMgorI2RlZmluZSBSVEk4MDBfQURDTE8gMworI2RlZmluZSBSVEk4MDBfQURDSEkgNAorI2RlZmluZSBSVEk4MDBfREFDMExPIDUKKyNkZWZpbmUgUlRJODAwX0RBQzBISSA2CisjZGVmaW5lIFJUSTgwMF9EQUMxTE8gNworI2RlZmluZSBSVEk4MDBfREFDMUhJIDgKKyNkZWZpbmUgUlRJODAwX0NMUkZMQUdTIDkKKyNkZWZpbmUgUlRJODAwX0RJIDEwCisjZGVmaW5lIFJUSTgwMF9ETyAxMQorI2RlZmluZSBSVEk4MDBfOTUxM0FfREFUQSAxMgorI2RlZmluZSBSVEk4MDBfOTUxM0FfQ05UUkwgMTMKKyNkZWZpbmUgUlRJODAwXzk1MTNBX1NUQVRVUyAxMworCisvKgorICogZmxhZ3MgZm9yIENTUiByZWdpc3RlcgorICovCisKKyNkZWZpbmUgUlRJODAwX0JVU1kJCTB4ODAKKyNkZWZpbmUgUlRJODAwX0RPTkUJCTB4NDAKKyNkZWZpbmUgUlRJODAwX09WRVJSVU4JCTB4MjAKKyNkZWZpbmUgUlRJODAwX1RDUgkJMHgxMAorI2RlZmluZSBSVEk4MDBfRE1BX0VOQUIJCTB4MDgKKyNkZWZpbmUgUlRJODAwX0lOVFJfVEMJCTB4MDQKKyNkZWZpbmUgUlRJODAwX0lOVFJfRUMJCTB4MDIKKyNkZWZpbmUgUlRJODAwX0lOVFJfT1ZSTgkweDAxCisKKyNkZWZpbmUgQW05NTEzXzhCSVRCVVMKKworI2RlZmluZSBBbTk1MTNfb3V0cHV0X2NvbnRyb2woYSkJb3V0YihhLGRldi0+aW9iYXNlK1JUSTgwMF85NTEzQV9DTlRSTCkKKyNkZWZpbmUgQW05NTEzX291dHB1dF9kYXRhKGEpCQlvdXRiKGEsZGV2LT5pb2Jhc2UrUlRJODAwXzk1MTNBX0RBVEEpCisjZGVmaW5lIEFtOTUxM19pbnB1dF9kYXRhKCkJCWluYihkZXYtPmlvYmFzZStSVEk4MDBfOTUxM0FfREFUQSkKKyNkZWZpbmUgQW05NTEzX2lucHV0X3N0YXR1cygpCQlpbmIoZGV2LT5pb2Jhc2UrUlRJODAwXzk1MTNBX1NUQVRVUykKKworI2luY2x1ZGUgImFtOTUxMy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcnRpODAwX2FpXzEwX2JpcG9sYXIgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAyKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcnRpODAwX2FpXzVfYmlwb2xhciA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3J0aTgwMF9haV91bmlwb2xhciA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDIpCisJfQorfTsKKworc3RydWN0IHJ0aTgwMF9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWludCBoYXNfYW87Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0aTgwMF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJydGk4MDAiLCAwfSwKKwl7InJ0aTgxNSIsIDF9LAorfTsKKworI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHJ0aTgwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgaW50IHJ0aTgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBydGk4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcnRpODAwID0geworICAgICAgZHJpdmVyX25hbWU6InJ0aTgwMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cnRpODAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpydGk4MDBfZGV0YWNoLAorICAgICAgbnVtX25hbWVzOnNpemVvZihib2FyZHR5cGVzKSAvIHNpemVvZihzdHJ1Y3QgcnRpODAwX2JvYXJkKSwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHJ0aTgwMF9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3J0aTgwMCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGk4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldiBQVF9SRUdTX0FSRyk7CisKK3N0cnVjdCBydGk4MDBfcHJpdmF0ZSB7CisJZW51bSB7CisJCWFkY19kaWZmLCBhZGNfcHNldWRvZGlmZiwgYWRjX3NpbmdsZWVuZGVkCisJfSBhZGNfbXV4OworCWVudW0geworCQlhZGNfYmlwb2xhcjEwLCBhZGNfYmlwb2xhcjUsIGFkY191bmlwb2xhcjEwCisJfSBhZGNfcmFuZ2U7CisJZW51bSB7CisJCWFkY18yY29tcCwgYWRjX3N0cmFpZ2h0CisJfSBhZGNfY29kaW5nOworCWVudW0geworCQlkYWNfYmlwb2xhcjEwLCBkYWNfdW5pcG9sYXIxMAorCX0gZGFjMF9yYW5nZSwgZGFjMV9yYW5nZTsKKwllbnVtIHsKKwkJZGFjXzJjb21wLCBkYWNfc3RyYWlnaHQKKwl9IGRhYzBfY29kaW5nLCBkYWMxX2NvZGluZzsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdHlwZV9saXN0WzJdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwlpbnQgbXV4Z2Fpbl9iaXRzOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHJ0aTgwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisjZGVmaW5lIFJUSTgwMF9USU1FT1VUIDEwMAorCitzdGF0aWMgaXJxcmV0dXJuX3QgcnRpODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYgUFRfUkVHU19BUkcpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvLyBzZXR0bGluZyBkZWxheSB0aW1lcyBpbiB1c2VjIGZvciBkaWZmZXJlbnQgZ2FpbnMKK3N0YXRpYyBjb25zdCBpbnQgZ2FpbmRlbGF5W10gPSB7IDEwLCAyMCwgNDAsIDgwIH07CisKK3N0YXRpYyBpbnQgcnRpODAwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIHQ7CisJaW50IHN0YXR1czsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgbXV4Z2Fpbl9iaXRzOworCisJaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NMUkZMQUdTKTsKKworCW11eGdhaW5fYml0cyA9IGNoYW4gfCAoZ2FpbiA8PCA1KTsKKwlpZiAobXV4Z2Fpbl9iaXRzICE9IGRldnByaXYtPm11eGdhaW5fYml0cykgeworCQlkZXZwcml2LT5tdXhnYWluX2JpdHMgPSBtdXhnYWluX2JpdHM7CisJCW91dGIoZGV2cHJpdi0+bXV4Z2Fpbl9iaXRzLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9NVVhHQUlOKTsKKwkJLyogd2l0aG91dCBhIGRlbGF5IGhlcmUsIHRoZSBSVElfT1ZFUlJVTiBiaXQKKwkJICogZ2V0cyBzZXQsIGFuZCB5b3Ugd2lsbCBoYXZlIGFuIGVycm9yLiAqLworCQlpZiAoaW5zbi0+biA+IDApIHsKKwkJCUJVR19PTihnYWluID49CisJCQkJc2l6ZW9mKGdhaW5kZWxheSkgLyBzaXplb2YoZ2FpbmRlbGF5WzBdKSk7CisJCQljb21lZGlfdWRlbGF5KGdhaW5kZWxheVtnYWluXSk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQ09OVkVSVCk7CisJCWZvciAodCA9IFJUSTgwMF9USU1FT1VUOyB0OyB0LS0pIHsKKwkJCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9DU1IpOworCQkJaWYgKHN0YXR1cyAmIFJUSTgwMF9PVkVSUlVOKSB7CisJCQkJcnRfcHJpbnRrKCJydGk4MDA6IGEvZCBvdmVycnVuXG4iKTsKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NMUkZMQUdTKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWlmIChzdGF0dXMgJiBSVEk4MDBfRE9ORSkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKHQgPT0gMCkgeworCQkJcnRfcHJpbnRrKCJydGk4MDA6IHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlkYXRhW2ldID0gaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0xPKTsKKwkJZGF0YVtpXSB8PSAoMHhmICYgaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKSkgPDwgODsKKworCQlpZiAoZGV2cHJpdi0+YWRjX2NvZGluZyA9PSBhZGNfMmNvbXApIHsKKwkJCWRhdGFbaV0gXj0gMHg4MDA7CisJCX0KKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBydGk4MDBfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAwX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IGQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZCA9IGRhdGFbaV07CisJCWlmIChkZXZwcml2LT5kYWMwX2NvZGluZyA9PSBkYWNfMmNvbXApIHsKKwkJCWQgXj0gMHg4MDA7CisJCX0KKwkJb3V0YihkICYgMHhmZiwKKwkJCWRldi0+aW9iYXNlICsgKGNoYW4gPyBSVEk4MDBfREFDMUxPIDogUlRJODAwX0RBQzBMTykpOworCQlvdXRiKGQgPj4gOCwKKwkJCWRldi0+aW9iYXNlICsgKGNoYW4gPyBSVEk4MDBfREFDMUhJIDogUlRJODAwX0RBQzBISSkpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBydGk4MDBfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0RJKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBydGk4MDBfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJLyogT3V0cHV0cyBhcmUgaW52ZXJ0ZWQuLi4gKi8KKwkJb3V0YihzLT5zdGF0ZSBeIDB4ZmYsIGRldi0+aW9iYXNlICsgUlRJODAwX0RPKTsKKwl9CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKyAgIG9wdGlvbnNbMF0gLSBJL08gcG9ydAorICAgb3B0aW9uc1sxXSAtIGlycQorICAgb3B0aW9uc1syXSAtIGEvZCBtdXgKKyAgIAkwPWRpZmZlcmVudGlhbCwgMT1wc2V1ZG9kaWZmLCAyPXNpbmdsZQorICAgb3B0aW9uc1szXSAtIGEvZCByYW5nZQorICAgCTA9Ymlwb2xhcjEwLCAxPWJpcG9sYXI1LCAyPXVuaXBvbGFyMTAKKyAgIG9wdGlvbnNbNF0gLSBhL2QgY29kaW5nCisgICAJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKKyAgIG9wdGlvbnNbNV0gLSBkYWMwIHJhbmdlCisgICAJMD1iaXBvbGFyMTAsIDE9dW5pcG9sYXIxMAorICAgb3B0aW9uc1s2XSAtIGRhYzAgY29kaW5nCisgICAJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKKyAgIG9wdGlvbnNbN10gLSBkYWMxIHJhbmdlCisgICBvcHRpb25zWzhdIC0gZGFjMSBjb2RpbmcKKyAqLworCitzdGF0aWMgaW50IHJ0aTgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcnRpODAwOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFJUSTgwMF9TSVpFLCAicnRpODAwIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJmaW5nZXJwcmludD0leCwleCwleCwleCwleCAiLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyAwKSwKKwkJaW5iKGRldi0+aW9iYXNlICsgMSksCisJCWluYihkZXYtPmlvYmFzZSArIDIpLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyAzKSwgaW5iKGRldi0+aW9iYXNlICsgNCkpOworI2VuZGlmCisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NTUik7CisJaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NMUkZMQUdTKTsKKworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoIGlycSA9ICV1ICkiLCBpcnEpOworCQlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIHJ0aTgwMF9pbnRlcnJ1cHQsIDAsCisJCQkJCSJydGk4MDAiLCBkZXYpKSA8IDApIHsKKwkJCXByaW50aygiIEZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9IGVsc2UgeworCQlwcmludGsoIiggbm8gaXJxICkiKTsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHJ0aTgwMF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldnByaXYtPmFkY19tdXggPSBpdC0+b3B0aW9uc1syXTsKKwlkZXZwcml2LT5hZGNfcmFuZ2UgPSBpdC0+b3B0aW9uc1szXTsKKwlkZXZwcml2LT5hZGNfY29kaW5nID0gaXQtPm9wdGlvbnNbNF07CisJZGV2cHJpdi0+ZGFjMF9yYW5nZSA9IGl0LT5vcHRpb25zWzVdOworCWRldnByaXYtPmRhYzBfY29kaW5nID0gaXQtPm9wdGlvbnNbNl07CisJZGV2cHJpdi0+ZGFjMV9yYW5nZSA9IGl0LT5vcHRpb25zWzddOworCWRldnByaXYtPmRhYzFfY29kaW5nID0gaXQtPm9wdGlvbnNbOF07CisJZGV2cHJpdi0+bXV4Z2Fpbl9iaXRzID0gLTE7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAoZGV2cHJpdi0+YWRjX211eCA/IDE2IDogOCk7CisJcy0+aW5zbl9yZWFkID0gcnRpODAwX2FpX2luc25fcmVhZDsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJc3dpdGNoIChkZXZwcml2LT5hZGNfcmFuZ2UpIHsKKwljYXNlIGFkY19iaXBvbGFyMTA6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3J0aTgwMF9haV8xMF9iaXBvbGFyOworCQlicmVhazsKKwljYXNlIGFkY19iaXBvbGFyNToKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcnRpODAwX2FpXzVfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfdW5pcG9sYXIxMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcnRpODAwX2FpX3VuaXBvbGFyOworCQlicmVhazsKKwl9CisKKwlzKys7CisJaWYgKHRoaXNfYm9hcmQtPmhhc19hbykgeworCQkvKiBhbyBzdWJkZXZpY2UgKG9ubHkgb24gcnRpODE1KSAqLworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+aW5zbl9yZWFkID0gcnRpODAwX2FvX2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IHJ0aTgwMF9hb19pbnNuX3dyaXRlOworCQlzLT5tYXhkYXRhID0gMHhmZmY7CisJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3Q7CisJCXN3aXRjaCAoZGV2cHJpdi0+ZGFjMF9yYW5nZSkgeworCQljYXNlIGRhY19iaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMF0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJYnJlYWs7CisJCWNhc2UgZGFjX3VuaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMF0gPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoZGV2cHJpdi0+ZGFjMV9yYW5nZSkgeworCQljYXNlIGRhY19iaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMV0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJYnJlYWs7CisJCWNhc2UgZGFjX3VuaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMV0gPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzKys7CisJLyogZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcnRpODAwX2RpX2luc25fYml0czsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcysrOworCS8qIGRvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHJ0aTgwMF9kb19pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworLyogZG9uJ3QgeWV0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBjb3VudGVyL3RpbWVycyAqLworI2lmIDAKKwlzKys7CisJLyogZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVElNRVI7CisjZW5kaWYKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0aTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcnRpODAwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUlRJODAwX1NJWkUpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJjMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgUlRJLTgwMiBib2FyZAorCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogcnRpODAyCitEZXNjcmlwdGlvbjogQW5hbG9nIERldmljZXMgUlRJLTgwMgorQXV0aG9yOiBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KK0RldmljZXM6IFtBbmFsb2cgRGV2aWNlc10gUlRJLTgwMiAocnRpODAyKQorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgICAgWzBdIC0gaS9vIGJhc2UKKyAgICBbMV0gLSB1bnVzZWQKKyAgICBbMl0gLSBkYWMjMCAgMD10d28ncyBjb21wLCAxPXN0cmFpZ2h0CisgICAgWzNdIC0gZGFjIzAgIDA9Ymlwb2xhciwgMT11bmlwb2xhcgorICAgIFs0XSAtIGRhYyMxIC4uLgorICAgIC4uLgorICAgIFsxN10gLSBkYWMjNyAuLi4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFJUSTgwMl9TSVpFIDQKKworI2RlZmluZSBSVEk4MDJfU0VMRUNUIDAKKyNkZWZpbmUgUlRJODAyX0RBVEFMT1cgMQorI2RlZmluZSBSVEk4MDJfREFUQUhJR0ggMgorCitzdGF0aWMgaW50IHJ0aTgwMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBydGk4MDJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcnRpODAyID0geworICAgICAgZHJpdmVyX25hbWU6InJ0aTgwMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cnRpODAyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpydGk4MDJfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9ydGk4MDIpOworCitzdHJ1Y3QgcnRpODAyX3ByaXZhdGUgeworCWVudW0geworCQlkYWNfMmNvbXAsIGRhY19zdHJhaWdodAorCX0gZGFjX2NvZGluZ1s4XTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdHlwZV9saXN0WzhdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1s4XTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBydGk4MDJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBydGk4MDJfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBydGk4MDJfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIGQ7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZCA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwkJaWYgKGRldnByaXYtPmRhY19jb2RpbmdbY2hhbl0gPT0gZGFjXzJjb21wKQorCQkJZCBePSAweDgwMDsKKwkJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIFJUSTgwMl9TRUxFQ1QpOworCQlvdXRiKGQgJiAweGZmLCBkZXYtPmlvYmFzZSArIFJUSTgwMl9EQVRBTE9XKTsKKwkJb3V0YihkID4+IDgsIGRldi0+aW9iYXNlICsgUlRJODAyX0RBVEFISUdIKTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMjogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBSVEk4MDJfU0laRSwgInJ0aTgwMiIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicnRpODAyIjsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwCisJCXx8IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHJ0aTgwMl9wcml2YXRlKSkpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fcmVhZCA9IHJ0aTgwMl9hb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IHJ0aTgwMl9hb19pbnNuX3dyaXRlOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5yYW5nZV90eXBlX2xpc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWRldnByaXYtPmRhY19jb2RpbmdbaV0gPSAoaXQtPm9wdGlvbnNbMyArIDIgKiBpXSkKKwkJCT8gKGRhY19zdHJhaWdodCkKKwkJCTogKGRhY18yY29tcCk7CisJCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFtpXSA9IChpdC0+b3B0aW9uc1syICsgMiAqIGldKQorCQkJPyAmcmFuZ2VfdW5pcG9sYXIxMCA6ICZyYW5nZV9iaXBvbGFyMTA7CisJfQorCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBydGk4MDI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBSVEk4MDJfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjZmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCkBAIC0wLDAgKzEsOTc3IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3M1MjYuYworICAgIFNlbnNvcmF5IHM1MjYgQ29tZWRpIGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogczUyNgorRGVzY3JpcHRpb246IFNlbnNvcmF5IDUyNiBkcml2ZXIKK0RldmljZXM6IFtTZW5zb3JheV0gNTI2IChzNTI2KQorQXV0aG9yOiBSaWNoaWUKKwlFdmVyZXR0IFdhbmcgPGV2ZXJldHQud2FuZ0BldmVydGVxLmNvbT4KK1VwZGF0ZWQ6IFRodSwgMTQgU2VwLiAyMDA2CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitFbmNvZGVyIHdvcmtzCitBbmFsb2cgaW5wdXQgd29ya3MKK0FuYWxvZyBvdXRwdXQgd29ya3MKK1BXTSBvdXRwdXQgd29ya3MKK0NvbW1hbmRzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorCitjb21lZGlfY29uZmlnIC9kZXYvY29tZWRpMCBzNTI2IDB4MkMwLDB4MworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgUzUyNl9TSVpFIDY0CisKKyNkZWZpbmUgUzUyNl9TVEFSVF9BSV9DT05WCTAKKyNkZWZpbmUgUzUyNl9BSV9SRUFECQkwCisKKy8qIFBvcnRzICovCisjZGVmaW5lIFM1MjZfSU9TSVpFIDB4NDAKKyNkZWZpbmUgUzUyNl9OVU1fUE9SVFMgMjcKKworLyogcmVnaXN0ZXJzICovCisjZGVmaW5lIFJFR19UQ1IgMHgwMAorI2RlZmluZSBSRUdfV0RDIDB4MDIKKyNkZWZpbmUgUkVHX0RBQyAweDA0CisjZGVmaW5lIFJFR19BREMgMHgwNgorI2RlZmluZSBSRUdfQUREIDB4MDgKKyNkZWZpbmUgUkVHX0RJTyAweDBBCisjZGVmaW5lIFJFR19JRVIgMHgwQworI2RlZmluZSBSRUdfSVNSIDB4MEUKKyNkZWZpbmUgUkVHX01TQyAweDEwCisjZGVmaW5lIFJFR19DMEwgMHgxMgorI2RlZmluZSBSRUdfQzBIIDB4MTQKKyNkZWZpbmUgUkVHX0MwTSAweDE2CisjZGVmaW5lIFJFR19DMEMgMHgxOAorI2RlZmluZSBSRUdfQzFMIDB4MUEKKyNkZWZpbmUgUkVHX0MxSCAweDFDCisjZGVmaW5lIFJFR19DMU0gMHgxRQorI2RlZmluZSBSRUdfQzFDIDB4MjAKKyNkZWZpbmUgUkVHX0MyTCAweDIyCisjZGVmaW5lIFJFR19DMkggMHgyNAorI2RlZmluZSBSRUdfQzJNIDB4MjYKKyNkZWZpbmUgUkVHX0MyQyAweDI4CisjZGVmaW5lIFJFR19DM0wgMHgyQQorI2RlZmluZSBSRUdfQzNIIDB4MkMKKyNkZWZpbmUgUkVHX0MzTSAweDJFCisjZGVmaW5lIFJFR19DM0MgMHgzMAorI2RlZmluZSBSRUdfRUVEIDB4MzIKKyNkZWZpbmUgUkVHX0VFQyAweDM0CisKK3N0YXRpYyBjb25zdCBpbnQgczUyNl9wb3J0c1tdID0geworCVJFR19UQ1IsCisJUkVHX1dEQywKKwlSRUdfREFDLAorCVJFR19BREMsCisJUkVHX0FERCwKKwlSRUdfRElPLAorCVJFR19JRVIsCisJUkVHX0lTUiwKKwlSRUdfTVNDLAorCVJFR19DMEwsCisJUkVHX0MwSCwKKwlSRUdfQzBNLAorCVJFR19DMEMsCisJUkVHX0MxTCwKKwlSRUdfQzFILAorCVJFR19DMU0sCisJUkVHX0MxQywKKwlSRUdfQzJMLAorCVJFR19DMkgsCisJUkVHX0MyTSwKKwlSRUdfQzJDLAorCVJFR19DM0wsCisJUkVHX0MzSCwKKwlSRUdfQzNNLAorCVJFR19DM0MsCisJUkVHX0VFRCwKKwlSRUdfRUVDCit9OworCitzdHJ1Y3QgY291bnRlcl9tb2RlX3JlZ2lzdGVyX3QgeworCXVuc2lnbmVkIHNob3J0IGNvdXRTb3VyY2U6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3V0UG9sYXJpdHk6MTsKKwl1bnNpZ25lZCBzaG9ydCBhdXRvTG9hZFJlc2V0UmNhcDozOworCXVuc2lnbmVkIHNob3J0IGh3Q3RFbmFibGVTb3VyY2U6MjsKKwl1bnNpZ25lZCBzaG9ydCBjdEVuYWJsZUN0cmw6MjsKKwl1bnNpZ25lZCBzaG9ydCBjbG9ja1NvdXJjZToyOworCXVuc2lnbmVkIHNob3J0IGNvdW50RGlyOjE7CisJdW5zaWduZWQgc2hvcnQgY291bnREaXJDdHJsOjE7CisJdW5zaWduZWQgc2hvcnQgb3V0cHV0UmVnTGF0Y2hDdHJsOjE7CisJdW5zaWduZWQgc2hvcnQgcHJlbG9hZFJlZ1NlbDoxOworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkOjE7Cit9OworCit1bmlvbiB7CisJc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHJlZzsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKK30gY21SZWc7CisKKyNkZWZpbmUgTUFYX0dQQ1RfQ09ORklHX0RBVEEgNgorCisvKiBEaWZmZXJlbnQgQXBwbGljYXRpb24gQ2xhc3NlcyBmb3IgR1BDVCBTdWJkZXZpY2VzICovCisvKiBUaGUgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgbmVlZHMgZGlzY3Vzc2lvbiEgKi8KK2VudW0gUzUyNl9HUENUX0FQUF9DTEFTUyB7CisJQ291bnRpbmdBbmRUaW1lTWVhc3VyZW1lbnQsCisJU2luZ2xlUHVsc2VHZW5lcmF0aW9uLAorCVB1bHNlVHJhaW5HZW5lcmF0aW9uLAorCVBvc2l0aW9uTWVhc3VyZW1lbnQsCisJTWlzY2VsbGFuZW91cworfTsKKworLyogQ29uZmlnIHN0cnVjdCBmb3IgZGlmZmVyZW50IEdQQ1Qgc3ViZGV2aWNlIEFwcGxpY2F0aW9uIENsYXNzZXMgYW5kCisgICB0aGVpciBvcHRpb25zCisqLworc3RydWN0IHM1MjZHUENUQ29uZmlnIHsKKwllbnVtIFM1MjZfR1BDVF9BUFBfQ0xBU1MgYXBwOworCWludCBkYXRhW01BWF9HUENUX0NPTkZJR19EQVRBXTsKK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgczUyNl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZ3BjdF9jaGFuczsKKwlpbnQgZ3BjdF9iaXRzOworCWludCBhZF9jaGFuczsKKwlpbnQgYWRfYml0czsKKwlpbnQgZGFfY2hhbnM7CisJaW50IGRhX2JpdHM7CisJaW50IGhhdmVfZGlvOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzNTI2X2JvYXJkIHM1MjZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJzNTI2IiwKKwkgICAgICBncGN0X2NoYW5zOjQsCisJICAgICAgZ3BjdF9iaXRzOjI0LAorCSAgICAgIGFkX2NoYW5zOjgsCisJICAgICAgYWRfYml0czoJMTYsCisJICAgICAgZGFfY2hhbnM6NCwKKwkgICAgICBkYV9iaXRzOgkxNiwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9Cit9OworCisjZGVmaW5lIEFERFJfUkVHKHJlZykgKGRldi0+aW9iYXNlICsgKHJlZykpCisjZGVmaW5lIEFERFJfQ0hBTl9SRUcocmVnLCBjaGFuKSAoZGV2LT5pb2Jhc2UgKyAocmVnKSArIChjaGFuKSAqIDgpCisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHM1MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHM1MjZfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsKKworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKworCXN0cnVjdCBzNTI2R1BDVENvbmZpZyBzNTI2X2dwY3RfY29uZmlnWzRdOworCXVuc2lnbmVkIHNob3J0IHM1MjZfYWlfY29uZmlnOworfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBzNTI2X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHM1MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgczUyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9zNTI2ID0geworICAgICAgZHJpdmVyX25hbWU6InM1MjYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnM1MjZfYXR0YWNoLAorICAgICAgZGV0YWNoOnM1MjZfZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBzNTI2X2JvYXJkc1tdIGFib3ZlLiAgTm90ZSB0aGF0IHRoZSBlbGVtZW50ICduYW1lJworCSAqIHdhcyBmaXJzdCBpbiB0aGUgc3RydWN0dXJlIC0tIENvbWVkaSB1c2VzIHRoaXMgZmFjdCB0bworCSAqIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlIGJvYXJkIHdpdGhvdXQga25vd2luZyBhbnkgZGV0YWlscworCSAqIGFib3V0IHRoZSBzdHJ1Y3R1cmUgZXhjZXB0IGZvciBpdHMgbGVuZ3RoLgorCSAqIFdoZW4gYSBkZXZpY2UgaXMgYXR0YWNoZWQgKGJ5IGNvbWVkaV9jb25maWcpLCB0aGUgbmFtZQorCSAqIG9mIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdG8gQ29tZWRpLCBhbmQgQ29tZWRpIHRyaWVzIHRvCisJICogbWF0Y2ggaXQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBib2FyZCBuYW1lcy4gIElmCisJICogdGhlcmUgaXMgYSBtYXRjaCwgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgaXMgcHV0CisJICogaW50byBkZXYtPmJvYXJkX3B0ciBhbmQgZHJpdmVyLT5hdHRhY2goKSBpcyBjYWxsZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlc2UgYXJlIG5vdCBuZWNlc3NhcnkgaWYgeW91IGNhbiBkZXRlcm1pbmUKKwkgKiB0aGUgdHlwZSBvZiBib2FyZCBpbiBzb2Z0d2FyZS4gIElTQSBQblAsIFBDSSwgYW5kIFBDTUNJQQorCSAqIGRldmljZXMgYXJlIHN1Y2ggYm9hcmRzLgorCSAqLworICAgICAgYm9hcmRfbmFtZTomczUyNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHM1MjZfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihzNTI2X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHM1MjZfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBzNTI2X2dwY3Rfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9ncGN0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfZ3BjdF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgczUyNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGlvYmFzZTsKKwlpbnQgaSwgbjsKKy8vICAgICAgc2hvcnQgdmFsdWU7CisvLyAgICAgIGludCBzdWJkZXZfY2hhbm5lbCA9IDA7CisKKwlwcmludGsoImNvbWVkaSVkOiBzNTI2OiAiLCBkZXYtPm1pbm9yKTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmICghaW9iYXNlIHx8ICFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFM1MjZfSU9TSVpFLCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlwcmludGsoImlvYmFzZT0weCVseFxuIiwgZGV2LT5pb2Jhc2UpOworCisJLyoqKiBtYWtlIGl0IGEgbGl0dGxlIHF1aWV0ZXIsIGV4dywgOC8yOS8wNgorCWZvciAoaSA9IDA7IGkgPCBTNTI2X05VTV9QT1JUUzsgaSsrKSB7CisJCXByaW50aygiMHglMDJ4OiAweCUwNHhcbiIsIEFERFJfUkVHKHM1MjZfcG9ydHNbaV0pLCBpbncoQUREUl9SRUcoczUyNl9wb3J0c1tpXSkpKTsKKwl9CisJKioqLworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9wdHIgPSAmczUyNl9ib2FyZHNbMF07CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgczUyNl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWRldi0+bl9zdWJkZXZpY2VzID0gNDsKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGRldi0+bl9zdWJkZXZpY2VzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogR0VORVJBTC1QVVJQT1NFIENPVU5URVIvVElNRSAoR1BDVCkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfTFNBTVBMOworCS8qIEtHOiBXaGF0IGRvZXMgU0RGX0xTQU1QTCAoc2VlIG11bHRpcTMuYykgbWVhbj8gKi8KKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmdwY3RfY2hhbnM7CisJcy0+bWF4ZGF0YSA9IDB4MDBmZmZmZmY7CS8qIDI0IGJpdCBjb3VudGVyICovCisJcy0+aW5zbl9yZWFkID0gczUyNl9ncGN0X3JpbnNuOworCXMtPmluc25fY29uZmlnID0gczUyNl9ncGN0X2luc25fY29uZmlnOworCXMtPmluc25fd3JpdGUgPSBzNTI2X2dwY3Rfd2luc247CisKKwkvKiBDb21tYW5kIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LCBob3dldmVyIHRoZXkgYXJlIG5lY2Vzc2FyeSB0bworCSAgIGFsbG9jYXRlIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGZvciB0aGUgY29tZWRpX2FzeW5jIHN0cnVjdCAodXNlZAorCSAgIHRvIHRyaWdnZXIgdGhlIEdQQ1QgaW4gY2FzZSBvZiBwdWxzZWdlbmVyYXRvciBmdW5jdGlvbiAqLworCS8vcy0+ZG9fY21kID0gczUyNl9ncGN0X2NtZDsKKwkvL3MtPmRvX2NtZHRlc3QgPSBzNTI2X2dwY3RfY21kdGVzdDsKKwkvL3MtPmNhbmNlbCA9IHM1MjZfZ3BjdF9jYW5jZWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvL2Rldi0+cmVhZF9zdWJkZXY9czsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCS8qIHdlIHN1cHBvcnQgZGlmZmVyZW50aWFsICovCisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkY7CisJLyogY2hhbm5lbHMgMCB0byA3IGFyZSB0aGUgcmVndWxhciBkaWZmZXJlbnRpYWwgaW5wdXRzICovCisJLyogY2hhbm5lbCA4IGlzICJyZWZlcmVuY2UgMCIgKCsxMFYpLCBjaGFubmVsIDkgaXMgInJlZmVyZW5jZSAxIiAoMFYpICovCisJcy0+bl9jaGFuID0gMTA7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CS8qIFRoaXMgaXMgdGhlIG1heGltdW0gY2hhbmxpc3QgbGVuZ3RoIHRoYXQKKwkJCQkgICB0aGUgYm9hcmQgY2FuIGhhbmRsZSAqLworCXMtPmluc25fcmVhZCA9IHM1MjZfYWlfcmluc247CisJcy0+aW5zbl9jb25maWcgPSBzNTI2X2FpX2luc25fY29uZmlnOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+aW5zbl93cml0ZSA9IHM1MjZfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gczUyNl9hb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHM1MjZfZGlvX2luc25fYml0czsKKwkJcy0+aW5zbl9jb25maWcgPSBzNTI2X2Rpb19pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7CisKKyNpZiAwCisJLy8gRXhhbXBsZSBvZiBDb3VudGVyIEFwcGxpY2F0aW9uCisJLy9PbmUtc2hvdCAoc29mdHdhcmUgdHJpZ2dlcikKKwljbVJlZy5yZWcuY291dFNvdXJjZSA9IDA7CS8vIG91dCBSQ0FQCisJY21SZWcucmVnLmNvdXRQb2xhcml0eSA9IDE7CS8vIFBvbGFyaXR5IGludmVydGVkCisJY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID0gMTsJLy8gQXV0byBsb2FkIDA6ZGlzYWJsZWQsIDE6ZW5hYmxlZAorCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMzsJLy8gTk9UIFJDQVAKKwljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMjsJLy8gSGFyZHdhcmUKKwljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAyOwkvLyBJbnRlcm5hbAorCWNtUmVnLnJlZy5jb3VudERpciA9IDE7CS8vIERvd24KKwljbVJlZy5yZWcuY291bnREaXJDdHJsID0gMTsJLy8gU29mdHdhcmUKKwljbVJlZy5yZWcub3V0cHV0UmVnTGF0Y2hDdHJsID0gMDsJLy8gbGF0Y2ggb24gcmVhZAorCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJY21SZWcucmVnLnJlc2VydmVkID0gMDsKKworCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCW91dHcoMHgwMDAxLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CisJb3V0dygweDNDNjgsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCW91dHcoMHg4MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJb3V0dygweDQwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gTG9hZCB0aGUgY291bnRlciBmcm9tIFBSMAorCisJb3V0dygweDAwMDgsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gUmVzZXQgUkNBUCAoZmlyZXMgb25lLXNob3QpCisKKyNlbHNlCisKKwkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvLyBvdXQgUkNBUAorCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkgPSAwOwkvLyBQb2xhcml0eSBpbnZlcnRlZAorCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9IDA7CS8vIEF1dG8gbG9hZCBkaXNhYmxlZAorCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMjsJLy8gTk9UIFJDQVAKKwljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMTsJLy8gMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlCisJY21SZWcucmVnLmNsb2NrU291cmNlID0gMzsJLy8geDQKKwljbVJlZy5yZWcuY291bnREaXIgPSAwOwkvLyB1cAorCWNtUmVnLnJlZy5jb3VudERpckN0cmwgPSAwOwkvLyBxdWFkcmF0dXJlCisJY21SZWcucmVnLm91dHB1dFJlZ0xhdGNoQ3RybCA9IDA7CS8vIGxhdGNoIG9uIHJlYWQKKwljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8vIFBSMAorCWNtUmVnLnJlZy5yZXNlcnZlZCA9IDA7CisKKwluID0gMDsKKwlwcmludGsoIk1vZGUgcmVnPTB4JTA0eCwgMHglMDRseFxuIiwgY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwKKwkJCW4pKTsKKwlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIG4pKTsKKwl1ZGVsYXkoMTAwMCk7CisJcHJpbnRrKCJSZWFkIGJhY2sgbW9kZSByZWc9MHglMDR4XG4iLCBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSkpOworCisJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgaGlnaCB3b3JkCisvLyAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChzaG9ydCkgKDB4NTUpOworLy8gICAgICAgICAgICAgICAgICAgICAgb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBuKSk7CisKKwkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZAorLy8gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoc2hvcnQpKDB4YWE1NSk7CisvLyAgICAgICAgICAgICAgICAgICAgICBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIG4pKTsKKworCS8vIFdyaXRlIHRoZSBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgIG91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgMCkpOworCisJLy8gUmVzZXQgdGhlIGNvdW50ZXIgaWYgaXQgaXMgc29mdHdhcmUgcHJlbG9hZAorCWlmIChjbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPT0gMCkgeworCQlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBuKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJCW91dHcoMHg0MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIG4pKTsJLy8gTG9hZCB0aGUgY291bnRlciBmcm9tIFBSMAorCX0KKworCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgbikpOworCXVkZWxheSgxMDAwKTsKKwlwcmludGsoIlJlYWQgYmFjayBtb2RlIHJlZz0weCUwNHhcbiIsIGludyhBRERSX0NIQU5fUkVHKFJFR19DME0sIG4pKSk7CisKKyNlbmRpZgorCXByaW50aygiQ3VycmVudCByZWdpc3RyZXM6XG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBTNTI2X05VTV9QT1JUUzsgaSsrKSB7CisJCXByaW50aygiMHglMDJseDogMHglMDR4XG4iLCBBRERSX1JFRyhzNTI2X3BvcnRzW2ldKSwKKwkJCWludyhBRERSX1JFRyhzNTI2X3BvcnRzW2ldKSkpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBzNTI2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBzNTI2OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlID4gMCkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFM1MjZfSU9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1MjZfZ3BjdF9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CQkJLy8gY291bnRzIHRoZSBEYXRhCisJaW50IGNvdW50ZXJfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIHNob3J0IGRhdGFsb3c7CisJdW5zaWduZWQgc2hvcnQgZGF0YWhpZ2g7CisKKwkvLyBDaGVjayBpZiAobiA+IDApCisJaWYgKGluc24tPm4gPD0gMCkgeworCQlwcmludGsoInM1MjY6IElOU05fUkVBRDogbiBzaG91bGQgYmUgPiAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vIFJlYWQgdGhlIGxvdyB3b3JkIGZpcnN0CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhbG93ID0gaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgY291bnRlcl9jaGFubmVsKSk7CisJCWRhdGFoaWdoID0gaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgY291bnRlcl9jaGFubmVsKSk7CisJCWRhdGFbaV0gPSAoaW50KShkYXRhaGlnaCAmIDB4MDBGRik7CisJCWRhdGFbaV0gPSAoZGF0YVtpXSA8PCAxNikgfCAoZGF0YWxvdyAmIDB4RkZGRik7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2IEdQQ1RbJWRdOiAleCgweCUwNHgsIDB4JTA0eClcbiIsIGNvdW50ZXJfY2hhbm5lbCwgZGF0YVtpXSwgZGF0YWhpZ2gsIGRhdGFsb3cpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBzNTI2X2dwY3RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBVbnBhY2sgY2hhbnNwZWMKKwlpbnQgaTsKKwlzaG9ydCB2YWx1ZTsKKworLy8gICAgICAgIHByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgQ2hhbm5lbCAlZFxuIiwgc3ViZGV2X2NoYW5uZWwpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9HUENUX0NPTkZJR19EQVRBOyBpKyspIHsKKwkJZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uZGF0YVtpXSA9CisJCQlpbnNuLT5kYXRhW2ldOworLy8gICAgICAgICAgICAgIHByaW50aygiZGF0YVslZF09JXhcbiIsIGksIGluc24tPmRhdGFbaV0pOworCX0KKworCS8vIENoZWNrIHdoYXQgdHlwZSBvZiBDb3VudGVyIHRoZSB1c2VyIHJlcXVlc3RlZCwgZGF0YVswXSBjb250YWlucworCS8vIHRoZSBBcHBsaWNhdGlvbiB0eXBlCisJc3dpdGNoIChpbnNuLT5kYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19HUENUX1FVQURSQVRVUkVfRU5DT0RFUjoKKwkJLyoKKwkJICAgZGF0YVswXTogQXBwbGljYXRpb24gVHlwZQorCQkgICBkYXRhWzFdOiBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgVmFsdWUKKwkJICAgZGF0YVsyXTogUHJlLWxvYWQgUmVnaXN0ZXIgVmFsdWUKKwkJICAgZGF0YVszXTogQ29udGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJICovCisJCXByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgRW5jb2RlclxuIik7CisJCWRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmFwcCA9CisJCQlQb3NpdGlvbk1lYXN1cmVtZW50OworCisvKgorCQkJLy8gRXhhbXBsZSBvZiBDb3VudGVyIEFwcGxpY2F0aW9uCisJCQkvL09uZS1zaG90IChzb2Z0d2FyZSB0cmlnZ2VyKQorCQkJY21SZWcucmVnLmNvdXRTb3VyY2UJCT0gMDsgLy8gb3V0IFJDQVAKKwkJCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkJCT0gMTsgLy8gUG9sYXJpdHkgaW52ZXJ0ZWQKKwkJCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcAk9IDA7IC8vIEF1dG8gbG9hZCBkaXNhYmxlZAorCQkJY21SZWcucmVnLmh3Q3RFbmFibGVTb3VyY2UJPSAzOyAvLyBOT1QgUkNBUAorCQkJY21SZWcucmVnLmN0RW5hYmxlQ3RybAkJPSAyOyAvLyBIYXJkd2FyZQorCQkJY21SZWcucmVnLmNsb2NrU291cmNlCQk9IDI7IC8vIEludGVybmFsCisJCQljbVJlZy5yZWcuY291bnREaXIJCT0gMTsgLy8gRG93bgorCQkJY21SZWcucmVnLmNvdW50RGlyQ3RybAkJPSAxOyAvLyBTb2Z0d2FyZQorCQkJY21SZWcucmVnLm91dHB1dFJlZ0xhdGNoQ3RybAk9IDA7IC8vIGxhdGNoIG9uIHJlYWQKKwkJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsCQk9IDA7IC8vIFBSMAorCQkJY21SZWcucmVnLnJlc2VydmVkCQk9IDA7CisKKwkJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkJb3V0dygweDAwMDEsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJCW91dHcoMHgzQzY4LCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJCW91dHcoMHg4MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJCQlvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBMb2FkIHRoZSBjb3VudGVyIGZyb20gUFIwCisKKwkJCW91dHcoMHgwMDA4LCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7ICAvLyBSZXNldCBSQ0FQIChmaXJlcyBvbmUtc2hvdCkKKworKi8KKworI2lmIDEKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCQljbVJlZy5yZWcuY291dFNvdXJjZSA9IDA7CS8vIG91dCBSQ0FQCisJCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkgPSAwOwkvLyBQb2xhcml0eSBpbnZlcnRlZAorCQljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPSAwOwkvLyBBdXRvIGxvYWQgZGlzYWJsZWQKKwkJY21SZWcucmVnLmh3Q3RFbmFibGVTb3VyY2UgPSAyOwkvLyBOT1QgUkNBUAorCQljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMTsJLy8gMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlCisJCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDM7CS8vIHg0CisJCWNtUmVnLnJlZy5jb3VudERpciA9IDA7CS8vIHVwCisJCWNtUmVnLnJlZy5jb3VudERpckN0cmwgPSAwOwkvLyBxdWFkcmF0dXJlCisJCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwgPSAwOwkvLyBsYXRjaCBvbiByZWFkCisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJCWNtUmVnLnJlZy5yZXNlcnZlZCA9IDA7CisKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2OiBDb3VudGVyIE1vZGUgcmVnaXN0ZXI9JXhcbiIsIGNtUmVnLnZhbHVlKTsKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIFJlc2V0IHRoZSBjb3VudGVyIGlmIGl0IGlzIHNvZnR3YXJlIHByZWxvYWQKKwkJaWYgKGNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9PSAwKSB7CisJCQlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBSZXNldCB0aGUgY291bnRlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOyAgIC8vIExvYWQgdGhlIGNvdW50ZXIgZnJvbSBQUjAKKwkJfQorI2Vsc2UKKwkJY21SZWcucmVnLmNvdW50RGlyQ3RybCA9IDA7CS8vIDAgcXVhZHJhdHVyZSwgMSBzb2Z0d2FyZSBjb250cm9sCisKKwkJLy8gZGF0YVsxXSBjb250YWlucyBHUENUX1gxLCBHUENUX1gyIG9yIEdQQ1RfWDQKKwkJaWYgKGluc24tPmRhdGFbMV0gPT0gR1BDVF9YMikgeworCQkJY21SZWcucmVnLmNsb2NrU291cmNlID0gMTsKKwkJfSBlbHNlIGlmIChpbnNuLT5kYXRhWzFdID09IEdQQ1RfWDQpIHsKKwkJCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDI7CisJCX0gZWxzZSB7CisJCQljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAwOworCQl9CisKKwkJLy8gV2hlbiB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgaW5kZXhwdWxzZToKKwkJaWYgKGluc24tPmRhdGFbMl0gPT0gR1BDVF9JbmRleFBoYXNlTG93TG93KSB7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsyXSA9PSBHUENUX0luZGV4UGhhc2VMb3dIaWdoKSB7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsyXSA9PSBHUENUX0luZGV4UGhhc2VIaWdoTG93KSB7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsyXSA9PSBHUENUX0luZGV4UGhhc2VIaWdoSGlnaCkgeworCQl9CisJCS8vIFRha2UgaW50byBhY2NvdW50IHRoZSBpbmRleCBwdWxzZT8KKwkJaWYgKGluc24tPmRhdGFbM10gPT0gR1BDVF9SRVNFVF9DT1VOVEVSX09OX0lOREVYKQorCQkJY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID0gNDsJLy8gQXV0byBsb2FkIHdpdGggSU5ERVheCisKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCQljbVJlZy52YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbMV0gJiAweEZGRkYpOworCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgaGlnaCB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyCisJCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CisJCX0KKwkJLy8gUmVzZXQgdGhlIGNvdW50ZXIgaWYgaXQgaXMgc29mdHdhcmUgcHJlbG9hZAorCQlpZiAoY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID09IDApIHsKKwkJCW91dHcoMHg4MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJCQlvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBMb2FkIHRoZSBjb3VudGVyIGZyb20gUFIwCisJCX0KKyNlbmRpZgorCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfR1BDVF9TSU5HTEVfUFVMU0VfR0VORVJBVE9SOgorCQkvKgorCQkgICBkYXRhWzBdOiBBcHBsaWNhdGlvbiBUeXBlCisJCSAgIGRhdGFbMV06IENvdW50ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZQorCQkgICBkYXRhWzJdOiBQcmUtbG9hZCBSZWdpc3RlciAwIFZhbHVlCisJCSAgIGRhdGFbM106IFByZS1sb2FkIFJlZ2lzdGVyIDEgVmFsdWUKKwkJICAgZGF0YVs0XTogQ29udGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJICovCisJCXByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgU1BHXG4iKTsKKwkJZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwID0KKwkJCVNpbmdsZVB1bHNlR2VuZXJhdGlvbjsKKworCQkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJCWNtUmVnLnZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJCWNtUmVnLnZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMTsJLy8gUFIxCisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyCisJCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOU05fQ09ORklHX0dQQ1RfUFVMU0VfVFJBSU5fR0VORVJBVE9SOgorCQkvKgorCQkgICBkYXRhWzBdOiBBcHBsaWNhdGlvbiBUeXBlCisJCSAgIGRhdGFbMV06IENvdW50ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZQorCQkgICBkYXRhWzJdOiBQcmUtbG9hZCBSZWdpc3RlciAwIFZhbHVlCisJCSAgIGRhdGFbM106IFByZS1sb2FkIFJlZ2lzdGVyIDEgVmFsdWUKKwkJICAgZGF0YVs0XTogQ29udGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJICovCisJCXByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgUFRHXG4iKTsKKwkJZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwID0KKwkJCVB1bHNlVHJhaW5HZW5lcmF0aW9uOworCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKwkJY21SZWcudmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKKwkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAwOwkvLyBQUjAKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgbG93IHdvcmQKKwkJdmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKwkJY21SZWcudmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKKwkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAxOwkvLyBQUjEKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgaGlnaCB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoKGluc24tPmRhdGFbM10gPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgbG93IHdvcmQKKwkJdmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIFdyaXRlIHRoZSBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJaWYgKGluc24tPmRhdGFbM10gIT0gMCkgeworCQkJdmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKKwkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiczUyNjogdW5zdXBwb3J0ZWQgR1BDVF9pbnNuX2NvbmZpZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBzNTI2X2dwY3Rfd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBVbnBhY2sgY2hhbnNwZWMKKwlzaG9ydCB2YWx1ZTsKKworCXByaW50aygiczUyNjogR1BDVF9JTlNOX1dSSVRFIG9uIGNoYW5uZWwgJWRcbiIsIHN1YmRldl9jaGFubmVsKTsKKwljbVJlZy52YWx1ZSA9IGludyhBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisJcHJpbnRrKCJzNTI2OiBDb3VudGVyIE1vZGUgUmVnaXN0ZXI6ICV4XG4iLCBjbVJlZy52YWx1ZSk7CisJLy8gQ2hlY2sgd2hhdCBBcHBsaWNhdGlvbiBvZiBDb3VudGVyIHRoaXMgY2hhbm5lbCBpcyBjb25maWd1cmVkIGZvcgorCXN3aXRjaCAoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwKSB7CisJY2FzZSBQb3NpdGlvbk1lYXN1cmVtZW50OgorCQlwcmludGsoIlM1MjY6IElOU05fV1JJVEU6IFBNXG4iKTsKKwkJb3V0dygweEZGRkYgJiAoKCpkYXRhKSA+PiAxNiksIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwKKwkJCQlzdWJkZXZfY2hhbm5lbCkpOworCQlvdXR3KDB4RkZGRiAmICgqZGF0YSksIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJYnJlYWs7CisKKwljYXNlIFNpbmdsZVB1bHNlR2VuZXJhdGlvbjoKKwkJcHJpbnRrKCJTNTI2OiBJTlNOX1dSSVRFOiBTUEdcbiIpOworCQlvdXR3KDB4RkZGRiAmICgoKmRhdGEpID4+IDE2KSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILAorCQkJCXN1YmRldl9jaGFubmVsKSk7CisJCW91dHcoMHhGRkZGICYgKCpkYXRhKSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCQlicmVhazsKKworCWNhc2UgUHVsc2VUcmFpbkdlbmVyYXRpb246CisJCS8qIGRhdGFbMF0gY29udGFpbnMgdGhlIFBVTFNFX1dJRFRICisJCSAgIGRhdGFbMV0gY29udGFpbnMgdGhlIFBVTFNFX1BFUklPRAorCQkgICBAcHJlIFBVTFNFX1BFUklPRCA+IFBVTFNFX1dJRFRIID4gMAorCQkgICBUaGUgYWJvdmUgcGVyaW9kcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBhIG11bHRpcGxlIG9mIHRoZQorCQkgICBwdWxzZSBmcmVxdWVuY3kgb24gdGhlIHNlbGVjdGVkIHNvdXJjZQorCQkgKi8KKwkJcHJpbnRrKCJTNTI2OiBJTlNOX1dSSVRFOiBQVEdcbiIpOworCQlpZiAoKGluc24tPmRhdGFbMV0gPiBpbnNuLT5kYXRhWzBdKSAmJiAoaW5zbi0+ZGF0YVswXSA+IDApKSB7CisJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMF0gPQorCQkJCWluc24tPmRhdGFbMF07CisJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMV0gPQorCQkJCWluc24tPmRhdGFbMV07CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiVkIFx0ICVkXG4iLCBpbnNuLT5kYXRhWzFdLCBpbnNuLT5kYXRhWzJdKTsKKwkJCXByaW50aygiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdmFsdWUgPSAoc2hvcnQpICgoKmRhdGEgPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCQl2YWx1ZSA9IChzaG9ydCkgKCpkYXRhICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCQlicmVhazsKKwlkZWZhdWx0OgkJLy8gSW1wb3NzaWJsZQorCQlwcmludGsoInM1MjY6IElOU05fV1JJVEU6IEZ1bmN0aW9uYWxpdHkgJWQgbm90IGltcGxlbWVudGVkIHlldFxuIiwgZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworI2RlZmluZSBJU1JfQURDX0RPTkUgMHg0CitzdGF0aWMgaW50IHM1MjZfYWlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXN1bHQgPSAtRUlOVkFMOworCisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gaW5zbi0+bjsKKworCS8qIGRhdGFbMF0gOiBjaGFubmVscyB3YXMgc2V0IGluIHJlbGV2YW50IGJpdHMuCisJICAgZGF0YVsxXSA6IGRlbGF5CisJICovCisJLyogQ09NTUVOVDogYWJib3R0aSAyMDA4LTA3LTI0OiBJIGRvbid0IGtub3cgd2h5IHlvdSdkIHdhbnQgdG8KKwkgKiBlbmFibGUgY2hhbm5lbHMgaGVyZS4gIFRoZSBjaGFubmVsIHNob3VsZCBiZSBlbmFibGVkIGluIHRoZQorCSAqIElOU05fUkVBRCBoYW5kbGVyLiAqLworCisJLy8gRW5hYmxlIEFEQyBpbnRlcnJ1cHQKKwlvdXR3KElTUl9BRENfRE9ORSwgQUREUl9SRUcoUkVHX0lFUikpOworLy8gICAgICBwcmludGsoInM1MjY6IEFEQyBjdXJyZW50IHZhbHVlOiAweCUwNHhcbiIsIGludyhBRERSX1JFRyhSRUdfQURDKSkpOworCWRldnByaXYtPnM1MjZfYWlfY29uZmlnID0gKGRhdGFbMF0gJiAweDNGRikgPDwgNTsKKwlpZiAoZGF0YVsxXSA+IDApCisJCWRldnByaXYtPnM1MjZfYWlfY29uZmlnIHw9IDB4ODAwMDsJLy9zZXQgdGhlIGRlbGF5CisKKwlkZXZwcml2LT5zNTI2X2FpX2NvbmZpZyB8PSAweDAwMDE7CS8vIEFEQyBzdGFydCBiaXQuCisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgczUyNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJLyogU2V0IGNvbmZpZ3VyZWQgZGVsYXksIGVuYWJsZSBjaGFubmVsIGZvciB0aGlzIGNoYW5uZWwgb25seSwKKwkgKiBzZWxlY3QgIkFEQyByZWFkIiBjaGFubmVsLCBzZXQgIkFEQyBzdGFydCIgYml0LiAqLworCXZhbHVlID0gKGRldnByaXYtPnM1MjZfYWlfY29uZmlnICYgMHg4MDAwKSB8CisJCSgoMSA8PCA1KSA8PCBjaGFuKSB8IChjaGFuIDw8IDEpIHwgMHgwMDAxOworCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXR3KHZhbHVlLCBBRERSX1JFRyhSRUdfQURDKSk7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2OiBXcm90ZSAweCUwNHggdG8gQURDXG4iLCB2YWx1ZSk7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2OiBBREMgcmVnPTB4JTA0eFxuIiwgaW53KEFERFJfUkVHKFJFR19BREMpKSk7CisKKyNkZWZpbmUgVElNRU9VVCAxMDAKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJc3RhdHVzID0gaW53KEFERFJfUkVHKFJFR19JU1IpKTsKKwkJCWlmIChzdGF0dXMgJiBJU1JfQURDX0RPTkUpIHsKKwkJCQlvdXR3KElTUl9BRENfRE9ORSwgQUREUl9SRUcoUkVHX0lTUikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IFRJTUVPVVQpIHsKKwkJCS8qIHJ0X3ByaW50aygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgcHJpbnRrKCkKKwkJCSAqIHdoZW5ldmVyIHRoZSBjb2RlIGNhbiBiZSBjYWxsZWQgZnJvbSByZWFsLXRpbWUuICovCisJCQlydF9wcmludGsoInM1MjY6IEFEQygweCUwNHgpIHRpbWVvdXRcbiIsCisJCQkJaW53KEFERFJfUkVHKFJFR19JU1IpKSk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQlkID0gaW53KEFERFJfUkVHKFJFR19BREQpKTsKKy8vICAgICAgICAgICAgICBwcmludGsoIkFJWyVkXT0weCUwNHhcbiIsIG4sICh1bnNpZ25lZCBzaG9ydCkoZCAmIDB4RkZGRikpOworCisJCS8qIG11bmdlIGRhdGEgKi8KKwkJZGF0YVtuXSA9IGQgXiAweDgwMDA7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzNTI2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIHNob3J0IHZhbDsKKworLy8gICAgICBwcmludGsoInM1MjZfYW9fd2luc25cbiIpOworCXZhbCA9IGNoYW4gPDwgMTsKKy8vICAgICAgb3V0dyh2YWwsIGRldi0+aW9iYXNlICsgUkVHX0RBQyk7CisJb3V0dyh2YWwsIEFERFJfUkVHKFJFR19EQUMpKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBhIHR5cGljYWwgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgKi8KKy8vICAgICAgICAgICAgICBvdXR3KGRhdGFbaV0sIGRldi0+aW9iYXNlICsgUkVHX0FERCk7ICAvLyB3cml0ZSB0aGUgZGF0YSB0byBwcmVsb2FkIHJlZ2lzdGVyCisJCW91dHcoZGF0YVtpXSwgQUREUl9SRUcoUkVHX0FERCkpOwkvLyB3cml0ZSB0aGUgZGF0YSB0byBwcmVsb2FkIHJlZ2lzdGVyCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKy8vICAgICAgICAgICAgICBvdXR3KHZhbCArIDEsIGRldi0+aW9iYXNlICsgUkVHX0RBQyk7IC8vIHN0YXJ0cyB0aGUgRC9BIGNvbnZlcnNpb24uCisJCW91dHcodmFsICsgMSwgQUREUl9SRUcoUkVHX0RBQykpOwkvLyBzdGFydHMgdGhlIEQvQSBjb252ZXJzaW9uLgorCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIGk7Cit9CisKKy8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCisgKiBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LiAqLworc3RhdGljIGludCBzNTI2X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBzNTI2X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQkvKiBXcml0ZSBvdXQgdGhlIG5ldyBkaWdpdGFsIG91dHB1dCBsaW5lcyAqLworCQlvdXR3KHMtPnN0YXRlLCBBRERSX1JFRyhSRUdfRElPKSk7CisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJZGF0YVsxXSA9IGludyhBRERSX1JFRyhSRUdfRElPKSkgJiAweEZGOwkvLyBsb3cgOCBiaXRzIGFyZSB0aGUgZGF0YQorCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8vZGF0YVsxXT1zLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHM1MjZfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXNob3J0IHZhbHVlOworCisJcHJpbnRrKCJTNTI2IERJTyBpbnNuX2NvbmZpZ1xuIik7CisKKwlpZiAoaW5zbi0+biAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbHVlID0gaW53KEFERFJfUkVHKFJFR19ESU8pKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKKwkJdmFsdWUgfD0gMSA8PCAoY2hhbiArIDEwKTsJLy8gYml0IDEwLzExIHNldCB0aGUgZ3JvdXAgMS8yJ3MgbW9kZQorCQlzLT5pb19iaXRzIHw9ICgweEYgPDwgY2hhbik7CisJfSBlbHNlIHsKKwkJdmFsdWUgJj0gfigxIDw8IChjaGFuICsgMTApKTsJLy8gMSBpcyBvdXRwdXQsIDAgaXMgaW5wdXQuCisJCXMtPmlvX2JpdHMgJj0gfigweEYgPDwgY2hhbik7CisJfQorCW91dHcodmFsdWUsIEFERFJfUkVHKFJFR19ESU8pKTsKKworCXJldHVybiAxOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3M1MjYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKaW5kZXggNDY5ZWU4Yy4uMzBkZWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCkBAIC04Miw3ICs4Miw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNlbnNvcmF5IDYyNiBDb21lZGkgZHJpdmVyIG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi10eXBlZGVmIHN0cnVjdCBzNjI2X2JvYXJkX3N0cnVjdCB7CitzdHJ1Y3QgczYyNl9ib2FyZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgYWlfY2hhbnM7CiAJaW50IGFpX2JpdHM7CkBAIC05MSwyMiArOTEsMjIgQEAKIAlpbnQgZGlvX2NoYW5zOwogCWludCBkaW9fYmFua3M7CiAJaW50IGVuY19jaGFuczsKLX0gczYyNl9ib2FyZDsKK307CiAKLXN0YXRpYyBjb25zdCBzNjI2X2JvYXJkIHM2MjZfYm9hcmRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHM2MjZfYm9hcmQgczYyNl9ib2FyZHNbXSA9IHsKIAl7CiAJICAgICAgbmFtZToJInM2MjYiLAotCSAgICAgIGFpX2NoYW5zOlM2MjZfQURDX0NIQU5ORUxTLAorCSAgICAgIGFpX2NoYW5zIDogUzYyNl9BRENfQ0hBTk5FTFMsCiAJICAgICAgYWlfYml0czoJMTQsCi0JICAgICAgYW9fY2hhbnM6UzYyNl9EQUNfQ0hBTk5FTFMsCisJICAgICAgYW9fY2hhbnMgOiBTNjI2X0RBQ19DSEFOTkVMUywKIAkgICAgICBhb19iaXRzOgkxMywKLQkgICAgICBkaW9fY2hhbnM6UzYyNl9ESU9fQ0hBTk5FTFMsCi0JICAgICAgZGlvX2JhbmtzOlM2MjZfRElPX0JBTktTLAotCSAgICAgIGVuY19jaGFuczpTNjI2X0VOQ09ERVJfQ0hBTk5FTFMsCisJICAgICAgZGlvX2NoYW5zIDogUzYyNl9ESU9fQ0hBTk5FTFMsCisJICAgICAgZGlvX2JhbmtzIDogUzYyNl9ESU9fQkFOS1MsCisJICAgICAgZW5jX2NoYW5zIDogUzYyNl9FTkNPREVSX0NIQU5ORUxTLAogCQl9CiB9OwogCi0jZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHM2MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHM2MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TNjI2IDB4MTEzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1M2MjYgMHg3MTQ2CiAKQEAgLTExOCw1NyArMTE4LDQ5IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzNjI2X3BjaV90YWJsZSk7CiAKLXN0YXRpYyBpbnQgczYyNl9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKLXN0YXRpYyBpbnQgczYyNl9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHM2MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IHM2MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfczYyNiA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfczYyNiA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiJzNjI2IiwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDpzNjI2X2F0dGFjaCwKLSAgICAgIGRldGFjaDpzNjI2X2RldGFjaCwKKyAgICAgIG1vZHVsZSA6IFRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoIDogczYyNl9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBzNjI2X2RldGFjaCwKIH07CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBzNjI2X3ByaXZhdGUgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXZvaWQgKmJhc2VfYWRkcjsKIAlpbnQgZ290X3JlZ2lvbnM7CiAJc2hvcnQgYWxsb2NhdGVkQnVmOwotCXVpbnQ4X3QgYWlfY21kX3J1bm5pbmc7CS8vIGFpX2NtZCBpcyBydW5uaW5nCi0JdWludDhfdCBhaV9jb250aW5vdXM7CS8vIGNvbnRpbm91cyBhcXVpc2l0aW9uCi0JaW50IGFpX3NhbXBsZV9jb3VudDsJLy8gbnVtYmVyIG9mIHNhbXBsZXMgdG8gYXF1aXJlCi0JdW5zaWduZWQgaW50IGFpX3NhbXBsZV90aW1lcjsJLy8gdGltZSBiZXR3ZWVuIHNhbXBsZXMgaW4KLQkvLyB1bml0cyBvZiB0aGUgdGltZXIKLQlpbnQgYWlfY29udmVydF9jb3VudDsJLy8gY29udmVyc2lvbiBjb3VudGVyCi0JdW5zaWduZWQgaW50IGFpX2NvbnZlcnRfdGltZXI7CS8vIHRpbWUgYmV0d2VlbiBjb252ZXJzaW9uIGluCi0JLy8gdW5pdHMgb2YgdGhlIHRpbWVyCi0JdWludDE2X3QgQ291bnRlckludEVuYWJzOwkvL0NvdW50ZXIgaW50ZXJydXB0IGVuYWJsZQotCS8vbWFzayBmb3IgTUlTQzIgcmVnaXN0ZXIuCi0JdWludDhfdCBBZGNJdGVtczsJLy9OdW1iZXIgb2YgaXRlbXMgaW4gQURDIHBvbGwKLQkvL2xpc3QuCi0JRE1BQlVGIFJQU0J1ZjsJCS8vRE1BIGJ1ZmZlciB1c2VkIHRvIGhvbGQgQURDCi0JLy8oUlBTMSkgcHJvZ3JhbS4KLQlETUFCVUYgQU5BQnVmOwkJLy9ETUEgYnVmZmVyIHVzZWQgdG8gcmVjZWl2ZQotCS8vQURDIGRhdGEgYW5kIGhvbGQgREFDIGRhdGEuCi0JdWludDMyX3QgKnBEYWNXQnVmOwkvL1BvaW50ZXIgdG8gbG9naWNhbCBhZHJzIG9mCi0JLy9ETUEgYnVmZmVyIHVzZWQgdG8gaG9sZCBEQUMKLQkvL2RhdGEuCi0JdWludDE2X3QgRGFjcG9sOwkvL0ltYWdlIG9mIERBQyBwb2xhcml0eQotCS8vcmVnaXN0ZXIuCi0JdWludDhfdCBUcmltU2V0cG9pbnRbMTJdOwkvL0ltYWdlcyBvZiBUcmltREFDIHNldHBvaW50cy4KLQkvL3JlZ2lzdGVycy4KLQl1aW50MTZfdCBDaGFyZ2VFbmFibGVkOwkvL0ltYWdlIG9mIE1JU0MyIEJhdHRlcnkKLQkvL0NoYXJnZSBFbmFibGVkICgwIG9yCi0JLy9XUk1JU0MyX0NIQVJHRV9FTkFCTEUpLgotCXVpbnQxNl90IFdESW50ZXJ2YWw7CS8vSW1hZ2Ugb2YgTUlTQzIgd2F0Y2hkb2cKLQkvL2ludGVydmFsIGNvbnRyb2wgYml0cy4KLQl1aW50MzJfdCBJMkNBZHJzOwkvL0kyQyBkZXZpY2UgYWRkcmVzcyBmb3IKLQkvL29uYm9hcmQgRUVQUk9NIChib2FyZCByZXYKLQkvL2RlcGVuZGVudCkuCi0JLy8gIHNob3J0ICAgICAgICAgSTJDYXJkczsKLQlsc2FtcGxfdCBhb19yZWFkYmFja1tTNjI2X0RBQ19DSEFOTkVMU107Ci19IHM2MjZfcHJpdmF0ZTsKKwl1aW50OF90IGFpX2NtZF9ydW5uaW5nOwkvKiAgYWlfY21kIGlzIHJ1bm5pbmcgKi8KKwl1aW50OF90IGFpX2NvbnRpbm91czsJLyogIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJaW50IGFpX3NhbXBsZV9jb3VudDsJLyogIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZSAqLworCXVuc2lnbmVkIGludCBhaV9zYW1wbGVfdGltZXI7CisJLyogIHRpbWUgYmV0d2VlbiBzYW1wbGVzIGluICB1bml0cyBvZiB0aGUgdGltZXIgKi8KKwlpbnQgYWlfY29udmVydF9jb3VudDsJLyogIGNvbnZlcnNpb24gY291bnRlciAqLworCXVuc2lnbmVkIGludCBhaV9jb252ZXJ0X3RpbWVyOworCS8qICB0aW1lIGJldHdlZW4gY29udmVyc2lvbiBpbiAgdW5pdHMgb2YgdGhlIHRpbWVyICovCisJdWludDE2X3QgQ291bnRlckludEVuYWJzOworCS8qIENvdW50ZXIgaW50ZXJydXB0IGVuYWJsZSAgbWFzayBmb3IgTUlTQzIgcmVnaXN0ZXIuICovCisJdWludDhfdCBBZGNJdGVtczsJLyogTnVtYmVyIG9mIGl0ZW1zIGluIEFEQyBwb2xsICBsaXN0LiAqLworCXN0cnVjdCBidWZmZXJETUEgUlBTQnVmOwkJLyogRE1BIGJ1ZmZlciB1c2VkIHRvIGhvbGQgQURDIChSUFMxKSBwcm9ncmFtLiAqLworCXN0cnVjdCBidWZmZXJETUEgQU5BQnVmOworCS8qIERNQSBidWZmZXIgdXNlZCB0byByZWNlaXZlIEFEQyBkYXRhIGFuZCBob2xkIERBQyBkYXRhLiAqLworCXVpbnQzMl90ICpwRGFjV0J1ZjsKKwkvKiBQb2ludGVyIHRvIGxvZ2ljYWwgYWRycyBvZiBETUEgYnVmZmVyIHVzZWQgdG8gaG9sZCBEQUMgIGRhdGEuICovCisJdWludDE2X3QgRGFjcG9sOwkvKiBJbWFnZSBvZiBEQUMgcG9sYXJpdHkgcmVnaXN0ZXIuICovCisJdWludDhfdCBUcmltU2V0cG9pbnRbMTJdOwkvKiBJbWFnZXMgb2YgVHJpbURBQyBzZXRwb2ludHMgKi8KKwl1aW50MTZfdCBDaGFyZ2VFbmFibGVkOwkvKiBJbWFnZSBvZiBNSVNDMiBCYXR0ZXJ5ICovCisJLyogQ2hhcmdlIEVuYWJsZWQgKDAgb3IgV1JNSVNDMl9DSEFSR0VfRU5BQkxFKS4gKi8KKwl1aW50MTZfdCBXREludGVydmFsOwkvKiBJbWFnZSBvZiBNSVNDMiB3YXRjaGRvZyBpbnRlcnZhbCBjb250cm9sIGJpdHMuICovCisJdWludDMyX3QgSTJDQWRyczsKKwkvKiBJMkMgZGV2aWNlIGFkZHJlc3MgZm9yIG9uYm9hcmQgRUVQUk9NIChib2FyZCByZXYgZGVwZW5kZW50KS4gKi8KKwkvKiAgIHNob3J0ICAgICAgICAgSTJDYXJkczsgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbUzYyNl9EQUNfQ0hBTk5FTFNdOworfTsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGRpb19wcml2YXRlIHsKIAl1aW50MTZfdCBSRERJbjsKIAl1aW50MTZfdCBXUkRPdXQ7CiAJdWludDE2X3QgUkRFZGdTZWw7CkBAIC0xNzgsMzI0ICsxNzAsMzIyIEBACiAJdWludDE2X3QgUkRDYXBGbGc7CiAJdWludDE2X3QgUkRJbnRTZWw7CiAJdWludDE2X3QgV1JJbnRTZWw7Ci19IGRpb19wcml2YXRlOworfTsKIAotc3RhdGljIGRpb19wcml2YXRlIGRpb19wcml2YXRlX0EgPSB7CitzdGF0aWMgc3RydWN0IGRpb19wcml2YXRlIGRpb19wcml2YXRlX0EgPSB7CiAgICAgICBSRERJbjpMUF9SRERJTkEsCi0gICAgICBXUkRPdXQ6TFBfV1JET1VUQSwKLSAgICAgIFJERWRnU2VsOkxQX1JERURHU0VMQSwKLSAgICAgIFdSRWRnU2VsOkxQX1dSRURHU0VMQSwKLSAgICAgIFJEQ2FwU2VsOkxQX1JEQ0FQU0VMQSwKLSAgICAgIFdSQ2FwU2VsOkxQX1dSQ0FQU0VMQSwKLSAgICAgIFJEQ2FwRmxnOkxQX1JEQ0FQRkxHQSwKLSAgICAgIFJESW50U2VsOkxQX1JESU5UU0VMQSwKLSAgICAgIFdSSW50U2VsOkxQX1dSSU5UU0VMQSwKKyAgICAgIFdSRE91dCA6IExQX1dSRE9VVEEsCisgICAgICBSREVkZ1NlbCA6IExQX1JERURHU0VMQSwKKyAgICAgIFdSRWRnU2VsIDogTFBfV1JFREdTRUxBLAorICAgICAgUkRDYXBTZWwgOiBMUF9SRENBUFNFTEEsCisgICAgICBXUkNhcFNlbCA6IExQX1dSQ0FQU0VMQSwKKyAgICAgIFJEQ2FwRmxnIDogTFBfUkRDQVBGTEdBLAorICAgICAgUkRJbnRTZWwgOiBMUF9SRElOVFNFTEEsCisgICAgICBXUkludFNlbCA6IExQX1dSSU5UU0VMQSwKIH07CiAKLXN0YXRpYyBkaW9fcHJpdmF0ZSBkaW9fcHJpdmF0ZV9CID0geworc3RhdGljIHN0cnVjdCBkaW9fcHJpdmF0ZSBkaW9fcHJpdmF0ZV9CID0gewogICAgICAgUkRESW46TFBfUkRESU5CLAotICAgICAgV1JET3V0OkxQX1dSRE9VVEIsCi0gICAgICBSREVkZ1NlbDpMUF9SREVER1NFTEIsCi0gICAgICBXUkVkZ1NlbDpMUF9XUkVER1NFTEIsCi0gICAgICBSRENhcFNlbDpMUF9SRENBUFNFTEIsCi0gICAgICBXUkNhcFNlbDpMUF9XUkNBUFNFTEIsCi0gICAgICBSRENhcEZsZzpMUF9SRENBUEZMR0IsCi0gICAgICBSREludFNlbDpMUF9SRElOVFNFTEIsCi0gICAgICBXUkludFNlbDpMUF9XUklOVFNFTEIsCisgICAgICBXUkRPdXQgOiBMUF9XUkRPVVRCLAorICAgICAgUkRFZGdTZWwgOiBMUF9SREVER1NFTEIsCisgICAgICBXUkVkZ1NlbCA6IExQX1dSRURHU0VMQiwKKyAgICAgIFJEQ2FwU2VsIDogTFBfUkRDQVBTRUxCLAorICAgICAgV1JDYXBTZWwgOiBMUF9XUkNBUFNFTEIsCisgICAgICBSRENhcEZsZyA6IExQX1JEQ0FQRkxHQiwKKyAgICAgIFJESW50U2VsIDogTFBfUkRJTlRTRUxCLAorICAgICAgV1JJbnRTZWwgOiBMUF9XUklOVFNFTEIsCiB9OwogCi1zdGF0aWMgZGlvX3ByaXZhdGUgZGlvX3ByaXZhdGVfQyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGlvX3ByaXZhdGUgZGlvX3ByaXZhdGVfQyA9IHsKICAgICAgIFJEREluOkxQX1JERElOQywKLSAgICAgIFdSRE91dDpMUF9XUkRPVVRDLAotICAgICAgUkRFZGdTZWw6TFBfUkRFREdTRUxDLAotICAgICAgV1JFZGdTZWw6TFBfV1JFREdTRUxDLAotICAgICAgUkRDYXBTZWw6TFBfUkRDQVBTRUxDLAotICAgICAgV1JDYXBTZWw6TFBfV1JDQVBTRUxDLAotICAgICAgUkRDYXBGbGc6TFBfUkRDQVBGTEdDLAotICAgICAgUkRJbnRTZWw6TFBfUkRJTlRTRUxDLAotICAgICAgV1JJbnRTZWw6TFBfV1JJTlRTRUxDLAorICAgICAgV1JET3V0IDogTFBfV1JET1VUQywKKyAgICAgIFJERWRnU2VsIDogTFBfUkRFREdTRUxDLAorICAgICAgV1JFZGdTZWwgOiBMUF9XUkVER1NFTEMsCisgICAgICBSRENhcFNlbCA6IExQX1JEQ0FQU0VMQywKKyAgICAgIFdSQ2FwU2VsIDogTFBfV1JDQVBTRUxDLAorICAgICAgUkRDYXBGbGcgOiBMUF9SRENBUEZMR0MsCisgICAgICBSREludFNlbCA6IExQX1JESU5UU0VMQywKKyAgICAgIFdSSW50U2VsIDogTFBfV1JJTlRTRUxDLAogfTsKIAogLyogdG8gZ3JvdXAgZGlvIGRldmljZXMgKDQ4IGJpdHMgbWFzayBhbmQgZGF0YSBhcmUgbm90IGFsbG93ZWQgPz8/KQotc3RhdGljIGRpb19wcml2YXRlICpkaW9fcHJpdmF0ZV93b3JkW109eworc3RhdGljIHN0cnVjdCBkaW9fcHJpdmF0ZSAqZGlvX3ByaXZhdGVfd29yZFtdPXsKICAgJmRpb19wcml2YXRlX0EsCiAgICZkaW9fcHJpdmF0ZV9CLAogICAmZGlvX3ByaXZhdGVfQywKIH07CiAqLwogCi0jZGVmaW5lIGRldnByaXYgKChzNjI2X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCi0jZGVmaW5lIGRpb3ByaXYgKChkaW9fcHJpdmF0ZSAqKXMtPnByaXZhdGUpCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgczYyNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBkaW9wcml2ICgoc3RydWN0IGRpb19wcml2YXRlICopcy0+cHJpdmF0ZSkKIAogQ09NRURJX1BDSV9JTklUQ0xFQU5VUF9OT01PRFVMRShkcml2ZXJfczYyNiwgczYyNl9wY2lfdGFibGUpOwogCi0vL2lvY3RsIHJvdXRpbmVzCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotLyogc3RhdGljIGludCBzNjI2X2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldixjb21lZGlfc3ViZGV2aWNlICpzLGNvbWVkaV9pbnNuICppbnNuLGxzYW1wbF90ICpkYXRhKTsgKi8KLXN0YXRpYyBpbnQgczYyNl9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7Ci1zdGF0aWMgaW50IHM2MjZfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kKTsKLXN0YXRpYyBpbnQgczYyNl9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9hb19yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbik7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX3Jlc2V0X2lycShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgZ3J1b3AsCisvKiBpb2N0bCByb3V0aW5lcyAqLworc3RhdGljIGludCBzNjI2X2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKy8qIHN0YXRpYyBpbnQgczYyNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAqLworc3RhdGljIGludCBzNjI2X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK3N0YXRpYyBpbnQgczYyNl9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBzNjI2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHM2MjZfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2Rpb19zZXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFuKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9fcmVzZXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBncnVvcCwKIAl1bnNpZ25lZCBpbnQgbWFzayk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX2NsZWFyX2lycShjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9fY2xlYXJfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzNjI2X2VuY19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogc3RhdGljIGludCBzNjI2X25zX3RvX3RpbWVyKGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpOwotc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqIHBwbCwgY29tZWRpX2NtZCAqIGNtZCk7Ci1zdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKnBwbCwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitzdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgdHJpZ251bSk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgczYyNl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKLXN0YXRpYyBsc2FtcGxfdCBzNjI2X2FpX3JlZ190b191aW50KGludCBkYXRhKTsKLS8qIHN0YXRpYyBsc2FtcGxfdCBzNjI2X3VpbnRfdG9fcmVnKGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKTsgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgczYyNl9haV9yZWdfdG9fdWludChpbnQgZGF0YSk7CisvKiBzdGF0aWMgdW5zaWduZWQgaW50IHM2MjZfdWludF90b19yZWcoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKTsgKi8KIAotLy9lbmQgaW9jdGwgcm91dGluZXMKKy8qIGVuZCBpb2N0bCByb3V0aW5lcyAqLwogCi0vL2ludGVybmFsIHJvdXRpbmVzCi1zdGF0aWMgdm9pZCBzNjI2X2Rpb19pbml0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIHZvaWQgUmVzZXRBREMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCAqIHBwbCk7Ci1zdGF0aWMgdm9pZCBMb2FkVHJpbURBQ3MoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgdm9pZCBXcml0ZVRyaW1EQUMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCBMb2dpY2FsQ2hhbiwKKy8qIGludGVybmFsIHJvdXRpbmVzICovCitzdGF0aWMgdm9pZCBzNjI2X2Rpb19pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgUmVzZXRBREMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCAqcHBsKTsKK3N0YXRpYyB2b2lkIExvYWRUcmltREFDcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIFdyaXRlVHJpbURBQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90IExvZ2ljYWxDaGFuLAogCXVpbnQ4X3QgRGFjRGF0YSk7Ci1zdGF0aWMgdWludDhfdCBJMkNyZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgYWRkcik7Ci1zdGF0aWMgdWludDMyX3QgSTJDaGFuZHNoYWtlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCk7Ci1zdGF0aWMgdm9pZCBTZXREQUMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgY2hhbiwgc2hvcnQgZGFjZGF0YSk7Ci1zdGF0aWMgdm9pZCBTZW5kREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCk7Ci1zdGF0aWMgdm9pZCBXcml0ZU1JU0MyKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IE5ld0ltYWdlKTsKLXN0YXRpYyB2b2lkIERFQkl0cmFuc2Zlcihjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyB1aW50MTZfdCBERUJJcmVhZChjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyKTsKLXN0YXRpYyB2b2lkIERFQkl3cml0ZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyLCB1aW50MTZfdCB3ZGF0YSk7Ci1zdGF0aWMgdm9pZCBERUJJcmVwbGFjZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyLCB1aW50MTZfdCBtYXNrLAorc3RhdGljIHVpbnQ4X3QgSTJDcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90IGFkZHIpOworc3RhdGljIHVpbnQzMl90IEkyQ2hhbmRzaGFrZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MzJfdCB2YWwpOworc3RhdGljIHZvaWQgU2V0REFDKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGNoYW4sIHNob3J0IGRhY2RhdGEpOworc3RhdGljIHZvaWQgU2VuZERBQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MzJfdCB2YWwpOworc3RhdGljIHZvaWQgV3JpdGVNSVNDMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MTZfdCBOZXdJbWFnZSk7CitzdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgdWludDE2X3QgREVCSXJlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkcik7CitzdGF0aWMgdm9pZCBERUJJd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3Qgd2RhdGEpOworc3RhdGljIHZvaWQgREVCSXJlcGxhY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKIAl1aW50MTZfdCB3ZGF0YSk7Ci1zdGF0aWMgdm9pZCBDbG9zZURNQUIoY29tZWRpX2RldmljZSAqIGRldiwgRE1BQlVGICogcGRtYSwgc2l6ZV90IGJzaXplKTsKK3N0YXRpYyB2b2lkIENsb3NlRE1BQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgYnVmZmVyRE1BICpwZG1hLCBzaXplX3QgYnNpemUpOwogCi0vLyBDT1VOVEVSIE9CSkVDVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCB7Ci0JLy8gUG9pbnRlcnMgdG8gZnVuY3Rpb25zIHRoYXQgZGlmZmVyIGZvciBBIGFuZCBCIGNvdW50ZXJzOgotCXVpbnQxNl90KCpHZXRFbmFibGUpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICopOwkvL1JldHVybiBjbG9jayBlbmFibGUuCi0JdWludDE2X3QoKkdldEludFNyYykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmV0dXJuIGludGVycnVwdCBzb3VyY2UuCi0JdWludDE2X3QoKkdldExvYWRUcmlnKSAoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCAqKTsJLy9SZXR1cm4gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4KLQl1aW50MTZfdCgqR2V0TW9kZSkgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmV0dXJuIHN0YW5kYXJkaXplZCBvcGVyYXRpbmcgbW9kZS4KLQl2b2lkICgqUHVsc2VJbmRleCkgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vR2VuZXJhdGUgc29mdCBpbmRleCBzdHJvYmUuCi0Jdm9pZCAoKlNldEVuYWJsZSkgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKiwgdWludDE2X3QgZW5hYik7CS8vUHJvZ3JhbSBjbG9jayBlbmFibGUuCi0Jdm9pZCAoKlNldEludFNyYykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKiwgdWludDE2X3QgSW50U291cmNlKTsJLy9Qcm9ncmFtIGludGVycnVwdCBzb3VyY2UuCi0Jdm9pZCAoKlNldExvYWRUcmlnKSAoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCAqLCB1aW50MTZfdCBUcmlnKTsJLy9Qcm9ncmFtIHByZWxvYWQgdHJpZ2dlciBzb3VyY2UuCi0Jdm9pZCAoKlNldE1vZGUpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICosIHVpbnQxNl90IFNldHVwLCB1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsJLy9Qcm9ncmFtIHN0YW5kYXJkaXplZCBvcGVyYXRpbmcgbW9kZS4KLQl2b2lkICgqUmVzZXRDYXBGbGFncykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmVzZXQgZXZlbnQgY2FwdHVyZSBmbGFncy4KKy8qICBDT1VOVEVSIE9CSkVDVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0cnVjdCBlbmNfcHJpdmF0ZSB7CisJLyogIFBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB0aGF0IGRpZmZlciBmb3IgQSBhbmQgQiBjb3VudGVyczogKi8KKwl1aW50MTZfdCgqR2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gY2xvY2sgZW5hYmxlLiAqLworCXVpbnQxNl90KCpHZXRJbnRTcmMpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBpbnRlcnJ1cHQgc291cmNlLiAqLworCXVpbnQxNl90KCpHZXRMb2FkVHJpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqKTsJLyogUmV0dXJuIHByZWxvYWQgdHJpZ2dlciBzb3VyY2UuICovCisJdWludDE2X3QoKkdldE1vZGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuICovCisJdm9pZCAoKlB1bHNlSW5kZXgpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIEdlbmVyYXRlIHNvZnQgaW5kZXggc3Ryb2JlLiAqLworCXZvaWQgKCpTZXRFbmFibGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgZW5hYik7CS8qIFByb2dyYW0gY2xvY2sgZW5hYmxlLiAqLworCXZvaWQgKCpTZXRJbnRTcmMpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgSW50U291cmNlKTsJLyogUHJvZ3JhbSBpbnRlcnJ1cHQgc291cmNlLiAqLworCXZvaWQgKCpTZXRMb2FkVHJpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBUcmlnKTsJLyogUHJvZ3JhbSBwcmVsb2FkIHRyaWdnZXIgc291cmNlLiAqLworCXZvaWQgKCpTZXRNb2RlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IFNldHVwLCB1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsJLyogUHJvZ3JhbSBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuICovCisJdm9pZCAoKlJlc2V0Q2FwRmxhZ3MpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJlc2V0IGV2ZW50IGNhcHR1cmUgZmxhZ3MuICovCiAKLQl1aW50MTZfdCBNeUNSQTsJCS8vICAgQWRkcmVzcyBvZiBDUkEgcmVnaXN0ZXIuCi0JdWludDE2X3QgTXlDUkI7CQkvLyAgIEFkZHJlc3Mgb2YgQ1JCIHJlZ2lzdGVyLgotCXVpbnQxNl90IE15TGF0Y2hMc3c7CS8vICAgQWRkcmVzcyBvZiBMYXRjaCBsZWFzdC1zaWduaWZpY2FudC13b3JkCi0JLy8gICByZWdpc3Rlci4KLQl1aW50MTZfdCBNeUV2ZW50Qml0c1s0XTsJLy8gICBCaXQgdHJhbnNsYXRpb25zIGZvciBJbnRTcmMgLS0+UkRNSVNDMi4KLX0gZW5jX3ByaXZhdGU7CQkJLy9jb3VudGVyIG9iamVjdAorCXVpbnQxNl90IE15Q1JBOwkJLyogICAgQWRkcmVzcyBvZiBDUkEgcmVnaXN0ZXIuICovCisJdWludDE2X3QgTXlDUkI7CQkvKiAgICBBZGRyZXNzIG9mIENSQiByZWdpc3Rlci4gKi8KKwl1aW50MTZfdCBNeUxhdGNoTHN3OwkvKiAgICBBZGRyZXNzIG9mIExhdGNoIGxlYXN0LXNpZ25pZmljYW50LXdvcmQgKi8KKwkvKiAgICByZWdpc3Rlci4gKi8KKwl1aW50MTZfdCBNeUV2ZW50Qml0c1s0XTsJLyogICAgQml0IHRyYW5zbGF0aW9ucyBmb3IgSW50U3JjIC0tPlJETUlTQzIuICovCit9OwogCi0jZGVmaW5lIGVuY3ByaXYgKChlbmNfcHJpdmF0ZSAqKShkZXYtPnN1YmRldmljZXMrNSktPnByaXZhdGUpCisjZGVmaW5lIGVuY3ByaXYgKChzdHJ1Y3QgZW5jX3ByaXZhdGUgKikoZGV2LT5zdWJkZXZpY2VzKzUpLT5wcml2YXRlKQogCi0vL2NvdW50ZXJzIHJvdXRpbmVzCi1zdGF0aWMgdm9pZCBzNjI2X3RpbWVyX2xvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCBpbnQgdGljayk7Ci1zdGF0aWMgdWludDMyX3QgUmVhZExhdGNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFJlc2V0Q2FwRmxhZ3NfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHZvaWQgU2V0TW9kZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCisvKiBjb3VudGVycyByb3V0aW5lcyAqLworc3RhdGljIHZvaWQgczYyNl90aW1lcl9sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgaW50IHRpY2spOworc3RhdGljIHVpbnQzMl90IFJlYWRMYXRjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFNldE1vZGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFNldHVwLAogCXVpbnQxNl90IERpc2FibGVJbnRTcmMpOwotc3RhdGljIHZvaWQgU2V0TW9kZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCitzdGF0aWMgdm9pZCBTZXRNb2RlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBTZXR1cCwKIAl1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsKLXN0YXRpYyB2b2lkIFNldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgZW5hYik7Ci1zdGF0aWMgdm9pZCBTZXRFbmFibGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IGVuYWIpOwotc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFNldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywKK3N0YXRpYyB2b2lkIFNldEVuYWJsZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgZW5hYik7CitzdGF0aWMgdm9pZCBTZXRFbmFibGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IGVuYWIpOworc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFNldExhdGNoU291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCB2YWx1ZSk7Ci0vKiBzdGF0aWMgdWludDE2X3QgR2V0TGF0Y2hTb3VyY2UoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqayApOyAqLwotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpOwotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpOwotc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBTZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssCisvKiBzdGF0aWMgdWludDE2X3QgR2V0TGF0Y2hTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICk7ICovCitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZyk7CitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZyk7CitzdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFNldEludFNyY19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCBJbnRTb3VyY2UpOwotc3RhdGljIHZvaWQgU2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLAorc3RhdGljIHZvaWQgU2V0SW50U3JjX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLAogCXVpbnQxNl90IEludFNvdXJjZSk7Ci1zdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotLyogc3RhdGljIHZvaWQgU2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApIDsgKi8KLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtNdWx0KGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKSA7ICovCi0vKiBzdGF0aWMgdm9pZCBTZXRJbmRleFBvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAqLwotLyogc3RhdGljIHVpbnQxNl90IEdldENsa1BvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgOyAqLwotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIGNvbWVkaV9kZXZpY2UgKmRldixlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgICovCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrU3JjKCBjb21lZGlfZGV2aWNlICpkZXYsZW5jX3ByaXZhdGUgKmsgKTsgICovCi0vKiBzdGF0aWMgdm9pZCBTZXRJbmRleFNyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAgKi8KLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFNyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprICk7ICAqLwotc3RhdGljIHZvaWQgUHVsc2VJbmRleF9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBQdWxzZUluZGV4X0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFByZWxvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MzJfdCB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBDb3VudGVyc0luaXQoY29tZWRpX2RldmljZSAqIGRldik7Ci0vL2VuZCBpbnRlcm5hbCByb3V0aW5lcworc3RhdGljIHVpbnQxNl90IEdldEludFNyY19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKKy8qIHN0YXRpYyB2b2lkIFNldENsa011bHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApIDsgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtNdWx0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApIDsgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4UG9sKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgOyAqLworLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprICk7ICAqLworLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFNyYyggc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKTsgICovCitzdGF0aWMgdm9pZCBQdWxzZUluZGV4X0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHZvaWQgUHJlbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQzMl90IHZhbHVlKTsKK3N0YXRpYyB2b2lkIENvdW50ZXJzSW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKy8qIGVuZCBpbnRlcm5hbCByb3V0aW5lcyAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBDb3VudGVyIG9iamVjdHMgY29uc3RydWN0b3IuCisvKiAgQ291bnRlciBvYmplY3RzIGNvbnN0cnVjdG9yLiAqLwogCi0vLyBDb3VudGVyIG92ZXJmbG93L2luZGV4IGV2ZW50IGZsYWcgbWFza3MgZm9yIFJETUlTQzIuCi0jZGVmaW5lIElORFhNQVNLKEMpCQkoIDEgPDwgKCAoIChDKSA+IDIgKSA/ICggKEMpICogMiAtIDEgKSA6ICggKEMpICogMiArICA0ICkgKSApCi0jZGVmaW5lIE9WRVJNQVNLKEMpCQkoIDEgPDwgKCAoIChDKSA+IDIgKSA/ICggKEMpICogMiArIDUgKSA6ICggKEMpICogMiArIDEwICkgKSApCisvKiAgQ291bnRlciBvdmVyZmxvdy9pbmRleCBldmVudCBmbGFnIG1hc2tzIGZvciBSRE1JU0MyLiAqLworI2RlZmluZSBJTkRYTUFTSyhDKQkJKDEgPDwgKCgoQykgPiAyKSA/ICgoQykgKiAyIC0gMSkgOiAoKEMpICogMiArICA0KSkpCisjZGVmaW5lIE9WRVJNQVNLKEMpCQkoMSA8PCAoKChDKSA+IDIpID8gKChDKSAqIDIgKyA1KSA6ICgoQykgKiAyICsgMTApKSkKICNkZWZpbmUgRVZCSVRTKEMpCQl7IDAsIE9WRVJNQVNLKEMpLCBJTkRYTUFTSyhDKSwgT1ZFUk1BU0soQykgfCBJTkRYTUFTSyhDKSB9CiAKLS8vIFRyYW5zbGF0aW9uIHRhYmxlIHRvIG1hcCBJbnRTcmMgaW50byBlcXVpdmFsZW50IFJETUlTQzIgZXZlbnQgZmxhZwotLy8gYml0cy4KLS8vc3RhdGljIGNvbnN0IHVpbnQxNl90IEV2ZW50Qml0c1tdWzRdID0geyBFVkJJVFMoMCksIEVWQklUUygxKSwgRVZCSVRTKDIpLCBFVkJJVFMoMyksIEVWQklUUyg0KSwgRVZCSVRTKDUpIH07CisvKiAgVHJhbnNsYXRpb24gdGFibGUgdG8gbWFwIEludFNyYyBpbnRvIGVxdWl2YWxlbnQgUkRNSVNDMiBldmVudCBmbGFnICBiaXRzLiAqLworLyogc3RhdGljIGNvbnN0IHVpbnQxNl90IEV2ZW50Qml0c1tdWzRdID0geyBFVkJJVFMoMCksIEVWQklUUygxKSwgRVZCSVRTKDIpLCBFVkJJVFMoMyksIEVWQklUUyg0KSwgRVZCSVRTKDUpIH07ICovCiAKLS8qIGVuY19wcml2YXRlOyAqLwotc3RhdGljIGVuY19wcml2YXRlIGVuY19wcml2YXRlX2RhdGFbXSA9IHsKKy8qIHN0cnVjdCBlbmNfcHJpdmF0ZTsgKi8KK3N0YXRpYyBzdHJ1Y3QgZW5jX3ByaXZhdGUgZW5jX3ByaXZhdGVfZGF0YVtdID0gewogCXsKIAkgICAgICBHZXRFbmFibGU6R2V0RW5hYmxlX0EsCi0JICAgICAgR2V0SW50U3JjOkdldEludFNyY19BLAotCSAgICAgIEdldExvYWRUcmlnOkdldExvYWRUcmlnX0EsCi0JICAgICAgR2V0TW9kZToJR2V0TW9kZV9BLAotCSAgICAgIFB1bHNlSW5kZXg6UHVsc2VJbmRleF9BLAotCSAgICAgIFNldEVuYWJsZTpTZXRFbmFibGVfQSwKLQkgICAgICBTZXRJbnRTcmM6U2V0SW50U3JjX0EsCi0JICAgICAgU2V0TG9hZFRyaWc6U2V0TG9hZFRyaWdfQSwKLQkgICAgICBTZXRNb2RlOglTZXRNb2RlX0EsCi0JICAgICAgUmVzZXRDYXBGbGFnczpSZXNldENhcEZsYWdzX0EsCi0JICAgICAgTXlDUkE6CUxQX0NSMEEsCi0JICAgICAgTXlDUkI6CUxQX0NSMEIsCi0JICAgICAgTXlMYXRjaExzdzpMUF9DTlRSMEFMU1csCi0JICAgICAgTXlFdmVudEJpdHM6RVZCSVRTKDApLAorCSAgICAgIEdldEludFNyYyA6IEdldEludFNyY19BLAorCSAgICAgIEdldExvYWRUcmlnIDogR2V0TG9hZFRyaWdfQSwKKwkgICAgICBHZXRNb2RlIDoJR2V0TW9kZV9BLAorCSAgICAgIFB1bHNlSW5kZXggOiBQdWxzZUluZGV4X0EsCisJICAgICAgU2V0RW5hYmxlIDogU2V0RW5hYmxlX0EsCisJICAgICAgU2V0SW50U3JjIDogU2V0SW50U3JjX0EsCisJICAgICAgU2V0TG9hZFRyaWcgOiBTZXRMb2FkVHJpZ19BLAorCSAgICAgIFNldE1vZGUgOglTZXRNb2RlX0EsCisJICAgICAgUmVzZXRDYXBGbGFncyA6IFJlc2V0Q2FwRmxhZ3NfQSwKKwkgICAgICBNeUNSQSA6CUxQX0NSMEEsCisJICAgICAgTXlDUkIgOglMUF9DUjBCLAorCSAgICAgIE15TGF0Y2hMc3cgOiBMUF9DTlRSMEFMU1csCisJICAgICAgTXlFdmVudEJpdHMgOiBFVkJJVFMoMCksCiAJCX0sCiAJewogCSAgICAgIEdldEVuYWJsZTpHZXRFbmFibGVfQSwKLQkgICAgICBHZXRJbnRTcmM6R2V0SW50U3JjX0EsCi0JICAgICAgR2V0TG9hZFRyaWc6R2V0TG9hZFRyaWdfQSwKLQkgICAgICBHZXRNb2RlOglHZXRNb2RlX0EsCi0JICAgICAgUHVsc2VJbmRleDpQdWxzZUluZGV4X0EsCi0JICAgICAgU2V0RW5hYmxlOlNldEVuYWJsZV9BLAotCSAgICAgIFNldEludFNyYzpTZXRJbnRTcmNfQSwKLQkgICAgICBTZXRMb2FkVHJpZzpTZXRMb2FkVHJpZ19BLAotCSAgICAgIFNldE1vZGU6CVNldE1vZGVfQSwKLQkgICAgICBSZXNldENhcEZsYWdzOlJlc2V0Q2FwRmxhZ3NfQSwKLQkgICAgICBNeUNSQToJTFBfQ1IxQSwKLQkgICAgICBNeUNSQjoJTFBfQ1IxQiwKLQkgICAgICBNeUxhdGNoTHN3OkxQX0NOVFIxQUxTVywKLQkgICAgICBNeUV2ZW50Qml0czpFVkJJVFMoMSksCisJICAgICAgR2V0SW50U3JjIDogR2V0SW50U3JjX0EsCisJICAgICAgR2V0TG9hZFRyaWcgOiBHZXRMb2FkVHJpZ19BLAorCSAgICAgIEdldE1vZGUgOglHZXRNb2RlX0EsCisJICAgICAgUHVsc2VJbmRleCA6IFB1bHNlSW5kZXhfQSwKKwkgICAgICBTZXRFbmFibGUgOiBTZXRFbmFibGVfQSwKKwkgICAgICBTZXRJbnRTcmMgOiBTZXRJbnRTcmNfQSwKKwkgICAgICBTZXRMb2FkVHJpZyA6IFNldExvYWRUcmlnX0EsCisJICAgICAgU2V0TW9kZSA6CVNldE1vZGVfQSwKKwkgICAgICBSZXNldENhcEZsYWdzIDogUmVzZXRDYXBGbGFnc19BLAorCSAgICAgIE15Q1JBIDoJTFBfQ1IxQSwKKwkgICAgICBNeUNSQiA6CUxQX0NSMUIsCisJICAgICAgTXlMYXRjaExzdyA6IExQX0NOVFIxQUxTVywKKwkgICAgICBNeUV2ZW50Qml0cyA6IEVWQklUUygxKSwKIAkJfSwKIAl7CiAJICAgICAgR2V0RW5hYmxlOkdldEVuYWJsZV9BLAotCSAgICAgIEdldEludFNyYzpHZXRJbnRTcmNfQSwKLQkgICAgICBHZXRMb2FkVHJpZzpHZXRMb2FkVHJpZ19BLAotCSAgICAgIEdldE1vZGU6CUdldE1vZGVfQSwKLQkgICAgICBQdWxzZUluZGV4OlB1bHNlSW5kZXhfQSwKLQkgICAgICBTZXRFbmFibGU6U2V0RW5hYmxlX0EsCi0JICAgICAgU2V0SW50U3JjOlNldEludFNyY19BLAotCSAgICAgIFNldExvYWRUcmlnOlNldExvYWRUcmlnX0EsCi0JICAgICAgU2V0TW9kZToJU2V0TW9kZV9BLAotCSAgICAgIFJlc2V0Q2FwRmxhZ3M6UmVzZXRDYXBGbGFnc19BLAotCSAgICAgIE15Q1JBOglMUF9DUjJBLAotCSAgICAgIE15Q1JCOglMUF9DUjJCLAotCSAgICAgIE15TGF0Y2hMc3c6TFBfQ05UUjJBTFNXLAotCSAgICAgIE15RXZlbnRCaXRzOkVWQklUUygyKSwKKwkgICAgICBHZXRJbnRTcmMgOiBHZXRJbnRTcmNfQSwKKwkgICAgICBHZXRMb2FkVHJpZyA6IEdldExvYWRUcmlnX0EsCisJICAgICAgR2V0TW9kZSA6CUdldE1vZGVfQSwKKwkgICAgICBQdWxzZUluZGV4IDogUHVsc2VJbmRleF9BLAorCSAgICAgIFNldEVuYWJsZSA6IFNldEVuYWJsZV9BLAorCSAgICAgIFNldEludFNyYyA6IFNldEludFNyY19BLAorCSAgICAgIFNldExvYWRUcmlnIDogU2V0TG9hZFRyaWdfQSwKKwkgICAgICBTZXRNb2RlIDoJU2V0TW9kZV9BLAorCSAgICAgIFJlc2V0Q2FwRmxhZ3MgOiBSZXNldENhcEZsYWdzX0EsCisJICAgICAgTXlDUkEgOglMUF9DUjJBLAorCSAgICAgIE15Q1JCIDoJTFBfQ1IyQiwKKwkgICAgICBNeUxhdGNoTHN3IDogTFBfQ05UUjJBTFNXLAorCSAgICAgIE15RXZlbnRCaXRzIDogRVZCSVRTKDIpLAogCQl9LAogCXsKIAkgICAgICBHZXRFbmFibGU6R2V0RW5hYmxlX0IsCi0JICAgICAgR2V0SW50U3JjOkdldEludFNyY19CLAotCSAgICAgIEdldExvYWRUcmlnOkdldExvYWRUcmlnX0IsCi0JICAgICAgR2V0TW9kZToJR2V0TW9kZV9CLAotCSAgICAgIFB1bHNlSW5kZXg6UHVsc2VJbmRleF9CLAotCSAgICAgIFNldEVuYWJsZTpTZXRFbmFibGVfQiwKLQkgICAgICBTZXRJbnRTcmM6U2V0SW50U3JjX0IsCi0JICAgICAgU2V0TG9hZFRyaWc6U2V0TG9hZFRyaWdfQiwKLQkgICAgICBTZXRNb2RlOglTZXRNb2RlX0IsCi0JICAgICAgUmVzZXRDYXBGbGFnczpSZXNldENhcEZsYWdzX0IsCi0JICAgICAgTXlDUkE6CUxQX0NSMEEsCi0JICAgICAgTXlDUkI6CUxQX0NSMEIsCi0JICAgICAgTXlMYXRjaExzdzpMUF9DTlRSMEJMU1csCi0JICAgICAgTXlFdmVudEJpdHM6RVZCSVRTKDMpLAorCSAgICAgIEdldEludFNyYyA6IEdldEludFNyY19CLAorCSAgICAgIEdldExvYWRUcmlnIDogR2V0TG9hZFRyaWdfQiwKKwkgICAgICBHZXRNb2RlIDoJR2V0TW9kZV9CLAorCSAgICAgIFB1bHNlSW5kZXggOiBQdWxzZUluZGV4X0IsCisJICAgICAgU2V0RW5hYmxlIDogU2V0RW5hYmxlX0IsCisJICAgICAgU2V0SW50U3JjIDogU2V0SW50U3JjX0IsCisJICAgICAgU2V0TG9hZFRyaWcgOiBTZXRMb2FkVHJpZ19CLAorCSAgICAgIFNldE1vZGUgOglTZXRNb2RlX0IsCisJICAgICAgUmVzZXRDYXBGbGFncyA6IFJlc2V0Q2FwRmxhZ3NfQiwKKwkgICAgICBNeUNSQSA6CUxQX0NSMEEsCisJICAgICAgTXlDUkIgOglMUF9DUjBCLAorCSAgICAgIE15TGF0Y2hMc3cgOiBMUF9DTlRSMEJMU1csCisJICAgICAgTXlFdmVudEJpdHMgOiBFVkJJVFMoMyksCiAJCX0sCiAJewogCSAgICAgIEdldEVuYWJsZTpHZXRFbmFibGVfQiwKLQkgICAgICBHZXRJbnRTcmM6R2V0SW50U3JjX0IsCi0JICAgICAgR2V0TG9hZFRyaWc6R2V0TG9hZFRyaWdfQiwKLQkgICAgICBHZXRNb2RlOglHZXRNb2RlX0IsCi0JICAgICAgUHVsc2VJbmRleDpQdWxzZUluZGV4X0IsCi0JICAgICAgU2V0RW5hYmxlOlNldEVuYWJsZV9CLAotCSAgICAgIFNldEludFNyYzpTZXRJbnRTcmNfQiwKLQkgICAgICBTZXRMb2FkVHJpZzpTZXRMb2FkVHJpZ19CLAotCSAgICAgIFNldE1vZGU6CVNldE1vZGVfQiwKLQkgICAgICBSZXNldENhcEZsYWdzOlJlc2V0Q2FwRmxhZ3NfQiwKLQkgICAgICBNeUNSQToJTFBfQ1IxQSwKLQkgICAgICBNeUNSQjoJTFBfQ1IxQiwKLQkgICAgICBNeUxhdGNoTHN3OkxQX0NOVFIxQkxTVywKLQkgICAgICBNeUV2ZW50Qml0czpFVkJJVFMoNCksCisJICAgICAgR2V0SW50U3JjIDogR2V0SW50U3JjX0IsCisJICAgICAgR2V0TG9hZFRyaWcgOiBHZXRMb2FkVHJpZ19CLAorCSAgICAgIEdldE1vZGUgOglHZXRNb2RlX0IsCisJICAgICAgUHVsc2VJbmRleCA6IFB1bHNlSW5kZXhfQiwKKwkgICAgICBTZXRFbmFibGUgOiBTZXRFbmFibGVfQiwKKwkgICAgICBTZXRJbnRTcmMgOiBTZXRJbnRTcmNfQiwKKwkgICAgICBTZXRMb2FkVHJpZyA6IFNldExvYWRUcmlnX0IsCisJICAgICAgU2V0TW9kZSA6CVNldE1vZGVfQiwKKwkgICAgICBSZXNldENhcEZsYWdzIDogUmVzZXRDYXBGbGFnc19CLAorCSAgICAgIE15Q1JBIDoJTFBfQ1IxQSwKKwkgICAgICBNeUNSQiA6CUxQX0NSMUIsCisJICAgICAgTXlMYXRjaExzdyA6IExQX0NOVFIxQkxTVywKKwkgICAgICBNeUV2ZW50Qml0cyA6IEVWQklUUyg0KSwKIAkJfSwKIAl7CiAJICAgICAgR2V0RW5hYmxlOkdldEVuYWJsZV9CLAotCSAgICAgIEdldEludFNyYzpHZXRJbnRTcmNfQiwKLQkgICAgICBHZXRMb2FkVHJpZzpHZXRMb2FkVHJpZ19CLAotCSAgICAgIEdldE1vZGU6CUdldE1vZGVfQiwKLQkgICAgICBQdWxzZUluZGV4OlB1bHNlSW5kZXhfQiwKLQkgICAgICBTZXRFbmFibGU6U2V0RW5hYmxlX0IsCi0JICAgICAgU2V0SW50U3JjOlNldEludFNyY19CLAotCSAgICAgIFNldExvYWRUcmlnOlNldExvYWRUcmlnX0IsCi0JICAgICAgU2V0TW9kZToJU2V0TW9kZV9CLAotCSAgICAgIFJlc2V0Q2FwRmxhZ3M6UmVzZXRDYXBGbGFnc19CLAotCSAgICAgIE15Q1JBOglMUF9DUjJBLAotCSAgICAgIE15Q1JCOglMUF9DUjJCLAotCSAgICAgIE15TGF0Y2hMc3c6TFBfQ05UUjJCTFNXLAotCSAgICAgIE15RXZlbnRCaXRzOkVWQklUUyg1KSwKKwkgICAgICBHZXRJbnRTcmMgOiBHZXRJbnRTcmNfQiwKKwkgICAgICBHZXRMb2FkVHJpZyA6IEdldExvYWRUcmlnX0IsCisJICAgICAgR2V0TW9kZSA6CUdldE1vZGVfQiwKKwkgICAgICBQdWxzZUluZGV4IDogUHVsc2VJbmRleF9CLAorCSAgICAgIFNldEVuYWJsZSA6IFNldEVuYWJsZV9CLAorCSAgICAgIFNldEludFNyYyA6IFNldEludFNyY19CLAorCSAgICAgIFNldExvYWRUcmlnIDogU2V0TG9hZFRyaWdfQiwKKwkgICAgICBTZXRNb2RlIDoJU2V0TW9kZV9CLAorCSAgICAgIFJlc2V0Q2FwRmxhZ3MgOiBSZXNldENhcEZsYWdzX0IsCisJICAgICAgTXlDUkEgOglMUF9DUjJBLAorCSAgICAgIE15Q1JCIDoJTFBfQ1IyQiwKKwkgICAgICBNeUxhdGNoTHN3IDogTFBfQ05UUjJCTFNXLAorCSAgICAgIE15RXZlbnRCaXRzIDogRVZCSVRTKDUpLAogCQl9LAogfTsKIAotLy8gZW5hYi9kaXNhYmxlIGEgZnVuY3Rpb24gb3IgdGVzdCBzdGF0dXMgYml0KHMpIHRoYXQgYXJlIGFjY2Vzc2VkCi0vLyB0aHJvdWdoIE1haW4gQ29udHJvbCBSZWdpc3RlcnMgMSBvciAyLgotI2RlZmluZSBNQ19FTkFCTEUoIFJFR0FEUlMsIENUUkxXT1JEICkJd3JpdGVsKCAgKCAodWludDMyX3QpKCBDVFJMV09SRCApIDw8IDE2ICkgfCAodWludDMyX3QpKCBDVFJMV09SRCApLGRldnByaXYtPmJhc2VfYWRkcisoIFJFR0FEUlMgKSApCisvKiAgZW5hYi9kaXNhYmxlIGEgZnVuY3Rpb24gb3IgdGVzdCBzdGF0dXMgYml0KHMpIHRoYXQgYXJlIGFjY2Vzc2VkICovCisvKiAgdGhyb3VnaCBNYWluIENvbnRyb2wgUmVnaXN0ZXJzIDEgb3IgMi4gKi8KKyNkZWZpbmUgTUNfRU5BQkxFKFJFR0FEUlMsIENUUkxXT1JEKQl3cml0ZWwoKCh1aW50MzJfdCkoQ1RSTFdPUkQpIDw8IDE2KSB8ICh1aW50MzJfdCkoQ1RSTFdPUkQpLCBkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FEUlMpKQogCi0jZGVmaW5lIE1DX0RJU0FCTEUoIFJFR0FEUlMsIENUUkxXT1JEICkJd3JpdGVsKCAgKHVpbnQzMl90KSggQ1RSTFdPUkQgKSA8PCAxNiAsIGRldnByaXYtPmJhc2VfYWRkcisoIFJFR0FEUlMgKSApCisjZGVmaW5lIE1DX0RJU0FCTEUoUkVHQURSUywgQ1RSTFdPUkQpCXdyaXRlbCgodWludDMyX3QpKENUUkxXT1JEKSA8PCAxNiAsIGRldnByaXYtPmJhc2VfYWRkcisoUkVHQURSUykpCiAKLSNkZWZpbmUgTUNfVEVTVCggUkVHQURSUywgQ1RSTFdPUkQgKQkoICggcmVhZGwoZGV2cHJpdi0+YmFzZV9hZGRyKyggUkVHQURSUyApKSAmIENUUkxXT1JEICkgIT0gMCApCisjZGVmaW5lIE1DX1RFU1QoUkVHQURSUywgQ1RSTFdPUkQpCSgocmVhZGwoZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBRFJTKSkgJiBDVFJMV09SRCkgIT0gMCkKIAogLyogI2RlZmluZSBXUjcxNDYoUkVHQVJEUyxDVFJMV09SRCkKICAgICB3cml0ZWwoQ1RSTFdPUkQsKHVpbnQzMl90KShkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FSRFMpKSkgKi8KLSNkZWZpbmUgV1I3MTQ2KFJFR0FSRFMsQ1RSTFdPUkQpIHdyaXRlbChDVFJMV09SRCxkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FSRFMpKQorI2RlZmluZSBXUjcxNDYoUkVHQVJEUywgQ1RSTFdPUkQpIHdyaXRlbChDVFJMV09SRCwgZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBUkRTKSkKIAogLyogI2RlZmluZSBSUjcxNDYoUkVHQVJEUykKICAgICByZWFkbCgodWludDMyX3QpKGRldnByaXYtPmJhc2VfYWRkcisoUkVHQVJEUykpKSAqLwogI2RlZmluZSBSUjcxNDYoUkVHQVJEUykJCXJlYWRsKGRldnByaXYtPmJhc2VfYWRkcisoUkVHQVJEUykpCiAKLSNkZWZpbmUgQlVHRklYX1NUUkVHKFJFR0FEUlMpICAgKCBSRUdBRFJTIC0gNCApCisjZGVmaW5lIEJVR0ZJWF9TVFJFRyhSRUdBRFJTKSAgIChSRUdBRFJTIC0gNCkKIAotLy8gV3JpdGUgYSB0aW1lIHNsb3QgY29udHJvbCByZWNvcmQgdG8gVFNMMi4KLSNkZWZpbmUgVkVDVFBPUlQoIFZFQ1ROVU0gKQkJKFBfVFNMMiArICggKFZFQ1ROVU0pIDw8IDIgKSkKLSNkZWZpbmUgU0VUVkVDVCggVkVDVE5VTSwgVkVDVFZBTCApCVdSNzE0NihWRUNUUE9SVCggVkVDVE5VTSApLCAoVkVDVFZBTCkpCisvKiAgV3JpdGUgYSB0aW1lIHNsb3QgY29udHJvbCByZWNvcmQgdG8gVFNMMi4gKi8KKyNkZWZpbmUgVkVDVFBPUlQoVkVDVE5VTSkJCShQX1RTTDIgKyAoKFZFQ1ROVU0pIDw8IDIpKQorI2RlZmluZSBTRVRWRUNUKFZFQ1ROVU0sIFZFQ1RWQUwpCVdSNzE0NihWRUNUUE9SVChWRUNUTlVNKSwgKFZFQ1RWQUwpKQogCi0vLyBDb2RlIG1hY3JvcyB1c2VkIGZvciBjb25zdHJ1Y3RpbmcgSTJDIGNvbW1hbmQgYnl0ZXMuCi0jZGVmaW5lIEkyQ19CMihBVFRSLFZBTCkJKCAoIChBVFRSKSA8PCA2ICkgfCAoIChWQUwpIDw8IDI0ICkgKQotI2RlZmluZSBJMkNfQjEoQVRUUixWQUwpCSggKCAoQVRUUikgPDwgNCApIHwgKCAoVkFMKSA8PCAxNiApICkKLSNkZWZpbmUgSTJDX0IwKEFUVFIsVkFMKQkoICggKEFUVFIpIDw8IDIgKSB8ICggKFZBTCkgPDwgIDggKSApCisvKiAgQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLiAqLworI2RlZmluZSBJMkNfQjIoQVRUUiwgVkFMKQkoKChBVFRSKSA8PCA2KSB8ICgoVkFMKSA8PCAyNCkpCisjZGVmaW5lIEkyQ19CMShBVFRSLCBWQUwpCSgoKEFUVFIpIDw8IDQpIHwgKChWQUwpIDw8IDE2KSkKKyNkZWZpbmUgSTJDX0IwKEFUVFIsIFZBTCkJKCgoQVRUUikgPDwgMikgfCAoKFZBTCkgPDwgIDgpKQogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBzNjI2X3JhbmdlX3RhYmxlID0geyAyLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgczYyNl9yYW5nZV90YWJsZSA9IHsgMiwgewogCQkJUkFOR0UoLTUsIDUpLAogCQkJUkFOR0UoLTEwLCAxMCksCiAJfQogfTsKIAotc3RhdGljIGludCBzNjI2X2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IHM2MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIC8qICAgdWludDhfdAlQb2xsTGlzdDsgKi8KIC8qICAgdWludDE2X3QJQWRjRGF0YTsgKi8KQEAgLTUwNywxMCArNDk3LDEwIEBACiAJaW50IHJldDsKIAlyZXNvdXJjZV9zaXplX3QgcmVzb3VyY2VTdGFydDsKIAlkbWFfYWRkcl90IGFwcGRtYTsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi0JaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YoczYyNl9wcml2YXRlKSkgPCAwKQorCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBzNjI2X3ByaXZhdGUpKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TNjI2LCBQQ0lfREVWSUNFX0lEX1M2MjYsCkBAIC01MzUsNyArNTI1LDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKChyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShwZGV2LCAiczYyNiIpKSA8IDApIHsKKwlyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShwZGV2LCAiczYyNiIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygiczYyNl9hdHRhY2g6IGNvbWVkaV9wY2lfZW5hYmxlIGZhaWxzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNTUwLDIxICs1NDEsMjIgQEAKIAl9CiAKIAlpZiAoZGV2cHJpdi0+YmFzZV9hZGRyKSB7Ci0JCS8vZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0CisJCS8qIGRpc2FibGUgbWFzdGVyIGludGVycnVwdCAqLwogCQl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCi0JCS8vc29mdCByZXNldAorCQkvKiBzb2Z0IHJlc2V0ICovCiAJCXdyaXRlbChNQzFfU09GVF9SRVNFVCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9NQzEpOwogCi0JCS8vRE1BIEZJWE1FIERNQS8vCisJCS8qIERNQSBGSVhNRSBETUEvLyAqLwogCQlERUJVRygiczYyNl9hdHRhY2g6IERNQSBBTExPQ0FUSU9OXG4iKTsKIAotCQkvL2FkYyBidWZmZXIgYWxsb2NhdGlvbgorCQkvKiBhZGMgYnVmZmVyIGFsbG9jYXRpb24gKi8KIAkJZGV2cHJpdi0+YWxsb2NhdGVkQnVmID0gMDsKIAotCQlpZiAoKGRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSA9Ci0JCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2cHJpdi0+cGRldiwgRE1BQlVGX1NJWkUsCi0JCQkJCSZhcHBkbWEpKSA9PSBOVUxMKSB7CisJCWRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChkZXZwcml2LT5wZGV2LCBETUFCVUZfU0laRSwgJmFwcGRtYSk7CisKKwkJaWYgKGRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoInM2MjZfYXR0YWNoOiBETUEgTWVtb3J5IG1hcHBpbmcgZXJyb3JcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTU3NSw5ICs1NjcsMTAgQEAKIAogCQlkZXZwcml2LT5hbGxvY2F0ZWRCdWYrKzsKIAotCQlpZiAoKGRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSA9Ci0JCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2cHJpdi0+cGRldiwgRE1BQlVGX1NJWkUsCi0JCQkJCSZhcHBkbWEpKSA9PSBOVUxMKSB7CisJCWRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChkZXZwcml2LT5wZGV2LCBETUFCVUZfU0laRSwgICZhcHBkbWEpOworCisJCWlmIChkZXZwcml2LT5SUFNCdWYuTG9naWNhbEJhc2UgPT0gTlVMTCkgewogCQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogRE1BIE1lbW9yeSBtYXBwaW5nIGVycm9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC01OTksMTIgKzU5MiwxNCBAQAogCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+YmFzZV9hZGRyOwogCWRldi0+aXJxID0gZGV2cHJpdi0+cGRldi0+aXJxOwogCi0JLy9zZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIKKwkvKiBzZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAoZGV2LT5pcnEgPT0gMCkgewogCQlwcmludGsoIiB1bmtub3duIGlycSAoYmFkKVxuIik7CiAJfSBlbHNlIHsKLQkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHM2MjZfaXJxX2hhbmRsZXIsCi0JCQkJCUlSUUZfU0hBUkVELCAiczYyNiIsIGRldikpIDwgMCkgeworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHM2MjZfaXJxX2hhbmRsZXIsCisJCQkJCSBJUlFGX1NIQVJFRCwgInM2MjYiLCBkZXYpOworCisJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZVxuIik7CiAJCQlkZXYtPmlycSA9IDA7CiAJCX0KQEAgLTY4OSwxMTkgKzY4NCwxMjEgQEAKIAlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKIAotCS8vc3RvcCBhaV9jb21tYW5kCisJLyogc3RvcCBhaV9jb21tYW5kICovCiAJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwogCiAJaWYgKGRldnByaXYtPmJhc2VfYWRkciAmJiAoZGV2cHJpdi0+YWxsb2NhdGVkQnVmID09IDIpKSB7CiAJCWRtYV9hZGRyX3QgcFBoeXNCdWY7CiAJCXVpbnQxNl90IGNoYW47CiAKLQkJLy8gZW5hYiBERUJJIGFuZCBhdWRpbyBwaW5zLCBlbmFibGUgSTJDIGludGVyZmFjZS4KKwkJLyogIGVuYWIgREVCSSBhbmQgYXVkaW8gcGlucywgZW5hYmxlIEkyQyBpbnRlcmZhY2UuICovCiAJCU1DX0VOQUJMRShQX01DMSwgTUMxX0RFQkkgfCBNQzFfQVVESU8gfCBNQzFfSTJDKTsKLQkJLy8gQ29uZmlndXJlIERFQkkgb3BlcmF0aW5nIG1vZGUuCi0JCVdSNzE0NihQX0RFQklDRkcsIERFQklfQ0ZHX1NMQVZFMTYJLy8gTG9jYWwgYnVzIGlzIDE2Ci0JCQkvLyBiaXRzIHdpZGUuCi0JCQl8IChERUJJX1RPVVQgPDwgREVCSV9DRkdfVE9VVF9CSVQpCS8vIERlY2xhcmUgREVCSQotCQkJLy8gdHJhbnNmZXIgdGltZW91dAotCQkJLy8gaW50ZXJ2YWwuCi0JCQl8IERFQklfU1dBUAkvLyBTZXQgdXAgYnl0ZSBsYW5lCi0JCQkvLyBzdGVlcmluZy4KLQkJCXwgREVCSV9DRkdfSU5URUwpOwkvLyBJbnRlbC1jb21wYXRpYmxlCi0JCS8vIGxvY2FsIGJ1cyAoREVCSQotCQkvLyBuZXZlciB0aW1lcyBvdXQpLgorCQkvKiAgQ29uZmlndXJlIERFQkkgb3BlcmF0aW5nIG1vZGUuICovCisJCVdSNzE0NihQX0RFQklDRkcsIERFQklfQ0ZHX1NMQVZFMTYJLyogIExvY2FsIGJ1cyBpcyAxNiAqLworCQkJLyogIGJpdHMgd2lkZS4gKi8KKwkJCXwgKERFQklfVE9VVCA8PCBERUJJX0NGR19UT1VUX0JJVCkJLyogIERlY2xhcmUgREVCSSAqLworCQkJLyogIHRyYW5zZmVyIHRpbWVvdXQgKi8KKwkJCS8qICBpbnRlcnZhbC4gKi8KKwkJCXwgREVCSV9TV0FQCS8qICBTZXQgdXAgYnl0ZSBsYW5lICovCisJCQkvKiAgc3RlZXJpbmcuICovCisJCQl8IERFQklfQ0ZHX0lOVEVMKTsJLyogIEludGVsLWNvbXBhdGlibGUgKi8KKwkJLyogIGxvY2FsIGJ1cyAoREVCSSAqLworCQkvKiAgbmV2ZXIgdGltZXMgb3V0KS4gKi8KIAkJREVCVUcoInM2MjZfYXR0YWNoOiAlZCBkZWJpIGluaXQgLS0gJWRcbiIsCiAJCQlERUJJX0NGR19TTEFWRTE2IHwgKERFQklfVE9VVCA8PCBERUJJX0NGR19UT1VUX0JJVCkgfAogCQkJREVCSV9TV0FQIHwgREVCSV9DRkdfSU5URUwsCiAJCQlERUJJX0NGR19JTlRFTCB8IERFQklfQ0ZHX1RPUSB8IERFQklfQ0ZHX0lOQ1EgfAogCQkJREVCSV9DRkdfMTZRKTsKIAotCQkvL0RFQkkgSU5JVCBTNjI2IFdSNzE0NiggUF9ERUJJQ0ZHLCBERUJJX0NGR19JTlRFTCB8IERFQklfQ0ZHX1RPUQotCQkvL3wgREVCSV9DRkdfSU5DUXwgREVCSV9DRkdfMTZRKTsgLy9lbmQKKwkJLyogREVCSSBJTklUIFM2MjYgV1I3MTQ2KCBQX0RFQklDRkcsIERFQklfQ0ZHX0lOVEVMIHwgREVCSV9DRkdfVE9RICovCisJCS8qIHwgREVCSV9DRkdfSU5DUXwgREVCSV9DRkdfMTZRKTsgLy9lbmQgKi8KIAotCQkvLyBQYWdpbmcgaXMgZGlzYWJsZWQuCi0JCVdSNzE0NihQX0RFQklQQUdFLCBERUJJX1BBR0VfRElTQUJMRSk7CS8vIERpc2FibGUgTU1VIHBhZ2luZy4KKwkJLyogIFBhZ2luZyBpcyBkaXNhYmxlZC4gKi8KKwkJV1I3MTQ2KFBfREVCSVBBR0UsIERFQklfUEFHRV9ESVNBQkxFKTsJLyogIERpc2FibGUgTU1VIHBhZ2luZy4gKi8KIAotCQkvLyBJbml0IEdQSU8gc28gdGhhdCBBREMgU3RhcnQqIGlzIG5lZ2F0ZWQuCisJCS8qICBJbml0IEdQSU8gc28gdGhhdCBBREMgU3RhcnQqIGlzIG5lZ2F0ZWQuICovCiAJCVdSNzE0NihQX0dQSU8sIEdQSU9fQkFTRSB8IEdQSU8xX0hJKTsKIAotCQkvL0lzQm9hcmRSZXZBIGlzIGEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBib2FyZCBpcwotCQkvL1JldkEuCisgICAgLyogSXNCb2FyZFJldkEgaXMgYSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJvYXJkIGlzIFJldkEuCisgICAgICoKKyAgICAgKiBWRVJTSU9OIDIuMDEgQ0hBTkdFOiBSRVYgQSAmIEIgQk9BUkRTIE5PVyBTVVBQT1JURUQgQlkgRFlOQU1JQworICAgICAqIEVFUFJPTSBBRERSRVNTIFNFTEVDVElPTi4gIEluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2UsIHdoaWNoCisgICAgICogaXMgdXNlZCB0byBhY2Nlc3MgdGhlIG9uYm9hcmQgc2VyaWFsIEVFUFJPTS4gIFRoZSBFRVBST00ncyBJMkMKKyAgICAgKiBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byBhIHZhbHVlIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZQorICAgICAqIDYyNiBib2FyZCByZXZpc2lvbi4gIE9uIGFsbCBib2FyZCByZXZpc2lvbnMsIHRoZSBFRVBST00gc3RvcmVzCisgICAgICogVHJpbURBQyBjYWxpYnJhdGlvbiBjb25zdGFudHMgZm9yIGFuYWxvZyBJL08uICBPbiBSZXZCIGFuZAorICAgICAqIGhpZ2hlciBib2FyZHMsIHRoZSBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byAwIHRvIGVuYWJsZQorICAgICAqIHRoZSBFRVBST00gdG8gYWxzbyBzdG9yZSB0aGUgUENJIFN1YlZlbmRvcklEIGFuZCBTdWJEZXZpY2VJRDsKKyAgICAgKiB0aGlzIGlzIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBTQUE3MTQ2IGV4cGVjdHMgYQorICAgICAqIGNvbmZpZ3VyYXRpb24gRUVQUk9NIHRvIHJlc2lkZS4gIE9uIFJldkEgYm9hcmRzLCB0aGUgRUVQUk9NCisgICAgICogZGV2aWNlIGFkZHJlc3MsIHdoaWNoIGlzIGhhcmR3aXJlZCB0byA0LCBwcmV2ZW50cyB0aGUgU0FBNzE0NgorICAgICAqIGZyb20gcmV0cmlldmluZyBQQ0kgc3ViLUlEcywgc28gdGhlIFNBQTcxNDYgdXNlcyBpdHMgYnVpbHQtaW4KKyAgICAgKiBkZWZhdWx0IHZhbHVlcywgaW5zdGVhZC4KKyAgICAgKi8KIAotCQkvLyBWRVJTSU9OIDIuMDEgQ0hBTkdFOiBSRVYgQSAmIEIgQk9BUkRTIE5PVyBTVVBQT1JURUQgQlkgRFlOQU1JQwotCQkvLyBFRVBST00gQUREUkVTUyBTRUxFQ1RJT04uICBJbml0aWFsaXplIHRoZSBJMkMgaW50ZXJmYWNlLCB3aGljaAotCQkvLyBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgb25ib2FyZCBzZXJpYWwgRUVQUk9NLiAgVGhlIEVFUFJPTSdzIEkyQwotCQkvLyBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byBhIHZhbHVlIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZQotCQkvLyA2MjYgYm9hcmQgcmV2aXNpb24uICBPbiBhbGwgYm9hcmQgcmV2aXNpb25zLCB0aGUgRUVQUk9NIHN0b3JlcwotCQkvLyBUcmltREFDIGNhbGlicmF0aW9uIGNvbnN0YW50cyBmb3IgYW5hbG9nIEkvTy4gIE9uIFJldkIgYW5kCi0JCS8vIGhpZ2hlciBib2FyZHMsIHRoZSBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byAwIHRvIGVuYWJsZQotCQkvLyB0aGUgRUVQUk9NIHRvIGFsc28gc3RvcmUgdGhlIFBDSSBTdWJWZW5kb3JJRCBhbmQgU3ViRGV2aWNlSUQ7Ci0JCS8vIHRoaXMgaXMgdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIFNBQTcxNDYgZXhwZWN0cyBhCi0JCS8vIGNvbmZpZ3VyYXRpb24gRUVQUk9NIHRvIHJlc2lkZS4gIE9uIFJldkEgYm9hcmRzLCB0aGUgRUVQUk9NCi0JCS8vIGRldmljZSBhZGRyZXNzLCB3aGljaCBpcyBoYXJkd2lyZWQgdG8gNCwgcHJldmVudHMgdGhlIFNBQTcxNDYKLQkJLy8gZnJvbSByZXRyaWV2aW5nIFBDSSBzdWItSURzLCBzbyB0aGUgU0FBNzE0NiB1c2VzIGl0cyBidWlsdC1pbgotCQkvLyBkZWZhdWx0IHZhbHVlcywgaW5zdGVhZC4KKwkJLyogICAgIGRldnByaXYtPkkyQ2FyZHM9IElzQm9hcmRSZXZBID8gMHhBOCA6IDB4QTA7IC8vIFNldCBJMkMgRUVQUk9NICovCisJCS8qICBEZXZpY2VUeXBlICgweEEwKSAqLworCQkvKiAgYW5kIERldmljZUFkZHJlc3M8PDEuICovCiAKLQkJLy8gICAgZGV2cHJpdi0+STJDYXJkcz0gSXNCb2FyZFJldkEgPyAweEE4IDogMHhBMDsgLy8gU2V0IEkyQyBFRVBST00KLQkJLy8gRGV2aWNlVHlwZSAoMHhBMCkKLQkJLy8gYW5kIERldmljZUFkZHJlc3M8PDEuCisJCWRldnByaXYtPkkyQ0FkcnMgPSAweEEwOwkvKiAgSTJDIGRldmljZSBhZGRyZXNzIGZvciBvbmJvYXJkICovCisJCS8qICBlZXByb20ocmV2YikgKi8KIAotCQlkZXZwcml2LT5JMkNBZHJzID0gMHhBMDsJLy8gSTJDIGRldmljZSBhZGRyZXNzIGZvciBvbmJvYXJkCi0JCS8vIGVlcHJvbShyZXZiKQorCQkvKiAgSXNzdWUgYW4gSTJDIEFCT1JUIGNvbW1hbmQgdG8gaGFsdCBhbnkgSTJDIG9wZXJhdGlvbiBpbiAqLworCQkvKiBwcm9ncmVzcyBhbmQgcmVzZXQgQlVTWSBmbGFnLiAqLworCQlXUjcxNDYoUF9JMkNTVEFULCBJMkNfQ0xLU0VMIHwgSTJDX0FCT1JUKTsKKwkJLyogIFdyaXRlIEkyQyBjb250cm9sOiBhYm9ydCBhbnkgSTJDIGFjdGl2aXR5LiAqLworCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7CisJCS8qICBJbnZva2UgY29tbWFuZCAgdXBsb2FkICovCisJCXdoaWxlICgoUlI3MTQ2KFBfTUMyKSAmIE1DMl9VUExEX0lJQykgPT0gMCkKKwkJCTsKKwkJLyogIGFuZCB3YWl0IGZvciB1cGxvYWQgdG8gY29tcGxldGUuICovCiAKLQkJLy8gSXNzdWUgYW4gSTJDIEFCT1JUIGNvbW1hbmQgdG8gaGFsdCBhbnkgSTJDIG9wZXJhdGlvbiBpbgotCQkvL3Byb2dyZXNzIGFuZCByZXNldCBCVVNZIGZsYWcuCi0JCVdSNzE0NihQX0kyQ1NUQVQsIEkyQ19DTEtTRUwgfCBJMkNfQUJPUlQpOwkvLyBXcml0ZSBJMkMgY29udHJvbDoKLQkJLy8gYWJvcnQgYW55IEkyQwotCQkvLyBhY3Rpdml0eS4KLQkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOwkvLyBJbnZva2UgY29tbWFuZAotCQkvLyB1cGxvYWQKLQkJd2hpbGUgKChSUjcxNDYoUF9NQzIpICYgTUMyX1VQTERfSUlDKSA9PSAwKSA7CS8vIGFuZCB3YWl0IGZvcgotCQkvLyB1cGxvYWQgdG8KLQkJLy8gY29tcGxldGUuCi0KLQkJLy8gUGVyIFNBQTcxNDYgZGF0YSBzaGVldCwgd3JpdGUgdG8gU1RBVFVTIHJlZyB0d2ljZSB0byByZXNldCBhbGwKLQkJLy8gSTJDIGVycm9yIGZsYWdzLgorCQkvKiBQZXIgU0FBNzE0NiBkYXRhIHNoZWV0LCB3cml0ZSB0byBTVEFUVVMgcmVnIHR3aWNlIHRvCisJCSAqIHJlc2V0IGFsbCAgSTJDIGVycm9yIGZsYWdzLiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQlXUjcxNDYoUF9JMkNTVEFULCBJMkNfQ0xLU0VMKTsJLy8gV3JpdGUgSTJDIGNvbnRyb2w6IHJlc2V0Ci0JCQkvLyBlcnJvciBmbGFncy4KLQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsJLy8gSW52b2tlIGNvbW1hbmQgdXBsb2FkCi0JCQl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0lJQykpIDsJLy8gICBhbmQgd2FpdCBmb3IKLQkJCS8vICAgdXBsb2FkIHRvCi0JCQkvLyAgIGNvbXBsZXRlLgorCQkJV1I3MTQ2KFBfSTJDU1RBVCwgSTJDX0NMS1NFTCk7CisJCQkvKiAgV3JpdGUgSTJDIGNvbnRyb2w6IHJlc2V0ICBlcnJvciBmbGFncy4gKi8KKwkJCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsJLyogIEludm9rZSBjb21tYW5kIHVwbG9hZCAqLworCQkJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKQorCQkJCTsKKwkJCS8qIGFuZCB3YWl0IGZvciB1cGxvYWQgdG8gY29tcGxldGUuICovCiAJCX0KIAotCQkvLyBJbml0IGF1ZGlvIGludGVyZmFjZSBmdW5jdGlvbmFsIGF0dHJpYnV0ZXM6IHNldCBEQUMvQURDIHNlcmlhbAotCQkvLyBjbG9jayByYXRlcywgaW52ZXJ0IERBQyBzZXJpYWwgY2xvY2sgc28gdGhhdCBEQUMgZGF0YSBzZXR1cAotCQkvLyB0aW1lcyBhcmUgc2F0aXNmaWVkLCBlbmFibGUgREFDIHNlcmlhbCBjbG9jayBvdXQuCisJCS8qIEluaXQgYXVkaW8gaW50ZXJmYWNlIGZ1bmN0aW9uYWwgYXR0cmlidXRlczogc2V0IERBQy9BREMKKwkJICogc2VyaWFsIGNsb2NrIHJhdGVzLCBpbnZlcnQgREFDIHNlcmlhbCBjbG9jayBzbyB0aGF0CisJCSAqIERBQyBkYXRhIHNldHVwIHRpbWVzIGFyZSBzYXRpc2ZpZWQsIGVuYWJsZSBEQUMgc2VyaWFsCisJCSAqIGNsb2NrIG91dC4KKwkJICovCisKIAkJV1I3MTQ2KFBfQUNPTjIsIEFDT04yX0lOSVQpOwogCi0JCS8vIFNldCB1cCBUU0wxIHNsb3QgbGlzdCwgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZQotCQkvLyBhY2N1bXVsYXRpb24gb2YgQURDIGRhdGE6IFJTRDEgPSBzaGlmdCBkYXRhIGluIG9uIFNEMS4gIFNJQl9BMQotCQkvLyA9IHN0b3JlIGRhdGEgdWludDhfdCBhdCBuZXh0IGF2YWlsYWJsZSBsb2NhdGlvbiBpbiBGQiBCVUZGRVIxCi0JCS8vIHJlZ2lzdGVyLgotCQlXUjcxNDYoUF9UU0wxLCBSU0QxIHwgU0lCX0ExKTsJLy8gRmV0Y2ggQURDIGhpZ2ggZGF0YQotCQkvLyB1aW50OF90LgotCQlXUjcxNDYoUF9UU0wxICsgNCwgUlNEMSB8IFNJQl9BMSB8IEVPUyk7CS8vIEZldGNoIEFEQyBsb3cgZGF0YQotCQkvLyB1aW50OF90OyBlbmQgb2YKLQkJLy8gVFNMMS4KKwkJLyogU2V0IHVwIFRTTDEgc2xvdCBsaXN0LCB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlCisJCSAqIGFjY3VtdWxhdGlvbiBvZiBBREMgZGF0YTogUlNEMSA9IHNoaWZ0IGRhdGEgaW4gb24gU0QxLgorCQkgKiBTSUJfQTEgID0gc3RvcmUgZGF0YSB1aW50OF90IGF0IG5leHQgYXZhaWxhYmxlIGxvY2F0aW9uIGluCisJCSAqIEZCIEJVRkZFUjEgIHJlZ2lzdGVyLiAqLworCQlXUjcxNDYoUF9UU0wxLCBSU0QxIHwgU0lCX0ExKTsKKwkJLyogIEZldGNoIEFEQyBoaWdoIGRhdGEgdWludDhfdC4gKi8KKwkJV1I3MTQ2KFBfVFNMMSArIDQsIFJTRDEgfCBTSUJfQTEgfCBFT1MpOworCQkvKiAgRmV0Y2ggQURDIGxvdyBkYXRhIHVpbnQ4X3Q7IGVuZCBvZiBUU0wxLiAqLwogCi0JCS8vIGVuYWIgVFNMMSBzbG90IGxpc3Qgc28gdGhhdCBpdCBleGVjdXRlcyBhbGwgdGhlIHRpbWUuCisJCS8qICBlbmFiIFRTTDEgc2xvdCBsaXN0IHNvIHRoYXQgaXQgZXhlY3V0ZXMgYWxsIHRoZSB0aW1lLiAqLwogCQlXUjcxNDYoUF9BQ09OMSwgQUNPTjFfQURDU1RBUlQpOwogCi0JCS8vIEluaXRpYWxpemUgUlBTIHJlZ2lzdGVycyB1c2VkIGZvciBBREMuCisJCS8qICBJbml0aWFsaXplIFJQUyByZWdpc3RlcnMgdXNlZCBmb3IgQURDLiAqLwogCi0JCS8vUGh5c2ljYWwgc3RhcnQgb2YgUlBTIHByb2dyYW0uCisJCS8qIFBoeXNpY2FsIHN0YXJ0IG9mIFJQUyBwcm9ncmFtLiAqLwogCQlXUjcxNDYoUF9SUFNBRERSMSwgKHVpbnQzMl90KSBkZXZwcml2LT5SUFNCdWYuUGh5c2ljYWxCYXNlKTsKIAotCQlXUjcxNDYoUF9SUFNQQUdFMSwgMCk7CS8vIFJQUyBwcm9ncmFtIHBlcmZvcm1zIG5vCi0JCS8vIGV4cGxpY2l0IG1lbSB3cml0ZXMuCi0JCVdSNzE0NihQX1JQUzFfVE9VVCwgMCk7CS8vIERpc2FibGUgUlBTIHRpbWVvdXRzLgorCQlXUjcxNDYoUF9SUFNQQUdFMSwgMCk7CisJCS8qICBSUFMgcHJvZ3JhbSBwZXJmb3JtcyBubyBleHBsaWNpdCBtZW0gd3JpdGVzLiAqLworCQlXUjcxNDYoUF9SUFMxX1RPVVQsIDApOwkvKiAgRGlzYWJsZSBSUFMgdGltZW91dHMuICovCiAKLQkJLy8gU0FBNzE0NiBCVUcgV09SS0FST1VORC4gIEluaXRpYWxpemUgU0FBNzE0NiBBREMgaW50ZXJmYWNlIHRvIGEKLQkJLy8ga25vd24gc3RhdGUgYnkgaW52b2tpbmcgQURDcyB1bnRpbCBGQiBCVUZGRVIgMSByZWdpc3RlciBzaG93cwotCQkvLyB0aGF0IGl0IGlzIGNvcnJlY3RseSByZWNlaXZpbmcgQURDIGRhdGEuICBUaGlzIGlzIG5lY2Vzc2FyeQotCQkvLyBiZWNhdXNlIHRoZSBTQUE3MTQ2IEFEQyBpbnRlcmZhY2UgZG9lcyBub3Qgc3RhcnQgdXAgaW4gYQotCQkvLyBkZWZpbmVkIHN0YXRlIGFmdGVyIGEgUENJIHJlc2V0LgorCQkvKiBTQUE3MTQ2IEJVRyBXT1JLQVJPVU5ELiAgSW5pdGlhbGl6ZSBTQUE3MTQ2IEFEQyBpbnRlcmZhY2UKKwkJICogdG8gYSBrbm93biBzdGF0ZSBieSBpbnZva2luZyBBRENzIHVudGlsIEZCIEJVRkZFUiAxCisJCSAqIHJlZ2lzdGVyIHNob3dzIHRoYXQgaXQgaXMgY29ycmVjdGx5IHJlY2VpdmluZyBBREMgZGF0YS4KKwkJICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU0FBNzE0NiBBREMgaW50ZXJmYWNlIGRvZXMKKwkJICogbm90IHN0YXJ0IHVwIGluIGEgZGVmaW5lZCBzdGF0ZSBhZnRlciBhIFBDSSByZXNldC4KKwkJICovCiAKIC8qICAgICBQb2xsTGlzdCA9IEVPUEw7CQkJLy8gQ3JlYXRlIGEgc2ltcGxlIHBvbGxpbmcgKi8KIC8qIAkJCQkJLy8gbGlzdCBmb3IgYW5hbG9nIGlucHV0ICovCkBAIC04MjksMTE1ICs4MjYsMTIzIEBACiAvKiAJICBicmVhazsgKi8KIC8qICAgICAgIH0gKi8KIAotCQkvLyBlbmQgaW5pdEFEQworCQkvKiAgZW5kIGluaXRBREMgKi8KIAotCQkvLyBpbml0IHRoZSBEQUMgaW50ZXJmYWNlCisJCS8qICBpbml0IHRoZSBEQUMgaW50ZXJmYWNlICovCiAKLQkJLy8gSW5pdCBBdWRpbzIncyBvdXRwdXQgRE1BQyBhdHRyaWJ1dGVzOiBidXJzdCBsZW5ndGggPSAxIERXT1JELAotCQkvLyB0aHJlc2hvbGQgPSAxIERXT1JELgorCQkvKiBJbml0IEF1ZGlvMidzIG91dHB1dCBETUFDIGF0dHJpYnV0ZXM6IGJ1cnN0IGxlbmd0aCA9IDEKKwkJICogRFdPUkQsICB0aHJlc2hvbGQgPSAxIERXT1JELgorCQkgKi8KIAkJV1I3MTQ2KFBfUENJX0JUX0EsIDApOwogCi0JCS8vIEluaXQgQXVkaW8yJ3Mgb3V0cHV0IERNQSBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGUgcHJvdGVjdGlvbgotCQkvLyBhZGRyZXNzIGlzIHNldCB0byAxIERXT1JEIHBhc3QgdGhlIGJhc2UgYWRkcmVzcyBzbyB0aGF0IGEKLQkJLy8gc2luZ2xlIERXT1JEIHdpbGwgYmUgdHJhbnNmZXJyZWQgZWFjaCB0aW1lIGEgRE1BIHRyYW5zZmVyIGlzCi0JCS8vIGVuYWJsZWQuCisJCS8qIEluaXQgQXVkaW8yJ3Mgb3V0cHV0IERNQSBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGUgcHJvdGVjdGlvbgorCQkgKiBhZGRyZXNzIGlzIHNldCB0byAxIERXT1JEIHBhc3QgdGhlIGJhc2UgYWRkcmVzcyBzbyB0aGF0IGEKKwkJICogc2luZ2xlIERXT1JEIHdpbGwgYmUgdHJhbnNmZXJyZWQgZWFjaCB0aW1lIGEgRE1BIHRyYW5zZmVyIGlzCisJCSAqIGVuYWJsZWQuICovCiAKIAkJcFBoeXNCdWYgPQogCQkJZGV2cHJpdi0+QU5BQnVmLlBoeXNpY2FsQmFzZSArCiAJCQkoREFDX1dETUFCVUZfT1MgKiBzaXplb2YodWludDMyX3QpKTsKIAotCQlXUjcxNDYoUF9CQVNFQTJfT1VULCAodWludDMyX3QpIHBQaHlzQnVmKTsJLy8gQnVmZmVyIGJhc2UgYWRycy4KLQkJV1I3MTQ2KFBfUFJPVEEyX09VVCwgKHVpbnQzMl90KSAocFBoeXNCdWYgKyBzaXplb2YodWludDMyX3QpKSk7CS8vIFByb3RlY3Rpb24gYWRkcmVzcy4KKwkJV1I3MTQ2KFBfQkFTRUEyX09VVCwgKHVpbnQzMl90KSBwUGh5c0J1Zik7CS8qICBCdWZmZXIgYmFzZSBhZHJzLiAqLworCQlXUjcxNDYoUF9QUk9UQTJfT1VULCAodWludDMyX3QpIChwUGh5c0J1ZiArIHNpemVvZih1aW50MzJfdCkpKTsJLyogIFByb3RlY3Rpb24gYWRkcmVzcy4gKi8KIAotCQkvLyBDYWNoZSBBdWRpbzIncyBvdXRwdXQgRE1BIGJ1ZmZlciBsb2dpY2FsIGFkZHJlc3MuICBUaGlzIGlzCi0JCS8vIHdoZXJlIERBQyBkYXRhIGlzIGJ1ZmZlcmVkIGZvciBBMiBvdXRwdXQgRE1BIHRyYW5zZmVycy4KKwkJLyogQ2FjaGUgQXVkaW8yJ3Mgb3V0cHV0IERNQSBidWZmZXIgbG9naWNhbCBhZGRyZXNzLiAgVGhpcyBpcworCQkgKiB3aGVyZSBEQUMgZGF0YSBpcyBidWZmZXJlZCBmb3IgQTIgb3V0cHV0IERNQSB0cmFuc2ZlcnMuICovCiAJCWRldnByaXYtPnBEYWNXQnVmID0KIAkJCSh1aW50MzJfdCAqKSBkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgKwogCQkJREFDX1dETUFCVUZfT1M7CiAKLQkJLy8gQXVkaW8yJ3Mgb3V0cHV0IGNoYW5uZWxzIGRvZXMgbm90IHVzZSBwYWdpbmcuICBUaGUgcHJvdGVjdGlvbgotCQkvLyB2aW9sYXRpb24gaGFuZGxpbmcgYml0IGlzIHNldCBzbyB0aGF0IHRoZSBETUFDIHdpbGwKLQkJLy8gYXV0b21hdGljYWxseSBoYWx0IGFuZCBpdHMgUENJIGFkZHJlc3MgcG9pbnRlciB3aWxsIGJlIHJlc2V0Ci0JCS8vIHdoZW4gdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcyByZWFjaGVkLgorCQkvKiBBdWRpbzIncyBvdXRwdXQgY2hhbm5lbHMgZG9lcyBub3QgdXNlIHBhZ2luZy4gIFRoZSBwcm90ZWN0aW9uCisJCSAqIHZpb2xhdGlvbiBoYW5kbGluZyBiaXQgaXMgc2V0IHNvIHRoYXQgdGhlIERNQUMgd2lsbAorCQkgKiBhdXRvbWF0aWNhbGx5IGhhbHQgYW5kIGl0cyBQQ0kgYWRkcmVzcyBwb2ludGVyIHdpbGwgYmUgcmVzZXQKKwkJICogd2hlbiB0aGUgcHJvdGVjdGlvbiBhZGRyZXNzIGlzIHJlYWNoZWQuICovCisKIAkJV1I3MTQ2KFBfUEFHRUEyX09VVCwgOCk7CiAKLQkJLy8gSW5pdGlhbGl6ZSB0aW1lIHNsb3QgbGlzdCAyIChUU0wyKSwgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sCi0JCS8vIHRoZSBjbG9jayBnZW5lcmF0aW9uIGZvciBhbmQgc2VyaWFsaXphdGlvbiBvZiBkYXRhIHRvIGJlIHNlbnQKLQkJLy8gdG8gdGhlIERBQyBkZXZpY2VzLiAgU2xvdCAwIGlzIGEgTk9QIHRoYXQgaXMgdXNlZCB0byB0cmFwIFRTTAotCQkvLyBleGVjdXRpb247IHRoaXMgcGVybWl0cyBvdGhlciBzbG90cyB0byBiZSBzYWZlbHkgbW9kaWZpZWQKLQkJLy8gd2l0aG91dCBmaXJzdCB0dXJuaW5nIG9mZiB0aGUgVFNMIHNlcXVlbmNlciAod2hpY2ggaXMKLQkJLy8gYXBwYXJlbnRseSBpbXBvc3NpYmxlIHRvIGRvKS4gIEFsc28sIFNEMyAod2hpY2ggaXMgZHJpdmVuIGJ5IGEKLQkJLy8gcHVsbC11cCByZXNpc3RvcikgaXMgc2hpZnRlZCBpbiBhbmQgc3RvcmVkIHRvIHRoZSBNU0Igb2YKLQkJLy8gRkJfQlVGRkVSMiB0byBiZSB1c2VkIGFzIGV2aWRlbmNlIHRoYXQgdGhlIHNsb3Qgc2VxdWVuY2UgaGFzCi0JCS8vIG5vdCB5ZXQgZmluaXNoZWQgZXhlY3V0aW5nLgotCQlTRVRWRUNUKDAsIFhTRDIgfCBSU0QzIHwgU0lCX0EyIHwgRU9TKTsJLy8gU2xvdCAwOiBUcmFwIFRTTAotCQkvLyBleGVjdXRpb24sIHNoaWZ0IDB4RkYKLQkJLy8gaW50byBGQl9CVUZGRVIyLgorCQkvKiBJbml0aWFsaXplIHRpbWUgc2xvdCBsaXN0IDIgKFRTTDIpLCB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wKKwkJICogdGhlIGNsb2NrIGdlbmVyYXRpb24gZm9yIGFuZCBzZXJpYWxpemF0aW9uIG9mIGRhdGEgdG8gYmUgc2VudAorCQkgKiB0byB0aGUgREFDIGRldmljZXMuICBTbG90IDAgaXMgYSBOT1AgdGhhdCBpcyB1c2VkIHRvIHRyYXAgVFNMCisJCSAqIGV4ZWN1dGlvbjsgdGhpcyBwZXJtaXRzIG90aGVyIHNsb3RzIHRvIGJlIHNhZmVseSBtb2RpZmllZAorCQkgKiB3aXRob3V0IGZpcnN0IHR1cm5pbmcgb2ZmIHRoZSBUU0wgc2VxdWVuY2VyICh3aGljaCBpcworCQkgKiBhcHBhcmVudGx5IGltcG9zc2libGUgdG8gZG8pLiAgQWxzbywgU0QzICh3aGljaCBpcyBkcml2ZW4gYnkgYQorCQkgKiBwdWxsLXVwIHJlc2lzdG9yKSBpcyBzaGlmdGVkIGluIGFuZCBzdG9yZWQgdG8gdGhlIE1TQiBvZgorCQkgKiBGQl9CVUZGRVIyIHRvIGJlIHVzZWQgYXMgZXZpZGVuY2UgdGhhdCB0aGUgc2xvdCBzZXF1ZW5jZSBoYXMKKwkJICogbm90IHlldCBmaW5pc2hlZCBleGVjdXRpbmcuCisJCSAqLwogCi0JCS8vIEluaXRpYWxpemUgc2xvdCAxLCB3aGljaCBpcyBjb25zdGFudC4gIFNsb3QgMSBjYXVzZXMgYSBEV09SRCB0bwotCQkvLyBiZSB0cmFuc2ZlcnJlZCBmcm9tIGF1ZGlvIGNoYW5uZWwgMidzIG91dHB1dCBGSUZPIHRvIHRoZSBGSUZPJ3MKLQkJLy8gb3V0cHV0IGJ1ZmZlciBzbyB0aGF0IGl0IGNhbiBiZSBzZXJpYWxpemVkIGFuZCBzZW50IHRvIHRoZSBEQUMKLQkJLy8gZHVyaW5nIHN1YnNlcXVlbnQgc2xvdHMuICBBbGwgcmVtYWluaW5nIHNsb3RzIGFyZSBkeW5hbWljYWxseQotCQkvLyBwb3B1bGF0ZWQgYXMgcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBEQUMgZGV2aWNlLgotCQlTRVRWRUNUKDEsIExGX0EyKTsJLy8gU2xvdCAxOiBGZXRjaCBEV09SRCBmcm9tIEF1ZGlvMidzCi0JCS8vIG91dHB1dCBGSUZPLgorCQlTRVRWRUNUKDAsIFhTRDIgfCBSU0QzIHwgU0lCX0EyIHwgRU9TKTsKKwkJLyogIFNsb3QgMDogVHJhcCBUU0wgZXhlY3V0aW9uLCBzaGlmdCAweEZGIGludG8gRkJfQlVGRkVSMi4gKi8KIAotCQkvLyBTdGFydCBEQUMncyBhdWRpbyBpbnRlcmZhY2UgKFRTTDIpIHJ1bm5pbmcuCisJCS8qIEluaXRpYWxpemUgc2xvdCAxLCB3aGljaCBpcyBjb25zdGFudC4gIFNsb3QgMSBjYXVzZXMgYQorCQkgKiBEV09SRCB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIGF1ZGlvIGNoYW5uZWwgMidzIG91dHB1dCBGSUZPCisJCSAqIHRvIHRoZSBGSUZPJ3Mgb3V0cHV0IGJ1ZmZlciBzbyB0aGF0IGl0IGNhbiBiZSBzZXJpYWxpemVkCisJCSAqIGFuZCBzZW50IHRvIHRoZSBEQUMgZHVyaW5nIHN1YnNlcXVlbnQgc2xvdHMuICBBbGwgcmVtYWluaW5nCisJCSAqIHNsb3RzIGFyZSBkeW5hbWljYWxseSBwb3B1bGF0ZWQgYXMgcmVxdWlyZWQgYnkgdGhlIHRhcmdldAorCQkgKiBEQUMgZGV2aWNlLgorCQkgKi8KKwkJU0VUVkVDVCgxLCBMRl9BMik7CisJCS8qICBTbG90IDE6IEZldGNoIERXT1JEIGZyb20gQXVkaW8yJ3Mgb3V0cHV0IEZJRk8uICovCisKKwkJLyogIFN0YXJ0IERBQydzIGF1ZGlvIGludGVyZmFjZSAoVFNMMikgcnVubmluZy4gKi8KIAkJV1I3MTQ2KFBfQUNPTjEsIEFDT04xX0RBQ1NUQVJUKTsKIAotCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvKiBlbmQgaW5pdCBEQUMgaW50ZXJmYWNlICovCiAKLQkJLy8gZW5kIGluaXQgREFDIGludGVyZmFjZQotCi0JCS8vIEluaXQgVHJpbSBEQUNzIHRvIGNhbGlicmF0ZWQgdmFsdWVzLiAgRG8gaXQgdHdpY2UgYmVjYXVzZSB0aGUKLQkJLy8gU0FBNzE0NiBhdWRpbyBjaGFubmVsIGRvZXMgbm90IGFsd2F5cyByZXNldCBwcm9wZXJseSBhbmQKLQkJLy8gc29tZXRpbWVzIGNhdXNlcyB0aGUgZmlyc3QgZmV3IFRyaW1EQUMgd3JpdGVzIHRvIG1hbGZ1bmN0aW9uLgorCQkvKiBJbml0IFRyaW0gREFDcyB0byBjYWxpYnJhdGVkIHZhbHVlcy4gIERvIGl0IHR3aWNlIGJlY2F1c2UgdGhlCisJCSAqIFNBQTcxNDYgYXVkaW8gY2hhbm5lbCBkb2VzIG5vdCBhbHdheXMgcmVzZXQgcHJvcGVybHkgYW5kCisJCSAqIHNvbWV0aW1lcyBjYXVzZXMgdGhlIGZpcnN0IGZldyBUcmltREFDIHdyaXRlcyB0byBtYWxmdW5jdGlvbi4KKwkJICovCiAKIAkJTG9hZFRyaW1EQUNzKGRldik7Ci0JCUxvYWRUcmltREFDcyhkZXYpOwkvLyBJbnN1cmFuY2UuCisJCUxvYWRUcmltREFDcyhkZXYpOwkvKiAgSW5zdXJhbmNlLiAqLwogCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQkvLyBNYW51YWxseSBpbml0IGFsbCBnYXRlIGFycmF5IGhhcmR3YXJlIGluIGNhc2UgdGhpcyBpcyBhIHNvZnQKLQkJLy8gcmVzZXQgKHdlIGhhdmUgbm8gd2F5IG9mIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBpcyBhIHdhcm0gb3IKLQkJLy8gY29sZCBzdGFydCkuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBnYXRlIGFycmF5IHdpbGwKLQkJLy8gcmVzZXQgb25seSBpbiByZXNwb25zZSB0byBhIFBDSSBoYXJkIHJlc2V0OyB0aGVyZSBpcyBubyBzb2Z0Ci0JCS8vIHJlc2V0IGZ1bmN0aW9uLgorCQkvKiBNYW51YWxseSBpbml0IGFsbCBnYXRlIGFycmF5IGhhcmR3YXJlIGluIGNhc2UgdGhpcyBpcyBhIHNvZnQKKwkJICogcmVzZXQgKHdlIGhhdmUgbm8gd2F5IG9mIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBpcyBhIHdhcm0KKwkJICogb3IgY29sZCBzdGFydCkuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBnYXRlIGFycmF5IHdpbGwKKwkJICogcmVzZXQgb25seSBpbiByZXNwb25zZSB0byBhIFBDSSBoYXJkIHJlc2V0OyB0aGVyZSBpcyBubyBzb2Z0CisJCSAqIHJlc2V0IGZ1bmN0aW9uLiAqLwogCi0JCS8vIEluaXQgYWxsIERBQyBvdXRwdXRzIHRvIDBWIGFuZCBpbml0IGFsbCBEQUMgc2V0cG9pbnQgYW5kCi0JCS8vIHBvbGFyaXR5IGltYWdlcy4KKwkJLyogSW5pdCBhbGwgREFDIG91dHB1dHMgdG8gMFYgYW5kIGluaXQgYWxsIERBQyBzZXRwb2ludCBhbmQKKwkJICogcG9sYXJpdHkgaW1hZ2VzLgorCQkgKi8KIAkJZm9yIChjaGFuID0gMDsgY2hhbiA8IFM2MjZfREFDX0NIQU5ORUxTOyBjaGFuKyspCiAJCQlTZXREQUMoZGV2LCBjaGFuLCAwKTsKIAotCQkvLyBJbml0IGltYWdlIG9mIFdSTUlTQzIgQmF0dGVyeSBDaGFyZ2VyIEVuYWJsZWQgY29udHJvbCBiaXQuCi0JCS8vIFRoaXMgaW1hZ2UgaXMgdXNlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgY2hhcmdlciBjb250cm9sIGJpdCwKLQkJLy8gd2hpY2ggaGFzIG5vIGRpcmVjdCBoYXJkd2FyZSByZWFkYmFjayBtZWNoYW5pc20sIGlzIHF1ZXJpZWQuCisJCS8qIEluaXQgaW1hZ2Ugb2YgV1JNSVNDMiBCYXR0ZXJ5IENoYXJnZXIgRW5hYmxlZCBjb250cm9sIGJpdC4KKwkJICogVGhpcyBpbWFnZSBpcyB1c2VkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBjaGFyZ2VyIGNvbnRyb2wgYml0LAorCQkgKiB3aGljaCBoYXMgbm8gZGlyZWN0IGhhcmR3YXJlIHJlYWRiYWNrIG1lY2hhbmlzbSwgaXMgcXVlcmllZC4KKwkJICovCiAJCWRldnByaXYtPkNoYXJnZUVuYWJsZWQgPSAwOwogCi0JCS8vIEluaXQgaW1hZ2Ugb2Ygd2F0Y2hkb2cgdGltZXIgaW50ZXJ2YWwgaW4gV1JNSVNDMi4gIFRoaXMgaW1hZ2UKLQkJLy8gbWFpbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBiaXRzIG9mIE1JU0MyIGFyZQotCQkvLyBjb250aW51b3VzbHkgcmVzZXQgdG8gemVybyBhcyBsb25nIGFzIHRoZSBXRCB0aW1lciBpcyBkaXNhYmxlZC4KKwkJLyogSW5pdCBpbWFnZSBvZiB3YXRjaGRvZyB0aW1lciBpbnRlcnZhbCBpbiBXUk1JU0MyLiAgVGhpcyBpbWFnZQorCQkgKiBtYWludGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGJpdHMgb2YgTUlTQzIgYXJlCisJCSAqIGNvbnRpbnVvdXNseSByZXNldCB0byB6ZXJvIGFzIGxvbmcgYXMgdGhlIFdEIHRpbWVyIGlzIGRpc2FibGVkLgorCQkgKi8KIAkJZGV2cHJpdi0+V0RJbnRlcnZhbCA9IDA7CiAKLQkJLy8gSW5pdCBDb3VudGVyIEludGVycnVwdCBlbmFiIG1hc2sgZm9yIFJETUlTQzIuICBUaGlzIG1hc2sgaXMKLQkJLy8gYXBwbGllZCBhZ2FpbnN0IE1JU0MyIHdoZW4gdGVzdGluZyB0byBkZXRlcm1pbmUgd2hpY2ggdGltZXIKLQkJLy8gZXZlbnRzIGFyZSByZXF1ZXN0aW5nIGludGVycnVwdCBzZXJ2aWNlLgorCQkvKiBJbml0IENvdW50ZXIgSW50ZXJydXB0IGVuYWIgbWFzayBmb3IgUkRNSVNDMi4gIFRoaXMgbWFzayBpcworCQkgKiBhcHBsaWVkIGFnYWluc3QgTUlTQzIgd2hlbiB0ZXN0aW5nIHRvIGRldGVybWluZSB3aGljaCB0aW1lcgorCQkgKiBldmVudHMgYXJlIHJlcXVlc3RpbmcgaW50ZXJydXB0IHNlcnZpY2UuCisJCSAqLwogCQlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgPSAwOwogCi0JCS8vIEluaXQgY291bnRlcnMuCisJCS8qICBJbml0IGNvdW50ZXJzLiAqLwogCQlDb3VudGVyc0luaXQoZGV2KTsKIAotCQkvLyBXaXRob3V0IG1vZGlmeWluZyB0aGUgc3RhdGUgb2YgdGhlIEJhdHRlcnkgQmFja3VwIGVuYWIsIGRpc2FibGUKLQkJLy8gdGhlIHdhdGNoZG9nIHRpbWVyLCBzZXQgRElPIGNoYW5uZWxzIDAtNSB0byBvcGVyYXRlIGluIHRoZQotCQkvLyBzdGFuZGFyZCBESU8gKHZzLiBjb3VudGVyIG92ZXJmbG93KSBtb2RlLCBkaXNhYmxlIHRoZSBiYXR0ZXJ5Ci0JCS8vIGNoYXJnZXIsIGFuZCByZXNldCB0aGUgd2F0Y2hkb2cgaW50ZXJ2YWwgc2VsZWN0b3IgdG8gemVyby4KKwkJLyogV2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0YXRlIG9mIHRoZSBCYXR0ZXJ5IEJhY2t1cCBlbmFiLCBkaXNhYmxlCisJCSAqIHRoZSB3YXRjaGRvZyB0aW1lciwgc2V0IERJTyBjaGFubmVscyAwLTUgdG8gb3BlcmF0ZSBpbiB0aGUKKwkJICogc3RhbmRhcmQgRElPICh2cy4gY291bnRlciBvdmVyZmxvdykgbW9kZSwgZGlzYWJsZSB0aGUgYmF0dGVyeQorCQkgKiBjaGFyZ2VyLCBhbmQgcmVzZXQgdGhlIHdhdGNoZG9nIGludGVydmFsIHNlbGVjdG9yIHRvIHplcm8uCisJCSAqLwogCQlXcml0ZU1JU0MyKGRldiwgKHVpbnQxNl90KSAoREVCSXJlYWQoZGV2LAogCQkJCQlMUF9SRE1JU0MyKSAmIE1JU0MyX0JBVFRfRU5BQkxFKSk7CiAKLQkJLy8gSW5pdGlhbGl6ZSB0aGUgZGlnaXRhbCBJL08gc3Vic3lzdGVtLgorCQkvKiAgSW5pdGlhbGl6ZSB0aGUgZGlnaXRhbCBJL08gc3Vic3lzdGVtLiAqLwogCQlzNjI2X2Rpb19pbml0KGRldik7CiAKLQkJLy9lbmFibGUgaW50ZXJydXB0IHRlc3QKLQkJLy8gd3JpdGVsKElSUV9HUElPMyB8IElSUV9SUFMxLGRldnByaXYtPmJhc2VfYWRkcitQX0lFUik7CisJCS8qIGVuYWJsZSBpbnRlcnJ1cHQgdGVzdCAqLworCQkvKiAgd3JpdGVsKElSUV9HUElPMyB8IElSUV9SUFMxLGRldnByaXYtPmJhc2VfYWRkcitQX0lFUik7ICovCiAJfQogCiAJREVCVUcoInM2MjZfYXR0YWNoOiBjb21lZGklZCBzNjI2IGF0dGFjaGVkICUwNHhcbiIsIGRldi0+bWlub3IsCkBAIC05NDYsOSArOTUxLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGxzYW1wbF90IHM2MjZfYWlfcmVnX3RvX3VpbnQoaW50IGRhdGEpCitzdGF0aWMgdW5zaWduZWQgaW50IHM2MjZfYWlfcmVnX3RvX3VpbnQoaW50IGRhdGEpCiB7Ci0JbHNhbXBsX3QgdGVtcGRhdGE7CisJdW5zaWduZWQgaW50IHRlbXBkYXRhOwogCiAJdGVtcGRhdGEgPSAoZGF0YSA+PiAxOCk7CiAJaWYgKHRlbXBkYXRhICYgMHgyMDAwKQpAQCAtOTU5LDIxICs5NjQsMjEgQEAKIAlyZXR1cm4gdGVtcGRhdGE7CiB9CiAKLS8qIHN0YXRpYyBsc2FtcGxfdCBzNjI2X3VpbnRfdG9fcmVnKGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKXsgKi8KKy8qIHN0YXRpYyB1bnNpZ25lZCBpbnQgczYyNl91aW50X3RvX3JlZyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IGRhdGEpeyAqLwogLyogICByZXR1cm4gMDsgKi8KIC8qIH0gKi8KIAogc3RhdGljIGlycXJldHVybl90IHM2MjZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2NtZCAqY21kOwotCWVuY19wcml2YXRlICprOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJc3RydWN0IGVuY19wcml2YXRlICprOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50MzJfdCAqcmVhZGFkZHI7CiAJdWludDMyX3QgaXJxdHlwZSwgaXJxc3RhdHVzOwogCWludCBpID0gMDsKLQlzYW1wbF90IHRlbXBkYXRhOworCXNob3J0IHRlbXBkYXRhOwogCXVpbnQ4X3QgZ3JvdXA7CiAJdWludDE2X3QgaXJxYml0OwogCkBAIC05ODEsNDcgKzk4Niw0OCBAQAogCiAJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkKIAkJcmV0dXJuIElSUV9OT05FOwotCS8vIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsCisJLyogIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsICovCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQkvL3NhdmUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBzdGF0ZQorCS8qIHNhdmUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBzdGF0ZSAqLwogCWlycXN0YXR1cyA9IHJlYWRsKGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAotCS8vcmVhZCBpbnRlcnJ1cHQgdHlwZQorCS8qIHJlYWQgaW50ZXJydXB0IHR5cGUgKi8KIAlpcnF0eXBlID0gcmVhZGwoZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JU1IpOwogCi0JLy9kaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQKKwkvKiBkaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCi0JLy9jbGVhciBpbnRlcnJ1cHQKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoaXJxdHlwZSwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JU1IpOwogCi0JLy9kbyBzb21ldGhpbmdzCisJLyogZG8gc29tZXRoaW5ncyAqLwogCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgdHlwZSAlZFxuIiwgaXJxdHlwZSk7CiAKIAlzd2l0Y2ggKGlycXR5cGUpIHsKLQljYXNlIElSUV9SUFMxOgkJLy8gZW5kX29mX3NjYW4gb2NjdXJzCisJY2FzZSBJUlFfUlBTMToJCS8qICBlbmRfb2Zfc2NhbiBvY2N1cnMgKi8KIAogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogUlBTMSBpcnEgZGV0ZWN0ZWRcbiIpOwogCi0JCS8vIG1hbmFnZSBhaSBzdWJkZXZpY2UKKwkJLyogIG1hbmFnZSBhaSBzdWJkZXZpY2UgKi8KIAkJcyA9IGRldi0+c3ViZGV2aWNlczsKIAkJY21kID0gJihzLT5hc3luYy0+Y21kKTsKIAotCQkvLyBJbml0IHB0ciB0byBETUEgYnVmZmVyIHRoYXQgaG9sZHMgbmV3IEFEQyBkYXRhLiAgV2Ugc2tpcCB0aGUKLQkJLy8gZmlyc3QgdWludDE2X3QgaW4gdGhlIGJ1ZmZlciBiZWNhdXNlIGl0IGNvbnRhaW5zIGp1bmsgZGF0YSBmcm9tCi0JCS8vIHRoZSBmaW5hbCBBREMgb2YgdGhlIHByZXZpb3VzIHBvbGwgbGlzdCBzY2FuLgorCQkvKiBJbml0IHB0ciB0byBETUEgYnVmZmVyIHRoYXQgaG9sZHMgbmV3IEFEQyBkYXRhLiAgV2Ugc2tpcCB0aGUKKwkJICogZmlyc3QgdWludDE2X3QgaW4gdGhlIGJ1ZmZlciBiZWNhdXNlIGl0IGNvbnRhaW5zIGp1bmsgZGF0YSBmcm9tCisJCSAqIHRoZSBmaW5hbCBBREMgb2YgdGhlIHByZXZpb3VzIHBvbGwgbGlzdCBzY2FuLgorCQkgKi8KIAkJcmVhZGFkZHIgPSAoaW50MzJfdCAqKSBkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgKyAxOwogCi0JCS8vIGdldCB0aGUgZGF0YSBhbmQgaGFuZCBpdCBvdmVyIHRvIGNvbWVkaQorCQkvKiAgZ2V0IHRoZSBkYXRhIGFuZCBoYW5kIGl0IG92ZXIgdG8gY29tZWRpICovCiAJCWZvciAoaSA9IDA7IGkgPCAocy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4pOyBpKyspIHsKLQkJCS8vIENvbnZlcnQgQURDIGRhdGEgdG8gMTYtYml0IGludGVnZXIgdmFsdWVzIGFuZCBjb3B5IHRvIGFwcGxpY2F0aW9uCi0JCQkvLyBidWZmZXIuCisJCQkvKiAgQ29udmVydCBBREMgZGF0YSB0byAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIGNvcHkgdG8gYXBwbGljYXRpb24gKi8KKwkJCS8qICBidWZmZXIuICovCiAJCQl0ZW1wZGF0YSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoKGludCkqcmVhZGFkZHIpOwogCQkJcmVhZGFkZHIrKzsKIAotCQkJLy9wdXQgZGF0YSBpbnRvIHJlYWQgYnVmZmVyCi0JCQkvLyBjb21lZGlfYnVmX3B1dChzLT5hc3luYywgdGVtcGRhdGEpOworCQkJLyogcHV0IGRhdGEgaW50byByZWFkIGJ1ZmZlciAqLworCQkJLyogIGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB0ZW1wZGF0YSk7ICovCiAJCQlpZiAoY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCB0ZW1wZGF0YSkgPT0gMCkKIAkJCQlwcmludGsoInM2MjZfaXJxX2hhbmRsZXI6IGNmY193cml0ZV90b19idWZmZXIgZXJyb3IhXG4iKTsKIApAQCAtMTAyOSw3ICsxMDM1LDcgQEAKIAkJCQlpLCB0ZW1wZGF0YSk7CiAJCX0KIAotCQkvL2VuZCBvZiBzY2FuIG9jY3VycworCQkvKiBlbmQgb2Ygc2NhbiBvY2N1cnMgKi8KIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOwogCiAJCWlmICghKGRldnByaXYtPmFpX2NvbnRpbm91cykpCkBAIC0xMDM3LDEzICsxMDQzLDEzIEBACiAJCWlmIChkZXZwcml2LT5haV9zYW1wbGVfY291bnQgPD0gMCkgewogCQkJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwogCi0JCQkvLyBTdG9wIFJQUyBwcm9ncmFtLgorCQkJLyogIFN0b3AgUlBTIHByb2dyYW0uICovCiAJCQlNQ19ESVNBQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCi0JCQkvL3NlbmQgZW5kIG9mIGFjcXVpc2l0aW9uCisJCQkvKiBzZW5kIGVuZCBvZiBhY3F1aXNpdGlvbiAqLwogCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCi0JCQkvL2Rpc2FibGUgbWFzdGVyIGludGVycnVwdAorCQkJLyogZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0ICovCiAJCQlpcnFzdGF0dXMgPSAwOwogCQl9CiAKQEAgLTEwNTQsNDAgKzEwNjAsNDAgQEAKIAogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEV4dGVybmFsIHRyaWdnZXIgaXMgc2V0ISEhXG4iKTsKIAkJfQotCQkvLyB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUKKwkJLyogIHRlbGwgY29tZWRpIHRoYXQgZGF0YSBpcyB0aGVyZSAqLwogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogZXZlbnRzICVkXG4iLCBzLT5hc3luYy0+ZXZlbnRzKTsKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7CiAJCWJyZWFrOwotCWNhc2UgSVJRX0dQSU8zOgkvL2NoZWNrIGRpbyBhbmQgY29udGVyIGludGVycnVwdAorCWNhc2UgSVJRX0dQSU8zOgkvKiBjaGVjayBkaW8gYW5kIGNvbnRlciBpbnRlcnJ1cHQgKi8KIAogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogR1BJTzMgaXJxIGRldGVjdGVkXG4iKTsKIAotCQkvLyBtYW5hZ2UgYWkgc3ViZGV2aWNlCisJCS8qICBtYW5hZ2UgYWkgc3ViZGV2aWNlICovCiAJCXMgPSBkZXYtPnN1YmRldmljZXM7CiAJCWNtZCA9ICYocy0+YXN5bmMtPmNtZCk7CiAKLQkJLy9zNjI2X2Rpb19jbGVhcl9pcnEoZGV2KTsKKwkJLyogczYyNl9kaW9fY2xlYXJfaXJxKGRldik7ICovCiAKIAkJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgUzYyNl9ESU9fQkFOS1M7IGdyb3VwKyspIHsKIAkJCWlycWJpdCA9IDA7Ci0JCQkvL3JlYWQgaW50ZXJydXB0IHR5cGUKKwkJCS8qIHJlYWQgaW50ZXJydXB0IHR5cGUgKi8KIAkJCWlycWJpdCA9IERFQklyZWFkKGRldiwKLQkJCQkoKGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKKwkJCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJCQlncm91cCktPnByaXZhdGUpLT5SRENhcEZsZyk7CiAKLQkJCS8vY2hlY2sgaWYgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBmcm9tIGRpbyBjaGFubmVscworCQkJLyogY2hlY2sgaWYgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBmcm9tIGRpbyBjaGFubmVscyAqLwogCQkJaWYgKGlycWJpdCkgewogCQkJCXM2MjZfZGlvX3Jlc2V0X2lycShkZXYsIGdyb3VwLCBpcnFiaXQpOwogCQkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBjaGVjayBpbnRlcnJ1cHQgb24gZGlvIGdyb3VwICVkICVkXG4iLCBncm91cCwgaSk7CiAJCQkJaWYgKGRldnByaXYtPmFpX2NtZF9ydW5uaW5nKSB7Ci0JCQkJCS8vY2hlY2sgaWYgaW50ZXJydXB0IGlzIGFuIGFpIGFjcXVpc2l0aW9uIHN0YXJ0IHRyaWdnZXIKKwkJCQkJLyogY2hlY2sgaWYgaW50ZXJydXB0IGlzIGFuIGFpIGFjcXVpc2l0aW9uIHN0YXJ0IHRyaWdnZXIgKi8KIAkJCQkJaWYgKChpcnFiaXQgPj4gKGNtZC0+c3RhcnRfYXJnIC0KIAkJCQkJCQkJKDE2ICogZ3JvdXApKSkKIAkJCQkJCT09IDEKIAkJCQkJCSYmIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNpZXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsIGNtZC0+c3RhcnRfYXJnKTsKIAotCQkJCQkJLy8gU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4KKwkJCQkJCS8qICBTdGFydCBleGVjdXRpbmcgdGhlIFJQUyBwcm9ncmFtLiAqLwogCQkJCQkJTUNfRU5BQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogYXF1aXNpdGlvbiBzdGFydCB0cmlnZ2VyZWQhISFcbiIpOwpAQCAtMTExMCw3ICsxMTE2LDcgQEAKIAkJCQkJCVRSSUdfRVhUKSB7CiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNpZXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogCi0JCQkJCQkvLyBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuCisJCQkJCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogCQkJCQkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfQURDX1JQUyk7CiAKIAkJCQkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBzY2FuIHRyaWdnZXJlZCEhISAlZFxuIiwgZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50KTsKQEAgLTExNTEsNyArMTE1Nyw3IEBACiAJCQkJCQlUUklHX0VYVCkgewogCQkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjaWV2ZWQgZnJvbSBjaGFubmVsICVkXG4iLCBjbWQtPmNvbnZlcnRfYXJnKTsKIAotCQkJCQkJLy8gVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLgorCQkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIAkJCQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX0FEQ19SUFMpOwogCiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogYWRjIGNvbnZlcnQgdHJpZ2dlcmVkISEhXG4iKTsKQEAgLTExNzUsMTAgKzExODEsMTAgQEAKIAkJCX0KIAkJfQogCi0JCS8vcmVhZCBpbnRlcnJ1cHQgdHlwZQorCQkvKiByZWFkIGludGVycnVwdCB0eXBlICovCiAJCWlycWJpdCA9IERFQklyZWFkKGRldiwgTFBfUkRNSVNDMik7CiAKLQkJLy9jaGVjayBpbnRlcnJ1cHQgb24gY291bnRlcnMKKwkJLyogY2hlY2sgaW50ZXJydXB0IG9uIGNvdW50ZXJzICovCiAJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBjaGVjayBjb3VudGVycyBpbnRlcnJ1cHQgJWRcbiIsCiAJCQlpcnFiaXQpOwogCkBAIC0xMTg2LDM1ICsxMTkyLDM1IEBACiAJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IG9uIGNvdW50ZXIgMUEgb3ZlcmZsb3dcbiIpOwogCQkJayA9ICZlbmNwcml2WzBdOwogCi0JCQkvL2NsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcKKwkJCS8qIGNsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcgKi8KIAkJCWstPlJlc2V0Q2FwRmxhZ3MoZGV2LCBrKTsKIAkJfQogCQlpZiAoaXJxYml0ICYgSVJRX0NPSU5UMkEpIHsKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgb24gY291bnRlciAyQSBvdmVyZmxvd1xuIik7CiAJCQlrID0gJmVuY3ByaXZbMV07CiAKLQkJCS8vY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZworCQkJLyogY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZyAqLwogCQkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCQl9CiAJCWlmIChpcnFiaXQgJiBJUlFfQ09JTlQzQSkgewogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCBvbiBjb3VudGVyIDNBIG92ZXJmbG93XG4iKTsKIAkJCWsgPSAmZW5jcHJpdlsyXTsKIAotCQkJLy9jbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnCisJCQkvKiBjbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnICovCiAJCQlrLT5SZXNldENhcEZsYWdzKGRldiwgayk7CiAJCX0KIAkJaWYgKGlycWJpdCAmIElSUV9DT0lOVDFCKSB7CiAJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IG9uIGNvdW50ZXIgMUIgb3ZlcmZsb3dcbiIpOwogCQkJayA9ICZlbmNwcml2WzNdOwogCi0JCQkvL2NsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcKKwkJCS8qIGNsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcgKi8KIAkJCWstPlJlc2V0Q2FwRmxhZ3MoZGV2LCBrKTsKIAkJfQogCQlpZiAoaXJxYml0ICYgSVJRX0NPSU5UMkIpIHsKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgb24gY291bnRlciAyQiBvdmVyZmxvd1xuIik7CiAJCQlrID0gJmVuY3ByaXZbNF07CiAKLQkJCS8vY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZworCQkJLyogY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZyAqLwogCQkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCiAJCQlpZiAoZGV2cHJpdi0+YWlfY29udmVydF9jb3VudCA+IDApIHsKQEAgLTEyMjUsNyArMTIzMSw3IEBACiAJCQkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewogCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogY29udmVyIHRpbWVyIHRyaWdnZXIhISEgJWRcbiIsIGRldnByaXYtPmFpX2NvbnZlcnRfY291bnQpOwogCi0JCQkJCS8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4KKwkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIAkJCQkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfQURDX1JQUyk7CiAJCQkJfQogCQkJfQpAQCAtMTIzNCwxMyArMTI0MCwxMyBAQAogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCBvbiBjb3VudGVyIDNCIG92ZXJmbG93XG4iKTsKIAkJCWsgPSAmZW5jcHJpdls1XTsKIAotCQkJLy9jbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnCisJCQkvKiBjbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnICovCiAJCQlrLT5SZXNldENhcEZsYWdzKGRldiwgayk7CiAKIAkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKIAkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogc2NhbiB0aW1lciB0cmlnZ2VyISEhXG4iKTsKIAotCQkJCS8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4KKwkJCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogCQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX0FEQ19SUFMpOwogCQkJfQogCkBAIC0xMjUzLDcgKzEyNTksNyBAQAogCQl9CiAJfQogCi0JLy9lbmFibGUgaW50ZXJydXB0CisJLyogZW5hYmxlIGludGVycnVwdCAqLwogCXdyaXRlbChpcnFzdGF0dXMsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAogCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBleGl0IGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuXG4iKTsKQEAgLTEyNjIsMjEgKzEyNjgsMjEgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgczYyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2cHJpdikgewotCQkvL3N0b3AgYWlfY29tbWFuZAorCQkvKiBzdG9wIGFpX2NvbW1hbmQgKi8KIAkJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwogCiAJCWlmIChkZXZwcml2LT5iYXNlX2FkZHIpIHsKLQkJCS8vaW50ZXJydXB0IG1hc2sKLQkJCVdSNzE0NihQX0lFUiwgMCk7CS8vIERpc2FibGUgbWFzdGVyIGludGVycnVwdC4KLQkJCVdSNzE0NihQX0lTUiwgSVJRX0dQSU8zIHwgSVJRX1JQUzEpOwkvLyBDbGVhciBib2FyZCdzIElSUSBzdGF0dXMgZmxhZy4KKwkJCS8qIGludGVycnVwdCBtYXNrICovCisJCQlXUjcxNDYoUF9JRVIsIDApOwkvKiAgRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0LiAqLworCQkJV1I3MTQ2KFBfSVNSLCBJUlFfR1BJTzMgfCBJUlFfUlBTMSk7CS8qICBDbGVhciBib2FyZCdzIElSUSBzdGF0dXMgZmxhZy4gKi8KIAotCQkJLy8gRGlzYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIgYW5kIGJhdHRlcnkgY2hhcmdlci4KKwkJCS8qICBEaXNhYmxlIHRoZSB3YXRjaGRvZyB0aW1lciBhbmQgYmF0dGVyeSBjaGFyZ2VyLiAqLwogCQkJV3JpdGVNSVNDMihkZXYsIDApOwogCi0JCQkvLyBDbG9zZSBhbGwgaW50ZXJmYWNlcyBvbiA3MTQ2IGRldmljZS4KKwkJCS8qICBDbG9zZSBhbGwgaW50ZXJmYWNlcyBvbiA3MTQ2IGRldmljZS4gKi8KIAkJCVdSNzE0NihQX01DMSwgTUMxX1NIVVRET1dOKTsKIAkJCVdSNzE0NihQX0FDT04xLCBBQ09OMV9CQVNFKTsKIApAQCAtMTI4NCwxOCArMTI5MCwxNSBAQAogCQkJQ2xvc2VETUFCKGRldiwgJmRldnByaXYtPkFOQUJ1ZiwgRE1BQlVGX1NJWkUpOwogCQl9CiAKLQkJaWYgKGRldi0+aXJxKSB7CisJCWlmIChkZXYtPmlycSkKIAkJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJfQogCi0JCWlmIChkZXZwcml2LT5iYXNlX2FkZHIpIHsKKwkJaWYgKGRldnByaXYtPmJhc2VfYWRkcikKIAkJCWlvdW5tYXAoZGV2cHJpdi0+YmFzZV9hZGRyKTsKLQkJfQogCiAJCWlmIChkZXZwcml2LT5wZGV2KSB7Ci0JCQlpZiAoZGV2cHJpdi0+Z290X3JlZ2lvbnMpIHsKKwkJCWlmIChkZXZwcml2LT5nb3RfcmVnaW9ucykKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGRldik7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wZGV2KTsKIAkJfQogCX0KQEAgLTEzMDgsMjEzICsxMzExLDIyNSBAQAogLyoKICAqIHRoaXMgZnVuY3Rpb25zIGJ1aWxkIHRoZSBSUFMgcHJvZ3JhbSBmb3IgaGFyZHdhcmUgZHJpdmVuIGFjcXVpc3Rpb24KICAqLwotdm9pZCBSZXNldEFEQyhjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90ICogcHBsKQordm9pZCBSZXNldEFEQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90ICpwcGwpCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgKnBSUFM7CiAJdWludDMyX3QgSm1wQWRyczsKIAl1aW50MTZfdCBpOwogCXVpbnQxNl90IG47CiAJdWludDMyX3QgTG9jYWxQUEw7Ci0JY29tZWRpX2NtZCAqY21kID0gJihkZXYtPnN1YmRldmljZXMtPmFzeW5jLT5jbWQpOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmKGRldi0+c3ViZGV2aWNlcy0+YXN5bmMtPmNtZCk7CiAKLQkvLyBTdG9wIFJQUyBwcm9ncmFtIGluIGNhc2UgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuCisJLyogIFN0b3AgUlBTIHByb2dyYW0gaW4gY2FzZSBpdCBpcyBjdXJyZW50bHkgcnVubmluZy4gKi8KIAlNQ19ESVNBQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCi0JLy8gU2V0IHN0YXJ0aW5nIGxvZ2ljYWwgYWRkcmVzcyB0byB3cml0ZSBSUFMgY29tbWFuZHMuCisJLyogIFNldCBzdGFydGluZyBsb2dpY2FsIGFkZHJlc3MgdG8gd3JpdGUgUlBTIGNvbW1hbmRzLiAqLwogCXBSUFMgPSAodWludDMyX3QgKikgZGV2cHJpdi0+UlBTQnVmLkxvZ2ljYWxCYXNlOwogCi0JLy8gSW5pdGlhbGl6ZSBSUFMgaW5zdHJ1Y3Rpb24gcG9pbnRlci4KKwkvKiAgSW5pdGlhbGl6ZSBSUFMgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KIAlXUjcxNDYoUF9SUFNBRERSMSwgKHVpbnQzMl90KSBkZXZwcml2LT5SUFNCdWYuUGh5c2ljYWxCYXNlKTsKIAotCS8vIENvbnN0cnVjdCBSUFMgcHJvZ3JhbSBpbiBSUFNCdWYgRE1BIGJ1ZmZlcgorCS8qICBDb25zdHJ1Y3QgUlBTIHByb2dyYW0gaW4gUlBTQnVmIERNQSBidWZmZXIgKi8KIAogCWlmIChjbWQgIT0gTlVMTCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CiAJCURFQlVHKCJSZXNldEFEQzogc2Nhbl9iZWdpbiBwYXVzZSBpbnNlcnRlZFxuIik7Ci0JCS8vIFdhaXQgZm9yIFN0YXJ0IHRyaWdnZXIuCisJCS8qICBXYWl0IGZvciBTdGFydCB0cmlnZ2VyLiAqLwogCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX1NJR0FEQzsKIAkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfU0lHQURDOwogCX0KLQkvLyBTQUE3MTQ2IEJVRyBXT1JLQVJPVU5EIERvIGEgZHVtbXkgREVCSSBXcml0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5Ci0JLy8gYmVjYXVzZSB0aGUgZmlyc3QgUlBTIERFQkkgV3JpdGUgZm9sbG93aW5nIGEgbm9uLVJQUyBERUJJIHdyaXRlCi0JLy8gc2VlbXMgdG8gYWx3YXlzIGZhaWwuICBJZiB3ZSBkb24ndCBkbyB0aGlzIGR1bW15IHdyaXRlLCB0aGUgQURDCi0JLy8gZ2FpbiBtaWdodCBub3QgYmUgc2V0IHRvIHRoZSB2YWx1ZSByZXF1aXJlZCBmb3IgdGhlIGZpcnN0IHNsb3QgaW4KLQkvLyB0aGUgcG9sbCBsaXN0OyB0aGUgQURDIGdhaW4gd291bGQgaW5zdGVhZCByZW1haW4gdW5jaGFuZ2VkIGZyb20KLQkvLyB0aGUgcHJldmlvdXNseSBwcm9ncmFtbWVkIHZhbHVlLgotCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQ01EID4+IDIpOwkvLyBXcml0ZSBERUJJIFdyaXRlIGNvbW1hbmQKLQkvLyBhbmQgYWRkcmVzcyB0byBzaGFkb3cgUkFNLgotCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9HU0VMOwotCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CS8vIFdyaXRlIERFQkkgaW1tZWRpYXRlIGRhdGEKLQkvLyB0byBzaGFkb3cgUkFNOgotCSpwUlBTKysgPSBHU0VMX0JJUE9MQVI1VjsJLy8gYXJiaXRyYXJ5IGltbWVkaWF0ZSBkYXRhCi0JLy8gdmFsdWUuCi0JKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsJLy8gUmVzZXQgInNoYWRvdyBSQU0KLQkvLyB1cGxvYWRlZCIgZmxhZy4KLQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvLyBJbnZva2Ugc2hhZG93IFJBTSB1cGxvYWQuCi0JKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19ERUJJOwkvLyBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvIGZpbmlzaC4KIAotCS8vIERpZ2l0aXplIGFsbCBzbG90cyBpbiB0aGUgcG9sbCBsaXN0LiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEKLQkvLyBmb3IgbG9vcCB0byBsaW1pdCB0aGUgc2xvdCBjb3VudCB0byAxNiBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbgotCS8vIGZvcmdvdCB0byBzZXQgdGhlIEVPUEwgZmxhZyBpbiB0aGUgZmluYWwgc2xvdC4KKwkvKiBTQUE3MTQ2IEJVRyBXT1JLQVJPVU5EIERvIGEgZHVtbXkgREVCSSBXcml0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5CisJICogYmVjYXVzZSB0aGUgZmlyc3QgUlBTIERFQkkgV3JpdGUgZm9sbG93aW5nIGEgbm9uLVJQUyBERUJJIHdyaXRlCisJICogc2VlbXMgdG8gYWx3YXlzIGZhaWwuICBJZiB3ZSBkb24ndCBkbyB0aGlzIGR1bW15IHdyaXRlLCB0aGUgQURDCisJICogZ2FpbiBtaWdodCBub3QgYmUgc2V0IHRvIHRoZSB2YWx1ZSByZXF1aXJlZCBmb3IgdGhlIGZpcnN0IHNsb3QgaW4KKwkgKiB0aGUgcG9sbCBsaXN0OyB0aGUgQURDIGdhaW4gd291bGQgaW5zdGVhZCByZW1haW4gdW5jaGFuZ2VkIGZyb20KKwkgKiB0aGUgcHJldmlvdXNseSBwcm9ncmFtbWVkIHZhbHVlLgorCSAqLworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQ01EID4+IDIpOworCS8qIFdyaXRlIERFQkkgV3JpdGUgY29tbWFuZCBhbmQgYWRkcmVzcyB0byBzaGFkb3cgUkFNLiAqLworCisJKnBSUFMrKyA9IERFQklfQ01EX1dSV09SRCB8IExQX0dTRUw7CisJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklBRCA+PiAyKTsKKwkvKiAgV3JpdGUgREVCSSBpbW1lZGlhdGUgZGF0YSAgdG8gc2hhZG93IFJBTTogKi8KKworCSpwUlBTKysgPSBHU0VMX0JJUE9MQVI1VjsKKwkvKiAgYXJiaXRyYXJ5IGltbWVkaWF0ZSBkYXRhICB2YWx1ZS4gKi8KKworCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX0RFQkk7CisJLyogIFJlc2V0ICJzaGFkb3cgUkFNICB1cGxvYWRlZCIgZmxhZy4gKi8KKwkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvKiAgSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLiAqLworCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfREVCSTsJLyogIFdhaXQgZm9yIHNoYWRvdyB1cGxvYWQgdG8gZmluaXNoLiAqLworCisJLyogRGlnaXRpemUgYWxsIHNsb3RzIGluIHRoZSBwb2xsIGxpc3QuIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYQorCSAqIGZvciBsb29wIHRvIGxpbWl0IHRoZSBzbG90IGNvdW50IHRvIDE2IGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uCisJICogZm9yZ290IHRvIHNldCB0aGUgRU9QTCBmbGFnIGluIHRoZSBmaW5hbCBzbG90LgorCSAqLwogCWZvciAoZGV2cHJpdi0+QWRjSXRlbXMgPSAwOyBkZXZwcml2LT5BZGNJdGVtcyA8IDE2OyBkZXZwcml2LT5BZGNJdGVtcysrKSB7Ci0JCS8vIENvbnZlcnQgYXBwbGljYXRpb24ncyBwb2xsIGxpc3QgaXRlbSB0byBwcml2YXRlIGJvYXJkIGNsYXNzCi0JCS8vIGZvcm1hdC4gIEVhY2ggYXBwIHBvbGwgbGlzdCBpdGVtIGlzIGFuIHVpbnQ4X3Qgd2l0aCBmb3JtCi0JCS8vIChFT1BMLHgseCxSQU5HRSxDSEFOPDM6MD4pLCB3aGVyZSBSQU5HRSBjb2RlIGluZGljYXRlcyAwID0KLQkJLy8gKy0xMFYsIDEgPSArLTVWLCBhbmQgRU9QTCA9IEVuZCBvZiBQb2xsIExpc3QgbWFya2VyLgorCSAvKiBDb252ZXJ0IGFwcGxpY2F0aW9uJ3MgcG9sbCBsaXN0IGl0ZW0gdG8gcHJpdmF0ZSBib2FyZCBjbGFzcworCSAgKiBmb3JtYXQuICBFYWNoIGFwcCBwb2xsIGxpc3QgaXRlbSBpcyBhbiB1aW50OF90IHdpdGggZm9ybQorCSAgKiAoRU9QTCx4LHgsUkFOR0UsQ0hBTjwzOjA+KSwgd2hlcmUgUkFOR0UgY29kZSBpbmRpY2F0ZXMgMCA9CisJICAqICstMTBWLCAxID0gKy01ViwgYW5kIEVPUEwgPSBFbmQgb2YgUG9sbCBMaXN0IG1hcmtlci4KKwkgICovCiAJCUxvY2FsUFBMID0KIAkJCSgqcHBsIDw8IDgpIHwgKCpwcGwgJiAweDEwID8gR1NFTF9CSVBPTEFSNVYgOgogCQkJR1NFTF9CSVBPTEFSMTBWKTsKIAotCQkvLyBTd2l0Y2ggQURDIGFuYWxvZyBnYWluLgotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUNNRCA+PiAyKTsJLy8gV3JpdGUgREVCSSBjb21tYW5kCi0JCS8vIGFuZCBhZGRyZXNzIHRvCi0JCS8vIHNoYWRvdyBSQU0uCisJCS8qICBTd2l0Y2ggQURDIGFuYWxvZyBnYWluLiAqLworCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUNNRCA+PiAyKTsJLyogIFdyaXRlIERFQkkgY29tbWFuZCAqLworCQkvKiAgYW5kIGFkZHJlc3MgdG8gKi8KKwkJLyogIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9HU0VMOwotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOwkvLyBXcml0ZSBERUJJCi0JCS8vIGltbWVkaWF0ZSBkYXRhIHRvCi0JCS8vIHNoYWRvdyBSQU0uCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CS8qICBXcml0ZSBERUJJICovCisJCS8qICBpbW1lZGlhdGUgZGF0YSB0byAqLworCQkvKiAgc2hhZG93IFJBTS4gKi8KIAkJKnBSUFMrKyA9IExvY2FsUFBMOwotCQkqcFJQUysrID0gUlBTX0NMUlNJR05BTCB8IFJQU19ERUJJOwkvLyBSZXNldCAic2hhZG93IFJBTSB1cGxvYWRlZCIKLQkJLy8gZmxhZy4KLQkJKnBSUFMrKyA9IFJQU19VUExPQUQgfCBSUFNfREVCSTsJLy8gSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLgotCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0RFQkk7CS8vIFdhaXQgZm9yIHNoYWRvdyB1cGxvYWQgdG8KLQkJLy8gZmluaXNoLgorCQkqcFJQUysrID0gUlBTX0NMUlNJR05BTCB8IFJQU19ERUJJOwkvKiAgUmVzZXQgInNoYWRvdyBSQU0gdXBsb2FkZWQiICovCisJCS8qICBmbGFnLiAqLworCQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvKiAgSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLiAqLworCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0RFQkk7CS8qICBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvICovCisJCS8qICBmaW5pc2guICovCiAKLQkJLy8gU2VsZWN0IEFEQyBhbmFsb2cgaW5wdXQgY2hhbm5lbC4KLQkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklDTUQgPj4gMik7CS8vIFdyaXRlIERFQkkgY29tbWFuZAotCQkvLyBhbmQgYWRkcmVzcyB0bwotCQkvLyBzaGFkb3cgUkFNLgorCQkvKiAgU2VsZWN0IEFEQyBhbmFsb2cgaW5wdXQgY2hhbm5lbC4gKi8KKwkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklDTUQgPj4gMik7CisJCS8qICBXcml0ZSBERUJJIGNvbW1hbmQgYW5kIGFkZHJlc3MgdG8gIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9JU0VMOwotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOwkvLyBXcml0ZSBERUJJCi0JCS8vIGltbWVkaWF0ZSBkYXRhIHRvCi0JCS8vIHNoYWRvdyBSQU0uCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CisJCS8qICBXcml0ZSBERUJJIGltbWVkaWF0ZSBkYXRhIHRvIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBMb2NhbFBQTDsKLQkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsJLy8gUmVzZXQgInNoYWRvdyBSQU0gdXBsb2FkZWQiCi0JCS8vIGZsYWcuCi0JCSpwUlBTKysgPSBSUFNfVVBMT0FEIHwgUlBTX0RFQkk7CS8vIEludm9rZSBzaGFkb3cgUkFNIHVwbG9hZC4KLQkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19ERUJJOwkvLyBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvCi0JCS8vIGZpbmlzaC4KKwkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsKKwkJLyogIFJlc2V0ICJzaGFkb3cgUkFNIHVwbG9hZGVkIiAgZmxhZy4gKi8KIAotCQkvLyBEZWxheSBhdCBsZWFzdCAxMCBtaWNyb3NlY29uZHMgZm9yIGFuYWxvZyBpbnB1dCBzZXR0bGluZy4KLQkJLy8gSW5zdGVhZCBvZiBwYWRkaW5nIHdpdGggTk9Qcywgd2UgdXNlIFJQU19KVU1QIGluc3RydWN0aW9ucwotCQkvLyBoZXJlOyB0aGlzIGFsbG93cyB1cyB0byBwcm9kdWNlIGEgbG9uZ2VyIGRlbGF5IHRoYW4gaXMKLQkJLy8gcG9zc2libGUgd2l0aCBOT1BzIGJlY2F1c2UgZWFjaCBSUFNfSlVNUCBmbHVzaGVzIHRoZSBSUFMnCi0JCS8vIGluc3RydWN0aW9uIHByZWZldGNoIHBpcGVsaW5lLgorCQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOworCQkvKiAgSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLiAqLworCisJCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfREVCSTsKKwkJLyogIFdhaXQgZm9yIHNoYWRvdyB1cGxvYWQgdG8gZmluaXNoLiAqLworCisJCS8qIERlbGF5IGF0IGxlYXN0IDEwIG1pY3Jvc2Vjb25kcyBmb3IgYW5hbG9nIGlucHV0IHNldHRsaW5nLgorCQkgKiBJbnN0ZWFkIG9mIHBhZGRpbmcgd2l0aCBOT1BzLCB3ZSB1c2UgUlBTX0pVTVAgaW5zdHJ1Y3Rpb25zCisJCSAqIGhlcmU7IHRoaXMgYWxsb3dzIHVzIHRvIHByb2R1Y2UgYSBsb25nZXIgZGVsYXkgdGhhbiBpcworCQkgKiBwb3NzaWJsZSB3aXRoIE5PUHMgYmVjYXVzZSBlYWNoIFJQU19KVU1QIGZsdXNoZXMgdGhlIFJQUycKKwkJICogaW5zdHJ1Y3Rpb24gcHJlZmV0Y2ggcGlwZWxpbmUuCisJCSAqLwogCQlKbXBBZHJzID0KIAkJCSh1aW50MzJfdCkgZGV2cHJpdi0+UlBTQnVmLlBoeXNpY2FsQmFzZSArCiAJCQkodWludDMyX3QpICgodW5zaWduZWQgbG9uZylwUlBTIC0KIAkJCSh1bnNpZ25lZCBsb25nKWRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSk7CiAJCWZvciAoaSA9IDA7IGkgPCAoMTAgKiBSUFNDTEtfUEVSX1VTIC8gMik7IGkrKykgewotCQkJSm1wQWRycyArPSA4OwkvLyBSZXBlYXQgdG8gaW1wbGVtZW50IHRpbWUgZGVsYXk6Ci0JCQkqcFJQUysrID0gUlBTX0pVTVA7CS8vIEp1bXAgdG8gbmV4dCBSUFMgaW5zdHJ1Y3Rpb24uCisJCQlKbXBBZHJzICs9IDg7CS8qICBSZXBlYXQgdG8gaW1wbGVtZW50IHRpbWUgZGVsYXk6ICovCisJCQkqcFJQUysrID0gUlBTX0pVTVA7CS8qICBKdW1wIHRvIG5leHQgUlBTIGluc3RydWN0aW9uLiAqLwogCQkJKnBSUFMrKyA9IEptcEFkcnM7CiAJCX0KIAogCQlpZiAoY21kICE9IE5VTEwgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykgewogCQkJREVCVUcoIlJlc2V0QURDOiBjb252ZXJ0IHBhdXNlIGluc2VydGVkXG4iKTsKLQkJCS8vIFdhaXQgZm9yIFN0YXJ0IHRyaWdnZXIuCisJCQkvKiAgV2FpdCBmb3IgU3RhcnQgdHJpZ2dlci4gKi8KIAkJCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfU0lHQURDOwogCQkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfU0lHQURDOwogCQl9Ci0JCS8vIFN0YXJ0IEFEQyBieSBwdWxzaW5nIEdQSU8xLgotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLy8gQmVnaW4gQURDIFN0YXJ0IHB1bHNlLgorCQkvKiAgU3RhcnQgQURDIGJ5IHB1bHNpbmcgR1BJTzEuICovCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvKiAgQmVnaW4gQURDIFN0YXJ0IHB1bHNlLiAqLwogCQkqcFJQUysrID0gR1BJT19CQVNFIHwgR1BJTzFfTE87CiAJCSpwUlBTKysgPSBSUFNfTk9QOwotCQkvLyBWRVJTSU9OIDIuMDMgQ0hBTkdFOiBTVFJFVENIIE9VVCBBREMgU1RBUlQgUFVMU0UuCi0JCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvLyBFbmQgQURDIFN0YXJ0IHB1bHNlLgorCQkvKiAgVkVSU0lPTiAyLjAzIENIQU5HRTogU1RSRVRDSCBPVVQgQURDIFNUQVJUIFBVTFNFLiAqLworCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLyogIEVuZCBBREMgU3RhcnQgcHVsc2UuICovCiAJCSpwUlBTKysgPSBHUElPX0JBU0UgfCBHUElPMV9ISTsKIAotCQkvLyBXYWl0IGZvciBBREMgdG8gY29tcGxldGUgKEdQSU8yIGlzIGFzc2VydGVkIGhpZ2ggd2hlbiBBREMgbm90Ci0JCS8vIGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gc2hpZnQgaW50byBGQgotCQkvLyBCVUZGRVIgMSByZWdpc3Rlci4KLQkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19HUElPMjsJLy8gV2FpdCBmb3IgQURDIGRvbmUuCisJCS8qIFdhaXQgZm9yIEFEQyB0byBjb21wbGV0ZSAoR1BJTzIgaXMgYXNzZXJ0ZWQgaGlnaCB3aGVuIEFEQyBub3QKKwkJICogYnVzeSkgYW5kIGZvciBkYXRhIGZyb20gcHJldmlvdXMgY29udmVyc2lvbiB0byBzaGlmdCBpbnRvIEZCCisJCSAqIEJVRkZFUiAxIHJlZ2lzdGVyLgorCQkgKi8KKwkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19HUElPMjsJLyogIFdhaXQgZm9yIEFEQyBkb25lLiAqLwogCi0JCS8vIFRyYW5zZmVyIEFEQyBkYXRhIGZyb20gRkIgQlVGRkVSIDEgcmVnaXN0ZXIgdG8gRE1BIGJ1ZmZlci4KKwkJLyogIFRyYW5zZmVyIEFEQyBkYXRhIGZyb20gRkIgQlVGRkVSIDEgcmVnaXN0ZXIgdG8gRE1BIGJ1ZmZlci4gKi8KIAkJKnBSUFMrKyA9IFJQU19TVFJFRyB8IChCVUdGSVhfU1RSRUcoUF9GQl9CVUZGRVIxKSA+PiAyKTsKIAkJKnBSUFMrKyA9CiAJCQkodWludDMyX3QpIGRldnByaXYtPkFOQUJ1Zi5QaHlzaWNhbEJhc2UgKwogCQkJKGRldnByaXYtPkFkY0l0ZW1zIDw8IDIpOwogCi0JCS8vIElmIHRoaXMgc2xvdCdzIEVuZE9mUG9sbExpc3QgZmxhZyBpcyBzZXQsIGFsbCBjaGFubmVscyBoYXZlCi0JCS8vIG5vdyBiZWVuIHByb2Nlc3NlZC4KKwkJLyogIElmIHRoaXMgc2xvdCdzIEVuZE9mUG9sbExpc3QgZmxhZyBpcyBzZXQsIGFsbCBjaGFubmVscyBoYXZlICovCisJCS8qICBub3cgYmVlbiBwcm9jZXNzZWQuICovCiAJCWlmICgqcHBsKysgJiBFT1BMKSB7Ci0JCQlkZXZwcml2LT5BZGNJdGVtcysrOwkvLyBBZGp1c3QgcG9sbCBsaXN0IGl0ZW0gY291bnQuCi0JCQlicmVhazsJLy8gRXhpdCBwb2xsIGxpc3QgcHJvY2Vzc2luZyBsb29wLgorCQkJZGV2cHJpdi0+QWRjSXRlbXMrKzsJLyogIEFkanVzdCBwb2xsIGxpc3QgaXRlbSBjb3VudC4gKi8KKwkJCWJyZWFrOwkvKiAgRXhpdCBwb2xsIGxpc3QgcHJvY2Vzc2luZyBsb29wLiAqLwogCQl9CiAJfQogCURFQlVHKCJSZXNldEFEQzogQURDIGl0ZW1zICVkIFxuIiwgZGV2cHJpdi0+QWRjSXRlbXMpOwogCi0JLy8gVkVSU0lPTiAyLjAxIENIQU5HRTogREVMQVkgQ0hBTkdFRCBGUk9NIDI1ME5TIHRvIDJVUy4gIEFsbG93IHRoZQotCS8vIEFEQyB0byBzdGFiaWxpemUgZm9yIDIgbWljcm9zZWNvbmRzIGJlZm9yZSBzdGFydGluZyB0aGUgZmluYWwKLQkvLyAoZHVtbXkpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50Ci0JLy8gdGltZSBiZXR3ZWVuIGxhc3QgY29udmVyc2lvbiBmaW5pc2hlZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBkdW1teQotCS8vIGNvbnZlcnNpb24uICBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBsYXN0IGNvbnZlcnNpb24ncyBkYXRhIHZhbHVlCi0JLy8gaXMgc29tZXRpbWVzIHNldCB0byB0aGUgcHJldmlvdXMgY29udmVyc2lvbidzIGRhdGEgdmFsdWUuCisJLyogVkVSU0lPTiAyLjAxIENIQU5HRTogREVMQVkgQ0hBTkdFRCBGUk9NIDI1ME5TIHRvIDJVUy4gIEFsbG93IHRoZQorCSAqIEFEQyB0byBzdGFiaWxpemUgZm9yIDIgbWljcm9zZWNvbmRzIGJlZm9yZSBzdGFydGluZyB0aGUgZmluYWwKKwkgKiAoZHVtbXkpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50CisJICogdGltZSBiZXR3ZWVuIGxhc3QgY29udmVyc2lvbiBmaW5pc2hlZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBkdW1teQorCSAqIGNvbnZlcnNpb24uICBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBsYXN0IGNvbnZlcnNpb24ncyBkYXRhIHZhbHVlCisJICogaXMgc29tZXRpbWVzIHNldCB0byB0aGUgcHJldmlvdXMgY29udmVyc2lvbidzIGRhdGEgdmFsdWUuCisJICovCiAJZm9yIChuID0gMDsgbiA8ICgyICogUlBTQ0xLX1BFUl9VUyk7IG4rKykKIAkJKnBSUFMrKyA9IFJQU19OT1A7CiAKLQkvLyBTdGFydCBhIGR1bW15IGNvbnZlcnNpb24gdG8gY2F1c2UgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdAotCS8vIGNvbnZlcnNpb24gb2YgaW50ZXJlc3QgdG8gYmUgc2hpZnRlZCBpbi4KLQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLy8gQmVnaW4gQURDIFN0YXJ0IHB1bHNlLgorCS8qIFN0YXJ0IGEgZHVtbXkgY29udmVyc2lvbiB0byBjYXVzZSB0aGUgZGF0YSBmcm9tIHRoZSBsYXN0CisJICogY29udmVyc2lvbiBvZiBpbnRlcmVzdCB0byBiZSBzaGlmdGVkIGluLgorCSAqLworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvKiAgQmVnaW4gQURDIFN0YXJ0IHB1bHNlLiAqLwogCSpwUlBTKysgPSBHUElPX0JBU0UgfCBHUElPMV9MTzsKIAkqcFJQUysrID0gUlBTX05PUDsKLQkvLyBWRVJTSU9OIDIuMDMgQ0hBTkdFOiBTVFJFVENIIE9VVCBBREMgU1RBUlQgUFVMU0UuCi0JKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0dQSU8gPj4gMik7CS8vIEVuZCBBREMgU3RhcnQgcHVsc2UuCisJLyogVkVSU0lPTiAyLjAzIENIQU5HRTogU1RSRVRDSCBPVVQgQURDIFNUQVJUIFBVTFNFLiAqLworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvKiAgRW5kIEFEQyBTdGFydCBwdWxzZS4gKi8KIAkqcFJQUysrID0gR1BJT19CQVNFIHwgR1BJTzFfSEk7CiAKLQkvLyBXYWl0IGZvciB0aGUgZGF0YSBmcm9tIHRoZSBsYXN0IGNvbnZlcnNpb24gb2YgaW50ZXJlc3QgdG8gYXJyaXZlCi0JLy8gaW4gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuCi0JKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19HUElPMjsJLy8gV2FpdCBmb3IgQURDIGRvbmUuCisJLyogV2FpdCBmb3IgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdCBjb252ZXJzaW9uIG9mIGludGVyZXN0IHRvIGFycml2ZQorCSAqIGluIEZCIEJVRkZFUiAxIHJlZ2lzdGVyLgorCSAqLworCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfR1BJTzI7CS8qICBXYWl0IGZvciBBREMgZG9uZS4gKi8KIAotCS8vIFRyYW5zZmVyIGZpbmFsIEFEQyBkYXRhIGZyb20gRkIgQlVGRkVSIDEgcmVnaXN0ZXIgdG8gRE1BIGJ1ZmZlci4KLQkqcFJQUysrID0gUlBTX1NUUkVHIHwgKEJVR0ZJWF9TVFJFRyhQX0ZCX0JVRkZFUjEpID4+IDIpOwkvLworCS8qICBUcmFuc2ZlciBmaW5hbCBBREMgZGF0YSBmcm9tIEZCIEJVRkZFUiAxIHJlZ2lzdGVyIHRvIERNQSBidWZmZXIuICovCisJKnBSUFMrKyA9IFJQU19TVFJFRyB8IChCVUdGSVhfU1RSRUcoUF9GQl9CVUZGRVIxKSA+PiAyKTsJLyogICovCiAJKnBSUFMrKyA9CiAJCSh1aW50MzJfdCkgZGV2cHJpdi0+QU5BQnVmLlBoeXNpY2FsQmFzZSArCiAJCShkZXZwcml2LT5BZGNJdGVtcyA8PCAyKTsKIAotCS8vIEluZGljYXRlIEFEQyBzY2FuIGxvb3AgaXMgZmluaXNoZWQuCi0JLy8gKnBSUFMrKz0gUlBTX0NMUlNJR05BTCB8IFJQU19TSUdBREMgOyAgLy8gU2lnbmFsIFJlYWRBREMoKSB0aGF0IHNjYW4gaXMgZG9uZS4KKwkvKiAgSW5kaWNhdGUgQURDIHNjYW4gbG9vcCBpcyBmaW5pc2hlZC4gKi8KKwkvKiAgKnBSUFMrKz0gUlBTX0NMUlNJR05BTCB8IFJQU19TSUdBREMgOyAgLy8gU2lnbmFsIFJlYWRBREMoKSB0aGF0IHNjYW4gaXMgZG9uZS4gKi8KIAotCS8vaW52b2tlIGludGVycnVwdAorCS8qIGludm9rZSBpbnRlcnJ1cHQgKi8KIAlpZiAoZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPT0gMSkgewogCQlERUJVRygiUmVzZXRBREM6IGluc2VydCBpcnEgaW4gQURDIFJQUyB0YXNrXG4iKTsKIAkJKnBSUFMrKyA9IFJQU19JUlE7CiAJfQotCS8vIFJlc3RhcnQgUlBTIHByb2dyYW0gYXQgaXRzIGJlZ2lubmluZy4KLQkqcFJQUysrID0gUlBTX0pVTVA7CS8vIEJyYW5jaCB0byBzdGFydCBvZiBSUFMgcHJvZ3JhbS4KKwkvKiAgUmVzdGFydCBSUFMgcHJvZ3JhbSBhdCBpdHMgYmVnaW5uaW5nLiAqLworCSpwUlBTKysgPSBSUFNfSlVNUDsJLyogIEJyYW5jaCB0byBzdGFydCBvZiBSUFMgcHJvZ3JhbS4gKi8KIAkqcFJQUysrID0gKHVpbnQzMl90KSBkZXZwcml2LT5SUFNCdWYuUGh5c2ljYWxCYXNlOwogCi0JLy8gRW5kIG9mIFJQUyBwcm9ncmFtIGJ1aWxkCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLyogIEVuZCBvZiBSUFMgcHJvZ3JhbSBidWlsZCAqLwogfQogCiAvKiBUTyBDT01QTEVURSwgSUYgTkVDRVNTQVJZICovCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogc3RhdGljIGludCBzNjI2X2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldixjb21lZGlfc3ViZGV2aWNlICpzLGNvbWVkaV9pbnNuICppbnNuLGxzYW1wbF90ICpkYXRhKSAqLworLyogc3RhdGljIGludCBzNjI2X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgKi8KIC8qIHsgKi8KIC8qICAgcmVnaXN0ZXIgdWludDhfdAlpOyAqLwogLyogICByZWdpc3RlciBpbnQzMl90CSpyZWFkYWRkcjsgKi8KIAogLyogICBERUJVRygiYXM2MjZfYWlfcmluc246IGFpX3JpbnNuIGVudGVyIFxuIik7ICAqLwogCi0vKiAgIC8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KKy8qICAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogLyogICBNQ19FTkFCTEUoIFBfTUMyLCBNQzJfQURDX1JQUyApOyAqLwogCi0vKiAgIC8vIFdhaXQgdW50aWwgQURDIHNjYW4gbG9vcCBpcyBmaW5pc2hlZCAoUlBTIFNpZ25hbCAwIHJlc2V0KS4gKi8KKy8qICAgV2FpdCB1bnRpbCBBREMgc2NhbiBsb29wIGlzIGZpbmlzaGVkIChSUFMgU2lnbmFsIDAgcmVzZXQpLiAqLwogLyogICB3aGlsZSAoIE1DX1RFU1QoIFBfTUMyLCBNQzJfQURDX1JQUyApICk7ICovCiAKLS8qICAgLy8gSW5pdCBwdHIgdG8gRE1BIGJ1ZmZlciB0aGF0IGhvbGRzIG5ldyBBREMgZGF0YS4gIFdlIHNraXAgdGhlICovCi0vKiAgIC8vIGZpcnN0IHVpbnQxNl90IGluIHRoZSBidWZmZXIgYmVjYXVzZSBpdCBjb250YWlucyBqdW5rIGRhdGEgZnJvbSAqLwotLyogICAvLyB0aGUgZmluYWwgQURDIG9mIHRoZSBwcmV2aW91cyBwb2xsIGxpc3Qgc2Nhbi4gKi8KKy8qIEluaXQgcHRyIHRvIERNQSBidWZmZXIgdGhhdCBob2xkcyBuZXcgQURDIGRhdGEuICBXZSBza2lwIHRoZQorICogZmlyc3QgdWludDE2X3QgaW4gdGhlIGJ1ZmZlciBiZWNhdXNlIGl0IGNvbnRhaW5zIGp1bmsgZGF0YSBmcm9tCisgKiB0aGUgZmluYWwgQURDIG9mIHRoZSBwcmV2aW91cyBwb2xsIGxpc3Qgc2Nhbi4KKyAqLwogLyogICByZWFkYWRkciA9ICh1aW50MzJfdCAqKWRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSArIDE7ICovCiAKLS8qICAgLy8gQ29udmVydCBBREMgZGF0YSB0byAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIGNvcHkgdG8gYXBwbGljYXRpb24gKi8KLS8qICAgLy8gYnVmZmVyLgkgKi8KKy8qICBDb252ZXJ0IEFEQyBkYXRhIHRvIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBhbmQgY29weSB0byBhcHBsaWNhdGlvbiBidWZmZXIuICovCiAvKiAgIGZvciAoIGkgPSAwOyBpIDwgZGV2cHJpdi0+QWRjSXRlbXM7IGkrKyApIHsgKi8KIC8qICAgICAqZGF0YSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoICpyZWFkYWRkcisrICk7ICovCiAvKiAgICAgREVCVUcoInM2MjZfYWlfcmluc246IGRhdGEgJWQgXG4iLCpkYXRhKTsgKi8KQEAgLTE1MjUsOCArMTU0MCw4IEBACiAvKiAgIHJldHVybiBpOyAqLwogLyogfSAqLwogCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAl1aW50MTZfdCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJdWludDE2X3QgcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CkBAIC0xNTM0LDg2ICsxNTQ5LDg3IEBACiAJdWludDMyX3QgR3Bpb0ltYWdlOwogCWludCBuOwogCi0vKiAgIC8vaW50ZXJydXB0IGNhbGwgdGVzdCAgKi8KLS8qICAgd3JpdGVsKElSUV9HUElPMyxkZXZwcml2LT5iYXNlX2FkZHIrUF9QU1IpOyAvL1dyaXRpbmcgYSBsb2dpY2FsIDEgKi8KLS8qIAkJCQkJICAgICAvL2ludG8gYW55IG9mIHRoZSBSUFNfUFNSICovCi0vKiAJCQkJCSAgICAgLy9iaXRzIGNhdXNlcyB0aGUgKi8KLS8qIAkJCQkJICAgICAvL2NvcnJlc3BvbmRpbmcgaW50ZXJydXB0ICovCi0vKiAJCQkJCSAgICAgLy90byBiZSBnZW5lcmF0ZWQgaWYgKi8KLS8qIAkJCQkJICAgICAvL2VuYWJsZWQgKi8KKyAvKiBpbnRlcnJ1cHQgY2FsbCB0ZXN0ICAqLworLyogICB3cml0ZWwoSVJRX0dQSU8zLGRldnByaXYtPmJhc2VfYWRkcitQX1BTUik7ICovCisJLyogV3JpdGluZyBhIGxvZ2ljYWwgMSBpbnRvIGFueSBvZiB0aGUgUlBTX1BTUiBiaXRzIGNhdXNlcyB0aGUKKwkgKiBjb3JyZXNwb25kaW5nIGludGVycnVwdCB0byBiZSBnZW5lcmF0ZWQgaWYgZW5hYmxlZAorCSAqLwogCiAJREVCVUcoInM2MjZfYWlfaW5zbl9yZWFkOiBlbnRlcmluZ1xuIik7CiAKLQkvLyBDb252ZXJ0IGFwcGxpY2F0aW9uJ3MgQURDIHNwZWNpZmljYXRpb24gaW50byBmb3JtCi0JLy8gYXBwcm9wcmlhdGUgZm9yIHJlZ2lzdGVyIHByb2dyYW1taW5nLgorCS8qIENvbnZlcnQgYXBwbGljYXRpb24ncyBBREMgc3BlY2lmaWNhdGlvbiBpbnRvIGZvcm0KKwkgKiAgYXBwcm9wcmlhdGUgZm9yIHJlZ2lzdGVyIHByb2dyYW1taW5nLgorCSAqLwogCWlmIChyYW5nZSA9PSAwKQogCQlBZGNTcGVjID0gKGNoYW4gPDwgOCkgfCAoR1NFTF9CSVBPTEFSNVYpOwogCWVsc2UKIAkJQWRjU3BlYyA9IChjaGFuIDw8IDgpIHwgKEdTRUxfQklQT0xBUjEwVik7CiAKLQkvLyBTd2l0Y2ggQURDIGFuYWxvZyBnYWluLgotCURFQkl3cml0ZShkZXYsIExQX0dTRUwsIEFkY1NwZWMpOwkvLyBTZXQgZ2Fpbi4KKwkvKiAgU3dpdGNoIEFEQyBhbmFsb2cgZ2Fpbi4gKi8KKwlERUJJd3JpdGUoZGV2LCBMUF9HU0VMLCBBZGNTcGVjKTsJLyogIFNldCBnYWluLiAqLwogCi0JLy8gU2VsZWN0IEFEQyBhbmFsb2cgaW5wdXQgY2hhbm5lbC4KLQlERUJJd3JpdGUoZGV2LCBMUF9JU0VMLCBBZGNTcGVjKTsJLy8gU2VsZWN0IGNoYW5uZWwuCisJLyogIFNlbGVjdCBBREMgYW5hbG9nIGlucHV0IGNoYW5uZWwuICovCisJREVCSXdyaXRlKGRldiwgTFBfSVNFTCwgQWRjU3BlYyk7CS8qICBTZWxlY3QgY2hhbm5lbC4gKi8KIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKIAotCQkvLyBEZWxheSAxMCBtaWNyb3NlY29uZHMgZm9yIGFuYWxvZyBpbnB1dCBzZXR0bGluZy4KKwkJLyogIERlbGF5IDEwIG1pY3Jvc2Vjb25kcyBmb3IgYW5hbG9nIGlucHV0IHNldHRsaW5nLiAqLwogCQljb21lZGlfdWRlbGF5KDEwKTsKIAotCQkvLyBTdGFydCBBREMgYnkgcHVsc2luZyBHUElPMSBsb3cuCisJCS8qICBTdGFydCBBREMgYnkgcHVsc2luZyBHUElPMSBsb3cuICovCiAJCUdwaW9JbWFnZSA9IFJSNzE0NihQX0dQSU8pOwotCQkvLyBBc3NlcnQgQURDIFN0YXJ0IGNvbW1hbmQKKwkJLyogIEFzc2VydCBBREMgU3RhcnQgY29tbWFuZCAqLwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwotCQkvLyAgIGFuZCBzdHJldGNoIGl0IG91dC4KKwkJLyogICAgYW5kIHN0cmV0Y2ggaXQgb3V0LiAqLwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwotCQkvLyBOZWdhdGUgQURDIFN0YXJ0IGNvbW1hbmQuCisJCS8qICBOZWdhdGUgQURDIFN0YXJ0IGNvbW1hbmQuICovCiAJCVdSNzE0NihQX0dQSU8sIEdwaW9JbWFnZSB8IEdQSU8xX0hJKTsKIAotCQkvLyBXYWl0IGZvciBBREMgdG8gY29tcGxldGUgKEdQSU8yIGlzIGFzc2VydGVkIGhpZ2ggd2hlbgotCQkvLyBBREMgbm90IGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8KLQkJLy8gc2hpZnQgaW50byBGQiBCVUZGRVIgMSByZWdpc3Rlci4KKwkJLyogIFdhaXQgZm9yIEFEQyB0byBjb21wbGV0ZSAoR1BJTzIgaXMgYXNzZXJ0ZWQgaGlnaCB3aGVuICovCisJCS8qICBBREMgbm90IGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gKi8KKwkJLyogIHNoaWZ0IGludG8gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKLQkJLy8gV2FpdCBmb3IgQURDIGRvbmUuCi0JCXdoaWxlICghKFJSNzE0NihQX1BTUikgJiBQU1JfR1BJTzIpKSA7CisJCS8qICBXYWl0IGZvciBBREMgZG9uZS4gKi8KKwkJd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpCisJCQk7CiAKLQkJLy8gRmV0Y2ggQURDIGRhdGEuCisJCS8qICBGZXRjaCBBREMgZGF0YS4gKi8KIAkJaWYgKG4gIT0gMCkKIAkJCWRhdGFbbiAtIDFdID0gczYyNl9haV9yZWdfdG9fdWludChSUjcxNDYoUF9GQl9CVUZGRVIxKSk7CiAKLQkJLy8gQWxsb3cgdGhlIEFEQyB0byBzdGFiaWxpemUgZm9yIDQgbWljcm9zZWNvbmRzIGJlZm9yZQotCQkvLyBzdGFydGluZyB0aGUgbmV4dCAoZmluYWwpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzCi0JCS8vIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgYmV0d2VlbiBsYXN0Ci0JCS8vIGNvbnZlcnNpb24gZmluaXNoZWQgYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dAotCQkvLyBjb252ZXJzaW9uLiAgV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgbGFzdCBjb252ZXJzaW9uJ3MKLQkJLy8gZGF0YSB2YWx1ZSBpcyBzb21ldGltZXMgc2V0IHRvIHRoZSBwcmV2aW91cwotCQkvLyBjb252ZXJzaW9uJ3MgZGF0YSB2YWx1ZS4KKwkJLyogQWxsb3cgdGhlIEFEQyB0byBzdGFiaWxpemUgZm9yIDQgbWljcm9zZWNvbmRzIGJlZm9yZQorCQkgKiBzdGFydGluZyB0aGUgbmV4dCAoZmluYWwpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzCisJCSAqIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgYmV0d2VlbiBsYXN0CisJCSAqIGNvbnZlcnNpb24gZmluaXNoZWQgYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dAorCQkgKiBjb252ZXJzaW9uLiAgV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgbGFzdCBjb252ZXJzaW9uJ3MKKwkJICogZGF0YSB2YWx1ZSBpcyBzb21ldGltZXMgc2V0IHRvIHRoZSBwcmV2aW91cworCQkgKiBjb252ZXJzaW9uJ3MgZGF0YSB2YWx1ZS4KKwkJICovCiAJCWNvbWVkaV91ZGVsYXkoNCk7CiAJfQogCi0JLy8gU3RhcnQgYSBkdW1teSBjb252ZXJzaW9uIHRvIGNhdXNlIHRoZSBkYXRhIGZyb20gdGhlCi0JLy8gcHJldmlvdXMgY29udmVyc2lvbiB0byBiZSBzaGlmdGVkIGluLgorCS8qIFN0YXJ0IGEgZHVtbXkgY29udmVyc2lvbiB0byBjYXVzZSB0aGUgZGF0YSBmcm9tIHRoZQorCSAqIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gYmUgc2hpZnRlZCBpbi4gKi8KIAlHcGlvSW1hZ2UgPSBSUjcxNDYoUF9HUElPKTsKIAotCS8vQXNzZXJ0IEFEQyBTdGFydCBjb21tYW5kCisJLyogQXNzZXJ0IEFEQyBTdGFydCBjb21tYW5kICovCiAJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKLQkvLyAgIGFuZCBzdHJldGNoIGl0IG91dC4KKwkvKiAgICBhbmQgc3RyZXRjaCBpdCBvdXQuICovCiAJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKIAlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwotCS8vIE5lZ2F0ZSBBREMgU3RhcnQgY29tbWFuZC4KKwkvKiAgTmVnYXRlIEFEQyBTdGFydCBjb21tYW5kLiAqLwogCVdSNzE0NihQX0dQSU8sIEdwaW9JbWFnZSB8IEdQSU8xX0hJKTsKIAotCS8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGFycml2ZSBpbiBGQiBCVUZGRVIgMSByZWdpc3Rlci4KKwkvKiAgV2FpdCBmb3IgdGhlIGRhdGEgdG8gYXJyaXZlIGluIEZCIEJVRkZFUiAxIHJlZ2lzdGVyLiAqLwogCi0JLy8gV2FpdCBmb3IgQURDIGRvbmUuCi0Jd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpIDsKKwkvKiAgV2FpdCBmb3IgQURDIGRvbmUuICovCisJd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpCisJCTsKIAotCS8vIEZldGNoIEFEQyBkYXRhIGZyb20gYXVkaW8gaW50ZXJmYWNlJ3MgaW5wdXQgc2hpZnQKLQkvLyByZWdpc3Rlci4KKwkvKiAgRmV0Y2ggQURDIGRhdGEgZnJvbSBhdWRpbyBpbnRlcmZhY2UncyBpbnB1dCBzaGlmdCByZWdpc3Rlci4gKi8KIAotCS8vIEZldGNoIEFEQyBkYXRhLgorCS8qICBGZXRjaCBBREMgZGF0YS4gKi8KIAlpZiAobiAhPSAwKQogCQlkYXRhW24gLSAxXSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoUlI3MTQ2KFBfRkJfQlVGRkVSMSkpOwogCkBAIC0xNjIyLDcgKzE2MzgsNyBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfbG9hZF9wb2xsbGlzdCh1aW50OF90ICogcHBsLCBjb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqcHBsLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCiAJaW50IG47CkBAIC0xNjM4LDcgKzE2NTQsNyBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgczYyNl9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCB0cmlnbnVtKQogewogCWlmICh0cmlnbnVtICE9IDApCkBAIC0xNjQ2LDcgKzE2NjIsNyBAQAogCiAJREVCVUcoInM2MjZfYWlfaW50dHJpZzogdHJpZ2dlciBhZGMgc3RhcnQuLi4iKTsKIAotCS8vIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0uCisJLyogIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0uICovCiAJTUNfRU5BQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwpAQCAtMTY1NywxMiArMTY3MywxMiBAQAogfQogCiAvKiAgVE8gQ09NUExFVEUgICovCi1zdGF0aWMgaW50IHM2MjZfYWlfY21kKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBzNjI2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAogCXVpbnQ4X3QgcHBsWzE2XTsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKLQllbmNfcHJpdmF0ZSAqazsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGVuY19wcml2YXRlICprOwogCWludCB0aWNrOwogCiAJREVCVUcoInM2MjZfYWlfY21kOiBlbnRlcmluZyBjb21tYW5kIGZ1bmN0aW9uXG4iKTsKQEAgLTE2NzIsMjAgKzE2ODgsMjAgQEAKIAkJCWRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvL2Rpc2FibGUgaW50ZXJydXB0CisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCi0JLy9jbGVhciBpbnRlcnJ1cHQgcmVxdWVzdAorCS8qIGNsZWFyIGludGVycnVwdCByZXF1ZXN0ICovCiAJd3JpdGVsKElSUV9SUFMxIHwgSVJRX0dQSU8zLCBkZXZwcml2LT5iYXNlX2FkZHIgKyBQX0lTUik7CiAKLQkvL2NsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdAorCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCAqLwogCXM2MjZfZGlvX2NsZWFyX2lycShkZXYpOwotCS8vICBzNjI2X2VuY19jbGVhcl9pcnEoZGV2KTsKKwkvKiAgIHM2MjZfZW5jX2NsZWFyX2lycShkZXYpOyAqLwogCi0JLy9yZXNldCBhaV9jbWRfcnVubmluZyBmbGFnCisJLyogcmVzZXQgYWlfY21kX3J1bm5pbmcgZmxhZyAqLwogCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMDsKIAotCS8vIHRlc3QgaWYgY21kIGlzIHZhbGlkCisJLyogIHRlc3QgaWYgY21kIGlzIHZhbGlkICovCiAJaWYgKGNtZCA9PSBOVUxMKSB7CiAJCURFQlVHKCJzNjI2X2FpX2NtZDogTlVMTCBjb21tYW5kXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzA3LDEyICsxNzIzLDEyIEBACiAJY2FzZSBUUklHX0ZPTExPVzoKIAkJYnJlYWs7CiAJY2FzZSBUUklHX1RJTUVSOgotCQkvLyBzZXQgYSBjb250ZXIgdG8gZ2VuZXJhdGUgYWRjIHRyaWdnZXIgYXQgc2Nhbl9iZWdpbl9hcmcgaW50ZXJ2YWwKKwkJLyogIHNldCBhIGNvbnRlciB0byBnZW5lcmF0ZSBhZGMgdHJpZ2dlciBhdCBzY2FuX2JlZ2luX2FyZyBpbnRlcnZhbCAqLwogCQlrID0gJmVuY3ByaXZbNV07CiAJCXRpY2sgPSBzNjI2X25zX3RvX3RpbWVyKChpbnQgKikmY21kLT5zY2FuX2JlZ2luX2FyZywKIAkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwogCi0JCS8vbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdAorCQkvKiBsb2FkIHRpbWVyIHZhbHVlIGFuZCBlbmFibGUgaW50ZXJydXB0ICovCiAJCXM2MjZfdGltZXJfbG9hZChkZXYsIGssIHRpY2spOwogCQlrLT5TZXRFbmFibGUoZGV2LCBrLCBDTEtFTkFCX0FMV0FZUyk7CiAKQEAgLTE3MjEsNyArMTczNyw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBUUklHX0VYVDoKLQkJLy8gc2V0IHRoZSBkaWdpdGFsIGxpbmUgYW5kIGludGVycnVwdCBmb3Igc2NhbiB0cmlnZ2VyCisJCS8qICBzZXQgdGhlIGRpZ2l0YWwgbGluZSBhbmQgaW50ZXJydXB0IGZvciBzY2FuIHRyaWdnZXIgKi8KIAkJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQogCQkJczYyNl9kaW9fc2V0X2lycShkZXYsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogCkBAIC0xNzM0LDE5ICsxNzUwLDE5IEBACiAJY2FzZSBUUklHX05PVzoKIAkJYnJlYWs7CiAJY2FzZSBUUklHX1RJTUVSOgotCQkvLyBzZXQgYSBjb250ZXIgdG8gZ2VuZXJhdGUgYWRjIHRyaWdnZXIgYXQgY29udmVydF9hcmcgaW50ZXJ2YWwKKwkJLyogIHNldCBhIGNvbnRlciB0byBnZW5lcmF0ZSBhZGMgdHJpZ2dlciBhdCBjb252ZXJ0X2FyZyBpbnRlcnZhbCAqLwogCQlrID0gJmVuY3ByaXZbNF07CiAJCXRpY2sgPSBzNjI2X25zX3RvX3RpbWVyKChpbnQgKikmY21kLT5jb252ZXJ0X2FyZywKIAkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwogCi0JCS8vbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdAorCQkvKiBsb2FkIHRpbWVyIHZhbHVlIGFuZCBlbmFibGUgaW50ZXJydXB0ICovCiAJCXM2MjZfdGltZXJfbG9hZChkZXYsIGssIHRpY2spOwogCQlrLT5TZXRFbmFibGUoZGV2LCBrLCBDTEtFTkFCX0lOREVYKTsKIAogCQlERUJVRygiczYyNl9haV9jbWQ6IGNvbnZlcnQgdHJpZ2dlciB0aW1lciBpcyBzZXQgd2l0aCB2YWx1ZSAlZFxuIiwgdGljayk7CiAJCWJyZWFrOwogCWNhc2UgVFJJR19FWFQ6Ci0JCS8vIHNldCB0aGUgZGlnaXRhbCBsaW5lIGFuZCBpbnRlcnJ1cHQgZm9yIGNvbnZlcnQgdHJpZ2dlcgorCQkvKiAgc2V0IHRoZSBkaWdpdGFsIGxpbmUgYW5kIGludGVycnVwdCBmb3IgY29udmVydCB0cmlnZ2VyICovCiAJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUCiAJCQkmJiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkKIAkJCXM2MjZfZGlvX3NldF9pcnEoZGV2LCBjbWQtPmNvbnZlcnRfYXJnKTsKQEAgLTE3NTgsMTIgKzE3NzQsMTIgQEAKIAogCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewogCWNhc2UgVFJJR19DT1VOVDoKLQkJLy8gZGF0YSBhcnJpdmVzIGFzIG9uZSBwYWNrZXQKKwkJLyogIGRhdGEgYXJyaXZlcyBhcyBvbmUgcGFja2V0ICovCiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CiAJCWRldnByaXYtPmFpX2NvbnRpbm91cyA9IDA7CiAJCWJyZWFrOwogCWNhc2UgVFJJR19OT05FOgotCQkvLyBjb250aW5vdXMgYXF1aXNpdGlvbgorCQkvKiAgY29udGlub3VzIGFxdWlzaXRpb24gKi8KIAkJZGV2cHJpdi0+YWlfY29udGlub3VzID0gMTsKIAkJZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50ID0gMDsKIAkJYnJlYWs7CkBAIC0xNzczLDE3ICsxNzg5LDE3IEBACiAKIAlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CiAJY2FzZSBUUklHX05PVzoKLQkJLy8gVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLgotCQkvLyBNQ19FTkFCTEUoIFBfTUMyLCBNQzJfQURDX1JQUyApOworCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLworCQkvKiAgTUNfRU5BQkxFKCBQX01DMiwgTUMyX0FEQ19SUFMgKTsgKi8KIAotCQkvLyBTdGFydCBleGVjdXRpbmcgdGhlIFJQUyBwcm9ncmFtLgorCQkvKiAgU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4gKi8KIAkJTUNfRU5BQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCiAJCURFQlVHKCJzNjI2X2FpX2NtZDogQURDIHRyaWdnZXJlZFxuIik7CiAJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBUUklHX0VYVDoKLQkJLy9jb25maWd1cmUgRElPIGNoYW5uZWwgZm9yIGFjcXVpc2l0aW9uIHRyaWdnZXIKKwkJLyogY29uZmlndXJlIERJTyBjaGFubmVsIGZvciBhY3F1aXNpdGlvbiB0cmlnZ2VyICovCiAJCXM2MjZfZGlvX3NldF9pcnEoZGV2LCBjbWQtPnN0YXJ0X2FyZyk7CiAKIAkJREVCVUcoInM2MjZfYWlfY21kOiBFeHRlcm5hbCBzdGFydCB0cmlnZ2VyIGlzIHNldCEhIVxuIik7CkBAIC0xNzk1LDcgKzE4MTEsNyBAQAogCQlicmVhazsKIAl9CiAKLQkvL2VuYWJsZSBpbnRlcnJ1cHQKKwkvKiBlbmFibGUgaW50ZXJydXB0ICovCiAJd3JpdGVsKElSUV9HUElPMyB8IElSUV9SUFMxLCBkZXZwcml2LT5iYXNlX2FkZHIgKyBQX0lFUik7CiAKIAlERUJVRygiczYyNl9haV9jbWQ6IGNvbW1hbmQgZnVuY3Rpb24gdGVybWluYXRlZFxuIik7CkBAIC0xODAzLDggKzE4MTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBzNjI2X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdG1wOwpAQCAtMTk4OCwxMiArMjAwNCwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBzNjI2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQkvLyBTdG9wIFJQUyBwcm9ncmFtIGluIGNhc2UgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuCisJLyogIFN0b3AgUlBTIHByb2dyYW0gaW4gY2FzZSBpdCBpcyBjdXJyZW50bHkgcnVubmluZy4gKi8KIAlNQ19ESVNBQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCi0JLy9kaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQKKwkvKiBkaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCiAJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwpAQCAtMjAxMCw3ICsyMDI2LDcgQEAKIHsKIAlpbnQgZGl2aWRlciwgYmFzZTsKIAotCWJhc2UgPSA1MDA7CQkvLzJNSHogaW50ZXJuYWwgY2xvY2sKKwliYXNlID0gNTAwOwkJLyogMk1IeiBpbnRlcm5hbCBjbG9jayAqLwogCiAJc3dpdGNoIChyb3VuZF9tb2RlKSB7CiAJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CkBAIC0yMDI5LDggKzIwNDUsOCBAQAogCXJldHVybiBkaXZpZGVyIC0gMTsKIH0KIAotc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJaW50IGk7CkBAIC0yMDQ4LDQ1ICsyMDY0LDQyIEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9hb19yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczYyNl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQogCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwotCX0KIAogCXJldHVybiBpOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLyAgRElHSVRBTCBJL08gRlVOQ1RJT05TICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBBbGwgRElPIGZ1bmN0aW9ucyBhZGRyZXNzIGEgZ3JvdXAgb2YgRElPIGNoYW5uZWxzIGJ5IG1lYW5zIG9mCi0vLyAiZ3JvdXAiIGFyZ3VtZW50LiAgZ3JvdXAgbWF5IGJlIDAsIDEgb3IgMiwgd2hpY2ggY29ycmVzcG9uZCB0byBESU8KLS8vIHBvcnRzIEEsIEIgYW5kIEMsIHJlc3BlY3RpdmVseS4KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqKioqKioqKioqIERJR0lUQUwgSS9PIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioKKyAqIEFsbCBESU8gZnVuY3Rpb25zIGFkZHJlc3MgYSBncm91cCBvZiBESU8gY2hhbm5lbHMgYnkgbWVhbnMgb2YKKyAqICJncm91cCIgYXJndW1lbnQuICBncm91cCBtYXkgYmUgMCwgMSBvciAyLCB3aGljaCBjb3JyZXNwb25kIHRvIERJTworICogcG9ydHMgQSwgQiBhbmQgQywgcmVzcGVjdGl2ZWx5LgorICovCiAKLXN0YXRpYyB2b2lkIHM2MjZfZGlvX2luaXQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIHM2MjZfZGlvX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1aW50MTZfdCBncm91cDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCi0JLy8gUHJlcGFyZSB0byB0cmVhdCB3cml0ZXMgdG8gV1JDYXBTZWwgYXMgY2FwdHVyZSBkaXNhYmxlcy4KKwkvKiAgUHJlcGFyZSB0byB0cmVhdCB3cml0ZXMgdG8gV1JDYXBTZWwgYXMgY2FwdHVyZSBkaXNhYmxlcy4gKi8KIAlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfTk9FRENBUCk7CiAKLQkvLyBGb3IgZWFjaCBncm91cCBvZiBzaXh0ZWVuIGNoYW5uZWxzIC4uLgorCS8qICBGb3IgZWFjaCBncm91cCBvZiBzaXh0ZWVuIGNoYW5uZWxzIC4uLiAqLwogCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IFM2MjZfRElPX0JBTktTOyBncm91cCsrKSB7CiAJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyICsgZ3JvdXA7Ci0JCURFQkl3cml0ZShkZXYsIGRpb3ByaXYtPldSSW50U2VsLCAwKTsJLy8gRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KLQkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JDYXBTZWwsIDB4RkZGRik7CS8vIERpc2FibGUgYWxsIGV2ZW50Ci0JCS8vIGNhcHR1cmVzLgotCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkVkZ1NlbCwgMCk7CS8vIEluaXQgYWxsIERJT3MgdG8KLQkJLy8gZGVmYXVsdCBlZGdlCi0JCS8vIHBvbGFyaXR5LgotCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkRPdXQsIDApOwkvLyBQcm9ncmFtIGFsbCBvdXRwdXRzCi0JCS8vIHRvIGluYWN0aXZlIHN0YXRlLgorCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkludFNlbCwgMCk7CS8qICBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLworCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkNhcFNlbCwgMHhGRkZGKTsJLyogIERpc2FibGUgYWxsIGV2ZW50ICovCisJCS8qICBjYXB0dXJlcy4gKi8KKwkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JFZGdTZWwsIDApOwkvKiAgSW5pdCBhbGwgRElPcyB0byAqLworCQkvKiAgZGVmYXVsdCBlZGdlICovCisJCS8qICBwb2xhcml0eS4gKi8KKwkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JET3V0LCAwKTsJLyogIFByb2dyYW0gYWxsIG91dHB1dHMgKi8KKwkJLyogIHRvIGluYWN0aXZlIHN0YXRlLiAqLwogCX0KIAlERUJVRygiczYyNl9kaW9faW5pdDogRElPIGluaXRpYWxpemVkIFxuIik7CiB9CkBAIC0yMDk3LDE0ICsyMTEwLDE0IEBACiAgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUgY29tZWRpCiAgKiBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KIAotc3RhdGljIGludCBzNjI2X2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCS8qIExlbmd0aCBvZiBkYXRhIG11c3QgYmUgMiAobWFzayBhbmQgbmV3IGRhdGEsIHNlZSBiZWxvdykgKi8KLQlpZiAoaW5zbi0+biA9PSAwKSB7CisJaWYgKGluc24tPm4gPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJaWYgKGluc24tPm4gIT0gMikgewogCQlwcmludGsoImNvbWVkaSVkOiBzNjI2OiBzNjI2X2Rpb19pbnNuX2JpdHMoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxMzMsOCArMjE0Niw4IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC0yMTYwLDc1ICsyMTczLDc1IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbikKK3N0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbikKIHsKIAl1bnNpZ25lZCBpbnQgZ3JvdXA7CiAJdW5zaWduZWQgaW50IGJpdG1hc2s7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAotCS8vc2VsZWN0IGRpbyBiYW5rCisJLyogc2VsZWN0IGRpbyBiYW5rICovCiAJZ3JvdXAgPSBjaGFuIC8gMTY7CiAJYml0bWFzayA9IDEgPDwgKGNoYW4gLSAoMTYgKiBncm91cCkpOwogCURFQlVHKCJzNjI2X2Rpb19zZXRfaXJxOiBlbmFibGUgaW50ZXJydXB0IG9uIGRpbyBjaGFubmVsICVkIGdyb3VwICVkXG4iLAogCQljaGFuIC0gKDE2ICogZ3JvdXApLCBncm91cCk7CiAKLQkvL3NldCBjaGFubmVsIHRvIGNhcHR1cmUgcG9zaXRpdmUgZWRnZQorCS8qIHNldCBjaGFubmVsIHRvIGNhcHR1cmUgcG9zaXRpdmUgZWRnZSAqLwogCXN0YXR1cyA9IERFQklyZWFkKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5SREVkZ1NlbCk7CiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkVkZ1NlbCwgYml0bWFzayB8IHN0YXR1cyk7CiAKLQkvL2VuYWJsZSBpbnRlcnJ1cHQgb24gc2VsZWN0ZWQgY2hhbm5lbAorCS8qIGVuYWJsZSBpbnRlcnJ1cHQgb24gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCXN0YXR1cyA9IERFQklyZWFkKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5SREludFNlbCk7CiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkludFNlbCwgYml0bWFzayB8IHN0YXR1cyk7CiAKLQkvL2VuYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZAorCS8qIGVuYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZCAqLwogCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9FRENBUCk7CiAKLQkvL2VuYWJsZSBlZGdlIGNhcHR1cmUgb24gc2VsZWN0ZWQgY2hhbm5lbAorCS8qIGVuYWJsZSBlZGdlIGNhcHR1cmUgb24gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCXN0YXR1cyA9IERFQklyZWFkKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5SRENhcFNlbCk7CiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkNhcFNlbCwgYml0bWFzayB8IHN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNjI2X2Rpb19yZXNldF9pcnEoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGdyb3VwLAorc3RhdGljIGludCBzNjI2X2Rpb19yZXNldF9pcnEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGdyb3VwLAogCXVuc2lnbmVkIGludCBtYXNrKQogewogCURFQlVHKCJzNjI2X2Rpb19yZXNldF9pcnE6IGRpc2FibGUgIGludGVycnVwdCBvbiBkaW8gY2hhbm5lbCAlZCBncm91cCAlZFxuIiwgbWFzaywgZ3JvdXApOwogCi0JLy9kaXNhYmxlIGVkZ2UgY2FwdHVyZSB3cml0ZSBjb21tYW5kCisJLyogZGlzYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZCAqLwogCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9OT0VEQ0FQKTsKIAotCS8vZW5hYmxlIGVkZ2UgY2FwdHVyZSBvbiBzZWxlY3RlZCBjaGFubmVsCisJLyogZW5hYmxlIGVkZ2UgY2FwdHVyZSBvbiBzZWxlY3RlZCBjaGFubmVsICovCiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkNhcFNlbCwgbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNjI2X2Rpb19jbGVhcl9pcnEoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgczYyNl9kaW9fY2xlYXJfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IGdyb3VwOwogCi0JLy9kaXNhYmxlIGVkZ2UgY2FwdHVyZSB3cml0ZSBjb21tYW5kCisJLyogZGlzYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZCAqLwogCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9OT0VEQ0FQKTsKIAogCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IFM2MjZfRElPX0JBTktTOyBncm91cCsrKSB7Ci0JCS8vY2xlYXIgcGVuZGluZyBldmVudHMgYW5kIGludGVycnVwdAorCQkvKiBjbGVhciBwZW5kaW5nIGV2ZW50cyBhbmQgaW50ZXJydXB0ICovCiAJCURFQkl3cml0ZShkZXYsCi0JCQkoKGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKKwkJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQkJZ3JvdXApLT5wcml2YXRlKS0+V1JDYXBTZWwsIDB4ZmZmZik7CiAJfQogCkBAIC0yMjM4LDI2ICsyMjUxLDI2IEBACiAvKiBOb3cgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgKGRhdGFbMF0pCiAgICBhbmQgc2V0IHRoZSBzdWJkZXZpY2UuIFRvIGNvbXBsZXRlIHdpdGggdHJpZ2dlciBhbmQgaW50ZXJydXB0CiAgICBjb25maWd1cmF0aW9uICovCi1zdGF0aWMgaW50IHM2MjZfZW5jX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2VuY19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKLQl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvLyBQcmVsb2FkIHVwb24KLQkJLy8gaW5kZXguCi0JCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvLyBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LgotCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8vIE9wZXJhdGluZyBtb2RlIGlzIENvdW50ZXIuCi0JCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvLyBBY3RpdmUgaGlnaCBjbG9jay4KLQkJLy8oIENOVERJUl9VUCA8PCBCRl9DTEtQT0wgKSB8ICAgICAgLy8gQ291bnQgZGlyZWN0aW9uIGlzIERvd24uCi0JCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLy8gQ2xvY2sgbXVsdGlwbGllciBpcyAxeC4KKwl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvKiAgUHJlbG9hZCB1cG9uICovCisJCS8qICBpbmRleC4gKi8KKwkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8qICBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LiAqLworCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8qICBPcGVyYXRpbmcgbW9kZSBpcyBDb3VudGVyLiAqLworCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLyogIEFjdGl2ZSBoaWdoIGNsb2NrLiAqLworCQkvKiAoIENOVERJUl9VUCA8PCBCRl9DTEtQT0wgKSB8ICAgICAgLy8gQ291bnQgZGlyZWN0aW9uIGlzIERvd24uICovCisJCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLyogIENsb2NrIG11bHRpcGxpZXIgaXMgMXguICovCiAJCShDTEtFTkFCX0lOREVYIDw8IEJGX0NMS0VOQUIpOwogCS8qICAgdWludDE2X3QgRGlzYWJsZUludFNyYz1UUlVFOyAqLwotCS8vIHVpbnQzMl90IFByZWxvYWR2YWx1ZTsgICAgICAgICAgICAgIC8vQ291bnRlciBpbml0aWFsIHZhbHVlCisJLyogIHVpbnQzMl90IFByZWxvYWR2YWx1ZTsgICAgICAgICAgICAgIC8vQ291bnRlciBpbml0aWFsIHZhbHVlICovCiAJdWludDE2X3QgdmFsdWVTcmNsYXRjaCA9IExBVENIU1JDX0FCX1JFQUQ7CiAJdWludDE2X3QgZW5hYiA9IENMS0VOQUJfQUxXQVlTOwotCWVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCXN0cnVjdCBlbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKIAogCURFQlVHKCJzNjI2X2VuY19pbnNuX2NvbmZpZzogZW5jb2RlciBjb25maWdcbiIpOwogCi0JLy8gIChkYXRhPT1OVUxMKSA/IChQcmVsb2FkdmFsdWU9MCkgOiAoUHJlbG9hZHZhbHVlPWRhdGFbMF0pOworCS8qICAgKGRhdGE9PU5VTEwpID8gKFByZWxvYWR2YWx1ZT0wKSA6IChQcmVsb2FkdmFsdWU9ZGF0YVswXSk7ICovCiAKIAlrLT5TZXRNb2RlKGRldiwgaywgU2V0dXAsIFRSVUUpOwogCVByZWxvYWQoZGV2LCBrLCAqKGluc24tPmRhdGEpKTsKQEAgLTIyNjgsMTIgKzIyODEsMTIgQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBuOwotCWVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCXN0cnVjdCBlbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKIAogCURFQlVHKCJzNjI2X2VuY19pbnNuX3JlYWQ6IGVuY29kZXIgcmVhZCBjaGFubmVsICVkIFxuIiwKIAkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOwpAQCAtMjI4NiwyMCArMjI5OSwyMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IHM2MjZfZW5jX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKLQllbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgPSAmZW5jcHJpdltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CiAKIAlERUJVRygiczYyNl9lbmNfaW5zbl93cml0ZTogZW5jb2RlciB3cml0ZSBjaGFubmVsICVkIFxuIiwKIAkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOwogCi0JLy8gU2V0IHRoZSBwcmVsb2FkIHJlZ2lzdGVyCisJLyogIFNldCB0aGUgcHJlbG9hZCByZWdpc3RlciAqLwogCVByZWxvYWQoZGV2LCBrLCBkYXRhWzBdKTsKIAotCS8vIFNvZnR3YXJlIGluZGV4IHB1bHNlIGZvcmNlcyB0aGUgcHJlbG9hZCByZWdpc3RlciB0byBsb2FkCi0JLy8gaW50byB0aGUgY291bnRlcgorCS8qICBTb2Z0d2FyZSBpbmRleCBwdWxzZSBmb3JjZXMgdGhlIHByZWxvYWQgcmVnaXN0ZXIgdG8gbG9hZCAqLworCS8qICBpbnRvIHRoZSBjb3VudGVyICovCiAJay0+U2V0TG9hZFRyaWcoZGV2LCBrLCAwKTsKIAlrLT5QdWxzZUluZGV4KGRldiwgayk7CiAJay0+U2V0TG9hZFRyaWcoZGV2LCBrLCAyKTsKQEAgLTIzMDksMTc1ICsyMzIyLDE2NSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBzNjI2X3RpbWVyX2xvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCBpbnQgdGljaykKK3N0YXRpYyB2b2lkIHM2MjZfdGltZXJfbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIGludCB0aWNrKQogewotCXVpbnQxNl90IFNldHVwID0gKExPQURTUkNfSU5EWCA8PCBCRl9MT0FEU1JDKSB8CS8vIFByZWxvYWQgdXBvbgotCQkvLyBpbmRleC4KLQkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8vIERpc2FibGUgaGFyZHdhcmUgaW5kZXguCi0JCShDTEtTUkNfVElNRVIgPDwgQkZfQ0xLU1JDKSB8CS8vIE9wZXJhdGluZyBtb2RlIGlzIFRpbWVyLgotCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLy8gQWN0aXZlIGhpZ2ggY2xvY2suCi0JCShDTlRESVJfRE9XTiA8PCBCRl9DTEtQT0wpIHwJLy8gQ291bnQgZGlyZWN0aW9uIGlzIERvd24uCi0JCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLy8gQ2xvY2sgbXVsdGlwbGllciBpcyAxeC4KKwl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvKiAgUHJlbG9hZCB1cG9uICovCisJCS8qICBpbmRleC4gKi8KKwkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8qICBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LiAqLworCQkoQ0xLU1JDX1RJTUVSIDw8IEJGX0NMS1NSQykgfAkvKiAgT3BlcmF0aW5nIG1vZGUgaXMgVGltZXIuICovCisJCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvKiAgQWN0aXZlIGhpZ2ggY2xvY2suICovCisJCShDTlRESVJfRE9XTiA8PCBCRl9DTEtQT0wpIHwJLyogIENvdW50IGRpcmVjdGlvbiBpcyBEb3duLiAqLworCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8qICBDbG9jayBtdWx0aXBsaWVyIGlzIDF4LiAqLwogCQkoQ0xLRU5BQl9JTkRFWCA8PCBCRl9DTEtFTkFCKTsKIAl1aW50MTZfdCB2YWx1ZVNyY2xhdGNoID0gTEFUQ0hTUkNfQV9JTkRYQTsKLQkvLyAgdWludDE2X3QgZW5hYj1DTEtFTkFCX0FMV0FZUzsKKwkvKiAgIHVpbnQxNl90IGVuYWI9Q0xLRU5BQl9BTFdBWVM7ICovCiAKIAlrLT5TZXRNb2RlKGRldiwgaywgU2V0dXAsIEZBTFNFKTsKIAotCS8vIFNldCB0aGUgcHJlbG9hZCByZWdpc3RlcgorCS8qICBTZXQgdGhlIHByZWxvYWQgcmVnaXN0ZXIgKi8KIAlQcmVsb2FkKGRldiwgaywgdGljayk7CiAKLQkvLyBTb2Z0d2FyZSBpbmRleCBwdWxzZSBmb3JjZXMgdGhlIHByZWxvYWQgcmVnaXN0ZXIgdG8gbG9hZAotCS8vIGludG8gdGhlIGNvdW50ZXIKKwkvKiAgU29mdHdhcmUgaW5kZXggcHVsc2UgZm9yY2VzIHRoZSBwcmVsb2FkIHJlZ2lzdGVyIHRvIGxvYWQgKi8KKwkvKiAgaW50byB0aGUgY291bnRlciAqLwogCWstPlNldExvYWRUcmlnKGRldiwgaywgMCk7CiAJay0+UHVsc2VJbmRleChkZXYsIGspOwogCi0JLy9zZXQgcmVsb2FkIG9uIGNvdW50ZXIgb3ZlcmZsb3cKKwkvKiBzZXQgcmVsb2FkIG9uIGNvdW50ZXIgb3ZlcmZsb3cgKi8KIAlrLT5TZXRMb2FkVHJpZyhkZXYsIGssIDEpOwogCi0JLy9zZXQgaW50ZXJydXB0IG9uIG92ZXJmbG93CisJLyogc2V0IGludGVycnVwdCBvbiBvdmVyZmxvdyAqLwogCWstPlNldEludFNyYyhkZXYsIGssIElOVFNSQ19PVkVSKTsKIAogCVNldExhdGNoU291cmNlKGRldiwgaywgdmFsdWVTcmNsYXRjaCk7Ci0JLy8gIGstPlNldEVuYWJsZShkZXYsaywodWludDE2X3QpKGVuYWIgIT0gMCkpOworCS8qICAgay0+U2V0RW5hYmxlKGRldixrLCh1aW50MTZfdCkoZW5hYiAhPSAwKSk7ICovCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIERBQyBGVU5DVElPTlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqKioqKiogIERBQyBGVU5DVElPTlMgKioqKioqKioqKiogKi8KIAotLy8gU2xvdCAwIGJhc2Ugc2V0dGluZ3MuCi0jZGVmaW5lIFZFQ1QwCSggWFNEMiB8IFJTRDMgfCBTSUJfQTIgKQkvLyBTbG90IDAgYWx3YXlzIHNoaWZ0cyBpbgotCQkJCQkgLy8gMHhGRiBhbmQgc3RvcmUgaXQgdG8KLQkJCQkJIC8vIEZCX0JVRkZFUjIuCisvKiAgU2xvdCAwIGJhc2Ugc2V0dGluZ3MuICovCisjZGVmaW5lIFZFQ1QwCShYU0QyIHwgUlNEMyB8IFNJQl9BMikKKy8qICBTbG90IDAgYWx3YXlzIHNoaWZ0cyBpbiAgMHhGRiBhbmQgc3RvcmUgaXQgdG8gIEZCX0JVRkZFUjIuICovCiAKLS8vIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tUGh5c2ljYWxDaGFuIG1hcHBpbmcgdGFibGUuCisvKiAgVHJpbURhYyBMb2dpY2FsQ2hhbi10by1QaHlzaWNhbENoYW4gbWFwcGluZyB0YWJsZS4gKi8KIHN0YXRpYyB1aW50OF90IHRyaW1jaGFuW10gPSB7IDEwLCA5LCA4LCAzLCAyLCA3LCA2LCAxLCAwLCA1LCA0IH07CiAKLS8vIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tRWVwcm9tQWRycyBtYXBwaW5nIHRhYmxlLgorLyogIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tRWVwcm9tQWRycyBtYXBwaW5nIHRhYmxlLiAqLwogc3RhdGljIHVpbnQ4X3QgdHJpbWFkcnNbXSA9CiAJeyAweDQwLCAweDQxLCAweDQyLCAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDYwLCAweDYxLCAweDYyLCAweDYzIH07CiAKLXN0YXRpYyB2b2lkIExvYWRUcmltREFDcyhjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgTG9hZFRyaW1EQUNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJcmVnaXN0ZXIgdWludDhfdCBpOwogCi0JLy8gQ29weSBUcmltRGFjIHNldHBvaW50IHZhbHVlcyBmcm9tIEVFUFJPTSB0byBUcmltRGFjcy4KKwkvKiAgQ29weSBUcmltRGFjIHNldHBvaW50IHZhbHVlcyBmcm9tIEVFUFJPTSB0byBUcmltRGFjcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih0cmltY2hhbikgLyBzaXplb2YodHJpbWNoYW5bMF0pKTsgaSsrKQogCQlXcml0ZVRyaW1EQUMoZGV2LCBpLCBJMkNyZWFkKGRldiwgdHJpbWFkcnNbaV0pKTsKIH0KIAotc3RhdGljIHZvaWQgV3JpdGVUcmltREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgTG9naWNhbENoYW4sCitzdGF0aWMgdm9pZCBXcml0ZVRyaW1EQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCBMb2dpY2FsQ2hhbiwKIAl1aW50OF90IERhY0RhdGEpCiB7CiAJdWludDMyX3QgY2hhbjsKIAotCS8vIFNhdmUgdGhlIG5ldyBzZXRwb2ludCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byByZWFkIGl0IGJhY2sgbGF0ZXIuCisJLyogIFNhdmUgdGhlIG5ldyBzZXRwb2ludCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byByZWFkIGl0IGJhY2sgbGF0ZXIuICovCiAJZGV2cHJpdi0+VHJpbVNldHBvaW50W0xvZ2ljYWxDaGFuXSA9ICh1aW50OF90KSBEYWNEYXRhOwogCi0JLy8gTWFwIGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIgdG8gcGh5c2ljYWwgY2hhbm5lbCBudW1iZXIuCisJLyogIE1hcCBsb2dpY2FsIGNoYW5uZWwgbnVtYmVyIHRvIHBoeXNpY2FsIGNoYW5uZWwgbnVtYmVyLiAqLwogCWNoYW4gPSAodWludDMyX3QpIHRyaW1jaGFuW0xvZ2ljYWxDaGFuXTsKIAotCS8vIFNldCB1cCBUU0wyIHJlY29yZHMgZm9yIFRyaW1EYWMgd3JpdGUgb3BlcmF0aW9uLiAgQWxsIHNsb3RzIHNoaWZ0Ci0JLy8gMHhGRiBpbiBmcm9tIHB1bGxlZC11cCBTRDMgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBzbG90IHNlcXVlbmNlCi0JLy8gY2FuIGJlIGRldGVjdGVkLgotCVNFVFZFQ1QoMiwgWFNEMiB8IFhGSUZPXzEgfCBXUzMpOwkvLyBTbG90IDI6IFNlbmQgaGlnaCB1aW50OF90Ci0JLy8gdG8gdGFyZ2V0IFRyaW1EYWMuCi0JU0VUVkVDVCgzLCBYU0QyIHwgWEZJRk9fMCB8IFdTMyk7CS8vIFNsb3QgMzogU2VuZCBsb3cgdWludDhfdCB0bwotCS8vIHRhcmdldCBUcmltRGFjLgotCVNFVFZFQ1QoNCwgWFNEMiB8IFhGSUZPXzMgfCBXUzEpOwkvLyBTbG90IDQ6IFNlbmQgTk9QIGhpZ2gKLQkvLyB1aW50OF90IHRvIERBQzAgdG8ga2VlcAotCS8vIGNsb2NrIHJ1bm5pbmcuCi0JU0VUVkVDVCg1LCBYU0QyIHwgWEZJRk9fMiB8IFdTMSB8IEVPUyk7CS8vIFNsb3QgNTogU2VuZCBOT1AgbG93Ci0JLy8gdWludDhfdCB0byBEQUMwLgorCS8qIFNldCB1cCBUU0wyIHJlY29yZHMgZm9yIFRyaW1EYWMgd3JpdGUgb3BlcmF0aW9uLiAgQWxsIHNsb3RzIHNoaWZ0CisJICogMHhGRiBpbiBmcm9tIHB1bGxlZC11cCBTRDMgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBzbG90IHNlcXVlbmNlCisJICogY2FuIGJlIGRldGVjdGVkLgorCSAqLwogCi0JLy8gQ29uc3RydWN0IGFuZCB0cmFuc21pdCB0YXJnZXQgREFDJ3Mgc2VyaWFsIHBhY2tldDogKCAwMDAwIEFBQUEKLQkvLyApLCggRERERCBEREREICksKCAweDAwICksKCAweDAwICkgd2hlcmUgQTwzOjA+IGlzIHRoZSBEQUMKLQkvLyBjaGFubmVsJ3MgYWRkcmVzcywgYW5kIEQ8NzowPiBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEgV09SRAotCS8vIHZhbHVlICh0aGF0IHdyaXRlcyBhIGNoYW5uZWwgMCBOT1AgY29tbWFuZCB0byBhIG5vbi1leGlzdGVudCBtYWluCi0JLy8gREFDIGNoYW5uZWwpIHRoYXQgc2VydmVzIHRvIGtlZXAgdGhlIGNsb2NrIHJ1bm5pbmcgYWZ0ZXIgdGhlCi0JLy8gcGFja2V0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHRhcmdldCBEQUMuCisJU0VUVkVDVCgyLCBYU0QyIHwgWEZJRk9fMSB8IFdTMyk7CisJLyogU2xvdCAyOiBTZW5kIGhpZ2ggdWludDhfdCB0byB0YXJnZXQgVHJpbURhYy4gKi8KKwlTRVRWRUNUKDMsIFhTRDIgfCBYRklGT18wIHwgV1MzKTsKKwkvKiBTbG90IDM6IFNlbmQgbG93IHVpbnQ4X3QgdG8gdGFyZ2V0IFRyaW1EYWMuICovCisJU0VUVkVDVCg0LCBYU0QyIHwgWEZJRk9fMyB8IFdTMSk7CisJLyogU2xvdCA0OiBTZW5kIE5PUCBoaWdoIHVpbnQ4X3QgdG8gREFDMCB0byBrZWVwIGNsb2NrIHJ1bm5pbmcuICovCisJU0VUVkVDVCg1LCBYU0QyIHwgWEZJRk9fMiB8IFdTMSB8IEVPUyk7CisJLyogU2xvdCA1OiBTZW5kIE5PUCBsb3cgIHVpbnQ4X3QgdG8gREFDMC4gKi8KIAotCVNlbmREQUMoZGV2LCAoKHVpbnQzMl90KSBjaGFuIDw8IDgpCS8vIEFkZHJlc3MgdGhlIERBQyBjaGFubmVsCi0JCS8vIHdpdGhpbiB0aGUgdHJpbWRhYyBkZXZpY2UuCi0JCXwgKHVpbnQzMl90KSBEYWNEYXRhKTsJLy8gSW5jbHVkZSBEQUMgc2V0cG9pbnQgZGF0YS4KKwkvKiBDb25zdHJ1Y3QgYW5kIHRyYW5zbWl0IHRhcmdldCBEQUMncyBzZXJpYWwgcGFja2V0OgorCSAqICggMDAwMCBBQUFBICksICggRERERCBEREREICksKCAweDAwICksKCAweDAwICkgd2hlcmUgQTwzOjA+IGlzIHRoZQorCSAqIERBQyBjaGFubmVsJ3MgYWRkcmVzcywgYW5kIEQ8NzowPiBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEKKwkgKiBXT1JEIHZhbHVlICh0aGF0IHdyaXRlcyBhIGNoYW5uZWwgMCBOT1AgY29tbWFuZCB0byBhIG5vbi1leGlzdGVudAorCSAqIG1haW4gREFDIGNoYW5uZWwpIHRoYXQgc2VydmVzIHRvIGtlZXAgdGhlIGNsb2NrIHJ1bm5pbmcgYWZ0ZXIgdGhlCisJICogcGFja2V0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHRhcmdldCBEQUMuCisJICovCisKKwkvKiAgQWRkcmVzcyB0aGUgREFDIGNoYW5uZWwgd2l0aGluIHRoZSB0cmltZGFjIGRldmljZS4gKi8KKwlTZW5kREFDKGRldiwgKCh1aW50MzJfdCkgY2hhbiA8PCA4KQorCQl8ICh1aW50MzJfdCkgRGFjRGF0YSk7CS8qICBJbmNsdWRlIERBQyBzZXRwb2ludCBkYXRhLiAqLwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vICBFRVBST00gQUNDRVNTIEZVTkNUSU9OUyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKiAqKioqKioqKioqKioqKiAgRUVQUk9NIEFDQ0VTUyBGVU5DVElPTlMgICoqKioqKioqKioqKioqICovCisvKiAgUmVhZCB1aW50OF90IGZyb20gRUVQUk9NLiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZWFkIHVpbnQ4X3QgZnJvbSBFRVBST00uCi0KLXN0YXRpYyB1aW50OF90IEkyQ3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCBhZGRyKQorc3RhdGljIHVpbnQ4X3QgSTJDcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90IGFkZHIpCiB7CiAJdWludDhfdCBydG52YWw7CiAKLQkvLyBTZW5kIEVFUFJPTSB0YXJnZXQgYWRkcmVzcy4KLQlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1cpCS8vIEJ5dGUyID0gSTJDCi0JCQkvLyBjb21tYW5kOgotCQkJLy8gd3JpdGUgdG8KLQkJCS8vIEkyQyBFRVBST00KLQkJCS8vIGRldmljZS4KLQkJCXwgSTJDX0IxKEkyQ19BVFRSU1RPUCwgYWRkcikJLy8gQnl0ZTEgPSBFRVBST00KLQkJCS8vIGludGVybmFsIHRhcmdldAotCQkJLy8gYWRkcmVzcy4KLQkJCXwgSTJDX0IwKEkyQ19BVFRSTk9QLCAwKSkpCS8vIEJ5dGUwID0gTm90Ci0JCS8vIHNlbnQuCi0JewotCQkvLyBBYm9ydCBmdW5jdGlvbiBhbmQgZGVjbGFyZSBlcnJvciBpZiBoYW5kc2hha2UgZmFpbGVkLgorCS8qICBTZW5kIEVFUFJPTSB0YXJnZXQgYWRkcmVzcy4gKi8KKwlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1cpCisJCQkgLyogQnl0ZTIgPSBJMkMgY29tbWFuZDogd3JpdGUgdG8gSTJDIEVFUFJPTSAgZGV2aWNlLiAqLworCQkJfCBJMkNfQjEoSTJDX0FUVFJTVE9QLCBhZGRyKQorCQkJIC8qIEJ5dGUxID0gRUVQUk9NIGludGVybmFsIHRhcmdldCBhZGRyZXNzLiAqLworCQkJfCBJMkNfQjAoSTJDX0FUVFJOT1AsIDApKSkgewkvKiAgQnl0ZTAgPSBOb3Qgc2VudC4gKi8KKwkJLyogIEFib3J0IGZ1bmN0aW9uIGFuZCBkZWNsYXJlIGVycm9yIGlmIGhhbmRzaGFrZSBmYWlsZWQuICovCiAJCURFQlVHKCJJMkNyZWFkOiBlcnJvciBoYW5kc2hha2UgSTJDcmVhZCAgYVxuIik7CiAJCXJldHVybiAwOwogCX0KLQkvLyBFeGVjdXRlIEVFUFJPTSByZWFkLgotCWlmIChJMkNoYW5kc2hha2UoZGV2LCBJMkNfQjIoSTJDX0FUVFJTVEFSVCwgSTJDUikJLy8gQnl0ZTIgPSBJMkMKLQkJCS8vIGNvbW1hbmQ6IHJlYWQKLQkJCS8vIGZyb20gSTJDIEVFUFJPTQotCQkJLy8gZGV2aWNlLgotCQkJfCBJMkNfQjEoSTJDX0FUVFJTVE9QLCAwKQkvLyBCeXRlMSByZWNlaXZlcwotCQkJLy8gdWludDhfdCBmcm9tCi0JCQkvLyBFRVBST00uCi0JCQl8IEkyQ19CMChJMkNfQVRUUk5PUCwgMCkpKQkvLyBCeXRlMCA9IE5vdAotCQkvLyBzZW50LgotCXsKLQkJLy8gQWJvcnQgZnVuY3Rpb24gYW5kIGRlY2xhcmUgZXJyb3IgaWYgaGFuZHNoYWtlIGZhaWxlZC4KKwkvKiAgRXhlY3V0ZSBFRVBST00gcmVhZC4gKi8KKwlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1IpCS8qICBCeXRlMiA9IEkyQyAqLworCQkJLyogIGNvbW1hbmQ6IHJlYWQgKi8KKwkJCS8qICBmcm9tIEkyQyBFRVBST00gKi8KKwkJCS8qICBkZXZpY2UuICovCisJCQl8IEkyQ19CMShJMkNfQVRUUlNUT1AsIDApCS8qICBCeXRlMSByZWNlaXZlcyAqLworCQkJLyogIHVpbnQ4X3QgZnJvbSAqLworCQkJLyogIEVFUFJPTS4gKi8KKwkJCXwgSTJDX0IwKEkyQ19BVFRSTk9QLCAwKSkpIHsJLyogIEJ5dGUwID0gTm90ICBzZW50LiAqLworCisJCS8qICBBYm9ydCBmdW5jdGlvbiBhbmQgZGVjbGFyZSBlcnJvciBpZiBoYW5kc2hha2UgZmFpbGVkLiAqLwogCQlERUJVRygiSTJDcmVhZDogZXJyb3IgaGFuZHNoYWtlIEkyQ3JlYWQgYlxuIik7CiAJCXJldHVybiAwOwogCX0KLQkvLyBSZXR1cm4gY29weSBvZiBFRVBST00gdmFsdWUuCisJLyogIFJldHVybiBjb3B5IG9mIEVFUFJPTSB2YWx1ZS4gKi8KIAlydG52YWwgPSAodWludDhfdCkgKFJSNzE0NihQX0kyQ0NUUkwpID4+IDE2KTsKIAlyZXR1cm4gcnRudmFsOwogfQogCi1zdGF0aWMgdWludDMyX3QgSTJDaGFuZHNoYWtlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCkKK3N0YXRpYyB1aW50MzJfdCBJMkNoYW5kc2hha2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKQogewotCS8vIFdyaXRlIEkyQyBjb21tYW5kIHRvIEkyQyBUcmFuc2ZlciBDb250cm9sIHNoYWRvdyByZWdpc3Rlci4KKwkvKiAgV3JpdGUgSTJDIGNvbW1hbmQgdG8gSTJDIFRyYW5zZmVyIENvbnRyb2wgc2hhZG93IHJlZ2lzdGVyLiAqLwogCVdSNzE0NihQX0kyQ0NUUkwsIHZhbCk7CiAKLQkvLyBVcGxvYWQgSTJDIHNoYWRvdyByZWdpc3RlcnMgaW50byB3b3JraW5nIHJlZ2lzdGVycyBhbmQgd2FpdCBmb3IKLQkvLyB1cGxvYWQgY29uZmlybWF0aW9uLgorCS8qICBVcGxvYWQgSTJDIHNoYWRvdyByZWdpc3RlcnMgaW50byB3b3JraW5nIHJlZ2lzdGVycyBhbmQgd2FpdCBmb3IgKi8KKwkvKiAgdXBsb2FkIGNvbmZpcm1hdGlvbi4gKi8KIAogCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsKLQl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0lJQykpIDsKKwl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0lJQykpCisJCTsKIAotCS8vIFdhaXQgdW50aWwgSTJDIGJ1cyB0cmFuc2ZlciBpcyBmaW5pc2hlZCBvciBhbiBlcnJvciBvY2N1cnMuCi0Jd2hpbGUgKChSUjcxNDYoUF9JMkNDVFJMKSAmIChJMkNfQlVTWSB8IEkyQ19FUlIpKSA9PSBJMkNfQlVTWSkgOworCS8qICBXYWl0IHVudGlsIEkyQyBidXMgdHJhbnNmZXIgaXMgZmluaXNoZWQgb3IgYW4gZXJyb3Igb2NjdXJzLiAqLworCXdoaWxlICgoUlI3MTQ2KFBfSTJDQ1RSTCkgJiAoSTJDX0JVU1kgfCBJMkNfRVJSKSkgPT0gSTJDX0JVU1kpCisJCTsKIAotCS8vIFJldHVybiBub24temVybyBpZiBJMkMgZXJyb3Igb2NjdXJlZC4KKwkvKiAgUmV0dXJuIG5vbi16ZXJvIGlmIEkyQyBlcnJvciBvY2N1cmVkLiAqLwogCXJldHVybiBSUjcxNDYoUF9JMkNDVFJMKSAmIEkyQ19FUlI7CiAKIH0KIAotLy8gUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb246IFdyaXRlIHNldHBvaW50IHRvIGFuIGFwcGxpY2F0aW9uIERBQyBjaGFubmVsLgorLyogIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uOiBXcml0ZSBzZXRwb2ludCB0byBhbiBhcHBsaWNhdGlvbiBEQUMgY2hhbm5lbC4gKi8KIAotc3RhdGljIHZvaWQgU2V0REFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGNoYW4sIHNob3J0IGRhY2RhdGEpCitzdGF0aWMgdm9pZCBTZXREQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgY2hhbiwgc2hvcnQgZGFjZGF0YSkKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBzaWdubWFzazsKIAlyZWdpc3RlciB1aW50MzJfdCBXU0ltYWdlOwogCi0JLy8gQWRqdXN0IERBQyBkYXRhIHBvbGFyaXR5IGFuZCBzZXQgdXAgUG9sYXJpdHkgQ29udHJvbCBSZWdpc3RlcgotCS8vIGltYWdlLgorCS8qICBBZGp1c3QgREFDIGRhdGEgcG9sYXJpdHkgYW5kIHNldCB1cCBQb2xhcml0eSBDb250cm9sIFJlZ2lzdGVyICovCisJLyogIGltYWdlLiAqLwogCXNpZ25tYXNrID0gMSA8PCBjaGFuOwogCWlmIChkYWNkYXRhIDwgMCkgewogCQlkYWNkYXRhID0gLWRhY2RhdGE7CkBAIC0yNDg1LDIzNyArMjQ4OCwyNTIgQEAKIAl9IGVsc2UKIAkJZGV2cHJpdi0+RGFjcG9sICY9IH5zaWdubWFzazsKIAotCS8vIExpbWl0IERBQyBzZXRwb2ludCB2YWx1ZSB0byB2YWxpZCByYW5nZS4KKwkvKiAgTGltaXQgREFDIHNldHBvaW50IHZhbHVlIHRvIHZhbGlkIHJhbmdlLiAqLwogCWlmICgodWludDE2X3QpIGRhY2RhdGEgPiAweDFGRkYpCiAJCWRhY2RhdGEgPSAweDFGRkY7CiAKLQkvLyBTZXQgdXAgVFNMMiByZWNvcmRzIChha2EgInZlY3RvcnMiKSBmb3IgREFDIHVwZGF0ZS4gIFZlY3RvcnMgVjIKLQkvLyBhbmQgVjMgdHJhbnNtaXQgdGhlIHNldHBvaW50IHRvIHRoZSB0YXJnZXQgREFDLiAgVjQgYW5kIFY1IHNlbmQKLQkvLyBkYXRhIHRvIGEgbm9uLWV4aXN0ZW50IFRyaW1EYWMgY2hhbm5lbCBqdXN0IHRvIGtlZXAgdGhlIGNsb2NrCi0JLy8gcnVubmluZyBhZnRlciBzZW5kaW5nIGRhdGEgdG8gdGhlIHRhcmdldCBEQUMuICBUaGlzIGlzIG5lY2Vzc2FyeQotCS8vIHRvIGVsaW1pbmF0ZSB0aGUgY2xvY2sgZ2xpdGNoIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyIGF0IHRoZQotCS8vIGVuZCBvZiB0aGUgdGFyZ2V0IERBQydzIHNlcmlhbCBkYXRhIHN0cmVhbS4gIFdoZW4gdGhlIHNlcXVlbmNlCi0JLy8gcmVzdGFydHMgYXQgVjAgKGFmdGVyIGV4ZWN1dGluZyBWNSksIHRoZSBnYXRlIGFycmF5IGF1dG9tYXRpY2FsbHkKLQkvLyBkaXNhYmxlcyBnYXRpbmcgZm9yIHRoZSBEQUMgY2xvY2sgYW5kIGFsbCBEQUMgY2hpcCBzZWxlY3RzLgotCVdTSW1hZ2UgPSAoY2hhbiAmIDIpID8gV1MxIDogV1MyOwkvLyBDaG9vc2UgREFDIGNoaXAgc2VsZWN0IHRvCi0JLy8gYmUgYXNzZXJ0ZWQuCi0JU0VUVkVDVCgyLCBYU0QyIHwgWEZJRk9fMSB8IFdTSW1hZ2UpOwkvLyBTbG90IDI6IFRyYW5zbWl0IGhpZ2gKLQkvLyBkYXRhIGJ5dGUgdG8gdGFyZ2V0IERBQy4KLQlTRVRWRUNUKDMsIFhTRDIgfCBYRklGT18wIHwgV1NJbWFnZSk7CS8vIFNsb3QgMzogVHJhbnNtaXQgbG93IGRhdGEKLQkvLyBieXRlIHRvIHRhcmdldCBEQUMuCi0JU0VUVkVDVCg0LCBYU0QyIHwgWEZJRk9fMyB8IFdTMyk7CS8vIFNsb3QgNDogVHJhbnNtaXQgdG8KLQkvLyBub24tZXhpc3RlbnQgVHJpbURhYwotCS8vIGNoYW5uZWwgdG8ga2VlcCBjbG9jawotCVNFVFZFQ1QoNSwgWFNEMiB8IFhGSUZPXzIgfCBXUzMgfCBFT1MpOwkvLyBTbG90IDU6IHJ1bm5pbmcgYWZ0ZXIKLQkvLyB3cml0aW5nIHRhcmdldCBEQUMncwotCS8vIGxvdyBkYXRhIGJ5dGUuCisJLyogU2V0IHVwIFRTTDIgcmVjb3JkcyAoYWthICJ2ZWN0b3JzIikgZm9yIERBQyB1cGRhdGUuICBWZWN0b3JzIFYyCisJICogYW5kIFYzIHRyYW5zbWl0IHRoZSBzZXRwb2ludCB0byB0aGUgdGFyZ2V0IERBQy4gIFY0IGFuZCBWNSBzZW5kCisJICogZGF0YSB0byBhIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwganVzdCB0byBrZWVwIHRoZSBjbG9jaworCSAqIHJ1bm5pbmcgYWZ0ZXIgc2VuZGluZyBkYXRhIHRvIHRoZSB0YXJnZXQgREFDLiAgVGhpcyBpcyBuZWNlc3NhcnkKKwkgKiB0byBlbGltaW5hdGUgdGhlIGNsb2NrIGdsaXRjaCB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ciBhdCB0aGUKKwkgKiBlbmQgb2YgdGhlIHRhcmdldCBEQUMncyBzZXJpYWwgZGF0YSBzdHJlYW0uICBXaGVuIHRoZSBzZXF1ZW5jZQorCSAqIHJlc3RhcnRzIGF0IFYwIChhZnRlciBleGVjdXRpbmcgVjUpLCB0aGUgZ2F0ZSBhcnJheSBhdXRvbWF0aWNhbGx5CisJICogZGlzYWJsZXMgZ2F0aW5nIGZvciB0aGUgREFDIGNsb2NrIGFuZCBhbGwgREFDIGNoaXAgc2VsZWN0cy4KKwkgKi8KIAotCS8vIENvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGFyZ2V0IERBQydzIHNlcmlhbCBwYWNrZXQ6ICggQTEwRCBERERECi0JLy8gKSwoIEREREQgRERERCApLCggMHgwRiApLCggMHgwMCApIHdoZXJlIEEgaXMgY2hhbjwwPiwgYW5kIEQ8MTI6MD4KLQkvLyBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEgV09SRCB2YWx1ZSAodGhhdCB3cml0ZXMgdG8gYQotCS8vIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwpIHRoYXQgc2VydmVzIHRvIGtlZXAgdGhlIGNsb2NrCi0JLy8gcnVubmluZyBhZnRlciB0aGUgcGFja2V0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHRhcmdldCBEQUMuCi0JU2VuZERBQyhkZXYsIDB4MEYwMDAwMDAJLy9Db250aW51ZSBjbG9jayBhZnRlciB0YXJnZXQgREFDCi0JCS8vZGF0YSAod3JpdGUgdG8gbm9uLWV4aXN0ZW50Ci0JCS8vdHJpbWRhYykuCi0JCXwgMHgwMDAwNDAwMAkvLyBBZGRyZXNzIHRoZSB0d28gbWFpbiBkdWFsLURBQwotCQkvLyBkZXZpY2VzIChUU0wncyBjaGlwIHNlbGVjdCBlbmFibGVzCi0JCS8vIHRhcmdldCBkZXZpY2UpLgotCQl8ICgodWludDMyX3QpIChjaGFuICYgMSkgPDwgMTUpCS8vIEFkZHJlc3MgdGhlIERBQwotCQkvLyBjaGFubmVsIHdpdGhpbiB0aGUKLQkJLy8gZGV2aWNlLgotCQl8ICh1aW50MzJfdCkgZGFjZGF0YSk7CS8vIEluY2x1ZGUgREFDIHNldHBvaW50IGRhdGEuCisJV1NJbWFnZSA9IChjaGFuICYgMikgPyBXUzEgOiBXUzI7CisJLyogQ2hvb3NlIERBQyBjaGlwIHNlbGVjdCB0byBiZSBhc3NlcnRlZC4gKi8KKwlTRVRWRUNUKDIsIFhTRDIgfCBYRklGT18xIHwgV1NJbWFnZSk7CisJLyogU2xvdCAyOiBUcmFuc21pdCBoaWdoIGRhdGEgYnl0ZSB0byB0YXJnZXQgREFDLiAqLworCVNFVFZFQ1QoMywgWFNEMiB8IFhGSUZPXzAgfCBXU0ltYWdlKTsKKwkvKiBTbG90IDM6IFRyYW5zbWl0IGxvdyBkYXRhIGJ5dGUgdG8gdGFyZ2V0IERBQy4gKi8KKwlTRVRWRUNUKDQsIFhTRDIgfCBYRklGT18zIHwgV1MzKTsKKwkvKiBTbG90IDQ6IFRyYW5zbWl0IHRvIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwgdG8ga2VlcCBjbG9jayAqLworCVNFVFZFQ1QoNSwgWFNEMiB8IFhGSUZPXzIgfCBXUzMgfCBFT1MpOworCS8qIFNsb3QgNTogcnVubmluZyBhZnRlciB3cml0aW5nIHRhcmdldCBEQUMncyBsb3cgZGF0YSBieXRlLiAqLworCisJLyogIENvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGFyZ2V0IERBQydzIHNlcmlhbCBwYWNrZXQ6CisJICogKCBBMTBEIEREREQgKSwoIEREREQgRERERCApLCggMHgwRiApLCggMHgwMCApIHdoZXJlIEEgaXMgY2hhbjwwPiwKKwkgKiBhbmQgRDwxMjowPiBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEgV09SRCB2YWx1ZSAodGhhdCB3cml0ZXMKKwkgKiB0byBhICBub24tZXhpc3RlbnQgVHJpbURhYyBjaGFubmVsKSB0aGF0IHNlcnZlcyB0byBrZWVwIHRoZSBjbG9jaworCSAqIHJ1bm5pbmcgYWZ0ZXIgdGhlIHBhY2tldCBoYXMgYmVlbiBzZW50IHRvIHRoZSB0YXJnZXQgREFDLgorCSAqLworCVNlbmREQUMoZGV2LCAweDBGMDAwMDAwCisJCS8qIENvbnRpbnVlIGNsb2NrIGFmdGVyIHRhcmdldCBEQUMgZGF0YSAod3JpdGUgdG8gbm9uLWV4aXN0ZW50IHRyaW1kYWMpLiAqLworCQl8IDB4MDAwMDQwMDAKKwkJLyogQWRkcmVzcyB0aGUgdHdvIG1haW4gZHVhbC1EQUMgZGV2aWNlcyAoVFNMJ3MgY2hpcCBzZWxlY3QgZW5hYmxlcworCQkgKiB0YXJnZXQgZGV2aWNlKS4gKi8KKwkJfCAoKHVpbnQzMl90KSAoY2hhbiAmIDEpIDw8IDE1KQorCQkvKiAgQWRkcmVzcyB0aGUgREFDIGNoYW5uZWwgd2l0aGluIHRoZSAgZGV2aWNlLiAqLworCQl8ICh1aW50MzJfdCkgZGFjZGF0YSk7CS8qICBJbmNsdWRlIERBQyBzZXRwb2ludCBkYXRhLiAqLwogCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBQcml2YXRlIGhlbHBlciBmdW5jdGlvbjogVHJhbnNtaXQgc2VyaWFsIGRhdGEgdG8gREFDIHZpYSBBdWRpbwotLy8gY2hhbm5lbCAyLiAgQXNzdW1lczogKDEpIFRTTDIgc2xvdCByZWNvcmRzIGluaXRpYWxpemVkLCBhbmQgKDIpCi0vLyBEYWNwb2wgY29udGFpbnMgdmFsaWQgdGFyZ2V0IGltYWdlLgorLyogUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb246IFRyYW5zbWl0IHNlcmlhbCBkYXRhIHRvIERBQyB2aWEgQXVkaW8KKyAqIGNoYW5uZWwgMi4gIEFzc3VtZXM6ICgxKSBUU0wyIHNsb3QgcmVjb3JkcyBpbml0aWFsaXplZCwgYW5kICgyKQorICogRGFjcG9sIGNvbnRhaW5zIHZhbGlkIHRhcmdldCBpbWFnZS4KKyAqLwogCi1zdGF0aWMgdm9pZCBTZW5kREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCkKK3N0YXRpYyB2b2lkIFNlbmREQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKQogewogCi0JLy8gU1RBUlQgVEhFIFNFUklBTCBDTE9DSyBSVU5OSU5HIC0tLS0tLS0tLS0tLS0KKwkvKiBTVEFSVCBUSEUgU0VSSUFMIENMT0NLIFJVTk5JTkcgLS0tLS0tLS0tLS0tLSAqLwogCi0JLy8gQXNzZXJ0IERBQyBwb2xhcml0eSBjb250cm9sIGFuZCBlbmFibGUgZ2F0aW5nIG9mIERBQyBzZXJpYWwgY2xvY2sKLQkvLyBhbmQgYXVkaW8gYml0IHN0cmVhbSBzaWduYWxzLiAgQXQgdGhpcyBwb2ludCBpbiB0aW1lIHdlIG11c3QgYmUKLQkvLyBhc3N1cmVkIG9mIGJlaW5nIGluIHRpbWUgc2xvdCAwLiAgSWYgd2UgYXJlIG5vdCBpbiBzbG90IDAsIHRoZQotCS8vIHNlcmlhbCBjbG9jayBhbmQgYXVkaW8gc3RyZWFtIHNpZ25hbHMgd2lsbCBiZSBkaXNhYmxlZDsgdGhpcyBpcwotCS8vIGJlY2F1c2UgdGhlIGZvbGxvd2luZyBERUJJd3JpdGUgc3RhdGVtZW50ICh3aGljaCBlbmFibGVzIHNpZ25hbHMKLQkvLyB0byBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgZ2F0ZSBhcnJheSkgd291bGQgZXhlY3V0ZSBiZWZvcmUgdGhlCi0JLy8gdHJhaWxpbmcgZWRnZSBvZiBXUzEvV1MzICh3aGljaCB0dXJucyBvZmYgdGhlIHNpZ25hbHMpLCB0aHVzCi0JLy8gY2F1c2luZyB0aGUgc2lnbmFscyB0byBiZSBpbmFjdGl2ZSBkdXJpbmcgdGhlIERBQyB3cml0ZS4KKwkvKiBBc3NlcnQgREFDIHBvbGFyaXR5IGNvbnRyb2wgYW5kIGVuYWJsZSBnYXRpbmcgb2YgREFDIHNlcmlhbCBjbG9jaworCSAqIGFuZCBhdWRpbyBiaXQgc3RyZWFtIHNpZ25hbHMuICBBdCB0aGlzIHBvaW50IGluIHRpbWUgd2UgbXVzdCBiZQorCSAqIGFzc3VyZWQgb2YgYmVpbmcgaW4gdGltZSBzbG90IDAuICBJZiB3ZSBhcmUgbm90IGluIHNsb3QgMCwgdGhlCisJICogc2VyaWFsIGNsb2NrIGFuZCBhdWRpbyBzdHJlYW0gc2lnbmFscyB3aWxsIGJlIGRpc2FibGVkOyB0aGlzIGlzCisJICogYmVjYXVzZSB0aGUgZm9sbG93aW5nIERFQkl3cml0ZSBzdGF0ZW1lbnQgKHdoaWNoIGVuYWJsZXMgc2lnbmFscworCSAqIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRoZSBnYXRlIGFycmF5KSB3b3VsZCBleGVjdXRlIGJlZm9yZSB0aGUKKwkgKiB0cmFpbGluZyBlZGdlIG9mIFdTMS9XUzMgKHdoaWNoIHR1cm5zIG9mZiB0aGUgc2lnbmFscyksIHRodXMKKwkgKiBjYXVzaW5nIHRoZSBzaWduYWxzIHRvIGJlIGluYWN0aXZlIGR1cmluZyB0aGUgREFDIHdyaXRlLgorCSAqLwogCURFQkl3cml0ZShkZXYsIExQX0RBQ1BPTCwgZGV2cHJpdi0+RGFjcG9sKTsKIAotCS8vIFRSQU5TRkVSIE9VVFBVVCBEV09SRCBWQUxVRSBJTlRPIEEyJ1MgT1VUUFVUIEZJRk8gLS0tLS0tLS0tLS0tLS0tLQorCS8qIFRSQU5TRkVSIE9VVFBVVCBEV09SRCBWQUxVRSBJTlRPIEEyJ1MgT1VUUFVUIEZJRk8gLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0JLy8gQ29weSBEQUMgc2V0cG9pbnQgdmFsdWUgdG8gREFDJ3Mgb3V0cHV0IERNQSBidWZmZXIuCisJLyogQ29weSBEQUMgc2V0cG9pbnQgdmFsdWUgdG8gREFDJ3Mgb3V0cHV0IERNQSBidWZmZXIuICovCiAKLQkvL1dSNzE0NiggKHVpbnQzMl90KWRldnByaXYtPnBEYWNXQnVmLCB2YWwgKTsKKwkvKiBXUjcxNDYoICh1aW50MzJfdClkZXZwcml2LT5wRGFjV0J1ZiwgdmFsICk7ICovCiAJKmRldnByaXYtPnBEYWNXQnVmID0gdmFsOwogCi0JLy8gZW5hYiB0aGUgb3V0cHV0IERNQSB0cmFuc2Zlci4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgRE1BQyB0byBjb3B5Ci0JLy8gdGhlIERBQydzIGRhdGEgdmFsdWUgdG8gQTIncyBvdXRwdXQgRklGTy4gIFRoZSBETUEgdHJhbnNmZXIgd2lsbAotCS8vIHRoZW4gaW1tZWRpYXRlbHkgdGVybWluYXRlIGJlY2F1c2UgdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcwotCS8vIHJlYWNoZWQgdXBvbiB0cmFuc2ZlciBvZiB0aGUgZmlyc3QgRFdPUkQgdmFsdWUuCisJLyogZW5hYiB0aGUgb3V0cHV0IERNQSB0cmFuc2Zlci4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgRE1BQyB0byBjb3B5CisJICogdGhlIERBQydzIGRhdGEgdmFsdWUgdG8gQTIncyBvdXRwdXQgRklGTy4gIFRoZSBETUEgdHJhbnNmZXIgd2lsbAorCSAqIHRoZW4gaW1tZWRpYXRlbHkgdGVybWluYXRlIGJlY2F1c2UgdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcworCSAqIHJlYWNoZWQgdXBvbiB0cmFuc2ZlciBvZiB0aGUgZmlyc3QgRFdPUkQgdmFsdWUuCisJICovCiAJTUNfRU5BQkxFKFBfTUMxLCBNQzFfQTJPVVQpOwogCi0JLy8gV2hpbGUgdGhlIERNQSB0cmFuc2ZlciBpcyBleGVjdXRpbmcgLi4uCisJLyogIFdoaWxlIHRoZSBETUEgdHJhbnNmZXIgaXMgZXhlY3V0aW5nIC4uLiAqLwogCi0JLy8gUmVzZXQgQXVkaW8yIG91dHB1dCBGSUZPJ3MgdW5kZXJmbG93IGZsYWcgKGFsb25nIHdpdGggYW55IG90aGVyCi0JLy8gRklGTyB1bmRlcmZsb3cvb3ZlcmZsb3cgZmxhZ3MpLiAgV2hlbiBzZXQsIHRoaXMgZmxhZyB3aWxsCi0JLy8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGVtZXJnZWQgZnJvbSBzbG90IDAuCisJLyogUmVzZXQgQXVkaW8yIG91dHB1dCBGSUZPJ3MgdW5kZXJmbG93IGZsYWcgKGFsb25nIHdpdGggYW55IG90aGVyCisJICogRklGTyB1bmRlcmZsb3cvb3ZlcmZsb3cgZmxhZ3MpLiAgV2hlbiBzZXQsIHRoaXMgZmxhZyB3aWxsCisJICogaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGVtZXJnZWQgZnJvbSBzbG90IDAuCisJICovCiAJV1I3MTQ2KFBfSVNSLCBJU1JfQUZPVSk7CiAKLQkvLyBXYWl0IGZvciB0aGUgRE1BIHRyYW5zZmVyIHRvIGZpbmlzaCBzbyB0aGF0IHRoZXJlIHdpbGwgYmUgZGF0YQotCS8vIGF2YWlsYWJsZSBpbiB0aGUgRklGTyB3aGVuIHRpbWUgc2xvdCAxIHRyaWVzIHRvIHRyYW5zZmVyIGEgRFdPUkQKLQkvLyBmcm9tIHRoZSBGSUZPIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyLiAgV2UgdGVzdCBmb3IgRE1BCi0JLy8gRG9uZSBieSBwb2xsaW5nIHRoZSBETUFDIGVuYWJsZSBmbGFnOyB0aGlzIGZsYWcgaXMgYXV0b21hdGljYWxseQotCS8vIGNsZWFyZWQgd2hlbiB0aGUgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLgotCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkgOworCS8qIFdhaXQgZm9yIHRoZSBETUEgdHJhbnNmZXIgdG8gZmluaXNoIHNvIHRoYXQgdGhlcmUgd2lsbCBiZSBkYXRhCisJICogYXZhaWxhYmxlIGluIHRoZSBGSUZPIHdoZW4gdGltZSBzbG90IDEgdHJpZXMgdG8gdHJhbnNmZXIgYSBEV09SRAorCSAqIGZyb20gdGhlIEZJRk8gdG8gdGhlIG91dHB1dCBidWZmZXIgcmVnaXN0ZXIuICBXZSB0ZXN0IGZvciBETUEKKwkgKiBEb25lIGJ5IHBvbGxpbmcgdGhlIERNQUMgZW5hYmxlIGZsYWc7IHRoaXMgZmxhZyBpcyBhdXRvbWF0aWNhbGx5CisJICogY2xlYXJlZCB3aGVuIHRoZSB0cmFuc2ZlciBoYXMgZmluaXNoZWQuCisJICovCisJd2hpbGUgKChSUjcxNDYoUF9NQzEpICYgTUMxX0EyT1VUKSAhPSAwKQorCQk7CiAKLQkvLyBTVEFSVCBUSEUgT1VUUFVUIFNUUkVBTSBUTyBUSEUgVEFSR0VUIERBQyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qIFNUQVJUIFRIRSBPVVRQVVQgU1RSRUFNIFRPIFRIRSBUQVJHRVQgREFDIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQkvLyBGSUZPIGRhdGEgaXMgbm93IGF2YWlsYWJsZSwgc28gd2UgZW5hYmxlIGV4ZWN1dGlvbiBvZiB0aW1lIHNsb3RzCi0JLy8gMSBhbmQgaGlnaGVyIGJ5IGNsZWFyaW5nIHRoZSBFT1MgZmxhZyBpbiBzbG90IDAuICBOb3RlIHRoYXQgU0QzCi0JLy8gd2lsbCBiZSBzaGlmdGVkIGluIGFuZCBzdG9yZWQgaW4gRkJfQlVGRkVSMiBmb3IgZW5kLW9mLXNsb3QtbGlzdAotCS8vIGRldGVjdGlvbi4KKwkvKiBGSUZPIGRhdGEgaXMgbm93IGF2YWlsYWJsZSwgc28gd2UgZW5hYmxlIGV4ZWN1dGlvbiBvZiB0aW1lIHNsb3RzCisJICogMSBhbmQgaGlnaGVyIGJ5IGNsZWFyaW5nIHRoZSBFT1MgZmxhZyBpbiBzbG90IDAuICBOb3RlIHRoYXQgU0QzCisJICogd2lsbCBiZSBzaGlmdGVkIGluIGFuZCBzdG9yZWQgaW4gRkJfQlVGRkVSMiBmb3IgZW5kLW9mLXNsb3QtbGlzdAorCSAqIGRldGVjdGlvbi4KKwkgKi8KIAlTRVRWRUNUKDAsIFhTRDIgfCBSU0QzIHwgU0lCX0EyKTsKIAotCS8vIFdhaXQgZm9yIHNsb3QgMSB0byBleGVjdXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBQYWNrZXQgd2lsbCBiZQotCS8vIHRyYW5zbWl0dGVkLiAgVGhpcyBpcyBkZXRlY3RlZCBieSBwb2xsaW5nIHRoZSBBdWRpbzIgb3V0cHV0IEZJRk8KLQkvLyB1bmRlcmZsb3cgZmxhZywgd2hpY2ggd2lsbCBiZSBzZXQgd2hlbiBzbG90IDEgZXhlY3V0aW9uIGhhcwotCS8vIGZpbmlzaGVkIHRyYW5zZmVycmluZyB0aGUgREFDJ3MgZGF0YSBEV09SRCBmcm9tIHRoZSBvdXRwdXQgRklGTwotCS8vIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyLgotCXdoaWxlICgoUlI3MTQ2KFBfU1NSKSAmIFNTUl9BRjJfT1VUKSA9PSAwKSA7CisJLyogV2FpdCBmb3Igc2xvdCAxIHRvIGV4ZWN1dGUgdG8gZW5zdXJlIHRoYXQgdGhlIFBhY2tldCB3aWxsIGJlCisJICogdHJhbnNtaXR0ZWQuICBUaGlzIGlzIGRldGVjdGVkIGJ5IHBvbGxpbmcgdGhlIEF1ZGlvMiBvdXRwdXQgRklGTworCSAqIHVuZGVyZmxvdyBmbGFnLCB3aGljaCB3aWxsIGJlIHNldCB3aGVuIHNsb3QgMSBleGVjdXRpb24gaGFzCisJICogZmluaXNoZWQgdHJhbnNmZXJyaW5nIHRoZSBEQUMncyBkYXRhIERXT1JEIGZyb20gdGhlIG91dHB1dCBGSUZPCisJICogdG8gdGhlIG91dHB1dCBidWZmZXIgcmVnaXN0ZXIuCisJICovCisJd2hpbGUgKChSUjcxNDYoUF9TU1IpICYgU1NSX0FGMl9PVVQpID09IDApCisJCTsKIAotCS8vIFNldCB1cCB0byB0cmFwIGV4ZWN1dGlvbiBhdCBzbG90IDAgd2hlbiB0aGUgVFNMIHNlcXVlbmNlciBjeWNsZXMKLQkvLyBiYWNrIHRvIHNsb3QgMCBhZnRlciBleGVjdXRpbmcgdGhlIEVPUyBpbiBzbG90IDUuICBBbHNvLAotCS8vIHNpbXVsdGFuZW91c2x5IHNoaWZ0IG91dCBhbmQgaW4gdGhlIDB4MDAgdGhhdCBpcyBBTFdBWVMgdGhlIHZhbHVlCi0JLy8gc3RvcmVkIGluIHRoZSBsYXN0IGJ5dGUgdG8gYmUgc2hpZnRlZCBvdXQgb2YgdGhlIEZJRk8ncyBEV09SRAotCS8vIGJ1ZmZlciByZWdpc3Rlci4KKwkvKiBTZXQgdXAgdG8gdHJhcCBleGVjdXRpb24gYXQgc2xvdCAwIHdoZW4gdGhlIFRTTCBzZXF1ZW5jZXIgY3ljbGVzCisJICogYmFjayB0byBzbG90IDAgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBFT1MgaW4gc2xvdCA1LiAgQWxzbywKKwkgKiBzaW11bHRhbmVvdXNseSBzaGlmdCBvdXQgYW5kIGluIHRoZSAweDAwIHRoYXQgaXMgQUxXQVlTIHRoZSB2YWx1ZQorCSAqIHN0b3JlZCBpbiB0aGUgbGFzdCBieXRlIHRvIGJlIHNoaWZ0ZWQgb3V0IG9mIHRoZSBGSUZPJ3MgRFdPUkQKKwkgKiBidWZmZXIgcmVnaXN0ZXIuCisJICovCiAJU0VUVkVDVCgwLCBYU0QyIHwgWEZJRk9fMiB8IFJTRDIgfCBTSUJfQTIgfCBFT1MpOwogCi0JLy8gV0FJVCBGT1IgVEhFIFRSQU5TQUNUSU9OIFRPIEZJTklTSCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qIFdBSVQgRk9SIFRIRSBUUkFOU0FDVElPTiBUTyBGSU5JU0ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCS8vIFdhaXQgZm9yIHRoZSBUU0wgdG8gZmluaXNoIGV4ZWN1dGluZyBhbGwgdGltZSBzbG90cyBiZWZvcmUKLQkvLyBleGl0aW5nIHRoaXMgZnVuY3Rpb24uICBXZSBtdXN0IGRvIHRoaXMgc28gdGhhdCB0aGUgbmV4dCBEQUMKLQkvLyB3cml0ZSBkb2Vzbid0IHN0YXJ0LCB0aGVyZWJ5IGVuYWJsaW5nIGNsb2NrL2NoaXAgc2VsZWN0IHNpZ25hbHM6Ci0JLy8gMS4gQmVmb3JlIHRoZSBUU0wgc2VxdWVuY2UgY3ljbGVzIGJhY2sgdG8gc2xvdCAwLCB3aGljaCBkaXNhYmxlcwotCS8vIHRoZSBjbG9jay9jcyBzaWduYWwgZ2F0aW5nIGFuZCB0cmFwcyBzbG90IC8vIGxpc3QgZXhlY3V0aW9uLiAgSWYKLQkvLyB3ZSBoYXZlIG5vdCB5ZXQgZmluaXNoZWQgc2xvdCA1IHRoZW4gdGhlIGNsb2NrL2NzIHNpZ25hbHMgYXJlCi0JLy8gc3RpbGwgZ2F0ZWQgYW5kIHdlIGhhdmUgLy8gbm90IGZpbmlzaGVkIHRyYW5zbWl0dGluZyB0aGUgc3RyZWFtLgotCS8vIDIuIFdoaWxlIHNsb3RzIDItNSBhcmUgZXhlY3V0aW5nIGR1ZSB0byBhIGxhdGUgc2xvdCAwIHRyYXAuICBJbgotCS8vIHRoaXMgY2FzZSwgdGhlIHNsb3Qgc2VxdWVuY2UgaXMgY3VycmVudGx5IC8vIHJlcGVhdGluZywgYnV0IHdpdGgKLQkvLyBjbG9jay9jcyBzaWduYWxzIGRpc2FibGVkLiAgV2UgbXVzdCB3YWl0IGZvciBzbG90IDAgdG8gdHJhcAotCS8vIGV4ZWN1dGlvbiBiZWZvcmUgc2V0dGluZyAvLyB1cCB0aGUgbmV4dCBEQUMgc2V0cG9pbnQgRE1BIHRyYW5zZmVyCi0JLy8gYW5kIGVuYWJsaW5nIHRoZSBjbG9jay9jcyBzaWduYWxzLiAgVG8gZGV0ZWN0IHRoZSBlbmQgb2Ygc2xvdCA1LAotCS8vIHdlIHRlc3QgZm9yIHRoZSBGQl9CVUZGRVIyIE1TQiBjb250ZW50cyB0byBiZSBlcXVhbCB0byAweEZGLiAgSWYKLQkvLyB0aGUgVFNMIGhhcyBub3QgeWV0IGZpbmlzaGVkIGV4ZWN1dGluZyBzbG90IDUgLi4uCisJLyogV2FpdCBmb3IgdGhlIFRTTCB0byBmaW5pc2ggZXhlY3V0aW5nIGFsbCB0aW1lIHNsb3RzIGJlZm9yZQorCSAqIGV4aXRpbmcgdGhpcyBmdW5jdGlvbi4gIFdlIG11c3QgZG8gdGhpcyBzbyB0aGF0IHRoZSBuZXh0IERBQworCSAqIHdyaXRlIGRvZXNuJ3Qgc3RhcnQsIHRoZXJlYnkgZW5hYmxpbmcgY2xvY2svY2hpcCBzZWxlY3Qgc2lnbmFsczoKKwkgKgorCSAqIDEuIEJlZm9yZSB0aGUgVFNMIHNlcXVlbmNlIGN5Y2xlcyBiYWNrIHRvIHNsb3QgMCwgd2hpY2ggZGlzYWJsZXMKKwkgKiAgICB0aGUgY2xvY2svY3Mgc2lnbmFsIGdhdGluZyBhbmQgdHJhcHMgc2xvdCAvLyBsaXN0IGV4ZWN1dGlvbi4KKwkgKiAgICB3ZSBoYXZlIG5vdCB5ZXQgZmluaXNoZWQgc2xvdCA1IHRoZW4gdGhlIGNsb2NrL2NzIHNpZ25hbHMgYXJlCisJICogICAgc3RpbGwgZ2F0ZWQgYW5kIHdlIGhhdmUgbm90IGZpbmlzaGVkIHRyYW5zbWl0dGluZyB0aGUgc3RyZWFtLgorCSAqCisJICogMi4gV2hpbGUgc2xvdHMgMi01IGFyZSBleGVjdXRpbmcgZHVlIHRvIGEgbGF0ZSBzbG90IDAgdHJhcC4gIEluCisJICogICAgdGhpcyBjYXNlLCB0aGUgc2xvdCBzZXF1ZW5jZSBpcyBjdXJyZW50bHkgcmVwZWF0aW5nLCBidXQgd2l0aAorCSAqICAgIGNsb2NrL2NzIHNpZ25hbHMgZGlzYWJsZWQuICBXZSBtdXN0IHdhaXQgZm9yIHNsb3QgMCB0byB0cmFwCisJICogICAgZXhlY3V0aW9uIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBuZXh0IERBQyBzZXRwb2ludCBETUEgdHJhbnNmZXIKKwkgKiAgICBhbmQgZW5hYmxpbmcgdGhlIGNsb2NrL2NzIHNpZ25hbHMuICBUbyBkZXRlY3QgdGhlIGVuZCBvZiBzbG90IDUsCisJICogICAgd2UgdGVzdCBmb3IgdGhlIEZCX0JVRkZFUjIgTVNCIGNvbnRlbnRzIHRvIGJlIGVxdWFsIHRvIDB4RkYuICBJZgorCSAqICAgIHRoZSBUU0wgaGFzIG5vdCB5ZXQgZmluaXNoZWQgZXhlY3V0aW5nIHNsb3QgNSAuLi4KKwkgKi8KIAlpZiAoKFJSNzE0NihQX0ZCX0JVRkZFUjIpICYgMHhGRjAwMDAwMCkgIT0gMCkgewotCQkvLyBUaGUgdHJhcCB3YXMgc2V0IG9uIHRpbWUgYW5kIHdlIGFyZSBzdGlsbCBleGVjdXRpbmcgc29tZXdoZXJlCi0JCS8vIGluIHNsb3RzIDItNSwgc28gd2Ugbm93IHdhaXQgZm9yIHNsb3QgMCB0byBleGVjdXRlIGFuZCB0cmFwCi0JCS8vIFRTTCBleGVjdXRpb24uICBUaGlzIGlzIGRldGVjdGVkIHdoZW4gRkJfQlVGRkVSMiBNU0IgY2hhbmdlcwotCQkvLyBmcm9tIDB4RkYgdG8gMHgwMCwgd2hpY2ggc2xvdCAwIGNhdXNlcyB0byBoYXBwZW4gYnkgc2hpZnRpbmcKLQkJLy8gb3V0L2luIG9uIFNEMiB0aGUgMHgwMCB0aGF0IGlzIGFsd2F5cyByZWZlcmVuY2VkIGJ5IHNsb3QgNS4KLQkJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApIDsKKwkJLyogVGhlIHRyYXAgd2FzIHNldCBvbiB0aW1lIGFuZCB3ZSBhcmUgc3RpbGwgZXhlY3V0aW5nIHNvbWV3aGVyZQorCQkgKiBpbiBzbG90cyAyLTUsIHNvIHdlIG5vdyB3YWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSBhbmQgdHJhcAorCQkgKiBUU0wgZXhlY3V0aW9uLiAgVGhpcyBpcyBkZXRlY3RlZCB3aGVuIEZCX0JVRkZFUjIgTVNCIGNoYW5nZXMKKwkJICogZnJvbSAweEZGIHRvIDB4MDAsIHdoaWNoIHNsb3QgMCBjYXVzZXMgdG8gaGFwcGVuIGJ5IHNoaWZ0aW5nCisJCSAqIG91dC9pbiBvbiBTRDIgdGhlIDB4MDAgdGhhdCBpcyBhbHdheXMgcmVmZXJlbmNlZCBieSBzbG90IDUuCisJCSAqLworCQkgd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApCisJCQk7CiAJfQotCS8vIEVpdGhlciAoMSkgd2Ugd2VyZSB0b28gbGF0ZSBzZXR0aW5nIHRoZSBzbG90IDAgdHJhcDsgdGhlIFRTTAotCS8vIHNlcXVlbmNlciByZXN0YXJ0ZWQgc2xvdCAwIGJlZm9yZSB3ZSBjb3VsZCBzZXQgdGhlIEVPUyB0cmFwIGZsYWcsCi0JLy8gb3IgKDIpIHdlIHdlcmUgbm90IGxhdGUgYW5kIGV4ZWN1dGlvbiBpcyBub3cgdHJhcHBlZCBhdCBzbG90IDAuCi0JLy8gSW4gZWl0aGVyIGNhc2UsIHdlIG11c3Qgbm93IGNoYW5nZSBzbG90IDAgc28gdGhhdCBpdCB3aWxsIHN0b3JlCi0JLy8gdmFsdWUgMHhGRiAoaW5zdGVhZCBvZiAweDAwKSB0byBGQl9CVUZGRVIyIG5leHQgdGltZSBpdCBleGVjdXRlcy4KLQkvLyBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSByZXByb2dyYW0gc2xvdCAwIHNvIHRoYXQgaXQgd2lsbCBzaGlmdCBpbgotCS8vIFNEMywgd2hpY2ggaXMgZHJpdmVuIG9ubHkgYnkgYSBwdWxsLXVwIHJlc2lzdG9yLgorCS8qIEVpdGhlciAoMSkgd2Ugd2VyZSB0b28gbGF0ZSBzZXR0aW5nIHRoZSBzbG90IDAgdHJhcDsgdGhlIFRTTAorCSAqIHNlcXVlbmNlciByZXN0YXJ0ZWQgc2xvdCAwIGJlZm9yZSB3ZSBjb3VsZCBzZXQgdGhlIEVPUyB0cmFwIGZsYWcsCisJICogb3IgKDIpIHdlIHdlcmUgbm90IGxhdGUgYW5kIGV4ZWN1dGlvbiBpcyBub3cgdHJhcHBlZCBhdCBzbG90IDAuCisJICogSW4gZWl0aGVyIGNhc2UsIHdlIG11c3Qgbm93IGNoYW5nZSBzbG90IDAgc28gdGhhdCBpdCB3aWxsIHN0b3JlCisJICogdmFsdWUgMHhGRiAoaW5zdGVhZCBvZiAweDAwKSB0byBGQl9CVUZGRVIyIG5leHQgdGltZSBpdCBleGVjdXRlcy4KKwkgKiBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSByZXByb2dyYW0gc2xvdCAwIHNvIHRoYXQgaXQgd2lsbCBzaGlmdCBpbgorCSAqIFNEMywgd2hpY2ggaXMgZHJpdmVuIG9ubHkgYnkgYSBwdWxsLXVwIHJlc2lzdG9yLgorCSAqLwogCVNFVFZFQ1QoMCwgUlNEMyB8IFNJQl9BMiB8IEVPUyk7CiAKLQkvLyBXYWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSwgYXQgd2hpY2ggdGltZSB0aGUgVFNMIGlzIHNldHVwIGZvcgotCS8vIHRoZSBuZXh0IERBQyB3cml0ZS4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCi0JLy8gZnJvbSAweDAwIHRvIDB4RkYuCi0Jd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApID09IDApIDsKKwkvKiBXYWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSwgYXQgd2hpY2ggdGltZSB0aGUgVFNMIGlzIHNldHVwIGZvcgorCSAqIHRoZSBuZXh0IERBQyB3cml0ZS4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCisJICogZnJvbSAweDAwIHRvIDB4RkYuCisJICovCisJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApID09IDApCisJCTsKIH0KIAotc3RhdGljIHZvaWQgV3JpdGVNSVNDMihjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBOZXdJbWFnZSkKK3N0YXRpYyB2b2lkIFdyaXRlTUlTQzIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgTmV3SW1hZ2UpCiB7Ci0JREVCSXdyaXRlKGRldiwgTFBfTUlTQzEsIE1JU0MxX1dFTkFCTEUpOwkvLyBlbmFiIHdyaXRlcyB0bwotCS8vIE1JU0MyIHJlZ2lzdGVyLgotCURFQkl3cml0ZShkZXYsIExQX1dSTUlTQzIsIE5ld0ltYWdlKTsJLy8gV3JpdGUgbmV3IGltYWdlIHRvIE1JU0MyLgotCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9XRElTQUJMRSk7CS8vIERpc2FibGUgd3JpdGVzIHRvIE1JU0MyLgorCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9XRU5BQkxFKTsJLyogIGVuYWIgd3JpdGVzIHRvICovCisJLyogIE1JU0MyIHJlZ2lzdGVyLiAqLworCURFQkl3cml0ZShkZXYsIExQX1dSTUlTQzIsIE5ld0ltYWdlKTsJLyogIFdyaXRlIG5ldyBpbWFnZSB0byBNSVNDMi4gKi8KKwlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfV0RJU0FCTEUpOwkvKiAgRGlzYWJsZSB3cml0ZXMgdG8gTUlTQzIuICovCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gSW5pdGlhbGl6ZSB0aGUgREVCSSBpbnRlcmZhY2UgZm9yIGFsbCB0cmFuc2ZlcnMuCisvKiAgSW5pdGlhbGl6ZSB0aGUgREVCSSBpbnRlcmZhY2UgZm9yIGFsbCB0cmFuc2ZlcnMuICovCiAKLXN0YXRpYyB1aW50MTZfdCBERUJJcmVhZChjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyKQorc3RhdGljIHVpbnQxNl90IERFQklyZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIpCiB7CiAJdWludDE2X3QgcmV0dmFsOwogCi0JLy8gU2V0IHVwIERFQkkgY29udHJvbCByZWdpc3RlciB2YWx1ZSBpbiBzaGFkb3cgUkFNLgorCS8qICBTZXQgdXAgREVCSSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIGluIHNoYWRvdyBSQU0uICovCiAJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfUkRXT1JEIHwgYWRkcik7CiAKLQkvLyBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLgorCS8qICBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLiAqLwogCURFQkl0cmFuc2ZlcihkZXYpOwogCi0JLy8gRmV0Y2ggdGFyZ2V0IHJlZ2lzdGVyIHZhbHVlLgorCS8qICBGZXRjaCB0YXJnZXQgcmVnaXN0ZXIgdmFsdWUuICovCiAJcmV0dmFsID0gKHVpbnQxNl90KSBSUjcxNDYoUF9ERUJJQUQpOwogCi0JLy8gUmV0dXJuIHJlZ2lzdGVyIHZhbHVlLgorCS8qICBSZXR1cm4gcmVnaXN0ZXIgdmFsdWUuICovCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLy8gRXhlY3V0ZSBhIERFQkkgdHJhbnNmZXIuICBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEKLS8vIGNyaXRpY2FsIHNlY3Rpb24uCi1zdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoY29tZWRpX2RldmljZSAqIGRldikKKy8qICBFeGVjdXRlIGEgREVCSSB0cmFuc2Zlci4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSAqLworLyogIGNyaXRpY2FsIHNlY3Rpb24uICovCitzdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQkvLyBJbml0aWF0ZSB1cGxvYWQgb2Ygc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wgcmVnaXN0ZXIuCisJLyogIEluaXRpYXRlIHVwbG9hZCBvZiBzaGFkb3cgUkFNIHRvIERFQkkgY29udHJvbCByZWdpc3Rlci4gKi8KIAlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0RFQkkpOwogCi0JLy8gV2FpdCBmb3IgY29tcGxldGlvbiBvZiB1cGxvYWQgZnJvbSBzaGFkb3cgUkFNIHRvIERFQkkgY29udHJvbAotCS8vIHJlZ2lzdGVyLgotCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfREVCSSkpIDsKKwkvKiAgV2FpdCBmb3IgY29tcGxldGlvbiBvZiB1cGxvYWQgZnJvbSBzaGFkb3cgUkFNIHRvIERFQkkgY29udHJvbCAqLworCS8qICByZWdpc3Rlci4gKi8KKwl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0RFQkkpKQorCQk7CiAKLQkvLyBXYWl0IHVudGlsIERFQkkgdHJhbnNmZXIgaXMgZG9uZS4KLQl3aGlsZSAoUlI3MTQ2KFBfUFNSKSAmIFBTUl9ERUJJX1MpIDsKKwkvKiAgV2FpdCB1bnRpbCBERUJJIHRyYW5zZmVyIGlzIGRvbmUuICovCisJd2hpbGUgKFJSNzE0NihQX1BTUikgJiBQU1JfREVCSV9TKQorCQk7CiB9CiAKLS8vIFdyaXRlIGEgdmFsdWUgdG8gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLgotc3RhdGljIHZvaWQgREVCSXdyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IHdkYXRhKQorLyogIFdyaXRlIGEgdmFsdWUgdG8gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLiAqLworc3RhdGljIHZvaWQgREVCSXdyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IHdkYXRhKQogewogCi0JLy8gU2V0IHVwIERFQkkgY29udHJvbCByZWdpc3RlciB2YWx1ZSBpbiBzaGFkb3cgUkFNLgorCS8qICBTZXQgdXAgREVCSSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIGluIHNoYWRvdyBSQU0uICovCiAJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfV1JXT1JEIHwgYWRkcik7CiAJV1I3MTQ2KFBfREVCSUFELCB3ZGF0YSk7CiAKLQkvLyBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLgorCS8qICBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLiAqLwogCURFQkl0cmFuc2ZlcihkZXYpOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmVwbGFjZSB0aGUgc3BlY2lmaWVkIGJpdHMgaW4gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLiAgSW1wb3J0czogbWFzawotLy8gc3BlY2lmaWVzIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkLCB3ZGF0YSBpcyBuZXcgdmFsdWUgdG8gYmUKLS8vIG9yJ2Qgd2l0aCB0aGUgbWFza2VkIG9yaWdpbmFsLgotc3RhdGljIHZvaWQgREVCSXJlcGxhY2UoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKKy8qIFJlcGxhY2UgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgZ2F0ZSBhcnJheSByZWdpc3Rlci4gIEltcG9ydHM6IG1hc2sKKyAqIHNwZWNpZmllcyBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCwgd2RhdGEgaXMgbmV3IHZhbHVlIHRvIGJlCisgKiBvcidkIHdpdGggdGhlIG1hc2tlZCBvcmlnaW5hbC4KKyAqLworc3RhdGljIHZvaWQgREVCSXJlcGxhY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKIAl1aW50MTZfdCB3ZGF0YSkKIHsKIAotCS8vIENvcHkgdGFyZ2V0IGdhdGUgYXJyYXkgcmVnaXN0ZXIgaW50byBQX0RFQklBRCByZWdpc3Rlci4KLQlXUjcxNDYoUF9ERUJJQ01ELCBERUJJX0NNRF9SRFdPUkQgfCBhZGRyKTsJLy8gU2V0IHVwIERFQkkgY29udHJvbAotCS8vIHJlZyB2YWx1ZSBpbiBzaGFkb3cKLQkvLyBSQU0uCi0JREVCSXRyYW5zZmVyKGRldik7CS8vIEV4ZWN1dGUgdGhlIERFQkkKLQkvLyBSZWFkIHRyYW5zZmVyLgorCS8qICBDb3B5IHRhcmdldCBnYXRlIGFycmF5IHJlZ2lzdGVyIGludG8gUF9ERUJJQUQgcmVnaXN0ZXIuICovCisJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfUkRXT1JEIHwgYWRkcik7CisJLyogU2V0IHVwIERFQkkgY29udHJvbCByZWcgdmFsdWUgaW4gc2hhZG93IFJBTS4gKi8KKwlERUJJdHJhbnNmZXIoZGV2KTsJLyogIEV4ZWN1dGUgdGhlIERFQkkgUmVhZCB0cmFuc2Zlci4gKi8KIAotCS8vIFdyaXRlIGJhY2sgdGhlIG1vZGlmaWVkIGltYWdlLgotCVdSNzE0NihQX0RFQklDTUQsIERFQklfQ01EX1dSV09SRCB8IGFkZHIpOwkvLyBTZXQgdXAgREVCSSBjb250cm9sCi0JLy8gcmVnIHZhbHVlIGluIHNoYWRvdwotCS8vIFJBTS4KKwkvKiAgV3JpdGUgYmFjayB0aGUgbW9kaWZpZWQgaW1hZ2UuICovCisJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfV1JXT1JEIHwgYWRkcik7CisJLyogU2V0IHVwIERFQkkgY29udHJvbCByZWcgdmFsdWUgaW4gc2hhZG93ICBSQU0uICovCiAKLQlXUjcxNDYoUF9ERUJJQUQsIHdkYXRhIHwgKCh1aW50MTZfdCkgUlI3MTQ2KFBfREVCSUFEKSAmIG1hc2spKTsJLy8gTW9kaWZ5IHRoZSByZWdpc3RlciBpbWFnZS4KLQlERUJJdHJhbnNmZXIoZGV2KTsJLy8gRXhlY3V0ZSB0aGUgREVCSSBXcml0ZSB0cmFuc2Zlci4KKwlXUjcxNDYoUF9ERUJJQUQsIHdkYXRhIHwgKCh1aW50MTZfdCkgUlI3MTQ2KFBfREVCSUFEKSAmIG1hc2spKTsKKwkvKiBNb2RpZnkgdGhlIHJlZ2lzdGVyIGltYWdlLiAqLworCURFQkl0cmFuc2ZlcihkZXYpOwkvKiAgRXhlY3V0ZSB0aGUgREVCSSBXcml0ZSB0cmFuc2Zlci4gKi8KIH0KIAotc3RhdGljIHZvaWQgQ2xvc2VETUFCKGNvbWVkaV9kZXZpY2UgKiBkZXYsIERNQUJVRiAqIHBkbWEsIHNpemVfdCBic2l6ZSkKK3N0YXRpYyB2b2lkIENsb3NlRE1BQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgYnVmZmVyRE1BICpwZG1hLCBzaXplX3QgYnNpemUpCiB7CiAJdm9pZCAqdmJwdHI7CiAJZG1hX2FkZHJfdCB2cHB0cjsKQEAgLTI3MjMsNyArMjc0MSw3IEBACiAJREVCVUcoIkNsb3NlRE1BQjogRW50ZXJpbmcgUzYyNkRSVl9DbG9zZURNQUIoKTpcbiIpOwogCWlmIChwZG1hID09IE5VTEwpCiAJCXJldHVybjsKLQkvL2ZpbmQgdGhlIG1hdGNoaW5nIGFsbG9jYXRpb24gZnJvbSB0aGUgYm9hcmQgc3RydWN0CisJLyogZmluZCB0aGUgbWF0Y2hpbmcgYWxsb2NhdGlvbiBmcm9tIHRoZSBib2FyZCBzdHJ1Y3QgKi8KIAogCXZicHRyID0gcGRtYS0+TG9naWNhbEJhc2U7CiAJdnBwdHIgPSBwZG1hLT5QaHlzaWNhbEJhc2U7CkBAIC0yNzM3LDI2OCArMjc1NSwyNjAgQEAKIAl9CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8gIENPVU5URVIgRlVOQ1RJT05TICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEFsbCBjb3VudGVyIGZ1bmN0aW9ucyBhZGRyZXNzIGEgc3BlY2lmaWMgY291bnRlciBieSBtZWFucyBvZiB0aGUKLS8vICJDb3VudGVyIiBhcmd1bWVudCwgd2hpY2ggaXMgYSBsb2dpY2FsIGNvdW50ZXIgbnVtYmVyLiAgVGhlIENvdW50ZXIKLS8vIGFyZ3VtZW50IG1heSBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIGxlZ2FsIHZhbHVlczogMD0wQSwgMT0xQSwKLS8vIDI9MkEsIDM9MEIsIDQ9MUIsIDU9MkIuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qICoqKioqKiAgQ09VTlRFUiBGVU5DVElPTlMgICoqKioqKiogKi8KKy8qIEFsbCBjb3VudGVyIGZ1bmN0aW9ucyBhZGRyZXNzIGEgc3BlY2lmaWMgY291bnRlciBieSBtZWFucyBvZiB0aGUKKyAqICJDb3VudGVyIiBhcmd1bWVudCwgd2hpY2ggaXMgYSBsb2dpY2FsIGNvdW50ZXIgbnVtYmVyLiAgVGhlIENvdW50ZXIKKyAqIGFyZ3VtZW50IG1heSBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIGxlZ2FsIHZhbHVlczogMD0wQSwgMT0xQSwKKyAqIDI9MkEsIDM9MEIsIDQ9MUIsIDU9MkIuCisgKi8KIAotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYm90aCBBIGFuZCBCCi0vLyBjb3VudGVyczoKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGJvdGggQSBhbmQgQiBjb3VudGVyczogKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLyBQUklWQVRFIENPVU5URVIgRlVOQ1RJT05TICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqICBQUklWQVRFIENPVU5URVIgRlVOQ1RJT05TICoqKioqKiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmVhZCBhIGNvdW50ZXIncyBvdXRwdXQgbGF0Y2guCisvKiAgUmVhZCBhIGNvdW50ZXIncyBvdXRwdXQgbGF0Y2guICovCiAKLXN0YXRpYyB1aW50MzJfdCBSZWFkTGF0Y2goY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQzMl90IFJlYWRMYXRjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgdmFsdWU7Ci0JLy9ERUJVRyBGSVhNRSBERUJVRygiUmVhZExhdGNoOiBSZWFkIExhdGNoIGVudGVyXG4iKTsKKwkvKiBERUJVRyBGSVhNRSBERUJVRygiUmVhZExhdGNoOiBSZWFkIExhdGNoIGVudGVyXG4iKTsgKi8KIAotCS8vIExhdGNoIGNvdW50cyBhbmQgZmV0Y2ggTFNXIG9mIGxhdGNoZWQgY291bnRzIHZhbHVlLgorCS8qICBMYXRjaCBjb3VudHMgYW5kIGZldGNoIExTVyBvZiBsYXRjaGVkIGNvdW50cyB2YWx1ZS4gKi8KIAl2YWx1ZSA9ICh1aW50MzJfdCkgREVCSXJlYWQoZGV2LCBrLT5NeUxhdGNoTHN3KTsKIAotCS8vIEZldGNoIE1TVyBvZiBsYXRjaGVkIGNvdW50cyBhbmQgY29tYmluZSB3aXRoIExTVy4KKwkvKiAgRmV0Y2ggTVNXIG9mIGxhdGNoZWQgY291bnRzIGFuZCBjb21iaW5lIHdpdGggTFNXLiAqLwogCXZhbHVlIHw9ICgodWludDMyX3QpIERFQklyZWFkKGRldiwgay0+TXlMYXRjaExzdyArIDIpIDw8IDE2KTsKIAotCS8vIERFQlVHIEZJWE1FIERFQlVHKCJSZWFkTGF0Y2g6IFJlYWQgTGF0Y2ggZXhpdFxuIik7CisJLyogIERFQlVHIEZJWE1FIERFQlVHKCJSZWFkTGF0Y2g6IFJlYWQgTGF0Y2ggZXhpdFxuIik7ICovCiAKLQkvLyBSZXR1cm4gbGF0Y2hlZCBjb3VudHMuCisJLyogIFJldHVybiBsYXRjaGVkIGNvdW50cy4gKi8KIAlyZXR1cm4gdmFsdWU7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJlc2V0IGEgY291bnRlcidzIGluZGV4IGFuZCBvdmVyZmxvdyBldmVudCBjYXB0dXJlIGZsYWdzLgorLyogIFJlc2V0IGEgY291bnRlcidzIGluZGV4IGFuZCBvdmVyZmxvdyBldmVudCBjYXB0dXJlIGZsYWdzLiAqLwogCi1zdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLCAodWludDE2X3QpICh+Q1JCTVNLX0lOVENUUkwpLAogCQlDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSk7CiB9CiAKLXN0YXRpYyB2b2lkIFJlc2V0Q2FwRmxhZ3NfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsICh1aW50MTZfdCkgKH5DUkJNU0tfSU5UQ1RSTCksCiAJCUNSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmV0dXJuIGNvdW50ZXIgc2V0dXAgaW4gYSBmb3JtYXQgKENPVU5URVJfU0VUVVApIHRoYXQgaXMgY29uc2lzdGVudAotLy8gZm9yIGJvdGggQSBhbmQgQiBjb3VudGVycy4KKy8qICBSZXR1cm4gY291bnRlciBzZXR1cCBpbiBhIGZvcm1hdCAoQ09VTlRFUl9TRVRVUCkgdGhhdCBpcyBjb25zaXN0ZW50ICovCisvKiAgZm9yIGJvdGggQSBhbmQgQiBjb3VudGVycy4gKi8KIAotc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0TW9kZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmE7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JiOwogCXJlZ2lzdGVyIHVpbnQxNl90IHNldHVwOwogCi0JLy8gRmV0Y2ggQ1JBIGFuZCBDUkIgcmVnaXN0ZXIgaW1hZ2VzLgorCS8qICBGZXRjaCBDUkEgYW5kIENSQiByZWdpc3RlciBpbWFnZXMuICovCiAJY3JhID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQSk7CiAJY3JiID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQik7CiAKLQkvLyBQb3B1bGF0ZSB0aGUgc3RhbmRhcmRpemVkIGNvdW50ZXIgc2V0dXAgYml0IGZpZWxkcy4gIE5vdGU6Ci0JLy8gSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLgotCXNldHVwID0gKChjcmEgJiBTVERNU0tfTE9BRFNSQykJLy8gTG9hZFNyYyAgPSBMb2FkU3JjQS4KLQkJfCAoKGNyYiA8PCAoU1REQklUX0xBVENIU1JDIC0gQ1JCQklUX0xBVENIU1JDKSkgJiBTVERNU0tfTEFUQ0hTUkMpCS8vIExhdGNoU3JjID0gTGF0Y2hTcmNBLgotCQl8ICgoY3JhIDw8IChTVERCSVRfSU5UU1JDIC0gQ1JBQklUX0lOVFNSQ19BKSkgJiBTVERNU0tfSU5UU1JDKQkvLyBJbnRTcmMgICA9IEludFNyY0EuCi0JCXwgKChjcmEgPDwgKFNUREJJVF9JTkRYU1JDIC0gKENSQUJJVF9JTkRYU1JDX0EgKyAxKSkpICYgU1RETVNLX0lORFhTUkMpCS8vIEluZHhTcmMgID0gSW5keFNyY0E8MT4uCi0JCXwgKChjcmEgPj4gKENSQUJJVF9JTkRYUE9MX0EgLSBTVERCSVRfSU5EWFBPTCkpICYgU1RETVNLX0lORFhQT0wpCS8vIEluZHhQb2wgID0gSW5keFBvbEEuCi0JCXwgKChjcmIgPj4gKENSQkJJVF9DTEtFTkFCX0EgLSBTVERCSVRfQ0xLRU5BQikpICYgU1RETVNLX0NMS0VOQUIpKTsJLy8gQ2xrRW5hYiAgPSBDbGtFbmFiQS4KKwkvKiAgUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOiAqLworCS8qICBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuICovCisJc2V0dXAgPSAoKGNyYSAmIFNURE1TS19MT0FEU1JDKQkvKiAgTG9hZFNyYyAgPSBMb2FkU3JjQS4gKi8KKwkJfCAoKGNyYiA8PCAoU1REQklUX0xBVENIU1JDIC0gQ1JCQklUX0xBVENIU1JDKSkgJiBTVERNU0tfTEFUQ0hTUkMpCS8qICBMYXRjaFNyYyA9IExhdGNoU3JjQS4gKi8KKwkJfCAoKGNyYSA8PCAoU1REQklUX0lOVFNSQyAtIENSQUJJVF9JTlRTUkNfQSkpICYgU1RETVNLX0lOVFNSQykJLyogIEludFNyYyAgID0gSW50U3JjQS4gKi8KKwkJfCAoKGNyYSA8PCAoU1REQklUX0lORFhTUkMgLSAoQ1JBQklUX0lORFhTUkNfQSArIDEpKSkgJiBTVERNU0tfSU5EWFNSQykJLyogIEluZHhTcmMgID0gSW5keFNyY0E8MT4uICovCisJCXwgKChjcmEgPj4gKENSQUJJVF9JTkRYUE9MX0EgLSBTVERCSVRfSU5EWFBPTCkpICYgU1RETVNLX0lORFhQT0wpCS8qICBJbmR4UG9sICA9IEluZHhQb2xBLiAqLworCQl8ICgoY3JiID4+IChDUkJCSVRfQ0xLRU5BQl9BIC0gU1REQklUX0NMS0VOQUIpKSAmIFNURE1TS19DTEtFTkFCKSk7CS8qICBDbGtFbmFiICA9IENsa0VuYWJBLiAqLwogCi0JLy8gQWRqdXN0IG1vZGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuCi0JaWYgKGNyYSAmICgyIDw8IENSQUJJVF9DTEtTUkNfQSkpCS8vIElmIFRpbWVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMSk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX1RJTUVSIDw8IFNUREJJVF9DTEtTUkMpCS8vICAgSW5kaWNhdGUgVGltZXIgbW9kZS4KLQkJCXwgKChjcmEgPDwgKFNUREJJVF9DTEtQT0wgLSBDUkFCSVRfQ0xLU1JDX0EpKSAmIFNURE1TS19DTEtQT0wpCS8vICAgU2V0IENsa1BvbCB0byBpbmRpY2F0ZSBjb3VudCBkaXJlY3Rpb24gKENsa1NyY0E8MD4pLgotCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkpOwkvLyAgIENsa011bHQgbXVzdCBiZSAxeCBpbiBUaW1lciBtb2RlLgorCS8qICBBZGp1c3QgbW9kZS1kZXBlbmRlbnQgcGFyYW1ldGVycy4gKi8KKwlpZiAoY3JhICYgKDIgPDwgQ1JBQklUX0NMS1NSQ19BKSkJLyogIElmIFRpbWVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMSk6ICovCisJCXNldHVwIHw9ICgoQ0xLU1JDX1RJTUVSIDw8IFNUREJJVF9DTEtTUkMpCS8qICAgIEluZGljYXRlIFRpbWVyIG1vZGUuICovCisJCQl8ICgoY3JhIDw8IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkgJiBTVERNU0tfQ0xLUE9MKQkvKiAgICBTZXQgQ2xrUG9sIHRvIGluZGljYXRlIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQTwwPikuICovCisJCQl8IChNVUxUX1gxIDw8IFNUREJJVF9DTEtNVUxUKSk7CS8qICAgIENsa011bHQgbXVzdCBiZSAxeCBpbiBUaW1lciBtb2RlLiAqLwogCi0JZWxzZQkJCS8vIElmIENvdW50ZXIgbW9kZSAoQ2xrU3JjQTwxPiA9PSAwKToKLQkJc2V0dXAgfD0gKChDTEtTUkNfQ09VTlRFUiA8PCBTVERCSVRfQ0xLU1JDKQkvLyAgIEluZGljYXRlIENvdW50ZXIgbW9kZS4KLQkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtQT0xfQSAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpCS8vICAgUGFzcyB0aHJvdWdoIENsa1BvbC4KLQkJCXwgKCgoY3JhICYgQ1JBTVNLX0NMS01VTFRfQSkgPT0gKE1VTFRfWDAgPDwgQ1JBQklUX0NMS01VTFRfQSkpID8JLy8gICBGb3JjZSBDbGtNdWx0IHRvIDF4IGlmIG5vdCBsZWdhbCwgZWxzZSBwYXNzIHRocm91Z2guCisJZWxzZQkJCS8qICBJZiBDb3VudGVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMCk6ICovCisJCXNldHVwIHw9ICgoQ0xLU1JDX0NPVU5URVIgPDwgU1REQklUX0NMS1NSQykJLyogICAgSW5kaWNhdGUgQ291bnRlciBtb2RlLiAqLworCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1BPTF9BIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkJLyogICAgUGFzcyB0aHJvdWdoIENsa1BvbC4gKi8KKwkJCXwgKCgoY3JhICYgQ1JBTVNLX0NMS01VTFRfQSkgPT0gKE1VTFRfWDAgPDwgQ1JBQklUX0NMS01VTFRfQSkpID8JLyogICAgRm9yY2UgQ2xrTXVsdCB0byAxeCBpZiBub3QgbGVnYWwsIGVsc2UgcGFzcyB0aHJvdWdoLiAqLwogCQkJCShNVUxUX1gxIDw8IFNUREJJVF9DTEtNVUxUKSA6CiAJCQkJKChjcmEgPj4gKENSQUJJVF9DTEtNVUxUX0EgLQogCQkJCQkJCVNUREJJVF9DTEtNVUxUKSkgJgogCQkJCQlTVERNU0tfQ0xLTVVMVCkpKTsKIAotCS8vIFJldHVybiBhZGp1c3RlZCBjb3VudGVyIHNldHVwLgorCS8qICBSZXR1cm4gYWRqdXN0ZWQgY291bnRlciBzZXR1cC4gKi8KIAlyZXR1cm4gc2V0dXA7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JhOwogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYjsKIAlyZWdpc3RlciB1aW50MTZfdCBzZXR1cDsKIAotCS8vIEZldGNoIENSQSBhbmQgQ1JCIHJlZ2lzdGVyIGltYWdlcy4KKwkvKiAgRmV0Y2ggQ1JBIGFuZCBDUkIgcmVnaXN0ZXIgaW1hZ2VzLiAqLwogCWNyYSA9IERFQklyZWFkKGRldiwgay0+TXlDUkEpOwogCWNyYiA9IERFQklyZWFkKGRldiwgay0+TXlDUkIpOwogCi0JLy8gUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOgotCS8vIEluZGV4U3JjIGlzIHJlc3RyaWN0ZWQgdG8gRU5DX1ggb3IgSW5keFBvbC4KLQlzZXR1cCA9ICgoKGNyYiA8PCAoU1REQklUX0lOVFNSQyAtIENSQkJJVF9JTlRTUkNfQikpICYgU1RETVNLX0lOVFNSQykJLy8gSW50U3JjICAgPSBJbnRTcmNCLgotCQl8ICgoY3JiIDw8IChTVERCSVRfTEFUQ0hTUkMgLSBDUkJCSVRfTEFUQ0hTUkMpKSAmIFNURE1TS19MQVRDSFNSQykJLy8gTGF0Y2hTcmMgPSBMYXRjaFNyY0IuCi0JCXwgKChjcmIgPDwgKFNUREJJVF9MT0FEU1JDIC0gQ1JCQklUX0xPQURTUkNfQikpICYgU1RETVNLX0xPQURTUkMpCS8vIExvYWRTcmMgID0gTG9hZFNyY0IuCi0JCXwgKChjcmIgPDwgKFNUREJJVF9JTkRYUE9MIC0gQ1JCQklUX0lORFhQT0xfQikpICYgU1RETVNLX0lORFhQT0wpCS8vIEluZHhQb2wgID0gSW5keFBvbEIuCi0JCXwgKChjcmIgPj4gKENSQkJJVF9DTEtFTkFCX0IgLSBTVERCSVRfQ0xLRU5BQikpICYgU1RETVNLX0NMS0VOQUIpCS8vIENsa0VuYWIgID0gQ2xrRW5hYkIuCi0JCXwgKChjcmEgPj4gKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpICYgU1RETVNLX0lORFhTUkMpKTsJLy8gSW5keFNyYyAgPSBJbmR4U3JjQjwxPi4KKwkvKiAgUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOiAqLworCS8qICBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuICovCisJc2V0dXAgPSAoKChjcmIgPDwgKFNUREJJVF9JTlRTUkMgLSBDUkJCSVRfSU5UU1JDX0IpKSAmIFNURE1TS19JTlRTUkMpCS8qICBJbnRTcmMgICA9IEludFNyY0IuICovCisJCXwgKChjcmIgPDwgKFNUREJJVF9MQVRDSFNSQyAtIENSQkJJVF9MQVRDSFNSQykpICYgU1RETVNLX0xBVENIU1JDKQkvKiAgTGF0Y2hTcmMgPSBMYXRjaFNyY0IuICovCisJCXwgKChjcmIgPDwgKFNUREJJVF9MT0FEU1JDIC0gQ1JCQklUX0xPQURTUkNfQikpICYgU1RETVNLX0xPQURTUkMpCS8qICBMb2FkU3JjICA9IExvYWRTcmNCLiAqLworCQl8ICgoY3JiIDw8IChTVERCSVRfSU5EWFBPTCAtIENSQkJJVF9JTkRYUE9MX0IpKSAmIFNURE1TS19JTkRYUE9MKQkvKiAgSW5keFBvbCAgPSBJbmR4UG9sQi4gKi8KKwkJfCAoKGNyYiA+PiAoQ1JCQklUX0NMS0VOQUJfQiAtIFNUREJJVF9DTEtFTkFCKSkgJiBTVERNU0tfQ0xLRU5BQikJLyogIENsa0VuYWIgID0gQ2xrRW5hYkIuICovCisJCXwgKChjcmEgPj4gKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpICYgU1RETVNLX0lORFhTUkMpKTsJLyogIEluZHhTcmMgID0gSW5keFNyY0I8MT4uICovCiAKLQkvLyBBZGp1c3QgbW9kZS1kZXBlbmRlbnQgcGFyYW1ldGVycy4KLQlpZiAoKGNyYiAmIENSQk1TS19DTEtNVUxUX0IpID09IChNVUxUX1gwIDw8IENSQkJJVF9DTEtNVUxUX0IpKQkvLyBJZiBFeHRlbmRlciBtb2RlIChDbGtNdWx0QiA9PSBNVUxUX1gwKToKLQkJc2V0dXAgfD0gKChDTEtTUkNfRVhURU5ERVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBFeHRlbmRlciBtb2RlLgotCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkJLy8gICBJbmRpY2F0ZSBtdWx0aXBsaWVyIGlzIDF4LgotCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkpOwkvLyAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4KKwkvKiAgQWRqdXN0IG1vZGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuICovCisJaWYgKChjcmIgJiBDUkJNU0tfQ0xLTVVMVF9CKSA9PSAoTVVMVF9YMCA8PCBDUkJCSVRfQ0xLTVVMVF9CKSkJLyogIElmIEV4dGVuZGVyIG1vZGUgKENsa011bHRCID09IE1VTFRfWDApOiAqLworCQlzZXR1cCB8PSAoKENMS1NSQ19FWFRFTkRFUiA8PCBTVERCSVRfQ0xLU1JDKQkvKiAgICBJbmRpY2F0ZSBFeHRlbmRlciBtb2RlLiAqLworCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkJLyogICAgSW5kaWNhdGUgbXVsdGlwbGllciBpcyAxeC4gKi8KKwkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpKTsJLyogICAgU2V0IENsa1BvbCBlcXVhbCB0byBUaW1lciBjb3VudCBkaXJlY3Rpb24gKENsa1NyY0I8MD4pLiAqLwogCi0JZWxzZSBpZiAoY3JhICYgKDIgPDwgQ1JBQklUX0NMS1NSQ19CKSkJLy8gSWYgVGltZXIgbW9kZSAoQ2xrU3JjQjwxPiA9PSAxKToKLQkJc2V0dXAgfD0gKChDTEtTUkNfVElNRVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBUaW1lciBtb2RlLgotCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkJLy8gICBJbmRpY2F0ZSBtdWx0aXBsaWVyIGlzIDF4LgotCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkpOwkvLyAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4KKwllbHNlIGlmIChjcmEgJiAoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpKQkvKiAgSWYgVGltZXIgbW9kZSAoQ2xrU3JjQjwxPiA9PSAxKTogKi8KKwkJc2V0dXAgfD0gKChDTEtTUkNfVElNRVIgPDwgU1REQklUX0NMS1NSQykJLyogICAgSW5kaWNhdGUgVGltZXIgbW9kZS4gKi8KKwkJCXwgKE1VTFRfWDEgPDwgU1REQklUX0NMS01VTFQpCS8qICAgIEluZGljYXRlIG11bHRpcGxpZXIgaXMgMXguICovCisJCQl8ICgoY3JhID4+IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkgJiBTVERNU0tfQ0xLUE9MKSk7CS8qICAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4gKi8KIAotCWVsc2UJCQkvLyBJZiBDb3VudGVyIG1vZGUgKENsa1NyY0I8MT4gPT0gMCk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX0NPVU5URVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBUaW1lciBtb2RlLgotCQkJfCAoKGNyYiA+PiAoQ1JCQklUX0NMS01VTFRfQiAtIFNUREJJVF9DTEtNVUxUKSkgJiBTVERNU0tfQ0xLTVVMVCkJLy8gICBDbG9jayBtdWx0aXBsaWVyIGlzIHBhc3NlZCB0aHJvdWdoLgotCQkJfCAoKGNyYiA8PCAoU1REQklUX0NMS1BPTCAtIENSQkJJVF9DTEtQT0xfQikpICYgU1RETVNLX0NMS1BPTCkpOwkvLyAgIENsb2NrIHBvbGFyaXR5IGlzIHBhc3NlZCB0aHJvdWdoLgorCWVsc2UJCQkvKiAgSWYgQ291bnRlciBtb2RlIChDbGtTcmNCPDE+ID09IDApOiAqLworCQlzZXR1cCB8PSAoKENMS1NSQ19DT1VOVEVSIDw8IFNUREJJVF9DTEtTUkMpCS8qICAgIEluZGljYXRlIFRpbWVyIG1vZGUuICovCisJCQl8ICgoY3JiID4+IChDUkJCSVRfQ0xLTVVMVF9CIC0gU1REQklUX0NMS01VTFQpKSAmIFNURE1TS19DTEtNVUxUKQkvKiAgICBDbG9jayBtdWx0aXBsaWVyIGlzIHBhc3NlZCB0aHJvdWdoLiAqLworCQkJfCAoKGNyYiA8PCAoU1REQklUX0NMS1BPTCAtIENSQkJJVF9DTEtQT0xfQikpICYgU1RETVNLX0NMS1BPTCkpOwkvKiAgICBDbG9jayBwb2xhcml0eSBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KIAotCS8vIFJldHVybiBhZGp1c3RlZCBjb3VudGVyIHNldHVwLgorCS8qICBSZXR1cm4gYWRqdXN0ZWQgY291bnRlciBzZXR1cC4gKi8KIAlyZXR1cm4gc2V0dXA7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHNwZWNpZmllZCBjb3VudGVyLiAgVGhlIHNldHVwCi0vLyBwYXJhbWV0ZXIgaXMgdHJlYXRlZCBhcyBhIENPVU5URVJfU0VUVVAgZGF0YSB0eXBlLiAgVGhlIGZvbGxvd2luZwotLy8gcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1hYmxlIChhbGwgb3RoZXIgcGFybXMgYXJlIGlnbm9yZWQpOiBDbGtNdWx0LAotLy8gQ2xrUG9sLCBDbGtFbmFiLCBJbmRleFNyYywgSW5kZXhQb2wsIExvYWRTcmMuCisvKgorICogU2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHNwZWNpZmllZCBjb3VudGVyLiAgVGhlIHNldHVwCisgKiBwYXJhbWV0ZXIgaXMgdHJlYXRlZCBhcyBhIENPVU5URVJfU0VUVVAgZGF0YSB0eXBlLiAgVGhlIGZvbGxvd2luZworICogcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1hYmxlIChhbGwgb3RoZXIgcGFybXMgYXJlIGlnbm9yZWQpOiBDbGtNdWx0LAorICogQ2xrUG9sLCBDbGtFbmFiLCBJbmRleFNyYywgSW5kZXhQb2wsIExvYWRTcmMuCisgKi8KIAotc3RhdGljIHZvaWQgU2V0TW9kZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCitzdGF0aWMgdm9pZCBTZXRNb2RlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBTZXR1cCwKIAl1aW50MTZfdCBEaXNhYmxlSW50U3JjKQogewogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYTsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmI7Ci0JcmVnaXN0ZXIgdWludDE2X3Qgc2V0dXAgPSBTZXR1cDsJLy8gQ2FjaGUgdGhlIFN0YW5kYXJkIFNldHVwLgorCXJlZ2lzdGVyIHVpbnQxNl90IHNldHVwID0gU2V0dXA7CS8qICBDYWNoZSB0aGUgU3RhbmRhcmQgU2V0dXAuICovCiAKLQkvLyBJbml0aWFsaXplIENSQSBhbmQgQ1JCIGltYWdlcy4KLQljcmEgPSAoKHNldHVwICYgQ1JBTVNLX0xPQURTUkNfQSkJLy8gUHJlbG9hZCB0cmlnZ2VyIGlzIHBhc3NlZCB0aHJvdWdoLgotCQl8ICgoc2V0dXAgJiBTVERNU0tfSU5EWFNSQykgPj4gKFNUREJJVF9JTkRYU1JDIC0gKENSQUJJVF9JTkRYU1JDX0EgKyAxKSkpKTsJLy8gSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLgorCS8qICBJbml0aWFsaXplIENSQSBhbmQgQ1JCIGltYWdlcy4gKi8KKwljcmEgPSAoKHNldHVwICYgQ1JBTVNLX0xPQURTUkNfQSkJLyogIFByZWxvYWQgdHJpZ2dlciBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KKwkJfCAoKHNldHVwICYgU1RETVNLX0lORFhTUkMpID4+IChTVERCSVRfSU5EWFNSQyAtIChDUkFCSVRfSU5EWFNSQ19BICsgMSkpKSk7CS8qICBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuICovCiAKLQljcmIgPSAoQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0EJLy8gUmVzZXQgYW55IHBlbmRpbmcgQ291bnRlckEgZXZlbnQgY2FwdHVyZXMuCi0JCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQSAtIFNUREJJVF9DTEtFTkFCKSkpOwkvLyBDbG9jayBlbmFibGUgaXMgcGFzc2VkIHRocm91Z2guCisJY3JiID0gKENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9BCS8qICBSZXNldCBhbnkgcGVuZGluZyBDb3VudGVyQSBldmVudCBjYXB0dXJlcy4gKi8KKwkJfCAoKHNldHVwICYgU1RETVNLX0NMS0VOQUIpIDw8IChDUkJCSVRfQ0xLRU5BQl9BIC0gU1REQklUX0NMS0VOQUIpKSk7CS8qICBDbG9jayBlbmFibGUgaXMgcGFzc2VkIHRocm91Z2guICovCiAKLQkvLyBGb3JjZSBJbnRTcmMgdG8gRGlzYWJsZWQgaWYgRGlzYWJsZUludFNyYyBpcyBhc3NlcnRlZC4KKwkvKiAgRm9yY2UgSW50U3JjIHRvIERpc2FibGVkIGlmIERpc2FibGVJbnRTcmMgaXMgYXNzZXJ0ZWQuICovCiAJaWYgKCFEaXNhYmxlSW50U3JjKQogCQljcmEgfD0gKChzZXR1cCAmIFNURE1TS19JTlRTUkMpID4+IChTVERCSVRfSU5UU1JDIC0KIAkJCQlDUkFCSVRfSU5UU1JDX0EpKTsKIAotCS8vIFBvcHVsYXRlIGFsbCBtb2RlLWRlcGVuZGVudCBhdHRyaWJ1dGVzIG9mIENSQSAmIENSQiBpbWFnZXMuCisJLyogIFBvcHVsYXRlIGFsbCBtb2RlLWRlcGVuZGVudCBhdHRyaWJ1dGVzIG9mIENSQSAmIENSQiBpbWFnZXMuICovCiAJc3dpdGNoICgoc2V0dXAgJiBTVERNU0tfQ0xLU1JDKSA+PiBTVERCSVRfQ0xLU1JDKSB7Ci0JY2FzZSBDTEtTUkNfRVhURU5ERVI6CS8vIEV4dGVuZGVyIE1vZGU6IEZvcmNlIHRvIFRpbWVyIG1vZGUKLQkJLy8gKEV4dGVuZGVyIHZhbGlkIG9ubHkgZm9yIEIgY291bnRlcnMpLgorCWNhc2UgQ0xLU1JDX0VYVEVOREVSOgkvKiAgRXh0ZW5kZXIgTW9kZTogRm9yY2UgdG8gVGltZXIgbW9kZSAqLworCQkvKiAgKEV4dGVuZGVyIHZhbGlkIG9ubHkgZm9yIEIgY291bnRlcnMpLiAqLwogCi0JY2FzZSBDTEtTUkNfVElNRVI6CS8vIFRpbWVyIE1vZGU6Ci0JCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19BKQkvLyAgIENsa1NyY0E8MT4gc2VsZWN0cyBzeXN0ZW0gY2xvY2sKLQkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkJLy8gICAgIHdpdGggY291bnQgZGlyZWN0aW9uIChDbGtTcmNBPDA+KSBvYnRhaW5lZCBmcm9tIENsa1BvbC4KLQkJCXwgKDEgPDwgQ1JBQklUX0NMS1BPTF9BKQkvLyAgIENsa1BvbEEgYmVoYXZlcyBhcyBhbHdheXMtb24gY2xvY2sgZW5hYmxlLgotCQkJfCAoTVVMVF9YMSA8PCBDUkFCSVRfQ0xLTVVMVF9BKSk7CS8vICAgQ2xrTXVsdCBtdXN0IGJlIDF4LgorCWNhc2UgQ0xLU1JDX1RJTUVSOgkvKiAgVGltZXIgTW9kZTogKi8KKwkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0EpCS8qICAgIENsa1NyY0E8MT4gc2VsZWN0cyBzeXN0ZW0gY2xvY2sgKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkJLyogICAgICB3aXRoIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQTwwPikgb2J0YWluZWQgZnJvbSBDbGtQb2wuICovCisJCQl8ICgxIDw8IENSQUJJVF9DTEtQT0xfQSkJLyogICAgQ2xrUG9sQSBiZWhhdmVzIGFzIGFsd2F5cy1vbiBjbG9jayBlbmFibGUuICovCisJCQl8IChNVUxUX1gxIDw8IENSQUJJVF9DTEtNVUxUX0EpKTsJLyogICAgQ2xrTXVsdCBtdXN0IGJlIDF4LiAqLwogCQlicmVhazsKIAotCWRlZmF1bHQ6CQkvLyBDb3VudGVyIE1vZGU6Ci0JCWNyYSB8PSAoQ0xLU1JDX0NPVU5URVIJLy8gICBTZWxlY3QgRU5DX0MgYW5kIEVOQ19EIGFzIGNsb2NrL2RpcmVjdGlvbiBpbnB1dHMuCi0JCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA8PCAoQ1JBQklUX0NMS1BPTF9BIC0gU1REQklUX0NMS1BPTCkpCS8vICAgQ2xvY2sgcG9sYXJpdHkgaXMgcGFzc2VkIHRocm91Z2guCi0JCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvLyAgIEZvcmNlIG11bHRpcGxpZXIgdG8geDEgaWYgbm90IGxlZ2FsLCBvdGhlcndpc2UgcGFzcyB0aHJvdWdoLgorCWRlZmF1bHQ6CQkvKiAgQ291bnRlciBNb2RlOiAqLworCQljcmEgfD0gKENMS1NSQ19DT1VOVEVSCS8qICAgIFNlbGVjdCBFTkNfQyBhbmQgRU5DX0QgYXMgY2xvY2svZGlyZWN0aW9uIGlucHV0cy4gKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpIDw8IChDUkFCSVRfQ0xLUE9MX0EgLSBTVERCSVRfQ0xLUE9MKSkJLyogICAgQ2xvY2sgcG9sYXJpdHkgaXMgcGFzc2VkIHRocm91Z2guICovCisJCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvKiAgICBGb3JjZSBtdWx0aXBsaWVyIHRvIHgxIGlmIG5vdCBsZWdhbCwgb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaC4gKi8KIAkJCQkoTVVMVF9YMSA8PCBDUkFCSVRfQ0xLTVVMVF9BKSA6CiAJCQkJKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA8PCAoQ1JBQklUX0NMS01VTFRfQSAtCiAJCQkJCQlTVERCSVRfQ0xLTVVMVCkpKSk7CiAJfQogCi0JLy8gRm9yY2UgcG9zaXRpdmUgaW5kZXggcG9sYXJpdHkgaWYgSW5keFNyYyBpcyBzb2Z0d2FyZS1kcml2ZW4gb25seSwKLQkvLyBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLgorCS8qICBGb3JjZSBwb3NpdGl2ZSBpbmRleCBwb2xhcml0eSBpZiBJbmR4U3JjIGlzIHNvZnR3YXJlLWRyaXZlbiBvbmx5LCAqLworCS8qICBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLiAqLwogCWlmICh+c2V0dXAgJiBTVERNU0tfSU5EWFNSQykKIAkJY3JhIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFBPTCkgPDwgKENSQUJJVF9JTkRYUE9MX0EgLQogCQkJCVNUREJJVF9JTkRYUE9MKSk7CiAKLQkvLyBJZiBJbnRTcmMgaGFzIGJlZW4gZm9yY2VkIHRvIERpc2FibGVkLCB1cGRhdGUgdGhlIE1JU0MyIGludGVycnVwdAotCS8vIGVuYWJsZSBtYXNrIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKwkvKiAgSWYgSW50U3JjIGhhcyBiZWVuIGZvcmNlZCB0byBEaXNhYmxlZCwgdXBkYXRlIHRoZSBNSVNDMiBpbnRlcnJ1cHQgKi8KKwkvKiAgZW5hYmxlIG1hc2sgdG8gaW5kaWNhdGUgdGhlIGNvdW50ZXIgaW50ZXJydXB0IGlzIGRpc2FibGVkLiAqLwogCWlmIChEaXNhYmxlSW50U3JjKQogCQlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJj0gfmstPk15RXZlbnRCaXRzWzNdOwogCi0JLy8gV2hpbGUgcmV0YWluaW5nIENvdW50ZXJCIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUKLQkvLyBuZXcgY291bnRlciBvcGVyYXRpbmcgbW9kZS4KKwkvKiAgV2hpbGUgcmV0YWluaW5nIENvdW50ZXJCIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUgKi8KKwkvKiAgbmV3IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUuICovCiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQSwgQ1JBTVNLX0lORFhTUkNfQiB8IENSQU1TS19DTEtTUkNfQiwgY3JhKTsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpICh+KENSQk1TS19JTlRDVFJMIHwgQ1JCTVNLX0NMS0VOQUJfQSkpLCBjcmIpOwogfQogCi1zdGF0aWMgdm9pZCBTZXRNb2RlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBTZXR1cCwKK3N0YXRpYyB2b2lkIFNldE1vZGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFNldHVwLAogCXVpbnQxNl90IERpc2FibGVJbnRTcmMpCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JhOwogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYjsKLQlyZWdpc3RlciB1aW50MTZfdCBzZXR1cCA9IFNldHVwOwkvLyBDYWNoZSB0aGUgU3RhbmRhcmQgU2V0dXAuCisJcmVnaXN0ZXIgdWludDE2X3Qgc2V0dXAgPSBTZXR1cDsJLyogIENhY2hlIHRoZSBTdGFuZGFyZCBTZXR1cC4gKi8KIAotCS8vIEluaXRpYWxpemUgQ1JBIGFuZCBDUkIgaW1hZ2VzLgotCWNyYSA9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFNSQykgPDwgKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpOwkvLyBJbmRleFNyYyBmaWVsZCBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuCisJLyogIEluaXRpYWxpemUgQ1JBIGFuZCBDUkIgaW1hZ2VzLiAqLworCWNyYSA9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFNSQykgPDwgKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpOwkvKiAgSW5kZXhTcmMgZmllbGQgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLiAqLwogCi0JY3JiID0gKENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CCS8vIFJlc2V0IGV2ZW50IGNhcHR1cmVzIGFuZCBkaXNhYmxlIGludGVycnVwdHMuCi0JCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQiAtIFNUREJJVF9DTEtFTkFCKSkJLy8gQ2xvY2sgZW5hYmxlIGlzIHBhc3NlZCB0aHJvdWdoLgotCQl8ICgoc2V0dXAgJiBTVERNU0tfTE9BRFNSQykgPj4gKFNUREJJVF9MT0FEU1JDIC0gQ1JCQklUX0xPQURTUkNfQikpKTsJLy8gUHJlbG9hZCB0cmlnZ2VyIHNvdXJjZSBpcyBwYXNzZWQgdGhyb3VnaC4KKwljcmIgPSAoQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0IJLyogIFJlc2V0IGV2ZW50IGNhcHR1cmVzIGFuZCBkaXNhYmxlIGludGVycnVwdHMuICovCisJCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQiAtIFNUREJJVF9DTEtFTkFCKSkJLyogIENsb2NrIGVuYWJsZSBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KKwkJfCAoKHNldHVwICYgU1RETVNLX0xPQURTUkMpID4+IChTVERCSVRfTE9BRFNSQyAtIENSQkJJVF9MT0FEU1JDX0IpKSk7CS8qICBQcmVsb2FkIHRyaWdnZXIgc291cmNlIGlzIHBhc3NlZCB0aHJvdWdoLiAqLwogCi0JLy8gRm9yY2UgSW50U3JjIHRvIERpc2FibGVkIGlmIERpc2FibGVJbnRTcmMgaXMgYXNzZXJ0ZWQuCisJLyogIEZvcmNlIEludFNyYyB0byBEaXNhYmxlZCBpZiBEaXNhYmxlSW50U3JjIGlzIGFzc2VydGVkLiAqLwogCWlmICghRGlzYWJsZUludFNyYykKIAkJY3JiIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5UU1JDKSA+PiAoU1REQklUX0lOVFNSQyAtCiAJCQkJQ1JCQklUX0lOVFNSQ19CKSk7CiAKLQkvLyBQb3B1bGF0ZSBhbGwgbW9kZS1kZXBlbmRlbnQgYXR0cmlidXRlcyBvZiBDUkEgJiBDUkIgaW1hZ2VzLgorCS8qICBQb3B1bGF0ZSBhbGwgbW9kZS1kZXBlbmRlbnQgYXR0cmlidXRlcyBvZiBDUkEgJiBDUkIgaW1hZ2VzLiAqLwogCXN3aXRjaCAoKHNldHVwICYgU1RETVNLX0NMS1NSQykgPj4gU1REQklUX0NMS1NSQykgewotCWNhc2UgQ0xLU1JDX1RJTUVSOgkvLyBUaW1lciBNb2RlOgotCQljcmEgfD0gKCgyIDw8IENSQUJJVF9DTEtTUkNfQikJLy8gICBDbGtTcmNCPDE+IHNlbGVjdHMgc3lzdGVtIGNsb2NrCi0JCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA8PCAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpKTsJLy8gICAgIHdpdGggZGlyZWN0aW9uIChDbGtTcmNCPDA+KSBvYnRhaW5lZCBmcm9tIENsa1BvbC4KLQkJY3JiIHw9ICgoMSA8PCBDUkJCSVRfQ0xLUE9MX0IpCS8vICAgQ2xrUG9sQiBiZWhhdmVzIGFzIGFsd2F5cy1vbiBjbG9jayBlbmFibGUuCi0JCQl8IChNVUxUX1gxIDw8IENSQkJJVF9DTEtNVUxUX0IpKTsJLy8gICBDbGtNdWx0QiBtdXN0IGJlIDF4LgorCWNhc2UgQ0xLU1JDX1RJTUVSOgkvKiAgVGltZXIgTW9kZTogKi8KKwkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpCS8qICAgIENsa1NyY0I8MT4gc2VsZWN0cyBzeXN0ZW0gY2xvY2sgKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpIDw8IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkpOwkvKiAgICAgIHdpdGggZGlyZWN0aW9uIChDbGtTcmNCPDA+KSBvYnRhaW5lZCBmcm9tIENsa1BvbC4gKi8KKwkJY3JiIHw9ICgoMSA8PCBDUkJCSVRfQ0xLUE9MX0IpCS8qICAgIENsa1BvbEIgYmVoYXZlcyBhcyBhbHdheXMtb24gY2xvY2sgZW5hYmxlLiAqLworCQkJfCAoTVVMVF9YMSA8PCBDUkJCSVRfQ0xLTVVMVF9CKSk7CS8qICAgIENsa011bHRCIG11c3QgYmUgMXguICovCiAJCWJyZWFrOwogCi0JY2FzZSBDTEtTUkNfRVhURU5ERVI6CS8vIEV4dGVuZGVyIE1vZGU6Ci0JCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19CKQkvLyAgIENsa1NyY0Igc291cmNlIGlzIE92ZXJmbG93QSAoc2FtZSBhcyAidGltZXIiKQotCQkJfCAoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPDwgKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSk7CS8vICAgICB3aXRoIGRpcmVjdGlvbiBvYnRhaW5lZCBmcm9tIENsa1BvbC4KLQkJY3JiIHw9ICgoMSA8PCBDUkJCSVRfQ0xLUE9MX0IpCS8vICAgQ2xrUG9sQiBjb250cm9scyBJbmRleEIgLS0gYWx3YXlzIHNldCB0byBhY3RpdmUuCi0JCQl8IChNVUxUX1gwIDw8IENSQkJJVF9DTEtNVUxUX0IpKTsJLy8gICBDbGtNdWx0QiBzZWxlY3RzIE92ZXJmbG93QSBhcyB0aGUgY2xvY2sgc291cmNlLgorCWNhc2UgQ0xLU1JDX0VYVEVOREVSOgkvKiAgRXh0ZW5kZXIgTW9kZTogKi8KKwkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpCS8qICAgIENsa1NyY0Igc291cmNlIGlzIE92ZXJmbG93QSAoc2FtZSBhcyAidGltZXIiKSAqLworCQkJfCAoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPDwgKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSk7CS8qICAgICAgd2l0aCBkaXJlY3Rpb24gb2J0YWluZWQgZnJvbSBDbGtQb2wuICovCisJCWNyYiB8PSAoKDEgPDwgQ1JCQklUX0NMS1BPTF9CKQkvKiAgICBDbGtQb2xCIGNvbnRyb2xzIEluZGV4QiAtLSBhbHdheXMgc2V0IHRvIGFjdGl2ZS4gKi8KKwkJCXwgKE1VTFRfWDAgPDwgQ1JCQklUX0NMS01VTFRfQikpOwkvKiAgICBDbGtNdWx0QiBzZWxlY3RzIE92ZXJmbG93QSBhcyB0aGUgY2xvY2sgc291cmNlLiAqLwogCQlicmVhazsKIAotCWRlZmF1bHQ6CQkvLyBDb3VudGVyIE1vZGU6Ci0JCWNyYSB8PSAoQ0xLU1JDX0NPVU5URVIgPDwgQ1JBQklUX0NMS1NSQ19CKTsJLy8gICBTZWxlY3QgRU5DX0MgYW5kIEVOQ19EIGFzIGNsb2NrL2RpcmVjdGlvbiBpbnB1dHMuCi0JCWNyYiB8PSAoKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JCQklUX0NMS1BPTF9CKSkJLy8gICBDbGtQb2wgaXMgcGFzc2VkIHRocm91Z2guCi0JCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvLyAgIEZvcmNlIENsa011bHQgdG8geDEgaWYgbm90IGxlZ2FsLCBvdGhlcndpc2UgcGFzcyB0aHJvdWdoLgorCWRlZmF1bHQ6CQkvKiAgQ291bnRlciBNb2RlOiAqLworCQljcmEgfD0gKENMS1NSQ19DT1VOVEVSIDw8IENSQUJJVF9DTEtTUkNfQik7CS8qICAgIFNlbGVjdCBFTkNfQyBhbmQgRU5DX0QgYXMgY2xvY2svZGlyZWN0aW9uIGlucHV0cy4gKi8KKwkJY3JiIHw9ICgoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPj4gKFNUREJJVF9DTEtQT0wgLSBDUkJCSVRfQ0xLUE9MX0IpKQkvKiAgICBDbGtQb2wgaXMgcGFzc2VkIHRocm91Z2guICovCisJCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvKiAgICBGb3JjZSBDbGtNdWx0IHRvIHgxIGlmIG5vdCBsZWdhbCwgb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaC4gKi8KIAkJCQkoTVVMVF9YMSA8PCBDUkJCSVRfQ0xLTVVMVF9CKSA6CiAJCQkJKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA8PCAoQ1JCQklUX0NMS01VTFRfQiAtCiAJCQkJCQlTVERCSVRfQ0xLTVVMVCkpKSk7CiAJfQogCi0JLy8gRm9yY2UgcG9zaXRpdmUgaW5kZXggcG9sYXJpdHkgaWYgSW5keFNyYyBpcyBzb2Z0d2FyZS1kcml2ZW4gb25seSwKLQkvLyBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLgorCS8qICBGb3JjZSBwb3NpdGl2ZSBpbmRleCBwb2xhcml0eSBpZiBJbmR4U3JjIGlzIHNvZnR3YXJlLWRyaXZlbiBvbmx5LCAqLworCS8qICBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLiAqLwogCWlmICh+c2V0dXAgJiBTVERNU0tfSU5EWFNSQykKIAkJY3JiIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFBPTCkgPj4gKFNUREJJVF9JTkRYUE9MIC0KIAkJCQlDUkJCSVRfSU5EWFBPTF9CKSk7CiAKLQkvLyBJZiBJbnRTcmMgaGFzIGJlZW4gZm9yY2VkIHRvIERpc2FibGVkLCB1cGRhdGUgdGhlIE1JU0MyIGludGVycnVwdAotCS8vIGVuYWJsZSBtYXNrIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKwkvKiAgSWYgSW50U3JjIGhhcyBiZWVuIGZvcmNlZCB0byBEaXNhYmxlZCwgdXBkYXRlIHRoZSBNSVNDMiBpbnRlcnJ1cHQgKi8KKwkvKiAgZW5hYmxlIG1hc2sgdG8gaW5kaWNhdGUgdGhlIGNvdW50ZXIgaW50ZXJydXB0IGlzIGRpc2FibGVkLiAqLwogCWlmIChEaXNhYmxlSW50U3JjKQogCQlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJj0gfmstPk15RXZlbnRCaXRzWzNdOwogCi0JLy8gV2hpbGUgcmV0YWluaW5nIENvdW50ZXJBIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUKLQkvLyBuZXcgY291bnRlciBvcGVyYXRpbmcgbW9kZS4KKwkvKiAgV2hpbGUgcmV0YWluaW5nIENvdW50ZXJBIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUgKi8KKwkvKiAgbmV3IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUuICovCiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQSwKIAkJKHVpbnQxNl90KSAofihDUkFNU0tfSU5EWFNSQ19CIHwgQ1JBTVNLX0NMS1NSQ19CKSksIGNyYSk7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwgQ1JCTVNLX0NMS0VOQUJfQSB8IENSQk1TS19MQVRDSFNSQywgY3JiKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZXR1cm4vc2V0IGEgY291bnRlcidzIGVuYWJsZS4gIGVuYWI6IDA9YWx3YXlzIGVuYWJsZWQsIDE9ZW5hYmxlZCBieSBpbmRleC4KKy8qICBSZXR1cm4vc2V0IGEgY291bnRlcidzIGVuYWJsZS4gIGVuYWI6IDA9YWx3YXlzIGVuYWJsZWQsIDE9ZW5hYmxlZCBieSBpbmRleC4gKi8KIAotc3RhdGljIHZvaWQgU2V0RW5hYmxlX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBlbmFiKQorc3RhdGljIHZvaWQgU2V0RW5hYmxlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBlbmFiKQogewogCURFQlVHKCJTZXRFbmFibGVfQTogU2V0RW5hYmxlX0EgZW50ZXIgMzU0MVxuIik7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwKQEAgLTMwMDYsMjkgKzMwMTYsMjkgQEAKIAkJKHVpbnQxNl90KSAoZW5hYiA8PCBDUkJCSVRfQ0xLRU5BQl9BKSk7CiB9CiAKLXN0YXRpYyB2b2lkIFNldEVuYWJsZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgZW5hYikKK3N0YXRpYyB2b2lkIFNldEVuYWJsZV9CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgZW5hYikKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpICh+KENSQk1TS19JTlRDVFJMIHwgQ1JCTVNLX0NMS0VOQUJfQikpLAogCQkodWludDE2X3QpIChlbmFiIDw8IENSQkJJVF9DTEtFTkFCX0IpKTsKIH0KIAotc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmV0dXJuIChERUJJcmVhZChkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfQ0xLRU5BQl9BKSAmIDE7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0NMS0VOQUJfQikgJiAxOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgYSBjb3VudGVyIHBhaXIncyBsYXRjaCB0cmlnZ2VyIHNvdXJjZS4gIDA6IE9uIHJlYWQKLS8vIGFjY2VzcywgMTogQSBpbmRleCBsYXRjaGVzIEEsIDI6IEIgaW5kZXggbGF0Y2hlcyBCLCAzOiBBIG92ZXJmbG93Ci0vLyBsYXRjaGVzIEIuCisvKiBSZXR1cm4vc2V0IGEgY291bnRlciBwYWlyJ3MgbGF0Y2ggdHJpZ2dlciBzb3VyY2UuICAwOiBPbiByZWFkCisgKiBhY2Nlc3MsIDE6IEEgaW5kZXggbGF0Y2hlcyBBLCAyOiBCIGluZGV4IGxhdGNoZXMgQiwgMzogQSBvdmVyZmxvdworICogbGF0Y2hlcyBCLgorICovCiAKLXN0YXRpYyB2b2lkIFNldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgdmFsdWUpCitzdGF0aWMgdm9pZCBTZXRMYXRjaFNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlKQogewogCURFQlVHKCJTZXRMYXRjaFNvdXJjZTogU2V0TGF0Y2hTb3VyY2UgZW50ZXIgMzU1MCBcbiIpOwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsCkBAIC0zMDM4LDIxMCArMzA0OCwyMDYgQEAKIAlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGV4aXQgXG4iKTsKIH0KIAotLyogc3RhdGljIHVpbnQxNl90IEdldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKSAqLwotLyogeyAqLwotLyogICByZXR1cm4gKCBERUJJcmVhZCggZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0xBVENIU1JDICkgJiAzOyAqLwotLyogfSAqLworLyoKKyAqIHN0YXRpYyB1aW50MTZfdCBHZXRMYXRjaFNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKQorICogeworICogCXJldHVybiAoIERFQklyZWFkKCBkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfTEFUQ0hTUkMgKSAmIDM7CisgKiB9CisgKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmV0dXJuL3NldCB0aGUgZXZlbnQgdGhhdCB3aWxsIHRyaWdnZXIgdHJhbnNmZXIgb2YgdGhlIHByZWxvYWQKLS8vIHJlZ2lzdGVyIGludG8gdGhlIGNvdW50ZXIuICAwPVRoaXNDbnRyX0luZGV4LCAxPVRoaXNDbnRyX092ZXJmbG93LAotLy8gMj1PdmVyZmxvd0EgKEIgY291bnRlcnMgb25seSksIDM9ZGlzYWJsZWQuCisvKgorICogUmV0dXJuL3NldCB0aGUgZXZlbnQgdGhhdCB3aWxsIHRyaWdnZXIgdHJhbnNmZXIgb2YgdGhlIHByZWxvYWQKKyAqIHJlZ2lzdGVyIGludG8gdGhlIGNvdW50ZXIuICAwPVRoaXNDbnRyX0luZGV4LCAxPVRoaXNDbnRyX092ZXJmbG93LAorICogMj1PdmVyZmxvd0EgKEIgY291bnRlcnMgb25seSksIDM9ZGlzYWJsZWQuCisgKi8KIAotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpCitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZykKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JBLCAodWludDE2X3QpICh+Q1JBTVNLX0xPQURTUkNfQSksCiAJCSh1aW50MTZfdCkgKFRyaWcgPDwgQ1JBQklUX0xPQURTUkNfQSkpOwogfQogCi1zdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgVHJpZykKK3N0YXRpYyB2b2lkIFNldExvYWRUcmlnX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBUcmlnKQogewogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsCiAJCSh1aW50MTZfdCkgKH4oQ1JCTVNLX0xPQURTUkNfQiB8IENSQk1TS19JTlRDVFJMKSksCiAJCSh1aW50MTZfdCkgKFRyaWcgPDwgQ1JCQklUX0xPQURTUkNfQikpOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmV0dXJuIChERUJJcmVhZChkZXYsIGstPk15Q1JBKSA+PiBDUkFCSVRfTE9BRFNSQ19BKSAmIDM7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZXR1cm4gKERFQklyZWFkKGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9MT0FEU1JDX0IpICYgMzsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgY291bnRlciBpbnRlcnJ1cHQgc291cmNlIGFuZCBjbGVhciBhbnkgY2FwdHVyZWQKLS8vIGluZGV4L292ZXJmbG93IGV2ZW50cy4gIEludFNvdXJjZTogMD1EaXNhYmxlZCwgMT1PdmVyZmxvd09ubHksCi0vLyAyPUluZGV4T25seSwgMz1JbmRleEFuZE92ZXJmbG93LgorLyogUmV0dXJuL3NldCBjb3VudGVyIGludGVycnVwdCBzb3VyY2UgYW5kIGNsZWFyIGFueSBjYXB0dXJlZAorICogaW5kZXgvb3ZlcmZsb3cgZXZlbnRzLiAgSW50U291cmNlOiAwPURpc2FibGVkLCAxPU92ZXJmbG93T25seSwKKyAqIDI9SW5kZXhPbmx5LCAzPUluZGV4QW5kT3ZlcmZsb3cuCisgKi8KIAotc3RhdGljIHZvaWQgU2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLAorc3RhdGljIHZvaWQgU2V0SW50U3JjX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLAogCXVpbnQxNl90IEludFNvdXJjZSkKIHsKLQkvLyBSZXNldCBhbnkgcGVuZGluZyBjb3VudGVyIG92ZXJmbG93IG9yIGluZGV4IGNhcHR1cmVzLgorCS8qICBSZXNldCBhbnkgcGVuZGluZyBjb3VudGVyIG92ZXJmbG93IG9yIGluZGV4IGNhcHR1cmVzLiAqLwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsICh1aW50MTZfdCkgKH5DUkJNU0tfSU5UQ1RSTCksCiAJCUNSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9BKTsKIAotCS8vIFByb2dyYW0gY291bnRlciBpbnRlcnJ1cHQgc291cmNlLgorCS8qICBQcm9ncmFtIGNvdW50ZXIgaW50ZXJydXB0IHNvdXJjZS4gKi8KIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JBLCB+Q1JBTVNLX0lOVFNSQ19BLAogCQkodWludDE2X3QpIChJbnRTb3VyY2UgPDwgQ1JBQklUX0lOVFNSQ19BKSk7CiAKLQkvLyBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLgorCS8qICBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLiAqLwogCWRldnByaXYtPkNvdW50ZXJJbnRFbmFicyA9CiAJCShkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJiB+ay0+TXlFdmVudEJpdHNbM10pIHwgay0+CiAJCU15RXZlbnRCaXRzW0ludFNvdXJjZV07CiB9CiAKLXN0YXRpYyB2b2lkIFNldEludFNyY19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywKK3N0YXRpYyB2b2lkIFNldEludFNyY19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCBJbnRTb3VyY2UpCiB7CiAJdWludDE2X3QgY3JiOwogCi0JLy8gQ2FjaGUgd3JpdGVhYmxlIENSQiByZWdpc3RlciBpbWFnZS4KKwkvKiAgQ2FjaGUgd3JpdGVhYmxlIENSQiByZWdpc3RlciBpbWFnZS4gKi8KIAljcmIgPSBERUJJcmVhZChkZXYsIGstPk15Q1JCKSAmIH5DUkJNU0tfSU5UQ1RSTDsKIAotCS8vIFJlc2V0IGFueSBwZW5kaW5nIGNvdW50ZXIgb3ZlcmZsb3cgb3IgaW5kZXggY2FwdHVyZXMuCisJLyogIFJlc2V0IGFueSBwZW5kaW5nIGNvdW50ZXIgb3ZlcmZsb3cgb3IgaW5kZXggY2FwdHVyZXMuICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsCiAJCSh1aW50MTZfdCkgKGNyYiB8IENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CKSk7CiAKLQkvLyBQcm9ncmFtIGNvdW50ZXIgaW50ZXJydXB0IHNvdXJjZS4KKwkvKiAgUHJvZ3JhbSBjb3VudGVyIGludGVycnVwdCBzb3VyY2UuICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsCiAJCSh1aW50MTZfdCkgKChjcmIgJiB+Q1JCTVNLX0lOVFNSQ19CKSB8IChJbnRTb3VyY2UgPDwKIAkJCQlDUkJCSVRfSU5UU1JDX0IpKSk7CiAKLQkvLyBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLgorCS8qICBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLiAqLwogCWRldnByaXYtPkNvdW50ZXJJbnRFbmFicyA9CiAJCShkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJiB+ay0+TXlFdmVudEJpdHNbM10pIHwgay0+CiAJCU15RXZlbnRCaXRzW0ludFNvdXJjZV07CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQSkgPj4gQ1JBQklUX0lOVFNSQ19BKSAmIDM7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0lOVFNSQ19CKSAmIDM7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgdGhlIGNsb2NrIG11bHRpcGxpZXIuCisvKiAgUmV0dXJuL3NldCB0aGUgY2xvY2sgbXVsdGlwbGllci4gKi8KIAotLyogc3RhdGljIHZvaWQgU2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0Q2xrTXVsdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICkgICovCiAvKiB7ICovCiAvKiAgIGstPlNldE1vZGUoZGV2LCBrLCAodWludDE2X3QpKCAoIGstPkdldE1vZGUoZGV2LCBrICkgJiB+U1RETVNLX0NMS01VTFQgKSB8ICggdmFsdWUgPDwgU1REQklUX0NMS01VTFQgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrTXVsdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKSAgKi8KIC8qIHsgKi8KIC8qICAgcmV0dXJuICggay0+R2V0TW9kZShkZXYsIGsgKSA+PiBTVERCSVRfQ0xLTVVMVCApICYgMzsgKi8KIC8qIH0gKi8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIC8vIFJldHVybi9zZXQgdGhlIGNsb2NrIHBvbGFyaXR5LiAqLworLyogUmV0dXJuL3NldCB0aGUgY2xvY2sgcG9sYXJpdHkuICovCiAKLS8qIHN0YXRpYyB2b2lkIFNldENsa1BvbCggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0Q2xrUG9sKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgay0+U2V0TW9kZShkZXYsIGssICh1aW50MTZfdCkoICggay0+R2V0TW9kZShkZXYsIGsgKSAmIH5TVERNU0tfQ0xLUE9MICkgfCAoIHZhbHVlIDw8IFNUREJJVF9DTEtQT0wgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrUG9sKGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKSAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0NMS1BPTCApICYgMTsgKi8KIC8qIH0gKi8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIC8vIFJldHVybi9zZXQgdGhlIGNsb2NrIHNvdXJjZS4gKi8KKy8qIFJldHVybi9zZXQgdGhlIGNsb2NrIHNvdXJjZS4gICovCiAKLS8qIHN0YXRpYyB2b2lkIFNldENsa1NyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0Q2xrU3JjKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgay0+U2V0TW9kZShkZXYsIGssICh1aW50MTZfdCkoICggay0+R2V0TW9kZShkZXYsIGsgKSAmIH5TVERNU0tfQ0xLU1JDICkgfCAoIHZhbHVlIDw8IFNUREJJVF9DTEtTUkMgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrU3JjKCBjb21lZGlfZGV2aWNlICpkZXYsZW5jX3ByaXZhdGUgKmsgKSAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0NMS1NSQyApICYgMzsgKi8KIC8qIH0gKi8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0vKiAvLyBSZXR1cm4vc2V0IHRoZSBpbmRleCBwb2xhcml0eS4gKi8KKy8qIFJldHVybi9zZXQgdGhlIGluZGV4IHBvbGFyaXR5LiAqLwogCi0vKiBzdGF0aWMgdm9pZCBTZXRJbmRleFBvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0SW5kZXhQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLwogLyogeyAqLwogLyogICBrLT5TZXRNb2RlKGRldiwgaywgKHVpbnQxNl90KSggKCBrLT5HZXRNb2RlKGRldiwgayApICYgflNURE1TS19JTkRYUE9MICkgfCAoICh2YWx1ZSAhPSAwKSA8PCBTVERCSVRfSU5EWFBPTCApICksIEZBTFNFICk7ICovCiAvKiB9ICovCiAKLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFBvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0lORFhQT0wgKSAmIDE7ICovCiAvKiB9ICovCiAKLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwotLyogLy8gUmV0dXJuL3NldCB0aGUgaW5kZXggc291cmNlLiAqLworLyogIFJldHVybi9zZXQgdGhlIGluZGV4IHNvdXJjZS4gKi8KIAotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4U3JjKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgREVCVUcoIlNldEluZGV4U3JjOiBzZXQgaW5kZXggc3JjIGVudGVyIDM3MDBcbiIpOyAqLwogLyogICBrLT5TZXRNb2RlKGRldiwgaywgKHVpbnQxNl90KSggKCBrLT5HZXRNb2RlKGRldiwgayApICYgflNURE1TS19JTkRYU1JDICkgfCAoICh2YWx1ZSAhPSAwKSA8PCBTVERCSVRfSU5EWFNSQyApICksIEZBTFNFICk7ICovCiAvKiB9ICovCiAKLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFNyYyhjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhTcmMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0lORFhTUkMgKSAmIDE7ICovCiAvKiB9ICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEdlbmVyYXRlIGFuIGluZGV4IHB1bHNlLgorLyogIEdlbmVyYXRlIGFuIGluZGV4IHB1bHNlLiAqLwogCi1zdGF0aWMgdm9pZCBQdWxzZUluZGV4X0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHZvaWQgUHVsc2VJbmRleF9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmE7CiAKIAlERUJVRygiUHVsc2VJbmRleF9BOiBwdWxzZSBpbmRleCBlbnRlclxuIik7CiAKLQljcmEgPSBERUJJcmVhZChkZXYsIGstPk15Q1JBKTsJLy8gUHVsc2UgaW5kZXguCisJY3JhID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQSk7CS8qICBQdWxzZSBpbmRleC4gKi8KIAlERUJJd3JpdGUoZGV2LCBrLT5NeUNSQSwgKHVpbnQxNl90KSAoY3JhIF4gQ1JBTVNLX0lORFhQT0xfQSkpOwogCURFQlVHKCJQdWxzZUluZGV4X0E6IHB1bHNlIGluZGV4IHN0ZXAxXG4iKTsKIAlERUJJd3JpdGUoZGV2LCBrLT5NeUNSQSwgY3JhKTsKIH0KIAotc3RhdGljIHZvaWQgUHVsc2VJbmRleF9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JiOwogCi0JY3JiID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgJiB+Q1JCTVNLX0lOVENUUkw7CS8vIFB1bHNlIGluZGV4LgorCWNyYiA9IERFQklyZWFkKGRldiwgay0+TXlDUkIpICYgfkNSQk1TS19JTlRDVFJMOwkvKiAgUHVsc2UgaW5kZXguICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsICh1aW50MTZfdCkgKGNyYiBeIENSQk1TS19JTkRYUE9MX0IpKTsKIAlERUJJd3JpdGUoZGV2LCBrLT5NeUNSQiwgY3JiKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBXcml0ZSB2YWx1ZSBpbnRvIGNvdW50ZXIgcHJlbG9hZCByZWdpc3Rlci4KKy8qICBXcml0ZSB2YWx1ZSBpbnRvIGNvdW50ZXIgcHJlbG9hZCByZWdpc3Rlci4gKi8KIAotc3RhdGljIHZvaWQgUHJlbG9hZChjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQzMl90IHZhbHVlKQorc3RhdGljIHZvaWQgUHJlbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQzMl90IHZhbHVlKQogewogCURFQlVHKCJQcmVsb2FkOiBwcmVsb2FkIGVudGVyXG4iKTsKLQlERUJJd3JpdGUoZGV2LCAodWludDE2X3QpIChrLT5NeUxhdGNoTHN3KSwgKHVpbnQxNl90KSB2YWx1ZSk7CS8vIFdyaXRlIHZhbHVlIHRvIHByZWxvYWQgcmVnaXN0ZXIuCisJREVCSXdyaXRlKGRldiwgKHVpbnQxNl90KSAoay0+TXlMYXRjaExzdyksICh1aW50MTZfdCkgdmFsdWUpOwkvKiAgV3JpdGUgdmFsdWUgdG8gcHJlbG9hZCByZWdpc3Rlci4gKi8KIAlERUJVRygiUHJlbG9hZDogcHJlbG9hZCBzdGVwIDFcbiIpOwogCURFQkl3cml0ZShkZXYsICh1aW50MTZfdCkgKGstPk15TGF0Y2hMc3cgKyAyKSwKIAkJKHVpbnQxNl90KSAodmFsdWUgPj4gMTYpKTsKIH0KIAotc3RhdGljIHZvaWQgQ291bnRlcnNJbml0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBDb3VudGVyc0luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpbnQgY2hhbjsKLQllbmNfcHJpdmF0ZSAqazsKLQl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvLyBQcmVsb2FkIHVwb24KLQkJLy8gaW5kZXguCi0JCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvLyBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LgotCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8vIE9wZXJhdGluZyBtb2RlIGlzIGNvdW50ZXIuCi0JCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvLyBBY3RpdmUgaGlnaCBjbG9jay4KLQkJKENOVERJUl9VUCA8PCBCRl9DTEtQT0wpIHwJLy8gQ291bnQgZGlyZWN0aW9uIGlzIHVwLgotCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8vIENsb2NrIG11bHRpcGxpZXIgaXMgMXguCi0JCShDTEtFTkFCX0lOREVYIDw8IEJGX0NMS0VOQUIpOwkvLyBFbmFibGVkIGJ5IGluZGV4CisJc3RydWN0IGVuY19wcml2YXRlICprOworCXVpbnQxNl90IFNldHVwID0gKExPQURTUkNfSU5EWCA8PCBCRl9MT0FEU1JDKSB8CS8qICBQcmVsb2FkIHVwb24gKi8KKwkJLyogIGluZGV4LiAqLworCQkoSU5EWFNSQ19TT0ZUIDw8IEJGX0lORFhTUkMpIHwJLyogIERpc2FibGUgaGFyZHdhcmUgaW5kZXguICovCisJCShDTEtTUkNfQ09VTlRFUiA8PCBCRl9DTEtTUkMpIHwJLyogIE9wZXJhdGluZyBtb2RlIGlzIGNvdW50ZXIuICovCisJCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvKiAgQWN0aXZlIGhpZ2ggY2xvY2suICovCisJCShDTlRESVJfVVAgPDwgQkZfQ0xLUE9MKSB8CS8qICBDb3VudCBkaXJlY3Rpb24gaXMgdXAuICovCisJCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLyogIENsb2NrIG11bHRpcGxpZXIgaXMgMXguICovCisJCShDTEtFTkFCX0lOREVYIDw8IEJGX0NMS0VOQUIpOwkvKiAgRW5hYmxlZCBieSBpbmRleCAqLwogCi0JLy8gRGlzYWJsZSBhbGwgY291bnRlciBpbnRlcnJ1cHRzIGFuZCBjbGVhciBhbnkgY2FwdHVyZWQgY291bnRlciBldmVudHMuCisJLyogIERpc2FibGUgYWxsIGNvdW50ZXIgaW50ZXJydXB0cyBhbmQgY2xlYXIgYW55IGNhcHR1cmVkIGNvdW50ZXIgZXZlbnRzLiAqLwogCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBTNjI2X0VOQ09ERVJfQ0hBTk5FTFM7IGNoYW4rKykgewogCQlrID0gJmVuY3ByaXZbY2hhbl07CiAJCWstPlNldE1vZGUoZGV2LCBrLCBTZXR1cCwgVFJVRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuaAppbmRleCAxMWQ4YjFjLi44OTExMjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmgKQEAgLTUxLDE1ICs1MSwxNSBAQAogCiAgICBFeGFtcGxlIGNvZGUKIAotICAgaW5zbi5pbnNuPUlOU05fQ09ORklHOyAgIC8vY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbgotICAgaW5zbi5uPTE7ICAgICAgICAgICAgICAgIC8vbnVtYmVyIG9mIG9wZXJhdGlvbiAobXVzdCBiZSAxKQotICAgaW5zbi5kYXRhPSZpbml0aWFsdmFsdWU7IC8vaW5pdGlhbCB2YWx1ZSBsb2FkZWQgaW50byBlbmNvZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kdXJpbmcgY29uZmlndXJhdGlvbgotICAgaW5zbi5zdWJkZXY9NTsgICAgICAgICAgIC8vZW5jb2RlciBzdWJkZXZpY2UKLSAgIGluc24uY2hhbnNwZWM9Q1JfUEFDSyhlbmNvZGVyX2NoYW5uZWwsMCxBUkVGX09USEVSKTsgLy9lbmNvZGVyX2NoYW5uZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byBjb25maWd1cmUKKyAgIGluc24uaW5zbj1JTlNOX0NPTkZJRzsgICAvLyBjb25maWd1cmF0aW9uIGluc3RydWN0aW9uCisgICBpbnNuLm49MTsgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIG9wZXJhdGlvbiAobXVzdCBiZSAxKQorICAgaW5zbi5kYXRhPSZpbml0aWFsdmFsdWU7IC8vIGluaXRpYWwgdmFsdWUgbG9hZGVkIGludG8gZW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyBjb25maWd1cmF0aW9uCisgICBpbnNuLnN1YmRldj01OyAgICAgICAgICAgLy8gZW5jb2RlciBzdWJkZXZpY2UKKyAgIGluc24uY2hhbnNwZWM9Q1JfUEFDSyhlbmNvZGVyX2NoYW5uZWwsMCxBUkVGX09USEVSKTsgLy8gZW5jb2Rlcl9jaGFubmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNvbmZpZ3VyZQogCi0gICBjb21lZGlfZG9faW5zbihjZiwmaW5zbik7IC8vZXhlY3V0aW5nIGNvbmZpZ3VyYXRpb24KKyAgIGNvbWVkaV9kb19pbnNuKGNmLCZpbnNuKTsgLy8gZXhlY3V0aW5nIGNvbmZpZ3VyYXRpb24KICovCiAKICNpZmRlZiBfREVCVUdfCkBAIC04OCwxNDcgKzg4LDEzNiBAQAogI2RlZmluZSBJTkxJTkUgc3RhdGljIF9faW5saW5lCiAjZW5kaWYKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNpbmNsdWRlPGxpbnV4L3NsYWIuaD4KIAogI2RlZmluZSBTNjI2X1NJWkUgMHgwMjAwCiAjZGVmaW5lIFNJWkVPRl9BRERSRVNTX1NQQUNFCQkweDAyMDAKLSNkZWZpbmUgRE1BQlVGX1NJWkUJCQk0MDk2CS8vIDRrIHBhZ2VzCisjZGVmaW5lIERNQUJVRl9TSVpFCQkJNDA5NgkvKiAgNGsgcGFnZXMgKi8KIAogI2RlZmluZSBTNjI2X0FEQ19DSEFOTkVMUyAgICAgICAxNgogI2RlZmluZSBTNjI2X0RBQ19DSEFOTkVMUyAgICAgICA0CiAjZGVmaW5lIFM2MjZfRU5DT0RFUl9DSEFOTkVMUyAgIDYKICNkZWZpbmUgUzYyNl9ESU9fQ0hBTk5FTFMgICAgICAgNDgKLSNkZWZpbmUgUzYyNl9ESU9fQkFOS1MJCTMJLy8gTnVtYmVyIG9mIERJTyBncm91cHMuCi0jZGVmaW5lIFM2MjZfRElPX0VYVENIQU5TCTQwCS8vIE51bWJlciBvZgotCQkJCQkvLyBleHRlbmRlZC1jYXBhYmlsaXR5Ci0JCQkJCS8vIERJTyBjaGFubmVscy4KKyNkZWZpbmUgUzYyNl9ESU9fQkFOS1MJCTMJLyogIE51bWJlciBvZiBESU8gZ3JvdXBzLiAqLworI2RlZmluZSBTNjI2X0RJT19FWFRDSEFOUwk0MAkvKiAgTnVtYmVyIG9mICovCisJCQkJCS8qICBleHRlbmRlZC1jYXBhYmlsaXR5ICovCisJCQkJCS8qICBESU8gY2hhbm5lbHMuICovCiAKLSNkZWZpbmUgTlVNX1RSSU1EQUNTCTEyCS8vIE51bWJlciBvZiB2YWxpZCBUcmltREFDIGNoYW5uZWxzLgorI2RlZmluZSBOVU1fVFJJTURBQ1MJMTIJLyogIE51bWJlciBvZiB2YWxpZCBUcmltREFDIGNoYW5uZWxzLiAqLwogCi0vLyBQQ0kgYnVzIGludGVyZmFjZSB0eXBlcy4KLSNkZWZpbmUgSU5URUwJCQkJMQkvLyBJbnRlbCBidXMgdHlwZS4KLSNkZWZpbmUgTU9UT1JPTEEJCQkyCS8vIE1vdG9yb2xhIGJ1cyB0eXBlLgorLyogIFBDSSBidXMgaW50ZXJmYWNlIHR5cGVzLiAqLworI2RlZmluZSBJTlRFTAkJCQkxCS8qICBJbnRlbCBidXMgdHlwZS4gKi8KKyNkZWZpbmUgTU9UT1JPTEEJCQkyCS8qICBNb3Rvcm9sYSBidXMgdHlwZS4gKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBQTEFURk9STQkJSU5URUwJLyogICoqKiBTRUxFQ1QgUExBVEZPUk0gVFlQRSAqKiogKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2RlZmluZSBQTEFURk9STQkJSU5URUwJLy8gKioqIFNFTEVDVCBQTEFURk9STSBUWVBFICoqKgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBSQU5HRV81ViAgICAgICAgICAgICAgICAweDEwCS8qICArLy01ViByYW5nZSAqLworI2RlZmluZSBSQU5HRV8xMFYgICAgICAgICAgICAgICAweDAwCS8qICArLy0xMFYgcmFuZ2UgKi8KIAotI2RlZmluZSBSQU5HRV81ViAgICAgICAgICAgICAgICAweDEwCS8vICsvLTVWIHJhbmdlCi0jZGVmaW5lIFJBTkdFXzEwViAgICAgICAgICAgICAgIDB4MDAJLy8gKy8tMTBWIHJhbmdlCisjZGVmaW5lIEVPUEwJCQkweDgwCS8qICBFbmQgb2YgQURDIHBvbGwgbGlzdCBtYXJrZXIuICovCisjZGVmaW5lIEdTRUxfQklQT0xBUjVWCQkweDAwRjAJLyogIExQX0dTRUwgc2V0dGluZyBmb3IgNVYgYmlwb2xhciByYW5nZS4gKi8KKyNkZWZpbmUgR1NFTF9CSVBPTEFSMTBWCQkweDAwQTAJLyogIExQX0dTRUwgc2V0dGluZyBmb3IgMTBWIGJpcG9sYXIgcmFuZ2UuICovCiAKLSNkZWZpbmUgRU9QTAkJCTB4ODAJLy8gRW5kIG9mIEFEQyBwb2xsIGxpc3QgbWFya2VyLgotI2RlZmluZSBHU0VMX0JJUE9MQVI1VgkJMHgwMEYwCS8vIExQX0dTRUwgc2V0dGluZyBmb3IgNVYgYmlwb2xhciByYW5nZS4KLSNkZWZpbmUgR1NFTF9CSVBPTEFSMTBWCQkweDAwQTAJLy8gTFBfR1NFTCBzZXR0aW5nIGZvciAxMFYgYmlwb2xhciByYW5nZS4KKy8qICBFcnJvciBjb2RlcyB0aGF0IG11c3QgYmUgdmlzaWJsZSB0byB0aGlzIGJhc2UgY2xhc3MuICovCisjZGVmaW5lIEVSUl9JTExFR0FMX1BBUk0JMHgwMDAxMDAwMAkvKiAgSWxsZWdhbCBmdW5jdGlvbiBwYXJhbWV0ZXIgdmFsdWUgd2FzIHNwZWNpZmllZC4gKi8KKyNkZWZpbmUgRVJSX0kyQwkJCTB4MDAwMjAwMDAJLyogIEkyQyBlcnJvci4gKi8KKyNkZWZpbmUgRVJSX0NPVU5URVJTRVRVUAkweDAwMjAwMDAwCS8qICBJbGxlZ2FsIHNldHVwIHNwZWNpZmllZCBmb3IgY291bnRlciBjaGFubmVsLiAqLworI2RlZmluZSBFUlJfREVCSV9USU1FT1VUCTB4MDA0MDAwMDAJLyogIERFQkkgdHJhbnNmZXIgdGltZWQgb3V0LiAqLwogCi0vLyBFcnJvciBjb2RlcyB0aGF0IG11c3QgYmUgdmlzaWJsZSB0byB0aGlzIGJhc2UgY2xhc3MuCi0jZGVmaW5lIEVSUl9JTExFR0FMX1BBUk0JMHgwMDAxMDAwMAkvLyBJbGxlZ2FsIGZ1bmN0aW9uIHBhcmFtZXRlciB2YWx1ZSB3YXMgc3BlY2lmaWVkLgotI2RlZmluZSBFUlJfSTJDCQkJMHgwMDAyMDAwMAkvLyBJMkMgZXJyb3IuCi0jZGVmaW5lIEVSUl9DT1VOVEVSU0VUVVAJMHgwMDIwMDAwMAkvLyBJbGxlZ2FsIHNldHVwIHNwZWNpZmllZCBmb3IgY291bnRlciBjaGFubmVsLgotI2RlZmluZSBFUlJfREVCSV9USU1FT1VUCTB4MDA0MDAwMDAJLy8gREVCSSB0cmFuc2ZlciB0aW1lZCBvdXQuCisvKiAgT3JnYW5pemF0aW9uIChwaHlzaWNhbCBvcmRlcikgYW5kIHNpemUgKGluIERXT1JEcykgb2YgbG9naWNhbCBETUEgYnVmZmVycyBjb250YWluZWQgYnkgQU5BX0RNQUJVRi4gKi8KKyNkZWZpbmUgQURDX0RNQUJVRl9EV09SRFMJNDAJLyogIEFEQyBETUEgYnVmZmVyIG11c3QgaG9sZCAxNiBzYW1wbGVzLCBwbHVzIHByZS9wb3N0IGdhcmJhZ2Ugc2FtcGxlcy4gKi8KKyNkZWZpbmUgREFDX1dETUFCVUZfRFdPUkRTCTEJLyogIERBQyBvdXRwdXQgRE1BIGJ1ZmZlciBob2xkcyBhIHNpbmdsZSBzYW1wbGUuICovCiAKLS8vIE9yZ2FuaXphdGlvbiAocGh5c2ljYWwgb3JkZXIpIGFuZCBzaXplIChpbiBEV09SRHMpIG9mIGxvZ2ljYWwgRE1BIGJ1ZmZlcnMgY29udGFpbmVkIGJ5IEFOQV9ETUFCVUYuCi0jZGVmaW5lIEFEQ19ETUFCVUZfRFdPUkRTCTQwCS8vIEFEQyBETUEgYnVmZmVyIG11c3QgaG9sZCAxNiBzYW1wbGVzLCBwbHVzIHByZS9wb3N0IGdhcmJhZ2Ugc2FtcGxlcy4KLSNkZWZpbmUgREFDX1dETUFCVUZfRFdPUkRTCTEJLy8gREFDIG91dHB1dCBETUEgYnVmZmVyIGhvbGRzIGEgc2luZ2xlIHNhbXBsZS4KKy8qICBBbGwgcmVtYWluaW5nIHNwYWNlIGluIDRLQiBETUEgYnVmZmVyIGlzIGF2YWlsYWJsZSBmb3IgdGhlIFJQUzEgcHJvZ3JhbS4gKi8KIAotLy8gQWxsIHJlbWFpbmluZyBzcGFjZSBpbiA0S0IgRE1BIGJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHRoZSBSUFMxIHByb2dyYW0uCi0KLS8vIEFkZHJlc3Mgb2Zmc2V0cywgaW4gRFdPUkRTLCBmcm9tIGJhc2Ugb2YgRE1BIGJ1ZmZlci4KKy8qICBBZGRyZXNzIG9mZnNldHMsIGluIERXT1JEUywgZnJvbSBiYXNlIG9mIERNQSBidWZmZXIuICovCiAjZGVmaW5lIERBQ19XRE1BQlVGX09TCQlBRENfRE1BQlVGX0RXT1JEUwogCi0vLyBJbnRlcnJ1cHQgZW5hYiBiaXQgaW4gSVNSIGFuZCBJRVIuCi0jZGVmaW5lIElSUV9HUElPMwkJMHgwMDAwMDA0MAkvLyBJUlEgZW5hYmxlIGZvciBHUElPMy4KKy8qICBJbnRlcnJ1cHQgZW5hYiBiaXQgaW4gSVNSIGFuZCBJRVIuICovCisjZGVmaW5lIElSUV9HUElPMwkJMHgwMDAwMDA0MCAgLyogIElSUSBlbmFibGUgZm9yIEdQSU8zLiAqLwogI2RlZmluZSBJUlFfUlBTMSAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIElTUl9BRk9VCQkweDAwMDAwODAwCS8vIEF1ZGlvIGZpZm8KLQkJCQkJCS8vIHVuZGVyL292ZXJmbG93Ci0JCQkJCQkvLyBkZXRlY3RlZC4KLSNkZWZpbmUgSVJRX0NPSU5UMUEgICAgICAgICAgICAgMHgwNDAwCS8vIGNvbnRlciAxQSBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UMUIgICAgICAgICAgICAgMHgwODAwCS8vIGNvbnRlciAxQiBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UMkEgICAgICAgICAgICAgMHgxMDAwCS8vIGNvbnRlciAyQSBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UMkIgICAgICAgICAgICAgMHgyMDAwCS8vIGNvbnRlciAyQiBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UM0EgICAgICAgICAgICAgMHg0MDAwCS8vIGNvbnRlciAzQSBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UM0IgICAgICAgICAgICAgMHg4MDAwCS8vIGNvbnRlciAzQiBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgSVNSX0FGT1UJCTB4MDAwMDA4MDAKKy8qIEF1ZGlvIGZpZm8gdW5kZXIvb3ZlcmZsb3cgIGRldGVjdGVkLiAqLwogCi0vLyBSUFMgY29tbWFuZCBjb2Rlcy4KLSNkZWZpbmUgUlBTX0NMUlNJR05BTAkJMHgwMDAwMDAwMAkvLyBDTEVBUiBTSUdOQUwKLSNkZWZpbmUgUlBTX1NFVFNJR05BTAkJMHgxMDAwMDAwMAkvLyBTRVQgU0lHTkFMCi0jZGVmaW5lIFJQU19OT1AJCQkweDAwMDAwMDAwCS8vIE5PUAotI2RlZmluZSBSUFNfUEFVU0UJCTB4MjAwMDAwMDAJLy8gUEFVU0UKLSNkZWZpbmUgUlBTX1VQTE9BRAkJMHg0MDAwMDAwMAkvLyBVUExPQUQKLSNkZWZpbmUgUlBTX0pVTVAJCTB4ODAwMDAwMDAJLy8gSlVNUAotI2RlZmluZSBSUFNfTERSRUcJCTB4OTAwMDAxMDAJLy8gTERSRUcgKDEgdWludDMyX3Qgb25seSkKLSNkZWZpbmUgUlBTX1NUUkVHCQkweEEwMDAwMTAwCS8vIFNUUkVHICgxIHVpbnQzMl90IG9ubHkpCi0jZGVmaW5lIFJQU19TVE9QCQkweDUwMDAwMDAwCS8vIFNUT1AKLSNkZWZpbmUgUlBTX0lSUSAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAkvLyBJUlEKKyNkZWZpbmUgSVJRX0NPSU5UMUEgICAgICAgICAgICAgMHgwNDAwIC8qIGNvbnRlciAxQSBvdmVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUlFfQ09JTlQxQiAgICAgICAgICAgICAweDA4MDAgLyogY29udGVyIDFCIG92ZXJmbG93IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIElSUV9DT0lOVDJBICAgICAgICAgICAgIDB4MTAwMCAvKiBjb250ZXIgMkEgb3ZlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSVJRX0NPSU5UMkIgICAgICAgICAgICAgMHgyMDAwIC8qIGNvbnRlciAyQiBvdmVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUlFfQ09JTlQzQSAgICAgICAgICAgICAweDQwMDAgLyogY29udGVyIDNBIG92ZXJmbG93IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIElSUV9DT0lOVDNCICAgICAgICAgICAgIDB4ODAwMCAvKiBjb250ZXIgM0Igb3ZlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KIAotI2RlZmluZSBSUFNfTE9HSUNBTF9PUgkJMHgwODAwMDAwMAkvLyBMb2dpY2FsIE9SIGNvbmRpdGlvbmFscy4KLSNkZWZpbmUgUlBTX0lOVkVSVAkJMHgwNDAwMDAwMAkvLyBUZXN0IGZvciBuZWdhdGVkIHNlbWFwaG9yZXMuCi0jZGVmaW5lIFJQU19ERUJJCQkweDAwMDAwMDAyCS8vIERFQkkgZG9uZQorLyogIFJQUyBjb21tYW5kIGNvZGVzLiAqLworI2RlZmluZSBSUFNfQ0xSU0lHTkFMCQkweDAwMDAwMDAwCS8qICBDTEVBUiBTSUdOQUwgKi8KKyNkZWZpbmUgUlBTX1NFVFNJR05BTAkJMHgxMDAwMDAwMAkvKiAgU0VUIFNJR05BTCAqLworI2RlZmluZSBSUFNfTk9QCQkJMHgwMDAwMDAwMAkvKiAgTk9QICovCisjZGVmaW5lIFJQU19QQVVTRQkJMHgyMDAwMDAwMAkvKiAgUEFVU0UgKi8KKyNkZWZpbmUgUlBTX1VQTE9BRAkJMHg0MDAwMDAwMAkvKiAgVVBMT0FEICovCisjZGVmaW5lIFJQU19KVU1QCQkweDgwMDAwMDAwCS8qICBKVU1QICovCisjZGVmaW5lIFJQU19MRFJFRwkJMHg5MDAwMDEwMAkvKiAgTERSRUcgKDEgdWludDMyX3Qgb25seSkgKi8KKyNkZWZpbmUgUlBTX1NUUkVHCQkweEEwMDAwMTAwCS8qICBTVFJFRyAoMSB1aW50MzJfdCBvbmx5KSAqLworI2RlZmluZSBSUFNfU1RPUAkJMHg1MDAwMDAwMAkvKiAgU1RPUCAqLworI2RlZmluZSBSUFNfSVJRICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCS8qICBJUlEgKi8KIAotI2RlZmluZSBSUFNfU0lHMAkJMHgwMDIwMDAwMAkvLyBSUFMgc2VtYXBob3JlIDAgKHVzZWQgYnkgQURDKS4KLSNkZWZpbmUgUlBTX1NJRzEJCTB4MDA0MDAwMDAJLy8gUlBTIHNlbWFwaG9yZSAxICh1c2VkIGJ5IERBQykuCi0jZGVmaW5lIFJQU19TSUcyCQkweDAwODAwMDAwCS8vIFJQUyBzZW1hcGhvcmUgMiAobm90IHVzZWQpLgotI2RlZmluZSBSUFNfR1BJTzIJCTB4MDAwODAwMDAJLy8gUlBTIEdQSU8yCi0jZGVmaW5lIFJQU19HUElPMwkJMHgwMDEwMDAwMAkvLyBSUFMgR1BJTzMKKyNkZWZpbmUgUlBTX0xPR0lDQUxfT1IJCTB4MDgwMDAwMDAJLyogIExvZ2ljYWwgT1IgY29uZGl0aW9uYWxzLiAqLworI2RlZmluZSBSUFNfSU5WRVJUCQkweDA0MDAwMDAwCS8qICBUZXN0IGZvciBuZWdhdGVkIHNlbWFwaG9yZXMuICovCisjZGVmaW5lIFJQU19ERUJJCQkweDAwMDAwMDAyCS8qICBERUJJIGRvbmUgKi8KIAotI2RlZmluZSBSUFNfU0lHQURDCQlSUFNfU0lHMAkvLyBUcmlnZ2VyL3N0YXR1cyBmb3IgQURDJ3MgUlBTIHByb2dyYW0uCi0jZGVmaW5lIFJQU19TSUdEQUMJCVJQU19TSUcxCS8vIFRyaWdnZXIvc3RhdHVzIGZvciBEQUMncyBSUFMgcHJvZ3JhbS4KKyNkZWZpbmUgUlBTX1NJRzAJCTB4MDAyMDAwMDAJLyogIFJQUyBzZW1hcGhvcmUgMCAodXNlZCBieSBBREMpLiAqLworI2RlZmluZSBSUFNfU0lHMQkJMHgwMDQwMDAwMAkvKiAgUlBTIHNlbWFwaG9yZSAxICh1c2VkIGJ5IERBQykuICovCisjZGVmaW5lIFJQU19TSUcyCQkweDAwODAwMDAwCS8qICBSUFMgc2VtYXBob3JlIDIgKG5vdCB1c2VkKS4gKi8KKyNkZWZpbmUgUlBTX0dQSU8yCQkweDAwMDgwMDAwCS8qICBSUFMgR1BJTzIgKi8KKyNkZWZpbmUgUlBTX0dQSU8zCQkweDAwMTAwMDAwCS8qICBSUFMgR1BJTzMgKi8KIAotLy8gUlBTIGNsb2NrIHBhcmFtZXRlcnMuCi0jZGVmaW5lIFJQU0NMS19TQ0FMQVIJCTgJLy8gVGhpcyBpcyBhcHBhcmVudCByYXRpbyBvZiBQQ0kvUlBTIGNsa3MgKHVuZG9jdW1lbnRlZCEhKS4KLSNkZWZpbmUgUlBTQ0xLX1BFUl9VUwkJKCAzMyAvIFJQU0NMS19TQ0FMQVIgKQkvLyBOdW1iZXIgb2YgUlBTIGNsb2NrcyBpbiBvbmUgbWljcm9zZWNvbmQuCisjZGVmaW5lIFJQU19TSUdBREMJCVJQU19TSUcwCS8qICBUcmlnZ2VyL3N0YXR1cyBmb3IgQURDJ3MgUlBTIHByb2dyYW0uICovCisjZGVmaW5lIFJQU19TSUdEQUMJCVJQU19TSUcxCS8qICBUcmlnZ2VyL3N0YXR1cyBmb3IgREFDJ3MgUlBTIHByb2dyYW0uICovCiAKLS8vIEV2ZW50IGNvdW50ZXIgc291cmNlIGFkZHJlc3Nlcy4KLSNkZWZpbmUgU0JBX1JQU19BMAkJMHgyNwkvLyBUaW1lIG9mIFJQUzAgYnVzeSwgaW4gUENJIGNsb2Nrcy4KKy8qICBSUFMgY2xvY2sgcGFyYW1ldGVycy4gKi8KKyNkZWZpbmUgUlBTQ0xLX1NDQUxBUgkJOAkvKiAgVGhpcyBpcyBhcHBhcmVudCByYXRpbyBvZiBQQ0kvUlBTIGNsa3MgKHVuZG9jdW1lbnRlZCEhKS4gKi8KKyNkZWZpbmUgUlBTQ0xLX1BFUl9VUwkJKDMzIC8gUlBTQ0xLX1NDQUxBUikJLyogIE51bWJlciBvZiBSUFMgY2xvY2tzIGluIG9uZSBtaWNyb3NlY29uZC4gKi8KIAotLy8gR1BJTyBjb25zdGFudHMuCi0jZGVmaW5lIEdQSU9fQkFTRQkJMHgxMDAwNDAwMAkvLyBHUElPIDAsMiwzID0gaW5wdXRzLCBHUElPMyA9IElSUTsgR1BJTzEgPSBvdXQuCi0jZGVmaW5lIEdQSU8xX0xPCQkweDAwMDAwMDAwCS8vIEdQSU8xIHNldCB0byBMT1cuCi0jZGVmaW5lIEdQSU8xX0hJCQkweDAwMDAxMDAwCS8vIEdQSU8xIHNldCB0byBISUdILgorLyogIEV2ZW50IGNvdW50ZXIgc291cmNlIGFkZHJlc3Nlcy4gKi8KKyNkZWZpbmUgU0JBX1JQU19BMAkJMHgyNwkvKiAgVGltZSBvZiBSUFMwIGJ1c3ksIGluIFBDSSBjbG9ja3MuICovCiAKLS8vIFByaW1hcnkgU3RhdHVzIFJlZ2lzdGVyIChQU1IpIGNvbnN0YW50cy4KLSNkZWZpbmUgUFNSX0RFQklfRQkJMHgwMDA0MDAwMAkvLyBERUJJIGV2ZW50IGZsYWcuCi0jZGVmaW5lIFBTUl9ERUJJX1MJCTB4MDAwODAwMDAJLy8gREVCSSBzdGF0dXMgZmxhZy4KLSNkZWZpbmUgUFNSX0EyX0lOCQkweDAwMDA4MDAwCS8vIEF1ZGlvIG91dHB1dCBETUEyIHByb3RlY3Rpb24gYWRkcmVzcyByZWFjaGVkLgotI2RlZmluZSBQU1JfQUZPVQkJMHgwMDAwMDgwMAkvLyBBdWRpbyBGSUZPIHVuZGVyL292ZXJmbG93IGRldGVjdGVkLgotI2RlZmluZSBQU1JfR1BJTzIJCTB4MDAwMDAwMjAJLy8gR1BJTzIgaW5wdXQgcGluOiAwPUFkY0J1c3ksIDE9QWRjSWRsZS4KLSNkZWZpbmUgUFNSX0VDMFMJCTB4MDAwMDAwMDEJLy8gRXZlbnQgY291bnRlciAwIHRocmVzaG9sZCByZWFjaGVkLgorLyogIEdQSU8gY29uc3RhbnRzLiAqLworI2RlZmluZSBHUElPX0JBU0UJCTB4MTAwMDQwMDAJLyogIEdQSU8gMCwyLDMgPSBpbnB1dHMsIEdQSU8zID0gSVJROyBHUElPMSA9IG91dC4gKi8KKyNkZWZpbmUgR1BJTzFfTE8JCTB4MDAwMDAwMDAJLyogIEdQSU8xIHNldCB0byBMT1cuICovCisjZGVmaW5lIEdQSU8xX0hJCQkweDAwMDAxMDAwCS8qICBHUElPMSBzZXQgdG8gSElHSC4gKi8KIAotLy8gU2Vjb25kYXJ5IFN0YXR1cyBSZWdpc3RlciAoU1NSKSBjb25zdGFudHMuCi0jZGVmaW5lIFNTUl9BRjJfT1VUCQkweDAwMDAwMjAwCS8vIEF1ZGlvIDIgb3V0cHV0IEZJRk8gdW5kZXIvb3ZlcmZsb3cgZGV0ZWN0ZWQuCisvKiAgUHJpbWFyeSBTdGF0dXMgUmVnaXN0ZXIgKFBTUikgY29uc3RhbnRzLiAqLworI2RlZmluZSBQU1JfREVCSV9FCQkweDAwMDQwMDAwCS8qICBERUJJIGV2ZW50IGZsYWcuICovCisjZGVmaW5lIFBTUl9ERUJJX1MJCTB4MDAwODAwMDAJLyogIERFQkkgc3RhdHVzIGZsYWcuICovCisjZGVmaW5lIFBTUl9BMl9JTgkJMHgwMDAwODAwMAkvKiAgQXVkaW8gb3V0cHV0IERNQTIgcHJvdGVjdGlvbiBhZGRyZXNzIHJlYWNoZWQuICovCisjZGVmaW5lIFBTUl9BRk9VCQkweDAwMDAwODAwCS8qICBBdWRpbyBGSUZPIHVuZGVyL292ZXJmbG93IGRldGVjdGVkLiAqLworI2RlZmluZSBQU1JfR1BJTzIJCTB4MDAwMDAwMjAJLyogIEdQSU8yIGlucHV0IHBpbjogMD1BZGNCdXN5LCAxPUFkY0lkbGUuICovCisjZGVmaW5lIFBTUl9FQzBTCQkweDAwMDAwMDAxCS8qICBFdmVudCBjb3VudGVyIDAgdGhyZXNob2xkIHJlYWNoZWQuICovCiAKLS8vIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDEgKE1DMSkgY29uc3RhbnRzLgotI2RlZmluZSBNQzFfU09GVF9SRVNFVAkJMHg4MDAwMDAwMAkvLyBJbnZva2UgNzE0NiBzb2Z0IHJlc2V0LgotI2RlZmluZSBNQzFfU0hVVERPV04JCTB4M0ZGRjAwMDAJLy8gU2h1dCBkb3duIGFsbCBNQzEtY29udHJvbGxlZCBlbmFibGVzLgorLyogIFNlY29uZGFyeSBTdGF0dXMgUmVnaXN0ZXIgKFNTUikgY29uc3RhbnRzLiAqLworI2RlZmluZSBTU1JfQUYyX09VVAkJMHgwMDAwMDIwMAkvKiAgQXVkaW8gMiBvdXRwdXQgRklGTyB1bmRlci9vdmVyZmxvdyBkZXRlY3RlZC4gKi8KIAotI2RlZmluZSBNQzFfRVJQUzEJCTB4MjAwMAkvLyBlbmFiL2Rpc2FibGUgUlBTIHRhc2sgMS4KLSNkZWZpbmUgTUMxX0VSUFMwCQkweDEwMDAJLy8gZW5hYi9kaXNhYmxlIFJQUyB0YXNrIDAuCi0jZGVmaW5lIE1DMV9ERUJJCQkweDA4MDAJLy8gZW5hYi9kaXNhYmxlIERFQkkgcGlucy4KLSNkZWZpbmUgTUMxX0FVRElPCQkweDAyMDAJLy8gZW5hYi9kaXNhYmxlIGF1ZGlvIHBvcnQgcGlucy4KLSNkZWZpbmUgTUMxX0kyQwkJCTB4MDEwMAkvLyBlbmFiL2Rpc2FibGUgSTJDIGludGVyZmFjZS4KLSNkZWZpbmUgTUMxX0EyT1VUCQkweDAwMDgJLy8gZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEEyIG91dC4KLSNkZWZpbmUgTUMxX0EySU4JCTB4MDAwNAkvLyBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTIgaW4uCi0jZGVmaW5lIE1DMV9BMUlOCQkweDAwMDEJLy8gZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEExIGluLgorLyogIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDEgKE1DMSkgY29uc3RhbnRzLiAqLworI2RlZmluZSBNQzFfU09GVF9SRVNFVAkJMHg4MDAwMDAwMAkvKiAgSW52b2tlIDcxNDYgc29mdCByZXNldC4gKi8KKyNkZWZpbmUgTUMxX1NIVVRET1dOCQkweDNGRkYwMDAwCS8qICBTaHV0IGRvd24gYWxsIE1DMS1jb250cm9sbGVkIGVuYWJsZXMuICovCiAKLS8vIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDIgKE1DMikgY29uc3RhbnRzLgotI2RlZmluZSBNQzJfVVBMRF9ERUJJcQkJMHgwMDAyMDAwMgkvLyBVcGxvYWQgREVCSSByZWdpc3RlcnMuCi0jZGVmaW5lIE1DMl9VUExEX0lJQ3EJCTB4MDAwMTAwMDEJLy8gVXBsb2FkIEkyQyByZWdpc3RlcnMuCi0jZGVmaW5lIE1DMl9SUFNTSUcyX09OcQkJMHgyMDAwMjAwMAkvLyBBc3NlcnQgUlBTX1NJRzIuCi0jZGVmaW5lIE1DMl9SUFNTSUcxX09OcQkJMHgxMDAwMTAwMAkvLyBBc3NlcnQgUlBTX1NJRzEuCi0jZGVmaW5lIE1DMl9SUFNTSUcwX09OcQkJMHgwODAwMDgwMAkvLyBBc3NlcnQgUlBTX1NJRzAuCi0jZGVmaW5lIE1DMl9VUExEX0RFQklfTUFTS3EJMHgwMDAwMDAwMgkvLyBVcGxvYWQgREVCSSBtYXNrLgotI2RlZmluZSBNQzJfVVBMRF9JSUNfTUFTS3EJMHgwMDAwMDAwMQkvLyBVcGxvYWQgSTJDIG1hc2suCi0jZGVmaW5lIE1DMl9SUFNTSUcyX01BU0txCTB4MDAwMDIwMDAJLy8gUlBTX1NJRzIgYml0IG1hc2suCi0jZGVmaW5lIE1DMl9SUFNTSUcxX01BU0txCTB4MDAwMDEwMDAJLy8gUlBTX1NJRzEgYml0IG1hc2suCi0jZGVmaW5lIE1DMl9SUFNTSUcwX01BU0txCTB4MDAwMDA4MDAJLy8gUlBTX1NJRzAgYml0IG1hc2suCisjZGVmaW5lIE1DMV9FUlBTMQkJMHgyMDAwCS8qICBlbmFiL2Rpc2FibGUgUlBTIHRhc2sgMS4gKi8KKyNkZWZpbmUgTUMxX0VSUFMwCQkweDEwMDAJLyogIGVuYWIvZGlzYWJsZSBSUFMgdGFzayAwLiAqLworI2RlZmluZSBNQzFfREVCSQkJMHgwODAwCS8qICBlbmFiL2Rpc2FibGUgREVCSSBwaW5zLiAqLworI2RlZmluZSBNQzFfQVVESU8JCTB4MDIwMAkvKiAgZW5hYi9kaXNhYmxlIGF1ZGlvIHBvcnQgcGlucy4gKi8KKyNkZWZpbmUgTUMxX0kyQwkJCTB4MDEwMAkvKiAgZW5hYi9kaXNhYmxlIEkyQyBpbnRlcmZhY2UuICovCisjZGVmaW5lIE1DMV9BMk9VVAkJMHgwMDA4CS8qICBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTIgb3V0LiAqLworI2RlZmluZSBNQzFfQTJJTgkJMHgwMDA0CS8qICBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTIgaW4uICovCisjZGVmaW5lIE1DMV9BMUlOCQkweDAwMDEJLyogIGVuYWIvZGlzYWJsZSB0cmFuc2ZlciBvbiBBMSBpbi4gKi8KKworLyogIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDIgKE1DMikgY29uc3RhbnRzLiAqLworI2RlZmluZSBNQzJfVVBMRF9ERUJJcQkJMHgwMDAyMDAwMgkvKiAgVXBsb2FkIERFQkkgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBNQzJfVVBMRF9JSUNxCQkweDAwMDEwMDAxCS8qICBVcGxvYWQgSTJDIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzJfT05xCQkweDIwMDAyMDAwCS8qICBBc3NlcnQgUlBTX1NJRzIuICovCisjZGVmaW5lIE1DMl9SUFNTSUcxX09OcQkJMHgxMDAwMTAwMAkvKiAgQXNzZXJ0IFJQU19TSUcxLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMF9PTnEJCTB4MDgwMDA4MDAJLyogIEFzc2VydCBSUFNfU0lHMC4gKi8KKyNkZWZpbmUgTUMyX1VQTERfREVCSV9NQVNLcQkweDAwMDAwMDAyCS8qICBVcGxvYWQgREVCSSBtYXNrLiAqLworI2RlZmluZSBNQzJfVVBMRF9JSUNfTUFTS3EJMHgwMDAwMDAwMQkvKiAgVXBsb2FkIEkyQyBtYXNrLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMl9NQVNLcQkweDAwMDAyMDAwCS8qICBSUFNfU0lHMiBiaXQgbWFzay4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzFfTUFTS3EJMHgwMDAwMTAwMAkvKiAgUlBTX1NJRzEgYml0IG1hc2suICovCisjZGVmaW5lIE1DMl9SUFNTSUcwX01BU0txCTB4MDAwMDA4MDAJLyogIFJQU19TSUcwIGJpdCBtYXNrLiAqLwogCiAjZGVmaW5lIE1DMl9ERUxBWVRSSUdfNFVTcQlNQzJfUlBTU0lHMV9PTgogI2RlZmluZSBNQzJfREVMQVlCVVNZXzRVU3EJTUMyX1JQU1NJRzFfTUFTSwpAQCAtMjM2LDQ2OSArMjI1LDQyNSBAQAogI2RlZmluZQlNQzJfREVMQVlUUklHXzZVU3EJTUMyX1JQU1NJRzJfT04KICNkZWZpbmUgTUMyX0RFTEFZQlVTWV82VVNxCU1DMl9SUFNTSUcyX01BU0sKIAotI2RlZmluZSBNQzJfVVBMRF9ERUJJCQkweDAwMDIJLy8gVXBsb2FkIERFQkkuCi0jZGVmaW5lIE1DMl9VUExEX0lJQwkJMHgwMDAxCS8vIFVwbG9hZCBJMkMuCi0jZGVmaW5lIE1DMl9SUFNTSUcyCQkweDIwMDAJLy8gUlBTIHNpZ25hbCAyIChub3QgdXNlZCkuCi0jZGVmaW5lIE1DMl9SUFNTSUcxCQkweDEwMDAJLy8gUlBTIHNpZ25hbCAxIChEQUMgUlBTIGJ1c3kpLgotI2RlZmluZSBNQzJfUlBTU0lHMAkJMHgwODAwCS8vIFJQUyBzaWduYWwgMCAoQURDIFJQUyBidXN5KS4KKyNkZWZpbmUgTUMyX1VQTERfREVCSQkJMHgwMDAyCS8qICBVcGxvYWQgREVCSS4gKi8KKyNkZWZpbmUgTUMyX1VQTERfSUlDCQkweDAwMDEJLyogIFVwbG9hZCBJMkMuICovCisjZGVmaW5lIE1DMl9SUFNTSUcyCQkweDIwMDAJLyogIFJQUyBzaWduYWwgMiAobm90IHVzZWQpLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMQkJMHgxMDAwCS8qICBSUFMgc2lnbmFsIDEgKERBQyBSUFMgYnVzeSkuICovCisjZGVmaW5lIE1DMl9SUFNTSUcwCQkweDA4MDAJLyogIFJQUyBzaWduYWwgMCAoQURDIFJQUyBidXN5KS4gKi8KIAotI2RlZmluZSBNQzJfQURDX1JQUwkJTUMyX1JQU1NJRzAJLy8gQURDIFJQUyBidXN5LgotI2RlZmluZSBNQzJfREFDX1JQUwkJTUMyX1JQU1NJRzEJLy8gREFDIFJQUyBidXN5LgorI2RlZmluZSBNQzJfQURDX1JQUwkJTUMyX1JQU1NJRzAJLyogIEFEQyBSUFMgYnVzeS4gKi8KKyNkZWZpbmUgTUMyX0RBQ19SUFMJCU1DMl9SUFNTSUcxCS8qICBEQUMgUlBTIGJ1c3kuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy9vbGRpZXMvLy8vLy8vLy8vLwotI2RlZmluZSBNQzJfVVBMRF9ERUJJUQkJMHgwMDAyMDAwMgkvLyBVcGxvYWQgREVCSSByZWdpc3RlcnMuCi0jZGVmaW5lIE1DMl9VUExEX0lJQ1EJCTB4MDAwMTAwMDEJLy8gVXBsb2FkIEkyQyByZWdpc3RlcnMuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKiAqKioqKiBvbGRpZXMgKioqKiogKi8KKyNkZWZpbmUgTUMyX1VQTERfREVCSVEJCTB4MDAwMjAwMDIJLyogIFVwbG9hZCBERUJJIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgTUMyX1VQTERfSUlDUQkJMHgwMDAxMDAwMQkvKiAgVXBsb2FkIEkyQyByZWdpc3RlcnMuICovCiAKLS8vIFBDSSBCVVMgKFNBQTcxNDYpIFJFR0lTVEVSIEFERFJFU1MgT0ZGU0VUUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSNkZWZpbmUgUF9QQ0lfQlRfQQkJMHgwMDRDCS8vIEF1ZGlvIERNQQotCQkJCQkJLy8gYnVyc3QvdGhyZXNob2xkCi0JCQkJCQkvLyBjb250cm9sLgotI2RlZmluZSBQX0RFQklDRkcgICAgICAgICAgICAgICAweDAwN0MJLy8gREVCSSBjb25maWd1cmF0aW9uLgotI2RlZmluZSBQX0RFQklDTUQgICAgICAgICAgICAgICAweDAwODAJLy8gREVCSSBjb21tYW5kLgotI2RlZmluZSBQX0RFQklQQUdFICAgICAgICAgICAgICAweDAwODQJLy8gREVCSSBwYWdlLgotI2RlZmluZSBQX0RFQklBRCAgICAgICAgICAgICAgICAweDAwODgJLy8gREVCSSB0YXJnZXQgYWRkcmVzcy4KLSNkZWZpbmUgUF9JMkNDVFJMICAgICAgICAgICAgICAgMHgwMDhDCS8vIEkyQyBjb250cm9sLgotI2RlZmluZSBQX0kyQ1NUQVQgICAgICAgICAgICAgICAweDAwOTAJLy8gSTJDIHN0YXR1cy4KLSNkZWZpbmUgUF9CQVNFQTJfSU4JCTB4MDBBQwkvLyBBdWRpbyBpbnB1dCAyIGJhc2UKLQkJCQkJCS8vIHBoeXNpY2FsIERNQWJ1ZgotCQkJCQkJLy8gYWRkcmVzcy4KLSNkZWZpbmUgUF9QUk9UQTJfSU4JCTB4MDBCMAkvLyBBdWRpbyBpbnB1dCAyCi0JCQkJCQkvLyBwaHlzaWNhbCBETUFidWYKLQkJCQkJCS8vIHByb3RlY3Rpb24gYWRkcmVzcy4KLSNkZWZpbmUgUF9QQUdFQTJfSU4JCTB4MDBCNAkvLyBBdWRpbyBpbnB1dCAyCi0JCQkJCQkvLyBwYWdpbmcgYXR0cmlidXRlcy4KLSNkZWZpbmUgUF9CQVNFQTJfT1VUCQkweDAwQjgJLy8gQXVkaW8gb3V0cHV0IDIgYmFzZQotCQkJCQkJLy8gcGh5c2ljYWwgRE1BYnVmCi0JCQkJCQkvLyBhZGRyZXNzLgotI2RlZmluZSBQX1BST1RBMl9PVVQJCTB4MDBCQwkvLyBBdWRpbyBvdXRwdXQgMgotCQkJCQkJLy8gcGh5c2ljYWwgRE1BYnVmCi0JCQkJCQkvLyBwcm90ZWN0aW9uIGFkZHJlc3MuCi0jZGVmaW5lIFBfUEFHRUEyX09VVAkJMHgwMEMwCS8vIEF1ZGlvIG91dHB1dCAyCi0JCQkJCQkvLyBwYWdpbmcgYXR0cmlidXRlcy4KLSNkZWZpbmUgUF9SUFNQQUdFMCAgICAgICAgICAgICAgMHgwMEM0CS8vIFJQUzAgcGFnZS4KLSNkZWZpbmUgUF9SUFNQQUdFMSAgICAgICAgICAgICAgMHgwMEM4CS8vIFJQUzEgcGFnZS4KLSNkZWZpbmUgUF9SUFMwX1RPVVQJCTB4MDBENAkvLyBSUFMwIHRpbWUtb3V0LgotI2RlZmluZSBQX1JQUzFfVE9VVAkJMHgwMEQ4CS8vIFJQUzEgdGltZS1vdXQuCi0jZGVmaW5lIFBfSUVSICAgICAgICAgICAgICAgICAgIDB4MDBEQwkvLyBJbnRlcnJ1cHQgZW5hYmxlLgotI2RlZmluZSBQX0dQSU8gICAgICAgICAgICAgICAgICAweDAwRTAJLy8gR2VuZXJhbC1wdXJwb3NlIEkvTy4KLSNkZWZpbmUgUF9FQzFTU1IJCTB4MDBFNAkvLyBFdmVudCBjb3VudGVyIHNldCAxCi0JCQkJCQkvLyBzb3VyY2Ugc2VsZWN0LgotI2RlZmluZSBQX0VDVDFSCQkJMHgwMEVDCS8vIEV2ZW50IGNvdW50ZXIKLQkJCQkJCS8vIHRocmVzaG9sZCBzZXQgMS4KLSNkZWZpbmUgUF9BQ09OMSAgICAgICAgICAgICAgICAgMHgwMEY0CS8vIEF1ZGlvIGNvbnRyb2wgMS4KLSNkZWZpbmUgUF9BQ09OMiAgICAgICAgICAgICAgICAgMHgwMEY4CS8vIEF1ZGlvIGNvbnRyb2wgMi4KLSNkZWZpbmUgUF9NQzEgICAgICAgICAgICAgICAgICAgMHgwMEZDCS8vIE1hc3RlciBjb250cm9sIDEuCi0jZGVmaW5lIFBfTUMyICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvLyBNYXN0ZXIgY29udHJvbCAyLgotI2RlZmluZSBQX1JQU0FERFIwICAgICAgICAgICAgICAweDAxMDQJLy8gUlBTMCBpbnN0cnVjdGlvbiBwb2ludGVyLgotI2RlZmluZSBQX1JQU0FERFIxICAgICAgICAgICAgICAweDAxMDgJLy8gUlBTMSBpbnN0cnVjdGlvbiBwb2ludGVyLgotI2RlZmluZSBQX0lTUiAgICAgICAgICAgICAgICAgICAweDAxMEMJLy8gSW50ZXJydXB0IHN0YXR1cy4KLSNkZWZpbmUgUF9QU1IgICAgICAgICAgICAgICAgICAgMHgwMTEwCS8vIFByaW1hcnkgc3RhdHVzLgotI2RlZmluZSBQX1NTUiAgICAgICAgICAgICAgICAgICAweDAxMTQJLy8gU2Vjb25kYXJ5IHN0YXR1cy4KLSNkZWZpbmUgUF9FQzFSCQkJMHgwMTE4CS8vIEV2ZW50IGNvdW50ZXIgc2V0IDEuCi0jZGVmaW5lIFBfQURQNAkJCTB4MDEzOAkvLyBMb2dpY2FsIGF1ZGlvIERNQQotCQkJCQkJLy8gcG9pbnRlciBvZiBhdWRpbwotCQkJCQkJLy8gaW5wdXQgRklGTyBBMl9JTi4KLSNkZWZpbmUgUF9GQl9CVUZGRVIxICAgICAgICAgICAgMHgwMTQ0CS8vIEF1ZGlvIGZlZWRiYWNrIGJ1ZmZlciAxLgotI2RlZmluZSBQX0ZCX0JVRkZFUjIgICAgICAgICAgICAweDAxNDgJLy8gQXVkaW8gZmVlZGJhY2sgYnVmZmVyIDIuCi0jZGVmaW5lIFBfVFNMMSAgICAgICAgICAgICAgICAgIDB4MDE4MAkvLyBBdWRpbyB0aW1lIHNsb3QgbGlzdCAxLgotI2RlZmluZSBQX1RTTDIgICAgICAgICAgICAgICAgICAweDAxQzAJLy8gQXVkaW8gdGltZSBzbG90IGxpc3QgMi4KKy8qICBQQ0kgQlVTIChTQUE3MTQ2KSBSRUdJU1RFUiBBRERSRVNTIE9GRlNFVFMgKi8KKyNkZWZpbmUgUF9QQ0lfQlRfQQkJMHgwMDRDCS8qIEF1ZGlvIERNQSBidXJzdC90aHJlc2hvbGQgY29udHJvbC4gKi8KKyNkZWZpbmUgUF9ERUJJQ0ZHICAgICAgICAgICAgICAgMHgwMDdDCS8qIERFQkkgY29uZmlndXJhdGlvbi4gKi8KKyNkZWZpbmUgUF9ERUJJQ01EICAgICAgICAgICAgICAgMHgwMDgwCS8qIERFQkkgY29tbWFuZC4gKi8KKyNkZWZpbmUgUF9ERUJJUEFHRSAgICAgICAgICAgICAgMHgwMDg0CS8qIERFQkkgcGFnZS4gKi8KKyNkZWZpbmUgUF9ERUJJQUQgICAgICAgICAgICAgICAgMHgwMDg4CS8qIERFQkkgdGFyZ2V0IGFkZHJlc3MuICovCisjZGVmaW5lIFBfSTJDQ1RSTCAgICAgICAgICAgICAgIDB4MDA4QwkvKiBJMkMgY29udHJvbC4gKi8KKyNkZWZpbmUgUF9JMkNTVEFUICAgICAgICAgICAgICAgMHgwMDkwCS8qIEkyQyBzdGF0dXMuICovCisjZGVmaW5lIFBfQkFTRUEyX0lOCQkweDAwQUMJLyogQXVkaW8gaW5wdXQgMiBiYXNlIHBoeXNpY2FsIERNQWJ1ZgorCQkJCQkgKiBhZGRyZXNzLiAqLworI2RlZmluZSBQX1BST1RBMl9JTgkJMHgwMEIwCS8qIEF1ZGlvIGlucHV0IDIgcGh5c2ljYWwgRE1BYnVmCisJCQkJCSAqIHByb3RlY3Rpb24gYWRkcmVzcy4gKi8KKyNkZWZpbmUgUF9QQUdFQTJfSU4JCTB4MDBCNAkvKiBBdWRpbyBpbnB1dCAyIHBhZ2luZyBhdHRyaWJ1dGVzLiAqLworI2RlZmluZSBQX0JBU0VBMl9PVVQJCTB4MDBCOAkvKiBBdWRpbyBvdXRwdXQgMiBiYXNlIHBoeXNpY2FsIERNQWJ1ZgorCQkJCQkgKiBhZGRyZXNzLiAqLworI2RlZmluZSBQX1BST1RBMl9PVVQJCTB4MDBCQwkvKiBBdWRpbyBvdXRwdXQgMiBwaHlzaWNhbCBETUFidWYKKwkJCQkJICogcHJvdGVjdGlvbiBhZGRyZXNzLiAqLworI2RlZmluZSBQX1BBR0VBMl9PVVQJCTB4MDBDMAkvKiBBdWRpbyBvdXRwdXQgMiBwYWdpbmcgYXR0cmlidXRlcy4gKi8KKyNkZWZpbmUgUF9SUFNQQUdFMCAgICAgICAgICAgICAgMHgwMEM0CS8qIFJQUzAgcGFnZS4gKi8KKyNkZWZpbmUgUF9SUFNQQUdFMSAgICAgICAgICAgICAgMHgwMEM4CS8qIFJQUzEgcGFnZS4gKi8KKyNkZWZpbmUgUF9SUFMwX1RPVVQJCTB4MDBENAkvKiBSUFMwIHRpbWUtb3V0LiAqLworI2RlZmluZSBQX1JQUzFfVE9VVAkJMHgwMEQ4CS8qIFJQUzEgdGltZS1vdXQuICovCisjZGVmaW5lIFBfSUVSICAgICAgICAgICAgICAgICAgIDB4MDBEQwkvKiBJbnRlcnJ1cHQgZW5hYmxlLiAqLworI2RlZmluZSBQX0dQSU8gICAgICAgICAgICAgICAgICAweDAwRTAJLyogR2VuZXJhbC1wdXJwb3NlIEkvTy4gKi8KKyNkZWZpbmUgUF9FQzFTU1IJCTB4MDBFNAkvKiBFdmVudCBjb3VudGVyIHNldCAxIHNvdXJjZSBzZWxlY3QuICovCisjZGVmaW5lIFBfRUNUMVIJCQkweDAwRUMJLyogRXZlbnQgY291bnRlciB0aHJlc2hvbGQgc2V0IDEuICovCisjZGVmaW5lIFBfQUNPTjEgICAgICAgICAgICAgICAgIDB4MDBGNAkvKiBBdWRpbyBjb250cm9sIDEuICovCisjZGVmaW5lIFBfQUNPTjIgICAgICAgICAgICAgICAgIDB4MDBGOAkvKiBBdWRpbyBjb250cm9sIDIuICovCisjZGVmaW5lIFBfTUMxICAgICAgICAgICAgICAgICAgIDB4MDBGQwkvKiBNYXN0ZXIgY29udHJvbCAxLiAqLworI2RlZmluZSBQX01DMiAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogTWFzdGVyIGNvbnRyb2wgMi4gKi8KKyNkZWZpbmUgUF9SUFNBRERSMCAgICAgICAgICAgICAgMHgwMTA0CS8qIFJQUzAgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KKyNkZWZpbmUgUF9SUFNBRERSMSAgICAgICAgICAgICAgMHgwMTA4CS8qIFJQUzEgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KKyNkZWZpbmUgUF9JU1IgICAgICAgICAgICAgICAgICAgMHgwMTBDCS8qIEludGVycnVwdCBzdGF0dXMuICovCisjZGVmaW5lIFBfUFNSICAgICAgICAgICAgICAgICAgIDB4MDExMAkvKiBQcmltYXJ5IHN0YXR1cy4gKi8KKyNkZWZpbmUgUF9TU1IgICAgICAgICAgICAgICAgICAgMHgwMTE0CS8qIFNlY29uZGFyeSBzdGF0dXMuICovCisjZGVmaW5lIFBfRUMxUgkJCTB4MDExOAkvKiBFdmVudCBjb3VudGVyIHNldCAxLiAqLworI2RlZmluZSBQX0FEUDQJCQkweDAxMzgJLyogTG9naWNhbCBhdWRpbyBETUEgcG9pbnRlciBvZiBhdWRpbworCQkJCQkgKiBpbnB1dCBGSUZPIEEyX0lOLiAqLworI2RlZmluZSBQX0ZCX0JVRkZFUjEgICAgICAgICAgICAweDAxNDQJLyogQXVkaW8gZmVlZGJhY2sgYnVmZmVyIDEuICovCisjZGVmaW5lIFBfRkJfQlVGRkVSMiAgICAgICAgICAgIDB4MDE0OAkvKiBBdWRpbyBmZWVkYmFjayBidWZmZXIgMi4gKi8KKyNkZWZpbmUgUF9UU0wxICAgICAgICAgICAgICAgICAgMHgwMTgwCS8qIEF1ZGlvIHRpbWUgc2xvdCBsaXN0IDEuICovCisjZGVmaW5lIFBfVFNMMiAgICAgICAgICAgICAgICAgIDB4MDFDMAkvKiBBdWRpbyB0aW1lIHNsb3QgbGlzdCAyLiAqLwogCi0vLyBMT0NBTCBCVVMgKEdBVEUgQVJSQVkpIFJFR0lTVEVSIEFERFJFU1MgT0ZGU0VUUyAvLy8vLy8vLy8vLy8vLy8vLwotLy8gQW5hbG9nIEkvTyByZWdpc3RlcnM6Ci0jZGVmaW5lIExQX0RBQ1BPTAkJMHgwMDgyCS8vICBXcml0ZSBEQUMgcG9sYXJpdHkuCi0jZGVmaW5lIExQX0dTRUwJCQkweDAwODQJLy8gIFdyaXRlIEFEQyBnYWluLgotI2RlZmluZSBMUF9JU0VMCQkJMHgwMDg2CS8vICBXcml0ZSBBREMgY2hhbm5lbCBzZWxlY3QuCi0vLyBEaWdpdGFsIEkvTyAod3JpdGUgb25seSk6Ci0jZGVmaW5lIExQX1dSSU5UU0VMQQkJMHgwMDQyCS8vICBXcml0ZSBBIGludGVycnVwdCBlbmFibGUuCi0jZGVmaW5lIExQX1dSRURHU0VMQQkJMHgwMDQ0CS8vICBXcml0ZSBBIGVkZ2Ugc2VsZWN0aW9uLgotI2RlZmluZSBMUF9XUkNBUFNFTEEJCTB4MDA0NgkvLyAgV3JpdGUgQSBjYXB0dXJlIGVuYWJsZS4KLSNkZWZpbmUgTFBfV1JET1VUQQkJMHgwMDQ4CS8vICBXcml0ZSBBIGRpZ2l0YWwgb3V0cHV0LgotI2RlZmluZSBMUF9XUklOVFNFTEIJCTB4MDA1MgkvLyAgV3JpdGUgQiBpbnRlcnJ1cHQgZW5hYmxlLgotI2RlZmluZSBMUF9XUkVER1NFTEIJCTB4MDA1NAkvLyAgV3JpdGUgQiBlZGdlIHNlbGVjdGlvbi4KLSNkZWZpbmUgTFBfV1JDQVBTRUxCCQkweDAwNTYJLy8gIFdyaXRlIEIgY2FwdHVyZSBlbmFibGUuCi0jZGVmaW5lIExQX1dSRE9VVEIJCTB4MDA1OAkvLyAgV3JpdGUgQiBkaWdpdGFsIG91dHB1dC4KLSNkZWZpbmUgTFBfV1JJTlRTRUxDCQkweDAwNjIJLy8gIFdyaXRlIEMgaW50ZXJydXB0IGVuYWJsZS4KLSNkZWZpbmUgTFBfV1JFREdTRUxDCQkweDAwNjQJLy8gIFdyaXRlIEMgZWRnZSBzZWxlY3Rpb24uCi0jZGVmaW5lIExQX1dSQ0FQU0VMQwkJMHgwMDY2CS8vICBXcml0ZSBDIGNhcHR1cmUgZW5hYmxlLgotI2RlZmluZSBMUF9XUkRPVVRDCQkweDAwNjgJLy8gIFdyaXRlIEMgZGlnaXRhbCBvdXRwdXQuCisvKiAgTE9DQUwgQlVTIChHQVRFIEFSUkFZKSBSRUdJU1RFUiBBRERSRVNTIE9GRlNFVFMgKi8KKy8qICBBbmFsb2cgSS9PIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgTFBfREFDUE9MCQkweDAwODIJLyogICBXcml0ZSBEQUMgcG9sYXJpdHkuICovCisjZGVmaW5lIExQX0dTRUwJCQkweDAwODQJLyogICBXcml0ZSBBREMgZ2Fpbi4gKi8KKyNkZWZpbmUgTFBfSVNFTAkJCTB4MDA4NgkvKiAgIFdyaXRlIEFEQyBjaGFubmVsIHNlbGVjdC4gKi8KKy8qICBEaWdpdGFsIEkvTyAod3JpdGUgb25seSk6ICovCisjZGVmaW5lIExQX1dSSU5UU0VMQQkJMHgwMDQyCS8qICAgV3JpdGUgQSBpbnRlcnJ1cHQgZW5hYmxlLiAqLworI2RlZmluZSBMUF9XUkVER1NFTEEJCTB4MDA0NAkvKiAgIFdyaXRlIEEgZWRnZSBzZWxlY3Rpb24uICovCisjZGVmaW5lIExQX1dSQ0FQU0VMQQkJMHgwMDQ2CS8qICAgV3JpdGUgQSBjYXB0dXJlIGVuYWJsZS4gKi8KKyNkZWZpbmUgTFBfV1JET1VUQQkJMHgwMDQ4CS8qICAgV3JpdGUgQSBkaWdpdGFsIG91dHB1dC4gKi8KKyNkZWZpbmUgTFBfV1JJTlRTRUxCCQkweDAwNTIJLyogICBXcml0ZSBCIGludGVycnVwdCBlbmFibGUuICovCisjZGVmaW5lIExQX1dSRURHU0VMQgkJMHgwMDU0CS8qICAgV3JpdGUgQiBlZGdlIHNlbGVjdGlvbi4gKi8KKyNkZWZpbmUgTFBfV1JDQVBTRUxCCQkweDAwNTYJLyogICBXcml0ZSBCIGNhcHR1cmUgZW5hYmxlLiAqLworI2RlZmluZSBMUF9XUkRPVVRCCQkweDAwNTgJLyogICBXcml0ZSBCIGRpZ2l0YWwgb3V0cHV0LiAqLworI2RlZmluZSBMUF9XUklOVFNFTEMJCTB4MDA2MgkvKiAgIFdyaXRlIEMgaW50ZXJydXB0IGVuYWJsZS4gKi8KKyNkZWZpbmUgTFBfV1JFREdTRUxDCQkweDAwNjQJLyogICBXcml0ZSBDIGVkZ2Ugc2VsZWN0aW9uLiAqLworI2RlZmluZSBMUF9XUkNBUFNFTEMJCTB4MDA2NgkvKiAgIFdyaXRlIEMgY2FwdHVyZSBlbmFibGUuICovCisjZGVmaW5lIExQX1dSRE9VVEMJCTB4MDA2OAkvKiAgIFdyaXRlIEMgZGlnaXRhbCBvdXRwdXQuICovCiAKLS8vIERpZ2l0YWwgSS9PIChyZWFkIG9ubHkpOgotI2RlZmluZSBMUF9SRERJTkEJCTB4MDA0MAkvLyAgUmVhZCBkaWdpdGFsIGlucHV0LgotI2RlZmluZSBMUF9SRENBUEZMR0EJCTB4MDA0OAkvLyAgUmVhZCBlZGdlcyBjYXB0dXJlZC4KLSNkZWZpbmUgTFBfUkRJTlRTRUxBCQkweDAwNEEJLy8gIFJlYWQgaW50ZXJydXB0Ci0JCQkJCQkvLyAgZW5hYmxlIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SREVER1NFTEEJCTB4MDA0QwkvLyAgUmVhZCBlZGdlCi0JCQkJCQkvLyAgc2VsZWN0aW9uCi0JCQkJCQkvLyAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JEQ0FQU0VMQQkJMHgwMDRFCS8vICBSZWFkIGNhcHR1cmUKLQkJCQkJCS8vICBlbmFibGUgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JERElOQgkJMHgwMDUwCS8vICBSZWFkIGRpZ2l0YWwgaW5wdXQuCi0jZGVmaW5lIExQX1JEQ0FQRkxHQgkJMHgwMDU4CS8vICBSZWFkIGVkZ2VzIGNhcHR1cmVkLgotI2RlZmluZSBMUF9SRElOVFNFTEIJCTB4MDA1QQkvLyAgUmVhZCBpbnRlcnJ1cHQKLQkJCQkJCS8vICBlbmFibGUgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JERURHU0VMQgkJMHgwMDVDCS8vICBSZWFkIGVkZ2UKLQkJCQkJCS8vICBzZWxlY3Rpb24KLQkJCQkJCS8vICByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRDQVBTRUxCCQkweDAwNUUJLy8gIFJlYWQgY2FwdHVyZQotCQkJCQkJLy8gIGVuYWJsZSByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRESU5DCQkweDAwNjAJLy8gIFJlYWQgZGlnaXRhbCBpbnB1dC4KLSNkZWZpbmUgTFBfUkRDQVBGTEdDCQkweDAwNjgJLy8gIFJlYWQgZWRnZXMgY2FwdHVyZWQuCi0jZGVmaW5lIExQX1JESU5UU0VMQwkJMHgwMDZBCS8vICBSZWFkIGludGVycnVwdAotCQkJCQkJLy8gIGVuYWJsZSByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRFREdTRUxDCQkweDAwNkMJLy8gIFJlYWQgZWRnZQotCQkJCQkJLy8gIHNlbGVjdGlvbgotCQkJCQkJLy8gIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SRENBUFNFTEMJCTB4MDA2RQkvLyAgUmVhZCBjYXB0dXJlCi0JCQkJCQkvLyAgZW5hYmxlIHJlZ2lzdGVyLgotLy8gQ291bnRlciBSZWdpc3RlcnMgKHJlYWQvd3JpdGUpOgotI2RlZmluZSBMUF9DUjBBCQkJMHgwMDAwCS8vICAwQSBzZXR1cCByZWdpc3Rlci4KLSNkZWZpbmUgTFBfQ1IwQgkJCTB4MDAwMgkvLyAgMEIgc2V0dXAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX0NSMUEJCQkweDAwMDQJLy8gIDFBIHNldHVwIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9DUjFCCQkJMHgwMDA2CS8vICAxQiBzZXR1cCByZWdpc3Rlci4KLSNkZWZpbmUgTFBfQ1IyQQkJCTB4MDAwOAkvLyAgMkEgc2V0dXAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX0NSMkIJCQkweDAwMEEJLy8gIDJCIHNldHVwIHJlZ2lzdGVyLgotLy8gQ291bnRlciBQcmVMb2FkICh3cml0ZSkgYW5kIExhdGNoIChyZWFkKSBSZWdpc3RlcnM6Ci0jZGVmaW5lCUxQX0NOVFIwQUxTVwkJMHgwMDBDCS8vICAwQSBsc3cuCi0jZGVmaW5lCUxQX0NOVFIwQU1TVwkJMHgwMDBFCS8vICAwQSBtc3cuCi0jZGVmaW5lCUxQX0NOVFIwQkxTVwkJMHgwMDEwCS8vICAwQiBsc3cuCi0jZGVmaW5lCUxQX0NOVFIwQk1TVwkJMHgwMDEyCS8vICAwQiBtc3cuCi0jZGVmaW5lCUxQX0NOVFIxQUxTVwkJMHgwMDE0CS8vICAxQSBsc3cuCi0jZGVmaW5lCUxQX0NOVFIxQU1TVwkJMHgwMDE2CS8vICAxQSBtc3cuCi0jZGVmaW5lCUxQX0NOVFIxQkxTVwkJMHgwMDE4CS8vICAxQiBsc3cuCi0jZGVmaW5lCUxQX0NOVFIxQk1TVwkJMHgwMDFBCS8vICAxQiBtc3cuCi0jZGVmaW5lCUxQX0NOVFIyQUxTVwkJMHgwMDFDCS8vICAyQSBsc3cuCi0jZGVmaW5lCUxQX0NOVFIyQU1TVwkJMHgwMDFFCS8vICAyQSBtc3cuCi0jZGVmaW5lCUxQX0NOVFIyQkxTVwkJMHgwMDIwCS8vICAyQiBsc3cuCi0jZGVmaW5lCUxQX0NOVFIyQk1TVwkJMHgwMDIyCS8vICAyQiBtc3cuCi0vLyBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVycyAocmVhZC93cml0ZSk6Ci0jZGVmaW5lIExQX01JU0MxCQkweDAwODgJLy8gIFJlYWQvd3JpdGUgTWlzYzEuCi0jZGVmaW5lIExQX1dSTUlTQzIJCTB4MDA5MAkvLyAgV3JpdGUgTWlzYzIuCi0jZGVmaW5lIExQX1JETUlTQzIJCTB4MDA4MgkvLyAgUmVhZCBNaXNjMi4KKy8qICBEaWdpdGFsIEkvTyAocmVhZCBvbmx5KTogKi8KKyNkZWZpbmUgTFBfUkRESU5BCQkweDAwNDAJLyogICBSZWFkIGRpZ2l0YWwgaW5wdXQuICovCisjZGVmaW5lIExQX1JEQ0FQRkxHQQkJMHgwMDQ4CS8qICAgUmVhZCBlZGdlcyBjYXB0dXJlZC4gKi8KKyNkZWZpbmUgTFBfUkRJTlRTRUxBCQkweDAwNEEJLyogICBSZWFkIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JERURHU0VMQQkJMHgwMDRDCS8qICAgUmVhZCBlZGdlIHNlbGVjdGlvbiByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRDQVBTRUxBCQkweDAwNEUJLyogICBSZWFkIGNhcHR1cmUgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SRERJTkIJCTB4MDA1MAkvKiAgIFJlYWQgZGlnaXRhbCBpbnB1dC4gKi8KKyNkZWZpbmUgTFBfUkRDQVBGTEdCCQkweDAwNTgJLyogICBSZWFkIGVkZ2VzIGNhcHR1cmVkLiAqLworI2RlZmluZSBMUF9SRElOVFNFTEIJCTB4MDA1QQkvKiAgIFJlYWQgaW50ZXJydXB0IGVuYWJsZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRFREdTRUxCCQkweDAwNUMJLyogICBSZWFkIGVkZ2Ugc2VsZWN0aW9uIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SRENBUFNFTEIJCTB4MDA1RQkvKiAgIFJlYWQgY2FwdHVyZSBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JERElOQwkJMHgwMDYwCS8qICAgUmVhZCBkaWdpdGFsIGlucHV0LiAqLworI2RlZmluZSBMUF9SRENBUEZMR0MJCTB4MDA2OAkvKiAgIFJlYWQgZWRnZXMgY2FwdHVyZWQuICovCisjZGVmaW5lIExQX1JESU5UU0VMQwkJMHgwMDZBCS8qICAgUmVhZCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SREVER1NFTEMJCTB4MDA2QwkvKiAgIFJlYWQgZWRnZSBzZWxlY3Rpb24gcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JEQ0FQU0VMQwkJMHgwMDZFCS8qICAgUmVhZCBjYXB0dXJlIGVuYWJsZSByZWdpc3Rlci4gKi8KIAotLy8gQml0IG1hc2tzIGZvciBNSVNDMSByZWdpc3RlciB0aGF0IGFyZSB0aGUgc2FtZSBmb3IgcmVhZHMgYW5kIHdyaXRlcy4KLSNkZWZpbmUgTUlTQzFfV0VOQUJMRQkJMHg4MDAwCS8vIGVuYWIgd3JpdGVzIHRvCi0JCQkJCQkvLyBNSVNDMiAoZXhjZXB0IENsZWFyCi0JCQkJCQkvLyBXYXRjaGRvZyBiaXQpLgotI2RlZmluZSBNSVNDMV9XRElTQUJMRQkJMHgwMDAwCS8vIERpc2FibGUgd3JpdGVzIHRvIE1JU0MyLgotI2RlZmluZSBNSVNDMV9FRENBUAkJMHgxMDAwCS8vIGVuYWIgZWRnZSBjYXB0dXJlCi0JCQkJCQkvLyBvbiBESU8gY2hhbnMKLQkJCQkJCS8vIHNwZWNpZmllZCBieQotCQkJCQkJLy8gTFBfV1JDQVBTRUx4LgotI2RlZmluZSBNSVNDMV9OT0VEQ0FQCQkweDAwMDAJLy8gRGlzYWJsZSBlZGdlCi0JCQkJCQkvLyBjYXB0dXJlIG9uCi0JCQkJCQkvLyBzcGVjaWZpZWQgRElPCi0JCQkJCQkvLyBjaGFucy4KKy8qICBDb3VudGVyIFJlZ2lzdGVycyAocmVhZC93cml0ZSk6ICovCisjZGVmaW5lIExQX0NSMEEJCQkweDAwMDAJLyogICAwQSBzZXR1cCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfQ1IwQgkJCTB4MDAwMgkvKiAgIDBCIHNldHVwIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9DUjFBCQkJMHgwMDA0CS8qICAgMUEgc2V0dXAgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX0NSMUIJCQkweDAwMDYJLyogICAxQiBzZXR1cCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfQ1IyQQkJCTB4MDAwOAkvKiAgIDJBIHNldHVwIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9DUjJCCQkJMHgwMDBBCS8qICAgMkIgc2V0dXAgcmVnaXN0ZXIuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzEgcmVnaXN0ZXIgcmVhZHMuCi0jZGVmaW5lIFJETUlTQzFfV0RUSU1FT1VUCTB4NDAwMAkvLyBXYXRjaGRvZyB0aW1lciB0aW1lZCBvdXQuCisvKiAgQ291bnRlciBQcmVMb2FkICh3cml0ZSkgYW5kIExhdGNoIChyZWFkKSBSZWdpc3RlcnM6ICovCisjZGVmaW5lCUxQX0NOVFIwQUxTVwkJMHgwMDBDCS8qICAgMEEgbHN3LiAqLworI2RlZmluZQlMUF9DTlRSMEFNU1cJCTB4MDAwRQkvKiAgIDBBIG1zdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjBCTFNXCQkweDAwMTAJLyogICAwQiBsc3cuICovCisjZGVmaW5lCUxQX0NOVFIwQk1TVwkJMHgwMDEyCS8qICAgMEIgbXN3LiAqLworI2RlZmluZQlMUF9DTlRSMUFMU1cJCTB4MDAxNAkvKiAgIDFBIGxzdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjFBTVNXCQkweDAwMTYJLyogICAxQSBtc3cuICovCisjZGVmaW5lCUxQX0NOVFIxQkxTVwkJMHgwMDE4CS8qICAgMUIgbHN3LiAqLworI2RlZmluZQlMUF9DTlRSMUJNU1cJCTB4MDAxQQkvKiAgIDFCIG1zdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjJBTFNXCQkweDAwMUMJLyogICAyQSBsc3cuICovCisjZGVmaW5lCUxQX0NOVFIyQU1TVwkJMHgwMDFFCS8qICAgMkEgbXN3LiAqLworI2RlZmluZQlMUF9DTlRSMkJMU1cJCTB4MDAyMAkvKiAgIDJCIGxzdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjJCTVNXCQkweDAwMjIJLyogICAyQiBtc3cuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzIgcmVnaXN0ZXIgd3JpdGVzLgotI2RlZmluZSBXUk1JU0MyX1dEQ0xFQVIJCTB4ODAwMAkvLyBSZXNldCB3YXRjaGRvZwotCQkJCQkJLy8gdGltZXIgdG8gemVyby4KLSNkZWZpbmUgV1JNSVNDMl9DSEFSR0VfRU5BQkxFCTB4NDAwMAkvLyBlbmFiIGJhdHRlcnkKLQkJCQkJCS8vIHRyaWNrbGUgY2hhcmdpbmcuCisvKiAgTWlzY2VsbGFuZW91cyBSZWdpc3RlcnMgKHJlYWQvd3JpdGUpOiAqLworI2RlZmluZSBMUF9NSVNDMQkJMHgwMDg4CS8qICAgUmVhZC93cml0ZSBNaXNjMS4gKi8KKyNkZWZpbmUgTFBfV1JNSVNDMgkJMHgwMDkwCS8qICAgV3JpdGUgTWlzYzIuICovCisjZGVmaW5lIExQX1JETUlTQzIJCTB4MDA4MgkvKiAgIFJlYWQgTWlzYzIuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzIgcmVnaXN0ZXIgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIHJlYWRzIGFuZCB3cml0ZXMuCi0jZGVmaW5lIE1JU0MyX0JBVFRfRU5BQkxFCTB4MDAwOAkvLyBCYWNrdXAgYmF0dGVyeSBlbmFibGUuCi0jZGVmaW5lIE1JU0MyX1dERU5BQkxFCQkweDAwMDQJLy8gV2F0Y2hkb2cgdGltZXIgZW5hYmxlLgotI2RlZmluZSBNSVNDMl9XRFBFUklPRF9NQVNLCTB4MDAwMwkvLyBXYXRjaGRvZyBpbnRlcnZhbAotCQkJCQkJLy8gc2VsZWN0IG1hc2suCisvKiAgQml0IG1hc2tzIGZvciBNSVNDMSByZWdpc3RlciB0aGF0IGFyZSB0aGUgc2FtZSBmb3IgcmVhZHMgYW5kIHdyaXRlcy4gKi8KKyNkZWZpbmUgTUlTQzFfV0VOQUJMRQkJMHg4MDAwCS8qIGVuYWIgd3JpdGVzIHRvIE1JU0MyIChleGNlcHQgQ2xlYXIKKwkJCQkJICogV2F0Y2hkb2cgYml0KS4gKi8KKyNkZWZpbmUgTUlTQzFfV0RJU0FCTEUJCTB4MDAwMAkvKiBEaXNhYmxlIHdyaXRlcyB0byBNSVNDMi4gKi8KKyNkZWZpbmUgTUlTQzFfRURDQVAJCTB4MTAwMAkvKiBlbmFiIGVkZ2UgY2FwdHVyZSBvbiBESU8gY2hhbnMKKwkJCQkJICogc3BlY2lmaWVkIGJ5ICBMUF9XUkNBUFNFTHguICovCisjZGVmaW5lIE1JU0MxX05PRURDQVAJCTB4MDAwMAkvKiBEaXNhYmxlIGVkZ2UgY2FwdHVyZSBvbiBzcGVjaWZpZWQKKwkJCQkJICogRElPIGNoYW5zLiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIEFDT04xIHJlZ2lzdGVyLgotI2RlZmluZSBBMl9SVU4JCQkweDQwMDAwMDAwCS8vIFJ1biBBMiBiYXNlZCBvbiBUU0wyLgotI2RlZmluZSBBMV9SVU4JCQkweDIwMDAwMDAwCS8vIFJ1biBBMSBiYXNlZCBvbiBUU0wxLgotI2RlZmluZSBBMV9TV0FQCQkJMHgwMDIwMDAwMAkvLyBVc2UgYmlnLWVuZGlhbiBmb3IgQTEuCi0jZGVmaW5lIEEyX1NXQVAJCQkweDAwMTAwMDAwCS8vIFVzZSBiaWctZW5kaWFuIGZvciBBMi4KLSNkZWZpbmUgV1NfTU9ERVMJCTB4MDAwMTk5OTkJLy8gV1MwID0gVFNMMSB0cmlnZ2VyCi0JCQkJCQkvLyBpbnB1dCwgV1MxLVdTNCA9Ci0JCQkJCQkvLyBDUyogb3V0cHV0cy4KKy8qICBCaXQgbWFza3MgZm9yIE1JU0MxIHJlZ2lzdGVyIHJlYWRzLiAqLworI2RlZmluZSBSRE1JU0MxX1dEVElNRU9VVAkweDQwMDAJLyogIFdhdGNoZG9nIHRpbWVyIHRpbWVkIG91dC4gKi8KIAotI2lmIFBMQVRGT1JNID09IElOVEVMCQkvLyBCYXNlIEFDT04xIGNvbmZpZzoKLQkJCQkJCS8vIGFsd2F5cyBydW4gQTEgYmFzZWQKLQkJCQkJCS8vIG9uIFRTTDEuCi0jZGVmaW5lIEFDT04xX0JBU0UJCSggV1NfTU9ERVMgfCBBMV9SVU4gKQorLyogIEJpdCBtYXNrcyBmb3IgTUlTQzIgcmVnaXN0ZXIgd3JpdGVzLiAqLworI2RlZmluZSBXUk1JU0MyX1dEQ0xFQVIJCTB4ODAwMAkvKiAgUmVzZXQgd2F0Y2hkb2cgdGltZXIgdG8gemVyby4gKi8KKyNkZWZpbmUgV1JNSVNDMl9DSEFSR0VfRU5BQkxFCTB4NDAwMAkvKiAgZW5hYiBiYXR0ZXJ5IHRyaWNrbGUgY2hhcmdpbmcuICovCisKKy8qICBCaXQgbWFza3MgZm9yIE1JU0MyIHJlZ2lzdGVyIHRoYXQgYXJlIHRoZSBzYW1lIGZvciByZWFkcyBhbmQgd3JpdGVzLiAqLworI2RlZmluZSBNSVNDMl9CQVRUX0VOQUJMRQkweDAwMDgJLyogIEJhY2t1cCBiYXR0ZXJ5IGVuYWJsZS4gKi8KKyNkZWZpbmUgTUlTQzJfV0RFTkFCTEUJCTB4MDAwNAkvKiAgV2F0Y2hkb2cgdGltZXIgZW5hYmxlLiAqLworI2RlZmluZSBNSVNDMl9XRFBFUklPRF9NQVNLCTB4MDAwMwkvKiAgV2F0Y2hkb2cgaW50ZXJ2YWwgKi8KKwkJCQkJCS8qICBzZWxlY3QgbWFzay4gKi8KKworLyogIEJpdCBtYXNrcyBmb3IgQUNPTjEgcmVnaXN0ZXIuICovCisjZGVmaW5lIEEyX1JVTgkJCTB4NDAwMDAwMDAJLyogIFJ1biBBMiBiYXNlZCBvbiBUU0wyLiAqLworI2RlZmluZSBBMV9SVU4JCQkweDIwMDAwMDAwCS8qICBSdW4gQTEgYmFzZWQgb24gVFNMMS4gKi8KKyNkZWZpbmUgQTFfU1dBUAkJCTB4MDAyMDAwMDAJLyogIFVzZSBiaWctZW5kaWFuIGZvciBBMS4gKi8KKyNkZWZpbmUgQTJfU1dBUAkJCTB4MDAxMDAwMDAJLyogIFVzZSBiaWctZW5kaWFuIGZvciBBMi4gKi8KKyNkZWZpbmUgV1NfTU9ERVMJCTB4MDAwMTk5OTkJLyogIFdTMCA9IFRTTDEgdHJpZ2dlciAqLworCQkJCQkJLyogIGlucHV0LCBXUzEtV1M0ID0gKi8KKwkJCQkJCS8qICBDUyogb3V0cHV0cy4gKi8KKworI2lmIFBMQVRGT1JNID09IElOVEVMCQkvKiBCYXNlIEFDT04xIGNvbmZpZzogYWx3YXlzIHJ1biBBMSBiYXNlZAorCQkJCSAqIG9uIFRTTDEuICovCisjZGVmaW5lIEFDT04xX0JBU0UJCShXU19NT0RFUyB8IEExX1JVTikKICNlbGlmIFBMQVRGT1JNID09IE1PVE9ST0xBCi0jZGVmaW5lIEFDT04xX0JBU0UJCSggV1NfTU9ERVMgfCBBMV9SVU4gfCBBMV9TV0FQIHwgQTJfU1dBUCApCisjZGVmaW5lIEFDT04xX0JBU0UJCShXU19NT0RFUyB8IEExX1JVTiB8IEExX1NXQVAgfCBBMl9TV0FQKQogI2VuZGlmCiAKLSNkZWZpbmUgQUNPTjFfQURDU1RBUlQJCUFDT04xX0JBU0UJLy8gU3RhcnQgQURDOiBydW4gQTEKLQkJCQkJCS8vIGJhc2VkIG9uIFRTTDEuCi0jZGVmaW5lIEFDT04xX0RBQ1NUQVJUCQkoIEFDT04xX0JBU0UgfCBBMl9SVU4gKQkvLyBTdGFydAotCQkJCQkJCS8vIHRyYW5zbWl0IHRvCi0JCQkJCQkJLy8gREFDOiBydW4gQTIKLQkJCQkJCQkvLyBiYXNlZCBvbgotCQkJCQkJCS8vIFRTTDIuCi0jZGVmaW5lIEFDT04xX0RBQ1NUT1AJCUFDT04xX0JBU0UJLy8gSGFsdCBBMi4KKyNkZWZpbmUgQUNPTjFfQURDU1RBUlQJCUFDT04xX0JBU0UJLyogU3RhcnQgQURDOiBydW4gQTEKKwkJCQkJCSAqICBiYXNlZCBvbiBUU0wxLiAqLworI2RlZmluZSBBQ09OMV9EQUNTVEFSVAkJKEFDT04xX0JBU0UgfCBBMl9SVU4pCisvKiBTdGFydCB0cmFuc21pdCB0byBEQUM6IHJ1biBBMiBiYXNlZCBvbiBUU0wyLiAqLworI2RlZmluZSBBQ09OMV9EQUNTVE9QCQlBQ09OMV9CQVNFCS8qICBIYWx0IEEyLiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIEFDT04yIHJlZ2lzdGVyLgotI2RlZmluZSBBMV9DTEtTUkNfQkNMSzEJCTB4MDAwMDAwMDAJLy8gQTEgYml0IHJhdGUgPSBCQ0xLMSAoQURDKS4KLSNkZWZpbmUgQTJfQ0xLU1JDX1gxCQkweDAwODAwMDAwCS8vIEEyIGJpdCByYXRlID0gQUNMSy8xIChEQUNzKS4KLSNkZWZpbmUgQTJfQ0xLU1JDX1gyCQkweDAwQzAwMDAwCS8vIEEyIGJpdCByYXRlID0gQUNMSy8yIChEQUNzKS4KLSNkZWZpbmUgQTJfQ0xLU1JDX1g0CQkweDAxNDAwMDAwCS8vIEEyIGJpdCByYXRlID0gQUNMSy80IChEQUNzKS4KLSNkZWZpbmUgSU5WRVJUX0JDTEsyCQkweDAwMTAwMDAwCS8vIEludmVydCBCQ0xLMiAoREFDcykuCi0jZGVmaW5lIEJDTEsyX09FCQkweDAwMDQwMDAwCS8vIGVuYWIgQkNMSzIgKERBQ3MpLgotI2RlZmluZSBBQ09OMl9YT1JNQVNLCQkweDAwMEMwMDAwCS8vIFhPUiBtYXNrIGZvciBBQ09OMgotCQkJCQkJLy8gYWN0aXZlLWxvdyBiaXRzLgorLyogIEJpdCBtYXNrcyBmb3IgQUNPTjIgcmVnaXN0ZXIuICovCisjZGVmaW5lIEExX0NMS1NSQ19CQ0xLMQkJMHgwMDAwMDAwMAkvKiAgQTEgYml0IHJhdGUgPSBCQ0xLMSAoQURDKS4gKi8KKyNkZWZpbmUgQTJfQ0xLU1JDX1gxCQkweDAwODAwMDAwCS8qICBBMiBiaXQgcmF0ZSA9IEFDTEsvMSAoREFDcykuICovCisjZGVmaW5lIEEyX0NMS1NSQ19YMgkJMHgwMEMwMDAwMAkvKiAgQTIgYml0IHJhdGUgPSBBQ0xLLzIgKERBQ3MpLiAqLworI2RlZmluZSBBMl9DTEtTUkNfWDQJCTB4MDE0MDAwMDAJLyogIEEyIGJpdCByYXRlID0gQUNMSy80IChEQUNzKS4gKi8KKyNkZWZpbmUgSU5WRVJUX0JDTEsyCQkweDAwMTAwMDAwCS8qICBJbnZlcnQgQkNMSzIgKERBQ3MpLiAqLworI2RlZmluZSBCQ0xLMl9PRQkJMHgwMDA0MDAwMAkvKiAgZW5hYiBCQ0xLMiAoREFDcykuICovCisjZGVmaW5lIEFDT04yX1hPUk1BU0sJCTB4MDAwQzAwMDAJLyogIFhPUiBtYXNrIGZvciBBQ09OMiAqLworCQkJCQkJLyogIGFjdGl2ZS1sb3cgYml0cy4gKi8KIAotI2RlZmluZSBBQ09OMl9JTklUCQkoIEFDT04yX1hPUk1BU0sgXiAoIEExX0NMS1NSQ19CQ0xLMSB8IEEyX0NMS1NSQ19YMiB8IElOVkVSVF9CQ0xLMiB8IEJDTEsyX09FICkgKQorI2RlZmluZSBBQ09OMl9JTklUCQkoQUNPTjJfWE9STUFTSyBeIChBMV9DTEtTUkNfQkNMSzEgfCBBMl9DTEtTUkNfWDIgfCBJTlZFUlRfQkNMSzIgfCBCQ0xLMl9PRSkpCiAKLS8vIEJpdCBtYXNrcyBmb3IgdGltZXNsb3QgcmVjb3Jkcy4KLSNkZWZpbmUgV1MxCQkgICAgIAkweDQwMDAwMDAwCS8vIFdTIG91dHB1dCB0byBhc3NlcnQuCisvKiAgQml0IG1hc2tzIGZvciB0aW1lc2xvdCByZWNvcmRzLiAqLworI2RlZmluZSBXUzEJCSAgICAgCTB4NDAwMDAwMDAJLyogIFdTIG91dHB1dCB0byBhc3NlcnQuICovCiAjZGVmaW5lIFdTMgkJICAgICAJMHgyMDAwMDAwMAogI2RlZmluZSBXUzMJCSAgICAgCTB4MTAwMDAwMDAKICNkZWZpbmUgV1M0CQkgICAgIAkweDA4MDAwMDAwCi0jZGVmaW5lIFJTRDEJCQkweDAxMDAwMDAwCS8vIFNoaWZ0IEExIGRhdGEgaW4gb24gU0QxLgotI2RlZmluZSBTRFdfQTEJCQkweDAwODAwMDAwCS8vIFN0b3JlIHJjdidkIGNoYXIgYXQKLQkJCQkJCS8vIG5leHQgY2hhciBzbG90IG9mCi0JCQkJCQkvLyBEV09SRDEgYnVmZmVyLgotI2RlZmluZSBTSUJfQTEJCQkweDAwNDAwMDAwCS8vIFN0b3JlIHJjdidkIGNoYXIgYXQKLQkJCQkJCS8vIG5leHQgY2hhciBzbG90IG9mCi0JCQkJCQkvLyBGQjEgYnVmZmVyLgotI2RlZmluZSBTRl9BMQkJCTB4MDAyMDAwMDAJLy8gV3JpdGUgdW5zaWduZWQgbG9uZwotCQkJCQkJLy8gYnVmZmVyIHRvIGlucHV0Ci0JCQkJCQkvLyBGSUZPLgorI2RlZmluZSBSU0QxCQkJMHgwMTAwMDAwMAkvKiBTaGlmdCBBMSBkYXRhIGluIG9uIFNEMS4gKi8KKyNkZWZpbmUgU0RXX0ExCQkJMHgwMDgwMDAwMAkvKiBTdG9yZSByY3YnZCBjaGFyIGF0IG5leHQKKwkJCQkJCSAqIGNoYXIgc2xvdCBvZiBEV09SRDEgYnVmZmVyLiAqLworI2RlZmluZSBTSUJfQTEJCQkweDAwNDAwMDAwCS8qIFN0b3JlIHJjdidkIGNoYXIgYXQgbmV4dAorCQkJCQkJICogY2hhciBzbG90IG9mIEZCMSBidWZmZXIuICovCisjZGVmaW5lIFNGX0ExCQkJMHgwMDIwMDAwMAkvKiBXcml0ZSB1bnNpZ25lZCBsb25nCisJCQkJCQkgKiBidWZmZXIgdG8gaW5wdXQgRklGTy4gKi8KIAotLy9TZWxlY3QgcGFyYWxsZWwtdG8tc2VyaWFsIGNvbnZlcnRlcidzIGRhdGEgc291cmNlOgotI2RlZmluZSBYRklGT18wCQkJMHgwMDAwMDAwMAkvLyAgIERhdGEgZmlmbyBieXRlIDAuCi0jZGVmaW5lIFhGSUZPXzEJCQkweDAwMDAwMDEwCS8vICAgRGF0YSBmaWZvIGJ5dGUgMS4KLSNkZWZpbmUgWEZJRk9fMgkJCTB4MDAwMDAwMjAJLy8gICBEYXRhIGZpZm8gYnl0ZSAyLgotI2RlZmluZSBYRklGT18zCQkJMHgwMDAwMDAzMAkvLyAgIERhdGEgZmlmbyBieXRlIDMuCi0jZGVmaW5lIFhGQjAJCQkweDAwMDAwMDQwCS8vICAgRkJfQlVGRkVSIGJ5dGUgMC4KLSNkZWZpbmUgWEZCMQkJCTB4MDAwMDAwNTAJLy8gICBGQl9CVUZGRVIgYnl0ZSAxLgotI2RlZmluZSBYRkIyCQkJMHgwMDAwMDA2MAkvLyAgIEZCX0JVRkZFUiBieXRlIDIuCi0jZGVmaW5lIFhGQjMJCQkweDAwMDAwMDcwCS8vICAgRkJfQlVGRkVSIGJ5dGUgMy4KLSNkZWZpbmUgU0lCX0EyCQkJMHgwMDAwMDIwMAkvLyBTdG9yZSBuZXh0IGR3b3JkCi0JCQkJCQkvLyBmcm9tIEEyJ3MgaW5wdXQKLQkJCQkJCS8vIHNoaWZ0ZXIgdG8gRkIyCi0JCQkJCQkvLyBidWZmZXIuCi0jZGVmaW5lIFNGX0EyCQkJMHgwMDAwMDEwMAkvLyBTdG9yZSBuZXh0IGR3b3JkCi0JCQkJCQkvLyBmcm9tIEEyJ3MgaW5wdXQKLQkJCQkJCS8vIHNoaWZ0ZXIgdG8gaXRzCi0JCQkJCQkvLyBpbnB1dCBmaWZvLgotI2RlZmluZSBMRl9BMgkJCTB4MDAwMDAwODAJLy8gTG9hZCBuZXh0IGR3b3JkCi0JCQkJCQkvLyBmcm9tIEEyJ3Mgb3V0cHV0Ci0JCQkJCQkvLyBmaWZvIGludG8gaXRzCi0JCQkJCQkvLyBvdXRwdXQgZHdvcmQKLQkJCQkJCS8vIGJ1ZmZlci4KLSNkZWZpbmUgWFNEMgkJCTB4MDAwMDAwMDgJLy8gU2hpZnQgZGF0YSBvdXQgb24gU0QyLgotI2RlZmluZSBSU0QzCQkJMHgwMDAwMTgwMAkvLyBTaGlmdCBkYXRhIGluIG9uIFNEMy4KLSNkZWZpbmUgUlNEMgkJCTB4MDAwMDEwMDAJLy8gU2hpZnQgZGF0YSBpbiBvbiBTRDIuCi0jZGVmaW5lIExPV19BMgkJCTB4MDAwMDAwMDIJLy8gRHJpdmUgbGFzdCBTRCBsb3cKLQkJCQkJCS8vIGZvciA3IGNsa3MsIHRoZW4KLQkJCQkJCS8vIHRyaS1zdGF0ZS4KLSNkZWZpbmUgRU9TCQkgICAgIAkweDAwMDAwMDAxCS8vIEVuZCBvZiBzdXBlcmZyYW1lLgorLyogU2VsZWN0IHBhcmFsbGVsLXRvLXNlcmlhbCBjb252ZXJ0ZXIncyBkYXRhIHNvdXJjZTogKi8KKyNkZWZpbmUgWEZJRk9fMAkJCTB4MDAwMDAwMDAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMC4gKi8KKyNkZWZpbmUgWEZJRk9fMQkJCTB4MDAwMDAwMTAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMS4gKi8KKyNkZWZpbmUgWEZJRk9fMgkJCTB4MDAwMDAwMjAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMi4gKi8KKyNkZWZpbmUgWEZJRk9fMwkJCTB4MDAwMDAwMzAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMy4gKi8KKyNkZWZpbmUgWEZCMAkJCTB4MDAwMDAwNDAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMC4gKi8KKyNkZWZpbmUgWEZCMQkJCTB4MDAwMDAwNTAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMS4gKi8KKyNkZWZpbmUgWEZCMgkJCTB4MDAwMDAwNjAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMi4gKi8KKyNkZWZpbmUgWEZCMwkJCTB4MDAwMDAwNzAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMy4gKi8KKyNkZWZpbmUgU0lCX0EyCQkJMHgwMDAwMDIwMAkvKiBTdG9yZSBuZXh0IGR3b3JkIGZyb20gQTIncworCQkJCQkJICogaW5wdXQgc2hpZnRlciB0byBGQjIgYnVmZmVyLiAqLworI2RlZmluZSBTRl9BMgkJCTB4MDAwMDAxMDAJLyogU3RvcmUgbmV4dCBkd29yZCBmcm9tIEEyJ3MKKwkJCQkJCSAqIGlucHV0IHNoaWZ0ZXIgdG8gaXRzIGlucHV0CisJCQkJCQkgKiBmaWZvLiAqLworI2RlZmluZSBMRl9BMgkJCTB4MDAwMDAwODAJLyogTG9hZCBuZXh0IGR3b3JkIGZyb20gQTIncworCQkJCQkJICogb3V0cHV0IGZpZm8gaW50byBpdHMKKwkJCQkJCSAqIG91dHB1dCBkd29yZCBidWZmZXIuICovCisjZGVmaW5lIFhTRDIJCQkweDAwMDAwMDA4CS8qICBTaGlmdCBkYXRhIG91dCBvbiBTRDIuICovCisjZGVmaW5lIFJTRDMJCQkweDAwMDAxODAwCS8qICBTaGlmdCBkYXRhIGluIG9uIFNEMy4gKi8KKyNkZWZpbmUgUlNEMgkJCTB4MDAwMDEwMDAJLyogIFNoaWZ0IGRhdGEgaW4gb24gU0QyLiAqLworI2RlZmluZSBMT1dfQTIJCQkweDAwMDAwMDAyCS8qICBEcml2ZSBsYXN0IFNEIGxvdyAqLworCQkJCQkJLyogIGZvciA3IGNsa3MsIHRoZW4gKi8KKwkJCQkJCS8qICB0cmktc3RhdGUuICovCisjZGVmaW5lIEVPUwkJICAgICAJMHgwMDAwMDAwMQkvKiAgRW5kIG9mIHN1cGVyZnJhbWUuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotLy8gSTJDIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzLgotI2RlZmluZSBJMkNfQ0xLU0VMCQkweDA0MDAJLy8gSTJDIGJpdCByYXRlID0KLQkJCQkJCS8vIFBDSWNsay80ODAgPSA2OC43NQotCQkJCQkJLy8gS0h6LgotI2RlZmluZSBJMkNfQklUUkFURQkJNjguNzUJLy8gSTJDIGJ1cyBkYXRhIGJpdAotCQkJCQkJLy8gcmF0ZSAoZGV0ZXJtaW5lZCBieQotCQkJCQkJLy8gSTJDX0NMS1NFTCkgaW4gS0h6LgotI2RlZmluZSBJMkNfV1JUSU1FCQkxNS4wCS8vIFdvcnN0IGNhc2UgdGltZSxpbgotCQkJCQkJLy8gbXNlYywgZm9yIEVFUFJPTQotCQkJCQkJLy8gaW50ZXJuYWwgd3JpdGUgb3AuCisvKiAgSTJDIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzLiAqLworI2RlZmluZSBJMkNfQ0xLU0VMCQkweDA0MDAKKy8qIEkyQyBiaXQgcmF0ZSA9IFBDSWNsay80ODAgPSA2OC43NSBLSHouICovCiAKLS8vIEkyQyBtYW5pZmVzdCBjb25zdGFudHMuCisjZGVmaW5lIEkyQ19CSVRSQVRFCQk2OC43NQorLyogSTJDIGJ1cyBkYXRhIGJpdCByYXRlIChkZXRlcm1pbmVkIGJ5IEkyQ19DTEtTRUwpIGluIEtIei4gKi8KIAotLy8gTWF4IHJldHJpZXMgdG8gd2FpdCBmb3IgRUVQUk9NIHdyaXRlLgotI2RlZmluZSBJMkNfUkVUUklFUwkJKCBJMkNfV1JUSU1FICogSTJDX0JJVFJBVEUgLyA5LjAgKQotI2RlZmluZSBJMkNfRVJSCQkJMHgwMDAyCS8vIEkyQyBjb250cm9sL3N0YXR1cwotCQkJCQkJLy8gZmxhZyBFUlJPUi4KLSNkZWZpbmUgSTJDX0JVU1kJCTB4MDAwMQkvLyBJMkMgY29udHJvbC9zdGF0dXMKLQkJCQkJCS8vIGZsYWcgQlVTWS4KLSNkZWZpbmUgSTJDX0FCT1JUCQkweDAwODAJLy8gSTJDIHN0YXR1cyBmbGFnIEFCT1JULgotI2RlZmluZSBJMkNfQVRUUlNUQVJUCQkweDMJLy8gSTJDIGF0dHJpYnV0ZSBTVEFSVC4KLSNkZWZpbmUgSTJDX0FUVFJDT05UCQkweDIJLy8gSTJDIGF0dHJpYnV0ZSBDT05ULgotI2RlZmluZSBJMkNfQVRUUlNUT1AJCTB4MQkvLyBJMkMgYXR0cmlidXRlIFNUT1AuCi0jZGVmaW5lIEkyQ19BVFRSTk9QCQkweDAJLy8gSTJDIGF0dHJpYnV0ZSBOT1AuCisjZGVmaW5lIEkyQ19XUlRJTUUJCTE1LjAKKy8qIFdvcnN0IGNhc2UgdGltZSwgaW4gbXNlYywgZm9yIEVFUFJPTSBpbnRlcm5hbCB3cml0ZSBvcC4gKi8KIAotLy8gSTJDIHJlYWQgY29tbWFuZCAgfCBFRVBST00gYWRkcmVzcy4KLSNkZWZpbmUgSTJDUgkJCSggZGV2cHJpdi0+STJDQWRycyB8IDEgKQorLyogIEkyQyBtYW5pZmVzdCBjb25zdGFudHMuICovCiAKLS8vIEkyQyB3cml0ZSBjb21tYW5kIHwgRUVQUk9NIGFkZHJlc3MuCi0jZGVmaW5lIEkyQ1cJCQkoIGRldnByaXYtPkkyQ0FkcnMgKQorLyogIE1heCByZXRyaWVzIHRvIHdhaXQgZm9yIEVFUFJPTSB3cml0ZS4gKi8KKyNkZWZpbmUgSTJDX1JFVFJJRVMJCShJMkNfV1JUSU1FICogSTJDX0JJVFJBVEUgLyA5LjApCisjZGVmaW5lIEkyQ19FUlIJCQkweDAwMDIJLyogIEkyQyBjb250cm9sL3N0YXR1cyAqLworCQkJCQkJLyogIGZsYWcgRVJST1IuICovCisjZGVmaW5lIEkyQ19CVVNZCQkweDAwMDEJLyogIEkyQyBjb250cm9sL3N0YXR1cyAqLworCQkJCQkJLyogIGZsYWcgQlVTWS4gKi8KKyNkZWZpbmUgSTJDX0FCT1JUCQkweDAwODAJLyogIEkyQyBzdGF0dXMgZmxhZyBBQk9SVC4gKi8KKyNkZWZpbmUgSTJDX0FUVFJTVEFSVAkJMHgzCS8qICBJMkMgYXR0cmlidXRlIFNUQVJULiAqLworI2RlZmluZSBJMkNfQVRUUkNPTlQJCTB4MgkvKiAgSTJDIGF0dHJpYnV0ZSBDT05ULiAqLworI2RlZmluZSBJMkNfQVRUUlNUT1AJCTB4MQkvKiAgSTJDIGF0dHJpYnV0ZSBTVE9QLiAqLworI2RlZmluZSBJMkNfQVRUUk5PUAkJMHgwCS8qICBJMkMgYXR0cmlidXRlIE5PUC4gKi8KIAotLy8gQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLgotI2RlZmluZSBJMkNfQjIoQVRUUixWQUwpCSggKCAoQVRUUikgPDwgNiApIHwgKCAoVkFMKSA8PCAyNCApICkKLSNkZWZpbmUgSTJDX0IxKEFUVFIsVkFMKQkoICggKEFUVFIpIDw8IDQgKSB8ICggKFZBTCkgPDwgMTYgKSApCi0jZGVmaW5lIEkyQ19CMChBVFRSLFZBTCkJKCAoIChBVFRSKSA8PCAyICkgfCAoIChWQUwpIDw8ICA4ICkgKQorLyogIEkyQyByZWFkIGNvbW1hbmQgIHwgRUVQUk9NIGFkZHJlc3MuICovCisjZGVmaW5lIEkyQ1IJCQkoZGV2cHJpdi0+STJDQWRycyB8IDEpCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vL29sZGVzdAotI2RlZmluZSBQX0RFQklDRkdxICAgICAgICAgICAgICAweDAwN0MJLy8gREVCSSBjb25maWd1cmF0aW9uLgotI2RlZmluZSBQX0RFQklDTURxICAgICAgICAgICAgICAweDAwODAJLy8gREVCSSBjb21tYW5kLgotI2RlZmluZSBQX0RFQklQQUdFcSAgICAgICAgICAgICAweDAwODQJLy8gREVCSSBwYWdlLgotI2RlZmluZSBQX0RFQklBRHEgICAgICAgICAgICAgICAweDAwODgJLy8gREVCSSB0YXJnZXQgYWRkcmVzcy4KKy8qICBJMkMgd3JpdGUgY29tbWFuZCB8IEVFUFJPTSBhZGRyZXNzLiAqLworI2RlZmluZSBJMkNXCQkJKGRldnByaXYtPkkyQ0FkcnMpCiAKLSNkZWZpbmUgREVCSV9DRkdfVE9RCQkweDAzQzAwMDAwCS8vIHRpbWVvdXQgKDE1IFBDSSBjeWNsZXMpCi0jZGVmaW5lIERFQklfQ0ZHX0ZBU1RRCQkweDEwMDAwMDAwCS8vIGZhc3QgbW9kZSBlbmFibGUKLSNkZWZpbmUgREVCSV9DRkdfMTZRCQkweDAwMDgwMDAwCS8vIDE2LWJpdCBhY2Nlc3MgZW5hYmxlCi0jZGVmaW5lIERFQklfQ0ZHX0lOQ1EJCTB4MDAwNDAwMDAJLy8gZW5hYmxlIGFkZHJlc3MgaW5jcmVtZW50Ci0jZGVmaW5lIERFQklfQ0ZHX1RJTUVST0ZGUQkweDAwMDEwMDAwCS8vIGRpc2FibGUgdGltZXIKLSNkZWZpbmUgREVCSV9DTURfUkRRCQkweDAwMDUwMDAwCS8vIHJlYWQgaW1tZWRpYXRlIDIgYnl0ZXMKLSNkZWZpbmUgREVCSV9DTURfV1JRCQkweDAwMDQwMDAwCS8vIHdyaXRlIGltbWVkaWF0ZSAyIGJ5dGVzCi0jZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFUQkweDAwMDAwMDAwCS8vIHBhZ2luZyBkaXNhYmxlCisvKiAgQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLiAqLworI2RlZmluZSBJMkNfQjIoQVRUUiwgVkFMKQkoKChBVFRSKSA8PCA2KSB8ICgoVkFMKSA8PCAyNCkpCisjZGVmaW5lIEkyQ19CMShBVFRSLCBWQUwpCSgoKEFUVFIpIDw8IDQpIHwgKChWQUwpIDw8IDE2KSkKKyNkZWZpbmUgSTJDX0IwKEFUVFIsIFZBTCkJKCgoQVRUUikgPDwgMikgfCAoKFZBTCkgPDwgIDgpKQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBERUJJIGNvbW1hbmQgY29uc3RhbnRzLgotI2RlZmluZSBERUJJX0NNRF9TSVpFMTYJCSggMiA8PCAxNyApCS8vIFRyYW5zZmVyIHNpemUgaXMKLQkJCQkJCS8vIGFsd2F5cyAyIGJ5dGVzLgotI2RlZmluZSBERUJJX0NNRF9SRUFECQkweDAwMDEwMDAwCS8vIFJlYWQgb3BlcmF0aW9uLgotI2RlZmluZSBERUJJX0NNRF9XUklURQkJMHgwMDAwMDAwMAkvLyBXcml0ZSBvcGVyYXRpb24uCisvKiBvbGRlc3QgKi8KKyNkZWZpbmUgUF9ERUJJQ0ZHcSAgICAgICAgICAgICAgMHgwMDdDCS8qICBERUJJIGNvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIFBfREVCSUNNRHEgICAgICAgICAgICAgIDB4MDA4MAkvKiAgREVCSSBjb21tYW5kLiAqLworI2RlZmluZSBQX0RFQklQQUdFcSAgICAgICAgICAgICAweDAwODQJLyogIERFQkkgcGFnZS4gKi8KKyNkZWZpbmUgUF9ERUJJQURxICAgICAgICAgICAgICAgMHgwMDg4CS8qICBERUJJIHRhcmdldCBhZGRyZXNzLiAqLwogCi0vLyBSZWFkIGltbWVkaWF0ZSAyIGJ5dGVzLgotI2RlZmluZSBERUJJX0NNRF9SRFdPUkQJCSggREVCSV9DTURfUkVBRCAgfCBERUJJX0NNRF9TSVpFMTYgKQorI2RlZmluZSBERUJJX0NGR19UT1EJCTB4MDNDMDAwMDAJLyogIHRpbWVvdXQgKDE1IFBDSSBjeWNsZXMpICovCisjZGVmaW5lIERFQklfQ0ZHX0ZBU1RRCQkweDEwMDAwMDAwCS8qICBmYXN0IG1vZGUgZW5hYmxlICovCisjZGVmaW5lIERFQklfQ0ZHXzE2UQkJMHgwMDA4MDAwMAkvKiAgMTYtYml0IGFjY2VzcyBlbmFibGUgKi8KKyNkZWZpbmUgREVCSV9DRkdfSU5DUQkJMHgwMDA0MDAwMAkvKiAgZW5hYmxlIGFkZHJlc3MgaW5jcmVtZW50ICovCisjZGVmaW5lIERFQklfQ0ZHX1RJTUVST0ZGUQkweDAwMDEwMDAwCS8qICBkaXNhYmxlIHRpbWVyICovCisjZGVmaW5lIERFQklfQ01EX1JEUQkJMHgwMDA1MDAwMAkvKiAgcmVhZCBpbW1lZGlhdGUgMiBieXRlcyAqLworI2RlZmluZSBERUJJX0NNRF9XUlEJCTB4MDAwNDAwMDAJLyogIHdyaXRlIGltbWVkaWF0ZSAyIGJ5dGVzICovCisjZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFUQkweDAwMDAwMDAwCS8qICBwYWdpbmcgZGlzYWJsZSAqLwogCi0vLyBXcml0ZSBpbW1lZGlhdGUgMiBieXRlcy4KLSNkZWZpbmUgREVCSV9DTURfV1JXT1JECQkoIERFQklfQ01EX1dSSVRFIHwgREVCSV9DTURfU0laRTE2ICkKKy8qICBERUJJIGNvbW1hbmQgY29uc3RhbnRzLiAqLworI2RlZmluZSBERUJJX0NNRF9TSVpFMTYJCSgyIDw8IDE3KQkvKiAgVHJhbnNmZXIgc2l6ZSBpcyAqLworCQkJCQkJLyogIGFsd2F5cyAyIGJ5dGVzLiAqLworI2RlZmluZSBERUJJX0NNRF9SRUFECQkweDAwMDEwMDAwCS8qICBSZWFkIG9wZXJhdGlvbi4gKi8KKyNkZWZpbmUgREVCSV9DTURfV1JJVEUJCTB4MDAwMDAwMDAJLyogIFdyaXRlIG9wZXJhdGlvbi4gKi8KIAotLy8gREVCSSBjb25maWd1cmF0aW9uIGNvbnN0YW50cy4KLSNkZWZpbmUgREVCSV9DRkdfWElSUV9FTgkweDgwMDAwMDAwCS8vIGVuYWIgZXh0ZXJuYWwKLQkJCQkJCS8vIGludGVycnVwdCBvbiBHUElPMy4KLSNkZWZpbmUgREVCSV9DRkdfWFJFU1VNRQkweDQwMDAwMDAwCS8vIFJlc3VtZSBibG9jawotCQkJCQkJLy8gdHJhbnNmZXIgd2hlbiBYSVJRCi0JCQkJCQkvLyBkZWFzc2VydGVkLgotI2RlZmluZSBERUJJX0NGR19GQVNUCQkweDEwMDAwMDAwCS8vIEZhc3QgbW9kZSBlbmFibGUuCisvKiAgUmVhZCBpbW1lZGlhdGUgMiBieXRlcy4gKi8KKyNkZWZpbmUgREVCSV9DTURfUkRXT1JECQkoREVCSV9DTURfUkVBRCAgfCBERUJJX0NNRF9TSVpFMTYpCiAKLS8vIDQtYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIERFQkkgdGltZW91dCB2YWx1ZSBpbiBQQ0kgY2xvY2sgY3ljbGVzOgotI2RlZmluZSBERUJJX0NGR19UT1VUX0JJVAkyMgkvLyAgIEZpbmlzaCBERUJJIGN5Y2xlIGFmdGVyCi0JCQkJCS8vICAgdGhpcyBtYW55IGNsb2Nrcy4KKy8qICBXcml0ZSBpbW1lZGlhdGUgMiBieXRlcy4gKi8KKyNkZWZpbmUgREVCSV9DTURfV1JXT1JECQkoREVCSV9DTURfV1JJVEUgfCBERUJJX0NNRF9TSVpFMTYpCiAKLS8vIDItYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIEVuZGlhbiBieXRlIGxhbmUgc3RlZXJpbmc6Ci0jZGVmaW5lIERFQklfQ0ZHX1NXQVBfTk9ORQkweDAwMDAwMDAwCS8vICAgU3RyYWlnaHQgLSBkb24ndAotCQkJCQkJLy8gICBzd2FwIGFueSBieXRlcwotCQkJCQkJLy8gICAoSW50ZWwpLgotI2RlZmluZSBERUJJX0NGR19TV0FQXzIJCTB4MDAxMDAwMDAJLy8gICAyLWJ5dGUgc3dhcCAoTW90b3JvbGEpLgotI2RlZmluZSBERUJJX0NGR19TV0FQXzQJCTB4MDAyMDAwMDAJLy8gICA0LWJ5dGUgc3dhcC4KLSNkZWZpbmUgREVCSV9DRkdfMTYJCTB4MDAwODAwMDAJLy8gU2xhdmUgaXMgYWJsZSB0bwotCQkJCQkJLy8gc2VydmUgMTYtYml0Ci0JCQkJCQkvLyBjeWNsZXMuCisvKiAgREVCSSBjb25maWd1cmF0aW9uIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfWElSUV9FTgkweDgwMDAwMDAwCS8qICBlbmFiIGV4dGVybmFsICovCisJCQkJCQkvKiAgaW50ZXJydXB0IG9uIEdQSU8zLiAqLworI2RlZmluZSBERUJJX0NGR19YUkVTVU1FCTB4NDAwMDAwMDAJLyogIFJlc3VtZSBibG9jayAqLworCQkJCQkJLyogIHRyYW5zZmVyIHdoZW4gWElSUSAqLworCQkJCQkJLyogIGRlYXNzZXJ0ZWQuICovCisjZGVmaW5lIERFQklfQ0ZHX0ZBU1QJCTB4MTAwMDAwMDAJLyogIEZhc3QgbW9kZSBlbmFibGUuICovCiAKLSNkZWZpbmUgREVCSV9DRkdfU0xBVkUxNgkweDAwMDgwMDAwCS8vIFNsYXZlIGlzIGFibGUgdG8KLQkJCQkJCS8vIHNlcnZlIDE2LWJpdAotCQkJCQkJLy8gY3ljbGVzLgotI2RlZmluZSBERUJJX0NGR19JTkMJCTB4MDAwNDAwMDAJLy8gZW5hYiBhZGRyZXNzCi0JCQkJCQkvLyBpbmNyZW1lbnQgZm9yIGJsb2NrCi0JCQkJCQkvLyB0cmFuc2ZlcnMuCi0jZGVmaW5lIERFQklfQ0ZHX0lOVEVMCQkweDAwMDIwMDAwCS8vIEludGVsIHN0eWxlIGxvY2FsIGJ1cy4KLSNkZWZpbmUgREVCSV9DRkdfVElNRVJPRkYJMHgwMDAxMDAwMAkvLyBEaXNhYmxlIHRpbWVyLgorLyogIDQtYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIERFQkkgdGltZW91dCB2YWx1ZSBpbiBQQ0kgY2xvY2sgY3ljbGVzOiAqLworI2RlZmluZSBERUJJX0NGR19UT1VUX0JJVAkyMgkvKiAgICBGaW5pc2ggREVCSSBjeWNsZSBhZnRlciAqLworCQkJCQkvKiAgICB0aGlzIG1hbnkgY2xvY2tzLiAqLworCisvKiAgMi1iaXQgZmllbGQgdGhhdCBzcGVjaWZpZXMgRW5kaWFuIGJ5dGUgbGFuZSBzdGVlcmluZzogKi8KKyNkZWZpbmUgREVCSV9DRkdfU1dBUF9OT05FCTB4MDAwMDAwMDAJLyogICAgU3RyYWlnaHQgLSBkb24ndCAqLworCQkJCQkJLyogICAgc3dhcCBhbnkgYnl0ZXMgKi8KKwkJCQkJCS8qICAgIChJbnRlbCkuICovCisjZGVmaW5lIERFQklfQ0ZHX1NXQVBfMgkJMHgwMDEwMDAwMAkvKiAgICAyLWJ5dGUgc3dhcCAoTW90b3JvbGEpLiAqLworI2RlZmluZSBERUJJX0NGR19TV0FQXzQJCTB4MDAyMDAwMDAJLyogICAgNC1ieXRlIHN3YXAuICovCisjZGVmaW5lIERFQklfQ0ZHXzE2CQkweDAwMDgwMDAwCS8qICBTbGF2ZSBpcyBhYmxlIHRvICovCisJCQkJCQkvKiAgc2VydmUgMTYtYml0ICovCisJCQkJCQkvKiAgY3ljbGVzLiAqLworCisjZGVmaW5lIERFQklfQ0ZHX1NMQVZFMTYJMHgwMDA4MDAwMAkvKiAgU2xhdmUgaXMgYWJsZSB0byAqLworCQkJCQkJLyogIHNlcnZlIDE2LWJpdCAqLworCQkJCQkJLyogIGN5Y2xlcy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfSU5DCQkweDAwMDQwMDAwCS8qICBlbmFiIGFkZHJlc3MgKi8KKwkJCQkJCS8qICBpbmNyZW1lbnQgZm9yIGJsb2NrICovCisJCQkJCQkvKiAgdHJhbnNmZXJzLiAqLworI2RlZmluZSBERUJJX0NGR19JTlRFTAkJMHgwMDAyMDAwMAkvKiAgSW50ZWwgc3R5bGUgbG9jYWwgYnVzLiAqLworI2RlZmluZSBERUJJX0NGR19USU1FUk9GRgkweDAwMDEwMDAwCS8qICBEaXNhYmxlIHRpbWVyLiAqLwogCiAjaWYgUExBVEZPUk0gPT0gSU5URUwKIAotI2RlZmluZSBERUJJX1RPVVQJCTcJLy8gV2FpdCA3IFBDSSBjbG9ja3MKLQkJCQkJCS8vICgyMTIgbnMpIGJlZm9yZQotCQkJCQkJLy8gcG9sbGluZyBSRFkuCisjZGVmaW5lIERFQklfVE9VVAkJNwkvKiAgV2FpdCA3IFBDSSBjbG9ja3MgKi8KKwkJCQkJCS8qICAoMjEyIG5zKSBiZWZvcmUgKi8KKwkJCQkJCS8qICBwb2xsaW5nIFJEWS4gKi8KIAotLy8gSW50ZWwgYnl0ZSBsYW5lIHN0ZWVyaW5nIChwYXNzIHRocm91Z2ggYWxsIGJ5dGUgbGFuZXMpLgorLyogIEludGVsIGJ5dGUgbGFuZSBzdGVlcmluZyAocGFzcyB0aHJvdWdoIGFsbCBieXRlIGxhbmVzKS4gKi8KICNkZWZpbmUgREVCSV9TV0FQCQlERUJJX0NGR19TV0FQX05PTkUKIAogI2VsaWYgUExBVEZPUk0gPT0gTU9UT1JPTEEKIAotI2RlZmluZSBERUJJX1RPVVQJCTE1CS8vIFdhaXQgMTUgUENJIGNsb2NrcyAoNDU0IG5zKQotCQkJCQkvLyBtYXhpbXVtIGJlZm9yZSB0aW1pbmcgb3V0LgotI2RlZmluZSBERUJJX1NXQVAJCURFQklfQ0ZHX1NXQVBfMgkvLyBNb3Rvcm9sYSBieXRlIGxhbmUgc3RlZXJpbmcuCisjZGVmaW5lIERFQklfVE9VVAkJMTUJLyogIFdhaXQgMTUgUENJIGNsb2NrcyAoNDU0IG5zKSAqLworCQkJCQkvKiAgbWF4aW11bSBiZWZvcmUgdGltaW5nIG91dC4gKi8KKyNkZWZpbmUgREVCSV9TV0FQCQlERUJJX0NGR19TV0FQXzIJLyogIE1vdG9yb2xhIGJ5dGUgbGFuZSBzdGVlcmluZy4gKi8KIAogI2VuZGlmCiAKLS8vIERFQkkgcGFnZSB0YWJsZSBjb25zdGFudHMuCi0jZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFCTB4MDAwMDAwMDAJLy8gUGFnaW5nIGRpc2FibGUuCisvKiAgREVCSSBwYWdlIHRhYmxlIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgREVCSV9QQUdFX0RJU0FCTEUJMHgwMDAwMDAwMAkvKiAgUGFnaW5nIGRpc2FibGUuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy9FWFRSQSBGUk9NIE9USEVSIFNBTlNPUkFZICAqIC5oLy8vLy8vLy8KKy8qICoqKioqKiogRVhUUkEgRlJPTSBPVEhFUiBTQU5TT1JBWSAgKiAuaCAgKioqKioqKiAqLwogCi0vLyBMb2FkU3JjIHZhbHVlczoKLSNkZWZpbmUgTE9BRFNSQ19JTkRYCQkwCS8vIFByZWxvYWQgY29yZSBpbiByZXNwb25zZSB0bwotCQkJCQkvLyBJbmRleC4KLSNkZWZpbmUgTE9BRFNSQ19PVkVSCQkxCS8vIFByZWxvYWQgY29yZSBpbiByZXNwb25zZSB0bwotCQkJCQkvLyBPdmVyZmxvdy4KLSNkZWZpbmUgTE9BRFNSQ0JfT1ZFUkEJCTIJLy8gUHJlbG9hZCBCIGNvcmUgaW4gcmVzcG9uc2UKLQkJCQkJLy8gdG8gQSBPdmVyZmxvdy4KLSNkZWZpbmUgTE9BRFNSQ19OT05FCQkzCS8vIE5ldmVyIHByZWxvYWQgY29yZS4KKy8qICBMb2FkU3JjIHZhbHVlczogKi8KKyNkZWZpbmUgTE9BRFNSQ19JTkRYCQkwCS8qICBQcmVsb2FkIGNvcmUgaW4gcmVzcG9uc2UgdG8gKi8KKwkJCQkJLyogIEluZGV4LiAqLworI2RlZmluZSBMT0FEU1JDX09WRVIJCTEJLyogIFByZWxvYWQgY29yZSBpbiByZXNwb25zZSB0byAqLworCQkJCQkvKiAgT3ZlcmZsb3cuICovCisjZGVmaW5lIExPQURTUkNCX09WRVJBCQkyCS8qICBQcmVsb2FkIEIgY29yZSBpbiByZXNwb25zZSAqLworCQkJCQkvKiAgdG8gQSBPdmVyZmxvdy4gKi8KKyNkZWZpbmUgTE9BRFNSQ19OT05FCQkzCS8qICBOZXZlciBwcmVsb2FkIGNvcmUuICovCiAKLS8vIEludFNyYyB2YWx1ZXM6Ci0jZGVmaW5lIElOVFNSQ19OT05FIAkJMAkvLyBJbnRlcnJ1cHRzIGRpc2FibGVkLgotI2RlZmluZSBJTlRTUkNfT1ZFUiAJCTEJLy8gSW50ZXJydXB0IG9uIE92ZXJmbG93LgotI2RlZmluZSBJTlRTUkNfSU5EWCAJCTIJLy8gSW50ZXJydXB0IG9uIEluZGV4LgotI2RlZmluZSBJTlRTUkNfQk9USCAJCTMJLy8gSW50ZXJydXB0IG9uIEluZGV4IG9yIE92ZXJmbG93LgorLyogIEludFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIElOVFNSQ19OT05FIAkJMAkvKiAgSW50ZXJydXB0cyBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgSU5UU1JDX09WRVIgCQkxCS8qICBJbnRlcnJ1cHQgb24gT3ZlcmZsb3cuICovCisjZGVmaW5lIElOVFNSQ19JTkRYIAkJMgkvKiAgSW50ZXJydXB0IG9uIEluZGV4LiAqLworI2RlZmluZSBJTlRTUkNfQk9USCAJCTMJLyogIEludGVycnVwdCBvbiBJbmRleCBvciBPdmVyZmxvdy4gKi8KIAotLy8gTGF0Y2hTcmMgdmFsdWVzOgotI2RlZmluZSBMQVRDSFNSQ19BQl9SRUFECTAJLy8gTGF0Y2ggb24gcmVhZC4KLSNkZWZpbmUgTEFUQ0hTUkNfQV9JTkRYQQkxCS8vIExhdGNoIEEgb24gQSBJbmRleC4KLSNkZWZpbmUgTEFUQ0hTUkNfQl9JTkRYQgkyCS8vIExhdGNoIEIgb24gQiBJbmRleC4KLSNkZWZpbmUgTEFUQ0hTUkNfQl9PVkVSQQkzCS8vIExhdGNoIEIgb24gQSBPdmVyZmxvdy4KKy8qICBMYXRjaFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIExBVENIU1JDX0FCX1JFQUQJMAkvKiAgTGF0Y2ggb24gcmVhZC4gKi8KKyNkZWZpbmUgTEFUQ0hTUkNfQV9JTkRYQQkxCS8qICBMYXRjaCBBIG9uIEEgSW5kZXguICovCisjZGVmaW5lIExBVENIU1JDX0JfSU5EWEIJMgkvKiAgTGF0Y2ggQiBvbiBCIEluZGV4LiAqLworI2RlZmluZSBMQVRDSFNSQ19CX09WRVJBCTMJLyogIExhdGNoIEIgb24gQSBPdmVyZmxvdy4gKi8KIAotLy8gSW5keFNyYyB2YWx1ZXM6Ci0jZGVmaW5lIElORFhTUkNfSEFSRAkJMAkvLyBIYXJkd2FyZSBvciBzb2Z0d2FyZSBpbmRleC4KLSNkZWZpbmUgSU5EWFNSQ19TT0ZUCQkxCS8vIFNvZnR3YXJlIGluZGV4IG9ubHkuCisvKiAgSW5keFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIElORFhTUkNfSEFSRAkJMAkvKiAgSGFyZHdhcmUgb3Igc29mdHdhcmUgaW5kZXguICovCisjZGVmaW5lIElORFhTUkNfU09GVAkJMQkvKiAgU29mdHdhcmUgaW5kZXggb25seS4gKi8KIAotLy8gSW5keFBvbCB2YWx1ZXM6Ci0jZGVmaW5lIElORFhQT0xfUE9TIAkJMAkvLyBJbmRleCBpbnB1dCBpcyBhY3RpdmUgaGlnaC4KLSNkZWZpbmUgSU5EWFBPTF9ORUcgCQkxCS8vIEluZGV4IGlucHV0IGlzIGFjdGl2ZSBsb3cuCisvKiAgSW5keFBvbCB2YWx1ZXM6ICovCisjZGVmaW5lIElORFhQT0xfUE9TIAkJMAkvKiAgSW5kZXggaW5wdXQgaXMgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIElORFhQT0xfTkVHIAkJMQkvKiAgSW5kZXggaW5wdXQgaXMgYWN0aXZlIGxvdy4gKi8KIAotLy8gQ2xrU3JjIHZhbHVlczoKLSNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLy8gQ291bnRlciBtb2RlLgotI2RlZmluZSBDTEtTUkNfVElNRVIJCTIJLy8gVGltZXIgbW9kZS4KLSNkZWZpbmUgQ0xLU1JDX0VYVEVOREVSCQkzCS8vIEV4dGVuZGVyIG1vZGUuCisvKiAgQ2xrU3JjIHZhbHVlczogKi8KKyNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLyogIENvdW50ZXIgbW9kZS4gKi8KKyNkZWZpbmUgQ0xLU1JDX1RJTUVSCQkyCS8qICBUaW1lciBtb2RlLiAqLworI2RlZmluZSBDTEtTUkNfRVhURU5ERVIJCTMJLyogIEV4dGVuZGVyIG1vZGUuICovCiAKLS8vIENsa1BvbCB2YWx1ZXM6Ci0jZGVmaW5lIENMS1BPTF9QT1MJCTAJLy8gQ291bnRlci9FeHRlbmRlciBjbG9jayBpcwotCQkJCQkvLyBhY3RpdmUgaGlnaC4KLSNkZWZpbmUgQ0xLUE9MX05FRwkJMQkvLyBDb3VudGVyL0V4dGVuZGVyIGNsb2NrIGlzCi0JCQkJCS8vIGFjdGl2ZSBsb3cuCi0jZGVmaW5lIENOVERJUl9VUAkJMAkvLyBUaW1lciBjb3VudHMgdXAuCi0jZGVmaW5lIENOVERJUl9ET1dOIAkJMQkvLyBUaW1lciBjb3VudHMgZG93bi4KKy8qICBDbGtQb2wgdmFsdWVzOiAqLworI2RlZmluZSBDTEtQT0xfUE9TCQkwCS8qICBDb3VudGVyL0V4dGVuZGVyIGNsb2NrIGlzICovCisJCQkJCS8qICBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgQ0xLUE9MX05FRwkJMQkvKiAgQ291bnRlci9FeHRlbmRlciBjbG9jayBpcyAqLworCQkJCQkvKiAgYWN0aXZlIGxvdy4gKi8KKyNkZWZpbmUgQ05URElSX1VQCQkwCS8qICBUaW1lciBjb3VudHMgdXAuICovCisjZGVmaW5lIENOVERJUl9ET1dOIAkJMQkvKiAgVGltZXIgY291bnRzIGRvd24uICovCiAKLS8vIENsa0VuYWIgdmFsdWVzOgotI2RlZmluZSBDTEtFTkFCX0FMV0FZUwkJMAkvLyBDbG9jayBhbHdheXMgZW5hYmxlZC4KLSNkZWZpbmUgQ0xLRU5BQl9JTkRFWAkJMQkvLyBDbG9jayBpcyBlbmFibGVkIGJ5IGluZGV4LgorLyogIENsa0VuYWIgdmFsdWVzOiAqLworI2RlZmluZSBDTEtFTkFCX0FMV0FZUwkJMAkvKiAgQ2xvY2sgYWx3YXlzIGVuYWJsZWQuICovCisjZGVmaW5lIENMS0VOQUJfSU5ERVgJCTEJLyogIENsb2NrIGlzIGVuYWJsZWQgYnkgaW5kZXguICovCiAKLS8vIENsa011bHQgdmFsdWVzOgotI2RlZmluZSBDTEtNVUxUXzRYIAkJMAkvLyA0eCBjbG9jayBtdWx0aXBsaWVyLgotI2RlZmluZSBDTEtNVUxUXzJYIAkJMQkvLyAyeCBjbG9jayBtdWx0aXBsaWVyLgotI2RlZmluZSBDTEtNVUxUXzFYIAkJMgkvLyAxeCBjbG9jayBtdWx0aXBsaWVyLgorLyogIENsa011bHQgdmFsdWVzOiAqLworI2RlZmluZSBDTEtNVUxUXzRYIAkJMAkvKiAgNHggY2xvY2sgbXVsdGlwbGllci4gKi8KKyNkZWZpbmUgQ0xLTVVMVF8yWCAJCTEJLyogIDJ4IGNsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIENMS01VTFRfMVggCQkyCS8qICAxeCBjbG9jayBtdWx0aXBsaWVyLiAqLwogCi0vLyBCaXQgRmllbGQgcG9zaXRpb25zIGluIENPVU5URVJfU0VUVVAgc3RydWN0dXJlOgotI2RlZmluZSBCRl9MT0FEU1JDCQk5CS8vIFByZWxvYWQgdHJpZ2dlci4KLSNkZWZpbmUgQkZfSU5EWFNSQwkJNwkvLyBJbmRleCBzb3VyY2UuCi0jZGVmaW5lIEJGX0lORFhQT0wJCTYJLy8gSW5kZXggcG9sYXJpdHkuCi0jZGVmaW5lIEJGX0NMS1NSQwkJNAkvLyBDbG9jayBzb3VyY2UuCi0jZGVmaW5lIEJGX0NMS1BPTAkJMwkvLyBDbG9jayBwb2xhcml0eS9jb3VudCBkaXJlY3Rpb24uCi0jZGVmaW5lIEJGX0NMS01VTFQJCTEJLy8gQ2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQkZfQ0xLRU5BQgkJMAkvLyBDbG9jayBlbmFibGUuCisvKiAgQml0IEZpZWxkIHBvc2l0aW9ucyBpbiBDT1VOVEVSX1NFVFVQIHN0cnVjdHVyZTogKi8KKyNkZWZpbmUgQkZfTE9BRFNSQwkJOQkvKiAgUHJlbG9hZCB0cmlnZ2VyLiAqLworI2RlZmluZSBCRl9JTkRYU1JDCQk3CS8qICBJbmRleCBzb3VyY2UuICovCisjZGVmaW5lIEJGX0lORFhQT0wJCTYJLyogIEluZGV4IHBvbGFyaXR5LiAqLworI2RlZmluZSBCRl9DTEtTUkMJCTQJLyogIENsb2NrIHNvdXJjZS4gKi8KKyNkZWZpbmUgQkZfQ0xLUE9MCQkzCS8qICBDbG9jayBwb2xhcml0eS9jb3VudCBkaXJlY3Rpb24uICovCisjZGVmaW5lIEJGX0NMS01VTFQJCTEJLyogIENsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIEJGX0NMS0VOQUIJCTAJLyogIENsb2NrIGVuYWJsZS4gKi8KIAotLy8gRW51bWVyYXRlZCBjb3VudGVyIG9wZXJhdGluZyBtb2RlcyBzcGVjaWZpZWQgYnkgQ2xrU3JjIGJpdCBmaWVsZCBpbgotLy8gYSBDT1VOVEVSX1NFVFVQLgorLyogIEVudW1lcmF0ZWQgY291bnRlciBvcGVyYXRpbmcgbW9kZXMgc3BlY2lmaWVkIGJ5IENsa1NyYyBiaXQgZmllbGQgaW4gKi8KKy8qICBhIENPVU5URVJfU0VUVVAuICovCiAKLSNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLy8gQ291bnRlcjogRU5DX0MgY2xvY2ssIEVOQ19ECi0JCQkJCS8vIGRpcmVjdGlvbi4KLSNkZWZpbmUgQ0xLU1JDX1RJTUVSCQkyCS8vIFRpbWVyOiBTWVNfQyBjbG9jaywKLQkJCQkJLy8gZGlyZWN0aW9uIHNwZWNpZmllZCBieQotCQkJCQkvLyBDbGtQb2wuCi0jZGVmaW5lIENMS1NSQ19FWFRFTkRFUgkJMwkvLyBFeHRlbmRlcjogT1ZSX0EgY2xvY2ssCi0JCQkJCS8vIEVOQ19EIGRpcmVjdGlvbi4KKyNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLyogIENvdW50ZXI6IEVOQ19DIGNsb2NrLCBFTkNfRCAqLworCQkJCQkvKiAgZGlyZWN0aW9uLiAqLworI2RlZmluZSBDTEtTUkNfVElNRVIJCTIJLyogIFRpbWVyOiBTWVNfQyBjbG9jaywgKi8KKwkJCQkJLyogIGRpcmVjdGlvbiBzcGVjaWZpZWQgYnkgKi8KKwkJCQkJLyogIENsa1BvbC4gKi8KKyNkZWZpbmUgQ0xLU1JDX0VYVEVOREVSCQkzCS8qICBFeHRlbmRlcjogT1ZSX0EgY2xvY2ssICovCisJCQkJCS8qICBFTkNfRCBkaXJlY3Rpb24uICovCiAKLS8vIEVudW1lcmF0ZWQgY291bnRlciBjbG9jayBtdWx0aXBsaWVycy4KKy8qICBFbnVtZXJhdGVkIGNvdW50ZXIgY2xvY2sgbXVsdGlwbGllcnMuICovCiAKLSNkZWZpbmUgTVVMVF9YMAkJCTB4MDAwMwkvLyBTdXBwb3J0cyBubyBtdWx0aXBsaWVyczsKLQkJCQkJLy8gZml4ZWQgcGh5c2ljYWwgbXVsdGlwbGllciA9Ci0JCQkJCS8vIDMuCi0jZGVmaW5lIE1VTFRfWDEJCQkweDAwMDIJLy8gU3VwcG9ydHMgbXVsdGlwbGllciB4MTsKLQkJCQkJLy8gZml4ZWQgcGh5c2ljYWwgbXVsdGlwbGllciA9Ci0JCQkJCS8vIDIuCi0jZGVmaW5lIE1VTFRfWDIJCQkweDAwMDEJLy8gU3VwcG9ydHMgbXVsdGlwbGllcnMgeDEsCi0JCQkJCS8vIHgyOyBwaHlzaWNhbCBtdWx0aXBsaWVycyA9Ci0JCQkJCS8vIDEgb3IgMi4KLSNkZWZpbmUgTVVMVF9YNAkJCTB4MDAwMAkvLyBTdXBwb3J0cyBtdWx0aXBsaWVycyB4MSwKLQkJCQkJLy8geDIsIHg0OyBwaHlzaWNhbAotCQkJCQkvLyBtdWx0aXBsaWVycyA9IDAsIDEgb3IgMi4KKyNkZWZpbmUgTVVMVF9YMAkJCTB4MDAwMwkvKiAgU3VwcG9ydHMgbm8gbXVsdGlwbGllcnM7ICovCisJCQkJCS8qICBmaXhlZCBwaHlzaWNhbCBtdWx0aXBsaWVyID0gKi8KKwkJCQkJLyogIDMuICovCisjZGVmaW5lIE1VTFRfWDEJCQkweDAwMDIJLyogIFN1cHBvcnRzIG11bHRpcGxpZXIgeDE7ICovCisJCQkJCS8qICBmaXhlZCBwaHlzaWNhbCBtdWx0aXBsaWVyID0gKi8KKwkJCQkJLyogIDIuICovCisjZGVmaW5lIE1VTFRfWDIJCQkweDAwMDEJLyogIFN1cHBvcnRzIG11bHRpcGxpZXJzIHgxLCAqLworCQkJCQkvKiAgeDI7IHBoeXNpY2FsIG11bHRpcGxpZXJzID0gKi8KKwkJCQkJLyogIDEgb3IgMi4gKi8KKyNkZWZpbmUgTVVMVF9YNAkJCTB4MDAwMAkvKiAgU3VwcG9ydHMgbXVsdGlwbGllcnMgeDEsICovCisJCQkJCS8qICB4MiwgeDQ7IHBoeXNpY2FsICovCisJCQkJCS8qICBtdWx0aXBsaWVycyA9IDAsIDEgb3IgMi4gKi8KIAotLy8gU2FuaXR5LWNoZWNrIGxpbWl0cyBmb3IgcGFyYW1ldGVycy4KKy8qICBTYW5pdHktY2hlY2sgbGltaXRzIGZvciBwYXJhbWV0ZXJzLiAqLwogCi0jZGVmaW5lIE5VTV9DT1VOVEVSUwkJNgkvLyBNYXhpbXVtIHZhbGlkIGNvdW50ZXIKLQkJCQkJLy8gbG9naWNhbCBjaGFubmVsIG51bWJlci4KKyNkZWZpbmUgTlVNX0NPVU5URVJTCQk2CS8qICBNYXhpbXVtIHZhbGlkIGNvdW50ZXIgKi8KKwkJCQkJLyogIGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIuICovCiAjZGVmaW5lIE5VTV9JTlRTT1VSQ0VTCQk0CiAjZGVmaW5lIE5VTV9MQVRDSFNPVVJDRVMJNAogI2RlZmluZSBOVU1fQ0xLTVVMVFMJCTQKQEAgLTcwOCw1OSArNjUzLDU5IEBACiAjZGVmaW5lIE5VTV9JTkRFWFNPVVJDRVMJMgogI2RlZmluZSBOVU1fTE9BRFRSSUdTCQk0CiAKLS8vIEJpdCBmaWVsZCBwb3NpdGlvbnMgaW4gQ1JBIGFuZCBDUkIgY291bnRlciBjb250cm9sIHJlZ2lzdGVycy4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQSBhbmQgQ1JCIGNvdW50ZXIgY29udHJvbCByZWdpc3RlcnMuICovCiAKLS8vIEJpdCBmaWVsZCBwb3NpdGlvbnMgaW4gQ1JBOgotI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19CCTE0CS8vICAgQiBpbmRleCBzb3VyY2UuCi0jZGVmaW5lIENSQUJJVF9DTEtTUkNfQgkJMTIJLy8gICBCIGNsb2NrIHNvdXJjZS4KLSNkZWZpbmUgQ1JBQklUX0lORFhQT0xfQQkxMQkvLyAgIEEgaW5kZXggcG9sYXJpdHkuCi0jZGVmaW5lIENSQUJJVF9MT0FEU1JDX0EJIDkJLy8gICBBIHByZWxvYWQgdHJpZ2dlci4KLSNkZWZpbmUgQ1JBQklUX0NMS01VTFRfQQkgNwkvLyAgIEEgY2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQ1JBQklUX0lOVFNSQ19BCQkgNQkvLyAgIEEgaW50ZXJydXB0IHNvdXJjZS4KLSNkZWZpbmUgQ1JBQklUX0NMS1BPTF9BCQkgNAkvLyAgIEEgY2xvY2sgcG9sYXJpdHkuCi0jZGVmaW5lIENSQUJJVF9JTkRYU1JDX0EJIDIJLy8gICBBIGluZGV4IHNvdXJjZS4KLSNkZWZpbmUgQ1JBQklUX0NMS1NSQ19BCQkgMAkvLyAgIEEgY2xvY2sgc291cmNlLgorLyogIEJpdCBmaWVsZCBwb3NpdGlvbnMgaW4gQ1JBOiAqLworI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19CCTE0CS8qICAgIEIgaW5kZXggc291cmNlLiAqLworI2RlZmluZSBDUkFCSVRfQ0xLU1JDX0IJCTEyCS8qICAgIEIgY2xvY2sgc291cmNlLiAqLworI2RlZmluZSBDUkFCSVRfSU5EWFBPTF9BCTExCS8qICAgIEEgaW5kZXggcG9sYXJpdHkuICovCisjZGVmaW5lIENSQUJJVF9MT0FEU1JDX0EJIDkJLyogICAgQSBwcmVsb2FkIHRyaWdnZXIuICovCisjZGVmaW5lIENSQUJJVF9DTEtNVUxUX0EJIDcJLyogICAgQSBjbG9jayBtdWx0aXBsaWVyLiAqLworI2RlZmluZSBDUkFCSVRfSU5UU1JDX0EJCSA1CS8qICAgIEEgaW50ZXJydXB0IHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JBQklUX0NMS1BPTF9BCQkgNAkvKiAgICBBIGNsb2NrIHBvbGFyaXR5LiAqLworI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19BCSAyCS8qICAgIEEgaW5kZXggc291cmNlLiAqLworI2RlZmluZSBDUkFCSVRfQ0xLU1JDX0EJCSAwCS8qICAgIEEgY2xvY2sgc291cmNlLiAqLwogCi0vLyBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQjoKLSNkZWZpbmUgQ1JCQklUX0lOVFJFU0VUQ01ECTE1CS8vICAgSW50ZXJydXB0IHJlc2V0IGNvbW1hbmQuCi0jZGVmaW5lIENSQkJJVF9JTlRSRVNFVF9CCTE0CS8vICAgQiBpbnRlcnJ1cHQgcmVzZXQgZW5hYmxlLgotI2RlZmluZSBDUkJCSVRfSU5UUkVTRVRfQQkxMwkvLyAgIEEgaW50ZXJydXB0IHJlc2V0IGVuYWJsZS4KLSNkZWZpbmUgQ1JCQklUX0NMS0VOQUJfQQkxMgkvLyAgIEEgY2xvY2sgZW5hYmxlLgotI2RlZmluZSBDUkJCSVRfSU5UU1JDX0IJCTEwCS8vICAgQiBpbnRlcnJ1cHQgc291cmNlLgotI2RlZmluZSBDUkJCSVRfTEFUQ0hTUkMJCSA4CS8vICAgQS9CIGxhdGNoIHNvdXJjZS4KLSNkZWZpbmUgQ1JCQklUX0xPQURTUkNfQgkgNgkvLyAgIEIgcHJlbG9hZCB0cmlnZ2VyLgotI2RlZmluZSBDUkJCSVRfQ0xLTVVMVF9CCSAzCS8vICAgQiBjbG9jayBtdWx0aXBsaWVyLgotI2RlZmluZSBDUkJCSVRfQ0xLRU5BQl9CCSAyCS8vICAgQiBjbG9jayBlbmFibGUuCi0jZGVmaW5lIENSQkJJVF9JTkRYUE9MX0IJIDEJLy8gICBCIGluZGV4IHBvbGFyaXR5LgotI2RlZmluZSBDUkJCSVRfQ0xLUE9MX0IJCSAwCS8vICAgQiBjbG9jayBwb2xhcml0eS4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQjogKi8KKyNkZWZpbmUgQ1JCQklUX0lOVFJFU0VUQ01ECTE1CS8qICAgIEludGVycnVwdCByZXNldCBjb21tYW5kLiAqLworI2RlZmluZSBDUkJCSVRfSU5UUkVTRVRfQgkxNAkvKiAgICBCIGludGVycnVwdCByZXNldCBlbmFibGUuICovCisjZGVmaW5lIENSQkJJVF9JTlRSRVNFVF9BCTEzCS8qICAgIEEgaW50ZXJydXB0IHJlc2V0IGVuYWJsZS4gKi8KKyNkZWZpbmUgQ1JCQklUX0NMS0VOQUJfQQkxMgkvKiAgICBBIGNsb2NrIGVuYWJsZS4gKi8KKyNkZWZpbmUgQ1JCQklUX0lOVFNSQ19CCQkxMAkvKiAgICBCIGludGVycnVwdCBzb3VyY2UuICovCisjZGVmaW5lIENSQkJJVF9MQVRDSFNSQwkJIDgJLyogICAgQS9CIGxhdGNoIHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JCQklUX0xPQURTUkNfQgkgNgkvKiAgICBCIHByZWxvYWQgdHJpZ2dlci4gKi8KKyNkZWZpbmUgQ1JCQklUX0NMS01VTFRfQgkgMwkvKiAgICBCIGNsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIENSQkJJVF9DTEtFTkFCX0IJIDIJLyogICAgQiBjbG9jayBlbmFibGUuICovCisjZGVmaW5lIENSQkJJVF9JTkRYUE9MX0IJIDEJLyogICAgQiBpbmRleCBwb2xhcml0eS4gKi8KKyNkZWZpbmUgQ1JCQklUX0NMS1BPTF9CCQkgMAkvKiAgICBCIGNsb2NrIHBvbGFyaXR5LiAqLwogCi0vLyBCaXQgZmllbGQgbWFza3MgZm9yIENSQSBhbmQgQ1JCLgorLyogIEJpdCBmaWVsZCBtYXNrcyBmb3IgQ1JBIGFuZCBDUkIuICovCiAKLSNkZWZpbmUgQ1JBTVNLX0lORFhTUkNfQgkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0lORFhTUkNfQikgKQotI2RlZmluZSBDUkFNU0tfQ0xLU1JDX0IJCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfQ0xLU1JDX0IpICkKLSNkZWZpbmUgQ1JBTVNLX0lORFhQT0xfQQkoICh1aW50MTZfdCkoIDEgPDwgQ1JBQklUX0lORFhQT0xfQSkgKQotI2RlZmluZSBDUkFNU0tfTE9BRFNSQ19BCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfTE9BRFNSQ19BKSApCi0jZGVmaW5lIENSQU1TS19DTEtNVUxUX0EJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9DTEtNVUxUX0EpICkKLSNkZWZpbmUgQ1JBTVNLX0lOVFNSQ19BCQkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0lOVFNSQ19BKSApCi0jZGVmaW5lIENSQU1TS19DTEtQT0xfQQkJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9DTEtQT0xfQSkgKQotI2RlZmluZSBDUkFNU0tfSU5EWFNSQ19BCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfSU5EWFNSQ19BKSApCi0jZGVmaW5lIENSQU1TS19DTEtTUkNfQQkJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9DTEtTUkNfQSkgKQorI2RlZmluZSBDUkFNU0tfSU5EWFNSQ19CCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0lORFhTUkNfQikpCisjZGVmaW5lIENSQU1TS19DTEtTUkNfQgkJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfQ0xLU1JDX0IpKQorI2RlZmluZSBDUkFNU0tfSU5EWFBPTF9BCSgodWludDE2X3QpKDEgPDwgQ1JBQklUX0lORFhQT0xfQSkpCisjZGVmaW5lIENSQU1TS19MT0FEU1JDX0EJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfTE9BRFNSQ19BKSkKKyNkZWZpbmUgQ1JBTVNLX0NMS01VTFRfQQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9DTEtNVUxUX0EpKQorI2RlZmluZSBDUkFNU0tfSU5UU1JDX0EJCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0lOVFNSQ19BKSkKKyNkZWZpbmUgQ1JBTVNLX0NMS1BPTF9BCQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9DTEtQT0xfQSkpCisjZGVmaW5lIENSQU1TS19JTkRYU1JDX0EJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfSU5EWFNSQ19BKSkKKyNkZWZpbmUgQ1JBTVNLX0NMS1NSQ19BCQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9DTEtTUkNfQSkpCiAKLSNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUQ01ECSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfSU5UUkVTRVRDTUQpICkKLSNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUX0IJKCAodWludDE2X3QpKCAxIDw8IENSQkJJVF9JTlRSRVNFVF9CKSApCi0jZGVmaW5lIENSQk1TS19JTlRSRVNFVF9BCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfSU5UUkVTRVRfQSkgKQotI2RlZmluZSBDUkJNU0tfQ0xLRU5BQl9BCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfQ0xLRU5BQl9BKSApCi0jZGVmaW5lIENSQk1TS19JTlRTUkNfQgkJKCAodWludDE2X3QpKCAzIDw8IENSQkJJVF9JTlRTUkNfQikgKQotI2RlZmluZSBDUkJNU0tfTEFUQ0hTUkMJCSggKHVpbnQxNl90KSggMyA8PCBDUkJCSVRfTEFUQ0hTUkMpICkKLSNkZWZpbmUgQ1JCTVNLX0xPQURTUkNfQgkoICh1aW50MTZfdCkoIDMgPDwgQ1JCQklUX0xPQURTUkNfQikgKQotI2RlZmluZSBDUkJNU0tfQ0xLTVVMVF9CCSggKHVpbnQxNl90KSggMyA8PCBDUkJCSVRfQ0xLTVVMVF9CKSApCi0jZGVmaW5lIENSQk1TS19DTEtFTkFCX0IJKCAodWludDE2X3QpKCAxIDw8IENSQkJJVF9DTEtFTkFCX0IpICkKLSNkZWZpbmUgQ1JCTVNLX0lORFhQT0xfQgkoICh1aW50MTZfdCkoIDEgPDwgQ1JCQklUX0lORFhQT0xfQikgKQotI2RlZmluZSBDUkJNU0tfQ0xLUE9MX0IJCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfQ0xLUE9MX0IpICkKKyNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUQ01ECSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0lOVFJFU0VUQ01EKSkKKyNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUX0IJKCh1aW50MTZfdCkoMSA8PCBDUkJCSVRfSU5UUkVTRVRfQikpCisjZGVmaW5lIENSQk1TS19JTlRSRVNFVF9BCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0lOVFJFU0VUX0EpKQorI2RlZmluZSBDUkJNU0tfQ0xLRU5BQl9BCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0NMS0VOQUJfQSkpCisjZGVmaW5lIENSQk1TS19JTlRTUkNfQgkJKCh1aW50MTZfdCkoMyA8PCBDUkJCSVRfSU5UU1JDX0IpKQorI2RlZmluZSBDUkJNU0tfTEFUQ0hTUkMJCSgodWludDE2X3QpKDMgPDwgQ1JCQklUX0xBVENIU1JDKSkKKyNkZWZpbmUgQ1JCTVNLX0xPQURTUkNfQgkoKHVpbnQxNl90KSgzIDw8IENSQkJJVF9MT0FEU1JDX0IpKQorI2RlZmluZSBDUkJNU0tfQ0xLTVVMVF9CCSgodWludDE2X3QpKDMgPDwgQ1JCQklUX0NMS01VTFRfQikpCisjZGVmaW5lIENSQk1TS19DTEtFTkFCX0IJKCh1aW50MTZfdCkoMSA8PCBDUkJCSVRfQ0xLRU5BQl9CKSkKKyNkZWZpbmUgQ1JCTVNLX0lORFhQT0xfQgkoKHVpbnQxNl90KSgxIDw8IENSQkJJVF9JTkRYUE9MX0IpKQorI2RlZmluZSBDUkJNU0tfQ0xLUE9MX0IJCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0NMS1BPTF9CKSkKIAotI2RlZmluZSBDUkJNU0tfSU5UQ1RSTAkJKCBDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSB8IENSQk1TS19JTlRSRVNFVF9CICkJLy8gSW50ZXJydXB0IHJlc2V0IGNvbnRyb2wgYml0cy4KKyNkZWZpbmUgQ1JCTVNLX0lOVENUUkwJCShDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSB8IENSQk1TS19JTlRSRVNFVF9CKQkvKiAgSW50ZXJydXB0IHJlc2V0IGNvbnRyb2wgYml0cy4gKi8KIAotLy8gQml0IGZpZWxkIHBvc2l0aW9ucyBmb3Igc3RhbmRhcmRpemVkIFNFVFVQIHN0cnVjdHVyZS4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGZvciBzdGFuZGFyZGl6ZWQgU0VUVVAgc3RydWN0dXJlLiAqLwogCiAjZGVmaW5lIFNUREJJVF9JTlRTUkMJCTEzCiAjZGVmaW5lIFNUREJJVF9MQVRDSFNSQwkJMTEKQEAgLTc3MiwxOSArNzE3LDE4IEBACiAjZGVmaW5lIFNUREJJVF9DTEtNVUxUCQkgMQogI2RlZmluZSBTVERCSVRfQ0xLRU5BQgkJIDAKIAotLy8gQml0IGZpZWxkIG1hc2tzIGZvciBzdGFuZGFyZGl6ZWQgU0VUVVAgc3RydWN0dXJlLgorLyogIEJpdCBmaWVsZCBtYXNrcyBmb3Igc3RhbmRhcmRpemVkIFNFVFVQIHN0cnVjdHVyZS4gKi8KIAotI2RlZmluZSBTVERNU0tfSU5UU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0lOVFNSQyAgICkgKQotI2RlZmluZSBTVERNU0tfTEFUQ0hTUkMJCSggKHVpbnQxNl90KSggMyA8PCBTVERCSVRfTEFUQ0hTUkMgKSApCi0jZGVmaW5lIFNURE1TS19MT0FEU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0xPQURTUkMgICkgKQotI2RlZmluZSBTVERNU0tfSU5EWFNSQwkJKCAodWludDE2X3QpKCAxIDw8IFNUREJJVF9JTkRYU1JDICApICkKLSNkZWZpbmUgU1RETVNLX0lORFhQT0wJCSggKHVpbnQxNl90KSggMSA8PCBTVERCSVRfSU5EWFBPTCAgKSApCi0jZGVmaW5lIFNURE1TS19DTEtTUkMJCSggKHVpbnQxNl90KSggMyA8PCBTVERCSVRfQ0xLU1JDICAgKSApCi0jZGVmaW5lIFNURE1TS19DTEtQT0wJCSggKHVpbnQxNl90KSggMSA8PCBTVERCSVRfQ0xLUE9MICAgKSApCi0jZGVmaW5lIFNURE1TS19DTEtNVUxUCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0NMS01VTFQgICkgKQotI2RlZmluZSBTVERNU0tfQ0xLRU5BQgkJKCAodWludDE2X3QpKCAxIDw8IFNUREJJVF9DTEtFTkFCICApICkKKyNkZWZpbmUgU1RETVNLX0lOVFNSQwkJKCh1aW50MTZfdCkoMyA8PCBTVERCSVRfSU5UU1JDKSkKKyNkZWZpbmUgU1RETVNLX0xBVENIU1JDCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9MQVRDSFNSQykpCisjZGVmaW5lIFNURE1TS19MT0FEU1JDCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9MT0FEU1JDKSkKKyNkZWZpbmUgU1RETVNLX0lORFhTUkMJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0lORFhTUkMpKQorI2RlZmluZSBTVERNU0tfSU5EWFBPTAkJKCh1aW50MTZfdCkoMSA8PCBTVERCSVRfSU5EWFBPTCkpCisjZGVmaW5lIFNURE1TS19DTEtTUkMJCSgodWludDE2X3QpKDMgPDwgU1REQklUX0NMS1NSQykpCisjZGVmaW5lIFNURE1TS19DTEtQT0wJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0NMS1BPTCkpCisjZGVmaW5lIFNURE1TS19DTEtNVUxUCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9DTEtNVUxUKSkKKyNkZWZpbmUgU1RETVNLX0NMS0VOQUIJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0NMS0VOQUIpKQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIC8qIHR5cGVkZWYgc3RydWN0IGluZGV4Q291bnRlciAqLwogLyogeyAqLwpAQCAtNzk1LDggKzczOSw4IEBACiAvKiAgIHVuc2lnbmVkIGludCBlbmM7ICovCiAvKiB9Q2FsbENvdW50ZXI7ICovCiAKLXR5cGVkZWYgc3RydWN0IGJ1ZmZlckRNQSB7CitzdHJ1Y3QgYnVmZmVyRE1BIHsKIAlkbWFfYWRkcl90IFBoeXNpY2FsQmFzZTsKIAl2b2lkICpMb2dpY2FsQmFzZTsKIAl1aW50MzJfdCBETUFIYW5kbGU7Ci19IERNQUJVRjsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRmZDVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMCwwICsxLDg3MCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKyAgICBTa2VsZXRvbiBjb2RlIGZvciBhIENvbWVkaSBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworLyoKK0RyaXZlcjogc2VyaWFsMjAwMgorRGVzY3JpcHRpb246IERyaXZlciBmb3Igc2VyaWFsIGNvbm5lY3RlZCBoYXJkd2FyZQorRGV2aWNlczoKK0F1dGhvcjogQW5kZXJzIEJsb21kZWxsCitVcGRhdGVkOiBGcmksICA3IEp1biAyMDAyIDEyOjU2OjQ1IC0wNzAwCitTdGF0dXM6IGluIGRldmVsb3BtZW50CisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vdGVybWlvcy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCBzZXJpYWwyMDAyX2JvYXJkc1tdID0geworCXsKKyAgICAgIG5hbWU6CSJzZXJpYWwyMDAyIn0KK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHNlcmlhbDIwMDJfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCB7CisKKwkvLyBIQUNLLi4uCisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgY29tZWRpX2tyYW5nZSByYW5nZTsKK307CisKKworc3RydWN0IHNlcmlhbDIwMDJfcHJpdmF0ZSB7CisKKwlpbnQgcG9ydDsJCS8vIC9kZXYvdHR5Uzxwb3J0PgorCWludCBzcGVlZDsJCS8vIGJhdWRyYXRlCisJc3RydWN0IGZpbGUgKnR0eTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMzJdOworCXVuc2lnbmVkIGNoYXIgZGlnaXRhbF9pbl9tYXBwaW5nWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGRpZ2l0YWxfb3V0X21hcHBpbmdbMzJdOworCXVuc2lnbmVkIGNoYXIgYW5hbG9nX2luX21hcHBpbmdbMzJdOworCXVuc2lnbmVkIGNoYXIgYW5hbG9nX291dF9tYXBwaW5nWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGVuY29kZXJfaW5fbWFwcGluZ1szMl07CisJc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCBpbl9yYW5nZVszMl0sIG91dF9yYW5nZVszMl07Cit9OworCisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgc2VyaWFsMjAwMl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3NlcmlhbDIwMDIgPSB7CisgICAgICBkcml2ZXJfbmFtZToic2VyaWFsMjAwMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6c2VyaWFsMjAwMl9hdHRhY2gsCisgICAgICBkZXRhY2g6c2VyaWFsMjAwMl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZzZXJpYWwyMDAyX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHNlcmlhbDIwMDJfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzZXJpYWwyMDAyX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdHJ1Y3Qgc2VyaWFsX2RhdGEgeworCWVudW0geyBpc19pbnZhbGlkLCBpc19kaWdpdGFsLCBpc19jaGFubmVsIH0ga2luZDsKKwlpbnQgaW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKK307CisKK3N0YXRpYyBsb25nIHR0eV9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgb3AsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisjaWZkZWYgSEFWRV9VTkxPQ0tFRF9JT0NUTAorICAJaWYgKGYtPmZfb3AtPnVubG9ja2VkX2lvY3RsKSB7CisJCXJldHVybiBmLT5mX29wLT51bmxvY2tlZF9pb2N0bChmLCBvcCwgcGFyYW0pOworCX0KKyNlbmRpZgorCWlmIChmLT5mX29wLT5pb2N0bCkgeworCSAgCXJldHVybiBmLT5mX29wLT5pb2N0bChmLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZiwgb3AsIHBhcmFtKTsKKwl9CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgdHR5X3dyaXRlKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgcmVzdWx0OworCW1tX3NlZ21lbnRfdCBvbGRmczsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJZi0+Zl9wb3MgPSAwOworCXJlc3VsdCA9IGYtPmZfb3AtPndyaXRlKGYsIGJ1ZiwgY291bnQsICZmLT5mX3Bvcyk7CisJc2V0X2ZzKG9sZGZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjaWYgMAorLyoKKyAqIE9uIDIuNi4yNi4zIHRoaXMgb2NjYWlzb25hbGx5IGdhdmUgbWUgcGFnZSBmYXVsdHMsIHdvcmtlZCBhcm91bmQgYnkKKyAqIHNldHRpbmdzLmNfY2NbVk1JTl0gPSAwOyBzZXR0aW5ncy5jX2NjW1ZUSU1FXSA9IDAKKyAqLworc3RhdGljIGludCB0dHlfYXZhaWxhYmxlKHN0cnVjdCBmaWxlICpmKQoreworCWxvbmcgcmVzdWx0ID0gMDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCXR0eV9pb2N0bChmLCBGSU9OUkVBRCwgKHVuc2lnbmVkIGxvbmcpJnJlc3VsdCk7CisJc2V0X2ZzKG9sZGZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHR5X3JlYWQoc3RydWN0IGZpbGUgKmYsIGludCB0aW1lb3V0KQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSAtMTsKKwlpZiAoIUlTX0VSUihmKSkgeworCQltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwkJb2xkZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCWlmIChmLT5mX29wLT5wb2xsKSB7CisJCQlzdHJ1Y3QgcG9sbF93cXVldWVzIHRhYmxlOworCQkJc3RydWN0IHRpbWV2YWwgc3RhcnQsIG5vdzsKKworCQkJZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CisJCQlwb2xsX2luaXR3YWl0KCZ0YWJsZSk7CisJCQl3aGlsZSAoMSkgeworCQkJCWxvbmcgZWxhcHNlZDsKKwkJCQlpbnQgbWFzazsKKworCQkJCW1hc2sgPSBmLT5mX29wLT5wb2xsKGYsICZ0YWJsZS5wdCk7CisJCQkJaWYgKG1hc2sgJiAoUE9MTFJETk9STSB8IFBPTExSREJBTkQgfCBQT0xMSU4gfAorCQkJCQkJUE9MTEhVUCB8IFBPTExFUlIpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CisJCQkJZWxhcHNlZCA9CisJCQkJCSgxMDAwMDAwICogKG5vdy50dl9zZWMgLSBzdGFydC50dl9zZWMpICsKKwkJCQkJbm93LnR2X3VzZWMgLSBzdGFydC50dl91c2VjKTsKKwkJCQlpZiAoZWxhcHNlZCA+IHRpbWVvdXQpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJc2NoZWR1bGVfdGltZW91dCgoKHRpbWVvdXQgLQorCQkJCQkJCWVsYXBzZWQpICogSFopIC8gMTAwMDApOworCQkJfQorCQkJcG9sbF9mcmVld2FpdCgmdGFibGUpOworCQkJeworCQkJICB1bnNpZ25lZCBjaGFyIGNoOworCisJCQkgIGYtPmZfcG9zID0gMDsKKwkJCSAgaWYgKGYtPmZfb3AtPnJlYWQoZiwgJmNoLCAxLCAmZi0+Zl9wb3MpID09IDEpIHsKKwkJCSAgICByZXN1bHQgPSBjaDsKKwkJCSAgfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgcG9sbCwgYnVzeSB3YWl0ICovCisJCQlpbnQgcmV0cmllcyA9IDA7CisJCQl3aGlsZSAoMSkgeworCQkJICAJdW5zaWduZWQgY2hhciBjaDsKKworCQkJCXJldHJpZXMrKzsKKwkJCQlpZiAocmV0cmllcyA+PSB0aW1lb3V0KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWYtPmZfcG9zID0gMDsKKwkJCQlpZiAoZi0+Zl9vcC0+cmVhZChmLCAmY2gsIDEsICZmLT5mX3BvcykgPT0gMSkgeworCQkJCSAgCXJlc3VsdCA9IGNoOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY29tZWRpX3VkZWxheSgxMDApOworCQkJfQorCQl9CisJCXNldF9mcyhvbGRmcyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHR0eV9zZXRzcGVlZChzdHJ1Y3QgZmlsZSAqZiwgaW50IHNwZWVkKQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJeworCQkvLyBTZXQgc3BlZWQKKwkJc3RydWN0IHRlcm1pb3Mgc2V0dGluZ3M7CisKKwkJdHR5X2lvY3RsKGYsIFRDR0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKy8vICAgIHByaW50aygiU3BlZWQ6ICVkXG4iLCBzZXR0aW5ncy5jX2NmbGFnICYgKENCQVVEIHwgQ0JBVURFWCkpOworCQlzZXR0aW5ncy5jX2lmbGFnID0gMDsKKwkJc2V0dGluZ3MuY19vZmxhZyA9IDA7CisJCXNldHRpbmdzLmNfbGZsYWcgPSAwOworCQlzZXR0aW5ncy5jX2NmbGFnID0gQ0xPQ0FMIHwgQ1M4IHwgQ1JFQUQ7CisJCXNldHRpbmdzLmNfY2NbVk1JTl0gPSAwOworCQlzZXR0aW5ncy5jX2NjW1ZUSU1FXSA9IDA7CisJCXN3aXRjaCAoc3BlZWQpIHsKKwkJY2FzZSAyNDAwOnsKKwkJCQlzZXR0aW5ncy5jX2NmbGFnIHw9IEIyNDAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNDgwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCNDgwMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDk2MDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjk2MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxOTIwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCMTkyMDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAzODQwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCMzg0MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA1NzYwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCNTc2MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxMTUyMDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjExNTIwMDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OnsKKwkJCQlzZXR0aW5ncy5jX2NmbGFnIHw9IEI5NjAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJdHR5X2lvY3RsKGYsIFRDU0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKy8vICAgIHByaW50aygiU3BlZWQ6ICVkXG4iLCBzZXR0aW5ncy5jX2NmbGFnICYgKENCQVVEIHwgQ0JBVURFWCkpOworCX0KKwl7CisJCS8vIFNldCBsb3cgbGF0ZW5jeQorCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXR0aW5nczsKKworCQl0dHlfaW9jdGwoZiwgVElPQ0dTRVJJQUwsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisJCXNldHRpbmdzLmZsYWdzIHw9IEFTWU5DX0xPV19MQVRFTkNZOworCQl0dHlfaW9jdGwoZiwgVElPQ1NTRVJJQUwsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisJfQorCisJc2V0X2ZzKG9sZGZzKTsKK30KKworc3RhdGljIHZvaWQgcG9sbF9kaWdpdGFsKHN0cnVjdCBmaWxlICpmLCBpbnQgY2hhbm5lbCkKK3sKKwljaGFyIGNtZDsKKworCWNtZCA9IDB4NDAgfCAoY2hhbm5lbCAmIDB4MWYpOworCXR0eV93cml0ZShmLCAmY21kLCAxKTsKK30KKworc3RhdGljIHZvaWQgcG9sbF9jaGFubmVsKHN0cnVjdCBmaWxlICpmLCBpbnQgY2hhbm5lbCkKK3sKKwljaGFyIGNtZDsKKworCWNtZCA9IDB4NjAgfCAoY2hhbm5lbCAmIDB4MWYpOworCXR0eV93cml0ZShmLCAmY21kLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBzZXJpYWxfZGF0YSBzZXJpYWxfcmVhZChzdHJ1Y3QgZmlsZSAqZiwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHNlcmlhbF9kYXRhIHJlc3VsdDsKKwlpbnQgbGVuZ3RoOworCisJcmVzdWx0LmtpbmQgPSBpc19pbnZhbGlkOworCXJlc3VsdC5pbmRleCA9IDA7CisJcmVzdWx0LnZhbHVlID0gMDsKKwlsZW5ndGggPSAwOworCXdoaWxlICgxKSB7CisJCWludCBkYXRhID0gdHR5X3JlYWQoZiwgdGltZW91dCk7CisKKwkJbGVuZ3RoKys7CisJCWlmIChkYXRhIDwgMCkgeworCQkJcHJpbnRrKCJzZXJpYWwyMDAyIGVycm9yXG4iKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGRhdGEgJiAweDgwKSB7CisJCQlyZXN1bHQudmFsdWUgPSAocmVzdWx0LnZhbHVlIDw8IDcpIHwgKGRhdGEgJiAweDdmKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsZW5ndGggPT0gMSkgeworCQkJCXN3aXRjaCAoKGRhdGEgPj4gNSkgJiAweDAzKSB7CisJCQkJY2FzZSAwOnsKKwkJCQkJCXJlc3VsdC52YWx1ZSA9IDA7CisJCQkJCQlyZXN1bHQua2luZCA9IGlzX2RpZ2l0YWw7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOnsKKwkJCQkJCXJlc3VsdC52YWx1ZSA9IDE7CisJCQkJCQlyZXN1bHQua2luZCA9IGlzX2RpZ2l0YWw7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXN1bHQudmFsdWUgPQorCQkJCQkocmVzdWx0LgorCQkJCQl2YWx1ZSA8PCAyKSB8ICgoZGF0YSAmIDB4NjApID4+IDUpOworCQkJCXJlc3VsdC5raW5kID0gaXNfY2hhbm5lbDsKKwkJCX0KKwkJCXJlc3VsdC5pbmRleCA9IGRhdGEgJiAweDFmOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfd3JpdGUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBzZXJpYWxfZGF0YSBkYXRhKQoreworCWlmIChkYXRhLmtpbmQgPT0gaXNfZGlnaXRhbCkgeworCQl1bnNpZ25lZCBjaGFyIGNoID0KKwkJCSgoZGF0YS52YWx1ZSA8PCA1KSAmIDB4MjApIHwgKGRhdGEuaW5kZXggJiAweDFmKTsKKwkJdHR5X3dyaXRlKGYsICZjaCwgMSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBjaFs2XTsKKwkJaW50IGkgPSAwOworCQlpZiAoZGF0YS52YWx1ZSA+PSAoMUwgPDwgMzApKSB7CisJCQljaFtpXSA9IDB4ODAgfCAoKGRhdGEudmFsdWUgPj4gMzApICYgMHgwMyk7CisJCQlpKys7CisJCX0KKwkJaWYgKGRhdGEudmFsdWUgPj0gKDFMIDw8IDIzKSkgeworCQkJY2hbaV0gPSAweDgwIHwgKChkYXRhLnZhbHVlID4+IDIzKSAmIDB4N2YpOworCQkJaSsrOworCQl9CisJCWlmIChkYXRhLnZhbHVlID49ICgxTCA8PCAxNikpIHsKKwkJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiAxNikgJiAweDdmKTsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGF0YS52YWx1ZSA+PSAoMUwgPDwgOSkpIHsKKwkJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiA5KSAmIDB4N2YpOworCQkJaSsrOworCQl9CisJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiAyKSAmIDB4N2YpOworCQlpKys7CisJCWNoW2ldID0gKChkYXRhLnZhbHVlIDw8IDUpICYgMHg2MCkgfCAoZGF0YS5pbmRleCAmIDB4MWYpOworCQlpKys7CisJCXR0eV93cml0ZShmLCBjaCwgaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfMjAwMl9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWNoYXIgcG9ydFsyMF07CisKKwlzcHJpbnRmKHBvcnQsICIvZGV2L3R0eVMlZCIsIGRldnByaXYtPnBvcnQpOworCWRldnByaXYtPnR0eSA9IGZpbHBfb3Blbihwb3J0LCAwLCBPX1JEV1IpOworCWlmIChJU19FUlIoZGV2cHJpdi0+dHR5KSkgeworCQlwcmludGsoInNlcmlhbF8yMDAyOiBmaWxlIG9wZW4gZXJyb3IgPSAlbGRcbiIsCisJCQlQVFJfRVJSKGRldnByaXYtPnR0eSkpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb25maWdfdCB7CisKKwkJCWludCBraW5kOworCQkJaW50IGJpdHM7CisJCQlpbnQgbWluOworCQkJaW50IG1heDsKKwkJfTsKKworCQlzdHJ1Y3QgY29uZmlnX3QgZGlnX2luX2NvbmZpZ1szMl07CisJCXN0cnVjdCBjb25maWdfdCBkaWdfb3V0X2NvbmZpZ1szMl07CisJCXN0cnVjdCBjb25maWdfdCBjaGFuX2luX2NvbmZpZ1szMl07CisJCXN0cnVjdCBjb25maWdfdCBjaGFuX291dF9jb25maWdbMzJdOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJZGlnX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKKwkJCWRpZ19pbl9jb25maWdbaV0uYml0cyA9IDA7CisJCQlkaWdfaW5fY29uZmlnW2ldLm1pbiA9IDA7CisJCQlkaWdfaW5fY29uZmlnW2ldLm1heCA9IDA7CisJCQlkaWdfb3V0X2NvbmZpZ1tpXS5raW5kID0gMDsKKwkJCWRpZ19vdXRfY29uZmlnW2ldLmJpdHMgPSAwOworCQkJZGlnX291dF9jb25maWdbaV0ubWluID0gMDsKKwkJCWRpZ19vdXRfY29uZmlnW2ldLm1heCA9IDA7CisJCQljaGFuX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKKwkJCWNoYW5faW5fY29uZmlnW2ldLmJpdHMgPSAwOworCQkJY2hhbl9pbl9jb25maWdbaV0ubWluID0gMDsKKwkJCWNoYW5faW5fY29uZmlnW2ldLm1heCA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0ua2luZCA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0uYml0cyA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0ubWluID0gMDsKKwkJCWNoYW5fb3V0X2NvbmZpZ1tpXS5tYXggPSAwOworCQl9CisKKwkJdHR5X3NldHNwZWVkKGRldnByaXYtPnR0eSwgZGV2cHJpdi0+c3BlZWQpOworCQlwb2xsX2NoYW5uZWwoZGV2cHJpdi0+dHR5LCAzMSk7CS8vIFN0YXJ0IHJlYWRpbmcgY29uZmlndXJhdGlvbgorCQl3aGlsZSAoMSkgeworCQkJc3RydWN0IHNlcmlhbF9kYXRhIGRhdGE7CisKKwkJCWRhdGEgPSBzZXJpYWxfcmVhZChkZXZwcml2LT50dHksIDEwMDApOworCQkJaWYgKGRhdGEua2luZCAhPSBpc19jaGFubmVsIHx8IGRhdGEuaW5kZXggIT0gMzEKKwkJCQl8fCAhKGRhdGEudmFsdWUgJiAweGUwKSkgeworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgY29tbWFuZCwgY2hhbm5lbCwga2luZDsKKwkJCQlzdHJ1Y3QgY29uZmlnX3QgKmN1cl9jb25maWcgPSAwOworCisJCQkJY2hhbm5lbCA9IGRhdGEudmFsdWUgJiAweDFmOworCQkJCWtpbmQgPSAoZGF0YS52YWx1ZSA+PiA1KSAmIDB4NzsKKwkJCQljb21tYW5kID0gKGRhdGEudmFsdWUgPj4gOCkgJiAweDM7CisJCQkJc3dpdGNoIChraW5kKSB7CisJCQkJY2FzZSAxOnsKKwkJCQkJCWN1cl9jb25maWcgPSBkaWdfaW5fY29uZmlnOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjp7CisJCQkJCQljdXJfY29uZmlnID0gZGlnX291dF9jb25maWc7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOnsKKwkJCQkJCWN1cl9jb25maWcgPSBjaGFuX2luX2NvbmZpZzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6eworCQkJCQkJY3VyX2NvbmZpZyA9IGNoYW5fb3V0X2NvbmZpZzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDU6eworCQkJCQkJY3VyX2NvbmZpZyA9IGNoYW5faW5fY29uZmlnOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChjdXJfY29uZmlnKSB7CisJCQkJCWN1cl9jb25maWdbY2hhbm5lbF0ua2luZCA9IGtpbmQ7CisJCQkJCXN3aXRjaCAoY29tbWFuZCkgeworCQkJCQljYXNlIDA6eworCQkJCQkJCWN1cl9jb25maWdbY2hhbm5lbF0uCisJCQkJCQkJCWJpdHMgPQorCQkJCQkJCQkoZGF0YS4KKwkJCQkJCQkJdmFsdWUgPj4gMTApICYKKwkJCQkJCQkJMHgzZjsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE6eworCQkJCQkJCWludCB1bml0LCBzaWduLCBtaW47CisJCQkJCQkJdW5pdCA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxMCkgJgorCQkJCQkJCQkweDc7CisJCQkJCQkJc2lnbiA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxMykgJgorCQkJCQkJCQkweDE7CisJCQkJCQkJbWluID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDE0KSAmCisJCQkJCQkJCTB4ZmZmZmY7CisKKwkJCQkJCQlzd2l0Y2ggKHVuaXQpIHsKKwkJCQkJCQljYXNlIDA6eworCQkJCQkJCQkJbWluID0gbWluICogMTAwMDAwMDsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDE6eworCQkJCQkJCQkJbWluID0gbWluICogMTAwMDsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6eworCQkJCQkJCQkJbWluID0gbWluICogMTsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHNpZ24pIHsKKwkJCQkJCQkJbWluID0gLW1pbjsKKwkJCQkJCQl9CisJCQkJCQkJY3VyX2NvbmZpZ1tjaGFubmVsXS4KKwkJCQkJCQkJbWluID0gbWluOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjp7CisJCQkJCQkJaW50IHVuaXQsIHNpZ24sIG1heDsKKwkJCQkJCQl1bml0ID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDEwKSAmCisJCQkJCQkJCTB4NzsKKwkJCQkJCQlzaWduID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDEzKSAmCisJCQkJCQkJCTB4MTsKKwkJCQkJCQltYXggPSAoZGF0YS4KKwkJCQkJCQkJdmFsdWUgPj4gMTQpICYKKwkJCQkJCQkJMHhmZmZmZjsKKworCQkJCQkJCXN3aXRjaCAodW5pdCkgeworCQkJCQkJCWNhc2UgMDp7CisJCQkJCQkJCQltYXggPSBtYXggKiAxMDAwMDAwOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTp7CisJCQkJCQkJCQltYXggPSBtYXggKiAxMDAwOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMjp7CisJCQkJCQkJCQltYXggPSBtYXggKiAxOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoc2lnbikgeworCQkJCQkJCQltYXggPSAtbWF4OworCQkJCQkJCX0KKwkJCQkJCQljdXJfY29uZmlnW2NoYW5uZWxdLgorCQkJCQkJCQltYXggPSBtYXg7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykgeworCQkJLy8gRmlsbCBpbiBzdWJkZXYgZGF0YQorCQkJc3RydWN0IGNvbmZpZ190ICpjOworCQkJdW5zaWduZWQgY2hhciAqbWFwcGluZyA9IDA7CisJCQlzdHJ1Y3Qgc2VyaWFsMjAwMl9yYW5nZV90YWJsZV90ICpyYW5nZSA9IDA7CisJCQlpbnQga2luZCA9IDA7CisKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOnsKKwkJCQkJYyA9IGRpZ19pbl9jb25maWc7CisJCQkJCW1hcHBpbmcgPSBkZXZwcml2LT5kaWdpdGFsX2luX21hcHBpbmc7CisJCQkJCWtpbmQgPSAxOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMTp7CisJCQkJCWMgPSBkaWdfb3V0X2NvbmZpZzsKKwkJCQkJbWFwcGluZyA9IGRldnByaXYtPmRpZ2l0YWxfb3V0X21hcHBpbmc7CisJCQkJCWtpbmQgPSAyOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMjp7CisJCQkJCWMgPSBjaGFuX2luX2NvbmZpZzsKKwkJCQkJbWFwcGluZyA9IGRldnByaXYtPmFuYWxvZ19pbl9tYXBwaW5nOworCQkJCQlyYW5nZSA9IGRldnByaXYtPmluX3JhbmdlOworCQkJCQlraW5kID0gMzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDM6eworCQkJCQljID0gY2hhbl9vdXRfY29uZmlnOworCQkJCQltYXBwaW5nID0gZGV2cHJpdi0+YW5hbG9nX291dF9tYXBwaW5nOworCQkJCQlyYW5nZSA9IGRldnByaXYtPm91dF9yYW5nZTsKKwkJCQkJa2luZCA9IDQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSA0OnsKKwkJCQkJYyA9IGNoYW5faW5fY29uZmlnOworCQkJCQltYXBwaW5nID0gZGV2cHJpdi0+ZW5jb2Rlcl9pbl9tYXBwaW5nOworCQkJCQlyYW5nZSA9IGRldnByaXYtPmluX3JhbmdlOworCQkJCQlraW5kID0gNTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OnsKKwkJCQkJYyA9IDA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGMpIHsKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwkJCQljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKnJhbmdlX3RhYmxlX2xpc3QgPSBOVUxMOworCQkJCXVuc2lnbmVkIGludCAqbWF4ZGF0YV9saXN0OworCQkJCWludCBqLCBjaGFuOworCisJCQkJZm9yIChjaGFuID0gMCwgaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQkJCWlmIChjW2pdLmtpbmQgPT0ga2luZCkgeworCQkJCQkJY2hhbisrOworCQkJCQl9CisJCQkJfQorCQkJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQkJCXMtPm5fY2hhbiA9IGNoYW47CisJCQkJcy0+bWF4ZGF0YSA9IDA7CisJCQkJaWYgKHMtPm1heGRhdGFfbGlzdCkgeworCQkJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOworCQkJCX0KKwkJCQlzLT5tYXhkYXRhX2xpc3QgPSBtYXhkYXRhX2xpc3QgPQorCQkJCQlrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogcy0+bl9jaGFuLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgeworCQkJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKKwkJCQl9CisJCQkJaWYgKHJhbmdlKSB7CisJCQkJCXMtPnJhbmdlX3RhYmxlID0gMDsKKwkJCQkJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IHJhbmdlX3RhYmxlX2xpc3QgPQorCQkJCQkJa21hbGxvYyhzaXplb2YKKwkJCQkJCShzdHJ1Y3Qgc2VyaWFsMjAwMl9yYW5nZV90YWJsZV90KSAqCisJCQkJCQlzLT5uX2NoYW4sIEdGUF9LRVJORUwpOworCQkJCX0KKwkJCQlmb3IgKGNoYW4gPSAwLCBqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQkJaWYgKGNbal0ua2luZCA9PSBraW5kKSB7CisJCQkJCQlpZiAobWFwcGluZykgeworCQkJCQkJCW1hcHBpbmdbY2hhbl0gPSBqOworCQkJCQkJfQorCQkJCQkJaWYgKHJhbmdlKSB7CisJCQkJCQkJcmFuZ2Vbal0ubGVuZ3RoID0gMTsKKwkJCQkJCQlyYW5nZVtqXS5yYW5nZS5taW4gPQorCQkJCQkJCQljW2pdLm1pbjsKKwkJCQkJCQlyYW5nZVtqXS5yYW5nZS5tYXggPQorCQkJCQkJCQljW2pdLm1heDsKKwkJCQkJCQlyYW5nZV90YWJsZV9saXN0W2NoYW5dID0KKwkJCQkJCQkJKGNvbnN0IHN0cnVjdAorCQkJCQkJCQljb21lZGlfbHJhbmdlICopCisJCQkJCQkJCSZyYW5nZVtqXTsKKwkJCQkJCX0KKwkJCQkJCW1heGRhdGFfbGlzdFtjaGFuXSA9CisJCQkJCQkJKChsb25nIGxvbmcpMSA8PCBjW2pdLgorCQkJCQkJCWJpdHMpIC0gMTsKKwkJCQkJCWNoYW4rKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2VyaWFsXzIwMDJfY2xvc2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKCFJU19FUlIoZGV2cHJpdi0+dHR5KSAmJiAoZGV2cHJpdi0+dHR5ICE9IDApKSB7CisJCWZpbHBfY2xvc2UoZGV2cHJpdi0+dHR5LCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW47CisKKwljaGFuID0gZGV2cHJpdi0+ZGlnaXRhbF9pbl9tYXBwaW5nW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXN0cnVjdCBzZXJpYWxfZGF0YSByZWFkOworCisJCXBvbGxfZGlnaXRhbChkZXZwcml2LT50dHksIGNoYW4pOworCQl3aGlsZSAoMSkgeworCQkJcmVhZCA9IHNlcmlhbF9yZWFkKGRldnByaXYtPnR0eSwgMTAwMCk7CisJCQlpZiAocmVhZC5raW5kICE9IGlzX2RpZ2l0YWwgfHwgcmVhZC5pbmRleCA9PSBjaGFuKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGF0YVtuXSA9IHJlYWQudmFsdWU7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZG9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuOworCisJY2hhbiA9IGRldnByaXYtPmRpZ2l0YWxfb3V0X21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHdyaXRlOworCisJCXdyaXRlLmtpbmQgPSBpc19kaWdpdGFsOworCQl3cml0ZS5pbmRleCA9IGNoYW47CisJCXdyaXRlLnZhbHVlID0gZGF0YVtuXTsKKwkJc2VyaWFsX3dyaXRlKGRldnByaXYtPnR0eSwgd3JpdGUpOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5hbmFsb2dfaW5fbWFwcGluZ1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlzdHJ1Y3Qgc2VyaWFsX2RhdGEgcmVhZDsKKworCQlwb2xsX2NoYW5uZWwoZGV2cHJpdi0+dHR5LCBjaGFuKTsKKwkJd2hpbGUgKDEpIHsKKwkJCXJlYWQgPSBzZXJpYWxfcmVhZChkZXZwcml2LT50dHksIDEwMDApOworCQkJaWYgKHJlYWQua2luZCAhPSBpc19jaGFubmVsIHx8IHJlYWQuaW5kZXggPT0gY2hhbikgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWRhdGFbbl0gPSByZWFkLnZhbHVlOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5hbmFsb2dfb3V0X21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHdyaXRlOworCisJCXdyaXRlLmtpbmQgPSBpc19jaGFubmVsOworCQl3cml0ZS5pbmRleCA9IGNoYW47CisJCXdyaXRlLnZhbHVlID0gZGF0YVtuXTsKKwkJc2VyaWFsX3dyaXRlKGRldnByaXYtPnR0eSwgd3JpdGUpOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2VpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5lbmNvZGVyX2luX21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHJlYWQ7CisKKwkJcG9sbF9jaGFubmVsKGRldnByaXYtPnR0eSwgY2hhbik7CisJCXdoaWxlICgxKSB7CisJCQlyZWFkID0gc2VyaWFsX3JlYWQoZGV2cHJpdi0+dHR5LCAxMDAwKTsKKwkJCWlmIChyZWFkLmtpbmQgIT0gaXNfY2hhbm5lbCB8fCByZWFkLmluZGV4ID09IGNoYW4pIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlkYXRhW25dID0gcmVhZC52YWx1ZTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiBzZXJpYWwyMDAyOiAiLCBkZXYtPm1pbm9yKTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHNlcmlhbDIwMDJfcHJpdmF0ZSkpIDwgMCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2LT5vcGVuID0gc2VyaWFsXzIwMDJfb3BlbjsKKwlkZXYtPmNsb3NlID0gc2VyaWFsXzIwMDJfY2xvc2U7CisJZGV2cHJpdi0+cG9ydCA9IGl0LT5vcHRpb25zWzBdOworCWRldnByaXYtPnNwZWVkID0gaXQtPm9wdGlvbnNbMV07CisJcHJpbnRrKCIvZGV2L3R0eVMlZCBAICVkXG4iLCBkZXZwcml2LT5wb3J0LCBkZXZwcml2LT5zcGVlZCk7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDUpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBkaWdpdGFsIGlucHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fcmVhZCA9ICZzZXJpYWwyMDAyX2RpX3JpbnNuOworCisJLyogZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fd3JpdGUgPSAmc2VyaWFsMjAwMl9kb193aW5zbjsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAwOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gMDsKKwlzLT5pbnNuX3JlYWQgPSAmc2VyaWFsMjAwMl9haV9yaW5zbjsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IDA7CisJcy0+aW5zbl93cml0ZSA9ICZzZXJpYWwyMDAyX2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZzZXJpYWwyMDAyX2FvX3JpbnNuOworCisJLyogZW5jb2RlciBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IDA7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAwOworCXMtPmluc25fcmVhZCA9ICZzZXJpYWwyMDAyX2VpX3JpbnNuOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBzZXJpYWwyMDAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcyA9ICZkZXYtPnN1YmRldmljZXNbaV07CisJCWlmIChzLT5tYXhkYXRhX2xpc3QpIHsKKwkJCWtmcmVlKHMtPm1heGRhdGFfbGlzdCk7CisJCX0KKwkJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCWtmcmVlKHMtPnJhbmdlX3RhYmxlX2xpc3QpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3NlcmlhbDIwMDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NrZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3MDBkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvc2tlbC5jCisgICAgU2tlbGV0b24gY29kZSBmb3IgYSBDb21lZGkgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBza2VsCitEZXNjcmlwdGlvbjogU2tlbGV0b24gZHJpdmVyLCBhbiBleGFtcGxlIGZvciBkcml2ZXIgd3JpdGVycworRGV2aWNlczoKK0F1dGhvcjogZHMKK1VwZGF0ZWQ6IE1vbiwgMTggTWFyIDIwMDIgMTU6MzQ6MDEgLTA4MDAKK1N0YXR1czogd29ya3MKKworVGhpcyBkcml2ZXIgaXMgYSBkb2N1bWVudGVkIGV4YW1wbGUgb24gaG93IENvbWVkaSBkcml2ZXJzIGFyZQord3JpdHRlbi4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBub25lCisqLworCisvKgorICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCisgKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKKyAqCisgKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKKyAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KKyAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQorICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAorICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KKyAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQorICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCisgKiAgIHZhbHVlIGlzIHVzZWQuCisgKiBBdXRob3I6IHlvdQorICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKKyAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCisgKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6CisgKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAorICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KKyAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KKyAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKKyAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCisgKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQorICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKKyAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgorICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KKyAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgorICoKKyAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cworICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQorICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAorICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCisgKiBzdWJkZXZpY2VzLCBldGMuCisgKgorICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgkJLyogZm9yIFBDSSBkZXZpY2VzICovCisKKy8qIEltYWdpbmFyeSByZWdpc3RlcnMgZm9yIHRoZSBpbWFnaW5hcnkgYm9hcmQgKi8KKworI2RlZmluZSBTS0VMX1NJWkUgMAorCisjZGVmaW5lIFNLRUxfU1RBUlRfQUlfQ09OVgkwCisjZGVmaW5lIFNLRUxfQUlfUkVBRAkJMAorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHNrZWxfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFpX2NoYW5zOworCWludCBhaV9iaXRzOworCWludCBoYXZlX2RpbzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2tlbF9ib2FyZCBza2VsX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkic2tlbC0xMDAiLAorCSAgICAgIGFpX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJza2VsLTIwMCIsCisJICAgICAgYWlfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBoYXZlX2RpbzowLAorCQl9LAorfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuICBTaG91bGQKKyAqIG9ubHkgYmUgdXNlZCBmb3IgUENJIGFuZCBJU0EtUG5QIGRldmljZXMgKi8KKy8qIFBsZWFzZSBhZGQgeW91ciBQQ0kgdmVuZG9yIElEIHRvIGNvbWVkaWRldi5oLCBhbmQgaXQgd2lsbCBiZSBmb3J3YXJkZWQKKyAqIHVwc3RyZWFtLiAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NLRUwgMHhkYWZlCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2tlbF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX1NLRUwsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfU0tFTCwgMHgwMjAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBza2VsX3BjaV90YWJsZSk7CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHNrZWxfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHNrZWxfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsKKworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgc2tlbF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBza2VsX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHNrZWxfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfc2tlbCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdW1teSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6c2tlbF9hdHRhY2gsCisgICAgICBkZXRhY2g6c2tlbF9kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHNrZWxfYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisgICAgICBib2FyZF9uYW1lOiZza2VsX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3Qgc2tlbF9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHNrZWxfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2tlbF9ib2FyZCksCit9OworCitzdGF0aWMgaW50IHNrZWxfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2tlbF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNrZWxfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHNrZWxfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucywgaW50IHJvdW5kKTsKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHNrZWxfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJcHJpbnRrKCJjb21lZGklZDogc2tlbDogIiwgZGV2LT5taW5vcik7CisKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworCS8qIGRldi0+Ym9hcmRfcHRyID0gc2tlbF9wcm9iZShkZXYsIGl0KTsgKi8KKworLyoKKyAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLiAgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiCisgKiBtYWNybyBub3csIHNpbmNlIHdlIGp1c3QgaW5pdGlhbGl6ZWQgaXQgaW4gdGhlIGxhc3QgbGluZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBza2VsX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGV2LT5yZWFkX3N1YmRldj1zOyAqLworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJLyogd2Ugc3VwcG9ydCBzaW5nbGUtZW5kZWQgKGdyb3VuZCkgYW5kIGRpZmZlcmVudGlhbCAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CS8qIFRoaXMgaXMgdGhlIG1heGltdW0gY2hhbmxpc3QgbGVuZ3RoIHRoYXQKKwkJCQkgICB0aGUgYm9hcmQgY2FuIGhhbmRsZSAqLworCXMtPmluc25fcmVhZCA9IHNrZWxfYWlfcmluc247CisvKgorKiAgICAgICBzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworKiAgICAgICBzLT5kb19jbWQgPSBza2VsX2FpX2NtZDsKKyovCisJcy0+ZG9fY21kdGVzdCA9IHNrZWxfYWlfY21kdGVzdDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAxOworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisJcy0+aW5zbl93cml0ZSA9IHNrZWxfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gc2tlbF9hb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMTY7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBza2VsX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gc2tlbF9kaW9faW5zbl9jb25maWc7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHNrZWxfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHNrZWw6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCisgKiBtb2RlLgorICovCitzdGF0aWMgaW50IHNrZWxfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkvKiBhIHR5cGljYWwgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgKi8KKworCS8qIHdyaXRlIGNoYW5uZWwgdG8gbXVsdGlwbGV4ZXIgKi8KKwkvKiBvdXR3KGNoYW4sZGV2LT5pb2Jhc2UgKyBTS0VMX01VWCk7ICovCisKKwkvKiBkb24ndCB3YWl0IGZvciBtdXggdG8gc2V0dGxlICovCisKKwkvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCS8qIG91dHcoMCxkZXYtPmlvYmFzZSArIFNLRUxfQ09OVkVSVCk7ICovCisKKyNkZWZpbmUgVElNRU9VVCAxMDAKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJc3RhdHVzID0gMTsKKwkJCS8qIHN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIFNLRUxfU1RBVFVTKTsgKi8KKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJLyogcnRfcHJpbnRrKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBwcmludGsoKQorCQkJICogd2hlbmV2ZXIgdGhlIGNvZGUgY2FuIGJlIGNhbGxlZCBmcm9tIHJlYWwtdGltZS4gKi8KKwkJCXJ0X3ByaW50aygidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQkvKiBkID0gaW53KGRldi0+aW9iYXNlICsgU0tFTF9BSV9EQVRBKTsgKi8KKwkJZCA9IDA7CisKKwkJLyogbWFuZ2xlIHRoZSBkYXRhIGFzIG5lY2Vzc2FyeSAqLworCQlkIF49IDEgPDwgKHRoaXNib2FyZC0+YWlfYml0cyAtIDEpOworCisJCWRhdGFbbl0gPSBkOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkxMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBNSU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzZWUgYWJvdmUgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA5KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCXNrZWxfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJc2tlbF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGZvcm0sIHRoaXMgaXMganVzdAorICogd2hhdCBoYXBwZW5zIHRvIGJlIHVzZWQgaW4gc29tZSBvZiB0aGUgZHJpdmVycy4gIEl0IHNob3VsZAorICogY29udmVydCBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nCisgKiB0aGUgZGV2aWNlLiAgQWxzbywgaXQgc2hvdWxkIGFkanVzdCBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvCisgKiB0aGUgYWN0dWFsIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLiAqLworc3RhdGljIGludCBza2VsX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwkvKiB0cml2aWFsIHRpbWVyICovCisJLyogaWYgeW91ciB0aW1pbmcgaXMgZG9uZSB0aHJvdWdoIHR3byBjYXNjYWRlZCB0aW1lcnMsIHRoZQorCSAqIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoKSBmdW5jdGlvbiBpbiA4MjUzLmggY2FuIGJlCisJICogdmVyeSBoZWxwZnVsLiAgVGhlcmUgYXJlIGFsc28gaTgyNTRfbG9hZCgpIGFuZCBpODI1NF9tbV9sb2FkKCkKKwkgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBsb2FkIHZhbHVlcyBpbnRvIHRoZSB1YmlxdWl0b3VzIDgyNTQgY291bnRlcnMKKwkgKi8KKworCXJldHVybiAqbnM7Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXByaW50aygic2tlbF9hb193aW5zblxuIik7CisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCS8qIGEgdHlwaWNhbCBwcm9ncmFtbWluZyBzZXF1ZW5jZSAqLworCQkvKiBvdXR3KGRhdGFbaV0sZGV2LT5pb2Jhc2UgKyBTS0VMX0RBMCArIGNoYW4pOyAqLworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IHNrZWxfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IHNrZWxfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCS8qIG91dHcocy0+c3RhdGUsZGV2LT5pb2Jhc2UgKyBTS0VMX0RJTyk7ICovCisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJLyogZGF0YVsxXT1pbncoZGV2LT5pb2Jhc2UgKyBTS0VMX0RJTyk7ICovCisJLyogb3Igd2UgY291bGQganVzdCByZXR1cm4gdGhlIHNvZnR3YXJlIGNvcHkgb2YgdGhlIG91dHB1dCB2YWx1ZXMgaWYKKwkgKiBpdCB3YXMgYSBwdXJlbHkgZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCisJLyogZGF0YVsxXT1zLT5zdGF0ZTsgKi8KKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHNrZWxfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogVGhlIGlucHV0IG9yIG91dHB1dCBjb25maWd1cmF0aW9uIG9mIGVhY2ggZGlnaXRhbCBsaW5lIGlzCisJICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYworCSAqIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQsIGFuZCBkYXRhWzBdIGNvbnRhaW5zIHRoZQorCSAqIHZhbHVlIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAqLworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSAxIDw8IGNoYW47CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBjaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCS8qIG91dHcocy0+aW9fYml0cyxkZXYtPmlvYmFzZSArIFNLRUxfRElPX0NPTkZJRyk7ICovCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9za2VsKTsKKy8qIElmIHlvdSBhcmUgd3JpdGluZyBhIFBDSSBkcml2ZXIgeW91IHNob3VsZCB1c2UgQ09NRURJX1BDSV9JTklUQ0xFQU5VUCBpbnN0ZWFkLgorKi8KKy8qIENPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3NrZWwsIHNrZWxfcGNpX3RhYmxlKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyOGQyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCisgICAgZ2VuZXJpYyBjb21lZGkgZHJpdmVyIGZvciBTU1YgRW1iZWRkZWQgU3lzdGVtcycgRElML05ldC1QQ3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgUm9iZXJ0IFNjaHdlYmVsIDxyb2JlcnRAc2Nod2ViZWwuZGU+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBzc3ZfZG5wCitEZXNjcmlwdGlvbjogU1NWIEVtYmVkZGVkIFN5c3RlbXMgRElML05ldC1QQworQXV0aG9yOiBSb2JlcnQgU2Nod2ViZWwgPHJvYmVydEBzY2h3ZWJlbC5kZT4KK0RldmljZXM6IFtTU1YgRW1iZWRkZWQgU3lzdGVtc10gRElML05ldC1QQyAxNDg2IChkbnAtMTQ4NikKK1N0YXR1czogdW5rbm93bgorKi8KKworLyogaW5jbHVkZSBmaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKy8qIFNvbWUgZ2xvYmFsIGRlZmluaXRpb25zOiB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBETlAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEZvciBwb3J0IEEgYW5kIEIgdGhlIG1vZGUgcmVnaXN0ZXIgaGFzIGJpdHMgY29ycmVzcG9uZGluZyB0byB0aGUgb3V0cHV0ICAgKi8KKy8qIHBpbnMsIHdoZXJlIEJpdC1OID0gMCAtPiBpbnB1dCwgQml0LU4gPSAxIC0+IG91dHB1dC4gTm90ZSB0aGF0IGJpdHMgICAgICAgKi8KKy8qIDQgdG8gNyBjb3JyZXNwb25kIHRvIHBpbiAwLi4zIGZvciBwb3J0IEMgZGF0YSByZWdpc3Rlci4gRW5zdXJlIHRoYXQgYml0cyAgKi8KKy8qIDAuLjMgcmVtYWluIHVuY2hhbmdlZCEgRm9yIGRldGFpbHMgYWJvdXQgUG9ydCBDIE1vZGUgUmVnaXN0ZXIgc2VlICAgICAgICAgKi8KKy8qIHRoZSByZW1hcmtzIGluIGRucF9pbnNuX2NvbmZpZygpIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDU0NJUiAweDIyCQkvKiBDaGlwIFNldHVwIGFuZCBDb250cm9sIEluZGV4IFJlZ2lzdGVyICAgICAgICovCisjZGVmaW5lIENTQ0RSIDB4MjMJCS8qIENoaXAgU2V0dXAgYW5kIENvbnRyb2wgRGF0YSBSZWdpc3RlciAgICAgICAgKi8KKyNkZWZpbmUgUEFNUiAgMHhhNQkJLyogUG9ydCBBIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQURSICAweGE5CQkvKiBQb3J0IEEgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBCTVIgIDB4YTQJCS8qIFBvcnQgQiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEJEUiAgMHhhOAkJLyogUG9ydCBCIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQ01SICAweGEzCQkvKiBQb3J0IEMgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBDRFIgIDB4YTcJCS8qIFBvcnQgQyBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogVGhpcyBkYXRhIHN0cnVjdHVyZSBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwcG9ydGVkIGJvYXJkcyAtLS0tLS0tLSAqLworCitzdHJ1Y3QgZG5wX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBhaV9jaGFuczsKKwlpbnQgYWlfYml0czsKKwlpbnQgaGF2ZV9kaW87Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRucF9ib2FyZCBkbnBfYm9hcmRzW10gPSB7CS8qIHdlIG9ubHkgc3VwcG9ydCBvbmUgRE5QICdib2FyZCcgICAqLworCXsJCQkvKiB2YXJpYW50IGF0IHRoZSBtb21lbnQgICAgICAgICAgICAgKi8KKwkgICAgICBuYW1lOgkiZG5wLTE0ODYiLAorCSAgICAgIGFpX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCit9OworCisvKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlIC0tLS0tLS0tLS0tICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkbnBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoZSBETlAgZHJpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IGRucF9wcml2YXRlX2RhdGEgeworCisJLy8KK307CisKKworLyogU2hvcnRoYW5kIG1hY3JvIGZvciBmYXN0ZXIgYWNjZXNzIHRvIHRoZSBwcml2YXRlIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBkZXZwcml2ICgoZG5wX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZSB3aGljaCBmdW5jdGlvbnMgICovCisvKiB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkgdGhlIGJvYXJkLCBhbmQgYWxzbyAgICAgICovCisvKiBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZXZpY2UgY29kZS4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gd2UgZGVmaW5lIHRoZSBBUEkgb2YgdGhpcyBkcml2ZXIuICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZG5wX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRucF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RucCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJzc3ZfZG5wIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkbnBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRucF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkbnBfYm9hcmRzWzBdLm5hbWUsCisJLyogb25seSBuZWNlc3NhcnkgZm9yIG5vbi1QblAgZGV2cyAgICovCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkbnBfYm9hcmQpLC8qIGxpa2UgSVNBLVBuUCwgUENJIG9yIFBDTUNJQS4gICAgICAqLworICAgICAgbnVtX25hbWVzOnNpemVvZihkbnBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZG5wX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZG5wKTsKKworc3RhdGljIGludCBkbnBfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRucF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQXR0YWNoIGlzIGNhbGxlZCBieSBjb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlciBmb3IgYSBwYXJ0aWN1bGFyICAqLworLyogYm9hcmQuIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5IGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCAgICAgICAqLworLyogZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdCBhZGRyZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGRucF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IGRucDogIiwgZGV2LT5taW5vcik7CisKKwkvKiBBdXRvcHJvYmluZzogdGhpcyBzaG91bGQgZmluZCBvdXQgd2hpY2ggYm9hcmQgd2UgaGF2ZS4gQ3VycmVudGx5IG9ubHkgICAqLworCS8qIHRoZSAxNDg2IGJvYXJkIGlzIHN1cHBvcnRlZCBhbmQgYXV0b3Byb2JpbmcgaXMgbm90IGltcGxlbWVudGVkIDotKSAgICAgICovCisJLy9kZXYtPmJvYXJkX3B0ciA9IGRucF9wcm9iZShkZXYpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbmFtZSBvZiB0aGUgYm9hcmQuIFdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiIG1hY3JvIG5vdy4gKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwkvKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gYWxsb2NfcHJpdmF0ZSgpIGlzIGEgY29udmVuaWVudCAgICAqLworCS8qIG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRucF9wcml2YXRlX2RhdGEpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiBhbGxvY19zdWJkZXZpY2UoKSBpcyBhIGNvbnZlbmllbnQgICAgKi8KKwkvKiBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRucF9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gZG5wX2Rpb19pbnNuX2NvbmZpZzsKKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJLyogV2UgdXNlIHRoZSBJL08gcG9ydHMgMHgyMiwweDIzIGFuZCAweGEzLTB4YTksIHdoaWNoIGFyZSBhbHdheXMKKwkgKiBhbGxvY2F0ZWQgZm9yIHRoZSBwcmltYXJ5IDgyNTksIHNvIHdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgdGhlbQorCSAqIG91cnNlbHZlcy4gKi8KKworCS8qIGNvbmZpZ3VyZSBhbGwgcG9ydHMgYXMgaW5wdXQgKGRlZmF1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJb3V0YihQQU1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQk1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQ01SLCBDU0NJUik7CisJb3V0YigoaW5iKENTQ0RSKSAmIDB4QUEpLCBDU0NEUik7CisKKwlyZXR1cm4gMTsKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBkZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiBJdCBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgICAgICAgICovCisvKiByZXNvdXJjZXMuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0ICAgICAgICovCisvKiBzaG91bGQgYmUgY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseSAgICAgICovCisvKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUgICAgICAgICAgICAgICovCisvKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZG5wX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKworCS8qIGNvbmZpZ3VyZSBhbGwgcG9ydHMgYXMgaW5wdXQgKGRlZmF1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJb3V0YihQQU1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQk1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQ01SLCBDU0NJUik7CisJb3V0YigoaW5iKENTQ0RSKSAmIDB4QUEpLCBDU0NEUik7CisKKwkvKiBhbm5vdW5jZSB0aGF0IHdlIGFyZSBmaW5pc2hlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXByaW50aygiY29tZWRpJWQ6IGRucDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIERJTyBjaGFubmVscy4gICAgKi8KKy8qIFRoZSBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlLCBzbyB5b3UgKi8KKy8qIGFyZSBhYmxlIHRvIHVzZSB0aGVzZSBpbnN0cnVjdGlvbnMgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBkbnBfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogaW5zbiB1c2VzIGRhdGFbMF0gYW5kIGRhdGFbMV0gICAgICovCisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEgaW4gZGF0YVsxXSwgZWFjaCAgICAqLworCS8qIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkvKiBQb3J0cyBBIGFuZCBCIGFyZSBzdHJhaWdodCBmb3J3YXJkOiBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhbiBvdXRwdXQgICAqLworCS8qIHBpbiB3aXRoIHRoZSBzYW1lIG9yZGVyLiBQb3J0IEMgaXMgZGlmZmVyZW50OiBiaXRzIDAuLi4zIGNvcnJlc3BvbmQgdG8gICovCisJLyogYml0cyA0Li4uNyBvZiB0aGUgb3V0cHV0IHJlZ2lzdGVyIChQQ0RSKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCWlmIChkYXRhWzBdKSB7CisKKwkJb3V0YihQQURSLCBDU0NJUik7CisJCW91dGIoKGluYihDU0NEUikKKwkJCQkmIH4odTgpIChkYXRhWzBdICYgMHgwMDAwRkYpKQorCQkJfCAodTgpIChkYXRhWzFdICYgMHgwMDAwRkYpLCBDU0NEUik7CisKKwkJb3V0YihQQkRSLCBDU0NJUik7CisJCW91dGIoKGluYihDU0NEUikKKwkJCQkmIH4odTgpICgoZGF0YVswXSAmIDB4MDBGRjAwKSA+PiA4KSkKKwkJCXwgKHU4KSAoKGRhdGFbMV0gJiAweDAwRkYwMCkgPj4gOCksIENTQ0RSKTsKKworCQlvdXRiKFBDRFIsIENTQ0lSKTsKKwkJb3V0YigoaW5iKENTQ0RSKQorCQkJCSYgfih1OCkgKChkYXRhWzBdICYgMHgwRjAwMDApID4+IDEyKSkKKwkJCXwgKHU4KSAoKGRhdGFbMV0gJiAweDBGMDAwMCkgPj4gMTIpLCBDU0NEUik7CisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbCBpbnB1dCBsaW5lcy4gICAgICAgKi8KKwlvdXRiKFBBRFIsIENTQ0lSKTsKKwlkYXRhWzBdID0gaW5iKENTQ0RSKTsKKwlvdXRiKFBCRFIsIENTQ0lSKTsKKwlkYXRhWzBdICs9IGluYihDU0NEUikgPDwgODsKKwlvdXRiKFBDRFIsIENTQ0lSKTsKKwlkYXRhWzBdICs9ICgoaW5iKENTQ0RSKSAmIDB4RjApIDw8IDEyKTsKKworCXJldHVybiAyOworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENvbmZpZ3VyZSB0aGUgZGlyZWN0aW9uIG9mIHRoZSBiaWRpcmVjdGlvbmFsIGRpZ2l0YWwgaS9vIHBpbnMuIGNoYW5zcGVjICAgKi8KKy8qIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQgYW5kIGRhdGFbMF0gY29udGFpbnMgZWl0aGVyICAgICAgICAgICAgKi8KKy8qIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBkbnBfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXU4IHJlZ2lzdGVyX2J1ZmZlcjsKKworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qIHJlZHVjZXMgY2hhbnNwZWMgdG8gbG93ZXIgMTYgYml0cyAqLworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkoaW5iKENTQ0RSKSAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOgorCQkJQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkvKiBUZXN0OiB3aGljaCBwb3J0IGRvZXMgdGhlIGNoYW5uZWwgYmVsb25nIHRvPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogV2UgaGF2ZSB0byBwYXkgYXR0ZW50aW9uIHdpdGggcG9ydCBDOiB0aGlzIGlzIHRoZSBtZWFuaW5nIG9mIFBDTVI6ICAgICAgKi8KKwkvKiBCaXQgaW4gUENNUjogICAgICAgICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIENvcnJlc3BvbmRpbmcgcG9ydCBDIHBpbjogZCAzIGQgMiBkIDEgZCAwICAgZD0gZG9uJ3QgdG91Y2ggICAgICAgICAgICAgICovCisKKwlpZiAoKGNoYW4gPj0gMCkgJiYgKGNoYW4gPD0gNykpIHsKKwkJLyogdGhpcyBpcyBwb3J0IEEgKi8KKwkJb3V0YihQQU1SLCBDU0NJUik7CisJfSBlbHNlIGlmICgoY2hhbiA+PSA4KSAmJiAoY2hhbiA8PSAxNSkpIHsKKwkJLyogdGhpcyBpcyBwb3J0IEIgKi8KKwkJY2hhbiAtPSA4OworCQlvdXRiKFBCTVIsIENTQ0lSKTsKKwl9IGVsc2UgaWYgKChjaGFuID49IDE2KSAmJiAoY2hhbiA8PSAxOSkpIHsKKwkJLyogdGhpcyBpcyBwb3J0IEM7IG11bHRpcGxpY2F0aW9uIHdpdGggMiBicmluZ3MgYml0cyBpbnRvIGNvcnJlY3QgICAgICAgICovCisJCS8qIHBvc2l0aW9uIGZvciBQQ01SISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQljaGFuIC09IDE2OworCQljaGFuICo9IDI7CisJCW91dGIoUENNUiwgQ1NDSVIpOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlYWQgJ29sZCcgZGlyZWN0aW9uIG9mIHRoZSBwb3J0IGFuZCBzZXQgYml0cyAob3V0PTEsIGluPTApICAgICAgICAgICAgICovCisJcmVnaXN0ZXJfYnVmZmVyID0gaW5iKENTQ0RSKTsKKwlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKSB7CisJCXJlZ2lzdGVyX2J1ZmZlciB8PSAoMSA8PCBjaGFuKTsKKwl9IGVsc2UgeworCQlyZWdpc3Rlcl9idWZmZXIgJj0gfigxIDw8IGNoYW4pOworCX0KKwlvdXRiKHJlZ2lzdGVyX2J1ZmZlciwgQ1NDRFIpOworCisJcmV0dXJuIDE7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91bmlveHg1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkM2IxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jCkBAIC0wLDAgKzEsNTE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgRHJpdmVyIGZvciBGYXN0d2VsIFVOSU94eC01IChhbmFsb2cgYW5kIGRpZ2l0YWwgaS9vKSBib2FyZHMuICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEtydWNoaW5pbiBEYW5paWwgKGFzZ2FyZCkgW2FzZ2FyZEBldGVyc29mdC5ydV0gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZSAgICAgICAgICAgICAgICAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+ICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAqCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAqCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAqCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAqCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAqCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAqCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAqCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKworRHJpdmVyOiB1bmlveHg1CitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciBGYXN0d2VsIFVOSU94eC01IChhbmFsb2cgYW5kIGRpZ2l0YWwgaS9vKSBib2FyZHMuCitBdXRob3I6IEtydWNoaW5pbiBEYW5paWwgKGFzZ2FyZCkgPGFzZ2FyZEBldGVyc29mdC5ydT4KK1N0YXR1czogdW5rbm93bgorVXBkYXRlZDogMjAwNi0xMC0wOQorRGV2aWNlczogW0Zhc3R3ZWxdIFVOSU94eC01ICh1bmlveHg1KSwKKworIFRoaXMgY2FyZCBzdXBwb3J0cyBkaWdpdGFsIGFuZCBhbmFsb2cgSS9PLiBJdCB3cml0dGVuIGZvciBnMDEKKyBzdWJkZXZpY2VzIG9ubHkuCisgY2hhbm5lbHMgcmFuZ2U6IDAgLi4gMjMgZGlvIGNoYW5uZWxzCisgYW5kIDAgLi4gMTEgYW5hbG9nIG1vZHVsZXMgcmFuZ2UKKyBEdXJpbmcgYXR0YWNoaW5nIHVuaW94eDUgbW9kdWxlIGRpc3BsYXlzIG1vZHVsZXMgaWRlbnRpZmllcnMKKyAoc2VlIGRtZXNnIGFmdGVyIGNvbWVkaV9jb25maWcpIGluIGZvcm1hdDoKKyB8IFttb2R1bGVfbnVtYmVyXSBtb2R1bGVfaWQgfAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInVuaW94eDUiCisjZGVmaW5lIFVOSU9YWDVfU0laRSAweDEwCisjZGVmaW5lIFVOSU9YWDVfU1VCREVWX0JBU0UgMHhBMDAwCS8qIGJhc2UgYWRkciBvZiBmaXJzdCBzdWJkZXYgKi8KKyNkZWZpbmUgVU5JT1hYNV9TVUJERVZfT0REUyAweDQwMAorCisvKiBtb2R1bGVzIHR5cGVzICovCisjZGVmaW5lIE1PRFVMRV9ESUdJVEFMIDAKKyNkZWZpbmUgTU9EVUxFX09VVFBVVF9NQVNLIDB4ODAJLyogYW5hbG9nIGlucHV0L291dHB1dCAqLworCisvKiBjb25zdGFudHMgZm9yIGRpZ2l0YWwgaS9vICovCisjZGVmaW5lIFVOSU9YWDVfTlVNX09GX0NIQU5TIDI0CisKKy8qIGNvbnN0YW50cyBmb3IgYW5hbG9nIGkvbyAqLworI2RlZmluZSBUeEJFICAweDEwCQkvKiB0cmFuc21pdCBidWZmZXIgZW5hYmxlICovCisjZGVmaW5lIFJ4Q0EgIDB4MjAJCS8qIDEgcmVjZWl2ZSBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisjZGVmaW5lIFJ4MkNBIDB4NDAJCS8qIDIgcmVjZWl2ZSBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisjZGVmaW5lIFJ4NENBIDB4ODAJCS8qIDQgcmVjZWl2ZSBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisKKy8qIGJ5dGVzIG1hc2sgZXJyb3JzICovCisjZGVmaW5lIFJ4MkNBX0VSUl9NQVNLIDB4MDQJLyogMiBieXRlcyByZWNlaXZpbmcgZXJyb3IgKi8KKyNkZWZpbmUgUng0Q0FfRVJSX01BU0sgMHgwOAkvKiA0IGJ5dGVzIHJlY2VpdmluZyBlcnJvciAqLworCisvKiBjaGFubmVsIG1vZGVzICovCisjZGVmaW5lIEFMTF8yX0lOUFVUICAwCQkvKiBjb25maWcgYWxsIGRpZ2l0YWwgY2hhbm5lbHMgdG8gaW5wdXQgKi8KKyNkZWZpbmUgQUxMXzJfT1VUUFVUIDEJCS8qIGNvbmZpZyBhbGwgZGlnaXRhbCBjaGFubmVscyB0byBvdXRwdXQgKi8KKworLyogJ3ByaXZhdGUnIHN0cnVjdHVyZSBmb3IgZWFjaCBzdWJkZXZpY2UgKi8KK3N0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiB7CisJaW50IHVzcF9pb2Jhc2U7CisJdW5zaWduZWQgY2hhciB1c3BfbW9kdWxlX3R5cGVbMTJdOwkvKiAxMiBtb2R1bGVzLiBlYWNoIGNhbiBiZSA3MEwgb3IgNzNMICovCisJdW5zaWduZWQgY2hhciB1c3BfZXh0cmFfZGF0YVsxMl1bNF07CS8qIGZvciBzYXZpbmcgcHJldmlvdXMgd3JpdHRlbiB2YWx1ZSBmb3IgYW5hbG9nIG1vZHVsZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHVzcF9wcmV2X3dyX3ZhbFszXTsJLyogcHJldmlvdXMgd3JpdHRlbiB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgdXNwX3ByZXZfY25fdmFsWzNdOwkvKiBwcmV2aW91cyBjaGFubmVsIHZhbHVlICovCit9OworCitzdGF0aWMgaW50IHVuaW94eDVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCB1bmlveHg1X3N1YmRldl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgdW5pb3h4NV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHVuaW94eDVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgX191bmlveHg1X3N1YmRldl9pbml0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LCBpbnQgc3ViZGV2X2lvYmFzZSwKKwlpbnQgbWlub3IpOworc3RhdGljIGludCBfX3VuaW94eDVfZGlnaXRhbF93cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9kaWdpdGFsX3JlYWQoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpOworLy9zdGF0aWMgdm9pZCBfX3VuaW94eDVfZGlnaXRhbF9jb25maWcoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2KiB1c3AsIGludCBtb2RlKTsKK3N0YXRpYyBpbnQgX191bmlveHg1X2FuYWxvZ193cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9hbmFsb2dfcmVhZChzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoaW50IGNoYW5fbnVtKTsKK3N0YXRpYyB2b2lkIF9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgaW50IGNoYW5uZWwpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgdW5pb3h4NV9kcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZTpEUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDp1bmlveHg1X2F0dGFjaCwKKyAgICAgIGRldGFjaDp1bmlveHg1X2RldGFjaAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKHVuaW94eDVfZHJpdmVyKTsKKworc3RhdGljIGludCB1bmlveHg1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgaW9iYXNlLCBpLCBuX3N1YmQ7CisJaW50IGlkLCBudW0sIGJhOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisKKwlkZXYtPmJvYXJkX25hbWUgPSBEUklWRVJfTkFNRTsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlpb2Jhc2UgKz0gVU5JT1hYNV9TVUJERVZfQkFTRTsKKworCS8qIGRlZmluaW5nIG51bWJlciBvZiBzdWJkZXZpY2VzIGFuZCBnZXR0aW5nIHRoZXkgdHlwZXMgKGl0IG11c3QgYmUgJ2cwMScpICAqLworCWZvciAoaSA9IG5fc3ViZCA9IDAsIGJhID0gaW9iYXNlOyBpIDwgNDsgaSsrLCBiYSArPSBVTklPWFg1X1NVQkRFVl9PRERTKSB7CisJCWlkID0gaW5iKGJhICsgMHhFKTsKKwkJbnVtID0gaW5iKGJhICsgMHhGKTsKKworCQlpZiAoaWQgIT0gJ2cnIHx8IG51bSAhPSAxKQorCQkJY29udGludWU7CisKKwkJbl9zdWJkKys7CisJfQorCisJLyogdW5pb3h4NSBjYW4gaGFzIGZyb20gdHdvIHRvIGZvdXIgc3ViZGV2aWNlcyAqLworCWlmIChuX3N1YmQgPCAyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInlvdXIgY2FyZCBtdXN0IGhhcyBhdCBsZWFzdCAyICdnMDEnIHN1YmRldmljZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmQpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBpbml0aWFsaXppbmcgZWFjaCBvZiBmb3Igc2FtZSBzdWJkZXZpY2VzICovCisJZm9yIChpID0gMDsgaSA8IG5fc3ViZDsgaSsrLCBpb2Jhc2UgKz0gVU5JT1hYNV9TVUJERVZfT0REUykgeworCQlpZiAoX191bmlveHg1X3N1YmRldl9pbml0KCZkZXYtPnN1YmRldmljZXNbaV0sIGlvYmFzZSwKKwkJCQlkZXYtPm1pbm9yKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKnVzcCA9IHN1YmRldi0+cHJpdmF0ZTsKKwlpbnQgY2hhbm5lbCwgdHlwZTsKKworCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl0eXBlID0gdXNwLT51c3BfbW9kdWxlX3R5cGVbY2hhbm5lbCAvIDJdOwkvKiBkZWZpbmluZyBtb2R1bGUgdHlwZShhbmFsb2cgb3IgZGlnaXRhbCkgKi8KKworCWlmICh0eXBlID09IE1PRFVMRV9ESUdJVEFMKSB7CisJCWlmICghX191bmlveHg1X2RpZ2l0YWxfcmVhZCh1c3AsIGRhdGEsIGNoYW5uZWwsIGRldi0+bWlub3IpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWlmICghX191bmlveHg1X2FuYWxvZ19yZWFkKHVzcCwgZGF0YSwgY2hhbm5lbCwgZGV2LT5taW5vcikpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3AgPSBzdWJkZXYtPnByaXZhdGU7CisJaW50IGNoYW5uZWwsIHR5cGU7CisKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdHlwZSA9IHVzcC0+dXNwX21vZHVsZV90eXBlW2NoYW5uZWwgLyAyXTsJLyogZGVmaW5pbmcgbW9kdWxlIHR5cGUoYW5hbG9nIG9yIGRpZ2l0YWwpICovCisKKwlpZiAodHlwZSA9PSBNT0RVTEVfRElHSVRBTCkgeworCQlpZiAoIV9fdW5pb3h4NV9kaWdpdGFsX3dyaXRlKHVzcCwgZGF0YSwgY2hhbm5lbCwgZGV2LT5taW5vcikpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaWYgKCFfX3VuaW94eDVfYW5hbG9nX3dyaXRlKHVzcCwgZGF0YSwgY2hhbm5lbCwgZGV2LT5taW5vcikpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qIGZvciBkaWdpdGFsIG1vZHVsZXMgb25seSAqLworc3RhdGljIGludCB1bmlveHg1X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsX29mZnNldCwgZmxhZ3MsIGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgdHlwZTsKKwlzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKnVzcCA9IHN1YmRldi0+cHJpdmF0ZTsKKwlpbnQgbWFzayA9IDEgPDwgKGNoYW5uZWwgJiAweDA3KTsKKworCXR5cGUgPSB1c3AtPnVzcF9tb2R1bGVfdHlwZVtjaGFubmVsIC8gMl07CisKKwlpZiAodHlwZSAhPSBNT0RVTEVfRElHSVRBTCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogY2hhbm5lbCBjb25maWd1cmF0aW9uIGFjY2Vzc2libGUgb25seSBmb3IgZGlnaXRhbCBtb2R1bGVzXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGNoYW5uZWxfb2Zmc2V0ID0gX191bmlveHg1X2RlZmluZV9jaGFuX29mZnNldChjaGFubmVsKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiB1bmRlZmluZWQgY2hhbm5lbCAlZC4gY2hhbm5lbCByYW5nZSBpcyAwIC4uIDIzXG4iLAorCQkJZGV2LT5taW5vciwgY2hhbm5lbCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBnZXRzIHByZXZpb3VzbHkgd3JpdHRlbiB2YWx1ZSAqLworCWZsYWdzID0gdXNwLT51c3BfcHJldl9jbl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXTsKKworCXN3aXRjaCAoKmRhdGEpIHsKKwljYXNlIENPTUVESV9JTlBVVDoKKwkJZmxhZ3MgJj0gfm1hc2s7CisJCWJyZWFrOworCWNhc2UgQ09NRURJX09VVFBVVDoKKwkJZmxhZ3MgfD0gbWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdW5rbm93biBmbGFnXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXAorCSAqIHNldHMgY2hhbm5lbHMgYnVmZmVyIHRvIDEoYWZ0ZXIgdGhpcyB3ZSBhcmUgYWxsb3dlZCB0byAqCisJICogY2hhbmdlIGNoYW5uZWwgdHlwZSBvbiBpbnB1dCBvciBvdXRwdXQpICAgICAgICAgICAgICAgICoKKwkgXCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJb3V0YigxLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKKwlvdXRiKGZsYWdzLCB1c3AtPnVzcF9pb2Jhc2UgKyBjaGFubmVsX29mZnNldCk7CS8qIGNoYW5nZXMgdHlwZSBvZiBfb25lXyBjaGFubmVsICovCisJb3V0YigwLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsJLyogc2V0cyBjaGFubmVscyBiYW5rIHRvIDAoYWxsb3dzIGRpcmVjdGx5IGlucHV0L291dHB1dCkgKi8KKwl1c3AtPnVzcF9wcmV2X2NuX3ZhbFtjaGFubmVsX29mZnNldCAtIDFdID0gZmxhZ3M7CS8qIHNhdmVzIHdyaXR0ZW4gdmFsdWUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVuaW94eDVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXY7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3A7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlzdWJkZXYgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQl1c3AgPSBzdWJkZXYtPnByaXZhdGU7CisJCXJlbGVhc2VfcmVnaW9uKHVzcC0+dXNwX2lvYmFzZSwgVU5JT1hYNV9TSVpFKTsKKwkJa2ZyZWUoc3ViZGV2LT5wcml2YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogaW5pdGlhbGl6aW5nIHN1YmRldmljZSB3aXRoIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgX191bmlveHg1X3N1YmRldl9pbml0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LCBpbnQgc3ViZGV2X2lvYmFzZSwKKwlpbnQgbWlub3IpCit7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3A7CisJaW50IGksIHRvLCBuZGVmX2ZsYWcgPSAwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzdWJkZXZfaW9iYXNlLCBVTklPWFg1X1NJWkUsIERSSVZFUl9OQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdFxuIiwgbWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoKHVzcCA9IChzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKikga3phbGxvYyhzaXplb2YoKnVzcCksCisJCQkJR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJvcnIhIC0tPiBvdXQgb2YgbWVtb3J5IVxuIiwgbWlub3IpOworCQlyZXR1cm4gLTE7CisJfQorCisJdXNwLT51c3BfaW9iYXNlID0gc3ViZGV2X2lvYmFzZTsKKwlwcmludGsoImNvbWVkaSVkOiB8IiwgbWlub3IpOworCisJLyogZGVmaW5pbmcgbW9kdWxlcyB0eXBlcyAqLworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCXRvID0gMTAwMDA7CisKKwkJX191bmlveHg1X2FuYWxvZ19jb25maWcodXNwLCBpICogMik7CisJCW91dGIoaSArIDEsIHN1YmRldl9pb2Jhc2UgKyA1KTsJLyogc2VuZHMgY2hhbm5lbCBudW1iZXIgdG8gY2FyZCAqLworCQlvdXRiKCdIJywgc3ViZGV2X2lvYmFzZSArIDYpOwkvKiByZXF1ZXN0cyBFRVBST00gd29ybGQgKi8KKwkJd2hpbGUgKCEoaW5iKHN1YmRldl9pb2Jhc2UgKyAwKSAmIFR4QkUpKSA7CS8qIHdhaXRzIHdoaWxlIHdyaXR0aW5nIHdpbGwgYmUgYWxsb3dlZCAqLworCQlvdXRiKDAsIHN1YmRldl9pb2Jhc2UgKyA2KTsKKworCQkvKiB3YWl0cyB3aGlsZSByZWFkaW5nIG9mIHR3byBieXRlcyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJd2hpbGUgKCEoaW5iKHN1YmRldl9pb2Jhc2UgKyAwKSAmIFJ4MkNBKSkgeworCQkJaWYgKC0tdG8gPD0gMCkgeworCQkJCW5kZWZfZmxhZyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobmRlZl9mbGFnKSB7CisJCQl1c3AtPnVzcF9tb2R1bGVfdHlwZVtpXSA9IDA7CisJCQluZGVmX2ZsYWcgPSAwOworCQl9IGVsc2UKKwkJCXVzcC0+dXNwX21vZHVsZV90eXBlW2ldID0gaW5iKHN1YmRldl9pb2Jhc2UgKyA2KTsKKworCQlwcmludGsoIiBbJWRdIDB4JTAyeCB8IiwgaSwgdXNwLT51c3BfbW9kdWxlX3R5cGVbaV0pOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKworCXByaW50aygiXG4iKTsKKworCS8qIGluaXRpYWwgc3ViZGV2aWNlIGZvciBkaWdpdGFsIG9yIGFuYWxvZyBpL28gKi8KKwlzdWJkZXYtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJc3ViZGV2LT5wcml2YXRlID0gdXNwOworCXN1YmRldi0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXN1YmRldi0+bl9jaGFuID0gVU5JT1hYNV9OVU1fT0ZfQ0hBTlM7CisJc3ViZGV2LT5tYXhkYXRhID0gMHhGRkY7CisJc3ViZGV2LT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXN1YmRldi0+aW5zbl9yZWFkID0gdW5pb3h4NV9zdWJkZXZfcmVhZDsKKwlzdWJkZXYtPmluc25fd3JpdGUgPSB1bmlveHg1X3N1YmRldl93cml0ZTsKKwlzdWJkZXYtPmluc25fY29uZmlnID0gdW5pb3h4NV9pbnNuX2NvbmZpZzsJLyogZm9yIGRpZ2l0YWwgbW9kdWxlcyBvbmx5ISEhICovCisKKwlwcmludGsoInN1YmRldmljZSBjb25maWd1cmVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fdW5pb3h4NV9kaWdpdGFsX3dyaXRlKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgdW5zaWduZWQgaW50ICogZGF0YSwKKwlpbnQgY2hhbm5lbCwgaW50IG1pbm9yKQoreworCWludCBjaGFubmVsX29mZnNldCwgdmFsOworCWludCBtYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MDcpOworCisJaWYgKChjaGFubmVsX29mZnNldCA9IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoY2hhbm5lbCkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogdW5kZWZpbmVkIGNoYW5uZWwgJWQuIGNoYW5uZWwgcmFuZ2UgaXMgMCAuLiAyM1xuIiwKKwkJCW1pbm9yLCBjaGFubmVsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsID0gdXNwLT51c3BfcHJldl93cl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXTsJLyogZ2V0dGluZyBwcmV2aW91cyB3cml0dGVuIHZhbHVlICovCisKKwlpZiAoKmRhdGEpCisJCXZhbCB8PSBtYXNrOworCWVsc2UKKwkJdmFsICY9IH5tYXNrOworCisJb3V0Yih2YWwsIHVzcC0+dXNwX2lvYmFzZSArIGNoYW5uZWxfb2Zmc2V0KTsKKwl1c3AtPnVzcF9wcmV2X3dyX3ZhbFtjaGFubmVsX29mZnNldCAtIDFdID0gdmFsOwkvKiBzYXZpbmcgbmV3IHdyaXR0ZW4gdmFsdWUgKi8KKworCXJldHVybiAxOworfQorCisvKiBmdW5jdGlvbiBmb3IgZGlnaXRhbCByZWFkaW5nICovCitzdGF0aWMgaW50IF9fdW5pb3h4NV9kaWdpdGFsX3JlYWQoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpCit7CisJaW50IGNoYW5uZWxfb2Zmc2V0LCBtYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MDcpOworCisJaWYgKChjaGFubmVsX29mZnNldCA9IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoY2hhbm5lbCkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogdW5kZWZpbmVkIGNoYW5uZWwgJWQuIGNoYW5uZWwgcmFuZ2UgaXMgMCAuLiAyM1xuIiwKKwkJCW1pbm9yLCBjaGFubmVsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJKmRhdGEgPSBpbmIodXNwLT51c3BfaW9iYXNlICsgY2hhbm5lbF9vZmZzZXQpOworCSpkYXRhICY9IG1hc2s7CisKKwlpZiAoY2hhbm5lbF9vZmZzZXQgPiAxKQorCQljaGFubmVsIC09IDIgPDwgY2hhbm5lbF9vZmZzZXQ7CS8qIHRoaXMgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgZm9yIGNvcnJlY3QgcmVhZGVkIHZhbHVlIHRvIDAgb3IgMSAqLworCisJKmRhdGEgPj49IGNoYW5uZWw7CisJcmV0dXJuIDE7Cit9CisKKyNpZiAwCQkJCS8qIG5vdCB1c2VkPyAqLworc3RhdGljIHZvaWQgX191bmlveHg1X2RpZ2l0YWxfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgaW50IG1vZGUpCit7CisJaW50IGksIG1hc2s7CisKKwltYXNrID0gKG1vZGUgPT0gQUxMXzJfT1VUUFVUKSA/IDB4RkYgOiAweDAwOworCXByaW50aygiQ09NRURJOiBtb2RlID0gJWRcbiIsIG1hc2spOworCisJb3V0YigxLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW91dGIobWFzaywgdXNwLT51c3BfaW9iYXNlICsgaSk7CisKKwlvdXRiKDAsIHVzcC0+dXNwX2lvYmFzZSArIDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX191bmlveHg1X2FuYWxvZ193cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcikKK3sKKwlpbnQgbW9kdWxlLCBpOworCisJbW9kdWxlID0gY2hhbm5lbCAvIDI7CS8qIGRlZmluaWcgbW9kdWxlIG51bWJlcigwIC4uIDExKSAqLworCWkgPSAoY2hhbm5lbCAlIDIpIDw8IDE7CS8qIGRlcGVuZHMgb24gdHlwZSBvZiBjaGFubmVsIChBIG9yIEIpICovCisKKwkvKiBkZWZpbmluZyBpZiBnaXZlbiBtb2R1bGUgY2FuIHdvcmsgb24gb3V0cHV0ICovCisJaWYgKCEodXNwLT51c3BfbW9kdWxlX3R5cGVbbW9kdWxlXSAmIE1PRFVMRV9PVVRQVVRfTUFTSykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IG1vZHVsZSBpbiBwb3NpdGlvbiAlZCB3aXRoIGlkIDB4JTB4IGlzIGZvciBpbnB1dCBvbmx5IVxuIiwKKwkJCW1pbm9yLCBtb2R1bGUsIHVzcC0+dXNwX21vZHVsZV90eXBlW21vZHVsZV0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlfX3VuaW94eDVfYW5hbG9nX2NvbmZpZyh1c3AsIGNoYW5uZWwpOworCS8qIHNhdmluZyBtaW5vciBieXRlICovCisJdXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2krK10gPSAodW5zaWduZWQgY2hhcikoKmRhdGEgJiAweDAwRkYpOworCS8qIHNhdmluZyBtYWpvciBieXRlICovCisJdXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2ldID0gKHVuc2lnbmVkIGNoYXIpKCgqZGF0YSAmIDB4RkYwMCkgPj4gOCk7CisKKwkvL3doaWxlKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSk7CisJb3V0Yihtb2R1bGUgKyAxLCB1c3AtPnVzcF9pb2Jhc2UgKyA1KTsJLyogc2VuZGluZyBtb2R1bGUgbnVtYmVyIHRvIGNhcmQoMSAuLiAxMikgKi8KKwlvdXRiKCdXJywgdXNwLT51c3BfaW9iYXNlICsgNik7CS8qIHNlbmRzIChXKXJpdGUgY29tbWFuZCB0byBtb2R1bGUgKi8KKworCS8qIHNlbmRpbmcgZm9yIGJ5dGVzIHRvIG1vZHVsZShvbmUgYnl0ZSBwZXIgY3ljbGUgaXRlcmF0aW9uKSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJd2hpbGUgKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJb3V0Yih1c3AtPnVzcF9leHRyYV9kYXRhW21vZHVsZV1baV0sIHVzcC0+dXNwX2lvYmFzZSArIDYpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fdW5pb3h4NV9hbmFsb2dfcmVhZChzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcikKK3sKKwlpbnQgbW9kdWxlX25vLCByZWFkX2NoOworCWNoYXIgY29udHJvbDsKKworCW1vZHVsZV9ubyA9IGNoYW5uZWwgLyAyOworCXJlYWRfY2ggPSBjaGFubmVsICUgMjsJLyogZGVwZW5kIG9uIHR5cGUgb2YgY2hhbm5lbCAoQSBvciBCKSAqLworCisJLyogZGVmaW5pbmcgaWYgZ2l2ZW4gbW9kdWxlIGNhbiB3b3JrIG9uIGlucHV0ICovCisJaWYgKHVzcC0+dXNwX21vZHVsZV90eXBlW21vZHVsZV9ub10gJiBNT0RVTEVfT1VUUFVUX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IG1vZHVsZSBpbiBwb3NpdGlvbiAlZCB3aXRoIGlkIDB4JTAyeCBpcyBmb3Igb3V0cHV0IG9ubHkiLAorCQkJbWlub3IsIG1vZHVsZV9ubywgdXNwLT51c3BfbW9kdWxlX3R5cGVbbW9kdWxlX25vXSk7CisJCXJldHVybiAwOworCX0KKworCV9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHVzcCwgY2hhbm5lbCk7CisJb3V0Yihtb2R1bGVfbm8gKyAxLCB1c3AtPnVzcF9pb2Jhc2UgKyA1KTsJLyogc2VuZHMgbW9kdWxlIG51bWJlciB0byBjYXJkKDEgLi4gMTIpICovCisJb3V0YignVicsIHVzcC0+dXNwX2lvYmFzZSArIDYpOwkvKiBzZW5kcyB0byBtb2R1bGUgKFYpZXJpZnkgY29tbWFuZCAqLworCWNvbnRyb2wgPSBpbmIodXNwLT51c3BfaW9iYXNlKTsJLyogZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgYnl0ZSAqLworCisJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBmb3VyIGJ5dGVzIHdpbGwgYmUgYWxsb3dlZCAqLworCXdoaWxlICghKChjb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIDApKSAmIFJ4NENBKSkgOworCisJLyogaWYgZm91ciBieXRlcyByZWFkZGluZyBlcnJvciBvY2N1cnMgLSByZXR1cm4gMChmYWxzZSkgKi8KKwlpZiAoKGNvbnRyb2wgJiBSeDRDQV9FUlJfTUFTSykpIHsKKwkJcHJpbnRrKCJDT01FREk6IDQgYnl0ZXMgZXJyb3JcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVhZF9jaCkKKwkJKmRhdGEgPSBpbncodXNwLT51c3BfaW9iYXNlICsgNik7CS8qIGNoYW5uZWwgQiAqLworCWVsc2UKKwkJKmRhdGEgPSBpbncodXNwLT51c3BfaW9iYXNlICsgNCk7CS8qIGNoYW5uZWwgQSAqLworCisJcmV0dXJuIDE7Cit9CisKKy8qIGNvbmZpZ3VyZSBjaGFubmVscyBmb3IgYW5hbG9nIGkvbyAoZXZlbiB0byBvdXRwdXQsIG9kZCB0byBpbnB1dCkgKi8KK3N0YXRpYyB2b2lkIF9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgaW50IGNoYW5uZWwpCit7CisJaW50IGNoYW5fYSwgY2hhbl9iLCBjb25mLCBjaGFubmVsX29mZnNldDsKKworCWNoYW5uZWxfb2Zmc2V0ID0gX191bmlveHg1X2RlZmluZV9jaGFuX29mZnNldChjaGFubmVsKTsKKwljb25mID0gdXNwLT51c3BfcHJldl9jbl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXTsKKwljaGFuX2EgPSBjaGFuX2IgPSAxOworCisJLyogc2V0dGluZyBjaGFubmVsIEEgYW5kIGNoYW5uZWwgQiBtYXNrICovCisJaWYgKGNoYW5uZWwgJSAyID09IDApIHsKKwkJY2hhbl9hIDw8PSBjaGFubmVsICYgMHgwNzsKKwkJY2hhbl9iIDw8PSAoY2hhbm5lbCArIDEpICYgMHgwNzsKKwl9IGVsc2UgeworCQljaGFuX2EgPDw9IChjaGFubmVsIC0gMSkgJiAweDA3OworCQljaGFuX2IgPDw9IGNoYW5uZWwgJiAweDA3OworCX0KKworCWNvbmYgfD0gY2hhbl9hOwkJLyogZXZlbiBjaGFubmVsIG90IG91dHB1dCAqLworCWNvbmYgJj0gfmNoYW5fYjsJLyogb2RkIGNoYW5uZWwgdG8gaW5wdXQgKi8KKworCW91dGIoMSwgdXNwLT51c3BfaW9iYXNlICsgMCk7CisJb3V0Yihjb25mLCB1c3AtPnVzcF9pb2Jhc2UgKyBjaGFubmVsX29mZnNldCk7CisJb3V0YigwLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKKworCXVzcC0+dXNwX3ByZXZfY25fdmFsW2NoYW5uZWxfb2Zmc2V0IC0gMV0gPSBjb25mOworfQorCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXAorICogdGhpcyBmdW5jdGlvbiBkZWZpbmVzIGlmIHRoZSBnaXZlbiBjaGFubmVsIG51bWJlciAgKgorICogZW50ZXJzIGluIGRlZmF1bHQgbnVtZXJpYyBpbnRlcnNwYWNlKGZyb20gMCB0byAyMykgKgorICogYW5kIGl0IHJldHVybnMgYWRkcmVzcyBvZmZzZXQgZm9yIHVzYWdlIG5lZWRlZCAgICAgKgorICogY2hhbm5lbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RhdGljIGludCBfX3VuaW94eDVfZGVmaW5lX2NoYW5fb2Zmc2V0KGludCBjaGFuX251bSkKK3sKKworCWlmIChjaGFuX251bSA8IDAgfHwgY2hhbl9udW0gPiAyMykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIChjaGFuX251bSA+PiAzKSArIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKaW5kZXggMzUxMzgyNS4uZDBiNTllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwpAQCAtMSw0ICsxLDQgQEAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjEiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4yIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0aXJsaW5nL0lUTCBVU0ItRFVYIC0tIEJlcm5kLlBvcnJAZjJzLmNvbSIKIC8qCkBAIC0yNSw4ICsyNSw4IEBACiBEZXNjcmlwdGlvbjogVW5pdmVyc2l0eSBvZiBTdGlybGluZyBVU0IgREFRICYgSU5DSVRFIFRlY2hub2xvZ3kgTGltaXRlZAogRGV2aWNlczogW0lUTF0gVVNCLURVWCAodXNiZHV4Lm8pCiBBdXRob3I6IEJlcm5kIFBvcnIgPEJlcm5kUG9yckBmMnMuY29tPgotVXBkYXRlZDogMjUgTm92IDIwMDcKLVN0YXR1czogVGVzdGluZworVXBkYXRlZDogOCBEZWMgMjAwOAorU3RhdHVzOiBTdGFibGUKIENvbmZpZ3VyYXRpb24gb3B0aW9uczoKICAgWW91IGhhdmUgdG8gdXBsb2FkIGZpcm13YXJlIHdpdGggdGhlIC1pIG9wdGlvbi4gVGhlCiAgIGZpcm13YXJlIGlzIHVzdWFsbHkgaW5zdGFsbGVkIHVuZGVyIC91c3Ivc2hhcmUvdXNiIG9yCkBAIC03OSw2ICs3OSw3IEBACiAgKiAxLjI6ICBhZGRlZCBQV00gc3Vwb3J0IHZpYSBFUDQKICAqIDIuMDogIFBXTSBzZWVtcyB0byBiZSBzdGFibGUgYW5kIGlzIG5vdCBpbnRlcmZlcmluZyB3aXRoIHRoZSBvdGhlciBmdW5jdGlvbnMKICAqIDIuMTogIGNoYW5nZWQgUFdNIEFQSQorICogMi4yOiAgYWRkZWQgZmlybXdhcmUga2VybmVsIHJlcXVlc3QgdG8gZml4IGFuIHVkZXYgcHJvYmxlbQogICoKICAqLwogCkBAIC05NCw2ICs5NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCkBAIC0yMTIsNyArMjE0LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogY29tZWRpIGNvbnN0YW50cyAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FpX3JhbmdlID0geyA0LCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FpX3JhbmdlID0geyA0LCB7CiAJCQlCSVBfUkFOR0UoNC4wOTYpLAogCQkJQklQX1JBTkdFKDQuMDk2IC8gMiksCiAJCQlVTklfUkFOR0UoNC4wOTYpLApAQCAtMjIwLDcgKzIyMiw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FvX3JhbmdlID0geyAyLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FvX3JhbmdlID0geyAyLCB7CiAJCQlCSVBfUkFOR0UoNC4wOTYpLAogCQkJVU5JX1JBTkdFKDQuMDk2KSwKIAl9CkBAIC0yNTEsNyArMjUzLDcgQEAKIAkvKiBwd20tdHJhbnNmZXIgaGFuZGxpbmcgKi8KIAlzdHJ1Y3QgdXJiICp1cmJQd207CiAJLyogUFdNIHBlcmlvZCAqLwotCWxzYW1wbF90IHB3bVBlcmlvZDsKKwl1bnNpZ25lZCBpbnQgcHdtUGVyaW9kOwogCS8qIFBXTSBpbnRlcm5hbCBkZWxheSBmb3IgdGhlIEdQSUYgaW4gdGhlIEZYMiAqLwogCWludDhfdCBwd21EZWxheTsKIAkvKiBzaXplIG9mIHRoZSBQV00gYnVmZmVyIHdoaWNoIGhvbGRzIHRoZSBiaXQgcGF0dGVybiAqLwpAQCAtMjY3LDcgKzI2OSw3IEBACiAJLyogaW50ZXJmYWNlIHN0cnVjdHVyZSBpbiAyLjYgKi8KIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCS8qIGNvbWVkaSBkZXZpY2UgZm9yIHRoZSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCWNvbWVkaV9kZXZpY2UgKmNvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwogCS8qIGlzIGl0IFVTQl9TUEVFRF9ISUdIIG9yIG5vdD8gKi8KIAlzaG9ydCBpbnQgaGlnaF9zcGVlZDsKIAkvKiBhc3luY2hyb25vdXMgY29tbWFuZCBpcyBydW5uaW5nICovCkBAIC0zNjEsNyArMzYzLDcgQEAKICAqIFRoaXMgd2lsbCBjYW5jZWwgYSBydW5uaW5nIGFjcXVpc2l0aW9uIG9wZXJhdGlvbi4KICAqIFRoaXMgaXMgY2FsbGVkIGJ5IGNvbWVkaSBidXQgbmV2ZXIgZnJvbSBpbnNpZGUgdGhlIGRyaXZlci4KICAqLwotc3RhdGljIGludCB1c2JkdXhfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YjsKIAlpbnQgcmVzID0gMDsKQEAgLTM5MCw4ICszOTIsOCBAQAogewogCWludCBpLCBlcnIsIG47CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWI7Ci0JY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAkvKiB0aGUgY29udGV4dCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHN1YmRldmljZSAqLwogCXRoaXNfY29tZWRpZGV2ID0gdXJiLT5jb250ZXh0OwpAQCAtNTU5LDcgKzU2MSw3IEBACiB9CiAKIC8qIGZvcmNlIHVubGluaywgaXMgY2FsbGVkIGJ5IGNvbWVkaSAqLwotc3RhdGljIGludCB1c2JkdXhfYW9fY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgcmVzID0gMDsKQEAgLTU4NCw4ICs1ODYsOCBAQAogCWludCBpLCByZXQ7CiAJaW50OF90ICpkYXRhcDsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YjsKLQljb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCS8qIHRoZSBjb250ZXh0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc3ViZGV2aWNlICovCiAJdGhpc19jb21lZGlkZXYgPSB1cmItPmNvbnRleHQ7CkBAIC02NTQsNyArNjU2LDcgQEAKIAkJKCh1aW50OF90ICopICh1cmItPnRyYW5zZmVyX2J1ZmZlcikpWzBdID0KIAkJCXMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOwogCQlmb3IgKGkgPSAwOyBpIDwgcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47IGkrKykgewotCQkJc2FtcGxfdCB0ZW1wOworCQkJc2hvcnQgdGVtcDsKIAkJCWlmIChpID49IE5VTU9VVENIQU5ORUxTKQogCQkJCWJyZWFrOwogCkBAIC03MTgsMzEgKzcyMCwyOSBAQAogCWludCBlcnJjb2RlID0gMDsKIAl1aW50OF90IGxvY2FsX3RyYW5zZmVyX2J1ZmZlclsxNl07CiAKLQlpZiAodXNiZHV4c3ViLT5wcm9iZWQpIHsKLQkJLyogN2Y5MiB0byB6ZXJvICovCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDA7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCi0JCQkvKiBjcmVhdGUgYSBwaXBlIGZvciBhIGNvbnRyb2wgdHJhbnNmZXIgKi8KLQkJCXVzYl9zbmRjdHJscGlwZSh1c2JkdXhzdWItPnVzYmRldiwgMCksCi0JCQkvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLwotCQkJVVNCRFVYU1VCX0ZJUk1XQVJFLAotCQkJLyogYm1SZXF1ZXN0VHlwZSAqLwotCQkJVkVORE9SX0RJUl9PVVQsCi0JCQkvKiBWYWx1ZSAqLwotCQkJVVNCRFVYU1VCX0NQVUNTLAotCQkJLyogSW5kZXggKi8KLQkJCTB4MDAwMCwKLQkJCS8qIGFkZHJlc3Mgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLwotCQkJbG9jYWxfdHJhbnNmZXJfYnVmZmVyLAotCQkJLyogTGVuZ3RoICovCi0JCQkxLAotCQkJLyogVGltZW91dCAqLwotCQkJRVpUSU1FT1VUKTsKLQkJaWYgKGVycmNvZGUgPCAwKSB7Ci0JCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJCSJjb21lZGlfOiBjb250cm9sIG1zZyBmYWlsZWQgKHN0YXJ0KVxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQorCS8qIDdmOTIgdG8gemVybyAqLworCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDA7CisJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhzdWItPnVzYmRldiwKKwkJCQkgIC8qIGNyZWF0ZSBhIHBpcGUgZm9yIGEgY29udHJvbCB0cmFuc2ZlciAqLworCQkJCSAgdXNiX3NuZGN0cmxwaXBlKHVzYmR1eHN1Yi0+dXNiZGV2LCAwKSwKKwkJCQkgIC8qIGJSZXF1ZXN0LCAiRmlybXdhcmUiICovCisJCQkJICBVU0JEVVhTVUJfRklSTVdBUkUsCisJCQkJICAvKiBibVJlcXVlc3RUeXBlICovCisJCQkJICBWRU5ET1JfRElSX09VVCwKKwkJCQkgIC8qIFZhbHVlICovCisJCQkJICBVU0JEVVhTVUJfQ1BVQ1MsCisJCQkJICAvKiBJbmRleCAqLworCQkJCSAgMHgwMDAwLAorCQkJCSAgLyogYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgYnVmZmVyICovCisJCQkJICBsb2NhbF90cmFuc2Zlcl9idWZmZXIsCisJCQkJICAvKiBMZW5ndGggKi8KKwkJCQkgIDEsCisJCQkJICAvKiBUaW1lb3V0ICovCisJCQkJICBFWlRJTUVPVVQpOworCWlmIChlcnJjb2RlIDwgMCkgeworCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAorCQkJImNvbWVkaV86IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RhcnQpXG4iKTsKKwkJcmV0dXJuIGVycmNvZGU7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzUyLDI4ICs3NTIsMjcgQEAKIAlpbnQgZXJyY29kZSA9IDA7CiAKIAl1aW50OF90IGxvY2FsX3RyYW5zZmVyX2J1ZmZlclsxNl07Ci0JaWYgKHVzYmR1eHN1Yi0+cHJvYmVkKSB7Ci0JCS8qIDdmOTIgdG8gb25lICovCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDE7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4c3ViLT51c2JkZXYsIDApLAotCQkJLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KLQkJCVVTQkRVWFNVQl9GSVJNV0FSRSwKLQkJCS8qIGJtUmVxdWVzdFR5cGUgKi8KLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLyogVmFsdWUgKi8KLQkJCVVTQkRVWFNVQl9DUFVDUywKLQkJCS8qIEluZGV4ICovCi0JCQkweDAwMDAsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8qIExlbmd0aCAqLwotCQkJMSwKLQkJCS8qIFRpbWVvdXQgKi8KLQkJCUVaVElNRU9VVCk7Ci0JCWlmIChlcnJjb2RlIDwgMCkgewotCQkJZGV2X2VycigmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKLQkJCQkiY29tZWRpXzogY29udHJvbCBtc2cgZmFpbGVkIChzdG9wKVxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQorCisJLyogN2Y5MiB0byBvbmUgKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAxOworCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCisJCQkJICB1c2Jfc25kY3RybHBpcGUodXNiZHV4c3ViLT51c2JkZXYsIDApLAorCQkJCSAgLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KKwkJCQkgIFVTQkRVWFNVQl9GSVJNV0FSRSwKKwkJCQkgIC8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJCQkgIFZFTkRPUl9ESVJfT1VULAorCQkJCSAgLyogVmFsdWUgKi8KKwkJCQkgIFVTQkRVWFNVQl9DUFVDUywKKwkJCQkgIC8qIEluZGV4ICovCisJCQkJICAweDAwMDAsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIC8qIExlbmd0aCAqLworCQkJCSAgMSwKKwkJCQkgIC8qIFRpbWVvdXQgKi8KKwkJCQkgIEVaVElNRU9VVCk7CisJaWYgKGVycmNvZGUgPCAwKSB7CisJCWRldl9lcnIoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCisJCQkiY29tZWRpXzogY29udHJvbCBtc2cgZmFpbGVkIChzdG9wKVxuIik7CisJCXJldHVybiBlcnJjb2RlOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc4NCwxMyArNzgzLDcgQEAKIHsKIAlpbnQgZXJyY29kZTsKIAotCWlmICh1c2JkdXhzdWItPnByb2JlZCkgewotCQlkZXZfZGJnKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJImNvbWVkaSVkOiB1c2JkdXg6IHVwbG9hZGluZyAlZCBieXRlcyIKLQkJCSIgdG8gYWRkciAlZCwgZmlyc3QgYnl0ZT0lZC5cbiIsCi0JCQl1c2JkdXhzdWItPmNvbWVkaWRldi0+bWlub3IsIGxlbiwKLQkJCXN0YXJ0QWRkciwgbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzBdKTsKLQkJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhzdWItPnVzYmRldiwKKwllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eHN1Yi0+dXNiZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eHN1Yi0+dXNiZGV2LCAwKSwKIAkJCS8qIGJyZXF1ZXN0LCBmaXJtd2FyZSAqLwogCQkJVVNCRFVYU1VCX0ZJUk1XQVJFLApAQCAtODA2LDE2ICs3OTksMTIgQEAKIAkJCWxlbiwKIAkJCS8qIHRpbWVvdXQgKi8KIAkJCUVaVElNRU9VVCk7Ci0JCWRldl9kYmcoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCi0JCQkiY29tZWRpXzogcmVzdWx0PSVkXG4iLCBlcnJjb2RlKTsKLQkJaWYgKGVycmNvZGUgPCAwKSB7Ci0JCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJCSJjb21lZGlfOiB1cGxvYWQgZmFpbGVkXG4iKTsKLQkJCXJldHVybiBlcnJjb2RlOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogbm8gZGV2aWNlIG9uIHRoZSBidXMgZm9yIHRoaXMgaW5kZXggKi8KLQkJcmV0dXJuIC1FRkFVTFQ7CisJZGV2X2RiZygmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKKwkJImNvbWVkaV86IHJlc3VsdD0lZFxuIiwgZXJyY29kZSk7CisJaWYgKGVycmNvZGUgPCAwKSB7CisJCWRldl9lcnIoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCisJCSJjb21lZGlfOiB1cGxvYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycmNvZGU7CiAJfQogCXJldHVybiAwOwogfQpAQCAtOTA3LDggKzg5Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICBjb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHVzYmR1eF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwLCB0bXAsIGk7CiAJdW5zaWduZWQgaW50IHRtcFRpbWVyOwpAQCAtMTEyNyw3ICsxMTE2LDcgQEAKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYWlfaW50dHJpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdGF0aWMgaW50IHVzYmR1eF9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdHJpZ251bSkKIHsKIAlpbnQgcmV0OwpAQCAtMTE3MSw5ICsxMTYwLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYWlfY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlOwogCWludCBpLCByZXQ7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0xMjg3LDExICsxMjc2LDExIEBACiB9CiAKIC8qIE1vZGUgMCBpcyB1c2VkIHRvIGdldCBhIHNpbmdsZSBjb252ZXJzaW9uIG9uIGRlbWFuZCAqLwotc3RhdGljIGludCB1c2JkdXhfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7Ci0JbHNhbXBsX3Qgb25lID0gMDsKKwl1bnNpZ25lZCBpbnQgb25lID0gMDsKIAlpbnQgY2hhbiwgcmFuZ2U7CiAJaW50IGVycjsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKQEAgLTEzNDgsOCArMTMzNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogYW5hbG9nIG91dCAqLwogCi1zdGF0aWMgaW50IHVzYmR1eF9hb19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaTsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMTM3MCw4ICsxMzU5LDggQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaSwgZXJyOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0xNDIwLDcgKzE0MDksNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9hb19pbnR0cmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgICAgIHVuc2lnbmVkIGludCB0cmlnbnVtKQogewogCWludCByZXQ7CkBAIC0xNDYxLDggKzE0NTAsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9hb19jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2NtZCAqY21kKQorc3RhdGljIGludCB1c2JkdXhfYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMCwgdG1wOwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwpAQCAtMTYwMCw5ICsxNTg5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYW9fY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgaW50IGNoYW4sIGdhaW47CiAJaW50IGksIHJldDsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKQEAgLTE3MDgsOCArMTY5Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCkBAIC0xNzM5LDggKzE3MjgsOCBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQljb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0xNzg2LDggKzE3NzUsOCBAQAogfQogCiAvKiByZWFkcyB0aGUgNCBjb3VudGVycywgb25seSB0d28gYXJlIHVzZWQganVzdCBub3cgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2NvdW50ZXJfcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfY291bnRlcl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCBjaGFuID0gaW5zbi0+Y2hhbnNwZWM7CkBAIC0xODIwLDggKzE4MDksOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX3dyaXRlKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQljb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCBlcnI7CkBAIC0xODUwLDggKzE4MzksOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X2NvdW50ZXJfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAkvKiBub3RoaW5nIHRvIGRvIHNvIGZhciAqLwogCXJldHVybiAyOwpAQCAtMTg5NCw3ICsxODgzLDcgQEAKIH0KIAogLyogZm9yY2UgdW5saW5rIC0gaXMgY2FsbGVkIGJ5IGNvbWVkaSAqLwotc3RhdGljIGludCB1c2JkdXhfcHdtX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHVzYmR1eF9wd21fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCByZXMgPSAwOwpAQCAtMTkxNiw4ICsxOTA1LDggQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViOwotCWNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJLyogcHJpbnRrKEtFUk5fREVCVUcgIlBXTTogSVJRXG4iKTsgKi8KIApAQCAtMjAwNyw4ICsxOTk2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfcHdtX3BlcmlvZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGxzYW1wbF90IHBlcmlvZCkKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9wZXJpb2Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHVuc2lnbmVkIGludCBwZXJpb2QpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJaW50IGZ4MmRlbGF5ID0gMjU1OwpAQCAtMjAzNSw3ICsyMDI0LDcgQEAKIH0KIAogLyogaXMgY2FsbGVkIGZyb20gaW5zbiBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYWxsIHRoZSBzYW5pdHkgY2hlY2tzICovCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fc3RhcnQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCB1c2JkdXhfcHdtX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWludCByZXQsIGk7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0yMDY3LDggKzIwNTYsOCBAQAogfQogCiAvKiBnZW5lcmF0ZXMgdGhlIGJpdCBwYXR0ZXJuIGZvciBQV00gd2l0aCB0aGUgb3B0aW9uYWwgc2lnbiBiaXQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X3B3bV9wYXR0ZXJuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgIGludCBjaGFubmVsLCBsc2FtcGxfdCB2YWx1ZSwgbHNhbXBsX3Qgc2lnbikKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9wYXR0ZXJuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IHNpZ24pCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJaW50IGksIHN6YnVmOwpAQCAtMjEwOCw4ICsyMDk3LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfcHdtX3dyaXRlKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9wd21fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAKQEAgLTIxMzMsMTYgKzIxMjIsMTYgQEAKIAkJCQkgIGRhdGFbMF0sIDApOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fcmVhZChjb21lZGlfZGV2aWNlICp4MSwgY29tZWRpX3N1YmRldmljZSAqeDIsCi0JCQkgICBjb21lZGlfaW5zbiAqeDMsIGxzYW1wbF90ICp4NCkKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICp4MSwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKngyLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICp4MywgdW5zaWduZWQgaW50ICp4NCkKIHsKIAkvKiBub3QgbmVlZGVkICovCiAJcmV0dXJuIC1FSU5WQUw7CiB9OwogCiAvKiBzd2l0Y2hlcyBvbi9vZmYgUFdNICovCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC0yMjkyLDEzICsyMjgxLDEzIEBACiAjZGVmaW5lIEZJUk1XQVJFX01BWF9MRU4gMHgyMDAwCiAKIC8qIHRha2VuIGZyb20gRGF2aWQgQnJvd25lbGwncyBmeGxvYWQgYW5kIGFkanVzdGVkIGZvciB0aGlzIGRyaXZlciAqLwotc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHN0cnVjdCB1c2JkdXhzdWIgKnVzYmR1eHN1Yiwgdm9pZCAqZmlybXdhcmVQdHIsCitzdGF0aWMgaW50IHJlYWRfZmlybXdhcmUoc3RydWN0IHVzYmR1eHN1YiAqdXNiZHV4c3ViLCBjb25zdCB2b2lkICpmaXJtd2FyZVB0ciwKIAkJCSBsb25nIHNpemUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXY7CiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmZwID0gKGNoYXIgKilmaXJtd2FyZVB0cjsKLQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqZmlybXdhcmVCaW5hcnk7CiAJaW50IHJlcyA9IDA7CiAJaW50IG1heEFkZHIgPSAwOwogCkBAIC0yMzIyLDYgKzIzMTEsNyBAQAogCQkJaisrOwogCQkJaWYgKGogPj0gc2l6ZW9mKGJ1ZikpIHsKIAkJCQlkZXZfZXJyKGRldiwgImNvbWVkaV86IGJvZ3VzIGZpcm13YXJlIGZpbGUhXG4iKTsKKwkJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9CkBAIC0yMzQ0LDYgKzIzMzQsNyBAQAogCQlpZiAoYnVmWzBdICE9ICc6JykgewogCQkJZGV2X2VycihkZXYsICJjb21lZGlfOiB1cGxvYWQ6IG5vdCBhbiBpaGV4IHJlY29yZDogJXMiLAogCQkJCWJ1Zik7CisJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCkBAIC0yMzYwLDYgKzIzNTEsNyBAQAogCQlpZiAobWF4QWRkciA+PSBGSVJNV0FSRV9NQVhfTEVOKSB7CiAJCQlkZXZfZXJyKGRldiwgImNvbWVkaV86IGZpcm13YXJlIHVwbG9hZCBnb2VzICIKIAkJCQkiYmV5b25kIEZYMiBSQU0gYm91bmRhcmllcy5cbiIpOworCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJLyogZGV2X2RiZyhkZXYsICJjb21lZGlfOiBvZmY9JXgsIGxlbj0leDpcbiIsIG9mZiwgbGVuKTsgKi8KQEAgLTIzNzUsNiArMjM2Nyw3IEBACiAJCWlmICh0eXBlICE9IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiY29tZWRpXzogdW5zdXBwb3J0ZWQgcmVjb3JkIHR5cGU6ICV1XG4iLAogCQkJCXR5cGUpOworCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIApAQCAtMjM5NSw2ICsyMzg4LDM0IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIHZvaWQgdXNiZHV4X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAorCQkJCQkJICAgICB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCB1c2JkdXhzdWIgKnVzYmR1eHN1Yl90bXAgPSBjb250ZXh0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSB1c2JkdXhzdWJfdG1wLT51c2JkZXY7CisJaW50IHJldDsKKworCWlmIChmdyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnVzYmRldi0+ZGV2LAorCQkJIkZpcm13YXJlIGNvbXBsZXRlIGhhbmRsZXIgd2l0aG91dCBmaXJtd2FyZSFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiB3ZSBuZWVkIHRvIHVwbG9hZCB0aGUgZmlybXdhcmUgaGVyZSBiZWNhdXNlIGZ3IHdpbGwgYmUKKwkgKiBmcmVlZCBvbmNlIHdlJ3ZlIGxlZnQgdGhpcyBmdW5jdGlvbgorCSAqLworCXJldCA9IHJlYWRfZmlybXdhcmUodXNiZHV4c3ViX3RtcCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmdXNiZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IHVwbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwKKwkJCXJldCk7CisJCXJldHVybjsKKwl9CisJY29tZWRpX3VzYl9hdXRvX2NvbmZpZyh1c2JkZXYsIEJPQVJETkFNRSk7Cit9CisKIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHVyYnMgYW5kIGluaXRpYWxpc2UgdGhlbSAqLwogc3RhdGljIGludCB1c2JkdXhzdWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpbnRlcmYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0yNDAzLDYgKzI0MjQsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1aW50ZXJmLT5kZXY7CiAJaW50IGk7CiAJaW50IGluZGV4OworCWludCByZXQ7CiAKIAlkZXZfZGJnKGRldiwgImNvbWVkaV86IHVzYmR1eF86ICIKIAkJImZpbmRpbmcgYSBmcmVlIHN0cnVjdHVyZSBmb3IgdGhlIHVzYi1kZXZpY2VcbiIpOwpAQCAtMjYzNyw2ICsyNjU5LDE5IEBACiAJLyogd2UndmUgcmVhY2hlZCB0aGUgYm90dG9tIG9mIHRoZSBmdW5jdGlvbiAqLwogCXVzYmR1eHN1YltpbmRleF0ucHJvYmVkID0gMTsKIAl1cCgmc3RhcnRfc3RvcF9zZW0pOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsCisJCQkJICAgICAgRldfQUNUSU9OX0hPVFBMVUcsCisJCQkJICAgICAgInVzYmR1eF9maXJtd2FyZS5oZXgiLAorCQkJCSAgICAgICZ1ZGV2LT5kZXYsCisJCQkJICAgICAgdXNiZHV4c3ViICsgaW5kZXgsCisJCQkJICAgICAgdXNiZHV4X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJZGV2X2luZm8oZGV2LCAiY29tZWRpXzogdXNiZHV4JWQgIgogCQkgImhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXNlZC5cbiIsIGluZGV4KTsKIAkvKiBzdWNjZXNzICovCkBAIC0yNjU4LDYgKzI2OTMsNyBAQAogCQkJImNvbWVkaV86IEJVRyEgY2FsbGVkIHdpdGggd3JvbmcgcHRyISEhXG4iKTsKIAkJcmV0dXJuOwogCX0KKwljb21lZGlfdXNiX2F1dG9fdW5jb25maWcodWRldik7CiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwogCWRvd24oJnVzYmR1eHN1Yl90bXAtPnNlbSk7CiAJdGlkeV91cCh1c2JkdXhzdWJfdG1wKTsKQEAgLTI2NjcsMTQgKzI3MDMsMTQgQEAKIH0KIAogLyogaXMgY2FsbGVkIHdoZW4gY29tZWRpLWNvbmZpZyBpcyBjYWxsZWQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCB1c2JkdXhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgcmV0OwogCWludCBpbmRleDsKIAlpbnQgaTsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp1ZGV2OwogCi0JY29tZWRpX3N1YmRldmljZSAqcyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOwogCWRldi0+cHJpdmF0ZSA9IE5VTEw7CiAKIAlkb3duKCZzdGFydF9zdG9wX3NlbSk7CkBAIC0yODM0LDcgKzI4NzAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCB1c2JkdXhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdXNiZHV4c3ViX3RtcDsKIApAQCAtMjg2NywyNiArMjkwMywxMyBAQAogfQogCiAvKiBtYWluIGRyaXZlciBzdHJ1Y3QgKi8KLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl91c2JkdXggPSB7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3VzYmR1eCA9IHsKICAgICAgIC5kcml2ZXJfbmFtZSA9CSJ1c2JkdXgiLAogICAgICAgLm1vZHVsZSA9CQlUSElTX01PRFVMRSwKICAgICAgIC5hdHRhY2ggPQkJdXNiZHV4X2F0dGFjaCwKICAgICAgIC5kZXRhY2ggPQkJdXNiZHV4X2RldGFjaCwKIH07CiAKLXN0YXRpYyB2b2lkIGluaXRfdXNiX2RldmljZXModm9pZCkKLXsKLQlpbnQgaW5kZXg7Ci0KLQkvKiBhbGwgZGV2aWNlcyBlbnRyaWVzIGFyZSBpbnZhbGlkIHRvIGJlZ2luIHdpdGggKi8KLQkvKiB0aGV5IHdpbGwgYmVjb21lIHZhbGlkIGJ5IHRoZSBwcm9iZSBmdW5jdGlvbiAqLwotCS8qIGFuZCB0aGVuIGZpbmFsbHkgYnkgdGhlIGF0dGFjaC1mdW5jdGlvbiAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTVVTQkRVWDsgaW5kZXgrKykgewotCQltZW1zZXQoJih1c2JkdXhzdWJbaW5kZXhdKSwgMHgwMCwgc2l6ZW9mKHVzYmR1eHN1YltpbmRleF0pKTsKLQkJaW5pdF9NVVRFWCgmKHVzYmR1eHN1YltpbmRleF0uc2VtKSk7Ci0JfQotfQotCiAvKiBUYWJsZSB3aXRoIHRoZSBVU0ItZGV2aWNlczoganVzdCBub3cgb25seSB0ZXN0aW5nIElEcyAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmR1eHN1Yl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDAxKSB9LApAQCAtMjkwNywxOCArMjkzMCwxNyBAQAogLyogQ2FuJ3QgdXNlIHRoZSBuaWNlIG1hY3JvIGFzIEkgaGF2ZSBhbHNvIHRvIGluaXRpYWxpc2UgdGhlIFVTQiAqLwogLyogc3Vic3lzdGVtOiAqLwogLyogcmVnaXN0ZXJpbmcgdGhlIHVzYi1zeXN0ZW0gX2FuZF8gdGhlIGNvbWVkaS1kcml2ZXIgKi8KLXN0YXRpYyBpbnQgaW5pdF91c2JkdXgodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdXNiZHV4KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiCiAJICAgICAgIERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyAiXG4iKTsKLQlpbml0X3VzYl9kZXZpY2VzKCk7CiAJdXNiX3JlZ2lzdGVyKCZ1c2JkdXhzdWJfZHJpdmVyKTsKIAljb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfdXNiZHV4KTsKIAlyZXR1cm4gMDsKIH0KIAogLyogZGVyZWdpc3RlcmluZyB0aGUgY29tZWRpIGRyaXZlciBhbmQgdGhlIHVzYi1zdWJzeXN0ZW0gKi8KLXN0YXRpYyB2b2lkIGV4aXRfdXNiZHV4KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF91c2JkdXgodm9pZCkKIHsKIAljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl91c2JkdXgpOwogCXVzYl9kZXJlZ2lzdGVyKCZ1c2JkdXhzdWJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCmluZGV4IDNhMDBmZjAuLjJmYjY0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYwpAQCAtMSwzMyArMSwyMCBAQAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuOTlhIgotI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQi1EVVhmYXN0LCBCZXJuZFBvcnJAZjJzLmNvbSIKIC8qCi0gICBjb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKLSAgIENvcHlyaWdodCAoQykgMjAwNCBCZXJuZCBQb3JyLCBCZXJuZC5Qb3JyQGYycy5jb20KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KLS8qCi1Ecml2ZXI6IHVzYmR1eGZhc3QKLURlc2NyaXB0aW9uOiBJVEwgVVNCLURVWGZhc3QKLURldmljZXM6IFtJVExdIFVTQi1EVVggKHVzYmR1eGZhc3QubykKLUF1dGhvcjogQmVybmQgUG9yciA8QmVybmRQb3JyQGYycy5jb20+Ci1VcGRhdGVkOiAwNCBEZWMgMjAwNgotU3RhdHVzOiB0ZXN0aW5nCi0qLworICogIENvcHlyaWdodCAoQykgMjAwNCBCZXJuZCBQb3JyLCBCZXJuZC5Qb3JyQGYycy5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLwogCiAvKgogICogSSBtdXN0IGdpdmUgY3JlZGl0IGhlcmUgdG8gQ2hyaXMgQmF1Z2hlciB3aG8KQEAgLTQyLDEyICsyOSwxNiBAQAogICogMC45OiBEcm9wcGluZyB0aGUgZmlyc3QgZGF0YSBwYWNrZXQgd2hpY2ggc2VlbXMgdG8gYmUgZnJvbSB0aGUgbGFzdCB0cmFuc2Zlci4KICAqICAgICAgQnVmZmVyIG92ZXJmbG93cyBpbiB0aGUgRlgyIGFyZSBoYW5kZWQgb3ZlciB0byBjb21lZGkuCiAgKiAwLjkyOiBEcm9wcGluZyBub3cgNCBwYWNrZXRzLiBUaGUgcXVhZCBidWZmZXIgaGFzIHRvIGJlIGVtcHRpZWQuCi0gKiAgICAgICBBZGRlZCBpbnNuIGNvbW1hbmQgYmFzaWNhbGx5IGZvciB0ZXN0aW5nLiBTYW1wbGUgcmF0ZSBpcyAxTUh6LzE2Y2g9NjIuNWtIegorICogICAgICAgQWRkZWQgaW5zbiBjb21tYW5kIGJhc2ljYWxseSBmb3IgdGVzdGluZy4gU2FtcGxlIHJhdGUgaXMKKyAqICAgICAgIDFNSHovMTZjaD02Mi41a0h6CiAgKiAwLjk5OiBJYW4gQWJib3R0IHBvaW50ZWQgb3V0IGEgYnVnIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4gVGhhbmtzIQogICogMC45OWE6IGFkZGVkIGV4dGVybmFsIHRyaWdnZXIuCisgKiAxLjAwOiBhZGRlZCBmaXJtd2FyZSBrZXJuZWwgcmVxdWVzdCB0byB0aGUgZHJpdmVyIHdoaWNoIGZpeGVkCisgKiAgICAgICB1ZGV2IGNvbGRwbHVnIHByb2JsZW0KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTksNTM2ICs1MCw1NDkgQEAKICNpbmNsdWRlICJjb21lZGlfZmMuaCIKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAotLy8gKHVuKWNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIGRlYnVnIGluZm8uCi0vLyNkZWZpbmUgQ09ORklHX0NPTUVESV9ERUJVRwotI3VuZGVmICBDT05GSUdfQ09NRURJX0RFQlVHCiAKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkJlcm5kIFBvcnIsIEJlcm5kUG9yckBmMnMuY29tIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCLURVWGZhc3QsIEJlcm5kUG9yckBmMnMuY29tIgogI2RlZmluZSBCT0FSRE5BTUUgInVzYmR1eGZhc3QiCiAKLS8vIHRpbWVvdXQgZm9yIHRoZSBVU0ItdHJhbnNmZXIKLSNkZWZpbmUgRVpUSU1FT1VUIDMwCisvKgorICogdGltZW91dCBmb3IgdGhlIFVTQi10cmFuc2ZlcgorICovCisjZGVmaW5lIEVaVElNRU9VVAkzMAogCi0vLyBjb25zdGFudHMgZm9yICJmaXJtd2FyZSIgdXBsb2FkIGFuZCBkb3dubG9hZAotI2RlZmluZSBVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFIDB4QTAKLSNkZWZpbmUgVkVORE9SX0RJUl9JTiAgMHhDMAotI2RlZmluZSBWRU5ET1JfRElSX09VVCAweDQwCisvKgorICogY29uc3RhbnRzIGZvciAiZmlybXdhcmUiIHVwbG9hZCBhbmQgZG93bmxvYWQKKyAqLworI2RlZmluZSBVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFCTB4QTAKKyNkZWZpbmUgVkVORE9SX0RJUl9JTgkJMHhDMAorI2RlZmluZSBWRU5ET1JfRElSX09VVAkJMHg0MAogCi0vLyBpbnRlcm5hbCBhZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKLSNkZWZpbmUgVVNCRFVYRkFTVFNVQl9DUFVDUyAweEU2MDAKKy8qCisgKiBpbnRlcm5hbCBhZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKKyAqLworI2RlZmluZSBVU0JEVVhGQVNUU1VCX0NQVUNTCTB4RTYwMAogCi0vLyBtYXggbGVuZ2h0aCBvZiB0aGUgdHJhbnNmZXItYnVmZmVyIGZvciBzb2Z0d2FyZSB1cGxvYWQKLSNkZWZpbmUgVEJfTEVOIDB4MjAwMAorLyoKKyAqIG1heCBsZW5naHRoIG9mIHRoZSB0cmFuc2Zlci1idWZmZXIgZm9yIHNvZnR3YXJlIHVwbG9hZAorICovCisjZGVmaW5lIFRCX0xFTgkweDIwMDAKIAotLy8gSW5wdXQgZW5kcG9pbnQgbnVtYmVyCi0jZGVmaW5lIEJVTEtJTkVQICAgICAgICAgICA2CisvKgorICogaW5wdXQgZW5kcG9pbnQgbnVtYmVyCisgKi8KKyNkZWZpbmUgQlVMS0lORVAJNgogCi0vLyBFbmRwb2ludCBmb3IgdGhlIEEvRCBjaGFubmVsbGlzdDogYnVsayBPVVQKLSNkZWZpbmUgQ0hBTk5FTExJU1RFUCAgICAgNAorLyoKKyAqIGVuZHBvaW50IGZvciB0aGUgQS9EIGNoYW5uZWxsaXN0OiBidWxrIE9VVAorICovCisjZGVmaW5lIENIQU5ORUxMSVNURVAJNAogCi0vLyBOdW1iZXIgb2YgY2hhbm5lbHMKLSNkZWZpbmUgTlVNQ0hBTk5FTFMgICAgICAgMzIKKy8qCisgKiBudW1iZXIgb2YgY2hhbm5lbHMKKyAqLworI2RlZmluZSBOVU1DSEFOTkVMUwkzMgogCi0vLyBzaXplIG9mIHRoZSB3YXZlZm9ybSBkZXNjcmlwdG9yCi0jZGVmaW5lIFdBVkVTSVpFICAgICAgICAgIDB4MjAKKy8qCisgKiBzaXplIG9mIHRoZSB3YXZlZm9ybSBkZXNjcmlwdG9yCisgKi8KKyNkZWZpbmUgV0FWRVNJWkUJMHgyMAogCi0vLyBTaXplIG9mIG9uZSBBL0QgdmFsdWUKLSNkZWZpbmUgU0laRUFESU4gICAgICAgICAgKChzaXplb2YoaW50MTZfdCkpKQorLyoKKyAqIHNpemUgb2Ygb25lIEEvRCB2YWx1ZQorICovCisjZGVmaW5lIFNJWkVBRElOCShzaXplb2YoaW50MTZfdCkpCiAKLS8vIFNpemUgb2YgdGhlIGlucHV0LWJ1ZmZlciBJTiBCWVRFUwotI2RlZmluZSBTSVpFSU5CVUYgICAgICAgICA1MTIKKy8qCisgKiBzaXplIG9mIHRoZSBpbnB1dC1idWZmZXIgSU4gQllURVMKKyAqLworI2RlZmluZSBTSVpFSU5CVUYJNTEyCiAKLS8vIDE2IGJ5dGVzLgotI2RlZmluZSBTSVpFSU5TTkJVRiAgICAgICA1MTIKKy8qCisgKiAxNiBieXRlcworICovCisjZGVmaW5lIFNJWkVJTlNOQlVGCTUxMgogCi0vLyBTaXplIG9mIHRoZSBidWZmZXIgZm9yIHRoZSBkdXggY29tbWFuZHMKLSNkZWZpbmUgU0laRU9GRFVYQlVGRkVSICAgIDI1NgkvLyBieXRlcworLyoKKyAqIHNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGhlIGR1eCBjb21tYW5kcyBpbiBieXRlcworICovCisjZGVmaW5lIFNJWkVPRkRVWEJVRkZFUgkyNTYKIAotLy8gTnVtYmVyIG9mIGluLVVSQnMgd2hpY2ggcmVjZWl2ZSB0aGUgZGF0YTogbWluPTUKLSNkZWZpbmUgTlVNT0ZJTkJVRkZFUlNISUdIICAgICAxMAorLyoKKyAqIG51bWJlciBvZiBpbi1VUkJzIHdoaWNoIHJlY2VpdmUgdGhlIGRhdGE6IG1pbj01CisgKi8KKyNkZWZpbmUgTlVNT0ZJTkJVRkZFUlNISUdICTEwCiAKLS8vIFRvdGFsIG51bWJlciBvZiB1c2JkdXhmYXN0IGRldmljZXMKLSNkZWZpbmUgTlVNVVNCRFVYRkFTVCAgICAgICAgICAgICAxNgorLyoKKyAqIHRvdGFsIG51bWJlciBvZiB1c2JkdXhmYXN0IGRldmljZXMKKyAqLworI2RlZmluZSBOVU1VU0JEVVhGQVNUCTE2CiAKLS8vIE51bWJlciBvZiBzdWJkZXZpY2VzCi0jZGVmaW5lIE5fU1VCREVWSUNFUyAgICAgICAgICAxCisvKgorICogbnVtYmVyIG9mIHN1YmRldmljZXMKKyAqLworI2RlZmluZSBOX1NVQkRFVklDRVMJMQogCi0vLyBBbmFsb2d1ZSBpbiBzdWJkZXZpY2UKLSNkZWZpbmUgU1VCREVWX0FEICAgICAgICAgICAgIDAKKy8qCisgKiBhbmFsb2d1ZSBpbiBzdWJkZXZpY2UKKyAqLworI2RlZmluZSBTVUJERVZfQUQJMAogCi0vLyBtaW4gZGVsYXkgc3RlcHMgZm9yIG1vcmUgdGhhbiBvbmUgY2hhbm5lbAotLy8gYmFzaWNhbGx5IHdoZW4gdGhlIG11eCBnaXZlcyB1cC4gOy0pCi0jZGVmaW5lIE1JTl9TQU1QTElOR19QRVJJT0QgOQkvLyBzdGVwcyBhdCAzME1IeiBpbiB0aGUgRlgyCisvKgorICogbWluIGRlbGF5IHN0ZXBzIGZvciBtb3JlIHRoYW4gb25lIGNoYW5uZWwKKyAqIGJhc2ljYWxseSB3aGVuIHRoZSBtdXggZ2l2ZXMgdXAgOy0pCisgKgorICogc3RlcHMgYXQgMzBNSHogaW4gdGhlIEZYMgorICovCisjZGVmaW5lIE1JTl9TQU1QTElOR19QRVJJT0QJOQogCi0vLyBNYXggbnVtYmVyIG9mIDEvMzBNSHogZGVsYXkgc3RlcHM6Ci0jZGVmaW5lIE1BWF9TQU1QTElOR19QRVJJT0QgNTAwCisvKgorICogbWF4IG51bWJlciBvZiAxLzMwTUh6IGRlbGF5IHN0ZXBzCisgKi8KKyNkZWZpbmUgTUFYX1NBTVBMSU5HX1BFUklPRAk1MDAKIAotLy8gTnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSB3ZSBzdGFydCBoYW5kaW5nIGRhdGEgb3ZlciB0byBjb21lZGkuCi0vLyBJdCdzIHF1YWQgYnVmZmVyaW5nIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSA0IHBhY2tldHMuCi0jZGVmaW5lIFBBQ0tFVFNfVE9fSUdOT1JFIDQKKy8qCisgKiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB0byBpZ25vcmUgYmVmb3JlIHdlIHN0YXJ0IGhhbmRpbmcgZGF0YQorICogb3ZlciB0byBjb21lZGksIGl0J3MgcXVhZCBidWZmZXJpbmcgYW5kIHdlIGhhdmUgdG8gaWdub3JlIDQgcGFja2V0cworICovCisjZGVmaW5lIFBBQ0tFVFNfVE9fSUdOT1JFCTQKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBjb21lZGkgY29uc3RhbnRzCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91c2JkdXhmYXN0X2FpX3JhbmdlID0geyAyLCB7Ci0JCQlCSVBfUkFOR0UoMC43NSksCi0JCQlCSVBfUkFOR0UoMC41KSwKLQl9CisvKgorICogY29tZWRpIGNvbnN0YW50cworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4ZmFzdF9haV9yYW5nZSA9IHsKKwkyLCB7IEJJUF9SQU5HRSgwLjc1KSwgQklQX1JBTkdFKDAuNSkgfQogfTsKIAogLyoKICAqIHByaXZhdGUgc3RydWN0dXJlIG9mIG9uZSBzdWJkZXZpY2UKKyAqCisgKiB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2hpY2ggaG9sZHMgYWxsIHRoZSBkYXRhIG9mIHRoaXMgZHJpdmVyCisgKiBvbmUgc3ViIGRldmljZSBqdXN0IG5vdzogQS9ECiAgKi8KLQotLy8gVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdoaWNoIGhvbGRzIGFsbCB0aGUgZGF0YSBvZiB0aGlzIGRyaXZlcgotLy8gb25lIHN1YiBkZXZpY2UganVzdCBub3c6IEEvRAotdHlwZWRlZiBzdHJ1Y3QgewotCS8vIGF0dGFjaGVkPwotCWludCBhdHRhY2hlZDsKLQkvLyBpcyBpdCBhc3NvY2lhdGVkIHdpdGggYSBzdWJkZXZpY2U/Ci0JaW50IHByb2JlZDsKLQkvLyBwb2ludGVyIHRvIHRoZSB1c2ItZGV2aWNlCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKLQkvLyBCVUxLLXRyYW5zZmVyIGhhbmRsaW5nOiB1cmIKLQlzdHJ1Y3QgdXJiICp1cmJJbjsKK3N0cnVjdCB1c2JkdXhmYXN0c3ViX3MgeworCWludCBhdHRhY2hlZDsJCQkvKiBpcyBhdHRhY2hlZD8gKi8KKwlpbnQgcHJvYmVkOwkJCS8qIGlzIGl0IGFzc29jaWF0ZWQgd2l0aCBhIHN1YmRldmljZT8gKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwkvKiBwb2ludGVyIHRvIHRoZSB1c2ItZGV2aWNlICovCisJc3RydWN0IHVyYiAqdXJiSW47CQkvKiBCVUxLLXRyYW5zZmVyIGhhbmRsaW5nOiB1cmIgKi8KIAlpbnQ4X3QgKnRyYW5zZmVyX2J1ZmZlcjsKLQkvLyBpbnB1dCBidWZmZXIgZm9yIHNpbmdsZSBpbnNuCi0JaW50MTZfdCAqaW5zbkJ1ZmZlcjsKLQkvLyBpbnRlcmZhY2UgbnVtYmVyCi0JaW50IGlmbnVtOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKLQkvLyBpbnRlcmZhY2Ugc3RydWN0dXJlIGluIDIuNgotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0jZW5kaWYKLQkvLyBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRleHQKLQljb21lZGlfZGV2aWNlICpjb21lZGlkZXY7Ci0JLy8gYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZwotCXNob3J0IGludCBhaV9jbWRfcnVubmluZzsKLQkvLyBjb250aW5vdXMgYXF1aXNpdGlvbgotCXNob3J0IGludCBhaV9jb250aW5vdXM7Ci0JLy8gbnVtYmVyIG9mIHNhbXBsZXMgdG8gYXF1aXJlCi0JbG9uZyBpbnQgYWlfc2FtcGxlX2NvdW50OwotCS8vIGNvbW1hbmRzCi0JdWludDhfdCAqZHV4X2NvbW1hbmRzOwotCS8vIGNvdW50ZXIgd2hpY2ggaWdub3JlcyB0aGUgZmlyc3QgYnVmZmVycwotCWludCBpZ25vcmU7CisJaW50MTZfdCAqaW5zbkJ1ZmZlcjsJCS8qIGlucHV0IGJ1ZmZlciBmb3Igc2luZ2xlIGluc24gKi8KKwlpbnQgaWZudW07CQkJLyogaW50ZXJmYWNlIG51bWJlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwkvKiBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0CisJCQkJCSAgIGNvbnRleHQgKi8KKwlzaG9ydCBpbnQgYWlfY21kX3J1bm5pbmc7CS8qIGFzeW5jaHJvbm91cyBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KKwlzaG9ydCBpbnQgYWlfY29udGlub3VzOwkJLyogY29udGlub3VzIGFxdWlzaXRpb24gKi8KKwlsb25nIGludCBhaV9zYW1wbGVfY291bnQ7CS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZSAqLworCXVpbnQ4X3QgKmR1eF9jb21tYW5kczsJCS8qIGNvbW1hbmRzICovCisJaW50IGlnbm9yZTsJCQkvKiBjb3VudGVyIHdoaWNoIGlnbm9yZXMgdGhlIGZpcnN0CisJCQkJCSAgIGJ1ZmZlcnMgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLX0gdXNiZHV4ZmFzdHN1Yl90OworfTsKIAotLy8gVGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgdXNiLWRhdGEgb2YgdGhlIGRyaXZlcgotLy8gaXMgYWxzbyB0aGUgcHJpdmF0ZSBkYXRhIGZvciB0aGUgY29tZWRpLWRldmljZS4KLS8vIFRoaXMgaGFzIHRvIGJlIGdsb2JhbCBhcyB0aGUgdXNiIHN1YnN5c3RlbSBuZWVkcwotLy8gZ2xvYmFsIHZhcmlhYmxlcy4gVGhlIG90aGVyIHJlYXNvbiBpcyB0aGF0IHRoaXMKLS8vIHN0cnVjdHVyZSBtdXN0IGJlIHRoZXJlIF9iZWZvcmVfIGFueSBjb21lZGkKLS8vIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGUgdXNiIHN1YnN5c3RlbSBtdXN0IGJlCi0vLyBpbml0aWFsaXNlZCBiZWZvcmUgY29tZWRpIGNhbiBhY2Nlc3MgaXQuCi1zdGF0aWMgdXNiZHV4ZmFzdHN1Yl90IHVzYmR1eGZhc3RzdWJbTlVNVVNCRFVYRkFTVF07CisvKgorICogVGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgdXNiLWRhdGEgb2YgdGhlIGRyaXZlcgorICogaXMgYWxzbyB0aGUgcHJpdmF0ZSBkYXRhIGZvciB0aGUgY29tZWRpLWRldmljZS4KKyAqIFRoaXMgaGFzIHRvIGJlIGdsb2JhbCBhcyB0aGUgdXNiIHN1YnN5c3RlbSBuZWVkcworICogZ2xvYmFsIHZhcmlhYmxlcy4gVGhlIG90aGVyIHJlYXNvbiBpcyB0aGF0IHRoaXMKKyAqIHN0cnVjdHVyZSBtdXN0IGJlIHRoZXJlIF9iZWZvcmVfIGFueSBjb21lZGkKKyAqIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGUgdXNiIHN1YnN5c3RlbSBtdXN0IGJlCisgKiBpbml0aWFsaXNlZCBiZWZvcmUgY29tZWRpIGNhbiBhY2Nlc3MgaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zIHVzYmR1eGZhc3RzdWJbTlVNVVNCRFVYRkFTVF07CiAKIHN0YXRpYyBERUNMQVJFX01VVEVYKHN0YXJ0X3N0b3Bfc2VtKTsKIAotLy8gYnVsayB0cmFuc2ZlcnMgdG8gdXNiZHV4ZmFzdAotCisvKgorICogYnVsayB0cmFuc2ZlcnMgdG8gdXNiZHV4ZmFzdAorICovCiAjZGVmaW5lIFNFTkRBRENPTU1BTkRTICAgICAgICAgICAgMAogI2RlZmluZSBTRU5ESU5JVEVQNiAgICAgICAgICAgICAgIDEKIAotc3RhdGljIGludCBzZW5kX2R1eF9jb21tYW5kcyh1c2JkdXhmYXN0c3ViX3QgKiB0aGlzX3VzYmR1eGZhc3RzdWIsIGludCBjbWRfdHlwZSkKK3N0YXRpYyBpbnQgc2VuZF9kdXhfY29tbWFuZHMoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcywgaW50IGNtZF90eXBlKQogewotCWludCByZXN1bHQsIG5zZW50OwotCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzWzBdID0gY21kX3R5cGU7CisJaW50IHRtcCwgbnNlbnQ7CisKKwl1ZGZzLT5kdXhfY29tbWFuZHNbMF0gPSBjbWRfdHlwZTsKKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlpbnQgaTsKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBkdXhfY29tbWFuZHM6ICIsCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vcik7Ci0JZm9yIChpID0gMDsgaSA8IFNJWkVPRkRVWEJVRkZFUjsgaSsrKSB7Ci0JCXByaW50aygiICUwMngiLCB0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tpXSk7Ci0JfQorCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogZHV4X2NvbW1hbmRzOiAiLAorCQl1ZGZzLT5jb21lZGlkZXYtPm1pbm9yKTsKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IFNJWkVPRkRVWEJVRkZFUjsgdG1wKyspCisJCXByaW50aygiICUwMngiLCB1ZGZzLT5kdXhfY29tbWFuZHNbdG1wXSk7CiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmCi0JcmVzdWx0ID0gdXNiX2J1bGtfbXNnKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCQkgICAgICBDSEFOTkVMTElTVEVQKSwKLQkJCSAgICAgIHRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzLCBTSVpFT0ZEVVhCVUZGRVIsCi0JCQkgICAgICAmbnNlbnQsIDEwMDAwKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoImNvbWVkaSVkOiBjb3VsZCBub3QgdHJhbnNtaXQgZHV4X2NvbW1hbmRzIHRvIHRoZSB1c2ItZGV2aWNlLCBlcnI9JWRcbiIsIHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwgcmVzdWx0KTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKKworCXRtcCA9IHVzYl9idWxrX21zZyh1ZGZzLT51c2JkZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUodWRmcy0+dXNiZGV2LCBDSEFOTkVMTElTVEVQKSwKKwkJCSAgIHVkZnMtPmR1eF9jb21tYW5kcywgU0laRU9GRFVYQlVGRkVSLCAmbnNlbnQsIDEwMDAwKTsKKwlpZiAodG1wIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogY291bGQgbm90IHRyYW5zbWl0IGR1eF9jb21tYW5kcyB0byIKKwkJICAgICAgInRoZSB1c2ItZGV2aWNlLCBlcnI9JWRcbiIsIHVkZnMtPmNvbWVkaWRldi0+bWlub3IsIHRtcCk7CisJcmV0dXJuIHRtcDsKIH0KIAotLy8gU3RvcHMgdGhlIGRhdGEgYWNxdWlzaW9uCi0vLyBJdCBzaG91bGQgYmUgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbnkgY29udGV4dAotc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3VubGlua19JblVSQnModXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1Yl90bXApCisvKgorICogU3RvcHMgdGhlIGRhdGEgYWNxdWlzaW9uLgorICogSXQgc2hvdWxkIGJlIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW55IGNvbnRleHQuCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl91bmxpbmtfSW5VUkJzKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMpCiB7CiAJaW50IGogPSAwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wICYmIHVzYmR1eGZhc3RzdWJfdG1wLT51cmJJbikgewotCQl1c2JkdXhmYXN0c3ViX3RtcC0+YWlfY21kX3J1bm5pbmcgPSAwOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiw4KQotCQlqID0gdXNiX3VubGlua191cmIodXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluKTsKLQkJaWYgKGogPCAwKSB7Ci0JCQllcnIgPSBqOwotCQl9Ci0jZWxzZQotCQkvLyB3YWl0cyB1bnRpbCBhIHJ1bm5pbmcgdHJhbnNmZXIgaXMgb3ZlcgotCQl1c2Jfa2lsbF91cmIodXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluKTsKKwlpZiAodWRmcyAmJiB1ZGZzLT51cmJJbikgeworCQl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CisJCS8qIHdhaXRzIHVudGlsIGEgcnVubmluZyB0cmFuc2ZlciBpcyBvdmVyICovCisJCXVzYl9raWxsX3VyYih1ZGZzLT51cmJJbik7CiAJCWogPSAwOwotI2VuZGlmCiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaTogdXNiZHV4ZmFzdDogdW5saW5rZWQgSW5VUkI6IHJlcz0lZFxuIiwgaik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdDogdW5saW5rZWQgSW5VUkI6IHJlcz0lZFxuIiwgaik7CiAjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBUaGlzIHdpbGwgc3RvcCBhIHJ1bm5pbmcgYWNxdWlzaXRpb24gb3BlcmF0aW9uICovCi0vLyBJcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhpcyBkcml2ZXIgZnJvbSBib3RoIHRoZQotLy8gaW50ZXJydXB0IGNvbnRleHQgYW5kIGZyb20gY29tZWRpCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfc3RvcCh1c2JkdXhmYXN0c3ViX3QgKiB0aGlzX3VzYmR1eGZhc3RzdWIsCisvKgorICogVGhpcyB3aWxsIHN0b3AgYSBydW5uaW5nIGFjcXVpc2l0aW9uIG9wZXJhdGlvbi4KKyAqIElzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGRyaXZlciBmcm9tIGJvdGggdGhlCisgKiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgZnJvbSBjb21lZGkuCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9zdG9wKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMsCiAJaW50IGRvX3VubGluaykKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpPzogdXNiZHV4ZmFzdF9haV9zdG9wOiB0aGlzX3VzYmR1eGZhc3RzdWI9TlVMTCFcbiIpOworCWlmICghdWRmcykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaT86IHVzYmR1eGZhc3RfYWlfc3RvcDogdWRmcz1OVUxMIVxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaTogdXNiZHV4ZmFzdF9haV9zdG9wXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpOiB1c2JkdXhmYXN0X2FpX3N0b3BcbiIpOwogI2VuZGlmCiAKLQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMDsKKwl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CiAKLQlpZiAoZG9fdW5saW5rKSB7Ci0JCS8vIHN0b3AgYXF1aXN0aW9uCi0JCXJldCA9IHVzYmR1eGZhc3RzdWJfdW5saW5rX0luVVJCcyh0aGlzX3VzYmR1eGZhc3RzdWIpOwotCX0KKwlpZiAoZG9fdW5saW5rKQorCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3VubGlua19JblVSQnModWRmcyk7IC8qIHN0b3AgYXF1aXN0aW9uICovCiAKIAlyZXR1cm4gcmV0OwogfQogCi0vLyBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24uCi0vLyBUaGlzIGlzIGNhbGxlZCBieSBjb21lZGkgYnV0IG5ldmVyIGZyb20gaW5zaWRlIHRoZQotLy8gZHJpdmVyLgotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKKy8qCisgKiBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24uCisgKiBUaGlzIGlzIGNhbGxlZCBieSBjb21lZGkgYnV0IG5ldmVyIGZyb20gaW5zaWRlIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp0aGlzX3VzYmR1eGZhc3RzdWI7Ci0JaW50IHJlcyA9IDA7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmczsKKwlpbnQgcmV0OwogCi0JLy8gZm9yY2UgdW5saW5rIG9mIGFsbCB1cmJzCisJLyogZm9yY2UgdW5saW5rIG9mIGFsbCB1cmJzICovCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpOiB1c2JkdXhmYXN0X2FpX2NhbmNlbFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdF9haV9jYW5jZWxcbiIpOwogI2VuZGlmCi0JdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpOiB1c2JkdXhmYXN0X2FpX2NhbmNlbDogdGhpc191c2JkdXhmYXN0c3ViPU5VTExcbiIpOworCXVkZnMgPSBkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpOiB1c2JkdXhmYXN0X2FpX2NhbmNlbDogdWRmcz1OVUxMXG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWRvd24oJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPnByb2JlZCkpIHsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWlmICghdWRmcy0+cHJvYmVkKSB7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JLy8gdW5saW5rCi0JcmVzID0gdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMSk7Ci0JdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkvKiB1bmxpbmsgKi8KKwlyZXQgPSB1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMSk7CisJdXAoJnVkZnMtPnNlbSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiByZXQ7CiB9CiAKLS8vIGFuYWxvZ3VlIElOCi0vLyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi1zdGF0aWMgdm9pZCB1c2JkdXhmYXN0c3ViX2FpX0lycShzdHJ1Y3QgdXJiICp1cmIpCi0jZWxzZQorLyoKKyAqIGFuYWxvZ3VlIElOCisgKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKi8KIHN0YXRpYyB2b2lkIHVzYmR1eGZhc3RzdWJfYWlfSXJxKHN0cnVjdCB1cmIgKnVyYiBQVF9SRUdTX0FSRykKLSNlbmRpZgogewogCWludCBuLCBlcnI7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp0aGlzX3VzYmR1eGZhc3RzdWI7Ci0JY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1aW50MTZfdCAqcDsKIAotCS8vIHNhbml0eSBjaGVja3MKLQkvLyBpcyB0aGUgdXJiIHRoZXJlPworCS8qIHNhbml0eSBjaGVja3MgLSBpcyB0aGUgdXJiIHRoZXJlPyAqLwogCWlmICghdXJiKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IGFvIGludC1oYW5kbGVyIGNhbGxlZCB3aXRoIHVyYj1OVUxMIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdF86IGFvIGludC1oYW5kbGVyIGNhbGxlZCAiCisJCSAgICAgICAid2l0aCB1cmI9TlVMTCFcbiIpOwogCQlyZXR1cm47CiAJfQotCS8vIHRoZSBjb250ZXh0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc3ViZGV2aWNlCisJLyogdGhlIGNvbnRleHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzdWJkZXZpY2UgKi8KIAl0aGlzX2NvbWVkaWRldiA9IHVyYi0+Y29udGV4dDsKIAlpZiAoIXRoaXNfY29tZWRpZGV2KSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IHVyYiBjb250ZXh0IGlzIGEgTlVMTCBwb2ludGVyIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdF86IHVyYiBjb250ZXh0IGlzIGEgTlVMTCAiCisJCSAgICAgICAicG9pbnRlciFcbiIpOwogCQlyZXR1cm47CiAJfQotCS8vIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBvZiB0aGUgc3ViZGV2aWNlIGlzIHVzYmR1eGZhc3RzdWJfdAotCXRoaXNfdXNiZHV4ZmFzdHN1YiA9IHRoaXNfY29tZWRpZGV2LT5wcml2YXRlOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IHByaXZhdGUgb2YgY29tZWRpIHN1YmRldiBpcyBhIE5VTEwgcG9pbnRlciFcbiIpOworCS8qIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBvZiB0aGUgc3ViZGV2aWNlIGlzIHVzYmR1eGZhc3RzdWJfcyAqLworCXVkZnMgPSB0aGlzX2NvbWVkaWRldi0+cHJpdmF0ZTsKKwlpZiAoIXVkZnMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0XzogcHJpdmF0ZSBvZiBjb21lZGkgIgorCQkgICAgICAgInN1YmRldiBpcyBhIE5VTEwgcG9pbnRlciFcbiIpOwogCQlyZXR1cm47CiAJfQotCS8vIGFyZSB3ZSBydW5uaW5nIGEgY29tbWFuZD8KLQlpZiAodW5saWtlbHkoISh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nKSkpIHsKLQkJLy8gbm90IHJ1bm5pbmcgYSBjb21tYW5kCi0JCS8vIGRvIG5vdCBjb250aW51ZSBleGVjdXRpb24gaWYgbm8gYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZwotCQkvLyBpbiBwYXJ0aWN1bGFyIG5vdCByZXN1Ym1pdAorCS8qIGFyZSB3ZSBydW5uaW5nIGEgY29tbWFuZD8gKi8KKwlpZiAodW5saWtlbHkoIXVkZnMtPmFpX2NtZF9ydW5uaW5nKSkgeworCQkvKgorCQkgKiBub3QgcnVubmluZyBhIGNvbW1hbmQKKwkJICogZG8gbm90IGNvbnRpbnVlIGV4ZWN1dGlvbiBpZiBubyBhc3luY2hyb25vdXMgY29tbWFuZAorCQkgKiBpcyBydW5uaW5nIGluIHBhcnRpY3VsYXIgbm90IHJlc3VibWl0CisJCSAqLwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVubGlrZWx5KCEodGhpc191c2JkdXhmYXN0c3ViLT5hdHRhY2hlZCkpKSB7Ci0JCS8vIG5vIGNvbWVkaSBkZXZpY2UgdGhlcmUKKwlpZiAodW5saWtlbHkoIXVkZnMtPmF0dGFjaGVkKSkgeworCQkvKiBubyBjb21lZGkgZGV2aWNlIHRoZXJlICovCiAJCXJldHVybjsKIAl9Ci0JLy8gc3ViZGV2aWNlIHdoaWNoIGlzIHRoZSBBRCBjb252ZXJ0ZXIKKwkvKiBzdWJkZXZpY2Ugd2hpY2ggaXMgdGhlIEFEIGNvbnZlcnRlciAqLwogCXMgPSB0aGlzX2NvbWVkaWRldi0+c3ViZGV2aWNlcyArIFNVQkRFVl9BRDsKIAotCS8vIGZpcnN0IHdlIHRlc3QgaWYgc29tZXRoaW5nIHVudXN1YWwgaGFzIGp1c3QgaGFwcGVuZWQKKwkvKiBmaXJzdCB3ZSB0ZXN0IGlmIHNvbWV0aGluZyB1bnVzdWFsIGhhcyBqdXN0IGhhcHBlbmVkICovCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoKIAkJYnJlYWs7CiAKLQkJLy8gaGFwcGVucyBhZnRlciBhbiB1bmxpbmsgY29tbWFuZCBvciB3aGVuIHRoZSBkZXZpY2UgaXMgcGx1Z2dlZCBvdXQKKwkJLyoKKwkJICogaGFwcGVucyBhZnRlciBhbiB1bmxpbmsgY29tbWFuZCBvciB3aGVuIHRoZSBkZXZpY2UKKwkJICogaXMgcGx1Z2dlZCBvdXQKKwkJICovCiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCWNhc2UgLUVDT05OQUJPUlRFRDoKLQkJLy8gdGVsbCB0aGlzIGNvbWVkaQorCQkvKiB0ZWxsIHRoaXMgY29tZWRpICovCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7Ci0JCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldiwgcyk7Ci0JCS8vIHN0b3AgdGhlIHRyYW5zZmVyIHcvbyB1bmxpbmsKLQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7CisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOworCQkvKiBzdG9wIHRoZSB0cmFuc2ZlciB3L28gdW5saW5rICovCisJCXVzYmR1eGZhc3RfYWlfc3RvcCh1ZGZzLCAwKTsKIAkJcmV0dXJuOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogbm9uLXplcm8gdXJiIHN0YXR1cyByZWNlaXZlZCBpbiBhaSBpbnRyIGNvbnRleHQ6ICVkXG4iLCB0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldi0+bWlub3IsIHVyYi0+c3RhdHVzKTsKKwkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogbm9uLXplcm8gdXJiIHN0YXR1cyByZWNlaXZlZCBpbiAiCisJCSAgICAgICAiYWkgaW50ciBjb250ZXh0OiAlZFxuIiwKKwkJICAgICAgIHVkZnMtPmNvbWVkaWRldi0+bWlub3IsIHVyYi0+c3RhdHVzKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKLQkJY29tZWRpX2V2ZW50KHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LCBzKTsKLQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7CisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOworCQl1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMCk7CiAJCXJldHVybjsKIAl9CiAKIAlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JaWYgKCF0aGlzX3VzYmR1eGZhc3RzdWItPmlnbm9yZSkgewotCQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NvbnRpbm91cykpIHsKLQkJCS8vIG5vdCBjb250aW5vdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzCisJaWYgKCF1ZGZzLT5pZ25vcmUpIHsKKwkJaWYgKCF1ZGZzLT5haV9jb250aW5vdXMpIHsKKwkJCS8qIG5vdCBjb250aW5vdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCiAJCQluID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC8gc2l6ZW9mKHVpbnQxNl90KTsKLQkJCWlmICh1bmxpa2VseSh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA8IG4pKSB7Ci0JCQkJLy8gd2UgaGF2ZSBzZW5kIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGUgYnl0ZXMgcmVjZWl2ZWQKKwkJCWlmICh1bmxpa2VseSh1ZGZzLT5haV9zYW1wbGVfY291bnQgPCBuKSkgeworCQkJCS8qCisJCQkJICogd2UgaGF2ZSBzZW5kIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGUgYnl0ZXMKKwkJCQkgKiByZWNlaXZlZAorCQkJCSAqLwogCQkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywKIAkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+YWlfc2FtcGxlX2NvdW50ICoKLQkJCQkJc2l6ZW9mKHVpbnQxNl90KSk7Ci0JCQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7Ci0JCQkJLy8gc2F5IGNvbWVkaSB0aGF0IHRoZSBhY3F1aXN0aW9uIGlzIG92ZXIKKwkJCQkJdWRmcy0+YWlfc2FtcGxlX2NvdW50CisJCQkJCSogc2l6ZW9mKHVpbnQxNl90KSk7CisJCQkJdXNiZHV4ZmFzdF9haV9zdG9wKHVkZnMsIDApOworCQkJCS8qIHNheSBjb21lZGkgdGhhdCB0aGUgYWNxdWlzdGlvbiBpcyBvdmVyICovCiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwotCQkJCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldiwgcyk7CisJCQkJY29tZWRpX2V2ZW50KHVkZnMtPmNvbWVkaWRldiwgcyk7CiAJCQkJcmV0dXJuOwogCQkJfQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9zYW1wbGVfY291bnQgLT0gbjsKKwkJCXVkZnMtPmFpX3NhbXBsZV9jb3VudCAtPSBuOwogCQl9Ci0JCS8vIHdyaXRlIHRoZSBmdWxsIGJ1ZmZlciB0byBjb21lZGkKLQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLAotCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCS8qIHdyaXRlIHRoZSBmdWxsIGJ1ZmZlciB0byBjb21lZGkgKi8KKwkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICB1cmItPmFjdHVhbF9sZW5ndGgpOwogCi0JCS8vIHRlbGwgY29tZWRpIHRoYXQgZGF0YSBpcyB0aGVyZQotCQljb21lZGlfZXZlbnQodGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYsIHMpOworCQkvKiB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUgKi8KKwkJY29tZWRpX2V2ZW50KHVkZnMtPmNvbWVkaWRldiwgcyk7CiAKIAl9IGVsc2UgewotCQkvLyBpZ25vcmUgdGhpcyBwYWNrZXQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5pZ25vcmUtLTsKKwkJLyogaWdub3JlIHRoaXMgcGFja2V0ICovCisJCXVkZnMtPmlnbm9yZS0tOwogCX0KIAotCS8vIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZwotCS8vIHJlc3VibWl0IHVyYiBmb3IgQlVMSyB0cmFuc2ZlcgotCXVyYi0+ZGV2ID0gdGhpc191c2JkdXhmYXN0c3ViLT51c2JkZXY7CisJLyoKKwkgKiBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcKKwkgKiByZXN1Ym1pdCB1cmIgZm9yIEJVTEsgdHJhbnNmZXIKKwkgKi8KKwl1cmItPmRldiA9IHVkZnMtPnVzYmRldjsKIAl1cmItPnN0YXR1cyA9IDA7CiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1cmIgcmVzdWJtIGZhaWxlZDogJWQiLAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYtPm1pbm9yLCBlcnIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1cmIgcmVzdWJtIGZhaWxlZDogJWQiLAorCQkJdWRmcy0+Y29tZWRpZGV2LT5taW5vciwgZXJyKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKLQkJY29tZWRpX2V2ZW50KHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LCBzKTsKLQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7CisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOworCQl1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMCk7CiAJfQogfQogCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfc3RhcnQodXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1YikKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl9zdGFydChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzKQogewotCWludCBlcnJjb2RlID0gMDsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzE2XTsKIAotCWlmICh1c2JkdXhmYXN0c3ViLT5wcm9iZWQpIHsKLQkJLy8gN2Y5MiB0byB6ZXJvCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDA7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJLy8gY3JlYXRlIGEgcGlwZSBmb3IgYSBjb250cm9sIHRyYW5zZmVyCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LCAwKSwKLQkJCS8vIGJSZXF1ZXN0LCAiRmlybXdhcmUiCi0JCQlVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFLAotCQkJLy8gYm1SZXF1ZXN0VHlwZQotCQkJVkVORE9SX0RJUl9PVVQsCi0JCQkvLyBWYWx1ZQotCQkJVVNCRFVYRkFTVFNVQl9DUFVDUywKLQkJCS8vIEluZGV4Ci0JCQkweDAwMDAsCi0JCQkvLyBhZGRyZXNzIG9mIHRoZSB0cmFuc2ZlciBidWZmZXIKLQkJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8vIExlbmd0aAotCQkJMSwKLQkJCS8vIFRpbWVvdXQKLQkJCUVaVElNRU9VVCk7Ci0JCWlmIChlcnJjb2RlIDwgMCkgewotCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0XzogY29udHJvbCBtc2cgZmFpbGVkIChzdGFydClcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KKwkvKiA3ZjkyIHRvIHplcm8gKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGZzLT51c2JkZXYsCisJCXVzYl9zbmRjdHJscGlwZSh1ZGZzLT51c2JkZXYsIDApLAorCQlVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFLAkvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLworCQlWRU5ET1JfRElSX09VVCwJCS8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJVVNCRFVYRkFTVFNVQl9DUFVDUywJLyogVmFsdWUgKi8KKwkJMHgwMDAwLAkJCS8qIEluZGV4ICovCisJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwJLyogYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgYnVmZmVyICovCisJCTEsCQkJLyogTGVuZ3RoICovCisJCUVaVElNRU9VVCk7CQkvKiBUaW1lb3V0ICovCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0XzogY29udHJvbCBtc2cgZmFpbGVkIChzdGFydClcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfc3RvcCh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViKQorc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3N0b3Aoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcykKIHsKLQlpbnQgZXJyY29kZSA9IDA7Ci0KKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzE2XTsKLQlpZiAodXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSB7Ci0JCS8vIDdmOTIgdG8gb25lCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDE7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eGZhc3RzdWItPnVzYmRldiwgMCksCi0JCQkvLyBiUmVxdWVzdCwgIkZpcm13YXJlIgotCQkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwKLQkJCS8vIGJtUmVxdWVzdFR5cGUKLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLy8gVmFsdWUKLQkJCVVTQkRVWEZBU1RTVUJfQ1BVQ1MsCi0JCQkvLyBJbmRleAotCQkJMHgwMDAwLCBsb2NhbF90cmFuc2Zlcl9idWZmZXIsCi0JCQkvLyBMZW5ndGgKLQkJCTEsCi0JCQkvLyBUaW1lb3V0Ci0JCQlFWlRJTUVPVVQpOwotCQlpZiAoZXJyY29kZSA8IDApIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogY29udHJvbCBtc2cgZmFpbGVkIChzdG9wKVxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQorCisJLyogN2Y5MiB0byBvbmUgKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAxOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGZzLT51c2JkZXYsCisJCXVzYl9zbmRjdHJscGlwZSh1ZGZzLT51c2JkZXYsIDApLAorCQlVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFLAkvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLworCQlWRU5ET1JfRElSX09VVCwJCS8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJVVNCRFVYRkFTVFNVQl9DUFVDUywJLyogVmFsdWUgKi8KKwkJMHgwMDAwLAkJCS8qIEluZGV4ICovCisJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKKwkJMSwJCQkvKiBMZW5ndGggKi8KKwkJRVpUSU1FT1VUKTsJCS8qIFRpbWVvdXQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNvbnRyb2wgbXNnIGZhaWxlZCAiCisJCSAgICAgICAiKHN0b3ApXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3VwbG9hZCh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViLAorc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3VwbG9hZChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzLAogCXVuc2lnbmVkIGNoYXIgKmxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKIAl1bnNpZ25lZCBpbnQgc3RhcnRBZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBlcnJjb2RlOworCWludCByZXQ7CiAKLQlpZiAodXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSB7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1cGxvYWRpbmcgJWQgYnl0ZXMiLAotCQkJdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwgbGVuKTsKLQkJcHJpbnRrKCIgdG8gYWRkciAlZCwgZmlyc3QgYnl0ZT0lZC5cbiIsCi0JCQlzdGFydEFkZHIsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdDogdXBsb2FkaW5nICVkIGJ5dGVzIiwgbGVuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiIHRvIGFkZHIgJWQsIGZpcnN0IGJ5dGU9JWQuXG4iLAorCQlzdGFydEFkZHIsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSk7CiAjZW5kaWYKLQkJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LCAwKSwKLQkJCS8vIGJyZXF1ZXN0LCBmaXJtd2FyZQotCQkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwKLQkJCS8vIGJtUmVxdWVzdFR5cGUKLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLy8gdmFsdWUKLQkJCXN0YXJ0QWRkciwKLQkJCS8vIGluZGV4Ci0JCQkweDAwMDAsCi0JCQkvLyBvdXIgbG9jYWwgc2FmZSBidWZmZXIKLQkJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8vIGxlbmd0aAotCQkJbGVuLAotCQkJLy8gdGltZW91dAotCQkJRVpUSU1FT1VUKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRmcy0+dXNiZGV2LAorCQl1c2Jfc25kY3RybHBpcGUodWRmcy0+dXNiZGV2LCAwKSwKKwkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwgLyogYnJlcXVlc3QsIGZpcm13YXJlICovCisJCVZFTkRPUl9ESVJfT1VULAkJLyogYm1SZXF1ZXN0VHlwZSAqLworCQlzdGFydEFkZHIsCQkvKiB2YWx1ZSAqLworCQkweDAwMDAsCQkJLyogaW5kZXggKi8KKwkJbG9jYWxfdHJhbnNmZXJfYnVmZmVyLAkvKiBvdXIgbG9jYWwgc2FmZSBidWZmZXIgKi8KKwkJbGVuLAkJCS8qIGxlbmd0aCAqLworCQlFWlRJTUVPVVQpOwkJLyogdGltZW91dCAqLworCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHJlc3VsdD0lZFxuIiwgZXJyY29kZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHJlc3VsdD0lZFxuIiwgcmV0KTsKICNlbmRpZgotCQlpZiAoZXJyY29kZSA8IDApIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogdXBwbG9hZCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KLQl9IGVsc2UgewotCQkvLyBubyBkZXZpY2Ugb24gdGhlIGJ1cyBmb3IgdGhpcyBpbmRleAotCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogdXBwbG9hZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KKwogCXJldHVybiAwOwogfQogCi1pbnQgZmlybXdhcmVVcGxvYWQodXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1YiwKLQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSwgaW50IHNpemVGaXJtd2FyZSkKK2ludCBmaXJtd2FyZVVwbG9hZChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzLCB1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSwKKwkJICAgaW50IHNpemVGaXJtd2FyZSkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFmaXJtd2FyZUJpbmFyeSkgeworCWlmICghZmlybXdhcmVCaW5hcnkpCiAJCXJldHVybiAwOwotCX0KLQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N0b3AodXNiZHV4ZmFzdHN1Yik7CisKKwlyZXQgPSB1c2JkdXhmYXN0c3ViX3N0b3AodWRmcyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBjYW4gbm90IHN0b3AgZmlybXdhcmVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNhbiBub3Qgc3RvcCBmaXJtd2FyZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQotCXJldCA9IHVzYmR1eGZhc3RzdWJfdXBsb2FkKHVzYmR1eGZhc3RzdWIsCi0JCWZpcm13YXJlQmluYXJ5LCAwLCBzaXplRmlybXdhcmUpOworCXJldCA9IHVzYmR1eGZhc3RzdWJfdXBsb2FkKHVkZnMsIGZpcm13YXJlQmluYXJ5LCAwLCBzaXplRmlybXdhcmUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQotCXJldCA9IHVzYmR1eGZhc3RzdWJfc3RhcnQodXNiZHV4ZmFzdHN1Yik7CisJcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdGFydCh1ZGZzKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNhbiBub3Qgc3RhcnQgZmlybXdhcmVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNhbiBub3Qgc3RhcnQgZmlybXdhcmVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KKwogCXJldHVybiAwOwogfQogCi1pbnQgdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWIpCitpbnQgdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMpCiB7Ci0JaW50IGVyckZsYWc7CisJaW50IHJldDsKIAotCWlmICghdXNiZHV4ZmFzdHN1YikgeworCWlmICghdWRmcykKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXVzYl9maWxsX2J1bGtfdXJiKHVzYmR1eGZhc3RzdWItPnVyYkluLAotCQl1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCXVzYl9yY3ZidWxrcGlwZSh1c2JkdXhmYXN0c3ViLT51c2JkZXYsIEJVTEtJTkVQKSwKLQkJdXNiZHV4ZmFzdHN1Yi0+dHJhbnNmZXJfYnVmZmVyLAotCQlTSVpFSU5CVUYsIHVzYmR1eGZhc3RzdWJfYWlfSXJxLCB1c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYpOworCisJdXNiX2ZpbGxfYnVsa191cmIodWRmcy0+dXJiSW4sIHVkZnMtPnVzYmRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHVkZnMtPnVzYmRldiwgQlVMS0lORVApLAorCQkJICB1ZGZzLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIFNJWkVJTkJVRiwgdXNiZHV4ZmFzdHN1Yl9haV9JcnEsIHVkZnMtPmNvbWVkaWRldik7CiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogc3VibWl0dGluZyBpbi11cmI6ICV4LCV4XG4iLAotCQl1c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYtPm1pbm9yLAotCQkoaW50KSh1c2JkdXhmYXN0c3ViLT51cmJJbi0+Y29udGV4dCksCi0JCShpbnQpKHVzYmR1eGZhc3RzdWItPnVyYkluLT5kZXYpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN1Ym1pdHRpbmcgaW4tdXJiOiAiCisJICAgICAgICIweCVwLDB4JXBcbiIsIHVkZnMtPmNvbWVkaWRldi0+bWlub3IsIHVkZnMtPnVyYkluLT5jb250ZXh0LAorCQl1ZGZzLT51cmJJbi0+ZGV2KTsKICNlbmRpZgotCWVyckZsYWcgPSB1c2Jfc3VibWl0X3VyYih1c2JkdXhmYXN0c3ViLT51cmJJbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKGVyckZsYWcpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBhaTogdXNiX3N1Ym1pdF91cmIgZXJyb3IgJWRcbiIsCi0JCQllcnJGbGFnKTsKLQkJcmV0dXJuIGVyckZsYWc7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodWRmcy0+dXJiSW4sIEdGUF9BVE9NSUMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBhaTogdXNiX3N1Ym1pdF91cmIgZXJyb3IiCisJCSAgICAgICAiICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDAsIHN0b3BfbWFzayA9IDA7Ci0JbG9uZyBpbnQgc3RlcHMsIHRtcCA9IDA7CisJbG9uZyBpbnQgc3RlcHMsIHRtcDsKIAlpbnQgbWluU2FtcGxQZXI7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp0aGlzX3VzYmR1eGZhc3RzdWIgPSBkZXYtPnByaXZhdGU7Ci0JaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcyA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghdWRmcy0+cHJvYmVkKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWR0ZXN0XG4iLCBkZXYtPm1pbm9yKTsKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBjb252ZXJ0X2FyZz0ldSBzY2FuX2JlZ2luX2FyZz0ldVxuIiwKLQkJZGV2LT5taW5vciwgY21kLT5jb252ZXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0X2FpX2NtZHRlc3RcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogY29udmVydF9hcmc9JXUgIgorCSAgICAgICAic2Nhbl9iZWdpbl9hcmc9JXVcbiIsCisJICAgICAgIGRldi0+bWlub3IsIGNtZC0+Y29udmVydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogI2VuZGlmCiAJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtNjIxLDcgKzYyNSw5IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qCisJICogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJgogCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKQEAgLTYzNiw3ICs2NDIsNyBAQAogCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQogCQllcnIrKzsKIAotCS8vIGNhbid0IGhhdmUgZXh0ZXJuYWwgc3RvcCBhbmQgc3RhcnQgdHJpZ2dlcnMgYXQgb25jZQorCS8qIGNhbid0IGhhdmUgZXh0ZXJuYWwgc3RvcCBhbmQgc3RhcnQgdHJpZ2dlcnMgYXQgb25jZSAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKQogCQllcnIrKzsKIApAQCAtNjUwLDI5ICs2NTYsMjggQEAKIAkJZXJyKys7CiAJfQogCi0JaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCWlmICghY21kLT5jaGFubGlzdF9sZW4pCiAJCWVycisrOwotCX0KKwogCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgewogCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQllcnIrKzsKIAl9CiAKLQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMSkgeworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAxKQogCQltaW5TYW1wbFBlciA9IDE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1pblNhbXBsUGVyID0gTUlOX1NBTVBMSU5HX1BFUklPRDsKLQl9CiAKIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CiAJCXN0ZXBzID0gY21kLT5jb252ZXJ0X2FyZyAqIDMwOwotCQlpZiAoc3RlcHMgPCAobWluU2FtcGxQZXIgKiAxMDAwKSkgeworCQlpZiAoc3RlcHMgPCAobWluU2FtcGxQZXIgKiAxMDAwKSkKIAkJCXN0ZXBzID0gbWluU2FtcGxQZXIgKiAxMDAwOwotCQl9Ci0JCWlmIChzdGVwcyA+IChNQVhfU0FNUExJTkdfUEVSSU9EICogMTAwMCkpIHsKKworCQlpZiAoc3RlcHMgPiAoTUFYX1NBTVBMSU5HX1BFUklPRCAqIDEwMDApKQogCQkJc3RlcHMgPSBNQVhfU0FNUExJTkdfUEVSSU9EICogMTAwMDsKLQkJfQotCQkvLyBjYWxjIGFyZyBhZ2FpbgorCisJCS8qIGNhbGMgYXJnIGFnYWluICovCiAJCXRtcCA9IHN0ZXBzIC8gMzA7CiAJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IHRtcCkgewogCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRtcDsKQEAgLTY4MCwxMCArNjg1LDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKIAkJZXJyKys7Ci0JfQotCS8vIHN0b3Agc291cmNlCisKKwkvKiBzdG9wIHNvdXJjZSAqLwogCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewogCWNhc2UgVFJJR19DT1VOVDoKIAkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CkBAIC02OTcsNyArNzAyLDEwIEBACiAJCQllcnIrKzsKIAkJfQogCQlicmVhazsKLQkJLy8gVFJJR19FWFQgZG9lc24ndCBjYXJlIHNpbmNlIGl0IGRvZXNuJ3QgdHJpZ2dlciBvZmYgYSBudW1iZXJlZCBjaGFubmVsCisJCS8qCisJCSAqIFRSSUdfRVhUIGRvZXNuJ3QgY2FyZSBzaW5jZSBpdCBkb2Vzbid0IHRyaWdnZXIKKwkJICogb2ZmIGEgbnVtYmVyZWQgY2hhbm5lbAorCQkgKi8KIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC03MTEsNjAwICs3MTksNjg4IEBACiAKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2ludHRyaWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50IHRyaWdudW0pCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgdHJpZ251bSkKIHsKIAlpbnQgcmV0OwotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcyA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghdWRmcykKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWRvd24oJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPnByb2JlZCkpIHsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKworCWRvd24oJnVkZnMtPnNlbSk7CisJaWYgKCF1ZGZzLT5wcm9iZWQpIHsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZ1xuIiwgZGV2LT5taW5vcik7CiAjZW5kaWYKIAogCWlmICh0cmlnbnVtICE9IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnOiBpbnZhbGlkIHRyaWdudW1cbiIsCi0JCQlkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnOiBpbnZhbGlkIgorCQkgICAgICAgIiB0cmlnbnVtXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nKSkgewotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMTsKLQkJcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHRoaXNfdXNiZHV4ZmFzdHN1Yik7CisJaWYgKCF1ZGZzLT5haV9jbWRfcnVubmluZykgeworCQl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDE7CisJCXJldCA9IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyh1ZGZzKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZzogdXJiU3VibWl0OiBlcnI9JWRcbiIsIGRldi0+bWlub3IsIHJldCk7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMDsKLQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0X2FpX2ludHRyaWc6ICIKKwkJCSAgICAgICAidXJiU3VibWl0OiBlcnI9JWRcbiIsIGRldi0+bWlub3IsIHJldCk7CisJCQl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CisJCQl1cCgmdWRmcy0+c2VtKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFpX2ludHRyaWcgYnV0IGFjcXUgaXMgYWxyZWFkeSBydW5uaW5nXG4iLAotCQkJZGV2LT5taW5vcik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFpX2ludHRyaWcgYnV0IGFjcXUgaXMgYWxyZWFkeSIKKwkJICAgICAgICIgcnVubmluZ1xuIiwgZGV2LT5taW5vcik7CiAJfQotCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJdXAoJnVkZnMtPnNlbSk7CiAJcmV0dXJuIDE7CiB9CiAKLS8vIG9mZnNldHMgZm9yIHRoZSBHUElGIGJ5dGVzCi0vLyB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgY29tbWFuZCBieXRlCi0jZGVmaW5lIExFTkJBU0UgMSsweDAwCi0jZGVmaW5lIE9QQkFTRSAgMSsweDA4Ci0jZGVmaW5lIE9VVEJBU0UgMSsweDEwCi0jZGVmaW5lIExPR0JBU0UgMSsweDE4CisvKgorICogb2Zmc2V0cyBmb3IgdGhlIEdQSUYgYnl0ZXMKKyAqIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBjb21tYW5kIGJ5dGUKKyAqLworI2RlZmluZSBMRU5CQVNFCSgxKzB4MDApCisjZGVmaW5lIE9QQkFTRQkoMSsweDA4KQorI2RlZmluZSBPVVRCQVNFCSgxKzB4MTApCisjZGVmaW5lIExPR0JBU0UJKDErMHgxOCkKIAotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBjaGFuLCBnYWluLCBybmdtYXNrID0gMHhmZjsKIAlpbnQgaSwgaiwgcmV0OwotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnM7CiAJaW50IHJlc3VsdDsKIAlsb25nIHN0ZXBzLCBzdGVwc190bXA7CiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWRcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWRcbiIsIGRldi0+bWlub3IpOwogI2VuZGlmCi0JaWYgKCF0aGlzX3VzYmR1eGZhc3RzdWIpIHsKKwl1ZGZzID0gZGV2LT5wcml2YXRlOworCWlmICghdWRmcykKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWRvd24oJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPnByb2JlZCkpIHsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKworCWRvd24oJnVkZnMtPnNlbSk7CisJaWYgKCF1ZGZzLT5wcm9iZWQpIHsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAodGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZykgewotCQlwcmludGsoImNvbWVkaSVkOiBhaV9jbWQgbm90IHBvc3NpYmxlLiBBbm90aGVyIGFpX2NtZCBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJaWYgKHVkZnMtPmFpX2NtZF9ydW5uaW5nKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFpX2NtZCBub3QgcG9zc2libGUuIEFub3RoZXIgYWlfY21kIgorCQkgICAgICAgIiBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFxdWlzaXRpb24gdG8gemVybworCS8qIHNldCBjdXJyZW50IGNoYW5uZWwgb2YgdGhlIHJ1bm5pbmcgYXF1aXNpdGlvbiB0byB6ZXJvICovCiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAotCS8vIGlnbm9yZSB0aGUgZmlyc3QgYnVmZmVycyBmcm9tIHRoZSBkZXZpY2UgaWYgdGhlcmUgaXMgYW4gZXJyb3IgY29uZGl0aW9uCi0JdGhpc191c2JkdXhmYXN0c3ViLT5pZ25vcmUgPSBQQUNLRVRTX1RPX0lHTk9SRTsKKwkvKgorCSAqIGlnbm9yZSB0aGUgZmlyc3QgYnVmZmVycyBmcm9tIHRoZSBkZXZpY2UgaWYgdGhlcmUKKwkgKiBpcyBhbiBlcnJvciBjb25kaXRpb24KKwkgKi8KKwl1ZGZzLT5pZ25vcmUgPSBQQUNLRVRTX1RPX0lHTk9SRTsKIAogCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDApIHsKIAkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOwogCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47ICsraSkgewogCQkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CiAJCQlpZiAoY2hhbiAhPSBpKSB7Ci0JCQkJcHJpbnRrKCJjb21lZGklZDogY21kIGlzIGFjY2VwdGluZyBvbmx5IGNvbnNlY3V0aXZlIGNoYW5uZWxzLlxuIiwgZGV2LT5taW5vcik7Ci0JCQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBjbWQgaXMgYWNjZXB0aW5nICIKKwkJCQkgICAgICAgIm9ubHkgY29uc2VjdXRpdmUgY2hhbm5lbHMuXG4iLAorCQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCQl1cCgmdWRmcy0+c2VtKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWlmICgoZ2FpbiAhPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSkKIAkJCQkmJiAoY21kLT5jaGFubGlzdF9sZW4gPiAzKSkgewotCQkJCXByaW50aygiY29tZWRpJWQ6IHRoZSBnYWluIG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCBjaGFubmVscy5cbiIsIGRldi0+bWlub3IpOwotCQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdGhlIGdhaW4gbXVzdCBiZSIKKwkJCQkgICAgICAgIiB0aGUgc2FtZSBmb3IgYWxsIGNoYW5uZWxzLlxuIiwKKwkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoaSA+PSBOVU1DSEFOTkVMUykgewotCQkJCXByaW50aygiY29tZWRpJWQ6IGNoYW5uZWwgbGlzdCB0b28gbG9uZ1xuIiwKLQkJCQkJZGV2LT5taW5vcik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogY2hhbm5lbCBsaXN0IHRvbyIKKwkJCQkgICAgICAgIiBsb25nXG4iLCBkZXYtPm1pbm9yKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KIAlzdGVwcyA9IDA7CiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzY2FuX2JlZ2luX3NyYz09VFJJR19USU1FUiBub3QgdmFsaWQuXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogIgorCQkgICAgICAgInNjYW5fYmVnaW5fc3JjPT1UUklHX1RJTUVSIG5vdCB2YWxpZC5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQogCQlzdGVwcyA9IChjbWQtPmNvbnZlcnRfYXJnICogMzApIC8gMTAwMDsKLQl9CisKIAlpZiAoKHN0ZXBzIDwgTUlOX1NBTVBMSU5HX1BFUklPRCkgJiYgKGNtZC0+Y2hhbmxpc3RfbGVuICE9IDEpKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogc3RlcHM9JWxkLCBzY2FuX2JlZ2luX2FyZz0lZC4gTm90IHByb3Blcmx5IHRlc3RlZCBieSBjbWR0ZXN0P1xuIiwgZGV2LT5taW5vciwgc3RlcHMsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwotCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBhaV9jbWQ6IHN0ZXBzPSVsZCwgIgorCQkgICAgICAgInNjYW5fYmVnaW5fYXJnPSVkLiBOb3QgcHJvcGVybHkgdGVzdGVkIGJ5IGNtZHRlc3Q/XG4iLAorCQkgICAgICAgZGV2LT5taW5vciwgc3RlcHMsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChzdGVwcyA+IE1BWF9TQU1QTElOR19QRVJJT0QpIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogYWlfY21kOiBzYW1wbGluZyByYXRlIHRvbyBsb3cuXG4iLAotCQkJZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogc2FtcGxpbmcgcmF0ZSAiCisJCSAgICAgICAidG9vIGxvdy5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICgoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpICYmIChjbWQtPmNoYW5saXN0X2xlbiAhPSAxKQogCQkmJiAoY21kLT5jaGFubGlzdF9sZW4gIT0gMTYpKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogVFJJR19FWFQgb25seSB3aXRoIDEgb3IgMTYgY2hhbm5lbHMgcG9zc2libGUuXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogYWlfY21kOiBUUklHX0VYVCBvbmx5IgorCQkgICAgICAgIiB3aXRoIDEgb3IgMTYgY2hhbm5lbHMgcG9zc2libGUuXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogc3RlcHM9JWxkLCBjb252ZXJ0X2FyZz0ldSwgYWlfdGltZXI9JXVcbiIsCi0JCWRldi0+bWlub3IsCi0JCXN0ZXBzLCBjbWQtPmNvbnZlcnRfYXJnLCB0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3RpbWVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN0ZXBzPSVsZCwgY29udmVydF9hcmc9JXVcbiIsCisJICAgICAgIGRldi0+bWlub3IsIHN0ZXBzLCBjbWQtPmNvbnZlcnRfYXJnKTsKICNlbmRpZgogCiAJc3dpdGNoIChjbWQtPmNoYW5saXN0X2xlbikgewotCQkvLyBvbmUgY2hhbm5lbAogCWNhc2UgMToKKwkJLyoKKwkJICogb25lIGNoYW5uZWwKKwkJICovCisKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7CiAKLQkJLy8gZm9yIGV4dGVybmFsIHRyaWdnZXI6IGxvb3BpbmcgaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgUkRZMCBwaW4KLQkJLy8gYmVjb21lcyB6ZXJvCi0JCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgewkvLyB3ZSBsb29wIGhlcmUgdW50aWwgcmVhZHkgaGFzIGJlZW4gc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAweDAxOwkvLyBicmFuY2ggYmFjayB0byBzdGF0ZSAwCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0KLQkJCQkweEZGICYgcm5nbWFzazsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDB4MDA7CS8vIFJEWTAgPSAwCi0JCX0gZWxzZSB7CS8vIHdlIGp1c3QgcHJvY2VlZCB0byBzdGF0ZSAxCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAxOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAwOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0KLQkJCQkweEZGICYgcm5nbWFzazsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDA7CisJCS8qCisJCSAqIGZvciBleHRlcm5hbCB0cmlnZ2VyOiBsb29waW5nIGluIHRoaXMgc3RhdGUgdW50aWwKKwkJICogdGhlIFJEWTAgcGluIGJlY29tZXMgemVybworCQkgKi8KKworCQkvKiB3ZSBsb29wIGhlcmUgdW50aWwgcmVhZHkgaGFzIGJlZW4gc2V0ICovCisJCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAweDAxOworCQkJLyogZGVjZWlzaW9uIHN0YXRlIHcvbyBkYXRhICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzBdID0gMHgwMTsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzBdID0gMHhGRiAmIHJuZ21hc2s7CisJCQkvKiBSRFkwID0gMCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAweDAwOworCQl9IGVsc2UgewkvKiB3ZSBqdXN0IHByb2NlZWQgdG8gc3RhdGUgMSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAxOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSswXSA9IDA7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9IDB4RkYgJiBybmdtYXNrOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAwOwogCQl9CiAKIAkJaWYgKHN0ZXBzIDwgTUlOX1NBTVBMSU5HX1BFUklPRCkgewotCQkJLy8gZm9yIGZhc3Qgc2luZ2xlIGNoYW5uZWwgYXF1IHdpdGhvdXQgbXV4CisJCQkvKiBmb3IgZmFzdCBzaW5nbGUgY2hhbm5lbCBhcXUgd2l0aG91dCBtdXggKi8KIAkJCWlmIChzdGVwcyA8PSAxKSB7Ci0JCQkJLy8gd2UganVzdCBzdGF5IGhlcmUgYXQgc3RhdGUgMSBhbmQgcmV4ZWN1dGUgdGhlIHNhbWUgc3RhdGUKLQkJCQkvLyB0aGlzIGdpdmVzIHVzIDMwTUh6IHNhbXBsaW5nIHJhdGUKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPSAweDg5OwkvLyBicmFuY2ggYmFjayB0byBzdGF0ZSAxCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMV0gPSAweDAzOwkvLyBkZWNlaXNpb24gc3RhdGUgd2l0aCBkYXRhCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDFdID0KLQkJCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDFdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gd2UgbG9vcCB0aHJvdWdoIHR3byBzdGF0ZXM6IGRhdGEgYW5kIGRlbGF5OiBtYXggcmF0ZSBpcyAxNU1oegotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAxXSA9Ci0JCQkJCXN0ZXBzIC0gMTsKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDB4MDI7CS8vIGRhdGEKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMV0gPQotCQkJCQkweEZGICYgcm5nbWFzazsKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMV0gPSAwOwkvLyBkb2Vzbid0IG1hdHRlcgorCQkJCS8qCisJCQkJICogd2UganVzdCBzdGF5IGhlcmUgYXQgc3RhdGUgMSBhbmQgcmV4ZWN1dGUKKwkJCQkgKiB0aGUgc2FtZSBzdGF0ZSB0aGlzIGdpdmVzIHVzIDMwTUh6IHNhbXBsaW5nCisJCQkJICogcmF0ZQorCQkJCSAqLwogCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDJdID0gMHgwOTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMHgwMTsJLy8gZGVjZWlzaW9uIHN0YXRlIHcvbyBkYXRhCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDJdID0KLQkJCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJCQkvKiBicmFuY2ggYmFjayB0byBzdGF0ZSAxICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSAweDg5OworCQkJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3aXRoIGRhdGEgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMHgwMzsKKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkYgJiBybmdtYXNrOworCQkJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMV0gPSAweEZGOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIHdlIGxvb3AgdGhyb3VnaCB0d28gc3RhdGVzOiBkYXRhIGFuZCBkZWxheQorCQkJCSAqIG1heCByYXRlIGlzIDE1TUh6CisJCQkJICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSBzdGVwcyAtIDE7CisJCQkJLyogZGF0YSAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAweDAyOworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzFdID0gMHhGRiAmIHJuZ21hc2s7CisJCQkJLyogZG9lc24ndCBtYXR0ZXIgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CisJCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gMHgwOTsKKwkJCQkvKiBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMHgwMTsKKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsyXSA9IDB4RkYgJiBybmdtYXNrOworCQkJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMl0gPSAweEZGOwogCQkJfQogCQl9IGVsc2UgewotCQkJLy8gd2UgbG9vcCB0aHJvdWdoIDMgc3RhdGVzOiAyeCBkZWxheSBhbmQgMXggZGF0YS4gVGhpcyBnaXZlcyBhIG1pbgotCQkJLy8gc2FtcGxpbmcgcmF0ZSBvZiA2MGtIei4KKwkJCS8qCisJCQkgKiB3ZSBsb29wIHRocm91Z2ggMyBzdGF0ZXM6IDJ4IGRlbGF5IGFuZCAxeCBkYXRhCisJCQkgKiB0aGlzIGdpdmVzIGEgbWluIHNhbXBsaW5nIHJhdGUgb2YgNjBrSHoKKwkJCSAqLwogCi0JCQkvLyB3ZSBoYXZlIDEgc3RhdGUgd2l0aCBkdXJhdGlvbiAxCisJCQkvKiB3ZSBoYXZlIDEgc3RhdGUgd2l0aCBkdXJhdGlvbiAxICovCiAJCQlzdGVwcyA9IHN0ZXBzIC0gMTsKIAotCQkJLy8gZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPQotCQkJCXN0ZXBzIC8gMjsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMDsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAxXSA9Ci0JCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMV0gPSAwOworCQkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSsxXSA9IHN0ZXBzIC8gMjsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAwOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMV0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMDsKIAotCQkJLy8gYW5kIHRoZSBzZWNvbmQgcGFydAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDJdID0KLQkJCQlzdGVwcyAtIHN0ZXBzIC8gMjsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMDsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAyXSA9Ci0JCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMl0gPSAwOworCQkJLyogYW5kIHRoZSBzZWNvbmQgcGFydCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMl0gPSBzdGVwcyAtIHN0ZXBzIC8gMjsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMl0gPSAwOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMDsKIAotCQkJLy8gZ2V0IHRoZSBkYXRhIGFuZCBicmFuY2ggYmFjawotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDNdID0gMHgwOTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgM10gPSAweDAzOwkvLyBkZWNlaXNpb24gc3RhdGUgdyBkYXRhCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgM10gPQotCQkJCTB4RkYgJiBybmdtYXNrOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDNdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJCS8qIGdldCB0aGUgZGF0YSBhbmQgYnJhbmNoIGJhY2sgKi8KKworCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrM10gPSAweDA5OworCQkJLyogZGVjZWlzaW9uIHN0YXRlIHcgZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSszXSA9IDB4MDM7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSszXSA9IDB4RkYgJiBybmdtYXNrOworCQkJLyogZG9lc24ndCBtYXR0ZXIgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzNdID0gMHhGRjsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMjoKLQkJLy8gdHdvIGNoYW5uZWxzCi0JCS8vIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPCisJCS8qCisJCSAqIHR3byBjaGFubmVscworCQkgKiBjb21taXQgZGF0YSB0byB0aGUgRklGTworCQkgKi8KKwogCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgPiAwKQogCQkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCQllbHNlCiAJCQlybmdtYXNrID0gMHhmZjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMTsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAweDAyOwkvLyBkYXRhCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAwXSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOwogCi0JCS8vIHdlIGhhdmUgMSBzdGF0ZSB3aXRoIGR1cmF0aW9uIDE6IHN0YXRlIDAKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAxOworCQkvKiBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMF0gPSAweDAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSswXSA9IDA7CisKKwkJLyogd2UgaGF2ZSAxIHN0YXRlIHdpdGggZHVyYXRpb24gMTogc3RhdGUgMCAqLwogCQlzdGVwc190bXAgPSBzdGVwcyAtIDE7CiAKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMV0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCS8vIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPSBzdGVwc190bXAgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAxXSA9IDB4RkUgJiBybmdtYXNrOwkvL2NvdW50Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAxXSA9IDA7CiAKLQkJLy8gYW5kIHRoZSBzZWNvbmQgcGFydAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMl0gPQotCQkJc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMl0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMl0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMDsKKwkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzFdID0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsxXSA9IDA7CisJCS8qIGNvdW50ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzFdID0gMHhGRSAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMDsKIAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgM10gPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAzXSA9IDB4MDI7CS8vIGRhdGEKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDNdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAzXSA9IDA7CisJCS8qIGFuZCB0aGUgc2Vjb25kIHBhcnQgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMl0gPSBzdGVwc190bXAgLSBzdGVwc190bXAgLyAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMl0gPSAwOwogCi0JCS8vIHdlIGhhdmUgMiBzdGF0ZXMgd2l0aCBkdXJhdGlvbiAxOiBzdGVwIDYgYW5kIHRoZSBJRExFIHN0YXRlCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gMTsKKwkJLyogZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzNdID0gMHgwMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrM10gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrM10gPSAwOworCisJCS8qCisJCSAqIHdlIGhhdmUgMiBzdGF0ZXMgd2l0aCBkdXJhdGlvbiAxOiBzdGVwIDYgYW5kCisJCSAqIHRoZSBJRExFIHN0YXRlCisJCSAqLwogCQlzdGVwc190bXAgPSBzdGVwcyAtIDI7CiAKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCS8vIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNF0gPSBzdGVwc190bXAgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA0XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOwkvL3Jlc2V0Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA0XSA9IDA7CiAKLQkJLy8gYW5kIHRoZSBzZWNvbmQgcGFydAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNV0gPQotCQkJc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNV0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNV0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDVdID0gMDsKKwkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzRdID0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs0XSA9IDA7CisJCS8qIHJlc2V0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzRdID0gKDB4RkYgLSAweDAyKSAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMDsKIAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNl0gPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA2XSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA2XSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNl0gPSAwOworCQkvKiBhbmQgdGhlIHNlY29uZCBwYXJ0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzVdID0gc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs1XSA9IDA7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzVdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzVdID0gMDsKKworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs2XSA9IDE7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNl0gPSAwOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs2XSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs2XSA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSAzOgotCQkvLyB0aHJlZSBjaGFubmVscworCQkvKgorCQkgKiB0aHJlZSBjaGFubmVscworCQkgKi8KIAkJZm9yIChqID0gMDsgaiA8IDE7IGorKykgewogCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbal0pID4gMCkKIAkJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCQllbHNlCiAJCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTyBhbmQgZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgaiAqIDJdID0KLQkJCQlzdGVwcyAvIDI7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyBqICogMl0gPSAweDAyOwkvLyBkYXRhCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgaiAqIDJdID0gMHhGRiAmIHJuZ21hc2s7CS8vIG5vIGNoYW5nZQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIGogKiAyXSA9IDA7CisJCQkvKgorCQkJICogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gYW5kIGRvIHRoZSBmaXJzdCBwYXJ0CisJCQkgKiBvZiB0aGUgZGVsYXkKKwkJCSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UraioyXSA9IHN0ZXBzIC8gMjsKKwkJCS8qIGRhdGEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UraioyXSA9IDB4MDI7CisJCQkvKiBubyBjaGFuZ2UgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFK2oqMl0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFK2oqMl0gPSAwOwogCiAJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtqICsgMV0pID4gMCkKIAkJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCQllbHNlCiAJCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCQkvLyBkbyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGRlbGF5Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgaiAqIDIgKyAxXSA9Ci0JCQkJc3RlcHMgLSBzdGVwcyAvIDI7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyBqICogMiArIDFdID0gMDsJLy8gbm8gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIGogKiAyICsgMV0gPSAweEZFICYgcm5nbWFzazsJLy9jb3VudAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIGogKiAyICsgMV0gPQotCQkJCTA7CisKKwkJCS8qIGRvIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZGVsYXkgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFK2oqMisxXSA9IHN0ZXBzIC0gc3RlcHMgLyAyOworCQkJLyogbm8gZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRStqKjIrMV0gPSAwOworCQkJLyogY291bnQgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFK2oqMisxXSA9IDB4RkUgJiBybmdtYXNrOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UraioyKzFdID0gMDsKIAkJfQogCi0JCS8vIDIgc3RlcHMgd2l0aCBkdXJhdGlvbiAxOiB0aGUgaWRlbGUgc3RlcCBhbmQgc3RlcCA2OgorCQkvKiAyIHN0ZXBzIHdpdGggZHVyYXRpb24gMTogdGhlIGlkZWxlIHN0ZXAgYW5kIHN0ZXAgNjogKi8KIAkJc3RlcHNfdG1wID0gc3RlcHMgLSAyOwotCQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTyBhbmQgZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA0XSA9IHN0ZXBzX3RtcCAvIDI7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDRdID0gMHgwMjsJLy8gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNF0gPSAweEZGICYgcm5nbWFzazsJLy8gbm8gY2hhbmdlCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA0XSA9IDA7CisKKwkJLyogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gYW5kIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs0XSA9IHN0ZXBzX3RtcCAvIDI7CisJCS8qIGRhdGEgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs0XSA9IDB4MDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzRdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMDsKIAogCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgPiAwKQogCQkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCQllbHNlCiAJCQlybmdtYXNrID0gMHhmZjsKLQkJLy8gZG8gdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNV0gPQotCQkJc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNV0gPSAwOwkvLyBubyBkYXRhCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA1XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOwkvLyByZXNldAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNV0gPSAwOwogCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA2XSA9IDE7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDZdID0gMDsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDZdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA2XSA9IDA7CisJCS8qIGRvIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZGVsYXkgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNV0gPSBzdGVwc190bXAgLSBzdGVwc190bXAgLyAyOworCQkvKiBubyBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNV0gPSAwOworCQkvKiByZXNldCAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs1XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs1XSA9IDA7CisKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNl0gPSAxOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzZdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNl0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrNl0gPSAwOwogCiAJY2FzZSAxNjoKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgewkvLyB3ZSBsb29wIGhlcmUgdW50aWwgcmVhZHkgaGFzIGJlZW4gc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAweDAxOwkvLyBicmFuY2ggYmFjayB0byBzdGF0ZSAwCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0gKDB4RkYgLSAweDAyKSAmIHJuZ21hc2s7CS8vIHJlc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAweDAwOwkvLyBSRFkwID0gMAotCQl9IGVsc2UgewkvLyB3ZSBqdXN0IHByb2NlZWQgdG8gc3RhdGUgMQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMjU1OwkvLyAzMHVzIHJlc2V0IHB1bHNlCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDA7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMF0gPSAoMHhGRiAtIDB4MDIpICYgcm5nbWFzazsJLy8gcmVzZXQKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDA7CisKKwkJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCQkvKgorCQkJICogd2UgbG9vcCBoZXJlIHVudGlsIHJlYWR5IGhhcyBiZWVuIHNldAorCQkJICovCisKKwkJCS8qIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDAgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzBdID0gMHgwMTsKKwkJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSswXSA9IDB4MDE7CisJCQkvKiByZXNldCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMF0gPSAoMHhGRi0weDAyKSAmIHJuZ21hc2s7CisJCQkvKiBSRFkwID0gMCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAweDAwOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHdlIGp1c3QgcHJvY2VlZCB0byBzdGF0ZSAxCisJCQkgKi8KKworCQkJLyogMzB1cyByZXNldCBwdWxzZSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAyNTU7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzBdID0gMDsKKwkJCS8qIHJlc2V0ICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9ICgweEZGLTB4MDIpICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMDsKIAkJfQogCi0JCS8vIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAxXSA9IDE7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMHgwMjsJLy8gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMV0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDFdID0gMDsKKwkJLyogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSAxOworCQkvKiBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAweDAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CiAKLQkJLy8gd2UgaGF2ZSAyIHN0YXRlcyB3aXRoIGR1cmF0aW9uIDEKKwkJLyogd2UgaGF2ZSAyIHN0YXRlcyB3aXRoIGR1cmF0aW9uIDEgKi8KIAkJc3RlcHMgPSBzdGVwcyAtIDI7CiAKLQkJLy8gZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAyXSA9IHN0ZXBzIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMl0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMl0gPSAweEZFICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMDsKKwkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gc3RlcHMgLyAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZFICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMl0gPSAwOwogCi0JCS8vIGFuZCB0aGUgc2Vjb25kIHBhcnQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDNdID0KLQkJCXN0ZXBzIC0gc3RlcHMgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAzXSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAzXSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgM10gPSAwOworCQkvKiBhbmQgdGhlIHNlY29uZCBwYXJ0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gc3RlcHMgLSBzdGVwcyAvIDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrM10gPSAwOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSszXSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSszXSA9IDA7CiAKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDRdID0gMHgwOTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNF0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDRdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs0XSA9IDB4MDk7CisJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzRdID0gMHgwMTsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNF0gPSAweEZGICYgcm5nbWFzazsKKwkJLyogZG9lc24ndCBtYXR0ZXIgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrNF0gPSAweEZGOwogCiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJjb21lZGkgJWQ6IHVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGNoYW5uZWxzXG4iLAotCQkJZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpICVkOiB1bnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiAiCisJCSAgICAgICAiY2hhbm5lbHNcbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpICVkOiBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSB1c2IgZGV2aWNlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpICVkOiBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSB1c2IgZGV2aWNlXG4iLAorCSAgICAgICBkZXYtPm1pbm9yKTsKICNlbmRpZgotCS8vIDAgbWVhbnMgdGhhdCB0aGUgQUQgY29tbWFuZHMgYXJlIHNlbnQKLQlyZXN1bHQgPSBzZW5kX2R1eF9jb21tYW5kcyh0aGlzX3VzYmR1eGZhc3RzdWIsIFNFTkRBRENPTU1BTkRTKTsKKwkvKiAwIG1lYW5zIHRoYXQgdGhlIEFEIGNvbW1hbmRzIGFyZSBzZW50ICovCisJcmVzdWx0ID0gc2VuZF9kdXhfY29tbWFuZHModWRmcywgU0VOREFEQ09NTUFORFMpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFkYyBjb21tYW5kIGNvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuIEFib3J0aW5nLi4uXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogYWRjIGNvbW1hbmQgY291bGQgbm90IGJlIHN1Ym1pdHRlZC4iCisJCSAgICAgICAiQWJvcnRpbmcuLi5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA9Ci0JCQkoY21kLT5zdG9wX2FyZykgKiAoY21kLT5zY2FuX2VuZF9hcmcpOwotCQlpZiAodXNiZHV4ZmFzdHN1Yi0+YWlfc2FtcGxlX2NvdW50IDwgMSkgewotCQkJcHJpbnRrKCJjb21lZGklZDogKGNtZC0+c3RvcF9hcmcpKihjbWQtPnNjYW5fZW5kX2FyZyk8MSwgYWJvcnRpbmcuXG4iLCBkZXYtPm1pbm9yKTsKLQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXVkZnMtPmFpX3NhbXBsZV9jb3VudCA9CWNtZC0+c3RvcF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJaWYgKHVkZnMtPmFpX3NhbXBsZV9jb3VudCA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6ICIKKwkJCSAgICAgICAiKGNtZC0+c3RvcF9hcmcpKihjbWQtPnNjYW5fZW5kX2FyZyk8MSwgIgorCQkJICAgICAgICJhYm9ydGluZy5cbiIsIGRldi0+bWlub3IpOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NvbnRpbm91cyA9IDA7CisJCXVkZnMtPmFpX2NvbnRpbm91cyA9IDA7CiAJfSBlbHNlIHsKLQkJLy8gY29udGlub3VzIGFxdWlzaXRpb24KLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jb250aW5vdXMgPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA9IDA7CisJCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJCXVkZnMtPmFpX2NvbnRpbm91cyA9IDE7CisJCXVkZnMtPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJfQogCiAJaWYgKChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgfHwgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSkgewotCQkvLyBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24KLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZyA9IDE7Ci0JCXJldCA9IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyh0aGlzX3VzYmR1eGZhc3RzdWIpOworCQkvKiBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KKwkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAxOworCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N1Ym1pdF9JblVSQnModWRmcyk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMDsKLQkJCS8vIGZpeG1lOiB1bmxpbmsgaGVyZT8/Ci0JCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAwOworCQkJLyogZml4bWU6IHVubGluayBoZXJlPz8gKi8KKwkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJLyogVFJJR19JTlQgKi8KLQkJLy8gZG9uJ3QgZW5hYmxlIHRoZSBhY3F1aXNpb24gb3BlcmF0aW9uCi0JCS8vIHdhaXQgZm9yIGFuIGludGVybmFsIHNpZ25hbAorCQkvKgorCQkgKiBUUklHX0lOVAorCQkgKiBkb24ndCBlbmFibGUgdGhlIGFjcXVpc2lvbiBvcGVyYXRpb24KKwkJICogd2FpdCBmb3IgYW4gaW50ZXJuYWwgc2lnbmFsCisJCSAqLwogCQlzLT5hc3luYy0+aW50dHJpZyA9IHVzYmR1eGZhc3RfYWlfaW50dHJpZzsKIAl9Ci0JdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwl1cCgmdWRmcy0+c2VtKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBNb2RlIDAgaXMgdXNlZCB0byBnZXQgYSBzaW5nbGUgY29udmVyc2lvbiBvbiBkZW1hbmQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCisvKgorICogTW9kZSAwIGlzIHVzZWQgdG8gZ2V0IGEgc2luZ2xlIGNvbnZlcnNpb24gb24gZGVtYW5kLgorICovCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpLCBqLCBuLCBhY3R1YWxfbGVuZ3RoOwogCWludCBjaGFuLCByYW5nZSwgcm5nbWFzazsKIAlpbnQgZXJyOwotCXVzYmR1eGZhc3RzdWJfdCAqdXNiZHV4ZmFzdHN1YiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzOwogCi0JaWYgKCF1c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFpX2luc25fcmVhZDogbm8gdXNiIGRldi5cbiIsIGRldi0+bWlub3IpOworCXVkZnMgPSBkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFpX2luc25fcmVhZDogbm8gdXNiIGRldi5cbiIsCisJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQsIGluc24tPm49JWQsIGluc24tPnN1YmRldj0lZFxuIiwKLQkJZGV2LT5taW5vciwgaW5zbi0+biwgaW5zbi0+c3ViZGV2KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IGFpX2luc25fcmVhZCwgaW5zbi0+bj0lZCwgIgorCSAgICAgICAiaW5zbi0+c3ViZGV2PSVkXG4iLCBkZXYtPm1pbm9yLCBpbnNuLT5uLCBpbnNuLT5zdWJkZXYpOwogI2VuZGlmCi0JZG93bigmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh1c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7Ci0JCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCWRvd24oJnVkZnMtPnNlbSk7CisJaWYgKCF1ZGZzLT5wcm9iZWQpIHsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAodXNiZHV4ZmFzdHN1Yi0+YWlfY21kX3J1bm5pbmcpIHsKLQkJcHJpbnRrKCJjb21lZGklZDogYWlfaW5zbl9yZWFkIG5vdCBwb3NzaWJsZS4gQXN5bmMgQ29tbWFuZCBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCWlmICh1ZGZzLT5haV9jbWRfcnVubmluZykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQgbm90IHBvc3NpYmxlLiBBc3luYyAiCisJCSAgICAgICAiQ29tbWFuZCBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzYW1wbGUgb25lIGNoYW5uZWwKKwkvKiBzYW1wbGUgb25lIGNoYW5uZWwgKi8KIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7Ci0JLy8gc2V0IGNvbW1hbmQgZm9yIHRoZSBmaXJzdCBjaGFubmVsCisJLyogc2V0IGNvbW1hbmQgZm9yIHRoZSBmaXJzdCBjaGFubmVsICovCiAKIAlpZiAocmFuZ2UgPiAwKQogCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJZWxzZQogCQlybmdtYXNrID0gMHhmZjsKLQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDB4MDI7CS8vIGRhdGEKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0gMHhGRiAmIHJuZ21hc2s7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDA7CiAKLQkvLyBkbyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGVsYXkKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDFdID0gMTI7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMDsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDFdID0gMHhGRSAmIHJuZ21hc2s7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAxXSA9IDA7CisJLyogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gKi8KKwl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSswXSA9IDE7CisJLyogZGF0YSAqLworCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMF0gPSAweDAyOworCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzBdID0gMHhGRiAmIHJuZ21hc2s7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAwOwogCi0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAyXSA9IDE7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMDsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDJdID0gMHhGRSAmIHJuZ21hc2s7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAyXSA9IDA7CisJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSAxMjsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgM10gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAzXSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAzXSA9IDB4RkUgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgM10gPSAwOworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsyXSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNF0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA0XSA9IDB4RkUgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNF0gPSAwOworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzNdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSszXSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzNdID0gMDsKIAotCS8vIHNlY29uZCBwYXJ0Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA1XSA9IDEyOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA1XSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA1XSA9IDB4RkYgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNV0gPSAwOworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzRdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzRdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs0XSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNl0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA2XSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA2XSA9IDB4RkYgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOworCS8qIHNlY29uZCBwYXJ0ICovCisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNV0gPSAxMjsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzVdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs1XSA9IDB4RkYgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzVdID0gMDsKKworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzZdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzZdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs2XSA9IDB4RkYgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMDsKIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSAlZDogc2VuZGluZyBjb21tYW5kcyB0byB0aGUgdXNiIGRldmljZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSAlZDogc2VuZGluZyBjb21tYW5kcyB0byB0aGUgdXNiIGRldmljZVxuIiwKKwkgICAgICAgZGV2LT5taW5vcik7CiAjZW5kaWYKLQkvLyAwIG1lYW5zIHRoYXQgdGhlIEFEIGNvbW1hbmRzIGFyZSBzZW50Ci0JZXJyID0gc2VuZF9kdXhfY29tbWFuZHModXNiZHV4ZmFzdHN1YiwgU0VOREFEQ09NTUFORFMpOworCS8qIDAgbWVhbnMgdGhhdCB0aGUgQUQgY29tbWFuZHMgYXJlIHNlbnQgKi8KKwllcnIgPSBzZW5kX2R1eF9jb21tYW5kcyh1ZGZzLCBTRU5EQURDT01NQU5EUyk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogYWRjIGNvbW1hbmQgY291bGQgbm90IGJlIHN1Ym1pdHRlZC4gQWJvcnRpbmcuLi5cbiIsIGRldi0+bWlub3IpOwotCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogYWRjIGNvbW1hbmQgY291bGQgbm90IGJlIHN1Ym1pdHRlZC4iCisJCSAgICAgICAiQWJvcnRpbmcuLi5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN1Ym1pdHRpbmcgaW4tdXJiOiAleCwleFxuIiwKLQkJdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwKLQkJKGludCkodXNiZHV4ZmFzdHN1Yi0+dXJiSW4tPmNvbnRleHQpLAotCQkoaW50KSh1c2JkdXhmYXN0c3ViLT51cmJJbi0+ZGV2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzdWJtaXR0aW5nIGluLXVyYjogIgorCSAgICAgICAiMHglcCwweCVwXG4iLCB1ZGZzLT5jb21lZGlkZXYtPm1pbm9yLCB1ZGZzLT51cmJJbi0+Y29udGV4dCwKKwkgICAgICAgdWRmcy0+dXJiSW4tPmRldik7CiAjZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgUEFDS0VUU19UT19JR05PUkU7IGkrKykgewotCQllcnIgPSB1c2JfYnVsa19tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSh1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCQkJCQkgICBCVUxLSU5FUCksCi0JCQkJICAgdXNiZHV4ZmFzdHN1Yi0+dHJhbnNmZXJfYnVmZmVyLCBTSVpFSU5CVUYsCisJCWVyciA9IHVzYl9idWxrX21zZyh1ZGZzLT51c2JkZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHVkZnMtPnVzYmRldiwgQlVMS0lORVApLAorCQkJCSAgIHVkZnMtPnRyYW5zZmVyX2J1ZmZlciwgU0laRUlOQlVGLAogCQkJCSAgICZhY3R1YWxfbGVuZ3RoLCAxMDAwMCk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlwcmludGsoImNvbWVkaSVkOiBpbnNuIHRpbWVvdXQuIE5vIGRhdGEuXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogaW5zbiB0aW1lb3V0LiBObyBkYXRhLlxuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCS8vIGRhdGEgcG9pbnRzCisJLyogZGF0YSBwb2ludHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjspIHsKLQkJZXJyID0gdXNiX2J1bGtfbXNnKHVzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCQkgICB1c2JfcmN2YnVsa3BpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCQkJICAgQlVMS0lORVApLAotCQkJCSAgIHVzYmR1eGZhc3RzdWItPnRyYW5zZmVyX2J1ZmZlciwgU0laRUlOQlVGLAorCQllcnIgPSB1c2JfYnVsa19tc2codWRmcy0+dXNiZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSh1ZGZzLT51c2JkZXYsIEJVTEtJTkVQKSwKKwkJCQkgICB1ZGZzLT50cmFuc2Zlcl9idWZmZXIsIFNJWkVJTkJVRiwKIAkJCQkgICAmYWN0dWFsX2xlbmd0aCwgMTAwMDApOwogCQlpZiAoZXJyIDwgMCkgewotCQkJcHJpbnRrKCJjb21lZGklZDogaW5zbiBkYXRhIGVycm9yOiAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGluc24gZGF0YSBlcnJvcjogJWRcbiIsCiAJCQkJZGV2LT5taW5vciwgZXJyKTsKLQkJCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCW4gPSBhY3R1YWxfbGVuZ3RoIC8gc2l6ZW9mKHVpbnQxNl90KTsKIAkJaWYgKChuICUgMTYpICE9IDApIHsKLQkJCXByaW50aygiY29tZWRpJWQ6IGluc24gZGF0YSBwYWNrZXQgY29ycnVwdGVkLlxuIiwKLQkJCQlkZXYtPm1pbm9yKTsKLQkJCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogaW5zbiBkYXRhIHBhY2tldCAiCisJCQkgICAgICAgImNvcnJ1cHRlZC5cbiIsIGRldi0+bWlub3IpOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmb3IgKGogPSBjaGFuOyAoaiA8IG4pICYmIChpIDwgaW5zbi0+bik7IGogPSBqICsgMTYpIHsKLQkJCWRhdGFbaV0gPQotCQkJCSgodWludDE2X3QgKikgKHVzYmR1eGZhc3RzdWItPgotCQkJCQl0cmFuc2Zlcl9idWZmZXIpKVtqXTsKKwkJCWRhdGFbaV0gPSAoKHVpbnQxNl90ICopICh1ZGZzLT50cmFuc2Zlcl9idWZmZXIpKVtqXTsKIAkJCWkrKzsKIAkJfQogCX0KLQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwl1cCgmdWRmcy0+c2VtKTsKIAlyZXR1cm4gaTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGhleDJ1bnNpZ25lZChjaGFyICpoKQogewogCXVuc2lnbmVkIGhpLCBsbzsKLQlpZiAoaFswXSA+ICc5JykgeworCisJaWYgKGhbMF0gPiAnOScpCiAJCWhpID0gaFswXSAtICdBJyArIDB4MGE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWhpID0gaFswXSAtICcwJzsKLQl9Ci0JaWYgKGhbMV0gPiAnOScpIHsKKworCWlmIChoWzFdID4gJzknKQogCQlsbyA9IGhbMV0gLSAnQScgKyAweDBhOwotCX0gZWxzZSB7CisJZWxzZQogCQlsbyA9IGhbMV0gLSAnMCc7Ci0JfQorCiAJcmV0dXJuIGhpICogMHgxMCArIGxvOwogfQogCi0vLyBmb3IgRlgyCisvKiBmb3IgRlgyICovCiAjZGVmaW5lIEZJUk1XQVJFX01BWF9MRU4gMHgyMDAwCiAKLS8vIHRha2VuIGZyb20gRGF2aWQgQnJvd25lbGwncyBmeGxvYWQgYW5kIGFkanVzdGVkIGZvciB0aGlzIGRyaXZlcgotc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWIsIHZvaWQgKmZpcm13YXJlUHRyLAotCWxvbmcgc2l6ZSkKKy8qCisgKiB0YWtlbiBmcm9tIERhdmlkIEJyb3duZWxsJ3MgZnhsb2FkIGFuZCBhZGp1c3RlZCBmb3IgdGhpcyBkcml2ZXIKKyAqLworc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMsIGNvbnN0IHZvaWQgKmZpcm13YXJlUHRyLAorCQkJIGxvbmcgc2l6ZSkKIHsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgY2hhciAqZnAgPSAoY2hhciAqKWZpcm13YXJlUHRyOwotCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlQmluYXJ5ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeTsKIAlpbnQgcmVzID0gMDsKIAlpbnQgbWF4QWRkciA9IDA7CiAKIAlmaXJtd2FyZUJpbmFyeSA9IGttYWxsb2MoRklSTVdBUkVfTUFYX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZUJpbmFyeSkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IG1lbSBhbGxvYyBmb3IgZmlybXdhcmUgZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBtZW0gYWxsb2MgZm9yIGZpcm13YXJlICIKKwkJICAgICAgICIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMzE1LDMxICsxNDExLDM3IEBACiAJCWludCBpZHgsIG9mZjsKIAkJaW50IGogPSAwOwogCi0JCS8vIGdldCBvbmUgbGluZQorCQkvKiBnZXQgb25lIGxpbmUgKi8KIAkJd2hpbGUgKChpIDwgc2l6ZSkgJiYgKGZwW2ldICE9IDEzKSAmJiAoZnBbaV0gIT0gMTApKSB7CiAJCQlidWZbal0gPSBmcFtpXTsKIAkJCWkrKzsKIAkJCWorKzsKIAkJCWlmIChqID49IHNpemVvZihidWYpKSB7Ci0JCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBib2d1cyBmaXJtd2FyZSBmaWxlIVxuIik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBib2d1cyAiCisJCQkJICAgICAgICJmaXJtd2FyZSBmaWxlIVxuIik7CisJCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfQotCQkvLyBnZXQgcmlkIG9mIExGL0NSLy4uLgorCQkvKiBnZXQgcmlkIG9mIExGL0NSLy4uLiAqLwogCQl3aGlsZSAoKGkgPCBzaXplKSAmJiAoKGZwW2ldID09IDEzKSB8fCAoZnBbaV0gPT0gMTApCi0JCQkJfHwgKGZwW2ldID09IDApKSkgeworCQkJCQl8fCAoZnBbaV0gPT0gMCkpKQogCQkJaSsrOwotCQl9CiAKIAkJYnVmW2pdID0gMDsKLQkJLy9wcmludGsoImNvbWVkaV86IGJ1Zj0lc1xuIixidWYpOworCQkvKiBwcmludGsoImNvbWVkaV86IGJ1Zj0lc1xuIixidWYpOyAqLwogCi0JCS8qIEVYVEVOU0lPTjogIiMgY29tbWVudC10aWxsLWVuZC1vZi1saW5lIiwgZm9yIGNvcHlyaWdodHMgZXRjICovCisJCS8qCisJCSAqIEVYVEVOU0lPTjogIiMgY29tbWVudC10aWxsLWVuZC1vZi1saW5lIiwKKwkJICogZm9yIGNvcHlyaWdodHMgZXRjCisJCSAqLwogCQlpZiAoYnVmWzBdID09ICcjJykKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChidWZbMF0gIT0gJzonKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVwbG9hZDogbm90IGFuIGloZXggcmVjb3JkOiAlcyIsIGJ1Zik7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVwbG9hZDogbm90IGFuICIKKwkJCSAgICAgICAiaWhleCByZWNvcmQ6ICVzIiwgYnVmKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKQEAgLTEzNDksMjY2ICsxNDUxLDMwOSBAQAogCQkvKiBSZWFkIHRoZSB0YXJnZXQgb2Zmc2V0ICovCiAJCW9mZiA9IChoZXgydW5zaWduZWQoYnVmICsgMykgKiAweDAxMDApICsgaGV4MnVuc2lnbmVkKGJ1ZiArIDUpOwogCi0JCWlmICgob2ZmICsgbGVuKSA+IG1heEFkZHIpIHsKKwkJaWYgKChvZmYgKyBsZW4pID4gbWF4QWRkcikKIAkJCW1heEFkZHIgPSBvZmYgKyBsZW47Ci0JCX0KIAogCQlpZiAobWF4QWRkciA+PSBGSVJNV0FSRV9NQVhfTEVOKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGZpcm13YXJlIHVwbG9hZCBnb2VzIGJleW9uZCBGWDIgUkFNIGJvdW5kYXJpZXMuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGZpcm13YXJlIHVwbG9hZCAiCisJCQkgICAgICAgImdvZXMgYmV5b25kIEZYMiBSQU0gYm91bmRhcmllcy4iKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCS8vcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBvZmY9JXgsIGxlbj0leDoiLG9mZixsZW4pOworCQkvKiBwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IG9mZj0leCwgbGVuPSV4OiIsb2ZmLGxlbik7ICovCiAKIAkJLyogUmVhZCB0aGUgcmVjb3JkIHR5cGUgKi8KIAkJdHlwZSA9IGhleDJ1bnNpZ25lZChidWYgKyA3KTsKIAogCQkvKiBJZiB0aGlzIGlzIGFuIEVPRiByZWNvcmQsIHRoZW4gbWFrZSBpdCBzby4gKi8KLQkJaWYgKHR5cGUgPT0gMSkgeworCQlpZiAodHlwZSA9PSAxKQogCQkJYnJlYWs7Ci0JCX0KIAogCQlpZiAodHlwZSAhPSAwKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVuc3VwcG9ydGVkIHJlY29yZCB0eXBlOiAldVxuIiwgdHlwZSk7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVuc3VwcG9ydGVkICIKKwkJCSAgICAgICAicmVjb3JkIHR5cGU6ICV1XG4iLCB0eXBlKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKIAkJZm9yIChpZHggPSAwLCBjcCA9IGJ1ZiArIDk7IGlkeCA8IGxlbjsgaWR4ICs9IDEsIGNwICs9IDIpIHsKIAkJCWZpcm13YXJlQmluYXJ5W2lkeCArIG9mZl0gPSBoZXgydW5zaWduZWQoY3ApOwotCQkJLy9wcmludGsoIiUwMnggIixmaXJtd2FyZUJpbmFyeVtpZHgrb2ZmXSk7CisJCQkvKiBwcmludGsoIiUwMnggIixmaXJtd2FyZUJpbmFyeVtpZHgrb2ZmXSk7ICovCiAJCX0KLQkJLy9wcmludGsoIlxuIik7CisKKwkJLyogcHJpbnRrKCJcbiIpOyAqLwogCiAJCWlmIChpID49IHNpemUpIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogdW5leHBlY3RlZCBlbmQgb2YgaGV4IGZpbGVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiB1bmV4cGVjdGVkIGVuZCAiCisJCQkgICAgICAgIm9mIGhleCBmaWxlXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKIAl9Ci0JcmVzID0gZmlybXdhcmVVcGxvYWQodXNiZHV4ZmFzdHN1YiwgZmlybXdhcmVCaW5hcnksIG1heEFkZHIgKyAxKTsKKwlyZXMgPSBmaXJtd2FyZVVwbG9hZCh1ZGZzLCBmaXJtd2FyZUJpbmFyeSwgbWF4QWRkciArIDEpOwogCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCB0aWR5X3VwKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWJfdG1wKQorc3RhdGljIHZvaWQgdGlkeV91cChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzKQogewogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHRpZGluZyB1cFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHRpZGluZyB1cFxuIik7CiAjZW5kaWYKLQlpZiAoIXVzYmR1eGZhc3RzdWJfdG1wKSB7CisKKwlpZiAoIXVkZnMpCiAJCXJldHVybjsKLQl9Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotCS8vIHNob3dzIHRoZSB1c2Igc3Vic3lzdGVtIHRoYXQgdGhlIGRyaXZlciBpcyBkb3duCi0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT5pbnRlcmZhY2UpIHsKLQkJdXNiX3NldF9pbnRmZGF0YSh1c2JkdXhmYXN0c3ViX3RtcC0+aW50ZXJmYWNlLCBOVUxMKTsKLQl9Ci0jZW5kaWYKIAotCXVzYmR1eGZhc3RzdWJfdG1wLT5wcm9iZWQgPSAwOworCS8qIHNob3dzIHRoZSB1c2Igc3Vic3lzdGVtIHRoYXQgdGhlIGRyaXZlciBpcyBkb3duICovCisJaWYgKHVkZnMtPmludGVyZmFjZSkKKwkJdXNiX3NldF9pbnRmZGF0YSh1ZGZzLT5pbnRlcmZhY2UsIE5VTEwpOwogCi0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT51cmJJbikgewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsOCkKLQkJLy8gd2FpdHMgdW50aWwgYSBydW5uaW5nIHRyYW5zZmVyIGlzIG92ZXIKLQkJLy8gdGh1cywgdW5kZXIgMi40IGhvdHBsdWdnaW5nIHdoaWxlIGEgY29tbWFuZAotCQkvLyBpcyBydW5uaW5nIGlzIG5vdCBzYWZlCi0JCXVzYl9raWxsX3VyYih1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4pOwotI2VuZGlmCi0JCWlmICh1c2JkdXhmYXN0c3ViX3RtcC0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQlrZnJlZSh1c2JkdXhmYXN0c3ViX3RtcC0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJCXVzYmR1eGZhc3RzdWJfdG1wLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOwotCQl9Ci0JCXVzYl9mcmVlX3VyYih1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4pOwotCQl1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4gPSBOVUxMOworCXVkZnMtPnByb2JlZCA9IDA7CisKKwlpZiAodWRmcy0+dXJiSW4pIHsKKwkJLyogd2FpdHMgdW50aWwgYSBydW5uaW5nIHRyYW5zZmVyIGlzIG92ZXIgKi8KKwkJdXNiX2tpbGxfdXJiKHVkZnMtPnVyYkluKTsKKworCQlrZnJlZSh1ZGZzLT50cmFuc2Zlcl9idWZmZXIpOworCQl1ZGZzLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCisJCXVzYl9mcmVlX3VyYih1ZGZzLT51cmJJbik7CisJCXVkZnMtPnVyYkluID0gTlVMTDsKIAl9Ci0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT5pbnNuQnVmZmVyKSB7Ci0JCWtmcmVlKHVzYmR1eGZhc3RzdWJfdG1wLT5pbnNuQnVmZmVyKTsKLQkJdXNiZHV4ZmFzdHN1Yl90bXAtPmluc25CdWZmZXIgPSBOVUxMOwotCX0KLQlpZiAodXNiZHV4ZmFzdHN1Yl90bXAtPmR1eF9jb21tYW5kcykgewotCQlrZnJlZSh1c2JkdXhmYXN0c3ViX3RtcC0+ZHV4X2NvbW1hbmRzKTsKLQkJdXNiZHV4ZmFzdHN1Yl90bXAtPmR1eF9jb21tYW5kcyA9IE5VTEw7Ci0JfQotCXVzYmR1eGZhc3RzdWJfdG1wLT5haV9jbWRfcnVubmluZyA9IDA7CisKKwlrZnJlZSh1ZGZzLT5pbnNuQnVmZmVyKTsKKwl1ZGZzLT5pbnNuQnVmZmVyID0gTlVMTDsKKworCWtmcmVlKHVkZnMtPmR1eF9jb21tYW5kcyk7CisJdWRmcy0+ZHV4X2NvbW1hbmRzID0gTlVMTDsKKworCXVkZnMtPmFpX2NtZF9ydW5uaW5nID0gMDsKIH0KIAotLy8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdXJicyBhbmQgaW5pdGlhbGlzZSB0aGVtCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi1zdGF0aWMgdm9pZCAqdXNiZHV4ZmFzdHN1Yl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQl1bnNpZ25lZCBpbnQgaW50ZXJmbnVtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgdm9pZCB1c2JkdXhmYXN0X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAorCQkJCQkJCSB2b2lkICpjb250ZXh0KQogewotI2Vsc2UKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1c2JkdXhmYXN0c3ViX3RtcCA9IGNvbnRleHQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHVzYmR1eGZhc3RzdWJfdG1wLT51c2JkZXY7CisJaW50IHJldDsKKworCWlmIChmdyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIHdlIG5lZWQgdG8gdXBsb2FkIHRoZSBmaXJtd2FyZSBoZXJlIGJlY2F1c2UgZncgd2lsbCBiZQorCSAqIGZyZWVkIG9uY2Ugd2UndmUgbGVmdCB0aGlzIGZ1bmN0aW9uCisJICovCisJcmV0ID0gcmVhZF9maXJtd2FyZSh1c2JkdXhmYXN0c3ViX3RtcCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmdXNiZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IHVwbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwKKwkJCXJldCk7CisJCXJldHVybjsKKwl9CisKKwljb21lZGlfdXNiX2F1dG9fY29uZmlnKHVzYmRldiwgQk9BUkROQU1FKTsKK30KKworLyoKKyAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHVyYnMgYW5kIGluaXRpYWxpc2UgdGhlbQorICovCiBzdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpbnRlcmYsCiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1aW50ZXJmKTsKLSNlbmRpZgogCWludCBpOwogCWludCBpbmRleDsKKwlpbnQgcmV0OwogCiAJaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IFRoaXMgZHJpdmVyIG5lZWRzIFVTQiAyLjAgdG8gb3BlcmF0ZS4gQWJvcnRpbmcuLi5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3RfOiBUaGlzIGRyaXZlciBuZWVkcyIKKwkJICAgICAgICJVU0IgMi4wIHRvIG9wZXJhdGUuIEFib3J0aW5nLi4uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3RfOiBmaW5kaW5nIGEgZnJlZSBzdHJ1Y3R1cmUgZm9yIHRoZSB1c2ItZGV2aWNlXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpXzogdXNiZHV4ZmFzdF86IGZpbmRpbmcgYSBmcmVlIHN0cnVjdHVyZSBmb3IgIgorCSAgICAgICAidGhlIHVzYi1kZXZpY2VcbiIpOwogI2VuZGlmCiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCS8vIGxvb2sgZm9yIGEgZnJlZSBwbGFjZSBpbiB0aGUgdXNiZHV4ZmFzdCBhcnJheQorCS8qIGxvb2sgZm9yIGEgZnJlZSBwbGFjZSBpbiB0aGUgdXNiZHV4ZmFzdCBhcnJheSAqLwogCWluZGV4ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IE5VTVVTQkRVWEZBU1Q7IGkrKykgewotCQlpZiAoISh1c2JkdXhmYXN0c3ViW2ldLnByb2JlZCkpIHsKKwkJaWYgKCF1c2JkdXhmYXN0c3ViW2ldLnByb2JlZCkgewogCQkJaW5kZXggPSBpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQkvLyBubyBtb3JlIHNwYWNlCisJLyogbm8gbW9yZSBzcGFjZSAqLwogCWlmIChpbmRleCA9PSAtMSkgewotCQlwcmludGsoIlRvbyBtYW55IHVzYmR1eGZhc3QtZGV2aWNlcyBjb25uZWN0ZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJUb28gbWFueSB1c2JkdXhmYXN0LWRldmljZXMgY29ubmVjdGVkLlxuIik7CiAJCXVwKCZzdGFydF9zdG9wX3NlbSk7CiAJCXJldHVybiAtRU1GSUxFOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiB1c2JkdXhmYXN0c3ViWyVkXSBpcyByZWFkeSB0byBjb25uZWN0IHRvIGNvbWVkaS5cbiIsIGluZGV4KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpXzogdXNiZHV4ZmFzdDogdXNiZHV4ZmFzdHN1YlslZF0gaXMgcmVhZHkgdG8gIgorCSAgICAgICAiY29ubmVjdCB0byBjb21lZGkuXG4iLCBpbmRleCk7CiAjZW5kaWYKIAogCWluaXRfTVVURVgoJih1c2JkdXhmYXN0c3ViW2luZGV4XS5zZW0pKTsKLQkvLyBzYXZlIGEgcG9pbnRlciB0byB0aGUgdXNiIGRldmljZQorCS8qIHNhdmUgYSBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0udXNiZGV2ID0gdWRldjsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotCS8vIHNhdmUgdGhlIGludGVyZmFjZSBudW1iZXIKLQl1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSA9IGludGVyZm51bTsKLSNlbHNlCi0JLy8gMi42OiBzYXZlIHRoZSBpbnRlcmZhY2UgaXRzZWxmCisJLyogc2F2ZSB0aGUgaW50ZXJmYWNlIGl0c2VsZiAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmludGVyZmFjZSA9IHVpbnRlcmY7Ci0JLy8gZ2V0IHRoZSBpbnRlcmZhY2UgbnVtYmVyIGZyb20gdGhlIGludGVyZmFjZQorCS8qIGdldCB0aGUgaW50ZXJmYWNlIG51bWJlciBmcm9tIHRoZSBpbnRlcmZhY2UgKi8KIAl1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSA9IHVpbnRlcmYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQkvLyBoYW5kIHRoZSBwcml2YXRlIGRhdGEgb3ZlciB0byB0aGUgdXNiIHN1YnN5c3RlbQotCS8vIHdpbGwgYmUgbmVlZGVkIGZvciBkaXNjb25uZWN0CisJLyoKKwkgKiBoYW5kIHRoZSBwcml2YXRlIGRhdGEgb3ZlciB0byB0aGUgdXNiIHN1YnN5c3RlbQorCSAqIHdpbGwgYmUgbmVlZGVkIGZvciBkaXNjb25uZWN0CisJICovCiAJdXNiX3NldF9pbnRmZGF0YSh1aW50ZXJmLCAmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGlmbnVtPSVkXG4iLCB1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGlmbnVtPSVkXG4iLAorCSAgICAgICB1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSk7CiAjZW5kaWYKLQkvLyBjcmVhdGUgc3BhY2UgZm9yIHRoZSBjb21tYW5kcyBnb2luZyB0byB0aGUgdXNiIGRldmljZQorCS8qIGNyZWF0ZSBzcGFjZSBmb3IgdGhlIGNvbW1hbmRzIGdvaW5nIHRvIHRoZSB1c2IgZGV2aWNlICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0uZHV4X2NvbW1hbmRzID0ga21hbGxvYyhTSVpFT0ZEVVhCVUZGRVIsCi0JCUdGUF9LRVJORUwpOworCQkJCQkJICAgIEdGUF9LRVJORUwpOwogCWlmICghdXNiZHV4ZmFzdHN1YltpbmRleF0uZHV4X2NvbW1hbmRzKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogZXJyb3IgYWxsb2Mgc3BhY2UgZm9yIGRhYyBjb21tYW5kc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogZXJyb3IgYWxsb2Mgc3BhY2UgZm9yICIKKwkJICAgICAgICJkYWMgY29tbWFuZHNcbiIpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8vIGNyZWF0ZSBzcGFjZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyCisJLyogY3JlYXRlIHNwYWNlIG9mIHRoZSBpbnN0cnVjdGlvbiBidWZmZXIgKi8KIAl1c2JkdXhmYXN0c3ViW2luZGV4XS5pbnNuQnVmZmVyID0ga21hbGxvYyhTSVpFSU5TTkJVRiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEodXNiZHV4ZmFzdHN1YltpbmRleF0uaW5zbkJ1ZmZlcikpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBjb3VsZCBub3QgYWxsb2Mgc3BhY2UgZm9yIGluc25CdWZmZXJcbiIpOworCWlmICghdXNiZHV4ZmFzdHN1YltpbmRleF0uaW5zbkJ1ZmZlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNvdWxkIG5vdCBhbGxvYyBzcGFjZSAiCisJCSAgICAgICAiZm9yIGluc25CdWZmZXJcbiIpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8vIHNldHRpbmcgdG8gYWx0ZXJuYXRlIHNldHRpbmcgMTogZW5hYmxpbmcgYnVsayBlcAorCS8qIHNldHRpbmcgdG8gYWx0ZXJuYXRlIHNldHRpbmcgMTogZW5hYmxpbmcgYnVsayBlcCAqLwogCWkgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JkdXhmYXN0c3ViW2luZGV4XS51c2JkZXYsCiAJCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmlmbnVtLCAxKTsKIAlpZiAoaSA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBzd2l0Y2ggdG8gYWx0ZXJuYXRlIHNldHRpbmcgMS5cbiIsIGluZGV4KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBzd2l0Y2ggdG8gIgorCQkgICAgICAgImFsdGVybmF0ZSBzZXR0aW5nIDEuXG4iLCBpbmRleCk7CiAJCXRpZHlfdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJdXNiZHV4ZmFzdHN1YltpbmRleF0udXJiSW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICh1c2JkdXhmYXN0c3ViW2luZGV4XS51cmJJbiA9PSBOVUxMKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdCVkOiBDb3VsZCBub3QgYWxsb2MuIHVyYlxuIiwgaW5kZXgpOworCWlmICghdXNiZHV4ZmFzdHN1YltpbmRleF0udXJiSW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IENvdWxkIG5vdCBhbGxvYy4iCisJCSAgICAgICAidXJiXG4iLCBpbmRleCk7CiAJCXRpZHlfdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdXNiZHV4ZmFzdHN1YltpbmRleF0udHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhTSVpFSU5CVUYsIEdGUF9LRVJORUwpOwotCWlmICghKHVzYmR1eGZhc3RzdWJbaW5kZXhdLnRyYW5zZmVyX2J1ZmZlcikpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBhbGxvYy4gdHJhbnNiLlxuIiwKLQkJCWluZGV4KTsKKwlpZiAoIXVzYmR1eGZhc3RzdWJbaW5kZXhdLnRyYW5zZmVyX2J1ZmZlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3QlZDogY291bGQgbm90IGFsbG9jLiAiCisJCSAgICAgICAidHJhbnNiLlxuIiwgaW5kZXgpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8vIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgZnVuY3Rpb24KKwkvKiB3ZSd2ZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIGZ1bmN0aW9uICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0ucHJvYmVkID0gMTsKIAl1cCgmc3RhcnRfc3RvcF9zZW0pOwotCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdCVkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC5cbiIsCi0JCWluZGV4KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkKLQlyZXR1cm4gKHZvaWQgKikoJnVzYmR1eGZhc3RzdWJbaW5kZXhdKTsKLSNlbHNlCi0JLy8gc3VjY2VzcworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsCisJCQkJICAgICAgRldfQUNUSU9OX0hPVFBMVUcsCisJCQkJICAgICAgInVzYmR1eGZhc3RfZmlybXdhcmUuaGV4IiwKKwkJCQkgICAgICAmdWRldi0+ZGV2LAorCQkJCSAgICAgIHVzYmR1eGZhc3RzdWIgKyBpbmRleCwKKwkJCQkgICAgICB1c2JkdXhmYXN0X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNvdWxkIG5vdCBsb2FkIGZpcm13YXJlIChlcnI9JWQpXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGlfOiB1c2JkdXhmYXN0JWQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5ICIKKwkgICAgICAgImluaXRpYWxpemVkLlxuIiwgaW5kZXgpOworCS8qIHN1Y2Nlc3MgKi8KIAlyZXR1cm4gMDsKLSNlbmRpZgogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi1zdGF0aWMgdm9pZCB1c2JkdXhmYXN0c3ViX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHZvaWQgKnB0cikKLXsKLQl1c2JkdXhmYXN0c3ViX3QgKnVzYmR1eGZhc3RzdWJfdG1wID0gKHVzYmR1eGZhc3RzdWJfdCAqKSBwdHI7Ci0jZWxzZQogc3RhdGljIHZvaWQgdXNiZHV4ZmFzdHN1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXVzYmR1eGZhc3RzdWJfdCAqdXNiZHV4ZmFzdHN1Yl90bXAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLSNlbmRpZgotCWlmICghdXNiZHV4ZmFzdHN1Yl90bXApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBkaXNjb25uZWN0IGNhbGxlZCB3aXRoIG51bGwgcG9pbnRlci5cbiIpOworCisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogZGlzY29ubmVjdCBjYWxsZWQgd2l0aCAiCisJCSAgICAgICAibnVsbCBwb2ludGVyLlxuIik7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT51c2JkZXYgIT0gdWRldikgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IEJVRyEgY2FsbGVkIHdpdGggd3JvbmcgcHRyISEhXG4iKTsKKwlpZiAodWRmcy0+dXNiZGV2ICE9IHVkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBCVUchIGNhbGxlZCB3aXRoIHdyb25nICIKKwkJICAgICAgICJwdHIhISFcbiIpOwogCQlyZXR1cm47CiAJfQorCisJY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKHVkZXYpOworCiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCWRvd24oJnVzYmR1eGZhc3RzdWJfdG1wLT5zZW0pOwotCXRpZHlfdXAodXNiZHV4ZmFzdHN1Yl90bXApOwotCXVwKCZ1c2JkdXhmYXN0c3ViX3RtcC0+c2VtKTsKKwlkb3duKCZ1ZGZzLT5zZW0pOworCXRpZHlfdXAodWRmcyk7CisJdXAoJnVkZnMtPnNlbSk7CiAJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSB1c2JcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGlfOiB1c2JkdXhmYXN0OiBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgdXNiXG4iKTsKICNlbmRpZgogfQogCi0vLyBpcyBjYWxsZWQgd2hlbiBjb21lZGktY29uZmlnIGlzIGNhbGxlZAotc3RhdGljIGludCB1c2JkdXhmYXN0X2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCisvKgorICogaXMgY2FsbGVkIHdoZW4gY29tZWRpLWNvbmZpZyBpcyBjYWxsZWQKKyAqLworc3RhdGljIGludCB1c2JkdXhmYXN0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IHJldDsKIAlpbnQgaW5kZXg7CiAJaW50IGk7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOwogCWRldi0+cHJpdmF0ZSA9IE5VTEw7CiAKIAlkb3duKCZzdGFydF9zdG9wX3NlbSk7Ci0JLy8gZmluZCBhIHZhbGlkIGRldmljZSB3aGljaCBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIHVzYgorCS8qCisJICogZmluZCBhIHZhbGlkIGRldmljZSB3aGljaCBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUKKwkgKiBwcm9iZSBmdW5jdGlvbiBvZiB0aGUgdXNiCisJICovCiAJaW5kZXggPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNVVNCRFVYRkFTVDsgaSsrKSB7Ci0JCWlmICgodXNiZHV4ZmFzdHN1YltpXS5wcm9iZWQpICYmICghdXNiZHV4ZmFzdHN1YltpXS5hdHRhY2hlZCkpIHsKKwkJaWYgKHVzYmR1eGZhc3RzdWJbaV0ucHJvYmVkICYmICF1c2JkdXhmYXN0c3ViW2ldLmF0dGFjaGVkKSB7CiAJCQlpbmRleCA9IGk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCWlmIChpbmRleCA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZXJyb3I6IGF0dGFjaCBmYWlsZWQsIG5vIHVzYmR1eGZhc3QgZGV2cyBjb25uZWN0ZWQgdG8gdGhlIHVzYiBidXMuXG4iLCBkZXYtPm1pbm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogZXJyb3I6IGF0dGFjaCBmYWlsZWQsICIKKwkJICAgICAgICJubyB1c2JkdXhmYXN0IGRldnMgY29ubmVjdGVkIHRvIHRoZSB1c2IgYnVzLlxuIiwKKwkJICAgICAgIGRldi0+bWlub3IpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlkb3duKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7Ci0JLy8gcG9pbnRlciBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbWVkaSBkZXZpY2UKKwkvKiBwb2ludGVyIGJhY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29tZWRpIGRldmljZSAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmNvbWVkaWRldiA9IGRldjsKIAotCS8vIHRyeWluZyB0byB1cGxvYWQgdGhlIGZpcm13YXJlIGludG8gdGhlIGNoaXAKKwkvKiB0cnlpbmcgdG8gdXBsb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjaGlwICovCiAJaWYgKGNvbWVkaV9hdXhfZGF0YShpdC0+b3B0aW9ucywgMCkgJiYKLQkJaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXSkgewotCQlyZWFkX2Zpcm13YXJlKHVzYmR1eGZhc3RzdWIsCi0JCQljb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApLAotCQkJaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXSk7CisJICAgIGl0LT5vcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0pIHsKKwkJcmVhZF9maXJtd2FyZSgmdXNiZHV4ZmFzdHN1YltpbmRleF0sCisJCQkgICAgICBjb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApLAorCQkJICAgICAgaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXSk7CiAJfQogCiAJZGV2LT5ib2FyZF9uYW1lID0gQk9BUkROQU1FOwpAQCAtMTYxNiwxNTUgKzE3NjEsMTUwIEBACiAJLyogc2V0IG51bWJlciBvZiBzdWJkZXZpY2VzICovCiAJZGV2LT5uX3N1YmRldmljZXMgPSBOX1NVQkRFVklDRVM7CiAKLQkvLyBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHN1YmRldmljZXMKLQlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBOX1NVQkRFVklDRVMpKSA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZXJyb3IgYWxsb2Mgc3BhY2UgZm9yIHN1YmRldlxuIiwKLQkJCWRldi0+bWlub3IpOworCS8qIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3ViZGV2aWNlcyAqLworCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBOX1NVQkRFVklDRVMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGVycm9yIGFsbG9jIHNwYWNlIGZvciAiCisJCSAgICAgICAic3ViZGV2XG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XS5zZW0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1c2ItZGV2aWNlICVkIGlzIGF0dGFjaGVkIHRvIGNvbWVkaS5cbiIsCi0JCWRldi0+bWlub3IsIGluZGV4KTsKLQkvLyBwcml2YXRlIHN0cnVjdHVyZSBpcyBhbHNvIHNpbXBseSB0aGUgdXNiLXN0cnVjdHVyZQorCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1c2ItZGV2aWNlICVkIGlzIGF0dGFjaGVkIHRvICIKKwkgICAgICAgImNvbWVkaS5cbiIsIGRldi0+bWlub3IsIGluZGV4KTsKKwkvKiBwcml2YXRlIHN0cnVjdHVyZSBpcyBhbHNvIHNpbXBseSB0aGUgdXNiLXN0cnVjdHVyZSAqLwogCWRldi0+cHJpdmF0ZSA9IHVzYmR1eGZhc3RzdWIgKyBpbmRleDsKLQkvLyB0aGUgZmlyc3Qgc3ViZGV2aWNlIGlzIHRoZSBBL0QgY29udmVydGVyCisJLyogdGhlIGZpcnN0IHN1YmRldmljZSBpcyB0aGUgQS9EIGNvbnZlcnRlciAqLwogCXMgPSBkZXYtPnN1YmRldmljZXMgKyBTVUJERVZfQUQ7Ci0JLy8gdGhlIFVSQnMgZ2V0IHRoZSBjb21lZGkgc3ViZGV2aWNlCi0JLy8gd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcKLQkvLyB0aGlzIGlzIHRoZSBzdWJkZXZpY2Ugd2hpY2ggcmVhZHMgZGF0YQorCS8qCisJICogdGhlIFVSQnMgZ2V0IHRoZSBjb21lZGkgc3ViZGV2aWNlIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciByZWFkaW5nCisJICogdGhpcyBpcyB0aGUgc3ViZGV2aWNlIHdoaWNoIHJlYWRzIGRhdGEKKwkgKi8KIAlkZXYtPnJlYWRfc3ViZGV2ID0gczsKLQkvLyB0aGUgc3ViZGV2aWNlIHJlY2VpdmVzIGFzIHByaXZhdGUgc3RydWN0dXJlIHRoZQotCS8vIHVzYi1zdHJ1Y3R1cmUKKwkvKiB0aGUgc3ViZGV2aWNlIHJlY2VpdmVzIGFzIHByaXZhdGUgc3RydWN0dXJlIHRoZSB1c2Itc3RydWN0dXJlICovCiAJcy0+cHJpdmF0ZSA9IE5VTEw7Ci0JLy8gYW5hbG9nIGlucHV0CisJLyogYW5hbG9nIGlucHV0ICovCiAJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOwotCS8vIHJlYWRhYmxlIGFuZCByZWYgaXMgdG8gZ3JvdW5kCisJLyogcmVhZGFibGUgYW5kIHJlZiBpcyB0byBncm91bmQgKi8KIAlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOwotCS8vIDE2IGNoYW5uZWxzCisJLyogMTYgY2hhbm5lbHMgKi8KIAlzLT5uX2NoYW4gPSAxNjsKLQkvLyBsZW5ndGggb2YgdGhlIGNoYW5uZWxsaXN0CisJLyogbGVuZ3RoIG9mIHRoZSBjaGFubmVsbGlzdCAqLwogCXMtPmxlbl9jaGFubGlzdCA9IDE2OwotCS8vIGNhbGxiYWNrIGZ1bmN0aW9ucworCS8qIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCXMtPmluc25fcmVhZCA9IHVzYmR1eGZhc3RfYWlfaW5zbl9yZWFkOwogCXMtPmRvX2NtZHRlc3QgPSB1c2JkdXhmYXN0X2FpX2NtZHRlc3Q7CiAJcy0+ZG9fY21kID0gdXNiZHV4ZmFzdF9haV9jbWQ7CiAJcy0+Y2FuY2VsID0gdXNiZHV4ZmFzdF9haV9jYW5jZWw7Ci0JLy8gbWF4IHZhbHVlIGZyb20gdGhlIEEvRCBjb252ZXJ0ZXIgKDEyYml0KzEgYml0IGZvciBvdmVyZmxvdykKKwkvKiBtYXggdmFsdWUgZnJvbSB0aGUgQS9EIGNvbnZlcnRlciAoMTJiaXQrMSBiaXQgZm9yIG92ZXJmbG93KSAqLwogCXMtPm1heGRhdGEgPSAweDEwMDA7Ci0JLy8gcmFuZ2UgdGFibGUgdG8gY29udmVydCB0byBwaHlzaWNhbCB1bml0cworCS8qIHJhbmdlIHRhYmxlIHRvIGNvbnZlcnQgdG8gcGh5c2ljYWwgdW5pdHMgKi8KIAlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91c2JkdXhmYXN0X2FpX3JhbmdlOwogCi0JLy8gZmluYWxseSBkZWNpZGUgdGhhdCBpdCdzIGF0dGFjaGVkCisJLyogZmluYWxseSBkZWNpZGUgdGhhdCBpdCdzIGF0dGFjaGVkICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0uYXR0YWNoZWQgPSAxOwogCiAJdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XS5zZW0pKTsKLQogCXVwKCZzdGFydF9zdG9wX3NlbSk7Ci0KLQlwcmludGsoImNvbWVkaSVkOiBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdXNiZHV4ZmFzdC5cbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdXNiZHV4ZmFzdC5cbiIsCisJICAgICAgIGRldi0+bWlub3IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQl1c2JkdXhmYXN0c3ViX3QgKnVzYmR1eGZhc3RzdWJfdG1wOwotCi0jaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGRldGFjaCB1c2IgZGV2aWNlXG4iLCBkZXYtPm1pbm9yKTsKLSNlbmRpZgorCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnM7CiAKIAlpZiAoIWRldikgewotCQlwcmludGsoImNvbWVkaT86IHVzYmR1eGZhc3Q6IGRldGFjaCB3aXRob3V0IGRldiB2YXJpYWJsZS4uLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpPzogdXNiZHV4ZmFzdDogZGV0YWNoIHdpdGhvdXQgZGV2ICIKKwkJICAgICAgICJ2YXJpYWJsZS4uLlxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXVzYmR1eGZhc3RzdWJfdG1wID0gZGV2LT5wcml2YXRlOwotCWlmICghdXNiZHV4ZmFzdHN1Yl90bXApIHsKLQkJcHJpbnRrKCJjb21lZGk/OiB1c2JkdXhmYXN0OiBkZXRhY2ggd2l0aG91dCBwdHIgdG8gdXNiZHV4ZmFzdHN1YltdXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JZG93bigmdXNiZHV4ZmFzdHN1Yl90bXAtPnNlbSk7Ci0JZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCS8vIERvbid0IGFsbG93IGRldGFjaCB0byBmcmVlIHRoZSBwcml2YXRlIHN0cnVjdHVyZQotCS8vIEl0J3Mgb25lIGVudHJ5IG9mIG9mIHVzYmR1eGZhc3RzdWJbXQotCWRldi0+cHJpdmF0ZSA9IE5VTEw7Ci0JdXNiZHV4ZmFzdHN1Yl90bXAtPmF0dGFjaGVkID0gMDsKLQl1c2JkdXhmYXN0c3ViX3RtcC0+Y29tZWRpZGV2ID0gTlVMTDsKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZGV0YWNoOiBzdWNjZXNzZnVsbHkgcmVtb3ZlZFxuIiwKLQkJZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBkZXRhY2ggdXNiIGRldmljZVxuIiwKKwkgICAgICAgZGV2LT5taW5vcik7CisjZW5kaWYKKworCXVkZnMgPSBkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpPzogdXNiZHV4ZmFzdDogZGV0YWNoIHdpdGhvdXQgcHRyIHRvICIKKwkJICAgICAgICJ1c2JkdXhmYXN0c3ViW11cbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWRvd24oJnN0YXJ0X3N0b3Bfc2VtKTsKKwkvKgorCSAqIERvbid0IGFsbG93IGRldGFjaCB0byBmcmVlIHRoZSBwcml2YXRlIHN0cnVjdHVyZQorCSAqIEl0J3Mgb25lIGVudHJ5IG9mIG9mIHVzYmR1eGZhc3RzdWJbXQorCSAqLworCWRldi0+cHJpdmF0ZSA9IE5VTEw7CisJdWRmcy0+YXR0YWNoZWQgPSAwOworCXVkZnMtPmNvbWVkaWRldiA9IE5VTEw7CisjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogZGV0YWNoOiBzdWNjZXNzZnVsbHkgIgorCSAgICAgICAicmVtb3ZlZFxuIiwgZGV2LT5taW5vcik7CiAjZW5kaWYKIAl1cCgmc3RhcnRfc3RvcF9zZW0pOwotCXVwKCZ1c2JkdXhmYXN0c3ViX3RtcC0+c2VtKTsKKwl1cCgmdWRmcy0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIAotLyogbWFpbiBkcml2ZXIgc3RydWN0ICovCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfdXNiZHV4ZmFzdCA9IHsKLSAgICAgIGRyaXZlcl9uYW1lOiJ1c2JkdXhmYXN0IiwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDp1c2JkdXhmYXN0X2F0dGFjaCwKLSAgICAgIGRldGFjaDp1c2JkdXhmYXN0X2RldGFjaCwKKy8qCisgKiBtYWluIGRyaXZlciBzdHJ1Y3QKKyAqLworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl91c2JkdXhmYXN0ID0geworCS5kcml2ZXJfbmFtZQk9ICJ1c2JkdXhmYXN0IiwKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5hdHRhY2gJCT0gdXNiZHV4ZmFzdF9hdHRhY2gsCisJLmRldGFjaAkJPSB1c2JkdXhmYXN0X2RldGFjaAogfTsKIAotc3RhdGljIHZvaWQgaW5pdF91c2JfZGV2aWNlcyh2b2lkKQotewotCWludCBpbmRleDsKLSNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBzZXR0aW5nIGFsbCBwb3NzaWJsZSBkZXZzIHRvIGludmFsaWRcbiIpOwotI2VuZGlmCi0JLy8gYWxsIGRldmljZXMgZW50cmllcyBhcmUgaW52YWxpZCB0byBiZWdpbiB3aXRoCi0JLy8gdGhleSB3aWxsIGJlY29tZSB2YWxpZCBieSB0aGUgcHJvYmUgZnVuY3Rpb24KLQkvLyBhbmQgdGhlbiBmaW5hbGx5IGJ5IHRoZSBhdHRhY2gtZnVuY3Rpb24KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1VU0JEVVhGQVNUOyBpbmRleCsrKSB7Ci0JCW1lbXNldCgmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSwgMHgwMCwKLQkJCXNpemVvZih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwotCQlpbml0X01VVEVYKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7Ci0JfQotfQotCi0vLyBUYWJsZSB3aXRoIHRoZSBVU0ItZGV2aWNlczoganVzdCBub3cgb25seSB0ZXN0aW5nIElEcworLyoKKyAqIFRhYmxlIHdpdGggdGhlIFVTQi1kZXZpY2VzOiBqdXN0IG5vdyBvbmx5IHRlc3RpbmcgSURzCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JkdXhmYXN0c3ViX3RhYmxlW10gPSB7Ci0JLy8gICAgICAgIHsgVVNCX0RFVklDRSgweDRiNCwgMHg4NjEzKSwgLy90ZXN0aW5nCi0JLy8gICAgICAgIH0sCi0Je1VTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTApCS8vcmVhbCBJRAotCQl9LAotCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDExKQkvL3JlYWwgSUQKLQkJfSwKLQl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJLyogeyBVU0JfREVWSUNFKDB4NGI0LCAweDg2MTMpIH0sIHRlc3RpbmcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTApIH0sCS8qIHJlYWwgSUQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTEpIH0sCS8qIHJlYWwgSUQgKi8KKwl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYmR1eGZhc3RzdWJfdGFibGUpOwogCi0vLyBUaGUgdXNiZHV4ZmFzdHN1Yi1kcml2ZXIKKy8qCisgKiBUaGUgdXNiZHV4ZmFzdHN1Yi1kcml2ZXIKKyAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYmR1eGZhc3RzdWJfZHJpdmVyID0gewogI2lmZGVmIENPTUVESV9IQVZFX1VTQl9EUklWRVJfT1dORVIKLSAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKICNlbmRpZgotICAgICAgbmFtZTpCT0FSRE5BTUUsCi0gICAgICBwcm9iZTp1c2JkdXhmYXN0c3ViX3Byb2JlLAotICAgICAgZGlzY29ubmVjdDp1c2JkdXhmYXN0c3ViX2Rpc2Nvbm5lY3QsCi0gICAgICBpZF90YWJsZTp1c2JkdXhmYXN0c3ViX3RhYmxlLAorCS5uYW1lCQk9IEJPQVJETkFNRSwKKwkucHJvYmUJCT0gdXNiZHV4ZmFzdHN1Yl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYmR1eGZhc3RzdWJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB1c2JkdXhmYXN0c3ViX3RhYmxlCiB9OwogCi0vLyBDYW4ndCB1c2UgdGhlIG5pY2UgbWFjcm8gYXMgSSBoYXZlIGFsc28gdG8gaW5pdGlhbGlzZSB0aGUgVVNCCi0vLyBzdWJzeXN0ZW06Ci0vLyByZWdpc3RlcmluZyB0aGUgdXNiLXN5c3RlbSBfYW5kXyB0aGUgY29tZWRpLWRyaXZlcgotc3RhdGljIGludCBpbml0X3VzYmR1eGZhc3Qodm9pZCkKKy8qCisgKiBDYW4ndCB1c2UgdGhlIG5pY2UgbWFjcm8gYXMgSSBoYXZlIGFsc28gdG8gaW5pdGlhbGlzZSB0aGUgVVNCIHN1YnN5c3RlbToKKyAqIHJlZ2lzdGVyaW5nIHRoZSB1c2Itc3lzdGVtIF9hbmRfIHRoZSBjb21lZGktZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdXNiZHV4ZmFzdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIgotCSAgICAgICBEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MgIlxuIik7Ci0JaW5pdF91c2JfZGV2aWNlcygpOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MgIlxuIik7CiAJdXNiX3JlZ2lzdGVyKCZ1c2JkdXhmYXN0c3ViX2RyaXZlcik7CiAJY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3VzYmR1eGZhc3QpOwogCXJldHVybiAwOwogfQogCi0vLyBkZXJlZ2lzdGVyaW5nIHRoZSBjb21lZGkgZHJpdmVyIGFuZCB0aGUgdXNiLXN1YnN5c3RlbQotc3RhdGljIHZvaWQgZXhpdF91c2JkdXhmYXN0KHZvaWQpCisvKgorICogZGVyZWdpc3RlcmluZyB0aGUgY29tZWRpIGRyaXZlciBhbmQgdGhlIHVzYi1zdWJzeXN0ZW0KKyAqLworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfdXNiZHV4ZmFzdCh2b2lkKQogewogCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3VzYmR1eGZhc3QpOwogCXVzYl9kZXJlZ2lzdGVyKCZ1c2JkdXhmYXN0c3ViX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2ludGVycnVwdC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9pbnRlcnJ1cHQuaAppbmRleCAzMDM4ZTQ2Li5kMWYwOTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2ludGVycnVwdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvaW50ZXJydXB0LmgKQEAgLTIxLDE1ICsyMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQotI2lmbmRlZiBJUlFfTk9ORQotdHlwZWRlZiB2b2lkIGlycXJldHVybl90OwotI2RlZmluZSBJUlFfTk9ORQotI2RlZmluZSBJUlFfSEFORExFRAotI2RlZmluZSBJUlFfUkVUVkFMKHgpICh2b2lkKSh4KQotI2VuZGlmCi0KICNpZm5kZWYgSVJRRl9ESVNBQkxFRAogI2RlZmluZSBJUlFGX0RJU0FCTEVEICAgICAgICAgICBTQV9JTlRFUlJVUFQKICNkZWZpbmUgSVJRRl9TQU1QTEVfUkFORE9NICAgICAgU0FfU0FNUExFX1JBTkRPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kYXRhLmMKaW5kZXggNzlhZWMyMC4uOTc5N2UxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2RhdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZGF0YS5jCkBAIC0yNywxMCArMjcsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi1pbnQgY29tZWRpX2RhdGFfd3JpdGUoY29tZWRpX3QgKiBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90IGRhdGEpCitpbnQgY29tZWRpX2RhdGFfd3JpdGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKLQljb21lZGlfaW5zbiBpbnNuOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwogCWluc24uaW5zbiA9IElOU05fV1JJVEU7CkBAIC00MiwxMCArNDIsMTAgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGF0YV9yZWFkKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCAqIGRhdGEpCitpbnQgY29tZWRpX2RhdGFfcmVhZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAorCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKLQljb21lZGlfaW5zbiBpbnNuOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwogCWluc24uaW5zbiA9IElOU05fUkVBRDsKQEAgLTU3LDExICs1NywxMSBAQAogCXJldHVybiBjb21lZGlfZG9faW5zbihkZXYsICZpbnNuKTsKIH0KIAotaW50IGNvbWVkaV9kYXRhX3JlYWRfaGludChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKK2ludCBjb21lZGlfZGF0YV9yZWFkX2hpbnQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAogCXVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmKQogewotCWNvbWVkaV9pbnNuIGluc247Ci0JbHNhbXBsX3QgZHVtbXlfZGF0YTsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKKwl1bnNpZ25lZCBpbnQgZHVtbXlfZGF0YTsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1JFQUQ7CkBAIC03Myw5ICs3Myw5IEBACiAJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldiwgJmluc24pOwogfQogCi1pbnQgY29tZWRpX2RhdGFfcmVhZF9kZWxheWVkKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAoraW50IGNvbWVkaV9kYXRhX3JlYWRfZGVsYXllZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsCi0JbHNhbXBsX3QgKiBkYXRhLCB1bnNpZ25lZCBpbnQgbmFub19zZWMpCisJdW5zaWduZWQgaW50ICpkYXRhLCB1bnNpZ25lZCBpbnQgbmFub19zZWMpCiB7CiAJaW50IHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2Rpby5jCmluZGV4IGE5ZjQ4OGEuLjg1OTU1NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZGlvLmMKQEAgLTI2LDEwICsyNiwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKLWludCBjb21lZGlfZGlvX2NvbmZpZyhjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb19jb25maWcodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgaW8pCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX0NPTkZJRzsKQEAgLTQxLDEwICs0MSwxMCBAQAogCXJldHVybiBjb21lZGlfZG9faW5zbihkZXYsICZpbnNuKTsKIH0KIAotaW50IGNvbWVkaV9kaW9fcmVhZChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb19yZWFkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50ICp2YWwpCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1JFQUQ7CkBAIC01NiwxMCArNTYsMTAgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGlvX3dyaXRlKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKK2ludCBjb21lZGlfZGlvX3dyaXRlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50IHZhbCkKIHsKLQljb21lZGlfaW5zbiBpbnNuOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwogCWluc24uaW5zbiA9IElOU05fV1JJVEU7CkBAIC03MSwxMSArNzEsMTEgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGlvX2JpdGZpZWxkKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgbWFzaywKK2ludCBjb21lZGlfZGlvX2JpdGZpZWxkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IG1hc2ssCiAJdW5zaWduZWQgaW50ICpiaXRzKQogewotCWNvbWVkaV9pbnNuIGluc247Ci0JbHNhbXBsX3QgZGF0YVsyXTsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKKwl1bnNpZ25lZCBpbnQgZGF0YVsyXTsKIAlpbnQgcmV0OwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2dldC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2dldC5jCmluZGV4IDIwMDRhZDQuLmI2YjcyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9nZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZ2V0LmMKQEAgLTI2LDUxICsyNiw1MSBAQAogI2luY2x1ZGUgIi4uL2NvbWVkaWxpYi5oIgogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCi1pbnQgY29tZWRpX2dldF9uX3N1YmRldmljZXMoY29tZWRpX3QgKiBkKQoraW50IGNvbWVkaV9nZXRfbl9zdWJkZXZpY2VzKHZvaWQgKmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAlyZXR1cm4gZGV2LT5uX3N1YmRldmljZXM7CiB9CiAKLWludCBjb21lZGlfZ2V0X3ZlcnNpb25fY29kZShjb21lZGlfdCAqIGQpCitpbnQgY29tZWRpX2dldF92ZXJzaW9uX2NvZGUodm9pZCAqZCkKIHsKIAlyZXR1cm4gQ09NRURJX1ZFUlNJT05fQ09ERTsKIH0KIAotY29uc3QgY2hhciAqY29tZWRpX2dldF9kcml2ZXJfbmFtZShjb21lZGlfdCAqIGQpCitjb25zdCBjaGFyICpjb21lZGlfZ2V0X2RyaXZlcl9uYW1lKHZvaWQgKiBkKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOwogCiAJcmV0dXJuIGRldi0+ZHJpdmVyLT5kcml2ZXJfbmFtZTsKIH0KIAotY29uc3QgY2hhciAqY29tZWRpX2dldF9ib2FyZF9uYW1lKGNvbWVkaV90ICogZCkKK2NvbnN0IGNoYXIgKmNvbWVkaV9nZXRfYm9hcmRfbmFtZSh2b2lkICogZCkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKIAogCXJldHVybiBkZXYtPmJvYXJkX25hbWU7CiB9CiAKLWludCBjb21lZGlfZ2V0X3N1YmRldmljZV90eXBlKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfZ2V0X3N1YmRldmljZV90eXBlKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT50eXBlOwogfQogCi11bnNpZ25lZCBpbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfZmxhZ3MoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQordW5zaWduZWQgaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX2ZsYWdzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT5zdWJkZXZfZmxhZ3M7CiB9CiAKLWludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZShjb21lZGlfdCAqIGQsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3ViZCkKK2ludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZSh2b2lkICpkLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN1YmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAlpZiAoc3ViZCA+IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTgyLDI3ICs4MiwyNyBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IGNvbWVkaV9nZXRfbl9jaGFubmVscyhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9uX2NoYW5uZWxzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT5uX2NoYW47CiB9CiAKLWludCBjb21lZGlfZ2V0X2xlbl9jaGFubGlzdChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9sZW5fY2hhbmxpc3Qodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJcmV0dXJuIHMtPmxlbl9jaGFubGlzdDsKIH0KIAotbHNhbXBsX3QgY29tZWRpX2dldF9tYXhkYXRhKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X21heGRhdGEodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKHMtPm1heGRhdGFfbGlzdCkKIAkJcmV0dXJuIHMtPm1heGRhdGFfbGlzdFtjaGFuXTsKQEAgLTExMSwxMSArMTExLDExIEBACiB9CiAKICNpZmRlZiBLQ09NRURJTElCX0RFUFJFQ0FURUQKLWludCBjb21lZGlfZ2V0X3JhbmdldHlwZShjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX2dldF9yYW5nZXR5cGUodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCWludCByZXQ7CiAKIAlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgewpAQCAtMTMwLDEwICsxMzAsMTAgQEAKIH0KICNlbmRpZgogCi1pbnQgY29tZWRpX2dldF9uX3Jhbmdlcyhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludCBjaGFuKQoraW50IGNvbWVkaV9nZXRfbl9yYW5nZXModm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAlpbnQgcmV0OwogCiAJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKQEAgLTE0OCwyMiArMTQ4LDIyIEBACiAvKgogICogQUxQSEEgKG5vbi1wb3J0YWJsZSkKICovCi1pbnQgY29tZWRpX2dldF9rcmFuZ2UoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIGNvbWVkaV9rcmFuZ2UgKiBrcmFuZ2UpCitpbnQgY29tZWRpX2dldF9rcmFuZ2Uodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50IGNoYW4sCisJdW5zaWduZWQgaW50IHJhbmdlLCBzdHJ1Y3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb25zdCBjb21lZGlfbHJhbmdlICpscjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmxyOwogCiAJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKIAkJbHIgPSBzLT5yYW5nZV90YWJsZV9saXN0W2NoYW5dOwogCX0gZWxzZSB7CiAJCWxyID0gcy0+cmFuZ2VfdGFibGU7CiAJfQotCWlmIChyYW5nZSA+PSBsci0+bGVuZ3RoKSB7CisJaWYgKHJhbmdlID49IGxyLT5sZW5ndGgpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQltZW1jcHkoa3JhbmdlLCBsci0+cmFuZ2UgKyByYW5nZSwgc2l6ZW9mKGNvbWVkaV9rcmFuZ2UpKTsKKworCW1lbWNweShrcmFuZ2UsIGxyLT5yYW5nZSArIHJhbmdlLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9rcmFuZ2UpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTcxLDExICsxNzEsMTEgQEAKIC8qCiAgKiBBTFBIQSAobWF5IGJlIHJlbmFtZWQpCiAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X2J1Zl9oZWFkX3Bvcyh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWFzeW5jID0gcy0+YXN5bmM7CiAJaWYgKGFzeW5jID09IE5VTEwpCkBAIC0xODQsMTEgKzE4NCwxMSBAQAogCXJldHVybiBhc3luYy0+YnVmX3dyaXRlX2NvdW50OwogfQogCi1pbnQgY29tZWRpX2dldF9idWZmZXJfY29udGVudHMoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQoraW50IGNvbWVkaV9nZXRfYnVmZmVyX2NvbnRlbnRzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CiAKIAlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQpAQCAtMjAzLDEyICsyMDMsMTIgQEAKIC8qCiAgKiBBTFBIQQogKi8KLWludCBjb21lZGlfc2V0X3VzZXJfaW50X2NvdW50KGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK2ludCBjb21lZGlfc2V0X3VzZXJfaW50X2NvdW50KHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IGJ1Zl91c2VyX2NvdW50KQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgbnVtX2J5dGVzOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTIyNCwxMiArMjI0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfbWFya19idWZmZXJfcmVhZChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtMTsKQEAgLTI0MywxMiArMjQzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfbWFya19idWZmZXJfd3JpdHRlbihjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX21hcmtfYnVmZmVyX3dyaXR0ZW4odm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgYnl0ZXNfd3JpdHRlbjsKIAogCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCkBAIC0yNjMsMTEgKzI2MywxMSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29tZWRpX2dldF9idWZmZXJfc2l6ZShjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXYpCitpbnQgY29tZWRpX2dldF9idWZmZXJfc2l6ZSh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2KQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWlmIChzdWJkZXYgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtMTsKQEAgLTI3OCwxMSArMjc4LDExIEBACiAJcmV0dXJuIGFzeW5jLT5wcmVhbGxvY19idWZzejsKIH0KIAotaW50IGNvbWVkaV9nZXRfYnVmZmVyX29mZnNldChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9idWZmZXJfb2Zmc2V0KHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCiAJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jCmluZGV4IDUxMGZiZGMuLmE0ZmE5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rY29tZWRpbGliX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMKQEAgLTQyLDEwICs0MiwxMCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkga2VybmVsIGxpYnJhcnkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotY29tZWRpX3QgKmNvbWVkaV9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQordm9pZCAqY29tZWRpX29wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvOwotCWNvbWVkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGludCBtaW5vcjsKIAogCWlmIChzdHJuY21wKGZpbGVuYW1lLCAiL2Rldi9jb21lZGkiLCAxMSkgIT0gMCkKQEAgLTU3LDQxICs1Nyw0MSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWlmKGRldl9maWxlX2luZm8gPT0gTlVMTCkKKwlpZiAoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKLQlpZihkZXYgPT0gTlVMTCB8fCAhZGV2LT5hdHRhY2hlZCkKKwlpZiAoZGV2ID09IE5VTEwgfHwgIWRldi0+YXR0YWNoZWQpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChkZXYtPmRyaXZlci0+bW9kdWxlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gKGNvbWVkaV90ICopIGRldjsKKwlyZXR1cm4gKHZvaWQgKikgZGV2OwogfQogCi1jb21lZGlfdCAqY29tZWRpX29wZW5fb2xkKHVuc2lnbmVkIGludCBtaW5vcikKK3ZvaWQgKmNvbWVkaV9vcGVuX29sZCh1bnNpZ25lZCBpbnQgbWlub3IpCiB7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvOwotCWNvbWVkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCiAJaWYgKG1pbm9yID49IENPTUVESV9OVU1fTUlOT1JTKQogCQlyZXR1cm4gTlVMTDsKIAogCWRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWlmKGRldl9maWxlX2luZm8gPT0gTlVMTCkKKwlpZiAoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKLQlpZihkZXYgPT0gTlVMTCB8fCAhZGV2LT5hdHRhY2hlZCkKKwlpZiAoZGV2ID09IE5VTEwgfHwgIWRldi0+YXR0YWNoZWQpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIChjb21lZGlfdCAqKSBkZXY7CisJcmV0dXJuICh2b2lkICopIGRldjsKIH0KIAotaW50IGNvbWVkaV9jbG9zZShjb21lZGlfdCAqIGQpCitpbnQgY29tZWRpX2Nsb3NlKHZvaWQgKmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAltb2R1bGVfcHV0KGRldi0+ZHJpdmVyLT5tb2R1bGUpOwogCkBAIC0xMTMsMTkgKzExMywxOSBAQAogCXJldHVybiAidW5rbm93biBlcnJvciI7CiB9CiAKLWludCBjb21lZGlfZmlsZW5vKGNvbWVkaV90ICogZCkKK2ludCBjb21lZGlfZmlsZW5vKHZvaWQgKmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAkvKiByZXR1cm4gc29tZXRoaW5nIHJhbmRvbSAqLwogCXJldHVybiBkZXYtPm1pbm9yOwogfQogCi1pbnQgY29tZWRpX2NvbW1hbmQoY29tZWRpX3QgKiBkLCBjb21lZGlfY21kICogY21kKQoraW50IGNvbWVkaV9jb21tYW5kKHZvaWQgKmQsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCXVuc2lnbmVkIHJ1bmZsYWdzOwogCiAJaWYgKGNtZC0+c3ViZGV2ID49IGRldi0+bl9zdWJkZXZpY2VzKQpAQCAtMTYxLDEwICsxNjEsMTAgQEAKIAlyZXR1cm4gcy0+ZG9fY21kKGRldiwgcyk7CiB9CiAKLWludCBjb21lZGlfY29tbWFuZF90ZXN0KGNvbWVkaV90ICogZCwgY29tZWRpX2NtZCAqIGNtZCkKK2ludCBjb21lZGlfY29tbWFuZF90ZXN0KHZvaWQgKmQsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCWlmIChjbWQtPnN1YmRldiA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xODMsMTAgKzE4MywxMCBAQAogICoJQ09NRURJX0lOU04KICAqCXBlcmZvcm0gYW4gaW5zdHJ1Y3Rpb24KICAqLwotaW50IGNvbWVkaV9kb19pbnNuKGNvbWVkaV90ICogZCwgY29tZWRpX2luc24gKiBpbnNuKQoraW50IGNvbWVkaV9kb19pbnNuKHZvaWQgKmQsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQgPSAwOwogCiAJaWYgKGluc24tPmluc24gJiBJTlNOX01BU0tfU1BFQ0lBTCkgewpAQCAtMjU2LDcgKzI1Niw4IEBACiAKIAkJLyogWFhYIGNoZWNrIGxvY2sgKi8KIAotCQlpZiAoKHJldCA9IGNoZWNrX2NoYW5saXN0KHMsIDEsICZpbnNuLT5jaGFuc3BlYykpIDwgMCkgeworCQlyZXQgPSBjaGVja19jaGFubGlzdChzLCAxLCAmaW5zbi0+Y2hhbnNwZWMpOworCQlpZiAocmV0IDwgMCkgewogCQkJcnRfcHJpbnRrKCJiYWQgY2hhbnNwZWNcbiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CkBAIC0zMjMsMTYgKzMyNCwxNiBAQAogCS0gbG9jayB3aGlsZSBzdWJkZXZpY2UgYmVpbmcgcHJvZ3JhbW1lZAogCiAqLwotaW50IGNvbWVkaV9sb2NrKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfbG9jayh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzLT5zcGluX2xvY2ssIGZsYWdzKTsKQEAgLTM2NiwxNyArMzY3LDE3IEBACiAJCW5vbmUKIAogKi8KLWludCBjb21lZGlfdW5sb2NrKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfdW5sb2NrKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IHJldDsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTQxOCwxNSArNDE5LDE1IEBACiAJCW5vdGhpbmcKIAogKi8KLWludCBjb21lZGlfY2FuY2VsKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfY2FuY2VsKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKHMtPmxvY2sgJiYgcy0+bG9jayAhPSBkKQpAQCAtNDQzLDEzICs0NDQsMTUgQEAKIAlpZiAoIXMtPmNhbmNlbCB8fCAhcy0+YXN5bmMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChyZXQgPSBzLT5jYW5jZWwoZGV2LCBzKSkpCisJcmV0ID0gcy0+Y2FuY2VsKGRldiwgcyk7CisKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9SVAotCWlmIChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhzKSAmIFNSRl9SVCkgeworCWlmIChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhzKSAmIFNSRl9SVCkKIAkJY29tZWRpX3N3aXRjaF90b19ub25fcnQoZGV2KTsKLQl9CisKICNlbmRpZgogCWNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHMsIFNSRl9SVU5OSU5HIHwgU1JGX1JULCAwKTsKIAlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CkBAIC00NjEsMTYgKzQ2NCwxNiBAQAogLyoKICAgIHJlZ2lzdHJhdGlvbiBvZiBjYWxsYmFjayBmdW5jdGlvbnMKICAqLwotaW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX3JlZ2lzdGVyX2NhbGxiYWNrKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCAoKmNiKSAodW5zaWduZWQgaW50LCB2b2lkICopLCB2b2lkICphcmcpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCi0JaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykgeworCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CiAKIAlhc3luYyA9IHMtPmFzeW5jOwpAQCAtNDk4LDE1ICs1MDEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvbWVkaV9wb2xsKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfcG9sbCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTUyNSwyMiArNTI4LDIxIEBACiB9CiAKIC8qIFdBUk5JTkc6IG5vdCBwb3J0YWJsZSAqLwotaW50IGNvbWVkaV9tYXAoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB2b2lkICpwdHIpCitpbnQgY29tZWRpX21hcCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB2b2lkICpwdHIpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKCFzLT5hc3luYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocHRyKSB7CisJaWYgKHB0cikKIAkJKigodm9pZCAqKilwdHIpID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKLQl9CiAKIAkvKiBYWFggbm8gcmVmZXJlbmNlIGNvdW50aW5nICovCiAKQEAgLTU0OCwxNCArNTUwLDE0IEBACiB9CiAKIC8qIFdBUk5JTkc6IG5vdCBwb3J0YWJsZSAqLwotaW50IGNvbWVkaV91bm1hcChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX3VubWFwKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKCFzLT5hc3luYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rc3ltcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tzeW1zLmMKaW5kZXggNzZiNDUwNi4uM2RiODZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tzeW1zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tzeW1zLmMKQEAgLTQwLDggKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSAweDAyMDIwMAotCiAvKiBmdW5jdGlvbnMgc3BlY2lmaWMgdG8ga2NvbWVkaWxpYiAqLwogCiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayk7CkBAIC0xNDAsNSArMTM4LDMgQEAKIAogLyogYWxwaGEgKi8KIC8vRVhQT1JUX1NZTUJPTChjb21lZGlfc2V0X2dsb2JhbF9vb3JfYmVoYXZpb3IpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcGNpX2lkcy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wY2lfaWRzLmgKaW5kZXggYzYxYmE5MC4uZDk3OWFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wY2lfaWRzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wY2lfaWRzLmgKQEAgLTI4LDQgKzI4LDQgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFOQ09NX0dQSUIJMHgzMzAyCiAjZW5kaWYKIAotI2VuZGlmIC8vIF9fQ09NUEFUX0xJTlVYX1BDSV9JRFNfSAorI2VuZGlmIC8qIF9fQ09NUEFUX0xJTlVYX1BDSV9JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3Byb2MuYwppbmRleCA1YTJiNzJkLi4zNmFlMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3Byb2MuYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAjZGVmaW5lIF9fTk9fVkVSU0lPTl9fCiAjaW5jbHVkZSAiY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotLy8jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisvKiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+ICovCiAKIGludCBjb21lZGlfcmVhZF9wcm9jbWVtKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW4sCiAJaW50ICplb2YsIHZvaWQgKmRhdGEpOwogCi1leHRlcm4gY29tZWRpX2RyaXZlciAqY29tZWRpX2RyaXZlcnM7CitleHRlcm4gc3RydWN0IGNvbWVkaV9kcml2ZXIgKmNvbWVkaV9kcml2ZXJzOwogCiBpbnQgY29tZWRpX3JlYWRfcHJvY21lbShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuLAogCWludCAqZW9mLCB2b2lkICpkYXRhKQpAQCAtNDQsNyArNDQsNyBAQAogCWludCBpOwogCWludCBkZXZpY2VzX3EgPSAwOwogCWludCBsID0gMDsKLQljb21lZGlfZHJpdmVyICpkcml2OworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2OwogCiAJbCArPSBzcHJpbnRmKGJ1ZiArIGwsCiAJCSJjb21lZGkgdmVyc2lvbiAiIENPTUVESV9SRUxFQVNFICJcbiIKQEAgLTUzLDkgKzUzLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlM7IGkrKykgewogCQlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8oaSk7Ci0JCWNvbWVkaV9kZXZpY2UgKmRldjsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAotCQlpZihkZXZfZmlsZV9pbmZvID09IE5VTEwpIGNvbnRpbnVlOworCQlpZiAoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCQlpZiAoZGV2LT5hdHRhY2hlZCkgewpAQCAtNjYsOSArNjcsOCBAQAogCQkJCWRldi0+Ym9hcmRfbmFtZSwgZGV2LT5uX3N1YmRldmljZXMpOwogCQl9CiAJfQotCWlmICghZGV2aWNlc19xKSB7CisJaWYgKCFkZXZpY2VzX3EpCiAJCWwgKz0gc3ByaW50ZihidWYgKyBsLCAibm8gZGV2aWNlc1xuIik7Ci0JfQogCiAJZm9yIChkcml2ID0gY29tZWRpX2RyaXZlcnM7IGRyaXY7IGRyaXYgPSBkcml2LT5uZXh0KSB7CiAJCWwgKz0gc3ByaW50ZihidWYgKyBsLCAiJXM6XG4iLCBkcml2LT5kcml2ZXJfbmFtZSk7CkBAIC03Nyw5ICs3Nyw4IEBACiAJCQkJKihjaGFyICoqKSgoY2hhciAqKWRyaXYtPmJvYXJkX25hbWUgKwogCQkJCQlpICogZHJpdi0+b2Zmc2V0KSk7CiAJCX0KLQkJaWYgKCFkcml2LT5udW1fbmFtZXMpIHsKKwkJaWYgKCFkcml2LT5udW1fbmFtZXMpCiAJCQlsICs9IHNwcmludGYoYnVmICsgbCwgIiAlc1xuIiwgZHJpdi0+ZHJpdmVyX25hbWUpOwotCQl9CiAJfQogCiAJcmV0dXJuIGw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3JhbmdlLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3JhbmdlLmMKaW5kZXggNjFkYzNjZC4uYWMyMDBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9yYW5nZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcmFuZ2UuYwpAQCAtMjQsMTIgKzI0LDEyIEBACiAjaW5jbHVkZSAiY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMTAgPSB7IDEsIHtCSVBfUkFOR0UoMTApfSB9OwotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyNSA9IHsgMSwge0JJUF9SQU5HRSg1KX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjJfNSA9IHsgMSwge0JJUF9SQU5HRSgyLjUpfSB9OwotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjEwID0geyAxLCB7VU5JX1JBTkdFKDEwKX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXI1ID0geyAxLCB7VU5JX1JBTkdFKDUpfSB9OwotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmtub3duID0geyAxLCB7ezAsIDEwMDAwMDAsIFVOSVRfbm9uZX19IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMTAgPSB7IDEsIHtCSVBfUkFOR0UoMTApfSB9OworY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjUgPSB7IDEsIHtCSVBfUkFOR0UoNSl9IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMl81ID0geyAxLCB7QklQX1JBTkdFKDIuNSl9IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjEwID0geyAxLCB7VU5JX1JBTkdFKDEwKX0gfTsKK2NvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyNSA9IHsgMSwge1VOSV9SQU5HRSg1KX0gfTsKK2NvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3Vua25vd24gPSB7IDEsIHt7MCwgMTAwMDAwMCwgVU5JVF9ub25lfX0gfTsKIAogLyoKICAgIAlDT01FRElfUkFOR0VJTkZPCkBAIC00MiwxNiArNDIsMTYgQEAKIAkJcmFuZ2UgaW5mbyBzdHJ1Y3R1cmUKIAogCXdyaXRlczoKLQkJbiBjb21lZGlfa3JhbmdlIHN0cnVjdHVyZXMgdG8gcmFuZ2VpbmZvLT5yYW5nZV9wdHIKKwkJbiBzdHJ1Y3QgY29tZWRpX2tyYW5nZSBzdHJ1Y3R1cmVzIHRvIHJhbmdlaW5mby0+cmFuZ2VfcHRyCiAqLwotaW50IGRvX3JhbmdlaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfcmFuZ2VpbmZvICogYXJnKQoraW50IGRvX3JhbmdlaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbyAqYXJnKQogewotCWNvbWVkaV9yYW5nZWluZm8gaXQ7CisJc3RydWN0IGNvbWVkaV9yYW5nZWluZm8gaXQ7CiAJaW50IHN1YmQsIGNoYW47Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqbHI7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqbHI7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJml0LCBhcmcsIHNpemVvZihjb21lZGlfcmFuZ2VpbmZvKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9yYW5nZWluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJc3ViZCA9IChpdC5yYW5nZV90eXBlID4+IDI0KSAmIDB4ZjsKIAljaGFuID0gKGl0LnJhbmdlX3R5cGUgPj4gMTYpICYgMHhmZjsKQEAgLTc4LDE3ICs3OCwxNyBAQAogCX0KIAogCWlmIChjb3B5X3RvX3VzZXIoaXQucmFuZ2VfcHRyLCBsci0+cmFuZ2UsCi0JCQlzaXplb2YoY29tZWRpX2tyYW5nZSkgKiBsci0+bGVuZ3RoKSkKKwkJCXNpemVvZihzdHJ1Y3QgY29tZWRpX2tyYW5nZSkgKiBsci0+bGVuZ3RoKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhcmVmX2ludmFsaWQoY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCBjaGFuc3BlYykKK3N0YXRpYyBpbnQgYXJlZl9pbnZhbGlkKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgY2hhbnNwZWMpCiB7CiAJdW5zaWduZWQgaW50IGFyZWY7CiAKLQkvLyBkaXNhYmxlIHJlcG9ydGluZyBpbnZhbGlkIGFyZWZzLi4uIG1heWJlIHNvbWVkYXkKKwkvKiAgZGlzYWJsZSByZXBvcnRpbmcgaW52YWxpZCBhcmVmcy4uLiBtYXliZSBzb21lZGF5ICovCiAJcmV0dXJuIDA7CiAKIAlhcmVmID0gQ1JfQVJFRihjaGFuc3BlYyk7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGVhY2ggZWxlbWVudCBpbiBhIGNoYW5uZWwvZ2FpbiBsaXN0IHRvIG1ha2UKICAgIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KICovCi1pbnQgY2hlY2tfY2hhbmxpc3QoY29tZWRpX3N1YmRldmljZSAqIHMsIGludCBuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0KQoraW50IGNoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCkKIHsKIAlpbnQgaTsKIAlpbnQgY2hhbjsKQEAgLTEzNSw5ICsxMzUsOCBAQAogCQkJCQlpLCBjaGFubGlzdFtpXSwgcy0+bl9jaGFuLAogCQkJCQlzLT5yYW5nZV90YWJsZS0+bGVuZ3RoKTsKICNpZiAwCi0JCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAJCQkJCXByaW50aygiWyVkXT0weCUwOHhcbiIsIGksIGNoYW5saXN0W2ldKTsKLQkJCQl9CiAjZW5kaWYKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnQuYwppbmRleCAzODViODFiLi5lOWY1Nzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9ydC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJIGlycXJldHVybl90KCpoYW5kbGVyKSAoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1NfQVJHKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNvbnN0IGNoYXIgKmRldmljZTsKLQljb21lZGlfZGV2aWNlICpkZXZfaWQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldl9pZDsKIH07CiAKIHN0YXRpYyBpbnQgY29tZWRpX3J0X2dldF9pcnEoc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0ICppdCk7CkBAIC02Nyw3ICs2Nyw3IEBACiAKIGludCBjb21lZGlfcmVxdWVzdF9pcnEodW5zaWduZWQgaXJxLCBpcnFyZXR1cm5fdCgqaGFuZGxlcikgKGludCwKIAkJdm9pZCAqUFRfUkVHU19BUkcpLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZpY2UsCi0JY29tZWRpX2RldmljZSAqIGRldl9pZCkKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2X2lkKQogewogCXN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQ7CiAJaW50IHJldDsKQEAgLTc4LDE1ICs3OCwxNSBAQAogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLCB1bnNoYXJlZF9mbGFncywgZGV2aWNlLCBkZXZfaWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCS8vIHdlIGZhaWxlZCwgc28gZmFsbCBiYWNrIG9uIGFsbG93aW5nIHNoYXJlZCBpbnRlcnJ1cHQgKHdoaWNoIHdlIHdvbid0IGV2ZXIgbWFrZSBSVCkKKwkJLyogIHdlIGZhaWxlZCwgc28gZmFsbCBiYWNrIG9uIGFsbG93aW5nIHNoYXJlZCBpbnRlcnJ1cHQgKHdoaWNoIHdlIHdvbid0IGV2ZXIgbWFrZSBSVCkgKi8KIAkJaWYgKGZsYWdzICYgSVJRRl9TSEFSRUQpIHsKIAkJCXJ0X3ByaW50awogCQkJCSgiY29tZWRpOiBjYW5ub3QgZ2V0IHVuc2hhcmVkIGludGVycnVwdCwgd2lsbCBub3QgdXNlIFJUIGludGVycnVwdHMuXG4iKTsKIAkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgZmxhZ3MsIGRldmljZSwgZGV2X2lkKTsKIAkJfQotCQlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KKwogCX0gZWxzZSB7CiAJCWl0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaXQpCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21lZGlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgY29tZWRpX2RldmljZSAqIGRldl9pZCkKK3ZvaWQgY29tZWRpX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXZfaWQpCiB7CiAJc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0ICppdDsKIApAQCAtMTIxLDcgKzEyMSw3IEBACiAJY29tZWRpX2lycXNbaXJxXSA9IE5VTEw7CiB9CiAKLWludCBjb21lZGlfc3dpdGNoX3RvX3J0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitpbnQgY29tZWRpX3N3aXRjaF90b19ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGNvbWVkaV9zd2l0Y2hfdG9fbm9uX3J0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCit2b2lkIGNvbWVkaV9zd2l0Y2hfdG9fbm9uX3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0ICppdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCh3YWl0X3F1ZXVlX2hlYWRfdCAqKSBhcmcyKTsKIH0KIAotdm9pZCBjb21lZGlfcnRfcGVuZF93YWtldXAod2FpdF9xdWV1ZV9oZWFkX3QgKiBxKQordm9pZCBjb21lZGlfcnRfcGVuZF93YWtldXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEpCiB7CiAJcnRfcGVuZF9jYWxsKHdha2VfdXBfaW50X2hhbmRsZXIsIDAsIHEpOwogfQpAQCAtMTgwLDcgKzE4MCw3IEBACiAKICNpZm5kZWYgSEFWRV9SVF9SRVFVRVNUX0lSUV9XSVRIX0FSRwogI2RlZmluZSBERUNMQVJFX1ZPSURfSVJRKGlycSkgXAotc3RhdGljIHZvaWQgaGFuZGxlX3ZvaWRfaXJxXyAjIyBpcnEgKHZvaWQpeyBoYW5kbGVfdm9pZF9pcnEoaXJxKTt9CitzdGF0aWMgdm9pZCBoYW5kbGVfdm9pZF9pcnFfICMjIGlycSAodm9pZCl7IGhhbmRsZV92b2lkX2lycShpcnEpOyB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV92b2lkX2lycShpbnQgaXJxKQogewpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCXJldHVybjsKIAl9CiAJaXQtPmhhbmRsZXIoaXJxLCBpdC0+ZGV2X2lkIFBUX1JFR1NfTlVMTCk7Ci0JcnRfZW5hYmxlX2lycShpcnEpOwkvL25lZWRlZCBieSBydGFpLWFkZW9zLCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBodXJ0IGVhcmxpZXIgdmVyc2lvbnMKKwlydF9lbmFibGVfaXJxKGlycSk7CS8qIG5lZWRlZCBieSBydGFpLWFkZW9zLCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBodXJ0IGVhcmxpZXIgdmVyc2lvbnMgKi8KIH0KIAogREVDTEFSRV9WT0lEX0lSUSgwKTsKQEAgLTIyMCw4ICsyMjAsNyBAQAogREVDTEFSRV9WT0lEX0lSUSgyMik7CiBERUNMQVJFX1ZPSURfSVJRKDIzKTsKIAotdHlwZWRlZiB2b2lkICgqVl9GUF9WKSAodm9pZCk7Ci1zdGF0aWMgVl9GUF9WIGhhbmRsZV92b2lkX2lycV9wdHJzW10gPSB7CitzdGF0aWMgdm9pZCBoYW5kbGVfdm9pZF9pcnFfcHRyc1tdID0gewogCWhhbmRsZV92b2lkX2lycV8wLAogCWhhbmRsZV92b2lkX2lycV8xLAogCWhhbmRsZV92b2lkX2lycV8yLApAQCAtNDAyLDExICs0MDEsMTEgQEAKIAogdm9pZCBjb21lZGlfcnRfaW5pdCh2b2lkKQogewotCS8vcnRfcGVuZF90cV9pbml0KCk7CisJLyogcnRfcGVuZF90cV9pbml0KCk7ICovCiB9CiAKIHZvaWQgY29tZWRpX3J0X2NsZWFudXAodm9pZCkKIHsKLQkvL3J0X3BlbmRfdHFfY2xlYW51cCgpOworCS8qIHJ0X3BlbmRfdHFfY2xlYW51cCgpOyAqLwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0X3BlbmRfdHEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnRfcGVuZF90cS5jCmluZGV4IDk5NWYwNzYuLmY5ZGZkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnRfcGVuZF90cS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnRfcGVuZF90cS5jCkBAIC0zLDcgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlICJjb21lZGlkZXYuaCIJLy8gZm9yIHJ0IHNwaW5sb2NrcworI2luY2x1ZGUgImNvbWVkaWRldi5oIgkvKiBmb3IgcnQgc3BpbmxvY2tzICovCiAjaW5jbHVkZSAicnRfcGVuZF90cS5oIgogI2lmZGVmIENPTkZJR19DT01FRElfUlRBSQogI2luY2x1ZGUgPHJ0YWkuaD4KQEAgLTI1LDkgKzI1LDkgQEAKIHZvbGF0aWxlIHN0YXRpYyBzdHJ1Y3QgcnRfcGVuZF90cSAqdm9sYXRpbGUgcnRfcGVuZF9oZWFkID0gcnRfcGVuZF90cSwKIAkqdm9sYXRpbGUgcnRfcGVuZF90YWlsID0gcnRfcGVuZF90cTsKIGludCBydF9wZW5kX3RxX2lycSA9IDA7Ci1zcGlubG9ja190IHJ0X3BlbmRfdHFfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK0RFRklORV9TUElOTE9DSyhydF9wZW5kX3RxX2xvY2spOwogCi0vLyBXQVJOSU5HOiBmb2xsb3dpbmcgY29kZSBub3QgY2hlY2tlZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyB5ZXQuCisvKiBXQVJOSU5HOiBmb2xsb3dpbmcgY29kZSBub3QgY2hlY2tlZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyB5ZXQuICovCiAjZGVmaW5lIElOQ19DSVJDVUxBUl9QVFIocHRyLGJlZ2luLHNpemUpIGRvIHtpZigrKyhwdHIpPj0oYmVnaW4pKyhzaXplKSkgKHB0cik9KGJlZ2luKTsgfSB3aGlsZSgwKQogI2RlZmluZSBERUNfQ0lSQ1VMQVJfUFRSKHB0cixiZWdpbixzaXplKSBkbyB7aWYoLS0ocHRyKTwoYmVnaW4pKSAocHRyKT0oYmVnaW4pKyhzaXplKS0xOyB9IHdoaWxlKDApCiAKQEAgLTQyLDcgKzQyLDcgQEAKIAljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnJ0X3BlbmRfdHFfbG9jaywgZmxhZ3MpOwogCUlOQ19DSVJDVUxBUl9QVFIocnRfcGVuZF9oZWFkLCBydF9wZW5kX3RxLCBSVF9QRU5EX1RRX1NJWkUpOwogCWlmIChydF9wZW5kX2hlYWQgPT0gcnRfcGVuZF90YWlsKSB7Ci0JCS8vIG92ZXJmbG93LCB3ZSBqdXN0IHJlZnVzZSB0byB0YWtlIHRoaXMgcmVxdWVzdAorCQkvKiBvdmVyZmxvdywgd2UganVzdCByZWZ1c2UgdG8gdGFrZSB0aGlzIHJlcXVlc3QgKi8KIAkJREVDX0NJUkNVTEFSX1BUUihydF9wZW5kX2hlYWQsIHJ0X3BlbmRfdHEsIFJUX1BFTkRfVFFfU0laRSk7CiAJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZydF9wZW5kX3RxX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4ZDM0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZwpAQCAtMCwwICsxLDY3IEBACitjb25maWcgRFNUCisJdHJpc3RhdGUgIkRpc3RyaWJ1dGVkIHN0b3JhZ2UiCisJZGVwZW5kcyBvbiBORVQgJiYgQ1JZUFRPICYmIFNZU0ZTICYmIEJMS19ERVYKKwlzZWxlY3QgQ09OTkVDVE9SCisJLS0taGVscC0tLQorCURTVCBpcyBhIG5ldHdvcmsgYmxvY2sgZGV2aWNlIHN0b3JhZ2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9yZ2FuaXplCisJZXhwb3J0ZWQgc3RvcmFnZSBvbiB0aGUgcmVtb3RlIG5vZGVzIGludG8gdGhlIGxvY2FsIGJsb2NrIGRldmljZS4KKworCURTVCB3b3JrcyBvbiB0b3Agb2YgYW55IG5ldHdvcmsgbWVkaWEgYW5kIHByb3RvY29sOyBpdCBpcyBqdXN0IGEgbWF0dGVyCisJb2YgY29uZmlndXJhdGlvbiB1dGlsaXR5IHRvIHVuZGVyc3RhbmQgdGhlIGNvcnJlY3QgYWRkcmVzc2VzLiBUaGUgbW9zdAorCWNvbW1vbiBleGFtcGxlIGlzIFRDUCBvdmVyIElQLCB3aGljaCBhbGxvd3MgdG8gcGFzcyB0aHJvdWdoIGZpcmV3YWxscyBhbmQKKwljcmVhdGUgcmVtb3RlIGJhY2t1cCBzdG9yYWdlIGluIGEgZGlmZmVyZW50IGRhdGFjZW50ZXIuIERTVCByZXF1aXJlcworCXNpbmdsZSBwb3J0IHRvIGJlIGVuYWJsZWQgb24gdGhlIGV4cG9ydGluZyBub2RlIGFuZCBvdXRnb2luZyBjb25uZWN0aW9ucworCW9uIHRoZSBsb2NhbCBub2RlLgorCisJRFNUIHdvcmtzIHdpdGggaW4ta2VybmVsIGNsaWVudCBhbmQgc2VydmVyLCB3aGljaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieQorCWVsaW1pbmF0aW5nIHVubmVkZWQgZGF0YSBjb3BpZXMgYW5kIGJ5IG5vdCBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24KKwlvZiB0aGUgZXh0ZXJuYWwgSU8gY29tcG9uZW50cy4gSXQgcmVxdWlyZXMgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gdXRpbGl0eQorCXRob3VnaC4KKworCURTVCB1c2VzIHRyYW5zYWN0aW9uIG1vZGVsLCB3aGVuIGVhY2ggc3RvcmUgaGFzIHRvIGJlIGV4cGxpY2l0bHkgYWNrZWQKKwlmcm9tIHRoZSByZW1vdGUgbm9kZSB0byBiZSBjb25zaWRlcmVkIGFzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiBUaGVyZQorCW1heSBiZSBsb3RzIG9mIGluLWZsaWdodCB0cmFuc2FjdGlvbnMuIFdoZW4gcmVtb3RlIGhvc3QgZG9lcyBub3QgYWNrCisJdGhlIHRyYW5zYWN0aW9uIGl0IHdpbGwgYmUgcmVzZW50IHByZWRlZmluZWQgbnVtYmVyIG9mIHRpbWVzIHdpdGggc3BlY2lmaWVkCisJdGltZW91dHMgYmV0d2VlbiB0aGVtLiBBbGwgdGhvc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlLiBUcmFuc2FjdGlvbnMKKwlhcmUgbWFya2VkIGFzIGZhaWxlZCBhZnRlciBhbGwgcmVzZW5kcyBjb21wbGV0ZSB1bnN1Y2Nlc3NmdWxseTsgaGF2aW5nCisJbG9uZyBlbm91Z2ggcmVzZW5kIHRpbWVvdXQgYW5kL29yIGxhcmdlIG51bWJlciBvZiByZXNlbmRzIGFsbG93cyBub3QgdG8KKwlyZXR1cm4gZXJyb3IgdG8gdGhlIGhpZ2hlciAoRlMgdXN1YWxseSkgbGF5ZXIgaW4gY2FzZSBvZiBzaG9ydCBuZXR3b3JrCisJcHJvYmxlbXMgb3IgcmVtb3RlIG5vZGUgb3V0YWdlcy4gSW4gY2FzZSBvZiBuZXR3b3JrIFJBSUQgc2V0dXAgdGhpcyBtZWFucworCXRoYXQgc3RvcmFnZSB3aWxsIG5vdCBkZWdyYWRlIHVudGlsIHRyYW5zYWN0aW9ucyBhcmUgbWFya2VkIGFzIGZhaWxlZCwgYW5kCisJdGh1cyB3aWxsIG5vdCBmb3JjZSBjaGVja3N1bSByZWNhbGN1bGF0aW9uIGFuZCBkYXRhIHJlYnVpbGQuIEluIGNhc2Ugb2YKKwljb25uZWN0aW9uIGZhaWx1cmUgRFNUIHdpbGwgdHJ5IHRvIHJlY29ubmVjdCB0byB0aGUgcmVtb3RlIG5vZGUgYXV0b21hdGljYWxseS4KKwlEU1Qgc2VuZHMgcGluZyBjb21tYW5kcyBhdCBpZGxlIHRpbWUgdG8gZGV0ZWN0IGlmIHJlbW90ZSBub2RlIGlzIGFsaXZlLgorCisJQmVjYXVzZSBvZiB0cmFuc2FjdGlvbmFsIG1vZGVsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB6ZXJvLWNvcHkgc2VuZGluZworCXdpdGhvdXQgd29ycnkgb2YgZGF0YSBjb3JydXB0aW9uICh3aGljaCBpbiB0dXJuIGNvdWxkIGJlIGRldGVjdGVkIGJ5IHRoZQorCXN0cm9uZyBjaGVja3N1bXMgdGhvdWdoKS4KKworCURTVCBtYXkgZnVsbHkgZW5jcnlwdCB0aGUgZGF0YSBjaGFubmVsIGluIGNhc2Ugb2YgdW50cnVzdGVkIGNoYW5uZWwgYW5kIGltcGxlbWVudAorCXN0cm9uZyBjaGVja3N1bSBvZiB0aGUgdHJhbnNmZXJyZWQgZGF0YS4gSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIGFsZ29yaXRobXMKKwlhbmQgY3J5cHRvIGtleXM7IHRoZXkgc2hvdWxkIG1hdGNoIG9uIGJvdGggc2lkZXMgb2YgdGhlIG5ldHdvcmsgY2hhbm5lbC4KKwlDcnlwdG8gcHJvY2Vzc2luZyBkb2VzIG5vdCBpbnRyb2R1Y2Ugbm90aWNlYmxlIHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBzaW5jZSBEU1QKKwl1c2VzIGNvbmZpZ3VyYWJsZSBwb29sIG9mIHRocmVhZHMgdG8gcGVyZm9ybSBjcnlwdG8gcHJvY2Vzc2luZy4KKworCURTVCB1dGlsaXplcyBtZW1vcnkgcG9vbCBtb2RlbCBvZiBhbGwgaXRzIHRyYW5zYWN0aW9uIGFsbG9jYXRpb25zIChpdCBpcyB0aGUKKwlvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiBvbiB0aGUgY2xpZW50KSBhbmQgc2VydmVyIGFsbG9jYXRpb25zIChiaW8gcG9vbHMsCisJd2hpbGUgcGFnZXMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzbGFiKS4KKworCUF0IHN0YXJ0dXAgRFNUIHBlcmZvcm1zIGEgc2ltcGxlIG5lZ290aWF0aW9uIHdpdGggdGhlIGV4cG9ydCBub2RlIHRvIGRldGVybWluZQorCWFjY2VzcyBwZXJtaXNzaW9ucyBhbmQgc2l6ZSBvZiB0aGUgZXhwb3J0ZWQgc3RvcmFnZS4gSXQgY2FuIGJlIGV4dGVuZGVkIGlmCisJbmV3IHBhcmFtZXRlcnMgc2hvdWxkIGJlIGF1dG9uZWdvdGlhdGVkLgorCisJRFNUIGNhcnJpZXMgYmxvY2sgSU8gZmxhZ3MgaW4gdGhlIHByb3RvY29sLCB3aGljaCBhbGxvd3MgdG8gdHJhbnNwYXJlbnRseSBpbXBsZW1lbnQKKwliYXJyaWVycyBhbmQgc3luYy9mbHVzaCBvcGVyYXRpb25zLiBUaG9zZSBmbGFncyBhcmUgdXNlZCBpbiB0aGUgZXhwb3J0IG5vZGUgd2hlcmUKKwlJTyBhZ2FpbnN0IHRoZSBsb2NhbCBzdG9yYWdlIGlzIHBlcmZvcm1lZCwgd2hpY2ggbWVhbnMgdGhhdCBzeW5jIHdyaXRlIHdpbGwgYmUgc3luYworCW9uIHRoZSByZW1vdGUgbm9kZSB0b28sIHdoaWNoIGluIHR1cm4gaW1wcm92ZXMgZGF0YSBpbnRlZ3JpdHkgYW5kIGltcHJvdmVkIHJlc2lzdGFuY2UKKwl0byBlcnJvcnMgYW5kIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgcG93ZXIgb3V0YWdlcyBvciBzdG9yYWdlIGRhbWFnZXMuCisKKwlIb21lcGFnZTogaHR0cDovL3d3dy5pb3JlbWFwLm5ldC9wcm9qZWN0cy9kc3QKKwlVc2Vyc3BhY2UgY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCB0aGUgbGF0ZXN0IHJlbGVhc2VzOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L2FyY2hpdmUvZHN0LworCitjb25maWcgRFNUX0RFQlVHCisJYm9vbCAiRFNUIGRlYnVnIgorCWRlcGVuZHMgb24gRFNUCisJLS0taGVscC0tLQorCVRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIEhFQVZZIGRlYnVnZ2luZyBvZiB0aGUgRFNULgorCVR1cm4gaXQgb24gT05MWSBpZiB5b3UgaGF2ZSB0byBkZWJ1ZyBzb21lIHJlYWxseSBvYnNjdXJlIHByb2JsZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThiMGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19EU1QpICs9IG5zdC5vCisKK25zdC15IDo9IGRjb3JlLm8gc3RhdGUubyBleHBvcnQubyB0aHJlYWRfcG9vbC5vIGNyeXB0by5vIHRyYW5zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTBmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCkBAIC0wLDAgKzEsNzMxIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZHN0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qCisgKiBUcmlja3kgYmFzdGFyZCwgYnV0IElWIGNhbiBiZSBtb3JlIGNvbXBsZXggd2l0aCB0aW1lLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGRzdF9nZW5faXYoc3RydWN0IGRzdF90cmFucyAqdCkKK3sKKwlyZXR1cm4gdC0+Z2VuOworfQorCisvKgorICogQ3J5cHRvIG1hY2hpbmVyeTogaGFzaC9jaXBoZXIgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGNyeXB0byBjb250cm9scy4KKyAqLworc3RhdGljIHN0cnVjdCBjcnlwdG9faGFzaCAqZHN0X2luaXRfaGFzaChzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCwgdTggKmtleSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaDsKKworCWhhc2ggPSBjcnlwdG9fYWxsb2NfaGFzaChjdGwtPmhhc2hfYWxnbywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihoYXNoKSkgeworCQllcnIgPSBQVFJfRVJSKGhhc2gpOworCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGhhc2ggJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGN0bC0+aGFzaF9hbGdvLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwljdGwtPmNyeXB0b19hdHRhY2hlZF9zaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoKTsKKworCWlmICghY3RsLT5oYXNoX2tleXNpemUpCisJCXJldHVybiBoYXNoOworCisJZXJyID0gY3J5cHRvX2hhc2hfc2V0a2V5KGhhc2gsIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzZXQga2V5IGZvciBoYXNoICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJcmV0dXJuIGhhc2g7CisKK2Vycl9vdXRfZnJlZToKKwljcnlwdG9fZnJlZV9oYXNoKGhhc2gpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmRzdF9pbml0X2NpcGhlcihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCwgdTggKmtleSkKK3sKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlcjsKKworCWlmICghY3RsLT5jaXBoZXJfa2V5c2l6ZSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwljaXBoZXIgPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihjdGwtPmNpcGhlcl9hbGdvLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNpcGhlcikpIHsKKwkJZXJyID0gUFRSX0VSUihjaXBoZXIpOworCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGNpcGhlciAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgY3RsLT5jaXBoZXJfYWxnbywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJY3J5cHRvX2FibGtjaXBoZXJfY2xlYXJfZmxhZ3MoY2lwaGVyLCB+MCk7CisKKwllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoY2lwaGVyLCBrZXksIGN0bC0+Y2lwaGVyX2tleXNpemUpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzZXQga2V5IGZvciBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCXJldHVybiBjaXBoZXI7CisKK2Vycl9vdXRfZnJlZToKKwljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGNpcGhlcik7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworLyoKKyAqIENyeXB0byBlbmdpbmUgaGFzIGEgcG9vbCBvZiBwYWdlcyB0byBlbmNyeXB0IGRhdGEgaW50byBiZWZvcmUgc2VuZGluZworICogaXQgb3ZlciB0aGUgbmV0d29yay4gVGhpcyBwb29sIGlzIGZyZWVkL2FsbG9jYXRlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZCBkc3RfY3J5cHRvX3BhZ2VzX2ZyZWUoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpPTA7IGk8ZS0+cGFnZV9udW07ICsraSkKKwkJX19mcmVlX3BhZ2UoZS0+cGFnZXNbaV0pOworCWtmcmVlKGUtPnBhZ2VzKTsKK30KKworc3RhdGljIGludCBkc3RfY3J5cHRvX3BhZ2VzX2FsbG9jKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwgaW50IG51bSkKK3sKKwlpbnQgaTsKKworCWUtPnBhZ2VzID0ga21hbGxvYyhudW0gKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUtPnBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaT0wOyBpPG51bTsgKytpKSB7CisJCWUtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFlLT5wYWdlc1tpXSkKKwkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOworCX0KKworCWUtPnBhZ2VfbnVtID0gbnVtOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcGFnZXM6CisJd2hpbGUgKC0taSA+PSAwKQorCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7CisKKwlrZnJlZShlLT5wYWdlcyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGUuCisgKiBTZXR1cCBjaXBoZXIvaGFzaCwga2V5cywgcG9vbCBvZiB0aHJlYWRzIGFuZCBwcml2YXRlIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsID0gJm4tPmNyeXB0bzsKKworCWVyciA9IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2MoZSwgbi0+bWF4X3BhZ2VzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWUtPnNpemUgPSBQQUdFX1NJWkU7CisJZS0+ZGF0YSA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlLT5kYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOworCX0KKworCWlmIChjdGwtPmhhc2hfYWxnb1swXSkgeworCQllLT5oYXNoID0gZHN0X2luaXRfaGFzaChjdGwsIG4tPmhhc2hfa2V5KTsKKwkJaWYgKElTX0VSUihlLT5oYXNoKSkgeworCQkJZXJyID0gUFRSX0VSUihlLT5oYXNoKTsKKwkJCWUtPmhhc2ggPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwl9CisKKwlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSkgeworCQllLT5jaXBoZXIgPSBkc3RfaW5pdF9jaXBoZXIoY3RsLCBuLT5jaXBoZXJfa2V5KTsKKwkJaWYgKElTX0VSUihlLT5jaXBoZXIpKSB7CisJCQllcnIgPSBQVFJfRVJSKGUtPmNpcGhlcik7CisJCQllLT5jaXBoZXIgPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfaGFzaDoKKwljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOworZXJyX291dF9mcmVlOgorCWtmcmVlKGUtPmRhdGEpOworZXJyX291dF9mcmVlX3BhZ2VzOgorCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKK3sKKwlpZiAoZS0+aGFzaCkKKwkJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKKwlpZiAoZS0+Y2lwaGVyKQorCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGUtPmNpcGhlcik7CisJZHN0X2NyeXB0b19wYWdlc19mcmVlKGUpOworCWtmcmVlKGUtPmRhdGEpOworfQorCisvKgorICogV2FpdGluZyBmb3IgY2lwaGVyIHByb2Nlc3NpbmcgdG8gYmUgY29tcGxldGVkLgorICovCitzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uCit7CisJc3RydWN0IGNvbXBsZXRpb24JCWNvbXBsZXRlOworCWludAkJCQllcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIGRzdF9jcnlwdG9fY29tcGxldGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiAqYyA9IHJlcS0+ZGF0YTsKKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogcmVxOiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCByZXEsIGVycik7CisJYy0+ZXJyb3IgPSBlcnI7CisJY29tcGxldGUoJmMtPmNvbXBsZXRlKTsKK30KKworc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3Moc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMsCisJCXZvaWQgKml2LCBpbnQgZW5jLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiBjOworCWludCBlcnI7CisKKwlpbml0X2NvbXBsZXRpb24oJmMuY29tcGxldGUpOworCWMuZXJyb3IgPSAtRUlOUFJPR1JFU1M7CisKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCisJCQkJCWRzdF9jcnlwdG9fY29tcGxldGUsICZjKTsKKworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZ19zcmMsIHNnX2RzdCwgc2dfc3JjLT5sZW5ndGgsIGl2KTsKKworCWlmIChlbmMpCisJCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQocmVxKTsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQocmVxKTsKKworCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgLUVJTlBST0dSRVNTOgorCQljYXNlIC1FQlVTWToKKwkJCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjLmNvbXBsZXRlLAorCQkJCQl0aW1lb3V0KTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IC1FVElNRURPVVQ7CisJCQllbHNlCisJCQkJZXJyID0gYy5lcnJvcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIERTVCB1c2VzIGdlbmVyaWMgaXRlcmF0aW9uIGFwcHJvYWNoIGZvciBkYXRhIGNyeXB0byBwcm9jZXNzaW5nLgorICogU2luZ2xlIGJsb2NrIElPIHJlcXVlc3QgaXMgc3dpdGNoZWQgaW50byBhcnJheSBvZiBzY2F0dGVybGlzdHMsCisgKiB3aGljaCBhcmUgc3VibWl0dGVkIHRvIHRoZSBjcnlwdG8gcHJvY2Vzc2luZyBpdGVyYXRvci4KKyAqCisgKiBJbnB1dCBhbmQgb3V0cHV0IGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIGFyZSBkaWZmZXJlbnQsIHNpbmNlCisgKiBpbiBvdXRwdXQgY2FzZSB3ZSBjYW4gbm90IGVuY3J5cHQgZGF0YSBpbi1wbGFjZSBhbmQgbmVlZCBhCisgKiB0ZW1wb3Jhcnkgc3RvcmFnZSwgd2hpY2ggaXMgdGhlbiBiZWluZyBzZW50IHRvIHRoZSByZW1vdGUgcGVlci4KKyAqLworc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9vdXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCWludCAoKiBpdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQoreworCXN0cnVjdCBiaW9fdmVjICpidjsKKwlpbnQgZXJyLCBpOworCisJc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7CisJc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKKwkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgZS0+cGFnZXNbaV0sIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOworCisJCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9pbihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKKwkJaW50ICgqIGl0ZXJhdG9yKSAoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCit7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWludCBlcnIsIGk7CisKKwlzZ19pbml0X3RhYmxlKGUtPnNyYywgYmlvLT5iaV92Y250KTsKKwlzZ19pbml0X3RhYmxlKGUtPmRzdCwgYmlvLT5iaV92Y250KTsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJc2dfc2V0X3BhZ2UoJmUtPnNyY1tpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOworCQlzZ19zZXRfcGFnZSgmZS0+ZHN0W2ldLCBidi0+YnZfcGFnZSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7CisKKwkJZXJyID0gaXRlcmF0b3IoZSwgJmUtPmRzdFtpXSwgJmUtPnNyY1tpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzdF9jcnlwdF9pdGVyYXRvcihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYykKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOworCXU4IGl2WzMyXTsKKworCW1lbXNldChpdiwgMCwgc2l6ZW9mKGl2KSk7CisKKwltZW1jcHkoaXYsICZlLT5pdiwgc2l6ZW9mKGUtPml2KSk7CisKKwlyZXR1cm4gZHN0X2NyeXB0b19wcm9jZXNzKHJlcSwgc2dfZHN0LCBzZ19zcmMsIGl2LCBlLT5lbmMsIGUtPnRpbWVvdXQpOworfQorCitzdGF0aWMgaW50IGRzdF9jcnlwdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOworCisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QpKTsKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGUtPmNpcGhlcik7CisKKwlpZiAoZS0+ZW5jKQorCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfb3V0KGJpbywgZSwgZHN0X2NyeXB0X2l0ZXJhdG9yKTsKKwllbHNlCisJCXJldHVybiBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7Cit9CisKK3N0YXRpYyBpbnQgZHN0X2hhc2hfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCit7CisJcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZShlLT5kYXRhLCBzZ19zcmMsIHNnX3NyYy0+bGVuZ3RoKTsKK30KKworc3RhdGljIGludCBkc3RfaGFzaChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZHN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MgPSBlLT5kYXRhOworCWludCBlcnI7CisKKwlkZXNjLT50Zm0gPSBlLT5oYXNoOworCWRlc2MtPmZsYWdzID0gMDsKKworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRzdF90cmFuc19pdGVyX2luKGJpbywgZSwgZHN0X2hhc2hfaXRlcmF0b3IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBkc3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUvY2xlYW51cCBhIGNyeXB0byB0aHJlYWQuIFRoZSBvbmx5IHRoaW5nIGl0IHNob3VsZAorICogZG8gaXMgdG8gYWxsb2NhdGUgYSBwb29sIG9mIHBhZ2VzIGFzIHRlbXBvcmFyeSBzdG9yYWdlLgorICogQW5kIHRvIHNldHVwIGNpcGhlciBhbmQvb3IgaGFzaC4KKyAqLworc3RhdGljIHZvaWQgKmRzdF9jcnlwdG9fdGhyZWFkX2luaXQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBkYXRhOworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUpCisJCWdvdG8gZXJyX291dF9leGl0OworCWUtPnNyYyA9IGtjYWxsb2MoMiAqIG4tPm1heF9wYWdlcywgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWUtPnNyYykKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwllLT5kc3QgPSBlLT5zcmMgKyBuLT5tYXhfcGFnZXM7CisKKwllcnIgPSBkc3RfY3J5cHRvX2VuZ2luZV9pbml0KGUsIG4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX2FsbDsKKworCXJldHVybiBlOworCitlcnJfb3V0X2ZyZWVfYWxsOgorCWtmcmVlKGUtPnNyYyk7CitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUoZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIHZvaWQgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IHByaXZhdGU7CisKKwlkc3RfY3J5cHRvX2VuZ2luZV9leGl0KGUpOworCWtmcmVlKGUtPnNyYyk7CisJa2ZyZWUoZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGU6IHN0b3JlIGtleXMsIGNyZWF0ZSBwb29sCisgKiBvZiB0aHJlYWRzLCBpbml0aWFsaXplIGVhY2ggb25lLgorICoKKyAqIEVhY2ggdGhyZWFkIGhhcyB1bmlxdWUgSUQsIGJ1dCAwIGFuZCAxIGFyZSByZXNlcnZlZCBmb3IgcmVjZWl2aW5nIGFuZCBhY2NlcHRpbmcKKyAqIHRocmVhZHMgKGlmIGV4cG9ydCBub2RlKSwgc28gSURzIGNvdWxkIHN0YXJ0IGZyb20gMiwgYnV0IHN0YXJ0aW5nIHRoZW0KKyAqIGZyb20gMTAgYWxsb3dzIGVhc2lseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aHJlYWQgaXMgZm9yLgorICovCitpbnQgZHN0X25vZGVfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCkKK3sKKwl2b2lkICprZXkgPSAoY3RsICsgMSk7CisJaW50IGVyciA9IC1FTk9NRU0sIGk7CisJY2hhciBuYW1lWzMyXTsKKworCWlmIChjdGwtPmhhc2hfa2V5c2l6ZSkgeworCQluLT5oYXNoX2tleSA9IGttYWxsb2MoY3RsLT5oYXNoX2tleXNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIW4tPmhhc2hfa2V5KQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJCW1lbWNweShuLT5oYXNoX2tleSwga2V5LCBjdGwtPmhhc2hfa2V5c2l6ZSk7CisJfQorCisJaWYgKGN0bC0+Y2lwaGVyX2tleXNpemUpIHsKKwkJbi0+Y2lwaGVyX2tleSA9IGttYWxsb2MoY3RsLT5jaXBoZXJfa2V5c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbi0+Y2lwaGVyX2tleSkKKwkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7CisJCW1lbWNweShuLT5jaXBoZXJfa2V5LCBrZXksIGN0bC0+Y2lwaGVyX2tleXNpemUpOworCX0KKwltZW1jcHkoJm4tPmNyeXB0bywgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fY3RsKSk7CisKKwlmb3IgKGk9MDsgaTxjdGwtPnRocmVhZF9udW07ICsraSkgeworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy1jcnlwdG8tJWQiLCBuLT5uYW1lLCBpKTsKKwkJLyogVW5pcXVlIGlkcy4uLiAqLworCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKG4tPnBvb2wsIG5hbWUsIGkrMTAsCisJCQlkc3RfY3J5cHRvX3RocmVhZF9pbml0LCBkc3RfY3J5cHRvX3RocmVhZF9jbGVhbnVwLCBuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlX3RocmVhZHM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV90aHJlYWRzOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChuLT5wb29sLCBpKzEwKTsKKworCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKQorCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKKwljdGwtPmNpcGhlcl9rZXlzaXplID0gMDsKK2Vycl9vdXRfZnJlZV9oYXNoOgorCWlmIChjdGwtPmhhc2hfa2V5c2l6ZSkKKwkJa2ZyZWUobi0+aGFzaF9rZXkpOworCWN0bC0+aGFzaF9rZXlzaXplID0gMDsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGRzdF9ub2RlX2NyeXB0b19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCA9ICZuLT5jcnlwdG87CisKKwlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSB8fCBjdGwtPmhhc2hfYWxnb1swXSkgeworCQlrZnJlZShuLT5oYXNoX2tleSk7CisJCWtmcmVlKG4tPmNpcGhlcl9rZXkpOworCX0KK30KKworLyoKKyAqIFRocmFkIHBvb2wgc2V0dXAgY2FsbGJhY2suIEp1c3Qgc3RvcmVzIGEgdHJhbnNhY3Rpb24gaW4gcHJpdmF0ZSBkYXRhLgorICovCitzdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqdHJhbnMpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKKworCWUtPnByaXZhdGUgPSB0cmFuczsKKwlyZXR1cm4gMDsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGRzdF9kdW1wX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCit7CisJdTggKnA7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWludCBpOworCisJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgeworCQlkcHJpbnRrKCIlczogJWxsdS8ldTogc2l6ZTogJXUsIG9mZnNldDogJXUsIGRhdGE6ICIsCisJCQkJX19mdW5jX18sIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCisJCQkJYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7CisKKwkJcCA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJZm9yIChpPTA7IGk8YnYtPmJ2X2xlbjsgKytpKQorCQkJcHJpbnRrKCIlMDJ4ICIsIHBbaV0pOworCQlrdW5tYXAoYnYtPmJ2X3BhZ2UpOworCQlwcmludGsoIlxuIik7CisJfQorfQorI2VuZGlmCisKKy8qCisgKiBFbmNyeXB0L2hhc2ggZGF0YSBhbmQgc2VuZCBpdCB0byB0aGUgbmV0d29yay4KKyAqLworc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBiaW8gKmJpbywgdTggKmhhc2gpCit7CisJaW50IGVycjsKKworCWlmIChlLT5jaXBoZXIpIHsKKwkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAoZS0+aGFzaCkgeworCQllcnIgPSBkc3RfaGFzaChlLCBiaW8sIGhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKyNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCisJCXsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQkvKiBkc3RfZHVtcF9iaW8oYmlvKTsgKi8KKworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGhhc2g6ICIsCisJCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsCisJCQkJYmlvLT5iaV9zaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7CisJCQlmb3IgKGk9MDsgaTxjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOyArK2kpCisJCQkJCXByaW50aygiJTAyeCAiLCBoYXNoW2ldKTsKKwkJCXByaW50aygiXG4iKTsKKwkJfQorI2VuZGlmCisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2hlY2sgaWYgcmVjZWl2ZWQgZGF0YSBpcyB2YWxpZC4gRGVjaXBoZXIgaWYgaXQgaXMuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBiaW8gKmJpbywgdTggKmhhc2gsIHU4ICpyZWN2X2hhc2gpCit7CisJaW50IGVycjsKKworCWlmIChlLT5oYXNoKSB7CisJCWludCBtaXNtYXRjaDsKKworCQllcnIgPSBkc3RfaGFzaChlLCBiaW8sIGhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJbWlzbWF0Y2ggPSAhIW1lbWNtcChyZWN2X2hhc2gsIGhhc2gsCisJCQkJY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKSk7CisjaWZkZWYgQ09ORklHX0RTVF9ERUJVRworCQkvKiBkc3RfZHVtcF9iaW8oYmlvKTsgKi8KKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJpbzogJWxsdS8ldSwgcnc6ICVsdSwgaGFzaCBtaXNtYXRjaDogJWQiLAorCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCWJpb19kYXRhX2RpcihiaW8pLCBtaXNtYXRjaCk7CisJCWlmIChtaXNtYXRjaCkgeworCQkJdW5zaWduZWQgaW50IGk7CisKKwkJCXByaW50aygiLCByZWN2L2NhbGM6ICIpOworCQkJZm9yIChpPTA7IGk8Y3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKSB7CisJCQkJcHJpbnRrKCIlMDJ4LyUwMnggIiwgcmVjdl9oYXNoW2ldLCBoYXNoW2ldKTsKKwkJCX0KKwkJfQorCQlwcmludGsoIlxuIik7CisjZW5kaWYKKwkJZXJyID0gLTE7CisJCWlmIChtaXNtYXRjaCkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmIChlLT5jaXBoZXIpIHsKKwkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUaHJlYWQgcG9vbCBjYWxsYmFjayB0byBlbmNyeXB0IGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldG93b3JrLgorICovCitzdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fYWN0aW9uKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKKwlzdHJ1Y3QgZHN0X3RyYW5zICp0ID0gc2NoZWR1bGVfZGF0YTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87CisJaW50IGVycjsKKworCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBjaXBoZXI6ICVwLCBoYXNoOiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlLT5jaXBoZXIsIGUtPmhhc2gpOworCisJZS0+ZW5jID0gdC0+ZW5jOworCWUtPml2ID0gZHN0X2dlbl9pdih0KTsKKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHQtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChlLT5oYXNoKSB7CisJCQl0LT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOworCQkJdC0+Y21kLnNpemUgKz0gdC0+Y21kLmNzaXplOworCQl9CisKKwkJcmV0dXJuIGRzdF90cmFuc19zZW5kKHQpOworCX0gZWxzZSB7CisJCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKKworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgdC0+Y21kLmhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZHN0X3RyYW5zX3JlbW92ZSh0KTsKKwkJZHN0X3RyYW5zX3B1dCh0KTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXQtPmVycm9yID0gZXJyOworCWRzdF90cmFuc19wdXQodCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nIGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KKyAqLworaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOworCWludCBlcnI7CisKKwllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAorCQlkc3RfdHJhbnNfY3J5cHRvX3NldHVwLCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbiwKKwkJdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlkc3RfdHJhbnNfcHV0KHQpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDcnlwdG8gbWFjaGluZXJ5IGZvciB0aGUgZXhwb3J0IG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqYmlvKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7CisKKwllLT5wcml2YXRlID0gYmlvOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7CisJc3RydWN0IGJpbyAqYmlvID0gc2NoZWR1bGVfZGF0YTsKKwlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOworCWludCBlcnI7CisKKwlkcHJpbnRrKCIlczogZTogJXAsIGRhdGE6ICVwLCBiaW86ICVsbHUvJXUsIGRpcjogJWx1LlxuIiwgX19mdW5jX18sCisJCWUsIGUtPmRhdGEsICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOworCisJZS0+ZW5jID0gKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpOworCWUtPml2ID0gcC0+Y21kLmlkOworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7CisJCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKKworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgcC0+Y21kLmhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwl9IGVsc2UgeworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHAtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChlLT5oYXNoKSB7CisJCQlwLT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOworCQkJcC0+Y21kLnNpemUgKz0gcC0+Y21kLmNzaXplOworCQl9CisKKwkJZXJyID0gZHN0X2V4cG9ydF9zZW5kX2JpbyhiaW8pOworCX0KKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZHN0X2V4cG9ydF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJaW50IGVycjsKKworCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsCisJCWRzdF9leHBvcnRfY3J5cHRvX3NldHVwLCBkc3RfZXhwb3J0X2NyeXB0b19hY3Rpb24sCisJCWJpbywgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQyNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCkBAIC0wLDAgKzEsOTk1IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9kc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitzdGF0aWMgaW50IGRzdF9tYWpvcjsKKworc3RhdGljIERFRklORV9NVVRFWChkc3RfaGFzaF9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfaGFzaHRhYmxlOworc3RhdGljIHVuc2lnbmVkIGludCBkc3RfaGFzaHRhYmxlX3NpemUgPSAxMjg7Cittb2R1bGVfcGFyYW0oZHN0X2hhc2h0YWJsZV9zaXplLCB1aW50LCAwNjQ0KTsKKworc3RhdGljIGNoYXIgZHN0X25hbWVbXSA9ICJEZW1lbnRpYW50aW5nIGdvbGRmaXNoIjsKKworc3RhdGljIERFRklORV9JRFIoZHN0X2luZGV4X2lkcik7CitzdGF0aWMgc3RydWN0IGNiX2lkIGNuX2RzdF9pZCA9IHsgQ05fRFNUX0lEWCwgQ05fRFNUX1ZBTCB9OworCisvKgorICogRFNUIHN5c2ZzIHRyZWUgZm9yIGRldmljZSBjYWxsZWQgJ3N0b3JhZ2UnOgorICoKKyAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2UvCisgKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL3R5cGUgOiAxOTIuMTY4LjQuODA6MTAyNQorICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9zaXplIDogODAwCisgKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL25hbWUgOiBzdG9yYWdlCisgKi8KKworc3RhdGljIGludCBkc3RfZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBidXNfdHlwZSBkc3RfZGV2X2J1c190eXBlID0geworCS5uYW1lIAkJPSAiZHN0IiwKKwkubWF0Y2ggCQk9ICZkc3RfZGV2X21hdGNoLAorfTsKKworc3RhdGljIHZvaWQgZHN0X25vZGVfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOworCisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGRzdF9ub2RlX2RldiA9IHsKKwkuYnVzIAkJPSAmZHN0X2Rldl9idXNfdHlwZSwKKwkucmVsZWFzZSAJPSAmZHN0X25vZGVfcmVsZWFzZQorfTsKKworLyoKKyAqIFNldHRpbmcgc2l6ZSBvZiB0aGUgbm9kZSBhZnRlciBpdCB3YXMgY2hhbmdlZC4KKyAqLworc3RhdGljIHZvaWQgZHN0X25vZGVfc2V0X3NpemUoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisKKwlzZXRfY2FwYWNpdHkobi0+ZGlzaywgbi0+c2l6ZSA+PiA5KTsKKworCWJkZXYgPSBiZGdldF9kaXNrKG4tPmRpc2ssIDApOworCWlmIChiZGV2KSB7CisJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBuLT5zaXplKTsKKwkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CisJCWJkcHV0KGJkZXYpOworCX0KK30KKworLyoKKyAqIERpc3RyaWJ1dGVkIHN0b3JhZ2UgcmVxdWVzdCBwcm9jZXNzaW5nIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGRzdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gcS0+cXVldWVkYXRhOworCWludCBlcnIgPSAtRUlPOworCisJaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgZGlydHleV25pY2UgaGFjaywgYnV0IGlmIHdlIGNvbXBsZXRlIHRoaXMKKwkJICogb3BlcmF0aW9uIHdpdGggLUVPUE5PVFNVUFAgbGlrZSBpbnRlbmRlZCwgWEZTCisJCSAqIHdpbGwgc3R1Y2sgYW5kIGZyZWV6ZSB0aGUgbWFjaGluZS4gVGhpcyBtYXkgYmUKKwkJICogbm90IHBhcnRpY3VsYXJ5IFhGUyBwcm9ibGVtIHRob3VnaCwgYnV0IGl0IGlzIHRoZQorCQkgKiBvbmx5IEZTIHdoaWNoIHNlbmRzIGVtcHR5IGJhcnJpZXIgYXQgdW1vdW50IHRpbWUKKwkJICogSSB3b3JrZWQgd2l0aC4KKwkJICoKKwkJICogRW1wdHkgYmFycmllcnMgYXJlIG5vdCBhbGxvd2VkIGFueXdheSwgc2VlIDUxZmQ3N2JkOWY1MTIKKwkJICogZm9yIGV4YW1wbGUsIGFsdGhvdWdoIGxhdGVyIGl0IHdhcyBjaGFuZ2VkIHRvIGJpb19kaXNjYXJkKCkKKwkJICogb25seSwgd2hpY2ggZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2UuCisJCSAqLworCQkvL2VyciA9IC1FT1BOT1RTVVBQOworCQllcnIgPSAwOworCQlnb3RvIGVuZF9pbzsKKwl9CisKKwliaW9fZ2V0KGJpbyk7CisKKwlyZXR1cm4gZHN0X3Byb2Nlc3NfYmlvKG4sIGJpbyk7CisKK2VuZF9pbzoKKwliaW9fZW5kaW8oYmlvLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBPcGVuL2Nsb3NlIGNhbGxiYWNrcyBmb3IgYXBwcm9wcmlhdGUgYmxvY2sgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGRzdF9iZGV2X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKworCWRzdF9ub2RlX2dldChuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3RfYmRldl9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCisJZHN0X25vZGVfcHV0KG4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRzdF9ibGtfb3BzID0geworCS5vcGVuCQk9IGRzdF9iZGV2X29wZW4sCisJLnJlbGVhc2UJPSBkc3RfYmRldl9yZWxlYXNlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKKy8qCisgKiBCbG9jayBsYXllciBiaW5kaW5nIC0gZGlzayBpcyBjcmVhdGVkIHdoZW4gYXJyYXkgaXMgZnVsbHkgY29uZmlndXJlZAorICogYnkgdXNlcnNwYWNlIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQgZHN0X25vZGVfY3JlYXRlX2Rpc2soc3RydWN0IGRzdF9ub2RlICpuKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCXUzMiBpbmRleCA9IDA7CisKKwluLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKE5VTEwsIE5VTEwpOworCWlmICghbi0+cXVldWUpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbi0+cXVldWUtPnF1ZXVlZGF0YSA9IG47CisJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChuLT5xdWV1ZSwgZHN0X3JlcXVlc3QpOworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhuLT5xdWV1ZSwgbi0+bWF4X3BhZ2VzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG4tPnF1ZXVlLCBuLT5tYXhfcGFnZXMpOworCisJZXJyID0gLUVOT01FTTsKKwluLT5kaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIW4tPmRpc2spCisJCWdvdG8gZXJyX291dF9mcmVlX3F1ZXVlOworCisJaWYgKCEobi0+c3RhdGUtPnBlcm1pc3Npb25zICYgRFNUX1BFUk1fV1JJVEUpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRTVCBub2RlICVzIGF0dGFjaGVkIHJlYWQtb25seS5cbiIsIG4tPm5hbWUpOworCQlzZXRfZGlza19ybyhuLT5kaXNrLCAxKTsKKwl9CisKKwlpZiAoIWlkcl9wcmVfZ2V0KCZkc3RfaW5kZXhfaWRyLCBHRlBfS0VSTkVMKSkKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOworCWVyciA9IGlkcl9nZXRfbmV3KCZkc3RfaW5kZXhfaWRyLCBOVUxMLCAmaW5kZXgpOworCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCW4tPmRpc2stPm1ham9yID0gZHN0X21ham9yOworCW4tPmRpc2stPmZpcnN0X21pbm9yID0gaW5kZXg7CisJbi0+ZGlzay0+Zm9wcyA9ICZkc3RfYmxrX29wczsKKwluLT5kaXNrLT5xdWV1ZSA9IG4tPnF1ZXVlOworCW4tPmRpc2stPnByaXZhdGVfZGF0YSA9IG47CisJc25wcmludGYobi0+ZGlzay0+ZGlza19uYW1lLCBzaXplb2Yobi0+ZGlzay0+ZGlza19uYW1lKSwgImRzdC0lcyIsIG4tPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0OgorCXB1dF9kaXNrKG4tPmRpc2spOworZXJyX291dF9mcmVlX3F1ZXVlOgorCWJsa19jbGVhbnVwX3F1ZXVlKG4tPnF1ZXVlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU3lzZnMgbWFjaGluZXJ5OiBzaG93IGRldmljZSdzIHNpemUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3NpemUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIGluZm8tPnNpemUpOworfQorCisvKgorICogU2hvdyBsb2NhbCBleHBvcnRlZCBkZXZpY2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRzdF9zaG93X2xvY2FsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW5mby0+bG9jYWwpOworfQorCisvKgorICogU2hvd3MgdHlwZSBvZiB0aGUgcmVtb3RlIG5vZGUgLSBkZXZpY2UgbWFqb3IvbWlub3IgbnVtYmVyCisgKiBmb3IgbG9jYWwgbm9kZXMgYW5kIGFkZHJlc3MgKGFmX2luZXQgaXB2NC9pcHY2IG9ubHkpIGZvciByZW1vdGUgbm9kZXMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKKwlpbnQgZmFtaWx5ID0gaW5mby0+bmV0LmFkZHIuc2FfZmFtaWx5OworCisJaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpbmZvLT5uZXQuYWRkcjsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXUuJXUuJXUuJXU6JWRcbiIsCisJCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCX0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmluZm8tPm5ldC5hZGRyOworCQlyZXR1cm4gc3ByaW50ZihidWYsCisJCQkiJXBpNjolZFxuIiwKKwkJCSZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKKwl9IGVsc2UgeworCQlpbnQgaSwgc3ogPSBQQUdFX1NJWkUgLSAyOyAvKiAwIHN5bWJvbCBhbmQgJ1xuJyBiZWxvdyAqLworCQlpbnQgc2l6ZSwgYWRkcmxlbiA9IGluZm8tPm5ldC5hZGRyLnNhX2RhdGFfbGVuOworCQl1bnNpZ25lZCBjaGFyICphID0gKHVuc2lnbmVkIGNoYXIgKikmaW5mby0+bmV0LmFkZHIuc2FfZGF0YTsKKwkJY2hhciAqYnVmX29yaWcgPSBidWY7CisKKwkJc2l6ZSA9IHNucHJpbnRmKGJ1Ziwgc3osICJmYW1pbHk6ICVkLCBhZGRybGVuOiAldSwgYWRkcjogIiwKKwkJCQlmYW1pbHksIGFkZHJsZW4pOworCQlzeiAtPSBzaXplOworCQlidWYgKz0gc2l6ZTsKKworCQlmb3IgKGk9MDsgaTxhZGRybGVuOyArK2kpIHsKKwkJCWlmIChzeiA8IDMpCisJCQkJYnJlYWs7CisKKwkJCXNpemUgPSBzbnByaW50ZihidWYsIHN6LCAiJTAyeCAiLCBhW2ldKTsKKwkJCXN6IC09IHNpemU7CisJCQlidWYgKz0gc2l6ZTsKKwkJfQorCQlidWYgKz0gc3ByaW50ZihidWYsICJcbiIpOworCisJCXJldHVybiBidWYgLSBidWZfb3JpZzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkc3Rfbm9kZV9hdHRyc1tdID0geworCV9fQVRUUihzaXplLCAwNDQ0LCBkc3Rfc2hvd19zaXplLCBOVUxMKSwKKwlfX0FUVFIodHlwZSwgMDQ0NCwgZHN0X3Nob3dfdHlwZSwgTlVMTCksCisJX19BVFRSKGxvY2FsLCAwNDQ0LCBkc3Rfc2hvd19sb2NhbCwgTlVMTCksCit9OworCitzdGF0aWMgaW50IGRzdF9jcmVhdGVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyLCBpOworCisJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKKwkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3JlbW92ZV9hbGw7CisJfQorCXJldHVybiAwOworCitlcnJfb3V0X3JlbW92ZV9hbGw6CisJd2hpbGUgKC0taSA+PSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKKwkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZHN0X3JlbW92ZV9ub2RlX2F0dHJpYnV0ZXMoc3RydWN0IGRzdF9ub2RlICpuKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCisJCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKK30KKworLyoKKyAqIFN5c2ZzIGNsZWFudXAgYW5kIGluaXRpYWxpemF0aW9uLgorICogU2hvd3MgbnVtYmVyIG9mIHVzZWZ1bCBwYXJhbWV0ZXJzLgorICovCitzdGF0aWMgdm9pZCBkc3Rfbm9kZV9zeXNmc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpZiAobi0+aW5mbykgeworCQlkc3RfcmVtb3ZlX25vZGVfYXR0cmlidXRlcyhuKTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJm4tPmluZm8tPmRldmljZSk7CisJCW4tPmluZm8gPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBkc3Rfbm9kZV9zeXNmc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyOworCisJbi0+aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3RfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghbi0+aW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoJm4tPmluZm8tPmRldmljZSwgJmRzdF9ub2RlX2Rldiwgc2l6ZW9mKHN0cnVjdCBkZXZpY2UpKTsKKwluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKKworCWRldl9zZXRfbmFtZSgmbi0+aW5mby0+ZGV2aWNlLCAiZHN0LSVzIiwgbi0+bmFtZSk7CisJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZuLT5pbmZvLT5kZXZpY2UpOworCWlmIChlcnIpIHsKKwkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIG5vZGUgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJbi0+bmFtZSwgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZHN0X2NyZWF0ZV9ub2RlX2F0dHJpYnV0ZXMobik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWtmcmVlKG4tPmluZm8pOworCW4tPmluZm8gPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEU1Qgbm9kZSBoYXNoIHRhYmxlcyBtYWNoaW5lcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzdF9oYXNoKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJcmV0dXJuIChqaGFzaChzdHIsIHNpemUsIDApICUgZHN0X2hhc2h0YWJsZV9zaXplKTsKK30KKworc3RhdGljIHZvaWQgZHN0X25vZGVfcmVtb3ZlKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZuLT5ub2RlX2VudHJ5KTsKKwltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBkc3Rfbm9kZV9hZGQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXVuc2lnbmVkIGhhc2ggPSBkc3RfaGFzaChuLT5uYW1lLCBzaXplb2Yobi0+bmFtZSkpOworCisJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbi0+bm9kZV9lbnRyeSwgJmRzdF9oYXNodGFibGVbaGFzaF0pOworCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Cit9CisKKy8qCisgKiBDbGVhbmluZyBub2RlIHdoZW4gaXQgaXMgYWJvdXQgdG8gYmUgZnJlZWQuCisgKiBUaGVyZSBhcmUgc3RpbGwgdXNlcnMgb2YgdGhlIHNvY2tldCB0aG91Z2gsCisgKiBzbyBjb25uZWN0aW9uIGNsZWFudXAgc2hvdWxkIGJlIHByb3RlY3RlZC4KKyAqLworc3RhdGljIHZvaWQgZHN0X25vZGVfY2xlYW51cChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBuLT5zdGF0ZTsKKworCWlmICghc3QpCisJCXJldHVybjsKKworCWlmIChuLT5xdWV1ZSkgeworCQlibGtfY2xlYW51cF9xdWV1ZShuLT5xdWV1ZSk7CisKKwkJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7CisJCWlkcl9yZW1vdmUoJmRzdF9pbmRleF9pZHIsIG4tPmRpc2stPmZpcnN0X21pbm9yKTsKKwkJbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKworCQlwdXRfZGlzayhuLT5kaXNrKTsKKwl9CisKKwlpZiAobi0+YmRldikgeworCQlzeW5jX2Jsb2NrZGV2KG4tPmJkZXYpOworCQlibGtkZXZfcHV0KG4tPmJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOworCX0KKworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlzdC0+bmVlZF9leGl0ID0gMTsKKwlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKKworCWRzdF9zdGF0ZV9wdXQoc3QpOworCW4tPnN0YXRlID0gTlVMTDsKK30KKworLyoKKyAqIEZyZWUgc2VjdXJpdHkgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBnaXZlbiBub2RlLgorICovCitzdGF0aWMgdm9pZCBkc3Rfc2VjdXJpdHlfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9zZWN1cmUgKnMsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgdG1wLCAmbi0+c2VjdXJpdHlfbGlzdCwgc2VjX2VudHJ5KSB7CisJCWxpc3RfZGVsKCZzLT5zZWNfZW50cnkpOworCQlrZnJlZShzKTsKKwl9Cit9CisKKy8qCisgKiBGcmVlIG5vZGUgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB1c2Vycy4KKyAqIEFjdHVhbGx5IG5vZGUgaGFzIHRvIGJlIGZyZWVkIG9uIGJlaGFsZiBvZCB1c2Vyc3BhY2UgcHJvY2VzcywKKyAqIHNpbmNlIHRoZXJlIGFyZSBudW1iZXIgb2YgdGhyZWFkcywgd2hpY2ggYXJlIGVtYmVkZGVkIGluIHRoZQorICogbm9kZSwgc28gdGhleSBjYW4gbm90IGV4aXQgYW5kIGZyZWUgbm9kZSBmcm9tIHRoZXJlLCB0aGF0IGlzCisgKiB3aHkgdGhlcmUgaXMgYSB3YWtldXAgaWYgcmVmZXJlbmNlIGNvdW50ZXIgaXMgbm90IGVxdWFsIHRvIHplcm8uCisgKi8KK3ZvaWQgZHN0X25vZGVfcHV0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpZiAodW5saWtlbHkoIW4pKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogbjogJXAsIHJlZmNudDogJWQuXG4iLAorCQkJX19mdW5jX18sIG4sIGF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZuLT5yZWZjbnQpKSB7CisJCWRzdF9ub2RlX3JlbW92ZShuKTsKKwkJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gMDsKKwkJZHN0X25vZGVfY2xlYW51cChuKTsKKwkJdGhyZWFkX3Bvb2xfZGVzdHJveShuLT5wb29sKTsKKwkJZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKKwkJZHN0X25vZGVfY3J5cHRvX2V4aXQobik7CisJCWRzdF9zZWN1cml0eV9leGl0KG4pOworCQlkc3Rfbm9kZV90cmFuc19leGl0KG4pOworCisJCWtmcmVlKG4pOworCisJCWRwcmludGsoIiVzOiBmcmVlZCBuOiAlcC5cbiIsIF9fZnVuY19fLCBuKTsKKwl9IGVsc2UgeworCQl3YWtlX3VwKCZuLT53YWl0KTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGRldmljZXMgbWFqb3IvbWlub3IgbnVtYmVycyBmb3IgZ2l2ZW4gcGF0aG5hbWUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2xvb2t1cF9kZXZpY2UoY29uc3QgY2hhciAqcGF0aCwgZGV2X3QgKmRldikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9GT0xMT1csICZuZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CisJaWYgKCFpbm9kZSkgeworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIVNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKKwkJZXJyID0gLUVOT1RCTEs7CisJCWdvdG8gb3V0OworCX0KKworCSpkZXYgPSBpbm9kZS0+aV9yZGV2OworCitvdXQ6CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTZXR0aW5nIHVwIGV4cG9ydCBkZXZpY2U6IGxvb2t1cCBieSB0aGUgbmFtZSwgZ2V0IGl0cyBzaXplCisgKiBhbmQgc2V0dXAgbGlzdGVuaW5nIHNvY2tldCwgd2hpY2ggd2lsbCBhY2NlcHQgY2xpZW50cywgd2hpY2gKKyAqIHdpbGwgc3VibWl0IElPIGZvciBnaXZlbiBzdG9yYWdlLgorICovCitzdGF0aWMgaW50IGRzdF9zZXR1cF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQlzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKQoreworCWludCBlcnI7CisJZGV2X3QgZGV2ID0gMDsgLyogZ2NjIGxpa2VzIHRvIHNjcmVhbSBoZXJlICovCisKKwlzbnByaW50ZihuLT5pbmZvLT5sb2NhbCwgc2l6ZW9mKG4tPmluZm8tPmxvY2FsKSwgIiVzIiwgbGUtPmRldmljZSk7CisKKwllcnIgPSBkc3RfbG9va3VwX2RldmljZShsZS0+ZGV2aWNlLCAmZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbi0+YmRldiA9IG9wZW5fYnlfZGV2bnVtKGRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJaWYgKCFuLT5iZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChuLT5zaXplICE9IDApCisJCW4tPnNpemUgPSBtaW5fdChsb2ZmX3QsIG4tPmJkZXYtPmJkX2lub2RlLT5pX3NpemUsIG4tPnNpemUpOworCWVsc2UKKwkJbi0+c2l6ZSA9IG4tPmJkZXYtPmJkX2lub2RlLT5pX3NpemU7CisKKwluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKKwllcnIgPSBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKG4sIGxlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfY2xlYW51cDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2NsZWFudXA6CisJYmxrZGV2X3B1dChuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKKwluLT5iZGV2ID0gTlVMTDsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIEVtcHR5IHRocmVhZCBwb29sIGNhbGxiYWNrcyBmb3IgdGhlIG5ldHdvcmsgcHJvY2Vzc2luZyB0aHJlYWRzLiAqLworc3RhdGljIGlubGluZSB2b2lkICpkc3RfdGhyZWFkX25ldHdvcmtfaW5pdCh2b2lkICpkYXRhKQoreworCWRwcmludGsoIiVzOiBkYXRhOiAlcC5cbiIsIF9fZnVuY19fLCBkYXRhKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF90aHJlYWRfbmV0d29ya19jbGVhbnVwKHZvaWQgKmRhdGEpCit7CisJZHByaW50aygiJXM6IGRhdGE6ICVwLlxuIiwgX19mdW5jX18sIGRhdGEpOworfQorCisvKgorICogQWxsb2NhdGUgRFNUIG5vZGUgYW5kIGluaXRpYWxpemUgc29tZSBvZiBpdHMgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHN0cnVjdCBkc3Rfbm9kZSAqZHN0X2FsbG9jX25vZGUoc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJaW50ICgqc3RhcnQpKHN0cnVjdCBkc3Rfbm9kZSAqKSwKKwkJaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm47CisJaW50IGVycjsKKworCW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X25vZGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJm4tPm5vZGVfZW50cnkpOworCisJSU5JVF9MSVNUX0hFQUQoJm4tPnNlY3VyaXR5X2xpc3QpOworCW11dGV4X2luaXQoJm4tPnNlY3VyaXR5X2xvY2spOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmbi0+d2FpdCk7CisKKwluLT50cmFuc19zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKGN0bC0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKKwlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCkKKwkJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gSFo7CisKKwluLT50cmFuc19tYXhfcmV0cmllcyA9IGN0bC0+dHJhbnNfbWF4X3JldHJpZXM7CisJaWYgKCFuLT50cmFuc19tYXhfcmV0cmllcykKKwkJbi0+dHJhbnNfbWF4X3JldHJpZXMgPSAxMDsKKworCS8qCisJICogUHJldHR5IG11Y2ggYXJiaXRyYXJ5IGRlZmF1bHQgbnVtYmVycy4KKwkgKiAzMiBtYXRjaGVzIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIGJpbyBvcmlnaW5hdGVkIGZyb20gZXh0MyAoMzEpLgorCSAqLworCW4tPm1heF9wYWdlcyA9IGN0bC0+bWF4X3BhZ2VzOworCWlmICghbi0+bWF4X3BhZ2VzKQorCQluLT5tYXhfcGFnZXMgPSAzMjsKKworCWlmIChuLT5tYXhfcGFnZXMgPiAxMDI0KQorCQluLT5tYXhfcGFnZXMgPSAxMDI0OworCisJbi0+c3RhcnQgPSBzdGFydDsKKwluLT5zaXplID0gY3RsLT5zaXplOworCisJYXRvbWljX3NldCgmbi0+cmVmY250LCAxKTsKKwlhdG9taWNfbG9uZ19zZXQoJm4tPmdlbiwgMCk7CisJc25wcmludGYobi0+bmFtZSwgc2l6ZW9mKG4tPm5hbWUpLCAiJXMiLCBjdGwtPm5hbWUpOworCisJZXJyID0gZHN0X25vZGVfc3lzZnNfaW5pdChuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCW4tPnBvb2wgPSB0aHJlYWRfcG9vbF9jcmVhdGUobnVtLCBuLT5uYW1lLCBkc3RfdGhyZWFkX25ldHdvcmtfaW5pdCwKKwkJCWRzdF90aHJlYWRfbmV0d29ya19jbGVhbnVwLCBuKTsKKwlpZiAoSVNfRVJSKG4tPnBvb2wpKSB7CisJCWVyciA9IFBUUl9FUlIobi0+cG9vbCk7CisJCWdvdG8gZXJyX291dF9zeXNmc19leGl0OworCX0KKworCWRwcmludGsoIiVzOiBuOiAlcCwgbmFtZTogJXMuXG4iLCBfX2Z1bmNfXywgbiwgbi0+bmFtZSk7CisKKwlyZXR1cm4gbjsKKworZXJyX291dF9zeXNmc19leGl0OgorCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7CitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUobik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdGFydGluZyBhIG5vZGUsIGNvbm5lY3RlZCB0byB0aGUgcmVtb3RlIHNlcnZlcjoKKyAqIHJlZ2lzdGVyIGJsb2NrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBtZWNoYW5pc20uCisgKiBJbiByZXZlcnMgb3JkZXIgdGhvdWdoLgorICoKKyAqIEl0IHdpbGwgYXV0b25lZ290aWF0ZSBzb21lIHBhcmFtZXRlcnMgd2l0aCB0aGUgcmVtb3RlIG5vZGUKKyAqIGFuZCB1cGRhdGUgbG9jYWwgaWYgbmVlZGVkLgorICoKKyAqIFRyYW5zYWN0aW9uIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB0aGUgbGFzdCB0aGluZyBiZWZvcmUKKyAqIHN0YXJ0aW5nIHRoZSBub2RlLCBzaW5jZSB0cmFuc2FjdGlvbiBzaG91bGQgaW5jbHVkZSBub3Qgb25seQorICogYmxvY2sgSU8sIGJ1dCBhbHNvIGNyeXB0byByZWxhdGVkIGRhdGEgKGlmIGFueSksIHdoaWNoIGFyZQorICogaW5pdGlhbGl6ZWQgc2VwYXJhdGVseS4KKyAqLworc3RhdGljIGludCBkc3Rfc3RhcnRfcmVtb3RlKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHN0X25vZGVfdHJhbnNfaW5pdChuLCBzaXplb2Yoc3RydWN0IGRzdF90cmFucykpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkc3Rfbm9kZV9jcmVhdGVfZGlzayhuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZHN0X25vZGVfc2V0X3NpemUobik7CisJYWRkX2Rpc2sobi0+ZGlzayk7CisKKwlkcHJpbnRrKCJEU1Q6IHN0YXJ0ZWQgcmVtb3RlIG5vZGUgJyVzJywgbWlub3I6ICVkLlxuIiwgbi0+bmFtZSwgbi0+ZGlzay0+Zmlyc3RfbWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGRpbmcgcmVtb3RlIG5vZGUgYW5kIGluaXRpYWxpemUgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIGludCBkc3RfYWRkX3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCBlcnI7CisJc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcmN0bCA9IGRhdGE7CisKKwlpZiAobikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbiA9IGRzdF9hbGxvY19ub2RlKGN0bCwgZHN0X3N0YXJ0X3JlbW90ZSwgMSk7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweSgmbi0+aW5mby0+bmV0LCByY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOworCWVyciA9IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKG4sIHJjdGwpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJZHN0X25vZGVfYWRkKG4pOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlkc3Rfbm9kZV9wdXQobik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEFkZGluZyBleHBvcnQgbm9kZTogaW5pdGlhbGl6aW5nIGJsb2NrIGRldmljZSBhbmQgbGlzdGVuaW5nIHNvY2tldC4KKyAqLworc3RhdGljIGludCBkc3RfYWRkX2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCBlcnI7CisJc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSA9IGRhdGE7CisKKwlpZiAobikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfY3RsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluID0gZHN0X2FsbG9jX25vZGUoY3RsLCBkc3Rfc3RhcnRfZXhwb3J0LCAyKTsKKwlpZiAoIW4pCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gZHN0X3NldHVwX2V4cG9ydChuLCBjdGwsIGxlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWRzdF9ub2RlX2FkZChuKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJZHN0X25vZGVfcHV0KG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHN0X25vZGVfcmVtb3ZlX3VubG9hZChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1RPUFBFRCBuYW1lOiAnJXMnLCBzaXplOiAlbGx1LlxuIiwKKwkJCW4tPm5hbWUsIG4tPnNpemUpOworCisJaWYgKG4tPmRpc2spCisJCWRlbF9nZW5kaXNrKG4tPmRpc2spOworCisJZHN0X25vZGVfcmVtb3ZlKG4pOworCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7CisKKwkvKgorCSAqIFRoaXMgaXMgbm90IGEgaGFjay4gUmVhbGx5LgorCSAqIE5vZGUncyByZWZlcmVuY2UgY291bnRlciBhbGxvd3MgdG8gaW1wbGVtZW50IGZpbmUgZ3JhaW5lZAorCSAqIG5vZGUgZnJlZWluZywgYnV0IHNpbmNlIGFsbCB0cmFuc2FjdGlvbnMgKHdoaWNoIGhvbGQgbm9kZSdzCisJICogcmVmZXJlbmNlIGNvdW50ZXIpIGFyZSBwcm9jZXNzZWQgaW4gdGhlIGRlZGljYXRlZCB0aHJlYWQsCisJICogaXQgaXMgcG9zc2libGUgdGhhdCByZWZlcmVuY2Ugd2lsbCBoaXQgemVybyBpbiB0aGF0IHRocmVhZCwKKwkgKiBzbyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGV4aXQgdGhyZWFkIGFuZCBjbGVhbnVwIHRoZSBub2RlLgorCSAqCisJICogU28sIHdlIHJlbW92ZSBkaXNrLCBzbyBubyBuZXcgYWN0aXZpdHkgaXMgcG9zc2libGUsIGFuZAorCSAqIHdhaXQgdW50aWwgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb24gYXJlIGNvbXBsZXRlZCAoZWl0aGVyCisJICogaW4gcmVjZWl2aW5nIHRocmVhZCBvciBieSB0aW1lb3V0IGluIHdvcmtxdWV1ZSksIGluIHRoaXMKKwkgKiBjYXNlIHJlZmVyZW5jZSBjb3VudGVyIHdpbGwgYmUgbGVzcyBvciBlcXVhbCB0byAyIChvbmNlIHNldCBpbgorCSAqIGRzdF9hbGxvY19ub2RlKCkgYW5kIHRoZW4gaW4gY29ubmVjdG9yIG1lc3NhZ2UgcGFyc2VyOworCSAqIG9yIHdoZW4gd2UgZm9yY2UgbW9kdWxlIHVubG9hZGluZywgYW5kIGNvbm5lY3RvciBtZXNzYWdlCisJICogcGFyc2VyIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UsIGluIHRoaXMgY2FzZSByZWZlcmVuY2UKKwkgKiBjb3VudGVyIHdpbGwgYmUgZXF1YWwgdG8gMSksCisJICogYW5kIHN1YnNlcXVlbnQgZHN0X25vZGVfcHV0KCkgY2FsbHMgd2lsbCBmcmVlIHRoZSBub2RlLgorCSAqLworCWRwcmludGsoIiVzOiBnb2luZyB0byBzbGVlcCB3aXRoICVkIHJlZmNudC5cbiIsIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7CisJd2FpdF9ldmVudChuLT53YWl0LCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSA8PSAyKTsKKworCWRzdF9ub2RlX3B1dChuKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBub2RlIGZyb20gdGhlIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2RlbF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjcnlwdG8gcHJvY2Vzc2luZyBmb3IgZ2l2ZW4gbm9kZS4KKyAqLworc3RhdGljIGludCBkc3RfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmNyeXB0byA9IGRhdGE7CisKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkgKyBjcnlwdG8tPmhhc2hfa2V5c2l6ZSArCisJCQljcnlwdG8tPmNpcGhlcl9rZXlzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuLT50cmFuc19jYWNoZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXR1cm4gZHN0X25vZGVfY3J5cHRvX2luaXQobiwgY3J5cHRvKTsKK30KKworLyoKKyAqIFNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3NlY3VyaXR5X2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHN0X3NlY3VyZSAqczsKKworCWlmICghbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9zZWN1cmVfdXNlcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweSgmcy0+c2VjLCBkYXRhLCBzaXplKTsKKworCW11dGV4X2xvY2soJm4tPnNlY3VyaXR5X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnMtPnNlY19lbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QpOworCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEtpbGwnZW0gYWxsIQorICovCitzdGF0aWMgaW50IGRzdF9zdGFydF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IGVycjsKKworCWlmICghbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobi0+dHJhbnNfY2FjaGUpCisJCXJldHVybiAwOworCisJZXJyID0gbi0+c3RhcnQobik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXByaW50ayhLRVJOX0lORk8gIlNUQVJURUQgbmFtZTogJyVzJywgc2l6ZTogJWxsdS5cbiIsIG4tPm5hbWUsIG4tPnNpemUpOworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmRzdF9jb21tYW5kX2Z1bmMpKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOworCisvKgorICogTGlzdCBvZiB1c2Vyc3BhY2UgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBkc3RfY29tbWFuZF9mdW5jIGRzdF9jb21tYW5kc1tdID0geworCVtEU1RfQUREX1JFTU9URV0gPSAmZHN0X2FkZF9yZW1vdGUsCisJW0RTVF9BRERfRVhQT1JUXSA9ICZkc3RfYWRkX2V4cG9ydCwKKwlbRFNUX0RFTF9OT0RFXSA9ICZkc3RfZGVsX25vZGUsCisJW0RTVF9DUllQVE9dID0gJmRzdF9jcnlwdG9faW5pdCwKKwlbRFNUX1NFQ1VSSVRZXSA9ICZkc3Rfc2VjdXJpdHlfaW5pdCwKKwlbRFNUX1NUQVJUXSA9ICZkc3Rfc3RhcnRfbm9kZSwKK307CisKKy8qCisgKiBDb25maWd1cmF0aW9uIHBhcnNlci4KKyAqLworc3RhdGljIHZvaWQgY25fZHN0X2NhbGxiYWNrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRzdF9jdGwgKmN0bDsKKwlzdHJ1Y3QgY25fbXNnICptc2cgPSBkYXRhOworCWludCBlcnI7CisJc3RydWN0IGRzdF9jdGxfYWNrIGFjazsKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBOVUxMLCAqdG1wOworCXVuc2lnbmVkIGludCBoYXNoOworCisJaWYgKG1zZy0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSkgeworCQllcnIgPSAtRUJBRE1TRzsKKwkJZ290byBvdXQ7CisJfQorCisJY3RsID0gKHN0cnVjdCBkc3RfY3RsICopbXNnLT5kYXRhOworCisJaWYgKGN0bC0+Y21kID49IERTVF9DTURfTUFYKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwloYXNoID0gZHN0X2hhc2goY3RsLT5uYW1lLCBzaXplb2YoY3RsLT5uYW1lKSk7CisKKwltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmRzdF9oYXNodGFibGVbaGFzaF0sIG5vZGVfZW50cnkpIHsKKwkJaWYgKCFtZW1jbXAodG1wLT5uYW1lLCBjdGwtPm5hbWUsIHNpemVvZih0bXAtPm5hbWUpKSkgeworCQkJbiA9IHRtcDsKKwkJCWRzdF9ub2RlX2dldChuKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7CisKKwllcnIgPSBkc3RfY29tbWFuZHNbY3RsLT5jbWRdKG4sIGN0bCwgbXNnLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSwKKwkJCW1zZy0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSk7CisKKwlkc3Rfbm9kZV9wdXQobik7CitvdXQ6CisJbWVtY3B5KCZhY2subXNnLCBtc2csIHNpemVvZihzdHJ1Y3QgY25fbXNnKSk7CisKKwlhY2subXNnLmFjayA9IG1zZy0+YWNrICsgMTsKKwlhY2subXNnLmxlbiA9IHNpemVvZihzdHJ1Y3QgZHN0X2N0bF9hY2spIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOworCisJYWNrLmVycm9yID0gZXJyOworCisJY25fbmV0bGlua19zZW5kKCZhY2subXNnLCAwLCBHRlBfS0VSTkVMKTsKK30KKworLyoKKyAqIEdsb2JhbCBpbml0aWFsaXphdGlvbjogc3lzZnMsIGhhc2ggdGFibGUsIGJsb2NrIGRldmljZSByZWdpc3RyYXRpb24sCisgKiBjb25uZWN0b3IgYW5kIHZhcmlvdXMgY2FjaGVzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBkc3Rfc3lzZnNfaW5pdCh2b2lkKQoreworCXJldHVybiBidXNfcmVnaXN0ZXIoJmRzdF9kZXZfYnVzX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBkc3Rfc3lzZnNfZXhpdCh2b2lkKQoreworCWJ1c191bnJlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHN0X2hhc2h0YWJsZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlkc3RfaGFzaHRhYmxlID0ga2NhbGxvYyhkc3RfaGFzaHRhYmxlX3NpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghZHN0X2hhc2h0YWJsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGk9MDsgaTxkc3RfaGFzaHRhYmxlX3NpemU7ICsraSkKKwkJSU5JVF9MSVNUX0hFQUQoJmRzdF9oYXNodGFibGVbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRzdF9oYXNodGFibGVfZXhpdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBkc3Rfbm9kZSAqbiwgKnRtcDsKKworCWZvciAoaT0wOyBpPGRzdF9oYXNodGFibGVfc2l6ZTsgKytpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuLCB0bXAsICZkc3RfaGFzaHRhYmxlW2ldLCBub2RlX2VudHJ5KSB7CisJCQlkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOworCQl9CisJfQorCisJa2ZyZWUoZHN0X2hhc2h0YWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRzdF9zeXNfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCisJZXJyID0gZHN0X2hhc2h0YWJsZV9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSBkc3RfZXhwb3J0X2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfaGFzaHRhYmxlX2V4aXQ7CisKKwllcnIgPSByZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9leHBvcnRfZXhpdDsKKwlpZiAoZXJyKQorCQlkc3RfbWFqb3IgPSBlcnI7CisKKwllcnIgPSBkc3Rfc3lzZnNfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyOworCisJZXJyID0gY25fYWRkX2NhbGxiYWNrKCZjbl9kc3RfaWQsICJEU1QiLCBjbl9kc3RfY2FsbGJhY2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zeXNmc19leGl0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiRGlzdHJpYnV0ZWQgc3RvcmFnZSwgJyVzJyByZWxlYXNlLlxuIiwgZHN0X25hbWUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfc3lzZnNfZXhpdDoKKwlkc3Rfc3lzZnNfZXhpdCgpOworZXJyX291dF91bnJlZ2lzdGVyOgorCXVucmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOworZXJyX291dF9leHBvcnRfZXhpdDoKKwlkc3RfZXhwb3J0X2V4aXQoKTsKK2Vycl9vdXRfaGFzaHRhYmxlX2V4aXQ6CisJZHN0X2hhc2h0YWJsZV9leGl0KCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRzdF9zeXNfZXhpdCh2b2lkKQoreworCWNuX2RlbF9jYWxsYmFjaygmY25fZHN0X2lkKTsKKwl1bnJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKKwlkc3RfaGFzaHRhYmxlX2V4aXQoKTsKKwlkc3Rfc3lzZnNfZXhpdCgpOworCWRzdF9leHBvcnRfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChkc3Rfc3lzX2luaXQpOworbW9kdWxlX2V4aXQoZHN0X3N5c19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEaXN0cmlidXRlZCBzdG9yYWdlIik7CitNT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGFlNGViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qCisgKiBFeHBvcnQgYmlvc2V0IGlzIHVzZWQgZm9yIHNlcnZlciBibG9jayBJTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHN0cnVjdCBiaW9fc2V0ICpkc3RfYmlvX3NldDsKKworaW50IF9faW5pdCBkc3RfZXhwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWRzdF9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZSgzMiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKKwlpZiAoIWRzdF9iaW9fc2V0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCkKK3sKKwliaW9zZXRfZnJlZShkc3RfYmlvX3NldCk7Cit9CisKKy8qCisgKiBXaGVuIGNsaWVudCBjb25uZWN0cyBhbmQgYXV0b25lZ290aWF0ZXMgd2l0aCB0aGUgc2VydmVyIG5vZGUsCisgKiBpdHMgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQgaW4gYSBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBzZW50CisgKiBiYWNrLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdHJ1Y3QgZHN0X3N0YXRlICptYWluLCBzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBtYWluLT5ub2RlOworCXN0cnVjdCBkc3Rfc2VjdXJlICpzZW50cnk7CisJc3RydWN0IGRzdF9zZWN1cmVfdXNlciAqczsKKwlzdHJ1Y3Qgc2FkZHIgKnNhID0gJnN0LT5jdGwuYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGVybSA9IDA7CisKKwltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgeworCQlzID0gJnNlbnRyeS0+c2VjOworCisJCWlmIChzLT5hZGRyLnNhX2ZhbWlseSAhPSBzYS0+c2FfZmFtaWx5KQorCQkJY29udGludWU7CisKKwkJaWYgKHMtPmFkZHIuc2FfZGF0YV9sZW4gIT0gc2EtPnNhX2RhdGFfbGVuKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhpcyAnMicgYmVsb3cgaXMgYSBwb3J0IGZpZWxkLiBUaGlzIG1heSBiZSB2ZXJ5IHdyb25nIHRvIGRvCisJCSAqIGluIGF0YWxrIGZvciBleGFtcGxlIHRob3VnaC4gSWYgdGhlcmUgd2lsbCBiZSBhbnkgbmVlZCB0byBleHRlbnQKKwkJICogcHJvdG9jb2wgdG8gc29tZXRoaW5nIGVsc2UsIEkgY2FuIGNyZWF0ZSBwZXItZmFtaWx5IGhlbHBlcnMgYW5kCisJCSAqIHVzZSB0aGVtIGluc3RlYWQgb2YgdGhpcyBtZW1jbXAuCisJCSAqLworCQlpZiAobWVtY21wKHMtPmFkZHIuc2FfZGF0YSArIDIsIHNhLT5zYV9kYXRhICsgMiwKKwkJCQkJc2EtPnNhX2RhdGFfbGVuIC0gMikpCisJCQljb250aW51ZTsKKworCQlwZXJtID0gcy0+cGVybWlzc2lvbnM7CisJfQorCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7CisKKwlyZXR1cm4gcGVybTsKK30KKworLyoKKyAqIEFjY2VwdCBuZXcgY2xpZW50OiBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YXRlIGFuZCBjaGVjayBwZXJtaXNzaW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9hY2NlcHRfY2xpZW50KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOworCWludCBlcnIgPSAwOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOworCXN0cnVjdCBkc3Rfc3RhdGUgKm5ldzsKKworCXdoaWxlICghZXJyICYmICFzb2NrKSB7CisJCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7CisKKwkJaWYgKCEocmV2ZW50cyAmIG1hc2spKSB7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQkJZm9yICg7OykgeworCQkJCXByZXBhcmVfdG9fd2FpdCgmc3QtPnRocmVhZF93YWl0LAorCQkJCQkJJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKKwkJCQkJYnJlYWs7CisKKwkJCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOworCisJCQkJaWYgKHJldmVudHMgJiBtYXNrKQorCQkJCQlicmVhazsKKworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIE1hZ2ljIEhaPyBQb2xsaW5nIGNoZWNrIGFib3ZlIGlzIG5vdCBzYWZlIGluCisJCQkJICogYWxsIGNhc2VzIChsaWtlIHNvY2tldCByZXNldCBpbiBCSCBjb250ZXh0KSwKKwkJCQkgKiBzbyBpdCBpcyBzaW1wbGVyIGp1c3QgdG8gcG9zdHBvbmUgaXQgdG8gdGhlCisJCQkJICogcHJvY2VzcyBjb250ZXh0IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHNwZWNpYWwKKwkJCQkgKiBsb2NraW5nIHRoZXJlLgorCQkJCSAqLworCQkJCXNjaGVkdWxlX3RpbWVvdXQoSFopOworCQkJfQorCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOworCQl9CisKKwkJZXJyID0gLUVDT05OUkVTRVQ7CisJCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKworCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZXZlbnRzOiAleCBbZXJyOiAlZCwgaW46ICVkXS5cbiIsCisJCQlfX2Z1bmNfXywgc3QsIHJldmVudHMsIHJldmVudHMgJiBlcnJfbWFzaywKKwkJCXJldmVudHMgJiBQT0xMSU4pOworCisJCWlmIChyZXZlbnRzICYgZXJyX21hc2spIHsKKwkJCWRwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCByZXZlbnRzLCBzdC0+c29ja2V0LCBlcnIpOworCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCX0KKworCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQorCQkJZXJyID0gLUVOT0RFVjsKKworCQlpZiAoc3QtPnNvY2tldCAmJiAocmV2ZW50cyAmIFBPTExJTikpCisJCQllcnIgPSBrZXJuZWxfYWNjZXB0KHN0LT5zb2NrZXQsICZzb2NrLCAwKTsKKworCQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKwl9CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW5ldyA9IGRzdF9zdGF0ZV9hbGxvYyhzdC0+bm9kZSk7CisJaWYgKCFuZXcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisJfQorCW5ldy0+c29ja2V0ID0gc29jazsKKworCW5ldy0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKwllcnIgPSBrZXJuZWxfZ2V0cGVlcm5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAorCQkJKGludCAqKSZuZXctPmN0bC5hZGRyLnNhX2RhdGFfbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJbmV3LT5wZXJtaXNzaW9ucyA9IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdCwgbmV3KTsKKwlpZiAobmV3LT5wZXJtaXNzaW9ucyA9PSAwKSB7CisJCWVyciA9IC1FUEVSTTsKKwkJZHN0X2R1bXBfYWRkcihzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCisJCQkJIkNsaWVudCBpcyBub3QgYWxsb3dlZCB0byBjb25uZWN0Iik7CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCisJZXJyID0gZHN0X3BvbGxfaW5pdChuZXcpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlkc3RfZHVtcF9hZGRyKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKKwkJCSJDb25uZWN0ZWQgY2xpZW50Iik7CisKKwlyZXR1cm4gbmV3OworCitlcnJfb3V0X3B1dDoKKwlkc3Rfc3RhdGVfcHV0KG5ldyk7CitlcnJfb3V0X3JlbGVhc2U6CisJc29ja19yZWxlYXNlKHNvY2spOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qCisgKiBFYWNoIHNlcnZlcidzIGJsb2NrIHJlcXVlc3Qgc29tZXRpbWUgZmluaXNoZXMuCisgKiBVc3VhbGx5IGl0IGhhcHBlbnMgaW4gaGFyZCBpcnEgY29udGV4dCBvZiB0aGUgYXBwcm9wcmlhdGUgY29udHJvbGxlciwKKyAqIHNvIHRvIHBsYXkgZ29vZCB3aXRoIGFsbCBjYXNlcyB3ZSBqdXN0IHF1ZXVlIEJJTyBpbnRvIHRoZSBxdWV1ZQorICogYW5kIHdha2UgdXAgcHJvY2Vzc2luZyB0aHJlYWQsIHdoaWNoIGdldHMgY29tcGxldGVkIHJlcXVlc3QgYW5kCisgKiBzZW5kIChlbmNyeXB0aW5nIGlmIG5lZWRlZCkgaXQgYmFjayB0byB0aGUgY2xpZW50IChpZiBpdCB3YXMgYSByZWFkCisgKiByZXF1ZXN0KSwgb3Igc2VuZHMgYmFjayByZXBseSB0aGF0IHdyaXRpbmcgc3VjY2VzZnVsbHkgY29tcGxldGVkLgorICovCitzdGF0aWMgaW50IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IE5VTEw7CisJc3RydWN0IGJpbyAqYmlvOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7CisJCQlwID0gbGlzdF9maXJzdF9lbnRyeSgmc3QtPnJlcXVlc3RfbGlzdCwKKwkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKKwkJCWxpc3RfZGVsKCZwLT5yZXF1ZXN0X2VudHJ5KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CisKKwkJaWYgKCFwKQorCQkJYnJlYWs7CisKKwkJYmlvID0gcC0+YmlvOworCisJCWlmIChkc3RfbmVlZF9jcnlwdG8oc3QtPm5vZGUpICYmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSkKKwkJCWVyciA9IGRzdF9leHBvcnRfY3J5cHRvKHN0LT5ub2RlLCBiaW8pOworCQllbHNlCisJCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDbGVhbnVwIGV4cG9ydCBzdGF0ZS4KKyAqIEl0IGhhcyB0byB3YWl0IHVudGlsIGFsbCByZXF1ZXN0cyBhcmUgZmluaXNoZWQsCisgKiBhbmQgdGhlbiBmcmVlIHRoZW0gYWxsLgorICovCitzdGF0aWMgdm9pZCBkc3Rfc3RhdGVfY2xlYW51cF9leHBvcnQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUaGlzIGxvb3Agd2FpdHMgZm9yIGFsbCBwZW5kaW5nIGJpb3MgdG8gYmUgY29tcGxldGVkIGFuZCBmcmVlZC4KKwkgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID4gMSkgeworCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLCBsaXN0X2VtcHR5OiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCksCisJCQkJbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpOworCQl3YWl0X2V2ZW50X3RpbWVvdXQoc3QtPnRocmVhZF93YWl0LAorCQkJCShhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPT0gMSkgfHwKKwkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCksCisJCQkJSFovMik7CisKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQkJcCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQkJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdC0+cmVxdWVzdF9saXN0LAorCQkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKKwkJCQlsaXN0X2RlbCgmcC0+cmVxdWVzdF9lbnRyeSk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CisKKwkJCWlmIChwKQorCQkJCWJpb19wdXQocC0+YmlvKTsKKworCQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZCwgbGlzdF9lbXB0eTogJWQsIHA6ICVwLlxuIiwKKwkJCQlfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSwKKwkJCQlsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSwgcCk7CisJCX0KKwl9CisKKwlkc3Rfc3RhdGVfcHV0KHN0KTsKK30KKworLyoKKyAqIENsaWVudCBhY2NlcHRpbmcgdGhyZWFkLgorICogTm90IG9ubHkgYWNjZXB0cyBuZXcgY29ubmVjdGlvbiwgYnV0IGFsc28gc2NoZWR1bGVzIHJlY2VpdmluZyB0aHJlYWQKKyAqIGFuZCBwZXJmb3JtcyByZXF1ZXN0IGNvbXBsZXRpb24gZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgaW50IGRzdF9hY2NlcHQodm9pZCAqaW5pdF9kYXRhLCB2b2lkICpzY2hlZHVsZV9kYXRhKQoreworCXN0cnVjdCBkc3Rfc3RhdGUgKm1haW5fc3QgPSBzY2hlZHVsZV9kYXRhOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyOworCisJd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhbWFpbl9zdC0+bmVlZF9leGl0KSB7CisJCWRwcmludGsoIiVzOiBtYWluX3N0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCwgbik7CisJCXN0ID0gZHN0X2FjY2VwdF9jbGllbnQobWFpbl9zdCk7CisJCWlmIChJU19FUlIoc3QpKQorCQkJY29udGludWU7CisKKwkJZXJyID0gZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0KTsKKwkJaWYgKCFlcnIpIHsKKwkJCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQpIHsKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdC0+dGhyZWFkX3dhaXQsCisJCQkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkgfHwKKwkJCQkJCSFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwKKwkJCQkJCXN0LT5uZWVkX2V4aXQsCisJCQkJCUhaKTsKKworCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKGxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKQorCQkJCQljb250aW51ZTsKKworCQkJCWVyciA9IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0KTsKKwkJCQlpZiAoZXJyKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJc3QtPm5lZWRfZXhpdCA9IDE7CisJCQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCQl9CisKKwkJZHN0X3N0YXRlX2NsZWFudXBfZXhwb3J0KHN0KTsKKwl9CisKKwlkcHJpbnRrKCIlczogZnJlZWluZyBsaXN0ZW5pbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0KTsKKworCWRzdF9zdGF0ZV9sb2NrKG1haW5fc3QpOworCWRzdF9wb2xsX2V4aXQobWFpbl9zdCk7CisJZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKG1haW5fc3QpOworCWRzdF9zdGF0ZV91bmxvY2sobWFpbl9zdCk7CisJZHN0X3N0YXRlX3B1dChtYWluX3N0KTsKKwlkcHJpbnRrKCIlczogZnJlZWQgbGlzdGVuaW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRzdF9zdGFydF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCWlmIChsaXN0X2VtcHR5KCZuLT5zZWN1cml0eV9saXN0KSkgeworCQlwcmludGsoS0VSTl9FUlIgIllvdSBhcmUgdHJ5aW5nIHRvIGV4cG9ydCBub2RlICclcycgd2l0aG91dCBzZWN1cml0eSBhdHRyaWJ1dGVzLlxuIgorCQkJCSJObyBjbGllbnRzIHdpbGwgYmUgYWxsb3dlZCB0byBjb25uZWN0LiBFeGl0aW5nLlxuIiwgbi0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gZHN0X25vZGVfdHJhbnNfaW5pdChuLCBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfcHJpdikpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBsaXN0ZW5pbmcgc3RhdGUgYW5kIHNjaGVkdWxlIGFjY2VwdGluZyB0aHJlYWQuCisgKi8KK2ludCBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmbGUtPmN0bDsKKworCW1lbWNweSgmbi0+aW5mby0+bmV0LCBjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7CisKKwlzdCA9IGRzdF9zdGF0ZV9hbGxvYyhuKTsKKwlpZiAoSVNfRVJSKHN0KSkgeworCQllcnIgPSBQVFJfRVJSKHN0KTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCW1lbWNweSgmc3QtPmN0bCwgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOworCisJZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlzdC0+c29ja2V0LT5zay0+c2tfcmV1c2UgPSAxOworCisJZXJyID0ga2VybmVsX2JpbmQoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZjdGwtPmFkZHIsCisJCQljdGwtPmFkZHIuc2FfZGF0YV9sZW4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKKworCWVyciA9IGtlcm5lbF9saXN0ZW4oc3QtPnNvY2tldCwgMTAyNCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOworCW4tPnN0YXRlID0gc3Q7CisKKwllcnIgPSBkc3RfcG9sbF9pbml0KHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7CisKKwlkc3Rfc3RhdGVfZ2V0KHN0KTsKKworCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsIGRzdF90aHJlYWRfc2V0dXAsCisJCQlkc3RfYWNjZXB0LCBzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wb2xsX2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wb2xsX2V4aXQ6CisJZHN0X3BvbGxfZXhpdChzdCk7CitlcnJfb3V0X3NvY2tldF9yZWxlYXNlOgorCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7CitlcnJfb3V0X3B1dDoKKwlkc3Rfc3RhdGVfcHV0KHN0KTsKK2Vycl9vdXRfZXhpdDoKKwluLT5zdGF0ZSA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZyZWUgYmlvIGFuZCByZWxhdGVkIHByaXZhdGUgZGF0YS4KKyAqIEFsc28gZHJvcCBhIHJlZmVyZW5jZSBjb3VudGVyIGZvciBhcHByb3ByaWF0ZSBzdGF0ZSwKKyAqIHdoaWNoIHdhaXRzIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgYmxvY2sgSU9zIGluLWZsaWdodC4KKyAqLworc3RhdGljIHZvaWQgZHN0X2Jpb19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcHJpdiA9IGJpby0+YmlfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJaWYgKCFidi0+YnZfcGFnZSkKKwkJCWJyZWFrOworCisJCV9fZnJlZV9wYWdlKGJ2LT5idl9wYWdlKTsKKwl9CisKKwlpZiAocHJpdikKKwkJZHN0X3N0YXRlX3B1dChwcml2LT5zdGF0ZSk7CisJYmlvX2ZyZWUoYmlvLCBkc3RfYmlvX3NldCk7Cit9CisKKy8qCisgKiBCbG9jayBJTyBjb21wbGV0aW9uLiBRdWV1ZSByZXF1ZXN0IHRvIGJlIHNlbnQgYmFjayB0bworICogdGhlIGNsaWVudCAob3IganVzdCBjb25maXJtYXRpb24pLgorICovCitzdGF0aWMgdm9pZCBkc3RfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCit7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHAtPnN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnAtPnJlcXVlc3RfZW50cnksICZzdC0+cmVxdWVzdF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworfQorCisvKgorICogQWxsb2NhdGUgcmVhZCByZXF1ZXN0IGZvciB0aGUgc2VydmVyLgorICovCitzdGF0aWMgaW50IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVycjsKKworCXdoaWxlICh0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlzaXplID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUsIHRvdGFsX3NpemUpOworCisJCWVyciA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHNpemUsIDApOworCQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCQlzaXplLCBlcnIpOworCQlpZiAoZXJyIDw9IDApCisJCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlOworCisJCXRvdGFsX3NpemUgLT0gc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX3BhZ2U6CisJX19mcmVlX3BhZ2UocGFnZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEFsbG9jYXRlIHdyaXRlIHJlcXVlc3QgZm9yIHRoZSBzZXJ2ZXIuCisgKiBTaG91bGQgbm90IG9ubHkgZ2V0IHBhZ2VzLCBidXQgYWxzbyByZWFkIGRhdGEgZnJvbSB0aGUgbmV0d29yay4KKyAqLworc3RhdGljIGludCBkc3RfZXhwb3J0X3dyaXRlX3JlcXVlc3Qoc3RydWN0IGRzdF9zdGF0ZSAqc3QsCisJCXN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqZGF0YTsKKwlpbnQgZXJyOworCisJd2hpbGUgKHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWRhdGEgPSBrbWFwKHBhZ2UpOworCQlpZiAoIWRhdGEpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlOworCisJCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSwgdG90YWxfc2l6ZSk7CisKKwkJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgZGF0YSwgc2l6ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5tYXBfcGFnZTsKKworCQllcnIgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKKwkJaWYgKGVyciA8PSAwKQorCQkJZ290byBlcnJfb3V0X3VubWFwX3BhZ2U7CisKKwkJa3VubWFwKHBhZ2UpOworCisJCXRvdGFsX3NpemUgLT0gc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF91bm1hcF9wYWdlOgorCWt1bm1hcChwYWdlKTsKK2Vycl9vdXRfZnJlZV9wYWdlOgorCV9fZnJlZV9wYWdlKHBhZ2UpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBHcm9vdnksIHdlJ3ZlIGdvdHRlbiBhbiBJTyByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC4KKyAqIEFsbG9jYXRlIEJJTyBmcm9tIHRoZSBiaW9zZXQsIHByaXZhdGUgZGF0YSBmcm9tIHRoZSBtZW1wb29sCisgKiBhbmQgbG90cyBvZiBwYWdlcyBmb3IgSU8uCisgKi8KK2ludCBkc3RfcHJvY2Vzc19pbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnByaXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAodW5saWtlbHkoIW4tPmJkZXYpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoR0ZQX0tFUk5FTCwKKwkJCVBBR0VfQUxJR04oY21kLT5zaXplKSA+PiBQQUdFX1NISUZULAorCQkJZHN0X2Jpb19zZXQpOworCWlmICghYmlvKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXByaXYgPSAoc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqKSgoKHZvaWQgKiliaW8pIC0gc2l6ZW9mIChzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7CisKKwlwcml2LT5zdGF0ZSA9IGRzdF9zdGF0ZV9nZXQoc3QpOworCXByaXYtPmJpbyA9IGJpbzsKKworCWJpby0+YmlfcHJpdmF0ZSA9IHByaXY7CisJYmlvLT5iaV9lbmRfaW8gPSBkc3RfYmlvX2VuZF9pbzsKKwliaW8tPmJpX2Rlc3RydWN0b3IgPSBkc3RfYmlvX2Rlc3RydWN0b3I7CisJYmlvLT5iaV9iZGV2ID0gbi0+YmRldjsKKworCS8qCisJICogU2VydmVyIHNpZGUgaXMgb25seSBpbnRlcmVzdGVkIGluIHR3byBsb3cgYml0czoKKwkgKiB1cHRvZGF0ZSAoc2V0IGJ5IGl0c2VsZiBhY3R1YWxseSkgYW5kIHJ3IGJsb2NrCisJICovCisJYmlvLT5iaV9mbGFncyB8PSBjbWQtPmZsYWdzICYgMzsKKworCWJpby0+YmlfcncgPSBjbWQtPnJ3OworCWJpby0+Ymlfc2l6ZSA9IDA7CisJYmlvLT5iaV9zZWN0b3IgPSBjbWQtPnNlY3RvcjsKKworCWRzdF9iaW9fdG9fY21kKGJpbywgJnByaXYtPmNtZCwgRFNUX0lPX1JFU1BPTlNFLCBjbWQtPmlkKTsKKworCXByaXYtPmNtZC5mbGFncyA9IDA7CisJcHJpdi0+Y21kLnNpemUgPSBjbWQtPnNpemU7CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKKwkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHByaXYtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCisJCWVyciA9IGRzdF9leHBvcnRfd3JpdGVfcmVxdWVzdChzdCwgYmlvLCBjbWQtPnNpemUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkKKwkJCXJldHVybiBkc3RfZXhwb3J0X2NyeXB0byhuLCBiaW8pOworCX0gZWxzZSB7CisJCWVyciA9IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KGJpbywgY21kLT5zaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGRpcjogJWx1LCBmbGFnczogJWx4LCBwaHlzOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAorCQkJYmlvLT5iaV9ydywgYmlvX2RhdGFfZGlyKGJpbyksCisJCQliaW8tPmJpX2ZsYWdzLCBiaW8tPmJpX3BoeXNfc2VnbWVudHMpOworCisJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJYmlvX3B1dChiaW8pOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBPaywgYmxvY2sgSU8gaXMgcmVhZHksIGxldCdzIHNlbmQgaXQgYmFjayB0byB0aGUgY2xpZW50Li4uCisgKi8KK2ludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gcC0+c3RhdGU7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9ICZwLT5jbWQ7CisJaW50IGVycjsKKworCWRwcmludGsoIiVzOiBpZDogJWxsdSwgYmlvOiAlbGx1LyV1LCBjc2l6ZTogJXUsIGZsYWdzOiAlbHUsIHJ3OiAlbHUuXG4iLAorCQkJX19mdW5jX18sIGNtZC0+aWQsICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCWNtZC0+Y3NpemUsIGJpby0+YmlfZmxhZ3MsIGJpby0+YmlfcncpOworCisJZHN0X2NvbnZlcnRfY21kKGNtZCk7CisKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJaWYgKCFzdC0+c29ja2V0KSB7CisJCWVyciA9IC1FQ09OTlJFU0VUOworCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0KKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQkvKiAuLi4gb3IganVzdCBjb25maXJtYXRpb24gdGhhdCB3cml0aW5nIGhhcyBjb21wbGV0ZWQuICovCisJCWNtZC0+c2l6ZSA9IGNtZC0+Y3NpemUgPSAwOworCQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0gZWxzZSB7CisJCWVyciA9IGRzdF9zZW5kX2JpbyhzdCwgY21kLCBiaW8pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3VubG9jazsKKwl9CisKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gMDsKKworZXJyX291dF91bmxvY2s6CisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU3ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jCkBAIC0wLDAgKzEsODM5IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9kc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qCisgKiBQb2xsaW5nIG1hY2hpbmVyeS4KKyAqLworCitzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyCit7CisJcG9sbF90YWJsZSAJCXB0OworCXN0cnVjdCBkc3Rfc3RhdGUJKnN0OworfTsKKworc3RhdGljIGludCBkc3RfcXVldWVfd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IGRzdF9zdGF0ZSwgd2FpdCk7CisKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkc3RfcXVldWVfZnVuYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkLAorCQkJCSBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdCwgc3RydWN0IGRzdF9wb2xsX2hlbHBlciwgcHQpLT5zdDsKKworCXN0LT53aGVhZCA9IHdoZWFkOworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnN0LT53YWl0LCBkc3RfcXVldWVfd2FrZSk7CisJYWRkX3dhaXRfcXVldWUod2hlYWQsICZzdC0+d2FpdCk7Cit9CisKK3ZvaWQgZHN0X3BvbGxfZXhpdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlpZiAoc3QtPndoZWFkKSB7CisJCXJlbW92ZV93YWl0X3F1ZXVlKHN0LT53aGVhZCwgJnN0LT53YWl0KTsKKwkJc3QtPndoZWFkID0gTlVMTDsKKwl9Cit9CisKK2ludCBkc3RfcG9sbF9pbml0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXN0cnVjdCBkc3RfcG9sbF9oZWxwZXIgcGg7CisKKwlwaC5zdCA9IHN0OworCWluaXRfcG9sbF9mdW5jcHRyKCZwaC5wdCwgJmRzdF9xdWV1ZV9mdW5jKTsKKworCXN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCAmcGgucHQpOworCXJldHVybiAwOworfQorCisvKgorICogSGVhZGVyIHJlY2VpdmluZyBmdW5jdGlvbiAtIG1heSBibG9jay4KKyAqLworc3RhdGljIGludCBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGJsb2NrKQoreworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgZXJyOworCisJaW92Lmlvdl9iYXNlID0gZGF0YTsKKwlpb3YuaW92X2xlbiA9IHNpemU7CisKKwltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSAoYmxvY2spP01TR19XQUlUQUxMOk1TR19ET05UV0FJVDsKKworCWVyciA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAorCQkJbXNnLm1zZ19mbGFncyk7CisJaWYgKGVyciAhPSBzaXplKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlYWRlciBzZW5kaW5nIGZ1bmN0aW9uIC0gbWF5IGJsb2NrLgorICovCitpbnQgZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBtb3JlKQoreworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgZXJyOworCisJaW92Lmlvdl9iYXNlID0gZGF0YTsKKwlpb3YuaW92X2xlbiA9IHNpemU7CisKKwltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTCB8IChtb3JlKT9NU0dfTU9SRTowOworCisJZXJyID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4pOworCWlmIChlcnIgIT0gc2l6ZSkgeworCQlkcHJpbnRrKCIlczogc2l6ZTogJXUsIG1vcmU6ICVkLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgc2l6ZSwgbW9yZSwgZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQmxvY2sgYXV0b2NvbmZpZ3VyYXRpb246IHJlcXVlc3Qgc2l6ZSBvZiB0aGUgc3RvcmFnZSBhbmQgcGVybWlzc2lvbnMuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKKwljbWQtPmNtZCA9IERTVF9DRkc7CisKKwlkc3RfY29udmVydF9jbWQoY21kKTsKKworCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZHN0X2NvbnZlcnRfY21kKGNtZCk7CisKKwlpZiAoY21kLT5jbWQgIT0gRFNUX0NGRykgeworCQllcnIgPSAtRUlOVkFMOworCQlkcHJpbnRrKCIlczogY2hlY2tpbmcgcmVzdWx0OiBjbWQ6ICVkLCBzaXplIHJlcG9ydGVkOiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobi0+c2l6ZSAhPSAwKQorCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5zaXplLCBjbWQtPnNlY3Rvcik7CisJZWxzZQorCQluLT5zaXplID0gY21kLT5zZWN0b3I7CisKKwluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKKwlzdC0+cGVybWlzc2lvbnMgPSBjbWQtPnJ3OworCitvdXQ6CisJZHByaW50aygiJXM6IG46ICVwLCBlcnI6ICVkLCBzaXplOiAlbGx1LCBwZXJtaXNzaW9uOiAleC5cbiIsCisJCQlfX2Z1bmNfXywgbiwgZXJyLCBuLT5zaXplLCBzdC0+cGVybWlzc2lvbnMpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTb2NrZXQgbWFjaGluZXJ5LgorICovCisKKyNkZWZpbmUgRFNUX0RFRkFVTFRfVElNRU8JMjAwMDAKKworaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWludCBlcnI7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKKworCWVyciA9IHNvY2tfY3JlYXRlKGN0bC0+YWRkci5zYV9mYW1pbHksIGN0bC0+dHlwZSwgY3RsLT5wcm90bywgJnNvY2spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc29jay0+c2stPnNrX3NuZHRpbWVvID0gc29jay0+c2stPnNrX3JjdnRpbWVvID0KKwkJbXNlY3NfdG9famlmZmllcyhEU1RfREVGQVVMVF9USU1FTyk7CisJc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKKworCXN0LT5zb2NrZXQgPSBzdC0+cmVhZF9zb2NrZXQgPSBzb2NrOworCXJldHVybiAwOworfQorCit2b2lkIGRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlkcHJpbnRrKCIlczogc3Q6ICVwLCBzb2NrZXQ6ICVwLCBuOiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgc3QsIHN0LT5zb2NrZXQsIHN0LT5ub2RlKTsKKwlpZiAoc3QtPnNvY2tldCkgeworCQlzb2NrX3JlbGVhc2Uoc3QtPnNvY2tldCk7CisJCXN0LT5zb2NrZXQgPSBOVUxMOworCQlzdC0+cmVhZF9zb2NrZXQgPSBOVUxMOworCX0KK30KKwordm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpCit7CisJaWYgKHNrLT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQlwcmludGsoS0VSTl9JTkZPICIlcyAldS4ldS4ldS4ldTolZC5cbiIsCisJCQlzdHIsIE5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJfSBlbHNlIGlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXBpNjolZCIsCisJCQlzdHIsICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKKwl9Cit9CisKK3ZvaWQgZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWlmIChzdC0+c29ja2V0KSB7CisJCWRzdF9wb2xsX2V4aXQoc3QpOworCQlzdC0+c29ja2V0LT5vcHMtPnNodXRkb3duKHN0LT5zb2NrZXQsIDIpOworCisJCWRzdF9kdW1wX2FkZHIoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCisJCQkJIkRpc2Nvbm5lY3RlZCBwZWVyIik7CisJCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7CisJfQorfQorCitzdGF0aWMgaW50IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZzdC0+Y3RsOworCisJZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0ga2VybmVsX2Nvbm5lY3Qoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCisJCQlzdC0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4sIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCisJZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisKKwlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAorCQkJIkNvbm5lY3RlZCB0byBwZWVyIik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9yZWxlYXNlOgorCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN0YXRlIHJlc2V0IGlzIHVzZWQgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgcGVlci4KKyAqIE1heSBmYWlsLCBidXQgd2hvIGNhcmVzLCB3ZSB3aWxsIHRyeSBhZ2FpbiBsYXRlci4KKyAqLworc3RhdGljIHZvaWQgaW5saW5lIGRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKKwlkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgZHN0X3N0YXRlX3Jlc2V0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKK30KKworLyoKKyAqIEJhc2ljIG5ldHdvcmsgc2VuZGluZy9yZWNlaXZpbmcgZnVuY3Rpb25zLgorICogQmxvY2tlZCBtb2RlIGlzIHVzZWQuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9yYXcoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmJ1ZiwgdTY0IHNpemUpCit7CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92OworCWludCBlcnI7CisKKwlCVUdfT04oIXNpemUpOworCisJaW92Lmlvdl9iYXNlID0gYnVmOworCWlvdi5pb3ZfbGVuID0gc2l6ZTsKKworCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsKKworCWVyciA9IGtlcm5lbF9yZWN2bXNnKHN0LT5zb2NrZXQsICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAorCQkJbXNnLm1zZ19mbGFncyk7CisJaWYgKGVyciA8PSAwKSB7CisJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gcmVjdiBkYXRhOiBzaXplOiAlbGx1LCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgc2l6ZSwgZXJyKTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZXJyID0gLUVDT05OUkVTRVQ7CisKKwkJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUGluZyBjb21tYW5kIHRvIGVhcmx5IGRldGVjdCBmYWlsZWQgbm9kZXMuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3NlbmRfcGluZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJaW50IGVyciA9IC1FQ09OTlJFU0VUOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWlmIChzdC0+c29ja2V0KSB7CisJCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOworCisJCWNtZC0+Y21kID0gX19jcHVfdG9fYmUzMihEU1RfUElORyk7CisKKwkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKKwl9CisJZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBzdCwgc3QtPnNvY2tldCwgZXJyKTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWNlaXZpbmcgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBlaXRoZXIgcmV0dXJuIGVycm9yIG9yIHJlYWQKKyAqIHdob2xlIGJsb2NrIHJlcXVlc3QuIElmIHRoZXJlIHdhcyBubyB0cmFmZmljIGZvciBhIG9uZSBzZWNvbmQsCisgKiBzZW5kIGEgcGluZywgc2luY2UgcmVtb3RlIG5vZGUgbWF5IGRpZS4KKyAqLworaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKHNpemUgJiYgIWVycikgeworCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOworCisJCWlmICghKHJldmVudHMgJiBtYXNrKSkgeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCWZvciAoOzspIHsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQsCisJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJCWJyZWFrOworCisJCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKKworCQkJCWlmIChyZXZlbnRzICYgbWFzaykKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KEhaKSkgeworCQkJCQllcnIgPSBkc3Rfc2VuZF9waW5nKHN0KTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCisJCQkJY29udGludWU7CisJCQl9CisJCQlmaW5pc2hfd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCk7CisJCX0KKworCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJZHN0X3N0YXRlX2xvY2soc3QpOworCisJCWlmICgJCXN0LT5zb2NrZXQgJiYKKwkJCQkoc3QtPnJlYWRfc29ja2V0ID09IHN0LT5zb2NrZXQpICYmCisJCQkJKHJldmVudHMgJiBQT0xMSU4pKSB7CisJCQllcnIgPSBkc3RfZGF0YV9yZWN2X3JhdyhzdCwgZGF0YSwgc2l6ZSk7CisJCQlpZiAoZXJyID4gMCkgeworCQkJCWRhdGEgKz0gZXJyOworCQkJCXNpemUgLT0gZXJyOworCQkJCWVyciA9IDA7CisJCQl9CisJCX0KKworCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrIHx8ICFzdC0+c29ja2V0KSB7CisJCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQkJX19mdW5jX18sIHJldmVudHMsIHN0LT5zb2NrZXQsIHNpemUsIGVycik7CisJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJfQorCisJCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0KQorCQkJZXJyID0gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU2VuZCBibG9jayBhdXRvY29uZiByZXBseS4KKyAqLworc3RhdGljIGludCBkc3RfcHJvY2Vzc19jZmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCWludCBlcnI7CisKKwljbWQtPnNlY3RvciA9IG4tPnNpemU7CisJY21kLT5ydyA9IHN0LT5wZXJtaXNzaW9uczsKKworCWRzdF9jb252ZXJ0X2NtZChjbWQpOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2ZSBibG9jayBJTyBmcm9tIHRoZSBuZXR3b3JrLgorICovCitzdGF0aWMgaW50IGRzdF9yZWN2X2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJaW50IGksIGVycjsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGludCBzejsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJc3ogPSBtaW4odG90YWxfc2l6ZSwgYnYtPmJ2X2xlbik7CisKKwkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgdG90YWw6ICV1LCBsZW46ICV1LCBzejogJXUsIG9mZjogJXUuXG4iLAorCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgdG90YWxfc2l6ZSwKKwkJCWJ2LT5idl9sZW4sIHN6LCBidi0+YnZfb2Zmc2V0KTsKKworCQlkYXRhID0ga21hcChidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OworCQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBkYXRhLCBzeik7CisJCWt1bm1hcChidi0+YnZfcGFnZSk7CisKKwkJYnYtPmJ2X2xlbiA9IHN6OworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXRvdGFsX3NpemUgLT0gc3o7CisJCWlmICh0b3RhbF9zaXplID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE91ciBibG9jayBJTyBoYXMganVzdCBjb21wbGV0ZWQgYW5kIGFycml2ZWQ6IGdldCBpdC4KKyAqLworc3RhdGljIGludCBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJc3RydWN0IGRzdF90cmFucyAqdDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKKwl0ID0gZHN0X3RyYW5zX3NlYXJjaChuLCBjbWQtPmlkKTsKKwltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOworCisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWJpbyA9IHQtPmJpbzsKKworCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIGNtZF9zaXplOiAldSwgY3NpemU6ICV1LCBkaXI6ICVsdS5cbiIsCisJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGNtZC0+c2l6ZSwKKwkJY21kLT5jc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpIHsKKwkJaWYgKGJpby0+Ymlfc2l6ZSAhPSBjbWQtPnNpemUgLSBjbWQtPmNzaXplKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkgeworCQkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHQtPmNtZC5oYXNoKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJCX0KKworCQllcnIgPSBkc3RfcmVjdl9iaW8oc3QsIHQtPmJpbywgYmlvLT5iaV9zaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChkc3RfbmVlZF9jcnlwdG8obikpCisJCQlyZXR1cm4gZHN0X3RyYW5zX2NyeXB0byh0KTsKKwl9IGVsc2UgeworCQllcnIgPSAtRUJBRE1TRzsKKwkJaWYgKGNtZC0+c2l6ZSB8fCBjbWQtPmNzaXplKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZHN0X3RyYW5zX3JlbW92ZSh0KTsKKwlkc3RfdHJhbnNfcHV0KHQpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2ZSBjcnlwdG8gZGF0YS4KKyAqLworaW50IGRzdF9yZWN2X2NkYXRhKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpjZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKKwlpbnQgZXJyOworCisJaWYgKGNtZC0+Y3NpemUgIT0gYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpIHsKKwkJZHByaW50aygiJXM6IGNtZDogY21kOiAldSwgc2VjdG9yOiAlbGx1LCBzaXplOiAldSwgIgorCQkJCSJjc2l6ZTogJXUgIT0gZGlnZXN0IHNpemUgJXUuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IsIGNtZC0+c2l6ZSwKKwkJCQljbWQtPmNzaXplLCBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGNkYXRhLCBjbWQtPmNzaXplKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWNtZC0+c2l6ZSAtPSBjbWQtPmNzaXplOworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlY2VpdmUgdGhlIGNvbW1hbmQgYW5kIHN0YXJ0IGl0cyBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgaW50IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJaW50IGVyciA9IC1FSU5UUjsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisKKwkvKgorCSAqIElmIHNvY2tldCB3aWxsIGJlIHJlc2V0IGFmdGVyIHRoaXMgc3RhdGVtZW50LCB0aGVuCisJICogZHN0X2RhdGFfcmVjdigpIHdpbGwganVzdCBmYWlsIGFuZCBsb29wIHdpbGwKKwkgKiBzdGFydCBhZ2Fpbiwgc28gaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja3MuCisJICoKKwkgKiBzdC0+cmVhZF9zb2NrZXQgaXMgbmVlZGVkIHRvIHByZXZlbnRzIHN0YXRlIG1hY2hpbmUKKwkgKiBicmVha2luZyBiZXR3ZWVuIHRoaXMgZGF0YSByZWFkaW5nIGFuZCBzdWJzZXF1ZW50IG9uZQorCSAqIGluIHByb3RvY29sIHNwZWNpZmljIGZ1bmN0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiByZXNldC4KKwkgKiBJbiBjYXNlIG9mIHJlc2V0IHdlIGhhdmUgdG8gcmVhZCBuZXh0IGNvbW1hbmQgYW5kIGRvCisJICogbm90IGV4cGVjdCBkYXRhIGZvciBvbGQgY29tbWFuZCB0byBtYWdpY2FsbHkgYXBwZWFyIGluCisJICogbmV3IGNvbm5lY3Rpb24uCisJICovCisJc3QtPnJlYWRfc29ja2V0ID0gc3QtPnNvY2tldDsKKwllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2V4aXQ7CisKKwlkc3RfY29udmVydF9jbWQoY21kKTsKKworCWRwcmludGsoIiVzOiBjbWQ6ICV1LCBzaXplOiAldSwgY3NpemU6ICV1LCBpZDogJWxsdSwgIgorCQkJInNlY3RvcjogJWxsdSwgZmxhZ3M6ICVsbHgsIHJ3OiAlbGx4LlxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zaXplLAorCQkJY21kLT5jc2l6ZSwgY21kLT5pZCwgY21kLT5zZWN0b3IsCisJCQljbWQtPmZsYWdzLCBjbWQtPnJ3KTsKKworCS8qCisJICogVGhpcyBzaG91bGQgY2F0Y2ggcHJvdG9jb2wgYnJlYWthZ2UgYW5kIHJhbmRvbSBnYXJiYWdlIGluc3RlYWQgb2YgY29tbWFuZHMuCisJICovCisJaWYgKHVubGlrZWx5KGNtZC0+Y3NpemUgPiBzdC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpKSB7CisJCWVyciA9IC1FQkFETVNHOworCQlnb3RvIG91dF9leGl0OworCX0KKworCWVyciA9IC1FUFJPVE87CisJc3dpdGNoIChjbWQtPmNtZCkgeworCQljYXNlIERTVF9JT19SRVNQT05TRToKKwkJCWVyciA9IGRzdF9wcm9jZXNzX2lvX3Jlc3BvbnNlKHN0KTsKKwkJCWJyZWFrOworCQljYXNlIERTVF9JTzoKKwkJCWVyciA9IGRzdF9wcm9jZXNzX2lvKHN0KTsKKwkJCWJyZWFrOworCQljYXNlIERTVF9DRkc6CisJCQllcnIgPSBkc3RfcHJvY2Vzc19jZmcoc3QpOworCQkJYnJlYWs7CisJCWNhc2UgRFNUX1BJTkc6CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKK291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWNlaXZpbmcgdGhyZWFkLiBGb3IgdGhlIGNsaWVudCBub2RlIHdlIHNob3VsZCB0cnkgdG8gcmVjb25uZWN0LAorICogZm9yIGFjY2VwdGVkIGNsaWVudCB3ZSBqdXN0IGRyb3AgdGhlIHN0YXRlIGFuZCBleHBlY3QgaXQgdG8gcmVjb25uZWN0LgorICovCitzdGF0aWMgaW50IGRzdF9yZWN2KHZvaWQgKmluaXRfZGF0YSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHNjaGVkdWxlX2RhdGE7CisJc3RydWN0IGRzdF9ub2RlICpuID0gaW5pdF9kYXRhOworCWludCBlcnIgPSAwOworCisJZHByaW50aygiJXM6IHN0YXJ0IHN0OiAlcCwgbjogJXAsIHNjYW46ICVsdSwgbmVlZF9leGl0OiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgc3QsIG4sIG4tPnRyYW5zX3NjYW5fdGltZW91dCwgc3QtPm5lZWRfZXhpdCk7CisKKwl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0ICYmICFzdC0+bmVlZF9leGl0KSB7CisJCWVyciA9IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3QpOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKCFzdC0+Y3RsLnR5cGUpCisJCQkJYnJlYWs7CisKKwkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJYnJlYWs7CisKKwkJCWRzdF9zdGF0ZV9yZXNldChzdCk7CisJCQltc2xlZXAoMTAwMCk7CisJCX0KKwl9CisKKwlzdC0+bmVlZF9leGl0ID0gMTsKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCisJZHByaW50aygiJXM6IGZyZWVpbmcgcmVjZWl2aW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCWRzdF9zdGF0ZV9wdXQoc3QpOworCisJZHByaW50aygiJXM6IGZyZWVkIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBOZXR3b3JrIHN0YXRlIGRpZXMgaGVyZSBhbmQgYm9ybnMgY291cGxlIG9mIGxpbmVzIGJlbG93LgorICogVGhpcyBvYmplY3QgaXMgdGhlIG1haW4gbmV0d29yayBzdGF0ZSBwcm9jZXNzaW5nIGVuZ2luZToKKyAqIHNlbmRpbmcsIHJlY2VpdmluZywgcmVjb25uZWN0aW9ucywgYWxsIG5ldHdvcmsgcmVsYXRlZAorICogdGFza3MgYXJlIGhhbmRsZWQgb24gYmVoYWxmIG9mIHRoZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgZHN0X3N0YXRlX2ZyZWUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJZHByaW50aygiJXM6IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7CisJaWYgKHN0LT5jbGVhbnVwKQorCQlzdC0+Y2xlYW51cChzdCk7CisJa2ZyZWUoc3QtPmRhdGEpOworCWtmcmVlKHN0KTsKK30KKworc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3QpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJc3QtPm5vZGUgPSBuOworCXN0LT5uZWVkX2V4aXQgPSAwOworCisJc3QtPnNpemUgPSBQQUdFX1NJWkU7CisJc3QtPmRhdGEgPSBrbWFsbG9jKHN0LT5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0LT5kYXRhKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXNwaW5fbG9ja19pbml0KCZzdC0+cmVxdWVzdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3QtPnJlcXVlc3RfbGlzdCk7CisKKwltdXRleF9pbml0KCZzdC0+c3RhdGVfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc3QtPnRocmVhZF93YWl0KTsKKworCS8qCisJICogT25lIGZvciBwcm9jZXNzaW5nIHRocmVhZCwgYW5vdGhlciBvbmUgZm9yIG5vZGUgaXRzZWxmLgorCSAqLworCWF0b21pY19zZXQoJnN0LT5yZWZjbnQsIDIpOworCisJZHByaW50aygiJXM6IHN0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgc3QsIHN0LT5ub2RlKTsKKworCXJldHVybiBzdDsKKworZXJyX291dF9mcmVlOgorCWtmcmVlKHN0KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitpbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0LT5ub2RlLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAorCQkJZHN0X3JlY3YsIHN0LCBNQVhfU0NIRURVTEVfVElNRU9VVCwgc3QtPm5vZGUpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjbGllbnQncyBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgcGVlcjogYWxsb2NhdGUgc3RhdGUsCisgKiBjb25uZWN0IGFuZCBwZXJmb3JtIGJsb2NrIElPIGF1dG9jb25maWd1cmF0aW9uLgorICovCitpbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKQoreworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OworCWludCBlcnIgPSAtRU5PTUVNOworCisJc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7CisJaWYgKElTX0VSUihzdCkpIHsKKwkJZXJyID0gUFRSX0VSUihzdCk7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKwltZW1jcHkoJnN0LT5jdGwsIHIsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7CisKKwllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX2RhdGE7CisKKwllcnIgPSBkc3RfcmVxdWVzdF9yZW1vdGVfY29uZmlnKHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdF9jb25uZWN0ZWQ7CisJbi0+c3RhdGUgPSBzdDsKKworCWVyciA9IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdF9jb25uZWN0ZWQ6CisJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKK2Vycl9vdXRfZnJlZV9kYXRhOgorCWRzdF9zdGF0ZV9mcmVlKHN0KTsKK2Vycl9vdXRfZXhpdDoKKwluLT5zdGF0ZSA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQuXG4iLAorCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdC0+cmVmY250KSkKKwkJZHN0X3N0YXRlX2ZyZWUoc3QpOworfQorCisvKgorICogU2VuZCBibG9jayBJTyB0byB0aGUgbmV0d29yayBvbmUgYnkgb25lIHVzaW5nIHplcm8tY29weSAtPnNlbmRwYWdlKCkuCisgKi8KK2ludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJnN0LT5ub2RlLT5jcnlwdG87CisJaW50IGVyciwgaSA9IDA7CisJaW50IGZsYWdzID0gTVNHX1dBSVRBTEw7CisKKwllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCisJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCkgKyBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwgYmlvLT5iaV92Y250KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJaWYgKGkgPCBiaW8tPmJpX3ZjbnQgLSAxKQorCQkJZmxhZ3MgfD0gTVNHX01PUkU7CisKKwkJZXJyID0ga2VybmVsX3NlbmRwYWdlKHN0LT5zb2NrZXQsIGJ2LT5idl9wYWdlLCBidi0+YnZfb2Zmc2V0LAorCQkJCWJ2LT5idl9sZW4sIGZsYWdzKTsKKwkJaWYgKGVyciA8PSAwKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlkcHJpbnRrKCIlczogJWQvJWQsIGZsYWdzOiAleCwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgaSwgYmlvLT5iaV92Y250LCBmbGFncywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU2VuZCB0cmFuc2FjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXIuCisgKi8KK2ludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCWludCBlcnI7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSB0LT5uLT5zdGF0ZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87CisKKwlkc3RfY29udmVydF9jbWQoJnQtPmNtZCk7CisKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJaWYgKCFzdC0+c29ja2V0KSB7CisJCWVyciA9IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0KKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQllcnIgPSBkc3Rfc2VuZF9iaW8oc3QsICZ0LT5jbWQsIHQtPmJpbyk7CisJfSBlbHNlIHsKKwkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgJnQtPmNtZCwKKwkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKKwl9CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3Jlc2V0OworCisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcmVzZXQ6CisJZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7CitlcnJfb3V0X3VubG9jazoKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlZDRlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdGhyZWFkX3Bvb2wuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qCisgKiBUaHJlYWQgcG9vbCBhYnN0cmFjdGlvbiBhbGxvd3MgdG8gc2NoZWR1bGUgYSB3b3JrIHRvIGJlIHBlcmZvcm1lZAorICogb24gYmVoYWxmIG9mIGtlcm5lbCB0aHJlYWQuIE9uZSBkb2VzIG5vdCBvcGVyYXRlIHdpdGggdGhyZWFkcyBpdHNlbGYsCisgKiBpbnN0ZWFkIHVzZXIgcHJvdmlkZXMgc2V0dXAgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGZvciB0aHJlYWQgcG9vbCBpdHNlbGYsCisgKiBhbmQgYWN0aW9uIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBmb3IgZWFjaCBzdWJtaXR0ZWQgd29yay4KKyAqCisgKiBFYWNoIHdvcmtlciBoYXMgcHJpdmF0ZSBkYXRhIGluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgYW5kIGRhdGEsCisgKiBwcm92aWRlZCBieSB1c2VyIGF0IHNjaGVkdWxpbmcgdGltZS4KKyAqCisgKiBXaGVuIGFjdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQsIHRocmVhZCBjYW4gbm90IGJlIHVzZWQgYnkgb3RoZXIgdXNlcnMsCisgKiBpbnN0ZWFkIHRoZXkgd2lsbCBzbGVlcCB1bnRpbCB0aGVyZSBpcyBmcmVlIHRocmVhZCB0byBwaWNrIHRoZWlyIHdvcmsuCisgKi8KK3N0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtlcl9lbnRyeTsKKworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOworCisJc3RydWN0IHRocmVhZF9wb29sCSpwb29sOworCisJaW50CQkJZXJyb3I7CisJaW50CQkJaGFzX2RhdGE7CisJaW50CQkJbmVlZF9leGl0OworCXVuc2lnbmVkIGludAkJaWQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCisJdm9pZAkJCSpwcml2YXRlOworCXZvaWQJCQkqc2NoZWR1bGVfZGF0YTsKKworCWludAkJCSgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSk7CisJdm9pZAkJCSgqIGNsZWFudXApKHZvaWQgKnByaXZhdGUpOworfTsKKworc3RhdGljIHZvaWQgdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdykKK3sKKwlrdGhyZWFkX3N0b3Aody0+dGhyZWFkKTsKKworCXctPmNsZWFudXAody0+cHJpdmF0ZSk7CisJa2ZyZWUodyk7Cit9CisKKy8qCisgKiBDYWxsZWQgdG8gbWFyayB0aHJlYWQgYXMgcmVhZHkgYW5kIGFsbG93IHVzZXJzIHRvIHNjaGVkdWxlIG5ldyB3b3JrLgorICovCitzdGF0aWMgdm9pZCB0aHJlYWRfcG9vbF93b3JrZXJfbWFrZV9yZWFkeShzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3KQoreworCXN0cnVjdCB0aHJlYWRfcG9vbCAqcCA9IHctPnBvb2w7CisKKwltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwlpZiAoIXctPm5lZWRfZXhpdCkgeworCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+cmVhZHlfbGlzdCk7CisJCXctPmhhc19kYXRhID0gMDsKKwkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwkJd2FrZV91cCgmcC0+d2FpdCk7CisJfSBlbHNlIHsKKwkJcC0+dGhyZWFkX251bS0tOworCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKKwkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7CisJfQorfQorCisvKgorICogVGhyZWFkIGFjdGlvbiBsb29wOiB3YWl0cyB1bnRpbCB0aGVyZSBpcyBuZXcgd29yay4KKyAqLworc3RhdGljIGludCB0aHJlYWRfcG9vbF93b3JrZXJfZnVuYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncgPSBkYXRhOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHctPndhaXQsCisJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdy0+aGFzX2RhdGEpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKworCQlpZiAoIXctPmhhc19kYXRhKQorCQkJY29udGludWU7CisKKwkJdy0+YWN0aW9uKHctPnByaXZhdGUsIHctPnNjaGVkdWxlX2RhdGEpOworCQl0aHJlYWRfcG9vbF93b3JrZXJfbWFrZV9yZWFkeSh3KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBzaW5nbGUgd29ya2VyIHdpdGhvdXQgc3BlY2lmeWluZyB3aGljaCBvbmUuCisgKi8KK3ZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApCit7CisJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdyA9IE5VTEw7CisKKwl3aGlsZSAoIXcgJiYgcC0+dGhyZWFkX251bSkgeworCQl3YWl0X2V2ZW50KHAtPndhaXQsICFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSB8fCAhcC0+dGhyZWFkX251bSk7CisKKwkJZHByaW50aygiJXM6IGxvY2tpbmcgbGlzdF9lbXB0eTogJWQsIHRocmVhZF9udW06ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksIHAtPnRocmVhZF9udW0pOworCisJCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSkgeworCQkJdyA9IGxpc3RfZmlyc3RfZW50cnkoJnAtPnJlYWR5X2xpc3QsCisJCQkJCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIsCisJCQkJCXdvcmtlcl9lbnRyeSk7CisKKwkJCWRwcmludGsoIiVzOiBkZWxldGluZyB3OiAlcCwgdGhyZWFkX251bTogJWQsIGxpc3Q6ICVwIFslcC4lcF0uXG4iLAorCQkJCQlfX2Z1bmNfXywgdywgcC0+dGhyZWFkX251bSwgJnAtPnJlYWR5X2xpc3QsCisJCQkJCXAtPnJlYWR5X2xpc3QucHJldiwgcC0+cmVhZHlfbGlzdC5uZXh0KTsKKworCQkJcC0+dGhyZWFkX251bS0tOworCQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisJfQorCisJaWYgKHcpCisJCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOworCWRwcmludGsoIiVzOiBkZWxldGVkIHc6ICVwLCB0aHJlYWRfbnVtOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgdywgcC0+dGhyZWFkX251bSk7Cit9CisKKy8qCisgKiBSZW1vdmUgYSB3b3JrZXIgd2l0aCBnaXZlbiBJRC4KKyAqLwordm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7CisJaW50IGZvdW5kID0gMDsKKworCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKKwkJaWYgKHctPmlkID09IGlkKSB7CisJCQlmb3VuZCA9IDE7CisJCQlwLT50aHJlYWRfbnVtLS07CisJCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5hY3RpdmVfbGlzdCwgd29ya2VyX2VudHJ5KSB7CisJCQlpZiAody0+aWQgPT0gaWQpIHsKKwkJCQl3LT5uZWVkX2V4aXQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCisJaWYgKGZvdW5kKQorCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKK30KKworLyoKKyAqIEFkZCBuZXcgd29ya2VyIHRocmVhZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuCisgKiBJZiBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmYWlscywgcmV0dXJuIGVycm9yLgorICovCitpbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGludCBpZCwKKwkJdm9pZCAqKCogaW5pdCkodm9pZCAqcHJpdmF0ZSksCisJCXZvaWQgKCogY2xlYW51cCkodm9pZCAqcHJpdmF0ZSksCisJCXZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdzsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXctPnBvb2wgPSBwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnctPndhaXQpOworCXctPmNsZWFudXAgPSBjbGVhbnVwOworCXctPmlkID0gaWQ7CisKKwl3LT50aHJlYWQgPSBrdGhyZWFkX3J1bih0aHJlYWRfcG9vbF93b3JrZXJfZnVuYywgdywgIiVzIiwgbmFtZSk7CisJaWYgKElTX0VSUih3LT50aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIody0+dGhyZWFkKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJdy0+cHJpdmF0ZSA9IGluaXQocHJpdmF0ZSk7CisJaWYgKElTX0VSUih3LT5wcml2YXRlKSkgeworCQllcnIgPSBQVFJfRVJSKHctPnByaXZhdGUpOworCQlnb3RvIGVycl9vdXRfc3RvcF90aHJlYWQ7CisJfQorCisJbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOworCXAtPnRocmVhZF9udW0rKzsKKwltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3N0b3BfdGhyZWFkOgorCWt0aHJlYWRfc3RvcCh3LT50aHJlYWQpOworZXJyX291dF9mcmVlOgorCWtmcmVlKHcpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSB3aG9sZSBwb29sLgorICovCit2b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKQoreworCXdoaWxlIChwLT50aHJlYWRfbnVtKSB7CisJCWRwcmludGsoIiVzOiBudW06ICVkLlxuIiwgX19mdW5jX18sIHAtPnRocmVhZF9udW0pOworCQl0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHApOworCX0KKworCWtmcmVlKHApOworfQorCisvKgorICogQ3JlYXRlIGEgcG9vbCB3aXRoIGdpdmVuIG51bWJlciBvZiB0aHJlYWRzLgorICogVGhleSB3aWxsIGhhdmUgc2VxdWVudGlhbCBJRHMgc3RhcnRlZCBmcm9tIHplcm8uCisgKi8KK3N0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCisJCXZvaWQgKigqIGluaXQpKHZvaWQgKnByaXZhdGUpLAorCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKnByaXZhdGUpLAorCQl2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncsICp0bXA7CisJc3RydWN0IHRocmVhZF9wb29sICpwOworCWludCBlcnIgPSAtRU5PTUVNOworCWludCBpOworCisJcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlYWRfcG9vbCksIEdGUF9LRVJORUwpOworCWlmICghcCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwLT53YWl0KTsKKwltdXRleF9pbml0KCZwLT50aHJlYWRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnAtPnJlYWR5X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwLT5hY3RpdmVfbGlzdCk7CisJcC0+dGhyZWFkX251bSA9IDA7CisKKwlmb3IgKGk9MDsgaTxudW07ICsraSkgeworCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHAsIG5hbWUsIGksIGluaXQsCisJCQkJY2xlYW51cCwgcHJpdmF0ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7CisJfQorCisJcmV0dXJuIHA7CisKK2Vycl9vdXRfZnJlZV9hbGw6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgeworCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKKwkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7CisJfQorCWtmcmVlKHApOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qCisgKiBTY2hlZHVsZSBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiBvbiBhIGdpdmVuIHRocmVhZCwKKyAqIHByb3ZpZGVkIElEIHBvaW50ZXIgaGFzIHRvIG1hdGNoIHByZXZpb3VzbHkgc3RvcmVkCisgKiBwcml2YXRlIGRhdGEuCisgKi8KK2ludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJaW50ICgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpCit7CisJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdywgKnRtcCwgKndvcmtlciA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwl3aGlsZSAoIXdvcmtlciAmJiAhZXJyKSB7CisJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwLT53YWl0LAorCQkJCSFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSwKKwkJCQl0aW1lb3V0KTsKKworCQlpZiAoIXRpbWVvdXQpIHsKKwkJCWVyciA9IC1FVElNRURPVVQ7CisJCQlicmVhazsKKwkJfQorCisJCXdvcmtlciA9IE5VTEw7CisJCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgeworCQkJaWYgKGlkICYmIGlkICE9IHctPnByaXZhdGUpCisJCQkJY29udGludWU7CisKKwkJCXdvcmtlciA9IHc7CisKKwkJCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5hY3RpdmVfbGlzdCk7CisKKwkJCWVyciA9IHNldHVwKHctPnByaXZhdGUsIGRhdGEpOworCQkJaWYgKCFlcnIpIHsKKwkJCQl3LT5zY2hlZHVsZV9kYXRhID0gZGF0YTsKKwkJCQl3LT5hY3Rpb24gPSBhY3Rpb247CisJCQkJdy0+aGFzX2RhdGEgPSAxOworCQkJCXdha2VfdXAoJnctPndhaXQpOworCQkJfSBlbHNlIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+cmVhZHlfbGlzdCk7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTY2hlZHVsZSBleGVjdXRpb24gb24gYXJiaXRyYXJ5IHRocmVhZCBmcm9tIHRoZSBwb29sLgorICovCitpbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGUoc3RydWN0IHRocmVhZF9wb29sICpwLAorCQlpbnQgKCogc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAorCQlpbnQgKCogYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0KQoreworCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHAsIHNldHVwLAorCQkJYWN0aW9uLCBkYXRhLCB0aW1lb3V0LCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdkMzcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvZHN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworLyoKKyAqIFRyYW5zYWN0aW9uIG1lbW9yeSBwb29sIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X21lbXBvb2xfbnVtID0gMzI7Cittb2R1bGVfcGFyYW0oZHN0X21lbXBvb2xfbnVtLCBpbnQsIDA2NDQpOworCisvKgorICogVHJhbnNhY3Rpb24gdHJlZSBtYW5hZ2VtZW50LgorICovCitzdGF0aWMgaW5saW5lIGludCBkc3RfdHJhbnNfY21wKGRzdF9nZW5fdCBnZW4sIGRzdF9nZW5fdCBuZXcpCit7CisJaWYgKGdlbiA8IG5ldykKKwkJcmV0dXJuIDE7CisJaWYgKGdlbiA+IG5ldykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZHN0X3RyYW5zICpkc3RfdHJhbnNfc2VhcmNoKHN0cnVjdCBkc3Rfbm9kZSAqbm9kZSwgZHN0X2dlbl90IGdlbikKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZub2RlLT50cmFuc19yb290OworCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgZHN0X3RyYW5zICp0LCAqcmV0ID0gTlVMTDsKKwlpbnQgY21wOworCisJd2hpbGUgKG4pIHsKKwkJdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKKworCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgZ2VuKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlkcHJpbnRrKCIlczogJXMgdHJhbnNhY3Rpb246IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sCisJCQkocmV0KT8iZm91bmQiOiJub3QgZm91bmQiLCBnZW4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkc3RfdHJhbnNfaW5zZXJ0KHN0cnVjdCBkc3RfdHJhbnMgKm5ldykKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZuZXctPm4tPnRyYW5zX3Jvb3Q7CisJc3RydWN0IHJiX25vZGUgKipuID0gJnJvb3QtPnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkc3RfdHJhbnMgKnJldCA9IE5VTEwsICp0OworCWludCBjbXA7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisKKwkJdCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOworCisJCWNtcCA9IGRzdF90cmFuc19jbXAodC0+Z2VuLCBuZXctPmdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbmV3LT5zZW5kX3RpbWUgPSBqaWZmaWVzOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCIlczogZXhpc3Q6IG9sZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LCAiCisJCQkJIm5ldzogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LlxuIiwKKwkJCV9fZnVuY19fLAorCQkJcmV0LT5nZW4sICh1NjQpcmV0LT5iaW8tPmJpX3NlY3RvciwKKwkJCXJldC0+YmlvLT5iaV9zaXplLCByZXQtPnNlbmRfdGltZSwKKwkJCW5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCisJCQluZXctPmJpby0+Ymlfc2l6ZSwgbmV3LT5zZW5kX3RpbWUpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlyYl9saW5rX25vZGUoJm5ldy0+dHJhbnNfZW50cnksIHBhcmVudCwgbik7CisJcmJfaW5zZXJ0X2NvbG9yKCZuZXctPnRyYW5zX2VudHJ5LCByb290KTsKKworCWRwcmludGsoIiVzOiBpbnNlcnRlZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LlxuIiwKKwkJX19mdW5jX18sIG5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCisJCW5ldy0+YmlvLT5iaV9zaXplLCBuZXctPnNlbmRfdGltZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKKworCWlmICh0LT50cmFuc19lbnRyeS5yYl9wYXJlbnRfY29sb3IpIHsKKwkJcmJfZXJhc2UoJnQtPnRyYW5zX2VudHJ5LCAmbi0+dHJhbnNfcm9vdCk7CisJCXQtPnRyYW5zX2VudHJ5LnJiX3BhcmVudF9jb2xvciA9IDA7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZHN0X3RyYW5zX3JlbW92ZShzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCWludCByZXQ7CisJc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKKworCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOworCXJldCA9IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOworCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2hlbiB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgYW5kIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzLAorICogd2UgY29tcGxldGUgYXBwcmlhdGUgYmxvY2sgSU8gcmVxdWVzdCB3aXRoIGdpdmVuIGVycm9yIHN0YXR1cy4KKyAqLwordm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnQtPnJlZmNudCkpIHsKKwkJc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOworCisJCWRwcmludGsoIiVzOiBjb21wbGV0ZWQgdDogJXAsIGdlbjogJWxsdSwgYmlvOiAlcC5cbiIsCisJCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgYmlvKTsKKworCQliaW9fZW5kaW8oYmlvLCB0LT5lcnJvcik7CisJCWJpb19wdXQoYmlvKTsKKworCQlkc3Rfbm9kZV9wdXQodC0+bik7CisJCW1lbXBvb2xfZnJlZSh0LCB0LT5uLT50cmFuc19wb29sKTsKKwl9Cit9CisKKy8qCisgKiBQcm9jZXNzIGdpdmVuIGJsb2NrIElPIHJlcXVlc3Q6IGFsbG9jYXRlIHRyYW5zYWN0aW9uLCBpbnNlcnQgaXQgaW50byB0aGUgdHJlZQorICogYW5kIHNlbmQvc2NoZWR1bGUgY3J5cHRvIHByb2Nlc3NpbmcuCisgKi8KK2ludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRzdF90cmFucyAqdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXQgPSBtZW1wb29sX2FsbG9jKG4tPnRyYW5zX3Bvb2wsIEdGUF9OT0ZTKTsKKwlpZiAoIXQpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJdC0+biA9IGRzdF9ub2RlX2dldChuKTsKKwl0LT5iaW8gPSBiaW87CisJdC0+ZXJyb3IgPSAwOworCXQtPnJldHJpZXMgPSAwOworCWF0b21pY19zZXQoJnQtPnJlZmNudCwgMSk7CisJdC0+Z2VuID0gYXRvbWljX2xvbmdfaW5jX3JldHVybigmbi0+Z2VuKTsKKworCXQtPmVuYyA9IGJpb19kYXRhX2RpcihiaW8pOworCWRzdF9iaW9fdG9fY21kKGJpbywgJnQtPmNtZCwgRFNUX0lPLCB0LT5nZW4pOworCisJbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7CisJZXJyID0gZHN0X3RyYW5zX2luc2VydCh0KTsKKwltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJZHByaW50aygiJXM6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBkaXIvZW5jOiAlZCwgbmVlZF9jcnlwdG86ICVkLlxuIiwKKwkJCV9fZnVuY19fLCB0LT5nZW4sICh1NjQpYmlvLT5iaV9zZWN0b3IsCisJCQliaW8tPmJpX3NpemUsIHQtPmVuYywgZHN0X25lZWRfY3J5cHRvKG4pKTsKKworCWlmIChkc3RfbmVlZF9jcnlwdG8obikgJiYgdC0+ZW5jKQorCQlkc3RfdHJhbnNfY3J5cHRvKHQpOworCWVsc2UKKwkJZHN0X3RyYW5zX3NlbmQodCk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWRzdF9ub2RlX3B1dChuKTsKKwltZW1wb29sX2ZyZWUodCwgbi0+dHJhbnNfcG9vbCk7CitlcnJfb3V0X2V4aXQ6CisJYmlvX2VuZGlvKGJpbywgZXJyKTsKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNjYW4gZm9yIHRpbWVvdXQvc3RhbGUgdHJhbnNhY3Rpb25zLgorICogRWFjaCB0cmFuc2FjdGlvbiBpcyBiZWluZyByZXNlbnQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGVycm9yIGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGRzdF90cmFuc19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzdF9ub2RlLCB0cmFuc193b3JrLndvcmspOworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCXN0cnVjdCBkc3RfdHJhbnMgKnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbi0+dHJhbnNfc2Nhbl90aW1lb3V0OworCWludCBudW0gPSAxMCAqIG4tPnRyYW5zX21heF9yZXRyaWVzOworCisJbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7CisKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgeworCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOworCisJCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIodC0+c2VuZF90aW1lICsgdGltZW91dCwgamlmZmllcykKKwkJCQkmJiB0LT5yZXRyaWVzID09IDApCisJCQlicmVhazsKKyNpZiAwCisJCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcywgcmV0cmllczogJXUsIG1heDogJXUuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSwKKwkJCXQtPnJldHJpZXMsIG4tPnRyYW5zX21heF9yZXRyaWVzKTsKKyNlbmRpZgorCQlpZiAoLS1udW0gPT0gMCkKKwkJCWJyZWFrOworCisJCWRzdF90cmFuc19nZXQodCk7CisKKwkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7CisKKwkJaWYgKHRpbWVvdXQgJiYgKCsrdC0+cmV0cmllcyA8IG4tPnRyYW5zX21heF9yZXRyaWVzKSkgeworCQkJZHN0X3RyYW5zX3NlbmQodCk7CisJCX0gZWxzZSB7CisJCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKKwkJCWRzdF90cmFuc19wdXQodCk7CisJCX0KKworCQlkc3RfdHJhbnNfcHV0KHQpOworCX0KKworCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7CisKKwkvKgorCSAqIElmIG5vIHRpbWVvdXQgc3BlY2lmaWVkIHRoZW4gc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgZXhpdGluZyBwcm9jZXNzLAorCSAqIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBzY2FubmluZyBwcm9jZXNzIGFnYWluLgorCSAqLworCWlmICh0aW1lb3V0KSB7CisJCWlmICghbnVtKQorCQkJdGltZW91dCA9IEhaOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm4tPnRyYW5zX3dvcmssIHRpbWVvdXQpOworCX0KK30KKworLyoKKyAqIEZsdXNoIGFsbCB0cmFuc2FjdGlvbnMgYW5kIG1hcmsgdGhlbSBhcyB0aW1lZCBvdXQuCisgKiBEZXN0cm95IHRyYW5zYWN0aW9uIHBvb2xzLgorICovCit2b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXN0cnVjdCBkc3RfdHJhbnMgKnQ7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CisKKwlpZiAoIW4tPnRyYW5zX2NhY2hlKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogbjogJXAsIGNhbmNlbGxpbmcgdGhlIHdvcmsuXG4iLCBfX2Z1bmNfXywgbik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZuLT50cmFuc193b3JrKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWRwcmludGsoIiVzOiBuOiAlcCwgd29yayBoYXMgYmVlbiBjYW5jZWxsZWQuXG4iLCBfX2Z1bmNfXywgbik7CisKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgeworCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOworCisJCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcy5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBuLT5uYW1lKTsKKworCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKKworCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7CisJCWRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOworCQlkc3RfdHJhbnNfcHV0KHQpOworCX0KKworCW1lbXBvb2xfZGVzdHJveShuLT50cmFuc19wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBzdG9yYWdlIGZvciBnaXZlbiBub2RlLgorICogVHJhbnNhY3Rpb24gc3RvcmVzIG5vdCBvbmx5IGNvbnRyb2wgaW5mb3JtYXRpb24sCisgKiBidXQgYWxzbyBuZXR3b3JrIGNvbW1hbmQgYW5kIGNyeXB0byBkYXRhIChpZiBuZWVkZWQpCisgKiB0byByZWR1Y2UgbnVtYmVyIG9mIGFsbG9jYXRpb25zLiBUaHVzIHRyYW5zYWN0aW9uIHNpemUKKyAqIGRpZmZlcnMgZnJvbSBub2RlIHRvIG5vZGUuCisgKi8KK2ludCBkc3Rfbm9kZV90cmFuc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJLyoKKwkgKiBXZSBuZWVkIHRoaXMsIHNpbmNlIG5vZGUgd2l0aCBnaXZlbiBuYW1lIGNhbiBiZSBkcm9wcGVkIGZyb20gdGhlCisJICogaGFzaCB0YWJsZSwgYnV0IGJlIHN0aWxsIGFsaXZlLCBzbyBzdWJzZXF1ZW50IGNyZWF0aW9uIG9mIHRoZSBub2RlCisJICogd2l0aCB0aGUgc2FtZSBuYW1lIG1heSBjb2xsaWRlIHdpdGggZXhpc3RpbmcgY2FjaGUgbmFtZS4KKwkgKi8KKworCXNucHJpbnRmKG4tPmNhY2hlX25hbWUsIHNpemVvZihuLT5jYWNoZV9uYW1lKSwgIiVzLSVwIiwgbi0+bmFtZSwgbik7CisKKwluLT50cmFuc19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG4tPmNhY2hlX25hbWUsCisJCQlzaXplICsgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplLAorCQkJMCwgMCwgTlVMTCk7CisJaWYgKCFuLT50cmFuc19jYWNoZSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwluLT50cmFuc19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKGRzdF9tZW1wb29sX251bSwgbi0+dHJhbnNfY2FjaGUpOworCWlmICghbi0+dHJhbnNfcG9vbCkKKwkJZ290byBlcnJfb3V0X2NhY2hlX2Rlc3Ryb3k7CisKKwltdXRleF9pbml0KCZuLT50cmFuc19sb2NrKTsKKwluLT50cmFuc19yb290ID0gUkJfUk9PVDsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZuLT50cmFuc193b3JrLCBkc3RfdHJhbnNfc2Nhbik7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuLT50cmFuc193b3JrLCBuLT50cmFuc19zY2FuX3RpbWVvdXQpOworCisJZHByaW50aygiJXM6IG46ICVwLCBzaXplOiAldSwgY3J5cHRvOiAldS5cbiIsCisJCV9fZnVuY19fLCBuLCBzaXplLCBuLT5jcnlwdG8uY3J5cHRvX2F0dGFjaGVkX3NpemUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfY2FjaGVfZGVzdHJveToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOworZXJyX291dF9leGl0OgorCXJldHVybiAtRU5PTUVNOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmgKaW5kZXggY2VjZGNmMy4uNGM0Y2NiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oCkBAIC0yMSw4ICsyMSw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqICRJZDogYml0X29wZXJhdGlvbnMuaCx2IDEuMTEgMjAwNi8xMS8yOCAxNTozNzowMyBzdGV2ZXUgRXhwICQKICAqLwogCiAvKiEgXGZpbGUgKi8KQEAgLTM0LDcgKzMyLDcgQEAKIC8qISBcYnJpZWYgRmluZCB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBoaWdoZXN0IHNldCBiaXQgaW4gYSB3b3JkCiAgICAgXHBhcmFtIGJpdHMgVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQKICAgICBccmV0dXJuIFRoZSBiaXQgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdG9wX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3N0YXRpYyBpbmxpbmUgaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCiB7CiAJaW50IHJlczsKIApAQCAtNTAsNyArNDgsNyBAQAogLyohIFxicmllZiBGaW5kIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGxvd2VzdCBzZXQgYml0IGluIGEgd29yZAogICAgIFxwYXJhbSBiaXRzIFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkCiAgICAgXHJldHVybiBUaGUgYml0IG51bWJlciBvZiB0aGUgbG93ZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3N0YXRpYyBpbmxpbmUgaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCiB7CiAJaW50IHJlczsKIApAQCAtNjMsNyArNjEsNyBAQAogCXJldHVybiByZXM7CiB9CiAjZWxzZQotc3RhdGljIF9faW5saW5lX18gaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCitzdGF0aWMgaW5saW5lIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQogewogCWludCBpOwogCkBAIC05Myw3ICs5MSw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBib3R0b21fYml0KHVuc2lnbmVkIGludCBiaXRzKQorc3RhdGljIGlubGluZSBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKIHsKIAlpbnQgaTsKIApAQCAtMTI3LDcgKzEyNSw3IEBACiAvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGEgYnl0ZS4KICAgICBccGFyYW0gZGF0YSBUaGUgYnl0ZSB0byBiZSByZXZlcnNlZC4KICAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLwotc3RhdGljIF9faW5saW5lX18gdWludDhfdCBiaXRfcmV2ZXJzZTgodWludDhfdCB4KQorc3RhdGljIGlubGluZSB1aW50OF90IGJpdF9yZXZlcnNlOCh1aW50OF90IHgpCiB7CiAjaWYgZGVmaW5lZChfX2kzODZfXykgIHx8ICBkZWZpbmVkKF9feDg2XzY0X18pCiAJLyogSWYgbXVsdGlwbHkgaXMgZmFzdCAqLwpAQCAtMTcyLDMyICsxNzAsMzIgQEAKIHVpbnQxNl90IG1ha2VfbWFzazE2KHVpbnQxNl90IHgpOwogCiAvKiEgXGJyaWVmIEZpbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IG9uZSBpbiBhIHdvcmQsIGFuZCByZXR1cm4gYSB3b3JkCi0gICAgICAgICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCisJICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCiAgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCiAgICAgXHJldHVybiBUaGUgd29yZCB3aXRoIHRoZSBzaW5nbGUgc2V0IGJpdC4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IGxlYXN0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGxlYXN0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCiB7Ci0JcmV0dXJuICh4ICYgKC0oaW50MzJfdCkgeCkpOworCXJldHVybiB4ICYgKC0oaW50MzJfdCkgeCk7CiB9CiAKIC8qISBcYnJpZWYgRmluZCB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaW4gYSB3b3JkLCBhbmQgcmV0dXJuIGEgd29yZAotICAgICAgICAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgorCSAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgogICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgogICAgIFxyZXR1cm4gVGhlIHdvcmQgd2l0aCB0aGUgc2luZ2xlIHNldCBiaXQuICovCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBtb3N0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG1vc3Rfc2lnbmlmaWNhbnRfb25lMzIodWludDMyX3QgeCkKIHsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKIAlyZXR1cm4gMSA8PCB0b3BfYml0KHgpOwogI2Vsc2UKIAl4ID0gbWFrZV9tYXNrMzIoeCk7Ci0JcmV0dXJuICh4IF4gKHggPj4gMSkpOworCXJldHVybiB4IF4gKHggPj4gMSk7CiAjZW5kaWYKIH0KIAogLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSBieXRlLgogICAgIFxwYXJhbSB4IFRoZSBieXRlIHRvIGJlIGNoZWNrZWQuCiAgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5OCh1aW50OF90IHgpCitzdGF0aWMgaW5saW5lIGludCBwYXJpdHk4KHVpbnQ4X3QgeCkKIHsKIAl4ID0gKHggXiAoeCA+PiA0KSkgJiAweDBGOwogCXJldHVybiAoMHg2OTk2ID4+IHgpICYgMTsKQEAgLTIwNiw3ICsyMDQsNyBAQAogLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSAxNiBiaXQgd29yZC4KICAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBjaGVja2VkLgogICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTE2KHVpbnQxNl90IHgpCitzdGF0aWMgaW5saW5lIGludCBwYXJpdHkxNih1aW50MTZfdCB4KQogewogCXggXj0gKHggPj4gOCk7CiAJeCA9ICh4IF4gKHggPj4gNCkpICYgMHgwRjsKQEAgLTIxNiw3ICsyMTQsNyBAQAogLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSAzMiBiaXQgd29yZC4KICAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBjaGVja2VkLgogICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTMyKHVpbnQzMl90IHgpCitzdGF0aWMgaW5saW5lIGludCBwYXJpdHkzMih1aW50MzJfdCB4KQogewogCXggXj0gKHggPj4gMTYpOwogCXggXj0gKHggPj4gOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKaW5kZXggZmQ0MDA3ZS4uNmQ3MjE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYwpAQCAtMjcsOCArMjcsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiAkSWQ6IGVjaG8uYyx2IDEuMjAgMjAwNi8xMi8wMSAxODowMDo0OCBzdGV2ZXUgRXhwICQKICAqLwogCiAvKiEgXGZpbGUgKi8KQEAgLTExMywxNyArMTExLDE3IEBACiAKICNkZWZpbmUgTUlOX1RYX1BPV0VSX0ZPUl9BREFQVElPTiAgIDY0CiAjZGVmaW5lIE1JTl9SWF9QT1dFUl9GT1JfQURBUFRJT04gICA2NAotI2RlZmluZSBEVERfSEFOR09WRVIgICAgICAgICAgICAgICA2MDAJLyogNjAwIHNhbXBsZXMsIG9yIDc1bXMgICAgICovCi0jZGVmaW5lIERDX0xPRzJCRVRBICAgICAgICAgICAgICAgICAgMwkvKiBsb2cyKCkgb2YgREMgZmlsdGVyIEJldGEgKi8KKyNkZWZpbmUgRFREX0hBTkdPVkVSCQkgNjAwCS8qIDYwMCBzYW1wbGVzLCBvciA3NW1zICAgICAqLworI2RlZmluZSBEQ19MT0cyQkVUQQkJICAgIDMJLyogbG9nMigpIG9mIERDIGZpbHRlciBCZXRhICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUworCQkJCSAgIEZVTkNUSU9OUwogXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIGFkYXB0aW5nIGNvZWZmcyB1c2luZyB0aGUgdHJhZGl0aW9uYWwgc3RvY2hhc3RpYyBkZXNjZW50IChOKUxNUyBhbGdvcml0aG0gKi8KIAogI2lmZGVmIF9fYmZpbl9fCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCitzdGF0aWMgaW5saW5lIHZvaWQgbG1zX2FkYXB0X2JnKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBjbGVhbiwKIAkJCQkgICAgaW50IHNoaWZ0KQogewogCWludCBpLCBqOwpAQCAtMTQ3LDEzICsxNDUsMTMgQEAKIAogCS8qIHN0OiBhbmQgZW46IGhlbHAgdXMgbG9jYXRlIHRoZSBhc3NlbWJsZXIgaW4gZWNoby5zICovCiAKLQkvL2FzbSgic3Q6Iik7CisJLyogYXNtKCJzdDoiKTsgKi8KIAluID0gZWMtPnRhcHM7CiAJZm9yIChpID0gMCwgaiA9IG9mZnNldDI7IGkgPCBuOyBpKyssIGorKykgewogCQlleHAgPSAqcGhpc3QrKyAqIGZhY3RvcjsKIAkJZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwICsgKDEgPDwgMTQpKSA+PiAxNSk7CiAJfQotCS8vYXNtKCJlbjoiKTsKKwkvKiBhc20oImVuOiIpOyAqLwogCiAJLyogTm90ZSB0aGUgYXNtIGZvciB0aGUgaW5uZXIgbG9vcCBhYm92ZSBnZW5lcmF0ZWQgYnkgQmxhY2tmaW4gZ2NjCiAJICAgNC4xLjEgaXMgcHJldHR5IGdvb2QgKG5vdGUgZXZlbiBwYXJhbGxlbCBpbnN0cnVjdGlvbnMgdXNlZCk6CkBAIC0xOTUsNyArMTkzLDcgQEAKICovCiAKICNlbHNlCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCitzdGF0aWMgaW5saW5lIHZvaWQgbG1zX2FkYXB0X2JnKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBjbGVhbiwKIAkJCQkgICAgaW50IHNoaWZ0KQogewogCWludCBpOwpAQCAtMjQ5LDkgKzI0Nyw4IEBACiAJZmlyMTZfY3JlYXRlKCZlYy0+ZmlyX3N0YXRlLCBlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPnRhcHMpOwogCWZpcjE2X2NyZWF0ZSgmZWMtPmZpcl9zdGF0ZV9iZywgZWMtPmZpcl90YXBzMTZbMV0sIGVjLT50YXBzKTsKIAotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQogCQllYy0+eHZ0eFtpXSA9IGVjLT55dnR4W2ldID0gZWMtPnh2cnhbaV0gPSBlYy0+eXZyeFtpXSA9IDA7Ci0JfQogCiAJZWMtPmNuZ19sZXZlbCA9IDEwMDA7CiAJb3NsZWNfYWRhcHRpb25fbW9kZShlYywgYWRhcHRpb25fbW9kZSk7CkBAIC0yNzEsMTQgKzI2OCwxMyBAQAogCiAJcmV0dXJuIGVjOwogCi0gICAgICBlcnJvcl9vb206CitlcnJvcl9vb206CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJa2ZyZWUoZWMtPmZpcl90YXBzMTZbaV0pOwogCiAJa2ZyZWUoZWMpOwogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19jcmVhdGUpOwogCiB2b2lkIG9zbGVjX2ZyZWUoc3RydWN0IG9zbGVjX3N0YXRlICplYykKQEAgLTI5MiwxNCArMjg4LDEyIEBACiAJa2ZyZWUoZWMtPnNuYXBzaG90KTsKIAlrZnJlZShlYyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKG9zbGVjX2ZyZWUpOwogCiB2b2lkIG9zbGVjX2FkYXB0aW9uX21vZGUoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50IGFkYXB0aW9uX21vZGUpCiB7CiAJZWMtPmFkYXB0aW9uX21vZGUgPSBhZGFwdGlvbl9tb2RlOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19hZGFwdGlvbl9tb2RlKTsKIAogdm9pZCBvc2xlY19mbHVzaChzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjKQpAQCAtMzI2LDE0ICszMjAsMTIgQEAKIAllYy0+Y3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CiAJZWMtPlBzdGF0ZXMgPSAwOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19mbHVzaCk7CiAKIHZvaWQgb3NsZWNfc25hcHNob3Qoc3RydWN0IG9zbGVjX3N0YXRlICplYykKIHsKIAltZW1jcHkoZWMtPnNuYXBzaG90LCBlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19zbmFwc2hvdCk7CiAKIC8qIER1YWwgUGF0aCBFY2hvIENhbmNlbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzk5LDcgKzM5MSw3IEBACiAJCS8qIGVmZmljaWVudCAib3V0IHdpdGggdGhlIG9sZCBhbmQgaW4gd2l0aCB0aGUgbmV3IiBhbGdvcml0aG0gc28KIAkJICAgd2UgZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSBvdmVyIHRoZSB3aG9sZSBibG9jayBvZgogCQkgICBzYW1wbGVzLiAqLwotCQluZXcgPSAoaW50KXR4ICooaW50KXR4OworCQluZXcgPSAoaW50KXR4ICogKGludCl0eDsKIAkJb2xkID0gKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc10gKgogCQkgICAgKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc107CiAJCWVjLT5Qc3RhdGVzICs9CkBAIC00OTgsMTUgKzQ5MCwxNSBAQAogCiAJaWYgKChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9BREFQVElPTikgJiYKIAkgICAgKGVjLT5ub251cGRhdGVfZHdlbGwgPT0gMCkgJiYKLQkgICAgKDggKiBlYy0+TGNsZWFuX2JnIDwKLQkgICAgIDcgKiBlYy0+TGNsZWFuKSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuODc1KmVjLT5MY2xlYW4pICovICYmCi0JICAgICg4ICogZWMtPkxjbGVhbl9iZyA8Ci0JICAgICBlYy0+THR4KSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuMTI1KmVjLT5MdHgpICAgICovICkgeworCSAgICAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuODc1KmVjLT5MY2xlYW4pICovCisJICAgICg4ICogZWMtPkxjbGVhbl9iZyA8IDcgKiBlYy0+TGNsZWFuKSAmJgorCSAgICAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuMTI1KmVjLT5MdHgpICovCisJICAgICg4ICogZWMtPkxjbGVhbl9iZyA8IGVjLT5MdHgpKSB7CiAJCWlmIChlYy0+Y29uZF9tZXQgPT0gNikgewogCQkJLyogQkcgZmlsdGVyIGhhcyBoYWQgYmV0dGVyIHJlc3VsdHMgZm9yIDYgY29uc2VjdXRpdmUgc2FtcGxlcyAqLwogCQkJZWMtPmFkYXB0ID0gMTsKIAkJCW1lbWNweShlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPmZpcl90YXBzMTZbMV0sCi0JCQkgICAgICAgZWMtPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOworCQkJCWVjLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKIAkJfSBlbHNlCiAJCQllYy0+Y29uZF9tZXQrKzsKIAl9IGVsc2UKQEAgLTU4MCw3ICs1NzIsNiBAQAogCiAJcmV0dXJuIChpbnQxNl90KSBlYy0+Y2xlYW5fbmxwIDw8IDE7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKG9zbGVjX3VwZGF0ZSk7CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgc2VwZXJhdGVkIGZyb20gdGhlIGVjaG8gY2FuY2VsbGVyIGlzIGl0IGlzIHVzdWFsbHkgY2FsbGVkCkBAIC02MDQsNyArNTk1LDcgQEAKICAgIHByZWNpc2lvbiwgd2hpY2ggbm9pc2Ugc2hhcGVzIHRoaW5ncywgZ2l2aW5nIHZlcnkgY2xlYW4gREMgcmVtb3ZhbC4KICovCiAKLWludDE2X3Qgb3NsZWNfaHBmX3R4KHN0cnVjdCBvc2xlY19zdGF0ZSAqIGVjLCBpbnQxNl90IHR4KQoraW50MTZfdCBvc2xlY19ocGZfdHgoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50MTZfdCB0eCkKIHsKIAlpbnQgdG1wLCB0bXAxOwogCkBAIC02MjksNyArNjIwLDYgQEAKIAogCXJldHVybiB0eDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfaHBmX3R4KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oCmluZGV4IDM0ZmI4MTYuLmM4MzVlNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmgKQEAgLTIzLDggKzIzLDYgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogJElkOiBlY2hvLmgsdiAxLjkgMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKICAqLwogCiAjaWZuZGVmIF9fRUNIT19ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCmluZGV4IGQzNWYxNjguLmFjNmM1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCkBAIC0yMSw4ICsyMSw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqICRJZDogZmlyLmgsdiAxLjggMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKICAqLwogCiAvKiEgXHBhZ2UgZmlyX3BhZ2UgRklSIGZpbHRlcmluZwpAQCAtMTAyLDggKzEwMCw4IEBACiAJZmxvYXQgKmhpc3Rvcnk7CiB9OwogCi1zdGF0aWMgX19pbmxpbmVfXyBjb25zdCBpbnQxNl90ICpmaXIxNl9jcmVhdGUoc3RydWN0IGZpcjE2X3N0YXRlX3QgKmZpciwKLQkJCQkJICAgICAgY29uc3QgaW50MTZfdCAqIGNvZWZmcywgaW50IHRhcHMpCitzdGF0aWMgaW5saW5lIGNvbnN0IGludDE2X3QgKmZpcjE2X2NyZWF0ZShzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyLAorCQkJCQkgICAgICBjb25zdCBpbnQxNl90ICpjb2VmZnMsIGludCB0YXBzKQogewogCWZpci0+dGFwcyA9IHRhcHM7CiAJZmlyLT5jdXJyX3BvcyA9IHRhcHMgLSAxOwpAQCAtMTE2LDcgKzExNCw3IEBACiAJcmV0dXJuIGZpci0+aGlzdG9yeTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIxNl9mbHVzaChzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyKQorc3RhdGljIGlubGluZSB2b2lkIGZpcjE2X2ZsdXNoKHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIpCiB7CiAjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpIHx8IGRlZmluZWQoX19iZmluX18pCiAJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgMiAqIGZpci0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CkBAIC0xMjUsNyArMTIzLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjE2X2ZyZWUoc3RydWN0IGZpcjE2X3N0YXRlX3QgKmZpcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXIxNl9mcmVlKHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIpCiB7CiAJa2ZyZWUoZmlyLT5oaXN0b3J5KTsKIH0KQEAgLTE0OCwxNiArMTQ2LDE2IEBACiAJCSJBMCArPSBSMC5MKlIxLkwgKElTKTtcblx0IgogCQkiUjAgPSBBMDtcblx0IgogCQkiJTAgPSBSMDtcblx0IgotCQk6Ij0mZCIoZG90KQotCQk6ImEiKHgpLCAiYSIoeSksICJhIihsZW4pCi0JCToiSTAiLCAiSTEiLCAiQTEiLCAiQTAiLCAiUjAiLCAiUjEiCisJCTogIj0mZCIoZG90KQorCQk6ICJhIih4KSwgImEiKHkpLCAiYSIobGVuKQorCQk6ICJJMCIsICJJMSIsICJBMSIsICJBMCIsICJSMCIsICJSMSIKIAkpOwogCiAJcmV0dXJuIGRvdDsKIH0KICNlbmRpZgogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcjE2KHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQorc3RhdGljIGlubGluZSBpbnQxNl90IGZpcjE2KHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQogewogCWludDMyX3QgeTsKICNpZiBkZWZpbmVkKFVTRV9NTVgpCkBAIC0yNTAsOCArMjQ4LDggQEAKIAlyZXR1cm4gKGludDE2X3QpICh5ID4+IDE1KTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gY29uc3QgaW50MTZfdCAqZmlyMzJfY3JlYXRlKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIsCi0JCQkJCSAgICAgIGNvbnN0IGludDMyX3QgKiBjb2VmZnMsIGludCB0YXBzKQorc3RhdGljIGlubGluZSBjb25zdCBpbnQxNl90ICpmaXIzMl9jcmVhdGUoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpciwKKwkJCQkJICAgICAgY29uc3QgaW50MzJfdCAqY29lZmZzLCBpbnQgdGFwcykKIHsKIAlmaXItPnRhcHMgPSB0YXBzOwogCWZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKQEAgLTI2MCwxNyArMjU4LDE3IEBACiAJcmV0dXJuIGZpci0+aGlzdG9yeTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mbHVzaChzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyKQorc3RhdGljIGlubGluZSB2b2lkIGZpcjMyX2ZsdXNoKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIpCiB7CiAJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgZmlyLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mcmVlKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIpCitzdGF0aWMgaW5saW5lIHZvaWQgZmlyMzJfZnJlZShzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyKQogewogCWtmcmVlKGZpci0+aGlzdG9yeSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludDE2X3QgZmlyMzIoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCitzdGF0aWMgaW5saW5lIGludDE2X3QgZmlyMzIoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCiB7CiAJaW50IGk7CiAJaW50MzJfdCB5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaAppbmRleCA0NGU1Y2ZlLi5jMWRjZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaApAQCAtNDQsMjM4ICs0NCwyMzggQEAKIAljaGFyIGJbMTZdOwogfTsKIAotI2RlZmluZSAgICAgICAgIG1teF9pMnIob3AsaW1tLHJlZykgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoaW1tKSApCisjZGVmaW5lCW1teF9pMnIob3AsIGltbSwgcmVnKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCisJCQkJOiAvKiBub3RoaW5nICovIFwKKwkJCQk6ICJpIiAoaW1tKSkKIAotI2RlZmluZSAgICAgICAgIG1teF9tMnIob3AsbWVtLHJlZykgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSkKKyNkZWZpbmUJbW14X20ycihvcCwgbWVtLCByZWcpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8gXAorCQkJCTogIm0iIChtZW0pKQogCi0jZGVmaW5lICAgICAgICAgbW14X3IybShvcCxyZWcsbWVtKSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlJSIgI3JlZyAiLCAlMCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPW0iIChtZW0pIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyApCisjZGVmaW5lCW1teF9yMm0ob3AsIHJlZywgbWVtKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCisJCQkJOiAiPW0iIChtZW0pIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8pCiAKLSNkZWZpbmUgICAgICAgICBtbXhfcjJyKG9wLHJlZ3MscmVnZCkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSIgI3JlZ3MgIiwgJSIgI3JlZ2QpCisjZGVmaW5lCW1teF9yMnIob3AsIHJlZ3MsIHJlZ2QpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSIgI3JlZ3MgIiwgJSIgI3JlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBlbW1zKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlbW1zIikKKyNkZWZpbmUJZW1tcygpIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIpCiAKLSNkZWZpbmUgICAgICAgICBtb3ZkX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAobW92ZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgbW92ZF9yMm0ocmVnLHZhcikgICAgICAgICAgIG1teF9yMm0gKG1vdmQsIHJlZywgdmFyKQotI2RlZmluZSAgICAgICAgIG1vdmRfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChtb3ZkLCByZWdzLCByZWdkKQorI2RlZmluZQltb3ZkX20ycih2YXIsIHJlZykJbW14X20ycihtb3ZkLCB2YXIsIHJlZykKKyNkZWZpbmUJbW92ZF9yMm0ocmVnLCB2YXIpCW1teF9yMm0obW92ZCwgcmVnLCB2YXIpCisjZGVmaW5lCW1vdmRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92ZCwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIG1vdnFfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChtb3ZxLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBtb3ZxX3IybShyZWcsdmFyKSAgICAgICAgICAgbW14X3IybSAobW92cSwgcmVnLCB2YXIpCi0jZGVmaW5lICAgICAgICAgbW92cV9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKG1vdnEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCW1vdnFfbTJyKHZhciwgcmVnKQltbXhfbTJyKG1vdnEsIHZhciwgcmVnKQorI2RlZmluZQltb3ZxX3IybShyZWcsIHZhcikJbW14X3IybShtb3ZxLCByZWcsIHZhcikKKyNkZWZpbmUJbW92cV9yMnIocmVncywgcmVnZCkJbW14X3Iycihtb3ZxLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFja3NzZHdfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2tzc2R3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWNrc3Nkd19yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3NzZHcsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGFja3Nzd2JfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2tzc3diLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWNrc3N3Yl9yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3Nzd2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhY2tzc2R3X20ycih2YXIsIHJlZykJCW1teF9tMnIocGFja3NzZHcsIHZhciwgcmVnKQorI2RlZmluZQlwYWNrc3Nkd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWNrc3NkdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFja3Nzd2JfbTJyKHZhciwgcmVnKQkJbW14X20ycihwYWNrc3N3YiwgdmFyLCByZWcpCisjZGVmaW5lCXBhY2tzc3diX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhY2tzc3diLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFja3Vzd2JfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2t1c3diLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWNrdXN3Yl9yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3Vzd2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhY2t1c3diX20ycih2YXIsIHJlZykJCW1teF9tMnIocGFja3Vzd2IsIHZhciwgcmVnKQorI2RlZmluZQlwYWNrdXN3Yl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWNrdXN3YiwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhZGRiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZGJfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGRiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBhZGRkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGRkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBhZGR3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGR3LCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkYl9tMnIodmFyLCByZWcpCW1teF9tMnIocGFkZGIsIHZhciwgcmVnKQorI2RlZmluZQlwYWRkYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFkZGRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGRkLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGR3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdywgdmFyLCByZWcpCisjZGVmaW5lCXBhZGR3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFkZHNiX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBhZGRzYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHNiX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBhZGRzYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYWRkc3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocGFkZHN3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWRkc3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocGFkZHN3LCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkc2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGRzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBhZGRzYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkc2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGRzd19tMnIodmFyLCByZWcpCW1teF9tMnIocGFkZHN3LCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZHN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRzdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhZGR1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYWRkdXNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWRkdXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGFkZHVzYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYWRkdXN3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGFkZHVzdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHVzd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhZGR1c3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGR1c2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGR1c2IsIHZhciwgcmVnKQorI2RlZmluZQlwYWRkdXNiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGR1c3dfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGR1c3csIHZhciwgcmVnKQorI2RlZmluZQlwYWRkdXN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR1c3csIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwYW5kX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocGFuZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFuZF9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHBhbmQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhbmRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhbmQsIHZhciwgcmVnKQorI2RlZmluZQlwYW5kX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhbmQsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwYW5kbl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFuZG4sIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhbmRuX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYW5kbiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFuZG5fbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhbmRuLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFuZG5fcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFuZG4sIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwY21wZXFiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGNtcGVxYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcWIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGNtcGVxZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcWQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBjbXBlcWRfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXFkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBjbXBlcXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXF3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwY21wZXF3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGVxYl9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGVxYiwgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBlcWJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGVxYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGVxZF9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGVxZCwgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBlcWRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGVxZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGVxd19tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGVxdywgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBlcXdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGVxdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBjbXBndGJfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3RiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwY21wZ3RiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0YiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwY21wZ3RkX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0ZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGNtcGd0ZF9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGNtcGd0d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndHcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBjbXBndHdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3R3LCByZWdzLCByZWdkKQorI2RlZmluZQlwY21wZ3RiX20ycih2YXIsIHJlZykJbW14X20ycihwY21wZ3RiLCB2YXIsIHJlZykKKyNkZWZpbmUJcGNtcGd0Yl9yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZ3RiLCByZWdzLCByZWdkKQorI2RlZmluZQlwY21wZ3RkX20ycih2YXIsIHJlZykJbW14X20ycihwY21wZ3RkLCB2YXIsIHJlZykKKyNkZWZpbmUJcGNtcGd0ZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZ3RkLCByZWdzLCByZWdkKQorI2RlZmluZQlwY21wZ3R3X20ycih2YXIsIHJlZykJbW14X20ycihwY21wZ3R3LCB2YXIsIHJlZykKKyNkZWZpbmUJcGNtcGd0d19yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZ3R3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1hZGR3ZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtYWRkd2QsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtYWRkd2RfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbWFkZHdkLCByZWdzLCByZWdkKQorI2RlZmluZQlwbWFkZHdkX20ycih2YXIsIHJlZykJbW14X20ycihwbWFkZHdkLCB2YXIsIHJlZykKKyNkZWZpbmUJcG1hZGR3ZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwbWFkZHdkLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG11bGh3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxodywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG11bGh3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxodywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG11bGh3X20ycih2YXIsIHJlZykJbW14X20ycihwbXVsaHcsIHZhciwgcmVnKQorI2RlZmluZQlwbXVsaHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG11bGh3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG11bGx3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxsdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG11bGx3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxsdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG11bGx3X20ycih2YXIsIHJlZykJbW14X20ycihwbXVsbHcsIHZhciwgcmVnKQorI2RlZmluZQlwbXVsbHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG11bGx3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG9yX20ycih2YXIscmVnKSAgICAgICAgICAgIG1teF9tMnIgKHBvciwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG9yX3IycihyZWdzLHJlZ2QpICAgICAgICAgIG1teF9yMnIgKHBvciwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG9yX20ycih2YXIsIHJlZykJbW14X20ycihwb3IsIHZhciwgcmVnKQorI2RlZmluZQlwb3JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG9yLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHNsbGRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGxkLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc2xsZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbGQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzbGxkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xsZCwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc2xscV9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbHEsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzbGxxX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xscSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNsbHFfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGxxLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzbGx3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xsdywgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNsbHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGx3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc2xsd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbHcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzbGxkX2kycihpbW0sIHJlZykJbW14X2kycihwc2xsZCwgaW1tLCByZWcpCisjZGVmaW5lCXBzbGxkX20ycih2YXIsIHJlZykJbW14X20ycihwc2xsZCwgdmFyLCByZWcpCisjZGVmaW5lCXBzbGxkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzbGxkLCByZWdzLCByZWdkKQorI2RlZmluZQlwc2xscV9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNsbHEsIGltbSwgcmVnKQorI2RlZmluZQlwc2xscV9tMnIodmFyLCByZWcpCW1teF9tMnIocHNsbHEsIHZhciwgcmVnKQorI2RlZmluZQlwc2xscV9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc2xscSwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNsbHdfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGx3LCBpbW0sIHJlZykKKyNkZWZpbmUJcHNsbHdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzbGx3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHNsbHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNsbHcsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwc3JhZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNyYWQsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmFkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JhZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNyYWRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmFkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzcmF3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JhdywgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNyYXdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmF3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Jhd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNyYXcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzcmFkX2kycihpbW0sIHJlZykJbW14X2kycihwc3JhZCwgaW1tLCByZWcpCisjZGVmaW5lCXBzcmFkX20ycih2YXIsIHJlZykJbW14X20ycihwc3JhZCwgdmFyLCByZWcpCisjZGVmaW5lCXBzcmFkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmFkLCByZWdzLCByZWdkKQorI2RlZmluZQlwc3Jhd19pMnIoaW1tLCByZWcpCW1teF9pMnIocHNyYXcsIGltbSwgcmVnKQorI2RlZmluZQlwc3Jhd19tMnIodmFyLCByZWcpCW1teF9tMnIocHNyYXcsIHZhciwgcmVnKQorI2RlZmluZQlwc3Jhd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JhdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBzcmxkX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JsZCwgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNybGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmxkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JsZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHNybHFfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmxxLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JscV9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybHEsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmxxX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JscSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc3Jsd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybHcsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmx3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JsdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNybHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmx3LCByZWdzLCByZWdkKQorI2RlZmluZQlwc3JsZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybGQsIGltbSwgcmVnKQorI2RlZmluZQlwc3JsZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNybGQsIHZhciwgcmVnKQorI2RlZmluZQlwc3JsZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JsZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNybHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmxxLCBpbW0sIHJlZykKKyNkZWZpbmUJcHNybHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmxxLCB2YXIsIHJlZykKKyNkZWZpbmUJcHNybHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNybHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzcmx3X2kycihpbW0sIHJlZykJbW14X2kycihwc3JsdywgaW1tLCByZWcpCisjZGVmaW5lCXBzcmx3X20ycih2YXIsIHJlZykJbW14X20ycihwc3JsdywgdmFyLCByZWcpCisjZGVmaW5lCXBzcmx3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmx3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHN1YmJfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3ViYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YmIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHN1YmRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3ViZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YmQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHN1YndfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJ3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Vid19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJiX20ycih2YXIsIHJlZykJbW14X20ycihwc3ViYiwgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJiLCByZWdzLCByZWdkKQorI2RlZmluZQlwc3ViZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YmQsIHZhciwgcmVnKQorI2RlZmluZQlwc3ViZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3ViZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YndfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzdWJ3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHN1YndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YncsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwc3Vic2JfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHN1YnNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Vic2JfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHN1YnNiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzdWJzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwc3Vic3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzdWJzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwc3Vic3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJzYl9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnNiLCB2YXIsIHJlZykKKyNkZWZpbmUJcHN1YnNiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YnN3X20ycih2YXIsIHJlZykJbW14X20ycihwc3Vic3csIHZhciwgcmVnKQorI2RlZmluZQlwc3Vic3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHN1YnVzYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBzdWJ1c2IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzdWJ1c2JfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwc3VidXNiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzdWJ1c3dfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwc3VidXN3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3VidXN3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocHN1YnVzdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YnVzYl9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnVzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJ1c2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnVzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YnVzd19tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnVzdywgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJ1c3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnVzdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHB1bnBja2hid19tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2toYncsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB1bnBja2hid19yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2toYncsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHVucGNraGRxX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2hkcSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHVucGNraGRxX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2hkcSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraHdkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraHdkLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2toYndfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2toYncsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2toYndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraGJ3LCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2toZHFfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2toZHEsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2toZHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraGRxLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tod2RfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2tod2QsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2tod2RfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraHdkLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2xidywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2xidywgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbGRxLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbGRxLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsd2QsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2xid19tMnIodmFyLCByZWcpCQltbXhfbTJyKHB1bnBja2xidywgdmFyLCByZWcpCisjZGVmaW5lCXB1bnBja2xid19yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tsYncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2xkcV9tMnIodmFyLCByZWcpCQltbXhfbTJyKHB1bnBja2xkcSwgdmFyLCByZWcpCisjZGVmaW5lCXB1bnBja2xkcV9yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tsZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2x3ZF9tMnIodmFyLCByZWcpCQltbXhfbTJyKHB1bnBja2x3ZCwgdmFyLCByZWcpCisjZGVmaW5lCXB1bnBja2x3ZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBweG9yX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocHhvciwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHhvcl9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHB4b3IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB4b3JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB4b3IsIHZhciwgcmVnKQorI2RlZmluZQlweG9yX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB4b3IsIHJlZ3MsIHJlZ2QpCiAKIC8qIDNETk9XIGV4dGVuc2lvbnMgKi8KIAotI2RlZmluZSAgICAgICAgIHBhdmd1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYXZndXNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYXZndXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGF2Z3VzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGF2Z3VzYl9tMnIodmFyLCByZWcpCW1teF9tMnIocGF2Z3VzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBhdmd1c2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGF2Z3VzYiwgcmVncywgcmVnZCkKIAogLyogQU1EIE1NWCBleHRlbnNpb25zIC0gYWxzbyBhdmFpbGFibGUgaW4gaW50ZWwgU1NFICovCiAKLSNkZWZpbmUgICAgICAgICBtbXhfbTJyaShvcCxtZW0scmVnLGltbSkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTEsICUwLCAlJSIgI3JlZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSksICJpIiAoaW1tKSkKLSNkZWZpbmUgICAgICAgICBtbXhfcjJyaShvcCxyZWdzLHJlZ2QsaW1tKSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWdzICIsICUlIiAjcmVnZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKGltbSkgKQorI2RlZmluZQltbXhfbTJyaShvcCwgbWVtLCByZWcsIGltbSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMSwgJTAsICUlIiAjcmVnIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8gXAorCQkJCTogIm0iIChtZW0pLCAiaSIgKGltbSkpCisjZGVmaW5lCW1teF9yMnJpKG9wLCByZWdzLCByZWdkLCBpbW0pIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVncyAiLCAlJSIgI3JlZ2QgXAorCQkJCTogLyogbm90aGluZyAqLyBcCisJCQkJOiAiaSIgKGltbSkpCiAKLSNkZWZpbmUgICAgICAgICBtbXhfZmV0Y2gobWVtLGhpbnQpIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwcmVmZXRjaCIgI2hpbnQgIiAlMCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iIChtZW0pKQorI2RlZmluZQltbXhfZmV0Y2gobWVtLCBoaW50KSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwcmVmZXRjaCIgI2hpbnQgIiAlMCIgXAorCQkJCTogLyogbm90aGluZyAqLyBcCisJCQkJOiAibSIgKG1lbSkpCiAKLSNkZWZpbmUgICAgICAgICBtYXNrbW92cShyZWdzLG1hc2tyZWcpICAgICAgbW14X3IycmkgKG1hc2ttb3ZxLCByZWdzLCBtYXNrcmVnKQorI2RlZmluZQltYXNrbW92cShyZWdzLCBtYXNrcmVnKQltbXhfcjJyaShtYXNrbW92cSwgcmVncywgbWFza3JlZykKIAotI2RlZmluZSAgICAgICAgIG1vdm50cV9yMm0obW1yZWcsdmFyKSAgICAgICBtbXhfcjJtIChtb3ZudHEsIG1tcmVnLCB2YXIpCisjZGVmaW5lCW1vdm50cV9yMm0obW1yZWcsIHZhcikJbW14X3IybShtb3ZudHEsIG1tcmVnLCB2YXIpCiAKLSNkZWZpbmUgICAgICAgICBwYXZnYl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGF2Z2IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhdmdiX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYXZnYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYXZnd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGF2Z3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhdmd3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYXZndywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGF2Z2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhdmdiLCB2YXIsIHJlZykKKyNkZWZpbmUJcGF2Z2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGF2Z2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhdmd3X20ycih2YXIsIHJlZykJbW14X20ycihwYXZndywgdmFyLCByZWcpCisjZGVmaW5lCXBhdmd3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhdmd3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGV4dHJ3X3IycihtbXJlZyxyZWcsaW1tKSAgIG1teF9yMnJpIChwZXh0cncsIG1tcmVnLCByZWcsIGltbSkKKyNkZWZpbmUJcGV4dHJ3X3IycihtbXJlZywgcmVnLCBpbW0pCW1teF9yMnJpKHBleHRydywgbW1yZWcsIHJlZywgaW1tKQogCi0jZGVmaW5lICAgICAgICAgcGluc3J3X3IycihyZWcsbW1yZWcsaW1tKSAgIG1teF9yMnJpIChwaW5zcncsIHJlZywgbW1yZWcsIGltbSkKKyNkZWZpbmUJcGluc3J3X3IycihyZWcsIG1tcmVnLCBpbW0pCW1teF9yMnJpKHBpbnNydywgcmVnLCBtbXJlZywgaW1tKQogCi0jZGVmaW5lICAgICAgICAgcG1heHN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtYXhzdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1heHN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtYXhzdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1heHN3X20ycih2YXIsIHJlZykJbW14X20ycihwbWF4c3csIHZhciwgcmVnKQorI2RlZmluZQlwbWF4c3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1heHN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1heHViX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtYXh1YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1heHViX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtYXh1YiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1heHViX20ycih2YXIsIHJlZykJbW14X20ycihwbWF4dWIsIHZhciwgcmVnKQorI2RlZmluZQlwbWF4dWJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1heHViLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1pbnN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW5zdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1pbnN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW5zdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1pbnN3X20ycih2YXIsIHJlZykJbW14X20ycihwbWluc3csIHZhciwgcmVnKQorI2RlZmluZQlwbWluc3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1pbnN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1pbnViX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW51YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1pbnViX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW51YiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1pbnViX20ycih2YXIsIHJlZykJbW14X20ycihwbWludWIsIHZhciwgcmVnKQorI2RlZmluZQlwbWludWJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1pbnViLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1vdm1za2IobW1yZWcscmVnKSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92bXNrcHMgJSIgI21tcmVnICIsICUiICNyZWcpCisjZGVmaW5lCXBtb3Ztc2tiKG1tcmVnLCByZWcpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdm1za3BzICUiICNtbXJlZyAiLCAlIiAjcmVnKQogCi0jZGVmaW5lICAgICAgICAgcG11bGh1d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtdWxodXcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtdWxodXdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbXVsaHV3LCByZWdzLCByZWdkKQorI2RlZmluZQlwbXVsaHV3X20ycih2YXIsIHJlZykJbW14X20ycihwbXVsaHV3LCB2YXIsIHJlZykKKyNkZWZpbmUJcG11bGh1d19yMnIocmVncywgcmVnZCkJbW14X3IycihwbXVsaHV3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MChtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MCkKLSNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQxKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQxKQotI2RlZmluZSAgICAgICAgIHByZWZldGNodDIobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDIpCi0jZGVmaW5lICAgICAgICAgcHJlZmV0Y2hudGEobWVtKSAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCBudGEpCisjZGVmaW5lCXByZWZldGNodDAobWVtKQkJbW14X2ZldGNoKG1lbSwgdDApCisjZGVmaW5lCXByZWZldGNodDEobWVtKQkJbW14X2ZldGNoKG1lbSwgdDEpCisjZGVmaW5lCXByZWZldGNodDIobWVtKQkJbW14X2ZldGNoKG1lbSwgdDIpCisjZGVmaW5lCXByZWZldGNobnRhKG1lbSkJbW14X2ZldGNoKG1lbSwgbnRhKQogCi0jZGVmaW5lICAgICAgICAgcHNhZGJ3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzYWRidywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNhZGJ3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzYWRidywgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNhZGJ3X20ycih2YXIsIHJlZykJbW14X20ycihwc2FkYncsIHZhciwgcmVnKQorI2RlZmluZQlwc2FkYndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNhZGJ3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHNodWZ3X20ycih2YXIscmVnLGltbSkgICAgIG1teF9tMnJpKHBzaHVmdywgdmFyLCByZWcsIGltbSkKLSNkZWZpbmUgICAgICAgICBwc2h1ZndfcjJyKHJlZ3MscmVnZCxpbW0pICAgbW14X3IycmkocHNodWZ3LCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lCXBzaHVmd19tMnIodmFyLCByZWcsIGltbSkJbW14X20ycmkocHNodWZ3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZQlwc2h1ZndfcjJyKHJlZ3MsIHJlZ2QsIGltbSkJbW14X3IycmkocHNodWZ3LCByZWdzLCByZWdkLCBpbW0pCiAKLSNkZWZpbmUgICAgICAgICBzZmVuY2UoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNmZW5jZVxuXHQiKQorI2RlZmluZQlzZmVuY2UoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNmZW5jZVxuXHQiKQogCiAvKiBTU0UyICovCi0jZGVmaW5lICAgICAgICAgcHNodWZod19tMnIodmFyLHJlZyxpbW0pICAgIG1teF9tMnJpKHBzaHVmaHcsIHZhciwgcmVnLCBpbW0pCi0jZGVmaW5lICAgICAgICAgcHNodWZod19yMnIocmVncyxyZWdkLGltbSkgIG1teF9yMnJpKHBzaHVmaHcsIHJlZ3MsIHJlZ2QsIGltbSkKLSNkZWZpbmUgICAgICAgICBwc2h1Zmx3X20ycih2YXIscmVnLGltbSkgICAgbW14X20ycmkocHNodWZsdywgdmFyLCByZWcsIGltbSkKLSNkZWZpbmUgICAgICAgICBwc2h1Zmx3X3IycihyZWdzLHJlZ2QsaW1tKSAgbW14X3IycmkocHNodWZsdywgcmVncywgcmVnZCwgaW1tKQorI2RlZmluZQlwc2h1Zmh3X20ycih2YXIsIHJlZywgaW1tKQltbXhfbTJyaShwc2h1Zmh3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZQlwc2h1Zmh3X3IycihyZWdzLCByZWdkLCBpbW0pCW1teF9yMnJpKHBzaHVmaHcsIHJlZ3MsIHJlZ2QsIGltbSkKKyNkZWZpbmUJcHNodWZsd19tMnIodmFyLCByZWcsIGltbSkJbW14X20ycmkocHNodWZsdywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUJcHNodWZsd19yMnIocmVncywgcmVnZCwgaW1tKQltbXhfcjJyaShwc2h1Zmx3LCByZWdzLCByZWdkLCBpbW0pCiAKLSNkZWZpbmUgICAgICAgICBwc2h1ZmRfcjJyKHJlZ3MscmVnZCxpbW0pICAgbW14X3IycmkocHNodWZkLCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lCXBzaHVmZF9yMnIocmVncywgcmVnZCwgaW1tKQltbXhfcjJyaShwc2h1ZmQsIHJlZ3MsIHJlZ2QsIGltbSkKIAotI2RlZmluZSAgICAgICAgIG1vdmRxYV9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChtb3ZkcWEsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChtb3ZkcWEsIHJlZywgdmFyKQotI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChtb3ZkcWEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgbW92ZHF1X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKG1vdmRxdSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgbW92ZHF1X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKG1vdmRxdSwgcmVnLCB2YXIpCi0jZGVmaW5lICAgICAgICAgbW92ZHF1X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKG1vdmRxdSwgcmVncywgcmVnZCkKKyNkZWZpbmUJbW92ZHFhX20ycih2YXIsIHJlZykJbW14X20ycihtb3ZkcWEsIHZhciwgcmVnKQorI2RlZmluZQltb3ZkcWFfcjJtKHJlZywgdmFyKQltbXhfcjJtKG1vdmRxYSwgcmVnLCB2YXIpCisjZGVmaW5lCW1vdmRxYV9yMnIocmVncywgcmVnZCkJbW14X3Iycihtb3ZkcWEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCW1vdmRxdV9tMnIodmFyLCByZWcpCW1teF9tMnIobW92ZHF1LCB2YXIsIHJlZykKKyNkZWZpbmUJbW92ZHF1X3IybShyZWcsIHZhcikJbW14X3IybShtb3ZkcXUsIHJlZywgdmFyKQorI2RlZmluZQltb3ZkcXVfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92ZHF1LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG11bGx3X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKHBtdWxsdywgcmVnLCB2YXIpCisjZGVmaW5lCXBtdWxsd19yMm0ocmVnLCB2YXIpCW1teF9yMm0ocG11bGx3LCByZWcsIHZhcikKIAotI2RlZmluZSAgICAgICAgIHBzbGxkcV9pMnIoaW1tLHJlZykgICAgICAgICBtbXhfaTJyIChwc2xsZHEsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmxkcV9pMnIoaW1tLHJlZykgICAgICAgICBtbXhfaTJyIChwc3JsZHEsIGltbSwgcmVnKQorI2RlZmluZQlwc2xsZHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGxkcSwgaW1tLCByZWcpCisjZGVmaW5lCXBzcmxkcV9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybGRxLCBpbW0sIHJlZykKIAotI2RlZmluZSAgICAgICAgIHB1bnBja2xxZHFfcjJyKHJlZ3MscmVnZCkgICBtbXhfcjJyIChwdW5wY2tscWRxLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHB1bnBja2hxZHFfcjJyKHJlZ3MscmVnZCkgICBtbXhfcjJyIChwdW5wY2tocWRxLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tscWRxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB1bnBja2xxZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2hxZHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraHFkcSwgcmVncywgcmVnZCkKIAogI2VuZGlmIC8qIEFWQ09ERUNfSTM4Nk1NWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0JlbmNobWFyay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9CZW5jaG1hcmsuaAppbmRleCA2MmRlZTNiLi40Y2MwMWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0JlbmNobWFyay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvQmVuY2htYXJrLmgKQEAgLTczLDEyICs3Myw2IEBACiAKICNpbmNsdWRlICJnbG9iYWwuaCIKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9OT19PU18pICYmIChERVZfU1lTVEVNID09IF9ERVZfR05VX0NGNTQ4WF8pCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKLQotLy8gICAgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaWZkZWYgQ09ORklHX0NPTERGSVJFCkBAIC05MywxMiArODcsNiBAQAogI2RlZmluZSBCRU5DSE1BUktfTU9EVUxFUyAgICAgICAgICAgMHgwMDAwMDAwMAogI2VuZGlmCiAKLSNlbHNlCi0gICAgLy8gZGlzYWJsZSBCZW5jaG1hcmtpbmcKLSN1bmRlZiBCRU5DSE1BUktfTU9EVUxFUwotI2RlZmluZSBCRU5DSE1BUktfTU9EVUxFUyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0RlYnVnLmgKaW5kZXggMDVkZTlkNS4uODUxYTIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9EZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRGVidWcuaApAQCAtMTYzLDI1ICsxNjMsNiBAQAogI2VuZGlmCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pICYmIGRlZmluZWQgKFRSQUNFX01TRykKLQotICAgIC8vIEZvciBXSU4zMiB0aGUgbWFjcm8gREVCVUdfVFJBQ0UwIGNhbiBiZSBkZWZpbmVkIGFzIGZ1bmN0aW9uIGNhbGwgVHJhY2VMdmwoKQotICAgIC8vIG9yIGFzIG1hY3JvIFRSQUNFKCkuCi0gICAgLy8KLSAgICAvLyBIZXJlIHRoZSBwYXJhbWV0ZXIgJ2x2bCcgY2FuIGJlIHVzZWQgd2l0aCBtb3JlIHRoYW4gb25lCi0gICAgLy8gZGVidWctbGV2ZWwgKHVzaW5nIE9SKS4KLSAgICAvLwotICAgIC8vIEV4YW1wbGU6IERFQlVHX1RSQUNFMShERUJVR19MVkxfMzAgfCBERUJVR19MVkxfMDIsICJIZWxsbyAlZCIsIGJDb3VudCk7Ci0KLSNkZWZpbmUgREVCVUdfVFJBQ0UwKGx2bCxzdHIpICAgICAgICAgICAgICAgVHJhY2VMdmwoKGx2bCksc3RyKQotI2RlZmluZSBERUJVR19UUkFDRTEobHZsLHN0cixwMSkgICAgICAgICAgICBUcmFjZUx2bCgobHZsKSxzdHIscDEpCi0jZGVmaW5lIERFQlVHX1RSQUNFMihsdmwsc3RyLHAxLHAyKSAgICAgICAgIFRyYWNlTHZsKChsdmwpLHN0cixwMSxwMikKLSNkZWZpbmUgREVCVUdfVFJBQ0UzKGx2bCxzdHIscDEscDIscDMpICAgICAgVHJhY2VMdmwoKGx2bCksc3RyLHAxLHAyLHAzKQotI2RlZmluZSBERUJVR19UUkFDRTQobHZsLHN0cixwMSxwMixwMyxwNCkgICBUcmFjZUx2bCgobHZsKSxzdHIscDEscDIscDMscDQpCi0jZGVmaW5lIERFQlVHX0dMQl9MVkwoKSAgICAgICAgICAgICAgICAgICAgIGR3RGVidWdMZXZlbF9nCi0KLSNlbHNlCi0KICAgICAvLyBBdCBtaWNyb2NvbnRyb2xsZXJzIHdlIGRvIHJlZHVjZSB0aGUgbWVtb3J5IHVzYWdlIGJ5IGRlbGV0aW5nIERFQlVHX1RSQUNFLWxpbmVzCiAgICAgLy8gKGNvbXBpbGVyIGRvZXMgZGVsZXRlIHRoZSBsaW5lcykuCiAgICAgLy8KQEAgLTY0MywyNSArNjI0LDIzIEBACiAjZGVmaW5lIERFQlVHX1RSQUNFMyhsdmwsc3RyLHAxLHAyLHAzKSAgICAgICAgICAgICAgICAgIGx2bCMjX1RSQUNFMyhzdHIscDEscDIscDMpCiAjZGVmaW5lIERFQlVHX1RSQUNFNChsdmwsc3RyLHAxLHAyLHAzLHA0KSAgICAgICAgICAgICAgIGx2bCMjX1RSQUNFNChzdHIscDEscDIscDMscDQpCiAKLSNlbmRpZgotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gVGhlIG1hY3JvIERFQlVHX0RVTVBfREFUQSgpIGNhbiBiZSB1c2VkIHdpdGggdGhlIHNhbWUgZGVidWctbGV2ZWxzIHRvIGR1bXAKIC8vIG91dCBkYXRhIGJ5dGVzLiBGdW5jdGlvbiBEdW1wRGF0YSgpIGhhcyB0byBiZSBpbmNsdWRlZC4KIC8vIE5PVEU6IERVTVBfREFUQSBoYXMgdG8gYmUgZGVmaW5lZCBpbiBwcm9qZWN0IHNldHRpbmdzLgotI2lmICghZGVmaW5lZCAoTkRFQlVHKSAmJiBkZWZpbmVkIChEVU1QX0RBVEEpKSB8fCAoREVWX1NZU1RFTSA9PSBfREVWX1dJTjMyXykKKyNpZiAoIWRlZmluZWQgKE5ERUJVRykgJiYgZGVmaW5lZCAoRFVNUF9EQVRBKSkKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0Jdm9pZCBEdW1wRGF0YShjaGFyICpzelN0cl9wLCBCWVRFIE1FTSAqIHBiRGF0YV9wLCBXT1JEIHdTaXplX3ApOworCXZvaWQgRHVtcERhdGEoY2hhciAqc3pTdHJfcCwgdTggKnBiRGF0YV9wLCB1MTYgd1NpemVfcCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQkJCQkvLyB2b24gZXh0ZXJuICJDIgogI2VuZGlmCiAjZGVmaW5lIERFQlVHX0RVTVBfREFUQShsdmwsc3RyLHB0cixzaXopICAgIGlmICgoREVCVUdfR0xCX0xWTCgpICYgKGx2bCkpPT0obHZsKSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXBEYXRhIChzdHIsIChCWVRFIE1FTSopIChwdHIpLCAoV09SRCkgKHNpeikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXBEYXRhIChzdHIsICh1OCAqKShwdHIpLCAodTE2KShzaXopKTsKICNlbHNlCiAKICNkZWZpbmUgREVCVUdfRFVNUF9EQVRBKGx2bCxzdHIscHRyLHNpeikKQEAgLTY3NSwyNCArNjU0LDYgQEAKIC8vICAgICAgIGRlbGV0ZWQgZnJvbSBjb21waWxlciAoaW4gcmVsZWFzZSB2ZXJzaW9uIHRvbykuCiAjaWYgIWRlZmluZWQgKE5ERUJVRykgfHwgZGVmaW5lZCAoREVCVUdfS0VFUF9BU1NFUlQpCiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX1dJTjMyXykKLQotCS8vIEZvciBXSU4zMiBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFmdGVyIGNsb3NpbmcgbWVzc2FnZSBib3guCi0KLSNkZWZpbmUgREVCVUdfQVNTRVJUMChleHByLHN0cikgICAgICAgICBpZiAoIShleHByICkgJiYgKChERUJVR19HTEJfTFZMKCkgJiBERUJVR19MVkxfQVNTRVJUKSE9MCkpIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VCb3ggKE5VTEwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgIiBfX0xJTkVfXyAiIGZpbGUgIiBfX0ZJTEVfXyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAtPiAiIHN0ciAiXG4iKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXRQcm9jZXNzICgtMSk7IH0KLQotI2RlZmluZSBERUJVR19BU1NFUlQxKGV4cHIsc3RyLHAxKSAgICAgIGlmICghKGV4cHIgKSAmJiAoKERFQlVHX0dMQl9MVkwoKSAmIERFQlVHX0xWTF9BU1NFUlQpIT0wKSkgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUJveCAoTlVMTCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAiIF9fTElORV9fICIgZmlsZSAiIF9fRklMRV9fIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgIC0+ICIgc3RyICJcbiIpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpdFByb2Nlc3MgKC0xKTsgfQotCi0jZWxzZQotCiAJLy8gRm9yIG1pY3JvY29udHJvbGxlcnMgcHJvY2VzcyB3aWxsIGJlIHN0b3BwZWQgdXNpbmcgZW5kbGVzcyBsb29wLgogCiAjZGVmaW5lIERFQlVHX0FTU0VSVDAoZXhwcixzdHIpICAgICAgICAgaWYgKCEoZXhwciApKSB7IFwKQEAgLTcwNSwxMCArNjY2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19MVkxfQVNTRVJUX1RSQUNFNCAoIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAnJXMnXG4iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtPiAnJXMnXG4iIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtPiAweCUwOGxYXG4iLCBfX0xJTkVfXywgX19GSUxFX18sIHN0ciwgKERXT1JEKSBwMSk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtPiAweCUwOGxYXG4iLCBfX0xJTkVfXywgX19GSUxFX18sIHN0ciwgKHUzMikgcDEpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpOyB9CiAKLSNlbmRpZgogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnY4MTM5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnY4MTM5LmMKaW5kZXggMjk2MzU0YS4uNDRlM2Y3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2ODEzOS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydjgxMzkuYwpAQCAtODEsNyArODEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMjM0LDggKzIzMyw4IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2RlZmluZSBUR1RfREJHX1BPU1RfVFJBQ0VfVkFMVUUodikgICAgIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHYpCiAjZWxzZQpAQCAtMjgyLDkgKzI4MSw5IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJc3RydWN0IHBjaV9kZXYgKm1fcFBjaURldjsJLy8gcG9pbnRlciB0byBQQ0kgZGV2aWNlIHN0cnVjdHVyZQogCXZvaWQgKm1fcElvQWRkcjsJLy8gcG9pbnRlciB0byByZWdpc3RlciBzcGFjZSBvZiBFdGhlcm5ldCBjb250cm9sbGVyCi0JQllURSAqbV9wYlJ4QnVmOwkvLyBwb2ludGVyIHRvIFJ4IGJ1ZmZlcgorCXU4ICptX3BiUnhCdWY7CS8vIHBvaW50ZXIgdG8gUnggYnVmZmVyCiAJZG1hX2FkZHJfdCBtX3BSeEJ1ZkRtYTsKLQlCWVRFICptX3BiVHhCdWY7CS8vIHBvaW50ZXIgdG8gVHggYnVmZmVyCisJdTggKm1fcGJUeEJ1ZjsJLy8gcG9pbnRlciB0byBUeCBidWZmZXIKIAlkbWFfYWRkcl90IG1fcFR4QnVmRG1hOwogCUJPT0wgbV9hZlR4QnVmVXNlZFtFRFJWX01BWF9UWF9CVUZGRVJTXTsKIAl1bnNpZ25lZCBpbnQgbV91aUN1clR4RGVzYzsKQEAgLTM1OSw3ICszNTgsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIEJZVEUgRWRydkNhbGNIYXNoKEJZVEUgKiBwYk1BQ19wKTsKK3N0YXRpYyB1OCBFZHJ2Q2FsY0hhc2godTggKiBwYk1BQ19wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC00NTMsMjAgKzQ1MiwyMCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCkKK3RFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KHU4ICogcGJNYWNBZGRyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQlEV09SRCBkd0RhdGE7Ci0JQllURSBiSGFzaDsKKwl1MzIgZHdEYXRhOworCXU4IGJIYXNoOwogCiAJYkhhc2ggPSBFZHJ2Q2FsY0hhc2gocGJNYWNBZGRyX3ApOwogLyoKICAgICBkd0RhdGEgPSBldGhlcl9jcmMoNiwgcGJNYWNBZGRyX3ApOwogCiAgICAgcHJpbnRrKCJFZHJ2RGVmaW5lUnhNYWNBZGRyRW50cnkoJyUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYJykgaGFzaCA9ICV1IC8gJXUgIGV0aGVyX2NyYyA9IDB4JTA4bFhcbiIsCi0gICAgICAgIChXT1JEKSBwYk1hY0FkZHJfcFswXSwgKFdPUkQpIHBiTWFjQWRkcl9wWzFdLCAoV09SRCkgcGJNYWNBZGRyX3BbMl0sCi0gICAgICAgIChXT1JEKSBwYk1hY0FkZHJfcFszXSwgKFdPUkQpIHBiTWFjQWRkcl9wWzRdLCAoV09SRCkgcGJNYWNBZGRyX3BbNV0sCi0gICAgICAgIChXT1JEKSBiSGFzaCwgKFdPUkQpIChkd0RhdGEgPj4gMjYpLCBkd0RhdGEpOworICAgICAgICAodTE2KSBwYk1hY0FkZHJfcFswXSwgKHUxNikgcGJNYWNBZGRyX3BbMV0sICh1MTYpIHBiTWFjQWRkcl9wWzJdLAorICAgICAgICAodTE2KSBwYk1hY0FkZHJfcFszXSwgKHUxNikgcGJNYWNBZGRyX3BbNF0sICh1MTYpIHBiTWFjQWRkcl9wWzVdLAorICAgICAgICAodTE2KSBiSGFzaCwgKHUxNikgKGR3RGF0YSA+PiAyNiksIGR3RGF0YSk7CiAqLwogCWlmIChiSGFzaCA+IDMxKSB7CiAJCWR3RGF0YSA9IEVEUlZfUkVHRFdfUkVBRChFRFJWX1JFR0RXX01BUjQpOwpAQCAtNDk0LDExICs0OTMsMTEgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIEVkcnZVbmRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCkKK3RFcGxLZXJuZWwgRWRydlVuZGVmaW5lUnhNYWNBZGRyRW50cnkodTggKiBwYk1hY0FkZHJfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwotCURXT1JEIGR3RGF0YTsKLQlCWVRFIGJIYXNoOworCXUzMiBkd0RhdGE7CisJdTggYkhhc2g7CiAKIAliSGFzaCA9IEVkcnZDYWxjSGFzaChwYk1hY0FkZHJfcCk7CiAKQEAgLTUzMiw3ICs1MzEsNyBAQAogdEVwbEtlcm5lbCBFZHJ2QWxsb2NUeE1zZ0J1ZmZlcih0RWRydlR4QnVmZmVyICogcEJ1ZmZlcl9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JRFdPUkQgaTsKKwl1MzIgaTsKIAogCWlmIChwQnVmZmVyX3AtPm1fdWlNYXhCdWZmZXJMZW4gPiBFRFJWX01BWF9GUkFNRV9TSVpFKSB7CiAJCVJldCA9IGtFcGxFZHJ2Tm9GcmVlQnVmRW50cnk7CkBAIC02MDUsNyArNjA0LDcgQEAKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aUJ1ZmZlck51bWJlcjsKLQlEV09SRCBkd1RlbXA7CisJdTMyIGR3VGVtcDsKIAogCXVpQnVmZmVyTnVtYmVyID0gcEJ1ZmZlcl9wLT5tX3VpQnVmZmVyTnVtYmVyOwogCkBAIC02MjAsMTEgKzYxOSwxMSBAQAogCQlkd1RlbXAgPQogCQkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTRDAgKwogCQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKgotCQkJCSAgICAgIHNpemVvZihEV09SRCkpKSk7Ci0JCXByaW50aygiJXMgSW52T3AgVFNEJXUgPSAweCUwOGxYIiwgX19mdW5jX18sCisJCQkJICAgICAgc2l6ZW9mKHUzMikpKSk7CisJCXByaW50aygiJXMgSW52T3AgVFNEJXUgPSAweCUwOFgiLCBfX2Z1bmNfXywKIAkJICAgICAgIEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MsIGR3VGVtcCk7CiAJCXByaW50aygiICBDbWQgPSAweCUwMlhcbiIsCi0JCSAgICAgICAoV09SRCkgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKKwkJICAgICAgICh1MTYpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CiAJCWdvdG8gRXhpdDsKIAl9CiAJLy8gc2F2ZSBwb2ludGVyIHRvIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIFR4SGFuZGxlcgpAQCAtNjQwLDIyICs2MzksMjIgQEAKIAl9CiAJLy8gc2V0IERNQSBhZGRyZXNzIG9mIGJ1ZmZlcgogCUVEUlZfUkVHRFdfV1JJVEUoKEVEUlZfUkVHRFdfVFNBRDAgKwotCQkJICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZihEV09SRCkpKSwKKwkJCSAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YodTMyKSkpLAogCQkJIChFZHJ2SW5zdGFuY2VfbC5tX3BUeEJ1ZkRtYSArCiAJCQkgICh1aUJ1ZmZlck51bWJlciAqIEVEUlZfTUFYX0ZSQU1FX1NJWkUpKSk7CiAJZHdUZW1wID0KIAkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTQUQwICsKLQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YoRFdPUkQpKSkpOworCQkJICAgICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZih1MzIpKSkpOwogLy8gICAgcHJpbnRrKCIlcyBUU0FEJXUgPSAweCUwOGxYIiwgX19mdW5jX18sIEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MsIGR3VGVtcCk7CiAKIAkvLyBzdGFydCB0cmFuc21pc3Npb24KIAlFRFJWX1JFR0RXX1dSSVRFKChFRFJWX1JFR0RXX1RTRDAgKwotCQkJICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZihEV09SRCkpKSwKKwkJCSAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YodTMyKSkpLAogCQkJIChFRFJWX1JFR0RXX1RTRF9UWFRIX0RFRiB8IHBCdWZmZXJfcC0+bV91aVR4TXNnTGVuKSk7CiAJZHdUZW1wID0KIAkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTRDAgKwotCQkJICAgICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZihEV09SRCkpKSk7Ci0vLyAgICBwcmludGsoIiBUU0QldSA9IDB4JTA4bFggLyAweCUwOGxYXG4iLCBFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjLCBkd1RlbXAsIChEV09SRCkoRURSVl9SRUdEV19UU0RfVFhUSF9ERUYgfCBwQnVmZmVyX3AtPm1fdWlUeE1zZ0xlbikpOworCQkJICAgICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZih1MzIpKSkpOworLy8gICAgcHJpbnRrKCIgVFNEJXUgPSAweCUwOGxYIC8gMHglMDhsWFxuIiwgRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYywgZHdUZW1wLCAodTMyKShFRFJWX1JFR0RXX1RTRF9UWFRIX0RFRiB8IHBCdWZmZXJfcC0+bV91aVR4TXNnTGVuKSk7CiAKICAgICAgIEV4aXQ6CiAJcmV0dXJuIFJldDsKQEAgLTcyMCw3ICs3MTksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHN0YXRpYyB2b2lkIEVkcnZSZWluaXRSeCh2b2lkKQogewotCUJZVEUgYkNtZDsKKwl1OCBiQ21kOwogCiAJLy8gc2ltcGx5IHN3aXRjaCBvZmYgYW5kIG9uIHRoZSByZWNlaXZlcgogCS8vIHRoaXMgd2lsbCByZXNldCB0aGUgQ0FQUiByZWdpc3RlcgpAQCAtNzUxLDIxICs3NTAsMTYgQEAKIH0KICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkKIHN0YXRpYyBpbnQgVGd0RXRoSXNyKGludCBuSXJxTnVtX3AsIHZvaWQgKnBwRGV2SW5zdERhdGFfcCkKLSNlbHNlCi1zdGF0aWMgaW50IFRndEV0aElzcihpbnQgbklycU51bV9wLCB2b2lkICpwcERldkluc3REYXRhX3AsCi0JCSAgICAgc3RydWN0IHB0X3JlZ3MgKnB0UmVnc19wKQotI2VuZGlmCiB7CiAvLyAgICBFZHJ2SW50ZXJydXB0SGFuZGxlcigpOwogCXRFZHJ2UnhCdWZmZXIgUnhCdWZmZXI7CiAJdEVkcnZUeEJ1ZmZlciAqcFR4QnVmZmVyOwotCVdPUkQgd1N0YXR1czsKLQlEV09SRCBkd1R4U3RhdHVzOwotCURXT1JEIGR3UnhTdGF0dXM7Ci0JV09SRCB3Q3VyUng7Ci0JQllURSAqcGJSeEJ1ZjsKKwl1MTYgd1N0YXR1czsKKwl1MzIgZHdUeFN0YXR1czsKKwl1MzIgZHdSeFN0YXR1czsKKwl1MTYgd0N1clJ4OworCXU4ICpwYlJ4QnVmOwogCXVuc2lnbmVkIGludCB1aUxlbmd0aDsKIAlpbnQgaUhhbmRsZWQgPSBJUlFfSEFORExFRDsKIApAQCAtNzkzLDcgKzc4Nyw3IEBACiAJCWR3VHhTdGF0dXMgPQogCQkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTRDAgKwogCQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKgotCQkJCSAgICAgIHNpemVvZihEV09SRCkpKSk7CisJCQkJICAgICAgc2l6ZW9mKHUzMikpKSk7CiAJCWlmICgoZHdUeFN0YXR1cyAmIChFRFJWX1JFR0RXX1RTRF9UT0sgfCBFRFJWX1JFR0RXX1RTRF9UQUJUIHwgRURSVl9SRUdEV19UU0RfVFVOKSkgIT0gMCkgewkvLyB0cmFuc21pdCBmaW5pc2hlZAogCQkJRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyA9CiAJCQkgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKyAxKSAmIDB4MDM7CkBAIC04NTUsOCArODQ5LDggQEAKIAkJCS8vIGNhbGN1bGF0ZSBwb2ludGVyIHRvIGN1cnJlbnQgZnJhbWUgaW4gcmVjZWl2ZSBidWZmZXIKIAkJCXBiUnhCdWYgPSBFZHJ2SW5zdGFuY2VfbC5tX3BiUnhCdWYgKyB3Q3VyUng7CiAKLQkJCS8vIHJlYWQgcmVjZWl2ZSBzdGF0dXMgRFdPUkQKLQkJCWR3UnhTdGF0dXMgPSBsZTMyX3RvX2NwdSgqKChEV09SRCAqKSBwYlJ4QnVmKSk7CisJCQkvLyByZWFkIHJlY2VpdmUgc3RhdHVzIHUzMgorCQkJZHdSeFN0YXR1cyA9IGxlMzJfdG9fY3B1KCooKHUzMiAqKSBwYlJ4QnVmKSk7CiAKIAkJCS8vIGNhbGN1bGF0ZSBsZW5ndGggb2YgcmVjZWl2ZWQgZnJhbWUKIAkJCXVpTGVuZ3RoID0gZHdSeFN0YXR1cyA+PiAxNjsKQEAgLTg5Niw5ICs4OTAsOSBAQAogCQkJCSAgICBtX3BmblJ4SGFuZGxlcigmUnhCdWZmZXIpOwogCQkJfQogCi0JCQkvLyBjYWx1bGF0ZSBuZXcgb2Zmc2V0IChEV09SRCBhbGlnbmVkKQorCQkJLy8gY2FsdWxhdGUgbmV3IG9mZnNldCAodTMyIGFsaWduZWQpCiAJCQl3Q3VyUnggPQotCQkJICAgIChXT1JEKSAoKHdDdXJSeCArIHVpTGVuZ3RoICsgc2l6ZW9mKGR3UnhTdGF0dXMpICsKKwkJCSAgICAodTE2KSAoKHdDdXJSeCArIHVpTGVuZ3RoICsgc2l6ZW9mKGR3UnhTdGF0dXMpICsKIAkJCQkgICAgIDMpICYgfjB4Myk7CiAJCQlFRFJWX1RSQUNFX0NBUFIod0N1clJ4IC0gMHgxMCk7CiAJCQlFRFJWX1JFR1dfV1JJVEUoRURSVl9SRUdXX0NBUFIsIHdDdXJSeCAtIDB4MTApOwpAQCAtOTQxLDcgKzkzNSw3IEBACiBzdGF0aWMgaW50IEVkcnZJbml0T25lKHN0cnVjdCBwY2lfZGV2ICpwUGNpRGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcElkKQogewogCWludCBpUmVzdWx0ID0gMDsKLQlEV09SRCBkd1RlbXA7CisJdTMyIGR3VGVtcDsKIAogCWlmIChFZHJ2SW5zdGFuY2VfbC5tX3BQY2lEZXYgIT0gTlVMTCkgewkvLyBFZHJ2IGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgUENJIGRldmljZQogCQlwcmludGsoIiVzIGRldmljZSAlcyBkaXNjYXJkZWRcbiIsIF9fZnVuY19fLApAQCAtMTAwOCw3ICsxMDAyLDcgQEAKIAlkd1RlbXAgPSBFRFJWX1JFR0RXX1JFQUQoRURSVl9SRUdEV19UQ1IpOwogCWlmICgoKGR3VGVtcCAmIEVEUlZfUkVHRFdfVENSX1ZFUl9NQVNLKSAhPSBFRFJWX1JFR0RXX1RDUl9WRVJfQykKIAkgICAgJiYgKChkd1RlbXAgJiBFRFJWX1JFR0RXX1RDUl9WRVJfTUFTSykgIT0gRURSVl9SRUdEV19UQ1JfVkVSX0QpKSB7CS8vIHVuc3VwcG9ydGVkIGNoaXAKLQkJcHJpbnRrKCIlcyBVbnN1cHBvcnRlZCBjaGlwISBUQ1IgPSAweCUwOGxYXG4iLCBfX2Z1bmNfXywKKwkJcHJpbnRrKCIlcyBVbnN1cHBvcnRlZCBjaGlwISBUQ1IgPSAweCUwOFhcbiIsIF9fZnVuY19fLAogCQkgICAgICAgZHdUZW1wKTsKIAkJaVJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gRXhpdDsKQEAgLTEwNDMsMTEgKzEwMzcsMTEgQEAKICAgICAgICAgICAgIHByaW50aygiJXMgc2V0IGxvY2FsIE1BQyBhZGRyZXNzXG4iLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICAvLyB3cml0ZSB0aGlzIE1BQyBhZGRyZXNzIHRvIGNvbnRyb2xsZXIKICAgICAgICAgICAgIEVEUlZfUkVHRFdfV1JJVEUoRURSVl9SRUdEV19JRFIwLAotICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KCooKERXT1JEKikmRWRydkluc3RhbmNlX2wubV9Jbml0UGFyYW0ubV9hYk15TWFjQWRkclswXSkpKTsKKyAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSgqKCh1MzIqKSZFZHJ2SW5zdGFuY2VfbC5tX0luaXRQYXJhbS5tX2FiTXlNYWNBZGRyWzBdKSkpOwogICAgICAgICAgICAgZHdUZW1wID0gRURSVl9SRUdEV19SRUFEKEVEUlZfUkVHRFdfSURSMCk7CiAKICAgICAgICAgICAgIEVEUlZfUkVHRFdfV1JJVEUoRURSVl9SRUdEV19JRFI0LAotICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KCooKERXT1JEKikmRWRydkluc3RhbmNlX2wubV9Jbml0UGFyYW0ubV9hYk15TWFjQWRkcls0XSkpKTsKKyAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSgqKCh1MzIqKSZFZHJ2SW5zdGFuY2VfbC5tX0luaXRQYXJhbS5tX2FiTXlNYWNBZGRyWzRdKSkpOwogICAgICAgICAgICAgZHdUZW1wID0gRURSVl9SRUdEV19SRUFEKEVEUlZfUkVHRFdfSURSNCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTA4Nyw3ICsxMDgxLDcgQEAKIAlkd1RlbXAgPSBFRFJWX1JFR0RXX1JFQUQoRURSVl9SRUdEV19UU0FEMyk7CiAKIAlwcmludGsoIiAgICBDb21tYW5kID0gMHglMDJYXG4iLAotCSAgICAgICAoV09SRCkgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKKwkgICAgICAgKHUxNikgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKIAogCS8vIHNldCBwb2ludGVyIGZvciByZWNlaXZlIGJ1ZmZlciBpbiBjb250cm9sbGVyCiAJcHJpbnRrKCIlcyBzZXQgcG9pbnRlciB0byBSeCBidWZmZXJcbiIsIF9fZnVuY19fKTsKQEAgLTEwOTgsNyArMTA5Miw3IEBACiAJRURSVl9SRUdCX1dSSVRFKEVEUlZfUkVHQl9DT01NQU5ELAogCQkJKEVEUlZfUkVHQl9DT01NQU5EX1JFIHwgRURSVl9SRUdCX0NPTU1BTkRfVEUpKTsKIAlwcmludGsoIiAgQ29tbWFuZCA9IDB4JTAyWFxuIiwKLQkgICAgICAgKFdPUkQpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CisJICAgICAgICh1MTYpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CiAKIAkvLyBjbGVhciBtaXNzZWQgcGFja2V0IGNvdW50ZXIgdG8gZW5hYmxlIFJ4L1R4IHByb2Nlc3MKIAlFRFJWX1JFR0RXX1dSSVRFKEVEUlZfUkVHRFdfTVBDLCAwKTsKQEAgLTExMjMsNyArMTExNyw3IEBACiAgICAgLy8gZW5hYmxlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlcgogICAgIHByaW50aygiJXMgZW5hYmxlIFR4IGFuZCBSeCIsIF9fZnVuY19fKTsKICAgICBFRFJWX1JFR0JfV1JJVEUoRURSVl9SRUdCX0NPTU1BTkQsIChFRFJWX1JFR0JfQ09NTUFORF9SRSB8IEVEUlZfUkVHQl9DT01NQU5EX1RFKSk7Ci0gICAgcHJpbnRrKCIgIENvbW1hbmQgPSAweCUwMlhcbiIsIChXT1JEKSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOworICAgIHByaW50aygiICBDb21tYW5kID0gMHglMDJYXG4iLCAodTE2KSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOwogKi8KIAkvLyBkaXNhYmxlIGVhcmx5IGludGVycnVwdHMKIAlFRFJWX1JFR1dfV1JJVEUoRURSVl9SRUdXX01VTElOVCwgMCk7CkBAIC0xMjE1LDE1ICsxMjA5LDE1IEBACiAvLyNkZWZpbmUgQ1JDMzJfUE9MWSAgICAweEVEQjg4MzIwICAvLwogLy8gRyh4KSA9IHgzMiArIHgyNiArIHgyMyArIHgyMiArIHgxNiArIHgxMiArIHgxMSArIHgxMCArIHg4ICsgeDcgKyB4NSArIHg0ICsgeDIgKyB4ICsgMQogCi1zdGF0aWMgQllURSBFZHJ2Q2FsY0hhc2goQllURSAqIHBiTUFDX3ApCitzdGF0aWMgdTggRWRydkNhbGNIYXNoKHU4ICogcGJNQUNfcCkKIHsKLQlEV09SRCBkd0J5dGVDb3VudGVyOwotCURXT1JEIGR3Qml0Q291bnRlcjsKLQlEV09SRCBkd0RhdGE7Ci0JRFdPUkQgZHdDcmM7Ci0JRFdPUkQgZHdDYXJyeTsKLQlCWVRFICpwYkRhdGE7Ci0JQllURSBiSGFzaDsKKwl1MzIgZHdCeXRlQ291bnRlcjsKKwl1MzIgZHdCaXRDb3VudGVyOworCXUzMiBkd0RhdGE7CisJdTMyIGR3Q3JjOworCXUzMiBkd0NhcnJ5OworCXU4ICpwYkRhdGE7CisJdTggYkhhc2g7CiAKIAlwYkRhdGEgPSBwYk1BQ19wOwogCkBAIC0xMjQ2LDcgKzEyNDAsNyBAQAogLy8gICAgcHJpbnRrKCJNeUNSQyA9IDB4JTA4bFhcbiIsIGR3Q3JjKTsKIAkvLyBvbmx5IHVwcGVyIDYgYml0cyAoSEFTSF9CSVRTKSBhcmUgdXNlZAogCS8vIHdoaWNoIHBvaW50IHRvIHNwZWNpZmljIGJpdCBpbiB0aGUgaGFzaCByZWdpc3RlcnMKLQliSGFzaCA9IChCWVRFKSAoKGR3Q3JjID4+ICgzMiAtIEhBU0hfQklUUykpICYgMHgzZik7CisJYkhhc2ggPSAodTgpICgoZHdDcmMgPj4gKDMyIC0gSEFTSF9CSVRTKSkgJiAweDNmKTsKIAogCXJldHVybiBiSGFzaDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydkZlYy5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjLmgKaW5kZXggNWYyNTJmYi4uNTY3MjhkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjLmgKQEAgLTk2LDkgKzk2LDkgQEAKIAogLy8gUnggYW5kIFR4IGJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdAogdHlwZWRlZiBzdHJ1Y3QgewotCVdPUkQgbV93U3RhdHVzOwkJLy8gY29udHJvbCAvIHN0YXR1cyAgLS0tICB1c2VkIGJ5IGVkcnYsIGRvIG5vdCBjaGFuZ2UgaW4gYXBwbGljYXRpb24KLQlXT1JEIG1fd0xlbmd0aDsJCS8vIHRyYW5zZmVyIGxlbmd0aAotCUJZVEUgKm1fcGJEYXRhOwkJLy8gYnVmZmVyIGFkZHJlc3MKKwl1MTYgbV93U3RhdHVzOwkJLy8gY29udHJvbCAvIHN0YXR1cyAgLS0tICB1c2VkIGJ5IGVkcnYsIGRvIG5vdCBjaGFuZ2UgaW4gYXBwbGljYXRpb24KKwl1MTYgbV93TGVuZ3RoOwkJLy8gdHJhbnNmZXIgbGVuZ3RoCisJdTggKm1fcGJEYXRhOwkJLy8gYnVmZmVyIGFkZHJlc3MKIH0gdEJ1ZmZlckRlc2NyOwogCiAjaWYgKChUQVJHRVRfSEFSRFdBUkUgJiBUR1RfQ1BVX01BU0tfKSA9PSBUR1RfQ1BVXzUyODIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZGZWM1MjgyLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZGZWM1MjgyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNmJiMWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjNTI4Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBpbnRlcmZhY2UgZm9yIGV0aGVybmV0ZHJpdmVyCi0gICAgICAgICAgICAgICAgImZhc3QgZXRoZXJuZXQgY29udHJvbGxlciIgKEZFQykKLSAgICAgICAgICAgICAgICBmcmVlc2NhbGUgY29sZGZpcmUgTUNGNTI4eCBhbmQgY29tcGF0aWJsZSBGRUMKLQotICBMaWNlbnNlOgotCi0gICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gICAgYXJlIG1ldDoKLQotICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSAgICAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBpbmZvQHN5c3RlYy1lbGVjdHJvbmljLmNvbS4KLQotICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgICBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICAgIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KLSAgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotICAgIFNldmVyYWJpbGl0eSBDbGF1c2U6Ci0KLSAgICAgICAgSWYgYSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIG9yIGJlY29tZXMgaWxsZWdhbCwgaW52YWxpZCBvcgotICAgICAgICB1bmVuZm9yY2VhYmxlIGluIGFueSBqdXJpc2RpY3Rpb24sIHRoYXQgc2hhbGwgbm90IGFmZmVjdDoKLSAgICAgICAgMS4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIHRoYXQganVyaXNkaWN0aW9uIG9mIGFueSBvdGhlcgotICAgICAgICAgICBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlOyBvcgotICAgICAgICAyLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gb3RoZXIganVyaXNkaWN0aW9ucyBvZiB0aGF0IG9yCi0gICAgICAgICAgIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLgotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgICAgICAgICAgICRSQ1NmaWxlOiBFZHJ2RmVjNTI4Mi5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS4zICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgIERldiBDKysgYW5kIEdOVS1Db21waWxlciBmb3IgbTY4awotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDUvMDgvMDEgbS5iLjogICBzdGFydCBvZiBpbXBsZW1lbnRhdGlvbgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9FRFJWRkVDX0hfCi0jZGVmaW5lIF9FRFJWRkVDX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gYmFzZSBhZGRyZXNzZXMKLSNkZWZpbmUgRkVDMF9BRERSIDB4MDAwMAotI2RlZmluZSBGRUMxX0FERFIgMHgwMDAwCS8vdGJkCi0KLS8vIGNvbnRyb2wgLyBzdGF0dXMgcmVnaXN0ZXJzCi0jZGVmaW5lIEZFQ19FSVIgICAgICAgICAgICAgICAgIDB4MTAwNAkvLyBpbnRlcnJ1cHQgZXZlbnQgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX0VJTVIgICAgICAgICAgICAgICAgMHgxMDA4CS8vIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19SREFSICAgICAgICAgICAgICAgIDB4MTAxMAkvLyByZWNlaXZlIGRlc2NyaXB0b3IgYWN0aXZlIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19UREFSICAgICAgICAgICAgICAgIDB4MTAxNAkvLyB0cmFuc21pdCBkZXNjcmlwdG9yIGFjdGl2ZSByZWdpc3RlcgotI2RlZmluZSBGRUNfRUNSICAgICAgICAgICAgICAgICAweDEwMjQJLy8gZXRoZXJuZXQgY29udHJvbCByZWdpc3RlcgotI2RlZmluZSBGRUNfTU1GUiAgICAgICAgICAgICAgICAweDEwNDAJLy8gTUlJIGRhdGEgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX01TQ1IgICAgICAgICAgICAgICAgMHgxMDQ0CS8vIE1JSSBzcGVlZCByZWdpc3RlcgotI2RlZmluZSBGRUNfTUlCQyAgICAgICAgICAgICAgICAweDEwNjQJLy8gTUlCIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19SQ1IgICAgICAgICAgICAgICAgIDB4MTA4NAkvLyByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX1RDUiAgICAgICAgICAgICAgICAgMHgxMEM0CS8vIHRyYW5zbWl0IGNvbnRyb2wgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX1BBTFIgICAgICAgICAgICAgICAgMHgxMEU0CS8vIHBoeXNpY2FsIGFkZHJlc3MgbG93IHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19QQVVSICAgICAgICAgICAgICAgIDB4MTBFOAkvLyBwaHlzaWNhbCBhZGRyZXNzIGhpZ2ggKyB0eXBlIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19PUEQgICAgICAgICAgICAgICAgIDB4MTBFQwkvLyBvcGNvZGUgKyBwYXVzZSByZWdpc3RlcgotI2RlZmluZSBGRUNfSUFVUiAgICAgICAgICAgICAgICAweDExMTgJLy8gdXBwZXIgMzIgYml0IG9mIGluZGl2aWR1YWwgaGFzaCB0YWJsZQotI2RlZmluZSBGRUNfSUFMUiAgICAgICAgICAgICAgICAweDExMUMJLy8gbG93ZXIgMzIgYml0IG9mIGluZGl2aWR1YWwgaGFzaCB0YWJsZQotI2RlZmluZSBGRUNfR0FVUiAgICAgICAgICAgICAgICAweDExMjAJLy8gdXBwZXIgMzIgYml0IG9mIGdyb3VwIGhhc2ggdGFibGUKLSNkZWZpbmUgRkVDX0dBTFIgICAgICAgICAgICAgICAgMHgxMTI0CS8vIGxvd2VyIDMyIGJpdCBvZiBncm91cCBoYXNoIHRhYmxlCi0jZGVmaW5lIEZFQ19URldSICAgICAgICAgICAgICAgIDB4MTE0NAkvLyB0cmFuc21pdCBGSUZPIHdhdGVybWFyawotI2RlZmluZSBGRUNfRlJCUiAgICAgICAgICAgICAgICAweDExNEMJLy8gRklGTyByZWNlaXZlIGJvdW5kIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19GUlNSICAgICAgICAgICAgICAgIDB4MTE1MAkvLyBGSUZPIHJlY2VpdmUgRklGTyBzdGFydCByZWdpc3RlcgotI2RlZmluZSBGRUNfRVJEU1IgICAgICAgICAgICAgICAweDExODAJLy8gcG9pbnRlciB0byByZWNlaXZlIGRlc2NyaXB0b3IgcmluZwotI2RlZmluZSBGRUNfRVREU1IgICAgICAgICAgICAgICAweDExODQJLy8gcG9pbnRlciB0byB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcKLSNkZWZpbmUgRkVDX0VNUkJSICAgICAgICAgICAgICAgMHgxMTg4CS8vIG1heGltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZQotCi0vLyBtaWIgYmxvY2sgY291bnRlcnMgbWVtb3J5IG1hcAotI2RlZmluZSBGRUNfUk1PTl9UX0RST1AgICAgICAgICAweDEyMDAJLy8gY291bnQgb2YgZnJhbWVzIG5vdCBjb3VudGVkIGNvcnJlY3RseQotI2RlZmluZSBGRUNfUk1PTl9UX1BBQ0tFVFMgICAgICAweDEyMDQJLy8gUk1PTiB0eCBwYWNrZXQgY291bnQKLSNkZWZpbmUgRkVDX1JNT05fVF9CQ19QS1QgICAgICAgMHgxMjA4CS8vIFJNT04gdHggYnJvYWRjYXN0IHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9NQ19QS1QgICAgICAgMHgxMjBDCS8vIFJNT04gdHggbXVsdGljYXN0IHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9DUkNfQUxJR04gICAgMHgxMjEwCS8vIFJNT04gdHggcGFja2V0cyB3IENSQy9hbGlnbiBlcnJvcgotI2RlZmluZSBGRUNfUk1PTl9UX1VOREVSU0laRSAgICAweDEyMTQJLy8gUk1PTiB0eCBwYWNrZXRzIDwgNjQgYnl0ZXMsIGdvb2QgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1RfT1ZFUlNJWkUgICAgIDB4MTIxOAkvLyBSTU9OIHR4IHBhY2tldHMgPiBNQVhfRkwgYnl0ZXMsIGdvb2QgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1RfRlJBRyAgICAgICAgIDB4MTIxQwkvLyBSTU9OIHR4IHBhY2tldHMgPCA2NCBieXRlcywgYmFkIENSQwotI2RlZmluZSBGRUNfUk1PTl9UX0pBQiAgICAgICAgICAweDEyMjAJLy8gUk1PTiB0eCBwYWNrZXRzID4gTUFYX0ZMIGJ5dGVzLCBiYWQgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1RfQ09MICAgICAgICAgIDB4MTIyNAkvLyBSTU9OIHR4IGNvbGxpc2lvbiBjb3VudAotI2RlZmluZSBGRUNfUk1PTl9UX1A2NCAgICAgICAgICAweDEyMjgJLy8gUk1PTiB0eCAgICAgICAgICAgNjQgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfUDY1VE8xMjcgICAgIDB4MTIyQwkvLyBSTU9OIHR4ICAgNjUgdG8gIDEyNyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9QMTI4VE8yNTUgICAgMHgxMjMwCS8vIFJNT04gdHggIDEyOCB0byAgMjU1IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9UX1AyNTZUTzUxMSAgICAweDEyMzQJLy8gUk1PTiB0eCAgMjU2IHRvICA1MTEgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfUDUxMlRPMTAyMyAgIDB4MTIzOAkvLyBSTU9OIHR4ICA1MTIgdG8gMTAyMyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9QMTAyNFRPMjA0NyAgMHgxMjNDCS8vIFJNT04gdHggMTAyNCB0byAyMDQ3IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9UX1BfR1RFMjA0OCAgICAweDEyNDAJLy8gUk1PTiB0eCB3ID4gMjA0OCBieXRlcwotI2RlZmluZSBGRUNfUk1PTl9UX09DVEVUUyAgICAgICAweDEyNDQJLy8gUk1PTiB0eCBvY3RldHMKLSNkZWZpbmUgRkVDX0lFRUVfVF9EUk9QICAgICAgICAgMHgxMjQ4CS8vIGNvdW50IG9mIGZyYW1lcyBub3QgY291bnRlZCBjb3JyZWN0bHkKLSNkZWZpbmUgRkVDX0lFRUVfVF9GUkFNRV9PSyAgICAgMHgxMjRDCS8vIGZyYW1lcyB0cmFuc21pdHRlZCBPSwotI2RlZmluZSBGRUNfSUVFRV9UXzFDT0wgICAgICAgICAweDEyNTAJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggc2luZ2xlIGNvbGxpc2lvbgotI2RlZmluZSBGRUNfSUVFRV9UX01DT0wgICAgICAgICAweDEyNTQJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggbXVsdGlwbGUgY29sbGlzaW9ucwotI2RlZmluZSBGRUNfSUVFRV9UX0RFRiAgICAgICAgICAweDEyNTgJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIGFmdGVyIGRlZmVycmFsIGRlbGF5Ci0jZGVmaW5lIEZFQ19JRUVFX1RfTENPTCAgICAgICAgIDB4MTI1QwkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBsYXRlIGNvbGxpc2lvbnMKLSNkZWZpbmUgRkVDX0lFRUVfVF9FWENPTCAgICAgICAgMHgxMjYwCS8vIGZyYW1lcyB0cmFuc21pdHRlZCB3aXRoIGV4Y2Vzc2l2ZSBjb2xsaXNpb25zCi0jZGVmaW5lIEZFQ19JRUVFX1RfTUFDRVJSICAgICAgIDB4MTI2NAkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCB0eC1GSUZPIHVuZGVycnVuCi0jZGVmaW5lIEZFQ19JRUVFX1RfQ1NFUlIgICAgICAgIDB4MTI2OAkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBjYXJyaWVyIHNlbnNlIGVycm9yCi0jZGVmaW5lIEZFQ19JRUVFX1RfU1FFICAgICAgICAgIDB4MTI2QwkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBTUUUgZXJyb3IKLSNkZWZpbmUgRkVDX0lFRUVfVF9GRFhGQyAgICAgICAgMHgxMjcwCS8vIGZsb3cgY29udHJvbCBwYXVzZSBmcmFtZXMgdHJhbnNtaXR0ZWQKLSNkZWZpbmUgRkVDX0lFRUVfVF9PQ1RFVFNfT0sgICAgMHgxMjc0CS8vIG9jdGV0IGNvdW50IGZvciBmcmFtZXMgdHJhbnNtaXR0ZWQgdy9vIGVycm9yCi0jZGVmaW5lIEZFQ19STU9OX1JfUEFDS0VUUyAgICAgIDB4MTI4NAkvLyBSTU9OIHJ4IHBhY2tldCBjb3VudAotI2RlZmluZSBGRUNfUk1PTl9SX0JDX1BLVCAgICAgICAweDEyODgJLy8gUk1PTiByeCBicm9hZGNhc3QgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX01DX1BLVCAgICAgICAweDEyOEMJLy8gUk1PTiByeCBtdWx0aWNhc3QgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX0NSQ19BTElHTiAgICAweDEyOTAJLy8gUk1PTiByeCBwYWNrZXRzIHcgQ1JDL2FsaWduIGVycm9yCi0jZGVmaW5lIEZFQ19STU9OX1JfVU5ERVJTSVpFICAgIDB4MTI5NAkvLyBSTU9OIHJ4IHBhY2tldHMgPCA2NCBieXRlcywgZ29vZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fUl9PVkVSU0laRSAgICAgMHgxMjk4CS8vIFJNT04gcnggcGFja2V0cyA+IE1BWF9GTCBieXRlcywgZ29vZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fUl9GUkFHICAgICAgICAgMHgxMjlDCS8vIFJNT04gcnggcGFja2V0cyA8IDY0IGJ5dGVzLCBiYWQgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1JfSkFCICAgICAgICAgIDB4MTJBMAkvLyBSTU9OIHJ4IHBhY2tldHMgPiBNQVhfRkwgYnl0ZXMsIGJhZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fUl9SRVNWRF8wICAgICAgMHgxMkE0CS8vCi0jZGVmaW5lIEZFQ19STU9OX1JfUDY0ICAgICAgICAgIDB4MTJBOAkvLyBSTU9OIHJ4ICAgICAgICAgICA2NCBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9QNjVUMDEyNyAgICAgMHgxMkFDCS8vIFJNT04gcnggICA2NSB0byAgMTI3IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX1AxMjhUTzI1NSAgICAweDEyQjAJLy8gUk1PTiByeCAgMTI4IHRvICAyNTUgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1JfUDI1NlRPNTExICAgIDB4MTJCNAkvLyBSTU9OIHJ4ICAyNTYgdG8gIDUxMSBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9QNTEyVE8xMDIzICAgMHgxMkI4CS8vIFJNT04gcnggIDUxMiB0byAxMDIzIGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX1AxMDI0VE8yMDQ3ICAweDEyQkMJLy8gUk1PTiByeCAxMDI0IHRvIDIwNDcgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1JfR1RFMjA0OCAgICAgIDB4MTJDMAkvLyBSTU9OIHJ4IHcgPiAyMDQ4IGJ5dGVzCi0jZGVmaW5lIEZFQ19STU9OX1JfT0NURVRTICAgICAgIDB4MTJDNAkvLyBSTU9OIHJ4IG9jdGV0cwotI2RlZmluZSBGRUNfSUVFRV9SX0RST1AgICAgICAgICAweDEyQzgJLy8gY291bnQgb2YgZnJhbWVzIG5vdCBjb3VudGVkIGNvcnJlY3RseQotI2RlZmluZSBGRUNfSUVFRV9SX0ZSQU1FX09LICAgICAweDEyQ0MJLy8gZnJhbWVzIHJlY2VpdmVkIE9LCi0jZGVmaW5lIEZFQ19JRUVFX1JfQ1JDICAgICAgICAgIDB4MTJEMAkvLyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKLSNkZWZpbmUgRkVDX0lFRUVfUl9BTElHTiAgICAgICAgMHgxMkQ0CS8vIGZyYW1lcyByZWNlaXZlZCB3aXRoIGFsaWdubWVudCBlcnJvcgotI2RlZmluZSBGRUNfSUVFRV9SX01BQ0VSUiAgICAgICAweDEyRDgJLy8gcmVjZWl2ZSBGSUZPIG92ZXJmbG93IGNvdW50Ci0jZGVmaW5lIEZFQ19JRUVFX1JfRkRYRkMgICAgICAgIDB4MTJEQwkvLyBmbG93IGNvbnRyb2wgcGF1c2UgZnJhbWVzIHJlY2VpdmVkCi0jZGVmaW5lIEZFQ19JRUVFX1JfT0NURVRTX09LICAgIDB4MTJFMAkvLyBvY3RldCBjb3VudCBmb3IgZnJhbWVzIHJjdmQgdy9vIGVycm9yCi0KLS8vIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zCi0jZGVmaW5lIEZFQ19FSVJfVU4gICAgICAgICAgICAgICgweDAwMDgwMDAwKQotI2RlZmluZSBGRUNfRUlSX1JMICAgICAgICAgICAgICAoMHgwMDEwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9MQyAgICAgICAgICAgICAgKDB4MDAyMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfRUJFUlIgICAgICAgICAgICgweDAwNDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX01JSSAgICAgICAgICAgICAoMHgwMDgwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9SWEIgICAgICAgICAgICAgKDB4MDEwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfUlhGICAgICAgICAgICAgICgweDAyMDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX1RYQiAgICAgICAgICAgICAoMHgwNDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9UWEYgICAgICAgICAgICAgKDB4MDgwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfR1JBICAgICAgICAgICAgICgweDEwMDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX0JBQlQgICAgICAgICAgICAoMHgyMDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9CQUJSICAgICAgICAgICAgKDB4NDAwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfSEJFUlIgICAgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19FSU1SX1VOICAgICAgICAgICAgICgweDAwMDgwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9STCAgICAgICAgICAgICAoMHgwMDEwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfTEMgICAgICAgICAgICAgKDB4MDAyMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0VCRVJSICAgICAgICAgICgweDAwNDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9NSUkgICAgICAgICAgICAoMHgwMDgwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfUlhCICAgICAgICAgICAgKDB4MDEwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX1JYRiAgICAgICAgICAgICgweDAyMDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9UWEIgICAgICAgICAgICAoMHgwNDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfVFhGICAgICAgICAgICAgKDB4MDgwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0dSQSAgICAgICAgICAgICgweDEwMDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9CQUJUICAgICAgICAgICAoMHgyMDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfQkFCUiAgICAgICAgICAgKDB4NDAwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0hCRVJSICAgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19SREFSX1JfREVTX0FDVElWRSAgICgweDAxMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19UREFSX1hfREVTX0FDVElWRSAgICgweDAxMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19FQ1JfUkVTRVQgICAgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBGRUNfRUNSX0VUSEVSX0VOICAgICAgICAoMHgwMDAwMDAwMikKLQotI2RlZmluZSBGRUNfTU1GUl9EQVRBKHgpICAgICAgICAoKCh4KSAmIDB4RkZGRikpCi0jZGVmaW5lIEZFQ19NTUZSX1RBICAgICAgICAgICAgICgweDAwMDIwMDAwKQotI2RlZmluZSBGRUNfTU1GUl9SQSh4KSAgICAgICAgICAoKCh4KSAmIDB4MUYpIDw8IDE4KQotI2RlZmluZSBGRUNfTU1GUl9QQSh4KSAgICAgICAgICAoKCh4KSAmIDB4MUYpIDw8IDIzKQotI2RlZmluZSBGRUNfTU1GUl9PUF9XUiAgICAgICAgICAoMHgxMDAwMDAwMCkKLSNkZWZpbmUgRkVDX01NRlJfT1BfUkQgICAgICAgICAgKDB4MjAwMDAwMDApCi0jZGVmaW5lIEZFQ19NTUZSX1NUICAgICAgICAgICAgICgweDQwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19NU0NSX01JSV9TUEVFRCh4KSAgICgoKHgpICYgMHgxRikgPDwgMSkKLSNkZWZpbmUgRkVDX01TQ1JfRElTX1BSRUFNQkxFICAgKDB4MDAwMDAwMDgpCi0KLSNkZWZpbmUgRkVDX01JQkNfTUlCX0lETEUgICAgICAgKDB4NDAwMDAwMDApCi0jZGVmaW5lIEZFQ19NSUJDX01JQl9ESVNBQkxFICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19SQ1JfTE9PUCAgICAgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBGRUNfUkNSX0RSVCAgICAgICAgICAgICAoMHgwMDAwMDAwMikKLSNkZWZpbmUgRkVDX1JDUl9NSUlfTU9ERSAgICAgICAgKDB4MDAwMDAwMDQpCi0jZGVmaW5lIEZFQ19SQ1JfUFJPTSAgICAgICAgICAgICgweDAwMDAwMDA4KQotI2RlZmluZSBGRUNfUkNSX0JDX1JFSiAgICAgICAgICAoMHgwMDAwMDAxMCkKLSNkZWZpbmUgRkVDX1JDUl9GQ0UgICAgICAgICAgICAgKDB4MDAwMDAwMjApCi0jZGVmaW5lIEZFQ19SQ1JfTUFYX0ZMKHgpICAgICAgICgoKHgpICYgMHgwN0ZGKSA8PCAxNikKLQotI2RlZmluZSBGRUNfVENSX0dUUyAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKLSNkZWZpbmUgRkVDX1RDUl9IQkMgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCi0jZGVmaW5lIEZFQ19UQ1JfRkRFTiAgICAgICAgICAgICgweDAwMDAwMDA0KQotI2RlZmluZSBGRUNfVENSX1RGQ19QQVVTRSAgICAgICAoMHgwMDAwMDAwOCkKLSNkZWZpbmUgRkVDX1RDUl9SRkNfUEFVU0UgICAgICAgKDB4MDAwMDAwMTApCi0KLSNkZWZpbmUgRkVDX1BBTFJfQllURTMoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX1BBTFJfQllURTIoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgOCkKLSNkZWZpbmUgRkVDX1BBTFJfQllURTEoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxNikKLSNkZWZpbmUgRkVDX1BBTFJfQllURTAoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKLQotLy8jZGVmaW5lIEZFQ19QQVVSX1RZUEUoeCkgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX1BBVVJfQllURTUoeCkgICAgICAgKCgoeCkgJiAgIDB4RkYpIDw8IDE2KQotI2RlZmluZSBGRUNfUEFVUl9CWVRFNCh4KSAgICAgICAoKCh4KSAmICAgMHhGRikgPDwgMjQpCi0KLSNkZWZpbmUgRkVDX09QRF9QQVVTRV9EVVIoeCkgICAgKCgoeCkgJiAweEZGRkYpKQotLy8jZGVmaW5lIEZFQ19PUERfT1BDT0RFKHgpICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU3KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU2KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDgpCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU1KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMTYpCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU0KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCi0KLSNkZWZpbmUgRkVDX0lBTFJfQllURTMoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX0lBTFJfQllURTIoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgOCkKLSNkZWZpbmUgRkVDX0lBTFJfQllURTEoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxNikKLSNkZWZpbmUgRkVDX0lBTFJfQllURTAoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKLQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNyh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICAwKQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNih4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICA4KQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNSh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDE2KQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNCh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQotCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUzKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUyKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDgpCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUxKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMTYpCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUwKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCi0vLyBeXl5eCi0KLSNkZWZpbmUgRkVDX1RGV1JfWF9XTVJLXzY0ICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIEZFQ19URldSX1hfV01SS18xMjggICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBGRUNfVEZXUl9YX1dNUktfMTkyICAgICAoMHgwMDAwMDAwMykKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19GUkJSX1JfQk9VTkQoeCkgICAgICgoKHgpICYgMHhGRikgPDwgMikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19GUlNSX1JfRlNUQVJUKHgpICAgICgoKHgpICYgMHhGRikgPDwgMikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19FUkRTUl9SX0RFU19TVEFSVCh4KSAgKCgoeCkgJiAweDNGRkZGRkZGKSA8PCAyKQotCi0vL20uYi4KLSNkZWZpbmUgRkVDX0VUU0RSX1hfREVTX1NUQVJUKHgpICAoKCh4KSAmIDB4M0ZGRkZGRkYpIDw8IDIpCi0KLSNkZWZpbmUgRkVDX0VNUkJSX1JfQlVGX1NJWkUoeCkgKCgoeCkgJiAweDdGKSA8PCAgNCkKLQotI2RlZmluZSBGRUNfUnhCRF9UUiAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgRkVDX1J4QkRfT1YgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIEZFQ19SeEJEX0NSICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBGRUNfUnhCRF9OTyAgICAgICAgICAgICAweDAwMTAKLSNkZWZpbmUgRkVDX1J4QkRfTEcgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIEZFQ19SeEJEX01DICAgICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBGRUNfUnhCRF9CQyAgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUgRkVDX1J4QkRfTSAgICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIEZFQ19SeEJEX0wgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBGRUNfUnhCRF9SMDIgICAgICAgICAgICAweDEwMDAKLSNkZWZpbmUgRkVDX1J4QkRfVyAgICAgICAgICAgICAgMHgyMDAwCi0jZGVmaW5lIEZFQ19SeEJEX1IwMSAgICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBGRUNfUnhCRF9JTlVTRSAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgRkVDX1J4QkRfRSAgICAgICAgICAgICAgMHg4MDAwCi0KLS8vbS5iLgotLy8jZGVmaW5lIEZFQ19UeEJEX0NTTCAgICAgICAgICAgIDB4MDAwMQotLy8jZGVmaW5lIEZFQ19UeEJEX1VOICAgICAgICAgICAgIDB4MDAwMgotLy8jZGVmaW5lIEZFQ19UeEJEX1JMICAgICAgICAgICAgIDB4MDA0MAotLy8jZGVmaW5lIEZFQ19UeEJEX0xDICAgICAgICAgICAgIDB4MDA4MAotLy8jZGVmaW5lIEZFQ19UeEJEX0hCICAgICAgICAgICAgIDB4MDEwMAotLy8jZGVmaW5lIEZFQ19UeEJEX0RFRiAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBGRUNfVHhCRF9BQkMgICAgICAgICAgICAweDAyMDAKLS8vIF5eXl4KLSNkZWZpbmUgRkVDX1R4QkRfVEMgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lIEZFQ19UeEJEX0wgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBGRUNfVHhCRF9UTzIgICAgICAgICAgICAweDEwMDAKLSNkZWZpbmUgRkVDX1R4QkRfVyAgICAgICAgICAgICAgMHgyMDAwCi0jZGVmaW5lIEZFQ19UeEJEX1RPMSAgICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBGRUNfVHhCRF9JTlVTRSAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgRkVDX1R4QkRfUiAgICAgICAgICAgICAgMHg4MDAwCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUnggYW5kIFR4IGJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdAotdHlwZWRlZiBzdHJ1Y3QgewotCVdPUkQgbV93U3RhdHVzOwkJLy8gY29udHJvbCAvIHN0YXR1cyAgLS0tICB1c2VkIGJ5IGVkcnYsIGRvIG5vdCBjaGFuZ2UgaW4gYXBwbGljYXRpb24KLQlXT1JEIG1fd0xlbmd0aDsJCS8vIHRyYW5zZmVyIGxlbmd0aAotCUJZVEUgKm1fcGJEYXRhOwkJLy8gYnVmZmVyIGFkZHJlc3MKLX0gdEJ1ZmZlckRlc2NyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIChOT19PRl9JTlNUQU5DRVMgPiAxKQotI2RlZmluZSBFQ0lfV1JJVEVfRFdfUkVHKG9mZix2YWwpICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW29mZl0pID0gdmFsKQotI2RlZmluZSBFQ0lfUkVBRF9EV19SRUcob2ZmKSAgICAgICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW29mZl0pKQotI2Vsc2UKLSNpZiAoRURSVl9VU0VEX0VUSF9DVFJMID09IDApCi0jZGVmaW5lIEVDSV9XUklURV9EV19SRUcob2ZmLHZhbCkgICAgICAgKCooRFdPUkQgKikodm9pZCAqKSgmX19JUFNCQVJbRkVDMF9BRERSK29mZl0pID0gdmFsKQotI2RlZmluZSBFQ0lfUkVBRF9EV19SRUcob2ZmKSAgICAgICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW0ZFQzBfQUREUitvZmZdKSkKLSNlbHNlCi0jZGVmaW5lIEVDSV9XUklURV9EV19SRUcob2ZmLHZhbCkgICAgICAgKCooRFdPUkQgKikodm9pZCAqKSgmX19JUFNCQVJbRkVDMV9BRERSK29mZl0pID0gdmFsKQotI2RlZmluZSBFQ0lfUkVBRF9EV19SRUcob2ZmKSAgICAgICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW0ZFQzFfQUREUitvZmZdKSkKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvLyAjaWZuZGVmIF9FRFJWX0ZFQ19IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZTaW0uaAppbmRleCAzOTMwMGUzMi4uMTkxZWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKQEAgLTgzLDcgKzgzLDcgQEAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgRWRydlJ4SW50ZXJydXB0SGFuZGxlcihCWVRFIGJCdWZmZXJJbkZyYW1lX3AsIEJZVEUgKiBwYkV0aGVybmV0RGF0YV9wLAotCQkJICAgIFdPUkQgd0RhdGFMZW5fcCk7Cit2b2lkIEVkcnZSeEludGVycnVwdEhhbmRsZXIodTggYkJ1ZmZlckluRnJhbWVfcCwgdTggKiBwYkV0aGVybmV0RGF0YV9wLAorCQkJICAgIHUxNiB3RGF0YUxlbl9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VEUlZTSU1fSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbC5oCmluZGV4IGJlNjBmNzcuLjdmMjJiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGwuaApAQCAtODksNyArODksNyBAQAogCXVuc2lnbmVkIGludCBtX3VpTm9kZUlkOwogCXRFcGxObXRTdGF0ZSBtX05tdFN0YXRlOwogCXRFcGxObXROb2RlRXZlbnQgbV9Ob2RlRXZlbnQ7Ci0JV09SRCBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fTm9kZUV2ZW50ID09IGtFcGxObXROb2RlRXZlbnRFcnJvcgorCXUxNiBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fTm9kZUV2ZW50ID09IGtFcGxObXROb2RlRXZlbnRFcnJvcgogCUJPT0wgbV9mTWFuZGF0b3J5OwogCiB9IHRFcGxBcGlFdmVudE5vZGU7CkBAIC05Nyw3ICs5Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbE5tdFN0YXRlIG1fTm10U3RhdGU7CS8vIGxvY2FsIE5NVCBzdGF0ZQogCXRFcGxObXRCb290RXZlbnQgbV9Cb290RXZlbnQ7Ci0JV09SRCBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fQm9vdEV2ZW50ID09IGtFcGxObXRCb290RXZlbnRFcnJvcgorCXUxNiBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fQm9vdEV2ZW50ID09IGtFcGxObXRCb290RXZlbnRFcnJvcgogCiB9IHRFcGxBcGlFdmVudEJvb3Q7CiAKQEAgLTEzMSwzMyArMTMxLDMzIEBACiAKIH0gdEVwbEFwaUV2ZW50QXJnOwogCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDIFJPTSAqIHRFcGxBcGlDYkV2ZW50KSAodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkJCQkgdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkJCQkgdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxBcGlDYkV2ZW50KSAodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCisJCQkJICAgICB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkJCSAgICAgIHZvaWQgKnBVc2VyQXJnX3ApOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IG1fdWlTaXplT2ZTdHJ1Y3Q7CiAJQk9PTCBtX2ZBc3luY09ubHk7CS8vIGRvIG5vdCBuZWVkIHRvIHJlZ2lzdGVyIFBSZXMKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gbG9jYWwgbm9kZSBJRAotCUJZVEUgbV9hYk1hY0FkZHJlc3NbNl07CS8vIGxvY2FsIE1BQyBhZGRyZXNzCisJdTggbV9hYk1hY0FkZHJlc3NbNl07CS8vIGxvY2FsIE1BQyBhZGRyZXNzCiAKIAkvLyAweDFGODI6IE5NVF9GZWF0dXJlRmxhZ3NfVTMyCi0JRFdPUkQgbV9kd0ZlYXR1cmVGbGFnczsKKwl1MzIgbV9kd0ZlYXR1cmVGbGFnczsKIAkvLyBDeWNsZSBMZW5ndGggKDB4MTAwNjogTk1UX0N5Y2xlTGVuX1UzMikgaW4gW3VzXQotCURXT1JEIG1fZHdDeWNsZUxlbjsJLy8gcmVxdWlyZWQgZm9yIGVycm9yIGRldGVjdGlvbgorCXUzMiBtX2R3Q3ljbGVMZW47CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAkvLyAweDFGOTg6IE5NVF9DeWNsZVRpbWluZ19SRUMKIAkvLyAweDFGOTguMTogSXNvY2hyVHhNYXhQYXlsb2FkX1UxNgogCXVuc2lnbmVkIGludCBtX3VpSXNvY2hyVHhNYXhQYXlsb2FkOwkvLyBjb25zdAogCS8vIDB4MUY5OC4yOiBJc29jaHJSeE1heFBheWxvYWRfVTE2CiAJdW5zaWduZWQgaW50IG1fdWlJc29jaHJSeE1heFBheWxvYWQ7CS8vIGNvbnN0CiAJLy8gMHgxRjk4LjM6IFBSZXNNYXhMYXRlbmN5X1UzMgotCURXT1JEIG1fZHdQcmVzTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKKwl1MzIgbV9kd1ByZXNNYXhMYXRlbmN5OwkvLyBjb25zdCBpbiBbbnNdLCBvbmx5IHJlcXVpcmVkIGZvciBJZGVudFJlcwogCS8vIDB4MUY5OC40OiBQUmVxQWN0UGF5bG9hZExpbWl0X1UxNgogCXVuc2lnbmVkIGludCBtX3VpUHJlcUFjdFBheWxvYWRMaW1pdDsJLy8gcmVxdWlyZWQgZm9yIGluaXRpYWxpc2F0aW9uICgrMjggYnl0ZXMpCiAJLy8gMHgxRjk4LjU6IFBSZXNBY3RQYXlsb2FkTGltaXRfVTE2CiAJdW5zaWduZWQgaW50IG1fdWlQcmVzQWN0UGF5bG9hZExpbWl0OwkvLyByZXF1aXJlZCBmb3IgaW5pdGlhbGlzYXRpb24gb2YgUHJlcyBmcmFtZSAoKzI4IGJ5dGVzKQogCS8vIDB4MUY5OC42OiBBU25kTWF4TGF0ZW5jeV9VMzIKLQlEV09SRCBtX2R3QXNuZE1heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCisJdTMyIG1fZHdBc25kTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKIAkvLyAweDFGOTguNzogTXVsdGlwbEN5Y2xlQ250X1U4CiAJdW5zaWduZWQgaW50IG1fdWlNdWx0aXBsQ3ljbGVDbnQ7CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAkvLyAweDFGOTguODogQXN5bmNNVFVfVTE2CkBAIC0xNjcsMzAgKzE2NywzMCBAQAogCS8vICQkJCBNdWx0aXBsZXhlZCBTbG90CiAKIAkvLyAweDFDMTQ6IERMTF9Mb3NzT2ZGcmFtZVRvbGVyYW5jZV9VMzIgaW4gW25zXQotCURXT1JEIG1fZHdMb3NzT2ZGcmFtZVRvbGVyYW5jZTsKKwl1MzIgbV9kd0xvc3NPZkZyYW1lVG9sZXJhbmNlOwogCiAJLy8gMHgxRjhBOiBOTVRfTU5DeWNsZVRpbWluZ19SRUMKIAkvLyAweDFGOEEuMTogV2FpdFNvQ1BSZXFfVTMyIGluIFtuc10KLQlEV09SRCBtX2R3V2FpdFNvY1ByZXE7CisJdTMyIG1fZHdXYWl0U29jUHJlcTsKIAogCS8vIDB4MUY4QS4yOiBBc3luY1Nsb3RUaW1lb3V0X1UzMiBpbiBbbnNdCi0JRFdPUkQgbV9kd0FzeW5jU2xvdFRpbWVvdXQ7CisJdTMyIG1fZHdBc3luY1Nsb3RUaW1lb3V0OwogCi0JRFdPUkQgbV9kd0RldmljZVR5cGU7CS8vIE5NVF9EZXZpY2VUeXBlX1UzMgotCURXT1JEIG1fZHdWZW5kb3JJZDsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5WZW5kb3JJZF9VMzIKLQlEV09SRCBtX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCi0JRFdPUkQgbV9kd1JldmlzaW9uTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlJldmlzaW9uTm9fVTMyCi0JRFdPUkQgbV9kd1NlcmlhbE51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5TZXJpYWxOb19VMzIKLQlRV09SRCBtX3F3VmVuZG9yU3BlY2lmaWNFeHQxOwotCURXT1JEIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uRGF0ZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZEYXRlX1UzMgotCURXT1JEIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uVGltZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZUaW1lX1UzMgotCURXT1JEIG1fZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCi0JRFdPUkQgbV9kd0FwcGxpY2F0aW9uU3dUaW1lOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dUaW1lX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIHRpbWUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2R3SXBBZGRyZXNzOwotCURXT1JEIG1fZHdTdWJuZXRNYXNrOwotCURXT1JEIG1fZHdEZWZhdWx0R2F0ZXdheTsKLQlCWVRFIG1fc0hvc3RuYW1lWzMyXTsKLQlCWVRFIG1fYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOworCXUzMiBtX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCisJdTMyIG1fZHdWZW5kb3JJZDsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5WZW5kb3JJZF9VMzIKKwl1MzIgbV9kd1Byb2R1Y3RDb2RlOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlByb2R1Y3RDb2RlX1UzMgorCXUzMiBtX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKKwl1MzIgbV9kd1NlcmlhbE51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5TZXJpYWxOb19VMzIKKwl1NjQgbV9xd1ZlbmRvclNwZWNpZmljRXh0MTsKKwl1MzIgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCisJdTMyIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uVGltZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZUaW1lX1UzMgorCXUzMiBtX2R3QXBwbGljYXRpb25Td0RhdGU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd0RhdGVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgZGF0ZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQorCXUzMiBtX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQorCXUzMiBtX2R3SXBBZGRyZXNzOworCXUzMiBtX2R3U3VibmV0TWFzazsKKwl1MzIgbV9kd0RlZmF1bHRHYXRld2F5OworCXU4IG1fc0hvc3RuYW1lWzMyXTsKKwl1OCBtX2FiVmVuZG9yU3BlY2lmaWNFeHQyWzQ4XTsKIAogCWNoYXIgKm1fcHN6RGV2TmFtZTsJLy8gTk1UX01hbnVmYWN0RGV2TmFtZV9WUyAoMHgxMDA4LzAgbG9jYWwgT0QpCiAJY2hhciAqbV9wc3pId1ZlcnNpb247CS8vIE5NVF9NYW51ZmFjdEh3VmVyc19WUyAgKDB4MTAwOS8wIGxvY2FsIE9EKQpAQCAtMjEyLDYyICsyMTIsNjEgQEAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUluaXRpYWxpemUodEVwbEFwaUluaXRQYXJhbSAqIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbEFwaUluaXRpYWxpemUodEVwbEFwaUluaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpU2h1dGRvd24odm9pZCk7Cit0RXBsS2VybmVsIEVwbEFwaVNodXRkb3duKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCi0JCQkJICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsQXBpUmVhZE9iamVjdCh0RXBsU2RvQ29tQ29uSGRsICpwU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJICAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCisJCQkgICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCisJCQkgICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqIHBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJICAgIHZvaWQgKnBTcmNEYXRhX2xlX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVNpemVfcCwKLQkJCQkgICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU2l6ZV9wLAorCQkJICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpRnJlZVNkb0NoYW5uZWwodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQl1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSB1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVdyaXRlTG9jYWxPYmplY3QodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJCSB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgdW5zaWduZWQgaW50IHVpU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk9iZEFjY2Vzcyh0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbEFwaUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUxpbmtPYmplY3QodW5zaWduZWQgaW50IHVpT2JqSW5kZXhfcCwKLQkJCQkgICB2b2lkICpwVmFyX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlWYXJFbnRyaWVzX3AsCi0JCQkJICAgdEVwbE9iZFNpemUgKiBwRW50cnlTaXplX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpRmlyc3RTdWJpbmRleF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpTGlua09iamVjdCh1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wLAorCQkJICAgIHZvaWQgKnBWYXJfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnB1aVZhckVudHJpZXNfcCwKKwkJCSAgICB0RXBsT2JkU2l6ZSAqcEVudHJ5U2l6ZV9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aUZpcnN0U3ViaW5kZXhfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUV4ZWNObXRDb21tYW5kKHRFcGxObXRFdmVudCBObXRFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpRXhlY05tdENvbW1hbmQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzKHZvaWQpOwordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzKHZvaWQpOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpTW5UcmlnZ2VyU3RhdGVDaGFuZ2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApOwordEVwbEtlcm5lbCBFcGxBcGlNblRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCk7CiAjZW5kaWYKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpR2V0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJIHRFcGxJZGVudFJlc3BvbnNlICoqCi0JCQkJCSBwcElkZW50UmVzcG9uc2VfcCk7Cit0RXBsS2VybmVsIEVwbEFwaUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKTsKIAogLy8gZnVuY3Rpb25zIGZvciBwcm9jZXNzIGltYWdlIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gc2VwYXJhdGUgZmlsZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpUHJvY2Vzc0ltYWdlU2V0dXAodm9pZCk7Ci10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZUluKHRFcGxBcGlQcm9jZXNzSW1hZ2UgKiBwUElfcCk7Ci10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZU91dCh0RXBsQXBpUHJvY2Vzc0ltYWdlICogcFBJX3ApOwordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzSW1hZ2VTZXR1cCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0ltYWdlRXhjaGFuZ2VJbih0RXBsQXBpUHJvY2Vzc0ltYWdlICpwUElfcCk7Cit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlT3V0KHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9BUElfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQW1pLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFtaS5oCmluZGV4IDZmYTA0YTQuLjNiNDZlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQW1pLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBbWkuaApAQCAtNjksNyArNjksNyBAQAogCiAgICAxNi4wOS4yMDAyICAtYXMKICAgICAgICAgICAgICAgIFRvIHNhdmUgY29kZSBzcGFjZSB0aGUgZnVuY3Rpb25zIEFtaVNldEJ5dGUgYW5kIEFtaUdldEJ5dGUKLSAgICAgICAgICAgICAgIGFyZSByZXBsYWNlZCBieSBtYWNyb3MuIEZvciB0YXJnZXRzIHdoaWNoIGFzc2lnbiBCWVRFIGJ5CisgICAgICAgICAgICAgICBhcmUgcmVwbGFjZWQgYnkgbWFjcm9zLiBGb3IgdGFyZ2V0cyB3aGljaCBhc3NpZ24gdTggYnkKICAgICAgICAgICAgICAgIGFuIDE2Qml0IHR5cGUsIHRoZSBkZWZpbml0aW9uIG9mIG1hY3JvcyBtdXN0IGNoYW5nZWQgdG8KICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy4KIApAQCAtODYsMTEgKzg2LDYgQEAKICNpZm5kZWYgX0VQTEFNSV9IXwogI2RlZmluZSBfRVBMQU1JX0hfCiAKLSNpZiAoKERFVl9TWVNURU0gJiBfREVWXzY0QklUX1NVUFBPUlRfKSA9PSAwKQotLy8gICAgI2lmZGVmIFVTRV9WQVI2NAotI2Vycm9yICdFUlJPUjogZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgNjQgYml0IG9wZXJhdGlvbnMhJwotLy8gICAgI2VuZGlmCi0jZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICB0eXBlcwpAQCAtMTA0LDQ0ICs5OSwyMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0jaWYgZGVmaW5lZChJTkxJTkVfRlVOQ1RJT05fREVGKQotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0jZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2RlZmluZSBFUExfQU1JX0lOTElORUQKLSNpbmNsdWRlICIuLi9FcGxTdGFjay9hbWl4ODYuYyIKLSNlbmRpZgotCi0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKQotI2lmIGRlZmluZWQoX19tNjhrX18pCQkvLyBpdCBpcyBhbiBiaWcgZW5kaWFuIG1hY2hpbmUKLSNpZiBkZWZpbmVkKElOTElORV9GVU5DVElPTl9ERUYpCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSNkZWZpbmUgSU5MSU5FX0VOQUJMRUQgICAgICBUUlVFCi0jZGVmaW5lIEVQTF9BTUlfSU5MSU5FRAotI2luY2x1ZGUgIi4uL0VwbFN0YWNrL2FtaWJlLmMiCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gd3JpdGUgZnVuY3Rpb25zCiAvLwogLy8gVG8gc2F2ZSBjb2RlIHNwYWNlIHRoZSBmdW5jdGlvbiBBbWlTZXRCeXRlIGlzIHJlcGxhY2VkIGJ5CiAvLyBhbiBtYWNyby4KLS8vIHZvaWQgICBQVUJMSUMgIEFtaVNldEJ5dGUgICh2b2lkIEZBUiogcEFkZHJfcCwgQllURSBiQnl0ZVZhbF9wKTsKKy8vIHZvaWQgIEFtaVNldEJ5dGUgICh2b2lkICogcEFkZHJfcCwgdTggYkJ5dGVWYWxfcCk7CiAKLSNkZWZpbmUgQW1pU2V0Qnl0ZVRvQmUocEFkZHJfcCwgYkJ5dGVWYWxfcCkgIHsqKEJZVEUgRkFSKikocEFkZHJfcCkgPSAoYkJ5dGVWYWxfcCk7fQotI2RlZmluZSBBbWlTZXRCeXRlVG9MZShwQWRkcl9wLCBiQnl0ZVZhbF9wKSAgeyooQllURSBGQVIqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CisjZGVmaW5lIEFtaVNldEJ5dGVUb0JlKHBBZGRyX3AsIGJCeXRlVmFsX3ApICB7Kih1OCAqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CisjZGVmaW5lIEFtaVNldEJ5dGVUb0xlKHBBZGRyX3AsIGJCeXRlVmFsX3ApICB7Kih1OCAqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQl2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgRFdPUkQgZHdEd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgRFdPUkQgZHdEd29yZFZhbF9wKTsKLSNlbmRpZgordm9pZCBBbWlTZXRXb3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCk7Cit2b2lkIEFtaVNldER3b3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0V29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTE2IHdXb3JkVmFsX3ApOwordm9pZCBBbWlTZXREd29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMTQ5LDE3ICsxMjEsMTUgQEAKIC8vCiAvLyBUbyBzYXZlIGNvZGUgc3BhY2UgdGhlIGZ1bmN0aW9uIEFtaUdldEJ5dGUgaXMgcmVwbGFjZWQgYnkKIC8vIGFuIG1hY3JvLgotLy8gQllURSAgIFBVQkxJQyAgQW1pR2V0Qnl0ZSAgKHZvaWQgRkFSKiBwQWRkcl9wKTsKKy8vIHU4ICAgQW1pR2V0Qnl0ZSAgKHZvaWQgKiBwQWRkcl9wKTsKIAotI2RlZmluZSBBbWlHZXRCeXRlRnJvbUJlKHBBZGRyX3ApICAoKihCWVRFIEZBUiopKHBBZGRyX3ApKQotI2RlZmluZSBBbWlHZXRCeXRlRnJvbUxlKHBBZGRyX3ApICAoKihCWVRFIEZBUiopKHBBZGRyX3ApKQorI2RlZmluZSBBbWlHZXRCeXRlRnJvbUJlKHBBZGRyX3ApICAoKih1OCAqKShwQWRkcl9wKSkKKyNkZWZpbmUgQW1pR2V0Qnl0ZUZyb21MZShwQWRkcl9wKSAgKCoodTggKikocEFkZHJfcCkpCiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotCVdPUkQgUFVCTElDIEFtaUdldFdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlXT1JEIFBVQkxJQyBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Ci0JRFdPUkQgUFVCTElDIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1MTYgQW1pR2V0V29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UzMiBBbWlHZXREd29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UxNiBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwordTMyIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTE3NCw4ICsxNDQsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQl2b2lkIFBVQkxJQyBBbWlTZXREd29yZDI0VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIERXT1JEIGR3RHdvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBEV09SRCBkd0R3b3JkVmFsX3ApOwordm9pZCBBbWlTZXREd29yZDI0VG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMTg1LDEyICsxNTUsMTIgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIERXT1JEICAgICAgICAgICA9IHJlYWQgdmFsdWUKKy8vIFJldHVybjogICAgICB1MzIgICAgICAgICAgID0gcmVhZCB2YWx1ZQogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwotCURXT1JEIFBVQkxJQyBBbWlHZXREd29yZDI0RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1MzIgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UzMiBBbWlHZXREd29yZDI0RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLyNpZmRlZiBVU0VfVkFSNjQKIApAQCAtMjA3LDggKzE3Nyw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDQwVG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0yMTgsMTIgKzE4OCwxMiBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCAqcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkICpwQWRkcl9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0yMzgsOCArMjA4LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0Jdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLCBRV09SRCBxd1F3b3JkVmFsX3ApOwotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTI0OSwxMiArMjE5LDEyIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwotCVFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3U2NCBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTI2OSw4ICsyMzksOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDU2VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBRV09SRCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDU2VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMjgwLDEyICsyNTAsMTIgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCVFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDU2RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCk7Ci0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKTsKK3U2NCBBbWlHZXRRd29yZDU2RnJvbUJlKHZvaWQgKnBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCAqcEFkZHJfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMzAwLDggKzI3MCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDY0VG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDY0VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0zMTUsOCArMjg1LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCAqcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkICpwQWRkcl9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0zMzAsOSArMzAwLDcgQEAKIC8vIFJldHVybjogICAgICB2b2lkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCXZvaWQgUFVCTElDIEFtaVNldFRpbWVPZkRheSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJICAgIHRUaW1lT2ZEYXkgRkFSICogcFRpbWVPZkRheV9wKTsKK3ZvaWQgQW1pU2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMzQ2LDE0ICszMTQsNyBAQAogLy8gUmV0dXJuOiAgICAgIHZvaWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0Jdm9pZCBQVUJMSUMgQW1pR2V0VGltZU9mRGF5KHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkgICAgdFRpbWVPZkRheSBGQVIgKiBwVGltZU9mRGF5X3ApOwotCi0jZW5kaWYKLQotI3VuZGVmICBJTkxJTkVfRU5BQkxFRAkJLy8gZGlzYWJsZSBhY3R1YWwgaW5saW5pbmcgb2YgZnVuY3Rpb25zCi0jZGVmaW5lIEVQTF9BTUlfSU5DTFVERUQKK3ZvaWQgQW1pR2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlHZW5lcmljLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYwppbmRleCBhZTE5ZTM0Li5jNDQxOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYwpAQCAtMTYyLDQ0ICsxNjIsNDEgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIE5NVCBzdGF0ZSBjaGFuZ2UgZXZlbnQgY2FsbGJhY2sgZnVuY3Rpb24KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQlObXRTdGF0ZUNoYW5nZV9wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UgTm10U3RhdGVDaGFuZ2VfcCk7CiAKIC8vIHVwZGF0ZSBETEwgY29uZmlndXJhdGlvbiBmcm9tIE9ECi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApOwogCiAvLyB1cGRhdGUgT0QgZnJvbSBpbml0IHBhcmFtCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlT2JkKHZvaWQpOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlT2JkKHZvaWQpOwogCiAvLyBwcm9jZXNzIGV2ZW50cyBmcm9tIHVzZXIgZXZlbnQgcXVldWUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEVwbEV2ZW50X3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNETyBtb2R1bGUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKnBTZG9Db21GaW5pc2hlZF9wKTsKICNlbmRpZgogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQogLy8gY2FsbGJhY2sgZnVuY3Rpb25zIG9mIE5tdE1udSBtb2R1bGUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wLAotCQkJCQkgICBCT09MIGZNYW5kYXRvcnlfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKKwkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJICAgIHUxNiB3RXJyb3JDb2RlX3AsIEJPT0wgZk1hbmRhdG9yeV9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUNiQm9vdEV2ZW50KHRFcGxObXRCb290RXZlbnQgQm9vdEV2ZW50X3AsCi0JCQkJCSAgIHRFcGxObXRTdGF0ZSBObXRTdGF0ZV9wLAotCQkJCQkgICBXT1JEIHdFcnJvckNvZGVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYkJvb3RFdmVudCh0RXBsTm10Qm9vdEV2ZW50IEJvb3RFdmVudF9wLAorCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkgICAgdTE2IHdFcnJvckNvZGVfcCk7CiAjZW5kaWYKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTEVEVSkpICE9IDApCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBvZiBMZWR1IG1vZHVsZQotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUNiTGVkU3RhdGVDaGFuZ2UodEVwbExlZFR5cGUgTGVkVHlwZV9wLAotCQkJCQkJQk9PTCBmT25fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYkxlZFN0YXRlQ2hhbmdlKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwgQk9PTCBmT25fcCk7CiAjZW5kaWYKIAogLy8gT0QgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGltcGxlbWVudGVkIGluIE9iamRpY3QuYykKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXRSYW0odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmRJbml0UmFtKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjI2LDcgKzIyMyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpSW5pdGlhbGl6ZSh0RXBsQXBpSW5pdFBhcmFtICogcEluaXRQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxBcGlJbml0aWFsaXplKHRFcGxBcGlJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxPYmRJbml0UGFyYW0gT2JkSW5pdFBhcmFtOwpAQCAtNDE1LDcgKzQxMiw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpU2h1dGRvd24odm9pZCkKK3RFcGxLZXJuZWwgRXBsQXBpU2h1dGRvd24odm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01MjMsNyArNTIwLDcgQEAKIC8vIFN0YXRlOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUV4ZWNObXRDb21tYW5kKHRFcGxObXRFdmVudCBObXRFdmVudF9wKQordEVwbEtlcm5lbCBFcGxBcGlFeGVjTm10Q29tbWFuZCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01NTMsMTUgKzU1MCwxNSBAQAogLy8gU3RhdGU6CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpTGlua09iamVjdCh1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wLAotCQkJCSAgIHZvaWQgKnBWYXJfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKnB1aVZhckVudHJpZXNfcCwKLQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBFbnRyeVNpemVfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlGaXJzdFN1YmluZGV4X3ApCit0RXBsS2VybmVsIEVwbEFwaUxpbmtPYmplY3QodW5zaWduZWQgaW50IHVpT2JqSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwVmFyX3AsCisJCQkgICAgdW5zaWduZWQgaW50ICpwdWlWYXJFbnRyaWVzX3AsCisJCQkgICAgdEVwbE9iZFNpemUgKnBFbnRyeVNpemVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlGaXJzdFN1YmluZGV4X3ApCiB7Ci0JQllURSBiVmFyRW50cmllczsKLQlCWVRFIGJJbmRleEVudHJpZXM7Ci0JQllURSBNRU0gKnBiRGF0YTsKKwl1OCBiVmFyRW50cmllczsKKwl1OCBiSW5kZXhFbnRyaWVzOworCXU4ICpwYkRhdGE7CiAJdW5zaWduZWQgaW50IHVpU3ViaW5kZXg7CiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKQEAgLTU3Nyw4ICs1NzQsOCBAQAogCQlnb3RvIEV4aXQ7CiAJfQogCi0JcGJEYXRhID0gKEJZVEUgTUVNICopIHBWYXJfcDsKLQliVmFyRW50cmllcyA9IChCWVRFKSAqIHB1aVZhckVudHJpZXNfcDsKKwlwYkRhdGEgPSAodTggKilwVmFyX3A7CisJYlZhckVudHJpZXMgPSAodTgpICogcHVpVmFyRW50cmllc19wOwogCVVzZWRTaXplID0gMDsKIAogCS8vIGluaXQgVmFyUGFyYW0gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMKQEAgLTU5MSw3ICs1ODgsNyBAQAogCQlFbnRyeVNpemUgPSAodEVwbE9iZFNpemUpIHNpemVvZihiSW5kZXhFbnRyaWVzKTsKIAkJUmV0Q29kZSA9IEVwbE9iZFJlYWRFbnRyeSh1aU9iakluZGV4X3AsCiAJCQkJCSAgMHgwMCwKLQkJCQkJICAodm9pZCBHRU5FUklDICopJmJJbmRleEVudHJpZXMsCisJCQkJCSAgKHZvaWQgKikmYkluZGV4RW50cmllcywKIAkJCQkJICAmRW50cnlTaXplKTsKIAogCQlpZiAoKFJldENvZGUgIT0ga0VwbFN1Y2Nlc3NmdWwpIHx8IChiSW5kZXhFbnRyaWVzID09IDB4MDApKSB7CkBAIC02MTAsNyArNjA3LDcgQEAKIAkvLyBvYmplY3QgYWN0dWFsbHkgaGFzLgogCWlmICgoYkluZGV4RW50cmllcyA+IChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSkpICYmCiAJICAgIChiVmFyRW50cmllcyAhPSAweDAwKSkgewotCQliSW5kZXhFbnRyaWVzID0gKEJZVEUpIChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSk7CisJCWJJbmRleEVudHJpZXMgPSAodTgpIChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSk7CiAJfQogCS8vIG1hcCBlbnRyaWVzCiAJZm9yICh1aVN1YmluZGV4ID0gdWlGaXJzdFN1YmluZGV4X3A7IHVpU3ViaW5kZXggPD0gYkluZGV4RW50cmllczsKQEAgLTY3NywxMyArNjc0LDEzIEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCi0JCQkJICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKQordEVwbEtlcm5lbCBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKnBTZG9Db21Db25IZGxfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkgICAgdm9pZCAqcERzdERhdGFfbGVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCwKKwkJCSAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtNzY1LDEzICs3NjIsMTMgQEAKIC8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVdyaXRlT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgICB2b2lkICpwU3JjRGF0YV9sZV9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTaXplX3AsCi0JCQkJICAgIHRFcGxTZG9UeXBlIFNkb1R5cGVfcCwgdm9pZCAqcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU2l6ZV9wLAorCQkJICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtODUwLDcgKzg0Nyw3IEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQordEVwbEtlcm5lbCBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTg4MSwxMCArODc4LDkgQEAKIC8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQl1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsQXBpUmVhZExvY2FsT2JqZWN0KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJIHZvaWQgKnBEc3REYXRhX3AsIHVuc2lnbmVkIGludCAqcHVpU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKQEAgLTkxMSwxMCArOTA3LDEwIEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlXcml0ZUxvY2FsT2JqZWN0KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtOTM5LDggKzkzNSw4IEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlNblRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCkKK3RFcGxLZXJuZWwgRXBsQXBpTW5UcmlnZ2VyU3RhdGVDaGFuZ2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtOTY2LDcgKzk2Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbEFwaUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0xMDAxLDggKzk5Nyw4IEBACiAJCXsKIAkJCWlmICgocFBhcmFtX3AtPm1fT2JkRXZlbnQgPT0ga0VwbE9iZEV2UG9zdFdyaXRlKQogCQkJICAgICYmIChwUGFyYW1fcC0+bV91aVN1YkluZGV4ID09IDMpCi0JCQkgICAgJiYgKCooKERXT1JEICopIHBQYXJhbV9wLT5tX3BBcmcpICE9IDApKSB7Ci0JCQkJRFdPUkQgZHdWZXJpZnlDb25mSW52YWxpZCA9IDA7CisJCQkgICAgJiYgKCooKHUzMiAqKSBwUGFyYW1fcC0+bV9wQXJnKSAhPSAwKSkgeworCQkJCXUzMiBkd1ZlcmlmeUNvbmZJbnZhbGlkID0gMDsKIAkJCQkvLyBzZXQgQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLlZlcmlmeUNvbmZJbnZhbGlkX1UzMiB0byAwCiAJCQkJUmV0ID0KIAkJCQkgICAgRXBsT2JkV3JpdGVFbnRyeSgweDEwMjAsIDQsCkBAIC0xMDE2LDkgKzEwMTIsOSBAQAogCWNhc2UgMHgxRjlFOgkJLy8gTk1UX1Jlc2V0Q21kX1U4CiAJCXsKIAkJCWlmIChwUGFyYW1fcC0+bV9PYmRFdmVudCA9PSBrRXBsT2JkRXZQcmVXcml0ZSkgewotCQkJCUJZVEUgYk5tdENvbW1hbmQ7CisJCQkJdTggYk5tdENvbW1hbmQ7CiAKLQkJCQliTm10Q29tbWFuZCA9ICooKEJZVEUgKikgcFBhcmFtX3AtPm1fcEFyZyk7CisJCQkJYk5tdENvbW1hbmQgPSAqKCh1OCAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKIAkJCQkvLyBjaGVjayB2YWx1ZSByYW5nZQogCQkJCXN3aXRjaCAoKHRFcGxObXRDb21tYW5kKSBiTm10Q29tbWFuZCkgewogCQkJCWNhc2Uga0VwbE5tdENtZFJlc2V0Tm9kZToKQEAgLTEwMzYsOSArMTAzMiw5IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAocFBhcmFtX3AtPm1fT2JkRXZlbnQgPT0ga0VwbE9iZEV2UG9zdFdyaXRlKSB7Ci0JCQkJQllURSBiTm10Q29tbWFuZDsKKwkJCQl1OCBiTm10Q29tbWFuZDsKIAotCQkJCWJObXRDb21tYW5kID0gKigoQllURSAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKKwkJCQliTm10Q29tbWFuZCA9ICooKHU4ICopIHBQYXJhbV9wLT5tX3BBcmcpOwogCQkJCS8vIGNoZWNrIHZhbHVlIHJhbmdlCiAJCQkJc3dpdGNoICgodEVwbE5tdENvbW1hbmQpIGJObXRDb21tYW5kKSB7CiAJCQkJY2FzZSBrRXBsTm10Q21kUmVzZXROb2RlOgpAQCAtMTExNSw3ICsxMTExLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEV2ZW50RXJyb3IgKnBFdmVudEVycm9yOwpAQCAtMTE4OCwxNSArMTE4NCwxNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQlObXRTdGF0ZUNoYW5nZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JQllURSBiTm10U3RhdGU7CisJdTggYk5tdFN0YXRlOwogCXRFcGxBcGlFdmVudEFyZyBFdmVudEFyZzsKIAogCS8vIHNhdmUgTk1UIHN0YXRlIGluIE9ECi0JYk5tdFN0YXRlID0gKEJZVEUpIE5tdFN0YXRlQ2hhbmdlX3AubV9OZXdObXRTdGF0ZTsKKwliTm10U3RhdGUgPSAodTgpIE5tdFN0YXRlQ2hhbmdlX3AubV9OZXdObXRTdGF0ZTsKIAlSZXQgPSBFcGxPYmRXcml0ZUVudHJ5KDB4MUY4QywgMCwgJmJObXRTdGF0ZSwgMSk7CiAJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewogCQlnb3RvIEV4aXQ7CkBAIC0xMjc1LDcgKzEyNzAsNyBAQAogCWNhc2Uga0VwbE5tdENzTm90QWN0aXZlOgogCQl7CiAJCQkvLyBpbmRpY2F0ZSBjb21wbGV0aW9uIG9mIHJlc2V0IGluIE5NVF9SZXNldENtZF9VOAotCQkJYk5tdFN0YXRlID0gKEJZVEUpIGtFcGxObXRDbWRJbnZhbGlkU2VydmljZTsKKwkJCWJObXRTdGF0ZSA9ICh1OCkga0VwbE5tdENtZEludmFsaWRTZXJ2aWNlOwogCQkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOUUsIDAsICZiTm10U3RhdGUsIDEpOwogCQkJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewogCQkJCWdvdG8gRXhpdDsKQEAgLTE0MTEsMTQgKzE0MDYsMTQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlVcGRhdGVEbGxDb25maWcoQk9PTCBmVXBkYXRlSWRlbnRpdHlfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxEbGxDb25maWdQYXJhbSBEbGxDb25maWdQYXJhbTsKIAl0RXBsRGxsSWRlbnRQYXJhbSBEbGxJZGVudFBhcmFtOwogCXRFcGxPYmRTaXplIE9iZFNpemU7Ci0JV09SRCB3VGVtcDsKLQlCWVRFIGJUZW1wOworCXUxNiB3VGVtcDsKKwl1OCBiVGVtcDsKIAogCS8vIGNvbmZpZ3VyZSBEbGwKIAlFUExfTUVNU0VUKCZEbGxDb25maWdQYXJhbSwgMCwgc2l6ZW9mKERsbENvbmZpZ1BhcmFtKSk7CkBAIC0xNjM0LDExICsxNjI5LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVVwZGF0ZU9iZCh2b2lkKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlT2JkKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQlXT1JEIHdUZW1wOwotCUJZVEUgYlRlbXA7CisJdTE2IHdUZW1wOworCXU4IGJUZW1wOwogCiAJLy8gc2V0IG5vZGUgaWQgaW4gT0QKIAlSZXQgPSBFcGxPYmRTZXROb2RlSWQoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpTm9kZUlkLAkvLyBub2RlIGlkCkBAIC0xNjgwLDE0ICsxNjc1LDE0IEBACiAJCSAgIH0gKi8KIAl9CiAKLQl3VGVtcCA9IChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJUeE1heFBheWxvYWQ7CisJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJUeE1heFBheWxvYWQ7CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDEsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfSovCiAKLQl3VGVtcCA9IChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJSeE1heFBheWxvYWQ7CisJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJSeE1heFBheWxvYWQ7CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDIsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTcwNiw3ICsxNzAxLDcgQEAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlcUFjdFBheWxvYWRMaW1pdCA8PQogCSAgICBFUExfQ19ETExfSVNPQ0hSX01BWF9QQVlMKSB7CiAJCXdUZW1wID0KLQkJICAgIChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVxQWN0UGF5bG9hZExpbWl0OworCQkgICAgKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlcUFjdFBheWxvYWRMaW1pdDsKIAkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDQsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTcxNyw3ICsxNzEyLDcgQEAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlc0FjdFBheWxvYWRMaW1pdCA8PQogCSAgICBFUExfQ19ETExfSVNPQ0hSX01BWF9QQVlMKSB7CiAJCXdUZW1wID0KLQkJICAgIChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVzQWN0UGF5bG9hZExpbWl0OworCQkgICAgKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlc0FjdFBheWxvYWRMaW1pdDsKIAkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDUsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTczNSw3ICsxNzMwLDcgQEAKICAgICB9Ki8KIAogCWlmIChFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQgPD0gMHhGRikgewotCQliVGVtcCA9IChCWVRFKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQ7CisJCWJUZW1wID0gKHU4KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQ7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA3LCAmYlRlbXAsIDEpOwogLyogICAgaWYoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKQogICAgIHsKQEAgLTE3NDUsNyArMTc0MCw3IEBACiAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHUgPD0KIAkgICAgRVBMX0NfRExMX01BWF9BU1lOQ19NVFUpIHsKLQkJd1RlbXAgPSAoV09SRCkgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHU7CisJCXdUZW1wID0gKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHU7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA4LCAmd1RlbXAsIDIpOwogLyogICAgaWYoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKQogICAgIHsKQEAgLTE3NTQsNyArMTc0OSw3IEBACiAJfQogCiAJaWYgKEVwbEFwaUluc3RhbmNlX2cubV9Jbml0UGFyYW0ubV91aVByZXNjYWxlciA8PSAxMDAwKSB7Ci0JCXdUZW1wID0gKFdPUkQpIEVwbEFwaUluc3RhbmNlX2cubV9Jbml0UGFyYW0ubV91aVByZXNjYWxlcjsKKwkJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVzY2FsZXI7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA5LCAmd1RlbXAsIDIpOwogCQkvLyBpZ25vcmUgcmV0dXJuIGNvZGUKIAkJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CkBAIC0xODQ0LDcgKzE4MzksNyBAQAogCQkvLyB3cml0ZSBEZXZpY2UgTmFtZSAoMHgxMDA4KQogCQlSZXQgPQogCQkgICAgRXBsT2JkV3JpdGVFbnRyeSgweDEwMDgsIDAsCi0JCQkJICAgICAodm9pZCBHRU5FUklDICopRXBsQXBpSW5zdGFuY2VfZy4KKwkJCQkgICAgICh2b2lkICopRXBsQXBpSW5zdGFuY2VfZy4KIAkJCQkgICAgIG1fSW5pdFBhcmFtLm1fcHN6RGV2TmFtZSwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE4NTksNyArMTg1NCw3IEBACiAJCS8vIHdyaXRlIEhhcmR3YXJlIHZlcnNpb24gKDB4MTAwOSkKIAkJUmV0ID0KIAkJICAgIEVwbE9iZFdyaXRlRW50cnkoMHgxMDA5LCAwLAotCQkJCSAgICAgKHZvaWQgR0VORVJJQyAqKUVwbEFwaUluc3RhbmNlX2cuCisJCQkJICAgICAodm9pZCAqKUVwbEFwaUluc3RhbmNlX2cuCiAJCQkJICAgICBtX0luaXRQYXJhbS5tX3Bzekh3VmVyc2lvbiwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE4NzQsNyArMTg2OSw3IEBACiAJCS8vIHdyaXRlIFNvZnR3YXJlIHZlcnNpb24gKDB4MTAwQSkKIAkJUmV0ID0KIAkJICAgIEVwbE9iZFdyaXRlRW50cnkoMHgxMDBBLCAwLAotCQkJCSAgICAgKHZvaWQgR0VORVJJQyAqKUVwbEFwaUluc3RhbmNlX2cuCisJCQkJICAgICAodm9pZCAqKUVwbEFwaUluc3RhbmNlX2cuCiAJCQkJICAgICBtX0luaXRQYXJhbS5tX3BzelN3VmVyc2lvbiwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE5MDUsNyArMTkwMCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiU2RvQ29uKHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMTk0NiwxMCArMTk0MSwxMCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wLCBCT09MIGZNYW5kYXRvcnlfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiTm9kZUV2ZW50KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCSAgICB0RXBsTm10Tm9kZUV2ZW50IE5vZGVFdmVudF9wLAorCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkgICAgdTE2IHdFcnJvckNvZGVfcCwgQk9PTCBmTWFuZGF0b3J5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMTk5MCw5ICsxOTg1LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JCb290RXZlbnQodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JCb290RXZlbnQodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKKwkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJICAgIHUxNiB3RXJyb3JDb2RlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMjAzMyw4ICsyMDI4LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JMZWRTdGF0ZUNoYW5nZSh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsCi0JCQkJCQlCT09MIGZPbl9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JMZWRTdGF0ZUNoYW5nZSh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsIEJPT0wgZk9uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlMaW51eEtlcm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlMaW51eEtlcm5lbC5jCmluZGV4IDA1Y2EwNjIuLmNiM2UyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQXBpTGludXhLZXJuZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUxpbnV4S2VybmVsLmMKQEAgLTcyLDkgKzcyLDYgQEAKIAogLy8ga2VybmVsIG1vZHVsIGFuZCBkcml2ZXIKIAotLy8jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KQEAgLTkyLDI1ICs4OSwxMSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiRXBsLmgiCiAjaW5jbHVkZSAiRXBsQXBpTGludXguaCIKIC8vI2luY2x1ZGUgImtlcm5lbC9FcGxQZG9rQ2FsLmgiCiAjaW5jbHVkZSAicHJvY19mcy5oIgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotICAgIC8vIHJlbW92ZSAoIm1ha2UgaW52aXNpYmxlIikgb2Jzb2xldGUgc3ltYm9scyBmb3Iga2VybmVsIHZlcnNpb25zIDIuNgotICAgIC8vIGFuZCBoaWdoZXIKLSNkZWZpbmUgTU9EX0lOQ19VU0VfQ09VTlQKLSNkZWZpbmUgTU9EX0RFQ19VU0VfQ09VTlQKLSNkZWZpbmUgRVhQT1JUX05PX1NZTUJPTFMKLSNlbHNlCi0jZXJyb3IgIlRoaXMgZHJpdmVyIG5lZWRzIGEgMi42Lngga2VybmVsIG9yIGhpZ2hlciIKLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzOSw3ICsxMjIsNyBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNlbHNlCiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApCkBAIC0xNTksMTkgKzE0MiwxMCBAQAogLy8gIEdsb2JhbCB2YXJpYWJsZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQotICAgIC8vIGRyaXZlciBtYWpvciBudW1iZXIKLXN0YXRpYyBpbnQgbkRydk1ham9yTnVtYmVyX2c7Ci0KLSNlbHNlCi0KICAgICAvLyBkZXZpY2UgbnVtYmVyIChtYWpvciBhbmQgbWlub3IpCiBzdGF0aWMgZGV2X3QgbkRldk51bV9nOwogc3RhdGljIHN0cnVjdCBjZGV2ICpwRXBsX2NkZXZfZzsKIAotI2VuZGlmCi0KIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWlFcGxTdGF0ZV9nID0gRVBMX1NUQVRFX05PVE9QRU47CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIFNlbWFwaG9yZUNiRXZlbnRfZzsJLy8gc2VtYXBob3JlIGZvciBFcGxMaW5DYkV2ZW50CkBAIC0yMDQsMTEgKzE3OCwxMSBAQAogLy8gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMaW5DYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQotCQkJCXRFcGxBcGlFdmVudEFyZyAqIHBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQotCQkJCXZvaWQgR0VORVJJQyAqIHBVc2VyQXJnX3ApOwordEVwbEtlcm5lbCBFcGxMaW5DYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQorCQkJIHRFcGxBcGlFdmVudEFyZyAqcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCisJCQkgdm9pZCAqcFVzZXJBcmdfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExpbkNiU3luYyh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsTGluQ2JTeW5jKHZvaWQpOwogCiBzdGF0aWMgaW50IF9faW5pdCBFcGxMaW5Jbml0KHZvaWQpOwogc3RhdGljIHZvaWQgX19leGl0IEVwbExpbkV4aXQodm9pZCk7CkBAIC0yMjYsOCArMjAwLDYgQEAKIC8vICBLZXJuZWwgTW9kdWxlIHNwZWNpZmljIERhdGEgU3RydWN0dXJlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVhQT1JUX05PX1NZTUJPTFM7Ci0KIG1vZHVsZV9pbml0KEVwbExpbkluaXQpOwogbW9kdWxlX2V4aXQoRXBsTGluRXhpdCk7CiAKQEAgLTI1OSw5ICsyMzEsNiBAQAogCXRFcGxLZXJuZWwgRXBsUmV0OwogCWludCBpRXJyOwogCWludCBpUmV0OwotI2lmZGVmIENPTkZJR19ERVZGU19GUwotCWludCBuTWlub3JOdW1iZXI7Ci0jZW5kaWYKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbkluaXQuLi5cbiIpOwogCVRSQUNFMigiRVBMOiAgIERyaXZlciBidWlsZDogJXMgLyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKQEAgLTI3NSw0NCArMjQ0LDYgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZXYWl0UXVldWVQcm9jZXNzX2cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJldhaXRRdWV1ZVJlbGVhc2VfZyk7CiAKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQotCS8vIHJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxlcgotCVRSQUNFMigiRVBMOiAgIEluc3RhbGxpbmcgRHJpdmVyICclcycsIFZlcnNpb24gJXMuLi5cbiIsCi0JICAgICAgIEVQTExJTl9EUlZfTkFNRSwgRVBMX1BST0RVQ1RfVkVSU0lPTik7Ci0JVFJBQ0UwKCJFUEw6ICAgKHVzaW5nIGR5bmFtaWMgbWFqb3IgbnVtYmVyIGFzc2lnbm1lbnQpXG4iKTsKLQluRHJ2TWFqb3JOdW1iZXJfZyA9Ci0JICAgIHJlZ2lzdGVyX2NocmRldigwLCBFUExMSU5fRFJWX05BTUUsICZFcGxMaW5GaWxlT3BzX2cpOwotCWlmIChuRHJ2TWFqb3JOdW1iZXJfZyAhPSAwKSB7Ci0JCVRSQUNFMgotCQkgICAgKCJFUEw6ICAgRHJpdmVyICclcycgaW5zdGFsbGVkIHN1Y2Nlc3NmdWwsIGFzc2lnbmVkIE1ham9yTnVtYmVyPSVkXG4iLAotCQkgICAgIEVQTExJTl9EUlZfTkFNRSwgbkRydk1ham9yTnVtYmVyX2cpOwotCX0gZWxzZSB7Ci0JCVRSQUNFMQotCQkgICAgKCJFUEw6ICAgRVJST1I6IERyaXZlciAnJXMnIGlzIHVuYWJsZSB0byBnZXQgYSBmcmVlIE1ham9yTnVtYmVyIVxuIiwKLQkJICAgICBFUExMSU5fRFJWX05BTUUpOwotCQlpUmV0ID0gLUVJTzsKLQkJZ290byBFeGl0OwotCX0KLQotCS8vIGNyZWF0ZSBkZXZpY2Ugbm9kZSBpbiBERVZGUwotCW5NaW5vck51bWJlciA9IDA7Ci0JVFJBQ0UxKCJFUEw6ICAgQ3JlYXRpbmcgZGV2aWNlIG5vZGUgJy9kZXYvJXMnLi4uXG4iLCBFUExMSU5fREVWX05BTUUpOwotCWlFcnIgPQotCSAgICBkZXZmc19ta19jZGV2KE1LREVWKG5EcnZNYWpvck51bWJlcl9nLCBuTWlub3JOdW1iZXIpLAotCQkJICBTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sIEVQTExJTl9ERVZfTkFNRSk7Ci0JaWYgKGlFcnIgPT0gMCkgewotCQlUUkFDRTEoIkVQTDogICBEZXZpY2Ugbm9kZSAnL2Rldi8lcycgY3JlYXRlZCBzdWNjZXNzZnVsLlxuIiwKLQkJICAgICAgIEVQTExJTl9ERVZfTkFNRSk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0UxKCJFUEw6ICAgRVJST1I6IHVuYWJsZSB0byBjcmVhdGUgZGV2aWNlIG5vZGUgJy9kZXYvJXMnXG4iLAotCQkgICAgICAgRVBMTElOX0RFVl9OQU1FKTsKLQkJaVJldCA9IC1FSU87Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLSNlbHNlCi0KIAkvLyByZWdpc3RlciBjaGFyYWN0ZXIgZGV2aWNlIGhhbmRsZXIKIAkvLyBvbmx5IG9uZSBNaW5vciByZXF1aXJlZAogCVRSQUNFMigiRVBMOiAgIEluc3RhbGxpbmcgRHJpdmVyICclcycsIFZlcnNpb24gJXMuLi5cbiIsCkBAIC0zNDEsNyArMjcyLDYgQEAKIAkJaVJldCA9IC1FSU87CiAJCWdvdG8gRXhpdDsKIAl9Ci0jZW5kaWYKIAogCS8vIGNyZWF0ZSBkZXZpY2Ugbm9kZSBpbiBQUk9DRlMKIAlFcGxSZXQgPSBFcGxMaW5Qcm9jSW5pdCgpOwpAQCAtMzc3LDI1ICszMDcsMTIgQEAKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbkV4aXQuLi5cbiIpOwogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0KLQkvLyByZW1vdmUgZGV2aWNlIG5vZGUgZnJvbSBERVZGUwotCWRldmZzX3JlbW92ZShFUExMSU5fREVWX05BTUUpOwotCVRSQUNFMSgiRVBMOiAgIERldmljZSBub2RlICcvZGV2LyVzJyByZW1vdmVkLlxuIiwgRVBMTElOX0RFVl9OQU1FKTsKLQotCS8vIHVucmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZSBoYW5kbGVyCi0JdW5yZWdpc3Rlcl9jaHJkZXYobkRydk1ham9yTnVtYmVyX2csIEVQTExJTl9EUlZfTkFNRSk7Ci0KLSNlbHNlCi0KIAkvLyByZW1vdmUgY2RldiBzdHJ1Y3R1cmUKIAljZGV2X2RlbChwRXBsX2NkZXZfZyk7CiAKIAkvLyB1bnJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxlcgogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihuRGV2TnVtX2csIDEpOwogCi0jZW5kaWYKLQogCVRSQUNFMSgiRVBMOiAgIERyaXZlciAnJXMnIHJlbW92ZWQuXG4iLCBFUExMSU5fRFJWX05BTUUpOwogCiAJVFJBQ0UwKCJFUEw6IC0gRXBsTGluRXhpdFxuIik7CkBAIC00MTYsOCArMzMzLDYgQEAKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbk9wZW4uLi5cbiIpOwogCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KIAlpZiAodWlFcGxTdGF0ZV9nICE9IEVQTF9TVEFURV9OT1RPUEVOKSB7CS8vIHN0YWNrIGFscmVhZHkgaW5pdGlhbGl6ZWQKIAkJaVJldCA9IC1FQUxSRUFEWTsKIAl9IGVsc2UgewpAQCAtNDkwLDggKzQwNSw2IEBACiAJdWlFcGxTdGF0ZV9nID0gRVBMX1NUQVRFX05PVE9QRU47CiAJaVJldCA9IDA7CiAKLQlNT0RfREVDX1VTRV9DT1VOVDsKLQogCVRSQUNFMSgiRVBMOiAtIEVwbExpblJlbGVhc2UgKGlSZXQ9JWQpXG4iLCBpUmV0KTsKIAlyZXR1cm4gKGlSZXQpOwogCkBAIC0xMTU4LDkgKzEwNzEsOSBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExpbkNiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkJdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkJdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgRXBsTGluQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKKwkJCSB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkJIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBFcGxSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAlpbnQgaUVycjsKQEAgLTEyMjQsNyArMTEzNyw3IEBACiAJcmV0dXJuIEVwbFJldDsKIH0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGluQ2JTeW5jKHZvaWQpCit0RXBsS2VybmVsIEVwbExpbkNiU3luYyh2b2lkKQogewogCXRFcGxLZXJuZWwgRXBsUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJaW50IGlFcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaVByb2Nlc3NJbWFnZS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlQcm9jZXNzSW1hZ2UuYwppbmRleCAyYjJmZGYyLi43ZDU1MDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaVByb2Nlc3NJbWFnZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQXBpUHJvY2Vzc0ltYWdlLmMKQEAgLTY5LDExICs2OSw4IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiRXBsLmgiCi0vLyNpbmNsdWRlICJrZXJuZWwvRXBsUGRva0NhbC5oIgogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTI5LDEwICsxMjYsMTAgQEAKICNpZiAoKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMCkgfHwgKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX09VVCA+IDApKQogdHlwZWRlZiBzdHJ1Y3QgewogI2lmIEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMAotCUJZVEUgbV9hYlByb2Nlc3NJbWFnZUlucHV0W0VQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOXTsKKwl1OCBtX2FiUHJvY2Vzc0ltYWdlSW5wdXRbRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfSU5dOwogI2VuZGlmCiAjaWYgRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfT1VUID4gMAotCUJZVEUgbV9hYlByb2Nlc3NJbWFnZU91dHB1dFtFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9PVVRdOworCXU4IG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXRbRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfT1VUXTsKICNlbmRpZgogCiB9IHRFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZTsKQEAgLTE2OSw3ICsxNjYsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVByb2Nlc3NJbWFnZVNldHVwKHZvaWQpCit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZVNldHVwKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKICNpZiAoKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMCkgfHwgKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX09VVCA+IDApKQpAQCAtMjgwLDI0ICsyNzcsMTYgQEAKIC8vIFN0YXRlOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlSW4odEVwbEFwaVByb2Nlc3NJbWFnZSAqIHBQSV9wKQordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZUluKHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKICNpZiBFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9JTiA+IDAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJY29weV90b191c2VyKHBQSV9wLT5tX3BJbWFnZSwKIAkJICAgICBFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZV9nLm1fYWJQcm9jZXNzSW1hZ2VJbnB1dCwKIAkJICAgICBtaW4ocFBJX3AtPm1fdWlTaXplLAogCQkJIHNpemVvZihFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZV9nLgogCQkJCW1fYWJQcm9jZXNzSW1hZ2VJbnB1dCkpKTsKLSNlbHNlCi0JRVBMX01FTUNQWShwUElfcC0+bV9wSW1hZ2UsCi0JCSAgIEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cubV9hYlByb2Nlc3NJbWFnZUlucHV0LAotCQkgICBtaW4ocFBJX3AtPm1fdWlTaXplLAotCQkgICAgICAgc2l6ZW9mKEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cuCi0JCQkgICAgICBtX2FiUHJvY2Vzc0ltYWdlSW5wdXQpKSk7Ci0jZW5kaWYKICNlbmRpZgogCiAJcmV0dXJuIFJldDsKQEAgLTMxNSwyNCArMzA0LDE2IEBACiAvLyBTdGF0ZToKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZU91dCh0RXBsQXBpUHJvY2Vzc0ltYWdlICogcFBJX3ApCit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlT3V0KHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKICNpZiBFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9PVVQgPiAwCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCWNvcHlfZnJvbV91c2VyKEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cubV9hYlByb2Nlc3NJbWFnZU91dHB1dCwKIAkJICAgICAgIHBQSV9wLT5tX3BJbWFnZSwKIAkJICAgICAgIG1pbihwUElfcC0+bV91aVNpemUsCiAJCQkgICBzaXplb2YoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy4KIAkJCQkgIG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXQpKSk7Ci0jZWxzZQotCUVQTF9NRU1DUFkoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy5tX2FiUHJvY2Vzc0ltYWdlT3V0cHV0LAotCQkgICBwUElfcC0+bV9wSW1hZ2UsCi0JCSAgIG1pbihwUElfcC0+bV91aVNpemUsCi0JCSAgICAgICBzaXplb2YoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy4KLQkJCSAgICAgIG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXQpKSk7Ci0jZW5kaWYKICNlbmRpZgogCiAJcmV0dXJuIFJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbC5oCmluZGV4IDM2NjU3ZjIuLmI5NjAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGwuaApAQCAtMTM1LDIyICsxMzUsMjIgQEAKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gbG9jYWwgbm9kZSBJRAogCiAJLy8gMHgxRjgyOiBOTVRfRmVhdHVyZUZsYWdzX1UzMgotCURXT1JEIG1fZHdGZWF0dXJlRmxhZ3M7CisJdTMyIG1fZHdGZWF0dXJlRmxhZ3M7CiAJLy8gQ3ljbGUgTGVuZ3RoICgweDEwMDY6IE5NVF9DeWNsZUxlbl9VMzIpIGluIFt1c10KLQlEV09SRCBtX2R3Q3ljbGVMZW47CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KKwl1MzIgbV9kd0N5Y2xlTGVuOwkvLyByZXF1aXJlZCBmb3IgZXJyb3IgZGV0ZWN0aW9uCiAJLy8gMHgxRjk4OiBOTVRfQ3ljbGVUaW1pbmdfUkVDCiAJLy8gMHgxRjk4LjE6IElzb2NoclR4TWF4UGF5bG9hZF9VMTYKIAl1bnNpZ25lZCBpbnQgbV91aUlzb2NoclR4TWF4UGF5bG9hZDsJLy8gY29uc3QKIAkvLyAweDFGOTguMjogSXNvY2hyUnhNYXhQYXlsb2FkX1UxNgogCXVuc2lnbmVkIGludCBtX3VpSXNvY2hyUnhNYXhQYXlsb2FkOwkvLyBjb25zdAogCS8vIDB4MUY5OC4zOiBQUmVzTWF4TGF0ZW5jeV9VMzIKLQlEV09SRCBtX2R3UHJlc01heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCisJdTMyIG1fZHdQcmVzTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKIAkvLyAweDFGOTguNDogUFJlcUFjdFBheWxvYWRMaW1pdF9VMTYKIAl1bnNpZ25lZCBpbnQgbV91aVByZXFBY3RQYXlsb2FkTGltaXQ7CS8vIHJlcXVpcmVkIGZvciBpbml0aWFsaXNhdGlvbiAoKzI0IGJ5dGVzKQogCS8vIDB4MUY5OC41OiBQUmVzQWN0UGF5bG9hZExpbWl0X1UxNgogCXVuc2lnbmVkIGludCBtX3VpUHJlc0FjdFBheWxvYWRMaW1pdDsJLy8gcmVxdWlyZWQgZm9yIGluaXRpYWxpc2F0aW9uIG9mIFByZXMgZnJhbWUgKCsyNCBieXRlcykKIAkvLyAweDFGOTguNjogQVNuZE1heExhdGVuY3lfVTMyCi0JRFdPUkQgbV9kd0FzbmRNYXhMYXRlbmN5OwkvLyBjb25zdCBpbiBbbnNdLCBvbmx5IHJlcXVpcmVkIGZvciBJZGVudFJlcworCXUzMiBtX2R3QXNuZE1heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCiAJLy8gMHgxRjk4Ljc6IE11bHRpcGxDeWNsZUNudF9VOAogCXVuc2lnbmVkIGludCBtX3VpTXVsdGlwbEN5Y2xlQ250OwkvLyByZXF1aXJlZCBmb3IgZXJyb3IgZGV0ZWN0aW9uCiAJLy8gMHgxRjk4Ljg6IEFzeW5jTVRVX1UxNgpAQCAtMTU5LDQyICsxNTksNDIgQEAKIAkvLyAkJCQgTXVsdGlwbGV4ZWQgU2xvdAogCiAJLy8gMHgxQzE0OiBETExfTG9zc09mRnJhbWVUb2xlcmFuY2VfVTMyIGluIFtuc10KLQlEV09SRCBtX2R3TG9zc09mRnJhbWVUb2xlcmFuY2U7CisJdTMyIG1fZHdMb3NzT2ZGcmFtZVRvbGVyYW5jZTsKIAogCS8vIDB4MUY4QTogTk1UX01OQ3ljbGVUaW1pbmdfUkVDCiAJLy8gMHgxRjhBLjE6IFdhaXRTb0NQUmVxX1UzMiBpbiBbbnNdCi0JRFdPUkQgbV9kd1dhaXRTb2NQcmVxOworCXUzMiBtX2R3V2FpdFNvY1ByZXE7CiAKIAkvLyAweDFGOEEuMjogQXN5bmNTbG90VGltZW91dF9VMzIgaW4gW25zXQotCURXT1JEIG1fZHdBc3luY1Nsb3RUaW1lb3V0OworCXUzMiBtX2R3QXN5bmNTbG90VGltZW91dDsKIAogfSB0RXBsRGxsQ29uZmlnUGFyYW07CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbV91aVNpemVPZlN0cnVjdDsKLQlEV09SRCBtX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCi0JRFdPUkQgbV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgotCURXT1JEIG1fZHdQcm9kdWN0Q29kZTsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5Qcm9kdWN0Q29kZV9VMzIKLQlEV09SRCBtX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKLQlEV09SRCBtX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgotCVFXT1JEIG1fcXdWZW5kb3JTcGVjaWZpY0V4dDE7Ci0JRFdPUkQgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCi0JRFdPUkQgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCi0JRFdPUkQgbV9kd0FwcGxpY2F0aW9uU3dEYXRlOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dEYXRlX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIGRhdGUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQotCURXT1JEIG1fZHdJcEFkZHJlc3M7Ci0JRFdPUkQgbV9kd1N1Ym5ldE1hc2s7Ci0JRFdPUkQgbV9kd0RlZmF1bHRHYXRld2F5OwotCUJZVEUgbV9zSG9zdG5hbWVbMzJdOwotCUJZVEUgbV9hYlZlbmRvclNwZWNpZmljRXh0Mls0OF07CisJdTMyIG1fZHdEZXZpY2VUeXBlOwkvLyBOTVRfRGV2aWNlVHlwZV9VMzIKKwl1MzIgbV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgorCXUzMiBtX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCisJdTMyIG1fZHdSZXZpc2lvbk51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5SZXZpc2lvbk5vX1UzMgorCXUzMiBtX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgorCXU2NCBtX3F3VmVuZG9yU3BlY2lmaWNFeHQxOworCXUzMiBtX2R3VmVyaWZ5Q29uZmlndXJhdGlvbkRhdGU7CS8vIENGTV9WZXJpZnlDb25maWd1cmF0aW9uX1JFQy5Db25mRGF0ZV9VMzIKKwl1MzIgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCisJdTMyIG1fZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fZHdBcHBsaWNhdGlvblN3VGltZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3VGltZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciB0aW1lIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fZHdJcEFkZHJlc3M7CisJdTMyIG1fZHdTdWJuZXRNYXNrOworCXUzMiBtX2R3RGVmYXVsdEdhdGV3YXk7CisJdTggbV9zSG9zdG5hbWVbMzJdOworCXU4IG1fYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOwogCiB9IHRFcGxEbGxJZGVudFBhcmFtOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7Ci0JV09SRCBtX3dQcmVxUGF5bG9hZExpbWl0OwkvLyBvYmplY3QgMHgxRjhCOiBOTVRfTU5QUmVxUGF5bG9hZExpbWl0TGlzdF9BVTE2Ci0JV09SRCBtX3dQcmVzUGF5bG9hZExpbWl0OwkvLyBvYmplY3QgMHgxRjhEOiBOTVRfUFJlc1BheWxvYWRMaW1pdExpc3RfQVUxNgotCURXT1JEIG1fZHdQcmVzVGltZW91dDsJLy8gb2JqZWN0IDB4MUY5MjogTk1UX01OQ05QUmVzVGltZW91dF9BVTMyCisJdTE2IG1fd1ByZXFQYXlsb2FkTGltaXQ7CS8vIG9iamVjdCAweDFGOEI6IE5NVF9NTlBSZXFQYXlsb2FkTGltaXRMaXN0X0FVMTYKKwl1MTYgbV93UHJlc1BheWxvYWRMaW1pdDsJLy8gb2JqZWN0IDB4MUY4RDogTk1UX1BSZXNQYXlsb2FkTGltaXRMaXN0X0FVMTYKKwl1MzIgbV9kd1ByZXNUaW1lb3V0OwkvLyBvYmplY3QgMHgxRjkyOiBOTVRfTU5DTlBSZXNUaW1lb3V0X0FVMzIKIAogfSB0RXBsRGxsTm9kZUluZm87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbENhbC5oCmluZGV4IDI0NDYwMDguLjcwYjI3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsQ2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGxDYWwuaApAQCAtMTEyLDcgKzExMiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbERsbFJlcVNlcnZpY2VJZCBtX1NlcnZpY2U7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7Ci0JQllURSBtX2JTb2FGbGFnMTsKKwl1OCBtX2JTb2FGbGFnMTsKIAogfSB0RXBsRGxsQ2FsSXNzdWVSZXF1ZXN0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCmluZGV4IDllMjI2NDEuLjI1ZDJjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCkBAIC0xMjEsOCArMTIxLDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xOTUsMTIgKzE5NSwxMiBAQAogfSB0RXBsRGxsU3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIG1fYmVfYWJTcmNNYWNbNl07CisJdTggbV9iZV9hYlNyY01hY1s2XTsKIAl0RWRydlR4QnVmZmVyICptX3BUeEJ1ZmZlcjsJLy8gQnVmZmVycyBmb3IgVHgtRnJhbWVzCiAJdW5zaWduZWQgaW50IG1fdWlNYXhUeEZyYW1lczsKLQlCWVRFIG1fYkZsYWcxOwkJLy8gRmxhZyAxIHdpdGggRU4sIEVDIGZvciBQUmVzLCBTdGF0dXNSZXMKLQlCWVRFIG1fYk1uRmxhZzE7CS8vIEZsYWcgMSB3aXRoIEVBLCBFUiBmcm9tIFBSZXEsIFNvQSBvZiBNTgotCUJZVEUgbV9iRmxhZzI7CQkvLyBGbGFnIDIgd2l0aCBQUiBhbmQgUlMgZm9yIFBSZXMsIFN0YXR1c1JlcywgSWRlbnRSZXMKKwl1OCBtX2JGbGFnMTsJCS8vIEZsYWcgMSB3aXRoIEVOLCBFQyBmb3IgUFJlcywgU3RhdHVzUmVzCisJdTggbV9iTW5GbGFnMTsJLy8gRmxhZyAxIHdpdGggRUEsIEVSIGZyb20gUFJlcSwgU29BIG9mIE1OCisJdTggbV9iRmxhZzI7CQkvLyBGbGFnIDIgd2l0aCBQUiBhbmQgUlMgZm9yIFBSZXMsIFN0YXR1c1JlcywgSWRlbnRSZXMKIAl0RXBsRGxsQ29uZmlnUGFyYW0gbV9EbGxDb25maWdQYXJhbTsKIAl0RXBsRGxsSWRlbnRQYXJhbSBtX0RsbElkZW50UGFyYW07CiAJdEVwbERsbFN0YXRlIG1fRGxsU3RhdGU7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogLy8gY2FsbGVkIGJ5IGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBtb2R1bGUgdG8gbW9uaXRvciBFUEwgY3ljbGUgYXMgQ04KICNpZiBFUExfVElNRVJfVVNFX0hJR0hSRVMgIT0gRkFMU0UKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxEbGxrQ2JDblRpbWVyKHRFcGxUaW1lckV2ZW50QXJnICogcEV2ZW50QXJnX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApOwogI2VuZGlmCiAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCkBAIC0yNzgsMTAgKzI3OCw5IEBACiAJCQkJCSAgICAgICBSZXFTZXJ2aWNlSWRfcCwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbERsbGtDYk1uVGltZXJDeWNsZSh0RXBsVGltZXJFdmVudEFyZyAqIHBFdmVudEFyZ19wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbERsbGtDYk1uVGltZXJDeWNsZSh0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICoKLQkJCQkJCSAgcEV2ZW50QXJnX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCk7CiAKICNlbmRpZgogCkBAIC01MTQsNyArNTEzLDcgQEAKIAkJCSAgICAgICBFUExfQ19ETExfRVRIRVJUWVBFX0VQTCk7CiAJCS8vIHNvdXJjZSBub2RlIElECiAJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iU3JjTm9kZUlkLAotCQkJICAgICAgIChCWVRFKSBFcGxEbGxrSW5zdGFuY2VfZy5tX0RsbENvbmZpZ1BhcmFtLgorCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cubV9EbGxDb25maWdQYXJhbS4KIAkJCSAgICAgICBtX3VpTm9kZUlkKTsKIAkJLy8gc291cmNlIE1BQyBhZGRyZXNzCiAJCUVQTF9NRU1DUFkoJnBUeEZyYW1lLT5tX2JlX2FiU3JjTWFjWzBdLApAQCAtNTMxLDcgKzUzMCw3IEBACiAJCQkJewkvLyBJZGVudFJlc3BvbnNlcyBhbmQgU3RhdHVzUmVzcG9uc2VzIGFyZSBCcm9hZGNhc3QKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT4KIAkJCQkJCSAgICAgICBtX2xlX2JEc3ROb2RlSWQsCi0JCQkJCQkgICAgICAgKEJZVEUpCisJCQkJCQkgICAgICAgKHU4KQogCQkJCQkJICAgICAgIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC01NTAsMTAgKzU0OSwxMCBAQAogCQkJCQkgIEVQTF9DX0RMTF9NVUxUSUNBU1RfU09DKTsKIAkJCS8vIGRlc3RpbmF0aW9uIG5vZGUgSUQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLAotCQkJCSAgICAgICAoQllURSkgRVBMX0NfQURSX0JST0FEQ0FTVCk7CisJCQkJICAgICAgICh1OCkgRVBMX0NfQURSX0JST0FEQ0FTVCk7CiAJCQkvLyByZXNldCBGbGFncwotCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMSwgKEJZVEUpIDApOwotCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMSwgKHU4KSAwKTsKKwkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2MubV9sZV9iRmxhZzIsICh1OCkgMCk7CiAJCQlicmVhazsKIAogCQljYXNlIGtFcGxNc2dUeXBlU29hOgpAQCAtNTYyLDEzICs1NjEsMTMgQEAKIAkJCQkJICBFUExfQ19ETExfTVVMVElDQVNUX1NPQSk7CiAJCQkvLyBkZXN0aW5hdGlvbiBub2RlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYkRzdE5vZGVJZCwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9DX0FEUl9CUk9BRENBU1QpOworCQkJCSAgICAgICAodTgpIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzEsIChCWVRFKSAwKTsKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzIsIChCWVRFKSAwKTsKKwkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLm1fbGVfYkZsYWcyLCAodTgpIDApOwogCQkJLy8gRVBMIHByb2ZpbGUgdmVyc2lvbgogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRXBsVmVyc2lvbiwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9TUEVDX1ZFUlNJT04pOworCQkJCSAgICAgICAodTgpIEVQTF9TUEVDX1ZFUlNJT04pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBrRXBsTXNnVHlwZVByZXM6CkBAIC01NzcsMTggKzU3NiwxOCBAQAogCQkJCQkgIEVQTF9DX0RMTF9NVUxUSUNBU1RfUFJFUyk7CiAJCQkvLyBkZXN0aW5hdGlvbiBub2RlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYkRzdE5vZGVJZCwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9DX0FEUl9CUk9BRENBU1QpOworCQkJCSAgICAgICAodTgpIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLm1fbGVfYkZsYWcxLCAoQllURSkgMCk7Ci0JCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX2JGbGFnMiwgKHU4KSAwKTsKIAkJCS8vIFBETyBzaXplCiAJCQkvL0FtaVNldFdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX3dTaXplLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2Uga0VwbE1zZ1R5cGVQcmVxOgogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVxLm1fbGVfYkZsYWcxLCAoQllURSkgMCk7Ci0JCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXEubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX2JGbGFnMiwgKHU4KSAwKTsKIAkJCS8vIFBETyBzaXplCiAJCQkvL0FtaVNldFdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX3dTaXplLCAwKTsKIAkJCWJyZWFrOwpAQCAtNTk3LDcgKzU5Niw3IEBACiAJCQlicmVhazsKIAkJfQogCQkvLyBFUEwgbWVzc2FnZSB0eXBlCi0JCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iTWVzc2FnZVR5cGUsIChCWVRFKSBNc2dUeXBlX3ApOworCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYk1lc3NhZ2VUeXBlLCAodTgpIE1zZ1R5cGVfcCk7CiAJfQogCiAJKnBwRnJhbWVfcCA9IHBUeEZyYW1lOwpAQCAtNjczLDcgKzY3Miw3IEBACiAJdEVkcnZUeEJ1ZmZlciAqcFR4QnVmZmVyOwogCXVuc2lnbmVkIGludCB1aUhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgdWlGcmFtZVNpemU7Ci0JQllURSBhYk11bHRpY2FzdE1hY1s2XTsKKwl1OCBhYk11bHRpY2FzdE1hY1s2XTsKIAl0RXBsRGxsQXN5bmNSZXFQcmlvcml0eSBBc3luY1JlcVByaW9yaXR5OwogCXVuc2lnbmVkIGludCB1aUZyYW1lQ291bnQ7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwpAQCAtNzEyLDcgKzcxMSw3IEBACiAJCQkvLyBFUEwgcHJvZmlsZSB2ZXJzaW9uCiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLgogCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UubV9sZV9iRXBsUHJvZmlsZVZlcnNpb24sCi0JCQkJICAgICAgIChCWVRFKSBFUExfU1BFQ19WRVJTSU9OKTsKKwkJCQkgICAgICAgKHU4KSBFUExfU1BFQ19WRVJTSU9OKTsKIAkJCS8vIEZlYXR1cmVGbGFncwogCQkJQW1pU2V0RHdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCiAJCQkJCW1fSWRlbnRSZXNwb25zZS5tX2xlX2R3RmVhdHVyZUZsYWdzLApAQCAtNzIxLDE4ICs3MjAsMTggQEAKIAkJCS8vIE1UVQogCQkJQW1pU2V0V29yZFRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC4KIAkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLm1fbGVfd010dSwKLQkJCQkgICAgICAgKFdPUkQpIEVwbERsbGtJbnN0YW5jZV9nLgorCQkJCSAgICAgICAodTE2KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkgICAgICAgbV9EbGxDb25maWdQYXJhbS5tX3VpQXN5bmNNdHUpOwogCQkJLy8gUG9sbEluU2l6ZQogCQkJQW1pU2V0V29yZFRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC4KIAkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLm1fbGVfd1BvbGxJblNpemUsCi0JCQkJICAgICAgIChXT1JEKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHUxNikgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJICAgICAgIG1fdWlQcmVxQWN0UGF5bG9hZExpbWl0KTsKIAkJCS8vIFBvbGxPdXRTaXplCiAJCQlBbWlTZXRXb3JkVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLgogCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UubV9sZV93UG9sbE91dFNpemUsCi0JCQkJICAgICAgIChXT1JEKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHUxNikgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJICAgICAgIG1fdWlQcmVzQWN0UGF5bG9hZExpbWl0KTsKIAkJCS8vIFJlc3BvbnNlVGltZSAvIFByZXNNYXhMYXRlbmN5CkBAIC05MzYsNyArOTM1LDcgQEAKIC8vICAgICAgICAgICAgICAgICAgICBFcGxEbGxrSW5zdGFuY2VfZy5tX2FOb2RlSW5mb1t1aUluZGV4XS5tX3VpTm9kZUlkID0gdWlJbmRleCArIDE7CiAJCQkJCUVwbERsbGtJbnN0YW5jZV9nLm1fYU5vZGVJbmZvW3VpSW5kZXhdLgogCQkJCQkgICAgbV93UHJlc1BheWxvYWRMaW1pdCA9Ci0JCQkJCSAgICAoV09SRCkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJCSAgICAodTE2KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkJICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJCSAgICBtX3VpSXNvY2hyUnhNYXhQYXlsb2FkOwogCQkJCX0KQEAgLTEyMzMsNyArMTIzMiw3IEBACiAJCQkJfQogCQkJCWlmICh1aUZyYW1lQ291bnQgPiAwKSB7CiAJCQkJCUVwbERsbGtJbnN0YW5jZV9nLm1fYkZsYWcyID0KLQkJCQkJICAgIChCWVRFKSAoKChBc3luY1JlcVByaW9yaXR5IDw8CisJCQkJCSAgICAodTgpICgoKEFzeW5jUmVxUHJpb3JpdHkgPDwKIAkJCQkJCSAgICAgIEVQTF9GUkFNRV9GTEFHMl9QUl9TSElGVCkKIAkJCQkJCSAgICAgJiBFUExfRlJBTUVfRkxBRzJfUFIpCiAJCQkJCQkgICAgfCAodWlGcmFtZUNvdW50ICYKQEAgLTEzMDcsNyArMTMwNiw3IEBACiAJCQkJCX0KIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLgogCQkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iRmxhZzIsCiAJCQkJCQkgICAgICAgRXBsRGxsa0luc3RhbmNlX2cuCkBAIC0xNTMzLDcgKzE1MzIsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsRGxsa1NldEZsYWcxT2ZOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQordEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbERsbGtOb2RlSW5mbyAqcE5vZGVJbmZvOwpAQCAtMTY2NCw3ICsxNjYzLDcgQEAKIAkJcEludE5vZGVJbmZvLT5tX3BQcmVxVHhCdWZmZXIgPQogCQkgICAgJkVwbERsbGtJbnN0YW5jZV9nLm1fcFR4QnVmZmVyW3VpSGFuZGxlXTsKIAkJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLAotCQkJICAgICAgIChCWVRFKSBwTm9kZUluZm9fcC0+bV91aU5vZGVJZCk7CisJCQkgICAgICAgKHU4KSBwTm9kZUluZm9fcC0+bV91aU5vZGVJZCk7CiAKIAkJLy8gc2V0IHVwIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzCiAJCUVQTF9NRU1DUFkocEZyYW1lLT5tX2JlX2FiRHN0TWFjLCBwSW50Tm9kZUluZm8tPm1fYmVfYWJNYWNBZGRyLApAQCAtMjQzMSw3ICsyNDMwLDcgQEAKIAl0RXBsRGxsUmVxU2VydmljZUlkIFJlcVNlcnZpY2VJZDsKIAl1bnNpZ25lZCBpbnQgdWlBc25kU2VydmljZUlkOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKLQlCWVRFIGJGbGFnMTsKKwl1OCBiRmxhZzE7CiAKIAlCRU5DSE1BUktfTU9EXzAyX1NFVCgzKTsKIAlObXRTdGF0ZSA9IEVwbE5tdGtHZXRObXRTdGF0ZSgpOwpAQCAtMjQ2Niw3ICsyNDY1LDcgQEAKIAkJCQkJLy8gdXBkYXRlIGZyYW1lIChOTVQgc3RhdGUsIFJELCBSUywgUFIsIE1TLCBFTiBmbGFncykKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLgogCQkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iRmxhZzIsCiAJCQkJCQkgICAgICAgRXBsRGxsa0luc3RhbmNlX2cuCkBAIC0yNTQxLDcgKzI1NDAsNyBAQAogCQkJCQkvLyB1cGRhdGUgZnJhbWUgKE5NVCBzdGF0ZSwgUkQsIFJTLCBQUiwgTVMsIEVOIGZsYWdzKQogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkgICAgICAgKHU4KSBObXRTdGF0ZSk7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy4KIAkJCQkJCSAgICAgICBtX2xlX2JGbGFnMiwKIAkJCQkJCSAgICAgICBFcGxEbGxrSW5zdGFuY2VfZy4KQEAgLTI4MDMsNyArMjgwMiw3IEBACiAJCQkJfQogCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy4KIAkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCSAgICAgICBtX2xlX2JGbGFnMiwKIAkJCQkJICAgICAgIEVwbERsbGtJbnN0YW5jZV9nLm1fYkZsYWcyKTsKQEAgLTI4ODgsNyArMjg4Nyw3IEBACiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCQkgICAgICAgbV9TdGF0dXNSZXNwb25zZS4KIAkJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+CiAJCQkJCQkJICAgICAgIG1fRGF0YS5tX0FzbmQuCiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KQEAgLTI5NTQsNyArMjk1Myw3IEBACiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLgogCQkJCQkJCSAgICAgICBtX2xlX2JObXRTdGF0dXMsCi0JCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT4KIAkJCQkJCQkgICAgICAgbV9EYXRhLm1fQXNuZC4KIAkJCQkJCQkgICAgICAgbV9QYXlsb2FkLgpAQCAtMzE1NSw3ICszMTU0LDcgQEAKIAogICAgICAgRXhpdDoKIAlpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7Ci0JCURXT1JEIGR3QXJnOworCQl1MzIgZHdBcmc7CiAKIAkJQkVOQ0hNQVJLX01PRF8wMl9UT0dHTEUoOSk7CiAKQEAgLTMyODYsNyArMzI4NSw3IEBACiAJCQkJCQkgICAgICAgbV9QYXlsb2FkLgogCQkJCQkJICAgICAgIG1fU3RhdHVzUmVzcG9uc2UuCiAJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkgICAgICAgKHU4KSBObXRTdGF0ZSk7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fQXNuZC4KIAkJCQkJCSAgICAgICBtX1BheWxvYWQuCiAJCQkJCQkgICAgICAgbV9TdGF0dXNSZXNwb25zZS4KQEAgLTMzMjIsNyArMzMyMSw3IEBACiAJCQkJCQkgICAgICAgbV9QYXlsb2FkLgogCQkJCQkJICAgICAgIG1fSWRlbnRSZXNwb25zZS4KIAkJCQkJCSAgICAgICBtX2xlX2JObXRTdGF0dXMsCi0JCQkJCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlKTsKKwkJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLgogCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UuCkBAIC0zMzYyLDEyICszMzYxLDEyIEBACiAJCQkJCQlpZiAoKEFtaUdldEJ5dGVGcm9tTGUKIAkJCQkJCSAgICAgKCZwVHhGcmFtZS0+CiAJCQkJCQkgICAgICBtX2xlX2JNZXNzYWdlVHlwZSkKLQkJCQkJCSAgICAgPT0gKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCkKKwkJCQkJCSAgICAgPT0gKHU4KSBrRXBsTXNnVHlwZUFzbmQpCiAJCQkJCQkgICAgJiYKIAkJCQkJCSAgICAoQW1pR2V0Qnl0ZUZyb21MZQogCQkJCQkJICAgICAoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLgogCQkJCQkJICAgICAgbV9sZV9iU2VydmljZUlkKQotCQkJCQkJICAgICA9PSAoQllURSkga0VwbERsbEFzbmRObXRDb21tYW5kKSkgewkvLyBwb3N0IGV2ZW50IGRpcmVjdGx5IHRvIE5tdE1udSBtb2R1bGUKKwkJCQkJCSAgICAgPT0gKHU4KSBrRXBsRGxsQXNuZE5tdENvbW1hbmQpKSB7CS8vIHBvc3QgZXZlbnQgZGlyZWN0bHkgdG8gTm10TW51IG1vZHVsZQogCQkJCQkJCUV2ZW50Lm1fRXZlbnRTaW5rID0KIAkJCQkJCQkgICAga0VwbEV2ZW50U2lua05tdE1udTsKIAkJCQkJCQlFdmVudC5tX0V2ZW50VHlwZSA9CkBAIC0zNDQ5LDcgKzM0NDgsNyBAQAogCiAgICAgICBFeGl0OgogCWlmIChSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpIHsKLQkJRFdPUkQgZHdBcmc7CisJCXUzMiBkd0FyZzsKIAogCQlCRU5DSE1BUktfTU9EXzAyX1RPR0dMRSg5KTsKIApAQCAtMzQ4NSw3ICszNDg0LDcgQEAKIAkJCQkgICAgdW5zaWduZWQgaW50IHVpRnJhbWVTaXplX3ApCiB7CiAJdEVwbE1zZ1R5cGUgTXNnVHlwZTsKLQlXT1JEIHdFdGhlclR5cGU7CisJdTE2IHdFdGhlclR5cGU7CiAKIAkvLyBjaGVjayBmcmFtZQogCWlmIChwRnJhbWVfcCAhPSBOVUxMKSB7CkBAIC0zNTA2LDcgKzM1MDUsNyBAQAogCQlpZiAod0V0aGVyVHlwZSA9PSBFUExfQ19ETExfRVRIRVJUWVBFX0VQTCkgewogCQkJLy8gc291cmNlIG5vZGUgSUQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWVfcC0+bV9sZV9iU3JjTm9kZUlkLAotCQkJCSAgICAgICAoQllURSkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0ubV91aU5vZGVJZCk7CiAKIAkJCS8vIGNoZWNrIG1lc3NhZ2UgdHlwZQpAQCAtMzUxNSw3ICszNTE0LDcgQEAKIAkJCWlmIChNc2dUeXBlID09IDApIHsKIAkJCQlNc2dUeXBlID0ga0VwbE1zZ1R5cGVBc25kOwogCQkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWVfcC0+bV9sZV9iTWVzc2FnZVR5cGUsCi0JCQkJCSAgICAgICAoQllURSkgTXNnVHlwZSk7CisJCQkJCSAgICAgICAodTgpIE1zZ1R5cGUpOwogCQkJfQogCiAJCQlpZiAoTXNnVHlwZSA9PSBrRXBsTXNnVHlwZUFzbmQpIHsKQEAgLTM1NDYsNyArMzU0NSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgRVBMX1RJTUVSX1VTRV9ISUdIUkVTICE9IEZBTFNFCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqIHBFdmVudEFyZ19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CkBAIC0zNTgzLDcgKzM1ODIsNyBAQAogCiAgICAgICBFeGl0OgogCWlmIChSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpIHsKLQkJRFdPUkQgZHdBcmc7CisJCXUzMiBkd0FyZzsKIAogCQlCRU5DSE1BUktfTU9EXzAyX1RPR0dMRSg5KTsKIApAQCAtMzYxNyw3ICszNjE2LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiTW5UaW1lckN5Y2xlKHRFcGxUaW1lckV2ZW50QXJnICogcEV2ZW50QXJnX3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxEbGxrQ2JNblRpbWVyQ3ljbGUodEVwbFRpbWVyRXZlbnRBcmcgKnBFdmVudEFyZ19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwpAQCAtMzYzOSw3ICszNjM4LDcgQEAKIAogICAgICAgRXhpdDoKIAlpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7Ci0JCURXT1JEIGR3QXJnOworCQl1MzIgZHdBcmc7CiAKIAkJQkVOQ0hNQVJLX01PRF8wMl9UT0dHTEUoOSk7CiAKQEAgLTM2NzAsOCArMzY2OSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbERsbGtDYk1uVGltZXJSZXNwb25zZSh0RXBsVGltZXJFdmVudEFyZyAqCi0JCQkJCQkgIHBFdmVudEFyZ19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxObXRTdGF0ZSBObXRTdGF0ZTsKQEAgLTM2OTMsNyArMzY5MSw3IEBACiAKICAgICAgIEV4aXQ6CiAJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewotCQlEV09SRCBkd0FyZzsKKwkJdTMyIGR3QXJnOwogCiAJCUJFTkNITUFSS19NT0RfMDJfVE9HR0xFKDkpOwogCkBAIC0zODI3LDI0ICszODI1LDI0IEBACiAJCQkvLyB1cGRhdGUgZnJhbWUgKHRhcmdldCkKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgogCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlSWQsCi0JCQkJICAgICAgIChCWVRFKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHU4KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkgICAgICAgbV9MYXN0UmVxU2VydmljZUlkKTsKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgogCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlVGFyZ2V0LAotCQkJCSAgICAgICAoQllURSkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fdWlMYXN0VGFyZ2V0Tm9kZUlkKTsKIAogCQl9IGVsc2UgewkvLyBpbnZpdGUgbm9ib2R5CiAJCQkvLyB1cGRhdGUgZnJhbWUgKHRhcmdldCkKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgotCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlSWQsIChCWVRFKSAwKTsKKwkJCQkgICAgICAgbV9sZV9iUmVxU2VydmljZUlkLCAodTgpIDApOwogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EuCi0JCQkJICAgICAgIG1fbGVfYlJlcVNlcnZpY2VUYXJnZXQsIChCWVRFKSAwKTsKKwkJCQkgICAgICAgbV9sZV9iUmVxU2VydmljZVRhcmdldCwgKHU4KSAwKTsKIAkJfQogCiAJCS8vIHVwZGF0ZSBmcmFtZSAoTk1UIHN0YXRlKQogCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYS5tX2xlX2JObXRTdGF0dXMsCi0JCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlX3ApOworCQkJICAgICAgICh1OCkgTm10U3RhdGVfcCk7CiAKIAkJLy8gc2VuZCBTb0EgZnJhbWUKIAkJUmV0ID0gRWRydlNlbmRUeE1zZyhwVHhCdWZmZXIpOwpAQCAtMzkyMSw3ICszOTE5LDcgQEAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFZHJ2VHhCdWZmZXIgKnBUeEJ1ZmZlciA9IE5VTEw7CiAJdEVwbEZyYW1lICpwVHhGcmFtZTsKLQlCWVRFIGJGbGFnMSA9IDA7CisJdTggYkZsYWcxID0gMDsKIAogCWlmIChFcGxEbGxrSW5zdGFuY2VfZy5tX3BDdXJOb2RlSW5mbyA9PSBOVUxMKSB7CS8vIHN0YXJ0IHdpdGggZmlyc3QgaXNvY2hyb25vdXMgQ04KIAkJRXBsRGxsa0luc3RhbmNlX2cubV9wQ3VyTm9kZUluZm8gPQpAQCAtMzk3Miw3ICszOTcwLDcgQEAKIAkJaWYgKHBUeEJ1ZmZlciA9PSAmRXBsRGxsa0luc3RhbmNlX2cubV9wVHhCdWZmZXJbRVBMX0RMTEtfVFhGUkFNRV9QUkVTXSkgewkvLyBQUmVzIG9mIE1OIHdpbGwgYmUgc2VudAogCQkJLy8gdXBkYXRlIE5NVCBzdGF0ZQogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLm1fbGVfYk5tdFN0YXR1cywKLQkJCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlX3ApOworCQkJCSAgICAgICAodTgpIE5tdFN0YXRlX3ApOwogCQkJKnBEbGxTdGF0ZVByb3Bvc2VkX3AgPSBrRXBsRGxsTXNXYWl0U29hVHJpZzsKIAkJfQogCQkvLyAkJCQgZC5rLiBzZXQgRVBMX0ZSQU1FX0ZMQUcxX01TIGlmIG5lY2Vzc2FyeQpAQCAtNDAxNSw3ICs0MDEzLDcgQEAKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JQllURSBhYkJ1ZmZlclsxOF07CisJdTggYWJCdWZmZXJbMThdOwogCXRFcGxGcmFtZSAqcEZyYW1lID0gKHRFcGxGcmFtZSAqKSBhYkJ1ZmZlcjsKIAl0RXBsRnJhbWVJbmZvIEZyYW1lSW5mbzsKIApAQCAtNDAyNiwxMyArNDAyNCwxMyBAQAogCQkvLyBBU25kIHNlcnZpY2UgcmVnaXN0ZXJlZD8KIAkJaWYgKEVwbERsbGtJbnN0YW5jZV9nLm1fYUFzbmRGaWx0ZXJbUmVxU2VydmljZUlkX3BdID09IGtFcGxEbGxBc25kRmlsdGVyQW55KSB7CS8vIEFTbmQgc2VydmljZSBJRCBpcyByZWdpc3RlcmVkCiAJCQlBbWlTZXRCeXRlVG9MZSgmcEZyYW1lLT5tX2xlX2JTcmNOb2RlSWQsCi0JCQkJICAgICAgIChCWVRFKSB1aU5vZGVJZF9wKTsKKwkJCQkgICAgICAgKHU4KSB1aU5vZGVJZF9wKTsKIAkJCS8vIEVQTCBNc2dUeXBlIEFTbmQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWUtPm1fbGVfYk1lc3NhZ2VUeXBlLAotCQkJCSAgICAgICAoQllURSkga0VwbE1zZ1R5cGVBc25kKTsKKwkJCQkgICAgICAgKHU4KSBrRXBsTXNnVHlwZUFzbmQpOwogCQkJLy8gQVNuZCBTZXJ2aWNlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fbGVfYlNlcnZpY2VJZCwKLQkJCQkgICAgICAgKEJZVEUpIFJlcVNlcnZpY2VJZF9wKTsKKwkJCQkgICAgICAgKHU4KSBSZXFTZXJ2aWNlSWRfcCk7CiAJCQkvLyBjcmVhdGUgZnJhbWUgaW5mbyBzdHJ1Y3R1cmUKIAkJCUZyYW1lSW5mby5tX3BGcmFtZSA9IHBGcmFtZTsKIAkJCUZyYW1lSW5mby5tX3VpRnJhbWVTaXplID0gMTg7CS8vIGVtcHR5IG5vbiBleGlzdGluZyBBU25kIGZyYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbGtDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCmluZGV4IDM1OTA4M2UuLjBlMjgzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCkBAIC0xNDIsOSArMTQyLDkgQEAKIAl0U2hiSW5zdGFuY2UgbV9TaGJJbnN0YW5jZVR4R2VuOwkvLyBGSUZPIGZvciBUeCBmcmFtZXMgd2l0aCBnZW5lcmljIHByaW9yaXR5CiAjZWxzZQogCXVuc2lnbmVkIGludCBtX3VpRnJhbWVTaXplTm10OwotCUJZVEUgbV9hYkZyYW1lTm10WzE1MDBdOworCXU4IG1fYWJGcmFtZU5tdFsxNTAwXTsKIAl1bnNpZ25lZCBpbnQgbV91aUZyYW1lU2l6ZUdlbjsKLQlCWVRFIG1fYWJGcmFtZUdlblsxNTAwXTsKKwl1OCBtX2FiRnJhbWVHZW5bMTUwMF07CiAjZW5kaWYKIAogCXRFcGxEbGxrQ2FsU3RhdGlzdGljcyBtX1N0YXRpc3RpY3M7CkBAIC0yMDIsNyArMjAyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIEVwbERsbGtDYWxBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbERsbGtDYWxBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC0yNzksNyArMjc5LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIEVwbERsbGtDYWxEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbERsbGtDYWxEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC01MzYsNyArNTM2LDcgQEAKIAljYXNlIGtFcGxEbGxBc3luY1JlcVByaW9ObXQ6CS8vIE5NVCByZXF1ZXN0IHByaW9yaXR5CiAJCVNoYkVycm9yID0KIAkJICAgIFNoYkNpclJlYWREYXRhQmxvY2soRXBsRGxsa0NhbEluc3RhbmNlX2cubV9TaGJJbnN0YW5jZVR4Tm10LAotCQkJCQkoQllURSAqKSBwRnJhbWVfcCwgKnB1aUZyYW1lU2l6ZV9wLAorCQkJCQkodTggKikgcEZyYW1lX3AsICpwdWlGcmFtZVNpemVfcCwKIAkJCQkJJnVsRnJhbWVTaXplKTsKIAkJLy8gcmV0dXJucyBrU2hiT2ssIGtTaGJEYXRhVHJ1bmNhdGVkLCBrU2hiSW52YWxpZEFyZywga1NoYk5vUmVhZGFibGVEYXRhCiAJCWJyZWFrOwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJZGVmYXVsdDoJCS8vIGdlbmVyaWMgcHJpb3JpdHkKIAkJU2hiRXJyb3IgPQogCQkgICAgU2hiQ2lyUmVhZERhdGFCbG9jayhFcGxEbGxrQ2FsSW5zdGFuY2VfZy5tX1NoYkluc3RhbmNlVHhHZW4sCi0JCQkJCShCWVRFICopIHBGcmFtZV9wLCAqcHVpRnJhbWVTaXplX3AsCisJCQkJCSh1OCAqKSBwRnJhbWVfcCwgKnB1aUZyYW1lU2l6ZV9wLAogCQkJCQkmdWxGcmFtZVNpemUpOwogCQkvLyByZXR1cm5zIGtTaGJPaywga1NoYkRhdGFUcnVuY2F0ZWQsIGtTaGJJbnZhbGlkQXJnLCBrU2hiTm9SZWFkYWJsZURhdGEKIAkJYnJlYWs7CkBAIC04NzYsNyArODc2LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQorCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsdUNhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKaW5kZXggN2Y0YTE3NC4uZjk2ZmU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBFcGxEbGx1Q2FsRGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxEbGx1Q2FsRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0zNTUsNyArMzU1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsRGxsdUNhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQorCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXJyb3JIYW5kbGVyay5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKaW5kZXggZDEyNTIxZi4uNmJhZWQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKQEAgLTk3LDkgKzk3LDkgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlEV09SRCBtX2R3Q3VtdWxhdGl2ZUNudDsJLy8gc3ViaW5kZXggMQotCURXT1JEIG1fZHdUaHJlc2hvbGRDbnQ7CS8vIHN1YmluZGV4IDIKLQlEV09SRCBtX2R3VGhyZXNob2xkOwkvLyBzdWJpbmRleCAzCisJdTMyIG1fZHdDdW11bGF0aXZlQ250OwkvLyBzdWJpbmRleCAxCisJdTMyIG1fZHdUaHJlc2hvbGRDbnQ7CS8vIHN1YmluZGV4IDIKKwl1MzIgbV9kd1RocmVzaG9sZDsJLy8gc3ViaW5kZXggMwogCiB9IHRFcGxFcnJvckhhbmRsZXJrRXJyb3JDb3VudGVyOwogCkBAIC0xMTIsOSArMTEyLDkgQEAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCiAJdEVwbEVycm9ySGFuZGxlcmtFcnJvckNvdW50ZXIgbV9NbkNyY0VycjsJLy8gb2JqZWN0IDB4MUMwMAogCXRFcGxFcnJvckhhbmRsZXJrRXJyb3JDb3VudGVyIG1fTW5DeWNUaW1lRXhjZWVkOwkvLyBvYmplY3QgMHgxQzAyCi0JRFdPUkQgbV9hZHdNbkNuTG9zc1ByZXNDdW1DbnRbMjU0XTsJLy8gb2JqZWN0IDB4MUMwNwotCURXT1JEIG1fYWR3TW5Dbkxvc3NQcmVzVGhyQ250WzI1NF07CS8vIG9iamVjdCAweDFDMDgKLQlEV09SRCBtX2Fkd01uQ25Mb3NzUHJlc1RocmVzaG9sZFsyNTRdOwkvLyBvYmplY3QgMHgxQzA5CisJdTMyIG1fYWR3TW5Dbkxvc3NQcmVzQ3VtQ250WzI1NF07CS8vIG9iamVjdCAweDFDMDcKKwl1MzIgbV9hZHdNbkNuTG9zc1ByZXNUaHJDbnRbMjU0XTsJLy8gb2JqZWN0IDB4MUMwOAorCXUzMiBtX2Fkd01uQ25Mb3NzUHJlc1RocmVzaG9sZFsyNTRdOwkvLyBvYmplY3QgMHgxQzA5CiAJQk9PTCBtX2FmTW5Dbkxvc3NQcmVzRXZlbnRbMjU0XTsKICNlbmRpZgogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJCQkJCSAgIHVuc2lnbmVkIGludCB1aUluZGV4X3ApOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotc3RhdGljIHRFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0xpbmtBcnJheShEV09SRCAqIHBkd1ZhbHVlX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrTGlua0FycmF5KHUzMiAqIHBkd1ZhbHVlX3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlWYWx1ZUNvdW50X3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKTsKICNlbmRpZgpAQCAtMTc2LDcgKzE3Niw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCkKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAzLDcgKzIwMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0FkZEluc3RhbmNlKHZvaWQpCit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMDYsNyArMzA2LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzMzLDcgKzMzMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtQcm9jZXNzKHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgbG9uZyB1bERsbEVycm9yRXZlbnRzOwpAQCAtNzEzLDcgKzcxMyw3IEBACiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCiAJVmFyUGFyYW0ubV9wRGF0YSA9ICZwRXJyb3JDb3VudGVyX3AtPm1fZHdDdW11bGF0aXZlQ250OwotCVZhclBhcmFtLm1fU2l6ZSA9IHNpemVvZihEV09SRCk7CisJVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKHUzMik7CiAJVmFyUGFyYW0ubV91aUluZGV4ID0gdWlJbmRleF9wOwogCVZhclBhcmFtLm1fdWlTdWJpbmRleCA9IDB4MDE7CiAJVmFyUGFyYW0ubV9WYWxpZEZsYWcgPSBrVmFyVmFsaWRBbGw7CkBAIC03MjMsNyArNzIzLDcgQEAKIAl9CiAKIAlWYXJQYXJhbS5tX3BEYXRhID0gJnBFcnJvckNvdW50ZXJfcC0+bV9kd1RocmVzaG9sZENudDsKLQlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YoRFdPUkQpOworCVZhclBhcmFtLm1fU2l6ZSA9IHNpemVvZih1MzIpOwogCVZhclBhcmFtLm1fdWlJbmRleCA9IHVpSW5kZXhfcDsKIAlWYXJQYXJhbS5tX3VpU3ViaW5kZXggPSAweDAyOwogCVZhclBhcmFtLm1fVmFsaWRGbGFnID0ga1ZhclZhbGlkQWxsOwpAQCAtNzMzLDcgKzczMyw3IEBACiAJfQogCiAJVmFyUGFyYW0ubV9wRGF0YSA9ICZwRXJyb3JDb3VudGVyX3AtPm1fZHdUaHJlc2hvbGQ7Ci0JVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKERXT1JEKTsKKwlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YodTMyKTsKIAlWYXJQYXJhbS5tX3VpSW5kZXggPSB1aUluZGV4X3A7CiAJVmFyUGFyYW0ubV91aVN1YmluZGV4ID0gMHgwMzsKIAlWYXJQYXJhbS5tX1ZhbGlkRmxhZyA9IGtWYXJWYWxpZEFsbDsKQEAgLTc2MywxOCArNzYzLDE4IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotc3RhdGljIHRFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0xpbmtBcnJheShEV09SRCAqIHBkd1ZhbHVlX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrTGlua0FycmF5KHUzMiAqIHBkd1ZhbHVlX3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlWYWx1ZUNvdW50X3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKLQlCWVRFIGJJbmRleEVudHJpZXM7CisJdTggYkluZGV4RW50cmllczsKIAogCUVudHJ5U2l6ZSA9ICh0RXBsT2JkU2l6ZSkgc2l6ZW9mKGJJbmRleEVudHJpZXMpOwogCVJldCA9IEVwbE9iZFJlYWRFbnRyeSh1aUluZGV4X3AsCi0JCQkgICAgICAweDAwLCAodm9pZCBHRU5FUklDICopJmJJbmRleEVudHJpZXMsICZFbnRyeVNpemUpOworCQkJICAgICAgMHgwMCwgKHZvaWQgKikmYkluZGV4RW50cmllcywgJkVudHJ5U2l6ZSk7CiAKIAlpZiAoKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgfHwgKGJJbmRleEVudHJpZXMgPT0gMHgwMCkpIHsKIAkJLy8gT2JqZWN0IGRvZXNuJ3QgZXhpc3Qgb3IgaW52YWxpZCBlbnRyeSBudW1iZXIKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQl1aVZhbHVlQ291bnRfcCA9IGJJbmRleEVudHJpZXM7CiAJfQogCi0JVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKERXT1JEKTsKKwlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YodTMyKTsKIAlWYXJQYXJhbS5tX3VpSW5kZXggPSB1aUluZGV4X3A7CiAJVmFyUGFyYW0ubV9WYWxpZEZsYWcgPSBrVmFyVmFsaWRBbGw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnQuaAppbmRleCBiNmRjMWI5Li45MTBiZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudC5oCkBAIC0yNDgsOCArMjQ4LDggQEAKIAl0RXBsRXZlbnRTb3VyY2UgbV9FdmVudFNvdXJjZTsJLy8gbW9kdWxlIHdoaWNoIHBvc3RlZCB0aGlzIGVycm9yIGV2ZW50CiAJdEVwbEtlcm5lbCBtX0VwbEVycm9yOwkvLyBFUEwgZXJyb3Igd2hpY2ggb2NjdXJlZAogCXVuaW9uIHsKLQkJQllURSBtX2JBcmc7Ci0JCURXT1JEIG1fZHdBcmc7CisJCXU4IG1fYkFyZzsKKwkJdTMyIG1fZHdBcmc7CiAJCXRFcGxFdmVudFNvdXJjZSBtX0V2ZW50U291cmNlOwkvLyBmcm9tIEV2ZW50ay91IG1vZHVsZSAob3JpZ2luYXRpbmcgZXJyb3Igc291cmNlKQogCQl0RXBsRXZlbnRPYmRFcnJvciBtX09iZEVycm9yOwkvLyBmcm9tIE9iZCBtb2R1bGUKIC8vICAgICAgICB0RXBsRXJySGlzdG9yeUVudHJ5ICAgICBtX0hpc3RvcnlFbnRyeTsgLy8gZnJvbSBObXRrL3UgbW9kdWxlCkBAIC0yNjcsMTAgKzI2NywxMCBAQAogfSB0RXBsRXJyb3JIYW5kbGVya0V2ZW50OwogCiAvLyBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgaW5mb3JtZWQgYWJvdXQgc3luYyBldmVudAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxTeW5jQ2IpICh2b2lkKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbFN5bmNDYikgKHZvaWQpOwogCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBldmVudHMKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsUHJvY2Vzc0V2ZW50Q2IpICh0RXBsRXZlbnQgKiBwRXBsRXZlbnRfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxQcm9jZXNzRXZlbnRDYikgKHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gZnVuY3Rpb24gcHJvdG90eXBlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnRrLmMKaW5kZXggODA2OGE2Yy4uZWYzNjgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudGsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50ay5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgcGZuQ2JTeW5jX3ApCit0RXBsS2VybmVsIEVwbEV2ZW50a0luaXQodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKK3RFcGxLZXJuZWwgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTI3NSw3ICsyNzUsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0RlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRXZlbnRrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTMzOSw3ICszMzksNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2U7CkBAIC01NjIsNyArNTYyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKQordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC03NTUsMTIgKzc1NSwxMiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Bvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKQordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOwogCXRFcGxFdmVudEVycm9yICpwRXZlbnRFcnJvciA9ICh0RXBsRXZlbnRFcnJvciAqKSBhYkJ1ZmZlcjsKIAl0RXBsRXZlbnQgRXBsRXZlbnQ7CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCXRTaGJFcnJvciBTaGJFcnJvcjsKIC8vdW5zaWduZWQgbG9uZyAgIHVsQmxvY2tDb3VudDsKIC8vdW5zaWduZWQgbG9uZyAgIHVsRGF0YVNpemU7Ci0JQllURSBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKKwl1OCBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKIAkvLyBkLmsuOiBhYkRhdGFCdWZmZXIgY29udGFpbnMgdGhlIGNvbXBsZXRlIHRFcGxFdmVudCBzdHJ1Y3R1cmUKIAkvLyAgICAgICBhbmQgYmVoaW5kIHRoaXMgdGhlIGFyZ3VtZW50CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50dS5jCmluZGV4IDgxNWY5YTguLjNhZTI4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudHUuYwpAQCAtOTYsOCArOTYsOCBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwotdm9pZCBQVUJMSUMgVGd0RGJnUG9zdFRyYWNlVmFsdWUoRFdPUkQgZHdUcmFjZVZhbHVlX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNkZWZpbmUgVEdUX0RCR19QT1NUX1RSQUNFX1ZBTFVFKHYpICAgICBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh2KQogI2Vsc2UKQEAgLTE3Miw3ICsxNzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApCit0RXBsS2VybmVsIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5OSw4ICsxOTksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUFkZEluc3RhbmNlKHRFcGxQcm9jZXNzRXZlbnRDYgotCQkJCSAgICAgICBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKQordEVwbEtlcm5lbCBFcGxFdmVudHVBZGRJbnN0YW5jZSh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTI4MCw3ICsyNzksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRXZlbnR1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTM0OCw3ICszNDcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2U7CkBAIC01MTUsNyArNTE0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKQordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC02ODksMTIgKzY4OCwxMiBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVBvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKQordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOwogCXRFcGxFdmVudEVycm9yICpwRXZlbnRFcnJvciA9ICh0RXBsRXZlbnRFcnJvciAqKSBhYkJ1ZmZlcjsKIAl0RXBsRXZlbnQgRXBsRXZlbnQ7CiAKQEAgLTc1MSw3ICs3NTAsNyBAQAogCXRTaGJFcnJvciBTaGJFcnJvcjsKIC8vdW5zaWduZWQgbG9uZyAgIHVsQmxvY2tDb3VudDsKIC8vdW5zaWduZWQgbG9uZyAgIHVsRGF0YVNpemU7Ci0JQllURSBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKKwl1OCBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKIAkvLyBkLmsuOiBhYkRhdGFCdWZmZXIgY29udGFpbnMgdGhlIGNvbXBsZXRlIHRFcGxFdmVudCBzdHJ1Y3R1cmUKIAkvLyAgICAgICBhbmQgYmVoaW5kIHRoaXMgdGhlIGFyZ3VtZW50CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRnJhbWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRnJhbWUuaAppbmRleCA5YTdmOGI5Li5iYTFhZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEZyYW1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxGcmFtZS5oCkBAIC0xMjIsMTU1ICsxMjIsMTU1IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvLyBPZmZzZXQgMTcKLQlCWVRFIG1fbGVfYlJlczE7CS8vIHJlc2VydmVkCisJdTggbV9sZV9iUmVzMTsJLy8gcmVzZXJ2ZWQKIAkvLyBPZmZzZXQgMTgKLQlCWVRFIG1fbGVfYkZsYWcxOwkvLyBGbGFnczogTUMsIFBTCisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNQywgUFMKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiByZXMKIAkvLyBPZmZzZXQgMjAKIAl0RXBsTmV0VGltZSBtX2xlX05ldFRpbWU7CS8vIHN1cHBvcnRlZCBpZiBEX05NVF9OZXRUaW1lSXNSZWFsVGltZV9CT09MIGlzIHNldAogCS8vIE9mZnNldCAyOAotCVFXT1JEIG1fbGVfUmVsYXRpdmVUaW1lOwkvLyBpbiB1cyAoc3VwcG9ydGVkIGlmIERfTk1UX1JlbGF0aXZlVGltZV9CT09MIGlzIHNldCkKKwl1NjQgbV9sZV9SZWxhdGl2ZVRpbWU7CS8vIGluIHVzIChzdXBwb3J0ZWQgaWYgRF9OTVRfUmVsYXRpdmVUaW1lX0JPT0wgaXMgc2V0KQogCiB9IFBBQ0tfU1RSVUNUIHRFcGxTb2NGcmFtZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxNwotCUJZVEUgbV9sZV9iUmVzMTsJLy8gcmVzZXJ2ZWQKKwl1OCBtX2xlX2JSZXMxOwkvLyByZXNlcnZlZAogCS8vIE9mZnNldCAxOAotCUJZVEUgbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNUywgRUEsIFJECisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNUywgRUEsIFJECiAJLy8gT2Zmc2V0IDE5Ci0JQllURSBtX2xlX2JGbGFnMjsJLy8gRmxhZ3M6IHJlcworCXU4IG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCiAJLy8gT2Zmc2V0IDIwCi0JQllURSBtX2xlX2JQZG9WZXJzaW9uOworCXU4IG1fbGVfYlBkb1ZlcnNpb247CiAJLy8gT2Zmc2V0IDIxCi0JQllURSBtX2xlX2JSZXMyOwkvLyByZXNlcnZlZAorCXU4IG1fbGVfYlJlczI7CS8vIHJlc2VydmVkCiAJLy8gT2Zmc2V0IDIyCi0JV09SRCBtX2xlX3dTaXplOworCXUxNiBtX2xlX3dTaXplOwogCS8vIE9mZnNldCAyNAotCUJZVEUgbV9sZV9hYlBheWxvYWRbMjU2IC8qRF9OTVRfSXNvY2hyUnhNYXhQYXlsb2FkX1UxNiAqLyBdOworCXU4IG1fbGVfYWJQYXlsb2FkWzI1NiAvKkRfTk1UX0lzb2NoclJ4TWF4UGF5bG9hZF9VMTYgKi8gXTsKIAogfSBQQUNLX1NUUlVDVCB0RXBsUHJlcUZyYW1lOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE3Ci0JQllURSBtX2xlX2JObXRTdGF0dXM7CS8vIE5NVCBzdGF0ZQorCXU4IG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IE1TLCBFTiwgUkQKKwl1OCBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IE1TLCBFTiwgUkQKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiBQUiwgUlMKIAkvLyBPZmZzZXQgMjAKLQlCWVRFIG1fbGVfYlBkb1ZlcnNpb247CisJdTggbV9sZV9iUGRvVmVyc2lvbjsKIAkvLyBPZmZzZXQgMjEKLQlCWVRFIG1fbGVfYlJlczI7CS8vIHJlc2VydmVkCisJdTggbV9sZV9iUmVzMjsJLy8gcmVzZXJ2ZWQKIAkvLyBPZmZzZXQgMjIKLQlXT1JEIG1fbGVfd1NpemU7CisJdTE2IG1fbGVfd1NpemU7CiAJLy8gT2Zmc2V0IDI0Ci0JQllURSBtX2xlX2FiUGF5bG9hZFsyNTYJLypEX05NVF9Jc29jaHJSeE1heFBheWxvYWRfVTE2CisJdTggbV9sZV9hYlBheWxvYWRbMjU2CS8qRF9OTVRfSXNvY2hyUnhNYXhQYXlsb2FkX1UxNgogCQkJCSAgIC8gRF9OTVRfSXNvY2hyVHhNYXhQYXlsb2FkX1UxNiAqLyBdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxQcmVzRnJhbWU7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvLyBPZmZzZXQgMTcKLQlCWVRFIG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCisJdTggbV9sZV9iTm10U3RhdHVzOwkvLyBOTVQgc3RhdGUKIAkvLyBPZmZzZXQgMTgKLQlCWVRFIG1fbGVfYkZsYWcxOwkvLyBGbGFnczogRUEsIEVSCisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBFQSwgRVIKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiByZXMKIAkvLyBPZmZzZXQgMjAKLQlCWVRFIG1fbGVfYlJlcVNlcnZpY2VJZDsKKwl1OCBtX2xlX2JSZXFTZXJ2aWNlSWQ7CiAJLy8gT2Zmc2V0IDIxCi0JQllURSBtX2xlX2JSZXFTZXJ2aWNlVGFyZ2V0OworCXU4IG1fbGVfYlJlcVNlcnZpY2VUYXJnZXQ7CiAJLy8gT2Zmc2V0IDIyCi0JQllURSBtX2xlX2JFcGxWZXJzaW9uOworCXU4IG1fbGVfYkVwbFZlcnNpb247CiAKIH0gUEFDS19TVFJVQ1QgdEVwbFNvYUZyYW1lOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JV09SRCBtX3dFbnRyeVR5cGU7Ci0JV09SRCBtX3dFcnJvckNvZGU7CisJdTE2IG1fd0VudHJ5VHlwZTsKKwl1MTYgbV93RXJyb3JDb2RlOwogCXRFcGxOZXRUaW1lIG1fVGltZVN0YW1wOwotCUJZVEUgbV9hYkFkZEluZm9bOF07CisJdTggbV9hYkFkZEluZm9bOF07CiAKIH0gUEFDS19TVFJVQ1QgdEVwbEVyckhpc3RvcnlFbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxOAotCUJZVEUgbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBFTiwgRUMKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCi0JQllURSBtX2xlX2JObXRTdGF0dXM7CS8vIE5NVCBzdGF0ZQotCUJZVEUgbV9sZV9iUmVzMVszXTsKLQlRV09SRCBtX2xlX3F3U3RhdGljRXJyb3I7CS8vIHN0YXRpYyBlcnJvciBiaXQgZmllbGQKKwl1OCBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IEVOLCBFQworCXU4IG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCisJdTggbV9sZV9iTm10U3RhdHVzOwkvLyBOTVQgc3RhdGUKKwl1OCBtX2xlX2JSZXMxWzNdOworCXU2NCBtX2xlX3F3U3RhdGljRXJyb3I7CS8vIHN0YXRpYyBlcnJvciBiaXQgZmllbGQKIAl0RXBsRXJySGlzdG9yeUVudHJ5IG1fbGVfYUVyckhpc3RvcnlFbnRyeVsxNF07CiAKIH0gUEFDS19TVFJVQ1QgdEVwbFN0YXR1c1Jlc3BvbnNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IHJlcwotCUJZVEUgbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiBQUiwgUlMKLQlCWVRFIG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCi0JQllURSBtX2xlX2JJZGVudFJlc3BGbGFnczsJLy8gRmxhZ3M6IEZXCi0JQllURSBtX2xlX2JFcGxQcm9maWxlVmVyc2lvbjsKLQlCWVRFIG1fbGVfYlJlczE7Ci0JRFdPUkQgbV9sZV9kd0ZlYXR1cmVGbGFnczsJLy8gTk1UX0ZlYXR1cmVGbGFnc19VMzIKLQlXT1JEIG1fbGVfd010dTsJCS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuQXN5bmNNVFVfVTE2OiBDX0lQX01JTl9NVFUgLSBDX0lQX01BWF9NVFUKLQlXT1JEIG1fbGVfd1BvbGxJblNpemU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlcUFjdFBheWxvYWRfVTE2Ci0JV09SRCBtX2xlX3dQb2xsT3V0U2l6ZTsJLy8gTk1UX0N5Y2xlVGltaW5nX1JFQy5QUmVzQWN0UGF5bG9hZF9VMTYKLQlEV09SRCBtX2xlX2R3UmVzcG9uc2VUaW1lOwkvLyBOTVRfQ3ljbGVUaW1pbmdfUkVDLlBSZXNNYXhMYXRlbmN5X1UzMgotCVdPUkQgbV9sZV93UmVzMjsKLQlEV09SRCBtX2xlX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCi0JRFdPUkQgbV9sZV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgotCURXT1JEIG1fbGVfZHdQcm9kdWN0Q29kZTsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5Qcm9kdWN0Q29kZV9VMzIKLQlEV09SRCBtX2xlX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKLQlEV09SRCBtX2xlX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgotCVFXT1JEIG1fbGVfcXdWZW5kb3JTcGVjaWZpY0V4dDE7Ci0JRFdPUkQgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCi0JRFdPUkQgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCi0JRFdPUkQgbV9sZV9kd0FwcGxpY2F0aW9uU3dEYXRlOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dEYXRlX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIGRhdGUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2xlX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQotCURXT1JEIG1fbGVfZHdJcEFkZHJlc3M7Ci0JRFdPUkQgbV9sZV9kd1N1Ym5ldE1hc2s7Ci0JRFdPUkQgbV9sZV9kd0RlZmF1bHRHYXRld2F5OwotCUJZVEUgbV9sZV9zSG9zdG5hbWVbMzJdOwotCUJZVEUgbV9sZV9hYlZlbmRvclNwZWNpZmljRXh0Mls0OF07CisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiByZXMKKwl1OCBtX2xlX2JGbGFnMjsJLy8gRmxhZ3M6IFBSLCBSUworCXU4IG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCisJdTggbV9sZV9iSWRlbnRSZXNwRmxhZ3M7CS8vIEZsYWdzOiBGVworCXU4IG1fbGVfYkVwbFByb2ZpbGVWZXJzaW9uOworCXU4IG1fbGVfYlJlczE7CisJdTMyIG1fbGVfZHdGZWF0dXJlRmxhZ3M7CS8vIE5NVF9GZWF0dXJlRmxhZ3NfVTMyCisJdTE2IG1fbGVfd010dTsJCS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuQXN5bmNNVFVfVTE2OiBDX0lQX01JTl9NVFUgLSBDX0lQX01BWF9NVFUKKwl1MTYgbV9sZV93UG9sbEluU2l6ZTsJLy8gTk1UX0N5Y2xlVGltaW5nX1JFQy5QUmVxQWN0UGF5bG9hZF9VMTYKKwl1MTYgbV9sZV93UG9sbE91dFNpemU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlc0FjdFBheWxvYWRfVTE2CisJdTMyIG1fbGVfZHdSZXNwb25zZVRpbWU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlc01heExhdGVuY3lfVTMyCisJdTE2IG1fbGVfd1JlczI7CisJdTMyIG1fbGVfZHdEZXZpY2VUeXBlOwkvLyBOTVRfRGV2aWNlVHlwZV9VMzIKKwl1MzIgbV9sZV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgorCXUzMiBtX2xlX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCisJdTMyIG1fbGVfZHdSZXZpc2lvbk51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5SZXZpc2lvbk5vX1UzMgorCXUzMiBtX2xlX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgorCXU2NCBtX2xlX3F3VmVuZG9yU3BlY2lmaWNFeHQxOworCXUzMiBtX2xlX2R3VmVyaWZ5Q29uZmlndXJhdGlvbkRhdGU7CS8vIENGTV9WZXJpZnlDb25maWd1cmF0aW9uX1JFQy5Db25mRGF0ZV9VMzIKKwl1MzIgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCisJdTMyIG1fbGVfZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fbGVfZHdBcHBsaWNhdGlvblN3VGltZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3VGltZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciB0aW1lIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fbGVfZHdJcEFkZHJlc3M7CisJdTMyIG1fbGVfZHdTdWJuZXRNYXNrOworCXUzMiBtX2xlX2R3RGVmYXVsdEdhdGV3YXk7CisJdTggbV9sZV9zSG9zdG5hbWVbMzJdOworCXU4IG1fbGVfYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxJZGVudFJlc3BvbnNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JObXRDb21tYW5kSWQ7Ci0JQllURSBtX2xlX2JSZXMxOwotCUJZVEUgbV9sZV9hYk5tdENvbW1hbmREYXRhWzMyXTsKKwl1OCBtX2xlX2JObXRDb21tYW5kSWQ7CisJdTggbV9sZV9iUmVzMTsKKwl1OCBtX2xlX2FiTm10Q29tbWFuZERhdGFbMzJdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxObXRDb21tYW5kU2VydmljZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9sZV9iUmVzZXJ2ZWQ7Ci0JQllURSBtX2xlX2JUcmFuc2FjdGlvbklkOwotCUJZVEUgbV9sZV9iRmxhZ3M7Ci0JQllURSBtX2xlX2JDb21tYW5kSWQ7Ci0JV09SRCBtX2xlX3dTZWdtZW50U2l6ZTsKLQlXT1JEIG1fbGVfd1Jlc2VydmVkOwotCUJZVEUgbV9sZV9hYkNvbW1hbmREYXRhWzhdOwkvLyBqdXN0IHJlc2VydmUgYSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyBhcyBhIHBsYWNlaG9sZGVyCisJdTggbV9sZV9iUmVzZXJ2ZWQ7CisJdTggbV9sZV9iVHJhbnNhY3Rpb25JZDsKKwl1OCBtX2xlX2JGbGFnczsKKwl1OCBtX2xlX2JDb21tYW5kSWQ7CisJdTE2IG1fbGVfd1NlZ21lbnRTaXplOworCXUxNiBtX2xlX3dSZXNlcnZlZDsKKwl1OCBtX2xlX2FiQ29tbWFuZERhdGFbOF07CS8vIGp1c3QgcmVzZXJ2ZSBhIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIGFzIGEgcGxhY2Vob2xkZXIKIAogfSBQQUNLX1NUUlVDVCB0RXBsQXN5U2RvQ29tOwogCiAvLyBhc3luY2hyb25vdXMgU0RPIFNlcXVlbmNlIEhlYWRlcgogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9sZV9iUmVjU2VxTnVtQ29uOwotCUJZVEUgbV9sZV9iU2VuZFNlcU51bUNvbjsKLQlCWVRFIG1fbGVfYWJSZXNlcnZlZFsyXTsKKwl1OCBtX2xlX2JSZWNTZXFOdW1Db247CisJdTggbV9sZV9iU2VuZFNlcU51bUNvbjsKKwl1OCBtX2xlX2FiUmVzZXJ2ZWRbMl07CiAJdEVwbEFzeVNkb0NvbSBtX2xlX2FiU2RvU2VxUGF5bG9hZDsKIAogfSBQQUNLX1NUUlVDVCB0RXBsQXN5U2RvU2VxOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JObXRDb21tYW5kSWQ7Ci0JQllURSBtX2xlX2JUYXJnZXROb2RlSWQ7Ci0JQllURSBtX2xlX2FiTm10Q29tbWFuZERhdGFbMzJdOworCXU4IG1fbGVfYk5tdENvbW1hbmRJZDsKKwl1OCBtX2xlX2JUYXJnZXROb2RlSWQ7CisJdTggbV9sZV9hYk5tdENvbW1hbmREYXRhWzMyXTsKIAogfSBQQUNLX1NUUlVDVCB0RXBsTm10UmVxdWVzdFNlcnZpY2U7CiAKQEAgLTI4MSwxNCArMjgxLDE0IEBACiAJdEVwbE5tdENvbW1hbmRTZXJ2aWNlIG1fTm10Q29tbWFuZFNlcnZpY2U7CiAJdEVwbE5tdFJlcXVlc3RTZXJ2aWNlIG1fTm10UmVxdWVzdFNlcnZpY2U7CiAJdEVwbEFzeVNkb1NlcSBtX1Nkb1NlcXVlbmNlRnJhbWU7Ci0JQllURSBtX2xlX2FiUGF5bG9hZFsyNTYJLypEX05NVF9BU25kVHhNYXhQYXlsb2FkX1UxNgorCXU4IG1fbGVfYWJQYXlsb2FkWzI1NgkvKkRfTk1UX0FTbmRUeE1heFBheWxvYWRfVTE2CiAJCQkJICAgLyBEX05NVF9BU25kUnhNYXhQYXlsb2FkX1UxNiAqLyBdOwogCiB9IHRFcGxBc25kUGF5bG9hZDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxNwotCUJZVEUgbV9sZV9iU2VydmljZUlkOworCXU4IG1fbGVfYlNlcnZpY2VJZDsKIAkvLyBPZmZzZXQgMTgKIAl0RXBsQXNuZFBheWxvYWQgbV9QYXlsb2FkOwogCkBAIC0zMDYsMTcgKzMwNiwxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDAKLQlCWVRFIG1fYmVfYWJEc3RNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSBhZGRyZXNzZWQgbm9kZXMKKwl1OCBtX2JlX2FiRHN0TWFjWzZdOwkvLyBNQUMgYWRkcmVzcyBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCiAJLy8gT2Zmc2V0IDYKLQlCWVRFIG1fYmVfYWJTcmNNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQorCXU4IG1fYmVfYWJTcmNNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQogCS8vIE9mZnNldCAxMgotCVdPUkQgbV9iZV93RXRoZXJUeXBlOwkvLyBFdGhlcm5ldCBtZXNzYWdlIHR5cGUgKGJpZyBlbmRpYW4pCisJdTE2IG1fYmVfd0V0aGVyVHlwZTsJLy8gRXRoZXJuZXQgbWVzc2FnZSB0eXBlIChiaWcgZW5kaWFuKQogCS8vIE9mZnNldCAxNAotCUJZVEUgbV9sZV9iTWVzc2FnZVR5cGU7CS8vIEVQTCBtZXNzYWdlIHR5cGUKKwl1OCBtX2xlX2JNZXNzYWdlVHlwZTsJLy8gRVBMIG1lc3NhZ2UgdHlwZQogCS8vIE9mZnNldCAxNQotCUJZVEUgbV9sZV9iRHN0Tm9kZUlkOwkvLyBFUEwgbm9kZSBJRCBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCisJdTggbV9sZV9iRHN0Tm9kZUlkOwkvLyBFUEwgbm9kZSBJRCBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCiAJLy8gT2Zmc2V0IDE2Ci0JQllURSBtX2xlX2JTcmNOb2RlSWQ7CS8vIEVQTCBub2RlIElEIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQorCXU4IG1fbGVfYlNyY05vZGVJZDsJLy8gRVBMIG5vZGUgSUQgb2YgdGhlIHRyYW5zbWl0dGluZyBub2RlCiAJLy8gT2Zmc2V0IDE3CiAJdEVwbEZyYW1lRGF0YSBtX0RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSWRlbnR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbElkZW50dS5jCmluZGV4IGNlNTllZjAuLjkzZDVhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSWRlbnR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJZGVudHUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMTY0LDcgKzE2NCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUluaXQoKQordEVwbEtlcm5lbCBFcGxJZGVudHVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbElkZW50dUFkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbElkZW50dURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXNldCgpCit0RXBsS2VybmVsIEVwbElkZW50dVJlc2V0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJaW50IGlJbmRleDsKQEAgLTMwMCw5ICszMDAsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICB0RXBsSWRlbnRSZXNwb25zZSAqKgotCQkJCQkgICAgcHBJZGVudFJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMzgsOSArMzM3LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxJZGVudHVDYlJlc3BvbnNlCi0JCQkJCQlwZm5DYlJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbElkZW50dVJlcXVlc3RJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCQkgdEVwbElkZW50dUNiUmVzcG9uc2UgcGZuQ2JSZXNwb25zZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zODgsOSArMzg2LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgRFdPUkQgUFVCTElDIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKQordTMyIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKQogewotCURXT1JEIGR3UmVxcyA9IDA7CisJdTMyIGR3UmVxcyA9IDA7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CiAKIAlmb3IgKHVpSW5kZXggPSAwOyB1aUluZGV4IDwgMzI7IHVpSW5kZXgrKykgewpAQCAtNDI2LDcgKzQyNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUNiSWRlbnRSZXNwb25zZSh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEluYy5oCmluZGV4IDc3ZjkzZDEuLmY5MTc5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbmMuaApAQCAtMTQwLDggKzE0MCw4IEBACiAKIC8vIElFRUUgMTU4OCBjb25mb3JtYW50IG5ldCB0aW1lIHN0cnVjdHVyZQogdHlwZWRlZiBzdHJ1Y3QgewotCURXT1JEIG1fZHdTZWM7Ci0JRFdPUkQgbV9kd05hbm9TZWM7CisJdTMyIG1fZHdTZWM7CisJdTMyIG1fZHdOYW5vU2VjOwogCiB9IHRFcGxOZXRUaW1lOwogCkBAIC0xNTQsOCArMTU0LDggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2RlZmluZSBFUExfU1BFQ19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAweDIwCS8vIEVUSEVSTkVUIFBvd2VybGluayBWLiAyLjAKLSNkZWZpbmUgRVBMX1NUQUNLX1ZFUlNJT04odmVyLHJldixyZWwpICAgICAgKCgoKERXT1JEKSh2ZXIpKSAmIDB4RkYpfCgoKChEV09SRCkocmV2KSkmMHhGRik8PDgpfCgoKERXT1JEKShyZWwpKTw8MTYpKQotI2RlZmluZSBFUExfT0JKMTAxOF9WRVJTSU9OKHZlcixyZXYscmVsKSAgICAoKCgoRFdPUkQpKHZlcikpPDwxNikgfCgoKERXT1JEKShyZXYpKSYweEZGRkYpKQorI2RlZmluZSBFUExfU1RBQ0tfVkVSU0lPTih2ZXIscmV2LHJlbCkgICAgICAoKCgodTMyKSh2ZXIpKSAmIDB4RkYpfCgoKCh1MzIpKHJldikpJjB4RkYpPDw4KXwoKCh1MzIpKHJlbCkpPDwxNikpCisjZGVmaW5lIEVQTF9PQkoxMDE4X1ZFUlNJT04odmVyLHJldixyZWwpICAgICgoKCh1MzIpKHZlcikpPDwxNikgfCgoKHUzMikocmV2KSkmMHhGRkZGKSkKICNkZWZpbmUgRVBMX1NUUklOR19WRVJTSU9OKHZlcixyZXYscmVsKSAgICAgIlYiICN2ZXIgIi4iICNyZXYgIiByIiAjcmVsCiAKICNpbmNsdWRlICJFcGxWZXJzaW9uLmgiCkBAIC0yMzYsMjEgKzIzNiw2IEBACiAjZGVmaW5lIHRhYmVudHJpZXMoYSkgICAoc2l6ZW9mKGEpL3NpemVvZigqKGEpKSkKICNlbmRpZgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gZGVmaW5pdGlvbnMgZm9yIERMTCBleHBvcnQKLSNpZiAoKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pIHx8IChERVZfU1lTVEVNID09IF9ERVZfV0lOX0NFXykpICYmIGRlZmluZWQgKENPUF9MSUIpCi0KLSNkZWZpbmUgRVBMRExMRVhQT1JUICAgIF9fZGVjbHNwZWMgKGRsbGV4cG9ydCkKLQotI2Vsc2UKLQotI2RlZmluZSBFUExETExFWFBPUlQKLQotI2VuZGlmCi0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIGNvbW1vbiBkZWJ1ZyBtYWNyb3MKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5zdERlZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKaW5kZXggODllZmJmMi4uMjlhYjdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKQEAgLTcxLDYgKzcxLDggQEAKICNpZm5kZWYgX0VQTElOU1RERUZfSF8KICNkZWZpbmUgX0VQTElOU1RERUZfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyB0eXBlcyBhbmQgbWFjcm9zIGZvciBnZW5lcmF0aW5nIGluc3RhbmNlcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtODMsOCArODUsOCBAQAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10eXBlZGVmIHZvaWQgTUVNICp0RXBsUHRySW5zdGFuY2U7Ci10eXBlZGVmIEJZVEUgdEVwbEluc3RhbmNlSGRsOwordHlwZWRlZiB2b2lkICp0RXBsUHRySW5zdGFuY2U7Cit0eXBlZGVmIHU4IHRFcGxJbnN0YW5jZUhkbDsKIAogLy8gZGVmaW5lIGNvbnN0IGZvciBpbGxlZ2FsZSB2YWx1ZXMKICNkZWZpbmUgQ0NNX0lMTElOU1RBTkNFICAgICAgTlVMTApAQCAtOTksOCArMTAxLDYgQEAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBtZW1vcnkgYXR0cmlidXRlcyBmb3IgaW5zdGFuY2UgdGFibGUKLSNkZWZpbmUgSU5TVF9ORUFSCQkvLyBmYXN0ZXIgYWNjZXNzIHRvIHZhcmlhYmxlcwotI2RlZmluZSBJTlNUX0ZBUgkJLy8gdmFyaWFibGVzIHdpY2ggaGF2ZSB0byBsb2NhdGVkIGluIHhkYXRhCiAjZGVmaW5lIFNUQVRJQwkJCS8vIHByZXZlbnQgd2FybmluZ3MgZm9yIHZhcmlhYmxlcyB3aXRoIHNhbWUgbmFtZQogCiAjZGVmaW5lIElOU1RBTkNFX1RZUEVfQkVHSU4gICAgIHR5cGVkZWYgc3RydWN0IHsKQEAgLTExNywxMiArMTE3LDEyIEBACiAjZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgICAgICB0RXBsSW5zdGFuY2VIZGwgSW5zdGFuY2VIYW5kbGUsCiAKICAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIG9mIHBvaW50ZXIgdG8gaW5zdGFuY2UgaGFuZGxlIHdpdGhpbiBmdW5jdGlvbiBoZWFkZXIgb3IgcHJvdG90eXBlIG9mIEFQSSBmdW5jdGlvbnMKLSNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETCAgICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCBNRU0qIHBJbnN0YW5jZUhhbmRsZQotI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMXyAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsIE1FTSogcEluc3RhbmNlSGFuZGxlLAorI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMICAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsICpwSW5zdGFuY2VIYW5kbGUKKyNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAqcEluc3RhbmNlSGFuZGxlLAogCiAgICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiBpbnN0YW5jZSBhcyBsb2thY2wgdmFyaWFibGUgd2l0aGluIGZ1bmN0aW9ucwotI2RlZmluZSBDQ01fREVDTF9JTlNUQU5DRV9QVFJfTE9DQUwgICAgICAgICAgICAgdENjbUluc3RhbmNlSW5mbyBNRU0qIHBJbnN0YW5jZTsKLSNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF9MT0NBTCAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAgTUVNKiBwSW5zdGFuY2VIYW5kbGU7CisjZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX1BUUl9MT0NBTCAgICAgICAgICAgICB0Q2NtSW5zdGFuY2VJbmZvICpwSW5zdGFuY2U7CisjZGVmaW5lIENDTV9ERUNMX1BUUl9JTlNUQU5DRV9IRExfTE9DQUwgICAgICAgICB0RXBsSW5zdGFuY2VIZGwgICpwSW5zdGFuY2VIYW5kbGU7CiAKICAgICAvLyByZWZlcmVuY2U6CiAKQEAgLTE2MywxMCArMTYzLDEwIEBACiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGhlYWRlciwgcHJvdG90eXBlIG9yIGxvY2FsIHZhciBsaXN0Ci0gICAgLy8gRGVjbGFyYXRpb24gb2YgcG9pbnRlcnMgd2l0aGluIGZ1bmN0aW9uIHBhcmFtYXRlciBsaXN0IG11c3QgZGVmaW5lZCBhcyB2b2lkIE1FTSoKKyAgICAvLyBEZWNsYXJhdGlvbiBvZiBwb2ludGVycyB3aXRoaW4gZnVuY3Rpb24gcGFyYW1hdGVyIGxpc3QgbXVzdCBkZWZpbmVkIGFzIHZvaWQgKgogICAgIC8vIHBvaW50ZXIuCi0jZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCBNRU0qIHBJbnN0YW5jZQotI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyAgICAgICAgICAgICAgICAgIHZvaWQgTUVNKiBwSW5zdGFuY2UsCisjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCAqcEluc3RhbmNlCisjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICAgICAgdm9pZCAqcEluc3RhbmNlLAogI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMICAgICAgICAgICAgIHRFcGxQdHJJbnN0YW5jZSAgcEluc3RhbmNlOwogCiAgICAgLy8gbWFjcm9zIGZvciByZWZlcmVuY2Ugb2YgcG9pbnRlciB0byBpbnN0YW5jZQpAQCAtMTkxLDggKzE5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUICgoKHRFcGxQdHJJbnN0YW5jZSlwSW5zdGFuY2UpLT5tX0luc3RTdGF0ZSA9PSBrU3RhdGVVc2VkKTsKIAogICAgIC8vIG1hY3JvcyBmb3IgZGVjbGFyYXRpb24gb2YgcG9pbnRlciB0byBpbnN0YW5jZSBwb2ludGVyCi0jZGVmaW5lIEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgdm9pZCBNRU0qICBNRU0qIHBJbnN0YW5jZVB0cgotI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgIHZvaWQgTUVNKiAgTUVNKiBwSW5zdGFuY2VQdHIsCisjZGVmaW5lIEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgdm9pZCAqKnBJbnN0YW5jZVB0cgorI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgIHZvaWQgKipwSW5zdGFuY2VQdHIsCiAKICAgICAvLyBtYWNyb3MgZm9yIHJlZmVyZW5jZSBvZiBwb2ludGVyIHRvIGluc3RhbmNlIHBvaW50ZXIKICAgICAvLyBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5nIHRvIGNhbGxlZCBmdW5jdGlvbi4KQEAgLTIxMiwxMiArMjEyLDEyIEBACiAgICAgLy8gdGhpcyBtYWNybyBkZWxldGVzIGFsbCBpbnN0YW5jZSBlbnRyaWVzIGFzIHVudXNlZAogI2RlZmluZSBFUExfTUNPX0RFTEVURV9JTlNUQU5DRV9UQUJMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgXAotICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICAgICBJbnN0TnVtYmVyICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICAgICBpICAgICAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgXAorICAgICAgICB0RXBsSW5zdGFuY2VJbmZvICogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgICAgXAorICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICBJbnN0TnVtYmVyICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICBpICAgICAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgICAgXAogICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcEluc3RhbmNlLT5tX0luc3RTdGF0ZSA9IChCWVRFKSBrU3RhdGVVbnVzZWQ7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcEluc3RhbmNlLT5tX2JJbnN0SW5kZXggPSAoQllURSkgSW5zdE51bWJlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcEluc3RhbmNlLT5tX0luc3RTdGF0ZSA9ICh1OCkga1N0YXRlVW51c2VkOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBJbnN0YW5jZS0+bV9iSW5zdEluZGV4ID0gKHU4KSBJbnN0TnVtYmVyOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBwSW5zdGFuY2UrKzsgSW5zdE51bWJlcisrOyBpLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQpAQCAtMjMwLDggKzIzMCw4IEBACiAgICAgICAgIHN0YXRpYyB0RXBsUHRySW5zdGFuY2UgR2V0SW5zdGFuY2VQdHIgKHRFcGxJbnN0YW5jZUhkbCBJbnN0SGFuZGxlX3ApIHsgXAogICAgICAgICAgICAgcmV0dXJuICZhRXBsSW5zdGFuY2VUYWJsZV9nW0luc3RIYW5kbGVfcF07IH0gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3RhdGljIHRFcGxQdHJJbnN0YW5jZSBHZXRGcmVlSW5zdGFuY2UgKHZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICA9ICZhRXBsSW5zdGFuY2VUYWJsZV9nWzBdOyAgICAgXAotICAgICAgICAgICAgdEZhc3RCeXRlICAgICAgICAgICAgICAgaSAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRFcGxJbnN0YW5jZUluZm8gKnBJbnN0YW5jZSAgID0gJmFFcGxJbnN0YW5jZVRhYmxlX2dbMF07ICAgICAgICAgICBcCisgICAgICAgICAgICB0RmFzdEJ5dGUgICAgICAgICBpICAgICAgICAgICA9IEVQTF9NQVhfSU5TVEFOQ0VTOyAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZG8geyBpZiAocEluc3RhbmNlLT5tX0luc3RTdGF0ZSAhPSBrU3RhdGVVc2VkKSB7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0RXBsUHRySW5zdGFuY2UpIHBJbnN0YW5jZTsgfSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgcEluc3RhbmNlKys7IGktLTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjQwLDEzICsyNDAsMTMgQEAKIAogICAgIC8vIHRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgaW5zdGFuY2UgdGFibGUuIEVhY2ggZW50cnkgaXMgcmVzZXJ2ZWQgZm9yIGFuIGluc3RhbmNlIG9mIENBTm9wZW4uCiAjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKSBcCi0gICAgICAgIHN0YXRpYyB0RXBsSW5zdGFuY2VJbmZvIE1FTSBhRXBsSW5zdGFuY2VUYWJsZV9nIFtFUExfTUFYX0lOU1RBTkNFU107CisgICAgICAgIHN0YXRpYyB0RXBsSW5zdGFuY2VJbmZvIGFFcGxJbnN0YW5jZVRhYmxlX2cgW0VQTF9NQVhfSU5TVEFOQ0VTXTsKIAogICAgIC8vIHRoaXMgbWFjcm8gZGVmaW5lcyBtZW1iZXIgdmFyaWFibGVzIGluIGluc3RhbmNlIHRhYmxlIHdoaWNoIGFyZSBuZWVkZWQgaW4KICAgICAvLyBhbGwgbW9kdWxlcyBvZiBFcGwgc3RhY2sKICNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpIFwKLSAgICAgICAgU1RBVElDICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5zdFN0YXRlOyBcCi0gICAgICAgIFNUQVRJQyAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CisgICAgICAgIFNUQVRJQyAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbnN0U3RhdGU7IFwKKyAgICAgICAgU1RBVElDICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CiAKICNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTV9JRFhfKCkgICAgICAgICAgIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCiAjZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fSURYKCkgICAgICAgICAgICBFUExfTUNPX0lOU1RBTkNFX1BBUkFNIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCkBAIC0yNTQsOCArMjU0LDYgQEAKICNlbHNlIC8vIG9ubHkgb25lIGluc3RhbmNlIGlzIHVzZWQKIAogICAgIC8vIE1lbW9yeSBhdHRyaWJ1dGVzIGZvciBpbnN0YW5jZSB0YWJsZS4KLSNkZWZpbmUgSU5TVF9ORUFSICAgTkVBUgkvLyBmYXN0ZXIgYWNjZXNzIHRvIHZhcmlhYmxlcwotI2RlZmluZSBJTlNUX0ZBUiAgICBNRU0JCS8vIHZhcmlhYmxlcyB3aWNoIGhhdmUgdG8gbG9jYXRlZCBpbiB4ZGF0YQogI2RlZmluZSBTVEFUSUMgICAgICBzdGF0aWMJLy8gcHJldmVudCB3YXJuaW5ncyBmb3IgdmFyaWFibGVzIHdpdGggc2FtZSBuYW1lCiAKICNkZWZpbmUgSU5TVEFOQ0VfVFlQRV9CRUdJTgpAQCAtMzU5LDE4ICszNTcsNiBAQAogCiAjZW5kaWYKIAotLyoKLSNpZiAoQ0RSVl9NQVhfSU5TVEFOQ0VTID4gMSkKLQotICAgICNkZWZpbmUgQ0RSVl9SRUVOVFJBTlQgICAgICAgICAgICAgICAgICAgICAgICAgIFJFRU5UUkFOVAotCi0jZWxzZQotCi0gICAgI2RlZmluZSBDRFJWX1JFRU5UUkFOVAotCi0jZW5kaWYKLSovCi0KICNlbmRpZiAvLyBfRVBMSU5TVERFRl9IXwogCiAvLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10LmgKaW5kZXggNGMxMWU1Yi4uZTM1MWI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdC5oCkBAIC0xODUsNyArMTg1LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkCiAJdEVwbE5tdFN0YXRlIG1fTm10U3RhdGU7CS8vIE5NVCBzdGF0ZSAocmVtZW1iZXIgZGlzdGluZ3Vpc2ggYmV0d2VlbiBNTiAvIENOKQotCVdPUkQgbV93RXJyb3JDb2RlOwkvLyBFUEwgZXJyb3IgY29kZSBpbiBjYXNlIG9mIE5NVCBzdGF0ZSBOb3RBY3RpdmUKKwl1MTYgbV93RXJyb3JDb2RlOwkvLyBFUEwgZXJyb3IgY29kZSBpbiBjYXNlIG9mIE5NVCBzdGF0ZSBOb3RBY3RpdmUKIAogfSB0RXBsSGVhcnRiZWF0RXZlbnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10Q251LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdENudS5jCmluZGV4IGYyZjQ2ZGEuLmMyN2NhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10Q251LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXRDbnUuYwpAQCAtMTA4LDkgKzEwOCw5IEBACiAKIHN0YXRpYyB0RXBsTm10Q29tbWFuZCBFcGxObXRDbnVHZXRObXRDb21tYW5kKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCi1zdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KEJZVEUgKiBwYk5tdENvbW1hbmREYXRlX3ApOworc3RhdGljIEJPT0wgRXBsTm10Q251Tm9kZUlkTGlzdCh1OCAqIHBiTm10Q29tbWFuZERhdGVfcCk7CiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqcEZyYW1lSW5mb19wKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0xMzUsNyArMTM1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTYxLDcgKzE2MSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudUFkZEluc3RhbmNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKQordEVwbEtlcm5lbCBFcGxObXRDbnVBZGRJbnN0YW5jZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAxLDcgKzIwMSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsTm10Q251RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjM0LDkgKzIzNCw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudVNlbmRObXRSZXF1ZXN0KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgICAgIHRFcGxObXRDb21tYW5kCi0JCQkJCQkgICAgICAgTm10Q29tbWFuZF9wKQordEVwbEtlcm5lbCBFcGxObXRDbnVTZW5kTm10UmVxdWVzdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEZyYW1lSW5mbyBObXRSZXF1ZXN0RnJhbWVJbmZvOwpAQCAtMjQ5LDE1ICsyNDgsMTUgQEAKIAlFUExfTUVNU0VUKCZObXRSZXF1ZXN0RnJhbWUubV9iZV9hYlNyY01hY1swXSwgMHgwMCwgc2l6ZW9mKE5tdFJlcXVlc3RGcmFtZS5tX2JlX2FiU3JjTWFjKSk7CS8vIHNldCBieSBETEwKIAlBbWlTZXRXb3JkVG9CZSgmTm10UmVxdWVzdEZyYW1lLm1fYmVfd0V0aGVyVHlwZSwKIAkJICAgICAgIEVQTF9DX0RMTF9FVEhFUlRZUEVfRVBMKTsKLQlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fbGVfYkRzdE5vZGVJZCwgKEJZVEUpIEVQTF9DX0FEUl9NTl9ERUZfTk9ERV9JRCk7CS8vIG5vZGUgaWQgb2YgdGhlIE1OCisJQW1pU2V0Qnl0ZVRvTGUoJk5tdFJlcXVlc3RGcmFtZS5tX2xlX2JEc3ROb2RlSWQsICh1OCkgRVBMX0NfQURSX01OX0RFRl9OT0RFX0lEKTsJLy8gbm9kZSBpZCBvZiB0aGUgTU4KIAlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fbGVfYk1lc3NhZ2VUeXBlLAotCQkgICAgICAgKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCk7CisJCSAgICAgICAodTgpIGtFcGxNc2dUeXBlQXNuZCk7CiAJQW1pU2V0Qnl0ZVRvTGUoJk5tdFJlcXVlc3RGcmFtZS5tX0RhdGEubV9Bc25kLm1fbGVfYlNlcnZpY2VJZCwKLQkJICAgICAgIChCWVRFKSBrRXBsRGxsQXNuZE5tdFJlcXVlc3QpOworCQkgICAgICAgKHU4KSBrRXBsRGxsQXNuZE5tdFJlcXVlc3QpOwogCUFtaVNldEJ5dGVUb0xlKCZObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCiAJCSAgICAgICBtX05tdFJlcXVlc3RTZXJ2aWNlLm1fbGVfYk5tdENvbW1hbmRJZCwKLQkJICAgICAgIChCWVRFKSBObXRDb21tYW5kX3ApOwotCUFtaVNldEJ5dGVUb0xlKCZObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQubV9ObXRSZXF1ZXN0U2VydmljZS5tX2xlX2JUYXJnZXROb2RlSWQsIChCWVRFKSB1aU5vZGVJZF9wKTsJLy8gdGFyZ2V0IGZvciB0aGUgbm10IGNvbW1hbmQKKwkJICAgICAgICh1OCkgTm10Q29tbWFuZF9wKTsKKwlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLm1fTm10UmVxdWVzdFNlcnZpY2UubV9sZV9iVGFyZ2V0Tm9kZUlkLCAodTgpIHVpTm9kZUlkX3ApOwkvLyB0YXJnZXQgZm9yIHRoZSBubXQgY29tbWFuZAogCUVQTF9NRU1TRVQoJk5tdFJlcXVlc3RGcmFtZS5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC5tX05tdFJlcXVlc3RTZXJ2aWNlLgogCQkgICBtX2xlX2FiTm10Q29tbWFuZERhdGFbMF0sIDB4MDAsCiAJCSAgIHNpemVvZihObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCkBAIC0yOTcsOSArMjk2LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrCi0JCQkgICAgICBwZm5FcGxObXRDaGVja0V2ZW50Q2JfcCkKK3RFcGxLZXJuZWwgRXBsTm10Q251UmVnaXN0ZXJDaGVja0V2ZW50Q2IodEVwbE5tdHVDaGVja0V2ZW50Q2FsbGJhY2sgcGZuRXBsTm10Q2hlY2tFdmVudENiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTMzNSw3ICszMzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE5tdENudUNvbW1hbmRDYih0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kOwpAQCAtNjc2LDE4ICs2NzMsMTggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KEJZVEUgKiBwYk5tdENvbW1hbmREYXRlX3ApCitzdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KHU4ICogcGJObXRDb21tYW5kRGF0ZV9wKQogewogCUJPT0wgZk5vZGVJZEluTGlzdDsKIAl1bnNpZ25lZCBpbnQgdWlCeXRlT2Zmc2V0OwotCUJZVEUgYkJpdE9mZnNldDsKLQlCWVRFIGJOb2RlTGlzdEJ5dGU7CisJdTggYkJpdE9mZnNldDsKKwl1OCBiTm9kZUxpc3RCeXRlOwogCiAJLy8gZ2V0IGJ5dGUtb2Zmc2V0IG9mIHRoZSBvd24gbm9kZWlkIGluIE5vZGVJZExpc3QKIAkvLyBkZXZpZGUgdGhvdWdoIDgKIAl1aUJ5dGVPZmZzZXQgPSAodW5zaWduZWQgaW50KShFcGxObXRDbnVJbnN0YW5jZV9nLm1fdWlOb2RlSWQgPj4gMyk7CiAJLy8gZ2V0IGJpdG9mZnNldAotCWJCaXRPZmZzZXQgPSAoQllURSkgRXBsTm10Q251SW5zdGFuY2VfZy5tX3VpTm9kZUlkICUgODsKKwliQml0T2Zmc2V0ID0gKHU4KSBFcGxObXRDbnVJbnN0YW5jZV9nLm1fdWlOb2RlSWQgJSA4OwogCiAJYk5vZGVMaXN0Qnl0ZSA9IEFtaUdldEJ5dGVGcm9tTGUoJnBiTm10Q29tbWFuZERhdGVfcFt1aUJ5dGVPZmZzZXRdKTsKIAlpZiAoKGJOb2RlTGlzdEJ5dGUgJiBiQml0T2Zmc2V0KSA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdE1udS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXRNbnUuYwppbmRleCA0ZWQwYjZjLi5kMTk0MzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdE1udS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10TW51LmMKQEAgLTk0LDggKzk0LDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0yMTEsOCArMjExLDggQEAKIAl0RXBsVGltZXJIZGwgbV9UaW1lckhkbFN0YXRSZXE7CS8vIHRpbWVyIHRvIGRlbGF5IFN0YXR1c1JlcXVlc3RzIGFuZCBJZGVudFJlcXVlc3RzCiAJdEVwbFRpbWVySGRsIG1fVGltZXJIZGxMb25nZXI7CS8vIDJuZCB0aW1lciBmb3IgTk1UIGNvbW1hbmQgRW5hYmxlUmVhZHlUb09wIGFuZCBDaGVja0NvbW11bmljYXRpb24KIAl0RXBsTm10TW51Tm9kZVN0YXRlIG1fTm9kZVN0YXRlOwkvLyBpbnRlcm5hbCBub2RlIHN0YXRlIChraW5kIG9mIHN1YiBzdGF0ZSBvZiBOTVQgc3RhdGUpCi0JRFdPUkQgbV9kd05vZGVDZmc7CS8vIHN1YmluZGV4IGZyb20gMHgxRjgxCi0JV09SRCBtX3dGbGFnczsJCS8vIGZsYWdzOiBDTiBpcyBiZWluZyBhY2Nlc3NlZCBpc29jaHJvbm91c2x5CisJdTMyIG1fZHdOb2RlQ2ZnOwkvLyBzdWJpbmRleCBmcm9tIDB4MUY4MQorCXUxNiBtX3dGbGFnczsJCS8vIGZsYWdzOiBDTiBpcyBiZWluZyBhY2Nlc3NlZCBpc29jaHJvbm91c2x5CiAKIH0gdEVwbE5tdE1udU5vZGVJbmZvOwogCkBAIC0yMjQsOCArMjI0LDggQEAKIAl1bnNpZ25lZCBsb25nIG1fdWxTdGF0dXNSZXF1ZXN0RGVsYXk7CS8vIGluIFttc10gKG9iamVjdCAweDEwMDYgKiBFUExfQ19OTVRfU1RBVFJFUV9DWUNMRSkKIAl1bnNpZ25lZCBsb25nIG1fdWxUaW1lb3V0UmVhZHlUb09wOwkvLyBpbiBbbXNdIChvYmplY3QgMHgxRjg5LzUpCiAJdW5zaWduZWQgbG9uZyBtX3VsVGltZW91dENoZWNrQ29tOwkvLyBpbiBbbXNdIChvYmplY3QgMHgxMDA2ICogTXVsdGlwbGV4ZWRDeWNsZUNvdW50KQotCVdPUkQgbV93RmxhZ3M7CQkvLyBnbG9iYWwgZmxhZ3MKLQlEV09SRCBtX2R3Tm10U3RhcnR1cDsJLy8gb2JqZWN0IDB4MUY4MCBOTVRfU3RhcnRVcF9VMzIKKwl1MTYgbV93RmxhZ3M7CQkvLyBnbG9iYWwgZmxhZ3MKKwl1MzIgbV9kd05tdFN0YXJ0dXA7CS8vIG9iamVjdCAweDFGODAgTk1UX1N0YXJ0VXBfVTMyCiAJdEVwbE5tdE1udUNiTm9kZUV2ZW50IG1fcGZuQ2JOb2RlRXZlbnQ7CiAJdEVwbE5tdE1udUNiQm9vdEV2ZW50IG1fcGZuQ2JCb290RXZlbnQ7CiAKQEAgLTI0MSwyMCArMjQxLDE4IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxJZGVudFJlc3BvbnNlICoKLQkJCQkJCSAgcElkZW50UmVzcG9uc2VfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgIHRFcGxJZGVudFJlc3BvbnNlICpwSWRlbnRSZXNwb25zZV9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiU3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgICB0RXBsU3RhdHVzUmVzcG9uc2UgKgotCQkJCQkJICAgcFN0YXR1c1Jlc3BvbnNlX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqcFN0YXR1c1Jlc3BvbnNlX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDaGVja05tdFN0YXRlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkgdEVwbE5tdE1udU5vZGVJbmZvICogcE5vZGVJbmZvX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCSBXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJIHUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTG9jYWxObXRTdGF0ZV9wKTsKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51U3RhcnRCb290U3RlcDEodm9pZCk7CkBAIC0yNzMsNyArMjcxLDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQl0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCQlXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJCXUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCQl0RXBsTm10TW51SW50Tm9kZUV2ZW50CiAJCQkJCQlOb2RlRXZlbnRfcCk7CiAKQEAgLTM4MCw3ICszNzgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsTm10TW51RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxObXRNbnVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00MTksNyArNDE3LDcgQEAKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxGcmFtZUluZm8gRnJhbWVJbmZvOwotCUJZVEUgYWJCdWZmZXJbRVBMX0NfRExMX01JTlNJWkVfTk1UQ01ERVhUXTsKKwl1OCBhYkJ1ZmZlcltFUExfQ19ETExfTUlOU0laRV9OTVRDTURFWFRdOwogCXRFcGxGcmFtZSAqcEZyYW1lID0gKHRFcGxGcmFtZSAqKSBhYkJ1ZmZlcjsKIAlCT09MIGZTb2Z0RGVsZXRlTm9kZSA9IEZBTFNFOwogCkBAIC00MzksMTEgKzQzNywxMSBAQAogCiAJLy8gYnVpbGQgZnJhbWUKIAlFUExfTUVNU0VUKHBGcmFtZSwgMHgwMCwgc2l6ZW9mKGFiQnVmZmVyKSk7Ci0JQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLCAoQllURSkgdWlOb2RlSWRfcCk7CisJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLCAodTgpIHVpTm9kZUlkX3ApOwogCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWUtPm1fRGF0YS5tX0FzbmQubV9sZV9iU2VydmljZUlkLAotCQkgICAgICAgKEJZVEUpIGtFcGxEbGxBc25kTm10Q29tbWFuZCk7CisJCSAgICAgICAodTgpIGtFcGxEbGxBc25kTm10Q29tbWFuZCk7CiAJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9EYXRhLm1fQXNuZC5tX1BheWxvYWQubV9ObXRDb21tYW5kU2VydmljZS4KLQkJICAgICAgIG1fbGVfYk5tdENvbW1hbmRJZCwgKEJZVEUpIE5tdENvbW1hbmRfcCk7CisJCSAgICAgICBtX2xlX2JObXRDb21tYW5kSWQsICh1OCkgTm10Q29tbWFuZF9wKTsKIAlpZiAoKHBObXRDb21tYW5kRGF0YV9wICE9IE5VTEwpICYmICh1aURhdGFTaXplX3AgPiAwKSkgewkvLyBjb3B5IGNvbW1hbmQgZGF0YSB0byBmcmFtZQogCQlFUExfTUVNQ1BZKCZwRnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLm1fTm10Q29tbWFuZFNlcnZpY2UuCiAJCQkgICBtX2xlX2FiTm10Q29tbWFuZERhdGFbMF0sIHBObXRDb21tYW5kRGF0YV9wLApAQCAtNTc0LDggKzU3Miw4IEBACiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10TW51SW50Tm9kZUV2ZW50IE5vZGVFdmVudDsKIAl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCUJZVEUgYk5tdFN0YXRlOwotCVdPUkQgd0Vycm9yQ29kZSA9IEVQTF9FX05PX0VSUk9SOworCXU4IGJObXRTdGF0ZTsKKwl1MTYgd0Vycm9yQ29kZSA9IEVQTF9FX05PX0VSUk9SOwogCiAJaWYgKCh1aU5vZGVJZF9wID09IDApIHx8ICh1aU5vZGVJZF9wID49IEVQTF9DX0FEUl9CUk9BRENBU1QpKSB7CiAJCVJldCA9IGtFcGxJbnZhbGlkTm9kZUlkOwpAQCAtNjQ1LDggKzY0Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZQotCQkJCQkgICAgTm10U3RhdGVDaGFuZ2VfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTY3Niw3ICs2NzMsNyBAQAogCQkvLyBidWlsZCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGluZm9zIGZyb20gT0QKIAljYXNlIGtFcGxObXRHc1Jlc2V0Q29uZmlndXJhdGlvbjoKIAkJewotCQkJRFdPUkQgZHdUaW1lb3V0OworCQkJdTMyIGR3VGltZW91dDsKIAkJCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAkJCS8vIHJlYWQgb2JqZWN0IDB4MUY4MCBOTVRfU3RhcnRVcF9VMzIKQEAgLTc4OCw3ICs3ODUsNyBAQAogCQkvLyBub2RlIHByb2Nlc3NlcyBvbmx5IGFzeW5jIGZyYW1lcwogCWNhc2Uga0VwbE5tdE1zUHJlT3BlcmF0aW9uYWwxOgogCQl7Ci0JCQlEV09SRCBkd1RpbWVvdXQ7CisJCQl1MzIgZHdUaW1lb3V0OwogCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCQkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAkJCXRFcGxFdmVudCBFdmVudDsKQEAgLTkyOCw3ICs5MjUsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JDaGVja0V2ZW50KHRFcGxObXRFdmVudCBObXRFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTk0OSw3ICs5NDYsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC05NzAsNyArOTY3LDcgQEAKIAkJCQkJICAgRVBMX05NVE1OVV9USU1FUkFSR19OT0RFX01BU0spOwogCQkJaWYgKHVpTm9kZUlkICE9IDApIHsKIAkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCQkJCUJZVEUgYk5tdFN0YXRlOworCQkJCXU4IGJObXRTdGF0ZTsKIAkJCQl0RXBsTm10TW51Tm9kZUluZm8gKnBOb2RlSW5mbzsKIAogCQkJCXBOb2RlSW5mbyA9IEVQTF9OTVRNTlVfR0VUX05PREVJTkZPKHVpTm9kZUlkKTsKQEAgLTExNTAsNyArMTE0Nyw3IEBACiAJCQl0RXBsRnJhbWUgKnBGcmFtZSA9ICh0RXBsRnJhbWUgKikgcEV2ZW50X3AtPm1fcEFyZzsKIAkJCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKIAkJCXRFcGxObXRDb21tYW5kIE5tdENvbW1hbmQ7Ci0JCQlCWVRFIGJObXRTdGF0ZTsKKwkJCXU4IGJObXRTdGF0ZTsKIAogCQkJdWlOb2RlSWQgPSBBbWlHZXRCeXRlRnJvbUxlKCZwRnJhbWUtPm1fbGVfYkRzdE5vZGVJZCk7CiAJCQlObXRDb21tYW5kID0KQEAgLTExNjIsMzAgKzExNTksMzAgQEAKIAkJCXN3aXRjaCAoTm10Q29tbWFuZCkgewogCQkJY2FzZSBrRXBsTm10Q21kU3RhcnROb2RlOgogCQkJCWJObXRTdGF0ZSA9Ci0JCQkJICAgIChCWVRFKSAoa0VwbE5tdENzT3BlcmF0aW9uYWwgJiAweEZGKTsKKwkJCQkgICAgKHU4KSAoa0VwbE5tdENzT3BlcmF0aW9uYWwgJiAweEZGKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBrRXBsTm10Q21kU3RvcE5vZGU6Ci0JCQkJYk5tdFN0YXRlID0gKEJZVEUpIChrRXBsTm10Q3NTdG9wcGVkICYgMHhGRik7CisJCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzU3RvcHBlZCAmIDB4RkYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIGtFcGxObXRDbWRFbnRlclByZU9wZXJhdGlvbmFsMjoKIAkJCQliTm10U3RhdGUgPQotCQkJCSAgICAoQllURSkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMiAmIDB4RkYpOworCQkJCSAgICAodTgpIChrRXBsTm10Q3NQcmVPcGVyYXRpb25hbDIgJiAweEZGKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBrRXBsTm10Q21kRW5hYmxlUmVhZHlUb09wZXJhdGU6CiAJCQkJLy8gZC5rLiBkbyBub3QgY2hhbmdlIGV4cGVjdGVkIG5vZGUgc3RhdGUsIGJlY2F1c2Ugb2YgRFMgMS4wLjAgNy4zLjEuMi4xIFBsYWluIE5NVCBTdGF0ZSBDb21tYW5kCiAJCQkJLy8gICAgICBhbmQgYmVjYXVzZSBub2RlIG1heSBub3QgY2hhbmdlIE5NVCBzdGF0ZSB3aXRoaW4gRVBMX0NfTk1UX1NUQVRFX1RPTEVSQU5DRQogCQkJCWJObXRTdGF0ZSA9Ci0JCQkJICAgIChCWVRFKSAoa0VwbE5tdENzUHJlT3BlcmF0aW9uYWwyICYgMHhGRik7CisJCQkJICAgICh1OCkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMiAmIDB4RkYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIGtFcGxObXRDbWRSZXNldE5vZGU6CiAJCQljYXNlIGtFcGxObXRDbWRSZXNldENvbW11bmljYXRpb246CiAJCQljYXNlIGtFcGxObXRDbWRSZXNldENvbmZpZ3VyYXRpb246CiAJCQljYXNlIGtFcGxObXRDbWRTd1Jlc2V0OgotCQkJCWJObXRTdGF0ZSA9IChCWVRFKSAoa0VwbE5tdENzTm90QWN0aXZlICYgMHhGRik7CisJCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzTm90QWN0aXZlICYgMHhGRik7CiAJCQkJLy8gRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQoKSBzZXRzIGludGVybmFsIG5vZGUgc3RhdGUgdG8ga0VwbE5tdE1udU5vZGVTdGF0ZVVua25vd24KIAkJCQkvLyBhZnRlciBuZXh0IHVucmVzcG9uZGVkIElkZW50UmVxdWVzdC9TdGF0dXNSZXF1ZXN0CiAJCQkJYnJlYWs7CkBAIC0xMjU4LDExICsxMjU1LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbyh1bnNpZ25lZCBpbnQKLQkJCQkJICAgICAqcHVpTWFuZGF0b3J5U2xhdmVDb3VudF9wLAotCQkJCQkgICAgIHVuc2lnbmVkIGludAotCQkJCQkgICAgICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCi0JCQkJCSAgICAgV09SRCAqIHB3RmxhZ3NfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51R2V0RGlhZ25vc3RpY0luZm8odW5zaWduZWQgaW50ICpwdWlNYW5kYXRvcnlTbGF2ZUNvdW50X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCisJCQkJICAgICAgdTE2ICpwd0ZsYWdzX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTI5Niw3ICsxMjkxLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyoKLURXT1JEIEVwbE5tdE1udUdldFJ1bm5pbmdUaW1lclN0YXRSZXEodm9pZCkKK3UzMiBFcGxObXRNbnVHZXRSdW5uaW5nVGltZXJTdGF0UmVxKHZvaWQpCiB7CiB0RXBsS2VybmVsICAgICAgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiB1bnNpZ25lZCBpbnQgICAgdWlJbmRleDsKQEAgLTEzNDcsNyArMTM0Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiTm10UmVxdWVzdCh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0xMzcxLDkgKzEzNjYsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxJZGVudFJlc3BvbnNlICoKLQkJCQkJCSAgcElkZW50UmVzcG9uc2VfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE5tdE1udUNiSWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgdEVwbElkZW50UmVzcG9uc2UgKnBJZGVudFJlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTM4Miw4ICsxMzc2LDggQEAKIAkJCQkJCSAgICBrRXBsTm10TW51SW50Tm9kZUV2ZW50Tm9JZGVudFJlc3BvbnNlKTsKIAl9IGVsc2UgewkJLy8gbm9kZSBhbnN3ZXJlZCBJZGVudFJlcXVlc3QKIAkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQkJRFdPUkQgZHdEZXZUeXBlOwotCQlXT1JEIHdFcnJvckNvZGUgPSBFUExfRV9OT19FUlJPUjsKKwkJdTMyIGR3RGV2VHlwZTsKKwkJdTE2IHdFcnJvckNvZGUgPSBFUExfRV9OT19FUlJPUjsKIAkJdEVwbE5tdFN0YXRlIE5tdFN0YXRlID0KIAkJICAgICh0RXBsTm10U3RhdGUpIChBbWlHZXRCeXRlRnJvbUxlCiAJCQkJICAgICgmcElkZW50UmVzcG9uc2VfcC0+CkBAIC0xNDMxLDkgKzE0MjUsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYlN0YXR1c1Jlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgdEVwbFN0YXR1c1Jlc3BvbnNlICoKLQkJCQkJCSAgIHBTdGF0dXNSZXNwb25zZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqcFN0YXR1c1Jlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTQ3Myw3ICsxNDY2LDcgQEAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aVN1YkluZGV4OwogCXVuc2lnbmVkIGludCB1aUxvY2FsTm9kZUlkOwotCURXT1JEIGR3Tm9kZUNmZzsKKwl1MzIgZHdOb2RlQ2ZnOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAkvLyAkJCQgZC5rLjogc2F2ZSBjdXJyZW50IHRpbWUgZm9yIDB4MUY4OS8yIE1OVGltZW91dFByZU9wMV9VMzIKQEAgLTE2MzMsNyArMTYyNiw3IEBACiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsRGxsTm9kZUluZm8gRGxsTm9kZUluZm87Ci0JRFdPUkQgZHdOb2RlQ2ZnOworCXUzMiBkd05vZGVDZmc7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAl0RXBsVGltZXJBcmcgVGltZXJBcmc7CiAKQEAgLTE3ODIsNyArMTc3NSw3IEBACiAJCQkJCXRFcGxObXRNbnVOb2RlSW5mbyAqIHBOb2RlSW5mb19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JRFdPUkQgZHdOb2RlQ2ZnOworCXUzMiBkd05vZGVDZmc7CiAJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCiAJZHdOb2RlQ2ZnID0gcE5vZGVJbmZvX3AtPm1fZHdOb2RlQ2ZnOwpAQCAtMTkxNiw3ICsxOTA5LDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQl0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCQlXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJCXUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCQl0RXBsTm10TW51SW50Tm9kZUV2ZW50CiAJCQkJCQlOb2RlRXZlbnRfcCkKIHsKQEAgLTE5MzQsNyArMTkyNyw3IEBACiAJc3dpdGNoIChOb2RlRXZlbnRfcCkgewogCWNhc2Uga0VwbE5tdE1udUludE5vZGVFdmVudElkZW50UmVzcG9uc2U6CiAJCXsKLQkJCUJZVEUgYk5tdFN0YXRlOworCQkJdTggYk5tdFN0YXRlOwogCiAJCQlFUExfTk1UTU5VX0RCR19QT1NUX1RSQUNFX1ZBTFVFKE5vZGVFdmVudF9wLAogCQkJCQkJCXVpTm9kZUlkX3AsCkBAIC0xOTYxLDcgKzE5NTQsNyBAQAogCQkJCSAgICB+RVBMX05NVE1OVV9OT0RFX0ZMQUdfTk9UX1NDQU5ORUQ7CiAJCQl9CiAJCQkvLyB1cGRhdGUgb2JqZWN0IDB4MUY4RiBOTVRfTU5Ob2RlRXhwU3RhdGVfQVU4IHRvIFByZU9wMSAoZXZlbiBpZiBsb2NhbCBzdGF0ZSA+PSBQcmVPcDIpCi0JCQliTm10U3RhdGUgPSAoQllURSkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMSAmIDB4RkYpOworCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzUHJlT3BlcmF0aW9uYWwxICYgMHhGRik7CiAJCQlSZXQgPQogCQkJICAgIEVwbE9iZHVXcml0ZUVudHJ5KDB4MUY4RiwgdWlOb2RlSWRfcCwgJmJObXRTdGF0ZSwKIAkJCQkJICAgICAgMSk7CkBAIC0yNDQxLDExICsyNDM0LDExIEBACiAKIAljYXNlIGtFcGxObXRNbnVJbnROb2RlRXZlbnRObXRDbWRTZW50OgogCQl7Ci0JCQlCWVRFIGJObXRTdGF0ZTsKKwkJCXU4IGJObXRTdGF0ZTsKIAogCQkJLy8gdXBkYXRlIGV4cGVjdGVkIE5NVCBzdGF0ZSB3aXRoIHRoZSBvbmUgdGhhdCByZXN1bHRzCiAJCQkvLyBmcm9tIHRoZSBzZW50IE5NVCBjb21tYW5kCi0JCQliTm10U3RhdGUgPSAoQllURSkgKE5vZGVObXRTdGF0ZV9wICYgMHhGRik7CisJCQliTm10U3RhdGUgPSAodTgpIChOb2RlTm10U3RhdGVfcCAmIDB4RkYpOwogCiAJCQkvLyB3cml0ZSBvYmplY3QgMHgxRjhGIE5NVF9NTk5vZGVFeHBTdGF0ZV9BVTgKIAkJCVJldCA9CkBAIC0yNjMwLDEzICsyNjIzLDEzIEBACiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDaGVja05tdFN0YXRlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkgdEVwbE5tdE1udU5vZGVJbmZvICogcE5vZGVJbmZvX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCSBXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJIHUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTG9jYWxObXRTdGF0ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJObXRTdGF0ZTsKLQlCWVRFIGJObXRTdGF0ZVByZXY7CisJdTggYk5tdFN0YXRlOworCXU4IGJObXRTdGF0ZVByZXY7CiAJdEVwbE5tdFN0YXRlIEV4cE5tdFN0YXRlOwogCiAJT2JkU2l6ZSA9IDE7CkBAIC0yNjQ3LDggKzI2NDAsOCBAQAogCX0KIAkvLyBjb21wdXRlIGV4cGVjdGVkIE5NVCBzdGF0ZQogCUV4cE5tdFN0YXRlID0gKHRFcGxObXRTdGF0ZSkgKGJObXRTdGF0ZSB8IEVQTF9OTVRfVFlQRV9DUyk7Ci0JLy8gY29tcHV0ZSBCWVRFIG9mIGN1cnJlbnQgTk1UIHN0YXRlCi0JYk5tdFN0YXRlID0gKChCWVRFKSBOb2RlTm10U3RhdGVfcCAmIDB4RkYpOworCS8vIGNvbXB1dGUgdTggb2YgY3VycmVudCBOTVQgc3RhdGUKKwliTm10U3RhdGUgPSAoKHU4KSBOb2RlTm10U3RhdGVfcCAmIDB4RkYpOwogCiAJaWYgKEV4cE5tdFN0YXRlID09IGtFcGxObXRDc05vdEFjdGl2ZSkgewkvLyBpZ25vcmUgdGhlIGN1cnJlbnQgc3RhdGUsIGJlY2F1c2UgdGhlIENOIHNoYWxsIGJlIG5vdCBhY3RpdmUKIAkJUmV0ID0ga0VwbFJlamVjdDsKQEAgLTI3MDYsNyArMjY5OSw3IEBACiAJfSBlbHNlIGlmICgoRXhwTm10U3RhdGUgIT0gTm9kZU5tdFN0YXRlX3ApCiAJCSAgICYmICEoKEV4cE5tdFN0YXRlID09IGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMSkKIAkJCSYmIChOb2RlTm10U3RhdGVfcCA9PSBrRXBsTm10Q3NQcmVPcGVyYXRpb25hbDIpKSkgewkvLyBDTiBpcyBub3QgaW4gZXhwZWN0ZWQgTk1UIHN0YXRlICh3aXRob3V0IHRoZSBleGNlcHRpb25zIGFib3ZlKQotCQlXT1JEIHdiZUVycm9yQ29kZTsKKwkJdTE2IHdiZUVycm9yQ29kZTsKIAogCQlpZiAoKHBOb2RlSW5mb19wLT4KIAkJICAgICBtX3dGbGFncyAmIEVQTF9OTVRNTlVfTk9ERV9GTEFHX05PVF9TQ0FOTkVEKSAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCmluZGV4IDRlMmQwZTEuLjYwOWQ1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCkBAIC04OCw4ICs4OCw4IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2RlZmluZSBUR1RfREJHX1BPU1RfVFJBQ0VfVkFMVUUodikgICAgIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHYpCiAjZWxzZQpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIC8vIHN0cnVjdCBmb3IgaW5zdGFuY2UgdGFibGUKIElOU1RBTkNFX1RZUEVfQkVHSU4gRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpCiAKLVNUQVRJQyB2b2xhdGlsZSB0RXBsTm10U3RhdGUgSU5TVF9GQVIgbV9ObXRTdGF0ZTsKLVNUQVRJQyB2b2xhdGlsZSBCT09MIElOU1RfRkFSIG1fZkVuYWJsZVJlYWR5VG9PcGVyYXRlOwotU1RBVElDIHZvbGF0aWxlIEJPT0wgSU5TVF9GQVIgbV9mQXBwUmVhZHlUb09wZXJhdGU7Ci1TVEFUSUMgdm9sYXRpbGUgQk9PTCBJTlNUX0ZBUiBtX2ZUaW1lck1zUHJlT3AyOwotU1RBVElDIHZvbGF0aWxlIEJPT0wgSU5TVF9GQVIgbV9mQWxsTWFuZGF0b3J5Q05JZGVudDsKLVNUQVRJQyB2b2xhdGlsZSBCT09MIElOU1RfRkFSIG1fZkZyb3plbjsKK1NUQVRJQyB2b2xhdGlsZSB0RXBsTm10U3RhdGUgbV9ObXRTdGF0ZTsKK1NUQVRJQyB2b2xhdGlsZSBCT09MIG1fZkVuYWJsZVJlYWR5VG9PcGVyYXRlOworU1RBVElDIHZvbGF0aWxlIEJPT0wgbV9mQXBwUmVhZHlUb09wZXJhdGU7CitTVEFUSUMgdm9sYXRpbGUgQk9PTCBtX2ZUaW1lck1zUHJlT3AyOworU1RBVElDIHZvbGF0aWxlIEJPT0wgbV9mQWxsTWFuZGF0b3J5Q05JZGVudDsKK1NUQVRJQyB2b2xhdGlsZSBCT09MIG1fZkZyb3plbjsKIAogSU5TVEFOQ0VfVFlQRV9FTkQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjEsNyArMTIxLDcgQEAKIC8vIFRoaXMgbWFjcm8gcmVwbGFjZSB0aGUgdW5zcGVjaWZpYyBwb2ludGVyIHRvIGFuIGluc3RhbmNlIHRocm91Z2gKIC8vIHRoZSBtb2R1bCBzcGVjaWZpYyB0eXBlIGZvciB0aGUgbG9jYWwgaW5zdGFuY2UgdGFibGUuIFRoaXMgbWFjcm8KIC8vIG11c3QgZGVmaW5lZCBpbiBlYWNoIG1vZHVsLgotLy8jZGVmaW5lIHRFcGxQdHJJbnN0YW5jZSAgICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSoKKy8vI2RlZmluZSB0RXBsUHRySW5zdGFuY2UgICAgICAgICAgICAgdEVwbEluc3RhbmNlSW5mbyoKIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTE2Myw3ICsxNjMsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrSW5pdChFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsTm10a0luaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE4OSw3ICsxODksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrQWRkSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCit0RXBsS2VybmVsIEVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKIHsKIAlFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMIHRFcGxLZXJuZWwgUmV0OwogLy90RXBsRXZlbnQgICAgICAgICAgICAgICBFdmVudDsKQEAgLTI1OCw3ICsyNTgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgKEVQTF9VU0VfREVMRVRFSU5TVF9GVU5DICE9IEZBTFNFKQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtEZWxJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJLy8gY2hlY2sgZm9yIGFsbCBBUEkgZnVuY3Rpb24gaWYgaW5zdGFuY2UgaXMgdmFsaWQKQEAgLTI5Niw4ICsyOTYsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrUHJvY2VzcyhFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgdEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsRXZlbnQgKnBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxObXRTdGF0ZSBPbGRObXRTdGF0ZTsKQEAgLTE4MDQsOCArMTgwMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMKLUVwbE5tdGtHZXRObXRTdGF0ZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxObXRTdGF0ZSBFcGxObXRrR2V0Tm10U3RhdGUoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdGtDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCmluZGV4IDRhZDcxYTcuLjQ0NTNjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCkBAIC02OSw4ICs2OSw2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJrZXJuZWwvRXBsTm10a0NhbC5oIgotCiAvLyBUT0RPOiBpbml0IGZ1bmN0aW9uIG5lZWRlZCB0byBwcmVwYXJlIEVwbE5tdGtHZXRObXRTdGF0ZSBmb3IKIC8vICAgICAgIGlvLWNvbnRyb2xsLWNhbGwgZnJvbSBFcGxObXR1Q2FsLU1vZHVsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10dS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKaW5kZXggM2RlMTZhMS4uOWFjMmU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1SW5pdCgpCit0RXBsS2VybmVsIEVwbE5tdHVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1QWRkSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxObXR1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTg3LDcgKzE4Nyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbE5tdHVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMTksNyArMjE5LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dU5tdEV2ZW50KHRFcGxObXRFdmVudCBObXRFdmVudF9wKQordEVwbEtlcm5lbCBFcGxObXR1Tm10RXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEV2ZW50IEV2ZW50OwpAQCAtMjUzLDcgKzI1Myw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10dUdldE5tdFN0YXRlKCkKK3RFcGxObXRTdGF0ZSBFcGxObXR1R2V0Tm10U3RhdGUodm9pZCkKIHsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CiAKQEAgLTI4NCw3ICsyODQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKQordEVwbEtlcm5lbCBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTM4Miw3ICszODIsNyBAQAogCQkJCQkvLyBub2RlIGxpc3RlbnMgZm9yIEVQTC1GcmFtZXMgYW5kIGNoZWNrIHRpbWVvdXQKIAkJCQljYXNlIGtFcGxObXRDc05vdEFjdGl2ZToKIAkJCQkJewotCQkJCQkJRFdPUkQgZHdCdWZmZXI7CisJCQkJCQl1MzIgZHdCdWZmZXI7CiAJCQkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwogCQkJCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCkBAIC00NzUsNyArNDc1LDcgQEAKIAkJCQkJLy8gbm9kZSBsaXN0ZW5zIGZvciBFUEwtRnJhbWVzIGFuZCBjaGVjayB0aW1lb3V0CiAJCQkJY2FzZSBrRXBsTm10TXNOb3RBY3RpdmU6CiAJCQkJCXsKLQkJCQkJCURXT1JEIGR3QnVmZmVyOworCQkJCQkJdTMyIGR3QnVmZmVyOwogCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAkJCQkJCXRFcGxUaW1lckFyZyBUaW1lckFyZzsKIApAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQkJCS8vIG5vZGUgcHJvY2Vzc2VzIG9ubHkgYXN5bmMgZnJhbWVzCiAJCQkJY2FzZSBrRXBsTm10TXNQcmVPcGVyYXRpb25hbDE6CiAJCQkJCXsKLQkJCQkJCURXT1JEIGR3QnVmZmVyID0gMDsKKwkJCQkJCXUzMiBkd0J1ZmZlciA9IDA7CiAJCQkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwogCQkJCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCkBAIC02NjQsOSArNjY0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdHVSZWdpc3RlclN0YXRlQ2hhbmdlQ2IodEVwbE5tdHVTdGF0ZUNoYW5nZUNhbGxiYWNrCi0JCQkgICAgIHBmbkVwbE5tdFN0YXRlQ2hhbmdlQ2JfcCkKK3RFcGxLZXJuZWwgRXBsTm10dVJlZ2lzdGVyU3RhdGVDaGFuZ2VDYih0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuRXBsTm10U3RhdGVDaGFuZ2VDYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10dUNhbC5jCmluZGV4IDRhMjllZjUuLjkyMTY0YzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10a0NhbEdldE5tdFN0YXRlKCkKK3RFcGxObXRTdGF0ZSBFcGxObXRrQ2FsR2V0Tm10U3RhdGUodm9pZCkKIHsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CiAJLy8gZm9yIHRlc3QgZGlyZWt0IGNhbGwgZm9yIEVwbE5tdGtHZXRObXRTdGF0ZSgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmQuYwppbmRleCBlZmJiMTk2Li4xZTQ2MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkLmMKQEAgLTEwMSw4ICsxMDEsOCBAQAogLy8gc3RydWN0IGZvciBpbnN0YW5jZSB0YWJsZQogSU5TVEFOQ0VfVFlQRV9CRUdJTiBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfTUVNQkVSKCkKIAotU1RBVElDIHRFcGxPYmRJbml0UGFyYW0gSU5TVF9GQVIgbV9PYmRJbml0UGFyYW07Ci1TVEFUSUMgdEVwbE9iZFN0b3JlTG9hZE9iakNhbGxiYWNrIElOU1RfTkVBUiBtX2ZwU3RvcmVMb2FkT2JqQ2FsbGJhY2s7CitTVEFUSUMgdEVwbE9iZEluaXRQYXJhbSBtX09iZEluaXRQYXJhbTsKK1NUQVRJQyB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2sgbV9mcFN0b3JlTG9hZE9iakNhbGxiYWNrOwogCiBJTlNUQU5DRV9UWVBFX0VORAogLy8gZGVjb21wb3NpdGlvbiBvZiBmbG9hdApAQCAtMTE5LDExICsxMTksMTEgQEAKIC8vIFRoaXMgbWFjcm8gcmVwbGFjZSB0aGUgdW5zcGVjaWZpYyBwb2ludGVyIHRvIGFuIGluc3RhbmNlIHRocm91Z2gKIC8vIHRoZSBtb2R1bCBzcGVjaWZpYyB0eXBlIGZvciB0aGUgbG9jYWwgaW5zdGFuY2UgdGFibGUuIFRoaXMgbWFjcm8KIC8vIG11c3QgZGVmaW5lZCBpbiBlYWNoIG1vZHVsLgotLy8jZGVmaW5lIHRFcGxQdHJJbnN0YW5jZSAgICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSoKKy8vI2RlZmluZSB0RXBsUHRySW5zdGFuY2UgICAgICAgICAgICAgdEVwbEluc3RhbmNlSW5mbyAqCiAKIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKQogCi1CWVRFIE1FTSBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07Cit1OCBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbE9iamVjdENhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJCSAgIHRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrX3AsCi0JCQkJCSAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3ApOworCQkJCQkgICB0RXBsT2JkQ2JQYXJhbSAqcENiUGFyYW1fcCk7CiAKIHN0YXRpYyB0RXBsT2JkU2l6ZSBFcGxPYmRHZXREYXRhU2l6ZUludGVybih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldFZhckVudHJ5KHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViaW5kZXhFbnRyeV9wLAotCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgTUVNICoqIHBwVmFyRW50cnlfcCk7CisJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSAqKnBwVmFyRW50cnlfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogc3RhdGljIHRFcGxPYmRTaXplIEVwbE9iZEdldE9iamVjdFNpemUodEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJJbmRleEVudHJ5X3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRHZXRJbmRleEludGVybih0RXBsT2JkSW5pdFBhcmFtIE1FTSAqIHBJbml0UGFyYW1fcCwKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldEluZGV4SW50ZXJuKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKIAkJCQkgICAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wKTsKIApAQCAtMTcwLDE3ICsxNzAsMTUgQEAKIAkJCQkJICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7CiAKIHN0YXRpYyB2b2lkICpFcGxPYmRHZXRPYmplY3REZWZhdWx0UHRyKHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViSW5kZXhFbnRyeV9wKTsKLXN0YXRpYyB2b2lkIE1FTSAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CitzdGF0aWMgdm9pZCAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CiAKICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICB0RXBsT2JkQ2JTdG9yZVBhcmFtIE1FTSAqCi0JCQkJCSAgcENiU3RvcmVQYXJhbV9wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZENhbGxTdG9yZUNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRDYlN0b3JlUGFyYW0gKnBDYlN0b3JlUGFyYW1fcCk7CiAKICNlbmRpZiAvLyAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAotc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCBNRU0gKiBwRHN0RGF0YV9wLAorc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCAqcERzdERhdGFfcCwKIAkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKIAkJCQkgdEVwbE9iZFNpemUgT2JqU2l6ZV9wLCB0RXBsT2JkVHlwZSBPYmpUeXBlX3ApOwogCkBAIC0xODksMjQgKzE4NywyMiBAQAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkSXNOdW1lcmljYWxJbnRlcm4odEVwbE9iZFN1YkVudHJ5UHRyIHBPYmRTdWJFbnRyeV9wLAogCQkJCQkgIEJPT0wgKiBwZkVudHJ5TnVtZXJpY2FsX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVByZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgICAgIHZvaWQgKipwcERzdERhdGFfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCi0JCQkJCSAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wLAotCQkJCQkgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciAqIHBwU3ViRW50cnlfcCwKLQkJCQkJICAgICB0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwQ2JQYXJhbV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplICogcE9iZFNpemVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5UHJlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgIHZvaWQgKipwcERzdERhdGFfcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCisJCQkJICAgICAgdEVwbE9iZEVudHJ5UHRyICpwcE9iZEVudHJ5X3AsCisJCQkJICAgICAgdEVwbE9iZFN1YkVudHJ5UHRyICpwcFN1YkVudHJ5X3AsCisJCQkJICAgICAgdEVwbE9iZENiUGFyYW0gKnBDYlBhcmFtX3AsCisJCQkJICAgICAgdEVwbE9iZFNpemUgKnBPYmRTaXplX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVBvc3QoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeV9wLAotCQkJCQkgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5X3AsCi0JCQkJCSAgICAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5UG9zdChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5X3AsCisJCQkJICAgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnlfcCwKKwkJCQkgICAgICAgdEVwbE9iZENiUGFyYW0gKnBDYlBhcmFtX3AsCisJCQkJICAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCisJCQkJICAgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjI4LDggKzIyNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgdEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfIHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwpAQCAtMjYxLDkgKzI1Niw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHRFcGxPYmRJbml0UGFyYW0gTUVNICoKLQkJCQkJCSBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3ApCiB7CiAKIAlFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMIHRFcGxLZXJuZWwgUmV0OwpAQCAtMzA4LDcgKzMwMSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoRVBMX1VTRV9ERUxFVEVJTlNUX0ZVTkMgIT0gRkFMU0UpCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUikKIHsKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZAogCUVQTF9NQ09fQ0hFQ0tfSU5TVEFOQ0VfU1RBVEUoKTsKQEAgLTM0MSwxOCArMzM0LDE2IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCXVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplIFNpemVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOwotCXZvaWQgTUVNICpwRHN0RGF0YTsKKwl0RXBsT2JkQ2JQYXJhbSBDYlBhcmFtOworCXZvaWQgKnBEc3REYXRhOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAlSZXQgPSBFcGxPYmRXcml0ZUVudHJ5UHJlKEVQTF9NQ09fSU5TVEFOQ0VfUFRSXwpAQCAtNDAyLDE3ICszOTMsMTUgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkUmVhZEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgIHZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CiAJdm9pZCAqcFNyY0RhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIApAQCAtNDg3LDkgKzQ3Niw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCi0JCQkJCQkgIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApCit0RXBsS2VybmVsIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkgICAgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKQEAgLTU4NywxMiArNTc1LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZERlZmluZVZhcihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxPYmREZWZpbmVWYXIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwotCXRFcGxPYmRWYXJFbnRyeSBNRU0gKnBWYXJFbnRyeTsKKwl0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeTsKIAl0RXBsVmFyUGFyYW1WYWxpZCBWYXJWYWxpZDsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YmluZGV4RW50cnk7CiAKQEAgLTY3NCw5ICs2NjEsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkR2V0T2JqZWN0RGF0YVB0cihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3ZvaWQgKkVwbE9iZEdldE9iamVjdERhdGFQdHIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl2b2lkICpwRGF0YTsKQEAgLTcxOSw4ICs3MDUsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlZ2lzdGVyVXNlck9kKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCiB7CiAKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC03NDksMTAgKzczNCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZEluaXRWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqIHBWYXJFbnRyeV9wLAotCQkJCQkgICAgdEVwbE9iZFR5cGUgVHlwZV9wLAotCQkJCQkgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQordm9pZCBFcGxPYmRJbml0VmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCXRFcGxPYmRUeXBlIFR5cGVfcCwgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQogewogLyoKICAgICAjaWYgKEVQTF9QRE9fVVNFX1NUQVRJQ19NQVBQSU5HID09IEZBTFNFKQpAQCAtODAzLDkgKzc4Niw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxPYmRTaXplIFBVQkxJQyBFcGxPYmRHZXREYXRhU2l6ZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordEVwbE9iZFNpemUgRXBsT2JkR2V0RGF0YVNpemUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKQEAgLTg0NSwxMSArODI3LDExIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpCit1bnNpZ25lZCBpbnQgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJOb2RlSWQ7CisJdTggYk5vZGVJZDsKIAogCWJOb2RlSWQgPSAwOwogCU9iZFNpemUgPSBzaXplb2YoYk5vZGVJZCk7CkBAIC04ODIsMjIgKzg2NCwyMSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRTZXROb2RlSWQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkU2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCUJZVEUgZkh3Qm9vbDsKLQlCWVRFIGJOb2RlSWQ7CisJdTggZkh3Qm9vbDsKKwl1OCBiTm9kZUlkOwogCiAJLy8gY2hlY2sgTm9kZSBJZAogCWlmICh1aU5vZGVJZF9wID09IEVQTF9DX0FEUl9JTlZBTElEKSB7CiAJCVJldCA9IGtFcGxJbnZhbGlkTm9kZUlkOwogCQlnb3RvIEV4aXQ7CiAJfQotCWJOb2RlSWQgPSAoQllURSkgdWlOb2RlSWRfcDsKLQlPYmRTaXplID0gc2l6ZW9mKEJZVEUpOworCWJOb2RlSWQgPSAodTgpIHVpTm9kZUlkX3A7CisJT2JkU2l6ZSA9IHNpemVvZih1OCk7CiAJLy8gd3JpdGUgTm9kZUlkIHRvIE9EIGVudHJ5CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX1BUUl9JTlNUQU5DRV9QVFJfCiAJCQkgICAgICAgRVBMX09CRF9OT0RFX0lEX0lOREVYLApAQCAtOTY2LDEwICs5NDcsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSBCT09MICogcGZFbnRyeU51bWVyaWNhbF9wKQordEVwbEtlcm5lbCBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICBCT09MICpwZkVudHJ5TnVtZXJpY2FsX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKQEAgLTEwMTgsMTYgKzk5OCwxNCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeVRvTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxPYmRFbnRyeVB0ciBwT2JkRW50cnk7CiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJFbnRyeTsKLQl0RXBsT2JkQ2JQYXJhbSBNRU0gQ2JQYXJhbTsKKwl0RXBsT2JkQ2JQYXJhbSBDYlBhcmFtOwogCXZvaWQgKnBTcmNEYXRhOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKQEAgLTEwOTEsNyArMTA2OSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50ODoKIAljYXNlIGtFcGxPYmRUeXBVSW50ODoKIAkJewotCQkJQW1pU2V0Qnl0ZVRvTGUocERzdERhdGFfcCwgKigoQllURSAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0Qnl0ZVRvTGUocERzdERhdGFfcCwgKigodTggKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEwOTksNyArMTA3Nyw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MTY6CiAJY2FzZSBrRXBsT2JkVHlwVUludDE2OgogCQl7Ci0JCQlBbWlTZXRXb3JkVG9MZShwRHN0RGF0YV9wLCAqKChXT1JEICopIHBTcmNEYXRhKSk7CisJCQlBbWlTZXRXb3JkVG9MZShwRHN0RGF0YV9wLCAqKCh1MTYgKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExMDcsNyArMTA4NSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MjQ6CiAJY2FzZSBrRXBsT2JkVHlwVUludDI0OgogCQl7Ci0JCQlBbWlTZXREd29yZDI0VG9MZShwRHN0RGF0YV9wLCAqKChEV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0RHdvcmQyNFRvTGUocERzdERhdGFfcCwgKigodTMyICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTE2LDcgKzEwOTQsNyBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQzMjoKIAljYXNlIGtFcGxPYmRUeXBSZWFsMzI6CiAJCXsKLQkJCUFtaVNldER3b3JkVG9MZShwRHN0RGF0YV9wLCAqKChEV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0RHdvcmRUb0xlKHBEc3REYXRhX3AsICooKHUzMiAqKSBwU3JjRGF0YSkpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTEyNCw3ICsxMTAyLDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ0MDoKIAljYXNlIGtFcGxPYmRUeXBVSW50NDA6CiAJCXsKLQkJCUFtaVNldFF3b3JkNDBUb0xlKHBEc3REYXRhX3AsICooKFFXT1JEICopIHBTcmNEYXRhKSk7CisJCQlBbWlTZXRRd29yZDQwVG9MZShwRHN0RGF0YV9wLCAqKCh1NjQgKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExMzIsNyArMTExMCw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50NDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDQ4OgogCQl7Ci0JCQlBbWlTZXRRd29yZDQ4VG9MZShwRHN0RGF0YV9wLCAqKChRV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0UXdvcmQ0OFRvTGUocERzdERhdGFfcCwgKigodTY0ICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTQwLDcgKzExMTgsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDU2OgogCWNhc2Uga0VwbE9iZFR5cFVJbnQ1NjoKIAkJewotCQkJQW1pU2V0UXdvcmQ1NlRvTGUocERzdERhdGFfcCwgKigoUVdPUkQgKikgcFNyY0RhdGEpKTsKKwkJCUFtaVNldFF3b3JkNTZUb0xlKHBEc3REYXRhX3AsICooKHU2NCAqKSBwU3JjRGF0YSkpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTE0OSw3ICsxMTI3LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBVSW50NjQ6CiAJY2FzZSBrRXBsT2JkVHlwUmVhbDY0OgogCQl7Ci0JCQlBbWlTZXRRd29yZDY0VG9MZShwRHN0RGF0YV9wLCAqKChRV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0UXdvcmQ2NFRvTGUocERzdERhdGFfcCwgKigodTY0ICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTk5LDE5ICsxMTc3LDE3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnlGcm9tTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsIHRFcGxPYmRTaXplIFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5OwogCXRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnk7Ci0JdEVwbE9iZENiUGFyYW0gTUVNIENiUGFyYW07Ci0Jdm9pZCBNRU0gKnBEc3REYXRhOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CisJdm9pZCAqcERzdERhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlRV09SRCBxd0J1ZmZlcjsKKwl1NjQgcXdCdWZmZXI7CiAJdm9pZCAqcEJ1ZmZlciA9ICZxd0J1ZmZlcjsKIAogCVJldCA9IEVwbE9iZFdyaXRlRW50cnlQcmUoRVBMX01DT19JTlNUQU5DRV9QVFJfCkBAIC0xMjQyLDcgKzEyMTgsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDg6CiAJCXsKLQkJCSooKEJZVEUgKikgcEJ1ZmZlcikgPSBBbWlHZXRCeXRlRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTggKikgcEJ1ZmZlcikgPSBBbWlHZXRCeXRlRnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI1MCw3ICsxMjI2LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQxNjoKIAljYXNlIGtFcGxPYmRUeXBVSW50MTY6CiAJCXsKLQkJCSooKFdPUkQgKikgcEJ1ZmZlcikgPSBBbWlHZXRXb3JkRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTE2ICopIHBCdWZmZXIpID0gQW1pR2V0V29yZEZyb21MZShwU3JjRGF0YV9wKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyNTgsNyArMTIzNCw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MjQ6CiAJY2FzZSBrRXBsT2JkVHlwVUludDI0OgogCQl7Ci0JCQkqKChEV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldER3b3JkMjRGcm9tTGUocFNyY0RhdGFfcCk7CisJCQkqKCh1MzIgKikgcEJ1ZmZlcikgPSBBbWlHZXREd29yZDI0RnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI2Nyw3ICsxMjQzLDcgQEAKIAljYXNlIGtFcGxPYmRUeXBVSW50MzI6CiAJY2FzZSBrRXBsT2JkVHlwUmVhbDMyOgogCQl7Ci0JCQkqKChEV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldER3b3JkRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTMyICopIHBCdWZmZXIpID0gQW1pR2V0RHdvcmRGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMjc1LDcgKzEyNTEsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDQwOgogCWNhc2Uga0VwbE9iZFR5cFVJbnQ0MDoKIAkJewotCQkJKigoUVdPUkQgKikgcEJ1ZmZlcikgPSBBbWlHZXRRd29yZDQwRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTY0ICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ0MEZyb21MZShwU3JjRGF0YV9wKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyODMsNyArMTI1OSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50NDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDQ4OgogCQl7Ci0JCQkqKChRV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNDhGcm9tTGUocFNyY0RhdGFfcCk7CisJCQkqKCh1NjQgKikgcEJ1ZmZlcikgPSBBbWlHZXRRd29yZDQ4RnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI5MSw3ICsxMjY3LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ1NjoKIAljYXNlIGtFcGxPYmRUeXBVSW50NTY6CiAJCXsKLQkJCSooKFFXT1JEICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ1NkZyb21MZShwU3JjRGF0YV9wKTsKKwkJCSooKHU2NCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNTZGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzAwLDcgKzEyNzYsNyBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQ2NDoKIAljYXNlIGtFcGxPYmRUeXBSZWFsNjQ6CiAJCXsKLQkJCSooKFFXT1JEICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ2NEZyb21MZShwU3JjRGF0YV9wKTsKKwkJCSooKHU2NCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNjRGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzQ1LDEwICsxMzIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkR2V0QWNjZXNzVHlwZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB0RXBsT2JkQWNjZXNzICogcEFjY2Vzc1R5cF9wKQordEVwbEtlcm5lbCBFcGxPYmRHZXRBY2Nlc3NUeXBlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB0RXBsT2JkQWNjZXNzICpwQWNjZXNzVHlwX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKQEAgLTEzODgsMTAgKzEzNjMsOSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJICAgICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQordEVwbEtlcm5lbCBFcGxPYmRTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CkBAIC0xNDM1LDExICsxNDA5LDExIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbE9iamVjdENhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJCSAgIHRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrX3AsCi0JCQkJCSAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3ApCisJCQkJCSAgIHRFcGxPYmRDYlBhcmFtICpwQ2JQYXJhbV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbE9iZENhbGxiYWNrIE1FTSBmcENhbGxiYWNrOworCXRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrOwogCiAJLy8gY2hlY2sgZm9yIGFsbCBBUEkgZnVuY3Rpb24gaWYgaW5zdGFuY2UgaXMgdmFsaWQKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC0xNDgxLDcgKzE0NTUsNyBAQAogewogCiAJdEVwbE9iZFNpemUgRGF0YVNpemU7Ci0Jdm9pZCBNRU0gKnBEYXRhOworCXZvaWQgKnBEYXRhOwogCiAJLy8gSWYgT0QgZW50cnkgaXMgZGVmaW5lZCBieSBtYWNybyBFUExfT0JEX1NVQklOREVYX1JPTV9WU1RSSU5HCiAJLy8gdGhlbiB0aGUgY3VycmVudCBwb2ludGVyIGlzIGFsd2F5cyBOVUxMLiBUaGUgZnVuY3Rpb24KQEAgLTE0OTAsOCArMTQ2NCw3IEBACiAKIAlpZiAocFN1YkluZGV4RW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7CiAJCS8vIFRoZSBwb2ludGVyIHRvIGN1cnJlbnQgdmFsdWUgY2FuIGJlIHJlY2VpdmVkIGZyb20gRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cigpCi0JCXBEYXRhID0KLQkJICAgICgodm9pZCBNRU0gKilFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHBTdWJJbmRleEVudHJ5X3ApKTsKKwkJcERhdGEgPSAoKHZvaWQgKilFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHBTdWJJbmRleEVudHJ5X3ApKTsKIAkJaWYgKHBEYXRhICE9IE5VTEwpIHsKIAkJCURhdGFTaXplID0KIAkJCSAgICBFcGxPYmRHZXRTdHJMZW4oKHZvaWQgKilwRGF0YSwgRGF0YVNpemUsCkBAIC0xNTI2LDcgKzE0OTksNyBAQAogewogCiAJdEVwbE9iZFNpemUgU3RyTGVuID0gMDsKLQlCWVRFICpwYlN0cmluZzsKKwl1OCAqcGJTdHJpbmc7CiAKIAlpZiAocE9iakRhdGFfcCA9PSBOVUxMKSB7CiAJCWdvdG8gRXhpdDsKQEAgLTE3NjMsMTggKzE3MzYsMTggQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ2NDoKIAogCQkvLyBzd2l0Y2ggdG8gbG93ZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgoc2lnbmVkIFFXT1JEICopcFJhbmdlRGF0YSkgKyAxOworCQlwUmFuZ2VEYXRhID0gKChzaWduZWQgdTY0ICopcFJhbmdlRGF0YSkgKyAxOwogCiAJCS8vIGNoZWNrIGlmIHZhbHVlIGlzIHRvIGxvdwotCQlpZiAoKigoc2lnbmVkIFFXT1JEICopcERhdGFfcCkgPCAqKChzaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSkgeworCQlpZiAoKigoc2lnbmVkIHU2NCAqKXBEYXRhX3ApIDwgKigoc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpKSB7CiAJCQlSZXQgPSBrRXBsT2JkVmFsdWVUb29Mb3c7CiAJCQlicmVhazsKIAkJfQogCQkvLyBzd2l0Y2ggdG8gaGlnaGVyIGxpbWl0Ci0JCXBSYW5nZURhdGEgPSAoKHNpZ25lZCBRV09SRCAqKXBSYW5nZURhdGEpICsgMTsKKwkJcFJhbmdlRGF0YSA9ICgoc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBoaWdoCi0JCWlmICgqKChzaWduZWQgUVdPUkQgKilwRGF0YV9wKSA+ICooKHNpZ25lZCBRV09SRCAqKXBSYW5nZURhdGEpKSB7CisJCWlmICgqKChzaWduZWQgdTY0ICopcERhdGFfcCkgPiAqKChzaWduZWQgdTY0ICopcFJhbmdlRGF0YSkpIHsKIAkJCVJldCA9IGtFcGxPYmRWYWx1ZVRvb0hpZ2g7CiAJCX0KIApAQCAtMTc4NywyMCArMTc2MCwyMCBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQ2NDoKIAogCQkvLyBzd2l0Y2ggdG8gbG93ZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSArIDE7CisJCXBSYW5nZURhdGEgPSAoKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBsb3cKLQkJaWYgKCooKHVuc2lnbmVkIFFXT1JEICopcERhdGFfcCkgPAotCQkgICAgKigodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSkgeworCQlpZiAoKigodW5zaWduZWQgdTY0ICopcERhdGFfcCkgPAorCQkgICAgKigodW5zaWduZWQgdTY0ICopcFJhbmdlRGF0YSkpIHsKIAkJCVJldCA9IGtFcGxPYmRWYWx1ZVRvb0xvdzsKIAkJCWJyZWFrOwogCQl9CiAJCS8vIHN3aXRjaCB0byBoaWdoZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSArIDE7CisJCXBSYW5nZURhdGEgPSAoKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBoaWdoCi0JCWlmICgqKCh1bnNpZ25lZCBRV09SRCAqKXBEYXRhX3ApID4KLQkJICAgICooKHVuc2lnbmVkIFFXT1JEICopcFJhbmdlRGF0YSkpIHsKKwkJaWYgKCooKHVuc2lnbmVkIHU2NCAqKXBEYXRhX3ApID4KKwkJICAgICooKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpKSB7CiAJCQlSZXQgPSBrRXBsT2JkVmFsdWVUb29IaWdoOwogCQl9CiAKQEAgLTE4NzAsMjkgKzE4NDMsMjggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVByZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgICAgIHZvaWQgKipwcERzdERhdGFfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCi0JCQkJCSAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wLAotCQkJCQkgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciAqIHBwU3ViRW50cnlfcCwKLQkJCQkJICAgICB0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwQ2JQYXJhbV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplICogcE9iZFNpemVfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZFdyaXRlRW50cnlQcmUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICAgICAgdm9pZCAqKnBwRHN0RGF0YV9wLAorCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCwKKwkJCQkgICAgICB0RXBsT2JkRW50cnlQdHIgKnBwT2JkRW50cnlfcCwKKwkJCQkgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgKnBwU3ViRW50cnlfcCwKKwkJCQkgICAgICB0RXBsT2JkQ2JQYXJhbSAqcENiUGFyYW1fcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSAqcE9iZFNpemVfcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxPYmRFbnRyeVB0ciBwT2JkRW50cnk7CiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJFbnRyeTsKIAl0RXBsT2JkQWNjZXNzIEFjY2VzczsKLQl2b2lkIE1FTSAqcERzdERhdGE7CisJdm9pZCAqcERzdERhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAlCT09MIGZFbnRyeU51bWVyaWNhbDsKIAogI2lmIChFUExfT0JEX1VTRV9TVFJJTkdfRE9NQUlOX0lOX1JBTSAhPSBGQUxTRSkKLQl0RXBsT2JkVlN0cmluZ0RvbWFpbiBNRU0gTWVtVlN0cmluZ0RvbWFpbjsKLQl2b2lkIE1FTSAqcEN1cnJEYXRhOworCXRFcGxPYmRWU3RyaW5nRG9tYWluIE1lbVZTdHJpbmdEb21haW47CisJdm9pZCAqcEN1cnJEYXRhOwogI2VuZGlmCiAKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZApAQCAtMTkwOCw3ICsxODgwLDcgQEAKIAkJZ290byBFeGl0OwogCX0KIAkvLyBnZXQgcG9pbnRlciB0byBvYmplY3QgZGF0YQotCXBEc3REYXRhID0gKHZvaWQgTUVNICopRXBsT2JkR2V0T2JqZWN0RGF0YVB0ckludGVybihwU3ViRW50cnkpOworCXBEc3REYXRhID0gKHZvaWQgKilFcGxPYmRHZXRPYmplY3REYXRhUHRySW50ZXJuKHBTdWJFbnRyeSk7CiAKIAlBY2Nlc3MgPSAodEVwbE9iZEFjY2VzcykgcFN1YkVudHJ5LT5tX0FjY2VzczsKIApAQCAtMTkzMyw3ICsxOTA1LDcgQEAKIAkvLyBhZGFwdGVkIGJ5IHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHJlLXJlYWQKIAkvLyB0aGlzIHZhbHVlcy4KIAlPYmRTaXplID0gRXBsT2JkR2V0T2JqZWN0U2l6ZShwU3ViRW50cnkpOwotCXBEc3REYXRhID0gKHZvaWQgTUVNICopRXBsT2JkR2V0T2JqZWN0RGF0YVB0ckludGVybihwU3ViRW50cnkpOworCXBEc3REYXRhID0gKHZvaWQgKilFcGxPYmRHZXRPYmplY3REYXRhUHRySW50ZXJuKHBTdWJFbnRyeSk7CiAKIAkvLyAwOS1kZWMtMjAwNCByLmQuOgogCS8vICAgICAgRnVuY3Rpb24gRXBsT2JkV3JpdGVFbnRyeSgpIGNhbGxzIG5ldyBldmVudCBrRXBsT2JkRXZXclN0cmluZ0RvbWFpbgpAQCAtMTk2NywyMyArMTkzOSwxOSBAQAogCQlwQ3VyckRhdGEgPSBwU3ViRW50cnktPm1fcEN1cnJlbnQ7CiAJCWlmICgocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpCiAJCSAgICB8fCAocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cE9TdHJpbmcpKSB7Ci0JCQkoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwQ3VyckRhdGEpLT5tX1NpemUgPQotCQkJICAgIE1lbVZTdHJpbmdEb21haW4ubV9PYmpTaXplOwotCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikgcEN1cnJEYXRhKS0+bV9wU3RyaW5nID0KLQkJCSAgICBNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CisJCQkoKHRFcGxPYmRWU3RyaW5nICopcEN1cnJEYXRhKS0+bV9TaXplID0gTWVtVlN0cmluZ0RvbWFpbi5tX09ialNpemU7CisJCQkoKHRFcGxPYmRWU3RyaW5nICopcEN1cnJEYXRhKS0+bV9wU3RyaW5nID0gTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOwogCQl9IGVsc2UJCS8vIGlmIChwU2Rvc1RhYmxlRW50cnlfcC0+bV9iT2JqVHlwZSA9PSBrRXBsT2JkVHlwRG9tYWluKQogCQl7Ci0JCQkoKHRFcGxPYmRWYXJFbnRyeSBNRU0gKikgcEN1cnJEYXRhKS0+bV9TaXplID0KLQkJCSAgICBNZW1WU3RyaW5nRG9tYWluLm1fT2JqU2l6ZTsKLQkJCSgodEVwbE9iZFZhckVudHJ5IE1FTSAqKSBwQ3VyckRhdGEpLT5tX3BEYXRhID0KLQkJCSAgICAodm9pZCBNRU0gKilNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CisJCQkoKHRFcGxPYmRWYXJFbnRyeSAqKXBDdXJyRGF0YSktPm1fU2l6ZSA9IE1lbVZTdHJpbmdEb21haW4ubV9PYmpTaXplOworCQkJKCh0RXBsT2JkVmFyRW50cnkgKilwQ3VyckRhdGEpLT5tX3BEYXRhID0gKHZvaWQgKilNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CiAJCX0KIAogCQkvLyBCZWNhdXNlIG9iamVjdCBzaXplIGFuZCBvYmplY3QgcG9pbnRlciBhcmUKIAkJLy8gYWRhcHRlZCBieSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLCByZS1yZWFkCiAJCS8vIHRoaXMgdmFsdWVzLgogCQlPYmRTaXplID0gTWVtVlN0cmluZ0RvbWFpbi5tX09ialNpemU7Ci0JCXBEc3REYXRhID0gKHZvaWQgTUVNICopTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOworCQlwRHN0RGF0YSA9ICh2b2lkICopTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOwogCX0KICNlbmRpZiAvLyNpZiAoT0JEX1VTRV9TVFJJTkdfRE9NQUlOX0lOX1JBTSAhPSBGQUxTRSkKIApAQCAtMjAwNCw3ICsxOTcyLDcgQEAKIAl9CiAKIAlpZiAocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpIHsKLQkJaWYgKCgoY2hhciBNRU0gKilwU3JjRGF0YV9wKVtTaXplX3AgLSAxXSA9PSAnXDAnKSB7CS8vIGxhc3QgYnl0ZSBvZiBzb3VyY2Ugc3RyaW5nIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVyCisJCWlmICgoKGNoYXIgKilwU3JjRGF0YV9wKVtTaXplX3AgLSAxXSA9PSAnXDAnKSB7CS8vIGxhc3QgYnl0ZSBvZiBzb3VyY2Ugc3RyaW5nIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVyCiAKIAkJCS8vIHJlc2VydmUgb25lIGJ5dGUgaW4gZGVzdGluYXRpb24gZm9yIDAtdGVybWluYXRpb24KIAkJCVNpemVfcCAtPSAxOwpAQCAtMjA2NCwxMyArMjAzMiwxMiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRXcml0ZUVudHJ5UG9zdChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICB0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5X3AsCi0JCQkJCSAgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnlfcCwKLQkJCQkJICAgICAgdEVwbE9iZENiUGFyYW0gTUVNICogcENiUGFyYW1fcCwKLQkJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJICAgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeVBvc3QoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeV9wLAorCQkJCSAgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5X3AsCisJCQkJICAgICAgIHRFcGxPYmRDYlBhcmFtICpwQ2JQYXJhbV9wLAorCQkJCSAgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApCiB7CiAKIAl0RXBsS2VybmVsIFJldDsKQEAgLTIxMDMsNyArMjA3MCw3IEBACiAKIAkvLyB0ZXJtaW5hdGUgc3RyaW5nIHdpdGggMAogCWlmIChwU3ViRW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7Ci0JCSgoY2hhciBNRU0gKilwRHN0RGF0YV9wKVtPYmRTaXplX3BdID0gJ1wwJzsKKwkJKChjaGFyICopcERzdERhdGFfcClbT2JkU2l6ZV9wXSA9ICdcMCc7CiAJfQogCS8vIHdyaXRlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24gdG8gc3RydWN0dXJlIG9mIGNhbGxiYWNrIHBhcmFtZXRlcnMKIAkvLyBzbyBjYWxsYmFjayBmdW5jdGlvbiBjYW4gY2hhbmdlIGRhdGEgc3Vic2VxdWVudGx5CkBAIC0yMTIzLDcgKzIwOTAsNyBAQAogLy8gRnVuY3Rpb246ICAgIEVwbE9iZEdldE9iamVjdFNpemUoKQogLy8KIC8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiB0byBnZXQgc2l6ZSBvZiBvYmplY3QKLS8vICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgdHlwZSBhbiBmaXhlZCBkYXRhIHR5cGUgKEJZVEUsIFdPUkQsIC4uLikKKy8vICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgdHlwZSBhbiBmaXhlZCBkYXRhIHR5cGUgKHU4LCB1MTYsIC4uLikKIC8vICAgICAgICAgICAgICBvciBub24gZml4ZWQgb2JqZWN0IChzdHJpbmcsIGRvbWFpbikuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBkZWNpZGUKIC8vICAgICAgICAgICAgICBpZiBkb3dubG9hZCBkYXRhIGFyZSBzdG9yZWQgdGVtcG9yYXJ5IG9yIG5vdC4gRm9yIG9iamVjdHMgd2l0aCBmaXhlZCBkYXRhIGxlbmd0aAogLy8gICAgICAgICAgICAgIGFuZCB0eXBlcyBhIHZhbHVlIHJhbmdlIGNoZWNraW5nIGNhbiBwcm9jZXNzLgpAQCAtMjE5Miw4ICsyMTU5LDggQEAKIAljYXNlIGtFcGxPYmRUeXBEb21haW46CiAKIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7Ci0JCQlEYXRhU2l6ZSA9ICgodEVwbE9iZFZhckVudHJ5IE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJaWYgKCh2b2lkICopcERhdGEgIT0gKHZvaWQgKilOVUxMKSB7CisJCQlEYXRhU2l6ZSA9ICgodEVwbE9iZFZhckVudHJ5ICopIHBEYXRhKS0+bV9TaXplOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yMjA1LDIxICsyMTcyLDE5IEBACiAJCS8vIHRoZW4gdGhlIGN1cnJlbnQgcG9pbnRlciBpcyBhbHdheXMgTlVMTC4gVGhlIGZ1bmN0aW9uCiAJCS8vIHJldHVybnMgdGhlIGxlbmd0aCBvZiBkZWZhdWx0IHN0cmluZy4KIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7CisJCWlmICgodm9pZCAqKXBEYXRhICE9ICh2b2lkICopTlVMTCkgewogCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJLy8gdEVwbE9iZFZTdHJpbmcgb2YgY3VycmVudCB2YWx1ZS4KIAkJCS8vICh0eXBlcyB0RXBsT2JkVlN0cmluZywgdEVwbE9iZE9TdHJpbmcgYW5kIHRFcGxPYmRVU3RyaW5nIGhhcyB0aGUgc2FtZSBtZW1iZXJzKQotCQkJRGF0YVNpemUgPSAoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJCURhdGFTaXplID0gKCh0RXBsT2JkVlN0cmluZyAqKSBwRGF0YSktPm1fU2l6ZTsKIAkJfSBlbHNlIHsKIAkJCS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBkZWNsZWFyZWQuIFRoZSBzdHJpbmcKIAkJCS8vIGlzIGxvY2F0ZWQgaW4gUk9NLCB0aGVyZWZvciB1c2UgZGVmYXVsdCBwb2ludGVyLgogCQkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcERlZmF1bHQ7Ci0JCQlpZiAoKENPTlNUIHZvaWQgUk9NICopcERhdGEgIT0gKENPTlNUIHZvaWQgUk9NICopTlVMTCkgeworCQkJaWYgKChjb25zdCB2b2lkICopcERhdGEgIT0gKGNvbnN0IHZvaWQgKilOVUxMKSB7CiAJCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJCS8vIHRFcGxPYmRWU3RyaW5nIG9mIGRlZmF1bHQgdmFsdWUuCi0JCQkJRGF0YVNpemUgPQotCQkJCSAgICAoKENPTlNUIHRFcGxPYmRWU3RyaW5nIFJPTSAqKSBwRGF0YSktPgotCQkJCSAgICBtX1NpemU7CisJCQkJRGF0YVNpemUgPSAoKGNvbnN0IHRFcGxPYmRWU3RyaW5nICopcERhdGEpLT5tX1NpemU7CiAJCQl9CiAJCX0KIApAQCAtMjIyOSwyMSArMjE5NCwxOSBAQAogCWNhc2Uga0VwbE9iZFR5cE9TdHJpbmc6CiAKIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7CisJCWlmICgodm9pZCAqKXBEYXRhICE9ICh2b2lkICopTlVMTCkgewogCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJLy8gdEVwbE9iZFZTdHJpbmcgb2YgY3VycmVudCB2YWx1ZS4KIAkJCS8vICh0eXBlcyB0RXBsT2JkVlN0cmluZywgdEVwbE9iZE9TdHJpbmcgYW5kIHRFcGxPYmRVU3RyaW5nIGhhcyB0aGUgc2FtZSBtZW1iZXJzKQotCQkJRGF0YVNpemUgPSAoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJCURhdGFTaXplID0gKCh0RXBsT2JkT1N0cmluZyAqKSBwRGF0YSktPm1fU2l6ZTsKIAkJfSBlbHNlIHsKIAkJCS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBkZWNsZWFyZWQuIFRoZSBzdHJpbmcKIAkJCS8vIGlzIGxvY2F0ZWQgaW4gUk9NLCB0aGVyZWZvciB1c2UgZGVmYXVsdCBwb2ludGVyLgogCQkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcERlZmF1bHQ7Ci0JCQlpZiAoKENPTlNUIHZvaWQgUk9NICopcERhdGEgIT0gKENPTlNUIHZvaWQgUk9NICopTlVMTCkgeworCQkJaWYgKChjb25zdCB2b2lkICopcERhdGEgIT0gKGNvbnN0IHZvaWQgKilOVUxMKSB7CiAJCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJCS8vIHRFcGxPYmRWU3RyaW5nIG9mIGRlZmF1bHQgdmFsdWUuCi0JCQkJRGF0YVNpemUgPQotCQkJCSAgICAoKENPTlNUIHRFcGxPYmRPU3RyaW5nIFJPTSAqKSBwRGF0YSktPgotCQkJCSAgICBtX1NpemU7CisJCQkJRGF0YVNpemUgPSAoKGNvbnN0IHRFcGxPYmRPU3RyaW5nICopcERhdGEpLT5tX1NpemU7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0yMzY2LDcgKzIzMjksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkR2V0VmFyRW50cnkodEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJpbmRleEVudHJ5X3AsCi0JCQkJICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQorCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApCiB7CiAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxPYmRWYXJFbnRyeU5vdEV4aXN0OwpAQCAtMjM3OCwxMyArMjM0MSw5IEBACiAJaWYgKChwU3ViaW5kZXhFbnRyeV9wLT5tX0FjY2VzcyAmIGtFcGxPYmRBY2NWYXIpICE9IDApIHsKIAkJLy8gY2hlY2sgaWYgb2JqZWN0IGlzIGFuIGFycmF5CiAJCWlmICgocFN1YmluZGV4RW50cnlfcC0+bV9BY2Nlc3MgJiBrRXBsT2JkQWNjQXJyYXkpICE9IDApIHsKLQkJCSpwcFZhckVudHJ5X3AgPQotCQkJICAgICYoKHRFcGxPYmRWYXJFbnRyeSBNRU0gKikgcFN1YmluZGV4RW50cnlfcC0+Ci0JCQkgICAgICBtX3BDdXJyZW50KVtwU3ViaW5kZXhFbnRyeV9wLT5tX3VpU3ViSW5kZXggLSAxXTsKKwkJCSpwcFZhckVudHJ5X3AgPSAmKCh0RXBsT2JkVmFyRW50cnkgKilwU3ViaW5kZXhFbnRyeV9wLT5tX3BDdXJyZW50KVtwU3ViaW5kZXhFbnRyeV9wLT5tX3VpU3ViSW5kZXggLSAxXTsKIAkJfSBlbHNlIHsKLQkJCSpwcFZhckVudHJ5X3AgPQotCQkJICAgICh0RXBsT2JkVmFyRW50cnkgTUVNICopIHBTdWJpbmRleEVudHJ5X3AtPgotCQkJICAgIG1fcEN1cnJlbnQ7CisJCQkqcHBWYXJFbnRyeV9wID0gKHRFcGxPYmRWYXJFbnRyeSAqKXBTdWJpbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7CiAJCX0KIAogCQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKQEAgLTI0MjAsNyArMjM3OSw3IEBACiB7CiAKIAl0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CiAJdEVwbEtlcm5lbCBSZXQ7CiAKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZApAQCAtMjQ3NCwxNiArMjQzMywxNiBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwU3ViSW5kZXhFbnRyeV9wCiAvLwotLy8gUmV0dXJuOiAgICAgIHZvaWQgTUVNKgorLy8gUmV0dXJuOiAgICAgIHZvaWQgKgogLy8KIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB2b2lkIE1FTSAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCkKK3N0YXRpYyB2b2lkICpFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViSW5kZXhFbnRyeV9wKQogewogCi0Jdm9pZCBNRU0gKnBEYXRhOworCXZvaWQgKnBEYXRhOwogCXVuc2lnbmVkIGludCB1aUFycmF5SW5kZXg7CiAJdEVwbE9iZFNpemUgU2l6ZTsKIApAQCAtMjUwMCwyNCArMjQ1OSwyMSBAQAogCQkJfSBlbHNlIHsKIAkJCQlTaXplID0gRXBsT2JkR2V0T2JqZWN0U2l6ZShwU3ViSW5kZXhFbnRyeV9wKTsKIAkJCX0KLQkJCXBEYXRhID0gKChCWVRFIE1FTSAqKSBwRGF0YSkgKyAoU2l6ZSAqIHVpQXJyYXlJbmRleCk7CisJCQlwRGF0YSA9ICgodTggKikgcERhdGEpICsgKFNpemUgKiB1aUFycmF5SW5kZXgpOwogCQl9CiAJCS8vIGNoZWNrIGlmIFZhckVudHJ5CiAJCWlmICgocFN1YkluZGV4RW50cnlfcC0+bV9BY2Nlc3MgJiBrRXBsT2JkQWNjVmFyKSAhPSAwKSB7CiAJCQkvLyBUaGUgZGF0YSBwb2ludGVyIGlzIHN0b3JlZCBpbiBWYXJFbnRyeS0+cERhdGEKLQkJCXBEYXRhID0gKCh0RXBsT2JkVmFyRW50cnkgTUVNICopIHBEYXRhKS0+bV9wRGF0YTsKKwkJCXBEYXRhID0gKCh0RXBsT2JkVmFyRW50cnkgKikgcERhdGEpLT5tX3BEYXRhOwogCQl9CiAJCS8vIHRoZSBkZWZhdWx0IHBvaW50ZXIgaXMgc3RvcmVkIGZvciBzdHJpbmdzIGluIHRFcGxPYmRWU3RyaW5nCiAJCWVsc2UgaWYgKChwU3ViSW5kZXhFbnRyeV9wLT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpCS8qIHx8CiAJCQkJCQkJCQkJICAgKHBTdWJJbmRleEVudHJ5X3AtPm1fVHlwZSA9PSBrRXBsT2JkVHlwVVN0cmluZykgICAgKi8KIAkJCSApIHsKLQkJCXBEYXRhID0KLQkJCSAgICAodm9pZCBNRU0gKikoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwRGF0YSktPgotCQkJICAgIG1fcFN0cmluZzsKKwkJCXBEYXRhID0gKHZvaWQgKikoKHRFcGxPYmRWU3RyaW5nICopcERhdGEpLT5tX3BTdHJpbmc7CiAJCX0gZWxzZSBpZiAocFN1YkluZGV4RW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBPU3RyaW5nKSB7CiAJCQlwRGF0YSA9Ci0JCQkgICAgKHZvaWQgTUVNICopKCh0RXBsT2JkT1N0cmluZyBNRU0gKikgcERhdGEpLT4KLQkJCSAgICBtX3BTdHJpbmc7CisJCQkgICAgKHZvaWQgKikoKHRFcGxPYmRPU3RyaW5nICopcERhdGEpLT5tX3BTdHJpbmc7CiAJCX0KIAl9CiAKQEAgLTI1NDEsNyArMjQ5Nyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkR2V0SW5kZXhJbnRlcm4odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRHZXRJbmRleEludGVybih0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCiAJCQkJICAgICAgIHRFcGxPYmRFbnRyeVB0ciAqIHBwT2JkRW50cnlfcCkKIHsKQEAgLTI3NjIsOSArMjcxOCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsT2JkU2V0U3RvcmVMb2FkT2JqQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCSAgICAgIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApCit0RXBsS2VybmVsIEVwbE9iZFNldFN0b3JlTG9hZE9iakNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApCiB7CiAKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC0yODAyLDI2ICsyNzU2LDI2IEBACiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJJbmRleDsKIAl1bnNpZ25lZCBpbnQgblN1YkluZGV4Q291bnQ7CiAJdEVwbE9iZEFjY2VzcyBBY2Nlc3M7Ci0Jdm9pZCBNRU0gKnBEc3REYXRhOworCXZvaWQgKnBEc3REYXRhOwogCXZvaWQgKnBEZWZhdWx0OwogCXRFcGxPYmRTaXplIE9ialNpemU7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbE9iZENiU3RvcmVQYXJhbSBNRU0gQ2JTdG9yZTsKLQl0RXBsT2JkVmFyRW50cnkgTUVNICpwVmFyRW50cnk7CisJdEVwbE9iZENiU3RvcmVQYXJhbSBDYlN0b3JlOworCXRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5OwogCiAJQVNTRVJUKHBPYmRFbnR5X3AgIT0gTlVMTCk7CiAKIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCS8vIHByZXBhcmUgc3RydWN0dXJlIGZvciBTVE9SRSBSRVNUT1JFIGNhbGxiYWNrIGZ1bmN0aW9uCi0JQ2JTdG9yZS5tX2JDdXJyZW50T2RQYXJ0ID0gKEJZVEUpIEN1cnJlbnRPZFBhcnRfcDsKKwlDYlN0b3JlLm1fYkN1cnJlbnRPZFBhcnQgPSAodTgpIEN1cnJlbnRPZFBhcnRfcDsKIAlDYlN0b3JlLm1fcERhdGEgPSBOVUxMOwogCUNiU3RvcmUubV9PYmpTaXplID0gMDsKIAogCS8vIGNvbW1hbmQgb2YgZmlyc3QgYWN0aW9uIGRlcGVuZHMgb24gZGlyZWN0aW9uIHRvIGFjY2VzcwogI2lmIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogCWlmIChEaXJlY3Rpb25fcCA9PSBrRXBsT2JkRGlyTG9hZCkgewotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1PcGVuUmVhZDsKKwkJQ2JTdG9yZS5tX2JDb21tYW5kID0gKHU4KSBrRXBsT2JkQ29tbU9wZW5SZWFkOwogCiAJCS8vIGNhbGwgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHByZXZpb3VzIGNvbW1hbmQKIAkJUmV0ID0gRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19JTlNUQU5DRV9QVFJfICYgQ2JTdG9yZSk7CkBAIC0yODI5LDkgKzI3ODMsOSBAQAogCQkJZ290byBFeGl0OwogCQl9CiAJCS8vIHNldCBjb21tYW5kIGZvciBpbmRleCBhbmQgc3ViaW5kZXggbG9vcAotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1SZWFkT2JqOworCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tUmVhZE9iajsKIAl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJTdG9yZSkgewotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1PcGVuV3JpdGU7CisJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1PcGVuV3JpdGU7CiAKIAkJLy8gY2FsbCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcHJldmlvdXMgY29tbWFuZAogCQlSZXQgPSBFcGxPYmRDYWxsU3RvcmVDYWxsYmFjayhFUExfTUNPX0lOU1RBTkNFX1BUUl8gJiBDYlN0b3JlKTsKQEAgLTI4MzksNyArMjc5Myw3IEBACiAJCQlnb3RvIEV4aXQ7CiAJCX0KIAkJLy8gc2V0IGNvbW1hbmQgZm9yIGluZGV4IGFuZCBzdWJpbmRleCBsb29wCi0JCUNiU3RvcmUubV9iQ29tbWFuZCA9IChCWVRFKSBrRXBsT2JkQ29tbVdyaXRlT2JqOworCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tV3JpdGVPYmo7CiAJfQogI2VuZGlmIC8vIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogCkBAIC0yODkwLDcgKzI4NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcGxPYmRJbml0VmFyRW50cnkgKCh0RXBsT2JkVmFyRW50cnkgTUVNKikgKCgoQllURSBNRU0qKSBwU3ViSW5kZXgtPm1fcEN1cnJlbnQpICsgKHNpemVvZiAodEVwbE9iZFZhckVudHJ5KSAqIHBTdWJJbmRleC0+bV91aVN1YkluZGV4KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVwbE9iZEluaXRWYXJFbnRyeSAoKHRFcGxPYmRWYXJFbnRyeSAqKSAoKCh1OCAqKSBwU3ViSW5kZXgtPm1fcEN1cnJlbnQpICsgKHNpemVvZiAodEVwbE9iZFZhckVudHJ5KSAqIHBTdWJJbmRleC0+bV91aVN1YkluZGV4KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3ViSW5kZXgtPm1fVHlwZSwgT2JqU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogKi8KQEAgLTI5MTEsMjkgKzI4NjUsMTcgQEAKIAkJCQkJCSAgICBwU3ViSW5kZXgtPm1fcEN1cnJlbnQ7CiAJCQkJCQlpZiAocERzdERhdGEgIT0gTlVMTCkgewogCQkJCQkJCS8vIDA4LWRlYy0yMDA0OiBjb2RlIG9wdGltaXphdGlvbiAhISEKLQkJCQkJCQkvLyAgICAgICAgICAgICAgZW50cmllcyAoKHRFcGxPYmRWU3RyaW5nRGVmIFJPTSopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fcFN0cmluZwotCQkJCQkJCS8vICAgICAgICAgICAgICBhbmQgKCh0RXBsT2JkVlN0cmluZ0RlZiBST00qKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemUgd2VyZSByZWFkCisJCQkJCQkJLy8gICAgICAgICAgICAgIGVudHJpZXMgKCh0RXBsT2JkVlN0cmluZ0RlZiopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fcFN0cmluZworCQkJCQkJCS8vICAgICAgICAgICAgICBhbmQgKCh0RXBsT2JkVlN0cmluZ0RlZiopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fU2l6ZSB3ZXJlIHJlYWQKIAkJCQkJCQkvLyAgICAgICAgICAgICAgdHdpY2UuIHRoYXRzIG5vdCBuZWNlc3NhcnkhCiAKIAkJCQkJCQkvLyBGb3IgY29weWluZyBkYXRhIHdlIGhhdmUgdG8gc2V0IHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIHRvIHRoZSByZWFsIFJBTSBzdHJpbmcuIFRoaXMKIAkJCQkJCQkvLyBwb2ludGVyIHRvIFJBTSBzdHJpbmcgaXMgbG9jYXRlZCBpbiBkZWZhdWx0IHN0cmluZyBpbmZvIHN0cnVjdHVyZS4gKHRyYW5zbGF0ZWQgci5kLikKLQkJCQkJCQlwRHN0RGF0YSA9Ci0JCQkJCQkJICAgICh2b2lkIE1FTQotCQkJCQkJCSAgICAgKikoKHRFcGxPYmRWU3RyaW5nRGVmIFJPTSAqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmc7Ci0JCQkJCQkJT2JqU2l6ZSA9Ci0JCQkJCQkJICAgICgodEVwbE9iZFZTdHJpbmdEZWYKLQkJCQkJCQkgICAgICBST00gKikgcFN1YkluZGV4LT4KLQkJCQkJCQkgICAgIG1fcERlZmF1bHQpLT4KLQkJCQkJCQkgICAgbV9TaXplOworCQkJCQkJCXBEc3REYXRhID0gKHZvaWQgKikoKHRFcGxPYmRWU3RyaW5nRGVmKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9wU3RyaW5nOworCQkJCQkJCU9ialNpemUgPSAoKHRFcGxPYmRWU3RyaW5nRGVmICopcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9TaXplOwogCi0JCQkJCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikKLQkJCQkJCQkgcFN1YkluZGV4LT4KLQkJCQkJCQkgbV9wQ3VycmVudCktPgotCQkJCSAgICAgbV9wU3RyaW5nID0gcERzdERhdGE7Ci0JCQkJCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikKLQkJCQkJCQkgcFN1YkluZGV4LT4KLQkJCQkJCQkgbV9wQ3VycmVudCktPm1fU2l6ZSA9Ci0JCQkJICAgICBPYmpTaXplOworCQkJCQkJCSgodEVwbE9iZFZTdHJpbmcgKilwU3ViSW5kZXgtPm1fcEN1cnJlbnQpLT5tX3BTdHJpbmcgPSBwRHN0RGF0YTsKKwkJCQkJCQkoKHRFcGxPYmRWU3RyaW5nICopcFN1YkluZGV4LT5tX3BDdXJyZW50KS0+bV9TaXplID0gT2JqU2l6ZTsKIAkJCQkJCX0KIAogCQkJCQl9IGVsc2UgaWYgKHBTdWJJbmRleC0+bV9UeXBlID09CkBAIC0yOTQyLDI5ICsyODg0LDE3IEBACiAJCQkJCQkgICAgcFN1YkluZGV4LT5tX3BDdXJyZW50OwogCQkJCQkJaWYgKHBEc3REYXRhICE9IE5VTEwpIHsKIAkJCQkJCQkvLyAwOC1kZWMtMjAwNDogY29kZSBvcHRpbWl6YXRpb24gISEhCi0JCQkJCQkJLy8gICAgICAgICAgICAgIGVudHJpZXMgKCh0RXBsT2JkT1N0cmluZ0RlZiBST00qKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmcKLQkJCQkJCQkvLyAgICAgICAgICAgICAgYW5kICgodEVwbE9iZE9TdHJpbmdEZWYgUk9NKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9TaXplIHdlcmUgcmVhZAorCQkJCQkJCS8vICAgICAgICAgICAgICBlbnRyaWVzICgodEVwbE9iZE9TdHJpbmdEZWYqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmcKKwkJCQkJCQkvLyAgICAgICAgICAgICAgYW5kICgodEVwbE9iZE9TdHJpbmdEZWYqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemUgd2VyZSByZWFkCiAJCQkJCQkJLy8gICAgICAgICAgICAgIHR3aWNlLiB0aGF0cyBub3QgbmVjZXNzYXJ5IQogCiAJCQkJCQkJLy8gRm9yIGNvcHlpbmcgZGF0YSB3ZSBoYXZlIHRvIHNldCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciB0byB0aGUgcmVhbCBSQU0gc3RyaW5nLiBUaGlzCiAJCQkJCQkJLy8gcG9pbnRlciB0byBSQU0gc3RyaW5nIGlzIGxvY2F0ZWQgaW4gZGVmYXVsdCBzdHJpbmcgaW5mbyBzdHJ1Y3R1cmUuICh0cmFuc2xhdGVkIHIuZC4pCi0JCQkJCQkJcERzdERhdGEgPQotCQkJCQkJCSAgICAodm9pZCBNRU0KLQkJCQkJCQkgICAgICopKCh0RXBsT2JkT1N0cmluZ0RlZiBST00gKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9wU3RyaW5nOwotCQkJCQkJCU9ialNpemUgPQotCQkJCQkJCSAgICAoKHRFcGxPYmRPU3RyaW5nRGVmCi0JCQkJCQkJICAgICAgUk9NICopIHBTdWJJbmRleC0+Ci0JCQkJCQkJICAgICBtX3BEZWZhdWx0KS0+Ci0JCQkJCQkJICAgIG1fU2l6ZTsKKwkJCQkJCQlwRHN0RGF0YSA9ICh2b2lkICopKCh0RXBsT2JkT1N0cmluZ0RlZiAqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmc7CisJCQkJCQkJT2JqU2l6ZSA9ICgodEVwbE9iZE9TdHJpbmdEZWYgKilwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemU7CiAKLQkJCQkJCQkoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKQotCQkJCQkJCSBwU3ViSW5kZXgtPgotCQkJCQkJCSBtX3BDdXJyZW50KS0+Ci0JCQkJICAgICBtX3BTdHJpbmcgPSBwRHN0RGF0YTsKLQkJCQkJCQkoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKQotCQkJCQkJCSBwU3ViSW5kZXgtPgotCQkJCQkJCSBtX3BDdXJyZW50KS0+bV9TaXplID0KLQkJCQkgICAgIE9ialNpemU7CisJCQkJCQkJKCh0RXBsT2JkT1N0cmluZyAqKXBTdWJJbmRleC0+bV9wQ3VycmVudCktPm1fcFN0cmluZyA9IHBEc3REYXRhOworCQkJCQkJCSgodEVwbE9iZE9TdHJpbmcgKilwU3ViSW5kZXgtPm1fcEN1cnJlbnQpLT5tX1NpemUgPSBPYmpTaXplOwogCQkJCQkJfQogCiAJCQkJCX0KQEAgLTMwNjksMTEgKzI5OTksMTEgQEAKICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAllbHNlIHsKIAkJaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJMb2FkKSB7Ci0JCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1DbG9zZVJlYWQ7CisJCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tQ2xvc2VSZWFkOwogCQl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJTdG9yZSkgewotCQkJQ2JTdG9yZS5tX2JDb21tYW5kID0gKEJZVEUpIGtFcGxPYmRDb21tQ2xvc2VXcml0ZTsKKwkJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1DbG9zZVdyaXRlOwogCQl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJSZXN0b3JlKSB7Ci0JCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1DbGVhcjsKKwkJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1DbGVhcjsKIAkJfSBlbHNlIHsKIAkJCWdvdG8gRXhpdDsKIAkJfQpAQCAtMzEwNCw3ICszMDM0LDcgQEAKIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCBNRU0gKiBwRHN0RGF0YV9wLAorc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCAqcERzdERhdGFfcCwKIAkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKIAkJCQkgdEVwbE9iZFNpemUgT2JqU2l6ZV9wLCB0RXBsT2JkVHlwZSBPYmpUeXBlX3ApCiB7CkBAIC0zMTM1LDcgKzMwNjUsNyBAQAogCQkJRVBMX01FTUNQWShwRHN0RGF0YV9wLCBwU3JjRGF0YV9wLCBPYmpTaXplX3ApOwogCiAJCQlpZiAoT2JqVHlwZV9wID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7Ci0JCQkJKChjaGFyIE1FTSAqKXBEc3REYXRhX3ApW1N0clNpemVdID0gJ1wwJzsKKwkJCQkoKGNoYXIgKilwRHN0RGF0YV9wKVtTdHJTaXplXSA9ICdcMCc7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTk2LDcgKzMxMjYsNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICB0RXBsT2JkQ2JTdG9yZVBhcmFtIE1FTSAqCisJCQkJCSAgdEVwbE9iZENiU3RvcmVQYXJhbSAqCiAJCQkJCSAgcENiU3RvcmVQYXJhbV9wKQogewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmQuaAppbmRleCA4OGNjMTFlLi42YmI1YTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkLmgKQEAgLTY4LDExICs2OCwxMSBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiRXBsSW5jLmgiCi0KICNpZm5kZWYgX0VQTE9CRF9IXwogI2RlZmluZSBfRVBMT0JEX0hfCiAKKyNpbmNsdWRlICJFcGxJbmMuaCIKKwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gZGVmaW5lcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA2LDcgKzIwNiw3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIHR5cGVzIG9mIG9iamVjdHMgaW4gb2JqZWN0IGRpY3Rpb25hcnkKLS8vIERTLTMwMSBkZWZpbmVzIHRoZXNlIHR5cGVzIGFzIFdPUkQKKy8vIERTLTMwMSBkZWZpbmVzIHRoZXNlIHR5cGVzIGFzIHUxNgogdHlwZWRlZiBlbnVtIHsKIC8vIHR5cGVzIHdoaWNoIGFyZSBhbHdheXMgc3VwcG9ydGVkCiAJa0VwbE9iZFR5cEJvb2wgPSAweDAwMDEsCkBAIC0yNTUsMTUgKzI1NSwxNSBAQAogdHlwZWRlZiBzaWduZWQgbG9uZyB0RXBsT2JkSW50ZWdlcjI0OwkvLyAwMDEwCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdEVwbE9iZFVuc2lnbmVkMjQ7CS8vIDAwMTYKIAotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI0MDsJLy8gMDAxMgotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI0ODsJLy8gMDAxMwotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI1NjsJLy8gMDAxNAotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI2NDsJLy8gMDAxNQordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI0MDsJLy8gMDAxMgordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI0ODsJLy8gMDAxMwordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI1NjsJLy8gMDAxNAordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI2NDsJLy8gMDAxNQogCi10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDQwOwkvLyAwMDE4Ci10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDQ4OwkvLyAwMDE5Ci10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDU2OwkvLyAwMDFBCi10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDY0OwkvLyAwMDFCCit0eXBlZGVmIHU2NCB0RXBsT2JkVW5zaWduZWQ0MDsJLy8gMDAxOAordHlwZWRlZiB1NjQgdEVwbE9iZFVuc2lnbmVkNDg7CS8vIDAwMTkKK3R5cGVkZWYgdTY0IHRFcGxPYmRVbnNpZ25lZDU2OwkvLyAwMDFBCit0eXBlZGVmIHU2NCB0RXBsT2JkVW5zaWduZWQ2NDsJLy8gMDAxQgogCiB0eXBlZGVmIGRvdWJsZSB0RXBsT2JkUmVhbDY0OwkvLyAwMDExCiAKQEAgLTI4MywyMiArMjgzLDIxIEBACiAJa1ZhclZhbGlkQWxsID0gMHgwMwkvLyBjdXJyZW50bHkgb25seSBzaXplIGFuZCBkYXRhIGFyZSBpbXBsZW1lbnRlZCBhbmQgdXNlZAogfSB0RXBsVmFyUGFyYW1WYWxpZDsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0RXBsVmFyQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgIHZvaWQgKnBQYXJhbV9wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbFZhckNhbGxiYWNrKSAoQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyB2b2lkICpwUGFyYW1fcCk7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsVmFyUGFyYW1WYWxpZCBtX1ZhbGlkRmxhZzsKIAl1bnNpZ25lZCBpbnQgbV91aUluZGV4OwogCXVuc2lnbmVkIGludCBtX3VpU3ViaW5kZXg7CiAJdEVwbE9iZFNpemUgbV9TaXplOwotCXZvaWQgTUVNICptX3BEYXRhOworCXZvaWQgKm1fcERhdGE7CiAvLyAgICB0RXBsVmFyQ2FsbGJhY2sgICAgIG1fZnBDYWxsYmFjazsKIC8vICAgIHZvaWQgKiAgICAgICBtX3BBcmc7CiAKIH0gdEVwbFZhclBhcmFtOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0Jdm9pZCBNRU0gKm1fcERhdGE7CisJdm9pZCAqbV9wRGF0YTsKIAl0RXBsT2JkU2l6ZSBtX1NpemU7CiAvKgogICAgICNpZiAoRVBMX1BET19VU0VfU1RBVElDX01BUFBJTkcgPT0gRkFMU0UpCkBAIC0zMTAsNyArMzA5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXRFcGxPYmRTaXplIG1fU2l6ZTsKLQlCWVRFICptX3BTdHJpbmc7CisJdTggKm1fcFN0cmluZzsKIAogfSB0RXBsT2JkT1N0cmluZzsJCS8vIDAwMEMKIApAQCAtMzI4LDggKzMyNyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsT2JkU2l6ZSBtX1NpemU7Ci0JQllURSAqbV9wRGVmU3RyaW5nOwkvLyAkJCQgZC5rLiBpdCBpcyB1bnVzZWQsIHNvIHdlIGNvdWxkIGRlbGV0ZSBpdAotCUJZVEUgKm1fcFN0cmluZzsKKwl1OCAqbV9wRGVmU3RyaW5nOwkvLyAkJCQgZC5rLiBpdCBpcyB1bnVzZWQsIHNvIHdlIGNvdWxkIGRlbGV0ZSBpdAorCXU4ICptX3BTdHJpbmc7CiAKIH0gdEVwbE9iZE9TdHJpbmdEZWY7CiAKQEAgLTM1NCw3ICszNTMsNyBAQAogCXRFcGxPYmRUeXBlIG1fVHlwZTsKIAl0RXBsT2JkQWNjZXNzIG1fQWNjZXNzOwogCXZvaWQgKm1fcERlZmF1bHQ7Ci0Jdm9pZCBNRU0gKm1fcEN1cnJlbnQ7CS8vIHBvaW50cyBhbHdheXMgdG8gUkFNCisJdm9pZCAqbV9wQ3VycmVudDsJLy8gcG9pbnRzIGFsd2F5cyB0byBSQU0KIAogfSB0RXBsT2JkU3ViRW50cnk7CiAKQEAgLTM3MSwxNCArMzcwLDEyIEBACiAJdW5zaWduZWQgaW50IG1fdWlJbmRleDsKIAl1bnNpZ25lZCBpbnQgbV91aVN1YkluZGV4OwogCXZvaWQgKm1fcEFyZzsKLQlEV09SRCBtX2R3QWJvcnRDb2RlOworCXUzMiBtX2R3QWJvcnRDb2RlOwogCiB9IHRFcGxPYmRDYlBhcmFtOwogCiAvLyBkZWZpbmUgdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb246IHBQYXJhbV9wIHBvaW50cyB0byB0RXBsT2JkQ2JQYXJhbQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0RXBsT2JkQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgIHRFcGxPYmRDYlBhcmFtIE1FTSAqCi0JCQkJCQkgIHBQYXJhbV9wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbE9iZENhbGxiYWNrKSAoQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyB0RXBsT2JkQ2JQYXJhbSAqcFBhcmFtX3ApOwogCiAvLyBkbyBub3QgY2hhbmdlIHRoZSBvcmRlciBmb3IgdGhpcyBzdHJ1Y3QhISEKIApAQCAtNDE3LDE5ICs0MTQsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsT2JkQ29tbWFuZCBtX2JDb21tYW5kOwogCXRFcGxPYmRQYXJ0IG1fYkN1cnJlbnRPZFBhcnQ7Ci0Jdm9pZCBNRU0gKm1fcERhdGE7CisJdm9pZCAqbV9wRGF0YTsKIAl0RXBsT2JkU2l6ZSBtX09ialNpemU7CiAKIH0gdEVwbE9iZENiU3RvcmVQYXJhbTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0SW5pdFRhYkVudHJ5Q2FsbGJhY2spICh2b2lkIE1FTSAqIHBUYWJFbnRyeV9wLAotCQkJCQkJCXVuc2lnbmVkIGludAotCQkJCQkJCXVpT2JqSW5kZXhfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRJbml0VGFiRW50cnlDYWxsYmFjaykgKHZvaWQgKnBUYWJFbnRyeV9wLCB1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKgotCQkgICB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgdEVwbE9iZENiU3RvcmVQYXJhbSBNRU0gKgotCQkJCQkJIHBDYlN0b3JlUGFyYW1fcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjaykgKENDTV9ERUNMX0lOU1RBTkNFX0hETF8gdEVwbE9iZENiU3RvcmVQYXJhbSAqcENiU3RvcmVQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBzdHVjdHVyZSBpcyB1c2VkIGZvciBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbiBPYmRJbml0TW9kdWxlVGFiKCkKQEAgLTQzOCw4ICs0MzAsOCBAQAogCXVuc2lnbmVkIGludCBtX3VpTG93ZXJPYmpJbmRleDsJLy8gbG93ZXIgbGltaXQgb2YgT2JqSW5kZXgKIAl1bnNpZ25lZCBpbnQgbV91aVVwcGVyT2JqSW5kZXg7CS8vIHVwcGVyIGxpbWl0IG9mIE9iakluZGV4CiAJdEluaXRUYWJFbnRyeUNhbGxiYWNrIG1fZnBJbml0VGFiRW50cnk7CS8vIHdpbGwgYmUgY2FsbGVkIGlmIE9iakluZGV4IHdhcyBmb3VuZAotCXZvaWQgTUVNICptX3BUYWJCYXNlOwkvLyBiYXNlIGFkZHJlc3Mgb2YgdGFibGUKLQl1bnNpZ25lZCBpbnQgbV91aUVudHJ5U2l6ZTsJLy8gc2l6ZSBvZiB0YWJsZSBlbnRyeSAgICAgIC8vIDI1LWZlYi0yMDA1IHIuZC46IGV4cGFuc2lvbiBmcm9tIEJZVEUgdG8gV09SRCBuZWNlc3NhcnkgZm9yIFBETyBiaXQgbWFwcGluZworCXZvaWQgKm1fcFRhYkJhc2U7CS8vIGJhc2UgYWRkcmVzcyBvZiB0YWJsZQorCXVuc2lnbmVkIGludCBtX3VpRW50cnlTaXplOwkvLyBzaXplIG9mIHRhYmxlIGVudHJ5ICAgICAgLy8gMjUtZmViLTIwMDUgci5kLjogZXhwYW5zaW9uIGZyb20gdTggdG8gdTE2IG5lY2Vzc2FyeSBmb3IgUERPIGJpdCBtYXBwaW5nCiAJdW5zaWduZWQgaW50IG1fdWlNYXhFbnRyaWVzOwkvLyBtYXguIHRhYmVsIGVudHJpZXMKIAogfSB0RXBsT2JkTW9kdWxUYWJQYXJhbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkTWFjcm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkTWFjcm8uaAppbmRleCAyM2YyYWQ4Li5mYzMyNWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZE1hY3JvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRNYWNyby5oCkBAIC04MCw3ICs4MCw3IEBACiAKIC8vICAgICAgICAjcHJhZ21hIG1lc3NhZ2UgKCJFUExfT0JEX0NSRUFURV9ST01fREFUQSIpCiAKLSNkZWZpbmUgRVBMX09CRF9CRUdJTigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljICBEV09SRCAgZHdPYmRfT0JLX2cgPSAweDAwMDA7CisjZGVmaW5lIEVQTF9PQkRfQkVHSU4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdTMyICBkd09iZF9PQktfZyA9IDB4MDAwMDsKICNkZWZpbmUgRVBMX09CRF9FTkQoKQogCiAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMiwxMSArMTAyLDExIEBACiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyAgZHR5cCAgeERlZiMjaW5kIyNfIyNzdWIjI19nICAgICAgICA9IHZhbDsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljICBkdHlwICB4RGVmIyNpbmQjI18jI3N1YiMjX2dbM10gICAgID0ge3ZhbCxsb3csaGlnaH07CiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUl9OT0lOSVQoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSkKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVlNUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUsdmFsKSAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgIE1FTSBzekN1ciMjaW5kIyNfIyNzdWIjI19nW3NpemUrMV07IFwKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVlNUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUsdmFsKSAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgIHN6Q3VyIyNpbmQjI18jI3N1YiMjX2dbc2l6ZSsxXTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdEVwbE9iZFZTdHJpbmdEZWYgIHhEZWYjI2luZCMjXyMjc3ViIyNfZyA9IHtzaXplLCB2YWwsIHN6Q3VyIyNpbmQjI18jI3N1YiMjX2d9OwogCi0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX09TVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplKSAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgQllURSAgTUVNIGJDdXIjI2luZCMjXyMjc3ViIyNfZ1tzaXplXTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdEVwbE9iZE9TdHJpbmdEZWYgIHhEZWYjI2luZCMjXyMjc3ViIyNfZyA9IHtzaXplLCAoKEJZVEUqKSIiKSwgYkN1ciMjaW5kIyNfIyNzdWIjI19nfTsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fT1NUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUpICAgICAgICAgICAgICAgICAgICAgc3RhdGljICB1OCAgYkN1ciMjaW5kIyNfIyNzdWIjI19nW3NpemVdOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljICB0RXBsT2JkT1N0cmluZ0RlZiAgeERlZiMjaW5kIyNfIyNzdWIjI19nID0ge3NpemUsICgodTgqKSIiKSwgYkN1ciMjaW5kIyNfIyNzdWIjI19nfTsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fRE9NQUlOKGluZCxzdWIsYWNjLG5hbWUpCiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1VTRVJERUYoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSx2YWwpICAgICAgICAgICAgIHN0YXRpYyAgZHR5cCAgeERlZiMjaW5kIyNfIyNzdWIjI19nICAgICAgICA9IHZhbDsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVVNFUkRFRl9SRyhpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCxsb3csaGlnaCkgc3RhdGljICBkdHlwICB4RGVmIyNpbmQjI18jI3N1YiMjX2dbM10gICAgID0ge3ZhbCxsb3csaGlnaH07CkBAIC0xMjksMjAgKzEyOSwyMCBAQAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjZGVmaW5lIEVQTF9PQkRfQkVHSU5fSU5ERVhfUkFNKGluZCxjbnQsY2FsbCkKICNkZWZpbmUgRVBMX09CRF9FTkRfSU5ERVgoaW5kKQotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICAgICBzdGF0aWMgZHR5cCAgICAgICAgIE1FTSBheEN1ciMjaW5kIyNfZ1tjbnRdOwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fVkFSQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKLSNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZX05PSU5JVChpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUpICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBNRU0gYVZhckVudHJ5IyNpbmQjI19nW2NudF07CisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9BUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgICAgIHN0YXRpYyBkdHlwICAgICAgICAgYXhDdXIjI2luZCMjX2dbY250XTsKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSxkZWYpICAgICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZX05PSU5JVChpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUpICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKIAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyBkdHlwICAgICAgICAgTUVNIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljIGR0eXAgICAgICAgICBNRU0geEN1ciMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9WU1RSSU5HKGluZCxzdWIsYWNjLG5hbWUsc2l6ZSx2YWwpICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZTdHJpbmcgIE1FTSB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7Ci0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX09TVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplKSAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkT1N0cmluZyAgTUVNIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICAgICAgc3RhdGljIGR0eXAgICAgICAgICBNRU0geEN1ciMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9ET01BSU4oaW5kLHN1YixhY2MsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsKSAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9WQVIoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSx2YWwpICAgICAgICAgICAgICAgICBzdGF0aWMgZHR5cCAgICAgICAgIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljIGR0eXAgICAgICAgICB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZTVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVlN0cmluZyAgeEN1ciMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9PU1RSSU5HKGluZCxzdWIsYWNjLG5hbWUsc2l6ZSkgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZE9TdHJpbmcgIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICAgICAgc3RhdGljIGR0eXAgICAgICAgICB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX0RPTUFJTihpbmQsc3ViLGFjYyxuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVmFyRW50cnkgVmFyRW50cnkjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVVNFUkRFRihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IFZhckVudHJ5IyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1VTRVJERUZfTk9JTklUKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUpICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVmFyRW50cnkgVmFyRW50cnkjI2luZCMjXyMjc3ViIyNfZzsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2VsaWYgZGVmaW5lZCAoRVBMX09CRF9DUkVBVEVfU1VCSU5ERVhfVEFCKQpAQCAtMTU5LDE3ICsxNTksMTcgQEAKICNkZWZpbmUgRVBMX09CRF9FTkRfUEFSVCgpCiAKIAkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBFUExfT0JEX0JFR0lOX0lOREVYX1JBTShpbmQsY250LGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbY250XT0geworI2RlZmluZSBFUExfT0JEX0JFR0lOX0lOREVYX1JBTShpbmQsY250LGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IGFPYmRTdWJFbnRyeSMjaW5kIyNSYW1fZ1tjbnRdPSB7CiAjZGVmaW5lIEVQTF9PQkRfRU5EX0lOREVYKGluZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQTF9PQkRfRU5EX1NVQklOREVYKCl9OwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9BUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgICAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgYU9iZFN1YkVudHJ5IyNpbmQjI1JhbV9nW109IHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCBrRXBsT2JkVHlwVUludDgsIGtFcGxPYmRBY2NDUiwgICAgICAgICAgJnhEZWYjI2luZCMjXzB4MDBfZywgICBOVUxMfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLCB0eXAsICAgICAgICAgIChhY2MpfGtFcGxPYmRBY2NBcnJheSwgJnhEZWYjI2luZCMjXzB4MDFfZywgICAmYXhDdXIjI2luZCMjX2dbMF19LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVBMX09CRF9FTkRfU1VCSU5ERVgoKX07Ci0jZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9WQVJBUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgTUVNIGFPYmRTdWJFbnRyeSMjaW5kIyNSYW1fZ1tdPSB7IFwKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSxkZWYpICAgICAgc3RhdGljIHRFcGxPYmRTdWJFbnRyeSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezAsIGtFcGxPYmRUeXBVSW50OCwga0VwbE9iZEFjY0NSLCAgICAgICAgICAgICAgICAgICAgICZ4RGVmIyNpbmQjI18weDAwX2csICAgTlVMTH0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwgdHlwLCAgICAgICAgICAoYWNjKXxrRXBsT2JkQWNjQXJyYXl8a0VwbE9iZEFjY1ZhciwgJnhEZWYjI2luZCMjXzB4MDFfZywgICAmYVZhckVudHJ5IyNpbmQjI19nWzBdfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQTF9PQkRfRU5EX1NVQklOREVYKCl9OwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fVkFSQVJSQVlfTk9JTklUKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSkgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9WQVJBUlJBWV9OT0lOSVQoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lKSAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgYU9iZFN1YkVudHJ5IyNpbmQjI1JhbV9nW109IHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCBrRXBsT2JkVHlwVUludDgsIGtFcGxPYmRBY2NDUiwgICAgICAgICAgICAgICAgICAgICAmeERlZiMjaW5kIyNfMHgwMF9nLCAgIE5VTEx9LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsIHR5cCwgICAgICAgICAgKGFjYyl8a0VwbE9iZEFjY0FycmF5fGtFcGxPYmRBY2NWYXIsIE5VTEwsICAgICAgICAgICAgICAgICAgJmFWYXJFbnRyeSMjaW5kIyNfZ1swXX0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUExfT0JEX0VORF9TVUJJTkRFWCgpfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2Jka0NhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKaW5kZXggNGM5YWY4OS4uMDJiZDcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKQEAgLTcwLDcgKzcwLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJFcGxJbmMuaCIKLSNpbmNsdWRlICJrZXJuZWwvRXBsT2Jka0NhbC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKaW5kZXggMjE4ZDE1Mi4uNWYxZDk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLCB0RXBsT2JkU2l6ZSBTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1MywxMCArMTUyLDEwIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xNzksOCArMTc4LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCi0JCQkJCQkgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKQordEVwbEtlcm5lbCBFcGxPYmR1QWNjZXNzT2RQYXJ0KHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwgdEVwbE9iZERpciBEaXJlY3Rpb25fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAyLDcgKzIwMCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVEZWZpbmVWYXIodEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxPYmR1RGVmaW5lVmFyKHRFcGxWYXJQYXJhbSAqcFZhclBhcmFtX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIyNiw4ICsyMjQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkdUdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3ZvaWQgKkVwbE9iZHVHZXRPYmplY3REYXRhUHRyKHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdm9pZCAqcERhdGE7CiAKQEAgLTI1MCw3ICsyNDcsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgKGRlZmluZWQgKEVQTF9PQkRfVVNFUl9PRCkgJiYgKEVQTF9PQkRfVVNFUl9PRCAhPSBGQUxTRSkpCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlZ2lzdGVyVXNlck9kKHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCit0RXBsS2VybmVsIEVwbE9iZHVSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yNzUsOSArMjcyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICAgQllURSBiVHlwZV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCkKK3ZvaWQgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeV9wLCB1OCBiVHlwZV9wLCB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApCiB7CiAJRXBsT2JkdUNhbEluaXRWYXJFbnRyeShwVmFyRW50cnlfcCwgYlR5cGVfcCwgT2JkU2l6ZV9wKTsKIH0KQEAgLTI5OSw4ICsyOTQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsT2JkU2l6ZSBQVUJMSUMgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordEVwbE9iZFNpemUgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdEVwbE9iZFNpemUgU2l6ZTsKIApAQCAtMzIzLDcgKzMxNyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkdUdldE5vZGVJZCgpCit1bnNpZ25lZCBpbnQgRXBsT2JkdUdldE5vZGVJZCh2b2lkKQogewogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKIApAQCAtMzQ3LDggKzM0MSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQl0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApCit0RXBsS2VybmVsIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzczLDEwICszNjYsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgcEFjY2Vzc1R5cF9wKQordEVwbEtlcm5lbCBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdEVwbE9iZEFjY2VzcyAqcEFjY2Vzc1R5cF9wKQogewogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKIApAQCAtNDEwLDEwICs0MDIsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5VG9MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcERzdERhdGFfcCwKKwkJCQl0RXBsT2JkU2l6ZSAqcFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtNDQ1LDExICs0MzcsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnlGcm9tTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZHVXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplIFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtNDc1LDExICs0NjYsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1U2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKLQkJCQkJCSAgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqKgotCQkJCQkJICAgICBwcFZhckVudHJ5X3ApCit0RXBsS2VybmVsIEVwbE9iZHVTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkdUNhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKaW5kZXggODViM2RmMC4uNTU2MTJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgICAgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xNTUsMTAgKzE1NCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTg1LDggKzE4Myw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCkKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIxMiw4ICsyMDksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsRGVmaW5lVmFyKHRFcGxWYXJQYXJhbSBNRU0gKgotCQkJCQkJICAgcFZhclBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxEZWZpbmVWYXIodEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjQwLDggKzIzNiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgKlBVQkxJQyBFcGxPYmR1Q2FsR2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordm9pZCAqRXBsT2JkdUNhbEdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl2b2lkICpwRGF0YTsKIApAQCAtMjY4LDggKzI2Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoZGVmaW5lZCAoRVBMX09CRF9VU0VSX09EKSAmJiAoRVBMX09CRF9VU0VSX09EICE9IEZBTFNFKSkKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyCi0JCQkJCQkJcFVzZXJPZF9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjk4LDkgKzI5Miw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5IE1FTSAqCi0JCQkJCQlwVmFyRW50cnlfcCwgQllURSBiVHlwZV9wLAotCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQordm9pZCBFcGxPYmR1Q2FsSW5pdFZhckVudHJ5KHRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5X3AsIHU4IGJUeXBlX3AsCisJCQkgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQogewogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9PQkRLKSkgIT0gMCkKIAlFcGxPYmRJbml0VmFyRW50cnkocFZhckVudHJ5X3AsIGJUeXBlX3AsIE9iZFNpemVfcCk7CkBAIC0zMjQsOCArMzE3LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3RFcGxPYmRTaXplIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl0RXBsT2JkU2l6ZSBTaXplOwogCkBAIC0zNTIsNyArMzQ1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdW5zaWduZWQgaW50IFBVQkxJQyBFcGxPYmR1Q2FsR2V0Tm9kZUlkKCkKK3Vuc2lnbmVkIGludCBFcGxPYmR1Q2FsR2V0Tm9kZUlkKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHVpTm9kZUlkOwogCkBAIC0zODAsOSArMzczLDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgIHRFcGxPYmROb2RlSWRUeXBlCi0JCQkJCQkgICBOb2RlSWRUeXBlX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbE9iZE5vZGVJZFR5cGUgTm9kZUlkVHlwZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00MTEsMTEgKzQwMyw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxHZXRBY2Nlc3NUeXBlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCQkgICAgICAgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgIHRFcGxPYmRBY2Nlc3MgKgotCQkJCQkJICAgICAgIHBBY2Nlc3NUeXBfcCkKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCkKIHsKIAl0RXBsT2JkQWNjZXNzIEFjY2VzVHlwZTsKIApAQCAtNDQ3LDExICs0MzcsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00ODEsMTIgKzQ3MCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludAotCQkJCQkJCSAgdWlJbmRleF9wLAotCQkJCQkJCSAgdW5zaWduZWQgaW50Ci0JCQkJCQkJICB1aVN1YkluZGV4X3AsCi0JCQkJCQkJICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJCSAgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC01MTQsMTAgKzUwMCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgICAgdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iakRlZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmpEZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcxMzEyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iakRlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBkZWZpbmVzIG9iamRpY3QgZGljdGlvbmFyeQotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbE9iakRlZi5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS40ICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgICAgICBHQ0MgVjMuNAotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDYvMDYvMDYgICAgay50LjogICB0YWtlIE9iakRlZi5oIGZyb20gQ0FOb3BlbiBhbmQgbW9kaWZ5IGZvciBFUEwKLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfRVBMT0JKREVGX0hfCi0jZGVmaW5lIF9FUExPQkpERUZfSF8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHNlY3VyaXR5IGNoZWNrcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG1hY3JvcyB0byBoZWxwIGJ1aWxkaW5nIE9ECi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChkZWZpbmVkIChFUExfT0JEX1VTRV9WQVJJQUJMRV9TVUJJTkRFWF9UQUIpICYmIChFUExfT0JEX1VTRV9WQVJJQUJMRV9TVUJJTkRFWF9UQUIgIT0gRkFMU0UpKQotCi0jZGVmaW5lIENDTV9TVUJJTkRFWF9SQU1fT05MWShhKSAgICBhOwotI2RlZmluZSBDQ01fU1VCSU5ERVhfUkFNX09ORU9GKGEsYikgYQotCi0jZWxzZQotCi0jZGVmaW5lIENDTV9TVUJJTkRFWF9SQU1fT05MWShhKQotI2RlZmluZSBDQ01fU1VCSU5ERVhfUkFNX09ORU9GKGEsYikgYgotCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRvIHByZXZlbnQgdW51c2VkIG1lbW9yeSBpbiBzdWJpbmRleCB0YWJsZXMgd2UgbmVlZCB0aGlzIG1hY3JvLgotLy8gQnV0IG5vdCBhbGwgY29tcGlsZXJzIHN1cHBvcnQgdG8gcHJlc2V0IHRoZSBsYXN0IHN0cnVjdCB2YWx1ZSBmb2xsb3dlZCBieSBhIGNvbW1hLgotLy8gQ29tcGlsZXJzIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgYSBjb21tYSBhZnRlciBsYXN0IHN0cnVjdCB2YWx1ZSBoYXMgdG8gcGxhY2UgaW4gYSBkdW1teSBzdWJpbmRleC4KLSNpZiAoKERFVl9TWVNURU0gJiBfREVWX0NPTU1BX0VYVF8pICE9IDApCi0KLSNkZWZpbmUgRVBMX09CRF9FTkRfU1VCSU5ERVgoKQotI2RlZmluZSBFUExfT0JEX01BWF9BUlJBWV9TVUJFTlRSSUVTICAgIDIKLQotI2Vsc2UKLQotI2RlZmluZSBFUExfT0JEX0VORF9TVUJJTkRFWCgpICAgICAgICAgIHswLDAsMCxOVUxMLE5VTEx9Ci0jZGVmaW5lIEVQTF9PQkRfTUFYX0FSUkFZX1NVQkVOVFJJRVMgICAgMwotCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBnbG9iYWxlIHZhcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjcmVhdGlvbiBvZiBkYXRhIGluIFJPTSBtZW1vcnkKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfUk9NX0RBVEEKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfUk9NX0RBVEEKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY3JlYXRpb24gb2YgZGF0YSBpbiBSQU0gbWVtb3J5Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfUkFNX0RBVEEKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfUkFNX0RBVEEKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY3JlYXRpb24gb2Ygc3ViaW5kZXggdGFibGVzIGluIFJPTSBhbmQgUkFNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfU1VCSU5ERVhfVEFCCi0jaW5jbHVkZSAib2JqZGljdC5oIgotI3VuZGVmIEVQTF9PQkRfQ1JFQVRFX1NVQklOREVYX1RBQgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjcmVhdGlvbiBvZiBpbmRleCB0YWJsZXMgZm9yIGdlbmVyaWMsIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIHBhcnQKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBFUExfT0JEX0NSRUFURV9JTkRFWF9UQUIKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfSU5ERVhfVEFCCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBVIEIgTCBJIEMgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVQTF9PQkRfSU5JVF9SQU1fTkFNRSgpCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgb2JqZWN0IGRpY3Rpb25hcnkKLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcEluaXRQYXJhbV9wICAgID0gcG9pbnRlciB0byBpbml0IHBhcmFtIHN0cnVjdCBvZiBFcGwKLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgICAgID0gZXJyb3IgY29kZQotLy8KLS8vIFN0YXRlOgotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVQTF9PQkRfSU5JVF9SQU1fTkFNRSh0RXBsT2JkSW5pdFBhcmFtIE1FTSAqCi0JCQkJCQkgICAgIHBJbml0UGFyYW1fcCkKLXsKLQotCXRFcGxPYmRJbml0UGFyYW0gTUVNICpwSW5pdFBhcmFtID0gcEluaXRQYXJhbV9wOwotCi0JLy8gY2hlY2sgaWYgcG9pbnRlciB0byBwYXJhbWV0ZXIgc3RydWN0dXJlIGlzIHZhbGlkCi0JLy8gaWYgbm90IHRoZW4gb25seSBjb3B5IHN1YmluZGV4IHRhYmxlcyBiZWxvdwotCWlmIChwSW5pdFBhcmFtICE9IE5VTEwpIHsKLQkJLy8gYXQgZmlyc3QgZGVsZXRlIGFsbCBwYXJhbWV0ZXJzIChhbGwgcG9pbnRlcnMgd2lsbCBiZSBzZXQgenUgTlVMTCkKLQkJRVBMX01FTVNFVChwSW5pdFBhcmFtLCAwLCBzaXplb2YodEVwbE9iZEluaXRQYXJhbSkpOwotCi0jZGVmaW5lIEVQTF9PQkRfQ1JFQVRFX0lOSVRfRlVOQ1RJT04KLQkJewotCQkJLy8gaW5zZXJ0cyBjb2RlIHRvIGluaXQgcG9pbnRlciB0byBpbmRleCB0YWJsZXMKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0JCX0KLSN1bmRlZiBFUExfT0JEX0NSRUFURV9JTklUX0ZVTkNUSU9OCi0KLSNpZiAoZGVmaW5lZCAoRVBMX09CRF9VU0VSX09EKSAmJiAoRVBMX09CRF9VU0VSX09EICE9IEZBTFNFKSkKLQkJewotCQkJLy8gdG8gYmVnaW4gbm8gdXNlciBPRCBpcyBkZWZpbmVkCi0JCQlwSW5pdFBhcmFtX3AtPm1fcFVzZXJQYXJ0ID0gTlVMTDsKLQkJfQotI2VuZGlmCi0JfQotI2RlZmluZSBFUExfT0JEX0NSRUFURV9JTklUX1NVQklOREVYCi0JewotCQkvLyBpbnNlcnRzIGNvZGUgdG8gY29weSBzdWJpbmRleCB0YWJsZXMKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0JfQotI3VuZGVmIEVQTF9PQkRfQ1JFQVRFX0lOSVRfU1VCSU5ERVgKLQotCXJldHVybiBrRXBsU3VjY2Vzc2Z1bDsKLQotfQotCi0jZW5kaWYgLy8gX0VQTE9CSkRFRl9IXwotCi0vLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgotLy8gZGFtaXQgZWluIFByb2JsZW0gaGFiZW4sIHdlbm4gZGFzIG5pY2h0IHNvIGlzdCAoei5CLiBHTlUgb2RlciBCb3JsYW5kIEMrKyBCdWlsZGVyKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkby5oCmluZGV4IGQyMmFjODYuLjBiM2FkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxQZG8uaApAQCAtOTAsOCArOTAsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9pZCAqbV9wVmFyOwotCVdPUkQgbV93T2Zmc2V0OwkJLy8gaW4gQml0cwotCVdPUkQgbV93U2l6ZTsJCS8vIGluIEJpdHMKKwl1MTYgbV93T2Zmc2V0OwkJLy8gaW4gQml0cworCXUxNiBtX3dTaXplOwkJLy8gaW4gQml0cwogCUJPT0wgbV9mTnVtZXJpYzsJLy8gbnVtZXJpYyB2YWx1ZSAtPiB1c2UgQU1JIGZ1bmN0aW9ucwogCiB9IHRFcGxQZG9NYXBwaW5nOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJLy8gICAgICAgICAgICAgICBUUERPOiAweDAwPVBSZXMsIE1OOiBDbk5vZGVJZD1QUmVxCiAKIAlCT09MIG1fZlR4Ung7Ci0JQllURSBtX2JNYXBwaW5nVmVyc2lvbjsKKwl1OCBtX2JNYXBwaW5nVmVyc2lvbjsKIAl1bnNpZ25lZCBpbnQgbV91aU1heE1hcHBpbmdFbnRyaWVzOwkvLyBtYXhpbXVtIG51bWJlciBvZiBtYXBwaW5nIGVudHJpZXMsIGkuZS4gc2l6ZSBvZiBtX2FQZG9NYXBwaW5nCiAJdEVwbFBkb01hcHBpbmcgbV9hUGRvTWFwcGluZ1sxXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxQZG9rLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYwppbmRleCAxNTk5OWI0Li5kYjliM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYwpAQCAtNzMsMTEgKzczLDYgQEAKICNpbmNsdWRlICJrZXJuZWwvRXBsRXZlbnRrLmgiCiAjaW5jbHVkZSAia2VybmVsL0VwbE9iZGsuaCIKIAotI2lmIChERVZfU1lTVEVNID09IF9ERVZfR05VX0NGNTQ4WF8pCi0jaW5jbHVkZSAicGxjY29yZS5oIgotI2RlZmluZSBQRE9fTEVEIDB4MDgKLSNlbmRpZgotCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9QRE9LKSkgIT0gMCkKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfRExMSykpID09IDApCkBAIC0yMjYsMTEgKzIyMSw2IEBACiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsRXZlbnQgRXZlbnQ7CiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotCS8vIHJlc2V0IExFRAotLy8gICAgTUNGX0dQSU9fUE9EUl9QQ0lCRyAmPSB+UERPX0xFRDsgIC8vIExldmVsCi0jZW5kaWYKLQogCUV2ZW50Lm1fRXZlbnRTaW5rID0ga0VwbEV2ZW50U2lua1Bkb2s7CiAJRXZlbnQubV9FdmVudFR5cGUgPSBrRXBsRXZlbnRUeXBlUGRvUng7CiAJLy8gbGltaXQgY29waWVkIGRhdGEgdG8gc2l6ZSBvZiBQRE8gKGJlY2F1c2UgZnJvbSBzb21lIENOcyB0aGUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4gbmVjZXNzYXJ5KQpAQCAtMjM4LDExICsyMjgsNiBAQAogCUV2ZW50Lm1fcEFyZyA9IHBGcmFtZUluZm9fcC0+bV9wRnJhbWU7CiAJUmV0ID0gRXBsRXZlbnRrUG9zdCgmRXZlbnQpOwogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9HTlVfQ0Y1NDhYXykKLQkvLyBzZXQgTEVECi0vLyAgICBNQ0ZfR1BJT19QT0RSX1BDSUJHIHw9IFBET19MRUQ7ICAvLyBMZXZlbAotI2VuZGlmCi0KIAlyZXR1cm4gUmV0OwogfQogCkBAIC0yNjksMjIgKzI1NCwxMiBAQAogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbEV2ZW50IEV2ZW50OwogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9HTlVfQ0Y1NDhYXykKLQkvLyByZXNldCBMRUQKLQlNQ0ZfR1BJT19QT0RSX1BDSUJHICY9IH5QRE9fTEVEOwkvLyBMZXZlbAotI2VuZGlmCi0KIAlFdmVudC5tX0V2ZW50U2luayA9IGtFcGxFdmVudFNpbmtQZG9rOwogCUV2ZW50Lm1fRXZlbnRUeXBlID0ga0VwbEV2ZW50VHlwZVBkb1R4OwogCUV2ZW50Lm1fdWlTaXplID0gc2l6ZW9mKHRFcGxGcmFtZUluZm8pOwogCUV2ZW50Lm1fcEFyZyA9IHBGcmFtZUluZm9fcDsKIAlSZXQgPSBFcGxFdmVudGtQb3N0KCZFdmVudCk7CiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotCS8vIHNldCBMRUQKLQlNQ0ZfR1BJT19QT0RSX1BDSUJHIHw9IFBET19MRUQ7CS8vIExldmVsCi0jZW5kaWYKLQogCXJldHVybiBSZXQ7CiB9CiAKQEAgLTMzOSwxOSArMzE0LDE5IEBACiB0RXBsS2VybmVsIEVwbFBkb2tQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JV09SRCB3UGRvU2l6ZTsKLQlXT1JEIHdCaXRPZmZzZXQ7Ci0JV09SRCB3Qml0U2l6ZTsKLQlXT1JEIHdWYXJTaXplOwotCVFXT1JEIHF3T2JqZWN0TWFwcGluZzsKLQlCWVRFIGJNYXBwU3ViaW5kZXg7Ci0JQllURSBiT2JkU3ViaW5kZXg7Ci0JV09SRCB3T2JkTWFwcEluZGV4OwotCVdPUkQgd09iZENvbW1JbmRleDsKLQlXT1JEIHdQZG9JZDsKLQlCWVRFIGJPYmREYXRhOwotCUJZVEUgYk9iamVjdENvdW50OwotCUJZVEUgYkZyYW1lRGF0YTsKKwl1MTYgd1Bkb1NpemU7CisJdTE2IHdCaXRPZmZzZXQ7CisJdTE2IHdCaXRTaXplOworCXUxNiB3VmFyU2l6ZTsKKwl1NjQgcXdPYmplY3RNYXBwaW5nOworCXU4IGJNYXBwU3ViaW5kZXg7CisJdTggYk9iZFN1YmluZGV4OworCXUxNiB3T2JkTWFwcEluZGV4OworCXUxNiB3T2JkQ29tbUluZGV4OworCXUxNiB3UGRvSWQ7CisJdTggYk9iZERhdGE7CisJdTggYk9iamVjdENvdW50OworCXU4IGJGcmFtZURhdGE7CiAJQk9PTCBmVmFsaWQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAl0RXBsRnJhbWUgKnBGcmFtZTsKQEAgLTQ0OCw3ICs0MjMsNyBAQAogCQkJLy8gcHJvY2VzcyBtYXBwaW5nCiAJCQlmb3IgKGJNYXBwU3ViaW5kZXggPSAxOyBiTWFwcFN1YmluZGV4IDw9IGJPYmplY3RDb3VudDsKIAkJCSAgICAgYk1hcHBTdWJpbmRleCsrKSB7Ci0JCQkJT2JkU2l6ZSA9IDg7CS8vIFFXT1JECisJCQkJT2JkU2l6ZSA9IDg7CS8vIHU2NAogCQkJCS8vIHJlYWQgb2JqZWN0IG1hcHBpbmcgZnJvbSBPRAogCQkJCVJldCA9CiAJCQkJICAgIEVwbE9iZFJlYWRFbnRyeSh3T2JkTWFwcEluZGV4LApAQCAtNDYzLDE2ICs0MzgsMTYgQEAKIAkJCQl9CiAJCQkJLy8gZGVjb2RlIG9iamVjdCBtYXBwaW5nCiAJCQkJd09iZENvbW1JbmRleCA9Ci0JCQkJICAgIChXT1JEKSAocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAweDAwMDAwMDAwMDAwMEZGRkZMTCk7CiAJCQkJYk9iZFN1YmluZGV4ID0KLQkJCQkgICAgKEJZVEUpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHU4KSAoKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAgMHgwMDAwMDAwMDAwRkYwMDAwTEwpID4+IDE2KTsKIAkJCQl3Qml0T2Zmc2V0ID0KLQkJCQkgICAgKFdPUkQpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4MDAwMEZGRkYwMDAwMDAwMExMKSA+PiAzMik7CiAJCQkJd0JpdFNpemUgPQotCQkJCSAgICAoV09SRCkgKChxd09iamVjdE1hcHBpbmcgJgorCQkJCSAgICAodTE2KSAoKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAgMHhGRkZGMDAwMDAwMDAwMDAwTEwpID4+IDQ4KTsKIAogCQkJCS8vIGNoZWNrIGlmIG9iamVjdCBleGNlZWRzIFBETyBzaXplCkBAIC01NzgsNyArNTUzLDcgQEAKIAkJCS8vIHByb2Nlc3MgbWFwcGluZwogCQkJZm9yIChiTWFwcFN1YmluZGV4ID0gMTsgYk1hcHBTdWJpbmRleCA8PSBiT2JqZWN0Q291bnQ7CiAJCQkgICAgIGJNYXBwU3ViaW5kZXgrKykgewotCQkJCU9iZFNpemUgPSA4OwkvLyBRV09SRAorCQkJCU9iZFNpemUgPSA4OwkvLyB1NjQKIAkJCQkvLyByZWFkIG9iamVjdCBtYXBwaW5nIGZyb20gT0QKIAkJCQlSZXQgPQogCQkJCSAgICBFcGxPYmRSZWFkRW50cnkod09iZE1hcHBJbmRleCwKQEAgLTU5MywyMSArNTY4LDIxIEBACiAJCQkJfQogCQkJCS8vIGRlY29kZSBvYmplY3QgbWFwcGluZwogCQkJCXdPYmRDb21tSW5kZXggPQotCQkJCSAgICAoV09SRCkgKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1MTYpIChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgMHgwMDAwMDAwMDAwMDBGRkZGTEwpOwogCQkJCWJPYmRTdWJpbmRleCA9Ci0JCQkJICAgIChCWVRFKSAoKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1OCkgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4MDAwMDAwMDAwMEZGMDAwMExMKSA+PiAxNik7CiAJCQkJd0JpdE9mZnNldCA9Ci0JCQkJICAgIChXT1JEKSAoKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1MTYpICgocXdPYmplY3RNYXBwaW5nICYKIAkJCQkJICAgICAweDAwMDBGRkZGMDAwMDAwMDBMTCkgPj4gMzIpOwogCQkJCXdCaXRTaXplID0KLQkJCQkgICAgKFdPUkQpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4RkZGRjAwMDAwMDAwMDAwMExMKSA+PiA0OCk7CiAKIAkJCQkvLyBjYWxjdWxhdGUgbWF4IFBETyBzaXplCiAJCQkJT2JkU2l6ZSA9IHdCaXRTaXplID4+IDM7Ci0JCQkJd1ZhclNpemUgPSAod0JpdE9mZnNldCA+PiAzKSArIChXT1JEKSBPYmRTaXplOworCQkJCXdWYXJTaXplID0gKHdCaXRPZmZzZXQgPj4gMykgKyAodTE2KSBPYmRTaXplOwogCQkJCWlmICgodW5zaWduZWQgaW50KSh3VmFyU2l6ZSArIDI0KSA+IHBGcmFtZUluZm8tPm1fdWlGcmFtZVNpemUpIHsJLy8gVFBETyBpcyB0b28gc2hvcnQKIAkJCQkJLy8gJCQkIHJhaXNlIFBETyBlcnJvciwgc2V0IFJldAogCQkJCQlnb3RvIEV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb3UuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCmluZGV4IGU3YjEwNjUuLmQ2ZDA2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCkBAIC0xNDksMTggKzE0OSwxOCBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrUGRvVmFsaWRpdHkodEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tQZG9WYWxpZGl0eSh0RXBsT2JkQ2JQYXJhbSAqcFBhcmFtX3AsCiAJCQkJCSAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCk7CiAKLXN0YXRpYyB2b2lkIEVwbFBkb3VEZWNvZGVPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHZvaWQgRXBsUGRvdURlY29kZU9iamVjdE1hcHBpbmcodTY0IHF3T2JqZWN0TWFwcGluZ19wLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1aUluZGV4X3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHVpU3ViSW5kZXhfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlCaXRPZmZzZXRfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlCaXRTaXplX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyh1NjQgcXdPYmplY3RNYXBwaW5nX3AsCiAJCQkJCSAgICB0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGVfcCwKLQkJCQkJICAgIERXT1JEICogcGR3QWJvcnRDb2RlX3AsCisJCQkJCSAgICB1MzIgKiBwZHdBYm9ydENvZGVfcCwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqcHVpUGRvU2l6ZV9wKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KQEAgLTIyNiwxOCArMjI2LDE4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsUGRvdUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gKnBQYXJhbV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpUGRvSWQ7CiAJdW5zaWduZWQgaW50IHVpSW5kZXhUeXBlOwogCXRFcGxPYmRTaXplIE9iZFNpemU7Ci0JQllURSBiT2JqZWN0Q291bnQ7Ci0JUVdPUkQgcXdPYmplY3RNYXBwaW5nOworCXU4IGJPYmplY3RDb3VudDsKKwl1NjQgcXdPYmplY3RNYXBwaW5nOwogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKLQlCWVRFIGJNYXBwU3ViaW5kZXg7CisJdTggYk1hcHBTdWJpbmRleDsKIAl1bnNpZ25lZCBpbnQgdWlDdXJQZG9TaXplOwotCVdPUkQgd01heFBkb1NpemU7CisJdTE2IHdNYXhQZG9TaXplOwogCXVuc2lnbmVkIGludCB1aVN1YkluZGV4OwogCiAJLy8gZmV0Y2ggUERPIElECkBAIC0yOTMsNyArMjkzLDcgQEAKIAlpZiAocFBhcmFtX3AtPm1fdWlTdWJJbmRleCA9PSAwKSB7CS8vIG9iamVjdCBtYXBwaW5nIGNvdW50IGFjY2Vzc2VkCiAKIAkJLy8gUERPIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKLQkJYk9iamVjdENvdW50ID0gKigoQllURSAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKKwkJYk9iamVjdENvdW50ID0gKigodTggKikgcFBhcmFtX3AtPm1fcEFyZyk7CiAKIAkJaWYgKGJPYmplY3RDb3VudCA9PSAwKSB7CS8vIFBETyBzaGFsbCBiZSBkaXNhYmxlZAogCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJZm9yIChiTWFwcFN1YmluZGV4ID0gMTsgYk1hcHBTdWJpbmRleCA8PSBiT2JqZWN0Q291bnQ7CiAJCSAgICAgYk1hcHBTdWJpbmRleCsrKSB7CiAJCQkvLyByZWFkIG9iamVjdCBtYXBwaW5nIGZyb20gT0QKLQkJCU9iZFNpemUgPSBzaXplb2YocXdPYmplY3RNYXBwaW5nKTsJLy8gUVdPUkQKKwkJCU9iZFNpemUgPSBzaXplb2YocXdPYmplY3RNYXBwaW5nKTsJLy8gdTY0CiAJCQlSZXQgPSBFcGxPYmR1UmVhZEVudHJ5KHBQYXJhbV9wLT5tX3VpSW5kZXgsCiAJCQkJCSAgICAgICBiTWFwcFN1YmluZGV4LCAmcXdPYmplY3RNYXBwaW5nLAogCQkJCQkgICAgICAgJk9iZFNpemUpOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCX0KIAkJLy8gY2hlY2sgZXhpc3RlbmNlIG9mIG9iamVjdCBhbmQgdmFsaWRpdHkgb2Ygb2JqZWN0IGxlbmd0aAogCi0JCXF3T2JqZWN0TWFwcGluZyA9ICooKFFXT1JEICopIHBQYXJhbV9wLT5tX3BBcmcpOworCQlxd09iamVjdE1hcHBpbmcgPSAqKCh1NjQgKikgcFBhcmFtX3AtPm1fcEFyZyk7CiAKIAkJUmV0ID0gRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyhxd09iamVjdE1hcHBpbmcsCiAJCQkJCQlBY2Nlc3NUeXBlLApAQCAtMzk0LDEyICszOTQsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tQZG9WYWxpZGl0eSh0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwUGFyYW1fcCwKK3N0YXRpYyB0RXBsS2VybmVsIEVwbFBkb3VDaGVja1Bkb1ZhbGlkaXR5KHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJPYmplY3RDb3VudDsKKwl1OCBiT2JqZWN0Q291bnQ7CiAKIAlPYmRTaXplID0gMTsKIAkvLyByZWFkIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cyBmcm9tIE9EOyB0aGlzIGluZGljYXRlcyBpZiB0aGUgUERPIGlzIHZhbGlkCkBAIC00MzksNyArNDM5LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdm9pZCBFcGxQZG91RGVjb2RlT2JqZWN0TWFwcGluZyhRV09SRCBxd09iamVjdE1hcHBpbmdfcCwKK3N0YXRpYyB2b2lkIEVwbFBkb3VEZWNvZGVPYmplY3RNYXBwaW5nKHU2NCBxd09iamVjdE1hcHBpbmdfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlJbmRleF9wLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1aVN1YkluZGV4X3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHVpQml0T2Zmc2V0X3AsCkBAIC00ODAsOSArNDgwLDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyh1NjQgcXdPYmplY3RNYXBwaW5nX3AsCiAJCQkJCSAgICB0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGVfcCwKLQkJCQkJICAgIERXT1JEICogcGR3QWJvcnRDb2RlX3AsCisJCQkJCSAgICB1MzIgKiBwZHdBYm9ydENvZGVfcCwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqcHVpUGRvU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkby5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG8uaAppbmRleCAxY2IzZjJkLi44MDAyZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvLmgKQEAgLTExNiwyMCArMTE2LDE4IEBACiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIFByb3RvY29sIEFic3RyYWN0aW9uIExheWVyIHRvIGNhbGwKIC8vIGFzeW5jaHJvbnV1cyBTRE8gU2VxdWVuY2UgTGF5ZXIKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU2VxdUxheWVyUmVjZWl2ZUNiKSAodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKLQkJCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqCi0JCQkJCQkgICAgIHBTZG9TZXFEYXRhX3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCp0RXBsU2VxdUxheWVyUmVjZWl2ZUNiKSAodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKKwkJCQkJICAgICB0RXBsQXN5U2RvU2VxICpwU2RvU2VxRGF0YV9wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwogCiAvLyBoYW5kbGUgYmV0d2VlbiBhc3luY2hyb251dXMgU0RPIFNlcXVlbmNlIExheWVyIGFuZCBTRE8gQ29tbWFuZCBsYXllcgogdHlwZWRlZiB1bnNpZ25lZCBpbnQgdEVwbFNkb1NlcUNvbkhkbDsKIAogLy8gY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciBmb3IgYXN5bmNocm9udXVzIFNETyBTZXF1ZW5jZSBMYXllciB0byBjYWxsCiAvLyBTRE8gQ29tbWFuZCBsYXllciBmb3IgcmVjZWl2ZWQgZGF0YQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxTZG9Db21SZWNlaXZlQ2IpICh0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAotCQkJCQkgdEVwbEFzeVNkb0NvbSAqIHBBc3lTZG9Db21fcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFNkb0NvbVJlY2VpdmVDYikgKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkJCSAgIHRFcGxBc3lTZG9Db20gKnBBc3lTZG9Db21fcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKIC8vIHN0YXR1cyBvZiBjb25uZWN0aW9uCiB0eXBlZGVmIGVudW0gewpAQCAtMTQzLDkgKzE0MSw4IEBACiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIGFzeW5jaHJvbnV1cyBTRE8gU2VxdWVuY2UgTGF5ZXIgdG8gY2FsbAogLy8gU0RPIENvbW1hbmQgbGF5ZXIgZm9yIGNvbm5lY3Rpb24gc3RhdHVzCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbFNkb0NvbUNvbkNiKSAodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkJICAgICAgdEVwbEFzeVNkb0NvblN0YXRlCi0JCQkJCSAgICAgIEFzeVNkb0NvblN0YXRlX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFNkb0NvbUNvbkNiKSAodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQkgICAgICAgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApOwogCiAvLyBoYW5kbGUgYmV0d2VlbiAgU0RPIENvbW1hbmQgbGF5ZXIgYW5kIGFwcGxpY2F0aW9uCiB0eXBlZGVmIHVuc2lnbmVkIGludCB0RXBsU2RvQ29tQ29uSGRsOwpAQCAtMjEwLDcgKzIwNyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbFNkb0NvbUNvbkhkbCBtX1Nkb0NvbUNvbkhkbDsKIAl0RXBsU2RvQ29tQ29uU3RhdGUgbV9TZG9Db21Db25TdGF0ZTsKLQlEV09SRCBtX2R3QWJvcnRDb2RlOworCXUzMiBtX2R3QWJvcnRDb2RlOwogCXRFcGxTZG9BY2Nlc3NUeXBlIG1fU2RvQWNjZXNzVHlwZTsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkIG9mIHRoZSB0YXJnZXQKIAl1bnNpZ25lZCBpbnQgbV91aVRhcmdldEluZGV4OwkvLyBpbmRleCB3aGljaCB3YXMgYWNjZXNzZWQKQEAgLTIyMSw4ICsyMTgsNyBAQAogfSB0RXBsU2RvQ29tRmluaXNoZWQ7CiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW5mb3JtIGFwcGxpY2F0aW9uIGFib3V0IGNvbm5lY3Rpb24KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU2RvRmluaXNoZWRDYikgKHRFcGxTZG9Db21GaW5pc2hlZCAqCi0JCQkJCQlwU2RvQ29tRmluaXNoZWRfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsU2RvRmluaXNoZWRDYikgKHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApOwogCiAvLyBzdHJ1Y3R1cmUgdG8gaW5pdCBTRE8gdHJhbnNmZXIgdG8gUmVhZCBvciBXcml0ZSBieSBJbmRleAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Bc25kdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Bc25kdS5jCmluZGV4IDA1YTAwYzkuLmFhOGJkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXNuZHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0FzbmR1LmMKQEAgLTExMCw3ICsxMTAsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVDYih0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVDYih0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc25kdUFkZEluc3RhbmNlKHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjUxLDggKzI1MSw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKiBwU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50OwpAQCAtMzE5LDkgKzMxOSw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsCi0JCQkJICAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc25kdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICAgdEVwbEZyYW1lICpwU3JjRGF0YV9wLAorCQkJICAgICAgIHUzMiBkd0RhdGFTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC0zMzksMTAgKzMzOSwxMCBAQAogCS8vIG93biBub2RlIGlkIG5vdCBuZWVkZWQgLT4gZmlsbGVkIGJ5IERMTAogCiAJLy8gc2V0IG1lc3NhZ2UgdHlwZQotCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JNZXNzYWdlVHlwZSwgKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCk7CS8vIEFTbmQgPT0gMHgwNgorCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JNZXNzYWdlVHlwZSwgKHU4KSBrRXBsTXNnVHlwZUFzbmQpOwkvLyBBU25kID09IDB4MDYKIAkvLyB0YXJnZXQgbm9kZSBpZAogCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JEc3ROb2RlSWQsCi0JCSAgICAgICAoQllURSkgU2RvQXNuZEluc3RhbmNlX2cuCisJCSAgICAgICAodTgpIFNkb0FzbmRJbnN0YW5jZV9nLgogCQkgICAgICAgbV9hdWlTZG9Bc25kQ29ubmVjdGlvblt1aUFycmF5XSk7CiAJLy8gc2V0IHNvdXJjZS1ub2RlaWQgKGZpbGxlZCBieSBETEwgMCkKIAlBbWlTZXRCeXRlVG9MZSgmcFNyY0RhdGFfcC0+bV9sZV9iU3JjTm9kZUlkLCAweDAwKTsKQEAgLTM3OSw3ICszNzksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC00MjIsNyArNDIyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUNiKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1Q2IodEVwbEZyYW1lSW5mbyAqcEZyYW1lSW5mb19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0FzeVNlcXUuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCmluZGV4IDZiNmE5OTcuLjI1NmQ3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCkBAIC0xMjgsMTEgKzEyOCwxMSBAQAogCiAvLyBzdHJ1Y3R1cmUgZm9yIEhpc3RvcnktQnVmZmVyCiB0eXBlZGVmIHN0cnVjdCB7Ci0JQllURSBtX2JGcmVlRW50cmllczsKLQlCWVRFIG1fYldyaXRlOwkJLy8gaW5kZXggb2YgdGhlIG5leHQgZnJlZSBidWZmZXIgZW50cnkKLQlCWVRFIG1fYkFjazsJCS8vIGluZGV4IG9mIHRoZSBuZXh0IG1lc3NhZ2Ugd2hpY2ggc2hvdWxkIGJlY29tZSBhY2tub3dsZWRnZWQKLQlCWVRFIG1fYlJlYWQ7CQkvLyBpbmRleCBiZXR3ZWVuIG1fYkFjayBhbmQgbV9iV3JpdGUgdG8gdGhlIG5leHQgbWVzc2FnZSBmb3IgcmV0cmFuc21pc3Npb24KLQlCWVRFIG1fYWFiSGlzdG9yeUZyYW1lW0VQTF9TRE9fSElTVE9SWV9TSVpFXQorCXU4IG1fYkZyZWVFbnRyaWVzOworCXU4IG1fYldyaXRlOwkJLy8gaW5kZXggb2YgdGhlIG5leHQgZnJlZSBidWZmZXIgZW50cnkKKwl1OCBtX2JBY2s7CQkvLyBpbmRleCBvZiB0aGUgbmV4dCBtZXNzYWdlIHdoaWNoIHNob3VsZCBiZWNvbWUgYWNrbm93bGVkZ2VkCisJdTggbV9iUmVhZDsJCS8vIGluZGV4IGJldHdlZW4gbV9iQWNrIGFuZCBtX2JXcml0ZSB0byB0aGUgbmV4dCBtZXNzYWdlIGZvciByZXRyYW5zbWlzc2lvbgorCXU4IG1fYWFiSGlzdG9yeUZyYW1lW0VQTF9TRE9fSElTVE9SWV9TSVpFXQogCSAgICBbRVBMX1NFUV9ISVNUUk9ZX0ZSQU1FX1NJWkVdOwogCXVuc2lnbmVkIGludCBtX2F1aUZyYW1lU2l6ZVtFUExfU0RPX0hJU1RPUllfU0laRV07CiAKQEAgLTE1Miw4ICsxNTIsOCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXRFcGxTZG9Db25IZGwgbV9Db25IYW5kbGU7CiAJdEVwbEFzeVNkb1N0YXRlIG1fU2RvU3RhdGU7Ci0JQllURSBtX2JSZWNTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKLQlCWVRFIG1fYlNlbmRTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKKwl1OCBtX2JSZWNTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKKwl1OCBtX2JTZW5kU2VxTnVtOwkvLyBuYW1lIGZyb20gdmlldyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwYXJ0bmVyCiAJdEVwbEFzeVNkb0Nvbkhpc3RvcnkgbV9TZG9Db25IaXN0b3J5OwogCXRFcGxUaW1lckhkbCBtX0VwbFRpbWVySGRsOwogCXVuc2lnbmVkIGludCBtX3VpUmV0cnlDb3VudDsJLy8gcmV0cnkgY291bnRlcgpAQCAtMjAzLDkgKzIwMyw5IEBACiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCwKIAkJCQkJICAgICB0RXBsRnJhbWUgKiBwRXBsRnJhbWVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVJlY2VpdmVDYih0RXBsU2RvQ29uSGRsIENvbkhkbF9wLAotCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqIHBTZG9TZXFEYXRhX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5UmVjZWl2ZUNiKHRFcGxTZG9Db25IZGwgQ29uSGRsX3AsCisJCQkgICAgICB0RXBsQXN5U2RvU2VxICpwU2RvU2VxRGF0YV9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0FzeUluaXRIaXN0b3J5KHZvaWQpOwogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Bc3lBY2tGcmFtZVRvSGlzdG9yeSh0RXBsQXN5U2RvU2VxQ29uICogcEFzeVNkb1NlcUNvbl9wLAotCQkJCQkgICAgIEJZVEUgYlJlY1NlcU51bWJlcl9wKTsKKwkJCQkJICAgICB1OCBiUmVjU2VxTnVtYmVyX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Bc3lSZWFkRnJvbUhpc3RvcnkodEVwbEFzeVNkb1NlcUNvbiAqIHBBc3lTZG9TZXFDb25fcCwKIAkJCQkJICAgdEVwbEZyYW1lICoqIHBwRnJhbWVfcCwKQEAgLTI2Nyw4ICsyNjcsOCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcUluaXQodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCi0JCQkJICAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdCh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKKwkJCSAgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yOTcsOCArMjk3LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKLQkJCQkJICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKKwkJCQkgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zODAsNyArMzgwLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CkBAIC00MzksOSArNDM5LDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFJbml0Q29uKHRFcGxTZG9TZXFDb25IZGwgKiBwU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdENvbih0RXBsU2RvU2VxQ29uSGRsICpwU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlDb3VudDsKQEAgLTU5NCw5ICs1OTQsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVNlbmREYXRhKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3AsCi0JCQkJICAgICAgIHRFcGxGcmFtZSAqIHBhYkRhdGFfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxU2VuZERhdGEodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wLAorCQkJCXRFcGxGcmFtZSAqcGFiRGF0YV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUhhbmRsZTsKQEAgLTY0MCw3ICs2NDAsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFRpbWVyRXZlbnRBcmcgKnBUaW1lckV2ZW50QXJnOwpAQCAtNzE0LDcgKzcxNCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxRGVsQ29uKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbENvbih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpSGFuZGxlOwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAkJCQkvLyBmcmFtZSByZWNlaXZlZAogCQkJY2FzZSBrQXN5U2RvU2VxRXZlbnRGcmFtZVJlYzoKIAkJCQl7Ci0JCQkJCUJZVEUgYlNlbmRTZXFOdW1Db24gPQorCQkJCQl1OCBiU2VuZFNlcU51bUNvbiA9CiAJCQkJCSAgICBBbWlHZXRCeXRlRnJvbUxlKCZwUmVjRnJhbWVfcC0+CiAJCQkJCQkJICAgICBtX2xlX2JTZW5kU2VxTnVtQ29uKTsKIApAQCAtMjAxNiw3ICsyMDE2LDcgQEAKIAkJCQkJIEJPT0wgZkZyYW1lSW5IaXN0b3J5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9TRVFfRlJBTUVfU0laRV07CisJdTggYWJGcmFtZVtFUExfU0VRX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEVwbEZyYW1lOwogCXVuc2lnbmVkIGludCB1aUZyZWVFbnRyaWVzOwogCkBAIC0yMTM5LDkgKzIxMzksOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVJlY2VpdmVDYih0RXBsU2RvQ29uSGRsIENvbkhkbF9wLAotCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqIHBTZG9TZXFEYXRhX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc3lSZWNlaXZlQ2IodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKKwkJCSAgICAgIHRFcGxBc3lTZG9TZXEgKnBTZG9TZXFEYXRhX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50ID0gMDsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAjZW5kaWYKIAogCUVQTF9EQkdMVkxfU0RPX1RSQUNFMigiSGFuZGxlOiAweCV4ICwgRmlyc3QgRGF0YWJ5dGUgMHgleFxuIiwgQ29uSGRsX3AsCi0JCQkgICAgICAoKEJZVEUgKikgcFNkb1NlcURhdGFfcClbMF0pOworCQkJICAgICAgKCh1OCAqKSBwU2RvU2VxRGF0YV9wKVswXSk7CiAKIAkvLyBzZWFyY2ggY29udHJvbGwgc3RydWN0dXJlIGZvciB0aGlzIGNvbm5lY3Rpb24KIAlwQXN5U2RvU2VxQ29uID0gJkFzeVNkb1NlcXVJbnN0YW5jZV9nLm1fQXN5U2RvQ29ubmVjdGlvblt1aUNvdW50XTsKQEAgLTIzMjgsMTIgKzIzMjgsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHRFcGxLZXJuZWwgRXBsU2RvQXN5QWNrRnJhbWVUb0hpc3RvcnkodEVwbEFzeVNkb1NlcUNvbiAqIHBBc3lTZG9TZXFDb25fcCwKLQkJCQkJICAgICBCWVRFIGJSZWNTZXFOdW1iZXJfcCkKKwkJCQkJICAgICB1OCBiUmVjU2VxTnVtYmVyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFzeVNkb0Nvbkhpc3RvcnkgKnBIaXN0b3J5OwotCUJZVEUgYkFja0luZGV4OwotCUJZVEUgYkN1cnJlbnRTZXFOdW07CisJdTggYkFja0luZGV4OworCXU4IGJDdXJyZW50U2VxTnVtOwogCiAJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTI0MjIsOCArMjQyMiw4IEBACiAJLy8gY2hlY2sgaWYgZW50cmllcyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nCiAJaWYgKChwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMgPCBFUExfU0RPX0hJU1RPUllfU0laRSkKIAkgICAgJiYgKHBIaXN0b3J5LT5tX2JXcml0ZSAhPSBwSGlzdG9yeS0+bV9iUmVhZCkpIHsKLS8vICAgICAgICBQUklOVEY0KCJFcGxTZG9Bc3lSZWFkRnJvbUhpc3RvcnkoKTogaW5pdCA9ICVkLCByZWFkID0gJXUsIHdyaXRlID0gJXUsIGFjayA9ICV1IiwgKGludCkgZkluaXRSZWFkX3AsIChXT1JEKXBIaXN0b3J5LT5tX2JSZWFkLCAoV09SRClwSGlzdG9yeS0+bV9iV3JpdGUsIChXT1JEKXBIaXN0b3J5LT5tX2JBY2spOwotLy8gICAgICAgIFBSSU5URjIoIiwgZnJlZSBlbnRyaWVzID0gJXUsIG5leHQgZnJhbWUgc2l6ZSA9ICV1XG4iLCAoV09SRClwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMsIHBIaXN0b3J5LT5tX2F1aUZyYW1lU2l6ZVtwSGlzdG9yeS0+bV9iUmVhZF0pOworLy8gICAgICAgIFBSSU5URjQoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiBpbml0ID0gJWQsIHJlYWQgPSAldSwgd3JpdGUgPSAldSwgYWNrID0gJXUiLCAoaW50KSBmSW5pdFJlYWRfcCwgKHUxNilwSGlzdG9yeS0+bV9iUmVhZCwgKHUxNilwSGlzdG9yeS0+bV9iV3JpdGUsICh1MTYpcEhpc3RvcnktPm1fYkFjayk7CisvLyAgICAgICAgUFJJTlRGMigiLCBmcmVlIGVudHJpZXMgPSAldSwgbmV4dCBmcmFtZSBzaXplID0gJXVcbiIsICh1MTYpcEhpc3RvcnktPm1fYkZyZWVFbnRyaWVzLCBwSGlzdG9yeS0+bV9hdWlGcmFtZVNpemVbcEhpc3RvcnktPm1fYlJlYWRdKTsKIAogCQkvLyByZXR1cm4gcG9pbnRlciB0byBzdG9yZWQgZnJhbWUKIAkJKnBwRnJhbWVfcCA9CkBAIC0yNDM5LDcgKzI0MzksNyBAQAogCQl9CiAKIAl9IGVsc2UgewotLy8gICAgICAgIFBSSU5URjMoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiByZWFkID0gJXUsIGFjayA9ICV1LCBmcmVlIGVudHJpZXMgPSAldSwgbm8gZnJhbWVcbiIsIChXT1JEKXBIaXN0b3J5LT5tX2JSZWFkLCAoV09SRClwSGlzdG9yeS0+bV9iQWNrLCAoV09SRClwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMpOworLy8gICAgICAgIFBSSU5URjMoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiByZWFkID0gJXUsIGFjayA9ICV1LCBmcmVlIGVudHJpZXMgPSAldSwgbm8gZnJhbWVcbiIsICh1MTYpcEhpc3RvcnktPm1fYlJlYWQsICh1MTYpcEhpc3RvcnktPm1fYkFjaywgKHUxNilwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMpOwogCiAJCS8vIG5vIG1vcmUgZnJhbWVzIHRvIHNlbmQKIAkJLy8gcmV0dXJuIG51bGwgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0NvbXUuYwppbmRleCBjZTBlYjMzLi5iZjM1YWZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMKQEAgLTE1NiwxNCArMTU2LDE0IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbFNkb1NlcUNvbkhkbCBtX1Nkb1NlcUNvbkhkbDsJLy8gaWYgIT0gMCAtPiBlbnRyeSB1c2VkCiAJdEVwbFNkb0NvbVN0YXRlIG1fU2RvQ29tU3RhdGU7Ci0JQllURSBtX2JUcmFuc2FjdGlvbklkOworCXU4IG1fYlRyYW5zYWN0aW9uSWQ7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7CS8vIE5vZGVJZCBvZiB0aGUgdGFyZ2V0CiAJLy8gLT4gbmVlZGVkIHRvIHJlaW5pdCBjb25uZWN0aW9uCiAJLy8gICAgYWZ0ZXIgdGltZW91dAogCXRFcGxTZG9UcmFuc1R5cGUgbV9TZG9UcmFuc1R5cGU7CS8vIEF1dG8sIEV4cGVkaXRlZCwgU2VnbWVudGVkCiAJdEVwbFNkb1NlcnZpY2VUeXBlIG1fU2RvU2VydmljZVR5cGU7CS8vIFdyaXRlQnlJbmRleCwgUmVhZEJ5SW5kZXgKIAl0RXBsU2RvVHlwZSBtX1Nkb1Byb3RUeXBlOwkvLyBwcm90b2NvbCBsYXllcjogQXV0bywgVWRwLCBBc25kLCBQZG8KLQlCWVRFICptX3BEYXRhOwkJLy8gcG9pbnRlciB0byBkYXRhCisJdTggKm1fcERhdGE7CQkvLyBwb2ludGVyIHRvIGRhdGEKIAl1bnNpZ25lZCBpbnQgbV91aVRyYW5zU2l6ZTsJLy8gbnVtYmVyIG9mIGJ5dGVzCiAJLy8gdG8gdHJhbnNmZXIKIAl1bnNpZ25lZCBpbnQgbV91aVRyYW5zZmVycmVkQnl0ZTsJLy8gbnVtYmVyIG9mIGJ5dGVzCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkvLyAgICB0aGUgU0RPIHRyYW5zZmVyCiAJdm9pZCAqbV9wVXNlckFyZzsJLy8gdXNlciBkZWZpbmFibGUgYXJndW1lbnQgcG9pbnRlcgogCi0JRFdPUkQgbV9kd0xhc3RBYm9ydENvZGU7CS8vIHNhdmUgdGhlIGxhc3QgYWJvcnQgY29kZQorCXUzMiBtX2R3TGFzdEFib3J0Q29kZTsJLy8gc2F2ZSB0aGUgbGFzdCBhYm9ydCBjb2RlCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET0MpKSAhPSAwKQogCS8vIG9ubHkgZm9yIGNsaWVudAogCXVuc2lnbmVkIGludCBtX3VpVGFyZ2V0SW5kZXg7CS8vIGluZGV4IHRvIGFjY2VzcwpAQCAtMjA1LDEyICsyMDUsMTIgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbVJlY2VpdmVDYih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAorCQkJICAgICAgdEVwbEFzeVNkb0NvbSAqcEFzeVNkb0NvbV9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUNvbkNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJIHRFcGxBc3lTZG9Db25TdGF0ZSBBc3lTZG9Db25TdGF0ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tQ29uQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCSAgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Db21TZWFyY2hDb25JbnRlcm4odEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKIAkJCQkJICAgdEVwbFNkb0NvbUNvbkV2ZW50IFNkb0NvbUNvbkV2ZW50X3AsCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJCQkJICAgICAgdEVwbEFzeVNkb0NvbSAqIHBBc3lTZG9Db21fcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0NvbUNsaWVudFNlbmRBYm9ydCh0RXBsU2RvQ29tQ29uICogcFNkb0NvbUNvbl9wLAotCQkJCQkgICBEV09SRCBkd0Fib3J0Q29kZV9wKTsKKwkJCQkJICAgdTMyIGR3QWJvcnRDb2RlX3ApOwogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yODUsNyArMjg1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21Jbml0KHZvaWQpCit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzEyLDcgKzMxMiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzU0LDcgKzM1NCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tRGVsSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzk4LDkgKzM5OCw5IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21EZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCAqIHBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wLAotCQkJCSAgICAgdEVwbFNkb1R5cGUgUHJvdFR5cGVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tRGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgKnBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wLAorCQkJICAgICAgdEVwbFNkb1R5cGUgUHJvdFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlDb3VudDsKQEAgLTUxMSw4ICs1MTEsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET0MpKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5SW5kZXggKgotCQkJCQkgICAgICAgcFNkb0NvbVRyYW5zUGFyYW1fcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5SW5kZXggKnBTZG9Db21UcmFuc1BhcmFtX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFNkb0NvbUNvbiAqcFNkb0NvbUNvbjsKQEAgLTYwMyw3ICs2MDIsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET0MpKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tVW5kZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tVW5kZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNjY5LDggKzY2OCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21HZXRTdGF0ZSh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICB0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tR2V0U3RhdGUodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgdEVwbFNkb0NvbUZpbmlzaGVkICpwU2RvQ29tRmluaXNoZWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNzQ3LDggKzc0Niw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21TZG9BYm9ydCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICBEV09SRCBkd0Fib3J0Q29kZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21TZG9BYm9ydCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1MzIgZHdBYm9ydENvZGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNzY2LDcgKzc2NSw3IEBACiAJCWdvdG8gRXhpdDsKIAl9CiAJLy8gc2F2ZSBwb2ludGVyIHRvIGFib3J0IGNvZGUKLQlwU2RvQ29tQ29uLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZV9wOworCXBTZG9Db21Db24tPm1fcERhdGEgPSAodTggKikgJiBkd0Fib3J0Q29kZV9wOwogCiAJUmV0ID0gRXBsU2RvQ29tUHJvY2Vzc0ludGVybihTZG9Db21Db25IZGxfcCwKIAkJCQkgICAgIGtFcGxTZG9Db21Db25FdmVudEFib3J0LApAQCAtODAzLDkgKzgwMiw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICB0RXBsQXN5U2RvQ29tICpwQXN5U2RvQ29tX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC04MTUsNyArODE0LDcgQEAKIAogCUVQTF9EQkdMVkxfU0RPX1RSQUNFMwogCSAgICAoIkVwbFNkb0NvbVJlY2VpdmVDYiBTZG9TZXFDb25IZGw6IDB4JVgsIEZpcnN0IEJ5dGUgb2YgcEFzeVNkb0NvbV9wOiAweCUwMlgsIHVpRGF0YVNpemVfcDogMHglMDRYXG4iLAotCSAgICAgU2RvU2VxQ29uSGRsX3AsIChXT1JEKSBwQXN5U2RvQ29tX3AtPm1fbGVfYWJDb21tYW5kRGF0YVswXSwKKwkgICAgIFNkb1NlcUNvbkhkbF9wLCAodTE2KSBwQXN5U2RvQ29tX3AtPm1fbGVfYWJDb21tYW5kRGF0YVswXSwKIAkgICAgIHVpRGF0YVNpemVfcCk7CiAKIAlyZXR1cm4gUmV0OwpAQCAtODQwLDggKzgzOSw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQ29uQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApCit0RXBsS2VybmVsIEVwbFNkb0NvbUNvbkNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkgIHRFcGxBc3lTZG9Db25TdGF0ZSBBc3lTZG9Db25TdGF0ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxTZG9Db21Db25FdmVudCBTZG9Db21Db25FdmVudCA9IGtFcGxTZG9Db21Db25FdmVudFNlbmRGaXJzdDsKQEAgLTk5OSwxMCArOTk4LDEwIEBACiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFNkb0NvbUNvbiAqcFNkb0NvbUNvbjsKLQlCWVRFIGJGbGFnOworCXU4IGJGbGFnOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET1MpKSAhPSAwKQotCURXT1JEIGR3QWJvcnRDb2RlOworCXUzMiBkd0Fib3J0Q29kZTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplOwogI2VuZGlmCiAKQEAgLTExMzgsNyArMTEzNyw3IEBACiAJCQkJCQkJCQlwU2RvQ29tQ29uLT4KIAkJCQkJCQkJCSAgICBtX3BEYXRhCiAJCQkJCQkJCQkgICAgPQotCQkJCQkJCQkJICAgIChCWVRFCisJCQkJCQkJCQkgICAgKHU4CiAJCQkJCQkJCQkgICAgICopCiAJCQkJCQkJCQkgICAgJgogCQkJCQkJCQkJICAgIGR3QWJvcnRDb2RlOwpAQCAtMTI4Myw3ICsxMjgyLDcgQEAKIAkJCQkJCQlpZiAocFNkb0NvbUNvbi0+CiAJCQkJCQkJICAgIG1fZHdMYXN0QWJvcnRDb2RlID09CiAJCQkJCQkJICAgIDApIHsKLQkJCQkJCQkJKCAvKihCWVRFKikgKi8KKwkJCQkJCQkJKCAvKih1OCopICovCiAJCQkJCQkJCSBwU2RvQ29tQ29uLT4KIAkJCQkJCQkJIG1fcERhdGEpICs9CiAJCQkJCQkgICAgICB1aVNpemU7CkBAIC0xMzIxLDcgKzEzMjAsNyBAQAogCQkJCQkJCQkJcFNkb0NvbUNvbi0+CiAJCQkJCQkJCQkgICAgbV9wRGF0YQogCQkJCQkJCQkJICAgID0KLQkJCQkJCQkJCSAgICAoQllURQorCQkJCQkJCQkJICAgICh1OAogCQkJCQkJCQkJICAgICAqKQogCQkJCQkJCQkJICAgICYKIAkJCQkJCQkJCSAgICBwU2RvQ29tQ29uLT4KQEAgLTE2NjcsNyArMTY2Niw3IEBACiAJCQljYXNlIGtFcGxTZG9Db21Db25FdmVudEFib3J0OgogCQkJCXsKIAkJCQkJRXBsU2RvQ29tQ2xpZW50U2VuZEFib3J0KHBTZG9Db21Db24sCi0JCQkJCQkJCSAqKChEV09SRCAqKQorCQkJCQkJCQkgKigodTMyICopCiAJCQkJCQkJCSAgIHBTZG9Db21Db24tPgogCQkJCQkJCQkgICBtX3BEYXRhKSk7CiAKQEAgLTE2NzUsNyArMTY3NCw3IEBACiAJCQkJCXBTZG9Db21Db24tPm1fYlRyYW5zYWN0aW9uSWQrKzsKIAkJCQkJLy8gY2FsbCBjYWxsYmFjayBvZiBhcHBsaWNhdGlvbgogCQkJCQlwU2RvQ29tQ29uLT5tX2R3TGFzdEFib3J0Q29kZSA9Ci0JCQkJCSAgICAqKChEV09SRCAqKSBwU2RvQ29tQ29uLT5tX3BEYXRhKTsKKwkJCQkJICAgICooKHUzMiAqKSBwU2RvQ29tQ29uLT5tX3BEYXRhKTsKIAkJCQkJUmV0ID0KIAkJCQkJICAgIEVwbFNkb0NvbVRyYW5zZmVyRmluaXNoZWQKIAkJCQkJICAgIChTZG9Db21Db25fcCwgcFNkb0NvbUNvbiwKQEAgLTE4NjksNyArMTg2OCw3IEBACiAJCQljYXNlIGtFcGxTZG9Db21Db25FdmVudEFib3J0OgogCQkJCXsKIAkJCQkJRXBsU2RvQ29tQ2xpZW50U2VuZEFib3J0KHBTZG9Db21Db24sCi0JCQkJCQkJCSAqKChEV09SRCAqKQorCQkJCQkJCQkgKigodTMyICopCiAJCQkJCQkJCSAgIHBTZG9Db21Db24tPgogCQkJCQkJCQkgICBtX3BEYXRhKSk7CiAKQEAgLTE4ODAsNyArMTg3OSw3IEBACiAJCQkJCSAgICBrRXBsU2RvQ29tU3RhdGVDbGllbnRDb25uZWN0ZWQ7CiAJCQkJCS8vIGNhbGwgY2FsbGJhY2sgb2YgYXBwbGljYXRpb24KIAkJCQkJcFNkb0NvbUNvbi0+bV9kd0xhc3RBYm9ydENvZGUgPQotCQkJCQkgICAgKigoRFdPUkQgKikgcFNkb0NvbUNvbi0+bV9wRGF0YSk7CisJCQkJCSAgICAqKCh1MzIgKikgcFNkb0NvbUNvbi0+bV9wRGF0YSk7CiAJCQkJCVJldCA9CiAJCQkJCSAgICBFcGxTZG9Db21UcmFuc2ZlckZpbmlzaGVkCiAJCQkJCSAgICAoU2RvQ29tQ29uX3AsIHBTZG9Db21Db24sCkBAIC0xOTY1LDcgKzE5NjQsNyBAQAogCXVuc2lnbmVkIGludCB1aVN1YmluZGV4OwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKIAl0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGU7Ci0JRFdPUkQgZHdBYm9ydENvZGU7CisJdTMyIGR3QWJvcnRDb2RlOwogCiAJZHdBYm9ydENvZGUgPSAwOwogCkBAIC0xOTg3LDcgKzE5ODYsNyBAQAogCWlmIChSZXQgPT0ga0VwbE9iZFN1YmluZGV4Tm90RXhpc3QpIHsJLy8gc3ViZW50cnkgZG9lc24ndCBleGlzdAogCQlkd0Fib3J0Q29kZSA9IEVQTF9TRE9BQ19TVUJfSU5ERVhfTk9UX0VYSVNUOwogCQkvLyBzZW5kIGFib3J0Ci0JCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFICopICYgZHdBYm9ydENvZGU7CisJCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9ICh1OCAqKSAmIGR3QWJvcnRDb2RlOwogCQlSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkJCQkJICAgICB1aUluZGV4LAogCQkJCQkJICAgICB1aVN1YmluZGV4LApAQCAtMTk5Niw3ICsxOTk1LDcgQEAKIAl9IGVsc2UgaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewkvLyBlbnRyeSBkb2Vzbid0IGV4aXN0CiAJCWR3QWJvcnRDb2RlID0gRVBMX1NET0FDX09CSkVDVF9OT1RfRVhJU1Q7CiAJCS8vIHNlbmQgYWJvcnQKLQkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZTsKKwkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4ICopICYgZHdBYm9ydENvZGU7CiAJCVJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkJCQkgICAgIHVpSW5kZXgsCiAJCQkJCQkgICAgIHVpU3ViaW5kZXgsCkBAIC0yMDE0LDcgKzIwMTMsNyBAQAogCQkJZHdBYm9ydENvZGUgPSBFUExfU0RPQUNfVU5TVVBQT1JURURfQUNDRVNTOwogCQl9CiAJCS8vIHNlbmQgYWJvcnQKLQkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZTsKKwkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4ICopICYgZHdBYm9ydENvZGU7CiAJCVJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkJCQkgICAgIHVpSW5kZXgsCiAJCQkJCQkgICAgIHVpU3ViaW5kZXgsCkBAIC0yMDUxLDcgKzIwNTAsNyBAQAogCQkvLyBlcnJvciAtPiBhYm9ydAogCQlkd0Fib3J0Q29kZSA9IEVQTF9TRE9BQ19HRU5FUkFMX0VSUk9SOwogCQkvLyBzZW5kIGFib3J0Ci0JCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFICopICYgZHdBYm9ydENvZGU7CisJCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9ICh1OCAqKSAmIGR3QWJvcnRDb2RlOwogCQlSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkJCQkJICAgICB1aUluZGV4LAogCQkJCQkJICAgICB1aVN1YmluZGV4LApAQCAtMjA5MCwxMSArMjA4OSwxMSBAQAogCQkJCQkJIHRFcGxTZG9Db21TZW5kVHlwZSBTZW5kVHlwZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwotCUJZVEUgYWJGcmFtZVtFUExfTUFYX1NET19GUkFNRV9TSVpFXTsKKwl1OCBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEZyYW1lOwogCXRFcGxBc3lTZG9Db20gKnBDb21tYW5kRnJhbWU7CiAJdW5zaWduZWQgaW50IHVpU2l6ZU9mRnJhbWU7Ci0JQllURSBiRmxhZzsKKwl1OCBiRmxhZzsKIAogCVJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0yMTY3LDcgKzIxNjYsNyBAQAogCQkJCS8vIHNldCBzaXplIG9mIGZyYW1lCiAJCQkJQW1pU2V0V29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPgogCQkJCQkgICAgICAgbV9sZV93U2VnbWVudFNpemUsCi0JCQkJCSAgICAgICAoV09SRCkgcFNkb0NvbUNvbl9wLT4KKwkJCQkJICAgICAgICh1MTYpIHBTZG9Db21Db25fcC0+CiAJCQkJCSAgICAgICBtX3VpVHJhbnNTaXplKTsKIAogCQkJCS8vIGNvcnJlY3QgYnl0ZS1jb3VudGVyCkBAIC0yMjk3LDcgKzIyOTYsNyBAQAogCQkJCQkvLyBzZXQgc2VnbWVudCBzaXplCiAJCQkJCUFtaVNldFdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT4KIAkJCQkJCSAgICAgICBtX2xlX3dTZWdtZW50U2l6ZSwKLQkJCQkJCSAgICAgICAoV09SRCkgcFNkb0NvbUNvbl9wLT4KKwkJCQkJCSAgICAgICAodTE2KSBwU2RvQ29tQ29uX3AtPgogCQkJCQkJICAgICAgIG1fdWlUcmFuc1NpemUpOwogCiAJCQkJCS8vIHNlbmQgZnJhbWUKQEAgLTIzMjQsMTggKzIzMjMsMTggQEAKIAogCQkJLy8gY29weSBhYm9ydGNvZGUgdG8gZnJhbWUKIAkJCUFtaVNldER3b3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV9hYkNvbW1hbmREYXRhWzBdLAotCQkJCQkqKChEV09SRCAqKSBwU2RvQ29tQ29uX3AtPm1fcERhdGEpKTsKKwkJCQkJKigodTMyICopIHBTZG9Db21Db25fcC0+bV9wRGF0YSkpOwogCiAJCQkvLyBzZXQgc2l6ZSBvZiBzZWdtZW50CiAJCQlBbWlTZXRXb3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV93U2VnbWVudFNpemUsCi0JCQkJICAgICAgIHNpemVvZihEV09SRCkpOworCQkJCSAgICAgICBzaXplb2YodTMyKSk7CiAKIAkJCS8vIHVwZGF0ZSBjb3VudGVyCi0JCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc2ZlcnJlZEJ5dGUgPSBzaXplb2YoRFdPUkQpOworCQkJcFNkb0NvbUNvbl9wLT5tX3VpVHJhbnNmZXJyZWRCeXRlID0gc2l6ZW9mKHUzMik7CiAJCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc1NpemUgPSAwOwogCiAJCQkvLyBjYWxjIGZyYW1lc2l6ZQotCQkJdWlTaXplT2ZGcmFtZSArPSBzaXplb2YoRFdPUkQpOworCQkJdWlTaXplT2ZGcmFtZSArPSBzaXplb2YodTMyKTsKIAkJCVJldCA9IEVwbFNkb0FzeVNlcVNlbmREYXRhKHBTZG9Db21Db25fcC0+bV9TZG9TZXFDb25IZGwsCiAJCQkJCQkgICB1aVNpemVPZkZyYW1lLCBwRnJhbWUpOwogCQkJYnJlYWs7CkBAIC0yMzczLDggKzIzNzIsOCBAQAogCXVuc2lnbmVkIGludCB1aUJ5dGVzVG9UcmFuc2ZlcjsKIAl0RXBsT2JkU2l6ZSBFbnRyeVNpemU7CiAJdEVwbE9iZEFjY2VzcyBBY2Nlc3NUeXBlOwotCURXT1JEIGR3QWJvcnRDb2RlOwotCUJZVEUgKnBiU3JjRGF0YTsKKwl1MzIgZHdBYm9ydENvZGU7CisJdTggKnBiU3JjRGF0YTsKIAogCWR3QWJvcnRDb2RlID0gMDsKIApAQCAtMjQyNyw3ICsyNDI2LDcgQEAKIAkJcFNkb0NvbUNvbl9wLT5tX2R3TGFzdEFib3J0Q29kZSA9IEVQTF9TRE9BQ19TVUJfSU5ERVhfTk9UX0VYSVNUOwogCQkvLyBzZW5kIGFib3J0CiAJCS8vIGQuay4gVGhpcyBpcyB3cm9uZzogay50LiBub3QgbmVlZGVkIHNlbmQgYWJvcnQgb24gZW5kIG9mIHdyaXRlCi0JCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKXBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGU7CisJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4KilwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOwogCQkgICBSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkgICB1aUluZGV4LAogCQkgICB1aVN1YmluZGV4LApAQCAtMjQzOCw3ICsyNDM3LDcgQEAKIAkJLy8gc2VuZCBhYm9ydAogCQkvLyBkLmsuIFRoaXMgaXMgd3Jvbmc6IGsudC4gbm90IG5lZWRlZCBzZW5kIGFib3J0IG9uIGVuZCBvZiB3cml0ZQogCQkvKgotCQkgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSopJmR3QWJvcnRDb2RlOworCQkgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKSZkd0Fib3J0Q29kZTsKIAkJICAgUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKIAkJICAgdWlJbmRleCwKIAkJICAgdWlTdWJpbmRleCwKQEAgLTI0NTgsNyArMjQ1Nyw3IEBACiAJCX0KIAkJLy8gc2VuZCBhYm9ydAogCQkvLyBkLmsuIFRoaXMgaXMgd3Jvbmc6IGsudC4gbm90IG5lZWRlZCBzZW5kIGFib3J0IG9uIGVuZCBvZiB3cml0ZQotCQkvKnBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFKikmZHdBYm9ydENvZGU7CisJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4KikmZHdBYm9ydENvZGU7CiAJCSAgIFJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCSAgIHVpSW5kZXgsCiAJCSAgIHVpU3ViaW5kZXgsCkBAIC0yNTQ5LDcgKzI1NDgsNyBAQAogCQkJICAgIEVQTF9TRE9BQ19EQVRBX1RZUEVfTEVOR1RIX1RPT19ISUdIOwogCQkJLy8gc2VuZCBhYm9ydAogCQkJLy8gZC5rLiBUaGlzIGlzIHdyb25nOiBrLnQuIG5vdCBuZWVkZWQgc2VuZCBhYm9ydCBvbiBlbmQgb2Ygd3JpdGUKLQkJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKSZkd0Fib3J0Q29kZTsKKwkJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4KikmZHdBYm9ydENvZGU7CiAJCQkgICBSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkJICAgdWlJbmRleCwKIAkJCSAgIHVpU3ViaW5kZXgsCkBAIC0yNTcxLDcgKzI1NzAsNyBAQAogCQkJICAgIEVQTF9TRE9BQ19HRU5FUkFMX0VSUk9SOwogCQkJLy8gc2VuZCBhYm9ydAogCQkJLy8gZC5rLiBUaGlzIGlzIHdyb25nOiBrLnQuIG5vdCBuZWVkZWQgc2VuZCBhYm9ydCBvbiBlbmQgb2Ygd3JpdGUKLS8qICAgICAgICAgICAgcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKSZwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOworLyogICAgICAgICAgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKSZwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOwogICAgICAgICAgICAgUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpU3ViaW5kZXgsCkBAIC0yNTg2LDcgKzI1ODUsNyBAQAogCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc1NpemUgLT0gdWlCeXRlc1RvVHJhbnNmZXI7CiAKIAkJLy8gdXBkYXRlIHRhcmdldCBwb2ludGVyCi0JCSggLyooQllURSopICovIHBTZG9Db21Db25fcC0+bV9wRGF0YSkgKz0gdWlCeXRlc1RvVHJhbnNmZXI7CisJCSggLyoodTgqKSAqLyBwU2RvQ29tQ29uX3AtPm1fcERhdGEpICs9IHVpQnl0ZXNUb1RyYW5zZmVyOwogCiAJCS8vIHNlbmQgYWNrbm93bGVkZ2Ugd2l0aG91dCBhbnkgQ29tbWFuZCBsYXllciBkYXRhCiAJCVJldCA9IEVwbFNkb0FzeVNlcVNlbmREYXRhKHBTZG9Db21Db25fcC0+bV9TZG9TZXFDb25IZGwsCkBAIC0yNTk4LDcgKzI1OTcsNyBAQAogCWlmIChwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlICE9IDApIHsKIAkJLy8gc2VuZCBhYm9ydAogCQlwU2RvQ29tQ29uX3AtPm1fcERhdGEgPQotCQkgICAgKEJZVEUgKikgJiBwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOworCQkgICAgKHU4ICopICYgcFNkb0NvbUNvbl9wLT5tX2R3TGFzdEFib3J0Q29kZTsKIAkJUmV0ID0KIAkJICAgIEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsIHVpSW5kZXgsCiAJCQkJCQkgICB1aVN1YmluZGV4LApAQCAtMjYzNSwxMiArMjYzNCwxMiBAQAogc3RhdGljIHRFcGxLZXJuZWwgRXBsU2RvQ29tQ2xpZW50U2VuZCh0RXBsU2RvQ29tQ29uICogcFNkb0NvbUNvbl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwotCUJZVEUgYWJGcmFtZVtFUExfTUFYX1NET19GUkFNRV9TSVpFXTsKKwl1OCBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEZyYW1lOwogCXRFcGxBc3lTZG9Db20gKnBDb21tYW5kRnJhbWU7CiAJdW5zaWduZWQgaW50IHVpU2l6ZU9mRnJhbWU7Ci0JQllURSBiRmxhZ3M7Ci0JQllURSAqcGJQYXlsb2FkOworCXU4IGJGbGFnczsKKwl1OCAqcGJQYXlsb2FkOwogCiAJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTI2ODAsMTEgKzI2NzksMTEgQEAKIAogCQkJCQkvLyBjcmVhdGUgY29tbWFuZCBoZWFkZXIKIAkJCQkJQW1pU2V0V29yZFRvTGUocGJQYXlsb2FkLAotCQkJCQkJICAgICAgIChXT1JEKSBwU2RvQ29tQ29uX3AtPgorCQkJCQkJICAgICAgICh1MTYpIHBTZG9Db21Db25fcC0+CiAJCQkJCQkgICAgICAgbV91aVRhcmdldEluZGV4KTsKIAkJCQkJcGJQYXlsb2FkICs9IDI7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKHBiUGF5bG9hZCwKLQkJCQkJCSAgICAgICAoQllURSkgcFNkb0NvbUNvbl9wLT4KKwkJCQkJCSAgICAgICAodTgpIHBTZG9Db21Db25fcC0+CiAJCQkJCQkgICAgICAgbV91aVRhcmdldFN1YkluZGV4KTsKIAkJCQkJLy8gY2FsYyBzaXplCiAJCQkJCXVpU2l6ZU9mRnJhbWUgKz0gNDsKQEAgLTI3MjEsMTIgKzI3MjAsMTIgQEAKIAkJCQkJCQkgICAgICAgYkZsYWdzKTsKIAkJCQkJCS8vIGNyZWF0ZSBjb21tYW5kIGhlYWRlcgogCQkJCQkJQW1pU2V0V29yZFRvTGUocGJQYXlsb2FkLAotCQkJCQkJCSAgICAgICAoV09SRCkKKwkJCQkJCQkgICAgICAgKHUxNikKIAkJCQkJCQkgICAgICAgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCQkgICAgICAgbV91aVRhcmdldEluZGV4KTsKIAkJCQkJCXBiUGF5bG9hZCArPSAyOwogCQkJCQkJQW1pU2V0Qnl0ZVRvTGUocGJQYXlsb2FkLAotCQkJCQkJCSAgICAgICAoQllURSkKKwkJCQkJCQkgICAgICAgKHU4KQogCQkJCQkJCSAgICAgICBwU2RvQ29tQ29uX3AtPgogCQkJCQkJCSAgICAgICBtX3VpVGFyZ2V0U3ViSW5kZXgpOwogCQkJCQkJLy8gb24gYnl0ZSBmb3IgcmVzZXJ2ZWQKQEAgLTI3NjAsMTIgKzI3NTksMTIgQEAKIAogCQkJCQkJLy8gY3JlYXRlIGNvbW1hbmQgaGVhZGVyCiAJCQkJCQlBbWlTZXRXb3JkVG9MZShwYlBheWxvYWQsCi0JCQkJCQkJICAgICAgIChXT1JEKQorCQkJCQkJCSAgICAgICAodTE2KQogCQkJCQkJCSAgICAgICBwU2RvQ29tQ29uX3AtPgogCQkJCQkJCSAgICAgICBtX3VpVGFyZ2V0SW5kZXgpOwogCQkJCQkJcGJQYXlsb2FkICs9IDI7CiAJCQkJCQlBbWlTZXRCeXRlVG9MZShwYlBheWxvYWQsCi0JCQkJCQkJICAgICAgIChCWVRFKQorCQkJCQkJCSAgICAgICAodTgpCiAJCQkJCQkJICAgICAgIHBTZG9Db21Db25fcC0+CiAJCQkJCQkJICAgICAgIG1fdWlUYXJnZXRTdWJJbmRleCk7CiAJCQkJCQkvLyArIDIgLT4gb25lIGJ5dGUgZm9yIHN1YmluZGV4IGFuZCBvbmUgYnl0ZSByZXNlcnZlZApAQCAtMjc4NCw3ICsyNzgzLDcgQEAKIAkJCQkJCS8vIGZpbGwgcmVzdCBvZiBoZWFkZXIKIAkJCQkJCUFtaVNldFdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT4KIAkJCQkJCQkgICAgICAgbV9sZV93U2VnbWVudFNpemUsCi0JCQkJCQkJICAgICAgIChXT1JEKSAoNCArCisJCQkJCQkJICAgICAgICh1MTYpICg0ICsKIAkJCQkJCQkJICAgICAgIHBTZG9Db21Db25fcC0+CiAJCQkJCQkJCSAgICAgICBtX3VpVHJhbnNTaXplKSk7CiAKQEAgLTI4NTUsNyArMjg1NCw3IEBACiAJCQkJCQkJQW1pU2V0V29yZFRvTGUKIAkJCQkJCQkgICAgKCZwQ29tbWFuZEZyYW1lLT4KIAkJCQkJCQkgICAgIG1fbGVfd1NlZ21lbnRTaXplLAotCQkJCQkJCSAgICAgKFdPUkQpCisJCQkJCQkJICAgICAodTE2KQogCQkJCQkJCSAgICAgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCQkgICAgIG1fdWlUcmFuc1NpemUpOwogCQkJCQkJCWJGbGFncyA9IDB4MzA7CkBAIC0yOTQ0LDcgKzI5NDMsNyBAQAogCQkJCQkgICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwotCUJZVEUgYkJ1ZmZlcjsKKwl1OCBiQnVmZmVyOwogCXVuc2lnbmVkIGludCB1aUJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZTsKIAl1bnNpZ25lZCBsb25nIHVsQnVmZmVyOwpAQCAtMzIxNywxMCArMzIxNiwxMCBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Db21DbGllbnRTZW5kQWJvcnQodEVwbFNkb0NvbUNvbiAqIHBTZG9Db21Db25fcCwKLQkJCQkJICAgRFdPUkQgZHdBYm9ydENvZGVfcCkKKwkJCQkJICAgdTMyIGR3QWJvcnRDb2RlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOworCXU4IGFiRnJhbWVbRVBMX01BWF9TRE9fRlJBTUVfU0laRV07CiAJdEVwbEZyYW1lICpwRnJhbWU7CiAJdEVwbEFzeVNkb0NvbSAqcENvbW1hbmRGcmFtZTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplT2ZGcmFtZTsKQEAgLTMyNTAsMTQgKzMyNDksMTQgQEAKIAlBbWlTZXREd29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPm1fbGVfYWJDb21tYW5kRGF0YVswXSwgZHdBYm9ydENvZGVfcCk7CiAKIAkvLyBzZXQgc2l6ZSBvZiBzZWdtZW50Ci0JQW1pU2V0V29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPm1fbGVfd1NlZ21lbnRTaXplLCBzaXplb2YoRFdPUkQpKTsKKwlBbWlTZXRXb3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV93U2VnbWVudFNpemUsIHNpemVvZih1MzIpKTsKIAogCS8vIHVwZGF0ZSBjb3VudGVyCi0JcFNkb0NvbUNvbl9wLT5tX3VpVHJhbnNmZXJyZWRCeXRlID0gc2l6ZW9mKERXT1JEKTsKKwlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc2ZlcnJlZEJ5dGUgPSBzaXplb2YodTMyKTsKIAlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc1NpemUgPSAwOwogCiAJLy8gY2FsYyBmcmFtZXNpemUKLQl1aVNpemVPZkZyYW1lICs9IHNpemVvZihEV09SRCk7CisJdWlTaXplT2ZGcmFtZSArPSBzaXplb2YodTMyKTsKIAogCS8vIHNhdmUgYWJvcnQgY29kZQogCXBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGUgPSBkd0Fib3J0Q29kZV9wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9VZHB1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYwppbmRleCBiZTUyMjMzLi5iNDA5YzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYwpAQCAtNzIsMTEgKzcyLDkgQEAKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX1VEUCkpICE9IDApCiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjaW5jbHVkZSAiU29ja2V0TGludXhLZXJuZWwuaCIKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExMCwxNyArMTA4LDkgQEAKIAl0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIG1fZnBTZG9Bc3lTZXFDYjsKIAlTT0NLRVQgbV9VZHBTb2NrZXQ7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCUhBTkRMRSBtX1RocmVhZEhhbmRsZTsKLQlMUENSSVRJQ0FMX1NFQ1RJT04gbV9wQ3JpdGljYWxTZWN0aW9uOwotCUNSSVRJQ0FMX1NFQ1RJT04gbV9Dcml0aWNhbFNlY3Rpb247Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAlzdHJ1Y3QgY29tcGxldGlvbiBtX0NvbXBsZXRpb25VZHBUaHJlYWQ7CiAJaW50IG1fVGhyZWFkSGFuZGxlOwogCWludCBtX2lUZXJtaW5hdGVUaHJlYWQ7Ci0jZW5kaWYKLQogfSB0RXBsU2RvVWRwSW5zdGFuY2U7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMsMTIgKzEyMyw3IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLXN0YXRpYyBEV09SRCBQVUJMSUMgRXBsU2RvVWRwVGhyZWFkKExQVk9JRCBscFBhcmFtZXRlcik7Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIHN0YXRpYyBpbnQgRXBsU2RvVWRwVGhyZWFkKHZvaWQgKnBBcmdfcCk7Ci0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzcsNyArMTYyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCit0RXBsS2VybmVsIEVwbFNkb1VkcHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjA1LDE2ICsxOTAsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlpbnQgaUVycm9yOwotCVdTQURBVEEgV3NhOwotCi0jZW5kaWYKLQogCS8vIHNldCBpbnN0YW5jZSB2YXJpYWJsZXMgdG8gMAogCUVQTF9NRU1TRVQoJlNkb1VkcEluc3RhbmNlX2csIDB4MDAsIHNpemVvZihTZG9VZHBJbnN0YW5jZV9nKSk7CiAKQEAgLTIyOCwyNCArMjA3LDggQEAKIAkJZ290byBFeGl0OwogCX0KIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gc3RhcnQgd2luc29jazIgZm9yIHdpbjMyCi0JLy8gd2luZG93cyBzcGVjaWZpYyBzdGFydCBvZiBzb2NrZXQKLQlpRXJyb3IgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDApLCAmV3NhKTsKLQlpZiAoaUVycm9yICE9IDApIHsKLQkJUmV0ID0ga0VwbFNkb1VkcE5vU29ja2V0OwotCQlnb3RvIEV4aXQ7Ci0JfQotCS8vIGNyZWF0ZSBjcml0aWNhbCBzZWN0aW9uIGZvciBhY2NjZXNzIG9mIGluc3RuYWNlIHZhcmlhYmxlcwotCVNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uID0KLQkgICAgJlNkb1VkcEluc3RhbmNlX2cubV9Dcml0aWNhbFNlY3Rpb247Ci0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAlpbml0X2NvbXBsZXRpb24oJlNkb1VkcEluc3RhbmNlX2cubV9Db21wbGV0aW9uVWRwVGhyZWFkKTsKIAlTZG9VZHBJbnN0YW5jZV9nLm1faVRlcm1pbmF0ZVRocmVhZCA9IDA7Ci0jZW5kaWYKLQogCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPSAwOwogCVNkb1VkcEluc3RhbmNlX2cubV9VZHBTb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKIApAQCAtMjczLDMyICsyMzYsMTggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JQk9PTCBmVGVybUVycm9yOwotI2VuZGlmCi0KIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCWlmIChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlICE9IDApIHsJLy8gbGlzdGVuIHRocmVhZCB3YXMgc3RhcnRlZAogCQkvLyBjbG9zZSB0aHJlYWQKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQlmVGVybUVycm9yID0KLQkJICAgIFRlcm1pbmF0ZVRocmVhZChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCAwKTsKLQkJaWYgKGZUZXJtRXJyb3IgPT0gRkFMU0UpIHsKLQkJCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKLQkJCWdvdG8gRXhpdDsKLQkJfQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCQlTZG9VZHBJbnN0YW5jZV9nLm1faVRlcm1pbmF0ZVRocmVhZCA9IDE7CiAJCS8qIGtpbGxfcHJvYyhTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCBTSUdURVJNLCAxICk7ICovCiAJCXNlbmRfc2lnKFNJR1RFUk0sIFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIDEpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZTZG9VZHBJbnN0YW5jZV9nLm1fQ29tcGxldGlvblVkcFRocmVhZCk7Ci0jZW5kaWYKLQogCQlTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlID0gMDsKIAl9CiAKQEAgLTMwNywxOSArMjU2LDYgQEAKIAkJY2xvc2Vzb2NrZXQoU2RvVWRwSW5zdGFuY2VfZy5tX1VkcFNvY2tldCk7CiAJCVNkb1VkcEluc3RhbmNlX2cubV9VZHBTb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKIAl9Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBkZWxldGUgY3JpdGljYWwgc2VjdGlvbgotCURlbGV0ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gZm9yIHdpbiAzMgotCVdTQUNsZWFudXAoKTsKLSNlbmRpZgotCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLSAgICAgIEV4aXQ6Ci0jZW5kaWYKIAlyZXR1cm4gUmV0OwogfQogCkBAIC0zNDAsMTggKzI3NiwxMiBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVDb25maWcodW5zaWduZWQgbG9uZyB1bElwQWRkcl9wLAotCQkJCSAgIHVuc2lnbmVkIGludCB1aVBvcnRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsIHVuc2lnbmVkIGludCB1aVBvcnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gQWRkcjsKIAlpbnQgaUVycm9yOwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlCT09MIGZUZXJtRXJyb3I7Ci0JdW5zaWduZWQgbG9uZyB1bFRocmVhZElkOwotI2VuZGlmCi0KIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCWlmICh1aVBvcnRfcCA9PSAwKSB7CS8vIHNldCBVRFAgcG9ydCB0byBkZWZhdWx0IHBvcnQgbnVtYmVyCkBAIC0zNjQsMjEgKzI5NCwxMSBAQAogCWlmIChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlICE9IDApIHsJLy8gbGlzdGVuIHRocmVhZCB3YXMgc3RhcnRlZAogCiAJCS8vIGNsb3NlIG9sZCB0aHJlYWQKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQlmVGVybUVycm9yID0KLQkJICAgIFRlcm1pbmF0ZVRocmVhZChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCAwKTsKLQkJaWYgKGZUZXJtRXJyb3IgPT0gRkFMU0UpIHsKLQkJCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKLQkJCWdvdG8gRXhpdDsKLQkJfQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCQlTZG9VZHBJbnN0YW5jZV9nLm1faVRlcm1pbmF0ZVRocmVhZCA9IDE7CiAJCS8qIGtpbGxfcHJvYyhTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCBTSUdURVJNLCAxICk7ICovCiAJCXNlbmRfc2lnKFNJR1RFUk0sIFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIDEpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZTZG9VZHBJbnN0YW5jZV9nLm1fQ29tcGxldGlvblVkcFRocmVhZCk7CiAJCVNkb1VkcEluc3RhbmNlX2cubV9pVGVybWluYXRlVGhyZWFkID0gMDsKLSNlbmRpZgotCiAJCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPSAwOwogCX0KIApAQCAtNDEzLDI4ICszMzMsMTIgQEAKIAkJZ290byBFeGl0OwogCX0KIAkvLyBjcmVhdGUgTGlzdGVuLVRocmVhZAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gZm9yIHdpbjMyCi0KLQkvLyBjcmVhdGUgdGhyZWFkCi0JU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9IENyZWF0ZVRocmVhZChOVUxMLAotCQkJCQkJICAgICAgIDAsCi0JCQkJCQkgICAgICAgRXBsU2RvVWRwVGhyZWFkLAotCQkJCQkJICAgICAgICZTZG9VZHBJbnN0YW5jZV9nLAotCQkJCQkJICAgICAgIDAsICZ1bFRocmVhZElkKTsKLQlpZiAoU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKLQkJZ290byBFeGl0OwotCX0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKLQogCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPQogCSAgICBrZXJuZWxfdGhyZWFkKEVwbFNkb1VkcFRocmVhZCwgJlNkb1VkcEluc3RhbmNlX2csIENMT05FX0tFUk5FTCk7CiAJaWYgKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPT0gMCkgewogCQlSZXQgPSBrRXBsU2RvVWRwVGhyZWFkRXJyb3I7CiAJCWdvdG8gRXhpdDsKIAl9Ci0jZW5kaWYKIAogICAgICAgRXhpdDoKIAlyZXR1cm4gUmV0OwpAQCAtNDU5LDggKzM2Myw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUluaXRDb24odEVwbFNkb0NvbkhkbCAqIHBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3ApCit0RXBsS2VybmVsIEVwbFNkb1VkcHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CkBAIC01MjYsOCArNDMwLDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1U2VuZERhdGEodEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsIERXT1JEIGR3RGF0YVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICB0RXBsRnJhbWUgKnBTcmNEYXRhX3AsIHUzMiBkd0RhdGFTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJaW50IGlFcnJvcjsKQEAgLTU1MywyMiArNDU3LDEyIEBACiAKIAkvLyBjYWxsIHNlbmR0bwogCUFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgotCiAJQWRkci5zaW5fcG9ydCA9CiAJICAgICh1bnNpZ25lZCBzaG9ydClTZG9VZHBJbnN0YW5jZV9nLm1fYVNkb0Fic1VkcENvbm5lY3Rpb25bdWlBcnJheV0uCiAJICAgIG1fdWlQb3J0OwogCUFkZHIuc2luX2FkZHIuc19hZGRyID0KIAkgICAgU2RvVWRwSW5zdGFuY2VfZy5tX2FTZG9BYnNVZHBDb25uZWN0aW9uW3VpQXJyYXldLm1fdWxJcEFkZHI7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHByb2Nlc3MgZnVuY3Rpb24KLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKLQogCWlFcnJvciA9IHNlbmR0byhTZG9VZHBJbnN0YW5jZV9nLm1fVWRwU29ja2V0LAkvLyBzb2NrZXRoYW5kbGUKIAkJCShjb25zdCBjaGFyICopJnBTcmNEYXRhX3AtPm1fbGVfYk1lc3NhZ2VUeXBlLAkvLyBkYXRhIHRvIHNlbmQKIAkJCWR3RGF0YVNpemVfcCwJLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQKQEAgLTYwMyw3ICs0OTcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVEZWxDb24odEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdURlbENvbih0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUFycmF5OwpAQCAtNjQyLDE3ICs1MzYsMTMgQEAKIC8vIFBhcmFtZXRlcnM6ICAgICAgbHBQYXJhbWV0ZXIgPSBwb2ludGVyIHRvIHBhcmFtZXRlciB0eXBlIHRFcGxTZG9VZHBUaHJlYWRQYXJhCiAvLwogLy8KLS8vIFJldHVybnM6ICAgICAgICAgRFdPUkQgICA9ICAgZXJyb3Jjb2RlCisvLyBSZXR1cm5zOiAgICAgICAgIHUzMiAgID0gICBlcnJvcmNvZGUKIC8vCiAvLwogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotc3RhdGljIERXT1JEIFBVQkxJQyBFcGxTZG9VZHBUaHJlYWQoTFBWT0lEIGxwUGFyYW1ldGVyKQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogc3RhdGljIGludCBFcGxTZG9VZHBUaHJlYWQodm9pZCAqcEFyZ19wKQotI2VuZGlmCiB7CiAKIAl0RXBsU2RvVWRwSW5zdGFuY2UgKnBJbnN0YW5jZTsKQEAgLTY2MCwyMSArNTUwLDE1IEBACiAJaW50IGlFcnJvcjsKIAlpbnQgaUNvdW50OwogCWludCBpRnJlZUVudHJ5OwotCUJZVEUgYWJCdWZmZXJbRVBMX01BWF9TRE9fUkVDX0ZSQU1FX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfU0RPX1JFQ19GUkFNRV9TSVpFXTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplOwogCXRFcGxTZG9Db25IZGwgU2RvQ29uSGRsOwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlwSW5zdGFuY2UgPSAodEVwbFNkb1VkcEluc3RhbmNlICopIGxwUGFyYW1ldGVyOwotCi0JZm9yICg7OykKLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAlwSW5zdGFuY2UgPSAodEVwbFNkb1VkcEluc3RhbmNlICopIHBBcmdfcDsKIAlkYWVtb25pemUoIkVwbFNkb1VkcFRocmVhZCIpOwogCWFsbG93X3NpZ25hbChTSUdURVJNKTsKIAogCWZvciAoOyBwSW5zdGFuY2UtPm1faVRlcm1pbmF0ZVRocmVhZCA9PSAwOykKLSNlbmRpZgogCiAJewogCQkvLyB3YWl0IGZvciBkYXRhCkBAIC02ODUsMjAgKzU2OSwxMyBAQAogCQkJCSAgMCwJLy8gZmxhZ3MKIAkJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmUmVtb3RlQWRkciwKIAkJCQkgIChpbnQgKikmdWlTaXplKTsKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJCWlmIChpRXJyb3IgPT0gLUVSRVNUQVJUU1lTKSB7CiAJCQlicmVhazsKIAkJfQotI2VuZGlmCiAJCWlmIChpRXJyb3IgPiAwKSB7CiAJCQkvLyBnZXQgaGFuZGxlIGZvciBoaWdoZXIgbGF5ZXIKIAkJCWlDb3VudCA9IDA7CiAJCQlpRnJlZUVudHJ5ID0gMHhGRkZGOwotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oU2RvVWRwSW5zdGFuY2VfZy4KLQkJCQkJICAgICBtX3BDcml0aWNhbFNlY3Rpb24pOwotI2VuZGlmCiAJCQl3aGlsZSAoaUNvdW50IDwgRVBMX1NET19NQVhfQ09OTkVDVElPTl9VRFApIHsKIAkJCQkvLyBjaGVjayBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBrbm93bgogCQkJCWlmICgocEluc3RhbmNlLT5tX2FTZG9BYnNVZHBDb25uZWN0aW9uW2lDb3VudF0uCkBAIC03MzQsMTEgKzYxMSw2IEBACiAJCQkJCXBJbnN0YW5jZS0+CiAJCQkJCSAgICBtX2FTZG9BYnNVZHBDb25uZWN0aW9uW2lGcmVlRW50cnldLgogCQkJCQkgICAgbV91aVBvcnQgPSBSZW1vdGVBZGRyLnNpbl9wb3J0OwotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCQkJCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHByb2Nlc3MgZnVuY3Rpb24KLQkJCQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oU2RvVWRwSW5zdGFuY2VfZy4KLQkJCQkJCQkgICAgIG1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKIAkJCQkJLy8gY2FsbCBjYWxsYmFjawogCQkJCQlTZG9Db25IZGwgPSBpRnJlZUVudHJ5OwogCQkJCQlTZG9Db25IZGwgfD0gRVBMX1NET19VRFBfSEFORExFOwpAQCAtNzUyLDExICs2MjQsNiBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCUVQTF9EQkdMVkxfU0RPX1RSQUNFMAogCQkJCQkgICAgKCJFcnJvciBpbiBFcGxTZG9VZHBUaHJlYWQoKSBubyBmcmVlIGhhbmRsZVxuIik7Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkJCQkJLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCQkJCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLgotCQkJCQkJCSAgICAgbV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgogCQkJCX0KIAogCQkJfSBlbHNlIHsKQEAgLTc2NCwxMSArNjMxLDYgQEAKIAkJCQkvLyBjYWxsIGNhbGxiYWNrIHdpdGggY29ycmVjdCBoYW5kbGUKIAkJCQlTZG9Db25IZGwgPSBpQ291bnQ7CiAJCQkJU2RvQ29uSGRsIHw9IEVQTF9TRE9fVURQX0hBTkRMRTsKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQkJCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHByb2Nlc3MgZnVuY3Rpb24KLQkJCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLgotCQkJCQkJICAgICBtX3BDcml0aWNhbFNlY3Rpb24pOwotI2VuZGlmCiAJCQkJLy8gb2Zmc2V0IDQgLT4gc3RhcnQgb2YgU0RPIFNlcXVlbmNlIGhlYWRlcgogCQkJCXBJbnN0YW5jZS0+bV9mcFNkb0FzeVNlcUNiKFNkb0NvbkhkbCwKIAkJCQkJCQkgICAodEVwbEFzeVNkb1NlcSAqKSAmCkBAIC03NzgsMTAgKzY0MCw3IEBACiAJCX0JCS8vIGVuZCBvZiAgaWYoaUVycm9yIT1TT0NLRVRfRVJST1IpCiAJfQkJCS8vIGVuZCBvZiBmb3IoOzspCiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJY29tcGxldGVfYW5kX2V4aXQoJlNkb1VkcEluc3RhbmNlX2cubV9Db21wbGV0aW9uVWRwVGhyZWFkLCAwKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU3RhdHVzdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMKaW5kZXggNjg5ZjkxMi4uYjI5MTM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMKQEAgLTEzNyw4ICsxMzcsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VDYlN0YXR1c1Jlc3BvbnNlKHRFcGxGcmFtZUluZm8gKgotCQkJCQkJICAgIHBGcmFtZUluZm9fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxTdGF0dXN1Q2JTdGF0dXNSZXNwb25zZSh0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApOwogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KQEAgLTE2NCw3ICsxNjMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1SW5pdCgpCit0RXBsS2VybmVsIEVwbFN0YXR1c3VJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5MSw3ICsxOTAsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1QWRkSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxTdGF0dXN1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjI4LDcgKzIyNyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yNTgsNyArMjU3LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdVJlc2V0KCkKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdVJlc2V0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTI4Nyw5ICsyODYsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VSZXF1ZXN0U3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxTdGF0dXN1Q2JSZXNwb25zZQotCQkJCQkJICBwZm5DYlJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbFN0YXR1c3VSZXF1ZXN0U3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgIHRFcGxTdGF0dXN1Q2JSZXNwb25zZSBwZm5DYlJlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTM0Miw4ICszNDAsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1Q2JTdGF0dXNSZXNwb25zZSh0RXBsRnJhbWVJbmZvICoKLQkJCQkJCSAgICBwRnJhbWVJbmZvX3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxTdGF0dXN1Q2JTdGF0dXNSZXNwb25zZSh0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl1bnNpZ25lZCBpbnQgdWlOb2RlSWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRhcmdldC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUYXJnZXQuaAppbmRleCBiMmI2NmY4Li5lNzZkMjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRhcmdldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGFyZ2V0LmgKQEAgLTgzLDk1ICs4MywxMSBAQAogLy8gYXBwbGljYXRpb25zIG5lZWRzIHRvIHVzZSBvbmUgY29tbW9uIGxpYnJhcnkgZnVuY3Rpb24gKGUuZy4gbWVtY3B5KCkpLiBTbwogLy8geW91IGNhbiBzZXQgKG9yIGNoYW5nZSkgaXQgaGVyZS4KIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0KLSNkZWZpbmUgX1dJTjMyX1dJTkRPV1MgMHgwNDAxCi0jZGVmaW5lIF9XSU4zMl9XSU5OVCAgIDB4MDQwMAotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotICAgIC8vMjkuMTEuMjAwNCBmLmouIHNvbnN0IGlzdCBtZW1jcHkgdW5kIG1lbXNldCB1bmJla2FubnQKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBFUExfTUVNQ1BZKGRzdCxzcmMsc2l6KSAgICAgbWVtY3B5KCh2b2lkKikoZHN0KSwoY29uc3Qgdm9pZCopKHNyYyksKHNpemVfdCkoc2l6KSk7Ci0jZGVmaW5lIEVQTF9NRU1TRVQoZHN0LHZhbCxzaXopICAgICBtZW1zZXQoKHZvaWQqKShkc3QpLChpbnQpKHZhbCksKHNpemVfdCkoc2l6KSk7Ci0KLSAgICAvLyBmLmouOiBkaWUgRnVua3Rpb25lbiBm/HIgPE1lbUFsbG9jPiB1bmQgPE1lbUZyZWU+IHNpbmQgaW4gV2luTWVtLmMgZGVmaW5pZXJ0Ci0gICAgLy9kZWZpbml0aW9uIGRlciBQcm90b3R5cGVuCi12b2lkIEZBUiAqTWVtQWxsb2MoRFdPUkQgZHdNZW1TaXplX3ApOwotdm9pZCBNZW1GcmVlKHZvaWQgRkFSICogcE1lbV9wKTsKLQotI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCi0jZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopcHRyKQotCi0jaWZuZGVmIFBSSU5URjAKLXZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm10LCAuLi4pOwotI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UKLSNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFRSQUNFMChhcmcpCi0jZGVmaW5lIFBSSU5URjEoYXJnLHAxKSAgICAgICAgICAgICBUUkFDRTEoYXJnLHAxKQotI2RlZmluZSBQUklOVEYyKGFyZyxwMSxwMikgICAgICAgICAgVFJBQ0UyKGFyZyxwMSxwMikKLSNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFRSQUNFMyhhcmcscDEscDIscDMpCi0jZGVmaW5lIFBSSU5URjQoYXJnLHAxLHAyLHAzLHA0KSAgICBUUkFDRTQoYXJnLHAxLHAyLHAzLHA0KQotCS8vI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmCi0JLy8jZGVmaW5lIFBSSU5URjAoYXJnKSAgICAgICAgICAgICAgICBQUklOVEYoYXJnKQotCS8vI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgUFJJTlRGKGFyZyxwMSkKLQkvLyNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFBSSU5URihhcmcscDEscDIpCi0JLy8jZGVmaW5lIFBSSU5URjMoYXJnLHAxLHAyLHAzKSAgICAgICBQUklOVEYoYXJnLHAxLHAyLHAzKQotCS8vI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgUFJJTlRGKGFyZyxwMSxwMixwMyxwNCkKLSNlbmRpZgotCi0jaWZkZWYgQVNTRVJUTVNHCi0jdW5kZWYgQVNTRVJUTVNHCi0jZW5kaWYKLQotI2RlZmluZSBBU1NFUlRNU0coZXhwcixzdHJpbmcpICBpZiAoIShleHByKSkgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUJveCAoTlVMTCwgc3RyaW5nLCAiQXNzZXJ0aW9uIGZhaWxlZCIsIE1CX09LIHwgTUJfSUNPTkVSUk9SKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgKC0xKTt9Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9OT19PU18pCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0gICAgLy8yOS4xMS4yMDA0IGYuai4gc29uc3QgaXN0IG1lbWNweSB1bmQgbWVtc2V0IHVuYmVrYW5udAotLy8gICAgI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEVQTF9NRU1DUFkoZHN0LHNyYyxzaXopICAgICBtZW1jcHkoKHZvaWQqKShkc3QpLChjb25zdCB2b2lkKikoc3JjKSwoc2l6ZV90KShzaXopKTsKLSNkZWZpbmUgRVBMX01FTVNFVChkc3QsdmFsLHNpeikgICAgIG1lbXNldCgodm9pZCopKGRzdCksKGludCkodmFsKSwoc2l6ZV90KShzaXopKTsKLQotI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCi0jZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopcHRyKQotCi0jaWZuZGVmIFBSSU5URjAKLSNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIFRSQUNFCi0jZGVmaW5lIFBSSU5URjAoYXJnKSAgICAgICAgICAgICAgICBUUkFDRTAoYXJnKQotI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgVFJBQ0UxKGFyZyxwMSkKLSNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFRSQUNFMihhcmcscDEscDIpCi0jZGVmaW5lIFBSSU5URjMoYXJnLHAxLHAyLHAzKSAgICAgICBUUkFDRTMoYXJnLHAxLHAyLHAzKQotI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgVFJBQ0U0KGFyZyxwMSxwMixwMyxwNCkKLQkvLyNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIHByaW50ZgotCS8vI2RlZmluZSBQUklOVEYwKGFyZykgICAgICAgICAgICAgICAgUFJJTlRGKGFyZykKLQkvLyNkZWZpbmUgUFJJTlRGMShhcmcscDEpICAgICAgICAgICAgIFBSSU5URihhcmcscDEpCi0JLy8jZGVmaW5lIFBSSU5URjIoYXJnLHAxLHAyKSAgICAgICAgICBQUklOVEYoYXJnLHAxLHAyKQotCS8vI2RlZmluZSBQUklOVEYzKGFyZyxwMSxwMixwMykgICAgICAgUFJJTlRGKGFyZyxwMSxwMixwMykKLQkvLyNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFBSSU5URihhcmcscDEscDIscDMscDQpCi0jZW5kaWYKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykKLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNlbHNlCi0vLyAgICAgICAgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2VuZGlmCiAKICAgICAvLzI5LjExLjIwMDQgZi5qLiBzb25zdCBpc3QgbWVtY3B5IHVuZCBtZW1zZXQgdW5iZWthbm50CiAvLyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xNzksMTMgKzk1LDggQEAKICNkZWZpbmUgRVBMX01FTUNQWShkc3Qsc3JjLHNpeikgICAgIG1lbWNweSgodm9pZCopKGRzdCksKGNvbnN0IHZvaWQqKShzcmMpLChzaXplX3QpKHNpeikpOwogI2RlZmluZSBFUExfTUVNU0VUKGRzdCx2YWwsc2l6KSAgICAgbWVtc2V0KCh2b2lkKikoZHN0KSwoaW50KSh2YWwpLChzaXplX3QpKHNpeikpOwogCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgRVBMX01BTExPQyhzaXopICAgICAgICAgICAgIG1hbGxvYygoc2l6ZV90KShzaXopKQotI2RlZmluZSBFUExfRlJFRShwdHIpICAgICAgICAgICAgICAgZnJlZSgodm9pZCAqKXB0cikKLSNlbHNlCiAjZGVmaW5lIEVQTF9NQUxMT0Moc2l6KSAgICAgICAgICAgICBrbWFsbG9jKChzaXplX3QpKHNpeiksIEdGUF9LRVJORUwpCiAjZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBrZnJlZSgodm9pZCAqKXB0cikKLSNlbmRpZgogCiAjaWZuZGVmIFBSSU5URjAKICNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIFRSQUNFCkBAIC0yMDIsOCArMTEzLDYgQEAKIAkvLyNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFBSSU5URihhcmcscDEscDIscDMscDQpCiAjZW5kaWYKIAotI2VuZGlmCi0KICNkZWZpbmUgRVBMX1RHVF9JTlRNQVNLX0VUSCAgICAgMHgwMDAxCS8vIGV0aGVybmV0IGludGVycnVwdAogI2RlZmluZSBFUExfVEdUX0lOVE1BU0tfRE1BICAgICAweDAwMDIJLy8gRE1BIGludGVycnVwdAogCkBAIC0yMTcsMTcgKzEyNiwxNSBAQAogCiAvLyBjdXJyZW50bHkgbm8gVGltZXIgZnVuY3Rpb25zIGFyZSBuZWVkZWQgYnkgRVBMIHN0YWNrCiAvLyBzbyB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0Ci0vL3ZvaWQgIFBVQkxJQyBUZ3RUaW1lckluaXQodm9pZCk7Ci0vL0RXT1JEIFBVQkxJQyBUZ3RHZXRUaWNrQ291bnQodm9pZCk7Ci0vL3ZvaWQgUFVCTElDIFRndEdldE5ldFRpbWUodEVwbE5ldFRpbWUgKiBwTmV0VGltZV9wKTsKKy8vdm9pZCAgVGd0VGltZXJJbml0KHZvaWQpOworLy91MzIgVGd0R2V0VGlja0NvdW50KHZvaWQpOworLy92b2lkIFRndEdldE5ldFRpbWUodEVwbE5ldFRpbWUgKiBwTmV0VGltZV9wKTsKIAogLy8gZnVuY3Rpb25zIGZvciBldGhlcm5ldCBkcml2ZXIKLXRFcGxLZXJuZWwgUFVCTElDIFRndEluaXRFdGhJc3Iodm9pZCk7Ci12b2lkIFBVQkxJQyBUZ3RGcmVlRXRoSXNyKHZvaWQpOwotdm9pZCBQVUJMSUMgVGd0RW5hYmxlR2xvYmFsSW50ZXJydXB0KEJZVEUgZkVuYWJsZV9wKTsKLXZvaWQgUFVCTElDIFRndEVuYWJsZUV0aEludGVycnVwdDAoQllURSBmRW5hYmxlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKLXZvaWQgUFVCTElDIFRndEVuYWJsZUV0aEludGVycnVwdDEoQllURSBmRW5hYmxlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKK3RFcGxLZXJuZWwgVGd0SW5pdEV0aElzcih2b2lkKTsKK3ZvaWQgVGd0RnJlZUV0aElzcih2b2lkKTsKK3ZvaWQgVGd0RW5hYmxlR2xvYmFsSW50ZXJydXB0KHU4IGZFbmFibGVfcCk7Cit2b2lkIFRndEVuYWJsZUV0aEludGVycnVwdDAodTggZkVuYWJsZV9wLCB1bnNpZ25lZCBpbnQgdWlJbnRlcnJ1cHRNYXNrX3ApOwordm9pZCBUZ3RFbmFibGVFdGhJbnRlcnJ1cHQxKHU4IGZFbmFibGVfcCwgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTFRBUkdFVF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lci5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lci5oCmluZGV4IGZhY2JmZDguLmQxYTczZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVyLmgKQEAgLTEwNyw4ICsxMDcsNyBAQAogCiB9IHRFcGxUaW1lckV2ZW50QXJnOwogCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbFRpbWVya0NhbGxiYWNrKSAodEVwbFRpbWVyRXZlbnRBcmcgKgotCQkJCQkJIHBFdmVudEFyZ19wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxUaW1lcmtDYWxsYmFjaykgKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBmdW5jdGlvbiBwcm90b3R5cGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydUxpbnV4S2VybmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydUxpbnV4S2VybmVsLmMKaW5kZXggMDg4MjBkMS4uZmY4MGZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVMaW51eEtlcm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1TGludXhLZXJuZWwuYwpAQCAtOTksNyArOTksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgdm9pZCBQVUJMSUMgRXBsVGltZXJ1Q2JNcyh1bnNpZ25lZCBsb25nIHVsUGFyYW1ldGVyX3ApOworc3RhdGljIHZvaWQgRXBsVGltZXJ1Q2JNcyh1bnNpZ25lZCBsb25nIHVsUGFyYW1ldGVyX3ApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUluaXQoKQordEVwbEtlcm5lbCBFcGxUaW1lcnVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUFkZEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsVGltZXJ1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTgyLDcgKzE4Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxUaW1lcnVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMDcsOSArMjA3LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVTZXRUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJICAgICAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCit0RXBsS2VybmVsIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJICAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpAQCAtMjU3LDkgKzI1Nyw5IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKK3RFcGxLZXJuZWwgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJCSAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKKwkJCQkgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApCit0RXBsS2VybmVsIEVwbFRpbWVydURlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsVGltZXJ1RGF0YSAqcERhdGE7CkBAIC0zNzAsNyArMzcwLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1CT09MIFBVQkxJQyBFcGxUaW1lcnVJc1RpbWVyQWN0aXZlKHRFcGxUaW1lckhkbCBUaW1lckhkbF9wKQorQk9PTCBFcGxUaW1lcnVJc1RpbWVyQWN0aXZlKHRFcGxUaW1lckhkbCBUaW1lckhkbF9wKQogewogCUJPT0wgZkFjdGl2ZSA9IEZBTFNFOwogCXRFcGxUaW1lcnVEYXRhICpwRGF0YTsKQEAgLTQxNyw3ICs0MTcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB2b2lkIFBVQkxJQyBFcGxUaW1lcnVDYk1zKHVuc2lnbmVkIGxvbmcgdWxQYXJhbWV0ZXJfcCkKK3N0YXRpYyB2b2lkIEVwbFRpbWVydUNiTXModW5zaWduZWQgbG9uZyB1bFBhcmFtZXRlcl9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVOdWxsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydU51bGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBjZTQwMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydU51bGwuYworKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgc291cmNlIGZpbGUgZm9yIEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgTlVMTC1JbXBsZW1lbnRhdGlvbgotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbFRpbWVydU51bGwuYyx2ICQKLQotICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCi0KLSAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuMyAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCi0KLSAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCi0KLSAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICBLRUlMIHVWaXNpb24gMgotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDYvMDcvMDYgay50LjogICBzdGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgInVzZXIvRXBsVGltZXJ1LmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIEcgTCBPIEIgQSBMICAgRCBFIEYgSSBOIEkgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gbG9jYWwgdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBtb2R1bCBnbG9iYWxlIHZhcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICBDIEwgQSBTIFMgIDxFcGwgVXNlcnNwYWNlLVRpbWVybW9kdWxlIE5VTEwtSW1wbGVtZW50YXRpb24+ICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIERlc2NyaXB0aW9uOiBFcGwgVXNlcnNwYWNlLVRpbWVybW9kdWxlIE5VTEwtSW1wbGVtZW50YXRpb24KLS8vCi0vLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFUgQiBMIEkgQyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydUluaXQKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gaW5pdCBmaXJzdCBpbnN0YW5jZQotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczoKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVJbml0KCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IEVwbFRpbWVydUFkZEluc3RhbmNlKCk7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVBZGRJbnN0YW5jZQotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBpbml0IGFkZGl0aW9uYWwgaW5zdGFuY2UKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1QWRkSW5zdGFuY2UoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVEZWxJbnN0YW5jZQotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBkZWx0ZSBpbnN0YW5jZQotLy8gICAgICAgICAgICAgIC0+IHVuZGVyIFdpbjMyIG5vdGhpbmcgdG8gZG8KLS8vICAgICAgICAgICAgICAtPiBubyBpbnN0bmFjZSB0YWJsZSBuZWVkZWQKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2UoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVTZXRUaW1lck1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGNyZWF0ZSBhIHRpbWVyIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIHBvaW50ZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLyAgICAgICAgICAgICAgdWxUaW1lX3AgICAgPSB0aW1lIGZvciB0aW1lciBpbiBtcwotLy8gICAgICAgICAgICAgIEFyZ3VtZW50X3AgID0gYXJndW1lbnQgZm9yIHRpbWVyCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1U2V0VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAotCQkJCSAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBoYW5kbGUKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci19Ci0KLSAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVNb2RpZnlUaW1lck1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGNoYW5nZSBhIHRpbWVyIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIHBvaW50ZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLyAgICAgICAgICAgICAgdWxUaW1lX3AgICAgPSB0aW1lIGZvciB0aW1lciBpbiBtcwotLy8gICAgICAgICAgICAgIEFyZ3VtZW50X3AgID0gYXJndW1lbnQgZm9yIHRpbWVyCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgcGFyYW1ldGVyCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0gLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1RGVsZXRlVGltZXIKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gZGVsdGUgYSB0aW1lcgotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczogIHBUaW1lckhkbF9wID0gcG9pbnRlciB0byBhIGJ1ZmZlciB0byBmaWxsIGluIHRoZSBoYW5kbGUKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgcGFyYW1ldGVyCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzZXQgaGFuZGxlIGludmFsaWRlCi0JKnBUaW1lckhkbF9wID0gMDsKLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotCi19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBSIEkgViBBIFQgRSAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1V2luMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1V2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2N2I0ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydVdpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAoYykgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCwgRC0wNzk3MyBHcmVpeiwgQXVndXN0LUJlYmVsLVN0ci4gMjkKLSAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KLQotICBQcm9qZWN0OiAgICAgIG9wZW5QT1dFUkxJTksKLQotICBEZXNjcmlwdGlvbjogIHNvdXJjZSBmaWxlIGZvciBFcGwgVXNlcnNwYWNlLVRpbWVybW9kdWxlIGZvciBXaW4zMgotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbFRpbWVydVdpbjMyLmMsdiAkCi0KLSAgICAgICAgICAgICAgICAkQXV0aG9yOiBELktydWVnZXIgJAotCi0gICAgICAgICAgICAgICAgJFJldmlzaW9uOiAxLjQgJCAgJERhdGU6IDIwMDgvMDQvMTcgMjE6MzY6MzIgJAotCi0gICAgICAgICAgICAgICAgJFN0YXRlOiBFeHAgJAotCi0gICAgICAgICAgICAgICAgQnVpbGQgRW52aXJvbm1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIEdDQyBWMy40Ci0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFJldmlzaW9uIEhpc3Rvcnk6Ci0KLSAgMjAwNi8wNy8wNiBrLnQuOiAgIHN0YXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAidXNlci9FcGxUaW1lcnUuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgRyBMIE8gQiBBIEwgICBEIEUgRiBJIE4gSSBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCB0eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHsKLQl0RXBsVGltZXJBcmcgVGltZXJBcmd1bWVudDsKLQlIQU5ETEUgRGVsdGVIYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyB1bFRpbWVvdXQ7Ci0KLX0gdEVwbFRpbWVydVRocmVhZDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUxQQ1JJVElDQUxfU0VDVElPTiBtX3BDcml0aWNhbFNlY3Rpb247Ci0JQ1JJVElDQUxfU0VDVElPTiBtX0NyaXRpY2FsU2VjdGlvbjsKLX0gdEVwbFRpbWVydUluc3RhbmNlOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG1vZHVsIGdsb2JhbGUgdmFycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsVGltZXJ1SW5zdGFuY2UgRXBsVGltZXJ1SW5zdGFuY2VfZzsKLXN0YXRpYyB0RXBsVGltZXJ1VGhyZWFkIFRocmVhZERhdGFfbDsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRFdPUkQgUFVCTElDIEVwbFNkb1RpbWVydVRocmVhZG1zKExQVk9JRCBscFBhcmFtZXRlcik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIEMgTCBBIFMgUyAgPEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgZm9yIFdpbjMyPiAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gRGVzY3JpcHRpb246IEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgZm9yIFdpbjMyCi0vLwotLy8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBVIEIgTCBJIEMgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVJbml0Ci0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGluaXQgZmlyc3QgaW5zdGFuY2UKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1SW5pdCgpCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0KLQlSZXQgPSBFcGxUaW1lcnVBZGRJbnN0YW5jZSgpOwotCi0JcmV0dXJuIFJldDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1QWRkSW5zdGFuY2UKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gaW5pdCBhZGRpdGlvbmFsIGluc3RhbmNlCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUFkZEluc3RhbmNlKCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY3JlYXRlIGNyaXRpY2FsIHNlY3Rpb24KLQlFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbiA9Ci0JICAgICZFcGxUaW1lcnVJbnN0YW5jZV9nLm1fQ3JpdGljYWxTZWN0aW9uOwotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oRXBsVGltZXJ1SW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24pOwotCi0JcmV0dXJuIFJldDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1RGVsSW5zdGFuY2UKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gZGVsdGUgaW5zdGFuY2UKLS8vICAgICAgICAgICAgICAtPiB1bmRlciBXaW4zMiBub3RoaW5nIHRvIGRvCi0vLyAgICAgICAgICAgICAgLT4gbm8gaW5zdG5hY2UgdGFibGUgbmVlZGVkCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydURlbEluc3RhbmNlKCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JcmV0dXJuIFJldDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1U2V0VGltZXJNcwotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBjcmVhdGUgYSB0aW1lciBhbmQgcmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBwb2ludGVyCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcFRpbWVySGRsX3AgPSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIGZpbGwgaW4gdGhlIGhhbmRsZQotLy8gICAgICAgICAgICAgIHVsVGltZV9wICAgID0gdGltZSBmb3IgdGltZXIgaW4gbXMKLS8vICAgICAgICAgICAgICBBcmd1bWVudF9wICA9IGFyZ3VtZW50IGZvciB0aW1lcgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQlIQU5ETEUgRGVsZXRlSGFuZGxlOwotCUhBTkRMRSBUaHJlYWRIYW5kbGU7Ci0JRFdPUkQgVGhyZWFkSWQ7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCS8vIGNoZWNrIGhhbmRsZQotCWlmIChwVGltZXJIZGxfcCA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxUaW1lckludmFsaWRIYW5kbGU7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gZW50ZXIgIGNyaXRpY2FsIHNlY3Rpb24KLQlFbnRlckNyaXRpY2FsU2VjdGlvbihFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLQkvLyBmaXJzdCBjcmVhdGUgZXZlbnQgdG8gZGVsZXRlIHRpbWVyCi0JRGVsZXRlSGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKLQlpZiAoRGVsZXRlSGFuZGxlID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gc2V0IGhhbmRsZSBmb3IgY2FsbGVyCi0JKnBUaW1lckhkbF9wID0gKHRFcGxUaW1lckhkbCkgRGVsZXRlSGFuZGxlOwotCi0JLy8gZmlsbCBkYXRhIGZvciB0aHJlYWQKLQlUaHJlYWREYXRhX2wuRGVsdGVIYW5kbGUgPSBEZWxldGVIYW5kbGU7Ci0JRVBMX01FTUNQWSgmVGhyZWFkRGF0YV9sLlRpbWVyQXJndW1lbnQsICZBcmd1bWVudF9wLAotCQkgICBzaXplb2YodEVwbFRpbWVyQXJnKSk7Ci0JVGhyZWFkRGF0YV9sLnVsVGltZW91dCA9IHVsVGltZV9wOwotCi0JLy8gY3JlYXRlIHRocmVhZCB0byBjcmVhdGUgd2FpdGFibGUgdGltZXIgYW5kIHdhaXQgZm9yIHRpbWVyCi0JVGhyZWFkSGFuZGxlID0gQ3JlYXRlVGhyZWFkKE5VTEwsCi0JCQkJICAgIDAsCi0JCQkJICAgIEVwbFNkb1RpbWVydVRocmVhZG1zLAotCQkJCSAgICAmVGhyZWFkRGF0YV9sLCAwLCAmVGhyZWFkSWQpOwotCWlmIChUaHJlYWRIYW5kbGUgPT0gTlVMTCkgewotCQkvLyBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uCi0JCUxlYXZlQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCQkvLyBkZWx0ZSBoYW5kbGUKLQkJQ2xvc2VIYW5kbGUoRGVsZXRlSGFuZGxlKTsKLQotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0gLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcwotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBjaGFuZ2UgYSB0aW1lciBhbmQgcmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBwb2ludGVyCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcFRpbWVySGRsX3AgPSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIGZpbGwgaW4gdGhlIGhhbmRsZQotLy8gICAgICAgICAgICAgIHVsVGltZV9wICAgID0gdGltZSBmb3IgdGltZXIgaW4gbXMKLS8vICAgICAgICAgICAgICBBcmd1bWVudF9wICA9IGFyZ3VtZW50IGZvciB0aW1lcgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydU1vZGlmeVRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAotCQkJCQkgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0JSEFORExFIERlbGV0ZUhhbmRsZTsKLQlIQU5ETEUgVGhyZWFkSGFuZGxlOwotCURXT1JEIFRocmVhZElkOwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBwYXJhbWV0ZXIKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0JRGVsZXRlSGFuZGxlID0gKEhBTkRMRSkgKCpwVGltZXJIZGxfcCk7Ci0KLQkvLyBzZXQgZXZlbnQgdG8gZW5kIHRpbWVyIHRhc2sgZm9yIHRoaXMgdGltZXIKLQlTZXRFdmVudChEZWxldGVIYW5kbGUpOwotCi0JLy8gY3JlYXRlIG5ldyB0aW1lcgotCS8vIGZpcnN0IGNyZWF0ZSBldmVudCB0byBkZWxldGUgdGltZXIKLQlEZWxldGVIYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOwotCWlmIChEZWxldGVIYW5kbGUgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzZXQgaGFuZGxlIGZvciBjYWxsZXIKLQkqcFRpbWVySGRsX3AgPSAodEVwbFRpbWVySGRsKSBEZWxldGVIYW5kbGU7Ci0KLQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCS8vIGZpbGwgZGF0YSBmb3IgdGhyZWFkCi0JVGhyZWFkRGF0YV9sLkRlbHRlSGFuZGxlID0gRGVsZXRlSGFuZGxlOwotCUVQTF9NRU1DUFkoJlRocmVhZERhdGFfbC5UaW1lckFyZ3VtZW50LCAmQXJndW1lbnRfcCwKLQkJICAgc2l6ZW9mKHRFcGxUaW1lckFyZykpOwotCVRocmVhZERhdGFfbC51bFRpbWVvdXQgPSB1bFRpbWVfcDsKLQotCS8vIGNyZWF0ZSB0aHJlYWQgdG8gY3JlYXRlIHdhaXRhYmxlIHRpbWVyIGFuZCB3YWl0IGZvciB0aW1lcgotCVRocmVhZEhhbmRsZSA9IENyZWF0ZVRocmVhZChOVUxMLAotCQkJCSAgICAwLAotCQkJCSAgICBFcGxTZG9UaW1lcnVUaHJlYWRtcywKLQkJCQkgICAgJlRocmVhZERhdGFfbCwgMCwgJlRocmVhZElkKTsKLQlpZiAoVGhyZWFkSGFuZGxlID09IE5VTEwpIHsKLQkJLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbgotCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLQkJLy8gZGVsdGUgaGFuZGxlCi0KLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLSAgICAgIEV4aXQ6Ci0JcmV0dXJuIFJldDsKLX0KLQotIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydURlbGV0ZVRpbWVyCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGRlbHRlIGEgdGltZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0JSEFORExFIERlbGV0ZUhhbmRsZTsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgcGFyYW1ldGVyCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQotCURlbGV0ZUhhbmRsZSA9IChIQU5ETEUpICgqcFRpbWVySGRsX3ApOwotCi0JLy8gc2V0IGV2ZW50IHRvIGVuZCB0aW1lciB0YXNrIGZvciB0aGlzIHRpbWVyCi0JU2V0RXZlbnQoRGVsZXRlSGFuZGxlKTsKLQotCS8vIHNldCBoYW5kbGUgaW52YWxpZGUKLQkqcFRpbWVySGRsX3AgPSAwOwotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci0KLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFNkb1RpbWVydVRocmVhZG1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGltZXIgYXMgdGhyZWFkCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgbHBQYXJhbWV0ZXIgPSBwb2ludGVyIHRvIHN0cnVjdHVyIG9mIHR5cGUgdEVwbFRpbWVydVRocmVhZAotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgRFdPUkQgPSBFcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLURXT1JEIFBVQkxJQyBFcGxTZG9UaW1lcnVUaHJlYWRtcyhMUFZPSUQgbHBQYXJhbWV0ZXIpCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbFRpbWVydVRocmVhZCAqcFRocmVhZERhdGE7Ci0JSEFORExFIGFIYW5kbGVzWzJdOwotCUJPT0wgZlJldHVybjsKLQlMQVJHRV9JTlRFR0VSIFRpbWVvdXRUaW1lOwotCXVuc2lnbmVkIGxvbmcgdWxFdmVudDsKLQl0RXBsRXZlbnQgRXBsRXZlbnQ7Ci0JdEVwbFRpbWVydVRocmVhZCBUaHJlYWREYXRhOwotCXRFcGxUaW1lckV2ZW50QXJnIFRpbWVyRXZlbnRBcmc7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCS8vIGdldCBwb2ludGVyIHRvIGRhdGEKLQlwVGhyZWFkRGF0YSA9ICh0RXBsVGltZXJ1VGhyZWFkICopIGxwUGFyYW1ldGVyOwotCS8vIGNvcHkgdGhyZWFkIGRhdGEKLQlFUExfTUVNQ1BZKCZUaHJlYWREYXRhLCBwVGhyZWFkRGF0YSwgc2l6ZW9mKFRocmVhZERhdGEpKTsKLQlwVGhyZWFkRGF0YSA9ICZUaHJlYWREYXRhOwotCi0JLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCS8vIGNyZWF0ZSB3YWl0YWJsZSB0aW1lcgotCWFIYW5kbGVzWzFdID0gQ3JlYXRlV2FpdGFibGVUaW1lcihOVUxMLCBGQUxTRSwgTlVMTCk7Ci0JaWYgKGFIYW5kbGVzWzFdID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gc2V0IHRpbWVyCi0JLy8gc2V0IHRpbWVvdXQgaW50ZXJ2YWwgLT4gbmVlZGVkIHRvIGJlIG5lZ2F0aXYKLQkvLyAtPiBiZWNhdXNlIHJlbGF0aXZlIHRpbWVvdXQKLQkvLyAtPiBtdWx0aXBseSBieSAxMDAwMCBmb3IgMTAwIG5zIHRpbWViYXNlIG9mIGZ1bmN0aW9uCi0JVGltZW91dFRpbWUuUXVhZFBhcnQgPSAoKChsb25nIGxvbmcpcFRocmVhZERhdGEtPnVsVGltZW91dCkgKiAtMTAwMDApOwotCWZSZXR1cm4gPSBTZXRXYWl0YWJsZVRpbWVyKGFIYW5kbGVzWzFdLAotCQkJCSAgICZUaW1lb3V0VGltZSwgMCwgTlVMTCwgTlVMTCwgRkFMU0UpOwotCWlmIChmUmV0dXJuID09IDApIHsKLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gc2F2ZSBkZWx0ZSBldmVudCBoYW5kbGUgaW4gaGFuZGxlIGFycmF5Ci0JYUhhbmRsZXNbMF0gPSBwVGhyZWFkRGF0YS0+RGVsdGVIYW5kbGU7Ci0KLQkvLyB3YWl0IGZvciBvbmUgb2YgdGhlIGV2ZW50cwotCXVsRXZlbnQgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKDIsICZhSGFuZGxlc1swXSwgRkFMU0UsIElORklOSVRFKTsKLQlpZiAodWxFdmVudCA9PSBXQUlUX09CSkVDVF8wKSB7CS8vIGRlbHRlIGV2ZW50Ci0KLQkJLy8gY2xvc2UgaGFuZGVscwotCQlDbG9zZUhhbmRsZShhSGFuZGxlc1sxXSk7Ci0JCS8vIHRlcm1pbmF0ZSB0aHJlYWQKLQkJZ290byBFeGl0OwotCX0gZWxzZSBpZiAodWxFdmVudCA9PSAoV0FJVF9PQkpFQ1RfMCArIDEpKSB7CS8vIHRpbWVyIGV2ZW50Ci0JCS8vIGNhbGwgZXZlbnQgZnVuY3Rpb24KLQkJVGltZXJFdmVudEFyZy5tX1RpbWVySGRsID0KLQkJICAgICh0RXBsVGltZXJIZGwpIHBUaHJlYWREYXRhLT5EZWx0ZUhhbmRsZTsKLQkJVGltZXJFdmVudEFyZy5tX3VsQXJnID0gcFRocmVhZERhdGEtPlRpbWVyQXJndW1lbnQubV91bEFyZzsKLQotCQlFcGxFdmVudC5tX0V2ZW50U2luayA9IHBUaHJlYWREYXRhLT5UaW1lckFyZ3VtZW50Lm1fRXZlbnRTaW5rOwotCQlFcGxFdmVudC5tX0V2ZW50VHlwZSA9IGtFcGxFdmVudFR5cGVUaW1lcjsKLQkJRVBMX01FTVNFVCgmRXBsRXZlbnQubV9OZXRUaW1lLCAweDAwLCBzaXplb2YodEVwbE5ldFRpbWUpKTsKLQkJRXBsRXZlbnQubV9wQXJnID0gJlRpbWVyRXZlbnRBcmc7Ci0JCUVwbEV2ZW50Lm1fdWlTaXplID0gc2l6ZW9mKFRpbWVyRXZlbnRBcmcpOwotCi0JCVJldCA9IEVwbEV2ZW50dVBvc3QoJkVwbEV2ZW50KTsKLQotCQkvLyBjbG9zZSBoYW5kZWxzCi0JCUNsb3NlSGFuZGxlKGFIYW5kbGVzWzFdKTsKLQkJLy8gdGVybWluYXRlIHRocmVhZAotCQlnb3RvIEV4aXQ7Ci0KLQl9IGVsc2UgewkJLy8gZXJyb3IKLQkJdWxFdmVudCA9IEdldExhc3RFcnJvcigpOwotCQlUUkFDRTEoIkVycm9yIGluIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMgRXJyb3Jjb2RlOiAweCV4XG4iLAotCQkgICAgICAgdWxFdmVudCk7Ci0JCS8vIHRlcm1pbmF0ZSB0aHJlYWQKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hhcmVkQnVmZi5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMKaW5kZXggOWZiMDlkNi4uMmIxMGMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMKQEAgLTg1LDE0ICs4NSw4IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZi5oIgogI2luY2x1ZGUgIlNoYklwYy5oIgogCi0vLyBkLmsuIExpbnV4IGtlcm5lbCBtb2R1bGVzIG5lZWRzIG90aGVyIGhlYWRlciBmaWxlcyBmb3IgbWVtY3B5KCkKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDIsOCArOTYsNiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiAoIWRlZmluZWQoU0hBUkVEQlVGRl9JTkxJTkVEKSkgfHwgZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBDb25maWd1cmF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc3LDcgKzE2OSw3IEBACiAvLyAgR2V0IHBvaW50ZXIgdG8gQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJDaXJCdWZmICpTaGJDaXJHZXRCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkNpckJ1ZmYgKlNoYkNpckdldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xOTMsNyArMTg1LDcgQEAKIC8vICBHZXQgcG9pbnRlciB0byBMaW5lYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJMaW5CdWZmICpTaGJMaW5HZXRCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkxpbkJ1ZmYgKlNoYkxpbkdldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiTGluQnVmZiAqcFNoYkxpbkJ1ZmY7CkBAIC0yMTAsNyArMjAyLDYgQEAKIHZvaWQgU2hiQ2lyU2lnbmFsSGFuZGxlclJlc2V0KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBmVGltZU91dF9wKTsKIAotI2VuZGlmCiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjE4LDcgKzIwOSw2IEBACiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIAotI2lmICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQogLy8gbm90IGlubGluZWQgZXh0ZXJuYWwgZnVuY3Rpb25zCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNjMsMTggKzM1MywxMyBAQAogCiB9CiAKLSNlbmRpZiAvLyAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotI2lmICghZGVmaW5lZChTSEFSRURCVUZGX0lOTElORUQpKSB8fCBkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFJlc2V0IENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyUmVzZXRCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVPdXRfcCwKLQkJCQkJICAgIHRTaGJDaXJTaWdIbmRsclJlc2V0Ci0JCQkJCSAgICBwZm5TaWduYWxIYW5kbGVyUmVzZXRfcCkKK3RTaGJFcnJvciBTaGJDaXJSZXNldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVPdXRfcCwKKwkJCSAgICB0U2hiQ2lyU2lnSG5kbHJSZXNldCBwZm5TaWduYWxIYW5kbGVyUmVzZXRfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTQ0MCw5ICs0MjUsOSBAQAogLy8gIFdyaXRlIGRhdGEgYmxvY2sgdG8gQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJXcml0ZURhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUJsb2NrX3AsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUJsb2NrU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpcldyaXRlRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUJsb2NrX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTYwOCw5ICs1OTMsOSBAQAogLy8gIEFsbG9jYXRlIGJsb2NrIHdpdGhpbiB0aGUgQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlciBmb3IgY2h1bmsgd3JpdGluZwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJBbGxvY0RhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgICB0U2hiQ2lyQ2h1bmsgKiBwU2hiQ2lyQ2h1bmtfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQnVmZmVyU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpckFsbG9jRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICAgICB0U2hiQ2lyQ2h1bmsgKiBwU2hiQ2lyQ2h1bmtfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUJ1ZmZlclNpemVfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTcxNywxMiArNzAyLDExIEBACiAvLyAgV3JpdGUgZGF0YSBjaHVuayBpbnRvIGFuIGFsbG9jYXRlZCBidWZmZXIgb2YgdGhlIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyV3JpdGVEYXRhQ2h1bmsodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgICAgdFNoYkNpckNodW5rICogcFNoYkNpckNodW5rX3AsCi0JCQkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUNodW5rX3AsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUNodW5rU2l6ZV9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCSAgICAgICAqcGZCdWZmZXJDb21wbGV0ZWRfcCkKK3RTaGJFcnJvciBTaGJDaXJXcml0ZURhdGFDaHVuayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgICAgdFNoYkNpckNodW5rICpwU2hiQ2lyQ2h1bmtfcCwKKwkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUNodW5rX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFDaHVua1NpemVfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnBmQnVmZmVyQ29tcGxldGVkX3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC04NTcsMTAgKzg0MSwxMCBAQAogLy8gIFJlYWQgZGF0YSBibG9jayBmcm9tIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyUmVhZERhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBEc3REYXRhQmxvY2tfcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFJkQnVmZlNpemVfcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqcHVsRGF0YUJsb2NrU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpclJlYWREYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJICAgICAgdm9pZCAqcERzdERhdGFCbG9ja19wLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFJkQnVmZlNpemVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTEwMDksOSArOTkzLDggQEAKIC8vICBHZXQgZGF0YSBzaXplIG9mIG5leHQgcmVhZGFibGUgYmxvY2sgZnJvbSBDaXJjdWxhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYkNpckdldFJlYWREYXRhU2l6ZSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQl1bnNpZ25lZCBsb25nCi0JCQkJCQkqcHVsRGF0YUJsb2NrU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpckdldFJlYWREYXRhU2l6ZSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJdW5zaWduZWQgbG9uZyAqcHVsRGF0YUJsb2NrU2l6ZV9wKQogewogCiAJdFNoYkNpckJ1ZmYgKnBTaGJDaXJCdWZmOwpAQCAtMTA3MCw5ICsxMDUzLDggQEAKIC8vICBHZXQgbnVtYmVyIG9mIHJlYWRhYmxlIGJsb2NrcyBmcm9tIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyR2V0UmVhZEJsb2NrQ291bnQodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkJICB1bnNpZ25lZCBsb25nCi0JCQkJCQkgICpwdWxEYXRhQmxvY2tDb3VudF9wKQordFNoYkVycm9yIFNoYkNpckdldFJlYWRCbG9ja0NvdW50KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKnB1bERhdGFCbG9ja0NvdW50X3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xMTEzLDEyICsxMDk1LDkgQEAKIC8vICBkLmsuOiBuZXcgcGFyYW1ldGVyIHByaW9yaXR5IGFzIGVudW0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyU2V0U2lnbmFsSGFuZGxlck5ld0RhdGEodFNoYkluc3RhbmNlCi0JCQkJCQkJcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkJdFNoYkNpclNpZ0huZGxyTmV3RGF0YQotCQkJCQkJCXBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3AsCi0JCQkJCQkJdFNoYlByaW9yaXR5Ci0JCQkJCQkJU2hiUHJpb3JpdHlfcCkKK3RTaGJFcnJvciBTaGJDaXJTZXRTaWduYWxIYW5kbGVyTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJCXRTaGJDaXJTaWdIbmRsck5ld0RhdGEgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKKwkJCQkJdFNoYlByaW9yaXR5IFNoYlByaW9yaXR5X3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xMTY1LDEwICsxMTQ0LDYgQEAKIAogfQogCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIERFQlVHOiBUcmFjZSBDaXJjdWxhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQxMywxOCArMTM4OCwxMyBAQAogCiB9CiAKLSNlbmRpZiAvLyAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotI2lmICghZGVmaW5lZChTSEFSRURCVUZGX0lOTElORUQpKSB8fCBkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFdyaXRlIGRhdGEgYmxvY2sgdG8gTGluZWFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiTGluV3JpdGVEYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERzdEJ1ZmZlck9mZnNfcCwKLQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKnBTcmNEYXRhQmxvY2tfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiTGluV3JpdGVEYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEc3RCdWZmZXJPZmZzX3AsCisJCQkgICAgICAgY29uc3Qgdm9pZCAqcFNyY0RhdGFCbG9ja19wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCiB7CiAKIAl0U2hiTGluQnVmZiAqcFNoYkxpbkJ1ZmY7CkBAIC0xNDg5LDExICsxNDU5LDEwIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFJlYWQgZGF0YSBibG9jayBmcm9tIExpbmVhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYkxpblJlYWREYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgICB2b2lkICpwRHN0RGF0YUJsb2NrX3AsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxTcmNCdWZmZXJPZmZzX3AsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiTGluUmVhZERhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgICB2b2lkICpwRHN0RGF0YUJsb2NrX3AsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsU3JjQnVmZmVyT2Zmc19wLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJMaW5CdWZmICpwU2hiTGluQnVmZjsKQEAgLTE1NTUsMTAgKzE1MjQsNiBAQAogCiB9CiAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgREVCVUc6IFRyYWNlIExpbmVhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTYzOSw3ICsxNjA0LDcgQEAKIAl1bEJ1ZmZTaXplID0gdWxEYXRhU2l6ZV9wOwogCiAJaWYgKHBzekluZm9UZXh0X3AgIT0gTlVMTCkgewotCQlUUkFDRTAocHN6SW5mb1RleHRfcCk7CisJCVRSQUNFMSgiJXMiLCBwc3pJbmZvVGV4dF9wKTsKIAl9CiAJLy8gZHVtcCBidWZmZXIgY29udGVudHMKIAlmb3IgKG5Sb3cgPSAwOzsgblJvdysrKSB7CkBAIC0xNzk0LDYgKzE3NTksNCBAQAogCiB9CiAKLSNlbmRpZgotCiAvLyBFT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hhcmVkQnVmZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmgKaW5kZXggMGVjMWI0Yi4uNGVkYmQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmgKQEAgLTExMCwxNSArMTEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLS8qI2lmIGRlZmluZWQoSU5MSU5FX0ZVTkNUSU9OX0RFRikKLSAgICAjdW5kZWYgIElOTElORV9GVU5DVElPTgotICAgICNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0gICAgI2RlZmluZSBJTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKLSAgICAjZGVmaW5lIFNIQVJFREJVRkZfSU5MSU5FRAotICAgICNpbmNsdWRlICJTaGFyZWRCdWZmLmMiCi0jZW5kaWYKLSovCi0KIAl0U2hiRXJyb3IgU2hiSW5pdCh2b2lkKTsKIAl0U2hiRXJyb3IgU2hiRXhpdCh2b2lkKTsKIApAQCAtMTI5LDcgKzEyMCw2IEBACiAJCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApOwogCXRTaGJFcnJvciBTaGJDaXJSZWxlYXNlQnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCk7CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKIAogCXRTaGJFcnJvciBTaGJDaXJSZXNldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lT3V0X3AsCkBAIC0xNTksNyArMTQ5LDYgQEAKIAkJCQkJCXBmblNoYlNpZ25hbEhhbmRsZXJOZXdEYXRhX3AsCiAJCQkJCQl0U2hiUHJpb3JpdHkgU2hiUHJpb3JpdHlfcCk7CiAKLSNlbmRpZgogCiAvLyBMaW5lYXIgU2hhcmVkIEJ1ZmZlcgogCXRTaGJFcnJvciBTaGJMaW5BbGxvY0J1ZmZlcih1bnNpZ25lZCBsb25nIHVsQnVmZmVyU2l6ZV9wLApAQCAtMTY4LDcgKzE1Nyw2IEBACiAJCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApOwogCXRTaGJFcnJvciBTaGJMaW5SZWxlYXNlQnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCk7CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKIAogCXRTaGJFcnJvciBTaGJMaW5Xcml0ZURhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEc3RCdWZmZXJPZmZzX3AsCkBAIC0xNzksNyArMTY3LDYgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsU3JjQnVmZmVyT2Zmc19wLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApOwogCi0jZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKIAl0U2hiRXJyb3IgU2hiQ2lyVHJhY2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKQEAgLTE5NCwxMCArMTgxLDYgQEAKICNkZWZpbmUgU2hiVHJhY2VEdW1wKHAwLCBwMSwgcDIsIHAzKQogI2VuZGlmCiAKLSN1bmRlZiAgSU5MSU5FX0VOQUJMRUQJCS8vIGRpc2FibGUgYWN0dWFsIGlubGluaW5nIG9mIGZ1bmN0aW9ucwotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OCQkvLyBkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OIHRvIG5vdGhpbmcKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLUxpbnV4S2VybmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1MaW51eEtlcm5lbC5jCmluZGV4IDFkM2NiM2YuLjQ5NzkzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLUxpbnV4S2VybmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMtTGludXhLZXJuZWwuYwpAQCAtNzksOCArNzksNiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiAoIWRlZmluZWQoU0hCSVBDX0lOTElORUQpKSB8fCBkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBDb25maWd1cmF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjExLDEzICsyMDksMTEgQEAKIC8vIG5vdCBpbmxpbmVkIGludGVybmFsIGZ1bmN0aW9ucwogaW50IFNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEodm9pZCAqcHZUaHJlYWRQYXJhbV9wKTsKIGludCBTaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSh2b2lkICpwdlRocmVhZFBhcmFtX3ApOwotI2VuZGlmCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBtb2R1bCBnbG9iYWxlIHZhcnMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCiBzdHJ1Y3Qgc1NoYk1lbVRhYmxlICpwc01lbVRhYmxlRWxlbWVudEZpcnN0X2c7CiAKIHN0YXRpYyB2b2lkICpTaGJJcGNBbGxvY1ByaXZhdGVNZW0odW5zaWduZWQgbG9uZyB1bE1lbVNpemVfcCk7CkBAIC0yMzAsNyArMjI2LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIFNoYklwY0NyYzMyR2V0Q3JjKGNvbnN0IGNoYXIgKnBjU3RyaW5nLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGF1bENyY1RhYmxlWzI1Nl0pOwogCi0jZW5kaWYKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0yMzgsNyArMjMzLDYgQEAKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogCi0jaWYgIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQogLy8gbm90IGlubGluZWQgZXh0ZXJuYWwgZnVuY3Rpb25zCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzMsMTUgKzQyNywxMSBAQAogCXJldHVybiAoU2hiRXJyb3IpOwogfQogCi0jZW5kaWYgLy8gIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotCi0jaWYgKCFkZWZpbmVkKFNIQklQQ19JTkxJTkVEKSkgfHwgZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgRW50ZXIgYXRvbWljIHNlY3Rpb24gZm9yIFNoYXJlZCBCdWZmZXIgYWNjZXNzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY0VudGVyQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiRXJyb3IgU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAogCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKQEAgLTQ2OSw3ICs0NTksNyBAQAogLy8gIExlYXZlIGF0b21pYyBzZWN0aW9uIGZvciBTaGFyZWQgQnVmZmVyIGFjY2VzcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNMZWF2ZUF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkVycm9yIFNoYklwY0xlYXZlQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7CkBAIC00OTYsMTIgKzQ4Niw5IEBACiAvLyAgU3RhcnQgc2lnbmFsaW5nIG9mIG5ldyBkYXRhIChjYWxsZWQgZnJvbSByZWFkaW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkJICAgICAgdFNpZ0huZGxyTmV3RGF0YQotCQkJCQkJICAgICAgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKLQkJCQkJCSAgICAgIHRTaGJQcmlvcml0eQotCQkJCQkJICAgICAgU2hiUHJpb3JpdHlfcCkKK3RTaGJFcnJvciBTaGJJcGNTdGFydFNpZ25hbGluZ05ld0RhdGEodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJCSAgICAgIHRTaWdIbmRsck5ld0RhdGEgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKKwkJCQkgICAgICB0U2hiUHJpb3JpdHkgU2hiUHJpb3JpdHlfcCkKIHsKIAl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKQEAgLTU1Nyw4ICs1NDQsNyBAQAogLy8gIFN0b3Agc2lnbmFsaW5nIG9mIG5ldyBkYXRhIChjYWxsZWQgZnJvbSByZWFkaW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0b3BTaWduYWxpbmdOZXdEYXRhKHRTaGJJbnN0YW5jZQotCQkJCQkJICAgICBwU2hiSW5zdGFuY2VfcCkKK3RTaGJFcnJvciBTaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAJdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwogCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7CkBAIC02MDQsNyArNTkwLDcgQEAKIC8vICBTaWduYWwgbmV3IGRhdGEgKGNhbGxlZCBmcm9tIHdyaXRpbmcgcHJvY2VzcykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiRXJyb3IgU2hiSXBjU2lnbmFsTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKIApAQCAtNjI1LDEyICs2MTEsOSBAQAogLy8gIFN0YXJ0IHNpZ25hbGluZyBmb3Igam9iIHJlYWR5IChjYWxsZWQgZnJvbSB3YWl0aW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nSm9iUmVhZHkodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgICAgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZwotCQkJCQkJICAgICAgIHVsVGltZU91dF9wLAotCQkJCQkJICAgICAgIHRTaWdIbmRsckpvYlJlYWR5Ci0JCQkJCQkgICAgICAgcGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3ApCit0U2hiRXJyb3IgU2hiSXBjU3RhcnRTaWduYWxpbmdKb2JSZWFkeSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lT3V0X3AsCisJCQkJICAgICAgIHRTaWdIbmRsckpvYlJlYWR5IHBmblNpZ25hbEhhbmRsZXJKb2JSZWFkeV9wKQogewogCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwpAQCAtNjYzLDcgKzY0Niw3IEBACiAvLyAgU2lnbmFsIGpvYiByZWFkeSAoY2FsbGVkIGZyb20gZXhlY3V0aW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1NpZ25hbEpvYlJlYWR5KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKK3RTaGJFcnJvciBTaGJJcGNTaWduYWxKb2JSZWFkeSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKIApAQCAtNjg1LDcgKzY2OCw3IEBACiAvLyAgR2V0IHBvaW50ZXIgdG8gY29tbW9uIHVzZWQgc2hhcmUgbWVtb3J5IGFyZWEKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwpAQCAtNjk0LDcgKzY3Nyw3IEBACiAJcFNoYk1lbUhlYWRlciA9CiAJICAgIFNoYklwY0dldFNoYk1lbUhlYWRlcihTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKSk7CiAJaWYgKHBTaGJNZW1IZWFkZXIgIT0gTlVMTCkgewotCQlwU2hiU2hNZW1QdHIgPSAoQllURSAqKSBwU2hiTWVtSGVhZGVyICsgc2l6ZW9mKHRTaGJNZW1IZWFkZXIpOworCQlwU2hiU2hNZW1QdHIgPSAodTggKikgcFNoYk1lbUhlYWRlciArIHNpemVvZih0U2hiTWVtSGVhZGVyKTsKIAl9IGVsc2UgewogCQlwU2hiU2hNZW1QdHIgPSBOVUxMOwogCX0KQEAgLTcwMywxNiArNjg2LDEyIEBACiAKIH0KIAotI2VuZGlmCi0KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogLy8gICAgICAgICAgUCBSIEkgViBBIFQgRSAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogCi0jaWYgIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIEdldCBwb2ludGVyIHRvIHByb2Nlc3MgbG9jYWwgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTYzLDQgKzk0MiwzIEBACiAKIH0KIAotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1XaW4zMi5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMtV2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkxODE0Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1XaW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgUHJvamVjdCBpbmRlcGVuZGVuZCBzaGFyZWQgYnVmZmVyIChsaW5lYXIgKyBjaXJjdWxhcikKLQotICBEZXNjcmlwdGlvbjogIEltcGxlbWVudGF0aW9uIG9mIHBsYXRmb3JtIHNwZWNpZmljIHBhcnQgZm9yIHRoZQotICAgICAgICAgICAgICAgIHNoYXJlZCBidWZmZXIKLSAgICAgICAgICAgICAgICAoSW1wbGVtZW50YXRpb24gZm9yIFdpbjMyKQotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIDIwMDYvMDYvMjcgLXJzOiAgIFYgMS4wMCAoaW5pdGlhbCB2ZXJzaW9uKQotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFdJTlZFUiAgICAgICAweDA0MDAJLy8gI2RlZmluZXMgbmVjZXNzYXJ5IGZvciB1c2FnZSBvZgotI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNDAwCS8vIGZ1bmN0aW9uIDxTaWduYWxPYmplY3RBbmRXYWl0PgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiZ2xvYmFsLmgiCi0jaW5jbHVkZSAic2hhcmVkYnVmZi5oIgotI2luY2x1ZGUgInNoYmlwYy5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICBHIEwgTyBCIEEgTCAgIEQgRSBGIEkgTiBJIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgKCFkZWZpbmVkKFNIQklQQ19JTkxJTkVEKSkgfHwgZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgQ29uZmlndXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBDb25zdGFudCBkZWZpbml0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBNQVhfTEVOX0JVRkZFUl9JRCAgICAgICBNQVhfUEFUSAotCi0jZGVmaW5lIElEWF9FVkVOVF9ORVdfREFUQSAgICAgIDAKLSNkZWZpbmUgSURYX0VWRU5UX1RFUk1fUkVRVSAgICAgMQotI2RlZmluZSBJRFhfRVZFTlRfVEVSTV9SRVNQICAgICAyCi0KLSNkZWZpbmUgTkFNRV9NVVRFWF9CVUZGX0FDQ0VTUyAgIkJ1ZmZBY2Nlc3MiCi0jZGVmaW5lIE5BTUVfRVZFTlRfTkVXX0RBVEEgICAgICJOZXdEYXRhIgotI2RlZmluZSBOQU1FX0VWRU5UX1RFUk1fUkVRVSAgICAiVGVybVJlcXUiCi0jZGVmaW5lIE5BTUVfRVZFTlRfVEVSTV9SRVNQICAgICJUZXJtUmVzcCIKLSNkZWZpbmUgTkFNRV9FVkVOVF9KT0JfUkVBRFkgICAgIkpvYlJlYWR5IgotCi0jZGVmaW5lIFRJTUVPVVRfRU5URVJfQVRPTUlDICAgIDEwMDAJLy8gZm9yIGRlYmdnaW5nOiBJTkZJTklURQotI2RlZmluZSBUSU1FT1VUX1RFUk1fVEhSRUFEICAgICAyMDAwCi0KLSNkZWZpbmUgU0JJX01BR0lDX0lEICAgICAgICAgICAgMHg1MzQyNDkyQgkvLyBtYWdpYyBJRCAoIlNCSSsiKQotI2RlZmluZSBTQkhfTUFHSUNfSUQgICAgICAgICAgICAweDUzNDI0ODJBCS8vIG1hZ2ljIElEICgiU0JIKiIpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTG9jYWwgdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBjb21tb24gaGVhZGVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24gdXNlZAotLy8gYnkgYWxsIHByb2Nlc3NlcyBhdHRhY2hlZCB0aGlzIHNoYXJlZCBtZW1vcnkuIEl0IGluY2x1ZGVzIGNvbW1vbgotLy8gaW5mb3JtYXRpb24gdG8gYWRtaW5pc3RyYXRlL21hbmFnZSB0aGUgc2hhcmVkIGJ1ZmZlciBmcm9tIGEgY291cGxlIG9mCi0vLyBzZXBhcmF0ZWQgcHJvY2Vzc2VzIChlLmcuIHRoZSByZWZlcm5jZSBjb3VudGVyKS4gVGhpcyBzdHJ1Y3R1cmUgaXMKLS8vIGxvY2F0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpdHNlbGYgYW5kIGV4aXN0cwotLy8gY29uc2VxdWVudGx5IG9ubHkgb25lIHRpbWVzIHBlciBzaGFyZWQgbWVtb3J5IGluc3RhbmNlLgotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbV9TYmhNYWdpY0lEOwkvLyBtYWdpYyBJRCAoIlNCSCoiKQotCXVuc2lnbmVkIGxvbmcgbV91bFNoTWVtU2l6ZTsKLQl1bnNpZ25lZCBsb25nIG1fdWxSZWZDb3VudDsKLQljaGFyIG1fc3pCdWZmZXJJRFtNQVhfTEVOX0JVRkZFUl9JRF07Ci0KLSNpZm5kZWYgTkRFQlVHCi0JdW5zaWduZWQgbG9uZyBtX3VsT3duZXJQcm9jSUQ7Ci0jZW5kaWYKLQotfSB0U2hiTWVtSGVhZGVyOwotCi0vLyBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgImV4dGVybmFsIGVudHJ5IHBvaW50IiBmcm9tIGEgc2VwYXJhdGUgcHJvY2VzcwotLy8gdG8gZ2V0IGFjY2VzcyB0byBhIHNoYXJlZCBidWZmZXIuIFRoaXMgc3RydWN0dXJlIGluY2x1ZGVzIGFsbCBwbGF0Zm9ybQotLy8gcmVzcC4gdGFyZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGFkbWluaXN0cmF0ZS9tYW5hZ2UgdGhlIHNoYXJlZAotLy8gYnVmZmVyIGZyb20gYSBzZXBhcmF0ZSBwcm9jZXNzLiBFdmVyeSBwcm9jZXNzIGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQKLS8vIGJ1ZmZlciBoYXMgaXRzIG93biBydW50aW1lIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIHdpdGggaXRzIGluZGl2aWR1YWwKLS8vIHJ1bnRpbWUgZGF0YSAoZS5nLiB0aGUgc2NvcGUgb2YgYW4gZXZlbnQgaGFuZGxlIGlzIGxpbWl0dGVkIHRvIHRoZQotLy8gb3duZXIgcHJvY2VzcyBvbmx5KS4gVGhlIHN0cnVjdHVyZSBtZW1iZXIgPG1fcFNoYk1lbUhlYWRlcj4gcG9pbnRzCi0vLyB0byB0aGUgKHByb2Nlc3Mgc3BlY2lmaWMpIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uCi0vLyBpdHNlbGYuCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBtX1NiaU1hZ2ljSUQ7CS8vIG1hZ2ljIElEICgiU0JJKyIpCi0JSEFORExFIG1faFNoYXJlZE1lbTsKLQlIQU5ETEUgbV9oTXV0ZXhCdWZmQWNjZXNzOwotCUhBTkRMRSBtX2hUaHJlYWROZXdEYXRhOwkvLyB0aHJhZWQgdG8gc2lnbmFsIHRoYXQgbmV3IGRhdGEgYXJlIGF2YWlsYWJsZQotCUhBTkRMRSBtX2FoRXZlbnROZXdEYXRhWzNdOwkvLyBJRFhfRVZFTlRfTkVXX0RBVEEgKyBJRFhfRVZFTlRfVEVSTV9SRVFVICsgSURfRVZFTlRfVEVSTV9SRVNQCi0JdFNpZ0huZGxyTmV3RGF0YSBtX3BmblNpZ0huZGxyTmV3RGF0YTsKLQlIQU5ETEUgbV9oVGhyZWFkSm9iUmVhZHk7CS8vIHRocmVhZCB0byBzaWduYWwgdGhhdCBhIGpvYi9vcGVyYXRpb24gaXMgcmVhZHkgbm93IChlLmcuIHJlc2V0IGJ1ZmZlcikKLQlIQU5ETEUgbV9oRXZlbnRKb2JSZWFkeTsKLQl1bnNpZ25lZCBsb25nIG1fdWxUaW1lT3V0Sm9iUmVhZHk7Ci0JdFNpZ0huZGxySm9iUmVhZHkgbV9wZm5TaWdIbmRsckpvYlJlYWR5OwotCXRTaGJNZW1IZWFkZXIgKm1fcFNoYk1lbUhlYWRlcjsKLQotI2lmbmRlZiBOREVCVUcKLQl1bnNpZ25lZCBsb25nIG1fdWxUaHJlYWRJRE5ld0RhdGE7Ci0JdW5zaWduZWQgbG9uZyBtX3VsVGhyZWFkSURKb2JSZWFkeTsKLSNlbmRpZgotCi19IHRTaGJNZW1JbnN0OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEdsb2JhbCB2YXJpYWJsZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTG9jYWwgdmFyaWFibGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEdldCBwb2ludGVyIHRvIHByb2Nlc3MgbG9jYWwgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYk1lbUluc3QgKlNoYklwY0dldFNoYk1lbUluc3QodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCi0JcFNoYk1lbUluc3QgPSAodFNoYk1lbUluc3QgKikgcFNoYkluc3RhbmNlX3A7Ci0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX1NiaU1hZ2ljSUQgPT0gU0JJX01BR0lDX0lEKTsKLQotCXJldHVybiAocFNoYk1lbUluc3QpOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgR2V0IHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeSBoZWFkZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiTWVtSGVhZGVyICpTaGJJcGNHZXRTaGJNZW1IZWFkZXIodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCXBTaGJNZW1IZWFkZXIgPSBwU2hiTWVtSW5zdC0+bV9wU2hiTWVtSGVhZGVyOwotCUFTU0VSVChwU2hiTWVtSGVhZGVyLT5tX1NiaE1hZ2ljSUQgPT0gU0JIX01BR0lDX0lEKTsKLQotCXJldHVybiAocFNoYk1lbUhlYWRlcik7Ci0KLX0KLQotLy8gbm90IGlubGluZWQgaW50ZXJuYWwgZnVuY3Rpb25zCi1EV09SRCBXSU5BUEkgU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YShMUFZPSUQgcHZUaHJlYWRQYXJhbV9wKTsKLURXT1JEIFdJTkFQSSBTaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeShMUFZPSUQgcHZUaHJlYWRQYXJhbV9wKTsKLWNvbnN0IGNoYXIgKlNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKGNvbnN0IGNoYXIgKnBzekV2ZW50Sm9iTmFtZV9wLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBCT09MIGZHbG9iYWxPYmplY3RfcCk7Ci0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotLy8gdHJ1ZSBpbnRlcm5hbCBmdW5jdGlvbnMgKG5vdCBpbmxpbmVkKQotc3RhdGljIHZvaWQgKlNoYklwY0FsbG9jUHJpdmF0ZU1lbSh1bnNpZ25lZCBsb25nIHVsTWVtU2l6ZV9wKTsKLXN0YXRpYyB2b2lkIFNoYklwY1JlbGVhc2VQcml2YXRlTWVtKHZvaWQgKnBNZW1fcCk7Ci0jZW5kaWYKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFUgQiBMIEkgQyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0vLyBub3QgaW5saW5lZCBleHRlcm5hbCBmdW5jdGlvbnMKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBJbml0aWFsaXplIElQQyBmb3IgU2hhcmVkIEJ1ZmZlciBNb2R1bGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXRTaGJFcnJvciBTaGJJcGNJbml0KHZvaWQpCi17Ci0KLQlyZXR1cm4gKGtTaGJPayk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBEZWluaXRpYWxpemUgSVBDIGZvciBTaGFyZWQgQnVmZmVyIE1vZHVsZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdFNoYkVycm9yIFNoYklwY0V4aXQodm9pZCkKLXsKLQotCXJldHVybiAoa1NoYk9rKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEFsbG9jYXRlIFNoYXJlZCBCdWZmZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXRTaGJFcnJvciBTaGJJcGNBbGxvY0J1ZmZlcih1bnNpZ25lZCBsb25nIHVsQnVmZmVyU2l6ZV9wLAotCQkJICAgIGNvbnN0IGNoYXIgKnBzekJ1ZmZlcklEX3AsCi0JCQkgICAgdFNoYkluc3RhbmNlICogcHBTaGJJbnN0YW5jZV9wLAotCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApCi17Ci0KLQlIQU5ETEUgaFNoYXJlZE1lbTsKLQlMUFZPSUQgcFNoYXJlZE1lbTsKLQl1bnNpZ25lZCBsb25nIHVsU2hNZW1TaXplOwotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwotCXRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2U7Ci0JdW5zaWduZWQgaW50IGZTaE1lbU5ld0NyZWF0ZWQ7Ci0JY29uc3QgY2hhciAqcHN6T2JqZWN0TmFtZTsKLQlIQU5ETEUgaE11dGV4QnVmZkFjY2VzczsKLQlIQU5ETEUgaEV2ZW50TmV3RGF0YTsKLQlIQU5ETEUgaEV2ZW50Sm9iUmVhZHk7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCi0JdWxTaE1lbVNpemUgPSB1bEJ1ZmZlclNpemVfcCArIHNpemVvZih0U2hiTWVtSGVhZGVyKTsKLQlwU2hhcmVkTWVtID0gTlVMTDsKLQlwU2hiSW5zdGFuY2UgPSBOVUxMOwotCWZTaE1lbU5ld0NyZWF0ZWQgPSBGQUxTRTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gKDEpIG9wZW4gYW4gZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IHNoYXJlZCBtZW1vcnkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vIHRyeSB0byBvcGVuIGFuIGFscmVhZHkgZXhpc3Rpbmcgc2hhcmVkIG1lbW9yeQotCS8vIChjcmVhdGVkIGJ5IGFuIGFub3RoZXIgcHJvY2VzcykKLQloU2hhcmVkTWVtID0gT3BlbkZpbGVNYXBwaW5nKEZJTEVfTUFQX0FMTF9BQ0NFU1MsCS8vIERXT1JEIGR3RGVzaXJlZEFjY2VzcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYkluaGVyaXRIYW5kbGUKLQkJCQkgICAgIHBzekJ1ZmZlcklEX3ApOwkvLyBMUENUU1RSIGxwTmFtZQotCWlmIChoU2hhcmVkTWVtICE9IE5VTEwpIHsKLQkJLy8gYSBzaGFyZWQgbWVtb3J5IGFscmVhZHkgZXhpc3RzCi0JCWZTaE1lbU5ld0NyZWF0ZWQgPSBGQUxTRTsKLQl9IGVsc2UgewotCQkvLyBpdCBzZWFtcyB0aGF0IHRoaXMgcHJvY2VzcyBpcyB0aGUgZmlyc3Qgd2hvIHdhbnRzIHRvIHVzZSB0aGUKLQkJLy8gc2hhcmVkIG1lbW9yeSwgc28gaXQgaGFzIHRvIGNyZWF0ZSBhIG5ldyBzaGFyZWQgbWVtb3J5Ci0JCWhTaGFyZWRNZW0gPSBDcmVhdGVGaWxlTWFwcGluZyhJTlZBTElEX0hBTkRMRV9WQUxVRSwJLy8gSEFORExFIGhGaWxlCi0JCQkJCSAgICAgICBOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBBdHRyaWJ1dGVzCi0JCQkJCSAgICAgICBQQUdFX1JFQURXUklURSwJLy8gRFdPUkQgZmxQcm90ZWN0Ci0JCQkJCSAgICAgICAwLAkvLyBEV09SRCBkd01heGltdW1TaXplSGlnaAotCQkJCQkgICAgICAgdWxTaE1lbVNpemUsCS8vIERXT1JEIGR3TWF4aW11bVNpemVMb3cKLQkJCQkJICAgICAgIHBzekJ1ZmZlcklEX3ApOwkvLyBMUENUU1RSIGxwTmFtZQotCi0JCWZTaE1lbU5ld0NyZWF0ZWQgPSBUUlVFOwotCX0KLQotCWlmIChoU2hhcmVkTWVtID09IE5VTEwpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT3V0T2ZNZW07Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vICgyKSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBtZW1vcnkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXBTaGFyZWRNZW0gPSBNYXBWaWV3T2ZGaWxlKGhTaGFyZWRNZW0sCS8vIEhBTkRMRSBoRmlsZU1hcHBpbmdPYmplY3QKLQkJCQkgICBGSUxFX01BUF9BTExfQUNDRVNTLAkvLyBEV09SRCBkd0Rlc2lyZWRBY2Nlc3MsCi0JCQkJICAgMCwJLy8gRFdPUkQgZHdGaWxlT2Zmc2V0SGlnaCwKLQkJCQkgICAwLAkvLyBEV09SRCBkd0ZpbGVPZmZzZXRMb3csCi0JCQkJICAgdWxTaE1lbVNpemUpOwkvLyBTSVpFX1QgZHdOdW1iZXJPZkJ5dGVzVG9NYXAKLQotCWlmIChwU2hhcmVkTWVtID09IE5VTEwpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT3V0T2ZNZW07Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vICgzKSBzZXR1cCBvciB1cGRhdGUgaGVhZGVyIGFuZCBtYW5hZ2VtZW50IGluZm9ybWF0aW9uCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlwU2hiTWVtSGVhZGVyID0gKHRTaGJNZW1IZWFkZXIgKikgcFNoYXJlZE1lbTsKLQotCS8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gcHJvY2VzcyBzcGVjaWZpYyBtZW1wb29sIHRvIHNhdmUKLQkvLyBwcm9jZXNzIGxvY2FsIGluZm9ybWF0aW9uIHRvIGFkbWluaXN0cmF0ZS9tYW5hZ2UgdGhlIHNoYXJlZCBidWZmZXIKLQlwU2hiTWVtSW5zdCA9Ci0JICAgICh0U2hiTWVtSW5zdCAqKSBTaGJJcGNBbGxvY1ByaXZhdGVNZW0oc2l6ZW9mKHRTaGJNZW1JbnN0KSk7Ci0JaWYgKHBTaGJNZW1JbnN0ID09IE5VTEwpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT3V0T2ZNZW07Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gcmVzZXQgY29tcGxldGUgaGVhZGVyIHRvIGRlZmF1bHQgdmFsdWVzCi0JcFNoYk1lbUluc3QtPm1fU2JpTWFnaWNJRCA9IFNCSV9NQUdJQ19JRDsKLQlwU2hiTWVtSW5zdC0+bV9oU2hhcmVkTWVtID0gaFNoYXJlZE1lbTsKLQlwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdID0KLQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV0gPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSA9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSA9IE5VTEw7Ci0JcFNoYk1lbUluc3QtPm1faFRocmVhZEpvYlJlYWR5ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1faEV2ZW50Sm9iUmVhZHkgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV91bFRpbWVPdXRKb2JSZWFkeSA9IDA7Ci0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeSA9IE5VTEw7Ci0JcFNoYk1lbUluc3QtPm1fcFNoYk1lbUhlYWRlciA9IHBTaGJNZW1IZWFkZXI7Ci0KLSNpZm5kZWYgTkRFQlVHCi0JewotCQlwU2hiTWVtSW5zdC0+bV91bFRocmVhZElETmV3RGF0YSA9IDA7Ci0JCXBTaGJNZW1JbnN0LT5tX3VsVGhyZWFkSURKb2JSZWFkeSA9IDA7Ci0JfQotI2VuZGlmCi0KLQkvLyBjcmVhdGUgbXV0ZXggZm9yIGJ1ZmZlciBhY2Nlc3MKLQlwc3pPYmplY3ROYW1lID0KLQkgICAgU2hiSXBjR2V0VW5pZm9ybU9iamVjdE5hbWUoTkFNRV9NVVRFWF9CVUZGX0FDQ0VTUywgcHN6QnVmZmVySURfcCwKLQkJCQkgICAgICAgVFJVRSk7Ci0JaE11dGV4QnVmZkFjY2VzcyA9IENyZWF0ZU11dGV4KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscE11dGV4QXR0cmlidXRlcwotCQkJCSAgICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbE93bmVyCi0JCQkJICAgICAgIHBzek9iamVjdE5hbWUpOwkvLyBMUENUU1RSIGxwTmFtZQotCXBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3MgPSBoTXV0ZXhCdWZmQWNjZXNzOwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzICE9IE5VTEwpOwotCi0JLy8gVGhlIEV2ZW50TmV3RGF0YSBpcyB1c2VkIGZvciBzaWduYWxpbmcgb2YgbmV3IGRhdGEgYWZ0ZXIgYSB3cml0ZQotCS8vIG9wZXJhdGlvbiAoU2V0RXZlbnQpIGFzIHdlbGwgYXMgZm9yIHdhaXRpbmcgZm9yIG5ldyBkYXRhIG9uIHRoZQotCS8vIHJlYWRlciBzaWRlIChXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKS4gQmVjYXVzZSBpdCdzIG5vdCBrbm93biBpZgotCS8vIHRoaXMgcHJvY2VzcyB3aWxsIGJlIHJlYWQgb3Igd3JpdGUgZGF0YSwgdGhlIGV2ZW50IHdpbGwgYmUKLQkvLyBhbHdheXMgY3JlYXRlZCBoZXJlLgotCXBzek9iamVjdE5hbWUgPQotCSAgICBTaGJJcGNHZXRVbmlmb3JtT2JqZWN0TmFtZShOQU1FX0VWRU5UX05FV19EQVRBLCBwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBUUlVFKTsKLQloRXZlbnROZXdEYXRhID0gQ3JlYXRlRXZlbnQoTlVMTCwJLy8gTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwRXZlbnRBdHRyaWJ1dGVzCi0JCQkJICAgIEZBTFNFLAkvLyBCT09MIGJNYW51YWxSZXNldAotCQkJCSAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgIHBzek9iamVjdE5hbWUpOwkvLyBMUENUU1RSIGxwTmFtZQotCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gPSBoRXZlbnROZXdEYXRhOwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdICE9IE5VTEwpOwotCi0JLy8gVGhlIEV2ZW50Sm9iUmVhZHkgaXMgdXNlZCBmb3Igc2lnbmFsaW5nIHRoYXQgYSBqb2IgaXMgZG9uZSAoU2V0RXZlbnQpCi0JLy8gYXMgd2VsbCBhcyBmb3Igd2FpdGluZyBmb3IgZmluaXNoaW5nIG9mIGEgam9iIChXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKS4KLQkvLyBCZWNhdXNlIGl0J3Mgbm90IGtub3duIGlmIHRoaXMgcHJvY2VzcyB3aWxsIHNpZ25hbCBvciB3YWl0LCB0aGUgZXZlbnQKLQkvLyB3aWxsIGJlIGFsd2F5cyBjcmVhdGVkIGhlcmUuCi0JcHN6T2JqZWN0TmFtZSA9Ci0JICAgIFNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKE5BTUVfRVZFTlRfSk9CX1JFQURZLCBwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBUUlVFKTsKLQloRXZlbnRKb2JSZWFkeSA9IENyZWF0ZUV2ZW50KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscEV2ZW50QXR0cmlidXRlcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYk1hbnVhbFJlc2V0Ci0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgICBwc3pPYmplY3ROYW1lKTsJLy8gTFBDVFNUUiBscE5hbWUKLQlwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSA9IGhFdmVudEpvYlJlYWR5OwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSAhPSBOVUxMKTsKLQotCWlmIChmU2hNZW1OZXdDcmVhdGVkKSB7Ci0JCS8vIHRoaXMgcHJvY2VzcyB3YXMgdGhlIGZpcnN0IHdobyB3YW50ZWQgdG8gdXNlIHRoZSBzaGFyZWQgbWVtb3J5LAotCQkvLyBzbyBhIG5ldyBzaGFyZWQgbWVtb3J5IHdhcyBjcmVhdGVkCi0JCS8vIC0+IHNldHVwIG5ldyBoZWFkZXIgaW5mb3JtYXRpb24gaW5zaWRlIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbgotCQkvLyAgICBpdHNlbGYKLQkJcFNoYk1lbUhlYWRlci0+bV9TYmhNYWdpY0lEID0gU0JIX01BR0lDX0lEOwotCQlwU2hiTWVtSGVhZGVyLT5tX3VsU2hNZW1TaXplID0gdWxTaE1lbVNpemU7Ci0JCXBTaGJNZW1IZWFkZXItPm1fdWxSZWZDb3VudCA9IDE7Ci0JCXN0cm5jcHkocFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklELCBwc3pCdWZmZXJJRF9wLAotCQkJc2l6ZW9mKHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCkgLSAxKTsKLQotI2lmbmRlZiBOREVCVUcKLQkJewotCQkJcFNoYk1lbUhlYWRlci0+bV91bE93bmVyUHJvY0lEID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwotCQl9Ci0jZW5kaWYKLQl9IGVsc2UgewotCQkvLyBhbnkgb3RoZXIgcHJvY2VzcyBoYXMgY3JlYXRlZCB0aGUgc2hhcmVkIG1lbW9yeSBhbmQgdGhpcwotCQkvLyBwcm9jZXNzIGhhcyBvbmx5IGF0dGFjaGVkIHRvIGl0Ci0JCS8vIC0+IGNoZWNrIGFuZCB1cGRhdGUgZXhpc3RpbmcgaGVhZGVyIGluZm9ybWF0aW9uIGluc2lkZSB0aGUKLQkJLy8gICAgc2hhcmVkIG1lbW9yeSByZWdpb24gaXRzZWxmCi0JCWlmIChwU2hiTWVtSGVhZGVyLT5tX3VsU2hNZW1TaXplICE9IHVsU2hNZW1TaXplKSB7Ci0JCQlTaGJFcnJvciA9IGtTaGJPcGVuTWlzbWF0Y2g7Ci0JCQlnb3RvIEV4aXQ7Ci0JCX0KLSNpZm5kZWYgTkRFQlVHCi0JCXsKLQkJCWlmIChzdHJuY21wCi0JCQkgICAgKHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCwgcHN6QnVmZmVySURfcCwKLQkJCSAgICAgc2l6ZW9mKHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCkgLSAxKSkgewotCQkJCVNoYkVycm9yID0ga1NoYk9wZW5NaXNtYXRjaDsKLQkJCQlnb3RvIEV4aXQ7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCi0JCXBTaGJNZW1IZWFkZXItPm1fdWxSZWZDb3VudCsrOwotCX0KLQotCS8vIHNldCBhYnN0YXJjdCAiaGFuZGxlIiBmb3IgcmV0dXJuaW5nIHRvIGFwcGxpY2F0aW9uCi0JcFNoYkluc3RhbmNlID0gKHRTaGJJbnN0YW5jZSAqKSBwU2hiTWVtSW5zdDsKLQotICAgICAgRXhpdDoKLQotCWlmIChTaGJFcnJvciAhPSBrU2hiT2spIHsKLQkJaWYgKHBTaGJNZW1JbnN0ICE9IE5VTEwpIHsKLQkJCVNoYklwY1JlbGVhc2VQcml2YXRlTWVtKHBTaGJNZW1JbnN0KTsKLQkJfQotCQlpZiAocFNoYXJlZE1lbSAhPSBOVUxMKSB7Ci0JCQlVbm1hcFZpZXdPZkZpbGUocFNoYXJlZE1lbSk7Ci0JCX0KLQkJaWYgKGhTaGFyZWRNZW0gIT0gTlVMTCkgewotCQkJQ2xvc2VIYW5kbGUoaFNoYXJlZE1lbSk7Ci0JCX0KLQl9Ci0KLQkqcGZTaGJOZXdDcmVhdGVkX3AgPSBmU2hNZW1OZXdDcmVhdGVkOwotCSpwcFNoYkluc3RhbmNlX3AgPSBwU2hiSW5zdGFuY2U7Ci0KLQlyZXR1cm4gKFNoYkVycm9yKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFJlbGVhc2UgU2hhcmVkIEJ1ZmZlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdFNoYkVycm9yIFNoYklwY1JlbGVhc2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7Ci0JSEFORExFIGhFdmVudE5ld0RhdGE7Ci0JSEFORExFIGhNdXRleEJ1ZmZBY2Nlc3M7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCXRTaGJFcnJvciBTaGJFcnJvcjI7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJPayk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlwU2hiTWVtSGVhZGVyID0gU2hiSXBjR2V0U2hiTWVtSGVhZGVyKHBTaGJJbnN0YW5jZV9wKTsKLQotCWlmICghLS1wU2hiTWVtSGVhZGVyLT5tX3VsUmVmQ291bnQpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT2s7Ci0JfSBlbHNlIHsKLQkJU2hiRXJyb3IgPSBrU2hiTWVtVXNlZEJ5T3RoZXJQcm9jczsKLQl9Ci0KLQlTaGJFcnJvcjIgPSBTaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YShwU2hiSW5zdGFuY2VfcCk7Ci0JaEV2ZW50TmV3RGF0YSA9IHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV07Ci0JaWYgKGhFdmVudE5ld0RhdGEgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUoaEV2ZW50TmV3RGF0YSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gPQotCQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JfQotCi0JaE11dGV4QnVmZkFjY2VzcyA9IHBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3M7Ci0JaWYgKGhNdXRleEJ1ZmZBY2Nlc3MgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUoaE11dGV4QnVmZkFjY2Vzcyk7Ci0JCXBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3MgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQl9Ci0KLQlVbm1hcFZpZXdPZkZpbGUocFNoYk1lbUhlYWRlcik7Ci0JaWYgKHBTaGJNZW1JbnN0LT5tX2hTaGFyZWRNZW0gIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUocFNoYk1lbUluc3QtPm1faFNoYXJlZE1lbSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2hTaGFyZWRNZW0gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQl9Ci0KLQlTaGJJcGNSZWxlYXNlUHJpdmF0ZU1lbShwU2hiTWVtSW5zdCk7Ci0KLQlpZiAoU2hiRXJyb3IgPT0ga1NoYk9rKSB7Ci0JCVNoYkVycm9yID0gU2hiRXJyb3IyOwotCX0KLQotCXJldHVybiAoU2hiRXJyb3IpOwotCi19Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLSNpZiAoIWRlZmluZWQoU0hCSVBDX0lOTElORUQpKSB8fCBkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBFbnRlciBhdG9taWMgc2VjdGlvbiBmb3IgU2hhcmVkIEJ1ZmZlciBhY2Nlc3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQlIQU5ETEUgaE11dGV4QnVmZkFjY2VzczsKLQlEV09SRCBkd1dhaXRSZXN1bHQ7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCWhNdXRleEJ1ZmZBY2Nlc3MgPSBwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzOwotCWlmIChoTXV0ZXhCdWZmQWNjZXNzICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCWR3V2FpdFJlc3VsdCA9Ci0JCSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhNdXRleEJ1ZmZBY2Nlc3MsIFRJTUVPVVRfRU5URVJfQVRPTUlDKTsKLQkJc3dpdGNoIChkd1dhaXRSZXN1bHQpIHsKLQkJY2FzZSBXQUlUX09CSkVDVF8wICsgMDoKLQkJCXsKLQkJCQlicmVhazsKLQkJCX0KLQotCQljYXNlIFdBSVRfVElNRU9VVDoKLQkJCXsKLQkJCQlUUkFDRTAKLQkJCQkgICAgKCJcblNoYklwY0VudGVyQXRvbWljU2VjdGlvbigpOiBXQUlUX1RJTUVPVVQiKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQljYXNlIFdBSVRfQUJBTkRPTkVEOgotCQkJewotCQkJCVRSQUNFMAotCQkJCSAgICAoIlxuU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKCk6IFdBSVRfQUJBTkRPTkVEIik7Ci0JCQkJQVNTRVJUKDApOwotCQkJCVNoYkVycm9yID0ga1NoYkJ1ZmZlckludmFsaWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJY2FzZSBXQUlUX0ZBSUxFRDoKLQkJCXsKLQkJCQlUUkFDRTEKLQkJCQkgICAgKCJcblNoYklwY0VudGVyQXRvbWljU2VjdGlvbigpOiBXQUlUX0ZBSUxFRCAtPiBMYXN0RXJyb3I9JWxkIiwKLQkJCQkgICAgIEdldExhc3RFcnJvcigpKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQlkZWZhdWx0OgotCQkJewotCQkJCVRSQUNFMQotCQkJCSAgICAoIlxuU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKCk6IHVua25vd24gZXJyb3IgLT4gTGFzdEVycm9yPSVsZCIsCi0JCQkJICAgICBHZXRMYXN0RXJyb3IoKSk7Ci0JCQkJQVNTRVJUKDApOwotCQkJCVNoYkVycm9yID0ga1NoYkJ1ZmZlckludmFsaWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlTaGJFcnJvciA9IGtTaGJCdWZmZXJJbnZhbGlkOwotCX0KLQotCXJldHVybiAoU2hiRXJyb3IpOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTGVhdmUgYXRvbWljIHNlY3Rpb24gZm9yIFNoYXJlZCBCdWZmZXIgYWNjZXNzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY0xlYXZlQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhNdXRleEJ1ZmZBY2Nlc3M7Ci0JQk9PTCBmUmVzOwotCXRTaGJFcnJvciBTaGJFcnJvcjsKLQotCWlmIChwU2hiSW5zdGFuY2VfcCA9PSBOVUxMKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JU2hiRXJyb3IgPSBrU2hiT2s7Ci0KLQloTXV0ZXhCdWZmQWNjZXNzID0gcFNoYk1lbUluc3QtPm1faE11dGV4QnVmZkFjY2VzczsKLQlpZiAoaE11dGV4QnVmZkFjY2VzcyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlmUmVzID0gUmVsZWFzZU11dGV4KGhNdXRleEJ1ZmZBY2Nlc3MpOwotCQlBU1NFUlQoZlJlcyk7Ci0JfSBlbHNlIHsKLQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQl9Ci0KLQlyZXR1cm4gKFNoYkVycm9yKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFN0YXJ0IHNpZ25hbGluZyBvZiBuZXcgZGF0YSAoY2FsbGVkIGZyb20gcmVhZGluZyBwcm9jZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTdGFydFNpZ25hbGluZ05ld0RhdGEodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgICBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJCSAgICAgIHRTaWdIbmRsck5ld0RhdGEKLQkJCQkJCSAgICAgIHBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3AsCi0JCQkJCQkgICAgICB0U2hiUHJpb3JpdHkKLQkJCQkJCSAgICAgIFNoYlByaW9yaXR5X3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKLQljb25zdCBjaGFyICpwc3pPYmplY3ROYW1lOwotCUhBTkRMRSBoRXZlbnRUZXJtUmVxdTsKLQlIQU5ETEUgaEV2ZW50VGVybVJlc3A7Ci0JSEFORExFIGhUaHJlYWROZXdEYXRhOwotCXVuc2lnbmVkIGxvbmcgdWxUaHJlYWRJRE5ld0RhdGE7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCWludCBpUHJpb3JpdHk7Ci0KLQlpZiAoKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHx8IChwZm5TaWduYWxIYW5kbGVyTmV3RGF0YV9wID09IE5VTEwpKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JcFNoYk1lbUhlYWRlciA9IFNoYklwY0dldFNoYk1lbUhlYWRlcihwU2hiSW5zdGFuY2VfcCk7Ci0JU2hiRXJyb3IgPSBrU2hiT2s7Ci0KLQlpZiAoKHBTaGJNZW1JbnN0LT5tX2hUaHJlYWROZXdEYXRhICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB8fAotCSAgICAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV0gIT0KLQkgICAgIElOVkFMSURfSEFORExFX1ZBTFVFKQotCSAgICB8fCAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gIT0KLQkJSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JICAgIHx8IChwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsck5ld0RhdGEgIT0gTlVMTCkpIHsKLQkJU2hiRXJyb3IgPSBrU2hiQWxyZWFkeVNpZ25hbGluZzsKLQkJZ290byBFeGl0OwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSA9IHBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3A7Ci0KLQkvLyBCZWNhdXNlIHRoZSBldmVudCA8cFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXT4KLQkvLyBpcyB1c2VkIGZvciBzaWduYWxpbmcgb2YgbmV3IGRhdGEgYWZ0ZXIgYSB3cml0ZSBvcGVyYXRpb24gdG9vICh1c2luZwotCS8vIFNldEV2ZW50KSwgaXQgaXMgYWx3YXlzIGNyZWF0ZWQgaGVyZSAoc2VlIDxTaGJJcGNBbGxvY0J1ZmZlcj4pLgotCi0JcHN6T2JqZWN0TmFtZSA9Ci0JICAgIFNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKE5BTUVfRVZFTlRfVEVSTV9SRVFVLAotCQkJCSAgICAgICBwU2hiTWVtSGVhZGVyLT5tX3N6QnVmZmVySUQsIEZBTFNFKTsKLQloRXZlbnRUZXJtUmVxdSA9IENyZWF0ZUV2ZW50KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscEV2ZW50QXR0cmlidXRlcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYk1hbnVhbFJlc2V0Ci0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgICBwc3pPYmplY3ROYW1lKTsJLy8gTFBDVFNUUiBscE5hbWUKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSA9IGhFdmVudFRlcm1SZXF1OwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSAhPSBOVUxMKTsKLQotCXBzek9iamVjdE5hbWUgPQotCSAgICBTaGJJcGNHZXRVbmlmb3JtT2JqZWN0TmFtZShOQU1FX0VWRU5UX1RFUk1fUkVTUCwKLQkJCQkgICAgICAgcFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklELCBGQUxTRSk7Ci0JaEV2ZW50VGVybVJlc3AgPSBDcmVhdGVFdmVudChOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBFdmVudEF0dHJpYnV0ZXMKLQkJCQkgICAgIEZBTFNFLAkvLyBCT09MIGJNYW51YWxSZXNldAotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYkluaXRpYWxTdGF0ZQotCQkJCSAgICAgcHN6T2JqZWN0TmFtZSk7CS8vIExQQ1RTVFIgbHBOYW1lCi0JcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gPSBoRXZlbnRUZXJtUmVzcDsKLQlBU1NFUlQocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gIT0gTlVMTCk7Ci0KLQloVGhyZWFkTmV3RGF0YSA9IENyZWF0ZVRocmVhZChOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBUaHJlYWRBdHRyaWJ1dGVzCi0JCQkJICAgICAgMCwJLy8gU0laRV9UIGR3U3RhY2tTaXplCi0JCQkJICAgICAgU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSwJLy8gTFBUSFJFQURfU1RBUlRfUk9VVElORSBscFN0YXJ0QWRkcmVzcwotCQkJCSAgICAgIHBTaGJJbnN0YW5jZV9wLAkvLyBMUFZPSUQgbHBQYXJhbWV0ZXIKLQkJCQkgICAgICAwLAkvLyBEV09SRCBkd0NyZWF0aW9uRmxhZ3MKLQkJCQkgICAgICAmdWxUaHJlYWRJRE5ld0RhdGEpOwkvLyBMUERXT1JEIGxwVGhyZWFkSWQKLQotCXN3aXRjaCAoU2hiUHJpb3JpdHlfcCkgewotCWNhc2Uga1NoYlByaW9yaXR5TG93OgotCQlpUHJpb3JpdHkgPSBUSFJFQURfUFJJT1JJVFlfQkVMT1dfTk9STUFMOwotCQlicmVhazsKLQotCWNhc2Uga1NoYlByaW9yaXR5Tm9ybWFsOgotCQlpUHJpb3JpdHkgPSBUSFJFQURfUFJJT1JJVFlfTk9STUFMOwotCQlicmVhazsKLQotCWNhc2Uga3NoYlByaW9yaXR5SGlnaDoKLQkJaVByaW9yaXR5ID0gVEhSRUFEX1BSSU9SSVRZX0FCT1ZFX05PUk1BTDsKLQkJYnJlYWs7Ci0KLQl9Ci0KLQlBU1NFUlQocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgIT0gTlVMTCk7Ci0KLQlTZXRUaHJlYWRQcmlvcml0eShoVGhyZWFkTmV3RGF0YSwgaVByaW9yaXR5KTsKLQotCXBTaGJNZW1JbnN0LT5tX2hUaHJlYWROZXdEYXRhID0gaFRocmVhZE5ld0RhdGE7Ci0KLSNpZm5kZWYgTkRFQlVHCi0JewotCQlwU2hiTWVtSW5zdC0+bV91bFRocmVhZElETmV3RGF0YSA9IHVsVGhyZWFkSUROZXdEYXRhOwotCX0KLSNlbmRpZgotCi0gICAgICBFeGl0OgotCi0JcmV0dXJuIChTaGJFcnJvcik7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTdG9wIHNpZ25hbGluZyBvZiBuZXcgZGF0YSAoY2FsbGVkIGZyb20gcmVhZGluZyBwcm9jZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhFdmVudFRlcm1SZXF1OwotCUhBTkRMRSBoRXZlbnRUZXJtUmVzcDsKLQlEV09SRCBkd1dhaXRSZXN1bHQ7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJJbnZhbGlkQXJnKTsKLQl9Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCi0JLy8gdGVybWluYXRlIG5ldyBkYXRhIHNpZ25hbGluZyB0aHJlYWQKLQkvLyAoc2V0IGV2ZW50IDxoRXZlbnRUZXJtUmVxdT4gdG8gd2FrZXVwIHRoZSB0aHJlYWQgYW5kIGRpc3Bvc2UgaXQKLQkvLyB0byBleGl0LCB0aGVuIHdhaXQgZm9yIGNvbmZpcm1hdGlvbiB1c2luZyBldmVudCA8aEV2ZW50VGVybVJlc3A+KQotCWhFdmVudFRlcm1SZXF1ID0gcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV07Ci0JaEV2ZW50VGVybVJlc3AgPSBwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXTsKLQlpZiAoKGhFdmVudFRlcm1SZXF1ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSAmJgotCSAgICAoaEV2ZW50VGVybVJlc3AgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpKSB7Ci0JCVRSQUNFMCgiXG5TaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSgpOiBlbnRlciB3YWl0IHN0YXRlIik7Ci0JCWR3V2FpdFJlc3VsdCA9IFNpZ25hbE9iamVjdEFuZFdhaXQoaEV2ZW50VGVybVJlcXUsCS8vIEhBTkRMRSBoT2JqZWN0VG9TaWduYWwKLQkJCQkJCSAgIGhFdmVudFRlcm1SZXNwLAkvLyBIQU5ETEUgaE9iamVjdFRvV2FpdE9uCi0JCQkJCQkgICBUSU1FT1VUX1RFUk1fVEhSRUFELAkvLyBEV09SRCBkd01pbGxpc2Vjb25kcwotCQkJCQkJICAgRkFMU0UpOwkvLyBCT09MIGJBbGVydGFibGUKLQkJVFJBQ0UwCi0JCSAgICAoIlxuU2hiSXBjU3RvcFNpZ25hbGluZ05ld0RhdGEoKTogd2FpdCBzdGF0ZSBsZWF2ZWQ6IC0tLT4gIik7Ci0JCXN3aXRjaCAoZHdXYWl0UmVzdWx0KSB7Ci0JCWNhc2UgV0FJVF9PQkpFQ1RfMCArIDA6CS8vIGV2ZW50ICJuZXcgZGF0YSBzaWduYWxpbmcgdGhyZWFkIHRlcm1pbmF0ZWQiCi0JCQl7Ci0JCQkJVFJBQ0UwKCJFdmVudCA9IFdBSVRfT0JKRUNUXzArMCIpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJVFJBQ0UwKCJVbmhhbmRsZWQgRXZlbnQiKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEpOwotCQlwU2hiTWVtSW5zdC0+bV9oVGhyZWFkTmV3RGF0YSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSAhPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFUVVdID0KLQkJICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSAhPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdID0KLQkJICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSA9IE5VTEw7Ci0KLQlyZXR1cm4gKGtTaGJPayk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTaWduYWwgbmV3IGRhdGEgKGNhbGxlZCBmcm9tIHdyaXRpbmcgcHJvY2VzcykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhFdmVudE5ld0RhdGE7Ci0JQk9PTCBmUmVzOwotCi0JLy8gVFJBQ0UwKCJcblNoYklwY1NpZ25hbE5ld0RhdGEoKTogZW50ZXJcbiIpOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdICE9Ci0JICAgICAgIElOVkFMSURfSEFORExFX1ZBTFVFKTsKLQloRXZlbnROZXdEYXRhID0gcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXTsKLQlpZiAoaEV2ZW50TmV3RGF0YSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlmUmVzID0gU2V0RXZlbnQoaEV2ZW50TmV3RGF0YSk7Ci0JCS8vIFRSQUNFMSgiXG5TaGJJcGNTaWduYWxOZXdEYXRhKCk6IEV2ZW50TmV3RGF0YSBzZXQgKFJlc3VsdD0lZClcbiIsIChpbnQpZlJlcyk7Ci0JCUFTU0VSVChmUmVzKTsKLQl9Ci0JLy8gVFJBQ0UwKCJcblNoYklwY1NpZ25hbE5ld0RhdGEoKTogbGVhdmVcbiIpOwotCXJldHVybiAoa1NoYk9rKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFN0YXJ0IHNpZ25hbGluZyBmb3Igam9iIHJlYWR5IChjYWxsZWQgZnJvbSB3YWl0aW5nIHByb2Nlc3MpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nSm9iUmVhZHkodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgICAgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZwotCQkJCQkJICAgICAgIHVsVGltZU91dF9wLAotCQkJCQkJICAgICAgIHRTaWdIbmRsckpvYlJlYWR5Ci0JCQkJCQkgICAgICAgcGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKLQlIQU5ETEUgaFRocmVhZEpvYlJlYWR5OwotCXVuc2lnbmVkIGxvbmcgdWxUaHJlYWRJREpvYlJlYWR5OwotCXRTaGJFcnJvciBTaGJFcnJvcjsKLQotCWlmICgocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgfHwgKHBmblNpZ25hbEhhbmRsZXJKb2JSZWFkeV9wID09IE5VTEwpKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JcFNoYk1lbUhlYWRlciA9IFNoYklwY0dldFNoYk1lbUhlYWRlcihwU2hiSW5zdGFuY2VfcCk7Ci0JU2hiRXJyb3IgPSBrU2hiT2s7Ci0KLQlpZiAoKHBTaGJNZW1JbnN0LT5tX2hUaHJlYWRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgfHwKLQkgICAgKHBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxySm9iUmVhZHkgIT0gTlVMTCkpIHsKLQkJU2hiRXJyb3IgPSBrU2hiQWxyZWFkeVNpZ25hbGluZzsKLQkJZ290byBFeGl0OwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX3VsVGltZU91dEpvYlJlYWR5ID0gdWxUaW1lT3V0X3A7Ci0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeSA9IHBmblNpZ25hbEhhbmRsZXJKb2JSZWFkeV9wOwotCi0JLy8gQmVjYXVzZSB0aGUgZXZlbnQgPHBTaGJNZW1JbnN0LT5tX2FoRXZlbnRKb2JSZWFkeT4gaXMgdXNlZCBmb3IKLQkvLyBzaWduYWxpbmcgb2YgYSBmaW5pc2hlZCBqb2IgdG9vICh1c2luZyBTZXRFdmVudCksIGl0IGlzIGFsd2F5cwotCS8vIGNyZWF0ZWQgaGVyZSAoc2VlIDxTaGJJcGNBbGxvY0J1ZmZlcj4pLgotCi0JaFRocmVhZEpvYlJlYWR5ID0gQ3JlYXRlVGhyZWFkKE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscFRocmVhZEF0dHJpYnV0ZXMKLQkJCQkgICAgICAgMCwJLy8gU0laRV9UIGR3U3RhY2tTaXplCi0JCQkJICAgICAgIFNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5LAkvLyBMUFRIUkVBRF9TVEFSVF9ST1VUSU5FIGxwU3RhcnRBZGRyZXNzCi0JCQkJICAgICAgIHBTaGJJbnN0YW5jZV9wLAkvLyBMUFZPSUQgbHBQYXJhbWV0ZXIKLQkJCQkgICAgICAgMCwJLy8gRFdPUkQgZHdDcmVhdGlvbkZsYWdzCi0JCQkJICAgICAgICZ1bFRocmVhZElESm9iUmVhZHkpOwkvLyBMUERXT1JEIGxwVGhyZWFkSWQKLQotCXBTaGJNZW1JbnN0LT5tX2hUaHJlYWRKb2JSZWFkeSA9IGhUaHJlYWRKb2JSZWFkeTsKLQlBU1NFUlQocFNoYk1lbUluc3QtPm1faFRocmVhZEpvYlJlYWR5ICE9IE5VTEwpOwotCi0jaWZuZGVmIE5ERUJVRwotCXsKLQkJcFNoYk1lbUluc3QtPm1fdWxUaHJlYWRJREpvYlJlYWR5ID0gdWxUaHJlYWRJREpvYlJlYWR5OwotCX0KLSNlbmRpZgotCi0gICAgICBFeGl0OgotCi0JcmV0dXJuIChTaGJFcnJvcik7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTaWduYWwgam9iIHJlYWR5IChjYWxsZWQgZnJvbSBleGVjdXRpbmcgcHJvY2VzcykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsSm9iUmVhZHkodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCUhBTkRMRSBoRXZlbnRKb2JSZWFkeTsKLQlCT09MIGZSZXM7Ci0KLQkvLyBUUkFDRTAoIlxuU2hiSXBjU2lnbmFsSm9iUmVhZHkoKTogZW50ZXJcbiIpOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSk7Ci0JaEV2ZW50Sm9iUmVhZHkgPSBwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeTsKLQlpZiAoaEV2ZW50Sm9iUmVhZHkgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJZlJlcyA9IFNldEV2ZW50KGhFdmVudEpvYlJlYWR5KTsKLQkJLy8gVFJBQ0UxKCJcblNoYklwY1NpZ25hbEpvYlJlYWR5KCk6IEV2ZW50Sm9iUmVhZHkgc2V0IChSZXN1bHQ9JWQpXG4iLCAoaW50KWZSZXMpOwotCQlBU1NFUlQoZlJlcyk7Ci0JfQotCS8vIFRSQUNFMCgiXG5TaGJJcGNTaWduYWxKb2JSZWFkeSgpOiBsZWF2ZVxuIik7Ci0JcmV0dXJuIChrU2hiT2spOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgR2V0IHBvaW50ZXIgdG8gY29tbW9uIHVzZWQgc2hhcmUgbWVtb3J5IGFyZWEKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwotCXZvaWQgKnBTaGJTaE1lbVB0cjsKLQotCXBTaGJNZW1IZWFkZXIgPSBTaGJJcGNHZXRTaGJNZW1IZWFkZXIocFNoYkluc3RhbmNlX3ApOwotCWlmIChwU2hiTWVtSGVhZGVyICE9IE5VTEwpIHsKLQkJcFNoYlNoTWVtUHRyID0gKEJZVEUgKikgcFNoYk1lbUhlYWRlciArIHNpemVvZih0U2hiTWVtSGVhZGVyKTsKLQl9IGVsc2UgewotCQlwU2hiU2hNZW1QdHIgPSBOVUxMOwotCX0KLQotCXJldHVybiAocFNoYlNoTWVtUHRyKTsKLQotfQotCi0jZW5kaWYKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBwcm9jZXNzIHNwZWNpZmljIG1lbXBvb2wKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkICpTaGJJcGNBbGxvY1ByaXZhdGVNZW0odW5zaWduZWQgbG9uZyB1bE1lbVNpemVfcCkKLXsKLQotCUhHTE9CQUwgaE1lbTsKLQl2b2lkICpwTWVtOwotCi0JaE1lbSA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIHVsTWVtU2l6ZV9wICsgc2l6ZW9mKEhHTE9CQUwpKTsKLQlwTWVtID0gR2xvYmFsTG9jayhoTWVtKTsKLQlpZiAocE1lbSAhPSBOVUxMKSB7Ci0JCSooSEdMT0JBTCAqKSBwTWVtID0gaE1lbTsKLQkJKEJZVEUgKikgcE1lbSArPSBzaXplb2YoSEdMT0JBTCk7Ci0JfQotCi0jaWZuZGVmIE5ERUJVRwotCXsKLQkJbWVtc2V0KHBNZW0sIDB4YWEsIHVsTWVtU2l6ZV9wKTsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiAocE1lbSk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBSZWxlYXNlIGEgbWVtb3J5IGJsb2NrIGZyb20gcHJvY2VzcyBzcGVjaWZpYyBtZW1wb29sCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgdm9pZCBTaGJJcGNSZWxlYXNlUHJpdmF0ZU1lbSh2b2lkICpwTWVtX3ApCi17Ci0KLQlIR0xPQkFMIGhNZW07Ci0KLQlpZiAocE1lbV9wID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQotCShCWVRFICopIHBNZW1fcCAtPSBzaXplb2YoSEdMT0JBTCk7Ci0JaE1lbSA9ICooSEdMT0JBTCAqKSBwTWVtX3A7Ci0KLQlHbG9iYWxVbmxvY2soaE1lbSk7Ci0JR2xvYmFsRnJlZShoTWVtKTsKLQotCXJldHVybjsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIENyZWF0ZSB1bmlmb3JtIG9iamVjdCBuYW1lIChuZWVkZWQgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbikKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbnN0IGNoYXIgKlNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKGNvbnN0IGNoYXIgKnBzek9iamVjdEpvYk5hbWVfcCwKLQkJCQkgICAgICAgY29uc3QgY2hhciAqcHN6QnVmZmVySURfcCwKLQkJCQkgICAgICAgQk9PTCBmR2xvYmFsT2JqZWN0X3ApCi17Ci0KLQlzdGF0aWMgY2hhciBzek9iamVjdE5hbWVbTUFYX1BBVEhdOwotCWNoYXIgc3pPYmplY3RQcmVmaXhbTUFYX1BBVEhdOwotCi0JaWYgKGZHbG9iYWxPYmplY3RfcCkgewotCQlzdHJuY3B5KHN6T2JqZWN0UHJlZml4LCAiR2xvYmFsXFwiLCBzaXplb2Yoc3pPYmplY3RQcmVmaXgpKTsKLQl9IGVsc2UgewotCQlfc25wcmludGYoc3pPYmplY3RQcmVmaXgsIHNpemVvZihzek9iamVjdFByZWZpeCksICJQSUQlMDhsWF8iLAotCQkJICAodW5zaWduZWQgbG9uZylHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOwotCX0KLQotCV9zbnByaW50Zihzek9iamVjdE5hbWUsIHNpemVvZihzek9iamVjdE5hbWUpLCAiJXMlcyMlcyIsCi0JCSAgc3pPYmplY3RQcmVmaXgsIHBzekJ1ZmZlcklEX3AsIHBzek9iamVjdEpvYk5hbWVfcCk7Ci0KLQlyZXR1cm4gKHN6T2JqZWN0TmFtZSk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBUaHJlYWQgZm9yIG5ldyBkYXRhIHNpZ25hbGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRFdPUkQgV0lOQVBJIFNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoTFBWT0lEIHB2VGhyZWFkUGFyYW1fcCkKLXsKLQotCXRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2U7Ci0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCURXT1JEIGR3V2FpdFJlc3VsdDsKLQlCT09MIGZUZXJtUmVxdTsKLQlpbnQgZkNhbGxBZ2FpbjsKLQotCVRSQUNFMQotCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSgpOiBTaWduYWxUaHJlYWQgc3RhcnRlZCAocFNoYkluc3RhbmNlPTB4JTA4bFgpXG4iLAotCSAgICAgKERXT1JEKSBwdlRocmVhZFBhcmFtX3ApOwotCi0JcFNoYkluc3RhbmNlID0gKHRTaGJNZW1JbnN0ICopIHB2VGhyZWFkUGFyYW1fcDsKLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlKTsKLQlmVGVybVJlcXUgPSBGQUxTRTsKLQotCWRvIHsKLQkJQVNTRVJUKChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVswXSAhPQotCQkJSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JCSAgICAgICAmJiAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbMF0gIT0gTlVMTCkpOwotCQlBU1NFUlQoKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhWzFdICE9Ci0JCQlJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkJICAgICAgICYmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVsxXSAhPSBOVUxMKSk7Ci0KLQkJVFJBQ0UwKCJcblNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoKTogZW50ZXIgd2FpdCBzdGF0ZSIpOwotCQlkd1dhaXRSZXN1bHQgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKDIsCS8vIERXT1JEIG5Db3VudAotCQkJCQkJICAgICAgcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGEsCS8vIGNvbnN0IEhBTkRMRSogbHBIYW5kbGVzCi0JCQkJCQkgICAgICBGQUxTRSwJLy8gQk9PTCBiV2FpdEFsbAotCQkJCQkJICAgICAgSU5GSU5JVEUpOwkvLyBEV09SRCBkd01pbGxpc2Vjb25kcwotCQlUUkFDRTAKLQkJICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhKCk6IHdhaXQgc3RhdGUgbGVhdmVkOiAtLS0+ICIpOwotCQlzd2l0Y2ggKGR3V2FpdFJlc3VsdCkgewotCQljYXNlIFdBSVRfT0JKRUNUXzAgKyAwOgkvLyBldmVudCAibmV3IGRhdGEiCi0JCQl7Ci0JCQkJVFJBQ0UwKCJFdmVudCA9IFdBSVRfT0JKRUNUXzArMCIpOwotCQkJCWlmIChwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsck5ld0RhdGEgIT0gTlVMTCkgewotCQkJCQlUUkFDRTAKLQkJCQkJICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhKCk6IGNhbGxpbmcgU2lnbmFsSGFuZGxlck5ld0RhdGEiKTsKLQkJCQkJZG8gewotCQkJCQkJZkNhbGxBZ2FpbiA9Ci0JCQkJCQkgICAgcFNoYk1lbUluc3QtPgotCQkJCQkJICAgIG1fcGZuU2lnSG5kbHJOZXdEYXRhCi0JCQkJCQkgICAgKHBTaGJJbnN0YW5jZSk7Ci0JCQkJCQkvLyBkLmsuOiB0cnkgdG8gcnVuIGFueSBzaGFyZWQgYnVmZmVyIHdoaWNoIGhhcyBoaWdoZXIgcHJpb3JpdHkuCi0JCQkJCQkvLyAgICAgICAgICAgdW5kZXIgV2luZG93cyB0aGlzIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIFdpbmRvd3Mgc2NoZWR1bGVyCi0JCQkJCQkvLyAgICAgICAgICAgYWxyZWFkeSBwcmVlbXB0cyB0YXNrcyB3aXRoIGxvd2VyIHByaW9yaXR5LgotCQkJCQl9IHdoaWxlIChmQ2FsbEFnYWluICE9IEZBTFNFKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJY2FzZSBXQUlUX09CSkVDVF8wICsgMToJLy8gZXZlbnQgInRlcm1pbmF0ZSIKLQkJCXsKLQkJCQlUUkFDRTAoIkV2ZW50ID0gV0FJVF9PQkpFQ1RfMCsxIik7Ci0JCQkJZlRlcm1SZXF1ID0gVFJVRTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQlkZWZhdWx0OgotCQkJewotCQkJCVRSQUNFMCgiVW5oYW5kbGVkIEV2ZW50Iik7Ci0JCQkJQVNTRVJUKDApOwotCQkJCWZUZXJtUmVxdSA9IFRSVUU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0Jd2hpbGUgKCFmVGVybVJlcXUpOwotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdICE9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCVNldEV2ZW50KHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdKTsKLQl9Ci0KLQlUUkFDRTEKLQkgICAgKCJcblNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoKTogU2lnbmFsVGhyZWFkIHRlcm1pbmF0ZWQgKHBTaGJJbnN0YW5jZT0weCUwOGxYKVxuIiwKLQkgICAgIChEV09SRCkgcFNoYkluc3RhbmNlKTsKLQotCUV4aXRUaHJlYWQoMCk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBUaHJlYWQgZm9yIG5ldyBkYXRhIHNpZ25hbGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRFdPUkQgV0lOQVBJIFNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KExQVk9JRCBwdlRocmVhZFBhcmFtX3ApCi17Ci0KLQl0U2hiSW5zdGFuY2UgKnBTaGJJbnN0YW5jZTsKLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JRFdPUkQgdWxUaW1lT3V0OwotCURXT1JEIGR3V2FpdFJlc3VsdDsKLQl1bnNpZ25lZCBpbnQgZlRpbWVPdXQ7Ci0KLQlUUkFDRTEKLQkgICAgKCJcblNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KCk6IFNpZ25hbFRocmVhZCBzdGFydGVkIChwU2hiSW5zdGFuY2U9MHglMDhsWClcbiIsCi0JICAgICAoRFdPUkQpIHB2VGhyZWFkUGFyYW1fcCk7Ci0KLQlwU2hiSW5zdGFuY2UgPSAodFNoYkluc3RhbmNlICopIHB2VGhyZWFkUGFyYW1fcDsKLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlKTsKLQlmVGltZU91dCA9IEZBTFNFOwotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX3VsVGltZU91dEpvYlJlYWR5ICE9IDApIHsKLQkJdWxUaW1lT3V0ID0gcFNoYk1lbUluc3QtPm1fdWxUaW1lT3V0Sm9iUmVhZHk7Ci0JfSBlbHNlIHsKLQkJdWxUaW1lT3V0ID0gSU5GSU5JVEU7Ci0JfQotCi0JQVNTRVJUKChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkgICAgICAgJiYgKHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5ICE9IE5VTEwpKTsKLQotCVRSQUNFMCgiXG5TaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSgpOiBlbnRlciB3YWl0IHN0YXRlIik7Ci0JZHdXYWl0UmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSwJLy8gSEFORExFIGhIYW5kbGUKLQkJCQkJICAgdWxUaW1lT3V0KTsJLy8gRFdPUkQgZHdNaWxsaXNlY29uZHMKLQlUUkFDRTAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogd2FpdCBzdGF0ZSBsZWF2ZWQ6IC0tLT4gIik7Ci0Jc3dpdGNoIChkd1dhaXRSZXN1bHQpIHsKLQljYXNlIFdBSVRfT0JKRUNUXzAgKyAwOgkvLyBldmVudCAibmV3IGRhdGEiCi0JCXsKLQkJCVRSQUNFMCgiRXZlbnQgPSBXQUlUX09CSkVDVF8wKzAiKTsKLQkJCWZUaW1lT3V0ID0gRkFMU0U7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBXQUlUX1RJTUVPVVQ6Ci0JCXsKLQkJCVRSQUNFMCgiXG5FdmVudCA9IFdBSVRfVElNRU9VVCIpOwotCQkJZlRpbWVPdXQgPSBUUlVFOwotCQkJLy8gQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCXsKLQkJCVRSQUNFMCgiVW5oYW5kbGVkIEV2ZW50Iik7Ci0JCQlmVGltZU91dCA9IFRSVUU7Ci0JCQlBU1NFUlQoMCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5ICE9IE5VTEwpIHsKLQkJVFJBQ0UwCi0JCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogY2FsbGluZyBTaWduYWxIYW5kbGVySm9iUmVhZHkiKTsKLQkJcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeShwU2hiSW5zdGFuY2UsIGZUaW1lT3V0KTsKLQl9Ci0KLQlwU2hiTWVtSW5zdC0+bV9oVGhyZWFkSm9iUmVhZHkgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5ID0gTlVMTDsKLQotCVRSQUNFMQotCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogU2lnbmFsVGhyZWFkIHRlcm1pbmF0ZWQgKHBTaGJJbnN0YW5jZT0weCUwOGxYKVxuIiwKLQkgICAgIChEV09SRCkgcFNoYkluc3RhbmNlKTsKLQotCUV4aXRUaHJlYWQoMCk7Ci0KLX0KLQotI2VuZGlmCi0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLmgKaW5kZXggY2FkODg0Ni4uMjg1ZjA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy5oCkBAIC02NSwyNSArNjUsNiBAQAogdHlwZWRlZiB2b2lkICgqdFNpZ0huZGxySm9iUmVhZHkpICh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCiAJCQkJICAgdW5zaWduZWQgaW50IGZUaW1lT3V0X3ApOwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLSNpZiBkZWZpbmVkKElOTElORV9GVU5DVElPTl9ERUYpCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSNkZWZpbmUgU0hCSVBDX0lOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2RlZmluZSBTSEJJUENfSU5MSU5FRAotI2luY2x1ZGUgIlNoYklwYy1XaW4zMi5jIgotI2VuZGlmCi0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pCi0jaWYgZGVmaW5lZChJTkxJTkVfRlVOQ1RJT05fREVGKQotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0jZGVmaW5lIFNIQklQQ19JTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKLSNkZWZpbmUgU0hCSVBDX0lOTElORUQKLSNpbmNsdWRlICJTaGJJcGMtTGludXhLZXJuZWwuYyIKLSNlbmRpZgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgUHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk3LDggKzc4LDYgQEAKIAkJCSAgICB1bnNpZ25lZCBpbnQgKnBmU2hiTmV3Q3JlYXRlZF9wKTsKIHRTaGJFcnJvciBTaGJJcGNSZWxlYXNlQnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCk7CiAKLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KIHRTaGJFcnJvciBTaGJJcGNFbnRlckF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIHRTaGJFcnJvciBTaGJJcGNMZWF2ZUF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIApAQCAtMTE2LDEwICs5NSw1IEBACiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsSm9iUmVhZHkodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIAogdm9pZCAqU2hiSXBjR2V0U2hNZW1QdHIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKLSNlbmRpZgotCi0jdW5kZWYgIFNIQklQQ19JTkxJTkVfRU5BQkxFRAkvLyBkaXNhYmxlIGFjdHVhbCBpbmxpbmluZyBvZiBmdW5jdGlvbnMKLSN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OCi0jZGVmaW5lIElOTElORV9GVU5DVElPTgkJLy8gZGVmaW5lIElOTElORV9GVU5DVElPTiB0byBub3RoaW5nCiAKICNlbmRpZiAvLyAjaWZuZGVmIF9TSEJJUENfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvVGltZXJIaWdoUmVza1g4Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMKaW5kZXggODJlZWU0Ny4uZDY4OTdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMKQEAgLTk3LDE0ICs5NywxMCBAQAogCiAjZGVmaW5lIFBST1ZFX09WRVJSVU4KIAotI2lmbmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCi0jZXJyb3IgIktlcm5lbCBzeW1ib2wgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyByZXF1aXJlZC4iCi0jZW5kaWYKLQogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xNzIsNyArMTY4LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrSW5pdCh2b2lkKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrSW5pdCh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xOTYsNyArMTkyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrQWRkSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza0FkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CkBAIC0yMDYsMTMgKzIwMiw2IEBACiAJRVBMX01FTVNFVCgmRXBsVGltZXJIaWdoUmVza0luc3RhbmNlX2wsIDAsCiAJCSAgIHNpemVvZihFcGxUaW1lckhpZ2hSZXNrSW5zdGFuY2VfbCkpOwogCi0jaWZuZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKLQlwcmludGsKLQkgICAgKCJFcGxUaW1lckhpZ2hSZXNrOiBLZXJuZWwgc3ltYm9sIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgcmVxdWlyZWQuXG4iKTsKLQlSZXQgPSBrRXBsTm9SZXNvdXJjZTsKLQlyZXR1cm4gUmV0OwotI2VuZGlmCi0KIAkvKgogCSAqIEluaXRpYWxpemUgaHJ0aW1lciBzdHJ1Y3R1cmVzIGZvciBhbGwgdXNhYmxlIHRpbWVycy4KIAkgKi8KQEAgLTI0NCw3ICsyMzMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tEZWxJbnN0YW5jZSh2b2lkKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsVGltZXJIaWdoUmVza1RpbWVySW5mbyAqcFRpbWVySW5mbzsKIAl0RXBsS2VybmVsIFJldDsKQEAgLTI5OCwxMiArMjg3LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza01vZGlmeVRpbWVyTnModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCi0JCQkJCQl0RXBsVGltZXJrQ2FsbGJhY2sKLQkJCQkJCXBmbkNhbGxiYWNrX3AsCi0JCQkJCQl1bnNpZ25lZCBsb25nIHVsQXJndW1lbnRfcCwKLQkJCQkJCUJPT0wgZkNvbnRpbnVvdXNseV9wKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrTW9kaWZ5VGltZXJOcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJCQkgdW5zaWduZWQgbG9uZyBsb25nIHVsbFRpbWVOc19wLAorCQkJCQkgdEVwbFRpbWVya0NhbGxiYWNrIHBmbkNhbGxiYWNrX3AsCisJCQkJCSB1bnNpZ25lZCBsb25nIHVsQXJndW1lbnRfcCwKKwkJCQkJIEJPT0wgZkNvbnRpbnVvdXNseV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUluZGV4OwpAQCAtMzk2LDcgKzM4NCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza0RlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aUluZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jCmluZGV4IDVkODM4ZGIuLjIxMjA2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvVmlydHVhbEV0aGVybmV0TGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMKQEAgLTc0LDcgKzc0LDYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgpAQCAtMjg1LDcgKzI4NCw3IEBACiAJcmV0dXJuIFJldDsKIH0KIAotdEVwbEtlcm5lbCBQVUJMSUMgVkV0aEFkZEluc3RhbmNlKHRFcGxEbGxrSW5pdFBhcmFtICogcEluaXRQYXJhbV9wKQordEVwbEtlcm5lbCBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0zMjQsNyArMzIzLDcgQEAKIAlyZXR1cm4gUmV0OwogfQogCi10RXBsS2VybmVsIFBVQkxJQyBWRXRoRGVsSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgVkV0aERlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9hbWl4ODYuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvYW1peDg2LmMKaW5kZXggOWY3NDIzOC4uZDQwYWQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9hbWl4ODYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2FtaXg4Ni5jCkBAIC03NCwyNCArNzQsMjIgQEAKIC8vI2luY2x1ZGUgIkVwbEFtaS5oIgogI2luY2x1ZGUgIkVwbEluYy5oIgogCi0jaWYgKCFkZWZpbmVkKEVQTF9BTUlfSU5MSU5FRCkpIHx8IGRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0eXBlZGVmCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JV09SRCBtX3dXb3JkOworCXUxNiBtX3dXb3JkOwogCiB9IHR3U3RydWN0OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JRFdPUkQgbV9kd0R3b3JkOworCXUzMiBtX2R3RHdvcmQ7CiAKIH0gdGR3U3RydWN0OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JUVdPUkQgbV9xd1F3b3JkOworCXU2NCBtX3F3UXdvcmQ7CiAKIH0gdHF3U3RydWN0OwogCkBAIC0xMTcsMzcgKzExNSwzNiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBCWVRFIGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTggaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qCi12b2lkICBQVUJMSUMgIEFtaVNldEJ5dGVUb0JlICh2b2lkIEZBUiogcEFkZHJfcCwgQllURSBiQnl0ZVZhbF9wKQordm9pZCBBbWlTZXRCeXRlVG9CZSAodm9pZCAqcEFkZHJfcCwgdTggYkJ5dGVWYWxfcCkKIHsKIAotICAgKihCWVRFIEZBUiopcEFkZHJfcCA9IGJCeXRlVmFsX3A7CisJKih1OCAqKXBBZGRyX3AgPSBiQnl0ZVZhbF9wOwogCiB9CiAqLwogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgV09SRCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHUxNiBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0V29yZFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLCBXT1JEIHdXb3JkVmFsX3ApCit2b2lkIEFtaVNldFdvcmRUb0JlKHZvaWQgKiBwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCkKIHsKLQl0d1N0cnVjdCBGQVIgKnB3U3RydWN0OworCXR3U3RydWN0ICpwd1N0cnVjdDsKIAl0d1N0cnVjdCB3VmFsdWU7CiAKLQl3VmFsdWUubV93V29yZCA9IChXT1JEKSAoKHdXb3JkVmFsX3AgJiAweDAwRkYpIDw8IDgpOwkvL0xTQiB0byBNU0IKLQl3VmFsdWUubV93V29yZCB8PSAoV09SRCkgKCh3V29yZFZhbF9wICYgMHhGRjAwKSA+PiA4KTsJLy9NU0IgdG8gTFNCCisJd1ZhbHVlLm1fd1dvcmQgPSAodTE2KSAoKHdXb3JkVmFsX3AgJiAweDAwRkYpIDw8IDgpOwkvL0xTQiB0byBNU0IKKwl3VmFsdWUubV93V29yZCB8PSAodTE2KSAoKHdXb3JkVmFsX3AgJiAweEZGMDApID4+IDgpOwkvL01TQiB0byBMU0IKIAotCXB3U3RydWN0ID0gKHR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXB3U3RydWN0ID0gKHR3U3RydWN0ICopIHBBZGRyX3A7CiAJcHdTdHJ1Y3QtPm1fd1dvcmQgPSB3VmFsdWUubV93V29yZDsKIAogfQogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgRFdPUkQgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHUzMiBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXREd29yZFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgRFdPUkQgZHdEd29yZFZhbF9wKQordm9pZCBBbWlTZXREd29yZFRvQmUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCkKIHsKLQl0ZHdTdHJ1Y3QgRkFSICpwZHdTdHJ1Y3Q7CisJdGR3U3RydWN0ICpwZHdTdHJ1Y3Q7CiAJdGR3U3RydWN0IGR3VmFsdWU7CiAKIAlkd1ZhbHVlLm1fZHdEd29yZCA9ICgoZHdEd29yZFZhbF9wICYgMHgwMDAwMDBGRikgPDwgMjQpOwkvL0xTQiB0byBNU0IKQEAgLTE1NSw3ICsxNTIsNyBAQAogCWR3VmFsdWUubV9kd0R3b3JkIHw9ICgoZHdEd29yZFZhbF9wICYgMHgwMEZGMDAwMCkgPj4gOCk7CiAJZHdWYWx1ZS5tX2R3RHdvcmQgfD0gKChkd0R3b3JkVmFsX3AgJiAweEZGMDAwMDAwKSA+PiAyNCk7CS8vTVNCIHRvIExTQgogCi0JcGR3U3RydWN0ID0gKHRkd1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0ICopIHBBZGRyX3A7CiAJcGR3U3RydWN0LT5tX2R3RHdvcmQgPSBkd1ZhbHVlLm1fZHdEd29yZDsKIAogfQpAQCAtMTc2LDM1ICsxNzMsMzQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgQllURSBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHU4IGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvKgotdm9pZCAgUFVCTElDICBBbWlTZXRCeXRlVG9MZSAodm9pZCBGQVIqIHBBZGRyX3AsIEJZVEUgYkJ5dGVWYWxfcCkKK3ZvaWQgQW1pU2V0Qnl0ZVRvTGUgKHZvaWQgKnBBZGRyX3AsIHU4IGJCeXRlVmFsX3ApCiB7CiAKLSAgICooQllURSBGQVIqKXBBZGRyX3AgPSBiQnl0ZVZhbF9wOworCSoodTggKilwQWRkcl9wID0gYkJ5dGVWYWxfcDsKIAogfQogKi8KIAotLy8tLS0tLS0tLS0tLS08IHdyaXRlIFdPUkQgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCB3cml0ZSB1MTYgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFdvcmRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgV09SRCB3V29yZFZhbF9wKQordm9pZCBBbWlTZXRXb3JkVG9MZSh2b2lkICpwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCkKIHsKLQl0d1N0cnVjdCBGQVIgKnB3U3RydWN0OworCXR3U3RydWN0ICpwd1N0cnVjdDsKIAotCXB3U3RydWN0ID0gKHR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXB3U3RydWN0ID0gKHR3U3RydWN0ICopIHBBZGRyX3A7CiAJcHdTdHJ1Y3QtPm1fd1dvcmQgPSB3V29yZFZhbF9wOwogCiB9CiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBEV09SRCBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTMyIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICBEV09SRCBkd0R3b3JkVmFsX3ApCit2b2lkIEFtaVNldER3b3JkVG9MZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCXRkd1N0cnVjdCBGQVIgKnBkd1N0cnVjdDsKKwl0ZHdTdHJ1Y3QgKnBkd1N0cnVjdDsKIAotCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcGR3U3RydWN0ID0gKHRkd1N0cnVjdCAqKSBwQWRkcl9wOwogCXBkd1N0cnVjdC0+bV9kd0R3b3JkID0gZHdEd29yZFZhbF9wOwogCiB9CkBAIC0yMjQsNDAgKzIyMCw0MCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIEJZVEUgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1OCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qCi1CWVRFICBQVUJMSUMgIEFtaUdldEJ5dGVGcm9tQmUgKHZvaWQgRkFSKiBwQWRkcl9wKQordTggQW1pR2V0Qnl0ZUZyb21CZSAodm9pZCAqcEFkZHJfcCkKIHsKIAotICAgcmV0dXJuICggKihCWVRFIEZBUiopcEFkZHJfcCApOworCXJldHVybiAoICoodTggKilwQWRkcl9wICk7CiAKIH0KICovCiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIFdPUkQgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1MTYgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBXT1JEIFBVQkxJQyBBbWlHZXRXb3JkRnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3UxNiBBbWlHZXRXb3JkRnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7Ci0JdHdTdHJ1Y3QgRkFSICpwd1N0cnVjdDsKKwl0d1N0cnVjdCAqcHdTdHJ1Y3Q7CiAJdHdTdHJ1Y3Qgd1ZhbHVlOwogCi0JcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAotCXdWYWx1ZS5tX3dXb3JkID0gKFdPUkQpICgocHdTdHJ1Y3QtPm1fd1dvcmQgJiAweDAwRkYpIDw8IDgpOwkvL0xTQiB0byBNU0IKLQl3VmFsdWUubV93V29yZCB8PSAoV09SRCkgKChwd1N0cnVjdC0+bV93V29yZCAmIDB4RkYwMCkgPj4gOCk7CS8vTVNCIHRvIExTQgorCXdWYWx1ZS5tX3dXb3JkID0gKHUxNikgKChwd1N0cnVjdC0+bV93V29yZCAmIDB4MDBGRikgPDwgOCk7CS8vTFNCIHRvIE1TQgorCXdWYWx1ZS5tX3dXb3JkIHw9ICh1MTYpICgocHdTdHJ1Y3QtPm1fd1dvcmQgJiAweEZGMDApID4+IDgpOwkvL01TQiB0byBMU0IKIAogCXJldHVybiAod1ZhbHVlLm1fd1dvcmQpOwogCiB9CiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIERXT1JEIGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1MzIgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIERXT1JEIFBVQkxJQyBBbWlHZXREd29yZEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MzIgQW1pR2V0RHdvcmRGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKLQl0ZHdTdHJ1Y3QgRkFSICpwZHdTdHJ1Y3Q7CisJdGR3U3RydWN0ICpwZHdTdHJ1Y3Q7CiAJdGR3U3RydWN0IGR3VmFsdWU7CiAKLQlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAogCWR3VmFsdWUubV9kd0R3b3JkID0gKChwZHdTdHJ1Y3QtPm1fZHdEd29yZCAmIDB4MDAwMDAwRkYpIDw8IDI0KTsJLy9MU0IgdG8gTVNCCiAJZHdWYWx1ZS5tX2R3RHdvcmQgfD0gKChwZHdTdHJ1Y3QtPm1fZHdEd29yZCAmIDB4MDAwMEZGMDApIDw8IDgpOwpAQCAtMjgzLDM2ICsyNzksMzQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLy0tLS0tLS0tLS0tLTwgcmVhZCBCWVRFIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHJlYWQgdTggaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvKgotQllURSAgUFVCTElDICBBbWlHZXRCeXRlRnJvbUxlICh2b2lkIEZBUiogcEFkZHJfcCkKK3U4IEFtaUdldEJ5dGVGcm9tTGUgKHZvaWQgKnBBZGRyX3ApCiB7CiAKLSAgIHJldHVybiAoICooQllURSBGQVIqKXBBZGRyX3AgKTsKKwlyZXR1cm4gKCAqKHU4ICopcEFkZHJfcCApOwogCiB9CiAqLwogCi0vLy0tLS0tLS0tLS0tLTwgcmVhZCBXT1JEIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHJlYWQgdTE2IGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gV09SRCBQVUJMSUMgQW1pR2V0V29yZEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MTYgQW1pR2V0V29yZEZyb21MZSh2b2lkICpwQWRkcl9wKQogewotCXR3U3RydWN0IEZBUiAqcHdTdHJ1Y3Q7CisJdHdTdHJ1Y3QgKnB3U3RydWN0OwogCi0JcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAlyZXR1cm4gKHB3U3RydWN0LT5tX3dXb3JkKTsKLQogfQogCi0vLy0tLS0tLS0tLS0tLTwgcmVhZCBEV09SRCBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHJlYWQgdTMyIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmRGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKQordTMyIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7Ci0JdGR3U3RydWN0IEZBUiAqcGR3U3RydWN0OworCXRkd1N0cnVjdCAqcGR3U3RydWN0OwogCi0JcGR3U3RydWN0ID0gKHRkd1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0ICopIHBBZGRyX3A7CiAJcmV0dXJuIChwZHdTdHJ1Y3QtPm1fZHdEd29yZCk7Ci0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMzMCwxNCArMzI0LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkMjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgRFdPUkQgZHdEd29yZFZhbF9wKQordm9pZCBBbWlTZXREd29yZDI0VG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBkd0R3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgZHdEd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIGR3RHdvcmRWYWxfcClbMF07Ci0KKwkoKHU4ICopIHBBZGRyX3ApWzBdID0gKCh1OCAqKSAmIGR3RHdvcmRWYWxfcClbMl07CisJKCh1OCAqKSBwQWRkcl9wKVsxXSA9ICgodTggKikgJiBkd0R3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbMl0gPSAoKHU4ICopICYgZHdEd29yZFZhbF9wKVswXTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM1NSwxNCArMzQ2LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkMjRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgRFdPUkQgZHdEd29yZFZhbF9wKQordm9pZCBBbWlTZXREd29yZDI0VG9MZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBkd0R3b3JkVmFsX3ApWzBdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgZHdEd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIGR3RHdvcmRWYWxfcClbMl07Ci0KKwkoKHU4ICopIHBBZGRyX3ApWzBdID0gKCh1OCAqKSAmIGR3RHdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVsxXSA9ICgodTggKikgJiBkd0R3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbMl0gPSAoKHU4ICopICYgZHdEd29yZFZhbF9wKVsyXTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3MywyMiArMzYxLDE5IEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBEV09SRCAgICAgICAgICAgPSByZWFkIHZhbHVlCisvLyBSZXR1cm46ICAgICAgdTMyICAgICAgICAgICA9IHJlYWQgdmFsdWUKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiBEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MzIgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkICpwQWRkcl9wKQogewotCiAJdGR3U3RydWN0IGR3U3RydWN0OwogCiAJZHdTdHJ1Y3QubV9kd0R3b3JkID0gQW1pR2V0RHdvcmRGcm9tQmUocEFkZHJfcCk7CiAJZHdTdHJ1Y3QubV9kd0R3b3JkID4+PSA4OwogCiAJcmV0dXJuIChkd1N0cnVjdC5tX2R3RHdvcmQpOwotCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTksMjIgKzM4NCwxOSBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgRFdPUkQgICAgICAgICAgID0gcmVhZCB2YWx1ZQorLy8gUmV0dXJuOiAgICAgIHUzMiAgICAgICAgICAgPSByZWFkIHZhbHVlCiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gRFdPUkQgUFVCTElDIEFtaUdldER3b3JkMjRGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKQordTMyIEFtaUdldER3b3JkMjRGcm9tTGUodm9pZCAqcEFkZHJfcCkKIHsKLQogCXRkd1N0cnVjdCBkd1N0cnVjdDsKIAogCWR3U3RydWN0Lm1fZHdEd29yZCA9IEFtaUdldER3b3JkRnJvbUxlKHBBZGRyX3ApOwogCWR3U3RydWN0Lm1fZHdEd29yZCAmPSAweDAwRkZGRkZGOwogCiAJcmV0dXJuIChkd1N0cnVjdC5tX2R3RHdvcmQpOwotCiB9CiAKIC8vI2lmZGVmIFVTRV9WQVI2NApAQCAtNDMzLDIwICs0MTUsMTYgQEAKIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDY0VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewotCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzddOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs2XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNV07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVszXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzRdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVszXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzVdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs2XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzFdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbN10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVswXTsKLQorCSgodTggKikgcEFkZHJfcClbMF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs3XTsKKwkoKHU4ICopIHBBZGRyX3ApWzFdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNl07CisJKCh1OCAqKSBwQWRkcl9wKVsyXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzVdOworCSgodTggKikgcEFkZHJfcClbM10gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs0XTsKKwkoKHU4ICopIHBBZGRyX3ApWzRdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbM107CisJKCh1OCAqKSBwQWRkcl9wKVs1XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTggKikgcEFkZHJfcClbNl0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsxXTsKKwkoKHU4ICopIHBBZGRyX3ApWzddID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMF07CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjMsMTYgKzQ0MSwxMiBAQAogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ2NFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNjRUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7CisJdTY0ICpwcXdEc3Q7CiAKLQlRV09SRCBGQVIgKnBxd0RzdDsKLQotCXBxd0RzdCA9IChRV09SRCBGQVIgKikgcEFkZHJfcDsKKwlwcXdEc3QgPSAodTY0ICopIHBBZGRyX3A7CiAJKnBxd0RzdCA9IHF3UXdvcmRWYWxfcDsKLQogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDg4LDIzICs0NjIsMjAgQEAKIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDY0RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDY0RnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7Ci0KIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CiAKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVswXSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbN107Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbMV0gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzZdOwotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzJdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs1XTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVszXSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbNF07Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbNF0gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzNdOwotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzVdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs2XSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbMV07Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbN10gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzBdID0gKCh1OCAqKSBwQWRkcl9wKVs3XTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVsxXSA9ICgodTggKikgcEFkZHJfcClbNl07CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbMl0gPSAoKHU4ICopIHBBZGRyX3ApWzVdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzNdID0gKCh1OCAqKSBwQWRkcl9wKVs0XTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs0XSA9ICgodTggKikgcEFkZHJfcClbM107CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbNV0gPSAoKHU4ICopIHBBZGRyX3ApWzJdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzZdID0gKCh1OCAqKSBwQWRkcl9wKVsxXTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs3XSA9ICgodTggKikgcEFkZHJfcClbMF07CiAKIAlyZXR1cm4gKHF3U3RydWN0Lm1fcXdRd29yZCk7Ci0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyMCwxOCArNDkxLDE1IEBACiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiBRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1NjQgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkICpwQWRkcl9wKQogewotCi0JdHF3U3RydWN0IEZBUiAqcHF3U3RydWN0OworCXRxd1N0cnVjdCAqcHF3U3RydWN0OwogCXRxd1N0cnVjdCBxd1N0cnVjdDsKIAotCXBxd1N0cnVjdCA9ICh0cXdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHF3U3RydWN0ID0gKHRxd1N0cnVjdCAqKSBwQWRkcl9wOwogCXF3U3RydWN0Lm1fcXdRd29yZCA9IHBxd1N0cnVjdC0+bV9xd1F3b3JkOwogCiAJcmV0dXJuIChxd1N0cnVjdC5tX3F3UXdvcmQpOwotCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NDksMTUgKzUxNywxNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ0MFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzFdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbM107Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbM10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzRdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVswXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzRdOworCSgodTggKikgcEFkZHJfcClbMV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVszXTsKKwkoKHU4ICopIHBBZGRyX3ApWzJdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMl07CisJKCh1OCAqKSBwQWRkcl9wKVszXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVswXTsKIAogfQogCkBAIC01NzYsMTIgKzU0MywxMSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ0MFRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoRFdPUkQgRkFSICopIHBBZGRyX3ApWzBdID0gKChEV09SRCBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKKwkoKHUzMiAqKSBwQWRkcl9wKVswXSA9ICgodTMyICopICYgcXdRd29yZFZhbF9wKVswXTsKKwkoKHU4ICopIHBBZGRyX3ApWzRdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CiAKIH0KIApAQCAtNTkzLDEzICs1NTksMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTYxOSwxMyArNTg1LDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQwRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDQwRnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC02NTIsMTYgKzYxOCwxNSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQ4VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs1XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzFdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNF07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzNdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbM10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsyXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzRdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMV07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs1XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOworCSgodTggKikgcEFkZHJfcClbMF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs1XTsKKwkoKHU4ICopIHBBZGRyX3ApWzFdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CisJKCh1OCAqKSBwQWRkcl9wKVsyXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzNdOworCSgodTggKikgcEFkZHJfcClbM10gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzRdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVs1XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzBdOwogCiB9CiAKQEAgLTY4MCwxMiArNjQ1LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDQ4VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChEV09SRCBGQVIgKikgcEFkZHJfcClbMF0gPSAoKERXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07Ci0JKChXT1JEIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoV09SRCBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTMyICopIHBBZGRyX3ApWzBdID0gKCh1MzIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOworCSgodTE2ICopIHBBZGRyX3ApWzJdID0gKCh1MTYgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwogCiB9CiAKQEAgLTY5NywxMyArNjYxLDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQ4RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDQ4RnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC03MjMsMTMgKzY4NywxMyBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0OEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1NjQgQW1pR2V0UXdvcmQ0OEZyb21MZSh2b2lkICpwQWRkcl9wKQogewogCiAJdHF3U3RydWN0IHF3U3RydWN0OwpAQCAtNzU2LDE3ICs3MjAsMTYgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ1NlRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNTZUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7CiAKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsxXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzVdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMl0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzNdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbM107Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs0XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzZdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVswXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzZdOworCSgodTggKikgcEFkZHJfcClbMV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs1XTsKKwkoKHU4ICopIHBBZGRyX3ApWzJdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CisJKCh1OCAqKSBwQWRkcl9wKVszXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzNdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzVdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVs2XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzBdOwogCiB9CiAKQEAgLTc4NSwxMyArNzQ4LDEyIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNTZUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDU2VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChEV09SRCBGQVIgKikgcEFkZHJfcClbMF0gPSAoKERXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07Ci0JKChXT1JEIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoV09SRCBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNl0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs2XTsKKwkoKHUzMiAqKSBwQWRkcl9wKVswXSA9ICgodTMyICopICYgcXdRd29yZFZhbF9wKVswXTsKKwkoKHUxNiAqKSBwQWRkcl9wKVsyXSA9ICgodTE2ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzZdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNl07CiAKIH0KIApAQCAtODAzLDEzICs3NjUsMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNTZGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNTZGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTgyOSwxMyArNzkxLDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDU2RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDU2RnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC04NjIsMTMgKzgyNCwxMSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRUaW1lT2ZEYXkodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgdFRpbWVPZkRheSBGQVIgKiBwVGltZU9mRGF5X3ApCit2b2lkIEFtaVNldFRpbWVPZkRheSh2b2lkICpwQWRkcl9wLCB0VGltZU9mRGF5ICpwVGltZU9mRGF5X3ApCiB7CiAKLQlBbWlTZXREd29yZFRvTGUoKChCWVRFIEZBUiAqKSBwQWRkcl9wKSwKLQkJCXBUaW1lT2ZEYXlfcC0+bV9kd01zICYgMHgwRkZGRkZGRik7Ci0JQW1pU2V0V29yZFRvTGUoKChCWVRFIEZBUiAqKSBwQWRkcl9wKSArIDQsIHBUaW1lT2ZEYXlfcC0+bV93RGF5cyk7CisJQW1pU2V0RHdvcmRUb0xlKCgodTggKikgcEFkZHJfcCksIHBUaW1lT2ZEYXlfcC0+bV9kd01zICYgMHgwRkZGRkZGRik7CisJQW1pU2V0V29yZFRvTGUoKCh1OCAqKSBwQWRkcl9wKSArIDQsIHBUaW1lT2ZEYXlfcC0+bV93RGF5cyk7CiAKIH0KIApAQCAtODg3LDE4ICs4NDcsMTQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pR2V0VGltZU9mRGF5KHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgIHRUaW1lT2ZEYXkgRkFSICogcFRpbWVPZkRheV9wKQordm9pZCBBbWlHZXRUaW1lT2ZEYXkodm9pZCAqcEFkZHJfcCwgdFRpbWVPZkRheSAqcFRpbWVPZkRheV9wKQogewogCi0JcFRpbWVPZkRheV9wLT5tX2R3TXMgPQotCSAgICBBbWlHZXREd29yZEZyb21MZSgoKEJZVEUgRkFSICopIHBBZGRyX3ApKSAmIDB4MEZGRkZGRkY7Ci0JcFRpbWVPZkRheV9wLT5tX3dEYXlzID0gQW1pR2V0V29yZEZyb21MZSgoKEJZVEUgRkFSICopIHBBZGRyX3ApICsgNCk7CisJcFRpbWVPZkRheV9wLT5tX2R3TXMgPSBBbWlHZXREd29yZEZyb21MZSgoKHU4ICopIHBBZGRyX3ApKSAmIDB4MEZGRkZGRkY7CisJcFRpbWVPZkRheV9wLT5tX3dEYXlzID0gQW1pR2V0V29yZEZyb21MZSgoKHU4ICopIHBBZGRyX3ApICsgNCk7CiAKIH0KIAotI2VuZGlmCi0KIC8vIEVPRgogCiAvLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9kZW1vX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZGVtb19tYWluLmMKaW5kZXggMjYzZmEwNC4uN2FkMTBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9kZW1vX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2RlbW9fbWFpbi5jCkBAIC03NCw3ICs3NCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC04NywxNiArODYsNiBAQAogI2luY2x1ZGUgIkVwbC5oIgogI2luY2x1ZGUgInByb2NfZnMuaCIKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKLSAgICAvLyByZW1vdmUgKCJtYWtlIGludmlzaWJsZSIpIG9ic29sZXRlIHN5bWJvbHMgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjYKLSAgICAvLyBhbmQgaGlnaGVyCi0jZGVmaW5lIE1PRF9JTkNfVVNFX0NPVU5UCi0jZGVmaW5lIE1PRF9ERUNfVVNFX0NPVU5UCi0jZGVmaW5lIEVYUE9SVF9OT19TWU1CT0xTCi0jZWxzZQotI2Vycm9yICJUaGlzIGRyaXZlciBuZWVkcyBhIDIuNi54IGtlcm5lbCBvciBoaWdoZXIiCi0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTE4LDcgKzEwNyw3IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2Vsc2UKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkKQEAgLTE0OCwzMCArMTM3LDMwIEBACiAvLyBtb2R1bCBnbG9iYWxlIHZhcnMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNPTlNUIEJZVEUgYWJNYWNBZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKK3N0YXRpYyBjb25zdCB1OCBhYk1hY0FkZHJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCi1CWVRFIGJWYXJJbjFfbDsKLUJZVEUgYlZhck91dDFfbDsKLUJZVEUgYlZhck91dDFPbGRfbDsKLUJZVEUgYk1vZGVTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBzZWxlY3QgdGhlIG1vZGUKLUJZVEUgYlNwZWVkU2VsZWN0X2w7CQkvLyBzdGF0ZSBvZiB0aGUgcHVzaGJ1dHRvbnMgdG8gaW5jcmVhc2UvZGVjcmVhc2UgdGhlIHNwZWVkCi1CWVRFIGJTcGVlZFNlbGVjdE9sZF9sOwkJLy8gb2xkIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucwotRFdPUkQgZHdMZWRzX2w7CQkJLy8gY3VycmVudCBzdGF0ZSBvZiBhbGwgTEVEcwotQllURSBiTGVkc1JvdzFfbDsJCS8vIGN1cnJlbnQgc3RhdGUgb2YgdGhlIExFRHMgaW4gcm93IDEKLUJZVEUgYkxlZHNSb3cyX2w7CQkvLyBjdXJyZW50IHN0YXRlIG9mIHRoZSBMRURzIGluIHJvdyAyCi1CWVRFIGFiU2VsZWN0X2xbM107CQkvLyBwdXNoYnV0dG9ucyBmcm9tIENOcworc3RhdGljIHU4IGJWYXJJbjFfbDsKK3N0YXRpYyB1OCBiVmFyT3V0MV9sOworc3RhdGljIHU4IGJWYXJPdXQxT2xkX2w7CitzdGF0aWMgdTggYk1vZGVTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBzZWxlY3QgdGhlIG1vZGUKK3N0YXRpYyB1OCBiU3BlZWRTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBpbmNyZWFzZS9kZWNyZWFzZSB0aGUgc3BlZWQKK3N0YXRpYyB1OCBiU3BlZWRTZWxlY3RPbGRfbDsJCS8vIG9sZCBzdGF0ZSBvZiB0aGUgcHVzaGJ1dHRvbnMKK3N0YXRpYyB1MzIgZHdMZWRzX2w7CQkJLy8gY3VycmVudCBzdGF0ZSBvZiBhbGwgTEVEcworc3RhdGljIHU4IGJMZWRzUm93MV9sOwkJLy8gY3VycmVudCBzdGF0ZSBvZiB0aGUgTEVEcyBpbiByb3cgMQorc3RhdGljIHU4IGJMZWRzUm93Ml9sOwkJLy8gY3VycmVudCBzdGF0ZSBvZiB0aGUgTEVEcyBpbiByb3cgMgorc3RhdGljIHU4IGFiU2VsZWN0X2xbM107CQkvLyBwdXNoYnV0dG9ucyBmcm9tIENOcwogCi1EV09SRCBkd01vZGVfbDsJCQkvLyBjdXJyZW50IG1vZGUKLWludCBpQ3VyQ3ljbGVDb3VudF9sOwkJLy8gY3VycmVudCBjeWNsZSBjb3VudAotaW50IGlNYXhDeWNsZUNvdW50X2w7CQkvLyBtYXhpbXVtIGN5Y2xlIGNvdW50IChpLmUuIG51bWJlciBvZiBjeWNsZXMgdW50aWwgbmV4dCBsaWdodCBtb3ZlbWVudCBzdGVwKQotaW50IGlUb2dnbGU7CQkJLy8gaW5kaWNhdGVzIHRoZSBsaWdodCBtb3ZlbWVudCBkaXJlY3Rpb24KK3N0YXRpYyB1MzIgZHdNb2RlX2w7CQkJLy8gY3VycmVudCBtb2RlCitzdGF0aWMgaW50IGlDdXJDeWNsZUNvdW50X2w7CQkvLyBjdXJyZW50IGN5Y2xlIGNvdW50CitzdGF0aWMgaW50IGlNYXhDeWNsZUNvdW50X2w7CQkvLyBtYXhpbXVtIGN5Y2xlIGNvdW50IChpLmUuIG51bWJlciBvZiBjeWNsZXMgdW50aWwgbmV4dCBsaWdodCBtb3ZlbWVudCBzdGVwKQorc3RhdGljIGludCBpVG9nZ2xlOwkJCS8vIGluZGljYXRlcyB0aGUgbGlnaHQgbW92ZW1lbnQgZGlyZWN0aW9uCiAKLUJZVEUgYWJEb21haW5fbFszMDAwXTsKKy8vc3RhdGljIHU4IGFiRG9tYWluX2xbMzAwMF07CiAKIHN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBXYWl0UXVldWVTaHV0ZG93bl9nOwkvLyB3YWl0IHF1ZXVlIGZvciB0RXBsTm10RXZlbnRTd2l0Y2hPZmYKIHN0YXRpYyBhdG9taWNfdCBBdG9taWNTaHV0ZG93bl9nID0gQVRPTUlDX0lOSVQoRkFMU0UpOwogCi1zdGF0aWMgRFdPUkQgZHdfbGVfQ3ljbGVMZW5fZzsKK3N0YXRpYyB1MzIgZHdfbGVfQ3ljbGVMZW5fZzsKIAogc3RhdGljIHVpbnQgdWlOb2RlSWRfZyA9IEVQTF9DX0FEUl9JTlZBTElEOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vZGVpZCwgdWlOb2RlSWRfZywgdWludCwgMCk7CkBAIC0xODgsMjMgKzE3NywxOSBAQAogLy8gdGhpcyBmdW5jdGlvbiBwcm90b3R5cGUgaGVyZS4gSWYgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgRXBsCiAvLyBpbnN0YW5jZXMgdGhlbiB0aGUgZnVuY3Rpb24gbmFtZSBvZiBlYWNoIG9iamVjdCBkaWN0aW9uYXJ5IGhhcyB0byBkaWZmZXIuCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXRSYW0odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmRJbml0UmFtKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEFwcENiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkgICAgIHRFcGxBcGlFdmVudEFyZyAqIHBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQotCQkJICAgICB2b2lkIEdFTkVSSUMgKiBwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgQXBwQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKKwkJICAgICAgdEVwbEFwaUV2ZW50QXJnICpwRXZlbnRBcmdfcCwJLy8gSU46IGV2ZW50IGFyZ3VtZW50ICh1bmlvbikKKwkJICAgICAgdm9pZCAqcFVzZXJBcmdfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEFwcENiU3luYyh2b2lkKTsKK3RFcGxLZXJuZWwgQXBwQ2JTeW5jKHZvaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBFcGxMaW5Jbml0KHZvaWQpOwotc3RhdGljIHZvaWQgX19leGl0IEVwbExpbkV4aXQodm9pZCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgS2VybmVsIE1vZHVsZSBzcGVjaWZpYyBEYXRhIFN0cnVjdHVyZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVYUE9SVF9OT19TWU1CT0xTOwotCiAvL21vZHVsZV9pbml0KEVwbExpbkluaXQpOwogLy9tb2R1bGVfZXhpdChFcGxMaW5FeGl0KTsKIApAQCAtMjMxLDYgKzIxNiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2lmIDAKIHN0YXRpYyBpbnQgX19pbml0IEVwbExpbkluaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIEVwbFJldDsKQEAgLTI2Myw3ICsyNDksNyBAQAogCUVwbEFwaUluaXRQYXJhbS5tX3VpU2l6ZU9mU3RydWN0ID0gc2l6ZW9mKEVwbEFwaUluaXRQYXJhbSk7CiAJRVBMX01FTUNQWShFcGxBcGlJbml0UGFyYW0ubV9hYk1hY0FkZHJlc3MsIGFiTWFjQWRkciwKIAkJICAgc2l6ZW9mKEVwbEFwaUluaXRQYXJhbS5tX2FiTWFjQWRkcmVzcykpOwotLy8gICAgRXBsQXBpSW5pdFBhcmFtLm1fYWJNYWNBZGRyZXNzWzVdID0gKEJZVEUpIEVwbEFwaUluaXRQYXJhbS5tX3VpTm9kZUlkOworLy8JRXBsQXBpSW5pdFBhcmFtLm1fYWJNYWNBZGRyZXNzWzVdID0gKHU4KSBFcGxBcGlJbml0UGFyYW0ubV91aU5vZGVJZDsKIAlFcGxBcGlJbml0UGFyYW0ubV9kd0ZlYXR1cmVGbGFncyA9IC0xOwogCUVwbEFwaUluaXRQYXJhbS5tX2R3Q3ljbGVMZW4gPSB1aUN5Y2xlTGVuX2c7CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAlFcGxBcGlJbml0UGFyYW0ubV91aUlzb2NoclR4TWF4UGF5bG9hZCA9IDEwMDsJLy8gY29uc3QKQEAgLTQwMSw3ICszODcsNyBAQAogCiAJLy8gY29uZmlndXJlIElQIGFkZHJlc3Mgb2YgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZQogCS8vIGZvciBUQ1AvSVAgY29tbXVuaWNhdGlvbiBvdmVyIHRoZSBQT1dFUkxJTksgbmV0d29yawotCXNwcmludGYoc0J1ZmZlciwgIiVsdS4lbHUuJWx1LiVsdSIsCisJc3ByaW50ZihzQnVmZmVyLCAiJXUuJXUuJXUuJXUiLAogCQkoRXBsQXBpSW5pdFBhcmFtLm1fZHdJcEFkZHJlc3MgPj4gMjQpLAogCQkoKEVwbEFwaUluaXRQYXJhbS5tX2R3SXBBZGRyZXNzID4+IDE2KSAmIDB4RkYpLAogCQkoKEVwbEFwaUluaXRQYXJhbS5tX2R3SXBBZGRyZXNzID4+IDgpICYgMHhGRiksCkBAIC00NTYsNyArNDQyLDcgQEAKIAlwcmludGsoIkVwbExpblByb2NGcmVlKCk6ICAgICAgICAweCVYXG4iLCBFcGxSZXQpOwogCiB9Ci0KKyNlbmRpZgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtNDg0LDkgKzQ3MCw5IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgQXBwQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKLQkJCSAgICAgdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkgICAgIHZvaWQgR0VORVJJQyAqIHBVc2VyQXJnX3ApCit0RXBsS2VybmVsIEFwcENiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCisJCSAgICAgIHRFcGxBcGlFdmVudEFyZyAqcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCisJCSAgICAgIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBFcGxSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtNTE1LDcgKzUwMSw3IEBACiAKIAkJCWNhc2Uga0VwbE5tdEdzUmVzZXRDb21tdW5pY2F0aW9uOgogCQkJCXsKLQkJCQkJRFdPUkQgZHdCdWZmZXI7CisJCQkJCXUzMiBkd0J1ZmZlcjsKIAogCQkJCQkvLyBjb25maWd1cmUgT0QgZm9yIE1OIGluIHN0YXRlIFJlc2V0Q29tbSBhZnRlciByZXNldGluZyB0aGUgT0QKIAkJCQkJLy8gVE9ETzogc2V0dXAgeW91ciBvd24gbmV0d29yayBjb25maWd1cmF0aW9uIGhlcmUKQEAgLTY3Nyw4ICs2NjMsOCBAQAogCiAJCQljYXNlIGtFcGxFdmVudFNvdXJjZURsbGs6CiAJCQkJewkvLyBlcnJvciBvY2N1cmVkIHdpdGhpbiB0aGUgZGF0YSBsaW5rIGxheWVyIChlLmcuIGludGVycnVwdCBwcm9jZXNzaW5nKQotCQkJCQkvLyB0aGUgRFdPUkQgYXJndW1lbnQgY29udGFpbnMgdGhlIERMTCBzdGF0ZSBhbmQgdGhlIE5NVCBldmVudAotCQkJCQlwcmludGsoIiB2YWw9JWxYXG4iLAorCQkJCQkvLyB0aGUgdTMyIGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBETEwgc3RhdGUgYW5kIHRoZSBOTVQgZXZlbnQKKwkJCQkJcHJpbnRrKCIgdmFsPSVYXG4iLAogCQkJCQkgICAgICAgcEV2ZW50QXJnX3AtPm1fSW50ZXJuYWxFcnJvci4KIAkJCQkJICAgICAgIG1fQXJnLm1fZHdBcmcpOwogCQkJCQlicmVhazsKQEAgLTgwMiw3ICs3ODgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEFwcENiU3luYyh2b2lkKQordEVwbEtlcm5lbCBBcHBDYlN5bmModm9pZCkKIHsKIAl0RXBsS2VybmVsIEVwbFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC04MTAsNyArNzk2LDcgQEAKIAkJYlZhck91dDFPbGRfbCA9IGJWYXJPdXQxX2w7CiAJCS8vIHNldCBMRURzCiAKLS8vICAgICAgICBwcmludGsoImJWYXJJbiA9IDB4JTAyWCBiVmFyT3V0ID0gMHglMDJYXG4iLCAoV09SRCkgYlZhckluX2wsIChXT1JEKSBiVmFyT3V0X2wpOworLy8gICAgICAgIHByaW50aygiYlZhckluID0gMHglMDJYIGJWYXJPdXQgPSAweCUwMlhcbiIsICh1MTYpIGJWYXJJbl9sLCAodTE2KSBiVmFyT3V0X2wpOwogCX0KIAlpZiAodWlOb2RlSWRfZyAhPSBFUExfQ19BRFJfTU5fREVGX05PREVfSUQpIHsKIAkJYlZhckluMV9sKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2VkcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oCmluZGV4IGE0NTk4NGQuLjYyYjRlNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oCkBAIC0xMDQsNyArMTA0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbV91aVR4TXNnTGVuOwkvLyBJTjogbGVuZ3RoIG9mIG1lc3NhZ2UgdG8gYmUgc2VuZCAoc2V0IGZvciBlYWNoIHRyYW5zbWl0IGNhbGwpCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCXVuc2lnbmVkIGludCBtX3VpQnVmZmVyTnVtYmVyOwkvLyBPVVQ6IG51bWJlciBvZiB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKLQlCWVRFICptX3BiQnVmZmVyOwkvLyBPVVQ6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciwgc2V0IGJ5IGV0aGVybmV0ZHJpdmVyCisJdTggKm1fcGJCdWZmZXI7CS8vIE9VVDogcG9pbnRlciB0byB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKIAl0RXBsTmV0VGltZSBtX05ldFRpbWU7CS8vIE9VVDogVGltZXN0YW1wIG9mIGVuZCBvZiB0cmFuc21pc3Npb24sIHNldCBieSBldGhlcm5ldGRyaXZlcgogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAl1bnNpZ25lZCBpbnQgbV91aU1heEJ1ZmZlckxlbjsJLy8gSU4vT1VUOiBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgYnVmZmVyCkBAIC0xMTQsMjMgKzExNCwyMyBAQAogdHlwZWRlZiBzdHJ1Y3QgX3RFZHJ2UnhCdWZmZXIgewogCXRFZHJ2QnVmZmVySW5GcmFtZSBtX0J1ZmZlckluRnJhbWU7CS8vIE9VVCBwb3NpdGlvbiBvZiByZWNlaXZlZCBidWZmZXIgaW4gYW4gZXRoZXJuZXQtZnJhbWUKIAl1bnNpZ25lZCBpbnQgbV91aVJ4TXNnTGVuOwkvLyBPVVQ6IGxlbmd0aCBvZiByZWNlaXZlZCBidWZmZXIgKHdpdGhvdXQgQ1JDKQotCUJZVEUgKm1fcGJCdWZmZXI7CS8vIE9VVDogcG9pbnRlciB0byB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKKwl1OCAqbV9wYkJ1ZmZlcjsJLy8gT1VUOiBwb2ludGVyIHRvIHRoZSBidWZmZXIsIHNldCBieSBldGhlcm5ldGRyaXZlcgogCXRFcGxOZXRUaW1lIG1fTmV0VGltZTsJLy8gT1VUOiBUaW1lc3RhbXAgb2YgZW5kIG9mIHJlY2VpcHRpb24KIAogfSB0RWRydlJ4QnVmZmVyOwogCi0vL3R5cGVkZWYgdm9pZCAoKnRFZHJ2UnhIYW5kbGVyKSAoQllURSBiQnVmZmVySW5GcmFtZV9wLCB0QnVmZmVyRGVzY3IgKiBwYkJ1ZmZlcl9wKTsKLS8vdHlwZWRlZiB2b2lkICgqdEVkcnZSeEhhbmRsZXIpIChCWVRFIGJCdWZmZXJJbkZyYW1lX3AsIEJZVEUgKiBwYkV0aGVybmV0RGF0YV9wLCBXT1JEIHdEYXRhTGVuX3ApOworLy90eXBlZGVmIHZvaWQgKCp0RWRydlJ4SGFuZGxlcikgKHU4IGJCdWZmZXJJbkZyYW1lX3AsIHRCdWZmZXJEZXNjciAqIHBiQnVmZmVyX3ApOworLy90eXBlZGVmIHZvaWQgKCp0RWRydlJ4SGFuZGxlcikgKHU4IGJCdWZmZXJJbkZyYW1lX3AsIHU4ICogcGJFdGhlcm5ldERhdGFfcCwgdTE2IHdEYXRhTGVuX3ApOwogdHlwZWRlZiB2b2lkICgqdEVkcnZSeEhhbmRsZXIpICh0RWRydlJ4QnVmZmVyICogcFJ4QnVmZmVyX3ApOwogdHlwZWRlZiB2b2lkICgqdEVkcnZUeEhhbmRsZXIpICh0RWRydlR4QnVmZmVyICogcFR4QnVmZmVyX3ApOwogCiAvLyBmb3JtYXQgb2YgaW5pdCBzdHJ1Y3R1cmUKIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIG1fYWJNeU1hY0FkZHJbNl07CS8vIHRoZSBvd24gTUFDIGFkZHJlc3MKKwl1OCBtX2FiTXlNYWNBZGRyWzZdOwkvLyB0aGUgb3duIE1BQyBhZGRyZXNzCiAKLS8vICAgIEJZVEUgICAgICAgICAgICBtX2JOb09mUnhCdWZmRGVzY3I7ICAgICAvLyBudW1iZXIgb2YgZW50cmllcyBpbiByeCBidWZmZXJkZXNjcmlwdG9yIHRhYmxlCisvLyAgICB1OCAgICAgICAgICAgIG1fYk5vT2ZSeEJ1ZmZEZXNjcjsgICAgIC8vIG51bWJlciBvZiBlbnRyaWVzIGluIHJ4IGJ1ZmZlcmRlc2NyaXB0b3IgdGFibGUKIC8vICAgIHRCdWZmZXJEZXNjciAqICBtX3BSeEJ1ZmZEZXNjclRhYmxlOyAgICAvLyByeCBidWZmZXJkZXNjcmlwdG9yIHRhYmxlCi0vLyAgICBXT1JEICAgICAgICAgICAgbV93UnhCdWZmZXJTaXplOyAgICAgICAgLy8gc2l6ZSBvZiB0aGUgd2hvbGUgcnggYnVmZmVyCisvLyAgICB1MTYgICAgICAgICAgICBtX3dSeEJ1ZmZlclNpemU7ICAgICAgICAvLyBzaXplIG9mIHRoZSB3aG9sZSByeCBidWZmZXIKIAogCXRFZHJ2UnhIYW5kbGVyIG1fcGZuUnhIYW5kbGVyOwogCXRFZHJ2VHhIYW5kbGVyIG1fcGZuVHhIYW5kbGVyOwpAQCAtMTQ1LDExICsxNDUsMTEgQEAKIAogdEVwbEtlcm5lbCBFZHJ2U2h1dGRvd24odm9pZCk7CiAKLXRFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCk7Ci10RXBsS2VybmVsIEVkcnZVbmRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCk7Cit0RXBsS2VybmVsIEVkcnZEZWZpbmVSeE1hY0FkZHJFbnRyeSh1OCAqIHBiTWFjQWRkcl9wKTsKK3RFcGxLZXJuZWwgRWRydlVuZGVmaW5lUnhNYWNBZGRyRW50cnkodTggKiBwYk1hY0FkZHJfcCk7CiAKLS8vdEVwbEtlcm5lbCBFZHJ2RGVmaW5lVW5pY2FzdEVudHJ5ICAgICAoQllURSAqIHBiVUNFbnRyeV9wKTsKLS8vdEVwbEtlcm5lbCBFZHJ2VW5kZmluZVVuaWNhc3RFbnRyeSAgICAoQllURSAqIHBiVUNFbnRyeV9wKTsKKy8vdEVwbEtlcm5lbCBFZHJ2RGVmaW5lVW5pY2FzdEVudHJ5ICAgICAodTggKiBwYlVDRW50cnlfcCk7CisvL3RFcGxLZXJuZWwgRWRydlVuZGZpbmVVbmljYXN0RW50cnkgICAgKHU4ICogcGJVQ0VudHJ5X3ApOwogCiB0RXBsS2VybmVsIEVkcnZBbGxvY1R4TXNnQnVmZmVyKHRFZHJ2VHhCdWZmZXIgKiBwQnVmZmVyX3ApOwogdEVwbEtlcm5lbCBFZHJ2UmVsZWFzZVR4TXNnQnVmZmVyKHRFZHJ2VHhCdWZmZXIgKiBwQnVmZmVyX3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9nbG9iYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZ2xvYmFsLmgKaW5kZXggZmUxNjcxNi4uOGM1MmQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9nbG9iYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2dsb2JhbC5oCkBAIC0yMiwxMjYxICsyMiwyMSBAQAogI2lmbmRlZiBfR0xPQkFMX0hfCiAjZGVmaW5lIF9HTE9CQUxfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBlbGVtZW50cyBvZiBkZWZpbmVzIGZvciBkZXZlbG9wbWVudCBzeXN0ZW0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIHRoZXNlIGRlZmluZXMgYXJlIG5lY2Vzc2FyeSB0byBjaGVjayBzb21lIG9mIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtCi0jZGVmaW5lIF9ERVZfQklHRU5EXyAgICAgICAgICAgIDB4ODAwMDAwMDBMCS8vIGJpZyBlbmRpYW4gKG1vdG9yb2xsYSBmb3JtYXQpCi0jZGVmaW5lIF9ERVZfQUxJR05NRU5UXzRfICAgICAgIDB4MDA0MDAwMDBMCS8vICAgICAgICAgICAgICAgICAgdGhlIENQVSBuZWVkcyBhbGlnbm1lbnQgb2YgNCBieXRlcwotI2RlZmluZSBfREVWX09OTFlfSU5UX01BSU5fICAgICAweDAwMDA0MDAwTAkvLyAgICAgICAgICAgICAgICAgIHRoZSBjb21waWxlciBuZWVkcyAiaW50IG1haW4oaW50KSIgaW5zdGVhZCBvZiAidm9pZCBtYWluKHZvaWQpIgotI2RlZmluZSBfREVWX0NPTU1BX0VYVF8gICAgICAgICAweDAwMDAyMDAwTAkvLyAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb2YgbGFzdCBjb21tYSBpbiBzdHJ1Y3QgcHJlZGVmaW5pdGlvbgotI2RlZmluZSBfREVWXzY0QklUX1NVUFBPUlRfICAgICAweDAwMDAxMDAwTAkvLyAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb2YgNjQgYml0IG9wZXJhdGlvbnMKLSNkZWZpbmUgX0RFVl9CSVQ2NF8gICAgICAgICAgICAgMHgwMDAwMDQwMEwJLy8gY291bnQgb2YgYml0czogICA2NCBiaXQKLSNkZWZpbmUgX0RFVl9CSVQzMl8gICAgICAgICAgICAgMHgwMDAwMDMwMEwJLy8gICAgICAgICAgICAgICAgICAzMiBiaXQKLSNkZWZpbmUgX0RFVl9CSVQxNl8gICAgICAgICAgICAgMHgwMDAwMDIwMEwJLy8gICAgICAgICAgICAgICAgICAxNiBiaXQKLSNkZWZpbmUgX0RFVl9CSVQ4XyAgICAgICAgICAgICAgMHgwMDAwMDEwMEwJLy8gICAgICAgICAgICAgICAgICA4IGJpdAotI2RlZmluZSBfREVWX1JWQ1RfQVJNXyAgICAgICAgICAweDAwMDAwMDFDTAkvLyAgICAgICAgICAgICAgICAgIFJlYWxWaWV3IEFSTQotI2RlZmluZSBfREVWX1JFTkVTQVNNMzJDICAgICAgICAweDAwMDAwMDFCTAkvLyBjb21waWxlciBmcm9tOiAgIFJlbmVzYXMKLSNkZWZpbmUgX0RFVl9HTlVDX01JUFMyXyAgICAgICAgMHgwMDAwMDAxQUwJLy8gICAgICAgICAgICAgICAgICBHTlUgZm9yIE1JUFMyCi0jZGVmaW5lIF9ERVZfTVBMQUJfQzMwXyAgICAgICAgIDB4MDAwMDAwMTlMCS8vICAgICAgICAgICAgICAgICAgTVBMQUIgQzMwIGZvciBNaWNyb2NoaXAgZHNQSUMzM0Ygc2VyaWVzCi0jZGVmaW5lIF9ERVZfR05VQ19UQ18gICAgICAgICAgIDB4MDAwMDAwMThMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBJbmZpbmVvbiBUcmlDb3JlCi0jZGVmaW5lIF9ERVZfR05VQ19YODZfICAgICAgICAgIDB4MDAwMDAwMTdMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBJMzg2Ci0jZGVmaW5lIF9ERVZfSUFSX0FSTV8gICAgICAgICAgIDB4MDAwMDAwMTZMCS8vICAgICAgICAgICAgICAgICAgQVJNIElBUiBDL0MrKyBDb21waWxlcgotI2RlZmluZSBfREVWX1BBUkFER01fWDg2ICAgICAgICAweDAwMDAwMDE1TAkvLyAgICAgICAgICAgICAgICAgIFBhcmFkaWdtIEMvQysrIGZvciBCZWNrIDF4MwotI2RlZmluZSBfREVWX0dOVUNfQ0ZfICAgICAgICAgICAweDAwMDAwMDE0TAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgQ29sZGZpcmUKLSNkZWZpbmUgX0RFVl9LRUlMX0FSTV8gICAgICAgICAgMHgwMDAwMDAxM0wJLy8gICAgICAgICAgICAgICAgICBLZWlsIEFSTQotI2RlZmluZSBfREVWX01TRVZDXyAgICAgICAgICAgICAweDAwMDAwMDEyTAkvLyAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBlbWJlZGRlZCBWaXN1YWwgQy9DKysKLSNkZWZpbmUgX0RFVl9ISUdIVEVDX0dOVUNfWDg2XyAgMHgwMDAwMDAxMUwJLy8gICAgICAgICAgICAgICAgICBIaWdodGVjIGVsZjM4NiBnY2MKLSNkZWZpbmUgX0RFVl9NU1ZDX1JUWF8gICAgICAgICAgMHgwMDAwMDAxMEwJLy8gICAgICAgICAgICAgICAgICBWQzYwMCArIFJUWAotI2RlZmluZSBfREVWX01TVkNfVjFfNV8gICAgICAgICAweDAwMDAwMDBGTAkvLyAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysgVjEuNQotI2RlZmluZSBfREVWX0dOVUNfQVJNN18gICAgICAgICAweDAwMDAwMDBFTAkvLyAgICAgICAgICAgICAgICAgIEdOVSBDb21waWxlciBnY2MgZm9yIEFSTTcKLSNkZWZpbmUgX0RFVl9NRVRST1dFUktTX0NXXyAgICAgMHgwMDAwMDAwREwJLy8gICAgICAgICAgICAgICAgICBNZXRyb3dlcmtzIENvZGUgV2FycmlvcgotI2RlZmluZSBfREVWX01JVFNVQklTSElNMTZDXyAgICAweDAwMDAwMDBDTAkvL2NvbXBpbGVyIGZyb206ICAgIE1pdHN1YmlzaGkKLSNkZWZpbmUgX0RFVl9HTlVDX0MxNlhfICAgICAgICAgMHgwMDAwMDAwQkwJLy8gICAgICAgICAgICAgICAgICBHTlUgQ29tcGlsZXIgZ2NjMTY2IGZvciBJbmZpbmVvbiBDMTZ4Ci0jZGVmaW5lIF9ERVZfTElOVVhfR0NDXyAgICAgICAgIDB4MDAwMDAwMEFMCS8vICAgICAgICAgICAgICAgICAgTGludXggR05VIENvbXBpbGVyIGdjYwotI2RlZmluZSBfREVWX0dOVUNfTVBDNVg1ICAgICAgICAweDAwMDAwMDA5TAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgTW90b3JvbGEgUFBDNXg1Ci0jZGVmaW5lIF9ERVZfVEFTS0lOR00xNkNfICAgICAgIDB4MDAwMDAwMDhMCS8vICAgICAgICAgICAgICAgICAgVGFza2luZyBmb3IgTWl0c3ViaXNoaSBNMTZDCi0jZGVmaW5lIF9ERVZfRlVKSVRTVV8gICAgICAgICAgIDB4MDAwMDAwMDdMCS8vICAgICAgICAgICAgICAgICAgRnVqaXRzdQotI2RlZmluZSBfREVWX1RBU0tJTkc4XyAgICAgICAgICAweDAwMDAwMDA2TAkvLyAgICAgICAgICAgICAgICAgIFRhc2tpbmcgODA1MQotI2RlZmluZSBfREVWX1RBU0tJTkcxNl8gICAgICAgICAweDAwMDAwMDA1TAkvLyAgICAgICAgICAgICAgICAgIFRhc2tpbmcgMTY2Ci0jZGVmaW5lIF9ERVZfS0VJTDhfICAgICAgICAgICAgIDB4MDAwMDAwMDRMCS8vICAgICAgICAgICAgICAgICAgS2VpbCBDNTEKLSNkZWZpbmUgX0RFVl9LRUlMMTZfICAgICAgICAgICAgMHgwMDAwMDAwM0wJLy8gICAgICAgICAgICAgICAgICBLZWlsIEMxNjYKLSNkZWZpbmUgX0RFVl9CT1JMQU5EQ18gICAgICAgICAgMHgwMDAwMDAwMkwJLy8gICAgICAgICAgICAgICAgICBCb3JsYW5kIEMvQysrCi0jZGVmaW5lIF9ERVZfTVNWQzE2XyAgICAgICAgICAgIDB4MDAwMDAwMDFMCS8vICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKwotI2RlZmluZSBfREVWX01TVkMzMl8gICAgICAgICAgICAweDAwMDAwMDAwTAkvLyAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysKLQotLy8gdGhlc2UgZGVmaW5lcyBjYW4gYmUgdXNlZCB0byBtYXNrIHByZXZpb3VzIGVsZW1lbnRzCi0jZGVmaW5lIF9ERVZfTUFTS19DT01QSUxFUiAgICAgIDB4MDAwMDAwRkZMCi0jZGVmaW5lIF9ERVZfTUFTS19CSVRDT1VOVCAgICAgIDB4MDAwMDBGMDBMCi0jZGVmaW5lIF9ERVZfTUFTS19BRERTVVBQT1JUICAgIDB4MDAwMEYwMDBMCi0jZGVmaW5lIF9ERVZfTUFTS19BTElHTk1FTlQgICAgIDB4MDBGMDAwMDBMCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5lcyBmb3IgZGV2ZWxvcG1lbnQgc3lzdGVtIChERVZfU1lTVEVNKSBpbmNsdWRpbmcgcHJldmlvdXMgZWxlbWVudHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgX0RFVl9XSU4xNl8gICAgICAgICAgICAgKF9ERVZfQklUMTZfIHwgX0RFVl9NU1ZDMTZfICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBfREVWX1dJTjMyXyAgICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkMzMl8gICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX01TVkNfRE9TXyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkNfVjFfNV8gICAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfQk9STEFORF9ET1NfICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfQk9STEFORENfICAgICAgICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfS0VJTF9DNTFYXyAgICAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfS0VJTDhfICAgICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfQ09NTUFfRVhUXykJLy8gYXQgbGVhc3QgQzUxIHZlcnNpb24gNy4wNSBzdXBwb3J0cyBjb21tYSBleHRlbnNpb24KLSNkZWZpbmUgX0RFVl9LRUlMX0MxNlhfICAgICAgICAgKF9ERVZfQklUMTZfIHwgX0RFVl9LRUlMMTZfICAgICAgICAgICAgICAgICAgIHwgX0RFVl9DT01NQV9FWFRfKQkvLyBhdCBsZWFzdCBDMTY2IHZlcnNpb24gNS4wMyBzdXBwb3J0cyBjb21tYSBleHRlbnNpb24KLSNkZWZpbmUgX0RFVl9UQVNLSU5HX0M1MVhfICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9UQVNLSU5HOF8gIHwgX0RFVl9CSUdFTkRfKQotI2RlZmluZSBfREVWX1RBU0tJTkdfQzE2WF8gICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1RBU0tJTkcxNl8gICAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfRlVKSVRTVV9GNTkwXyAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfRlVKSVRTVV8gICAgICAgICAgICAgICAgICB8IF9ERVZfQ09NTUFfRVhUXykJLy8gc29mdHVuZSBpcyBub3QgYWJsZSB0byBzdXBwb3J0IDY0IGJpdCB2YXJpYWJsZXMgUVdPUkQgISEhCi0vL2Yuai4yOS4wNC4wMyBNMTZDIGthbm4gZWZmZWt0aXYgbWl0IEJ5dGVzIHVtZ2VoZW4KLS8vI2RlZmluZSBfREVWX1RBU0tJTkdfTTE2Q18gICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1RBU0tJTkdNMTZDXyAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfVEFTS0lOR19NMTZDXyAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfVEFTS0lOR00xNkNfICAgICAgICAgICAgICkKLSNkZWZpbmUgX0RFVl9NSVRTVUJJU0hJX00xNkNfICAgKF9ERVZfQklUOF8gIHwgX0RFVl9NSVRTVUJJU0hJTTE2Q18gICAgICAgICAgKQotI2RlZmluZSBfREVWX0dOVV9NUEM1WDVfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfTVBDNVg1fCBfREVWX0JJR0VORF8gfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0xJTlVYXyAgICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0xJTlVYX0dDQ18gICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9DMTZYXyAgICAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX0dOVUNfQzE2WF8gICAgICAgICAgICAgICApCS8vfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfTUNXX01QQzVYNV8gICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTUVUUk9XRVJLU19DV18gICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfR05VX0FSTTdfICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfR05VQ19BUk03XyAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQotI2RlZmluZSBfREVWX1dJTjMyX1JUWF8gICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkNfUlRYXyAgICAgICAgICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0hJR0hURUNfWDg2XyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0hJR0hURUNfR05VQ19YODZfICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX1dJTl9DRV8gICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TRVZDXyAgICAgICAgICAgICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0tFSUxfQ0FSTV8gICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0tFSUxfQVJNXyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0lBUl9DQVJNXyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0lBUl9BUk1fICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX1JWQ1RfQ0FSTV8gICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX1JWQ1RfQVJNXyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXykKLSNkZWZpbmUgX0RFVl9NQ1dfTUNGNVhYWF8gICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9NRVRST1dFUktTX0NXXyAgICAgICAgICAgKQkvL3wgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKLSNkZWZpbmUgX0RFVl9HTlVfQ0Y1MjgyXyAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX0NGXyAgIHwgX0RFVl9CSUdFTkRfKQotI2RlZmluZSBfREVWX1BBUl9CRUNLMVgzXyAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1BBUkFER01fWDg2KQotI2RlZmluZSBfREVWX0dOVV9DRjU0OFhfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfQ0ZfICAgfCBfREVWX0JJR0VORF8gfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9JMzg2XyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfWDg2XyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXykKLSNkZWZpbmUgX0RFVl9HTlVfVFJJQ09SRV8gICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX1RDXyAgICAgICAgICAgICAgICAgIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXyB8IF9ERVZfT05MWV9JTlRfTUFJTl8gfCBfREVWX0FMSUdOTUVOVF80XykKLSNkZWZpbmUgX0RFVl9NUExBQl9EU1BJQzMzRl8gICAgKF9ERVZfQklUMTZfIHwgX0RFVl9NUExBQl9DMzBfICAgICAgICAgICAgICAgKQkvL3wgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9NSVBTRUxfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfTUlQUzJfICAgICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQotCi0jZGVmaW5lIF9ERVZfUkVORVNBU19NMzJDXyAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfUkVORVNBU00zMkMpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgdXNlZnVsbCBtYWNyb3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgQ0hFQ0tfSUZfT05MWV9JTlRfTUFJTigpICAgIChERVZfU1lTVEVNICYgX0RFVl9PTkxZX0lOVF9NQUlOXykKLSNkZWZpbmUgQ0hFQ0tfTUVNT1JZX0FMSU5NRU5UKCkgICAgIChERVZfU1lTVEVNICYgX0RFVl9NQVNLX0FMSUdOTUVOVCkKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbmVzIGZvciB0YXJnZXQgc3lzdGVtIChUQVJHRVRfU1lTVEVNKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBfRE9TXyAgICAgICAgICAgICAgKDE2ICsgMHgxMDAwMCkKLSNkZWZpbmUgX1dJTjE2XyAgICAgICAgICAgICAxNgotI2RlZmluZSBfV0lOMzJfICAgICAgICAgICAgIDMyCi0jZGVmaW5lIF9XSU5DRV8gICAgICAgICAgICAoMzIgKyAweDIwMDAwKQotI2RlZmluZSBfTk9fT1NfICAgICAgICAgICAgICAwCi0jZGVmaW5lIF9MSU5VWF8gICAgICAgICAgICAgIDEKLSNkZWZpbmUgX1BYUk9TXyAgICAgICAgICAgICAgMgotI2RlZmluZSBfRUNPU1BST18gICAgICAgICAgICAzCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIGZ1bmN0aW9uIGlubGluaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIElOTElORV9GVU5DVElPTgkJLy8gZW1wdHkgZGVmaW5lCi0jdW5kZWYgIElOTElORV9FTkFCTEVECQkvLyBkaXNhYmxlIGFjdHVhbCBpbmxpbmluZyBvZiBmdW5jdGlvbnMKLSN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OX0RFRgkvLyBkaXNhYmxlIGlubGluaW5nIGZvciBhbGwgY29tcGlsZXJzIHBlciBkZWZhdWx0Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQzUxCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZkZWYgIF9fQzUxX18KLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9LRUlMX0M1MVhfCi0KLSNwcmFnbWEgREVCVUcgT0JKRUNURVhURU5ECi0jcHJhZ21hIFdBUk5JTkdMRVZFTCgyKQkJLy8gbWF4aW11bSB3YXJuaW5nIGxldmVsCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIGlkYXRhCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICB4ZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTSAgICAgICAgICAgICBjb2RlCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgICAgICAgICAgeGRhdGEJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UgICAgICAgICAgIGxhcmdlCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTSAgICAgICAgICAgICB4ZGF0YQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVCAgICAgICByZWVudHJhbnQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgR05VIENvbXBpbGVyIGZvciBJbmZpbmVvbiBDMTZ4Ci0vLyAgLSBpdCBoYXZlIHRvIGJlIGJlZm9yIEtlaWwgKGl0IGhhcyBfX0MxNjZfXyB0b28pCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fR05VQ19fKSAmJiBkZWZpbmVkIChfX0MxNjZfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9HTlVfQzE2WF8KLQotLy8gICAgI2RlZmluZSBORUFSICAgICAgICAgICAgaWRhdGEgICAgICAgLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLS8vICAgICNkZWZpbmUgRkFSICAgICAgICAgICAgIHhodWdlICAgICAgIC8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBodWdlCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0vLyAgICAjZGVmaW5lIEhXQUNDICAgICAgICAgICBzZGF0YSAgICAgICAvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBIV0FDQyAgICAgICAgICAgaHVnZQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotLy8gICAgI2RlZmluZSBHRU5FUklDICAgICAgICAgeGh1Z2UgICAgICAgLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLSNkZWZpbmUgR0VORVJJQyAgICAgICAgIGh1Z2UJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotCi0jZGVmaW5lIEFTU0VSVChwKSAgXAotICAgICAgICAgICAgaWYgKHApICAgICAgICAgXAotICAgICAgICAgICAgeyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDsgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgXAotICAgICAgICAgICAgeyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIFBSSU5URjAoIkFzc2VydCBmYWlsZWQ6ICIgI3AgIiAoZmlsZSAlcyBsaW5lICVkKVxuIiwgX19GSUxFX18sIChpbnQpIF9fTElORV9fICk7IFwKLSAgICAgICAgICAgICAgICB3aGlsZSAoMSk7IFwKLSAgICAgICAgICAgIH0KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChwKQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQzE2NgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0MxNjZfXykJLy8gMjQuMDEuMjAwNSByLmQuOiBLZWlsIEFSTTcgbmVlZHMgZGlyZWN0aXZlICdkZWZpbmVkJwotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0tFSUxfQzE2WF8KLQotI3ByYWdtYSBDT0RFCi0jcHJhZ21hIE1PRDE2NwotI3ByYWdtYSBOT0lOSVQKLSNwcmFnbWEgREVCVUcKLSNwcmFnbWEgV0FSTklOR0xFVkVMKDMpCQkvLyBtYXhpbXVtIHdhcm5pbmcgbGV2ZWwKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gNDcJLy8gd2FybmluZyA8dW5yZWZlcmVuY2VkIHBhcmFtZXRlcj4gPSBPRkYKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMzgJLy8gd2FybmluZyA8ZW1wdHkgdHJhbnNsYXRpb24gdW5pdD4gPSBPRkYKLS8vICAjcHJhZ21hIFdBUk5JTkcgRElTQUJMRSA9IDEwMiAgICAgICAvLyB3YXJuaW5nIDxkaWZmZXJlbnQgY29uc3Qvdm9sYXRpbGUgcXVhbGlmaWVycz4gPSBPRkYKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMTc0CS8vIHdhcm5pbmcgPHVucmVmZXJlbmNlZCAnc3RhdGljJyBmdW5jdGlvbj4gPSBPRkYKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMTgzCS8vIHdhcm5pbmcgPGRlYWQgYXNzaWduZW1lbnQgZWxpbWluYXRlZD4gPSBPRkYKLQotI2RlZmluZSBORUFSICAgICAgICAgICAgaWRhdGEJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIHhodWdlCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0vLyAgICAjZGVmaW5lIEhXQUNDICAgICAgICAgICBzZGF0YSAgICAgICAvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBIV0FDQyAgICAgICAgICAgaHVnZQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDICAgICAgICAgeGh1Z2UJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIE1QTEFCIEMzMCBmb3IgZHNQSUMzM0Ygc2VyaWVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fQzMwX18pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTVBMQUJfRFNQSUMzM0ZfCi0KLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotLy8gICAgI2lmbmRlZiBRV09SRAotLy8gICAgICAgICNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0vLyAgICAjZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBLZWlsIEFSTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0NBX18pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfS0VJTF9DQVJNXwotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBSZWFsVmlldyBBUk0gY29tcGlsYXRpb24gdG9vbHMgKHByb3ZpZGVkIGJ5IHJlY2VudCBLZWlsIE1pY3JvY29udHJvbGxlciBEZXZlbG9wbWVudCBLaXRzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0FSTUNDX1ZFUlNJT04pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfUlZDVF9DQVJNXwotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgQVNTRVJUKGV4cHIpICAgIGlmICghKGV4cHIpKSB7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFDRTAgKCJBc3NlcnRpb24gZmFpbGVkOiAiICNleHByICk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSk7fQotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGV4cHIpCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBBUk0gSUFSIEMgQ29tcGlsZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiAgZGVmaW5lZCAoX19JQ0NBUk1fXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9JQVJfQ0FSTV8KLQotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIFFXT1JECi0jZGVmaW5lIFFXT1JEIGxvbmcgbG9uZwotI2VuZGlmCi0KLSAgICAvLyBXb3JrYXJvdW5kOgotICAgIC8vIElmIHdlIHVzZSBJQVIgYW5kIHdhbnQgdG8gZGVidWcgYnV0IGRvbid0IHdhbnQgdG8gdXNlIEMtU3B5IERlYnVnZ2VyCi0gICAgLy8gYXNzZXJ0KCkgZG9lc24ndCB3b3JrIGluIGRlYnVnIG1vZGUgYmVjYXVzZSBpdCBuZWVkcyBzdXBwb3J0IGZvciBGSUxFIGRlc2NyaXB0b3JzCi0gICAgLy8gKF9ETElCX0ZJTEVfREVTQ1JJUFRPUiA9PSAxKS4KLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIEFTU0VSVChleHByKSAgICBpZiAoIShleHByKSkge1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UwICgiQXNzZXJ0aW9uIGZhaWxlZDogIiAjZXhwciApO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpO30KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChleHByKQotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0vLyAgICAgICAgI2RlZmluZSBUUkFDRSAgUFJJTlRGNAotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIFRhc2tpbmcgODA1MQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2VsaWYgZGVmaW5lZCAoX0NDNTEpCi0KLSNpbmNsdWRlIDxjYzUxLmg+Ci0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfVEFTS0lOR19DNTFYXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBfZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIgICAgICAgICAgICAgX3hkYXQJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAgICAgICAgIF94ZGF0CS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNICAgICAgICAgICAgIF94ZGF0CS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UICAgICAgIF9yZWVudHJhbnQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgVGFza2luZyBDMTY3Q1IgYW5kIEMxNjRDSQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2VsaWYgZGVmaW5lZCAoX0MxNjYpCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfVEFTS0lOR19DMTZYXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSAgICAvLyBTdGRpby5oIGhhcyB0byBiZSBhbHdheSBpbmNsdWRlZCBoZXJlLiBJZiBwcmludGYoKSBpcyB1c2VkIHN0ZGlvLmggZGVmaW5lcyBOVUxMCi0gICAgLy8gd2l0aG91dCBjaGVja2luZyBpZiBpdCBpcyBhbHJlYWR5IGluY2x1ZGVkLiBTbyBhbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcGlsaW5nLgotICAgIC8vIChyLmQuKQotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBGVUpJVFNVIEZGTUMtMTZMWCBNQjkwNTkwCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyNlbGlmIChkZWZpbmVkIChGNTkwKSB8fCBkZWZpbmVkIChGNTQzKSB8fCBkZWZpbmVkIChGNTk4KSB8fCBkZWZpbmVkIChGNDk1KSB8fCBkZWZpbmVkIChGMzUwKSkKLSNlbGlmIGRlZmluZWQoX19DT01QSUxFUl9GQ0M5MDdfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9GVUpJVFNVX0Y1OTBfCi0KLSNkZWZpbmUgTkVBUiAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTSAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotICAgIC8vIHNvZnR1bmUgaXMgbm90IGFibGUgdG8gc3VwcG9ydCA2NCBiaXQgdmFyaWFibGVzIFFXT1JEICEhIQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBNaXRzdWJpc2hpIE0xNkMgZmFtaWx5IGZvciBUQVNLSU5HIENvbXBpbGVyIENNMTYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQgKF9DTTE2QykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9UQVNLSU5HX00xNkNfCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIF9uZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBfZmFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBfZmFycm9tCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAgICAgICAgIF9uZWFyCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMgICAgICAgICBfZmFyCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotCQkJCQkvLyBkbyB5b3UgdXNlIG1lbW9yeSBtb2RlbCBTTUFMTCwgdGhhbiB5b3UgaGF2ZSB0byBzZXQgX2ZhcgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotICAgIC8vIFN0ZGlvLmggaGFzIHRvIGJlIGFsd2F5IGluY2x1ZGVkIGhlcmUuIElmIHByaW50ZigpIGlzIHVzZWQgc3RkaW8uaCBkZWZpbmVzIE5VTEwKLSAgICAvLyB3aXRob3V0IGNoZWNraW5nIGlmIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQuIFNvIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21waWxpbmcuCi0gICAgLy8gKHIuZC4pCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIE1pdHN1YmlzaGkgTTE2QyBmYW1pbHkgZm9yIE1pdHN1YmlzaGkgQ29tcGlsZXIgTkMzMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG5hbWUgTkMzMCwgYW5kZXJlIEZvcm0gd2lsbCBkZXIgQ29tcGlsZXIgbmljaHQgISEKLSNlbGlmIGRlZmluZWQgKE5DMzApCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTUlUU1VCSVNISV9NMTZDXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAgICAgICAgIG5lYXIJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQyAgICAgICAgIGZhcgkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgUmVuZXNhcyBNMzJDIGZhbWlseSBmb3IgUmVuZXNhcyBDb21waWxlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIGRlZmluZWQgKE5DMzA4KQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1JFTkVTQVNfTTMyQ18KLQotI2RlZmluZSBORUFSICAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTSAgICAgICAgICAgICAgZmFyCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vICAgICNlcnJvciAoIlJFTkVTQVMgby5rLiIpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEFSTTcgZmFtaWx5IHdpdGggR05VIGNvbXBpbGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fTElOVVhfQVJNX0FSQ0hfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9HTlVfQVJNN18KLQotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCQkvLyBpLkEuIGR1cmNoIEhlcnIgS3VzY2hlbAotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgTW90b3JvbGEgUG93ZXJQQyBmYW1pbHkgNXg1ICg1NTUvNTY1KQotLy8gIGRlZmluaXRpb25zIExpbnV4LVBDCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKLQotI2lmIGRlZmluZWQgKExJTlVYKSB8fCBkZWZpbmVkIChsaW51eCkgfHwgZGVmaW5lZCAoX19saW51eF9fKQotI2RlZmluZSBMSU5VWF9TWVNURU0JCS8vIGRlZmluZSAnTElOVVhfU1lTVEVNJyB1bmlmb3JtIGZvciBhbGwgTGludXggYmFzZWQgc3lzdGVtcwotCS8vIHIuZC46IFdlIHdpbGwgbmVlZCBhbiBvdGhlciBzb2x1dGlvbiBoZXJlISBUaGVyZSBhcmUgdHdvIHNlY3Rpb25zIGhlcmUgd2hpY2ggZG8gY2hlY2sgdGhlIHByZXByb2MtZGVmaW5pdGlvbnM6Ci0JLy8gICAgIExJTlVYIGFuZCBfX2xpbnV4X18gLiBUaGUgZmlyc3Qgb25lIHdhcyBMaW51eCBmb3IgUEMsIHRoZSBzZWNvbmQgb25lIGlzIHRoaXMgc2VjdGlvbiBmb3IgZW1iZWRkZWQgTGludXggKE1DRjV4eHgpLgotCS8vICAgICBCdXQgTGludXggZm9yIFBDIGRvZXMgbm90IG5lZWQgdGhlIGRlZmluaXRpb25zIGZvciBlbWJlZGRlZCBMaW51eC4KLSNlbmRpZgotCi0gICAgLy8gR05VIEMgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gaW5saW5pbmcKLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OX0RFRiBleHRlcm4gaW5saW5lCi0KLSAgICAvLyB0byBhY3R1YWxseSBlbmFibGUgaW5saW5pbmcganVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgdGhyZWUgbGluZXMKLSAgICAvLyAjdW5kZWYgSU5MSU5FX0ZVTkNUSU9OCi0gICAgLy8gI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSAgICAvLyAjZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotCi0jaWZkZWYgUFhST1MKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfUFhST1NfCi0jaWZkZWYgX19pMzg2X18KLSN1bmRlZiBMSU5VWAkJCS8vIHRoaXMgZGVmaW5lIHNlZW1zIHRvIGJlIHNldCBmcm9tIGNvbXBpbGVyCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0hJR0hURUNfWDg2XwotI2VsaWYgZGVmaW5lZCAoX190cmljb3JlX18pCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9UUklDT1JFXwotI2Vsc2UgLy8gTVBDNXg1Ci0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9NUEM1WDVfCi0jZW5kaWYKLQotI2VsaWYgZGVmaW5lZCAoTElOVVgpIHx8IGRlZmluZWQgKF9fbGludXhfXykKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfTElOVVhfCS8vIExpbnV4IGRlZmluaXRpb24KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0xJTlVYXwotCi0jZWxpZiBkZWZpbmVkIChHTlVfQ0Y1MjgyKQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9DRjUyODJfCi0KLSNlbGlmIGRlZmluZWQgKEVDT1NQUk9fSTM4Nl9QRUFLX1BDSSkKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfRUNPU1BST18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9JMzg2XwotCi0jZWxpZiBkZWZpbmVkIChHTlVfQ0Y1NDhYKQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9DRjU0OFhfCi0jZWxzZQotI2Vycm9yICdFUlJPUjogREVWX1NZU1RFTSBub3QgZm91bmQhJwotI2VuZGlmCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nIGludAotI2VuZGlmCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfUFhST1NfKQotCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTSAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLQkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nIGludAotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotI2VuZGlmCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gR05VQyBmb3IgSTM4NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pIHx8IChUQVJHRVRfU1lTVEVNID09IF9FQ09TUFJPXykKLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLQkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2lmbmRlZiBORUFSCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZW5kaWYKLQotI2RlZmluZSBMQVJHRQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKIAotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2Vsc2UKICNkZWZpbmUgVFJBQ0UgIHByaW50awotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgogCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSB3aXRob3V0IE9TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX05PX09TXykKLQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLQkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2lmbmRlZiBORUFSCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZW5kaWYKLQotI2RlZmluZSBMQVJHRQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLS8vICAgICAgICAgICAgI2luY2x1ZGUgInh1YXJ0ZHJ2LmgiCi0vLyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLS8vICAgICAgICAgICAgI2RlZmluZSBUUkFDRSAgbXByaW50ZgotLy8gICAgICAgICAgICAjaWZuZGVmIFRSQUNFCi0vLyAgICAgICAgICAgICAgICAjZGVmaW5lIFRSQUNFIHRyYWNlCi0vLyAgICAgICAgICAgICAgICB2b2lkIHRyYWNlIChjaGFyICpmbXQsIC4uLik7Ci0vLyAgICAgICAgICAgICNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBNUEM1NjUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiBfX01XRVJLU19fCi0KLSNpZmRlZiBfX01DNjhLX18KLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNID0gX01DRjU0OFhfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX01DV19NQ0Y1WFhYXwotCi0jZWxzZQotI2RlZmluZSBUQVJHRVRfU1lTVEVNID0gX01QQzU2NV8KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTUNXX01QQzVYNV8KLSNlbmRpZgotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBCRUNLIDF4MwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIGRlZmluZWQgKF9fQk9STEFORENfXykgJiYgZGVmaW5lZCAoX19QQVJBRElHTV9fKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICAgICBfREVWX1BBUl9CRUNLMVgzXwotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJICAgICAvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0gICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgICAvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCSAgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jZGVmaW5lIE5FQVIgX19uZWFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIgIF9fZmFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgUEMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQgKF9fQk9STEFORENfXykKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbml0aW9uIHRhcmdldCBzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmZGVmIF9XSU4zMgotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyXwkvLyBXSU4zMiBkZWZpbml0aW9uCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1dJTjMyXwotI2Vsc2UKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9ET1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0JPUkxBTkRfRE9TXwotI2VuZGlmCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gV0lOMzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQyBfX3N0ZGNhbGwKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNpbmNsdWRlIDxzdGRpby5oPgotI2RlZmluZSBUUkFDRSBwcmludGYKLSNlbmRpZgotI2VuZGlmCi0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9ET1NfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotI2RlZmluZSBORUFSIG5lYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgZmFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbGlmIChfTVNDX1ZFUiA9PSA4MDApCQkvLyBQQyBNUyBWaXN1YWwgQy9DKysgZm9yIERPUyBhcHBsaWNhdGlvbnMKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX0RPU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTVNWQ19ET1NfCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDIG5lYXIJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotI2RlZmluZSBORUFSIG5lYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgZmFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlZmluaXRpb25zIGZvciBSVFggdW5kZXIgV0lOMzIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiAoZGVmaW5lZCAoVU5ERVJfUlRTUykgJiYgZGVmaW5lZCAoV0lOMzIpKQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyX1JUWF8KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfUlRYXwotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJICAgIC8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQyBfX3N0ZGNhbGwKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgUnRQcmludGYKLSNlbmRpZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZWZpbml0aW9ucyBmb3IgV2luQ0UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiBkZWZpbmVkIChfV0lOMzJfV0NFKQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgICAgICBfV0lOQ0VfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICAgICAgICAgIF9ERVZfV0lOX0NFXwotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJICAgIC8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNpZm5kZWYgUVdPUkQKLSAgICAgIC8vI2RlZmluZSBRV09SRCBsb25nIGxvbmcgaW50IC8vIE1TVkMgLk5FVCBjYW4gdXNlICJsb25nIGxvbmcgaW50IiB0b28gKGxpa2UgR05VKQotI2RlZmluZSBRV09SRCBfX2ludDY0Ci0jZW5kaWYKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDIF9fY2RlY2wKLQotI2lmZGVmIEFTU0VSVE1TRwotI3VuZGVmIEFTU0VSVE1TRwotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaWZuZGVmIFRSQUNFCi0jZGVmaW5lIFRSQUNFIHByaW50ZgotLy8gICAgICAgICAgICB2b2lkIHRyYWNlIChjaGFyICpmbXQsIC4uLik7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZWxzZSAvLyA9PT0+IFBDIE1TIFZpc3VhbCBDL0MrKwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfV0lOMzJfCS8vIFdJTjMyIGRlZmluaXRpb24KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfCi0jZWxzZQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjE2XwkvLyBXSU4xNiBkZWZpbml0aW9uCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1dJTjE2XwotI2VuZGlmCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gV0lOMTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMTZfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSIGZhcgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZW5kaWYKLQotI2RlZmluZSBMQVJHRQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMgX2ZhciBfcGFzY2FsIF9leHBvcnQKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgdHJhY2UKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQl2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIFdJTjMyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8vLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotI2lmbmRlZiBORUFSCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0jaWZuZGVmIEZBUgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotI2RlZmluZSBMQVJHRQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDIF9fc3RkY2FsbAotI2lmbmRlZiBRV09SRAotCSAgLy8jZGVmaW5lIFFXT1JEIGxvbmcgbG9uZyBpbnQgLy8gTVNWQyAuTkVUIGNhbiB1c2UgImxvbmcgbG9uZyBpbnQiIHRvbyAobGlrZSBHTlUpCi0jZGVmaW5lIFFXT1JEIF9faW50NjQKLSNlbmRpZgotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgdHJhY2UKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQl2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCS8vIE1TIFZpc3VhbCBDKysgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gaW5saW5pbmcKLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OX0RFRiBfX2ZvcmNlaW5saW5lCi0JLy8gdG8gYWN0dWFsbHkgZW5hYmxlIGlubGluaW5nIGp1c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHR3byBsaW5lcy8vICNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGLy8gI2RlZmluZSBJTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKLSNlbmRpZgotI2VuZGlmCQkJCS8vID09PT4gUEMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8gIGRlZmluaXRpb25zIG9mIGJhc2ljIHR5cGVzLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZm5kZWYgX1dJTkRFRl8JCS8vIGRlZmluZWQgaW4gV0lOREVGLkgsIGluY2x1ZGVkIGJ5IDx3aW5kb3dzLmg+Ci0gICAgLy8gLS0tIGFyaXRobWV0aWMgdHlwZXMgLS0tCi0jaWZuZGVmIFNIT1JUCi0jZGVmaW5lIFNIT1JUIHNob3J0IGludAotI2VuZGlmCi0jaWZuZGVmIFVTSE9SVAotI2RlZmluZSBVU0hPUlQgdW5zaWduZWQgc2hvcnQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgSU5UCi0jZGVmaW5lIElOVCBpbnQKLSNlbmRpZgotI2lmbmRlZiBVSU5UCi0jZGVmaW5lIFVJTlQgdW5zaWduZWQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgTE9ORwotI2RlZmluZSBMT05HIGxvbmcgaW50Ci0jZW5kaWYKLSNpZm5kZWYgVUxPTkcKLSNkZWZpbmUgVUxPTkcgdW5zaWduZWQgbG9uZyBpbnQKLSNlbmRpZgotICAgIC8vIC0tLSBsb2dpYyB0eXBlcyAtLS0KLSNpZm5kZWYgQllURQotI2RlZmluZSBCWVRFIHVuc2lnbmVkIGNoYXIKLSNlbmRpZgotI2lmbmRlZiBXT1JECi0jZGVmaW5lIFdPUkQgdW5zaWduZWQgc2hvcnQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgRFdPUkQKLSNkZWZpbmUgRFdPUkQgdW5zaWduZWQgbG9uZyBpbnQKLSNlbmRpZgorLy8gLS0tIGxvZ2ljIHR5cGVzIC0tLQogI2lmbmRlZiBCT09MCiAjZGVmaW5lIEJPT0wgdW5zaWduZWQgY2hhcgogI2VuZGlmCi0gICAgLy8gLS0tIGFsaWFzIHR5cGVzIC0tLQorCisvLyAtLS0gYWxpYXMgdHlwZXMgLS0tCiAjaWZuZGVmIFRSVUUKICNkZWZpbmUgVFJVRSAgMHhGRgogI2VuZGlmCiAjaWZuZGVmIEZBTFNFCiAjZGVmaW5lIEZBTFNFIDB4MDAKICNlbmRpZgotI2lmbmRlZiBOVUxMCi0jZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCi0jZW5kaWYKLSNlbmRpZgogI2lmbmRlZiBfVElNRV9PRl9EQVlfREVGSU5FRF8KIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGludCBtX2R3TXM7CkBAIC0xMzU5LDE1ICsxMTksOCBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmbmRlZiBBU1NFUlQKLSNpZiAhZGVmaW5lZCAoX19saW51eF9fKSAmJiAhZGVmaW5lZCAoX19LRVJORUxfXykKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZm5kZWYgQVNTRVJUCi0jZGVmaW5lIEFTU0VSVChwKSAgICBhc3NlcnQocCkKLSNlbmRpZgotI2Vsc2UKICNkZWZpbmUgQVNTRVJUKHApCiAjZW5kaWYKLSNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFNZUyBURUMgZXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsay5oCmluZGV4IDU4OGU4NzEuLmE5NzkyMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrLmgKQEAgLTc0LDE4ICs3NCwxMCBAQAogI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogdHlwZWRlZiB0RXBsS2VybmVsKCp0RXBsRGxsa0NiQXN5bmMpICh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9iZV9hYlNyY01hY1s2XTsKKwl1OCBtX2JlX2FiU3JjTWFjWzZdOwogCiB9IHRFcGxEbGxrSW5pdFBhcmFtOwogCkBAIC05NiwyMiArODgsMTggQEAKIAlzdHJ1Y3QgX3RFcGxEbGxrTm9kZUluZm8gKm1fcE5leHROb2RlSW5mbzsKIAlzdHJ1Y3QgX3RFZHJ2VHhCdWZmZXIgKm1fcFByZXFUeEJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsKLQlEV09SRCBtX2R3UHJlc1RpbWVvdXQ7CisJdTMyIG1fZHdQcmVzVGltZW91dDsKIAl1bnNpZ25lZCBsb25nIG1fdWxEbGxFcnJvckV2ZW50czsKIAl0RXBsTm10U3RhdGUgbV9ObXRTdGF0ZTsKLQlXT1JEIG1fd1ByZXNQYXlsb2FkTGltaXQ7Ci0JQllURSBtX2JlX2FiTWFjQWRkcls2XTsKLQlCWVRFIG1fYlNvYUZsYWcxOworCXUxNiBtX3dQcmVzUGF5bG9hZExpbWl0OworCXU4IG1fYmVfYWJNYWNBZGRyWzZdOworCXU4IG1fYlNvYUZsYWcxOwogCUJPT0wgbV9mU29mdERlbGV0ZTsJLy8gZGVsZXRlIG5vZGUgYWZ0ZXIgZXJyb3IgYW5kIGlnbm9yZSBlcnJvcgogCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBfdEVwbERsbGtOb2RlSW5mbyB0RXBsRGxsa05vZGVJbmZvOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9ETExLKSkgIT0gMCkKIAogdEVwbEtlcm5lbCBFcGxEbGxrQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKiBwSW5pdFBhcmFtX3ApOwpAQCAtMTU0LDcgKzE0Miw3IEBACiAKIHRFcGxLZXJuZWwgRXBsRGxsa1NvZnREZWxldGVOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAotdEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIEJZVEUgYlNvYUZsYWcxX3ApOwordEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKTsKIAogdEVwbEtlcm5lbCBFcGxEbGxrR2V0Rmlyc3ROb2RlSW5mbyh0RXBsRGxsa05vZGVJbmZvICoqIHBwTm9kZUluZm9fcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGtDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGtDYWwuaAppbmRleCA2YzRkYzdlLi5kZGVjMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrQ2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsa0NhbC5oCkBAIC03NCwxNCArNzQsNiBAQAogI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgbV91bEN1clR4RnJhbWVDb3VudEdlbjsKIAl1bnNpZ25lZCBsb25nIG1fdWxDdXJUeEZyYW1lQ291bnRObXQ7CkBAIC05MiwxMCArODQsNiBAQAogCiB9IHRFcGxEbGxrQ2FsU3RhdGlzdGljczsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfRExMSykpICE9IDApCiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbEFkZEluc3RhbmNlKHZvaWQpOwpAQCAtMTI0LDcgKzExMiw3IEBACiB0RXBsS2VybmVsIEVwbERsbGtDYWxBc3luY0NsZWFyUXVldWVzKHZvaWQpOwogCiB0RXBsS2VybmVsIEVwbERsbGtDYWxJc3N1ZVJlcXVlc3QodEVwbERsbFJlcVNlcnZpY2VJZCBTZXJ2aWNlX3AsCi0JCQkJICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgQllURSBiU29hRmxhZzFfcCk7CisJCQkJICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgdTggYlNvYUZsYWcxX3ApOwogCiB0RXBsS2VybmVsIEVwbERsbGtDYWxBc3luY0dldFNvYVJlcXVlc3QodEVwbERsbFJlcVNlcnZpY2VJZCAqIHBSZXFTZXJ2aWNlSWRfcCwKIAkJCQkJdW5zaWduZWQgaW50ICpwdWlOb2RlSWRfcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFcnJvckhhbmRsZXJrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFcnJvckhhbmRsZXJrLmgKaW5kZXggNGE2N2VmOC4uMTg1YjU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRXJyb3JIYW5kbGVyay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEVycm9ySGFuZGxlcmsuaApAQCAtNzMsMjggKzczLDE2IEBACiAKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAvLyBpbml0IGZ1bmN0aW9uCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrSW5pdCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCk7CiAKIC8vIGFkZCBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0FkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrQWRkSW5zdGFuY2Uodm9pZCk7CiAKIC8vIGRlbGV0ZSBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0RlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2Uodm9pZCk7CiAKIC8vIHByb2Nlc3NlcyBlcnJvciBldmVudHMKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEVycm9ySGFuZGxlcmtQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya1Byb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExfRVJST1JIQU5ETEVSS19IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRXZlbnRrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaAppbmRleCAxZDI1YWFhLi4wYzJhNjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaApAQCAtNzMsMzYgKzczLDI0IEBACiAKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAvLyBpbml0IGZ1bmN0aW9uCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwordEVwbEtlcm5lbCBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwogCiAvLyBhZGQgaW5zdGFuY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0FkZEluc3RhbmNlKHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwordEVwbEtlcm5lbCBFcGxFdmVudGtBZGRJbnN0YW5jZSh0RXBsU3luY0NiIGZwU3luY0NiKTsKIAogLy8gZGVsZXRlIGluc3RhbmNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnRrRGVsSW5zdGFuY2Uodm9pZCk7CiAKIC8vIEtlcm5lbHRocmVhZCB0aGF0IGRpc3BhdGNoZXMgZXZlbnRzIGluIGtlcm5lbHNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnRrUHJvY2Vzcyh0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAogLy8gcG9zdCBldmVudHMgZnJvbSBrZXJuZWxzcGFjZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrUG9zdCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbEV2ZW50a1Bvc3QodEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKIC8vIHBvc3QgZXJyb3JldmVudHMgZnJvbSBrZXJuZWxzcGFjZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrUG9zdEVycm9yKHRFcGxFdmVudFNvdXJjZSBFdmVudFNvdXJjZV9wLAotCQkJCSAgICAgdEVwbEtlcm5lbCBFcGxFcnJvcl9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpQXJnU2l6ZV9wLCB2b2lkICpwQXJnX3ApOwordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExfRVZFTlRLX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrLmgKaW5kZXggNTM0MDljYy4uNWRjOGEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsTm10ay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGsuaApAQCAtNzQsMzEgKzc0LDE2IEBACiAjaW5jbHVkZSAiLi4vRXBsTm10LmgiCiAjaW5jbHVkZSAiRXBsRXZlbnRrLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVEspKSAhPSAwKQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtJbml0KEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsTm10a0luaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7Cit0RXBsS2VybmVsIEVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICB0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMKLUVwbE5tdGtHZXRObXRTdGF0ZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7Cit0RXBsTm10U3RhdGUgRXBsTm10a0dldE5tdFN0YXRlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKIAogI2VuZGlmIC8vICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1USykpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGtDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGtDYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkZWFmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrQ2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgaW5jbHVkZSBmaWxlIGZvciBjb21tdW5pY2F0aW9uIGFic3RyYWN0aW9uIGxheWVyIG9mIHRoZQotICAgICAgICAgICAgICAgIE5NVC1LZXJuZWwtTW9kdWxlCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAgICAgICAkUkNTZmlsZTogRXBsTm10a0NhbC5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS4zICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgIEtFSUwgdVZpc2lvbiAyCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFJldmlzaW9uIEhpc3Rvcnk6Ci0KLSAgMjAwNi8wNi8xNiAtay50LjogICBzdGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgIkVwbE5tdGsuaCIKLQotI2lmbmRlZiBfRVBMTk1US0NBTF9IXwotI2RlZmluZSBfRVBMTk1US0NBTF9IXwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZW5kaWYgLy8gI2lmbmRlZiBfRVBMTk1US0NBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jkay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jkay5oCmluZGV4IGNmOWY1ODMuLjc4YzRkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE9iZGsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrLmgKQEAgLTY4LDEyOCArNjgsODggQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCiAjaWZuZGVmIF9FUExPQkRLX0hfCiAjZGVmaW5lIF9FUExPQkRLX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2V4dGVybiB1OCBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBnbG9iYWwgdmFyaWFibGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1leHRlcm4gQllURSBNRU0gYWJFcGxPYmRUcmFzaE9iamVjdF9nWzhdOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfT0JESykpICE9IDApCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJbml0KEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkgIHRFcGxPYmRJbml0UGFyYW0gTUVNICogcEluaXRQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkSW5pdChFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gdEVwbE9iZEluaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkQWRkSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgdEVwbE9iZEluaXRQYXJhbSBNRU0gKgotCQkJCQkJIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmREZWxldGVJbnN0YW5jZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCXVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplIFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgIHZvaWQgKnBTcmNEYXRhX3AsIHRFcGxPYmRTaXplIFNpemVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFJlYWRFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkgICAgICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkUmVhZEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgdm9pZCAqcERzdERhdGFfcCwgdEVwbE9iZFNpemUgKnBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsT2JkU2V0U3RvcmVMb2FkT2JqQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCSAgICAgIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApOwordEVwbEtlcm5lbCBFcGxPYmRTZXRTdG9yZUxvYWRPYmpDYWxsYmFjayhFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2sgZnBDYWxsYmFja19wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkQWNjZXNzT2RQYXJ0KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgIHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwKLQkJCQkJCSAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7Cit0RXBsS2VybmVsIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkgICAgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkRGVmaW5lVmFyKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB0RXBsVmFyUGFyYW0gTUVNICogcFZhclBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmREZWZpbmVWYXIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgKlBVQkxJQyBFcGxPYmRHZXRPYmplY3REYXRhUHRyKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKK3ZvaWQgKkVwbE9iZEdldE9iamVjdERhdGFQdHIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApOwordEVwbEtlcm5lbCBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkSW5pdFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICB0RXBsT2JkVHlwZSBUeXBlX3AsCi0JCQkJCSAgICB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwordm9pZCBFcGxPYmRJbml0VmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCXRFcGxPYmRUeXBlIFR5cGVfcCwgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZEdldERhdGFTaXplKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwordEVwbE9iZFNpemUgRXBsT2JkR2V0RGF0YVNpemUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB1bnNpZ25lZCBpbnQgUFVCTElDIEVwbE9iZEdldE5vZGVJZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSKTsKK3Vuc2lnbmVkIGludCBFcGxPYmRHZXROb2RlSWQoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNldE5vZGVJZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxPYmRTZXROb2RlSWQoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSBCT09MICogcGZFbnRyeU51bWVyaWNhbCk7Cit0RXBsS2VybmVsIEVwbE9iZElzTnVtZXJpY2FsKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsIEJPT0wgKnBmRW50cnlOdW1lcmljYWwpOwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJICAgICAgdEVwbE9iZFNpemUgU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB0RXBsT2JkU2l6ZSBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkR2V0QWNjZXNzVHlwZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB0RXBsT2JkQWNjZXNzICoKLQkJCQkJCSAgIHBBY2Nlc3NUeXBfcCk7Cit0RXBsS2VybmVsIEVwbE9iZEdldEFjY2Vzc1R5cGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKioKLQkJCQkJCSAgICBwcFZhckVudHJ5X3ApOwordEVwbEtlcm5lbCBFcGxPYmRTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKTsKIAogI2VuZGlmIC8vIGVuZCBvZiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX09CREspKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrQ2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNzNhOTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jka0NhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAoYykgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCwgRC0wNzk3MyBHcmVpeiwgQXVndXN0LUJlYmVsLVN0ci4gMjkKLSAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KLQotICBQcm9qZWN0OiAgICAgIG9wZW5QT1dFUkxJTksKLQotICBEZXNjcmlwdGlvbjogIGluY2x1ZGUgZmlsZSBmb3IgY29tbXVuaWNhdGlvbiBhYnN0cmFjdGlvbiBsYXllcgotICAgICAgICAgICAgICAgIGZvciB0aGUgRXBsLU9iZC1LZXJuZWxzcGFjZS1Nb2R1bAotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbE9iZGtDYWwuaCx2ICQKLQotICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCi0KLSAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuNCAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCi0KLSAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCi0KLSAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICAgICAgR0NDIFYzLjQKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgUmV2aXNpb24gSGlzdG9yeToKLQotICAyMDA2LzA2LzE5IGsudC46ICAgc3RhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICIuLi9FcGxPYmQuaCIKLQotI2lmbmRlZiBfRVBMT0JES0NBTF9IXwotI2RlZmluZSBfRVBMT0JES0NBTF9IXwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZW5kaWYgLy8gI2lmbmRlZiBfRVBMT0JES0NBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRvay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRvay5oCmluZGV4IGI1YjE4ZjQuLjI0YmZjM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRvay5oCkBAIC03NSwxOCArNzUsNiBAQAogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIC8vIHByb2Nlc3MgZXZlbnRzIGZyb20gcXVldWUgKFBET3MvZnJhbWVzIGFuZCBTb0EgZm9yIHN5bmNocm9uaXphdGlvbikKIHRFcGxLZXJuZWwgRXBsUGRva1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rQ2FsLmgKaW5kZXggNmExODNlYi4uOGEzMWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRva0NhbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFBkb2tDYWwuaApAQCAtNzIsMTkgKzcyLDYgQEAKICNkZWZpbmUgX0VQTF9QRE9LQ0FMX0hfCiAKICNpbmNsdWRlICIuLi9FcGxJbmMuaCIKLS8vI2luY2x1ZGUgIkVwbFBkby5oIgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB0RXBsS2VybmVsIEVwbFBkb2tDYWxBZGRJbnN0YW5jZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJIaWdoUmVzay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJIaWdoUmVzay5oCmluZGV4IGQ1ZDA0NmQuLmEyMTI0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVySGlnaFJlc2suaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxUaW1lckhpZ2hSZXNrLmgKQEAgLTY4LDQyICs2OCwyOSBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsVGltZXIuaCIKLQogI2lmbmRlZiBfRVBMVElNRVJISUdIUkVTS19IXwogI2RlZmluZSBfRVBMVElNRVJISUdIUkVTS19IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza0luaXQodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrQWRkSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tBZGRJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza1NldFRpbWVyTnModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCisJCQkJICAgICAgdEVwbFRpbWVya0NhbGxiYWNrIHBmbkNhbGxiYWNrX3AsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bEFyZ3VtZW50X3AsCisJCQkJICAgICAgQk9PTCBmQ29udGludW91c2x5X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrRGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tNb2RpZnlUaW1lck5zKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3AsCisJCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCisJCQkJCSB0RXBsVGltZXJrQ2FsbGJhY2sgcGZuQ2FsbGJhY2tfcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdWxBcmd1bWVudF9wLAorCQkJCQkgQk9PTCBmQ29udGludW91c2x5X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrU2V0VGltZXJOcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCi0JCQkJCSAgICAgdEVwbFRpbWVya0NhbGxiYWNrIHBmbkNhbGxiYWNrX3AsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyB1bEFyZ3VtZW50X3AsCi0JCQkJCSAgICAgQk9PTCBmQ29udGludW91c2x5X3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrTW9kaWZ5VGltZXJOcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGxUaW1lTnNfcCwKLQkJCQkJCXRFcGxUaW1lcmtDYWxsYmFjawotCQkJCQkJcGZuQ2FsbGJhY2tfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgdWxBcmd1bWVudF9wLAotCQkJCQkJQk9PTCBmQ29udGludW91c2x5X3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApOwordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExUSU1FUkhJR0hSRVNLX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxUaW1lcmsuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oCmluZGV4IDkxNjBlNzIuLjQ3YzVmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oCkBAIC02OCwxOSArNjgsMTYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbFRpbWVyLmgiCi0jaW5jbHVkZSAiLi4vdXNlci9FcGxFdmVudHUuaCIKLQogI2lmbmRlZiBfRVBMVElNRVJLX0hfCiAjZGVmaW5lIF9FUExUSU1FUktfSF8KIAorI2luY2x1ZGUgIi4uL0VwbFRpbWVyLmgiCisjaW5jbHVkZSAiLi4vdXNlci9FcGxFdmVudHUuaCIKKwogI2lmIEVQTF9USU1FUl9VU0VfVVNFUiAhPSBGQUxTRQogI2luY2x1ZGUgIi4uL3VzZXIvRXBsVGltZXJ1LmgiCiAjZW5kaWYKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBFUExfVElNRVJfVVNFX1VTRVIgIT0gRkFMU0UKICNkZWZpbmUgRXBsVGltZXJrSW5pdCAgICAgICAgICAgRXBsVGltZXJ1SW5pdApAQCAtOTEsMjggKzg4LDIxIEBACiAjZGVmaW5lIEVwbFRpbWVya0RlbGV0ZVRpbWVyICAgIEVwbFRpbWVydURlbGV0ZVRpbWVyCiAjZW5kaWYKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmIEVQTF9USU1FUl9VU0VfVVNFUiA9PSBGQUxTRQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrSW5pdCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrSW5pdCh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrQWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVya0FkZEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcmtEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrRGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVya1NldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVya1NldFRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJICAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrTW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVya01vZGlmeVRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCisJCQkJICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVya0RlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCk7CiAjZW5kaWYKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExUSU1FUktfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL1ZpcnR1YWxFdGhlcm5ldC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmgKaW5kZXggZGVmZjg3Mi4uNGE0MmNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmgKQEAgLTczLDIzICs3MywxMSBAQAogCiAjaW5jbHVkZSAiRXBsRGxsay5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1ZFVEgpKSAhPSAwKQogCi10RXBsS2VybmVsIFBVQkxJQyBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIFZFdGhEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgVkV0aERlbEluc3RhbmNlKHZvaWQpOwogCiAjZW5kaWYgLy8gI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9WRVRIKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9wcm9jX2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYwppbmRleCBmNDkxMDMzLi45Y2NmMDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYwpAQCAtODMsNyArODMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtOTUsNiArOTQsOCBAQAogI2luY2x1ZGUgImZlYy5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJwcm9jX2ZzLmgiCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEyOSw4ICsxMzAsOCBAQAogCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCiBhdG9taWNfdCBhYXRtRGJnVHJhY2VQb2ludF9sW0RCR19UUkFDRV9QT0lOVFNdOwotRFdPUkQgYWR3RGJnVHJhY2VWYWx1ZV9sW0RCR19UUkFDRV9WQUxVRVNdOwotRFdPUkQgZHdEYmdUcmFjZVZhbHVlT2xkX2w7Cit1MzIgYWR3RGJnVHJhY2VWYWx1ZV9sW0RCR19UUkFDRV9WQUxVRVNdOwordTMyIGR3RGJnVHJhY2VWYWx1ZU9sZF9sOwogdW5zaWduZWQgaW50IHVpRGJnVHJhY2VWYWx1ZVBvc19sOwogc3BpbmxvY2tfdCBzcGlubG9ja0RiZ1RyYWNlVmFsdWVfbDsKIHVuc2lnbmVkIGxvbmcgdWxEYlRyYWNlVmFsdWVGbGFnc19sOwpAQCAtMTQ1LDEwICsxNDYsMTAgQEAKIHN0YXRpYyBpbnQgRXBsTGluUHJvY1dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOwogCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAKLUVQTERMTEVYUE9SVCBEV09SRCBQVUJMSUMgRXBsSWRlbnR1R2V0UnVubmluZ1JlcXVlc3RzKHZvaWQpOworZXh0ZXJuIHUzMiBFcGxJZGVudHVHZXRSdW5uaW5nUmVxdWVzdHModm9pZCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMTkxLDcgKzE5Miw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCkKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKQogewogCiAJaWYgKGJUcmFjZVBvaW50TnVtYmVyX3AgPj0KQEAgLTIwNyw3ICsyMDgsNyBAQAogCiB9CiAKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKQordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApCiB7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpbmxvY2tEYmdUcmFjZVZhbHVlX2wsIHVsRGJUcmFjZVZhbHVlRmxhZ3NfbCk7CkBAIC0yNjMsNyArMjY0LDcgQEAKIAkvLyAtLS0tIEVQTCBzdGF0ZSAtLS0tCiAJblNpemUgKz0gc25wcmludGYocGNCdWZmZXJfcCArIG5TaXplLCBuQnVmZmVyU2l6ZV9wIC0gblNpemUsCiAJCQkgICJOTVQgc3RhdGU6ICAgICAgICAgICAgICAgICAgMHglMDRYXG4iLAotCQkJICAoV09SRCkgRXBsTm10a0dldE5tdFN0YXRlKCkpOworCQkJICAodTE2KSBFcGxObXRrR2V0Tm10U3RhdGUoKSk7CiAKIAlFcGxEbGxrQ2FsR2V0U3RhdGlzdGljcygmcERsbGtDYWxTdGF0cyk7CiAKQEAgLTI3OSwxNCArMjgwLDE0IEBACiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQogCS8vIGZldGNoIHJ1bm5pbmcgSWRlbnRSZXF1ZXN0cwogCW5TaXplICs9IHNucHJpbnRmKHBjQnVmZmVyX3AgKyBuU2l6ZSwgbkJ1ZmZlclNpemVfcCAtIG5TaXplLAotCQkJICAicnVubmluZyBJZGVudFJlcXVlc3RzOiAgICAgIDB4JTA4bFhcbiIsCisJCQkgICJydW5uaW5nIElkZW50UmVxdWVzdHM6ICAgICAgMHglMDhYXG4iLAogCQkJICBFcGxJZGVudHVHZXRSdW5uaW5nUmVxdWVzdHMoKSk7CiAKIAkvLyBmZXRjaCBzdGF0ZSBvZiBObXRNbnUgbW9kdWxlCiAJewogCQl1bnNpZ25lZCBpbnQgdWlNYW5kYXRvcnlTbGF2ZUNvdW50OwogCQl1bnNpZ25lZCBpbnQgdWlTaWduYWxTbGF2ZUNvdW50OwotCQlXT1JEIHdGbGFnczsKKwkJdTE2IHdGbGFnczsKIAogCQlFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbygmdWlNYW5kYXRvcnlTbGF2ZUNvdW50LAogCQkJCQkgICAmdWlTaWduYWxTbGF2ZUNvdW50LCAmd0ZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxDZmdNYXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxDZmdNYXUuaAppbmRleCBkMjVhMWU5Li40YWM3NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsQ2ZnTWF1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbENmZ01hdS5oCkBAIC02OSwyNSArNjksMjIgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbEluYy5oIgotCiAjaWZuZGVmIF9FUExDRkdNQV9IXwogI2RlZmluZSBfRVBMQ0ZHTUFfSF8KIAorI2luY2x1ZGUgIi4uL0VwbEluYy5oIgorCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9DRkdNQSkpICE9IDApCiAKICNpbmNsdWRlICJFcGxPYmR1LmgiCiAjaW5jbHVkZSAiRXBsU2RvQ29tdS5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vZGVmaW5lIG1heCBudW1iZXIgb2YgdGltZW91dHMgZm9yIGNvbmZpZ3VyYXRpb24gb2YgMSBkZXZpY2UKICNkZWZpbmUgRVBMX0NGR01BX01BWF9USU1FT1VUICAgMwogCiAvL2NhbGxiYWNrZnVuY3Rpb24sIGNhbGxlZCBpZiBjb25maWd1cmF0aW9uIGlzIGZpbmlzaGVkCi10eXBlZGVmIHZvaWQgKFBVQkxJQyAqIHRmcEVwbENmZ01hQ2IpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkgICAgICAgdEVwbEtlcm5lbCBFcnJvcnN0YXRlX3ApOwordHlwZWRlZiB2b2lkICgqIHRmcEVwbENmZ01hQ2IpKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgICAgIHRFcGxLZXJuZWwgRXJyb3JzdGF0ZV9wKTsKIAogLy9TdGF0ZSBmb3IgY29uZmlndWFydGlvbiBtYW5hZ2VyIFN0YXRlbWFjaGluZQogdHlwZWRlZiBlbnVtIHsKQEAgLTEzMSwzMyArMTI4LDI5IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbENmZ1N0YXRlIG1fQ2ZnU3RhdGU7CS8vIHN0YXRlIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0YXRlIG1hc2NoaW5lCiAJdEVwbFNkb0NvbUNvbkhkbCBtX1Nkb0NvbUNvbkhkbDsJLy8gaGFuZGxlIGZvciBzZG8gY29ubmVjdGlvbgotCURXT1JEIG1fZHdMYXN0QWJvcnRDb2RlOworCXUzMiBtX2R3TGFzdEFib3J0Q29kZTsKIAl1bnNpZ25lZCBpbnQgbV91aUxhc3RJbmRleDsJLy8gbGFzdCBpbmRleCBvZiBjb25maWd1cmF0aW9uLCB0byBjb21wYWlyIHdpdGggYWN0dWFsIGluZGV4Ci0JQllURSAqbV9wYkNvbmNpc2U7CS8vIFB0ciB0byBjb25jaXNlIERDRgotCUJZVEUgKm1fcGJBY3R1YWxJbmRleDsJLy8gUHRyIHRvIGFjdHVhbCBpbmRleCBpbiB0aGUgRENGIHNlZ21lbnQKKwl1OCAqbV9wYkNvbmNpc2U7CS8vIFB0ciB0byBjb25jaXNlIERDRgorCXU4ICptX3BiQWN0dWFsSW5kZXg7CS8vIFB0ciB0byBhY3R1YWwgaW5kZXggaW4gdGhlIERDRiBzZWdtZW50CiAJdGZwRXBsQ2ZnTWFDYiBtX3BmbkNmZ01hQ2I7CS8vIFB0ciB0byBDZmdNYSBDYWxsYmFjaywgaXMgY2FsbCBpZiBjb25maWd1cmF0aW9uIGZpbmlzaGVkCiAJdEVwbEtlcm5lbCBtX0VwbEtlcm5lbEVycm9yOwkvLyBlcnJvcmNvZGUKLQlEV09SRCBtX2R3TnVtVmFsdWVDb3B5OwkvLyBudW1lcmljIHZhbHVlcyBhcmUgY29waWVkIGluIHRoaXMgdmFyaWFibGUKKwl1MzIgbV9kd051bVZhbHVlQ29weTsJLy8gbnVtZXJpYyB2YWx1ZXMgYXJlIGNvcGllZCBpbiB0aGlzIHZhcmlhYmxlCiAJdW5zaWduZWQgaW50IG1fdWlQZG9Ob2RlSWQ7CS8vIGJ1ZmZlciBmb3IgUERPIG5vZGUgaWQKLQlCWVRFIG1fYk5yT2ZNYXBwZWRPYmplY3Q7CS8vIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cworCXU4IG1fYk5yT2ZNYXBwZWRPYmplY3Q7CS8vIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cwogCXVuc2lnbmVkIGludCBtX3VpTm9kZUlkOwkvLyBFcGwgbm9kZSBhZGRyZXNzZQogCXRFcGxTZG9jU3RhdGUgbV9TZG9jU3RhdGU7CS8vIGJpdGNvZGVkIHN0YXRlIG9mIHRoZSBTRE8gdHJhbnNmZXIKIAl1bnNpZ25lZCBpbnQgbV91aUxhc3RTdWJJbmRleDsJLy8gbGFzdCBzdWJpbmRleCBvZiBjb25maWd1cmF0aW9uCiAJQk9PTCBtX2ZPbmVUcmFuZmVyT2s7CS8vIGF0bGVhc2VkIG9uZSB0cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bAotCUJZVEUgbV9iRXZlbnRGbGFnOwkvLyBmb3IgRXZlbnRzaWduYWxpbmcgdG8gdGhlIFN0YXRlIE1hc2NoaW5lCi0JRFdPUkQgbV9kd0NudE9iamVjdEluRGNmOwkvLyBudW1iZXIgb2YgT2JqZWN0cyBpbiBEQ0YKKwl1OCBtX2JFdmVudEZsYWc7CS8vIGZvciBFdmVudHNpZ25hbGluZyB0byB0aGUgU3RhdGUgTWFzY2hpbmUKKwl1MzIgbV9kd0NudE9iamVjdEluRGNmOwkvLyBudW1iZXIgb2YgT2JqZWN0cyBpbiBEQ0YKIAl0RXBsQ2ZnTWFJbmRleFR5cGUgbV9Ta2lwQ2ZnOwkvLyBUUlVFIGlmIGEgYWRzaXRpb25hbCBDb25maWd1cmF0aW9ucHJvY2VzcwogCS8vIGhhdmUgdG8gaW5zZXJ0IGUuZy4gUERPLW1hcHBpbmcKLQlXT1JEIG1fd1RpbWVPdXRDbnQ7CS8vIFRpbWVvdXQgQ291bnRlciwgYnJlYWsgY29uZmlndXJhdGlvbiBpcworCXUxNiBtX3dUaW1lT3V0Q250OwkvLyBUaW1lb3V0IENvdW50ZXIsIGJyZWFrIGNvbmZpZ3VyYXRpb24gaXMKIAkvLyBtX3dUaW1lT3V0Q250ID09IENGR01BX01BWF9USU1FT1VUCiAKIH0gdEVwbENmZ01hTm9kZTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGdW5jdGlvbjogICAgRXBsQ2ZnTWFJbml0KCkKIC8vCiAvLyBEZXNjcmlwdGlvbjogRnVuY3Rpb24gY3JlYXRlcyBmaXJzdCBpbnN0YW5jZSBvZiBDb25maWd1cmF0aW9uIE1hbmFnZXIKQEAgLTE2Niw3ICsxNTksNyBAQAogLy8KIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYUluaXQoKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFJbml0KHZvaWQpOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hQWRkSW5zdGFuY2UoKQpAQCAtMTc3LDcgKzE3MCw3IEBACiAvLwogLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hQWRkSW5zdGFuY2UoKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFBZGRJbnN0YW5jZSh2b2lkKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYURlbEluc3RhbmNlKCkKQEAgLTE4OCw3ICsxODEsNyBAQAogLy8KIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYURlbEluc3RhbmNlKCk7Cit0RXBsS2VybmVsIHBsQ2ZnTWFEZWxJbnN0YW5jZSh2b2lkKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYVN0YXJ0Q29uZmlnKCkKQEAgLTE5OSwxNiArMTkyLDE2IEBACiAvLyBQYXJhbWV0ZXJzOiAgdWlOb2RlSWRfcCAgICAgICAgICAgICAgPSBOb2RlSWQgb2YgdGhlIG5vZGUgdG8gY29uZmlndXJlCiAvLyAgICAgICAgICAgICAgcGJDb25jaXNlX3AgICAgICAgICAgICAgPSBwb2ludGVyIHRvIERDRgogLy8gICAgICAgICAgICAgIGZwQ2ZnTWFDYl9wICAgICAgICAgICAgID0gcG9pbnRlciB0byBjYWxsYmFjayBmdW5jdGlvbiAoc2hvdWxkIG5vdCBiZSBOVUxMKQotLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gQllURSAtPiBmb3IgZnV0dXJlIHVzZQorLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gdTggLT4gZm9yIGZ1dHVyZSB1c2UKIC8vICAgICAgICAgICAgICBEY2ZUeXBlX3AgICAgICAgICAgICAgICA9IHR5cGUgb2YgdGhlIERDRgogLy8KIC8vIFJldHVybnM6ICAgICB0Q29wS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYVN0YXJ0Q29uZmlnKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCSAgICAgIEJZVEUgKiBwYkNvbmNpc2VfcCwKLQkJCQkgICAgICB0ZnBFcGxDZmdNYUNiIGZwQ2ZnTWFDYl9wLAotCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVPZkNvbmNpc2VfcCwKLQkJCQkgICAgICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFTdGFydENvbmZpZyh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgICB1OCAqIHBiQ29uY2lzZV9wLAorCQkJICAgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCisJCQkgICAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAorCQkJICAgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIENmZ01hU3RhcnRDb25maWd1cmF0aW9uTm9kZSgpCkBAIC0yMjIsOSArMjE1LDkgQEAKIC8vCiAvLyBSZXR1cm5zOiAgICAgdENvcEtlcm5lbCAgICAgICAgICAgICAgPSBlcnJvciBjb2RlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQ2ZnTWFTdGFydENvbmZpZ05vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKLQkJCQkJICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFTdGFydENvbmZpZ05vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKKwkJCQkgICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZURjZigpCkBAIC0yMzUsMTYgKzIyOCwxNiBAQAogLy8gUGFyYW1ldGVyczogIHVpTm9kZUlkX3AgICAgICAgICAgICAgID0gTm9kZUlkIG9mIHRoZSBub2RlIHRvIGNvbmZpZ3VyZQogLy8gICAgICAgICAgICAgIHBiQ29uY2lzZV9wICAgICAgICAgICAgID0gcG9pbnRlciB0byBEQ0YKIC8vICAgICAgICAgICAgICBmcENmZ01hQ2JfcCAgICAgICAgICAgICA9IHBvaW50ZXIgdG8gY2FsbGJhY2sgZnVuY3Rpb24gKHNob3VsZCBub3QgYmUgTlVMTCkKLS8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgICA9IHNpemUgb2YgRENGIGluIEJZVEUgLT4gZm9yIGZ1dHVyZSB1c2UKKy8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgICA9IHNpemUgb2YgRENGIGluIHU4IC0+IGZvciBmdXR1cmUgdXNlCiAvLyAgICAgICAgICAgICAgRGNmVHlwZV9wICAgICAgICAgICAgICAgPSB0eXBlIG9mIHRoZSBEQ0YKIC8vCiAvLyBSZXR1cm5zOiAgICAgdENvcEtlcm5lbCAgICAgICAgICAgICAgPSBlcnJvciBjb2RlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQ2ZnTWFTdGFydENvbmZpZ05vZGVEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgQllURSAqIHBiQ29uY2lzZV9wLAotCQkJCQkgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCi0JCQkJCSAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAotCQkJCQkgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZURjZih1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgICB1OCAqIHBiQ29uY2lzZV9wLAorCQkJCSAgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCisJCQkJICAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAorCQkJCSAgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hTGlua0RjZigpCkBAIC0yNTMsMTUgKzI0NiwxNSBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICB1aU5vZGVJZF9wICAgICAgICAgICAgICA9IE5vZGVJZCBvZiB0aGUgbm9kZSB0byBjb25maWd1cmUKIC8vICAgICAgICAgICAgICBwYkNvbmNpc2VfcCAgICAgICAgICAgICA9IHBvaW50ZXIgdG8gRENGCi0vLyAgICAgICAgICAgICAgU2l6ZU9mQ29uY2lzZV9wICAgICAgICA9IHNpemUgb2YgRENGIGluIEJZVEUgLT4gZm9yIGZ1dHVyZSB1c2UKKy8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gdTggLT4gZm9yIGZ1dHVyZSB1c2UKIC8vICAgICAgICAgICAgICBEY2ZUeXBlX3AgICAgICAgICAgICAgICA9IHR5cGUgb2YgdGhlIERDRgogLy8KIC8vIFJldHVybnM6ICAgICB0Q29wS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYUxpbmtEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICBCWVRFICogcGJDb25jaXNlX3AsCi0JCQkJICB0RXBsT2JkU2l6ZSBTaXplT2ZDb25jaXNlX3AsCi0JCQkJICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFMaW5rRGNmKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgdTggKiBwYkNvbmNpc2VfcCwKKwkJCSAgIHRFcGxPYmRTaXplIFNpemVPZkNvbmNpc2VfcCwKKwkJCSAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hQ2hlY2tEY2YoKQpAQCAtMjc0LDggKzI2Nyw3IEBACiAvLwogLy8gUmV0dXJuczogICAgIHRDb3BLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hQ2hlY2tEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7Cit0RXBsS2VybmVsIEVwbENmZ01hQ2hlY2tEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAjZW5kaWYgLy8gI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfQ0ZHTUEpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbERsbHUuaAppbmRleCAzNmY4YmI3Li44OTBmODM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1LmgKQEAgLTczLDE5ICs3Myw3IEBACiAKICNpbmNsdWRlICIuLi9FcGxEbGwuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbERsbHVDYkFzbmQpICh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsRGxsdUNiQXNuZCkgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0RMTFUpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdUNhbC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbERsbHVDYWwuaAppbmRleCBiMWRjZDA2Li5iYzkxMjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdUNhbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1Q2FsLmgKQEAgLTc0LDE5ICs3NCw4IEBACiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbERsbHVDYkFzbmQpICh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsRGxsdUNiQXNuZCkgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCiB0RXBsS2VybmVsIEVwbERsbHVDYWxBZGRJbnN0YW5jZSh2b2lkKTsKIApAQCAtMTEwLDcgKzk5LDcgQEAKIHRFcGxLZXJuZWwgRXBsRGxsdUNhbFNvZnREZWxldGVOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAogdEVwbEtlcm5lbCBFcGxEbGx1Q2FsSXNzdWVSZXF1ZXN0KHRFcGxEbGxSZXFTZXJ2aWNlSWQgU2VydmljZV9wLAotCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIEJZVEUgYlNvYUZsYWcxX3ApOworCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxFdmVudHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxFdmVudHUuaAppbmRleCAzMjJjZmZkLi5hYjg1MjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRXZlbnR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbEV2ZW50dS5oCkBAIC03MywzNiArNzMsMjQgQEAKIAogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBpbml0IGZ1bmN0aW9uCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVJbml0KHRFcGxQcm9jZXNzRXZlbnRDYiBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1SW5pdCh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCk7CiAKIC8vIGFkZCBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnR1QWRkSW5zdGFuY2UodEVwbFByb2Nlc3NFdmVudENiCi0JCQkJICAgICAgIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApOwordEVwbEtlcm5lbCBFcGxFdmVudHVBZGRJbnN0YW5jZSh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCk7CiAKIC8vIGRlbGV0ZSBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnR1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbEV2ZW50dURlbEluc3RhbmNlKHZvaWQpOwogCiAvLyBUYXNrIHRoYXQgZGlzcGF0Y2hlcyBldmVudHMgaW4gdXNlcnNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1UHJvY2Vzcyh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7CiAKIC8vIHBvc3QgZXZlbnRzIGZyb20gdXNlcnNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1UG9zdCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7CiAKIC8vIHBvc3QgZXJyb3JldmVudHMgZnJvbSB1c2Vyc3BhY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVBvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1UG9zdEVycm9yKHRFcGxFdmVudFNvdXJjZSBFdmVudFNvdXJjZV9wLAorCQkJICAgICAgdEVwbEtlcm5lbCBFcGxFcnJvcl9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpQXJnU2l6ZV9wLCB2b2lkICpwQXJnX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMX0VWRU5UVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbElkZW50dS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbElkZW50dS5oCmluZGV4IGU3MzAyMTAuLjA1N2M5MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxJZGVudHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsSWRlbnR1LmgKQEAgLTY4LDQxICs2OCwyNyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsRGxsLmgiCi0KICNpZm5kZWYgX0VQTElERU5UVV9IXwogI2RlZmluZSBfRVBMSURFTlRVX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxJZGVudHVDYlJlc3BvbnNlKSAodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsSWRlbnR1Q2JSZXNwb25zZSkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkJICAgdEVwbElkZW50UmVzcG9uc2UgKgogCQkJCQkJICAgcElkZW50UmVzcG9uc2VfcCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxJZGVudHVJbml0KHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxJZGVudHVBZGRJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1QWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbElkZW50dURlbEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsSWRlbnR1UmVzZXQodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dVJlc2V0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxJZGVudHVHZXRJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCSAgICAgdEVwbElkZW50UmVzcG9uc2UgKipwcElkZW50UmVzcG9uc2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICB0RXBsSWRlbnRSZXNwb25zZSAqKgotCQkJCQkgICAgcHBJZGVudFJlc3BvbnNlX3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxJZGVudHVDYlJlc3BvbnNlCi0JCQkJCQlwZm5DYlJlc3BvbnNlX3ApOwordEVwbEtlcm5lbCBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJIHRFcGxJZGVudHVDYlJlc3BvbnNlIHBmbkNiUmVzcG9uc2VfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExJREVOVFVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxMZWR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTGVkdS5oCmluZGV4IDc4ZTcwZDAuLmNhOWViNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxMZWR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbExlZHUuaApAQCAtNjgsNDEgKzY4LDI3IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgX0VQTExFRFVfSF8KKyNkZWZpbmUgX0VQTExFRFVfSF8KKwogI2luY2x1ZGUgIi4uL0VwbExlZC5oIgogI2luY2x1ZGUgIi4uL0VwbE5tdC5oIgogI2luY2x1ZGUgIkVwbEV2ZW50dS5oIgogCi0jaWZuZGVmIF9FUExMRURVX0hfCi0jZGVmaW5lIF9FUExMRURVX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjaykgKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwKK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjaykgKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwKIAkJCQkJCQkgIEJPT0wgZk9uX3ApOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTEVEVSkpICE9IDApCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExlZHVJbml0KHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjayBwZm5DYlN0YXRlQ2hhbmdlX3ApOwordEVwbEtlcm5lbCBFcGxMZWR1SW5pdCh0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuQ2JTdGF0ZUNoYW5nZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGVkdUFkZEluc3RhbmNlKHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjawotCQkJCSAgICAgcGZuQ2JTdGF0ZUNoYW5nZV9wKTsKK3RFcGxLZXJuZWwgRXBsTGVkdUFkZEluc3RhbmNlKHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjayBwZm5DYlN0YXRlQ2hhbmdlX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMZWR1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbExlZHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGVkdUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UKLQkJCQkJICBObXRTdGF0ZUNoYW5nZV9wKTsKK3RFcGxLZXJuZWwgRXBsTGVkdUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UgTm10U3RhdGVDaGFuZ2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExlZHVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEVwbEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxMZWR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKTsKIAogI2VuZGlmIC8vICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0xFRFUpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10Q251LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10Q251LmgKaW5kZXggZTUwODA1NS4uN2QyMzAyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdENudS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRDbnUuaApAQCAtNjgsNDAgKzY4LDI0IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgX0VQTE5NVENOVV9IXworI2RlZmluZSBfRVBMTk1UQ05VX0hfCisKICNpbmNsdWRlICJFcGxObXR1LmgiCiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAjaW5jbHVkZSAiLi4vRXBsRnJhbWUuaCIKIAotI2lmbmRlZiBfRVBMTk1UQ05VX0hfCi0jZGVmaW5lIF9FUExOTVRDTlVfSF8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfQ04pKSAhPSAwKQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdENudUluaXQodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251QWRkSW5zdGFuY2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwordEVwbEtlcm5lbCBFcGxObXRDbnVBZGRJbnN0YW5jZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsTm10Q251RGVsSW5zdGFuY2Uodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVTZW5kTm10UmVxdWVzdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgICAgICB0RXBsTm10Q29tbWFuZAotCQkJCQkJICAgICAgIE5tdENvbW1hbmRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdENudVNlbmRObXRSZXF1ZXN0KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrCi0JCQkgICAgICBwZm5FcGxObXRDaGVja0V2ZW50Q2JfcCk7Cit0RXBsS2VybmVsIEVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrIHBmbkVwbE5tdENoZWNrRXZlbnRDYl9wKTsKIAogI2VuZGlmIC8vICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1UX0NOKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdE1udS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdE1udS5oCmluZGV4IGM1NGVmZWIuLjVlNWUwY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRNbnUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10TW51LmgKQEAgLTY4LDM0ICs2OCwyMCBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiRXBsTm10dS5oIgotCiAjaWZuZGVmIF9FUExOTVRNTlVfSF8KICNkZWZpbmUgX0VQTE5NVE1OVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICJFcGxObXR1LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbE5tdE1udUNiTm9kZUV2ZW50KSAodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKKwkJCQkJICAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkJICAgICB1MTYgd0Vycm9yQ29kZV9wLAorCQkJCQkgICAgIEJPT0wgZk1hbmRhdG9yeV9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxObXRNbnVDYk5vZGVFdmVudCkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgIHRFcGxObXROb2RlRXZlbnQKLQkJCQkJCSAgICBOb2RlRXZlbnRfcCwKLQkJCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKLQkJCQkJCSAgICBXT1JEIHdFcnJvckNvZGVfcCwKLQkJCQkJCSAgICBCT09MIGZNYW5kYXRvcnlfcCk7Ci0KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKgotCQkgICB0RXBsTm10TW51Q2JCb290RXZlbnQpICh0RXBsTm10Qm9vdEV2ZW50IEJvb3RFdmVudF9wLAotCQkJCQkgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKLQkJCQkJICAgV09SRCB3RXJyb3JDb2RlX3ApOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxObXRNbnVDYkJvb3RFdmVudCkgKHRFcGxObXRCb290RXZlbnQgQm9vdEV2ZW50X3AsCisJCQkJCSAgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJCSAgICAgdTE2IHdFcnJvckNvZGVfcCk7CiAKICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1UX01OKSkgIT0gMCkKIApAQCAtMTA3LDcgKzkzLDcgQEAKIAogdEVwbEtlcm5lbCBFcGxObXRNbnVEZWxJbnN0YW5jZSh2b2lkKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAogdEVwbEtlcm5lbCBFcGxObXRNbnVTZW5kTm10Q29tbWFuZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKIAkJCQkgICB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApOwpAQCAtMTE1LDE2ICsxMDEsMTYgQEAKIHRFcGxLZXJuZWwgRXBsTm10TW51VHJpZ2dlclN0YXRlQ2hhbmdlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCSAgICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZQogCQkJCQkgICAgTm10U3RhdGVDaGFuZ2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUdldERpYWdub3N0aWNJbmZvKHVuc2lnbmVkIGludAordEVwbEtlcm5lbCBFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbyh1bnNpZ25lZCBpbnQKIAkJCQkJICAgICAqcHVpTWFuZGF0b3J5U2xhdmVDb3VudF9wLAogCQkJCQkgICAgIHVuc2lnbmVkIGludAogCQkJCQkgICAgICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCi0JCQkJCSAgICAgV09SRCAqIHB3RmxhZ3NfcCk7CisJCQkJCSAgICAgdTE2ICogcHdGbGFnc19wKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dS5oCmluZGV4IDVhNTZjNTguLmMxZmNhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHUuaApAQCAtNjgsMTkgKzY4LDEyIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxObXQuaCIKLSNpbmNsdWRlICJFcGxFdmVudHUuaCIKLQogI2lmbmRlZiBfRVBMTk1UVV9IXwogI2RlZmluZSBfRVBMTk1UVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxObXQuaCIKKyNpbmNsdWRlICJFcGxFdmVudHUuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBubXQgY29tbWFuZHMKIHR5cGVkZWYgZW51bSB7CiAJLy8gcmVxdWVzdGFibGUgQVNuZCBTZXJ2aWNlSWRzICAgIDB4MDEuLjB4MUYKQEAgLTEyMSwzNCArMTE0LDI1IEBACiAJa0VwbE5tdENtZEludmFsaWRTZXJ2aWNlID0gMHhGRgogfSB0RXBsTm10Q29tbWFuZDsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxObXR1U3RhdGVDaGFuZ2VDYWxsYmFjaykgKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQkgTm10U3RhdGVDaGFuZ2VfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2spICh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrKSAodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrKSAodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVFUpKSAhPSAwKQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dUluaXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbE5tdHVJbml0KHZvaWQpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dUFkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxObXR1QWRkSW5zdGFuY2Uodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbE5tdHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVObXRFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdHVObXRFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsTm10U3RhdGUgUFVCTElDIEVwbE5tdHVHZXRObXRTdGF0ZSh2b2lkKTsKK3RFcGxObXRTdGF0ZSBFcGxObXR1R2V0Tm10U3RhdGUodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsTm10dVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFcGxFdmVudF9wKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxObXR1UmVnaXN0ZXJTdGF0ZUNoYW5nZUNiKHRFcGxObXR1U3RhdGVDaGFuZ2VDYWxsYmFjawotCQkJICAgICBwZm5FcGxObXRTdGF0ZUNoYW5nZUNiX3ApOwordEVwbEtlcm5lbCBFcGxObXR1UmVnaXN0ZXJTdGF0ZUNoYW5nZUNiKHRFcGxObXR1U3RhdGVDaGFuZ2VDYWxsYmFjayBwZm5FcGxObXRTdGF0ZUNoYW5nZUNiX3ApOwogCiAjZW5kaWYgLy8gI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRVKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHVDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1Q2FsLmgKaW5kZXggYzg4MTU4Mi4uYjk4NTAzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHVDYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dUNhbC5oCkBAIC02OSwyMyArNjksMTIgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIkVwbE5tdHUuaCIKLSNpbmNsdWRlICIuLi9rZXJuZWwvRXBsTm10ay5oIgotCiAjaWZuZGVmIF9FUExOTVRVQ0FMX0hfCiAjZGVmaW5lIF9FUExOTVRVQ0FMX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIkVwbE5tdHUuaCIKKyNpbmNsdWRlICIuLi9rZXJuZWwvRXBsTm10ay5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE5tdFN0YXRlIFBVQkxJQyBFcGxObXRrQ2FsR2V0Tm10U3RhdGUodm9pZCk7Cit0RXBsTm10U3RhdGUgRXBsTm10a0NhbEdldE5tdFN0YXRlKHZvaWQpOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMTk1UVUNBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1LmgKaW5kZXggYmMxZTE3My4uMDg2MzcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsT2JkdS5oCkBAIC02OCwyMiArNjgsMTAgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCiAjaWZuZGVmIF9FUExPQkRVX0hfCiAjZGVmaW5lIF9FUExPQkRVX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsT2JkLmgiCiAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX09CRFUpKSAhPSAwKQogCkBAIC05MSw2OCArNzksNTcgQEAKICNlcnJvciAiRVBMIE9CRHUgbW9kdWxlIGVuYWJsZWQsIGJ1dCBPQkRfVVNFX0tFUk5FTCA9PSBUUlVFIgogI2VuZGlmCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSB0RXBsT2JkU2l6ZSBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLCB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLCB0RXBsT2JkU2l6ZSBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1UmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplICogcFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLCB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdURlZmluZVZhcih0RXBsVmFyUGFyYW0gTUVNICogcFZhclBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1RGVmaW5lVmFyKHRFcGxWYXJQYXJhbSAqcFZhclBhcmFtX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkdUdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1UmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCk7Cit2b2lkICpFcGxPYmR1R2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLCB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICAgQllURSBiVHlwZV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZHVHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7Cit2b2lkIEVwbE9iZHVJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwgdTggYlR5cGVfcCwKKwkJCSB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB1bnNpZ25lZCBpbnQgUFVCTElDIEVwbE9iZHVHZXROb2RlSWQodm9pZCk7Cit0RXBsT2JkU2l6ZSBFcGxPYmR1R2V0RGF0YVNpemUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgcEFjY2Vzc1R5cF9wKTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJICAgIHRFcGxPYmRTaXplICogcFNpemVfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1V3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGludAotCQkJCQkJICAgICAgIHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJICAgICAgIHRFcGxPYmRTaXplIFNpemVfcCk7Cit1bnNpZ25lZCBpbnQgRXBsT2JkdUdldE5vZGVJZCh2b2lkKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJCQkgICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKioKLQkJCQkJCSAgICAgcHBWYXJFbnRyeV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdVNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsT2JkdUdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCXRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCk7CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsT2JkdVJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCXZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbE9iZHVTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApOwogCiAjZWxpZiBFUExfT0JEX1VTRV9LRVJORUwgIT0gRkFMU0UKICNpbmNsdWRlICIuLi9rZXJuZWwvRXBsT2Jkay5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHVDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1Q2FsLmgKaW5kZXggNDk4ZTAxMS4uMDcyNzc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHVDYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsT2JkdUNhbC5oCkBAIC02OSw4MCArNjksNTggQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCiAjaWZuZGVmIF9FUExPQkRVQ0FMX0hfCiAjZGVmaW5lIF9FUExPQkRVQ0FMX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgogCit0RXBsS2VybmVsIEVwbE9iZHVDYWxXcml0ZUVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQl2b2lkICpwU3JjRGF0YV9wLAorCQkJCXRFcGxPYmRTaXplIFNpemVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkJICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCit0RXBsS2VybmVsIEVwbE9iZHVDYWxEZWZpbmVWYXIodEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxXcml0ZUVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJICAgIHRFcGxPYmRTaXplIFNpemVfcCk7Cit2b2lkICpFcGxPYmR1Q2FsR2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7Cit2b2lkIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCSAgICB1OCBiVHlwZV9wLCB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsRGVmaW5lVmFyKHRFcGxWYXJQYXJhbSBNRU0gKgotCQkJCQkJICAgcFZhclBhcmFtX3ApOwordEVwbE9iZFNpemUgRXBsT2JkdUNhbEdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCAqUFVCTElDIEVwbE9iZHVDYWxHZXRPYmplY3REYXRhUHRyKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwordW5zaWduZWQgaW50IEVwbE9iZHVDYWxHZXROb2RlSWQodm9pZCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIKLQkJCQkJCQlwVXNlck9kX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1Q2FsU2V0Tm9kZUlkKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgICAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5IE1FTSAqCi0JCQkJCQlwVmFyRW50cnlfcCwgQllURSBiVHlwZV9wLAotCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxPYmRTaXplIFBVQkxJQyBFcGxPYmR1Q2FsR2V0RGF0YVNpemUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludAotCQkJCQkJICAgICAgdWlTdWJJbmRleF9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCisJCQkJICAgdEVwbE9iZFNpemUgKnBTaXplX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB1bnNpZ25lZCBpbnQgUFVCTElDIEVwbE9iZHVDYWxHZXROb2RlSWQodm9pZCk7Cit0RXBsS2VybmVsIEVwbE9iZHVDYWxXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgICB0RXBsT2JkTm9kZUlkVHlwZQotCQkJCQkJICAgTm9kZUlkVHlwZV9wKTsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgICAgcEFjY2Vzc1R5cF9wKTsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsV3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQKLQkJCQkJCQkgIHVpSW5kZXhfcCwKLQkJCQkJCQkgIHVuc2lnbmVkIGludAotCQkJCQkJCSAgdWlTdWJJbmRleF9wLAotCQkJCQkJCSAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCQkgIHRFcGxPYmRTaXplIFNpemVfcCk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSAqKnBwVmFyRW50cnlfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExPQkRVQ0FMX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsUGRvdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFBkb3UuaAppbmRleCAxMWRlNDg2Li5iOGM4MzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsUGRvdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxQZG91LmgKQEAgLTcyLDI0ICs3MiwxMiBAQAogCiAjaW5jbHVkZSAiLi4vRXBsUGRvLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIHRFcGxLZXJuZWwgRXBsUGRvdUFkZEluc3RhbmNlKHZvaWQpOwogCiB0RXBsS2VybmVsIEVwbFBkb3VEZWxJbnN0YW5jZSh2b2lkKTsKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfUERPVSkpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gKnBQYXJhbV9wKTsKICNlbHNlCiAjZGVmaW5lIEVwbFBkb3VDYk9iZEFjY2VzcwkJTlVMTAogI2VuZGlmCkBAIC05NywxMiArODUsMTIgQEAKIC8vIHJldHVybnMgZXJyb3IgaWYgYlBkb0lkX3AgaXMgYWxyZWFkeSB2YWxpZAogLyoKIHRFcGxLZXJuZWwgRXBsUGRvdVNldE1hcHBpbmcoCi0gICAgQllURSBiUGRvSWRfcCwgQk9PTCBmVHhSeF9wLCBCWVRFIGJOb2RlSWQsIEJZVEUgYk1hcHBpbmdWZXJzaW9uLAotICAgIHRFcGxQZG9NYXBwaW5nICogcE1hcHBpbmdfcCwgQllURSBiTWF4RW50cmllc19wKTsKKyAgICB1OCBiUGRvSWRfcCwgQk9PTCBmVHhSeF9wLCB1OCBiTm9kZUlkLCB1OCBiTWFwcGluZ1ZlcnNpb24sCisgICAgdEVwbFBkb01hcHBpbmcgKiBwTWFwcGluZ19wLCB1OCBiTWF4RW50cmllc19wKTsKIAogdEVwbEtlcm5lbCBFcGxQZG91R2V0TWFwcGluZygKLSAgICBCWVRFIGJQZG9JZF9wLCBCT09MIGZUeFJ4X3AsIEJZVEUgKiBwYk5vZGVJZCwgQllURSAqIHBiTWFwcGluZ1ZlcnNpb24sCi0gICAgdEVwbFBkb01hcHBpbmcgKiBwTWFwcGluZ19wLCBCWVRFICogcGJNYXhFbnRyaWVzX3ApOworICAgIHU4IGJQZG9JZF9wLCBCT09MIGZUeFJ4X3AsIHU4ICogcGJOb2RlSWQsIHU4ICogcGJNYXBwaW5nVmVyc2lvbiwKKyAgICB0RXBsUGRvTWFwcGluZyAqIHBNYXBwaW5nX3AsIHU4ICogcGJNYXhFbnRyaWVzX3ApOwogKi8KIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9QRE9VX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXNuZHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc25kdS5oCmluZGV4IGUzNDk1OWYuLmE2MmQ0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc25kdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc25kdS5oCkBAIC02OCwzOSArNjgsMjggQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbFNkby5oIgotI2luY2x1ZGUgIi4uL0VwbERsbC5oIgotCiAjaWZuZGVmIF9FUExTRE9BU05EVV9IXwogI2RlZmluZSBfRVBMU0RPQVNORFVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsU2RvLmgiCisjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX0FTTkQpKSAhPSAwKQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTZG9Bc25kdURlbEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUluaXRDb24odEVwbFNkb0NvbkhkbCAqIHBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsCi0JCQkJICAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAorCQkJICAgICAgIHRFcGxGcmFtZSAqcFNyY0RhdGFfcCwKKwkJCSAgICAgICB1MzIgZHdEYXRhU2l6ZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVEZWxDb24odEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwogCiAjZW5kaWYgLy8gZW5kIG9mICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX0FTTkQpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXN5U2VxdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0FzeVNlcXUuaAppbmRleCA0NjU4YjVmLi5jYzg2MmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXN5U2VxdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc3lTZXF1LmgKQEAgLTY4LDQ0ICs2OCwzMyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIF9FUExTRE9BU1lTRVFVX0hfCisjZGVmaW5lIF9FUExTRE9BU1lTRVFVX0hfCisKICNpbmNsdWRlICIuLi9FcGxTZG8uaCIKICNpbmNsdWRlICJFcGxTZG9VZHB1LmgiCiAjaW5jbHVkZSAiRXBsU2RvQXNuZHUuaCIKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogI2luY2x1ZGUgIkVwbFRpbWVydS5oIgogCi0jaWZuZGVmIF9FUExTRE9BU1lTRVFVX0hfCi0jZGVmaW5lIF9FUExTRE9BU1lTRVFVX0hfCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcUluaXQodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCisJCQkgICAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFJbml0KHRFcGxTZG9Db21SZWNlaXZlQ2IgZnBTZG9Db21DYl9wLAordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKIAkJCQkgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxQWRkSW5zdGFuY2UodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCi0JCQkJCSAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdENvbih0RXBsU2RvU2VxQ29uSGRsICpwU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcUluaXRDb24odEVwbFNkb1NlcUNvbkhkbCAqIHBTZG9TZXFDb25IZGxfcCwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkgICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxU2VuZERhdGEodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wLAorCQkJCXRFcGxGcmFtZSAqcERhdGFfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVNlbmREYXRhKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3AsCi0JCQkJICAgICAgIHRFcGxGcmFtZSAqIHBEYXRhX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcURlbENvbih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxRGVsQ29uKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMU0RPQVNZU0VRVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0NvbXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Db211LmgKaW5kZXggM2U0NTRjNy4uNGVlZTZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0NvbXUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQ29tdS5oCkBAIC02OCw1OCArNjgsNDYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBfRVBMU0RPQ09NVV9IXworI2RlZmluZSBfRVBMU0RPQ09NVV9IXworCiAjaW5jbHVkZSAiLi4vRXBsU2RvLmgiCiAjaW5jbHVkZSAiLi4vRXBsT2JkLmgiCiAjaW5jbHVkZSAiLi4vRXBsU2RvQWMuaCIKICNpbmNsdWRlICJFcGxPYmR1LmgiCiAjaW5jbHVkZSAiRXBsU2RvQXN5U2VxdS5oIgogCi0jaWZuZGVmIF9FUExTRE9DT01VX0hfCi0jZGVmaW5lIF9FUExTRE9DT01VX0hfCit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXQodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxTZG9Db21BZGRJbnN0YW5jZSh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdCh2b2lkKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTZG9Db21EZWxJbnN0YW5jZSh2b2lkKTsKIAogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tRGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCwKLQkJCQkgICAgIHRFcGxTZG9UeXBlIFByb3RUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21EZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3AsCisJCQkgICAgICB0RXBsU2RvVHlwZSBQcm90VHlwZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5SW5kZXggKgotCQkJCQkgICAgICAgcFNkb0NvbVRyYW5zUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXRUcmFuc2ZlckJ5SW5kZXgodEVwbFNkb0NvbVRyYW5zUGFyYW1CeUluZGV4ICpwU2RvQ29tVHJhbnNQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tVW5kZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbVVuZGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21HZXRTdGF0ZSh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICB0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUdldFN0YXRlKHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgIHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21TZG9BYm9ydCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICBEV09SRCBkd0Fib3J0Q29kZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tU2RvQWJvcnQodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgdTMyIGR3QWJvcnRDb2RlX3ApOwogCiAjZW5kaWYKIAogLy8gZm9yIGZ1dHVyZSBleHRlbnRpb24KIC8qCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21Jbml0VHJhbnNmZXJBbGxCeUluZGV4KHRFcGxTZG9Db21UcmFuc1BhcmFtQWxsQnlJbmRleCogcFNkb0NvbVRyYW5zUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXRUcmFuc2ZlckFsbEJ5SW5kZXgodEVwbFNkb0NvbVRyYW5zUGFyYW1BbGxCeUluZGV4KiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlOYW1lKHRFcGxTZG9Db21UcmFuc1BhcmFtQnlOYW1lKiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlOYW1lKHRFcGxTZG9Db21UcmFuc1BhcmFtQnlOYW1lKiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyRmlsZSh0RXBsU2RvQ29tVHJhbnNQYXJhbUZpbGUqIHBTZG9Db21UcmFuc1BhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21Jbml0VHJhbnNmZXJGaWxlKHRFcGxTZG9Db21UcmFuc1BhcmFtRmlsZSogcFNkb0NvbVRyYW5zUGFyYW1fcCk7CiAKICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9VZHB1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvVWRwdS5oCmluZGV4IDJkNzdiNmYuLjEzZTJhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9VZHB1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb1VkcHUuaApAQCAtNjgsNDEgKzY4LDI5IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxTZG8uaCIKLQogI2lmbmRlZiBfRVBMU0RPVURQVV9IXwogI2RlZmluZSBfRVBMU0RPVURQVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxTZG8uaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9fVURQKSkgIT0gMCkKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUFkZEluc3RhbmNlKHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpUG9ydF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpUG9ydF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUluaXRDb24odEVwbFNkb0NvbkhkbCAqIHBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3ApOwordEVwbEtlcm5lbCBFcGxTZG9VZHB1SW5pdENvbih0RXBsU2RvQ29uSGRsICpwU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgICB0RXBsRnJhbWUgKiBwU3JjRGF0YV9wLAotCQkJCSAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICB0RXBsRnJhbWUgKnBTcmNEYXRhX3AsIHUzMiBkd0RhdGFTaXplX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwordEVwbEtlcm5lbCBFcGxTZG9VZHB1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwogCiAjZW5kaWYgLy8gZW5kIG9mICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX1VEUCkpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTdGF0dXN1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU3RhdHVzdS5oCmluZGV4IGQyMTE5MzUuLjBmZDNlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTdGF0dXN1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFN0YXR1c3UuaApAQCAtNjgsMzcgKzY4LDIzIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxEbGwuaCIKLQogI2lmbmRlZiBfRVBMU1RBVFVTVV9IXwogI2RlZmluZSBfRVBMU1RBVFVTVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxEbGwuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsU3RhdHVzdUNiUmVzcG9uc2UpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgICB0RXBsU3RhdHVzUmVzcG9uc2UgKnBTdGF0dXNSZXNwb25zZV9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxTdGF0dXN1Q2JSZXNwb25zZSkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqCi0JCQkJCQkgICAgcFN0YXR1c1Jlc3BvbnNlX3ApOwordEVwbEtlcm5lbCBFcGxTdGF0dXN1SW5pdCh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbFN0YXR1c3VBZGRJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdUluaXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdUFkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTdGF0dXN1UmVzZXQodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSh2b2lkKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdVJlc2V0KHZvaWQpOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1UmVxdWVzdFN0YXR1c1Jlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICB0RXBsU3RhdHVzdUNiUmVzcG9uc2UKLQkJCQkJCSAgcGZuQ2JSZXNwb25zZV9wKTsKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdVJlcXVlc3RTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgdEVwbFN0YXR1c3VDYlJlc3BvbnNlIHBmbkNiUmVzcG9uc2VfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExTVEFUVVNVX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsVGltZXJ1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsVGltZXJ1LmgKaW5kZXggNDA0NDk1NS4uNWM0NDc0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFRpbWVydS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxUaW1lcnUuaApAQCAtNjgsNDAgKzY4LDI4IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgotI2luY2x1ZGUgIkVwbEV2ZW50dS5oIgotCiAjaWZuZGVmIF9FUExUSU1FUlVfSF8KICNkZWZpbmUgX0VQTFRJTUVSVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgorI2luY2x1ZGUgIkVwbEV2ZW50dS5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsVGltZXJ1SW5pdCh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbFRpbWVydUFkZEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lcnVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1QWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJICAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVydU1vZGlmeVRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCisJCQkJICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVydURlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkJIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApOwotCi1CT09MIFBVQkxJQyBFcGxUaW1lcnVJc1RpbWVyQWN0aXZlKHRFcGxUaW1lckhkbCBUaW1lckhkbF9wKTsKK0JPT0wgRXBsVGltZXJ1SXNUaW1lckFjdGl2ZSh0RXBsVGltZXJIZGwgVGltZXJIZGxfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExUSU1FUlVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IGVjOThkYTUuLjhkYzU1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMTIwMyw4ICsxMjAzLDcgQEAKIAogCQlwTXBSZmQgPSAoUE1QX1JGRCkgbGlzdF9lbnRyeShlbGVtZW50LCBNUF9SRkQsIGxpc3Rfbm9kZSk7CiAKLQkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKLQkJbGlzdF9hZGRfdGFpbCgmcE1wUmZkLT5saXN0X25vZGUsICZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KTsKKwkJbGlzdF9tb3ZlX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcEFkYXB0ZXItPlJ4UmluZy5SZWN2TGlzdCk7CiAJfQogCiAJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvUkVBRE1FCmluZGV4IDA3YzllZjkuLmNkMDdhZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL1JFQURNRQpAQCAtMSwyOCArMSw0NyBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFVTQiBUcmFuenBvcnQgYW5kIEFscGhhdHJhY2sgS2VybmVsIGRyaXZlcnMgZm9yIExpbnV4LgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIExpbnV4IFVTQiBUcmFuenBvcnQgYW5kIEFscGhhdHJhY2sgS2VybmVsIGRyaXZlcnMuCiAKLUF0IHByZXNlbnQgdGhlIHRyYW56cG9ydCBkb2VzIHJlYWRzL3dyaXRlcyBvZiA4IGJ5dGUgY21kcyB0byAvZGV2L3RyYW56cG9ydDAgdG8gY29udHJvbAotdGhlIGxpZ2h0cyBhbmQgc2NyZWVuIGFuZCB3aGVlbAorU2VlIGh0dHA6Ly93d3cuZnJvbnRpZXJkZXNpZ24uY29tIGZvciBkZXRhaWxzIG9uIHRoZXNlIGRldmljZXMuCiAKLUF0IHByZXNlbnQgdGhlIGFscGhhdHJhY2sgYWNjZXB0cyByZWFkcy93cml0ZXMgb2YgMTIgYnl0ZSBjbWRzIHRvIC9kZXYvdHJhbnpwb3J0MCB0byBjb250cm9sCi10aGUgbGlnaHRzIGFuZCBzY3JlZW4gYW5kIGZhZGVyLgorVXNlcnNwYWNlIHRlc3QgY29kZSBpcyBhdmFpbGFibGUgZnJvbQogCi1Cb3RoIGRyaXZlcnMgYWxzbyBoYXZlIHNvbWUgc3lzZnMgaG9va3MgdGhhdCBhcmUgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudC4KK2dpdDovL3RvdXRhdGlzLmlzYy5vcmcvaG9tZS9kL3NyYy9naXQvZnJvbnRpZXIuZ2l0CiAKLVRoZSBBUEkgaXMgY3VycmVudGx5IGNsb3NlbHkgdGllZCB0byB0aGUgYXJkb3VyIHJldmlzaW9uIGFuZCBXSUxMIGNoYW5nZS4KK0F0IHByZXNlbnQgdGhlIHRyYW56cG9ydCBkb2VzIHJlYWRzL3dyaXRlcyBvZiA4IGJ5dGUgY21kcyB0bworL2Rldi90cmFuenBvcnQwIHRvIGNvbnRyb2wgdGhlIGxpZ2h0cywgc2NyZWVuLCBhbmQgd2hlZWwuCiAKLUEgc3lzZnMgaW50ZXJmYWNlIGlzIFBFUkZFQ1QgZm9yIHNpbXBsZSB1c2Vyc3BhY2UgYXBwcyB0byBkbyBmdW4gdGhpbmdzIHdpdGggdGhlCi1saWdodHMgYW5kIHNjcmVlbi4gSXQncyBmYWlybHkgbG91c3kgZm9yIGhhbmRsaW5nIGlucHV0IGV2ZW50cyBhbmQgdmVyeSBsb3VzeQotZm9yIHdhdGNoaW5nIHRoZSBzdGF0ZSBvZiB0aGUgc2h1dHRsZSB3aGVlbC4KK0F0IHByZXNlbnQgdGhlIGFscGhhdHJhY2sgYWNjZXB0cyByZWFkcy93cml0ZXMgb2YgMTIgYnl0ZSBjbWRzIHRvCisvZGV2L3RyYW56cG9ydDAgdG8gY29udHJvbCB0aGUgbGlnaHRzLCBzY3JlZW4sIGZhZGVyIGFuZCB0b3VjaHBhZC4KIAotQSBsaW51eCBpbnB1dCBldmVudHMgaW50ZXJmYWNlIGlzIGdyZWF0IGZvciB0aGUgaW5wdXQgZXZlbnRzIGFuZCBzaHV0dGxlIHdoZWVsLiBJdCdzCi10aGVvcmV0aWNhbGx5IE9LIG9uIExFRHMuIEEgRmFkZXIgY2FuIGJlIG1hcHBlZCB0byBhbiBhYnNvbHV0ZSBtb3VzZSBkZXZpY2UuCi1CdXQgdGhlcmUgaXMgbm8gTENEIHN1cHBvcnQgYXQgYWxsLgorVGhlIHRyYW56cG9ydCBkcml2ZXIgcHJvdmlkZXMgYSBydWRpbWVudGFyeSBzeXNmcyBpbnRlcmZhY2UgZm9yIHRoZSBzdGF0dXMgb2YKK3RoZSBkZXZpY2UgYW5kIGEgd3JpdGFibGUgcGFyYW1ldGVyIGZvciB0dXJuaW5nIHdoZWVsIGNvbXByZXNzaW9uIG9uIGFuZCBvZmYuCiAKLUluIHRoZSBlbmQgdGhpcyBpcyBnb2luZyB0byBiZSBkcml2ZW4gYnkgYSBtaWRpIGxheWVyLCB3aGljaCBoYW5kbGVzIGFsbCB0aG9zZQotY2FzZXMgdmlhIGEgZGVmaW5lZCBBUEksIGJ1dCAtIGFtb25nIG90aGVyIHRoaW5ncyAtIGlzIHNsb3csIGRvZXNuJ3QgZG8KLWZsb3cgY29udHJvbCwgYW5kIGlzIGEgTE9UIG9mIGV4dHJhIHdvcmsuIEZyYW5rbHksIEknZCBsaWtlIHRvIGtlZXAgdGhlCitUaGUgQVBJIGlzIG5vdGhpbmcgbW9yZSB0aGFuIHRoZSBVU0IgY29tbWFuZHMgaXNzdWVkIHRvIHRoZSBkZXZpY2UuIFdoeT8KKworVGhlIGNvbnRyb2wgd2hlZWwvZmFkZXIgY2FuIGdlbmVyYXRlIGV2ZW50cyBmYXIgdG9vIHF1aWNrbHkgZm9yCithIHR5cGljYWwgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHRvIGtlZXAgdXAgd2l0aCB0aGVtIHZpYSBsaWJ1c2IuIElucHV0CituZWVkcyB0byBiZSAxMDAlIGFjY3VyYXRlIGFuZCBmYXN0IGluIG9yZGVyIGZvciB0aGUgYWxwaGF0cmFjayBvciB0cmFuenBvcnQKK3RvIGJlIHVzZWZ1bC4KKworVUlPIHdvdWxkIGJlIHVzZWZ1bCBleGNlcHQgdGhhdCB1c2IgZGlzY29ubmVjdCBldmVudHMgbmVlZAordG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkuCisKK0Egc3lzZnMgaW50ZXJmYWNlIGlzIHBlcmZlY3QgZm9yIHNpbXBsZSB1c2Vyc3BhY2UgYXBwcyB0byBkbyBmdW4gdGhpbmdzIHdpdGgKK3RoZSBsaWdodHMgYW5kIHNjcmVlbi4gQnV0IGl0J3MgZmFpcmx5IGxvdXN5IGZvciBoYW5kbGluZyBpbnB1dCBldmVudHMgYW5kCit2ZXJ5IGxvdXN5IGZvciB3YXRjaGluZyB0aGUgc3RhdGUgb2YgdGhlIHNodXR0bGUgd2hlZWwuCisKK0EgbGludXggaW5wdXQgZXZlbnRzIGludGVyZmFjZSBpcyBncmVhdCBmb3IgdGhlIGlucHV0IGV2ZW50cyBhbmQgc2h1dHRsZSB3aGVlbC4KKyogSXQncyB0aGVvcmV0aWNhbGx5IE9LIG9uIExFRHMuCisqIEEgZmFkZXIgY2FuIGJlIG1hcHBlZCB0byBhbiBhYnNvbHV0ZSBtb3VzZSBkZXZpY2UuCisqIEJ1dCB0aGVyZSBpcyBubyBMQ0Qgc3VwcG9ydCBhdCBhbGwsIG9yIGZhZGVyIGZlZWRiYWNrIHN1cHBvcnQgaW4gdGhhdCBBUEkKKworU28sIHRodXMsIHRoZXNlIHN0dWJieSBkcml2ZXJzIGV4aXN0LgorCitJbiB0aGUgZW5kIHRoaXMgY291bGQgYmUgZHJpdmVuIGJ5IGEgbWlkaSBsYXllciwgd2hpY2ggaGFuZGxlcyBhbGwgdGhvc2UKK2Nhc2VzIHZpYSBhIHdlbGwgZGVmaW5lZCBBUEksIGJ1dCAtIGFtb25nIG90aGVyIHRoaW5ncyAtIGlzIHNsb3csIGRvZXNuJ3QgZG8KK2Zsb3cgY29udHJvbCwgYW5kIGlzIGEgTE9UIG9mIGV4dHJhIHdvcmssIG5vbmUgb2Ygd2hpY2ggaXMgcmVxdWlyZWQgYXQKK3RoZSBrZXJuZWwgbGV2ZWwgKHByb2JhYmx5KS4gRnJhbmtseSwgSSdkIGxpa2UgdG8ga2VlcCB0aGUKIGNvcmUgZHJpdmVyIHNpbXBsZSBiZWNhdXNlIHRoZSBvbmx5IHJlYWx0aW1lIHdvcmsgcmVhbGx5IHJlcXVpcmVkIGlzCiB0aGUgYm90dG9tIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBvdXRwdXQgb3ZlcmxhcHBpbmcuCiAKLUV4cG9zaW5nIHNvbWUgc29ydCBvZiBjbGVhbiBhaW8gYXBpIHRvIHVzZXJzcGFjZSB3b3VsZCBiZSBwZXJmZWN0LiBXaGF0IHRoYXQKK0V4cG9zaW5nIHNvbWUgc29ydCBvZiBjbGVhbiBhcGkgdG8gdXNlcnNwYWNlIHdvdWxkIGJlIHBlcmZlY3QuIFdoYXQgdGhhdAogQVBJIGxvb2tzIGxpa2U/IEdhaC4gYmVhdHMgbWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYwppbmRleCA2MTM2ZTNmLi5iY2JhMTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmMKQEAgLTQxLDE5ICs0MSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKLSNpbmNsdWRlICJzdXJmYWNlX3N5c2ZzLmgiCi0KLS8qIG1ha2UgdGhpcyB3b3JrIG9uIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyAqLwotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCi0jaW5jbHVkZSAiZnJvbnRpZXJfY29tcGF0LmgiCi0jZW5kaWYgLyogb2xkZXIga2VybmVsIHZlcnNpb25zICovCi0KICNpbmNsdWRlICJhbHBoYXRyYWNrLmgiCiAKICNkZWZpbmUgVkVORE9SX0lECTB4MTY1YgpAQCAtNjIsMTkgKzU0LDE4IEBACiAjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwogI2RlZmluZSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFCTAKICNlbHNlCi0vLyBGSVhNRSAxNzYgLSBpcyBhbm90aGVyIGRyaXZlcidzIG1pbm9yIC0gYXBwbHkgZm9yIHRoYXQKLS8vICNkZWZpbmUgVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRQkxNzcKKy8qIEZJWE1FIDE3NiAtIGlzIGFub3RoZXIgZHJpdmVyJ3MgbWlub3IgLSBhcHBseSBmb3IgdGhhdCAqLwogI2RlZmluZSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFCTE3NgogI2VuZGlmCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYWxwaGF0cmFja190YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAotCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYWxwaGF0cmFja190YWJsZVtdID0geworCXtVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCl9LAorCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfYWxwaGF0cmFja190YWJsZSk7Ci1NT0RVTEVfVkVSU0lPTigiMC40MCIpOworTU9EVUxFX1ZFUlNJT04oIjAuNDEiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgVGFodCA8bUB0YWh0Lm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQWxwaGF0cmFjayBVU0IgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC05MywxOCArODQsMTggQEAKICNkZWZpbmUgQUxQSEFUUkFDS19VU0JfVElNRU9VVCAxMAogI2RlZmluZSBPVVRQVVRfQ01EX1NJWkUgOAogI2RlZmluZSBJTlBVVF9DTURfU0laRSAxMgorI2RlZmluZSBBTFBIQVRSQUNLX0RFQlVHIDAKIAotCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKK3N0YXRpYyBpbnQgZGVidWcgPSBBTFBIQVRSQUNLX0RFQlVHOwogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KLSNkZWZpbmUgZGJnX2luZm8oZGV2LCBmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIGRldl9pbmZvKGRldiAsIGZvcm1hdCAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZ19pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIFwKKyAgICB7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBhbHBoYXRyYWNrX29jbWRfaW5mbyhkZXYsIGNtZCwgZm9ybWF0LCBhcmcuLi4pCiAKICNkZWZpbmUgYWxwaGF0cmFja19pY21kX2luZm8oZGV2LCBjbWQsIGZvcm1hdCwgYXJnLi4uKQogCi0KIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CkBAIC0xMTYsMTQgKzEwNywxNCBAQAogCiBzdGF0aWMgaW50IHJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOwogCi1tb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocmluZ19idWZmZXJfc2l6ZSwgIlJlYWQgcmluZyBidWZmZXIgc2l6ZSIpOwogCiAvKiBUaGUgd3JpdGVfYnVmZmVyIGNhbiBvbmUgZGF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgb3V0IHRyYW5zZmVyLgogICovCiAKIHN0YXRpYyBpbnQgd3JpdGVfYnVmZmVyX3NpemUgPSBXUklURV9CVUZGRVJfU0laRTsKLW1vZHVsZV9wYXJhbSh3cml0ZV9idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX2J1ZmZlcl9zaXplLCAiV3JpdGUgYnVmZmVyIHNpemUiKTsKIAogLyoKQEAgLTEzMyw1NSArMTI0LDU2IEBACiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA9IEFMUEhBVFJBQ0tfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwgIk1pbmltdW0gaW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwsCisJCSAiTWluaW11bSBpbnRlcnJ1cHQgaW4gaW50ZXJ2YWwgaW4gbXMiKTsKIAogc3RhdGljIGludCBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA9IEFMUEhBVFJBQ0tfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLCAiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7Ci0KLQorTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCwKKwkJICJNaW5pbXVtIGludGVycnVwdCBvdXQgaW50ZXJ2YWwgaW4gbXMiKTsKIAogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIAogc3RydWN0IHVzYl9hbHBoYXRyYWNrIHsKLQlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UqCWludGY7CQkvKiBzYXZlIG9mZiB0aGUgdXNiIGludGVyZmFjZSBwb2ludGVyICovCi0JaW50CQkJb3Blbl9jb3VudDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsJLyogc2F2ZSBvZmYgdGhlIHVzYiBpbnRlcmZhY2UgcG9pbnRlciAqLworCWludCBvcGVuX2NvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KIAotCXN0cnVjdCBhbHBoYXRyYWNrX2ljbWQJKCpyaW5nX2J1ZmZlcilbUklOR19CVUZGRVJfU0laRV07IC8qIGp1c3QgbWFrZSBjIGhhcHB5ICovCi0Jc3RydWN0IGFscGhhdHJhY2tfb2NtZAkoKndyaXRlX2J1ZmZlcilbV1JJVEVfQlVGRkVSX1NJWkVdOyAvKiBqdXN0IG1ha2UgYyBoYXBweSAqLwotCXVuc2lnbmVkIGludAkJcmluZ19oZWFkOwotCXVuc2lnbmVkIGludAkJcmluZ190YWlsOworCS8qIG1ha2UgZ2NjIGhhcHB5ICovCisJc3RydWN0IGFscGhhdHJhY2tfaWNtZCAoKnJpbmdfYnVmZmVyKVtSSU5HX0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3QgYWxwaGF0cmFja19vY21kICgqd3JpdGVfYnVmZmVyKVtXUklURV9CVUZGRVJfU0laRV07CisJdW5zaWduZWQgaW50IHJpbmdfaGVhZDsKKwl1bnNpZ25lZCBpbnQgcmluZ190YWlsOwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CiAKLQl1bnNpZ25lZCBjaGFyKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKLQl1bnNpZ25lZCBjaGFyKgkJb2xkaV9idWZmZXI7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBpbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7Ci0Jc3RydWN0IHVyYioJCWludGVycnVwdF9pbl91cmI7Ci0JaW50CQkJaW50ZXJydXB0X2luX2ludGVydmFsOwotCXNpemVfdAkJCWludGVycnVwdF9pbl9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9pbl9ydW5uaW5nOwotCWludAkJCWludGVycnVwdF9pbl9kb25lOworCXVuc2lnbmVkIGNoYXIgKmludGVycnVwdF9pbl9idWZmZXI7CisJdW5zaWduZWQgY2hhciAqb2xkaV9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqaW50ZXJydXB0X2luX3VyYjsKKwlpbnQgaW50ZXJydXB0X2luX2ludGVydmFsOworCXNpemVfdCBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZTsKKwlpbnQgaW50ZXJydXB0X2luX3J1bm5pbmc7CisJaW50IGludGVycnVwdF9pbl9kb25lOwogCi0JY2hhcioJCQlpbnRlcnJ1cHRfb3V0X2J1ZmZlcjsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9vdXRfZW5kcG9pbnQ7Ci0Jc3RydWN0IHVyYioJCWludGVycnVwdF9vdXRfdXJiOwotCWludAkJCWludGVycnVwdF9vdXRfaW50ZXJ2YWw7Ci0Jc2l6ZV90CQkJaW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9vdXRfYnVzeTsKKwljaGFyICppbnRlcnJ1cHRfb3V0X2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9vdXRfZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqaW50ZXJydXB0X291dF91cmI7CisJaW50IGludGVycnVwdF9vdXRfaW50ZXJ2YWw7CisJc2l6ZV90IGludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZTsKKwlpbnQgaW50ZXJydXB0X291dF9idXN5OwogCiAJYXRvbWljX3Qgd3JpdGVzX3BlbmRpbmc7Ci0JaW50IGV2ZW50OyAvKiBhbHRlcm5hdGUgaW50ZXJmYWNlIHRvIGV2ZW50cyAqLwotCWludCBmYWRlcjsgLyogMTAgYml0cyAqLwotCWludCBsaWdodHM7IC8qIDIzIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyIGR1bXBfc3RhdGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBlbmFibGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBvZmZsaW5lOyAvKiBpZiB0aGUgZGV2aWNlIGlzIG91dCBvZiByYW5nZSBvciBhc2xlZXAgKi8KLQl1bnNpZ25lZCBjaGFyIHZlcmJvc2U7IC8qIGJlIHZlcmJvc2UgaW4gZXJyb3IgcmVwb3J0aW5nICovCi0JdW5zaWduZWQgY2hhciAgbGFzdF9jbWRbT1VUUFVUX0NNRF9TSVpFXTsKLQl1bnNpZ25lZCBjaGFyICBzY3JlZW5bMzJdOworCWludCBldmVudDsJCS8qIGFsdGVybmF0ZSBpbnRlcmZhY2UgdG8gZXZlbnRzICovCisJaW50IGZhZGVyOwkJLyogMTAgYml0cyAqLworCWludCBsaWdodHM7CQkvKiAyMyBiaXRzICovCisJdW5zaWduZWQgY2hhciBkdW1wX3N0YXRlOwkvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOwkvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgb2ZmbGluZTsJLyogaWYgdGhlIGRldmljZSBpcyBvdXQgb2YgcmFuZ2Ugb3IgYXNsZWVwICovCisJdW5zaWduZWQgY2hhciB2ZXJib3NlOwkvKiBiZSB2ZXJib3NlIGluIGVycm9yIHJlcG9ydGluZyAqLworCXVuc2lnbmVkIGNoYXIgbGFzdF9jbWRbT1VUUFVUX0NNRF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIHNjcmVlblszMl07CiB9OwogCiAvKiBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0KCkgKi8KQEAgLTIxOSw3ICsyMTEsNyBAQAogCWtmcmVlKGRldi0+cmluZ19idWZmZXIpOwogCWtmcmVlKGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcik7CiAJa2ZyZWUoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7Ci0Ja2ZyZWUoZGV2KTsgLy8gZml4bWUgb2xkaV9idWZmZXIKKwlrZnJlZShkZXYpOwkJLyogZml4bWUgb2xkaV9idWZmZXIgKi8KIH0KIAogLyoqCkBAIC0yMzQsMzkgKzIyNiw1MiBAQAogCiAJaWYgKHVyYi0+c3RhdHVzKSB7CiAJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8Ci0JCSAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAotCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgeworCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgewogCQkJZ290byBleGl0OwogCQl9IGVsc2UgewotCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKLQkJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJCWdvdG8gcmVzdWJtaXQ7IC8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCisJCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkJICIlczogbm9uemVybyBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkgdXJiLT5zdGF0dXMpOworCQkJZ290byByZXN1Ym1pdDsJLyogbWF5YmUgd2UgY2FuIHJlY292ZXIgKi8KIAkJfQogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gSU5QVVRfQ01EX1NJWkUpIHsKIAkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAotCQkJICJVcmIgbGVuZ3RoIHdhcyAlZCBieXRlcyEhIERvIHNvbWV0aGluZyBpbnRlbGxpZ2VudCBcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkgIlVyYiBsZW5ndGggd2FzICVkIGJ5dGVzISEiCisJCQkgIkRvIHNvbWV0aGluZyBpbnRlbGxpZ2VudCBcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfSBlbHNlIHsKLQkJIGFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kLCIlcyIsICJibGEiKTsKLQkJIGlmKG1lbWNtcChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsZGV2LT5vbGRpX2J1ZmZlcixJTlBVVF9DTURfU0laRSk9PTApIHsKLQkJCQkJCWdvdG8gcmVzdWJtaXQ7CisJCWFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCQkgICAgICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWQsCisJCQkJICAgICAiJXMiLCAiYmxhIik7CisJCWlmIChtZW1jbXAKKwkJICAgIChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIGRldi0+b2xkaV9idWZmZXIsCisJCSAgICAgSU5QVVRfQ01EX1NJWkUpID09IDApIHsKKwkJCWdvdG8gcmVzdWJtaXQ7CiAJCX0KLQkJbWVtY3B5KGRldi0+b2xkaV9idWZmZXIsZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLElOUFVUX0NNRF9TSVpFKTsKKwkJbWVtY3B5KGRldi0+b2xkaV9idWZmZXIsIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJICAgICAgIElOUFVUX0NNRF9TSVpFKTsKIAogI2lmIFNVUFBSRVNTX0VYVFJBX09GRkxJTkVfRVZFTlRTCi0JaWYoZGV2LT5vZmZsaW5lID09IDIgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZ290byByZXN1Ym1pdDsgfQotCQlpZihkZXYtPm9mZmxpbmUgPT0gMSAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeyBkZXYtPm9mZmxpbmUgPSAyOyBnb3RvIHJlc3VibWl0OyB9CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMiAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMSAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeworCQkJZGV2LT5vZmZsaW5lID0gMjsKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KIC8qIEFsd2F5cyBwYXNzIG9uZSBvZmZsaW5lIGV2ZW50IHVwIHRoZSBzdGFjayAqLwotCQlpZihkZXYtPm9mZmxpbmUgPiAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSAhPSAweGZmKSB7IGRldi0+b2ZmbGluZSA9IDA7IH0KLQkJaWYoZGV2LT5vZmZsaW5lID09IDAgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZGV2LT5vZmZsaW5lID0gMTsgfQorCQlpZiAoZGV2LT5vZmZsaW5lID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gIT0gMHhmZikKKwkJCWRldi0+b2ZmbGluZSA9IDA7CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJCWRldi0+b2ZmbGluZSA9IDE7CiAjZW5kaWYKLQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwgX19mdW5jX18sZGV2LT5yaW5nX2hlYWQsZGV2LT5yaW5nX3RhaWwpOwotCQluZXh0X3JpbmdfaGVhZCA9IChkZXYtPnJpbmdfaGVhZCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7CisJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsCisJCQkgX19mdW5jX18sIGRldi0+cmluZ19oZWFkLCBkZXYtPnJpbmdfdGFpbCk7CisJCW5leHRfcmluZ19oZWFkID0gKGRldi0+cmluZ19oZWFkICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOwogCiAJCWlmIChuZXh0X3JpbmdfaGVhZCAhPSBkZXYtPnJpbmdfdGFpbCkgewogCQkJbWVtY3B5KCYoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfaGVhZF0pLAotCQkJCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCSAgICAgICBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkZXYtPnJpbmdfaGVhZCA9IG5leHRfcmluZ19oZWFkOwogCQkJcmV0dmFsID0gMDsKIAkJCW1lbXNldChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIDAsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CkBAIC0zMzAsNyArMzM1LDcgQEAKIAogCWlmICghaW50ZXJmYWNlKSB7CiAJCWVycigiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLAotCQkgICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CisJCSAgICBfX2Z1bmNfXywgc3VibWlub3IpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIHVubG9ja19kaXNjb25uZWN0X2V4aXQ7CiAJfQpAQCAtMzYxLDExICszNjYsMTEgQEAKIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwKIAkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSksCiAJCQkgdXNiX3JjdmludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAotCQkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT4KKwkJCQkJYkVuZHBvaW50QWRkcmVzcyksCiAJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAogCQkJIGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsCi0JCQkgdXNiX2FscGhhdHJhY2tfaW50ZXJydXB0X2luX2NhbGxiYWNrLAotCQkJIGRldiwKKwkJCSB1c2JfYWxwaGF0cmFja19pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssIGRldiwKIAkJCSBkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCk7CiAKIAlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMTsKQEAgLTM3NSw3ICszODAsOCBAQAogCiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9pbl91cmIgJWRcbiIsIHJldHZhbCk7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfaW5fdXJiICVkXG4iLCByZXR2YWwpOwogCQlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMDsKIAkJZGV2LT5vcGVuX2NvdW50ID0gMDsKIAkJZ290byB1bmxvY2tfZXhpdDsKQEAgLTM4NCw3ICszOTAsNiBAQAogCS8qIHNhdmUgZGV2aWNlIGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAKLQogdW5sb2NrX2V4aXQ6CiAJdXAoJmRldi0+c2VtKTsKIApAQCAtNDMwLDcgKzQzNSw5IEBACiAKIAkvKiB3YWl0IHVudGlsIHdyaXRlIHRyYW5zZmVyIGlzIGZpbmlzaGVkICovCiAJaWYgKGRldi0+aW50ZXJydXB0X291dF9idXN5KQotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndyaXRlX3dhaXQsICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSwgMiAqIEhaKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53cml0ZV93YWl0LAorCQkJCQkJICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSwKKwkJCQkJCSAyICogSFopOwogCXVzYl9hbHBoYXRyYWNrX2Fib3J0X3RyYW5zZmVycyhkZXYpOwogCWRldi0+b3Blbl9jb3VudCA9IDA7CiAKQEAgLTQ0NCw3ICs0NTEsNyBAQAogLyoqCiAgKgl1c2JfYWxwaGF0cmFja19wb2xsCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX2FscGhhdHJhY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX2FscGhhdHJhY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCiB7CiAJc3RydWN0IHVzYl9hbHBoYXRyYWNrICpkZXY7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwpAQCAtNDY1LDggKzQ3Miw4IEBACiAvKioKICAqCXVzYl9hbHBoYXRyYWNrX3JlYWQKICAqLwotc3RhdGljIHNzaXplX3QgdXNiX2FscGhhdHJhY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAotCQkJICAgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgdXNiX2FscGhhdHJhY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdXNiX2FscGhhdHJhY2sgKmRldjsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTQ5MywzMCArNTAwLDM2IEBACiAJfQogCiAJd2hpbGUgKGRldi0+cmluZ19oZWFkID09IGRldi0+cmluZ190YWlsKSB7Ci0JCQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCQkJCQkJcmV0dmFsID0gLUVBR0FJTjsKLQkJCQkJCQkJCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JCQkJCX0KLQkJCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDAgOwotCQkJCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT5yZWFkX3dhaXQsIGRldi0+aW50ZXJydXB0X2luX2RvbmUpOwotCQkJCQlpZiAocmV0dmFsIDwgMCkgewotCQkJCQkJCQkJZ290byB1bmxvY2tfZXhpdDsKLQkJCQkJfQorCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOworCQlyZXR2YWwgPQorCQkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+cmVhZF93YWl0LAorCQkJCQkgICAgIGRldi0+aW50ZXJydXB0X2luX2RvbmUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJfQogCi0JYWxwaGF0cmFja19vY21kX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kLCAiJXMiLCAiOiBjb3B5aW5nIHRvIHVzZXJzcGFjZSIpOworCWFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCSAgICAgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZCwgIiVzIiwKKwkJCSAgICAgIjogY29weWluZyB0byB1c2Vyc3BhY2UiKTsKIAotCSAgIGMgPSAwOwotCSAgIHdoaWxlKChjIDwgY291bnQpICYmIChkZXYtPnJpbmdfdGFpbCAhPSBkZXYtPnJpbmdfaGVhZCkpIHsKLQkJCQkJCSBpZiAoY29weV90b191c2VyKCZidWZmZXJbY10sICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXSwgSU5QVVRfQ01EX1NJWkUpKSB7Ci0JCQkJCQkJCQkJIHJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJCQkJCQkJIGdvdG8gdW5sb2NrX2V4aXQ7Ci0JCQkJCQkgfQotCQkJCQkJIGRldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKLQkJCQkJCSBjKz1JTlBVVF9DTURfU0laRTsKLQkJCQkJCSBkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLCBfX2Z1bmNfXyxkZXYtPnJpbmdfaGVhZCxkZXYtPnJpbmdfdGFpbCk7Ci0JICAgfQotCSAgIHJldHZhbCA9IGM7CisJYyA9IDA7CisJd2hpbGUgKChjIDwgY291bnQpICYmIChkZXYtPnJpbmdfdGFpbCAhPSBkZXYtPnJpbmdfaGVhZCkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcgorCQkgICAgKCZidWZmZXJbY10sICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXSwKKwkJICAgICBJTlBVVF9DTURfU0laRSkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCWRldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOworCQljICs9IElOUFVUX0NNRF9TSVpFOworCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLAorCQkJIF9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOworCX0KKwlyZXR2YWwgPSBjOwogCiB1bmxvY2tfZXhpdDoKIAkvKiB1bmxvY2sgdGhlIGRldmljZSAqLwpAQCAtNTI5LDggKzU0Miw5IEBACiAvKioKICAqCXVzYl9hbHBoYXRyYWNrX3dyaXRlCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHVzYl9hbHBoYXRyYWNrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgdXNiX2FscGhhdHJhY2tfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB1c2JfYWxwaGF0cmFjayAqZGV2OwogCXNpemVfdCBieXRlc190b193cml0ZTsKQEAgLTU2MSwxOSArNTc1LDI0IEBACiAJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJZ290byB1bmxvY2tfZXhpdDsKIAkJfQotCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT53cml0ZV93YWl0LCAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpOwotCQlpZiAocmV0dmFsIDwgMCkgeworCQlyZXR2YWwgPQorCQkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwKKwkJCQkJICAgICAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpOworCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JCX0KIAl9CiAKIAkvKiB3cml0ZSB0aGUgZGF0YSBpbnRvIGludGVycnVwdF9vdXRfYnVmZmVyIGZyb20gdXNlcnNwYWNlICovCi0gIC8qIEZJWE1FIC0gaWYgeW91IHdyaXRlIG1vcmUgdGhhbiAxMiBieXRlcyB0aGlzIGJyZWFrcyAqLwotCWJ5dGVzX3RvX3dyaXRlID0gbWluKGNvdW50LCB3cml0ZV9idWZmZXJfc2l6ZSpkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSk7CisJLyogRklYTUUgLSBpZiB5b3Ugd3JpdGUgbW9yZSB0aGFuIDEyIGJ5dGVzIHRoaXMgYnJlYWtzICovCisJYnl0ZXNfdG9fd3JpdGUgPQorCSAgICBtaW4oY291bnQsIHdyaXRlX2J1ZmZlcl9zaXplICogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOwogCWlmIChieXRlc190b193cml0ZSA8IGNvdW50KQotCQlkZXZfd2FybigmZGV2LT5pbnRmLT5kZXYsICJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLGNvdW50LWJ5dGVzX3RvX3dyaXRlKTsKKwkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAorCQkJICJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLAorCQkJIGNvdW50IC0gYnl0ZXNfdG9fd3JpdGUpOwogCi0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGNvdW50ID0gJXpkLCBieXRlc190b193cml0ZSA9ICV6ZFxuIiwgX19mdW5jX18sIGNvdW50LCBieXRlc190b193cml0ZSk7CisJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGNvdW50ID0gJXpkLCBieXRlc190b193cml0ZSA9ICV6ZFxuIiwKKwkJIF9fZnVuY19fLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlciwgYnl0ZXNfdG9fd3JpdGUpKSB7CiAJCXJldHZhbCA9IC1FRkFVTFQ7CkBAIC01ODksMTEgKzYwOCwxMCBAQAogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwKIAkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGRldi0+aW50ZiksCiAJCQkgdXNiX3NuZGludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAotCQkJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsCi0JCQkgYnl0ZXNfdG9fd3JpdGUsCi0JCQkgdXNiX2FscGhhdHJhY2tfaW50ZXJydXB0X291dF9jYWxsYmFjaywKLQkJCSBkZXYsCisJCQkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCQkJCWJFbmRwb2ludEFkZHJlc3MpLAorCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ5dGVzX3RvX3dyaXRlLAorCQkJIHVzYl9hbHBoYXRyYWNrX2ludGVycnVwdF9vdXRfY2FsbGJhY2ssIGRldiwKIAkJCSBkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwpOwogCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMTsKIAlhdG9taWNfaW5jKCZkZXYtPndyaXRlc19wZW5kaW5nKTsKQEAgLTYxOCwxMiArNjM2LDEyIEBACiAKIC8qIGZpbGUgb3BlcmF0aW9ucyBuZWVkZWQgd2hlbiB3ZSByZWdpc3RlciB0aGlzIGRyaXZlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2FscGhhdHJhY2tfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkucmVhZCAgPQl1c2JfYWxwaGF0cmFja19yZWFkLAotCS53cml0ZSA9CXVzYl9hbHBoYXRyYWNrX3dyaXRlLAotCS5vcGVuID0JCXVzYl9hbHBoYXRyYWNrX29wZW4sCi0JLnJlbGVhc2UgPQl1c2JfYWxwaGF0cmFja19yZWxlYXNlLAotCS5wb2xsID0JCXVzYl9hbHBoYXRyYWNrX3BvbGwsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSB1c2JfYWxwaGF0cmFja19yZWFkLAorCS53cml0ZSA9IHVzYl9hbHBoYXRyYWNrX3dyaXRlLAorCS5vcGVuID0gdXNiX2FscGhhdHJhY2tfb3BlbiwKKwkucmVsZWFzZSA9IHVzYl9hbHBoYXRyYWNrX3JlbGVhc2UsCisJLnBvbGwgPSB1c2JfYWxwaGF0cmFja19wb2xsLAogfTsKIAogLyoKQEAgLTYzMiwxOSArNjUwLDE5IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYl9hbHBoYXRyYWNrX2NsYXNzID0gewotCS5uYW1lID0JCSJhbHBoYXRyYWNrJWQiLAotCS5mb3BzID0JCSZ1c2JfYWxwaGF0cmFja19mb3BzLAotCS5taW5vcl9iYXNlID0JVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRSwKKwkubmFtZSA9ICJhbHBoYXRyYWNrJWQiLAorCS5mb3BzID0gJnVzYl9hbHBoYXRyYWNrX2ZvcHMsCisJLm1pbm9yX2Jhc2UgPSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFLAogfTsKIAotCiAvKioKICAqCXVzYl9hbHBoYXRyYWNrX3Byb2JlCiAgKgogICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKICAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCiAgKi8KLXN0YXRpYyBpbnQgdXNiX2FscGhhdHJhY2tfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgdXNiX2FscGhhdHJhY2tfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgdXNiX2FscGhhdHJhY2sgKmRldiA9IE5VTEw7CkBAIC02ODMsMjggKzcwMSwzNSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID09IE5VTEwpCi0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCAodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgbm90IGZvdW5kIgorCQkJICIodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CiAKLQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplID0gbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplID0KKwkgICAgbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAogCWlmIChkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplICE9IDY0KQotCSAgICBkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IGluIGVuZHBvaW50IHNpemUgaXMgbm90IDY0IVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgaW4gZW5kcG9pbnQgc2l6ZSBpcyBub3QgNjQhXG4iKTsKIAotCWlmKHJpbmdfYnVmZmVyX3NpemUgPT0gMCkgeyByaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsgfQorCWlmIChyaW5nX2J1ZmZlcl9zaXplID09IDApCisJCXJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOwogCi0JdHJ1ZV9zaXplID0gbWluKHJpbmdfYnVmZmVyX3NpemUsUklOR19CVUZGRVJfU0laRSk7CisJdHJ1ZV9zaXplID0gbWluKHJpbmdfYnVmZmVyX3NpemUsIFJJTkdfQlVGRkVSX1NJWkUpOwogCi0JLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4gTmVlZGVkPyAqLwotCi0vLwlkZXYtPnJpbmdfYnVmZmVyID0ga21hbGxvYygodHJ1ZV9zaXplKnNpemVvZihzdHJ1Y3QgYWxwaGF0cmFja19pY21kKSkrMTIsIEdGUF9LRVJORUwpOwotCWRldi0+cmluZ19idWZmZXIgPSBrbWFsbG9jKCh0cnVlX3NpemUqc2l6ZW9mKHN0cnVjdCBhbHBoYXRyYWNrX2ljbWQpKSwgR0ZQX0tFUk5FTCk7CisJLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4KKwkgICBOZWVkZWQ/ICovCisJZGV2LT5yaW5nX2J1ZmZlciA9CisJICAgIGttYWxsb2MoKHRydWVfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYWxwaGF0cmFja19pY21kKSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkZXYtPnJpbmdfYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGlucHV0IHJpbmdfYnVmZmVyIG9mIHNpemUgJWRcbiIsdHJ1ZV9zaXplKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJIkNvdWxkbid0IGFsbG9jYXRlIGlucHV0IHJpbmdfYnVmZmVyIG9mIHNpemUgJWRcbiIsCisJCQl0cnVlX3NpemUpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9IGttYWxsb2MoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0KKwkgICAga21hbGxvYyhkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOwpAQCAtNzIxLDIzICs3NDYsMzAgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSA9IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA/IGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+d01heFBhY2tldFNpemUpIDoKLQkJCQkJCQkJCSB1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKKwlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSA9CisJICAgIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA/IGxlMTZfdG9fY3B1KGRldi0+CisJCQkJCQkgICAgICBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT4KKwkJCQkJCSAgICAgIHdNYXhQYWNrZXRTaXplKSA6IHVkZXYtPgorCSAgICBkZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKIAotCWlmIChkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSAhPTY0KQotCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IG91dCBlbmRwb2ludCBzaXplIGlzIG5vdCA2NCEpXG4iKTsKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgIT0gNjQpCisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgc2l6ZSBpcyBub3QgNjQhKVxuIik7CiAKLQlpZih3cml0ZV9idWZmZXJfc2l6ZSA9PSAwKSB7IHdyaXRlX2J1ZmZlcl9zaXplID0gV1JJVEVfQlVGRkVSX1NJWkU7IH0KLQl0cnVlX3NpemUgPSBtaW4od3JpdGVfYnVmZmVyX3NpemUsV1JJVEVfQlVGRkVSX1NJWkUpOworCWlmICh3cml0ZV9idWZmZXJfc2l6ZSA9PSAwKQorCQl3cml0ZV9idWZmZXJfc2l6ZSA9IFdSSVRFX0JVRkZFUl9TSVpFOworCXRydWVfc2l6ZSA9IG1pbih3cml0ZV9idWZmZXJfc2l6ZSwgV1JJVEVfQlVGRkVSX1NJWkUpOwogCi0JZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2ModHJ1ZV9zaXplKmRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyID0KKwkgICAga21hbGxvYyh0cnVlX3NpemUgKiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldi0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXJcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWRldi0+d3JpdGVfYnVmZmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFscGhhdHJhY2tfb2NtZCkqdHJ1ZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPndyaXRlX2J1ZmZlciA9CisJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbHBoYXRyYWNrX29jbWQpICogdHJ1ZV9zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT53cml0ZV9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgd3JpdGVfYnVmZmVyIFxuIik7CkBAIC03NDksMjUgKzc4MSwzNiBAQAogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X3VyYlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsID0gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X2luX2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9CisJICAgIG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPgorCSAgICBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJICAgIGJJbnRlcnZhbCA/IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJICAgIGJJbnRlcnZhbDsKIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50KQotCQlkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwkJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsID0KKwkJICAgIG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsID4KKwkJICAgIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCSAgICBiSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA6IGRldi0+CisJCSAgICBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWw7CiAKIAkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwogCi0JYXRvbWljX3NldCgmZGV2LT53cml0ZXNfcGVuZGluZywwKTsKKwlhdG9taWNfc2V0KCZkZXYtPndyaXRlc19wZW5kaW5nLCAwKTsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfYWxwaGF0cmFja19jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KLQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuIik7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKIAkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JZGV2X2luZm8oJmludGYtPmRldiwgIkFscGhhdHJhY2sgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCi0JCShpbnRmLT5taW5vciAtIFVTQl9BTFBIQVRSQUNLX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGludGYtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkgIkFscGhhdHJhY2sgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSAoaW50Zi0+bWlub3IgLSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFKSwgVVNCX01BSk9SLAorCQkgaW50Zi0+bWlub3IpOwogCiBleGl0OgogCXJldHVybiByZXR2YWw7CkBAIC04MDksNyArODUyLDcgQEAKIAkJdXAoJmRldi0+c2VtKTsKIAl9CiAKLQlhdG9taWNfc2V0KCZkZXYtPndyaXRlc19wZW5kaW5nLDApOworCWF0b21pY19zZXQoJmRldi0+d3JpdGVzX3BlbmRpbmcsIDApOwogCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiQWxwaGF0cmFjayBTdXJmYWNlICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLApAQCAtODE4LDEwICs4NjEsMTAgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9hbHBoYXRyYWNrX2RyaXZlciA9IHsKLQkubmFtZSA9CQkiYWxwaGF0cmFjayIsCi0JLnByb2JlID0JdXNiX2FscGhhdHJhY2tfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQl1c2JfYWxwaGF0cmFja19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXVzYl9hbHBoYXRyYWNrX3RhYmxlLAorCS5uYW1lID0gImFscGhhdHJhY2siLAorCS5wcm9iZSA9IHVzYl9hbHBoYXRyYWNrX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gdXNiX2FscGhhdHJhY2tfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSB1c2JfYWxwaGF0cmFja190YWJsZSwKIH07CiAKIC8qKgpAQCAtODM0LDcgKzg3Nyw4IEBACiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2FscGhhdHJhY2tfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiIF9fRklMRV9fCisJCSAgICAiIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTg1MCw0ICs4OTQsMyBAQAogCiBtb2R1bGVfaW5pdCh1c2JfYWxwaGF0cmFja19pbml0KTsKIG1vZHVsZV9leGl0KHVzYl9hbHBoYXRyYWNrX2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5oIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suaAppbmRleCAzNWM5MGE5Li4xMGE3OTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmgKQEAgLTEsNDIgKzEsMzggQEAKLSNkZWZpbmUgc2hvd19zZXRfYml0KGEpIHNob3dfc2V0X21iaXQoYWxwaGF0cmFjayxhKQotI2RlZmluZSBzaG93X3NldF9jbWQoYSkgc2hvd19zZXRfbWNtZChhbHBoYXRyYWNrLGEpCi0jZGVmaW5lIHNob3dfc2V0X2ludChhKSBzaG93X3NldF9taW50KGFscGhhdHJhY2ssYSkKLSNkZWZpbmUgc2hvd19zZXRfY2hhcihhKSBzaG93X3NldF9tY2hhcihhbHBoYXRyYWNrLGEpCi0jZGVmaW5lIHNob3dfc2V0X2xpZ2h0KGEpIHNob3dfc2V0X2ViaXQoYWxwaGF0cmFjayxMaWdodElELGxpZ2h0cyxhKQotI2RlZmluZSBzaG93X3NldF9idXR0b24oYSkgc2hvd19zZXRfZWJpdChhbHBoYXRyYWNrLEJ1dHRvbklELGJ1dHRvbixhKQotCiBzdHJ1Y3QgYWxwaGF0cmFja19pY21kIHsKLSAgICB1bnNpZ25lZCBjaGFyIGNtZFsxMl07CisJdW5zaWduZWQgY2hhciBjbWRbMTJdOwogfTsKIAogc3RydWN0IGFscGhhdHJhY2tfb2NtZCB7Ci0gICAgdW5zaWduZWQgY2hhciBjbWRbOF07CisJdW5zaWduZWQgY2hhciBjbWRbOF07CiB9OwogCisvKiBUaGVzZSBhcmUgdW51c2VkIGJ5IHRoZSBwcmVzZW50IGRyaXZlciBidXQgcHJvdmlkZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAqIHVzZXJzcGFjZSBBUEkuCisgKi8KIGVudW0gTGlnaHRJRCB7Ci0gICAgICAgIExJR0hUX0VRID0gMCwKLSAgICAgICAgTElHSFRfT1VULAotICAgICAgICBMSUdIVF9GMiwKLSAgICAgICAgTElHSFRfU0VORCwKLSAgICAgICAgTElHSFRfSU4sCi0gICAgICAgIExJR0hUX0YxLAotICAgICAgICBMSUdIVF9QQU4sCi0gICAgICAgIExJR0hUX1VOREVGMSwKLSAgICAgICAgTElHSFRfVU5ERUYyLAotICAgICAgICBMSUdIVF9TSElGVCwKLSAgICAgICAgTElHSFRfVFJBQ0tNVVRFLAotICAgICAgICBMSUdIVF9UUkFDS1NPTE8sCi0gICAgICAgIExJR0hUX1RSQUNLUkVDLAotICAgICAgICBMSUdIVF9SRUFELAotICAgICAgICBMSUdIVF9XUklURSwKLSAgICAgICAgTElHSFRfQU5ZU09MTywKLSAgICAgICAgTElHSFRfQVVUTywKLSAgICAgICAgTElHSFRfRjQsCi0gICAgICAgIExJR0hUX1JFQ09SRCwKLSAgICAgICAgTElHSFRfV0lORE9XLAotICAgICAgICBMSUdIVF9QTFVHSU4sCi0gICAgICAgIExJR0hUX0YzLAotICAgICAgICBMSUdIVF9MT09QCisJTElHSFRfRVEgPSAwLAorCUxJR0hUX09VVCwKKwlMSUdIVF9GMiwKKwlMSUdIVF9TRU5ELAorCUxJR0hUX0lOLAorCUxJR0hUX0YxLAorCUxJR0hUX1BBTiwKKwlMSUdIVF9VTkRFRjEsCisJTElHSFRfVU5ERUYyLAorCUxJR0hUX1NISUZULAorCUxJR0hUX1RSQUNLTVVURSwKKwlMSUdIVF9UUkFDS1NPTE8sCisJTElHSFRfVFJBQ0tSRUMsCisJTElHSFRfUkVBRCwKKwlMSUdIVF9XUklURSwKKwlMSUdIVF9BTllTT0xPLAorCUxJR0hUX0FVVE8sCisJTElHSFRfRjQsCisJTElHSFRfUkVDT1JELAorCUxJR0hUX1dJTkRPVywKKwlMSUdIVF9QTFVHSU4sCisJTElHSFRfRjMsCisJTElHSFRfTE9PUAogfTsKIAogI2RlZmluZSBCVVRUT05NQVNLX0JBVFRFUlkgICAgIDB4MDAwMDQwMDAKQEAgLTYyLDggKzU4LDkgQEAKICNkZWZpbmUgQlVUVE9OTUFTS19QUkVTUzIgICAgICAweDAwMDA4MDEwCiAjZGVmaW5lIEJVVFRPTk1BU0tfUFJFU1MzICAgICAgMHgwMDAwMjAyMAogCi0vLyBsYXN0IDMgYnl0ZXMgYXJlIHRoZSBzbGlkZXIgcG9zaXRpb24KLS8vIDQwIGlzIHRoZSBhY3R1YWwgc2xpZGVyIG1vdmluZywgdGhlIG1vc3Qgc2lnIGJpdHMsIGFuZCAzIGxzYgorLyogbGFzdCAzIGJ5dGVzIGFyZSB0aGUgc2xpZGVyIHBvc2l0aW9uCisgKiA0MCBpcyB0aGUgYWN0dWFsIHNsaWRlciBtb3ZpbmcsIHRoZSBtb3N0IHNpZyBiaXRzLCBhbmQgMyBsc2IKKyAqLwogCiAjZGVmaW5lIEJVVFRPTk1BU0tfRkxJUCAgICAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgQlVUVE9OTUFTS19GMSAgICAgICAgICAgMHgwMDEwMDAwMApAQCAtNzYsMTcgKzczLDQgQEAKICNkZWZpbmUgQlVUVE9OTUFTS19QTFVHSU4gICAgICAgMHgwMDAwMDQwMAogI2RlZmluZSBCVVRUT05NQVNLX0FVVE8gICAgICAgICAweDAwMDAwMTAwCiAKLQotLy8gI2RlZmluZSBCVVRUT05NQVNLX0ZPT1RTV0lUQ0ggRklYTUUKLQotLy8gTG9va3VwLiBuYW1lLiBtaWRpIG91dC4gbWlkaSBpbi4KLQotc3RydWN0IGJ1dHRvbm1hcF90IHsKLQl1MzIgbWFzazsKLQlzaG9ydCBtaWRpX2luOwotCXNob3J0IG1pZGlfb3V0OwotCWNoYXIgKm5hbWU7Ci0vLyAgCXZvaWQgKCpmdW5jdGlvbikgKGJ1dHRvbm1hcF90ICopOwotICAJdm9pZCAoKmZ1bmN0aW9uKSAodm9pZCk7Ci19OwotCisvKiAjZGVmaW5lIEJVVFRPTk1BU0tfRk9PVFNXSVRDSCBGSVhNRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2Zyb250aWVyX2NvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2Zyb250aWVyX2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDQ1MGU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9mcm9udGllcl9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIFVTQiBkZWZpbmVzIGZvciBvbGRlciBrZXJuZWxzICovCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfZGlyX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgT1VUIGRpcmVjdGlvbgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBPVVQsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTik7Ci19Ci0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0gICAgICAgcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLSAgICAgICAgICAgICAgIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Ci19Ci0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLSAgICAgICByZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0jZW5kaWYgLyogb2xkZXIga2VybmVsIHZlcnNpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvc3VyZmFjZV9zeXNmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3N1cmZhY2Vfc3lzZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwYTU2MmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3N1cmZhY2Vfc3lzZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiBJZiB5b3UgYXJlIGdvaW5nIHRvIGFidXNlIHRoZSBwcmVwcm9jZXNzb3IsIHdoeSBub3QgQUJVU0UgdGhlIHByZXByb2Nlc3Nvcj8KLSAgIEkgc3R1Y2sgdGhpcyBoZWFkZXIgaW4gYSBzZXBhcmF0ZSBmaWxlIHNvIEkgZG9uJ3QgaGF2ZSB0byBsb29rIGF0IGl0ICovCi0KLS8vIEZJWE1FIE5lZWQgbG9ja2luZyBvciBhdG9taWMgb3BzCi0KLSNkZWZpbmUgc2hvd19zZXRfbWJpdChkbmFtZSx2YWx1ZSxiaXQpCQkJCQkJCQkJCQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCWludCB0ZW1wID0gKDEgJiYgKHQtPnZhbHVlICYgKDEgPDwgYml0KSkpOwkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0JaWYodGVtcCA+IDApIHsgbG9uZyBiID0gMSA8PCBiaXQ7IHQtPnZhbHVlIHw9IGI7IH0gXAotCWVsc2UgeyBsb25nIGIgPSB+KDEgPDwgYml0KTsgdC0+dmFsdWUgJj0gYiA7CQkJCSBcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfZWJpdChkbmFtZSxlbnVtbmFtZSx2YWx1ZSxiaXQpCQkJCQkJCQkJCQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNiaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLSAgZW51bSBlbnVtbmFtZSBsID0gYml0OyBcCi0gIGludCB0ZW1wID0gdC0+dmFsdWUgJiAoMSA8PCBsKTsJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyNiaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0gIGVudW0gZW51bW5hbWUgbCA9IGJpdDtcCi0JbG9uZyBiICA9IDEgPDwgbDsgXAotCWlmKHRlbXAgPiAwKSB7IHQtPnZhbHVlIHw9IGI7IH0JXAotCWVsc2UgeyB0LT52YWx1ZSAmPSB+YiA7CQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKLQotLy8gRklYTUUgRk9SIENPUlJFQ1RMWSBTRVRUSU5HIEhFWCBmcm9tIGEgc3RyaW5nCi0jZGVmaW5lIHNob3dfc2V0X21jbWQoZG5hbWUsdmFsdWUpCQkJCQkJCQkJCQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotICBpbnQgY291bnQgPSAwO1wKLQlpbnQgaTsgXAotCWZvciAoaSA9IDAsaTxzaXplb2YoZG5hbWUpOyBpKyspIGNvdW50ICs9IHNucHJpbnRmKGJ1ZiwgIiUwMngiLHQtPmRuYW1lW2ldKTsgXAotICByZXR1cm4oY291bnQpO1wKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi0jZGVmaW5lIHNob3dfc2V0X21pbnQoZG5hbWUsdmFsdWUpCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0LT52YWx1ZSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotCXQtPnZhbHVlID0gdGVtcDsJCQkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfbWNoYXIoZG5hbWUsdmFsdWUpCQkJCQkJCQkJCQkJCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlY1xuIiwgdC0+dmFsdWUpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jCmluZGV4IDc5YWJiNmIuLjI3NGI4MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvdHJhbnpwb3J0LmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqCiAgKi8KIAotLyoqCisvKgogICogVGhpcyBkcml2ZXIgdXNlcyBhIHJpbmcgYnVmZmVyIGZvciB0aW1lIGNyaXRpY2FsIHJlYWRpbmcgb2YKICAqIGludGVycnVwdCBpbiByZXBvcnRzIGFuZCBwcm92aWRlcyByZWFkIGFuZCB3cml0ZSBtZXRob2RzIGZvcgogICogcmF3IGludGVycnVwdCByZXBvcnRzLgpAQCAtMzAsNyArMzAsNyBAQAogICogYXMgd2Ugb25seSBoYXZlIDE3IGNvbW1hbmRzIGZvciB0aGUgdHJhbnpwb3J0LiBJbiBwYXJ0aWN1bGFyIHRoaXMgaXMKICAqIGtleSBmb3IgZ2V0dGluZyBsaWdodHMgdG8gZmxhc2ggaW4gdGltZSBhcyBvdGhlcndpc2UgbWFueSBjb21tYW5kcwogICogY2FuIGJlIGJ1ZmZlcmVkIHVwIGJlZm9yZSB0aGUgbGlnaHQgY2hhbmdlIG1ha2VzIGl0IHRvIHRoZSBpbnRlcmZhY2UuCi0qLworICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNDAsNTYgKzQwLDQ3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQotI2luY2x1ZGUgZnJvbnRpZXJfY29tcGF0LmgKLSNlbmRpZgotCiAvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLwogI2RlZmluZSBWRU5ET1JfSUQgICAweDE2NWIKLSNkZWZpbmUgUFJPRFVDVF9JRAkweDgxMDEKKyNkZWZpbmUgUFJPRFVDVF9JRCAgMHg4MTAxCiAKICNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCiAjZGVmaW5lIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRQkwCi0jZWxzZQotLy8gRklYTUUgMTc2IC0gaXMgdGhlIGxkdXNiIGRyaXZlcidzIG1pbm9yIC0gYXBwbHkgZm9yIGEgbWlub3Igc29vbgorI2Vsc2UgIC8qIEZJWE1FIDE3Ny0gaXMgdGhlIGFub3RoZXIgZHJpdmVyJ3MgbWlub3IgLSBhcHBseSBmb3IgYSBtaW5vciBzb29uICovCiAjZGVmaW5lIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRQkxNzcKICNlbmRpZgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RyYW56cG9ydF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAotCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfdHJhbnpwb3J0X3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl90cmFuenBvcnRfdGFibGUpOwotTU9EVUxFX1ZFUlNJT04oIjAuMzMiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjM1Iik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIFRhaHQgPG1AdGFodC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlRyYW56cG9ydCBVU0IgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiRnJvbnRpZXIgRGVzaWducyBUcmFuenBvcnQgQ29udHJvbCBTdXJmYWNlIik7CiAKLS8qIFRoZXNlIHR3byBhcmVuJ3QgZG9uZSB5ZXQgKi8KLQotI2RlZmluZSBTVVBQUkVTU19FWFRSQV9PTkxJTkVfRVZFTlRTIDAKLSNkZWZpbmUgQlVGRkVSRURfV1JJVEVTIDAKLQogI2RlZmluZSBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUyAxCiAjZGVmaW5lIENPTVBSRVNTX1dIRUVMX0VWRU5UUyAxCiAjZGVmaW5lIEJVRkZFUkVEX1JFQURTIDEKICNkZWZpbmUgUklOR19CVUZGRVJfU0laRSAxMDAwCiAjZGVmaW5lIFdSSVRFX0JVRkZFUl9TSVpFIDM0CiAjZGVmaW5lIFRSQU5aUE9SVF9VU0JfVElNRU9VVCAxMAorI2RlZmluZSBUUkFOWlBPUlRfREVCVUcgMAogCi0KLXN0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIGludCBkZWJ1ZyA9IFRSQU5aUE9SVF9ERUJVRzsKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCi0jZGVmaW5lIGRiZ19pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBkZXZfaW5mbyhkZXYgLCBmb3JtYXQgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbwkJCVwKKwl7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIApAQCAtMTAyLDEzICs5MywxMyBAQAogCiBzdGF0aWMgaW50IHJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOwogCi1tb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocmluZ19idWZmZXJfc2l6ZSwgIlJlYWQgcmluZyBidWZmZXIgc2l6ZSBpbiByZXBvcnRzIik7CiAKIC8qIFRoZSB3cml0ZV9idWZmZXIgY2FuIG9uZSBkYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIGludGVycnVwdCBvdXQgdHJhbnNmZXIuCiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfYnVmZmVyX3NpemUgPSBXUklURV9CVUZGRVJfU0laRTsKLW1vZHVsZV9wYXJhbSh3cml0ZV9idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX2J1ZmZlcl9zaXplLCAiV3JpdGUgYnVmZmVyIHNpemUiKTsKIAogLyoKQEAgLTExOCw2OSArMTA5LDQ4IEBACiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA9IFRSQU5aUE9SVF9VU0JfVElNRU9VVDsKIG1vZHVsZV9wYXJhbShtaW5faW50ZXJydXB0X2luX2ludGVydmFsLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X2luX2ludGVydmFsLCAiTWluaW11bSBpbnRlcnJ1cHQgaW4gaW50ZXJ2YWwgaW4gbXMiKTsKK01PRFVMRV9QQVJNX0RFU0MobWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwKKwkJIk1pbmltdW0gaW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBUUkFOWlBPUlRfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLCAiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLAorCQkiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7CiAKIHN0cnVjdCB0cmFuenBvcnRfY21kIHsKLSAgICB1bnNpZ25lZCBjaGFyIGNtZFs4XTsKKwl1bnNpZ25lZCBjaGFyIGNtZFs4XTsKIH07CiAKLWVudW0gTGlnaHRJRCB7Ci0JTGlnaHRSZWNvcmQgPSAwLAotCUxpZ2h0VHJhY2tyZWMsCi0JTGlnaHRUcmFja211dGUsCi0JTGlnaHRUcmFja3NvbG8sCi0JTGlnaHRBbnlzb2xvLAotCUxpZ2h0TG9vcCwKLQlMaWdodFB1bmNoCi0JfTsKLQogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIAogc3RydWN0IHVzYl90cmFuenBvcnQgewotCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSoJaW50ZjsJCS8qIHNhdmUgb2ZmIHRoZSB1c2IgaW50ZXJmYWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsJLyogc2F2ZSBvZmYgdGhlIHVzYiBpbnRlcmZhY2UgcG9pbnRlciAqLworCWludCBvcGVuX2NvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBvcGVuZWQgKi8KKwlzdHJ1Y3QgdHJhbnpwb3J0X2NtZCAoKnJpbmdfYnVmZmVyKVtSSU5HX0JVRkZFUl9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgcmluZ19oZWFkOworCXVuc2lnbmVkIGludCByaW5nX3RhaWw7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CisJdW5zaWduZWQgY2hhciAqaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiICppbnRlcnJ1cHRfaW5fdXJiOworCWludCBpbnRlcnJ1cHRfaW5faW50ZXJ2YWw7CisJc2l6ZV90IGludGVycnVwdF9pbl9lbmRwb2ludF9zaXplOworCWludCBpbnRlcnJ1cHRfaW5fcnVubmluZzsKKwlpbnQgaW50ZXJydXB0X2luX2RvbmU7CisJY2hhciAqaW50ZXJydXB0X291dF9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfb3V0X2VuZHBvaW50OworCXN0cnVjdCB1cmIgKmludGVycnVwdF9vdXRfdXJiOworCWludCBpbnRlcnJ1cHRfb3V0X2ludGVydmFsOworCXNpemVfdCBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemU7CisJaW50IGludGVycnVwdF9vdXRfYnVzeTsKIAotCWludAkJCW9wZW5fY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCisJLyogU3lzZnMgc3VwcG9ydCAqLwogCi0Jc3RydWN0IHRyYW56cG9ydF9jbWQJKCpyaW5nX2J1ZmZlcilbUklOR19CVUZGRVJfU0laRV07IC8qIGp1c3QgbWFrZSBjIGhhcHB5ICovCi0JdW5zaWduZWQgaW50CQlyaW5nX2hlYWQ7Ci0JdW5zaWduZWQgaW50CQlyaW5nX3RhaWw7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKLQotCXVuc2lnbmVkIGNoYXIqCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X2luX2VuZHBvaW50OwotCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfaW5fdXJiOwotCWludAkJCWludGVycnVwdF9pbl9pbnRlcnZhbDsKLQlzaXplX3QJaW50ZXJydXB0X2luX2VuZHBvaW50X3NpemU7Ci0JaW50CQkJaW50ZXJydXB0X2luX3J1bm5pbmc7Ci0JaW50CQkJaW50ZXJydXB0X2luX2RvbmU7Ci0KLQljaGFyKgkJCWludGVycnVwdF9vdXRfYnVmZmVyOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X291dF9lbmRwb2ludDsKLQlzdHJ1Y3QgdXJiKgkJaW50ZXJydXB0X291dF91cmI7Ci0JaW50CQkJaW50ZXJydXB0X291dF9pbnRlcnZhbDsKLQlzaXplX3QJaW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9vdXRfYnVzeTsKLQotCS8qIFN5c2ZzIGFuZCB0cmFuc2xhdGlvbiBzdXBwb3J0ICovCi0KLQlpbnQgZXZlbnQ7IC8qIGFsdGVybmF0ZSBpbnRlcmZhY2UgdG8gZXZlbnRzICovCi0JaW50IHdoZWVsOyAvKiAtIGZvciBuZWdhdGl2ZSwgMCBmb3Igbm9uZSwgKyBmb3IgcG9zaXRpdmUgKi8KLQl1bnNpZ25lZCBjaGFyIGR1bXBfc3RhdGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBlbmFibGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBvZmZsaW5lOyAvKiBpZiB0aGUgZGV2aWNlIGlzIG91dCBvZiByYW5nZSBvciBhc2xlZXAgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbXByZXNzX3doZWVsOyAvKiBmbGFnIHRvIGNvbXByZXNzIHdoZWVsIGV2ZW50cyAqLwotCXVuc2lnbmVkIGNoYXIgbGlnaHQ7IC8qIDcgYml0cyB1c2VkICovCi0JdW5zaWduZWQgY2hhciBsYXN0X2NtZFs4XTsKLQl1bnNpZ25lZCBjaGFyIGxhc3RfaW5wdXRbOF07Ci0JdW5zaWduZWQgY2hhciBzY3JlZW5bNDBdOyAvLyBXZSdsbCBhbHNvIGhhdmUgY2VsbHMKLQorCXVuc2lnbmVkIGNoYXIgZW5hYmxlOwkvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgb2ZmbGluZTsJLyogaWYgdGhlIGRldmljZSBpcyBvdXQgb2YgcmFuZ2Ugb3IgYXNsZWVwICovCisJdW5zaWduZWQgY2hhciBjb21wcmVzc193aGVlbDsJLyogZmxhZyB0byBjb21wcmVzcyB3aGVlbCBldmVudHMgKi8KIH07CiAKIC8qIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QoKSAqLwpAQCAtMjA1LDg0ICsxNzUsMzkgQEAKIAkJCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdF9vdXRfdXJiKTsKIH0KIAotLy8gRklYTUUgfmxpZ2h0IG5vdCBnb29kIGVub3VnaCBvciBjb3JyZWN0IC0gbmVlZCBhdG9taWMgc2V0X2JpdAorI2RlZmluZSBzaG93X2ludCh2YWx1ZSkJCQkJCQkJXAorICBzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKKyAgewkJCQkJCQkJCVwKKyAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCQlcCisgICAgc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdC0+dmFsdWUpOwkJCSAgICAgICAgXAorICB9CQkJCQkJCQkJXAorICBzdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgTlVMTCk7CiAKLSNkZWZpbmUgc2hvd19zZXRfbGlnaHQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCVwKLQllbnVtIExpZ2h0SUQgbGlnaHQgPSB2YWx1ZTsJCQkJCVwKLQlpbnQgdGVtcCA9ICgxICYmICh0LT5saWdodCAmICgxIDw8IGxpZ2h0KSkpOwkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCApOwkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJXAotCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotCWVudW0gTGlnaHRJRCBsaWdodCA9ICh0ZW1wIDw8IHZhbHVlKSAmICh0LT5saWdodCA8PCB2YWx1ZSk7CVwKLQl0LT5saWdodCA9ICh0LT5saWdodCAmIH5saWdodCkgOwkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7CisjZGVmaW5lIHNob3dfc2V0X2ludCh2YWx1ZSkJCQkJCQlcCisgIHN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorICB7CQkJCQkJCQkJXAorICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJCVwKKyAgICBzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAorICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0LT52YWx1ZSk7CQkJICAgICAgICBcCisgIH0JCQkJCQkJCQlcCisgIHN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCQlcCisgICAgc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKyAgICBpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCQlcCisgICAgdC0+dmFsdWUgPSB0ZW1wOwkJCQkJCQlcCisgICAgcmV0dXJuIGNvdW50OwkJCQkJCQlcCisgIH0JCQkJCQkJCQlcCisgIHN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwogCi1zaG93X3NldF9saWdodChMaWdodFJlY29yZCk7Ci1zaG93X3NldF9saWdodChMaWdodFRyYWNrcmVjKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0VHJhY2ttdXRlKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0VHJhY2tzb2xvKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0QW55c29sbyk7Ci1zaG93X3NldF9saWdodChMaWdodExvb3ApOwotc2hvd19zZXRfbGlnaHQoTGlnaHRQdW5jaCk7Ci0KLQotI2RlZmluZSBzaG93X3NldF9pbnQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHQtPnZhbHVlKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQkJCQkJCQkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi1zaG93X3NldF9pbnQoZW5hYmxlKTsKLXNob3dfc2V0X2ludChvZmZsaW5lKTsKK3Nob3dfaW50KGVuYWJsZSk7CitzaG93X2ludChvZmZsaW5lKTsKIHNob3dfc2V0X2ludChjb21wcmVzc193aGVlbCk7Ci1zaG93X3NldF9pbnQoZHVtcF9zdGF0ZSk7Ci1zaG93X3NldF9pbnQod2hlZWwpOwotc2hvd19zZXRfaW50KGV2ZW50KTsKLQotI2RlZmluZSBzaG93X3NldF9jbWQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHQtPnZhbHVlKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQkJCQkJCQkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi0KLQogCiAvKioKICAqCXVzYl90cmFuenBvcnRfZGVsZXRlCkBAIC0yOTAsMjMgKzIxNSwxMCBAQAogc3RhdGljIHZvaWQgdXNiX3RyYW56cG9ydF9kZWxldGUoc3RydWN0IHVzYl90cmFuenBvcnQgKmRldikKIHsKIAl1c2JfdHJhbnpwb3J0X2Fib3J0X3RyYW5zZmVycyhkZXYpOwotCS8qICBUaGlzIGlzIGp1c3QgdG9vIHR3aXN0ZWQgdG8gYmUgY29ycmVjdCAqLwotCWlmKGRldi0+aW50ZiAhPSBOVUxMKSB7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0UmVjb3JkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3JlYyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2ttdXRlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3NvbG8pOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFRyYWNrbXV0ZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0QW55c29sbyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0TG9vcCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0UHVuY2gpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl93aGVlbCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2V2ZW50KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfb2ZmbGluZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzX3doZWVsKTsKLQotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9kdW1wX3N0YXRlKTsKKwlpZiAoZGV2LT5pbnRmICE9IE5VTEwpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9vZmZsaW5lKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzX3doZWVsKTsKIAl9CiAKIAkvKiBmcmVlIGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtMzMwLDM3ICsyNDIsNTYgQEAKIAogCWlmICh1cmItPnN0YXR1cykgewogCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAotCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKKwkJCXVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCQl1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0gZWxzZSB7Ci0JCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogbm9uemVybyBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJCSAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKIAkJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJCWdvdG8gcmVzdWJtaXQ7IC8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCisJCQlnb3RvIHJlc3VibWl0OwkvKiBtYXliZSB3ZSBjYW4gcmVjb3ZlciAqLwogCQl9CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSA4KSB7CiAJCWRldl93YXJuKCZkZXYtPmludGYtPmRldiwKLQkJCSAiVXJiIGxlbmd0aCB3YXMgJWQgYnl0ZXMhISBEbyBzb21ldGhpbmcgaW50ZWxsaWdlbnQgXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJIlVyYiBsZW5ndGggd2FzICVkIGJ5dGVzISEiCisJCQkiRG8gc29tZXRoaW5nIGludGVsbGlnZW50IFxuIiwKKwkJCSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0gZWxzZSB7Ci0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiByZWNlaXZlZDogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgX19mdW5jX18sIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclswXSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzJdLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclszXSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNF0sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzVdLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcls2XSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbN10pOworCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkgIiVzOiByZWNlaXZlZDogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgX19mdW5jX18sIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclswXSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzJdLAorCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclszXSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNF0sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzVdLAorCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcls2XSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbN10pOwogI2lmIFNVUFBSRVNTX0VYVFJBX09GRkxJTkVfRVZFTlRTCi0JCWlmKGRldi0+b2ZmbGluZSA9PSAyICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGdvdG8gcmVzdWJtaXQ7IH0KLQkJaWYoZGV2LT5vZmZsaW5lID09IDEgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZGV2LT5vZmZsaW5lID0gMjsgZ290byByZXN1Ym1pdDsgfQorCWlmIChkZXYtPm9mZmxpbmUgPT0gMiAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJZ290byByZXN1Ym1pdDsKKwkJaWYgKGRldi0+b2ZmbGluZSA9PSAxICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7CisJCQlkZXYtPm9mZmxpbmUgPSAyOworCQkJZ290byByZXN1Ym1pdDsKKwkJfQogCi0vKiBBbHdheXMgcGFzcyBvbmUgb2ZmbGluZSBldmVudCB1cCB0aGUgc3RhY2sgKi8KLQkJaWYoZGV2LT5vZmZsaW5lID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gIT0gMHhmZikgeyBkZXYtPm9mZmxpbmUgPSAwOyB9Ci0JCWlmKGRldi0+b2ZmbGluZSA9PSAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGRldi0+b2ZmbGluZSA9IDE7IH0KKwkJLyogQWx3YXlzIHBhc3Mgb25lIG9mZmxpbmUgZXZlbnQgdXAgdGhlIHN0YWNrICovCisJCWlmIChkZXYtPm9mZmxpbmUgPiAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSAhPSAweGZmKQorCQkJZGV2LT5vZmZsaW5lID0gMDsKKwkJaWYgKGRldi0+b2ZmbGluZSA9PSAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKQorCQkJZGV2LT5vZmZsaW5lID0gMTsKIAotI2VuZGlmCi0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKKyNlbmRpZgkvKiBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUyAqLworCSAgIGRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsCisJCV9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOwogCi0JCW5leHRfcmluZ19oZWFkID0gKGRldi0+cmluZ19oZWFkKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKKwkJbmV4dF9yaW5nX2hlYWQgPSAoZGV2LT5yaW5nX2hlYWQgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CiAKIAkJaWYgKG5leHRfcmluZ19oZWFkICE9IGRldi0+cmluZ190YWlsKSB7Ci0JCQltZW1jcHkoJigoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ19oZWFkXSksIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCW1lbWNweSgmKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX2hlYWRdKSwKKwkJCSAgICAgICBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkZXYtPnJpbmdfaGVhZCA9IG5leHRfcmluZ19oZWFkOwogCQkJcmV0dmFsID0gMDsKIAkJCW1lbXNldChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIDAsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CkBAIC0zNzMsNyArMzA0LDcgQEAKIAl9CiAKIHJlc3VibWl0OgotCS8qIHJlc3VibWl0IGlmIHdlJ3JlIHN0aWxsIHJ1bm5pbmcgKi8KKy8qIHJlc3VibWl0IGlmIHdlJ3JlIHN0aWxsIHJ1bm5pbmcgKi8KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyAmJiBkZXYtPmludGYpIHsKIAkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJldHZhbCkKQEAgLTM5MiwxOSArMzIzLDE3IEBACiBzdGF0aWMgdm9pZCB1c2JfdHJhbnpwb3J0X2ludGVycnVwdF9vdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXYgPSB1cmItPmNvbnRleHQ7Ci0KIAkvKiBzeW5jL2FzeW5jIHVubGluayBmYXVsdHMgYXJlbid0IGVycm9ycyAqLwogCWlmICh1cmItPnN0YXR1cyAmJiAhKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKLQkJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCisJCQkJdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJCQl1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkKIAkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAotCQkJICIlcyAtIG5vbnplcm8gd3JpdGUgaW50ZXJydXB0IHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCi0JCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJCSIlcyAtIG5vbnplcm8gd3JpdGUgaW50ZXJydXB0IHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCiAJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kgPSAwOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53cml0ZV93YWl0KTsKIH0KLQogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X29wZW4KICAqLwpAQCAtNDI0LDcgKzM1Myw3IEBACiAKIAlpZiAoIWludGVyZmFjZSkgewogCQllcnIoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwKLQkJICAgICBfX2Z1bmNfXywgc3VibWlub3IpOworCQkJX19mdW5jX18sIHN1Ym1pbm9yKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byB1bmxvY2tfZGlzY29ubmVjdF9leGl0OwogCX0KQEAgLTQ1MywxNCArMzgyLDE0IEBACiAJZGV2LT5yaW5nX2hlYWQgPSAwOwogCWRldi0+cmluZ190YWlsID0gMDsKIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwKLQkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSksCi0JCQkgdXNiX3JjdmludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAotCQkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAotCQkJIGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsCi0JCQkgdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssCi0JCQkgZGV2LAotCQkJIGRldi0+aW50ZXJydXB0X2luX2ludGVydmFsKTsKKwkJCWludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKKwkJCXVzYl9yY3ZpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKKwkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJCQkJYkVuZHBvaW50QWRkcmVzcyksCisJCQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLAorCQkJdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssIGRldiwKKwkJCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsKTsKIAogCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAxOwogCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOwpAQCAtNDcwLDcgKzM5OSw4IEBACiAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X2luX3VyYiAlZFxuIiwgcmV0dmFsKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9pbl91cmIgJWRcbiIsIHJldHZhbCk7CiAJCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAwOwogCQlkZXYtPm9wZW5fY291bnQgPSAwOwogCQlnb3RvIHVubG9ja19leGl0OwpAQCAtNDc5LDcgKzQwOSw2IEBACiAJLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKIAotCiB1bmxvY2tfZXhpdDoKIAl1cCgmZGV2LT5zZW0pOwogCkBAIC01MjUsNyArNDU0LDkgQEAKIAogCS8qIHdhaXQgdW50aWwgd3JpdGUgdHJhbnNmZXIgaXMgZmluaXNoZWQgKi8KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5LCAyICogSFopOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndyaXRlX3dhaXQsCisJCQkJCQkhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3ksCisJCQkJCQkyICogSFopOwogCXVzYl90cmFuenBvcnRfYWJvcnRfdHJhbnNmZXJzKGRldik7CiAJZGV2LT5vcGVuX2NvdW50ID0gMDsKIApAQCAtNTM5LDM3ICs0NzAsMzEgQEAKIC8qKgogICoJdXNiX3RyYW56cG9ydF9wb2xsCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX3RyYW56cG9ydF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQorc3RhdGljIHVuc2lnbmVkIGludCB1c2JfdHJhbnpwb3J0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwotCiAJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPnJlYWRfd2FpdCwgd2FpdCk7CiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPndyaXRlX3dhaXQsIHdhaXQpOwotCiAJaWYgKGRldi0+cmluZ19oZWFkICE9IGRldi0+cmluZ190YWlsKQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CiAJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfYnVzeSkKIAkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQogCXJldHVybiBtYXNrOwogfQotCiAvKioKICAqCXVzYl90cmFuenBvcnRfcmVhZAogICovCi1zdGF0aWMgc3NpemVfdCB1c2JfdHJhbnpwb3J0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKLQkJCSAgIGxvZmZfdCAqcHBvcykKKworc3RhdGljIHNzaXplX3QgdXNiX3RyYW56cG9ydF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJaW50IHJldHZhbCA9IDA7Ci0KICNpZiBCVUZGRVJFRF9SRUFEUwogCWludCBjID0gMDsKICNlbmRpZgotCiAjaWYgQ09NUFJFU1NfV0hFRUxfRVZFTlRTCiAJc2lnbmVkIGNoYXIgb2xkd2hlZWw7CiAJc2lnbmVkIGNoYXIgbmV3d2hlZWw7CkBAIC01NzcsNyArNTAyLDcgQEAKIAlpbnQgbmV4dF90YWlsOwogI2VuZGlmCiAKLS8qIGRvIEkgaGF2ZSBzdWNoIGEgdGhpbmcgYXMgYSBudWxsIGV2ZW50PyAqLworCS8qIGRvIEkgaGF2ZSBzdWNoIGEgdGhpbmcgYXMgYSBudWxsIGV2ZW50PyAqLwogCiAJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC01OTEsOCArNTE2LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwotCWlmIChkZXYtPmludGYgPT0gTlVMTCkgeworCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLyBpZiAoZGV2LT5pbnRmID09IE5VTEwpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZXJyKCJObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZFxuIiwgcmV0dmFsKTsKIAkJZ290byB1bmxvY2tfZXhpdDsKQEAgLTYwNCwxMDQgKzUyOCwxNDkgQEAKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIHVubG9ja19leGl0OwogCQl9Ci0JCS8vIGF0b21pY19jbXBfZXhjaGFuZ2UoJmRldi0+aW50ZXJydXB0X2luX2RvbmUsMCwwKTsKLQkJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDAgOyAvKiB0aW55IHJhY2UgLSBGSVhNRTogbWFrZSBhdG9taWM/ICovCi0JCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPnJlYWRfd2FpdCwgZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSk7Ci0JCWlmIChyZXR2YWwgPCAwKSB7CisJCS8qIHRpbnkgcmFjZSAtIEZJWE1FOiBtYWtlIGF0b21pYz8gKi8KKwkJLyogYXRvbWljX2NtcF9leGNoYW5nZSgmZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSwwLDApOyAqLworCQlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+cmVhZF93YWl0LAorCQkJCQkJICBkZXYtPmludGVycnVwdF9pbl9kb25lKTsKKwkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIHVubG9ja19leGl0OwotCQl9CiAJfQogCi0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGNvcHlpbmcgdG8gdXNlcnNwYWNlOiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJCSBfX2Z1bmNfXywgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzBdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsxXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMl0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs0XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs3XSk7CisJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkiJXM6IGNvcHlpbmcgdG8gdXNlcnNwYWNlOiAiCisJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJIF9fZnVuY19fLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzBdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzFdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzddKTsKIAogI2lmIEJVRkZFUkVEX1JFQURTCi0JICAgYyA9IDA7Ci0JICAgd2hpbGUoKGMgPCBjb3VudCkgJiYgKGRldi0+cmluZ190YWlsICE9IGRldi0+cmluZ19oZWFkKSkgeworCWMgPSAwOworCXdoaWxlICgoYyA8IGNvdW50KSAmJiAoZGV2LT5yaW5nX3RhaWwgIT0gZGV2LT5yaW5nX2hlYWQpKSB7CiAKLS8qIFRoaXMgc3RhcnRlZCBvZmYgaW4gdGhlIGxvd2VyIGxldmVsIHNlcnZpY2Ugcm91dGluZSwgYW5kIEkgbW92ZWQgaXQgaGVyZS4gVGhlbiBteSBicmFpbiBkaWVkLiBOb3QgZG9uZSB5ZXQuICovCiAjaWYgQ09NUFJFU1NfV0hFRUxfRVZFTlRTCiAJCW5leHRfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7Ci0JCWlmKGRldi0+Y29tcHJlc3Nfd2hlZWwpIGNhbmNvbXByZXNzID0gMTsKLQkJd2hpbGUoZGV2LT5yaW5nX2hlYWQgIT0gbmV4dF90YWlsICYmIGNhbmNvbXByZXNzID09IDEgKSB7CisJCWlmIChkZXYtPmNvbXByZXNzX3doZWVsKQorCQkJY2FuY29tcHJlc3MgPSAxOworCQl3aGlsZSAoZGV2LT5yaW5nX2hlYWQgIT0gbmV4dF90YWlsICYmIGNhbmNvbXByZXNzID09IDEpIHsKIAkJCW5ld3doZWVsID0gKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs2XTsKIAkJCW9sZHdoZWVsID0gKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdOwotCQkJLy8gaWYgYm90aCBhcmUgd2hlZWwgZXZlbnRzLCBhbmQgbm8gYnV0dG9ucyBoYXZlIGNoYW5nZXMgKEZJWE1FLCBkbyBJIGhhdmUgdG8gY2hlY2s/KSwKLQkJCS8vIGFuZCB3ZSBhcmUgdGhlIHNhbWUgc2lnbiwgd2UgY2FuIGNvbXByZXNzICstIDdGCi0JCQkvLyBGSVhNRTogc2FuZXIgY2hlY2sgZm9yIG92ZXJmbG93ISAtIG1heCBvZiArLSA3RgotCQkJLy8gRklYTUUgdGhlIG1hdGggaXMgd3JvbmcgZm9yIGdvaW5nIGluIHJldmVyc2UsIGFjdHVhbGx5LCBhcyB0aGUgbWlkaSBzcGVjIGRvZXNuJ3QgYWxsb3cgc2lnbmVkIGNoYXJzCisJCQkvKiBpZiBib3RoIGFyZSB3aGVlbCBldmVudHMsIGFuZAorCQkJICAgbm8gYnV0dG9ucyBoYXZlIGNoYW5nZXMgKEZJWE1FLCBkbyBJIGhhdmUgdG8gY2hlY2s/KSwKKwkJCSAgIGFuZCB3ZSBhcmUgdGhlIHNhbWUgc2lnbiwgd2UgY2FuIGNvbXByZXNzICstIDdGCisJCQkqLworCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJCSIlczogdHJ5aW5nIHRvIGNvbXByZXNzOiAiCisJCQkJIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCV9fZnVuY19fLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOwogCi0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IHRyeWluZyB0byBjb21wcmVzczogJTAyeCUwMnglMDJ4JTAyeCUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQkgX19mdW5jX18sICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOwotCi0KLQkJCWlmKCgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNl0gIT0gMCAmJgotCQkJICAgICgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNl0gIT0gMCApICYmCisJCQlpZiAoKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSAhPSAwICYmCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs2XSAhPSAwKSAmJgogCQkJCSgobmV3d2hlZWwgPiAwICYmIG9sZHdoZWVsID4gMCkgfHwKLQkJCQkobmV3d2hlZWwgPCAwICYmIG9sZHdoZWVsIDwgMCkpICYmCi0JCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSA9PSAoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzJdKSAmJgotCQkJCSgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbM10gPT0gKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFszXSkgJiYKLQkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdID09ICgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNF0pICYmCi0JCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSA9PSAoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzVdKSkKLSB7Ci0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IHNob3VsZCBjb21wcmVzczogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgX19mdW5jX18sICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOwotCisJCQkJCShuZXd3aGVlbCA8IDAgJiYgb2xkd2hlZWwgPCAwKSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFsyXSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFszXSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs0XSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs1XSkpIHsKKwkJCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkJCSIlczogc2hvdWxkIGNvbXByZXNzOiAiCisJCQkJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQkJX19mdW5jX18sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbMF0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbMV0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbMl0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbM10sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbNF0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbNV0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbNl0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbN10pOwogCQkJCW5ld3doZWVsICs9IG9sZHdoZWVsOwotCQkJCWlmKG9sZHdoZWVsID4gMCAmJiAhKG5ld3doZWVsID4gMCkpIHsKKwkJCQlpZiAob2xkd2hlZWwgPiAwICYmICEobmV3d2hlZWwgPiAwKSkgewogCQkJCQluZXd3aGVlbCA9IDB4N2Y7CiAJCQkJCWNhbmNvbXByZXNzID0gMDsKIAkJCQl9Ci0JCQkJaWYob2xkd2hlZWwgPCAwICYmICEobmV3d2hlZWwgPCAwKSkgeworCQkJCWlmIChvbGR3aGVlbCA8IDAgJiYgIShuZXd3aGVlbCA8IDApKSB7CiAJCQkJCW5ld3doZWVsID0gMHg4MDsKIAkJCQkJY2FuY29tcHJlc3MgPSAwOwogCQkJCX0KIAotCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNl0gPSBuZXd3aGVlbDsKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzZdID0KKwkJCQkJbmV3d2hlZWw7CiAJCQkJZGV2LT5yaW5nX3RhaWwgPSBuZXh0X3RhaWw7Ci0JCQkJbmV4dF90YWlsID0gKGRldi0+cmluZ190YWlsKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKKwkJCQluZXh0X3RhaWwgPQorCQkJCQkoZGV2LT5yaW5nX3RhaWwgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CiAJCQl9IGVsc2UgewogCQkJCWNhbmNvbXByZXNzID0gMDsKIAkJCX0KIAkJfQogI2VuZGlmIC8qIENPTVBSRVNTX1dIRUVMX0VWRU5UUyAqLwotCi0JCWlmIChjb3B5X3RvX3VzZXIoJmJ1ZmZlcltjXSwgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLCA4KSkgeworCQlpZiAoY29weV90b191c2VyKAorCQkJCSZidWZmZXJbY10sCisJCQkJJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLCA4KSkgewogCQkJcmV0dmFsID0gLUVGQVVMVDsKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJCX0KLQotCQlkZXYtPnJpbmdfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7Ci0JCWMrPTg7Ci0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKLQkgICB9Ci0JICAgcmV0dmFsID0gYzsKKwkJZGV2LT5yaW5nX3RhaWwgPSAoZGV2LT5yaW5nX3RhaWwgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CisJCWMgKz0gODsKKwkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLAorCQkJIF9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOworCX0KKwlyZXR2YWwgPSBjOwogCiAjZWxzZQotCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0sIDgpKSB7Ci0JCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JfQorLyogIGlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0sIDgpKSB7ICovCisJcmV0dmFsID0gLUVGQVVMVDsKKwlnb3RvIHVubG9ja19leGl0OworfQogCi0JZGV2LT5yaW5nX3RhaWwgPSAoZGV2LT5yaW5nX3RhaWwrMSkgJSByaW5nX2J1ZmZlcl9zaXplOwotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKK2Rldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOworZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwKKwkgX19mdW5jX18sIGRldi0+cmluZ19oZWFkLCBkZXYtPnJpbmdfdGFpbCk7CiAKLQlyZXR2YWwgPSA4OworcmV0dmFsID0gODsKICNlbmRpZiAvKiBCVUZGRVJFRF9SRUFEUyAqLwogCiB1bmxvY2tfZXhpdDoKLQkvKiB1bmxvY2sgdGhlIGRldmljZSAqLwotCXVwKCZkZXYtPnNlbSk7CisvKiB1bmxvY2sgdGhlIGRldmljZSAqLwordXAoJmRldi0+c2VtKTsKIAogZXhpdDoKLQlyZXR1cm4gcmV0dmFsOworcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X3dyaXRlCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHVzYl90cmFuenBvcnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCB1c2JfdHJhbnpwb3J0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHVzYl90cmFuenBvcnQgKmRldjsKIAlzaXplX3QgYnl0ZXNfdG9fd3JpdGU7CkBAIC03MTgsNyArNjg3LDYgQEAKIAkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIGV4aXQ7CiAJfQotCiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCiAJaWYgKGRldi0+aW50ZiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CkBAIC03MzIsMTggKzcwMCwyNCBAQAogCQkJcmV0dmFsID0gLUVBR0FJTjsKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJCX0KLQkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5KTsKLQkJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwKKwkJCQkJCSFkZXYtPmludGVycnVwdF9vdXRfYnVzeSk7CisJCWlmIChyZXR2YWwgPCAwKQogCQkJZ290byB1bmxvY2tfZXhpdDsKLQkJfQogCX0KIAogCS8qIHdyaXRlIHRoZSBkYXRhIGludG8gaW50ZXJydXB0X291dF9idWZmZXIgZnJvbSB1c2Vyc3BhY2UgKi8KLQlieXRlc190b193cml0ZSA9IG1pbihjb3VudCwgd3JpdGVfYnVmZmVyX3NpemUqZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOworCWJ5dGVzX3RvX3dyaXRlID0gbWluKGNvdW50LAorCQkJd3JpdGVfYnVmZmVyX3NpemUgKgorCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOwogCWlmIChieXRlc190b193cml0ZSA8IGNvdW50KQotCQlkZXZfd2FybigmZGV2LT5pbnRmLT5kZXYsICJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLGNvdW50LWJ5dGVzX3RvX3dyaXRlKTsKKwkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAorCQkJIldyaXRlIGJ1ZmZlciBvdmVyZmxvdywgJXpkIGJ5dGVzIGRyb3BwZWRcbiIsCisJCQljb3VudCAtIGJ5dGVzX3RvX3dyaXRlKTsKIAotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBjb3VudCA9ICV6ZCwgYnl0ZXNfdG9fd3JpdGUgPSAlemRcbiIsIF9fZnVuY19fLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOworCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJIiVzOiBjb3VudCA9ICV6ZCwgYnl0ZXNfdG9fd3JpdGUgPSAlemRcbiIsIF9fZnVuY19fLAorCQljb3VudCwgYnl0ZXNfdG9fd3JpdGUpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlciwgYnl0ZXNfdG9fd3JpdGUpKSB7CiAJCXJldHZhbCA9IC1FRkFVTFQ7CkBAIC03NTcsMTQgKzczMSwxMyBAQAogCiAJLyogc2VuZCBvZmYgdGhlIHVyYiAqLwogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwKLQkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGRldi0+aW50ZiksCi0JCQkgdXNiX3NuZGludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAotCQkJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsCi0JCQkgYnl0ZXNfdG9fd3JpdGUsCi0JCQkgdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrLAotCQkJIGRldiwKLQkJCSBkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwpOworCQkJaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAorCQkJdXNiX3NuZGludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAorCQkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCQkJYkVuZHBvaW50QWRkcmVzcyksCisJCQlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLCBieXRlc190b193cml0ZSwKKwkJCXVzYl90cmFuenBvcnRfaW50ZXJydXB0X291dF9jYWxsYmFjaywgZGV2LAorCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsKTsKIAogCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMTsKIAl3bWIoKTsKQEAgLTc4NywxMiArNzYwLDEyIEBACiAKIC8qIGZpbGUgb3BlcmF0aW9ucyBuZWVkZWQgd2hlbiB3ZSByZWdpc3RlciB0aGlzIGRyaXZlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3RyYW56cG9ydF9mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5yZWFkICA9CXVzYl90cmFuenBvcnRfcmVhZCwKLQkud3JpdGUgPQl1c2JfdHJhbnpwb3J0X3dyaXRlLAotCS5vcGVuID0JCXVzYl90cmFuenBvcnRfb3BlbiwKLQkucmVsZWFzZSA9CXVzYl90cmFuenBvcnRfcmVsZWFzZSwKLQkucG9sbCA9CQl1c2JfdHJhbnpwb3J0X3BvbGwsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSB1c2JfdHJhbnpwb3J0X3JlYWQsCisJLndyaXRlID0gdXNiX3RyYW56cG9ydF93cml0ZSwKKwkub3BlbiA9IHVzYl90cmFuenBvcnRfb3BlbiwKKwkucmVsZWFzZSA9IHVzYl90cmFuenBvcnRfcmVsZWFzZSwKKwkucG9sbCA9IHVzYl90cmFuenBvcnRfcG9sbCwKIH07CiAKIC8qCkBAIC04MDAsMjAgKzc3MywxOSBAQAogICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggdGhlIGRyaXZlciBjb3JlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfdHJhbnpwb3J0X2NsYXNzID0gewotCS5uYW1lID0JCSJ0cmFuenBvcnQlZCIsCi0JLmZvcHMgPQkJJnVzYl90cmFuenBvcnRfZm9wcywKLQkubWlub3JfYmFzZSA9CVVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRSwKKwkubmFtZSA9ICJ0cmFuenBvcnQlZCIsCisJLmZvcHMgPSAmdXNiX3RyYW56cG9ydF9mb3BzLAorCS5taW5vcl9iYXNlID0gVVNCX1RSQU5aUE9SVF9NSU5PUl9CQVNFLAogfTsKIAotCiAvKioKICAqCXVzYl90cmFuenBvcnRfcHJvYmUKICAqCiAgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcwogICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KICAqLwotc3RhdGljIGludCB1c2JfdHJhbnpwb3J0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17CitzdGF0aWMgaW50IHVzYl90cmFuenBvcnRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKSB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXYgPSBOVUxMOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CkBAIC04MjQsNyArNzk2LDcgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAKLQlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJIGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXhpdDsKQEAgLTg1MSwyNSArODIzLDMzIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPT0gTlVMTCkKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgbm90IGZvdW5kICh1c2luZyBjb250cm9sIGVuZHBvaW50IGluc3RlYWQpXG4iKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCIKKwkJCSIodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CiAKLQotCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUgPSBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUgPQorCSAgICBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCiAJaWYgKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUgIT0gOCkKLQkgICAgZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBpbiBlbmRwb2ludCBzaXplIGlzIG5vdCA4IVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgaW4gZW5kcG9pbnQgc2l6ZSBpcyBub3QgOCFcbiIpOwogCi0JaWYocmluZ19idWZmZXJfc2l6ZSA9PSAwKSB7IHJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOyB9Ci0JdHJ1ZV9zaXplID0gbWluKHJpbmdfYnVmZmVyX3NpemUsUklOR19CVUZGRVJfU0laRSk7Ci0JLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4gTmVlZGVkPyAqLworCWlmIChyaW5nX2J1ZmZlcl9zaXplID09IDApCisJCXJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOworCXRydWVfc2l6ZSA9IG1pbihyaW5nX2J1ZmZlcl9zaXplLCBSSU5HX0JVRkZFUl9TSVpFKTsKIAotCWRldi0+cmluZ19idWZmZXIgPSBrbWFsbG9jKCh0cnVlX3NpemUqc2l6ZW9mKHN0cnVjdCB0cmFuenBvcnRfY21kKSkrOCwgR0ZQX0tFUk5FTCk7CisJLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4KKwkgICBOZWVkZWQ/ICovCisKKwlkZXYtPnJpbmdfYnVmZmVyID0KKwkgICAga21hbGxvYygodHJ1ZV9zaXplICogc2l6ZW9mKHN0cnVjdCB0cmFuenBvcnRfY21kKSkgKyA4LCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT5yaW5nX2J1ZmZlcikgewotCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSByaW5nX2J1ZmZlciBvZiBzaXplICVkXG4iLHRydWVfc2l6ZSk7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJDb3VsZG4ndCBhbGxvY2F0ZSByaW5nX2J1ZmZlciBzaXplICVkXG4iLCB0cnVlX3NpemUpOwogCQlnb3RvIGVycm9yOwogCX0KLQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOworCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9CisJICAgIGttYWxsb2MoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPmludGVycnVwdF9pbl9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X2luX2J1ZmZlclxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC04NzksMTMgKzg1OSwxOCBAQAogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fdXJiXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgPSBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPyBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6Ci0JCQkJCQkJCQkgdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgPQorCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPworCSAgICBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6CisJICAgIHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOwogCi0JaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplICE9OCkKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgc2l6ZSBpcyBub3QgOCEpXG4iKTsKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgIT0gOCkKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSAiSW50ZXJydXB0IG91dCBlbmRwb2ludCBzaXplIGlzIG5vdCA4ISlcbiIpOwogCi0JZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2Mod3JpdGVfYnVmZmVyX3NpemUqZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOworCWRldi0+aW50ZXJydXB0X291dF9idWZmZXIgPQorCSAgICBrbWFsbG9jKHdyaXRlX2J1ZmZlcl9zaXplICogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUsCisJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXJcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtODk1LDkgKzg4MCwxOCBAQAogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X3VyYlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsID0gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X2luX2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbDsKLQlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50KQotCQlkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9CisJICAgIG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPgorCSAgICBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbAorCSAgICA6IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWw7CisKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50KSB7CisJCWRldi0+aW50ZXJydXB0X291dF9pbnRlcnZhbCA9CisJCSAgICBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+CisJCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbCA/CisJCSAgICBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA6CisJCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwl9CiAKIAkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwpAQCAtOTA1LDM1ICs4OTksMzMgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdHJhbnpwb3J0X2NsYXNzKTsKIAlpZiAocmV0dmFsKSB7CiAJCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRyaXZlciAqLwotCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIpOwogCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0UmVjb3JkKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3JlYykpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2ttdXRlKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3NvbG8pKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodEFueXNvbG8pKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodExvb3ApKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFB1bmNoKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfd2hlZWwpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9ldmVudCkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2R1bXBfc3RhdGUpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9jb21wcmVzc193aGVlbCkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX29mZmxpbmUpKSkgZ290byBlcnJvcjsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzX3doZWVsKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb2ZmbGluZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVHJhbnpwb3J0IERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAotCQkoaW50Zi0+bWlub3IgLSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGludGYtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkiVHJhbnpwb3J0IERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAorCQkoaW50Zi0+bWlub3IgLSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsCisJCWludGYtPm1pbm9yKTsKIAogZXhpdDoKIAlyZXR1cm4gcmV0dmFsOwogCiBlcnJvcjoKIAl1c2JfdHJhbnpwb3J0X2RlbGV0ZShkZXYpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtOTY2LDE1ICs5NTgsMTUgQEAKIAltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgIlRyYW56cG9ydCBTdXJmYWNlICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLAotCQkgKG1pbm9yIC0gVVNCX1RSQU5aUE9SVF9NSU5PUl9CQVNFKSk7CisJCShtaW5vciAtIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRSkpOwogfQogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3RyYW56cG9ydF9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJInRyYW56cG9ydCIsCi0JLnByb2JlID0JdXNiX3RyYW56cG9ydF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXVzYl90cmFuenBvcnRfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQl1c2JfdHJhbnpwb3J0X3RhYmxlLAorCS5uYW1lID0gInRyYW56cG9ydCIsCisJLnByb2JlID0gdXNiX3RyYW56cG9ydF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHVzYl90cmFuenBvcnRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSB1c2JfdHJhbnpwb3J0X3RhYmxlLAogfTsKIAogLyoqCkBAIC05ODcsMTQgKzk3OSwxNCBAQAogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl90cmFuenBvcnRfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOwotCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICIgX19GSUxFX18KKwkJCSIgZHJpdmVyLiBFcnJvciBudW1iZXIgJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KLQogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X2V4aXQKICAqLworCiBzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3RyYW56cG9ydF9leGl0KHZvaWQpCiB7CiAJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCkBAIC0xMDAzLDQgKzk5NSwzIEBACiAKIG1vZHVsZV9pbml0KHVzYl90cmFuenBvcnRfaW5pdCk7CiBtb2R1bGVfZXhpdCh1c2JfdHJhbnpwb3J0X2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKaW5kZXggODY4ZWRiNi4uMDZjYWNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwpAQCAtMTgyNyw3ICsxODI3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ283MDA3X3RlbXBsYXRlID0gewogCS5uYW1lCQk9ICJnbzcwMDciLAotCS52ZmxfdHlwZQk9IFZJRF9UWVBFX0NBUFRVUkUsCiAJLmZvcHMJCT0gJmdvNzAwN19mb3BzLAogCS5taW5vcgkJPSAtMSwKIAkucmVsZWFzZQk9IGdvNzAwN192ZmxfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwppbmRleCBmYjY4NDVlLi5kMzMzZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIHN0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0Jc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiOwogCWludCByYzsKIAlpbnQgZGV2X2FkZHIgPSBjbGllbnQtPmFkZHI7CiAJdTggKmJ1ZjsKQEAgLTE2NCw4ICsxNjQsMTAgQEAKIAlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJdXNiID0gZ28tPmhwaV9jb250ZXh0OwogCWlmIChkb3duX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaTJjIGxvY2sgZmFpbGVkXG4iKTsKKwkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAJcmMgPSBnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDU1LCBkZXZfYWRkciwKQEAgLTE4MSw3ICsxODMsNyBAQAogc3RhdGljIGludCB3cml0ZV9yZWdfZnAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGFkZHIsIHUxNiB2YWwpCiB7CiAJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0Jc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiOwogCXU4ICpidWY7CiAJc3RydWN0IHMyMjUwICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMjAwLDYgKzIwMiw3IEBACiAKIAltZW1zZXQoYnVmLCAweGNkLCA2KTsKIAorCXVzYiA9IGdvLT5ocGlfY29udGV4dDsKIAlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImkyYyBsb2NrIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZThkNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvS2NvbmZpZwpAQCAtMCwwICsxLDYgQEAKK2NvbmZpZyBIRUNJCisJdHJpc3RhdGUgIkludGVsIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoTUVJKSBTdXBwb3J0IgorCS0tLWhlbHAtLS0KKwkgIFRoZSBJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UgKEludGVsIE1FSSkgZHJpdmVyIGFsbG93cworCSAgYXBwbGljYXRpb25zIHRvIGFjY2VzcyB0aGUgQWN0aXZlIE1hbmFnZW1lbnQgVGVjaG5vbG9neQorCSAgZmlybXdhcmUgYW5kIG90aGVyIE1hbmFnZW1lbnQgRW5naW5lIHN1Yi1zeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTI0ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitvYmotJChDT05GSUdfSEVDSSkJKz0gaGVjaS5vCisKK2hlY2ktb2JqcyA6PQkJCQlcCisJCWhlY2lfaW5pdC5vCQlcCisJCWludGVycnVwdC5vCQlcCisJCWhlY2lfaW50ZXJmYWNlLm8JXAorCQlpb19oZWNpLm8JCVwKKwkJaGVjaV9tYWluLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2NzE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL1RPRE8KQEAgLTAsMCArMSw2IEBACitUT0RPOgorCS0gZml4IHVzZXIva2VybmVsIHBvaW50ZXIgbWVzcyBpbiB0aGUgaW9jdGwgaGFuZGxlcnMgYXMgcG9pbnRlZAorCSAgb3V0IGJ5IHNwYXJzZS4KKwktIHJlc29sdmUgdGhlIGlvY3RscyBhbmQgc2VlIGlmIG1vc3Qgb2YgdGhlbSBjYW4ganVzdCBiZSBzaW1wbGUKKwkgIHN5c2ZzIGZpbGVzCisJLSBmaXggbG9ja2luZyBpc3N1ZXMgdGhhdCBzcGFyc2UgcG9pbnRzIG91dCBhdCB0aGUgbGVhc3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpLmggYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxOTJlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2kuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2lmbmRlZiBfSEVDSV9IXworI2RlZmluZSBfSEVDSV9IXworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJoZWNpX2RhdGFfc3RydWN0dXJlcy5oIgorCitleHRlcm4gY29uc3Qgc3RydWN0IGd1aWQgaGVjaV9wdGhpX2d1aWQ7CitleHRlcm4gY29uc3Qgc3RydWN0IGd1aWQgaGVjaV93ZF9ndWlkOworZXh0ZXJuIGNvbnN0IF9fdTggaGVjaV9zdGFydF93ZF9wYXJhbXNbXTsKK2V4dGVybiBjb25zdCBfX3U4IGhlY2lfc3RvcF93ZF9wYXJhbXNbXTsKK2V4dGVybiBjb25zdCBfX3U4IGhlY2lfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1szXVs0XTsKKworLyoKKyAqIGhlY2kgZGV2aWNlIElECisgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfODI5NDZHWiAgICAweDI5NzQgIC8qIDgyOTQ2R1ovR0wgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfODJHMzUgICAgICAweDI5ODQgIC8qIDgyRzM1IEV4cHJlc3MgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfODJROTY1ICAgICAweDI5OTQgIC8qIDgyUTk2My9ROTY1ICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEXzgyRzk2NSAgICAgMHgyOUE0ICAvKiA4MlA5NjUvRzk2NSAqLworCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEXzgyR005NjUgICAgMHgyQTA0ICAvKiBNb2JpbGUgUE05NjUvR005NjUgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfODJHTUU5NjUgICAweDJBMTQgIC8qIE1vYmlsZSBHTUU5NjUvR0xFOTYwICovCisKKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV84MlEzNSAweDI5QjQgIC8qIDgyUTM1IEV4cHJlc3MgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV84MkczMyAweDI5QzQgIC8qIDgyRzMzL0czMS9QMzUvUDMxIEV4cHJlc3MgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV84MlEzMyAweDI5RDQgIC8qIDgyUTMzIEV4cHJlc3MgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV84MlgzOCAweDI5RTQgIC8qIDgyWDM4L1g0OCBFeHByZXNzICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfMzIwMCAgMHgyOUY0ICAvKiAzMjAwLzMyMTAgU2VydmVyICovCisKKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV82ICAgICAweDI4QjQgIC8qIEJlYXJsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfNyAgICAgMHgyOEM0ICAvKiBCZWFybGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzggICAgIDB4MjhENCAgLyogQmVhcmxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV85ICAgICAweDI4RTQgIC8qIEJlYXJsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfMTAgICAgMHgyOEY0ICAvKiBCZWFybGFrZSAqLworCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlNXzEgICAgMHgyQTQ0ICAvKiBDYW50aWdhICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlNXzIgICAgMHgyQTU0ICAvKiBDYW50aWdhICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlNXzMgICAgMHgyQTY0ICAvKiBDYW50aWdhICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlNXzQgICAgMHgyQTc0ICAvKiBDYW50aWdhICovCisKKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIMTBfMSAgICAweDJFMDQgIC8qIEVhZ2xlbGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0gxMF8yICAgIDB4MkUxNCAgLyogRWFnbGVsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDEwXzMgICAgMHgyRTI0ICAvKiBFYWdsZWxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIMTBfNCAgICAweDJFMzQgIC8qIEVhZ2xlbGFrZSAqLworCisvKgorICogaGVjaSBpbml0IGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmluaXRfaGVjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordm9pZCBoZWNpX3Jlc2V0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpbnRlcnJ1cHRzKTsKK2ludCBoZWNpX2h3X2luaXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitpbnQgaGVjaV90YXNrX2luaXRpYWxpemVfY2xpZW50cyh2b2lkICpkYXRhKTsKK2ludCBoZWNpX2luaXRpYWxpemVfY2xpZW50cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqaGVjaV9hbGxvY19maWxlX3ByaXZhdGUoc3RydWN0IGZpbGUgKmZpbGUpOworaW50IGhlY2lfZGlzY29ubmVjdF9ob3N0X2NsaWVudChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOwordm9pZCBoZWNpX2luaXRpYWxpemVfbGlzdChzdHJ1Y3QgaW9faGVjaV9saXN0ICpsaXN0LAorCQkJICBzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3ZvaWQgaGVjaV9mbHVzaF9saXN0KHN0cnVjdCBpb19oZWNpX2xpc3QgKmxpc3QsCisJCSAgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7Cit2b2lkIGhlY2lfZmx1c2hfcXVldWVzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKwordm9pZCBoZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgX191OCBob3N0X2NsaWVudF9pZCk7CisKKy8qCisgKiAgaW50ZXJydXB0IGZ1bmN0aW9uIHByb3RvdHlwZQorICovCitpcnFyZXR1cm5fdCBoZWNpX2lzcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKKwordm9pZCBoZWNpX3dkX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKy8qCisgKiAgaW5wdXQgb3V0cHV0IGZ1bmN0aW9uIHByb3RvdHlwZQorICovCitpbnQgaGVjaV9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkJICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIF9fdXNlciAqdV9tc2csCisJCQkgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCQkgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IGhlY2lfaW9jdGxfY29ubmVjdF9jbGllbnQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJCSAgICAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBfX3VzZXIgKnVfbXNnLAorCQkJICAgICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUpOworCitpbnQgaGVjaV9pb2N0bF93ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IGhlY2lfaW9jdGxfYnlwYXNzX3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCSAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgaGVjaV9zdGFydF9yZWFkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCSAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IHB0aGlfd3JpdGUoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkgICAgICAgc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYik7CisKK2ludCBwdGhpX3JlYWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwgc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KTsKKworc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqZmluZF9wdGhpX3JlYWRfbGlzdF9lbnRyeSgKKwkJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3ZvaWQgcnVuX25leHRfaWFtdGhpZl9jbWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CisKK3ZvaWQgaGVjaV9mcmVlX2NiX3ByaXZhdGUoc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYik7CisKKy8qKgorICogaGVjaV9mZV9zYW1lX2lkIC0gdGVsbCBpZiBmaWxlIHByaXZhdGUgZGF0YSBoYXZlIHNhbWUgaWQKKyAqCisgKiBAZmUxOiBwcml2YXRlIGRhdGEgb2YgMS4gZmlsZSBvYmplY3QKKyAqIEBmZTI6IHByaXZhdGUgZGF0YSBvZiAyLiBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgICE9MCAtIGlmIGlkcyBhcmUgdGhlIHNhbWUsIDAgLSBpZiBkaWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhlY2lfZmVfc2FtZV9pZChjb25zdCBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZlMSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmUyKQoreworCXJldHVybiAoKGZlMS0+aG9zdF9jbGllbnRfaWQgPT0gZmUyLT5ob3N0X2NsaWVudF9pZCkKKwkJJiYgKGZlMS0+bWVfY2xpZW50X2lkID09IGZlMi0+bWVfY2xpZW50X2lkKSk7Cit9CisKKyNlbmRpZiAvKiBfSEVDSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9kYXRhX3N0cnVjdHVyZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfZGF0YV9zdHJ1Y3R1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1ZThmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfZGF0YV9zdHJ1Y3R1cmVzLmgKQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpZm5kZWYgX0hFQ0lfREFUQV9TVFJVQ1RVUkVTX0hfCisjZGVmaW5lIF9IRUNJX0RBVEFfU1RSVUNUVVJFU19IXworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIGVycm9yIGNvZGUgZGVmaW5pdGlvbgorICovCisjZGVmaW5lICAgICBFU0xPVFNfT1ZFUkZMT1cgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVDT1JSVVBURURfTUVTU0FHRV9IRUFERVIgICAgMTAwMAorI2RlZmluZSAgICAgRUNPTVBMRVRFX01FU1NBR0UgICAgICAgICAgICAxMDAxCisKKyNkZWZpbmUgICAgIEhFQ0lfRkNfTUVTU0FHRV9SRVNFUlZFRF9MRU5HVEggICAgICAgICAgIDUKKworLyoKKyAqIE51bWJlciBvZiBxdWV1ZSBsaXN0cyB1c2VkIGJ5IHRoaXMgZHJpdmVyCisgKi8KKyNkZWZpbmUgSEVDSV9JT19MSVNUU19OVU1CRVIgICAgICAgIDcKKworLyoKKyAqIE1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKE1UVSkgb2YgaGVjaSBtZXNzYWdlcworICovCisjZGVmaW5lIElBTVRISUZfTVRVIDQxNjAKKworCisvKgorICogSEVDSSBIVyBTZWN0aW9uCisgKi8KKworLyogSEVDSSByZWdpc3RlcnMgKi8KKy8qIEhfQ0JfV1cgLSBIb3N0IENpcmN1bGFyIEJ1ZmZlciAoQ0IpIFdyaXRlIFdpbmRvdyByZWdpc3RlciAqLworI2RlZmluZSBIX0NCX1dXICAgIDAKKy8qIEhfQ1NSIC0gSG9zdCBDb250cm9sIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBIX0NTUiAgICAgIDQKKy8qIE1FX0NCX1JXIC0gTUUgQ2lyY3VsYXIgQnVmZmVyIFJlYWQgV2luZG93IHJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIE1FX0NCX1JXICAgOAorLyogTUVfQ1NSX0hBIC0gTUUgQ29udHJvbCBTdGF0dXMgSG9zdCBBY2Nlc3MgcmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgTUVfQ1NSX0hBICAweEMKKworCisvKiByZWdpc3RlciBiaXRzIG9mIEhfQ1NSIChIb3N0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyKSAqLworLyogSG9zdCBDaXJjdWxhciBCdWZmZXIgRGVwdGggLSBtYXhpbXVtIG51bWJlciBvZiAzMi1iaXQgZW50cmllcyBpbiBDQiAqLworI2RlZmluZSBIX0NCRCAgICAgICAgICAgICAweEZGMDAwMDAwCisvKiBIb3N0IENpcmN1bGFyIEJ1ZmZlciBXcml0ZSBQb2ludGVyICovCisjZGVmaW5lIEhfQ0JXUCAgICAgICAgICAgIDB4MDBGRjAwMDAKKy8qIEhvc3QgQ2lyY3VsYXIgQnVmZmVyIFJlYWQgUG9pbnRlciAqLworI2RlZmluZSBIX0NCUlAgICAgICAgICAgICAweDAwMDBGRjAwCisvKiBIb3N0IFJlc2V0ICovCisjZGVmaW5lIEhfUlNUICAgICAgICAgICAgIDB4MDAwMDAwMTAKKy8qIEhvc3QgUmVhZHkgKi8KKyNkZWZpbmUgSF9SRFkgICAgICAgICAgICAgMHgwMDAwMDAwOAorLyogSG9zdCBJbnRlcnJ1cHQgR2VuZXJhdGUgKi8KKyNkZWZpbmUgSF9JRyAgICAgICAgICAgICAgMHgwMDAwMDAwNAorLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIEhfSVMgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKy8qIEhvc3QgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBIX0lFICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKworLyogcmVnaXN0ZXIgYml0cyBvZiBNRV9DU1JfSEEgKE1FIENvbnRyb2wgU3RhdHVzIEhvc3QgQWNjZXNzIHJlZ2lzdGVyKSAqLworLyogTUUgQ0IgKENpcmN1bGFyIEJ1ZmZlcikgRGVwdGggSFJBIChIb3N0IFJlYWQgQWNjZXNzKQorICogIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0NCRCAqLworI2RlZmluZSBNRV9DQkRfSFJBICAgICAgICAweEZGMDAwMDAwCisvKiBNRSBDQiBXcml0ZSBQb2ludGVyIEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9DQldQICovCisjZGVmaW5lIE1FX0NCV1BfSFJBICAgICAgIDB4MDBGRjAwMDAKKy8qIE1FIENCIFJlYWQgUG9pbnRlciBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfQ0JSUCAqLworI2RlZmluZSBNRV9DQlJQX0hSQSAgICAgICAweDAwMDBGRjAwCisvKiBNRSBSZXNldCBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfUlNUICovCisjZGVmaW5lIE1FX1JTVF9IUkEgICAgICAgIDB4MDAwMDAwMTAKKy8qIE1FIFJlYWR5IEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9SRFkgKi8KKyNkZWZpbmUgTUVfUkRZX0hSQSAgICAgICAgMHgwMDAwMDAwOAorLyogTUUgSW50ZXJydXB0IEdlbmVyYXRlIEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9JRyAqLworI2RlZmluZSBNRV9JR19IUkEgICAgICAgICAweDAwMDAwMDA0CisvKiBNRSBJbnRlcnJ1cHQgU3RhdHVzIEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9JUyAqLworI2RlZmluZSBNRV9JU19IUkEgICAgICAgICAweDAwMDAwMDAyCisvKiBNRSBJbnRlcnJ1cHQgRW5hYmxlIEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9JRSAqLworI2RlZmluZSBNRV9JRV9IUkEgICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgSEVDSV9NSU5PUlNfQkFTRQkxCisjZGVmaW5lIEhFQ0lfTUlOT1JTX0NPVU5UCTEKKworI2RlZmluZSAgSEVDSV9NSU5PUl9OVU1CRVIJMQorI2RlZmluZSAgSEVDSV9NQVhfT1BFTl9IQU5ETEVfQ09VTlQJMjUzCisKKy8qCisgKiBkZWJ1ZyBrZXJuZWwgcHJpbnQgbWFjcm8gZGVmaW5lCisgKi8KK2V4dGVybiBpbnQgaGVjaV9kZWJ1ZzsKKworI2RlZmluZSBEQkcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgXAorCWlmIChoZWNpX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gImhlY2k6ICVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjIGFyZyk7IFwKK30gd2hpbGUgKDApCisKKworLyoKKyAqIHRpbWUgdG8gd2FpdCBIRUNJIGJlY29tZSByZWFkeSBhZnRlciBpbml0CisgKi8KKyNkZWZpbmUgSEVDSV9JTlRFUk9QX1RJTUVPVVQgICAgKEhaICogNykKKworLyoKKyAqIHdhdGNoIGRvZyBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgSEVDSV9XQVRDSERPR19EQVRBX1NJWkUgICAgICAgICAxNgorI2RlZmluZSBIRUNJX1NUQVJUX1dEX0RBVEFfU0laRSAgICAgICAgIDIwCisjZGVmaW5lIEhFQ0lfV0RfUEFSQU1TX1NJWkUgICAgICAgICAgICAgNAorI2RlZmluZSBIRUNJX1dEX1NUQVRFX0lOREVQRU5ERU5DRV9NU0dfU0VOVCAgICAgICAoMSA8PCAwKQorCisjZGVmaW5lIEhFQ0lfV0RfSE9TVF9DTElFTlRfSUQgICAgICAgICAgMQorI2RlZmluZSBIRUNJX0lBTVRISUZfSE9TVF9DTElFTlRfSUQgICAgIDIKKworc3RydWN0IGd1aWQgeworCV9fdTMyIGRhdGExOworCV9fdTE2IGRhdGEyOworCV9fdTE2IGRhdGEzOworCV9fdTggZGF0YTRbOF07Cit9OworCisvKiBGaWxlIHN0YXRlICovCitlbnVtIGZpbGVfc3RhdGUgeworCUhFQ0lfRklMRV9JTklUSUFMSVpJTkcgPSAwLAorCUhFQ0lfRklMRV9DT05ORUNUSU5HLAorCUhFQ0lfRklMRV9DT05ORUNURUQsCisJSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkcsCisJSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRAorfTsKKworLyogSEVDSSBkZXZpY2Ugc3RhdGVzICovCitlbnVtIGhlY2lfc3RhdGVzIHsKKwlIRUNJX0lOSVRJQUxJWklORyA9IDAsCisJSEVDSV9FTkFCTEVELAorCUhFQ0lfUkVTRVRJTkcsCisJSEVDSV9ESVNBQkxFRCwKKwlIRUNJX1JFQ09WRVJJTkdfRlJPTV9SRVNFVCwKKwlIRUNJX1BPV0VSX0RPV04sCisJSEVDSV9QT1dFUl9VUAorfTsKKworZW51bSBpYW10aGlmX3N0YXRlcyB7CisJSEVDSV9JQU1USElGX0lETEUsCisJSEVDSV9JQU1USElGX1dSSVRJTkcsCisJSEVDSV9JQU1USElGX0ZMT1dfQ09OVFJPTCwKKwlIRUNJX0lBTVRISUZfUkVBRElORywKKwlIRUNJX0lBTVRISUZfUkVBRF9DT01QTEVURQorfTsKKworZW51bSBoZWNpX2ZpbGVfdHJhbnNhY3Rpb25fc3RhdGVzIHsKKwlIRUNJX0lETEUsCisJSEVDSV9XUklUSU5HLAorCUhFQ0lfV1JJVEVfQ09NUExFVEUsCisJSEVDSV9GTE9XX0NPTlRST0wsCisJSEVDSV9SRUFESU5HLAorCUhFQ0lfUkVBRF9DT01QTEVURQorfTsKKworLyogSEVDSSBDQiAqLworZW51bSBoZWNpX2NiX21ham9yX3R5cGVzIHsKKwlIRUNJX1JFQUQgPSAwLAorCUhFQ0lfV1JJVEUsCisJSEVDSV9JT0NUTCwKKwlIRUNJX09QRU4sCisJSEVDSV9DTE9TRQorfTsKKworLyogSEVDSSB1c2VyIGRhdGEgc3RydWN0ICovCitzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgeworCV9fdTMyIHNpemU7CisJY2hhciAqZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgSEVDSV9DT05ORUNUX1RJTUVPVVQgICAgICAgICAgICAgMwkvKiBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKworI2RlZmluZSBJQU1USElGX1NUQUxMX1RJTUVSICAgICAgICAgICAgICAxMgkvKiBzZWNvbmRzICovCisjZGVmaW5lIElBTVRISUZfUkVBRF9USU1FUiAgICAgICAgICAgICAgIDE1CS8qIHNlY29uZHMgKi8KKworc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0OworCWVudW0gaGVjaV9jYl9tYWpvcl90eXBlcyBtYWpvcl9maWxlX29wZXJhdGlvbnM7CisJdm9pZCAqZmlsZV9wcml2YXRlOworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSByZXF1ZXN0X2J1ZmZlcjsKKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgcmVzcG9uc2VfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaW5mb3JtYXRpb247CisJdW5zaWduZWQgbG9uZyByZWFkX3RpbWU7CisJc3RydWN0IGZpbGUgKmZpbGVfb2JqZWN0OworfTsKKworLyogUHJpdmF0ZSBmaWxlIHN0cnVjdCAqLworc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJZW51bSBmaWxlX3N0YXRlIHN0YXRlOworCXdhaXRfcXVldWVfaGVhZF90IHR4X3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgcnhfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXNwaW5sb2NrX3QgZmlsZV9sb2NrOyAvKiBmaWxlIGxvY2sgKi8KKwlzcGlubG9ja190IHJlYWRfaW9fbG9jazsgLyogcmVhZCBsb2NrICovCisJc3BpbmxvY2tfdCB3cml0ZV9pb19sb2NrOyAvKiB3cml0ZSBsb2NrICovCisJaW50IHJlYWRfcGVuZGluZzsKKwlpbnQgc3RhdHVzOworCS8qIElEIG9mIGNsaWVudCBjb25uZWN0ZWQgKi8KKwlfX3U4IGhvc3RfY2xpZW50X2lkOworCV9fdTggbWVfY2xpZW50X2lkOworCV9fdTggZmxvd19jdHJsX2NyZWRzOworCV9fdTggdGltZXJfY291bnQ7CisJZW51bSBoZWNpX2ZpbGVfdHJhbnNhY3Rpb25fc3RhdGVzIHJlYWRpbmdfc3RhdGU7CisJZW51bSBoZWNpX2ZpbGVfdHJhbnNhY3Rpb25fc3RhdGVzIHdyaXRpbmdfc3RhdGU7CisJaW50IHNtX3N0YXRlOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnJlYWRfY2I7Cit9OworCitzdHJ1Y3QgaW9faGVjaV9saXN0IHsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlIGhlY2lfY2I7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2aWNlX2V4dGVuc2lvbjsKK307CisKK3N0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uIHsKKwlfX3U4IG1ham9yOworCV9fdTggbWlub3I7CisJX191OCBob3RmaXg7CisJX191MTYgYnVpbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBoZWNpX2NsaWVudCB7CisJX191MzIgbWF4X21zZ19sZW5ndGg7CisJX191OCBwcm90b2NvbF92ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqICBIRUNJIEJVUyBJbnRlcmZhY2UgU2VjdGlvbgorICovCitzdHJ1Y3QgaGVjaV9tc2dfaGRyIHsKKwlfX3UzMiBtZV9hZGRyOjg7CisJX191MzIgaG9zdF9hZGRyOjg7CisJX191MzIgbGVuZ3RoOjk7CisJX191MzIgcmVzZXJ2ZWQ6NjsKKwlfX3UzMiBtc2dfY29tcGxldGU6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGhibV9jbWQgeworCV9fdTggY21kOjc7CisJX191OCBpc19yZXNwb25zZToxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaGVjaV9idXNfbWVzc2FnZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggY29tbWFuZF9zcGVjaWZpY19kYXRhW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX3ZlcnNpb24geworCV9fdTggbWlub3JfdmVyc2lvbjsKKwlfX3U4IG1ham9yX3ZlcnNpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCByZXNlcnZlZDsKKwlzdHJ1Y3QgaGJtX3ZlcnNpb24gaG9zdF92ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVzcG9uc2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlpbnQgaG9zdF92ZXJzaW9uX3N1cHBvcnRlZDsKKwlzdHJ1Y3QgaGJtX3ZlcnNpb24gbWVfbWF4X3ZlcnNpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCByZWFzb247CisJX191OCByZXNlcnZlZFsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1faG9zdF9zdG9wX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fbWVfc3RvcF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCByZWFzb247CisJX191OCByZXNlcnZlZFsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9ob3N0X2VudW1fcmVzcG9uc2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IHJlc2VydmVkWzNdOworCV9fdTggdmFsaWRfYWRkcmVzc2VzWzMyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoZWNpX2NsaWVudF9wcm9wZXJ0aWVzIHsKKwlzdHJ1Y3QgZ3VpZCBwcm90b2NvbF9uYW1lOworCV9fdTggcHJvdG9jb2xfdmVyc2lvbjsKKwlfX3U4IG1heF9udW1iZXJfb2ZfY29ubmVjdGlvbnM7CisJX191OCBmaXhlZF9hZGRyZXNzOworCV9fdTggc2luZ2xlX3JlY3ZfYnVmOworCV9fdTMyIG1heF9tc2dfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBhZGRyZXNzOworCV9fdTggcmVzZXJ2ZWRbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBoYm1fcHJvcHNfcmVzcG9uc2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IGFkZHJlc3M7CisJX191OCBzdGF0dXM7CisJX191OCByZXNlcnZlZFsxXTsKKwlzdHJ1Y3QgaGVjaV9jbGllbnRfcHJvcGVydGllcyBjbGllbnRfcHJvcGVydGllczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggbWVfYWRkcjsKKwlfX3U4IGhvc3RfYWRkcjsKKwlfX3U4IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggbWVfYWRkcjsKKwlfX3U4IGhvc3RfYWRkcjsKKwlfX3U4IHN0YXR1czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggbWVfYWRkcjsKKwlfX3U4IGhvc3RfYWRkcjsKKwlfX3U4IHJlc2VydmVkWzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9mbG93X2NvbnRyb2wgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IG1lX2FkZHI7CisJX191OCBob3N0X2FkZHI7CisJX191OCByZXNlcnZlZFtIRUNJX0ZDX01FU1NBR0VfUkVTRVJWRURfTEVOR1RIXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoZWNpX21lX2NsaWVudCB7CisJc3RydWN0IGhlY2lfY2xpZW50X3Byb3BlcnRpZXMgcHJvcHM7CisJX191OCBjbGllbnRfaWQ7CisJX191OCBmbG93X2N0cmxfY3JlZHM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBwcml2YXRlIGRldmljZSBzdHJ1Y3QgKi8KK3N0cnVjdCBpYW10X2hlY2lfZGV2aWNlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJLyogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdCAqLworCS8qCisJICogbGlzdHMgb2YgcXVldWVzCisJICovCisJIC8qIGFycmF5IG9mIHBvaW50ZXJzIHRvICBhaW8gbGlzdHMgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0ICppb19saXN0X2FycmF5W0hFQ0lfSU9fTElTVFNfTlVNQkVSXTsKKwlzdHJ1Y3QgaW9faGVjaV9saXN0IHJlYWRfbGlzdDsJLyogZHJpdmVyIHJlYWQgcXVldWUgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0IHdyaXRlX2xpc3Q7CS8qIGRyaXZlciB3cml0ZSBxdWV1ZSAqLworCXN0cnVjdCBpb19oZWNpX2xpc3Qgd3JpdGVfd2FpdGluZ19saXN0OwkvKiB3cml0ZSB3YWl0aW5nIHF1ZXVlICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCBjdHJsX3dyX2xpc3Q7CS8qIG1hbmFnZWQgd3JpdGUgSU9DVEwgbGlzdCAqLworCXN0cnVjdCBpb19oZWNpX2xpc3QgY3RybF9yZF9saXN0OwkvKiBtYW5hZ2VkIHJlYWQgSU9DVEwgbGlzdCAqLworCXN0cnVjdCBpb19oZWNpX2xpc3QgcHRoaV9jbWRfbGlzdDsJLyogUFRISSBsaXN0IGZvciBjbWQgd2FpdGluZyAqLworCisJLyogZHJpdmVyIG1hbmFnZWQgUFRISSBsaXN0IGZvciByZWFkaW5nIGNvbXBsZXRlZCBwdGhpIGNtZCBkYXRhICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCBwdGhpX3JlYWRfY29tcGxldGVfbGlzdDsKKwkvKgorCSAqIGxpc3Qgb2YgZmlsZXMKKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfbGlzdDsKKwkvKgorCSAqIG1lbW9yeSBvZiBkZXZpY2UKKwkgKi8KKwl1bnNpZ25lZCBpbnQgbWVtX2Jhc2U7CisJdW5zaWduZWQgaW50IG1lbV9sZW5ndGg7CisJdm9pZCBfX2lvbWVtICptZW1fYWRkcjsKKwkvKgorCSAqIGxvY2sgZm9yIHRoZSBkZXZpY2UKKwkgKi8KKwlzcGlubG9ja190IGRldmljZV9sb2NrOyAvKiBkZXZpY2UgbG9jayovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJaW50IHJlY3ZkX21zZzsKKworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVpbml0X3RzazsKKworCXN0cnVjdCB0aW1lcl9saXN0IHdkX3RpbWVyOworCS8qCisJICogaHcgc3RhdGVzIG9mIGhvc3QgYW5kIGZ3KE1FKQorCSAqLworCV9fdTMyIGhvc3RfaHdfc3RhdGU7CisJX191MzIgbWVfaHdfc3RhdGU7CisJLyoKKwkgKiB3YWl0aW5nIHF1ZXVlIGZvciByZWNlaXZlIG1lc3NhZ2UgZnJvbSBGVworCSAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcmVjdmRfbXNnOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfc3RvcF93ZDsKKwkvKgorCSAqIGhlY2kgZGV2aWNlICBzdGF0ZXMKKwkgKi8KKwllbnVtIGhlY2lfc3RhdGVzIGhlY2lfc3RhdGU7CisJaW50IHN0b3A7CisKKwlfX3UzMiBleHRyYV93cml0ZV9pbmRleDsKKwlfX3UzMiByZF9tc2dfYnVmWzEyOF07CS8qIHVzZWQgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKwlfX3UzMiB3cl9tc2dfYnVmWzEyOF07CS8qIHVzZWQgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKwlfX3UzMiBleHRfbXNnX2J1Zls4XTsJLyogZm9yIGNvbnRyb2wgcmVzcG9uc2VzICAgICovCisJX191MzIgcmRfbXNnX2hkcjsKKworCXN0cnVjdCBoYm1fdmVyc2lvbiB2ZXJzaW9uOworCisJaW50IGhvc3RfYnVmZmVyX2lzX2VtcHR5OworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSB3ZF9maWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9tZV9jbGllbnQgKm1lX2NsaWVudHM7IC8qIE5vdGU6IG1lbW9yeSBoYXMgdG8gYmUgYWxsb2NhdGVkKi8KKwlfX3U4IGhlY2lfbWVfY2xpZW50c1szMl07CS8qIGxpc3Qgb2YgZXhpc3RpbmcgY2xpZW50cyAqLworCV9fdTggbnVtX2hlY2lfbWVfY2xpZW50czsKKwlfX3U4IGhlY2lfaG9zdF9jbGllbnRzWzMyXTsJLyogbGlzdCBvZiBleGlzdGluZyBjbGllbnRzICovCisJX191OCBjdXJyZW50X2hvc3RfY2xpZW50X2lkOworCisJaW50IHdkX3BlbmRpbmc7CisJaW50IHdkX3N0b3BlZDsKKwlfX3UxNiB3ZF90aW1lb3V0OwkvKiBzZWNvbmRzICgod2RfZGF0YVsxXSA8PCA4KSArIHdkX2RhdGFbMF0pICovCisJdW5zaWduZWQgY2hhciB3ZF9kYXRhW0hFQ0lfU1RBUlRfV0RfREFUQV9TSVpFXTsKKworCisJX191MTYgd2RfZHVlX2NvdW50ZXI7CisJaW50IGFzZl9tb2RlOworCWludCB3ZF9ieXBhc3M7CS8qIGlmIDEsIGRvbid0IHJlZnJlc2ggd2F0Y2hkb2cgTUUgY2xpZW50ICovCisKKwlzdHJ1Y3QgZmlsZSAqaWFtdGhpZl9maWxlX29iamVjdDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgaWFtdGhpZl9maWxlX2V4dDsKKwlpbnQgaWFtdGhpZl9pb2N0bDsKKwlpbnQgaWFtdGhpZl9jYW5jZWxlZDsKKwlfX3UzMiBpYW10aGlmX3RpbWVyOworCV9fdTMyIGlhbXRoaWZfc3RhbGxfdGltZXI7CisJdW5zaWduZWQgY2hhciBpYW10aGlmX21zZ19idWZbSUFNVEhJRl9NVFVdOworCV9fdTMyIGlhbXRoaWZfbXNnX2J1Zl9zaXplOworCV9fdTMyIGlhbXRoaWZfbXNnX2J1Zl9pbmRleDsKKwlpbnQgaWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZzsKKwllbnVtIGlhbXRoaWZfc3RhdGVzIGlhbXRoaWZfc3RhdGU7CisKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICppYW10aGlmX2N1cnJlbnRfY2I7CisJX191OCB3cml0ZV9oYW5nOworCWludCBuZWVkX3Jlc2V0OworCWxvbmcgb3Blbl9oYW5kbGVfY291bnQ7CisKK307CisKKy8qKgorICogcmVhZF9oZWNpX3JlZ2lzdGVyIC0gUmVhZCBhIGJ5dGUgZnJvbSB0aGUgaGVjaSBkZXZpY2UKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQG9mZnNldDogb2Zmc2V0IGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgZGF0YQorICoKKyAqIHJldHVybnMgIHRoZSBieXRlIHJlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX191MzIgcmVhZF9oZWNpX3JlZ2lzdGVyKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChkZXYtPm1lbV9hZGRyICsgb2Zmc2V0KTsKK30KKworLyoqCisgKiB3cml0ZV9oZWNpX3JlZ2lzdGVyIC0gV3JpdGUgIDQgYnl0ZXMgdG8gdGhlIGhlY2kgZGV2aWNlCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBvZmZzZXQ6IG9mZnNldCBmcm9tIHdoaWNoIHRvIHdyaXRlIHRoZSBkYXRhCisgKiBAdmFsdWU6IHRoZSBieXRlIHRvIHdyaXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9oZWNpX3JlZ2lzdGVyKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCAgX191MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCBkZXYtPm1lbV9hZGRyICsgb2Zmc2V0KTsKK30KKworI2VuZGlmIC8qIF9IRUNJX0RBVEFfU1RSVUNUVVJFU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGEwZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbml0LmMKQEAgLTAsMCArMSwxMDc3IEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworI2luY2x1ZGUgImhlY2lfZGF0YV9zdHJ1Y3R1cmVzLmgiCisjaW5jbHVkZSAiaGVjaV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJoZWNpLmgiCisKKworY29uc3QgX191OCBoZWNpX3N0YXJ0X3dkX3BhcmFtc1tdID0geyAweDAyLCAweDEyLCAweDEzLCAweDEwIH07Citjb25zdCBfX3U4IGhlY2lfc3RvcF93ZF9wYXJhbXNbXSA9IHsgMHgwMiwgMHgwMiwgMHgxNCwgMHgxMCB9OworCitjb25zdCBfX3U4IGhlY2lfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1szXVs0XSA9IHsKKwl7MHgwNSwgMHgwMiwgMHg1MSwgMHgxMH0sCisJezB4MDUsIDB4MDIsIDB4NTIsIDB4MTB9LAorCXsweDA3LCAweDAyLCAweDAxLCAweDEwfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBndWlkIGhlY2lfYXNmX2d1aWQgPSB7CisJMHg3NUIzMENENiwgMHhBMjlFLCAweDRBRjcsCisJezB4QTcsIDB4MTIsIDB4RTYsIDB4MTcsIDB4NDMsIDB4OTMsIDB4QzgsIDB4QTZ9Cit9OworY29uc3Qgc3RydWN0IGd1aWQgaGVjaV93ZF9ndWlkID0geworCTB4MDVCNzlBNkYsIDB4NDYyOCwgMHg0RDdGLAorCXsweDg5LCAweDlELCAweEE5LCAweDE1LCAweDE0LCAweENCLCAweDMyLCAweEFCfQorfTsKK2NvbnN0IHN0cnVjdCBndWlkIGhlY2lfcHRoaV9ndWlkID0geworCTB4MTJmODAwMjgsIDB4YjRiNywgMHg0YjJkLAorCXsweGFjLCAweGE4LCAweDQ2LCAweGUwLCAweGZmLCAweDY1LCAweDgxLCAweDRjfQorfTsKKworCisvKgorICogIGhlY2kgaW5pdCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfY2hlY2tfYXNmX21vZGUoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGhvc3Rfc3RhcnRfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaG9zdF9lbnVtX2NsaWVudHNfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgYWxsb2NhdGVfbWVfY2xpZW50c19zdG9yYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgaG9zdF9pbml0X3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgaG9zdF9pbml0X2lhbXRoaWYoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGhlY2lfd2FpdF9ldmVudF9pbnRfdGltZW91dChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBsb25nIHRpbWVvdXQpOworCisKKy8qKgorICogaGVjaV9pbml0aWFsaXplX2xpc3QgLSBTZXRzIHVwIGEgcXVldWUgbGlzdC4KKyAqCisgKiBAbGlzdDogQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK3ZvaWQgaGVjaV9pbml0aWFsaXplX2xpc3Qoc3RydWN0IGlvX2hlY2lfbGlzdCAqbGlzdCwKKwkJCSAgc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwkvKiBpbml0aWFsaXplIG91ciBxdWV1ZSBsaXN0ICovCisJSU5JVF9MSVNUX0hFQUQoJmxpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJbGlzdC0+c3RhdHVzID0gMDsKKwlsaXN0LT5kZXZpY2VfZXh0ZW5zaW9uID0gZGV2OworfQorCisvKioKKyAqIGhlY2lfZmx1c2hfcXVldWVzIC0gZmx1c2ggb3VyIHF1ZXVlcyBsaXN0IGJlbG9uZyB0byBmaWxlX2V4dC4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqLwordm9pZCBoZWNpX2ZsdXNoX3F1ZXVlcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlpbnQgaTsKKworCWlmICghZGV2IHx8ICFmaWxlX2V4dCkKKwkJcmV0dXJuOworCisJLyogZmx1c2ggb3VyIHF1ZXVlIGxpc3QgYmVsb25nIHRvIGZpbGVfZXh0ICovCisJZm9yIChpID0gMDsgaSA8IEhFQ0lfSU9fTElTVFNfTlVNQkVSOyBpKyspIHsKKwkJREJHKCJyZW1vdmUgbGlzdCBlbnRyeSBiZWxvbmcgdG8gZmlsZV9leHRcbiIpOworCQloZWNpX2ZsdXNoX2xpc3QoZGV2LT5pb19saXN0X2FycmF5W2ldLCBmaWxlX2V4dCk7CisJfQorfQorCisKKy8qKgorICogaGVjaV9mbHVzaF9saXN0IC0gcmVtb3ZlIGxpc3QgZW50cnkgYmVsb25nIHRvIGZpbGVfZXh0LgorICoKKyAqIEBsaXN0OiAgQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqLwordm9pZCBoZWNpX2ZsdXNoX2xpc3Qoc3RydWN0IGlvX2hlY2lfbGlzdCAqbGlzdCwKKwkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0X3RtcDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKworCWlmICghbGlzdCB8fCAhZmlsZV9leHQpCisJCXJldHVybjsKKworCWlmIChsaXN0LT5zdGF0dXMgIT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGxpc3RfZW1wdHkoJmxpc3QtPmhlY2lfY2IuY2JfbGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSAmbGlzdC0+aGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCWlmIChwcml2X2NiX3BvcykgeworCQkJZmlsZV9leHRfdG1wID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoZmlsZV9leHRfdG1wKSB7CisJCQkJaWYgKGhlY2lfZmVfc2FtZV9pZChmaWxlX2V4dCwgZmlsZV9leHRfdG1wKSkKKwkJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBoZWNpX3Jlc2V0X2lhbXRoaWZfcGFyYW1zIC0gaW5pdGlhbGl6ZXMgaGVjaSBkZXZpY2UgaWFtdGhpZgorICoKKyAqIEBkZXY6IFRoZSBoZWNpIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgaGVjaV9yZXNldF9pYW10aGlmX3BhcmFtcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCS8qIHJlc2V0IGlhbXRoaWYgcGFyYW1ldGVycy4gKi8KKwlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IDA7CisJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggPSAwOworCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJZGV2LT5pYW10aGlmX2ZpbGVfZXh0LmZpbGUgPSBOVUxMOworCWRldi0+aWFtdGhpZl9pb2N0bCA9IDA7CisJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisJZGV2LT5pYW10aGlmX3RpbWVyID0gMDsKK30KKworLyoqCisgKiBpbml0X2hlY2lfZGV2aWNlIC0gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgaGVjaSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogQHBkZXY6IFRoZSBwY2kgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgVGhlIGhlY2lfZGV2aWNlX2RldmljZSBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmluaXRfaGVjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJLyogc2V0dXAgb3VyIGxpc3QgYXJyYXkgKi8KKwlkZXYtPmlvX2xpc3RfYXJyYXlbMF0gPSAmZGV2LT5yZWFkX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzFdID0gJmRldi0+d3JpdGVfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbMl0gPSAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzNdID0gJmRldi0+Y3RybF93cl9saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVs0XSA9ICZkZXYtPmN0cmxfcmRfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbNV0gPSAmZGV2LT5wdGhpX2NtZF9saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVs2XSA9ICZkZXYtPnB0aGlfcmVhZF9jb21wbGV0ZV9saXN0OworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZpbGVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+d2RfZmlsZV9leHQubGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+aWFtdGhpZl9maWxlX2V4dC5saW5rKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X3JlY3ZkX21zZyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X3N0b3Bfd2QpOworCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfSU5JVElBTElaSU5HOworCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCisJLyogaW5pdCB3b3JrIGZvciBzY2hlZHVsZSB3b3JrICovCisJSU5JVF9XT1JLKCZkZXYtPndvcmssIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBIRUNJX0lPX0xJU1RTX05VTUJFUjsgaSsrKQorCQloZWNpX2luaXRpYWxpemVfbGlzdChkZXYtPmlvX2xpc3RfYXJyYXlbaV0sIGRldik7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlyZXR1cm4gZGV2OworfQorCisKKworCitzdGF0aWMgaW50IGhlY2lfd2FpdF9ldmVudF9pbnRfdGltZW91dChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlsb25nIHRpbWVvdXQpCit7CisJcmV0dXJuIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d2FpdF9yZWN2ZF9tc2csCisJCQkoZGV2LT5yZWN2ZF9tc2cpLCB0aW1lb3V0KTsKK30KKworLyoqCisgKiBoZWNpX2h3X2luaXQgIC0gaW5pdCBob3N0IGFuZCBmdyB0byBzdGFydCB3b3JrLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfaHdfaW5pdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWludCBlcnIgPSAwOworCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCWRldi0+bWVfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DU1JfSEEpOworCURCRygiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVzdGF0ZSA9IDB4JTA4eC5cbiIsCisJICAgIGRldi0+aG9zdF9od19zdGF0ZSwgZGV2LT5tZV9od19zdGF0ZSk7CisKKwlpZiAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfSVMpID09IEhfSVMpIHsKKwkJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0IGFuZCBzdG9wIGludGVydXB0cyAqLworCQloZWNpX3NldF9jc3JfcmVnaXN0ZXIoZGV2KTsKKwl9CisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCURCRygicmVzZXQgaW4gc3RhcnQgdGhlIGhlY2kgZGV2aWNlLlxuIik7CisKKwloZWNpX3Jlc2V0KGRldiwgMSk7CisKKwlEQkcoImhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lX2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKKworCS8qIHdhaXQgZm9yIE1FIHRvIHR1cm4gb24gTUVfUkRZICovCisJaWYgKCFkZXYtPnJlY3ZkX21zZykKKwkJZXJyID0gaGVjaV93YWl0X2V2ZW50X2ludF90aW1lb3V0KGRldiwgSEVDSV9JTlRFUk9QX1RJTUVPVVQpOworCisJaWYgKCFlcnIgJiYgIWRldi0+cmVjdmRfbXNnKSB7CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCURCRygid2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgZmFpbGVkIgorCQkgICAgIm9uIHdhaXQgZm9yIE1FIHRvIHR1cm4gb24gTUVfUkRZLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCWlmICghKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpID09IEhfUkRZKQorCQkgICAgICAmJiAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSA9PSBNRV9SRFlfSFJBKSkpIHsKKwkJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCQlEQkcoImhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lX2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkJCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsCisJCQkgICAgZGV2LT5tZV9od19zdGF0ZSk7CisKKwkJCWlmICghKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUkRZKSAhPSBIX1JEWSkKKwkJCQlEQkcoImhvc3QgdHVybiBvZmYgSF9SRFkuXG4iKTsKKworCQkJaWYgKCEoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpICE9IE1FX1JEWV9IUkEpCisJCQkJREJHKCJNRSB0dXJuIG9mZiBNRV9SRFkuXG4iKTsKKworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImhlY2k6IGxpbmsgbGF5ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJREJHKCJob3N0X2h3X3N0YXRlID0gMHglMDh4LCBtZV9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJICAgIGRldi0+aG9zdF9od19zdGF0ZSwgZGV2LT5tZV9od19zdGF0ZSk7CisJREJHKCJNRSB0dXJuIG9uIE1FX1JEWSBhbmQgaG9zdCB0dXJuIG9uIEhfUkRZLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiaGVjaTogbGluayBsYXllciBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfaHdfcmVzZXQgLSByZXNldCBmdyB2aWEgaGVjaSBjc3IgcmVnaXN0ZXIuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGludGVycnVwdHM6IGlmIGludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlIGFmdGVyIHJlc2V0LgorICovCitzdGF0aWMgdm9pZCBoZWNpX2h3X3Jlc2V0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpbnRlcnJ1cHRzKQoreworCWRldi0+aG9zdF9od19zdGF0ZSB8PSAoSF9SU1QgfCBIX0lHKTsKKworCWlmIChpbnRlcnJ1cHRzKQorCQloZWNpX2Nzcl9lbmFibGVfaW50ZXJydXB0cyhkZXYpOworCWVsc2UKKwkJaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7CisKKwlCVUdfT04oKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUlNUKSAhPSBIX1JTVCk7CisJQlVHX09OKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgIT0gMCk7Cit9CisKKy8qKgorICogaGVjaV9yZXNldCAtIHJlc2V0IGhvc3QgYW5kIGZ3LgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpbnRlcnJ1cHRzOiBpZiBpbnRlcnJ1cHQgc2hvdWxkIGJlIGVuYWJsZSBhZnRlciByZXNldC4KKyAqLwordm9pZCBoZWNpX3Jlc2V0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpbnRlcnJ1cHRzKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKwlpbnQgdW5leHBlY3RlZCA9IDA7CisKKwlpZiAoZGV2LT5oZWNpX3N0YXRlID09IEhFQ0lfUkVDT1ZFUklOR19GUk9NX1JFU0VUKSB7CisJCWRldi0+bmVlZF9yZXNldCA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfSU5JVElBTElaSU5HICYmCisJICAgIGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0RJU0FCTEVEICYmCisJICAgIGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX1BPV0VSX0RPV04gJiYKKwkgICAgZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfUE9XRVJfVVApCisJCXVuZXhwZWN0ZWQgPSAxOworCisJaWYgKGRldi0+cmVpbml0X3RzayAhPSBOVUxMKSB7CisJCWt0aHJlYWRfc3RvcChkZXYtPnJlaW5pdF90c2spOworCQlkZXYtPnJlaW5pdF90c2sgPSBOVUxMOworCX0KKworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKworCURCRygiYmVmb3JlIHJlc2V0IGhvc3RfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUpOworCisJaGVjaV9od19yZXNldChkZXYsIGludGVycnVwdHMpOworCisJZGV2LT5ob3N0X2h3X3N0YXRlICY9IH5IX1JTVDsKKwlkZXYtPmhvc3RfaHdfc3RhdGUgfD0gSF9JRzsKKworCXdyaXRlX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUiwgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKworCURCRygiY3VycmVudGx5IHNhdmVkIGhvc3RfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUpOworCisJZGV2LT5uZWVkX3Jlc2V0ID0gMDsKKworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9JTklUSUFMSVpJTkcpIHsKKwkJaWYgKChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9ESVNBQkxFRCkgJiYKKwkJICAgIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9QT1dFUl9ET1dOKSkKKwkJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfUkVTRVRJTkc7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLAorCQkJCWZpbGVfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCQlmaWxlX3Bvcy0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCQkJZmlsZV9wb3MtPmZsb3dfY3RybF9jcmVkcyA9IDA7CisJCQlmaWxlX3Bvcy0+cmVhZF9jYiA9IE5VTEw7CisJCQlmaWxlX3Bvcy0+dGltZXJfY291bnQgPSAwOworCQl9CisJCS8qIHJlbW92ZSBlbnRyeSBpZiBhbHJlYWR5IGluIGxpc3QgKi8KKwkJREJHKCJsaXN0IGRlbCBpYW10aGlmIGFuZCB3ZCBmaWxlIGxpc3QuXG4iKTsKKwkJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwKKwkJCQlkZXYtPndkX2ZpbGVfZXh0Lmhvc3RfY2xpZW50X2lkKTsKKworCQloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LAorCQkJCWRldi0+aWFtdGhpZl9maWxlX2V4dC5ob3N0X2NsaWVudF9pZCk7CisKKwkJaGVjaV9yZXNldF9pYW10aGlmX3BhcmFtcyhkZXYpOworCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJZGV2LT5leHRyYV93cml0ZV9pbmRleCA9IDA7CisJfQorCisJZGV2LT5udW1faGVjaV9tZV9jbGllbnRzID0gMDsKKwlkZXYtPnJkX21zZ19oZHIgPSAwOworCWRldi0+c3RvcCA9IDA7CisJZGV2LT53ZF9wZW5kaW5nID0gMDsKKworCS8qIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHJlZ2lzdGVycyBhZnRlciByZXNldCAqLworCWRldi0+aG9zdF9od19zdGF0ZSA9ICByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJZGV2LT5tZV9od19zdGF0ZSA9ICByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DU1JfSEEpOworCisJREJHKCJhZnRlciByZXNldCBob3N0X2h3X3N0YXRlID0gMHglMDh4LCBtZV9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJICAgIGRldi0+aG9zdF9od19zdGF0ZSwgZGV2LT5tZV9od19zdGF0ZSk7CisKKwlpZiAodW5leHBlY3RlZCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVjaTogdW5leHBlY3RlZCByZXNldC5cbiIpOworCisJLyogV2FrZSB1cCBhbGwgcmVhZGluZ3Mgc28gdGhleSBjYW4gYmUgaW50ZXJydXB0ZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsIGZpbGVfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCWlmICgmZmlsZV9wb3MtPnJ4X3dhaXQgJiYKKwkJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJmZpbGVfcG9zLT5yeF93YWl0KSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiaGVjaTogV2FraW5nIHVwIGNsaWVudCFcbiIpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmaWxlX3Bvcy0+cnhfd2FpdCk7CisJCX0KKwl9CisJLyogcmVtb3ZlIGFsbCB3YWl0aW5nIHJlcXVlc3RzICovCisJaWYgKGRldi0+d3JpdGVfbGlzdC5zdGF0dXMgPT0gMCAmJgorCQkhbGlzdF9lbXB0eSgmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWlmIChwcml2X2NiX3BvcykgeworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYl9wb3MpOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIGhlY2lfaW5pdGlhbGl6ZV9jbGllbnRzIC0gaGVjaSBjb21tdW5pY2F0aW9uIGluaXRpYWxpemF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLworaW50IGhlY2lfaW5pdGlhbGl6ZV9jbGllbnRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJaW50IHN0YXR1czsKKworCW1zbGVlcCgxMDApOyAvKiBGVyBuZWVkcyB0aW1lIHRvIGJlIHJlYWR5IHRvIHRhbGsgd2l0aCB1cyAqLworCURCRygibGluayBpcyBlc3RhYmxpc2hlZCBzdGFydCBzZW5kaW5nIG1lc3NhZ2VzLlxuIik7CisJLyogbGluayBpcyBlc3RhYmxpc2hlZCBzdGFydCBzZW5kaW5nIG1lc3NhZ2VzLiAqLworCXN0YXR1cyA9IGhvc3Rfc3RhcnRfbWVzc2FnZShkZXYpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCURCRygic3RhcnQgc2VuZGluZyBtZXNzYWdlcyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBlbnVtZXJhdGUgY2xpZW50cyAqLworCXN0YXR1cyA9IGhvc3RfZW51bV9jbGllbnRzX21lc3NhZ2UoZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlEQkcoImVudW0gY2xpZW50cyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyogYWxsb2NhdGUgc3RvcmFnZSBmb3IgTUUgY2xpZW50cyByZXByZXNlbnRhdGlvbiAqLworCXN0YXR1cyA9IGFsbG9jYXRlX21lX2NsaWVudHNfc3RvcmFnZShkZXYpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlkZXYtPm51bV9oZWNpX21lX2NsaWVudHMgPSAwOworCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCURCRygiYWxsb2NhdGUgY2xpZW50cyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwloZWNpX2NoZWNrX2FzZl9tb2RlKGRldik7CisJLypoZWNpIGluaXRpYWxpemF0aW9uIHdkICovCisJaG9zdF9pbml0X3dkKGRldik7CisJLypoZWNpIGluaXRpYWxpemF0aW9uIGlhbXRoaWYgY2xpZW50ICovCisJaG9zdF9pbml0X2lhbXRoaWYoZGV2KTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+bmVlZF9yZXNldCkgeworCQlkZXYtPm5lZWRfcmVzZXQgPSAwOworCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1lbXNldChkZXYtPmhlY2lfaG9zdF9jbGllbnRzLCAwLCBzaXplb2YoZGV2LT5oZWNpX2hvc3RfY2xpZW50cykpOworCWRldi0+b3Blbl9oYW5kbGVfY291bnQgPSAwOworCWRldi0+aGVjaV9ob3N0X2NsaWVudHNbMF0gfD0gNzsKKwlkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQgPSAzOworCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRU5BQkxFRDsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJREJHKCJpbml0aWFsaXphdGlvbiBoZWNpIGNsaWVudHMgc3VjY2Vzc2Z1bC5cbiIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfdGFza19pbml0aWFsaXplX2NsaWVudHMgLSBoZWNpIHJlaW5pdGlhbGl6YXRpb24gdGFzaworICoKKyAqIEBkYXRhOiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK2ludCBoZWNpX3Rhc2tfaW5pdGlhbGl6ZV9jbGllbnRzKHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICopIGRhdGE7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPnJlaW5pdF90c2sgIT0gTlVMTCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCURCRygicmVpbml0IHRhc2sgYWxyZWFkeSBzdGFydGVkLlxuIik7CisJCXJldHVybiAwOworCX0KKwlkZXYtPnJlaW5pdF90c2sgPSBjdXJyZW50OworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXJldCA9IGhlY2lfaW5pdGlhbGl6ZV9jbGllbnRzKGRldik7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWRldi0+cmVpbml0X3RzayA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBob3N0X3N0YXJ0X21lc3NhZ2UgLSBoZWNpIGhvc3Qgc2VuZCBzdGFydCBtZXNzYWdlLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBob3N0X3N0YXJ0X21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlsb25nIHRpbWVvdXQgPSA2MDsJLyogNjAgc2Vjb25kICovCisKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0ICpob3N0X3N0YXJ0X3JlcTsKKwlzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0ICpob3N0X3N0b3BfcmVxOworCWludCBlcnIgPSAwOworCisJLyogaG9zdCBzdGFydCBtZXNzYWdlICovCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3JlcXVlc3QpOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlob3N0X3N0YXJ0X3JlcSA9CisJICAgIChzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVtc2V0KGhvc3Rfc3RhcnRfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCkpOworCWhvc3Rfc3RhcnRfcmVxLT5jbWQuY21kID0gSE9TVF9TVEFSVF9SRVFfQ01EOworCWhvc3Rfc3RhcnRfcmVxLT5ob3N0X3ZlcnNpb24ubWFqb3JfdmVyc2lvbiA9IEhCTV9NQUpPUl9WRVJTSU9OOworCWhvc3Rfc3RhcnRfcmVxLT5ob3N0X3ZlcnNpb24ubWlub3JfdmVyc2lvbiA9IEhCTV9NSU5PUl9WRVJTSU9OOworCWRldi0+cmVjdmRfbXNnID0gMDsKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSAoaG9zdF9zdGFydF9yZXEpLAorCQkJCSAgICAgICBoZWNpX2hkci0+bGVuZ3RoKSkgeworCQlEQkcoInNlbmQgdmVyc2lvbiB0byBmdyBmYWlsLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlEQkcoImNhbGwgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgZm9yIHJlc3BvbnNlIG1lc3NhZ2UuXG4iKTsKKwkvKiB3YWl0IGZvciByZXNwb25zZSAqLworCWVyciA9IGhlY2lfd2FpdF9ldmVudF9pbnRfdGltZW91dChkZXYsIHRpbWVvdXQgKiBIWik7CisJaWYgKCFlcnIgJiYgIWRldi0+cmVjdmRfbXNnKSB7CisJCURCRygid2FpdF90aW1lb3V0IGZhaWxlZCBvbiBob3N0IHN0YXJ0IHJlc3BvbnNlIG1lc3NhZ2UuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldi0+cmVjdmRfbXNnID0gMDsKKwlEQkcoIndhaXRfdGltZW91dCBzdWNjZXNzZnVsIG9uIGhvc3Qgc3RhcnQgcmVzcG9uc2UgbWVzc2FnZS5cbiIpOworCWlmICgoZGV2LT52ZXJzaW9uLm1ham9yX3ZlcnNpb24gIT0gSEJNX01BSk9SX1ZFUlNJT04pIHx8CisJICAgIChkZXYtPnZlcnNpb24ubWlub3JfdmVyc2lvbiAhPSBIQk1fTUlOT1JfVkVSU0lPTikpIHsKKwkJLyogc2VuZCBzdG9wIG1lc3NhZ2UgKi8KKwkJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwkJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0KTsKKwkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJaG9zdF9zdG9wX3JlcSA9CisJCSAgICAoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCisJCW1lbXNldChob3N0X3N0b3BfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCkpOworCQlob3N0X3N0b3BfcmVxLT5jbWQuY21kID0gSE9TVF9TVE9QX1JFUV9DTUQ7CisJCWhvc3Rfc3RvcF9yZXEtPnJlYXNvbiA9IERSSVZFUl9TVE9QX1JFUVVFU1Q7CisJCWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSAgICh1bnNpZ25lZCBjaGFyICopIChob3N0X3N0b3BfcmVxKSwKKwkJCQkgICBoZWNpX2hkci0+bGVuZ3RoKTsKKwkJREJHKCJ2ZXJzaW9uIG1pc21hdGNoLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhvc3RfZW51bV9jbGllbnRzX21lc3NhZ2UgLSBob3N0IHNlbmQgZW51bWVyYXRpb24gY2xpZW50IHJlcXVlc3QgbWVzc2FnZS4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaG9zdF9lbnVtX2NsaWVudHNfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWxvbmcgdGltZW91dCA9IDU7CS8qNSBzZWNvbmQgKi8KKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXF1ZXN0ICpob3N0X2VudW1fcmVxOworCWludCBlcnIgPSAwOworCWludCBpLCBqOworCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCS8qIGVudW1lcmF0ZSBjbGllbnRzICovCisJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCk7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWhvc3RfZW51bV9yZXEgPSAoc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCW1lbXNldChob3N0X2VudW1fcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCkpOworCWhvc3RfZW51bV9yZXEtPmNtZC5jbWQgPSBIT1NUX0VOVU1fUkVRX0NNRDsKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopIChob3N0X2VudW1fcmVxKSwKKwkJCSAgICAgICBoZWNpX2hkci0+bGVuZ3RoKSkgeworCQlEQkcoInNlbmQgZW51bWVyYXRpb24gcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCWVyciA9IGhlY2lfd2FpdF9ldmVudF9pbnRfdGltZW91dChkZXYsIHRpbWVvdXQgKiBIWik7CisJaWYgKCFlcnIgJiYgIWRldi0+cmVjdmRfbXNnKSB7CisJCURCRygid2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgZmFpbGVkICIKKwkJCQkib24gZW51bWVyYXRpb24gY2xpZW50cyByZXNwb25zZSBtZXNzYWdlLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCS8qIGNvdW50IGhvdyBtYW55IE1FIGNsaWVudHMgd2UgaGF2ZSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGV2LT5oZWNpX21lX2NsaWVudHMpOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKChkZXYtPmhlY2lfbWVfY2xpZW50c1tpXSAmICgxIDw8IGopKSAhPSAwKQorCQkJCWRldi0+bnVtX2hlY2lfbWVfY2xpZW50cysrOworCisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaG9zdF9jbGllbnRfcHJvcGVydGllcyAtIHJlYWRzIHByb3BlcnRpZXMgZm9yIGNsaWVudAorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZHg6IGNsaWVudCBpbmRleCBpbiBtZSBjbGllbnQgYXJyYXkKKyAqIEBjbGllbnRfaWQ6IGlkIG9mIHRoZSBjbGllbnQKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBob3N0X2NsaWVudF9wcm9wZXJ0aWVzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaGVjaV9tZV9jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX3Byb3BzX3JlcXVlc3QgKmhvc3RfY2xpX3JlcTsKKwlpbnQgZXJyOworCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCk7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWhvc3RfY2xpX3JlcSA9IChzdHJ1Y3QgaGJtX3Byb3BzX3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQoaG9zdF9jbGlfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0KSk7CisJaG9zdF9jbGlfcmVxLT5jbWQuY21kID0gSE9TVF9DTElFTlRfUFJPUEVSVEVJU19SRVFfQ01EOworCWhvc3RfY2xpX3JlcS0+YWRkcmVzcyA9IGNsaWVudC0+Y2xpZW50X2lkOworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgKGhvc3RfY2xpX3JlcSksCisJCQkJaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJREJHKCJzZW5kIHByb3BzIHJlcXVlc3QgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiB3YWl0IGZvciByZXNwb25zZSAqLworCWRldi0+cmVjdmRfbXNnID0gMDsKKwllcnIgPSBoZWNpX3dhaXRfZXZlbnRfaW50X3RpbWVvdXQoZGV2LCAxMCAqIEhaKTsKKwlpZiAoIWVyciAmJiAhZGV2LT5yZWN2ZF9tc2cpIHsKKwkJREJHKCJ3YWl0IGZhaWxlZCBvbiBwcm9wcyByZXNwIG1zZy5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCXJldHVybiAwOworfQorCisvKioKKyAqIGFsbG9jYXRlX21lX2NsaWVudHNfc3RvcmFnZSAtIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIG1lIGNsaWVudHMKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgYWxsb2NhdGVfbWVfY2xpZW50c19zdG9yYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhlY2lfbWVfY2xpZW50ICpjbGllbnRzOworCXN0cnVjdCBoZWNpX21lX2NsaWVudCAqY2xpZW50OworCV9fdTggbnVtLCBpLCBqOworCWludCBlcnI7CisKKwlpZiAoZGV2LT5udW1faGVjaV9tZV9jbGllbnRzIDw9IDApCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlrZnJlZShkZXYtPm1lX2NsaWVudHMpOworCWRldi0+bWVfY2xpZW50cyA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogYWxsb2NhdGUgc3RvcmFnZSBmb3IgTUUgY2xpZW50cyByZXByZXNlbnRhdGlvbiAqLworCWNsaWVudHMgPSBrY2FsbG9jKGRldi0+bnVtX2hlY2lfbWVfY2xpZW50cywKKwkJCXNpemVvZihzdHJ1Y3QgaGVjaV9tZV9jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudHMpIHsKKwkJREJHKCJtZW1vcnkgYWxsb2NhdGlvbiBmb3IgTUUgY2xpZW50cyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlkZXYtPm1lX2NsaWVudHMgPSBjbGllbnRzOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCW51bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkZXYtPmhlY2lfbWVfY2xpZW50cyk7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpZiAoKGRldi0+aGVjaV9tZV9jbGllbnRzW2ldICYgKDEgPDwgaikpICE9IDApIHsKKwkJCQljbGllbnQgPSAmZGV2LT5tZV9jbGllbnRzW251bV07CisJCQkJY2xpZW50LT5jbGllbnRfaWQgPSAoaSAqIDgpICsgajsKKwkJCQljbGllbnQtPmZsb3dfY3RybF9jcmVkcyA9IDA7CisJCQkJZXJyID0gaG9zdF9jbGllbnRfcHJvcGVydGllcyhkZXYsIGNsaWVudCk7CisJCQkJaWYgKGVyciAhPSAwKSB7CisJCQkJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQkJCWtmcmVlKGRldi0+bWVfY2xpZW50cyk7CisJCQkJCWRldi0+bWVfY2xpZW50cyA9IE5VTEw7CisJCQkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQl9CisJCQkJbnVtKys7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX2luaXRfZmlsZV9wcml2YXRlIC0gaW5pdGlhbGl6ZXMgcHJpdmF0ZSBmaWxlIHN0cnVjdHVyZS4KKyAqCisgKiBAcHJpdjogcHJpdmF0ZSBmaWxlIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAorICogQGZpbGU6IHRoZSBmaWxlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBoZWNpX2luaXRfZmlsZV9wcml2YXRlKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSkpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5maWxlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5yZWFkX2lvX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT53cml0ZV9pb19sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5yeF93YWl0KTsKKwlEQkcoInByaXYtPnJ4X3dhaXQgPSVwXG4iLCAmcHJpdi0+cnhfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+dHhfd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmxpbmspOworCXByaXYtPnJlYWRpbmdfc3RhdGUgPSBIRUNJX0lETEU7CisJcHJpdi0+d3JpdGluZ19zdGF0ZSA9IEhFQ0lfSURMRTsKK30KKworLyoqCisgKiBoZWNpX2ZpbmRfbWVfY2xpZW50IC0gc2VhcmNoIGZvciBNRSBjbGllbnQgZ3VpZAorICogICAgICAgICAgICAgICAgICAgICAgIHNldHMgY2xpZW50X2lkIGluIGhlY2lfZmlsZV9wcml2YXRlIGlmIGZvdW5kCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAcHJpdjogcHJpdmF0ZSBmaWxlIHN0cnVjdHVyZSB0byBzZXQgY2xpZW50X2lkIGluCisgKiBAY2d1aWQ6IHNlYXJjaGVkIGd1aWQgb2YgTUUgY2xpZW50CisgKiBAY2xpZW50X2lkOiBpZCBvZiBob3N0IGNsaWVudCB0byBiZSBzZXQgaW4gZmlsZSBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgTUUgY2xpZW50IGluZGV4CisgKi8KK3N0YXRpYyBfX3U4IGhlY2lfZmluZF9tZV9jbGllbnQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKnByaXYsCisJCQkJY29uc3Qgc3RydWN0IGd1aWQgKmNndWlkLCBfX3U4IGNsaWVudF9pZCkKK3sKKwlfX3U4IGk7CisKKwlpZiAoKGRldiA9PSBOVUxMKSB8fCAocHJpdiA9PSBOVUxMKSB8fCAoY2d1aWQgPT0gTlVMTCkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChtZW1jbXAoY2d1aWQsCisJCQkgICAmZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX25hbWUsCisJCQkgICBzaXplb2Yoc3RydWN0IGd1aWQpKSA9PSAwKSB7CisJCQlwcml2LT5tZV9jbGllbnRfaWQgPSBkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkOworCQkJcHJpdi0+c3RhdGUgPSBIRUNJX0ZJTEVfQ09OTkVDVElORzsKKwkJCXByaXYtPmhvc3RfY2xpZW50X2lkID0gY2xpZW50X2lkOworCisJCQlsaXN0X2FkZF90YWlsKCZwcml2LT5saW5rLCAmZGV2LT5maWxlX2xpc3QpOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV9jaGVja19hc2ZfbW9kZSAtIGNoZWNrIGZvciBBU0YgY2xpZW50CisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCitzdGF0aWMgdm9pZCBoZWNpX2NoZWNrX2FzZl9tb2RlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJX191OCBpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlkZXYtPmFzZl9tb2RlID0gMDsKKwkvKiBmaW5kIE1FIEFTRiBjbGllbnQgLSBvdGhlcndpc2UgYXNzdW1lIEFNVCBtb2RlICovCisJREJHKCJmaW5kIE1FIEFTRiBjbGllbnQgLSBvdGhlcndpc2UgYXNzdW1lIEFNVCBtb2RlLlxuIik7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChtZW1jbXAoJmhlY2lfYXNmX2d1aWQsCisJCQkJJmRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF9uYW1lLAorCQkJCXNpemVvZihzdHJ1Y3QgZ3VpZCkpID09IDApIHsKKwkJCWRldi0+YXNmX21vZGUgPSAxOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJREJHKCJmb3VuZCBNRSBBU0YgY2xpZW50LlxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCURCRygiYXNzdW1lIEFNVCBtb2RlLlxuIik7Cit9CisKKy8qKgorICogaGVjaV9jb25uZWN0X21lX2NsaWVudCAtIGNvbm5lY3QgTUUgY2xpZW50CisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAcHJpdjogcHJpdmF0ZSBmaWxlIHN0cnVjdHVyZQorICogQHRpbWVvdXQ6IGNvbm5lY3QgdGltZW91dCBpbiBzZWNvbmRzCisgKgorICogcmV0dXJucyAxIC0gaWYgY29ubmVjdGVkLCAwIC0gaWYgbm90CisgKi8KK3N0YXRpYyBfX3U4IGhlY2lfY29ubmVjdF9tZV9jbGllbnQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKnByaXYsCisJCQkJICAgbG9uZyB0aW1lb3V0KQoreworCWludCBlcnIgPSAwOworCisJaWYgKChkZXYgPT0gTlVMTCkgfHwgKHByaXYgPT0gTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKCFoZWNpX2Nvbm5lY3QoZGV2LCBwcml2KSkgeworCQlEQkcoImZhaWxlZCB0byBjYWxsIGhlY2lfY29ubmVjdCBmb3IgY2xpZW50X2lkPSVkLlxuIiwKKwkJICAgIHByaXYtPmhvc3RfY2xpZW50X2lkKTsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwgcHJpdi0+aG9zdF9jbGllbnRfaWQpOworCQlwcml2LT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+d2FpdF9yZWN2ZF9tc2csCisJICAgIChIRUNJX0ZJTEVfQ09OTkVDVEVEID09IHByaXYtPnN0YXRlIHx8CisJICAgICBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEID09IHByaXYtPnN0YXRlKSwKKwkgICAgdGltZW91dCAqIEhaKTsKKwlpZiAoSEVDSV9GSUxFX0NPTk5FQ1RFRCAhPSBwcml2LT5zdGF0ZSkgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LCBwcml2LT5ob3N0X2NsaWVudF9pZCk7CisJCURCRygiZmFpbGVkIHRvIGNvbm5lY3QgY2xpZW50X2lkPSVkIHN0YXRlPSVkLlxuIiwKKwkJICAgIHByaXYtPmhvc3RfY2xpZW50X2lkLCBwcml2LT5zdGF0ZSk7CisJCWlmIChlcnIpCisJCQlEQkcoImZhaWxlZCBjb25uZWN0IGVycj0lMDh4XG4iLCBlcnIpOworCQlwcml2LT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCURCRygic3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCBjbGllbnRfaWQ9JWQuXG4iLAorCSAgICBwcml2LT5ob3N0X2NsaWVudF9pZCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaG9zdF9pbml0X3dkIC0gaGVjaSBpbml0aWFsaXphdGlvbiB3ZC4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK3N0YXRpYyB2b2lkIGhvc3RfaW5pdF93ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwloZWNpX2luaXRfZmlsZV9wcml2YXRlKCZkZXYtPndkX2ZpbGVfZXh0LCBOVUxMKTsKKworCS8qIGxvb2sgZm9yIFdEIGNsaWVudCBhbmQgY29ubmVjdCB0byBpdCAqLworCWRldi0+d2RfZmlsZV9leHQuc3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCWRldi0+d2RfdGltZW91dCA9IDA7CisKKwlpZiAoZGV2LT5hc2ZfbW9kZSkgeworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0b3Bfd2RfcGFyYW1zLCBIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwl9IGVsc2UgeworCQkvKiBBTVQgbW9kZSAqLworCQlkZXYtPndkX3RpbWVvdXQgPSBBTVRfV0RfVkFMVUU7CisJCURCRygiZGV2LT53ZF90aW1lb3V0PSVkLlxuIiwgZGV2LT53ZF90aW1lb3V0KTsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdGFydF93ZF9wYXJhbXMsIEhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCQltZW1jcHkoZGV2LT53ZF9kYXRhICsgSEVDSV9XRF9QQVJBTVNfU0laRSwKKwkJICAgICAgICZkZXYtPndkX3RpbWVvdXQsIHNpemVvZihfX3UxNikpOworCX0KKworCS8qIGZpbmQgTUUgV0QgY2xpZW50ICovCisJaGVjaV9maW5kX21lX2NsaWVudChkZXYsICZkZXYtPndkX2ZpbGVfZXh0LAorCQkJICAgICZoZWNpX3dkX2d1aWQsIEhFQ0lfV0RfSE9TVF9DTElFTlRfSUQpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCURCRygiY2hlY2sgd2RfZmlsZV9leHRcbiIpOworCWlmIChIRUNJX0ZJTEVfQ09OTkVDVElORyA9PSBkZXYtPndkX2ZpbGVfZXh0LnN0YXRlKSB7CisJCWlmIChoZWNpX2Nvbm5lY3RfbWVfY2xpZW50KGRldiwgJmRldi0+d2RfZmlsZV9leHQsIDE1KSA9PSAxKSB7CisJCQlEQkcoImRldi0+d2RfdGltZW91dD0lZC5cbiIsIGRldi0+d2RfdGltZW91dCk7CisJCQlpZiAoZGV2LT53ZF90aW1lb3V0ICE9IDApCisJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDE7CisJCQllbHNlCisJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCQlEQkcoInN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gV0QgY2xpZW50LlxuIik7CisJCX0KKwl9IGVsc2UKKwkJREJHKCJmYWlsZWQgdG8gZmluZCBXRCBjbGllbnQuXG4iKTsKKworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlkZXYtPndkX3RpbWVyLmZ1bmN0aW9uID0gJmhlY2lfd2RfdGltZXI7CisJZGV2LT53ZF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7Cit9CisKKworLyoqCisgKiBob3N0X2luaXRfaWFtdGhpZiAtIGhlY2kgaW5pdGlhbGl6YXRpb24gaWFtdGhpZiBjbGllbnQuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqLworc3RhdGljIHZvaWQgaG9zdF9pbml0X2lhbXRoaWYoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlfX3U4IGk7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJaGVjaV9pbml0X2ZpbGVfcHJpdmF0ZSgmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LCBOVUxMKTsKKwlkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCisJLyogZmluZCBNRSBQVEhJIGNsaWVudCAqLworCWkgPSBoZWNpX2ZpbmRfbWVfY2xpZW50KGRldiwgJmRldi0+aWFtdGhpZl9maWxlX2V4dCwKKwkJCSAgICAmaGVjaV9wdGhpX2d1aWQsIEhFQ0lfSUFNVEhJRl9IT1NUX0NMSUVOVF9JRCk7CisJaWYgKGRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVElORykgeworCQlEQkcoImZhaWxlZCB0byBmaW5kIGlhbXRoaWYgY2xpZW50LlxuIik7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGggIT0gSUFNVEhJRl9NVFUpOworCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChoZWNpX2Nvbm5lY3RfbWVfY2xpZW50KGRldiwgJmRldi0+aWFtdGhpZl9maWxlX2V4dCwgMTUpID09IDEpIHsKKwkJREJHKCJjb25uZWN0ZWQgdG8gaWFtdGhpZiBjbGllbnQuXG4iKTsKKwkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisJfQorfQorCisvKioKKyAqIGhlY2lfYWxsb2NfZmlsZV9wcml2YXRlIC0gYWxsb2NhdGVzIGEgcHJpdmF0ZSBmaWxlIHN0cnVjdHVyZSBhbmQgc2V0IGl0IHVwLgorICogQGZpbGU6IHRoZSBmaWxlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgIFRoZSBhbGxvY2F0ZWQgZmlsZSBvciBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpoZWNpX2FsbG9jX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKnByaXY7CisKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gTlVMTDsKKworCWhlY2lfaW5pdF9maWxlX3ByaXZhdGUocHJpdiwgZmlsZSk7CisKKwlyZXR1cm4gcHJpdjsKK30KKworCisKKy8qKgorICogaGVjaV9kaXNjb25uZWN0X2hvc3RfY2xpZW50IC0gc2VuZCBkaXNjb25uZWN0IG1lc3NhZ2UgIHRvIGZ3IGZyb20gaG9zdCBjbGllbnQuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlpbnQgcmV0cywgZXJyOworCWxvbmcgdGltZW91dCA9IDE1OwkvKiAxNSBzZWNvbmRzICovCisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYjsKKworCWlmICgoIWRldikgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGZpbGVfZXh0LT5zdGF0ZSAhPSBIRUNJX0ZJTEVfRElTQ09OTkVDVElORykKKwkJcmV0dXJuIDA7CisKKwlwcml2X2NiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdl9jYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdl9jYi0+Y2JfbGlzdCk7CisJcHJpdl9jYi0+ZmlsZV9wcml2YXRlID0gZmlsZV9leHQ7CisJcHJpdl9jYi0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID0gSEVDSV9DTE9TRTsKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQlpZiAoaGVjaV9kaXNjb25uZWN0KGRldiwgZmlsZV9leHQpKSB7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlEQkcoImZhaWxlZCB0byBjYWxsIGhlY2lfZGlzY29ubmVjdC5cbiIpOworCQkJZ290byBmcmVlOworCQl9CisJfSBlbHNlIHsKKwkJREJHKCJhZGQgZGlzY29ubmVjdCBjYiB0byBjb250cm9sIHdyaXRlIGxpc3RcbiIpOworCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSZkZXYtPmN0cmxfd3JfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3JlY3ZkX21zZywKKwkJIChIRUNJX0ZJTEVfRElTQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZSksCisJCSB0aW1lb3V0ICogSFopOworCWlmIChIRUNJX0ZJTEVfRElTQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZSkgeworCQlyZXRzID0gMDsKKwkJREJHKCJzdWNjZXNzZnVsbHkgZGlzY29ubmVjdGVkIGZyb20gZncgY2xpZW50LlxuIik7CisJfSBlbHNlIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWlmIChIRUNJX0ZJTEVfRElTQ09OTkVDVEVEICE9IGZpbGVfZXh0LT5zdGF0ZSkKKwkJCURCRygid3Jvbmcgc3RhdHVzIGNsaWVudCBkaXNjb25uZWN0LlxuIik7CisKKwkJaWYgKGVycikKKwkJCURCRygid2FpdCBmYWlsZWQgZGlzY29ubmVjdCBlcnI9JTA4eFxuIiwgZXJyKTsKKworCQlEQkcoImZhaWxlZCB0byBkaXNjb25uZWN0IGZyb20gZncgY2xpZW50LlxuIik7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwloZWNpX2ZsdXNoX2xpc3QoJmRldi0+Y3RybF9yZF9saXN0LCBmaWxlX2V4dCk7CisJaGVjaV9mbHVzaF9saXN0KCZkZXYtPmN0cmxfd3JfbGlzdCwgZmlsZV9leHQpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKK2ZyZWU6CisJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYik7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0IC0KKyAqCXJlbW92ZSBmaWxlIHByaXZhdGUgZGF0YSBmcm9tIGRldmljZSBmaWxlIGxpc3QKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaG9zdF9jbGllbnRfaWQ6IGhvc3QgY2xpZW50IGlkIHRvIGJlIHJlbW92ZWQKKyAqLwordm9pZCBoZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgX191OCBob3N0X2NsaWVudF9pZCkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLCBmaWxlX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQlpZiAoaG9zdF9jbGllbnRfaWQgPT0gZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkKSB7CisJCQlEQkcoInJlbW92ZSBob3N0IGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZFxuIiwKKwkJCQkJZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkLAorCQkJCQlmaWxlX3Bvcy0+bWVfY2xpZW50X2lkKTsKKwkJCWxpc3RfZGVsX2luaXQoJmZpbGVfcG9zLT5saW5rKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNTFhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKworI2luY2x1ZGUgImhlY2kuaCIKKyNpbmNsdWRlICJoZWNpX2ludGVyZmFjZS5oIgorCisKKy8qKgorICogaGVjaV9zZXRfY3NyX3JlZ2lzdGVyIC0gd3JpdGUgSF9DU1IgcmVnaXN0ZXIgdG8gdGhlIGhlY2kgZGV2aWNlCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCit2b2lkIGhlY2lfc2V0X2Nzcl9yZWdpc3RlcihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXdyaXRlX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUiwgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7Cit9CisKKy8qKgorICogaGVjaV9jc3JfZW5hYmxlX2ludGVycnVwdHMgLSBlbmFibGUgaGVjaSBkZXZpY2UgaW50ZXJydXB0cworICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLwordm9pZCBoZWNpX2Nzcl9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWRldi0+aG9zdF9od19zdGF0ZSB8PSBIX0lFOworCWhlY2lfc2V0X2Nzcl9yZWdpc3RlcihkZXYpOworfQorCisvKioKKyAqIGhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyAtIGRpc2FibGUgaGVjaSBkZXZpY2UgaW50ZXJydXB0cworICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLwordm9pZCBoZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmhvc3RfaHdfc3RhdGUgJj0gfkhfSUU7CisJaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKGRldik7Cit9CisKKworLyoqCisgKiBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzIC0gZ2V0IG51bWJlciBvZiBkZXZpY2UgZmlsbGVkIGJ1ZmZlciBzbG90cworICoKKyAqIEBkZXZpY2U6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyBudW1lciBvZiBmaWxsZWQgc2xvdHMKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyhjb25zdCBzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWNoYXIgcmVhZF9wdHIsIHdyaXRlX3B0cjsKKworCXJlYWRfcHRyID0gKGNoYXIpICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQlJQKSA+PiA4KTsKKwl3cml0ZV9wdHIgPSAoY2hhcikgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCV1ApID4+IDE2KTsKKworCXJldHVybiAodW5zaWduZWQgY2hhcikgKHdyaXRlX3B0ciAtIHJlYWRfcHRyKTsKK30KKworLyoqCisgKiBob3N0X2J1ZmZlcl9pc19lbXB0eSAgLSBjaGVjayBpZiBob3N0IGJ1ZmZlciBpcyBlbXB0eS4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAgMSBpZiBlbXB0eSwgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGhvc3RfYnVmZmVyX2lzX2VtcHR5KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgY2hhciBmaWxsZWRfc2xvdHM7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJZmlsbGVkX3Nsb3RzID0gX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyhkZXYpOworCisJaWYgKGZpbGxlZF9zbG90cyA+IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogY291bnRfZW1wdHlfd3JpdGVfc2xvdHMgIC0gY291bnQgd3JpdGUgZW1wdHkgc2xvdHMuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgLTEoRVNMT1RTX09WRVJGTE9XKSBpZiBvdmVyZmxvdywgb3RoZXJ3aXNlIGVtcHR5IHNsb3RzIGNvdW50CisgKi8KK19fczMyIGNvdW50X2VtcHR5X3dyaXRlX3Nsb3RzKGNvbnN0IHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgY2hhciBidWZmZXJfZGVwdGgsIGZpbGxlZF9zbG90cywgZW1wdHlfc2xvdHM7CisKKwlidWZmZXJfZGVwdGggPSAodW5zaWduZWQgY2hhcikgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpOworCWZpbGxlZF9zbG90cyA9IF9ob3N0X2dldF9maWxsZWRfc2xvdHMoZGV2KTsKKwllbXB0eV9zbG90cyA9IGJ1ZmZlcl9kZXB0aCAtIGZpbGxlZF9zbG90czsKKworCWlmIChmaWxsZWRfc2xvdHMgPiBidWZmZXJfZGVwdGgpIHsKKwkJLyogb3ZlcmZsb3cgKi8KKwkJcmV0dXJuIC1FU0xPVFNfT1ZFUkZMT1c7CisJfQorCisJcmV0dXJuIChfX3MzMikgZW1wdHlfc2xvdHM7Cit9CisKKy8qKgorICogaGVjaV93cml0ZV9tZXNzYWdlICAtIHdyaXRlIGEgbWVzc2FnZSB0byBoZWNpIGRldmljZS4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaGVjaV9oZHI6IGhlYWRlciBvZiAgbWVzc2FnZQorICogQHdyaXRlX2J1ZmZlcjogbWVzc2FnZSBidWZmZXIgd2lsbCBiZSB3cml0ZQorICogQHdyaXRlX2xlbmd0aDogbWVzc2FnZSBzaXplIHdpbGwgYmUgd3JpdGUKKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGhlY2lfd3JpdGVfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWFkZXIsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKndyaXRlX2J1ZmZlciwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB3cml0ZV9sZW5ndGgpCit7CisJX191MzIgdGVtcF9tc2cgPSAwOworCXVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbiA9IDA7CisJdW5zaWduZWQgY2hhciBidWZmZXJfZGVwdGgsIGZpbGxlZF9zbG90cywgZW1wdHlfc2xvdHM7CisJdW5zaWduZWQgbG9uZyBkd190b193cml0ZTsKKworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwlEQkcoImhvc3RfaHdfc3RhdGUgPSAweCUwOHguXG4iLCBkZXYtPmhvc3RfaHdfc3RhdGUpOworCURCRygiaGVjaV93cml0ZV9tZXNzYWdlIGhlYWRlcj0lMDh4LlxuIiwgKigoX191MzIgKikgaGVhZGVyKSk7CisJYnVmZmVyX2RlcHRoID0gKHVuc2lnbmVkIGNoYXIpICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KTsKKwlmaWxsZWRfc2xvdHMgPSBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzKGRldik7CisJZW1wdHlfc2xvdHMgPSBidWZmZXJfZGVwdGggLSBmaWxsZWRfc2xvdHM7CisJREJHKCJmaWxsZWQgPSAlaHUsIGVtcHR5ID0gJWh1LlxuIiwgZmlsbGVkX3Nsb3RzLCBlbXB0eV9zbG90cyk7CisKKwlkd190b193cml0ZSA9ICgod3JpdGVfbGVuZ3RoICsgMykgLyA0KTsKKworCWlmIChkd190b193cml0ZSA+IGVtcHR5X3Nsb3RzKQorCQlyZXR1cm4gMDsKKworCXdyaXRlX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NCX1dXLCAqKChfX3UzMiAqKSBoZWFkZXIpKTsKKworCXdoaWxlICh3cml0ZV9sZW5ndGggPj0gNCkgeworCQl3cml0ZV9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DQl9XVywKKwkJCQkqKF9fdTMyICopICh3cml0ZV9idWZmZXIgKyBieXRlc193cml0dGVuKSk7CisJCWJ5dGVzX3dyaXR0ZW4gKz0gNDsKKwkJd3JpdGVfbGVuZ3RoIC09IDQ7CisJfQorCisJaWYgKHdyaXRlX2xlbmd0aCA+IDApIHsKKwkJbWVtY3B5KCZ0ZW1wX21zZywgJndyaXRlX2J1ZmZlcltieXRlc193cml0dGVuXSwgd3JpdGVfbGVuZ3RoKTsKKwkJd3JpdGVfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ0JfV1csIHRlbXBfbXNnKTsKKwl9CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgfD0gSF9JRzsKKwl3cml0ZV9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IsIGRldi0+aG9zdF9od19zdGF0ZSk7CisJZGV2LT5tZV9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NTUl9IQSk7CisJaWYgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgIT0gTUVfUkRZX0hSQSkKKwkJcmV0dXJuIDA7CisKKwlkZXYtPndyaXRlX2hhbmcgPSAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIGNvdW50X2Z1bGxfcmVhZF9zbG90cyAgLSBjb3VudCByZWFkIGZ1bGwgc2xvdHMuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgLTEoRVNMT1RTX09WRVJGTE9XKSBpZiBvdmVyZmxvdywgb3RoZXJ3aXNlIGZpbGxlZCBzbG90cyBjb3VudAorICovCitfX3MzMiBjb3VudF9mdWxsX3JlYWRfc2xvdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwljaGFyIHJlYWRfcHRyLCB3cml0ZV9wdHI7CisJdW5zaWduZWQgY2hhciBidWZmZXJfZGVwdGgsIGZpbGxlZF9zbG90czsKKworCWRldi0+bWVfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DU1JfSEEpOworCWJ1ZmZlcl9kZXB0aCA9ICh1bnNpZ25lZCBjaGFyKSgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX0NCRF9IUkEpID4+IDI0KTsKKwlyZWFkX3B0ciA9IChjaGFyKSAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9DQlJQX0hSQSkgPj4gOCk7CisJd3JpdGVfcHRyID0gKGNoYXIpICgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX0NCV1BfSFJBKSA+PiAxNik7CisJZmlsbGVkX3Nsb3RzID0gKHVuc2lnbmVkIGNoYXIpICh3cml0ZV9wdHIgLSByZWFkX3B0cik7CisKKwlpZiAoZmlsbGVkX3Nsb3RzID4gYnVmZmVyX2RlcHRoKSB7CisJCS8qIG92ZXJmbG93ICovCisJCXJldHVybiAtRVNMT1RTX09WRVJGTE9XOworCX0KKworCURCRygiZmlsbGVkX3Nsb3RzID0lMDh4ICBcbiIsIGZpbGxlZF9zbG90cyk7CisJcmV0dXJuIChfX3MzMikgZmlsbGVkX3Nsb3RzOworfQorCisvKioKKyAqIGhlY2lfcmVhZF9zbG90cyAgLSByZWFkIGEgbWVzc2FnZSBmcm9tIGhlY2kgZGV2aWNlLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBidWZmZXI6IG1lc3NhZ2UgYnVmZmVyIHdpbGwgYmUgd3JpdGUKKyAqIEBidWZmZXJfbGVuZ3RoOiBtZXNzYWdlIHNpemUgd2lsbCBiZSByZWFkCisgKi8KK3ZvaWQgaGVjaV9yZWFkX3Nsb3RzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1ZmZlcl9sZW5ndGgpCit7CisJX191MzIgaSA9IDA7CisJdW5zaWduZWQgY2hhciB0ZW1wX2J1ZltzaXplb2YoX191MzIpXTsKKworCXdoaWxlIChidWZmZXJfbGVuZ3RoID49IHNpemVvZihfX3UzMikpIHsKKwkJKChfX3UzMiAqKSBidWZmZXIpW2ldID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ0JfUlcpOworCQlEQkcoImJ1ZmZlclslZF09ICVkXG4iLCBpLCAoKF9fdTMyICopIGJ1ZmZlcilbaV0pOworCQlpKys7CisJCWJ1ZmZlcl9sZW5ndGggLT0gc2l6ZW9mKF9fdTMyKTsKKwl9CisKKwlpZiAoYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJKigoX191MzIgKikgJnRlbXBfYnVmKSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NCX1JXKTsKKwkJbWVtY3B5KCZidWZmZXJbaSAqIDRdLCB0ZW1wX2J1ZiwgYnVmZmVyX2xlbmd0aCk7CisJfQorCisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUc7CisJaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKGRldik7Cit9CisKKy8qKgorICogZmxvd19jdHJsX2NyZWRzICAtIGNoZWNrIGZsb3dfY29udHJvbCBjcmVkZW50aWFscy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgZmxvd19jdHJsX2NyZWRzID4wLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgZmxvd19jdHJsX2NyZWRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlfX3U4IGk7CisKKwlpZiAoIWRldi0+bnVtX2hlY2lfbWVfY2xpZW50cykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmlsZV9leHQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmlsZV9leHQtPmZsb3dfY3RybF9jcmVkcyA+IDApCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpIHsKKwkJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uZmxvd19jdHJsX2NyZWRzID4gMCkgeworCQkJCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMuc2luZ2xlX3JlY3ZfYnVmCisJCQkJCSA9PSAwKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCUJVRygpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZsb3dfY3RybF9yZWR1Y2UgIC0gcmVkdWNlIGZsb3dfY29udHJvbC4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqLwordm9pZCBmbG93X2N0cmxfcmVkdWNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlfX3U4IGk7CisKKwlpZiAoIWRldi0+bnVtX2hlY2lfbWVfY2xpZW50cykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpIHsKKwkJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMuc2luZ2xlX3JlY3ZfYnVmICE9IDApIHsKKwkJCQlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLmZsb3dfY3RybF9jcmVkcyA8PSAwKTsKKwkJCQlkZXYtPm1lX2NsaWVudHNbaV0uZmxvd19jdHJsX2NyZWRzLS07CisJCQl9IGVsc2UgeworCQkJCUJVR19PTihmaWxlX2V4dC0+Zmxvd19jdHJsX2NyZWRzIDw9IDApOworCQkJCWZpbGVfZXh0LT5mbG93X2N0cmxfY3JlZHMtLTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCX0KKwlCVUcoKTsKK30KKworLyoqCisgKiBoZWNpX3NlbmRfZmxvd19jb250cm9sIC0gc2VuZCBmbG93IGNvbnRyb2wgdG8gZncuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBoZWNpX3NlbmRfZmxvd19jb250cm9sKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmhlY2lfZmxvd19jb250cm9sOworCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKTsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaGVjaV9mbG93X2NvbnRyb2wgPSAoc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQoaGVjaV9mbG93X2NvbnRyb2wsIDAsIHNpemVvZihoZWNpX2Zsb3dfY29udHJvbCkpOworCWhlY2lfZmxvd19jb250cm9sLT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJaGVjaV9mbG93X2NvbnRyb2wtPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCWhlY2lfZmxvd19jb250cm9sLT5jbWQuY21kID0gSEVDSV9GTE9XX0NPTlRST0xfQ01EOworCW1lbXNldChoZWNpX2Zsb3dfY29udHJvbC0+cmVzZXJ2ZWQsIDAsCisJCQlzaXplb2YoaGVjaV9mbG93X2NvbnRyb2wtPnJlc2VydmVkKSk7CisJREJHKCJzZW5kaW5nIGZsb3cgY29udHJvbCBob3N0IGNsaWVudCA9ICVkLCBtZSBjbGllbnQgPSAlZFxuIiwKKwkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLCBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopIGhlY2lfZmxvd19jb250cm9sLAorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworCit9CisKKy8qKgorICogb3RoZXJfY2xpZW50X2lzX2Nvbm5lY3RpbmcgIC0gY2hlY2sgaWYgb3RoZXIKKyAqICAgIGNsaWVudCB3aXRoIHRoZSBzYW1lIGNsaWVudCBpZCBpcyBjb25uZWN0ZWQuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAxIGlmIG90aGVyIGNsaWVudCBpcyBjb25uZWN0ZWQsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBvdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywgZmlsZV9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJaWYgKChmaWxlX3Bvcy0+c3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RJTkcpCisJCQkmJiAoZmlsZV9wb3MgIT0gZmlsZV9leHQpCisJCQkmJiBmaWxlX2V4dC0+bWVfY2xpZW50X2lkID09IGZpbGVfcG9zLT5tZV9jbGllbnRfaWQpCisJCQlyZXR1cm4gMTsKKworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX3NlbmRfd2QgIC0gc2VuZCB3YXRjaCBkb2cgbWVzc2FnZSB0byBmdy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBoZWNpX3NlbmRfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwloZWNpX2hkci0+aG9zdF9hZGRyID0gZGV2LT53ZF9maWxlX2V4dC5ob3N0X2NsaWVudF9pZDsKKwloZWNpX2hkci0+bWVfYWRkciA9IGRldi0+d2RfZmlsZV9leHQubWVfY2xpZW50X2lkOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlpZiAoIW1lbWNtcChkZXYtPndkX2RhdGEsIGhlY2lfc3RhcnRfd2RfcGFyYW1zLAorCQkJSEVDSV9XRF9QQVJBTVNfU0laRSkpIHsKKwkJaGVjaV9oZHItPmxlbmd0aCA9IEhFQ0lfU1RBUlRfV0RfREFUQV9TSVpFOworCX0gZWxzZSB7CisJCUJVR19PTihtZW1jbXAoZGV2LT53ZF9kYXRhLCBoZWNpX3N0b3Bfd2RfcGFyYW1zLAorCQkJSEVDSV9XRF9QQVJBTVNfU0laRSkpOworCQloZWNpX2hkci0+bGVuZ3RoID0gSEVDSV9XRF9QQVJBTVNfU0laRTsKKwl9CisKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLCBkZXYtPndkX2RhdGEsIGhlY2lfaGRyLT5sZW5ndGgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIGhlY2lfZGlzY29ubmVjdCAgLSBzZW5kIGRpc2Nvbm5lY3QgbWVzc2FnZSB0byBmdy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGhlY2lfZGlzY29ubmVjdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqaGVjaV9jbGlfZGlzY29ubmVjdDsKKworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwloZWNpX2NsaV9kaXNjb25uZWN0ID0KKwkgICAgKHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCW1lbXNldChoZWNpX2NsaV9kaXNjb25uZWN0LCAwLCBzaXplb2YoaGVjaV9jbGlfZGlzY29ubmVjdCkpOworCWhlY2lfY2xpX2Rpc2Nvbm5lY3QtPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwloZWNpX2NsaV9kaXNjb25uZWN0LT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwloZWNpX2NsaV9kaXNjb25uZWN0LT5jbWQuY21kID0gQ0xJRU5UX0RJU0NPTk5FQ1RfUkVRX0NNRDsKKwloZWNpX2NsaV9kaXNjb25uZWN0LT5yZXNlcnZlZFswXSA9IDA7CisKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopIGhlY2lfY2xpX2Rpc2Nvbm5lY3QsCisJCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIGhlY2lfY29ubmVjdCAtIHNlbmQgY29ubmVjdCBtZXNzYWdlIHRvIGZ3LgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBzdWNjZXNzLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgaGVjaV9jb25uZWN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCAqaGVjaV9jbGlfY29ubmVjdDsKKworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QpOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwloZWNpX2NsaV9jb25uZWN0ID0KKwkgICAgKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCWhlY2lfY2xpX2Nvbm5lY3QtPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwloZWNpX2NsaV9jb25uZWN0LT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwloZWNpX2NsaV9jb25uZWN0LT5jbWQuY21kID0gQ0xJRU5UX0NPTk5FQ1RfUkVRX0NNRDsKKwloZWNpX2NsaV9jb25uZWN0LT5yZXNlcnZlZCA9IDA7CisKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopIGhlY2lfY2xpX2Nvbm5lY3QsCisJCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMzZlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKworI2lmbmRlZiBfSEVDSV9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX0hFQ0lfSU5URVJGQUNFX0hfCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImhlY2lfZGF0YV9zdHJ1Y3R1cmVzLmgiCisKKworI2RlZmluZSBIQk1fTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEhCTV9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEJNX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiAxIHNlY29uZCAqLworCisKKyNkZWZpbmUgSE9TVF9TVEFSVF9SRVFfQ01EICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBIT1NUX1NUQVJUX1JFU19DTUQgICAgICAgICAgICAgICAgICAweDgxCisKKyNkZWZpbmUgSE9TVF9TVE9QX1JFUV9DTUQgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBIT1NUX1NUT1BfUkVTX0NNRCAgICAgICAgICAgICAgICAgICAweDgyCisKKyNkZWZpbmUgTUVfU1RPUF9SRVFfQ01EICAgICAgICAgICAgICAgICAgICAgMHgwMworCisjZGVmaW5lIEhPU1RfRU5VTV9SRVFfQ01EICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSE9TVF9FTlVNX1JFU19DTUQgICAgICAgICAgICAgICAgICAgMHg4NAorCisjZGVmaW5lIEhPU1RfQ0xJRU5UX1BST1BFUlRFSVNfUkVRX0NNRCAgICAgIDB4MDUKKyNkZWZpbmUgSE9TVF9DTElFTlRfUFJPUEVSVEVJU19SRVNfQ01EICAgICAgMHg4NQorCisjZGVmaW5lIENMSUVOVF9DT05ORUNUX1JFUV9DTUQgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQ0xJRU5UX0NPTk5FQ1RfUkVTX0NNRCAgICAgICAgICAgICAgMHg4NgorCisjZGVmaW5lIENMSUVOVF9ESVNDT05ORUNUX1JFUV9DTUQgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQ0xJRU5UX0RJU0NPTk5FQ1RfUkVTX0NNRCAgICAgICAgICAgMHg4NworCisjZGVmaW5lIEhFQ0lfRkxPV19DT05UUk9MX0NNRCAgICAgICAgICAgICAgIDB4MDgKKworCisjZGVmaW5lIEFNVF9XRF9WQUxVRSAxMjAJLyogc2Vjb25kcyAqLworCisjZGVmaW5lIEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFICAgICAgICAgMTYKKyNkZWZpbmUgSEVDSV9TVEFSVF9XRF9EQVRBX1NJWkUgICAgICAgICAyMAorI2RlZmluZSBIRUNJX1dEX1BBUkFNU19TSVpFICAgICAgICAgICAgIDQKKworLyogSU9DVEwgY29tbWFuZHMgKi8KKyNkZWZpbmUgSU9DVExfSEVDSV9HRVRfVkVSU0lPTiBcCisgICAgX0lPV1IoJ0gnICwgMHgwLCBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEpCisjZGVmaW5lIElPQ1RMX0hFQ0lfQ09OTkVDVF9DTElFTlQgXAorICAgIF9JT1dSKCdIJyAsIDB4MDEsIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSkKKyNkZWZpbmUgSU9DVExfSEVDSV9XRCBcCisgICAgX0lPV1IoJ0gnICwgMHgwMiwgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhKQorI2RlZmluZSBJT0NUTF9IRUNJX0JZUEFTU19XRCBcCisgICAgX0lPV1IoJ0gnICwgMHgxMCwgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhKQorCitlbnVtIGhlY2lfc3RvcF9yZWFzb25fdHlwZXN7CisJRFJJVkVSX1NUT1BfUkVRVUVTVCA9IDB4MDAsCisJREVWSUNFX0QxX0VOVFJZID0gMHgwMSwKKwlERVZJQ0VfRDJfRU5UUlkgPSAweDAyLAorCURFVklDRV9EM19FTlRSWSA9IDB4MDMsCisJU1lTVEVNX1MxX0VOVFJZID0gMHgwNCwKKwlTWVNURU1fUzJfRU5UUlkgPSAweDA1LAorCVNZU1RFTV9TM19FTlRSWSA9IDB4MDYsCisJU1lTVEVNX1M0X0VOVFJZID0gMHgwNywKKwlTWVNURU1fUzVfRU5UUlkgPSAweDA4Cit9OworCitlbnVtIG1lX3N0b3BfcmVhc29uX3R5cGVzeworCUZXX1VQREFURSA9IDB4MDAKK307CisKK2VudW0gY2xpZW50X2Nvbm5lY3Rfc3RhdHVzX3R5cGVzeworCUNDU19TVUNDRVNTID0gMHgwMCwKKwlDQ1NfTk9UX0ZPVU5EID0gMHgwMSwKKwlDQ1NfQUxSRUFEWV9TVEFSVEVEID0gMHgwMiwKKwlDQ1NfT1VUX09GX1JFU09VUkNFUyA9IDB4MDMsCisJQ0NTX01FU1NBR0VfU01BTEwgPSAweDA0Cit9OworCitlbnVtIGNsaWVudF9kaXNjb25uZWN0X3N0YXR1c190eXBlc3sKKwlDRFNfU1VDQ0VTUyA9IDB4MDAKK307CisKKworLyoKKyAqIGhlY2kgaW50ZXJmYWNlIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLwordm9pZCBoZWNpX3NldF9jc3JfcmVnaXN0ZXIoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7Cit2b2lkIGhlY2lfY3NyX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOwordm9pZCBoZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CisKK3ZvaWQgaGVjaV9yZWFkX3Nsb3RzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1ZmZlcl9sZW5ndGgpOworCitpbnQgaGVjaV93cml0ZV9tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBoZWNpX21zZ19oZHIgKmhlYWRlciwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqd3JpdGVfYnVmZmVyLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHdyaXRlX2xlbmd0aCk7CisKK2ludCBob3N0X2J1ZmZlcl9pc19lbXB0eShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKKworX19zMzIgY291bnRfZnVsbF9yZWFkX3Nsb3RzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworCitfX3MzMiBjb3VudF9lbXB0eV93cml0ZV9zbG90cyhjb25zdCBzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKKworaW50IGZsb3dfY3RybF9jcmVkcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgaGVjaV9zZW5kX3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworCit2b2lkIGZsb3dfY3RybF9yZWR1Y2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IGhlY2lfc2VuZF9mbG93X2NvbnRyb2woc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBoZWNpX2Rpc2Nvbm5lY3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CitpbnQgb3RoZXJfY2xpZW50X2lzX2Nvbm5lY3Rpbmcoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworaW50IGhlY2lfY29ubmVjdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKKyNlbmRpZiAvKiBfSEVDSV9JTlRFUkZBQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlNDRjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfbWFpbi5jCkBAIC0wLDAgKzEsMTU2NCBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworI2luY2x1ZGUgImhlY2kuaCIKKyNpbmNsdWRlICJoZWNpX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImhlY2lfdmVyc2lvbi5oIgorCisKKyNkZWZpbmUgSEVDSV9SRUFEX1RJTUVPVVQJNDUKKworI2RlZmluZSBIRUNJX0RSSVZFUl9OQU1FCSJoZWNpIgorCisvKgorICogIGhlY2kgZHJpdmVyIHN0cmluZ3MKKyAqLworc3RhdGljIGNoYXIgaGVjaV9kcml2ZXJfbmFtZVtdID0gSEVDSV9EUklWRVJfTkFNRTsKK3N0YXRpYyBjaGFyIGhlY2lfZHJpdmVyX3N0cmluZ1tdID0gIkludGVsKFIpIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSI7CitzdGF0aWMgY2hhciBoZWNpX2RyaXZlcl92ZXJzaW9uW10gPSBIRUNJX0RSSVZFUl9WRVJTSU9OOworc3RhdGljIGNoYXIgaGVjaV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiI7CisKKworI2lmZGVmIEhFQ0lfREVCVUcKK2ludCBoZWNpX2RlYnVnID0gMTsKKyNlbHNlCitpbnQgaGVjaV9kZWJ1ZzsKKyNlbmRpZgorTU9EVUxFX1BBUk1fREVTQyhoZWNpX2RlYnVnLCAgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oaGVjaV9kZWJ1ZywgaW50LCAwNjQ0KTsKKworCisjZGVmaW5lIEhFQ0lfREVWX05BTUUJImhlY2kiCisKKy8qIGhlY2kgY2hhciBkZXZpY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBjZGV2IGhlY2lfY2RldjsKKworLyogbWFqb3IgbnVtYmVyIGZvciBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgaGVjaV9tYWpvcjsKKy8qIFRoZSBkZXZpY2UgcG9pbnRlciAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpoZWNpX2RldmljZTsKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqaGVjaV9jbGFzczsKKworCisvKiBoZWNpX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaGVjaV9wY2lfdGJsW10gPSB7CisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfODI5NDZHWil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEXzgyRzM1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfODJROTY1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfODJHOTY1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfODJHTTk2NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEXzgyR01FOTY1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV84MlEzNSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfODJHMzMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzgyUTMzKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV84MlgzOCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfMzIwMCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfNil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfNyl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfOCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfOSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfMTApfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5TV8xKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOU1fMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlNXzMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5TV80KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIMTBfMSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDEwXzIpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0gxMF8zKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIMTBfNCl9LAorCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7MCwgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhlY2lfcGNpX3RibCk7CisKKy8qCisgKiBMb2NhbCBGdW5jdGlvbiBQcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGhlY2lfaW5pdF9tb2R1bGUodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgaGVjaV9leGl0X21vZHVsZSh2b2lkKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhlY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaGVjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIGludCBoZWNpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBoZWNpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIHNzaXplX3QgaGVjaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCk7CitzdGF0aWMgaW50IGhlY2lfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgc3NpemVfdCBoZWNpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpOworc3RhdGljIHVuc2lnbmVkIGludCBoZWNpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOworc3RhdGljIHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKmZpbmRfcmVhZF9saXN0X2VudHJ5KAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaGVjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworc3RhdGljIGludCBoZWNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgX191MTYgZ19zdXNfd2RfdGltZW91dDsKKyNlbHNlCisjZGVmaW5lIGhlY2lfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGhlY2lfcmVzdW1lIE5VTEwKKyNlbmRpZgorLyoKKyAqICBQQ0kgZHJpdmVyIHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaGVjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBoZWNpX2RyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9IGhlY2lfcGNpX3RibCwKKwkucHJvYmUgPSBoZWNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChoZWNpX3JlbW92ZSksCisJLnNodXRkb3duID0gX19kZXZleGl0X3AoaGVjaV9yZW1vdmUpLAorCS5zdXNwZW5kID0gaGVjaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBoZWNpX3Jlc3VtZQorfTsKKworLyoKKyAqIGZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgd2lsbCBiZSB1c2UgaGVjaSBjaGFyIGRldmljZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGVjaV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gaGVjaV9yZWFkLAorCS5pb2N0bCA9IGhlY2lfaW9jdGwsCisJLm9wZW4gPSBoZWNpX29wZW4sCisJLnJlbGVhc2UgPSBoZWNpX3JlbGVhc2UsCisJLndyaXRlID0gaGVjaV93cml0ZSwKKwkucG9sbCA9IGhlY2lfcG9sbCwKK307CisKKy8qKgorICogaGVjaV9yZWdpc3RyYXRpb25fY2RldiAtIHNldCB1cCB0aGUgY2RldiBzdHJ1Y3R1cmUgZm9yIGhlY2kgZGV2aWNlLgorICoKKyAqIEBkZXY6IGNoYXIgZGV2aWNlIHN0cnVjdAorICogQGhtaW5vcjogbWlub3IgbnVtYmVyIGZvciByZWdpc3RyYXRpb24gY2hhciBkZXZpY2UKKyAqIEBmb3BzOiBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9yZWdpc3RyYXRpb25fY2RldihzdHJ1Y3QgY2RldiAqZGV2LCBpbnQgaG1pbm9yLAorCQkJCSAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcykKK3sKKwlpbnQgcmV0LCBkZXZubyA9IE1LREVWKGhlY2lfbWFqb3IsIGhtaW5vcik7CisKKwljZGV2X2luaXQoZGV2LCBmb3BzKTsKKwlkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJcmV0ID0gY2Rldl9hZGQoZGV2LCBkZXZubywgMSk7CisJLyogRmFpbCBncmFjZWZ1bGx5IGlmIG5lZWQgYmUgKi8KKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRXJyb3IgJWQgcmVnaXN0ZXJpbmcgaGVjaSBkZXZpY2UgJWRcbiIsCisJCSAgICAgICByZXQsIGhtaW5vcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIERpc3BsYXkgdGhlIHZlcnNpb24gb2YgaGVjaSBkcml2ZXIuICovCitzdGF0aWMgc3NpemVfdCB2ZXJzaW9uX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcyAlcy5cbiIsCisJCSAgICAgICBoZWNpX2RyaXZlcl9zdHJpbmcsIGhlY2lfZHJpdmVyX3ZlcnNpb24pOworfQorCitzdGF0aWMgQ0xBU1NfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCB2ZXJzaW9uX3Nob3csIE5VTEwpOworCisvKioKKyAqIGhlY2lfcmVnaXN0ZXJfY2RldiAtIHJlZ2lzdGVycyBoZWNpIGNoYXIgZGV2aWNlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9yZWdpc3Rlcl9jZGV2KHZvaWQpCit7CisJaW50IHJldDsKKwlkZXZfdCBkZXY7CisKKwkvKiByZWdpc3RyYXRpb24gb2YgY2hhciBkZXZpY2VzICovCisJcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCBIRUNJX01JTk9SU19CQVNFLCBIRUNJX01JTk9SU19DT1VOVCwKKwkJCQkgIEhFQ0lfRFJJVkVSX05BTUUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBFcnJvciBhbGxvY2F0aW5nIGNoYXIgZGV2aWNlIHJlZ2lvbi5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhlY2lfbWFqb3IgPSBNQUpPUihkZXYpOworCisJcmV0ID0gaGVjaV9yZWdpc3RyYXRpb25fY2RldigmaGVjaV9jZGV2LCBIRUNJX01JTk9SX05VTUJFUiwKKwkJCQkgICAgICZoZWNpX2ZvcHMpOworCWlmIChyZXQpCisJCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihoZWNpX21ham9yLCBIRUNJX01JTk9SU19CQVNFKSwKKwkJCQkJIEhFQ0lfTUlOT1JTX0NPVU5UKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaGVjaV91bnJlZ2lzdGVyX2NkZXYgLSB1bnJlZ2lzdGVycyBoZWNpIGNoYXIgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfdW5yZWdpc3Rlcl9jZGV2KHZvaWQpCit7CisJY2Rldl9kZWwoJmhlY2lfY2Rldik7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKGhlY2lfbWFqb3IsIEhFQ0lfTUlOT1JTX0JBU0UpLAorCQkJCSBIRUNJX01JTk9SU19DT1VOVCk7Cit9CisKKyNpZm5kZWYgSEVDSV9ERVZJQ0VfQ1JFQVRFCisjZGVmaW5lIEhFQ0lfREVWSUNFX0NSRUFURSBkZXZpY2VfY3JlYXRlCisjZW5kaWYKKy8qKgorICogaGVjaV9zeXNmc19kZXZpY2VfY3JlYXRlIC0gYWRkcyBkZXZpY2UgZW50cnkgdG8gc3lzZnMKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX3N5c2ZzX2RldmljZV9jcmVhdGUodm9pZCkKK3sKKwlzdHJ1Y3QgY2xhc3MgKmNsYXNzOworCXZvaWQgKnRtcGhkZXY7CisJaW50IGVyciA9IDA7CisKKwljbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgSEVDSV9EUklWRVJfTkFNRSk7CisJaWYgKElTX0VSUihjbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihjbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRXJyb3IgY3JlYXRpbmcgaGVjaSBjbGFzcy5cbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyID0gY2xhc3NfY3JlYXRlX2ZpbGUoY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCWlmIChlcnIpIHsKKwkJY2xhc3NfZGVzdHJveShjbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRXJyb3IgY3JlYXRpbmcgaGVjaSBjbGFzcyBmaWxlLlxuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwl0bXBoZGV2ID0gSEVDSV9ERVZJQ0VfQ1JFQVRFKGNsYXNzLCBOVUxMLCBoZWNpX2NkZXYuZGV2LCBOVUxMLAorCQkJCQlIRUNJX0RFVl9OQU1FKTsKKwlpZiAoSVNfRVJSKHRtcGhkZXYpKSB7CisJCWVyciA9IFBUUl9FUlIodG1waGRldik7CisJCWNsYXNzX3JlbW92ZV9maWxlKGNsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKTsKKwkJY2xhc3NfZGVzdHJveShjbGFzcyk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwloZWNpX2NsYXNzID0gY2xhc3M7CitlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaGVjaV9zeXNmc19kZXZpY2VfcmVtb3ZlIC0gdW5yZWdpc3RlcnMgdGhlIGRldmljZSBlbnRyeSBvbiBzeXNmcworICovCitzdGF0aWMgdm9pZCBoZWNpX3N5c2ZzX2RldmljZV9yZW1vdmUodm9pZCkKK3sKKwlpZiAoKGhlY2lfY2xhc3MgPT0gTlVMTCkgfHwgKElTX0VSUihoZWNpX2NsYXNzKSkpCisJCXJldHVybjsKKworCWRldmljZV9kZXN0cm95KGhlY2lfY2xhc3MsIGhlY2lfY2Rldi5kZXYpOworCWNsYXNzX3JlbW92ZV9maWxlKGhlY2lfY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCWNsYXNzX2Rlc3Ryb3koaGVjaV9jbGFzcyk7Cit9CisKKy8qKgorICogaGVjaV9pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQorICoKKyAqIGhlY2lfaW5pdF9tb2R1bGUgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcworICogbG9hZGVkLiBBbGwgaXQgZG9lcyBpcyByZWdpc3RlciB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBoZWNpX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJoZWNpOiAlcyAtIHZlcnNpb24gJXNcbiIsIGhlY2lfZHJpdmVyX3N0cmluZywKKwkJCWhlY2lfZHJpdmVyX3ZlcnNpb24pOworCXByaW50ayhLRVJOX0lORk8gImhlY2k6ICVzXG4iLCBoZWNpX2NvcHlyaWdodCk7CisKKwkvKiBpbml0IHBjaSBtb2R1bGUgKi8KKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZoZWNpX2RyaXZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBFcnJvciByZWdpc3RlcmluZyBkcml2ZXIuXG4iKTsKKwkJZ290byBlbmQ7CisJfQorCisJcmV0ID0gaGVjaV9yZWdpc3Rlcl9jZGV2KCk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZ2lzdGVyX3BjaTsKKworCXJldCA9IGhlY2lfc3lzZnNfZGV2aWNlX2NyZWF0ZSgpOworCWlmIChyZXQpCisJCWdvdG8gdW5yZWdpc3Rlcl9jZGV2OworCisJcmV0dXJuIHJldDsKKwordW5yZWdpc3Rlcl9jZGV2OgorCWhlY2lfdW5yZWdpc3Rlcl9jZGV2KCk7Cit1bnJlZ2lzdGVyX3BjaToKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhlY2lfZHJpdmVyKTsKK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdChoZWNpX2luaXRfbW9kdWxlKTsKKworCisvKioKKyAqIGhlY2lfZXhpdF9tb2R1bGUgLSBEcml2ZXIgRXhpdCBDbGVhbnVwIFJvdXRpbmUKKyAqCisgKiBoZWNpX2V4aXRfbW9kdWxlIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgZHJpdmVyIGlzIHJlbW92ZWQKKyAqIGZyb20gbWVtb3J5LgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgaGVjaV9leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaGVjaV9kcml2ZXIpOworCWhlY2lfc3lzZnNfZGV2aWNlX3JlbW92ZSgpOworCWhlY2lfdW5yZWdpc3Rlcl9jZGV2KCk7Cit9CisKK21vZHVsZV9leGl0KGhlY2lfZXhpdF9tb2R1bGUpOworCisKKy8qKgorICogaGVjaV9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKgorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKiBAZW50OiBlbnRyeSBpbiBrY3NfcGNpX3RibAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBoZWNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoaGVjaV9kZXZpY2UpIHsKKwkJZXJyID0gLUVFWElTVDsKKwkJZ290byBlbmQ7CisJfQorCS8qIGVuYWJsZSBwY2kgZGV2ICovCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZS5cbiIpOworCQlnb3RvIGVuZDsKKwl9CisJLyogc2V0IFBDSSBob3N0IG1hc3RlcmluZyAgKi8KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwkvKiBwY2kgcmVxdWVzdCByZWdpb25zIGZvciBoZWNpIGRyaXZlciAqLworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaGVjaV9kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEZhaWxlZCB0byBnZXQgcGNpIHJlZ2lvbnMuXG4iKTsKKwkJZ290byBkaXNhYmxlX2RldmljZTsKKwl9CisJLyogYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgaGVjaSBkZXYgc3RydWN0dXJlICovCisJZGV2ID0gaW5pdF9oZWNpX2RldmljZShwZGV2KTsKKwlpZiAoIWRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHJlbGVhc2VfcmVnaW9uczsKKwl9CisJLyogbWFwcGluZyAgSU8gZGV2aWNlIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPD0gNTsgaSsrKSB7CisJCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogaGVjaSBoYXMgSU8gcG9ydHMuXG4iKTsKKwkJCWdvdG8gZnJlZV9kZXZpY2U7CisJCX0gZWxzZSBpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJCWlmIChkZXYtPm1lbV9iYXNlKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSJoZWNpOiBUb28gbWFueSBtZW0gYWRkcmVzc2VzLlxuIik7CisJCQkJZ290byBmcmVlX2RldmljZTsKKwkJCX0KKwkJCWRldi0+bWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQlkZXYtPm1lbV9sZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpOworCQl9CisJfQorCWlmICghZGV2LT5tZW1fYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IE5vIGFkZHJlc3MgdG8gdXNlLlxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9kZXZpY2U7CisJfQorCWRldi0+bWVtX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUoZGV2LT5tZW1fYmFzZSwKKwkJCWRldi0+bWVtX2xlbmd0aCk7CisJaWYgKCFkZXYtPm1lbV9hZGRyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogUmVtYXAgSU8gZGV2aWNlIG1lbW9yeSBmYWlsdXJlLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9kZXZpY2U7CisJfQorCS8qIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgICAqLworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaGVjaV9pc3JfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCWhlY2lfZHJpdmVyX25hbWUsIGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IFJlcXVlc3RfaXJxIGZhaWx1cmUuIGlycSA9ICVkIFxuIiwKKwkJICAgICAgIHBkZXYtPmlycSk7CisJCWdvdG8gdW5tYXBfbWVtb3J5OworCX0KKworCWlmIChoZWNpX2h3X2luaXQoZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEluaXQgaHcgZmFpbHVyZS5cbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIHJlbGVhc2VfaXJxOworCX0KKwlpbml0X3RpbWVyKCZkZXYtPndkX3RpbWVyKTsKKworCWhlY2lfaW5pdGlhbGl6ZV9jbGllbnRzKGRldik7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byByZWxlYXNlX2h3OworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaGVjaV9kZXZpY2UgPSBwZGV2OworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWlmIChkZXYtPndkX3RpbWVvdXQpCisJCW1vZF90aW1lcigmZGV2LT53ZF90aW1lciwgamlmZmllcyk7CisKKyNpZmRlZiBDT05GSUdfUE0KKwlnX3N1c193ZF90aW1lb3V0ID0gMDsKKyNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gImhlY2kgZHJpdmVyIGluaXRpYWxpemF0aW9uIHN1Y2Nlc3NmdWwuXG4iKTsKKwlyZXR1cm4gMDsKKworcmVsZWFzZV9odzoKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7CisKKwlkZWxfdGltZXJfc3luYygmZGV2LT53ZF90aW1lcik7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCityZWxlYXNlX2lycToKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7Cit1bm1hcF9tZW1vcnk6CisJaWYgKGRldi0+bWVtX2FkZHIpCisJCWlvdW5tYXAoZGV2LT5tZW1fYWRkcik7CitmcmVlX2RldmljZToKKwlrZnJlZShkZXYpOworcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitkaXNhYmxlX2RldmljZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlbmQ6CisJcHJpbnRrKEtFUk5fRVJSICJoZWNpIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGhlY2lfcmVtb3ZlIC0gRGV2aWNlIFJlbW92YWwgUm91dGluZQorICoKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICoKKyAqIGhlY2lfcmVtb3ZlIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGVydCB0aGUgZHJpdmVyCisgKiB0aGF0IGl0IHNob3VsZCByZWxlYXNlIGEgUENJIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGhlY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaGVjaV9kZXZpY2UgIT0gcGRldikKKwkJcmV0dXJuOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChoZWNpX2RldmljZSAhPSBwZGV2KSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkZXYtPnJlaW5pdF90c2sgIT0gTlVMTCkgeworCQlrdGhyZWFkX3N0b3AoZGV2LT5yZWluaXRfdHNrKTsKKwkJZGV2LT5yZWluaXRfdHNrID0gTlVMTDsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmZGV2LT53ZF90aW1lcik7CisJaWYgKGRldi0+d2RfZmlsZV9leHQuc3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RFRAorCSAgICAmJiBkZXYtPndkX3RpbWVvdXQpIHsKKwkJZGV2LT53ZF90aW1lb3V0ID0gMDsKKwkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RvcF93ZF9wYXJhbXMsIEhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCQlkZXYtPnN0b3AgPSAxOworCQlpZiAoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSAmJgorCQkgICAgZmxvd19jdHJsX2NyZWRzKGRldiwgJmRldi0+d2RfZmlsZV9leHQpKSB7CisJCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKworCQkJaWYgKCFoZWNpX3NlbmRfd2QoZGV2KSkKKwkJCQlEQkcoInNlbmQgc3RvcCBXRCBmYWlsZWRcbiIpOworCQkJZWxzZQorCQkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCk7CisKKwkJCWRldi0+d2RfcGVuZGluZyA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXYtPndkX3BlbmRpbmcgPSAxOworCQl9CisJCWRldi0+d2Rfc3RvcGVkID0gMDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d2FpdF9zdG9wX3dkLAorCQkJCShkZXYtPndkX3N0b3BlZCksIDEwICogSFopOworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlpZiAoIWRldi0+d2Rfc3RvcGVkKQorCQkJREJHKCJzdG9wIHdkIGZhaWxlZCB0byBjb21wbGV0ZS5cbiIpOworCQllbHNlCisJCQlEQkcoInN0b3Agd2QgY29tcGxldGUuXG4iKTsKKworCX0KKworCWhlY2lfZGV2aWNlID0gTlVMTDsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlpZiAoZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkc7CisJCWhlY2lfZGlzY29ubmVjdF9ob3N0X2NsaWVudChkZXYsCisJCQkJCSAgICAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KTsKKwl9CisJaWYgKGRldi0+d2RfZmlsZV9leHQuc3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQlkZXYtPndkX2ZpbGVfZXh0LnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkc7CisJCWhlY2lfZGlzY29ubmVjdF9ob3N0X2NsaWVudChkZXYsCisJCQkJCSAgICAmZGV2LT53ZF9maWxlX2V4dCk7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCS8qIHJlbW92ZSBlbnRyeSBpZiBhbHJlYWR5IGluIGxpc3QgKi8KKwlEQkcoImxpc3QgZGVsIGlhbXRoaWYgYW5kIHdkIGZpbGUgbGlzdC5cbiIpOworCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsIGRldi0+d2RfZmlsZV9leHQuCisJCQkJCSAgaG9zdF9jbGllbnRfaWQpOworCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsCisJCQlkZXYtPmlhbXRoaWZfZmlsZV9leHQuaG9zdF9jbGllbnRfaWQpOworCisJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCWRldi0+aWFtdGhpZl9maWxlX2V4dC5maWxlID0gTlVMTDsKKwlkZXYtPm51bV9oZWNpX21lX2NsaWVudHMgPSAwOworCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYpOworCisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWlmIChkZXYtPm1lbV9hZGRyKQorCQlpb3VubWFwKGRldi0+bWVtX2FkZHIpOworCisJa2ZyZWUoZGV2KTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCisvKioKKyAqIGhlY2lfY2xlYXJfbGlzdCAtIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCBmaWxlCisgKiAJCWZyb20gaGVjaV9jYl9saXN0CisgKgorICogQGZpbGU6IGZpbGUgaW5mb3JtYXRpb24gc3RydWN0CisgKiBAaGVjaV9jYl9saXN0OiBjYWxsYmFja3MgbGlzdAorICoKKyAqIGhlY2lfY2xlYXJfbGlzdCBpcyBjYWxsZWQgdG8gY2xlYXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBmaWxlCisgKiB3aGVuIGFwcGxpY2F0aW9uIGNhbGxzIGNsb3NlIGZ1bmN0aW9uIG9yIEN0cmwtQyB3YXMgcHJlc3NlZAorICoKKyAqIHJldHVybnMgMSBpZiBjYWxsYmFjayByZW1vdmVkIGZyb20gdGhlIGxpc3QsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9jbGVhcl9saXN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWNpX2NiX2xpc3QpCit7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisJc3RydWN0IGZpbGUgKmZpbGVfdGVtcDsKKwlpbnQgcmV0cyA9IDA7CisKKwkvKiBsaXN0IGFsbCBsaXN0IG1lbWJlciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSBoZWNpX2NiX2xpc3QsIGNiX2xpc3QpIHsKKwkJZmlsZV90ZW1wID0gKHN0cnVjdCBmaWxlICopcHJpdl9jYl9wb3MtPmZpbGVfb2JqZWN0OworCQkvKiBjaGVjayBpZiBsaXN0IG1lbWJlciBhc3NvY2lhdGVkIHdpdGggYSBmaWxlICovCisJCWlmIChmaWxlX3RlbXAgPT0gZmlsZSkgeworCQkJLyogcmVtb3ZlIG1lbWJlciBmcm9tIHRoZSBsaXN0ICovCisJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJLyogY2hlY2sgaWYgY2IgZXF1YWwgdG8gY3VycmVudCBpYW10aGlmIGNiICovCisJCQlpZiAoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPT0gcHJpdl9jYl9wb3MpIHsKKwkJCQlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJCQkJLyogc2VuZCBmbG93IGNvbnRyb2wgdG8gaWFtdGhpZiBjbGllbnQgKi8KKwkJCQloZWNpX3NlbmRfZmxvd19jb250cm9sKGRldiwKKwkJCQkJCSAgICAgICAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KTsKKwkJCX0KKwkJCS8qIGZyZWUgYWxsIGFsbG9jYXRlZCBidWZmZXJzICovCisJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiX3Bvcyk7CisJCQlyZXRzID0gMTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX2NsZWFyX2xpc3RzIC0gcmVtb3ZlIGFsbCBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIGZpbGUKKyAqCisgKiBAZGV2OiBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKiBAZmlsZTogZmlsZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqCisgKiBoZWNpX2NsZWFyX2xpc3RzIGlzIGNhbGxlZCB0byBjbGVhciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGZpbGUKKyAqIHdoZW4gYXBwbGljYXRpb24gY2FsbHMgY2xvc2UgZnVuY3Rpb24gb3IgQ3RybC1DIHdhcyBwcmVzc2VkCisgKgorICogcmV0dXJucyAxIGlmIGNhbGxiYWNrIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCwgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBoZWNpX2NsZWFyX2xpc3RzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXRzID0gMDsKKworCS8qIHJlbW92ZSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSAqLworCWhlY2lfY2xlYXJfbGlzdChkZXYsIGZpbGUsICZkZXYtPnB0aGlfY21kX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwlpZiAoaGVjaV9jbGVhcl9saXN0KGRldiwgZmlsZSwKKwkJCSAgICAmZGV2LT5wdGhpX3JlYWRfY29tcGxldGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKQorCQlyZXRzID0gMTsKKworCWhlY2lfY2xlYXJfbGlzdChkZXYsIGZpbGUsICZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCisJaWYgKGhlY2lfY2xlYXJfbGlzdChkZXYsIGZpbGUsICZkZXYtPmN0cmxfd3JfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKQorCQlyZXRzID0gMTsKKworCWlmIChoZWNpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLAorCQkJICAgICZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKQorCQlyZXRzID0gMTsKKworCWlmIChoZWNpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLCAmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCkpCisJCXJldHMgPSAxOworCisJLyogY2hlY2sgaWYgaWFtdGhpZl9jdXJyZW50X2NiIG5vdCBOVUxMICovCisJaWYgKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiICYmICghcmV0cykpIHsKKwkJLyogY2hlY2sgZmlsZSBhbmQgaWFtdGhpZiBjdXJyZW50IGNiIGFzc29jaWF0aW9uICovCisJCWlmIChkZXYtPmlhbXRoaWZfY3VycmVudF9jYi0+ZmlsZV9vYmplY3QgPT0gZmlsZSkgeworCQkJLyogcmVtb3ZlIGNiICovCisJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShkZXYtPmlhbXRoaWZfY3VycmVudF9jYik7CisJCQlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJCQlyZXRzID0gMTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX29wZW4gLSB0aGUgb3BlbiBmdW5jdGlvbgorICoKKyAqIEBpbm9kZTogcG9pbnRlciB0byBpbm9kZSBzdHJ1Y3R1cmUKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJaW50IGlmX251bSA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKworCWlmICghaGVjaV9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKGhlY2lfZGV2aWNlKTsKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZpbGVfZXh0ID0gaGVjaV9hbGxvY19maWxlX3ByaXZhdGUoZmlsZSk7CisJaWYgKGZpbGVfZXh0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWtmcmVlKGZpbGVfZXh0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChkZXYtPm9wZW5faGFuZGxlX2NvdW50ID49IEhFQ0lfTUFYX09QRU5fSEFORExFX0NPVU5UKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJa2ZyZWUoZmlsZV9leHQpOworCQlyZXR1cm4gLUVORklMRTsKKwl9OworCWRldi0+b3Blbl9oYW5kbGVfY291bnQrKzsKKwlsaXN0X2FkZF90YWlsKCZmaWxlX2V4dC0+bGluaywgJmRldi0+ZmlsZV9saXN0KTsKKwl3aGlsZSAoKGRldi0+aGVjaV9ob3N0X2NsaWVudHNbZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkIC8gOF0KKwkJJiAoMSA8PCAoZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkICUgOCkpKSAhPSAwKSB7CisKKwkJZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkKys7IC8qIGFsbG93IG92ZXJmbG93ICovCisJCURCRygiY3VycmVudF9ob3N0X2NsaWVudF9pZCA9ICVkXG4iLAorCQkgICAgZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkKTsKKwkJREJHKCJkZXYtPm9wZW5faGFuZGxlX2NvdW50ID0gJWx1XG4iLAorCQkgICAgZGV2LT5vcGVuX2hhbmRsZV9jb3VudCk7CisJfQorCURCRygiY3VycmVudF9ob3N0X2NsaWVudF9pZCA9ICVkXG4iLCBkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQpOworCWZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCA9IGRldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZDsKKwlkZXYtPmhlY2lfaG9zdF9jbGllbnRzW2ZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCAvIDhdIHw9CisJCSgxIDw8IChmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgJSA4KSk7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0lOSVRJQUxJWklORzsKKwlmaWxlX2V4dC0+c21fc3RhdGUgPSAwOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmlsZV9leHQ7CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV9yZWxlYXNlIC0gdGhlIHJlbGVhc2UgZnVuY3Rpb24KKyAqCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgc3RydWN0dXJlCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGhlY2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0cyA9IDA7CisJaW50IGlmX251bSA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiID0gTlVMTDsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCisJaWYgKCFoZWNpX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEoaGVjaV9kZXZpY2UpOworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGZpbGVfZXh0ICE9ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJaWYgKGZpbGVfZXh0LT5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCQlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVElORzsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJCURCRygiZGlzY29ubmVjdGluZyBjbGllbnQgaG9zdCBjbGllbnQgPSAlZCwgIgorCQkJICAgICJNRSBjbGllbnQgPSAlZFxuIiwKKwkJCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsCisJCQkgICAgZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJCQlyZXRzID0gaGVjaV9kaXNjb25uZWN0X2hvc3RfY2xpZW50KGRldiwgZmlsZV9leHQpOworCQkJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJfQorCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQloZWNpX2ZsdXNoX3F1ZXVlcyhkZXYsIGZpbGVfZXh0KTsKKwkJREJHKCJyZW1vdmUgY2xpZW50IGhvc3QgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCQkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLAorCQkgICAgZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisKKwkJaWYgKGRldi0+b3Blbl9oYW5kbGVfY291bnQgPiAwKSB7CisJCQlkZXYtPmhlY2lfaG9zdF9jbGllbnRzW2ZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCAvIDhdICY9CisJCQl+KDEgPDwgKGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCAlIDgpKTsKKwkJCWRldi0+b3Blbl9oYW5kbGVfY291bnQtLTsKKwkJfQorCQloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LAorCQkJCWZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCk7CisKKwkJLyogZnJlZSByZWFkIGNiICovCisJCWlmIChmaWxlX2V4dC0+cmVhZF9jYiAhPSBOVUxMKSB7CisJCQlwcml2X2NiID0gZmluZF9yZWFkX2xpc3RfZW50cnkoZGV2LCBmaWxlX2V4dCk7CisJCQkvKiBSZW1vdmUgZW50cnkgZnJvbSByZWFkIGxpc3QgKi8KKwkJCWlmIChwcml2X2NiICE9IE5VTEwpCisJCQkJbGlzdF9kZWwoJnByaXZfY2ItPmNiX2xpc3QpOworCisJCQlwcml2X2NiID0gZmlsZV9leHQtPnJlYWRfY2I7CisJCQlmaWxlX2V4dC0+cmVhZF9jYiA9IE5VTEw7CisJCX0KKworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKworCQlpZiAocHJpdl9jYiAhPSBOVUxMKQorCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYik7CisKKwkJa2ZyZWUoZmlsZV9leHQpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkJaWYgKGRldi0+b3Blbl9oYW5kbGVfY291bnQgPiAwKQorCQkJZGV2LT5vcGVuX2hhbmRsZV9jb3VudC0tOworCisJCWlmIChkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPT0gZmlsZQorCQkgICAgJiYgZGV2LT5pYW10aGlmX3N0YXRlICE9IEhFQ0lfSUFNVEhJRl9JRExFKSB7CisJCQlEQkcoInB0aGkgY2FuY2VsZWQgaWFtdGhpZiBzdGF0ZSAlZFxuIiwKKwkJCSAgICBkZXYtPmlhbXRoaWZfc3RhdGUpOworCQkJZGV2LT5pYW10aGlmX2NhbmNlbGVkID0gMTsKKwkJCWlmIChkZXYtPmlhbXRoaWZfc3RhdGUgPT0gSEVDSV9JQU1USElGX1JFQURfQ09NUExFVEUpIHsKKwkJCQlEQkcoInJ1biBuZXh0IHB0aGkgaWFtdGhpZiBjYlxuIik7CisJCQkJcnVuX25leHRfaWFtdGhpZl9jbWQoZGV2KTsKKwkJCX0KKwkJfQorCisJCWlmIChoZWNpX2NsZWFyX2xpc3RzKGRldiwgZmlsZSkpCisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJfQorCXJldHVybiByZXRzOworfQorCitzdGF0aWMgc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqZmluZF9yZWFkX2xpc3RfZW50cnkoCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dF9saXN0X3RlbXA7CisKKwlpZiAoZGV2LT5yZWFkX2xpc3Quc3RhdHVzID09IDAKKwkgICAgJiYgIWxpc3RfZW1wdHkoJmRldi0+cmVhZF9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJREJHKCJyZW1vdmUgcmVhZF9saXN0IENCIFxuIik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywKKwkJCQlwcml2X2NiX25leHQsCisJCQkJJmRldi0+cmVhZF9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCisJCQlmaWxlX2V4dF9saXN0X3RlbXAgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKworCQkJaWYgKChmaWxlX2V4dF9saXN0X3RlbXAgIT0gTlVMTCkgJiYKKwkJCSAgICBoZWNpX2ZlX3NhbWVfaWQoZmlsZV9leHQsIGZpbGVfZXh0X2xpc3RfdGVtcCkpCisJCQkJcmV0dXJuIHByaXZfY2JfcG9zOworCisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogaGVjaV9yZWFkIC0gdGhlIHJlYWQgY2xpZW50IG1lc3NhZ2UgZnVuY3Rpb24uCisgKgorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqIEB1YnVmOiBwb2ludGVyIHRvIHVzZXIgYnVmZmVyCisgKiBAbGVuZ3RoOiBidWZmZXIgbGVuZ3RoCisgKiBAb2Zmc2V0OiBkYXRhIG9mZnNldCBpbiBidWZmZXIKKyAqCisgKiByZXR1cm5zID49MCBkYXRhIGxlbmd0aCBvbiBzdWNjZXNzICwgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIHNzaXplX3QgaGVjaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0cyA9IDAsIGVyciA9IDA7CisJaW50IGlmX251bSA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYiA9IE5VTEw7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKworCWlmICghaGVjaV9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKGhlY2lfZGV2aWNlKTsKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlpZiAoKGZpbGVfZXh0LT5zbV9zdGF0ZSAmIEhFQ0lfV0RfU1RBVEVfSU5ERVBFTkRFTkNFX01TR19TRU5UKSA9PSAwKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJLyogRG8gbm90IGFsbG93IHRvIHJlYWQgd2F0Y2hkb2cgY2xpZW50ICovCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQkJaWYgKG1lbWNtcCgmaGVjaV93ZF9ndWlkLAorCQkJCSAgICZkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfbmFtZSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGd1aWQpKSA9PSAwKSB7CisJCQkJaWYgKGZpbGVfZXh0LT5tZV9jbGllbnRfaWQgPT0KKwkJCQkgICAgZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCkKKwkJCQkJcmV0dXJuIC1FQkFERjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWZpbGVfZXh0LT5zbV9zdGF0ZSAmPSB+SEVDSV9XRF9TVEFURV9JTkRFUEVOREVOQ0VfTVNHX1NFTlQ7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwl9CisKKwlpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQlyZXRzID0gcHRoaV9yZWFkKGRldiwgaWZfbnVtLCBmaWxlLCB1YnVmLCBsZW5ndGgsIG9mZnNldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChmaWxlX2V4dC0+cmVhZF9jYiAmJiBmaWxlX2V4dC0+cmVhZF9jYi0+aW5mb3JtYXRpb24gPiAqb2Zmc2V0KSB7CisJCXByaXZfY2IgPSBmaWxlX2V4dC0+cmVhZF9jYjsKKwkJZ290byBjb3B5X2J1ZmZlcjsKKwl9IGVsc2UgaWYgKGZpbGVfZXh0LT5yZWFkX2NiICYmIGZpbGVfZXh0LT5yZWFkX2NiLT5pbmZvcm1hdGlvbiA+IDAgJiYKKwkJICAgZmlsZV9leHQtPnJlYWRfY2ItPmluZm9ybWF0aW9uIDw9ICpvZmZzZXQpIHsKKwkJcHJpdl9jYiA9IGZpbGVfZXh0LT5yZWFkX2NiOworCQlyZXRzID0gMDsKKwkJZ290byBmcmVlOworCX0gZWxzZSBpZiAoKCFmaWxlX2V4dC0+cmVhZF9jYiB8fCBmaWxlX2V4dC0+cmVhZF9jYi0+aW5mb3JtYXRpb24gPT0gMCkKKwkJICAgICYmICpvZmZzZXQgPiAwKSB7CisJCS8qT2Zmc2V0IG5lZWRzIHRvIGJlIGNsZWFuZWQgZm9yIGNvbnRpbmdvdXMgcmVhZHMqLworCQkqb2Zmc2V0ID0gMDsKKwkJcmV0cyA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJZXJyID0gaGVjaV9zdGFydF9yZWFkKGRldiwgaWZfbnVtLCBmaWxlX2V4dCk7CisJaWYgKGVyciAhPSAwICYmIGVyciAhPSAtRUJVU1kpIHsKKwkJREJHKCJoZWNpIHN0YXJ0IHJlYWQgZmFpbHVyZSB3aXRoIHN0YXR1cyA9ICVkXG4iLCBlcnIpOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCXJldHMgPSBlcnI7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoSEVDSV9SRUFEX0NPTVBMRVRFICE9IGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlCisJCQkmJiAhd2FpdHF1ZXVlX2FjdGl2ZSgmZmlsZV9leHQtPnJ4X3dhaXQpKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0cyA9IC1FQUdBSU47CisJCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmaWxlX2V4dC0+cnhfd2FpdCwKKwkJCShIRUNJX1JFQURfQ09NUExFVEUgPT0gZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUKKwkJCSB8fCBIRUNJX0ZJTEVfSU5JVElBTElaSU5HID09IGZpbGVfZXh0LT5zdGF0ZQorCQkJIHx8IEhFQ0lfRklMRV9ESVNDT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlCisJCQkgfHwgSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkcgPT0gZmlsZV9leHQtPnN0YXRlKSkpIHsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJldHMgPSAtRUlOVFI7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisKKwkJaWYgKEhFQ0lfRklMRV9JTklUSUFMSVpJTkcgPT0gZmlsZV9leHQtPnN0YXRlIHx8CisJCSAgICBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZSB8fAorCQkgICAgSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkcgPT0gZmlsZV9leHQtPnN0YXRlKSB7CisJCQlyZXRzID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwl9CisKKwlwcml2X2NiID0gZmlsZV9leHQtPnJlYWRfY2I7CisKKwlpZiAoIXByaXZfY2IpIHsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlICE9IEhFQ0lfUkVBRF9DT01QTEVURSkgeworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJLyogbm93IGNvcHkgdGhlIGRhdGEgdG8gdXNlciBzcGFjZSAqLworY29weV9idWZmZXI6CisJREJHKCJwcml2X2NiLT5yZXNwb25zZV9idWZmZXIgc2l6ZSAtICVkXG4iLAorCSAgICBwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuc2l6ZSk7CisJREJHKCJwcml2X2NiLT5pbmZvcm1hdGlvbiAtICVsdVxuIiwKKwkgICAgcHJpdl9jYi0+aW5mb3JtYXRpb24pOworCWlmIChsZW5ndGggPT0gMCB8fCB1YnVmID09IE5VTEwgfHwKKwkgICAgKm9mZnNldCA+IHByaXZfY2ItPmluZm9ybWF0aW9uKSB7CisJCXJldHMgPSAtRU1TR1NJWkU7CisJCWdvdG8gZnJlZTsKKwl9CisKKwkvKiBsZW5ndGggaXMgYmVpbmcgdHVybmNhdGVkIHRvIFBBR0VfU0laRSwgaG93ZXZlciwgKi8KKwkvKiBpbmZvcm1hdGlvbiBzaXplIG1heSBiZSBsb25nZXIgKi8KKwlsZW5ndGggPSAobGVuZ3RoIDwgKHByaXZfY2ItPmluZm9ybWF0aW9uIC0gKm9mZnNldCkgPworCQkJbGVuZ3RoIDogKHByaXZfY2ItPmluZm9ybWF0aW9uIC0gKm9mZnNldCkpOworCisJaWYgKGNvcHlfdG9fdXNlcih1YnVmLAorCQkJIHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhICsgKm9mZnNldCwKKwkJCSBsZW5ndGgpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGZyZWU7CisJfQorCisJcmV0cyA9IGxlbmd0aDsKKwkqb2Zmc2V0ICs9IGxlbmd0aDsKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKm9mZnNldCA8IHByaXZfY2ItPmluZm9ybWF0aW9uKQorCQlnb3RvIG91dDsKKworZnJlZToKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCXByaXZfY2JfcG9zID0gZmluZF9yZWFkX2xpc3RfZW50cnkoZGV2LCBmaWxlX2V4dCk7CisJLyogUmVtb3ZlIGVudHJ5IGZyb20gcmVhZCBsaXN0ICovCisJaWYgKHByaXZfY2JfcG9zICE9IE5VTEwpCisJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2IpOworCXNwaW5fbG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPSBIRUNJX0lETEU7CisJZmlsZV9leHQtPnJlYWRfY2IgPSBOVUxMOworCWZpbGVfZXh0LT5yZWFkX3BlbmRpbmcgPSAwOworCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKK291dDoJREJHKCJlbmQgaGVjaSByZWFkIHJldHM9ICVkXG4iLCByZXRzKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX3dyaXRlIC0gdGhlIHdyaXRlIGZ1bmN0aW9uLgorICoKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAdWJ1ZjogcG9pbnRlciB0byB1c2VyIGJ1ZmZlcgorICogQGxlbmd0aDogYnVmZmVyIGxlbmd0aAorICogQG9mZnNldDogZGF0YSBvZmZzZXQgaW4gYnVmZmVyCisgKgorICogcmV0dXJucyA+PTAgZGF0YSBsZW5ndGggb24gc3VjY2VzcyAsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhlY2lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlpbnQgcmV0cyA9IDA7CisJX191OCBpOworCWludCBpZl9udW0gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl93cml0ZV9jYiA9IE5VTEw7CisJc3RydWN0IGhlY2lfbXNnX2hkciBoZWNpX2hkcjsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcgY3VycnRpbWUgPSBnZXRfc2Vjb25kcygpOworCisJaWYgKCFoZWNpX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEoaGVjaV9kZXZpY2UpOworCisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJcHJpdl93cml0ZV9jYiA9IGZpbmRfcHRoaV9yZWFkX2xpc3RfZW50cnkoZGV2LCBmaWxlKTsKKwkJaWYgKChwcml2X3dyaXRlX2NiICE9IE5VTEwpICYmCisJCSAgICAgKCgoY3VycnRpbWUgLSBwcml2X3dyaXRlX2NiLT5yZWFkX3RpbWUpID4KKwkJCSAgICBJQU1USElGX1JFQURfVElNRVIpIHx8CisJCSAgICAgIChmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9PSBIRUNJX1JFQURfQ09NUExFVEUpKSkgeworCQkJKCpvZmZzZXQpID0gMDsKKwkJCWxpc3RfZGVsKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0KTsKKwkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfd3JpdGVfY2IpOworCQkJcHJpdl93cml0ZV9jYiA9IE5VTEw7CisJCX0KKwl9CisKKwkvKiBmcmVlIGVudHJ5IHVzZWQgaW4gcmVhZCAqLworCWlmIChmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9PSBIRUNJX1JFQURfQ09NUExFVEUpIHsKKwkJKm9mZnNldCA9IDA7CisJCXByaXZfd3JpdGVfY2IgPSBmaW5kX3JlYWRfbGlzdF9lbnRyeShkZXYsIGZpbGVfZXh0KTsKKwkJaWYgKHByaXZfd3JpdGVfY2IgIT0gTlVMTCkgeworCQkJbGlzdF9kZWwoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QpOworCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl93cml0ZV9jYik7CisJCQlwcml2X3dyaXRlX2NiID0gTlVMTDsKKwkJCXNwaW5fbG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCQlmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9IEhFQ0lfSURMRTsKKwkJCWZpbGVfZXh0LT5yZWFkX2NiID0gTlVMTDsKKwkJCWZpbGVfZXh0LT5yZWFkX3BlbmRpbmcgPSAwOworCQkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQl9CisJfSBlbHNlIGlmIChmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9PSBIRUNJX0lETEUgJiYKKwkJCWZpbGVfZXh0LT5yZWFkX3BlbmRpbmcgPT0gMCkKKwkJKCpvZmZzZXQpID0gMDsKKworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXByaXZfd3JpdGVfY2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2X3dyaXRlX2NiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXZfd3JpdGVfY2ItPmZpbGVfb2JqZWN0ID0gZmlsZTsKKwlwcml2X3dyaXRlX2NiLT5maWxlX3ByaXZhdGUgPSBmaWxlX2V4dDsKKwlwcml2X3dyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghcHJpdl93cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSkgeworCQlrZnJlZShwcml2X3dyaXRlX2NiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCURCRygibGVuZ3RoID0lZFxuIiwgKGludCkgbGVuZ3RoKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihwcml2X3dyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhLAorCQl1YnVmLCBsZW5ndGgpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGZhaWw7CisJfQorCisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlmaWxlX2V4dC0+c21fc3RhdGUgPSAwOworCWlmICgobGVuZ3RoID09IDQpICYmCisJICAgICgobWVtY21wKGhlY2lfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1swXSwgdWJ1ZiwgNCkgPT0gMCkgfHwKKwkgICAgIChtZW1jbXAoaGVjaV93ZF9zdGF0ZV9pbmRlcGVuZGVuY2VfbXNnWzFdLCB1YnVmLCA0KSA9PSAwKSB8fAorCSAgICAgKG1lbWNtcChoZWNpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbMl0sIHVidWYsIDQpID09IDApKSkKKwkJZmlsZV9leHQtPnNtX3N0YXRlIHw9IEhFQ0lfV0RfU1RBVEVfSU5ERVBFTkRFTkNFX01TR19TRU5UOworCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0KTsKKwlpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQlwcml2X3dyaXRlX2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSA9CisJCSAgICBrbWFsbG9jKElBTVRISUZfTVRVLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2X3dyaXRlX2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSkgeworCQkJcmV0cyA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJZ290byBmYWlsOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJCQlkZXYtPmlhbXRoaWZfZmlsZV9leHQubWVfY2xpZW50X2lkKQorCQkJCWJyZWFrOworCQl9CisKKwkJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJCWlmICgoaSA9PSBkZXYtPm51bV9oZWNpX21lX2NsaWVudHMpIHx8CisJCSAgICAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPQorCQkgICAgICBkZXYtPmlhbXRoaWZfZmlsZV9leHQubWVfY2xpZW50X2lkKSkgeworCisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDsKKwkJfSBlbHNlIGlmICgobGVuZ3RoID4gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoKQorCQkJICAgIHx8IChsZW5ndGggPD0gMCkpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHMgPSAtRU1TR1NJWkU7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCisJCXByaXZfd3JpdGVfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplID0gSUFNVEhJRl9NVFU7CisJCXByaXZfd3JpdGVfY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IEhFQ0lfSU9DVEw7CisJCXByaXZfd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwkJcHJpdl93cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9IGxlbmd0aDsKKwkJaWYgKGRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wdGhpX2NtZF9saXN0LmhlY2lfY2IuY2JfbGlzdCkKKwkJCQl8fCBkZXYtPmlhbXRoaWZfc3RhdGUgIT0gSEVDSV9JQU1USElGX0lETEUpIHsKKwkJCURCRygicHRoaV9zdGF0ZSA9ICVkXG4iLCAoaW50KSBkZXYtPmlhbXRoaWZfc3RhdGUpOworCQkJREJHKCJhZGQgUFRISSBjYiB0byBwdGhpIGNtZCB3YWl0aW5nIGxpc3RcbiIpOworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCwKKwkJCQkJJmRldi0+cHRoaV9jbWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQkJcmV0cyA9IGxlbmd0aDsKKwkJfSBlbHNlIHsKKwkJCURCRygiY2FsbCBwdGhpIHdyaXRlXG4iKTsKKwkJCXJldHMgPSBwdGhpX3dyaXRlKGRldiwgcHJpdl93cml0ZV9jYik7CisKKwkJCWlmIChyZXRzICE9IDApIHsKKwkJCQlEQkcoInB0aGkgd3JpdGUgZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsCisJCQkJICAgIHJldHMpOworCQkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlyZXRzID0gbGVuZ3RoOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIHJldHM7CisJfQorCisJcHJpdl93cml0ZV9jYi0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID0gSEVDSV9XUklURTsKKwkvKiBtYWtlIHN1cmUgaW5mb3JtYXRpb24gaXMgemVybyBiZWZvcmUgd2Ugc3RhcnQgKi8KKworCXByaXZfd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwlwcml2X3dyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplID0gbGVuZ3RoOworCisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+d3JpdGVfaW9fbG9jayk7CisJREJHKCJob3N0IGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZFxuIiwKKwkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLCBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwlpZiAoZmlsZV9leHQtPnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCURCRygiaG9zdCBjbGllbnQgPSAlZCwgIGlzIG5vdCBjb25uZWN0ZWQgdG8gTUUgY2xpZW50ID0gJWQiLAorCQkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLAorCQkgICAgZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisKKwkJZ290byB1bmxvY2s7CisJfQorCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PQorCQkgICAgZmlsZV9leHQtPm1lX2NsaWVudF9pZCkKKwkJCWJyZWFrOworCX0KKwlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwlpZiAoaSA9PSBkZXYtPm51bV9oZWNpX21lX2NsaWVudHMpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrOworCX0KKwlpZiAobGVuZ3RoID4gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoIHx8IGxlbmd0aCA8PSAwKSB7CisJCXJldHMgPSAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKKwl9CisJcHJpdl93cml0ZV9jYi0+ZmlsZV9wcml2YXRlID0gZmlsZV9leHQ7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChmbG93X2N0cmxfY3JlZHMoZGV2LCBmaWxlX2V4dCkgJiYKKwkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQlpZiAobGVuZ3RoID4gKCgoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkgKgorCQkJc2l6ZW9mKF9fdTMyKSkgLSBzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikpKSB7CisKKwkJCWhlY2lfaGRyLmxlbmd0aCA9CisJCQkJKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSAqCisJCQkJc2l6ZW9mKF9fdTMyKSkgLQorCQkJCXNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKTsKKwkJCWhlY2lfaGRyLm1zZ19jb21wbGV0ZSA9IDA7CisJCX0gZWxzZSB7CisJCQloZWNpX2hkci5sZW5ndGggPSBsZW5ndGg7CisJCQloZWNpX2hkci5tc2dfY29tcGxldGUgPSAxOworCQl9CisJCWhlY2lfaGRyLmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwkJaGVjaV9oZHIubWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLnJlc2VydmVkID0gMDsKKwkJREJHKCJjYWxsIGhlY2lfd3JpdGVfbWVzc2FnZSBoZWFkZXI9JTA4eC5cbiIsCisJCSAgICAqKChfX3UzMiAqKSAmaGVjaV9oZHIpKTsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT53cml0ZV9pb19sb2NrKTsKKwkJLyogIHByb3RlY3QgaGVjaSBsb3cgbGV2ZWwgd3JpdGUgKi8KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCAmaGVjaV9oZHIsCisJCQkodW5zaWduZWQgY2hhciAqKSAocHJpdl93cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSksCisJCQloZWNpX2hkci5sZW5ndGgpKSB7CisKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfd3JpdGVfY2IpOworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlwcml2X3dyaXRlX2NiLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlyZXR1cm4gcmV0czsKKwkJfQorCQlmaWxlX2V4dC0+d3JpdGluZ19zdGF0ZSA9IEhFQ0lfV1JJVElORzsKKwkJcHJpdl93cml0ZV9jYi0+aW5mb3JtYXRpb24gPSBoZWNpX2hkci5sZW5ndGg7CisJCWlmIChoZWNpX2hkci5tc2dfY29tcGxldGUpIHsKKwkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCBmaWxlX2V4dCk7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJfSBlbHNlIHsKKworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXByaXZfd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwkJZmlsZV9leHQtPndyaXRpbmdfc3RhdGUgPSBIRUNJX1dSSVRJTkc7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+d3JpdGVfaW9fbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJfQorCXJldHVybiBsZW5ndGg7CisKK3VubG9jazoKKwlzcGluX3VubG9jaygmZmlsZV9leHQtPndyaXRlX2lvX2xvY2spOworZmFpbDoKKwloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X3dyaXRlX2NiKTsKKwlyZXR1cm4gcmV0czsKKworfQorCisvKioKKyAqIGhlY2lfaW9jdGwgLSB0aGUgSU9DVEwgZnVuY3Rpb24KKyAqCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgc3RydWN0dXJlCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICogQGNtZDogaW9jdGwgY29tbWFuZAorICogQGRhdGE6IHBvaW50ZXIgdG8gaGVjaSBtZXNzYWdlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzICwgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBoZWNpX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IHJldHMgPSAwOworCWludCBpZl9udW0gPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJLyogaW4gdXNlciBzcGFjZSAqLworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBfX3VzZXIgKnVfbXNnOworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZzsJLyogYWxsIGluIGtlcm5lbCBvbiB0aGUgc3RhY2sgKi8KKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKCFoZWNpX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEoaGVjaV9kZXZpY2UpOworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkvKiBmaXJzdCBjb3B5IGZyb20gdXNlciBhbGwgZGF0YSBuZWVkZWQgKi8KKwl1X21zZyA9IChzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgX191c2VyICopZGF0YTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmtfbXNnLCB1X21zZywgc2l6ZW9mKGtfbXNnKSkpIHsKKwkJREJHKCJmaXJzdCBjb3B5IGZyb20gdXNlciBhbGwgZGF0YSBuZWVkZWQgZmlsbGVkXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCURCRygidXNlciBtZXNzYWdlIHNpemUgaXMgJWRcbiIsIGtfbXNnLnNpemUpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElPQ1RMX0hFQ0lfR0VUX1ZFUlNJT046CisJCURCRygiOiBJT0NUTF9IRUNJX0dFVF9WRVJTSU9OXG4iKTsKKwkJcmV0cyA9IGhlY2lfaW9jdGxfZ2V0X3ZlcnNpb24oZGV2LCBpZl9udW0sIHVfbXNnLCBrX21zZywKKwkJCQkJICAgICAgZmlsZV9leHQpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfSEVDSV9DT05ORUNUX0NMSUVOVDoKKwkJREJHKCI6IElPQ1RMX0hFQ0lfQ09OTkVDVF9DTElFTlQuXG4iKTsKKwkJcmV0cyA9IGhlY2lfaW9jdGxfY29ubmVjdF9jbGllbnQoZGV2LCBpZl9udW0sIHVfbXNnLCBrX21zZywKKwkJCQkJCSBmaWxlKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RMX0hFQ0lfV0Q6CisJCURCRygiOiBJT0NUTF9IRUNJX1dELlxuIik7CisJCXJldHMgPSBoZWNpX2lvY3RsX3dkKGRldiwgaWZfbnVtLCBrX21zZywgZmlsZV9leHQpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfSEVDSV9CWVBBU1NfV0Q6CisJCURCRygiOiBJT0NUTF9IRUNJX0JZUEFTU19XRC5cbiIpOworCQlyZXRzID0gaGVjaV9pb2N0bF9ieXBhc3Nfd2QoZGV2LCBpZl9udW0sIGtfbXNnLCBmaWxlX2V4dCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0cyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX3BvbGwgLSB0aGUgcG9sbCBmdW5jdGlvbgorICoKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAd2FpdDogcG9pbnRlciB0byBwb2xsX3RhYmxlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgcG9sbCBtYXNrCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVjaV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCWludCBpZl9udW0gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisKKwlpZiAoIWhlY2lfZGV2aWNlKQorCQlyZXR1cm4gbWFzazsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShoZWNpX2RldmljZSk7CisKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gbWFzazsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gbWFzazsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJcG9sbF93YWl0KGZpbGUsICZkZXYtPmlhbXRoaWZfZmlsZV9leHQud2FpdCwgd2FpdCk7CisJCXNwaW5fbG9jaygmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LmZpbGVfbG9jayk7CisJCWlmIChkZXYtPmlhbXRoaWZfc3RhdGUgPT0gSEVDSV9JQU1USElGX1JFQURfQ09NUExFVEUKKwkJICAgICYmIGRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9PSBmaWxlKSB7CisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwkJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlEQkcoInJ1biBuZXh0IHB0aGkgY2JcbiIpOworCQkJcnVuX25leHRfaWFtdGhpZl9jbWQoZGV2KTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJfQorCQlzcGluX3VubG9jaygmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LmZpbGVfbG9jayk7CisKKwl9IGVsc2V7CisJCXBvbGxfd2FpdChmaWxlLCAmZmlsZV9leHQtPnR4X3dhaXQsIHdhaXQpOworCQlzcGluX2xvY2soJmZpbGVfZXh0LT53cml0ZV9pb19sb2NrKTsKKwkJaWYgKEhFQ0lfV1JJVEVfQ09NUExFVEUgPT0gZmlsZV9leHQtPndyaXRpbmdfc3RhdGUpCisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPndyaXRlX2lvX2xvY2spOworCX0KKworCXJldHVybiBtYXNrOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGhlY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGVyciA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPnJlaW5pdF90c2sgIT0gTlVMTCkgeworCQlrdGhyZWFkX3N0b3AoZGV2LT5yZWluaXRfdHNrKTsKKwkJZGV2LT5yZWluaXRfdHNrID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogU3RvcCB3YXRjaGRvZyBpZiBleGlzdHMgKi8KKwlkZWxfdGltZXJfc3luYygmZGV2LT53ZF90aW1lcik7CisJaWYgKGRldi0+d2RfZmlsZV9leHQuc3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RFRAorCSAgICAmJiBkZXYtPndkX3RpbWVvdXQpIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ19zdXNfd2RfdGltZW91dCA9IGRldi0+d2RfdGltZW91dDsKKwkJZGV2LT53ZF90aW1lb3V0ID0gMDsKKwkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RvcF93ZF9wYXJhbXMsCisJCQkJCUhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCQlkZXYtPnN0b3AgPSAxOworCQlpZiAoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSAmJgorCQkgICAgZmxvd19jdHJsX2NyZWRzKGRldiwgJmRldi0+d2RfZmlsZV9leHQpKSB7CisJCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJCWlmICghaGVjaV9zZW5kX3dkKGRldikpCisJCQkJREJHKCJzZW5kIHN0b3AgV0QgZmFpbGVkXG4iKTsKKwkJCWVsc2UKKwkJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgJmRldi0+d2RfZmlsZV9leHQpOworCisJCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCQl9IGVsc2UgeworCQkJZGV2LT53ZF9wZW5kaW5nID0gMTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWRldi0+d2Rfc3RvcGVkID0gMDsKKworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndhaXRfc3RvcF93ZCwKKwkJCQkJCSAgICAgICAoZGV2LT53ZF9zdG9wZWQpLAorCQkJCQkJICAgICAgIDEwICogSFopOworCQlpZiAoIWRldi0+d2Rfc3RvcGVkKQorCQkJREJHKCJzdG9wIHdkIGZhaWxlZCB0byBjb21wbGV0ZS5cbiIpOworCQllbHNlIHsKKwkJCURCRygic3RvcCB3ZCBjb21wbGV0ZSAlZC5cbiIsIGVycik7CisJCQllcnIgPSAwOworCQl9CisJfQorCS8qIFNldCBuZXcgaGVjaSBzdGF0ZSAqLworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSA9PSBIRUNJX0VOQUJMRUQgfHwKKwkgICAgZGV2LT5oZWNpX3N0YXRlID09IEhFQ0lfUkVDT1ZFUklOR19GUk9NX1JFU0VUKSB7CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfUE9XRVJfRE9XTjsKKwkJaGVjaV9yZXNldChkZXYsIDApOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGhlY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisJaW50IGVyciA9IDA7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogcmVxdWVzdCBhbmQgZW5hYmxlIGludGVycnVwdCAgICovCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBoZWNpX2lzcl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJaGVjaV9kcml2ZXJfbmFtZSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogUmVxdWVzdF9pcnEgZmFpbHVyZS4gaXJxID0gJWQgXG4iLAorCQkgICAgICAgcGRldi0+aXJxKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfUE9XRVJfVVA7CisJaGVjaV9yZXNldChkZXYsIDEpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCS8qIFN0YXJ0IHdhdGNoZG9nIGlmIHN0b3BwZWQgaW4gc3VzcGVuZCAqLworCWlmIChnX3N1c193ZF90aW1lb3V0ICE9IDApIHsKKwkJZGV2LT53ZF90aW1lb3V0ID0gZ19zdXNfd2RfdGltZW91dDsKKworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0YXJ0X3dkX3BhcmFtcywKKwkJCQkJSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJCW1lbWNweShkZXYtPndkX2RhdGEgKyBIRUNJX1dEX1BBUkFNU19TSVpFLAorCQkgICAgICAgJmRldi0+d2RfdGltZW91dCwgc2l6ZW9mKF9fdTE2KSk7CisJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAxOworCisJCWlmIChkZXYtPndkX3RpbWVvdXQpCisJCQltb2RfdGltZXIoJmRldi0+d2RfdGltZXIsIGppZmZpZXMpOworCisJCWdfc3VzX3dkX3RpbWVvdXQgPSAwOworCX0KKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsKFIpIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX1ZFUlNJT04oSEVDSV9EUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX3ZlcnNpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDdhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX3ZlcnNpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaWZuZGVmIEhFQ0lfVkVSU0lPTl9ICisjZGVmaW5lIEhFQ0lfVkVSU0lPTl9ICisKKyNkZWZpbmUgTUFKT1JfVkVSU0lPTiAgICAgICAgICAgICAgNQorI2RlZmluZSBNSU5PUl9WRVJTSU9OICAgICAgICAgICAgICAwCisjZGVmaW5lIFFVSUNLX0ZJWF9OVU1CRVIgICAgICAgIDAKKyNkZWZpbmUgVkVSX0JVSUxEICAgICAgICAgICAgICAgMzEKKworI2RlZmluZSBIRUNJX0RSVl9WRVIxIF9fc3RyaW5naWZ5KE1BSk9SX1ZFUlNJT04pICIuIiBfX3N0cmluZ2lmeShNSU5PUl9WRVJTSU9OKQorI2RlZmluZSBIRUNJX0RSVl9WRVIyIF9fc3RyaW5naWZ5KFFVSUNLX0ZJWF9OVU1CRVIpICIuIiBfX3N0cmluZ2lmeShWRVJfQlVJTEQpCisKKyNkZWZpbmUgSEVDSV9EUklWRVJfVkVSU0lPTglIRUNJX0RSVl9WRVIxICIuIiBIRUNJX0RSVl9WRVIyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaW50ZXJydXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9pbnRlcnJ1cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNkMjYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaW50ZXJydXB0LmMKQEAgLTAsMCArMSwxNTUzIEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCisjaW5jbHVkZSAiaGVjaS5oIgorI2luY2x1ZGUgImhlY2lfaW50ZXJmYWNlLmgiCisKKy8qCisgKiAgaW50ZXJydXB0IGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RhdGljIHZvaWQgaGVjaV9iaF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgaW50IGhlY2lfYmhfcmVhZF9oYW5kbGVyKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNvbXBsZXRlX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCV9fczMyICpzbG90cyk7CitzdGF0aWMgaW50IGhlY2lfYmhfd3JpdGVfaGFuZGxlcihzdHJ1Y3QgaW9faGVjaV9saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlfX3MzMiAqc2xvdHMpOworc3RhdGljIHZvaWQgaGVjaV9iaF9yZWFkX2J1c19tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKTsKK3N0YXRpYyBpbnQgaGVjaV9iaF9yZWFkX3B0aGlfbWVzc2FnZShzdHJ1Y3QgaW9faGVjaV9saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcik7CitzdGF0aWMgaW50IGhlY2lfYmhfcmVhZF9jbGllbnRfbWVzc2FnZShzdHJ1Y3QgaW9faGVjaV9saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcik7CitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKmNvbm5lY3RfcmVzKTsKK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqZGlzY29ubmVjdF9yZXMpOworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfZmxvd19jb250cm9sX3Jlc3BvbnNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fZmxvd19jb250cm9sICpmbG93X2NvbnRyb2wpOworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqZGlzY29ubmVjdF9yZXEpOworCisKKy8qKgorICogaGVjaV9pc3JfaW50ZXJydXB0IC0gVGhlIElTUiBvZiB0aGUgSEVDSSBkZXZpY2UKKyAqCisgKiBAaXJxOiBUaGUgaXJxIG51bWJlcgorICogQGRldl9pZDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgaXJxcmV0dXJuX3QKKyAqLworaXJxcmV0dXJuX3QgaGVjaV9pc3JfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPSAoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKikgZGV2X2lkOworCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCisJaWYgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0lTKSAhPSBIX0lTKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwloZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKKworCS8qCisJICogT3VyIGRldmljZSBpbnRlcnJ1cHRlZCwgc2NoZWR1bGUgd29yayB0aGUgaGVjaV9iaF9oYW5kbGVyCisJICogdG8gaGFuZGxlIHRoZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4gVGhpcyBuZWVkcyB0byBiZSBhCisJICogd29ya3F1ZXVlIGl0ZW0gc2luY2UgdGhlIGhhbmRsZXIgY2FuIHNsZWVwLgorCSAqLworCVBSRVBBUkVfV09SSygmZGV2LT53b3JrLCBoZWNpX2JoX2hhbmRsZXIpOworCURCRygic2NoZWR1bGUgd29yayB0aGUgaGVjaV9iaF9oYW5kbGVyLlxuIik7CisJZXJyID0gc2NoZWR1bGVfd29yaygmZGV2LT53b3JrKTsKKwlpZiAoIWVycikgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IHNjaGVkdWxlIHRoZSBoZWNpX2JoX2hhbmRsZXIiCisJCSAgICAgICAiIGZhaWxlZCBlcnJvcj0leFxuIiwgZXJyKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIF9oZWNpX2NtcGwgLSBwcm9jZXNzIGNvbXBsZXRlZCBvcGVyYXRpb24uCisgKgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqLworc3RhdGljIHZvaWQgX2hlY2lfY21wbChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zKQoreworCWlmIChwcml2X2NiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID09IEhFQ0lfV1JJVEUpIHsKKwkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYl9wb3MpOworCQlEQkcoImNvbXBsZXRpbmcgd3JpdGUgY2FsbCBiYWNrLlxuIik7CisJCWZpbGVfZXh0LT53cml0aW5nX3N0YXRlID0gSEVDSV9XUklURV9DT01QTEVURTsKKwkJaWYgKCgmZmlsZV9leHQtPnR4X3dhaXQpICYmCisJCSAgICB3YWl0cXVldWVfYWN0aXZlKCZmaWxlX2V4dC0+dHhfd2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZpbGVfZXh0LT50eF93YWl0KTsKKworCX0gZWxzZSBpZiAocHJpdl9jYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9PSBIRUNJX1JFQUQKKwkJCQkmJiBIRUNJX1JFQURJTkcgPT0gZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUpIHsKKwkJREJHKCJjb21wbGV0aW5nIHJlYWQgY2FsbCBiYWNrIGluZm9ybWF0aW9uPSAlbHVcbiIsCisJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKTsKKwkJZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPSBIRUNJX1JFQURfQ09NUExFVEU7CisJCWlmICgoJmZpbGVfZXh0LT5yeF93YWl0KSAmJgorCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZmlsZV9leHQtPnJ4X3dhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmaWxlX2V4dC0+cnhfd2FpdCk7CisKKwl9Cit9CisKKy8qKgorICogX2hlY2lfY21wbF9pYW10aGlmIC0gcHJvY2VzcyBjb21wbGV0ZWQgaWFtdGhpZiBvcGVyYXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIF9oZWNpX2NtcGxfaWFtdGhpZihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zKQoreworCWlmIChkZXYtPmlhbXRoaWZfY2FuY2VsZWQgIT0gMSkgeworCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfUkVBRF9DT01QTEVURTsKKwkJZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyID0gMDsKKwkJbWVtY3B5KHByaXZfY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuZGF0YSwKKwkJCQlkZXYtPmlhbXRoaWZfbXNnX2J1ZiwKKwkJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCk7CisJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCSZkZXYtPnB0aGlfcmVhZF9jb21wbGV0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCURCRygicHRoaSByZWFkIGNvbXBsZXRlZC5cbiIpOworCX0gZWxzZSB7CisJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJfQorCWlmICgmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LndhaXQpIHsKKwkJREJHKCJjb21wbGV0aW5nIHB0aGkgY2FsbCBiYWNrLlxuIik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LndhaXQpOworCX0KK30KKy8qKgorICogaGVjaV9iaF9oYW5kbGVyIC0gZnVuY3Rpb24gY2FsbGVkIGFmdGVyIElTUiB0byBoYW5kbGUgdGhlIGludGVycnVwdAorICogcHJvY2Vzc2luZy4KKyAqCisgKiBAd29yazogcG9pbnRlciB0byB0aGUgd29yayBzdHJ1Y3R1cmUKKyAqCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBzY2hlZHVsZSB3b3JrCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfYmhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSwgd29yayk7CisJc3RydWN0IGlvX2hlY2lfbGlzdCBjb21wbGV0ZV9saXN0OworCV9fczMyIHNsb3RzOworCWludCByZXRzOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKmNiX3BvcyA9IE5VTEwsICpjYl9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCWludCBidXNfbWVzc2FnZV9yZWNlaXZlZCA9IDA7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisKKwlEQkcoImZ1bmN0aW9uIGNhbGxlZCBhZnRlciBJU1IgdG8gaGFuZGxlIHRoZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZy5cbiIpOworCS8qIGluaXRpYWxpemUgb3VyIGNvbXBsZXRlIGxpc3QgKi8KKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWhlY2lfaW5pdGlhbGl6ZV9saXN0KCZjb21wbGV0ZV9saXN0LCBkZXYpOworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwlkZXYtPm1lX2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ1NSX0hBKTsKKworCS8qIGNoZWNrIGlmIE1FIHdhbnRzIGEgcmVzZXQgKi8KKwlpZiAoKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgPT0gMCkKKwkgICAgJiYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX1JFU0VUSU5HKQorCSAgICAmJiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfSU5JVElBTElaSU5HKSkgeworCQlEQkcoIkZXIG5vdCByZWFkeS5cbiIpOworCQloZWNpX3Jlc2V0KGRldiwgMSk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCS8qICBjaGVjayBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBkZXYgKi8KKwlpZiAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUkRZKSA9PSAwKSB7CisJCWlmICgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpID09IE1FX1JEWV9IUkEpIHsKKwkJCURCRygid2UgbmVlZCB0byBzdGFydCB0aGUgZGV2LlxuIik7CisJCQlkZXYtPmhvc3RfaHdfc3RhdGUgfD0gKEhfSUUgfCBIX0lHIHwgSF9SRFkpOworCQkJaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKGRldik7CisJCQlpZiAoZGV2LT5oZWNpX3N0YXRlID09IEhFQ0lfSU5JVElBTElaSU5HKSB7CisJCQkJZGV2LT5yZWN2ZF9tc2cgPSAxOworCQkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQkJCXJldHVybjsKKworCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQkJdHNrID0ga3RocmVhZF9ydW4oaGVjaV90YXNrX2luaXRpYWxpemVfY2xpZW50cywKKwkJCQkJCSAgZGV2LCAiaGVjaV9yZWluaXQiKTsKKwkJCQlpZiAoSVNfRVJSKHRzaykpIHsKKwkJCQkJaW50IHJjID0gUFRSX0VSUih0c2spOworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZWNpOiBVbmFibGUgdG8iCisJCQkJCSJzdGFydCB0aGUgaGVjaSB0aHJlYWQ6ICVkXG4iLCByYyk7CisJCQkJfQorCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCURCRygiZW5hYmxlIGludGVycnVwdCBGVyBub3QgcmVhZHkuXG4iKTsKKwkJCWhlY2lfY3NyX2VuYWJsZV9pbnRlcnJ1cHRzKGRldik7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJLyogY2hlY2sgc2xvdHMgYXZhbGFibGUgZm9yIHJlYWRpbmcgKi8KKwlzbG90cyA9IGNvdW50X2Z1bGxfcmVhZF9zbG90cyhkZXYpOworCURCRygic2xvdHMgPSUwOHggIGV4dHJhX3dyaXRlX2luZGV4ID0lMDh4LlxuIiwKKwkJc2xvdHMsIGRldi0+ZXh0cmFfd3JpdGVfaW5kZXgpOworCXdoaWxlICgoc2xvdHMgPiAwKSAmJiAoIWRldi0+ZXh0cmFfd3JpdGVfaW5kZXgpKSB7CisJCURCRygic2xvdHMgPSUwOHggIGV4dHJhX3dyaXRlX2luZGV4ID0lMDh4LlxuIiwgc2xvdHMsCisJCQkJZGV2LT5leHRyYV93cml0ZV9pbmRleCk7CisJCURCRygiY2FsbCBoZWNpX2JoX3JlYWRfaGFuZGxlci5cbiIpOworCQlyZXRzID0gaGVjaV9iaF9yZWFkX2hhbmRsZXIoJmNvbXBsZXRlX2xpc3QsIGRldiwgJnNsb3RzKTsKKwkJaWYgKHJldHMgIT0gMCkKKwkJCWdvdG8gZW5kOworCX0KKwlyZXRzID0gaGVjaV9iaF93cml0ZV9oYW5kbGVyKCZjb21wbGV0ZV9saXN0LCBkZXYsICZzbG90cyk7CitlbmQ6CisJREJHKCJlbmQgb2YgYm90dG9tIGhhbGYgZnVuY3Rpb24uXG4iKTsKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IGhvc3RfYnVmZmVyX2lzX2VtcHR5KGRldik7CisKKwlpZiAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfSVMpID09IEhfSVMpIHsKKwkJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0IGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7CisKKwkJUFJFUEFSRV9XT1JLKCZkZXYtPndvcmssIGhlY2lfYmhfaGFuZGxlcik7CisJCURCRygic2NoZWR1bGUgd29yayB0aGUgaGVjaV9iaF9oYW5kbGVyLlxuIik7CisJCXJldHMgPSBzY2hlZHVsZV93b3JrKCZkZXYtPndvcmspOworCQlpZiAoIXJldHMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogc2NoZWR1bGUgdGhlIGhlY2lfYmhfaGFuZGxlciIKKwkJCSAgICAgICAiIGZhaWxlZCBlcnJvcj0leFxuIiwgcmV0cyk7CisJCX0KKwl9IGVsc2UgeworCQloZWNpX2Nzcl9lbmFibGVfaW50ZXJydXB0cyhkZXYpOworCX0KKworCWlmIChkZXYtPnJlY3ZkX21zZyAmJiB3YWl0cXVldWVfYWN0aXZlKCZkZXYtPndhaXRfcmVjdmRfbXNnKSkgeworCQlEQkcoInJlY2VpdmVkIHdhaXRpbmcgYnVzIG1lc3NhZ2VcbiIpOworCQlidXNfbWVzc2FnZV9yZWNlaXZlZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoYnVzX21lc3NhZ2VfcmVjZWl2ZWQpIHsKKwkJREJHKCJ3YWtlIHVwIGRldi0+d2FpdF9yZWN2ZF9tc2dcbiIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQlidXNfbWVzc2FnZV9yZWNlaXZlZCA9IDA7CisJfQorCWlmICgoY29tcGxldGVfbGlzdC5zdGF0dXMgIT0gMCkKKwkgICAgfHwgbGlzdF9lbXB0eSgmY29tcGxldGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKQorCQlyZXR1cm47CisKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYl9wb3MsIGNiX25leHQsCisJCQkmY29tcGxldGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQlpZiAoZmlsZV9leHQgIT0gTlVMTCkgeworCQkJaWYgKGZpbGVfZXh0ICE9ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJCQlEQkcoImNvbXBsZXRpbmcgY2FsbCBiYWNrLlxuIik7CisJCQkJX2hlY2lfY21wbChmaWxlX2V4dCwgY2JfcG9zKTsKKwkJCQljYl9wb3MgPSBOVUxMOworCQkJfSBlbHNlIGlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCQkJX2hlY2lfY21wbF9pYW10aGlmKGRldiwgY2JfcG9zKTsKKwkJCX0KKwkJfQorCX0KK30KKworCisvKioKKyAqIGhlY2lfYmhfcmVhZF9oYW5kbGVyIC0gYm90dG9tIGhhbGYgcmVhZCByb3V0aW5lIGFmdGVyIElTUiB0bworICogaGFuZGxlIHRoZSByZWFkIHByb2Nlc3NpbmcuCisgKgorICogQGNtcGxfbGlzdDogQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAc2xvdHM6IHNsb3RzIHRvIHJlYWQuCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9iaF9yZWFkX2hhbmRsZXIoc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlfX3MzMiAqc2xvdHMpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCisJaWYgKCFkZXYtPnJkX21zZ19oZHIpIHsKKwkJZGV2LT5yZF9tc2dfaGRyID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ0JfUlcpOworCQlEQkcoInNsb3RzPSUwOHguXG4iLCAqc2xvdHMpOworCQkoKnNsb3RzKS0tOworCQlEQkcoInNsb3RzPSUwOHguXG4iLCAqc2xvdHMpOworCX0KKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPnJkX21zZ19oZHI7CisJREJHKCJoZWNpX2hkci0+bGVuZ3RoID0lZFxuIiwgaGVjaV9oZHItPmxlbmd0aCk7CisKKwlpZiAoKGhlY2lfaGRyLT5yZXNlcnZlZCkgfHwgIShkZXYtPnJkX21zZ19oZHIpKSB7CisJCURCRygiY29ycnVwdGVkIG1lc3NhZ2UgaGVhZGVyLlxuIik7CisJCXJldCA9IC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAoKGhlY2lfaGRyLT5ob3N0X2FkZHIpIHx8IChoZWNpX2hkci0+bWVfYWRkcikpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLCBmaWxlX25leHQsCisJCQkJJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCQlEQkcoImxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSByZWFkIGhvc3QiCisJCQkJCSIgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCQkJCQlmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQsCisJCQkJCWZpbGVfcG9zLT5tZV9jbGllbnRfaWQpOworCQkJaWYgKChmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQgPT0gaGVjaV9oZHItPmhvc3RfYWRkcikKKwkJCSAgICAmJiAoZmlsZV9wb3MtPm1lX2NsaWVudF9pZCA9PSBoZWNpX2hkci0+bWVfYWRkcikpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoJmZpbGVfcG9zLT5saW5rID09ICZkZXYtPmZpbGVfbGlzdCkgeworCQkJREJHKCJjb3JydXB0ZWQgbWVzc2FnZSBoZWFkZXJcbiIpOworCQkJcmV0ID0gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKwlpZiAoKCgqc2xvdHMpICogc2l6ZW9mKF9fdTMyKSkgPCBoZWNpX2hkci0+bGVuZ3RoKSB7CisJCURCRygid2UgY2FuJ3QgcmVhZCB0aGUgbWVzc2FnZSBzbG90cz0lMDh4LlxuIiwgKnNsb3RzKTsKKwkJLyogd2UgY2FuJ3QgcmVhZCB0aGUgbWVzc2FnZSAqLworCQlyZXQgPSAtRVJBTkdFOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBkZWNpZGUgd2hlcmUgdG8gcmVhZCB0aGUgbWVzc2FnZSB0b28gKi8KKwlpZiAoIWhlY2lfaGRyLT5ob3N0X2FkZHIpIHsKKwkJREJHKCJjYWxsIGhlY2lfYmhfcmVhZF9idXNfbWVzc2FnZS5cbiIpOworCQloZWNpX2JoX3JlYWRfYnVzX21lc3NhZ2UoZGV2LCBoZWNpX2hkcik7CisJCURCRygiZW5kIGhlY2lfYmhfcmVhZF9idXNfbWVzc2FnZS5cbiIpOworCX0gZWxzZSBpZiAoKGhlY2lfaGRyLT5ob3N0X2FkZHIgPT0gZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lmhvc3RfY2xpZW50X2lkKQorCQkgICAmJiAoSEVDSV9GSUxFX0NPTk5FQ1RFRCA9PSBkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUpCisJCSAgICYmIChkZXYtPmlhbXRoaWZfc3RhdGUgPT0gSEVDSV9JQU1USElGX1JFQURJTkcpKSB7CisJCURCRygiY2FsbCBoZWNpX2JoX3JlYWRfaWFtdGhpZl9tZXNzYWdlLlxuIik7CisJCURCRygiaGVjaV9oZHItPmxlbmd0aCA9JWRcbiIsIGhlY2lfaGRyLT5sZW5ndGgpOworCQlyZXQgPSBoZWNpX2JoX3JlYWRfcHRoaV9tZXNzYWdlKGNtcGxfbGlzdCwgZGV2LCBoZWNpX2hkcik7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gZW5kOworCisJfSBlbHNlIHsKKwkJREJHKCJjYWxsIGhlY2lfYmhfcmVhZF9jbGllbnRfbWVzc2FnZS5cbiIpOworCQlyZXQgPSBoZWNpX2JoX3JlYWRfY2xpZW50X21lc3NhZ2UoY21wbF9saXN0LCBkZXYsIGhlY2lfaGRyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBlbmQ7CisKKwl9CisKKwkvKiByZXNldCB0aGUgbnVtYmVyIG9mIHNsb3RzIGFuZCBoZWFkZXIgKi8KKwkqc2xvdHMgPSBjb3VudF9mdWxsX3JlYWRfc2xvdHMoZGV2KTsKKwlkZXYtPnJkX21zZ19oZHIgPSAwOworCisJaWYgKCpzbG90cyA9PSAtRVNMT1RTX09WRVJGTE9XKSB7CisJCS8qIG92ZXJmbG93IC0gcmVzZXQgKi8KKwkJREJHKCJyZXNldGluZyBkdWUgdG8gc2xvdHMgb3ZlcmZsb3cuXG4iKTsKKwkJLyogc2V0IHRoZSBldmVudCBzaW5jZSBtZXNzYWdlIGhhcyBiZWVuIHJlYWQgKi8KKwkJcmV0ID0gLUVSQU5HRTsKKwkJZ290byBlbmQ7CisJfQorZW5kOgorCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBoZWNpX2JoX3JlYWRfYnVzX21lc3NhZ2UgLSBib3R0b20gaGFsZiByZWFkIHJvdXRpbmUgYWZ0ZXIgSVNSIHRvCisgKiBoYW5kbGUgdGhlIHJlYWQgYnVzIG1lc3NhZ2UgY21kICBwcm9jZXNzaW5nLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBoZWNpX2hkcjogaGVhZGVyIG9mIGJ1cyBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfYmhfcmVhZF9idXNfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcikKK3sKKwlzdHJ1Y3QgaGVjaV9idXNfbWVzc2FnZSAqaGVjaV9tc2c7CisJc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVzcG9uc2UgKnZlcnNpb25fcmVzOworCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKmNvbm5lY3RfcmVzOworCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKmRpc2Nvbm5lY3RfcmVzOworCXN0cnVjdCBoYm1fZmxvd19jb250cm9sICpmbG93X2NvbnRyb2w7CisJc3RydWN0IGhibV9wcm9wc19yZXNwb25zZSAqcHJvcHNfcmVzOworCXN0cnVjdCBoYm1faG9zdF9lbnVtX3Jlc3BvbnNlICplbnVtX3JlczsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKmRpc2Nvbm5lY3RfcmVxOworCXN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QgKmhfc3RvcF9yZXE7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJLyogIHJlYWQgdGhlIG1lc3NhZ2UgdG8gb3VyIGJ1ZmZlciAqLworCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGRldi0+cmRfbXNnX2J1ZjsKKwlCVUdfT04oaGVjaV9oZHItPmxlbmd0aCA+PSBzaXplb2YoZGV2LT5yZF9tc2dfYnVmKSk7CisJaGVjaV9yZWFkX3Nsb3RzKGRldiwgYnVmZmVyLCBoZWNpX2hkci0+bGVuZ3RoKTsKKwloZWNpX21zZyA9IChzdHJ1Y3QgaGVjaV9idXNfbWVzc2FnZSAqKSBidWZmZXI7CisKKwlzd2l0Y2ggKCooX191OCAqKSBoZWNpX21zZykgeworCWNhc2UgSE9TVF9TVEFSVF9SRVNfQ01EOgorCQl2ZXJzaW9uX3JlcyA9IChzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXNwb25zZSAqKSBoZWNpX21zZzsKKwkJaWYgKHZlcnNpb25fcmVzLT5ob3N0X3ZlcnNpb25fc3VwcG9ydGVkKSB7CisJCQlkZXYtPnZlcnNpb24ubWFqb3JfdmVyc2lvbiA9IEhCTV9NQUpPUl9WRVJTSU9OOworCQkJZGV2LT52ZXJzaW9uLm1pbm9yX3ZlcnNpb24gPSBIQk1fTUlOT1JfVkVSU0lPTjsKKwkJfSBlbHNlIHsKKwkJCWRldi0+dmVyc2lvbiA9IHZlcnNpb25fcmVzLT5tZV9tYXhfdmVyc2lvbjsKKwkJfQorCQlkZXYtPnJlY3ZkX21zZyA9IDE7CisJCURCRygiaG9zdCBzdGFydCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCWJyZWFrOworCisJY2FzZSBDTElFTlRfQ09OTkVDVF9SRVNfQ01EOgorCQljb25uZWN0X3JlcyA9CisJCQkoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqKSBoZWNpX21zZzsKKwkJaGVjaV9jbGllbnRfY29ubmVjdF9yZXNwb25zZShkZXYsIGNvbm5lY3RfcmVzKTsKKwkJREJHKCJjbGllbnQgY29ubmVjdCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCXdha2VfdXAoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQlicmVhazsKKworCWNhc2UgQ0xJRU5UX0RJU0NPTk5FQ1RfUkVTX0NNRDoKKwkJZGlzY29ubmVjdF9yZXMgPQorCQkJKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKikgaGVjaV9tc2c7CisJCWhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVzcG9uc2UoZGV2LAkgZGlzY29ubmVjdF9yZXMpOworCQlEQkcoImNsaWVudCBkaXNjb25uZWN0IHJlc3BvbnNlIG1lc3NhZ2UgcmVjZWl2ZWQuXG4iKTsKKwkJd2FrZV91cCgmZGV2LT53YWl0X3JlY3ZkX21zZyk7CisJCWJyZWFrOworCisJY2FzZSBIRUNJX0ZMT1dfQ09OVFJPTF9DTUQ6CisJCWZsb3dfY29udHJvbCA9IChzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqKSBoZWNpX21zZzsKKwkJaGVjaV9jbGllbnRfZmxvd19jb250cm9sX3Jlc3BvbnNlKGRldiwgZmxvd19jb250cm9sKTsKKwkJREJHKCJjbGllbnQgZmxvdyBjb250cm9sIHJlc3BvbnNlIG1lc3NhZ2UgcmVjZWl2ZWQuXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEhPU1RfQ0xJRU5UX1BST1BFUlRFSVNfUkVTX0NNRDoKKwkJcHJvcHNfcmVzID0gKHN0cnVjdCBoYm1fcHJvcHNfcmVzcG9uc2UgKikgaGVjaV9tc2c7CisJCWlmIChwcm9wc19yZXMtPnN0YXR1cyAhPSAwKSB7CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJCQkJcHJvcHNfcmVzLT5hZGRyZXNzKSB7CisJCQkJZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzID0KKwkJCQkJcHJvcHNfcmVzLT5jbGllbnRfcHJvcGVydGllczsKKwkJCQlicmVhazsKKwkJCX0KKworCQl9CisJCWRldi0+cmVjdmRfbXNnID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIEhPU1RfRU5VTV9SRVNfQ01EOgorCQllbnVtX3JlcyA9IChzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXNwb25zZSAqKSBoZWNpX21zZzsKKwkJbWVtY3B5KGRldi0+aGVjaV9tZV9jbGllbnRzLCBlbnVtX3Jlcy0+dmFsaWRfYWRkcmVzc2VzLCAzMik7CisJCWRldi0+cmVjdmRfbXNnID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIEhPU1RfU1RPUF9SRVNfQ01EOgorCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQlEQkcoInJlc2V0aW5nIGJlY2F1c2Ugb2YgRlcgc3RvcCByZXNwb25zZS5cbiIpOworCQloZWNpX3Jlc2V0KGRldiwgMSk7CisJCWJyZWFrOworCisJY2FzZSBDTElFTlRfRElTQ09OTkVDVF9SRVFfQ01EOgorCQkvKiBzZWFyY2ggZm9yIGNsaWVudCAqLworCQlkaXNjb25uZWN0X3JlcSA9CisJCQkoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICopIGhlY2lfbXNnOworCQloZWNpX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QoZGV2LCBkaXNjb25uZWN0X3JlcSk7CisJCWJyZWFrOworCisJY2FzZSBNRV9TVE9QX1JFUV9DTUQ6CisJCS8qIHByZXBhcmUgc3RvcCByZXF1ZXN0ICovCisJCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+ZXh0X21zZ19idWZbMF07CisJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCQloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCk7CisJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCQloX3N0b3BfcmVxID0KKwkJCShzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0ICopICZkZXYtPmV4dF9tc2dfYnVmWzFdOworCQltZW1zZXQoaF9zdG9wX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QpKTsKKwkJaF9zdG9wX3JlcS0+Y21kLmNtZCA9IEhPU1RfU1RPUF9SRVFfQ01EOworCQloX3N0b3BfcmVxLT5yZWFzb24gPSBEUklWRVJfU1RPUF9SRVFVRVNUOworCQloX3N0b3BfcmVxLT5yZXNlcnZlZFswXSA9IDA7CisJCWhfc3RvcF9yZXEtPnJlc2VydmVkWzFdID0gMDsKKwkJZGV2LT5leHRyYV93cml0ZV9pbmRleCA9IDI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCisJfQorfQorCisvKioKKyAqIGhlY2lfYmhfcmVhZF9wdGhpX21lc3NhZ2UgLSBib3R0b20gaGFsZiByZWFkIHJvdXRpbmUgYWZ0ZXIgSVNSIHRvCisgKiBoYW5kbGUgdGhlIHJlYWQgcHRoaSBtZXNzYWdlIGRhdGEgcHJvY2Vzc2luZy4KKyAqCisgKiBAY29tcGxldGVfbGlzdDogQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaGVjaV9oZHI6IGhlYWRlciBvZiBwdGhpIG1lc3NhZ2UKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX2JoX3JlYWRfcHRoaV9tZXNzYWdlKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNvbXBsZXRlX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwlCVUdfT04oaGVjaV9oZHItPm1lX2FkZHIgIT0gZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZCk7CisJQlVHX09OKGRldi0+aWFtdGhpZl9zdGF0ZSAhPSBIRUNJX0lBTVRISUZfUkVBRElORyk7CisKKwlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSAoZGV2LT5pYW10aGlmX21zZ19idWYgKworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXgpOworCUJVR19PTihzaXplb2YoZGV2LT5pYW10aGlmX21zZ19idWYpIDwKKwkJCShkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArIGhlY2lfaGRyLT5sZW5ndGgpKTsKKworCWhlY2lfcmVhZF9zbG90cyhkZXYsIGJ1ZmZlciwgaGVjaV9oZHItPmxlbmd0aCk7CisKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBoZWNpX2hkci0+bGVuZ3RoOworCisJaWYgKCEoaGVjaV9oZHItPm1zZ19jb21wbGV0ZSkpCisJCXJldHVybiAwOworCisJREJHKCJwdGhpX21lc3NhZ2VfYnVmZmVyX2luZGV4PSVkXG4iLCBoZWNpX2hkci0+bGVuZ3RoKTsKKwlEQkcoImNvbXBsZXRlZCBwdGhpIHJlYWQuXG4gIik7CisJaWYgKCFkZXYtPmlhbXRoaWZfY3VycmVudF9jYikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcml2X2NiID0gZGV2LT5pYW10aGlmX2N1cnJlbnRfY2I7CisJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCisJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopcHJpdl9jYi0+ZmlsZV9wcml2YXRlOworCWlmICghZmlsZV9leHQpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyID0gMDsKKwlwcml2X2NiLT5pbmZvcm1hdGlvbiA9CWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4OworCXByaXZfY2ItPnJlYWRfdGltZSA9IGdldF9zZWNvbmRzKCk7CisJaWYgKChkZXYtPmlhbXRoaWZfaW9jdGwpICYmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSkgeworCQkvKiBmb3VuZCB0aGUgaWFtdGhpZiBjYiAqLworCQlEQkcoImNvbXBsZXRlIHRoZSBwdGhpIHJlYWQgY2IuXG4gIik7CisJCWlmICgmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCQlEQkcoImFkZCB0aGUgcHRoaSByZWFkIGNiIHRvIGNvbXBsZXRlLlxuICIpOworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmY29tcGxldGVfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfaGVjaV9iaF9zdGF0ZV9vayAtIGNoZWNrIGlmIGhlY2kgaGVhZGVyIG1hdGNoZXMgZmlsZSBwcml2YXRlIGRhdGEKKyAqCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqIEBoZWNpX2hkcjogaGVhZGVyIG9mIGhlY2kgY2xpZW50IG1lc3NhZ2UKKyAqCisgKiByZXR1cm5zICAhPTAgaWYgbWF0Y2hlcywgMCBpZiBubyBtYXRjaC4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9zdGF0ZV9vayhzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcikKK3sKKwlyZXR1cm4gKChmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgPT0gaGVjaV9oZHItPmhvc3RfYWRkcikKKwkJJiYgKGZpbGVfZXh0LT5tZV9jbGllbnRfaWQgPT0gaGVjaV9oZHItPm1lX2FkZHIpCisJCSYmIChmaWxlX2V4dC0+c3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkKKwkJJiYgKEhFQ0lfUkVBRF9DT01QTEVURSAhPSBmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSkpOworfQorCisvKioKKyAqIGhlY2lfYmhfcmVhZF9jbGllbnRfbWVzc2FnZSAtIGJvdHRvbSBoYWxmIHJlYWQgcm91dGluZSBhZnRlciBJU1IgdG8KKyAqIGhhbmRsZSB0aGUgcmVhZCBoZWNpIGNsaWVudCBtZXNzYWdlIGRhdGEgIHByb2Nlc3NpbmcuCisgKgorICogQGNvbXBsZXRlX2xpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGhlY2lfaGRyOiBoZWFkZXIgb2YgaGVjaSBjbGllbnQgbWVzc2FnZQorICoKKyAqIHJldHVybnMgIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX2JoX3JlYWRfY2xpZW50X21lc3NhZ2Uoc3RydWN0IGlvX2hlY2lfbGlzdCAqY29tcGxldGVfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEwsICpwcml2X2NiX25leHQgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisKKwlEQkcoInN0YXJ0IGNsaWVudCBtc2dcbiIpOworCWlmICghKChkZXYtPnJlYWRfbGlzdC5zdGF0dXMgPT0gMCkgJiYKKwkgICAgICAhbGlzdF9lbXB0eSgmZGV2LT5yZWFkX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkpCisJCWdvdG8gcXVpdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJJmRldi0+cmVhZF9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQlpZiAoKGZpbGVfZXh0ICE9IE5VTEwpICYmCisJCSAgICAoX2hlY2lfYmhfc3RhdGVfb2soZmlsZV9leHQsIGhlY2lfaGRyKSkpIHsKKwkJCXNwaW5fbG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCQlmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9IEhFQ0lfUkVBRElORzsKKwkJCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopCisJCQkJKHByaXZfY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuZGF0YSArCisJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKTsKKwkJCUJVR19PTihwcml2X2NiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLnNpemUgPAorCQkJCQloZWNpX2hkci0+bGVuZ3RoICsKKwkJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKTsKKworCQkJaWYgKHByaXZfY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA8CisJCQkJCWhlY2lfaGRyLT5sZW5ndGggKworCQkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pIHsKKwkJCQlEQkcoIm1lc3NhZ2Ugb3ZlcmZsb3cuXG4iKTsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWlmIChidWZmZXIpIHsKKwkJCQloZWNpX3JlYWRfc2xvdHMoZGV2LCBidWZmZXIsCisJCQkJCQloZWNpX2hkci0+bGVuZ3RoKTsKKwkJCX0KKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiArPSBoZWNpX2hkci0+bGVuZ3RoOworCQkJaWYgKGhlY2lfaGRyLT5tc2dfY29tcGxldGUpIHsKKwkJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJCQlEQkcoImNvbXBsZXRlZCByZWFkIGhvc3QgY2xpZW50ID0gJWQsIgorCQkJCQkiTUUgY2xpZW50ID0gJWQsICIKKwkJCQkJImRhdGEgbGVuZ3RoID0gJWx1XG4iLAorCQkJCQlmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsCisJCQkJCWZpbGVfZXh0LT5tZV9jbGllbnRfaWQsCisJCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbik7CisKKwkJCQkqKHByaXZfY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuZGF0YSArCisJCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbikgPSAnXDAnOworCQkJCURCRygicHJpdl9jYl9wb3MtPnJlc19idWZmZXIgLSAlc1xuIiwKKwkJCQkJcHJpdl9jYl9wb3MtPnJlc3BvbnNlX2J1ZmZlci5kYXRhKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJJmNvbXBsZXRlX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKworCX0KKworcXVpdDoKKwlEQkcoIm1lc3NhZ2UgcmVhZFxuIik7CisJaWYgKCFidWZmZXIpIHsKKwkJaGVjaV9yZWFkX3Nsb3RzKGRldiwgKHVuc2lnbmVkIGNoYXIgKikgZGV2LT5yZF9tc2dfYnVmLAorCQkJCQkJaGVjaV9oZHItPmxlbmd0aCk7CisJCURCRygiZGlzY2FyZGluZyBtZXNzYWdlLCBoZWFkZXI9JTA4eC5cbiIsCisJCQkJKihfX3UzMiAqKSBkZXYtPnJkX21zZ19idWYpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9oZWNpX2JoX2lhbXRoaWZfcmVhZCAtIHByZXBhcmUgdG8gcmVhZCBpYW10aGlmIGRhdGEuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqCisgKiByZXR1cm5zICAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9pYW10aGlmX3JlYWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwJX19zMzIgKnNsb3RzKQoreworCisJaWYgKCgoKnNsb3RzKSAqIHNpemVvZihfX3UzMikpID49IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikKKwkJCSsgc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSkpIHsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkgKyAzKSAvIDQ7CisJCWlmICghaGVjaV9zZW5kX2Zsb3dfY29udHJvbChkZXYsICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpKSB7CisJCQlEQkcoImlhbXRoaWYgZmxvdyBjb250cm9sIGZhaWxlZFxuIik7CisJCX0gZWxzZSB7CisJCQlEQkcoImlhbXRoaWYgZmxvdyBjb250cm9sIHN1Y2Nlc3NcbiIpOworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX1JFQURJTkc7CisJCQlkZXYtPmlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmcgPSAwOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggPSAwOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IDA7CisJCQlkZXYtPmlhbXRoaWZfc3RhbGxfdGltZXIgPSBJQU1USElGX1NUQUxMX1RJTUVSOworCQkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IGhvc3RfYnVmZmVyX2lzX2VtcHR5KGRldik7CisJCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FQ09NUExFVEVfTUVTU0FHRTsKKwl9Cit9CisKKy8qKgorICogX2hlY2lfYmhfY2xvc2UgLSBwcm9jZXNzIGNsb3NlIHJlbGF0ZWQgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGNtcGxfbGlzdDogY29tcGxldGUgbGlzdC4KKyAqCisgKiByZXR1cm5zICAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9jbG9zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAlfX3MzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcywKKwkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQlzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QpCit7CisJaWYgKCgqc2xvdHMgKiBzaXplb2YoX191MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpKSkgeworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KSArIDMpIC8gNDsKKworCQlpZiAoIWhlY2lfZGlzY29ubmVjdChkZXYsIGZpbGVfZXh0KSkgeworCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gPSAwOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmY21wbF9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQkJcmV0dXJuIC1FQ09NUExFVEVfTUVTU0FHRTsKKwkJfSBlbHNlIHsKKwkJCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HOworCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gPSAwOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJCWZpbGVfZXh0LT50aW1lcl9jb3VudCA9IEhFQ0lfQ09OTkVDVF9USU1FT1VUOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmV0dXJuIHRoZSBjYW5jZWwgcm91dGluZSAqLworCQlyZXR1cm4gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2hlY2lfaGJfY2xvc2UgLSBwcm9jZXNzIHJlYWQgcmVsYXRlZCBvcGVyYXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY21wbF9saXN0OiBjb21wbGV0ZSBsaXN0LgorICoKKyAqIHJldHVybnMgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfcmVhZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAlfX3MzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcywKKwkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQlzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QpCit7CisJaWYgKCgqc2xvdHMgKiBzaXplb2YoX191MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkpKSB7CisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkgKyAzKSAvIDQ7CisJCWlmICghaGVjaV9zZW5kX2Zsb3dfY29udHJvbChkZXYsIGZpbGVfZXh0KSkgeworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gPSAwOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmY21wbF9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJCSZkZXYtPnJlYWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmV0dXJuIHRoZSBjYW5jZWwgcm91dGluZSAqLworCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQlyZXR1cm4gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBfaGVjaV9iaF9pb2N0bCAtIHByb2Nlc3MgaW9jdGwgcmVsYXRlZCBvcGVyYXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY21wbF9saXN0OiBjb21wbGV0ZSBsaXN0LgorICoKKyAqIHJldHVybnMgIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX2lvY3RsKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCV9fczMyICpzbG90cywKKwkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zLAorCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCXN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCkKK3sKKwlpZiAoKCpzbG90cyAqIHNpemVvZihfX3UzMikpID49IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCkpKSB7CisJCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9DT05ORUNUSU5HOworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0KSArIDMpIC8gNDsKKwkJaWYgKCFoZWNpX2Nvbm5lY3QoZGV2LCBmaWxlX2V4dCkpIHsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uID0gMDsKKwkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJCWZpbGVfZXh0LT50aW1lcl9jb3VudCA9IEhFQ0lfQ09OTkVDVF9USU1FT1VUOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmV0dXJuIHRoZSBjYW5jZWwgcm91dGluZSAqLworCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQlyZXR1cm4gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2hlY2lfYmhfY21wbCAtIHByb2Nlc3MgY29tcGxldGVkIGFuZCBuby1pYW10aGlmIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfY21wbChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAlfX3MzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcywKKwkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQlzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisKKwlpZiAoKCpzbG90cyAqIHNpemVvZihfX3UzMikpID49IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJKHByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplIC0KKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbikpKSB7CisJCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkJaGVjaV9oZHItPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCQloZWNpX2hkci0+bGVuZ3RoID0gKChwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSkgLQorCQkJCShwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pKTsKKwkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisJCURCRygicHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLnNpemUgPSVkIgorCQkJImhlY2lfaGRyLT5tc2dfY29tcGxldGU9ICVkXG4iLAorCQkJCXByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplLAorCQkJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUpOworCQlEQkcoInByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiAgPSVsdVxuIiwKKwkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pOworCQlEQkcoImhlY2lfaGRyLT5sZW5ndGggID0lZFxuIiwKKwkJCQloZWNpX2hkci0+bGVuZ3RoKTsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCWhlY2lfaGRyLT5sZW5ndGggKyAzKSAvIDQ7CisJCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkocHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLmRhdGEgKworCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiksCisJCQkJaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCSZjbXBsX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCBmaWxlX2V4dCk7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiArPSBoZWNpX2hkci0+bGVuZ3RoOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCSZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9CisJfSBlbHNlIGlmICgqc2xvdHMgPT0gKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpKSB7CisJCS8qIGJ1ZmZlciBpcyBzdGlsbCBlbXB0eSAqLworCQloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPmxlbmd0aCA9CisJCQkoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgLSBzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcik7CisJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAwOworCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJCSgqc2xvdHMpIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCWhlY2lfaGRyLT5sZW5ndGggKyAzKSAvIDQ7CisJCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJCSh1bnNpZ25lZCBjaGFyICopCisJCQkJCShwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuZGF0YSArCisJCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiksCisJCQkJCWhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmY21wbF9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gKz0gaGVjaV9oZHItPmxlbmd0aDsKKwkJCURCRygicHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLnNpemUgPSVkIgorCQkJCQkiIGhlY2lfaGRyLT5tc2dfY29tcGxldGU9ICVkXG4iLAorCQkJCQlwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSwKKwkJCQkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSk7CisJCQlEQkcoInByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiAgPSVsdVxuIiwKKwkJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKTsKKwkJCURCRygiaGVjaV9oZHItPmxlbmd0aCAgPSVkXG4iLCBoZWNpX2hkci0+bGVuZ3RoKTsKKwkJfQorCQlyZXR1cm4gLUVDT01QTEVURV9NRVNTQUdFOworCX0gZWxzZSB7CisJCXJldHVybiAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfaGVjaV9iaF9jbXBsX2lhbXRoaWYgLSBwcm9jZXNzIGNvbXBsZXRlZCBpYW10aGlmIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfY21wbF9pYW10aGlmKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIF9fczMyICpzbG90cywKKwkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zLAorCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCXN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKworCWlmICgoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplIC0KKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4KSkgeworCQloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPmxlbmd0aCA9IGRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgLQorCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXg7CisJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQloZWNpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCisJCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJCShkZXYtPmlhbXRoaWZfbXNnX2J1ZiArCisJCQkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4KSwKKwkJCQkJaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgZmlsZV9leHQpOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggKz0gaGVjaV9oZHItPmxlbmd0aDsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiA9IGRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4OworCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfRkxPV19DT05UUk9MOworCQkJZGV2LT5pYW10aGlmX2Zsb3dfY29udHJvbF9wZW5kaW5nID0gMTsKKwkJCS8qIHNhdmUgaWFtdGhpZiBjYiBzZW50IHRvIHB0aGkgY2xpZW50ICovCisJCQlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IHByaXZfY2JfcG9zOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCSZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCisJCX0KKwl9IGVsc2UgaWYgKCpzbG90cyA9PSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkpIHsKKwkJCS8qIGJ1ZmZlciBpcyBzdGlsbCBlbXB0eSAqLworCQloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPmxlbmd0aCA9CisJCQkoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgLSBzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcik7CisJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAwOworCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQloZWNpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCisJCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJCShkZXYtPmlhbXRoaWZfbXNnX2J1ZiArCisJCQkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4KSwKKwkJCQkJaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ICs9IGhlY2lfaGRyLT5sZW5ndGg7CisJCX0KKwkJcmV0dXJuIC1FQ09NUExFVEVfTUVTU0FHRTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV9iaF93cml0ZV9oYW5kbGVyIC0gYm90dG9tIGhhbGYgd3JpdGUgcm91dGluZSBhZnRlcgorICogSVNSIHRvIGhhbmRsZSB0aGUgd3JpdGUgcHJvY2Vzc2luZy4KKyAqCisgKiBAY21wbF9saXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBzbG90czogc2xvdHMgdG8gd3JpdGUuCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9iaF93cml0ZV9oYW5kbGVyKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJX19zMzIgKnNsb3RzKQoreworCisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEwsICpwcml2X2NiX25leHQgPSBOVUxMOworCXN0cnVjdCBpb19oZWNpX2xpc3QgKmxpc3Q7CisJaW50IHJldDsKKworCWlmICghaG9zdF9idWZmZXJfaXNfZW1wdHkoZGV2KSkgeworCQlEQkcoImhvc3QgYnVmZmVyIGlzIG5vdCBlbXB0eS5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJZGV2LT53cml0ZV9oYW5nID0gLTE7CisJKnNsb3RzID0gY291bnRfZW1wdHlfd3JpdGVfc2xvdHMoZGV2KTsKKwkvKiBjb21wbGV0ZSBhbGwgd2FpdGluZyBmb3Igd3JpdGUgQ0IgKi8KKwlEQkcoImNvbXBsZXRlIGFsbCB3YWl0aW5nIGZvciB3cml0ZSBjYi5cbiIpOworCisJbGlzdCA9ICZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdDsKKwlpZiAoKGxpc3QtPnN0YXR1cyA9PSAwKQorCSAgICAmJiAhbGlzdF9lbXB0eSgmbGlzdC0+aGVjaV9jYi5jYl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkmbGlzdC0+aGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmIChmaWxlX2V4dCAhPSBOVUxMKSB7CisJCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlpZiAoKEhFQ0lfV1JJVElORyA9PSBmaWxlX2V4dC0+d3JpdGluZ19zdGF0ZSkgJiYKKwkJCQkJKHByaXZfY2JfcG9zLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPT0KKwkJCQkJCUhFQ0lfV1JJVElORykgJiYKKwkJCQkJKGZpbGVfZXh0ICE9ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpKSB7CisJCQkJCURCRygiSEVDSSBXUklURSBDT01QTEVURVxuIik7CisJCQkJCWZpbGVfZXh0LT53cml0aW5nX3N0YXRlID0KKwkJCQkJCUhFQ0lfV1JJVEVfQ09NUExFVEU7CisJCQkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCQkJJmNtcGxfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJCQl9CisJCQkJaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJCQkJREJHKCJjaGVjayBpYW10aGlmIGZsb3cgY29udHJvbC5cbiIpOworCQkJCQlpZiAoZGV2LT5pYW10aGlmX2Zsb3dfY29udHJvbF9wZW5kaW5nKSB7CisJCQkJCQlyZXQgPSBfaGVjaV9iaF9pYW10aGlmX3JlYWQoZGV2LAorCQkJCQkJCQkJc2xvdHMpOworCQkJCQkJaWYgKHJldCAhPSAwKQorCQkJCQkJCXJldHVybiByZXQ7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKworCWlmICgoZGV2LT5zdG9wKSAmJiAoIWRldi0+d2RfcGVuZGluZykpIHsKKwkJZGV2LT53ZF9zdG9wZWQgPSAxOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9zdG9wX3dkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRldi0+ZXh0cmFfd3JpdGVfaW5kZXggIT0gMCkgeworCQlEQkcoImV4dHJhX3dyaXRlX2luZGV4ID0lZC5cbiIsCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXgpOworCQloZWNpX3dyaXRlX21lc3NhZ2UoZGV2LAorCQkJCShzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPmV4dF9tc2dfYnVmWzBdLAorCQkJCSh1bnNpZ25lZCBjaGFyICopICZkZXYtPmV4dF9tc2dfYnVmWzFdLAorCQkJCShkZXYtPmV4dHJhX3dyaXRlX2luZGV4IC0gMSkgKiBzaXplb2YoX191MzIpKTsKKwkJKnNsb3RzIC09IGRldi0+ZXh0cmFfd3JpdGVfaW5kZXg7CisJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXggPSAwOworCX0KKwlpZiAoZGV2LT5oZWNpX3N0YXRlID09IEhFQ0lfRU5BQkxFRCkgeworCQlpZiAoKGRldi0+d2RfcGVuZGluZykKKwkJICAgICYmIGZsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPndkX2ZpbGVfZXh0KSkgeworCQkJaWYgKCFoZWNpX3NlbmRfd2QoZGV2KSkKKwkJCQlEQkcoIndkIHNlbmQgZmFpbGVkLlxuIik7CisJCQllbHNlCisJCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsICZkZXYtPndkX2ZpbGVfZXh0KTsKKworCQkJZGV2LT53ZF9wZW5kaW5nID0gMDsKKworCQkJaWYgKGRldi0+d2RfdGltZW91dCAhPSAwKSB7CisJCQkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCQkgSEVDSV9TVEFSVF9XRF9EQVRBX1NJWkUgKyAzKSAvIDQ7CisJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDI7CisJCQl9IGVsc2UgeworCQkJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQkJIEhFQ0lfV0RfUEFSQU1TX1NJWkUgKyAzKSAvIDQ7CisJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCQl9CisKKwkJfQorCX0KKwlpZiAoZGV2LT5zdG9wKQorCQlyZXR1cm4gfkVOT0RFVjsKKworCS8qIGNvbXBsZXRlIGNvbnRyb2wgd3JpdGUgbGlzdCBDQiAqLworCWlmIChkZXYtPmN0cmxfd3JfbGlzdC5zdGF0dXMgPT0gMCkgeworCQkvKiBjb21wbGV0ZSBjb250cm9sIHdyaXRlIGxpc3QgQ0IgKi8KKwkJREJHKCJjb21wbGV0ZSBjb250cm9sIHdyaXRlIGxpc3QgY2IuXG4iKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJJmRldi0+Y3RybF93cl9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmIChmaWxlX2V4dCA9PSBOVUxMKSB7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJCXN3aXRjaCAocHJpdl9jYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucykgeworCQkJY2FzZSBIRUNJX0NMT1NFOgorCQkJCS8qIHNlbmQgZGlzY29ubmVjdCBtZXNzYWdlICovCisJCQkJcmV0ID0gX2hlY2lfYmhfY2xvc2UoZGV2LCBzbG90cywKKwkJCQkJCSAgICAgcHJpdl9jYl9wb3MsCisJCQkJCQkgICAgIGZpbGVfZXh0LCBjbXBsX2xpc3QpOworCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJcmV0dXJuIHJldDsKKworCQkJCWJyZWFrOworCQkJY2FzZSBIRUNJX1JFQUQ6CisJCQkJLyogc2VuZCBmbG93IGNvbnRyb2wgbWVzc2FnZSAqLworCQkJCXJldCA9IF9oZWNpX2JoX3JlYWQoZGV2LCBzbG90cywKKwkJCQkJCSAgICBwcml2X2NiX3BvcywKKwkJCQkJCSAgICBmaWxlX2V4dCwgY21wbF9saXN0KTsKKwkJCQlpZiAocmV0ICE9IDApCisJCQkJCXJldHVybiByZXQ7CisKKwkJCQlicmVhazsKKwkJCWNhc2UgSEVDSV9JT0NUTDoKKwkJCQkvKiBjb25uZWN0IG1lc3NhZ2UgKi8KKwkJCQlpZiAoIW90aGVyX2NsaWVudF9pc19jb25uZWN0aW5nKGRldiwgZmlsZV9leHQpKQorCQkJCQljb250aW51ZTsKKwkJCQlyZXQgPSBfaGVjaV9iaF9pb2N0bChkZXYsIHNsb3RzLAorCQkJCQkJICAgICBwcml2X2NiX3BvcywKKwkJCQkJCSAgICAgZmlsZV9leHQsIGNtcGxfbGlzdCk7CisJCQkJaWYgKHJldCAhPSAwKQorCQkJCQlyZXR1cm4gcmV0OworCisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJQlVHKCk7CisJCQl9CisKKwkJfQorCX0KKwkvKiBjb21wbGV0ZSAgd3JpdGUgbGlzdCBDQiAqLworCWlmICgoZGV2LT53cml0ZV9saXN0LnN0YXR1cyA9PSAwKQorCSAgICAmJiAhbGlzdF9lbXB0eSgmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJREJHKCJjb21wbGV0ZSB3cml0ZSBsaXN0IGNiLlxuIik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKworCQkJaWYgKGZpbGVfZXh0ICE9IE5VTEwpIHsKKwkJCQlpZiAoZmlsZV9leHQgIT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQkJCQlpZiAoIWZsb3dfY3RybF9jcmVkcyhkZXYsIGZpbGVfZXh0KSkgeworCQkJCQkJREJHKCJObyBmbG93IGNvbnRyb2wiCisJCQkJCQkgICAgIiBjcmVkZW50aWFscyBmb3IgY2xpZW50IgorCQkJCQkJICAgICIgJWQsIG5vdCBzZW5kaW5nLlxuIiwKKwkJCQkJCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJcmV0ID0gX2hlY2lfYmhfY21wbChkZXYsIHNsb3RzLAorCQkJCQkJCSAgICBwcml2X2NiX3BvcywKKwkJCQkJCQkgICAgZmlsZV9leHQsCisJCQkJCQkJICAgIGNtcGxfbGlzdCk7CisJCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJCXJldHVybiByZXQ7CisKKwkJCQl9IGVsc2UgaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJCQkJLyogSUFNVEhJRiBJT0NUTCAqLworCQkJCQlEQkcoImNvbXBsZXRlIHB0aGkgd3JpdGUgY2IuXG4iKTsKKwkJCQkJaWYgKCFmbG93X2N0cmxfY3JlZHMoZGV2LCBmaWxlX2V4dCkpIHsKKwkJCQkJCURCRygiTm8gZmxvdyBjb250cm9sIgorCQkJCQkJICAgICIgY3JlZGVudGlhbHMgZm9yIHB0aGkiCisJCQkJCQkgICAgIiBjbGllbnQgJWQuXG4iLAorCQkJCQkJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlyZXQgPSBfaGVjaV9iaF9jbXBsX2lhbXRoaWYoZGV2LCBzbG90cywKKwkJCQkJCQkJICAgcHJpdl9jYl9wb3MsCisJCQkJCQkJCSAgIGZpbGVfZXh0LAorCQkJCQkJCQkgICBjbXBsX2xpc3QpOworCQkJCQlpZiAocmV0ICE9IDApCisJCQkJCQlyZXR1cm4gcmV0OworCisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50ICAtIGNoZWNrIGlmIHRoZSBtZXNzYWdlIGJlbG9uZworICogdG8gdGhlIGZpbGUgcHJpdmF0ZSBkYXRhLgorICoKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICogQHJzOiBjb25uZWN0IHJlc3BvbnNlIGJ1cyBtZXNzYWdlCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaXNfdHJlYXRfc3BlY2lhbGx5X2NsaWVudChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpycykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICgoZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkID09IHJzLT5ob3N0X2FkZHIpICYmCisJICAgIChmaWxlX2V4dC0+bWVfY2xpZW50X2lkID09IHJzLT5tZV9hZGRyKSkgeworCQlpZiAocnMtPnN0YXR1cyA9PSAwKSB7CisJCQlEQkcoImNsaWVudCBjb25uZWN0IHN0YXR1cyA9IDB4JTA4eC5cbiIsIHJzLT5zdGF0dXMpOworCQkJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0NPTk5FQ1RFRDsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJREJHKCJjbGllbnQgY29ubmVjdCBzdGF0dXMgPSAweCUwOHguXG4iLCBycy0+c3RhdHVzKTsKKwkJCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJfQorCQlyZXQgPSAxOworCX0KKwlEQkcoImNsaWVudCBzdGF0ZSA9ICVkLlxuIiwgZmlsZV9leHQtPnN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGhlY2lfY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgIC0gY29ubmVjdCByZXNwb25zZSBiaCByb3V0aW5lCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHJzOiBjb25uZWN0IHJlc3BvbnNlIGJ1cyBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqcnMpCit7CisKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTCwgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisKKwkvKiBpZiBXRCBvciBpYW10aGlmIGNsaWVudCB0cmVhdCBzcGVjaWFsbHkgKi8KKworCWlmICgoaXNfdHJlYXRfc3BlY2lhbGx5X2NsaWVudCgmKGRldi0+d2RfZmlsZV9leHQpLCBycykpIHx8CisJICAgIChpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KCYoZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSwgcnMpKSkKKwkJcmV0dXJuOworCisJaWYgKGRldi0+Y3RybF9yZF9saXN0LnN0YXR1cyA9PSAwCisJICAgICYmICFsaXN0X2VtcHR5KCZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoZmlsZV9leHQgPT0gTlVMTCkgeworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKEhFQ0lfSU9DVEwgPT0gcHJpdl9jYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucykgeworCQkJCWlmIChpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KGZpbGVfZXh0LCBycykpIHsKKwkJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQkJCWZpbGVfZXh0LT50aW1lcl9jb3VudCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBoZWNpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlICAtIGRpc2Nvbm5lY3QgcmVzcG9uc2UgYmggcm91dGluZQorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEByczogZGlzY29ubmVjdCByZXNwb25zZSBidXMgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKnJzKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMLCAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKworCWlmIChkZXYtPmN0cmxfcmRfbGlzdC5zdGF0dXMgPT0gMAorCSAgICAmJiAhbGlzdF9lbXB0eSgmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCisJCQlpZiAoZmlsZV9leHQgPT0gTlVMTCkgeworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlEQkcoImxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSBpbiBjdHJsX3JkX2xpc3QuXG4iKTsKKwkJCWlmICgoZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkID09IHJzLT5ob3N0X2FkZHIpICYmCisJCQkJKGZpbGVfZXh0LT5tZV9jbGllbnRfaWQgPT0gcnMtPm1lX2FkZHIpKSB7CisKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCWlmIChycy0+c3RhdHVzID09IDApIHsKKwkJCQkJZmlsZV9leHQtPnN0YXRlID0KKwkJCQkJICAgIEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJCQkJfQorCisJCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQkJZmlsZV9leHQtPnRpbWVyX2NvdW50ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBzYW1lX2Zsb3dfYWRkciAtIHRlbGwgdGhleSBoYXZlIHNhbWUgYWRkcmVzcy4KKyAqCisgKiBAZmlsZTogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBmbG93OiBmbG93IGNvbnRyb2wuCisgKgorICogcmV0dXJucyAgIT0wLCBzYW1lOyAwLG5vdC4KKyAqLworc3RhdGljIGludCBzYW1lX2Zsb3dfYWRkcihzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGUsCisJCQkJCXN0cnVjdCBoYm1fZmxvd19jb250cm9sICpmbG93KQoreworCXJldHVybiAoKGZpbGUtPmhvc3RfY2xpZW50X2lkID09IGZsb3ctPmhvc3RfYWRkcikKKwkJJiYgKGZpbGUtPm1lX2NsaWVudF9pZCA9PSBmbG93LT5tZV9hZGRyKSk7Cit9CisKKy8qKgorICogYWRkX3NpbmdsZV9mbG93X2NyZWRzIC0gYWRkIHNpbmdsZSBidWZmZXIgY3JlZGVudGlhbHMuCisgKgorICogQGZpbGU6IHByaXZhdGUgZGF0YSBvdCB0aGUgZmlsZSBvYmplY3QuCisgKiBAZmxvdzogZmxvdyBjb250cm9sLgorICovCitzdGF0aWMgdm9pZCBhZGRfc2luZ2xlX2Zsb3dfY3JlZHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBoYm1fZmxvd19jb250cm9sICpmbG93KQoreworCXN0cnVjdCBoZWNpX21lX2NsaWVudCAqY2xpZW50OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWNsaWVudCA9ICZkZXYtPm1lX2NsaWVudHNbaV07CisJCWlmICgoY2xpZW50ICE9IE5VTEwpICYmCisJCSAgICAoZmxvdy0+bWVfYWRkciA9PSBjbGllbnQtPmNsaWVudF9pZCkpIHsKKwkJCWlmIChjbGllbnQtPnByb3BzLnNpbmdsZV9yZWN2X2J1ZiAhPSAwKSB7CisJCQkJY2xpZW50LT5mbG93X2N0cmxfY3JlZHMrKzsKKwkJCQlEQkcoInJlY3YgZmxvdyBjdHJsIG1zZyBNRSAlZCAoc2luZ2xlKS5cbiIsCisJCQkJICAgIGZsb3ctPm1lX2FkZHIpOworCQkJCURCRygiZmxvdyBjb250cm9sIGNyZWRlbnRpYWxzPSVkLlxuIiwKKwkJCQkgICAgY2xpZW50LT5mbG93X2N0cmxfY3JlZHMpOworCQkJfSBlbHNlIHsKKwkJCQlCVUcoKTsJLyogZXJyb3IgaW4gZmxvdyBjb250cm9sICovCisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogaGVjaV9jbGllbnRfZmxvd19jb250cm9sX3Jlc3BvbnNlICAtIGZsb3cgY29udHJvbCByZXNwb25zZSBiaCByb3V0aW5lCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZsb3dfY29udHJvbDogZmxvdyBjb250cm9sIHJlc3BvbnNlIGJ1cyBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Zsb3dfY29udHJvbF9yZXNwb25zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvd19jb250cm9sKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKworCWlmIChmbG93X2NvbnRyb2wtPmhvc3RfYWRkciA9PSAwKSB7CisJCS8qIHNpbmdsZSByZWNlaXZlIGJ1ZmZlciAqLworCQlhZGRfc2luZ2xlX2Zsb3dfY3JlZHMoZGV2LCBmbG93X2NvbnRyb2wpOworCX0gZWxzZSB7CisJCS8qIG5vcm1hbCBjb25uZWN0aW9uICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywgZmlsZV9uZXh0LAorCQkJCSZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQkJREJHKCJsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgaW4gZmlsZV9saXN0XG4iKTsKKworCQkJREJHKCJmaWxlX2V4dCBvZiBob3N0IGNsaWVudCAlZCBNRSBjbGllbnQgJWQuXG4iLAorCQkJICAgIGZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZCwKKwkJCSAgICBmaWxlX3Bvcy0+bWVfY2xpZW50X2lkKTsKKwkJCURCRygiZmxvdyBjdHJsIG1zZyBmb3IgaG9zdCAlZCBNRSAlZC5cbiIsCisJCQkgICAgZmxvd19jb250cm9sLT5ob3N0X2FkZHIsCisJCQkgICAgZmxvd19jb250cm9sLT5tZV9hZGRyKTsKKwkJCWlmIChzYW1lX2Zsb3dfYWRkcihmaWxlX3BvcywgZmxvd19jb250cm9sKSkgeworCQkJCURCRygicmVjdiBjdHJsIG1zZyBmb3IgaG9zdCAgJWQgTUUgJWQuXG4iLAorCQkJCSAgICBmbG93X2NvbnRyb2wtPmhvc3RfYWRkciwKKwkJCQkgICAgZmxvd19jb250cm9sLT5tZV9hZGRyKTsKKwkJCQlmaWxlX3Bvcy0+Zmxvd19jdHJsX2NyZWRzKys7CisJCQkJREJHKCJmbG93IGNvbnRyb2wgY3JlZGVudGlhbHM9JWQuXG4iLAorCQkJCSAgICBmaWxlX3Bvcy0+Zmxvd19jdHJsX2NyZWRzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBzYW1lX2Rpc2Nvbm5fYWRkciAtIHRlbGwgdGhleSBoYXZlIHNhbWUgYWRkcmVzcworICoKKyAqIEBmaWxlOiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGRpc2Nvbm46IGRpc2Nvbm5lY3Rpb24gcmVxdWVzdC4KKyAqCisgKiByZXR1cm5zICE9MCwgc2FtZTsgMCxub3QuCisgKi8KK3N0YXRpYyBpbnQgc2FtZV9kaXNjb25uX2FkZHIoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlLAorCQkJICAgICBzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKmRpc2Nvbm4pCit7CisJcmV0dXJuICgoZmlsZS0+aG9zdF9jbGllbnRfaWQgPT0gZGlzY29ubi0+aG9zdF9hZGRyKQorCQkmJiAoZmlsZS0+bWVfY2xpZW50X2lkID09IGRpc2Nvbm4tPm1lX2FkZHIpKTsKK30KKworLyoqCisgKiBoZWNpX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgIC0gZGlzY29ubmVjdCByZXF1ZXN0IGJoIHJvdXRpbmUKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQGRpc2Nvbm5lY3RfcmVxOiBkaXNjb25uZWN0IHJlcXVlc3QgYnVzIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKmRpc2Nvbm5lY3RfcmVxKQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKmRpc2Nvbm5lY3RfcmVzOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywgZmlsZV9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJaWYgKHNhbWVfZGlzY29ubl9hZGRyKGZpbGVfcG9zLCBkaXNjb25uZWN0X3JlcSkpIHsKKwkJCURCRygiZGlzY29ubmVjdCByZXF1ZXN0IGhvc3QgY2xpZW50ICVkIE1FIGNsaWVudCAlZC5cbiIsCisJCQkJCWRpc2Nvbm5lY3RfcmVxLT5ob3N0X2FkZHIsCisJCQkJCWRpc2Nvbm5lY3RfcmVxLT5tZV9hZGRyKTsKKwkJCWZpbGVfcG9zLT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJCQlmaWxlX3Bvcy0+dGltZXJfY291bnQgPSAwOworCQkJaWYgKGZpbGVfcG9zID09ICZkZXYtPndkX2ZpbGVfZXh0KSB7CisJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCQkJZGV2LT53ZF9wZW5kaW5nID0gMDsKKwkJCX0gZWxzZSBpZiAoZmlsZV9wb3MgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkKKwkJCQlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworCisJCQkvKiBwcmVwYXJlIGRpc2Nvbm5lY3QgcmVzcG9uc2UgKi8KKwkJCWhlY2lfaGRyID0KKwkJCQkoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT5leHRfbXNnX2J1ZlswXTsKKwkJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCQkJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCQkJaGVjaV9oZHItPmxlbmd0aCA9CisJCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UpOworCQkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJCQlkaXNjb25uZWN0X3JlcyA9CisJCQkJKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKikKKwkJCQkmZGV2LT5leHRfbXNnX2J1ZlsxXTsKKwkJCWRpc2Nvbm5lY3RfcmVzLT5ob3N0X2FkZHIgPSBmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQ7CisJCQlkaXNjb25uZWN0X3Jlcy0+bWVfYWRkciA9IGZpbGVfcG9zLT5tZV9jbGllbnRfaWQ7CisJCQkqKF9fdTggKikgKCZkaXNjb25uZWN0X3Jlcy0+Y21kKSA9CisJCQkJQ0xJRU5UX0RJU0NPTk5FQ1RfUkVTX0NNRDsKKwkJCWRpc2Nvbm5lY3RfcmVzLT5zdGF0dXMgPSAwOworCQkJZGV2LT5leHRyYV93cml0ZV9pbmRleCA9IDI7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiBoZWNpX3RpbWVyIC0gdGltZXIgZnVuY3Rpb24uCisgKgorICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aW1lciBpbnRlcnJ1cHQgd29yaworICovCit2b2lkIGhlY2lfd2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPSAoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKikgZGF0YTsKKworCURCRygic2VuZCB3YXRjaGRvZy5cbiIpOworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJbW9kX3RpbWVyKCZkZXYtPndkX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAyICogSFopKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm47CisJfQorCWlmIChkZXYtPndkX2ZpbGVfZXh0LnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJbW9kX3RpbWVyKCZkZXYtPndkX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAyICogSFopKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm47CisJfQorCS8qIFdhdGNoZG9nICovCisJaWYgKChkZXYtPndkX2R1ZV9jb3VudGVyICE9IDApICYmIChkZXYtPndkX2J5cGFzcyA9PSAwKSkgeworCQlpZiAoLS1kZXYtPndkX2R1ZV9jb3VudGVyID09IDApIHsKKwkJCWlmIChkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ICYmCisJCQkgICAgZmxvd19jdHJsX2NyZWRzKGRldiwgJmRldi0+d2RfZmlsZV9leHQpKSB7CisJCQkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCQkJaWYgKCFoZWNpX3NlbmRfd2QoZGV2KSkgeworCQkJCQlEQkcoIndkIHNlbmQgZmFpbGVkLlxuIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsCisJCQkJCQkJICZkZXYtPndkX2ZpbGVfZXh0KTsKKwkJCQl9CisKKwkJCQlpZiAoZGV2LT53ZF90aW1lb3V0ICE9IDApCisJCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAyOworCQkJCWVsc2UKKwkJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisKKwkJCX0gZWxzZQorCQkJCWRldi0+d2RfcGVuZGluZyA9IDE7CisKKwkJfQorCX0KKwlpZiAoZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyICE9IDApIHsKKwkJaWYgKC0tZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyID09IDApIHsKKwkJCURCRygicmVzZXRpbmcgYmVjYXVzZSBvZiBoYW5nIHRvIFBUSEkuXG4iKTsKKwkJCWhlY2lfcmVzZXQoZGV2LCAxKTsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgPSAwOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggPSAwOworCQkJZGV2LT5pYW10aGlmX2NhbmNlbGVkID0gMDsKKwkJCWRldi0+aWFtdGhpZl9pb2N0bCA9IDE7CisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKwkJCWRldi0+aWFtdGhpZl90aW1lciA9IDA7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkJCWlmIChkZXYtPmlhbXRoaWZfY3VycmVudF9jYikKKwkJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShkZXYtPmlhbXRoaWZfY3VycmVudF9jYik7CisKKwkJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPSBOVUxMOworCQkJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCQkJcnVuX25leHRfaWFtdGhpZl9jbWQoZGV2KTsKKwkJfQorCX0KKwltb2RfdGltZXIoJmRldi0+d2RfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2lvX2hlY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2lvX2hlY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzU0NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaW9faGVjaS5jCkBAIC0wLDAgKzEsODQ3IEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiaGVjaV9kYXRhX3N0cnVjdHVyZXMuaCIKKyNpbmNsdWRlICJoZWNpLmgiCisjaW5jbHVkZSAiaGVjaV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJoZWNpX3ZlcnNpb24uaCIKKworCisvKioKKyAqIGhlY2lfaW9jdGxfZ2V0X3ZlcnNpb24gLSB0aGUgZ2V0IGRyaXZlciB2ZXJzaW9uIElPQ1RMIGZ1bmN0aW9uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlmX251bTogIG1pbm9yIG51bWJlcgorICogQCp1X21zZzogcG9pbnRlciB0byB1c2VyIGRhdGEgc3RydWN0IGluIHVzZXIgc3BhY2UKKyAqIEBrX21zZzogZGF0YSBpbiBrZXJuZWwgb24gdGhlIHN0YWNrCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfaW9jdGxfZ2V0X3ZlcnNpb24oc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJCSAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBfX3VzZXIgKnVfbXNnLAorCQkJICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkJICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlpbnQgcmV0cyA9IDA7CisJc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24gKnZlcnNpb247CisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIHJlc19tc2c7CisKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpCisJICAgIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChrX21zZy5zaXplIDwgKHNpemVvZihzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbikgLSAyKSkgeworCQlEQkcoInVzZXIgYnVmZmVyIGxlc3MgdGhhbiBoZWNpX2RyaXZlcl92ZXJzaW9uLlxuIik7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJcmVzX21zZy5kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc19tc2cuZGF0YSkgeworCQlEQkcoImZhaWxlZCBhbGxvY2F0aW9uIHJlc3BvbnNlIGJ1ZmZlciBzaXplID0gJWQuXG4iLAorCQkgICAgKGludCkgc2l6ZW9mKHN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXZlcnNpb24gPSAoc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24gKikgcmVzX21zZy5kYXRhOworCXZlcnNpb24tPm1ham9yID0gTUFKT1JfVkVSU0lPTjsKKwl2ZXJzaW9uLT5taW5vciA9IE1JTk9SX1ZFUlNJT047CisJdmVyc2lvbi0+aG90Zml4ID0gUVVJQ0tfRklYX05VTUJFUjsKKwl2ZXJzaW9uLT5idWlsZCA9IFZFUl9CVUlMRDsKKwlyZXNfbXNnLnNpemUgPSBzaXplb2Yoc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24pOworCWlmIChrX21zZy5zaXplIDwgc2l6ZW9mKHN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uKSkKKwkJcmVzX21zZy5zaXplIC09IDI7CisKKwlyZXRzID0gZmlsZV9leHQtPnN0YXR1czsKKwkvKiBub3cgY29weSB0aGUgZGF0YSB0byB1c2VyIHNwYWNlICovCisJaWYgKGNvcHlfdG9fdXNlcihrX21zZy5kYXRhLCByZXNfbXNnLmRhdGEsIHJlc19tc2cuc2l6ZSkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKwlpZiAocHV0X3VzZXIocmVzX21zZy5zaXplLCAmdV9tc2ctPnNpemUpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CitlbmQ6CisJa2ZyZWUocmVzX21zZy5kYXRhKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX2lvY3RsX2Nvbm5lY3RfY2xpZW50IC0gdGhlIGNvbm5lY3QgdG8gZncgY2xpZW50IElPQ1RMIGZ1bmN0aW9uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlmX251bTogIG1pbm9yIG51bWJlcgorICogQCp1X21zZzogcG9pbnRlciB0byB1c2VyIGRhdGEgc3RydWN0IGluIHVzZXIgc3BhY2UKKyAqIEBrX21zZzogZGF0YSBpbiBrZXJuZWwgb24gdGhlIHN0YWNrCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfaW9jdGxfY29ubmVjdF9jbGllbnQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJCSAgICAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBfX3VzZXIgKnVfbXNnLAorCQkJICAgICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldHMgPSAwOworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSByZXFfbXNnLCByZXNfbXNnOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCWxvbmcgdGltZW91dCA9IDE1OwkvKjE1IHNlY29uZCAqLworCV9fdTggaTsKKwlpbnQgZXJyID0gMDsKKworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIWZpbGVfZXh0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChrX21zZy5zaXplICE9IHNpemVvZihzdHJ1Y3QgZ3VpZCkpIHsKKwkJREJHKCJ1c2VyIGJ1ZmZlciBzaXplIGlzIG5vdCBlcXVhbCB0byBzaXplIG9mIHN0cnVjdCAiCisJCQkJImd1aWQoMTYpLlxuIik7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJaWYgKCFrX21zZy5kYXRhKQorCQlyZXR1cm4gLUVJTzsKKworCXJlcV9tc2cuZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBndWlkKSwgR0ZQX0tFUk5FTCk7CisJcmVzX21zZy5kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJlc19tc2cuZGF0YSkgeworCQlEQkcoImZhaWxlZCBhbGxvY2F0aW9uIHJlc3BvbnNlIGJ1ZmZlciBzaXplID0gJWQuXG4iLAorCQkgICAgKGludCkgc2l6ZW9mKHN0cnVjdCBoZWNpX2NsaWVudCkpOworCQlrZnJlZShyZXFfbXNnLmRhdGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKCFyZXFfbXNnLmRhdGEpIHsKKwkJREJHKCJmYWlsZWQgYWxsb2NhdGlvbiByZXF1ZXN0IGJ1ZmZlciBzaXplID0gJWQuXG4iLAorCQkgICAgKGludCkgc2l6ZW9mKHN0cnVjdCBndWlkKSk7CisJCWtmcmVlKHJlc19tc2cuZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXFfbXNnLnNpemUgPSBzaXplb2Yoc3RydWN0IGd1aWQpOworCXJlc19tc2cuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGVjaV9jbGllbnQpOworCisJLyogY29weSB0aGUgbWVzc2FnZSB0byBrZXJuZWwgc3BhY2UgLQorCSAqIHVzZSBhIHBvaW50ZXIgYWxyZWFkeSBjb3BpZWQgaW50byBrZXJuZWwgc3BhY2UKKwkgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIocmVxX21zZy5kYXRhLCBrX21zZy5kYXRhLCBrX21zZy5zaXplKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorCS8qIGJ1ZmZlcmVkIGlvY3RsIGNiICovCisJcHJpdl9jYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfY2IpIHsKKwkJcmV0cyA9IC1FTk9NRU07CisJCWdvdG8gZW5kOworCX0KKwlJTklUX0xJU1RfSEVBRCgmcHJpdl9jYi0+Y2JfbGlzdCk7CisJcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgPSByZXNfbXNnLmRhdGE7CisJcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUgPSByZXNfbXNnLnNpemU7CisJcHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSA9IHJlcV9tc2cuZGF0YTsKKwlwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplID0gcmVxX21zZy5zaXplOworCXByaXZfY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IEhFQ0lfSU9DVEw7CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKChmaWxlX2V4dC0+c3RhdGUgIT0gSEVDSV9GSUxFX0lOSVRJQUxJWklORykgJiYKKwkgICAgKGZpbGVfZXh0LT5zdGF0ZSAhPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEKSkgeworCQlyZXRzID0gLUVCVVNZOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdvdG8gZW5kOworCX0KKworCS8qIGZpbmQgTUUgY2xpZW50IHdlJ3JlIHRyeWluZyB0byBjb25uZWN0IHRvICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChtZW1jbXAoKHN0cnVjdCBndWlkICopcmVxX21zZy5kYXRhLAorCQkJICAgICZkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfbmFtZSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGd1aWQpKSA9PSAwKSB7CisJCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLmZpeGVkX2FkZHJlc3MgPT0gMCkgeworCQkJCWZpbGVfZXh0LT5tZV9jbGllbnRfaWQgPQorCQkJCSAgICBkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkOworCQkJCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9DT05ORUNUSU5HOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJLyogaWYgd2UncmUgY29ubmVjdGluZyB0byBQVEhJIGNsaWVudCBzbyB3ZSB3aWxsIHVzZSB0aGUgZXhpc3QKKwkgKiBjb25uZWN0aW9uCisJICovCisJaWYgKG1lbWNtcCgoc3RydWN0IGd1aWQgKilyZXFfbXNnLmRhdGEsICZoZWNpX3B0aGlfZ3VpZCwKKwkJCQlzaXplb2Yoc3RydWN0IGd1aWQpKSA9PSAwKSB7CisJCWlmIChkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlkZXYtPmhlY2lfaG9zdF9jbGllbnRzW2ZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCAvIDhdICY9CisJCQl+KDEgPDwgKGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCAlIDgpKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLAorCQkgICAgZmlsZV9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJCWlmIChoZWNpX2ZlX3NhbWVfaWQoZmlsZV9leHQsIGZpbGVfcG9zKSkgeworCQkJCURCRygicmVtb3ZlIGZpbGUgcHJpdmF0ZSBkYXRhIG5vZGUgaG9zdCIKKwkJCQkgICAgIiBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWQuXG4iLAorCQkJCSAgICBmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQsCisJCQkJICAgIGZpbGVfcG9zLT5tZV9jbGllbnRfaWQpOworCQkJCWxpc3RfZGVsKCZmaWxlX3Bvcy0+bGluayk7CisJCQl9CisKKwkJfQorCQlEQkcoImZyZWUgZmlsZSBwcml2YXRlIGRhdGEgbWVtb3J5LlxuIik7CisJCWtmcmVlKGZpbGVfZXh0KTsKKwkJZmlsZV9leHQgPSBOVUxMOworCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0OworCQljbGllbnQgPSAoc3RydWN0IGhlY2lfY2xpZW50ICopIHJlc19tc2cuZGF0YTsKKwkJY2xpZW50LT5tYXhfbXNnX2xlbmd0aCA9CisJCQlkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGg7CisJCWNsaWVudC0+cHJvdG9jb2xfdmVyc2lvbiA9CisJCQlkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfdmVyc2lvbjsKKwkJcmV0cyA9IGRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0dXM7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCQkvKiBub3cgY29weSB0aGUgZGF0YSB0byB1c2VyIHNwYWNlICovCisJCWlmIChjb3B5X3RvX3VzZXIoa19tc2cuZGF0YSwgcmVzX21zZy5kYXRhLCByZXNfbXNnLnNpemUpKSB7CisJCQlyZXRzID0gLUVGQVVMVDsKKwkJCWdvdG8gZW5kOworCQl9CisJCWlmIChwdXRfdXNlcihyZXNfbXNnLnNpemUsICZ1X21zZy0+c2l6ZSkpIHsKKwkJCXJldHMgPSAtRUZBVUxUOworCQkJZ290byBlbmQ7CisJCX0KKwkJZ290byBlbmQ7CisJfQorCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJaWYgKGZpbGVfZXh0LT5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVElORykgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdvdG8gZW5kOworCX0KKwlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJLyogcHJlcGFyZSB0aGUgb3V0cHV0IGJ1ZmZlciAqLworCWNsaWVudCA9IChzdHJ1Y3QgaGVjaV9jbGllbnQgKikgcmVzX21zZy5kYXRhOworCWNsaWVudC0+bWF4X21zZ19sZW5ndGggPSBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGg7CisJY2xpZW50LT5wcm90b2NvbF92ZXJzaW9uID0gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX3ZlcnNpb247CisJaWYgKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkKKwkgICAgJiYgIW90aGVyX2NsaWVudF9pc19jb25uZWN0aW5nKGRldiwgZmlsZV9leHQpKSB7CisJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQlpZiAoIWhlY2lfY29ubmVjdChkZXYsIGZpbGVfZXh0KSkgeworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlnb3RvIGVuZDsKKwkJfSBlbHNlIHsKKwkJCWZpbGVfZXh0LT50aW1lcl9jb3VudCA9IEhFQ0lfQ09OTkVDVF9USU1FT1VUOworCQkJcHJpdl9jYi0+ZmlsZV9wcml2YXRlID0gZmlsZV9leHQ7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLgorCQkJCSAgICAgIGNiX2xpc3QpOworCQl9CisKKworCX0gZWxzZSB7CisJCXByaXZfY2ItPmZpbGVfcHJpdmF0ZSA9IGZpbGVfZXh0OworCQlEQkcoImFkZCBjb25uZWN0IGNiIHRvIGNvbnRyb2wgd3JpdGUgbGlzdC5cbiIpOworCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJICAgICAgJmRldi0+Y3RybF93cl9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3JlY3ZkX21zZywKKwkJCShIRUNJX0ZJTEVfQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZQorCQkJIHx8IEhFQ0lfRklMRV9ESVNDT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlKSwKKwkJCXRpbWVvdXQgKiBIWik7CisKKwlpZiAoSEVDSV9GSUxFX0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUpIHsKKwkJREJHKCJzdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIEZXIGNsaWVudC5cbiIpOworCQlyZXRzID0gZmlsZV9leHQtPnN0YXR1czsKKwkJLyogbm93IGNvcHkgdGhlIGRhdGEgdG8gdXNlciBzcGFjZSAqLworCQlpZiAoY29weV90b191c2VyKGtfbXNnLmRhdGEsIHJlc19tc2cuZGF0YSwgcmVzX21zZy5zaXplKSkgeworCQkJcmV0cyA9IC1FRkFVTFQ7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlpZiAocHV0X3VzZXIocmVzX21zZy5zaXplLCAmdV9tc2ctPnNpemUpKSB7CisJCQlyZXRzID0gLUVGQVVMVDsKKwkJCWdvdG8gZW5kOworCQl9CisJCWdvdG8gZW5kOworCX0gZWxzZSB7CisJCURCRygiZmFpbGVkIHRvIGNvbm5lY3QgdG8gRlcgY2xpZW50LmZpbGVfZXh0LT5zdGF0ZSA9ICVkLlxuIiwKKwkJICAgIGZpbGVfZXh0LT5zdGF0ZSk7CisJCWlmICghZXJyKSB7CisJCQlEQkcoIndhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IGZhaWxlZCBvbiBjbGllbnQiCisJCQkgICAgIiBjb25uZWN0IG1lc3NhZ2UgZncgcmVzcG9uc2UgbWVzc2FnZS5cbiIpOworCQl9CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIHJlbW92ZV9saXN0OworCX0KKworcmVtb3ZlX2xpc3Q6CisJaWYgKHByaXZfY2IpIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaGVjaV9mbHVzaF9saXN0KCZkZXYtPmN0cmxfcmRfbGlzdCwgZmlsZV9leHQpOworCQloZWNpX2ZsdXNoX2xpc3QoJmRldi0+Y3RybF93cl9saXN0LCBmaWxlX2V4dCk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwl9CitlbmQ6CisJREJHKCJmcmVlIGNvbm5lY3QgY2IgbWVtb3J5LiIpOworCWtmcmVlKHJlcV9tc2cuZGF0YSk7CisJa2ZyZWUocmVzX21zZy5kYXRhKTsKKwlrZnJlZShwcml2X2NiKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX2lvY3RsX3dkICAtIHRoZSB3ZCBJT0NUTCBmdW5jdGlvbgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEBrX21zZzogZGF0YSBpbiBrZXJuZWwgb24gdGhlIHN0YWNrCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfaW9jdGxfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCSAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlpbnQgcmV0cyA9IDA7CisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIHJlcV9tc2c7CS8qaW4ga2VybmVsIG9uIHRoZSBzdGFjayAqLworCisJaWYgKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWlmIChrX21zZy5zaXplICE9IEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFKSB7CisJCURCRygidXNlciBidWZmZXIgaGFzIGludmFsaWQgc2l6ZS5cbiIpOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKworCXJlcV9tc2cuZGF0YSA9IGttYWxsb2MoSEVDSV9XQVRDSERPR19EQVRBX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghcmVxX21zZy5kYXRhKSB7CisJCURCRygiZmFpbGVkIGFsbG9jYXRpb24gcmVxdWVzdCBidWZmZXIgc2l6ZSA9ICVkLlxuIiwKKwkJICAgIEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJlcV9tc2cuc2l6ZSA9IEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFOworCisJLyogY29weSB0aGUgbWVzc2FnZSB0byBrZXJuZWwgc3BhY2UgLSB1c2UgYSBwb2ludGVyIGFscmVhZHkKKwkgKiBjb3BpZWQgaW50byBrZXJuZWwgc3BhY2UKKwkgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIocmVxX21zZy5kYXRhLCBrX21zZy5kYXRhLCByZXFfbXNnLnNpemUpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAoZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdvdG8gZW5kOworCX0KKwlpZiAoIWRldi0+YXNmX21vZGUpIHsKKwkJcmV0cyA9IC1FSU87CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ290byBlbmQ7CisJfQorCisJbWVtY3B5KCZkZXYtPndkX2RhdGFbSEVDSV9XRF9QQVJBTVNfU0laRV0sIHJlcV9tc2cuZGF0YSwKKwkgICAgICAgSEVDSV9XQVRDSERPR19EQVRBX1NJWkUpOworCisJZGV2LT53ZF90aW1lb3V0ID0gKHJlcV9tc2cuZGF0YVsxXSA8PCA4KSArIHJlcV9tc2cuZGF0YVswXTsKKwlkZXYtPndkX3BlbmRpbmcgPSAwOworCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAxOwkvKiBuZXh0IHRpbWVyICovCisJaWYgKGRldi0+d2RfdGltZW91dCA9PSAwKSB7CisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RvcF93ZF9wYXJhbXMsCisJCSAgICAgICBIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwl9IGVsc2UgeworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0YXJ0X3dkX3BhcmFtcywKKwkJICAgICAgIEhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCQltb2RfdGltZXIoJmRldi0+d2RfdGltZXIsIGppZmZpZXMpOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CitlbmQ6CisJa2ZyZWUocmVxX21zZy5kYXRhKTsKKwlyZXR1cm4gcmV0czsKK30KKworCisvKioKKyAqIGhlY2lfaW9jdGxfYnlwYXNzX3dkICAtIHRoZSBieXBhc3Nfd2QgSU9DVEwgZnVuY3Rpb24KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWZfbnVtOiAgbWlub3IgbnVtYmVyCisgKiBAa19tc2c6IGRhdGEgaW4ga2VybmVsIG9uIHRoZSBzdGFjaworICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX2lvY3RsX2J5cGFzc193ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCV9fdTggZmxhZyA9IDA7CisJaW50IHJldHMgPSAwOworCisJaWYgKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWlmIChrX21zZy5zaXplIDwgMSkgeworCQlEQkcoInVzZXIgYnVmZmVyIGxlc3MgdGhhbiBIRUNJX1dBVENIRE9HX0RBVEFfU0laRS5cbiIpOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWcsIGtfbXNnLmRhdGEsIDEpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWZsYWcgPSBmbGFnID8gKDEpIDogKDApOworCWRldi0+d2RfYnlwYXNzID0gZmxhZzsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CitlbmQ6CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogZmluZF9wdGhpX3JlYWRfbGlzdF9lbnRyeSAtIGZpbmRzIGEgUFRISWxpc3QgZW50cnkgZm9yIGN1cnJlbnQgZmlsZQorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAgIHJldHVybmVkIGEgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKmZpbmRfcHRoaV9yZWFkX2xpc3RfZW50cnkoCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHRfdGVtcDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKworCWlmICgoZGV2LT5wdGhpX3JlYWRfY29tcGxldGVfbGlzdC5zdGF0dXMgPT0gMCkgJiYKKwkgICAgIWxpc3RfZW1wdHkoJmRldi0+cHRoaV9yZWFkX2NvbXBsZXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJICAgICZkZXYtPnB0aGlfcmVhZF9jb21wbGV0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJZmlsZV9leHRfdGVtcCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmICgoZmlsZV9leHRfdGVtcCAhPSBOVUxMKSAmJgorCQkJICAgIChmaWxlX2V4dF90ZW1wID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpICYmCisJCQkgICAgKHByaXZfY2JfcG9zLT5maWxlX29iamVjdCA9PSBmaWxlKSkKKwkJCQlyZXR1cm4gcHJpdl9jYl9wb3M7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcHRoaV9yZWFkIC0gcmVhZCBkYXRhIGZyb20gcHRoaSBjbGllbnQKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWZfbnVtOiAgbWlub3IgbnVtYmVyCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIG9iamVjdAorICogQCp1YnVmOiBwb2ludGVyIHRvIHVzZXIgZGF0YSBpbiB1c2VyIHNwYWNlCisgKiBAbGVuZ3RoOiBkYXRhIGxlbmd0aCB0byByZWFkCisgKiBAb2Zmc2V0OiBkYXRhIHJlYWQgb2Zmc2V0CisgKgorICogcmV0dXJucworICogIHJldHVybmVkIGRhdGEgbGVuZ3RoIG9uIHN1Y2Nlc3MsCisgKiAgemVybyBpZiBubyBkYXRhIHRvIHJlYWQsCisgKiAgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqLworaW50IHB0aGlfcmVhZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgICBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpCit7CisJaW50IHJldHMgPSAwOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJX191OCBpOworCXVuc2lnbmVkIGxvbmcgY3VycnRpbWUgPSBnZXRfc2Vjb25kcygpOworCisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKGZpbGVfZXh0ID09IE5VTEwpIHx8IChmaWxlX2V4dCAhPSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PQorCQkgICAgZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZCkKKwkJCWJyZWFrOworCX0KKwlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwlpZiAoKGkgPT0gZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKQorCSAgICB8fCAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPQorCQlkZXYtPmlhbXRoaWZfZmlsZV9leHQubWVfY2xpZW50X2lkKSkgeworCQlEQkcoIlBUSEkgY2xpZW50IG5vdCBmb3VuZC5cbiIpOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwcml2X2NiID0gZmluZF9wdGhpX3JlYWRfbGlzdF9lbnRyeShkZXYsIGZpbGUpOworCWlmICghcHJpdl9jYikgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAwOyAvKiBObyBtb3JlIGRhdGEgdG8gcmVhZCAqLworCX0gZWxzZSB7CisJCWlmIChwcml2X2NiICYmCisJCSAgICAoY3VycnRpbWUgLSBwcml2X2NiLT5yZWFkX3RpbWUgPiBJQU1USElGX1JFQURfVElNRVIpKSB7CisJCQkvKiAxNSBzZWMgZm9yIHRoZSBtZXNzYWdlIGhhcyBleHBpcmVkICovCisJCQlsaXN0X2RlbCgmcHJpdl9jYi0+Y2JfbGlzdCk7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXRzID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gZnJlZTsKKwkJfQorCQkvKiBpZiB0aGUgd2hvbGUgbWVzc2FnZSB3aWxsIGZpdCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLworCQlpZiAoKHByaXZfY2ItPmluZm9ybWF0aW9uID49ICpvZmZzZXQpICAmJgorCQkgICAgKGxlbmd0aCA+PSAocHJpdl9jYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KSkpCisJCQlsaXN0X2RlbCgmcHJpdl9jYi0+Y2JfbGlzdCk7CisJCWVsc2UgaWYgKChwcml2X2NiLT5pbmZvcm1hdGlvbiA+IDApICYmCisJCSAgICAocHJpdl9jYi0+aW5mb3JtYXRpb24gPD0gKm9mZnNldCkpIHsKKwkJCS8qIGVuZCBvZiB0aGUgbWVzc2FnZSBoYXMgYmVlbiByZWFjaGVkICovCisJCQlsaXN0X2RlbCgmcHJpdl9jYi0+Y2JfbGlzdCk7CisJCQlyZXRzID0gMDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCWdvdG8gZnJlZTsKKwkJfQorCQkvKiBlbHNlIG1lYW5zIHRoYXQgbm90IGZ1bGwgYnVmZmVyIHdpbGwgYmUgcmVhZCBhbmQgZG8gbm90CisJCSAqIHJlbW92ZSBtZXNzYWdlIGZyb20gZGVsZXRpb24gbGlzdAorCQkgKi8KKwl9CisJREJHKCJwdGhpIHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlciBzaXplIC0gJWRcbiIsCisJICAgIHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplKTsKKwlEQkcoInB0aGkgcHJpdl9jYi0+aW5mb3JtYXRpb24gLSAlbHVcbiIsCisJICAgIHByaXZfY2ItPmluZm9ybWF0aW9uKTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkvKiBsZW5ndGggaXMgYmVpbmcgdHVybmNhdGVkIHRvIFBBR0VfU0laRSwgaG93ZXZlciwKKwkgKiB0aGUgaW5mb3JtYXRpb24gbWF5IGJlIGxvbmdlciAqLworCWxlbmd0aCA9IGxlbmd0aCA8IChwcml2X2NiLT5pbmZvcm1hdGlvbiAtICpvZmZzZXQpID8KKwkJCWxlbmd0aCA6IChwcml2X2NiLT5pbmZvcm1hdGlvbiAtICpvZmZzZXQpOworCisJaWYgKGNvcHlfdG9fdXNlcih1YnVmLAorCQkJIHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhICsgKm9mZnNldCwKKwkJCSBsZW5ndGgpKQorCQlyZXRzID0gLUVGQVVMVDsKKwllbHNlIHsKKwkJcmV0cyA9IGxlbmd0aDsKKwkJaWYgKCgqb2Zmc2V0ICsgbGVuZ3RoKSA8IHByaXZfY2ItPmluZm9ybWF0aW9uKSB7CisJCQkqb2Zmc2V0ICs9IGxlbmd0aDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorZnJlZToKKwlEQkcoImZyZWUgcHRoaSBjYiBtZW1vcnkuXG4iKTsKKwkqb2Zmc2V0ID0gMDsKKwloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiKTsKK291dDoKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX3N0YXJ0X3JlYWQgIC0gdGhlIHN0YXJ0IHJlYWQgY2xpZW50IG1lc3NhZ2UgZnVuY3Rpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlmX251bTogIG1pbm9yIG51bWJlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX3N0YXJ0X3JlYWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJaW50IHJldHMgPSAwOworCV9fdTggaTsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiID0gTlVMTDsKKworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlX2V4dCkpIHsKKwkJREJHKCJyZWNlaXZlZCB3cm9uZyBmdW5jdGlvbiBpbnB1dCBwYXJhbS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGZpbGVfZXh0LT5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCURCRygiY2hlY2sgaWYgcmVhZCBpcyBwZW5kaW5nLlxuIik7CisJaWYgKChmaWxlX2V4dC0+cmVhZF9wZW5kaW5nKSB8fCAoZmlsZV9leHQtPnJlYWRfY2IgIT0gTlVMTCkpIHsKKwkJREJHKCJyZWFkIGlzIHBlbmRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcHJpdl9jYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfY2IpCisJCXJldHVybiAtRU5PTUVNOworCisJREJHKCJhbGxvY2F0aW9uIGNhbGwgYmFjayBzdWNjZXNzXG4iCisJICAgICJob3N0IGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZFxuIiwKKwkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLCBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKQorCQkJYnJlYWs7CisKKwl9CisKKwlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwlpZiAoaSA9PSBkZXYtPm51bV9oZWNpX21lX2NsaWVudHMpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplID0gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSA9CisJICAgIGttYWxsb2MocHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUsIEdGUF9LRVJORUwpOworCWlmICghcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEpIHsKKwkJcmV0cyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJREJHKCJhbGxvY2F0aW9uIGNhbGwgYmFjayBkYXRhIHN1Y2Nlc3MuXG4iKTsKKwlwcml2X2NiLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPSBIRUNJX1JFQUQ7CisJLyogbWFrZSBzdXJlIGluZm9ybWF0aW9uIGlzIHplcm8gYmVmb3JlIHdlIHN0YXJ0ICovCisJcHJpdl9jYi0+aW5mb3JtYXRpb24gPSAwOworCXByaXZfY2ItPmZpbGVfcHJpdmF0ZSA9ICh2b2lkICopIGZpbGVfZXh0OworCWZpbGVfZXh0LT5yZWFkX2NiID0gcHJpdl9jYjsKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQlpZiAoIWhlY2lfc2VuZF9mbG93X2NvbnRyb2woZGV2LCBmaWxlX2V4dCkpIHsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJZ290byB1bmxvY2s7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPnJlYWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9CisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCSAgICAgICZkZXYtPmN0cmxfd3JfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJcmV0dXJuIHJldHM7Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworZmFpbDoKKwloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBwdGhpX3dyaXRlIC0gd3JpdGUgaWFtdGhpZiBkYXRhIHRvIHB0aGkgY2xpZW50CisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHByaXZfY2I6IGhlY2kgY2FsbCBiYWNrIHN0cnVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgcHRoaV93cml0ZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCSAgICAgICBzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiKQoreworCWludCByZXRzID0gMDsKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyIGhlY2lfaGRyOworCisJaWYgKCghZGV2KSB8fCAoIXByaXZfY2IpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCURCRygid3JpdGUgZGF0YSB0byBwdGhpIGNsaWVudC5cbiIpOworCisJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX1dSSVRJTkc7CisJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBwcml2X2NiOworCWRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9IHByaXZfY2ItPmZpbGVfb2JqZWN0OworCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJZGV2LT5pYW10aGlmX2lvY3RsID0gMTsKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gcHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZTsKKwltZW1jcHkoZGV2LT5pYW10aGlmX21zZ19idWYsIHByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEsCisJICAgIHByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUpOworCisJaWYgKGZsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpICYmCisJICAgIGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkpIHsKKwkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmIChwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplID4KKwkJICAgICgoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkgKgorCQkgICAgc2l6ZW9mKF9fdTMyKSkgLSBzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikpIHsKKwkJCWhlY2lfaGRyLmxlbmd0aCA9CisJCQkgICAgKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSAqCisJCQkgICAgc2l6ZW9mKF9fdTMyKSkgLSBzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcik7CisJCQloZWNpX2hkci5tc2dfY29tcGxldGUgPSAwOworCQl9IGVsc2UgeworCQkJaGVjaV9oZHIubGVuZ3RoID0gcHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZTsKKwkJCWhlY2lfaGRyLm1zZ19jb21wbGV0ZSA9IDE7CisJCX0KKworCQloZWNpX2hkci5ob3N0X2FkZHIgPSBkZXYtPmlhbXRoaWZfZmlsZV9leHQuaG9zdF9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLm1lX2FkZHIgPSBkZXYtPmlhbXRoaWZfZmlsZV9leHQubWVfY2xpZW50X2lkOworCQloZWNpX2hkci5yZXNlcnZlZCA9IDA7CisJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ICs9IGhlY2lfaGRyLmxlbmd0aDsKKwkJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCAmaGVjaV9oZHIsCisJCQkJCSh1bnNpZ25lZCBjaGFyICopKGRldi0+aWFtdGhpZl9tc2dfYnVmKSwKKwkJCQkJaGVjaV9oZHIubGVuZ3RoKSkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWlmIChoZWNpX2hkci5tc2dfY29tcGxldGUpIHsKKwkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KTsKKwkJCWRldi0+aWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZyA9IDE7CisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfRkxPV19DT05UUk9MOworCQkJREJHKCJhZGQgcHRoaSBjYiB0byB3cml0ZSB3YWl0aW5nIGxpc3RcbiIpOworCQkJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBwcml2X2NiOworCQkJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gcHJpdl9jYi0+ZmlsZV9vYmplY3Q7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJREJHKCJtZXNzYWdlIGRvZXMgbm90IGNvbXBsZXRlLCAiCisJCQkJCSJzbyBhZGQgcHRoaSBjYiB0byB3cml0ZSBsaXN0LlxuIik7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkpKQorCQkJREJHKCJob3N0IGJ1ZmZlciBpcyBub3QgZW1wdHkiKTsKKworCQlEQkcoIk5vIGZsb3cgY29udHJvbCBjcmVkZW50aWFscywgIgorCQkJCSJzbyBhZGQgaWFtdGhpZiBjYiB0byB3cml0ZSBsaXN0LlxuIik7CisJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJfQorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGlhbXRoaWZfaW9jdGxfc2VuZF9tc2cgLSBzZW5kIGNtZCBkYXRhIHRvIHB0aGkgY2xpZW50CisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCit2b2lkIHJ1bl9uZXh0X2lhbXRoaWZfY21kKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dF90bXA7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IDA7CisJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggPSAwOworCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJZGV2LT5pYW10aGlmX2lvY3RsID0gMTsKKwlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKwlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworCWRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9IE5VTEw7CisKKwlpZiAoZGV2LT5wdGhpX2NtZF9saXN0LnN0YXR1cyA9PSAwICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPnB0aGlfY21kX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlEQkcoImNvbXBsZXRlIHB0aGkgY21kX2xpc3QgY2IuXG4iKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJICAgICZkZXYtPnB0aGlfY21kX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJZmlsZV9leHRfdG1wID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCisJCQlpZiAoKGZpbGVfZXh0X3RtcCAhPSBOVUxMKSAmJgorCQkJICAgIChmaWxlX2V4dF90bXAgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkpIHsKKwkJCQlzdGF0dXMgPSBwdGhpX3dyaXRlKGRldiwgcHJpdl9jYl9wb3MpOworCQkJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJCQlEQkcoInB0aGkgd3JpdGUgZmFpbGVkIHN0YXR1cyA9ICVkXG4iLAorCQkJCQkJCXN0YXR1cyk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogaGVjaV9mcmVlX2NiX3ByaXZhdGUgLSBmcmVlIGhlY2lfY2JfcHJpdmF0ZSByZWxhdGVkIG1lbW9yeQorICoKKyAqIEBwcml2X2NiOiBoZWNpIGNhbGxiYWNrIHN0cnVjdAorICovCit2b2lkIGhlY2lfZnJlZV9jYl9wcml2YXRlKHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IpCit7CisJaWYgKHByaXZfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJa2ZyZWUocHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSk7CisJa2ZyZWUocHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEpOworCWtmcmVlKHByaXZfY2IpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTJkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitjb25maWcgTElORTZfVVNCCisJdHJpc3RhdGUgIkxpbmU2IFVTQiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFNORAorCXNlbGVjdCBTTkRfUkFXTUlESQorCWhlbHAKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBndWl0YXIgYW1wLCBjYWIsIGFuZCBlZmZlY3RzIG1vZGVsbGVyCisJICBQT0R4dCBQcm8gYnkgTGluZTYgKGFuZCBzaW1pbGFyIGRldmljZXMpLCBzdXBwb3J0aW5nIHRoZQorCSAgZm9sbG93aW5nIGZlYXR1cmVzOgorCSAgICAqIFJlYWRpbmcvd3JpdGluZyBpbmRpdmlkdWFsIHBhcmFtZXRlcnMKKwkgICAgKiBSZWFkaW5nL3dyaXRpbmcgY29tcGxldGUgY2hhbm5lbCwgZWZmZWN0cyBzZXR1cCwgYW5kIGFtcAorCSAgICAgIHNldHVwIGRhdGEKKwkgICAgKiBDaGFubmVsIHN3aXRjaGluZworCSAgICAqIFZpcnR1YWwgTUlESSBpbnRlcmZhY2UKKwkgICAgKiBUdW5lciBhY2Nlc3MKKwkgICAgKiBQbGF5YmFjay9jYXB0dXJlL21peGVyIGRldmljZSBmb3IgYW55IEFMU0EtY29tcGF0aWJsZSBQQ00KKwkgICAgICBhdWRpbyBhcHBsaWNhdGlvbgorCSAgICAqIFNpZ25hbCByb3V0aW5nIChyZWNvcmQgY2xlYW4vcHJvY2Vzc2VkIGd1aXRhciBzaWduYWwsCisJICAgICAgcmUtYW1waW5nKQorCisJICBQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgVmFyaWF4IFdvcmtiZW5jaCBpcyBpbmNsdWRlZC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzkzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorb2JqLSQoQ09ORklHX0xJTkU2X1VTQikJCSs9IGxpbmU2dXNiLm8KKworbGluZTZ1c2Itb2JqcyA6PSAJCVwKKwkJYXVkaW8ubwkJXAorCQljYXB0dXJlLm8JXAorCQljb250cm9sLm8JXAorCQlkcml2ZXIubwlcCisJCWR1bXByZXF1ZXN0Lm8JXAorCQltaWRpLm8JCVwKKwkJbWlkaWJ1Zi5vCVwKKwkJcGNtLm8JCVwKKwkJcGxheWJhY2subwlcCisJCXBvZC5vCQlcCisJCXRvbmVwb3J0Lm8JXAorCQl2YXJpYXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE5NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKyNpbmNsdWRlICJhdWRpby5oIgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworCitzdGF0aWMgaW50IGxpbmU2X2luZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworc3RhdGljIGNoYXIgKmxpbmU2X2lkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworCisKKy8qCisJSW5pdGlhbGl6ZSB0aGUgTGluZTYgVVNCIGF1ZGlvIHN5c3RlbS4KKyovCitpbnQgbGluZTZfaW5pdF9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwlzdGF0aWMgaW50IGRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisKKwljYXJkID0gc25kX2NhcmRfbmV3KGxpbmU2X2luZGV4W2Rldl0sIGxpbmU2X2lkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKworCWlmIChjYXJkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbGluZTYtPmNhcmQgPSBjYXJkOworCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJMaW5lNi1VU0IiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiTGluZTYgJXMgYXQgVVNCICVzIiwgbGluZTYtPnByb3BlcnRpZXMtPm5hbWUsCisJCWRldl9uYW1lKGxpbmU2LT5pZmNkZXYpKTsgIC8qIDgwIGNoYXJzIC0gc2VlIGFzb3VuZC5oICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisJUmVnaXN0ZXIgdGhlIExpbmU2IFVTQiBhdWRpbyBzeXN0ZW0uCisqLworaW50IGxpbmU2X3JlZ2lzdGVyX2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCWludCBlcnI7CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihsaW5lNi0+Y2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlDbGVhbnVwIHRoZSBMaW5lNiBVU0IgYXVkaW8gc3lzdGVtLgorKi8KK3ZvaWQgbGluZTZfY2xlYW51cF9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBsaW5lNi0+Y2FyZDsKKworCWlmIChjYXJkID09IE5VTEwpCisJCXJldHVybjsKKworCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlsaW5lNi0+Y2FyZCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDI0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uaApAQCAtMCwwICsxLDI0IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBBVURJT19ICisjZGVmaW5lIEFVRElPX0gKKworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKworZXh0ZXJuIHZvaWQgbGluZTZfY2xlYW51cF9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICopOworZXh0ZXJuIGludCBsaW5lNl9pbml0X2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKik7CitleHRlcm4gaW50IGxpbmU2X3JlZ2lzdGVyX2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzkzZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuYwpAQCAtMCwwICsxLDM3MiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgInBvZC5oIgorI2luY2x1ZGUgImNhcHR1cmUuaCIKKworCisvKgorCUZpbmQgYSBmcmVlIFVSQiBhbmQgc3VibWl0IGl0LgorKi8KK3N0YXRpYyBpbnQgc3VibWl0X2F1ZGlvX2luX3VyYihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgaW5kZXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IGksIHVyYl9zaXplOworCXN0cnVjdCB1cmIgKnVyYl9pbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOworCWluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmbGluZTZwY20tPmFjdGl2ZV91cmJfaW4sIExJTkU2X0lTT19CVUZGRVJTKTsKKworCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTElORTZfSVNPX0JVRkZFUlMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4sIGZsYWdzKTsKKwkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgIm5vIGZyZWUgVVJCIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdXJiX2luID0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpbmRleF07CisJdXJiX3NpemUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZpbiA9ICZ1cmJfaW4tPmlzb19mcmFtZV9kZXNjW2ldOworCQlmaW4tPm9mZnNldCA9IHVyYl9zaXplOworCQlmaW4tPmxlbmd0aCA9IGxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemU7CisJCXVyYl9zaXplICs9IGxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemU7CisJfQorCisJdXJiX2luLT50cmFuc2Zlcl9idWZmZXIgPSBsaW5lNnBjbS0+YnVmZmVyX2luICsgaW5kZXggKiBMSU5FNl9JU09fUEFDS0VUUyAqIGxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemU7CisJdXJiX2luLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdXJiX3NpemU7CisJdXJiX2luLT5jb250ZXh0ID0gc3Vic3RyZWFtOworCisJaWYgKHVzYl9zdWJtaXRfdXJiKHVyYl9pbiwgR0ZQX0FUT01JQykgPT0gMCkKKwkJc2V0X2JpdChpbmRleCwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luKTsKKwllbHNlCisJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJVUkIgaW4gIyVkIHN1Ym1pc3Npb24gZmFpbGVkXG4iLCBpbmRleCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorCVN1Ym1pdCBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSBjYXB0dXJlIFVSQnMuCisqLworc3RhdGljIGludCBzdWJtaXRfYXVkaW9faW5fYWxsX3VyYnMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpKSB7CisJCXJldCA9IHN1Ym1pdF9hdWRpb19pbl91cmIoc3Vic3RyZWFtKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVVubGluayBhbGwgY3VycmVudGx5IGFjdGl2ZSBjYXB0dXJlIFVSQnMuCisqLworc3RhdGljIHZvaWQgdW5saW5rX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gTElORTZfSVNPX0JVRkZFUlM7IGktLTspIHsKKwkJaWYgKHRlc3RfYml0KGksICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbikpIHsKKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmbGluZTZwY20tPnVubGlua191cmJfaW4pKSB7CisJCQkJc3RydWN0IHVyYiAqdSA9IGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV07CisJCQkJdXNiX3VubGlua191cmIodSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisJV2FpdCB1bnRpbCB1bmxpbmtpbmcgb2YgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2FwdHVyZSBVUkJzIGhhcyBiZWVuCisJZmluaXNoZWQuCisqLworc3RhdGljIHZvaWQgd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlpbnQgdGltZW91dCA9IEhaOworCXVuc2lnbmVkIGludCBpOworCWludCBhbGl2ZTsKKworCWRvIHsKKwkJYWxpdmUgPSAwOworCQlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgeworCQkJaWYgKHRlc3RfYml0KGksICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbikpCisJCQkJYWxpdmUrKzsKKwkJfQorCQlpZiAoIWFsaXZlKQorCQkJYnJlYWs7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKwlpZiAoYWxpdmUpCisJCXNuZF9wcmludGsoS0VSTl9FUlIgInRpbWVvdXQ6IHN0aWxsICVkIGFjdGl2ZSB1cmJzLi5cbiIsIGFsaXZlKTsKKworCWxpbmU2cGNtLT5hY3RpdmVfdXJiX2luID0gMDsKKwlsaW5lNnBjbS0+dW5saW5rX3VyYl9pbiA9IDA7Cit9CisKKy8qCisJVW5saW5rIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNhcHR1cmUgVVJCcywgYW5kIHdhaXQgZm9yIGZpbmlzaGluZy4KKyovCit2b2lkIHVubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCXVubGlua19hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKwl3YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworfQorCisvKgorCUNhbGxiYWNrIGZvciBjb21wbGV0ZWQgY2FwdHVyZSBVUkIuCisqLworc3RhdGljIHZvaWQgYXVkaW9faW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCWludCBpLCBpbmRleCwgbGVuZ3RoID0gMCwgc2h1dGRvd24gPSAwOworCWludCBmcmFtZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJY29uc3QgaW50IGJ5dGVzX3Blcl9mcmFtZSA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5ieXRlc19wZXJfZnJhbWU7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCS8qIGZpbmQgaW5kZXggb2YgVVJCICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTElORTZfSVNPX0JVRkZFUlM7ICsraW5kZXgpCisJCWlmICh1cmIgPT0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpbmRleF0pCisJCQlicmVhazsKKworI2lmIERPX0RVTVBfUENNX1JFQ0VJVkUKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZm91dCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOworCQlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2cGNtLT5saW5lNiwgJ0MnLCB1cmItPnRyYW5zZmVyX2J1ZmZlciArIGZvdXQtPm9mZnNldCwgZm91dC0+bGVuZ3RoKTsKKwl9CisjZW5kaWYKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKKwkJY2hhciAqZmJ1ZjsKKwkJaW50IGZzaXplOworCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZmluID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CisKKwkJaWYgKGZpbi0+c3RhdHVzID09IC0xOCkgeworCQkJc2h1dGRvd24gPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlmYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBmaW4tPm9mZnNldDsKKwkJZnNpemUgPSBmaW4tPmFjdHVhbF9sZW5ndGg7CisJCWxlbmd0aCArPSBmc2l6ZTsKKworCQlpZiAoZnNpemUgPiAwKSB7CisJCQlmcmFtZXMgPSBmc2l6ZSAvIGJ5dGVzX3Blcl9mcmFtZTsKKworCQkJaWYgKGxpbmU2cGNtLT5wb3NfaW5fZG9uZSArIGZyYW1lcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCQkJLyoKKwkJCQkJVGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeSwKKwkJCQkJY29weSB0d28gc2VwYXJhdGUgY2h1bmtzLgorCQkJCSovCisJCQkJaW50IGxlbjsKKwkJCQlsZW4gPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIGxpbmU2cGNtLT5wb3NfaW5fZG9uZTsKKworCQkJCWlmIChsZW4gPiAwKSB7CisJCQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGxpbmU2cGNtLT5wb3NfaW5fZG9uZSAqIGJ5dGVzX3Blcl9mcmFtZSwgZmJ1ZiwgbGVuICogYnl0ZXNfcGVyX2ZyYW1lKTsKKwkJCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBmYnVmICsgbGVuICogYnl0ZXNfcGVyX2ZyYW1lLCAoZnJhbWVzIC0gbGVuKSAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQkJfSBlbHNlCisJCQkJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJkcml2ZXIgYnVnOiBsZW4gPSAlZFxuIiwgbGVuKTsgIC8qIHRoaXMgaXMgc29tZXdoYXQgcGFyYW5vaWQgKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogY29weSBzaW5nbGUgY2h1bmsgKi8KKwkJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBsaW5lNnBjbS0+cG9zX2luX2RvbmUgKiBieXRlc19wZXJfZnJhbWUsIGZidWYsIGZzaXplICogYnl0ZXNfcGVyX2ZyYW1lKTsKKwkJCX0KKworCQkJaWYgKChsaW5lNnBjbS0+cG9zX2luX2RvbmUgKz0gZnJhbWVzKSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJCQlsaW5lNnBjbS0+cG9zX2luX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCX0KKwl9CisKKwljbGVhcl9iaXQoaW5kZXgsICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbik7CisKKwlpZiAodGVzdF9iaXQoaW5kZXgsICZsaW5lNnBjbS0+dW5saW5rX3VyYl9pbikpCisJCXNodXRkb3duID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luLCBmbGFncyk7CisKKwlpZiAoIXNodXRkb3duKSB7CisJCXN1Ym1pdF9hdWRpb19pbl91cmIoc3Vic3RyZWFtKTsKKworCQlpZiAoKGxpbmU2cGNtLT5ieXRlc19pbiArPSBsZW5ndGgpID49IGxpbmU2cGNtLT5wZXJpb2RfaW4pIHsKKwkJCWxpbmU2cGNtLT5ieXRlc19pbiAtPSBsaW5lNnBjbS0+cGVyaW9kX2luOworCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQl9CisJfQorfQorCisvKiBvcGVuIGNhcHR1cmUgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMocnVudGltZSwgMCwKKwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkgICAgKCZsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X3JhdGVzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlydW50aW1lLT5odyA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfY2FwdHVyZV9odzsKKwlyZXR1cm4gMDsKK30KKworLyogY2xvc2UgY2FwdHVyZSBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogaHdfcGFyYW1zIGNhcHR1cmUgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCS8qIC0tIEZsb3JpYW4gRGVtc2tpIFtGRF0gKi8KKwkvKiBkb24ndCBhc2sgbWUgd2h5LCBidXQgdGhpcyBmaXhlcyB0aGUgYnVnIG9uIG15IG1hY2hpbmUgKi8KKwlpZiAobGluZTZwY20gPT0gTlVMTCkgeworCQlpZiAoc3Vic3RyZWFtLT5wY20gPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoc3Vic3RyZWFtLT5wY20tPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gc3Vic3RyZWFtLT5wY20tPnByaXZhdGVfZGF0YTsKKwkJbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJfQorCS8qIC0tIFtGRF0gZW5kICovCisKKwlyZXQgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbGluZTZwY20tPnBlcmlvZF9pbiA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKKwlsaW5lNnBjbS0+YnVmZmVyX2luID0ga21hbGxvYyhMSU5FNl9JU09fQlVGRkVSUyAqIExJTkU2X0lTT19QQUNLRVRTICogTElORTZfSVNPX1BBQ0tFVF9TSVpFX01BWCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWxpbmU2cGNtLT5idWZmZXJfaW4pIHsKKwkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgImNhbm5vdCBtYWxsb2MgYnVmZmVyX2luXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGh3X2ZyZWUgY2FwdHVyZSBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY2FwdHVyZV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKworCWtmcmVlKGxpbmU2cGNtLT5idWZmZXJfaW4pOworCWxpbmU2cGNtLT5idWZmZXJfaW4gPSBOVUxMOworCisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworLyogdHJpZ2dlciBjYWxsYmFjayAqLworaW50IHNuZF9saW5lNl9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCBlcnI7CisJbGluZTZwY20tPmNvdW50X2luID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJJVF9SVU5OSU5HX0NBUFRVUkUsICZsaW5lNnBjbS0+ZmxhZ3MpKSB7CisJCQllcnIgPSBzdWJtaXRfYXVkaW9faW5fYWxsX3VyYnMoc3Vic3RyZWFtKTsKKworCQkJaWYgKGVyciA8IDApIHsKKwkJCQljbGVhcl9iaXQoQklUX1JVTk5JTkdfQ0FQVFVSRSwgJmxpbmU2cGNtLT5mbGFncyk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJJVF9SVU5OSU5HX0NBUFRVUkUsICZsaW5lNnBjbS0+ZmxhZ3MpKQorCQkJdW5saW5rX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhcHR1cmUgcG9pbnRlciBjYWxsYmFjayAqLworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfbGluZTZfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlyZXR1cm4gbGluZTZwY20tPnBvc19pbl9kb25lOworfQorCisvKiBjYXB0dXJlIG9wZXJhdG9ycyAqLworc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9jYXB0dXJlX29wcyA9IHsKKwkub3BlbiA9ICAgICAgICBzbmRfbGluZTZfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9ICAgICAgIHNuZF9saW5lNl9jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSAgIHNuZF9saW5lNl9jYXB0dXJlX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9ICAgICBzbmRfbGluZTZfY2FwdHVyZV9od19mcmVlLAorCS5wcmVwYXJlID0gICAgIHNuZF9saW5lNl9wcmVwYXJlLAorCS50cmlnZ2VyID0gICAgIHNuZF9saW5lNl90cmlnZ2VyLAorCS5wb2ludGVyID0gICAgIHNuZF9saW5lNl9jYXB0dXJlX3BvaW50ZXIsCit9OworCitpbnQgY3JlYXRlX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCWludCBpOworCisJLyogY3JlYXRlIGF1ZGlvIFVSQnMgYW5kIGZpbGwgaW4gY29uc3RhbnQgdmFsdWVzOiAqLworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQkvKiBVUkIgZm9yIGF1ZGlvIGluOiAqLworCQl1cmIgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldID0gdXNiX2FsbG9jX3VyYihMSU5FNl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXVyYi0+ZGV2ID0gbGluZTZwY20tPmxpbmU2LT51c2JkZXY7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShsaW5lNnBjbS0+bGluZTYtPnVzYmRldiwgbGluZTZwY20tPmVwX2F1ZGlvX3JlYWQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnN0YXJ0X2ZyYW1lID0gLTE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBMSU5FNl9JU09fUEFDS0VUUzsKKwkJdXJiLT5pbnRlcnZhbCA9IExJTkU2X0lTT19JTlRFUlZBTDsKKwkJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJCXVyYi0+Y29tcGxldGUgPSBhdWRpb19pbl9jYWxsYmFjazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDQ0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIENBUFRVUkVfSAorI2RlZmluZSBDQVBUVVJFX0gKKworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgInBjbS5oIgorCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2xpbmU2X2NhcHR1cmVfb3BzOworCisKK2V4dGVybiBpbnQgY3JlYXRlX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKK2V4dGVybiBpbnQgc25kX2xpbmU2X2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIGludCBjbWQpOworZXh0ZXJuIHZvaWQgdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYWQxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29uZmlnLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgQ09ORklHX0gKKyNkZWZpbmUgQ09ORklHX0gKKworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworI2RlZmluZSBERUJVRyAxCisjZW5kaWYKKworCisvKioKKyAgIERldmVsb3BtZW50IHRvb2xzLgorKi8KKyNkZWZpbmUgRE9fREVCVUdfTUVTU0FHRVMgICAgMAorI2RlZmluZSBET19EVU1QX1VSQl9TRU5EICAgICBET19ERUJVR19NRVNTQUdFUworI2RlZmluZSBET19EVU1QX1VSQl9SRUNFSVZFICBET19ERUJVR19NRVNTQUdFUworI2RlZmluZSBET19EVU1QX1BDTV9TRU5EICAgICAwCisjZGVmaW5lIERPX0RVTVBfUENNX1JFQ0VJVkUgIDAKKyNkZWZpbmUgRE9fRFVNUF9NSURJX1NFTkQgICAgRE9fREVCVUdfTUVTU0FHRVMKKyNkZWZpbmUgRE9fRFVNUF9NSURJX1JFQ0VJVkUgRE9fREVCVUdfTUVTU0FHRVMKKyNkZWZpbmUgRE9fRFVNUF9BTlkgICAgICAgICAgKERPX0RVTVBfVVJCX1NFTkQgfHwgRE9fRFVNUF9VUkJfUkVDRUlWRSB8fCBcCisJCQkgICAgICBET19EVU1QX1BDTV9TRU5EIHx8IERPX0RVTVBfUENNX1JFQ0VJVkUgfHwgXAorCQkJICAgICAgRE9fRFVNUF9NSURJX1NFTkQgfHwgRE9fRFVNUF9NSURJX1JFQ0VJVkUpCisjZGVmaW5lIENSRUFURV9SQVdfRklMRSAgICAgIDAKKworI2lmIERPX0RFQlVHX01FU1NBR0VTCisjZGVmaW5lIENIRUNLUE9JTlQgcHJpbnRrKEtFUk5fSU5GTyAibGluZTZ1c2I6ICVzICglczolZClcbiIsIFwKKwkJCSAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbmRpZgorCisjaWYgRE9fREVCVUdfTUVTU0FHRVMKKyNkZWZpbmUgREVCVUdfTUVTU0FHRVMoeCkgKHgpCisjZWxzZQorI2RlZmluZSBERUJVR19NRVNTQUdFUyh4KQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbnRyb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FkMDhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbnRyb2wuYwpAQCAtMCwwICsxLDg0MCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInBvZC5oIgorI2luY2x1ZGUgInVzYmRlZnMuaCIKKyNpbmNsdWRlICJ2YXJpYXguaCIKKworI2RlZmluZSBERVZJQ0VfQVRUUjIoX25hbWUxLCBfbmFtZTIsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSBcCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lMSA9IF9fQVRUUihfbmFtZTIsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQorCisjZGVmaW5lIExJTkU2X1BBUkFNX1IoUFJFRklYLCBwcmVmaXgsIHR5cGUsIHBhcmFtKSBcCitzdGF0aWMgc3NpemVfdCBwcmVmaXggIyMgX2dldF8gIyMgcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlyZXR1cm4gcHJlZml4ICMjIF9nZXRfcGFyYW1fICMjIHR5cGUoZGV2LCBidWYsIFBSRUZJWCAjIyBfICMjIHBhcmFtKTsgXAorfQorCisjZGVmaW5lIExJTkU2X1BBUkFNX1JXKFBSRUZJWCwgcHJlZml4LCB0eXBlLCBwYXJhbSkgXAorTElORTZfUEFSQU1fUihQUkVGSVgsIHByZWZpeCwgdHlwZSwgcGFyYW0pOyBcCitzdGF0aWMgc3NpemVfdCBwcmVmaXggIyMgX3NldF8gIyMgcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoreyBcCisJcmV0dXJuIHByZWZpeCAjIyBfc2V0X3BhcmFtXyAjIyB0eXBlKGRldiwgYnVmLCBjb3VudCwgUFJFRklYICMjIF8gIyMgcGFyYW0pOyBcCit9CisKKyNkZWZpbmUgUE9EX1BBUkFNX1IodHlwZSwgcGFyYW0pIExJTkU2X1BBUkFNX1IoUE9ELCBwb2QsIHR5cGUsIHBhcmFtKQorI2RlZmluZSBQT0RfUEFSQU1fUlcodHlwZSwgcGFyYW0pIExJTkU2X1BBUkFNX1JXKFBPRCwgcG9kLCB0eXBlLCBwYXJhbSkKKyNkZWZpbmUgVkFSSUFYX1BBUkFNX1IodHlwZSwgcGFyYW0pIExJTkU2X1BBUkFNX1IoVkFSSUFYLCB2YXJpYXgsIHR5cGUsIHBhcmFtKQorI2RlZmluZSBWQVJJQVhfUEFSQU1fUlcodHlwZSwgcGFyYW0pIExJTkU2X1BBUkFNX1JXKFZBUklBWCwgdmFyaWF4LCB0eXBlLCBwYXJhbSkKKworCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X3BhcmFtX2ludChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IHBhcmFtKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZwb2QtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPnByb2dfZGF0YS5jb250cm9sW3BhcmFtXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfcGFyYW1faW50KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJcG9kX3RyYW5zbWl0X3BhcmFtZXRlcihwb2QsIHBhcmFtLCB2YWx1ZSk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X3BhcmFtX2ludChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IHBhcmFtKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZ2YXJpYXgtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbFtwYXJhbV0pOworfQorCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X3BhcmFtX2Zsb2F0KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgcGFyYW0pCit7CisJLyoKKwkJV2UgZG8gb3VyIG93biBmbG9hdGluZyBwb2ludCBoYW5kbGluZyBoZXJlIHNpbmNlIGZsb2F0cyBpbiB0aGUKKwkJa2VybmVsIGFyZSBwcm9ibGVtYXRpYyBmb3IgYXQgbGVhc3QgdHdvIHJlYXNvbnM6IC0gbWFueSBkaXN0cm9zCisJCWFyZSBzdGlsbCBzaGlwcGVkIHdpdGggYmluYXJ5IGtlcm5lbHMgb3B0aW1pemVkIGZvciB0aGUgYW5jaWVudAorCQk4MDM4NiB3aXRob3V0IEZQVQorCQktIHRoZXJlIGlzbid0IGEgcHJpbnRmKCIlZiIpCisJCSAgKHNlZSBodHRwOi8vd3d3Lmtlcm5lbHRocmVhZC5jb20vcHVibGljYXRpb25zL2ZhcS8zMzUuaHRtbCkKKwkqLworCisJc3RhdGljIGNvbnN0IGludCBCSUFTID0gMHg3ZjsKKwlzdGF0aWMgY29uc3QgaW50IE9GRlNFVCA9IDB4ZjsKKwlzdGF0aWMgY29uc3QgaW50IFBSRUNJU0lPTiA9IDEwMDA7CisKKwlpbnQgbGVuID0gMDsKKwl1bnNpZ25lZCBwYXJ0X2ludCwgcGFydF9mcmFjOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gdmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wgKyBwYXJhbTsKKwlpbnQgcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZ2YXJpYXgtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKChwWzBdID09IDApICYmIChwWzFdID09IDApICYmIChwWzJdID09IDApKQorCQlwYXJ0X2ludCA9IHBhcnRfZnJhYyA9IDA7CisJZWxzZSB7CisJCWludCBleHBvbmVudCA9ICgoKHBbMF0gJiAweDdmKSA8PCAxKSB8IChwWzFdID4+IDcpKSAtIEJJQVM7CisJCXVuc2lnbmVkIG1hbnRpc3NhID0gKHBbMV0gPDwgOCkgfCBwWzJdIHwgMHg4MDAwOworCQlleHBvbmVudCAtPSBPRkZTRVQ7CisKKwkJaWYgKGV4cG9uZW50ID49IDApIHsKKwkJCXBhcnRfaW50ID0gbWFudGlzc2EgPDwgZXhwb25lbnQ7CisJCQlwYXJ0X2ZyYWMgPSAwOworCQl9IGVsc2UgeworCQkJcGFydF9pbnQgPSBtYW50aXNzYSA+PiAtZXhwb25lbnQ7CisJCQlwYXJ0X2ZyYWMgPSAobWFudGlzc2EgPDwgKDMyICsgZXhwb25lbnQpKSAmIDB4ZmZmZmZmZmY7CisJCX0KKworCQlwYXJ0X2ZyYWMgPSAocGFydF9mcmFjIC8gKCgxVUwgPDwgMzEpIC8gKFBSRUNJU0lPTiAvIDIgKiAxMCkpICsgNSkgLyAxMDsKKwl9CisKKwlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlcyVkLiUwM2RcbiIsICgocFswXSAmIDB4ODApID8gIi0iIDogIiIpLCBwYXJ0X2ludCwgcGFydF9mcmFjKTsKKwlyZXR1cm4gbGVuOworfQorCitQT0RfUEFSQU1fUlcoaW50LCB0d2Vhayk7CitQT0RfUEFSQU1fUlcoaW50LCB3YWhfcG9zaXRpb24pOworUE9EX1BBUkFNX1JXKGludCwgY29tcHJlc3Npb25fZ2Fpbik7CitQT0RfUEFSQU1fUlcoaW50LCB2b2xfcGVkYWxfcG9zaXRpb24pOworUE9EX1BBUkFNX1JXKGludCwgY29tcHJlc3Npb25fdGhyZXNob2xkKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHBhbik7CitQT0RfUEFSQU1fUlcoaW50LCBhbXBfbW9kZWxfc2V0dXApOworUE9EX1BBUkFNX1JXKGludCwgYW1wX21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRyaXZlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhc3MpOworUE9EX1BBUkFNX1JXKGludCwgbWlkKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGxvd21pZCk7CitQT0RfUEFSQU1fUlcoaW50LCB0cmVibGUpOworUE9EX1BBUkFNX1JXKGludCwgaGlnaG1pZCk7CitQT0RfUEFSQU1fUlcoaW50LCBjaGFuX3ZvbCk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfbWl4KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGVmZmVjdF9zZXR1cCk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzFfZnJlcXVlbmN5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHByZXNlbmNlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHRyZWJsZV9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBub2lzZV9nYXRlX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBnYXRlX3RocmVzaG9sZCk7CitQT0RfUEFSQU1fUlcoaW50LCBnYXRlX2RlY2F5X3RpbWUpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGNvbXBfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3RpbWUpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV8xKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzEpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfMl9mcmVxdWVuY3lfX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fMik7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV92b2x1bWVfbWl4KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzMpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfdHlwZSk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfZGVjYXkpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX3RvbmUpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX3ByZV9kZWxheSk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfcHJlX3Bvc3QpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8yX2ZyZXF1ZW5jeSk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzNfZnJlcXVlbmN5X19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHdhaF9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgbW9kdWxhdGlvbl9sb19jdXQpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcmV2ZXJiX2xvX2N1dCk7CitQT0RfUEFSQU1fUlcoaW50LCB2b2x1bWVfcGVkYWxfbWluaW11bSk7CitQT0RfUEFSQU1fUlcoaW50LCBlcV9wcmVfcG9zdCk7CitQT0RfUEFSQU1fUlcoaW50LCB2b2x1bWVfcHJlX3Bvc3QpOworUE9EX1BBUkFNX1JXKGludCwgZGlfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgZGlfZGVsYXkpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV8yKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV8zKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV80KTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV81KTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF92b2x1bWVfbWl4KTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wcmVfcG9zdCk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2R1bGF0aW9uX21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfM19mcmVxdWVuY3kpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbik7CitQT0RfUEFSQU1fUlcoaW50LCBlcV9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgdGFwKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24pOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF81X2ZyZXF1ZW5jeSk7CitQT0RfUEFSQU1fUlcoaW50LCB0dW5lcik7CitQT0RfUEFSQU1fUlcoaW50LCBtaWNfc2VsZWN0aW9uKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGNhYmluZXRfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgcm9vbWxldmVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNF9mcmVxdWVuY3kpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF82X2ZyZXF1ZW5jeSk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfcGFyYW1fMik7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9wYXJhbV8zKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3BhcmFtXzQpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfcGFyYW1fNSk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9wYXJhbV82KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGFtcF9zd2l0Y2hfc2VsZWN0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzQpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fNSk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wcmVfcG9zdCk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV92ZXJiX21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHRlbXBvX21zYik7CitQT0RfUEFSQU1fUlcoaW50LCB0ZW1wb19sc2IpOworUE9EX1BBUkFNX1JXKGludCwgd2FoX21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJ5cGFzc192b2x1bWUpOworUE9EX1BBUkFNX1JXKGludCwgZnhfbG9vcF9vbl9vZmYpOworUE9EX1BBUkFNX1JXKGludCwgdHdlYWtfcGFyYW1fc2VsZWN0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGFtcDFfZW5nYWdlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfMV9nYWluKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfMl9nYWluX19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfMl9nYWluKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfM19nYWluX19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfM19nYWluKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNF9nYWluX19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNV9nYWluX19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNF9nYWluKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNl9nYWluX19iYXNzKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgYm9keSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHBpY2t1cDFfZW5hYmxlKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgcGlja3VwMV90eXBlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBwaWNrdXAxX3Bvc2l0aW9uKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBwaWNrdXAxX2FuZ2xlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBwaWNrdXAxX2xldmVsKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgcGlja3VwMl9lbmFibGUpOworVkFSSUFYX1BBUkFNX1IoaW50LCBwaWNrdXAyX3R5cGUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHBpY2t1cDJfcG9zaXRpb24pOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHBpY2t1cDJfYW5nbGUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHBpY2t1cDJfbGV2ZWwpOworVkFSSUFYX1BBUkFNX1IoaW50LCBwaWNrdXBfcGhhc2UpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGNhcGFjaXRhbmNlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCB0b25lX3Jlc2lzdGFuY2UpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHZvbHVtZV9yZXNpc3RhbmNlKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdGFwZXIpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHRvbmVfZHVtcCk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHNhdmVfdG9uZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgdm9sdW1lX2R1bXApOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmdfZW5hYmxlKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nNik7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZzUpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmc0KTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nMyk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZzIpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmcxKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBkZXR1bmU2KTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBkZXR1bmU1KTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBkZXR1bmU0KTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBkZXR1bmUzKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBkZXR1bmUyKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBkZXR1bmUxKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBtaXg2KTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBtaXg1KTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBtaXg0KTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBtaXgzKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBtaXgyKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBtaXgxKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgcGlja3VwX3dpcmluZyk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0d2VhaywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHdlYWssIHBvZF9zZXRfdHdlYWspOworc3RhdGljIERFVklDRV9BVFRSKHdhaF9wb3NpdGlvbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfd2FoX3Bvc2l0aW9uLCBwb2Rfc2V0X3dhaF9wb3NpdGlvbik7CitzdGF0aWMgREVWSUNFX0FUVFIoY29tcHJlc3Npb25fZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfY29tcHJlc3Npb25fZ2FpbiwgcG9kX3NldF9jb21wcmVzc2lvbl9nYWluKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2xfcGVkYWxfcG9zaXRpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3ZvbF9wZWRhbF9wb3NpdGlvbiwgcG9kX3NldF92b2xfcGVkYWxfcG9zaXRpb24pOworc3RhdGljIERFVklDRV9BVFRSKGNvbXByZXNzaW9uX3RocmVzaG9sZCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfY29tcHJlc3Npb25fdGhyZXNob2xkLCBwb2Rfc2V0X2NvbXByZXNzaW9uX3RocmVzaG9sZCk7CitzdGF0aWMgREVWSUNFX0FUVFIocGFuLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9wYW4sIHBvZF9zZXRfcGFuKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhbXBfbW9kZWxfc2V0dXAsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2FtcF9tb2RlbF9zZXR1cCwgcG9kX3NldF9hbXBfbW9kZWxfc2V0dXApOworc3RhdGljIERFVklDRV9BVFRSKGFtcF9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYW1wX21vZGVsLCBwb2Rfc2V0X2FtcF9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZHJpdmUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RyaXZlLCBwb2Rfc2V0X2RyaXZlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYXNzLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYXNzLCBwb2Rfc2V0X2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKG1pZCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbWlkLCBwb2Rfc2V0X21pZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobG93bWlkLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9sb3dtaWQsIHBvZF9zZXRfbG93bWlkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0cmVibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3RyZWJsZSwgcG9kX3NldF90cmVibGUpOworc3RhdGljIERFVklDRV9BVFRSKGhpZ2htaWQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2hpZ2htaWQsIHBvZF9zZXRfaGlnaG1pZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2hhbl92b2wsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2NoYW5fdm9sLCBwb2Rfc2V0X2NoYW5fdm9sKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfbWl4LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfbWl4LCBwb2Rfc2V0X3JldmVyYl9taXgpOworc3RhdGljIERFVklDRV9BVFRSKGVmZmVjdF9zZXR1cCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZWZmZWN0X3NldHVwLCBwb2Rfc2V0X2VmZmVjdF9zZXR1cCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF8xX2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8xX2ZyZXF1ZW5jeSwgcG9kX3NldF9iYW5kXzFfZnJlcXVlbmN5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwcmVzZW5jZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcHJlc2VuY2UsIHBvZF9zZXRfcHJlc2VuY2UpOworc3RhdGljIERFVklDRV9BVFRSMih0cmVibGVfX2Jhc3MsIHRyZWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHJlYmxlX19iYXNzLCBwb2Rfc2V0X3RyZWJsZV9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIobm9pc2VfZ2F0ZV9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X25vaXNlX2dhdGVfZW5hYmxlLCBwb2Rfc2V0X25vaXNlX2dhdGVfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihnYXRlX3RocmVzaG9sZCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZ2F0ZV90aHJlc2hvbGQsIHBvZF9zZXRfZ2F0ZV90aHJlc2hvbGQpOworc3RhdGljIERFVklDRV9BVFRSKGdhdGVfZGVjYXlfdGltZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZ2F0ZV9kZWNheV90aW1lLCBwb2Rfc2V0X2dhdGVfZGVjYXlfdGltZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9lbmFibGUsIHBvZF9zZXRfc3RvbXBfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb21wX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfY29tcF9lbmFibGUsIHBvZF9zZXRfY29tcF9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3RpbWUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3RpbWUsIHBvZF9zZXRfc3RvbXBfdGltZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9lbmFibGUsIHBvZF9zZXRfZGVsYXlfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fMSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzEsIHBvZF9zZXRfbW9kX3BhcmFtXzEpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzEsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzEsIHBvZF9zZXRfZGVsYXlfcGFyYW1fMSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV8xX25vdGVfdmFsdWUsIHBvZF9zZXRfZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcywgYmFuZF8yX2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcywgcG9kX3NldF9iYW5kXzJfZnJlcXVlbmN5X19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV8yLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV8yLCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzIpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3ZvbHVtZV9taXgsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3ZvbHVtZV9taXgsIHBvZF9zZXRfZGVsYXlfdm9sdW1lX21peCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fMywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fMywgcG9kX3NldF9kZWxheV9wYXJhbV8zKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfZW5hYmxlLCBwb2Rfc2V0X3JldmVyYl9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl90eXBlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfdHlwZSwgcG9kX3NldF9yZXZlcmJfdHlwZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX2RlY2F5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfZGVjYXksIHBvZF9zZXRfcmV2ZXJiX2RlY2F5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfdG9uZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX3RvbmUsIHBvZF9zZXRfcmV2ZXJiX3RvbmUpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl9wcmVfZGVsYXksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl9wcmVfZGVsYXksIHBvZF9zZXRfcmV2ZXJiX3ByZV9kZWxheSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX3ByZV9wb3N0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfcHJlX3Bvc3QsIHBvZF9zZXRfcmV2ZXJiX3ByZV9wb3N0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzJfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzJfZnJlcXVlbmN5LCBwb2Rfc2V0X2JhbmRfMl9mcmVxdWVuY3kpOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzNfZnJlcXVlbmN5X19iYXNzLCBiYW5kXzNfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzNfZnJlcXVlbmN5X19iYXNzLCBwb2Rfc2V0X2JhbmRfM19mcmVxdWVuY3lfX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKHdhaF9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3dhaF9lbmFibGUsIHBvZF9zZXRfd2FoX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kdWxhdGlvbl9sb19jdXQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZHVsYXRpb25fbG9fY3V0LCBwb2Rfc2V0X21vZHVsYXRpb25fbG9fY3V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9yZXZlcmJfbG9fY3V0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9yZXZlcmJfbG9fY3V0LCBwb2Rfc2V0X2RlbGF5X3JldmVyYl9sb19jdXQpOworc3RhdGljIERFVklDRV9BVFRSKHZvbHVtZV9wZWRhbF9taW5pbXVtLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF92b2x1bWVfcGVkYWxfbWluaW11bSwgcG9kX3NldF92b2x1bWVfcGVkYWxfbWluaW11bSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZXFfcHJlX3Bvc3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2VxX3ByZV9wb3N0LCBwb2Rfc2V0X2VxX3ByZV9wb3N0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2x1bWVfcHJlX3Bvc3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3ZvbHVtZV9wcmVfcG9zdCwgcG9kX3NldF92b2x1bWVfcHJlX3Bvc3QpOworc3RhdGljIERFVklDRV9BVFRSKGRpX21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kaV9tb2RlbCwgcG9kX3NldF9kaV9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGlfZGVsYXksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RpX2RlbGF5LCBwb2Rfc2V0X2RpX2RlbGF5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfZW5hYmxlLCBwb2Rfc2V0X21vZF9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV8xX25vdGVfdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV8xX25vdGVfdmFsdWUsIHBvZF9zZXRfbW9kX3BhcmFtXzFfbm90ZV92YWx1ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzIsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV8yLCBwb2Rfc2V0X21vZF9wYXJhbV8yKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fMywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzMsIHBvZF9zZXRfbW9kX3BhcmFtXzMpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV80LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fNCwgcG9kX3NldF9tb2RfcGFyYW1fNCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV81LCBwb2Rfc2V0X21vZF9wYXJhbV81KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2Rfdm9sdW1lX21peCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3ZvbHVtZV9taXgsIHBvZF9zZXRfbW9kX3ZvbHVtZV9taXgpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wcmVfcG9zdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3ByZV9wb3N0LCBwb2Rfc2V0X21vZF9wcmVfcG9zdCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kdWxhdGlvbl9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kdWxhdGlvbl9tb2RlbCwgcG9kX3NldF9tb2R1bGF0aW9uX21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzNfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzNfZnJlcXVlbmN5LCBwb2Rfc2V0X2JhbmRfM19mcmVxdWVuY3kpOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzRfZnJlcXVlbmN5X19iYXNzLCBiYW5kXzRfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzRfZnJlcXVlbmN5X19iYXNzLCBwb2Rfc2V0X2JhbmRfNF9mcmVxdWVuY3lfX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24sIHBvZF9zZXRfbW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbik7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24sIHBvZF9zZXRfZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlcV9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2VxX2VuYWJsZSwgcG9kX3NldF9lcV9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKHRhcCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdGFwLCBwb2Rfc2V0X3RhcCk7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbiwgcG9kX3NldF92b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzVfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzVfZnJlcXVlbmN5LCBwb2Rfc2V0X2JhbmRfNV9mcmVxdWVuY3kpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmVyLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90dW5lciwgcG9kX3NldF90dW5lcik7CitzdGF0aWMgREVWSUNFX0FUVFIobWljX3NlbGVjdGlvbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbWljX3NlbGVjdGlvbiwgcG9kX3NldF9taWNfc2VsZWN0aW9uKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYWJpbmV0X21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9jYWJpbmV0X21vZGVsLCBwb2Rfc2V0X2NhYmluZXRfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9tb2RlbCwgcG9kX3NldF9zdG9tcF9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIocm9vbWxldmVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yb29tbGV2ZWwsIHBvZF9zZXRfcm9vbWxldmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzRfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzRfZnJlcXVlbmN5LCBwb2Rfc2V0X2JhbmRfNF9mcmVxdWVuY3kpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfNl9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNl9mcmVxdWVuY3ksIHBvZF9zZXRfYmFuZF82X2ZyZXF1ZW5jeSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUsIHBvZF9zZXRfc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9wYXJhbV8yLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9wYXJhbV8yLCBwb2Rfc2V0X3N0b21wX3BhcmFtXzIpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3BhcmFtXzMsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3BhcmFtXzMsIHBvZF9zZXRfc3RvbXBfcGFyYW1fMyk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfcGFyYW1fNCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfcGFyYW1fNCwgcG9kX3NldF9zdG9tcF9wYXJhbV80KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9wYXJhbV81LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9wYXJhbV81LCBwb2Rfc2V0X3N0b21wX3BhcmFtXzUpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3BhcmFtXzYsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3BhcmFtXzYsIHBvZF9zZXRfc3RvbXBfcGFyYW1fNik7CitzdGF0aWMgREVWSUNFX0FUVFIoYW1wX3N3aXRjaF9zZWxlY3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2FtcF9zd2l0Y2hfc2VsZWN0LCBwb2Rfc2V0X2FtcF9zd2l0Y2hfc2VsZWN0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV80LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV80LCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzQpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzUsIHBvZF9zZXRfZGVsYXlfcGFyYW1fNSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcHJlX3Bvc3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3ByZV9wb3N0LCBwb2Rfc2V0X2RlbGF5X3ByZV9wb3N0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfbW9kZWwsIHBvZF9zZXRfZGVsYXlfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3ZlcmJfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3ZlcmJfbW9kZWwsIHBvZF9zZXRfZGVsYXlfdmVyYl9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcG9fbXNiLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90ZW1wb19tc2IsIHBvZF9zZXRfdGVtcG9fbXNiKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wb19sc2IsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3RlbXBvX2xzYiwgcG9kX3NldF90ZW1wb19sc2IpOworc3RhdGljIERFVklDRV9BVFRSKHdhaF9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfd2FoX21vZGVsLCBwb2Rfc2V0X3dhaF9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYnlwYXNzX3ZvbHVtZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYnlwYXNzX3ZvbHVtZSwgcG9kX3NldF9ieXBhc3Nfdm9sdW1lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmeF9sb29wX29uX29mZiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZnhfbG9vcF9vbl9vZmYsIHBvZF9zZXRfZnhfbG9vcF9vbl9vZmYpOworc3RhdGljIERFVklDRV9BVFRSKHR3ZWFrX3BhcmFtX3NlbGVjdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHdlYWtfcGFyYW1fc2VsZWN0LCBwb2Rfc2V0X3R3ZWFrX3BhcmFtX3NlbGVjdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYW1wMV9lbmdhZ2UsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2FtcDFfZW5nYWdlLCBwb2Rfc2V0X2FtcDFfZW5nYWdlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzFfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8xX2dhaW4sIHBvZF9zZXRfYmFuZF8xX2dhaW4pOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzJfZ2Fpbl9fYmFzcywgYmFuZF8yX2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfMl9nYWluX19iYXNzLCBwb2Rfc2V0X2JhbmRfMl9nYWluX19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzJfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8yX2dhaW4sIHBvZF9zZXRfYmFuZF8yX2dhaW4pOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzNfZ2Fpbl9fYmFzcywgYmFuZF8zX2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfM19nYWluX19iYXNzLCBwb2Rfc2V0X2JhbmRfM19nYWluX19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzNfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8zX2dhaW4sIHBvZF9zZXRfYmFuZF8zX2dhaW4pOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzRfZ2Fpbl9fYmFzcywgYmFuZF80X2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNF9nYWluX19iYXNzLCBwb2Rfc2V0X2JhbmRfNF9nYWluX19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF81X2dhaW5fX2Jhc3MsIGJhbmRfNV9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzVfZ2Fpbl9fYmFzcywgcG9kX3NldF9iYW5kXzVfZ2Fpbl9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF80X2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNF9nYWluLCBwb2Rfc2V0X2JhbmRfNF9nYWluKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF82X2dhaW5fX2Jhc3MsIGJhbmRfNl9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzZfZ2Fpbl9fYmFzcywgcG9kX3NldF9iYW5kXzZfZ2Fpbl9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIoYm9keSwgU19JUlVHTywgdmFyaWF4X2dldF9ib2R5LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDFfZW5hYmxlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDFfZW5hYmxlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDFfdHlwZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAxX3R5cGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMV9wb3NpdGlvbiwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAxX3Bvc2l0aW9uLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDFfYW5nbGUsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMV9hbmdsZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAxX2xldmVsLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDFfbGV2ZWwsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMl9lbmFibGUsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMl9lbmFibGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMl90eXBlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDJfdHlwZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAyX3Bvc2l0aW9uLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDJfcG9zaXRpb24sIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMl9hbmdsZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAyX2FuZ2xlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDJfbGV2ZWwsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMl9sZXZlbCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXBfcGhhc2UsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwX3BoYXNlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGNhcGFjaXRhbmNlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2NhcGFjaXRhbmNlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHRvbmVfcmVzaXN0YW5jZSwgU19JUlVHTywgdmFyaWF4X2dldF90b25lX3Jlc2lzdGFuY2UsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sdW1lX3Jlc2lzdGFuY2UsIFNfSVJVR08sIHZhcmlheF9nZXRfdm9sdW1lX3Jlc2lzdGFuY2UsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodGFwZXIsIFNfSVJVR08sIHZhcmlheF9nZXRfdGFwZXIsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodG9uZV9kdW1wLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3RvbmVfZHVtcCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzYXZlX3RvbmUsIFNfSVJVR08sIHZhcmlheF9nZXRfc2F2ZV90b25lLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHZvbHVtZV9kdW1wLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3ZvbHVtZV9kdW1wLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZ19lbmFibGUsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nX2VuYWJsZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmc2LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZzYsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nNSwgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmc1LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZzQsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nNCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmczLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZzMsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nMiwgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmcyLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZzEsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nMSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXR1bmU2LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2RldHVuZTYsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0dW5lNSwgU19JUlVHTywgdmFyaWF4X2dldF9kZXR1bmU1LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldHVuZTQsIFNfSVJVR08sIHZhcmlheF9nZXRfZGV0dW5lNCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXR1bmUzLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2RldHVuZTMsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0dW5lMiwgU19JUlVHTywgdmFyaWF4X2dldF9kZXR1bmUyLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldHVuZTEsIFNfSVJVR08sIHZhcmlheF9nZXRfZGV0dW5lMSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaXg2LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21peDYsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWl4NSwgU19JUlVHTywgdmFyaWF4X2dldF9taXg1LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1peDQsIFNfSVJVR08sIHZhcmlheF9nZXRfbWl4NCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaXgzLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21peDMsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWl4MiwgU19JUlVHTywgdmFyaWF4X2dldF9taXgyLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1peDEsIFNfSVJVR08sIHZhcmlheF9nZXRfbWl4MSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXBfd2lyaW5nLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cF93aXJpbmcsIGxpbmU2X25vcF93cml0ZSk7CisKK2ludCBwb2RfY3JlYXRlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHdlYWspKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3dhaF9wb3NpdGlvbikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jb21wcmVzc2lvbl9nYWluKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2xfcGVkYWxfcG9zaXRpb24pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NvbXByZXNzaW9uX3RocmVzaG9sZCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGFuKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXBfbW9kZWxfc2V0dXApKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcF9tb2RlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHJpdmUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2Jhc3MpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWlkKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9sb3dtaWQpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHJlYmxlKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9oaWdobWlkKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jaGFuX3ZvbCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfbWl4KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lZmZlY3Rfc2V0dXApKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMV9mcmVxdWVuY3kpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJlc2VuY2UpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RyZWJsZV9fYmFzcykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbm9pc2VfZ2F0ZV9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2dhdGVfdGhyZXNob2xkKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9nYXRlX2RlY2F5X3RpbWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29tcF9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3RpbWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzEpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzEpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9mcmVxdWVuY3lfX2Jhc3MpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3ZvbHVtZV9taXgpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzMpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX2VuYWJsZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfdHlwZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfZGVjYXkpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3RvbmUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3ByZV9kZWxheSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfcHJlX3Bvc3QpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9mcmVxdWVuY3kpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZnJlcXVlbmN5X19iYXNzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl93YWhfZW5hYmxlKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2R1bGF0aW9uX2xvX2N1dCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcmV2ZXJiX2xvX2N1dCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3BlZGFsX21pbmltdW0pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lcV9wcmVfcG9zdCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3ByZV9wb3N0KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kaV9tb2RlbCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlfZGVsYXkpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8xX25vdGVfdmFsdWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8yKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzQpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV81KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2Rfdm9sdW1lX21peCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3ByZV9wb3N0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2R1bGF0aW9uX21vZGVsKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZnJlcXVlbmN5KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKSk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lcV9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RhcCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNV9mcmVxdWVuY3kpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taWNfc2VsZWN0aW9uKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jYWJpbmV0X21vZGVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9tb2RlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcm9vbWxldmVsKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZnJlcXVlbmN5KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF82X2ZyZXF1ZW5jeSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV8yKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV8zKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV80KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV81KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV82KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfTElWRSkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wX3N3aXRjaF9zZWxlY3QpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3ByZV9wb3N0KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X21vZGVsKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV92ZXJiX21vZGVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wb19tc2IpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXBvX2xzYikpOworCWlmIChmaXJtd2FyZSA+PSAzMDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2FoX21vZGVsKSk7CisJaWYgKGZpcm13YXJlID49IDIxNCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9ieXBhc3Nfdm9sdW1lKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUFJPKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9meF9sb29wX29uX29mZikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHdlYWtfcGFyYW1fc2VsZWN0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXAxX2VuZ2FnZSkpOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8xX2dhaW4pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZ2Fpbl9fYmFzcykpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2dhaW4pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZ2Fpbl9fYmFzcykpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2dhaW4pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZ2Fpbl9fYmFzcykpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNV9nYWluX19iYXNzKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZ2FpbikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNl9nYWluX19iYXNzKSk7CisgIHJldHVybiAwOworfQorCit2b2lkIHBvZF9yZW1vdmVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90d2Vhayk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3dhaF9wb3NpdGlvbik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29tcHJlc3Npb25fZ2Fpbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbF9wZWRhbF9wb3NpdGlvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NvbXByZXNzaW9uX3RocmVzaG9sZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Bhbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcF9tb2RlbF9zZXR1cCk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcF9tb2RlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RyaXZlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFzcyk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWlkKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbG93bWlkKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90cmVibGUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9oaWdobWlkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2hhbl92b2wpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9taXgpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9lZmZlY3Rfc2V0dXApOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzFfZnJlcXVlbmN5KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wcmVzZW5jZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RyZWJsZV9fYmFzcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX25vaXNlX2dhdGVfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZ2F0ZV90aHJlc2hvbGQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9nYXRlX2RlY2F5X3RpbWUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jb21wX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3RpbWUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzEpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8xX25vdGVfdmFsdWUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV92b2x1bWVfbWl4KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMyk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX2VuYWJsZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3R5cGUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9kZWNheSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3RvbmUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9wcmVfZGVsYXkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9wcmVfcG9zdCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9mcmVxdWVuY3kpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3dhaF9lbmFibGUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2R1bGF0aW9uX2xvX2N1dCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3JldmVyYl9sb19jdXQpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfcGVkYWxfbWluaW11bSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9lcV9wcmVfcG9zdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9wcmVfcG9zdCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpX21vZGVsKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlfZGVsYXkpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzFfbm90ZV92YWx1ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8yKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fNCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV81KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3ZvbHVtZV9taXgpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcHJlX3Bvc3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2R1bGF0aW9uX21vZGVsKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2ZyZXF1ZW5jeSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZnJlcXVlbmN5X19iYXNzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbik7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2VxX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RhcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF81X2ZyZXF1ZW5jeSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljX3NlbGVjdGlvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NhYmluZXRfbW9kZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9tb2RlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Jvb21sZXZlbCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9mcmVxdWVuY3kpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF82X2ZyZXF1ZW5jeSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV8zKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fNCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV82KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19MSVZFKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcF9zd2l0Y2hfc2VsZWN0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fNCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wcmVfcG9zdCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfbW9kZWwpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV92ZXJiX21vZGVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcG9fbXNiKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcG9fbHNiKTsKKwlpZiAoZmlybXdhcmUgPj0gMzAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2FoX21vZGVsKTsKKwlpZiAoZmlybXdhcmUgPj0gMjE0KQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYnlwYXNzX3ZvbHVtZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUFJPKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2Z4X2xvb3Bfb25fb2ZmKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHdlYWtfcGFyYW1fc2VsZWN0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wMV9lbmdhZ2UpOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzFfZ2Fpbik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZ2Fpbl9fYmFzcyk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9nYWluKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19nYWluX19iYXNzKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2dhaW4pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2dhaW5fX2Jhc3MpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF81X2dhaW5fX2Jhc3MpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZ2Fpbik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzZfZ2Fpbl9fYmFzcyk7Cit9CisKK0VYUE9SVF9TWU1CT0wocG9kX2NyZWF0ZV9maWxlcyk7CitFWFBPUlRfU1lNQk9MKHBvZF9yZW1vdmVfZmlsZXMpOworCitpbnQgdmFyaWF4X2NyZWF0ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JvZHkpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX3R5cGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfcG9zaXRpb24pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfYW5nbGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfbGV2ZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX3R5cGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfcG9zaXRpb24pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfYW5nbGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfbGV2ZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cF9waGFzZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2FwYWNpdGFuY2UpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RvbmVfcmVzaXN0YW5jZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3Jlc2lzdGFuY2UpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RhcGVyKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90b25lX2R1bXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3NhdmVfdG9uZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX2R1bXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZ19lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzYpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzMpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzEpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTYpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTMpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTEpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDYpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDMpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDEpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cF93aXJpbmcpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmFyaWF4X3JlbW92ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JvZHkpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfdHlwZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfcG9zaXRpb24pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX2FuZ2xlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9sZXZlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl90eXBlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9wb3NpdGlvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfYW5nbGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX2xldmVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwX3BoYXNlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2FwYWNpdGFuY2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90b25lX3Jlc2lzdGFuY2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfcmVzaXN0YW5jZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RhcGVyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdG9uZV9kdW1wKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2F2ZV90b25lKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX2R1bXApOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmdfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nNik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmc0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nMyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmcxKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lNik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmU0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lMyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmUxKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4Nik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taXg0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4Myk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taXgxKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwX3dpcmluZyk7Cit9CisKK0VYUE9SVF9TWU1CT0wodmFyaWF4X2NyZWF0ZV9maWxlcyk7CitFWFBPUlRfU1lNQk9MKHZhcmlheF9yZW1vdmVfZmlsZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbnRyb2wuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxOTY2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb250cm9sLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIExJTkU2X0NPTlRST0xfSAorI2RlZmluZSBMSU5FNl9DT05UUk9MX0gKKworCisvKioKKyAgIExpc3Qgb2YgUE9EeHQgUHJvIGNvbnRyb2xzLgorICAgU2VlIEFwcGVuZGl4IEMgb2YgdGhlICJQT0R4dCAoUHJvKSBQaWxvdCdzIEhhbmRib29rIiBieSBMaW5lNi4KKyAgIENvbW1lbnRzIGFmdGVyIHRoZSBudW1iZXIgcmVmZXIgdG8gdGhlIFBPRHh0IFBybyBmaXJtd2FyZSB2ZXJzaW9uIHJlcXVpcmVkCisgICBmb3IgdGhpcyBmZWF0dXJlLgorKi8KK2VudW0geworCVBPRF90d2VhayAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgIDEsCisJUE9EX3dhaF9wb3NpdGlvbiAgICAgICAgICAgICAgICAgICA9ICAgNCwKKwlQT0RfY29tcHJlc3Npb25fZ2FpbiAgICAgICAgICAgICAgID0gICA1LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3ZvbF9wZWRhbF9wb3NpdGlvbiAgICAgICAgICAgICA9ICAgNywKKwlQT0RfY29tcHJlc3Npb25fdGhyZXNob2xkICAgICAgICAgID0gICA5LAorCVBPRF9wYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTAsCisJUE9EX2FtcF9tb2RlbF9zZXR1cCAgICAgICAgICAgICAgICA9ICAxMSwKKwlQT0RfYW1wX21vZGVsICAgICAgICAgICAgICAgICAgICAgID0gIDEyLCAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9kcml2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTMsCisJUE9EX2Jhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAxNCwKKwlQT0RfbWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIDE1LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX2xvd21pZCAgICAgICAgICAgICAgICAgICAgICAgICA9ICAxNSwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfdHJlYmxlICAgICAgICAgICAgICAgICAgICAgICAgID0gIDE2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX2hpZ2htaWQgICAgICAgICAgICAgICAgICAgICAgICA9ICAxNiwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfY2hhbl92b2wgICAgICAgICAgICAgICAgICAgICAgID0gIDE3LAorCVBPRF9yZXZlcmJfbWl4ICAgICAgICAgICAgICAgICAgICAgPSAgMTgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfZWZmZWN0X3NldHVwICAgICAgICAgICAgICAgICAgID0gIDE5LAorCVBPRF9iYW5kXzFfZnJlcXVlbmN5ICAgICAgICAgICAgICAgPSAgMjAsICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX3ByZXNlbmNlICAgICAgICAgICAgICAgICAgICAgICA9ICAyMSwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF90cmVibGVfX2Jhc3MgICAgICAgICAgICAgICAgICAgPSAgMjEsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX25vaXNlX2dhdGVfZW5hYmxlICAgICAgICAgICAgICA9ICAyMiwKKwlQT0RfZ2F0ZV90aHJlc2hvbGQgICAgICAgICAgICAgICAgID0gIDIzLAorCVBPRF9nYXRlX2RlY2F5X3RpbWUgICAgICAgICAgICAgICAgPSAgMjQsCisJUE9EX3N0b21wX2VuYWJsZSAgICAgICAgICAgICAgICAgICA9ICAyNSwKKwlQT0RfY29tcF9lbmFibGUgICAgICAgICAgICAgICAgICAgID0gIDI2LAorCVBPRF9zdG9tcF90aW1lICAgICAgICAgICAgICAgICAgICAgPSAgMjcsCisJUE9EX2RlbGF5X2VuYWJsZSAgICAgICAgICAgICAgICAgICA9ICAyOCwKKwlQT0RfbW9kX3BhcmFtXzEgICAgICAgICAgICAgICAgICAgID0gIDI5LAorCVBPRF9kZWxheV9wYXJhbV8xICAgICAgICAgICAgICAgICAgPSAgMzAsCisJUE9EX2RlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSAgICAgICA9ICAzMSwKKwlQT0RfYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcyAgICAgICAgID0gIDMyLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2RlbGF5X3BhcmFtXzIgICAgICAgICAgICAgICAgICA9ICAzMywKKwlQT0RfZGVsYXlfdm9sdW1lX21peCAgICAgICAgICAgICAgID0gIDM0LAorCVBPRF9kZWxheV9wYXJhbV8zICAgICAgICAgICAgICAgICAgPSAgMzUsCisJUE9EX3JldmVyYl9lbmFibGUgICAgICAgICAgICAgICAgICA9ICAzNiwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9yZXZlcmJfdHlwZSAgICAgICAgICAgICAgICAgICAgPSAgMzcsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfcmV2ZXJiX2RlY2F5ICAgICAgICAgICAgICAgICAgID0gIDM4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3JldmVyYl90b25lICAgICAgICAgICAgICAgICAgICA9ICAzOSwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9yZXZlcmJfcHJlX2RlbGF5ICAgICAgICAgICAgICAgPSAgNDAsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfcmV2ZXJiX3ByZV9wb3N0ICAgICAgICAgICAgICAgID0gIDQxLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX2JhbmRfMl9mcmVxdWVuY3kgICAgICAgICAgICAgICA9ICA0MiwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzNfZnJlcXVlbmN5X19iYXNzICAgICAgICAgPSAgNDIsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0Rfd2FoX2VuYWJsZSAgICAgICAgICAgICAgICAgICAgID0gIDQzLAorCVBPRF9tb2R1bGF0aW9uX2xvX2N1dCAgICAgICAgICAgICAgPSAgNDQsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX2RlbGF5X3JldmVyYl9sb19jdXQgICAgICAgICAgICA9ICA0NSwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0Rfdm9sdW1lX3BlZGFsX21pbmltdW0gICAgICAgICAgID0gIDQ2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2VxX3ByZV9wb3N0ICAgICAgICAgICAgICAgICAgICA9ICA0NiwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF92b2x1bWVfcHJlX3Bvc3QgICAgICAgICAgICAgICAgPSAgNDcsCisJUE9EX2RpX21vZGVsICAgICAgICAgICAgICAgICAgICAgICA9ICA0OCwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfZGlfZGVsYXkgICAgICAgICAgICAgICAgICAgICAgID0gIDQ5LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF9tb2RfZW5hYmxlICAgICAgICAgICAgICAgICAgICAgPSAgNTAsCisJUE9EX21vZF9wYXJhbV8xX25vdGVfdmFsdWUgICAgICAgICA9ICA1MSwKKwlQT0RfbW9kX3BhcmFtXzIgICAgICAgICAgICAgICAgICAgID0gIDUyLAorCVBPRF9tb2RfcGFyYW1fMyAgICAgICAgICAgICAgICAgICAgPSAgNTMsCisJUE9EX21vZF9wYXJhbV80ICAgICAgICAgICAgICAgICAgICA9ICA1NCwKKwlQT0RfbW9kX3BhcmFtXzUgICAgICAgICAgICAgICAgICAgID0gIDU1LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF9tb2Rfdm9sdW1lX21peCAgICAgICAgICAgICAgICAgPSAgNTYsCisJUE9EX21vZF9wcmVfcG9zdCAgICAgICAgICAgICAgICAgICA9ICA1NywKKwlQT0RfbW9kdWxhdGlvbl9tb2RlbCAgICAgICAgICAgICAgID0gIDU4LAorCVBPRF9iYW5kXzNfZnJlcXVlbmN5ICAgICAgICAgICAgICAgPSAgNjAsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcyAgICAgICAgID0gIDYwLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX21vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24gICA9ICA2MSwKKwlQT0RfZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uID0gIDYyLAorCVBPRF9lcV9lbmFibGUgICAgICAgICAgICAgICAgICAgICAgPSAgNjMsICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX3RhcCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICA2NCwKKwlQT0Rfdm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbiAgICAgID0gIDY1LAorCVBPRF9iYW5kXzVfZnJlcXVlbmN5ICAgICAgICAgICAgICAgPSAgNjgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfdHVuZXIgICAgICAgICAgICAgICAgICAgICAgICAgID0gIDY5LAorCVBPRF9taWNfc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgPSAgNzAsCisJUE9EX2NhYmluZXRfbW9kZWwgICAgICAgICAgICAgICAgICA9ICA3MSwKKwlQT0Rfc3RvbXBfbW9kZWwgICAgICAgICAgICAgICAgICAgID0gIDc1LAorCVBPRF9yb29tbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgPSAgNzYsCisJUE9EX2JhbmRfNF9mcmVxdWVuY3kgICAgICAgICAgICAgICA9ICA3NywgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzZfZnJlcXVlbmN5ICAgICAgICAgICAgICAgPSAgNzcsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0Rfc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlICAgICAgID0gIDc4LAorCVBPRF9zdG9tcF9wYXJhbV8yICAgICAgICAgICAgICAgICAgPSAgNzksCisJUE9EX3N0b21wX3BhcmFtXzMgICAgICAgICAgICAgICAgICA9ICA4MCwKKwlQT0Rfc3RvbXBfcGFyYW1fNCAgICAgICAgICAgICAgICAgID0gIDgxLAorCVBPRF9zdG9tcF9wYXJhbV81ICAgICAgICAgICAgICAgICAgPSAgODIsCisJUE9EX3N0b21wX3BhcmFtXzYgICAgICAgICAgICAgICAgICA9ICA4MywKKwlQT0RfYW1wX3N3aXRjaF9zZWxlY3QgICAgICAgICAgICAgID0gIDg0LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0xJVkUgKi8KKwlQT0RfZGVsYXlfcGFyYW1fNCAgICAgICAgICAgICAgICAgID0gIDg1LAorCVBPRF9kZWxheV9wYXJhbV81ICAgICAgICAgICAgICAgICAgPSAgODYsCisJUE9EX2RlbGF5X3ByZV9wb3N0ICAgICAgICAgICAgICAgICA9ICA4NywKKwlQT0RfZGVsYXlfbW9kZWwgICAgICAgICAgICAgICAgICAgID0gIDg4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX2RlbGF5X3ZlcmJfbW9kZWwgICAgICAgICAgICAgICA9ICA4OCwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfdGVtcG9fbXNiICAgICAgICAgICAgICAgICAgICAgID0gIDg5LAorCVBPRF90ZW1wb19sc2IgICAgICAgICAgICAgICAgICAgICAgPSAgOTAsCisJUE9EX3dhaF9tb2RlbCAgICAgICAgICAgICAgICAgICAgICA9ICA5MSwgIC8qIGZpcm13YXJlOiAzLjAgKi8KKwlQT0RfYnlwYXNzX3ZvbHVtZSAgICAgICAgICAgICAgICAgID0gMTA1LCAgLyogZmlybXdhcmU6IDIuMTQgKi8KKwlQT0RfZnhfbG9vcF9vbl9vZmYgICAgICAgICAgICAgICAgID0gMTA3LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BSTyAqLworCVBPRF90d2Vha19wYXJhbV9zZWxlY3QgICAgICAgICAgICAgPSAxMDgsCisJUE9EX2FtcDFfZW5nYWdlICAgICAgICAgICAgICAgICAgICA9IDExMSwKKwlQT0RfYmFuZF8xX2dhaW4gICAgICAgICAgICAgICAgICAgID0gMTE0LCAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzJfZ2Fpbl9fYmFzcyAgICAgICAgICAgICAgPSAxMTUsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF8yX2dhaW4gICAgICAgICAgICAgICAgICAgID0gMTE2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfM19nYWluX19iYXNzICAgICAgICAgICAgICA9IDExNiwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzNfZ2FpbiAgICAgICAgICAgICAgICAgICAgPSAxMTcsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF80X2dhaW5fX2Jhc3MgICAgICAgICAgICAgID0gMTE3LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfNV9nYWluX19iYXNzICAgICAgICAgICAgICA9IDExOCwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzRfZ2FpbiAgICAgICAgICAgICAgICAgICAgPSAxMTksICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF82X2dhaW5fX2Jhc3MgICAgICAgICAgICAgID0gMTE5ICAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCit9OworCisvKioKKyAgIExpc3Qgb2YgVmFyaWF4IHdvcmtiZW5jaCBjb250cm9scyAoZHVtcCkuCisqLworZW51bSB7CisJVkFSSUFYX2JvZHkgICAgICAgICAgICAgICAgICAgICAgICA9ICAgMywKKwlWQVJJQVhfcGlja3VwMV9lbmFibGUgICAgICAgICAgICAgID0gICA0LCAgLyogMDogZW5hYmxlZCwgMTogZGlzYWJsZWQgKi8KKwlWQVJJQVhfcGlja3VwMV90eXBlICAgICAgICAgICAgICAgID0gICA4LAorCVZBUklBWF9waWNrdXAxX3Bvc2l0aW9uICAgICAgICAgICAgPSAgIDksICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwMV9hbmdsZSAgICAgICAgICAgICAgID0gIDEyLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cDFfbGV2ZWwgICAgICAgICAgICAgICA9ICAxNSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXAyX2VuYWJsZSAgICAgICAgICAgICAgPSAgMTgsICAvKiAwOiBlbmFibGVkLCAxOiBkaXNhYmxlZCAqLworCVZBUklBWF9waWNrdXAyX3R5cGUgICAgICAgICAgICAgICAgPSAgMjIsCisJVkFSSUFYX3BpY2t1cDJfcG9zaXRpb24gICAgICAgICAgICA9ICAyMywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXAyX2FuZ2xlICAgICAgICAgICAgICAgPSAgMjYsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwMl9sZXZlbCAgICAgICAgICAgICAgID0gIDI5LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cF9waGFzZSAgICAgICAgICAgICAgICA9ICAzMiwgIC8qIDA6IGluIHBoYXNlLCAxOiBvdXQgb2YgcGhhc2UgKi8KKwlWQVJJQVhfY2FwYWNpdGFuY2UgICAgICAgICAgICAgICAgID0gIDMzLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3RvbmVfcmVzaXN0YW5jZSAgICAgICAgICAgICA9ICAzNiwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF92b2x1bWVfcmVzaXN0YW5jZSAgICAgICAgICAgPSAgMzksICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfdGFwZXIgICAgICAgICAgICAgICAgICAgICAgID0gIDQyLCAgLyogMDogTGluZWFyLCAxOiBBdWRpbyAqLworCVZBUklBWF90b25lX2R1bXAgICAgICAgICAgICAgICAgICAgPSAgNDMsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfc2F2ZV90b25lICAgICAgICAgICAgICAgICAgID0gIDQ2LAorCVZBUklBWF92b2x1bWVfZHVtcCAgICAgICAgICAgICAgICAgPSAgNDcsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfdHVuaW5nX2VuYWJsZSAgICAgICAgICAgICAgID0gIDUwLAorCVZBUklBWF90dW5pbmc2ICAgICAgICAgICAgICAgICAgICAgPSAgNTEsCisJVkFSSUFYX3R1bmluZzUgICAgICAgICAgICAgICAgICAgICA9ICA1MiwKKwlWQVJJQVhfdHVuaW5nNCAgICAgICAgICAgICAgICAgICAgID0gIDUzLAorCVZBUklBWF90dW5pbmczICAgICAgICAgICAgICAgICAgICAgPSAgNTQsCisJVkFSSUFYX3R1bmluZzIgICAgICAgICAgICAgICAgICAgICA9ICA1NSwKKwlWQVJJQVhfdHVuaW5nMSAgICAgICAgICAgICAgICAgICAgID0gIDU2LAorCVZBUklBWF9kZXR1bmU2ICAgICAgICAgICAgICAgICAgICAgPSAgNTcsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfZGV0dW5lNSAgICAgICAgICAgICAgICAgICAgID0gIDYwLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX2RldHVuZTQgICAgICAgICAgICAgICAgICAgICA9ICA2MywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9kZXR1bmUzICAgICAgICAgICAgICAgICAgICAgPSAgNjYsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfZGV0dW5lMiAgICAgICAgICAgICAgICAgICAgID0gIDY5LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX2RldHVuZTEgICAgICAgICAgICAgICAgICAgICA9ICA3MiwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9taXg2ICAgICAgICAgICAgICAgICAgICAgICAgPSAgNzUsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfbWl4NSAgICAgICAgICAgICAgICAgICAgICAgID0gIDc4LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX21peDQgICAgICAgICAgICAgICAgICAgICAgICA9ICA4MSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9taXgzICAgICAgICAgICAgICAgICAgICAgICAgPSAgODQsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfbWl4MiAgICAgICAgICAgICAgICAgICAgICAgID0gIDg3LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX21peDEgICAgICAgICAgICAgICAgICAgICAgICA9ICA5MCwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXBfd2lyaW5nICAgICAgICAgICAgICAgPSAgOTYgICAvKiAwOiBwYXJhbGxlbCwgMTogc2VyaWVzICovCit9OworCisvKioKKyAgIExpc3Qgb2YgVmFyaWF4IHdvcmtiZW5jaCBjb250cm9scyAoTUlESSkuCisqLworZW51bSB7CisJVkFSSUFYTUlESV92b2x1bWUgICAgICAgICAgICAgICAgICA9ICAgNywKKwlWQVJJQVhNSURJX3RvbmUgICAgICAgICAgICAgICAgICAgID0gIDc5LAorfTsKKworCitleHRlcm4gaW50IHBvZF9jcmVhdGVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBvZF9yZW1vdmVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdmFyaWF4X2NyZWF0ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdmFyaWF4X3JlbW92ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTIwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKQEAgLTAsMCArMSwxMTAyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgImNhcHR1cmUuaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAibWlkaS5oIgorI2luY2x1ZGUgInBsYXliYWNrLmgiCisjaW5jbHVkZSAicG9kLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ0b25lcG9ydC5oIgorI2luY2x1ZGUgInVzYmRlZnMuaCIKKyNpbmNsdWRlICJ2YXJpYXguaCIKKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICJNYXJrdXMgR3JhYm5lciA8Z3JhYm5lckBpY2cudHVncmF6LmF0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgIkxpbmU2IFVTQiBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjguMCIKKworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbGluZTZfaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9CQVNTUE9EWFQpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfQkFTU1BPRFhUTElWRSkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk8pIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfR1VJVEFSUE9SVCkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0NLRVRQT0QpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWDMpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWDNMSVZFKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPRFhUKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPRFhUTElWRSkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYVFBSTykgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWCkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDEpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfVE9ORVBPUlRfVVgyKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1ZBUklBWCkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGxpbmU2X2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzIGxpbmU2X3Byb3BlcnRpZXNfdGFibGVbXSA9IHsKKwl7ICJCYXNzUE9EeHQiLCAgICAgICAgTElORTZfQklUX0JBU1NQT0RYVCwgICAgIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIkJhc3NQT0R4dCBMaXZlIiwgICBMSU5FNl9CSVRfQkFTU1BPRFhUTElWRSwgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiQmFzc1BPRHh0IFBybyIsICAgIExJTkU2X0JJVF9CQVNTUE9EWFRQUk8sICBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJHdWl0YXJQb3J0IiwgICAgICAgTElORTZfQklUX0dVSVRBUlBPUlQsICAgIExJTkU2X0JJVF9QQ00gICAgICAgICB9LAorCXsgIlBvY2tldCBQT0QiLCAgICAgICBMSU5FNl9CSVRfUE9DS0VUUE9ELCAgICAgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiUE9EIFgzIiwgICAgICAgICAgIExJTkU2X0JJVF9QT0RYMywgICAgICAgICBMSU5FNl9CSVRfUENNICAgICAgICAgfSwKKwl7ICJQT0QgWDMgTGl2ZSIsICAgICAgTElORTZfQklUX1BPRFgzTElWRSwgICAgIExJTkU2X0JJVF9QQ00gICAgICAgICB9LAorCXsgIlBPRHh0IiwgICAgICAgICAgICBMSU5FNl9CSVRfUE9EWFQsICAgICAgICAgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiUE9EeHQgTGl2ZSIsICAgICAgIExJTkU2X0JJVF9QT0RYVExJVkUsICAgICBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJQT0R4dCBQcm8iLCAgICAgICAgTElORTZfQklUX1BPRFhUUFJPLCAgICAgIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIlRvbmVQb3J0IEdYIiwgICAgICBMSU5FNl9CSVRfVE9ORVBPUlRfR1gsICAgTElORTZfQklUX1BDTSAgICAgICAgIH0sCisJeyAiVG9uZVBvcnQgVVgxIiwgICAgIExJTkU2X0JJVF9UT05FUE9SVF9VWDEsICBMSU5FNl9CSVRfUENNICAgICAgICAgfSwKKwl7ICJUb25lUG9ydCBVWDIiLCAgICAgTElORTZfQklUX1RPTkVQT1JUX1VYMiwgIExJTkU2X0JJVF9QQ00gICAgICAgICB9LAorCXsgIlZhcmlheCBXb3JrYmVuY2giLCBMSU5FNl9CSVRfVkFSSUFYLCAgICAgICAgTElORTZfQklUX0NPTlRST0wgICAgIH0KK307CisKKworLyoKKwlUaGlzIGlzIExpbmU2J3MgTUlESSBtYW51ZmFjdHVyZXIgSUQuCisqLworY29uc3QgdW5zaWduZWQgY2hhciBsaW5lNl9taWRpX2lkW10gPSB7IDB4MDAsIDB4MDEsIDB4MGMgfTsKKworc3RydWN0IHVzYl9saW5lNiAqbGluZTZfZGV2aWNlc1tMSU5FNl9NQVhfREVWSUNFU107CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGluZTZfd29ya3F1ZXVlOworCisKKy8qKgorCSBDbGFzcyBmb3IgYXN5bmNocm9ub3VzIG1lc3NhZ2VzLgorKi8KK3N0cnVjdCBtZXNzYWdlIHsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKwljb25zdCBjaGFyICpidWZmZXI7CisJaW50IHNpemU7CisJaW50IGRvbmU7Cit9OworCisKKy8qCisJRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisqLworc3RhdGljIHZvaWQgbGluZTZfZGF0YV9yZWNlaXZlZChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jX3BhcnQoc3RydWN0IG1lc3NhZ2UgKm1zZywKKwkJCQkJICAgICBzdHJ1Y3QgdXJiICp1cmIpOworCisKKy8qCisJU3RhcnQgdG8gbGlzdGVuIG9uIGVuZHBvaW50LgorKi8KK3N0YXRpYyBpbnQgbGluZTZfc3RhcnRfbGlzdGVuKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCXVzYl9maWxsX2ludF91cmIobGluZTYtPnVyYl9saXN0ZW4sIGxpbmU2LT51c2JkZXYsCisJCQkgdXNiX3JjdmludHBpcGUobGluZTYtPnVzYmRldiwgbGluZTYtPmVwX2NvbnRyb2xfcmVhZCksCisJCQkgbGluZTYtPmJ1ZmZlcl9saXN0ZW4sIExJTkU2X0JVRlNJWkVfTElTVEVOLAorCQkJIGxpbmU2X2RhdGFfcmVjZWl2ZWQsIGxpbmU2LCBsaW5lNi0+aW50ZXJ2YWwpOworCWxpbmU2LT51cmJfbGlzdGVuLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlyZXR1cm4gdXNiX3N1Ym1pdF91cmIobGluZTYtPnVyYl9saXN0ZW4sIEdGUF9LRVJORUwpOworfQorCisjaWYgRE9fRFVNUF9BTlkKKy8qCisJV3JpdGUgaGV4ZHVtcCB0byBzeXNsb2cuCisqLwordm9pZCBsaW5lNl93cml0ZV9oZXhkdW1wKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjaGFyIGRpciwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplKQoreworCXN0YXRpYyBjb25zdCBpbnQgQllURVNfUEVSX0xJTkUgPSA4OworCWNoYXIgaGV4ZHVtcFsxMDBdOworCWNoYXIgYXNjW0JZVEVTX1BFUl9MSU5FICsgMV07CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBCWVRFU19QRVJfTElORSkgeworCQlpbnQgaGV4ZHVtcHNpemUgPSBzaXplb2YoaGV4ZHVtcCk7CisJCWNoYXIgKnAgPSBoZXhkdW1wOworCQlpbnQgbiA9IG1pbihzaXplIC0gaSwgQllURVNfUEVSX0xJTkUpOworCQlhc2Nbbl0gPSAwOworCisJCWZvciAoaiA9IDA7IGogPCBCWVRFU19QRVJfTElORTsgKytqKSB7CisJCQlpbnQgYnl0ZXM7CisKKwkJCWlmIChqIDwgbikgeworCQkJCXVuc2lnbmVkIGNoYXIgdmFsID0gYnVmZmVyW2kgKyBqXTsKKwkJCQlieXRlcyA9IHNucHJpbnRmKHAsIGhleGR1bXBzaXplLCAiICUwMlgiLCB2YWwpOworCQkJCWFzY1tqXSA9ICgodmFsID49IDB4MjApICYmICh2YWwgPCAweDdmKSkgPyB2YWwgOiAnLic7CisJCQl9IGVsc2UKKwkJCQlieXRlcyA9IHNucHJpbnRmKHAsIGhleGR1bXBzaXplLCAiICAgIik7CisKKwkJCWlmIChieXRlcyA+IGhleGR1bXBzaXplKQorCQkJCWJyZWFrOyAgLyogYnVmZmVyIG92ZXJmbG93ICovCisKKwkJCXAgKz0gYnl0ZXM7CisJCQloZXhkdW1wc2l6ZSAtPSBieXRlczsKKwkJfQorCisJCWRldl9pbmZvKGxpbmU2LT5pZmNkZXYsICIlYyUwNFg6JXMgJXNcbiIsIGRpciwgaSwgaGV4ZHVtcCwgYXNjKTsKKwl9Cit9CisjZW5kaWYKKworI2lmIERPX0RVTVBfVVJCX1JFQ0VJVkUKKy8qCisJRHVtcCBVUkIgZGF0YSB0byBzeXNsb2cuCisqLworc3RhdGljIHZvaWQgbGluZTZfZHVtcF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gKHN0cnVjdCB1c2JfbGluZTYgKil1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMgPCAwKQorCQlyZXR1cm47CisKKwlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAnUicsICh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKK30KKyNlbmRpZgorCisvKgorCVNlbmQgcmF3IG1lc3NhZ2UgaW4gcGllY2VzIG9mIHdNYXhQYWNrZXRTaXplIGJ5dGVzLgorKi8KK2ludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkgICBpbnQgc2l6ZSkKK3sKKwlpbnQgaSwgZG9uZSA9IDA7CisKKyNpZiBET19EVU1QX1VSQl9TRU5ECisJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ1MnLCBidWZmZXIsIHNpemUpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBsaW5lNi0+bWF4X3BhY2tldF9zaXplKSB7CisJCWludCBwYXJ0aWFsOworCQljb25zdCBjaGFyICpmcmFnX2J1ZiA9IGJ1ZmZlciArIGk7CisJCWludCBmcmFnX3NpemUgPSBtaW4obGluZTYtPm1heF9wYWNrZXRfc2l6ZSwgc2l6ZSAtIGkpOworCQlpbnQgcmV0dmFsOworCisJCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKGxpbmU2LT51c2JkZXYsCisJCQkJCSAgIHVzYl9zbmRpbnRwaXBlKGxpbmU2LT51c2JkZXYsCisJCQkJCQkJICBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCisJCQkJCSAgIChjaGFyICopZnJhZ19idWYsIGZyYWdfc2l6ZSwKKwkJCQkJICAgJnBhcnRpYWwsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJCSJ1c2JfaW50ZXJydXB0X21zZyBmYWlsZWQgKCVkKVxuIiwgcmV0dmFsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZG9uZSArPSBmcmFnX3NpemU7CisJfQorCisJcmV0dXJuIGRvbmU7Cit9CisKKy8qCisJTm90aWZpY2F0aW9uIG9mIGNvbXBsZXRpb24gb2YgYXN5bmNocm9ub3VzIHJlcXVlc3QgdHJhbnNtaXNzaW9uLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2FzeW5jX3JlcXVlc3Rfc2VudChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1lc3NhZ2UgKm1zZyA9IChzdHJ1Y3QgbWVzc2FnZSAqKXVyYi0+Y29udGV4dDsKKworCWlmIChtc2ctPmRvbmUgPj0gbXNnLT5zaXplKSB7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlrZnJlZShtc2cpOworCX0gZWxzZQorCQlsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jX3BhcnQobXNnLCB1cmIpOworfQorCisvKgorCUFzeW5jaHJvbm91c2x5IHNlbmQgcGFydCBvZiBhIHJhdyBtZXNzYWdlLgorKi8KK3N0YXRpYyBpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luY19wYXJ0KHN0cnVjdCBtZXNzYWdlICptc2csCisJCQkJCSAgICAgc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXR2YWw7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBtc2ctPmxpbmU2OworCWludCBkb25lID0gbXNnLT5kb25lOworCWludCBieXRlcyA9IG1pbihtc2ctPnNpemUgLSBkb25lLCBsaW5lNi0+bWF4X3BhY2tldF9zaXplKTsKKworCXVzYl9maWxsX2ludF91cmIodXJiLCBsaW5lNi0+dXNiZGV2LAorCQkJIHVzYl9zbmRpbnRwaXBlKGxpbmU2LT51c2JkZXYsIGxpbmU2LT5lcF9jb250cm9sX3dyaXRlKSwKKwkJCSAoY2hhciAqKW1zZy0+YnVmZmVyICsgZG9uZSwgYnl0ZXMsCisJCQkgbGluZTZfYXN5bmNfcmVxdWVzdF9zZW50LCBtc2csIGxpbmU2LT5pbnRlcnZhbCk7CisKKyNpZiBET19EVU1QX1VSQl9TRU5ECisJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ1MnLCAoY2hhciAqKW1zZy0+YnVmZmVyICsgZG9uZSwgYnl0ZXMpOworI2VuZGlmCisKKwltc2ctPmRvbmUgKz0gYnl0ZXM7CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJa2ZyZWUobXNnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJQXN5bmNocm9ub3VzbHkgc2VuZCByYXcgbWVzc2FnZS4KKyovCitpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJCSBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWVzc2FnZSAqbXNnOworCXN0cnVjdCB1cmIgKnVyYjsKKworCS8qIGNyZWF0ZSBtZXNzYWdlOiAqLworCW1zZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXNzYWdlKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAobXNnID09IE5VTEwpIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGNyZWF0ZSBVUkI6ICovCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKworCWlmICh1cmIgPT0gTlVMTCkgeworCQlrZnJlZShtc2cpOworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2V0IG1lc3NhZ2UgZGF0YTogKi8KKwltc2ctPmxpbmU2ID0gbGluZTY7CisJbXNnLT5idWZmZXIgPSBidWZmZXI7CisJbXNnLT5zaXplID0gc2l6ZTsKKwltc2ctPmRvbmUgPSAwOworCisJLyogc3RhcnQgc2VuZGluZzogKi8KKwlyZXR1cm4gbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luY19wYXJ0KG1zZywgdXJiKTsKK30KKworLyoKKwlTZW5kIHN5c2V4IG1lc3NhZ2UgaW4gcGllY2VzIG9mIHdNYXhQYWNrZXRTaXplIGJ5dGVzLgorKi8KK2ludCBsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgaW50IHNpemUpCit7CisJcmV0dXJuIGxpbmU2X3NlbmRfcmF3X21lc3NhZ2UobGluZTYsIGJ1ZmZlciwgc2l6ZSArIFNZU0VYX0VYVFJBX1NJWkUpIC0gU1lTRVhfRVhUUkFfU0laRTsKK30KKworLyoKKwlBbGxvY2F0ZSBidWZmZXIgZm9yIHN5c2V4IG1lc3NhZ2UgYW5kIHByZXBhcmUgaGVhZGVyLgorCUBwYXJhbSBjb2RlIHN5c2V4IG1lc3NhZ2UgY29kZQorCUBwYXJhbSBzaXplIG51bWJlciBvZiBieXRlcyBiZXR3ZWVuIGNvZGUgYW5kIHN5c2V4IGVuZAorKi8KK2NoYXIgKmxpbmU2X2FsbG9jX3N5c2V4X2J1ZmZlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGNvZGUxLCBpbnQgY29kZTIsCisJCQkgICAgICAgaW50IHNpemUpCit7CisJY2hhciAqYnVmZmVyID0ga21hbGxvYyhzaXplICsgU1lTRVhfRVhUUkFfU0laRSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYnVmZmVyWzBdID0gTElORTZfU1lTRVhfQkVHSU47CisJbWVtY3B5KGJ1ZmZlciArIDEsIGxpbmU2X21pZGlfaWQsIHNpemVvZihsaW5lNl9taWRpX2lkKSk7CisJYnVmZmVyW3NpemVvZihsaW5lNl9taWRpX2lkKSArIDFdID0gY29kZTE7CisJYnVmZmVyW3NpemVvZihsaW5lNl9taWRpX2lkKSArIDJdID0gY29kZTI7CisJYnVmZmVyW3NpemVvZihsaW5lNl9taWRpX2lkKSArIDMgKyBzaXplXSA9IExJTkU2X1NZU0VYX0VORDsKKwlyZXR1cm4gYnVmZmVyOworfQorCisvKgorCU5vdGlmaWNhdGlvbiBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIExpbmU2IGRldmljZS4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9kYXRhX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IChzdHJ1Y3QgdXNiX2xpbmU2ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBNaWRpQnVmZmVyICptYiA9ICZsaW5lNi0+bGluZTZtaWRpLT5taWRpYnVmX2luOworCWludCBkb25lOworCisJaWYgKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pCisJCXJldHVybjsKKworI2lmIERPX0RVTVBfVVJCX1JFQ0VJVkUKKwlsaW5lNl9kdW1wX3VyYih1cmIpOworI2VuZGlmCisKKwlkb25lID0gbWlkaWJ1Zl93cml0ZShtYiwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwlpZiAoZG9uZSA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQltaWRpYnVmX2lnbm9yZShtYiwgZG9uZSk7CisJCURFQlVHX01FU1NBR0VTKGRldl9lcnIobGluZTYtPmlmY2RldiwgIiVkICVkIGJ1ZmZlciBvdmVyZmxvdyAtIG1lc3NhZ2Ugc2tpcHBlZFxuIiwgZG9uZSwgdXJiLT5hY3R1YWxfbGVuZ3RoKSk7CisJfQorCisJZm9yICg7OykgeworCQlkb25lID0gbWlkaWJ1Zl9yZWFkKG1iLCBsaW5lNi0+YnVmZmVyX21lc3NhZ2UsIExJTkU2X01FU1NBR0VfTUFYTEVOKTsKKworCQlpZiAoZG9uZSA9PSAwKQorCQkJYnJlYWs7CisKKwkJLyogTUlESSBpbnB1dCBmaWx0ZXIgKi8KKwkJaWYgKG1pZGlidWZfc2tpcF9tZXNzYWdlKG1iLCBsaW5lNi0+bGluZTZtaWRpLT5taWRpX21hc2tfcmVjZWl2ZSkpCisJCQljb250aW51ZTsKKworCQlsaW5lNi0+bWVzc2FnZV9sZW5ndGggPSBkb25lOworI2lmIERPX0RVTVBfTUlESV9SRUNFSVZFCisJCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdyJywgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLCBkb25lKTsKKyNlbmRpZgorCQlsaW5lNl9taWRpX3JlY2VpdmUobGluZTYsIGxpbmU2LT5idWZmZXJfbWVzc2FnZSwgZG9uZSk7CisKKwkJc3dpdGNoIChsaW5lNi0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgeworCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJCQlwb2RfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWxpbmU2KTsKKwkJCWJyZWFrOworCisJCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCQkJc3dpdGNoIChsaW5lNi0+aW50ZXJmYWNlX251bWJlcikgeworCQkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1BPRDoKKwkJCQlwb2RfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWxpbmU2KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1ZBUklBWDoKKwkJCQl2YXJpYXhfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2KTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJQT0R4dCBMaXZlIGludGVyZmFjZSAlZCBub3Qgc3VwcG9ydGVkXG4iLCBsaW5lNi0+aW50ZXJmYWNlX251bWJlcik7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKKwkJCXZhcmlheF9wcm9jZXNzX21lc3NhZ2UoKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICopbGluZTYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCU1JU1NJTkdfQ0FTRTsKKwkJfQorCX0KKworCWxpbmU2X3N0YXJ0X2xpc3RlbihsaW5lNik7Cit9CisKKy8qCisJU2VuZCBjaGFubmVsIG51bWJlciAoaS5lLiwgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHNvdW5kKS4KKyovCitpbnQgbGluZTZfc2VuZF9wcm9ncmFtKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgdmFsdWUpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IHBhcnRpYWw7CisKKwlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1ZmZlclswXSA9IExJTkU2X1BST0dSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOworCWJ1ZmZlclsxXSA9IHZhbHVlOworCisjaWYgRE9fRFVNUF9VUkJfU0VORAorCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdTJywgYnVmZmVyLCAyKTsKKyNlbmRpZgorCisJcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cobGluZTYtPnVzYmRldiwKKwkJCQkgICB1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LAorCQkJCQkJICBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCisJCQkJICAgYnVmZmVyLCAyLCAmcGFydGlhbCwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCWlmIChyZXR2YWwpCisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgInVzYl9pbnRlcnJ1cHRfbXNnIGZhaWxlZCAoJWQpXG4iLCByZXR2YWwpOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorCVRyYW5zbWl0IExpbmU2IGNvbnRyb2wgcGFyYW1ldGVyLgorKi8KK2ludCBsaW5lNl90cmFuc21pdF9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBwYXJhbSwgaW50IHZhbHVlKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBwYXJ0aWFsOworCisJYnVmZmVyID0ga21hbGxvYygzLCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlidWZmZXJbMF0gPSBMSU5FNl9QQVJBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1Q7CisJYnVmZmVyWzFdID0gcGFyYW07CisJYnVmZmVyWzJdID0gdmFsdWU7CisKKyNpZiBET19EVU1QX1VSQl9TRU5ECisJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ1MnLCBidWZmZXIsIDMpOworI2VuZGlmCisKKwlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhsaW5lNi0+dXNiZGV2LAorCQkJCQkJCQkJCQkJCQkgdXNiX3NuZGludHBpcGUobGluZTYtPnVzYmRldiwgbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAorCQkJCQkJCQkJCQkJCQkgYnVmZmVyLCAzLCAmcGFydGlhbCwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCWlmIChyZXR2YWwpCisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgInVzYl9pbnRlcnJ1cHRfbXNnIGZhaWxlZCAoJWQpXG4iLCByZXR2YWwpOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorCVJlYWQgZGF0YSBmcm9tIGRldmljZS4KKyovCitpbnQgbGluZTZfcmVhZF9kYXRhKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgYWRkcmVzcywgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGxpbmU2LT51c2JkZXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGxlbjsKKworCS8qIHF1ZXJ5IHRoZSBzZXJpYWwgbnVtYmVyOiAqLworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAorCQkJCQkJCQkJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfT1VULAorCQkJCQkJCQkJCQkJKGRhdGFsZW4gPDwgOCkgfCAweDIxLCBhZGRyZXNzLCBOVUxMLCAwLCBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAicmVhZCByZXF1ZXN0IGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFdhaXQgZm9yIGRhdGEgbGVuZ3RoLiBXZSdsbCBnZXQgYSBjb3VwbGUgb2YgMHhmZiB1bnRpbCBsZW5ndGggYXJyaXZlcy4gKi8KKwlkbyB7CisJCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAorCQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfAorCQkJCSAgICAgIFVTQl9ESVJfSU4sCisJCQkJICAgICAgMHgwMDEyLCAweDAwMDAsICZsZW4sIDEsCisJCQkJICAgICAgTElORTZfVElNRU9VVCAqIEhaKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCQkicmVjZWl2ZSBsZW5ndGggZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXdoaWxlIChsZW4gPT0gMHhmZikKKwkJOworCisJaWYgKGxlbiAhPSBkYXRhbGVuKSB7CisJCS8qIHNob3VsZCBiZSBlcXVhbCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyAqLworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkibGVuZ3RoIG1pc21hdGNoIChleHBlY3RlZCAlZCwgZ290ICVkKVxuIiwKKwkJCShpbnQpZGF0YWxlbiwgKGludClsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZWNlaXZlIHRoZSByZXN1bHQ6ICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCSAgICAgIDB4MDAxMywgMHgwMDAwLCBkYXRhLCBkYXRhbGVuLAorCQkJICAgICAgTElORTZfVElNRU9VVCAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgInJlYWQgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJV3JpdGUgZGF0YSB0byBkZXZpY2UuCisqLworaW50IGxpbmU2X3dyaXRlX2RhdGEoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBhZGRyZXNzLCB2b2lkICpkYXRhLAorCQkgICAgIHNpemVfdCBkYXRhbGVuKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBsaW5lNi0+dXNiZGV2OworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgIDB4MDAyMiwgYWRkcmVzcywgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkid3JpdGUgcmVxdWVzdCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkbyB7CisJCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApLAorCQkJCSAgICAgIDB4NjcsCisJCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8CisJCQkJICAgICAgVVNCX0RJUl9JTiwKKwkJCQkgICAgICAweDAwMTIsIDB4MDAwMCwKKwkJCQkgICAgICAmc3RhdHVzLCAxLCBMSU5FNl9USU1FT1VUICogSFopOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkJInJlY2VpdmluZyBzdGF0dXMgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXdoaWxlIChzdGF0dXMgPT0gMHhmZikKKwkJOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIndyaXRlIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlSZWFkIExpbmU2IGRldmljZSBzZXJpYWwgbnVtYmVyLgorCShQT0QsIFRvbmVQb3J0LCBHdWl0YXJQb3J0KQorKi8KK2ludCBsaW5lNl9yZWFkX3NlcmlhbF9udW1iZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCAqc2VyaWFsX251bWJlcikKK3sKKwlyZXR1cm4gbGluZTZfcmVhZF9kYXRhKGxpbmU2LCAweDgwZDAsIHNlcmlhbF9udW1iZXIsIHNpemVvZigqc2VyaWFsX251bWJlcikpOworfQorCisvKgorCU5vIG9wZXJhdGlvbiAoaS5lLiwgdW5zdXBwb3J0ZWQpLgorKi8KK3NzaXplX3QgbGluZTZfbm9wX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKwlObyBvcGVyYXRpb24gKGkuZS4sIHVuc3VwcG9ydGVkKS4KKyovCitzc2l6ZV90IGxpbmU2X25vcF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAicmF3IiBzcGVjaWFsIGZpbGUuCisqLworI2lmIENSRUFURV9SQVdfRklMRQorc3NpemVfdCBsaW5lNl9zZXRfcmF3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJbGluZTZfc2VuZF9yYXdfbWVzc2FnZShsaW5lNiwgYnVmLCBjb3VudCk7CisJcmV0dXJuIGNvdW50OworfQorI2VuZGlmCisKKy8qCisJR2VuZXJpYyBkZXN0cnVjdG9yLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwlpZiAoaW50ZXJmYWNlID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpZiAobGluZTYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogZnJlZSBidWZmZXIgbWVtb3J5IGZpcnN0OiAqLworCWtmcmVlKGxpbmU2LT5idWZmZXJfbWVzc2FnZSk7CisJa2ZyZWUobGluZTYtPmJ1ZmZlcl9saXN0ZW4pOworCisJLyogdGhlbiBmcmVlIFVSQnM6ICovCisJdXNiX2ZyZWVfdXJiKGxpbmU2LT51cmJfbGlzdGVuKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGlzbid0IGRlc3RydWN0ZWQgdHdpY2U6ICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJLyogZnJlZSBpbnRlcmZhY2UgZGF0YTogKi8KKwlrZnJlZShsaW5lNik7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmU2X2xpc3RfZGV2aWNlcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X01BWF9ERVZJQ0VTOyArK2kpIHsKKwkJc3RydWN0IHVzYl9saW5lNiAqZGV2ID0gbGluZTZfZGV2aWNlc1tpXTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTGluZTYgZGV2aWNlICVkOiAiLCBpKTsKKworCQlpZiAoZGV2ID09IE5VTEwpCisJCQlwcmludGsoIihub3QgdXNlZClcbiIpOworCQllbHNlCisJCQlwcmludGsoIiVzOiVkXG4iLCBkZXYtPnByb3BlcnRpZXMtPm5hbWUsIGRldi0+aW50ZXJmYWNlX251bWJlcik7CisJfQorfQorCisvKgorCVByb2JlIFVTQiBkZXZpY2UuCisqLworc3RhdGljIGludCBsaW5lNl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGRldnR5cGU7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzOworCWludCBkZXZudW07CisJaW50IGludGVyZmFjZV9udW1iZXIsIGFsdGVybmF0ZSA9IDA7CisJaW50IHByb2R1Y3Q7CisJaW50IHNpemUgPSAwOworCWludCBlcF9yZWFkID0gMCwgZXBfd3JpdGUgPSAwOworCWludCByZXQ7CisKKwlpZiAoaW50ZXJmYWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlpZiAodXNiZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW5jcmVtZW50IHJlZmVyZW5jZSBjb3VudGVyczogKi8KKwl1c2JfZ2V0X2ludGYoaW50ZXJmYWNlKTsKKwl1c2JfZ2V0X2Rldih1c2JkZXYpOworCisJLyogd2UgZG9uJ3QgaGFuZGxlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zICovCisJaWYgKHVzYmRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBjaGVjayB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQgKi8KKwlmb3IgKGRldnR5cGUgPSBzaXplb2YobGluZTZfaWRfdGFibGUpIC8gc2l6ZW9mKGxpbmU2X2lkX3RhYmxlWzBdKSAtIDE7IGRldnR5cGUtLTspCisJCWlmICgobGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBsaW5lNl9pZF90YWJsZVtkZXZ0eXBlXS5pZFZlbmRvcikgJiYKKwkJCSAobGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gbGluZTZfaWRfdGFibGVbZGV2dHlwZV0uaWRQcm9kdWN0KSkKKwkJCWJyZWFrOworCisJaWYgKGRldnR5cGUgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGZpbmQgZnJlZSBzbG90IGluIGRldmljZSB0YWJsZTogKi8KKwlmb3IgKGRldm51bSA9IDA7IGRldm51bSA8IExJTkU2X01BWF9ERVZJQ0VTOyArK2Rldm51bSkKKwkJaWYgKGxpbmU2X2RldmljZXNbZGV2bnVtXSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwlpZiAoZGV2bnVtID09IExJTkU2X01BWF9ERVZJQ0VTKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluaXRpYWxpemUgZGV2aWNlIGluZm86ICovCisJcHJvcGVydGllcyA9ICZsaW5lNl9wcm9wZXJ0aWVzX3RhYmxlW2RldnR5cGVdOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmU2ICVzIGZvdW5kXG4iLCBwcm9wZXJ0aWVzLT5uYW1lKTsKKwlwcm9kdWN0ID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisKKwkvKiBxdWVyeSBpbnRlcmZhY2UgbnVtYmVyICovCisJaW50ZXJmYWNlX251bWJlciA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCXN3aXRjaCAocHJvZHVjdCkgeworCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKKwkJYWx0ZXJuYXRlID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzOgorCWNhc2UgTElORTZfREVWSURfUE9EWDNMSVZFOgorCQlzd2l0Y2ggKGludGVyZmFjZV9udW1iZXIpIHsKKwkJY2FzZSAwOgorCQkJYWx0ZXJuYXRlID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlhbHRlcm5hdGUgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlNSVNTSU5HX0NBU0U7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJCWFsdGVybmF0ZSA9IDU7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWDoKKwljYXNlIExJTkU2X0RFVklEX0dVSVRBUlBPUlQ6CisJCWFsdGVybmF0ZSA9IDI7ICAvKiAxLi40IHNlZW0gdG8gYmUgb2sgKi8KKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMjoKKwkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7CisJCWNhc2UgMDoKKwkJCS8qIGRlZmF1bHRzIHRvIDQ0LjFrSHosIDE2LWJpdCAqLworCQkJYWx0ZXJuYXRlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlhbHRlcm5hdGUgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlNSVNTSU5HX0NBU0U7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0U7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYmRldiwgaW50ZXJmYWNlX251bWJlciwgYWx0ZXJuYXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgInNldF9pbnRlcmZhY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBpbml0aWFsaXplIGRldmljZSBkYXRhIGJhc2VkIG9uIHByb2R1Y3QgaWQ6ICovCisJc3dpdGNoIChwcm9kdWN0KSB7CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCk7CisJCWVwX3JlYWQgID0gMHg4NDsKKwkJZXBfd3JpdGUgPSAweDAzOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfUE9EWDM6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6CisJCS8qIGN1cnJlbnRseSB1bnVzZWQhICovCisJCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl9wb2QpOworCQllcF9yZWFkICA9IDB4ODE7CisJCWVwX3dyaXRlID0gMHgwMTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYOgorCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgxOgorCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgyOgorCWNhc2UgTElORTZfREVWSURfR1VJVEFSUE9SVDoKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0KTsKKwkJLyogdGhlc2UgZG9uJ3QgaGF2ZSBhIGNvbnRyb2wgY2hhbm5lbCAqLworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCQlzd2l0Y2ggKGludGVyZmFjZV9udW1iZXIpIHsKKwkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1BPRDoKKwkJCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl9wb2QpOworCQkJZXBfcmVhZCAgPSAweDg0OworCQkJZXBfd3JpdGUgPSAweDAzOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1ZBUklBWDoKKwkJCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl92YXJpYXgpOworCQkJZXBfcmVhZCAgPSAweDg2OworCQkJZXBfd3JpdGUgPSAweDA1OworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl92YXJpYXgpOworCQllcF9yZWFkICA9IDB4ODI7CisJCWVwX3dyaXRlID0gMHgwMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0U7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzaXplID09IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiZHJpdmVyIGJ1ZzogaW50ZXJmYWNlIGRhdGEgc2l6ZSBub3Qgc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbGluZTYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCisJaWYgKGxpbmU2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc3RvcmUgYmFzaWMgZGF0YTogKi8KKwlsaW5lNi0+aW50ZXJmYWNlX251bWJlciA9IGludGVyZmFjZV9udW1iZXI7CisJbGluZTYtPnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCWxpbmU2LT51c2JkZXYgPSB1c2JkZXY7CisJbGluZTYtPmlmY2RldiA9ICZpbnRlcmZhY2UtPmRldjsKKwlsaW5lNi0+ZXBfY29udHJvbF9yZWFkID0gZXBfcmVhZDsKKwlsaW5lNi0+ZXBfY29udHJvbF93cml0ZSA9IGVwX3dyaXRlOworCWxpbmU2LT5wcm9kdWN0ID0gcHJvZHVjdDsKKworCS8qIGdldCBkYXRhIGZyb20gZW5kcG9pbnQgZGVzY3JpcHRvciAoc2VlIHVzYl9tYXhwYWNrZXQpOiAqLworCXsKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwkJdW5zaWduZWQgZXBudW0gPSB1c2JfcGlwZWVuZHBvaW50KHVzYl9yY3ZpbnRwaXBlKHVzYmRldiwgZXBfcmVhZCkpOworCQllcCA9IHVzYmRldi0+ZXBfaW5bZXBudW1dOworCisJCWlmIChlcCAhPSBOVUxMKSB7CisJCQlsaW5lNi0+aW50ZXJ2YWwgPSBlcC0+ZGVzYy5iSW50ZXJ2YWw7CisJCQlsaW5lNi0+bWF4X3BhY2tldF9zaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOworCQl9IGVsc2UgeworCQkJbGluZTYtPmludGVydmFsID0gTElORTZfRkFMTEJBQ0tfSU5URVJWQUw7CisJCQlsaW5lNi0+bWF4X3BhY2tldF9zaXplID0gTElORTZfRkFMTEJBQ0tfTUFYUEFDS0VUU0laRTsKKwkJCWRldl9lcnIobGluZTYtPmlmY2RldiwgImVuZHBvaW50IG5vdCBhdmFpbGFibGUsIHVzaW5nIGZhbGxiYWNrIHZhbHVlcyIpOworCQl9CisJfQorCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGxpbmU2KTsKKworCWlmIChwcm9wZXJ0aWVzLT5jYXBhYmlsaXRpZXMgJiBMSU5FNl9CSVRfQ09OVFJPTCkgeworCQkvKiBpbml0aWFsaXplIFVTQiBidWZmZXJzOiAqLworCQlsaW5lNi0+YnVmZmVyX2xpc3RlbiA9IGttYWxsb2MoTElORTZfQlVGU0laRV9MSVNURU4sIEdGUF9LRVJORUwpOworCisJCWlmIChsaW5lNi0+YnVmZmVyX2xpc3RlbiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJbGluZTYtPmJ1ZmZlcl9tZXNzYWdlID0ga21hbGxvYyhMSU5FNl9NRVNTQUdFX01BWExFTiwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGxpbmU2LT5idWZmZXJfbWVzc2FnZSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJbGluZTYtPnVyYl9saXN0ZW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCisJCWlmIChsaW5lNi0+dXJiX2xpc3RlbiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gbGluZTZfc3RhcnRfbGlzdGVuKGxpbmU2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIGluaXRpYWxpemUgZGV2aWNlIGRhdGEgYmFzZWQgb24gcHJvZHVjdCBpZDogKi8KKwlzd2l0Y2ggKHByb2R1Y3QpIHsKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzTElWRToKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJCXJldCA9IHBvZF9pbml0KGludGVyZmFjZSwgKHN0cnVjdCB1c2JfbGluZTZfcG9kICopbGluZTYpOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCQlzd2l0Y2ggKGludGVyZmFjZV9udW1iZXIpIHsKKwkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1BPRDoKKwkJCXJldCA9IHBvZF9pbml0KGludGVyZmFjZSwgKHN0cnVjdCB1c2JfbGluZTZfcG9kICopbGluZTYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1ZBUklBWDoKKwkJCXJldCA9IHZhcmlheF9pbml0KGludGVyZmFjZSwgKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICopbGluZTYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJCSJQT0R4dCBMaXZlIGludGVyZmFjZSAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCWludGVyZmFjZV9udW1iZXIpOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6CisJCXJldCA9IHZhcmlheF9pbml0KGludGVyZmFjZSwgKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICopbGluZTYpOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6CisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6CisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6CisJY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgorCQlyZXQgPSB0b25lcG9ydF9pbml0KGludGVyZmFjZSwgKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKilsaW5lNik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFOworCQlyZXQgPSAtRU5PREVWOworCX0KKworCWlmIChyZXQgPCAwKSB7CisJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmludGVyZmFjZS0+ZGV2LmtvYmosICZ1c2JkZXYtPmRldi5rb2JqLAorCQkJCSJ1c2JfZGV2aWNlIik7CisJaWYgKHJldCA8IDApIHsKKwkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJMaW5lNiAlcyBub3cgYXR0YWNoZWRcbiIsCisJCSBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CisJbGluZTZfZGV2aWNlc1tkZXZudW1dID0gbGluZTY7CisJbGluZTZfbGlzdF9kZXZpY2VzKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKwlMaW5lNiBkZXZpY2UgZGlzY29ubmVjdGVkLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCWludCBpbnRlcmZhY2VfbnVtYmVyLCBpOworCisJaWYgKGludGVyZmFjZSA9PSBOVUxMKQorCQlyZXR1cm47CisJdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCWlmICh1c2JkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3lzZnNfcmVtb3ZlX2xpbmsoJmludGVyZmFjZS0+ZGV2LmtvYmosICJ1c2JfZGV2aWNlIik7CisKKwlpbnRlcmZhY2VfbnVtYmVyID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKGxpbmU2ICE9IE5VTEwpIHsKKwkJaWYgKGxpbmU2LT51cmJfbGlzdGVuICE9IE5VTEwpCisJCQl1c2Jfa2lsbF91cmIobGluZTYtPnVyYl9saXN0ZW4pOworCisJCWlmICh1c2JkZXYgIT0gbGluZTYtPnVzYmRldikKKwkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCQkiZHJpdmVyIGJ1ZzogaW5jb25zaXN0ZW50IHVzYiBkZXZpY2VcbiIpOworCisJCXN3aXRjaCAobGluZTYtPnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpIHsKKwkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCQljYXNlIExJTkU2X0RFVklEX1BPRFgzOgorCQljYXNlIExJTkU2X0RFVklEX1BPRFgzTElWRToKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwkJCXBvZF9kaXNjb25uZWN0KGludGVyZmFjZSk7CisJCQlicmVhazsKKworCQljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwkJCXN3aXRjaCAoaW50ZXJmYWNlX251bWJlcikgeworCQkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1BPRDoKKwkJCQlwb2RfZGlzY29ubmVjdChpbnRlcmZhY2UpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfVkFSSUFYOgorCQkJCXZhcmlheF9kaXNjb25uZWN0KGludGVyZmFjZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgTElORTZfREVWSURfVkFSSUFYOgorCQkJdmFyaWF4X2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6CisJCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgxOgorCQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMjoKKwkJY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgorCQkJdG9uZXBvcnRfZGlzY29ubmVjdChpbnRlcmZhY2UpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCU1JU1NJTkdfQ0FTRTsKKwkJfQorCisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmU2ICVzIG5vdyBkaXNjb25uZWN0ZWRcbiIsIGxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKKworCQlmb3IgKGkgPSBMSU5FNl9NQVhfREVWSUNFUzsgaS0tOykKKwkJCWlmIChsaW5lNl9kZXZpY2VzW2ldID09IGxpbmU2KQorCQkJCWxpbmU2X2RldmljZXNbaV0gPSBOVUxMOworCX0KKworCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisKKwkvKiBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50ZXJzOiAqLworCXVzYl9wdXRfaW50ZihpbnRlcmZhY2UpOworCXVzYl9wdXRfZGV2KHVzYmRldik7CisKKwlsaW5lNl9saXN0X2RldmljZXMoKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxpbmU2X2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5wcm9iZSA9IGxpbmU2X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gbGluZTZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBsaW5lNl9pZF90YWJsZSwKK307CisKKy8qCisJTW9kdWxlIGluaXRpYWxpemF0aW9uLgorKi8KK3N0YXRpYyBpbnQgX19pbml0IGxpbmU2X2luaXQodm9pZCkKK3sKKwlpbnQgaSwgcmV0dmFsOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZHJpdmVyIHZlcnNpb24gJXMlc1xuIiwKKwkgICAgICAgRFJJVkVSX05BTUUsIERSSVZFUl9WRVJTSU9OLCBEUklWRVJfUkVWSVNJT04pOworCWxpbmU2X3dvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJJVkVSX05BTUUpOworCisJaWYgKGxpbmU2X3dvcmtxdWV1ZSA9PSBOVUxMKSB7CisJCWVycigiY291bGRuJ3QgY3JlYXRlIHdvcmtxdWV1ZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSBMSU5FNl9NQVhfREVWSUNFUzsgaS0tOykKKwkJbGluZTZfZGV2aWNlc1tpXSA9IE5VTEw7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmxpbmU2X2RyaXZlcik7CisKKwlpZiAocmV0dmFsKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorCU1vZHVsZSBjbGVhbnVwLgorKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBsaW5lNl9leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUobGluZTZfd29ya3F1ZXVlKTsKKwl1c2JfZGVyZWdpc3RlcigmbGluZTZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobGluZTZfaW5pdCk7Cittb2R1bGVfZXhpdChsaW5lNl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwOGJmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuaApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgRFJJVkVSX0gKKyNkZWZpbmUgRFJJVkVSX0gKKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisKKyNpbmNsdWRlICJtaWRpLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImxpbmU2dXNiIgorCisjZGVmaW5lIExJTkU2X1RJTUVPVVQgMQorI2RlZmluZSBMSU5FNl9NQVhfREVWSUNFUyA4CisjZGVmaW5lIExJTkU2X0JVRlNJWkVfTElTVEVOIDMyCisjZGVmaW5lIExJTkU2X01FU1NBR0VfTUFYTEVOIDI1NgorCisKKy8qCisJTGluZTYgTUlESSBjb250cm9sIGNvbW1hbmRzCisqLworI2RlZmluZSBMSU5FNl9QQVJBTV9DSEFOR0UgICAweGIwCisjZGVmaW5lIExJTkU2X1BST0dSQU1fQ0hBTkdFIDB4YzAKKyNkZWZpbmUgTElORTZfU1lTRVhfQkVHSU4gICAgMHhmMAorI2RlZmluZSBMSU5FNl9TWVNFWF9FTkQgICAgICAweGY3CisjZGVmaW5lIExJTkU2X1JFU0VUICAgICAgICAgIDB4ZmYKKworLyoKKwlNSURJIGNoYW5uZWwgZm9yIG1lc3NhZ2VzIGluaXRpYXRlZCBieSB0aGUgaG9zdAorCShhbmQgZXZlbnR1YWxseSBlY2hvZWQgYmFjayBieSB0aGUgZGV2aWNlKQorKi8KKyNkZWZpbmUgTElORTZfQ0hBTk5FTF9IT1NUICAgMHgwMAorCisvKgorCU1JREkgY2hhbm5lbCBmb3IgbWVzc2FnZXMgaW5pdGlhdGVkIGJ5IHRoZSBkZXZpY2UKKyovCisjZGVmaW5lIExJTkU2X0NIQU5ORUxfREVWSUNFIDB4MDIKKworI2RlZmluZSBMSU5FNl9DSEFOTkVMX1VOS05PV04gNSAgLyogZG9uJ3Qga25vdyB5ZXQgd2hhdCB0aGlzIGlzIGdvb2QgZm9yICovCisKKyNkZWZpbmUgTElORTZfQ0hBTk5FTF9NQVNLIDB4MGYKKworCisjZGVmaW5lIE1JU1NJTkdfQ0FTRQlcCisJcHJpbnRrKEtFUk5fRVJSICJsaW5lNnVzYiBkcml2ZXIgYnVnOiBtaXNzaW5nIGNhc2UgaW4gJXM6JWRcbiIsIFwKKwkJX19GSUxFX18sIF9fTElORV9fKQorCisKKyNkZWZpbmUgQ0hFQ0tfUkVUVVJOKHgpCQlcCitkbyB7CQkJCVwKKwllcnIgPSB4OwkJXAorCWlmIChlcnIgPCAwKQkJXAorCQlyZXR1cm4gZXJyOwlcCit9IHdoaWxlICgwKQorCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGxpbmU2X21pZGlfaWRbM107CitleHRlcm4gc3RydWN0IHVzYl9saW5lNiAqbGluZTZfZGV2aWNlc1tMSU5FNl9NQVhfREVWSUNFU107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxpbmU2X3dvcmtxdWV1ZTsKKworc3RhdGljIGNvbnN0IGludCBTWVNFWF9EQVRBX09GUyA9IHNpemVvZihsaW5lNl9taWRpX2lkKSArIDM7CitzdGF0aWMgY29uc3QgaW50IFNZU0VYX0VYVFJBX1NJWkUgPSBzaXplb2YobGluZTZfbWlkaV9pZCkgKyA0OworCisKKy8qKgorCSBDb21tb24gcHJvcGVydGllcyBvZiBMaW5lNiBkZXZpY2VzLgorKi8KK3N0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfYml0OworCWludCBjYXBhYmlsaXRpZXM7Cit9OworCisvKioKKwkgQ29tbW9uIGRhdGEgc2hhcmVkIGJ5IGFsbCBMaW5lNiBkZXZpY2VzLgorCSBDb3JyZXNwb25kcyB0byBhIHBhaXIgb2YgVVNCIGVuZHBvaW50cy4KKyovCitzdHJ1Y3QgdXNiX2xpbmU2IHsKKwkvKioKKwkJIFVTQiBkZXZpY2UuCisJKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCisJLyoqCisJCSBQcm9kdWN0IGlkLgorCSovCisJaW50IHByb2R1Y3Q7CisKKwkvKioKKwkJIFByb3BlcnRpZXMuCisJKi8KKwljb25zdCBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyAqcHJvcGVydGllczsKKworCS8qKgorCQkgSW50ZXJmYWNlIG51bWJlci4KKwkqLworCWludCBpbnRlcmZhY2VfbnVtYmVyOworCisJLyoqCisJCSBJbnRlcnZhbCAobXMpLgorCSovCisJaW50IGludGVydmFsOworCisJLyoqCisJCSBNYXhpbXVtIHNpemUgb2YgVVNCIHBhY2tldC4KKwkqLworCWludCBtYXhfcGFja2V0X3NpemU7CisKKwkvKioKKwkJIERldmljZSByZXByZXNlbnRpbmcgdGhlIFVTQiBpbnRlcmZhY2UuCisJKi8KKwlzdHJ1Y3QgZGV2aWNlICppZmNkZXY7CisKKwkvKioKKwkJIExpbmU2IHNvdW5kIGNhcmQgZGF0YSBzdHJ1Y3R1cmUuCisJCSBFYWNoIGRldmljZSBoYXMgYXQgbGVhc3QgTUlESSBvciBQQ00uCisJKi8KKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisKKwkvKioKKwkJIExpbmU2IFBDTSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUuCisJKi8KKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY207CisKKwkvKioKKwkJIExpbmU2IE1JREkgZGV2aWNlIGRhdGEgc3RydWN0dXJlLgorCSovCisJc3RydWN0IHNuZF9saW5lNl9taWRpICpsaW5lNm1pZGk7CisKKwkvKioKKwkJIFVTQiBlbmRwb2ludCBmb3IgbGlzdGVuaW5nIHRvIGNvbnRyb2wgY29tbWFuZHMuCisJKi8KKwlpbnQgZXBfY29udHJvbF9yZWFkOworCisJLyoqCisJCSBVU0IgZW5kcG9pbnQgZm9yIHdyaXRpbmcgY29udHJvbCBjb21tYW5kcy4KKwkqLworCWludCBlcF9jb250cm9sX3dyaXRlOworCisJLyoqCisJCSBVUkIgZm9yIGxpc3RlbmluZyB0byBQT0R4dCBQcm8gY29udHJvbCBlbmRwb2ludC4KKwkqLworCXN0cnVjdCB1cmIgKnVyYl9saXN0ZW47CisKKwkvKioKKwkJIEJ1ZmZlciBmb3IgbGlzdGVuaW5nIHRvIFBPRHh0IFBybyBjb250cm9sIGVuZHBvaW50LgorCSovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyX2xpc3RlbjsKKworCS8qKgorCQkgQnVmZmVyIGZvciBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KKwkqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9tZXNzYWdlOworCisJLyoqCisJCSBMZW5ndGggb2YgbWVzc2FnZSB0byBiZSBwcm9jZXNzZWQuCisJKi8KKwlpbnQgbWVzc2FnZV9sZW5ndGg7Cit9OworCisKK2V4dGVybiBjaGFyICpsaW5lNl9hbGxvY19zeXNleF9idWZmZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBjb2RlMSwKKwkJCQkgICAgICBpbnQgY29kZTIsIGludCBzaXplKTsKK2V4dGVybiBzc2l6ZV90IGxpbmU2X25vcF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworZXh0ZXJuIHNzaXplX3QgbGluZTZfbm9wX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IGxpbmU2X3JlYWRfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCisJCQkgICBzaXplX3QgZGF0YWxlbik7CitleHRlcm4gaW50IGxpbmU2X3JlYWRfc2VyaWFsX251bWJlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJCQkgICAgaW50ICpzZXJpYWxfbnVtYmVyKTsKK2V4dGVybiBpbnQgbGluZTZfc2VuZF9wcm9ncmFtKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgc2l6ZSk7CitleHRlcm4gaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpOworZXh0ZXJuIGludCBsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpOworZXh0ZXJuIHNzaXplX3QgbGluZTZfc2V0X3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IGxpbmU2X3RyYW5zbWl0X3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IHBhcmFtLAorCQkJCSAgICBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBsaW5lNl93cml0ZV9kYXRhKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgYWRkcmVzcywgdm9pZCAqZGF0YSwKKwkJCSAgICBzaXplX3QgZGF0YWxlbik7CitleHRlcm4gdm9pZCBsaW5lNl93cml0ZV9oZXhkdW1wKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjaGFyIGRpciwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kdW1wcmVxdWVzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2R1bXByZXF1ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYmFhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kdW1wcmVxdWVzdC5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgImR1bXByZXF1ZXN0LmgiCisKKworLyoKKwlTZXQgImR1bXAgaW4gcHJvZ3Jlc3MiIGZsYWcuCisqLwordm9pZCBsaW5lNl9kdW1wX3N0YXJ0ZWQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IGRlc3QpCit7CisJbDZkci0+aW5fcHJvZ3Jlc3MgPSBkZXN0OworfQorCisvKgorCUludmFsaWRhdGUgY3VycmVudCBjaGFubmVsLCBpLmUuLCBzZXQgImR1bXAgaW4gcHJvZ3Jlc3MiIGZsYWcuCisJUmVhZGluZyBmcm9tIHRoZSAiZHVtcCIgc3BlY2lhbCBmaWxlIGJsb2NrcyB1bnRpbCBkdW1wIGlzIGNvbXBsZXRlZC4KKyovCit2b2lkIGxpbmU2X2ludmFsaWRhdGVfY3VycmVudChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyKQoreworCWxpbmU2X2R1bXBfc3RhcnRlZChsNmRyLCBMSU5FNl9EVU1QX0NVUlJFTlQpOworfQorCisvKgorCUNsZWFyICJkdW1wIGluIHByb2dyZXNzIiBmbGFnIGFuZCBub3RpZnkgd2FpdGluZyBwcm9jZXNzZXMuCisqLwordm9pZCBsaW5lNl9kdW1wX2ZpbmlzaGVkKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIpCit7CisJbDZkci0+aW5fcHJvZ3Jlc3MgPSBMSU5FNl9EVU1QX05PTkU7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsNmRyLT53YWl0KTsKK30KKworLyoKKwlTZW5kIGFuIGFzeW5jaHJvbm91cyBjaGFubmVsIGR1bXAgcmVxdWVzdC4KKyovCitpbnQgbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsCisJCQkgICAgIHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgbnVtKQoreworCWludCByZXQ7CisJbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KGw2ZHIpOworCXJldCA9IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMobGluZTYsIGw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIsCisJCQkJCSAgIGw2ZHItPnJlcWJ1ZnNbbnVtXS5sZW5ndGgpOworCisJaWYgKHJldCA8IDApCisJCWxpbmU2X2R1bXBfZmluaXNoZWQobDZkcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorCVNlbmQgYW4gYXN5bmNocm9ub3VzIGR1bXAgcmVxdWVzdCBhZnRlciBhIGdpdmVuIGludGVydmFsLgorKi8KK3ZvaWQgbGluZTZfc3RhcnR1cF9kZWxheWVkKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBzZWNvbmRzLAorCQkJICAgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKSwgdm9pZCAqZGF0YSkKK3sKKwlsNmRyLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHNlY29uZHMgKiBIWjsKKwlsNmRyLT50aW1lci5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCWw2ZHItPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkYXRhOworCWFkZF90aW1lcigmbDZkci0+dGltZXIpOworfQorCisvKgorCVdhaXQgZm9yIGNvbXBsZXRpb24uCisqLworaW50IGxpbmU2X3dhaXRfZHVtcChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgbm9uYmxvY2spCit7CisJaW50IHJldHZhbCA9IDA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJYWRkX3dhaXRfcXVldWUoJmw2ZHItPndhaXQsICZ3YWl0KTsKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKworCXdoaWxlIChsNmRyLT5pbl9wcm9ncmVzcykgeworCQlpZiAobm9uYmxvY2spIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJc2NoZWR1bGUoKTsKKwl9CisKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbDZkci0+d2FpdCwgJndhaXQpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisJSW5pdGlhbGl6ZSBkdW1wIHJlcXVlc3QgYnVmZmVyLgorKi8KK2ludCBsaW5lNl9kdW1wcmVxX2luaXRidWYoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgY29uc3Qgdm9pZCAqYnVmLAorCQkJICBzaXplX3QgbGVuLCBpbnQgbnVtKQoreworCWw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIsIGJ1ZiwgbGVuKTsKKwlsNmRyLT5yZXFidWZzW251bV0ubGVuZ3RoID0gbGVuOworCXJldHVybiAwOworfQorCisvKgorCUluaXRpYWxpemUgZHVtcCByZXF1ZXN0IGRhdGEgc3RydWN0dXJlIChpbmNsdWRpbmcgb25lIGJ1ZmZlcikuCisqLworaW50IGxpbmU2X2R1bXByZXFfaW5pdChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBjb25zdCB2b2lkICpidWYsCisJCSAgICAgICBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisJcmV0ID0gbGluZTZfZHVtcHJlcV9pbml0YnVmKGw2ZHIsIGJ1ZiwgbGVuLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsNmRyLT53YWl0KTsKKwlpbml0X3RpbWVyKCZsNmRyLT50aW1lcik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJRGVzdHJ1Y3QgZHVtcCByZXF1ZXN0IGRhdGEgc3RydWN0dXJlLgorKi8KK3ZvaWQgbGluZTZfZHVtcHJlcV9kZXN0cnVjdGJ1ZihzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgbnVtKQoreworCWlmIChsNmRyID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAobDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisJa2ZyZWUobDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlcik7CisJbDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlciA9IE5VTEw7Cit9CisKKy8qCisJRGVzdHJ1Y3QgZHVtcCByZXF1ZXN0IGRhdGEgc3RydWN0dXJlLgorKi8KK3ZvaWQgbGluZTZfZHVtcHJlcV9kZXN0cnVjdChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyKQoreworCWlmIChsNmRyLT5yZXFidWZzWzBdLmJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTZfZHVtcHJlcV9kZXN0cnVjdGJ1ZihsNmRyLCAwKTsKKwlsNmRyLT5vayA9IDE7CisJZGVsX3RpbWVyX3N5bmMoJmw2ZHItPnRpbWVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kdW1wcmVxdWVzdC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2R1bXByZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3NWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kdW1wcmVxdWVzdC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIERVTVBSRVFVRVNUX0gKKyNkZWZpbmUgRFVNUFJFUVVFU1RfSAorCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisKKworZW51bSB7CisJTElORTZfRFVNUF9OT05FLAorCUxJTkU2X0RVTVBfQ1VSUkVOVAorfTsKKworCitzdHJ1Y3QgbGluZTZfZHVtcF9yZXFidWYgeworCS8qKgorCQkgQnVmZmVyIGZvciBkdW1wIHJlcXVlc3RzLgorCSovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJLyoqCisJCSBTaXplIG9mIGR1bXAgcmVxdWVzdC4KKwkqLworCXNpemVfdCBsZW5ndGg7Cit9OworCisvKioKKwkgUHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gcmVxdWVzdCBjaGFubmVsL21vZGVsLy4uLiBkdW1wIGRhdGEgZnJvbSBhCisJIExpbmU2IGRldmljZS4KKyovCitzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0IHsKKwkvKioKKwkJIFdhaXQgcXVldWUgZm9yIGFjY2VzcyB0byBwcm9ncmFtIGR1bXAgZGF0YS4KKwkqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisKKwkvKioKKwkJIEluZGljYXRlcyBhbiB1bmZpbmlzaGVkIHByb2dyYW0gZHVtcCByZXF1ZXN0LgorCQkgMDogbm8gZHVtcAorCQkgMTogZHVtcCBjdXJyZW50IHNldHRpbmdzCisJCSBPdGhlciBkZXZpY2Utc3BlY2lmaWMgdmFsdWVzIGFyZSBhbHNvIGFsbG93ZWQuCisJKi8KKwlpbnQgaW5fcHJvZ3Jlc3M7CisKKwkvKioKKwkJIFRpbWVyIGZvciBkZWxheWVkIGR1bXAgcmVxdWVzdC4KKwkqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCisJLyoqCisJCSBGbGFnIGlmIGluaXRpYWwgZHVtcCByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWwuCisJKi8KKwljaGFyIG9rOworCisJLyoqCisJCSBEdW1wIHJlcXVlc3QgYnVmZmVycworCSovCisJc3RydWN0IGxpbmU2X2R1bXBfcmVxYnVmIHJlcWJ1ZnNbMV07Cit9OworCitleHRlcm4gdm9pZCBsaW5lNl9kdW1wX2ZpbmlzaGVkKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIpOworZXh0ZXJuIGludCBsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwKKwkJCQkgICAgc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBudW0pOworZXh0ZXJuIHZvaWQgbGluZTZfZHVtcF9zdGFydGVkKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBkZXN0KTsKK2V4dGVybiB2b2lkIGxpbmU2X2R1bXByZXFfZGVzdHJ1Y3Qoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkcik7CitleHRlcm4gdm9pZCBsaW5lNl9kdW1wcmVxX2Rlc3RydWN0YnVmKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBudW0pOworZXh0ZXJuIGludCBsaW5lNl9kdW1wcmVxX2luaXQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgY29uc3Qgdm9pZCAqYnVmLAorCQkJICAgICAgc2l6ZV90IGxlbik7CitleHRlcm4gaW50IGxpbmU2X2R1bXByZXFfaW5pdGJ1ZihzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLAorCQkJCSBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGludCBudW0pOworZXh0ZXJuIHZvaWQgbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIpOworZXh0ZXJuIHZvaWQgbGluZTZfc3RhcnR1cF9kZWxheWVkKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBzZWNvbmRzLAorCQkJCSAgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGxpbmU2X3dhaXRfZHVtcChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgbm9uYmxvY2spOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhMmIxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgIm1pZGkuaCIKKyNpbmNsdWRlICJwb2QuaCIKKyNpbmNsdWRlICJ1c2JkZWZzLmgiCisKKworI2RlZmluZSBVU0VfTUlESUJVRiAgICAgIDEKKyNkZWZpbmUgT1VUUFVUX0RVTVBfT05MWSAwCisKKworI2RlZmluZSBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSkgXAorCSgoc3RydWN0IHNuZF9saW5lNl9taWRpICopKChzdWJzdHJlYW0pLT5ybWlkaS0+cHJpdmF0ZV9kYXRhKSkKKworCitzdGF0aWMgaW50IHNlbmRfbWlkaV9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgIGludCBsZW5ndGgpOworCisKKy8qCisJUGFzcyBkYXRhIHJlY2VpdmVkIHZpYSBVU0IgdG8gTUlESS4KKyovCit2b2lkIGxpbmU2X21pZGlfcmVjZWl2ZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCWludCBsZW5ndGgpCit7CisJaWYgKGxpbmU2LT5saW5lNm1pZGktPnN1YnN0cmVhbV9yZWNlaXZlKQorCQlzbmRfcmF3bWlkaV9yZWNlaXZlKGxpbmU2LT5saW5lNm1pZGktPnN1YnN0cmVhbV9yZWNlaXZlLAorCQkJCSAgICBkYXRhLCBsZW5ndGgpOworfQorCisvKgorCVJlYWQgZGF0YSBmcm9tIE1JREkgYnVmZmVyIGFuZCB0cmFuc21pdCB0aGVtIHZpYSBVU0IuCisqLworc3RhdGljIHZvaWQgbGluZTZfbWlkaV90cmFuc21pdChzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSktPmxpbmU2OworCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpID0gbGluZTYtPmxpbmU2bWlkaTsKKwlzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIgPSAmbGluZTZtaWRpLT5taWRpYnVmX291dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgY2h1bmtbbGluZTYtPm1heF9wYWNrZXRfc2l6ZV07CisJaW50IHJlcSwgZG9uZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNi0+bGluZTZtaWRpLT5taWRpX3RyYW5zbWl0X2xvY2ssIGZsYWdzKTsKKworCWZvciAoOzspIHsKKwkJcmVxID0gbWluKG1pZGlidWZfYnl0ZXNfZnJlZShtYiksIGxpbmU2LT5tYXhfcGFja2V0X3NpemUpOworCQlkb25lID0gc25kX3Jhd21pZGlfdHJhbnNtaXRfcGVlayhzdWJzdHJlYW0sIGNodW5rLCByZXEpOworCisJCWlmIChkb25lID09IDApCisJCQlicmVhazsKKworI2lmIERPX0RVTVBfTUlESV9TRU5ECisJCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdzJywgY2h1bmssIGRvbmUpOworI2VuZGlmCisJCW1pZGlidWZfd3JpdGUobWIsIGNodW5rLCBkb25lKTsKKwkJc25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrKHN1YnN0cmVhbSwgZG9uZSk7CisJfQorCisJZm9yICg7OykgeworCQlkb25lID0gbWlkaWJ1Zl9yZWFkKG1iLCBjaHVuaywgbGluZTYtPm1heF9wYWNrZXRfc2l6ZSk7CisKKwkJaWYgKGRvbmUgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmIChtaWRpYnVmX3NraXBfbWVzc2FnZShtYiwgbGluZTZtaWRpLT5taWRpX21hc2tfdHJhbnNtaXQpKQorCQkJY29udGludWU7CisKKwkJc2VuZF9taWRpX2FzeW5jKGxpbmU2LCBjaHVuaywgZG9uZSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTYtPmxpbmU2bWlkaS0+bWlkaV90cmFuc21pdF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisJTm90aWZpY2F0aW9uIG9mIGNvbXBsZXRpb24gb2YgTUlESSB0cmFuc21pc3Npb24uCisqLworc3RhdGljIHZvaWQgbWlkaV9zZW50KHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXM7CisJaW50IG51bTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IChzdHJ1Y3QgdXNiX2xpbmU2ICopdXJiLT5jb250ZXh0OworCisJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVzYl9mcmVlX3VyYih1cmIpOworCisJaWYgKHN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jaywgZmxhZ3MpOworCW51bSA9IC0tbGluZTYtPmxpbmU2bWlkaS0+bnVtX2FjdGl2ZV9zZW5kX3VyYnM7CisKKwlpZiAobnVtID09IDApIHsKKwkJbGluZTZfbWlkaV90cmFuc21pdChsaW5lNi0+bGluZTZtaWRpLT5zdWJzdHJlYW1fdHJhbnNtaXQpOworCQludW0gPSBsaW5lNi0+bGluZTZtaWRpLT5udW1fYWN0aXZlX3NlbmRfdXJiczsKKwl9CisKKwlpZiAobnVtID09IDApCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF93YWl0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2LT5saW5lNm1pZGktPnNlbmRfdXJiX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKwlTZW5kIGFuIGFzeW5jaHJvbm91cyBNSURJIG1lc3NhZ2UuCisJQXNzdW1lcyB0aGF0IGxpbmU2LT5saW5lNm1pZGktPnNlbmRfdXJiX2xvY2sgaXMgaGVsZAorCShpLmUuLCB0aGlzIGZ1bmN0aW9uIGlzIHNlcmlhbGl6ZWQpLgorKi8KK3N0YXRpYyBpbnQgc2VuZF9taWRpX2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICAgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCisJaWYgKHVyYiA9PSAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKyNpZiBET19EVU1QX1VSQl9TRU5ECisJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ1MnLCBkYXRhLCBsZW5ndGgpOworI2VuZGlmCisKKwl0cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0FUT01JQyk7CisKKwlpZiAodHJhbnNmZXJfYnVmZmVyID09IDApIHsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkodHJhbnNmZXJfYnVmZmVyLCBkYXRhLCBsZW5ndGgpOworCXVzYl9maWxsX2ludF91cmIodXJiLCBsaW5lNi0+dXNiZGV2LAorCQkJIHVzYl9zbmRidWxrcGlwZShsaW5lNi0+dXNiZGV2LAorCQkJCQkgbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAorCQkJIHRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLCBtaWRpX3NlbnQsIGxpbmU2LAorCQkJIGxpbmU2LT5pbnRlcnZhbCk7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSsrbGluZTYtPmxpbmU2bWlkaS0+bnVtX2FjdGl2ZV9zZW5kX3VyYnM7CisKKwlzd2l0Y2ggKGxpbmU2LT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwkJcG9kX21pZGlfcG9zdHByb2Nlc3MoKHN0cnVjdCB1c2JfbGluZTZfcG9kICopbGluZTYsIGRhdGEsCisJCQkJICAgICBsZW5ndGgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW5lNl9taWRpX291dHB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW5lNl9taWRpX291dHB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmU2X21pZGlfb3V0cHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIGludCB1cCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pLT5saW5lNjsKKworCWxpbmU2LT5saW5lNm1pZGktPnN1YnN0cmVhbV90cmFuc21pdCA9IHN1YnN0cmVhbTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jaywgZmxhZ3MpOworCisJaWYgKGxpbmU2LT5saW5lNm1pZGktPm51bV9hY3RpdmVfc2VuZF91cmJzID09IDApCisJCWxpbmU2X21pZGlfdHJhbnNtaXQoc3Vic3RyZWFtKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2LT5saW5lNm1pZGktPnNlbmRfdXJiX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbGluZTZfbWlkaV9vdXRwdXRfZHJhaW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pLT5saW5lNjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCA9ICZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3dhaXQ7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJYWRkX3dhaXRfcXVldWUoaGVhZCwgJndhaXQpOworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCisJd2hpbGUgKGxpbmU2LT5saW5lNm1pZGktPm51bV9hY3RpdmVfc2VuZF91cmJzID4gMCkKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXNjaGVkdWxlKCk7CisKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlyZW1vdmVfd2FpdF9xdWV1ZShoZWFkLCAmd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgbGluZTZfbWlkaV9pbnB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW5lNl9taWRpX2lucHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGluZTZfbWlkaV9pbnB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIGludCB1cCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IGxpbmU2X3Jhd21pZGlfc3Vic3RyZWFtX21pZGkoc3Vic3RyZWFtKS0+bGluZTY7CisKKwlpZiAodXApCisJCWxpbmU2LT5saW5lNm1pZGktPnN1YnN0cmVhbV9yZWNlaXZlID0gc3Vic3RyZWFtOworCWVsc2UKKwkJbGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3JlY2VpdmUgPSAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBsaW5lNl9taWRpX291dHB1dF9vcHMgPSB7CisJLm9wZW4gPSBsaW5lNl9taWRpX291dHB1dF9vcGVuLAorCS5jbG9zZSA9IGxpbmU2X21pZGlfb3V0cHV0X2Nsb3NlLAorCS50cmlnZ2VyID0gbGluZTZfbWlkaV9vdXRwdXRfdHJpZ2dlciwKKwkuZHJhaW4gPSBsaW5lNl9taWRpX291dHB1dF9kcmFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIGxpbmU2X21pZGlfaW5wdXRfb3BzID0geworCS5vcGVuID0gbGluZTZfbWlkaV9pbnB1dF9vcGVuLAorCS5jbG9zZSA9IGxpbmU2X21pZGlfaW5wdXRfY2xvc2UsCisJLnRyaWdnZXIgPSBsaW5lNl9taWRpX2lucHV0X3RyaWdnZXIsCit9OworCisvKgorCUNsZWFudXAgdGhlIExpbmU2IE1JREkgZGV2aWNlLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2NsZWFudXBfbWlkaShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpKQoreworfQorCisvKiBDcmVhdGUgYSBNSURJIGRldmljZSAqLworc3RhdGljIGludCBzbmRfbGluZTZfbmV3X21pZGkoc3RydWN0IHNuZF9saW5lNl9taWRpICpsaW5lNm1pZGkpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3Jhd21pZGlfbmV3KGxpbmU2bWlkaS0+bGluZTYtPmNhcmQsICJMaW5lNiBNSURJIiwgMCwgMSwgMSwKKwkJCSAgICAgICZybWlkaSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlybWlkaS0+cHJpdmF0ZV9kYXRhID0gbGluZTZtaWRpOworCXJtaWRpLT5wcml2YXRlX2ZyZWUgPSBsaW5lNl9jbGVhbnVwX21pZGk7CisJc3RyY3B5KHJtaWRpLT5uYW1lLCBsaW5lNm1pZGktPmxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKKworCXJtaWRpLT5pbmZvX2ZsYWdzID0KKwkJU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8CisJCVNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8CisJCVNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CisKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsCisJCQkgICAgJmxpbmU2X21pZGlfb3V0cHV0X29wcyk7CisJc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkgICAgJmxpbmU2X21pZGlfaW5wdXRfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibWlkaV9tYXNrX3RyYW5zbWl0IiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgbWlkaV9nZXRfbWlkaV9tYXNrX3RyYW5zbWl0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsaW5lNi0+bGluZTZtaWRpLT5taWRpX21hc2tfdHJhbnNtaXQpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAibWlkaV9tYXNrIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgbWlkaV9zZXRfbWlkaV9tYXNrX3RyYW5zbWl0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJbGluZTYtPmxpbmU2bWlkaS0+bWlkaV9tYXNrX3RyYW5zbWl0ID0gdmFsdWU7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJtaWRpX21hc2tfcmVjZWl2ZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IG1pZGlfZ2V0X21pZGlfbWFza19yZWNlaXZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGluZTYtPmxpbmU2bWlkaS0+bWlkaV9tYXNrX3JlY2VpdmUpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAibWlkaV9tYXNrIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgbWlkaV9zZXRfbWlkaV9tYXNrX3JlY2VpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJbGluZTYtPmxpbmU2bWlkaS0+bWlkaV9tYXNrX3JlY2VpdmUgPSB2YWx1ZTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtaWRpX21hc2tfdHJhbnNtaXQsIFNfSVdVR08gfCBTX0lSVUdPLCBtaWRpX2dldF9taWRpX21hc2tfdHJhbnNtaXQsIG1pZGlfc2V0X21pZGlfbWFza190cmFuc21pdCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWlkaV9tYXNrX3JlY2VpdmUsIFNfSVdVR08gfCBTX0lSVUdPLCBtaWRpX2dldF9taWRpX21hc2tfcmVjZWl2ZSwgbWlkaV9zZXRfbWlkaV9tYXNrX3JlY2VpdmUpOworCisvKiBNSURJIGRldmljZSBkZXN0cnVjdG9yICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9taWRpX2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJZGV2aWNlX3JlbW92ZV9maWxlKGxpbmU2bWlkaS0+bGluZTYtPmlmY2RldiwgJmRldl9hdHRyX21pZGlfbWFza190cmFuc21pdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGxpbmU2bWlkaS0+bGluZTYtPmlmY2RldiwgJmRldl9hdHRyX21pZGlfbWFza19yZWNlaXZlKTsKKwltaWRpYnVmX2Rlc3Ryb3koJmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbik7CisJbWlkaWJ1Zl9kZXN0cm95KCZsaW5lNm1pZGktPm1pZGlidWZfb3V0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlJbml0aWFsaXplIHRoZSBMaW5lNiBNSURJIHN1YnN5c3RlbS4KKyovCitpbnQgbGluZTZfaW5pdF9taWRpKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgbWlkaV9vcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9saW5lNl9taWRpX2ZyZWUsCisJfTsKKworCWludCBlcnI7CisJc3RydWN0IHNuZF9saW5lNl9taWRpICpsaW5lNm1pZGk7CisKKwlpZiAoIShsaW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX0NPTlRST0wpKQorCQlyZXR1cm4gMDsgIC8qIHNraXAgTUlESSBpbml0aWFsaXphdGlvbiBhbmQgcmVwb3J0IHN1Y2Nlc3MgKi8KKworCWxpbmU2bWlkaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfbGluZTZfbWlkaSksIEdGUF9LRVJORUwpOworCisJaWYgKGxpbmU2bWlkaSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IG1pZGlidWZfaW5pdCgmbGluZTZtaWRpLT5taWRpYnVmX2luLCBNSURJX0JVRkZFUl9TSVpFLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG1pZGlidWZfaW5pdCgmbGluZTZtaWRpLT5taWRpYnVmX291dCwgTUlESV9CVUZGRVJfU0laRSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlsaW5lNm1pZGktPmxpbmU2ID0gbGluZTY7CisJbGluZTZtaWRpLT5taWRpX21hc2tfdHJhbnNtaXQgPSAxOworCWxpbmU2bWlkaS0+bWlkaV9tYXNrX3JlY2VpdmUgPSA0OworCWxpbmU2LT5saW5lNm1pZGkgPSBsaW5lNm1pZGk7CisKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhsaW5lNi0+Y2FyZCwgU05EUlZfREVWX1JBV01JREksIGxpbmU2bWlkaSwKKwkJCSAgICAgJm1pZGlfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNuZF9jYXJkX3NldF9kZXYobGluZTYtPmNhcmQsIGxpbmU2LT5pZmNkZXYpOworCisJZXJyID0gc25kX2xpbmU2X25ld19taWRpKGxpbmU2bWlkaSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobGluZTYtPmlmY2RldiwgJmRldl9hdHRyX21pZGlfbWFza190cmFuc21pdCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobGluZTYtPmlmY2RldiwgJmRldl9hdHRyX21pZGlfbWFza19yZWNlaXZlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxpbmU2bWlkaS0+c2VuZF93YWl0KTsKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZtaWRpLT5taWRpX3RyYW5zbWl0X2xvY2spOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5ZmQxMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTUlESV9ICisjZGVmaW5lIE1JRElfSAorCisKKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlICJtaWRpYnVmLmgiCisKKworI2RlZmluZSBNSURJX0JVRkZFUl9TSVpFIDEwMjQKKworCitzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgeworCS8qKgorCQkgUG9pbnRlciBiYWNrIHRvIHRoZSBMaW5lNiBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuCisJKi8KKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCS8qKgorCQkgTUlESSBzdWJzdHJlYW0gZm9yIHJlY2VpdmluZyAob3IgTlVMTCBpZiBub3QgYWN0aXZlKS4KKwkqLworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbV9yZWNlaXZlOworCisJLyoqCisJCSBNSURJIHN1YnN0cmVhbSBmb3IgdHJhbnNtaXR0aW5nIChvciBOVUxMIGlmIG5vdCBhY3RpdmUpLgorCSovCisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtX3RyYW5zbWl0OworCisJLyoqCisJCSBOdW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSBNSURJIHNlbmQgVVJCcy4KKwkqLworCWludCBudW1fYWN0aXZlX3NlbmRfdXJiczsKKworCS8qKgorCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgdXBkYXRlcyBvZiBzZW5kX3VyYi4KKwkqLworCXNwaW5sb2NrX3Qgc2VuZF91cmJfbG9jazsKKworCS8qKgorCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgTUlESSBidWZmZXIgaGFuZGxpbmcuCisJKi8KKwlzcGlubG9ja190IG1pZGlfdHJhbnNtaXRfbG9jazsKKworCS8qKgorCQkgV2FpdCBxdWV1ZSBmb3IgTUlESSB0cmFuc21pc3Npb24uCisJKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzZW5kX3dhaXQ7CisKKwkvKioKKwkJIEJpdCBtYXNrIGZvciBvdXRwdXQgTUlESSBjaGFubmVscy4KKwkqLworCWludCBtaWRpX21hc2tfdHJhbnNtaXQ7CisKKwkvKioKKwkJIEJpdCBtYXNrIGZvciBpbnB1dCBNSURJIGNoYW5uZWxzLgorCSovCisJaW50IG1pZGlfbWFza19yZWNlaXZlOworCisJLyoqCisJCSBCdWZmZXIgZm9yIGluY29taW5nIE1JREkgc3RyZWFtLgorCSovCisJc3RydWN0IE1pZGlCdWZmZXIgbWlkaWJ1Zl9pbjsKKworCS8qKgorCQkgQnVmZmVyIGZvciBvdXRnb2luZyBNSURJIHN0cmVhbS4KKwkqLworCXN0cnVjdCBNaWRpQnVmZmVyIG1pZGlidWZfb3V0OworfTsKKworCitleHRlcm4gaW50IGxpbmU2X2luaXRfbWlkaShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNik7CitleHRlcm4gdm9pZCBsaW5lNl9taWRpX3JlY2VpdmUoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgICAgICAgaW50IGxlbmd0aCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBhNWYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgIm1pZGlidWYuaCIKKworCitzdGF0aWMgaW50IG1pZGlidWZfbWVzc2FnZV9sZW5ndGgodW5zaWduZWQgY2hhciBjb2RlKQoreworCWlmIChjb2RlIDwgMHg4MCkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGNvZGUgPCAweGYwKSB7CisJCXN0YXRpYyBjb25zdCBpbnQgbGVuZ3RoW10gPSB7IDMsIDMsIDMsIDMsIDIsIDIsIDMgfTsKKwkJcmV0dXJuIGxlbmd0aFsoY29kZSA+PiA0KSAtIDhdOworCX0gZWxzZSB7CisJCS8qCisJCQlOb3RlIHRoYXQgYWNjb3JkaW5nIHRvIHRoZSBNSURJIHNwZWNpZmljYXRpb24gMHhmMiBpcworCQkJdGhlICJTb25nIFBvc2l0aW9uIFBvaW50ZXIiLCBidXQgdGhpcyBpcyB1c2VkIGJ5IExpbmU2CisJCQl0byBzZW5kIHN5c2V4IG1lc3NhZ2VzIHRvIHRoZSBob3N0LgorCQkqLworCQlzdGF0aWMgY29uc3QgaW50IGxlbmd0aFtdID0geyAtMSwgMiwgLTEsIDIsIC0xLCAtMSwgMSwgMSwgMSwgMSwKKwkJCQkJICAgICAgIDEsIDEsIDEsIC0xLCAxLCAxIH07CisJCXJldHVybiBsZW5ndGhbY29kZSAmIDB4MGZdOworCX0KK30KKwordm9pZCBtaWRpYnVmX3Jlc2V0KHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCXRoaXMtPnBvc19yZWFkID0gdGhpcy0+cG9zX3dyaXRlID0gdGhpcy0+ZnVsbCA9IDA7CisJdGhpcy0+Y29tbWFuZF9wcmV2ID0gLTE7Cit9CisKK2ludCBtaWRpYnVmX2luaXQoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMsIGludCBzaXplLCBpbnQgc3BsaXQpCit7CisJdGhpcy0+YnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKworCWlmICh0aGlzLT5idWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0aGlzLT5zaXplID0gc2l6ZTsKKwl0aGlzLT5zcGxpdCA9IHNwbGl0OworCW1pZGlidWZfcmVzZXQodGhpcyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWlkaWJ1Zl9zdGF0dXMoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIm1pZGlidWYgc2l6ZT0lZCBzcGxpdD0lZCBwb3NfcmVhZD0lZCBwb3Nfd3JpdGU9JWQgIgorCSAgICAgICAiZnVsbD0lZCBjb21tYW5kX3ByZXY9JTAyeFxuIiwgdGhpcy0+c2l6ZSwgdGhpcy0+c3BsaXQsCisJICAgICAgIHRoaXMtPnBvc19yZWFkLCB0aGlzLT5wb3Nfd3JpdGUsIHRoaXMtPmZ1bGwsIHRoaXMtPmNvbW1hbmRfcHJldik7Cit9CisKK3N0YXRpYyBpbnQgbWlkaWJ1Zl9pc19lbXB0eShzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwlyZXR1cm4gKHRoaXMtPnBvc19yZWFkID09IHRoaXMtPnBvc193cml0ZSkgJiYgIXRoaXMtPmZ1bGw7Cit9CisKK3N0YXRpYyBpbnQgbWlkaWJ1Zl9pc19mdWxsKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCXJldHVybiB0aGlzLT5mdWxsOworfQorCitpbnQgbWlkaWJ1Zl9ieXRlc19mcmVlKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCXJldHVybgorCQltaWRpYnVmX2lzX2Z1bGwodGhpcykgPworCQkwIDoKKwkJKHRoaXMtPnBvc19yZWFkIC0gdGhpcy0+cG9zX3dyaXRlICsgdGhpcy0+c2l6ZSAtIDEpICUgdGhpcy0+c2l6ZSArIDE7Cit9CisKK2ludCBtaWRpYnVmX2J5dGVzX3VzZWQoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJcmV0dXJuCisJCW1pZGlidWZfaXNfZW1wdHkodGhpcykgPworCQkwIDoKKwkJKHRoaXMtPnBvc193cml0ZSAtIHRoaXMtPnBvc19yZWFkICsgdGhpcy0+c2l6ZSAtIDEpICUgdGhpcy0+c2l6ZSArIDE7Cit9CisKK2ludCBtaWRpYnVmX3dyaXRlKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBieXRlc19mcmVlOworCWludCBsZW5ndGgxLCBsZW5ndGgyOworCWludCBza2lwX2FjdGl2ZV9zZW5zZSA9IDA7CisKKwlpZiAobWlkaWJ1Zl9pc19mdWxsKHRoaXMpIHx8IChsZW5ndGggPD0gMCkpCisJCXJldHVybiAwOworCisJLyogc2tpcCB0cmFpbGluZyBhY3RpdmUgc2Vuc2UgKi8KKwlpZiAoZGF0YVtsZW5ndGggLSAxXSA9PSAweGZlKSB7CisJCS0tbGVuZ3RoOworCQlza2lwX2FjdGl2ZV9zZW5zZSA9IDE7CisJfQorCisJYnl0ZXNfZnJlZSA9IG1pZGlidWZfYnl0ZXNfZnJlZSh0aGlzKTsKKworCWlmIChsZW5ndGggPiBieXRlc19mcmVlKQorCQlsZW5ndGggPSBieXRlc19mcmVlOworCisJaWYgKGxlbmd0aCA+IDApIHsKKwkJbGVuZ3RoMSA9IHRoaXMtPnNpemUgLSB0aGlzLT5wb3Nfd3JpdGU7CisKKwkJaWYgKGxlbmd0aCA8IGxlbmd0aDEpIHsKKwkJCS8qIG5vIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCQltZW1jcHkodGhpcy0+YnVmICsgdGhpcy0+cG9zX3dyaXRlLCBkYXRhLCBsZW5ndGgpOworCQkJdGhpcy0+cG9zX3dyaXRlICs9IGxlbmd0aDsKKwkJfSBlbHNlIHsKKwkJCS8qIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCQlsZW5ndGgyID0gbGVuZ3RoIC0gbGVuZ3RoMTsKKwkJCW1lbWNweSh0aGlzLT5idWYgKyB0aGlzLT5wb3Nfd3JpdGUsIGRhdGEsIGxlbmd0aDEpOworCQkJbWVtY3B5KHRoaXMtPmJ1ZiwgZGF0YSArIGxlbmd0aDEsIGxlbmd0aDIpOworCQkJdGhpcy0+cG9zX3dyaXRlID0gbGVuZ3RoMjsKKwkJfQorCisJCWlmICh0aGlzLT5wb3Nfd3JpdGUgPT0gdGhpcy0+cG9zX3JlYWQpCisJCQl0aGlzLT5mdWxsID0gMTsKKwl9CisKKwlyZXR1cm4gbGVuZ3RoICsgc2tpcF9hY3RpdmVfc2Vuc2U7Cit9CisKK2ludCBtaWRpYnVmX3JlYWQoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGJ5dGVzX3VzZWQ7CisJaW50IGxlbmd0aDEsIGxlbmd0aDI7CisJaW50IGNvbW1hbmQ7CisJaW50IG1pZGlfbGVuZ3RoOworCWludCByZXBlYXQgPSAwOworCWludCBpOworCisJLyogd2UgbmVlZCB0byBiZSBhYmxlIHRvIHN0b3JlIGF0IGxlYXN0IGEgMyBieXRlIE1JREkgbWVzc2FnZSAqLworCWlmIChsZW5ndGggPCAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtaWRpYnVmX2lzX2VtcHR5KHRoaXMpKQorCQlyZXR1cm4gMDsKKworCWJ5dGVzX3VzZWQgPSBtaWRpYnVmX2J5dGVzX3VzZWQodGhpcyk7CisKKwlpZiAobGVuZ3RoID4gYnl0ZXNfdXNlZCkKKwkJbGVuZ3RoID0gYnl0ZXNfdXNlZDsKKworCWxlbmd0aDEgPSB0aGlzLT5zaXplIC0gdGhpcy0+cG9zX3JlYWQ7CisKKwkvKiBjaGVjayBNSURJIGNvbW1hbmQgbGVuZ3RoICovCisJY29tbWFuZCA9IHRoaXMtPmJ1Zlt0aGlzLT5wb3NfcmVhZF07CisKKwlpZiAoY29tbWFuZCAmIDB4ODApIHsKKwkJbWlkaV9sZW5ndGggPSBtaWRpYnVmX21lc3NhZ2VfbGVuZ3RoKGNvbW1hbmQpOworCQl0aGlzLT5jb21tYW5kX3ByZXYgPSBjb21tYW5kOworCX0gZWxzZSB7CisJCWlmICh0aGlzLT5jb21tYW5kX3ByZXYgPiAwKSB7CisJCQlpbnQgbWlkaV9sZW5ndGhfcHJldiA9IG1pZGlidWZfbWVzc2FnZV9sZW5ndGgodGhpcy0+Y29tbWFuZF9wcmV2KTsKKworCQkJaWYgKG1pZGlfbGVuZ3RoX3ByZXYgPiAwKSB7CisJCQkJbWlkaV9sZW5ndGggPSBtaWRpX2xlbmd0aF9wcmV2IC0gMTsKKwkJCQlyZXBlYXQgPSAxOworCQkJfSBlbHNlCisJCQkJbWlkaV9sZW5ndGggPSAtMTsKKwkJfSBlbHNlCisJCQltaWRpX2xlbmd0aCA9IC0xOworCX0KKworCWlmIChtaWRpX2xlbmd0aCA8IDApIHsKKwkJLyogc2VhcmNoIGZvciBlbmQgb2YgbWVzc2FnZSAqLworCQlpZiAobGVuZ3RoIDwgbGVuZ3RoMSkgeworCQkJLyogbm8gYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJCWZvciAoaSA9IDE7IGkgPCBsZW5ndGg7ICsraSkKKwkJCQlpZiAodGhpcy0+YnVmW3RoaXMtPnBvc19yZWFkICsgaV0gJiAweDgwKQorCQkJCQlicmVhazsKKworCQkJbWlkaV9sZW5ndGggPSBpOworCQl9IGVsc2UgeworCQkJLyogYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJCWxlbmd0aDIgPSBsZW5ndGggLSBsZW5ndGgxOworCisJCQlmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoMTsgKytpKQorCQkJCWlmICh0aGlzLT5idWZbdGhpcy0+cG9zX3JlYWQgKyBpXSAmIDB4ODApCisJCQkJCWJyZWFrOworCisJCQlpZiAoaSA8IGxlbmd0aDEpCisJCQkJbWlkaV9sZW5ndGggPSBpOworCQkJZWxzZSB7CisJCQkJZm9yIChpID0gMDsgaSA8IGxlbmd0aDI7ICsraSkKKwkJCQkJaWYgKHRoaXMtPmJ1ZltpXSAmIDB4ODApCisJCQkJCQlicmVhazsKKworCQkJCW1pZGlfbGVuZ3RoID0gbGVuZ3RoMSArIGk7CisJCQl9CisJCX0KKworCQlpZiAobWlkaV9sZW5ndGggPT0gbGVuZ3RoKQorCQkJbWlkaV9sZW5ndGggPSAtMTsgIC8qIGVuZCBvZiBtZXNzYWdlIG5vdCBmb3VuZCAqLworCX0KKworCWlmIChtaWRpX2xlbmd0aCA8IDApIHsKKwkJaWYgKCF0aGlzLT5zcGxpdCkKKwkJCXJldHVybiAwOyAgLyogY29tbWFuZCBpcyBub3QgeWV0IGNvbXBsZXRlICovCisJfSBlbHNlIHsKKwkJaWYgKGxlbmd0aCA8IG1pZGlfbGVuZ3RoKQorCQkJcmV0dXJuIDA7ICAvKiBjb21tYW5kIGlzIG5vdCB5ZXQgY29tcGxldGUgKi8KKworCQlsZW5ndGggPSBtaWRpX2xlbmd0aDsKKwl9CisKKwlpZiAobGVuZ3RoIDwgbGVuZ3RoMSkgeworCQkvKiBubyBidWZmZXIgd3JhcGFyb3VuZCAqLworCQltZW1jcHkoZGF0YSArIHJlcGVhdCwgdGhpcy0+YnVmICsgdGhpcy0+cG9zX3JlYWQsIGxlbmd0aCk7CisJCXRoaXMtPnBvc19yZWFkICs9IGxlbmd0aDsKKwl9IGVsc2UgeworCQkvKiBidWZmZXIgd3JhcGFyb3VuZCAqLworCQlsZW5ndGgyID0gbGVuZ3RoIC0gbGVuZ3RoMTsKKwkJbWVtY3B5KGRhdGEgKyByZXBlYXQsIHRoaXMtPmJ1ZiArIHRoaXMtPnBvc19yZWFkLCBsZW5ndGgxKTsKKwkJbWVtY3B5KGRhdGEgKyByZXBlYXQgKyBsZW5ndGgxLCB0aGlzLT5idWYsIGxlbmd0aDIpOworCQl0aGlzLT5wb3NfcmVhZCA9IGxlbmd0aDI7CisJfQorCisJaWYgKHJlcGVhdCkKKwkJZGF0YVswXSA9IHRoaXMtPmNvbW1hbmRfcHJldjsKKworCXRoaXMtPmZ1bGwgPSAwOworCXJldHVybiBsZW5ndGggKyByZXBlYXQ7Cit9CisKK2ludCBtaWRpYnVmX2lnbm9yZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcywgaW50IGxlbmd0aCkKK3sKKwlpbnQgYnl0ZXNfdXNlZCA9IG1pZGlidWZfYnl0ZXNfdXNlZCh0aGlzKTsKKworCWlmIChsZW5ndGggPiBieXRlc191c2VkKQorCQlsZW5ndGggPSBieXRlc191c2VkOworCisJdGhpcy0+cG9zX3JlYWQgPSAodGhpcy0+cG9zX3JlYWQgKyBsZW5ndGgpICUgdGhpcy0+c2l6ZTsKKwl0aGlzLT5mdWxsID0gMDsKKwlyZXR1cm4gbGVuZ3RoOworfQorCitpbnQgbWlkaWJ1Zl9za2lwX21lc3NhZ2Uoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMsIHVuc2lnbmVkIHNob3J0IG1hc2spCit7CisJaW50IGNtZCA9IHRoaXMtPmNvbW1hbmRfcHJldjsKKworCWlmICgoY21kID49IDB4ODApICYmIChjbWQgPCAweGYwKSkKKwkJaWYgKChtYXNrICYgKDEgPDwgKGNtZCAmIDB4MGYpKSkgPT0gMCkKKwkJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWlkaWJ1Zl9kZXN0cm95KHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCWtmcmVlKHRoaXMtPmJ1Zik7CisJdGhpcy0+YnVmID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Nzc1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE1JRElCVUZfSAorI2RlZmluZSBNSURJQlVGX0gKKworCitzdHJ1Y3QgTWlkaUJ1ZmZlciB7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCBzaXplOworCWludCBzcGxpdDsKKwlpbnQgcG9zX3JlYWQsIHBvc193cml0ZTsKKwlpbnQgZnVsbDsKKwlpbnQgY29tbWFuZF9wcmV2OworfTsKKworCitleHRlcm4gaW50IG1pZGlidWZfYnl0ZXNfdXNlZChzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIpOworZXh0ZXJuIGludCBtaWRpYnVmX2J5dGVzX2ZyZWUoc3RydWN0IE1pZGlCdWZmZXIgKm1iKTsKK2V4dGVybiB2b2lkIG1pZGlidWZfZGVzdHJveShzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIpOworZXh0ZXJuIGludCBtaWRpYnVmX2lnbm9yZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIsIGludCBsZW5ndGgpOworZXh0ZXJuIGludCBtaWRpYnVmX2luaXQoc3RydWN0IE1pZGlCdWZmZXIgKm1iLCBpbnQgc2l6ZSwgaW50IHNwbGl0KTsKK2V4dGVybiBpbnQgbWlkaWJ1Zl9yZWFkKHN0cnVjdCBNaWRpQnVmZmVyICptYiwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCk7CitleHRlcm4gdm9pZCBtaWRpYnVmX3Jlc2V0KHN0cnVjdCBNaWRpQnVmZmVyICptYik7CitleHRlcm4gaW50IG1pZGlidWZfc2tpcF9tZXNzYWdlKHN0cnVjdCBNaWRpQnVmZmVyICptYiwgdW5zaWduZWQgc2hvcnQgbWFzayk7CitleHRlcm4gdm9pZCBtaWRpYnVmX3N0YXR1cyhzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIpOworZXh0ZXJuIGludCBtaWRpYnVmX3dyaXRlKHN0cnVjdCBNaWRpQnVmZmVyICptYiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSBpbnQgbGVuZ3RoKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQxMTNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgImNhcHR1cmUuaCIKKyNpbmNsdWRlICJwbGF5YmFjay5oIgorI2luY2x1ZGUgInBvZC5oIgorCisKKy8qIHRyaWdnZXIgY2FsbGJhY2sgKi8KK2ludCBzbmRfbGluZTZfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja190cmlnZ2VyLCBmbGFncyk7CisJY2xlYXJfYml0KEJJVF9QUkVQQVJFRCwgJmxpbmU2cGNtLT5mbGFncyk7CisKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgeworCQlzd2l0Y2ggKHMtPnN0cmVhbSkgeworCQljYXNlIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s6CisJCQllcnIgPSBzbmRfbGluZTZfcGxheWJhY2tfdHJpZ2dlcihzLCBjbWQpOworCisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIsCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOgorCQkJZXJyID0gc25kX2xpbmU2X2NhcHR1cmVfdHJpZ2dlcihzLCBjbWQpOworCisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIsCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiVW5rbm93biBzdHJlYW0gZGlyZWN0aW9uICVkXG4iLAorCQkJCXMtPnN0cmVhbSk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja190cmlnZ2VyLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbnRyb2wgaW5mbyBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY29udHJvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAyOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMjU2OworCXJldHVybiAwOworfQorCisvKiBjb250cm9sIGdldCBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY29udHJvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCBpOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWZvciAoaSA9IDI7IGktLTspCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gbGluZTZwY20tPnZvbHVtZVtpXTsKKworCXJldHVybiAwOworfQorCisvKiBjb250cm9sIHB1dCBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY29udHJvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCBpLCBjaGFuZ2VkID0gMDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwlmb3IgKGkgPSAyOyBpLS07KQorCQlpZiAobGluZTZwY20tPnZvbHVtZVtpXSAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSkgeworCQkJbGluZTZwY20tPnZvbHVtZVtpXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldOworCQkJY2hhbmdlZCA9IDE7CisJCX0KKworCXJldHVybiBjaGFuZ2VkOworfQorCisvKiBjb250cm9sIGRlZmluaXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lNl9jb250cm9sID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCS5pbmRleCA9IDAsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLmluZm8gPSBzbmRfbGluZTZfY29udHJvbF9pbmZvLAorCS5nZXQgPSBzbmRfbGluZTZfY29udHJvbF9nZXQsCisJLnB1dCA9IHNuZF9saW5lNl9jb250cm9sX3B1dAorfTsKKworLyoKKwlDbGVhbnVwIHRoZSBQQ00gZGV2aWNlLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2NsZWFudXBfcGNtKHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJaW50IGk7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9jaGlwKHBjbSk7CisKKwlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgeworCQlpZiAobGluZTZwY20tPnVyYl9hdWRpb19vdXRbaV0pIHsKKwkJCXVzYl9raWxsX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSk7CisJCQl1c2JfZnJlZV91cmIobGluZTZwY20tPnVyYl9hdWRpb19vdXRbaV0pOworCQl9CisJCWlmIChsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldKSB7CisJCQl1c2Jfa2lsbF91cmIobGluZTZwY20tPnVyYl9hdWRpb19pbltpXSk7CisJCQl1c2JfZnJlZV91cmIobGluZTZwY20tPnVyYl9hdWRpb19pbltpXSk7CisJCX0KKwl9Cit9CisKKy8qIGNyZWF0ZSBhIFBDTSBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X25ld19wY20oc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fbmV3KGxpbmU2cGNtLT5saW5lNi0+Y2FyZCwKKwkJCSAoY2hhciAqKWxpbmU2cGNtLT5saW5lNi0+cHJvcGVydGllcy0+bmFtZSwKKwkJCSAwLCAxLCAxLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gbGluZTZwY207CisJcGNtLT5wcml2YXRlX2ZyZWUgPSBsaW5lNl9jbGVhbnVwX3BjbTsKKwlsaW5lNnBjbS0+cGNtID0gcGNtOworCXN0cmNweShwY20tPm5hbWUsIGxpbmU2cGNtLT5saW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CisKKwkvKiBzZXQgb3BlcmF0b3JzICovCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9saW5lNl9wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9saW5lNl9jYXB0dXJlX29wcyk7CisKKwkvKiBwcmUtYWxsb2NhdGlvbiBvZiBidWZmZXJzICovCisJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVMsCisJCQkJCXNuZF9kbWFfY29udGludW91c19kYXRhKEdGUF9LRVJORUwpLAorCQkJCQk2NCAqIDEwMjQsIDEyOCAqIDEwMjQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFBDTSBkZXZpY2UgZGVzdHJ1Y3RvciAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGNtX2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKwlDcmVhdGUgYW5kIHJlZ2lzdGVyIHRoZSBQQ00gZGV2aWNlIGFuZCBtaXhlciBlbnRyaWVzLgorCUNyZWF0ZSBVUkJzIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZS4KKyovCitpbnQgbGluZTZfaW5pdF9wY20oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCSAgIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyAqcHJvcGVydGllcykKK3sKKwlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIHBjbV9vcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9saW5lNl9wY21fZnJlZSwKKwl9OworCisJaW50IGVycjsKKwlpbnQgZXBfcmVhZCA9IDAsIGVwX3dyaXRlID0gMDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY207CisKKwlpZiAoIShsaW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX1BDTSkpCisJCXJldHVybiAwOyAgLyogc2tpcCBQQ00gaW5pdGlhbGl6YXRpb24gYW5kIHJlcG9ydCBzdWNjZXNzICovCisKKwkvKiBpbml0aWFsaXplIFBDTSBzdWJzeXN0ZW0gYmFzZWQgb24gcHJvZHVjdCBpZDogKi8KKwlzd2l0Y2ggKGxpbmU2LT5wcm9kdWN0KSB7CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwkJZXBfcmVhZCAgPSAweDgyOworCQllcF93cml0ZSA9IDB4MDE7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzTElWRToKKwkJZXBfcmVhZCAgPSAweDg2OworCQllcF93cml0ZSA9IDB4MDI7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJCWVwX3JlYWQgID0gMHg4MjsKKwkJZXBfd3JpdGUgPSAweDAyOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfR1VJVEFSUE9SVDoKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYOgorCQllcF9yZWFkICA9IDB4ODI7CisJCWVwX3dyaXRlID0gMHgwMTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKKwkJZXBfcmVhZCAgPSAweDAwOworCQllcF93cml0ZSA9IDB4MDA7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6CisJCWVwX3JlYWQgID0gMHg4NzsKKwkJZXBfd3JpdGUgPSAweDAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRTsKKwl9CisKKwlsaW5lNnBjbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfbGluZTZfcGNtKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAobGluZTZwY20gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaW5lNnBjbS0+dm9sdW1lWzBdID0gbGluZTZwY20tPnZvbHVtZVsxXSA9IDEyODsKKwlsaW5lNnBjbS0+bGluZTYgPSBsaW5lNjsKKwlsaW5lNnBjbS0+ZXBfYXVkaW9fcmVhZCA9IGVwX3JlYWQ7CisJbGluZTZwY20tPmVwX2F1ZGlvX3dyaXRlID0gZXBfd3JpdGU7CisJbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZSA9IHVzYl9tYXhwYWNrZXQobGluZTYtPnVzYmRldiwKKwkJCQkJCSB1c2JfcmN2aW50cGlwZShsaW5lNi0+dXNiZGV2LAorCQkJCQkJCQllcF9yZWFkKSwKKwkJCQkJCSAgMCk7CisJbGluZTZwY20tPnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCWxpbmU2LT5saW5lNnBjbSA9IGxpbmU2cGNtOworCisJLyogUENNIGRldmljZTogKi8KKwllcnIgPSBzbmRfZGV2aWNlX25ldyhsaW5lNi0+Y2FyZCwgU05EUlZfREVWX1BDTSwgbGluZTYsICZwY21fb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNuZF9jYXJkX3NldF9kZXYobGluZTYtPmNhcmQsIGxpbmU2LT5pZmNkZXYpOworCisJZXJyID0gc25kX2xpbmU2X25ld19wY20obGluZTZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2luaXQoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCk7CisJc3Bpbl9sb2NrX2luaXQoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luKTsKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZwY20tPmxvY2tfdHJpZ2dlcik7CisKKwllcnIgPSBjcmVhdGVfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY3JlYXRlX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogbWl4ZXI6ICovCisJZXJyID0gc25kX2N0bF9hZGQobGluZTYtPmNhcmQsIHNuZF9jdGxfbmV3MSgmbGluZTZfY29udHJvbCwgbGluZTZwY20pKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisvKiBwcmVwYXJlIHBjbSBjYWxsYmFjayAqLworaW50IHNuZF9saW5lNl9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChCSVRfUFJFUEFSRUQsICZsaW5lNnBjbS0+ZmxhZ3MpKSB7CisJCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKwkJbGluZTZwY20tPnBvc19vdXQgPSAwOworCQlsaW5lNnBjbS0+cG9zX291dF9kb25lID0gMDsKKworCQl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKwkJbGluZTZwY20tPmJ5dGVzX291dCA9IDA7CisJCWxpbmU2cGNtLT5wb3NfaW5fZG9uZSA9IDA7CisJCWxpbmU2cGNtLT5ieXRlc19pbiA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYjIxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uaApAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKy8qCisJUENNIGludGVyZmFjZSB0byBQT0Qgc2VyaWVzIGRldmljZXMuCisqLworCisjaWZuZGVmIFBDTV9ICisjZGVmaW5lIFBDTV9ICisKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjaW5jbHVkZSAiZHJpdmVyLmgiCisjaW5jbHVkZSAidXNiZGVmcy5oIgorCisKKy8qIG51bWJlciBvZiBVUkJzICovCisjZGVmaW5lIExJTkU2X0lTT19CVUZGRVJTCTgKKworLyogbnVtYmVyIG9mIFVTQiBmcmFtZXMgcGVyIFVSQiAqLworI2RlZmluZSBMSU5FNl9JU09fUEFDS0VUUwkyCisKKy8qIGluIGEgImZ1bGwgc3BlZWQiIGRldmljZSAoc3VjaCBhcyB0aGUgUE9EeHQgUHJvKSB0aGlzIG1lYW5zIDFtcyAqLworI2RlZmluZSBMSU5FNl9JU09fSU5URVJWQUwJMQorCisvKiB0aGlzIHNob3VsZCBiZSBxdWVyaWVkIGR5bmFtaWNhbGx5IGZyb20gdGhlIFVTQiBpbnRlcmZhY2UhICovCisjZGVmaW5lIExJTkU2X0lTT19QQUNLRVRfU0laRV9NQVgJMjUyCisKKworLyoKKwlFeHRyYWN0IHRoZSBtZXNzYWdpbmcgZGV2aWNlIGZyb20gdGhlIHN1YnN0cmVhbSBpbnN0YW5jZQorKi8KKyNkZWZpbmUgczJtKHMpCSgoKHN0cnVjdCBzbmRfbGluZTZfcGNtICopIFwKKwkJICAgc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzKSktPmxpbmU2LT5pZmNkZXYpCisKKworZW51bSB7CisJQklUX1JVTk5JTkdfUExBWUJBQ0ssCisJQklUX1JVTk5JTkdfQ0FQVFVSRSwKKwlCSVRfUEFVU0VfUExBWUJBQ0ssCisJQklUX1BSRVBBUkVECit9OworCitzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgeworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9saW5lNl9wbGF5YmFja19odywgc25kX2xpbmU2X2NhcHR1cmVfaHc7CisJc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zIHNuZF9saW5lNl9yYXRlczsKKwlpbnQgYnl0ZXNfcGVyX2ZyYW1lOworfTsKKworc3RydWN0IHNuZF9saW5lNl9wY20geworCS8qKgorCQkgUG9pbnRlciBiYWNrIHRvIHRoZSBMaW5lNiBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuCisJKi8KKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCS8qKgorCQkgUHJvcGVydGllcy4KKwkqLworCXN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyAqcHJvcGVydGllczsKKworCS8qKgorCQkgQUxTQSBwY20gc3RyZWFtCisJKi8KKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCisJLyoqCisJCSBVUkJzIGZvciBhdWRpbyBwbGF5YmFjay4KKwkqLworCXN0cnVjdCB1cmIgKnVyYl9hdWRpb19vdXRbTElORTZfSVNPX0JVRkZFUlNdOworCisJLyoqCisJCSBVUkJzIGZvciBhdWRpbyBjYXB0dXJlLgorCSovCisJc3RydWN0IHVyYiAqdXJiX2F1ZGlvX2luW0xJTkU2X0lTT19CVUZGRVJTXTsKKworCS8qKgorCQkgVGVtcG9yYXJ5IGJ1ZmZlciB0byBob2xkIGRhdGEgd2hlbiBwbGF5YmFjayBidWZmZXIgd3JhcHMuCisJKi8KKwl1bnNpZ25lZCBjaGFyICp3cmFwX291dDsKKworCS8qKgorCQkgVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgY2FwdHVyZS4KKwkJIFNpbmNlIHRoZSBwYWNrZXQgc2l6ZSBpcyBub3Qga25vd24gaW4gYWR2YW5jZSwgdGhpcyBidWZmZXIgaXMKKwkJIGxhcmdlIGVub3VnaCB0byBzdG9yZSBtYXhpbXVtIHNpemUgcGFja2V0cy4KKwkqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9pbjsKKworCS8qKgorCQkgRnJlZSBmcmFtZSBwb3NpdGlvbiBpbiB0aGUgcGxheWJhY2sgYnVmZmVyLgorCSovCisJc25kX3BjbV91ZnJhbWVzX3QgcG9zX291dDsKKworCS8qKgorCQkgQ291bnQgcHJvY2Vzc2VkIGJ5dGVzIGZvciBwbGF5YmFjay4KKwkJIFRoaXMgaXMgbW9kdWxvIHBlcmlvZCBzaXplICh0byBkZXRlcm1pbmUgd2hlbiBhIHBlcmlvZCBpcworCQkgZmluaXNoZWQpLgorCSovCisJdW5zaWduZWQgYnl0ZXNfb3V0OworCisJLyoqCisJCSBDb3VudGVyIHRvIGNyZWF0ZSBkZXNpcmVkIHBsYXliYWNrIHNhbXBsZSByYXRlLgorCSovCisJdW5zaWduZWQgY291bnRfb3V0OworCisJLyoqCisJCSBQbGF5YmFjayBwZXJpb2Qgc2l6ZSBpbiBieXRlcworCSovCisJdW5zaWduZWQgcGVyaW9kX291dDsKKworCS8qKgorCQkgUHJvY2Vzc2VkIGZyYW1lIHBvc2l0aW9uIGluIHRoZSBwbGF5YmFjayBidWZmZXIuCisJCSBUaGUgY29udGVudHMgb2YgdGhlIG91dHB1dCByaW5nIGJ1ZmZlciBoYXZlIGJlZW4gY29uc3VtZWQgYnkKKwkJIHRoZSBVU0Igc3Vic3lzdGVtIChpLmUuLCBzZW50IHRvIHRoZSBVU0IgZGV2aWNlKSB1cCB0byB0aGlzCisJCSBwb3NpdGlvbi4KKwkqLworCXNuZF9wY21fdWZyYW1lc190IHBvc19vdXRfZG9uZTsKKworCS8qKgorCQkgQ291bnQgcHJvY2Vzc2VkIGJ5dGVzIGZvciBjYXB0dXJlLgorCQkgVGhpcyBpcyBtb2R1bG8gcGVyaW9kIHNpemUgKHRvIGRldGVybWluZSB3aGVuIGEgcGVyaW9kIGlzCisJCSBmaW5pc2hlZCkuCisJKi8KKwl1bnNpZ25lZCBieXRlc19pbjsKKworCS8qKgorCQkgQ291bnRlciB0byBjcmVhdGUgZGVzaXJlZCBjYXB0dXJlIHNhbXBsZSByYXRlLgorCSovCisJdW5zaWduZWQgY291bnRfaW47CisKKwkvKioKKwkJIENhcHR1cmUgcGVyaW9kIHNpemUgaW4gYnl0ZXMKKwkqLworCXVuc2lnbmVkIHBlcmlvZF9pbjsKKworCS8qKgorCQkgUHJvY2Vzc2VkIGZyYW1lIHBvc2l0aW9uIGluIHRoZSBjYXB0dXJlIGJ1ZmZlci4KKwkJIFRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHJpbmcgYnVmZmVyIGhhdmUgYmVlbiBjb25zdW1lZCBieQorCQkgdGhlIFVTQiBzdWJzeXN0ZW0gKGkuZS4sIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UpIHVwIHRvIHRoaXMKKwkJIHBvc2l0aW9uLgorCSovCisJc25kX3BjbV91ZnJhbWVzX3QgcG9zX2luX2RvbmU7CisKKwkvKioKKwkJIEJpdCBtYXNrIG9mIGFjdGl2ZSBwbGF5YmFjayBVUkJzLgorCSovCisJdW5zaWduZWQgbG9uZyBhY3RpdmVfdXJiX291dDsKKworCS8qKgorCQkgTWF4aW11bSBzaXplIG9mIFVTQiBwYWNrZXQuCisJKi8KKwlpbnQgbWF4X3BhY2tldF9zaXplOworCisJLyoqCisJCSBVU0IgZW5kcG9pbnQgZm9yIGxpc3RlbmluZyB0byBhdWRpbyBkYXRhLgorCSovCisJaW50IGVwX2F1ZGlvX3JlYWQ7CisKKwkvKioKKwkJIFVTQiBlbmRwb2ludCBmb3Igd3JpdGluZyBhdWRpbyBkYXRhLgorCSovCisJaW50IGVwX2F1ZGlvX3dyaXRlOworCisJLyoqCisJCSBCaXQgbWFzayBvZiBhY3RpdmUgY2FwdHVyZSBVUkJzLgorCSovCisJdW5zaWduZWQgbG9uZyBhY3RpdmVfdXJiX2luOworCisJLyoqCisJCSBCaXQgbWFzayBvZiBwbGF5YmFjayBVUkJzIGN1cnJlbnRseSBiZWluZyB1bmxpbmtlZC4KKwkqLworCXVuc2lnbmVkIGxvbmcgdW5saW5rX3VyYl9vdXQ7CisKKwkvKioKKwkJIEJpdCBtYXNrIG9mIGNhcHR1cmUgVVJCcyBjdXJyZW50bHkgYmVpbmcgdW5saW5rZWQuCisJKi8KKwl1bnNpZ25lZCBsb25nIHVubGlua191cmJfaW47CisKKwkvKioKKwkJIFNwaW4gbG9jayB0byBwcm90ZWN0IHVwZGF0ZXMgb2YgdGhlIHBsYXliYWNrIGJ1ZmZlciBwb3NpdGlvbnMgKG5vdAorCQkgY29udGVudHMhKQorCSovCisJc3BpbmxvY2tfdCBsb2NrX2F1ZGlvX291dDsKKworCS8qKgorCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgdXBkYXRlcyBvZiB0aGUgY2FwdHVyZSBidWZmZXIgcG9zaXRpb25zIChub3QKKwkJIGNvbnRlbnRzISkKKwkqLworCXNwaW5sb2NrX3QgbG9ja19hdWRpb19pbjsKKworCS8qKgorCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgdHJpZ2dlci4KKwkqLworCXNwaW5sb2NrX3QgbG9ja190cmlnZ2VyOworCisJLyoqCisJCSBQQ00gcGxheWJhY2sgdm9sdW1lIChsZWZ0IGFuZCByaWdodCkuCisJKi8KKwlpbnQgdm9sdW1lWzJdOworCisJLyoqCisJCSBTZXZlcmFsIHN0YXR1cyBiaXRzIChzZWUgQklUXyopLgorCSovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKKworZXh0ZXJuIGludCBsaW5lNl9pbml0X3BjbShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJCSAgc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzKTsKK2V4dGVybiBpbnQgc25kX2xpbmU2X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpOworZXh0ZXJuIGludCBzbmRfbGluZTZfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYjA2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suYwpAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgInBvZC5oIgorI2luY2x1ZGUgInBsYXliYWNrLmgiCisKKworLyoKKwlTb2Z0d2FyZSBzdGVyZW8gdm9sdW1lIGNvbnRyb2wuCisqLworc3RhdGljIHZvaWQgY2hhbmdlX3ZvbHVtZShzdHJ1Y3QgdXJiICp1cmJfb3V0LCBpbnQgdm9sdW1lW10sCisJCQkgIGludCBieXRlc19wZXJfZnJhbWUpCit7CisJaW50IGNobiA9IDA7CisKKwlpZiAodm9sdW1lWzBdID09IDI1NiAmJiB2b2x1bWVbMV0gPT0gMjU2KQorCQlyZXR1cm47ICAvKiBtYXhpbXVtIHZvbHVtZSAtIG5vIGNoYW5nZSAqLworCisJaWYgKGJ5dGVzX3Blcl9mcmFtZSA9PSA0KSB7CisJCXNob3J0ICpwLCAqYnVmX2VuZDsKKwkJcCA9IChzaG9ydCAqKXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcjsKKwkJYnVmX2VuZCA9IHAgKyB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC8gc2l6ZW9mKCpwKTsKKworCQlmb3IgKDsgcCA8IGJ1Zl9lbmQ7ICsrcCkgeworCQkJKnAgPSAoKnAgKiB2b2x1bWVbY2huICYgMV0pID4+IDg7CisJCQkrK2NobjsKKwkJfQorCX0gZWxzZSBpZiAoYnl0ZXNfcGVyX2ZyYW1lID09IDYpIHsKKwkJdW5zaWduZWQgY2hhciAqcCwgKmJ1Zl9lbmQ7CisJCXAgPSAodW5zaWduZWQgY2hhciAqKXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcjsKKwkJYnVmX2VuZCA9IHAgKyB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJCWZvciAoOyBwIDwgYnVmX2VuZDsgcCArPSAzKSB7CisJCQlpbnQgdmFsOworCQkJdmFsID0gcFswXSArIChwWzFdIDw8IDgpICsgKChzaWduZWQgY2hhcilwWzJdIDw8IDE2KTsKKwkJCXZhbCA9ICh2YWwgKiB2b2x1bWVbY2huICYgMV0pID4+IDg7CisJCQlwWzBdID0gdmFsOworCQkJcFsxXSA9IHZhbCA+PiA4OworCQkJcFsyXSA9IHZhbCA+PiAxNjsKKwkJCSsrY2huOworCQl9CisJfQorfQorCisvKgorCUZpbmQgYSBmcmVlIFVSQiwgcHJlcGFyZSBhdWRpbyBkYXRhLCBhbmQgc3VibWl0IFVSQi4KKyovCitzdGF0aWMgaW50IHN1Ym1pdF9hdWRpb19vdXRfdXJiKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWludCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpLCB1cmJfc2l6ZSwgdXJiX2ZyYW1lczsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJY29uc3QgaW50IGJ5dGVzX3Blcl9mcmFtZSA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5ieXRlc19wZXJfZnJhbWU7CisJY29uc3QgaW50IGZyYW1lX2luY3JlbWVudCA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfcmF0ZXMucmF0c1swXS5udW1fbWluOworCWNvbnN0IGludCBmcmFtZV9mYWN0b3IgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X3JhdGVzLnJhdHNbMF0uZGVuICogKFVTQl9JTlRFUlZBTFNfUEVSX1NFQ09ORCAvIExJTkU2X0lTT19JTlRFUlZBTCk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgdXJiICp1cmJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCwgZmxhZ3MpOworCWluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0LCBMSU5FNl9JU09fQlVGRkVSUyk7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IExJTkU2X0lTT19CVUZGRVJTKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCwgZmxhZ3MpOworCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAibm8gZnJlZSBVUkIgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1cmJfb3V0ID0gbGluZTZwY20tPnVyYl9hdWRpb19vdXRbaW5kZXhdOworCXVyYl9zaXplID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fUEFDS0VUUzsgKytpKSB7CisJCS8qIGNvbXB1dGUgZnJhbWUgc2l6ZSBmb3IgZ2l2ZW4gc2FtcGxpbmcgcmF0ZSAqLworCQlpbnQgbiwgZnM7CisJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmb3V0ID0gJnVyYl9vdXQtPmlzb19mcmFtZV9kZXNjW2ldOworCQlsaW5lNnBjbS0+Y291bnRfb3V0ICs9IGZyYW1lX2luY3JlbWVudDsKKwkJbiA9IGxpbmU2cGNtLT5jb3VudF9vdXQgLyBmcmFtZV9mYWN0b3I7CisJCWxpbmU2cGNtLT5jb3VudF9vdXQgLT0gbiAqIGZyYW1lX2ZhY3RvcjsKKwkJZnMgPSBuICogYnl0ZXNfcGVyX2ZyYW1lOworCQlmb3V0LT5vZmZzZXQgPSB1cmJfc2l6ZTsKKwkJZm91dC0+bGVuZ3RoID0gZnM7CisJCXVyYl9zaXplICs9IGZzOworCX0KKworCXVyYl9mcmFtZXMgPSB1cmJfc2l6ZSAvIGJ5dGVzX3Blcl9mcmFtZTsKKworCWlmICh0ZXN0X2JpdChCSVRfUEFVU0VfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpKSB7CisJCXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciA9IGxpbmU2cGNtLT53cmFwX291dDsKKwkJbWVtc2V0KGxpbmU2cGNtLT53cmFwX291dCwgMCwgdXJiX3NpemUpOworCX0gZWxzZSB7CisJCWlmIChsaW5lNnBjbS0+cG9zX291dCArIHVyYl9mcmFtZXMgPiBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQkJLyoKKwkJCQlUaGUgdHJhbnNmZXJyZWQgYXJlYSBnb2VzIG92ZXIgYnVmZmVyIGJvdW5kYXJ5LAorCQkJCWNvcHkgdGhlIGRhdGEgdG8gdGhlIHRlbXAgYnVmZmVyLgorCQkJKi8KKwkJCWludCBsZW47CisJCQlsZW4gPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIGxpbmU2cGNtLT5wb3Nfb3V0OworCQkJdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyID0gbGluZTZwY20tPndyYXBfb3V0OworCisJCQlpZiAobGVuID4gMCkgeworCQkJCW1lbWNweShsaW5lNnBjbS0+d3JhcF9vdXQsIHJ1bnRpbWUtPmRtYV9hcmVhICsgbGluZTZwY20tPnBvc19vdXQgKiBieXRlc19wZXJfZnJhbWUsIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQkJbWVtY3B5KGxpbmU2cGNtLT53cmFwX291dCArIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSwgcnVudGltZS0+ZG1hX2FyZWEsICh1cmJfZnJhbWVzIC0gbGVuKSAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQl9IGVsc2UKKwkJCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiZHJpdmVyIGJ1ZzogbGVuID0gJWRcbiIsIGxlbik7ICAvKiB0aGlzIGlzIHNvbWV3aGF0IHBhcmFub2lkICovCisJCX0gZWxzZSB7CisJCQkvKiBzZXQgdGhlIGJ1ZmZlciBwb2ludGVyICovCisJCQl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIgPSBydW50aW1lLT5kbWFfYXJlYSArIGxpbmU2cGNtLT5wb3Nfb3V0ICogYnl0ZXNfcGVyX2ZyYW1lOworCQl9CisJfQorCisJaWYgKChsaW5lNnBjbS0+cG9zX291dCArPSB1cmJfZnJhbWVzKSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJbGluZTZwY20tPnBvc19vdXQgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdXJiX3NpemU7CisJdXJiX291dC0+Y29udGV4dCA9IHN1YnN0cmVhbTsKKwljaGFuZ2Vfdm9sdW1lKHVyYl9vdXQsIGxpbmU2cGNtLT52b2x1bWUsIGJ5dGVzX3Blcl9mcmFtZSk7CisKKyNpZiBET19EVU1QX1BDTV9TRU5ECisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZvdXQgPSAmdXJiX291dC0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTZwY20tPmxpbmU2LCAnUCcsIHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciArIGZvdXQtPm9mZnNldCwgZm91dC0+bGVuZ3RoKTsKKwl9CisjZW5kaWYKKworCWlmICh1c2Jfc3VibWl0X3VyYih1cmJfb3V0LCBHRlBfQVRPTUlDKSA9PSAwKQorCQlzZXRfYml0KGluZGV4LCAmbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0KTsKKwllbHNlCisJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJVUkIgb3V0ICMlZCBzdWJtaXNzaW9uIGZhaWxlZFxuIiwgaW5kZXgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0LCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJU3VibWl0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBsYXliYWNrIFVSQnMuCisqLworc3RhdGljIGludCBzdWJtaXRfYXVkaW9fb3V0X2FsbF91cmJzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWludCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7ICsraSkgeworCQlyZXQgPSBzdWJtaXRfYXVkaW9fb3V0X3VyYihzdWJzdHJlYW0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJVW5saW5rIGFsbCBjdXJyZW50bHkgYWN0aXZlIHBsYXliYWNrIFVSQnMuCisqLworc3RhdGljIHZvaWQgdW5saW5rX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7CisJCWlmICh0ZXN0X2JpdChpLCAmbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0KSkgeworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksICZsaW5lNnBjbS0+dW5saW5rX3VyYl9vdXQpKSB7CisJCQkJc3RydWN0IHVyYiAqdSA9IGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2ldOworCQkJCXVzYl91bmxpbmtfdXJiKHUpOworCQkJfQorCQl9CisJfQorfQorCisvKgorCVdhaXQgdW50aWwgdW5saW5raW5nIG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIHBsYXliYWNrIFVSQnMgaGFzIGJlZW4gZmluaXNoZWQuCisqLworc3RhdGljIHZvaWQgd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJaW50IHRpbWVvdXQgPSBIWjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgYWxpdmU7CisKKwlkbyB7CisJCWFsaXZlID0gMDsKKwkJZm9yIChpID0gTElORTZfSVNPX0JVRkZFUlM7IGktLTspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCAmbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0KSkKKwkJCQlhbGl2ZSsrOworCQl9CisJCWlmICghYWxpdmUpCisJCQlicmVhazsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0gd2hpbGUgKC0tdGltZW91dCA+IDApOworCWlmIChhbGl2ZSkKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidGltZW91dDogc3RpbGwgJWQgYWN0aXZlIHVyYnMuLlxuIiwgYWxpdmUpOworCisJbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0ID0gMDsKKwlsaW5lNnBjbS0+dW5saW5rX3VyYl9vdXQgPSAwOworfQorCisvKgorCVVubGluayBhbGwgY3VycmVudGx5IGFjdGl2ZSBwbGF5YmFjayBVUkJzLCBhbmQgd2FpdCBmb3IgZmluaXNoaW5nLgorKi8KK3ZvaWQgdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCXVubGlua19hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisJd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7Cit9CisKKy8qCisJQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCBwbGF5YmFjayBVUkIuCisqLworc3RhdGljIHZvaWQgYXVkaW9fb3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgaSwgaW5kZXgsIGxlbmd0aCA9IDAsIHNodXRkb3duID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJLyogZmluZCBpbmRleCBvZiBVUkIgKi8KKwlmb3IgKGluZGV4ID0gTElORTZfSVNPX0JVRkZFUlM7IGluZGV4LS07KQorCQlpZiAodXJiID09IGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2luZGV4XSkKKwkJCWJyZWFrOworCisJaWYgKGluZGV4IDwgMCkKKwkJcmV0dXJuOyAgLyogVVJCIGhhcyBiZWVuIHVubGlua2VkIGFzeW5jaHJvbm91c2x5ICovCisKKwlmb3IgKGkgPSBMSU5FNl9JU09fUEFDS0VUUzsgaS0tOykKKwkJbGVuZ3RoICs9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCwgZmxhZ3MpOworCWxpbmU2cGNtLT5wb3Nfb3V0X2RvbmUgKz0gbGVuZ3RoIC8gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKKworCWlmIChsaW5lNnBjbS0+cG9zX291dF9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlsaW5lNnBjbS0+cG9zX291dF9kb25lIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJY2xlYXJfYml0KGluZGV4LCAmbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0KTsKKworCWZvciAoaSA9IExJTkU2X0lTT19QQUNLRVRTOyBpLS07KQorCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPT0gLUVTSFVURE9XTikgeworCQkJc2h1dGRvd24gPSAxOworCQkJYnJlYWs7CisJCX0KKworCWlmICh0ZXN0X2JpdChpbmRleCwgJmxpbmU2cGNtLT51bmxpbmtfdXJiX291dCkpCisJCXNodXRkb3duID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCwgZmxhZ3MpOworCisJaWYgKCFzaHV0ZG93bikgeworCQlzdWJtaXRfYXVkaW9fb3V0X3VyYihzdWJzdHJlYW0pOworCisJCWlmICgobGluZTZwY20tPmJ5dGVzX291dCArPSBsZW5ndGgpID49IGxpbmU2cGNtLT5wZXJpb2Rfb3V0KSB7CisJCQlsaW5lNnBjbS0+Ynl0ZXNfb3V0IC09IGxpbmU2cGNtLT5wZXJpb2Rfb3V0OworCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQl9CisJfQorfQorCisvKiBvcGVuIHBsYXliYWNrIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWludCBlcnI7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucyhydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCQkJICAgICgmbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9yYXRlcykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcnVudGltZS0+aHcgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X3BsYXliYWNrX2h3OworCXJldHVybiAwOworfQorCisvKiBjbG9zZSBwbGF5YmFjayBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIGh3X3BhcmFtcyBwbGF5YmFjayBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCS8qIC0tIEZsb3JpYW4gRGVtc2tpIFtGRF0gKi8KKwkvKiBkb24ndCBhc2sgbWUgd2h5LCBidXQgdGhpcyBmaXhlcyB0aGUgYnVnIG9uIG15IG1hY2hpbmUgKi8KKwlpZiAobGluZTZwY20gPT0gTlVMTCkgeworCQlpZiAoc3Vic3RyZWFtLT5wY20gPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoc3Vic3RyZWFtLT5wY20tPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gc3Vic3RyZWFtLT5wY20tPnByaXZhdGVfZGF0YTsKKwkJbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJfQorCS8qIC0tIFtGRF0gZW5kICovCisKKwlyZXQgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbGluZTZwY20tPnBlcmlvZF9vdXQgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7CisJbGluZTZwY20tPndyYXBfb3V0ID0ga21hbGxvYygyICogTElORTZfSVNPX1BBQ0tFVF9TSVpFX01BWCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWxpbmU2cGNtLT53cmFwX291dCkgeworCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiY2Fubm90IG1hbGxvYyB3cmFwX291dFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCisvKiBod19mcmVlIHBsYXliYWNrIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9wbGF5YmFja19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisKKwlrZnJlZShsaW5lNnBjbS0+d3JhcF9vdXQpOworCWxpbmU2cGNtLT53cmFwX291dCA9IE5VTEw7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCisvKiB0cmlnZ2VyIHBsYXliYWNrIGNhbGxiYWNrICovCitpbnQgc25kX2xpbmU2X3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCBlcnI7CisJbGluZTZwY20tPmNvdW50X291dCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChCSVRfUlVOTklOR19QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncykpIHsKKwkJCWVyciA9IHN1Ym1pdF9hdWRpb19vdXRfYWxsX3VyYnMoc3Vic3RyZWFtKTsKKworCQkJaWYgKGVyciA8IDApIHsKKwkJCQljbGVhcl9iaXQoQklUX1JVTk5JTkdfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCSVRfUlVOTklOR19QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncykpCisJCQl1bmxpbmtfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlzZXRfYml0KEJJVF9QQVVTRV9QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncyk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQljbGVhcl9iaXQoQklUX1BBVVNFX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogcGxheWJhY2sgcG9pbnRlciBjYWxsYmFjayAqLworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfbGluZTZfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJcmV0dXJuIGxpbmU2cGNtLT5wb3Nfb3V0X2RvbmU7Cit9CisKKy8qIHBsYXliYWNrIG9wZXJhdG9ycyAqLworc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPSAgICAgICAgc25kX2xpbmU2X3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0gICAgICAgc25kX2xpbmU2X3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSAgIHNuZF9saW5lNl9wbGF5YmFja19od19wYXJhbXMsCisJLmh3X2ZyZWUgPSAgICAgc25kX2xpbmU2X3BsYXliYWNrX2h3X2ZyZWUsCisJLnByZXBhcmUgPSAgICAgc25kX2xpbmU2X3ByZXBhcmUsCisJLnRyaWdnZXIgPSAgICAgc25kX2xpbmU2X3RyaWdnZXIsCisJLnBvaW50ZXIgPSAgICAgc25kX2xpbmU2X3BsYXliYWNrX3BvaW50ZXIsCit9OworCitpbnQgY3JlYXRlX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlpbnQgaTsKKworCS8qIGNyZWF0ZSBhdWRpbyBVUkJzIGFuZCBmaWxsIGluIGNvbnN0YW50IHZhbHVlczogKi8KKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisKKwkJLyogVVJCIGZvciBhdWRpbyBvdXQ6ICovCisJCXVyYiA9IGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2ldID0gdXNiX2FsbG9jX3VyYihMSU5FNl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXVyYi0+ZGV2ID0gbGluZTZwY20tPmxpbmU2LT51c2JkZXY7CisJCXVyYi0+cGlwZSA9IHVzYl9zbmRpc29jcGlwZShsaW5lNnBjbS0+bGluZTYtPnVzYmRldiwgbGluZTZwY20tPmVwX2F1ZGlvX3dyaXRlICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IC0xOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gTElORTZfSVNPX1BBQ0tFVFM7CisJCXVyYi0+aW50ZXJ2YWwgPSBMSU5FNl9JU09fSU5URVJWQUw7CisJCXVyYi0+ZXJyb3JfY291bnQgPSAwOworCQl1cmItPmNvbXBsZXRlID0gYXVkaW9fb3V0X2NhbGxiYWNrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFlNDhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgUExBWUJBQ0tfSAorI2RlZmluZSBQTEFZQkFDS19ICisKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKKworZXh0ZXJuIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbGluZTZfcGxheWJhY2tfb3BzOworCisKK2V4dGVybiBpbnQgY3JlYXRlX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7CitleHRlcm4gaW50IHNuZF9saW5lNl9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIGludCBjbWQpOworZXh0ZXJuIHZvaWQgdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVjYWEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5jCkBAIC0wLDAgKzEsMTE1MSBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlICJwbGF5YmFjay5oIgorI2luY2x1ZGUgInBvZC5oIgorCisKKyNkZWZpbmUgUE9EX1NZU0VYX0NPREUgMworI2RlZmluZSBQT0RfQllURVNfUEVSX0ZSQU1FIDYgIC8qIDI0Yml0IGF1ZGlvIChzdGVyZW8pICovCisKKworZW51bSB7CisJUE9EX1NZU0VYX0NMSVAgICAgICA9IDB4MGYsCisJUE9EX1NZU0VYX1NBVkUgICAgICA9IDB4MjQsCisJUE9EX1NZU0VYX1NZU1RFTSAgICA9IDB4NTYsCisJUE9EX1NZU0VYX1NZU1RFTVJFUSA9IDB4NTcsCisJLyogUE9EX1NZU0VYX1VQREFURSAgICA9IDB4NmMsICovICAvKiBzb2Z0d2FyZSB1cGRhdGUhICovCisJUE9EX1NZU0VYX1NUT1JFICAgICA9IDB4NzEsCisJUE9EX1NZU0VYX0ZJTklTSCAgICA9IDB4NzIsCisJUE9EX1NZU0VYX0RVTVBNRU0gICA9IDB4NzMsCisJUE9EX1NZU0VYX0RVTVAgICAgICA9IDB4NzQsCisJUE9EX1NZU0VYX0RVTVBSRVEgICA9IDB4NzUKKwkvKiBQT0RfU1lTRVhfRFVNUE1FTTIgID0gMHg3NiAqLyAgIC8qIGR1bXBzIGVudGlyZSBpbnRlcm5hbCBtZW1vcnkgb2YgUE9EeHQgUHJvICovCit9OworCitlbnVtIHsKKwlQT0RfbW9uaXRvcl9sZXZlbCAgPSAweDA0LAorCVBPRF9yb3V0aW5nICAgICAgICA9IDB4MDUsCisJUE9EX3R1bmVyX211dGUgICAgID0gMHgxMywKKwlQT0RfdHVuZXJfZnJlcSAgICAgPSAweDE1LAorCVBPRF90dW5lcl9ub3RlICAgICA9IDB4MTYsCisJUE9EX3R1bmVyX3BpdGNoICAgID0gMHgxNywKKwlQT0Rfc3lzdGVtX2ludmFsaWQgPSAweDdmZmYKK307CisKK2VudW0geworCVBPRF9EVU1QX01FTU9SWSA9IDIKK307CisKK2VudW0geworCVBPRF9CVVNZX1JFQUQsCisJUE9EX0JVU1lfV1JJVEUsCisJUE9EX0NIQU5ORUxfRElSVFksCisJUE9EX1NBVkVfUFJFU1NFRCwKKwlQT0RfQlVTWV9NSURJU0VORAorfTsKKworCitzdGF0aWMgc3RydWN0IHNuZF9yYXRkZW4gcG9kX3JhdGRlbiA9IHsKKwkubnVtX21pbiA9IDc4MTI1LAorCS5udW1fbWF4ID0gNzgxMjUsCisJLm51bV9zdGVwID0gMSwKKwkuZGVuID0gMgorfTsKKworc3RhdGljIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyBwb2RfcGNtX3Byb3BlcnRpZXMgPSB7CisgIC5zbmRfbGluZTZfcGxheWJhY2tfaHcgPSB7CisJCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSwKKwkJLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkucmF0ZV9taW4gPSAgICAgICAgIDM5MDYyLAorCQkucmF0ZV9tYXggPSAgICAgICAgIDM5MDYzLAorCQkuY2hhbm5lbHNfbWluID0gICAgIDIsCisJCS5jaGFubmVsc19tYXggPSAgICAgMiwKKwkJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKKwkJLnBlcmlvZF9ieXRlc19taW4gPSBMSU5FNl9JU09fUEFDS0VUX1NJWkVfTUFYICogUE9EX0JZVEVTX1BFUl9GUkFNRSwgIC8qIGF0IGxlYXN0IG9uZSBVUkIgbXVzdCBmaXQgaW50byBvbmUgcGVyaW9kICovCisJCS5wZXJpb2RfYnl0ZXNfbWF4ID0gODE5MiwKKwkJLnBlcmlvZHNfbWluID0gICAgICAxLAorCQkucGVyaW9kc19tYXggPSAgICAgIDEwMjQKKwl9LAorICAuc25kX2xpbmU2X2NhcHR1cmVfaHcgPSB7CisJCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJCS5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFLAorCQkucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFX0tOT1QsCisJCS5yYXRlX21pbiA9ICAgICAgICAgMzkwNjIsCisJCS5yYXRlX21heCA9ICAgICAgICAgMzkwNjMsCisJCS5jaGFubmVsc19taW4gPSAgICAgMiwKKwkJLmNoYW5uZWxzX21heCA9ICAgICAyLAorCQkuYnVmZmVyX2J5dGVzX21heCA9IDYwMDAwLAorCQkucGVyaW9kX2J5dGVzX21pbiA9IExJTkU2X0lTT19QQUNLRVRfU0laRV9NQVggKiBQT0RfQllURVNfUEVSX0ZSQU1FLCAgLyogYXQgbGVhc3Qgb25lIFVSQiBtdXN0IGZpdCBpbnRvIG9uZSBwZXJpb2QgKi8KKwkJLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkucGVyaW9kc19taW4gPSAgICAgIDEsCisJCS5wZXJpb2RzX21heCA9ICAgICAgMTAyNAorCX0sCisJLnNuZF9saW5lNl9yYXRlcyA9IHsKKwkJLm5yYXRzID0gMSwKKwkJLnJhdHMgPSAmcG9kX3JhdGRlbgorCX0sCisJLmJ5dGVzX3Blcl9mcmFtZSA9IFBPRF9CWVRFU19QRVJfRlJBTUUKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHBvZF9yZXF1ZXN0X3ZlcnNpb25bXSA9IHsgMHhmMCwgMHg3ZSwgMHg3ZiwgMHgwNiwgMHgwMSwgMHhmNyB9Oworc3RhdGljIGNvbnN0IGNoYXIgcG9kX3JlcXVlc3RfY2hhbm5lbFtdID0geyAweGYwLCAweDAwLCAweDAxLCAweDBjLCAweDAzLCAweDc1LCAweGY3IH07CitzdGF0aWMgY29uc3QgY2hhciBwb2RfdmVyc2lvbl9oZWFkZXJbXSAgPSB7IDB4ZjIsIDB4N2UsIDB4N2YsIDB4MDYsIDB4MDIgfTsKKworCisvKgorCU1hcmsgYWxsIHBhcmFtZXRlcnMgYXMgZGlydHkgYW5kIG5vdGlmeSB3YWl0aW5nIHByb2Nlc3Nlcy4KKyovCitzdGF0aWMgdm9pZCBwb2RfbWFya19iYXRjaF9hbGxfZGlydHkoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IFBPRF9DT05UUk9MX1NJWkU7IGktLTspCisJCXNldF9iaXQoaSwgcG9kLT5wYXJhbV9kaXJ0eSk7Cit9CisKKy8qCisJU2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCBmb3IgdGhlIFBPRCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBkZXZpY2UgSUQuCisqLworc3RhdGljIGludCBwb2RfdmVyc2lvbl9yZXF1ZXN0X2FzeW5jKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpCit7CisJcmV0dXJuIGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoJnBvZC0+bGluZTYsIHBvZC0+YnVmZmVyX3ZlcnNpb25yZXEsIHNpemVvZihwb2RfcmVxdWVzdF92ZXJzaW9uKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvZF9jcmVhdGVfZmlsZXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2xpbmU2X3BvZCwgY3JlYXRlX2ZpbGVzX3dvcmspOworCisJcG9kX2NyZWF0ZV9maWxlcyhwb2QtPmZpcm13YXJlX3ZlcnNpb24sIHBvZC0+bGluZTYucHJvcGVydGllcy0+ZGV2aWNlX2JpdCwgcG9kLT5saW5lNi5pZmNkZXYpOworfQorCitzdGF0aWMgdm9pZCBwb2Rfc3RhcnR1cF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWVudW0geworCQlSRVFVRVNUX05PTkUsCisJCVJFUVVFU1RfRFVNUCwKKwkJUkVRVUVTVF9WRVJTSU9OCisJfTsKKworCWludCByZXF1ZXN0ID0gUkVRVUVTVF9OT05FOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSAoc3RydWN0IHVzYl9saW5lNl9wb2QgKilhcmc7CisKKwlpZiAocG9kLT5kdW1wcmVxLm9rKSB7CisJCWlmICghcG9kLT52ZXJzaW9ucmVxX29rKQorCQkJcmVxdWVzdCA9IFJFUVVFU1RfVkVSU0lPTjsKKwl9IGVsc2UgeworCQlpZiAocG9kLT52ZXJzaW9ucmVxX29rKQorCQkJcmVxdWVzdCA9IFJFUVVFU1RfRFVNUDsKKwkJZWxzZSBpZiAocG9kLT5zdGFydHVwX2NvdW50KysgJiAxKQorCQkJcmVxdWVzdCA9IFJFUVVFU1RfRFVNUDsKKwkJZWxzZQorCQkJcmVxdWVzdCA9IFJFUVVFU1RfVkVSU0lPTjsKKwl9CisKKwlzd2l0Y2ggKHJlcXVlc3QpIHsKKwljYXNlIFJFUVVFU1RfRFVNUDoKKwkJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZwb2QtPmR1bXByZXEsICZwb2QtPmxpbmU2LCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFJFUVVFU1RfVkVSU0lPTjoKKwkJcG9kX3ZlcnNpb25fcmVxdWVzdF9hc3luYyhwb2QpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlsaW5lNl9zdGFydHVwX2RlbGF5ZWQoJnBvZC0+ZHVtcHJlcSwgMSwgcG9kX3N0YXJ0dXBfdGltZW91dCwgcG9kKTsKK30KKworc3RhdGljIGNoYXIgKnBvZF9hbGxvY19zeXNleF9idWZmZXIoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IGNvZGUsIGludCBzaXplKQoreworCXJldHVybiBsaW5lNl9hbGxvY19zeXNleF9idWZmZXIoJnBvZC0+bGluZTYsIFBPRF9TWVNFWF9DT0RFLCBjb2RlLCBzaXplKTsKK30KKworLyoKKwlTZW5kIGNoYW5uZWwgZHVtcCBkYXRhIHRvIHRoZSBQT0R4dCBQcm8uCisqLworc3RhdGljIHZvaWQgcG9kX2R1bXAoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgc2l6ZSA9IDEgKyBzaXplb2YocG9kLT5wcm9nX2RhdGEpOworCWNoYXIgKnN5c2V4ID0gcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihwb2QsIFBPRF9TWVNFWF9EVU1QLCBzaXplKTsKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm47CisJLyogRG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMgZ29vZCBmb3IsIGJ1dCBQT0R4dCBQcm8gdHJhbnNtaXRzIGl0LCBzbyB3ZQorCSAqIGFsc28gZG8uLi4gKi8KKwlzeXNleFtTWVNFWF9EQVRBX09GU10gPSA1OworCW1lbWNweShzeXNleCArIFNZU0VYX0RBVEFfT0ZTICsgMSwgZGF0YSwgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZwb2QtPmxpbmU2LCBzeXNleCwgc2l6ZSk7CisJbWVtY3B5KCZwb2QtPnByb2dfZGF0YSwgZGF0YSwgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJcG9kX21hcmtfYmF0Y2hfYWxsX2RpcnR5KHBvZCk7CisJa2ZyZWUoc3lzZXgpOworfQorCisvKgorCVN0b3JlIHBhcmFtZXRlciB2YWx1ZSBpbiBkcml2ZXIgbWVtb3J5IGFuZCBtYXJrIGl0IGFzIGRpcnR5LgorKi8KK3N0YXRpYyB2b2lkIHBvZF9zdG9yZV9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHBhcmFtLCBpbnQgdmFsdWUpCit7CisJcG9kLT5wcm9nX2RhdGEuY29udHJvbFtwYXJhbV0gPSB2YWx1ZTsKKwlzZXRfYml0KHBhcmFtLCBwb2QtPnBhcmFtX2RpcnR5KTsKKwlwb2QtPmRpcnR5ID0gMTsKK30KKworLyoKKwlIYW5kbGUgU0FWRSBidXR0b24KKyovCitzdGF0aWMgdm9pZCBwb2Rfc2F2ZV9idXR0b25fcHJlc3NlZChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgdHlwZSwgaW50IGluZGV4KQoreworCXBvZC0+ZGlydHkgPSAwOworCXNldF9iaXQoUE9EX1NBVkVfUFJFU1NFRCwgJnBvZC0+YXRvbWljX2ZsYWdzKTsKK30KKworLyoKKwlQcm9jZXNzIGEgY29tcGxldGVseSByZWNlaXZlZCBtZXNzYWdlLgorKi8KK3ZvaWQgcG9kX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHBvZC0+bGluZTYuYnVmZmVyX21lc3NhZ2U7CisKKwkvKiBmaWx0ZXIgbWVzc2FnZXMgYnkgdHlwZSAqLworCXN3aXRjaCAoYnVmWzBdICYgMHhmMCkgeworCWNhc2UgTElORTZfUEFSQU1fQ0hBTkdFOgorCWNhc2UgTElORTZfUFJPR1JBTV9DSEFOR0U6CisJY2FzZSBMSU5FNl9TWVNFWF9CRUdJTjoKKwkJYnJlYWs7ICAvKiBoYW5kbGUgdGhlc2UgZnVydGhlciBkb3duICovCisKKwlkZWZhdWx0OgorCQlyZXR1cm47ICAvKiBpZ25vcmUgYWxsIG90aGVycyAqLworCX0KKworCS8qIHByb2Nlc3MgYWxsIHJlbWFpbmluZyBtZXNzYWdlcyAqLworCXN3aXRjaCAoYnVmWzBdKSB7CisJY2FzZSBMSU5FNl9QQVJBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0RFVklDRToKKwkJcG9kX3N0b3JlX3BhcmFtZXRlcihwb2QsIGJ1ZlsxXSwgYnVmWzJdKTsKKwkJLyogaW50ZW50aW9uYWxseSBubyBicmVhayBoZXJlISAqLworCisJY2FzZSBMSU5FNl9QQVJBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1Q6CisJCWlmICgoYnVmWzFdID09IFBPRF9hbXBfbW9kZWxfc2V0dXApIHx8CisJCSAgICAoYnVmWzFdID09IFBPRF9lZmZlY3Rfc2V0dXApKQorCQkJLyogdGhlc2UgYWxzbyBhZmZlY3Qgb3RoZXIgc2V0dGluZ3MgKi8KKwkJCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmcG9kLT5kdW1wcmVxLCAmcG9kLT5saW5lNiwgMCk7CisKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1BST0dSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9ERVZJQ0U6CisJY2FzZSBMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDoKKwkJcG9kLT5jaGFubmVsX251bSA9IGJ1ZlsxXTsKKwkJcG9kLT5kaXJ0eSA9IDA7CisJCXNldF9iaXQoUE9EX0NIQU5ORUxfRElSVFksICZwb2QtPmF0b21pY19mbGFncyk7CisJCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmcG9kLT5kdW1wcmVxLCAmcG9kLT5saW5lNiwgMCk7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9TWVNFWF9CRUdJTiB8IExJTkU2X0NIQU5ORUxfREVWSUNFOgorCWNhc2UgTElORTZfU1lTRVhfQkVHSU4gfCBMSU5FNl9DSEFOTkVMX1VOS05PV046CisJCWlmIChtZW1jbXAoYnVmICsgMSwgbGluZTZfbWlkaV9pZCwgc2l6ZW9mKGxpbmU2X21pZGlfaWQpKSA9PSAwKSB7CisJCQlzd2l0Y2ggKGJ1Zls1XSkgeworCQkJY2FzZSBQT0RfU1lTRVhfRFVNUDoKKwkJCQlpZiAocG9kLT5saW5lNi5tZXNzYWdlX2xlbmd0aCA9PSBzaXplb2YocG9kLT5wcm9nX2RhdGEpICsgNykgeworCQkJCQlzd2l0Y2ggKHBvZC0+ZHVtcHJlcS5pbl9wcm9ncmVzcykgeworCQkJCQljYXNlIExJTkU2X0RVTVBfQ1VSUkVOVDoKKwkJCQkJCW1lbWNweSgmcG9kLT5wcm9nX2RhdGEsIGJ1ZiArIDcsIHNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCQkJCQkJcG9kX21hcmtfYmF0Y2hfYWxsX2RpcnR5KHBvZCk7CisJCQkJCQlwb2QtPmR1bXByZXEub2sgPSAxOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBQT0RfRFVNUF9NRU1PUlk6CisJCQkJCQltZW1jcHkoJnBvZC0+cHJvZ19kYXRhX2J1ZiwgYnVmICsgNywgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhX2J1ZikpOworCQkJCQkJYnJlYWs7CisKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJ1bmtub3duIGR1bXAgY29kZSAlMDJYXG4iLCBwb2QtPmR1bXByZXEuaW5fcHJvZ3Jlc3MpKTsKKwkJCQkJfQorCisJCQkJCWxpbmU2X2R1bXBfZmluaXNoZWQoJnBvZC0+ZHVtcHJlcSk7CisJCQkJfSBlbHNlCisJCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJ3cm9uZyBzaXplIG9mIGNoYW5uZWwgZHVtcCBtZXNzYWdlICglZCBpbnN0ZWFkIG9mICVkKVxuIiwKKwkJCQkJCQkJCQkJCQkJCQkgcG9kLT5saW5lNi5tZXNzYWdlX2xlbmd0aCwgKGludClzaXplb2YocG9kLT5wcm9nX2RhdGEpICsgNykpOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUE9EX1NZU0VYX1NZU1RFTTogeworCQkJCXNob3J0IHZhbHVlID0gKChpbnQpYnVmWzddIDw8IDEyKSB8ICgoaW50KWJ1Zls4XSA8PCA4KSB8ICgoaW50KWJ1Zls5XSA8PCA0KSB8IChpbnQpYnVmWzEwXTsKKworI2RlZmluZSBQUk9DRVNTX1NZU1RFTV9QQVJBTSh4KSBcCisJCQkJCWNhc2UgUE9EXyAjIyB4OiBcCisJCQkJCQlwb2QtPngudmFsdWUgPSB2YWx1ZTsgXAorCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb2QtPngud2FpdCk7IFwKKwkJCQkJCWJyZWFrOworCisJCQkJc3dpdGNoIChidWZbNl0pIHsKKwkJCQkJUFJPQ0VTU19TWVNURU1fUEFSQU0obW9uaXRvcl9sZXZlbCk7CisJCQkJCVBST0NFU1NfU1lTVEVNX1BBUkFNKHJvdXRpbmcpOworCQkJCQlQUk9DRVNTX1NZU1RFTV9QQVJBTSh0dW5lcl9tdXRlKTsKKwkJCQkJUFJPQ0VTU19TWVNURU1fUEFSQU0odHVuZXJfZnJlcSk7CisJCQkJCVBST0NFU1NfU1lTVEVNX1BBUkFNKHR1bmVyX25vdGUpOworCQkJCQlQUk9DRVNTX1NZU1RFTV9QQVJBTSh0dW5lcl9waXRjaCk7CisKKyN1bmRlZiBQUk9DRVNTX1NZU1RFTV9QQVJBTQorCisJCQkJZGVmYXVsdDoKKwkJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgInVua25vd24gdHVuZXIvc3lzdGVtIHJlc3BvbnNlICUwMlhcbiIsIGJ1Zls2XSkpOworCQkJCX0KKworCQkJCWJyZWFrOworCQkJfQorCisJCQljYXNlIFBPRF9TWVNFWF9GSU5JU0g6CisJCQkJLyogZG8gd2UgbmVlZCB0byByZXNwb25kIHRvIHRoaXM/ICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUE9EX1NZU0VYX1NBVkU6CisJCQkJcG9kX3NhdmVfYnV0dG9uX3ByZXNzZWQocG9kLCBidWZbNl0sIGJ1Zls3XSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUE9EX1NZU0VYX0NMSVA6CisJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgImF1ZGlvIGNsaXBwZWRcbiIpKTsKKwkJCQlwb2QtPmNsaXBwaW5nLnZhbHVlID0gMTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvZC0+Y2xpcHBpbmcud2FpdCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUE9EX1NZU0VYX1NUT1JFOgorCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJtZXNzYWdlICUwMlggbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgYnVmWzVdKSk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgInVua25vd24gc3lzZXggbWVzc2FnZSAlMDJYXG4iLCBidWZbNV0pKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChtZW1jbXAoYnVmLCBwb2RfdmVyc2lvbl9oZWFkZXIsIHNpemVvZihwb2RfdmVyc2lvbl9oZWFkZXIpKSA9PSAwKSB7CisJCQlpZiAocG9kLT52ZXJzaW9ucmVxX29rID09IDApIHsKKwkJCQlwb2QtPmZpcm13YXJlX3ZlcnNpb24gPSBidWZbMTNdICogMTAwICsgYnVmWzE0XSAqIDEwICsgYnVmWzE1XTsKKwkJCQlwb2QtPmRldmljZV9pZCA9ICgoaW50KWJ1Zls4XSA8PCAxNikgfCAoKGludClidWZbOV0gPDwgOCkgfCAoaW50KWJ1ZlsxMF07CisJCQkJcG9kLT52ZXJzaW9ucmVxX29rID0gMTsKKworCQkJCS8qIE5vdyB3ZSBrbm93IHRoZSBmaXJtd2FyZSB2ZXJzaW9uLCBzbyB3ZSBzY2hlZHVsZSBhIGJvdHRvbSBoYWxmCisJCQkJCSBoYW5kbGVyIHRvIGNyZWF0ZSB0aGUgc3BlY2lhbCBmaWxlczogKi8KKwkJCQlJTklUX1dPUksoJnBvZC0+Y3JlYXRlX2ZpbGVzX3dvcmssIHBvZF9jcmVhdGVfZmlsZXNfd29yayk7CisJCQkJcXVldWVfd29yayhsaW5lNl93b3JrcXVldWUsICZwb2QtPmNyZWF0ZV9maWxlc193b3JrKTsKKwkJCX0gZWxzZQorCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJtdWx0aXBsZSBmaXJtd2FyZSB2ZXJzaW9uIG1lc3NhZ2VcbiIpKTsKKwkJfSBlbHNlCisJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAidW5rbm93biBzeXNleCBoZWFkZXJcbiIpKTsKKworCQlicmVhazsKKworCWNhc2UgTElORTZfU1lTRVhfRU5EOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJQT0Q6IHVua25vd24gbWVzc2FnZSAlMDJYXG4iLCBidWZbMF0pKTsKKwl9Cit9CisKKy8qCisJRGV0ZWN0IHNvbWUgY2FzZXMgdGhhdCByZXF1aXJlIGEgY2hhbm5lbCBkdW1wIGFmdGVyIHNlbmRpbmcgYSBjb21tYW5kIHRvIHRoZQorCWRldmljZS4gSW1wb3J0YW50IG5vdGVzOgorCSopIFRoZSBhY3R1YWwgZHVtcCByZXF1ZXN0IGNhbiBub3QgYmUgc2VudCBoZXJlIHNpbmNlIHdlIGFyZSBub3QgYWxsb3dlZCB0bworCXdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBmaXJzdCBtZXNzYWdlIGluIHRoaXMgY29udGV4dCwgYW5kIHNlbmRpbmcKKwl0aGUgZHVtcCByZXF1ZXN0IGJlZm9yZSBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBtZXNzYWdlIGxlYXZlcyB0aGUgUE9ECisJaW4gYW4gdW5kZWZpbmVkIHN0YXRlLiBUaGUgZHVtcCByZXF1ZXN0IHdpbGwgYmUgc2VudCB3aGVuIHRoZSBlY2hvZWQKKwljb21tYW5kcyBhcmUgcmVjZWl2ZWQuCisJKikgVGhpcyBtZXRob2QgZmFpbHMgaWYgYSBwYXJhbSBjaGFuZ2UgbWVzc2FnZSBpcyAiY2hvcHBlZCIgYWZ0ZXIgdGhlIGZpcnN0CisJYnl0ZS4KKyovCit2b2lkIHBvZF9taWRpX3Bvc3Rwcm9jZXNzKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGk7CisKKwlpZiAoIXBvZC0+bWlkaV9wb3N0cHJvY2VzcykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisJCWlmIChkYXRhW2ldID09IChMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVCkpIHsKKwkJCWxpbmU2X2ludmFsaWRhdGVfY3VycmVudCgmcG9kLT5kdW1wcmVxKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChkYXRhW2ldID09IChMSU5FNl9QQVJBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1QpKSAmJiAoaSA8IGxlbmd0aCAtIDEpKQorCQkJaWYgKChkYXRhW2kgKyAxXSA9PSBQT0RfYW1wX21vZGVsX3NldHVwKSB8fCAoZGF0YVtpICsgMV0gPT0gUE9EX2VmZmVjdF9zZXR1cCkpIHsKKwkJCQlsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQoJnBvZC0+ZHVtcHJlcSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorfQorCisvKgorCVNlbmQgY2hhbm5lbCBudW1iZXIgKGkuZS4sIHN3aXRjaCB0byBhIGRpZmZlcmVudCBzb3VuZCkuCisqLworc3RhdGljIHZvaWQgcG9kX3NlbmRfY2hhbm5lbChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgdmFsdWUpCit7CisJbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KCZwb2QtPmR1bXByZXEpOworCisJaWYgKGxpbmU2X3NlbmRfcHJvZ3JhbSgmcG9kLT5saW5lNiwgdmFsdWUpID09IDApCisJCXBvZC0+Y2hhbm5lbF9udW0gPSB2YWx1ZTsKKwllbHNlCisJCWxpbmU2X2R1bXBfZmluaXNoZWQoJnBvZC0+ZHVtcHJlcSk7Cit9CisKKy8qCisJVHJhbnNtaXQgUE9EeHQgUHJvIGNvbnRyb2wgcGFyYW1ldGVyLgorKi8KK3ZvaWQgcG9kX3RyYW5zbWl0X3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgcGFyYW0sIGludCB2YWx1ZSkKK3sKKwlpZiAobGluZTZfdHJhbnNtaXRfcGFyYW1ldGVyKCZwb2QtPmxpbmU2LCBwYXJhbSwgdmFsdWUpID09IDApCisJCXBvZF9zdG9yZV9wYXJhbWV0ZXIocG9kLCBwYXJhbSwgdmFsdWUpOworCisJaWYgKChwYXJhbSA9PSBQT0RfYW1wX21vZGVsX3NldHVwKSB8fCAocGFyYW0gPT0gUE9EX2VmZmVjdF9zZXR1cCkpICAvKiB0aGVzZSBhbHNvIGFmZmVjdCBvdGhlciBzZXR0aW5ncyAqLworCQlsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQoJnBvZC0+ZHVtcHJlcSk7Cit9CisKKy8qCisJUmVzb2x2ZSB2YWx1ZSB0byBtZW1vcnkgbG9jYXRpb24uCisqLworc3RhdGljIHZvaWQgcG9kX3Jlc29sdmUoY29uc3QgY2hhciAqYnVmLCBzaG9ydCBibG9jazAsIHNob3J0IGJsb2NrMSwgdW5zaWduZWQgY2hhciAqbG9jYXRpb24pCit7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJc2hvcnQgYmxvY2sgPSAodmFsdWUgPCAweDQwKSA/IGJsb2NrMCA6IGJsb2NrMTsKKwl2YWx1ZSAmPSAweDNmOworCWxvY2F0aW9uWzBdID0gYmxvY2sgPj4gNzsKKwlsb2NhdGlvblsxXSA9IHZhbHVlIHwgKGJsb2NrICYgMHg3Zik7Cit9CisKKy8qCisJU2VuZCBjb21tYW5kIHRvIHN0b3JlIGNoYW5uZWwvZWZmZWN0cyBzZXR1cC9hbXAgc2V0dXAgdG8gUE9EeHQgUHJvLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZW5kX3N0b3JlX2NvbW1hbmQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgc2hvcnQgYmxvY2swLCBzaG9ydCBibG9jazEpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaW50IHNpemUgPSAzICsgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhX2J1Zik7CisJY2hhciAqc3lzZXggPSBwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHBvZCwgUE9EX1NZU0VYX1NUT1JFLCBzaXplKTsKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm4gMDsKKworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTXSA9IDU7ICAvKiBzZWUgcG9kX2R1bXAoKSAqLworCXBvZF9yZXNvbHZlKGJ1ZiwgYmxvY2swLCBibG9jazEsIHN5c2V4ICsgU1lTRVhfREFUQV9PRlMgKyAxKTsKKwltZW1jcHkoc3lzZXggKyBTWVNFWF9EQVRBX09GUyArIDMsICZwb2QtPnByb2dfZGF0YV9idWYsIHNpemVvZihwb2QtPnByb2dfZGF0YV9idWYpKTsKKworCWxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmcG9kLT5saW5lNiwgc3lzZXgsIHNpemUpOworCWtmcmVlKHN5c2V4KTsKKwkvKiBuZWVkcyBzb21lIGRlbGF5IGhlcmUgb24gQU1ENjQgcGxhdGZvcm0gKi8KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJU2VuZCBjb21tYW5kIHRvIHJldHJpZXZlIGNoYW5uZWwvZWZmZWN0cyBzZXR1cC9hbXAgc2V0dXAgdG8gUE9EeHQgUHJvLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZW5kX3JldHJpZXZlX2NvbW1hbmQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgc2hvcnQgYmxvY2swLCBzaG9ydCBibG9jazEpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCBzaXplID0gNDsKKwljaGFyICpzeXNleCA9IHBvZF9hbGxvY19zeXNleF9idWZmZXIocG9kLCBQT0RfU1lTRVhfRFVNUE1FTSwgc2l6ZSk7CisKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm4gMDsKKworCXBvZF9yZXNvbHZlKGJ1ZiwgYmxvY2swLCBibG9jazEsIHN5c2V4ICsgU1lTRVhfREFUQV9PRlMpOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTICsgMl0gPSAwOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTICsgM10gPSAwOworCWxpbmU2X2R1bXBfc3RhcnRlZCgmcG9kLT5kdW1wcmVxLCBQT0RfRFVNUF9NRU1PUlkpOworCisJaWYgKGxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmcG9kLT5saW5lNiwgc3lzZXgsIHNpemUpIDwgc2l6ZSkKKwkJbGluZTZfZHVtcF9maW5pc2hlZCgmcG9kLT5kdW1wcmVxKTsKKworCWtmcmVlKHN5c2V4KTsKKwkvKiBuZWVkcyBzb21lIGRlbGF5IGhlcmUgb24gQU1ENjQgcGxhdGZvcm0gKi8KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJR2VuZXJpYyBnZXQgbmFtZSBmdW5jdGlvbi4KKyovCitzdGF0aWMgc3NpemVfdCBnZXRfbmFtZV9nZW5lcmljKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqYnVmKQoreworCWludCBsZW5ndGggPSAwOworCWNvbnN0IGNoYXIgKnAxOworCWNoYXIgKnAyOworCWNoYXIgKmxhc3Rfbm9uX3NwYWNlID0gYnVmOworCisJaW50IHJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmcG9kLT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZvciAocDEgPSBzdHIsIHAyID0gYnVmOyAqcDE7ICsrcDEsICsrcDIpIHsKKwkJKnAyID0gKnAxOworCQlpZiAoKnAyICE9ICcgJykKKwkJCWxhc3Rfbm9uX3NwYWNlID0gcDI7CisJCWlmICgrK2xlbmd0aCA9PSBQT0RfTkFNRV9MRU5HVEgpCisJCQlicmVhazsKKwl9CisKKwkqKGxhc3Rfbm9uX3NwYWNlICsgMSkgPSAnXG4nOworCXJldHVybiBsYXN0X25vbl9zcGFjZSAtIGJ1ZiArIDI7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImNoYW5uZWwiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPmNoYW5uZWxfbnVtKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gImNoYW5uZWwiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlwb2Rfc2VuZF9jaGFubmVsKHBvZCwgdmFsdWUpOworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibmFtZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIGdldF9uYW1lX2dlbmVyaWMocG9kLCBwb2QtPnByb2dfZGF0YS5oZWFkZXIgKyBQT0RfTkFNRV9PRkZTRVQsIGJ1Zik7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm5hbWUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X25hbWVfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gZ2V0X25hbWVfZ2VuZXJpYyhwb2QsIHBvZC0+cHJvZ19kYXRhX2J1Zi5oZWFkZXIgKyBQT0RfTkFNRV9PRkZTRVQsIGJ1Zik7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImR1bXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X2R1bXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCByZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnBvZC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJbWVtY3B5KGJ1ZiwgJnBvZC0+cHJvZ19kYXRhLCBzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwlyZXR1cm4gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gImR1bXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X2R1bXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAoY291bnQgIT0gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSkgeworCQlkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LAorCQkJCQkJImRhdGEgYmxvY2sgbXVzdCBiZSBleGFjdGx5ICVkIGJ5dGVzXG4iLAorCQkJCQkJKGludClzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcG9kX2R1bXAocG9kLCBidWYpOworCXJldHVybiBzaXplb2YocG9kLT5wcm9nX2RhdGEpOworfQorCisvKgorCVJlcXVlc3Qgc3lzdGVtIHBhcmFtZXRlci4KKwlAcGFyYW0gdHVuZXIgbm9uLXplcm8sIGlmIGNvZGUgcmVmZXJzIHRvIGEgdHVuZXIgcGFyYW1ldGVyCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9zeXN0ZW1fcGFyYW0oc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgY2hhciAqYnVmLCBpbnQgY29kZSwgc3RydWN0IFZhbHVlV2FpdCAqcGFyYW0sIGludCB0dW5lciwgaW50IHNpZ24pCit7CisJY2hhciAqc3lzZXg7CisJaW50IHZhbHVlOworCXN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDE7CisJaW50IHJldHZhbCA9IDA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAoKChwb2QtPnByb2dfZGF0YS5jb250cm9sW1BPRF90dW5lcl0gJiAweDQwKSA9PSAwKSAmJiB0dW5lcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBzZW5kIHZhbHVlIHJlcXVlc3QgdG8gdHVuZXI6ICovCisJcGFyYW0tPnZhbHVlID0gUE9EX3N5c3RlbV9pbnZhbGlkOworCXN5c2V4ID0gcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihwb2QsIFBPRF9TWVNFWF9TWVNURU1SRVEsIHNpemUpOworCWlmICghc3lzZXgpCisJCXJldHVybiAwOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTXSA9IGNvZGU7CisJbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZwb2QtPmxpbmU2LCBzeXNleCwgc2l6ZSk7CisJa2ZyZWUoc3lzZXgpOworCisJLyogd2FpdCBmb3IgdHVuZXIgdG8gcmVzcG9uZDogKi8KKwlhZGRfd2FpdF9xdWV1ZSgmcGFyYW0tPndhaXQsICZ3YWl0KTsKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKworCXdoaWxlIChwYXJhbS0+dmFsdWUgPT0gUE9EX3N5c3RlbV9pbnZhbGlkKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJc2NoZWR1bGUoKTsKKwl9CisKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGFyYW0tPndhaXQsICZ3YWl0KTsKKworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJdmFsdWUgPSBzaWduID8gKGludCkoc2lnbmVkIHNob3J0KXBhcmFtLT52YWx1ZSA6IChpbnQpKHVuc2lnbmVkIHNob3J0KXBhcmFtLT52YWx1ZTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsdWUpOworfQorCisvKgorCVNlbmQgc3lzdGVtIHBhcmFtZXRlci4KKwlAcGFyYW0gdHVuZXIgbm9uLXplcm8sIGlmIGNvZGUgcmVmZXJzIHRvIGEgdHVuZXIgcGFyYW1ldGVyCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9zeXN0ZW1fcGFyYW0oc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgICBpbnQgY291bnQsIGludCBjb2RlLCB1bnNpZ25lZCBzaG9ydCBtYXNrLAorCQkJCSAgICBpbnQgdHVuZXIpCit7CisJY2hhciAqc3lzZXg7CisJc3RhdGljIGNvbnN0IGludCBzaXplID0gNTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKworCWlmICgoKHBvZC0+cHJvZ19kYXRhLmNvbnRyb2xbUE9EX3R1bmVyXSAmIDB4NDApID09IDApICYmIHR1bmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHNlbmQgdmFsdWUgdG8gdHVuZXI6ICovCisJc3lzZXggPSBwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHBvZCwgUE9EX1NZU0VYX1NZU1RFTSwgc2l6ZSk7CisJaWYgKCFzeXNleCkKKwkJcmV0dXJuIDA7CisJdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIG1hc2s7CisJc3lzZXhbU1lTRVhfREFUQV9PRlNdID0gY29kZTsKKwlzeXNleFtTWVNFWF9EQVRBX09GUyArIDFdID0gKHZhbHVlID4+IDEyKSAmIDB4MGY7CisJc3lzZXhbU1lTRVhfREFUQV9PRlMgKyAyXSA9ICh2YWx1ZSA+PiAgOCkgJiAweDBmOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTICsgM10gPSAodmFsdWUgPj4gIDQpICYgMHgwZjsKKwlzeXNleFtTWVNFWF9EQVRBX09GUyArIDRdID0gKHZhbHVlICAgICAgKSAmIDB4MGY7CisJbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZwb2QtPmxpbmU2LCBzeXNleCwgc2l6ZSk7CisJa2ZyZWUoc3lzZXgpOworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiZHVtcF9idWYiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X2R1bXBfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZwb2QtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbWNweShidWYsICZwb2QtPnByb2dfZGF0YV9idWYsIHNpemVvZihwb2QtPnByb2dfZGF0YV9idWYpKTsKKwlyZXR1cm4gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhX2J1Zik7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJkdW1wX2J1ZiIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfZHVtcF9idWYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmIChjb3VudCAhPSBzaXplb2YocG9kLT5wcm9nX2RhdGEpKSB7CisJCWRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsCisJCQkJCQkiZGF0YSBibG9jayBtdXN0IGJlIGV4YWN0bHkgJWQgYnl0ZXNcbiIsCisJCQkJCQkoaW50KXNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoJnBvZC0+cHJvZ19kYXRhX2J1ZiwgYnVmLCBzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwlyZXR1cm4gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gImZpbmlzaCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfZmluaXNoKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCBzaXplID0gMDsKKwljaGFyICpzeXNleCA9IHBvZF9hbGxvY19zeXNleF9idWZmZXIocG9kLCBQT0RfU1lTRVhfRklOSVNILCBzaXplKTsKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm4gMDsKKwlsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnBvZC0+bGluZTYsIHN5c2V4LCBzaXplKTsKKwlrZnJlZShzeXNleCk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAic3RvcmVfY2hhbm5lbCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfc3RvcmVfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwb2Rfc2VuZF9zdG9yZV9jb21tYW5kKGRldiwgYnVmLCBjb3VudCwgMHgwMDAwLCAweDAwYzApOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAic3RvcmVfZWZmZWN0c19zZXR1cCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfc3RvcmVfZWZmZWN0c19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gcG9kX3NlbmRfc3RvcmVfY29tbWFuZChkZXYsIGJ1ZiwgY291bnQsIDB4MDA4MCwgMHgwMDgwKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInN0b3JlX2FtcF9zZXR1cCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfc3RvcmVfYW1wX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwb2Rfc2VuZF9zdG9yZV9jb21tYW5kKGRldiwgYnVmLCBjb3VudCwgMHgwMDQwLCAweDAxMDApOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAicmV0cmlldmVfY2hhbm5lbCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfcmV0cmlldmVfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gcG9kX3NlbmRfcmV0cmlldmVfY29tbWFuZChkZXYsIGJ1ZiwgY291bnQsIDB4MDAwMCwgMHgwMGMwKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInJldHJpZXZlX2VmZmVjdHNfc2V0dXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3JldHJpZXZlX2VmZmVjdHNfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBvZF9zZW5kX3JldHJpZXZlX2NvbW1hbmQoZGV2LCBidWYsIGNvdW50LCAweDAwODAsIDB4MDA4MCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJyZXRyaWV2ZV9hbXBfc2V0dXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3JldHJpZXZlX2FtcF9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBvZF9zZW5kX3JldHJpZXZlX2NvbW1hbmQoZGV2LCBidWYsIGNvdW50LCAweDAwNDAsIDB4MDEwMCk7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImRpcnR5IiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9kaXJ0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWJ1ZlswXSA9IHBvZC0+ZGlydHkgPyAnMScgOiAnMCc7CisJYnVmWzFdID0gJ1xuJzsKKwlyZXR1cm4gMjsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibWlkaV9wb3N0cHJvY2VzcyIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfbWlkaV9wb3N0cHJvY2VzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPm1pZGlfcG9zdHByb2Nlc3MpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAibWlkaV9wb3N0cHJvY2VzcyIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfbWlkaV9wb3N0cHJvY2VzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJcG9kLT5taWRpX3Bvc3Rwcm9jZXNzID0gdmFsdWUgPyAxIDogMDsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gInNlcmlhbF9udW1iZXIiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X3NlcmlhbF9udW1iZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvZC0+c2VyaWFsX251bWJlcik7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImZpcm13YXJlX3ZlcnNpb24iIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X2Zpcm13YXJlX3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkXG4iLCBwb2QtPmZpcm13YXJlX3ZlcnNpb24gLyAxMDAsCisJCSAgICAgICBwb2QtPmZpcm13YXJlX3ZlcnNpb24gJSAxMDApOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJkZXZpY2VfaWQiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X2RldmljZV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPmRldmljZV9pZCk7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImNsaXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfd2FpdF9mb3JfY2xpcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCBlcnIgPSAwOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXBvZC0+Y2xpcHBpbmcudmFsdWUgPSAwOworCWFkZF93YWl0X3F1ZXVlKCZwb2QtPmNsaXBwaW5nLndhaXQsICZ3YWl0KTsKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKworCXdoaWxlIChwb2QtPmNsaXBwaW5nLnZhbHVlID09IDApIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQllcnIgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlzY2hlZHVsZSgpOworCX0KKworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb2QtPmNsaXBwaW5nLndhaXQsICZ3YWl0KTsKKwlyZXR1cm4gZXJyOworfQorCisjZGVmaW5lIFBPRF9HRVRfU1lTVEVNX1BBUkFNKGNvZGUsIHR1bmVyLCBzaWduKSBcCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0XyAjIyBjb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7IFwKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOyBcCisJcmV0dXJuIHBvZF9nZXRfc3lzdGVtX3BhcmFtKHBvZCwgYnVmLCBQT0RfICMjIGNvZGUsICZwb2QtPmNvZGUsIFwKKwkJCQkgICAgdHVuZXIsIHNpZ24pOyBcCit9CisKKyNkZWZpbmUgUE9EX0dFVF9TRVRfU1lTVEVNX1BBUkFNKGNvZGUsIG1hc2ssIHR1bmVyLCBzaWduKSBcCitQT0RfR0VUX1NZU1RFTV9QQVJBTShjb2RlLCB0dW5lciwgc2lnbikgXAorc3RhdGljIHNzaXplX3QgcG9kX3NldF8gIyMgY29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7IFwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOyBcCisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsgXAorCXJldHVybiBwb2Rfc2V0X3N5c3RlbV9wYXJhbShwb2QsIGJ1ZiwgY291bnQsIFBPRF8gIyMgY29kZSwgbWFzaywgXAorCQkJCSAgICB0dW5lcik7IFwKK30KKworUE9EX0dFVF9TRVRfU1lTVEVNX1BBUkFNKG1vbml0b3JfbGV2ZWwsIDB4ZmZmZiwgMCwgMCk7CitQT0RfR0VUX1NFVF9TWVNURU1fUEFSQU0ocm91dGluZywgMHgwMDAzLCAwLCAwKTsKK1BPRF9HRVRfU0VUX1NZU1RFTV9QQVJBTSh0dW5lcl9tdXRlLCAweDAwMDEsIDEsIDApOworUE9EX0dFVF9TRVRfU1lTVEVNX1BBUkFNKHR1bmVyX2ZyZXEsIDB4ZmZmZiwgMSwgMCk7CitQT0RfR0VUX1NZU1RFTV9QQVJBTSh0dW5lcl9ub3RlLCAxLCAxKTsKK1BPRF9HRVRfU1lTVEVNX1BBUkFNKHR1bmVyX3BpdGNoLCAxLCAxKTsKKworI3VuZGVmIEdFVF9TRVRfU1lTVEVNX1BBUkFNCisjdW5kZWYgR0VUX1NZU1RFTV9QQVJBTQorCisvKiBQT0Qgc3BlY2lhbCBmaWxlczogKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihjaGFubmVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9jaGFubmVsLCBwb2Rfc2V0X2NoYW5uZWwpOworc3RhdGljIERFVklDRV9BVFRSKGNsaXAsIFNfSVJVR08sIHBvZF93YWl0X2Zvcl9jbGlwLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldmljZV9pZCwgU19JUlVHTywgcG9kX2dldF9kZXZpY2VfaWQsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGlydHksIFNfSVJVR08sIHBvZF9nZXRfZGlydHksIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZHVtcCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZHVtcCwgcG9kX3NldF9kdW1wKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkdW1wX2J1ZiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZHVtcF9idWYsIHBvZF9zZXRfZHVtcF9idWYpOworc3RhdGljIERFVklDRV9BVFRSKGZpbmlzaCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfZmluaXNoKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaXJtd2FyZV92ZXJzaW9uLCBTX0lSVUdPLCBwb2RfZ2V0X2Zpcm13YXJlX3ZlcnNpb24sIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWlkaV9wb3N0cHJvY2VzcywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbWlkaV9wb3N0cHJvY2VzcywgcG9kX3NldF9taWRpX3Bvc3Rwcm9jZXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb25pdG9yX2xldmVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb25pdG9yX2xldmVsLCBwb2Rfc2V0X21vbml0b3JfbGV2ZWwpOworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHBvZF9nZXRfbmFtZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lX2J1ZiwgU19JUlVHTywgcG9kX2dldF9uYW1lX2J1ZiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXRyaWV2ZV9hbXBfc2V0dXAsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X3JldHJpZXZlX2FtcF9zZXR1cCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV0cmlldmVfY2hhbm5lbCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfcmV0cmlldmVfY2hhbm5lbCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV0cmlldmVfZWZmZWN0c19zZXR1cCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfcmV0cmlldmVfZWZmZWN0c19zZXR1cCk7CitzdGF0aWMgREVWSUNFX0FUVFIocm91dGluZywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcm91dGluZywgcG9kX3NldF9yb3V0aW5nKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzZXJpYWxfbnVtYmVyLCBTX0lSVUdPLCBwb2RfZ2V0X3NlcmlhbF9udW1iZXIsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvcmVfYW1wX3NldHVwLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9zdG9yZV9hbXBfc2V0dXApOworc3RhdGljIERFVklDRV9BVFRSKHN0b3JlX2NoYW5uZWwsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X3N0b3JlX2NoYW5uZWwpOworc3RhdGljIERFVklDRV9BVFRSKHN0b3JlX2VmZmVjdHNfc2V0dXAsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X3N0b3JlX2VmZmVjdHNfc2V0dXApOworc3RhdGljIERFVklDRV9BVFRSKHR1bmVyX2ZyZXEsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3R1bmVyX2ZyZXEsIHBvZF9zZXRfdHVuZXJfZnJlcSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuZXJfbXV0ZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHVuZXJfbXV0ZSwgcG9kX3NldF90dW5lcl9tdXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5lcl9ub3RlLCBTX0lSVUdPLCBwb2RfZ2V0X3R1bmVyX25vdGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuZXJfcGl0Y2gsIFNfSVJVR08sIHBvZF9nZXRfdHVuZXJfcGl0Y2gsIGxpbmU2X25vcF93cml0ZSk7CisKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKK3N0YXRpYyBERVZJQ0VfQVRUUihyYXcsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBsaW5lNl9zZXRfcmF3KTsKKyNlbmRpZgorCisvKgorCVBPRCBkZXN0cnVjdG9yLgorKi8KK3N0YXRpYyB2b2lkIHBvZF9kZXN0cnVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwlpZiAocG9kID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNiA9ICZwb2QtPmxpbmU2OworCWlmIChsaW5lNiA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTZfY2xlYW51cF9hdWRpbyhsaW5lNik7CisKKwkvKiBmcmVlIGR1bXAgcmVxdWVzdCBkYXRhOiAqLworCWxpbmU2X2R1bXByZXFfZGVzdHJ1Y3QoJnBvZC0+ZHVtcHJlcSk7CisKKwlrZnJlZShwb2QtPmJ1ZmZlcl92ZXJzaW9ucmVxKTsKK30KKworLyoKKwlDcmVhdGUgc3lzZnMgZW50cmllcy4KKyovCitzdGF0aWMgaW50IHBvZF9jcmVhdGVfZmlsZXMyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jaGFubmVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jbGlwKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXZpY2VfaWQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpcnR5KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kdW1wKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kdW1wX2J1ZikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmluaXNoKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taWRpX3Bvc3Rwcm9jZXNzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb25pdG9yX2xldmVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lX2J1ZikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV0cmlldmVfYW1wX3NldHVwKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXRyaWV2ZV9jaGFubmVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXRyaWV2ZV9lZmZlY3RzX3NldHVwKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yb3V0aW5nKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9yZV9hbXBfc2V0dXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b3JlX2NoYW5uZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b3JlX2VmZmVjdHNfc2V0dXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX2ZyZXEpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX211dGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX25vdGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX3BpdGNoKSk7CisKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JhdykpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyoKKwkgSW5pdCBQT0QgZGV2aWNlLgorKi8KK2ludCBwb2RfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKQoreworCWludCBlcnI7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAmcG9kLT5saW5lNjsKKworCWlmICgoaW50ZXJmYWNlID09IE5VTEwpIHx8IChwb2QgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PREVWOworCisJcG9kLT5jaGFubmVsX251bSA9IDI1NTsKKworCS8qIGluaXRpYWxpemUgd2FpdCBxdWV1ZXM6ICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT5tb25pdG9yX2xldmVsLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+cm91dGluZy53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPnR1bmVyX211dGUud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT50dW5lcl9mcmVxLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+dHVuZXJfbm90ZS53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPnR1bmVyX3BpdGNoLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+Y2xpcHBpbmcud2FpdCk7CisKKwltZW1zZXQocG9kLT5wYXJhbV9kaXJ0eSwgMHhmZiwgc2l6ZW9mKHBvZC0+cGFyYW1fZGlydHkpKTsKKworCS8qIGluaXRpYWxpemUgVVNCIGJ1ZmZlcnM6ICovCisJZXJyID0gbGluZTZfZHVtcHJlcV9pbml0KCZwb2QtPmR1bXByZXEsIHBvZF9yZXF1ZXN0X2NoYW5uZWwsCisJCQkJIHNpemVvZihwb2RfcmVxdWVzdF9jaGFubmVsKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvZC0+YnVmZmVyX3ZlcnNpb25yZXEgPSBrbWFsbG9jKHNpemVvZihwb2RfcmVxdWVzdF92ZXJzaW9uKSwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJaWYgKHBvZC0+YnVmZmVyX3ZlcnNpb25yZXEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KHBvZC0+YnVmZmVyX3ZlcnNpb25yZXEsIHBvZF9yZXF1ZXN0X3ZlcnNpb24sCisJICAgICAgIHNpemVvZihwb2RfcmVxdWVzdF92ZXJzaW9uKSk7CisKKwkvKiBjcmVhdGUgc3lzZnMgZW50cmllczogKi8KKwllcnIgPSBwb2RfY3JlYXRlX2ZpbGVzMigmaW50ZXJmYWNlLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgYXVkaW8gc3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfYXVkaW8obGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgTUlESSBzdWJzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9taWRpKGxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBpbml0aWFsaXplIFBDTSBzdWJzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9wY20obGluZTYsICZwb2RfcGNtX3Byb3BlcnRpZXMpOworCWlmIChlcnIgPCAwKSB7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHJlZ2lzdGVyIGF1ZGlvIHN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9yZWdpc3Rlcl9hdWRpbyhsaW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHBvZC0+bGluZTYucHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX0NPTlRST0wpIHsKKwkJLyogcXVlcnkgc29tZSBkYXRhOiAqLworCQlsaW5lNl9zdGFydHVwX2RlbGF5ZWQoJnBvZC0+ZHVtcHJlcSwgUE9EX1NUQVJUVVBfREVMQVksCisJCQkJICAgICAgcG9kX3N0YXJ0dXBfdGltZW91dCwgcG9kKTsKKwkJbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKCZwb2QtPmxpbmU2LCAmcG9kLT5zZXJpYWxfbnVtYmVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlQT0QgZGV2aWNlIGRpc2Nvbm5lY3RlZC4KKyovCit2b2lkIHBvZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZDsKKworCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCXBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmIChwb2QgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBwb2QtPmxpbmU2LmxpbmU2cGNtOworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisKKwkJaWYgKGxpbmU2cGNtICE9IE5VTEwpIHsKKwkJCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKwkJCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCQl9CisKKwkJaWYgKGRldiAhPSBOVUxMKSB7CisJCQkvKiByZW1vdmUgc3lzZnMgZW50cmllczogKi8KKwkJCWlmIChwb2QtPnZlcnNpb25yZXFfb2spCisJCQkJcG9kX3JlbW92ZV9maWxlcyhwb2QtPmZpcm13YXJlX3ZlcnNpb24sIHBvZC0+bGluZTYucHJvcGVydGllcy0+ZGV2aWNlX2JpdCwgZGV2KTsKKworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NoYW5uZWwpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NsaXApOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldmljZV9pZCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlydHkpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2R1bXApOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2R1bXBfYnVmKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9maW5pc2gpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24pOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21pZGlfcG9zdHByb2Nlc3MpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vbml0b3JfbGV2ZWwpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWVfYnVmKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXRyaWV2ZV9hbXBfc2V0dXApOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldHJpZXZlX2NoYW5uZWwpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldHJpZXZlX2VmZmVjdHNfc2V0dXApOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JvdXRpbmcpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbF9udW1iZXIpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b3JlX2FtcF9zZXR1cCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvcmVfY2hhbm5lbCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvcmVfZWZmZWN0c19zZXR1cCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfZnJlcSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfbXV0ZSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfbm90ZSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfcGl0Y2gpOworCisjaWYgQ1JFQVRFX1JBV19GSUxFCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmF3KTsKKyNlbmRpZgorCQl9CisJfQorCisJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1MWNhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuaApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgUE9EX0gKKyNkZWZpbmUgUE9EX0gKKworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKworI2luY2x1ZGUgImR1bXByZXF1ZXN0LmgiCisKKworLyoKKwlQT0R4dCBMaXZlIGludGVyZmFjZXMKKyovCisjZGVmaW5lIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EICAgIDAKKyNkZWZpbmUgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVggMQorCisvKgorCUxvY2F0ZSBuYW1lIGluIGJpbmFyeSBwcm9ncmFtIGR1bXAKKyovCisjZGVmaW5lCVBPRF9OQU1FX09GRlNFVCAwCisjZGVmaW5lCVBPRF9OQU1FX0xFTkdUSCAxNgorCisvKgorCU90aGVyIGNvbnN0YW50cworKi8KKyNkZWZpbmUgUE9EX0NPTlRST0xfU0laRSAweDgwCisjZGVmaW5lIFBPRF9CVUZTSVpFX0RVTVBSRVEgNworI2RlZmluZSBQT0RfU1RBUlRVUF9ERUxBWSAzCisKKworLyoqCisJIERhdGEgc3RydWN0dXJlIGZvciB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5LgorCSBUaGlzIGlzIHRoZSBjYXNlIGZvciBzeXN0ZW0gYW5kIHR1bmVyIHNldHRpbmdzLgorKi8KK3N0cnVjdCBWYWx1ZVdhaXQgeworCXVuc2lnbmVkIHNob3J0IHZhbHVlOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisvKioKKwkgQmluYXJ5IFBvZFhUIFBybyBwcm9ncmFtIGR1bXAKKyovCitzdHJ1Y3QgcG9kX3Byb2dyYW0geworCS8qKgorCQkgSGVhZGVyIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgcHJvZ3JhbSBuYW1lKS4KKwkqLworCXVuc2lnbmVkIGNoYXIgaGVhZGVyWzB4MjBdOworCisJLyoqCisJCSBQcm9ncmFtIHBhcmFtZXRlcnMuCisJKi8KKwl1bnNpZ25lZCBjaGFyIGNvbnRyb2xbUE9EX0NPTlRST0xfU0laRV07Cit9OworCitzdHJ1Y3QgdXNiX2xpbmU2X3BvZCB7CisJLyoqCisJCSBHZW5lcmljIExpbmU2IFVTQiBkYXRhLgorCSovCisJc3RydWN0IHVzYl9saW5lNiBsaW5lNjsKKworCS8qKgorCQkgRHVtcCByZXF1ZXN0IHN0cnVjdHVyZS4KKwkqLworCXN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgZHVtcHJlcTsKKworCS8qKgorCQkgQ3VycmVudCBwcm9ncmFtIG51bWJlci4KKwkqLworCXVuc2lnbmVkIGNoYXIgY2hhbm5lbF9udW07CisKKwkvKioKKwkJIEN1cnJlbnQgcHJvZ3JhbSBzZXR0aW5ncy4KKwkqLworCXN0cnVjdCBwb2RfcHJvZ3JhbSBwcm9nX2RhdGE7CisKKwkvKioKKwkJIEJ1ZmZlciBmb3IgZGF0YSByZXRyaWV2ZWQgZnJvbSBvciB0byBiZSBzdG9yZWQgb24gUE9EeHQgUHJvLgorCSovCisJc3RydWN0IHBvZF9wcm9ncmFtIHByb2dfZGF0YV9idWY7CisKKwkvKioKKwkJIEJ1ZmZlciBmb3IgcmVxdWVzdGluZyB2ZXJzaW9uIG51bWJlci4KKwkqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl92ZXJzaW9ucmVxOworCisJLyoqCisJCSBUdW5lciBtdXRlIG1vZGUuCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IHR1bmVyX211dGU7CisKKwkvKioKKwkJIFR1bmVyIGJhc2UgZnJlcXVlbmN5ICh0eXBpY2FsbHkgNDQwSHopLgorCSovCisJc3RydWN0IFZhbHVlV2FpdCB0dW5lcl9mcmVxOworCisJLyoqCisJCSBOb3RlIHJlY2VpdmVkIGZyb20gdHVuZXIuCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IHR1bmVyX25vdGU7CisKKwkvKioKKwkJIFBpdGNoIHZhbHVlIHJlY2VpdmVkIGZyb20gdHVuZXIuCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IHR1bmVyX3BpdGNoOworCisJLyoqCisJCSBJbnN0cnVtZW50IG1vbml0b3IgbGV2ZWwuCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IG1vbml0b3JfbGV2ZWw7CisKKwkvKioKKwkJIEF1ZGlvIHJvdXRpbmcgbW9kZS4KKwkJIDA6IHNlbmQgcHJvY2Vzc2VkIGd1aXRhcgorCQkgMTogc2VuZCBjbGVhbiBndWl0YXIKKwkJIDI6IHNlbmQgY2xlYW4gZ3VpdGFyIHJlLWFtcCBwbGF5YmFjaworCQkgMzogc2VuZCByZS1hbXAgcGxheWJhY2sKKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgcm91dGluZzsKKworCS8qKgorCQkgV2FpdCBmb3IgYXVkaW8gY2xpcHBpbmcgZXZlbnQuCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IGNsaXBwaW5nOworCisJLyoqCisJCSBCb3R0b20taGFsZiBmb3IgY3JlYXRpb24gb2Ygc3lzZnMgc3BlY2lhbCBmaWxlcy4KKwkqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBjcmVhdGVfZmlsZXNfd29yazsKKworCS8qKgorCQkgRGlydHkgZmxhZ3MgZm9yIGFjY2VzcyB0byBwYXJhbWV0ZXIgZGF0YS4KKwkqLworCXVuc2lnbmVkIGxvbmcgcGFyYW1fZGlydHlbUE9EX0NPTlRST0xfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CisKKwkvKioKKwkJIFNvbWUgYXRvbWljIGZsYWdzLgorCSovCisJdW5zaWduZWQgbG9uZyBhdG9taWNfZmxhZ3M7CisKKwkvKioKKwkJIENvdW50ZXIgZm9yIHN0YXJ0dXAgcHJvY2Vzcy4KKwkqLworCWludCBzdGFydHVwX2NvdW50OworCisJLyoqCisJCSBTZXJpYWwgbnVtYmVyIG9mIGRldmljZS4KKwkqLworCWludCBzZXJpYWxfbnVtYmVyOworCisJLyoqCisJCSBGaXJtd2FyZSB2ZXJzaW9uICh4IDEwMCkuCisJKi8KKwlpbnQgZmlybXdhcmVfdmVyc2lvbjsKKworCS8qKgorCQkgRGV2aWNlIElELgorCSovCisJaW50IGRldmljZV9pZDsKKworCS8qKgorCQkgRmxhZyB0byBpbmRpY2F0ZSBtb2RpZmljYXRpb24gb2YgY3VycmVudCBwcm9ncmFtIHNldHRpbmdzLgorCSovCisJY2hhciBkaXJ0eTsKKworCS8qKgorCQkgRmxhZyBpZiBpbml0aWFsIGZpcm13YXJlIHZlcnNpb24gcmVxdWVzdCBoYXMgYmVlbiBzdWNjZXNzZnVsLgorCSovCisJY2hhciB2ZXJzaW9ucmVxX29rOworCisJLyoqCisJCSBGbGFnIHRvIGVuYWJsZSBNSURJIHBvc3Rwcm9jZXNzaW5nLgorCSovCisJY2hhciBtaWRpX3Bvc3Rwcm9jZXNzOworfTsKKworCitleHRlcm4gdm9pZCBwb2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK2V4dGVybiBpbnQgcG9kX2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCk7CitleHRlcm4gdm9pZCBwb2RfbWlkaV9wb3N0cHJvY2VzcyhzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLAorCQkJCSB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiB2b2lkIHBvZF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCk7CitleHRlcm4gdm9pZCBwb2RfcmVjZWl2ZV9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHBhcmFtKTsKK2V4dGVybiB2b2lkIHBvZF90cmFuc21pdF9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHBhcmFtLAorCQkJCSAgIGludCB2YWx1ZSk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcmV2aXNpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9yZXZpc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYTBhODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcmV2aXNpb24uaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgRFJJVkVSX1JFVklTSU9OCisvKiBjdXJyZW50IHN1YnZlcnNpb24gcmV2aXNpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1JFVklTSU9OICIgKHJldmlzaW9uIDUyOSkiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMTIyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEVtaWwgTXlocm1hbiAoZW1pbC5teWhybWFuQGdtYWlsLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJjYXB0dXJlLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKyNpbmNsdWRlICJ0b25lcG9ydC5oIgorCisKK3N0YXRpYyBpbnQgdG9uZXBvcnRfc2VuZF9jbWQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiwgaW50IGNtZDEsIGludCBjbWQyKTsKKworCitzdGF0aWMgc3RydWN0IHNuZF9yYXRkZW4gdG9uZXBvcnRfcmF0ZGVuID0geworCS5udW1fbWluID0gNDQxMDAsCisJLm51bV9tYXggPSA0NDEwMCwKKwkubnVtX3N0ZXAgPSAxLAorCS5kZW4gPSAxCit9OworCitzdGF0aWMgc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzIHRvbmVwb3J0X3BjbV9wcm9wZXJ0aWVzID0geworICAuc25kX2xpbmU2X3BsYXliYWNrX2h3ID0geworCQkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKKwkJLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkucmF0ZV9taW4gPSAgICAgICAgIDQ0MTAwLAorCQkucmF0ZV9tYXggPSAgICAgICAgIDQ0MTAwLAorCQkuY2hhbm5lbHNfbWluID0gICAgIDIsCisJCS5jaGFubmVsc19tYXggPSAgICAgMiwKKwkJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKKwkJLnBlcmlvZF9ieXRlc19taW4gPSAxODAgKiA0LAorCQkucGVyaW9kX2J5dGVzX21heCA9IDgxOTIsCisJCS5wZXJpb2RzX21pbiA9ICAgICAgMSwKKwkJLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0CisJfSwKKyAgLnNuZF9saW5lNl9jYXB0dXJlX2h3ID0geworCQkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQkucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFX0tOT1QsCisJCS5yYXRlX21pbiA9ICAgICAgICAgNDQxMDAsCisJCS5yYXRlX21heCA9ICAgICAgICAgNDQxMDAsCisJCS5jaGFubmVsc19taW4gPSAgICAgMiwKKwkJLmNoYW5uZWxzX21heCA9ICAgICAyLAorCQkuYnVmZmVyX2J5dGVzX21heCA9IDYwMDAwLAorCQkucGVyaW9kX2J5dGVzX21pbiA9IDE4OCAqIDQsCisJCS5wZXJpb2RfYnl0ZXNfbWF4ID0gODE5MiwKKwkJLnBlcmlvZHNfbWluID0gICAgICAxLAorCQkucGVyaW9kc19tYXggPSAgICAgIDEwMjQKKwl9LAorCS5zbmRfbGluZTZfcmF0ZXMgPSB7CisJCS5ucmF0cyA9IDEsCisJCS5yYXRzID0gJnRvbmVwb3J0X3JhdGRlbgorCX0sCisJLmJ5dGVzX3Blcl9mcmFtZSA9IDQKK307CisKKy8qCisJRm9yIHRoZSBsZWQgb24gR3VpdGFycG9ydC4KKwlCcmlnaHRuZXNzIGdvZXMgZnJvbSAweDAwIHRvIDB4MjYuIFNldCBhIHZhbHVlIGFib3ZlIHRoaXMgdG8gaGF2ZSBsZWQKKwlibGluay4KKwkodm9pZCBjbWRfMHgwMihieXRlIHJlZCwgYnl0ZSBncmVlbikKKyovCitzdGF0aWMgaW50IGxlZF9yZWQgPSAweDAwOworc3RhdGljIGludCBsZWRfZ3JlZW4gPSAweDI2OworCitzdGF0aWMgdm9pZCB0b25lcG9ydF91cGRhdGVfbGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRwID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJaWYgKCF0cCkKKwkJcmV0dXJuOworCisJbGluZTYgPSAmdHAtPmxpbmU2OworCWlmIChsaW5lNikKKwkJdG9uZXBvcnRfc2VuZF9jbWQobGluZTYtPnVzYmRldiwgKGxlZF9yZWQgPDwgOCkgfCAweDAwMDIsCisJCQkJICBsZWRfZ3JlZW4pOworfQorCitzdGF0aWMgc3NpemVfdCB0b25lcG9ydF9zZXRfbGVkX3JlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyICpjOworCWxlZF9yZWQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgJmMsIDEwKTsKKwl0b25lcG9ydF91cGRhdGVfbGVkKGRldik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCB0b25lcG9ydF9zZXRfbGVkX2dyZWVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyICpjOworCWxlZF9ncmVlbiA9IHNpbXBsZV9zdHJ0b2woYnVmLCAmYywgMTApOworCXRvbmVwb3J0X3VwZGF0ZV9sZWQoZGV2KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsZWRfcmVkLCBTX0lXVUdPIHwgU19JUlVHTywgbGluZTZfbm9wX3JlYWQsIHRvbmVwb3J0X3NldF9sZWRfcmVkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsZWRfZ3JlZW4sIFNfSVdVR08gfCBTX0lSVUdPLCBsaW5lNl9ub3BfcmVhZCwgdG9uZXBvcnRfc2V0X2xlZF9ncmVlbik7CisKKworc3RhdGljIGludCB0b25lcG9ydF9zZW5kX2NtZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCBpbnQgY21kMSwgaW50IGNtZDIpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfT1VULAorCQkJICAgICAgY21kMSwgY21kMiwgTlVMTCwgMCwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWVycigic2VuZCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlUb25lcG9ydCBkZXN0cnVjdG9yLgorKi8KK3N0YXRpYyB2b2lkIHRvbmVwb3J0X2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwlpZiAodG9uZXBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2ID0gJnRvbmVwb3J0LT5saW5lNjsKKwlpZiAobGluZTYgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2X2NsZWFudXBfYXVkaW8obGluZTYpOworfQorCisvKgorCSBJbml0IFRvbmVwb3J0IGRldmljZS4KKyovCitpbnQgdG9uZXBvcnRfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgIHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0KQoreworCWludCBlcnIsIHRpY2tzOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gJnRvbmVwb3J0LT5saW5lNjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCisJaWYgKChpbnRlcmZhY2UgPT0gTlVMTCkgfHwgKHRvbmVwb3J0ID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluaXRpYWxpemUgYXVkaW8gc3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfYXVkaW8obGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXRvbmVwb3J0X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBQQ00gc3Vic3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfcGNtKGxpbmU2LCAmdG9uZXBvcnRfcGNtX3Byb3BlcnRpZXMpOworCWlmIChlcnIgPCAwKSB7CisJCXRvbmVwb3J0X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogcmVnaXN0ZXIgYXVkaW8gc3lzdGVtOiAqLworCWVyciA9IGxpbmU2X3JlZ2lzdGVyX2F1ZGlvKGxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl0b25lcG9ydF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCXVzYmRldiA9IGxpbmU2LT51c2JkZXY7CisJbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKGxpbmU2LCAmdG9uZXBvcnQtPnNlcmlhbF9udW1iZXIpOworCWxpbmU2X3JlYWRfZGF0YShsaW5lNiwgMHg4MGMyLCAmdG9uZXBvcnQtPmZpcm13YXJlX3ZlcnNpb24sIDEpOworCisJLyogc3luYyB0aW1lIG9uIGRldmljZSB3aXRoIGhvc3Q6ICovCisJdGlja3MgPSAoaW50KWdldF9zZWNvbmRzKCk7CisJbGluZTZfd3JpdGVfZGF0YShsaW5lNiwgMHg4MGM2LCAmdGlja3MsIDQpOworCisJLyoKKwlzZWVtcyB0byB3b3JrIHdpdGhvdXQgdGhlIGZpcnN0IHR3by4uLgorCSovCisJLyogdG9uZXBvcnRfc2VuZF9jbWQodXNiZGV2LCAweDAyMDEsIDB4MDAwMik7ICovCisJLyogdG9uZXBvcnRfc2VuZF9jbWQodXNiZGV2LCAweDA4MDEsIDB4MDAwMCk7ICovCisJLyogb25seSBvbmUgdGhhdCB3b3JrcyBmb3IgbWU7IG9uIEdQLCBUUCBtaWdodCBiZSBkaWZmZXJlbnQ/ICovCisJdG9uZXBvcnRfc2VuZF9jbWQodXNiZGV2LCAweDAzMDEsIDB4MDAwMCk7CisKKwlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCAhPSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUKSB7CisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfbGVkX3JlZCkpOworCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xlZF9ncmVlbikpOworCQl0b25lcG9ydF91cGRhdGVfbGVkKCZ1c2JkZXYtPmRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJVG9uZXBvcnQgZGV2aWNlIGRpc2Nvbm5lY3RlZC4KKyovCit2b2lkIHRvbmVwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydDsKKworCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCXRvbmVwb3J0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKHRvbmVwb3J0LT5saW5lNi51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IExJTkU2X0RFVklEX0dVSVRBUlBPUlQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xlZF9yZWQpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfbGVkX2dyZWVuKTsKKwl9CisKKwlpZiAodG9uZXBvcnQgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSB0b25lcG9ydC0+bGluZTYubGluZTZwY207CisKKwkJaWYgKGxpbmU2cGNtICE9IE5VTEwpIHsKKwkJCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKwkJCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCQl9CisJfQorCisJdG9uZXBvcnRfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkYzU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIFRPTkVQT1JUX0gKKyNkZWZpbmUgVE9ORVBPUlRfSAorCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKworCitzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0IHsKKwkvKioKKwkJIEdlbmVyaWMgTGluZTYgVVNCIGRhdGEuCisJKi8KKwlzdHJ1Y3QgdXNiX2xpbmU2IGxpbmU2OworCisJLyoqCisJCSBTZXJpYWwgbnVtYmVyIG9mIGRldmljZS4KKwkqLworCWludCBzZXJpYWxfbnVtYmVyOworCisJLyoqCisJCSBGaXJtd2FyZSB2ZXJzaW9uICh4IDEwMCkuCisJKi8KKwlpbnQgZmlybXdhcmVfdmVyc2lvbjsKK307CisKKworZXh0ZXJuIHZvaWQgdG9uZXBvcnRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK2V4dGVybiBpbnQgdG9uZXBvcnRfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJIHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi91c2JkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdXNiZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGYzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdXNiZGVmcy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIFVTQkRFRlNfSAorI2RlZmluZSBVU0JERUZTX0gKKworCisjZGVmaW5lIExJTkU2X1ZFTkRPUl9JRCAgMHgwZTQxCisKKyNkZWZpbmUgVVNCX0lOVEVSVkFMU19QRVJfU0VDT05EIDEwMDAKKworLyoKKwlEZXZpY2UgaWRzLgorKi8KKyNkZWZpbmUgTElORTZfREVWSURfQkFTU1BPRFhUICAgICAweDQyNTAKKyNkZWZpbmUgTElORTZfREVWSURfQkFTU1BPRFhUTElWRSAweDQ2NDIKKyNkZWZpbmUgTElORTZfREVWSURfQkFTU1BPRFhUUFJPICAweDQyNTIKKyNkZWZpbmUgTElORTZfREVWSURfR1VJVEFSUE9SVCAgICAweDQ3NTAKKyNkZWZpbmUgTElORTZfREVWSURfUE9DS0VUUE9EICAgICAweDUwNTEKKyNkZWZpbmUgTElORTZfREVWSURfUE9EWDMgICAgICAgICAweDQxNGEKKyNkZWZpbmUgTElORTZfREVWSURfUE9EWDNMSVZFICAgICAweDQxNGIKKyNkZWZpbmUgTElORTZfREVWSURfUE9EWFQgICAgICAgICAweDUwNDQKKyNkZWZpbmUgTElORTZfREVWSURfUE9EWFRMSVZFICAgICAweDQ2NTAKKyNkZWZpbmUgTElORTZfREVWSURfUE9EWFRQUk8gICAgICAweDUwNTAKKyNkZWZpbmUgTElORTZfREVWSURfVE9ORVBPUlRfR1ggICAweDQxNDcKKyNkZWZpbmUgTElORTZfREVWSURfVE9ORVBPUlRfVVgxICAweDQxNDEKKyNkZWZpbmUgTElORTZfREVWSURfVE9ORVBPUlRfVVgyICAweDQxNDIKKyNkZWZpbmUgTElORTZfREVWSURfVkFSSUFYICAgICAgICAweDUzNGQKKworI2RlZmluZSBMSU5FNl9CSVRfQkFTU1BPRFhUICAgICAgICgxIDw8IDApCisjZGVmaW5lIExJTkU2X0JJVF9CQVNTUE9EWFRMSVZFICAgKDEgPDwgMSkKKyNkZWZpbmUgTElORTZfQklUX0JBU1NQT0RYVFBSTyAgICAoMSA8PCAyKQorI2RlZmluZSBMSU5FNl9CSVRfR1VJVEFSUE9SVCAgICAgICgxIDw8IDMpCisjZGVmaW5lIExJTkU2X0JJVF9QT0NLRVRQT0QgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgTElORTZfQklUX1BPRFgzICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBMSU5FNl9CSVRfUE9EWDNMSVZFICAgICAgICgxIDw8IDYpCisjZGVmaW5lIExJTkU2X0JJVF9QT0RYVCAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgTElORTZfQklUX1BPRFhUTElWRSAgICAgICAoMSA8PCA4KQorI2RlZmluZSBMSU5FNl9CSVRfUE9EWFRQUk8gICAgICAgICgxIDw8IDkpCisjZGVmaW5lIExJTkU2X0JJVF9UT05FUE9SVF9HWCAgICAgKDEgPDwgMTApCisjZGVmaW5lIExJTkU2X0JJVF9UT05FUE9SVF9VWDEgICAgKDEgPDwgMTEpCisjZGVmaW5lIExJTkU2X0JJVF9UT05FUE9SVF9VWDIgICAgKDEgPDwgMTIpCisjZGVmaW5lIExJTkU2X0JJVF9WQVJJQVggICAgICAgICAgKDEgPDwgMTMpCisKKyNkZWZpbmUgTElORTZfQklUU19QUk8JCShMSU5FNl9CSVRfQkFTU1BPRFhUUFJPIHwgXAorCQkJCSBMSU5FNl9CSVRfUE9EWFRQUk8pCisjZGVmaW5lIExJTkU2X0JJVFNfTElWRQkJKExJTkU2X0JJVF9CQVNTUE9EWFRMSVZFIHwgXAorCQkJCSBMSU5FNl9CSVRfUE9EWFRMSVZFIHwgXAorCQkJCSBMSU5FNl9CSVRfUE9EWDNMSVZFKQorI2RlZmluZSBMSU5FNl9CSVRTX1BPRFhUQUxMCShMSU5FNl9CSVRfUE9EWFQgfCBcCisJCQkJIExJTkU2X0JJVF9QT0RYVExJVkUgfCBcCisJCQkJIExJTkU2X0JJVF9QT0RYVFBSTykKKyNkZWZpbmUgTElORTZfQklUU19CQVNTUE9EWFRBTEwJKExJTkU2X0JJVF9CQVNTUE9EWFQgfCBcCisJCQkJIExJTkU2X0JJVF9CQVNTUE9EWFRMSVZFIHwgXAorCQkJCSBMSU5FNl9CSVRfQkFTU1BPRFhUUFJPKQorCisvKiBkZXZpY2Ugc3VwcG9ydHMgc2V0dGluZ3MgcGFyYW1ldGVyIHZpYSBVU0IgKi8KKyNkZWZpbmUgTElORTZfQklUX0NPTlRST0wJKDEgPDwgMCkKKy8qIGRldmljZSBzdXBwb3J0cyBQQ00gaW5wdXQvb3V0cHV0IHZpYSBVU0IgKi8KKyNkZWZpbmUgTElORTZfQklUX1BDTQkJKDEgPDwgMSkKKyNkZWZpbmUgTElORTZfQklUX0NPTlRST0xfUENNCShMSU5FNl9CSVRfQ09OVFJPTCB8IExJTkU2X0JJVF9QQ00pCisKKyNkZWZpbmUgTElORTZfRkFMTEJBQ0tfSU5URVJWQUwJCTEwCisjZGVmaW5lIExJTkU2X0ZBTExCQUNLX01BWFBBQ0tFVFNJWkUJMTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkOTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYwpAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInZhcmlheC5oIgorCisKKyNkZWZpbmUgVkFSSUFYX1NZU0VYX0NPREUgNworI2RlZmluZSBWQVJJQVhfU1lTRVhfUEFSQU0gMHgzYgorI2RlZmluZSBWQVJJQVhfU1lTRVhfQUNUSVZBVEUgMHgyYQorI2RlZmluZSBWQVJJQVhfTU9ERUxfSEVBREVSX0xFTkdUSCA3CisjZGVmaW5lIFZBUklBWF9NT0RFTF9NRVNTQUdFX0xFTkdUSCAxOTkKKyNkZWZpbmUgVkFSSUFYX09GRlNFVF9BQ1RJVkFURSA3CisKKworc3RhdGljIGNvbnN0IGNoYXIgdmFyaWF4X2FjdGl2YXRlW10gPSB7CisJMHhmMCwgMHgwMCwgMHgwMSwgMHgwYywgMHgwNywgMHgwMCwgMHgyYSwgMHgwMSwKKwkweGY3Cit9Oworc3RhdGljIGNvbnN0IGNoYXIgdmFyaWF4X3JlcXVlc3RfYmFua1tdID0geworCTB4ZjAsIDB4MDAsIDB4MDEsIDB4MGMsIDB4MDcsIDB4MDAsIDB4NmQsIDB4ZjcKK307CitzdGF0aWMgY29uc3QgY2hhciB2YXJpYXhfcmVxdWVzdF9tb2RlbDFbXSA9IHsKKwkweGYwLCAweDAwLCAweDAxLCAweDBjLCAweDA3LCAweDAwLCAweDNjLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDUsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNworfTsKK3N0YXRpYyBjb25zdCBjaGFyIHZhcmlheF9yZXF1ZXN0X21vZGVsMltdID0geworCTB4ZjAsIDB4MDAsIDB4MDEsIDB4MGMsIDB4MDcsIDB4MDAsIDB4M2MsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwNywgMHgwMywKKwkweDAwLCAweDAwLCAweDAwLCAweGY3Cit9OworCisKKy8qCisJRGVjb2RlIGRhdGEgdHJhbnNtaXR0ZWQgYnkgd29ya2JlbmNoLgorKi8KK3N0YXRpYyB2b2lkIHZhcmlheF9kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqcmF3X2RhdGEsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgIGludCByYXdfc2l6ZSkKK3sKKwlmb3IgKDsgcmF3X3NpemUgPiAwOyByYXdfc2l6ZSAtPSA2KSB7CisJCWRhdGFbMl0gPSByYXdfZGF0YVswXSB8IChyYXdfZGF0YVsxXSA8PCA0KTsKKwkJZGF0YVsxXSA9IHJhd19kYXRhWzJdIHwgKHJhd19kYXRhWzNdIDw8IDQpOworCQlkYXRhWzBdID0gcmF3X2RhdGFbNF0gfCAocmF3X2RhdGFbNV0gPDwgNCk7CisJCXJhd19kYXRhICs9IDY7CisJCWRhdGEgKz0gMzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZhcmlheF9hY3RpdmF0ZV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSAoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilhcmc7CisJdmFyaWF4LT5idWZmZXJfYWN0aXZhdGVbVkFSSUFYX09GRlNFVF9BQ1RJVkFURV0gPSAxOworCWxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoJnZhcmlheC0+bGluZTYsIHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlLAorCQkJCSAgICAgc2l6ZW9mKHZhcmlheF9hY3RpdmF0ZSkpOworfQorCisvKgorCVNlbmQgYW4gYXN5bmNocm9ub3VzIGFjdGl2YXRpb24gcmVxdWVzdCBhZnRlciBhIGdpdmVuIGludGVydmFsLgorKi8KK3N0YXRpYyB2b2lkIHZhcmlheF9hY3RpdmF0ZV9kZWxheWVkKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgsCisJCQkJICAgIGludCBzZWNvbmRzKQoreworCXZhcmlheC0+YWN0aXZhdGVfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBzZWNvbmRzICogSFo7CisJdmFyaWF4LT5hY3RpdmF0ZV90aW1lci5mdW5jdGlvbiA9IHZhcmlheF9hY3RpdmF0ZV90aW1lb3V0OworCXZhcmlheC0+YWN0aXZhdGVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXZhcmlheDsKKwlhZGRfdGltZXIoJnZhcmlheC0+YWN0aXZhdGVfdGltZXIpOworfQorCitzdGF0aWMgdm9pZCB2YXJpYXhfc3RhcnR1cF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSAoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilhcmc7CisKKwlpZiAodmFyaWF4LT5kdW1wcmVxLm9rKQorCQlyZXR1cm47CisKKwlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnZhcmlheC0+ZHVtcHJlcSwgJnZhcmlheC0+bGluZTYsIDApOworCWxpbmU2X3N0YXJ0dXBfZGVsYXllZCgmdmFyaWF4LT5kdW1wcmVxLCAxLCB2YXJpYXhfc3RhcnR1cF90aW1lb3V0LAorCQkJICAgICAgdmFyaWF4KTsKK30KKworLyoKKwlQcm9jZXNzIGEgY29tcGxldGVseSByZWNlaXZlZCBtZXNzYWdlLgorKi8KK3ZvaWQgdmFyaWF4X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHZhcmlheC0+bGluZTYuYnVmZmVyX21lc3NhZ2U7CisKKwlzd2l0Y2ggKGJ1ZlswXSkgeworCWNhc2UgTElORTZfUEFSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOgorCQlzd2l0Y2ggKGJ1ZlsxXSkgeworCQljYXNlIFZBUklBWE1JRElfdm9sdW1lOgorCQkJdmFyaWF4LT52b2x1bWUgPSBidWZbMl07CisJCQlicmVhazsKKworCQljYXNlIFZBUklBWE1JRElfdG9uZToKKwkJCXZhcmlheC0+dG9uZSA9IGJ1ZlsyXTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfREVWSUNFOgorCWNhc2UgTElORTZfUFJPR1JBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1Q6CisJCXZhcmlheC0+bW9kZWwgPSBidWZbMV07CisJCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmdmFyaWF4LT5kdW1wcmVxLCAmdmFyaWF4LT5saW5lNiwgMCk7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9SRVNFVDoKKwkJZGV2X2luZm8odmFyaWF4LT5saW5lNi5pZmNkZXYsICJWQVJJQVggcmVzZXRcbiIpOworCQl2YXJpYXhfYWN0aXZhdGVfZGVsYXllZCh2YXJpYXgsIFZBUklBWF9BQ1RJVkFURV9ERUxBWSk7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9TWVNFWF9CRUdJTjoKKwkJaWYgKG1lbWNtcChidWYgKyAxLCB2YXJpYXhfcmVxdWVzdF9tb2RlbDEgKyAxLAorCQkJICAgVkFSSUFYX01PREVMX0hFQURFUl9MRU5HVEggLSAxKSA9PSAwKSB7CisJCQlpZiAodmFyaWF4LT5saW5lNi5tZXNzYWdlX2xlbmd0aCA9PQorCQkJICAgIFZBUklBWF9NT0RFTF9NRVNTQUdFX0xFTkdUSCkgeworCQkJCXN3aXRjaCAodmFyaWF4LT5kdW1wcmVxLmluX3Byb2dyZXNzKSB7CisJCQkJY2FzZSBWQVJJQVhfRFVNUF9QQVNTMToKKwkJCQkJdmFyaWF4X2RlY29kZShidWYgKyBWQVJJQVhfTU9ERUxfSEVBREVSX0xFTkdUSCwgKHVuc2lnbmVkIGNoYXIgKikmdmFyaWF4LT5tb2RlbF9kYXRhLAorCQkJCQkJCQkJCQkJKHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEubmFtZSkgKyBzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wpIC8gMikgKiAyKTsKKwkJCQkJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZ2YXJpYXgtPmR1bXByZXEsICZ2YXJpYXgtPmxpbmU2LCAxKTsKKwkJCQkJbGluZTZfZHVtcF9zdGFydGVkKCZ2YXJpYXgtPmR1bXByZXEsIFZBUklBWF9EVU1QX1BBU1MyKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZBUklBWF9EVU1QX1BBU1MyOgorCQkJCQkvKiBtb2RlbCBuYW1lIGlzIHRyYW5zbWl0dGVkIHR3aWNlLCBzbyBza2lwIGl0IGhlcmU6ICovCisJCQkJCXZhcmlheF9kZWNvZGUoYnVmICsgVkFSSUFYX01PREVMX0hFQURFUl9MRU5HVEgsCisJCQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSZ2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCArIHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCkgLyAyLAorCQkJCQkJICAgICAgc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sKSAvIDIgKiAyKTsKKwkJCQkJdmFyaWF4LT5kdW1wcmVxLm9rID0gMTsKKwkJCQkJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZ2YXJpYXgtPmR1bXByZXEsICZ2YXJpYXgtPmxpbmU2LCAyKTsKKwkJCQkJbGluZTZfZHVtcF9zdGFydGVkKCZ2YXJpYXgtPmR1bXByZXEsIFZBUklBWF9EVU1QX1BBU1MzKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIodmFyaWF4LT5saW5lNi5pZmNkZXYsICJpbGxlZ2FsIGxlbmd0aCAlZCBvZiBtb2RlbCBkYXRhXG4iLCB2YXJpYXgtPmxpbmU2Lm1lc3NhZ2VfbGVuZ3RoKSk7CisJCQkJbGluZTZfZHVtcF9maW5pc2hlZCgmdmFyaWF4LT5kdW1wcmVxKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChtZW1jbXAoYnVmICsgMSwgdmFyaWF4X3JlcXVlc3RfYmFuayArIDEsCisJCQkJc2l6ZW9mKHZhcmlheF9yZXF1ZXN0X2JhbmspIC0gMikgPT0gMCkgeworCQkJbWVtY3B5KHZhcmlheC0+YmFuaywKKwkJCSAgICAgICBidWYgKyBzaXplb2YodmFyaWF4X3JlcXVlc3RfYmFuaykgLSAxLAorCQkJICAgICAgIHNpemVvZih2YXJpYXgtPmJhbmspKTsKKwkJCXZhcmlheC0+ZHVtcHJlcS5vayA9IDE7CisJCQlsaW5lNl9kdW1wX2ZpbmlzaGVkKCZ2YXJpYXgtPmR1bXByZXEpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1NZU0VYX0VORDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHZhcmlheC0+bGluZTYuaWZjZGV2LCAiVmFyaWF4OiB1bmtub3duIG1lc3NhZ2UgJTAyWFxuIiwgYnVmWzBdKSk7CisJfQorfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJ2b2x1bWUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X3ZvbHVtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFyaWF4LT52b2x1bWUpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAidm9sdW1lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X3NldF92b2x1bWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKworCWlmIChsaW5lNl90cmFuc21pdF9wYXJhbWV0ZXIoJnZhcmlheC0+bGluZTYsIFZBUklBWE1JRElfdm9sdW1lLAorCQkJCSAgICAgdmFsdWUpID09IDApCisJCXZhcmlheC0+dm9sdW1lID0gdmFsdWU7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm1vZGVsIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9tb2RlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YXJpYXgtPm1vZGVsKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gIm1vZGVsIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X3NldF9tb2RlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKworCWlmIChsaW5lNl9zZW5kX3Byb2dyYW0oJnZhcmlheC0+bGluZTYsIHZhbHVlKSA9PSAwKQorCQl2YXJpYXgtPm1vZGVsID0gdmFsdWU7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImFjdGl2ZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZVtWQVJJQVhfT0ZGU0VUX0FDVElWQVRFXSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJhY3RpdmUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfc2V0X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApID8gMSA6IDA7CisJdmFyaWF4LT5idWZmZXJfYWN0aXZhdGVbVkFSSUFYX09GRlNFVF9BQ1RJVkFURV0gPSB2YWx1ZTsKKwlsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKCZ2YXJpYXgtPmxpbmU2LCB2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZSwKKwkJCQkgICAgIHNpemVvZih2YXJpYXhfYWN0aXZhdGUpKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gInRvbmUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X3RvbmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFyaWF4LT50b25lKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInRvbmUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfc2V0X3RvbmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisKKwlpZiAobGluZTZfdHJhbnNtaXRfcGFyYW1ldGVyKCZ2YXJpYXgtPmxpbmU2LCBWQVJJQVhNSURJX3RvbmUsCisJCQkJICAgICB2YWx1ZSkgPT0gMCkKKwkJdmFyaWF4LT50b25lID0gdmFsdWU7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdldF9zdHJpbmcoY2hhciAqYnVmLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCW1lbWNweShidWYsIGRhdGEsIGxlbmd0aCk7CisKKwlmb3IgKGkgPSBsZW5ndGg7IGktLTspIHsKKwkJY2hhciBjID0gYnVmW2ldOworCisJCWlmICgoYyAhPSAwKSAmJiAoYyAhPSAnICcpKQorCQkJYnJlYWs7CisJfQorCisJYnVmW2kgKyAxXSA9ICdcbic7CisJcmV0dXJuIGkgKyAyOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJuYW1lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJbGluZTZfd2FpdF9kdW1wKCZ2YXJpYXgtPmR1bXByZXEsIDApOworCXJldHVybiBnZXRfc3RyaW5nKGJ1ZiwgdmFyaWF4LT5tb2RlbF9kYXRhLm5hbWUsCisJCQkgIHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEubmFtZSkpOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJiYW5rIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9iYW5rKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJbGluZTZfd2FpdF9kdW1wKCZ2YXJpYXgtPmR1bXByZXEsIDApOworCXJldHVybiBnZXRfc3RyaW5nKGJ1ZiwgdmFyaWF4LT5iYW5rLCBzaXplb2YodmFyaWF4LT5iYW5rKSk7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImR1bXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X2R1bXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmdmFyaWF4LT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1jcHkoYnVmLCAmdmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wsCisJICAgICAgIHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCkpOworCXJldHVybiBzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wpOworfQorCisjaWYgQ1JFQVRFX1JBV19GSUxFCisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJyYXciIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfc2V0X3JhdzIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHNpemU7CisJaW50IGk7CisJY2hhciAqc3lzZXg7CisKKwljb3VudCAtPSBjb3VudCAlIDM7CisJc2l6ZSA9IGNvdW50ICogMjsKKwlzeXNleCA9IHZhcmlheF9hbGxvY19zeXNleF9idWZmZXIodmFyaWF4LCBWQVJJQVhfU1lTRVhfUEFSQU0sIHNpemUpOworCisJaWYgKCFzeXNleCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMykgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IGJ1ZiArIGk7CisJCWNoYXIgKnAyID0gc3lzZXggKyBTWVNFWF9EQVRBX09GUyArIGkgKiAyOworCQlwMlswXSA9IHAxWzJdICYgMHgwZjsKKwkJcDJbMV0gPSBwMVsyXSA+PiA0OworCQlwMlsyXSA9IHAxWzFdICYgMHgwZjsKKwkJcDJbM10gPSBwMVsxXSA+PiA0OworCQlwMls0XSA9IHAxWzBdICYgMHgwZjsKKwkJcDJbNV0gPSBwMVswXSA+PiA0OworCX0KKworCWxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmdmFyaWF4LT5saW5lNiwgc3lzZXgsIHNpemUpOworCWtmcmVlKHN5c2V4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKyNlbmRpZgorCisvKiBWYXJpYXggd29ya2JlbmNoIHNwZWNpYWwgZmlsZXM6ICovCitzdGF0aWMgREVWSUNFX0FUVFIobW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21vZGVsLCB2YXJpYXhfc2V0X21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2x1bWUsIFNfSVdVR08gfCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3ZvbHVtZSwgdmFyaWF4X3NldF92b2x1bWUpOworc3RhdGljIERFVklDRV9BVFRSKHRvbmUsIFNfSVdVR08gfCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3RvbmUsIHZhcmlheF9zZXRfdG9uZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgdmFyaWF4X2dldF9uYW1lLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmssIFNfSVJVR08sIHZhcmlheF9nZXRfYmFuaywgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkdW1wLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2R1bXAsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWN0aXZlLCBTX0lXVUdPIHwgU19JUlVHTywgdmFyaWF4X2dldF9hY3RpdmUsIHZhcmlheF9zZXRfYWN0aXZlKTsKKworI2lmIENSRUFURV9SQVdfRklMRQorc3RhdGljIERFVklDRV9BVFRSKHJhdywgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIGxpbmU2X3NldF9yYXcpOworc3RhdGljIERFVklDRV9BVFRSKHJhdzIsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCB2YXJpYXhfc2V0X3JhdzIpOworI2VuZGlmCisKKworLyoKKwlWYXJpYXggZGVzdHJ1Y3Rvci4KKyovCitzdGF0aWMgdm9pZCB2YXJpYXhfZGVzdHJ1Y3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJaWYgKHZhcmlheCA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTYgPSAmdmFyaWF4LT5saW5lNjsKKwlpZiAobGluZTYgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2X2NsZWFudXBfYXVkaW8obGluZTYpOworCisJLyogZnJlZSBkdW1wIHJlcXVlc3QgZGF0YTogKi8KKwlsaW5lNl9kdW1wcmVxX2Rlc3RydWN0YnVmKCZ2YXJpYXgtPmR1bXByZXEsIDIpOworCWxpbmU2X2R1bXByZXFfZGVzdHJ1Y3RidWYoJnZhcmlheC0+ZHVtcHJlcSwgMSk7CisJbGluZTZfZHVtcHJlcV9kZXN0cnVjdCgmdmFyaWF4LT5kdW1wcmVxKTsKKworCWtmcmVlKHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlKTsKKwlkZWxfdGltZXJfc3luYygmdmFyaWF4LT5hY3RpdmF0ZV90aW1lcik7Cit9CisKKy8qCisJQ3JlYXRlIHN5c2ZzIGVudHJpZXMuCisqLworc3RhdGljIGludCB2YXJpYXhfY3JlYXRlX2ZpbGVzMihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RvbmUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmspKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2R1bXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FjdGl2ZSkpOworI2lmIENSRUFURV9SQVdfRklMRQorCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmF3KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yYXcyKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoKKwkgSW5pdCB3b3JrYmVuY2ggZGV2aWNlLgorKi8KK2ludCB2YXJpYXhfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4KQoreworCWludCBlcnI7CisKKwlpZiAoKGludGVyZmFjZSA9PSBOVUxMKSB8fCAodmFyaWF4ID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluaXRpYWxpemUgVVNCIGJ1ZmZlcnM6ICovCisJZXJyID0gbGluZTZfZHVtcHJlcV9pbml0KCZ2YXJpYXgtPmR1bXByZXEsIHZhcmlheF9yZXF1ZXN0X21vZGVsMSwKKwkJCQkgc2l6ZW9mKHZhcmlheF9yZXF1ZXN0X21vZGVsMSkpOworCisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gbGluZTZfZHVtcHJlcV9pbml0YnVmKCZ2YXJpYXgtPmR1bXByZXEsIHZhcmlheF9yZXF1ZXN0X21vZGVsMiwKKwkJCQkgICAgc2l6ZW9mKHZhcmlheF9yZXF1ZXN0X21vZGVsMiksIDEpOworCisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gbGluZTZfZHVtcHJlcV9pbml0YnVmKCZ2YXJpYXgtPmR1bXByZXEsIHZhcmlheF9yZXF1ZXN0X2JhbmssCisJCQkJICAgIHNpemVvZih2YXJpYXhfcmVxdWVzdF9iYW5rKSwgMik7CisKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHZhcmlheF9hY3RpdmF0ZSksIEdGUF9LRVJORUwpOworCisJaWYgKHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweSh2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZSwgdmFyaWF4X2FjdGl2YXRlLAorCSAgICAgICBzaXplb2YodmFyaWF4X2FjdGl2YXRlKSk7CisJaW5pdF90aW1lcigmdmFyaWF4LT5hY3RpdmF0ZV90aW1lcik7CisKKwkvKiBjcmVhdGUgc3lzZnMgZW50cmllczogKi8KKwllcnIgPSB2YXJpYXhfY3JlYXRlX2ZpbGVzKDAsIDAsICZpbnRlcmZhY2UtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdmFyaWF4X2NyZWF0ZV9maWxlczIoJmludGVyZmFjZS0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBpbml0aWFsaXplIGF1ZGlvIHN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X2F1ZGlvKCZ2YXJpYXgtPmxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBpbml0aWFsaXplIE1JREkgc3Vic3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfbWlkaSgmdmFyaWF4LT5saW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogcmVnaXN0ZXIgYXVkaW8gc3lzdGVtOiAqLworCWVyciA9IGxpbmU2X3JlZ2lzdGVyX2F1ZGlvKCZ2YXJpYXgtPmxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2YXJpYXhfYWN0aXZhdGVfZGVsYXllZCh2YXJpYXgsIFZBUklBWF9BQ1RJVkFURV9ERUxBWSk7CisJbGluZTZfc3RhcnR1cF9kZWxheWVkKCZ2YXJpYXgtPmR1bXByZXEsIFZBUklBWF9TVEFSVFVQX0RFTEFZLAorCQkJICAgICAgdmFyaWF4X3N0YXJ0dXBfdGltZW91dCwgdmFyaWF4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlXb3JrYmVuY2ggZGV2aWNlIGRpc2Nvbm5lY3RlZC4KKyovCit2b2lkIHZhcmlheF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWYgKGludGVyZmFjZSA9PSBOVUxMKQorCQlyZXR1cm47CisJZGV2ID0gJmludGVyZmFjZS0+ZGV2OworCisJaWYgKGRldiAhPSBOVUxMKSB7CisJCS8qIHJlbW92ZSBzeXNmcyBlbnRyaWVzOiAqLworCQl2YXJpYXhfcmVtb3ZlX2ZpbGVzKDAsIDAsIGRldik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlbCk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdG9uZSk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmspOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHVtcCk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9hY3RpdmUpOworI2lmIENSRUFURV9SQVdfRklMRQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmF3KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JhdzIpOworI2VuZGlmCisJfQorCisJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzMzBiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgVkFSSUFYX0gKKyNkZWZpbmUgVkFSSUFYX0gKKworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKworI2luY2x1ZGUgImR1bXByZXF1ZXN0LmgiCisKKworI2RlZmluZSBWQVJJQVhfQUNUSVZBVEVfREVMQVkgMTAKKyNkZWZpbmUgVkFSSUFYX1NUQVJUVVBfREVMQVkgMworCisKK2VudW0geworCVZBUklBWF9EVU1QX1BBU1MxID0gTElORTZfRFVNUF9DVVJSRU5ULAorCVZBUklBWF9EVU1QX1BBU1MyLAorCVZBUklBWF9EVU1QX1BBU1MzCit9OworCisKKy8qKgorCSBCaW5hcnkgVmFyaWF4IG1vZGVsIGR1bXAKKyovCitzdHJ1Y3QgdmFyaWF4X21vZGVsIHsKKwkvKioKKwkJIEhlYWRlciBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIHByb2dyYW0gbmFtZSkuCisJKi8KKwl1bnNpZ25lZCBjaGFyIG5hbWVbMThdOworCisJLyoqCisJCSBNb2RlbCBwYXJhbWV0ZXJzLgorCSovCisJdW5zaWduZWQgY2hhciBjb250cm9sWzc4ICogMl07Cit9OworCitzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCB7CisJLyoqCisJCSBHZW5lcmljIExpbmU2IFVTQiBkYXRhLgorCSovCisJc3RydWN0IHVzYl9saW5lNiBsaW5lNjsKKworCS8qKgorCQkgRHVtcCByZXF1ZXN0IHN0cnVjdHVyZS4KKwkJIEFwcGVuZCB0d28gZXh0cmEgYnVmZmVycyBmb3IgMy1wYXNzIGRhdGEgcXVlcnkuCisJKi8KKwlzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0IGR1bXByZXE7IHN0cnVjdCBsaW5lNl9kdW1wX3JlcWJ1ZiBleHRyYWJ1ZlsyXTsKKworCS8qKgorCQkgQnVmZmVyIGZvciBhY3RpdmF0aW9uIGNvZGUuCisJKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXJfYWN0aXZhdGU7CisKKwkvKioKKwkJIE1vZGVsIG51bWJlci4KKwkqLworCWludCBtb2RlbDsKKworCS8qKgorCQkgQ3VycmVudCBtb2RlbCBzZXR0aW5ncy4KKwkqLworCXN0cnVjdCB2YXJpYXhfbW9kZWwgbW9kZWxfZGF0YTsKKworCS8qKgorCQkgTmFtZSBvZiBjdXJyZW50IG1vZGVsIGJhbmsuCisJKi8KKwl1bnNpZ25lZCBjaGFyIGJhbmtbMThdOworCisJLyoqCisJCSBQb3NpdGlvbiBvZiB2b2x1bWUgZGlhbC4KKwkqLworCWludCB2b2x1bWU7CisKKwkvKioKKwkJIFBvc2l0aW9uIG9mIHRvbmUgY29udHJvbCBkaWFsLgorCSovCisJaW50IHRvbmU7CisKKwkvKioKKwkJIFRpbWVyIGZvciBkZWxheWVkIGFjdGl2YXRpb24gcmVxdWVzdC4KKwkqLworCXN0cnVjdCB0aW1lcl9saXN0IGFjdGl2YXRlX3RpbWVyOworfTsKKworCitleHRlcm4gdm9pZCB2YXJpYXhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK2V4dGVybiBpbnQgdmFyaWF4X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgpOworZXh0ZXJuIHZvaWQgdmFyaWF4X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCmluZGV4IGUxYzRhODAuLjAxMDE3YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYwpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogLyogSW5jbHVkZS1GaWxlIGZvciB0aGUgTWVpbGhhdXMgTUUtNDAwMCBJL08gYm9hcmQgKi8KQEAgLTI0NiwxNyArMjQ2LDE3IEBACiAgIElubGluZSBmdW5jdGlvbnMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX2J1Zl9jb3VudChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBtZTQwMDBfYnVmX2NvdW50KHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKIHsKLQlyZXR1cm4gKChidWYuaGVhZCAtIGJ1Zi50YWlsKSAmIChzaXplIC0gMSkpOworCXJldHVybiAoYnVmLmhlYWQgLSBidWYudGFpbCkgJiAoc2l6ZSAtIDEpOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZTQwMDBfYnVmX3NwYWNlKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IG1lNDAwMF9idWZfc3BhY2Uoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQogewotCXJldHVybiAoKGJ1Zi50YWlsIC0gKGJ1Zi5oZWFkICsgMSkpICYgKHNpemUgLSAxKSk7CisJcmV0dXJuIChidWYudGFpbCAtIChidWYuaGVhZCArIDEpKSAmIChzaXplIC0gMSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF92YWx1ZXNfdG9fZW5kKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IG1lNDAwMF92YWx1ZXNfdG9fZW5kKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKIHsKIAlpbnQgZW5kOwogCWludCBuOwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJcmV0dXJuIChuIDwgZW5kKSA/IG4gOiBlbmQ7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF9zcGFjZV90b19lbmQoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgbWU0MDAwX3NwYWNlX3RvX2VuZChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCiB7CiAJaW50IGVuZDsKIAlpbnQgbjsKQEAgLTI3NSwxOSArMjc1LDE5IEBACiAJcmV0dXJuIChuIDw9IGVuZCkgPyBuIDogKGVuZCArIDEpOwogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgbWU0MDAwX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIG1lNDAwMF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAlQT1JUX1BERUJVRygiLS0+IDB4JTAyWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKIAlvdXRiKHZhbHVlLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgaW5saW5lIG1lNDAwMF9vdXRsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZTQwMDBfb3V0bCh1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJUE9SVF9QREVCVUcoIi0tPiAweCUwOGxYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOwogCW91dGwodmFsdWUsIHBvcnQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbmxpbmUgbWU0MDAwX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWU0MDAwX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl2YWx1ZSA9IGlubChwb3J0KTsKQEAgLTI5NSw3ICsyOTUsNyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5saW5lIG1lNDAwMF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG1lNDAwMF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgdmFsdWU7CiAJdmFsdWUgPSBpbmIocG9ydCk7CkBAIC0zMDksNyArMzA5LDcgQEAKIAkucHJvYmUgPSBtZTQwMDBfcHJvYmUKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX3NpbmcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19zaW5nID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAud3JpdGUgPSBtZTQwMDBfYW9fd3JpdGVfc2luZywKICAgICAgIC5pb2N0bCA9IG1lNDAwMF9hb19pb2N0bF9zaW5nLApAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfd3JhcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX3dyYXAgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC53cml0ZSA9IG1lNDAwMF9hb193cml0ZV93cmFwLAogICAgICAgLmlvY3RsID0gbWU0MDAwX2FvX2lvY3RsX3dyYXAsCkBAIC0zMjUsNyArMzI1LDcgQEAKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19jb250ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfY29udCA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLndyaXRlID0gbWU0MDAwX2FvX3dyaXRlX2NvbnQsCiAgICAgICAucG9sbCA9IG1lNDAwMF9hb19wb2xsX2NvbnQsCkBAIC0zMzUsMTQgKzMzNSwxNCBAQAogICAgICAgLmZzeW5jID0gbWU0MDAwX2FvX2ZzeW5jX2NvbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19zaW5nID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfc2luZyA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLmlvY3RsID0gbWU0MDAwX2FpX2lvY3RsX3NpbmcsCiAgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfc3cgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X3N3ID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAucmVhZCA9IG1lNDAwMF9haV9yZWFkLAogICAgICAgLnBvbGwgPSBtZTQwMDBfYWlfcG9sbCwKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgICAgLmZhc3luYyA9IG1lNDAwMF9haV9mYXN5bmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldCA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLnJlYWQgPSBtZTQwMDBfYWlfcmVhZCwKICAgICAgIC5wb2xsID0gbWU0MDAwX2FpX3BvbGwsCkBAIC0zNjEsNyArMzYxLDcgQEAKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0X3ZhbHVlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF92YWx1ZSA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLnJlYWQgPSBtZTQwMDBfYWlfcmVhZCwKICAgICAgIC5wb2xsID0gbWU0MDAwX2FpX3BvbGwsCkBAIC0zNzAsNyArMzcwLDcgQEAKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLnJlYWQgPSBtZTQwMDBfYWlfcmVhZCwKICAgICAgIC5wb2xsID0gbWU0MDAwX2FpX3BvbGwsCkBAIC0zNzksMjEgKzM3OSwyMSBAQAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9kaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9kaW9fZm9wcyA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLmlvY3RsID0gbWU0MDAwX2Rpb19pb2N0bCwKICAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2NudF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2NudF9mb3BzID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAuaW9jdGwgPSBtZTQwMDBfY250X2lvY3RsLAogICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZXh0X2ludF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2V4dF9pbnRfZm9wcyA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLmlvY3RsID0gbWU0MDAwX2V4dF9pbnRfaW9jdGwsCiAgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLApAQCAtNDAxLDE4ICs0MDEsMjYgQEAKICAgICAgIC5mYXN5bmMgPSBtZTQwMDBfZXh0X2ludF9mYXN5bmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FvX2ZvcHNfYXJyYXlbXSA9IHsKLQkmbWU0MDAwX2FvX2ZvcHNfc2luZywJLy8gc2luZ2xlIG9wZXJhdGlvbnMKLQkmbWU0MDAwX2FvX2ZvcHNfd3JhcCwJLy8gd3JhcGFyb3VuZCBvcGVyYXRpb25zCi0JJm1lNDAwMF9hb19mb3BzX2NvbnQsCS8vIGNvbnRpbm91cyBvcGVyYXRpb25zCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FvX2ZvcHNfYXJyYXlbXSA9IHsKKwkvKiBzaW5nbGUgb3BlcmF0aW9ucyAqLworCSZtZTQwMDBfYW9fZm9wc19zaW5nLAorCS8qIHdyYXBhcm91bmQgb3BlcmF0aW9ucyAqLworCSZtZTQwMDBfYW9fZm9wc193cmFwLAorCS8qIGNvbnRpbnVvdXMgb3BlcmF0aW9ucyAqLworCSZtZTQwMDBfYW9fZm9wc19jb250LAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm1lNDAwMF9haV9mb3BzX2FycmF5W10gPSB7Ci0JJm1lNDAwMF9haV9mb3BzX3NpbmcsCS8vIHNpbmdsZSBvcGVyYXRpb25zCi0JJm1lNDAwMF9haV9mb3BzX2NvbnRfc3csCS8vIGNvbnRpbnVvdXMgb3BlcmF0aW9ucyB3aXRoIHNvZnR3YXJlIHN0YXJ0Ci0JJm1lNDAwMF9haV9mb3BzX2NvbnRfZXQsCS8vIGNvbnRpbm91cyBvcGVyYXRpb25zIHdpdGggZXh0ZXJuYWwgdHJpZ2dlcgotCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X3ZhbHVlLAkvLyBzYW1wbGUgdmFsdWVzIGJ5IGV4dGVybmFsIHRyaWdnZXIKLQkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCwJLy8gd29yayB0aHJvdWdoIG9uZSBjaGFubmVsIGxpc3QgYnkgZXh0ZXJuYWwgdHJpZ2dlcgorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm1lNDAwMF9haV9mb3BzX2FycmF5W10gPSB7CisJLyogc2luZ2xlIG9wZXJhdGlvbnMgKi8KKwkmbWU0MDAwX2FpX2ZvcHNfc2luZywKKwkvKiBjb250aW51b3VzIG9wZXJhdGlvbnMgd2l0aCBzb2Z0d2FyZSBzdGFydCAqLworCSZtZTQwMDBfYWlfZm9wc19jb250X3N3LAorCS8qIGNvbnRpbnVvdXMgb3BlcmF0aW9ucyB3aXRoIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldCwKKwkvKiBzYW1wbGUgdmFsdWVzIGJ5IGV4dGVybmFsIHRyaWdnZXIgKi8KKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldF92YWx1ZSwKKwkvKiB3b3JrIHRocm91Z2ggb25lIGNoYW5uZWwgbGlzdCBieSBleHRlcm5hbCB0cmlnZ2VyICovCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfY2hhbmxpc3QsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtZTQwMDBfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTU0NiwxNSArNTU0LDEzIEBACiAJCQkJJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCwgbGlzdCkgewogCQkJbWU0MDAwX2FvX3Jlc2V0KGFvX2NvbnRleHQpOwogCQkJZnJlZV9pcnEoYW9fY29udGV4dC0+aXJxLCBhb19jb250ZXh0KTsKLQkJCWlmIChhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpCi0JCQkJa2ZyZWUoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJCWtmcmVlKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CiAJCQlsaXN0X2RlbCgmYW9fY29udGV4dC0+bGlzdCk7CiAJCQlrZnJlZShhb19jb250ZXh0KTsKIAkJfQogCiAJCS8qIENsZWFyIGFuYWxvZyBpbnB1dCBjb250ZXh0ICovCi0JCWlmIChib2FyZF9pbmZvLT5haV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpCi0JCQlrZnJlZShib2FyZF9pbmZvLT5haV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQlrZnJlZShib2FyZF9pbmZvLT5haV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpOwogCQlrZnJlZShib2FyZF9pbmZvLT5haV9jb250ZXh0KTsKIAogCQkvKiBDbGVhciBkaWdpdGFsIEkvTyBjb250ZXh0ICovCkBAIC0xMjYzLDkgKzEyNjksOCBAQAogCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1JFRyk7CiAKIAkvKiBTZXQgZGlnaXRhbCBJL08gZGlyZWN0aW9uIGZvciBwb3J0IDAgdG8gb3V0cHV0IG9uIGlzb2xhdGVkIHZlcnNpb25zICovCi0JaWYgKCEobWU0MDAwX2lubChpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fRElSX1JFRykgJiAweDEpKSB7CisJaWYgKCEobWU0MDAwX2lubChpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fRElSX1JFRykgJiAweDEpKQogCQltZTQwMDBfb3V0bCgweDEsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19DVFJMX1JFRyk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYzLDcgKzE0NjgsNyBAQAogCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgdG8gc2luZ2xlIGZ1bmN0aW9ucyAqLwogCQlmaWxlX3AtPmZfb3AgPSAmbWU0MDAwX2Rpb19mb3BzOwogCi0JCS8vbWU0MDAwX2Rpb19yZXNldChkaW9fY29udGV4dCk7CisJCS8qIG1lNDAwMF9kaW9fcmVzZXQoZGlvX2NvbnRleHQpOyAqLwogCX0KIAkvKiBDb3VudGVycyAqLwogCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8pIHsKQEAgLTIwNTgsNyArMjA2Myw3IEBACiAJCQkJCQlNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKTsKIAogCQkJaWYgKGMgPT0gMCkKLQkJCQlyZXR1cm4gKDIgKiByZXQpOworCQkJCXJldHVybiAyICogcmV0OwogCiAJCQkvKiBPbmx5IGFibGUgdG8gd3JpdGUgc2l6ZSBvZiBmcmVlIGJ1ZmZlciBvciBzaXplIG9mIGNvdW50ICovCiAJCQlpZiAoY291bnQgPCBjKQpAQCAtMjEwNCw5ICsyMTA5LDggQEAKIAkJfQogCX0KIAotCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQlyZXR1cm4gKHJldCA9PSAwKSA/IC1FQUdBSU4gOiAyICogcmV0OwotCX0KIAogCXJldHVybiAyICogcmV0OwogfQpAQCAtMjIwMSw3ICsyMjA1LDcgQEAKIAljYXNlIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfVVBEQVRFOgogCQlyZXR1cm4KIAkJICAgIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKAotCQkgICAgCQkoc3RydWN0IG1lNDAwMF9hb19jaGFubmVsX2xpc3QgKilhcmcsCisJCQkJKHN0cnVjdCBtZTQwMDBfYW9fY2hhbm5lbF9saXN0ICopYXJnLAogCQkJCWFvX2NvbnRleHQpOwogCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfVElNRU9VVDoKIAkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKHVuc2lnbmVkIGxvbmcgKilhcmcsCkBAIC0yMzYxLDcgKzIzNjUsOSBAQAogCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc3RhcnQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOwogCQkJCQlyZXR1cm4gLUVJTlRSOwogCQkJCX0KLQkJCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJLyoga2VybmVsIDIuNiBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGZvciBIWgorCQkJCSAqIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSAqLworCQkJCWlmICgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zdGFydCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CiAJCQkJCXJldHVybiAtRUlPOwpAQCAtMjQwMiw4ICsyNDA4LDggQEAKIAl9CiAKIAkvKiBDbGVhciB0aGUgc3RvcCBiaXQgKi8KLQkvL3RtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX1NUT1A7Ci0JLy9tZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkvKiB0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9TVE9QOyAqLworCS8qIG1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOyAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDM0LDggKzI0NDAsOCBAQAogCX0KIAogCS8qIENsZWFyIHRoZSBzdG9wIGJpdHMgKi8KLQkvL3RtcCAmPSB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKLQkvL21lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCS8qIHRtcCAmPSB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsgKi8KKwkvKiBtZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMjU5OCw4ICsyNjA0LDEwIEBACiAKIAlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7Ci0JdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRGlzYWJsZSBwcmVsb2FkIGJpdAotCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwkvKiBEaXNhYmxlIHByZWxvYWQgYml0ICovCisJdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsKKwkvKiBEaXNhYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQgKi8KKwl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsKIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIApAQCAtMjYxNCw4ICsyNjIyLDEwIEBACiAKIAlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7Ci0JdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBFbmFibGUgcHJlbG9hZCBiaXQKLQl0bXAgfD0gKDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBFbmFibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCS8qIEVuYWJsZSBwcmVsb2FkIGJpdCAqLworCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsKKwkvKiBFbmFibGUgaHcgc2ltdWxhdGVub3VzIGJpdCAqLworCXRtcCB8PSAoMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAKQEAgLTI2MzAsOCArMjY0MCwxMCBAQAogCiAJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwotCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRW5hYmxlIHByZWxvYWQgYml0Ci0JdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCS8qIEVuYWJsZSBwcmVsb2FkIGJpdCAqLworCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsKKwkvKiBFbmFibGUgaHcgc2ltdWxhdGVub3VzIGJpdCAqLworCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCkBAIC0yNjY5LDExICsyNjgxLDExIEBACiAJCQkgICAgKHRtcCAmCiAJCQkgICAgICgweDEgPDwKIAkJCSAgICAgICgoKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKWVudHJ5KS0+aW5kZXgKLQkJCSAgICAgIAkJCQkJICAgICAgKyAxNikpKSkgeworCQkJCQkJCQkgICAgICArIDE2KSkpKSB7CiAJCQkJdG1wICY9CiAJCQkJICAgIH4oMHgxIDw8CiAJCQkJICAgICAgKCgoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICopZW50cnkpLT4KLQkJCQkgICAgICAJCQkJCWluZGV4KSk7CisJCQkJCQkJCQlpbmRleCkpOwogCQkJfQogCQl9CiAJfQpAQCAtMjczMiw4ICsyNzQ0LDEwIEBACiAJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpOkludmFsaWQgYm9hcmQgbnVtYmVyIHNwZWNpZmllZFxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQl0bXAgJj0gfigweDEgPDwgY2hhbm5lbHMubGlzdFtpXSk7CS8vIENsZWFyIHRoZSBwcmVsb2FkIGJpdAotCQl0bXAgJj0gfigweDEgPDwgKGNoYW5uZWxzLmxpc3RbaV0gKyAxNikpOwkvLyBDbGVhciB0aGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCQkvKiBDbGVhciB0aGUgcHJlbG9hZCBiaXQgKi8KKwkJdG1wICY9IH4oMHgxIDw8IGNoYW5uZWxzLmxpc3RbaV0pOworCQkvKiBDbGVhciB0aGUgaHcgc2ltdWx0YW5lb3VzIGJpdCAqLworCQl0bXAgJj0gfigweDEgPDwgKGNoYW5uZWxzLmxpc3RbaV0gKyAxNikpOwogCX0KIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKQEAgLTI3NTksOCArMjc3MywxMCBAQAogCiAJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwotCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIERpc2FibGUgc3luY2hyb25vdXMgc3cgYml0Ci0JdG1wIHw9IDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNik7CS8vIEVuYWJsZSBzeW5jaHJvbm91cyBodyBiaXQKKwkvKiBEaXNhYmxlIHN5bmNocm9ub3VzIHN3IGJpdCAqLworCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CisJLyogRW5hYmxlIHN5bmNocm9ub3VzIGh3IGJpdCAqLworCXRtcCB8PSAweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpOwogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCkBAIC0yNzk0LDggKzI4MTAsMTAgQEAKIAogCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIAl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKLQl0bXAgfD0gMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4OwkvLyBFbmFibGUgc3luY2hyb25vdXMgc3cgYml0Ci0JdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgc3luY2hyb25vdXMgaHcgYml0CisJLyogRW5hYmxlIHN5bmNocm9ub3VzIHN3IGJpdCAqLworCXRtcCB8PSAweDEgPDwgYW9fY29udGV4dC0+aW5kZXg7CisJLyogRGlzYWJsZSBzeW5jaHJvbm91cyBodyBiaXQgKi8KKwl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsKIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIApAQCAtMjg2Nyw3ICsyODg1LDkgQEAKIAkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CiAJCQkJCXJldHVybiAtRUlOVFI7CiAJCQkJfQotCQkJCWlmICgoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQkvKiBrZXJuZWwgMi42IGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaCisJCQkJICogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlICovCisJCQkJaWYgKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CiAJCQkJCXJldHVybiAtRUlPOwpAQCAtMzI0Myw3ICszMjYzLDggQEAKIAkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlRSOwogCQkJfQotCQkJaWYgKCgoamlmZmllcyAtIGppZmZ5KSA+IChjbWQudGltZW91dCAqIEhaIC8gVVNFUl9IWikpICYmIGNtZC50aW1lb3V0KSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJLyogMi42IGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSAqLworCQkJaWYgKCgoamlmZmllcyAtIGppZmZ5KSA+IChjbWQudGltZW91dCAqIEhaIC8gVVNFUl9IWikpICYmIGNtZC50aW1lb3V0KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU87CkBAIC0zNjIyLDkgKzM2NDMsOCBAQAogCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOwogCiAJLyogV3JpdGUgdGhlIGNoYW5uZWwgbGlzdCAqLwotCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKQogCQltZTQwMDBfb3V0bChsaXN0W2ldLCBhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfcmVnKTsKLQl9CiAKIAkvKiBTZXR1cCBzYW1wbGUgYW5kIGhvbGQgKi8KIAlpZiAoY21kLnNoKSB7CkBAIC0zNjYzLDggKzM2ODMsNyBAQAogCXRtcCAmPQogCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQpOwogCi0JaWYgKGxpc3QpCi0JCWtmcmVlKGxpc3QpOworCWtmcmVlKGxpc3QpOwogCiAJcmV0dXJuIGVycjsKIApAQCAtMzc3NCwyNSArMzc5MywyMiBAQAogCiAJaWYgKHRpbWVvdXQpIHsKIAkJcmVmID0gamlmZmllczsKLQkJd2hpbGUgKCEKLQkJICAgICAgIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKQotCQl7CisJCXdoaWxlICghKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpIHsKIAkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlRSOwogCQkJfQotCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJLyogMi42IGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSAqLworCQkJaWYgKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdGFydF9leCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQl3aGlsZSAoIQotCQkgICAgICAgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpCi0JCXsKKwkJd2hpbGUgKCEoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkgewogCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKQEAgLTQxMTMsOSArNDEyOSw4IEBACiAJCXJldHVybiAtRVBJUEU7CiAJfQogCi0JaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCXJldHVybiAoayA9PSAwKSA/IC1FQUdBSU4gOiAyICogcmV0OwotCX0KIAogCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcmVhZCgpIGlzIGxlYXZlZFxuIik7CiAJcmV0dXJuIHJldCAqIDI7CkBAIC00MjU0LDExICs0MjY5LDEwIEBACiAJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpIHsKKwkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpCiAJCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7Ci0JCX0KIAogCQkvKiBXcml0ZSB0byBFRVBST00gKi8KIAkJbWU0MDAwX291dGwodmFsdWUsCkBAIC00MzE0LDExICs0MzI4LDExIEBACiAKIAkvKiBXcml0ZSB0aGUgcmVhZCBjb21tYW5kIHRvIHRoZSBlZXByb20gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpIHsKKwkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpCiAJCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7Ci0JCX0KKwogCQltZTQwMDBfb3V0bCh2YWx1ZSwKIAkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOwogCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKQEAgLTU0NDAsOCArNTQ1NCw2IEBACiAJaW50IGk7CiAJaW50IGMgPSAwOwogCWludCBjMSA9IDA7Ci0JLy91bnNpZ25lZCBsb25nIGJlZm9yZTsKLQkvL3Vuc2lnbmVkIGxvbmcgYWZ0ZXI7CiAKIAlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCkgaXMgZXhlY3V0ZWRcbiIpOwogCkBAIC01NDkzLDcgKzU1MDUsNiBAQAogCQkJICAgICgibWU0MDAwX2FvX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZW1wdHlcbiIpOwogCQkJYnJlYWs7CiAJCX0KLQkJLy9yZHRzY2woYmVmb3JlKTsKIAkJaWYgKCgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDFfRklGT19SRUcpIHx8CiAJCSAgICAoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAzX0ZJRk9fUkVHKSkgewogCQkJZm9yIChpID0gMDsgaSA8IGMxOyBpKyspIHsKQEAgLTU1MDksOCArNTUyMCw2IEBACiAJCQkgICAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgKwogCQkJICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCwgYzEpOwogCi0JCS8vcmR0c2NsKGFmdGVyKTsKLQkJLy9wcmludGsoS0VSTl9FUlIiTUU0MDAwOm1lNDAwMF9hb19pc3IoKTpUaW1lIGxhcHNlID0gJWx1XG4iLCBhZnRlciAtIGJlZm9yZSk7CiAKIAkJYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCA9CiAJCSAgICAoYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCArIGMxKSAmIChNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIC0KQEAgLTU1NDIsOCArNTU1MSwxMCBAQAogCS8qIElmIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCwgZmxvdyB3YXMgaW50ZXJydXB0ZWQgKi8KIAlpZiAoIShtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgewogCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfYW9faXNyKCk6QnJva2VuIHBpcGVcbiIpOwotCQlhb19jb250ZXh0LT5waXBlX2ZsYWcgPSAxOwkvLyBTZXQgZmxhZyBpbiBvcmRlciB0byBpbmZvcm0gd3JpdGUgcm91dGluZQotCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROwkvLyBEaXNhYmxlIGludGVycnVwdAorCQkvKiBTZXQgZmxhZyBpbiBvcmRlciB0byBpbmZvcm0gd3JpdGUgcm91dGluZSAqLworCQlhb19jb250ZXh0LT5waXBlX2ZsYWcgPSAxOworCQkvKiBEaXNhYmxlIGludGVycnVwdCAqLworCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROwogCX0KIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGV2aWNlLmMKaW5kZXggODk1MGU0Ny4uYmFlMTdkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2RldmljZS5jCkBAIC0xODYsNiArMTg2LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWUwNjAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWUwNjAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0yMTAsNiArMjExLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1FLTZ4eCBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS02eHggRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTA2MDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2Rpby5jCmluZGV4IDNhMjc3NTcuLmQyOTMwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05MSw3ICs5MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzI5LDcgKzMyOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMzNyw3ICszMzcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzU2LDcgKzM1Niw3IEBACiAKIG1lMDYwMF9kaW9fc3ViZGV2aWNlX3QgKm1lMDYwMF9kaW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlvX2lkeCwKLQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTA2MDBfZGlvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKQEAgLTM4MSw3ICszODEsNyBAQAogCQlrZnJlZShzdWJkZXZpY2UpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JLy8gSW5pdGlhbGl6ZSBzcGluIGxvY2tzLgorCS8qIEluaXRpYWxpemUgc3BpbiBsb2Nrcy4gKi8KIAlzcGluX2xvY2tfaW5pdCgmc3ViZGV2aWNlLT5zdWJkZXZpY2VfbG9jayk7CiAKIAlzdWJkZXZpY2UtPmN0cmxfcmVnX2xvY2sgPSBjdHJsX3JlZ19sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9leHRfaXJxLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2V4dF9pcnEuYwppbmRleCBlYmExOGFkLi4yZjZmZWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2V4dF9pcnEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2V4dF9pcnEuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC0zMzcsMTEgKzMzNyw3IEBACiAJa2ZyZWUoaW5zdGFuY2UpOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lMDYwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTA2MDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTA2MDBfZXh0X2lycV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMzk3LDcgKzM5Myw3IEBACiAKIG1lMDYwMF9leHRfaXJxX3N1YmRldmljZV90ICptZTA2MDBfZXh0X2lycV9jb25zdHJ1Y3Rvcih1aW50MzJfdCBwbHhfcmVnX2Jhc2UsCiAJCQkJCQkgICAgICAgdWludDMyX3QgbWUwNjAwX3JlZ19iYXNlLAotCQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKiBpbnRjc3JfbG9jaywKKwkJCQkJCSAgICAgICBzcGlubG9ja190ICppbnRjc3JfbG9jaywKIAkJCQkJCSAgICAgICB1bnNpZ25lZCBleHRfaXJxX2lkeCwKIAkJCQkJCSAgICAgICBpbnQgaXJxKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9vcHRvaS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9vcHRvaS5jCmluZGV4IGI2ZDk3N2YuLjQzZjcxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfb3B0b2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX29wdG9pLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtNjgsNyArNjgsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfb3B0b2lfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgaW50IGNoYW5uZWwsCiAJCQkJCSBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTExOCw3ICsxMTgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX29wdG9pX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfb3B0b2lfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xNjksNyArMTY5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX29wdG9pX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfb3B0b2lfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xODYsNyArMTg2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfb3B0b2lfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkJa2ZyZWUoc3ViZGV2aWNlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCS8vIEluaXRpYWxpemUgc3BpbiBsb2Nrcy4KKwkvKiBJbml0aWFsaXplIHNwaW4gbG9ja3MuICovCiAJc3Bpbl9sb2NrX2luaXQoJnN1YmRldmljZS0+c3ViZGV2aWNlX2xvY2spOwogCiAJLyogU2F2ZSB0aGUgc3ViZGV2aWNlIGluZGV4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3JlbGF5LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3JlbGF5LmMKaW5kZXggMjY2NWM2OS4uMDM4MzVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9yZWxheS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfcmVsYXkuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC04NSw3ICs4NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9yZWxheV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSBpbnQgY2hhbm5lbCwKIAkJCQkJIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTM1LDcgKzEzNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfcmVsYXlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9yZWxheV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTIwMyw3ICsyMDMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCWludCBjaGFubmVsLAogCQkJCQlpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjc5LDcgKzI3OSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfcmVsYXlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfcmVsYXlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9yZWxheV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfcmVsYXlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF90dGxpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3R0bGkuYwppbmRleCBhYjhlMTNiLi43ZDk3MGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3R0bGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3R0bGkuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC02Nyw3ICs2Nyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3R0bGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3R0bGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCWludCBjaGFubmVsLAogCQkJCQlpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTExNiw3ICsxMTYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3R0bGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF90dGxpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTY0LDcgKzE2NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfdHRsaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF90dGxpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF90dGxpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfdHRsaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3R0bGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF90dGxpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGV2aWNlLmMKaW5kZXggNzY0ZDVkMy4uZTljNjg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RldmljZS5jCkBAIC0xNTIsNiArMTUyLDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWUwOTAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWUwOTAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0xNzUsNiArMTc2LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1FLTl4IERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTl4IERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWUwOTAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RpLmMKaW5kZXggZDdkNzM5NC4uNDY2NWIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGkuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTcxLDcgKzcxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTYxLDcgKzE2MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE2OSw3ICsxNjksNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lMDkwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZG8uYwppbmRleCBiNWI5YzNhLi5hMjI3NWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kby5jCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTgxLDcgKzgxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0yNDAsNyArMjQwLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWUwOTAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGV2aWNlLmMKaW5kZXggYzQ0ZTIxNC4uY2YwZmI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2RldmljZS5jCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVkZSAibWVzdWJkZXZpY2UuaCIKICNpbmNsdWRlICJtZTEwMDBfZGlvLmgiCiAKLXN0YXRpYyBpbnQgbWUxMDAwX2NvbmZpZ19sb2FkKG1lX2RldmljZV90ICogbWVfZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkgICAgICBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKiBjb25maWcpCitzdGF0aWMgaW50IG1lMTAwMF9jb25maWdfbG9hZChtZV9kZXZpY2VfdCAqbWVfZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCisJCQkgICAgICBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKmNvbmZpZykKIHsKIAltZTEwMDBfZGV2aWNlX3QgKm1lMTAwMF9kZXZpY2U7CiAJbWUxMDAwX2Rpb19zdWJkZXZpY2VfdCAqZGlvOwpAQCAtMTgxLDYgKzE4MSw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lMTAwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lMTAwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIHN0YXRpYyBpbnQgX19pbml0IG1lMTAwMF9pbml0KHZvaWQpCkBAIC0yMDMsNiArMjA0LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1laWxoYXVzIE1FLTEwMDAgRGV2aWNlcyIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTEwMDAgRGlnaXRhbCBJL08gRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTEwMDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2Rpby5jCmluZGV4IDg3NjA1YTkuLjJkN2VkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC0zNzEsNyArMzcxLDcgQEAKIAogbWUxMDAwX2Rpb19zdWJkZXZpY2VfdCAqbWUxMDAwX2Rpb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkaW9faWR4LAotCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lMTAwMF9kaW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZGV2aWNlLmMKaW5kZXggYjk1YmI0Zi4uY2E3NDk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2RldmljZS5jCkBAIC0yMjgsNiArMjI4LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWUxNDAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWUxNDAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0yNTEsNiArMjUyLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1laWxoYXVzIE1FLTE0eHggZGV2aWNlcyIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTE0eHggTUlPIGRldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWUxNDAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2V4dF9pcnEuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZXh0X2lycS5jCmluZGV4IGI0ZGY3Y2MuLjBkYzZiNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZXh0X2lycS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZXh0X2lycS5jCkBAIC0zNyw3ICszNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTMyMywxMiArMzIzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fTk9UX1NVUFBPUlRFRDsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTE0MDBfZXh0X2lycV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTE0MDBfZXh0X2lycV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLAotCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWUxNDAwX2V4dF9pcnFfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQzMl90IHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uYwppbmRleCBkMTI3YzZiLi4xMmUzYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIApAQCAtNTUsMzYgKzU1LDMyIEBACiAKIHN0YXRpYyB2b2lkIG1lMTYwMF9hb19kZXN0cnVjdG9yKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi1zdGF0aWMgdm9pZCBtZTE2MDBfYW9fd29ya19jb250cm9sX3Rhc2sodm9pZCAqc3ViZGV2aWNlKTsKLSNlbHNlCiBzdGF0aWMgdm9pZCBtZTE2MDBfYW9fd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLSNlbmRpZgogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLCBpbnQgcmVmLCBpbnQgdHJpZ19jaGFuLAogCQkJCSAgICAgIGludCB0cmlnX3R5cGUsIGludCB0cmlnX2VkZ2UsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsIGludCAqdmFsdWUsCiAJCQkJICAgIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwgaW50IHZhbHVlLAogCQkJCSAgICAgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKnR5cGUsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKnR5cGUsCiAJCQkJCSAgaW50ICpzdWJ0eXBlKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKmNhcHMpOwotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LCBpbnQgKm1pbiwgaW50ICptYXgsCiAJCQkJCSAgICBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpOwotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50IHVuaXQsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCB1bml0LAogCQkJCQkgaW50ICpjb3VudCk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgcmFuZ2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsIGludCAqbWluLCBpbnQgKm1heCwKIAkJCQkgICAgICBpbnQgKm1heGRhdGEpOwogCkBAIC05NCwxMCArOTAsOSBAQAogbWUxNjAwX2FvX3N1YmRldmljZV90ICptZTE2MDBfYW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGFvX2lkeCwKIAkJCQkJICAgICBpbnQgY3VyciwKLQkJCQkJICAgICBzcGlubG9ja190ICogY29uZmlnX3JlZ3NfbG9jaywKLQkJCQkJICAgICBzcGlubG9ja190ICogYW9fc2hhZG93c19sb2NrLAotCQkJCQkgICAgIG1lMTYwMF9hb19zaGFkb3dfdCAqCi0JCQkJCSAgICAgYW9fcmVnc19zaGFkb3dzLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmNvbmZpZ19yZWdzX2xvY2ssCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqYW9fc2hhZG93c19sb2NrLAorCQkJCQkgICAgIG1lMTYwMF9hb19zaGFkb3dfdCAqYW9fcmVnc19zaGFkb3dzLAogCQkJCQkgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZTE2MDBfd3EpCiB7CiAJbWUxNjAwX2FvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CkBAIC0yMDAsMTMgKzE5NSw4IEBACiAJc3ViZGV2aWNlLT5tZTE2MDBfd29ya3F1ZXVlID0gbWUxNjAwX3dxOwogCiAvKiB3b3JrcXVldWUgQVBJIGNoYW5nZWQgaW4ga2VybmVsIDIuNi4yMCAqLwotI2lmICggTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSApCi0JSU5JVF9XT1JLKCZzdWJkZXZpY2UtPmFvX2NvbnRyb2xfdGFzaywgbWUxNjAwX2FvX3dvcmtfY29udHJvbF90YXNrLAotCQkgICh2b2lkICopc3ViZGV2aWNlKTsKLSNlbHNlCiAJSU5JVF9ERUxBWUVEX1dPUksoJnN1YmRldmljZS0+YW9fY29udHJvbF90YXNrLAogCQkJICBtZTE2MDBfYW9fd29ya19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAJcmV0dXJuIHN1YmRldmljZTsKIH0KIApAQCAtMjMxLDcgKzIyMSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJbWUxNjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTMxMyw3ICszMDMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTU0NSw3ICs1MzUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNjEyLDcgKzYwMiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC03NTYsNyArNzQ2LDkgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsoaW5zdGFuY2UtPm1lMTYwMF93b3JrcXVldWUsCiAJCQkgICAmaW5zdGFuY2UtPmFvX2NvbnRyb2xfdGFzaywgMSk7CiAKLQlpZiAoKCFmbGFncyAmIE1FX0lPX1NJTkdMRV9UWVBFX1dSSVRFX05PTkJMT0NLSU5HKSAmJiAoKGluc3RhbmNlLT5hb19yZWdzX3NoYWRvd3MpLT50cmlnZ2VyICYgaW5zdGFuY2UtPmFvX2lkeCkpIHsJLy9CbG9ja2luZyBtb2RlLiBXYWl0IGZvciBzb2Z0d2FyZSB0cmlnZ2VyLgorCWlmICgoIShmbGFncyAmIE1FX0lPX1NJTkdMRV9UWVBFX1dSSVRFX05PTkJMT0NLSU5HKSkgJiYKKwkgICAgKChpbnN0YW5jZS0+YW9fcmVnc19zaGFkb3dzKS0+dHJpZ2dlciAmIGluc3RhbmNlLT5hb19pZHgpKSB7CisJCS8qIEJsb2NraW5nIG1vZGUuIFdhaXQgZm9yIHNvZnR3YXJlIHRyaWdnZXIuICovCiAJCWlmICh0aW1lX291dCkgewogCQkJZGVsYXkgPSAodGltZV9vdXQgKiBIWikgLyAxMDAwOwogCQkJaWYgKGRlbGF5ID09IDApCkBAIC03OTMsNyArNzg1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJbWUxNjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTgwNSw3ICs3OTcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICp0eXBlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICp0eXBlLAogCQkJCQkgIGludCAqc3VidHlwZSkKIHsKIAltZTE2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtODE4LDE0ICs4MTAsMTQgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSBNRV9DQVBTX0FPX1RSSUdfU1lOQ0hST05PVVM7CiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSkKQEAgLTkwMyw3ICs4OTUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpCiB7CiAJbWUxNjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTkyOCw3ICs5MjAsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpCkBAIC05NjAsMjIgKzk1MiwxNCBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotc3RhdGljIHZvaWQgbWUxNjAwX2FvX3dvcmtfY29udHJvbF90YXNrKHZvaWQgKnN1YmRldmljZSkKLSNlbHNlCiBzdGF0aWMgdm9pZCBtZTE2MDBfYW9fd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotI2VuZGlmCiB7CiAJbWUxNjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAlpbnQgcmVzY2hlZHVsZSA9IDE7CiAJaW50IHNpZ25hbGluZyA9IDA7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JaW5zdGFuY2UgPSAobWUxNjAwX2FvX3N1YmRldmljZV90ICopIHN1YmRldmljZTsKLSNlbHNlCiAJaW5zdGFuY2UgPQogCSAgICBjb250YWluZXJfb2YoKHZvaWQgKil3b3JrLCBtZTE2MDBfYW9fc3ViZGV2aWNlX3QsIGFvX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAogCVBJTkZPKCI8JXM6ICVsZD4gZXhlY3V0ZWQuIGlkeD0lZFxuIiwgX19mdW5jX18sIGppZmZpZXMsCiAJICAgICAgaW5zdGFuY2UtPmFvX2lkeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmgKaW5kZXggYjgyYmY1YS4uNDgyN2RjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uaApAQCAtOTgsMTEgKzk4LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkJCQkJCQkvKio8IFdhaXQgcXVldWUgdG8gcHV0IG9uIHRhc2tzIHdhaXRpbmcgZm9yIGRhdGEgdG8gYXJyaXZlLiAqLwogCW1lMTYwMF9hb190aW1lb3V0X3QgdGltZW91dDsJCQkJCQkJLyoqPCBUaGUgdGltZW91dCBmb3Igc3RhcnQgaW4gYmxvY2tpbmcgYW5kIG5vbi1ibG9ja2luZyBtb2RlLiAqLwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZTE2MDBfd29ya3F1ZXVlOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYW9fY29udHJvbF90YXNrOwotI2Vsc2UKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGFvX2NvbnRyb2xfdGFzazsKLSNlbmRpZgogCiAJdm9sYXRpbGUgaW50IGFvX2NvbnRyb2xfdGFza19mbGFnOwkJCQkJCS8qKjwgRmxhZyBjb250cm9saW5nIHJlZXhlY3V0aW5nIG9mIGNvbnRyb2wgdGFzayAqLwogfSBtZTE2MDBfYW9fc3ViZGV2aWNlX3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9kZXZpY2UuYwppbmRleCAzYmMyY2IxLi5jMjQ0ZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfZGV2aWNlLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJtZXN1YmRldmljZS5oIgogI2luY2x1ZGUgIm1lMTYwMF9kZXZpY2UuaCIKIAotc3RhdGljIHZvaWQgbWUxNjAwX3NldF9yZWdpc3RyeShtZTE2MDBfZGV2aWNlX3QgKiBzdWJkZXZpY2UsIHVpbnQzMl90IHJlZ19iYXNlKTsKK3N0YXRpYyB2b2lkIG1lMTYwMF9zZXRfcmVnaXN0cnkobWUxNjAwX2RldmljZV90ICpzdWJkZXZpY2UsIHVpbnQzMl90IHJlZ19iYXNlKTsKIHN0YXRpYyB2b2lkIG1lMTYwMF9kZXN0cnVjdG9yKHN0cnVjdCBtZV9kZXZpY2UgKmRldmljZSk7CiAKIC8qKgpAQCAtMTQyLDYgKzE0Miw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lMTYwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lMTYwMF9wY2lfY29uc3RydWN0b3IpOwogCiBzdGF0aWMgdm9pZCBtZTE2MDBfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWVfZGV2aWNlICpkZXZpY2UpCiB7CkBAIC0xNTcsNyArMTU4LDcgQEAKIAlrZnJlZShtZTE2MDBfZGV2aWNlKTsKIH0KIAotc3RhdGljIHZvaWQgbWUxNjAwX3NldF9yZWdpc3RyeShtZTE2MDBfZGV2aWNlX3QgKiBzdWJkZXZpY2UsIHVpbnQzMl90IHJlZ19iYXNlKQorc3RhdGljIHZvaWQgbWUxNjAwX3NldF9yZWdpc3RyeShtZTE2MDBfZGV2aWNlX3QgKnN1YmRldmljZSwgdWludDMyX3QgcmVnX2Jhc2UpCiB7CQkJCS8vIENyZWF0ZSBzaGFkb3cgc3RydWN0dXJlLgogCWlmIChzdWJkZXZpY2UtPmFvX3JlZ3Nfc2hhZG93cy5jb3VudCA+PSAxKSB7CiAJCXN1YmRldmljZS0+YW9fcmVnc19zaGFkb3dzLnJlZ2lzdHJ5WzBdID0KQEAgLTI1Niw2ICsyNTcsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTUUtMTYwMCBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS0xNjAwIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWUxNjAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmMKaW5kZXggMGE4YzlkNy4uYTNjZmVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuYwpAQCAtMzYsOCArMzYsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01NywxMCArNTcsMTAgQEAKICAqLwogCiBzdGF0aWMgdm9pZCBtZTQ2MDBfYWlfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC02OCwxMjAgKzY4LDExMiBAQAogCQkJCSAgICAgIGludCB0cmlnX2NoYW4sCiAJCQkJICAgICAgaW50IHRyaWdfdHlwZSwgaW50IHRyaWdfZWRnZSwgaW50IGZsYWdzKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgcmVhZF9tb2RlLAogCQkJCSAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBpbmxpbmUgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkX2dldF92YWx1ZShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKgorc3RhdGljIGlubGluZSBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkX2dldF92YWx1ZShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKgogCQkJCQkJICAgICBpbnN0YW5jZSwgaW50ICp2YWx1ZXMsCiAJCQkJCQkgICAgIGNvbnN0IGludCBjb3VudCwKIAkJCQkJCSAgICAgY29uc3QgaW50IGZsYWdzKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncyk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAogCQkJCSBsb25nIGxvbmcgKm1pbl90aWNrcywgbG9uZyBsb25nICptYXhfdGlja3MpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICpjYXBzKTsKIHN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV9jYXBzX2FyZ3Moc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlLAogCQkJCQkgICAgICAgaW50IGNhcCwgaW50ICphcmdzLCBpbnQgY291bnQpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNlbmRpZgogCi1zdGF0aWMgaW50IGFpX211eF90b2dnbGVyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSk7CitzdGF0aWMgaW50IGFpX211eF90b2dnbGVyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlKTsKIAogLyoqIEltbWlkaWF0ZSBzdG9wLgogKiBSZXNldCBhbGwgSVJRJ3Mgc291cmNlcy4gKGJsb2NrIGxhY2hlcykKICogUHJlc2VydmUgRklGTwogKi8KLXN0YXRpYyBpbnQgYWlfc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitzdGF0aWMgaW50IGFpX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBJbW1pZGlhdGUgc3RvcC4KICogUmVzZXQgYWxsIElSUSdzIHNvdXJjZXMuIChibG9jayBsYWNoZXMpCiAqIFJlc2V0IGRhdGEgRklGTwogKi8KLXZvaWQgaW5saW5lIGFpX3N0b3BfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK2lubGluZSB2b2lkIGFpX3N0b3BfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogSW50ZXJydXB0IGxvZ2ljcy4KICogUmVhZCBkYXRhcwogKiBSZXNldCBsYXRjaGVzCiAqLwotdm9pZCBhaV9saW1pdGVkX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgY29uc3QgdWludDMyX3QgaXJxX3N0YXR1cywKK3ZvaWQgYWlfbGltaXRlZF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwgY29uc3QgdWludDMyX3QgaXJxX3N0YXR1cywKIAkJICAgIGNvbnN0IHVpbnQzMl90IGN0cmxfc3RhdHVzKTsKLXZvaWQgYWlfaW5maW5pdGVfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAordm9pZCBhaV9pbmZpbml0ZV9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJICAgICBjb25zdCB1aW50MzJfdCBpcnFfc3RhdHVzLCBjb25zdCB1aW50MzJfdCBjdHJsX3N0YXR1cyk7CiAKIC8qKiBMYXN0IGNodW5jayBvZiBkYXRhcy4gV2UgbXVzdCByZXNjaGVkdWxlIHNhbXBsZSBjb3VudGVyLgogKiBMZWF2aW5nIFNDX1JFTE9BRCBkb2Vzbid0IGRvIGFueSBoYXJtLCBidXQgaW4gc29tZSBiYWQgY2FzZSBjYW4gbWFrZSBleHRyYSBpbnRlcnJ1cHRzLgogKiBXaGVuIHRocmVzaG9sZCBpcyB3cm9uZ2x5IHNldCBzb21lIElSUSBhcmUgbG9zdC4oISEhKQogKi8KLXZvaWQgaW5saW5lIGFpX3Jlc2NoZWR1bGVfU0MobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworaW5saW5lIHZvaWQgYWlfcmVzY2hlZHVsZV9TQyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIFJlYWQgZGF0YXMgZnJvbSBGSUZPIGFuZCBjb3B5IHRoZW0gdG8gYnVmZmVyICovCi1zdGF0aWMgaW50IGlubGluZSBhaV9yZWFkX2RhdGEobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCitzdGF0aWMgaW5saW5lIGludCBhaV9yZWFkX2RhdGEobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJCSAgICAgICBjb25zdCBpbnQgY291bnQpOwogCiAvKiogQ29weSByZXN0IG9mIGRhdGEgZnJvbSBmaWZvIHRvIGNpcmN1bGFyIGJ1ZmZlci4qLwotc3RhdGljIGludCBpbmxpbmUgYWlfcmVhZF9kYXRhX3Bvb2xpbmcobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworc3RhdGljIGlubGluZSBpbnQgYWlfcmVhZF9kYXRhX3Bvb2xpbmcobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBTZXQgSVNNIHRvIG5leHQgc3RhdGUgZm9yIGluZmluaXRlIGRhdGEgYXF1c2F0aW9uIG1vZGUqLwotdm9pZCBpbmxpbmUgYWlfaW5maW5pdGVfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK2lubGluZSB2b2lkIGFpX2luZmluaXRlX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIFNldCBJU00gdG8gbmV4dCBzdGF0ZSBmb3IgZGVmaW5lIGFtb3VudCBvZiBkYXRhIGFxdXNhdGlvbiBtb2RlKi8KLXZvaWQgaW5saW5lIGFpX2xpbWl0ZWRfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAoraW5saW5lIHZvaWQgYWlfbGltaXRlZF9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJCSAgIHVpbnQzMl90IGlycV9zdGF0dXMpOwogCiAvKiogU2V0IElTTSB0byBuZXh0IHN0YWdlIGZvciBsaW1pdGVkIG1vZGUgKi8KLXZvaWQgaW5saW5lIGFpX2RhdGFfYWNxdWlzaXRpb25fbG9naWMobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworaW5saW5lIHZvaWQgYWlfZGF0YV9hY3F1aXNpdGlvbl9sb2dpYyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLXN0YXRpYyB2b2lkIG1lNDYwMF9haV93b3JrX2NvbnRyb2xfdGFzayh2b2lkICpzdWJkZXZpY2UpOwotI2Vsc2UKIHN0YXRpYyB2b2lkIG1lNDYwMF9haV93b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotI2VuZGlmCiAKIC8qIERlZmluaXRpb25zCiAgKi8KQEAgLTE5Miw3ICsxODQsNyBAQAogCQkJCQkgICAgIGludCBpc29sYXRlZCwKIAkJCQkJICAgICBpbnQgc2gsCiAJCQkJCSAgICAgaW50IGlycSwKLQkJCQkJICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaywKKwkJCQkJICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrLAogCQkJCQkgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZTQ2MDBfd3EpCiB7CiAJbWU0NjAwX2FpX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CkBAIC0zNjAsMTMgKzM1Miw4IEBACiAJc3ViZGV2aWNlLT5tZTQ2MDBfd29ya3F1ZXVlID0gbWU0NjAwX3dxOwogCiAvKiB3b3JrcXVldWUgQVBJIGNoYW5nZWQgaW4ga2VybmVsIDIuNi4yMCAqLwotI2lmICggTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSApCi0JSU5JVF9XT1JLKCZzdWJkZXZpY2UtPmFpX2NvbnRyb2xfdGFzaywgbWU0NjAwX2FpX3dvcmtfY29udHJvbF90YXNrLAotCQkgICh2b2lkICopc3ViZGV2aWNlKTsKLSNlbHNlCiAJSU5JVF9ERUxBWUVEX1dPUksoJnN1YmRldmljZS0+YWlfY29udHJvbF90YXNrLAogCQkJICBtZTQ2MDBfYWlfd29ya19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAKIAlyZXR1cm4gc3ViZGV2aWNlOwogfQpAQCAtMzk3LDcgKzM4NCw3IEBACiAJa2ZyZWUoaW5zdGFuY2UpOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTUxOSw3ICs1MDYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNzA5LDcgKzY5Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTkxNSwxMSArOTAyLDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTE1ODYsMTUgKzE1NzMsMTUgQEAKIAkJICAgIE1FX1NJTkdMRV9DSEFOTkVMX05PVF9DT05GSUdVUkVEOwogCX0KIAotICAgICAgVkVSSUZZX0VSUk9SOgkJLy8gRXJyb3IgaW4gY29kZS4gV3Jvbmcgc2V0dGluZyBjaGVjay4gVGhpcyBzaG91bGQgbmV2ZXIgZXZlciBoYXBwZW5kIQorVkVSSUZZX0VSUk9SOgkJLy8gRXJyb3IgaW4gY29kZS4gV3Jvbmcgc2V0dGluZyBjaGVjay4gVGhpcyBzaG91bGQgbmV2ZXIgZXZlciBoYXBwZW5kIQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zdWJkZXZpY2VfbG9jaywgY3B1X2ZsYWdzKTsKLSAgICAgIEVSUk9SOgkJCS8vIEVycm9yIGluIHNldHRpbmdzLgorRVJST1I6CQkJLy8gRXJyb3IgaW4gc2V0dGluZ3MuCiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKQogewpAQCAtMTY3Nyw3ICsxNjY0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWRfZ2V0X3ZhbHVlKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqCitzdGF0aWMgaW5saW5lIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWRfZ2V0X3ZhbHVlKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqCiAJCQkJCQkgICAgIGluc3RhbmNlLCBpbnQgKnZhbHVlcywKIAkJCQkJCSAgICAgY29uc3QgaW50IGNvdW50LAogCQkJCQkJICAgICBjb25zdCBpbnQgZmxhZ3MpCkBAIC0xNzEyLDcgKzE2OTksNyBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHJlYWRfbW9kZSwKIAkJCQkgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncykKQEAgLTE4MzgsNyArMTgyNSw3IEBACiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgc3ViZGV2aWNlIGluc3RhbmNlIChwb2ludGVyKS4KICovCiAKLXN0YXRpYyBpbnQgYWlfc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK3N0YXRpYyBpbnQgYWlfc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzID0gMDsKIAl2b2xhdGlsZSB1aW50MzJfdCBjdHJsOwpAQCAtMTg3Nyw3ICsxODY0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCiB7CkBAIC0yMDU1LDEzICsyMDQyLDEzIEBACiAJICAgICAgKHRtcCAmIE1FNDYwMF9BSV9DVFJMX0JJVF9TQ19JUlFfUkVTRVQpID8gInJlc2V0IiA6ICJ3b3JrIik7CiAjZW5kaWYKIAotICAgICAgRVJST1I6CitFUlJPUjoKIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKQpAQCAtMjEzOSw3ICsyMTI2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKQogewpAQCAtMjIzNiw3ICsyMjIzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpCkBAIC0yMjg4LDcgKzIyNzUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpCiB7CiAJbWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTIzMDYsNyArMjI5Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSkKQEAgLTIzMzAsNyArMjMxNyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAogCQkJCSBsb25nIGxvbmcgKm1pbl90aWNrcywgbG9uZyBsb25nICptYXhfdGlja3MpCkBAIC0yMzcwLDcgKzIzNTcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJbWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTIzODMsNyArMjM3MCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLiBpZHg9MFxuIik7CkBAIC0yMzk0LDcgKzIzODEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuIGlkeD0wXG4iKTsKIApAQCAtMjQzOSw3ICsyNDI2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGFpX2xpbWl0ZWRfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBjb25zdCB1aW50MzJfdCBpcnFfc3RhdHVzLAordm9pZCBhaV9saW1pdGVkX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBjb25zdCB1aW50MzJfdCBpcnFfc3RhdHVzLAogCQkgICAgY29uc3QgdWludDMyX3QgY3RybF9zdGF0dXMpCiB7CiAJaW50IHRvX3JlYWQ7CkBAIC0yNTQ3LDcgKzI1MzQsNyBAQAogCX0KIH0KIAotdm9pZCBhaV9pbmZpbml0ZV9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCit2b2lkIGFpX2luZmluaXRlX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkgICAgIGNvbnN0IHVpbnQzMl90IGlycV9zdGF0dXMsIGNvbnN0IHVpbnQzMl90IGN0cmxfc3RhdHVzKQogewogCWludCB0b19yZWFkOwpAQCAtMjYwMywxMSArMjU5MCw3IEBACiAJfQogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAl1aW50MzJfdCBpcnFfc3RhdHVzOwogCXVpbnQzMl90IGN0cmxfc3RhdHVzOwpAQCAtMjgwMyw3ICsyNzg2LDcgQEAKICoKICogQHBhcmFtIGluc3RhbmNlIFRoZSBzdWJkZXZpY2UgaW5zdGFuY2UgKHBvaW50ZXIpLgogKi8KLXZvaWQgaW5saW5lIGFpX3N0b3BfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQoraW5saW5lIHZvaWQgYWlfc3RvcF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgc29mdCB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXJlZ2lzdGVyIHVpbnQzMl90IHRtcDsKIApAQCAtMjgyOSw3ICsyODEyLDcgQEAKICogQHJldHVybiBPbiBzdWNjZXNzOiBOdW1iZXIgb2YgY29waWVkIHZhbHVlcy4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX1JJTkdfQlVGRkVSX09WRVJGTE9XLgogKi8KLXN0YXRpYyBpbnQgaW5saW5lIGFpX3JlYWRfZGF0YShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK3N0YXRpYyBpbmxpbmUgaW50IGFpX3JlYWRfZGF0YShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkJICAgICAgIGNvbnN0IGludCBjb3VudCkKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAlpbnQgYyA9IGNvdW50OwpAQCAtMjg3NSw3ICsyODU4LDcgQEAKIAlyZXR1cm4gY29waWVkOwogfQogCi12b2lkIGlubGluZSBhaV9pbmZpbml0ZV9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitpbmxpbmUgdm9pZCBhaV9pbmZpbml0ZV9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAlyZWdpc3RlciB2b2xhdGlsZSB1aW50MzJfdCBjdHJsX3NldCwgY3RybF9yZXNldCwgdG1wOwogCkBAIC0yOTI1LDcgKzI5MDgsNyBAQAogCiB9CiAKLXZvaWQgaW5saW5lIGFpX2xpbWl0ZWRfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAoraW5saW5lIHZvaWQgYWlfbGltaXRlZF9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJCSAgIHVpbnQzMl90IGlycV9zdGF0dXMpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJcmVnaXN0ZXIgdm9sYXRpbGUgdWludDMyX3QgY3RybF9zZXQsIGN0cmxfcmVzZXQgPSAweEZGRkZGRkZGLCB0bXA7CkBAIC0yOTg2LDcgKzI5NjksNyBAQAogKglMZWF2aW5nIFNDX1JFTE9BRCBkb2Vzbid0IGRvIGFueSBoYXJtLCBidXQgaW4gc29tZSBiYWQgY2FzZSBjYW4gbWFrZSBleHRyYSBpbnRlcnJ1cHRzLgogKglAd2FybmluZyBXaGVuIHRocmVzaG9sZCBpcyB3cm9uZ2x5IHNldCBzb21lIElSUSBhcmUgbG9zdC4oISEhKQogKi8KLXZvaWQgaW5saW5lIGFpX3Jlc2NoZWR1bGVfU0MobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitpbmxpbmUgdm9pZCBhaV9yZXNjaGVkdWxlX1NDKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgcmVzdDsKIApAQCAtMzAxOCw3ICszMDAxLDcgQEAKIH0KIAogLyoqIFN0YXJ0IHRoZSBJU00uIEFsbCBtdXN0IGJlIHJlc2V0ZWQgYmVmb3JlIGVudGVyIHRvIHRoaXMgZnVuY3Rpb24uICovCi12b2lkIGlubGluZSBhaV9kYXRhX2FjcXVpc2l0aW9uX2xvZ2ljKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQoraW5saW5lIHZvaWQgYWlfZGF0YV9hY3F1aXNpdGlvbl9sb2dpYyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXJlZ2lzdGVyIHVpbnQzMl90IHRtcDsKIApAQCAtMzE2Niw3ICszMTQ5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYWlfbXV4X3RvZ2dsZXIobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitzdGF0aWMgaW50IGFpX211eF90b2dnbGVyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJdWludDMyX3QgdG1wOwogCkBAIC0zMjc2LDcgKzMyNTksNyBAQAogKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IE51bWJlciBvZiBjb3BpZWQgdmFsdWVzLgogKiBAcmV0dXJuIE9uIGVycm9yOiBOZWdhdGl2ZSBlcnJvciBjb2RlIC1NRV9FUlJOT19SSU5HX0JVRkZFUl9PVkVSRkxPVy4KICovCi1zdGF0aWMgaW50IGlubGluZSBhaV9yZWFkX2RhdGFfcG9vbGluZyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFpX3JlYWRfZGF0YV9wb29saW5nKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJaW50IGVtcHR5X3NwYWNlOwogCWludCBjb3BpZWQgPSAwOwpAQCAtMzMxMCwxMSArMzI5Myw3IEBACiAJcmV0dXJuICghc3RhdHVzKSA/IGNvcGllZCA6IC1NRV9FUlJOT19SSU5HX0JVRkZFUl9PVkVSRkxPVzsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLXN0YXRpYyB2b2lkIG1lNDYwMF9haV93b3JrX2NvbnRyb2xfdGFzayh2b2lkICpzdWJkZXZpY2UpCi0jZWxzZQogc3RhdGljIHZvaWQgbWU0NjAwX2FpX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLSNlbmRpZgogewogCW1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMzMyMywxMiArMzMwMiw4IEBACiAJaW50IHJlc2NoZWR1bGUgPSAwOwogCWludCBzaWduYWxpbmcgPSAwOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCWluc3RhbmNlID0gKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqKSBzdWJkZXZpY2U7Ci0jZWxzZQogCWluc3RhbmNlID0KIAkgICAgY29udGFpbmVyX29mKCh2b2lkICopd29yaywgbWU0NjAwX2FpX3N1YmRldmljZV90LCBhaV9jb250cm9sX3Rhc2spOwotI2VuZGlmCiAJUElORk8oIjwlczogJWxkPiBleGVjdXRlZC5cbiIsIF9fZnVuY19fLCBqaWZmaWVzKTsKIAogCXN0YXR1cyA9IGlubChpbnN0YW5jZS0+c3RhdHVzX3JlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmgKaW5kZXggMWQ1YTFiOS4uMTA2ZTE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuaApAQCAtMTM5LDExICsxMzksNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CQkJCQkvKio8IFdhaXQgcXVldWUgdG8gcHV0IG9uIHRhc2tzIHdhaXRpbmcgZm9yIGRhdGEgdG8gYXJyaXZlLiAqLwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lNDYwMF93b3JrcXVldWU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCXN0cnVjdCB3b3JrX3N0cnVjdCBhaV9jb250cm9sX3Rhc2s7Ci0jZWxzZQogCXN0cnVjdCBkZWxheWVkX3dvcmsgYWlfY29udHJvbF90YXNrOwotI2VuZGlmCiAKIAl2b2xhdGlsZSBpbnQgYWlfY29udHJvbF90YXNrX2ZsYWc7CQkJCS8qKjwgRmxhZyBjb250cm9saW5nIHJlZXhlY3V0aW5nIG9mIGNvbnRyb2wgdGFzayAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmMKaW5kZXggZTJiZWM4Mi4uZWI0NzI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uYwpAQCAtMzgsOCArMzgsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTU4LDMxICs1OCwzMSBAQAogLyogRGVmaW5lcwogICovCiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAogCQkJCSBsb25nIGxvbmcgKm1pbl90aWNrcywgbG9uZyBsb25nICptYXhfdGlja3MpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICpjYXBzKTsKIAogc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHNfYXJncyhzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UsCkBAIC0xMDUsMTIgKzEwNSwxMiBAQAogCiAvKiogUmVzZXQgc3ViZGV2aWNlLiBTdG9wIGFsbCBhY3Rpb25zLiBSZXNldCByZWdpc3RyeS4gRGlzYWJsZSBGSUZPLiBTZXQgb3V0cHV0IHRvIDBWIGFuZCBzdGF0dXMgdG8gJ25vbmUnLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncyk7CiAKIC8qKiBTZXQgb3V0cHV0IGFzIHNpbmdsZQogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTIwLDEwMyArMTIwLDkzIEBACiAKIC8qKiBQYXNzIHRvIHVzZXIgYWN0dWFsIHZhbHVlIG9mIG91dHB1dC4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAogLyoqIFdyaXRlIHRvIG91dHB1dCByZXF1ZWQgdmFsdWUuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCiAvKiogU2V0IG91dHB1dCBhcyBzdHJlYW1lZCBkZXZpY2UuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpOwogCiAvKiogV2FpdCBmb3IgLyBDaGVjayBlbXB0eSBzcGFjZSBpbiBidWZmZXIuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncyk7CiAKIC8qKiBTdGFydCBzdHJlYW1pbmcuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCiAvKiogQ2hlY2sgYWN0dWFsIHN0YXRlLiAvIFdhaXQgZm9yIGVuZC4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncyk7CiAKIC8qKiBTdG9wIHN0cmVhbWluZy4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKTsKIAogLyoqIFdyaXRlIGRhdGFzIHRvIGJ1ZmZvci4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCB3cml0ZV9tb2RlLAogCQkJCSAgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncyk7CiAKIC8qKiBJbnRlcnJ1cHQgaGFuZGxlci4gQ29weSBmcm9tIGJ1ZmZlciB0byBGSUZPLgogKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQotCQkJCSAsIHN0cnVjdCBwdF9yZWdzICpyZWdzCi0jZW5kaWYKLSAgICApOworc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIC8qKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIgdG8gZmlmbyAoZmFzdCkgaW4gd3JhcGFyb3VuZCBtb2RlLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJICAgIGludCBzdGFydF9wb3MpOwogCiAvKiogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyIHRvIGZpZm8gKGZhc3QpLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCSBpbnQgc3RhcnRfcG9zKTsKIAogLyoqIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlciB0byBmaWZvIChzbG93KS4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgc3RhcnRfcG9zKTsKIAogLyoqIENvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8gY2lyY3VsYXIgYnVmZmVyLgogKi8KLWludCBpbmxpbmUgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCAqdXNlcl92YWx1ZXMpOwogCiAvKiogU3RvcCBwcmVzZW50YXRpb24uIFByZXNlcnZlIEZJRk9zLgogKi8KLWludCBpbmxpbmUgYW9fc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitpbmxpbmUgaW50IGFvX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBUYXNrIGZvciBhc3luY2hyb25pY2FsIHN0YXRlIHZlcmlmeWluZy4KICovCi1zdGF0aWMgdm9pZCBtZTQ2MDBfYW9fd29ya19jb250cm9sX3Rhc2soCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCQkJCQkgICAgICAgdm9pZCAqc3ViZGV2aWNlCi0jZWxzZQotCQkJCQkgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrCi0jZW5kaWYKLSAgICApOworc3RhdGljIHZvaWQgbWU0NjAwX2FvX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAvKiBGdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTI5MCw3ICsyODAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNDYzLDcgKzQ1Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTU0Nyw3ICs1MzcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtOTg5LDExICs5NzksMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMTAyNSw3ICsxMDE1LDcgQEAKIAl9CiAKIAlpZiAoZmxhZ3MgJiBNRV9JT19TVFJFQU1fQ09ORklHX0hBUkRXQVJFX09OTFkpIHsKLQkJaWYgKCFmbGFncyAmIE1FX0lPX1NUUkVBTV9DT05GSUdfV1JBUEFST1VORCkgeworCQlpZiAoIShmbGFncyAmIE1FX0lPX1NUUkVBTV9DT05GSUdfV1JBUEFST1VORCkpIHsKIAkJCVBFUlJPUgogCQkJICAgICgiSGFyZHdhcmUgTUVfSU9fU1RSRUFNX0NPTkZJR19IQVJEV0FSRV9PTkxZIGhhcyB0byBiZSB3aXRoIE1FX0lPX1NUUkVBTV9DT05GSUdfV1JBUEFST1VORC5cbiIpOwogCQkJcmV0dXJuIE1FX0VSUk5PX0lOVkFMSURfRkxBR1M7CkBAIC0xMzI3LDcgKzEzMTcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCiB7CkBAIC0xNDA4LDcgKzEzOTgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQogewpAQCAtMTg0NSw3ICsxODM1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncykKQEAgLTE5NDMsNyArMTkzMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncykKIHsJCQkJLy8gU3RvcCB3b3JrIGFuZCBlbXB0eSBidWZmZXIgYW5kIEZJRk8KQEAgLTIwNDgsNyArMjAzOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgd3JpdGVfbW9kZSwKIAkJCQkgICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCkBAIC0yMjcyLDExICsyMjYyLDcgQEAKIAogCXJldHVybiBlcnI7CiB9Ci1zdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKLQkJCQkgLCBzdHJ1Y3QgcHRfcmVncyAqcmVncwotI2VuZGlmCi0gICAgKQorc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UgPSBkZXZfaWQ7CiAJdWludDMyX3QgaXJxX3N0YXR1czsKQEAgLTI0OTgsOCArMjQ4NCw4IEBACiB9CiAKIG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqbWU0NjAwX2FvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBwcmVsb2FkX3JlZ19sb2NrLAotCQkJCQkgICAgIHVpbnQzMl90ICogcHJlbG9hZF9mbGFncywKKwkJCQkJICAgICBzcGlubG9ja190ICpwcmVsb2FkX3JlZ19sb2NrLAorCQkJCQkgICAgIHVpbnQzMl90ICpwcmVsb2FkX2ZsYWdzLAogCQkJCQkgICAgIGludCBhb19pZHgsCiAJCQkJCSAgICAgaW50IGZpZm8sCiAJCQkJCSAgICAgaW50IGlycSwKQEAgLTI2ODksMTMgKzI2NzUsOCBAQAogCXN1YmRldmljZS0+bWU0NjAwX3dvcmtxdWV1ZSA9IG1lNDYwMF93cTsKIAogLyogd29ya3F1ZXVlIEFQSSBjaGFuZ2VkIGluIGtlcm5lbCAyLjYuMjAgKi8KLSNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkgKQotCUlOSVRfV09SSygmc3ViZGV2aWNlLT5hb19jb250cm9sX3Rhc2ssIG1lNDYwMF9hb193b3JrX2NvbnRyb2xfdGFzaywKLQkJICAodm9pZCAqKXN1YmRldmljZSk7Ci0jZWxzZQogCUlOSVRfREVMQVlFRF9XT1JLKCZzdWJkZXZpY2UtPmFvX2NvbnRyb2xfdGFzaywKIAkJCSAgbWU0NjAwX2FvX3dvcmtfY29udHJvbF90YXNrKTsKLSNlbmRpZgogCiAJaWYgKHN1YmRldmljZS0+ZmlmbykgewkvLyBTZXQgc3BlZWQgZm9yIHNpbmdsZSBvcGVyYXRpb25zLgogCQlvdXRsKE1FNDYwMF9BT19NSU5fQ0hBTl9USUNLUyAtIDEsIHN1YmRldmljZS0+dGltZXJfcmVnKTsKQEAgLTI3MDksNyArMjY5MCw3IEBACiAqCiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgc3ViZGV2aWNlIGluc3RhbmNlIChwb2ludGVyKS4KICovCi1pbnQgaW5saW5lIGFvX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitpbmxpbmUgaW50IGFvX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFnczsKIAl1aW50MzJfdCBjdHJsOwpAQCAtMjc2Miw3ICsyNzQzLDcgQEAKICogQHJldHVybiBPbiBlcnJvci9zdWNjZXNzOiAwLglObyBkYXRhcyB3ZXJlIGNvcGllZCA9PiBubyBkYXRhIGluIGJ1ZmZlci4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX0ZJRk9fQlVGRkVSX09WRVJGTE9XLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJICAgIGludCBzdGFydF9wb3MpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMjgyNyw3ICsyODA4LDcgQEAKICogQHJldHVybiBPbiBlcnJvci9zdWNjZXNzOiAwLglObyBkYXRhcyB3ZXJlIGNvcGllZCA9PiBubyBkYXRhIGluIGJ1ZmZlci4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX0ZJRk9fQlVGRkVSX09WRVJGTE9XLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCSBpbnQgc3RhcnRfcG9zKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXVpbnQzMl90IHN0YXR1czsKQEAgLTI4OTcsNyArMjg3OCw3IEBACiAqIEByZXR1cm4gT24gZXJyb3Ivc3VjY2VzczogMC4JRklGTyB3YXMgZnVsbCBhdCBiZWdpbmluZy4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX1JJTkdfQlVGRkVSX1VOREVGRkxPVy4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgc3RhcnRfcG9zKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyBzbG93IGZ1bmN0aW9uIQogCXVpbnQzMl90IHN0YXR1czsKQEAgLTI5NTUsNyArMjkzNiw3IEBACiAqIEByZXR1cm4gT24gc3VjY2VzczogTnVtYmVyIG9mIGNvcGllZCB2YWx1ZXMuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19JTlRFUk5BTC4KICovCi1pbnQgaW5saW5lIGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgKnVzZXJfdmFsdWVzKQogewogCWludCBpLCBlcnI7CkBAIC0yOTg3LDEzICsyOTY4LDcgQEAKIC8qKiBAYnJpZWYgQ2hlY2tpbmcgYWN0dWFsIGhhcmR3YXJlIGFuZCBsb2dpY2FsIHN0YXRlLgogKiBAcGFyYW0gaW5zdGFuY2UgVGhlIHN1YmRldmljZSBpbnN0YW5jZSAocG9pbnRlcikuCiAqLwotc3RhdGljIHZvaWQgbWU0NjAwX2FvX3dvcmtfY29udHJvbF90YXNrKAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQkJCQkJICAgICAgIHZvaWQgKnN1YmRldmljZQotI2Vsc2UKLQkJCQkJICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yawotI2VuZGlmCi0gICAgKQorc3RhdGljIHZvaWQgbWU0NjAwX2FvX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzID0gMDsKQEAgLTMwMDMsMTIgKzI5NzgsOCBAQAogCWludCByZXNjaGVkdWxlID0gMDsKIAlpbnQgc2lnbmFsaW5nID0gMDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlpbnN0YW5jZSA9IChtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKikgc3ViZGV2aWNlOwotI2Vsc2UKIAlpbnN0YW5jZSA9CiAJICAgIGNvbnRhaW5lcl9vZigodm9pZCAqKXdvcmssIG1lNDYwMF9hb19zdWJkZXZpY2VfdCwgYW9fY29udHJvbF90YXNrKTsKLSNlbmRpZgogCVBJTkZPKCI8JXM6ICVsZD4gZXhlY3V0ZWQuIGlkeD0lZFxuIiwgX19mdW5jX18sIGppZmZpZXMsCiAJICAgICAgaW5zdGFuY2UtPmFvX2lkeCk7CiAKQEAgLTMzMjMsNyArMzI5NCw3IEBACiAjZWxzZQogLy8vIEBub3RlIFNQRUNJQUwgQlVJTEQgRk9SIEJPU0NICiAvLy8gQGF1dGhvciBHdWVudGVyIEdlYmhhcmR0Ci1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTMzNjUsNyArMzMzNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0zNjM2LDcgKzM2MDcsNyBAQAogCQlnb3RvIEVSUk9SOwogCX0KIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zdWJkZXZpY2VfbG9jaywgY3B1X2ZsYWdzKTsKIApAQCAtMzY0NSw3ICszNjE2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzY4Miw3ICszNjUzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTM4MzAsMTggKzM4MDEsMTggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPnN1YmRldmljZV9sb2NrLCBjcHVfZmxhZ3MpOwogCX0KIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTQxNTAsNyArNDEyMSw3IEBACiAJUERFQlVHKCJDdHJsIHdvcmQgPSAweCVsWC5cbiIsIGN0cmwpOwogCW91dGwoY3RybCwgaW5zdGFuY2UtPmN0cmxfcmVnKTsJLy8gV3JpdGUgdGhlIGNvbnRyb2wgd29yZAogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPnN1YmRldmljZV9sb2NrLCBjcHVfZmxhZ3MpOwogCkBAIC00MTU5LDcgKzQxMzAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCiB7CkBAIC00MjM4LDcgKzQyMDksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitzdGF0aWMgdm9pZCBzdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3M7CiAJdWludDMyX3QgdG1wOwpAQCAtNDI1Myw3ICs0MjI0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+c3ViZGV2aWNlX2xvY2ssIGNwdV9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQogewpAQCAtNDc3OCwxNCArNDc0OSwxNCBAQAogCQlnb3RvIEVSUk9SOwogCX0KIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpCkBAIC00ODQyLDE0ICs0ODEzLDE0IEBACiAJCWdvdG8gRVJST1I7CiAJfQogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKQogewpAQCAtNDg5MSwxNCArNDg2MiwxNCBAQAogCQlnb3RvIEVSUk9SOwogCX0KIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgd3JpdGVfbW9kZSwKIAkJCQkgICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCkBAIC01NDMyLDE4ICs1NDAzLDE0IEBACiAJCWdvdG8gRVJST1I7CiAJfQogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgdmFsdWU7CkBAIC01NjYwLDggKzU2MjcsOCBAQAogfQogCiBtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKm1lNDYwMF9hb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKLQkJCQkJICAgICBzcGlubG9ja190ICogcHJlbG9hZF9yZWdfbG9jaywKLQkJCQkJICAgICB1aW50MzJfdCAqIHByZWxvYWRfZmxhZ3MsCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqcHJlbG9hZF9yZWdfbG9jaywKKwkJCQkJICAgICB1aW50MzJfdCAqcHJlbG9hZF9mbGFncywKIAkJCQkJICAgICBpbnQgYW9faWR4LCBpbnQgZmlmbywgaW50IGlycSkKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKQEAgLTU4MjMsNyArNTc5MCw3IEBACiAvKiBDb21tb24gZnVuY3Rpb25zCiAqLwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpCkBAIC01ODU4LDcgKzU4MjUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTU4NzYsNyArNTg0Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSkKQEAgLTU5MDAsNyArNTg2Nyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAogCQkJCSBsb25nIGxvbmcgKm1pbl90aWNrcywgbG9uZyBsb25nICptYXhfdGlja3MpCkBAIC01OTM0LDcgKzU5MDEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTU5NDcsNyArNTkxNCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtNTk2Miw3ICs1OTI5LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCWluc3RhbmNlID0gKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqKSBzdWJkZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmgKaW5kZXggNmZiYzRhMi4uNzU3OTQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uaApAQCAtMjI1LDExICsyMjUsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CQkJCS8qKjwgV2FpdCBxdWV1ZSB0byBwdXQgb24gdGFza3Mgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUuICovCiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWU0NjAwX3dvcmtxdWV1ZTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0Jc3RydWN0IHdvcmtfc3RydWN0IGFvX2NvbnRyb2xfdGFzazsKLSNlbHNlCiAJc3RydWN0IGRlbGF5ZWRfd29yayBhb19jb250cm9sX3Rhc2s7Ci0jZW5kaWYKIAogCXZvbGF0aWxlIGludCBhb19jb250cm9sX3Rhc2tfZmxhZzsJCQkvKio8IEZsYWcgY29udHJvbGluZyByZWV4ZWN1dGluZyBvZiBjb250cm9sIHRhc2sgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGV2aWNlLmMKaW5kZXggZmE0NTU4NC4uNDU3NjY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RldmljZS5jCkBAIC0zMzYsNiArMzM2LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWU0NjAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWU0NjAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0zNjgsNiArMzY5LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1FLTQ2eHggRGV2aWNlcyIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTQ2eHggRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTQ2MDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGkuYwppbmRleCA3ZTNjOWY0Li5lMTA3ZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaS5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTkxLDcgKzkxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE4NSw3ICsxODUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lNDYwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gMDsKQEAgLTIwMiw3ICsyMDIsNyBAQAogfQogCiBtZTQ2MDBfZGlfc3ViZGV2aWNlX3QgKm1lNDYwMF9kaV9jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKLQkJCQkJICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lNDYwMF9kaV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaW8uYwppbmRleCAwYWY5NWQxLi5iYWEyOGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGlvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTQsNyArOTQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMjY4LDcgKzI2OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzQyLDcgKzM0Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTQyNSw3ICs0MjUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00MzMsNyArNDMzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCiBtZTQ2MDBfZGlvX3N1YmRldmljZV90ICptZTQ2MDBfZGlvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpb19pZHgsCi0JCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU0NjAwX2Rpb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RvLmMKaW5kZXggZWU1OTFiYy4uMzk1MTBmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZG8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05Myw3ICs5Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMjI0LDcgKzIyNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTI4NCw3ICsyODQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzUyLDcgKzM1Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM2MCw3ICszNjAsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lNDYwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gMDsKQEAgLTM3Nyw3ICszNzcsNyBAQAogfQogCiBtZTQ2MDBfZG9fc3ViZGV2aWNlX3QgKm1lNDYwMF9kb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKLQkJCQkJICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lNDYwMF9kb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2V4dF9pcnEuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZXh0X2lycS5jCmluZGV4IGFkYzFlMWIuLjZiMzNjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZXh0X2lycS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZXh0X2lycS5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIApAQCAtNjAsNyArNjAsNyBAQAogICogRnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgaXJxX3NvdXJjZSwKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCAqaXJxX2NvdW50LApAQCAtMjE0LDcgKzIxNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsIGludCBmbGFncykKIHsKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAltZTQ2MDBfZXh0X2lycV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zMDgsNyArMzA4LDcgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJCWludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMxNiw3ICszMTYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzM1LDEyICszMzUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9leHRfaXJxX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9leHRfaXJxX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCi0JCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTQ2MDBfZXh0X2lycV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDMyX3QgY3RybDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uYwppbmRleCA5NGYwMTIzLi5mN2FiZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5jCkBAIC0zNiw4ICszNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTU3LDMxICs1NywzMSBAQAogLyogRGVmaW5lcwogICovCiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSk7CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCk7CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAogCQkJCSBsb25nIGxvbmcgKm1pbl90aWNrcywgbG9uZyBsb25nICptYXhfdGlja3MpOwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpOwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpOwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICpjYXBzKTsKIAogc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHNfYXJncyhzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UsCkBAIC05MSwxMSArOTEsMTEgQEAKIHN0YXRpYyB2b2lkIG1lNjAwMF9hb19kZXN0cnVjdG9yKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSk7CiAKIC8qKiBSZXNldCBzdWJkZXZpY2UuIFN0b3AgYWxsIGFjdGlvbnMuIFJlc2V0IHJlZ2lzdHJ5LiBEaXNhYmxlIEZJRk8uIFNldCBvdXRwdXQgdG8gMFYgYW5kIHN0YXR1cyB0byAnbm9uZScuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpOwogCiAvKiogU2V0IG91dHB1dCBhcyBzaW5nbGUgKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTA0LDg5ICsxMDQsODEgQEAKIAkJCQkgICAgICBpbnQgdHJpZ190eXBlLCBpbnQgdHJpZ19lZGdlLCBpbnQgZmxhZ3MpOwogCiAvKiogUGFzcyB0byB1c2VyIGFjdHVhbCB2YWx1ZSBvZiBvdXRwdXQuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAogLyoqIFdyaXRlIHRvIG91dHB1dCByZXF1ZWQgdmFsdWUuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKIC8qKiBTZXQgb3V0cHV0IGFzIHN0cmVhbWVkIGRldmljZS4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKTsKIAogLyoqIFdhaXQgZm9yIC8gQ2hlY2sgZW1wdHkgc3BhY2UgaW4gYnVmZmVyLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncyk7CiAKIC8qKiBTdGFydCBzdHJlYW1pbmcuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKIC8qKiBDaGVjayBhY3R1YWwgc3RhdGUuIC8gV2FpdCBmb3IgZW5kLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpOwogCiAvKiogU3RvcCBzdHJlYW1pbmcuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKTsKIAogLyoqIFdyaXRlIGRhdGFzIHRvIGJ1ZmZvci4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHdyaXRlX21vZGUsCiAJCQkJICAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKTsKIAogLyoqIEludGVycnVwdCBoYW5kbGVyLiBDb3B5IGZyb20gYnVmZmVyIHRvIEZJRk8uICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lNjAwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU2MDAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNlbmRpZgogCiAvKiogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyIHRvIGZpZm8gKGZhc3QpIGluIHdyYXBhcm91bmQgbW9kZS4gKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJICAgIGludCBzdGFydF9wb3MpOwogCiAvKiogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyIHRvIGZpZm8gKGZhc3QpLiovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGEobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkgaW50IHN0YXJ0X3Bvcyk7CiAKIC8qKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIgdG8gZmlmbyAoc2xvdykuKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCBzdGFydF9wb3MpOwogCiAvKiogQ29weSBkYXRhIGZyb20gdXNlciBzcGFjZSB0byBjaXJjdWxhciBidWZmZXIuICovCi1pbnQgaW5saW5lIGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgKnVzZXJfdmFsdWVzKTsKIAogLyoqIFN0b3AgcHJlc2VudGF0aW9uLiBQcmVzZXJ2ZSBGSUZPcy4gKi8KLWludCBpbmxpbmUgYW9fc3RvcF9pbW1lZGlhdGVseShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitpbmxpbmUgaW50IGFvX3N0b3BfaW1tZWRpYXRlbHkobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgdGltZW91dCBpbiBub24tYmxvY2tpbmcgbW9kZS4gKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi1zdGF0aWMgdm9pZCBtZTYwMDBfYW9fd29ya19jb250cm9sX3Rhc2sodm9pZCAqc3ViZGV2aWNlKTsKLSNlbHNlCiBzdGF0aWMgdm9pZCBtZTYwMDBfYW9fd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLSNlbmRpZgogCiAvKiBGdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTI3NCw3ICsyNjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNDczLDcgKzQ2NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTU1NSw3ICs1NDcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTAyNywxMSArMTAxOSwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0xMDYzLDcgKzEwNTUsNyBAQAogCX0KIAogCWlmIChmbGFncyAmIE1FX0lPX1NUUkVBTV9DT05GSUdfSEFSRFdBUkVfT05MWSkgewotCQlpZiAoIWZsYWdzICYgTUVfSU9fU1RSRUFNX0NPTkZJR19XUkFQQVJPVU5EKSB7CisJCWlmICghKGZsYWdzICYgTUVfSU9fU1RSRUFNX0NPTkZJR19XUkFQQVJPVU5EKSkgewogCQkJUEVSUk9SCiAJCQkgICAgKCJIYXJkd2FyZSBNRV9JT19TVFJFQU1fQ09ORklHX0hBUkRXQVJFX09OTFkgaGFzIHRvIGJlIHdpdGggTUVfSU9fU1RSRUFNX0NPTkZJR19XUkFQQVJPVU5ELlxuIik7CiAJCQlyZXR1cm4gTUVfRVJSTk9fSU5WQUxJRF9GTEFHUzsKQEAgLTEzNTksNyArMTM1MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncykKIHsKQEAgLTE0NDAsNyArMTQzMiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCiB7CkBAIC0xODg5LDcgKzE4ODEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKQpAQCAtMTk4Nyw3ICsxOTc5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKQogewkJCQkvLy8gQG5vdGUgU3RvcCB3b3JrIGFuZCBlbXB0eSBidWZmZXIgYW5kIEZJRk8KQEAgLTIwOTQsNyArMjA4Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgd3JpdGVfbW9kZSwKIAkJCQkgICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCkBAIC0yMzI0LDExICsyMzE2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lNjAwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTYwMDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlID0gZGV2X2lkOwogCXVpbnQzMl90IGlycV9zdGF0dXM7CkBAIC0yNTQ0LDkgKzI1MzIsOSBAQAogfQogCiBtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKm1lNjAwMF9hb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKLQkJCQkJICAgICBzcGlubG9ja190ICogcHJlbG9hZF9yZWdfbG9jaywKLQkJCQkJICAgICB1aW50MzJfdCAqIHByZWxvYWRfZmxhZ3MsCi0JCQkJCSAgICAgdWludDMyX3QgKiB0cmlnZ2VyaW5nX2ZsYWdzLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKnByZWxvYWRfcmVnX2xvY2ssCisJCQkJCSAgICAgdWludDMyX3QgKnByZWxvYWRfZmxhZ3MsCisJCQkJCSAgICAgdWludDMyX3QgKnRyaWdnZXJpbmdfZmxhZ3MsCiAJCQkJCSAgICAgaW50IGFvX2lkeCwKIAkJCQkJICAgICBpbnQgZmlmbywKIAkJCQkJICAgICBpbnQgaXJxLApAQCAtMjc5NywxMyArMjc4NSw4IEBACiAJc3ViZGV2aWNlLT5tZTYwMDBfd29ya3F1ZXVlID0gbWU2MDAwX3dxOwogCiAvKiB3b3JrcXVldWUgQVBJIGNoYW5nZWQgaW4ga2VybmVsIDIuNi4yMCAqLwotI2lmICggTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSApCi0JSU5JVF9XT1JLKCZzdWJkZXZpY2UtPmFvX2NvbnRyb2xfdGFzaywgbWU2MDAwX2FvX3dvcmtfY29udHJvbF90YXNrLAotCQkgICh2b2lkICopc3ViZGV2aWNlKTsKLSNlbHNlCiAJSU5JVF9ERUxBWUVEX1dPUksoJnN1YmRldmljZS0+YW9fY29udHJvbF90YXNrLAogCQkJICBtZTYwMDBfYW9fd29ya19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAKIAlpZiAoc3ViZGV2aWNlLT5maWZvKSB7CS8vU2V0IHNwZWVkCiAJCW91dGwoTUU2MDAwX0FPX01JTl9DSEFOX1RJQ0tTIC0gMSwgc3ViZGV2aWNlLT50aW1lcl9yZWcpOwpAQCAtMjgxNyw3ICsyODAwLDcgQEAKICoKICogQHBhcmFtIGluc3RhbmNlIFRoZSBzdWJkZXZpY2UgaW5zdGFuY2UgKHBvaW50ZXIpLgogKi8KLWludCBpbmxpbmUgYW9fc3RvcF9pbW1lZGlhdGVseShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK2lubGluZSBpbnQgYW9fc3RvcF9pbW1lZGlhdGVseShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzOwogCXVpbnQzMl90IGN0cmw7CkBAIC0yODI1LDEwICsyODA4LDExIEBACiAJaW50IGk7CiAJdWludDMyX3Qgc2luZ2xlX21hc2s7CiAKLQlzaW5nbGVfbWFzayA9Ci0JICAgIChpbnN0YW5jZS0+YW9faWR4IC0gTUU2MDAwX0FPX1NJTkdMRV9TVEFUVVNfT0ZGU0VUIDwKLQkgICAgIDApID8gMHgwMDAwIDogKDB4MDAwMSA8PCAoaW5zdGFuY2UtPmFvX2lkeCAtCi0JCQkJICAgICAgIE1FNjAwMF9BT19TSU5HTEVfU1RBVFVTX09GRlNFVCkpOworCWlmIChpbnN0YW5jZS0+YW9faWR4IDwgTUU2MDAwX0FPX1NJTkdMRV9TVEFUVVNfT0ZGU0VUKQorCQlzaW5nbGVfbWFzayA9IDB4MDAwMDsKKwllbHNlCisJCXNpbmdsZV9tYXNrID0gMHgwMDAxIDw8IChpbnN0YW5jZS0+YW9faWR4IC0KKwkJCQlNRTYwMDBfQU9fU0lOR0xFX1NUQVRVU19PRkZTRVQpOwogCiAJdGltZW91dCA9CiAJICAgIChpbnN0YW5jZS0+aGFyZHdhcmVfc3RvcF9kZWxheSA+CkBAIC0yODg3LDcgKzI4NzEsNyBAQAogKiBAcmV0dXJuIE9uIGVycm9yL3N1Y2Nlc3M6IDAuCU5vIGRhdGFzIHdlcmUgY29waWVkID0+IG5vIGRhdGEgaW4gYnVmZmVyLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fRklGT19CVUZGRVJfT1ZFUkZMT1cuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgICAgaW50IHN0YXJ0X3BvcykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0yOTUyLDcgKzI5MzYsNyBAQAogKiBAcmV0dXJuIE9uIGVycm9yL3N1Y2Nlc3M6IDAuCU5vIGRhdGFzIHdlcmUgY29waWVkID0+IG5vIGRhdGEgaW4gYnVmZmVyLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fRklGT19CVUZGRVJfT1ZFUkZMT1cuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGEobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJIGludCBzdGFydF9wb3MpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMzAyMiw3ICszMDA2LDcgQEAKICogQHJldHVybiBPbiBlcnJvci9zdWNjZXNzOiAwLglGSUZPIHdhcyBmdWxsIGF0IGJlZ2luaW5nLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fUklOR19CVUZGRVJfVU5ERUZGTE9XLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCBzdGFydF9wb3MpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHNsb3cgZnVuY3Rpb24hCiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMzA4MCw3ICszMDY0LDcgQEAKICogQHJldHVybiBPbiBzdWNjZXNzOiBOdW1iZXIgb2YgY29waWVkIHZhbHVlcy4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX0lOVEVSTkFMLgogKi8KLWludCBpbmxpbmUgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCAqdXNlcl92YWx1ZXMpCiB7CiAJaW50IGksIGVycjsKQEAgLTMxMDksMTMgKzMwOTMsNyBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1lNjAwMF9hb193b3JrX2NvbnRyb2xfdGFzaygKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JCQkJCSAgICAgICB2b2lkICpzdWJkZXZpY2UKLSNlbHNlCi0JCQkJCSAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsKLSNlbmRpZgotICAgICkKK3N0YXRpYyB2b2lkIG1lNjAwMF9hb193b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFncyA9IDA7CkBAIC0zMTI2LDEyICszMTA0LDggQEAKIAlpbnQgc2lnbmFsaW5nID0gMDsKIAl1aW50MzJfdCBzaW5nbGVfbWFzazsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlpbnN0YW5jZSA9IChtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKikgc3ViZGV2aWNlOwotI2Vsc2UKIAlpbnN0YW5jZSA9CiAJICAgIGNvbnRhaW5lcl9vZigodm9pZCAqKXdvcmssIG1lNjAwMF9hb19zdWJkZXZpY2VfdCwgYW9fY29udHJvbF90YXNrKTsKLSNlbmRpZgogCVBJTkZPKCI8JXM6ICVsZD4gZXhlY3V0ZWQuIGlkeD0lZFxuIiwgX19mdW5jX18sIGppZmZpZXMsCiAJICAgICAgaW5zdGFuY2UtPmFvX2lkeCk7CiAKQEAgLTM1NTUsNyArMzUyOSw3IEBACiAKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKQpAQCAtMzU4OSw3ICszNTYzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zNjA3LDcgKzM1ODEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpCkBAIC0zNjMxLDcgKzM2MDUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKIAkJCQkgbG9uZyBsb25nICptaW5fdGlja3MsIGxvbmcgbG9uZyAqbWF4X3RpY2tzKQpAQCAtMzY2MCw3ICszNjM0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zNjcyLDcgKzM2NDYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTM2OTAsNyArMzY2NCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAlpbnN0YW5jZSA9IChtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKikgc3ViZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5oIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5oCmluZGV4IDk2Mjk2NDkuLmVmNGQwMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmgKQEAgLTE2MCwxMSArMTYwLDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkJCS8qKjwgV2FpdCBxdWV1ZSB0byBwdXQgb24gdGFza3Mgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUuICovCiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWU2MDAwX3dvcmtxdWV1ZTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0Jc3RydWN0IHdvcmtfc3RydWN0IGFvX2NvbnRyb2xfdGFzazsKLSNlbHNlCiAJc3RydWN0IGRlbGF5ZWRfd29yayBhb19jb250cm9sX3Rhc2s7Ci0jZW5kaWYKIAogCXZvbGF0aWxlIGludCBhb19jb250cm9sX3Rhc2tfZmxhZzsJCS8qKjwgRmxhZyBjb250cm9saW5nIHJlZXhlY3V0aW5nIG9mIGNvbnRyb2wgdGFzayAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kZXZpY2UuYwppbmRleCBmZWU0YzU4Li4xYTZjZjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGV2aWNlLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTYwMDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTYwMDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTIwNiw2ICsyMDcsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTUUtNjAwMCBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS02MDAwIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWU2MDAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kaW8uYwppbmRleCAwN2YxMDY5Li5jOTA2ODZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGlvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTYxLDcgKzE2MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTMxNCw3ICszMTQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMzMSw3ICszMzEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM0MSw3ICszNDEsNyBAQAogCiBtZTYwMDBfZGlvX3N1YmRldmljZV90ICptZTYwMDBfZGlvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpb19pZHgsCi0JCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU2MDAwX2Rpb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kZXZpY2UuYwppbmRleCAxZmI3OWU0Li40MWE5MzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGV2aWNlLmMKQEAgLTE1OSw2ICsxNTksNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTgxMDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTgxMDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTE4Miw2ICsxODMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgVGVtcGxhdGUgRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgVGVtcGxhdGUgRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTgxMDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGkuYwppbmRleCA5NzE3MjdjLi4zMDFkYmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kaS5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpAQCAtMTE0LDcgKzExNCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IGNoYW5uZWwsCiAJCQkJICBpbnQgaXJxX3NvdXJjZSwKQEAgLTIwOCw3ICsyMDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSBpbnQgY2hhbm5lbCwKIAkJCQkgaW50ICppcnFfY291bnQsCkBAIC0zMTUsNyArMzE1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsIGludCBmbGFncykKIHsKIAltZTgxMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNDA1LDcgKzQwNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00NzQsNyArNDc0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTgxMDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IE1FX0NBUFNfRElPX0JJVF9QQVRURVJOX0lSUSB8IE1FX0NBUFNfRElPX0JJVF9NQVNLX0lSUV9FREdFX0FOWTsKQEAgLTUwMywxMSArNTAzLDcgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU4MTAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lODEwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lODEwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDMyX3QgaWNzcjsKQEAgLTU5OCw3ICs1OTQsNyBAQAogCQkJCQkgICAgIHVpbnQzMl90IHBseF9yZWdfYmFzZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGlfaWR4LAogCQkJCQkgICAgIGludCBpcnEsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTgxMDBfZGlfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kby5jCmluZGV4IDk1N2I5ZjkuLjgxNjUxYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTIsNyArOTIsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMDUsNyArMzA1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMxNCw3ICszMTQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTgxMDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IE1FX0NBUFNfRElPX1NJTktfU09VUkNFOwpAQCAtMzIzLDcgKzMyMyw3IEBACiAKIG1lODEwMF9kb19zdWJkZXZpY2VfdCAqbWU4MTAwX2RvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBkb19pZHgsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTgxMDBfZG9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGV2aWNlLmMKaW5kZXggMjYxYzBjYi4uYjMxMzY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RldmljZS5jCkBAIC0xNjYsNiArMTY2LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWU4MjAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWU4MjAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0xODksNiArMTkwLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIFRlbXBsYXRlIERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIFRlbXBsYXRlIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWU4MjAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RpLmMKaW5kZXggMjc1MjViYy4uYTkzMWZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGkuYwpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTUwLDUyICs1MCw0NCBAQAogCiAvLy8gRGVmaW5lcwogc3RhdGljIHZvaWQgbWU4MjAwX2RpX2Rlc3RydWN0b3Ioc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IGNoYW5uZWwsCiAJCQkJICBpbnQgaXJxX3NvdXJjZSwKIAkJCQkgIGludCBpcnFfZWRnZSwgaW50IGlycV9hcmcsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgaW50IGNoYW5uZWwsCiAJCQkJIGludCAqaXJxX2NvdW50LAogCQkJCSBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKIAkJCQkgICAgICBpbnQgcmVmLAogCQkJCSAgICAgIGludCB0cmlnX2NoYW4sCiAJCQkJICAgICAgaW50IHRyaWdfdHlwZSwgaW50IHRyaWdfZWRnZSwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogc3RhdGljIGludCBtZTgyMDBfZGlfaW9fcmVzZXRfc3ViZGV2aWNlKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICpjYXBzKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3JfRVgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcl9FWChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNlbmRpZgotc3RhdGljIHZvaWQgbWU4MjAwX2RpX2NoZWNrX3ZlcnNpb24obWU4MjAwX2RpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCitzdGF0aWMgdm9pZCBtZTgyMDBfZGlfY2hlY2tfdmVyc2lvbihtZTgyMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpOwogCiAvLy9GdW5jdGlvbnMKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IGNoYW5uZWwsCiAJCQkJICBpbnQgaXJxX3NvdXJjZSwKQEAgLTI0Niw3ICsyMzgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSBpbnQgY2hhbm5lbCwKIAkJCQkgaW50ICppcnFfY291bnQsCkBAIC0zNTIsNyArMzQ0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsIGludCBmbGFncykKIHsKIAltZTgyMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtNDA2LDcgKzM5OCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNDUzLDcgKzQ0NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTUxOCw3ICs1MTAsNyBAQAogCXJldHVybiBtZTgyMDBfZGlfaW9faXJxX3N0b3Aoc3ViZGV2aWNlLCBmaWxlcCwgMCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC01MjYsNyArNTE4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTUzNSw3ICs1MjcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9CkBAIC01NDYsMTEgKzUzOCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lODIwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDhfdCBjdHJsOwpAQCAtNjI5LDExICs2MTcsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyX0VYKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcl9FWChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWU4MjAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50OF90IGlycV9zdGF0dXMgPSAwOwpAQCAtNzE1LDggKzY5OSw4IEBACiBtZTgyMDBfZGlfc3ViZGV2aWNlX3QgKm1lODIwMF9kaV9jb25zdHJ1Y3Rvcih1aW50MzJfdCBtZTgyMDBfcmVnYmFzZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGlfaWR4LAogCQkJCQkgICAgIGludCBpcnEsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGlycV9jdHJsX2xvY2ssCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGlycV9tb2RlX2xvY2spCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqaXJxX2N0cmxfbG9jaywKKwkJCQkJICAgICBzcGlubG9ja190ICppcnFfbW9kZV9sb2NrKQogewogCW1lODIwMF9kaV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CkBAIC04NDMsNyArODI3LDcgQEAKIAlyZXR1cm4gc3ViZGV2aWNlOwogfQogCi1zdGF0aWMgdm9pZCBtZTgyMDBfZGlfY2hlY2tfdmVyc2lvbihtZTgyMDBfZGlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK3N0YXRpYyB2b2lkIG1lODIwMF9kaV9jaGVja192ZXJzaW9uKG1lODIwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGlvLmMKaW5kZXggZmY4Y2ExYi4uYzdmNDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2Rpby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTkwLDcgKzkwLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTI0MSw3ICsyNDEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zMzIsNyArMzMyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNDksNyArMzQ5LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNTksNyArMzU5LDcgQEAKIAogbWU4MjAwX2Rpb19zdWJkZXZpY2VfdCAqbWU4MjAwX2Rpb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkaW9faWR4LAotCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lODIwMF9kaW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kby5jCmluZGV4IGQyYmViZDEuLjQwZDUzNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RvLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCkBAIC01OSw3ICs1OSw3IEBACiAgKiBGdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW50IG1lODIwMF9kb19pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBjaGFubmVsLAogCQkJCSAgaW50IGlycV9zb3VyY2UsCkBAIC0xMDksNyArMTA5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgaW50IGNoYW5uZWwsCiAJCQkJIGludCAqaXJxX2NvdW50LApAQCAtMTg0LDcgKzE4NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9faW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLCBpbnQgZmxhZ3MpCiB7CiAJbWU4MjAwX2RvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTI2Miw3ICsyNjIsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTMwNyw3ICszMDcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTQxNSw3ICs0MTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00MjMsNyArNDIzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQzMiw3ICs0MzIsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTgyMDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IE1FX0NBUFNfRElPX09WRVJfVEVNUF9JUlE7CkBAIC00NTIsMTEgKzQ1Miw3IEBACiAJa2ZyZWUoaW5zdGFuY2UpOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lODIwMF9kb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfZG9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTgyMDBfZG9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQxNl90IGN0cmw7CkBAIC01MDUsNyArNTAxLDcgQEAKIG1lODIwMF9kb19zdWJkZXZpY2VfdCAqbWU4MjAwX2RvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBkb19pZHgsCiAJCQkJCSAgICAgaW50IGlycSwKLQkJCQkJICAgICBzcGlubG9ja190ICogaXJxX21vZGVfbG9jaykKKwkJCQkJICAgICBzcGlubG9ja190ICppcnFfbW9kZV9sb2NrKQogewogCW1lODIwMF9kb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU0LmMKaW5kZXggNmU0NGMzZC4uZDhmNzQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTQuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC0xODMsNyArMTgzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMTQwMF9hYl9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgcmVmKQorc3RhdGljIGludCBtZTE0MDBfYWJfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgcmVmKQogewogCXVpbnQ4X3QgY2xrX3NyYzsKIApAQCAtMjkxLDcgKzI5MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNDAwX2NkX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCByZWYpCitzdGF0aWMgaW50IG1lMTQwMF9jZF9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCByZWYpCiB7CiAJdWludDhfdCBjbGtfc3JjOwogCkBAIC00MzYsNyArNDM2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IHJlZikKK3N0YXRpYyBpbnQgbWU0NjAwX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IHJlZikKIHsKIAlzd2l0Y2ggKHJlZikgewogCkBAIC00NTMsNyArNDUzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IHJlZikKK3N0YXRpYyBpbnQgbWU4MTAwX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IHJlZikKIHsKIAlzd2l0Y2ggKHJlZikgewogCkBAIC05NjIsOCArOTYyLDggQEAKIAkJCQkgICAgICAgdWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBtZTgyNTRfaWR4LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3RyX2lkeCwKLQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2ssCi0JCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjbGtfc3JjX3JlZ19sb2NrKQorCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrLAorCQkJCSAgICAgICBzcGlubG9ja190ICpjbGtfc3JjX3JlZ19sb2NrKQogewogCW1lODI1NF9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU1LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU1LmMKaW5kZXggMTgwZTdmOC4uZWM5YzYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTUuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG1lODI1NV9pZHgsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBkaW9faWR4LAogCQkJCSAgICAgICBpbnQgKmN0cmxfcmVnX21pcnJvciwKLQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU4MjU1X3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWNpcmNfYnVmLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVjaXJjX2J1Zi5oCmluZGV4IGU5YjU5MWUuLjUxNjY1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWNpcmNfYnVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lY2lyY19idWYuaApAQCAtNDAsMTkgKzQwLDE5IEBACiAJaW50IHZvbGF0aWxlIHRhaWw7CiB9IG1lX2NpcmNfYnVmX3Q7CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3ZhbHVlcyhtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfdmFsdWVzKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAvLyAgICAgIHJldHVybiAoKGJ1Zi0+aGVhZCAtIGJ1Zi0+dGFpbCkgJiAoYnVmLT5jb3VudCAtIDEpKTsKIAlyZXR1cm4gKChidWYtPmhlYWQgLSBidWYtPnRhaWwpICYgKGJ1Zi0+bWFzaykpOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl9zcGFjZShtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfc3BhY2UobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIC8vICAgICAgcmV0dXJuICgoYnVmLT50YWlsIC0gKGJ1Zi0+aGVhZCArIDEpKSAmIChidWYtPmNvdW50IC0gMSkpOwogCXJldHVybiAoKGJ1Zi0+dGFpbCAtIChidWYtPmhlYWQgKyAxKSkgJiAoYnVmLT5tYXNrKSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3ZhbHVlc190b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3ZhbHVlc190b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIAlpbnQgZW5kOwogCWludCBuOwpAQCAtNjMsNyArNjMsNyBAQAogCXJldHVybiAobiA8IGVuZCkgPyBuIDogZW5kOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl9zcGFjZV90b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3NwYWNlX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQogewogCWludCBlbmQ7CiAJaW50IG47CkBAIC05OSwxOSArOTksMTkgQEAKICMgICBlbmRpZiAvL19DQlVGRl8zMmJfdAogCiAvKiogSG93IG1hbnkgdmFsdWVzIGlzIGluIGJ1ZmZlciAqLwotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfdmFsdWVzKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl92YWx1ZXMobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIAlyZXR1cm4gKChidWYtPmhlYWQgLSBidWYtPnRhaWwpICYgKGJ1Zi0+bWFzaykpOwogfQogCiAvKiogSG93IG1hbnkgc3BhY2UgbGVmdCAqLwotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfc3BhY2UobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3NwYWNlKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAJcmV0dXJuICgoYnVmLT50YWlsIC0gKGJ1Zi0+aGVhZCArIDEpKSAmIChidWYtPm1hc2spKTsKIH0KIAogLyoqIEhvdyBtYW55IHZhbHVlcyBjYW4gYmUgcmVhZCBmcm9tIGJ1ZmZvciBpbiBvbmUgY2h1bmNrLiAqLwotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfdmFsdWVzX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfdmFsdWVzX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQogewogCXJldHVybiAoYnVmLT50YWlsIDw9CiAJCWJ1Zi0+aGVhZCkgPyAoYnVmLT5oZWFkIC0gYnVmLT50YWlsKSA6IChidWYtPm1hc2sgLSBidWYtPnRhaWwgKwpAQCAtMTE5LDcgKzExOSw3IEBACiB9CiAKIC8qKiBIb3cgbWFueSB2YWx1ZXMgY2FuIGJlIHdyaXRlIHRvIGJ1ZmZlciBpbiBvbmUgY2h1bmNrLiAqLwotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfc3BhY2VfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl9zcGFjZV90b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIAlyZXR1cm4gKGJ1Zi0+dGFpbCA8PQogCQlidWYtPmhlYWQpID8gKGJ1Zi0+bWFzayAtIGJ1Zi0+aGVhZCArIDEpIDogKGJ1Zi0+dGFpbCAtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRldmljZS5jCmluZGV4IDhmNjJlMTYuLjc1YWFlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRldmljZS5jCkBAIC0zOTAsOSArMzkwLDkgQEAKIHN0YXRpYyBpbnQgbWVfZGV2aWNlX2lvX3N0cmVhbV9jb25maWcoc3RydWN0IG1lX2RldmljZSAqZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgc3ViZGV2aWNlLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCWludCBlcnIgPSBNRV9FUlJOT19TVUNDRVNTOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAkJCQkgaW50IHN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAotCQkJCSB1aW50NjRfdCAqIG1pbl90aWNrcywgdWludDY0X3QgKiBtYXhfdGlja3MpCisJCQkJIHVpbnQ2NF90ICptaW5fdGlja3MsIHVpbnQ2NF90ICptYXhfdGlja3MpCiB7CiAJaW50IGVyciA9IE1FX0VSUk5PX1NVQ0NFU1M7CiAJbWVfc3ViZGV2aWNlX3QgKnM7CkBAIC0xMDgyLDE0ICsxMDgyLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgbWVfZGV2aWNlX2NvbmZpZ19sb2FkKHN0cnVjdCBtZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKiBjb25maWcpCisJCQkJIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqY29uZmlnKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsJLy9JZiBubyBuZWVkIGZvciBjb25maWcgcmV0dXJuIHN1Y2Nlc3MuCiAvLyAgICAgIHJldHVybiBNRV9FUlJOT19OT1RfU1VQUE9SVEVEOwogfQogCi1zdGF0aWMgdm9pZCBtZV9kZXZpY2VfZGVzdHJ1Y3RvcihtZV9kZXZpY2VfdCAqIG1lX2RldmljZSkKK3N0YXRpYyB2b2lkIG1lX2RldmljZV9kZXN0cnVjdG9yKG1lX2RldmljZV90ICptZV9kZXZpY2UpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCW1lX2RldmljZV9kZWluaXQobWVfZGV2aWNlKTsKQEAgLTE1ODEsNyArMTU4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBtZV9kZXZpY2VfcGNpX2luaXQobWVfZGV2aWNlX3QgKiBtZV9kZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlKQoraW50IG1lX2RldmljZV9wY2lfaW5pdChtZV9kZXZpY2VfdCAqbWVfZGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZSkKIHsKIAlpbnQgZXJyOwogCWludCBpOwpAQCAtMTcyMCw3ICsxNzIwLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBtZV9kZXZpY2VfZGVpbml0KG1lX2RldmljZV90ICogbWVfZGV2aWNlKQordm9pZCBtZV9kZXZpY2VfZGVpbml0KG1lX2RldmljZV90ICptZV9kZXZpY2UpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbGlzdC5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxpc3QuYwppbmRleCBlZjRlMzY5Li5iNmE0MDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbGlzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsaXN0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlyZXR1cm4gZGV2aWNlOwogfQogCi12b2lkIG1lX2RsaXN0X2FkZF9kZXZpY2VfdGFpbChzdHJ1Y3QgbWVfZGxpc3QgKmRsaXN0LCBtZV9kZXZpY2VfdCAqIGRldmljZSkKK3ZvaWQgbWVfZGxpc3RfYWRkX2RldmljZV90YWlsKHN0cnVjdCBtZV9kbGlzdCAqZGxpc3QsIG1lX2RldmljZV90ICpkZXZpY2UpCiB7CiAJUERFQlVHX0xPQ0tTKCJjYWxsZWQuXG4iKTsKIApAQCAtOTksNyArOTksNyBAQAogCXJldHVybiBkZXZpY2U7CiB9CiAKLWludCBtZV9kbGlzdF9pbml0KG1lX2RsaXN0X3QgKiBkbGlzdCkKK2ludCBtZV9kbGlzdF9pbml0KG1lX2RsaXN0X3QgKmRsaXN0KQogewogCVBERUJVR19MT0NLUygiY2FsbGVkLlxuIik7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1lX2RsaXN0X2RlaW5pdChtZV9kbGlzdF90ICogZGxpc3QpCit2b2lkIG1lX2RsaXN0X2RlaW5pdChtZV9kbGlzdF90ICpkbGlzdCkKIHsKIAogCXN0cnVjdCBsaXN0X2hlYWQgKnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxvY2suYwppbmRleCBmNjQ5ZTNkLi44ZGVkMzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbG9jay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsb2NrLmMKQEAgLTY1LDcgKzY1LDcgQEAKIH0KIAogaW50IG1lX2Rsb2NrX2xvY2soc3RydWN0IG1lX2Rsb2NrICpkbG9jaywKLQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBsb2NrLCBpbnQgZmxhZ3MsIG1lX3NsaXN0X3QgKiBzbGlzdCkKKwkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBsb2NrLCBpbnQgZmxhZ3MsIG1lX3NsaXN0X3QgKnNsaXN0KQogewogCWludCBlcnIgPSBNRV9FUlJOT19TVUNDRVNTOwogCWludCBpOwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJUERFQlVHX0xPQ0tTKCJleGVjdXRlZC5cbiIpOwogfQogCi1pbnQgbWVfZGxvY2tfaW5pdChtZV9kbG9ja190ICogZGxvY2spCitpbnQgbWVfZGxvY2tfaW5pdChtZV9kbG9ja190ICpkbG9jaykKIHsKIAlQREVCVUdfTE9DS1MoImV4ZWN1dGVkLlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWR1bW15LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkdW1teS5jCmluZGV4IDZhOWYwOGQuLjI0MjM3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWR1bW15LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZHVtbXkuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAjaW5jbHVkZSAibWVkdW1teS5oIgogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9faXJxX3N0YXJ0KG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX2lycV9zdGFydChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQlpbnQgc3ViZGV2aWNlLAogCQkJCWludCBjaGFubmVsLApAQCAtNTgsNyArNTgsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9faXJxX3dhaXQobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9faXJxX3dhaXQobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkgICAgICAgaW50IHN1YmRldmljZSwKIAkJCSAgICAgICBpbnQgY2hhbm5lbCwKQEAgLTY5LDcgKzY5LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX2lycV9zdG9wKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX2lycV9zdG9wKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJICAgICAgIGludCBzdWJkZXZpY2UsIGludCBjaGFubmVsLCBpbnQgZmxhZ3MpCiB7CkBAIC03NywxNCArNzcsMTQgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3Jlc2V0X2RldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19yZXNldF9kZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19yZXNldF9zdWJkZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBzdWJkZXZpY2UsIGludCBmbGFncykKIHsKQEAgLTkyLDcgKzkyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3NpbmdsZV9jb25maWcobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc2luZ2xlX2NvbmZpZyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdWJkZXZpY2UsCiAJCQkJICAgIGludCBjaGFubmVsLApAQCAtMTA1LDcgKzEwNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zaW5nbGVfcmVhZChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zaW5nbGVfcmVhZChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IHN1YmRldmljZSwKIAkJCQkgIGludCBjaGFubmVsLApAQCAtMTE1LDcgKzExNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zaW5nbGVfd3JpdGUobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc2luZ2xlX3dyaXRlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgIGludCBzdWJkZXZpY2UsCiAJCQkJICAgaW50IGNoYW5uZWwsCkBAIC0xMjUsMTkgKzEyNSwxOSBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX2NvbmZpZyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fY29uZmlnKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN1YmRldmljZSwKLQkJCQkgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgIGludCBjb3VudCwKLQkJCQkgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCWludCBzdWJkZXZpY2UsCiAJCQkJCWludCB0aW1lb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9yZWFkKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9yZWFkKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgaW50IHJlYWRfbW9kZSwKQEAgLTE1Niw3ICsxNTYsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3N0YXJ0KG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9zdGFydChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3N0YXR1cyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fc3RhdHVzKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN1YmRldmljZSwKIAkJCQkgICAgaW50IHdhaXQsCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9zdG9wKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9zdG9wKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgc3ViZGV2aWNlLCBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpCiB7CkBAIC0xODMsNyArMTgzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV93cml0ZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fd3JpdGUobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgaW50IHN1YmRldmljZSwKIAkJCQkgICBpbnQgd3JpdGVfbW9kZSwKQEAgLTE5MywxNCArMTkzLDE0IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9sb2NrX2RldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9sb2NrX2RldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGxvY2ssIGludCBmbGFncykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9sb2NrX3N1YmRldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9sb2NrX3N1YmRldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IHN1YmRldmljZSwgaW50IGxvY2ssIGludCBmbGFncykKIHsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfZGVzY3JpcHRpb25fZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X2Rlc2NyaXB0aW9uX2RldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQkgICAgY2hhciAqKmRlc2NyaXB0aW9uKQogewogCW1lZHVtbXlfZGV2aWNlX3QgKmluc3RhbmNlID0gKG1lZHVtbXlfZGV2aWNlX3QgKikgZGV2aWNlOwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9pbmZvX2RldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9pbmZvX2RldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICAgaW50ICp2ZW5kb3JfaWQsCiAJCQkJICAgICBpbnQgKmRldmljZV9pZCwKIAkJCQkgICAgIGludCAqc2VyaWFsX25vLApAQCAtNjMyLDE0ICs2MzIsMTQgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X25hbWVfZGV2aWNlX2RyaXZlcihtZV9kZXZpY2VfdCAqIGRldmljZSwgY2hhciAqKm5hbWUpCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbmFtZV9kZXZpY2VfZHJpdmVyKG1lX2RldmljZV90ICpkZXZpY2UsIGNoYXIgKipuYW1lKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqbmFtZSA9IE1FRFVNTVlfTkFNRV9EUklWRVI7CiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9uYW1lX2RldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwgY2hhciAqKm5hbWUpCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbmFtZV9kZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwgY2hhciAqKm5hbWUpCiB7CiAJbWVkdW1teV9kZXZpY2VfdCAqaW5zdGFuY2UgPSAobWVkdW1teV9kZXZpY2VfdCAqKSBkZXZpY2U7CiAKQEAgLTEwMTIsNDEgKzEwMTIsNDEgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X251bWJlcl9zdWJkZXZpY2VzKG1lX2RldmljZV90ICogZGV2aWNlLCBpbnQgKm51bWJlcikKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9udW1iZXJfc3ViZGV2aWNlcyhtZV9kZXZpY2VfdCAqZGV2aWNlLCBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCSBpbnQgc3ViZGV2aWNlLCBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgICAgaW50IHN1YmRldmljZSwgaW50IHVuaXQsIGludCAqY291bnQpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJaW50IHN1YmRldmljZSwgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJaW50IHN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV9jYXBzX2FyZ3MobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX2NhcHNfYXJncyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQkgICAgIGludCBzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50IGNhcCwgaW50ICphcmdzLCBpbnQgY291bnQpCiB7CkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogCXJldHVybiBNRV9FUlJOT19OT1RfU1VQUE9SVEVEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX2J5X3R5cGUobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX2J5X3R5cGUobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJICAgaW50IHN0YXJ0X3N1YmRldmljZSwKIAkJCQkJICAgaW50IHR5cGUsCiAJCQkJCSAgIGludCBzdWJ0eXBlLCBpbnQgKnN1YmRldmljZSkKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJICBpbnQgc3ViZGV2aWNlLAogCQkJCQkgIGludCB1bml0LAogCQkJCQkgIGludCAqbWluLApAQCAtMTA3Myw3ICsxMDczLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3JhbmdlX2luZm8obWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfcmFuZ2VfaW5mbyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgICBpbnQgcmFuZ2UsCiAJCQkJICAgIGludCAqdW5pdCwgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpCkBAIC0xMDgyLDE3ICsxMDgyLDE3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLWludCBtZWR1bW15X3F1ZXJ5X3RpbWVyKG1lX2RldmljZV90ICogZGV2aWNlLAoraW50IG1lZHVtbXlfcXVlcnlfdGltZXIobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCWludCBzdWJkZXZpY2UsCiAJCQlpbnQgdGltZXIsCiAJCQlpbnQgKmJhc2VfZnJlcXVlbmN5LAotCQkJdWludDY0X3QgKiBtaW5fdGlja3MsIHVpbnQ2NF90ICogbWF4X3RpY2tzKQorCQkJdWludDY0X3QgKm1pbl90aWNrcywgdWludDY0X3QgKm1heF90aWNrcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV92ZXJzaW9uX2RldmljZV9kcml2ZXIobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfdmVyc2lvbl9kZXZpY2VfZHJpdmVyKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCSAgICAgICBpbnQgKnZlcnNpb24pCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIHZvaWQgbWVkdW1teV9kZXN0cnVjdG9yKG1lX2RldmljZV90ICogZGV2aWNlKQorc3RhdGljIHZvaWQgbWVkdW1teV9kZXN0cnVjdG9yKG1lX2RldmljZV90ICpkZXZpY2UpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCWtmcmVlKGRldmljZSk7CkBAIC0xMTEzLDcgKzExMTMsNyBAQAogCQkJICAgIGludCBidXNfdHlwZSwKIAkJCSAgICBpbnQgYnVzX25vLAogCQkJICAgIGludCBkZXZfbm8sCi0JCQkgICAgaW50IGZ1bmNfbm8sIG1lZHVtbXlfZGV2aWNlX3QgKiBpbnN0YW5jZSkKKwkJCSAgICBpbnQgZnVuY19ubywgbWVkdW1teV9kZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCkBAIC0xMTI5LDE0ICsxMTI5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9jb25maWdfbG9hZChtZV9kZXZpY2VfdCAqIGRldmljZSwgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJICAgICAgIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqIGNvbmZpZykKK3N0YXRpYyBpbnQgbWVkdW1teV9jb25maWdfbG9hZChtZV9kZXZpY2VfdCAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCisJCQkgICAgICAgbWVfY2ZnX2RldmljZV9lbnRyeV90ICpjb25maWcpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IGluaXRfZGV2aWNlX2luc3RhbmNlKG1lX2RldmljZV90ICogZGV2aWNlKQorc3RhdGljIGludCBpbml0X2RldmljZV9pbnN0YW5jZShtZV9kZXZpY2VfdCAqZGV2aWNlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIApAQCAtMTIzOCw2ICsxMjM4LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgaW5zdGFuY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lZHVtbXlfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMTI2MSw2ICsxMjYyLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1laWxoYXVzIE1FLURVTU1ZIERldmljZXMiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS1EVU1NWSBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lZHVtbXlfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lbWFpbi5jCmluZGV4IGIwOWQxYTYuLmZkOWYwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZW1haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVtYWluLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIC8vI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAKQEAgLTU2LDYgKzU2LDcgQEAKIAogI2lmZGVmIEJPU0NICiBzdGF0aWMgdW5zaWduZWQgaW50IG1lX2Jvc2NoX2Z3ID0gMDsKK0VYUE9SVF9TWU1CT0wobWVfYm9zY2hfZncpOwogCiAjIGlmZGVmIG1vZHVsZV9wYXJhbQogbW9kdWxlX3BhcmFtKG1lX2Jvc2NoX2Z3LCBpbnQsIFNfSVJVR08pOwpAQCAtNzksNyArODAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGZpbGUgKm1lX2ZpbGVwID0gTlVMTDsKIHN0YXRpYyBpbnQgbWVfY291bnQgPSAwOwotc3RhdGljIHNwaW5sb2NrX3QgbWVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWVfbG9jayk7CiBzdGF0aWMgREVDTEFSRV9SV1NFTShtZV9yd3NlbSk7CiAKIC8qIEJvYXJkIGluc3RhbmNlcyBhcmUga2VwdCBpbiBhIGdsb2JhbCBsaXN0ICovCkBAIC05MCw3ICs5MSw3IEBACiAKIHN0YXRpYyBpbnQgbWVfcHJvYmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCBtZV9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotc3RhdGljIGludCBpbnNlcnRfdG9fZGV2aWNlX2xpc3QobWVfZGV2aWNlX3QgKiBuX2RldmljZSk7CitzdGF0aWMgaW50IGluc2VydF90b19kZXZpY2VfbGlzdChtZV9kZXZpY2VfdCAqbl9kZXZpY2UpOwogc3RhdGljIGludCByZXBsYWNlX3dpdGhfZHVtbXkoaW50IHZlbmRvcl9pZCwgaW50IGRldmljZV9pZCwgaW50IHNlcmlhbF9ubyk7CiBzdGF0aWMgdm9pZCBjbGVhcl9kZXZpY2VfbGlzdCh2b2lkKTsKIHN0YXRpYyBpbnQgbWVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlX3B0ciwgc3RydWN0IGZpbGUgKmZpbGVwKTsKQEAgLTQ3Miw3ICs0NzMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgdm9pZCByZWxlYXNlX2luc3RhbmNlKG1lX2RldmljZV90ICogZGV2aWNlKQorc3RhdGljIHZvaWQgcmVsZWFzZV9pbnN0YW5jZShtZV9kZXZpY2VfdCAqZGV2aWNlKQogewogCWludCB2ZW5kb3JfaWQ7CiAJaW50IGRldmljZV9pZDsKQEAgLTUxNyw3ICs1MTgsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpbnNlcnRfdG9fZGV2aWNlX2xpc3QobWVfZGV2aWNlX3QgKiBuX2RldmljZSkKK3N0YXRpYyBpbnQgaW5zZXJ0X3RvX2RldmljZV9saXN0KG1lX2RldmljZV90ICpuX2RldmljZSkKIHsKIAltZV9kZXZpY2VfdCAqb19kZXZpY2UgPSBOVUxMOwogCkBAIC03NjIsNyArNzYzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lX2xvY2tfZHJpdmVyKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfbG9ja19kcml2ZXJfdCAqIGFyZykKK3N0YXRpYyBpbnQgbWVfbG9ja19kcml2ZXIoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9sb2NrX2RyaXZlcl90ICphcmcpCiB7CiAJaW50IGVyciA9IDA7CiAKQEAgLTgwNyw3ICs4MDgsNyBAQAogfQogCiBzdGF0aWMgaW50IG1lX3F1ZXJ5X3ZlcnNpb25fbWFpbl9kcml2ZXIoc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCQltZV9xdWVyeV92ZXJzaW9uX21haW5fZHJpdmVyX3QgKiBhcmcpCisJCQkJCW1lX3F1ZXJ5X3ZlcnNpb25fbWFpbl9kcml2ZXJfdCAqYXJnKQogewogCWludCBlcnI7CiAJbWVfcXVlcnlfdmVyc2lvbl9tYWluX2RyaXZlcl90IGthcmc7CkBAIC04MjgsNyArODI5LDcgQEAKIH0KIAogc3RhdGljIGludCBtZV9jb25maWdfbG9hZF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKiBrYXJnLCBpbnQgZGV2aWNlX25vKQorCQkJCSBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKmthcmcsIGludCBkZXZpY2Vfbm8pCiB7CiAKIAlpbnQgZXJyID0gTUVfRVJSTk9fU1VDQ0VTUzsKQEAgLTg3NCw3ICs4NzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWVfY29uZmlnX2xvYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9jb25maWdfbG9hZF90ICogYXJnKQorc3RhdGljIGludCBtZV9jb25maWdfbG9hZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2NvbmZpZ19sb2FkX3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCWludCBpOwpAQCAtMTE3MCw3ICsxMTcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZV9pb19zdHJlYW1fc3RhcnQoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zdHJlYW1fc3RhcnRfdCAqIGFyZykKK3N0YXRpYyBpbnQgbWVfaW9fc3RyZWFtX3N0YXJ0KHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc3RyZWFtX3N0YXJ0X3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCWludCBpLCBrOwpAQCAtMTI5Miw3ICsxMjkzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lX2lvX3NpbmdsZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3NpbmdsZV90ICogYXJnKQorc3RhdGljIGludCBtZV9pb19zaW5nbGUoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zaW5nbGVfdCAqYXJnKQogewogCWludCBlcnI7CiAJaW50IGksIGs7CkBAIC0xNDQ4LDcgKzE0NDksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWVfaW9fc3RyZWFtX2NvbmZpZyhzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3N0cmVhbV9jb25maWdfdCAqIGFyZykKK3N0YXRpYyBpbnQgbWVfaW9fc3RyZWFtX2NvbmZpZyhzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3N0cmVhbV9jb25maWdfdCAqYXJnKQogewogCWludCBlcnI7CiAJaW50IGsgPSAwOwpAQCAtMTU0MCw3ICsxNTQxLDcgQEAKIH0KIAogc3RhdGljIGludCBtZV9xdWVyeV9udW1iZXJfZGV2aWNlcyhzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgbWVfcXVlcnlfbnVtYmVyX2RldmljZXNfdCAqIGFyZykKKwkJCQkgICBtZV9xdWVyeV9udW1iZXJfZGV2aWNlc190ICphcmcpCiB7CiAJaW50IGVycjsKIAltZV9xdWVyeV9udW1iZXJfZGV2aWNlc190IGthcmc7CkBAIC0xNTY5LDcgKzE1NzAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lX2lvX3N0cmVhbV9zdG9wKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc3RyZWFtX3N0b3BfdCAqIGFyZykKK3N0YXRpYyBpbnQgbWVfaW9fc3RyZWFtX3N0b3Aoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zdHJlYW1fc3RvcF90ICphcmcpCiB7CiAJaW50IGVycjsKIAlpbnQgaSwgazsKQEAgLTIwMTUsOCArMjAxNiwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkNlbnRyYWwgbW9kdWxlIGZvciBNZWlsaGF1cyBEcml2ZXIgU3lzdGVtLiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIFBDSS9jUENJIGJvYXJkcy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2lmZGVmIEJPU0NICi0vLyBFeHBvcnQgdGhlIGZsYWcgZm9yIHRoZSBCT1NDSCBmaXJtd2FyZS4KLUVYUE9SVF9TWU1CT0wobWVfYm9zY2hfZncpOwotI2VuZGlmIC8vIEJPU0NICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbGlzdC5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xpc3QuYwppbmRleCA3ZThiNjZjLi5jZTQ5MTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbGlzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsaXN0LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogfQogCiB2b2lkIG1lX3NsaXN0X2FkZF9zdWJkZXZpY2VfdGFpbChzdHJ1Y3QgbWVfc2xpc3QgKnNsaXN0LAotCQkJCSBtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSkKKwkJCQkgbWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSkKIHsKIAlQREVCVUdfTE9DS1MoImNhbGxlZC5cbiIpOwogCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gc3ViZGV2aWNlOwogfQogCi1pbnQgbWVfc2xpc3RfaW5pdChtZV9zbGlzdF90ICogc2xpc3QpCitpbnQgbWVfc2xpc3RfaW5pdChtZV9zbGlzdF90ICpzbGlzdCkKIHsKIAlQREVCVUdfTE9DS1MoImNhbGxlZC5cbiIpOwogCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtZV9zbGlzdF9kZWluaXQobWVfc2xpc3RfdCAqIHNsaXN0KQordm9pZCBtZV9zbGlzdF9kZWluaXQobWVfc2xpc3RfdCAqc2xpc3QpCiB7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsb2NrLmMKaW5kZXggNTIzMGI4OS4uYWJjZGI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xvY2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbG9jay5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlQREVCVUdfTE9DS1MoImV4ZWN1dGVkLlxuIik7CiB9CiAKLWludCBtZV9zbG9ja19pbml0KG1lX3Nsb2NrX3QgKiBzbG9jaykKK2ludCBtZV9zbG9ja19pbml0KG1lX3Nsb2NrX3QgKnNsb2NrKQogewogCVBERUJVR19MT0NLUygiZXhlY3V0ZWQuXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc3ViZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzdWJkZXZpY2UuYwppbmRleCA5OGQ0ZjFmLi5iMmU5NTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzdWJkZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzdWJkZXZpY2UuYwpAQCAtMTAxLDkgKzEwMSw5IEBACiAKIHN0YXRpYyBpbnQgbWVfc3ViZGV2aWNlX2lvX3N0cmVhbV9jb25maWcoc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlLAogCQkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCQkgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJCSBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCQkgaW50IGNvdW50LAotCQkJCQkgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJCSBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCQkgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiBNRV9FUlJOT19OT1RfU1VQUE9SVEVEOwogfQogCi1zdGF0aWMgaW50IG1lX3N1YmRldmljZV9sb2NrX3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWVfc3ViZGV2aWNlX2xvY2tfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGxvY2ssIGludCBmbGFncykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0yMzUsNyArMjM1LDcgQEAKIH0KIAogc3RhdGljIGludCBtZV9zdWJkZXZpY2VfY29uZmlnX2xvYWQoc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlLAotCQkJCSAgICBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKiBjb25maWcpCisJCQkJICAgIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqY29uZmlnKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCWtmcmVlKHN1YmRldmljZSk7CiB9CiAKLWludCBtZV9zdWJkZXZpY2VfaW5pdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSkKK2ludCBtZV9zdWJkZXZpY2VfaW5pdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlKQogewogCWludCBlcnI7CiAKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1lX3N1YmRldmljZV9kZWluaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UpCit2b2lkIG1lX3N1YmRldmljZV9kZWluaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJbWVfc3ViZGV2aWNlX2lvX3Jlc2V0X3N1YmRldmljZShzdWJkZXZpY2UsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX2RldmljZS5jCmluZGV4IGU0ODYzMmQuLmJkYWY2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX2RldmljZS5jCkBAIC0xMDksNiArMTA5LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWV0ZW1wbF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1ldGVtcGxfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTEzMiw2ICsxMzMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgVGVtcGxhdGUgRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgVGVtcGxhdGUgRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZXRlbXBsX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9zdWIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX3N1Yi5jCmluZGV4IGYxZDY1ZDguLmI1YTZhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX3N1Yi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX3N1Yi5jCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTY4LDcgKzY4LDcgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWV0ZW1wbF9zdWJfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZXRlbXBsX3N1Yl9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC03Niw3ICs3Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWV0ZW1wbF9zdWJfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1ldGVtcGxfc3ViX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC04NSw3ICs4NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWV0ZW1wbF9zdWJfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1ldGVtcGxfc3ViX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtOTUsNyArOTUsNyBAQAogCiBtZXRlbXBsX3N1Yl9zdWJkZXZpY2VfdCAqbWV0ZW1wbF9zdWJfY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCQkgdW5zaWduZWQgaW50IHN1Yl9pZHgsCi0JCQkJCQkgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCQkgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZXRlbXBsX3N1Yl9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWltaW8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9taW1pby9LY29uZmlnCmluZGV4IGMwYmE0YzguLjUwNWRjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9taW1pby9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9taW1pby9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIElOUFVUX01JTUlPCiAJdHJpc3RhdGUgIk1pbWlvIFhpIGludGVyYWN0aXZlIHdoaXRlYm9hcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCiAJZGVmYXVsdCBOCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBNaW1pbyBYaSBpbnRlcmFjdGl2ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Ftc2R1LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvYW1zZHUuYwppbmRleCBjOTEyM2Q1Li4wMzIxMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvYW1zZHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvYW1zZHUuYwpAQCAtMzQsNTMgKzM0LDUzIEBACiAvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjIgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi16YnVmX3QqIHpmR2V0QW1zZHVTdWJGcmFtZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90KiBvZmZzZXQpCit6YnVmX3QgKnpmR2V0QW1zZHVTdWJGcmFtZSh6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYsIHUxNl90ICpvZmZzZXQpCiB7Ci0gICAgdTE2X3Qgc3ViZnJhbWVMZW47Ci0gICAgdTE2X3QgYW1zZHVMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKLSAgICB6YnVmX3QqIG5ld0J1ZjsKKwl1MTZfdCBzdWJmcmFtZUxlbjsKKwl1MTZfdCBhbXNkdUxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworCXpidWZfdCAqbmV3QnVmOwogCi0gICAgWk1fUEVSRk9STUFOQ0VfUlhfQU1TRFUoZGV2LCBidWYsIGFtc2R1TGVuKTsKKwlaTV9QRVJGT1JNQU5DRV9SWF9BTVNEVShkZXYsIGJ1ZiwgYW1zZHVMZW4pOwogCi0gICAgLyogVmVyaWZ5IEEtTVNEVSBsZW5ndGggKi8KLSAgICBpZiAoYW1zZHVMZW4gPCAoKm9mZnNldCArIDE0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKwkvKiBWZXJpZnkgQS1NU0RVIGxlbmd0aCAqLworCWlmIChhbXNkdUxlbiA8ICgqb2Zmc2V0ICsgMTQpKQorCQlyZXR1cm4gTlVMTDsKIAotICAgIC8qIExvY2F0ZSBBLU1TRFUgc3ViZnJhbWUgYnkgb2Zmc2V0IGFuZCB2ZXJpZnkgc3ViZnJhbWUgbGVuZ3RoICovCi0gICAgc3ViZnJhbWVMZW4gPSAoem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgKm9mZnNldCArIDEyKSA8PCA4KSArCi0gICAgICAgICAgICAgICAgICB6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCAqb2Zmc2V0ICsgMTMpOwotICAgIGlmIChzdWJmcmFtZUxlbiA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorCS8qIExvY2F0ZSBBLU1TRFUgc3ViZnJhbWUgYnkgb2Zmc2V0IGFuZCB2ZXJpZnkgc3ViZnJhbWUgbGVuZ3RoICovCisJc3ViZnJhbWVMZW4gPSAoem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgKm9mZnNldCArIDEyKSA8PCA4KSArCisJCXptd19idWZfcmVhZGIoZGV2LCBidWYsICpvZmZzZXQgKyAxMyk7CiAKLSAgICAvKiBWZXJpZnkgQS1NU0RVIHN1YmZyYW1lIGxlbmd0aCAqLwotICAgIGlmICgoKm9mZnNldCsxNCtzdWJmcmFtZUxlbikgPD0gYW1zZHVMZW4pCi0gICAgewotICAgICAgICAvKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgKi8KLSAgICAgICAgaWYgKChuZXdCdWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIDI0KzIrc3ViZnJhbWVMZW4pKSAhPSBOVUxMKQotICAgICAgICB7Ci0jaWZkZWYgWk1fRU5BQkxFX05BVElWRV9XSUZJCi0gICAgICAgICAgICAvKiBDb3B5IGFuZCBjb252ZXJ0IHN1YmZyYW1lIHRvIHdsYW4gZnJhbWUgZm9ybWF0ICovCi0gICAgICAgICAgICAvKiBTSEFMTCBOT1QgSU5DTFVERSBRT1MgYW5kIEFNU0RVIGhlYWRlci4gUmF5IDIwMDcwODA3IEZvciBWaXN0YSAqLwotICAgICAgICAgICAgemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMCwgMCwgMjQpOwotICAgICAgICAgICAgemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMjQsICpvZmZzZXQrMTQsIHN1YmZyYW1lTGVuKTsKLSAgICAgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCBuZXdCdWYsIDI0K3N1YmZyYW1lTGVuKTsKLSNlbHNlCi0gICAgICAgICAgICAvKiBDb3B5IHN1YmZyYW1lIHRvIG5ldyBidWZmZXIgKi8KLSAgICAgICAgICAgIHpmUnhCdWZmZXJDb3B5KGRldiwgbmV3QnVmLCBidWYsIDAsICpvZmZzZXQsIDE0K3N1YmZyYW1lTGVuKTsKLSAgICAgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCBuZXdCdWYsIDE0K3N1YmZyYW1lTGVuKTsKLSNlbmRpZgotICAgICAgICAgICAgLyogVXBkYXRlIG9mZnNldCAqLwotICAgICAgICAgICAgKm9mZnNldCArPSAoKCgxNCtzdWJmcmFtZUxlbikrMykgJiAweGZmZmMpOworCWlmIChzdWJmcmFtZUxlbiA9PSAwKQorCQlyZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgLyogUmV0dXJuIGJ1ZmZlciBwb2ludGVyICovCi0gICAgICAgICAgICByZXR1cm4gbmV3QnVmOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOworCS8qIFZlcmlmeSBBLU1TRFUgc3ViZnJhbWUgbGVuZ3RoICovCisJaWYgKCgqb2Zmc2V0KzE0K3N1YmZyYW1lTGVuKSA8PSBhbXNkdUxlbikgeworCQkvKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgKi8KKwkJbmV3QnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCAyNCsyK3N1YmZyYW1lTGVuKTsKKwkJaWYgKG5ld0J1ZiAhPSBOVUxMKSB7CisJCQkjaWZkZWYgWk1fRU5BQkxFX05BVElWRV9XSUZJCisJCQkvKiBDb3B5IGFuZCBjb252ZXJ0IHN1YmZyYW1lIHRvIHdsYW4gZnJhbWUgZm9ybWF0CisJCQkqIFNIQUxMIE5PVCBJTkNMVURFIFFPUyBhbmQgQU1TRFUgaGVhZGVyLgorCQkJKiBSYXkgMjAwNzA4MDcgRm9yIFZpc3RhCisJCQkqLworCQkJemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMCwgMCwgMjQpOworCQkJemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMjQsICpvZmZzZXQrMTQsCisJCQkJCXN1YmZyYW1lTGVuKTsKKwkJCXpmd0J1ZlNldFNpemUoZGV2LCBuZXdCdWYsIDI0K3N1YmZyYW1lTGVuKTsKKwkJCSNlbHNlCisJCQkvKiBDb3B5IHN1YmZyYW1lIHRvIG5ldyBidWZmZXIgKi8KKwkJCXpmUnhCdWZmZXJDb3B5KGRldiwgbmV3QnVmLCBidWYsIDAsICpvZmZzZXQsCisJCQkJCTE0K3N1YmZyYW1lTGVuKTsKKwkJCXpmd0J1ZlNldFNpemUoZGV2LCBuZXdCdWYsIDE0K3N1YmZyYW1lTGVuKTsKKwkJCSNlbmRpZgorCQkJLyogVXBkYXRlIG9mZnNldCAqLworCQkJKm9mZnNldCArPSAoKCgxNCtzdWJmcmFtZUxlbikrMykgJiAweGZmZmMpOworCisJCQkvKiBSZXR1cm4gYnVmZmVyIHBvaW50ZXIgKi8KKwkJCXJldHVybiBuZXdCdWY7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMTAxLDM0ICsxMDEsMjkgQEAKIC8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgemZEZUFtc2R1KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgdmFwLCB1OF90IGVuY3J5TW9kZSkKK3ZvaWQgemZEZUFtc2R1KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdTE2X3QgdmFwLCB1OF90IGVuY3J5TW9kZSkKIHsKLSAgICB1MTZfdCBvZmZzZXQgPSBaTV9TSVpFX09GX1dMQU5fREFUQV9IRUFERVIrWk1fU0laRV9PRl9RT1NfQ1RSTDsKLSAgICB6YnVmX3QqIHN1YmZyYW1lQnVmOwotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKwl1MTZfdCBvZmZzZXQgPSBaTV9TSVpFX09GX1dMQU5fREFUQV9IRUFERVIrWk1fU0laRV9PRl9RT1NfQ1RSTDsKKwl6YnVmX3QgKnN1YmZyYW1lQnVmOworCXptd19nZXRfd2xhbl9kZXYoZGV2KTsKIAotICAgIFpNX0JVRkZFUl9UUkFDRShkZXYsIGJ1ZikKKwlaTV9CVUZGRVJfVFJBQ0UoZGV2LCBidWYpCiAKLSAgICBpZiAoZW5jcnlNb2RlID09IFpNX0FFUyB8fCBlbmNyeU1vZGUgPT0gWk1fVEtJUCkKLSAgICB7Ci0gICAgICAgIG9mZnNldCArPSAoWk1fU0laRV9PRl9JViArIFpNX1NJWkVfT0ZfRVhUX0lWKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZW5jcnlNb2RlID09IFpNX1dFUDY0IHx8IGVuY3J5TW9kZSA9PSBaTV9XRVAxMjgpCi0gICAgewotICAgICAgICBvZmZzZXQgKz0gWk1fU0laRV9PRl9JVjsKLSAgICB9CisJaWYgKGVuY3J5TW9kZSA9PSBaTV9BRVMgfHwgZW5jcnlNb2RlID09IFpNX1RLSVApCisJCW9mZnNldCArPSAoWk1fU0laRV9PRl9JViArIFpNX1NJWkVfT0ZfRVhUX0lWKTsKKwllbHNlIGlmIChlbmNyeU1vZGUgPT0gWk1fV0VQNjQgfHwgZW5jcnlNb2RlID09IFpNX1dFUDEyOCkKKwkJb2Zmc2V0ICs9IFpNX1NJWkVfT0ZfSVY7CiAKLSAgICAvKiBSZXBlYXRseSBjYWxsaW5nIHpmR2V0QW1zZHVTdWJGcmFtZSgpIHVudGlsIE5VTEwgcmV0dXJuZWQgKi8KLSAgICB3aGlsZSAoKHN1YmZyYW1lQnVmID0gemZHZXRBbXNkdVN1YkZyYW1lKGRldiwgYnVmLCAmb2Zmc2V0KSkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHdkLT5jb21tVGFsbHkuTm90aWZ5TkRJU1J4RnJtQ250Kys7Ci0gICAgICAgIGlmICh3ZC0+emZjYlJlY3ZFdGggIT0gTlVMTCkKLSAgICAJewotICAgICAgICAgICAgd2QtPnpmY2JSZWN2RXRoKGRldiwgc3ViZnJhbWVCdWYsICh1OF90KXZhcCk7Ci0gICAgICAgICAgICBaTV9QRVJGT1JNQU5DRV9SWF9NU0RVKGRldiwgd2QtPnRpY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOwogCi0gICAgcmV0dXJuOworCS8qIFJlcGVhdGx5IGNhbGxpbmcgemZHZXRBbXNkdVN1YkZyYW1lKCkgdW50aWwgTlVMTCByZXR1cm5lZCAqLworCXdoaWxlICgoc3ViZnJhbWVCdWYgPSB6ZkdldEFtc2R1U3ViRnJhbWUoZGV2LCBidWYsICZvZmZzZXQpKSAhPSBOVUxMKSB7CisJCXdkLT5jb21tVGFsbHkuTm90aWZ5TkRJU1J4RnJtQ250Kys7CisJCWlmICh3ZC0+emZjYlJlY3ZFdGggIT0gTlVMTCkgeworCQkJd2QtPnpmY2JSZWN2RXRoKGRldiwgc3ViZnJhbWVCdWYsICh1OF90KXZhcCk7CisJCQlaTV9QRVJGT1JNQU5DRV9SWF9NU0RVKGRldiwgd2QtPnRpY2spOworCQl9CisJfQorCXpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworCisJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jCmluZGV4IGM3NWJhMTEuLmIyOGE0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1zdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMKQEAgLTcyNCw2ICs3MjQsOSBAQAogLyogcHJvY2VzcyA4MDIuMTFoIER5bmFtaWMgRnJlcXVlbmN5IFNlbGVjdGlvbiAqLwogdm9pZCB6ZlN0YVVwZGF0ZURvdDExSERGUyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCiB7CisgICAgLy91OF90ICAgIGxlbmd0aCwgY2hhbm5lbCwgaXM1RzsKKyAgICB1MTZfdCAgIG9mZnNldDsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKIAogICAgIC8qCkBAIC03MzYsOCArNzM5LDYgQEAKICAgICB8VmFsdWUgfCAgIDM3ICAgICB8ICAzICAgfCAgICAgICAwIG9yIDEgICAgICB8dW5zaWduZWQgaW50ZWdlciAgfHVuc2lnbmVkIGludGVnZXIgICAgfAogICAgICstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgKi8KLSAgICAvL3U4X3QgICAgbGVuZ3RoLCBjaGFubmVsLCBpczVHOwotICAgIHUxNl90ICAgb2Zmc2V0OwogCiAgICAgLyogZ2V0IEVJRChDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQpICovCiAgICAgaWYgKCAob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0UpKSA9PSAweGZmZmYgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NvaWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jb2lkLmMKaW5kZXggNjAwN2YzMS4uODhmOGQzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jb2lkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NvaWQuYwpAQCAtMjE0LDEwICsyMTQsMTAgQEAKIAogdTMyX3QgemZpV2xhblF1ZXJ5VHJhbnNtaXRQb3dlcih6ZGV2X3QqIGRldikKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICB1MzJfdCByZXQgPSAwOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCiAgICAgaWYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkgewogICAgICAgICByZXQgPSB3ZC0+c3RhLmNvbm5Qb3dlckluSGFsZkRibTsKICAgICB9IGVsc2UgewpAQCAtMTQzMiwxMiArMTQzMiwxMiBAQAogCiB1MzJfdCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3lBdHRyaWJ1dGUoemRldl90KiBkZXYsIHUzMl90IGZyZXEpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgdThfdCAgaTsKICAgICB1MTZfdCBmcmVxdWVuY3kgPSAodTE2X3QpIChmcmVxLzEwMDApOwogICAgIHUzMl90IHJldCA9IDA7CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKICAgICBmb3IgKGkgPSAwOyBpIDwgd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQ7IGkrKykKICAgICB7CiAgICAgICAgIGlmICggd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxdWVuY3kgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5jCmluZGV4IDgwZjExNDEuLjFiZDBiMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jd20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dtLmMKQEAgLTc1LDkgKzc1LDkgQEAKIAogICAgIGlmKCh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSB8fCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9QU0VVRE8gfHwKICAgICAgICAgd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykpIHsKLSAgICAgICAgaWYgKHdkLT5zdGEuaWUuSHRDYXAuSHRDYXBJbmZvICYmIEhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldCAhPSAwICYmCi0gICAgICAgICAgICB3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmJiBFeHRIdENhcF9SZWNvbVR4V2lkdGhTZXQgIT0gMCAmJgotICAgICAgICAgICAgKHdkLT5zdGEuaWUuSHRJbmZvLkNoYW5uZWxJbmZvICYmIEV4dEh0Q2FwX0V4dENoYW5uZWxPZmZzZXRBYm92ZSkgPT0gMSkgeworICAgICAgICBpZiAoKHdkLT5zdGEuaWUuSHRDYXAuSHRDYXBJbmZvICYgSFRDQVBfU3VwQ2hhbm5lbFdpZHRoU2V0KSAmJgorICAgICAgICAgICAgKHdkLT5zdGEuaWUuSHRJbmZvLkNoYW5uZWxJbmZvICYgRXh0SHRDYXBfUmVjb21UeFdpZHRoU2V0KSAmJgorICAgICAgICAgICAgKHdkLT5zdGEuaWUuSHRJbmZvLkNoYW5uZWxJbmZvICYgRXh0SHRDYXBfRXh0Q2hhbm5lbE9mZnNldEFib3ZlKSkgewogCiAgICAgICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRINDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPCmluZGV4IGU5MTIyOTMuLjRjYWYwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwpAQCAtMSw4ICsxLDE1IEBACitJJ20gaGVzaXRhbnQgdG8gYWRkIGEgVE9ETyBmaWxlIGhlcmUsIGFzIHRoZSB3aXJlbGVzcyBkZXZlbG9wZXJzIHdvdWxkCityZWFsbHkgaGF2ZSBwZW9wbGUgaGVscCB0aGVtIG91dCBvbiB0aGUgImNsZWFuIiBhcjkxNzAgZHJpdmVyIHRoYXQgY2FuCitiZSBmb3VuZCBhdCB0aGUgbGludXgtd2lyZWxlc3MgZGV2ZWxvcGVyIHNpdGUuCisKK0J1dCwgaWYgeW91IHdpc2ggdG8gY2xlYW4gdXAgdGhpcyBkcml2ZXIgaW5zdGVhZCwgaGVyZSdzIGEgc2hvcnQgbGlzdCBvZgordGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIGdldCBpdCBpbnRvIGEgbW9yZSBtZXJnYWJsZSBzaGFwZToKKwogVE9ETzoKIAktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKIAktIHNwYXJzZSBjbGVhbnVwcwogCS0gcG9ydCB0byBpbi1rZXJuZWwgODAyMTEgc3RhY2sKLQktIHByb3BlciBuZXR3b3JrIGRldmVsb3BlciBtYWludGFpbmVyCisJLSByZXZpZXcgYnkgdGhlIHdpcmVsZXNzIGRldmVsb3BlciBjb21tdW5pdHkKIAogUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kCiBMdWlzIFJvZHJpZ3VleiA8THVpcy5Sb2RyaWd1ZXpAQXRoZXJvcy5jb20+IGFuZCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwYW5pLmMKaW5kZXggYmE5NWI1ZDAxLi4wYWZlY2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYwpAQCAtNTUsMTAgKzU1LDEwIEBACiBzMzJfdCBCRUFDT05fUlNTSSh6ZGV2X3QqIGRldikKIHsKICAgICBzMzJfdCByc3NpOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAKICAgICByc3NpID0gWk1fSEFMX0VQX1JORChIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksIFpNX0hBTF9SU1NJX0VQX01VTFRJUExJRVIpOwogCkBAIC03NCwxNiArNzQsMTYgQEAKIHsKICNkZWZpbmUgTihhKSAgICAgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKICAgICB1MzJfdCBpOwotCi0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgY29uc3QgaW50IHRvdGFsU2l6ZURlc2lyZWRbXSA9IHsgLTU1LCAtNTUsIC01NSwgLTU1LCAtNjIgfTsKICAgICBjb25zdCBpbnQgY29hcnNlSGlnaFtdICAgICAgID0geyAtMTQsIC0xNCwgLTE0LCAtMTQsIC0xMiB9OwogICAgIGNvbnN0IGludCBjb2Fyc2VMb3dbXSAgICAgICAgPSB7IC02NCwgLTY0LCAtNjQsIC02NCwgLTcwIH07CiAgICAgY29uc3QgaW50IGZpcnB3cltdICAgICAgICAgICA9IHsgLTc4LCAtNzgsIC03OCwgLTc4LCAtODAgfTsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworCiAgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKICAgICB7CiAgICAgICAgIEhwUHJpdi0+dG90YWxTaXplRGVzaXJlZFtpXSA9IHRvdGFsU2l6ZURlc2lyZWRbaV07CkBAIC0xMzksMTIgKzEzOSwxMiBAQAogewogI2RlZmluZSBOKGEpIChzaXplb2YoYSkvc2l6ZW9mKGFbMF0pKQogICAgIHR5cGVkZWYgczMyX3QgVEFCTEVbXTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKKyAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7Ci0KLSAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIGFuaVN0YXRlID0gSHBQcml2LT5jdXJhbmk7CiAKICAgICBzd2l0Y2ggKGNtZCkKICAgICB7CkBAIC0zNDYsMTEgKzM0NiwxMCBAQAogdm9pZCB6ZkhwQW5pUmVzdGFydCh6ZGV2X3QqIGRldikKIHsKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7Ci0KKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogICAgIGFuaVN0YXRlID0gSHBQcml2LT5jdXJhbmk7CiAKICAgICBhbmlTdGF0ZS0+bGlzdGVuVGltZSA9IDA7CkBAIC0zODcsMTAgKzM4NiwxMCBAQAogewogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKICAgICBzMzJfdCByc3NpOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAKICAgICAvL0hBTEFTU0VSVChjaGFuICE9IE5VTEwpOwogCkBAIC00NjYsMTAgKzQ2NSwxMCBAQAogewogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKICAgICBzMzJfdCByc3NpOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAKICAgICAvL0hBTEFTU0VSVChjaGFuICE9IE5VTEwpOwogCkBAIC01MTEsMTEgKzUxMCwxMCBAQAogewogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKICAgICBzMzJfdCByc3NpOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwotCisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKICAgICBhbmlTdGF0ZSA9IEhwUHJpdi0+Y3VyYW5pOwogCiAgICAgcnNzaSA9IEJFQUNPTl9SU1NJKGRldik7CkBAIC01ODYsMTAgKzU4NCwxMCBAQAogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKICAgICB1MzJfdCB0eEZyYW1lQ291bnQsIHJ4RnJhbWVDb3VudCwgY3ljbGVDb3VudDsKICAgICBzMzJfdCBsaXN0ZW5UaW1lOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAKICAgICB0eEZyYW1lQ291bnQgPSAwOy8vT1NfUkVHX1JFQUQoYWgsIEFSX1RGQ05UKTsKICAgICByeEZyYW1lQ291bnQgPSAwOy8vT1NfUkVHX1JFQUQoYWgsIEFSX1JGQ05UKTsKQEAgLTYyNywxMCArNjI1LDEwIEBACiB7CiAgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOwogICAgIC8vczMyX3QgbGlzdGVuVGltZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogCiAgICAgLyoKICAgICAgKiBTaW5jZSB3ZSdyZSBjYWxsZWQgZnJvbSBlbmQgb2YgcnggdGFza2xldCwgd2UgYWxzbyBjaGVjayBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYwppbmRleCBkYWIyNzgzLi4zMjI1ODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCkBAIC0zMjgsOCArMzI4LDggQEAKICAgICB1MTZfdCBtb2Rlc0luZGV4ID0gMDsKICAgICB1MTZfdCBmcmVxSW5kZXggPSAwOwogICAgIHUzMl90IHRtcCwgdG1wMTsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHUzMl90IGVlcHJvbUJvYXJkRGF0YVsxNV1bNl0gPSB7CiAgICAgLyogUmVnaXN0ZXIgICBBLTIwICAgICAgICBBLTIwLzQwICAgICBHLTIwLzQwICAgICBHLTIwICAgICAgICBHLVR1cmJvICAgICovCiAgICAgICAgIHsweDk5NjQsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCkBAIC0zNDksNiArMzQ5LDkgQEAKICAgICAgICAgezB4YTI1OCwgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwfSwKICAgICB9OwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCiAgICAgLyogIzEgU2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgcmVsYXRlZCBSSUZTIHJlZ2lzdGVyIHNldHRpbmdzICovCiAgICAgLy8oKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmlzSW5pdGlhbFBoeSsrOwogCkBAIC0xMzI0LDkgKzEzMjcsMTAgQEAKICAgICBpbnQgZGVsdGFfc2xvcGVfY29lZmZfbWFuOwogICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9leHBfc2hnaTsKICAgICBpbnQgZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2k7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKICAgICB6bV9tc2cxX3NjYW4oWk1fTFZfMSwgIkZyZXF1ZW5jeSA9ICIsIGZyZXF1ZW5jeSk7CiAgICAgem1fbXNnMV9zY2FuKFpNX0xWXzEsICJidzQwID0gIiwgYnc0MCk7CkBAIC0xNTYwLDkgKzE1NjQsMTAgQEAKIHsKICAgICB1OF90IGk7CiAgICAgdTMyX3Qga2V5WzRdID0gezAsIDAsIDAsIDB9OworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICBmb3IoaT0wO2k8NDtpKyspCiAgICAgewpAQCAtMTYwMSw5ICsxNjA2LDEwIEBACiAgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOwogICAgIHUxNl90IHJldDsKICAgICB1MTZfdCBpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICNpZiAwICAgLyogcmVtb3ZlIHRvIHpmQ29yZVNldEtleSgpICovCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKQEAgLTE2NzAsOCArMTY3NiwxMCBAQAogICAgIHUxNl90IG1hY0FkZHJbM10gPSB7MCwgMCwgMH07CiAKICAgICAjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAgICAgaWYgKCBocFByaXYtPmRvdDExTW9kZSA9PSBaTV9IQUxfODAyMTFfTU9ERV9JQlNTX1dQQTJQU0sgKQogICAgIHsgLyogSWYgbm90IHdwYTJwc2sgLCB1c2UgdHJhZGl0aW9uYWwgKi8KQEAgLTE3MDIsOCArMTcxMCwxMCBAQAogdTMyX3QgemZIcFNldFBlclVzZXJLZXkoemRldl90KiBkZXYsIHU4X3QgdXNlciwgdThfdCBrZXlJZCwgdThfdCogbWFjLCB1OF90IHR5cGUsIHUzMl90KiBrZXksIHUzMl90KiBtaWNLZXkpCiB7CiAjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAgICAgaWYgKCBocFByaXYtPmRvdDExTW9kZSA9PSBaTV9IQUxfODAyMTFfTU9ERV9JQlNTX1dQQTJQU0sgKQogICAgIHsgLyogSWYgbm90IHdwYTJwc2sgLCB1c2UgdHJhZGl0aW9uYWwgKi8KQEAgLTE5MTgsOSArMTkyOCwxMCBAQAogCiB1MTZfdCB6ZkhwU2V0QXBTdGFNb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCi0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogICAgIGhwUHJpdi0+ZG90MTFNb2RlID0gbW9kZTsKIAogICAgIHN3aXRjaChtb2RlKQpAQCAtMTk5Myw4ICsyMDA0LDEwIEBACiB1OF90IHpmSHBVcGRhdGVRb3NQYXJhbWV0ZXIoemRldl90KiBkZXYsIHUxNl90KiBjd21pblRibCwgdTE2X3QqIGN3bWF4VGJsLAogICAgICAgICB1MTZfdCogYWlmc1RibCwgdTE2X3QqIHR4b3BUYmwpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJ6ZkhhbFVwZGF0ZVFvc1BhcmFtZXRlcigpIik7CiAKQEAgLTIyNTksOSArMjI3MiwxMSBAQAogICAgIC8vCiAgICAgLy9yZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAxMiwgWk1fQ1dNX1JFQUQsIDApOwogICAgIC8vcmV0dXJuIHJldDsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CiAKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgemZDb3JlQ3dtQnVzeShkZXYsIHpmQ3dtSXNFeHRDaGFuQnVzeShocFByaXYtPmN0bEJ1c3ksIGhwUHJpdi0+ZXh0QnVzeSkpOwogCkBAIC0yMjkxLDkgKzIzMDYsMTAgQEAKICAqLwogdTMyX3QgemZIcEFuaVVwZGF0ZVJzc2koemRldl90KiBkZXYsIHU4X3QgcnNzaSkKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIGhwUHJpdi0+c3RhdHMuYXN0X25vZGVzdGF0cy5uc19hdmdicnNzaSA9IHJzc2k7CiAKQEAgLTIzMjUsMTEgKzIzNDEsMTIgQEAKIAogdTMyX3QgemZIcEdldFRyYW5zbWl0UG93ZXIoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2KiAgICBocFByaXYgID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdjsKICAgICB1MTZfdCAgICAgICAgICAgICAgIHRwYyAgICAgPSAwOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworCiAgICAgaWYgKGhwUHJpdi0+aHdGcmVxdWVuY3kgPCAzMDAwKSB7CiAgICAgICAgIHRwYyA9IGhwUHJpdi0+dFBvdzJ4MmdbMF0gJiAweDNmOwogICAgICAgICB3ZC0+bWF4VHhQb3dlcjIgJj0gMHgzZjsKQEAgLTIzNDUsMTEgKzIzNjIsMTIgQEAKIAogdThfdCB6ZkhwR2V0TWluVHhQb3dlcih6ZGV2X3QqIGRldikKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2OwogICAgIHU4X3QgICAgICAgICAgICAgICB0cGMgICAgID0gMDsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXYgID0gd2QtPmhwUHJpdmF0ZTsKKwogICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDwgMzAwMCkKICAgICB7CiAgICAgICAgIGlmKHdkLT5CYW5kV2lkdGg0MCkKQEAgLTIzODIsMTEgKzI0MDAsMTIgQEAKIAogdThfdCB6ZkhwR2V0TWF4VHhQb3dlcih6ZGV2X3QqIGRldikKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2OwogICAgIHU4X3QgICAgICAgICAgICAgICB0cGMgICAgID0gMDsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXYgID0gd2QtPmhwUHJpdmF0ZTsKKwogICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDwgMzAwMCkKICAgICB7CiAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeENja1swXSYweDNmKTsKQEAgLTI0MjEsMTEgKzI0NDAsMTMgQEAKIAogdm9pZCB6ZkhwSGVhcnRCZWF0KHpkZXZfdCogZGV2KQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogICAgIHU4X3QgcG9sbHV0ZWQgPSAwOwogICAgIHU4X3QgYWNrVHBjOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCiAgICAgLyogV29ya2Fyb3VuZCA6IE1ha2UgT1RVUyBmaXJlIG1vcmUgYmVhY29uIGluIGFkIGhvYyBtb2RlIGluIDIuNEdIeiAqLwogICAgIGlmIChocFByaXYtPmlic3NCY25FbmFibGVkICE9IDApCiAgICAgewpAQCAtNDIxOSw4ICs0MjQwLDEwIEBACiAKIHZvaWQgemZIcFBvd2VyU2F2ZVNldFN0YXRlKHpkZXZfdCogZGV2LCB1OF90IHBzU3RhdGUpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKIAkvL0RiZ1ByaW50KCJJTlRPIHpmSHBQb3dlclNhdmVTZXRTdGF0ZSIpOwogCkBAIC00Mjc5LDggKzQzMDIsMTAgQEAKIAogdm9pZCB6ZkhwU2V0QWdnUGt0TnVtKHpkZXZfdCogZGV2LCB1MzJfdCBudW0pCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKICAgICBudW0gPSAobnVtIDw8IDE2KSB8ICgweGEpOwogCkBAIC00MzEwLDggKzQzMzUsMTAgQEAKIAogdm9pZCB6ZkhwU2V0U2xvdFRpbWUoemRldl90KiBkZXYsIHU4X3QgdHlwZSkKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogICAgIGlmICh0eXBlID09IDApCiAgICAgewpAQCAtNDM3Niw4ICs0NDAzLDEwIEBACiAKIHZvaWQgemZIcEJlZ2luU2l0ZVN1cnZleSh6ZGV2X3QqIGRldiwgdThfdCBzdGF0dXMpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIGlmICggc3RhdHVzID09IDEgKQogICAgIHsgLy8gQ29ubmVjdGVkCkBAIC00NDIxLDggKzQ0NTAsMTAgQEAKIAogdm9pZCB6ZkhwRmluaXNoU2l0ZVN1cnZleSh6ZGV2X3QqIGRldiwgdThfdCBzdGF0dXMpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTQ1MjcsMTYgKzQ1NTgsMjAgQEAKIAogdTMyX3QgemZIcENhcGFiaWxpdHkoemRldl90KiBkZXYpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHJldHVybiBocFByaXYtPmhhbENhcGFiaWxpdHk7CiB9CiAKIHZvaWQgemZIcFNldFJvbGxDYWxsVGFibGUoemRldl90KiBkZXYpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIGlmIChocFByaXYtPmNhbVJvbGxDYWxsVGFibGUgIT0gKHU2NF90KSAwKQogICAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMKaW5kZXggM2NmZWJhOC4uZDk4OTRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMKQEAgLTE3NzAsOCArMTc3MCwxMCBAQAogCVJFR19ET01BSU4gcmQ1R0h6LCByZDJHSHo7CiAJY29uc3Qgc3RydWN0IGNtb2RlICpjbTsKIAlzMTZfdCBuZXh0PTAsYjsKKwlzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtMjQ3Myw5ICsyNDc1LDEwIEBACiAKIHZvaWQgemZIcERpc2FibGVEZnNDaGFubmVsKHpkZXZfdCogZGV2LCB1OF90IGRpc2FibGVGbGFnKQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogICAgIGhwUHJpdi0+ZGlzYWJsZURmc0NoID0gZGlzYWJsZUZsYWc7CiAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJ3LmMKaW5kZXggZGI3ZDQ5NS4uZDlmYWQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jCkBAIC0yOSw4ICsyOSwxMCBAQAogCiB2b2lkIHpmSW5pdENtZFF1ZXVlKHpkZXZfdCogZGV2KQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopKHdkLT5ocFByaXZhdGUpOworICAgIGhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKSh3ZC0+aHBQcml2YXRlKTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTQ4LDkgKzUwLDEwIEBACiB1MTZfdCB6ZlB1dENtZCh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuLCB1MTZfdCBzcmMsIHU4X3QqIGJ1ZikKIHsKICAgICB1MTZfdCBpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICAvKiBNYWtlIHN1cmUgY29tbWFuZCBsZW5ndGggPCBaTV9NQVhfQ01EX1NJWkUgKi8KICAgICB6bV9hc3NlcnQoY21kTGVuIDw9IFpNX01BWF9DTURfU0laRSk7CkBAIC03Nyw5ICs4MCwxMCBAQAogdTE2X3QgemZHZXRDbWQoemRldl90KiBkZXYsIHUzMl90KiBjbWQsIHUxNl90KiBjbWRMZW4sIHUxNl90KiBzcmMsIHU4X3QqKiBidWYpCiB7CiAgICAgdTE2X3QgaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgaWYgKGhwUHJpdi0+Y21kVGFpbCA9PSBocFByaXYtPmNtZEhlYWQpCiAgICAgewpAQCAtMTA2LDkgKzExMCwxMCBAQAogICAgIHUxNl90IG5jbWRMZW4gPSAwOwogICAgIHUxNl90IGNtZEZsYWcgPSAwOwogICAgIHUxNl90IGk7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTE0MSw4ICsxNDYsMTAgQEAKIAogdm9pZCB6ZmlTZW5kQ21kQ29tcCh6ZGV2X3QqIGRldikKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtMTU4LDkgKzE2NSwxMCBAQAogewogICAgIHUxNl90IGNtZEZsYWcgPSAwOwogICAgIHUxNl90IHJldDsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtMjE0LDkgKzIyMiwxMCBAQAogICAgIHUxNl90IGk7CiAgICAgczMyX3QgbmY7CiAgICAgczMyX3Qgbm9pc2VmbG9vcls0XTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwpAQCAtODI2LDkgKzgzNSwxMCBAQAogICAgIHUzMl90IGNtZFsoWk1fTUFYX0NNRF9TSVpFLzQpXTsKICAgICB1MTZfdCBpOwogICAgIHUxNl90IHJldDsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtODkyLDggKzkwMiwxMCBAQAogICAgIHUzMl90IGNtZFsoWk1fTUFYX0NNRF9TSVpFLzQpXTsKICAgICB1MTZfdCBpOwogICAgIHUxNl90IHJldDsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuYwppbmRleCA0Yjc2ZGU5Li5lZTkzOTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuYwpAQCAtNjQsOSArNjQsMTAgQEAKICAgICB1MzJfdCBvbGRQaHlDdHJsOwogCiAgICAgdTE2X3QgdHBjID0gMDsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAvKiBtbSAqLwogICAgIGlmIChoZWFkZXIgPT0gTlVMTCkKQEAgLTMzMCw4ICszMzEsMTAgQEAKICAgICB1MTZfdCBpOwogICAgCXUxNl90IHN3bHBPZmZzZXQ7CiAjZW5kaWYgLyogI2lmIFpNX1NXX0xPT1BfQkFDSyA9PSAxICovCisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptX21zZzFfdHgoWk1fTFZfMSwgInpmSHBTZW5kKCksIGxlbiA9ICIsIDEyICsgaGVhZGVyTGVuLTggKyBzbmFwTGVuICsgemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZikgKyA0ICsgOCk7CiAKQEAgLTU3Niw4ICs1NzksMTAgQEAKICAgICB1MzJfdCAgICAgICAgICAgICAgIHJ4TUNTOwogICAgIHUzMl90ICAgICAgICAgICAgICAgcnhCVzsKICAgICB1MzJfdCAgICAgICAgICAgICAgIHJ4U0c7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIC8vem1fbXNnMF9yeChaTV9MVl8wLCAiemZpVXNiUmVjdigpIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCmluZGV4IDdhNWMxZTguLmNlMDQyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYwpAQCAtMjUsNyArMjUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInVzYmRydi5oIgogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIFpEX0lPQ1RMX0dFVFdQQUlFCQkgICAgKFNJT0NERVZQUklWQVRFICsgMykKICNpZmRlZiBaTV9FTkFCTEVfQ0VOQwogI2RlZmluZSBaTV9JT0NUTF9DRU5DICAgICAgICAgICAgICAgKFNJT0NERVZQUklWQVRFICsgNCkKLSNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisjZW5kaWYgIC8qIFpNX0VOQUJMRV9DRU5DICovCiAjZGVmaW5lIFpEX1BBUkFNX1JPQU1JTkcJCSAgICAweDAwMDEKICNkZWZpbmUgWkRfUEFSQU1fUFJJVkFDWQkJICAgIDB4MDAwMgogI2RlZmluZSBaRF9QQVJBTV9XUEEJCQkgICAgMHgwMDAzCkBAIC00NSw3ICs0NSw3IEBACiAKICNpZmRlZiBaTV9FTkFCTEVfQ0VOQwogI2RlZmluZSBQODAyMTFfUEFDS0VUX0NFTkNGTEFHCQkweDAwMDEKLSNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisjZW5kaWYgIC8qIFpNX0VOQUJMRV9DRU5DICovCiAjZGVmaW5lIFA4MDIxMV9QQUNLRVRfU0VUS0VZICAgICAJMHgwMDAzCiAKICNkZWZpbmUgWkRfQ01EX1NFVF9FTkNSWVBUX0tFWQkJMHgwMDAxCkBAIC02MiwyMDQgKzYyLDE5MCBAQAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjZW5kaWYKIAotZXh0ZXJuIHUxNl90IHpmTG54R2V0VmFwSWQoemRldl90KiBkZXYpOworZXh0ZXJuIHUxNl90IHpmTG54R2V0VmFwSWQoemRldl90ICpkZXYpOwogCiBzdGF0aWMgY29uc3QgdTMyX3QgY2hhbm5lbF9mcmVxdWVuY3lfMTFBW10gPQogewotLy9FdmVuIGVsZW1lbnQgZm9yIENoYW5uZWwgTnVtYmVyLCBPZGQgZm9yIEZyZXF1ZW5jeQotICAgIDM2LDUxODAsCi0gICAgNDAsNTIwMCwKLSAgICA0NCw1MjIwLAotICAgIDQ4LDUyNDAsCi0gICAgNTIsNTI2MCwKLSAgICA1Niw1MjgwLAotICAgIDYwLDUzMDAsCi0gICAgNjQsNTMyMCwKLSAgICAxMDAsNTUwMCwKLSAgICAxMDQsNTUyMCwKLSAgICAxMDgsNTU0MCwKLSAgICAxMTIsNTU2MCwKLSAgICAxMTYsNTU4MCwKLSAgICAxMjAsNTYwMCwKLSAgICAxMjQsNTYyMCwKLSAgICAxMjgsNTY0MCwKLSAgICAxMzIsNTY2MCwKLSAgICAxMzYsNTY4MCwKLSAgICAxNDAsNTcwMCwKLS8vCi0gICAgMTg0LDQ5MjAsCi0gICAgMTg4LDQ5NDAsCi0gICAgMTkyLDQ5NjAsCi0gICAgMTk2LDQ5ODAsCi0gICAgOCw1MDQwLAotICAgIDEyLDUwNjAsCi0gICAgMTYsNTA4MCwKLSAgICAzNCw1MTcwLAotICAgIDM4LDUxOTAsCi0gICAgNDIsNTIxMCwKLSAgICA0Niw1MjMwLAotLy8KLSAgICAxNDksNTc0NSwKLSAgICAxNTMsNTc2NSwKLSAgICAxNTcsNTc4NSwKLSAgICAxNjEsNTgwNSwKLSAgICAxNjUsNTgyNQotLy8KKwkvKiBFdmVuIGVsZW1lbnQgZm9yIENoYW5uZWwgTnVtYmVyLCBPZGQgZm9yIEZyZXF1ZW5jeSAqLworCTM2LCA1MTgwLAorCTQwLCA1MjAwLAorCTQ0LCA1MjIwLAorCTQ4LCA1MjQwLAorCTUyLCA1MjYwLAorCTU2LCA1MjgwLAorCTYwLCA1MzAwLAorCTY0LCA1MzIwLAorCTEwMCwgNTUwMCwKKwkxMDQsIDU1MjAsCisJMTA4LCA1NTQwLAorCTExMiwgNTU2MCwKKwkxMTYsIDU1ODAsCisJMTIwLCA1NjAwLAorCTEyNCwgNTYyMCwKKwkxMjgsIDU2NDAsCisJMTMyLCA1NjYwLAorCTEzNiwgNTY4MCwKKwkxNDAsIDU3MDAsCisJLyoqLworCTE4NCwgNDkyMCwKKwkxODgsIDQ5NDAsCisJMTkyLCA0OTYwLAorCTE5NiwgNDk4MCwKKwk4LCA1MDQwLAorCTEyLCA1MDYwLAorCTE2LCA1MDgwLAorCTM0LCA1MTcwLAorCTM4LCA1MTkwLAorCTQyLCA1MjEwLAorCTQ2LCA1MjMwLAorCS8qKi8KKwkxNDksIDU3NDUsCisJMTUzLCA1NzY1LAorCTE1NywgNTc4NSwKKwkxNjEsIDU4MDUsCisJMTY1LCA1ODI1CisJLyoqLwogfTsKIAogaW50IHVzYmRydl9mcmVxMmNoYW4odTMyX3QgZnJlcSkKIHsKLSAgICAvKiAyLjRHIEh6ICovCi0gICAgaWYgKGZyZXEgPiAyNDAwICYmIGZyZXEgPCAzMDAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoZnJlcS0yNDEyKS81KSArIDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHUxNl90IGlpOwotICAgICAgICB1MTZfdCBudW1fY2hhbiA9IHNpemVvZihjaGFubmVsX2ZyZXF1ZW5jeV8xMUEpL3NpemVvZih1MzJfdCk7CisJLyogMi40RyBIeiAqLworCWlmIChmcmVxID4gMjQwMCAmJiBmcmVxIDwgMzAwMCkgeworCQlyZXR1cm4gKChmcmVxLTI0MTIpLzUpICsgMTsKKwl9IGVsc2UgeworCQl1MTZfdCBpaTsKKwkJdTE2X3QgbnVtX2NoYW4gPSBzaXplb2YoY2hhbm5lbF9mcmVxdWVuY3lfMTFBKS9zaXplb2YodTMyX3QpOwogCi0gICAgICAgIGZvcihpaSA9IDE7IGlpIDwgbnVtX2NoYW47IGlpICs9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWldID09IGZyZXEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaS0xXTsKLSAgICAgICAgfQotICAgIH0KKwkJZm9yIChpaSA9IDE7IGlpIDwgbnVtX2NoYW47IGlpICs9IDIpIHsKKwkJCWlmIChjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWldID09IGZyZXEpCisJCQkJcmV0dXJuIGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaS0xXTsKKwkJfQorCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2X2NoYW4yZnJlcShpbnQgY2hhbikKIHsKLSAgICBpbnQgZnJlcTsKKwlpbnQgZnJlcTsKIAotICAgIC8qIElmIGNoYW5uZWwgbnVtYmVyIGlzIG91dCBvZiByYW5nZSAqLwotICAgIGlmIChjaGFuID4gMTY1IHx8IGNoYW4gPD0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworCS8qIElmIGNoYW5uZWwgbnVtYmVyIGlzIG91dCBvZiByYW5nZSAqLworCWlmIChjaGFuID4gMTY1IHx8IGNoYW4gPD0gMCkKKwkJcmV0dXJuIC0xOwogCi0gICAgLyogMi40RyBiYW5kICovCi0gICAgaWYgKGNoYW4gPj0gMSAmJiBjaGFuIDw9IDEzKQotICAgIHsKLSAgICAgICAgZnJlcSA9ICgyNDEyICsgKGNoYW4gLSAxKSAqIDUpOwotICAgICAgICByZXR1cm4gZnJlcTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2hhbiA+PSAzNiAmJiBjaGFuIDw9IDE2NSkKLSAgICB7Ci0gICAgICAgIHUxNl90IGlpOwotICAgICAgICB1MTZfdCBudW1fY2hhbiA9IHNpemVvZihjaGFubmVsX2ZyZXF1ZW5jeV8xMUEpL3NpemVvZih1MzJfdCk7CisJLyogMi40RyBiYW5kICovCisJaWYgKGNoYW4gPj0gMSAmJiBjaGFuIDw9IDEzKSB7CisJCWZyZXEgPSAoMjQxMiArIChjaGFuIC0gMSkgKiA1KTsKKwkJCXJldHVybiBmcmVxOworCX0gZWxzZSBpZiAoY2hhbiA+PSAzNiAmJiBjaGFuIDw9IDE2NSkgeworCQl1MTZfdCBpaTsKKwkJdTE2X3QgbnVtX2NoYW4gPSBzaXplb2YoY2hhbm5lbF9mcmVxdWVuY3lfMTFBKS9zaXplb2YodTMyX3QpOwogCi0gICAgICAgIGZvcihpaSA9IDA7IGlpIDwgbnVtX2NoYW47IGlpICs9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWldID09IGNoYW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaSsxXTsKLSAgICAgICAgfQorCQlmb3IgKGlpID0gMDsgaWkgPCBudW1fY2hhbjsgaWkgKz0gMikgeworCQkJaWYgKGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaV0gPT0gY2hhbikKKwkJCQlyZXR1cm4gY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpKzFdOworCQl9CiAKLSAgICAgICAgLyogQ2FuJ3QgZmluZCBkZXNpcmVkIGZyZXF1ZW5jeSAqLwotICAgICAgICBpZiAoaWkgPT0gbnVtX2NoYW4pCi0gICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJLyogQ2FuJ3QgZmluZCBkZXNpcmVkIGZyZXF1ZW5jeSAqLworCWlmIChpaSA9PSBudW1fY2hhbikKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIC8qIENhbid0IGZpbmQgZGVpc3JlZCBmcmVxdWVuY3kgKi8KLSAgICByZXR1cm4gLTE7CisJLyogQ2FuJ3QgZmluZCBkZWlzcmVkIGZyZXF1ZW5jeSAqLworCXJldHVybiAtMTsKIH0KIAogaW50IHVzYmRydl9pb2N0bF9zZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcG9pbnQgKmVycSkKIHsKLSNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQKLSAgICAvL3N0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICBjaGFyIGVzc2lkYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOwotICAgIGludCBpOworCSNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQKKwkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7ICovCisJY2hhciBlc3NpZGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKKwlpbnQgaTsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIG1lbXNldChlc3NpZGJ1ZiwgMCwgc2l6ZW9mKGVzc2lkYnVmKSk7CisJbWVtc2V0KGVzc2lkYnVmLCAwLCBzaXplb2YoZXNzaWRidWYpKTsKIAotICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X2lvY3RsX3NldGVzc2lkXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgInVzYmRydl9pb2N0bF9zZXRlc3NpZFxuIik7CiAKLSAgICAvL3ByaW50aygic3NpZGxlbj0lZFxuIiwgZXJxLT5sZW5ndGgpOyAvL2ZvciBhbnksIGl0IGlzIDEuCi0gICAgaWYgKGVycS0+ZmxhZ3MpIHsKLSAgICAgICAgaWYgKGVycS0+bGVuZ3RoID4gKElXX0VTU0lEX01BWF9TSVpFKzEpKQotICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKwkvKiBwcmludGsoInNzaWRsZW49JWRcbiIsIGVycS0+bGVuZ3RoKTsgLy9mb3IgYW55LCBpdCBpcyAxLiAqLworCWlmIChlcnEtPmZsYWdzKSB7CisJCWlmIChlcnEtPmxlbmd0aCA+IChJV19FU1NJRF9NQVhfU0laRSsxKSkKKwkJCXJldHVybiAtRTJCSUc7CiAKLSAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGVzc2lkYnVmLCBlcnEtPnBvaW50ZXIsIGVycS0+bGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKGVzc2lkYnVmLCBlcnEtPnBvaW50ZXIsIGVycS0+bGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KIAotICAgIC8vemRfRGlzYXNvY0FsbCgyKTsKLSAgICAvL3dhaXRfbXMoMTAwKTsKKwkvKiB6ZF9EaXNhc29jQWxsKDIpOyAqLworCS8qIHdhaXRfbXMoMTAwKTsgKi8KIAotICAgIHByaW50ayhLRVJOX0VSUiAiZXNzaWRidWY6ICIpOworCXByaW50ayhLRVJOX0VSUiAiZXNzaWRidWY6ICIpOwogCi0gICAgZm9yKGkgPSAwOyBpIDwgZXJxLT5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiJTAyeCAiLCBlc3NpZGJ1ZltpXSk7Ci0gICAgfQorCWZvciAoaSA9IDA7IGkgPCBlcnEtPmxlbmd0aDsgaSsrKQorCQlwcmludGsoS0VSTl9FUlIgIiUwMnggIiwgZXNzaWRidWZbaV0pOwogCi0gICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgIGVzc2lkYnVmW2VycS0+bGVuZ3RoXSA9ICdcMCc7Ci0gICAgLy9tZW1jcHkobWFjcC0+d2Qud3Muc3NpZCwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsKLSAgICAvL21hY3AtPndkLndzLnNzaWRMZW4gPSBzdHJsZW4oZXNzaWRidWYpKzI7Ci0gICAgLy9tYWNwLT53ZC53cy5zc2lkWzFdID0gc3RybGVuKGVzc2lkYnVmKTsgLy8gVXBkYXRlIHNzaWQgbGVuZ3RoCisJZXNzaWRidWZbZXJxLT5sZW5ndGhdID0gJ1wwJzsKKwkvKiBtZW1jcHkobWFjcC0+d2Qud3Muc3NpZCwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsgKi8KKwkvKiBtYWNwLT53ZC53cy5zc2lkTGVuID0gc3RybGVuKGVzc2lkYnVmKSsyOyAqLworCS8qIG1hY3AtPndkLndzLnNzaWRbMV0gPSBzdHJsZW4oZXNzaWRidWYpOyBVcGRhdGUgc3NpZCBsZW5ndGggKi8KIAotICAgIHpmaVdsYW5TZXRTU0lEKGRldiwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsKLSNpZiAwCi0gICAgcHJpbnRrKEtFUk5fRVJSICJtYWNwLT53ZC53cy5zc2lkOiAiKTsKKwl6ZmlXbGFuU2V0U1NJRChkZXYsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7CisJI2lmIDAKKwkJcHJpbnRrKEtFUk5fRVJSICJtYWNwLT53ZC53cy5zc2lkOiAiKTsKIAotICAgIGZvcihpID0gMDsgaSA8IG1hY3AtPndkLndzLnNzaWRMZW47IGkrKykKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiJTAyeCAiLCBtYWNwLT53ZC53cy5zc2lkW2ldKTsKLSAgICB9CisJCWZvciAoaSA9IDA7IGkgPCBtYWNwLT53ZC53cy5zc2lkTGVuOyBpKyspCisJCQlwcmludGsoS0VSTl9FUlIgIiUwMnggIiwgbWFjcC0+d2Qud3Muc3NpZFtpXSk7CiAKLSAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7Ci0jZW5kaWYKLSAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCSNlbmRpZgogCi0jZW5kaWYKKwl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCXpmaVdsYW5FbmFibGUoZGV2KTsKIAotICAgIHJldHVybiAwOworCSNlbmRpZgorCisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZfaW9jdGxfZ2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BvaW50ICplcnEpCiB7Ci0gICAgIC8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgICB1OF90IGVzc2lkYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOwotICAgICB1OF90IGxlbjsKLSAgICAgdThfdCBpOworCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsgKi8KKwl1OF90IGVzc2lkYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCXU4X3QgbGVuOworCXU4X3QgaTsKIAogCi0gICAgIC8vbGVuID0gbWFjcC0+d2Qud3Muc3NpZExlbjsKLSAgICAgLy9tZW1jcHkoZXNzaWRidWYsIG1hY3AtPndkLndzLnNzaWQsIG1hY3AtPndkLndzLnNzaWRMZW4pOwotICAgICB6ZmlXbGFuUXVlcnlTU0lEKGRldiwgZXNzaWRidWYsICZsZW4pOworCS8qIGxlbiA9IG1hY3AtPndkLndzLnNzaWRMZW47ICovCisJLyogbWVtY3B5KGVzc2lkYnVmLCBtYWNwLT53ZC53cy5zc2lkLCBtYWNwLT53ZC53cy5zc2lkTGVuKTsgKi8KKwl6ZmlXbGFuUXVlcnlTU0lEKGRldiwgZXNzaWRidWYsICZsZW4pOwogCi0gICAgIGVzc2lkYnVmW2xlbl0gPSAwOworCWVzc2lkYnVmW2xlbl0gPSAwOwogCi0gICAgIHByaW50ayhLRVJOX0VSUiAiRVNTSUQ6ICIpOworCXByaW50ayhLRVJOX0VSUiAiRVNTSUQ6ICIpOwogCi0gICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICB7Ci0gICAgICAgICBwcmludGsoS0VSTl9FUlIgIiVjIiwgZXNzaWRidWZbaV0pOwotICAgICB9CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlwcmludGsoS0VSTl9FUlIgIiVjIiwgZXNzaWRidWZbaV0pOwogCi0gICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICAgZXJxLT5mbGFncz0gMTsKLSAgICAgZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpICsgMTsKKwllcnEtPmZsYWdzID0gMTsKKwllcnEtPmxlbmd0aCA9IHN0cmxlbihlc3NpZGJ1ZikgKyAxOwogCi0gICAgIGlmIChlcnEtPnBvaW50ZXIpCi0gICAgICAgICBpZiAoY29weV90b191c2VyKGVycS0+cG9pbnRlciwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKSkKLSAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwlpZiAoZXJxLT5wb2ludGVyKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoZXJxLT5wb2ludGVyLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCi0gICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCi0KIGludCB1c2JkcnZfaW9jdGxfc2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19wYXJhbSAqcnJxKQogewotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKICNpZiBXSVJFTEVTU19FWFQgPiAxNApAQCAtMjY3LDQ2MiArMjUzLDQxOCBAQAogICogRW5jb2RlIGEgV1BBIG9yIFJTTiBpbmZvcm1hdGlvbiBlbGVtZW50IGFzIGEgY3VzdG9tCiAgKiBlbGVtZW50IHVzaW5nIHRoZSBob3N0YXAgZm9ybWF0LgogICovCi11MzIgZW5jb2RlX2llKHZvaWQgKmJ1ZiwgdTMyIGJ1ZnNpemUsIGNvbnN0IHU4ICppZSwgdTMyIGllbGVuLCBjb25zdCB1OCAqbGVhZGVyLCB1MzIgbGVhZGVyX2xlbikKK3UzMiBlbmNvZGVfaWUodm9pZCAqYnVmLCB1MzIgYnVmc2l6ZSwgY29uc3QgdTggKmllLCB1MzIgaWVsZW4sCisJCWNvbnN0IHU4ICpsZWFkZXIsIHUzMiBsZWFkZXJfbGVuKQogewotICAgIHU4ICpwOwotICAgIHUzMiBpOworCXU4ICpwOworCXUzMiBpOwogCi0gICAgaWYgKGJ1ZnNpemUgPCBsZWFkZXJfbGVuKQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gYnVmOwotICAgIG1lbWNweShwLCBsZWFkZXIsIGxlYWRlcl9sZW4pOwotICAgIGJ1ZnNpemUgLT0gbGVhZGVyX2xlbjsKLSAgICBwICs9IGxlYWRlcl9sZW47Ci0gICAgZm9yIChpID0gMDsgaSA8IGllbGVuICYmIGJ1ZnNpemUgPiAyOyBpKyspCi0gICAgICAgIHAgKz0gc3ByaW50ZihwLCAiJTAyeCIsIGllW2ldKTsKLSAgICByZXR1cm4gKGkgPT0gaWVsZW4gPyBwIC0gKHU4ICopYnVmIDogMCk7CisJaWYgKGJ1ZnNpemUgPCBsZWFkZXJfbGVuKQorCQlyZXR1cm4gMDsKKwlwID0gYnVmOworCW1lbWNweShwLCBsZWFkZXIsIGxlYWRlcl9sZW4pOworCWJ1ZnNpemUgLT0gbGVhZGVyX2xlbjsKKwlwICs9IGxlYWRlcl9sZW47CisJZm9yIChpID0gMDsgaSA8IGllbGVuICYmIGJ1ZnNpemUgPiAyOyBpKyspCisJCXAgKz0gc3ByaW50ZihwLCAiJTAyeCIsIGllW2ldKTsKKwlyZXR1cm4gKGkgPT0gaWVsZW4gPyBwIC0gKHU4ICopYnVmOjApOwogfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSVJFTEVTU19FWFQgPiAxNCAqLworI2VuZGlmICAvKiBXSVJFTEVTU19FWFQgPiAxNCAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGVudAogICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZAogICovCiBjaGFyICp1c2JkcnZfdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjdXJyZW50X2V2LAotICAgICAgICBjaGFyICplbmRfYnVmLCBzdHJ1Y3QgenNCc3NJbmZvICpsaXN0KQorCWNoYXIgKmVuZF9idWYsIHN0cnVjdCB6c0Jzc0luZm8gKmxpc3QpCiB7Ci0gICAgc3RydWN0IGl3X2V2ZW50IGl3ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICB1MTZfdCBjYXBhYmlsaXRpZXM7Ci0gICAgY2hhciAqY3VycmVudF92YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciByYXRlcyAqLwotICAgIGNoYXIgKmxhc3RfZXY7Ci0gICAgaW50IGk7Ci0jaWYgV0lSRUxFU1NfRVhUID4gMTQKLSAgICBjaGFyICAgIGJ1Zls2NCoyICsgMzBdOwotI2VuZGlmCisJc3RydWN0IGl3X2V2ZW50IGl3ZTsgICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCisJdTE2X3QgY2FwYWJpbGl0aWVzOworCWNoYXIgKmN1cnJlbnRfdmFsOyAgICAgLyogRm9yIHJhdGVzICovCisJY2hhciAqbGFzdF9ldjsKKwlpbnQgaTsKKwkjaWYgV0lSRUxFU1NfRVhUID4gMTQKKwkJY2hhciAgICBidWZbNjQqMiArIDMwXTsKKwkjZW5kaWYKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCi0gICAgaXdlLmNtZCA9IFNJT0NHSVdBUDsKLSAgICBpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLSAgICBtZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBsaXN0LT5ic3NpZCwgRVRIX0FMRU4pOwotICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudCgKLQlpbmZvLAotCWN1cnJlbnRfZXYsCi0JZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGxpc3QtPmJzc2lkLCBFVEhfQUxFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sCWN1cnJlbnRfZXYsCisJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLworCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwogCi0vKiBBZGQgdGhlIEVTU0lEICovCi0gICAgaXdlLnUuZGF0YS5sZW5ndGggPSBsaXN0LT5zc2lkWzFdOwotICAgIGlmKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCi0gICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gMzI7Ci0gICAgaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLSAgICBpd2UudS5kYXRhLmZsYWdzID0gMTsKLSAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoCi0JaW5mbywKLQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAmbGlzdC0+c3NpZFsyXSk7CisJLyogQWRkIHRoZSBFU1NJRCAqLworCWl3ZS51LmRhdGEubGVuZ3RoID0gbGlzdC0+c3NpZFsxXTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKKwlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLAljdXJyZW50X2V2LAorCQkJCQllbmRfYnVmLCAmaXdlLCAmbGlzdC0+c3NpZFsyXSk7CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBBZGQgbW9kZSAqLwotICAgIGl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLSAgICBjYXBhYmlsaXRpZXMgPSAobGlzdC0+Y2FwYWJpbGl0eVsxXSA8PCA4KSArIGxpc3QtPmNhcGFiaWxpdHlbMF07Ci0gICAgaWYoY2FwYWJpbGl0aWVzICYgKDB4MDEgfCAweDAyKSkKLSAgICB7Ci0gICAgICAgIGlmKGNhcGFiaWxpdGllcyAmIDB4MDEpCi0gICAgICAgICAgICBpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotICAgICAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCi0JCWluZm8sCi0JCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLSAgICB9CisJLyogQWRkIG1vZGUgKi8KKwlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJY2FwYWJpbGl0aWVzID0gKGxpc3QtPmNhcGFiaWxpdHlbMV0gPDwgOCkgKyBsaXN0LT5jYXBhYmlsaXR5WzBdOworCWlmIChjYXBhYmlsaXRpZXMgJiAoMHgwMSB8IDB4MDIpKSB7CisJCWlmIChjYXBhYmlsaXRpZXMgJiAweDAxKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLAljdXJyZW50X2V2LAorCQkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCX0KIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIEFkZCBmcmVxdWVuY3kgKi8KLSAgICBpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0gICAgaXdlLnUuZnJlcS5tID0gbGlzdC0+Y2hhbm5lbDsKLS8qIENoYW5uZWwgZnJlcXVlbmN5IGluIEtIeiAqLwotICAgIGlmIChpd2UudS5mcmVxLm0gPiAxNCkKLSAgICB7Ci0gICAgICAgIGlmICgoMTg0IDw9IGl3ZS51LmZyZXEubSkgJiYgKGl3ZS51LmZyZXEubTw9MTk2KSkKLSAgICAgICAgICAgICAgaXdlLnUuZnJlcS5tID0gNDAwMCArIGl3ZS51LmZyZXEubSAqIDU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgaXdlLnUuZnJlcS5tID0gNTAwMCArIGl3ZS51LmZyZXEubSAqIDU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChpd2UudS5mcmVxLm0gPT0gMTQpCi0gICAgICAgICAgICAgIGl3ZS51LmZyZXEubSA9IDI0ODQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgaXdlLnUuZnJlcS5tID0gMjQxMiArIChpd2UudS5mcmVxLm0gLSAxKSAqIDU7Ci0gICAgfQotICAgIGl3ZS51LmZyZXEuZSA9IDY7Ci0gICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KAotCWluZm8sCi0gICAgCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwkvKiBBZGQgZnJlcXVlbmN5ICovCisJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCWl3ZS51LmZyZXEubSA9IGxpc3QtPmNoYW5uZWw7CisJLyogQ2hhbm5lbCBmcmVxdWVuY3kgaW4gS0h6ICovCisJaWYgKGl3ZS51LmZyZXEubSA+IDE0KSB7CisJCWlmICgoMTg0IDw9IGl3ZS51LmZyZXEubSkgJiYgKGl3ZS51LmZyZXEubSA8PSAxOTYpKQorCQkJaXdlLnUuZnJlcS5tID0gNDAwMCArIGl3ZS51LmZyZXEubSAqIDU7CisJCWVsc2UKKwkJCWl3ZS51LmZyZXEubSA9IDUwMDAgKyBpd2UudS5mcmVxLm0gKiA1OworCX0gZWxzZSB7CisJCWlmIChpd2UudS5mcmVxLm0gPT0gMTQpCisJCQlpd2UudS5mcmVxLm0gPSAyNDg0OworCQllbHNlCisJCQlpd2UudS5mcmVxLm0gPSAyNDEyICsgKGl3ZS51LmZyZXEubSAtIDEpICogNTsKKwl9CisJaXdlLnUuZnJlcS5lID0gNjsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLwotICAgIGl3ZS5jbWQgPSBJV0VWUVVBTDsKLSNpZiBXSVJFTEVTU19FWFQgPiAxOAotICAgIGl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfUVVBTF9VUERBVEVEIHwgSVdfUVVBTF9MRVZFTF9VUERBVEVECi0gICAgICAgICAgICAgICAgICAgICAgICB8SVdfUVVBTF9OT0lTRV9VUERBVEVEOwotI2VuZGlmCi0gICAgaXdlLnUucXVhbC5sZXZlbCA9IGxpc3QtPnNpZ25hbFN0cmVuZ3RoOwotICAgIGl3ZS51LnF1YWwubm9pc2UgPSAwOwotICAgIGl3ZS51LnF1YWwucXVhbCA9IGxpc3QtPnNpZ25hbFF1YWxpdHk7Ci0gICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KAotCWluZm8sCi0JY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KKwlpd2UuY21kID0gSVdFVlFVQUw7CisJI2lmIFdJUkVMRVNTX0VYVCA+IDE4CisJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQgfCBJV19RVUFMX0xFVkVMX1VQREFURUQKKwkJCQl8IElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKKwkjZW5kaWYKKwlpd2UudS5xdWFsLmxldmVsID0gbGlzdC0+c2lnbmFsU3RyZW5ndGg7CisJaXdlLnUucXVhbC5ub2lzZSA9IDA7CisJaXdlLnUucXVhbC5xdWFsID0gbGlzdC0+c2lnbmFsUXVhbGl0eTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywJY3VycmVudF9ldiwKKwkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLworCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAotICAgIGl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotICAgIGlmKGNhcGFiaWxpdGllcyAmIDB4MTApCi0gICAgICAgIGl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLSAgICBlbHNlCi0gICAgICAgIGl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJaWYgKGNhcGFiaWxpdGllcyAmIDB4MTApCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CiAKLSAgICBpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0gICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAotCWluZm8sCi0JY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgbGlzdC0+c3NpZCk7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLAljdXJyZW50X2V2LAorCQkJCQllbmRfYnVmLCAmaXdlLCBsaXN0LT5zc2lkKTsKIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIFJhdGUgOiBzdHVmZmluZyBtdWx0aXBsZSB2YWx1ZXMgaW4gYSBzaW5nbGUgZXZlbnQgcmVxdWlyZSBhIGJpdAotICogbW9yZSBvZiBtYWdpYyAqLwotICAgIGN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIElXX0VWX0xDUF9MRU47CisJLyogUmF0ZSA6IHN0dWZmaW5nIG11bHRpcGxlIHZhbHVlcyBpbiBhIHNpbmdsZSBldmVudCByZXF1aXJlIGEgYml0CisJKiBtb3JlIG9mIG1hZ2ljCisJKi8KKwljdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOwogCi0gICAgaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCi0gICAgaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CiAKLSAgICBmb3IoaSA9IDAgOyBpIDwgbGlzdC0+c3VwcG9ydGVkUmF0ZXNbMV0gOyBpKyspCi0gICAgewotLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KLSAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgobGlzdC0+c3VwcG9ydGVkUmF0ZXNbaSsyXSAmIDB4N2YpICogNTAwMDAwKTsKLS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KLSAgICAgICAgY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZSgKLQkJaW5mbywKLQkJY3VycmVudF9ldiwgY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJZm9yIChpID0gMCA7IGkgPCBsaXN0LT5zdXBwb3J0ZWRSYXRlc1sxXSA7IGkrKykgeworCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChsaXN0LT5zdXBwb3J0ZWRSYXRlc1tpKzJdICYgMHg3ZikKKwkJCQkJKiA1MDAwMDApOworCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCisJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKKwkJCQljdXJyZW50X3ZhbCwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKIAotICAgICAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgICAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X3ZhbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgICAgIH0KKwkJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwkJaWYgKGxhc3RfZXYgPT0gY3VycmVudF92YWwpCisJCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgICAgICBsYXN0X2V2ID0gY3VycmVudF92YWw7Ci0gICAgfQorCQlsYXN0X2V2ID0gY3VycmVudF92YWw7CisJfQogCi0gICAgZm9yIChpID0gMCA7IGkgPCBsaXN0LT5leHRTdXBwb3J0ZWRSYXRlc1sxXSA7IGkrKykKLSAgICB7Ci0vKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwotICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gKChsaXN0LT5leHRTdXBwb3J0ZWRSYXRlc1tpKzJdICYgMHg3ZikgKiA1MDAwMDApOwotLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLwotICAgICAgICBjdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKAotCQlpbmZvLAotCQljdXJyZW50X2V2LCBjdXJyZW50X3ZhbCwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwlmb3IgKGkgPSAwIDsgaSA8IGxpc3QtPmV4dFN1cHBvcnRlZFJhdGVzWzFdIDsgaSsrKSB7CisJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCisJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGxpc3QtPmV4dFN1cHBvcnRlZFJhdGVzW2krMl0gJiAweDdmKQorCQkJCQkqIDUwMDAwMCk7CisJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKwkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAorCQkJCWN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCi0gICAgICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfdmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICAgICAgfQorCQkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCQlpZiAobGFzdF9ldiA9PSBjdXJyZW50X3ZhbCkKKwkJCXJldHVybiBlbmRfYnVmOwogCi0gICAgICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OwotICAgIH0KKwkJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJfQogCi0vKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KLSAgICBpZigoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCi0gICAgICAgIGN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKLSNpZiBXSVJFTEVTU19FWFQgPiAxNAotI2RlZmluZSBJRUVFODAyMTFfRUxFTUlEX1JTTiAweDMwCi0gICAgbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLSAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYmNuX2ludD0lZCIsIChsaXN0LT5iZWFjb25JbnRlcnZhbFsxXSA8PCA4KSArIGxpc3QtPmJlYWNvbkludGVydmFsWzBdKTsKLSAgICBpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKLQkJaW5mbywKLQkJY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKwkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KKwlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBJV19FVl9MQ1BfTEVOKQorCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CisJI2lmIFdJUkVMRVNTX0VYVCA+IDE0CisJCSNkZWZpbmUgSUVFRTgwMjExX0VMRU1JRF9SU04gMHgzMAorCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImJjbl9pbnQ9JWQiLCAobGlzdC0+YmVhY29uSW50ZXJ2YWxbMV0gPDwgOCkKKwkJCQkJCSsgbGlzdC0+YmVhY29uSW50ZXJ2YWxbMF0pOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQllbmRfYnVmLCAmaXdlLCBidWYpOwogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotICAgIGlmIChsaXN0LT53cGFJZVsxXSAhPSAwKQotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcnNuX2xlYWRlcltdID0gInJzbl9pZT0iOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciB3cGFfbGVhZGVyW10gPSAid3BhX2llPSI7CisJaWYgKGxpc3QtPndwYUllWzFdICE9IDApIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgcnNuX2xlYWRlcltdID0gInJzbl9pZT0iOworCQlzdGF0aWMgY29uc3QgY2hhciB3cGFfbGVhZGVyW10gPSAid3BhX2llPSI7CiAKLSAgICAgICAgbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLSAgICAgICAgaXdlLmNtZCA9IElXRVZDVVNUT007Ci0gICAgICAgIGlmIChsaXN0LT53cGFJZVswXSA9PSBJRUVFODAyMTFfRUxFTUlEX1JTTikKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgbGlzdC0+d3BhSWUsIGxpc3QtPndwYUllWzFdKzIsCi0gICAgICAgICAgICAgICAgcnNuX2xlYWRlciwgc2l6ZW9mKHJzbl9sZWFkZXIpLTEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLAotICAgICAgICAgICAgICAgIGxpc3QtPndwYUllLCBsaXN0LT53cGFJZVsxXSsyLAotICAgICAgICAgICAgICAgIHdwYV9sZWFkZXIsIHNpemVvZih3cGFfbGVhZGVyKS0xKTsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCWlmIChsaXN0LT53cGFJZVswXSA9PSBJRUVFODAyMTFfRUxFTUlEX1JTTikKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkJCWxpc3QtPndwYUllLCBsaXN0LT53cGFJZVsxXSsyLAorCQkJCQlyc25fbGVhZGVyLCBzaXplb2YocnNuX2xlYWRlciktMSk7CisJCWVsc2UKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkJCWxpc3QtPndwYUllLCBsaXN0LT53cGFJZVsxXSsyLAorCQkJCQl3cGFfbGVhZGVyLCBzaXplb2Yod3BhX2xlYWRlciktMSk7CiAKLSAgICAgICAgaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApCi0gICAgICAgICAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoCi0JCWluZm8sCi0JCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGJ1Zik7CisJCWlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKQorCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJZW5kX2J1ZiwgJml3ZSwgYnVmKTsKIAotICAgICAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgICAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICAgICAgfQorCQkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCQlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7Ci0gICAgfQotICAgIGlmIChsaXN0LT5yc25JZVsxXSAhPSAwKQotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcnNuX2xlYWRlcltdID0gInJzbl9pZT0iOwotICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJfQogCi0gICAgICAgIGlmIChsaXN0LT5yc25JZVswXSA9PSBJRUVFODAyMTFfRUxFTUlEX1JTTikKLSAgICAgICAgewotICAgICAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICAgICBsaXN0LT5yc25JZSwgbGlzdC0+cnNuSWVbMV0rMiwKLSAgICAgICAgICAgICAgICByc25fbGVhZGVyLCBzaXplb2YocnNuX2xlYWRlciktMSk7Ci0gICAgICAgICAgICBpZiAoaXdlLnUuZGF0YS5sZW5ndGggIT0gMCkKLSAgICAgICAgICAgICAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoCi0JCQlpbmZvLAotCQkJY3VycmVudF9ldiwgZW5kX2J1ZiwgICZpd2UsIGJ1Zik7CisJaWYgKGxpc3QtPnJzbkllWzFdICE9IDApIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgcnNuX2xlYWRlcltdID0gInJzbl9pZT0iOworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKIAotICAgICAgICAgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICAgICAgICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgICAgICAgICB9CisJCWlmIChsaXN0LT5yc25JZVswXSA9PSBJRUVFODAyMTFfRUxFTUlEX1JTTikgeworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKKwkJCWxpc3QtPnJzbkllLCBsaXN0LT5yc25JZVsxXSsyLAorCQkJcnNuX2xlYWRlciwgc2l6ZW9mKHJzbl9sZWFkZXIpLTEpOworCQkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApCisJCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sCisJCQkJCWN1cnJlbnRfZXYsIGVuZF9idWYsICAmaXdlLCBidWYpOwogCi0gICAgICAgICAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotLyogVGhlIG90aGVyIGRhdGEgaW4gdGhlIHNjYW4gcmVzdWx0IGFyZSBub3QgcmVhbGx5Ci0gKiBpbnRlcmVzdGluZywgc28gZm9yIG5vdyBkcm9wIGl0ICovCi0gICAgcmV0dXJuIGN1cnJlbnRfZXY7CisJCQkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCQkJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJCQlyZXR1cm4gZW5kX2J1ZjsKKworCQkJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJCX0KKwl9CisJI2VuZGlmCisJLyogVGhlIG90aGVyIGRhdGEgaW4gdGhlIHNjYW4gcmVzdWx0IGFyZSBub3QgcmVhbGx5CisJKiBpbnRlcmVzdGluZywgc28gZm9yIG5vdyBkcm9wIGl0CisJKi8KKwlyZXR1cm4gY3VycmVudF9ldjsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXVuaW9uIGl3cmVxX2RhdGEgKndycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJLyogc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OyAqLwogCi0gICAgc3RyY3B5KHdycS0+bmFtZSwgIklFRUUgODAyLjExLU1JTU8iKTsKKwlzdHJjcHkod3JxLT5uYW1lLCAiSUVFRSA4MDIuMTEtTUlNTyIpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKLSAgICB1MzJfdCBGcmVxS0h6OwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1MzJfdCBGcmVxS0h6OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChmcmVxLT5lID4gMSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZyZXEtPmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChmcmVxLT5lID09IDEpCi0gICAgewotICAgICAgICBGcmVxS0h6ID0gKGZyZXEtPm0gLyAxMDAwMDApOworCWlmIChmcmVxLT5lID09IDEpIHsKKwkJRnJlcUtIeiA9IChmcmVxLT5tIC8gMTAwMDAwKTsKIAotICAgICAgICBpZiAoRnJlcUtIeiA+IDQwMDAwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChGcmVxS0h6ID4gNTgyNTAwMCkKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gNTgyNTAwMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZyZXFLSHogPCA0OTIwMDAwKQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSA0OTIwMDAwOwotICAgICAgICAgICAgZWxzZSBpZiAoRnJlcUtIeiA8IDUwMDAwMDApCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9ICgoKEZyZXFLSHogLSA0MDAwMDAwKSAvIDUwMDApICogNTAwMCkgKyA0MDAwMDAwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSAoKChGcmVxS0h6IC0gNTAwMDAwMCkgLyA1MDAwKSAqIDUwMDApICsgNTAwMDAwMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChGcmVxS0h6ID4gMjQ4NDAwMCkKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gMjQ4NDAwMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZyZXFLSHogPCAyNDEyMDAwKQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSAyNDEyMDAwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSAoKChGcmVxS0h6IC0gMjQxMjAwMCkgLyA1MDAwKSAqIDUwMDApICsgMjQxMjAwMDsKLSAgICAgICAgfQorCQlpZiAoRnJlcUtIeiA+IDQwMDAwMDApIHsKKwkJCWlmIChGcmVxS0h6ID4gNTgyNTAwMCkKKwkJCQlGcmVxS0h6ID0gNTgyNTAwMDsKKwkJCWVsc2UgaWYgKEZyZXFLSHogPCA0OTIwMDAwKQorCQkJCUZyZXFLSHogPSA0OTIwMDAwOworCQkJZWxzZSBpZiAoRnJlcUtIeiA8IDUwMDAwMDApCisJCQkJRnJlcUtIeiA9ICgoKEZyZXFLSHogLSA0MDAwMDAwKSAvIDUwMDApICogNTAwMCkKKwkJCQkJCSsgNDAwMDAwMDsKKwkJCWVsc2UKKwkJCQlGcmVxS0h6ID0gKCgoRnJlcUtIeiAtIDUwMDAwMDApIC8gNTAwMCkgKiA1MDAwKQorCQkJCQkJKyA1MDAwMDAwOworCQl9IGVsc2UgeworCQkJaWYgKEZyZXFLSHogPiAyNDg0MDAwKQorCQkJCUZyZXFLSHogPSAyNDg0MDAwOworCQkJZWxzZSBpZiAoRnJlcUtIeiA8IDI0MTIwMDApCisJCQkJRnJlcUtIeiA9IDI0MTIwMDA7CisJCQllbHNlCisJCQkJRnJlcUtIeiA9ICgoKEZyZXFLSHogLSAyNDEyMDAwKSAvIDUwMDApICogNTAwMCkKKwkJCQkJCSsgMjQxMjAwMDsKKwkJfQorCX0gZWxzZSB7CisJCUZyZXFLSHogPSB1c2JkcnZfY2hhbjJmcmVxKGZyZXEtPm0pOwogCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEZyZXFLSHogPSB1c2JkcnZfY2hhbjJmcmVxKGZyZXEtPm0pOworCQlpZiAoRnJlcUtIeiAhPSAtMSkKKwkJCUZyZXFLSHogKj0gMTAwMDsKKwkJZWxzZQorCQkJRnJlcUtIeiA9IDI0MTIwMDA7CisJfQogCi0gICAgICAgIGlmIChGcmVxS0h6ICE9IC0xKQotICAgICAgICAgICAgRnJlcUtIeiAqPSAxMDAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBGcmVxS0h6ID0gMjQxMjAwMDsKLSAgICB9CisJLyogcHJpbnRrKCJmcmVxLT5tOiAlZCwgZnJlcS0+ZTogJWRcbiIsIGZyZXEtPm0sIGZyZXEtPmUpOyAqLworCS8qIHByaW50aygiRnJlcUtIejogJWRcbiIsIEZyZXFLSHopOyAqLwogCi0gICAgLy9wcmludGsoImZyZXEtPm06ICVkLCBmcmVxLT5lOiAlZFxuIiwgZnJlcS0+bSwgZnJlcS0+ZSk7Ci0gICAgLy9wcmludGsoIkZyZXFLSHo6ICVkXG4iLCBGcmVxS0h6KTsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpIHsKKwkJemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIEZyZXFLSHosIDApOyAvKiBJbW1lZGlhdGUgKi8KKwkJLyogdThfdCB3cGFpZUxlbix3cGFpZVs1MF07ICovCisJCS8qIHpmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7ICovCisJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJCXpmaVdsYW5FbmFibGUoZGV2KTsKKwkJLyogaWYgKHdwYWllTGVuID4gMikgKi8KKwkJLyogemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsgKi8KKwl9CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCi0gICAgewotICAgICAgICB6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgRnJlcUtIeiwgMCk7IC8vIEltbWVkaWF0ZQotICAgICAgICAvL3U4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOwotICAgICAgICAvL3pmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7Ci0gICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgLy9pZiAod3BhaWVMZW4gPiAyKQotICAgICAgICAvLyAgICB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOwotICAgIH0KLQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGZyZXEtPm0gPSB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KTsKLSAgICBmcmVxLT5lID0gMzsKKwlmcmVxLT5tID0gemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldik7CisJZnJlcS0+ZSA9IDM7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXVuaW9uIGl3cmVxX2RhdGEgKndycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHU4X3QgV2xhbk1vZGU7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXU4X3QgV2xhbk1vZGU7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBzd2l0Y2god3JxLT5tb2RlKQotICAgIHsKLSAgICAgICAgY2FzZSBJV19NT0RFX01BU1RFUjoKLSAgICAgICAgICAgIFdsYW5Nb2RlID0gWk1fTU9ERV9BUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX01PREVfSU5GUkE6Ci0gICAgICAgICAgICBXbGFuTW9kZSA9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19NT0RFX0FESE9DOgotICAgICAgICAgICAgV2xhbk1vZGUgPSBaTV9NT0RFX0lCU1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdsYW5Nb2RlID0gWk1fTU9ERV9JQlNTOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorCXN3aXRjaCAod3JxLT5tb2RlKSB7CisJY2FzZSBJV19NT0RFX01BU1RFUjoKKwkJV2xhbk1vZGUgPSBaTV9NT0RFX0FQOworCQlicmVhazsKKwljYXNlIElXX01PREVfSU5GUkE6CisJCVdsYW5Nb2RlID0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQlXbGFuTW9kZSA9IFpNX01PREVfSUJTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV2xhbk1vZGUgPSBaTV9NT0RFX0lCU1M7CisJCWJyZWFrOworCX0KIAotICAgIHpmaVdsYW5TZXRXbGFuTW9kZShkZXYsV2xhbk1vZGUpOwotICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMSk7Ci0gICAgemZpV2xhbkVuYWJsZShkZXYpOworCXpmaVdsYW5TZXRXbGFuTW9kZShkZXYsIFdsYW5Nb2RlKTsKKwl6ZmlXbGFuRGlzYWJsZShkZXYsIDEpOworCXpmaVdsYW5FbmFibGUoZGV2KTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQorCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQogewotICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICBzd2l0Y2goemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSkKLSAgICB7Ci0gICAgICAgIGNhc2UgWk1fTU9ERV9BUDoKLSAgICAgICAgICAgICptb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFOgotICAgICAgICAgICAgKm1vZGUgPSBJV19NT0RFX0lORlJBOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fTU9ERV9JQlNTOgotICAgICAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FESE9DOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqbW9kZSA9IElXX01PREVfQURIT0M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisJc3dpdGNoICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpKSB7CisJY2FzZSBaTV9NT0RFX0FQOgorCQkqbW9kZSA9IElXX01PREVfTUFTVEVSOworCQlicmVhazsKKwljYXNlIFpNX01PREVfSU5GUkFTVFJVQ1RVUkU6CisJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJYnJlYWs7CisJY2FzZSBaTV9NT0RFX0lCU1M6CisJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKm1vZGUgPSBJV19NT0RFX0FESE9DOworCQlicmVhazsKKwl9CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC03NDMsMzM4ICs2ODUsMzQxIEBACiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKLSAgICBpbnQgaSwgdmFsOwotICAgIC8vaW50IG51bV9iYW5kX2E7Ci0gICAgdTE2X3QgY2hhbm5lbHNbNjBdOwotICAgIHUxNl90IGNoYW5uZWxfbnVtOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCWludCBpLCB2YWw7CisJLyogaW50IG51bV9iYW5kX2E7ICovCisJdTE2X3QgY2hhbm5lbHNbNjBdOworCXUxNl90IGNoYW5uZWxfbnVtOwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0jaWYgV0lSRUxFU1NfRVhUID4gOQotICAgIHJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07Ci0vLyBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4KLSNlbmRpZgorCSNpZiBXSVJFTEVTU19FWFQgPiA5CisJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKKwkvKiBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4gKi8KKwkjZW5kaWYKIAotI2lmIFdJUkVMRVNTX0VYVCA+IDEwCi0gICAgcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0gICAgcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTM7CisJI2lmIFdJUkVMRVNTX0VYVCA+IDEwCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTM7CiAKLSAgICByYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOwotICAgIHJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotICAgIHJhbmdlLT5taW5fcmV0cnkgPSAwOwotICAgIHJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisJI2VuZGlmICAvKiBXSVJFTEVTU19FWFQgPiAxMCAqLwogCi0gICAgY2hhbm5lbF9udW0gPSB6ZmlXbGFuUXVlcnlBbGxvd0NoYW5uZWxzKGRldiwgY2hhbm5lbHMpOworCWNoYW5uZWxfbnVtID0gemZpV2xhblF1ZXJ5QWxsb3dDaGFubmVscyhkZXYsIGNoYW5uZWxzKTsKIAotICAgIC8qIEd1cmFudGVlIHJlcG9ydGVkIGNoYW5uZWwgbnVtYmVycyBpcyBsZXNzIG9yIGVxdWFsIHRvIElXX01BWF9GUkVRVUVOQ0lFUyAqLwotICAgIGlmIChjaGFubmVsX251bSA+IElXX01BWF9GUkVRVUVOQ0lFUykKLSAgICAgICAgY2hhbm5lbF9udW0gPSBJV19NQVhfRlJFUVVFTkNJRVM7CisJLyogR3VyYW50ZWUgcmVwb3J0ZWQgY2hhbm5lbCBudW1iZXJzIGlzIGxlc3MKKwkqIG9yIGVxdWFsIHRvIElXX01BWF9GUkVRVUVOQ0lFUworCSovCisJaWYgKGNoYW5uZWxfbnVtID4gSVdfTUFYX0ZSRVFVRU5DSUVTKQorCQljaGFubmVsX251bSA9IElXX01BWF9GUkVRVUVOQ0lFUzsKIAotICAgIHZhbCA9IDA7CisJdmFsID0gMDsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsX251bTsgaSsrKQotICAgIHsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5pID0gdXNiZHJ2X2ZyZXEyY2hhbihjaGFubmVsc1tpXSk7Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0ubSA9IGNoYW5uZWxzW2ldOwotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmUgPSA2OwotICAgICAgICB2YWwrKzsKLSAgICB9CisJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxfbnVtOyBpKyspIHsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gdXNiZHJ2X2ZyZXEyY2hhbihjaGFubmVsc1tpXSk7CisJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IGNoYW5uZWxzW2ldOworCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSA2OworCQl2YWwrKzsKKwl9CiAKLSAgICByYW5nZS0+bnVtX2NoYW5uZWxzID0gY2hhbm5lbF9udW07Ci0gICAgcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjaGFubmVsX251bTsKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gY2hhbm5lbF9udW07CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjaGFubmVsX251bTsKIAotI2lmIDAKLSAgICByYW5nZS0+bnVtX2NoYW5uZWxzID0gMTQ7IC8vIE9ubHkgMi40RworCSNpZiAwCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IDE0OyAvKiBPbmx5IDIuNEcgKi8KIAotLyogWFhYIG5lZWQgdG8gZmlsdGVyIGFnYWluc3QgdGhlIHJlZ3VsYXRvcnkgZG9tYWluICZ8IGFjdGl2ZSBzZXQgKi8KLSAgICB2YWwgPSAwOwotICAgIGZvciAoaSA9IDE7IGkgPD0gMTQ7IGkrKykgLy8gQixHIEJhbmRzCi0gICAgewotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmkgPSBpOwotICAgICAgICBpZiAoaSA9PSAxNCkKLSAgICAgICAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gMjQ4NDAwMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLm0gPSAoMjQxMisoaS0xKSo1KSoxMDAwOwotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmUgPSAzOwotICAgICAgICB2YWwrKzsKLSAgICB9CisJLyogWFhYIG5lZWQgdG8gZmlsdGVyIGFnYWluc3QgdGhlIHJlZ3VsYXRvcnkgZG9tYWluICZ8IGFjdGl2ZSBzZXQgKi8KKwl2YWwgPSAwOworCS8qIEIsRyBCYW5kcyAqLworCWZvciAoaSA9IDE7IGkgPD0gMTQ7IGkrKykgeworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBpOworCQlpZiAoaSA9PSAxNCkKKwkJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IDI0ODQwMDA7CisJCWVsc2UKKwkJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9ICgyNDEyKyhpLTEpKjUpKjEwMDA7CisJCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDM7CisJCXZhbCsrOworCX0KIAotICAgIG51bV9iYW5kX2EgPSAoSVdfTUFYX0ZSRVFVRU5DSUVTIC0gdmFsKTsKKwludW1fYmFuZF9hID0gKElXX01BWF9GUkVRVUVOQ0lFUyAtIHZhbCk7CisJLyogQSBCYW5kcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYmFuZF9hOyBpKyspIHsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gY2hhbm5lbF9mcmVxdWVuY3lfMTFBWzIgKiBpXTsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gY2hhbm5lbF9mcmVxdWVuY3lfMTFBWzIgKiBpICsgMV0gKiAxMDAwOworCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAzOworCQl2YWwrKzsKKwl9CisJLyogTUlNTyBSYXRlIE5vdCBEZWZpbmVkIE5vdworCSogRm9yIDgwMi4xMWEsIHRoZXJlIGFyZSB0b28gbW9yZSBmcmVxdWVuY3kuCisJKiBXZSBjYW4ndCByZXR1cm4gdGhlbSBhbGwuCisJKi8KKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IHZhbDsKKwkjZW5kaWYKIAotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYmFuZF9hOyBpKyspIC8vIEEgQmFuZHMKLSAgICB7Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uaSA9IGNoYW5uZWxfZnJlcXVlbmN5XzExQVsyICogaV07Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0ubSA9IGNoYW5uZWxfZnJlcXVlbmN5XzExQVsyICogaSArIDFdICogMTAwMDsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5lID0gMzsKLSAgICAgICAgdmFsKys7Ci0gICAgfQotICAgIC8vIE1JTU8gUmF0ZSBOb3QgRGVmaW5lZCBOb3cKLSAgICAvL0ZvciA4MDIuMTFhLCB0aGVyZSBhcmUgdG9vIG1vcmUgZnJlcXVlbmN5LiBXZSBjYW4ndCByZXR1cm4gdGhlbSBhbGwKLSAgICByYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IHZhbDsKLSNlbmRpZgorCS8qIE1heCBvZiAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KKwlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsgIC8qID8/ICA5MjsgKi8KKwlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAxNTQ7IC8qID8/ICovCisJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMTU0OyAvKiA/PyAqLworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7ICAgICAgLyogPz8gKi8KIAotLyogTWF4IG9mIC9wcm9jL25ldC93aXJlbGVzcyAqLwotICAgIHJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOyAvLz8/ICAgICAgICAgICAgICAgICAgLy85MjsKLSAgICByYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAxNTQ7IC8vPz8KLSAgICByYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAxNTQ7IC8vPz8KLSAgICByYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOyAvLz8/CisJLyogWFhYIHRoZXNlIG5lZWQgdG8gYmUgbnNkLXNwZWNpZmljISAqLworCXJhbmdlLT5taW5fcnRzID0gMDsKKwlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7CisJcmFuZ2UtPm1pbl9mcmFnID0gMjU2OworCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0IC8qIE5VTV9XRVBLRVlTID8/ICovOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOyAvKiA/PyAqLwogCi0vLyBYWFggdGhlc2UgbmVlZCB0byBiZSBuc2Qtc3BlY2lmaWMhCi0gICAgcmFuZ2UtPm1pbl9ydHMgPSAwOwotICAgIHJhbmdlLT5tYXhfcnRzID0gMjM0NzsKLSAgICByYW5nZS0+bWluX2ZyYWcgPSAyNTY7Ci0gICAgcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKLSAgICByYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IDQvKk5VTV9XRVBLRVlTKi87IC8vPz8KLSAgICByYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsgLy8/PworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsgLyogPz8gV0VQIEtleSBFbmNvZGluZyBTaXplICovCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsgLyogPz8gKi8KIAotICAgIHJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsgLy8/PyAgICAgICAgICAgICAgIC8vV0VQIEtleSBFbmNvZGluZyBTaXplCi0gICAgcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsvLz8/CisJLyogWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/ICovCisJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7IC8qID8/ICovCiAKLS8vIFhYWCB3aGF0IGFib3V0IG51bV9iaXRyYXRlcy90aHJvdWdocHV0PwotICAgIHJhbmdlLT5udW1fYml0cmF0ZXMgPSAwOyAvLz8/CisJLyogZXN0aW1hdGVkIG1heCB0aHJvdWdocHV0CisJKiBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLgorCSovCiAKLS8qIGVzdGltYXRlZCBtYXggdGhyb3VnaHB1dCAqLwotLy8gWFhYIG5lZWQgdG8gY2FwIGl0IGlmIHdlJ3JlIHJ1bm5pbmcgYXQgfjJNYnBzLi4KKwlyYW5nZS0+dGhyb3VnaHB1dCA9IDMwMDAwMDAwMDsKIAotICAgIHJhbmdlLT50aHJvdWdocHV0ID0gMzAwMDAwMDAwOwotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgIHN0cnVjdCBzb2NrYWRkciAqTWFjQWRkciwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBzb2NrYWRkciAqTWFjQWRkciwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKLSAgICAgICAgemZpV2xhblNldE1hY0FkZHJlc3MoZGV2LCh1MTZfdCAqKSZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TVEEgTW9kZQotICAgICAgICB6ZmlXbGFuU2V0QnNzaWQoZGV2LCZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKwlpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSB7CisJCS8qIEFQIE1vZGUgKi8KKwkJemZpV2xhblNldE1hY0FkZHJlc3MoZGV2LCAodTE2X3QgKikmTWFjQWRkci0+c2FfZGF0YVswXSk7CisJfSBlbHNlIHsKKwkJLyogU1RBIE1vZGUgKi8KKwkJemZpV2xhblNldEJzc2lkKGRldiwgJk1hY0FkZHItPnNhX2RhdGFbMF0pOworCX0KIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKLSAgICB7Ci0gICAgICAgIC8vdThfdCB3cGFpZUxlbix3cGFpZVs4MF07Ci0gICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsKLSAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAvL2lmICh3cGFpZUxlbiA+IDIpCi0gICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7Ci0gICAgfQorCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkgeworCQkvKiB1OF90IHdwYWllTGVuLHdwYWllWzgwXTsgKi8KKwkJLyogemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsgKi8KKwkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwkJemZpV2xhbkVuYWJsZShkZXYpOworCQkvKiBpZiAod3BhaWVMZW4gPiAyKSAqLworCQkvKiB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOyAqLworCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqTWFjQWRkciwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBzb2NrYWRkciAqTWFjQWRkciwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKLSAgICAgICAgemZpV2xhblF1ZXJ5TWFjQWRkcmVzcyhkZXYsICZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TVEEgTW9kZQotICAgIHsKLSAgICAgICAgaWYgKG1hY3AtPmFkYXB0ZXJTdGF0ZSA9PSBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVCkKLSAgICAgICAgewotICAgICAgICAgICAgemZpV2xhblF1ZXJ5QnNzaWQoZGV2LCAmTWFjQWRkci0+c2FfZGF0YVswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB1OF90IHplcm9fYWRkcls2XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotICAgICAgICAgICAgbWVtY3B5KCZNYWNBZGRyLT5zYV9kYXRhWzBdLCB6ZXJvX2FkZHIsIHNpemVvZih6ZXJvX2FkZHIpKTsKLSAgICAgICAgfQotICAgIH0KKwlpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSB7CisJCS8qIEFQIE1vZGUgKi8KKwkJemZpV2xhblF1ZXJ5TWFjQWRkcmVzcyhkZXYsICZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKwl9IGVsc2UgeworCQkvKiBTVEEgTW9kZSAqLworCQlpZiAobWFjcC0+YWRhcHRlclN0YXRlID09IFpNX1NUQVRVU19NRURJQV9DT05ORUNUKSB7CisJCQl6ZmlXbGFuUXVlcnlCc3NpZChkZXYsICZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKwkJfSBlbHNlIHsKKwkJCXU4X3QgemVyb19hZGRyWzZdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCQkJCQkweDAwLCAweDAwIH07CisJCQltZW1jcHkoJk1hY0FkZHItPnNhX2RhdGFbMF0sIHplcm9fYWRkciwKKwkJCQkJCQlzaXplb2YoemVyb19hZGRyKSk7CisJCX0KKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfaXdhcGxpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQogewotICAgIC8vRG9uJ3Qga25vdyBob3cgdG8gZG8geWV0LS1DV1lhbmcoKykKLSAgICByZXR1cm4gMDsKKwkvKiBEb24ndCBrbm93IGhvdyB0byBkbyB5ZXQtLUNXWWFuZygrKSAqLworCXJldHVybiAwOwogCiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKKwlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBwcmludGsoIkNXWSAtIHVzYmRydndleHRfc2l3c2NhblxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1dZIC0gdXNiZHJ2d2V4dF9zaXdzY2FuXG4iKTsKIAotICAgIHpmaVdsYW5TY2FuKGRldik7CisJemZpV2xhblNjYW4oZGV2KTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgLy9zdHJ1Y3QgenNXbGFuRGV2KiB3ZCA9IChzdHJ1Y3QgenNXbGFuRGV2Kikgem13X3dsYW5fZGV2KGRldik7Ci0gICAgY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwotICAgIGNoYXIgKmVuZF9idWY7Ci0gICAgaW50IGk7Ci0gICAgLy9zdHJ1Y3QgenNCc3NMaXN0IEJzc0xpc3Q7Ci0gICAgc3RydWN0IHpzQnNzTGlzdFYxICpwQnNzTGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6c0Jzc0xpc3RWMSksIEdGUF9LRVJORUwpOwotICAgIC8vQnNzTGlzdCA9IHdkLT5zdGEucEJzc0xpc3Q7Ci0gICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCS8qIHN0cnVjdCB6c1dsYW5EZXYqIHdkID0gKHN0cnVjdCB6c1dsYW5EZXYqKSB6bXdfd2xhbl9kZXYoZGV2KTsgKi8KKwljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7CisJY2hhciAqZW5kX2J1ZjsKKwlpbnQgaTsKKwkvKiBzdHJ1Y3QgenNCc3NMaXN0IEJzc0xpc3Q7ICovCisJc3RydWN0IHpzQnNzTGlzdFYxICpwQnNzTGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6c0Jzc0xpc3RWMSksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCS8qIEJzc0xpc3QgPSB3ZC0+c3RhLnBCc3NMaXN0OyAqLworCS8qIHptd19nZXRfd2xhbl9kZXYoZGV2KTsgKi8KIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGlmIChkYXRhLT5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAgZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZW5kX2J1ZiA9IGV4dHJhICsgZGF0YS0+bGVuZ3RoOwotICAgIH0KKwlpZiAoZGF0YS0+bGVuZ3RoID09IDApCisJCWVuZF9idWYgPSBleHRyYSArIElXX1NDQU5fTUFYX0RBVEE7CisJZWxzZQorCQllbmRfYnVmID0gZXh0cmEgKyBkYXRhLT5sZW5ndGg7CiAKLSAgICBwcmludGsoImdpd3NjYW4gLSBSZXBvcnQgU2NhbiBSZXN1bHRzXG4iKTsKLSAgICAvL3ByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QgU3JldWN0dXJlIExlbiA6ICVkXG4iLCBzaXplb2YoQnNzTGlzdCkpOwotICAgIC8vcHJpbnRrKCJnaXdzY2FuIC0gQnNzTGlzdCBDb3VudCA6ICVkXG4iLCB3ZC0+c3RhLnBCc3NMaXN0LT5ic3NDb3VudCk7Ci0gICAgLy9wcmludGsoImdpd3NjYW4gLSBVcGRhdGVCc3NMaXN0IENvdW50IDogJWRcbiIsIHdkLT5zdGEucFVwZGF0ZUJzc0xpc3QtPmJzc0NvdW50KTsKLSAgICB6ZmlXbGFuUXVlcnlCc3NMaXN0VjEoZGV2LCBwQnNzTGlzdCk7Ci0gICAgLy96ZmlXbGFuUXVlcnlCc3NMaXN0KGRldiwgJkJzc0xpc3QpOworCXByaW50ayhLRVJOX1dBUk5JTkcgImdpd3NjYW4gLSBSZXBvcnQgU2NhbiBSZXN1bHRzXG4iKTsKKwkvKiBwcmludGsoImdpd3NjYW4gLSBCc3NMaXN0IFNyZXVjdHVyZSBMZW4gOiAlZFxuIiwgc2l6ZW9mKEJzc0xpc3QpKTsKKwkqIHByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QgQ291bnQgOiAlZFxuIiwKKwkqIHdkLT5zdGEucEJzc0xpc3QtPmJzc0NvdW50KTsKKwkqIHByaW50aygiZ2l3c2NhbiAtIFVwZGF0ZUJzc0xpc3QgQ291bnQgOiAlZFxuIiwKKwkqIHdkLT5zdGEucFVwZGF0ZUJzc0xpc3QtPmJzc0NvdW50KTsKKwkqLworCXpmaVdsYW5RdWVyeUJzc0xpc3RWMShkZXYsIHBCc3NMaXN0KTsKKwkvKiB6ZmlXbGFuUXVlcnlCc3NMaXN0KGRldiwgJkJzc0xpc3QpOyAqLwogCi0vKiBSZWFkIGFuZCBwYXJzZSBhbGwgZW50cmllcyAqLwotICAgIHByaW50aygiZ2l3c2NhbiAtIHBCc3NMaXN0LT5ic3NDb3VudCA6ICVkXG4iLCBwQnNzTGlzdC0+YnNzQ291bnQpOwotICAgIC8vcHJpbnRrKCJnaXdzY2FuIC0gQnNzTGlzdC5ic3NDb3VudCA6ICVkXG4iLCBCc3NMaXN0LmJzc0NvdW50KTsKKwkvKiBSZWFkIGFuZCBwYXJzZSBhbGwgZW50cmllcyAqLworCXByaW50ayhLRVJOX1dBUk5JTkcgImdpd3NjYW4gLSBwQnNzTGlzdC0+YnNzQ291bnQgOiAlZFxuIiwKKwkJCQkJCXBCc3NMaXN0LT5ic3NDb3VudCk7CisJLyogcHJpbnRrKCJnaXdzY2FuIC0gQnNzTGlzdC5ic3NDb3VudCA6ICVkXG4iLCBCc3NMaXN0LmJzc0NvdW50KTsgKi8KIAotICAgIGZvciAoaSA9IDA7IGkgPCBwQnNzTGlzdC0+YnNzQ291bnQ7IGkrKykKLSAgICB7Ci0vKiBUcmFuc2xhdGUgdG8gV0UgZm9ybWF0IHRoaXMgZW50cnkgKi8KLSAgICAgICAgLy9jdXJyZW50X2V2ID0gdXNiZHJ2X3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY3VycmVudF9ldiwKLSAgICAgICAgLy8gICAgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmcEJzc0xpc3QtPmJzc0luZm9baV0pOwotICAgICAgICBjdXJyZW50X2V2ID0gdXNiZHJ2X3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY3VycmVudF9ldiwKLSAgICAgICAgICAgIGVuZF9idWYsICZwQnNzTGlzdC0+YnNzSW5mb1tpXSk7CisJZm9yIChpID0gMDsgaSA8IHBCc3NMaXN0LT5ic3NDb3VudDsgaSsrKSB7CisJCS8qIFRyYW5zbGF0ZSB0byBXRSBmb3JtYXQgdGhpcyBlbnRyeQorCQkqIGN1cnJlbnRfZXYgPSB1c2JkcnZfdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLCBjdXJyZW50X2V2LAorCQkqIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJnBCc3NMaXN0LT5ic3NJbmZvW2ldKTsKKwkJKi8KKwkJY3VycmVudF9ldiA9IHVzYmRydl90cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCWVuZF9idWYsICZwQnNzTGlzdC0+YnNzSW5mb1tpXSk7CiAKLSNpZiBXSVJFTEVTU19FWFQgPiAxNgotICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBlbmRfYnVmKQotICAgICAgICB7Ci0gICAgICAgICAgICBrZnJlZShwQnNzTGlzdCk7Ci0gICAgICAgICAgICBkYXRhLT5sZW5ndGggPSBjdXJyZW50X2V2IC0gZXh0cmE7Ci0gICAgICAgICAgICByZXR1cm4gLUUyQklHOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9CisJCSNpZiBXSVJFTEVTU19FWFQgPiAxNgorCQlpZiAoY3VycmVudF9ldiA9PSBlbmRfYnVmKSB7CisJCQlrZnJlZShwQnNzTGlzdCk7CisJCQlkYXRhLT5sZW5ndGggPSBjdXJyZW50X2V2IC0gZXh0cmE7CisJCQlyZXR1cm4gLUUyQklHOworCQl9CisJCSNlbmRpZgorCX0KIAotLyogTGVuZ3RoIG9mIGRhdGEgKi8KLSAgICBkYXRhLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKLSAgICBkYXRhLT5mbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG9kbyAqLworCS8qIExlbmd0aCBvZiBkYXRhICovCisJZGF0YS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7CisJZGF0YS0+ZmxhZ3MgPSAwOyAgIC8qIHRvZG8gKi8KIAotICAgIGtmcmVlKHBCc3NMaXN0KTsKKwlrZnJlZShwQnNzTGlzdCk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICplc3NpZCwgY2hhciAqZXh0cmEpCiB7Ci0gICAgY2hhciBFc3NpZEJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJY2hhciBFc3NpZEJ1ZltJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChlc3NpZC0+ZmxhZ3MgPT0gMSkKLSAgICB7Ci0gICAgICAgIGlmIChlc3NpZC0+bGVuZ3RoID4gKElXX0VTU0lEX01BWF9TSVpFKzEpKQotICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKwlpZiAoZXNzaWQtPmZsYWdzID09IDEpIHsKKwkJaWYgKGVzc2lkLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUgKyAxKSkKKwkJCXJldHVybiAtRTJCSUc7CiAKLSAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZFc3NpZEJ1ZiwgZXNzaWQtPnBvaW50ZXIsIGVzc2lkLT5sZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmRXNzaWRCdWYsIGVzc2lkLT5wb2ludGVyLCBlc3NpZC0+bGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCi0gICAgICAgIEVzc2lkQnVmW2Vzc2lkLT5sZW5ndGhdID0gJ1wwJzsKLSAgICAgICAgLy9wcmludGsoInNpd2Vzc2lkIC0gU2V0IEVzc2lkIDogJXNcbiIsRXNzaWRCdWYpOwotICAgICAgICAvL3ByaW50aygic2l3ZXNzaWQgLSBFc3NpZCBMZW4gOiAlZFxuIixlc3NpZC0+bGVuZ3RoKTsKLSAgICAgICAgLy9wcmludGsoInNpd2Vzc2lkIC0gRXNzaWQgRmxhZyA6ICV4XG4iLGVzc2lkLT5mbGFncyk7Ci0gICAgICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgemZpV2xhblNldFNTSUQoZGV2LCBFc3NpZEJ1Ziwgc3RybGVuKEVzc2lkQnVmKSk7Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldiksIEZBTFNFKTsKLSAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KSk7Ci0gICAgICAgICAgICAvL3U4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOwotICAgICAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOwotICAgICAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICAgICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgICAgIC8vaWYgKHdwYWllTGVuID4gMikKLSAgICAgICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7Ci0gICAgICAgIH0KLSAgICB9CisJCUVzc2lkQnVmW2Vzc2lkLT5sZW5ndGhdID0gJ1wwJzsKKwkJLyogcHJpbnRrKCJzaXdlc3NpZCAtIFNldCBFc3NpZCA6ICVzXG4iLEVzc2lkQnVmKTsgKi8KKwkJLyogcHJpbnRrKCJzaXdlc3NpZCAtIEVzc2lkIExlbiA6ICVkXG4iLGVzc2lkLT5sZW5ndGgpOyAqLworCQkvKiBwcmludGsoInNpd2Vzc2lkIC0gRXNzaWQgRmxhZyA6ICV4XG4iLGVzc2lkLT5mbGFncyk7ICovCisJCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkgeworCQkJemZpV2xhblNldFNTSUQoZGV2LCBFc3NpZEJ1Ziwgc3RybGVuKEVzc2lkQnVmKSk7CisJCQl6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldiksCisJCQkJCQlGQUxTRSk7CisJCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemZpV2xhblF1ZXJ5RW5jcnlNb2RlKGRldikpOworCQkJLyogdThfdCB3cGFpZUxlbix3cGFpZVs1MF07ICovCisJCQkvKiB6ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOyAqLworCQkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwkJCXpmaVdsYW5FbmFibGUoZGV2KTsKKwkJCS8qIGlmICh3cGFpZUxlbiA+IDIpICovCisJCQkvKiB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOyAqLworCQl9CisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplc3NpZCwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZXNzaWQsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1OF90IEVzc2lkTGVuOwotICAgIGNoYXIgRXNzaWRCdWZbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci0gICAgaW50IHNzaWRfbGVuOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1OF90IEVzc2lkTGVuOworCWNoYXIgRXNzaWRCdWZbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKwlpbnQgc3NpZF9sZW47CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICB6ZmlXbGFuUXVlcnlTU0lEKGRldiwgJkVzc2lkQnVmWzBdLCAmRXNzaWRMZW4pOworCXpmaVdsYW5RdWVyeVNTSUQoZGV2LCAmRXNzaWRCdWZbMF0sICZFc3NpZExlbik7CiAKLSAgICAvKiBDb252ZXJ0IHR5cGUgZnJvbSB1bnNpZ25lZCBjaGFyIHRvIGNoYXIgKi8KLSAgICBzc2lkX2xlbiA9IChpbnQpRXNzaWRMZW47CisJLyogQ29udmVydCB0eXBlIGZyb20gdW5zaWduZWQgY2hhciB0byBjaGFyICovCisJc3NpZF9sZW4gPSAoaW50KUVzc2lkTGVuOwogCi0gICAgLyogTWFrZSBzdXJlIHRoZSBlc3NpZCBsZW5ndGggaXMgbm90IGdyZWF0ZXIgdGhhbiBJV19FU1NJRF9NQVhfU0laRSAqLwotICAgIGlmIChzc2lkX2xlbiA+IElXX0VTU0lEX01BWF9TSVpFKQotICAgICAgICBzc2lkX2xlbiA9IElXX0VTU0lEX01BWF9TSVpFOworCS8qIE1ha2Ugc3VyZSB0aGUgZXNzaWQgbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gSVdfRVNTSURfTUFYX1NJWkUgKi8KKwlpZiAoc3NpZF9sZW4gPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJc3NpZF9sZW4gPSBJV19FU1NJRF9NQVhfU0laRTsKIAotICAgIEVzc2lkQnVmW3NzaWRfbGVuXSA9ICdcMCc7CisJRXNzaWRCdWZbc3NpZF9sZW5dID0gJ1wwJzsKIAotICAgIGVzc2lkLT5mbGFncyA9IDE7Ci0gICAgZXNzaWQtPmxlbmd0aCA9IHN0cmxlbihFc3NpZEJ1Zik7CisJZXNzaWQtPmZsYWdzID0gMTsKKwllc3NpZC0+bGVuZ3RoID0gc3RybGVuKEVzc2lkQnVmKTsKIAotICAgIG1lbWNweShleHRyYSwgRXNzaWRCdWYsIGVzc2lkLT5sZW5ndGgpOwotICAgIC8vIHdpcmVsZXNzLmMgaW4gS2VybmVsIHdvdWxkIGhhbmRsZSBjb3B5X3RvX3VzZXIgLS0gbGluZSA2NzkKLSAgICAvKmlmIChlc3NpZC0+cG9pbnRlcikKLSAgICB7Ci0gICAgICAgIGlmICggY29weV90b191c2VyKGVzc2lkLT5wb2ludGVyLCBFc3NpZEJ1ZiwgZXNzaWQtPmxlbmd0aCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGsoImdpd2Vzc2lkIC0gY29weV90b191c2VyIEZhaWxcbiIpOwotICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgIH0KLSAgICB9Ki8KKwltZW1jcHkoZXh0cmEsIEVzc2lkQnVmLCBlc3NpZC0+bGVuZ3RoKTsKKwkvKiB3aXJlbGVzcy5jIGluIEtlcm5lbCB3b3VsZCBoYW5kbGUgY29weV90b191c2VyIC0tIGxpbmUgNjc5ICovCisJLyogaWYgKGVzc2lkLT5wb2ludGVyKSB7CisJKiBpZiAoY29weV90b191c2VyKGVzc2lkLT5wb2ludGVyLCBFc3NpZEJ1ZiwgZXNzaWQtPmxlbmd0aCkpIHsKKwkqIHByaW50aygiZ2l3ZXNzaWQgLSBjb3B5X3RvX3VzZXIgRmFpbFxuIik7CisJKiByZXR1cm4gLUVGQVVMVDsKKwkqIH0KKwkqIH0KKwkqLwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpuaWNrbmFtZSkKIHsKLSAgICAvL0V4aXN0IGJ1dCBqdW5rLS1DV1lhbmcoKykKKwkvKiBFeGlzdCBidXQganVuay0tQ1dZYW5nKCspICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwODIsMTgyICsxMDI3LDE4MCBAQAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHU4X3QgRXNzaWRMZW47Ci0gICAgY2hhciBFc3NpZEJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdThfdCBFc3NpZExlbjsKKwljaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFICsgMV07CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICB6ZmlXbGFuUXVlcnlTU0lEKGRldiwgJkVzc2lkQnVmWzBdLCAmRXNzaWRMZW4pOwotICAgIEVzc2lkQnVmW0Vzc2lkTGVuXSA9IDA7CisJemZpV2xhblF1ZXJ5U1NJRChkZXYsICZFc3NpZEJ1ZlswXSwgJkVzc2lkTGVuKTsKKwlFc3NpZEJ1ZltFc3NpZExlbl0gPSAwOwogCi0gICAgZGF0YS0+ZmxhZ3MgPSAxOwotICAgIGRhdGEtPmxlbmd0aCA9IHN0cmxlbihFc3NpZEJ1Zik7CisJZGF0YS0+ZmxhZ3MgPSAxOworCWRhdGEtPmxlbmd0aCA9IHN0cmxlbihFc3NpZEJ1Zik7CiAKLSAgICBtZW1jcHkobmlja25hbWUsIEVzc2lkQnVmLCBkYXRhLT5sZW5ndGgpOworCW1lbWNweShuaWNrbmFtZSwgRXNzaWRCdWYsIGRhdGEtPmxlbmd0aCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICAvL0FycmF5IHRvIERlZmluZSBSYXRlIE51bWJlciB0aGF0IFNlbmQgdG8gRHJpdmVyCi0gICAgdTE2X3QgemNJbmRleHRvUmF0ZUJHWzE2XSA9IHsxMDAwLCAyMDAwLCA1NTAwLCAxMTAwMCwgMCwgMCwgMCwgMCwgNDgwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQwMDAsIDEyMDAwLCA2MDAwLCA1NDAwMCwgMzYwMDAsIDE4MDAwLCA5MDAwfTsKLSAgICB1MTZfdCB6Y1JhdGVUb01DU1tdID0gezB4ZmYsIDAsIDEsIDIsIDMsIDB4YiwgMHhmLCAweGEsIDB4ZSwgMHg5LCAweGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDgsIDB4Y307Ci0gICAgdThfdCBpLFJhdGVJbmRleCA9IDQ7Ci0gICAgdTE2X3QgUmF0ZUticHM7CisJLyogQXJyYXkgdG8gRGVmaW5lIFJhdGUgTnVtYmVyIHRoYXQgU2VuZCB0byBEcml2ZXIgKi8KKwl1MTZfdCB6Y0luZGV4dG9SYXRlQkdbMTZdID0gezEwMDAsIDIwMDAsIDU1MDAsIDExMDAwLCAwLCAwLCAwLCAwLAorCQkJNDgwMDAsIDI0MDAwLCAxMjAwMCwgNjAwMCwgNTQwMDAsIDM2MDAwLCAxODAwMCwgOTAwMH07CisJdTE2X3QgemNSYXRlVG9NQ1NbXSA9IHsweGZmLCAwLCAxLCAyLCAzLCAweGIsIDB4ZiwgMHhhLCAweGUsIDB4OSwgMHhkLAorCQkJCTB4OCwgMHhjfTsKKwl1OF90IGksIFJhdGVJbmRleCA9IDQ7CisJdTE2X3QgUmF0ZUticHM7CiAKLSAgICAvL3ByaW50aygiZnJxLT5kaXNhYmxlZCA6IDB4JXhcbiIsZnJxLT5kaXNhYmxlZCk7Ci0gICAgLy9wcmludGsoImZycS0+dmFsdWUgOiAweCV4XG4iLGZycS0+dmFsdWUpOworCS8qIHByaW50aygiZnJxLT5kaXNhYmxlZCA6IDB4JXhcbiIsZnJxLT5kaXNhYmxlZCk7ICovCisJLyogcHJpbnRrKCJmcnEtPnZhbHVlIDogMHgleFxuIixmcnEtPnZhbHVlKTsgKi8KIAotICAgIFJhdGVLYnBzID0gZnJxLT52YWx1ZSAvIDEwMDA7Ci0gICAgLy9wcmludGsoIlJhdGVLYnBzIDogJWRcbiIsIFJhdGVLYnBzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChSYXRlS2JwcyA9PSB6Y0luZGV4dG9SYXRlQkdbaV0pCi0gICAgICAgICAgICBSYXRlSW5kZXggPSBpOwotICAgIH0KLSAgICBpZiAoemNJbmRleHRvUmF0ZUJHW1JhdGVJbmRleF0gPT0gMCkKLSAgICAgICAgUmF0ZUluZGV4ID0gMHhmZjsKLSAgICAvL3ByaW50aygiUmF0ZUluZGV4IDogJXhcbiIsIFJhdGVJbmRleCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCi0gICAgICAgIGlmIChSYXRlSW5kZXggPT0gemNSYXRlVG9NQ1NbaV0pCi0gICAgICAgICAgICBicmVhazsKLSAgICAvL3ByaW50aygiSW5kZXggOiAleFxuIiwgaSk7Ci0gICAgaWYgKFJhdGVLYnBzID09IDY1MDAwKQotICAgIHsKLSAgICAgICAgUmF0ZUluZGV4ID0gMjA7Ci0gICAgICAgIHByaW50aygiUmF0ZUluZGV4IDogJWRcbiIsIFJhdGVJbmRleCk7Ci0gICAgfQotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKLSAgICB7Ci0gICAgICAgIHpmaVdsYW5TZXRUeFJhdGUoZGV2LCBpKTsKLSAgICAgICAgLy96ZmlXbGFuRGlzYWJsZShkZXYpOwotICAgICAgICAvL3pmaVdsYW5FbmFibGUoZGV2KTsKLSAgICB9CisJUmF0ZUticHMgPSBmcnEtPnZhbHVlIC8gMTAwMDsKKwkvKiBwcmludGsoIlJhdGVLYnBzIDogJWRcbiIsIFJhdGVLYnBzKTsgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAoUmF0ZUticHMgPT0gemNJbmRleHRvUmF0ZUJHW2ldKQorCQkJUmF0ZUluZGV4ID0gaTsKKwl9CiAKLSAgICByZXR1cm4gMDsKKwlpZiAoemNJbmRleHRvUmF0ZUJHW1JhdGVJbmRleF0gPT0gMCkKKwkJUmF0ZUluZGV4ID0gMHhmZjsKKwkvKiBwcmludGsoIlJhdGVJbmRleCA6ICV4XG4iLCBSYXRlSW5kZXgpOyAqLworCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQorCQlpZiAoUmF0ZUluZGV4ID09IHpjUmF0ZVRvTUNTW2ldKQorCQkJYnJlYWs7CisJLyogcHJpbnRrKCJJbmRleCA6ICV4XG4iLCBpKTsgKi8KKwlpZiAoUmF0ZUticHMgPT0gNjUwMDApIHsKKwkJUmF0ZUluZGV4ID0gMjA7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJhdGVJbmRleCA6ICVkXG4iLCBSYXRlSW5kZXgpOworCX0KKworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkgeworCQl6ZmlXbGFuU2V0VHhSYXRlKGRldiwgaSk7CisJCS8qIHpmaVdsYW5EaXNhYmxlKGRldik7ICovCisJCS8qIHpmaVdsYW5FbmFibGUoZGV2KTsgKi8KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBmcnEtPmZpeGVkID0gMDsKLSAgICBmcnEtPmRpc2FibGVkID0gMDsKLSAgICBmcnEtPnZhbHVlID0gemZpV2xhblF1ZXJ5UnhSYXRlKGRldikgKiAxMDAwOworCWZycS0+Zml4ZWQgPSAwOworCWZycS0+ZGlzYWJsZWQgPSAwOworCWZycS0+dmFsdWUgPSB6ZmlXbGFuUXVlcnlSeFJhdGUoZGV2KSAqIDEwMDA7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIGludCB2YWwgPSBydHMtPnZhbHVlOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlpbnQgdmFsID0gcnRzLT52YWx1ZTsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGlmIChydHMtPmRpc2FibGVkKQotICAgICAgICB2YWwgPSAyMzQ3OworCWlmIChydHMtPmRpc2FibGVkKQorCQl2YWwgPSAyMzQ3OwogCi0gICAgaWYgKCh2YWwgPCAwKSB8fCAodmFsID4gMjM0NykpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDIzNDcpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHpmaVdsYW5TZXRSdHNUaHJlc2hvbGQoZGV2LHZhbCk7CisJemZpV2xhblNldFJ0c1RocmVzaG9sZChkZXYsIHZhbCk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHJ0cy0+dmFsdWUgPSB6ZmlXbGFuUXVlcnlSdHNUaHJlc2hvbGQoZGV2KTsKLSAgICBydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPj0gMjM0Nyk7Ci0gICAgcnRzLT5maXhlZCA9IDE7CisJcnRzLT52YWx1ZSA9IHpmaVdsYW5RdWVyeVJ0c1RocmVzaG9sZChkZXYpOworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA+PSAyMzQ3KTsKKwlydHMtPmZpeGVkID0gMTsKIAotICAgIHJldHVybiAwOwotCisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1MTZfdCBmcmFnVGhyZXNob2xkOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1MTZfdCBmcmFnVGhyZXNob2xkOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgaWYgKGZyYWctPmRpc2FibGVkKQotICAgICAgICBmcmFnVGhyZXNob2xkID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGZyYWdUaHJlc2hvbGQgPSBmcmFnLT52YWx1ZTsKKwlpZiAoZnJhZy0+ZGlzYWJsZWQpCisJCWZyYWdUaHJlc2hvbGQgPSAwOworCWVsc2UKKwkJZnJhZ1RocmVzaG9sZCA9IGZyYWctPnZhbHVlOwogCi0gICAgemZpV2xhblNldEZyYWdUaHJlc2hvbGQoZGV2LGZyYWdUaHJlc2hvbGQpOworCXpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKGRldiwgZnJhZ1RocmVzaG9sZCk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHUxNiB2YWw7Ci0gICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1MTYgdmFsOworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICB2YWwgPSB6ZmlXbGFuUXVlcnlGcmFnVGhyZXNob2xkKGRldik7CisJdmFsID0gemZpV2xhblF1ZXJ5RnJhZ1RocmVzaG9sZChkZXYpOwogCi0gICAgZnJhZy0+dmFsdWUgPSB2YWw7CisJZnJhZy0+dmFsdWUgPSB2YWw7CiAKLSAgICBmcmFnLT5kaXNhYmxlZCA9ICh2YWwgPj0gMjM0Nik7Ci0gICAgZnJhZy0+Zml4ZWQgPSAxOworCWZyYWctPmRpc2FibGVkID0gKHZhbCA+PSAyMzQ2KTsKKwlmcmFnLT5maXhlZCA9IDE7CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXd0eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICAvL05vdCBzdXBwb3J0IHlldC0tQ1dZbmcoKykKKwkvKiBOb3Qgc3VwcG9ydCB5ZXQtLUNXWW5nKCspICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjUsNyArMTIwOCw3IEBACiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewotICAgIC8vTm90IHN1cHBvcnQgeWV0LS1DV1luZygrKQorCS8qIE5vdCBzdXBwb3J0IHlldC0tQ1dZbmcoKykgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI3Myw3ICsxMjE2LDcgQEAKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgLy9EbyBub3RoaW5nLS1DV1lhbmcoKykKKwkvKiBEbyBub3RoaW5nLS1DV1lhbmcoKykgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI4MSw2NjUgKzEyMjQsNjYyIEBACiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewotICAgIC8vRG8gbm90aGluZy0tQ1dZYW5nKCspCisJLyogRG8gbm90aGluZy0tQ1dZYW5nKCspICovCiAJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCiB7Ci0gICAgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOwotICAgIGludCBpLCBXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87CisJaW50IGk7CisJaW50IFdlcFN0YXRlID0gWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQ7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSA9PSAwKQotICAgIHsKLSAgICAgICAga2V5SW5mby5rZXkgPSBrZXk7Ci0gICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gZXJxLT5sZW5ndGg7Ci0gICAgICAgIGtleUluZm8ua2V5SW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotICAgICAgICBpZiAoa2V5SW5mby5rZXlJbmRleCA+PSA0KQotICAgICAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IDA7Ci0gICAgICAgIGtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0RFRkFVTFRfS0VZOworCWlmICgoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgPT0gMCkgeworCQlrZXlJbmZvLmtleSA9IGtleTsKKwkJa2V5SW5mby5rZXlMZW5ndGggPSBlcnEtPmxlbmd0aDsKKwkJa2V5SW5mby5rZXlJbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJCWlmIChrZXlJbmZvLmtleUluZGV4ID49IDQpCisJCQlrZXlJbmZvLmtleUluZGV4ID0gMDsKKwkJa2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfREVGQVVMVF9LRVk7CiAKLSAgICAgICAgemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOwotICAgICAgICBXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0VOQUJMRUQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPCA0OyBpKyspCi0gICAgICAgICAgICB6ZmlXbGFuUmVtb3ZlS2V5KGRldiwgMCwgaSk7Ci0gICAgICAgIFdlcFN0YXRlID0gWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQ7Ci0gICAgICAgIC8vemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX05PX1dFUCk7Ci0gICAgfQorCQl6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisJCVdlcFN0YXRlID0gWk1fRU5DUllQVElPTl9XRVBfRU5BQkxFRDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKQorCQkJemZpV2xhblJlbW92ZUtleShkZXYsIDAsIGkpOworCQlXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEOworCQkvKiB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fTk9fV0VQKTsgKi8KKwl9CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCi0gICAgewotICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgV2VwU3RhdGUpOwotICAgICAgICB6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldiksIEZBTFNFKTsKLSAgICAgICAgLy96ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemZpV2xhblF1ZXJ5RW5jcnlNb2RlKGRldikpOwotICAgICAgICAvL3U4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOwotICAgICAgICAvL3pmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7Ci0gICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgLy9pZiAod3BhaWVMZW4gPiAyKQotICAgICAgICAvLyAgICB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOwotICAgIH0KKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpIHsKKwkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFdlcFN0YXRlKTsKKwkJemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIHpmaVdsYW5RdWVyeUZyZXF1ZW5jeShkZXYpLCBGQUxTRSk7CisJCS8qIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KSk7ICovCisJCS8qIHU4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOyAqLworCQkvKiB6ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOyAqLworCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQl6ZmlXbGFuRW5hYmxlKGRldik7CisJCS8qIGlmICh3cGFpZUxlbiA+IDIpICovCisJCS8qIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7ICovCisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHU4X3QgRW5jcnlwdGlvbk1vZGU7Ci0gICAgdThfdCBrZXlMZW4gPSAwOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1OF90IEVuY3J5cHRpb25Nb2RlOworCXU4X3Qga2V5TGVuID0gMDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIEVuY3J5cHRpb25Nb2RlID0gemZpV2xhblF1ZXJ5RW5jcnlNb2RlKGRldik7CisJRW5jcnlwdGlvbk1vZGUgPSB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KTsKIAotICAgIGlmIChFbmNyeXB0aW9uTW9kZSkKLSAgICB7Ci0gICAgICAgIGVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZXJxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLSAgICB9CisJaWYgKEVuY3J5cHRpb25Nb2RlKQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJZWxzZQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCi0vKiBXZSBjYW4ndCByZXR1cm4gdGhlIGtleSwgc28gc2V0IHRoZSBwcm9wZXIgZmxhZyBhbmQgcmV0dXJuIHplcm8gKi8KLSAgICBlcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9OT0tFWTsKLSAgICBtZW1zZXQoa2V5LCAwLCAxNik7CisJLyogV2UgY2FuJ3QgcmV0dXJuIHRoZSBrZXksIHNvIHNldCB0aGUgcHJvcGVyIGZsYWcgYW5kIHJldHVybiB6ZXJvICovCisJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfTk9LRVk7CisJbWVtc2V0KGtleSwgMCwgMTYpOwogCi0vKiBDb3B5IHRoZSBrZXkgdG8gdGhlIHVzZXIgYnVmZmVyICovCi0gICAgc3dpdGNoKEVuY3J5cHRpb25Nb2RlKQotICAgIHsKLSAgICAgICAgY2FzZSBaTV9XRVA2NDoKLSAgICAgICAgICAgIGtleUxlbiA9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9XRVAxMjg6Ci0gICAgICAgICAgICBrZXlMZW4gPSAxMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX1dFUDI1NjoKLSAgICAgICAgICAgIGtleUxlbiA9IDI5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fQUVTOgotICAgICAgICAgICAga2V5TGVuID0gMTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9US0lQOgotICAgICAgICAgICAga2V5TGVuID0gMzI7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBaTV9FTkFCTEVfQ0VOQwotICAgICAgICBjYXNlIFpNX0NFTkM6Ci0gICAgICAgICAgICBrZXlMZW4gPSAzMjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKLSAgICAgICAgY2FzZSBaTV9OT19XRVA6Ci0gICAgICAgICAgICBrZXlMZW4gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAga2V5TGVuID0gMDsKLSAgICAgICAgICAgIHByaW50aygiVW5rbm93biBFbmNyeU1vZGVcbiIpOwotICAgICAgICAgICAgYnJlYWs7CisJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLworCXN3aXRjaCAoRW5jcnlwdGlvbk1vZGUpIHsKKwljYXNlIFpNX1dFUDY0OgorCQlrZXlMZW4gPSA1OworCQlicmVhazsKKwljYXNlIFpNX1dFUDEyODoKKwkJa2V5TGVuID0gMTM7CisJCWJyZWFrOworCWNhc2UgWk1fV0VQMjU2OgorCQlrZXlMZW4gPSAyOTsKKwkJYnJlYWs7CisJY2FzZSBaTV9BRVM6CisJCWtleUxlbiA9IDE2OworCQlicmVhazsKKwljYXNlIFpNX1RLSVA6CisJCWtleUxlbiA9IDMyOworCQlicmVhazsKKwkjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKwljYXNlIFpNX0NFTkM6CisJCS8qIFpNX0VOQUJMRV9DRU5DICovCisJCWtleUxlbiA9IDMyOworCQlicmVhazsKKwkjZW5kaWYKKwljYXNlIFpNX05PX1dFUDoKKwkJa2V5TGVuID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJa2V5TGVuID0gMDsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIEVuY3J5TW9kZVxuIik7CisJCWJyZWFrOworCX0KKwllcnEtPmxlbmd0aCA9IGtleUxlbjsKIAotICAgIH0KLSAgICBlcnEtPmxlbmd0aCA9IGtleUxlbjsKLQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1OF90IFBTTW9kZTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdThfdCBQU01vZGU7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBpZiAoZnJxLT5kaXNhYmxlZCkKLSAgICAgICAgUFNNb2RlID0gWk1fU1RBX1BTX05PTkU7Ci0gICAgZWxzZQotICAgICAgICBQU01vZGUgPSBaTV9TVEFfUFNfTUFYOworCWlmIChmcnEtPmRpc2FibGVkKQorCQlQU01vZGUgPSBaTV9TVEFfUFNfTk9ORTsKKwllbHNlCisJCVBTTW9kZSA9IFpNX1NUQV9QU19NQVg7CiAKLSAgICB6ZmlXbGFuU2V0UG93ZXJTYXZlTW9kZShkZXYsUFNNb2RlKTsKKwl6ZmlXbGFuU2V0UG93ZXJTYXZlTW9kZShkZXYsIFBTTW9kZSk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgaWYgKHpmaVdsYW5RdWVyeVBvd2VyU2F2ZU1vZGUoZGV2KSA9PSBaTV9TVEFfUFNfTk9ORSkKLSAgICAgICAgZnJxLT5kaXNhYmxlZCA9IDE7Ci0gICAgZWxzZQotICAgICAgICBmcnEtPmRpc2FibGVkID0gMDsKKwlpZiAoemZpV2xhblF1ZXJ5UG93ZXJTYXZlTW9kZShkZXYpID09IFpNX1NUQV9QU19OT05FKQorCQlmcnEtPmRpc2FibGVkID0gMTsKKwllbHNlCisJCWZycS0+ZGlzYWJsZWQgPSAwOwogCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotLy9pbnQgdXNiZHJ2d2V4dF9zZXRwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotLy8JCSAgIAkgdm9pZCAqdywgY2hhciAqZXh0cmEpCi0vL3sKLS8vCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGRldi0+bWxfcHJpdjsKLS8vCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gdmFwLT5pdl9pYzsKLS8vCXN0cnVjdCBpZWVlODAyMTFfcnNucGFybXMgKnJzbiA9ICZ2YXAtPml2X2Jzcy0+bmlfcnNuOwotLy8JaW50ICppID0gKGludCAqKSBleHRyYTsKLS8vCWludCBwYXJhbSA9IGlbMF07CQkvKiBwYXJhbWV0ZXIgaWQgaXMgMXN0ICovCi0vLwlpbnQgdmFsdWUgPSBpWzFdOwkJLyogTkI6IG1vc3QgdmFsdWVzIGFyZSBUWVBFX0lOVCAqLwotLy8JaW50IHJldHYgPSAwOwotLy8JaW50IGosIGNhcHM7Ci0vLwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2F1dGhlbnRpY2F0b3IgKmF1dGg7Ci0vLwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2FjbGF0b3IgKmFjbDsKLS8vCi0vLwlzd2l0Y2ggKHBhcmFtKSB7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9BVVRITU9ERToKLS8vCQlzd2l0Y2ggKHZhbHVlKSB7Ci0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9XUEE6CS8qIFdQQSAqLwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfODAyMVg6CS8qIDgwMi4xeCAqLwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfT1BFTjoJLyogb3BlbiAqLwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfU0hBUkVEOgkvKiBzaGFyZWQta2V5ICovCi0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9BVVRPOgkvKiBhdXRvICovCi0vLwkJCWF1dGggPSBpZWVlODAyMTFfYXV0aGVudGljYXRvcl9nZXQodmFsdWUpOwotLy8JCQlpZiAoYXV0aCA9PSBOVUxMKQotLy8JCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJCWJyZWFrOwotLy8JCWRlZmF1bHQ6Ci0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCX0KLS8vCQlzd2l0Y2ggKHZhbHVlKSB7Ci0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9XUEE6CS8qIFdQQSB3LyA4MDIuMXggKi8KLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOwotLy8JCQl2YWx1ZSA9IElFRUU4MDIxMV9BVVRIXzgwMjFYOwotLy8JCQlicmVhazsKLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX09QRU46CS8qIG9wZW4gKi8KLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+KElFRUU4MDIxMV9GX1dQQXxJRUVFODAyMTFfRl9QUklWQUNZKTsKLS8vCQkJYnJlYWs7Ci0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9TSEFSRUQ6CS8qIHNoYXJlZC1rZXkgKi8KLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX0FVVE86CS8qIGF1dG8gKi8KLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIXzgwMjFYOgkvKiA4MDIuMXggKi8KLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfV1BBOwotLy8JCQkvKiBib3RoIHJlcXVpcmUgYSBrZXkgc28gbWFyayB0aGUgUFJJVkFDWSBjYXBhYmlsaXR5ICovCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKLS8vCQkJYnJlYWs7Ci0vLwkJfQotLy8JCS8qIE5COiBhdXRoZW50aWNhdG9yIGF0dGFjaC9kZXRhY2ggaGFwcGVucyBvbiBzdGF0ZSBjaGFuZ2UgKi8KLS8vCQl2YXAtPml2X2Jzcy0+bmlfYXV0aG1vZGUgPSB2YWx1ZTsKLS8vCQkvKiBYWFggbWl4ZWQvbW9kZS91c2FnZT8gKi8KLS8vCQl2YXAtPml2X2F1dGggPSBhdXRoOwotLy8JCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QUk9UTU9ERToKLS8vCQlpZiAodmFsdWUgPiBJRUVFODAyMTFfUFJPVF9SVFNDVFMpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCWljLT5pY19wcm90bW9kZSA9IHZhbHVlOwotLy8JCS8qIE5COiBpZiBub3Qgb3BlcmF0aW5nIGluIDExZyB0aGlzIGNhbiB3YWl0ICovCi0vLwkJaWYgKGljLT5pY19ic3NjaGFuICE9IElFRUU4MDIxMV9DSEFOX0FOWUMgJiYKLS8vCQkgICAgSUVFRTgwMjExX0lTX0NIQU5fQU5ZRyhpYy0+aWNfYnNzY2hhbikpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVENJUEhFUjoKLS8vCQlpZiAoKHZhcC0+aXZfY2FwcyAmIGNpcGhlcjJjYXAodmFsdWUpKSA9PSAwICYmCi0vLwkJICAgICFpZWVlODAyMTFfY3J5cHRvX2F2YWlsYWJsZSh2YWx1ZSkpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCXJzbi0+cnNuX21jYXN0Y2lwaGVyID0gdmFsdWU7Ci0vLwkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVEtFWUxFTjoKLS8vCQlpZiAoISgwIDwgdmFsdWUgJiYgdmFsdWUgPCBJRUVFODAyMTFfS0VZQlVGX1NJWkUpKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkvKiBYWFggbm8gd2F5IHRvIHZlcmlmeSBkcml2ZXIgY2FwYWJpbGl0eSAqLwotLy8JCXJzbi0+cnNuX21jYXN0a2V5bGVuID0gdmFsdWU7Ci0vLwkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUlM6Ci0vLwkJLyoKLS8vCQkgKiBDb252ZXJ0IGNpcGhlciBzZXQgdG8gZXF1aXZhbGVudCBjYXBhYmlsaXRpZXMuCi0vLwkJICogTkI6IHRoaXMgbG9naWMgaW50ZW50aW9uYWxseSBpZ25vcmVzIHVua25vd24gYW5kCi0vLwkJICogdW5zdXBwb3J0ZWQgY2lwaGVycyBzbyBmb2xrcyBjYW4gc3BlY2lmeSAweGZmIG9yCi0vLwkJICogc2ltaWxhciBhbmQgZ2V0IGFsbCBhdmFpbGFibGUgY2lwaGVycy4KLS8vCQkgKi8KLS8vCQljYXBzID0gMDsKLS8vCQlmb3IgKGogPSAxOyBqIDwgMzI7IGorKykJLyogTkI6IHNraXAgV0VQICovCi0vLwkJCWlmICgodmFsdWUgJiAoMTw8aikpICYmCi0vLwkJCSAgICAoKHZhcC0+aXZfY2FwcyAmIGNpcGhlcjJjYXAoaikpIHx8Ci0vLwkJCSAgICAgaWVlZTgwMjExX2NyeXB0b19hdmFpbGFibGUoaikpKQotLy8JCQkJY2FwcyB8PSAxPDxqOwotLy8JCWlmIChjYXBzID09IDApCQkJLyogbm90aGluZyBhdmFpbGFibGUgKi8KLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJLyogWFhYIHZlcmlmeSBjaXBoZXJzIG9rIGZvciB1bmljYXN0IHVzZT8gKi8KLS8vCQkvKiBYWFggZGlzYWxsb3cgaWYgcnVubmluZyBhcyBpdCdsbCBoYXZlIG5vIGVmZmVjdCAqLwotLy8JCXJzbi0+cnNuX3VjYXN0Y2lwaGVyc2V0ID0gY2FwczsKLS8vCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VDQVNUQ0lQSEVSOgotLy8JCWlmICgocnNuLT5yc25fdWNhc3RjaXBoZXJzZXQgJiBjaXBoZXIyY2FwKHZhbHVlKSkgPT0gMCkKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJcnNuLT5yc25fdWNhc3RjaXBoZXIgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VDQVNUS0VZTEVOOgotLy8JCWlmICghKDAgPCB2YWx1ZSAmJiB2YWx1ZSA8IElFRUU4MDIxMV9LRVlCVUZfU0laRSkpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCS8qIFhYWCBubyB3YXkgdG8gdmVyaWZ5IGRyaXZlciBjYXBhYmlsaXR5ICovCi0vLwkJcnNuLT5yc25fdWNhc3RrZXlsZW4gPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0tFWU1HVEFMR1M6Ci0vLwkJLyogWFhYIGNoZWNrICovCi0vLwkJcnNuLT5yc25fa2V5bWdtdHNldCA9IHZhbHVlOwotLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUlNOQ0FQUzoKLS8vCQkvKiBYWFggY2hlY2sgKi8KLS8vCQlyc24tPnJzbl9jYXBzID0gdmFsdWU7Ci0vLwkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9XUEE6Ci0vLwkJaWYgKHZhbHVlID4gMykKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJLyogWFhYIHZlcmlmeSBjaXBoZXJzIGF2YWlsYWJsZSAqLwotLy8JCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dQQTsKLS8vCQlzd2l0Y2ggKHZhbHVlKSB7Ci0vLwkJY2FzZSAxOgotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTE7Ci0vLwkJCWJyZWFrOwotLy8JCWNhc2UgMjoKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEEyOwotLy8JCQlicmVhazsKLS8vCQljYXNlIDM6Ci0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMSB8IElFRUU4MDIxMV9GX1dQQTI7Ci0vLwkJCWJyZWFrOwotLy8JCX0KLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwkJLyogWFhYPyAqLwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTUlORzoKLS8vCQlpZiAoIShJRUVFODAyMTFfUk9BTUlOR19ERVZJQ0UgPD0gdmFsdWUgJiYKLS8vCQkgICAgdmFsdWUgPD0gSUVFRTgwMjExX1JPQU1JTkdfTUFOVUFMKSkKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJaWMtPmljX3JvYW1pbmcgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BSSVZBQ1k6Ci0vLwkJaWYgKHZhbHVlKSB7Ci0vLwkJCS8qIFhYWCBjaGVjayBmb3Iga2V5IHN0YXRlPyAqLwotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7Ci0vLwkJfSBlbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1BSSVZBQ1k7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9EUk9QVU5FTkNSWVBURUQ6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0RST1BVTkVOQzsKLS8vCQllbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0RST1BVTkVOQzsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPVU5URVJNRUFTVVJFUzoKLS8vCQlpZiAodmFsdWUpIHsKLS8vCQkJaWYgKCh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKSA9PSAwKQotLy8JCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfQ09VTlRFUk07Ci0vLwkJfSBlbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0NPVU5URVJNOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRFJJVkVSX0NBUFM6Ci0vLwkJdmFwLT5pdl9jYXBzID0gdmFsdWU7CQkvKiBOQjogZm9yIHRlc3RpbmcgKi8KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX01BQ0NNRDoKLS8vCQlhY2wgPSB2YXAtPml2X2FjbDsKLS8vCQlzd2l0Y2ggKHZhbHVlKSB7Ci0vLwkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX1BPTElDWV9PUEVOOgotLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfQUxMT1c6Ci0vLwkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX1BPTElDWV9ERU5ZOgotLy8JCQlpZiAoYWNsID09IE5VTEwpIHsKLS8vCQkJCWFjbCA9IGllZWU4MDIxMV9hY2xhdG9yX2dldCgibWFjIik7Ci0vLwkJCQlpZiAoYWNsID09IE5VTEwgfHwgIWFjbC0+aWFjX2F0dGFjaCh2YXApKQotLy8JCQkJCXJldHVybiAtRUlOVkFMOwotLy8JCQkJdmFwLT5pdl9hY2wgPSBhY2w7Ci0vLwkJCX0KLS8vCQkJYWNsLT5pYWNfc2V0cG9saWN5KHZhcCwgdmFsdWUpOwotLy8JCQlicmVhazsKLS8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfRkxVU0g6Ci0vLwkJCWlmIChhY2wgIT0gTlVMTCkKLS8vCQkJCWFjbC0+aWFjX2ZsdXNoKHZhcCk7Ci0vLwkJCS8qIE5COiBzaWxlbnRseSBpZ25vcmUgd2hlbiBub3QgaW4gdXNlICovCi0vLwkJCWJyZWFrOwotLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9ERVRBQ0g6Ci0vLwkJCWlmIChhY2wgIT0gTlVMTCkgewotLy8JCQkJdmFwLT5pdl9hY2wgPSBOVUxMOwotLy8JCQkJYWNsLT5pYWNfZGV0YWNoKHZhcCk7Ci0vLwkJCX0KLS8vCQkJYnJlYWs7Ci0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fV01NOgotLy8JCWlmIChpYy0+aWNfY2FwcyAmIElFRUU4MDIxMV9DX1dNRSl7Ci0vLwkJCWlmICh2YWx1ZSkgewotLy8JCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XTUU7Ci0vLwkJCQl2YXAtPml2X2ljLT5pY19mbGFncyB8PSBJRUVFODAyMTFfRl9XTUU7IC8qIFhYWCBuZWVkZWQgYnkgaWNfcmVzZXQgKi8KLS8vCQkJfQotLy8JCQllbHNlIHsKLS8vCQkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dNRTsKLS8vCQkJCXZhcC0+aXZfaWMtPmljX2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XTUU7IC8qIFhYWCBuZWVkZWQgYnkgaWNfcmVzZXQgKi8KLS8vCQkJfQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwkvKiBSZW5lZ290aWF0ZSBmb3IgY2FwYWJpbGl0aWVzICovCi0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSElERVNTSUQ6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0hJREVTU0lEOwotLy8JCWVsc2UKLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfSElERVNTSUQ7Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FQQlJJREdFOgotLy8JCWlmICh2YWx1ZSA9PSAwKQotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX05PQlJJREdFOwotLy8JCWVsc2UKLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfTk9CUklER0U7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9JTkFDVDoKLS8vCQl2YXAtPml2X2luYWN0X3J1biA9IHZhbHVlIC8gSUVFRTgwMjExX0lOQUNUX1dBSVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9JTkFDVF9BVVRIOgotLy8JCXZhcC0+aXZfaW5hY3RfYXV0aCA9IHZhbHVlIC8gSUVFRTgwMjExX0lOQUNUX1dBSVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9JTkFDVF9JTklUOgotLy8JCXZhcC0+aXZfaW5hY3RfaW5pdCA9IHZhbHVlIC8gSUVFRTgwMjExX0lOQUNUX1dBSVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9BQk9MVDoKLS8vCQljYXBzID0gMDsKLS8vCQkvKgotLy8JCSAqIE1hcCBhYm9sdCBzZXR0aW5ncyB0byBjYXBhYmlsaXR5IGJpdHM7Ci0vLwkJICogdGhpcyBhbHNvIHN0cmlwcyB1bmtub3duL3Vud2FudGVkIGJpdHMuCi0vLwkJICovCi0vLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1RVUkJPX1BSSU1FKQotLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX1RVUkJPUDsKLS8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQ09NUFJFU1NJT04pCi0vLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQ09NUDsKLS8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfRkFTVF9GUkFNRSkKLS8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19GRjsKLS8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfWFIpCi0vLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfWFI7Ci0vLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0FSKQotLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0FSOwotLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9CVVJTVCkKLS8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19CVVJTVDsKLS8vICAgICAgICBpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfV01FX0VMRSkKLS8vICAgICAgICAgICAgY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19XTUU7Ci0vLwkJLyogdmVyaWZ5IHJlcXVlc3RlZCBjYXBhYmlsaXRpZXMgYXJlIHN1cHBvcnRlZCAqLwotLy8JCWlmICgoY2FwcyAmIGljLT5pY19hdGhfY2FwKSAhPSBjYXBzKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlpZiAodmFwLT5pdl9hdGhfY2FwICE9IGNhcHMpIHsKLS8vCQkJaWYgKCh2YXAtPml2X2F0aF9jYXAgXiBjYXBzKSAmIElFRUU4MDIxMV9BVEhDX1RVUkJPUCkgewotLy8JCQkJaWYgKGllZWU4MDIxMV9zZXRfdHVyYm8oZGV2LCAgY2FwcyAmIElFRUU4MDIxMV9BVEhDX1RVUkJPUCkpCi0vLwkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJCQlpZWVlODAyMTFfc2Nhbl9mbHVzaChpYyk7Ci0vLwkJCX0KLS8vCQkJdmFwLT5pdl9hdGhfY2FwID0gY2FwczsKLS8vCQkJaWMtPmljX2F0aGNhcHNldHVwKHZhcC0+aXZfaWMsIHZhcC0+aXZfYXRoX2NhcCk7Ci0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRFRJTV9QRVJJT0Q6Ci0vLwkJaWYgKHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0hPU1RBUCAmJgotLy8JCSAgICB2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9JQlNTKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlpZiAoSUVFRTgwMjExX0RUSU1fTUlOIDw9IHZhbHVlICYmCi0vLwkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9EVElNX01BWCkgewotLy8JCQl2YXAtPml2X2R0aW1fcGVyaW9kID0gdmFsdWU7Ci0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7CQkvKiByZXF1aXJlcyByZXN0YXJ0ICovCi0vLwkJfSBlbHNlCi0vLwkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9CRUFDT05fSU5URVJWQUw6Ci0vLwkJaWYgKHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0hPU1RBUCAmJgotLy8JCSAgICB2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9JQlNTKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlpZiAoSUVFRTgwMjExX0JJTlRWQUxfTUlOIDw9IHZhbHVlICYmCi0vLwkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9CSU5UVkFMX01BWCkgewotLy8JCQlpYy0+aWNfbGludHZhbCA9IHZhbHVlOwkJLyogWFhYIG11bHRpLWJzcyAqLwotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwkJLyogcmVxdWlyZXMgcmVzdGFydCAqLwotLy8JCX0gZWxzZQotLy8JCQlyZXR2ID0gRUlOVkFMOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRE9USDoKLS8vCQlpZiAodmFsdWUpIHsKLS8vCQkJaWMtPmljX2ZsYWdzIHw9IElFRUU4MDIxMV9GX0RPVEg7Ci0vLwkJfQotLy8JCWVsc2UKLS8vCQkJaWMtPmljX2ZsYWdzICY9IH5JRUVFODAyMTFfRl9ET1RIOwotLy8JCXJldHYgPSBFTkVUUkVTRVQ7CS8qIFhYWDogbmVlZCBzb21ldGhpbmcgdGhpcyBkcmFzdGljPyAqLwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUFdSVEFSR0VUOgotLy8JCWljLT5pY19jdXJjaGFubWF4cHdyID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9HRU5SRUFTU09DOgotLy8JCUlFRUU4MDIxMV9TRU5EX01HTVQodmFwLT5pdl9ic3MsIElFRUU4MDIxMV9GQzBfU1VCVFlQRV9SRUFTU09DX1JFUSwgMCk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9DT01QUkVTU0lPTjoKLS8vCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0NPTVAsIHZhbHVlKTsKLS8vCQlicmVhazsKLS8vICAgIGNhc2UgSUVFRTgwMjExX1BBUkFNX1dNTV9BR0dSTU9ERToKLS8vICAgICAgICByZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX1dNRSwgdmFsdWUpOwotLy8gICAgICAgIGJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRkY6Ci0vLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19GRiwgdmFsdWUpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fVFVSQk86Ci0vLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19UVVJCT1AsIHZhbHVlKTsKLS8vCQlpZiAocmV0diA9PSBFTkVUUkVTRVQpIHsKLS8vCQkJaWYoaWVlZTgwMjExX3NldF90dXJibyhkZXYsdmFsdWUpKQotLy8JCQkJCXJldHVybiAtRUlOVkFMOwotLy8JCQlpZWVlODAyMTFfc2Nhbl9mbHVzaChpYyk7Ci0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fWFI6Ci0vLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19YUiwgdmFsdWUpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQlVSU1Q6Ci0vLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19CVVJTVCwgdmFsdWUpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQVI6Ci0vLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19BUiwgdmFsdWUpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUFVSRUc6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BVUkVHOwotLy8JCWVsc2UKLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfUFVSRUc7Ci0vLwkJLyogTkI6IHJlc2V0IG9ubHkgaWYgd2UncmUgb3BlcmF0aW5nIG9uIGFuIDExZyBjaGFubmVsICovCi0vLwkJaWYgKGljLT5pY19ic3NjaGFuICE9IElFRUU4MDIxMV9DSEFOX0FOWUMgJiYKLS8vCQkgICAgSUVFRTgwMjExX0lTX0NIQU5fQU5ZRyhpYy0+aWNfYnNzY2hhbikpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9XRFM6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQl2YXAtPml2X2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9XRFM7Ci0vLwkJZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfV0RTOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOOgotLy8JCWlmICh2YWx1ZSkgewotLy8JCQlpZiAoKHZhcC0+aXZfY2FwcyAmIElFRUU4MDIxMV9DX0JHU0NBTikgPT0gMCkKLS8vCQkJCXJldHVybiAtRUlOVkFMOwotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0JHU0NBTjsKLS8vCQl9IGVsc2UgewotLy8JCQkvKiBYWFggcmFjZXk/ICovCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0JHU0NBTjsKLS8vCQkJaWVlZTgwMjExX2NhbmNlbF9zY2FuKHZhcCk7CS8qIGFueXRoaW5nIGN1cnJlbnQgKi8KLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9CR1NDQU5fSURMRToKLS8vCQlpZiAodmFsdWUgPj0gSUVFRTgwMjExX0JHU0NBTl9JRExFX01JTikKLS8vCQkJdmFwLT5pdl9iZ3NjYW5pZGxlID0gdmFsdWUqSFovMTAwMDsKLS8vCQllbHNlCi0vLwkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9CR1NDQU5fSU5URVJWQUw6Ci0vLwkJaWYgKHZhbHVlID49IElFRUU4MDIxMV9CR1NDQU5fSU5UVkFMX01JTikKLS8vCQkJdmFwLT5pdl9iZ3NjYW5pbnR2bCA9IHZhbHVlKkhaOwotLy8JCWVsc2UKLS8vCQkJcmV0diA9IEVJTlZBTDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX01DQVNUX1JBVEU6Ci0vLwkJLyogdW5pdHMgYXJlIGluIEtJTE9iaXRzIHBlciBzZWNvbmQgKi8KLS8vCQlpZiAodmFsdWUgPj0gMjU2ICYmIHZhbHVlIDw9IDU0MDAwKQotLy8JCQl2YXAtPml2X21jYXN0X3JhdGUgPSB2YWx1ZTsKLS8vCQllbHNlCi0vLwkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1ZFUkFHRV9DTEFTUzoKLS8vCQlpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSBJRUVFODAyMTFfQ09WRVJBR0VfQ0xBU1NfTUFYKSB7Ci0vLwkJCWljLT5pY19jb3ZlcmFnZWNsYXNzID0gdmFsdWU7Ci0vLwkJCWlmIChJU19VUF9BVVRPKHZhcCkpCi0vLwkJCQlpZWVlODAyMTFfbmV3X3N0YXRlKHZhcCwgSUVFRTgwMjExX1NfU0NBTiwgMCk7Ci0vLwkJCXJldHYgPSAwOwotLy8JCX0KLS8vCQllbHNlCi0vLwkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1VOVFJZX0lFOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9DT1VOVFJZSUU7Ci0vLwkJZWxzZQotLy8JCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9DT1VOVFJZSUU7Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JFR0NMQVNTOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9SRUdDTEFTUzsKLS8vCQllbHNlCi0vLwkJCWljLT5pY19mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX1JFR0NMQVNTOwotLy8JCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9TQ0FOVkFMSUQ6Ci0vLwkJdmFwLT5pdl9zY2FudmFsaWQgPSB2YWx1ZSpIWjsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUlNTSV8xMUE6Ci0vLwkJdmFwLT5pdl9yb2FtLnJzc2kxMWEgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUlNTSV8xMUI6Ci0vLwkJdmFwLT5pdl9yb2FtLnJzc2kxMWJPbmx5ID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFHOgotLy8JCXZhcC0+aXZfcm9hbS5yc3NpMTFiID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JBVEVfMTFBOgotLy8JCXZhcC0+aXZfcm9hbS5yYXRlMTFhID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JBVEVfMTFCOgotLy8JCXZhcC0+aXZfcm9hbS5yYXRlMTFiT25seSA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExRzoKLS8vCQl2YXAtPml2X3JvYW0ucmF0ZTExYiA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fVUFQU0RJTkZPOgotLy8JCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9IT1NUQVApIHsKLS8vCQkJaWYgKGljLT5pY19jYXBzICYgSUVFRTgwMjExX0NfVUFQU0QpIHsKLS8vCQkJCWlmICh2YWx1ZSkKLS8vCQkJCQlJRUVFODAyMTFfVkFQX1VBUFNEX0VOQUJMRSh2YXApOwotLy8JCQkJZWxzZQotLy8JCQkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRElTQUJMRSh2YXApOwotLy8JCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQkJfQotLy8JCX0KLS8vCQllbHNlIGlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9TVEEpIHsKLS8vCQkJdmFwLT5pdl91YXBzZGluZm8gPSB2YWx1ZTsKLS8vCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9FTkFCTEUodmFwKTsKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9TTEVFUDoKLS8vCQkvKiBYWFg6IEZvcmNlZCBzbGVlcCBmb3IgdGVzdGluZy4gRG9lcyBub3QgYWN0dWFsbHkgcGxhY2UgdGhlCi0vLwkJICogICAgICBIVyBpbiBzbGVlcCBtb2RlIHlldC4gdGhpcyBvbmx5IG1ha2VzIHNlbnNlIGZvciBTVEFzLgotLy8JCSAqLwotLy8JCWlmICh2YWx1ZSkgewotLy8JCQkvKiBnb3RvIHNsZWVwICovCi0vLwkJCUlFRUU4MDIxMV9WQVBfR09UT1NMRUVQKHZhcCk7Ci0vLwkJfQotLy8JCWVsc2UgewotLy8JCQkvKiB3YWtldXAgKi8KLS8vCQkJSUVFRTgwMjExX1ZBUF9XQUtFVVAodmFwKTsKLS8vCQl9Ci0vLwkJaWVlZTgwMjExX3NlbmRfbnVsbGRhdGEoaWVlZTgwMjExX3JlZl9ub2RlKHZhcC0+aXZfYnNzKSk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9RT1NOVUxMOgotLy8JCS8qIEZvcmNlIGEgUW9TIE51bGwgZm9yIHRlc3RpbmcuICovCi0vLwkJaWVlZTgwMjExX3NlbmRfcW9zbnVsbGRhdGEodmFwLT5pdl9ic3MsIHZhbHVlKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BTUE9MTDoKLS8vCQkvKiBGb3JjZSBhIFBTLVBPTEwgZm9yIHRlc3RpbmcuICovCi0vLwkJaWVlZTgwMjExX3NlbmRfcHNwb2xsKHZhcC0+aXZfYnNzKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0VPU1BEUk9QOgotLy8JCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9IT1NUQVApIHsKLS8vCQkJaWYgKHZhbHVlKSBJRUVFODAyMTFfVkFQX0VPU1BEUk9QX0VOQUJMRSh2YXApOwotLy8JCQllbHNlIElFRUU4MDIxMV9WQVBfRU9TUERST1BfRElTQUJMRSh2YXApOwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX01BUktERlM6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQlpYy0+aWNfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX01BUktERlM7Ci0vLwkJZWxzZQotLy8JCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9NQVJLREZTOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ0hBTkJXOgotLy8JCXN3aXRjaCAodmFsdWUpIHsKLS8vCQkJY2FzZSAwOgotLy8JCQkJaWMtPmljX2NoYW5id2ZsYWcgPSAwOwotLy8JCQkJYnJlYWs7Ci0vLwkJCWNhc2UgMToKLS8vCQkJCWljLT5pY19jaGFuYndmbGFnID0gSUVFRTgwMjExX0NIQU5fSEFMRjsKLS8vCQkJCWJyZWFrOwotLy8JCQljYXNlIDI6Ci0vLwkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IElFRUU4MDIxMV9DSEFOX1FVQVJURVI7Ci0vLwkJCQlicmVhazsKLS8vCQkJZGVmYXVsdDoKLS8vCQkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJCQlicmVhazsKLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9TSE9SVFBSRUFNQkxFOgotLy8JCWlmICh2YWx1ZSkgewotLy8JCQlpYy0+aWNfY2FwcyB8PSBJRUVFODAyMTFfQ19TSFBSRUFNQkxFOwotLy8JCX0gZWxzZSB7Ci0vLwkJCWljLT5pY19jYXBzICY9IH5JRUVFODAyMTFfQ19TSFBSRUFNQkxFOwotLy8JCX0KLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JZGVmYXVsdDoKLS8vCQlyZXR2ID0gRU9QTk9UU1VQUDsKLS8vCQlicmVhazsKLS8vCX0KLS8vCS8qIFhYWCBzaG91bGQgYW55IG9mIHRoZXNlIGNhdXNlIGEgcmVzY2FuPyAqLwotLy8JaWYgKHJldHYgPT0gRU5FVFJFU0VUKQotLy8JCXJldHYgPSBJU19VUF9BVVRPKHZhcCkgPyBpZWVlODAyMTFfb3Blbih2YXAtPml2X2RldikgOiAwOwotLy8JcmV0dXJuIC1yZXR2OwotLy99CisvKmludCB1c2JkcnZ3ZXh0X3NldHBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisqCQkgICAJIHZvaWQgKncsIGNoYXIgKmV4dHJhKQorKnsKKyoJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gZGV2LT5tbF9wcml2OworKglzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7CisqCXN0cnVjdCBpZWVlODAyMTFfcnNucGFybXMgKnJzbiA9ICZ2YXAtPml2X2Jzcy0+bmlfcnNuOworKglpbnQgKmkgPSAoaW50ICopIGV4dHJhOworKglpbnQgcGFyYW0gPSBpWzBdOwkJLy8gcGFyYW1ldGVyIGlkIGlzIDFzdAorKglpbnQgdmFsdWUgPSBpWzFdOwkJLy8gTkI6IG1vc3QgdmFsdWVzIGFyZSBUWVBFX0lOVAorKglpbnQgcmV0diA9IDA7CisqCWludCBqLCBjYXBzOworKgljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2F1dGhlbnRpY2F0b3IgKmF1dGg7CisqCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYWNsYXRvciAqYWNsOworKgorKglzd2l0Y2ggKHBhcmFtKSB7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FVVEhNT0RFOgorKgkJc3dpdGNoICh2YWx1ZSkgeworKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9XUEE6CS8vIFdQQQorKgkJY2FzZSBJRUVFODAyMTFfQVVUSF84MDIxWDoJLy8gODAyLjF4CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX09QRU46CS8vIG9wZW4KKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfU0hBUkVEOgkvLyBzaGFyZWQta2V5CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX0FVVE86CS8vIGF1dG8KKyoJCQlhdXRoID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0b3JfZ2V0KHZhbHVlKTsKKyoJCQlpZiAoYXV0aCA9PSBOVUxMKQorKgkJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCQlicmVhazsKKyoJCWRlZmF1bHQ6CisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQl9CisqCQlzd2l0Y2ggKHZhbHVlKSB7CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX1dQQToJLy8gV1BBIHcvIDgwMi4xeAorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKKyoJCQl2YWx1ZSA9IElFRUU4MDIxMV9BVVRIXzgwMjFYOworKgkJCWJyZWFrOworKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9PUEVOOgkvLyBvcGVuCisqCQl2YXAtPml2X2ZsYWdzICY9IH4oSUVFRTgwMjExX0ZfV1BBIHwgSUVFRTgwMjExX0ZfUFJJVkFDWSk7CisqCQkJYnJlYWs7CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX1NIQVJFRDoJLy8gc2hhcmVkLWtleQorKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9BVVRPOgkvLyBhdXRvCisqCQljYXNlIElFRUU4MDIxMV9BVVRIXzgwMjFYOgkvLyA4MDIuMXgKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XUEE7CisqCQkJLy8gYm90aCByZXF1aXJlIGEga2V5IHNvIG1hcmsgdGhlIFBSSVZBQ1kgY2FwYWJpbGl0eQorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKKyoJCQlicmVhazsKKyoJCX0KKyoJCS8vIE5COiBhdXRoZW50aWNhdG9yIGF0dGFjaC9kZXRhY2ggaGFwcGVucyBvbiBzdGF0ZSBjaGFuZ2UKKyoJCXZhcC0+aXZfYnNzLT5uaV9hdXRobW9kZSA9IHZhbHVlOworKgkJLy8gWFhYIG1peGVkL21vZGUvdXNhZ2U/CisqCQl2YXAtPml2X2F1dGggPSBhdXRoOworKgkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9QUk9UTU9ERToKKyoJCWlmICh2YWx1ZSA+IElFRUU4MDIxMV9QUk9UX1JUU0NUUykKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCWljLT5pY19wcm90bW9kZSA9IHZhbHVlOworKgkJLy8gTkI6IGlmIG5vdCBvcGVyYXRpbmcgaW4gMTFnIHRoaXMgY2FuIHdhaXQKKyoJCWlmIChpYy0+aWNfYnNzY2hhbiAhPSBJRUVFODAyMTFfQ0hBTl9BTllDICYmCisqCQkgICAgSUVFRTgwMjExX0lTX0NIQU5fQU5ZRyhpYy0+aWNfYnNzY2hhbikpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVENJUEhFUjoKKyoJCWlmICgodmFwLT5pdl9jYXBzICYgY2lwaGVyMmNhcCh2YWx1ZSkpID09IDAgJiYKKyoJCSAgICAhaWVlZTgwMjExX2NyeXB0b19hdmFpbGFibGUodmFsdWUpKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJcnNuLT5yc25fbWNhc3RjaXBoZXIgPSB2YWx1ZTsKKyoJCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RLRVlMRU46CisqCQlpZiAoISgwIDwgdmFsdWUgJiYgdmFsdWUgPCBJRUVFODAyMTFfS0VZQlVGX1NJWkUpKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJLy8gWFhYIG5vIHdheSB0byB2ZXJpZnkgZHJpdmVyIGNhcGFiaWxpdHkKKyoJCXJzbi0+cnNuX21jYXN0a2V5bGVuID0gdmFsdWU7CisqCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VDQVNUQ0lQSEVSUzoKKyoKKyoJCSAvLyBDb252ZXJ0IGNpcGhlciBzZXQgdG8gZXF1aXZhbGVudCBjYXBhYmlsaXRpZXMuCisqCQkgLy8gTkI6IHRoaXMgbG9naWMgaW50ZW50aW9uYWxseSBpZ25vcmVzIHVua25vd24gYW5kCisqCQkgLy8gdW5zdXBwb3J0ZWQgY2lwaGVycyBzbyBmb2xrcyBjYW4gc3BlY2lmeSAweGZmIG9yCisqCQkgLy8gc2ltaWxhciBhbmQgZ2V0IGFsbCBhdmFpbGFibGUgY2lwaGVycy4KKyoKKyoJCWNhcHMgPSAwOworKgkJZm9yIChqID0gMTsgaiA8IDMyOyBqKyspCS8vIE5COiBza2lwIFdFUAorKgkJCWlmICgodmFsdWUgJiAoMTw8aikpICYmCisqCQkJICAgICgodmFwLT5pdl9jYXBzICYgY2lwaGVyMmNhcChqKSkgfHwKKyoJCQkgICAgIGllZWU4MDIxMV9jcnlwdG9fYXZhaWxhYmxlKGopKSkKKyoJCQkJY2FwcyB8PSAxPDxqOworKgkJaWYgKGNhcHMgPT0gMCkJCQkvLyBub3RoaW5nIGF2YWlsYWJsZQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJLy8gWFhYIHZlcmlmeSBjaXBoZXJzIG9rIGZvciB1bmljYXN0IHVzZT8KKyoJCS8vIFhYWCBkaXNhbGxvdyBpZiBydW5uaW5nIGFzIGl0J2xsIGhhdmUgbm8gZWZmZWN0CisqCQlyc24tPnJzbl91Y2FzdGNpcGhlcnNldCA9IGNhcHM7CisqCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VDQVNUQ0lQSEVSOgorKgkJaWYgKChyc24tPnJzbl91Y2FzdGNpcGhlcnNldCAmIGNpcGhlcjJjYXAodmFsdWUpKSA9PSAwKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJcnNuLT5yc25fdWNhc3RjaXBoZXIgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVEtFWUxFTjoKKyoJCWlmICghKDAgPCB2YWx1ZSAmJiB2YWx1ZSA8IElFRUU4MDIxMV9LRVlCVUZfU0laRSkpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkvLyBYWFggbm8gd2F5IHRvIHZlcmlmeSBkcml2ZXIgY2FwYWJpbGl0eQorKgkJcnNuLT5yc25fdWNhc3RrZXlsZW4gPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9LRVlNR1RBTEdTOgorKgkJLy8gWFhYIGNoZWNrCisqCQlyc24tPnJzbl9rZXltZ210c2V0ID0gdmFsdWU7CisqCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JTTkNBUFM6CisqCQkvLyBYWFggY2hlY2sKKyoJCXJzbi0+cnNuX2NhcHMgPSB2YWx1ZTsKKyoJCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fV1BBOgorKgkJaWYgKHZhbHVlID4gMykKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCS8vIFhYWCB2ZXJpZnkgY2lwaGVycyBhdmFpbGFibGUKKyoJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dQQTsKKyoJCXN3aXRjaCAodmFsdWUpIHsKKyoJCWNhc2UgMToKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTE7CisqCQkJYnJlYWs7CisqCQljYXNlIDI6CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEEyOworKgkJCWJyZWFrOworKgkJY2FzZSAzOgorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMSB8IElFRUU4MDIxMV9GX1dQQTI7CisqCQkJYnJlYWs7CisqCQl9CisqCQlyZXR2ID0gRU5FVFJFU0VUOwkJLy8gWFhYPworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1JTkc6CisqCQlpZiAoIShJRUVFODAyMTFfUk9BTUlOR19ERVZJQ0UgPD0gdmFsdWUgJiYKKyoJCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfUk9BTUlOR19NQU5VQUwpKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJaWMtPmljX3JvYW1pbmcgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9QUklWQUNZOgorKgkJaWYgKHZhbHVlKSB7CisqCQkJLy8gWFhYIGNoZWNrIGZvciBrZXkgc3RhdGU/CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOworKgkJfSBlbHNlCisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfUFJJVkFDWTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9EUk9QVU5FTkNSWVBURUQ6CisqCQlpZiAodmFsdWUpCisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9EUk9QVU5FTkM7CisqCQllbHNlCisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfRFJPUFVORU5DOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPVU5URVJNRUFTVVJFUzoKKyoJCWlmICh2YWx1ZSkgeworKgkJCWlmICgodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkgPT0gMCkKKyoJCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9DT1VOVEVSTTsKKyoJCX0gZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0NPVU5URVJNOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RSSVZFUl9DQVBTOgorKgkJdmFwLT5pdl9jYXBzID0gdmFsdWU7CQkvLyBOQjogZm9yIHRlc3RpbmcKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9NQUNDTUQ6CisqCQlhY2wgPSB2YXAtPml2X2FjbDsKKyoJCXN3aXRjaCAodmFsdWUpIHsKKyoJCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfT1BFTjoKKyoJCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfQUxMT1c6CisqCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX0RFTlk6CisqCQkJaWYgKGFjbCA9PSBOVUxMKSB7CisqCQkJCWFjbCA9IGllZWU4MDIxMV9hY2xhdG9yX2dldCgibWFjIik7CisqCQkJCWlmIChhY2wgPT0gTlVMTCB8fCAhYWNsLT5pYWNfYXR0YWNoKHZhcCkpCisqCQkJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCQkJdmFwLT5pdl9hY2wgPSBhY2w7CisqCQkJfQorKgkJCWFjbC0+aWFjX3NldHBvbGljeSh2YXAsIHZhbHVlKTsKKyoJCQlicmVhazsKKyoJCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9GTFVTSDoKKyoJCQlpZiAoYWNsICE9IE5VTEwpCisqCQkJCWFjbC0+aWFjX2ZsdXNoKHZhcCk7CisqCQkJLy8gTkI6IHNpbGVudGx5IGlnbm9yZSB3aGVuIG5vdCBpbiB1c2UKKyoJCQlicmVhazsKKyoJCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9ERVRBQ0g6CisqCQkJaWYgKGFjbCAhPSBOVUxMKSB7CisqCQkJCXZhcC0+aXZfYWNsID0gTlVMTDsKKyoJCQkJYWNsLT5pYWNfZGV0YWNoKHZhcCk7CisqCQkJfQorKgkJCWJyZWFrOworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dNTToKKyoJCWlmIChpYy0+aWNfY2FwcyAmIElFRUU4MDIxMV9DX1dNRSl7CisqCQkJaWYgKHZhbHVlKSB7CisqCQkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV01FOworKgkJCQkgKi8vKiBYWFggbmVlZGVkIGJ5IGljX3Jlc2V0ICovLyoKKyoJCQkJdmFwLT5pdl9pYy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV01FOworKgkJCX0KKyoJCQllbHNlIHsKKyoJCQkJKi8vKiBYWFggbmVlZGVkIGJ5IGljX3Jlc2V0ICovLyoKKyoJCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfV01FOworKgkJCQl2YXAtPml2X2ljLT5pY19mbGFncyAmPSB+SUVFRTgwMjExX0ZfV01FOworKgkJCX0KKyoJCQlyZXR2ID0gRU5FVFJFU0VUOwkvLyBSZW5lZ290aWF0ZSBmb3IgY2FwYWJpbGl0aWVzCisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fSElERVNTSUQ6CisqCQlpZiAodmFsdWUpCisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9ISURFU1NJRDsKKyoJCWVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9ISURFU1NJRDsKKyoJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQVBCUklER0U6CisqCQlpZiAodmFsdWUgPT0gMCkKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX05PQlJJREdFOworKgkJZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX05PQlJJREdFOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0lOQUNUOgorKgkJdmFwLT5pdl9pbmFjdF9ydW4gPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0lOQUNUX0FVVEg6CisqCQl2YXAtPml2X2luYWN0X2F1dGggPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0lOQUNUX0lOSVQ6CisqCQl2YXAtPml2X2luYWN0X2luaXQgPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FCT0xUOgorKgkJY2FwcyA9IDA7CisqCisqCQkgLy8gTWFwIGFib2x0IHNldHRpbmdzIHRvIGNhcGFiaWxpdHkgYml0czsKKyoJCSAvLyB0aGlzIGFsc28gc3RyaXBzIHVua25vd24vdW53YW50ZWQgYml0cy4KKyoKKyoJCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9UVVJCT19QUklNRSkKKyoJCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX1RVUkJPUDsKKyoJCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9DT01QUkVTU0lPTikKKyoJCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0NPTVA7CisqCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfRkFTVF9GUkFNRSkKKyoJCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0ZGOworKgkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1hSKQorKgkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfWFI7CisqCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQVIpCisqCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19BUjsKKyoJCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9CVVJTVCkKKyoJCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0JVUlNUOworKiAgICAgICAgaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1dNRV9FTEUpCisqICAgICAgICAgICAgY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19XTUU7CisqCQkvLyB2ZXJpZnkgcmVxdWVzdGVkIGNhcGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkCisqCQlpZiAoKGNhcHMgJiBpYy0+aWNfYXRoX2NhcCkgIT0gY2FwcykKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCWlmICh2YXAtPml2X2F0aF9jYXAgIT0gY2FwcykgeworKgkJCWlmICgodmFwLT5pdl9hdGhfY2FwIF4gY2FwcykgJiBJRUVFODAyMTFfQVRIQ19UVVJCT1ApIHsKKyoJCQkJaWYgKGllZWU4MDIxMV9zZXRfdHVyYm8oZGV2LAorKgkJCQkJCWNhcHMgJiBJRUVFODAyMTFfQVRIQ19UVVJCT1ApKQorKgkJCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkJCWllZWU4MDIxMV9zY2FuX2ZsdXNoKGljKTsKKyoJCQl9CisqCQkJdmFwLT5pdl9hdGhfY2FwID0gY2FwczsKKyoJCQlpYy0+aWNfYXRoY2Fwc2V0dXAodmFwLT5pdl9pYywgdmFwLT5pdl9hdGhfY2FwKTsKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RUSU1fUEVSSU9EOgorKgkJaWYgKHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0hPU1RBUCAmJgorKgkJICAgIHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0lCU1MpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlpZiAoSUVFRTgwMjExX0RUSU1fTUlOIDw9IHZhbHVlICYmCisqCQkgICAgdmFsdWUgPD0gSUVFRTgwMjExX0RUSU1fTUFYKSB7CisqCQkJdmFwLT5pdl9kdGltX3BlcmlvZCA9IHZhbHVlOworKgkJCXJldHYgPSBFTkVUUkVTRVQ7CQkvLyByZXF1aXJlcyByZXN0YXJ0CisqCQl9IGVsc2UKKyoJCQlyZXR2ID0gRUlOVkFMOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JFQUNPTl9JTlRFUlZBTDoKKyoJCWlmICh2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9IT1NUQVAgJiYKKyoJCSAgICB2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9JQlNTKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJaWYgKElFRUU4MDIxMV9CSU5UVkFMX01JTiA8PSB2YWx1ZSAmJgorKgkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9CSU5UVkFMX01BWCkgeworKgkJCWljLT5pY19saW50dmFsID0gdmFsdWU7CQkvLyBYWFggbXVsdGktYnNzCisqCQkJcmV0diA9IEVORVRSRVNFVDsJCS8vIHJlcXVpcmVzIHJlc3RhcnQKKyoJCX0gZWxzZQorKgkJCXJldHYgPSBFSU5WQUw7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fRE9USDoKKyoJCWlmICh2YWx1ZSkgeworKgkJCWljLT5pY19mbGFncyB8PSBJRUVFODAyMTFfRl9ET1RIOworKgkJfQorKgkJZWxzZQorKgkJCWljLT5pY19mbGFncyAmPSB+SUVFRTgwMjExX0ZfRE9USDsKKyoJCXJldHYgPSBFTkVUUkVTRVQ7CS8vIFhYWDogbmVlZCBzb21ldGhpbmcgdGhpcyBkcmFzdGljPworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BXUlRBUkdFVDoKKyoJCWljLT5pY19jdXJjaGFubWF4cHdyID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fR0VOUkVBU1NPQzoKKyoJCUlFRUU4MDIxMV9TRU5EX01HTVQodmFwLT5pdl9ic3MsCisqCQkJCQlJRUVFODAyMTFfRkMwX1NVQlRZUEVfUkVBU1NPQ19SRVEsIDApOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPTVBSRVNTSU9OOgorKgkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19DT01QLCB2YWx1ZSk7CisqCQlicmVhazsKKyogICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fV01NX0FHR1JNT0RFOgorKiAgICAgICAgcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19XTUUsIHZhbHVlKTsKKyogICAgICAgIGJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9GRjoKKyoJCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfRkYsIHZhbHVlKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9UVVJCTzoKKyoJCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfVFVSQk9QLCB2YWx1ZSk7CisqCQlpZiAocmV0diA9PSBFTkVUUkVTRVQpIHsKKyoJCQlpZihpZWVlODAyMTFfc2V0X3R1cmJvKGRldix2YWx1ZSkpCisqCQkJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCQlpZWVlODAyMTFfc2Nhbl9mbHVzaChpYyk7CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fWFI6CisqCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX1hSLCB2YWx1ZSk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQlVSU1Q6CisqCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0JVUlNULCB2YWx1ZSk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQVI6CisqCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0FSLCB2YWx1ZSk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUFVSRUc6CisqCQlpZiAodmFsdWUpCisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QVVJFRzsKKyoJCWVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9QVVJFRzsKKyoJCS8vIE5COiByZXNldCBvbmx5IGlmIHdlJ3JlIG9wZXJhdGluZyBvbiBhbiAxMWcgY2hhbm5lbAorKgkJaWYgKGljLT5pY19ic3NjaGFuICE9IElFRUU4MDIxMV9DSEFOX0FOWUMgJiYKKyoJCSAgICBJRUVFODAyMTFfSVNfQ0hBTl9BTllHKGljLT5pY19ic3NjaGFuKSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dEUzoKKyoJCWlmICh2YWx1ZSkKKyoJCQl2YXAtPml2X2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9XRFM7CisqCQllbHNlCisqCQkJdmFwLT5pdl9mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX1dEUzsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9CR1NDQU46CisqCQlpZiAodmFsdWUpIHsKKyoJCQlpZiAoKHZhcC0+aXZfY2FwcyAmIElFRUU4MDIxMV9DX0JHU0NBTikgPT0gMCkKKyoJCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9CR1NDQU47CisqCQl9IGVsc2UgeworKgkJCS8vIFhYWCByYWNleT8KKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9CR1NDQU47CisqCQkJaWVlZTgwMjExX2NhbmNlbF9zY2FuKHZhcCk7CS8vIGFueXRoaW5nIGN1cnJlbnQKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9CR1NDQU5fSURMRToKKyoJCWlmICh2YWx1ZSA+PSBJRUVFODAyMTFfQkdTQ0FOX0lETEVfTUlOKQorKgkJCXZhcC0+aXZfYmdzY2FuaWRsZSA9IHZhbHVlKkhaLzEwMDA7CisqCQllbHNlCisqCQkJcmV0diA9IEVJTlZBTDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9CR1NDQU5fSU5URVJWQUw6CisqCQlpZiAodmFsdWUgPj0gSUVFRTgwMjExX0JHU0NBTl9JTlRWQUxfTUlOKQorKgkJCXZhcC0+aXZfYmdzY2FuaW50dmwgPSB2YWx1ZSpIWjsKKyoJCWVsc2UKKyoJCQlyZXR2ID0gRUlOVkFMOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX01DQVNUX1JBVEU6CisqCQkvLyB1bml0cyBhcmUgaW4gS0lMT2JpdHMgcGVyIHNlY29uZAorKgkJaWYgKHZhbHVlID49IDI1NiAmJiB2YWx1ZSA8PSA1NDAwMCkKKyoJCQl2YXAtPml2X21jYXN0X3JhdGUgPSB2YWx1ZTsKKyoJCWVsc2UKKyoJCQlyZXR2ID0gRUlOVkFMOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPVkVSQUdFX0NMQVNTOgorKgkJaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gSUVFRTgwMjExX0NPVkVSQUdFX0NMQVNTX01BWCkgeworKgkJCWljLT5pY19jb3ZlcmFnZWNsYXNzID0gdmFsdWU7CisqCQkJaWYgKElTX1VQX0FVVE8odmFwKSkKKyoJCQkJaWVlZTgwMjExX25ld19zdGF0ZSh2YXAsIElFRUU4MDIxMV9TX1NDQU4sIDApOworKgkJCXJldHYgPSAwOworKgkJfQorKgkJZWxzZQorKgkJCXJldHYgPSBFSU5WQUw7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09VTlRSWV9JRToKKyoJCWlmICh2YWx1ZSkKKyoJCQlpYy0+aWNfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX0NPVU5UUllJRTsKKyoJCWVsc2UKKyoJCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9DT1VOVFJZSUU7CisqCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JFR0NMQVNTOgorKgkJaWYgKHZhbHVlKQorKgkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfUkVHQ0xBU1M7CisqCQllbHNlCisqCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfUkVHQ0xBU1M7CisqCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1NDQU5WQUxJRDoKKyoJCXZhcC0+aXZfc2NhbnZhbGlkID0gdmFsdWUqSFo7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExQToKKyoJCXZhcC0+aXZfcm9hbS5yc3NpMTFhID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExQjoKKyoJCXZhcC0+aXZfcm9hbS5yc3NpMTFiT25seSA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUlNTSV8xMUc6CisqCQl2YXAtPml2X3JvYW0ucnNzaTExYiA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUE6CisqCQl2YXAtPml2X3JvYW0ucmF0ZTExYSA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUI6CisqCQl2YXAtPml2X3JvYW0ucmF0ZTExYk9ubHkgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JBVEVfMTFHOgorKgkJdmFwLT5pdl9yb2FtLnJhdGUxMWIgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9VQVBTRElORk86CisqCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7CisqCQkJaWYgKGljLT5pY19jYXBzICYgSUVFRTgwMjExX0NfVUFQU0QpIHsKKyoJCQkJaWYgKHZhbHVlKQorKgkJCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9FTkFCTEUodmFwKTsKKyoJCQkJZWxzZQorKgkJCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9ESVNBQkxFKHZhcCk7CisqCQkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQkJfQorKgkJfQorKgkJZWxzZSBpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fU1RBKSB7CisqCQkJdmFwLT5pdl91YXBzZGluZm8gPSB2YWx1ZTsKKyoJCQlJRUVFODAyMTFfVkFQX1VBUFNEX0VOQUJMRSh2YXApOworKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fU0xFRVA6CisqCQkvLyBYWFg6IEZvcmNlZCBzbGVlcCBmb3IgdGVzdGluZy4gRG9lcyBub3QgYWN0dWFsbHkgcGxhY2UgdGhlCisqCQkvLyAgICAgIEhXIGluIHNsZWVwIG1vZGUgeWV0LiB0aGlzIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIFNUQXMuCisqCisqCQlpZiAodmFsdWUpIHsKKyoJCQkvLyBnb3RvIHNsZWVwCisqCQkJSUVFRTgwMjExX1ZBUF9HT1RPU0xFRVAodmFwKTsKKyoJCX0KKyoJCWVsc2UgeworKgkJCS8vIHdha2V1cAorKgkJCUlFRUU4MDIxMV9WQVBfV0FLRVVQKHZhcCk7CisqCQl9CisqCQlpZWVlODAyMTFfc2VuZF9udWxsZGF0YShpZWVlODAyMTFfcmVmX25vZGUodmFwLT5pdl9ic3MpKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9RT1NOVUxMOgorKgkJLy8gRm9yY2UgYSBRb1MgTnVsbCBmb3IgdGVzdGluZy4KKyoJCWllZWU4MDIxMV9zZW5kX3Fvc251bGxkYXRhKHZhcC0+aXZfYnNzLCB2YWx1ZSk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUFNQT0xMOgorKgkJLy8gRm9yY2UgYSBQUy1QT0xMIGZvciB0ZXN0aW5nLgorKgkJaWVlZTgwMjExX3NlbmRfcHNwb2xsKHZhcC0+aXZfYnNzKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9FT1NQRFJPUDoKKyoJCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9IT1NUQVApIHsKKyoJCQlpZiAodmFsdWUpIElFRUU4MDIxMV9WQVBfRU9TUERST1BfRU5BQkxFKHZhcCk7CisqCQkJZWxzZSBJRUVFODAyMTFfVkFQX0VPU1BEUk9QX0RJU0FCTEUodmFwKTsKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9NQVJLREZTOgorKgkJaWYgKHZhbHVlKQorKgkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfTUFSS0RGUzsKKyoJCWVsc2UKKyoJCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9NQVJLREZTOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NIQU5CVzoKKyoJCXN3aXRjaCAodmFsdWUpIHsKKyoJCQljYXNlIDA6CisqCQkJCWljLT5pY19jaGFuYndmbGFnID0gMDsKKyoJCQkJYnJlYWs7CisqCQkJY2FzZSAxOgorKgkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IElFRUU4MDIxMV9DSEFOX0hBTEY7CisqCQkJCWJyZWFrOworKgkJCWNhc2UgMjoKKyoJCQkJaWMtPmljX2NoYW5id2ZsYWcgPSBJRUVFODAyMTFfQ0hBTl9RVUFSVEVSOworKgkJCQlicmVhazsKKyoJCQlkZWZhdWx0OgorKgkJCQlyZXR2ID0gRUlOVkFMOworKgkJCQlicmVhazsKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9TSE9SVFBSRUFNQkxFOgorKgkJaWYgKHZhbHVlKSB7CisqCQkJaWMtPmljX2NhcHMgfD0gSUVFRTgwMjExX0NfU0hQUkVBTUJMRTsKKyoJCX0gZWxzZSB7CisqCQkJaWMtPmljX2NhcHMgJj0gfklFRUU4MDIxMV9DX1NIUFJFQU1CTEU7CisqCQl9CisqCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWRlZmF1bHQ6CisqCQlyZXR2ID0gRU9QTk9UU1VQUDsKKyoJCWJyZWFrOworKgl9CisqCS8vIFhYWCBzaG91bGQgYW55IG9mIHRoZXNlIGNhdXNlIGEgcmVzY2FuPworKglpZiAocmV0diA9PSBFTkVUUkVTRVQpCisqCQlyZXR2ID0gSVNfVVBfQVVUTyh2YXApID8gaWVlZTgwMjExX29wZW4odmFwLT5pdl9kZXYpIDogMDsKKyoJcmV0dXJuIC1yZXR2OworKn0KKyovCiAKIGludCB1c2JkcnZ3ZXh0X3NldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgCSB2b2lkICp3LCBjaGFyICpleHRyYSkKKwkJCXZvaWQgKncsIGNoYXIgKmV4dHJhKQogewogCXJldHVybiAwOwogfQpAQCAtMTk0NywxNTggKzE4ODcsMTM4IEBACiBpbnQgdXNiZHJ2d2V4dF9nZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQl2b2lkICp3LCBjaGFyICpleHRyYSkKIHsKLQkvL3N0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7ICovCiAJc3RydWN0IGl3X3BvaW50ICp3cmkgPSAoc3RydWN0IGl3X3BvaW50ICopZXh0cmE7CiAJY2hhciBtb2RlWzhdOwogCi0gICAgc3RyY3B5KG1vZGUsIjExZyIpOwotCXJldHVybiAoY29weV90b191c2VyKHdyaS0+cG9pbnRlciwgbW9kZSwgNikgPyAtRUZBVUxUIDogMCk7CisJc3RyY3B5KG1vZGUsICIxMWciKTsKKwlyZXR1cm4gY29weV90b191c2VyKHdyaS0+cG9pbnRlciwgbW9kZSwgNikgPyAtRUZBVUxUIDogMDsKIH0KIAogaW50IHpmTG54UHJpdmF0ZUlvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB6ZGFwX2lvY3RsKiB6ZHJlcSkKIHsKLQkvL3ZvaWQqIHJlZ3AgPSBtYWNwLT5yZWdwOworCS8qIHZvaWQqIHJlZ3AgPSBtYWNwLT5yZWdwOyAqLwogCXUxNl90IGNtZDsKLQkvL3UzMl90IHRlbXA7Ci0JdTMyX3QqIHA7CisJLyogdTMyX3QgdGVtcDsgKi8KKwl1MzJfdCAqcDsKIAl1MzJfdCBpOwogCiAJY21kID0gemRyZXEtPmNtZDsKLQlzd2l0Y2goY21kKQotCXsKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgWk1fSU9DVExfUkVHX1JFQUQ6CiAJCXpmaURiZ1JlYWRSZWcoZGV2LCB6ZHJlcS0+YWRkcik7CiAJCWJyZWFrOwotCiAJY2FzZSBaTV9JT0NUTF9SRUdfV1JJVEU6CiAJCXpmaURiZ1dyaXRlUmVnKGRldiwgemRyZXEtPmFkZHIsIHpkcmVxLT52YWx1ZSk7CiAJCWJyZWFrOwotCiAJY2FzZSBaTV9JT0NUTF9NRU1fUkVBRDoKIAkJcCA9ICh1MzJfdCAqKSBidXNfdG9fdmlydCh6ZHJlcS0+YWRkcik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ1c2JkcnY6IHJlYWQgbWVtb3J5IGFkZHI6IDB4JTA4eCB2YWx1ZTogMHglMDh4XG4iLCB6ZHJlcS0+YWRkciwgKnApOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJInVzYmRydjogcmVhZCBtZW1vcnkgYWRkcjogMHglMDh4IHZhbHVlOiIKKwkJCQkiIDB4JTA4eFxuIiwgemRyZXEtPmFkZHIsICpwKTsKIAkJYnJlYWs7Ci0KIAljYXNlIFpNX0lPQ1RMX01FTV9XUklURToKIAkJcCA9ICh1MzJfdCAqKSBidXNfdG9fdmlydCh6ZHJlcS0+YWRkcik7CiAJCSpwID0gemRyZXEtPnZhbHVlOwotCQlwcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2OiB3cml0ZSB2YWx1ZTogMHglMDh4IHRvIG1lbW9yeSBhZGRyOiAweCUwOHhcbiIsIHpkcmVxLT52YWx1ZSwgemRyZXEtPmFkZHIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkidXNiZHJ2IDogd3JpdGUgdmFsdWUgOiAweCUwOHggdG8gbWVtb3J5IGFkZHIgOiIKKwkJCSIgMHglMDh4XG4iLCB6ZHJlcS0+dmFsdWUsIHpkcmVxLT5hZGRyKTsKIAkJYnJlYWs7Ci0KLQljYXNlIFpNX0lPQ1RMX1RBTExZIDoKKwljYXNlIFpNX0lPQ1RMX1RBTExZOgogCQl6ZmlXbGFuU2hvd1RhbGx5KGRldik7CiAJCWlmICh6ZHJlcS0+YWRkcikKIAkJCXpmaVdsYW5SZXNldFRhbGx5KGRldik7CiAJCWJyZWFrOworCWNhc2UgWk1fSU9DVExfVEVTVDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJaTV9JT0NUTF9URVNUOmxlbj0lZFxuIiwgemRyZXEtPmFkZHIpOworCQkvKiB6ZmlXbGFuUmVhZFJlZyhkZXYsIDB4MTBmNDAwKTsgKi8KKwkJLyogemZpV2xhblJlYWRSZWcoZGV2LCAweDEwZjQwNCk7ICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIklPQ1RMIFRFU1RcbiIpOworCQkjaWYgMQorCQkvKiBwcmludCBwYWNrZXQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHpkcmVxLT5hZGRyOyBpKyspIHsKKwkJCWlmICgoaSYweDcpID09IDApCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiUwMlggIiwKKwkJCQkJKHVuc2lnbmVkIGNoYXIpemRyZXEtPmRhdGFbaV0pOworCQl9CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlxuIik7CisJCSNlbmRpZgogCi0JY2FzZSBaTV9JT0NUTF9URVNUIDoKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJaTV9JT0NUTF9URVNUOmxlbj0lZFxuIiwgemRyZXEtPmFkZHIpOwotICAgICAgICAgICAgLy96ZmlXbGFuUmVhZFJlZyhkZXYsIDB4MTBmNDAwKTsKLSAgICAgICAgICAgIC8vemZpV2xhblJlYWRSZWcoZGV2LCAweDEwZjQwNCk7Ci0gICAgICAgICAgICBwcmludGsoIklPQ1RMIFRFU1RcbiIpOwotICAgICAgICAgICAgI2lmIDEKLSAgICAgICAgICAgIC8vcHJpbnQgcGFja2V0Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTx6ZHJlcS0+YWRkcjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgoaSYweDcpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50aygiJTAyWCAiLCAodW5zaWduZWQgY2hhcil6ZHJlcS0+ZGF0YVtpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICAjZW5kaWYKKwkJLyogRm9yIFRlc3Q/PyAxIHRvIDAgYnkgQ1dZYW5nKC0pICovCisJCSNpZiAwCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqczsKIAorCQkJLyogQWxsb2NhdGUgYSBza2IgKi8KKwkJCXMgPSBhbGxvY19za2IoMjAwMCwgR0ZQX0FUT01JQyk7CiAKLSAgICAgICAgICAgICNpZiAwIC8vRm9yIFRlc3Q/PyAxIHRvIDAgYnkgQ1dZYW5nKC0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiogczsKKwkJCS8qIENvcHkgZGF0YSB0byBza2IgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCB6ZHJlcS0+YWRkcjsgaSsrKQorCQkJCXMtPmRhdGFbaV0gPSB6ZHJlcS0+ZGF0YVtpXTsKKwkJCXMtPmxlbiA9IHpkcmVxLT5hZGRyOwogCi0gICAgICAgICAgICAvKiBBbGxvY2F0ZSBhIHNrYiAqLwotICAgICAgICAgICAgcyA9IGFsbG9jX3NrYigyMDAwLCBHRlBfQVRPTUlDKTsKKwkJCS8qIENhbGwgemZJZGxSZWN2KCkgKi8KKwkJCXpmaVJlY3Y4MDIxMShkZXYsIHMsIE5VTEwpOworCQkjZW5kaWYKKwkJYnJlYWs7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKiogWkRDT05GSUcgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWNhc2UgWk1fSU9DVExfRlJBRzoKKwkJemZpV2xhblNldEZyYWdUaHJlc2hvbGQoZGV2LCB6ZHJlcS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgWk1fSU9DVExfUlRTOgorCQl6ZmlXbGFuU2V0UnRzVGhyZXNob2xkKGRldiwgemRyZXEtPmFkZHIpOworCQlicmVhazsKKwljYXNlIFpNX0lPQ1RMX1NDQU46CisJCXpmaVdsYW5TY2FuKGRldik7CisJCWJyZWFrOworCWNhc2UgWk1fSU9DVExfS0VZOiB7CisJCXU4X3Qga2V5WzI5XTsKKwkJc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOworCQl1MzJfdCBpOwogCi0gICAgICAgICAgICAvKiBDb3B5IGRhdGEgdG8gc2tiICovCi0gICAgICAgICAgICBmb3IgKGk9MDsgaTx6ZHJlcS0+YWRkcjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHMtPmRhdGFbaV0gPSB6ZHJlcS0+ZGF0YVtpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPmxlbiA9IHpkcmVxLT5hZGRyOworCQlmb3IgKGkgPSAwOyBpIDwgMjk7IGkrKykKKwkJCWtleVtpXSA9IDA7CiAKLSAgICAgICAgICAgIC8qIENhbGwgemZJZGxSZWN2KCkgKi8KLSAgICAgICAgICAgIHpmaVJlY3Y4MDIxMShkZXYsIHMsIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgI2VuZGlmCisJCWZvciAoaSA9IDA7IGkgPCB6ZHJlcS0+YWRkcjsgaSsrKQorCQkJa2V5W2ldID0gemRyZXEtPmRhdGFbaV07CiAKLSAgICAgICAgICAgIGJyZWFrOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkia2V5IGxlbj0lZCwga2V5PSUwMnglMDJ4JTAyeCUwMnglMDJ4Li4uXG4iLAorCQkJemRyZXEtPmFkZHIsIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleVszXSwga2V5WzRdKTsKIAorCQlrZXlJbmZvLmtleUxlbmd0aCA9IHpkcmVxLT5hZGRyOworCQlrZXlJbmZvLmtleUluZGV4ID0gMDsKKwkJa2V5SW5mby5mbGFnID0gMDsKKwkJa2V5SW5mby5rZXkgPSBrZXk7CisJCXpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKwl9CisJCWJyZWFrOworCWNhc2UgWk1fSU9DVExfUkFURToKKwkJemZpV2xhblNldFR4UmF0ZShkZXYsIHpkcmVxLT5hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBaTV9JT0NUTF9FTkNSWVBUSU9OX01PREU6CisJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZHJlcS0+YWRkcik7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogWkRDT05GSUcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICBjYXNlIFpNX0lPQ1RMX0ZSQUcgOgotICAgICAgICAgICAgemZpV2xhblNldEZyYWdUaHJlc2hvbGQoZGV2LCB6ZHJlcS0+YWRkcik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpNX0lPQ1RMX1JUUyA6Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0UnRzVGhyZXNob2xkKGRldiwgemRyZXEtPmFkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaTV9JT0NUTF9TQ0FOIDoKLSAgICAgICAgICAgIHpmaVdsYW5TY2FuKGRldik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpNX0lPQ1RMX0tFWSA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdThfdCBrZXlbMjldOwotICAgICAgICAgICAgICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKLSAgICAgICAgICAgICAgICB1MzJfdCBpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8Mjk7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGtleVtpXSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8emRyZXEtPmFkZHI7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGtleVtpXSA9IHpkcmVxLT5kYXRhW2ldOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByaW50aygia2V5IGxlbj0lZCwga2V5PSUwMnglMDJ4JTAyeCUwMnglMDJ4Li4uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgemRyZXEtPmFkZHIsIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleVszXSwga2V5WzRdKTsKLQotICAgICAgICAgICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gemRyZXEtPmFkZHI7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnID0gMDsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmtleSA9IGtleTsKLSAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpNX0lPQ1RMX1JBVEUgOgotICAgICAgICAgICAgemZpV2xhblNldFR4UmF0ZShkZXYsIHpkcmVxLT5hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWk1fSU9DVExfRU5DUllQVElPTl9NT0RFIDoKLSAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZHJlcS0+YWRkcik7Ci0KLSAgICAgICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy9DV1lhbmcoKykKLSAgICAgICAgY2FzZSBaTV9JT0NUTF9TSUdOQUxfU1RSRU5HVEggOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHU4X3QgYnVmZmVyWzJdOwotICAgICAgICAgICAgICAgIHpmaVdsYW5RdWVyeVNpZ25hbEluZm8oZGV2LCAmYnVmZmVyWzBdKTsKLSAgICAgICAgICAgICAgICBwcmludGsoIkN1cnJlbnQgU2lnbmFsIFN0cmVuZ3RoIDogJTAyZFxuIiwgYnVmZmVyWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvL0NXWWFuZygrKQotICAgICAgICBjYXNlIFpNX0lPQ1RMX1NJR05BTF9RVUFMSVRZIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1OF90IGJ1ZmZlclsyXTsKLSAgICAgICAgICAgICAgICB6ZmlXbGFuUXVlcnlTaWduYWxJbmZvKGRldiwgJmJ1ZmZlclswXSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJDdXJyZW50IFNpZ25hbCBRdWFsaXR5IDogJTAyZFxuIiwgYnVmZmVyWzFdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCisJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJCXpmaVdsYW5FbmFibGUoZGV2KTsKKwkJYnJlYWs7CisJCS8qIENXWWFuZygrKSAqLworCWNhc2UgWk1fSU9DVExfU0lHTkFMX1NUUkVOR1RIOiB7CisJCXU4X3QgYnVmZmVyWzJdOworCQl6ZmlXbGFuUXVlcnlTaWduYWxJbmZvKGRldiwgJmJ1ZmZlclswXSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJDdXJyZW50IFNpZ25hbCBTdHJlbmd0aCA6ICUwMmRcbiIsIGJ1ZmZlclswXSk7CisJfQorCQlicmVhazsKKwkJLyogQ1dZYW5nKCspICovCisJY2FzZSBaTV9JT0NUTF9TSUdOQUxfUVVBTElUWTogeworCQl1OF90IGJ1ZmZlclsyXTsKKwkJemZpV2xhblF1ZXJ5U2lnbmFsSW5mbyhkZXYsICZidWZmZXJbMF0pOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ3VycmVudCBTaWduYWwgUXVhbGl0eSA6ICUwMmRcbiIsIGJ1ZmZlclsxXSk7CisJfQorCQlicmVhazsKIAljYXNlIFpNX0lPQ1RMX1NFVF9QSUJTU19NT0RFOgogCQlpZiAoemRyZXEtPmFkZHIgPT0gMSkKIAkJCXpmaVdsYW5TZXRXbGFuTW9kZShkZXYsIFpNX01PREVfUFNFVURPKTsKQEAgLTIxMDcsMTEgKzIwMjcsOSBAQAogCiAJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CiAJCXpmaVdsYW5FbmFibGUoZGV2KTsKLQogCQlicmVhazsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogWkRDT05GSUcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0JZGVmYXVsdCA6CisJLyoqKioqKioqKioqKioqKioqKioqKiBaRENPTkZJRyAqKioqKioqKioqKioqKioqKioqKioqKi8KKwlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgInVzYmRydjogZXJyb3IgY29tbWFuZCA9ICV4XG4iLCBjbWQpOwogCQlicmVhazsKIAl9CkBAIC0yMTIxLDc5MyArMjAzOSw3MzYgQEAKIAogaW50IHVzYmRydl93cGFfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGF0aHJfd2xhbl9wYXJhbSAqemRwYXJtKQogewotICAgIGludCByZXQgPSAwOwotICAgIHU4X3QgYmNfYWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotICAgIHU4X3QgbWFjX2FkZHJbODBdOwotICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdTE2X3QgdmFwSWQgPSAwOworCWludCByZXQgPSAwOworCXU4X3QgYmNfYWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCXU4X3QgbWFjX2FkZHJbODBdOworCXN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdTE2X3QgdmFwSWQgPSAwOwogCi0gICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisJLyogem13X2dldF93bGFuX2RldihkZXYpOyAqLwogCi0gICAgc3dpdGNoKHpkcGFybS0+Y21kKQotICAgIHsKLSAgICAgICAgY2FzZSBaRF9DTURfU0VUX0VOQ1JZUFRfS0VZOgorCXN3aXRjaCAoemRwYXJtLT5jbWQpIHsKKwljYXNlIFpEX0NNRF9TRVRfRU5DUllQVF9LRVk6CisJCS8qIFNldCB1cCBrZXkgaW5mb3JtYXRpb24gKi8KKwkJa2V5SW5mby5rZXlMZW5ndGggPSB6ZHBhcm0tPnUuY3J5cHQua2V5X2xlbjsKKwkJa2V5SW5mby5rZXlJbmRleCA9IHpkcGFybS0+dS5jcnlwdC5pZHg7CisJCWlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIHsKKwkJCS8qIEFQIE1vZGUgKi8KKwkJCWtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1I7CisJCX0gZWxzZQorCQkJa2V5SW5mby5mbGFnID0gMDsKKwkJa2V5SW5mby5rZXkgPSB6ZHBhcm0tPnUuY3J5cHQua2V5OworCQlrZXlJbmZvLmluaXRJdiA9IHpkcGFybS0+dS5jcnlwdC5zZXE7CisJCWtleUluZm8ubWFjQWRkciA9ICh1MTZfdCAqKXpkcGFybS0+c3RhX2FkZHI7CiAKLSAgICAgICAgICAgIC8qIFNldCB1cCBrZXkgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gemRwYXJtLT51LmNyeXB0LmtleV9sZW47Ci0gICAgICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gemRwYXJtLT51LmNyeXB0LmlkeDsKLSAgICAgICAgICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19BVVRIRU5USUNBVE9SOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IDA7Ci0gICAgICAgICAgICBrZXlJbmZvLmtleSA9IHpkcGFybS0+dS5jcnlwdC5rZXk7Ci0gICAgICAgICAgICBrZXlJbmZvLmluaXRJdiA9IHpkcGFybS0+dS5jcnlwdC5zZXE7Ci0gICAgICAgICAgICBrZXlJbmZvLm1hY0FkZHIgPSAodTE2X3QgKil6ZHBhcm0tPnN0YV9hZGRyOworCQkvKiBJZGVudGlmeSB0aGUgTUFDIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KKwkJaWYgKG1lbWNtcCh6ZHBhcm0tPnN0YV9hZGRyLCBiY19hZGRyLCBzaXplb2YoYmNfYWRkcikpID09IDApCisJCQlrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfR0s7CisJCWVsc2UKKwkJCWtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19QSzsKIAotICAgICAgICAgICAgLyogSWRlbnRpZnkgdGhlIE1BQyBhZGRyZXNzIGluZm9ybWF0aW9uICovCi0gICAgICAgICAgICBpZiAobWVtY21wKHpkcGFybS0+c3RhX2FkZHIsIGJjX2FkZHIsIHNpemVvZihiY19hZGRyKSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfR0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX1BLOwotICAgICAgICAgICAgfQorCQlpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiTk9ORSIpKSB7CisJCQkvKiB1OF90IHplcm9fbWFjW109ezAsMCwwLDAsMCwwfTsgKi8KIAotICAgICAgICAgICAgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIk5PTkUiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL3U4X3QgemVyb19tYWNbXT17MCwwLDAsMCwwLDB9OworCQkJLyogU2V0IGtleSBsZW5ndGggdG8gemVybyAqLworCQkJa2V5SW5mby5rZXlMZW5ndGggPSAwOwogCi0gICAgICAgICAgICAgICAgLyogU2V0IGtleSBsZW5ndGggdG8gemVybyAqLwotICAgICAgICAgICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gMDsKKwkJCS8qIGRlbCBncm91cCBrZXkgKi8KKwkJCWlmICh6ZHBhcm0tPnN0YV9hZGRyWzBdICYgMSkgeworCQkJCS8qIGlmIChtYWNwLT5jYXJkU2V0dGluZy5XUEFJZUxlbj09MCkKKwkJCQkqIHsgODAyLjF4IGR5bmFtaWMgV0VQCisJCQkJKiAgICBtRHluS2V5TW9kZSA9IDA7CisJCQkJKiAgICBtS2V5Rm9ybWF0WzBdID0gMDsKKwkJCQkqICAgIG1Qcml2YWN5SW52b2tlZFswXT1GQUxTRTsKKwkJCQkqICAgIG1DYXBbMF0gJj0gfkNBUF9QUklWQUNZOworCQkJCSogICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXT0wOworCQkJCSogfQorCQkJCSogbVdwYUJjS2V5TGVuID0gbUdrSW5zdGFsbGVkID0gMDsKKwkJCQkqLworCQkJfSBlbHNlIHsKKwkJCQkvKiBpZiAobWVtY21wKHplcm9fbWFjLHpkcGFybS0+c3RhX2FkZHIsIDYpPT0wKQorCQkJCSogeworCQkJCSogICAgIG1EeW5LZXlNb2RlPTA7CisJCQkJKiAgICBtS2V5Rm9ybWF0WzBdPTA7CisJCQkJKiAgICBwU2V0dGluZy0+RHluS2V5TW9kZT0wOworCQkJCSogICAgcFNldHRpbmctPkVuY3J5TW9kZVswXT0wOworCQkJCSogICAgbUR5bktleU1vZGU9MDsKKwkJCQkqIH0KKwkJCQkqLworCQkJfQogCi0gICAgICAgICAgICAgICAgaWYgKHpkcGFybS0+c3RhX2FkZHJbMF0gJiAxKS8vZGVsIGdyb3VwIGtleQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy9pZiAobWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVMZW49PTApCi0gICAgICAgICAgICAgICAgICAgIC8vey8vODAyLjF4IGR5bmFtaWMgV0VQCi0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1EeW5LZXlNb2RlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1Qcml2YWN5SW52b2tlZFswXT1GQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbUNhcFswXSAmPSB+Q0FQX1BSSVZBQ1k7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF09MDsKLSAgICAgICAgICAgICAgICAgICAgLy99Ci0gICAgICAgICAgICAgICAgICAgIC8vbVdwYUJjS2V5TGVuID0gbUdrSW5zdGFsbGVkID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy9pZiAobWVtY21wKHplcm9fbWFjLHpkcGFybS0+c3RhX2FkZHIsIDYpPT0wKQotICAgICAgICAgICAgICAgICAgICAvL3sKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGU9MDsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXT0wOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBwU2V0dGluZy0+RHluS2V5TW9kZT0wOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBwU2V0dGluZy0+RW5jcnlNb2RlWzBdPTA7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1EeW5LZXlNb2RlPTA7Ci0gICAgICAgICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAgICAgIH0KKwkJCXByaW50ayhLRVJOX0VSUiAiU2V0IEVuY3J5cHRpb24gVHlwZSBOT05FXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpKSB7CisJCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fVEtJUCk7CisJCQkvKiAvL0xpbnV4IFN1cHBsaWNhbnQgd2lsbCBpbnZlcnNlIFR4L1J4IGtleQorCQkJKiAvL1NvIHdlIGludmVyc2UgaXQgYmFjaywgQ1dZYW5nKCspCisJCQkqIHpmTWVtb3J5Q29weSgmdGVtcFswXSwgJmtleUluZm8ua2V5WzE2XSwgOCk7CisJCQkqIHpmTWVtb3J5Q29weSgma2V5SW5mby5rZXlbMTZdLCBrZXlJbmZvLmtleVsyNF0sIDgpOworCQkJKiB6Zk1lbW9yeUNvcHkoJmtleUluZm8ua2V5WzI0XSwgJnRlbXBbMF0sIDgpOworCQkJKiB1OF90IHRlbXA7CisJCQkqIGludCBrOworCQkJKiBmb3IgKGsgPSAwOyBrIDwgODsgaysrKQorCQkJKiB7CisJCQkqICAgICB0ZW1wID0ga2V5SW5mby5rZXlbMTYgKyBrXTsKKwkJCSogICAgIGtleUluZm8ua2V5WzE2ICsga10gPSBrZXlJbmZvLmtleVsyNCArIGtdOworCQkJKiAgICAga2V5SW5mby5rZXlbMjQgKyBrXSA9IHRlbXA7CisJCQkqIH0KKwkJCSogQ2FtRW5jcnlUeXBlID0gWk1fVEtJUDsKKwkJCSogaWYgKGlkeCA9PSAwKQorCQkJKiB7ICAgLy8gUGFpcndpc2Uga2V5CisJCQkqICAgICBtS2V5Rm9ybWF0WzBdID0gQ2FtRW5jcnlUeXBlOworCQkJKiAgICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IERZTl9LRVlfVEtJUDsKKwkJCSogfQorCQkJKi8KKwkJfSBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJDQ01QIikpIHsKKwkJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9BRVMpOworCQkJLyogQ2FtRW5jcnlUeXBlID0gWk1fQUVTOworCQkJKiBpZiAoaWR4ID09IDApCisJCQkqIHsgIC8vIFBhaXJ3aXNlIGtleQorCQkJKiAgICBtS2V5Rm9ybWF0WzBdID0gQ2FtRW5jcnlUeXBlOworCQkJKiAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gRFlOX0tFWV9BRVM7CisJCQkqIH0KKwkJCSovCisJCX0gZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiV0VQIikpIHsKKwkJCWlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSA1KSB7CisJCQkJLyogV0VQIDY0ICovCisJCQkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1dFUDY0KTsKKwkJCQkvKiBDYW1FbmNyeVR5cGUgPSBaTV9XRVA2NDsgKi8KKwkJCQkvKiB0bXBEeW5LZXlNb2RlPURZTl9LRVlfV0VQNjQ7ICovCisJCQl9IGVsc2UgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDEzKSB7CisJCQkJLyoga2V5bGVuPTEzLCBXRVAgMTI4ICovCisJCQkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1dFUDEyOCk7CisJCQkJLyogQ2FtRW5jcnlUeXBlID0gWk1fV0VQMTI4OyAqLworCQkJCS8qIHRtcER5bktleU1vZGU9RFlOX0tFWV9XRVAxMjg7ICovCisJCQl9IGVsc2UgeworCQkJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVAyNTYpOworCQkJfQogCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJTZXQgRW5jcnlwdGlvbiBUeXBlIE5PTkVcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJUS0lQIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1RLSVApOwotICAgICAgICAgICAgICAgIC8vTGludXggU3VwcGxpY2FudCB3aWxsIGludmVyc2UgVHgvUngga2V5Ci0gICAgICAgICAgICAgICAgLy9TbyB3ZSBpbnZlcnNlIGl0IGJhY2sgLy9DV1lhbmcoKykKLSAgICAgICAgICAgICAgICAvL3pmTWVtb3J5Q29weSgmdGVtcFswXSwgJmtleUluZm8ua2V5WzE2XSwgOCk7Ci0gICAgICAgICAgICAgICAgLy96Zk1lbW9yeUNvcHkoJmtleUluZm8ua2V5WzE2XSwga2V5SW5mby5rZXlbMjRdLCA4KTsKLSAgICAgICAgICAgICAgICAvL3pmTWVtb3J5Q29weSgma2V5SW5mby5rZXlbMjRdLCAmdGVtcFswXSwgOCk7Ci0gICAgICAgICAgICAgICAgLy91OF90IHRlbXA7Ci0gICAgICAgICAgICAgICAgLy9pbnQgazsKLSAgICAgICAgICAgICAgICAvL2ZvciAoayA9IDA7IGsgPCA4OyBrKyspCi0gICAgICAgICAgICAgICAgLy97Ci0gICAgICAgICAgICAgICAgLy8gICAgdGVtcCA9IGtleUluZm8ua2V5WzE2ICsga107Ci0gICAgICAgICAgICAgICAgLy8gICAga2V5SW5mby5rZXlbMTYgKyBrXSA9IGtleUluZm8ua2V5WzI0ICsga107Ci0gICAgICAgICAgICAgICAgLy8gICAga2V5SW5mby5rZXlbMjQgKyBrXSA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgLy99Ci0gICAgICAgICAgICAgICAgLy9DYW1FbmNyeVR5cGUgPSBaTV9US0lQOwotICAgICAgICAgICAgICAgIC8vLy9pZiAoaWR4ID09IDApCi0gICAgICAgICAgICAgICAgLy97Ly8gUGFpcndpc2Uga2V5Ci0gICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKLSAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gRFlOX0tFWV9US0lQOwotICAgICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9BRVMpOwotICAgICAgICAgICAgICAgIC8vQ2FtRW5jcnlUeXBlID0gWk1fQUVTOwotICAgICAgICAgICAgICAgIC8vLy9pZiAoaWR4ID09IDApCi0gICAgICAgICAgICAgICAgLy97Ly8gUGFpcndpc2Uga2V5Ci0gICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKLSAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gRFlOX0tFWV9BRVM7Ci0gICAgICAgICAgICAgICAgLy99Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJXRVAiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gNSkKLSAgICAgICAgICAgICAgICB7IC8vIFdFUCA2NAotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQNjQpOwotICAgICAgICAgICAgICAgIC8vICAgIENhbUVuY3J5VHlwZSA9IFpNX1dFUDY0OwotICAgICAgICAgICAgICAgIC8vICAgIHRtcER5bktleU1vZGU9RFlOX0tFWV9XRVA2NDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gMTMpCi0gICAgICAgICAgICAgICAgey8va2V5bGVuPTEzLCBXRVAgMTI4Ci0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVAxMjgpOwotICAgICAgICAgICAgICAgIC8vICAgIENhbUVuY3J5VHlwZSA9IFpNX1dFUDEyODsKLSAgICAgICAgICAgICAgICAvLyAgICB0bXBEeW5LZXlNb2RlPURZTl9LRVlfV0VQMTI4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQMjU2KTsKLSAgICAgICAgICAgICAgICB9CisJLyogRm9yIER5bmFtaWMgV0VQIGtleSAoTm9uLVdQQSBSYWRpdXMpLCB0aGUga2V5IElEIHJhbmdlOiAwLTMKKwkqIEluIFdQQS9SU04gbW9kZSwgdGhlIGtleSBJRCByYW5nZTogMS0zLCB1c3VhbGx5LCBhIGJyb2FkY2FzdCBrZXkuCisJKiBGb3IgV0VQIGtleSBzZXR0aW5nOiB3ZSBzZXQgbUR5bktleU1vZGUgYW5kIG1LZXlGb3JtYXQgaW4gZm9sbG93aW5nCisJKiBjYXNlOgorCSogICAxLiBGb3IgODAyLjF4IGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBXRVAga2V5IG1ldGhvZC4KKwkqICAgMi4gRm9yIFdQQS9SU04gbW9kZSwgYnV0IGtleSBpZCA9PSAwLgorCSoJKEJ1dCB0aGlzIGlzIGFuIGltcG9zc2libGUgY2FzZSkKKwkqIFNvLCBvbmx5IGNoZWNrIGNhc2UgMS4KKwkqIGlmIChtYWNwLT5jYXJkU2V0dGluZy5XUEFJZUxlbj09MCkKKwkqIHsKKwkqICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7CisJKiAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gdG1wRHluS2V5TW9kZTsKKwkqICAgIG1Qcml2YWN5SW52b2tlZFswXT1UUlVFOworCSogICAgbUNhcFswXSB8PSBDQVBfUFJJVkFDWTsKKwkqICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF09MTsKKwkqIH0KKwkqLworCQl9CiAKLSAgICAgICAgICAgICAgICAvLyBGb3IgRHluYW1pYyBXRVAga2V5IChOb24tV1BBIFJhZGl1cyksIHRoZSBrZXkgSUQgcmFuZ2U6IDAtMwotICAgICAgICAgICAgICAgIC8vIEluIFdQQS9SU04gbW9kZSwgdGhlIGtleSBJRCByYW5nZTogMS0zLCB1c3VhbGx5LCBhIGJyb2FkY2FzdCBrZXkuCi0gICAgICAgICAgICAgICAgLy8gRm9yIFdFUCBrZXkgc2V0dGluZzogd2Ugc2V0IG1EeW5LZXlNb2RlIGFuZCBtS2V5Rm9ybWF0IGluIGZvbGxvd2luZyBjYXNlOgotICAgICAgICAgICAgICAgIC8vICAgMS4gRm9yIDgwMi4xeCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgV0VQIGtleSBtZXRob2QuCi0gICAgICAgICAgICAgICAgLy8gICAyLiBGb3IgV1BBL1JTTiBtb2RlLCBidXQga2V5IGlkID09IDAuIChCdXQgdGhpcyBpcyBhbiBpbXBvc3NpYmxlIGNhc2UpCi0gICAgICAgICAgICAgICAgLy8gU28sIG9ubHkgY2hlY2sgY2FzZSAxLgotICAgICAgICAgICAgICAgIC8vaWYgKG1hY3AtPmNhcmRTZXR0aW5nLldQQUllTGVuPT0wKQotICAgICAgICAgICAgICAgIC8vewotICAgICAgICAgICAgICAgIC8vICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IHRtcER5bktleU1vZGU7Ci0gICAgICAgICAgICAgICAgLy8gICAgbVByaXZhY3lJbnZva2VkWzBdPVRSVUU7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNhcFswXSB8PSBDQVBfUFJJVkFDWTsKLSAgICAgICAgICAgICAgICAvLyAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdPTE7Ci0gICAgICAgICAgICAgICAgLy99Ci0gICAgICAgICAgICB9CisJCS8qIERVTVAga2V5IGNvbnRleHQgKi8KKwkJLyogI2lmZGVmIFdQQV9ERUJVRyAqLworCQlpZiAoa2V5SW5mby5rZXlMZW5ndGggPiAwKSB7CisJCQlpbnQgaWk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkiT3R1czogS2V5IENvbnRleHQ6XG4iKTsKKwkJCWZvciAoaWkgPSAwOyBpaSA8IGtleUluZm8ua2V5TGVuZ3RoOyApIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkiMHglMDJ4ICIsIGtleUluZm8ua2V5W2lpXSk7CisJCQkJaWYgKCgrK2lpICUgMTYpID09IDApCisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlxuIik7CisJCQl9CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOworCQl9CisJCS8qICNlbmRpZiAqLwogCi0gICAgICAgICAgICAvKiBEVU1QIGtleSBjb250ZXh0ICovCi0vLyNpZmRlZiBXUEFfREVCVUcKLSAgICAgICAgICAgIGlmIChrZXlJbmZvLmtleUxlbmd0aCA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGlpOwotICAgICAgICAgICAgICAgIHByaW50aygiT3R1czogS2V5IENvbnRleHQ6XG4iKTsKLSAgICAgICAgICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IGtleUluZm8ua2V5TGVuZ3RoOykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDJ4ICIsIGtleUluZm8ua2V5W2lpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCgrK2lpICUgMTYpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgIH0KLS8vI2VuZGlmCisJCS8qIFNldCBlbmNyeXB0IG1vZGUgKi8KKwkJLyogemZpV2xhblNldEVuY3J5TW9kZShkZXYsIENhbUVuY3J5VHlwZSk7ICovCisJCXZhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOworCQlpZiAodmFwSWQgPT0gMHhmZmZmKQorCQkJa2V5SW5mby52YXBJZCA9IDA7CisJCWVsc2UKKwkJCWtleUluZm8udmFwSWQgPSB2YXBJZCArIDE7CisJCWtleUluZm8udmFwQWRkclswXSA9IGtleUluZm8ubWFjQWRkclswXTsKKwkJa2V5SW5mby52YXBBZGRyWzFdID0ga2V5SW5mby5tYWNBZGRyWzFdOworCQlrZXlJbmZvLnZhcEFkZHJbMl0gPSBrZXlJbmZvLm1hY0FkZHJbMl07CiAKLSAgICAgICAgICAgIC8qIFNldCBlbmNyeXB0IG1vZGUgKi8KLSAgICAgICAgICAgIC8vemZpV2xhblNldEVuY3J5TW9kZShkZXYsIENhbUVuY3J5VHlwZSk7Ci0gICAgICAgICAgICB2YXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKLSAgICAgICAgICAgIGlmICh2YXBJZCA9PSAweGZmZmYpCi0gICAgICAgICAgICAgICAga2V5SW5mby52YXBJZCA9IDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAga2V5SW5mby52YXBJZCA9IHZhcElkICsgMTsKLSAgICAgICAgICAgIGtleUluZm8udmFwQWRkclswXSA9IGtleUluZm8ubWFjQWRkclswXTsKLSAgICAgICAgICAgIGtleUluZm8udmFwQWRkclsxXSA9IGtleUluZm8ubWFjQWRkclsxXTsKLSAgICAgICAgICAgIGtleUluZm8udmFwQWRkclsyXSA9IGtleUluZm8ubWFjQWRkclsyXTsKKwkJemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOwogCi0gICAgICAgICAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisJCS8qIHpmaVdsYW5EaXNhYmxlKGRldik7ICovCisJCS8qIHpmaVdsYW5FbmFibGUoZGV2KTsgKi8KKwkJYnJlYWs7CisJY2FzZSBaRF9DTURfU0VUX01MTUU6CisJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX1NFVF9NTE1FXG4iKTsKIAotICAgICAgICAgICAgLy96ZmlXbGFuRGlzYWJsZShkZXYpOwotICAgICAgICAgICAgLy96ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgICAgICBicmVhazsKKwkJLyogVHJhbnNsYXRlIFNUQSdzIGFkZHJlc3MgKi8KKwkJc3ByaW50ZihtYWNfYWRkciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJCXpkcGFybS0+c3RhX2FkZHJbMF0sIHpkcGFybS0+c3RhX2FkZHJbMV0sCisJCQl6ZHBhcm0tPnN0YV9hZGRyWzJdLCB6ZHBhcm0tPnN0YV9hZGRyWzNdLAorCQkJemRwYXJtLT5zdGFfYWRkcls0XSwgemRwYXJtLT5zdGFfYWRkcls1XSk7CiAKLSAgICAgICAgY2FzZSBaRF9DTURfU0VUX01MTUU6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TRVRfTUxNRVxuIik7CisJCXN3aXRjaCAoemRwYXJtLT51Lm1sbWUuY21kKSB7CisJCWNhc2UgTUxNRV9TVEFfREVBVVRIOgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSIgLS0tLS0tLUNhbGwgemZpV2xhbkRlYXV0aCwgcmVhc29uOiVkXG4iLAorCQkJCXpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKKwkJCWlmICh6ZmlXbGFuRGVhdXRoKGRldiwgKHUxNl90ICopIHpkcGFybS0+c3RhX2FkZHIsCisJCQkJemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpICE9IDApCisJCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBkZWF1dGhlbmNhdGUgU1RBOiAlc1xuIiwKKwkJCQkJbWFjX2FkZHIpOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0VSUiAiRGVhdXRoZW50aWNhdGUgU1RBOiAlcyIKKwkJCQkJIndpdGggcmVhc29uIGNvZGU6ICVkXG4iLAorCQkJCQltYWNfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOworCQkJYnJlYWs7CisJCWNhc2UgTUxNRV9TVEFfRElTQVNTT0M6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIiAtLS0tLS0tQ2FsbCB6ZmlXbGFuRGVhdXRoLCByZWFzb246JWRcbiIsCisJCQkJemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOworCQkJaWYgKHpmaVdsYW5EZWF1dGgoZGV2LCAodTE2X3QgKikgemRwYXJtLT5zdGFfYWRkciwKKwkJCQl6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSkgIT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGRpc2Fzc29jaWF0ZSBTVEE6ICVzXG4iLAorCQkJCQltYWNfYWRkcik7CisJCQllbHNlCisJCQkJcHJpbnRrKEtFUk5fRVJSICJEaXNhc3NvY2lhdGUgU1RBOiAlcyIKKwkJCQkJIndpdGggcmVhc29uIGNvZGU6ICVkXG4iLAorCQkJCQltYWNfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIk1MTUUgY29tbWFuZDogMHglMDR4IG5vdCBzdXBwb3J0XG4iLAorCQkJCXpkcGFybS0+dS5tbG1lLmNtZCk7CisJCQlicmVhazsKKwkJfQogCi0gICAgICAgICAgICAvKiBUcmFuc2xhdGUgU1RBJ3MgYWRkcmVzcyAqLwotICAgICAgICAgICAgc3ByaW50ZihtYWNfYWRkciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwgemRwYXJtLT5zdGFfYWRkclswXSwgemRwYXJtLT5zdGFfYWRkclsxXSwKLSAgICAgICAgICAgICAgICB6ZHBhcm0tPnN0YV9hZGRyWzJdLCB6ZHBhcm0tPnN0YV9hZGRyWzNdLCB6ZHBhcm0tPnN0YV9hZGRyWzRdLCB6ZHBhcm0tPnN0YV9hZGRyWzVdKTsKKwkJYnJlYWs7CisJY2FzZSBaRF9DTURfU0NBTl9SRVE6CisJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX1NDQU5fUkVRXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVDoKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiIKKwkJCQkJIiBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVFxuIik7CiAKLSAgICAgICAgICAgIHN3aXRjaCh6ZHBhcm0tPnUubWxtZS5jbWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBNTE1FX1NUQV9ERUFVVEg6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50aygiIC0tLS0tLS1DYWxsIHpmaVdsYW5EZWF1dGgsIHJlYXNvbjolZFxuIix6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKHpmaVdsYW5EZWF1dGgoZGV2LCAodTE2X3QqKSB6ZHBhcm0tPnN0YV9hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZGVhdXRoZW5jYXRlIFNUQTogJXNcbiIsIG1hY19hZGRyKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJEZWF1dGhlbnRpY2F0ZSBTVEE6ICVzIHdpdGggcmVhc29uIGNvZGU6ICVkXG4iLCBtYWNfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJLyogQ29weSB0aGUgV1BBIElFCisJCSogem1fbXNnMV9tbShaTV9MVl8wLCAiQ1dZIC0gd3BhaWUgTGVuZ3RoIDogIiwKKwkJKiB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CisJCSovCisJCXByaW50ayhLRVJOX0VSUiAid3BhaWUgTGVuZ3RoIDogJSBkXG4iLAorCQkJCQkJemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworCQlpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSB7CisJCQkvKiBBUCBNb2RlICovCisJCQl6ZmlXbGFuU2V0V3BhSWUoZGV2LCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsCisJCQkJCXpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKKwkJfSBlbHNlIHsKKwkJCW1hY3AtPnN1cExlbiA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuOworCQkJbWVtY3B5KG1hY3AtPnN1cEllLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsCisJCQkJemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworCQl9CisJCXpmaVdsYW5TZXRXcGFTdXBwb3J0KGRldiwgMSk7CisJCS8qIHpmaVdsYW5TZXRXcGFJZShkZXYsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwKKwkJKiB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CisJCSovCisJCWludCBpaTsKKwkJdThfdCBsZW4gPSB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKKwkJdThfdCAqd3BhaWUgPSAodThfdCAqKXpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YTsKIAotICAgICAgICAgICAgICAgIGNhc2UgTUxNRV9TVEFfRElTQVNTT0M6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50aygiIC0tLS0tLS1DYWxsIHpmaVdsYW5EZWF1dGgsIHJlYXNvbjolZFxuIix6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKHpmaVdsYW5EZWF1dGgoZGV2LCAodTE2X3QqKSB6ZHBhcm0tPnN0YV9hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZGlzYXNzb2NpYXRlIFNUQTogJXNcbiIsIG1hY19hZGRyKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJEaXNhc3NvY2lhdGUgU1RBOiAlcyB3aXRoIHJlYXNvbiBjb2RlOiAlZFxuIiwgbWFjX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCXByaW50ayhLRVJOX0VSUiAid2QtPmFwLndwYUxlbiA6ICUgZFxuIiwgbGVuKTsKIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTUxNRSBjb21tYW5kOiAweCUwNHggbm90IHN1cHBvcnRcbiIsIHpkcGFybS0+dS5tbG1lLmNtZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCQkvKiBEVU1QIFdQQSBJRSAqLworCQlmb3IoaWkgPSAwOyBpaSA8IGxlbjspIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHdwYWllW2lpXSk7CiAKLSAgICAgICAgICAgIGJyZWFrOworCQkJaWYoKCsraWkgJSAxNikgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CisJCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCi0gICAgICAgIGNhc2UgWkRfQ01EX1NDQU5fUkVROgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0NBTl9SRVFcbiIpOwotICAgICAgICAgICAgYnJlYWs7CisJCS8qICNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQKKwkJKiBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisJCSogey8vIFVwZGF0ZSBCZWFjb24gRklGTyBpbiB0aGUgbmV4dCBUQlRULgorCQkqICAgICBtZW1jcHkoJm1XUEFJZSwgcFNldHRpbmctPldQQUllLCBwU2V0dGluZy0+V1BBSWVMZW4pOworCQkqICAgICBwcmludGsoS0VSTl9FUlIgIkNvcHkgV1BBIElFIGludG8gbVdQQUllXG4iKTsKKwkJKiB9CisJCSogI2VuZGlmCisJCSovCisJCWJyZWFrOwogCi0gICAgICAgIGNhc2UgWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlQ6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UXG4iKTsKKwkvKiAjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUICovCisJY2FzZSBaRF9DTURfR0VUX1RTQzoKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsIDogWkRfQ01EX0dFVF9UU0NcbiIpOworCQlicmVhazsKKwkvKiAjZW5kaWYgKi8KIAotICAgICAgICAgICAgLyogQ29weSB0aGUgV1BBIElFICovCi0gICAgICAgICAgICAvL3ptX21zZzFfbW0oWk1fTFZfMCwgIkNXWSAtIHdwYWllIExlbmd0aCA6ICIsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid3BhaWUgTGVuZ3RoIDogJWRcbiIsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKLSAgICAgICAgICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtYWNwLT5zdXBMZW4gPSB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKLSAgICAgICAgICAgICAgICBtZW1jcHkobWFjcC0+c3VwSWUsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAxKTsKLSAgICAgICAgICAgIC8vemZpV2xhblNldFdwYUllKGRldiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGlpOwotICAgICAgICAgICAgICAgIHU4X3QgbGVuID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW47Ci0gICAgICAgICAgICAgICAgdThfdCAqd3BhaWUgPSAodThfdCAqKXpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGwgZGVmYXVsdCA6IDB4JTA0eFxuIiwKKwkJCXpkcGFybS0+Y21kKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQogCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+YXAud3BhTGVuOiAlZFxuIiwgbGVuKTsKLQotICAgICAgICAgICAgICAgIC8qIERVTVAgV1BBIElFICovCi0gICAgICAgICAgICAgICAgZm9yKGlpID0gMDsgaWkgPCBsZW47KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgd3BhaWVbaWldKTsKLQotICAgICAgICAgICAgICAgICAgICBpZigoKytpaSAlIDE2KSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7Ci0gICAgICAgICAgICB9Ci0KLS8vICAgICAgICAgICAgI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAotICAgICAgICAgICAgLy9pZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCi0gICAgICAgICAgICAvL3svLyBVcGRhdGUgQmVhY29uIEZJRk8gaW4gdGhlIG5leHQgVEJUVC4KLSAgICAgICAgICAgIC8vICAgIG1lbWNweSgmbVdQQUllLCBwU2V0dGluZy0+V1BBSWUsIHBTZXR0aW5nLT5XUEFJZUxlbik7Ci0gICAgICAgICAgICAvLyAgICBwcmludGsoS0VSTl9FUlIgIkNvcHkgV1BBIElFIGludG8gbVdQQUllXG4iKTsKLSAgICAgICAgICAgIC8vfQotLy8gICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotCi0vLyAgICAgICAgI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAotICAgICAgICBjYXNlIFpEX0NNRF9HRVRfVFNDOgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfR0VUX1RTQ1xuIik7Ci0gICAgICAgICAgICBicmVhazsKLS8vICAgICAgICAjZW5kaWYKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsIGRlZmF1bHQ6IDB4JTA0eFxuIiwgemRwYXJtLT5jbWQpOwotICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIFpNX0VOQUJMRV9DRU5DCiBpbnQgdXNiZHJ2X2NlbmNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHp5ZGFzX2NlbmNfcGFyYW0gKnpkcGFybSkKIHsKLSAgICAvL3N0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICBzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87Ci0gICAgdTE2X3QgYXBJZDsKLSAgICB1OF90IGJjX2FkZHJbNl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICBpbnQgaWk7CisJLyogc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OyAqLworCXN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKwl1MTZfdCBhcElkOworCXU4X3QgYmNfYWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCWludCByZXQgPSAwOworCWludCBpaTsKIAotICAgIC8qIEdldCB0aGUgQVAgSWQgKi8KLSAgICBhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOworCS8qIEdldCB0aGUgQVAgSWQgKi8KKwlhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOwogCi0gICAgaWYgKGFwSWQgPT0gMHhmZmZmKQotICAgIHsKLSAgICAgICAgYXBJZCA9IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGFwSWQgPSBhcElkKzE7Ci0gICAgfQorCWlmIChhcElkID09IDB4ZmZmZikgeworCQlhcElkID0gMDsKKwl9IGVsc2UgeworCQlhcElkID0gYXBJZCArIDE7CisJfQogCi0gICAgc3dpdGNoICh6ZHBhcm0tPmNtZCkKLSAgICB7Ci0gICAgICAgIGNhc2UgWk1fQ01EX0NFTkNfU0VUQ0VOQzoKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfU0VUQ0VOQ1xuIik7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImxlbmd0aDogJWRcbiIsIHpkcGFybS0+bGVuKTsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAicG9saWN5OiAlZFxuIiwgemRwYXJtLT51LmluZm8uY2VuY19wb2xpY3kpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fQ01EX0NFTkNfU0VUS0VZOgotICAgICAgICAgICAgLy9yZXQgPSB3YWlfaW9jdGxfc2V0a2V5KHZhcCwgaW9jdGxfbXNnKTsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfU0VUS0VZXG4iKTsKKwlzd2l0Y2ggKHpkcGFybS0+Y21kKSB7CisJY2FzZSBaTV9DTURfQ0VOQ19TRVRDRU5DOgorCQlwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1NFVENFTkNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImxlbmd0aCA6ICUgZFxuIiwgemRwYXJtLT5sZW4pOworCQlwcmludGsoS0VSTl9FUlIgInBvbGljeSA6ICUgZFxuIiwgemRwYXJtLT51LmluZm8uY2VuY19wb2xpY3kpOworCQlicmVhazsKKwljYXNlIFpNX0NNRF9DRU5DX1NFVEtFWToKKwkJLyogcmV0ID0gd2FpX2lvY3RsX3NldGtleSh2YXAsIGlvY3RsX21zZyk7ICovCisJCXByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfU0VUS0VZXG4iKTsKIAotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJNQUMgYWRkcmVzcz0gIik7Ci0gICAgICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IDY7IGlpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyW2lpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTUFDIGFkZHJlc3MgPSAiKTsKKwkJZm9yIChpaSA9IDA7IGlpIDwgNjsgaWkrKykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwKKwkJCQl6ZHBhcm0tPnUuY3J5cHQuc3RhX2FkZHJbaWldKTsKKwkJfQorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiS2V5IEluZGV4OiAlZFxuIiwgemRwYXJtLT51LmNyeXB0LmtleWlkKTsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRW5jcnlwdGlvbiBrZXk9ICIpOwotICAgICAgICAgICAgZm9yKGlpID0gMDsgaWkgPCAxNjsgaWkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiS2V5IEluZGV4IDogJSBkXG4iLCB6ZHBhcm0tPnUuY3J5cHQua2V5aWQpOworCQlwcmludGsoS0VSTl9FUlIgIkVuY3J5cHRpb24ga2V5ID0gIik7CisJCWZvciAoaWkgPSAwOyBpaSA8IDE2OyBpaSsrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7CisJCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCi0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIk1JQyBrZXk9ICIpOwotICAgICAgICAgICAgZm9yKGlpID0gMTY7IGlpIDwgWk1fQ0VOQ19LRVlfU0laRTsgaWkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTUlDIGtleSA9ICIpOworCQlmb3IoaWkgPSAxNjsgaWkgPCBaTV9DRU5DX0tFWV9TSVpFOyBpaSsrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7CisJCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCi0gICAgICAgICAgICAvKiBTZXQgdXAga2V5IGluZm9ybWF0aW9uICovCi0gICAgICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IFpNX0NFTkNfS0VZX1NJWkU7Ci0gICAgICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gemRwYXJtLT51LmNyeXB0LmtleWlkOwotICAgICAgICAgICAga2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfQVVUSEVOVElDQVRPUiB8IFpNX0tFWV9GTEFHX0NFTkM7Ci0gICAgICAgICAgICBrZXlJbmZvLmtleSA9IHpkcGFybS0+dS5jcnlwdC5rZXk7Ci0gICAgICAgICAgICBrZXlJbmZvLm1hY0FkZHIgPSAodTE2X3QgKil6ZHBhcm0tPnUuY3J5cHQuc3RhX2FkZHI7CisJCS8qIFNldCB1cCBrZXkgaW5mb3JtYXRpb24gKi8KKwkJa2V5SW5mby5rZXlMZW5ndGggPSBaTV9DRU5DX0tFWV9TSVpFOworCQlrZXlJbmZvLmtleUluZGV4ID0gemRwYXJtLT51LmNyeXB0LmtleWlkOworCQlrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19BVVRIRU5USUNBVE9SIHwgWk1fS0VZX0ZMQUdfQ0VOQzsKKwkJa2V5SW5mby5rZXkgPSB6ZHBhcm0tPnUuY3J5cHQua2V5OworCQlrZXlJbmZvLm1hY0FkZHIgPSAodTE2X3QgKil6ZHBhcm0tPnUuY3J5cHQuc3RhX2FkZHI7CiAKLSAgICAgICAgICAgIC8qIElkZW50aWZ5IHRoZSBNQUMgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLwotICAgICAgICAgICAgaWYgKG1lbWNtcCh6ZHBhcm0tPnUuY3J5cHQuc3RhX2FkZHIsIGJjX2FkZHIsIHNpemVvZihiY19hZGRyKSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfR0s7Ci0gICAgICAgICAgICAgICAga2V5SW5mby52YXBJZCA9IGFwSWQ7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGtleUluZm8udmFwQWRkciwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19QSzsKLSAgICAgICAgICAgIH0KKwkJLyogSWRlbnRpZnkgdGhlIE1BQyBhZGRyZXNzIGluZm9ybWF0aW9uICovCisJCWlmIChtZW1jbXAoemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyLCBiY19hZGRyLAorCQkJCXNpemVvZihiY19hZGRyKSkgPT0gMCkgeworCQkJa2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX0dLOworCQkJa2V5SW5mby52YXBJZCA9IGFwSWQ7CisJCQltZW1jcHkoa2V5SW5mby52YXBBZGRyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CisJCQlrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfUEs7CisJCX0KIAotICAgICAgICAgICAgemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOworCQl6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX0NNRF9DRU5DX1JFS0VZOgotICAgICAgICAgICAgLy9yZXQgPSB3YWlfaW9jdGxfcmVrZXkodmFwLCBpb2N0bF9tc2cpOwotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaTV9DTURfQ0VOQ19SRUtFWVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldCA9IC1FT1BOT1RTVVBQOwotICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOworCWNhc2UgWk1fQ01EX0NFTkNfUkVLRVk6CisJCS8qIHJldCA9IHdhaV9pb2N0bF9yZWtleSh2YXAsIGlvY3RsX21zZyk7ICovCisJCXByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfUkVLRVlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQogCi0gICAgfQorCS8qIGlmIChyZXR2ID09IEVORVRSRVNFVCkgKi8KKwkvKiByZXR2ID0gSVNfVVBfQVVUTyh2YXApID8gaWVlZTgwMjExX29wZW4odmFwLT5pdl9kZXYpIDogMDsgKi8KIAotICAgIC8vaWYgKHJldHYgPT0gRU5FVFJFU0VUKQotICAgIC8vICAgIHJldHYgPSBJU19VUF9BVVRPKHZhcCkgPyBpZWVlODAyMTFfb3Blbih2YXAtPml2X2RldikgOiAwOwotCi0gICAgcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQotI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZW5kaWYgLyogWk1fRU5BQkxFX0NFTkMgKi8KKwogaW50IHVzYmRydl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKLS8vICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcDsKLS8vICAgIHZvaWQgKnJlZ3A7Ci0gICAgc3RydWN0IHpkYXBfaW9jdGwgemRyZXE7Ci0gICAgc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopaWZyOwotICAgIHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0gemRwYXJtOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3A7ICovCisJLyogdm9pZCAqcmVncDsgKi8KKwlzdHJ1Y3QgemRhcF9pb2N0bCB6ZHJlcTsKKwlzdHJ1Y3QgaXdyZXEgKndycSA9IChzdHJ1Y3QgaXdyZXEgKilpZnI7CisJc3RydWN0IGF0aHJfd2xhbl9wYXJhbSB6ZHBhcm07CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaW50IGVyciA9IDA7Ci0gICAgaW50IGNoYW5nZWQgPSAwOworCWludCBlcnIgPSAwOworCWludCBjaGFuZ2VkID0gMDsKIAotLy8gICAgcmVncCA9IG1hY3AtPnJlZ3A7CisJLyogcmVncCA9IG1hY3AtPnJlZ3A7ICovCiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBzd2l0Y2ggKGNtZCkKLSAgICB7Ci0gICAgICAgICAgICBjYXNlIFNJT0NHSVdOQU1FOgotICAgICAgICAgICAgc3RyY3B5KHdycS0+dS5uYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKLSAgICAgICAgICAgIGJyZWFrOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR0lXTkFNRToKKwkJc3RyY3B5KHdycS0+dS5uYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXQVA6CisJCWVyciA9IHVzYmRydndleHRfZ2l3YXAoZGV2LCBOVUxMLCAmd3JxLT51LmFwX2FkZHIsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NTSVdBUDoKKwkJZXJyID0gdXNiZHJ2d2V4dF9zaXdhcChkZXYsIE5VTEwsICZ3cnEtPnUuYXBfYWRkciwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV01PREU6CisJCWVyciA9IHVzYmRydndleHRfZ2l3bW9kZShkZXYsIE5VTEwsICZ3cnEtPnUubW9kZSwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJV0VTU0lEOgorCQlwcmludGsoS0VSTl9FUlIgIkNXWSAtIHVzYmRydndleHRfc2l3ZXNzaWRcbiIpOworCQkvKiBlcnIgPSB1c2JkcnZfaW9jdGxfc2V0ZXNzaWQoZGV2LCAmd3JxLT51LmVzc2lkKTsgKi8KKwkJZXJyID0gdXNiZHJ2d2V4dF9zaXdlc3NpZChkZXYsIE5VTEwsICZ3cnEtPnUuZXNzaWQsIE5VTEwpOwogCi0gICAgICAgIGNhc2UgU0lPQ0dJV0FQOgotICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9naXdhcChkZXYsIE5VTEwsICZ3cnEtPnUuYXBfYWRkciwgTlVMTCk7Ci0gICAgICAgICAgICBicmVhazsKKwkJaWYgKCFlcnIpCisJCQljaGFuZ2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXRVNTSUQ6CisJCWVyciA9IHVzYmRydndleHRfZ2l3ZXNzaWQoZGV2LCBOVUxMLCAmd3JxLT51LmVzc2lkLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lXUlRTOgorCQllcnIgPSB1c2JkcnZfaW9jdGxfc2V0cnRzKGRldiwgJndycS0+dS5ydHMpOworCQlpZiAoISBlcnIpCisJCQljaGFuZ2VkID0gMTsKKwkJYnJlYWs7CisJLyogc2V0X2F1dGggKi8KKwljYXNlIFNJT0NJV0ZJUlNUUFJJViArIDB4MjogeworCQkvKiBwcmludGsoIkNXWSAtIFNJT0NJV0ZJUlNUUFJJViArIDB4MihzZXRfYXV0aClcbiIpOyAqLworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCWVyciA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisJCWludCB2YWwgPSAqKChpbnQgKikgd3JxLT51Lm5hbWUpOworCQlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIHZhbCk7CiAKKwkJCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkgeworCQkJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJCQkJemZpV2xhbkVuYWJsZShkZXYpOworCQkJfQogCi0gICAgICAgIGNhc2UgU0lPQ1NJV0FQOgotICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9zaXdhcChkZXYsIE5VTEwsICZ3cnEtPnUuYXBfYWRkciwgTlVMTCk7Ci0gICAgICAgICAgICBicmVhazsKKwkJCWVyciA9IDA7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0KKwkJYnJlYWs7CisJLyogZ2V0X2F1dGggKi8KKwljYXNlIFNJT0NJV0ZJUlNUUFJJViArIDB4MzogeworCQlpbnQgQXV0aE1vZGUgPSBaTV9BVVRIX01PREVfT1BFTjsKIAorCQkvKiBwcmludGsoIkNXWSAtIFNJT0NJV0ZJUlNUUFJJViArIDB4MyhnZXRfYXV0aClcbiIpOyAqLwogCi0gICAgICAgIGNhc2UgU0lPQ0dJV01PREU6Ci0gICAgICAgICAgICBlcnIgPSB1c2JkcnZ3ZXh0X2dpd21vZGUoZGV2LCBOVUxMLCAmd3JxLT51Lm1vZGUsIE5VTEwpOwotICAgICAgICAgICAgYnJlYWs7CisJCWlmICh3cnEtPnUuZGF0YS5wb2ludGVyKSB7CisJCQl3cnEtPnUuZGF0YS5mbGFncyA9IDE7CiAKKwkJCUF1dGhNb2RlID0gemZpV2xhblF1ZXJ5QXV0aGVudGljYXRpb25Nb2RlKGRldiwgMCk7CisJCQlpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX09QRU4pIHsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMjsKIAotICAgICAgICBjYXNlIFNJT0NTSVdFU1NJRDoKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ1dZIC0gdXNiZHJ2d2V4dF9zaXdlc3NpZFxuIik7Ci0gICAgICAgICAgICAvL2VyciA9IHVzYmRydl9pb2N0bF9zZXRlc3NpZChkZXYsICZ3cnEtPnUuZXNzaWQpOwotICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9zaXdlc3NpZChkZXYsIE5VTEwsICZ3cnEtPnUuZXNzaWQsIE5VTEwpOworCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKKwkJCQkJIm9wZW4gc3lzdGVtIiwgMTIpKSB7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9TSEFSRURfS0VZKQl7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTE7CiAKLSAgICAgICAgICAgIGlmICghIGVycikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKLSAgICAgICAgICAgIGJyZWFrOworCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKKwkJCQkJInNoYXJlZCBrZXkiLCAxMSkpIHsKKwkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9BVVRPKSB7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTA7CiAKKwkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsCisJCQkJCSJhdXRvIG1vZGUiLCAxMCkpIHsKKwkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJfQorCQlicmVhazsKKwkvKiBkZWJ1ZyBjb21tYW5kICovCisJY2FzZSBaREFQSU9DVEw6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmemRyZXEsIGlmci0+aWZyX2RhdGEsIHNpemVvZih6ZHJlcSkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmRydiA6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CiAKLSAgICAgICAgY2FzZSBTSU9DR0lXRVNTSUQ6Ci0gICAgICAgICAgICBlcnIgPSB1c2JkcnZ3ZXh0X2dpd2Vzc2lkKGRldiwgTlVMTCwgJndycS0+dS5lc3NpZCwgTlVMTCk7Ci0gICAgICAgICAgICBicmVhazsKKwkJLyogcHJpbnRrKEtFUk5fV0FSTklORworCQkqICJ1c2JkcnYgOiBjbWQgPSAlIDJ4LCByZWcgPSAweCUwNGx4LAorCQkqdmFsdWUgPSAweCUwOGx4XG4iLAorCQkqIHpkcmVxLmNtZCwgemRyZXEuYWRkciwgemRyZXEudmFsdWUpOworCQkqLworCQl6ZkxueFByaXZhdGVJb2N0bChkZXYsICZ6ZHJlcSk7CiAKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBaRF9JT0NUTF9XUEE6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmemRwYXJtLCBpZnItPmlmcl9kYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0pKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnYgOiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCi0gICAgICAgIGNhc2UgU0lPQ1NJV1JUUzoKKwkJdXNiZHJ2X3dwYV9pb2N0bChkZXYsICZ6ZHBhcm0pOworCQllcnIgPSAwOworCQlicmVhazsKKwljYXNlIFpEX0lPQ1RMX1BBUkFNOiB7CisJCWludCAqcDsKKwkJaW50IG9wOworCQlpbnQgYXJnOwogCi0gICAgICAgICAgICBlcnIgPSB1c2JkcnZfaW9jdGxfc2V0cnRzKGRldiwgJndycS0+dS5ydHMpOwotICAgICAgICAgICAgaWYgKCEgZXJyKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwotICAgICAgICAgICAgYnJlYWs7CisJCS8qIFBvaW50IHRvIHRoZSBuYW1lIGZpZWxkIGFuZCByZXRyaWV2ZSB0aGUKKwkJKiBvcCBhbmQgYXJnIGVsZW1lbnRzLgorCQkqLworCQlwID0gKGludCAqKXdycS0+dS5uYW1lOworCQlvcCA9ICpwKys7CisJCWFyZyA9ICpwOwogCisJCWlmIChvcCA9PSBaRF9QQVJBTV9ST0FNSU5HKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSIqKioqKioqKioqKioqWkRfUEFSQU1fUk9BTUlORyA6ICUgZFxuIiwgYXJnKTsKKwkJCS8qIG1hY3AtPmNhcmRTZXR0aW5nLmFwX3NjYW49KFU4KWFyZzsgKi8KKwkJfQorCQlpZiAob3AgPT0gWkRfUEFSQU1fUFJJVkFDWSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJaRF9JT0NUTF9QUklWQUNZIDogIik7CiAKLQkJY2FzZSBTSU9DSVdGSVJTVFBSSVYgKyAweDI6IC8qIHNldF9hdXRoICovCi0JCXsKLQkJCS8vcHJpbnRrKCJDV1kgLSBTSU9DSVdGSVJTVFBSSVYgKyAweDIgKHNldF9hdXRoKVxuIik7Ci0JCQlpZiAoISBjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJewotCQkJCWVyciA9IC1FUEVSTTsKKwkJCS8qIFR1cm4gb24gdGhlIHByaXZhY3kgaW52b2tlIGZsYWcgKi8KKwkJCWlmIChhcmcpIHsKKwkJCQkvKiBtQ2FwWzBdIHw9IENBUF9QUklWQUNZOyAqLworCQkJCS8qIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF0gPSAxOyAqLworCQkJCXByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKKworCQkJfSBlbHNlIHsKKwkJCQkvKiBtQ2FwWzBdICY9IH5DQVBfUFJJVkFDWTsgKi8KKwkJCQkvKiBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdID0gMDsgKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworCQkJfQorCQkJLyogY2hhbmdlZD0xOyAqLworCQl9CisJCWlmIChvcCA9PSBaRF9QQVJBTV9XUEEpIHsKKworCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX1dQQSA6ICIpOworCisJCWlmIChhcmcpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKKworCQkJaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgIT0gWk1fTU9ERV9BUCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiU3RhdGlvbiBNb2RlXG4iKTsKKwkJCQkvKiB6ZmlXbGFuUXVlcnlXcGFJZShkZXYsICh1OF90ICopCisJCQkJCSZ3cGFJZSwgJndwYWxlbik7ICovCisJCQkJLyogcHJpbnRrKCJ3cGFJZSA6ICUgMngsICUgMngsICUgMnhcbiIsCisJCQkJCXdwYUllWzIxXSwgd3BhSWVbMjJdLCB3cGFJZVsyM10pOyAqLworCQkJCS8qIHByaW50aygicnNuSWUgOiAlIDJ4LCAlIDJ4LCAlIDJ4XG4iLAorCQkJCQl3cGFJZVsxN10sIHdwYUllWzE4XSwgd3BhSWVbMTldKTsgKi8KKwkJCQlpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSAmJgorCQkJCQkobWFjcC0+c3VwSWVbMjJdID09IDB4ZjIpICYmCisJCQkJCShtYWNwLT5zdXBJZVsyM10gPT0gMHgyKSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0tcbiIpOworCQkJCS8qIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLOyAqLworCQkJCS8qIHdkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0s7ICovCisJCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsCisJCQkJCQkJWk1fQVVUSF9NT0RFX1dQQVBTSyk7CisJCQkJfSBlbHNlIGlmICgobWFjcC0+c3VwSWVbMjFdID09IDB4NTApICYmCisJCQkJCShtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikgJiYKKwkJCQkJKG1hY3AtPnN1cEllWzIzXSA9PSAweDEpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVxuIik7CisJCQkJLyogd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEE7ICovCisJCQkJLyogd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTsgKi8KKwkJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwKKwkJCQkJCQlaTV9BVVRIX01PREVfV1BBKTsKKwkJCQkJfSBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKKwkJCQkJCShtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykgJiYKKwkJCQkJCShtYWNwLT5zdXBJZVsxOV0gPT0gMHgyKSkKKwkJCQkJeworCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTS1xuIik7CisJCQkJLyogd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLOyAqLworCQkJCS8qIHdkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLOyAqLworCQkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LAorCQkJCVpNX0FVVEhfTU9ERV9XUEEyUFNLKTsKKwkJCX0gZWxzZSBpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpICYmCisJCQkJKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgorCQkJCShtYWNwLT5zdXBJZVsxOV0gPT0gMHgxKSkKKwkJCQl7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJcbiIpOworCQkJCS8qIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsgKi8KKwkJCQkvKiB3ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsgKi8KKwkJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwKKwkJCQkJCQlaTV9BVVRIX01PREVfV1BBMik7CisJCQl9CisJCQkvKiBXUEEgb3IgV1BBUFNLICovCisJCQlpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSB8fAorCQkJCShtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikpIHsKKwkJCQlpZiAobWFjcC0+c3VwSWVbMTFdID09IDB4MikgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVBcbiIpOworCQkJCS8qIHdkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOyAqLworCQkJCS8qIHdkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7ICovCisJCQkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fVEtJUCk7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOyAqLworCQkJCS8qIHdkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsgKi8KKwkJCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOworCQkJCX0KKwkJCX0KKwkJCS8vV1BBMiBvciBXUEEyUFNLCisJCQlpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpIHx8CisJCQkJKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSkgeworCQkJCWlmIChtYWNwLT5zdXBJZVsxM10gPT0gMHgyKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUFxuIik7CisJCQkJLyogd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7ICovCisJCQkJLyogd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsgKi8KKwkJCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9US0lQKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFU1xuIik7CisJCQkJLyogd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsgKi8KKwkJCQkvKiB3ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7ICovCisJCQkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fQUVTKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXpmaVdsYW5TZXRXcGFTdXBwb3J0KGRldiwgMSk7CisJCX0gZWxzZSB7CisJCQkvKiBSZXNldCB0aGUgV1BBIHJlbGF0ZWQgdmFyaWFibGVzICovCisJCQlwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworCisJCQl6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDApOworCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9PUEVOKTsKKwkJCXpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRCk7CisKKwkJCS8qIE5vdyB3ZSBvbmx5IHNldCB0aGUgbGVuZ3RoIGluIHRoZSBXUEEgSUUKKwkJCSogZmllbGQgdG8gemVyby4KKwkJCSptYWNwLT5jYXJkU2V0dGluZy5XUEFJZVsxXSA9IDA7CisJCQkqLworCQkJfQorCQl9CisKKwkJaWYgKG9wID09IFpEX1BBUkFNX0NPVU5URVJNRUFTVVJFUykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIioqKioqKioqKioqKioqKipaRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVMgOiAiKTsKKworCQkJaWYoYXJnKSB7CisJCQkJLyogICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MTsgKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisJCQl9IGVsc2UgeworCQkJCS8qICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTA7ICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKKwkJCX0KKwkJfQorCQlpZiAob3AgPT0gWkRfUEFSQU1fRFJPUFVORU5DUllQVEVEKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRCA6ICIpOworCisJCQlpZihhcmcpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7CisJCQl9CisJCX0KKwkJaWYgKG9wID09IFpEX1BBUkFNX0FVVEhfQUxHUykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9BVVRIX0FMR1MgOiAiKTsKKworCQkJaWYgKGFyZyA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJPUEVOX1NZU1RFTVxuIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiU0hBUkVEX0tFWVxuIik7CisJCQl9CisJCX0KKwkJaWYgKG9wID09IFpEX1BBUkFNX1dQU19GSUxURVIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fV1BTX0ZJTFRFUiA6ICIpOworCisJCQlpZiAoYXJnKSB7CisJCQkJLyogICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MTsgKi8KKwkJCQltYWNwLT5mb3J3YXJkTWdtdCA9IDE7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0wOyAqLworCQkJCW1hY3AtPmZvcndhcmRNZ210ID0gMDsKKwkJCQlwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworCQkJfQorCQl9CisJfQorCQllcnIgPSAwOworCQlicmVhazsKKwljYXNlIFpEX0lPQ1RMX0dFVFdQQUlFOiB7CisJCXN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUgcmVxX3dwYWllOworCQl1MTZfdCBhcElkLCBpLCBqOworCisJCS8qIEdldCB0aGUgQVAgSWQgKi8KKwkJYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKKworCQlpZiAoYXBJZCA9PSAweGZmZmYpIHsKKwkJCWFwSWQgPSAwOworCQl9IGVsc2UgeworCQkJYXBJZCA9IGFwSWQgKyAxOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXFfd3BhaWUsIGlmci0+aWZyX2RhdGEsCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2IDogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgWk1fT0FMX01BWF9TVEFfU1VQUE9SVDsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgSUVFRTgwMjExX0FERFJfTEVOOyBqKyspIHsKKwkJCQlpZiAobWFjcC0+c3Rhd3BhaWVbaV0ud3BhX21hY2FkZHJbal0gIT0KKwkJCQkJCXJlcV93cGFpZS53cGFfbWFjYWRkcltqXSkKIAkJCQlicmVhazsKIAkJCX0KLQkJCXsKLQkJCQlpbnQgdmFsID0gKiggKGludCAqKSB3cnEtPnUubmFtZSApOwotCQkJCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDIpKQotCQkJCXsKLQkJCQkJZXJyID0gLUVJTlZBTDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCB2YWwpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0JCQkJCWVyciA9IDA7Ci0JCQkJCWNoYW5nZWQgPSAxOwotCQkJCX0KLQkJCX0KLQkJfQorCQkJaWYgKGogPT0gNikKIAkJCWJyZWFrOwotCi0JCWNhc2UgU0lPQ0lXRklSU1RQUklWICsgMHgzOiAvKiBnZXRfYXV0aCAqLwotCQl7Ci0JCSAgICBpbnQgQXV0aE1vZGUgPSBaTV9BVVRIX01PREVfT1BFTjsKLQotCQkJLy9wcmludGsoIkNXWSAtIFNJT0NJV0ZJUlNUUFJJViArIDB4MyAoZ2V0X2F1dGgpXG4iKTsKLQotCQkJaWYgKHdycS0+dS5kYXRhLnBvaW50ZXIpCi0JCQl7Ci0JCQkJd3JxLT51LmRhdGEuZmxhZ3MgPSAxOwotCi0JCQkJQXV0aE1vZGUgPSB6ZmlXbGFuUXVlcnlBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCAwKTsKLQkJCQlpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX09QRU4pCi0JCQkJewotCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMjsKLQotCQkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJvcGVuIHN5c3RlbSIsIDEyKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSBpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1NIQVJFRF9LRVkpCi0JCQkJewotCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMTsKLQotCQkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJzaGFyZWQga2V5IiwgMTEpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIGlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfQVVUTykKLQkJCQl7Ci0JCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDEwOwotCi0JCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgImF1dG8gbW9kZSIsIDEwKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQotCQkJfQogCQl9Ci0JCQlicmVhazsKIAorCQlpZiAoaSA8IFpNX09BTF9NQVhfU1RBX1NVUFBPUlQpIHsKKwkJLyogcHJpbnRrKCJaRF9JT0NUTF9HRVRXUEFJRSAtIHN0YSBpbmRleCA9ICUgZFxuIiwgaSk7ICovCisJCW1lbWNweShyZXFfd3BhaWUud3BhX2llLCBtYWNwLT5zdGF3cGFpZVtpXS53cGFfaWUsCisJCQkJCQkJSUVFRTgwMjExX01BWF9JRV9TSVpFKTsKKwkJfQogCi0gICAgICAgIGNhc2UgWkRBUElPQ1RMOiAgICAvL2RlYnVnIGNvbW1hbmQKLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmemRyZXEsIGlmci0+aWZyX2RhdGEsIHNpemVvZiAoemRyZXEpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydjogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgfQorCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZyZXFfd3BhaWUsCisJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUpKSkgeworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CiAKLSAgICAgICAgICAgIC8vcHJpbnRrKEtFUk5fREVCVUcgInVzYmRydjogY21kPSUyeCwgcmVnPTB4JTA0bHgsIHZhbHVlPTB4JTA4bHhcbiIsCi0gICAgICAgICAgICAvLyAgICAgICAgemRyZXEuY21kLCB6ZHJlcS5hZGRyLCB6ZHJlcS52YWx1ZSk7CisJCWVyciA9IDA7CisJCWJyZWFrOworCSNpZmRlZiBaTV9FTkFCTEVfQ0VOQworCWNhc2UgWk1fSU9DVExfQ0VOQzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtYWNwLT56ZF93cGFfcmVxLCBpZnItPmlmcl9kYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0pKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnYgOiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCi0JCQl6ZkxueFByaXZhdGVJb2N0bChkZXYsICZ6ZHJlcSk7CisJCXVzYmRydl9jZW5jX2lvY3RsKGRldiwKKwkJCQkoc3RydWN0IHp5ZGFzX2NlbmNfcGFyYW0gKikmbWFjcC0+emRfd3BhX3JlcSk7CisJCWVyciA9IDA7CisJCWJyZWFrOworCSNlbmRpZiAvKiBaTV9FTkFCTEVfQ0VOQyAqLworCWRlZmF1bHQ6CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CiAKLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpEX0lPQ1RMX1dQQToKLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmemRwYXJtLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGF0aHJfd2xhbl9wYXJhbSkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2OiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVzYmRydl93cGFfaW9jdGwoZGV2LCAmemRwYXJtKTsKLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpEX0lPQ1RMX1BBUkFNOgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgKnA7Ci0gICAgICAgICAgICBpbnQgb3A7Ci0gICAgICAgICAgICBpbnQgYXJnOwotCi0gICAgICAgICAgICAvKiBQb2ludCB0byB0aGUgbmFtZSBmaWVsZCBhbmQgcmV0cmlldmUgdGhlCi0gICAgICAgICAgICAgKiBvcCBhbmQgYXJnIGVsZW1lbnRzLiAgICAgICAgICAqLwotICAgICAgICAgICAgcCA9IChpbnQgKil3cnEtPnUubmFtZTsKLSAgICAgICAgICAgIG9wID0gKnArKzsKLSAgICAgICAgICAgIGFyZyA9ICpwOwotCi0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9ST0FNSU5HKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiKioqKioqKioqKioqKiBaRF9QQVJBTV9ST0FNSU5HOiAlZFxuIiwgYXJnKTsKLSAgICAgICAgICAgICAgICAvL21hY3AtPmNhcmRTZXR0aW5nLmFwX3NjYW49KFU4KWFyZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX1BSSVZBQ1kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9JT0NUTF9QUklWQUNZOiAiKTsKLQotICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gdGhlIHByaXZhY3kgaW52b2tlIGZsYWcgKi8KLSAgICAgICAgICAgICAgICBpZihhcmcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgIG1DYXBbMF0gfD0gQ0FQX1BSSVZBQ1k7Ci0gICAgICAgICAgICAgICAgLy8gICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKLQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgIG1DYXBbMF0gJj0gfkNBUF9QUklWQUNZOwotICAgICAgICAgICAgICAgIC8vICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGFuZ2VkPTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9XUEEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUEE6ICIpOwotCi0gICAgICAgICAgICAgICAgaWYoYXJnKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpICE9IFpNX01PREVfQVApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiU3RhdGlvbiBNb2RlXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCAodThfdCAqKSZ3cGFJZSwgJndwYWxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygid3BhSWUgOiAlMngsJTJ4LCUyeFxuIiwgd3BhSWVbMjFdLCB3cGFJZVsyMl0sIHdwYUllWzIzXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygicnNuSWUgOiAlMngsJTJ4LCUyeFxuIiwgd3BhSWVbMTddLCB3cGFJZVsxOF0sIHdwYUllWzE5XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMjNdID09IDB4MikpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTS1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTSzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9XUEFQU0spOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzIzXSA9PSAweDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfV1BBKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzE5XSA9PSAweDIpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTSzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfV1BBMlBTSyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsxOV0gPT0gMHgxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX1dQQTIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgfHwgKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSkvL1dQQSBvciBXUEFQU0sKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+c3VwSWVbMTFdID09IDB4MikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVBcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1RLSVApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVNcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgfHwgKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSkgLy9XUEEyIG9yIFdQQTJQU0sKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+c3VwSWVbMTNdID09IDB4MikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVBcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1RLSVApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVNcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgV1BBIHJlbGF0ZWQgdmFyaWFibGVzICovCi0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAwKTsKLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9PUEVOKTsKLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEKTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBOb3cgd2Ugb25seSBzZXQgdGhlIGxlbmd0aCBpbiB0aGUgV1BBIElFCi0gICAgICAgICAgICAgICAgICAgICAqIGZpZWxkIHRvIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIC8vbWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVbMV0gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX0NPVU5URVJNRUFTVVJFUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIj09PT09PT09PT09PT09PT1aRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVM6ICIpOwotCi0gICAgICAgICAgICAgICAgaWYoYXJnKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0xOwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MDsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQ6ICIpOwotCi0gICAgICAgICAgICAgICAgaWYoYXJnKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX0FVVEhfQUxHUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0FVVEhfQUxHUzogIik7Ci0KLSAgICAgICAgICAgICAgICBpZihhcmcgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiT1BFTl9TWVNURU1cbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlNIQVJFRF9LRVlcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX1dQU19GSUxURVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUFNfRklMVEVSOiAiKTsKLQotICAgICAgICAgICAgICAgIGlmKGFyZykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MTsKLSAgICAgICAgICAgICAgICAgICAgbWFjcC0+Zm9yd2FyZE1nbXQgPSAxOwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MDsKLSAgICAgICAgICAgICAgICAgICAgbWFjcC0+Zm9yd2FyZE1nbXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWkRfSU9DVExfR0VUV1BBSUU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUgcmVxX3dwYWllOwotICAgICAgICAgICAgdTE2X3QgYXBJZCwgaSwgajsKLQotICAgICAgICAgICAgLyogR2V0IHRoZSBBUCBJZCAqLwotICAgICAgICAgICAgYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKLQotICAgICAgICAgICAgaWYgKGFwSWQgPT0gMHhmZmZmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwSWQgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwSWQgPSBhcElkKzE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmcmVxX3dwYWllLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSkpKXsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydjogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgSUVFRTgwMjExX0FERFJfTEVOOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+c3Rhd3BhaWVbaV0ud3BhX21hY2FkZHJbal0gIT0gcmVxX3dwYWllLndwYV9tYWNhZGRyW2pdKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChqID09IDYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJaRF9JT0NUTF9HRVRXUEFJRSAtIHN0YSBpbmRleCA9ICVkXG4iLCBpKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkocmVxX3dwYWllLndwYV9pZSwgbWFjcC0+c3Rhd3BhaWVbaV0ud3BhX2llLCBJRUVFODAyMTFfTUFYX0lFX1NJWkUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZyZXFfd3BhaWUsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBaTV9FTkFCTEVfQ0VOQwotICAgICAgICBjYXNlIFpNX0lPQ1RMX0NFTkM6Ci0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJm1hY3AtPnpkX3dwYV9yZXEsIGlmci0+aWZyX2RhdGEsIHNpemVvZihzdHJ1Y3QgYXRocl93bGFuX3BhcmFtKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnY6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXNiZHJ2X2NlbmNfaW9jdGwoZGV2LCAoc3RydWN0IHp5ZGFzX2NlbmNfcGFyYW0gKikmbWFjcC0+emRfd3BhX3JlcSk7Ci0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJyID0gLUVPUE5PVFNVUFA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLQotICAgIHJldHVybiBlcnI7CisJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMKaW5kZXggZGZlMDcwNy4uNTY1YTgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMKQEAgLTkzNiwzMCArOTM2LDI2IEBACiAgICAgZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKQogICAgIHsKICAgICAgICAgZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKLSAgICAgICAgaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCi0gICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkKKwkgaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkKICAgICAgICAgewogICAgICAgICAgICAgLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCiAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImJ1bGsgaW46IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgotICAgICAgICAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpCisJIGlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiB3ZSBmb3VuZCBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCiAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImJ1bGsgb3V0OiB3TWF4UGFja2V0U2l6ZSA9ICV4XG4iLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgotICAgICAgICAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpCisJIGlmICh1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKICAgICAgICAgewogICAgICAgICAgICAgLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgKi8KICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaW50ZXJydXB0IGluOiB3TWF4UGFja2V0U2l6ZSA9ICV4XG4iLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaW50ZXJydXB0IGluOiBpbnRfaW50ZXJ2YWwgPSAlZFxuIiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCi0gICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkKKwkgaWYgKHVzYl9lbmRwb2ludF9pc19pbnRfb3V0KGVuZHBvaW50KSkKICAgICAgICAgewogICAgICAgICAgICAgLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50ICovCiAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImludGVycnVwdCBvdXQ6IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMKaW5kZXggMWJiNWY1OS4uNGRiOGY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCkBAIC0zNTAsOCArMzUwLDcgQEAKICAgICBidWYtPmxlbiA9IDA7CiAjZW5kaWYKIAotICAgIGlmICgoYnVmLT50YWlsICsgdXJiLT5hY3R1YWxfbGVuZ3RoKSA+IGJ1Zi0+ZW5kKQotICAgICAgICBCVUcoKTsKKyAgICBCVUdfT04oKGJ1Zi0+dGFpbCArIHVyYi0+YWN0dWFsX2xlbmd0aCkgPiBidWYtPmVuZCk7CiAKICAgICBza2JfcHV0KGJ1ZiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIApAQCAtOTcxLDggKzk3MCw3IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIG5sbXNnX2ZhaWx1cmU6IC8qTkxNU0dfUFVUIMqnsNyjrNTys7fP+szXvdPX1ru6tOYqLwotICAJaWYoc2tiKQotICAgIAkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAJZ290byBvdXQ7CiAKICN1bmRlZiBDT01NVFlQRV9HUk9VUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvemRjb21wYXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkY29tcGF0LmgKaW5kZXggOGFjZjQwMC4uZDlhM2IyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvemRjb21wYXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZGNvbXBhdC5oCkBAIC00NSwxMyArNDUsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBJUlFfTk9ORQotdHlwZWRlZiB2b2lkIGlycXJldHVybl90OwotI2RlZmluZSBJUlFfTk9ORQotI2RlZmluZSBJUlFfSEFORExFRAotI2RlZmluZSBJUlFfUkVUVkFMKHgpCi0jZW5kaWYKLQogI2lmbmRlZiBpbl9hdG9taWMKICNkZWZpbmUgaW5fYXRvbWljKCkgIDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzY2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgUExBTjlBVVRICisJdHJpc3RhdGUgIlBsYW4gOSBzdHlsZSBjYXBhYmlsaXR5IGRldmljZSBpbXBsZW1lbnRhdGlvbiIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIENSWVBUTworCWhlbHAKKwkgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIFBsYW4gOSBzdHlsZSBjYXBhYmlsaXR5IGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlCisJICBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcDlhdXRoLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViZjZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1BMQU45QVVUSCkJKz0gcDlhdXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWM4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogUGxhbiA5IHN0eWxlIGNhcGFiaWxpdHkgZGV2aWNlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgTGludXggS2VybmVsCisgKgorICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgQXNod2luIEdhbnRpIDxhc2h3aW4uZ2FudGlAZ21haWwuY29tPgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgorCisjaWZuZGVmIENBUF9NQUpPUgorI2RlZmluZSBDQVBfTUFKT1IgMAorI2VuZGlmCisKKyNpZm5kZWYgQ0FQX05SX0RFVlMKKyNkZWZpbmUgQ0FQX05SX0RFVlMgMgkJLyogY2FwaGFzaCBhbmQgY2FwdXNlICovCisjZW5kaWYKKworI2lmbmRlZiBDQVBfTk9ERV9TSVpFCisjZGVmaW5lIENBUF9OT0RFX1NJWkUgMjAKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9ESUdFU1RfU0laRSAgMjAKKworc3RydWN0IGNhcF9ub2RlIHsKKwljaGFyIGRhdGFbQ0FQX05PREVfU0laRV07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGNhcF9kZXYgeworCXN0cnVjdCBjYXBfbm9kZSAqaGVhZDsKKwlpbnQgbm9kZV9zaXplOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgY2RldiBjZGV2OworfTsKKworc3RhdGljIGludCBjYXBfbWFqb3IgPSBDQVBfTUFKT1I7CitzdGF0aWMgaW50IGNhcF9taW5vcjsKK3N0YXRpYyBpbnQgY2FwX25yX2RldnMgPSBDQVBfTlJfREVWUzsKK3N0YXRpYyBpbnQgY2FwX25vZGVfc2l6ZSA9IENBUF9OT0RFX1NJWkU7CisKK21vZHVsZV9wYXJhbShjYXBfbWFqb3IsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2FwX21pbm9yLCBpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNhcF9ucl9kZXZzLCBpbnQsIFNfSVJVR08pOworCitNT0RVTEVfQVVUSE9SKCJBc2h3aW4gR2FudGkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2aWNlczsKKworc3RhdGljIHZvaWQgaGV4ZHVtcCh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJd2hpbGUgKGxlbi0tKQorCQlwcmludGsoIiUwMngiLCAqYnVmKyspOworCXByaW50aygiXG4iKTsKK30KKworc3RhdGljIGNoYXIgKmNhcF9oYXNoKGNoYXIgKnBsYWluX3RleHQsIHVuc2lnbmVkIGludCBwbGFpbl90ZXh0X3NpemUsCisJCSAgICAgIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleV9zaXplKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwljaGFyICpyZXN1bHQ7CisJc3RydWN0IGNyeXB0b19oYXNoICp0Zm07CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCWludCByZXQ7CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaCgiaG1hYyhzaGExKSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIodGZtKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yIGhtYWMoc2hhMSk6ICVsZFxuIiwKKwkJICAgICAgIFBUUl9FUlIodGZtKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWRlc2MudGZtID0gdGZtOworCWRlc2MuZmxhZ3MgPSAwOworCisJcmVzdWx0ID0ga3phbGxvYyhNQVhfRElHRVNUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAib3V0IG9mIG1lbW9yeSFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlzZ19zZXRfYnVmKCZzZywgcGxhaW5fdGV4dCwgcGxhaW5fdGV4dF9zaXplKTsKKworCXJldCA9IGNyeXB0b19oYXNoX3NldGtleSh0Zm0sIGtleSwga2V5X3NpemUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZXRrZXkoKSBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOworCQlrZnJlZShyZXN1bHQpOworCQlyZXN1bHQgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZzZywgcGxhaW5fdGV4dF9zaXplLCByZXN1bHQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkaWdlc3QgKCkgZmFpbGVkIHJldD0lZFxuIiwgcmV0KTsKKwkJa2ZyZWUocmVzdWx0KTsKKwkJcmVzdWx0ID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgImNyeXB0byBoYXNoIGRpZ2VzdCBzaXplICVkXG4iLAorCSAgICAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSkpOworCWhleGR1bXAocmVzdWx0LCBNQVhfRElHRVNUX1NJWkUpOworCitvdXQ6CisJY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY2FwX3RyaW0oc3RydWN0IGNhcF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY2FwX25vZGUgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpxOworCWlmIChkZXYtPmhlYWQgIT0gTlVMTCkgeworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBxLCAmKGRldi0+aGVhZC0+bGlzdCkpIHsKKwkJCXRtcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2FwX25vZGUsIGxpc3QpOworCQkJbGlzdF9kZWwocG9zKTsKKwkJCWtmcmVlKHRtcCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNhcF9kZXYgKmRldjsKKwlkZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGNhcF9kZXYsIGNkZXYpOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRldjsKKworCS8qIHRyaW0gdG8gMCB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgaWYgb3BlbiB3YXMgd3JpdGUtb25seSAqLworCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5zZW0pKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJY2FwX3RyaW0oZGV2KTsKKwkJdXAoJmRldi0+c2VtKTsKKwl9CisJLyogaW5pdGlhbGlzZSB0aGUgaGVhZCBpZiBpdCBpcyBOVUxMICovCisJaWYgKGRldi0+aGVhZCA9PSBOVUxMKSB7CisJCWRldi0+aGVhZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXBfbm9kZSksIEdGUF9LRVJORUwpOworCQlJTklUX0xJU1RfSEVBRCgmKGRldi0+aGVhZC0+bGlzdCkpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY2FwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgY2FwX25vZGUgKm5vZGVfcHRyLCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgY2FwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgcmV0dmFsID0gLUVOT01FTTsKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCBsZW4sIHRhcmdldF9pbnQsIHNvdXJjZV9pbnQsIGZsYWcgPSAwOworCWNoYXIgKnVzZXJfYnVmLCAqdXNlcl9idWZfcnVubmluZywgKnNvdXJjZV91c2VyLCAqdGFyZ2V0X3VzZXIsCisJICAgICpyYW5kX3N0ciwgKmhhc2hfc3RyLCAqcmVzdWx0OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJbm9kZV9wdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FwX25vZGUpLCBHRlBfS0VSTkVMKTsKKwl1c2VyX2J1ZiA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKHVzZXJfYnVmLCBidWYsIGNvdW50KSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBtaW5vciBudW1iZXIgaXMgMCAoIC9kZXYvY2FwaGFzaCApIHRoZW4gc2ltcGx5IGFkZCB0aGUKKwkgKiBoYXNoZWQgY2FwYWJpbGl0eSBzdXBwbGllZCBieSB0aGUgdXNlciB0byB0aGUgbGlzdCBvZiBoYXNoZXMKKwkgKi8KKwlpZiAoMCA9PSBpbWlub3IoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNhcGFiaWxpdHkgYmVpbmcgd3JpdHRlbiB0byAvZGV2L2NhcGhhc2ggOiBcbiIpOworCQloZXhkdW1wKHVzZXJfYnVmLCBjb3VudCk7CisJCW1lbWNweShub2RlX3B0ci0+ZGF0YSwgdXNlcl9idWYsIGNvdW50KTsKKwkJbGlzdF9hZGQoJihub2RlX3B0ci0+bGlzdCksICYoZGV2LT5oZWFkLT5saXN0KSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogYnJlYWsgdGhlIHN1cHBsaWVkIHN0cmluZyBpbnRvIHRva2VucyB3aXRoIEAgYXMgdGhlCisJCSAqIGRlbGltaXRlciBJZiB0aGUgc3RyaW5nIGlzICJ1c2VyMUB1c2VyMkByYW5kb21zdHJpbmciIHdlCisJCSAqIG5lZWQgdG8gc3BsaXQgaXQgYW5kIGhhc2ggJ3VzZXIxQHVzZXIyJyB1c2luZyAncmFuZG9tc3RyaW5nJworCQkgKiBhcyB0aGUga2V5LgorCQkgKi8KKwkJdXNlcl9idWZfcnVubmluZyA9IGtzdHJkdXAodXNlcl9idWYsIEdGUF9LRVJORUwpOworCQlzb3VyY2VfdXNlciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKKwkJdGFyZ2V0X3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7CisJCXJhbmRfc3RyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOworCisJCS8qIGhhc2ggdGhlIHN0cmluZyB1c2VyMUB1c2VyMiB3aXRoIHJhbmRfc3RyIGFzIHRoZSBrZXkgKi8KKwkJbGVuID0gc3RybGVuKHNvdXJjZV91c2VyKSArIHN0cmxlbih0YXJnZXRfdXNlcikgKyAxOworCQloYXNoX3N0ciA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJc3RyY2F0KGhhc2hfc3RyLCBzb3VyY2VfdXNlcik7CisJCXN0cmNhdChoYXNoX3N0ciwgIkAiKTsKKwkJc3RyY2F0KGhhc2hfc3RyLCB0YXJnZXRfdXNlcik7CisKKwkJcHJpbnRrKEtFUk5fQUxFUlQgInRoZSBzb3VyY2UgdXNlciBpcyAlcyBcbiIsIHNvdXJjZV91c2VyKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgInRoZSB0YXJnZXQgdXNlciBpcyAlcyBcbiIsIHRhcmdldF91c2VyKTsKKworCQlyZXN1bHQgPSBjYXBfaGFzaChoYXNoX3N0ciwgbGVuLCByYW5kX3N0ciwgc3RybGVuKHJhbmRfc3RyKSk7CisJCWlmIChOVUxMID09IHJlc3VsdCkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1lbWNweShub2RlX3B0ci0+ZGF0YSwgcmVzdWx0LCBDQVBfTk9ERV9TSVpFKTsKKwkJLyogQ2hhbmdlIHRoZSBwcm9jZXNzJ3MgdWlkIGlmIHRoZSBoYXNoIGlzIHByZXNlbnQgaW4gdGhlCisJCSAqIGxpc3Qgb2YgaGFzaGVzCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoKHBvcywgJihjYXBfZGV2aWNlcy0+aGVhZC0+bGlzdCkpIHsKKwkJCS8qCisJCQkgKiBDaGFuZ2UgdGhlIHVzZXIgaWQgb2YgdGhlIHByb2Nlc3MgaWYgdGhlIGhhc2hlcworCQkJICogbWF0Y2gKKwkJCSAqLworCQkJaWYgKDAgPT0KKwkJCSAgICBtZW1jbXAocmVzdWx0LAorCQkJCSAgIGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2FwX25vZGUsCisJCQkJCSAgICAgIGxpc3QpLT5kYXRhLAorCQkJCSAgIENBUF9OT0RFX1NJWkUpKSB7CisJCQkJdGFyZ2V0X2ludCA9ICh1bnNpZ25lZCBpbnQpCisJCQkJICAgIHNpbXBsZV9zdHJ0b2wodGFyZ2V0X3VzZXIsIE5VTEwsIDApOworCQkJCXNvdXJjZV9pbnQgPSAodW5zaWduZWQgaW50KQorCQkJCSAgICBzaW1wbGVfc3RydG9sKHNvdXJjZV91c2VyLCBOVUxMLCAwKTsKKwkJCQlmbGFnID0gMTsKKworCQkJCS8qCisJCQkJICogQ2hlY2sgd2hldGhlciB0aGUgcHJvY2VzcyB3cml0aW5nIHRvIGNhcHVzZQorCQkJCSAqIGlzIGFjdHVhbGx5IG93bmVkIGJ5IHRoZSBzb3VyY2Ugb3duZXIKKwkJCQkgKi8KKwkJCQlpZiAoc291cmNlX2ludCAhPSBjdXJyZW50X3VpZCgpKSB7CisJCQkJCXByaW50ayhLRVJOX0FMRVJUCisJCQkJCSAgICAgICAiUHJvY2VzcyBpcyBub3Qgb3duZWQgYnkgdGhlIHNvdXJjZSB1c2VyIG9mIHRoZSBjYXBhYmlsaXR5LlxuIik7CisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQkvKgorCQkJCSAqIFdoYXQgYWxsIGlkJ3MgbmVlZCB0byBiZSBjaGFuZ2VkIGhlcmU/IHVpZCwKKwkJCQkgKiBldWlkLCBmc2lkLCBzYXZlZGlkcyA/PyAgQ3VycmVudGx5IEkgYW0KKwkJCQkgKiBjaGFuZ2luZyB0aGUgZWZmZWN0aXZlIHVzZXIgaWQgc2luY2UgbW9zdCBvZgorCQkJCSAqIHRoZSBhdXRob3Jpc2F0aW9uIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gaXQKKwkJCQkgKi8KKwkJCQluZXcgPSBwcmVwYXJlX2NyZWRzKCk7CisJCQkJaWYgKCFuZXcpIHsKKwkJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCW5ldy0+dWlkID0gKHVpZF90KSB0YXJnZXRfaW50OworCQkJCW5ldy0+ZXVpZCA9ICh1aWRfdCkgdGFyZ2V0X2ludDsKKwkJCQlyZXR2YWwgPSBjb21taXRfY3JlZHMobmV3KTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlnb3RvIG91dDsKKworCQkJCS8qCisJCQkJICogUmVtb3ZlIHRoZSBjYXBhYmlsaXR5IGZyb20gdGhlIGxpc3QgYW5kCisJCQkJICogYnJlYWsKKwkJCQkgKi8KKwkJCQl0bXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNhcF9ub2RlLCBsaXN0KTsKKwkJCQlsaXN0X2RlbChwb3MpOworCQkJCWtmcmVlKHRtcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKDAgPT0gZmxhZykgeworCQkJLyoKKwkJCSAqIFRoZSBjYXBhYmlsaXR5IGlzIG5vdCBwcmVzZW50IGluIHRoZSBsaXN0IG9mIHRoZQorCQkJICogaGFzaGVzIHN0b3JlZCwgaGVuY2UgcmV0dXJuIGZhaWx1cmUKKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJCSAgICAgICAiSW52YWxpZCBjYXBhYmlsaXkgd3JpdHRlbiB0byAvZGV2L2NhcHVzZSBcbiIpOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCSpmX3BvcyArPSBjb3VudDsKKwlyZXR2YWwgPSBjb3VudDsKKwkvKiB1cGRhdGUgdGhlIHNpemUgKi8KKwlpZiAoZGV2LT5zaXplIDwgKmZfcG9zKQorCQlkZXYtPnNpemUgPSAqZl9wb3M7CisKK291dDoKKwl1cCgmZGV2LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhcF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS53cml0ZSA9IGNhcF93cml0ZSwKKwkub3BlbiA9IGNhcF9vcGVuLAorCS5yZWxlYXNlID0gY2FwX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBjYXBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgaTsKKwlkZXZfdCBkZXZubyA9IE1LREVWKGNhcF9tYWpvciwgY2FwX21pbm9yKTsKKwlpZiAoY2FwX2RldmljZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNhcF9ucl9kZXZzOyBpKyspIHsKKwkJCWNhcF90cmltKGNhcF9kZXZpY2VzICsgaSk7CisJCQljZGV2X2RlbCgmY2FwX2RldmljZXNbaV0uY2Rldik7CisJCX0KKwkJa2ZyZWUoY2FwX2RldmljZXMpOworCX0KKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2bm8sIGNhcF9ucl9kZXZzKTsKKworfQorCitzdGF0aWMgdm9pZCBjYXBfc2V0dXBfY2RldihzdHJ1Y3QgY2FwX2RldiAqZGV2LCBpbnQgaW5kZXgpCit7CisJaW50IGVyciwgZGV2bm8gPSBNS0RFVihjYXBfbWFqb3IsIGNhcF9taW5vciArIGluZGV4KTsKKwljZGV2X2luaXQoJmRldi0+Y2RldiwgJmNhcF9mb3BzKTsKKwlkZXYtPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwlkZXYtPmNkZXYub3BzID0gJmNhcF9mb3BzOworCWVyciA9IGNkZXZfYWRkKCZkZXYtPmNkZXYsIGRldm5vLCAxKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIkVycm9yICVkIGFkZGluZyBjYXAlZCIsIGVyciwgaW5kZXgpOworfQorCitzdGF0aWMgaW50IGNhcF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXN1bHQsIGk7CisJZGV2X3QgZGV2ID0gMDsKKworCWlmIChjYXBfbWFqb3IpIHsKKwkJZGV2ID0gTUtERVYoY2FwX21ham9yLCBjYXBfbWlub3IpOworCQlyZXN1bHQgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgY2FwX25yX2RldnMsICJjYXAiKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIGNhcF9taW5vciwgY2FwX25yX2RldnMsCisJCQkJCSAgICAgImNhcCIpOworCQljYXBfbWFqb3IgPSBNQUpPUihkZXYpOworCX0KKworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhcDogY2FuJ3QgZ2V0IG1ham9yICVkXG4iLAorCQkgICAgICAgY2FwX21ham9yKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwljYXBfZGV2aWNlcyA9IGt6YWxsb2MoY2FwX25yX2RldnMgKiBzaXplb2Yoc3RydWN0IGNhcF9kZXYpLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXBfZGV2aWNlcykgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogSW5pdGlhbGl6ZSBlYWNoIGRldmljZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2FwX25yX2RldnM7IGkrKykgeworCQljYXBfZGV2aWNlc1tpXS5ub2RlX3NpemUgPSBjYXBfbm9kZV9zaXplOworCQlpbml0X01VVEVYKCZjYXBfZGV2aWNlc1tpXS5zZW0pOworCQljYXBfc2V0dXBfY2RldigmY2FwX2RldmljZXNbaV0sIGkpOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCWNhcF9jbGVhbnVwX21vZHVsZSgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK21vZHVsZV9pbml0KGNhcF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChjYXBfY2xlYW51cF9tb2R1bGUpOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2M2NWQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIElERV9QSElTT04KKwl0cmlzdGF0ZSAiUENJRSBBVEEgUFM1MDAwIElERSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEFUQSAmJiBBVEFfU0ZGCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciBQUzUwMDAgSURFIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NDJhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19JREVfUEhJU09OKQkrPSBwaGlzb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwZWJjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYJCVJlZCBIYXQgPGV2YW5fa29AcGhpc29uLmNvbT4KKyAqCisgKiAgTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgorICogIFtNb2RpZnkgSGlzdG9yeV0KKyAqICAgIzAwMDEsIEV2YW4sIDIwMDguMTAuMjIsIFYwLjAwLCBOZXcgcmVsZWFzZS4KKyAqICAgIzAwMDIsIEV2YW4sIDIwMDguMTEuMDEsIFYwLjkwLCBUZXN0IFdvcmsgSW4gVWJ1bnR1IExpbnV4IDguMDQuCisgKiAgICMwMDAzLCBFdmFuLCAyMDA4LjAxLjA4LCBWMC45MSwgQ2hhbmdlIE5hbWUgIlBDSUUtU1NEIiB0byAiRS1CT1giLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgorCisjZGVmaW5lIFBISVNPTl9ERUJVRworCisjZGVmaW5lIERSVl9OQU1FCQkicGhpc29uX2UtYm94IgkvKiAjMDAwMyAqLworI2RlZmluZSBEUlZfVkVSU0lPTiAJCSIwLjkxIgkJLyogIzAwMDMgKi8KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BISVNPTgkweDE5ODcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUzUwMDAJMHg1MDAwCisKK3N0YXRpYyBpbnQgcGhpc29uX3ByZV9yZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisKKwlhcC0+Y2JsID0gQVRBX0NCTF9OT05FOworCXJldCA9IGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOworCWRldl9kYmcoYXAtPmRldiwgInBoaXNvbl9wcmVfcmVzZXQoKSwgcmV0ID0gJXhcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGhpc29uX3NodCA9IHsKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaGlzb25fb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5wcmVyZXNldAkJPSBwaGlzb25fcHJlX3Jlc2V0LAorfTsKKworc3RhdGljIGludCBwaGlzb25faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJCS5mbGFncwkJPSBBVEFfRkxBR19OT19BVEFQSSwKKworCQkucGlvX21hc2sJPSAweDFmLAorCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE1LAorCisJCS5wb3J0X29wcwk9ICZwaGlzb25fb3BzLAorCX07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OworCisJcmV0ID0gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmcGhpc29uX3NodCwgTlVMTCk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJwaGlzb25faW5pdF9vbmUoKSwgcmV0ID0gJXhcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGhpc29uX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfUEhJU09OLCBQQ0lfREVWSUNFX0lEX1BTNTAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgIFBDSV9DTEFTU19TVE9SQUdFX0lERSA8PCA4LCAweGZmZmYwMCwgMCB9LAorCXsgMCwgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGhpc29uX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGhpc29uX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJWX05BTUUsCisJLmlkX3RhYmxlCT0gcGhpc29uX3BjaV90YmwsCisJLnByb2JlCQk9IHBoaXNvbl9pbml0X29uZSwKKwkucmVtb3ZlCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0JLyogaGF2ZW4ndCB0ZXN0ZWQgaXQuICovCisJLnN1c3BlbmQJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRhX3BjaV9kZXZpY2VfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IHBoaXNvbl9pZGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwaGlzb25fcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHBoaXNvbl9pZGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGhpc29uX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwaGlzb25faWRlX2luaXQpOworbW9kdWxlX2V4aXQocGhpc29uX2lkZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRXZhbiBLbyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0lFIGRyaXZlciBtb2R1bGUgZm9yIFBISVNPTiBQUzUwMDAgRS1CT1giKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxNThiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnCkBAIC0wLDAgKzEsMjggQEAKK2NvbmZpZyBQT0hNRUxGUworCXRyaXN0YXRlICJQT0hNRUxGUyBmaWxlc3lzdGVtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVQKKwlzZWxlY3QgQ09OTkVDVE9SCisJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisJc2VsZWN0IENSWVBUT19ITUFDCisJaGVscAorCSAgUE9ITUVMRlMgc3RhbmRzIGZvciBQYXJhbGxlbCBPcHRpbWl6ZWQgSG9zdCBNZXNzYWdlIEV4Y2hhbmdlIExheWVyZWQKKwkgIEZpbGUgU3lzdGVtLiAgVGhpcyBpcyBhIG5ldHdvcmsgZmlsZXN5c3RlbSB3aGljaCBzdXBwb3J0cyBjb2hlcmVudAorCSAgY2FjaGluZyBvZiBkYXRhIGFuZCBtZXRhZGF0YSBvbiBjbGllbnRzLgorCitjb25maWcgUE9ITUVMRlNfREVCVUcKKwlib29sICJQT0hNRUxGUyBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBQT0hNRUxGUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFR1cm5zIG9uIGV4Y2Vzc2l2ZSBQT0hNRUxGUyBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4KKwkgIFlvdSB1c3VhbGx5IGRvIG5vdCB3YW50IHRvIHNsb3cgdGhpbmdzIGRvd24gbm90aWNlYWJseSBhbmQgZ2V0IHJlYWxseQorCSAgbG90cyBvZiBrZXJuZWwgbWVzc2FnZXMgaW4gc3lzbG9nLgorCitjb25maWcgUE9ITUVMRlNfQ1JZUFRPCisJYm9vbCAiUE9ITUVMRlMgY3J5cHRvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQT0hNRUxGUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB0byBlbmNyeXB0IGFuZC9vciBwcm90ZWN0IHdpdGggc3Ryb25nCisJICBjcnlwdG9ncmFwaGljIGhhc2ggYWxsIGRhdGFmbG93IGJldHdlZW4gc2VydmVyIGFuZCBjbGllbnRzLgorCSAgRWFjaCBjb25maWcgZ3JvdXAgY2FuIGhhdmUgaXRzIG93biBrZXlzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjU2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfUE9ITUVMRlMpCSs9IHBvaG1lbGZzLm8KKworcG9obWVsZnMteSA6PSBpbm9kZS5vIGNvbmZpZy5vIGRpci5vIG5ldC5vIHBhdGhfZW50cnkubyB0cmFucy5vIGNyeXB0by5vIGxvY2subyBtY2FjaGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NvbmZpZy5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjdkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY29uZmlnLmMKQEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworLyoKKyAqIEdsb2JhbCBjb25maWd1cmF0aW9uIGxpc3QuCisgKiBFYWNoIGNsaWVudCBjYW4gYmUgYXNrZWQgdG8gZ2V0IG9uZSBvZiB0aGVtLgorICoKKyAqIEFsbG93cyB0byBwcm92aWRlIHJlbW90ZSBzZXJ2ZXIgYWRkcmVzcyAoaXB2NC92Ni93aGF0ZXZlciksIHBvcnQKKyAqIGFuZCBzbyBvbiB2aWEga2VybmVsIGNvbm5lY3Rvci4KKyAqLworCitzdGF0aWMgc3RydWN0IGNiX2lkIHBvaG1lbGZzX2NuX2lkID0gey5pZHggPSBQT0hNRUxGU19DTl9JRFgsIC52YWwgPSBQT0hNRUxGU19DTl9WQUx9Oworc3RhdGljIExJU1RfSEVBRChwb2htZWxmc19jb25maWdfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworc3RhdGljIGlubGluZSBpbnQgcG9obWVsZnNfY29uZmlnX2VxbChzdHJ1Y3QgcG9obWVsZnNfY3RsICpzYywgc3RydWN0IHBvaG1lbGZzX2N0bCAqY3RsKQoreworCWlmIChzYy0+aWR4ID09IGN0bC0+aWR4ICYmIHNjLT50eXBlID09IGN0bC0+dHlwZSAmJgorCQkJc2MtPnByb3RvID09IGN0bC0+cHJvdG8gJiYKKwkJCXNjLT5hZGRybGVuID09IGN0bC0+YWRkcmxlbiAmJgorCQkJIW1lbWNtcCgmc2MtPmFkZHIsICZjdGwtPmFkZHIsIGN0bC0+YWRkcmxlbikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpwb2htZWxmc19maW5kX2NvbmZpZ19ncm91cCh1bnNpZ25lZCBpbnQgaWR4KQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmcsICpncm91cCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGcsICZwb2htZWxmc19jb25maWdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKGctPmlkeCA9PSBpZHgpIHsKKwkJCWdyb3VwID0gZzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGdyb3VwOworfQorCitzdGF0aWMgc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqcG9obWVsZnNfZmluZF9jcmVhdGVfY29uZmlnX2dyb3VwKHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKworCWcgPSBwb2htZWxmc19maW5kX2NvbmZpZ19ncm91cChpZHgpOworCWlmIChnKQorCQlyZXR1cm4gZzsKKworCWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZnLT5jb25maWdfbGlzdCk7CisJZy0+aWR4ID0gaWR4OworCWctPm51bV9lbnRyeSA9IDA7CisKKwlsaXN0X2FkZF90YWlsKCZnLT5ncm91cF9lbnRyeSwgJnBvaG1lbGZzX2NvbmZpZ19saXN0KTsKKworCXJldHVybiBnOworfQorCitpbnQgcG9obWVsZnNfY29weV9jb25maWcoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjLCAqZHN0OworCWludCBlcnIgPSAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJZyA9IHBvaG1lbGZzX2ZpbmRfY29uZmlnX2dyb3VwKHBzYi0+aWR4KTsKKwlpZiAoIWcpCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qCisJICogUnVuIG92ZXIgYWxsIGVudHJpZXMgaW4gZ2l2ZW4gY29uZmlnIGdyb3VwIGFuZCB0cnkgdG8gY3JhdGUgYW5kCisJICogaW5pdGlhbGl6ZSB0aG9zZSwgd2hpY2ggZG8gbm90IGV4aXN0IGluIHN1cGVyYmxvY2sgbGlzdC4KKwkgKiBTa2lwIGFsbCBleGlzdGluZyBlbnRyaWVzLgorCSAqLworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZy0+Y29uZmlnX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQllcnIgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRzdCwgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCQlpZiAocG9obWVsZnNfY29uZmlnX2VxbCgmZHN0LT5zdGF0ZS5jdGwsICZjLT5zdGF0ZS5jdGwpKSB7CisJCQkJZXJyID0gLUVFWElTVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChlcnIpCisJCQljb250aW51ZTsKKworCQlkc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZHN0KSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKworCQltZW1jcHkoJmRzdC0+c3RhdGUuY3RsLCAmYy0+c3RhdGUuY3RsLCBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2N0bCkpOworCisJCWxpc3RfYWRkX3RhaWwoJmRzdC0+Y29uZmlnX2VudHJ5LCAmcHNiLT5zdGF0ZV9saXN0KTsKKworCQllcnIgPSBwb2htZWxmc19zdGF0ZV9pbml0X29uZShwc2IsIGRzdCk7CisJCWlmIChlcnIpIHsKKwkJCWxpc3RfZGVsKCZkc3QtPmNvbmZpZ19lbnRyeSk7CisJCQlrZnJlZShkc3QpOworCQl9CisKKwkJZXJyID0gMDsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfY29weV9jcnlwdG8oc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKwlnID0gcG9obWVsZnNfZmluZF9jb25maWdfZ3JvdXAocHNiLT5pZHgpOworCWlmICghZykKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpZiAoZy0+aGFzaF9zdHJpbmcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJcHNiLT5oYXNoX3N0cmluZyA9IGtzdHJkdXAoZy0+aGFzaF9zdHJpbmcsIEdGUF9LRVJORUwpOworCQlpZiAoIXBzYi0+aGFzaF9zdHJpbmcpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwkJcHNiLT5oYXNoX3N0cmxlbiA9IGctPmhhc2hfc3RybGVuOworCX0KKworCWlmIChnLT5jaXBoZXJfc3RyaW5nKSB7CisJCXBzYi0+Y2lwaGVyX3N0cmluZyA9IGtzdHJkdXAoZy0+Y2lwaGVyX3N0cmluZywgR0ZQX0tFUk5FTCk7CisJCWlmICghcHNiLT5jaXBoZXJfc3RyaW5nKQorCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaF9zdHJpbmc7CisJCXBzYi0+Y2lwaGVyX3N0cmxlbiA9IGctPmNpcGhlcl9zdHJsZW47CisJfQorCisJaWYgKGctPmhhc2hfa2V5c2l6ZSkgeworCQlwc2ItPmhhc2hfa2V5ID0ga21hbGxvYyhnLT5oYXNoX2tleXNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBzYi0+aGFzaF9rZXkpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9jaXBoZXJfc3RyaW5nOworCQltZW1jcHkocHNiLT5oYXNoX2tleSwgZy0+aGFzaF9rZXksIGctPmhhc2hfa2V5c2l6ZSk7CisJCXBzYi0+aGFzaF9rZXlzaXplID0gZy0+aGFzaF9rZXlzaXplOworCX0KKworCWlmIChnLT5jaXBoZXJfa2V5c2l6ZSkgeworCQlwc2ItPmNpcGhlcl9rZXkgPSBrbWFsbG9jKGctPmNpcGhlcl9rZXlzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwc2ItPmNpcGhlcl9rZXkpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOworCQltZW1jcHkocHNiLT5jaXBoZXJfa2V5LCBnLT5jaXBoZXJfa2V5LCBnLT5jaXBoZXJfa2V5c2l6ZSk7CisJCXBzYi0+Y2lwaGVyX2tleXNpemUgPSBnLT5jaXBoZXJfa2V5c2l6ZTsKKwl9CisKKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfaGFzaDoKKwlrZnJlZShwc2ItPmhhc2hfa2V5KTsKK2Vycl9vdXRfZnJlZV9jaXBoZXJfc3RyaW5nOgorCWtmcmVlKHBzYi0+Y2lwaGVyX3N0cmluZyk7CitlcnJfb3V0X2ZyZWVfaGFzaF9zdHJpbmc6CisJa2ZyZWUocHNiLT5oYXNoX3N0cmluZyk7CitlcnJfb3V0X2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zZW5kX3JlcGx5KGludCBlcnIsIGludCBtc2dfbnVtLCBpbnQgYWN0aW9uLCBzdHJ1Y3QgY25fbXNnICptc2csIHN0cnVjdCBwb2htZWxmc19jdGwgKmN0bCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY25fYWNrICphY2s7CisKKwlhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY25fYWNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY2spCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGFjaywgMCwgc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jbl9hY2spKTsKKwltZW1jcHkoJmFjay0+bXNnLCBtc2csIHNpemVvZihzdHJ1Y3QgY25fbXNnKSk7CisKKwlpZiAoYWN0aW9uID09IFBPSE1FTEZTX0NUTElORk9fQUNLKQorCQltZW1jcHkoJmFjay0+Y3RsLCBjdGwsIHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY3RsKSk7CisKKwlhY2stPm1zZy5sZW4gPSBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NuX2FjaykgLSBzaXplb2Yoc3RydWN0IGNuX21zZyk7CisJYWNrLT5tc2cuYWNrID0gbXNnLT5hY2sgKyAxOworCWFjay0+ZXJyb3IgPSBlcnI7CisJYWNrLT5tc2dfbnVtID0gbXNnX251bTsKKworCWNuX25ldGxpbmtfc2VuZCgmYWNrLT5tc2csIDAsIEdGUF9LRVJORUwpOworCWtmcmVlKGFjayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY25fZGlzcChzdHJ1Y3QgY25fbXNnICptc2cpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsICpjdGwgPSAoc3RydWN0IHBvaG1lbGZzX2N0bCAqKW1zZy0+ZGF0YTsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjLCAqdG1wOworCWludCBlcnIgPSAwLCBpID0gMTsKKworCWlmIChtc2ctPmxlbiAhPSBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2N0bCkpCisJCXJldHVybiAtRUJBRE1TRzsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCWcgPSBwb2htZWxmc19maW5kX2NvbmZpZ19ncm91cChjdGwtPmlkeCk7CisJaWYgKCFnKSB7CisJCXBvaG1lbGZzX3NlbmRfcmVwbHkoZXJyLCAwLCBQT0hNRUxGU19OT0lORk9fQUNLLCBtc2csIE5VTEwpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIHRtcCwgJmctPmNvbmZpZ19saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3RydWN0IHBvaG1lbGZzX2N0bCAqc2MgPSAmYy0+c3RhdGUuY3RsOworCQlpZiAocG9obWVsZnNfc2VuZF9yZXBseShlcnIsIGctPm51bV9lbnRyeSAtIGksIFBPSE1FTEZTX0NUTElORk9fQUNLLCBtc2csIHNjKSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQlpICs9IDE7CisJfQorCitvdXRfdW5sb2NrOgorICAgICAgICBtdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKyAgICAgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jbl9jdGwoc3RydWN0IGNuX21zZyAqbXNnLCBpbnQgYWN0aW9uKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisJc3RydWN0IHBvaG1lbGZzX2N0bCAqY3RsID0gKHN0cnVjdCBwb2htZWxmc19jdGwgKiltc2ctPmRhdGE7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYywgKnRtcDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChtc2ctPmxlbiAhPSBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2N0bCkpCisJCXJldHVybiAtRUJBRE1TRzsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCWcgPSBwb2htZWxmc19maW5kX2NyZWF0ZV9jb25maWdfZ3JvdXAoY3RsLT5pZHgpOworCWlmICghZykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIHRtcCwgJmctPmNvbmZpZ19saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3RydWN0IHBvaG1lbGZzX2N0bCAqc2MgPSAmYy0+c3RhdGUuY3RsOworCisJCWlmIChwb2htZWxmc19jb25maWdfZXFsKHNjLCBjdGwpKSB7CisJCQlpZiAoYWN0aW9uID09IFBPSE1FTEZTX0ZMQUdTX0FERCkgeworCQkJCWVyciA9IC1FRVhJU1Q7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfSBlbHNlIGlmIChhY3Rpb24gPT0gUE9ITUVMRlNfRkxBR1NfREVMKSB7CisJCQkJbGlzdF9kZWwoJmMtPmNvbmZpZ19lbnRyeSk7CisJCQkJZy0+bnVtX2VudHJ5LS07CisJCQkJa2ZyZWUoYyk7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfSBlbHNlIHsKKwkJCQllcnIgPSAtRUVYSVNUOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYWN0aW9uID09IFBPSE1FTEZTX0ZMQUdTX0RFTCkgeworCQllcnIgPSAtRUJBRE1TRzsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJbWVtY3B5KCZjLT5zdGF0ZS5jdGwsIGN0bCwgc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jdGwpKTsKKwlnLT5udW1fZW50cnkrKzsKKwlsaXN0X2FkZF90YWlsKCZjLT5jb25maWdfZW50cnksICZnLT5jb25maWdfbGlzdCk7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisJaWYgKHBvaG1lbGZzX3NlbmRfcmVwbHkoZXJyLCAwLCBQT0hNRUxGU19OT0lORk9fQUNLLCBtc2csIE5VTEwpKQorCQllcnIgPSAtRU5PTUVNOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9faGFzaF9pbml0KHN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmcsIHN0cnVjdCBwb2htZWxmc19jcnlwdG8gKmMpCit7CisJY2hhciAqYWxnbyA9IChjaGFyICopYy0+ZGF0YTsKKwl1OCAqa2V5ID0gKHU4ICopKGFsZ28gKyBjLT5zdHJsZW4pOworCisJaWYgKGctPmhhc2hfc3RyaW5nKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWctPmhhc2hfc3RyaW5nID0ga3N0cmR1cChhbGdvLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWctPmhhc2hfc3RyaW5nKQorCQlyZXR1cm4gLUVOT01FTTsKKwlnLT5oYXNoX3N0cmxlbiA9IGMtPnN0cmxlbjsKKwlnLT5oYXNoX2tleXNpemUgPSBjLT5rZXlzaXplOworCisJZy0+aGFzaF9rZXkgPSBrbWFsbG9jKGMtPmtleXNpemUsIEdGUF9LRVJORUwpOworCWlmICghZy0+aGFzaF9rZXkpIHsKKwkJa2ZyZWUoZy0+aGFzaF9zdHJpbmcpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoZy0+aGFzaF9rZXksIGtleSwgYy0+a2V5c2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fY2lwaGVyX2luaXQoc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZywgc3RydWN0IHBvaG1lbGZzX2NyeXB0byAqYykKK3sKKwljaGFyICphbGdvID0gKGNoYXIgKiljLT5kYXRhOworCXU4ICprZXkgPSAodTggKikoYWxnbyArIGMtPnN0cmxlbik7CisKKwlpZiAoZy0+Y2lwaGVyX3N0cmluZykKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlnLT5jaXBoZXJfc3RyaW5nID0ga3N0cmR1cChhbGdvLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWctPmNpcGhlcl9zdHJpbmcpCisJCXJldHVybiAtRU5PTUVNOworCWctPmNpcGhlcl9zdHJsZW4gPSBjLT5zdHJsZW47CisJZy0+Y2lwaGVyX2tleXNpemUgPSBjLT5rZXlzaXplOworCisJZy0+Y2lwaGVyX2tleSA9IGttYWxsb2MoYy0+a2V5c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnLT5jaXBoZXJfa2V5KSB7CisJCWtmcmVlKGctPmNpcGhlcl9zdHJpbmcpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoZy0+Y2lwaGVyX2tleSwga2V5LCBjLT5rZXlzaXplKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY25fY3J5cHRvKHN0cnVjdCBjbl9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvICpjcnlwdG8gPSAoc3RydWN0IHBvaG1lbGZzX2NyeXB0byAqKW1zZy0+ZGF0YTsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCWludCBlcnIgPSAwOworCisJZHByaW50aygiJXM6IGlkeDogJXUsIHN0cmxlbjogJXUsIHR5cGU6ICV1LCBrZXlzaXplOiAldSwgYWxnbzogJXMuXG4iLAorCQkJX19mdW5jX18sIGNyeXB0by0+aWR4LCBjcnlwdG8tPnN0cmxlbiwgY3J5cHRvLT50eXBlLAorCQkJY3J5cHRvLT5rZXlzaXplLCAoY2hhciAqKWNyeXB0by0+ZGF0YSk7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisJZyA9IHBvaG1lbGZzX2ZpbmRfY3JlYXRlX2NvbmZpZ19ncm91cChjcnlwdG8tPmlkeCk7CisJaWYgKCFnKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlzd2l0Y2ggKGNyeXB0by0+dHlwZSkgeworCQljYXNlIFBPSE1FTEZTX0NSWVBUT19IQVNIOgorCQkJZXJyID0gcG9obWVsZnNfY3J5cHRvX2hhc2hfaW5pdChnLCBjcnlwdG8pOworCQkJYnJlYWs7CisJCWNhc2UgUE9ITUVMRlNfQ1JZUFRPX0NJUEhFUjoKKwkJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19jaXBoZXJfaW5pdChnLCBjcnlwdG8pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRU5PVFNVUFA7CisJCQlicmVhazsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisJaWYgKHBvaG1lbGZzX3NlbmRfcmVwbHkoZXJyLCAwLCBQT0hNRUxGU19OT0lORk9fQUNLLCBtc2csIE5VTEwpKQorCQllcnIgPSAtRU5PTUVNOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfY25fY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY25fbXNnICptc2cgPSBkYXRhOworCWludCBlcnI7CisKKwlzd2l0Y2ggKG1zZy0+ZmxhZ3MpIHsKKwkJY2FzZSBQT0hNRUxGU19GTEFHU19BREQ6CisJCQllcnIgPSBwb2htZWxmc19jbl9jdGwobXNnLCBQT0hNRUxGU19GTEFHU19BREQpOworCQkJYnJlYWs7CisJCWNhc2UgUE9ITUVMRlNfRkxBR1NfREVMOgorCQkJZXJyID0gcG9obWVsZnNfY25fY3RsKG1zZywgUE9ITUVMRlNfRkxBR1NfREVMKTsKKwkJCWJyZWFrOworCQljYXNlIFBPSE1FTEZTX0ZMQUdTX1NIT1c6CisJCQllcnIgPSBwb2htZWxmc19jbl9kaXNwKG1zZyk7CisJCQlicmVhazsKKwkJY2FzZSBQT0hNRUxGU19GTEFHU19DUllQVE86CisJCQllcnIgPSBwb2htZWxmc19jbl9jcnlwdG8obXNnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gLUVOT1NZUzsKKwkJCWJyZWFrOworCX0KK30KKworaW50IHBvaG1lbGZzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjb25maWcsIGludCBpZHgpCit7CisJc3RydWN0IHBvaG1lbGZzX2N0bCAqY3RsID0gJmNvbmZpZy0+c3RhdGUuY3RsOworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKnRtcDsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsICpzYzsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJZyA9IHBvaG1lbGZzX2ZpbmRfY29uZmlnX2dyb3VwKGN0bC0+aWR4KTsKKwlpZiAoZykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmctPmNvbmZpZ19saXN0LCBjb25maWdfZW50cnkpIHsKKwkJCXNjID0gJnRtcC0+c3RhdGUuY3RsOworCisJCQlpZiAocG9obWVsZnNfY29uZmlnX2VxbChzYywgY3RsKSkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX2luaXQgcG9obWVsZnNfY29uZmlnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY25fYWRkX2NhbGxiYWNrKCZwb2htZWxmc19jbl9pZCwgInBvaG1lbGZzIiwgcG9obWVsZnNfY25fY2FsbGJhY2spOworfQorCit2b2lkIHBvaG1lbGZzX2NvbmZpZ19leGl0KHZvaWQpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYywgKnRtcDsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnLCAqZ3RtcDsKKworCWNuX2RlbF9jYWxsYmFjaygmcG9obWVsZnNfY25faWQpOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnLCBndG1wLCAmcG9obWVsZnNfY29uZmlnX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjLCB0bXAsICZnLT5jb25maWdfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCQlsaXN0X2RlbCgmYy0+Y29uZmlnX2VudHJ5KTsKKwkJCWtmcmVlKGMpOworCQl9CisKKwkJbGlzdF9kZWwoJmctPmdyb3VwX2VudHJ5KTsKKworCQlpZiAoZy0+aGFzaF9zdHJpbmcpCisJCQlrZnJlZShnLT5oYXNoX3N0cmluZyk7CisKKwkJaWYgKGctPmNpcGhlcl9zdHJpbmcpCisJCQlrZnJlZShnLT5jaXBoZXJfc3RyaW5nKTsKKworCQlrZnJlZShnKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY3J5cHRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkNzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jcnlwdG8uYwpAQCAtMCwwICsxLDg4MCBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2hhc2ggKnBvaG1lbGZzX2luaXRfaGFzaChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaDsKKworCWhhc2ggPSBjcnlwdG9fYWxsb2NfaGFzaChwc2ItPmhhc2hfc3RyaW5nLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKGhhc2gpKSB7CisJCWVyciA9IFBUUl9FUlIoaGFzaCk7CisJCWRwcmludGsoIiVzOiBpZHg6ICV1OiBmYWlsZWQgdG8gYWxsb2NhdGUgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgcHNiLT5pZHgsIHBzYi0+aGFzaF9zdHJpbmcsIGVycik7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGhhc2gpOworCisJaWYgKCFwc2ItPmhhc2hfa2V5c2l6ZSkKKwkJcmV0dXJuIGhhc2g7CisKKwllcnIgPSBjcnlwdG9faGFzaF9zZXRrZXkoaGFzaCwgcHNiLT5oYXNoX2tleSwgcHNiLT5oYXNoX2tleXNpemUpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGlkeDogJXU6IGZhaWxlZCB0byBzZXQga2V5IGZvciBoYXNoICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBwc2ItPmlkeCwgcHNiLT5oYXNoX3N0cmluZywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJcmV0dXJuIGhhc2g7CisKK2Vycl9vdXRfZnJlZToKKwljcnlwdG9fZnJlZV9oYXNoKGhhc2gpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnBvaG1lbGZzX2luaXRfY2lwaGVyKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWludCBlcnIgPSAtRUlOVkFMOworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyOworCisJaWYgKCFwc2ItPmNpcGhlcl9rZXlzaXplKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWNpcGhlciA9IGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKHBzYi0+Y2lwaGVyX3N0cmluZywgMCwgMCk7CisJaWYgKElTX0VSUihjaXBoZXIpKSB7CisJCWVyciA9IFBUUl9FUlIoY2lwaGVyKTsKKwkJZHByaW50aygiJXM6IGlkeDogJXU6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHBzYi0+aWR4LCBwc2ItPmNpcGhlcl9zdHJpbmcsIGVycik7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWNyeXB0b19hYmxrY2lwaGVyX2NsZWFyX2ZsYWdzKGNpcGhlciwgfjApOworCisJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNpcGhlciwgcHNiLT5jaXBoZXJfa2V5LCBwc2ItPmNpcGhlcl9rZXlzaXplKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoIiVzOiBpZHg6ICV1OiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBwc2ItPmlkeCwgcHNiLT5jaXBoZXJfc3RyaW5nLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gY2lwaGVyOworCitlcnJfb3V0X2ZyZWU6CisJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjaXBoZXIpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK2ludCBwb2htZWxmc19jcnlwdG9fZW5naW5lX2luaXQoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWludCBlcnI7CisKKwllLT5wYWdlX251bSA9IDA7CisKKwllLT5zaXplID0gUEFHRV9TSVpFOworCWUtPmRhdGEgPSBrbWFsbG9jKGUtPnNpemUsIEdGUF9LRVJORUwpOworCWlmICghZS0+ZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAocHNiLT5oYXNoX3N0cmluZykgeworCQllLT5oYXNoID0gcG9obWVsZnNfaW5pdF9oYXNoKHBzYik7CisJCWlmIChJU19FUlIoZS0+aGFzaCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZS0+aGFzaCk7CisJCQllLT5oYXNoID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQl9CisJfQorCisJaWYgKHBzYi0+Y2lwaGVyX3N0cmluZykgeworCQllLT5jaXBoZXIgPSBwb2htZWxmc19pbml0X2NpcGhlcihwc2IpOworCQlpZiAoSVNfRVJSKGUtPmNpcGhlcikpIHsKKwkJCWVyciA9IFBUUl9FUlIoZS0+Y2lwaGVyKTsKKwkJCWUtPmNpcGhlciA9IE5VTEw7CisJCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9oYXNoOgorCWNyeXB0b19mcmVlX2hhc2goZS0+aGFzaCk7CitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUoZS0+ZGF0YSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBwb2htZWxmc19jcnlwdG9fZW5naW5lX2V4aXQoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUpCit7CisJaWYgKGUtPmhhc2gpCisJCWNyeXB0b19mcmVlX2hhc2goZS0+aGFzaCk7CisJaWYgKGUtPmNpcGhlcikKKwkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihlLT5jaXBoZXIpOworCWtmcmVlKGUtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19jcnlwdG9fY29tcGxldGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19jb21wbGV0aW9uICpjID0gcmVxLT5kYXRhOworCisJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKworCWRwcmludGsoIiVzOiByZXE6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHJlcSwgZXJyKTsKKwljLT5lcnJvciA9IGVycjsKKwljb21wbGV0ZSgmYy0+Y29tcGxldGUpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjLAorCQl2b2lkICppdiwgaW50IGVuYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fY29tcGxldGlvbiBjb21wbGV0ZTsKKwlpbnQgZXJyOworCisJaW5pdF9jb21wbGV0aW9uKCZjb21wbGV0ZS5jb21wbGV0ZSk7CisJY29tcGxldGUuZXJyb3IgPSAtRUlOUFJPR1JFU1M7CisKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCisJCQkJCXBvaG1lbGZzX2NyeXB0b19jb21wbGV0ZSwgJmNvbXBsZXRlKTsKKworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZ19zcmMsIHNnX2RzdCwgc2dfc3JjLT5sZW5ndGgsIGl2KTsKKworCWlmIChlbmMpCisJCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQocmVxKTsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQocmVxKTsKKworCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgLUVJTlBST0dSRVNTOgorCQljYXNlIC1FQlVTWToKKwkJCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjb21wbGV0ZS5jb21wbGV0ZSwKKwkJCQkJdGltZW91dCk7CisJCQlpZiAoIWVycikKKwkJCQllcnIgPSAtRVRJTUVET1VUOworCQkJZWxzZQorCQkJCWVyciA9IGNvbXBsZXRlLmVycm9yOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfZGF0YShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwgdTY0IGNtZF9pdiwKKwkJdm9pZCAqZGF0YSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCBlcnI7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJaWYgKCFlLT5jaXBoZXIgJiYgIWUtPmhhc2gpCisJCXJldHVybiAwOworCisJZHByaW50aygiJXM6IGVuZzogJXAsIGl2OiAlbGx4LCBkYXRhOiAlcCwgcGFnZTogJXAvJWx1LCBzaXplOiAldS5cbiIsCisJCV9fZnVuY19fLCBlLCBjbWRfaXYsIGRhdGEsIHBhZ2UsIChwYWdlKT9wYWdlLT5pbmRleDowLCBzaXplKTsKKworCWlmIChkYXRhKSB7CisJCXNnX2luaXRfb25lKCZzZywgZGF0YSwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCQlzZ19zZXRfcGFnZSgmc2csIHBhZ2UsIHNpemUsIDApOworCX0KKworCWlmIChlLT5jaXBoZXIpIHsKKwkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YSArIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7CisJCXU4IGl2WzMyXTsKKworCQltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOworCQltZW1jcHkoaXYsICZjbWRfaXYsIHNpemVvZihjbWRfaXYpKTsKKworCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGUtPmNpcGhlcik7CisKKwkJZXJyID0gcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3MocmVxLCAmc2csICZzZywgaXYsIDAsIGUtPnRpbWVvdXQpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKGUtPmhhc2gpIHsKKwkJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCQl2b2lkICpkc3QgPSBlLT5kYXRhICsgZS0+c2l6ZS8yOworCisJCWRlc2MudGZtID0gZS0+aGFzaDsKKwkJZGVzYy5mbGFncyA9IDA7CisKKwkJZXJyID0gY3J5cHRvX2hhc2hfaW5pdCgmZGVzYyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQllcnIgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsICZzZywgc2l6ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQllcnIgPSBjcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZHN0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWVyciA9ICEhbWVtY21wKGRzdCwgZS0+ZGF0YSwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKSk7CisKKwkJaWYgKGVycikgeworI2lmZGVmIENPTkZJR19QT0hNRUxGU19ERUJVRworCQkJdW5zaWduZWQgaW50IGk7CisJCQl1bnNpZ25lZCBjaGFyICpyZWN2ID0gZS0+ZGF0YSwgKmNhbGMgPSBkc3Q7CisKKwkJCWRwcmludGsoIiVzOiBlbmc6ICVwLCBoYXNoOiAlcCwgY2lwaGVyOiAlcDogaXYgOiAlbGx4LCBoYXNoIG1pc21hdGNoIChyZWN2L2NhbGMpOiAiLAorCQkJCQlfX2Z1bmNfXywgZSwgZS0+aGFzaCwgZS0+Y2lwaGVyLCBjbWRfaXYpOworCQkJZm9yIChpPTA7IGk8Y3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKSB7CisjaWYgMAorCQkJCWRwcmludGthKCIlMDJ4ICIsIHJlY3ZbaV0pOworCQkJCWlmIChyZWN2W2ldICE9IGNhbGNbaV0pIHsKKwkJCQkJZHByaW50a2EoInwgY2FsYyBieXRlOiAlMDJ4LlxuIiwgY2FsY1tpXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbHNlCisJCQkJZHByaW50a2EoIiUwMngvJTAyeCAiLCByZWN2W2ldLCBjYWxjW2ldKTsKKyNlbmRpZgorCQkJfQorCQkJZHByaW50aygiXG4iKTsKKyNlbmRpZgorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCIlczogZW5nOiAlcCwgaGFzaDogJXAsIGNpcGhlcjogJXA6IGhhc2hlcyBtYXRjaGVkLlxuIiwKKwkJCQkJX19mdW5jX18sIGUsIGUtPmhhc2gsIGUtPmNpcGhlcik7CisJCX0KKwl9CisKKwlkcHJpbnRrKCIlczogZW5nOiAlcCwgc2l6ZTogJXUsIGhhc2g6ICVwLCBjaXBoZXI6ICVwOiBjb21wbGV0ZWQuXG4iLAorCQkJX19mdW5jX18sIGUsIGUtPnNpemUsIGUtPmhhc2gsIGUtPmNpcGhlcik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWRwcmludGsoIiVzOiBlbmc6ICVwLCBoYXNoOiAlcCwgY2lwaGVyOiAlcDogZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgZSwgZS0+aGFzaCwgZS0+Y2lwaGVyLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfdHJhbnNfaXRlcihzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLAorCQlpbnQgKCogaXRlcmF0b3IpIChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQoreworCXZvaWQgKmRhdGEgPSB0LT5pb3ZlYy5pb3ZfYmFzZSArIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSArIHQtPnBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemU7CisJdW5zaWduZWQgaW50IHNpemUgPSB0LT5pb3ZlYy5pb3ZfbGVuIC0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpIC0gdC0+cHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSBkYXRhOworCXVuc2lnbmVkIGludCBzeiwgcGFnZXMgPSB0LT5hdHRhY2hlZF9wYWdlcywgaSwgY3NpemUsIGNtZF9jbWQsIGRwYWdlX2lkeDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfc3JjLCBzZ19kc3Q7CisJaW50IGVycjsKKworCXdoaWxlIChzaXplKSB7CisJCWNtZCA9IGRhdGE7CisJCWNtZF9jbWQgPSBfX2JlMTZfdG9fY3B1KGNtZC0+Y21kKTsKKwkJY3NpemUgPSBfX2JlMzJfdG9fY3B1KGNtZC0+c2l6ZSk7CisJCWNtZC0+aXYgPSBfX2NwdV90b19iZTY0KGUtPml2KTsKKworCQlpZiAoY21kX2NtZCA9PSBORVRGU19SRUFEX1BBR0VTIHx8IGNtZF9jbWQgPT0gTkVURlNfUkVBRF9QQUdFKQorCQkJY3NpemUgPSBfX2JlMTZfdG9fY3B1KGNtZC0+ZXh0KTsKKworCQlzeiA9IGNzaXplICsgX19iZTE2X3RvX2NwdShjbWQtPmNwYWQpICsgc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpOworCisJCWRwcmludGsoIiVzOiBzaXplOiAldSwgc3o6ICV1LCBjbWRfc2l6ZTogJXUsIGNtZF9jcGFkOiAldS5cbiIsCisJCQkJX19mdW5jX18sIHNpemUsIHN6LCBfX2JlMzJfdG9fY3B1KGNtZC0+c2l6ZSksIF9fYmUxNl90b19jcHUoY21kLT5jcGFkKSk7CisKKwkJZGF0YSArPSBzejsKKwkJc2l6ZSAtPSBzejsKKworCQlzZ19pbml0X29uZSgmc2dfc3JjLCBjbWQtPmRhdGEsIHN6IC0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpKTsKKwkJc2dfaW5pdF9vbmUoJnNnX2RzdCwgY21kLT5kYXRhLCBzeiAtIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSk7CisKKwkJZXJyID0gaXRlcmF0b3IoZSwgJnNnX2RzdCwgJnNnX3NyYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghcGFnZXMpCisJCXJldHVybiAwOworCisJZHBhZ2VfaWR4ID0gMDsKKwlmb3IgKGk9MDsgaTx0LT5wYWdlX251bTsgKytpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gdC0+cGFnZXNbaV07CisJCXN0cnVjdCBwYWdlICpkcGFnZSA9IGUtPnBhZ2VzW2RwYWdlX2lkeF07CisKKwkJaWYgKCFwYWdlKQorCQkJY29udGludWU7CisKKwkJc2dfaW5pdF90YWJsZSgmc2dfc3JjLCAxKTsKKwkJc2dfaW5pdF90YWJsZSgmc2dfZHN0LCAxKTsKKwkJc2dfc2V0X3BhZ2UoJnNnX3NyYywgcGFnZSwgcGFnZV9wcml2YXRlKHBhZ2UpLCAwKTsKKwkJc2dfc2V0X3BhZ2UoJnNnX2RzdCwgZHBhZ2UsIHBhZ2VfcHJpdmF0ZShwYWdlKSwgMCk7CisKKwkJZXJyID0gaXRlcmF0b3IoZSwgJnNnX2RzdCwgJnNnX3NyYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXBhZ2VzLS07CisJCWlmICghcGFnZXMpCisJCQlicmVhazsKKwkJZHBhZ2VfaWR4Kys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfZW5jcnlwdF9pdGVyYXRvcihzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQoreworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGUtPmRhdGE7CisJdTggaXZbMzJdOworCisJbWVtc2V0KGl2LCAwLCBzaXplb2YoaXYpKTsKKworCW1lbWNweShpdiwgJmUtPml2LCBzaXplb2YoZS0+aXYpKTsKKworCXJldHVybiBwb2htZWxmc19jcnlwdG9fcHJvY2VzcyhyZXEsIHNnX2RzdCwgc2dfc3JjLCBpdiwgMSwgZS0+dGltZW91dCk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfZW5jcnlwdChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdGMpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0ID0gdGMtPnRyYW5zOworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplID0gJnRjLT5lbmc7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKKworCW1lbXNldChyZXEsIDAsIHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSk7CisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBlLT5jaXBoZXIpOworCisJZS0+aXYgPSBwb2htZWxmc19nZW5faXYodCk7CisKKwlyZXR1cm4gcG9obWVsZnNfdHJhbnNfaXRlcih0LCBlLCBwb2htZWxmc19lbmNyeXB0X2l0ZXJhdG9yKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19oYXNoX2l0ZXJhdG9yKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCit7CisJcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZShlLT5kYXRhLCBzZ19zcmMsIHNnX3NyYy0+bGVuZ3RoKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19oYXNoKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0YykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSA9ICZ0Yy0+ZW5nOworCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MgPSBlLT5kYXRhOworCXVuc2lnbmVkIGNoYXIgKmRzdCA9IHRjLT50cmFucy0+aW92ZWMuaW92X2Jhc2UgKyBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCk7CisJaW50IGVycjsKKworCWRlc2MtPnRmbSA9IGUtPmhhc2g7CisJZGVzYy0+ZmxhZ3MgPSAwOworCisJZXJyID0gY3J5cHRvX2hhc2hfaW5pdChkZXNjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcG9obWVsZnNfdHJhbnNfaXRlcih0Yy0+dHJhbnMsIGUsIHBvaG1lbGZzX2hhc2hfaXRlcmF0b3IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBkc3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl7CisJCXVuc2lnbmVkIGludCBpOworCQlkcHJpbnRrKCIlczogIiwgX19mdW5jX18pOworCQlmb3IgKGk9MDsgaTx0Yy0+cHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZTsgKytpKQorCQkJZHByaW50a2EoIiUwMnggIiwgZHN0W2ldKTsKKwkJZHByaW50a2EoIlxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2NyeXB0b19wYWdlc19mcmVlKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpPTA7IGk8ZS0+cGFnZV9udW07ICsraSkKKwkJX19mcmVlX3BhZ2UoZS0+cGFnZXNbaV0pOworCWtmcmVlKGUtPnBhZ2VzKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fcGFnZXNfYWxsb2Moc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXVuc2lnbmVkIGludCBpOworCisJZS0+cGFnZXMgPSBrbWFsbG9jKHBzYi0+dHJhbnNfbWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUtPnBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaT0wOyBpPHBzYi0+dHJhbnNfbWF4X3BhZ2VzOyArK2kpIHsKKwkJZS0+cGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWUtPnBhZ2VzW2ldKQorCQkJYnJlYWs7CisJfQorCisJZS0+cGFnZV9udW0gPSBpOworCWlmICghZS0+cGFnZV9udW0pCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShlLT5wYWdlcyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3N5c19jcnlwdG9fZXhpdF9vbmUoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSB0LT5wc2I7CisKKwlpZiAodC0+dGhyZWFkKQorCQlrdGhyZWFkX3N0b3AodC0+dGhyZWFkKTsKKworCW11dGV4X2xvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwlsaXN0X2RlbCgmdC0+dGhyZWFkX2VudHJ5KTsKKwlwc2ItPmNyeXB0b190aHJlYWRfbnVtLS07CisJbXV0ZXhfdW5sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisKKwlwb2htZWxmc19jcnlwdG9fZW5naW5lX2V4aXQoJnQtPmVuZyk7CisJcG9obWVsZnNfY3J5cHRvX3BhZ2VzX2ZyZWUoJnQtPmVuZyk7CisJa2ZyZWUodCk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX2ZpbmlzaChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBpbnQgZXJyKQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9IHQtPmlvdmVjLmlvdl9iYXNlOworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisKKwlpZiAobGlrZWx5KCFlcnIpKQorCQllcnIgPSBuZXRmc190cmFuc19maW5pc2hfc2VuZCh0LCBwc2IpOworCisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX3B1dCh0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcG9obWVsZnNfY3J5cHRvX3RocmVhZF9tYWtlX3JlYWR5KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0aCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHRoLT5wc2I7CisKKwl0aC0+cGFnZSA9IE5VTEw7CisJdGgtPnRyYW5zID0gTlVMTDsKKworCW11dGV4X2xvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwlsaXN0X21vdmVfdGFpbCgmdGgtPnRocmVhZF9lbnRyeSwgJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpOworCW11dGV4X3VubG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCXdha2VfdXAoJnBzYi0+d2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX3RocmVhZF90cmFucyhzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnRyYW5zOworCWludCBlcnIgPSAwOworCisJdHJhbnMgPSB0LT50cmFuczsKKwl0cmFucy0+ZW5nID0gTlVMTDsKKworCWlmICh0LT5lbmcuaGFzaCkgeworCQllcnIgPSBwb2htZWxmc19oYXNoKHQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfY29tcGxldGU7CisJfQorCisJaWYgKHQtPmVuZy5jaXBoZXIpIHsKKwkJZXJyID0gcG9obWVsZnNfZW5jcnlwdCh0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2NvbXBsZXRlOworCQl0cmFucy0+ZW5nID0gJnQtPmVuZzsKKwl9CisKK291dF9jb21wbGV0ZToKKwl0LT5wYWdlID0gTlVMTDsKKwl0LT50cmFucyA9IE5VTEw7CisKKwlpZiAoIXRyYW5zLT5lbmcpCisJCXBvaG1lbGZzX2NyeXB0b190aHJlYWRfbWFrZV9yZWFkeSh0KTsKKworCXBvaG1lbGZzX2NyeXB0b19maW5pc2godHJhbnMsIHQtPnBzYiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b190aHJlYWRfcGFnZShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSA9ICZ0LT5lbmc7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB0LT5wYWdlOworCWludCBlcnI7CisKKwlXQVJOX09OKCFQYWdlQ2hlY2tlZChwYWdlKSk7CisKKwllcnIgPSBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9kYXRhKGUsIGUtPml2LCBOVUxMLCBwYWdlLCB0LT5zaXplKTsKKwlpZiAoIWVycikKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCWVsc2UKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCXBvaG1lbGZzX2NyeXB0b190aHJlYWRfbWFrZV9yZWFkeSh0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX3RocmVhZF9mdW5jKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQgPSBkYXRhOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHQtPndhaXQsIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fAorCQkJCXQtPnRyYW5zIHx8IHQtPnBhZ2UpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKworCQlpZiAoIXQtPnRyYW5zICYmICF0LT5wYWdlKQorCQkJY29udGludWU7CisKKwkJZHByaW50aygiJXM6IHRocmVhZDogJXAsIHRyYW5zOiAlcCwgcGFnZTogJXAuXG4iLAorCQkJCV9fZnVuY19fLCB0LCB0LT50cmFucywgdC0+cGFnZSk7CisKKwkJaWYgKHQtPnRyYW5zKQorCQkJcG9obWVsZnNfY3J5cHRvX3RocmVhZF90cmFucyh0KTsKKwkJZWxzZSBpZiAodC0+cGFnZSkKKwkJCXBvaG1lbGZzX2NyeXB0b190aHJlYWRfcGFnZSh0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfY3J5cHRvX2ZsdXNoKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCA9IE5VTEw7CisKKwkJbXV0ZXhfbG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJCXQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkLCB0aHJlYWRfZW50cnkpOworCQkJbGlzdF9kZWxfaW5pdCgmdC0+dGhyZWFkX2VudHJ5KTsKKwkJfQorCQltdXRleF91bmxvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKworCQlpZiAodCkKKwkJCXBvaG1lbGZzX3N5c19jcnlwdG9fZXhpdF9vbmUodCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19zeXNfY3J5cHRvX2V4aXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwc2ItPmNyeXB0b19hY3RpdmVfbGlzdCkgfHwgIWxpc3RfZW1wdHkoJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpKSB7CisJCWRwcmludGsoIiVzOiBjcnlwdG9fdGhyZWFkX251bTogJXUuXG4iLCBfX2Z1bmNfXywgcHNiLT5jcnlwdG9fdGhyZWFkX251bSk7CisJCXBvaG1lbGZzX2NyeXB0b19mbHVzaChwc2IsICZwc2ItPmNyeXB0b19hY3RpdmVfbGlzdCk7CisJCXBvaG1lbGZzX2NyeXB0b19mbHVzaChwc2IsICZwc2ItPmNyeXB0b19yZWFkeV9saXN0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc3lzX2NyeXB0b19pbml0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0OworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmM7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdDsKKwlpbnQgZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3QgPSAmYy0+c3RhdGU7CisKKwkJZXJyID0gcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9pbml0KCZzdC0+ZW5nLCBwc2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZHByaW50aygiJXM6IHN0OiAlcCwgZW5nOiAlcCwgaGFzaDogJXAsIGNpcGhlcjogJXAuXG4iLAorCQkJCV9fZnVuY19fLCBzdCwgJnN0LT5lbmcsICZzdC0+ZW5nLmhhc2gsICZzdC0+ZW5nLmNpcGhlcik7CisJfQorCisJZm9yIChpPTA7IGk8cHNiLT5jcnlwdG9fdGhyZWFkX251bTsgKytpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCksIEdGUF9LRVJORUwpOworCQlpZiAoIXQpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9zdGF0ZV9lbmdpbmVzOworCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnQtPndhaXQpOworCisJCXQtPnBzYiA9IHBzYjsKKwkJdC0+dHJhbnMgPSBOVUxMOworCQl0LT5lbmcudGhyZWFkID0gdDsKKworCQllcnIgPSBwb2htZWxmc19jcnlwdG9fZW5naW5lX2luaXQoJnQtPmVuZywgcHNiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlX3N0YXRlX2VuZ2luZXM7CisKKwkJZXJyID0gcG9obWVsZnNfY3J5cHRvX3BhZ2VzX2FsbG9jKCZ0LT5lbmcsIHBzYik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCQl0LT50aHJlYWQgPSBrdGhyZWFkX3J1bihwb2htZWxmc19jcnlwdG9fdGhyZWFkX2Z1bmMsIHQsCisJCQkJInBvaG1lbGZzLWNyeXB0by0lZC0lZCIsIHBzYi0+aWR4LCBpKTsKKwkJaWYgKElTX0VSUih0LT50aHJlYWQpKSB7CisJCQllcnIgPSBQVFJfRVJSKHQtPnRocmVhZCk7CisJCQl0LT50aHJlYWQgPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKworCQlpZiAodC0+ZW5nLmNpcGhlcikKKwkJCXBzYi0+Y3J5cHRvX2FsaWduX3NpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9ibG9ja3NpemUodC0+ZW5nLmNpcGhlcik7CisKKwkJbXV0ZXhfbG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZ0LT50aHJlYWRfZW50cnksICZwc2ItPmNyeXB0b19yZWFkeV9saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJfQorCisJcHNiLT5jcnlwdG9fdGhyZWFkX251bSA9IGk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlwb2htZWxmc19zeXNfY3J5cHRvX2V4aXRfb25lKHQpOworZXJyX291dF9mcmVlX3N0YXRlX2VuZ2luZXM6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3QgPSAmYy0+c3RhdGU7CisJCXBvaG1lbGZzX2NyeXB0b19lbmdpbmVfZXhpdCgmc3QtPmVuZyk7CisJfQorZXJyX291dF9leGl0OgorCXBvaG1lbGZzX3N5c19jcnlwdG9fZXhpdChwc2IpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcG9obWVsZnNfY3J5cHRvX2V4aXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJcG9obWVsZnNfc3lzX2NyeXB0b19leGl0KHBzYik7CisKKwlrZnJlZShwc2ItPmhhc2hfc3RyaW5nKTsKKwlrZnJlZShwc2ItPmNpcGhlcl9zdHJpbmcpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0X2luaXRfY29tcGxldGUoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gcHJpdmF0ZTsKKworCXBzYi0+ZmxhZ3MgPSAtZXJyOworCWRwcmludGsoIiVzOiBlcnI6ICVkLlxuIiwgX19mdW5jX18sIGVycik7CisKKwl3YWtlX3VwKCZwc2ItPndhaXQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9faW5pdF9oYW5kc2hha2Uoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzICpjYXA7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCWNoYXIgKnN0cjsKKwlpbnQgZXJyID0gLUVOT01FTSwgc2l6ZTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMpICsKKwkJcHNiLT5jaXBoZXJfc3RybGVuICsgcHNiLT5oYXNoX3N0cmxlbiArIDI7IC8qIDAgYnl0ZXMgKi8KKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHNpemUsIDAsIDApOworCWlmICghdCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwl0LT5jb21wbGV0ZSA9IHBvaG1lbGZzX2NyeXB0X2luaXRfY29tcGxldGU7CisJdC0+cHJpdmF0ZSA9IHBzYjsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJY2FwID0gKHN0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzICopKGNtZCArIDEpOworCXN0ciA9IChjaGFyICopKGNhcCArIDEpOworCisJY21kLT5jbWQgPSBORVRGU19DQVBBQklMSVRJRVM7CisJY21kLT5pZCA9IFBPSE1FTEZTX0NSWVBUT19DQVBBQklMSVRJRVM7CisJY21kLT5zaXplID0gc2l6ZTsKKwljbWQtPnN0YXJ0ID0gMDsKKwljbWQtPmV4dCA9IDA7CisJY21kLT5jc2l6ZSA9IDA7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHNpemUpOworCisJY2FwLT5oYXNoX3N0cmxlbiA9IHBzYi0+aGFzaF9zdHJsZW47CisJaWYgKGNhcC0+aGFzaF9zdHJsZW4pIHsKKwkJc3ByaW50ZihzdHIsICIlcyIsIHBzYi0+aGFzaF9zdHJpbmcpOworCQlzdHIgKz0gY2FwLT5oYXNoX3N0cmxlbjsKKwl9CisKKwljYXAtPmNpcGhlcl9zdHJsZW4gPSBwc2ItPmNpcGhlcl9zdHJsZW47CisJY2FwLT5jaXBoZXJfa2V5c2l6ZSA9IHBzYi0+Y2lwaGVyX2tleXNpemU7CisJaWYgKGNhcC0+Y2lwaGVyX3N0cmxlbikKKwkJc3ByaW50ZihzdHIsICIlcyIsIHBzYi0+Y2lwaGVyX3N0cmluZyk7CisKKwluZXRmc19jb252ZXJ0X2NyeXB0b19jYXBhYmlsaXRpZXMoY2FwKTsKKworCXBzYi0+ZmxhZ3MgPSB+MDsKKwllcnIgPSBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBzYi0+d2FpdCwgKHBzYi0+ZmxhZ3MgIT0gfjApLAorCQkJcHNiLT53YWl0X29uX3BhZ2VfdGltZW91dCk7CisJaWYgKCFlcnIpCisJCWVyciA9IC1FVElNRURPVVQ7CisJZWxzZQorCQllcnIgPSAtcHNiLT5mbGFnczsKKworCWlmICghZXJyKQorCQlwc2ItPnBlcmZvcm1fY3J5cHRvID0gMTsKKwlwc2ItPmZsYWdzID0gMDsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCBORVRGU19DQVBBQklMSVRJRVMgcmVzcG9uc2UgY29tbWFuZAorCSAqIHNob3VsZCBzZXR1cCBzdXBlcmJsb2NrIGluIGEgd2F5LCB3aGljaCBpcyBhY2NlcHRpYmxlCisJICogZm9yIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIsIHNvIGlmIHNlcnZlciByZWZ1c2VzIGNvbm5lY3Rpb24sCisJICogaXQgd2lsbCBzZW5kIGVycm9yIGluIHRyYW5zYWN0aW9uIHJlc3BvbnNlLgorCSAqLworCisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19jcnlwdG9faW5pdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpbnQgZXJyOworCisJaWYgKCFwc2ItPmNpcGhlcl9zdHJpbmcgJiYgIXBzYi0+aGFzaF9zdHJpbmcpCisJCXJldHVybiAwOworCisJZXJyID0gcG9obWVsZnNfY3J5cHRvX2luaXRfaGFuZHNoYWtlKHBzYik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBvaG1lbGZzX3N5c19jcnlwdG9faW5pdChwc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fdGhyZWFkX2dldChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwkJaW50ICgqIGFjdGlvbikoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0ID0gTlVMTDsKKwlpbnQgZXJyOworCisJd2hpbGUgKCF0KSB7CisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBzYi0+d2FpdCwKKwkJCQkhbGlzdF9lbXB0eSgmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCksCisJCQkJcHNiLT53YWl0X29uX3BhZ2VfdGltZW91dCk7CisKKwkJdCA9IE5VTEw7CisJCWVyciA9IDA7CisJCW11dGV4X2xvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwc2ItPmNyeXB0b19yZWFkeV9saXN0KSkgeworCQkJdCA9IGxpc3RfZW50cnkocHNiLT5jcnlwdG9fcmVhZHlfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCwKKwkJCQkJdGhyZWFkX2VudHJ5KTsKKworCQkJbGlzdF9tb3ZlX3RhaWwoJnQtPnRocmVhZF9lbnRyeSwKKwkJCQkJJnBzYi0+Y3J5cHRvX2FjdGl2ZV9saXN0KTsKKworCQkJYWN0aW9uKHQsIGRhdGEpOworCQkJd2FrZV91cCgmdC0+d2FpdCk7CisKKwkJfQorCQltdXRleF91bmxvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3RyYW5zX2NyeXB0X2FjdGlvbihzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnRyYW5zID0gZGF0YTsKKworCW5ldGZzX3RyYW5zX2dldCh0cmFucyk7CisJdC0+dHJhbnMgPSB0cmFuczsKKworCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgdGhyZWFkOiAlcC5cbiIsIF9fZnVuY19fLCB0cmFucywgdHJhbnMtPmdlbiwgdCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb2htZWxmc190cmFuc19jcnlwdChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnRyYW5zLCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpZiAoKCFwc2ItPmhhc2hfc3RyaW5nICYmICFwc2ItPmNpcGhlcl9zdHJpbmcpIHx8ICFwc2ItPnBlcmZvcm1fY3J5cHRvKSB7CisJCW5ldGZzX3RyYW5zX2dldCh0cmFucyk7CisJCXJldHVybiBwb2htZWxmc19jcnlwdG9fZmluaXNoKHRyYW5zLCBwc2IsIDApOworCX0KKworCXJldHVybiBwb2htZWxmc19jcnlwdG9fdGhyZWFkX2dldChwc2IsIHBvaG1lbGZzX3RyYW5zX2NyeXB0X2FjdGlvbiwgdHJhbnMpOworfQorCitzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2lucHV0X2FjdGlvbl9kYXRhCit7CisJc3RydWN0IHBhZ2UJCQkqcGFnZTsKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZQkqZTsKKwl1NjQJCQkJaXY7CisJdW5zaWduZWQgaW50CQkJc2l6ZTsKK307CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRfaW5wdXRfcGFnZV9hY3Rpb24oc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19pbnB1dF9hY3Rpb25fZGF0YSAqYWN0ID0gZGF0YTsKKworCW1lbWNweSh0LT5lbmcuZGF0YSwgYWN0LT5lLT5kYXRhLCB0LT5wc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplKTsKKworCXQtPnNpemUgPSBhY3QtPnNpemU7CisJdC0+ZW5nLml2ID0gYWN0LT5pdjsKKworCXQtPnBhZ2UgPSBhY3QtPnBhZ2U7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9wYWdlKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHNpemUsIHU2NCBpdikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2lucHV0X2FjdGlvbl9kYXRhIGFjdDsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCWFjdC5wYWdlID0gcGFnZTsKKwlhY3QuZSA9IGU7CisJYWN0LnNpemUgPSBzaXplOworCWFjdC5pdiA9IGl2OworCisJZXJyID0gcG9obWVsZnNfY3J5cHRvX3RocmVhZF9nZXQoUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpLAorCQkJcG9obWVsZnNfY3J5cHRfaW5wdXRfcGFnZV9hY3Rpb24sICZhY3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQxMTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jCkBAIC0wLDAgKzEsMTA5MyBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY21wX2hhc2goc3RydWN0IHBvaG1lbGZzX25hbWUgKm4sIHUzMiBoYXNoKQoreworCWlmIChuLT5oYXNoID4gaGFzaCkKKwkJcmV0dXJuIC0xOworCWlmIChuLT5oYXNoIDwgaGFzaCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwb2htZWxmc19uYW1lICpwb2htZWxmc19zZWFyY2hfaGFzaF91bnByZWNpc2Uoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTMyIGhhc2gpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSBwaS0+aGFzaF9yb290LnJiX25vZGU7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKnRtcCA9IE5VTEw7CisJaW50IGNtcDsKKworCXdoaWxlIChuKSB7CisJCXRtcCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBwb2htZWxmc19uYW1lLCBoYXNoX25vZGUpOworCisJCWNtcCA9IHBvaG1lbGZzX2NtcF9oYXNoKHRtcCwgaGFzaCk7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCWJyZWFrOworCisJfQorCisJcmV0dXJuIHRtcDsKK30KKworc3RydWN0IHBvaG1lbGZzX25hbWUgKnBvaG1lbGZzX3NlYXJjaF9oYXNoKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHUzMiBoYXNoKQoreworCXN0cnVjdCBwb2htZWxmc19uYW1lICp0bXA7CisKKwl0bXAgPSBwb2htZWxmc19zZWFyY2hfaGFzaF91bnByZWNpc2UocGksIGhhc2gpOworCWlmICh0bXAgJiYgKHRtcC0+aGFzaCA9PSBoYXNoKSkKKwkJcmV0dXJuIHRtcDsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX3BvaG1lbGZzX25hbWVfZGVsKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbm9kZSkKK3sKKwlyYl9lcmFzZSgmbm9kZS0+aGFzaF9ub2RlLCAmcGFyZW50LT5oYXNoX3Jvb3QpOworfQorCisvKgorICogUmVtb3ZlIG5hbWUgY2FjaGUgZW50cnkgZnJvbSBpdHMgY2FjaGVzIGFuZCBmcmVlIGl0LgorICovCitzdGF0aWMgdm9pZCBwb2htZWxmc19uYW1lX2ZyZWUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpub2RlKQoreworCV9fcG9obWVsZnNfbmFtZV9kZWwocGFyZW50LCBub2RlKTsKKwlsaXN0X2RlbCgmbm9kZS0+c3luY19jcmVhdGVfZW50cnkpOworCWtmcmVlKG5vZGUpOworfQorCitzdGF0aWMgc3RydWN0IHBvaG1lbGZzX25hbWUgKnBvaG1lbGZzX2luc2VydF9oYXNoKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksCisJCXN0cnVjdCBwb2htZWxmc19uYW1lICpuZXcpCit7CisJc3RydWN0IHJiX25vZGUgKipuID0gJnBpLT5oYXNoX3Jvb3QucmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKnJldCA9IE5VTEwsICp0bXA7CisJaW50IGNtcDsKKworCXdoaWxlICgqbikgeworCQlwYXJlbnQgPSAqbjsKKworCQl0bXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lLCBoYXNoX25vZGUpOworCisJCWNtcCA9IHBvaG1lbGZzX2NtcF9oYXNoKHRtcCwgbmV3LT5oYXNoKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0bXA7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCIlczogZXhpc3Q6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBoYXNoOiAleCwgbGVuOiAldSwgZGF0YTogJyVzJywgIgorCQkJCSAgICAgICAgICAgIm5ldzogaW5vOiAlbGx1LCBoYXNoOiAleCwgbGVuOiAldSwgZGF0YTogJyVzJy5cbiIsCisJCQkJX19mdW5jX18sIHBpLT5pbm8sCisJCQkJcmV0LT5pbm8sIHJldC0+aGFzaCwgcmV0LT5sZW4sIHJldC0+ZGF0YSwKKwkJCQluZXctPmlubywgbmV3LT5oYXNoLCBuZXctPmxlbiwgbmV3LT5kYXRhKTsKKwkJcmV0LT5pbm8gPSBuZXctPmlubzsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyYl9saW5rX25vZGUoJm5ldy0+aGFzaF9ub2RlLCBwYXJlbnQsIG4pOworCXJiX2luc2VydF9jb2xvcigmbmV3LT5oYXNoX25vZGUsICZwaS0+aGFzaF9yb290KTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogRnJlZSBuYW1lIGNhY2hlIGZvciBnaXZlbiBpbm9kZS4KKyAqLwordm9pZCBwb2htZWxmc19mcmVlX25hbWVzKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50KQoreworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCisJZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJnBhcmVudC0+aGFzaF9yb290KTsgcmJfbm9kZTspIHsKKwkJbiA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBwb2htZWxmc19uYW1lLCBoYXNoX25vZGUpOworCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKKworCQlwb2htZWxmc19uYW1lX2ZyZWUocGFyZW50LCBuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2ZpeF9vZmZzZXQoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpub2RlKQoreworCXBhcmVudC0+dG90YWxfbGVuIC09IG5vZGUtPmxlbjsKK30KKworLyoKKyAqIEZyZWUgbmFtZSBjYWNoZSBlbnRyeSBoZWxwZXIuCisgKi8KK3ZvaWQgcG9obWVsZnNfbmFtZV9kZWwoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpub2RlKQoreworCXBvaG1lbGZzX2ZpeF9vZmZzZXQocGFyZW50LCBub2RlKTsKKwlwb2htZWxmc19uYW1lX2ZyZWUocGFyZW50LCBub2RlKTsKK30KKworLyoKKyAqIEluc2VydCBuZXcgbmFtZSBjYWNoZSBlbnRyeSBpbnRvIGFsbCBoYXNoIGNhY2hlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2luc2VydF9uYW1lKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbmFtZTsKKworCW5hbWUgPSBwb2htZWxmc19pbnNlcnRfaGFzaChwYXJlbnQsIG4pOworCWlmIChuYW1lKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXBhcmVudC0+dG90YWxfbGVuICs9IG4tPmxlbjsKKwlsaXN0X2FkZF90YWlsKCZuLT5zeW5jX2NyZWF0ZV9lbnRyeSwgJnBhcmVudC0+c3luY19jcmVhdGVfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIG5ldyBuYW1lIGNhY2hlIGVudHJ5LgorICovCitzdGF0aWMgc3RydWN0IHBvaG1lbGZzX25hbWUgKnBvaG1lbGZzX25hbWVfYWxsb2ModW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKworCW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfbmFtZSkgKyBsZW4sIEdGUF9LRVJORUwpOworCWlmICghbikKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmbi0+c3luY19jcmVhdGVfZW50cnkpOworCisJbi0+ZGF0YSA9IChjaGFyICopKG4rMSk7CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIEFkZCBuZXcgbmFtZSBlbnRyeSBpbnRvIGRpcmVjdG9yeSdzIGNhY2hlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2FkZF9kaXIoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LAorCQlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKm5waSwgc3RydWN0IHFzdHIgKnN0ciwgdW5zaWduZWQgaW50IG1vZGUsIGludCBsaW5rKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCisJbiA9IHBvaG1lbGZzX25hbWVfYWxsb2Moc3RyLT5sZW4gKyAxKTsKKwlpZiAoIW4pCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbi0+aW5vID0gbnBpLT5pbm87CisJbi0+bW9kZSA9IG1vZGU7CisJbi0+bGVuID0gc3RyLT5sZW47CisJbi0+aGFzaCA9IHN0ci0+aGFzaDsKKwlzcHJpbnRmKG4tPmRhdGEsICIlcyIsIHN0ci0+bmFtZSk7CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwllcnIgPSBwb2htZWxmc19pbnNlcnRfbmFtZShwYXJlbnQsIG4pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgIT0gLUVFWElTVCkKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQlrZnJlZShuKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWtmcmVlKG4pOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDcmVhdGUgbmV3IGlub2RlIGZvciBnaXZlbiBwYXJhbWV0ZXJzIChuYW1lLCBpbm9kZSBpbmZvLCBwYXJlbnQpLgorICogVGhpcyBkb2VzIG5vdCBjcmVhdGUgb2JqZWN0IG9uIHRoZSBzZXJ2ZXIsIGl0IHdpbGwgYmUgc3luY2VkIHRoZXJlIGR1cmluZyB3cml0ZWJhY2suCisgKi8KK3N0cnVjdCBwb2htZWxmc19pbm9kZSAqcG9obWVsZnNfbmV3X2lub2RlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCQlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHFzdHIgKnN0ciwKKwkJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8sIGludCBsaW5rKQoreworCXN0cnVjdCBpbm9kZSAqbmV3ID0gTlVMTDsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKm5waTsKKwlpbnQgZXJyID0gLUVFWElTVDsKKworCWRwcmludGsoIiVzOiBjcmVhdGluZyBpbm9kZTogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIHN0cjogJXAuXG4iLAorCQkJX19mdW5jX18sIChwYXJlbnQpP3BhcmVudC0+aW5vOjAsIGluZm8tPmlubywgc3RyKTsKKworCWVyciA9IC1FTk9NRU07CisJbmV3ID0gaWdldF9sb2NrZWQocHNiLT5zYiwgaW5mby0+aW5vKTsKKwlpZiAoIW5ldykKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlucGkgPSBQT0hNRUxGU19JKG5ldyk7CisJbnBpLT5pbm8gPSBpbmZvLT5pbm87CisJZXJyID0gMDsKKworCWlmIChuZXctPmlfc3RhdGUgJiBJX05FVykgeworCQlkcHJpbnRrKCIlczogZmlsbGluZyBWRlMgaW5vZGU6ICVsdS8lbGx1LlxuIiwKKwkJCQlfX2Z1bmNfXywgbmV3LT5pX2lubywgaW5mby0+aW5vKTsKKwkJcG9obWVsZnNfZmlsbF9pbm9kZShuZXcsIGluZm8pOworCisJCWlmIChTX0lTRElSKGluZm8tPm1vZGUpKSB7CisJCQlzdHJ1Y3QgcXN0ciBzOworCisJCQlzLm5hbWUgPSAiLiI7CisJCQlzLmxlbiA9IDE7CisJCQlzLmhhc2ggPSBqaGFzaChzLm5hbWUsIHMubGVuLCAwKTsKKworCQkJZXJyID0gcG9obWVsZnNfYWRkX2Rpcihwc2IsIG5waSwgbnBpLCAmcywgaW5mby0+bW9kZSwgMCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyX291dF9wdXQ7CisKKwkJCXMubmFtZSA9ICIuLiI7CisJCQlzLmxlbiA9IDI7CisJCQlzLmhhc2ggPSBqaGFzaChzLm5hbWUsIHMubGVuLCAwKTsKKworCQkJZXJyID0gcG9obWVsZnNfYWRkX2Rpcihwc2IsIG5waSwgKHBhcmVudCk/cGFyZW50Om5waSwgJnMsCisJCQkJCShwYXJlbnQpP3BhcmVudC0+dmZzX2lub2RlLmlfbW9kZTpucGktPnZmc19pbm9kZS5pX21vZGUsIDApOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9vdXRfcHV0OworCQl9CisJfQorCisJaWYgKHN0cikgeworCQlpZiAocGFyZW50KSB7CisJCQllcnIgPSBwb2htZWxmc19hZGRfZGlyKHBzYiwgcGFyZW50LCBucGksIHN0ciwgaW5mby0+bW9kZSwgbGluayk7CisKKwkJCWRwcmludGsoIiVzOiAlcyBpbnNlcnRlZCBuYW1lOiAnJXMnLCBuZXdfb2Zmc2V0OiAlbGx1LCBpbm86ICVsbHUsIHBhcmVudDogJWxsdS5cbiIsCisJCQkJCV9fZnVuY19fLCAoZXJyKT8idW5zdWNjZXNzZnVsbHkiOiJzdWNjZXNzZnVsbHkiLAorCQkJCQlzdHItPm5hbWUsIHBhcmVudC0+dG90YWxfbGVuLCBpbmZvLT5pbm8sIHBhcmVudC0+aW5vKTsKKworCQkJaWYgKGVyciAmJiBlcnIgIT0gLUVFWElTVCkKKwkJCQlnb3RvIGVycl9vdXRfcHV0OworCQl9CisJfQorCisJaWYgKG5ldy0+aV9zdGF0ZSAmIElfTkVXKSB7CisJCWlmIChwYXJlbnQpCisJCQltYXJrX2lub2RlX2RpcnR5KCZwYXJlbnQtPnZmc19pbm9kZSk7CisJCW1hcmtfaW5vZGVfZGlydHkobmV3KTsKKwl9CisKKwlzZXRfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmbnBpLT5zdGF0ZSk7CisJbnBpLT5sb2NrX3R5cGUgPSBQT0hNRUxGU19XUklURV9MT0NLOworCXVubG9ja19uZXdfaW5vZGUobmV3KTsKKworCXJldHVybiBucGk7CisKK2Vycl9vdXRfcHV0OgorCXByaW50aygiJXM6IHB1dHRpbmcgaW5vZGU6ICVwLCBucGk6ICVwLCBlcnJvcjogJWQuXG4iLCBfX2Z1bmNfXywgbmV3LCBucGksIGVycik7CisJaXB1dChuZXcpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVtb3RlX3N5bmNfY29tcGxldGUoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBwcml2YXRlOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGktPnZmc19pbm9kZS5pX3NiKTsKKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcGktPmlubywgZXJyKTsKKworCWlmIChlcnIpCisJCXBpLT5lcnJvciA9IGVycjsKKwl3YWtlX3VwKCZwc2ItPndhaXQpOworCXBvaG1lbGZzX3B1dF9pbm9kZShwaSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2ZSBkaXJlY3RvcnkgY29udGVudCBmcm9tIHRoZSBzZXJ2ZXIuCisgKiBUaGlzIHNob3VsZCBiZSBvbmx5IGRvbmUgZm9yIG9iamVjdHMsIHdoaWNoIHdlcmUgbm90IGNyZWF0ZWQgbG9jYWxseSwKKyAqIGFuZCB3aGljaCB3ZXJlIG5vdCBzeW5jZWQgcHJldmlvdXNseS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19zeW5jX3JlbW90ZV9kaXIoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJbG9uZyByZXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDAwKTsKKwlpbnQgZXJyOworCisJZHByaW50aygiJXM6IGRpcjogJWxsdSwgc3RhdGU6ICVseDogcmVtb3RlX3N5bmNlZDogJWQuXG4iLAorCQlfX2Z1bmNfXywgcGktPmlubywgcGktPnN0YXRlLCB0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKSk7CisKKwlpZiAodGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX0RJUl9TWU5DRUQsICZwaS0+c3RhdGUpKQorCQlyZXR1cm4gMDsKKworCWlmICghaWdyYWIoaW5vZGUpKSB7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWVyciA9IHBvaG1lbGZzX21ldGFfY29tbWFuZChwaSwgTkVURlNfUkVBRERJUiwgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCwKKwkJCXBvaG1lbGZzX3JlbW90ZV9zeW5jX2NvbXBsZXRlLCBwaSwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlwaS0+ZXJyb3IgPSAwOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBzYi0+d2FpdCwKKwkJCXRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9ESVJfU1lOQ0VELCAmcGktPnN0YXRlKSB8fCBwaS0+ZXJyb3IsIHJldCk7CisJZHByaW50aygiJXM6IGF3YWtlIGRpcjogJWxsdSwgcmV0OiAlbGQsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcGktPmlubywgcmV0LCBwaS0+ZXJyb3IpOworCWlmIChyZXQgPD0gMCkgeworCQllcnIgPSAtRVRJTUVET1VUOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAocGktPmVycm9yKQorCQlyZXR1cm4gcGktPmVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwljbGVhcl9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWRlMgcmVhZGRpciBjYWxsYmFjay4gU3luY3MgZGlyZWN0b3J5IGNvbnRlbnQgZnJvbSBzZXJ2ZXIgaWYgbmVlZGVkLAorICogYW5kIHByb3ZpZGVzIGRpcmVudHJ5IGluZm8gdG8gdGhlIHVzZXJzcGFjZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKKwlpbnQgZXJyID0gMCwgbW9kZTsKKwl1NjQgbGVuOworCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgZnBvczogJWxsdSwgaGFzaDogJTA4bHguXG4iLAorCQkJX19mdW5jX18sIHBpLT5pbm8sICh1NjQpZmlsZS0+Zl9wb3MsCisJCQkodW5zaWduZWQgbG9uZylmaWxlLT5wcml2YXRlX2RhdGEpOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBpLCAwLCB+MCwgUE9ITUVMRlNfUkVBRF9MT0NLKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcG9obWVsZnNfc3luY19yZW1vdGVfZGlyKHBpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSAmJiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpZmlsZS0+Zl9wb3MpKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnBpLT5vZmZzZXRfbG9jayk7CisJbiA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoX3VucHJlY2lzZShwaSwgKHVuc2lnbmVkIGxvbmcpZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKworCXdoaWxlIChuKSB7CisJCW1vZGUgPSAobi0+bW9kZSA+PiAxMikgJiAxNTsKKworCQlkcHJpbnRrKCIlczogb2Zmc2V0OiAlbGx1LCBwYXJlbnQgaW5vOiAlbGx1LCBuYW1lOiAnJXMnLCBsZW46ICV1LCBpbm86ICVsbHUsICIKKwkJCQkibW9kZTogJW8vJW8sIGZwb3M6ICVsbHUsIGhhc2g6ICUwOHguXG4iLAorCQkJCV9fZnVuY19fLCBmaWxlLT5mX3BvcywgcGktPmlubywgbi0+ZGF0YSwgbi0+bGVuLAorCQkJCW4tPmlubywgbi0+bW9kZSwgbW9kZSwgZmlsZS0+Zl9wb3MsIG4tPmhhc2gpOworCisJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopbi0+aGFzaDsKKworCQlsZW4gPSBuLT5sZW47CisJCWVyciA9IGZpbGxkaXIoZGlyZW50LCBuLT5kYXRhLCBuLT5sZW4sIGZpbGUtPmZfcG9zLCBuLT5pbm8sIG1vZGUpOworCisJCWlmIChlcnIgPCAwKSB7CisJCQlkcHJpbnRrKCIlczogZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBlcnIpOworCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJZmlsZS0+Zl9wb3MgKz0gbGVuOworCisJCXJiX25vZGUgPSByYl9uZXh0KCZuLT5oYXNoX25vZGUpOworCisJCWlmICghcmJfbm9kZSB8fCAocmJfbm9kZSA9PSAmbi0+aGFzaF9ub2RlKSkgeworCQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylmaWxlLT5mX3BvczsKKwkJCWJyZWFrOworCQl9CisKKwkJbiA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBwb2htZWxmc19uYW1lLCBoYXNoX25vZGUpOworCX0KKwltdXRleF91bmxvY2soJnBpLT5vZmZzZXRfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgbG9mZl90IHBvaG1lbGZzX2Rpcl9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3sKKwlmaWxlLT5mX3BvcyA9IG9mZnNldDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiBvZmZzZXQ7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9obWVsZnNfZGlyX2ZvcHMgPSB7CisJLm9wZW4gPSBwb2htZWxmc19kaXJfb3BlbiwKKwkucmVhZCA9IGdlbmVyaWNfcmVhZF9kaXIsCisJLmxsc2VlayA9IHBvaG1lbGZzX2Rpcl9sc2VlaywKKwkucmVhZGRpciA9IHBvaG1lbGZzX3JlYWRkaXIsCit9OworCisvKgorICogTG9va3VwIHNpbmdsZSBvYmplY3Qgb24gc2VydmVyLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2xvb2t1cF9zaW5nbGUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsCisJCXN0cnVjdCBxc3RyICpzdHIsIHU2NCBpbm8pCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwYXJlbnQtPnZmc19pbm9kZS5pX3NiKTsKKwlsb25nIHJldCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7CisJaW50IGVycjsKKworCXNldF9iaXQoTkVURlNfQ09NTUFORF9QRU5ESU5HLCAmcGFyZW50LT5zdGF0ZSk7CisJZXJyID0gcG9obWVsZnNfbWV0YV9jb21tYW5kX2RhdGEocGFyZW50LCBwYXJlbnQtPmlubywgTkVURlNfTE9PS1VQLAorCQkJKGNoYXIgKilzdHItPm5hbWUsIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QsIE5VTEwsIE5VTEwsIGlubyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSAwOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBzYi0+d2FpdCwKKwkJCSF0ZXN0X2JpdChORVRGU19DT01NQU5EX1BFTkRJTkcsICZwYXJlbnQtPnN0YXRlKSwgcmV0KTsKKwlpZiAocmV0ID09IDApCisJCWVyciA9IC1FVElNRURPVVQ7CisJZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCWVyciA9IC1FSU5UUjsKKworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwljbGVhcl9iaXQoTkVURlNfQ09NTUFORF9QRU5ESU5HLCAmcGFyZW50LT5zdGF0ZSk7CisKKwlwcmludGsoIiVzOiBmYWlsZWQ6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBuYW1lOiAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgaW5vLCBzdHItPm5hbWUsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVkZTIGxvb2t1cCBjYWxsYmFjay4KKyAqIFdlIGZpcnN0IHRyeSB0byBnZXQgaW5vZGUgbnVtYmVyIGZyb20gbG9jYWwgbmFtZSBjYWNoZSwgaWYgd2UgaGF2ZSBvbmUsCisgKiB0aGVuIGlub2RlIGNhbiBiZSBmb3VuZCBpbiBpbm9kZSBjYWNoZS4gSWYgdGhlcmUgaXMgbm8gaW5vZGUgb3Igbm8gb2JqZWN0IGluCisgKiBsb2NhbCBjYWNoZSwgdHJ5IHRvIGxvb2t1cCBpdCBvbiBzZXJ2ZXIuIFRoaXMgb25seSBzaG91bGQgYmUgZG9uZSBmb3IgZGlyZWN0b3JpZXMsCisgKiB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGxvY2FsbHksIG90aGVyd2lzZSByZW1vdGUgc2VydmVyIGRvZXMgbm90IGtub3cgYWJvdXQgZGlyIGF0IGFsbCwKKyAqIHNvIG5vIG5lZWQgdG8gdHJ5IHRvIGtub3cgdGhhdC4KKyAqLworc3RydWN0IGRlbnRyeSAqcG9obWVsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50ID0gUE9ITUVMRlNfSShkaXIpOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKKwlpbnQgZXJyLCBsb2NrX3R5cGUgPSBQT0hNRUxGU19SRUFEX0xPQ0ssIG5lZWRfbG9jazsKKwlzdHJ1Y3QgcXN0ciBzdHIgPSBkZW50cnktPmRfbmFtZTsKKworCWlmICgobmQtPmludGVudC5vcGVuLmZsYWdzICYgT19BQ0NNT0RFKSA+IDEpCisJCWxvY2tfdHlwZSA9IFBPSE1FTEZTX1dSSVRFX0xPQ0s7CisKKwluZWVkX2xvY2sgPSBwb2htZWxmc19uZWVkX2xvY2socGFyZW50LCBsb2NrX3R5cGUpOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBhcmVudCwgMCwgfjAsIGxvY2tfdHlwZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzdHIuaGFzaCA9IGpoYXNoKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwluID0gcG9obWVsZnNfc2VhcmNoX2hhc2gocGFyZW50LCBzdHIuaGFzaCk7CisJaWYgKG4pCisJCWlubyA9IG4tPmlubzsKKwltdXRleF91bmxvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCisJZHByaW50aygiJXM6IDEgaW5vOiAlbHUsIGlub2RlOiAlcCwgbmFtZTogJyVzJywgaGFzaDogJXgsIHBhcmVudF9zdGF0ZTogJWx4LlxuIiwKKwkJCV9fZnVuY19fLCBpbm8sIGlub2RlLCBzdHIubmFtZSwgc3RyLmhhc2gsIHBhcmVudC0+c3RhdGUpOworCisJaWYgKGlubykgeworCQlpbm9kZSA9IGlsb29rdXAoZGlyLT5pX3NiLCBpbm8pOworCQlpZiAoaW5vZGUpCisJCQlnb3RvIG91dDsKKwl9CisKKwlkcHJpbnRrKCIlczogZGlyOiAlcCwgZGlyX2lubzogJWxsdSwgbmFtZTogJyVzJywgbGVuOiAldSwgZGlyX3N0YXRlOiAlbHgsIGlubzogJWx1LlxuIiwKKwkJCV9fZnVuY19fLCBkaXIsIHBhcmVudC0+aW5vLAorCQkJc3RyLm5hbWUsIHN0ci5sZW4sIHBhcmVudC0+c3RhdGUsIGlubyk7CisKKwlpZiAoIWlubykgeworCQlpZiAoIW5lZWRfbG9jaykKKwkJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHBvaG1lbGZzX2xvb2t1cF9zaW5nbGUocGFyZW50LCAmc3RyLCBpbm8pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJaWYgKCFpbm8pIHsKKwkJbXV0ZXhfbG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJCW4gPSBwb2htZWxmc19zZWFyY2hfaGFzaChwYXJlbnQsIHN0ci5oYXNoKTsKKwkJaWYgKG4pCisJCQlpbm8gPSBuLT5pbm87CisJCW11dGV4X3VubG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJfQorCisJaWYgKGlubykgeworCQlpbm9kZSA9IGlsb29rdXAoZGlyLT5pX3NiLCBpbm8pOworCQlwcmludGsoIiVzOiBzZWNvbmQgbG9va3VwIGlubzogJWx1LCBpbm9kZTogJXAsIG5hbWU6ICclcycsIGhhc2g6ICV4LlxuIiwKKwkJCQlfX2Z1bmNfXywgaW5vLCBpbm9kZSwgc3RyLm5hbWUsIHN0ci5oYXNoKTsKKwkJaWYgKCFpbm9kZSkgeworCQkJcHJpbnRrKCIlczogTm8gaW5vZGUgZm9yIGlubzogJWx1LCBuYW1lOiAnJXMnLCBoYXNoOiAleC5cbiIsCisJCQkJX19mdW5jX18sIGlubywgc3RyLm5hbWUsIHN0ci5oYXNoKTsKKwkJCS8vcmV0dXJuIE5VTEw7CisJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50aygiJXM6IE5vIGlub2RlIG51bWJlciA6IG5hbWU6ICclcycsIGhhc2g6ICV4LlxuIiwKKwkJCV9fZnVuY19fLCBzdHIubmFtZSwgc3RyLmhhc2gpOworCX0KK291dDoKKwlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Cit9CisKKy8qCisgKiBDcmVhdGUgbmV3IG9iamVjdCBpbiBsb2NhbCBjYWNoZS4gT2JqZWN0IHdpbGwgYmUgc3luY2VkIHRvIHNlcnZlcgorICogZHVyaW5nIHdyaXRlYmFjayBmb3IgZ2l2ZW4gaW5vZGUuCisgKi8KK3N0cnVjdCBwb2htZWxmc19pbm9kZSAqcG9obWVsZnNfY3JlYXRlX2VudHJ5X2xvY2FsKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqc3RyLCB1NjQgc3RhcnQsIGludCBtb2RlKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqbnBpOworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvIGluZm87CisKKwlkcHJpbnRrKCIlczogbmFtZTogJyVzJywgbW9kZTogJW8sIHN0YXJ0OiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBzdHItPm5hbWUsIG1vZGUsIHN0YXJ0KTsKKworCWluZm8ubW9kZSA9IG1vZGU7CisJaW5mby5pbm8gPSBzdGFydDsKKworCWlmICghc3RhcnQpCisJCWluZm8uaW5vID0gcG9obWVsZnNfbmV3X2lubyhwc2IpOworCisJaW5mby5ubGluayA9IFNfSVNESVIobW9kZSk/MjoxOworCWluZm8udWlkID0gY3VycmVudF9mc3VpZCgpOworCWluZm8uZ2lkID0gY3VycmVudF9mc2dpZCgpOworCWluZm8uc2l6ZSA9IDA7CisJaW5mby5ibG9ja3NpemUgPSA1MTI7CisJaW5mby5ibG9ja3MgPSAwOworCWluZm8ucmRldiA9IDA7CisJaW5mby52ZXJzaW9uID0gMDsKKworCW5waSA9IHBvaG1lbGZzX25ld19pbm9kZShwc2IsIHBhcmVudCwgc3RyLCAmaW5mbywgISFzdGFydCk7CisJaWYgKElTX0VSUihucGkpKSB7CisJCWVyciA9IFBUUl9FUlIobnBpKTsKKwkJZ290byBlcnJfb3V0X3VubG9jazsKKwl9CisKKwlyZXR1cm4gbnBpOworCitlcnJfb3V0X3VubG9jazoKKwlkcHJpbnRrKCIlczogZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBlcnIpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qCisgKiBDcmVhdGUgbG9jYWwgb2JqZWN0IGFuZCBiaW5kIGl0IHRvIGRlbnRyeS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19jcmVhdGVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTY0IHN0YXJ0LCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGRpci0+aV9zYik7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpucGksICpwYXJlbnQ7CisJc3RydWN0IHFzdHIgc3RyID0gZGVudHJ5LT5kX25hbWU7CisJaW50IGVycjsKKworCXBhcmVudCA9IFBPSE1FTEZTX0koZGlyKTsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwYXJlbnQsIDAsIH4wLCBQT0hNRUxGU19XUklURV9MT0NLKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3RyLmhhc2ggPSBqaGFzaChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJbnBpID0gcG9obWVsZnNfY3JlYXRlX2VudHJ5X2xvY2FsKHBzYiwgcGFyZW50LCAmc3RyLCBzdGFydCwgbW9kZSk7CisJaWYgKElTX0VSUihucGkpKQorCQlyZXR1cm4gUFRSX0VSUihucGkpOworCisJZF9pbnN0YW50aWF0ZShkZW50cnksICZucGktPnZmc19pbm9kZSk7CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm9kZTogJWxsdSwgbmFtZTogJyVzJywgcGFyZW50X25saW5rOiAlZCwgbmxpbms6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgbnBpLT5pbm8sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkoc2lnbmVkKWRpci0+aV9ubGluaywgKHNpZ25lZClucGktPnZmc19pbm9kZS5pX25saW5rKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVkZTIGNyZWF0ZSBhbmQgbWtkaXIgY2FsbGJhY2tzLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJcmV0dXJuIHBvaG1lbGZzX2NyZWF0ZV9lbnRyeShkaXIsIGRlbnRyeSwgMCwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJaW50IGVycjsKKworCWlub2RlX2luY19saW5rX2NvdW50KGRpcik7CisJZXJyID0gcG9obWVsZnNfY3JlYXRlX2VudHJ5KGRpciwgZGVudHJ5LCAwLCBtb2RlIHwgU19JRkRJUik7CisJaWYgKGVycikKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVtb3ZlX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihkaXItPmlfc2IpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQgPSBQT0hNRUxGU19JKGRpciksICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCWludCBlcnIgPSAtRU5PRU5UOworCXN0cnVjdCBxc3RyIHN0ciA9IGRlbnRyeS0+ZF9uYW1lOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBhcmVudCwgMCwgfjAsIFBPSE1FTEZTX1dSSVRFX0xPQ0spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzdHIuaGFzaCA9IGpoYXNoKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwlkcHJpbnRrKCIlczogZGlyX2lubzogJWxsdSwgaW5vZGU6ICVsbHUsIG5hbWU6ICclcycsIG5saW5rOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIHBpLT5pbm8sCisJCQlzdHIubmFtZSwgKHNpZ25lZClpbm9kZS0+aV9ubGluayk7CisKKwlCVUdfT04oIWlub2RlKTsKKworCW11dGV4X2xvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCW4gPSBwb2htZWxmc19zZWFyY2hfaGFzaChwYXJlbnQsIHN0ci5oYXNoKTsKKwlpZiAobikgeworCQlwb2htZWxmc19maXhfb2Zmc2V0KHBhcmVudCwgbik7CisJCWlmICh0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKSkgeworCQkJcG9obWVsZnNfcmVtb3ZlX2NoaWxkKHBpLCBuKTsKKwkJfQorCQlwb2htZWxmc19uYW1lX2ZyZWUocGFyZW50LCBuKTsKKwkJZXJyID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCWlmICghZXJyKSB7CisJCXBzYi0+YXZhaWxfc2l6ZSArPSBpbm9kZS0+aV9zaXplOworCisJCXBvaG1lbGZzX2lub2RlX2RlbF9pbm9kZShwc2IsIHBpKTsKKworCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CisKKwkJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7CisJCWlmIChpbm9kZS0+aV9ubGluaykKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwl9CisJZHByaW50aygiJXM6IGlub2RlOiAlcCwgbG9jazogJWxkLCB1bmhhc2hlZDogJWQuXG4iLAorCQlfX2Z1bmNfXywgcGksIGlub2RlLT5pX3N0YXRlICYgSV9MT0NLLCBobGlzdF91bmhhc2hlZCgmaW5vZGUtPmlfaGFzaCkpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFVubGluayBhbmQgcm1kaXIgVkZTIGNhbGxiYWNrcy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gcG9obWVsZnNfcmVtb3ZlX2VudHJ5KGRpciwgZGVudHJ5KTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlub2RlOiAlbGx1LCBuYW1lOiAnJXMnLCBwYXJlbnRfbmxpbms6ICVkLCBubGluazogJWQuXG4iLAorCQkJX19mdW5jX18sIFBPSE1FTEZTX0koZGlyKS0+aW5vLCBQT0hNRUxGU19JKGlub2RlKS0+aW5vLAorCQkJZGVudHJ5LT5kX25hbWUubmFtZSwgKHNpZ25lZClkaXItPmlfbmxpbmssIChzaWduZWQpaW5vZGUtPmlfbmxpbmspOworCisJZXJyID0gcG9obWVsZnNfcmVtb3ZlX2VudHJ5KGRpciwgZGVudHJ5KTsKKwlpZiAoIWVycikgeworCQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIExpbmsgY3JlYXRpb24gaXMgc3luY2hyb25vdXMuCisgKiBJJ20gbGF6eS4KKyAqIEVhcnRoIGlzIHNvbWV3aGF0IHJvdW5kLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyZWF0ZV9saW5rKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqb2JqLAorCQlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnRhcmdldCwgc3RydWN0IHFzdHIgKnRzdHIpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHBhcmVudC0+dmZzX2lub2RlLmlfc2I7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihzYik7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwl2b2lkICpkYXRhOworCWludCBlcnIsIHBhcmVudF9sZW4sIHRhcmdldF9sZW4gPSAwLCBjdXJfbGVuLCBwYXRoX3NpemUgPSAwOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBhcmVudCwgMCwgfjAsIFBPSE1FTEZTX1dSSVRFX0xPQ0spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzYi0+c19vcC0+d3JpdGVfaW5vZGUoJnBhcmVudC0+dmZzX2lub2RlLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWlmICh0c3RyKQorCQl0YXJnZXRfbGVuID0gdHN0ci0+bGVuOworCisJcGFyZW50X2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBhcmVudCk7CisJaWYgKHRhcmdldCkKKwkJdGFyZ2V0X2xlbiArPSBwb2htZWxmc19wYXRoX2xlbmd0aCh0YXJnZXQpOworCisJaWYgKHBhcmVudF9sZW4gPCAwKSB7CisJCWVyciA9IHBhcmVudF9sZW47CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmICh0YXJnZXRfbGVuIDwgMCkgeworCQllcnIgPSB0YXJnZXRfbGVuOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBwYXJlbnRfbGVuICsgdGFyZ2V0X2xlbiArIG9iai0+bGVuICsgMiwgMCwgMCk7CisJaWYgKCF0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKwljdXJfbGVuID0gbmV0ZnNfdHJhbnNfY3VyX2xlbih0KTsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJaWYgKElTX0VSUihjbWQpKSB7CisJCWVyciA9IFBUUl9FUlIoY21kKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJZGF0YSA9ICh2b2lkICopKGNtZCArIDEpOworCWN1cl9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpOworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBhcmVudCwgZGF0YSwgcGFyZW50X2xlbik7CisJaWYgKGVyciA+IDApIHsKKwkJLyogRG8gbm90IHBsYWNlIG51bGwtYnl0ZSBiZWZvcmUgdGhlIHNsYXNoICovCisJCXBhdGhfc2l6ZSA9IGVyciAtIDE7CisJCWN1cl9sZW4gLT0gcGF0aF9zaXplOworCisJCWVyciA9IHNucHJpbnRmKGRhdGEgKyBwYXRoX3NpemUsIGN1cl9sZW4sICIvJXN8Iiwgb2JqLT5uYW1lKTsKKworCQlwYXRoX3NpemUgKz0gZXJyOworCQljdXJfbGVuIC09IGVycjsKKworCQljbWQtPmV4dCA9IHBhdGhfc2l6ZSAtIDE7IC8qIE5vIHwgc3ltYm9sICovCisKKwkJaWYgKHRhcmdldCkgeworCQkJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHRhcmdldCwgZGF0YSArIHBhdGhfc2l6ZSwgdGFyZ2V0X2xlbik7CisJCQlpZiAoZXJyID4gMCkgeworCQkJCXBhdGhfc2l6ZSArPSBlcnI7CisJCQkJY3VyX2xlbiAtPSBlcnI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwljbWQtPnN0YXJ0ID0gMDsKKworCWlmICghdGFyZ2V0ICYmIHRzdHIpIHsKKwkJaWYgKHRzdHItPmxlbiA+IGN1cl9sZW4gLSAxKSB7CisJCQllcnIgPSAtRU5BTUVUT09MT05HOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKworCQllcnIgPSBzbnByaW50ZihkYXRhICsgcGF0aF9zaXplLCBjdXJfbGVuLCAiJXMiLCB0c3RyLT5uYW1lKSArIDE7IC8qIDAtYnl0ZSAqLworCQlwYXRoX3NpemUgKz0gZXJyOworCQljdXJfbGVuIC09IGVycjsKKwkJY21kLT5zdGFydCA9IDE7CisJfQorCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgb2JqOiAnJXMnLCB0YXJnZXRfaW5vZGU6ICVsbHUsIHRhcmdldF9zdHI6ICclcycsIGZ1bGw6ICclcycuXG4iLAorCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBvYmotPm5hbWUsICh0YXJnZXQpP3RhcmdldC0+aW5vOjAsICh0c3RyKT90c3RyLT5uYW1lOk5VTEwsCisJCQkoY2hhciAqKWRhdGEpOworCisJY21kLT5jbWQgPSBORVRGU19MSU5LOworCWNtZC0+c2l6ZSA9IHBhdGhfc2l6ZTsKKwljbWQtPmlkID0gcGFyZW50LT5pbm87CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgcGF0aF9zaXplKTsKKworCWVyciA9IG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiAgVkZTIGhhcmQgYW5kIHNvZnQgbGluayBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCWludCBlcnI7CisJc3RydWN0IHFzdHIgc3RyID0gZGVudHJ5LT5kX25hbWU7CisKKwlzdHIuaGFzaCA9IGpoYXNoKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwllcnIgPSBpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUoaW5vZGUsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwb2htZWxmc19jcmVhdGVfbGluayhQT0hNRUxGU19JKGRpciksICZzdHIsIHBpLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHBvaG1lbGZzX2NyZWF0ZV9lbnRyeShkaXIsIGRlbnRyeSwgcGktPmlubywgaW5vZGUtPmlfbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQoreworCXN0cnVjdCBxc3RyIHN5bV9zdHI7CisJc3RydWN0IHFzdHIgc3RyID0gZGVudHJ5LT5kX25hbWU7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZXJyOworCisJc3RyLmhhc2ggPSBqaGFzaChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJc3ltX3N0ci5uYW1lID0gc3ltbmFtZTsKKwlzeW1fc3RyLmxlbiA9IHN0cmxlbihzeW1uYW1lKTsKKworCWVyciA9IHBvaG1lbGZzX2NyZWF0ZV9saW5rKFBPSE1FTEZTX0koZGlyKSwgJnN0ciwgTlVMTCwgJnN5bV9zdHIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gcG9obWVsZnNfY3JlYXRlX2VudHJ5KGRpciwgZGVudHJ5LCAwLCBTX0lGTE5LIHwgU19JUldYVSB8IFNfSVJXWEcgfCBTX0lSV1hPKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCisJZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBzeW1fc3RyLmxlbiArIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wdXQ6CisJaXB1dChpbm9kZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zZW5kX3JlbmFtZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwKKwkJc3RydWN0IHFzdHIgKnN0cikKK3sKKwlpbnQgcGF0aF9sZW4sIGVyciwgdG90YWxfbGVuID0gMCwgaW5vZGVfbGVuLCBwYXJlbnRfbGVuOworCWNoYXIgKnBhdGg7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBpLT52ZnNfaW5vZGUuaV9zYik7CisKKwlwYXJlbnRfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGFyZW50KTsKKwlpbm9kZV9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisKKwlpZiAocGFyZW50X2xlbiA8IDAgfHwgaW5vZGVfbGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXRoX2xlbiA9IHBhcmVudF9sZW4gKyBpbm9kZV9sZW4gKyBzdHItPmxlbiArIDM7CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBwYXRoX2xlbiwgMCwgMCk7CisJaWYgKCF0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJcGF0aCA9IChjaGFyICopKGNtZCArIDEpOworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBwYXRoLCBpbm9kZV9sZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCisJY21kLT5leHQgPSBlcnI7CisKKwlwYXRoICs9IGVycjsKKwl0b3RhbF9sZW4gKz0gZXJyOworCXBhdGhfbGVuIC09IGVycjsKKworCSpwYXRoID0gJ3wnOworCXBhdGgrKzsKKwl0b3RhbF9sZW4rKzsKKwlwYXRoX2xlbi0tOworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBhcmVudCwgcGF0aCwgcGFyZW50X2xlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF91bmxvY2s7CisKKwkvKgorCSAqIERvIG5vdCBwbGFjZSBhIG51bGwtYnl0ZSBiZWZvcmUgdGhlIGZpbmFsIHNsYXNoIGFuZCB0aGUgbmFtZS4KKwkgKi8KKwllcnItLTsKKwlwYXRoICs9IGVycjsKKwl0b3RhbF9sZW4gKz0gZXJyOworCXBhdGhfbGVuIC09IGVycjsKKworCWVyciA9IHNucHJpbnRmKHBhdGgsIHBhdGhfbGVuIC0gMSwgIi8lcyIsIHN0ci0+bmFtZSk7CisKKwl0b3RhbF9sZW4gKz0gZXJyICsgMTsgLyogMCBzeW1ib2wgKi8KKwlwYXRoX2xlbiAtPSBlcnIgKyAxOworCisJY21kLT5jbWQgPSBORVRGU19SRU5BTUU7CisJY21kLT5pZCA9IHBpLT5pbm87CisJY21kLT5zdGFydCA9IHBhcmVudC0+aW5vOworCWNtZC0+c2l6ZSA9IHRvdGFsX2xlbjsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCB0b3RhbF9sZW4pOworCisJcmV0dXJuIG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCitlcnJfb3V0X3VubG9jazoKKwluZXRmc190cmFuc19mcmVlKHQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCXN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKm9sZF9wYXJlbnQsICpwaSwgKm5ld19wYXJlbnQ7CisJc3RydWN0IHFzdHIgc3RyID0gbmV3X2RlbnRyeS0+ZF9uYW1lOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCXVuc2lnbmVkIGludCBvbGRfaGFzaDsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCXBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJb2xkX3BhcmVudCA9IFBPSE1FTEZTX0kob2xkX2Rpcik7CisKKwlpZiAobmV3X2RpcikgeworCQluZXdfZGlyLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZShuZXdfZGlyLCAwKTsKKwl9CisKKwlvbGRfaGFzaCA9IGpoYXNoKG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLCBvbGRfZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKwlzdHIuaGFzaCA9IGpoYXNoKG5ld19kZW50cnktPmRfbmFtZS5uYW1lLCBuZXdfZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCXN0ci5sZW4gPSBuZXdfZGVudHJ5LT5kX25hbWUubGVuOworCXN0ci5uYW1lID0gbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWU7CisJc3RyLmhhc2ggPSBqaGFzaChuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwlpZiAobmV3X2RpcikgeworCQluZXdfcGFyZW50ID0gUE9ITUVMRlNfSShuZXdfZGlyKTsKKwkJZXJyID0gLUVOT1RFTVBUWTsKKworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJgorCQkJCW5ld19wYXJlbnQtPnRvdGFsX2xlbiA8PSAzKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfSBlbHNlIHsKKwkJbmV3X3BhcmVudCA9IG9sZF9wYXJlbnQ7CisJfQorCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgcGFyZW50OiAlbGx1LCBuYW1lOiAnJXMnIC0+IHBhcmVudDogJWxsdSwgbmFtZTogJyVzJywgaV9zaXplOiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBwaS0+aW5vLCBvbGRfcGFyZW50LT5pbm8sIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJbmV3X3BhcmVudC0+aW5vLCBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwgaW5vZGUtPmlfc2l6ZSk7CisKKwlpZiAodGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSkgJiYKKwkJCXRlc3RfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKSkgeworCQllcnIgPSBwb2htZWxmc19zZW5kX3JlbmFtZShwaSwgbmV3X3BhcmVudCwgJnN0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwluID0gcG9obWVsZnNfbmFtZV9hbGxvYyhzdHIubGVuICsgMSk7CisJaWYgKCFuKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW11dGV4X2xvY2soJm5ld19wYXJlbnQtPm9mZnNldF9sb2NrKTsKKwluLT5pbm8gPSBwaS0+aW5vOworCW4tPm1vZGUgPSBpbm9kZS0+aV9tb2RlOworCW4tPmxlbiA9IHN0ci5sZW47CisJbi0+aGFzaCA9IHN0ci5oYXNoOworCXNwcmludGYobi0+ZGF0YSwgIiVzIiwgc3RyLm5hbWUpOworCisJZXJyID0gcG9obWVsZnNfaW5zZXJ0X25hbWUobmV3X3BhcmVudCwgbik7CisJbXV0ZXhfdW5sb2NrKCZuZXdfcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW11dGV4X2xvY2soJm9sZF9wYXJlbnQtPm9mZnNldF9sb2NrKTsKKwluID0gcG9obWVsZnNfc2VhcmNoX2hhc2gob2xkX3BhcmVudCwgb2xkX2hhc2gpOworCWlmIChuKQorCQlwb2htZWxmc19uYW1lX2RlbChvbGRfcGFyZW50LCBuKTsKKwltdXRleF91bmxvY2soJm9sZF9wYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCW1hcmtfaW5vZGVfZGlydHkoJm5ld19wYXJlbnQtPnZmc19pbm9kZSk7CisKKwlXQVJOX09OX09OQ0UobGlzdF9lbXB0eSgmaW5vZGUtPmlfZGVudHJ5KSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCisJY2xlYXJfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFBPSE1FTEZTIGRpcmVjdG9yeSBpbm9kZSBvcGVyYXRpb25zLgorICovCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwb2htZWxmc19kaXJfaW5vZGVfb3BzID0geworCS5saW5rCQk9IHBvaG1lbGZzX2xpbmssCisJLnN5bWxpbmsJPSBwb2htZWxmc19zeW1saW5rLAorCS51bmxpbmsJCT0gcG9obWVsZnNfdW5saW5rLAorCS5ta2RpcgkJPSBwb2htZWxmc19ta2RpciwKKwkucm1kaXIJCT0gcG9obWVsZnNfcm1kaXIsCisJLmNyZWF0ZQkJPSBwb2htZWxmc19jcmVhdGUsCisJLmxvb2t1cCAJPSBwb2htZWxmc19sb29rdXAsCisJLnNldGF0dHIJPSBwb2htZWxmc19zZXRhdHRyLAorCS5yZW5hbWUJCT0gcG9obWVsZnNfcmVuYW1lLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmMTY1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCkBAIC0wLDAgKzEsMTk3NiBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKKyNkZWZpbmUgUE9ITUVMRlNfTUFHSUNfTlVNCTB4NTA0ZjQ4MmUKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwb2htZWxmc19pbm9kZV9jYWNoZTsKKworLyoKKyAqIFJlbW92ZXMgaW5vZGUgZnJvbSBhbGwgdHJlZXMsIGRyb3BzIGxvY2FsIG5hbWUgY2FjaGUgYW5kIHJlbW92ZXMgYWxsIHF1ZXVlZAorICogcmVxdWVzdHMgZm9yIG9iamVjdCByZW1vdmFsLgorICovCit2b2lkIHBvaG1lbGZzX2lub2RlX2RlbF9pbm9kZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSkKK3sKKwltdXRleF9sb2NrKCZwaS0+b2Zmc2V0X2xvY2spOworCXBvaG1lbGZzX2ZyZWVfbmFtZXMocGkpOworCW11dGV4X3VubG9jaygmcGktPm9mZnNldF9sb2NrKTsKKworCWRwcmludGsoIiVzOiBkZWxldGVkIHN0dWZmIGluIGlubzogJWxsdS5cbiIsIF9fZnVuY19fLCBwaS0+aW5vKTsKK30KKworLyoKKyAqIFN5bmMgaW5vZGUgdG8gc2VydmVyLgorICogUmV0dXJucyB6ZXJvIGluIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KKyAqIEl0IHdpbGwgZ2F0aGVyIHBhdGggdG8gcm9vdCBkaXJlY3RvcnkgaW50byBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcKKyAqIGNyZWF0aW9uIG1vZGUsIHBlcm1pc3Npb25zIGFuZCBuYW1lcywgc28gdGhhdCB0aGUgd2hvbGUgcGF0aAorICogdG8gZ2l2ZW4gaW5vZGUgY291bGQgYmUgY3JlYXRlZCB1c2luZyBvbmx5IHNpbmdsZSBuZXR3b3JrIGNvbW1hbmQuCisgKi8KK2ludCBwb2htZWxmc193cml0ZV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5ldGZzX3RyYW5zICp0cmFucykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJaW50IGVyciA9IC1FTk9NRU0sIHNpemU7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCXZvaWQgKmRhdGE7CisJaW50IGN1cl9sZW4gPSBuZXRmc190cmFuc19jdXJfbGVuKHRyYW5zKTsKKworCWlmICh1bmxpa2VseShjdXJfbGVuIDwgMCkpCisJCXJldHVybiAtRVRPT1NNQUxMOworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0cmFucyk7CisJY3VyX2xlbiAtPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCk7CisKKwlkYXRhID0gKHZvaWQgKikoY21kICsgMSk7CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIGRhdGEsIGN1cl9sZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXNpemUgPSBlcnI7CisKKwljbWQtPnN0YXJ0ID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWNtZC0+Y21kID0gTkVURlNfQ1JFQVRFOworCWNtZC0+c2l6ZSA9IHNpemU7CisJY21kLT5pZCA9IHBpLT5pbm87CisJY21kLT5leHQgPSBpbm9kZS0+aV9tb2RlOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHRyYW5zLCBzaXplKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcHJpbnRrKCIlczogY29tcGxldGVkIGlubzogJWxsdSwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfdHJhbnNfY29tcGxldGUoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKQoreworCXVuc2lnbmVkIGk7CisKKwlkcHJpbnRrKCIlczogcGFnZXM6ICVsdS0lbHUsIHBhZ2VfbnVtOiAldSwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcGFnZXNbMF0tPmluZGV4LCBwYWdlc1twYWdlX251bS0xXS0+aW5kZXgsCisJCQlwYWdlX251bSwgZXJyKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWdlX251bTsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbaV07CisKKwkJaWYgKCFwYWdlKQorCQkJY29udGludWU7CisKKwkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJCWlmIChlcnIgPCAwKSB7CisJCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJfQorCisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwkJLyogZHByaW50aygiJXM6ICUzdS8ldTogcGFnZTogJXAuXG4iLCBfX2Z1bmNfXywgaSwgcGFnZV9udW0sIHBhZ2UpOyAqLworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2lub2RlX2hhc19kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcmN1X3JlYWRfbG9jaygpOworCXJldCA9IHJhZGl4X3RyZWVfZ2FuZ19sb29rdXBfdGFnKCZtYXBwaW5nLT5wYWdlX3RyZWUsCisJCQkJKHZvaWQgKiopJnBhZ2UsIGluZGV4LCAxLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKKwlpbnQgZXJyID0gMDsKKwlpbnQgZG9uZSA9IDA7CisJaW50IG5yX3BhZ2VzOworCXBnb2ZmX3QgaW5kZXg7CisJcGdvZmZfdCBlbmQ7CQkvKiBJbmNsdXNpdmUgKi8KKwlpbnQgc2Nhbm5lZCA9IDA7CisJaW50IHJhbmdlX3dob2xlID0gMDsKKworCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgeworCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod2JjLT5yYW5nZV9jeWNsaWMpIHsKKwkJaW5kZXggPSBtYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7IC8qIFN0YXJ0IGZyb20gcHJldiBvZmZzZXQgKi8KKwkJZW5kID0gLTE7CisJfSBlbHNlIHsKKwkJaW5kZXggPSB3YmMtPnJhbmdlX3N0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCWVuZCA9IHdiYy0+cmFuZ2VfZW5kID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQorCQkJcmFuZ2Vfd2hvbGUgPSAxOworCQlzY2FubmVkID0gMTsKKwl9CityZXRyeToKKwl3aGlsZSAoIWRvbmUgJiYgKGluZGV4IDw9IGVuZCkpIHsKKwkJdW5zaWduZWQgaW50IGkgPSBtaW4oZW5kIC0gaW5kZXgsIChwZ29mZl90KXBzYi0+dHJhbnNfbWF4X3BhZ2VzKTsKKwkJaW50IHBhdGhfbGVuOworCQlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnRyYW5zOworCisJCWVyciA9IHBvaG1lbGZzX2lub2RlX2hhc19kaXJ0eV9wYWdlcyhtYXBwaW5nLCBpbmRleCk7CisJCWlmICghZXJyKQorCQkJYnJlYWs7CisKKwkJZXJyID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCQlpZiAoZXJyIDwgMCkKKwkJCWJyZWFrOworCisJCXBhdGhfbGVuID0gZXJyOworCisJCWlmIChwYXRoX2xlbiA8PSAyKSB7CisJCQllcnIgPSAtRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKworCQl0cmFucyA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgcGF0aF9sZW4sIDAsIGkpOworCQlpZiAoIXRyYW5zKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJdHJhbnMtPmNvbXBsZXRlID0gJnBvaG1lbGZzX3dyaXRlX3RyYW5zX2NvbXBsZXRlOworCisJCXRyYW5zLT5wYWdlX251bSA9IG5yX3BhZ2VzID0gZmluZF9nZXRfcGFnZXNfdGFnKG1hcHBpbmcsICZpbmRleCwKKwkJCQlQQUdFQ0FDSEVfVEFHX0RJUlRZLCB0cmFucy0+cGFnZV9udW0sCisJCQkJdHJhbnMtPnBhZ2VzKTsKKworCQlkcHJpbnRrKCIlczogdDogJXAsIG5yX3BhZ2VzOiAldSwgZW5kOiAlbHUsIGluZGV4OiAlbHUsIG1heDogJXUuXG4iLAorCQkJCV9fZnVuY19fLCB0cmFucywgbnJfcGFnZXMsIGVuZCwgaW5kZXgsIHRyYW5zLT5wYWdlX251bSk7CisKKwkJaWYgKCFucl9wYWdlcykKKwkJCWdvdG8gZXJyX291dF9yZXNldDsKKworCQllcnIgPSBwb2htZWxmc193cml0ZV9pbm9kZV9jcmVhdGUoaW5vZGUsIHRyYW5zKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9yZXNldDsKKworCQllcnIgPSAwOworCQlzY2FubmVkID0gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdHJhbnMtPnBhZ2VfbnVtOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gdHJhbnMtPnBhZ2VzW2ldOworCisJCQlsb2NrX3BhZ2UocGFnZSk7CisKKwkJCWlmICh1bmxpa2VseShwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpKQorCQkJCWdvdG8gb3V0X2NvbnRpbnVlOworCisJCQlpZiAoIXdiYy0+cmFuZ2VfY3ljbGljICYmIHBhZ2UtPmluZGV4ID4gZW5kKSB7CisJCQkJZG9uZSA9IDE7CisJCQkJZ290byBvdXRfY29udGludWU7CisJCQl9CisKKwkJCWlmICh3YmMtPnN5bmNfbW9kZSAhPSBXQl9TWU5DX05PTkUpCisJCQkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCQkJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkgfHwKKwkJCSAgICAhY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8ocGFnZSkpIHsKKwkJCQlkcHJpbnRrKCIlczogbm90IGNsZWFyIGZvciBpbyBwYWdlOiAlcCwgd3JpdGViYWNrOiAlZC5cbiIsCisJCQkJCQlfX2Z1bmNfXywgcGFnZSwgUGFnZVdyaXRlYmFjayhwYWdlKSk7CisJCQkJZ290byBvdXRfY29udGludWU7CisJCQl9CisKKwkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCQkJdHJhbnMtPmF0dGFjaGVkX3NpemUgKz0gcGFnZV9wcml2YXRlKHBhZ2UpOworCQkJdHJhbnMtPmF0dGFjaGVkX3BhZ2VzKys7CisjaWYgMAorCQkJZHByaW50aygiJXM6ICV1LyV1IGFkZGVkIHRyYW5zOiAlcCwgZ2VuOiAldSwgcGFnZTogJXAsIFtIaWdoOiAlZF0sIHNpemU6ICVsdSwgaWR4OiAlbHUuXG4iLAorCQkJCQlfX2Z1bmNfXywgaSwgdHJhbnMtPnBhZ2VfbnVtLCB0cmFucywgdHJhbnMtPmdlbiwgcGFnZSwKKwkJCQkJISFQYWdlSGlnaE1lbShwYWdlKSwgcGFnZV9wcml2YXRlKHBhZ2UpLCBwYWdlLT5pbmRleCk7CisjZW5kaWYKKwkJCXdiYy0+bnJfdG9fd3JpdGUtLTsKKworCQkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkKKwkJCQlkb25lID0gMTsKKwkJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgeworCQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CisJCQkJZG9uZSA9IDE7CisJCQl9CisKKwkJCWNvbnRpbnVlOworb3V0X2NvbnRpbnVlOgorCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQl0cmFucy0+cGFnZXNbaV0gPSBOVUxMOworCQl9CisKKwkJZXJyID0gbmV0ZnNfdHJhbnNfZmluaXNoKHRyYW5zLCBwc2IpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJY29udGludWU7CisKK2Vycl9vdXRfcmVzZXQ6CisJCXRyYW5zLT5yZXN1bHQgPSBlcnI7CisJCW5ldGZzX3RyYW5zX3Jlc2V0KHRyYW5zKTsKKwkJbmV0ZnNfdHJhbnNfcHV0KHRyYW5zKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFzY2FubmVkICYmICFkb25lKSB7CisJCS8qCisJCSAqIFdlIGhpdCB0aGUgbGFzdCBwYWdlIGFuZCB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZTogd3JhcAorCQkgKiBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZQorCQkgKi8KKwkJc2Nhbm5lZCA9IDE7CisJCWluZGV4ID0gMDsKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAod2JjLT5yYW5nZV9jeWNsaWMgfHwgKHJhbmdlX3dob2xlICYmIHdiYy0+bnJfdG9fd3JpdGUgPiAwKSkKKwkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogSW5vZGUgd3JpdGViYWNrIGNyZWF0aW9uIGNvbXBsZXRpb24gY2FsbGJhY2suCisgKiBPbmx5IGludm9rZWQgZm9yIGp1c3QgY3JlYXRlZCBpbm9kZXMsIHdoaWNoIGRvIG5vdCBoYXZlIHBhZ2VzIGF0dGFjaGVkLAorICogbGlrZSBkaXJzIGFuZCBlbXB0eSBmaWxlcy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc193cml0ZV9pbm9kZV9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHByaXZhdGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJaWYgKGlub2RlKSB7CisJCWlmIChlcnIpIHsKKwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQkJY2xlYXJfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpOworCQl9IGVsc2UgeworCQkJc2V0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKTsKKwkJfQorCisJCXBvaG1lbGZzX3B1dF9pbm9kZShwaSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX3dyaXRlX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJaW50IGVycjsKKworCWlmICh0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlkcHJpbnRrKCIlczogc3RhcnRlZCBpbm86ICVsbHUuXG4iLCBfX2Z1bmNfXywgcGktPmlubyk7CisKKwllcnIgPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9leGl0OworCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgZXJyICsgMSwgMCwgMCk7CisJaWYgKCF0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCXQtPmNvbXBsZXRlID0gcG9obWVsZnNfd3JpdGVfaW5vZGVfY29tcGxldGU7CisJdC0+cHJpdmF0ZSA9IGlncmFiKGlub2RlKTsKKwlpZiAoIXQtPnByaXZhdGUpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0X3B1dDsKKwl9CisKKwllcnIgPSBwb2htZWxmc193cml0ZV9pbm9kZV9jcmVhdGUoaW5vZGUsIHQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwluZXRmc190cmFuc19maW5pc2godCwgUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3B1dDoKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTeW5jIGFsbCBub3QteWV0LWNyZWF0ZWQgY2hpbGRyZW4gaW4gZ2l2ZW4gZGlyZWN0b3J5IHRvIHRoZSBzZXJ2ZXIuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfaW5vZGVfY3JlYXRlX2NoaWxkcmVuKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBhcmVudC0+c3luY19jcmVhdGVfbGlzdCkpIHsKKwkJbiA9IE5VTEw7CisJCW11dGV4X2xvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJnBhcmVudC0+c3luY19jcmVhdGVfbGlzdCkpIHsKKwkJCW4gPSBsaXN0X2ZpcnN0X2VudHJ5KCZwYXJlbnQtPnN5bmNfY3JlYXRlX2xpc3QsCisJCQkJc3RydWN0IHBvaG1lbGZzX25hbWUsIHN5bmNfY3JlYXRlX2VudHJ5KTsKKwkJCWxpc3RfZGVsX2luaXQoJm4tPnN5bmNfY3JlYXRlX2VudHJ5KTsKKwkJfQorCQltdXRleF91bmxvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCisJCWlmICghbikKKwkJCWJyZWFrOworCisJCWlub2RlID0gaWxvb2t1cChzYiwgbi0+aW5vKTsKKworCQlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIGlub2RlOiAlcC5cbiIsCisJCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBuLT5pbm8sIGlub2RlKTsKKworCQlpZiAoaW5vZGUgJiYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkpIHsKKwkJCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwkJCXBvaG1lbGZzX3dyaXRlX2NyZWF0ZV9pbm9kZShwaSk7CisJCQkvL3BvaG1lbGZzX21ldGFfY29tbWFuZChwaSwgTkVURlNfSU5PREVfSU5GTywgMCwgTlVMTCwgTlVMTCwgMCk7CisJCQlpcHV0KGlub2RlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlcyBnaXZlbiBjaGlsZCBmcm9tIGdpdmVuIGlub2RlIG9uIHNlcnZlci4KKyAqLworaW50IHBvaG1lbGZzX3JlbW92ZV9jaGlsZChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbikKK3sKKwlyZXR1cm4gcG9obWVsZnNfbWV0YV9jb21tYW5kX2RhdGEocGksIHBpLT5pbm8sIE5FVEZTX1JFTU9WRSwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCk7Cit9CisKKy8qCisgKiBXcml0ZWJhY2sgZm9yIGdpdmVuIGlub2RlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBzeW5jKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCXBvaG1lbGZzX3dyaXRlX2NyZWF0ZV9pbm9kZShwaSk7CisJcG9obWVsZnNfd3JpdGVfaW5vZGVfY3JlYXRlX2NoaWxkcmVuKGlub2RlKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSXQgaXMgbm90IGV4cG9ydGVkLCBzb3JyeS4uLgorICovCitzdGF0aWMgaW5saW5lIHdhaXRfcXVldWVfaGVhZF90ICpwYWdlX3dhaXRxdWV1ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwljb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCXJldHVybiAmem9uZS0+d2FpdF90YWJsZVtoYXNoX3B0cihwYWdlLCB6b25lLT53YWl0X3RhYmxlX2JpdHMpXTsKK30KKworc3RhdGljIGludCBwb2htZWxmc193YWl0X29uX3BhZ2VfbG9ja2VkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGFnZS0+bWFwcGluZy0+aG9zdC0+aV9zYik7CisJbG9uZyByZXQgPSBwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0OworCURFRklORV9XQUlUX0JJVCh3YWl0LCAmcGFnZS0+ZmxhZ3MsIFBHX2xvY2tlZCk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCisJCXJldHVybiAwOworCisJZm9yICg7OykgeworCQlwcmVwYXJlX3RvX3dhaXQocGFnZV93YWl0cXVldWUocGFnZSksCisJCQkJJndhaXQud2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQlkcHJpbnRrKCIlczogcGFnZTogJXAsIGxvY2tlZDogJWQsIHVwdG9kYXRlOiAlZCwgZXJyb3I6ICVkLCBmbGFnczogJWx4LlxuIiwKKwkJCQlfX2Z1bmNfXywgcGFnZSwgUGFnZUxvY2tlZChwYWdlKSwgUGFnZVVwdG9kYXRlKHBhZ2UpLAorCQkJCVBhZ2VFcnJvcihwYWdlKSwgcGFnZS0+ZmxhZ3MpOworCisJCWlmICghUGFnZUxvY2tlZChwYWdlKSkKKwkJCWJyZWFrOworCisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KTsKKwkJCWlmICghcmV0KQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQlicmVhazsKKwl9CisJZmluaXNoX3dhaXQocGFnZV93YWl0cXVldWUocGFnZSksICZ3YWl0LndhaXQpOworCisJaWYgKCFyZXQpCisJCWVyciA9IC1FVElNRURPVVQ7CisKKworCWlmICghZXJyKQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisKKwlpZiAoZXJyKQorCQlwcmludGsoIiVzOiBwYWdlOiAlcCwgdXB0b2RhdGU6ICVkLCBsb2NrZWQ6ICVkLCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBwYWdlLCBQYWdlVXB0b2RhdGUocGFnZSksIFBhZ2VMb2NrZWQocGFnZSksIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRfcGFnZV9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwcml2YXRlOworCisJaWYgKFBhZ2VDaGVja2VkKHBhZ2UpKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGVyciA8IDApIHsKKwkJZHByaW50aygiJXM6IHBhZ2U6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHBhZ2UsIGVycik7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl9CisKKwl1bmxvY2tfcGFnZShwYWdlKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWFkIGEgcGFnZSBmcm9tIHJlbW90ZSBzZXJ2ZXIuCisgKiBGdW5jdGlvbiB3aWxsIHdhaXQgdW50aWwgcGFnZSBpcyB1bmxvY2tlZC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJaW50IGVyciwgcGF0aF9sZW47CisJdm9pZCAqZGF0YTsKKwl1NjQgaXNpemU7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGksIHBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQsCisJCQlQQUdFX1NJWkUsIFBPSE1FTEZTX1JFQURfTE9DSyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAoaXNpemUgPD0gcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgeworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwYXRoX2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwlpZiAocGF0aF9sZW4gPCAwKSB7CisJCWVyciA9IHBhdGhfbGVuOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBwYXRoX2xlbiwgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCwgMCk7CisJaWYgKCF0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXQtPmNvbXBsZXRlID0gcG9obWVsZnNfcmVhZF9wYWdlX2NvbXBsZXRlOworCXQtPnByaXZhdGUgPSBwYWdlOworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlkYXRhID0gKHZvaWQgKikoY21kICsgMSk7CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIGRhdGEsIHBhdGhfbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlwYXRoX2xlbiA9IGVycjsKKworCWNtZC0+aWQgPSBwaS0+aW5vOworCWNtZC0+c3RhcnQgPSBwYWdlLT5pbmRleDsKKwljbWQtPnN0YXJ0IDw8PSBQQUdFX0NBQ0hFX1NISUZUOworCWNtZC0+c2l6ZSA9IFBBR0VfQ0FDSEVfU0laRSArIHBhdGhfbGVuOworCWNtZC0+Y21kID0gTkVURlNfUkVBRF9QQUdFOworCWNtZC0+ZXh0ID0gcGF0aF9sZW47CisKKwlkcHJpbnRrKCIlczogcGF0aDogJyVzJywgcGFnZTogJXAsIGlubzogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICVsdS5cbiIsCisJCQlfX2Z1bmNfXywgKGNoYXIgKilkYXRhLCBwYWdlLCBwaS0+aW5vLCBjbWQtPnN0YXJ0LCBQQUdFX0NBQ0hFX1NJWkUpOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBwYXRoX2xlbik7CisKKwllcnIgPSBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcmV0dXJuOworCisJcmV0dXJuIHBvaG1lbGZzX3dhaXRfb25fcGFnZV9sb2NrZWQocGFnZSk7CisKK2Vycl9vdXRfZnJlZToKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworZXJyX291dF9leGl0OgorCVNldFBhZ2VFcnJvcihwYWdlKTsKKwlpZiAoUGFnZUxvY2tlZChwYWdlKSkKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CitlcnJfb3V0X3JldHVybjoKKwlwcmludGsoIiVzOiBwYWdlOiAlcCwgc3RhcnQ6ICVsdSwgc2l6ZTogJWx1LCBlcnI6ICVkLlxuIiwKKwkJX19mdW5jX18sIHBhZ2UsIHBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQsIFBBR0VfQ0FDSEVfU0laRSwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBXcml0ZSBiZWdpbi9lbmQgbWFnaWMuCisgKiBBbGxvY2F0ZXMgYSBwYWdlIGFuZCB3cml0ZXMgaW5vZGUgaWYgaXQgd2FzIG5vdCBzeW5jZWQgdG8gc2VydmVyIGJlZm9yZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBpbmRleDsKKwl1bnNpZ25lZCBzdGFydCwgZW5kOworCWludCBlcnI7CisKKwkqcGFnZXAgPSBOVUxMOworCisJaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlzdGFydCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwllbmQgPSBzdGFydCArIGxlbjsKKworCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOworI2lmIDAKKwlkcHJpbnRrKCIlczogcGFnZTogJXAgcG9zOiAlbGx1LCBsZW46ICV1LCBpbmRleDogJWx1LCBzdGFydDogJXUsIGVuZDogJXUsIHVwdG9kYXRlOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcGFnZSwJcG9zLCBsZW4sIGluZGV4LCBzdGFydCwgZW5kLCBQYWdlVXB0b2RhdGUocGFnZSkpOworI2VuZGlmCisJaWYgKCFwYWdlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXdoaWxlICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCWlmIChzdGFydCAmJiB0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmUE9ITUVMRlNfSShpbm9kZSktPnN0YXRlKSkgeworCQkJZXJyID0gcG9obWVsZnNfcmVhZHBhZ2UoZmlsZSwgcGFnZSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyX291dF9leGl0OworCisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZW4gIT0gUEFHRV9DQUNIRV9TSVpFKSB7CisJCQl2b2lkICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKworCQkJbWVtc2V0KGthZGRyICsgc3RhcnQsIDAsIFBBR0VfQ0FDSEVfU0laRSAtIHN0YXJ0KTsKKwkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCQl9CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwl9CisKKwlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIGVuZCk7CisKKwkqcGFnZXAgPSBwYWdlOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJKnBhZ2VwID0gTlVMTDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfZW5kKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAorCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKworCWlmIChjb3BpZWQgIT0gbGVuKSB7CisJCXVuc2lnbmVkIGZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCisJCW1lbXNldChrYWRkciArIGZyb20gKyBjb3BpZWQsIDAsIGxlbiAtIGNvcGllZCk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJfQorCisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworI2lmIDAKKwlkcHJpbnRrKCIlczogcGFnZTogJXAgW1U6ICVkLCBEOiAlZCwgTDogJWRdLCBwb3M6ICVsbHUsIGxlbjogJXUsIGNvcGllZDogJXUuXG4iLAorCQkJX19mdW5jX18sIHBhZ2UsCisJCQlQYWdlVXB0b2RhdGUocGFnZSksIFBhZ2VEaXJ0eShwYWdlKSwgUGFnZUxvY2tlZChwYWdlKSwKKwkJCXBvcywgbGVuLCBjb3BpZWQpOworI2VuZGlmCisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwlpZiAocG9zICsgY29waWVkID4gaW5vZGUtPmlfc2l6ZSkgeworCQlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKworCQlwc2ItPmF2YWlsX3NpemUgLT0gcG9zICsgY29waWVkIC0gaW5vZGUtPmlfc2l6ZTsKKworCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyArIGNvcGllZCk7CisJfQorCisJcmV0dXJuIGNvcGllZDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19yZWFkcGFnZXNfdHJhbnNfY29tcGxldGUoc3RydWN0IHBhZ2UgKipfX3BhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IHByaXZhdGU7CisJdW5zaWduZWQgaW50IGksIG51bTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCAqcGFnZSA9IChzdHJ1Y3QgcGFnZSAqKV9fcGFnZXM7CisJbG9mZl90IGluZGV4ID0gcGFnZS0+aW5kZXg7CisKKwlwYWdlcyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBwYWdlX251bSwgR0ZQX05PSU8pOworCWlmICghcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJbnVtID0gZmluZF9nZXRfcGFnZXNfY29udGlnKHBpLT52ZnNfaW5vZGUuaV9tYXBwaW5nLCBpbmRleCwgcGFnZV9udW0sIHBhZ2VzKTsKKwlpZiAobnVtIDw9IDApIHsKKwkJZXJyID0gbnVtOworCQlnb3RvIGVycl9vdXRfZnJlZTsKKwl9CisKKwlmb3IgKGk9MDsgaTxudW07ICsraSkgeworCQlwYWdlID0gcGFnZXNbaV07CisKKwkJaWYgKGVycikKKwkJCXByaW50aygiJXM6ICV1LyV1OiBwYWdlOiAlcCwgaW5kZXg6ICVsdSwgdXB0b2RhdGU6ICVkLCBsb2NrZWQ6ICVkLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgaSwgbnVtLCBwYWdlLCBwYWdlLT5pbmRleCwKKwkJCQlQYWdlVXB0b2RhdGUocGFnZSksIFBhZ2VMb2NrZWQocGFnZSksIGVycik7CisKKwkJaWYgKCFQYWdlQ2hlY2tlZChwYWdlKSkgeworCQkJaWYgKGVyciA8IDApCisJCQkJU2V0UGFnZUVycm9yKHBhZ2UpOworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCX0KKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJfQorCitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUocGFnZXMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2VuZF9yZWFkcGFnZXMoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgc3RydWN0IHBhZ2UgKmZpcnN0LCB1bnNpZ25lZCBpbnQgbnVtKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwaS0+dmZzX2lub2RlLmlfc2IpOworCWludCBlcnIsIHBhdGhfbGVuOworCXZvaWQgKmRhdGE7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGksIGZpcnN0LT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULAorCQkJbnVtICogUEFHRV9TSVpFLCBQT0hNRUxGU19SRUFEX0xPQ0spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcGF0aF9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJaWYgKHBhdGhfbGVuIDwgMCkgeworCQllcnIgPSBwYXRoX2xlbjsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgcGF0aF9sZW4sIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QsIDApOworCWlmICghdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWRhdGEgPSAodm9pZCAqKShjbWQgKyAxKTsKKworCXQtPmNvbXBsZXRlID0gcG9obWVsZnNfcmVhZHBhZ2VzX3RyYW5zX2NvbXBsZXRlOworCXQtPnByaXZhdGUgPSBwaTsKKwl0LT5wYWdlX251bSA9IG51bTsKKwl0LT5wYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKilmaXJzdDsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgZGF0YSwgcGF0aF9sZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJcGF0aF9sZW4gPSBlcnI7CisKKwljbWQtPmNtZCA9IE5FVEZTX1JFQURfUEFHRVM7CisJY21kLT5zdGFydCA9IGZpcnN0LT5pbmRleDsKKwljbWQtPnN0YXJ0IDw8PSBQQUdFX0NBQ0hFX1NISUZUOworCWNtZC0+c2l6ZSA9IChudW0gPDwgOCB8IFBBR0VfQ0FDSEVfU0hJRlQpOworCWNtZC0+aWQgPSBwaS0+aW5vOworCWNtZC0+ZXh0ID0gcGF0aF9sZW47CisKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIHBhdGg6ICclcycsIHBhdGhfbGVuOiAldSwgIgorCQkJInN0YXJ0OiAlbHUsIG51bTogJXUuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgKGNoYXIgKilkYXRhLCBwYXRoX2xlbiwKKwkJCWZpcnN0LT5pbmRleCwgbnVtKTsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgcGF0aF9sZW4pOworCisJcmV0dXJuIG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCitlcnJfb3V0X3B1dDoKKwluZXRmc190cmFuc19mcmVlKHQpOworZXJyX291dF9leGl0OgorCXBvaG1lbGZzX3JlYWRwYWdlc190cmFuc19jb21wbGV0ZSgoc3RydWN0IHBhZ2UgKiopZmlyc3QsIG51bSwgcGksIGVycik7CisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBsaXN0X3RvX3BhZ2UoaGVhZCkgKGxpc3RfZW50cnkoKGhlYWQpLT5wcmV2LCBzdHJ1Y3QgcGFnZSwgbHJ1KSkKKworc3RhdGljIGludCBwb2htZWxmc19yZWFkcGFnZXMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKQoreworCXVuc2lnbmVkIGludCBwYWdlX2lkeCwgbnVtID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEwsICpmaXJzdCA9IE5VTEw7CisKKwlmb3IgKHBhZ2VfaWR4ID0gMDsgcGFnZV9pZHggPCBucl9wYWdlczsgcGFnZV9pZHgrKykgeworCQlwYWdlID0gbGlzdF90b19wYWdlKHBhZ2VzKTsKKworCQlwcmVmZXRjaHcoJnBhZ2UtPmZsYWdzKTsKKwkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisKKwkJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKKwkJCQkJcGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpKSB7CisKKwkJCWlmICghbnVtKSB7CisJCQkJbnVtID0gMTsKKwkJCQlmaXJzdCA9IHBhZ2U7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWRwcmludGsoIiVzOiBhZGRlZCB0byBscnUgcGFnZTogJXAsIHBhZ2VfaW5kZXg6ICVsdSwgZmlyc3RfaW5kZXg6ICVsdS5cbiIsCisJCQkJCV9fZnVuY19fLCBwYWdlLCBwYWdlLT5pbmRleCwgZmlyc3QtPmluZGV4KTsKKworCQkJaWYgKHVubGlrZWx5KGZpcnN0LT5pbmRleCArIG51bSAhPSBwYWdlLT5pbmRleCkgfHwgKG51bSA+IDUwMCkpIHsKKwkJCQlwb2htZWxmc19zZW5kX3JlYWRwYWdlcyhQT0hNRUxGU19JKG1hcHBpbmctPmhvc3QpLAorCQkJCQkJZmlyc3QsIG51bSk7CisJCQkJZmlyc3QgPSBwYWdlOworCQkJCW51bSA9IDA7CisJCQl9CisKKwkJCW51bSsrOworCQl9CisJfQorCXBvaG1lbGZzX3NlbmRfcmVhZHBhZ2VzKFBPSE1FTEZTX0kobWFwcGluZy0+aG9zdCksIGZpcnN0LCBudW0pOworCisJLyoKKwkgKiBUaGlzIHdpbGwgYmUgc3luYyByZWFkLCBzbyB3aGVuIGxhc3QgcGFnZSBpcyBwcm9jZXNzZWQsCisJICogYWxsIHByZXZpb3VzIGFyZSBhbGVyYWR5IHVubG9ja2VkIGFuZCByZWFkeSB0byBiZSB1c2VkLgorCSAqLworCXJldHVybiAwOworfQorCisvKgorICogU21hbGwgYWRkcmVzIHNwYWNlIG9wZXJhdGlvbnMgZm9yIFBPSE1FTEZTLgorICovCitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHBvaG1lbGZzX2FvcHMgPSB7CisJLnJlYWRwYWdlCQk9IHBvaG1lbGZzX3JlYWRwYWdlLAorCS5yZWFkcGFnZXMJCT0gcG9obWVsZnNfcmVhZHBhZ2VzLAorCS53cml0ZXBhZ2VzCQk9IHBvaG1lbGZzX3dyaXRlcGFnZXMsCisJLndyaXRlX2JlZ2luCQk9IHBvaG1lbGZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQJCT0gcG9obWVsZnNfd3JpdGVfZW5kLAorCS5zZXRfcGFnZV9kaXJ0eSAJPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKK307CisKKy8qCisgKiAtPmRldHJveV9pbm9kZSgpIGNhbGxiYWNrLiBEZWxldGVzIGlub2RlIGZyb20gdGhlIGNhY2hlcworICogIGFuZCBmcmVlcyBwcml2YXRlIGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihzYik7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJLy9wb2htZWxmc19kYXRhX3VubG9jayhwaSwgMCwgaW5vZGUtPmlfc2l6ZSwgUE9ITUVMRlNfUkVBRF9MT0NLKTsKKworCXBvaG1lbGZzX2lub2RlX2RlbF9pbm9kZShwc2IsIHBpKTsKKworCWRwcmludGsoIiVzOiBwaTogJXAsIGlub2RlOiAlcCwgaW5vOiAlbGx1LlxuIiwKKwkJX19mdW5jX18sIHBpLCAmcGktPnZmc19pbm9kZSwgcGktPmlubyk7CisJa21lbV9jYWNoZV9mcmVlKHBvaG1lbGZzX2lub2RlX2NhY2hlLCBwaSk7CisJYXRvbWljX2xvbmdfZGVjKCZwc2ItPnRvdGFsX2lub2Rlcyk7Cit9CisKKy8qCisgKiAtPmFsbG9jX2lub2RlKCkgY2FsbGJhY2suIEFsbG9jYXRlcyBpbm9kZSBhbmQgaW5pdGlsaXplcyBwcml2YXRlIGRhdGEuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKnBvaG1lbGZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaTsKKworCXBpID0ga21lbV9jYWNoZV9hbGxvYyhwb2htZWxmc19pbm9kZV9jYWNoZSwgR0ZQX05PSU8pOworCWlmICghcGkpCisJCXJldHVybiBOVUxMOworCisJcGktPmhhc2hfcm9vdCA9IFJCX1JPT1Q7CisJbXV0ZXhfaW5pdCgmcGktPm9mZnNldF9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwaS0+c3luY19jcmVhdGVfbGlzdCk7CisKKwlJTklUX0xJU1RfSEVBRCgmcGktPmlub2RlX2VudHJ5KTsKKworCXBpLT5sb2NrX3R5cGUgPSAwOworCXBpLT5zdGF0ZSA9IDA7CisJcGktPnRvdGFsX2xlbiA9IDA7CisJcGktPmRyb3BfY291bnQgPSAwOworCisJZHByaW50aygiJXM6IHBpOiAlcCwgaW5vZGU6ICVwLlxuIiwgX19mdW5jX18sIHBpLCAmcGktPnZmc19pbm9kZSk7CisKKwlhdG9taWNfbG9uZ19pbmMoJlBPSE1FTEZTX1NCKHNiKS0+dG90YWxfaW5vZGVzKTsKKworCXJldHVybiAmcGktPnZmc19pbm9kZTsKK30KKworLyoKKyAqIFdlIHdhbnQgZnN5bmMoKSB0byB3b3JrIG9uIFBPSE1FTEZTLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKKwkJLm5yX3RvX3dyaXRlID0gMCwJLyogc3lzX2ZzeW5jIGRpZCB0aGlzICovCisJfTsKKworCXJldHVybiBzeW5jX2lub2RlKGlub2RlLCAmd2JjKTsKK30KKworc3NpemVfdCBwb2htZWxmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgaW92ZWMgaW92ID0geyAuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKilidWYsIC5pb3ZfbGVuID0gbGVuIH07CisJc3RydWN0IGtpb2NiIGtpb2NiOworCXNzaXplX3QgcmV0OworCWxvZmZfdCBwb3MgPSAqcHBvczsKKworCWluaXRfc3luY19raW9jYigma2lvY2IsIGZpbGUpOworCWtpb2NiLmtpX3BvcyA9IHBvczsKKwlraW9jYi5raV9sZWZ0ID0gbGVuOworCisJZHByaW50aygiJXM6IGxlbjogJXp1LCBwb3M6ICVsbHUuXG4iLCBfX2Z1bmNfXywgbGVuLCBwb3MpOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IHBvaG1lbGZzX2RhdGFfbG9jayhwaSwgcG9zLCBsZW4sIFBPSE1FTEZTX1dSSVRFX0xPQ0spOworCWlmIChyZXQpCisJCWdvdG8gZXJyX291dF91bmxvY2s7CisKKwlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jaygma2lvY2IsICZpb3YsIDEsIHBvcyk7CisJKnBwb3MgPSBraW9jYi5raV9wb3M7CisKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlXQVJOX09OKHJldCA8IDApOworCisJaWYgKHJldCA+IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKKwkJc3NpemVfdCBlcnI7CisKKwkJZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0ID0gZXJyOworCQlXQVJOX09OKHJldCA8IDApOworCX0KKworCXJldHVybiByZXQ7CisKK2Vycl9vdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvaG1lbGZzX2ZpbGVfb3BzID0geworCS5vcGVuCQk9IGdlbmVyaWNfZmlsZV9vcGVuLAorCS5mc3luYwkJPSBwb2htZWxmc19mc3luYywKKworCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKKworCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisKKwkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKKworCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKKwkuc3BsaWNlX3dyaXRlCT0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKKworCS53cml0ZQkJPSBwb2htZWxmc193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBvaG1lbGZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAorCS5mb2xsb3dfbGluawk9IHBhZ2VfZm9sbG93X2xpbmtfbGlnaHQsCisJLnB1dF9saW5rCT0gcGFnZV9wdXRfbGluaywKK307CisKK2ludCBwb2htZWxmc19zZXRhdHRyX3JhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJaW50IGVycjsKKworCWVyciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycikgeworCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBpbm9kZSBjaGFuZ2VzIGFyZSBub3QgYWxsb3dlZC5cbiIsIF9fZnVuY19fLCBQT0hNRUxGU19JKGlub2RlKS0+aW5vKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEICYmIGF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CisJICAgIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEICYmIGF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7CisJCWVyciA9IHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWVyciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGlubzogJWxsdSwgZmFpbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlcy5cbiIsIF9fZnVuY19fLCBQT0hNRUxGU19JKGlub2RlKS0+aW5vKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgbW9kZTogJW8gLT4gJW8sIHVpZDogJXUgLT4gJXUsIGdpZDogJXUgLT4gJXUsIHNpemU6ICVsbHUgLT4gJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgUE9ITUVMRlNfSShpbm9kZSktPmlubywgaW5vZGUtPmlfbW9kZSwgYXR0ci0+aWFfbW9kZSwKKwkJCWlub2RlLT5pX3VpZCwgYXR0ci0+aWFfdWlkLCBpbm9kZS0+aV9naWQsIGF0dHItPmlhX2dpZCwgaW5vZGUtPmlfc2l6ZSwgYXR0ci0+aWFfc2l6ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCWludCBlcnI7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGksIDAsIH4wLCBQT0hNRUxGU19XUklURV9MT0NLKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoZGVudHJ5LCBhdHRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IHBvaG1lbGZzX3NldGF0dHJfcmF3KGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zZW5kX3hhdHRyX3JlcShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgaWQsIHU2NCBzdGFydCwKKwkJY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBhdHRyc2l6ZSwgaW50IGNvbW1hbmQpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwaS0+dmZzX2lub2RlLmlfc2IpOworCWludCBlcnIsIHBhdGhfbGVuLCBuYW1lbGVuID0gc3RybGVuKG5hbWUpICsgMTsgLyogMC1ieXRlICovCisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwl2b2lkICpkYXRhOworCisJZHByaW50aygiJXM6IGlkOiAlbGx1LCBzdGFydDogJWxsdSwgbmFtZTogJyVzJywgYXR0cnNpemU6ICV6dSwgY21kOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgaWQsIHN0YXJ0LCBuYW1lLCBhdHRyc2l6ZSwgY29tbWFuZCk7CisKKwlwYXRoX2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwlpZiAocGF0aF9sZW4gPCAwKSB7CisJCWVyciA9IHBhdGhfbGVuOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBuYW1lbGVuICsgcGF0aF9sZW4gKyBhdHRyc2l6ZSwgMCwgMCk7CisJaWYgKCF0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJZGF0YSA9IGNtZCArIDE7CisKKwlwYXRoX2xlbiA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgZGF0YSwgcGF0aF9sZW4pOworCWlmIChwYXRoX2xlbiA8IDApIHsKKwkJZXJyID0gcGF0aF9sZW47CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCWRhdGEgKz0gcGF0aF9sZW47CisKKwkvKgorCSAqICduYW1lJyBpcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBhbHJlYWR5IGFuZAorCSAqICduYW1lbGVuJyBpbmNsdWRlcyAwLWJ5dGUuCisJICovCisJbWVtY3B5KGRhdGEsIG5hbWUsIG5hbWVsZW4pOworCWRhdGEgKz0gbmFtZWxlbjsKKworCW1lbWNweShkYXRhLCB2YWx1ZSwgYXR0cnNpemUpOworCisJY21kLT5jbWQgPSBjb21tYW5kOworCWNtZC0+aWQgPSBpZDsKKwljbWQtPnN0YXJ0ID0gc3RhcnQ7CisJY21kLT5zaXplID0gYXR0cnNpemUgKyBuYW1lbGVuICsgcGF0aF9sZW47CisJY21kLT5leHQgPSBwYXRoX2xlbjsKKwljbWQtPmNzaXplID0gMDsKKwljbWQtPmNwYWQgPSAwOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBuYW1lbGVuICsgcGF0aF9sZW4gKyBhdHRyc2l6ZSk7CisKKwlyZXR1cm4gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisKK2Vycl9vdXRfcHV0OgorCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19wdXQodCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgYXR0cnNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKworCWlmICghKHBzYi0+c3RhdGVfZmxhZ3MgJiBQT0hNRUxGU19GTEFHU19YQVRUUikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBwb2htZWxmc19zZW5kX3hhdHRyX3JlcShwaSwgZmxhZ3MsIGF0dHJzaXplLCBuYW1lLAorCQkJdmFsdWUsIGF0dHJzaXplLCBORVRGU19YQVRUUl9TRVQpOworfQorCitzdGF0aWMgc3NpemVfdCBwb2htZWxmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCXZvaWQgKnZhbHVlLCBzaXplX3QgYXR0cnNpemUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbTsKKwlpbnQgZXJyOworCWxvbmcgdGltZW91dCA9IHBzYi0+bWNhY2hlX3RpbWVvdXQ7CisKKwlpZiAoIShwc2ItPnN0YXRlX2ZsYWdzICYgUE9ITUVMRlNfRkxBR1NfWEFUVFIpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltID0gcG9obWVsZnNfbWNhY2hlX2FsbG9jKHBzYiwgMCwgYXR0cnNpemUsIHZhbHVlKTsKKwlpZiAoSVNfRVJSKG0pKQorCQlyZXR1cm4gUFRSX0VSUihtKTsKKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIG5hbWU6ICclcycsIHNpemU6ICV6dS5cbiIsCisJCQlfX2Z1bmNfXywgcGktPmlubywgbmFtZSwgYXR0cnNpemUpOworCisJZXJyID0gcG9obWVsZnNfc2VuZF94YXR0cl9yZXEocGksIG0tPmdlbiwgYXR0cnNpemUsIG5hbWUsIHZhbHVlLCAwLCBORVRGU19YQVRUUl9HRVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlkbyB7CisJCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbS0+Y29tcGxldGUsIHRpbWVvdXQpOworCQlpZiAoZXJyKSB7CisJCQllcnIgPSBtLT5lcnI7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFRoaXMgbG9vcCBpcyBhIGJpdCB1Z2x5LCBzaW5jZSBpdCB3YWl0cyB1bnRpbCByZWZlcmVuY2UgY291bnRlcgorCQkgKiBoaXRzIDEgYW5kIHRoZW4gcHV0IG9iamVjdCBoZXJlLiBNYWluIGdvYWwgaXMgdG8gcHJldmVudCByYWNlIHdpdGgKKwkJICogbmV0d29yayB0aHJlYWQsIHdoZW4gaXQgY2FuIHN0YXJ0IHByb2Nlc3NpbmcgZ2l2ZW4gcmVxdWVzdCwgaS5lLgorCQkgKiBpbmNyZWFzZSBpdHMgcmVmZXJlbmNlIGNvdW50ZXIgYnV0IHlldCBub3QgY29tcGxldGUgaXQsIHdoaWxlCisJCSAqIHdlIHdpbGwgZXhpdCBmcm9tIC0+Z2V0eGF0dHIoKSB3aXRoIHRpbWVvdXQsIGFuZCBhbHRob3VnaCByZXF1ZXN0CisJCSAqIHdpbGwgbm90IGJlIGZyZWVkIChpdHMgcmVmZXJlbmNlIGNvdW50ZXIgd2FzIGluY3JlYXNlZCBieSBuZXR3b3JrCisJCSAqIHRocmVhZCksIGRhdGEgcG9pbnRlciBwcm92aWRlZCBieSB1c2VyIG1heSBiZSByZWxlYXNlZCwgc28gd2Ugd2lsbAorCQkgKiBvdmVyd3JpdGUgYWxyZWFkeSBmcmVlZCBhcmVhIGluIG5ldHdvcmsgdGhyZWFkLgorCQkgKgorCQkgKiBOb3cgYWZ0ZXIgdGltZW91dCB3ZSByZW1vdmUgcmVxdWVzdCBmcm9tIHRoZSBjYWNoZSwgc28gaXQgY2FuIG5vdCBiZQorCQkgKiBmb3VuZCBieSBuZXR3b3JrIHRocmVhZCwgYW5kIHdhaXQgZm9yIGl0cyByZWZlcmVuY2UgY291bnRlciB0byBoaXQgMSwKKwkJICogaS5lLiBpZiBuZXR3b3JrIHRocmVhZCBhbHJlYWR5IHN0YXJ0ZWQgdG8gcHJvY2VzcyB0aGlzIHJlcXVlc3QsIHdlIHdhaXQKKwkJICogaXQgdG8gZmluaXNoLCBhbmQgdGhlbiBmcmVlIG9iamVjdCBsb2NhbGx5LiBJZiByZWZlcmVuY2UgY291bnRlciBpcworCQkgKiBhbHJlYWR5IDEsIGkuZS4gcmVxdWVzdCBpcyBub3QgdXNlZCBieSBhbnlvbmUgZWxzZSwgd2UgY2FuIGZyZWUgaXQgd2l0aG91dAorCQkgKiBwcm9ibGVtLgorCQkgKi8KKwkJZXJyID0gLUVUSU1FRE9VVDsKKwkJdGltZW91dCA9IEhaOworCisJCXBvaG1lbGZzX21jYWNoZV9yZW1vdmVfbG9ja2VkKHBzYiwgbSk7CisJfSB3aGlsZSAoYXRvbWljX3JlYWQoJm0tPnJlZmNudCkgIT0gMSk7CisKKwlwb2htZWxmc19tY2FjaGVfcHV0KHBzYiwgbSk7CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHBpLT5pbm8sIGVycik7CisKKwlyZXR1cm4gZXJyOworCitlcnJfb3V0X3B1dDoKKwlwb2htZWxmc19tY2FjaGVfcHV0KHBzYiwgbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdCAqc3RhdCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlpbnQgZXJyOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBpLCAwLCB+MCwgUE9ITUVMRlNfUkVBRF9MT0NLKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgbW9kZTogJW8sIHVpZDogJXUsIGdpZDogJXUsIHNpemU6ICVsbHUuXG4iLAorCQkJX19mdW5jX18sIHBpLT5pbm8sIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3VpZCwKKwkJCWlub2RlLT5pX2dpZCwgaW5vZGUtPmlfc2l6ZSk7CisKKwlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcG9obWVsZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0geworCS5zZXRhdHRyCT0gcG9obWVsZnNfc2V0YXR0ciwKKwkuZ2V0YXR0cgk9IHBvaG1lbGZzX2dldGF0dHIsCisJLnNldHhhdHRyCT0gcG9obWVsZnNfc2V0eGF0dHIsCisJLmdldHhhdHRyCT0gcG9obWVsZnNfZ2V0eGF0dHIsCit9OworCisvKgorICogRmlsbCBpbm9kZSBkYXRhOiBtb2RlLCBzaXplLCBvcGVyYXRpb24gY2FsbGJhY2tzIGFuZCBzbyBvbi4uLgorICovCit2b2lkIHBvaG1lbGZzX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8pCit7CisJaW5vZGUtPmlfbW9kZSA9IGluZm8tPm1vZGU7CisJaW5vZGUtPmlfbmxpbmsgPSBpbmZvLT5ubGluazsKKwlpbm9kZS0+aV91aWQgPSBpbmZvLT51aWQ7CisJaW5vZGUtPmlfZ2lkID0gaW5mby0+Z2lkOworCWlub2RlLT5pX2Jsb2NrcyA9IGluZm8tPmJsb2NrczsKKwlpbm9kZS0+aV9yZGV2ID0gaW5mby0+cmRldjsKKwlpbm9kZS0+aV9zaXplID0gaW5mby0+c2l6ZTsKKwlpbm9kZS0+aV92ZXJzaW9uID0gaW5mby0+dmVyc2lvbjsKKwlpbm9kZS0+aV9ibGtiaXRzID0gZmZzKGluZm8tPmJsb2Nrc2l6ZSk7CisKKwlkcHJpbnRrKCIlczogaW5vZGU6ICVwLCBudW06ICVsdS8lbGx1IGlub2RlIGlzIHJlZ3VsYXI6ICVkLCBkaXI6ICVkLCBsaW5rOiAlZCwgbW9kZTogJW8sIHNpemU6ICVsbHUuXG4iLAorCQkJX19mdW5jX18sIGlub2RlLCBpbm9kZS0+aV9pbm8sIGluZm8tPmlubywKKwkJCVNfSVNSRUcoaW5vZGUtPmlfbW9kZSksIFNfSVNESVIoaW5vZGUtPmlfbW9kZSksCisJCQlTX0lTTE5LKGlub2RlLT5pX21vZGUpLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9zaXplKTsKKworCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisKKwkvKgorCSAqIGlfbWFwcGluZyBpcyBhIHBvaW50ZXIgdG8gaV9kYXRhIGR1cmluZyBpbm9kZSBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJnBvaG1lbGZzX2FvcHM7CisKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9mb3AgPSAmcG9obWVsZnNfZmlsZV9vcHM7CisJCWlub2RlLT5pX29wID0gJnBvaG1lbGZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKKwl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaW5vZGUtPmlfZm9wID0gJnBvaG1lbGZzX2Rpcl9mb3BzOworCQlpbm9kZS0+aV9vcCA9ICZwb2htZWxmc19kaXJfaW5vZGVfb3BzOworCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9vcCA9ICZwb2htZWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZwb2htZWxmc19maWxlX29wczsKKwl9IGVsc2UgeworCQlpbm9kZS0+aV9mb3AgPSAmZ2VuZXJpY19yb19mb3BzOworCX0KK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCXNwaW5fbG9jaygmcHNiLT5pbm9fbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmcGktPmlub2RlX2VudHJ5KTsKKwlzcGluX3VubG9jaygmcHNiLT5pbm9fbG9jayk7CisKKwlnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOworfQorCitzdGF0aWMgc3RydWN0IHBvaG1lbGZzX2lub2RlICpwb2htZWxmc19nZXRfaW5vZGVfZnJvbV9saXN0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1bnNpZ25lZCBpbnQgKmNvdW50KQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZwc2ItPmlub19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJcGkgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBwb2htZWxmc19pbm9kZSwKKwkJCQkJaW5vZGVfZW50cnkpOworCQlsaXN0X2RlbF9pbml0KCZwaS0+aW5vZGVfZW50cnkpOworCQkqY291bnQgPSBwaS0+ZHJvcF9jb3VudDsKKwkJcGktPmRyb3BfY291bnQgPSAwOworCX0KKwlzcGluX3VubG9jaygmcHNiLT5pbm9fbG9jayk7CisKKwlyZXR1cm4gcGk7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjOworCisJbXV0ZXhfbG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlwb2htZWxmc19zdGF0ZV9mbHVzaF90cmFuc2FjdGlvbnMoJmMtPnN0YXRlKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworfQorCisvKgorICogLT5wdXRfc3VwZXIoKSBjYWxsYmFjay4gSW52b2tlZCBiZWZvcmUgc3VwZXJibG9jayBpcyBkZXN0cm95ZWQsCisgKiAgc28gaXQgaGFzIHRvIGNsZWFuIGFsbCBwcml2YXRlIGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0Ioc2IpOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGk7CisJdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBpbl9kcm9wX2xpc3QgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7CisKKwlkcHJpbnRrKCIlcy5cbiIsIF9fZnVuY19fKTsKKworCS8qCisJICogS2lsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucywgd2hpY2ggY291bGQgYWZmZWN0IGlub2RlcyBpbi1mbGlnaHQuCisJICovCisJcG9obWVsZnNfZmx1c2hfdHJhbnNhY3Rpb25zKHBzYik7CisKKwl3aGlsZSAoKHBpID0gcG9obWVsZnNfZ2V0X2lub2RlX2Zyb21fbGlzdChwc2IsICZwc2ItPmRyb3BfbGlzdCwgJmNvdW50KSkpIHsKKwkJaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKworCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBwaTogJXAsIGlub2RlOiAlcCwgY291bnQ6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgcGktPmlubywgcGksIGlub2RlLCBjb3VudCk7CisKKwkJaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgIT0gY291bnQpIHsKKwkJCXByaW50aygiJXM6IGlubzogJWxsdSwgcGk6ICVwLCBpbm9kZTogJXAsIGNvdW50OiAldSwgaV9jb3VudDogJWQuXG4iLAorCQkJCQlfX2Z1bmNfXywgcGktPmlubywgcGksIGlub2RlLCBjb3VudCwKKwkJCQkJYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSk7CisJCQljb3VudCA9IGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCk7CisJCQlpbl9kcm9wX2xpc3QrKzsKKwkJfQorCisJCXdoaWxlIChjb3VudC0tKQorCQkJaXB1dCgmcGktPnZmc19pbm9kZSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlub2RlLCB0bXAsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgeworCQlwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIHBpOiAlcCwgaW5vZGU6ICVwLCBpX2NvdW50OiAldS5cbiIsCisJCQkJX19mdW5jX18sIHBpLT5pbm8sIHBpLCBpbm9kZSwgYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSk7CisKKwkJLyoKKwkJICogVGhlc2UgYXJlIHNwZWNpYWwgaW5vZGVzLCB0aGV5IHdlcmUgY3JlYXRlZCBkdXJpbmcKKwkJICogZGlyZWN0b3J5IHJlYWRpbmcgb3IgbG9va3VwLCBhbmQgd2VyZSBub3QgYm91bmQgdG8gZGVudHJ5LAorCQkgKiBzbyB0aGV5IGxpdmUgaGVyZSB3aXRoIHJlZmVyZW5jZSBjb3VudGVyIGJlaW5nIDEgYW5kIHByZXZlbnQKKwkJICogdW1vdW50IGZyb20gc3VjY2VlZCBzaW5jZSBpdCBiZWxpZXZlcyB0aGF0IHRoZXkgYXJlIGJ1c3kuCisJCSAqLworCQljb3VudCA9IGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCk7CisJCWlmIChjb3VudCkgeworCQkJbGlzdF9kZWxfaW5pdCgmaW5vZGUtPmlfc2JfbGlzdCk7CisJCQl3aGlsZSAoY291bnQtLSkKKwkJCQlpcHV0KCZwaS0+dmZzX2lub2RlKTsKKwkJfQorCX0KKworCXBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gcHNiLT5kcm9wX3NjYW5fdGltZW91dCA9IDA7CisJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmcHNiLT5kd29yayk7CisJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmcHNiLT5kcm9wX2R3b3JrKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJZHByaW50aygiJXM6IHN0b3BwZWQgd29ya3F1ZXVlcy5cbiIsIF9fZnVuY19fKTsKKworCXBvaG1lbGZzX2NyeXB0b19leGl0KHBzYik7CisJcG9obWVsZnNfc3RhdGVfZXhpdChwc2IpOworCisJa2ZyZWUocHNiKTsKKwlzYi0+c19mc19pbmZvID0gTlVMTDsKKworCXBvaG1lbGZzX2Z0cmFuc19leGl0KCk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQoreworCSpmbGFncyB8PSBNU19SRE9OTFk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0Ioc2IpOworCisJLyoKKwkgKiBUaGVyZSBhcmUgbm8gZmlsZXN5c3RlbSBzaXplIGxpbWl0cyB5ZXQuCisJICovCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBrc3RhdGZzKSk7CisKKwlidWYtPmZfdHlwZSA9IFBPSE1FTEZTX01BR0lDX05VTTsgLyogJ1BPSC4nICovCisJYnVmLT5mX2JzaXplID0gc2ItPnNfYmxvY2tzaXplOworCWJ1Zi0+Zl9maWxlcyA9IHBzYi0+aW5vOworCWJ1Zi0+Zl9uYW1lbGVuID0gMjU1OworCWJ1Zi0+Zl9maWxlcyA9IGF0b21pY19sb25nX3JlYWQoJnBzYi0+dG90YWxfaW5vZGVzKTsKKwlidWYtPmZfYmZyZWUgPSBidWYtPmZfYmF2YWlsID0gcHNiLT5hdmFpbF9zaXplID4+IFBBR0VfU0hJRlQ7CisJYnVmLT5mX2Jsb2NrcyA9IHBzYi0+dG90YWxfc2l6ZSA+PiBQQUdFX1NISUZUOworCisJZHByaW50aygiJXM6IHRvdGFsOiAlbGx1LCBhdmFpbDogJWxsdSwgaW5vZGVzOiAlbGx1LCBic2l6ZTogJWx1LlxuIiwKKwkJX19mdW5jX18sIHBzYi0+dG90YWxfc2l6ZSwgcHNiLT5hdmFpbF9zaXplLCBidWYtPmZfZmlsZXMsIHNiLT5zX2Jsb2Nrc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqdmZzKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IodmZzLT5tbnRfc2IpOworCisJc2VxX3ByaW50ZihzZXEsICIsaWR4PSV1IiwgcHNiLT5pZHgpOworCXNlcV9wcmludGYoc2VxLCAiLHRyYW5zX3NjYW5fdGltZW91dD0ldSIsIGppZmZpZXNfdG9fbXNlY3MocHNiLT50cmFuc19zY2FuX3RpbWVvdXQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIixkcm9wX3NjYW5fdGltZW91dD0ldSIsIGppZmZpZXNfdG9fbXNlY3MocHNiLT5kcm9wX3NjYW5fdGltZW91dCkpOworCXNlcV9wcmludGYoc2VxLCAiLHdhaXRfb25fcGFnZV90aW1lb3V0PSV1IiwgamlmZmllc190b19tc2Vjcyhwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0KSk7CisJc2VxX3ByaW50ZihzZXEsICIsdHJhbnNfcmV0cmllcz0ldSIsIHBzYi0+dHJhbnNfcmV0cmllcyk7CisJc2VxX3ByaW50ZihzZXEsICIsY3J5cHRvX3RocmVhZF9udW09JXUiLCBwc2ItPmNyeXB0b190aHJlYWRfbnVtKTsKKwlzZXFfcHJpbnRmKHNlcSwgIix0cmFuc19tYXhfcGFnZXM9JXUiLCBwc2ItPnRyYW5zX21heF9wYWdlcyk7CisJc2VxX3ByaW50ZihzZXEsICIsbWNhY2hlX3RpbWVvdXQ9JXUiLCBqaWZmaWVzX3RvX21zZWNzKHBzYi0+bWNhY2hlX3RpbWVvdXQpKTsKKwlpZiAocHNiLT5jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCkKKwkJc2VxX3ByaW50ZihzZXEsICIsY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcG9obWVsZnNfc2Jfb3BzID0geworCS5hbGxvY19pbm9kZQk9IHBvaG1lbGZzX2FsbG9jX2lub2RlLAorCS5kZXN0cm95X2lub2RlCT0gcG9obWVsZnNfZGVzdHJveV9pbm9kZSwKKwkuZHJvcF9pbm9kZQk9IHBvaG1lbGZzX2Ryb3BfaW5vZGUsCisJLndyaXRlX2lub2RlCT0gcG9obWVsZnNfd3JpdGVfaW5vZGUsCisJLnB1dF9zdXBlcgk9IHBvaG1lbGZzX3B1dF9zdXBlciwKKwkucmVtb3VudF9mcwk9IHBvaG1lbGZzX3JlbW91bnQsCisJLnN0YXRmcwkJPSBwb2htZWxmc19zdGF0ZnMsCisJLnNob3dfb3B0aW9ucwk9IHBvaG1lbGZzX3Nob3dfb3B0aW9ucywKK307CisKK2VudW0geworCXBvaG1lbGZzX29wdF9pZHgsCisJcG9obWVsZnNfb3B0X3RyYW5zX3NjYW5fdGltZW91dCwKKwlwb2htZWxmc19vcHRfZHJvcF9zY2FuX3RpbWVvdXQsCisJcG9obWVsZnNfb3B0X3dhaXRfb25fcGFnZV90aW1lb3V0LAorCXBvaG1lbGZzX29wdF90cmFuc19yZXRyaWVzLAorCXBvaG1lbGZzX29wdF9jcnlwdG9fdGhyZWFkX251bSwKKwlwb2htZWxmc19vcHRfdHJhbnNfbWF4X3BhZ2VzLAorCXBvaG1lbGZzX29wdF9jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCwKKwlwb2htZWxmc19vcHRfbWNhY2hlX3RpbWVvdXQsCit9OworCitzdGF0aWMgc3RydWN0IG1hdGNoX3Rva2VuIHBvaG1lbGZzX3Rva2Vuc1tdID0geworCXtwb2htZWxmc19vcHRfaWR4LCAiaWR4PSV1In0sCisJe3BvaG1lbGZzX29wdF90cmFuc19zY2FuX3RpbWVvdXQsICJ0cmFuc19zY2FuX3RpbWVvdXQ9JXUifSwKKwl7cG9obWVsZnNfb3B0X2Ryb3Bfc2Nhbl90aW1lb3V0LCAiZHJvcF9zY2FuX3RpbWVvdXQ9JXUifSwKKwl7cG9obWVsZnNfb3B0X3dhaXRfb25fcGFnZV90aW1lb3V0LCAid2FpdF9vbl9wYWdlX3RpbWVvdXQ9JXUifSwKKwl7cG9obWVsZnNfb3B0X3RyYW5zX3JldHJpZXMsICJ0cmFuc19yZXRyaWVzPSV1In0sCisJe3BvaG1lbGZzX29wdF9jcnlwdG9fdGhyZWFkX251bSwgImNyeXB0b190aHJlYWRfbnVtPSV1In0sCisJe3BvaG1lbGZzX29wdF90cmFuc19tYXhfcGFnZXMsICJ0cmFuc19tYXhfcGFnZXM9JXUifSwKKwl7cG9obWVsZnNfb3B0X2NyeXB0b19mYWlsX3Vuc3VwcG9ydGVkLCAiY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQifSwKKwl7cG9obWVsZnNfb3B0X21jYWNoZV90aW1lb3V0LCAibWNhY2hlX3RpbWVvdXQ9JXUifSwKK307CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwljaGFyICpwOworCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwlpbnQgb3B0aW9uLCBlcnI7CisKKwlpZiAoIW9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWludCB0b2tlbjsKKwkJaWYgKCEqcCkKKwkJCWNvbnRpbnVlOworCisJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgcG9obWVsZnNfdG9rZW5zLCBhcmdzKTsKKworCQllcnIgPSBtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlzd2l0Y2ggKHRva2VuKSB7CisJCQljYXNlIHBvaG1lbGZzX29wdF9pZHg6CisJCQkJcHNiLT5pZHggPSBvcHRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF90cmFuc19zY2FuX3RpbWVvdXQ6CisJCQkJcHNiLT50cmFuc19zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG9wdGlvbik7CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF9kcm9wX3NjYW5fdGltZW91dDoKKwkJCQlwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhvcHRpb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfd2FpdF9vbl9wYWdlX3RpbWVvdXQ6CisJCQkJcHNiLT53YWl0X29uX3BhZ2VfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMob3B0aW9uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X21jYWNoZV90aW1lb3V0OgorCQkJCXBzYi0+bWNhY2hlX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG9wdGlvbik7CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF90cmFuc19yZXRyaWVzOgorCQkJCXBzYi0+dHJhbnNfcmV0cmllcyA9IG9wdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X2NyeXB0b190aHJlYWRfbnVtOgorCQkJCXBzYi0+Y3J5cHRvX3RocmVhZF9udW0gPSBvcHRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF90cmFuc19tYXhfcGFnZXM6CisJCQkJcHNiLT50cmFuc19tYXhfcGFnZXMgPSBvcHRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF9jcnlwdG9fZmFpbF91bnN1cHBvcnRlZDoKKwkJCQlwc2ItPmNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfZmx1c2hfaW5vZGUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKworCWRwcmludGsoIiVzOiAlcDogaW5vOiAlbGx1LCBvd25lZDogJWQuXG4iLAorCQlfX2Z1bmNfXywgaW5vZGUsIHBpLT5pbm8sIHRlc3RfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKSk7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSkpIHsKKwkJZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCQlpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUoaW5vZGUsIDApOworCX0KKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlub2RlLT5pX21hcHBpbmcsIDApOworCisJcG9obWVsZnNfZGF0YV91bmxvY2socGksIDAsIH4wLCBQT0hNRUxGU19XUklURV9MT0NLKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfcHV0X2lub2RlX2NvdW50KHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBwaTogJXAsIGlub2RlOiAlcCwgY291bnQ6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCBwaS0+aW5vLCBwaSwgJnBpLT52ZnNfaW5vZGUsIGNvdW50KTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkVURlNfSU5PREVfTkVFRF9GTFVTSCwgJnBpLT5zdGF0ZSkpCisJCXBvaG1lbGZzX2ZsdXNoX2lub2RlKHBpLCBjb3VudCk7CisKKwl3aGlsZSAoY291bnQtLSkKKwkJaXB1dCgmcGktPnZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2Ryb3Bfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvaG1lbGZzX3NiLCBkcm9wX2R3b3JrLndvcmspOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKworCXdoaWxlICgocGkgPSBwb2htZWxmc19nZXRfaW5vZGVfZnJvbV9saXN0KHBzYiwgJnBzYi0+ZHJvcF9saXN0LCAmY291bnQpKSkgeworCQlwb2htZWxmc19wdXRfaW5vZGVfY291bnQocGksIGNvdW50KTsKKwl9CisJcG9obWVsZnNfY2hlY2tfc3RhdGVzKHBzYik7CisKKwlpZiAocHNiLT5kcm9wX3NjYW5fdGltZW91dCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwc2ItPmRyb3BfZHdvcmssIHBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQpOworfQorCisvKgorICogUnVuIHRocm91Z2ggYWxsIHRyYW5zYWN0aW9ucyBzdGFydGluZyBmcm9tIHRoZSBvbGRlc3QsCisgKiBkcm9wIHRyYW5zYWN0aW9uIGZyb20gY3VycmVudCBzdGF0ZSBhbmQgdHJ5IHRvIHNlbmQgaXQKKyAqIHRvIGFsbCByZW1vdGUgbm9kZXMsIHdoaWNoIGFyZSBjdXJyZW50bHkgaW5zdGFsbGVkLgorICovCitzdGF0aWMgdm9pZCBwb2htZWxmc190cmFuc19zY2FuX3N0YXRlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0OworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gc3QtPnBzYjsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IHBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0OworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmc3QtPnRyYW5zX2xvY2spOworCWZvciAocmJfbm9kZSA9IHJiX2ZpcnN0KCZzdC0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgeworCQlkc3QgPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0LCBzdGF0ZV9lbnRyeSk7CisJCXQgPSBkc3QtPnRyYW5zOworCisJCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIoZHN0LT5zZW5kX3RpbWUgKyB0aW1lb3V0LCBqaWZmaWVzKQorCQkJCSYmIGRzdC0+cmV0cmllcyA9PSAwKQorCQkJYnJlYWs7CisKKwkJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBzdDogJXAsIHJldHJpZXM6ICV1LCBtYXg6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHN0LCBkc3QtPnJldHJpZXMsIHBzYi0+dHJhbnNfcmV0cmllcyk7CisJCW5ldGZzX3RyYW5zX2dldCh0KTsKKworCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKKworCQllcnIgPSAtRVRJTUVET1VUOworCQlpZiAodGltZW91dCAmJiAoKytkc3QtPnJldHJpZXMgPCBwc2ItPnRyYW5zX3JldHJpZXMpKSB7CisJCQllcnIgPSBuZXRmc190cmFuc19yZXNlbmQodCwgcHNiKTsKKwkJfQorCisJCWlmIChlcnIgfHwgKHQtPmZsYWdzICYgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCkpIHsKKwkJCWlmIChuZXRmc190cmFuc19yZW1vdmVfbm9sb2NrKGRzdCwgc3QpKQorCQkJCW5ldGZzX3RyYW5zX2Ryb3BfZHN0X25vc3RhdGUoZHN0KTsKKwkJfQorCisJCXQtPnJlc3VsdCA9IGVycjsKKwkJbmV0ZnNfdHJhbnNfcHV0KHQpOworCX0KKwltdXRleF91bmxvY2soJnN0LT50cmFuc19sb2NrKTsKK30KKworLyoKKyAqIFdhbGsgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIG5ldHdvcmsgc3RhdGVzIGFuZCByZXNlbmQgYWxsCisgKiB0cmFuc2FjdGlvbnMsIHdoaWNoIGFyZSBvbGQgZW5vdWdoLgorICovCitzdGF0aWMgdm9pZCBwb2htZWxmc190cmFuc19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG9obWVsZnNfc2IsIGR3b3JrLndvcmspOworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3Q7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYzsKKworCW11dGV4X2xvY2soJnBzYi0+c3RhdGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3QgPSAmYy0+c3RhdGU7CisKKwkJcG9obWVsZnNfdHJhbnNfc2Nhbl9zdGF0ZShzdCk7CisJfQorCW11dGV4X3VubG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKworCS8qCisJICogSWYgbm8gdGltZW91dCBzcGVjaWZpZWQgdGhlbiBzeXN0ZW0gaXMgaW4gdGhlIG1pZGRsZSBvZiB1bW91bnQgcHJvY2VzcywKKwkgKiBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgc2Nhbm5pbmcgcHJvY2VzcyBhZ2Fpbi4KKwkgKi8KKwlpZiAocHNiLT50cmFuc19zY2FuX3RpbWVvdXQpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHNiLT5kd29yaywgcHNiLT50cmFuc19zY2FuX3RpbWVvdXQpOworfQorCitpbnQgcG9obWVsZnNfbWV0YV9jb21tYW5kX2RhdGEoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IGlkLCB1bnNpZ25lZCBpbnQgY21kX29wLCBjaGFyICphZGRvbiwKKwkJdW5zaWduZWQgaW50IGZsYWdzLCBuZXRmc190cmFuc19jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpwcml2LCB1NjQgc3RhcnQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCWludCBlcnIgPSAwLCBzejsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJaW50IHBhdGhfbGVuLCBhZGRvbl9sZW4gPSAwOworCXZvaWQgKmRhdGE7CisJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm87CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgY21kOiAldSwgYWRkb246ICVwLlxuIiwgX19mdW5jX18sIHBpLT5pbm8sIGNtZF9vcCwgYWRkb24pOworCisJcGF0aF9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJaWYgKHBhdGhfbGVuIDwgMCkgeworCQllcnIgPSBwYXRoX2xlbjsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKGFkZG9uKQorCQlhZGRvbl9sZW4gPSBzdHJsZW4oYWRkb24pICsgMTsgLyogMC1ieXRlICovCisJc3ogPSBhZGRvbl9sZW47CisKKwlpZiAoY21kX29wID09IE5FVEZTX0lOT0RFX0lORk8pCisJCXN6ICs9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyk7CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBzeiArIHBhdGhfbGVuLCBmbGFncywgMCk7CisJaWYgKCF0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKwl0LT5jb21wbGV0ZSA9IGNvbXBsZXRlOworCXQtPnByaXZhdGUgPSBwcml2OworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlkYXRhID0gKHZvaWQgKikoY21kICsgMSk7CisKKwlpZiAoY21kX29wID09IE5FVEZTX0lOT0RFX0lORk8pIHsKKwkJaW5mbyA9IChzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqKShjbWQgKyAxKTsKKwkJZGF0YSA9ICh2b2lkICopKGluZm8gKyAxKTsKKworCQkvKgorCQkgKiBXZSBhcmUgdW5kZXIgaV9tdXRleCwgY2FuIHJlYWQgYW5kIGNoYW5nZSB3aGF0ZXZlciB3ZSB3YW50Li4uCisJCSAqLworCQlpbmZvLT5tb2RlID0gaW5vZGUtPmlfbW9kZTsKKwkJaW5mby0+bmxpbmsgPSBpbm9kZS0+aV9ubGluazsKKwkJaW5mby0+dWlkID0gaW5vZGUtPmlfdWlkOworCQlpbmZvLT5naWQgPSBpbm9kZS0+aV9naWQ7CisJCWluZm8tPmJsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKKwkJaW5mby0+cmRldiA9IGlub2RlLT5pX3JkZXY7CisJCWluZm8tPnNpemUgPSBpbm9kZS0+aV9zaXplOworCQlpbmZvLT52ZXJzaW9uID0gaW5vZGUtPmlfdmVyc2lvbjsKKworCQluZXRmc19jb252ZXJ0X2lub2RlX2luZm8oaW5mbyk7CisJfQorCisJcGF0aF9sZW4gPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIGRhdGEsIHBhdGhfbGVuKTsKKwlpZiAocGF0aF9sZW4gPCAwKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWRwcmludGsoIiVzOiBwYXRoX2xlbjogJWQuXG4iLCBfX2Z1bmNfXywgcGF0aF9sZW4pOworCisJaWYgKGFkZG9uKSB7CisJCXBhdGhfbGVuLS07IC8qIERvIG5vdCBwbGFjZSBudWxsLWJ5dGUgYmVmb3JlIHRoZSBhZGRvbiAqLworCQlwYXRoX2xlbiArPSBzcHJpbnRmKGRhdGEgKyBwYXRoX2xlbiwgIi8lcyIsIGFkZG9uKSArIDE7IC8qIDAgLSBieXRlICovCisJfQorCisJc3ogKz0gcGF0aF9sZW47CisKKwljbWQtPmNtZCA9IGNtZF9vcDsKKwljbWQtPmV4dCA9IHBhdGhfbGVuOworCWNtZC0+c2l6ZSA9IHN6OworCWNtZC0+aWQgPSBpZDsKKwljbWQtPnN0YXJ0ID0gc3RhcnQ7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHN6KTsKKworCS8qCisJICogTm90ZSwgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBsZWFrIGVycm9yIGhlcmU6IHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdpbGwgbm90CisJICogYmUgaW52b2tlZCBmb3IgYWxsb2NhdGlvbiBwYXRoIGZhaWx1cmUuCisJICovCisJcmV0dXJuIG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCitlcnJfb3V0X2ZyZWU6CisJbmV0ZnNfdHJhbnNfZnJlZSh0KTsKK2Vycl9vdXRfZXhpdDoKKwlpZiAoY29tcGxldGUpCisJCWNvbXBsZXRlKE5VTEwsIDAsIHByaXYsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX21ldGFfY29tbWFuZChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1bnNpZ25lZCBpbnQgY21kX29wLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCW5ldGZzX3RyYW5zX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKnByaXYsIHU2NCBzdGFydCkKK3sKKwlyZXR1cm4gcG9obWVsZnNfbWV0YV9jb21tYW5kX2RhdGEocGksIHBpLT5pbm8sIGNtZF9vcCwgTlVMTCwgZmxhZ3MsIGNvbXBsZXRlLCBwcml2LCBzdGFydCk7Cit9CisKKy8qCisgKiBTZW5kIHJlcXVlc3QgYW5kIHdhaXQgZm9yIFBPSE1FTEZTIHJvb3QgY2FwYWJpbGl0aWVzIHJlc3BvbnNlLAorICogd2hpY2ggd2lsbCB1cGRhdGUgc2VydmVyJ3MgaW5mb3JtYWlvbiBhYm91dCBzaXplIG9mIHRoZSBleHBvcnQsCisgKiBwZXJtaXNzaW9ucywgbnVtYmVyIG9mIG9iamVjdHMsIGF2YWlsYWJsZSBzaXplIGFuZCBzbyBvbi4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yb290X2hhbmRzaGFrZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCWludCBlcnIgPSAtRU5PTUVNOworCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgMCwgMCwgMCk7CisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisKKwljbWQtPmNtZCA9IE5FVEZTX0NBUEFCSUxJVElFUzsKKwljbWQtPmlkID0gUE9ITUVMRlNfUk9PVF9DQVBBQklMSVRJRVM7CisJY21kLT5zaXplID0gMDsKKwljbWQtPnN0YXJ0ID0gMDsKKwljbWQtPmV4dCA9IDA7CisJY21kLT5jc2l6ZSA9IDA7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIDApOworCisJZXJyID0gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlwc2ItPmZsYWdzID0gfjA7CisJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHNiLT53YWl0LAorCQkJKHBzYi0+ZmxhZ3MgIT0gfjApLAorCQkJcHNiLT53YWl0X29uX3BhZ2VfdGltZW91dCk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgeworCQllcnIgPSAtcHNiLT5mbGFnczsKKwl9CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEFsbG9jYXRlIHByaXZhdGUgc3VwZXJibG9jayBhbmQgY3JlYXRlIHJvb3QgZGlyLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYjsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgaW5vZGUgKnJvb3Q7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpucGk7CisJc3RydWN0IHFzdHIgc3RyOworCisJcG9obWVsZnNfZnRyYW5zX2luaXQoKTsKKworCXBzYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19zYiksIEdGUF9LRVJORUwpOworCWlmICghcHNiKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXNiLT5zX2ZzX2luZm8gPSBwc2I7CisJc2ItPnNfb3AgPSAmcG9obWVsZnNfc2Jfb3BzOworCXNiLT5zX21hZ2ljID0gUE9ITUVMRlNfTUFHSUNfTlVNOworCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKKwlzYi0+c19ibG9ja3NpemUgPSBQQUdFX1NJWkU7CisKKwlwc2ItPnNiID0gc2I7CisKKwlwc2ItPmlubyA9IDI7CisJcHNiLT5pZHggPSAwOworCXBzYi0+YWN0aXZlX3N0YXRlID0gTlVMTDsKKwlwc2ItPnRyYW5zX3JldHJpZXMgPSA1OworCXBzYi0+dHJhbnNfZGF0YV9zaXplID0gUEFHRV9TSVpFOworCXBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCXBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1MDAwKTsKKwlwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1MDAwKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwc2ItPndhaXQpOworCisJc3Bpbl9sb2NrX2luaXQoJnBzYi0+aW5vX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnBzYi0+ZHJvcF9saXN0KTsKKworCW11dGV4X2luaXQoJnBzYi0+bWNhY2hlX2xvY2spOworCXBzYi0+bWNhY2hlX3Jvb3QgPSBSQl9ST09UOworCXBzYi0+bWNhY2hlX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDUwMDApOworCWF0b21pY19sb25nX3NldCgmcHNiLT5tY2FjaGVfZ2VuLCAwKTsKKworCXBzYi0+dHJhbnNfbWF4X3BhZ2VzID0gMTAwOworCisJcHNiLT5jcnlwdG9fYWxpZ25fc2l6ZSA9IDE2OworCXBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemUgPSAwOworCXBzYi0+aGFzaF9zdHJsZW4gPSAwOworCXBzYi0+Y2lwaGVyX3N0cmxlbiA9IDA7CisJcHNiLT5wZXJmb3JtX2NyeXB0byA9IDA7CisJcHNiLT5jcnlwdG9fdGhyZWFkX251bSA9IDI7CisJcHNiLT5jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCA9IDA7CisJbXV0ZXhfaW5pdCgmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwc2ItPmNyeXB0b19yZWFkeV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcHNiLT5jcnlwdG9fYWN0aXZlX2xpc3QpOworCisJYXRvbWljX3NldCgmcHNiLT50cmFuc19nZW4sIDEpOworCWF0b21pY19zZXQoJnBzYi0+dG90YWxfaW5vZGVzLCAwKTsKKworCW11dGV4X2luaXQoJnBzYi0+c3RhdGVfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnBzYi0+c3RhdGVfbGlzdCk7CisKKwllcnIgPSBwb2htZWxmc19wYXJzZV9vcHRpb25zKChjaGFyICopIGRhdGEsIHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfc2I7CisKKwllcnIgPSBwb2htZWxmc19jb3B5X2NyeXB0byhwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3NiOworCisJZXJyID0gcG9obWVsZnNfc3RhdGVfaW5pdChwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3N0cmluZ3M7CisKKwllcnIgPSBwb2htZWxmc19jcnlwdG9faW5pdChwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zdGF0ZV9leGl0OworCisJZXJyID0gcG9obWVsZnNfcm9vdF9oYW5kc2hha2UocHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfY3J5cHRvX2V4aXQ7CisKKwlzdHIubmFtZSA9ICIvIjsKKwlzdHIuaGFzaCA9IGpoYXNoKCIvIiwgMSwgMCk7CisJc3RyLmxlbiA9IDE7CisKKwlucGkgPSBwb2htZWxmc19jcmVhdGVfZW50cnlfbG9jYWwocHNiLCBOVUxMLCAmc3RyLCAwLCAwNzU1fFNfSUZESVIpOworCWlmIChJU19FUlIobnBpKSkgeworCQllcnIgPSBQVFJfRVJSKG5waSk7CisJCWdvdG8gZXJyX291dF9jcnlwdG9fZXhpdDsKKwl9CisKKwlyb290ID0gJm5waS0+dmZzX2lub2RlOworCisJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKKwlpZiAoIXNiLT5zX3Jvb3QpCisJCWdvdG8gZXJyX291dF9wdXRfcm9vdDsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZwc2ItPmRyb3BfZHdvcmssIHBvaG1lbGZzX2Ryb3Bfc2Nhbik7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwc2ItPmRyb3BfZHdvcmssIHBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQpOworCisJSU5JVF9ERUxBWUVEX1dPUksoJnBzYi0+ZHdvcmssIHBvaG1lbGZzX3RyYW5zX3NjYW4pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHNiLT5kd29yaywgcHNiLT50cmFuc19zY2FuX3RpbWVvdXQpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0X3Jvb3Q6CisJaXB1dChyb290KTsKK2Vycl9vdXRfY3J5cHRvX2V4aXQ6CisJcG9obWVsZnNfY3J5cHRvX2V4aXQocHNiKTsKK2Vycl9vdXRfc3RhdGVfZXhpdDoKKwlwb2htZWxmc19zdGF0ZV9leGl0KHBzYik7CitlcnJfb3V0X2ZyZWVfc3RyaW5nczoKKwlrZnJlZShwc2ItPmNpcGhlcl9zdHJpbmcpOworCWtmcmVlKHBzYi0+aGFzaF9zdHJpbmcpOworZXJyX291dF9mcmVlX3NiOgorCWtmcmVlKHBzYik7CitlcnJfb3V0X2V4aXQ6CisKKwlkcHJpbnRrKCIlczogZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTb21lIFZGUyBtYWdpYyBoZXJlLi4uCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAorCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXJldHVybiBnZXRfc2Jfbm9kZXYoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIHBvaG1lbGZzX2ZpbGxfc3VwZXIsCisJCQkJbW50KTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHBvaG1lbF9mc190eXBlID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAicG9obWVsIiwKKwkuZ2V0X3NiCQk9IHBvaG1lbGZzX2dldF9zYiwKKwkua2lsbF9zYiAJPSBraWxsX2Fub25fc3VwZXIsCit9OworCisvKgorICogQ2FjaGUgYW5kIG1vZHVsZSBpbml0aWFsaXphdGlvbnMgYW5kIGZyZWVpbmcgcm91dGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2luaXRfb25jZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBkYXRhOworCisJaW5vZGVfaW5pdF9vbmNlKCZwaS0+dmZzX2lub2RlKTsKK30KKworc3RhdGljIGludCBfX2luaXQgcG9obWVsZnNfaW5pdF9pbm9kZWNhY2hlKHZvaWQpCit7CisJcG9obWVsZnNfaW5vZGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicG9obWVsZnNfaW5vZGVfY2FjaGUiLAorCQkJCXNpemVvZihzdHJ1Y3QgcG9obWVsZnNfaW5vZGUpLAorCQkJCTAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQpLAorCQkJCXBvaG1lbGZzX2luaXRfb25jZSk7CisJaWYgKCFwb2htZWxmc19pbm9kZV9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHBvaG1lbGZzX2lub2RlX2NhY2hlKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9wb2htZWxfZnModm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcG9obWVsZnNfY29uZmlnX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IHBvaG1lbGZzX2luaXRfaW5vZGVjYWNoZSgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9jb25maWdfZXhpdDsKKworCWVyciA9IHBvaG1lbGZzX21jYWNoZV9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2Rlc3Ryb3k7CisKKwllcnIgPSBuZXRmc190cmFuc19pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X21jYWNoZV9leGl0OworCisJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcG9obWVsX2ZzX3R5cGUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF90cmFuczsKKworCXJldHVybiAwOworCitlcnJfb3V0X3RyYW5zOgorCW5ldGZzX3RyYW5zX2V4aXQoKTsKK2Vycl9vdXRfbWNhY2hlX2V4aXQ6CisJcG9obWVsZnNfbWNhY2hlX2V4aXQoKTsKK2Vycl9vdXRfZGVzdHJveToKKwlwb2htZWxmc19kZXN0cm95X2lub2RlY2FjaGUoKTsKK2Vycl9vdXRfY29uZmlnX2V4aXQ6CisJcG9obWVsZnNfY29uZmlnX2V4aXQoKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9wb2htZWxfZnModm9pZCkKK3sKKyAgICAgICAgdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZwb2htZWxfZnNfdHlwZSk7CisJcG9obWVsZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CisJcG9obWVsZnNfbWNhY2hlX2V4aXQoKTsKKwlwb2htZWxmc19jb25maWdfZXhpdCgpOworCW5ldGZzX3RyYW5zX2V4aXQoKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9wb2htZWxfZnMpOworbW9kdWxlX2V4aXQoZXhpdF9wb2htZWxfZnMpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBvaG1lbCBmaWxlc3lzdGVtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDRhMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2xvY2suYwpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCitzdGF0aWMgaW50IHBvaG1lbGZzX3NlbmRfbG9ja190cmFucyhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLAorCQl1NjQgaWQsIHU2NCBzdGFydCwgdTMyIHNpemUsIGludCB0eXBlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCWludCBwYXRoX2xlbiwgZXJyOworCXZvaWQgKmRhdGE7CisJc3RydWN0IG5ldGZzX2xvY2sgKmw7CisJaW50IGlzaXplID0gKHR5cGUgJiBQT0hNRUxGU19MT0NLX0dSQUIpID8gMCA6IHNpemVvZihzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyk7CisKKwllcnIgPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcGF0aF9sZW4gPSBlcnI7CisKKwllcnIgPSAtRU5PTUVNOworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHBhdGhfbGVuICsgc2l6ZW9mKHN0cnVjdCBuZXRmc19sb2NrKSArIGlzaXplLCAwLCAwKTsKKwlpZiAoIXQpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlkYXRhID0gY21kICsgMTsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgZGF0YSwgcGF0aF9sZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKwlwYXRoX2xlbiA9IGVycjsKKworCWwgPSBkYXRhICsgcGF0aF9sZW47CisKKwlsLT5zdGFydCA9IHN0YXJ0OworCWwtPnNpemUgPSBzaXplOworCWwtPnR5cGUgPSB0eXBlOworCWwtPmlubyA9IHBpLT5pbm87CisKKwljbWQtPmNtZCA9IE5FVEZTX0xPQ0s7CisJY21kLT5zdGFydCA9IDA7CisJY21kLT5pZCA9IGlkOworCWNtZC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfbG9jaykgKyBwYXRoX2xlbiArIGlzaXplOworCWNtZC0+ZXh0ID0gcGF0aF9sZW47CisJY21kLT5jc2l6ZSA9IDA7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX2NvbnZlcnRfbG9jayhsKTsKKworCWlmIChpc2l6ZSkgeworCQlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqKShsICsgMSk7CisKKwkJaW5mby0+bW9kZSA9IGlub2RlLT5pX21vZGU7CisJCWluZm8tPm5saW5rID0gaW5vZGUtPmlfbmxpbms7CisJCWluZm8tPnVpZCA9IGlub2RlLT5pX3VpZDsKKwkJaW5mby0+Z2lkID0gaW5vZGUtPmlfZ2lkOworCQlpbmZvLT5ibG9ja3MgPSBpbm9kZS0+aV9ibG9ja3M7CisJCWluZm8tPnJkZXYgPSBpbm9kZS0+aV9yZGV2OworCQlpbmZvLT5zaXplID0gaW5vZGUtPmlfc2l6ZTsKKwkJaW5mby0+dmVyc2lvbiA9IGlub2RlLT5pX3ZlcnNpb247CisKKwkJbmV0ZnNfY29udmVydF9pbm9kZV9pbmZvKGluZm8pOworCX0KKworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHBhdGhfbGVuICsgc2l6ZW9mKHN0cnVjdCBuZXRmc19sb2NrKSArIGlzaXplKTsKKworCXJldHVybiBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKworZXJyX291dF9mcmVlOgorCW5ldGZzX3RyYW5zX2ZyZWUodCk7CitlcnJfb3V0X2V4aXQ6CisJcHJpbnRrKCIlczogZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19kYXRhX2xvY2soc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSwgaW50IHR5cGUpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwaS0+dmZzX2lub2RlLmlfc2IpOworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm07CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IGlhdHRyIGlhdHRyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKworCWRwcmludGsoIiVzOiAlcDogaW5vOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsICIKKwkJCSJ0eXBlOiAlZCwgbG9ja2VkIGFzOiAlZCwgb3duZWQ6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCAmcGktPnZmc19pbm9kZSwgcGktPmlubywKKwkJCXN0YXJ0LCBzaXplLCB0eXBlLCBwaS0+bG9ja190eXBlLAorCQkJISF0ZXN0X2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSkpOworCisJaWYgKCFwb2htZWxmc19uZWVkX2xvY2socGksIHR5cGUpKQorCQlyZXR1cm4gMDsKKworCW0gPSBwb2htZWxmc19tY2FjaGVfYWxsb2MocHNiLCBzdGFydCwgc2l6ZSwgTlVMTCk7CisJaWYgKElTX0VSUihtKSkKKwkJcmV0dXJuIFBUUl9FUlIobSk7CisKKwllcnIgPSBwb2htZWxmc19zZW5kX2xvY2tfdHJhbnMocGksIG0tPmdlbiwgc3RhcnQsIHNpemUsCisJCQl0eXBlIHwgUE9ITUVMRlNfTE9DS19HUkFCKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZtLT5jb21wbGV0ZSwgcHNiLT5tY2FjaGVfdGltZW91dCk7CisJaWYgKGVycikKKwkJZXJyID0gbS0+ZXJyOworCWVsc2UKKwkJZXJyID0gLUVUSU1FRE9VVDsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKCIlczogJXA6IGlubzogJWxsdSwgbWdlbjogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCAmcGktPnZmc19pbm9kZSwgcGktPmlubywgbS0+Z2VuLCBzdGFydCwgc2l6ZSwgZXJyKTsKKwl9CisKKwlpZiAoZXJyICYmIChlcnIgIT0gLUVOT0VOVCkpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlpZiAoIWVycikgeworCQluZXRmc19jb252ZXJ0X2lub2RlX2luZm8oJm0tPmluZm8pOworCisJCWlhdHRyLmlhX3ZhbGlkID0gQVRUUl9NT0RFIHwgQVRUUl9VSUQgfCBBVFRSX0dJRCB8IEFUVFJfU0laRSB8IEFUVFJfQVRJTUU7CisJCWlhdHRyLmlhX21vZGUgPSBtLT5pbmZvLm1vZGU7CisJCWlhdHRyLmlhX3VpZCA9IG0tPmluZm8udWlkOworCQlpYXR0ci5pYV9naWQgPSBtLT5pbmZvLmdpZDsKKwkJaWF0dHIuaWFfc2l6ZSA9IG0tPmluZm8uc2l6ZTsKKwkJaWF0dHIuaWFfYXRpbWUgPSBDVVJSRU5UX1RJTUU7CisKKwkJZHByaW50aygiJXM6ICVwOiBpbm86ICVsbHUsIG1nZW46ICVsbHUsIHN0YXJ0OiAlbGx1LCBpc2l6ZTogJWxsdSAtPiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCAmcGktPnZmc19pbm9kZSwgcGktPmlubywgbS0+Z2VuLCBzdGFydCwgaW5vZGUtPmlfc2l6ZSwgbS0+aW5mby5zaXplKTsKKworCQllcnIgPSBwb2htZWxmc19zZXRhdHRyX3Jhdyhpbm9kZSwgJmlhdHRyKTsKKwkJaWYgKCFlcnIpIHsKKwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGRfZmluZF9hbGlhcyhpbm9kZSk7CisJCQlpZiAoZGVudHJ5KSB7CisJCQkJZnNub3RpZnlfY2hhbmdlKGRlbnRyeSwgaWF0dHIuaWFfdmFsaWQpOworCQkJCWRwdXQoZGVudHJ5KTsKKwkJCX0KKwkJfQorCX0KKworCXBpLT5sb2NrX3R5cGUgPSB0eXBlOworCXNldF9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpOworCisJcG9obWVsZnNfbWNhY2hlX3B1dChwc2IsIG0pOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0OgorCXBvaG1lbGZzX21jYWNoZV9wdXQocHNiLCBtKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfZGF0YV91bmxvY2soc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSwgaW50IHR5cGUpCit7CisJZHByaW50aygiJXM6ICVwOiBpbm86ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgdHlwZTogJWQuXG4iLAorCQkJX19mdW5jX18sICZwaS0+dmZzX2lub2RlLCBwaS0+aW5vLCBzdGFydCwgc2l6ZSwgdHlwZSk7CisJcGktPmxvY2tfdHlwZSA9IDA7CisJY2xlYXJfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9ESVJfU1lOQ0VELCAmcGktPnN0YXRlKTsKKwljbGVhcl9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpOworCXJldHVybiBwb2htZWxmc19zZW5kX2xvY2tfdHJhbnMocGksIHBpLT5pbm8sIHN0YXJ0LCBzaXplLCB0eXBlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9tY2FjaGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9tY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI2NjVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL21jYWNoZS5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG9obWVsZnNfbWNhY2hlX2NhY2hlOworc3RhdGljIG1lbXBvb2xfdCAqcG9obWVsZnNfbWNhY2hlX3Bvb2w7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvaG1lbGZzX21jYWNoZV9jbXAodTY0IGdlbiwgdTY0IG5ldykKK3sKKwlpZiAoZ2VuIDwgbmV3KQorCQlyZXR1cm4gMTsKKwlpZiAoZ2VuID4gbmV3KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwb2htZWxmc19tY2FjaGUgKnBvaG1lbGZzX21jYWNoZV9zZWFyY2goc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHU2NCBnZW4pCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmcHNiLT5tY2FjaGVfcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqdG1wLCAqcmV0ID0gTlVMTDsKKwlpbnQgY21wOworCisJd2hpbGUgKG4pIHsKKwkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSwgbWNhY2hlX2VudHJ5KTsKKworCQljbXAgPSBwb2htZWxmc19tY2FjaGVfY21wKHRtcC0+Z2VuLCBnZW4pOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXJldCA9IHRtcDsKKwkJCXBvaG1lbGZzX21jYWNoZV9nZXQocmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19tY2FjaGVfaW5zZXJ0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKQoreworCXN0cnVjdCByYl9yb290ICpyb290ID0gJnBzYi0+bWNhY2hlX3Jvb3Q7CisJc3RydWN0IHJiX25vZGUgKipuID0gJnJvb3QtPnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKnJldCA9IE5VTEwsICp0bXA7CisJaW50IGNtcDsKKworCXdoaWxlICgqbikgeworCQlwYXJlbnQgPSAqbjsKKworCQl0bXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUsIG1jYWNoZV9lbnRyeSk7CisKKwkJY21wID0gcG9obWVsZnNfbWNhY2hlX2NtcCh0bXAtPmdlbiwgbS0+Z2VuKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0bXA7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZXQpCisJCXJldHVybiAtRUVYSVNUOworCisJcmJfbGlua19ub2RlKCZtLT5tY2FjaGVfZW50cnksIHBhcmVudCwgbik7CisJcmJfaW5zZXJ0X2NvbG9yKCZtLT5tY2FjaGVfZW50cnksIHJvb3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfbWNhY2hlX3JlbW92ZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSkKK3sKKwlpZiAobSAmJiBtLT5tY2FjaGVfZW50cnkucmJfcGFyZW50X2NvbG9yKSB7CisJCXJiX2VyYXNlKCZtLT5tY2FjaGVfZW50cnksICZwc2ItPm1jYWNoZV9yb290KTsKKwkJbS0+bWNhY2hlX2VudHJ5LnJiX3BhcmVudF9jb2xvciA9IDA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBwb2htZWxmc19tY2FjaGVfcmVtb3ZlX2xvY2tlZChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSkKK3sKKwltdXRleF9sb2NrKCZwc2ItPm1jYWNoZV9sb2NrKTsKKwlwb2htZWxmc19tY2FjaGVfcmVtb3ZlKHBzYiwgbSk7CisJbXV0ZXhfdW5sb2NrKCZwc2ItPm1jYWNoZV9sb2NrKTsKK30KKworc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqcG9obWVsZnNfbWNhY2hlX2FsbG9jKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCB1NjQgc3RhcnQsCisJCXVuc2lnbmVkIGludCBzaXplLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm07CisJaW50IGVyciA9IC1FTk9NRU07CisKKwltID0gbWVtcG9vbF9hbGxvYyhwb2htZWxmc19tY2FjaGVfcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWluaXRfY29tcGxldGlvbigmbS0+Y29tcGxldGUpOworCW0tPmVyciA9IDA7CisJYXRvbWljX3NldCgmbS0+cmVmY250LCAxKTsKKwltLT5kYXRhID0gZGF0YTsKKwltLT5zdGFydCA9IHN0YXJ0OworCW0tPnNpemUgPSBzaXplOworCW0tPmdlbiA9IGF0b21pY19sb25nX2luY19yZXR1cm4oJnBzYi0+bWNhY2hlX2dlbik7CisKKwltdXRleF9sb2NrKCZwc2ItPm1jYWNoZV9sb2NrKTsKKwllcnIgPSBwb2htZWxmc19tY2FjaGVfaW5zZXJ0KHBzYiwgbSk7CisJbXV0ZXhfdW5sb2NrKCZwc2ItPm1jYWNoZV9sb2NrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXJldHVybiBtOworCitlcnJfb3V0X2ZyZWU6CisJbWVtcG9vbF9mcmVlKG0sIHBvaG1lbGZzX21jYWNoZV9wb29sKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCit2b2lkIHBvaG1lbGZzX21jYWNoZV9mcmVlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKQoreworCXBvaG1lbGZzX21jYWNoZV9yZW1vdmVfbG9ja2VkKHBzYiwgbSk7CisKKwltZW1wb29sX2ZyZWUobSwgcG9obWVsZnNfbWNhY2hlX3Bvb2wpOworfQorCitpbnQgX19pbml0IHBvaG1lbGZzX21jYWNoZV9pbml0KHZvaWQpCit7CisJcG9obWVsZnNfbWNhY2hlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBvaG1lbGZzX21jYWNoZV9jYWNoZSIsCisJCQkJc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19tY2FjaGUpLAorCQkJCTAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQpLCBOVUxMKTsKKwlpZiAoIXBvaG1lbGZzX21jYWNoZV9jYWNoZSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlwb2htZWxmc19tY2FjaGVfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgyNTYsIHBvaG1lbGZzX21jYWNoZV9jYWNoZSk7CisJaWYgKCFwb2htZWxmc19tY2FjaGVfcG9vbCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWttZW1fY2FjaGVfZGVzdHJveShwb2htZWxmc19tY2FjaGVfY2FjaGUpOworZXJyX291dF9leGl0OgorCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIHBvaG1lbGZzX21jYWNoZV9leGl0KHZvaWQpCit7CisJbWVtcG9vbF9kZXN0cm95KHBvaG1lbGZzX21jYWNoZV9wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocG9obWVsZnNfbWNhY2hlX2NhY2hlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI4NTQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldC5jCkBAIC0wLDAgKzEsMTI0NyBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKK3N0YXRpYyBpbnQgcG9obWVsZnNfZnRyYW5zX3NpemUgPSAxMDI0MDsKK3N0YXRpYyB1MzIgKnBvaG1lbGZzX2Z0cmFuczsKKworaW50IHBvaG1lbGZzX2Z0cmFuc19pbml0KHZvaWQpCit7CisJcG9obWVsZnNfZnRyYW5zID0gdm1hbGxvYyhwb2htZWxmc19mdHJhbnNfc2l6ZSAqIDQpOworCWlmICghcG9obWVsZnNfZnRyYW5zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIHBvaG1lbGZzX2Z0cmFuc19leGl0KHZvaWQpCit7CisJdmZyZWUocG9obWVsZnNfZnRyYW5zKTsKK30KKwordm9pZCBwb2htZWxmc19mdHJhbnNfY2xlYW4odTY0IGlkKQoreworCWlmIChwb2htZWxmc19mdHJhbnMpIHsKKwkJdTMyIGkgPSBpZCAmIDB4ZmZmZmZmZmY7CisJCWludCBpZHggPSBpICUgcG9obWVsZnNfZnRyYW5zX3NpemU7CisKKwkJcG9obWVsZnNfZnRyYW5zW2lkeF0gPSAwOworCX0KK30KKwordm9pZCBwb2htZWxmc19mdHJhbnNfdXBkYXRlKHU2NCBpZCkKK3sKKwlpZiAocG9obWVsZnNfZnRyYW5zKSB7CisJCXUzMiBpID0gaWQgJiAweGZmZmZmZmZmOworCQlpbnQgaWR4ID0gaSAlIHBvaG1lbGZzX2Z0cmFuc19zaXplOworCisJCXBvaG1lbGZzX2Z0cmFuc1tpZHhdID0gaTsKKwl9Cit9CisKK2ludCBwb2htZWxmc19mdHJhbnNfY2hlY2sodTY0IGlkKQoreworCWlmIChwb2htZWxmc19mdHJhbnMpIHsKKwkJdTMyIGkgPSBpZCAmIDB4ZmZmZmZmZmY7CisJCWludCBpZHggPSBpICUgcG9obWVsZnNfZnRyYW5zX3NpemU7CisKKwkJcmV0dXJuIChwb2htZWxmc19mdHJhbnNbaWR4XSA9PSBpKTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBBc3luYyBtYWNoaW5lcnkgbGl2ZXMgaGVyZS4KKyAqIEFsbCBjb21tYW5kcyBiZWluZyBzZW50IHRvIHNlcnZlciBkbyBfbm90XyByZXF1aXJlIHN5bmMgcmVwbHksCisgKiBpbnN0ZWFkLCBpZiBpdCBpcyByZWFsbHkgbmVlZGVkLCBsaWtlIHJlYWRkaXIgb3IgcmVhZHBhZ2UsIGNhbGxlcgorICogc2xlZXBzIHdhaXRpbmcgZm9yIGRhdGEsIHdoaWNoIHdpbGwgYmUgcGxhY2VkIGludG8gcHJvdmlkZWQgYnVmZmVyCisgKiBhbmQgY2FsbGVyIHdpbGwgYmUgYXdha2VuZWQuCisgKgorICogRXZlcnkgY29tbWFuZCByZXNwb25zZSBjYW4gY29tZSB3aXRob3V0IHNvbWUgbGlzdGVuZXIuIEZvciBleGFtcGxlCisgKiByZWFkZGlyIHJlc3BvbnNlIHdpbGwgYWRkIG5ldyBvYmplY3RzIGludG8gY2FjaGUgd2l0aG91dCBhcHByb3ByaWF0ZQorICogcmVxdWVzdCBmcm9tIHVzZXJzcGFjZS4gVGhpcyBpcyB1c2VkIGluIGNhY2hlIGNvaGVyZW5jeS4KKyAqCisgKiBJZiBvYmplY3QgaXMgbm90IGZvdW5kIGZvciBnaXZlbiBkYXRhLCBpdCBpcyBkaXNjYXJkZWQuCisgKgorICogQWxsIHJlcXVlc3RzIGFyZSByZWNlaXZlZCBieSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZC4KKyAqLworCisvKgorICogQmFzaWMgbmV0d29yayBzZW5kaW5nL3JlY2VpdmluZyBmdW5jdGlvbnMuCisgKiBCbG9ja2VkIG1vZGUgaXMgdXNlZC4KKyAqLworc3RhdGljIGludCBuZXRmc19kYXRhX3JlY3Yoc3RydWN0IG5ldGZzX3N0YXRlICpzdCwgdm9pZCAqYnVmLCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3Y7CisJaW50IGVycjsKKworCUJVR19PTighc2l6ZSk7CisKKwlpb3YuaW92X2Jhc2UgPSBidWY7CisJaW92Lmlvdl9sZW4gPSBzaXplOworCisJbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwltc2cubXNnX25hbWVsZW4gPSAwOworCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUOworCisJZXJyID0ga2VybmVsX3JlY3Ztc2coc3QtPnNvY2tldCwgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4sCisJCQltc2cubXNnX2ZsYWdzKTsKKwlpZiAoZXJyIDw9IDApIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIHJlY3YgZGF0YTogc2l6ZTogJWxsdSwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBzaXplLCBlcnIpOworCQlpZiAoZXJyID09IDApCisJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2RhdGFfcmVjdihzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7CisJdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7CisJdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKKwlpbnQgZXJyID0gMDsKKworCXdoaWxlIChzaXplICYmICFlcnIpIHsKKwkJcmV2ZW50cyA9IG5ldGZzX3N0YXRlX3BvbGwoc3QpOworCisJCWlmICghKHJldmVudHMgJiBtYXNrKSkgeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCWZvciAoOzspIHsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCQkJYnJlYWs7CisKKwkJCQlyZXZlbnRzID0gbmV0ZnNfc3RhdGVfcG9sbChzdCk7CisKKwkJCQlpZiAocmV2ZW50cyAmIG1hc2spCisJCQkJCWJyZWFrOworCisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQlicmVhazsKKworCQkJCXNjaGVkdWxlKCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmaW5pc2hfd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCk7CisJCX0KKworCQllcnIgPSAwOworCQluZXRmc19zdGF0ZV9sb2NrKHN0KTsKKwkJaWYgKHN0LT5zb2NrZXQgJiYgKHN0LT5yZWFkX3NvY2tldCA9PSBzdC0+c29ja2V0KSAmJiAocmV2ZW50cyAmIFBPTExJTikpIHsKKwkJCWVyciA9IG5ldGZzX2RhdGFfcmVjdihzdCwgZGF0YSwgc2l6ZSk7CisJCQlpZiAoZXJyID4gMCkgeworCQkJCWRhdGEgKz0gZXJyOworCQkJCXNpemUgLT0gZXJyOworCQkJCWVyciA9IDA7CisJCQl9IGVsc2UgaWYgKGVyciA9PSAwKQorCQkJCWVyciA9IC1FQ09OTlJFU0VUOworCQl9CisKKwkJaWYgKHJldmVudHMgJiBlcnJfbWFzaykgeworCQkJcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQkJX19mdW5jX18sIHJldmVudHMsIHN0LT5zb2NrZXQsIHNpemUsIGVycik7CisJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJfQorCQluZXRmc19zdGF0ZV91bmxvY2soc3QpOworCisJCWlmIChlcnIgPCAwKSB7CisJCQlpZiAobmV0ZnNfc3RhdGVfdHJ5bG9ja19zZW5kKHN0KSkgeworCQkJCW5ldGZzX3N0YXRlX2V4aXQoc3QpOworCQkJCWVyciA9IG5ldGZzX3N0YXRlX2luaXQoc3QpOworCQkJCWlmICghZXJyKQorCQkJCQllcnIgPSAtRUFHQUlOOworCQkJCW5ldGZzX3N0YXRlX3VubG9ja19zZW5kKHN0KTsKKwkJCX0gZWxzZSB7CisJCQkJc3QtPm5lZWRfcmVzZXQgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWVyciA9IC1FTk9ERVY7CisKKwkJaWYgKGVycikKKwkJCXByaW50aygiJXM6IHNvY2tldDogJXAsIHJlYWRfc29ja2V0OiAlcCwgcmV2ZW50czogJXgsIHJldl9lcnJvcjogJWQsICIKKwkJCQkJInNob3VsZF9zdG9wOiAlZCwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBzdC0+c29ja2V0LCBzdC0+cmVhZF9zb2NrZXQsCisJCQkJcmV2ZW50cywgcmV2ZW50cyAmIGVycl9tYXNrLCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksIHNpemUsIGVycik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3RydWN0IG5ldGZzX3N0YXRlICpzdCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJaW50IGVycjsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdihzdCwgZGF0YSwgc2l6ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9kYXRhKCZzdC0+ZW5nLCBjbWQtPml2LCBkYXRhLCBOVUxMLCBzaXplKTsKK30KKworLyoKKyAqIFBvbGxpbmcgbWFjaGluZXJ5LgorICovCisKK3N0cnVjdCBuZXRmc19wb2xsX2hlbHBlcgoreworCXBvbGxfdGFibGUgCQlwdDsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUJKnN0OworfTsKKworc3RhdGljIGludCBuZXRmc19xdWV1ZV93YWtlKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSkKK3sKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBuZXRmc19zdGF0ZSwgd2FpdCk7CisKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBuZXRmc19xdWV1ZV9mdW5jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQsCisJCQkJIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBuZXRmc19wb2xsX2hlbHBlciwgcHQpLT5zdDsKKworCXN0LT53aGVhZCA9IHdoZWFkOworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnN0LT53YWl0LCBuZXRmc19xdWV1ZV93YWtlKTsKKwlhZGRfd2FpdF9xdWV1ZSh3aGVhZCwgJnN0LT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgbmV0ZnNfcG9sbF9leGl0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaWYgKHN0LT53aGVhZCkgeworCQlyZW1vdmVfd2FpdF9xdWV1ZShzdC0+d2hlYWQsICZzdC0+d2FpdCk7CisJCXN0LT53aGVhZCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IG5ldGZzX3BvbGxfaW5pdChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc19wb2xsX2hlbHBlciBwaDsKKworCXBoLnN0ID0gc3Q7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJnBoLnB0LCAmbmV0ZnNfcXVldWVfZnVuYyk7CisKKwlzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgJnBoLnB0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCByZXNwb25zZSBmb3IgcmVhZHBhZ2UgY29tbWFuZC4gV2Ugc2VhcmNoIGlub2RlIGFuZCBwYWdlIGluIGl0cyBtYXBwaW5nCisgKiBhbmQgY29weSBkYXRhIGludG8uIElmIGl0IHdhcyBhc3luYyByZXF1ZXN0LCB0aGVuIHdlIHF1ZXVlIHBhZ2UgaW50byBzaGFyZWQKKyAqIGRhdGEgYW5kIHdha2V1cCBsaXN0ZW5lciwgd2hvIHdpbGwgY29weSBpdCB0byB1c2Vyc3BhY2UuCisgKgorICogVGhlcmUgaXMgYSB3b3JrIGluIHByb2dyZXNzIG9mIGFsbG93aW5nIHRvIGNhbGwgY29weV90b191c2VyKCkgZGlyZWN0bHkgZnJvbQorICogYXN5bmMgcmVjZWl2aW5nIGtlcm5lbCB0aHJlYWQuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZF9wYWdlX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBzdC0+cHNiOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY21kLT5zaXplID4gUEFHRV9DQUNIRV9TSVpFKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlub2RlID0gaWxvb2t1cChzdC0+cHNiLT5zYiwgY21kLT5pZCk7CisJaWYgKCFpbm9kZSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBpbm9kZTogaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywgY21kLT5pZCk7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGNtZC0+c3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJaWYgKCFwYWdlIHx8ICFQYWdlTG9ja2VkKHBhZ2UpKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kL2xvY2sgcGFnZTogcGFnZTogJXAsIGlkOiAlbGx1LCBzdGFydDogJWxsdSwgaW5kZXg6ICVsbHUuXG4iLAorCQkJCV9fZnVuY19fLCBwYWdlLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnN0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCisJCXdoaWxlIChjbWQtPnNpemUpIHsKKwkJCXVuc2lnbmVkIGludCBzeiA9IG1pbihjbWQtPnNpemUsIHN0LT5zaXplKTsKKworCQkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBzdC0+ZGF0YSwgc3opOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJY21kLT5zaXplIC09IHN6OworCQl9CisKKwkJZXJyID0gLUVOT0RFVjsKKwkJaWYgKHBhZ2UpCisJCQlnb3RvIGVycl9vdXRfcGFnZV9wdXQ7CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCisJaWYgKGNtZC0+c2l6ZSkgeworCQl2b2lkICphZGRyOworCisJCWFkZHIgPSBrbWFwKHBhZ2UpOworCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3Yoc3QsIGFkZHIsIGNtZC0+c2l6ZSk7CisJCWt1bm1hcChwYWdlKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3BhZ2VfdW5sb2NrOworCX0KKworCWRwcmludGsoIiVzOiBwYWdlOiAlcCwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCBsb2NrZWQ6ICVkLlxuIiwKKwkJX19mdW5jX18sIHBhZ2UsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSwgUGFnZUxvY2tlZChwYWdlKSk7CisKKwlTZXRQYWdlQ2hlY2tlZChwYWdlKTsKKwlpZiAoKHBzYi0+aGFzaF9zdHJpbmcgfHwgcHNiLT5jaXBoZXJfc3RyaW5nKSAmJiBwc2ItPnBlcmZvcm1fY3J5cHRvICYmIGNtZC0+c2l6ZSkgeworCQllcnIgPSBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9wYWdlKCZzdC0+ZW5nLCBwYWdlLCBjbWQtPnNpemUsIGNtZC0+aXYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX291dF9wYWdlX3VubG9jazsKKwl9IGVsc2UgeworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJfQorCisJcG9obWVsZnNfcHV0X2lub2RlKFBPSE1FTEZTX0koaW5vZGUpKTsKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3BhZ2VfdW5sb2NrOgorCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKK2Vycl9vdXRfcGFnZV9wdXQ6CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworZXJyX291dF9wdXQ6CisJcG9obWVsZnNfcHV0X2lub2RlKFBPSE1FTEZTX0koaW5vZGUpKTsKK2Vycl9vdXRfZXhpdDoKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NoZWNrX25hbWUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBxc3RyICpzdHIsCisJCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisJaW50IGVyciA9IDA7CisJdTY0IGlubyA9IDA7CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwluID0gcG9obWVsZnNfc2VhcmNoX2hhc2gocGFyZW50LCBzdHItPmhhc2gpOworCWlmIChuKQorCQlpbm8gPSBuLT5pbm87CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCWlmICghaW5vKQorCQlnb3RvIG91dDsKKworCWlub2RlID0gaWxvb2t1cChwYXJlbnQtPnZmc19pbm9kZS5pX3NiLCBpbm8pOworCWlmICghaW5vZGUpCisJCWdvdG8gb3V0OworCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vZGU6ICVsbHUuXG4iLCBfX2Z1bmNfXywgcGFyZW50LT5pbm8sIGlubyk7CisKKwlwb2htZWxmc19maWxsX2lub2RlKGlub2RlLCBpbmZvKTsKKwlwb2htZWxmc19wdXRfaW5vZGUoUE9ITUVMRlNfSShpbm9kZSkpOworCWVyciA9IC1FRVhJU1Q7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlYWRkaXIgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuIElmIHNwZWNpYWwgZmllbGQgaXMgc2V0LCB3ZSB3YWtldXAKKyAqIGxpc3RlbmVyIChyZWFkZGlyKCkgY2FsbCksIHdoaWNoIHdpbGwgY29weSBkYXRhIHRvIHVzZXJzcGFjZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yZWFkZGlyX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCA9IE5VTEwsICpucGk7CisJaW50IGVyciA9IDAsIGxhc3QgPSBjbWQtPmV4dDsKKwlzdHJ1Y3QgcXN0ciBzdHI7CisKKwlpZiAoY21kLT5zaXplID4gc3QtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5vZGUgPSBpbG9va3VwKHN0LT5wc2ItPnNiLCBjbWQtPmlkKTsKKwlpZiAoIWlub2RlKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGlub2RlOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLCBjbWQtPmlkKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCXBhcmVudCA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJaWYgKCFjbWQtPnNpemUgJiYgY21kLT5zdGFydCkgeworCQllcnIgPSAtY21kLT5zdGFydDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNtZC0+c2l6ZSkgeworCQljaGFyICpuYW1lOworCisJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3QsIHN0LT5kYXRhLCBjbWQtPnNpemUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3B1dDsKKworCQlpbmZvID0gKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICopKHN0LT5kYXRhKTsKKworCQluYW1lID0gKGNoYXIgKikoaW5mbyArIDEpOworCQlzdHIubGVuID0gY21kLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvKSAtIDEgLSBjbWQtPmNwYWQ7CisJCW5hbWVbc3RyLmxlbl0gPSAwOworCQlzdHIubmFtZSA9IG5hbWU7CisJCXN0ci5oYXNoID0gamhhc2goc3RyLm5hbWUsIHN0ci5sZW4sIDApOworCisJCW5ldGZzX2NvbnZlcnRfaW5vZGVfaW5mbyhpbmZvKTsKKworCQlpZiAocGFyZW50KSB7CisJCQllcnIgPSBwb2htZWxmc19jaGVja19uYW1lKHBhcmVudCwgJnN0ciwgaW5mbyk7CisJCQlpZiAoZXJyKSB7CisJCQkJaWYgKGVyciA9PSAtRUVYSVNUKQorCQkJCQllcnIgPSAwOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJaW5mby0+aW5vID0gY21kLT5zdGFydDsKKwkJaWYgKCFpbmZvLT5pbm8pCisJCQlpbmZvLT5pbm8gPSBwb2htZWxmc19uZXdfaW5vKHN0LT5wc2IpOworCisJCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgbmFtZTogJyVzJywgaGFzaDogJXgsIGxlbjogJXUsIG1vZGU6ICVvLlxuIiwKKwkJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIGluZm8tPmlubywgc3RyLm5hbWUsIHN0ci5oYXNoLCBzdHIubGVuLAorCQkJCWluZm8tPm1vZGUpOworCisJCW5waSA9IHBvaG1lbGZzX25ld19pbm9kZShzdC0+cHNiLCBwYXJlbnQsICZzdHIsIGluZm8sIDApOworCQlpZiAoSVNfRVJSKG5waSkpIHsKKwkJCWVyciA9IFBUUl9FUlIobnBpKTsKKworCQkJaWYgKGVyciAhPSAtRUVYSVNUKQorCQkJCWdvdG8gZXJyX291dF9wdXQ7CisJCX0gZWxzZSB7CisJCQlzZXRfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZucGktPnN0YXRlKTsKKwkJCWNsZWFyX2JpdChORVRGU19JTk9ERV9PV05FRCwgJm5waS0+c3RhdGUpOworCQl9CisJfQorb3V0OgorCWlmIChsYXN0KSB7CisJCXNldF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX0RJUl9TWU5DRUQsICZwYXJlbnQtPnN0YXRlKTsKKwkJc2V0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGFyZW50LT5zdGF0ZSk7CisJCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCX0KKwlwb2htZWxmc19wdXRfaW5vZGUocGFyZW50KTsKKworCXJldHVybiBlcnI7CisKK2Vycl9vdXRfcHV0OgorCWNsZWFyX2JpdChORVRGU19JTk9ERV9SRU1PVEVfRElSX1NZTkNFRCwgJnBhcmVudC0+c3RhdGUpOworCXByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBjbWRfaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywgcGFyZW50LT5pbm8sIGNtZC0+c3RhcnQsIGNtZC0+aWQpOworCXBvaG1lbGZzX3B1dF9pbm9kZShwYXJlbnQpOworCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBMb29rdXAgY29tbWFuZCByZXNwb25zZS4KKyAqIEl0IHNlYXJjaGVzIGZvciBpbm9kZSB0byBiZSBsb29rZWQgYXQgKGlmIGl0IGV4aXN0cykgYW5kIHN1YnN0aXR1dGVzCisgKiBpdHMgaW5vZGUgaW5mb3JtYXRpb24gKHNpemUsIHBlcm1pc3Npb24sIG1vZGUgYW5kIHNvIG9uKSwgaWYgaW5vZGUgZG9lcworICogbm90IGV4aXN0LCBuZXcgb25lIHdpbGwgYmUgY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgaW50byBjYWNoZXMuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfbG9va3VwX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm87CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQgPSBOVUxMLCAqbnBpOworCWludCBlcnIgPSAtRUlOVkFMOworCWNoYXIgKm5hbWU7CisKKwlpbm9kZSA9IGlsb29rdXAoc3QtPnBzYi0+c2IsIGNtZC0+aWQpOworCWlmICghaW5vZGUpIHsKKwkJcHJpbnRrKCIlczogbG9va3VwIHJlc3BvbnNlOiBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zaXplKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCXBhcmVudCA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJaWYgKCFjbWQtPnNpemUpIHsKKwkJZXJyID0gLWNtZC0+c3RhcnQ7CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCisJaWYgKGNtZC0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbykpIHsKKwkJcHJpbnRrKCIlczogYnJva2VuIGxvb2t1cCByZXNwb25zZTogaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldS5cbiIsCisJCQkJX19mdW5jX18sIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCisJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdCwgc3QtPmRhdGEsIGNtZC0+c2l6ZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCWluZm8gPSAoc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKikoc3QtPmRhdGEpOworCW5hbWUgPSAoY2hhciAqKShpbmZvICsgMSk7CisKKwluZXRmc19jb252ZXJ0X2lub2RlX2luZm8oaW5mbyk7CisKKwlpbmZvLT5pbm8gPSBjbWQtPnN0YXJ0OworCWlmICghaW5mby0+aW5vKQorCQlpbmZvLT5pbm8gPSBwb2htZWxmc19uZXdfaW5vKHN0LT5wc2IpOworCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBuYW1lOiAnJXMnLCBzdGFydDogJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIGluZm8tPmlubywgbmFtZSwgY21kLT5zdGFydCk7CisKKwlpZiAoY21kLT5zdGFydCkKKwkJbnBpID0gcG9obWVsZnNfbmV3X2lub2RlKHN0LT5wc2IsIHBhcmVudCwgTlVMTCwgaW5mbywgMCk7CisJZWxzZSB7CisJCXN0cnVjdCBxc3RyIHN0cjsKKworCQlzdHIubmFtZSA9IG5hbWU7CisJCXN0ci5sZW4gPSBjbWQtPnNpemUgLSBzaXplb2Yoc3RydWN0IG5ldGZzX2lub2RlX2luZm8pIC0gMSAtIGNtZC0+Y3BhZDsKKwkJc3RyLmhhc2ggPSBqaGFzaChuYW1lLCBzdHIubGVuLCAwKTsKKworCQlucGkgPSBwb2htZWxmc19uZXdfaW5vZGUoc3QtPnBzYiwgcGFyZW50LCAmc3RyLCBpbmZvLCAwKTsKKwl9CisJaWYgKElTX0VSUihucGkpKSB7CisJCWVyciA9IFBUUl9FUlIobnBpKTsKKworCQlpZiAoZXJyICE9IC1FRVhJU1QpCisJCQlnb3RvIGVycl9vdXRfcHV0OworCX0gZWxzZSB7CisJCXNldF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJm5waS0+c3RhdGUpOworCQljbGVhcl9iaXQoTkVURlNfSU5PREVfT1dORUQsICZucGktPnN0YXRlKTsKKwl9CisKKwljbGVhcl9iaXQoTkVURlNfQ09NTUFORF9QRU5ESU5HLCAmcGFyZW50LT5zdGF0ZSk7CisJcG9obWVsZnNfcHV0X2lub2RlKHBhcmVudCk7CisKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3B1dDoKKwlwb2htZWxmc19wdXRfaW5vZGUocGFyZW50KTsKK2Vycl9vdXRfZXhpdDoKKwljbGVhcl9iaXQoTkVURlNfQ09NTUFORF9QRU5ESU5HLCAmcGFyZW50LT5zdGF0ZSk7CisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJcHJpbnRrKCIlczogaW5vZGU6ICVwLCBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBpbm9kZSwgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zaXplLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDcmVhdGUgcmVzcG9uc2UsIGp1c3QgbWFya3MgbG9jYWwgaW5vZGUgYXMgJ2NyZWF0ZWQnLCBzbyB0aGF0IHdyaXRlYmFjaworICogZm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gKG9yIG93bikgd291bGQgbm90IHRyeSB0byBzeW5jIGl0IGFnYWluLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyZWF0ZV9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaTsKKworCWlub2RlID0gaWxvb2t1cChzdC0+cHNiLT5zYiwgY21kLT5pZCk7CisJaWYgKCFpbm9kZSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBpbm9kZTogaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LlxuIiwKKwkJCQlfX2Z1bmNfXywgY21kLT5pZCwgY21kLT5zdGFydCk7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwkvKgorCSAqIFRvIGxvY2sgb3Igbm90IHRvIGxvY2s/CisJICogV2UgYWN0dWFsbHkgZG8gbm90IGNhcmUgaWYgaXQgcmFjZXMuLi4KKwkgKi8KKwlpZiAoY21kLT5zdGFydCkKKwkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOworCXNldF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSk7CisKKwlwb2htZWxmc19wdXRfaW5vZGUocGkpOworCisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoKKyAqIE9iamVjdCByZW1vdmUgcmVzcG9uc2UuIEp1c3Qgc2F5cyB0aGF0IHJlbW92ZSByZXF1ZXN0IGhhcyBiZWVuIHJlY2VpdmVkLgorICogVXNlZCBpbiBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2wuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVtb3ZlX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJaW50IGVycjsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3QsIHN0LT5kYXRhLCBjbWQtPnNpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBwYXRoOiAnJXMnLlxuIiwgX19mdW5jX18sIGNtZC0+aWQsIChjaGFyICopc3QtPmRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUcmFuc2FjdGlvbiByZXBseSBwcm9jZXNzaW5nLgorICoKKyAqIEZpbmQgdHJhbnNhY3Rpb24gYmFzZWQgb24gaXRzIGdlbmVyYXRpb24gbnVtYmVyLCBidW1wIGl0cyByZWZlcmVuY2UgY291bnRlciwKKyAqIHNvIHRoYXQgbm9uZSBjb3VsZCBmcmVlIGl0IHVuZGVyIHVzLCBkcm9wIGZyb20gdGhlIHRyZWVzIGFuZCBsaXN0cyBhbmQKKyAqIGRyb3AgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gaXQgaGl0cyB6ZXJvICh3aGVuIGFsbCBkZXN0aW5hdGlvbnMgcmVwbGllZAorICogYW5kIGFsbCB0aW1lb3V0IGhhbmRsZWQgYnkgYXN5bmMgc2Nhbm5pbmcgY29kZSksIGNvbXBsZXRpb24gd2lsbCBiZSBjYWxsZWQKKyAqIGFuZCB0cmFuc2FjdGlvbiB3aWxsIGJlIGZyZWVkLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3RyYW5zYWN0aW9uX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0OworCXN0cnVjdCBuZXRmc190cmFucyAqdCA9IE5VTEw7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc2hvcnQgZXJyID0gKHNpZ25lZCljbWQtPmV4dDsKKworCW11dGV4X2xvY2soJnN0LT50cmFuc19sb2NrKTsKKwlkc3QgPSBuZXRmc190cmFuc19zZWFyY2goc3QsIGNtZC0+c3RhcnQpOworCWlmIChkc3QpIHsKKwkJbmV0ZnNfdHJhbnNfcmVtb3ZlX25vbG9jayhkc3QsIHN0KTsKKwkJdCA9IGRzdC0+dHJhbnM7CisKKwkJcG9obWVsZnNfZnRyYW5zX3VwZGF0ZShjbWQtPnN0YXJ0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisKKwlpZiAoIXQpIHsKKwkJaW50IGNoZWNrID0gcG9obWVsZnNfZnRyYW5zX2NoZWNrKGNtZC0+c3RhcnQpOworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCB0cmFuc2FjdGlvbjogc3RhcnQ6ICVsbHU6IGlkOiAlbGx1LCBzaXplOiAldSwgZXh0OiAldSwgZG91YmxlOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGNtZC0+c3RhcnQsIGNtZC0+aWQsIGNtZC0+c2l6ZSwgY21kLT5leHQsIGNoZWNrKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX2Ryb3BfZHN0X25vc3RhdGUoZHN0KTsKKworb3V0OgorCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBJbm9kZSBtZXRhZGF0YSBjYWNoZSBjb2hlcmVuY3kgbWVzc2FnZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19wYWdlX2NhY2hlX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWRwcmludGsoIiVzOiBzdDogJXAsIGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUuXG4iLCBfX2Z1bmNfXywgc3QsIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSk7CisKKwlpbm9kZSA9IGlsb29rdXAoc3QtPnBzYi0+c2IsIGNtZC0+aWQpOworCWlmICghaW5vZGUpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgaW5vZGU6IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sIGNtZC0+aWQpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlzZXRfYml0KE5FVEZTX0lOT0RFX05FRURfRkxVU0gsICZQT0hNRUxGU19JKGlub2RlKS0+c3RhdGUpOworCXBvaG1lbGZzX3B1dF9pbm9kZShQT0hNRUxGU19JKGlub2RlKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJvb3QgY2FwYWJpbGl0aWVzIHJlc3BvbnNlOiBleHBvcnQgc3RhdGlzdGljcworICogbGlrZSB1c2VkIGFuZCBhdmFpbGFibGUgc2l6ZSwgbnVtYmVyIG9mIGZpbGVzIGFuZCBkaXJzLAorICogcGVybWlzc2lvbnMuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcm9vdF9jYXBfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgbmV0ZnNfcm9vdF9jYXBhYmlsaXRpZXMgKmNhcDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHN0LT5wc2I7CisKKwlpZiAoY21kLT5zaXplICE9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfcm9vdF9jYXBhYmlsaXRpZXMpKSB7CisJCXBzYi0+ZmxhZ3MgPSBFUFJPVE87CisJCXdha2VfdXAoJnBzYi0+d2FpdCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCWNhcCA9IHN0LT5kYXRhOworCisJbmV0ZnNfY29udmVydF9yb290X2NhcGFiaWxpdGllcyhjYXApOworCisJaWYgKHBzYi0+dG90YWxfc2l6ZSA8IGNhcC0+dXNlZCArIGNhcC0+YXZhaWwpCisJCXBzYi0+dG90YWxfc2l6ZSA9IGNhcC0+dXNlZCArIGNhcC0+YXZhaWw7CisJaWYgKGNhcC0+YXZhaWwpCisJCXBzYi0+YXZhaWxfc2l6ZSA9IGNhcC0+YXZhaWw7CisJcHNiLT5zdGF0ZV9mbGFncyA9IGNhcC0+ZmxhZ3M7CisKKwlpZiAocHNiLT5zdGF0ZV9mbGFncyAmIFBPSE1FTEZTX0ZMQUdTX1JPKSB7CisJCXBzYi0+c2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOworCQlwcmludGsoS0VSTl9JTkZPICJNb3VudGluZyBQT0hNRUxGUyAoJWQpIHJlYWQtb25seS5cbiIsIHBzYi0+aWR4KTsKKwl9CisKKwlpZiAocHNiLT5zdGF0ZV9mbGFncyAmIFBPSE1FTEZTX0ZMQUdTX1hBVFRSKQorCQlwcmludGsoS0VSTl9JTkZPICJNb3VudGluZyBQT0hNRUxGUyAoJWQpICIKKwkJCSJ3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMgc3VwcG9ydC5cbiIsIHBzYi0+aWR4KTsKKworCWlmIChhdG9taWNfcmVhZCgmcHNiLT50b3RhbF9pbm9kZXMpIDw9IDEpCisJCWF0b21pY19sb25nX3NldCgmcHNiLT50b3RhbF9pbm9kZXMsIGNhcC0+bnJfZmlsZXMpOworCisJZHByaW50aygiJXM6IHRvdGFsOiAlbGx1LCBhdmFpbDogJWxsdSwgZmxhZ3M6ICVsbHgsIGlub2RlczogJWxsdS5cbiIsCisJCV9fZnVuY19fLCBwc2ItPnRvdGFsX3NpemUsIHBzYi0+YXZhaWxfc2l6ZSwgcHNiLT5zdGF0ZV9mbGFncywgY2FwLT5ucl9maWxlcyk7CisKKwlwc2ItPmZsYWdzID0gMDsKKwl3YWtlX3VwKCZwc2ItPndhaXQpOworCXJldHVybiAwOworfQorCisvKgorICogQ3J5cHRvIGNhcGFiaWxpdGllcyBvZiB0aGUgc2VydmVyLCB3aGVyZSBpdCBzYXlzIHRoYXQKKyAqIGl0IHN1cHBvcnRzIG9yIGRvZXMgbm90IHJlcXVlc3RlZCBoYXNoL2NpcGhlciBhbGdvcml0aG1zLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19jYXBfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcyAqY2FwOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gc3QtPnBzYjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjbWQtPnNpemUgIT0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzKSkgeworCQlwc2ItPmZsYWdzID0gRVBST1RPOworCQl3YWtlX3VwKCZwc2ItPndhaXQpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwljYXAgPSBzdC0+ZGF0YTsKKworCWRwcmludGsoIiVzOiBjaXBoZXIgJyVzJzogJXMsIGhhc2g6ICclcyc6ICVzLlxuIiwKKwkJCV9fZnVuY19fLAorCQkJcHNiLT5jaXBoZXJfc3RyaW5nLCAoY2FwLT5jaXBoZXJfc3RybGVuKT8iU1VQUE9SVEVEIjoiTk9UIFNVUFBPUlRFRCIsCisJCQlwc2ItPmhhc2hfc3RyaW5nLCAoY2FwLT5oYXNoX3N0cmxlbik/IlNVUFBPUlRFRCI6Ik5PVCBTVVBQT1JURUQiKTsKKworCWlmICghY2FwLT5oYXNoX3N0cmxlbikgeworCQlpZiAocHNiLT5oYXNoX3N0cmxlbiAmJiBwc2ItPmNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkKQorCQkJZXJyID0gLUVOT1RTVVBQOworCQlwc2ItPmhhc2hfc3RybGVuID0gMDsKKwkJa2ZyZWUocHNiLT5oYXNoX3N0cmluZyk7CisJCXBzYi0+aGFzaF9zdHJpbmcgPSBOVUxMOworCX0KKworCWlmICghY2FwLT5jaXBoZXJfc3RybGVuKSB7CisJCWlmIChwc2ItPmNpcGhlcl9zdHJsZW4gJiYgcHNiLT5jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCkKKwkJCWVyciA9IC1FTk9UU1VQUDsKKwkJcHNiLT5jaXBoZXJfc3RybGVuID0gMDsKKwkJa2ZyZWUocHNiLT5jaXBoZXJfc3RyaW5nKTsKKwkJcHNiLT5jaXBoZXJfc3RyaW5nID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2FwYWJpbGl0aWVzIGhhbmRzaGFrZSByZXNwb25zZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19jYXBhYmlsaXRpZXNfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdihzdCwgc3QtPmRhdGEsIGNtZC0+c2l6ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAoY21kLT5pZCkgeworCQljYXNlIFBPSE1FTEZTX0NSWVBUT19DQVBBQklMSVRJRVM6CisJCQlyZXR1cm4gcG9obWVsZnNfY3J5cHRvX2NhcF9yZXNwb25zZShzdCk7CisJCWNhc2UgUE9ITUVMRlNfUk9PVF9DQVBBQklMSVRJRVM6CisJCQlyZXR1cm4gcG9obWVsZnNfcm9vdF9jYXBfcmVzcG9uc2Uoc3QpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogUmVjZWl2aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKyAqIERvZXMgbm90IHdvcmsgcHJvcGVybHkgaWYgcmVjZWl2ZWQgc2l6ZSBpcyBtb3JlIHRoYW4gcmVxdWVzdGVkIG9uZSwKKyAqIGl0IHNob3VsZCBub3QgaGFwcGVuIHdpdGggY3VycmVudCByZXF1ZXN0L3JlcGx5IG1vZGVsIHRob3VnaC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19nZXR4YXR0cl9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gc3QtPnBzYjsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptOworCXNob3J0IGVycm9yID0gKHNpZ25lZCBzaG9ydCljbWQtPmV4dCwgZXJyOworCXVuc2lnbmVkIGludCBzeiwgdG90YWxfc2l6ZTsKKworCW0gPSBwb2htZWxmc19tY2FjaGVfc2VhcmNoKHBzYiwgY21kLT5pZCk7CisKKwlkcHJpbnRrKCIlczogaWQ6ICVsbHUsIGdlbjogJWxsdSwgZXJyOiAlZC5cbiIsCisJCV9fZnVuY19fLCBjbWQtPmlkLCAobSk/bS0+Z2VuOjAsIGVycm9yKTsKKworCWlmICghbSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBnZXR4YXR0ciBjYWNoZSBlbnRyeTogaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywgY21kLT5pZCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChjbWQtPnNpemUpIHsKKwkJc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNtZC0+c2l6ZSwgbS0+c2l6ZSk7CisJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3QsIG0tPmRhdGEsIHN6KTsKKwkJaWYgKGVycikgeworCQkJZXJyb3IgPSBlcnI7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW0tPnNpemUgPSBzejsKKwkJdG90YWxfc2l6ZSA9IGNtZC0+c2l6ZSAtIHN6OworCisJCXdoaWxlICh0b3RhbF9zaXplKSB7CisJCQlzeiA9IG1pbih0b3RhbF9zaXplLCBzdC0+c2l6ZSk7CisKKwkJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3QsIHN0LT5kYXRhLCBzeik7CisJCQlpZiAoZXJyKSB7CisJCQkJZXJyb3IgPSBlcnI7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRvdGFsX3NpemUgLT0gc3o7CisJCX0KKwl9CisKK291dDoKKwltLT5lcnIgPSBlcnJvcjsKKwljb21wbGV0ZSgmbS0+Y29tcGxldGUpOworCXBvaG1lbGZzX21jYWNoZV9wdXQocHNiLCBtKTsKKworCXJldHVybiBlcnJvcjsKK30KKworaW50IHBvaG1lbGZzX2RhdGFfbG9ja19yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gc3QtPnBzYjsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptOworCXNob3J0IGVyciA9IChzaWduZWQgc2hvcnQpY21kLT5leHQ7CisJdTY0IGlkID0gY21kLT5pZDsKKworCW0gPSBwb2htZWxmc19tY2FjaGVfc2VhcmNoKHBzYiwgaWQpOworCisJZHByaW50aygiJXM6IGlkOiAlbGx1LCBnZW46ICVsbHUsIGVycjogJWQuXG4iLAorCQlfX2Z1bmNfXywgY21kLT5pZCwgKG0pP20tPmdlbjowLCBlcnIpOworCisJaWYgKCFtKSB7CisJCXBvaG1lbGZzX2RhdGFfcmVjdihzdCwgc3QtPmRhdGEsIGNtZC0+c2l6ZSk7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGRhdGEgbG9jayByZXNwb25zZTogaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywgY21kLT5pZCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChjbWQtPnNpemUpCisJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3QsICZtLT5pbmZvLCBjbWQtPnNpemUpOworCisJbS0+ZXJyID0gZXJyOworCWNvbXBsZXRlKCZtLT5jb21wbGV0ZSk7CisJcG9obWVsZnNfbWNhY2hlX3B1dChwc2IsIG0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBuZXRmc19zdGF0ZV9yZXNldChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCW5ldGZzX3N0YXRlX2xvY2tfc2VuZChzdCk7CisJbmV0ZnNfc3RhdGVfZXhpdChzdCk7CisJbmV0ZnNfc3RhdGVfaW5pdChzdCk7CisJbmV0ZnNfc3RhdGVfdW5sb2NrX3NlbmQoc3QpOworfQorCisvKgorICogTWFpbiByZWNlaXZpbmcgZnVuY3Rpb24sIGNhbGxlZCBmcm9tIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlY3Yodm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyID0gLUVJTlRSOworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3QgPSBkYXRhOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJLyoKKwkJICogSWYgc29ja2V0IHdpbGwgYmUgcmVzZXQgYWZ0ZXIgdGhpcyBzdGF0ZW1lbnQsIHRoZW4KKwkJICogcG9obWVsZnNfZGF0YV9yZWN2KCkgd2lsbCBqdXN0IGZhaWwgYW5kIGxvb3Agd2lsbAorCQkgKiBzdGFydCBhZ2Fpbiwgc28gaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja3MuCisJCSAqCisJCSAqIHN0LT5yZWFkX3NvY2tldCBpcyBuZWVkZWQgdG8gcHJldmVudHMgc3RhdGUgbWFjaGluZQorCQkgKiBicmVha2luZyBiZXR3ZWVuIHRoaXMgZGF0YSByZWFkaW5nIGFuZCBzdWJzZXF1ZW50IG9uZQorCQkgKiBpbiBwcm90b2NvbCBzcGVjaWZpYyBmdW5jdGlvbnMgZHVyaW5nIGNvbm5lY3Rpb24gcmVzZXQuCisJCSAqIEluIGNhc2Ugb2YgcmVzZXQgd2UgaGF2ZSB0byByZWFkIG5leHQgY29tbWFuZCBhbmQgZG8KKwkJICogbm90IGV4cGVjdCBkYXRhIGZvciBvbGQgY29tbWFuZCB0byBtYWdpY2FsbHkgYXBwZWFyIGluCisJCSAqIG5ldyBjb25uZWN0aW9uLgorCQkgKi8KKwkJc3QtPnJlYWRfc29ja2V0ID0gc3QtPnNvY2tldDsKKwkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBjbWQsIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSk7CisJCWlmIChlcnIpIHsKKwkJCW1zbGVlcCgxMDAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKworCQlkcHJpbnRrKCIlczogY21kOiAldSwgaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgIgorCQkJCSJleHQ6ICV1LCBjc2l6ZTogJXUsIGNwYWQ6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+aWQsIGNtZC0+c3RhcnQsCisJCQkJY21kLT5zaXplLCBjbWQtPmV4dCwgY21kLT5jc2l6ZSwgY21kLT5jcGFkKTsKKworCQlpZiAoY21kLT5jc2l6ZSkgeworCQkJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUgPSAmc3QtPmVuZzsKKworCQkJaWYgKHVubGlrZWx5KGNtZC0+Y3NpemUgPiBlLT5zaXplLzIpKSB7CisJCQkJbmV0ZnNfc3RhdGVfcmVzZXQoc3QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoZS0+aGFzaCAmJiB1bmxpa2VseShjbWQtPmNzaXplICE9IHN0LT5wc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplKSkgeworCQkJCWRwcmludGsoIiVzOiBjbWQ6IGNtZDogJXUsIGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsICIKKwkJCQkJCSJjc2l6ZTogJXUgIT0gZGlnZXN0IHNpemUgJXUuXG4iLAorCQkJCQkJX19mdW5jX18sIGNtZC0+Y21kLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUsCisJCQkJCQljbWQtPmNzaXplLCBzdC0+cHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7CisJCQkJbmV0ZnNfc3RhdGVfcmVzZXQoc3QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3Yoc3QsIGUtPmRhdGEsIGNtZC0+Y3NpemUpOworCQkJaWYgKGVycikgeworCQkJCW5ldGZzX3N0YXRlX3Jlc2V0KHN0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworI2lmZGVmIENPTkZJR19QT0hNRUxGU19ERUJVRworCQkJeworCQkJCXVuc2lnbmVkIGludCBpOworCQkJCXVuc2lnbmVkIGNoYXIgKmhhc2ggPSBlLT5kYXRhOworCisJCQkJZHByaW50aygiJXM6IHJlY2VpdmVkIGhhc2g6ICIsIF9fZnVuY19fKTsKKwkJCQlmb3IgKGk9MDsgaTxjbWQtPmNzaXplOyArK2kpIHsKKwkJCQkJcHJpbnRrKCIlMDJ4ICIsIGhhc2hbaV0pOworCQkJCX0KKwkJCQlwcmludGsoIlxuIik7CisJCQl9CisjZW5kaWYKKwkJCWNtZC0+c2l6ZSAtPSBjbWQtPmNzaXplOworCQl9CisKKwkJLyoKKwkJICogVGhpcyBzaG91bGQgY2F0Y2ggcHJvdG9jb2wgYnJlYWthZ2UgYW5kIHJhbmRvbSBnYXJiYWdlIGluc3RlYWQgb2YgY29tbWFuZHMuCisJCSAqLworCQlpZiAodW5saWtlbHkoKGNtZC0+c2l6ZSA+IHN0LT5zaXplKSAmJiAoY21kLT5jbWQgIT0gTkVURlNfWEFUVFJfR0VUKSkpIHsKKwkJCW5ldGZzX3N0YXRlX3Jlc2V0KHN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChjbWQtPmNtZCkgeworCQkJY2FzZSBORVRGU19SRUFEX1BBR0U6CisJCQkJZXJyID0gcG9obWVsZnNfcmVhZF9wYWdlX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfUkVBRERJUjoKKwkJCQllcnIgPSBwb2htZWxmc19yZWFkZGlyX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfTE9PS1VQOgorCQkJCWVyciA9IHBvaG1lbGZzX2xvb2t1cF9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX0NSRUFURToKKwkJCQllcnIgPSBwb2htZWxmc19jcmVhdGVfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19SRU1PVkU6CisJCQkJZXJyID0gcG9obWVsZnNfcmVtb3ZlX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfVFJBTlM6CisJCQkJZXJyID0gcG9obWVsZnNfdHJhbnNhY3Rpb25fcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19QQUdFX0NBQ0hFOgorCQkJCWVyciA9IHBvaG1lbGZzX3BhZ2VfY2FjaGVfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19DQVBBQklMSVRJRVM6CisJCQkJZXJyID0gcG9obWVsZnNfY2FwYWJpbGl0aWVzX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfTE9DSzoKKwkJCQllcnIgPSBwb2htZWxmc19kYXRhX2xvY2tfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19YQVRUUl9HRVQ6CisJCQkJZXJyID0gcG9obWVsZnNfZ2V0eGF0dHJfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIiVzOiB3cm9uZyBjbWQ6ICV1LCBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCBleHQ6ICV1LlxuIiwKKwkJCQkJX19mdW5jX18sIGNtZC0+Y21kLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUsIGNtZC0+ZXh0KTsKKwkJCQluZXRmc19zdGF0ZV9yZXNldChzdCk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxMCkpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IG5ldGZzX3N0YXRlX2luaXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwb2htZWxmc19jdGwgKmN0bCA9ICZzdC0+Y3RsOworCisJZXJyID0gc29ja19jcmVhdGUoY3RsLT5hZGRyLnNhX2ZhbWlseSwgY3RsLT50eXBlLCBjdGwtPnByb3RvLCAmc3QtPnNvY2tldCk7CisJaWYgKGVycikgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gY3JlYXRlIGEgc29ja2V0OiBmYW1pbHk6ICVkLCB0eXBlOiAlZCwgcHJvdG86ICVkLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgY3RsLT5hZGRyLnNhX2ZhbWlseSwgY3RsLT50eXBlLCBjdGwtPnByb3RvLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlzdC0+c29ja2V0LT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9OT0lPOworCXN0LT5zb2NrZXQtPnNrLT5za19zbmR0aW1lbyA9IHN0LT5zb2NrZXQtPnNrLT5za19yY3Z0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoNjAwMDApOworCisJZXJyID0ga2VybmVsX2Nvbm5lY3Qoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZjdGwtPmFkZHIsIGN0bC0+YWRkcmxlbiwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXI6IGlkeDogJXUsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBzdC0+cHNiLT5pZHgsIGVycik7CisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCX0KKwlzdC0+c29ja2V0LT5zay0+c2tfc25kdGltZW8gPSBzdC0+c29ja2V0LT5zay0+c2tfcmN2dGltZW8gPSBtc2Vjc190b19qaWZmaWVzKDYwMDAwKTsKKworCWVyciA9IG5ldGZzX3BvbGxfaW5pdChzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisKKwlpZiAoc3QtPnNvY2tldC0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVCkgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY3RsLT5hZGRyOworCQlwcmludGsoS0VSTl9JTkZPICIlczogKHJlKWNvbm5lY3RlZCB0byBwZWVyICV1LiV1LiV1LiV1OiVkLlxuIiwgX19mdW5jX18sCisJCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCX0gZWxzZSBpZiAoc3QtPnNvY2tldC0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmY3RsLT5hZGRyOworCQlwcmludGsoS0VSTl9JTkZPICIlczogKHJlKWNvbm5lY3RlZCB0byBwZWVyICIKKwkJCSIlcGk2OiVkIiwKKwkJCV9fZnVuY19fLCAmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcmVsZWFzZToKKwlzb2NrX3JlbGVhc2Uoc3QtPnNvY2tldCk7CitlcnJfb3V0X2V4aXQ6CisJc3QtPnNvY2tldCA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBuZXRmc19zdGF0ZV9leGl0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaWYgKHN0LT5zb2NrZXQpIHsKKwkJbmV0ZnNfcG9sbF9leGl0KHN0KTsKKwkJc3QtPnNvY2tldC0+b3BzLT5zaHV0ZG93bihzdC0+c29ja2V0LCAyKTsKKworCQlpZiAoc3QtPnNvY2tldC0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJnN0LT5jdGwuYWRkcjsKKwkJCXByaW50aygiJXM6IGRpc2Nvbm5lY3RlZCBmcm9tIHBlZXIgJXUuJXUuJXUuJXU6JWQuXG4iLCBfX2Z1bmNfXywKKwkJCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCQl9IGVsc2UgaWYgKHN0LT5zb2NrZXQtPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzdC0+Y3RsLmFkZHI7CisJCQlwcmludGsoIiVzOiBkaXNjb25uZWN0ZWQgZnJvbSBwZWVyICIKKwkJCQkiJXBpNjolZCIsCisJCQkJX19mdW5jX18sICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKKwkJfQorCisJCXNvY2tfcmVsZWFzZShzdC0+c29ja2V0KTsKKwkJc3QtPnNvY2tldCA9IE5VTEw7CisJCXN0LT5yZWFkX3NvY2tldCA9IE5VTEw7CisJCXN0LT5uZWVkX3Jlc2V0ID0gMDsKKwl9Cit9CisKK2ludCBwb2htZWxmc19zdGF0ZV9pbml0X29uZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqY29uZikKK3sKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0ID0gJmNvbmYtPnN0YXRlOworCWludCBlcnIgPSAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmc3QtPl9fc3RhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmc3QtPl9fc3RhdGVfc2VuZF9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdC0+dGhyZWFkX3dhaXQpOworCisJc3QtPnBzYiA9IHBzYjsKKwlzdC0+dHJhbnNfcm9vdCA9IFJCX1JPT1Q7CisJbXV0ZXhfaW5pdCgmc3QtPnRyYW5zX2xvY2spOworCisJc3QtPnNpemUgPSBwc2ItPnRyYW5zX2RhdGFfc2l6ZTsKKwlzdC0+ZGF0YSA9IGttYWxsb2Moc3QtPnNpemUsIEdGUF9LRVJORUwpOworCWlmICghc3QtPmRhdGEpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaWYgKHBzYi0+cGVyZm9ybV9jcnlwdG8pIHsKKwkJZXJyID0gcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9pbml0KCZzdC0+ZW5nLCBwc2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWVfZGF0YTsKKwl9CisKKwllcnIgPSBuZXRmc19zdGF0ZV9pbml0KHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9lbmdpbmU7CisKKwlzdC0+dGhyZWFkID0ga3RocmVhZF9ydW4ocG9obWVsZnNfcmVjdiwgc3QsICJwb2htZWxmcy8ldSIsIHBzYi0+aWR4KTsKKwlpZiAoSVNfRVJSKHN0LT50aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIoc3QtPnRocmVhZCk7CisJCWdvdG8gZXJyX291dF9uZXRmc19leGl0OworCX0KKworCWlmICghcHNiLT5hY3RpdmVfc3RhdGUpCisJCXBzYi0+YWN0aXZlX3N0YXRlID0gY29uZjsKKworCWRwcmludGsoIiVzOiBjb25mOiAlcCwgc3Q6ICVwLCBzb2NrZXQ6ICVwLlxuIiwKKwkJCV9fZnVuY19fLCBjb25mLCBzdCwgc3QtPnNvY2tldCk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfbmV0ZnNfZXhpdDoKKwluZXRmc19zdGF0ZV9leGl0KHN0KTsKK2Vycl9vdXRfZnJlZV9lbmdpbmU6CisJcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9leGl0KCZzdC0+ZW5nKTsKK2Vycl9vdXRfZnJlZV9kYXRhOgorCWtmcmVlKHN0LT5kYXRhKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworCit9CisKK3ZvaWQgcG9obWVsZnNfc3RhdGVfZmx1c2hfdHJhbnNhY3Rpb25zKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0OworCisJbXV0ZXhfbG9jaygmc3QtPnRyYW5zX2xvY2spOworCWZvciAocmJfbm9kZSA9IHJiX2ZpcnN0KCZzdC0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgeworCQlkc3QgPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0LCBzdGF0ZV9lbnRyeSk7CisJCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOworCisJCWRzdC0+dHJhbnMtPnJlc3VsdCA9IC1FSU5WQUw7CisJCW5ldGZzX3RyYW5zX3JlbW92ZV9ub2xvY2soZHN0LCBzdCk7CisJCW5ldGZzX3RyYW5zX2Ryb3BfZHN0X25vc3RhdGUoZHN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzdC0+dHJhbnNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3N0YXRlX2V4aXRfb25lKHN0cnVjdCBwb2htZWxmc19jb25maWcgKmMpCit7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdCA9ICZjLT5zdGF0ZTsKKworCWRwcmludGsoIiVzOiBleGl0aW5nLCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOworCWlmIChzdC0+dGhyZWFkKSB7CisJCWt0aHJlYWRfc3RvcChzdC0+dGhyZWFkKTsKKwkJc3QtPnRocmVhZCA9IE5VTEw7CisJfQorCisJbmV0ZnNfc3RhdGVfbG9ja19zZW5kKHN0KTsKKwluZXRmc19zdGF0ZV9leGl0KHN0KTsKKwluZXRmc19zdGF0ZV91bmxvY2tfc2VuZChzdCk7CisKKwlwb2htZWxmc19zdGF0ZV9mbHVzaF90cmFuc2FjdGlvbnMoc3QpOworCisJcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9leGl0KCZzdC0+ZW5nKTsKKwlrZnJlZShzdC0+ZGF0YSk7CisKKwlrZnJlZShjKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgbmV0d29yayBzdGFjay4gSXQgc2VhcmNoZXMgZm9yIGdpdmVuIElEIGluIGdsb2JhbAorICogY29uZmlndXJhdGlvbiB0YWJsZSwgdGhpcyBjb250YWlucyBpbmZvcm1hdGlvbiBvZiB0aGUgcmVtb3RlIHNlcnZlcgorICogKGFkZHJlc3MgKGFueSBzdXBwb3J0ZWQgYnkgc29ja2V0IGludGVyZmFjZSkgYW5kIHBvcnQsIHByb3RvY29sIGFuZCBzbyBvbikuCisgKi8KK2ludCBwb2htZWxmc19zdGF0ZV9pbml0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCisJZXJyID0gcG9obWVsZnNfY29weV9jb25maWcocHNiKTsKKwlpZiAoZXJyKSB7CisJCXBvaG1lbGZzX3N0YXRlX2V4aXQocHNiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwb2htZWxmc19zdGF0ZV9leGl0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYywgdG1wLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJbGlzdF9kZWwoJmMtPmNvbmZpZ19lbnRyeSk7CisJCXBvaG1lbGZzX3N0YXRlX2V4aXRfb25lKGMpOworCX0KK30KKwordm9pZCBwb2htZWxmc19zd2l0Y2hfYWN0aXZlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMgPSBwc2ItPmFjdGl2ZV9zdGF0ZTsKKworCWlmICghbGlzdF9lbXB0eSgmcHNiLT5zdGF0ZV9saXN0KSkgeworCQlpZiAoYy0+Y29uZmlnX2VudHJ5Lm5leHQgIT0gJnBzYi0+c3RhdGVfbGlzdCkgeworCQkJcHNiLT5hY3RpdmVfc3RhdGUgPSBsaXN0X2VudHJ5KGMtPmNvbmZpZ19lbnRyeS5uZXh0LAorCQkJCXN0cnVjdCBwb2htZWxmc19jb25maWcsIGNvbmZpZ19lbnRyeSk7CisJCX0gZWxzZSB7CisJCQlwc2ItPmFjdGl2ZV9zdGF0ZSA9IGxpc3RfZW50cnkocHNiLT5zdGF0ZV9saXN0Lm5leHQsCisJCQkJc3RydWN0IHBvaG1lbGZzX2NvbmZpZywgY29uZmlnX2VudHJ5KTsKKwkJfQorCisJCWRwcmludGsoIiVzOiBlbXB0eTogJWQsIGFjdGl2ZSAlcCAtPiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgbGlzdF9lbXB0eSgmcHNiLT5zdGF0ZV9saXN0KSwgYywKKwkJCXBzYi0+YWN0aXZlX3N0YXRlKTsKKwl9IGVsc2UKKwkJcHNiLT5hY3RpdmVfc3RhdGUgPSBOVUxMOworfQorCit2b2lkIHBvaG1lbGZzX2NoZWNrX3N0YXRlcyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjLCAqdG1wOworCUxJU1RfSEVBRChkZWxldGVfbGlzdCk7CisKKwltdXRleF9sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjLCB0bXAsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlpZiAocG9obWVsZnNfY29uZmlnX2NoZWNrKGMsIHBzYi0+aWR4KSkgeworCisJCQlpZiAocHNiLT5hY3RpdmVfc3RhdGUgPT0gYykKKwkJCQlwb2htZWxmc19zd2l0Y2hfYWN0aXZlKHBzYik7CisJCQlsaXN0X21vdmUoJmMtPmNvbmZpZ19lbnRyeSwgJmRlbGV0ZV9saXN0KTsKKwkJfQorCX0KKwlwb2htZWxmc19jb3B5X2NvbmZpZyhwc2IpOworCW11dGV4X3VubG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjLCB0bXAsICZkZWxldGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCWxpc3RfZGVsKCZjLT5jb25maWdfZW50cnkpOworCQlwb2htZWxmc19zdGF0ZV9leGl0X29uZShjKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjIxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaApAQCAtMCwwICsxLDkzMiBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX05FVEZTX0gKKyNkZWZpbmUgX19ORVRGU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgorCisjZGVmaW5lIFBPSE1FTEZTX0NOX0lEWAkJCTUKKyNkZWZpbmUgUE9ITUVMRlNfQ05fVkFMCQkJMAorCisjZGVmaW5lIFBPSE1FTEZTX0NUTElORk9fQUNLCQkxCisjZGVmaW5lIFBPSE1FTEZTX05PSU5GT19BQ0sJCTIKKworCisvKgorICogTmV0d29yayBjb21tYW5kIHN0cnVjdHVyZS4KKyAqIFdpbGwgYmUgZXh0ZW5kZWQuCisgKi8KK3N0cnVjdCBuZXRmc19jbWQKK3sKKwlfX3UxNgkJCWNtZDsJLyogQ29tbWFuZCBudW1iZXIgKi8KKwlfX3UxNgkJCWNzaXplOwkvKiBBdHRhY2hlZCBjcnlwdG8gaW5mb3JtYXRpb24gc2l6ZSAqLworCV9fdTE2CQkJY3BhZDsJLyogQXR0YWNoZWQgcGFkZGluZyBzaXplICovCisJX191MTYJCQlleHQ7CS8qIEV4dGVybmFsIGZsYWdzICovCisJX191MzIJCQlzaXplOwkvKiBTaXplIG9mIHRoZSBhdHRhY2hlZCBkYXRhICovCisJX191MzIJCQl0cmFuczsJLyogVHJhbnNhY3Rpb24gaWQgKi8KKwlfX3U2NAkJCWlkOwkvKiBPYmplY3QgSUQgdG8gb3BlcmF0ZSBvbi4gVXNlZCBmb3IgZmVlZGJhY2suKi8KKwlfX3U2NAkJCXN0YXJ0OwkvKiBTdGFydCBvZiB0aGUgb2JqZWN0LiAqLworCV9fdTY0CQkJaXY7CS8qIElWIHNlcXVlbmNlICovCisJX191OAkJCWRhdGFbMF07Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfY29udmVydF9jbWQoc3RydWN0IG5ldGZzX2NtZCAqY21kKQoreworCWNtZC0+aWQgPSBfX2JlNjRfdG9fY3B1KGNtZC0+aWQpOworCWNtZC0+c3RhcnQgPSBfX2JlNjRfdG9fY3B1KGNtZC0+c3RhcnQpOworCWNtZC0+aXYgPSBfX2JlNjRfdG9fY3B1KGNtZC0+aXYpOworCWNtZC0+Y21kID0gX19iZTE2X3RvX2NwdShjbWQtPmNtZCk7CisJY21kLT5leHQgPSBfX2JlMTZfdG9fY3B1KGNtZC0+ZXh0KTsKKwljbWQtPmNzaXplID0gX19iZTE2X3RvX2NwdShjbWQtPmNzaXplKTsKKwljbWQtPmNwYWQgPSBfX2JlMTZfdG9fY3B1KGNtZC0+Y3BhZCk7CisJY21kLT5zaXplID0gX19iZTMyX3RvX2NwdShjbWQtPnNpemUpOworfQorCisjZGVmaW5lIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QJCSgxPDwwKQorCitlbnVtIHsKKwlORVRGU19SRUFERElSCT0gMSwJLyogUmVhZCBkaXJlY3RvcnkgZm9yIGdpdmVuIGlub2RlIG51bWJlciAqLworCU5FVEZTX1JFQURfUEFHRSwJLyogUmVhZCBkYXRhIHBhZ2UgZnJvbSB0aGUgc2VydmVyICovCisJTkVURlNfV1JJVEVfUEFHRSwJLyogV3JpdGUgZGF0YSBwYWdlIHRvIHRoZSBzZXJ2ZXIgKi8KKwlORVRGU19DUkVBVEUsCQkvKiBDcmVhdGUgZGlyZWN0b3J5IGVudHJ5ICovCisJTkVURlNfUkVNT1ZFLAkJLyogUmVtb3ZlIGRpcmVjdG9yeSBlbnRyeSAqLworCisJTkVURlNfTE9PS1VQLAkJLyogTG9va3VwIHNpbmdsZSBvYmplY3QgKi8KKwlORVRGU19MSU5LLAkJLyogQ3JlYXRlIGEgbGluayAqLworCU5FVEZTX1RSQU5TLAkJLyogVHJhbnNhY3Rpb24gKi8KKwlORVRGU19PUEVOLAkJLyogT3BlbiBpbnRlbnQgKi8KKwlORVRGU19JTk9ERV9JTkZPLAkvKiBNZXRhZGF0YSBjYWNoZSBjb2hlcmVuY3kgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgKi8KKworCU5FVEZTX1BBR0VfQ0FDSEUsCS8qIFBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIG1lc3NhZ2UgKi8KKwlORVRGU19SRUFEX1BBR0VTLAkvKiBSZWFkIG11bHRpcGxlIGNvbnRpZ3VvdXMgcGFnZXMgaW4gb25lIGdvICovCisJTkVURlNfUkVOQU1FLAkJLyogUmVuYW1lIG9iamVjdCAqLworCU5FVEZTX0NBUEFCSUxJVElFUywJLyogQ2FwYWJpbGl0aWVzIG9mIHRoZSBjbGllbnQsIGZvciBleGFtcGxlIHN1cHBvcnRlZCBjcnlwdG8gKi8KKwlORVRGU19MT0NLLAkJLyogRGlzdHJpYnV0ZWQgbG9jayBtZXNzYWdlICovCisKKwlORVRGU19YQVRUUl9TRVQsCS8qIFNldCBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KKwlORVRGU19YQVRUUl9HRVQsCS8qIEdldCBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KKwlORVRGU19DTURfTUFYCit9OworCitlbnVtIHsKKwlQT0hNRUxGU19GTEFHU19BREQgPSAwLCAvKiBOZXR3b3JrIHN0YXRlIGNvbnRyb2wgbWVzc2FnZSBmb3IgQUREICovCisJUE9ITUVMRlNfRkxBR1NfREVMLCAgICAgLyogTmV0d29yayBzdGF0ZSBjb250cm9sIG1lc3NhZ2UgZm9yIERFTCAqLworCVBPSE1FTEZTX0ZMQUdTX1NIT1csICAgIC8qIE5ldHdvcmsgc3RhdGUgY29udHJvbCBtZXNzYWdlIGZvciBTSE9XICovCisJUE9ITUVMRlNfRkxBR1NfQ1JZUFRPLAkvKiBDcnlwdG8gZGF0YSBjb250cm9sIG1lc3NhZ2UgKi8KK307CisKKy8qCisgKiBBbHdheXMgd2FudGVkIHRvIGNvcHkgaXQgZnJvbSBzb2NrZXQgaGVhZGVycyBpbnRvIHB1YmxpYyBvbmUsCisgKiBzaW5jZSB0aGV5IGFyZSBfX0tFUk5FTF9fIHByb3RlY3RlZCB0aGVyZS4KKyAqLworI2RlZmluZSBfS19TU19NQVhTSVpFCTEyOAorCitzdHJ1Y3Qgc2FkZHIKK3sKKwl1bnNpZ25lZCBzaG9ydAkJc2FfZmFtaWx5OworCWNoYXIJCQlhZGRyW19LX1NTX01BWFNJWkVdOworfTsKKworZW51bSB7CisJUE9ITUVMRlNfQ1JZUFRPX0hBU0ggPSAwLAorCVBPSE1FTEZTX0NSWVBUT19DSVBIRVIsCit9OworCitzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvCit7CisJdW5zaWduZWQgaW50CQlpZHg7CQkvKiBDb25maWcgaW5kZXggKi8KKwl1bnNpZ25lZCBzaG9ydAkJc3RybGVuOwkJLyogU2l6ZSBvZiB0aGUgYXR0YWNoZWQgY3J5cHRvIHN0cmluZyBpbmNsdWRpbmcgMC1ieXRlCisJCQkJCQkgKiAiY2JjKGFlcykiIGZvciBleGFtcGxlICovCisJdW5zaWduZWQgc2hvcnQJCXR5cGU7CQkvKiBITUFDLCBjaXBoZXIsIGJvdGggKi8KKwl1bnNpZ25lZCBpbnQJCWtleXNpemU7CS8qIEtleSBzaXplICovCisJdW5zaWduZWQgY2hhcgkJZGF0YVswXTsJLyogQWxnb3JpdGhtIHN0cmluZywga2V5IGFuZCBJViAqLworfTsKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gY29tbWFuZCB1c2VkIHRvIGNyZWF0ZSB0YWJsZSBvZiBkaWZmZXJlbnQgcmVtb3RlIHNlcnZlcnMuCisgKi8KK3N0cnVjdCBwb2htZWxmc19jdGwKK3sKKwl1bnNpZ25lZCBpbnQJCWlkeDsJCS8qIENvbmZpZyBpbmRleCAqLworCXVuc2lnbmVkIGludAkJdHlwZTsJCS8qIFNvY2tldCB0eXBlICovCisJdW5zaWduZWQgaW50CQlwcm90bzsJCS8qIFNvY2tldCBwcm90b2NvbCAqLworCXVuc2lnbmVkIGludAkJYWRkcmxlbjsJLyogU2l6ZSBvZiB0aGUgYWRkcmVzcyAqLworCXVuc2lnbmVkIHNob3J0CQl1bnVzZWQ7CQkvKiBBbGlnbiBzdHJ1Y3R1cmUgYnkgNCBieXRlcyAqLworCXN0cnVjdCBzYWRkcgkJYWRkcjsJCS8qIFJlbW90ZSBzZXJ2ZXIgYWRkcmVzcyAqLworfTsKKworLyoKKyAqIEFjayBmb3IgdXNlcnNwYWNlIGFib3V0IHJlcXVlc3RlZCBjb21tYW5kLgorICovCitzdHJ1Y3QgcG9obWVsZnNfY25fYWNrCit7CisJc3RydWN0IGNuX21zZwkJbXNnOworCWludAkJCWVycm9yOworCWludAkJCW1zZ19udW07CisJaW50CQkJdW51c2VkWzNdOworCXN0cnVjdCBwb2htZWxmc19jdGwJY3RsOworfTsKKworLyoKKyAqIElub2RlIGluZm8gc3RydWN0dXJlIHVzZWQgdG8gc3luYyB3aXRoIHNlcnZlci4KKyAqIENoZWNrIHdoYXQgc3RhdCgpIHJldHVybnMuCisgKi8KK3N0cnVjdCBuZXRmc19pbm9kZV9pbmZvCit7CisJdW5zaWduZWQgaW50CQltb2RlOworCXVuc2lnbmVkIGludAkJbmxpbms7CisJdW5zaWduZWQgaW50CQl1aWQ7CisJdW5zaWduZWQgaW50CQlnaWQ7CisJdW5zaWduZWQgaW50CQlibG9ja3NpemU7CisJdW5zaWduZWQgaW50CQlwYWRkaW5nOworCV9fdTY0CQkJaW5vOworCV9fdTY0CQkJYmxvY2tzOworCV9fdTY0CQkJcmRldjsKKwlfX3U2NAkJCXNpemU7CisJX191NjQJCQl2ZXJzaW9uOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2NvbnZlcnRfaW5vZGVfaW5mbyhzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbykKK3sKKwlpbmZvLT5tb2RlID0gX19jcHVfdG9fYmUzMihpbmZvLT5tb2RlKTsKKwlpbmZvLT5ubGluayA9IF9fY3B1X3RvX2JlMzIoaW5mby0+bmxpbmspOworCWluZm8tPnVpZCA9IF9fY3B1X3RvX2JlMzIoaW5mby0+dWlkKTsKKwlpbmZvLT5naWQgPSBfX2NwdV90b19iZTMyKGluZm8tPmdpZCk7CisJaW5mby0+YmxvY2tzaXplID0gX19jcHVfdG9fYmUzMihpbmZvLT5ibG9ja3NpemUpOworCWluZm8tPmJsb2NrcyA9IF9fY3B1X3RvX2JlNjQoaW5mby0+YmxvY2tzKTsKKwlpbmZvLT5yZGV2ID0gX19jcHVfdG9fYmU2NChpbmZvLT5yZGV2KTsKKwlpbmZvLT5zaXplID0gX19jcHVfdG9fYmU2NChpbmZvLT5zaXplKTsKKwlpbmZvLT52ZXJzaW9uID0gX19jcHVfdG9fYmU2NChpbmZvLT52ZXJzaW9uKTsKKwlpbmZvLT5pbm8gPSBfX2NwdV90b19iZTY0KGluZm8tPmlubyk7Cit9CisKKy8qCisgKiBDYWNoZSBzdGF0ZSBtYWNoaW5lLgorICovCitlbnVtIHsKKwlORVRGU19DT01NQU5EX1BFTkRJTkcgPSAwLAkvKiBDb21tYW5kIGlzIGJlaW5nIGV4ZWN1dGVkICovCisJTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwJLyogSW5vZGUgd2FzIHN5bmNlZCB0byBzZXJ2ZXIgKi8KKwlORVRGU19JTk9ERV9SRU1PVEVfRElSX1NZTkNFRCwJLyogSW5vZGUgKGRpcmVjdG9yeSkgd2FzIHN5bmNlZCBmcm9tIHRoZSBzZXJ2ZXIgKi8KKwlORVRGU19JTk9ERV9PV05FRCwJCS8qIElub2RlIGlzIG93bmVkIGJ5IGdpdmVuIGhvc3QgKi8KKwlORVRGU19JTk9ERV9ORUVEX0ZMVVNILAkJLyogSW5vZGUgaGFzIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHNlcnZlciAqLworfTsKKworLyoKKyAqIFBPSE1FTEZTIGNhcGFiaWxpdGllczogaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkCisgKiBjcnlwdG8gb3BlcmF0aW9ucyAoaGFzaC9jaXBoZXIsIG1vZGVzLCBrZXkgc2l6ZXMgYW5kIHNvIG9uKSwKKyAqIHJvb3QgaW5mb3JtYWlvbiAodXNlZC9hdmFpbGFibGUgc2l6ZSwgbnVtYmVyIG9mIG9iamVjdHMsIHBlcm1pc3Npb25zKQorICovCitlbnVtIHBvaG1lbGZzX2NhcGFiaWxpdGllcyB7CisJUE9ITUVMRlNfQ1JZUFRPX0NBUEFCSUxJVElFUyA9IDAsCisJUE9ITUVMRlNfUk9PVF9DQVBBQklMSVRJRVMsCit9OworCisvKiBSZWFkLW9ubHkgbW91bnQgKi8KKyNkZWZpbmUgUE9ITUVMRlNfRkxBR1NfUk8JCSgxPDwwKQorLyogRXh0ZW5kZWQgYXR0cmlidXRlcyBzdXBwb3J0IG9uL29mZiAqLworI2RlZmluZSBQT0hNRUxGU19GTEFHU19YQVRUUgkJKDE8PDEpCisKK3N0cnVjdCBuZXRmc19yb290X2NhcGFiaWxpdGllcworeworCV9fdTY0CQkJbnJfZmlsZXM7CisJX191NjQJCQl1c2VkLCBhdmFpbDsKKwlfX3U2NAkJCWZsYWdzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2NvbnZlcnRfcm9vdF9jYXBhYmlsaXRpZXMoc3RydWN0IG5ldGZzX3Jvb3RfY2FwYWJpbGl0aWVzICpjYXApCit7CisJY2FwLT5ucl9maWxlcyA9IF9fY3B1X3RvX2JlNjQoY2FwLT5ucl9maWxlcyk7CisJY2FwLT51c2VkID0gX19jcHVfdG9fYmU2NChjYXAtPnVzZWQpOworCWNhcC0+YXZhaWwgPSBfX2NwdV90b19iZTY0KGNhcC0+YXZhaWwpOworCWNhcC0+ZmxhZ3MgPSBfX2NwdV90b19iZTY0KGNhcC0+ZmxhZ3MpOworfQorCitzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcworeworCXVuc2lnbmVkIHNob3J0CQloYXNoX3N0cmxlbjsJLyogSGFzaCBzdHJpbmcgbGVuZ3RoLCBsaWtlICJobWFjKHNoYTEpIGluY2x1ZGluZyAwIGJ5dGUgIiovCisJdW5zaWduZWQgc2hvcnQJCWNpcGhlcl9zdHJsZW47CS8qIENpcGhlciBzdHJpbmcgbGVuZ3RoIHdpdGggdGhlIHNhbWUgZm9ybWF0ICovCisJdW5zaWduZWQgaW50CQljaXBoZXJfa2V5c2l6ZTsJLyogQ2lwaGVyIGtleSBzaXplICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfY29udmVydF9jcnlwdG9fY2FwYWJpbGl0aWVzKHN0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzICpjYXApCit7CisJY2FwLT5oYXNoX3N0cmxlbiA9IF9fY3B1X3RvX2JlMTYoY2FwLT5oYXNoX3N0cmxlbik7CisJY2FwLT5jaXBoZXJfc3RybGVuID0gX19jcHVfdG9fYmUxNihjYXAtPmNpcGhlcl9zdHJsZW4pOworCWNhcC0+Y2lwaGVyX2tleXNpemUgPSBfX2NwdV90b19iZTMyKGNhcC0+Y2lwaGVyX2tleXNpemUpOworfQorCitlbnVtIHBvaG1lbGZzX2xvY2tfdHlwZSB7CisJUE9ITUVMRlNfTE9DS19HUkFCCT0gKDE8PDE1KSwKKworCVBPSE1FTEZTX1JFQURfTE9DSwk9IDAsCisJUE9ITUVMRlNfV1JJVEVfTE9DSywKK307CisKK3N0cnVjdCBuZXRmc19sb2NrCit7CisJX191NjQJCQlzdGFydDsKKwlfX3U2NAkJCWlubzsKKwlfX3UzMgkJCXNpemU7CisJX191MzIJCQl0eXBlOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2NvbnZlcnRfbG9jayhzdHJ1Y3QgbmV0ZnNfbG9jayAqbG9jaykKK3sKKwlsb2NrLT5zdGFydCA9IF9fY3B1X3RvX2JlNjQobG9jay0+c3RhcnQpOworCWxvY2stPmlubyA9IF9fY3B1X3RvX2JlNjQobG9jay0+aW5vKTsKKwlsb2NrLT5zaXplID0gX19jcHVfdG9fYmUzMihsb2NrLT5zaXplKTsKKwlsb2NrLT50eXBlID0gX19jcHVfdG9fYmUzMihsb2NrLT50eXBlKTsKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKy8qCisgKiBQcml2YXRlIFBPSE1FTEZTIGNhY2hlIG9mIG9iamVjdHMgaW4gZGlyZWN0b3J5LgorICovCitzdHJ1Y3QgcG9obWVsZnNfbmFtZQoreworCXN0cnVjdCByYl9ub2RlCQloYXNoX25vZGU7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN5bmNfY3JlYXRlX2VudHJ5OworCisJdTY0CQkJaW5vOworCisJdTMyCQkJaGFzaDsKKwl1MzIJCQltb2RlOworCXUzMgkJCWxlbjsKKworCWNoYXIJCQkqZGF0YTsKK307CisKKy8qCisgKiBQT0hNRUxGUyBpbm9kZS4gTWFpbiBvYmplY3QuCisgKi8KK3N0cnVjdCBwb2htZWxmc19pbm9kZQoreworCXN0cnVjdCBsaXN0X2hlYWQJaW5vZGVfZW50cnk7CQkvKiBFbnRyeSBpbiBzdXBlcmJsb2NrIGxpc3QuCisJCQkJCQkJICogT2JqZWN0cyB3aGljaCBhcmUgbm90IGJvdW5kIHRvIGRlbnRyeSByZXF1aXJlIHRvIGJlIGRyb3BwZWQKKwkJCQkJCQkgKiBpbiAtPnB1dF9zdXBlcigpCisJCQkJCQkJICovCisJc3RydWN0IHJiX3Jvb3QJCWhhc2hfcm9vdDsJCS8qIFRoZSBzYW1lLCBidXQgaW5kZXhlZCBieSBuYW1lIGhhc2ggYW5kIGxlbiAqLworCXN0cnVjdCBtdXRleAkJb2Zmc2V0X2xvY2s7CQkvKiBQcm90ZWN0IGJvdGggYWJvdmUgdHJlZXMgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJc3luY19jcmVhdGVfbGlzdDsJLyogTGlzdCBvZiBjcmVhdGVkIGJ1dCBub3QgeWV0IHN5bmNlZCB0byB0aGUgc2VydmVyIGNoaWxkcmVuICovCisKKwl1bnNpZ25lZCBpbnQJCWRyb3BfY291bnQ7CisKKwlpbnQJCQlsb2NrX3R5cGU7CQkvKiBIb3cgdGhpcyBpbm9kZSBpcyBsb2NrZWQ6IHJlYWQgb3Igd3JpdGUgKi8KKworCWludAkJCWVycm9yOwkJCS8qIFRyYW5zYWN0aW9uIGVycm9yIGZvciBnaXZlbiBpbm9kZSAqLworCisJbG9uZwkJCXN0YXRlOwkJCS8qIFN0YXRlIG1hY2hpbmUgYWJvdmUgKi8KKworCXU2NAkJCWlubzsJCQkvKiBJbm9kZSBudW1iZXIgKi8KKwl1NjQJCQl0b3RhbF9sZW47CQkvKiBUb3RhbCBsZW5ndGggb2YgYWxsIGNoaWxkcmVuIG5hbWVzLCB1c2VkIHRvIGNyZWF0ZSBvZmZzZXRzICovCisKKwlzdHJ1Y3QgaW5vZGUJCXZmc19pbm9kZTsKK307CisKK3N0cnVjdCBuZXRmc190cmFuczsKK3R5cGVkZWYgaW50ICgqIG5ldGZzX3RyYW5zX2NvbXBsZXRlX3QpKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycik7CisKK3N0cnVjdCBuZXRmc19zdGF0ZTsKK3N0cnVjdCBwb2htZWxmc19zYjsKKworc3RydWN0IG5ldGZzX3RyYW5zCit7CisJLyoKKwkgKiBUcmFuc2FjdGlvbiBoZWFkZXIgYW5kIGF0dGFjaGVkIGNvbnRpZ3VvdXMgZGF0YSBsaXZlIGhlcmUuCisJICovCisJc3RydWN0IGlvdmVjCQkJaW92ZWM7CisKKwkvKgorCSAqIFBhZ2VzIGF0dGFjaGVkIHRvIHRyYW5zYWN0aW9uLgorCSAqLworCXN0cnVjdCBwYWdlCQkJKipwYWdlczsKKworCS8qCisJICogTGlzdCBhbmQgcHJvdGVjdGluZyBsb2NrIGZvciB0cmFuc2FjdGlvbiBkZXN0aW5hdGlvbgorCSAqIG5ldHdvcmsgc3RhdGVzLgorCSAqLworCXNwaW5sb2NrX3QJCQlkc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkc3RfbGlzdDsKKworCS8qCisJICogTnVtYmVyIG9mIHVzZXJzIGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KKwkgKiBGb3IgZXhhbXBsZSBlYWNoIG5ldHdvcmsgc3RhdGUgYXR0YWNoZWQgdG8gdHJhbnNhY3Rpb24KKwkgKiB2aWEgZHN0X2xpc3QgaW5jcmVhc2VzIGl0LgorCSAqLworCWF0b21pY190CQkJcmVmY250OworCisJLyoKKwkgKiBOdW1iZXIgb2YgcGFnZXMgYXR0YWNoZWQgdG8gZ2l2ZW4gdHJhbnNhY3Rpb24uCisJICogU29tZSBzbG90cyBpbiBhYm92ZSBwYWdlIGFycmF5IGNhbiBiZSBOVUxMLCBzaW5jZQorCSAqIGZvciBleGFtcGxlIHBhZ2UgY2FuIGJlIHVuZGVyIHdyaXRlYmFjayBhbHJlYWR5LAorCSAqIHNvIHdlIHNraXAgaXQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlwYWdlX251bTsKKworCS8qCisJICogVHJhbnNhY3Rpb24gZmxhZ3M6IHNpbmdsZSBkc3Qgb3IgYnJvYWRjYXN0IGFuZCBzbyBvbi4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlmbGFnczsKKworCS8qCisJICogU2l6ZSBvZiB0aGUgZGF0YSwgd2hpY2ggY2FuIGJlIHBsYWNlZCBpbnRvCisJICogaW92ZWMuaW92X2Jhc2UgYXJlYS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQl0b3RhbF9zaXplOworCisJLyoKKwkgKiBOdW1iZXIgb2YgcGFnZXMgdG8gYmUgc2VudCB0byByZW1vdGUgc2VydmVyLgorCSAqIFVzdWFsbHkgZXF1YWwgdG8gYWJvdmUgcGFnZV9udW0sIGJ1dCBpbiBjYXNlIG9mIHBhcnRpYWwKKwkgKiB3cml0ZWJhY2sgaXQgY2FuIGFjY3VtdWxhdGUgb25seSBwYWdlcyBhbHJlYWR5IGNvbXBsZXRlZAorCSAqIHByZXZpb3VzIHdyaXRlYmFjay4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlhdHRhY2hlZF9wYWdlczsKKworCS8qCisJICogQXR0YWNoZWQgbnVtYmVyIG9mIGJ5dGVzIGluIGFsbCBhYm92ZSBwYWdlcy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlhdHRhY2hlZF9zaXplOworCisJLyoKKwkgKiBVbmlxdWUgdHJhbnNhY3RvbiBnZW5lcmF0aW9uIG51bWJlci4KKwkgKiBVc2VkIGFzIGlkZW50aXR5IGluIHRoZSBuZXR3b3JrIHN0YXRlIHRyZWUgb2YgdHJhbnNhY3Rpb25zLgorCSAqLworCXVuc2lnbmVkIGludAkJCWdlbjsKKworCS8qCisJICogVHJhbnNhY3Rpb24gY29tcGxldGlvbiBzdGF0dXMuCisJICovCisJaW50CQkJCXJlc3VsdDsKKworCS8qCisJICogU3VwZXJibG9jayB0aGlzIHRyYW5zYWN0aW9uIGJlbG9uZ3MgdG8KKwkgKi8KKwlzdHJ1Y3QgcG9obWVsZnNfc2IJCSpwc2I7CisKKwkvKgorCSAqIENyeXB0byBlbmdpbmUsIHdoaWNoIHByb2Nlc3NlZCB0aGlzIHRyYW5zYWN0aW9uLgorCSAqIENhbiBiZSBub3QgTlVMTCBvbmx5IGlmIGNyeXB0byBlbmdpbmUgaG9sZHMgZW5jcnlwdGVkIHBhZ2VzLgorCSAqLworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lCSplbmc7CisKKwkvKiBQcml2YXRlIGRhdGEgKi8KKwl2b2lkCQkJCSpwcml2YXRlOworCisJLyogQ29tcGxldGlvbiBjYWxsYmFjaywgaW52b2tlZCBqdXN0IGJlZm9yZSB0cmFuc2FjdGlvbiBpcyBkZXN0cm95ZWQgKi8KKwluZXRmc190cmFuc19jb21wbGV0ZV90CQljb21wbGV0ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGZzX3RyYW5zX2N1cl9sZW4oc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCXJldHVybiAoc2lnbmVkKSh0LT50b3RhbF9zaXplIC0gdC0+aW92ZWMuaW92X2xlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmV0ZnNfdHJhbnNfY3VycmVudChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJcmV0dXJuIHQtPmlvdmVjLmlvdl9iYXNlICsgdC0+aW92ZWMuaW92X2xlbjsKK30KKworc3RydWN0IG5ldGZzX3RyYW5zICpuZXRmc190cmFuc19hbGxvYyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgdW5zaWduZWQgaW50IHNpemUsCisJCXVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG5yKTsKK3ZvaWQgbmV0ZnNfdHJhbnNfZnJlZShzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpOworaW50IG5ldGZzX3RyYW5zX2ZpbmlzaChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK2ludCBuZXRmc190cmFuc19maW5pc2hfc2VuZChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3RyYW5zX3Jlc2V0KHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwl0LT5jb21wbGV0ZSA9IE5VTEw7Cit9CisKK3N0cnVjdCBuZXRmc190cmFuc19kc3QKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCQl0cmFuc19lbnRyeTsKKwlzdHJ1Y3QgcmJfbm9kZQkJCXN0YXRlX2VudHJ5OworCisJdW5zaWduZWQgbG9uZwkJCXNlbmRfdGltZTsKKworCS8qCisJICogVGltZXMgdGhpcyB0cmFuc2FjdGlvbiB3YXMgcmVzZW50IHRvIGl0cyBvbGQgb3IgbmV3LAorCSAqIGRlcGVuZGluZyBvbiBmbGFncywgZGVzdGluYXRpb25zLiBXaGVuIGl0IHJlYWNoZXMgbWF4aW11bQorCSAqIGFsbG93ZWQgbnVtYmVyLCBzcGVjaWZpZWQgaW4gc3VwZXJibG9jay0+dHJhbnNfcmV0cmllcywKKwkgKiB0cmFuc2FjdGlvbiB3aWxsIGJlIGZyZWVkIHdpdGggRVRJTUVET1VUIGVycm9yLgorCSAqLworCXVuc2lnbmVkIGludAkJCXJldHJpZXM7CisKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMJCSp0cmFuczsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUJCSpzdGF0ZTsKK307CisKK3N0cnVjdCBuZXRmc190cmFuc19kc3QgKm5ldGZzX3RyYW5zX3NlYXJjaChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0LCB1bnNpZ25lZCBpbnQgZ2VuKTsKK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF9kc3Qoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KTsKK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF9kc3Rfbm9zdGF0ZShzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpOwordm9pZCBuZXRmc190cmFuc19kcm9wX3RyYW5zKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7Cit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfbGFzdChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOworaW50IG5ldGZzX3RyYW5zX3Jlc2VuZChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK2ludCBuZXRmc190cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7CisKK2ludCBuZXRmc190cmFuc19pbml0KHZvaWQpOwordm9pZCBuZXRmc190cmFuc19leGl0KHZvaWQpOworCitzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZQoreworCXU2NAkJCQlpdjsJCS8qIENyeXB0byBJViBmb3IgY3VycmVudCBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCQkJdGltZW91dDsJLyogQ3J5cHRvIHdhaXRpbmcgdGltZW91dCAqLworCXVuc2lnbmVkIGludAkJCXNpemU7CQkvKiBTaXplIG9mIGNyeXB0byBzY3JhdGNocGFkICovCisJdm9pZAkJCQkqZGF0YTsJCS8qIFRlbXBvcmFsIGNyeXB0byBzY3JhdGNocGFkICovCisJLyoKKwkgKiBDcnlwdG8gb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gb2JqZWN0cy4KKwkgKi8KKwlzdHJ1Y3QgY3J5cHRvX2hhc2gJCSpoYXNoOworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlcgkqY2lwaGVyOworCisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQJKnRocmVhZDsJLyogQ3J5cHRvIHRocmVhZCB3aGljaCBob3N0cyB0aGlzIGVuZ2luZSAqLworCisJc3RydWN0IHBhZ2UJCQkqKnBhZ2VzOworCXVuc2lnbmVkIGludAkJCXBhZ2VfbnVtOworfTsKKworc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCQl0aHJlYWRfZW50cnk7CisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0aHJlYWQ7CisJc3RydWN0IHBvaG1lbGZzX3NiCQkqcHNiOworCisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUJZW5nOworCisJc3RydWN0IG5ldGZzX3RyYW5zCQkqdHJhbnM7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd2FpdDsKKwlpbnQJCQkJZXJyb3I7CisKKwl1bnNpZ25lZCBpbnQJCQlzaXplOworCXN0cnVjdCBwYWdlCQkJKnBhZ2U7Cit9OworCit2b2lkIHBvaG1lbGZzX2NyeXB0b190aHJlYWRfbWFrZV9yZWFkeShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdGgpOworCisvKgorICogTmV0d29yayBzdGF0ZSwgYXR0YWNoZWQgdG8gb25lIHNlcnZlci4KKyAqLworc3RydWN0IG5ldGZzX3N0YXRlCit7CisJc3RydWN0IG11dGV4CQlfX3N0YXRlX2xvY2s7CQkvKiBDYW4gbm90IGFsbG93IHRvIHVzZSB0aGUgc2FtZSBzb2NrZXQgc2ltdWx0YW5lb3VzbHkgKi8KKwlzdHJ1Y3QgbXV0ZXgJCV9fc3RhdGVfc2VuZF9sb2NrOworCXN0cnVjdCBuZXRmc19jbWQgCWNtZDsJCQkvKiBDYWNoZWQgY29tbWFuZCAqLworCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvCWluZm87CQkJLyogQ2FjaGVkIGlub2RlIGluZm8gKi8KKworCXZvaWQJCQkqZGF0YTsJCQkvKiBDYWNoZWQgc29tZSBkYXRhICovCisJdW5zaWduZWQgaW50CQlzaXplOwkJCS8qIFNpemUgb2YgdGhhdCBkYXRhICovCisKKwlzdHJ1Y3QgcG9obWVsZnNfc2IJKnBzYjsJCQkvKiBTdXBlcmJsb2NrICovCisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsJCS8qIEFzeW5jIHJlY2VpdmluZyB0aHJlYWQgKi8KKworCS8qIFdhaXRpbmcvcG9sbGluZyBtYWNoaW5lcnkgKi8KKwl3YWl0X3F1ZXVlX3QgCQl3YWl0OworCXdhaXRfcXVldWVfaGVhZF90IAkqd2hlYWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgCXRocmVhZF93YWl0OworCisJc3RydWN0IG11dGV4CQl0cmFuc19sb2NrOworCXN0cnVjdCByYl9yb290CQl0cmFuc19yb290OworCisJc3RydWN0IHBvaG1lbGZzX2N0bAljdGw7CQkJLyogUmVtb3RlIHBlZXIgKi8KKworCXN0cnVjdCBzb2NrZXQJCSpzb2NrZXQ7CQkvKiBTb2NrZXQgb2JqZWN0ICovCisJc3RydWN0IHNvY2tldAkJKnJlYWRfc29ja2V0OwkJLyogQ2FjaGVkIHBvaW50ZXIgdG8gc29ja2V0IG9iamVjdC4KKwkJCQkJCQkgKiBVc2VkIHRvIGRldGVybWluZSBpZiBiZXR3ZWVuIGxvY2sgZHJvcHMgc29ja2V0IHdhcyBjaGFuZ2VkLgorCQkJCQkJCSAqIE5ldmVyIHVzZWQgdG8gcmVhZCBkYXRhIG9yIGFueSBraW5kIG9mIGFjY2Vzcy4KKwkJCQkJCQkgKi8KKwkvKgorCSAqIENyeXB0byBlbmdpbmVzIHRvIHByb2Nlc3MgaW5jb21pbmcgZGF0YS4KKwkgKi8KKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZQllbmc7CisKKwlpbnQJCQluZWVkX3Jlc2V0OworfTsKKworaW50IG5ldGZzX3N0YXRlX2luaXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7Cit2b2lkIG5ldGZzX3N0YXRlX2V4aXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19zdGF0ZV9sb2NrX3NlbmQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwltdXRleF9sb2NrKCZzdC0+X19zdGF0ZV9zZW5kX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXRmc19zdGF0ZV90cnlsb2NrX3NlbmQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlyZXR1cm4gbXV0ZXhfdHJ5bG9jaygmc3QtPl9fc3RhdGVfc2VuZF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3N0YXRlX3VubG9ja19zZW5kKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJnN0LT5fX3N0YXRlX3NlbmRfbG9jaykpOworCisJbXV0ZXhfdW5sb2NrKCZzdC0+X19zdGF0ZV9zZW5kX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfc3RhdGVfbG9jayhzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCW11dGV4X2xvY2soJnN0LT5fX3N0YXRlX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfc3RhdGVfdW5sb2NrKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJnN0LT5fX3N0YXRlX2xvY2spKTsKKworCW11dGV4X3VubG9jaygmc3QtPl9fc3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5ldGZzX3N0YXRlX3BvbGwoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IFBPTExIVVAgfCBQT0xMRVJSOworCisJbmV0ZnNfc3RhdGVfbG9jayhzdCk7CisJaWYgKHN0LT5zb2NrZXQpCisJCXJldmVudHMgPSBzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgTlVMTCk7CisJbmV0ZnNfc3RhdGVfdW5sb2NrKHN0KTsKKworCXJldHVybiByZXZlbnRzOworfQorCitzdHJ1Y3QgcG9obWVsZnNfY29uZmlnOworCitzdHJ1Y3QgcG9obWVsZnNfc2IKK3sKKwlzdHJ1Y3QgcmJfcm9vdAkJbWNhY2hlX3Jvb3Q7CisJc3RydWN0IG11dGV4CQltY2FjaGVfbG9jazsKKwlhdG9taWNfbG9uZ190CQltY2FjaGVfZ2VuOworCXVuc2lnbmVkIGxvbmcJCW1jYWNoZV90aW1lb3V0OworCisJdW5zaWduZWQgaW50CQlpZHg7CisKKwl1bnNpZ25lZCBpbnQJCXRyYW5zX3JldHJpZXM7CisKKwlhdG9taWNfdAkJdHJhbnNfZ2VuOworCisJdW5zaWduZWQgaW50CQljcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWNyeXB0b19hbGlnbl9zaXplOworCisJdW5zaWduZWQgaW50CQljcnlwdG9fZmFpbF91bnN1cHBvcnRlZDsKKworCXVuc2lnbmVkIGludAkJY3J5cHRvX3RocmVhZF9udW07CisJc3RydWN0IGxpc3RfaGVhZAljcnlwdG9fYWN0aXZlX2xpc3QsIGNyeXB0b19yZWFkeV9saXN0OworCXN0cnVjdCBtdXRleAkJY3J5cHRvX3RocmVhZF9sb2NrOworCisJdW5zaWduZWQgaW50CQl0cmFuc19tYXhfcGFnZXM7CisJdW5zaWduZWQgbG9uZwkJdHJhbnNfZGF0YV9zaXplOworCXVuc2lnbmVkIGxvbmcJCXRyYW5zX3RpbWVvdXQ7CisKKwl1bnNpZ25lZCBsb25nCQlkcm9wX3NjYW5fdGltZW91dDsKKwl1bnNpZ25lZCBsb25nCQl0cmFuc19zY2FuX3RpbWVvdXQ7CisKKwl1bnNpZ25lZCBsb25nCQl3YWl0X29uX3BhZ2VfdGltZW91dDsKKworCXN0cnVjdCBsaXN0X2hlYWQJZmx1c2hfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRyb3BfbGlzdDsKKwlzcGlubG9ja190CQlpbm9fbG9jazsKKwl1NjQJCQlpbm87CisKKwkvKgorCSAqIFJlbW90ZSBub2RlcyBQT0hNRUxGUyBjb25uZWN0ZWQgdG8uCisJICovCisJc3RydWN0IGxpc3RfaGVhZAlzdGF0ZV9saXN0OworCXN0cnVjdCBtdXRleAkJc3RhdGVfbG9jazsKKworCS8qCisJICogQ3VycmVudGx5IGFjdGl2ZSBzdGF0ZSB0byByZXF1ZXN0IGRhdGEgZnJvbS4KKwkgKi8KKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnCSphY3RpdmVfc3RhdGU7CisKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisKKwkvKgorCSAqIFRpbWVkIGNoZWNrczogc3RhbGUgdHJhbnNhY3Rpb25zLCBpbm9kZXMgdG8gYmUgZnJlZWQgYW5kIHNvIG9uLgorCSAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgCWR3b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgCWRyb3BfZHdvcms7CisKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiOworCisJLyoKKwkgKiBBbGdvcml0aG0gc3RyaW5ncy4KKwkgKi8KKwljaGFyCQkJKmhhc2hfc3RyaW5nOworCWNoYXIJCQkqY2lwaGVyX3N0cmluZzsKKworCXU4CQkJKmhhc2hfa2V5OworCXU4CQkJKmNpcGhlcl9rZXk7CisKKwkvKgorCSAqIEFsZ29yaXRobSBzdHJpbmcgbGVuZ3Rocy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWhhc2hfc3RybGVuOworCXVuc2lnbmVkIGludAkJY2lwaGVyX3N0cmxlbjsKKwl1bnNpZ25lZCBpbnQJCWhhc2hfa2V5c2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWNpcGhlcl9rZXlzaXplOworCisJLyoKKwkgKiBDb250cm9scyB3aGV0aGVyIHRvIHBlcmZyb20gY3J5cHRvIHByb2Nlc3Npbmcgb3Igbm90LgorCSAqLworCWludAkJCXBlcmZvcm1fY3J5cHRvOworCisJLyoKKwkgKiBQT0hNRUxGUyBzdGF0aXN0aWNzLgorCSAqLworCXU2NAkJCXRvdGFsX3NpemU7CisJdTY0CQkJYXZhaWxfc2l6ZTsKKwlhdG9taWNfbG9uZ190CQl0b3RhbF9pbm9kZXM7CisKKwkvKgorCSAqIFhhdHRyIHN1cHBvcnQsIHJlYWQtb25seSBhbmQgc28gb24uCisJICovCisJdTY0CQkJc3RhdGVfZmxhZ3M7CisKKwkvKgorCSAqIFRlbXBvcmFyeSBzdG9yYWdlIHRvIGRldGVjdCBjaGFuZ2VzIGluIHRoZSB3YWl0IHF1ZXVlLgorCSAqLworCWxvbmcJCQlmbGFnczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc190cmFuc191cGRhdGUoc3RydWN0IG5ldGZzX2NtZCAqY21kLAorCQlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBzeiA9IEFMSUdOKHNpemUsIHQtPnBzYi0+Y3J5cHRvX2FsaWduX3NpemUpOworCisJdC0+aW92ZWMuaW92X2xlbiArPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkgKyBzejsKKwljbWQtPmNwYWQgPSBfX2NwdV90b19iZTE2KHN6IC0gc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvaG1lbGZzX3NiICpQT0hNRUxGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb2htZWxmc19pbm9kZSAqUE9ITUVMRlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBwb2htZWxmc19pbm9kZSwgdmZzX2lub2RlKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgcG9obWVsZnNfbmV3X2lubyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwl1NjQgaW5vOworCisJc3Bpbl9sb2NrKCZwc2ItPmlub19sb2NrKTsKKwlpbm8gPSBwc2ItPmlubysrOworCXNwaW5fdW5sb2NrKCZwc2ItPmlub19sb2NrKTsKKworCXJldHVybiBpbm87Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb2htZWxmc19wdXRfaW5vZGUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBpLT52ZnNfaW5vZGUuaV9zYik7CisKKwlzcGluX2xvY2soJnBzYi0+aW5vX2xvY2spOworCWxpc3RfbW92ZV90YWlsKCZwaS0+aW5vZGVfZW50cnksICZwc2ItPmRyb3BfbGlzdCk7CisJcGktPmRyb3BfY291bnQrKzsKKwlzcGluX3VubG9jaygmcHNiLT5pbm9fbG9jayk7Cit9CisKK3N0cnVjdCBwb2htZWxmc19jb25maWcKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbmZpZ19lbnRyeTsKKworCXN0cnVjdCBuZXRmc19zdGF0ZQlzdGF0ZTsKK307CisKK3N0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAKK3sKKwkvKgorCSAqIEVudHJ5IGluIHRoZSBnbG9iYWwgY29uZmlnIGdyb3VwIGxpc3QuCisJICovCisJc3RydWN0IGxpc3RfaGVhZAlncm91cF9lbnRyeTsKKworCS8qCisJICogSW5kZXggb2YgdGhlIGN1cnJlbnQgZ3JvdXAuCisJICovCisJdW5zaWduZWQgaW50CQlpZHg7CisJLyoKKwkgKiBOdW1iZXIgb2YgY29uZmlnX2xpc3QgZW50cmllcyBpbiB0aGlzIGdyb3VwIGVudHJ5LgorCSAqLworCXVuc2lnbmVkIGludAkJbnVtX2VudHJ5OworCS8qCisJICogQWxnb3JpdGhtIHN0cmluZ3MuCisJICovCisJY2hhcgkJCSpoYXNoX3N0cmluZzsKKwljaGFyCQkJKmNpcGhlcl9zdHJpbmc7CisKKwkvKgorCSAqIEFsZ29yaXRobSBzdHJpbmcgbGVuZ3Rocy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWhhc2hfc3RybGVuOworCXVuc2lnbmVkIGludAkJY2lwaGVyX3N0cmxlbjsKKworCS8qCisJICogS2V5IGFuZCBpdHMgc2l6ZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWhhc2hfa2V5c2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWNpcGhlcl9rZXlzaXplOworCXU4CQkJKmhhc2hfa2V5OworCXU4CQkJKmNpcGhlcl9rZXk7CisKKwkvKgorCSAqIExpc3Qgb2YgY29uZmlnIGVudHJpZXMgKG5ldHdvcmsgc3RhdGUgaW5mbykgZm9yIGdpdmVuIGlkeC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbmZpZ19saXN0OworfTsKKworaW50IF9faW5pdCBwb2htZWxmc19jb25maWdfaW5pdCh2b2lkKTsKK3ZvaWQgcG9obWVsZnNfY29uZmlnX2V4aXQodm9pZCk7CitpbnQgcG9obWVsZnNfY29weV9jb25maWcoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworaW50IHBvaG1lbGZzX2NvcHlfY3J5cHRvKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK2ludCBwb2htZWxmc19jb25maWdfY2hlY2soc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqY29uZmlnLCBpbnQgaWR4KTsKK2ludCBwb2htZWxmc19zdGF0ZV9pbml0X29uZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqY29uZik7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvaG1lbGZzX2Rpcl9mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBvaG1lbGZzX2Rpcl9pbm9kZV9vcHM7CisKK2ludCBwb2htZWxmc19zdGF0ZV9pbml0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK3ZvaWQgcG9obWVsZnNfc3RhdGVfZXhpdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7Cit2b2lkIHBvaG1lbGZzX3N0YXRlX2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKKwordm9pZCBwb2htZWxmc19maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvKTsKKwordm9pZCBwb2htZWxmc19uYW1lX2RlbChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm4pOwordm9pZCBwb2htZWxmc19mcmVlX25hbWVzKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50KTsKK3N0cnVjdCBwb2htZWxmc19uYW1lICpwb2htZWxmc19zZWFyY2hfaGFzaChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1MzIgaGFzaCk7CisKK3ZvaWQgcG9obWVsZnNfaW5vZGVfZGVsX2lub2RlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKTsKKworc3RydWN0IHBvaG1lbGZzX2lub2RlICpwb2htZWxmc19jcmVhdGVfZW50cnlfbG9jYWwoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBxc3RyICpzdHIsIHU2NCBzdGFydCwgaW50IG1vZGUpOworCitpbnQgcG9obWVsZnNfd3JpdGVfY3JlYXRlX2lub2RlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpOworCitpbnQgcG9obWVsZnNfd3JpdGVfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZXRmc190cmFucyAqdHJhbnMpOworaW50IHBvaG1lbGZzX3JlbW92ZV9jaGlsZChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm4pOworCitzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBvaG1lbGZzX25ld19pbm9kZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwkJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBxc3RyICpzdHIsCisJCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvLCBpbnQgbGluayk7CisKK2ludCBwb2htZWxmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKK2ludCBwb2htZWxmc19zZXRhdHRyX3JhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOworCitpbnQgcG9obWVsZnNfbWV0YV9jb21tYW5kKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHVuc2lnbmVkIGludCBjbWRfb3AsIHVuc2lnbmVkIGludCBmbGFncywKKwkJbmV0ZnNfdHJhbnNfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqcHJpdiwgdTY0IHN0YXJ0KTsKK2ludCBwb2htZWxmc19tZXRhX2NvbW1hbmRfZGF0YShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgaWQsIHVuc2lnbmVkIGludCBjbWRfb3AsIGNoYXIgKmFkZG9uLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIG5ldGZzX3RyYW5zX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKnByaXYsIHU2NCBzdGFydCk7CisKK3ZvaWQgcG9obWVsZnNfY2hlY2tfc3RhdGVzKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK3ZvaWQgcG9obWVsZnNfc3dpdGNoX2FjdGl2ZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CisKK2ludCBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdm9pZCAqZGF0YSwgaW50IGxlbik7CitpbnQgcG9obWVsZnNfcGF0aF9sZW5ndGgoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSk7CisKK3N0cnVjdCBwb2htZWxmc19jcnlwdG9fY29tcGxldGlvbgoreworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRlOworCWludAkJCWVycm9yOworfTsKKworaW50IHBvaG1lbGZzX3RyYW5zX2NyeXB0KHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOwordm9pZCBwb2htZWxmc19jcnlwdG9fZXhpdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CitpbnQgcG9obWVsZnNfY3J5cHRvX2luaXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworCitpbnQgcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9pbml0KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7Cit2b2lkIHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfZXhpdChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSk7CisKK2ludCBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9kYXRhKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLCB1NjQgaXYsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CitpbnQgcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfcGFnZShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwKKwkJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBzaXplLCB1NjQgaXYpOworCitzdGF0aWMgaW5saW5lIHU2NCBwb2htZWxmc19nZW5faXYoc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCXU2NCBpdiA9IHQtPmdlbjsKKworCWl2IDw8PSAzMjsKKwlpdiB8PSAoKHVuc2lnbmVkIGxvbmcpdCkgJiAweGZmZmZmZmZmOworCisJcmV0dXJuIGl2OworfQorCitpbnQgcG9obWVsZnNfZGF0YV9sb2NrKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBzdGFydCwgdTMyIHNpemUsIGludCB0eXBlKTsKK2ludCBwb2htZWxmc19kYXRhX3VubG9jayhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgc3RhcnQsIHUzMiBzaXplLCBpbnQgdHlwZSk7CitpbnQgcG9obWVsZnNfZGF0YV9sb2NrX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOworCitzdGF0aWMgaW5saW5lIGludCBwb2htZWxmc19uZWVkX2xvY2soc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgaW50IHR5cGUpCit7CisJaWYgKHRlc3RfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKSkgeworCQlpZiAodHlwZSA9PSBwaS0+bG9ja190eXBlKQorCQkJcmV0dXJuIDA7CisJCWlmICgodHlwZSA9PSBQT0hNRUxGU19SRUFEX0xPQ0spICYmIChwaS0+bG9ja190eXBlID09IFBPSE1FTEZTX1dSSVRFX0xPQ0spKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCF0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworaW50IF9faW5pdCBwb2htZWxmc19tY2FjaGVfaW5pdCh2b2lkKTsKK3ZvaWQgcG9obWVsZnNfbWNhY2hlX2V4aXQodm9pZCk7CisKKy8vI2RlZmluZSBDT05GSUdfUE9ITUVMRlNfREVCVUcKKworI2lmZGVmIENPTkZJR19QT0hNRUxGU19ERUJVRworI2RlZmluZSBkcHJpbnRrYShmLCBhLi4uKSBwcmludGsoZiwgIyNhKQorI2RlZmluZSBkcHJpbnRrKGYsIGEuLi4pIHByaW50aygiJWQ6ICIgZiwgdGFza19waWRfdm5yKGN1cnJlbnQpLCAjI2EpCisjZWxzZQorI2RlZmluZSBkcHJpbnRrYShmLCBhLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHByaW50ayhmLCBhLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfdHJhbnNfZ2V0KHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwlhdG9taWNfaW5jKCZ0LT5yZWZjbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfdHJhbnNfcHV0KHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdC0+cmVmY250KSkgeworCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgdC0+cmVzdWx0KTsKKwkJaWYgKHQtPmNvbXBsZXRlKQorCQkJdC0+Y29tcGxldGUodC0+cGFnZXMsIHQtPnBhZ2VfbnVtLAorCQkJCXQtPnByaXZhdGUsIHQtPnJlc3VsdCk7CisJCW5ldGZzX3RyYW5zX2ZyZWUodCk7CisJfQorfQorCitzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlCit7CisJc3RydWN0IHJiX25vZGUJCQltY2FjaGVfZW50cnk7CisJc3RydWN0IGNvbXBsZXRpb24JCWNvbXBsZXRlOworCisJYXRvbWljX3QJCQlyZWZjbnQ7CisKKwl1NjQJCQkJZ2VuOworCisJdm9pZAkJCQkqZGF0YTsKKwl1NjQJCQkJc3RhcnQ7CisJdTMyCQkJCXNpemU7CisJaW50CQkJCWVycjsKKworCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvCQlpbmZvOworfTsKKworc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqcG9obWVsZnNfbWNhY2hlX2FsbG9jKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCB1NjQgc3RhcnQsCisJCXVuc2lnbmVkIGludCBzaXplLCB2b2lkICpkYXRhKTsKK3ZvaWQgcG9obWVsZnNfbWNhY2hlX2ZyZWUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pOworc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqcG9obWVsZnNfbWNhY2hlX3NlYXJjaChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgdTY0IGdlbik7Cit2b2lkIHBvaG1lbGZzX21jYWNoZV9yZW1vdmVfbG9ja2VkKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBvaG1lbGZzX21jYWNoZV9nZXQoc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSkKK3sKKwlhdG9taWNfaW5jKCZtLT5yZWZjbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9obWVsZnNfbWNhY2hlX3B1dChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwkJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbS0+cmVmY250KSkKKwkJcG9obWVsZnNfbWNhY2hlX2ZyZWUocHNiLCBtKTsKK30KKworaW50IHBvaG1lbGZzX2Z0cmFuc19pbml0KHZvaWQpOwordm9pZCBwb2htZWxmc19mdHJhbnNfZXhpdCh2b2lkKTsKK3ZvaWQgcG9obWVsZnNfZnRyYW5zX3VwZGF0ZSh1NjQgaWQpOworaW50IHBvaG1lbGZzX2Z0cmFuc19jaGVjayh1NjQgaWQpOwordm9pZCBwb2htZWxmc19mdHJhbnNfY2xlYW4odTY0IGlkKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18qLworCisjZW5kaWYgLyogX19ORVRGU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvcGF0aF9lbnRyeS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3BhdGhfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFkODg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3BhdGhfZW50cnkuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKKyNkZWZpbmUgVU5IQVNIRURfT0JTQ1VSRV9TVFJJTkdfU0laRQkJc2l6ZW9mKCIgKGRlbGV0ZWQpIikKKworLyoKKyAqIENyZWF0ZSBwYXRoIGZyb20gcm9vdCBmb3IgZ2l2ZW4gaW5vZGUuCisgKiBQYXRoIGlzIGZvcm1lZCBhcyBzZXQgb2Ygc3R1Y3R1cmVzLCBjb250YWluaW5nIG5hbWUgb2YgdGhlIG9iamVjdAorICogYW5kIGl0cyBpbm9kZSBkYXRhIChtb2RlLCBwZXJtaXNzaW9ucyBhbmQgc28gb24pLgorICovCitpbnQgcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHBhdGggcGF0aDsKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWNoYXIgKnB0cjsKKwlpbnQgZXJyID0gMCwgc3RybGVuLCByZWR1Y2UgPSAwOworCisJZCA9IGRfZmluZF9hbGlhcygmcGktPnZmc19pbm9kZSk7CisJaWYgKCFkKSB7CisJCXByaW50aygiJXM6IG5vIGFsaWFzLCBsaXN0X2VtcHR5OiAlZC5cbiIsIF9fZnVuY19fLCBsaXN0X2VtcHR5KCZwaS0+dmZzX2lub2RlLmlfZGVudHJ5KSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCXBhdGgubW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5yb290Lm1udCk7CisJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKworCXBhdGguZGVudHJ5ID0gZDsKKworCWlmICghSVNfUk9PVChkKSAmJiBkX3VuaGFzaGVkKGQpKQorCQlyZWR1Y2UgPSAxOworCisJcHRyID0gZF9wYXRoKCZwYXRoLCBkYXRhLCBsZW4pOworCWlmIChJU19FUlIocHRyKSkgeworCQllcnIgPSBQVFJfRVJSKHB0cik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZWR1Y2UgJiYgbGVuID49IFVOSEFTSEVEX09CU0NVUkVfU1RSSU5HX1NJWkUpIHsKKwkJY2hhciAqZW5kID0gZGF0YSArIGxlbiAtIFVOSEFTSEVEX09CU0NVUkVfU1RSSU5HX1NJWkU7CisJCSplbmQgPSAnXDAnOworCX0KKworCXN0cmxlbiA9IGxlbiAtIChwdHIgLSAoY2hhciAqKWRhdGEpOworCW1lbW1vdmUoZGF0YSwgcHRyLCBzdHJsZW4pOworCXB0ciA9IGRhdGE7CisKKwllcnIgPSBzdHJsZW47CisKKwlkcHJpbnRrKCIlczogZG5hbWU6ICclcycsIGxlbjogJXUsIG1heGxlbjogJXUsIG5hbWU6ICclcycsIHN0cmxlbjogJWQuXG4iLAorCQkJX19mdW5jX18sIGQtPmRfbmFtZS5uYW1lLCBkLT5kX25hbWUubGVuLCBsZW4sIHB0ciwgc3RybGVuKTsKKworb3V0OgorCWRwdXQoZCk7CisJbW50cHV0KHBhdGgubW50KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19wYXRoX2xlbmd0aChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKQoreworCXN0cnVjdCBkZW50cnkgKmQsICpyb290LCAqZmlyc3Q7CisJaW50IGxlbiA9IDE7IC8qIFJvb3Qgc2xhc2ggKi8KKworCWZpcnN0ID0gZCA9IGRfZmluZF9hbGlhcygmcGktPnZmc19pbm9kZSk7CisJaWYgKCFkKSB7CisJCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIG1vZGU6ICVvLlxuIiwgX19mdW5jX18sIHBpLT5pbm8sIHBpLT52ZnNfaW5vZGUuaV9tb2RlKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJcm9vdCA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QuZGVudHJ5KTsKKwlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisKKwlpZiAoIUlTX1JPT1QoZCkgJiYgZF91bmhhc2hlZChkKSkKKwkJbGVuICs9IFVOSEFTSEVEX09CU0NVUkVfU1RSSU5HX1NJWkU7IC8qIE9ic2N1cmUgIiAoZGVsZXRlZCkiIHN0cmluZyAqLworCisJd2hpbGUgKGQgJiYgZCAhPSByb290ICYmICFJU19ST09UKGQpKSB7CisJCWxlbiArPSBkLT5kX25hbWUubGVuICsgMTsgLyogUGx1cyBzbGFzaCAqLworCQlkID0gZC0+ZF9wYXJlbnQ7CisJfQorCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisKKwlkcHV0KHJvb3QpOworCWRwdXQoZmlyc3QpOworCisJcmV0dXJuIGxlbiArIDE7IC8qIEluY2x1ZGluZyB6ZXJvLWJ5dGUgKi8KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy90cmFucy5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3RyYW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNTk0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy90cmFucy5jCkBAIC0wLDAgKzEsNzE1IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpuZXRmc190cmFuc19kc3Q7CitzdGF0aWMgbWVtcG9vbF90ICpuZXRmc190cmFuc19kc3RfcG9vbDsKKworc3RhdGljIHZvaWQgbmV0ZnNfdHJhbnNfaW5pdF9zdGF0aWMoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBpbnQgbnVtLCBpbnQgc2l6ZSkKK3sKKwl0LT5wYWdlX251bSA9IG51bTsKKwl0LT50b3RhbF9zaXplID0gc2l6ZTsKKwlhdG9taWNfc2V0KCZ0LT5yZWZjbnQsIDEpOworCisJc3Bpbl9sb2NrX2luaXQoJnQtPmRzdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdC0+ZHN0X2xpc3QpOworfQorCitzdGF0aWMgaW50IG5ldGZzX3RyYW5zX3NlbmRfcGFnZXMoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBpLCBhdHRhY2hlZF9wYWdlcyA9IHQtPmF0dGFjaGVkX3BhZ2VzLCBjaTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gKHQtPmVuZyk/dC0+ZW5nLT5wYWdlczp0LT5wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqcDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnLm1zZ19mbGFncyA9IE1TR19XQUlUQUxMIHwgTVNHX01PUkU7CisKKwljaSA9IDA7CisJZm9yIChpPTA7IGk8dC0+cGFnZV9udW07ICsraSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW2NpXTsKKwkJc3RydWN0IG5ldGZzX2NtZCBjbWQ7CisJCXN0cnVjdCBpb3ZlYyBpbzsKKworCQlwID0gdC0+cGFnZXNbaV07CisKKwkJaWYgKCFwKQorCQkJY29udGludWU7CisKKwkJc2l6ZSA9IHBhZ2VfcHJpdmF0ZShwKTsKKworCQlpby5pb3ZfYmFzZSA9ICZjbWQ7CisJCWlvLmlvdl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCk7CisKKwkJY21kLmNtZCA9IE5FVEZTX1dSSVRFX1BBR0U7CisJCWNtZC5leHQgPSAwOworCQljbWQuaWQgPSAwOworCQljbWQuc2l6ZSA9IHNpemU7CisJCWNtZC5zdGFydCA9IHAtPmluZGV4OworCQljbWQuc3RhcnQgPDw9IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCWNtZC5jc2l6ZSA9IDA7CisJCWNtZC5jcGFkID0gMDsKKwkJY21kLml2ID0gcG9obWVsZnNfZ2VuX2l2KHQpOworCisJCW5ldGZzX2NvbnZlcnRfY21kKCZjbWQpOworCisJCW1zZy5tc2dfaW92ID0gJmlvOworCQltc2cubXNnX2lvdmxlbiA9IDE7CisJCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTCB8IE1TR19NT1JFOworCisJCWVyciA9IGtlcm5lbF9zZW5kbXNnKHN0LT5zb2NrZXQsICZtc2csIChzdHJ1Y3Qga3ZlYyAqKW1zZy5tc2dfaW92LCAxLCBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkpOworCQlpZiAoZXJyIDw9IDApIHsKKwkJCXByaW50aygiJXM6ICVkLyVkIGZhaWxlZCB0byBzZW5kIHRyYW5zYWN0aW9uIGhlYWRlcjogdDogJXAsIGdlbjogJXUsIGVycjogJWQuXG4iLAorCQkJCQlfX2Z1bmNfXywgaSwgdC0+cGFnZV9udW0sIHQsIHQtPmdlbiwgZXJyKTsKKwkJCWlmIChlcnIgPT0gMCkKKwkJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTHwoYXR0YWNoZWRfcGFnZXMgPT0gMSk/MDpNU0dfTU9SRTsKKworCQllcnIgPSBrZXJuZWxfc2VuZHBhZ2Uoc3QtPnNvY2tldCwgcGFnZSwgMCwgc2l6ZSwgbXNnLm1zZ19mbGFncyk7CisJCWlmIChlcnIgPD0gMCkgeworCQkJcHJpbnRrKCIlczogJWQvJWQgZmFpbGVkIHRvIHNlbmQgdHJhbnNhY3Rpb24gcGFnZTogdDogJXAsIGdlbjogJXUsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQkJX19mdW5jX18sIGksIHQtPnBhZ2VfbnVtLCB0LCB0LT5nZW4sIHNpemUsIGVycik7CisJCQlpZiAoZXJyID09IDApCisJCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlkcHJpbnRrKCIlczogJWQvJWQgc2VudCB0OiAlcCwgZ2VuOiAldSwgcGFnZTogJXAvJXAsIHNpemU6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCBpLCB0LT5wYWdlX251bSwgdCwgdC0+Z2VuLCBwYWdlLCBwLCBzaXplKTsKKworCQllcnIgPSAwOworCQlhdHRhY2hlZF9wYWdlcy0tOworCQlpZiAoIWF0dGFjaGVkX3BhZ2VzKQorCQkJYnJlYWs7CisJCWNpKys7CisKKwkJY29udGludWU7CisKK2Vycl9vdXQ6CisJCXByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHQsIHQtPmdlbiwgZXJyKTsKKwkJbmV0ZnNfc3RhdGVfZXhpdChzdCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZXRmc190cmFuc19zZW5kKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc2doZHIgbXNnOworCisJQlVHX09OKCF0LT5pb3ZlYy5pb3ZfbGVuKTsKKwlCVUdfT04odC0+aW92ZWMuaW92X2xlbiA+IDEwMjQqMTAyNCoxMDI0KTsKKworCW5ldGZzX3N0YXRlX2xvY2tfc2VuZChzdCk7CisJaWYgKCFzdC0+c29ja2V0KSB7CisJCWVyciA9IG5ldGZzX3N0YXRlX2luaXQoc3QpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3VubG9ja19yZXR1cm47CisJfQorCisJbXNnLm1zZ19pb3YgPSAmdC0+aW92ZWM7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnLm1zZ19mbGFncyA9IE1TR19XQUlUQUxMOworCisJaWYgKHQtPmF0dGFjaGVkX3BhZ2VzKQorCQltc2cubXNnX2ZsYWdzIHw9IE1TR19NT1JFOworCisJZXJyID0ga2VybmVsX3NlbmRtc2coc3QtPnNvY2tldCwgJm1zZywgKHN0cnVjdCBrdmVjICopbXNnLm1zZ19pb3YsIDEsIHQtPmlvdmVjLmlvdl9sZW4pOworCWlmIChlcnIgPD0gMCkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gc2VuZCBjb250aWcgdHJhbnNhY3Rpb246IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAlenUsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHQtPmlvdmVjLmlvdl9sZW4sIGVycik7CisJCWlmIChlcnIgPT0gMCkKKwkJCWVyciA9IC1FQ09OTlJFU0VUOworCQlnb3RvIGVycl9vdXRfdW5sb2NrX3JldHVybjsKKwl9CisKKwlkcHJpbnRrKCIlczogc2VudCAlcyB0cmFuc2FjdGlvbjogdDogJXAsIGdlbjogJXUsIHNpemU6ICV6dSwgcGFnZV9udW06ICV1LlxuIiwKKwkJCV9fZnVuY19fLCAodC0+cGFnZV9udW0pPyJwYXJ0aWFsIjoiZnVsbCIsCisJCQl0LCB0LT5nZW4sIHQtPmlvdmVjLmlvdl9sZW4sIHQtPnBhZ2VfbnVtKTsKKworCWVyciA9IDA7CisJaWYgKHQtPmF0dGFjaGVkX3BhZ2VzKQorCQllcnIgPSBuZXRmc190cmFuc19zZW5kX3BhZ2VzKHQsIHN0KTsKKworZXJyX291dF91bmxvY2tfcmV0dXJuOgorCisJaWYgKHN0LT5uZWVkX3Jlc2V0KSB7CisJCW5ldGZzX3N0YXRlX2V4aXQoc3QpOworCX0KKwluZXRmc19zdGF0ZV91bmxvY2tfc2VuZChzdCk7CisKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIGVycjogJWQuXG4iLAorCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlcnIpOworCisJdC0+cmVzdWx0ID0gZXJyOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGZzX3RyYW5zX2NtcCh1bnNpZ25lZCBpbnQgZ2VuLCB1bnNpZ25lZCBpbnQgbmV3KQoreworCWlmIChnZW4gPCBuZXcpCisJCXJldHVybiAxOworCWlmIChnZW4gPiBuZXcpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqbmV0ZnNfdHJhbnNfc2VhcmNoKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QsIHVuc2lnbmVkIGludCBnZW4pCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmc3QtPnRyYW5zX3Jvb3Q7CisJc3RydWN0IHJiX25vZGUgKm4gPSByb290LT5yYl9ub2RlOworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKnRtcCwgKnJldCA9IE5VTEw7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCWludCBjbXA7CisKKwl3aGlsZSAobikgeworCQl0bXAgPSByYl9lbnRyeShuLCBzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0LCBzdGF0ZV9lbnRyeSk7CisJCXQgPSB0bXAtPnRyYW5zOworCisJCWNtcCA9IG5ldGZzX3RyYW5zX2NtcCh0LT5nZW4sIGdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdG1wOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5ldGZzX3RyYW5zX2luc2VydChzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpuZHN0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCByYl9yb290ICpyb290ID0gJnN0LT50cmFuc19yb290OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZyb290LT5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpyZXQgPSBOVUxMLCAqdG1wOworCXN0cnVjdCBuZXRmc190cmFucyAqdCA9IE5VTEwsICpuZXcgPSBuZHN0LT50cmFuczsKKwlpbnQgY21wOworCisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCisJCXRtcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG5ldGZzX3RyYW5zX2RzdCwgc3RhdGVfZW50cnkpOworCQl0ID0gdG1wLT50cmFuczsKKworCQljbXAgPSBuZXRmc190cmFuc19jbXAodC0+Z2VuLCBuZXctPmdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdG1wOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0KSB7CisJCXByaW50aygiJXM6IGV4aXN0OiBvbGQ6IGdlbjogJXUsIGZsYWdzOiAleCwgc2VuZF90aW1lOiAlbHUsICIKKwkJCQkibmV3OiBnZW46ICV1LCBmbGFnczogJXgsIHNlbmRfdGltZTogJWx1LlxuIiwKKwkJCV9fZnVuY19fLCB0LT5nZW4sIHQtPmZsYWdzLCByZXQtPnNlbmRfdGltZSwKKwkJCW5ldy0+Z2VuLCBuZXctPmZsYWdzLCBuZHN0LT5zZW5kX3RpbWUpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlyYl9saW5rX25vZGUoJm5kc3QtPnN0YXRlX2VudHJ5LCBwYXJlbnQsIG4pOworCXJiX2luc2VydF9jb2xvcigmbmRzdC0+c3RhdGVfZW50cnksIHJvb3QpOworCW5kc3QtPnNlbmRfdGltZSA9IGppZmZpZXM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldGZzX3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWlmIChkc3QgJiYgZHN0LT5zdGF0ZV9lbnRyeS5yYl9wYXJlbnRfY29sb3IpIHsKKwkJcmJfZXJhc2UoJmRzdC0+c3RhdGVfZW50cnksICZzdC0+dHJhbnNfcm9vdCk7CisJCWRzdC0+c3RhdGVfZW50cnkucmJfcGFyZW50X2NvbG9yID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ldGZzX3RyYW5zX3JlbW92ZV9zdGF0ZShzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0ID0gZHN0LT5zdGF0ZTsKKworCW11dGV4X2xvY2soJnN0LT50cmFuc19sb2NrKTsKKwlyZXQgPSBuZXRmc190cmFuc19yZW1vdmVfbm9sb2NrKGRzdCwgc3QpOworCW11dGV4X3VubG9jaygmc3QtPnRyYW5zX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENyZWF0ZSBuZXcgZGVzdGluYXRpb24gZm9yIGdpdmVuIHRyYW5zYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBuZXR3b3JrIHN0YXRlLgorICogVHJhbnNhY3Rpb24ncyByZWZlcmVuY2UgY291bnRlciBpcyBidW1wZWQgYW5kIHdpbGwgYmUgZHJvcHBlZCB3aGVuIGVpdGhlcgorICogcmVwbHkgaXMgcmVjZWl2ZWQgb3Igd2hlbiBhc3luYyB0aW1lb3V0IGRldGVjdGlvbiB0YXNrIHdpbGwgZmFpbCByZXNlbmRpbmcKKyAqIGFuZCBkcm9wIHRyYW5zYWN0aW9uLgorICovCitzdGF0aWMgaW50IG5ldGZzX3RyYW5zX3B1c2hfZHN0KHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3Q7CisJaW50IGVycjsKKworCWRzdCA9IG1lbXBvb2xfYWxsb2MobmV0ZnNfdHJhbnNfZHN0X3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghZHN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzdC0+cmV0cmllcyA9IDA7CisJZHN0LT5zZW5kX3RpbWUgPSAwOworCWRzdC0+c3RhdGUgPSBzdDsKKwlkc3QtPnRyYW5zID0gdDsKKwluZXRmc190cmFuc19nZXQodCk7CisKKwltdXRleF9sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisJZXJyID0gbmV0ZnNfdHJhbnNfaW5zZXJ0KGRzdCwgc3QpOworCW11dGV4X3VubG9jaygmc3QtPnRyYW5zX2xvY2spOworCisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlzcGluX2xvY2soJnQtPmRzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZkc3QtPnRyYW5zX2VudHJ5LCAmdC0+ZHN0X2xpc3QpOworCXNwaW5fdW5sb2NrKCZ0LT5kc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19wdXQodCk7CisJbWVtcG9vbF9mcmVlKGRzdCwgbmV0ZnNfdHJhbnNfZHN0X3Bvb2wpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGZzX3RyYW5zX2ZyZWVfZHN0KHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCkKK3sKKwluZXRmc190cmFuc19wdXQoZHN0LT50cmFucyk7CisJbWVtcG9vbF9mcmVlKGRzdCwgbmV0ZnNfdHJhbnNfZHN0X3Bvb2wpOworfQorCitzdGF0aWMgdm9pZCBuZXRmc190cmFuc19yZW1vdmVfZHN0KHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCkKK3sKKwlpZiAobmV0ZnNfdHJhbnNfcmVtb3ZlX3N0YXRlKGRzdCkpCisJCW5ldGZzX3RyYW5zX2ZyZWVfZHN0KGRzdCk7Cit9CisKKy8qCisgKiBEcm9wIGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIGVudHJ5IHdoZW4gd2Uga25vdyBpdC4KKyAqLwordm9pZCBuZXRmc190cmFuc19kcm9wX2RzdChzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0ID0gZHN0LT50cmFuczsKKworCXNwaW5fbG9jaygmdC0+ZHN0X2xvY2spOworCWxpc3RfZGVsX2luaXQoJmRzdC0+dHJhbnNfZW50cnkpOworCXNwaW5fdW5sb2NrKCZ0LT5kc3RfbG9jayk7CisKKwluZXRmc190cmFuc19yZW1vdmVfZHN0KGRzdCk7Cit9CisKKy8qCisgKiBEcm9wIGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIGVudHJ5IHdoZW4gd2Uga25vdyBpdCBhbmQgd2hlbiB3ZQorICogYWxyZWFkeSByZW1vdmVkIGRzdCBmcm9tIHN0YXRlIHRyZWUuCisgKi8KK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF9kc3Rfbm9zdGF0ZShzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0ID0gZHN0LT50cmFuczsKKworCXNwaW5fbG9jaygmdC0+ZHN0X2xvY2spOworCWxpc3RfZGVsX2luaXQoJmRzdC0+dHJhbnNfZW50cnkpOworCXNwaW5fdW5sb2NrKCZ0LT5kc3RfbG9jayk7CisKKwluZXRmc190cmFuc19mcmVlX2RzdChkc3QpOworfQorCisvKgorICogVGhpcyBkcm9wcyBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiBlbnRyeSBmcm9tIGFwcHJvcHJpYXRlIG5ldHdvcmsgc3RhdGUKKyAqIHRyZWUgYW5kIGRyb3BzIHJlbGF0ZWQgcmVmZXJlbmNlIGNvdW50ZXIuIEl0IGlzIHBvc3NpYmxlIHRoYXQgdHJhbnNhY3Rpb24KKyAqIHdpbGwgYmUgZnJlZWQgaGVyZSBpZiBpdHMgcmVmZXJlbmNlIGNvdW50ZXIgaGl0cyB6ZXJvLgorICogRGVzdGluYXRpb24gdHJhbnNhY3Rpb24gZW50cnkgd2lsbCBiZSBmcmVlZC4KKyAqLwordm9pZCBuZXRmc190cmFuc19kcm9wX3RyYW5zKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QsICp0bXAsICpyZXQgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZ0LT5kc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRzdCwgdG1wLCAmdC0+ZHN0X2xpc3QsIHRyYW5zX2VudHJ5KSB7CisJCWlmIChkc3QtPnN0YXRlID09IHN0KSB7CisJCQlyZXQgPSBkc3Q7CisJCQlsaXN0X2RlbCgmZHN0LT50cmFuc19lbnRyeSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmdC0+ZHN0X2xvY2spOworCisJaWYgKHJldCkKKwkJbmV0ZnNfdHJhbnNfcmVtb3ZlX2RzdChyZXQpOworfQorCisvKgorICogVGhpcyBkcm9wcyBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiBlbnRyeSBmcm9tIGFwcHJvcHJpYXRlIG5ldHdvcmsgc3RhdGUKKyAqIHRyZWUgYW5kIGRyb3BzIHJlbGF0ZWQgcmVmZXJlbmNlIGNvdW50ZXIuIEl0IGlzIHBvc3NpYmxlIHRoYXQgdHJhbnNhY3Rpb24KKyAqIHdpbGwgYmUgZnJlZWQgaGVyZSBpZiBpdHMgcmVmZXJlbmNlIGNvdW50ZXIgaGl0cyB6ZXJvLgorICogRGVzdGluYXRpb24gdHJhbnNhY3Rpb24gZW50cnkgd2lsbCBiZSBmcmVlZC4KKyAqLwordm9pZCBuZXRmc190cmFuc19kcm9wX2xhc3Qoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCwgKnRtcCwgKnJldDsKKworCXNwaW5fbG9jaygmdC0+ZHN0X2xvY2spOworCXJldCA9IGxpc3RfZW50cnkodC0+ZHN0X2xpc3QucHJldiwgc3RydWN0IG5ldGZzX3RyYW5zX2RzdCwgdHJhbnNfZW50cnkpOworCWlmIChyZXQtPnN0YXRlICE9IHN0KSB7CisJCXJldCA9IE5VTEw7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkc3QsIHRtcCwgJnQtPmRzdF9saXN0LCB0cmFuc19lbnRyeSkgeworCQkJaWYgKGRzdC0+c3RhdGUgPT0gc3QpIHsKKwkJCQlyZXQgPSBkc3Q7CisJCQkJbGlzdF9kZWxfaW5pdCgmZHN0LT50cmFuc19lbnRyeSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlsaXN0X2RlbCgmcmV0LT50cmFuc19lbnRyeSk7CisJfQorCXNwaW5fdW5sb2NrKCZ0LT5kc3RfbG9jayk7CisKKwlpZiAocmV0KQorCQluZXRmc190cmFuc19yZW1vdmVfZHN0KHJldCk7Cit9CisKK3N0YXRpYyBpbnQgbmV0ZnNfdHJhbnNfcHVzaChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaW50IGVycjsKKworCWVyciA9IG5ldGZzX3RyYW5zX3B1c2hfZHN0KHQsIHN0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbmV0ZnNfdHJhbnNfc2VuZCh0LCBzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlpZiAodC0+ZmxhZ3MgJiBORVRGU19UUkFOU19TSU5HTEVfRFNUKQorCQlwb2htZWxmc19zd2l0Y2hfYWN0aXZlKHN0LT5wc2IpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfZHJvcF9sYXN0KHQsIHN0KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZXRmc190cmFuc19maW5pc2hfc2VuZChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmM7CisJaW50IGVyciA9IC1FTk9ERVY7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdDsKKyNpZiAwCisJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAldSwgcGFnZV9udW06ICV1LCBhY3RpdmU6ICVwLlxuIiwKKwkJX19mdW5jX18sIHQsIHQtPmdlbiwgdC0+aW92ZWMuaW92X2xlbiwgdC0+cGFnZV9udW0sIHBzYi0+YWN0aXZlX3N0YXRlKTsKKyNlbmRpZgorCW11dGV4X2xvY2soJnBzYi0+c3RhdGVfbG9jayk7CisKKwlpZiAoKHQtPmZsYWdzICYgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCkgJiYgcHNiLT5hY3RpdmVfc3RhdGUpIHsKKwkJc3QgPSAmcHNiLT5hY3RpdmVfc3RhdGUtPnN0YXRlOworCisJCWVyciA9IC1FUElQRTsKKwkJaWYgKG5ldGZzX3N0YXRlX3BvbGwoc3QpICYgUE9MTE9VVCkgeworCQkJZXJyID0gbmV0ZnNfdHJhbnNfcHVzaF9kc3QodCwgc3QpOworCQkJaWYgKCFlcnIpIHsKKwkJCQllcnIgPSBuZXRmc190cmFuc19zZW5kKHQsIHN0KTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCW5ldGZzX3RyYW5zX2Ryb3BfbGFzdCh0LCBzdCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcG9obWVsZnNfc3dpdGNoX2FjdGl2ZShwc2IpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9CisJCX0KKwkJcG9obWVsZnNfc3dpdGNoX2FjdGl2ZShwc2IpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0ID0gJmMtPnN0YXRlOworCisJCWVyciA9IG5ldGZzX3RyYW5zX3B1c2godCwgc3QpOworCQlpZiAoIWVyciAmJiAodC0+ZmxhZ3MgJiBORVRGU19UUkFOU19TSU5HTEVfRFNUKSkKKwkJCWJyZWFrOworCX0KK291dDoKKwltdXRleF91bmxvY2soJnBzYi0+c3RhdGVfbG9jayk7CisjaWYgMAorCWRwcmludGsoIiVzOiBmdWxseSBzZW50IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAldSwgcGFnZV9udW06ICV1LCBlcnI6ICVkLlxuIiwKKwkJX19mdW5jX18sIHQsIHQtPmdlbiwgdC0+aW92ZWMuaW92X2xlbiwgdC0+cGFnZV9udW0sIGVycik7CisjZW5kaWYKKwlpZiAoZXJyKQorCQl0LT5yZXN1bHQgPSBlcnI7CisJcmV0dXJuIGVycjsKK30KKworaW50IG5ldGZzX3RyYW5zX2ZpbmlzaChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWludCBlcnI7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gdC0+aW92ZWMuaW92X2Jhc2U7CisKKwl0LT5nZW4gPSBhdG9taWNfaW5jX3JldHVybigmcHNiLT50cmFuc19nZW4pOworCisJcG9obWVsZnNfZnRyYW5zX2NsZWFuKHQtPmdlbik7CisKKwljbWQtPnNpemUgPSB0LT5pb3ZlYy5pb3ZfbGVuIC0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpICsKKwkJdC0+YXR0YWNoZWRfc2l6ZSArIHQtPmF0dGFjaGVkX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpOworCWNtZC0+Y21kID0gTkVURlNfVFJBTlM7CisJY21kLT5zdGFydCA9IHQtPmdlbjsKKwljbWQtPmlkID0gMDsKKworCWlmIChwc2ItPnBlcmZvcm1fY3J5cHRvKSB7CisJCWNtZC0+ZXh0ID0gcHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKwkJY21kLT5jc2l6ZSA9IHBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemU7CisJfQorCisJZHByaW50aygiJXM6IHQ6ICV1LCBzaXplOiAldSwgaW92X2xlbjogJXp1LCBhdHRhY2hlZF9zaXplOiAldSwgYXR0YWNoZWRfcGFnZXM6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCB0LT5nZW4sIGNtZC0+c2l6ZSwgdC0+aW92ZWMuaW92X2xlbiwgdC0+YXR0YWNoZWRfc2l6ZSwgdC0+YXR0YWNoZWRfcGFnZXMpOworCWVyciA9IHBvaG1lbGZzX3RyYW5zX2NyeXB0KHQsIHBzYik7CisJaWYgKGVycikgeworCQl0LT5yZXN1bHQgPSBlcnI7CisJCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJCWRwcmludGsoIiVzOiB0cmFuczogJWxsdSwgY3J5cHRvX2F0dGFjaGVkX3NpemU6ICV1LCBhdHRhY2hlZF9zaXplOiAldSwgYXR0YWNoZWRfcGFnZXM6ICVkLCB0cmFuc19zaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgY21kLT5zdGFydCwgcHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwgdC0+YXR0YWNoZWRfc2l6ZSwgdC0+YXR0YWNoZWRfcGFnZXMsIGNtZC0+c2l6ZSwgZXJyKTsKKwl9CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZXNlbmQgdHJhbnNhY3Rpb24gdG8gcmVtb3RlIHNlcnZlcihzKS4KKyAqIElmIG5ldyBzZXJ2ZXJzIHdlcmUgYWRkZWQgaW50byBzdXBlcmJsb2NrLCB3ZSBjYW4gdHJ5IHRvIHNlbmQgZGF0YQorICogdG8gdGhlbSB0b28uCisgKgorICogSXQgaXMgY2FsbGVkIHVuZGVyIHN1cGVyYmxvY2sncyBzdGF0ZV9sb2NrLCBzbyB3ZSBjYW4gc2FmZWx5CisgKiBkZXJlZmVyZW5jZSBwc2ItPnN0YXRlX2xpc3QuIEFsc28sIHRyYW5zYWN0aW9uJ3MgcmVmZXJlbmNlIGNvdW50ZXIgaXMKKyAqIGJ1bXBlZCwgc28gaXQgY2FuIG5vdCBnbyBhd2F5IHVuZGVyIHVzLCB0aHVzIHdlIGNhbiBzYWZlbHkgYWNjZXNzIGFsbAorICogaXRzIG1lbWJlcnMuIFN0YXRlIGlzIGxvY2tlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0cmFuc2FjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYXQKKyAqIGxlYXN0IG9uZSBkZXN0aW5hdGlvbiB0YXJnZXQuCisgKi8KK2ludCBuZXRmc190cmFuc19yZXNlbmQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3Q7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdDsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjOworCWludCBlcnIsIGV4aXN0LCBlcnJvciA9IC1FTk9ERVY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdCA9ICZjLT5zdGF0ZTsKKworCQlleGlzdCA9IDA7CisJCXNwaW5fbG9jaygmdC0+ZHN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRzdCwgJnQtPmRzdF9saXN0LCB0cmFuc19lbnRyeSkgeworCQkJaWYgKHN0ID09IGRzdC0+c3RhdGUpIHsKKwkJCQlleGlzdCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJnQtPmRzdF9sb2NrKTsKKworCQlpZiAoZXhpc3QpIHsKKwkJCWlmICghKHQtPmZsYWdzICYgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCkgfHwKKwkJCQkJKGMtPmNvbmZpZ19lbnRyeS5uZXh0ID09ICZwc2ItPnN0YXRlX2xpc3QpKSB7CisJCQkJZHByaW50aygiJXM6IHJlc2VuZGluZyBzdDogJXAsIHQ6ICVwLCBnZW46ICV1LlxuIiwKKwkJCQkJCV9fZnVuY19fLCBzdCwgdCwgdC0+Z2VuKTsKKwkJCQllcnIgPSBuZXRmc190cmFuc19zZW5kKHQsIHN0KTsKKwkJCQlpZiAoIWVycikKKwkJCQkJZXJyb3IgPSAwOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlkcHJpbnRrKCIlczogcHVzaGluZy9yZXNlbmRpbmcgc3Q6ICVwLCB0OiAlcCwgZ2VuOiAldS5cbiIsCisJCQkJX19mdW5jX18sIHN0LCB0LCB0LT5nZW4pOworCQllcnIgPSBuZXRmc190cmFuc19wdXNoKHQsIHN0KTsKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCQllcnJvciA9IDA7CisJCWlmICh0LT5mbGFncyAmIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QpCisJCQlicmVhazsKKwl9CisKKwl0LT5yZXN1bHQgPSBlcnJvcjsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgKm5ldGZzX3RyYW5zX2FkZChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHVuc2lnbmVkIGludCBzaXplKQoreworCXN0cnVjdCBpb3ZlYyAqaW8gPSAmdC0+aW92ZWM7CisJdm9pZCAqcHRyOworCisJaWYgKHNpemUgPiB0LT50b3RhbF9zaXplKSB7CisJCXB0ciA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpby0+aW92X2xlbiArIHNpemUgPiB0LT50b3RhbF9zaXplKSB7CisJCWRwcmludGsoIiVzOiB0b28gYmlnIHNpemUgdDogJXAsIGdlbjogJXUsIGlvdl9sZW46ICV6dSwgc2l6ZTogJXUsIHRvdGFsOiAldS5cbiIsCisJCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgaW8tPmlvdl9sZW4sIHNpemUsIHQtPnRvdGFsX3NpemUpOworCQlwdHIgPSBFUlJfUFRSKC1FMkJJRyk7CisJCWdvdG8gb3V0OworCX0KKworCXB0ciA9IGlvLT5pb3ZfYmFzZSArIGlvLT5pb3ZfbGVuOworCWlvLT5pb3ZfbGVuICs9IHNpemU7CisKK291dDoKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIHNpemU6ICV1LCB0b3RhbDogJXp1LlxuIiwKKwkJX19mdW5jX18sIHQsIHQtPmdlbiwgc2l6ZSwgaW8tPmlvdl9sZW4pOworCXJldHVybiBwdHI7Cit9CisKK3ZvaWQgbmV0ZnNfdHJhbnNfZnJlZShzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJaWYgKHQtPmVuZykKKwkJcG9obWVsZnNfY3J5cHRvX3RocmVhZF9tYWtlX3JlYWR5KHQtPmVuZy0+dGhyZWFkKTsKKwlrZnJlZSh0KTsKK30KKworc3RydWN0IG5ldGZzX3RyYW5zICpuZXRmc190cmFuc19hbGxvYyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgdW5zaWduZWQgaW50IHNpemUsCisJCXVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG5yKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwl1bnNpZ25lZCBpbnQgbnVtLCBjb250LCBwYWQsIHNpemVfbm9fdHJhbnM7CisJdW5zaWduZWQgaW50IGNyeXB0b19hZGRlZCA9IDA7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCisJaWYgKHBzYi0+cGVyZm9ybV9jcnlwdG8pCisJCWNyeXB0b19hZGRlZCA9IHBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemU7CisKKwkvKgorCSAqIHxzaXplb2Yoc3RydWN0IG5ldGZzX3RyYW5zKXwKKwkgKiB8c2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpfCAtIHRyYW5zYWN0aW9uIGhlYWRlcgorCSAqIHxzaXplfCAtIGJ1ZmZlciB3aXRoIHJlcXVlc3RlZCBzaXplCisJICogfHBhZGRpbmd8IC0gY3J5cHRvIHBhZGRpbmcsIHplcm8gYnl0ZXMKKwkgKiB8bnIgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKil8IC0gYXJyYXkgb2YgcGFnZSBwb2ludGVycworCSAqCisJICogT3ZlcmFsbCBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gUEFHRV9TSVpFIGZvciBndWFyYW50ZWVkIGFsbG9jYXRpb24uCisJICovCisKKwljb250ID0gc2l6ZTsKKwlzaXplID0gQUxJR04oc2l6ZSwgcHNiLT5jcnlwdG9fYWxpZ25fc2l6ZSk7CisJcGFkID0gc2l6ZSAtIGNvbnQ7CisKKwlzaXplX25vX3RyYW5zID0gc2l6ZSArIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSAqIDIgKyBjcnlwdG9fYWRkZWQ7CisKKwljb250ID0gc2l6ZW9mKHN0cnVjdCBuZXRmc190cmFucykgKyBzaXplX25vX3RyYW5zOworCisJbnVtID0gKFBBR0VfU0laRSAtIGNvbnQpL3NpemVvZihzdHJ1Y3QgcGFnZSAqKTsKKworCWlmIChuciA+IG51bSkKKwkJbnIgPSBudW07CisKKwl0ID0ga3phbGxvYyhjb250ICsgbnIqc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfTk9JTyk7CisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXQtPmlvdmVjLmlvdl9iYXNlID0gKHZvaWQgKikodCArIDEpOworCXQtPnBhZ2VzID0gKHN0cnVjdCBwYWdlICoqKSh0LT5pb3ZlYy5pb3ZfYmFzZSArIHNpemVfbm9fdHJhbnMpOworCisJLyoKKwkgKiBSZXNlcnZpbmcgc3BhY2UgZm9yIHRyYW5zYWN0aW9uIGhlYWRlci4KKwkgKi8KKwl0LT5pb3ZlYy5pb3ZfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpICsgY3J5cHRvX2FkZGVkOworCisJbmV0ZnNfdHJhbnNfaW5pdF9zdGF0aWModCwgbnIsIHNpemVfbm9fdHJhbnMpOworCisJdC0+ZmxhZ3MgPSBmbGFnczsKKwl0LT5wc2IgPSBwc2I7CisKKwljbWQgPSAoc3RydWN0IG5ldGZzX2NtZCAqKXQtPmlvdmVjLmlvdl9iYXNlOworCisJY21kLT5zaXplID0gc2l6ZTsKKwljbWQtPmNwYWQgPSBwYWQ7CisJY21kLT5jc2l6ZSA9IGNyeXB0b19hZGRlZDsKKworCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXUsIHBhZGRpbmc6ICV1LCBhbGlnbl9zaXplOiAldSwgZmxhZ3M6ICV4LCAiCisJCQkicGFnZV9udW06ICV1LCBiYXNlOiAlcCwgcGFnZXM6ICVwLlxuIiwKKwkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHNpemUsIHBhZCwgcHNiLT5jcnlwdG9fYWxpZ25fc2l6ZSwgZmxhZ3MsIG5yLAorCQkJdC0+aW92ZWMuaW92X2Jhc2UsIHQtPnBhZ2VzKTsKKworCXJldHVybiB0OworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBuZXRmc190cmFuc19pbml0KHZvaWQpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwluZXRmc190cmFuc19kc3QgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibmV0ZnNfdHJhbnNfZHN0Iiwgc2l6ZW9mKHN0cnVjdCBuZXRmc190cmFuc19kc3QpLAorCQkJMCwgMCwgTlVMTCk7CisJaWYgKCFuZXRmc190cmFuc19kc3QpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbmV0ZnNfdHJhbnNfZHN0X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMjU2LCBuZXRmc190cmFuc19kc3QpOworCWlmICghbmV0ZnNfdHJhbnNfZHN0X3Bvb2wpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmV0ZnNfdHJhbnNfZHN0KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIG5ldGZzX3RyYW5zX2V4aXQodm9pZCkKK3sKKwltZW1wb29sX2Rlc3Ryb3kobmV0ZnNfdHJhbnNfZHN0X3Bvb2wpOworCWttZW1fY2FjaGVfZGVzdHJveShuZXRmc190cmFuc19kc3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JzcGl1c2IvcnNwaXVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3JzcGl1c2IvcnNwaXVzYi5jCmluZGV4IGNhMjgxZDYuLmVjYWZmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yc3BpdXNiL3JzcGl1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnNwaXVzYi9yc3BpdXNiLmMKQEAgLTc4MSw5ICs3ODEsOCBAQAogCQkJZGJnKCJFbmRwb2ludFslZF0tPk1heFBhY2tldFNpemUgPSAlZFxuIiwgaSwKIAkJCSAgICBlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQl9Ci0JCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQkgICAgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgewotCQkJaWYgKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZW5kcG9pbnQpKSB7CisJCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlbmRwb2ludCkpCiAJCQkJcGR4LT5oRVBbaV0gPQogCQkJCSAgICB1c2JfcmN2YnVsa3BpcGUocGR4LT51ZGV2LAogCQkJCQkJICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvMjg2MF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC8yODYwX21haW5fZGV2LmMKaW5kZXggMDhjYTgxZi4uZmY3ZjgzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC8yODYwX21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC8yODYwX21haW5fZGV2LmMKQEAgLTkwLDEyICs5MCwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IHJ0Mjg2MF9jbGVhbnVwX21vZHVsZSh2b2lkKTsKIHN0YXRpYyBpbnQgX19pbml0IHJ0Mjg2MF9pbml0X21vZHVsZSh2b2lkKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcnQyODYwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBzdGF0aWMgaW50IHJ0Mjg2MF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpOwogI2VuZGlmIC8vIENPTkZJR19QTSAvLwotI2VuZGlmCiAKIAogLy8KQEAgLTEyOCwyMiArMTI2LDE1IEBACiAgICAgbmFtZTogICAgICAgInJ0Mjg2MCIsCiAgICAgaWRfdGFibGU6ICAgcnQyODYwX3BjaV90YmwsCiAgICAgcHJvYmU6ICAgICAgcnQyODYwX2luaXRfb25lLAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSAweDIwNDEyCiAgICAgcmVtb3ZlOiAgICAgX19kZXZleGl0X3AocnQyODYwX3JlbW92ZV9vbmUpLAotI2Vsc2UKLSAgICByZW1vdmU6ICAgICBfX2RldmV4aXQocnQyODYwX3JlbW92ZV9vbmUpLAotI2VuZGlmCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjaWZkZWYgQ09ORklHX1BNCiAJc3VzcGVuZDoJcnQyODYwX3N1c3BlbmQsCiAJcmVzdW1lOgkJcnQyODYwX3Jlc3VtZSwKICNlbmRpZgotI2VuZGlmCiB9OwogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjaWZkZWYgQ09ORklHX1BNCiAKIFZPSUQgUlQyODYwUmVqZWN0UGVuZGluZ1BhY2tldHMoCkBAIC0yODQsMTYgKzI3NSwxMSBAQAogCXJldHVybiAwOwogfQogI2VuZGlmIC8vIENPTkZJR19QTSAvLwotI2VuZGlmCiAKIAogc3RhdGljIElOVCBfX2luaXQgcnQyODYwX2luaXRfbW9kdWxlKFZPSUQpCiB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZydDI4NjBfZHJpdmVyKTsKLSNlbHNlCi0gICAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcnQyODYwX2RyaXZlcik7Ci0jZW5kaWYKIH0KIAogCkBAIC0zNzQsMTEgKzM2MCw3IEBACiAJfQogCiAJLy8gRnJlZSBwcmUtYWxsb2NhdGVkIG5ldF9kZXZpY2UgbWVtb3J5Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCWZyZWVfbmV0ZGV2KG5ldF9kZXYpOwotI2Vsc2UKLQlrZnJlZShuZXRfZGV2KTsKLSNlbmRpZgogfQogCiAvLwpAQCAtNzU4LDE2ICs3NDAsMTMgQEAKIGludCBwcmludF9pbnRfY291bnQ7CiAKIElSUV9IQU5ETEVfVFlQRQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDE5KSkKIHJ0Mjg2MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotI2Vsc2UKLXJ0Mjg2MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pbnN0YW5jZTsKIAlQUlRNUF9BREFQVEVSIHBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CiAJSU5UX1NPVVJDRV9DU1JfU1RSVUMJSW50U291cmNlOwogCVBPU19DT09LSUUgcE9iajsKKwlCT09MRUFOCWJPbGRWYWx1ZTsKIAogCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CiAKQEAgLTgwMCwyMCArNzc5LDE5IEBACiAJLy8gUlQyNjYxID0+IHdoZW4gQVNJQyBpcyBzbGVlcGluZywgTUFDIHJlZ2lzdGVyIGNhbm5vdCBiZSByZWFkIGFuZCB3cml0dGVuLgogCS8vIFJUMjg2MCA9PiB3aGVuIEFTSUMgaXMgc2xlZXBpbmcsIE1BQyByZWdpc3RlciBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbi4KIAorCWJPbGRWYWx1ZSA9IHBBZC0+YlBDSWNsa09mZjsKKwlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKIAl7CiAJCVJUTVBfSU9fUkVBRDMyKHBBZCwgSU5UX1NPVVJDRV9DU1IsICZJbnRTb3VyY2Uud29yZCk7CiAJCVJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9TT1VSQ0VfQ1NSLCBJbnRTb3VyY2Uud29yZCk7IC8vIHdyaXRlIDEgdG8gY2xlYXIKIAl9CisJcEFkLT5iUENJY2xrT2ZmID0gYk9sZFZhbHVlOwogCiAJLy8gRG8gbm90aGluZyBpZiBSZXNldCBpbiBwcm9ncmVzcwogCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CiAJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkKIAl7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgICAgICByZXR1cm4gIElSUV9IQU5ETEVEOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKIAkvLwpAQCAtODIyLDggKzgwMCw2IEBACiAJLy8gVGhlIHByaW9yaXR5IGNhbiBiZSBhZGp1c3QgYnkgYWx0ZXJpbmcgcHJvY2Vzc2luZyBpZiBzdGF0ZW1lbnQKIAkvLwogCi0gICAgcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7Ci0KIAkvLyBJZiByZXF1aXJlZCBzcGlubG9jaywgZWFjaCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGhhcyB0byBhY3F1aXJlCiAJLy8gYW5kIHJlbGVhc2UgaXRzZWxmLgogCS8vCkBAIC04MzIsMTEgKzgwOCw4IEBACiAJaWYgKEludFNvdXJjZS53b3JkID09IDB4ZmZmZmZmZmYpCiAJewogCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIHJldHVybiAgSVJRX0hBTkRMRUQ7Ci0jZWxzZQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKKwkJcHJpbnRrKCJzbm93cGluIC0gSW50U291cmNlLndvcmQgPT0gMHhmZmZmZmZmZlxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKIAlpZiAoSW50U291cmNlLndvcmQgJiBUeENvaGVyZW50KQpAQCAtOTcwLDEwICs5NDMsNyBAQAogCX0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICAgICByZXR1cm4gIElSUV9IQU5ETEVEOwotI2VuZGlmCi0KIH0KIAogLyoKQEAgLTEwMjYsMTEgKzk5Niw3IEBACiAgICAgVUxPTkcJY3NyX2FkZHI7CiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBwcmludF9uYW1lID0gcGNpX2RldiA/IHBjaV9uYW1lKHBjaV9kZXYpIDogInJ0Mjg2MCI7Ci0jZWxzZQotICAgIHByaW50X25hbWUgPSBwY2lfZGV2ID8gcGNpX2Rldi0+c2xvdF9uYW1lIDogInJ0Mjg2MCI7Ci0jZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisJcHJpbnRfbmFtZSA9IHBjaV9kZXYgPyBwY2lfbmFtZShwY2lfZGV2KSA6ICJydDI4NjAiOwogCiAJbmV0X2Rldi0+YmFzZV9hZGRyID0gMDsKIAluZXRfZGV2LT5pcnEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvTWFrZWZpbGUKaW5kZXggNjE2MjIxMi4uYjk1NjM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL01ha2VmaWxlCkBAIC0yLDcgKzIsNiBAQAogCiAjIFRPRE86IGFsbCBvZiB0aGVzZSBzaG91bGQgYmUgcmVtb3ZlZAogRVhUUkFfQ0ZMQUdTICs9IC1ETElOVVggLURBR0dSRUdBVElPTl9TVVBQT1JUIC1EUElHR1lCQUNLX1NVUFBPUlQgLURXTU1fU1VQUE9SVAotRVhUUkFfQ0ZMQUdTICs9IC1EUlQyODYwCiBFWFRSQV9DRkxBR1MgKz0gLURDT05GSUdfU1RBX1NVUFBPUlQKIEVYVFJBX0NGTEFHUyArPSAtRERCRwogRVhUUkFfQ0ZMQUdTICs9IC1ERE9UMTFfTl9TVVBQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL1RPRE8KaW5kZXggMmY3MGIwZi4uNjE1OGRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvVE9ETwpAQCAtMSw2ICsxLDYgQEAKIEknbSBoZXNpdGFudCB0byBhZGQgYSBUT0RPIGZpbGUgaGVyZSwgYXMgdGhlIHdpcmVsZXNzIGRldmVsb3BlcnMgd291bGQKIHJlYWxseSBoYXZlIHBlb3BsZSBoZWxwIHRoZW0gb3V0IG9uIHRoZSAiY2xlYW4iIHJ0Mjg2MCBkcml2ZXIgdGhhdCBjYW4KLWJlIGZvdW5kIGF0IHRoZSBydDI4NjAuc2YubmV0IHNpdGUuCitiZSBmb3VuZCBhdCB0aGUgaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tLyBzaXRlLgogCiBCdXQsIGlmIHlvdSB3aXNoIHRvIGNsZWFuIHVwIHRoaXMgZHJpdmVyIGluc3RlYWQsIGhlcmUncyBhIHNob3J0IGxpc3Qgb2YKIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBnZXQgaXQgaW50byBhIG1vcmUgbWVyZ2FibGUgc2hhcGU6CkBAIC04LDcgKzgsNyBAQAogVE9ETzoKIAktIGNoZWNrcGF0Y2gucGwgY2xlYW4KIAktIHNwYXJzZSBjbGVhbgotCS0gcG9ydCB0byBpbi1rZXJuZWwgODAyMTEgc3RhY2sKKwktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrIGFuZCBjb21tb24gcnQyeDAwIGluZnJhc3RydWN0dXJlCiAJLSByZW1vdmUgcmVhZGluZyBmcm9tIC9ldGMvIGNvbmZpZyBmaWxlcwogCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jCmluZGV4IGI2N2I5ZWIuLmIzZjg4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYwpAQCAtMTA1LDkgKzEwNSw3IEBACiAJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CiAJTkRJU19TVEFUVVMgIAlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwogCVVMT05HCSAJCUZyZWVOdW07Ci0jaWZkZWYgUlQyODYwCiAJdW5zaWduZWQgbG9uZwlJcnFGbGFncyA9IDA7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUNIQVIJCQlJcnFTdGF0ZTsKIAlVQ0hBUgkJCXJ0bXBId0hkcltUWElORk9fU0laRSArIFRYV0lfU0laRV07IC8vUlRNUF9IV19IRFJfTEVOXTsKIApAQCAtMTE4LDEwICsxMTYsOSBAQAogCS8vIDI4NjBDIHVzZSBUeCBSaW5nCiAKIAlJcnFTdGF0ZSA9IHBBZC0+aXJxX2Rpc2FibGVkOwotI2lmZGVmIFJUMjg2MAorCiAJaWYgKChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkgJiYgKCFJcnFTdGF0ZSkpCiAJCVJUTVBfSVJRX0xPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCWRvCiAJewpAQCAtMTc1LDE3ICsxNzIsMTQgQEAKIAogCX0gd2hpbGUgKEZBTFNFKTsKIAotI2lmZGVmIFJUMjg2MAogCS8vIDI4NjBDIHVzZSBUeCBSaW5nCiAJaWYgKChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkgJiYgKCFJcnFTdGF0ZSkpCiAJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJcmV0dXJuIFN0YXR1czsKIH0KIAogCi0jaWZkZWYgUlQyODYwCiBORElTX1NUQVRVUyBNaW5pcG9ydE1NUmVxdWVzdFVubG9jaygKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglVQ0hBUgkJCVF1ZUlkeCwKQEAgLTI1Myw3ICsyNDcsNiBAQAogCiAJcmV0dXJuIFN0YXR1czsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAvKgpAQCAtMjkwLDE3ICsyODMsMTQgQEAKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQogCi0jaWZkZWYgUlQyODYwCiAJaWYgKCBwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCApCiAJCXJldHVybiBNbG1lSGFyZFRyYW5zbWl0VHhSaW5nKHBBZCxRdWVJZHgscFBhY2tldCk7CiAJZWxzZQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQlyZXR1cm4gTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKHBBZCxRdWVJZHgscFBhY2tldCk7CiAKIH0KIAogCi0jaWZkZWYgUlQyODYwCiBORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0VHhSaW5nKAogCUlOCVBSVE1QX0FEQVBURVIJcEFkLAogCUlOCVVDSEFSCVF1ZUlkeCwKQEAgLTM2Niw3ICszNTYsNyBAQAogCXsKIAkJLy8gb3V0Z29pbmcgZnJhbWUgYWx3YXlzIHdha2V1cCBQSFkgdG8gcHJldmVudCBmcmFtZSBsb3N0CiAJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQotCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7CisJCQlBc2ljRm9yY2VXYWtldXAocEFkLCBGUk9NX1RYKTsKIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAJcEZpcnN0VHhXSQk9KFBUWFdJX1NUUlVDKXBTcmNCdWZWQTsKQEAgLTUwOSw3ICs0OTksNiBAQAogCiAJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKApAQCAtNTQxLDcgKzUzMCw3IEBACiAJewogCQkvLyBvdXRnb2luZyBmcmFtZSBhbHdheXMgd2FrZXVwIFBIWSB0byBwcmV2ZW50IGZyYW1lIGxvc3QKIAkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJCUFzaWNGb3JjZVdha2V1cChwQWQsIEZST01fVFgpOwogCX0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIApAQCAtMTA3Niw3ICsxMDY1LDYgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotI2lmZGVmIFJUMjg2MAogCQkJRnJlZU51bWJlcltRdWVJZHhdID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOwogCiAjaWZkZWYgREJHX0RJQUdOT1NFCkBAIC0xMTAxLDcgKzEwODksNiBAQAogCQkJCVJUTVBGcmVlVFhEVXBvblR4RG1hRG9uZShwQWQsIFF1ZUlkeCk7CiAJCQkJRnJlZU51bWJlcltRdWVJZHhdID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOwogCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCQkvLyBwcm9iZSB0aGUgUXVldWUgSGVhZAogCQkJcFF1ZXVlID0gJnBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF07CkBAIC0xMTgwLDEyICsxMTY3LDEwIEBACiAJCQkJU3RhdHVzID0gU1RBSGFyZFRyYW5zbWl0KHBBZCwgcFR4QmxrLCBRdWVJZHgpOwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCi0jaWZkZWYgUlQyODYwCiAJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKIAkJCS8vIHN0YXRpYyByYXRlIGFsc28gbmVlZCBOSUNVcGRhdGVGaWZvU3RhQ291bnRlcnMoKSBmdW5jdGlvbi4KIAkJCS8vaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkpCiAJCQkJTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKHBBZCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCX0KIAogCQlSVDI4WFhfU1RPUF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBJcnFGbGFncyk7CkBAIC0xNzY0LDcgKzE3NDksNiBAQAogfQogCiAKLSNpZmRlZiBSVDI4NjAKIEJPT0xFQU4gIFJUTVBGcmVlVFhEVXBvblR4RG1hRG9uZSgKIAlJTiBQUlRNUF9BREFQVEVSCXBBZCwKIAlJTiBVQ0hBUgkJCVF1ZUlkeCkKQEAgLTIzMDksNyArMjI5Myw2IEBACiAJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiIAlSeFN3UmVhZElkeCBbJWRdPSIsIEFDMGZyZWVJZHgpKTsKIAlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCIJcGVuZGluZy1ORElTPSVsZFxuIiwgcEFkLT5SYWxpbmtDb3VudGVycy5QZW5kaW5nTmRpc1BhY2tldENvdW50KSk7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIC8qCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjM0LDkgKzI2MTcsNyBAQAogCQkJCQlwRW50cnktPkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CiAJCQkJCXBFbnRyeS0+V2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOwogCQkJCQlwRW50cnktPlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKLSNpZmRlZiBSVDI4NjAKIAkJCQkJQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkocEFkLCBwRW50cnktPmFwaWR4LCAoVUNIQVIpaSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCQkJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCQkJfQpAQCAtMjgyMyw5ICsyODA0LDcgQEAKIAogCWZvciAoaT0xOyBpPE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCiAJewotI2lmZGVmIFJUMjg2MAogCQlSVDI4WFhfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIGkpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID09IFRSVUUpCiAJICAgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKaW5kZXggNDE5ZTUwYy4uZmFlNzQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYwpAQCAtNjM0LDcgKzYzNCw3IEBACiAJfQogCiAgICAgLy8gT25jZSBnbyBpbnRvIHRoaXMgZnVuY3Rpb24sIGRpc2FibGUgdHggYmVjYXVzZSBkb24ndCB3YW50IHRvbyBtYW55IHBhY2tldHMgaW4gcXVldWUgdG8gcHJldmVudCBIVyBzdG9wcy4KLQlwQWQtPmJQQ0ljbGtPZmZEaXNhYmxlVHggPSBUUlVFOworCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpOwogCiAJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKIAl7CkBAIC02NTEsNyArNjUxLDcgQEAKIAkJCXsKIAkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUYlRUVGltZSA9IDB4JXggLCBnaXZlIHVwIHRoaXMgc2xlZXAuIFxuIiwgVGJUVFRpbWUpKTsKIAkgICAgICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLQkgICAgICAgICAgICBwQWQtPmJQQ0ljbGtPZmZEaXNhYmxlVHggPSBGQUxTRTsKKwkJCQlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCWVsc2UKQEAgLTY4OCwxOCArNjg4LDI1IEBACiAJaWYgKGkgPj0gNTApCiAJewogCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJETUEga2VlcHMgYnVzeS4gIHJldHVybiBvbiBSVDI4eHhQY2lBc2ljUmFkaW9PZmYgKClcbiIpKTsKLQkJcEFkLT5iUENJY2xrT2ZmRGlzYWJsZVR4ID0gRkFMU0U7CiAJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkRtYUNmZy53b3JkKTsKIAkJRG1hQ2ZnLmZpZWxkLkVuYWJsZVR4RE1BID0gMTsKIAkJUlRNUF9JT19XUklURTMyKHBBZCwgV1BETUFfR0xPX0NGRywgRG1hQ2ZnLndvcmQpOworCQlwQWQtPkNoZWNrRG1hQnVzeUNvdW50Kys7CiAJCXJldHVybjsKIAl9CisJZWxzZQorCXsKKwkJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCA9IDA7CisJfQogCiAgICAgUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpOwogCiAgICAgLy8gU2V0IHRvIDFSLgotICAgIHRlbXBCQlBfUjMgPSAocEFkLT5TdGFDZmcuQkJQUjMgJiAweEU3KTsKLQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCB0ZW1wQkJQX1IzKTsKKwlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+IDEpCisJeworCQl0ZW1wQkJQX1IzID0gKHBBZC0+U3RhQ2ZnLkJCUFIzICYgMHhFNyk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIHRlbXBCQlBfUjMpOworCX0KIAogCS8vIEluIFJhZGlvIE9mZiwgd2UgdHVybiBvZmYgUkYgY2xrLCBTbyBub3cgbmVlZCB0byBjYWxsIEFTSUNTd2l0Y2hDaGFubmVsIGFnYWluLgogCWlmIChJTkZSQV9PTihwQWQpICYmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQpAQCAtNzE0LDggKzcyMSwxNSBAQAogCQlBc2ljVHVybk9mZlJGQ2xrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CiAJfQogCi0gICAgLy8gV2hlbiBQQ0kgY2xvY2sgaXMgb2ZmLCBkb24ndCB3YW50IHRvIHNlcnZpY2UgaW50ZXJydXB0LgotCVJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9NQVNLX0NTUiwgQXV0b1dha2V1cEludCk7CisJaWYgKExldmVsICE9IFJUTVBfSEFMVCkKKwl7CisJCS8vIENoYW5nZSBJbnRlcnJ1cHQgYml0bWFzay4KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgSU5UX01BU0tfQ1NSLCBBdXRvV2FrZXVwSW50KTsKKwl9CisJZWxzZQorCXsKKwkJTklDRGlzYWJsZUludGVycnVwdChwQWQpOworCX0KIAogICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0NSWF9JRFgsIHBBZC0+UnhSaW5nLlJ4Q3B1SWR4KTsKIAkvLyBEaXNhYmxlIE1BQyBSeApAQCAtNzI2LDcgKzc0MCw4IEBACiAJLy8gIDIuIFNlbmQgU2xlZXAgY29tbWFuZAogCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX1NUQVRVUywgMHhmZmZmZmZmZik7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfQ0lELCAweGZmZmZmZmZmKTsKLQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIFBvd2VyU2FmZUNJRCwgMHhmZiwgMHgwMCk7ICAgLy8gc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBUaW1lb3V0IHVuaXQ6NDB1cy4KKwkvLyBzZW5kIFBPV0VSLVNBVkUgY29tbWFuZCB0byBNQ1UuIGhpZ2gtYnl0ZSA9IDEgc2F2ZSBwb3dlciBhcyBtdWNoIGFzIHBvc3NpYmxlLiBoaWdoIGJ5dGUgPSAwIHNhdmUgbGVzcyBwb3dlcgorCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgUG93ZXJTYWZlQ0lELCAweGZmLCAweDEpOwogCS8vICAyLTEuIFdhaXQgY29tbWFuZCBzdWNjZXNzCiAJLy8gU3RhdHVzID0gMSA6IHN1Y2Nlc3MsIFN0YXR1cyA9IDIsIGFscmVhZHkgc2xlZXAsIFN0YXR1cyA9IDMsIE1heWJlIE1BQyBpcyBidXN5IHNvIGNhbid0IGZpbmlzaCB0aGlzIHRhc2suCiAJYnJjID0gQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlclNhZmVDSUQpOwpAQCAtNzM0LDcgKzc0OSw3IEBACiAgICAgaWYgKGJyYyA9PSBGQUxTRSkKICAgICB7CiAgICAgICAgIC8vIHRyeSBhZ2FpbgotICAgIAlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIFBvd2VyU2FmZUNJRCwgMHhmZiwgMHgwMCk7ICAgLy8gc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBUaW1lb3V0IHVuaXQ6NDB1cy4KKyAgICAJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCBQb3dlclNhZmVDSUQsIDB4ZmYsIDB4MDEpOyAgIC8vIHNlbmQgUE9XRVItU0FWRSBjb21tYW5kIHRvIE1DVS4gVGltZW91dCB1bml0OjQwdXMuCiAgICAgCS8vUlRNUHVzZWNEZWxheSgyMDApOwogICAgIAlicmMgPSBBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyU2FmZUNJRCk7CiAgICAgfQpAQCAtNzU5LDcgKzc3NCw3IEBACiAJZG8KIAl7CiAJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkRtYUNmZy53b3JkKTsKLQkJaWYgKERtYUNmZy5maWVsZC5SeERNQUJ1c3kgPT0gMCkKKwkJaWYgKChEbWFDZmcuZmllbGQuUnhETUFCdXN5ID09IDApICYmIChEbWFDZmcuZmllbGQuVHhETUFCdXN5ID09IDApKQogCQkJYnJlYWs7CiAJCVJUTVB1c2VjRGVsYXkoMjApOwogCQlpKys7CkBAIC03NjcsMTMgKzc4MiwxMiBAQAogCiAJaWYgKGkgPj0gNTApCiAJeworCQlwQWQtPkNoZWNrRG1hQnVzeUNvdW50Kys7CiAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRNQSBSeCBrZWVwcyBidXN5LiAgb24gUlQyOHh4UGNpQXNpY1JhZGlvT2ZmICgpXG4iKSk7CiAJfQotCS8vIGRpc2FibGUgRE1BIFJ4LgorCWVsc2UKIAl7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkRtYUNmZy53b3JkKTsKLQkJRG1hQ2ZnLmZpZWxkLkVuYWJsZVJ4RE1BID0gMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgV1BETUFfR0xPX0NGRywgRG1hQ2ZnLndvcmQpOworCQlwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID0gMDsKIAl9CiAKIAlpZiAoTGV2ZWwgPT0gRE9UMTFQT1dFUlNBVkUpCkBAIC03OTksNyArODEzLDcgQEAKIAlpZiAoTGV2ZWwgPT0gUlRNUF9IQUxUKQogCXsKIAkJaWYgKChicmMgPT0gVFJVRSkgJiYgKGkgPCA1MCkpCi0JCQlSVE1QUENJZUxpbmtDdHJsU2V0dGluZyhwQWQsIDEpOworCQkJUlRNUFBDSWVMaW5rQ3RybFNldHRpbmcocEFkLCAwKTsKIAl9CiAJLy8gIDQuIFNldCBQQ0kgY29uZmlndXJhdGlvbiBTcGFjZSBMaW5rIENvbXRyb2wgZmllbGRzLiAgT25seSBSYWRpbyBPZmYgbmVlZHMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uCiAJZWxzZQpAQCAtODA4LDcgKzgyMiw3IEBACiAJCQlSVE1QUENJZUxpbmtDdHJsU2V0dGluZyhwQWQsIDMpOwogCX0KIAotICAgIHBBZC0+YlBDSWNsa09mZkRpc2FibGVUeCA9IEZBTFNFOworCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCk7CiB9CiAKIApAQCAtODM1LDcgKzg0OSw4IEBACiAJewogCSAgICBwQWQtPk1sbWUuYlBzUG9sbFRpbWVyUnVubmluZyA9IEZBTFNFOwogCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Qc1BvbGxUaW1lciwJJkNhbmNlbGxlZCk7Ci0JCWlmICgoTGV2ZWwgPT0gR1VJUkFESU9fT0ZGKSB8fCAoTGV2ZWwgPT0gR1VJX0lETEVfUE9XRVJfU0FWRSkpCisJCWlmICgoTGV2ZWwgPT0gR1VJUkFESU9fT0ZGKSB8fCAoTGV2ZWwgPT0gR1VJX0lETEVfUE9XRVJfU0FWRSkKKwkJfHwgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpKQogCQl7CiAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVDI4eHhQY2lBc2ljUmFkaW9PbiAoKVxuIikpOwogCQkJLy8gMS4gU2V0IFBDSSBMaW5rIENvbnRyb2wgaW4gQ29uZmlndXJhdGlvbiBTcGFjZS4KQEAgLTg0NSwxNSArODYwLDE0IEBACiAJfQogCiAgICAgcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7Ci0KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIDB4M2E4MCk7CiAJLy8gMi4gU2VuZCB3YWtlIHVwIGNvbW1hbmQuCi0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMxLCBQb3dlcldha2VDSUQsIDB4MDAsIDB4MDApOworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLCAweDAyKTsKIAogCS8vIDItMS4gd2FpdCBjb21tYW5kIG9rLgogCWJydiA9IEFzaWNDaGVja0NvbW1hbk9rKHBBZCwgUG93ZXJXYWtlQ0lEKTsKICAgICBpZiAoYnJ2KQogICAgIHsKLSAgICAJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBJTlRfTUFTS19DU1IsIChERUxBWUlOVE1BU0t8UnhJTlQpKTsKICAgICAJTklDRW5hYmxlSW50ZXJydXB0KHBBZCk7CiAKICAgICAJLy8gMy4gRW5hYmxlIFR4IERNQS4KQEAgLTg5MywxMyArOTA3LDEwIEBACiAKIFZPSUQgUlQyOHh4UGNpU3RhQXNpY0ZvcmNlV2FrZXVwKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkLAotCUlOIEJPT0xFQU4gICAgICAgYkZyb21UeCkKKwlJTiBVQ0hBUiAgICAJIExldmVsKQogewogICAgIEFVVE9fV0FLRVVQX1NUUlVDCUF1dG9XYWtldXBDZmc7CiAKLSAgICBpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dBS0VVUF9OT1cpKQogICAgIHsKICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid2FraW5nIHVwIG5vdyFcbiIpKTsKQEAgLTkwNywzOCArOTE4LDQ4IEBACiAgICAgfQogCiAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dBS0VVUF9OT1cpOworCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKTsKIAogICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IFBDSWUgQWR2YW5jZSBQb3dlciBTYXZlCi0gICAgCWlmIChiRnJvbVR4ID09IFRSVUUpCisgICAgCWlmICgoKExldmVsID09IEZST01fVFgpICYmIChwQWQtPk1sbWUuYlBzUG9sbFRpbWVyUnVubmluZyA9PSBUUlVFKSkgfHwKKwkJCShMZXZlbCA9PSBSVE1QX0hBTFQpKQogICAgIAl7CiAgICAgICAgICAgICBwQWQtPk1sbWUuYlBzUG9sbFRpbWVyUnVubmluZyA9IEZBTFNFOwogICAgIAkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfV0FLRVVQKTsKLSAgICAJCVJUTVB1c2VjRGVsYXkoMzAwMCk7CisgICAgCQlSVE1QdXNlY0RlbGF5KDUwMDApOwogICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT09PUFzaWNGb3JjZVdha2V1cD09PWJGcm9tVHhcbiIpKTsKICAgICAJfQogCiAJCUF1dG9XYWtldXBDZmcud29yZCA9IDA7CiAJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKIAotICAgICAgICBpZiAoUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBET1QxMVBPV0VSU0FWRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluIFJhZGlvIE9mZiwgd2UgdHVybiBvZmYgUkYgY2xrLCBTbyBub3cgbmVlZCB0byBjYWxsIEFTSUNTd2l0Y2hDaGFubmVsIGFnYWluLgotICAgICAgICAJaWYgKElORlJBX09OKHBBZCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCi0gICAgICAgIAkJJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJLy8gTXVzdCB1c2luZyA0ME1Iei4KLSAgICAgICAgCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7Ci0gICAgICAgIAkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOwotICAgICAgICAJfQotICAgICAgICAJZWxzZQotICAgICAgICAJewotICAgICAgICAJCS8vIE11c3QgdXNpbmcgMjBNSHouCi0gICAgICAgIAkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7Ci0gICAgICAgIAkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KKwkJLy8gSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBIYWx0LiBBTFdBWVMgZm9yY2Ugd2FrZXVwISEhCisJCWlmIChMZXZlbCA9PSBSVE1QX0hBTFQpCisJCXsKKwkJCVJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgUlRNUF9IQUxUKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIERPVDExUE9XRVJTQVZFKSkKKwkJCXsKKwkJCQkvLyBJbiBSYWRpbyBPZmYsIHdlIHR1cm4gb2ZmIFJGIGNsaywgU28gbm93IG5lZWQgdG8gY2FsbCBBU0lDU3dpdGNoQ2hhbm5lbCBhZ2Fpbi4KKwkJCQlpZiAoSU5GUkFfT04ocEFkKSAmJiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCQkJeworCQkJCQkvLyBNdXN0IHVzaW5nIDQwTUh6LgorCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gTXVzdCB1c2luZyAyME1Iei4KKwkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQkJCX0KKwkJCX0KKwkJfQogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTEyMiw2ICsxMTQzLDcgQEAKICAgICB7CiAgICAgCU5JQ1Jlc2V0RnJvbUVycm9yKHBBZCk7CiAKKyAgICAJLyoKICAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKICAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JFKTsKICAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKQEAgLTExMjksNiArMTE1MSw3IEBACiAgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsKICAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX01HTVQpOwogICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOworCQkqLwogCiAgICAgCS8vIEVuYWJsZSBUeC9SeAogICAgIAlSVE1QRW5hYmxlUnhUeChwQWQpOwpAQCAtMTE2Miw2ICsxMTg1LDEyIEBACiAgICAgV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CiAJVUlOVDMyCWk7CiAKKwlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIi0tPk1sbWVSYWRpb09mZigpIHJldHVybiBvbiBiUmFkaW8gPT0gVFJVRTsgXG4iKSk7CisJCXJldHVybjsKKwl9CisKICAgICBpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCiAgICAgCXJldHVybjsKIApAQCAtMTE2OSwxMyArMTE5OCwxMiBAQAogCiAJLy8gU2V0IExFRAogCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT0ZGKTsKLQkvLyBTZXQgUmFkaW8gb2ZmIGZsYWcKLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKICAgICB7CiAgICAgCUJPT0xFQU4JCUNhbmNlbGxlZDsKKwogICAgIAlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKICAgICAJewogCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmQ2FuY2VsbGVkKTsKQEAgLTExODUsNiArMTIxMywxNSBAQAogCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogICAgICAgICB7CiAgICAgICAgICAgICBCT09MRUFOIENhbmNlbGxlZDsKKworCQkJLy8gQWx3YXlzIHJhZGlvIG9uIHNpbmNlIHRoZSBOSUMgbmVlZHMgdG8gc2V0IHRoZSBNQ1UgY29tbWFuZCAoTEVEX1JBRElPX09GRikuDQorCQkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiANCisJCQkgICAgIChJRExFX09OKHBBZCkpICYmIA0KKwkJCSAgICAgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikpKQ0KKwkJCXsNCisJCQkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBHVUlfSURMRV9QT1dFUl9TQVZFKTsNCisJCQl9CisKICAgICAgICAgICAgIHBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID0gRkFMU0U7CiAgICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Qc1BvbGxUaW1lciwJJkNhbmNlbGxlZCk7CiAJICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsCSZDYW5jZWxsZWQpOwpAQCAtMTE5Nyw5ICsxMjM0LDI2IEBACiAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgIC8vIENsZWFuIHVwIG9sZCBic3MgdGFibGUKICAgICAgICAgQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCisJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CSyk7CisgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7CisgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WSSk7CisgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WTyk7CisgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsKKyAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX01HTVQpOworICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOworCisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCisJCXsKKwkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlJhZGlvT25PZmZUaW1lciwgNTAwKTsKKwkJCXJldHVybjsKKwkJfQogICAgIH0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAorCS8vIFNldCBSYWRpbyBvZmYgZmxhZworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CisKIAkvLyBEaXNhYmxlIFR4L1J4IERNQQogCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsJICAgLy8gZGlzYWJsZSBETUEKIAlHbG9DZmcuZmllbGQuRW5hYmxlVHhETUEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKaW5kZXggZGQ5MmFjNi4uYzNlMTMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCkBAIC04MTQsNyArODE0LDYgQEAKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglQVUNIQVIJCQlhcmcpCiB7Ci0jaWZkZWYgUlQyODYwCiAJSU5UIGksIFF1ZUlkeD0wOwogCVBSVDI4WFhfUlhEX1NUUlVDIHBSeEQ7CiAgICAgUFRYRF9TVFJVQyBwVHhEOwpAQCAtODQ1LDcgKzg0NCw2IEBACiAJICAgIGhleF9kdW1wKCJSeCBEZXNjcmlwdG9yIiwgKGNoYXIgKilwUnhELCAxNik7CiAJCXByaW50aygicFJ4RC0+RERPTkUgPSAleFxuIiwgcFJ4RC0+RERPTkUpOwogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCXJldHVybiBUUlVFOwogfQpAQCAtMTgwMyw5ICsxODAxLDcgQEAKIAl9CiAKIAkvLyBGb3Iga2V5IGluZGV4IGFuZCBleHQgSVYgYml0LCBzbyBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbihvZmZzZXQrMykuCi0jaWZkZWYgUlQyODYwCiAJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQrMywgSVZFSVYpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5OiBXQ0lEICMlZCwgS2V5SW5kZXggIyVkLCBBbGc9JXNcbiIsV2NpZCwgS2V5SWR4LCBDaXBoZXJOYW1lW0NpcGhlckFsZ10pKTsKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIglXQ0lEQXR0cmkgPSAweCV4IFxuIiwgIFdDSURBdHRyaSkpOwpAQCAtMjgyNyw5ICsyODIzLDcgQEAKIAogCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKIAotI2lmZGVmIFJUMjg2MAogCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJewogCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDYW4gbm90IHN3aXRjaCBvcGVyYXRlIG1vZGUgb24gaW50ZXJmYWNlIHVwICEhIFxuIikpOwogCQlyZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYwppbmRleCA0MGU0MTA5Li5kMjllMGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCQl7CiAJCS8vIEJCUCBhbmQgUkYgYXJlIG5vdCBhY2Nlc3NpYmxlIGluIFBTIG1vZGUsIHdlIGhhcyB0byB3YWtlIHRoZW0gdXAgZmlyc3QKIAkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJCQlBc2ljRm9yY2VXYWtldXAocEFkLCBGUk9NX1RYKTsKIAogCQkJLy8gbGVhdmUgUFNNIGR1cmluZyBzY2FubmluZy4gb3RoZXJ3aXNlIHdlIG1heSBsb3N0IFByb2JlUnNwICYgQkVBQ09OCiAJCQlpZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCmluZGV4IDgxYzMzMmEuLjY5YmFmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKQEAgLTM5LDggKzM5LDEwIEBACiAvLyBXUEEgT1VJCiBVQ0hBUgkJT1VJX1dQQV9OT05FX0FLTVs0XQkJPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMH07CiBVQ0hBUiAgICAgICBPVUlfV1BBX1ZFUlNJT05bNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAxfTsKK1VDSEFSICAgICAgIE9VSV9XUEFfV0VQNDBbNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAxfTsKIFVDSEFSICAgICAgIE9VSV9XUEFfVEtJUFs0XSAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMn07CiBVQ0hBUiAgICAgICBPVUlfV1BBX0NDTVBbNF0gICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDR9OworVUNIQVIgICAgICAgT1VJX1dQQV9XRVAxMDRbNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDA1fTsKIFVDSEFSICAgICAgIE9VSV9XUEFfODAyMVhfQUtNWzRdCT0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDF9OwogVUNIQVIgICAgICAgT1VJX1dQQV9QU0tfQUtNWzRdICAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMn07CiAvLyBXUEEyIE9VSQpAQCAtNDksNiArNTEsNyBAQAogVUNIQVIgICAgICAgT1VJX1dQQTJfQ0NNUFs0XSAgICAgICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwNH07CiBVQ0hBUiAgICAgICBPVUlfV1BBMl84MDIxWF9BS01bNF0gICA9IHsweDAwLCAweDBGLCAweEFDLCAweDAxfTsKIFVDSEFSICAgICAgIE9VSV9XUEEyX1BTS19BS01bNF0gICAJPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwMn07CitVQ0hBUiAgICAgICBPVUlfV1BBMl9XRVAxMDRbNF0gICA9IHsweDAwLCAweDBGLCAweEFDLCAweDA1fTsKIC8vIE1TQSBPVUkKIFVDSEFSICAgCU9VSV9NU0FfODAyMVhfQUtNWzRdICAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDV9OwkJLy8gTm90IHlldCBmaW5hbCAtIElFRUUgODAyLjExcy1EMS4wNgogVUNIQVIgICAJT1VJX01TQV9QU0tfQUtNWzRdICAgCT0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDZ9OwkJLy8gTm90IHlldCBmaW5hbCAtIElFRUUgODAyLjExcy1EMS4wNgpAQCAtMzY3LDYgKzM3MCwyNCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpCisJCXsKKwkJCVVJTlQgR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5Hcm91cENpcGhlcjsKKwkJCXN3aXRjaChHcm91cENpcGhlcikKKwkJCXsKKwkJCQljYXNlIE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZDoKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1dFUDQwLCA0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkOgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQTJfV0VQMTA0LCA0KTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwogCQkvLyBzd2FwIGZvciBiaWctZW5kaWFuIHBsYXRmb3JtCiAJCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT52ZXJzaW9uKTsKIAkgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dWNvdW50KTsKQEAgLTQyNywxMSArNDQ4LDI4IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmCisJCQkocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgJiYKKwkJCShwQWQtPlN0YUNmZy5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkKKwkJeworCQkJVUlOVCBHcm91cENpcGhlciA9IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyOworCQkJc3dpdGNoKEdyb3VwQ2lwaGVyKQorCQkJeworCQkJCWNhc2UgTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkOgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9XRVA0MCwgNCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZDoKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfV0VQMTA0LCA0KTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwogCQkvLyBzd2FwIGZvciBiaWctZW5kaWFuIHBsYXRmb3JtCiAJCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT52ZXJzaW9uKTsKIAkgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dWNvdW50KTsKIAl9Ci0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYwppbmRleCAyMjk3NDcwLi5jMDBmOWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jCkBAIC01MjcsNyArNTI3LDYgQEAKIAogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCiAJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJCXsKIAkgICAgICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCkBAIC01MzcsNyArNTM2LDYgQEAKIAkgICAgCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihSYWRpb09uRXhlYyksIHBBZCwgRkFMU0UpOwogCSAgICAgICAgfQogCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKIAl9IHdoaWxlIChGQUxTRSk7CkBAIC03MTEsMTMgKzcwOSwxMSBAQAogCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsCQkmQ2FuY2VsbGVkKTsKIAkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsCQkmQ2FuY2VsbGVkKTsKIAkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLAkJJkNhbmNlbGxlZCk7Ci0jaWZkZWYgUlQyODYwCiAJICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAJICAgIHsKIAkgICAJICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLAkJJkNhbmNlbGxlZCk7CiAJCSAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsCQkmQ2FuY2VsbGVkKTsKIAkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjaWZkZWYgUU9TX0RMU19TVVBQT1JUCiAJCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCkBAIC04MDgsMjEgKzgwNCwzNCBAQAogCVVMT05HCQkJVHhUb3RhbENudDsKIAlQUlRNUF9BREFQVEVSCXBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CiAKKwkvL0Jhcm9uIDIwMDgvMDcvMTAKKwkvL3ByaW50aygiQmFyb25fVGVzdDpcdCVzIiwgUlRNUEdldFJhbGlua0VuY3J5TW9kZVN0cihwQWQtPlN0YUNmZy5XZXBTdGF0dXMpKTsKKwkvL0lmIHRoZSBTVEEgc2VjdXJpdHkgc2V0dGluZyBpcyBPUEVOIG9yIFdFUCwgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMC4KKwkvL0lmIHRoZSBTVEEgc2VjdXJpdHkgc2V0dGluZyBpcyBXUEFQU0sgb3IgV1BBMlBTSywgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMS4KKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXM8MikKKwl7CisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDA7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDE7CisJfQorCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKIAl7CiAJICAgIC8vIElmIEhhcmR3YXJlIGNvbnRyb2xsZWQgUmFkaW8gZW5hYmxlZCwgd2UgaGF2ZSB0byBjaGVjayBHUElPIHBpbjIgZXZlcnkgMiBzZWNvbmQuCiAJCS8vIE1vdmUgY29kZSB0byBoZXJlLCBiZWNhdXNlIGZvbGxvd2luZyBjb2RlIHdpbGwgcmV0dXJuIHdoZW4gcmFkaW8gaXMgb2ZmCi0JCWlmICgocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSAoTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgKiAyKSA9PSAwKSAmJiAocEFkLT5TdGFDZmcuYkhhcmR3YXJlUmFkaW8gPT0gVFJVRSkgJiYKKwkJaWYgKChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCAlIChNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIDIpID09IDApICYmCisJCQkocEFkLT5TdGFDZmcuYkhhcmR3YXJlUmFkaW8gPT0gVFJVRSkgJiYKKwkJCShSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpICYmCiAJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYKLQkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgotCQkJKHBBZC0+YlBDSWNsa09mZiA9PSBGQUxTRSkpCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkpCiAJCXsKIAkJCVVJTlQzMgkJCQlkYXRhID0gMDsKIAogCQkJLy8gUmVhZCBHUElPIHBpbjIgYXMgSGFyZHdhcmUgY29udHJvbGxlZCByYWRpbyBzdGF0ZQotCQkJUlRNUF9JT19SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmZGF0YSk7CisJCQlSVE1QX0lPX0ZPUkNFX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZkYXRhKTsKIAkJCWlmIChkYXRhICYgMHgwNCkKIAkJCXsKIAkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9IFRSVUU7CkBAIC04NDksNyArODU4LDYgQEAKIAkJCX0KIAkJfQogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgpAQCAtODYwLDYgKzg2OCw0NSBAQAogCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkpKQogCQlyZXR1cm47CiAKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKChwQWQtPlJhbGlua0NvdW50ZXJzLkxhc3RSZWNlaXZlZEJ5dGVDb3VudCA9PSBwQWQtPlJhbGlua0NvdW50ZXJzLlJlY2VpdmVkQnl0ZUNvdW50KSAmJiAocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpKQorCQl7CisJCQkvLyBJZiBSZWNlaXZlQnl0ZUNvdW50IGRvZXNuJ3QgY2hhbmdlLCAgaW5jcmVhc2UgU2FtZVJ4Qnl0ZUNvdW50IGJ5IDEuCisJCQlwQWQtPlNhbWVSeEJ5dGVDb3VudCsrOworCQl9CisJCWVsc2UKKwkJCXBBZC0+U2FtZVJ4Qnl0ZUNvdW50ID0gMDsKKworCQkvLyBJZiBhZnRlciBCQlAsIHN0aWxsIG5vdCB3b3JrLi4ubmVlZCB0byBjaGVjayB0byByZXNldCBQQkYmTUFDLgorCQlpZiAocEFkLT5TYW1lUnhCeXRlQ291bnQgPT0gNzAyKQorCQl7CisJCQlwQWQtPlNhbWVSeEJ5dGVDb3VudCA9IDA7CisJCQlBc2ljUmVzZXRQQkYocEFkKTsKKwkJCUFzaWNSZXNldE1BQyhwQWQpOworCQl9CisKKwkJLy8gSWYgU2FtZVJ4Qnl0ZUNvdW50IGtlZXBzIGhhcHBlbnMgZm9yIDIgc2Vjb25kIGluIGluZnJhIG1vZGUsIG9yIGZvciA2MCBzZWNvbmRzIGluIGlkbGUgbW9kZS4KKwkJaWYgKCgoSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+U2FtZVJ4Qnl0ZUNvdW50ID4gMjApKSB8fCAoKElETEVfT04ocEFkKSkgJiYgKHBBZC0+U2FtZVJ4Qnl0ZUNvdW50ID4gNjAwKSkpCisJCXsKKwkJCWlmICgocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpICYmIChwQWQtPlNhbWVSeEJ5dGVDb3VudCA8IDcwMCkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgU2FtZVJ4Qnl0ZUNvdW50ID0gJWx1ICEhISEhISEhISEhISEhISBcbiIsIHBBZC0+U2FtZVJ4Qnl0ZUNvdW50KSk7CisJCQkJcEFkLT5TYW1lUnhCeXRlQ291bnQgPSA3MDA7CisJCQkJQXNpY1Jlc2V0QkJQKHBBZCk7CisJCQl9CisJCX0KKworCQkvLyBVcGRhdGUgbGFzdFJlY2VpdmVCeXRlQ291bnQuCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuTGFzdFJlY2VpdmVkQnl0ZUNvdW50ID0gcEFkLT5SYWxpbmtDb3VudGVycy5SZWNlaXZlZEJ5dGVDb3VudDsKKworCQlpZiAoKHBBZC0+Q2hlY2tEbWFCdXN5Q291bnQgPiAzKSAmJiAoSURMRV9PTihwQWQpKSkKKwkJeworCQkJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCA9IDA7CisJCQlBc2ljUmVzZXRGcm9tRE1BQnVzeShwQWQpOworCQl9CisJfQorCiAJUlQyOFhYX01MTUVfUFJFX1NBTklUWV9DSEVDSyhwQWQpOwogCiAjaWZkZWYgUkFMSU5LX0FURQpAQCAtMTAyMiw5ICsxMDY5LDcgQEAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKIAkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKIAkJewotI2lmZGVmIFJUMjg2MAogCQkJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgJiYgKHBBZC0+YlBDSWNsa09mZiA9PSBGQUxTRSkpCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCQl7CiAJCQkJLy8gV2hlbiBBZGhvYyBiZWFjb24gaXMgZW5hYmxlZCBhbmQgUlRTL0NUUyBpcyBlbmFibGVkLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IGhhcmR3YXJlIE1BQyBGU00gd2lsbCBydW4gaW50byBhIGRlYWRsb2NrCiAJCQkJLy8gYW5kIHNlbmRpbmcgQ1RTLXRvLXNlbGYgb3ZlciBhbmQgb3Zlci4KQEAgLTEwODEsNiArMTEyNiwxOSBAQAogICAgIAkJcEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPSBGQUxTRTsKICAgICB9CiAKKwkvL0Jhcm9uIDIwMDgvMDcvMTAKKwkvL3ByaW50aygiQmFyb25fVGVzdDpcdCVzIiwgUlRNUEdldFJhbGlua0VuY3J5TW9kZVN0cihwQWQtPlN0YUNmZy5XZXBTdGF0dXMpKTsKKwkvL0lmIHRoZSBTVEEgc2VjdXJpdHkgc2V0dGluZyBpcyBPUEVOIG9yIFdFUCwgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMC4KKwkvL0lmIHRoZSBTVEEgc2VjdXJpdHkgc2V0dGluZyBpcyBXUEFQU0sgb3IgV1BBMlBTSywgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMS4KKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXM8MikKKwl7CisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDA7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDE7CisJfQorCiAgICAgaWYgKChwQWQtPlByZU1lZGlhU3RhdGUgIT0gcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUpICYmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkpCiAJewogCQlpZiAocEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCkBAIC0xMDkwLDYgKzExNDgsMTUgQEAKIAkJcEFkLT5QcmVNZWRpYVN0YXRlID0gcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGU7CiAJfQogCisJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiAoSURMRV9PTihwQWQpKSAmJgorICAgICAgICAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKSAmJgorCQkocEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9PSBTWU5DX0lETEUpICYmCisJCShwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkgJiYKKwkJKFJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkgJiYKKwkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKSkKKwl7CisJCVJUMjh4eFBjaUFzaWNSYWRpb09mZihwQWQsIEdVSV9JRExFX1BPV0VSX1NBVkUsIDApOworCX0KIAogCiAKQEAgLTI3ODEsNyArMjg0OCw3IEBACiAJaWYgKElORlJBX09OKHBBZCkgJiYKIAkJKFBvd2VyTW9kZSAhPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKSAmJgogCQkocEFkLT5TdGFDZmcuUHNtID09IFBXUl9BQ1RJVkUpICYmCi0JCShwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkpCisJCVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApKQogCXsKIAkJTmRpc0dldFN5c3RlbVVwVGltZSgmcEFkLT5NbG1lLkxhc3RTZW5kTlVMTHBzbVRpbWUpOwogCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnRTaW5jZUxhc3ROVUxMID0gMDsKQEAgLTQwNjUsNyArNDEzMiw5IEBACiAJCQkJCQkJY29udGludWU7CiAKIAkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCi0JCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKKwkJCQkJaWYgKChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikgJiYKKwkJCQkJCShwSW5Cc3MtPldQQS5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQpICYmCisJCQkJCQkocEluQnNzLT5XUEEuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZCkpCiAJCQkJCQljb250aW51ZTsKIAogCQkJCQkvLyBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCkBAIC00MDg0LDcgKzQxNTMsOSBAQAogCQkJCQkJCWNvbnRpbnVlOwogCiAJCQkJCS8vIGNoZWNrIGdyb3VwIGNpcGhlcgotCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwgcEluQnNzLT5XUEEyLkdyb3VwQ2lwaGVyKQorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKSAmJgorCQkJCQkJKHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQpICYmCisJCQkJCQkocEluQnNzLT5XUEEyLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQpKQogCQkJCQkJY29udGludWU7CiAKIAkJCQkJLy8gY2hlY2sgcGFpcndpc2UgY2lwaGVyLCBza2lwIGlmIG5vbmUgbWF0Y2hlZApAQCAtNDM3MSw4ICs0NDQyLDEwIEBACiAJCQkJc3dpdGNoICgqcFRtcCkKIAkJCQl7CiAJCQkJCWNhc2UgMToKLQkJCQkJY2FzZSA1OgkvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKLQkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQ7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA1OgorCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZDsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIDI6CiAJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwpAQCAtNDQ4OSw4ICs0NTYyLDEwIEBACiAJCQkJc3dpdGNoIChwQ2lwaGVyLT5UeXBlKQogCQkJCXsKIAkJCQkJY2FzZSAxOgotCQkJCQljYXNlIDU6CS8vIEFsdGhvdWdoIFdFUCBpcyBub3QgYWxsb3dlZCBpbiBXUEEgcmVsYXRlZCBhdXRoIG1vZGUsIHdlIHBhcnNlIGl0IGFueXdheQotCQkJCQkJcEJzcy0+V1BBMi5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNToKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgMjoKIAkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwpAQCAtNDk1MywxNiArNTAyOCwxMyBAQAogVk9JRAlNbG1lUmVzdGFydFN0YXRlTWFjaGluZSgKIAlJTglQUlRNUF9BREFQVEVSCXBBZCkKIHsKLSNpZmRlZiBSVDI4NjAKIAlNTE1FX1FVRVVFX0VMRU0JCSpFbGVtID0gTlVMTDsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKIAlCT09MRUFOCQkJCUNhbmNlbGxlZDsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lIFxuIikpOwogCi0jaWZkZWYgUlQyODYwCiAJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKIAlpZihwQWQtPk1sbWUuYlJ1bm5pbmcpCiAJewpAQCAtNDk5MCw3ICs1MDYyLDYgQEAKIAkJCURCR1BSSU5UX0VSUigoIk1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lOiBNbG1lUXVldWUgZW1wdHlcbiIpKTsKIAkJfQogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCkBAIC01MDM5LDEyICs1MTEwLDEwIEBACiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCi0jaWZkZWYgUlQyODYwCiAJLy8gUmVtb3ZlIHJ1bm5pbmcgc3RhdGUKIAlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwogCXBBZC0+TWxtZS5iUnVubmluZyA9IEZBTFNFOwogCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiB9CiAKIC8qISBcYnJpZWYJdGVzdCBpZiB0aGUgTUxNRSBRdWV1ZSBpcyBlbXB0eQpAQCAtNjE0OSw2ICs2MjE4LDEyIEBACiAJVUxPTkcJCVR4UHdyWzVdOwogCUNIQVIJCVZhbHVlOwogCisJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkKKwkJfHwgKHBBZC0+YlBDSWNsa09mZiA9PSBUUlVFKQorCQl8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpCisJCXx8IFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCXJldHVybjsKKwogCWlmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCiAJewogCQlpZiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPiAxNCkKQEAgLTY0OTMsMTAgKzY1NjgsMTAgQEAKICAqLwogVk9JRCBBc2ljRm9yY2VXYWtldXAoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCi0JSU4gQk9PTEVBTiAgICBiRnJvbVR4KQorCUlOIFVDSEFSICAgIAkgTGV2ZWwpCiB7CiAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IEFzaWNGb3JjZVdha2V1cCBcbiIpKTsKLSAgICBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIGJGcm9tVHgpOworICAgIFJUMjhYWF9TVEFfRk9SQ0VfV0FLRVVQKHBBZCwgTGV2ZWwpOwogfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogLyoKQEAgLTY3MTAsNyArNjc4NSw2IEBACiAJY3NyOS5maWVsZC5iVHNmVGlja2luZyA9IDA7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3I5LndvcmQpOwogCi0jaWZkZWYgUlQyODYwCiAJLy8gbW92ZSBCRUFDT04gVFhEIGFuZCBmcmFtZSBjb250ZW50IHRvIG9uLWNoaXAgbWVtb3J5CiAJcHRyID0gKFBVQ0hBUikmcEFkLT5CZWFjb25UeFdJOwogCWZvciAoaT0wOyBpPFRYV0lfU0laRTsgaSs9NCkgIC8vIDE2LWJ5dGUgVFhXSSBmaWVsZApAQCAtNjcyOCw3ICs2ODAyLDYgQEAKIAkJUlRNUF9JT19XUklURTMyKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgVFhXSV9TSVpFICsgaSwgbG9uZ3B0cik7CiAJCXB0ciArPTQ7CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJLy8gc3RhcnQgc2VuZGluZyBCRUFDT04KIAljc3I5LmZpZWxkLkJlYWNvbkludGVydmFsID0gcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDQ7IC8vIEFTSUMgcmVnaXN0ZXIgaW4gdW5pdHMgb2YgMS8xNiBUVQpAQCAtNzA5Nyw5ICs3MTcwLDcgQEAKIHsKIAlVTE9ORyBvZmZzZXQ7IC8vLCBjc3IwOwogCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7Ci0jaWZkZWYgUlQyODYwCiAJSU5UICAgaTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNBZGRTaGFyZWRLZXlFbnRyeSBCc3NJbmRleD0lZCwgS2V5SWR4PSVkXG4iLCBCc3NJbmRleCxLZXlJZHgpKTsKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTcxMjEsNyArNzE5Miw2IEBACiAJLy8KIAkvLyBmaWxsIGtleSBtYXRlcmlhbCAtIGtleSArIFRYIE1JQyArIFJYIE1JQwogCS8vCi0jaWZkZWYgUlQyODYwCiAJb2Zmc2V0ID0gU0hBUkVEX0tFWV9UQUJMRV9CQVNFICsgKDQqQnNzSW5kZXggKyBLZXlJZHgpKkhXX0tFWV9FTlRSWV9TSVpFOwogCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfU0hBUkVfS0VZOyBpKyspCiAJewpAQCAtNzE0NSw3ICs3MjE1LDYgQEAKIAkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcFJ4TWljW2ldKTsKIAkJfQogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAJLy8KQEAgLTczMjAsOSArNzM4OSw3IEBACiAJUFVDSEFSCQlwVHh0c2MgPSBwQ2lwaGVyS2V5LT5UeFRzYzsKIAlVQ0hBUgkJQ2lwaGVyQWxnID0gcENpcGhlcktleS0+Q2lwaGVyQWxnOwogCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7Ci0jaWZkZWYgUlQyODYwCiAJVUNIQVIJCWk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gQXNpY0FkZEtleUVudHJ5XG4iKSk7CiAJLy8KQEAgLTczMzcsNyArNzQwNCw2IEBACiAJLy8gMi4pIFNldCBLZXkgdG8gQXNpYwogCS8vCiAJLy9mb3IgKGkgPSAwOyBpIDwgS2V5TGVuOyBpKyspCi0jaWZkZWYgUlQyODYwCiAJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfUEVFUl9LRVk7IGkrKykKIAl7CiAJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcEtleVtpXSk7CkBAIC03MzYzLDcgKzc0MjksNiBAQAogCQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwUnhNaWNbaV0pOwogCQl9CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLwpAQCAtNzM3Miw3ICs3NDM3LDYgQEAKIAkvLwogCWlmIChiVHhLZXkpCiAJewotI2lmZGVmIFJUMjg2MAogCQlvZmZzZXQgPSBNQUNfSVZFSVZfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfSVZFSVZfRU5UUllfU0laRSk7CiAJCS8vCiAJCS8vIFdyaXRlIElWCkBAIC03Mzk1LDcgKzc0NTksNiBAQAogCQl7CiAJCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBUeHRzY1tpICsgMl0pOwogCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkJQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUocEFkLCBXQ0lELCBCc3NJbmRleCwgQ2lwaGVyQWxnLCBiVXNlUGFpcmV3aXNlS2V5VGFibGUpOwogCX0KQEAgLTc0NjEsMTIgKzc1MjQsMTAgQEAKIAogCS8vIEVLRVkKIAlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfS0VZX0VOVFJZX1NJWkUpOwotI2lmZGVmIFJUMjg2MAogCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfUEVFUl9LRVk7IGkrKykKIAl7CiAJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcEtleVtpXSk7CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfUEVFUl9LRVk7IGkrPTQpCiAJewogCQlVSU5UMzIgVmFsdWU7CkBAIC03NDc4LDIyICs3NTM5LDE4IEBACiAJLy8gIE1JQyBLRVkKIAlpZiAocFR4TWljKQogCXsKLSNpZmRlZiBSVDI4NjAKIAkJZm9yIChpPTA7IGk8ODsgaSsrKQogCQl7CiAJCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCtpLCBwVHhNaWNbaV0pOwogCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJfQogCW9mZnNldCArPSA4OwogCWlmIChwUnhNaWMpCiAJewotI2lmZGVmIFJUMjg2MAogCQlmb3IgKGk9MDsgaTw4OyBpKyspCiAJCXsKIAkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0K2ksIHBSeE1pY1tpXSk7CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAl9CiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGRQYWlyd2lzZUtleUVudHJ5OiBXQ0lEICMlZCBBbGc9JXNcbiIsV0NJRCwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7CkBAIC03NTQyLDExICs3NTk5LDkgQEAKIAlIT1NUX0NNRF9DU1JfU1RSVUMJSDJNQ21kOwogCUgyTV9NQUlMQk9YX1NUUlVDCUgyTU1haWxib3g7CiAJVUxPTkcJCQkJaSA9IDA7Ci0jaWZkZWYgUlQyODYwCiAjaWZkZWYgUkFMSU5LX0FURQogCXN0YXRpYyBVSU5UMzIgaiA9IDA7CiAjZW5kaWYgLy8gUkFMSU5LX0FURSAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCWRvCiAJewogCQlSVE1QX0lPX1JFQUQzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgJkgyTU1haWxib3gud29yZCk7CkBAIC03NTU4LDcgKzc2MTMsNiBAQAogCiAJaWYgKGkgPj0gMTAwKQogCXsKLSNpZmRlZiBSVDI4NjAKICNpZmRlZiBSQUxJTktfQVRFCiAJCWlmIChwQWQtPmF0ZS5iRldMb2FkaW5nID09IFRSVUUpCiAJCXsKQEAgLTc1ODMsMTQgKzc2MzcsMzMgQEAKIAkJfQogCQllbHNlCiAjZW5kaWYgLy8gUkFMSU5LX0FURSAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQl7CisJCQlVSU5UMzIgRGF0YTsKKworCQkJLy8gUmVzZXQgRE1BCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJkRhdGEpOworCQkJRGF0YSB8PSAweDI7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCisJCQkvLyBBZnRlciBSZXNldCBETUEsIERNQSBpbmRleCB3aWxsIGJlY29tZSBaZXJvLiBTbyBEcml2ZXIgbmVlZCB0byByZXNldCBhbGwgcmluZyBpbmRleHMgdG9vLgorCQkJLy8gUmVzZXQgRE1BL0NQVSByaW5nIGluZGV4CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkspOworCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JFKTsKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WSSk7CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVk8pOworCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0hDQ0EpOworCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX01HTVQpOworCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX1JYKTsKKworCQkJLy8gQ2xlYXIgUmVzZXQKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmRGF0YSk7CisJCQlEYXRhICY9IDB4ZmZmZmZmZmQ7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOwogCQlEQkdQUklOVF9FUlIoKCJIMk1fTUFJTEJPWCBzdGlsbCBob2xkIGJ5IE1DVS4gY29tbWFuZCBmYWlsXG4iKSk7CiAJCX0KLQkJcmV0dXJuIEZBTFNFOworCQkvL3JldHVybiBGQUxTRTsKIAl9CiAKLSNpZmRlZiBSVDI4NjAKICNpZmRlZiBSQUxJTktfQVRFCiAJZWxzZSBpZiAocEFkLT5hdGUuYkZXTG9hZGluZyA9PSBUUlVFKQogCXsKQEAgLTc2MDAsNyArNzY3Myw2IEBACiAJCWogPSAwOwogCX0KICNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlIMk1NYWlsYm94LmZpZWxkLk93bmVyCSAgPSAxOwkgICAvLyBwYXNzIG93bmVyc2hpcCB0byBNQ1UKIAlIMk1NYWlsYm94LmZpZWxkLkNtZFRva2VuID0gVG9rZW47CkBAIC03NjE5LDcgKzc2OTEsNiBAQAogCXJldHVybiBUUlVFOwogfQogCi0jaWZkZWYgUlQyODYwCiBCT09MRUFOIEFzaWNDaGVja0NvbW1hbk9rKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkLAogCUlOIFVDSEFSCQkgQ29tbWFuZCkKQEAgLTc2ODQsNyArNzc1NSw2IEBACiAKIAlyZXR1cm4gRkFMU0U7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIC8qCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04MDk2LDEwICs4MTY2LDggQEAKIAl9CiAJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOwogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAotI2lmZGVmIFJUMjg2MAogCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAgICAgCXBBZC0+U3RhQ2ZnLkJCUFIzID0gQkJQUjM7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQogCQkpCkBAIC04MjExLDkgKzgyNzksNyBAQAogCQkJQkJQUjMgfD0gKDB4MCk7CiAJCX0KIAkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOwotI2lmZGVmIFJUMjg2MAotICAgIHBBZC0+U3RhQ2ZnLkJCUFIzID0gQkJQUjM7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCisJCXBBZC0+U3RhQ2ZnLkJCUFIzID0gQkJQUjM7CiAJfQogCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCkBAIC04NDM5LDEwICs4NTA1LDcgQEAKIAkJJiYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQogCQkJKQogCQkmJiAhKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0jaWZkZWYgUlQyODYwCi0JCSYmIChwQWQtPmJQQ0ljbGtPZmYgPT0gRkFMU0UpCi0jZW5kaWYgLy8gUlQyODYwIC8vCi0JCSkKKwkJJiYgKHBBZC0+YlBDSWNsa09mZiA9PSBGQUxTRSkpCiAJewogCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAmT3JpZ1I2NlZhbHVlKTsKIAkJUjY2ID0gT3JpZ1I2NlZhbHVlOwpAQCAtODUxOCw2ICs4NTgxLDEwNiBAQAogCiAJfQogfQorCitWT0lEIEFzaWNSZXNldEZyb21ETUFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVJTlQzMgkJRGF0YTsKKwlCT09MRUFOCQliQ3RybCA9IEZBTFNFOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgQXNpY1Jlc2V0RnJvbURNQUJ1c3kgICEhISEhISEhISEhISEhISEhISEhISEhIFxuIikpOworCisJLy8gQmUgc3VyZSByZXN0b3JlIGxpbmsgY29udHJvbCB2YWx1ZSBzbyB3ZSBjYW4gd3JpdGUgcmVnaXN0ZXIuCisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCWlmIChSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljUmVzZXRGcm9tRE1BQnVzeT09PlxuIikpOworCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9IQUxUKTsKKwkJUlRNUHVzZWNEZWxheSg2MDAwKTsKKwkJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7CisJCWJDdHJsID0gVFJVRTsKKwl9CisJLy8gUmVzZXQgRE1BCisJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZEYXRhKTsKKwlEYXRhIHw9IDB4MjsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCisJLy8gQWZ0ZXIgUmVzZXQgRE1BLCBETUEgaW5kZXggd2lsbCBiZWNvbWUgWmVyby4gU28gRHJpdmVyIG5lZWQgdG8gcmVzZXQgYWxsIHJpbmcgaW5kZXhzIHRvby4KKwkvLyBSZXNldCBETUEvQ1BVIHJpbmcgaW5kZXgKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkspOworCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVk8pOworCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfTUdNVCk7CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX1JYKTsKKworCS8vIENsZWFyIFJlc2V0CisJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZEYXRhKTsKKwlEYXRhICY9IDB4ZmZmZmZmZmQ7CisJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKworCS8vIElmIGluIFJhZGlvIG9mZiwgc2hvdWxkIGNhbGwgUlRNUFBDSWVQb3dlckxpbmtDdHJsIGFnYWluLgorCWlmICgoYkN0cmwgPT0gVFJVRSkgJiYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBGQUxTRSkpCisJCVJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHBBZCwgMyk7CisKKwlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSAgQXNpY1Jlc2V0RnJvbURNQUJ1c3kgISEhISEhISEhISEhISEhISEhISEhISEgIFxuIikpOworfQorCitWT0lEIEFzaWNSZXNldEJCUCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+ICBBc2ljIEhhcmRSZXNldCBCQlAgICEhISEhISEhISEhISEhISEhISEhISEhIFxuIikpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDApOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgyKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4Yyk7CisKKwkvLyBBZnRlciBoYXJkLXJlc2V0IEJCUCwgaW5pdGlhbGl6ZSBhbGwgQkJQIHZhbHVlcy4KKwlOSUNSZXN0b3JlQkJQVmFsdWUocEFkKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tICBBc2ljIEhhcmRSZXNldCBCQlAgISEhISEhISEhISEhISEhISEhISEhISEgIFxuIikpOworfQorCitWT0lEIEFzaWNSZXNldE1BQygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORwkJRGF0YTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT4gIEFzaWNSZXNldE1BQyAgICEhISEgXG4iKSk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZEYXRhKTsKKwlEYXRhIHw9IDB4NDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCURhdGEgJj0gMHhmZmZmZmZmYjsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSAgQXNpY1Jlc2V0TUFDICAgISEhISBcbiIpKTsKK30KKworVk9JRCBBc2ljUmVzZXRQQkYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUxPTkcJCVZhbHVlMSwgVmFsdWUyOworCVVMT05HCQlEYXRhOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBUWFJYUV9QQ05ULCAmVmFsdWUxKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9EQkcsICZWYWx1ZTIpOworCisJVmFsdWUyICY9IDB4ZmY7CisJLy8gc3VtIHNob3VsZCBiZSBlcXVhbHMgdG8gMHhmZiwgd2hpY2ggaXMgdGhlIHRvdGFsIGJ1ZmZlciBzaXplLgorCWlmICgoVmFsdWUxICsgVmFsdWUyKSA8IDB4ZmYpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+ICBBc2ljIEhhcmRSZXNldCBQQkYgISEhISBcbiIpKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZEYXRhKTsKKwkJRGF0YSB8PSAweDg7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisJCURhdGEgJj0gMHhmZmZmZmZmNzsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tICBBc2ljIEhhcmRSZXNldCBQQkYgISEhISBcbiIpKTsKKwl9Cit9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKIFZPSUQgUlRNUFNldEFHQ0luaXRWYWx1ZSgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9pbml0LmMKaW5kZXggNTYzZjJjNS4uOGEwMGNlZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jCkBAIC0xNDksOSArMTQ5LDcgQEAKIAl7R0YyMF9QUk9UX0NGRywJCQkweDAxNzQ0MDA0fSwgICAgLy8gc2V0IDE5OjE4IC0tPiBTaG9ydCBOQVYgZm9yIE1JTU8gUFMKIAl7R0Y0MF9QUk9UX0NGRywJCQkweDAzRjQ0MDg0fSwKIAl7TU0yMF9QUk9UX0NGRywJCQkweDAxNzQ0MDA0fSwKLSNpZmRlZiBSVDI4NjAKIAl7TU00MF9QUk9UX0NGRywJCQkweDAzRjU0MDg0fSwKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAl7VFhPUF9DVFJMX0NGRywJCQkweDAwMDA1ODNmLCAvKjB4MDAwMDI0M2YqLyAvKjB4MDAwMDI0YmYqL30sCS8vRXh0ZW5zaW9uIGNoYW5uZWwgYmFja29mZi4KIAl7VFhfUlRTX0NGRywJCQkweDAwMDkyYjIwfSwKIAl7RVhQX0FDS19USU1FLAkJCTB4MDAyNDAwY2F9LAkvLyBkZWZhdWx0IHZhbHVlCkBAIC0xODgsOSArMTg2LDcgQEAKICNkZWZpbmUgRklSTVdBUkVJTUFHRVYxX0xFTkdUSAkweDEwMDAKICNkZWZpbmUgRklSTVdBUkVJTUFHRVYyX0xFTkdUSAkweDEwMDAKIAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OCTIKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAvKgpAQCAtMjQ4LDkgKzI0NCw3IEBACiAKIAkJLy8gSW5pdCBzcGluIGxvY2tzCiAJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0jaWZkZWYgUlQyODYwCiAJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlJ4UmluZ0xvY2spOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCWZvciAoaW5kZXggPTAgOyBpbmRleCA8IE5VTV9PRl9UWF9SSU5HOyBpbmRleCsrKQogCQl7CkBAIC0xNTU1LDEwICsxNTQ5LDcgQEAKIAkJcEFkLT5MZWRDbnRsLndvcmQgPSAweDAxOwogCQlwQWQtPkxlZDEgPSAweDU1NTU7CiAJCXBBZC0+TGVkMiA9IDB4MjIyMTsKLQotI2lmZGVmIFJUMjg2MAogCQlwQWQtPkxlZDMgPSAweEE5Rjg7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJfQogCiAJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUyLCAweGZmLCAoVUNIQVIpcEFkLT5MZWQxLCAoVUNIQVIpKHBBZC0+TGVkMSA+PiA4KSk7CkBAIC0xNTk0LDEyICsxNTg1LDEwIEBACiAJCWVsc2UKIAkJewogCQkJUlRNUFNldExFRChwQWQsIExFRF9SQURJT19PTik7Ci0jaWZkZWYgUlQyODYwCiAJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIDB4ZmYsIDB4ZmYsIDB4MDIpOwogCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMxLCBQb3dlcldha2VDSUQsIDB4MDAsIDB4MDApOwogCQkJLy8gMi0xLiB3YWl0IGNvbW1hbmQgb2suCiAJCQlBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyV2FrZUNJRCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCX0KIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCkBAIC0xNjc3LDEwICsxNjY2LDggQEAKIHsKIAlORElTX1NUQVRVUyAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAlXUERNQV9HTE9fQ0ZHX1NUUlVDCUdsb0NmZzsKLSNpZmRlZiBSVDI4NjAKIAlVSU5UMzIJCQlWYWx1ZTsKIAlERUxBWV9JTlRfQ0ZHX1NUUlVDCUludENmZzsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlVTE9ORwlpID0wLCBqPTA7CiAJQUNfVFhPUF9DU1IwX1NUUlVDCWNzcjA7CiAKQEAgLTE3MTksMTEgKzE3MDYsOSBAQAogCiAJLy8gYXNpYyBzaW11bGF0aW9uIHNlcXVlbmNlIHB1dCB0aGlzIGFoZWFkIGJlZm9yZSBsb2FkaW5nIGZpcm13YXJlLgogCS8vIHBiZiBoYXJkd2FyZSByZXNldAotI2lmZGVmIFJUMjg2MAogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX1JTVF9JRFgsIDB4MTAwM2YpOwkvLyAweDEwMDAwIGZvciByZXNldCByeCwgMHgzZiByZXNldHMgYWxsIDYgdHggcmluZ3MuCiAJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCAweGUxZik7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCAweGUwMCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkvLyBJbml0aWFsemUgQVNJQyBmb3IgVFggJiBSeCBvcGVyYXRpb24KIAlpZiAoTklDSW5pdGlhbGl6ZUFzaWMocEFkICwgYkhhcmRSZXNldCkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKQEAgLTE3MzcsNyArMTcyMiw2IEBACiAJfQogCiAKLSNpZmRlZiBSVDI4NjAKIAkvLyBXcml0ZSBBQ19CSyBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIKIAlWYWx1ZSA9IFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBBZC0+VHhSaW5nW1FJRF9BQ19CS10uQ2VsbFswXS5BbGxvY1BhKTsKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQVNFX1BUUjEsIFZhbHVlKTsKQEAgLTE4MTAsNyArMTc5NCw2IEBACiAJLy8gV3JpdGUgUlhfUklOR19DU1IgcmVnaXN0ZXIKIAlWYWx1ZSA9IFJYX1JJTkdfU0laRTsKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9NQVhfQ05ULCBWYWx1ZSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vIFdNTSBwYXJhbWV0ZXIKQEAgLTE4MjksNyArMTgxMiw2IEBACiAJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AxX0NGRywgY3NyMC53b3JkKTsKIAogCi0jaWZkZWYgUlQyODYwCiAJLy8gMy4gU2V0IERNQSBnbG9iYWwgY29uZmlndXJhdGlvbiBleGNlcHQgVFhfRE1BX0VOIGFuZCBSWF9ETUFfRU4gYml0czoKIAlpID0gMDsKIAlkbwpAQCAtMTg0OCw3ICsxODMwLDYgQEAKIAogCUludENmZy53b3JkID0gMDsKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBERUxBWV9JTlRfQ0ZHLCBJbnRDZmcud29yZCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vIHJlc2V0IGFjdGlvbgpAQCAtMTg4OSw3ICsxODcwLDYgQEAKIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0aWFsaXplQXNpY1xuIikpOwogCi0jaWZkZWYgUlQyODYwCiAJaWYgKGJIYXJkUmVzZXQgPT0gVFJVRSkKIAl7CiAJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgzKTsKQEAgLTE5MTQsNyArMTg5NCw2IEBACiAJCX0KIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vCkBAIC0yMDQxLDYgKzIwMjAsMTMxIEBACiAJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKKworVk9JRCBOSUNSZXN0b3JlQkJQVmFsdWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUNIQVIJCWluZGV4OworCVVDSEFSCQlWYWx1ZSA9IDA7CisJVUxPTkcJCURhdGE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+ICBOSUNSZXN0b3JlQkJQVmFsdWUgISEhISEhISEhISEhISEhISEhISEhISEgIFxuIikpOworCS8vIEluaXRpYWxpemUgQkJQIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUgKHJ0bXBfaW5pdC5jKQorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9CQlBfUkVHX1BBUk1TOyBpbmRleCsrKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUFJlZ1RhYmxlW2luZGV4XS5SZWdpc3RlciwgQkJQUmVnVGFibGVbaW5kZXhdLlZhbHVlKTsKKwl9CisJLy8gY29weSBmcm9tIChydG1wX2luaXQuYykKKwlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJeworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxNik7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDEyKTsKKwl9CisKKwkvLyBjb3B5IGZyb20gKGNvbm5lY3QuYyBMaW5rVXAgZnVuY3Rpb24pCisJaWYgKElORlJBX09OKHBBZCkpCisJeworCQkvLyBDaGFuZ2UgdG8gQVAgY2hhbm5lbAorCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCXsKKwkJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQkJVmFsdWUgJj0gKH4weDE4KTsKKwkJCVZhbHVlIHw9IDB4MTA7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJCS8vICBSWCA6IGNvbnRyb2wgY2hhbm5lbCBhdCBsb3dlcgorCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmVmFsdWUpOworCQkJVmFsdWUgJj0gKH4weDIwKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKKwkJCS8vIFJlY29yZCBCQlBSMyBzZXR0aW5nLCBCdXQgZG9uJ3Qga2VlcCBSIEFudGVubmEgIyBpbmZvcm1hdGlvbi4KKwkJCXBBZC0+U3RhQ2ZnLkJCUFIzID0gVmFsdWU7CisKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKKwkJCURhdGEgJj0gMHhmZmZmZmZmZTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBEYXRhKTsKKworCQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQkJeworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDFBKTsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwQSk7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTYpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhNDBNSHogTG93ZXIgTElOSyBVUCAhISEgQ29udHJvbCBDaGFubmVsIGF0IEJlbG93LiBDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwkJfQorCQllbHNlIGlmICgocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSAmJiAocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKKwkJeworCQkJLy8gTXVzdCB1c2luZyA0ME1Iei4KKwkJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZWYWx1ZSk7CisJCQlWYWx1ZSAmPSAofjB4MTgpOworCQkJVmFsdWUgfD0gMHgxMDsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQkJRGF0YSB8PSAweDE7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgRGF0YSk7CisKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKKwkJCVZhbHVlIHw9ICgweDIwKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKKwkJCS8vIFJlY29yZCBCQlBSMyBzZXR0aW5nLCBCdXQgZG9uJ3Qga2VlcCBSIEFudGVubmEgIyBpbmZvcm1hdGlvbi4KKwkJCXBBZC0+U3RhQ2ZnLkJCUFIzID0gVmFsdWU7CisKKwkJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJCXsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MEEpOworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDE2KTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISFydDI4NjBDICEhISBcbiIgKSk7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhITQwTUh6IFVwcGVyIExJTksgVVAgISEhIENvbnRyb2wgQ2hhbm5lbCBhdCBVcHBlckNlbnRyYWwgPSAlZCBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICkpOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7CisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZWYWx1ZSk7CisJCQlWYWx1ZSAmPSAofjB4MTgpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmRGF0YSk7CisJCQlEYXRhICY9IDB4ZmZmZmZmZmU7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgRGF0YSk7CisKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKKwkJCVZhbHVlICY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisJCQkvLyBSZWNvcmQgQkJQUjMgc2V0dGluZywgQnV0IGRvbid0IGtlZXAgUiBBbnRlbm5hICMgaW5mb3JtYXRpb24uCisJCQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOworCisJCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCQl7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDA4KTsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEyME1IeiBMSU5LIFVQICEhISBcbiIgKSk7CisJCX0KKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tICBOSUNSZXN0b3JlQkJQVmFsdWUgISEhISEhISEhISEhISEhISEhISEhISEgIFxuIikpOworfQorCiAvKgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0zMDI4LDExICszMTMyLDEwIEBACiAJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7CiAKIAlwQWQtPkxlZENudGwud29yZCA9IDA7Ci0jaWZkZWYgUlQyODYwCiAJcEFkLT5MZWRJbmRpY2F0b3JTdHJlZ3RoID0gMDsKIAlwQWQtPlJMbmtDdHJsT2Zmc2V0ID0gMDsKIAlwQWQtPkhvc3RMbmtDdHJsT2Zmc2V0ID0gMDsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KKwlwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID0gMDsKIAogCXBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsJCQkvLyBEZWZhdWx0IGlzIE9GRgogCXBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsJCQkvLyBEZWZhdWx0IGlzIE9GRgpAQCAtMzI5Miw5ICszMzk1LDcgQEAKIAlwQWQtPmF0ZS5iUnhGZXIgPSAwOwogCXBBZC0+YXRlLmJRQVR4U3RhcnQgPSBGQUxTRTsKIAlwQWQtPmF0ZS5iUUFSeFN0YXJ0ID0gRkFMU0U7Ci0jaWZkZWYgUlQyODYwCiAJcEFkLT5hdGUuYkZXTG9hZGluZyA9IEZBTFNFOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2lmZGVmIFJBTElOS18yOHh4X1FBCiAJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOwogCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKQEAgLTMzMDQsMTEgKzM0MDUsOSBAQAogCiAKIAlwQWQtPkNvbW1vbkNmZy5iV2lGaVRlc3QgPSBGQUxTRTsKLSNpZmRlZiBSVDI4NjAKLSAgICBwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KKwlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKIAotCisJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gVXNlckNmZ0luaXRcbiIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMKaW5kZXggMDI2NWE2ZC4uYjM2NTBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jCkBAIC0xNTk2LDcgKzE1OTYsNyBAQAogCiAJaWYgKChwTWVhc3VyZVJlcG9ydEluZm8gPSBrbWFsbG9jKHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKIAl7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIHVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIG1lYXN1cmUgcmVwb3J0IGJ1ZmZlciAoc2l6ZT0lZCkuXG4iLCBfX2Z1bmNfXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgdW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgbWVhc3VyZSByZXBvcnQgYnVmZmVyIChzaXplPSV6dSkuXG4iLCBfX2Z1bmNfXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbmZpZy5tawppbmRleCBmNTdkN2JiLi4yNWJkNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbmZpZy5taworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbmZpZy5tawpAQCAtMTA4LDEwICsxMDgsNiBAQAogV0ZMQUdTICs9IC1ERVhUX0JVSUxEX0NIQU5ORUxfTElTVAogZW5kaWYKIAotaWZlcSAoJChDSElQU0VUKSwyODYwKQotV0ZMQUdTICs9LURSVDI4NjAKLWVuZGlmCi0KIGlmZXEgKCQoQ0hJUFNFVCksMjg3MCkKIFdGTEFHUyArPS1EUlQyODcwCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9vaWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvb2lkLmgKaW5kZXggZjJmOTFiNi4uNWU2ZWQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9vaWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL29pZC5oCkBAIC01NDQsNiArNTQ0LDggQEAKICAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNLZXlBYnNlbnQsCiAgICAgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZCwJLy8gVEtJUCBvciBBRVMgbWl4CiAgICAgTmRpczgwMl8xMUVuY3J5cHRpb240S2V5QWJzZW50LAorICAgIE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCwKKwlOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkLAogfSBORElTXzgwMl8xMV9XRVBfU1RBVFVTLCAqUE5ESVNfODAyXzExX1dFUF9TVEFUVVMsCiAgIE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTLCAqUE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjg2MC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4NjAuaAppbmRleCAwMTcyMDE5Li40ZmJlYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjg2MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyODYwLmgKQEAgLTQ2LDE4ICs0NiwxMCBAQAogCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAKIC8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNkZWZpbmUgSVJRX0hBTkRMRV9UWVBFICBpcnFyZXR1cm5fdAotI2Vsc2UKLSNkZWZpbmUgSVJRX0hBTkRMRV9UWVBFICB2b2lkCi0jZW5kaWYKIAogSVJRX0hBTkRMRV9UWVBFCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTkpKQogcnQyODYwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwotI2Vsc2UKLXJ0Mjg2MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0gRnJpbXdhcmUgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBSVDI4WFhfV1JJVEVfRklSTVdBUkUoX3BBZCwgX3BGd0ltYWdlLCBfRndMZW4pCQkJCVwKQEAgLTIzNyw5ICsyMjksNyBAQAogI2RlZmluZSBSVE1QX01TSV9ESVNBQkxFKF9wQWQpCiAjZW5kaWYgLy8gUENJX01TSV9TVVBQT1JUIC8vCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQogI2RlZmluZSBTQV9TSElSUSBJUlFGX1NIQVJFRAotI2VuZGlmCiAKICNkZWZpbmUgUlQyOFhYX0lSUV9SRVFVRVNUKG5ldF9kZXYpCQkJCQkJCVwKIHsJUFJUTVBfQURBUFRFUiBfcEFkID0gKFBSVE1QX0FEQVBURVIpKChuZXRfZGV2KS0+bWxfcHJpdik7CVwKQEAgLTI1MSwyMCArMjQxLDEyIEBACiAJCXByaW50aygiUlQyODYwOiByZXF1ZXN0X2lycSAgRVJST1IoJWQpXG4iLCByZXR2YWwpOwlcCiAJcmV0dXJuIHJldHZhbDsgfSB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjZGVmaW5lIFJUMjhYWF9JUlFfUkVMRUFTRShuZXRfZGV2KQkJCQkJCQkJXAogewlQUlRNUF9BREFQVEVSIF9wQWQgPSAoUFJUTVBfQURBUFRFUikoKG5ldF9kZXYpLT5tbF9wcml2KTsJCVwKIAlQT1NfQ09PS0lFIF9wT2JqID0gKFBPU19DT09LSUUpKF9wQWQtPk9TX0Nvb2tpZSk7CQkJXAogCXN5bmNocm9uaXplX2lycShfcE9iai0+cGNpX2Rldi0+aXJxKTsJCQkJCQlcCiAJZnJlZV9pcnEoX3BPYmotPnBjaV9kZXYtPmlycSwgKG5ldF9kZXYpKTsJCQkJCVwKIAlSVE1QX01TSV9ESVNBQkxFKF9wQWQpOyB9Ci0jZWxzZQotI2RlZmluZSBSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2RldikJCQkJCQkJCVwKLXsJUFJUTVBfQURBUFRFUiBfcEFkID0gKFBSVE1QX0FEQVBURVIpKChuZXRfZGV2KS0+cHJpdik7CQlcCi0JUE9TX0NPT0tJRSBfcE9iaiA9IChQT1NfQ09PS0lFKShfcEFkLT5PU19Db29raWUpOwkJCVwKLQlmcmVlX2lycShfcE9iai0+cGNpX2Rldi0+aXJxLCAobmV0X2RldikpOwkJCQkJXAotCVJUTVBfTVNJX0RJU0FCTEUoX3BBZCk7IH0KLSNlbmRpZgogCiAjZGVmaW5lIFJUMjhYWF9JUlFfSU5JVChwQWQpCQkJCQkJCQkJCVwKIAl7CXBBZC0+aW50X2VuYWJsZV9yZWcgPSAoKERFTEFZSU5UTUFTSykgfAkJCQkJCVwKQEAgLTMzMyw4ICszMTUsOCBAQAogICAgIHJlZzE2ID0gY3B1MmxlMTYoQ29uZmlndXJhdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHBjaV93cml0ZV9jb25maWdfd29yZChwY2lfZGV2LCBvZmZzZXQsIHJlZzE2KTsgICAgICAgICAgXAogCi0jZGVmaW5lIFJUMjhYWF9TVEFfRk9SQ0VfV0FLRVVQKHBBZCwgYkZyb21UeCkgXAotICAgIFJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cChwQWQsIGJGcm9tVHgpOworI2RlZmluZSBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIExldmVsKSBcCisgICAgUlQyOHh4UGNpU3RhQXNpY0ZvcmNlV2FrZXVwKHBBZCwgTGV2ZWwpOwogCiAjZGVmaW5lIFJUMjhYWF9TVEFfU0xFRVBfVEhFTl9BVVRPX1dBS0VVUChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApIFwKICAgICBSVDI4eHhQY2lTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyOHh4LmgKaW5kZXggZmYyMzA0My4uZTVlNmYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4eHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjh4eC5oCkBAIC0xNjcwLDExICsxNjcwLDkgQEAKICNkZWZpbmUgRTJQUk9NX0NTUiAgICAgICAgICAweDAwMDQKICNkZWZpbmUgSU9fQ05UTF9DU1IgICAgICAgICAweDc3ZDAKIAotI2lmZGVmIFJUMjg2MAogLy8gODA1MSBmaXJtd2FyZSBpbWFnZSBmb3IgUlQyODYwIC0gYmFzZSBhZGRyZXNzID0gMHg0MDAwCiAjZGVmaW5lIEZJUk1XQVJFX0lNQUdFX0JBU0UgICAgIDB4MjAwMAogI2RlZmluZSBNQVhfRklSTVdBUkVfSU1BR0VfU0laRSAweDIwMDAgICAgLy8gOGtieXRlCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjAyOSw3ICsyMDI3LDYgQEAKIC8vCiAvLyBSeCBkZXNjcmlwdG9yIGZvcm1hdCwgUngJUmluZwogLy8KLSNpZmRlZiBSVDI4NjAKICNpZmRlZiBSVF9CSUdfRU5ESUFOCiB0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYRF9TVFJVQwl7CiAJLy8gV29yZCAwCkBAIC0yMDk4LDcgKzIwOTUsNiBAQAogCVVJTlQzMgkJUnN2MToxMzsKIH0JUlhEX1NUUlVDLCAqUFJYRF9TVFJVQywgUlQyOFhYX1JYRF9TVFJVQywgKlBSVDI4WFhfUlhEX1NUUlVDOwogI2VuZGlmCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAvLwogLy8gUlhXSSB3aXJlbGVzcyBpbmZvcm1hdGlvbiBmb3JtYXQsIGluIFBCRi4gaW52aXNpYmxlIGluIGRyaXZlci4KIC8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuYwppbmRleCBmMzMxNmVjLi4xZWQ3M2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmMKQEAgLTY4LDcgKzY4LDYgQEAKIAlJTiBVQ0hBUiBNb2RlLAogCUlOIFVDSEFSIE1jcyk7CiAKLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBWT0lEIEFURVdyaXRlVHhXSSgKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglQVFhXSV9TVFJVQyAJcE91dFR4V0ksCkBAIC04Nyw3ICs4Niw2IEBACiAJSU4JVUNIQVIJCQlUeG9wbW9kZSwKIAlJTglCT09MRUFOCQkJQ2ZBY2ssCiAJSU4JSFRUUkFOU01JVF9TRVRUSU5HCSpwVHJhbnNtaXQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIHN0YXRpYyBWT0lEIFNldEphcGFuRmlsdGVyKApAQCAtOTUsNyArOTMsNiBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT1lbmQgb2YgcHJvdG90eXBlPT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBJTlQgVHhEbWFCdXN5KAogCUlOIFBSVE1QX0FEQVBURVIgcEFkKQogewpAQCAtMTUzLDcgKzE1MCw2IEBACiAKIAlyZXR1cm47CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogc3RhdGljIFZPSUQgQmJwU29mdFJlc2V0KApAQCAtNDg4LDcgKzQ4NCw2IEBACiAgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBJTlQJQVRFQ21kSGFuZGxlcigKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglQVUNIQVIJCQlhcmcpCkBAIC0xMjk3LDcgKzEyOTIsNiBAQAogCiAJcmV0dXJuIFRSVUU7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PUVuZCBvZiBSVDI4NjA9PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0yOTA3LDcgKzI5MDEsNiBAQAogCQlOb25lCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotI2lmZGVmIFJUMjg2MAogc3RhdGljIFZPSUQgQVRFV3JpdGVUeFdJKAogCUlOCVBSVE1QX0FEQVBURVIJcEFkLAogCUlOCVBUWFdJX1NUUlVDIAlwT3V0VHhXSSwKQEAgLTI5NzIsNyArMjk2NSw2IEBACiAKICAgICAgICAgcmV0dXJuOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAvKgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzI0OSwxMyArMzI0MSwxMSBAQAogICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKQogewogICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QU3RhdGlvblN0YXJ0XG4iKSk7Ci0jaWZkZWYgUlQyODYwCi0JcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKK2VwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOwogCS8vCiAJLy8gV2UgZGlkIG5vdCBjYW5jZWwgdGhpcyB0aW1lciB3aGVuIGVudGVyaW5nIEFURSBtb2RlLgogCS8vCiAvLwlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLCBNTE1FX1RBU0tfRVhFQ19JTlRWKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gUlRNUFN0YXRpb25TdGFydFxuIikpOwogfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwpAQCAtMzI2OCw3ICszMjU4LDYgQEAKIAkJVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gQVRFIG1vZGUuCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwotI2lmZGVmIFJUMjg2MAogc3RhdGljIElOVCBBVEVTZXRVcEZyYW1lKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkLAogCUlOIFVJTlQzMiBUeElkeCkKQEAgLTM0NTUsNyArMzQ0NCw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PUVuZCBvZiBSVDI4NjA9PT09PT09PT09PT09PT09PT09PT09PSovCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogVk9JRCBydF9lZV9yZWFkX2FsbChQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUICpEYXRhKQpAQCAtNDU3OCw5ICs0NTY2LDcgQEAKIAkJCQkJCXsKIAkJCQkJCQlpZiAocEFkYXB0ZXItPmF0ZS5UeENvdW50ID09IDApCiAJCQkJCQkJewotI2lmZGVmIFJUMjg2MAogCQkJCQkJCQlwQWRhcHRlci0+YXRlLlR4Q291bnQgPSAweEZGRkZGRkZGOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCQkJCX0KIAkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQVJUIFRYRlJBTUVcbiIpKTsKIAkJCQkJCQlwQWRhcHRlci0+YXRlLmJRQVR4U3RhcnQgPSBUUlVFOwpAQCAtNTM3NSw3ICs1MzYxLDYgQEAKIAogCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CiAJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7Ci0jaWZkZWYgUlQyODYwCiAJCQkJLyogVFhfRlJBTUVfQ09VTlQgPT0gMCBtZWFucyB0eCBpbmZpbml0ZWx5ICovCiAJCQkJaWYgKHZhbHVlID09IDApCiAJCQkJewpAQCAtNTM4Nyw3ICs1MzcyLDYgQEAKIAogCQkJCX0KIAkJCQllbHNlCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCQkJewogCQkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKIAkJCQkJU2V0X0FURV9UWF9DT1VOVF9Qcm9jKHBBZGFwdGVyLCBzdHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmgKaW5kZXggNDhhYTcwZC4uMzhmNWM0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5oCkBAIC0zMSwxMiArMzEsMTAgQEAKICNpZm5kZWYgVUNPUwogI2RlZmluZSBhdGVfcHJpbnQgcHJpbnRrCiAjZGVmaW5lIEFURURCR1BSSU5UIERCR1BSSU5UCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJCQkJCQkweDIwMAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogI2RlZmluZSBFRVBST01fQklOX0ZJTEVfTkFNRSAgIi9ldGMvV2lyZWxlc3MvUlQyODYwU1RBL2UycC5iaW4iCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKICNlbHNlIC8vICFVQ09TIC8vCiAjZGVmaW5lIGZBVEVfTE9BRF9FRVBST00JCQkJCQkweDBDNDMKQEAgLTY5LDcgKzY3LDYgQEAKICNkZWZpbmUgQVRFX09OKF9wKSAgICAgICAgICAgICAgKCgoX3ApLT5hdGUuTW9kZSkgIT0gQVRFX1NUT1ApCiAKIC8qIFJUMjg4MF9pTklDIHdpbGwgZGVmaW5lICJSVDI4NjAiLiAqLwotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEJCUF9DU1JfQ0ZHX1NUUlVDICBCYnBDc3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMzEsMTAgKzEyOCw4IEBACiAgICAgICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkJCUCB3cml0ZSBSJWQgZmFpbFxuIiwgX0kpKTsgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAvKiBSVDI4ODBfaU5JQyB3aWxsIGRlZmluZSBSVDI4NjAuICovCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJCQkJCQkweDIwMAogLyogaU5JQyBoYXMgaXRzIG93biBFRVBST01fQklOX0ZJTEVfTkFNRSAqLwogI2lmbmRlZiBVQ09TCkBAIC0xNDIsNyArMTM3LDYgQEAKICNkZWZpbmUgRUVQUk9NX0JJTl9GSUxFX05BTUUgICIvZXRjL1dpcmVsZXNzL1JUMjg2MFNUQS9lMnAuYmluIgogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogI2VuZGlmIC8vICFVQ09TIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9jb25maWcuaAppbmRleCA3ZWU3YTQwLi5hNjcwMjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2NvbmZpZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfY29uZmlnLmgKQEAgLTUzLDkgKzUzLDcgQEAKICNpbmNsdWRlICAgICJydG1wX2RlZi5oIgogI2luY2x1ZGUgICAgInJ0Mjh4eC5oIgogCi0jaWZkZWYgUlQyODYwCiAjaW5jbHVkZQkicnQyODYwLmgiCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogI2luY2x1ZGUgICAgIm9pZC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmluZGV4IGYxNDUwMDkuLmYzYzEyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKQEAgLTQ4LDEwICs0OCw4IEBACiAjZW5kaWYKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcEV4ZWMpOwogQlVJTERfVElNRVJfRlVOQ1RJT04oV3BhRGlzYXNzb2NBcEFuZEJsb2NrQXNzb2MpOwotI2lmZGVmIFJUMjg2MAogQlVJTERfVElNRVJfRlVOQ1RJT04oUHNQb2xsV2FrZUV4ZWMpOwogQlVJTERfVElNRVJfRlVOQ1RJT04oUmFkaW9PbkV4ZWMpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2lmZGVmIFFPU19ETFNfU1VQUE9SVAogQlVJTERfVElNRVJfRlVOQ1RJT04oRGxzVGltZW91dEFjdGlvbik7CiAjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCkBAIC0yOTMsOSArMjkxLDcgQEAKIAogCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TWdtdFJpbmdMb2NrKTsKIAotI2lmZGVmIFJUMjg2MAogCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+UnhSaW5nTG9jayk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlmb3IgKGluZGV4ID0wIDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykKIAl7CkBAIC04NTQsNyArODUwLDcgQEAKIAogICAgIGlmIChwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikgPiBSWF9CVUZGRVJfQUdHUkVTSVpFKQogICAgIHsKLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCVkKVxuIiwgX19mdW5jX18sIHBSeEJsay0+RGF0YVNpemUgKyBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSkpOworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFNpemUgaXMgdG9vIGxhcmdlISAoJXp1KVxuIiwgX19mdW5jX18sIHBSeEJsay0+RGF0YVNpemUgKyBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSkpOwogCQlnb3RvIGVycl9mcmVlX3NrX2J1ZmY7CiAgICAgfQogCkBAIC0xMDA1LDM1ICsxMDAxLDE0IEBACiAKIHZvaWQgcnRtcF9vc190aHJlYWRfaW5pdChQVUNIQVIgcFRocmVhZE5hbWUsIFBWT0lEIHBOb3RpZnkpCiB7Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJZGFlbW9uaXplKHBUaHJlYWROYW1lIC8qIiVzIixwQWQtPm5ldF9kZXYtPm5hbWUqLyk7CiAKIAlhbGxvd19zaWduYWwoU0lHVEVSTSk7CiAJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGFlbW9uaXplKCk7Ci0JcmVwYXJlbnRfdG9faW5pdCgpOwotCXN0cmNweShjdXJyZW50LT5jb21tLCBwVGhyZWFkTmFtZSk7Ci0KLQlzaWdpbml0c2V0aW52KCZjdXJyZW50LT5ibG9ja2VkLCBzaWdtYXNrKFNJR1RFUk0pIHwgc2lnbWFzayhTSUdLSUxMKSk7Ci0KLQkvKiBBbGxvdyBpbnRlcmNlcHRpb24gb2YgU0lHS0lMTCBvbmx5Ci0JICogRG9uJ3QgYWxsb3cgb3RoZXIgc2lnbmFscyB0byBpbnRlcnJ1cHQgdGhlIHRyYW5zbWlzc2lvbiAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMikKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnbWFza19sb2NrLCBmbGFncyk7Ci0JZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKLQlyZWNhbGNfc2lncGVuZGluZyhjdXJyZW50KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdtYXNrX2xvY2ssIGZsYWdzKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICAvKiBzaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KKwkvKiBzaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KIAljb21wbGV0ZShwTm90aWZ5KTsKLQogfQogCiB2b2lkIFJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oCmluZGV4IDBmZDU4ZjUuLjcwODkyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmgKQEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKIAotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIAogLy8gbG9hZCBmaXJtd2FyZQpAQCAtOTAsMjggKzg5LDIyIEBACiAvLyBhZGQgYnkga2F0aHkKIAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBTVEFfUFJPRklMRV9QQVRICQkJIi9ldGMvV2lyZWxlc3MvUlQyODYwU1RBL1JUMjg2MFNUQS5kYXQiCiAjZGVmaW5lIFNUQV9SVE1QX0ZJUk1XQVJFX0ZJTEVfTkFNRSAiL2V0Yy9XaXJlbGVzcy9SVDI4NjBTVEEvUlQyODYwU1RBLmJpbiIKICNkZWZpbmUgU1RBX05JQ19ERVZJQ0VfTkFNRQkJCSJSVDI4NjBTVEEiCi0jZGVmaW5lIFNUQV9EUklWRVJfVkVSU0lPTgkJCSIxLjguMC4wIgorI2RlZmluZSBTVEFfRFJJVkVSX1ZFUlNJT04JCQkiMS44LjEuMSIKICNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKICNkZWZpbmUgQ0FSRF9JTkZPX1BBVEgJCQkiL2V0Yy9XaXJlbGVzcy9SVDI4NjBTVEEvUlQyODYwU1RBQ2FyZC5kYXQiCiAjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCi0jaWZkZWYgUlQyODYwCiAjaWZuZGVmIFBDSV9ERVZJQ0UKICNkZWZpbmUgUENJX0RFVklDRSh2ZW5kLGRldikgXAogCS52ZW5kb3IgPSAodmVuZCksIC5kZXZpY2UgPSAoZGV2KSwgXAogCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELCAuc3ViZGV2aWNlID0gUENJX0FOWV9JRAogI2VuZGlmIC8vIFBDSV9ERVZJQ0UgLy8KLSNlbmRpZiAvLyBSVDI4NjAgLy8KLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAogI2RlZmluZSBSVE1QX1RJTUVfQUZURVIoYSxiKQkJXAogCSh0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgKHVuc2lnbmVkIGxvbmcpYSkgJiYgXApAQCAtMTIzLDExICsxMTYsNyBAQAogCSB0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgKHVuc2lnbmVkIGxvbmcpYikgJiYgXAogCSAoKGxvbmcpKGEpIC0gKGxvbmcpKGIpID49IDApKQogI2RlZmluZSBSVE1QX1RJTUVfQkVGT1JFKGEsYikJUlRNUF9USU1FX0FGVEVSX0VRKGIsYSkKLSNlbHNlCi0jZGVmaW5lIFJUTVBfVElNRV9BRlRFUihhLGIpIHRpbWVfYWZ0ZXIoYSwgYikKLSNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogI2RlZmluZSBSVF9NT0RfSU5DX1VTRV9DT1VOVCgpIFwKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgXAogCXsgXApAQCAtMTM2LDEwICsxMjUsNiBAQAogCX0KIAogI2RlZmluZSBSVF9NT0RfREVDX1VTRV9DT1VOVCgpIG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotI2Vsc2UKLSNkZWZpbmUgUlRfTU9EX0lOQ19VU0VfQ09VTlQoKQlNT0RfSU5DX1VTRV9DT1VOVDsKLSNkZWZpbmUgUlRfTU9EX0RFQ19VU0VfQ09VTlQoKSBNT0RfREVDX1VTRV9DT1VOVDsKLSNlbmRpZgogCiAjZGVmaW5lIE9TX0haCQkJSFoKIApAQCAtMTcxLDIxICsxNTYsMTIgQEAKICNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCTMKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiB0eXBlZGVmCXN0cnVjdCBwaWQgKglUSFJFQURfUElEOwogI2RlZmluZQlUSFJFQURfUElEX0lOSVRfVkFMVUUJTlVMTAogI2RlZmluZQlHRVRfUElEKF92KQlmaW5kX2dldF9waWQoX3YpCiAjZGVmaW5lCUdFVF9QSURfTlVNQkVSKF92KQlwaWRfbnIoX3YpCiAjZGVmaW5lIENIRUNLX1BJRF9MRUdBTElUWShfcGlkKQlpZiAocGlkX25yKF9waWQpID49IDApCiAjZGVmaW5lIEtJTExfVEhSRUFEX1BJRChfQSwgX0IsIF9DKQlraWxsX3BpZChfQSwgX0IsIF9DKQotI2Vsc2UKLXR5cGVkZWYJcGlkX3QJVEhSRUFEX1BJRDsKLSNkZWZpbmUJVEhSRUFEX1BJRF9JTklUX1ZBTFVFCS0xCi0jZGVmaW5lCUdFVF9QSUQoX3YpCV92Ci0jZGVmaW5lCUdFVF9QSURfTlVNQkVSKF92KQlfdgotI2RlZmluZSBDSEVDS19QSURfTEVHQUxJVFkoX3BpZCkJaWYgKF9waWQgPj0gMCkKLSNkZWZpbmUgS0lMTF9USFJFQURfUElEKF9BLCBfQiwgX0MpCWtpbGxfcHJvYyhfQSwgX0IsIF9DKQotI2VuZGlmCiAKIHN0cnVjdCBvc19sb2NrICB7CiAJc3BpbmxvY2tfdAkJbG9jazsKQEAgLTE5NCwxMSArMTcwLDkgQEAKIAogCiBzdHJ1Y3Qgb3NfY29va2llIHsKLSNpZmRlZiBSVDI4NjAKIAlzdHJ1Y3QgcGNpX2RldiAJCQkqcGNpX2RldjsKIAlzdHJ1Y3QgcGNpX2RldiAJCQkqcGFyZW50X3BjaV9kZXY7CiAJZG1hX2FkZHJfdAkJICAJCXBBZF9wYTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlyeF9kb25lX3Rhc2s7CkBAIC0yMDksOSArMTgzLDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWFjM19kbWFfZG9uZV90YXNrOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJaGNjYV9kbWFfZG9uZV90YXNrOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YnR0X3Rhc2s7Ci0jaWZkZWYgUlQyODYwCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CWZpZm9fc3RhdGlzdGljX2Z1bGxfdGFzazsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAJdW5zaWduZWQgbG9uZwkJCWFwZF9waWQ7IC8vODAyLjF4IGRhZW1vbiBwaWQKQEAgLTI2Niw3ICsyMzgsNiBAQAogCiAjZGVmaW5lIFJUMjg2MF9QQ0lfREVWSUNFX0lECQkweDA2MDEKIAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBQQ0lfTUFQX1NJTkdMRShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX3NkX2lkeCwgX2RpcikgXAogCWxpbnV4X3BjaV9tYXBfc2luZ2xlKF9oYW5kbGUsIF9wdHIsIF9zaXplLCBfc2RfaWR4LCBfZGlyKQogCkBAIC0yODEsNyArMjUyLDYgQEAKIAogI2RlZmluZSBERVZfQUxMT0NfU0tCKF9sZW5ndGgpIFwKIAlkZXZfYWxsb2Nfc2tiKF9sZW5ndGgpCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCkBAIC00MDEsNyArMzcxLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKChzcGlubG9ja190ICopKF9fbG9jayksICgodW5zaWduZWQgbG9uZylfX2lycWZsYWcpKTsJXAogfQogCi0jaWZkZWYgUlQyODYwCiAjaWYgZGVmaW5lZChJTkZfVFdJTlBBU1MpIHx8IGRlZmluZWQoSU5GX0RBTlVCRSkgfHwgZGVmaW5lZChJS0FOT1NfVlhfMVgwKQogLy9QYXRjaCBmb3IgQVNJQyB0dXJzdCByZWFkL3dyaXRlIGJ1ZywgbmVlZHMgdG8gcmVtb3ZlIGFmdGVyIG1ldGVsIGZpeAogI2RlZmluZSBSVE1QX0lPX1JFQUQzMihfQSwgX1IsIF9wVikJCQkJCQkJCQlcCkBAIC00MTMsNiArMzgyLDEyIEBACiAJKCpfcFYgPSBTV0FQMzIoKigoVUlOVDMyICopKF9wVikpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQorI2RlZmluZSBSVE1QX0lPX0ZPUkNFX1JFQUQzMihfQSwgX1IsIF9wVikJCQkJCQkJXAorewkJCQkJCQkJCQkJCQkJCQkJXAorCSgqX3BWID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyBNQUNfQ1NSMCkpKTsJCVwKKwkoKl9wViA9IHJlYWRsKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgKF9SKSkpKTsJCQlcCisJKCpfcFYgPSBTV0FQMzIoKigoVUlOVDMyICopKF9wVikpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQogI2RlZmluZSBSVE1QX0lPX1JFQUQ4KF9BLCBfUiwgX3BWKQkJCQkJCQkJCVwKIHsJCQkJCQkJCQkJCQkJCQkJCVwKIAkoKl9wViA9IHJlYWRsKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgTUFDX0NTUjApKSk7CQlcCkBAIC00NTIsNiArNDI3LDExIEBACiAgICAgZWxzZQkJCQkJCQkJCQkJCQkJCVwKIAkJKl9wViA9IDA7CQkJCQkJCQkJCQkJCVwKIH0KKyNkZWZpbmUgUlRNUF9JT19GT1JDRV9SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCVwKKwkoKl9wViA9IHJlYWRsKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgTUFDX0NTUjApKSk7CQlcCisJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIChfUikpKSk7CQkJXAorfQogI2RlZmluZSBSVE1QX0lPX1JFQUQ4KF9BLCBfUiwgX3BWKQkJCQkJCQkJXAogewkJCQkJCQkJCQkJCQkJCQlcCiAJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJCVwKQEAgLTQ5Miw3ICs0NzIsNiBAQAogCXdyaXRldygoX1YpLCAoUFVTSE9SVCkoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyAoX1IpKSk7CVwKIH0KICNlbmRpZgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNpZm5kZWYgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKQEAgLTU0NCw3ICs1MjMsNiBAQAogI2RlZmluZSBNbG1lQWxsb2NhdGVNZW1vcnkoX3BBZCwgX3BwVkEpIG9zX2FsbG9jX21lbShfcEFkLCBfcHBWQSwgTUdNVF9ETUFfQlVGRkVSX1NJWkUpCiAjZGVmaW5lIE1sbWVGcmVlTWVtb3J5KF9wQWQsIF9wVkEpICAgICBvc19mcmVlX21lbShfcEFkLCBfcFZBKQogCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCQkJCQkJCQkJCVwKIHZvaWQgbGludXhfIyNfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCQkJCQkJCQkJCQlcCiB7CQkJCQkJCQkJCQkJCQkJCQkJCQlcCkBAIC01NTQsNyArNTMyLDYgQEAKIAlpZiAocFRpbWVyLT5SZXBlYXQpCQkJCQkJCQkJCQkJCQkJXAogCQlSVE1QX09TX0FkZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgcFRpbWVyLT5UaW1lclZhbHVlKTsJCQkJXAogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApAQCAtOTA3LDcgKzg4NCw2IEBACiAKIHZvaWQgcnRtcF9vc190aHJlYWRfaW5pdChQVUNIQVIgcFRocmVhZE5hbWUsIFBWT0lEIHBOb3RpZnkpOwogCi0jaWZkZWYgUlQyODYwCiAjaWYgIWRlZmluZWQoUENJX0NBUF9JRF9FWFApCiAjZGVmaW5lIFBDSV9DQVBfSURfRVhQCQkJICAgIDB4MTAKICNlbmRpZgpAQCAtOTIxLDYgKzg5Nyw1IEBACiAjZW5kaWYKIAogI2RlZmluZSBQQ0lCVVNfSU5URUxfVkVORE9SICAgICAgICAgMHg4MDg2Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCmluZGV4IDM4NzNjNDcuLmNmMTdiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKQEAgLTU4LDExICs1OCw3IEBACiAKIGNoYXIgKm1hYyA9ICIiOwkJICAgLy8gZGVmYXVsdCAwMDowMDowMDowMDowMDowMAogY2hhciAqaG9zdG5hbWUgPSAiIjsJCSAgIC8vIGRlZmF1bHQgQ01QQwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTIpCi1NT0RVTEVfUEFSTSAobWFjLCAicyIpOwotI2Vsc2UKIG1vZHVsZV9wYXJhbSAobWFjLCBjaGFycCwgMCk7Ci0jZW5kaWYKIE1PRFVMRV9QQVJNX0RFU0MgKG1hYywgInJ0Mjh4eDogd2lyZWxlc3MgbWFjIGFkZHIiKTsKIAogCkBAIC03NSw5ICs3MSw3IEBACiAjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCiBleHRlcm4gTkRJU19TVEFUVVMgTklDTG9hZFJhdGVTd2l0Y2hpbmdQYXJhbXMoSU4gUFJUTVBfQURBUFRFUiBwQWQpOwogCi0jaWZkZWYgUlQyODYwCiBleHRlcm4gdm9pZCBpbml0X3RocmVhZF90YXNrKFBSVE1QX0FEQVBURVIgcEFkKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLy8gcHVibGljIGZ1bmN0aW9uIHByb3RvdHlwZQogSU5UIF9fZGV2aW5pdCBydDI4eHhfcHJvYmUoSU4gdm9pZCAqX2Rldl9wLCBJTiB2b2lkICpfZGV2X2lkX3AsCkBAIC04NywxMyArODEsNiBAQAogc3RhdGljIGludCBydDI4eHhfaW5pdChJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CiBJTlQgcnQyOHh4X3NlbmRfcGFja2V0cyhJTiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3AsIElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyCS8vIFJlZCBIYXQgNy4xCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2KAotCWludCBzaXplb2ZfcHJpdiwKLQljb25zdCBjaGFyICptYXNrLAotCXZvaWQgKCpzZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKikpOwotI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLwotCiBzdGF0aWMgdm9pZCBDZmdJbml0SG9vayhQUlRNUF9BREFQVEVSIHBBZCk7CiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKQEAgLTIzNSwxNSArMjIyLDEzIEBACiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKIAl7Ci0jaWZkZWYgUlQyODYwCi0JCVJUTVBQQ0llTGlua0N0cmxWYWx1ZVJlc3RvcmUocEFkLCBSRVNUT1JFX0NMT1NFKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KLQogCQkvLyBJZiBkaXJ2ZXIgZG9lc24ndCB3YWtlIHVwIGZpcm13YXJlIGhlcmUsCiAJCS8vIE5JQ0xvYWRGaXJtd2FyZSB3aWxsIGhhbmcgZm9yZXZlciB3aGVuIGludGVyZmFjZSBpcyB1cCBhZ2Fpbi4KLQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpIHx8CisJCQlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkgfHwKKwkJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikpCiAgICAgICAgIHsKLQkJICAgIEFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCQkgICAgQXNpY0ZvcmNlV2FrZXVwKHBBZCwgUlRNUF9IQUxUKTsKICAgICAgICAgfQogCiAjaWZkZWYgUU9TX0RMU19TVVBQT1JUCkBAIC0zMjMsOSArMzA4LDcgQEAKICNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCiAKIAkJTWxtZVJhZGlvT2ZmKHBBZCk7Ci0jaWZkZWYgUlQyODYwCiAJCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCX0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIApAQCAtMzU5LDcgKzM0Miw2IEBACiAJVHBjUmVxVGFiRXhpdChwQWQpOwogCiAKLSNpZmRlZiBSVDI4NjAKIAlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpKQogCXsKIAkJTklDRGlzYWJsZUludGVycnVwdChwQWQpOwpAQCAtMzc1LDcgKzM1Nyw2IEBACiAJCVJUMjhYWF9JUlFfUkVMRUFTRShuZXRfZGV2KQogCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOwogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAJLy8gRnJlZSBSaW5nIG9yIFVTQiBidWZmZXJzCkBAIC00MzksMTIgKzQyMCwxMCBAQAogCiAJLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgd2hpY2ggaXMgYXMgc29vbiBhcyBwb3NzaWJsZQogCS8vIFRoaXMgc3RhdGVtZW50IHNob3VsZCBuZXZlciBiZSB0cnVlLiBXZSBtaWdodCBjb25zaWRlciB0byByZW1vdmUgaXQgbGF0ZXIKLSNpZmRlZiBSVDI4NjAKIAlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpKQogCXsKIAkJTklDRGlzYWJsZUludGVycnVwdChwQWQpOwogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCVN0YXR1cyA9IFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5KHBBZCk7CiAJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQpAQCAtNjY3LDI2ICs2NDYsNiBAQAogI2VuZGlmIC8vIFdJUkVMRVNTX0VYVCA+PSAxMiAvLwogI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCiAKLSNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKLQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQotCXsKLSAgICAJLy8gSWYgZGlydmVyIGRvZXNuJ3Qgd2FrZSB1cCBmaXJtd2FyZSBoZXJlLAotICAgIAkvLyBOSUNMb2FkRmlybXdhcmUgd2lsbCBoYW5nIGZvcmV2ZXIgd2hlbiBpbnRlcmZhY2UgaXMgdXAgYWdhaW4uCi0gICAgCS8vIFJUMjg2MCBQQ0kKLSAgICAJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkgJiYKLSAgICAgICAgCU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKLSAgICAJewotICAgICAgICAJQVVUT19XQUtFVVBfU1RSVUMgQXV0b1dha2V1cENmZzsKLQkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOwotICAgICAgICAJQXV0b1dha2V1cENmZy53b3JkID0gMDsKLQkgICAgCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKLSAgICAgICAgCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotICAgIAl9Ci0JfQotI2VuZGlmIC8vIFJUMjg2MCAvLwotI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwotCiAJLy8gSW5pdAogIAlwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CiAKQEAgLTc1MywxMCArNzEyLDggQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKIAlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQogICAgICAgICBSVE1QSW5pdFBDSWVMaW5rQ3RybFZhbHVlKHBBZCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKIAlyZXR1cm4gKHJldHZhbCk7CkBAIC04MDgsOSArNzY1LDcgQEAKIAlkZXYtPnN0b3AgPSBNYWluVmlydHVhbElGX2Nsb3NlOyAvL3J0Mjh4eF9jbG9zZTsKIAlkZXYtPnByaXZfZmxhZ3MgPSBJTlRfTUFJTjsKIAlkZXYtPmRvX2lvY3RsID0gcnQyOHh4X2lvY3RsOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjQpCi0gICAgZGV2LT52YWxpZGF0ZV9hZGRyID0gTlVMTDsKLSNlbmRpZgorCWRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7CiAJLy8gZmluZCBhdmFpbGFibGUgZGV2aWNlIG5hbWUKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCXsKQEAgLTgyMSwyNSArNzc2LDExIEBACiAjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCiAJCXNwcmludGYoc2xvdF9uYW1lLCAicmElZCIsIGkpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjQpCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNikKLSAgICAgICAgZGV2aWNlID0gZGV2X2dldF9ieV9uYW1lKGRldl9uZXQoZGV2KSwgc2xvdF9uYW1lKTsKLSNlbHNlCi0gICAgICAgIGRldmljZSA9IGRldl9nZXRfYnlfbmFtZShkZXYtPm5kX25ldCwgc2xvdF9uYW1lKTsKLSNlbmRpZgotI2Vsc2UKLQkJZGV2aWNlID0gZGV2X2dldF9ieV9uYW1lKHNsb3RfbmFtZSk7Ci0jZW5kaWYKLQkJaWYgKGRldmljZSAhPSBOVUxMKSBkZXZfcHV0KGRldmljZSk7Ci0jZWxzZQotCQlmb3IgKGRldmljZSA9IGRldl9iYXNlOyBkZXZpY2UgIT0gTlVMTDsgZGV2aWNlID0gZGV2aWNlLT5uZXh0KQotCQl7Ci0JCQlpZiAoc3RybmNtcChkZXZpY2UtPm5hbWUsIHNsb3RfbmFtZSwgNCkgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotI2VuZGlmCi0JCWlmKGRldmljZSA9PSBOVUxMKQorCQlkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoZGV2X25ldChkZXYpLCBzbG90X25hbWUpOworCQlpZiAoZGV2aWNlICE9IE5VTEwpCisJCQlkZXZfcHV0KGRldmljZSk7CisKKwkJaWYgKGRldmljZSA9PSBOVUxMKQogCQkJYnJlYWs7CiAJfQogCkBAIC0xMjUyLDQ3ICsxMTkzLDI4IEBACiAgICAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQgPSAoUFJUTVBfQURBUFRFUikgTlVMTDsKICAgICBJTlQgICAgICAgICAgICAgICAgIHN0YXR1czsKIAlQVk9JRAkJCQloYW5kbGU7Ci0jaWZkZWYgUlQyODYwCiAJc3RydWN0IHBjaV9kZXYgKmRldl9wID0gKHN0cnVjdCBwY2lfZGV2ICopX2Rldl9wOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTVEEgRHJpdmVyIHZlcnNpb24tJXNcbiIsIFNUQV9EUklWRVJfVkVSU0lPTikpOwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IDB4MjA0MDIgICAgICAgLy8gUmVkIEhhdCA3LjEKLSAgICBuZXRfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihQUlRNUF9BREFQVEVSKSwgImV0aCVkIiwgZXRoZXJfc2V0dXApOwotI2Vsc2UKICAgICBuZXRfZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKFBSVE1QX0FEQVBURVIpKTsKLSNlbmRpZgogICAgIGlmIChuZXRfZGV2ID09IE5VTEwpCiAgICAgewogICAgICAgICBwcmludGsoImFsbG9jX25ldGRldiBmYWlsZWRcbiIpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKLQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0jZW5kaWYgLy9MSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCi0jZWxzZQotCQlNT0RfREVDX1VTRV9DT1VOVDsKLSNlbmRpZgogICAgICAgICBnb3RvIGVycl9vdXQ7CiAgICAgfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQotICAgIFNFVF9NT0RVTEVfT1dORVIobmV0X2Rldik7Ci0jZW5kaWYKLQogCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CiAjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKIC8qIGZvciBzdXBwb3J0aW5nIE5ldHdvcmsgTWFuYWdlciAqLwogLyogU2V0IHRoZSBzeXNmcyBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGZvciB0aGUgbmV0d29yayBsb2dpY2FsIGRldmljZQogICogaWYgc2V0IHByaW9yIHRvIHJlZ2lzdHJhdGlvbiB3aWxsIGNhdXNlIGEgc3ltbGluayBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKi8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKICAgICBTRVRfTkVUREVWX0RFVihuZXRfZGV2LCAmKGRldl9wLT5kZXYpKTsKLSNlbmRpZgogI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCiAKIAkvLyBBbGxvY2F0ZSBSVE1QX0FEQVBURVIgbWluaXBvcnQgYWRhcHRlciBzdHJ1Y3R1cmUKQEAgLTEzMTMsMTMgKzEyMzUsOCBAQAogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiAJLy8gUG9zdCBjb25maWcKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQlpZiAoUlQyOFhYUHJvYmVQb3N0Q29uZmlnKF9kZXZfcCwgcEFkLCBhcmdjKSA9PSBGQUxTRSkKLQkJZ290byBlcnJfb3V0X3VubWFwOwotI2Vsc2UKIAlpZiAoUlQyOFhYUHJvYmVQb3N0Q29uZmlnKF9kZXZfcCwgcEFkLCAwKSA9PSBGQUxTRSkKIAkJZ290byBlcnJfb3V0X3VubWFwOwotI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLwogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAJcEFkLT5PcE1vZGUgPSBPUE1PREVfU1RBOwpAQCAtMTM2MiwyMCArMTI3OSwxMiBAQAogCVJUMjhYWF9VTk1BUCgpOwogCiBlcnJfb3V0X2ZyZWVfbmV0ZGV2OgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBmcmVlX25ldGRldihuZXRfZGV2KTsKLSNlbHNlCi0Ja2ZyZWUobmV0X2Rldik7Ci0jZW5kaWYKKwlmcmVlX25ldGRldihuZXRfZGV2KTsKIAogZXJyX291dDoKIAlSVDI4WFhfUFVUX0RFVklDRShkZXZfcCk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQlyZXR1cm4gKExPTkcpTlVMTDsKLSNlbHNlCi0gICAgcmV0dXJuIC1FTk9ERVY7IC8qIHByb2JlIGZhaWwgKi8KLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwlyZXR1cm4gLUVOT0RFVjsgLyogcHJvYmUgZmFpbCAqLwogfSAvKiBFbmQgb2YgcnQyOHh4X3Byb2JlICovCiAKIApAQCAtMTQ5NSw0MCArMTQwNCw2IEBACiAKIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IDB4MjA0MDIJLy8gUmVkIEhhdCA3LjEKLXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXYoCi0JaW50IHNpemVvZl9wcml2LAotCWNvbnN0IGNoYXIgKm1hc2ssCi0Jdm9pZCAoKnNldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqKSkKLXsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotICAgIElOVAkJCQkJYWxsb2Nfc2l6ZTsKLQotCi0gICAgLyogZW5zdXJlIDMyLWJ5dGUgYWxpZ25tZW50IG9mIHRoZSBwcml2YXRlIGFyZWEgKi8KLSAgICBhbGxvY19zaXplID0gc2l6ZW9mICgqZGV2KSArIHNpemVvZl9wcml2ICsgMzE7Ci0KLSAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoZGV2ID09IE5VTEwpCi0gICAgewotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkoImFsbG9jX25ldGRldjogVW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBtZW1vcnkuXG4iKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1lbXNldChkZXYsIDAsIGFsbG9jX3NpemUpOwotCi0gICAgaWYgKHNpemVvZl9wcml2KQotICAgICAgICBkZXYtPnByaXYgPSAodm9pZCAqKSAoKChsb25nKShkZXYgKyAxKSArIDMxKSAmIH4zMSk7Ci0KLSAgICBzZXR1cChkZXYpOwotICAgIHN0cmNweShkZXYtPm5hbWUsIG1hc2spOwotCi0gICAgcmV0dXJuIGRldjsKLX0KLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KLQotCiB2b2lkIENmZ0luaXRIb29rKFBSVE1QX0FEQVBURVIgcEFkKQogewogCXBBZC0+YkJyb2FkQ29tSFQgPSBUUlVFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3Byb2ZpbGUuYwppbmRleCAzMjZhM2NiLi42MjE0MWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3Byb2ZpbGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3Byb2ZpbGUuYwpAQCAtMTQ1MSw3ICsxNDUxLDcgQEAKIAkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKIAkJCQkJewogCQkJCQkJLy9QU01vZGUKLQkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJQU01vZGUiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlBTTW9kZSIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCiAJCQkJCQl7CiAJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKQogCQkJCQkJCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKaW5kZXggNDExOTU0Mi4uYjkwNGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKQEAgLTIwMyw5ICsyMDMsNyBAQAogCUJPT0xFQU4JYlJ4RmVyOwogCUJPT0xFQU4JYlFBVHhTdGFydDsgLy8gSGF2ZSBjb21waWxlZCBRQSBpbiBhbmQgdXNlIGl0IHRvIEFURSB0eC4KIAlCT09MRUFOCWJRQVJ4U3RhcnQ7CS8vIEhhdmUgY29tcGlsZWQgUUEgaW4gYW5kIHVzZSBpdCB0byBBVEUgcnguCi0jaWZkZWYgUlQyODYwCiAJQk9PTEVBTgliRldMb2FkaW5nOwkvLyBSZWxvYWQgZmlybXdhcmUgd2hlbiBBVEUgaXMgZG9uZS4KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlVSU5UMzIJUnhUb3RhbENudDsKIAlVSU5UMzIJUnhDbnRQZXJTZWM7CiAKQEAgLTM2Niw2ICszNjQsMTMgQEAKICNkZWZpbmUgUlRNUF9URVNUX0ZMQUcoX00sIF9GKSAgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSAhPSAwKQogI2RlZmluZSBSVE1QX1RFU1RfRkxBR1MoX00sIF9GKSAgICAgKCgoX00pLT5GbGFncyAmIChfRikpID09IChfRikpCiAKKy8vIE1hY3JvIGZvciBwb3dlciBzYXZlIGZsYWcuCisjZGVmaW5lIFJUTVBfU0VUX1BTRkxBRyhfTSwgX0YpICAgICAgICgoX00pLT5QU0ZsYWdzIHw9IChfRikpCisjZGVmaW5lIFJUTVBfQ0xFQVJfUFNGTEFHKF9NLCBfRikgICAgICgoX00pLT5QU0ZsYWdzICY9IH4oX0YpKQorI2RlZmluZSBSVE1QX0NMRUFSX1BTRkxBR1MoX00pICAgICAgICAoKF9NKS0+UFNGbGFncyA9IDApCisjZGVmaW5lIFJUTVBfVEVTVF9QU0ZMQUcoX00sIF9GKSAgICAgICgoKF9NKS0+UFNGbGFncyAmIChfRikpICE9IDApCisjZGVmaW5lIFJUTVBfVEVTVF9QU0ZMQUdTKF9NLCBfRikgICAgICgoKF9NKS0+UFNGbGFncyAmIChfRikpID09IChfRikpCisKICNkZWZpbmUgT1BTVEFUVVNfU0VUX0ZMQUcoX3BBZCwgX0YpICAgICAoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyB8PSAoX0YpKQogI2RlZmluZSBPUFNUQVRVU19DTEVBUl9GTEFHKF9wQWQsIF9GKSAgICgoX3BBZCktPkNvbW1vbkNmZy5PcFN0YXR1c0ZsYWdzICY9IH4oX0YpKQogI2RlZmluZSBPUFNUQVRVU19URVNUX0ZMQUcoX3BBZCwgX0YpICAgICgoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyAmIChfRikpICE9IDApCkBAIC00NzgsNyArNDgzLDYgQEAKIC8vCiAjZGVmaW5lIE1BWF9CVVNZX0NPVU5UICAxMDAgICAgICAgICAvLyBOdW1iZXIgb2YgcmV0cnkgYmVmb3JlIGZhaWxpbmcgYWNjZXNzIEJCUCAmIFJGIGluZGlyZWN0IHJlZ2lzdGVyCiAvLwotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBSVE1QX1JGX0lPX1dSSVRFMzIoX0EsIF9WKSAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgUEhZX0NTUjRfU1RSVUMgIFZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjQyLDcgKzY0Niw2IEBACiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNkZWZpbmUgICAgIE1BUF9DSEFOTkVMX0lEX1RPX0tIWihjaCwga2h6KSAgeyAgICAgICAgICAgICAgIFwKQEAgLTg5NCw3ICs4OTcsNiBAQAogLy8gRW5xdWV1ZSB0aGlzIGZyYW1lIHRvIE1MTUUgZW5naW5lCiAvLyBXZSBuZWVkIHRvIGVucXVldWUgdGhlIHdob2xlIGZyYW1lIGJlY2F1c2UgTUxNRSBuZWVkIHRvIHBhc3MgZGF0YSB0eXBlCiAvLyBpbmZvcm1hdGlvbiBmcm9tIDgwMi4xMSBoZWFkZXIKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgUkVQT1JUX01HTVRfRlJBTUVfVE9fTUxNRShfcEFkLCBXY2lkLCBfcEZyYW1lLCBfRnJhbWVTaXplLCBfUnNzaTAsIF9Sc3NpMSwgX1Jzc2kyLCBfUGxjcFNpZ25hbCkgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVUlOVDMyIEhpZ2gzMlRTRiwgTG93MzJUU0Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTkwMiw3ICs5MDQsNiBAQAogICAgIFJUTVBfSU9fUkVBRDMyKF9wQWQsIFRTRl9USU1FUl9EVzAsICZMb3czMlRTRik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNbG1lRW5xdWV1ZUZvclJlY3YoX3BBZCwgV2NpZCwgSGlnaDMyVFNGLCBMb3czMlRTRiwgKFVDSEFSKV9Sc3NpMCwgKFVDSEFSKV9Sc3NpMSwoVUNIQVIpX1Jzc2kyLF9GcmFtZVNpemUsIF9wRnJhbWUsIChVQ0hBUilfUGxjcFNpZ25hbCk7ICAgXAogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjZGVmaW5lIE5ESVNfUVVFUllfQlVGRkVSKF9OZGlzQnVmLCBfcHBWQSwgX3BCdWZMZW4pICAgICAgICAgICAgICAgICAgICBcCiAgICAgTmRpc1F1ZXJ5QnVmZmVyKF9OZGlzQnVmLCBfcHBWQSwgX3BCdWZMZW4pCkBAIC05MTksOSArOTIwLDEwIEBACiAjZGVmaW5lIFNUQV9QT1JUX1NFQ1VSRUQoX3BBZCkgXAogeyBcCiAJX3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7IFwKLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZfcEFkLT5NYWNUYWJMb2NrKTsgXAorCVJUTVBfU0VUX1BTRkxBRyhfcEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOyBcCisJTmRpc0FjcXVpcmVTcGluTG9jaygmKF9wQWQpLT5NYWNUYWJMb2NrKTsgXAogCV9wQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBvcnRTZWN1cmVkID0gX3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkOyBcCi0JTmRpc1JlbGVhc2VTcGluTG9jaygmX3BBZC0+TWFjVGFiTG9jayk7IFwKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoX3BBZCktPk1hY1RhYkxvY2spOyBcCiB9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKQEAgLTEwMDAsOSArMTAwMiw3IEBACiAJVUNIQVIgCQlEYXRhT2Zmc2V0OwogCVVTSE9SVCAJCURhdGFzaXplOwogCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsKLSNpZmRlZiBSVDI4NjAKIAlORElTX1BIWVNJQ0FMX0FERFJFU1MgICBBbGxvY1BhOyAgICAgICAgICAgIC8vIFR4QnVmIHBoeXNpY2FsIGFkZHJlc3MKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIH0gICBSVE1QX1JFT1JERVJCVUYsICpQUlRNUF9SRU9SREVSQlVGOwogCiAvLwpAQCAtMTEwMSw2ICsxMTAxLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX0NPVU5URVJfUkFMSU5LIHsKIAlVTE9ORyAgICAgICAgICAgVHJhbnNtaXR0ZWRCeXRlQ291bnQ7ICAgLy8gYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsdXJlLCB1c2VkIHRvIGNhbGN1bGF0ZSBUWCB0aHJvdWdocHV0CisJVUxPTkcgICAgICAgICAgIExhc3RSZWNlaXZlZEJ5dGVDb3VudDsKIAlVTE9ORyAgICAgICAgICAgUmVjZWl2ZWRCeXRlQ291bnQ7ICAgICAgLy8gYm90aCBDUkMgb2theSBhbmQgQ1JDIGVycm9yLCB1c2VkIHRvIGNhbGN1bGF0ZSBSWCB0aHJvdWdocHV0CiAJVUxPTkcgICAgICAgICAgIEJlZW5EaXNhc3NvY2lhdGVkQ291bnQ7CiAJVUxPTkcgICAgICAgICAgIEJhZENRSUF1dG9SZWNvdmVyeUNvdW50OwpAQCAtMTQzNiwxMSArMTQzNyw5IEBACiAJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgQVBTRFBlcmlvZGljVGltZXI7CiAJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgTGlua0Rvd25UaW1lcjsKIAlSQUxJTktfVElNRVJfU1RSVUNUICAgICBMaW5rVXBUaW1lcjsKLSNpZmRlZiBSVDI4NjAKICAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICBiUHNQb2xsVGltZXJSdW5uaW5nOwogICAgIFJBTElOS19USU1FUl9TVFJVQ1QgICAgIFBzUG9sbFRpbWVyOwogCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIFJhZGlvT25PZmZUaW1lcjsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlVTE9ORyAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1JvdW5kOwogCVVMT05HICAgICAgICAgICAgICAgICAgIE9uZVNlY1BlcmlvZGljUm91bmQ7CiAKQEAgLTIyMjgsOSArMjIyNyw3IEBACiAJUlRfSFRfUEhZX0lORk8JCQkJCURlc2lyZWRIdFBoeUluZm87CiAJQk9PTEVBTgkJCQkJCQliQXV0b1R4UmF0ZVN3aXRjaDsKIAotI2lmZGVmIFJUMjg2MAogICAgIFVDSEFSICAgICAgIEJCUFIzOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAogCVVDSEFSCQkJCUlFRUU4MDIxMWRDbGllbnRNb2RlOwpAQCAtMjY2Myw3ICsyNjYwLDYgQEAKIAlQTkVUX0RFVgkJCQluZXRfZGV2OwogCVVMT05HCQkJCQlWaXJ0dWFsSWZDbnQ7CiAKLSNpZmRlZiBSVDI4NjAKICAgICBVU0hPUlQJCSAgICAgICAgICAgIExua0N0cmxCaXRNYXNrOwogICAgIFVTSE9SVAkJICAgICAgICAgICAgUkxua0N0cmxDb25maWd1cmF0aW9uOwogICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIFJMbmtDdHJsT2Zmc2V0OwpAQCAtMjY3MSw3ICsyNjY3LDkgQEAKICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICBIb3N0TG5rQ3RybE9mZnNldDsKIAlVU0hPUlQJCSAgICAgICAgICAgIFBDSWVQb3dlclNhdmVMZXZlbDsKICAgIAlCT09MRUFOCQkJCQliUENJY2xrT2ZmOwkJCQkJCS8vIGZsYWcgdGhhdCBpbmRpY2F0ZSBpZiB0aGUgUElDRSBwb3dlciBzdGF0dXMgaW4gQ29uZmlndXJhdGlvbiBTUGFjZS4uCi0JQk9PTEVBTgkJCQkJYlBDSWNsa09mZkRpc2FibGVUeDsJCQkvLworICAgCVVMT05HCQkJCQlDaGVja0RtYUJ1c3lDb3VudDsgIC8vIENoZWNrIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgQ291bnQuCisgICAJVVNIT1JUCQkJCQlUaGlzVGJ0dE51bVRvTmV4dFdha2VVcDsKKwlVTE9ORwkJCQkJU2FtZVJ4Qnl0ZUNvdW50OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI2ODgsNyArMjY4Niw2IEBACiAJUlRNUF9ETUFCVUYgICAgICAgICAgICAgUnhEZXNjUmluZzsgICAgICAgICAgICAgICAgIC8vIFNoYXJlZCBtZW1vcnkgZm9yIFJYIGRlc2NyaXB0b3JzCiAJUlRNUF9ETUFCVUYgICAgICAgICAgICAgVHhEZXNjUmluZ1tOVU1fT0ZfVFhfUklOR107IAkvLyBTaGFyZWQgbWVtb3J5IGZvciBUeCBkZXNjcmlwdG9ycwogCVJUTVBfVFhfUklORyAgICAgICAgICAgIFR4UmluZ1tOVU1fT0ZfVFhfUklOR107ICAgICAJLy8gQUMwfjQgKyBIQ0NBCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIGlycV9sb2NrOwpAQCAtMjcyMSwxMCArMjcxOCw4IEBACiAvKiAgICAgIFJ4IHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIFJUMjg2MAogCVJUTVBfUlhfUklORyAgICAgICAgICAgIFJ4UmluZzsKIAlORElTX1NQSU5fTE9DSyAgICAgICAgICBSeFJpbmdMb2NrOyAgICAgICAgICAgICAgICAgLy8gUnggUmluZyBzcGlubG9jawotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApAQCAtMjg5NSw2ICsyODkwLDcgQEAKIAogCS8vIGZsYWdzLCBzZWUgZlJUTVBfQURBUFRFUl94eHggZmxhZ3MKIAlVTE9ORyAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwcmVzZW50IGN1cnJlbnQgZGV2aWNlIHN0YXR1cworCVVMT05HICAgICAgICAgICAgICAgICAgIFBTRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAvLyBQb3dlciBTYXZlIG9wZXJhdGlvbiBmbGFnLgogCiAJLy8gY3VycmVudCBUWCBzZXF1ZW5jZSAjCiAJVVNIT1JUICAgICAgICAgICAgICAgICAgU2VxdWVuY2U7CkBAIC0zMTgxLDcgKzMxNzcsNiBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0jaWZkZWYgUlQyODYwCiAvLwogLy8gRW5hYmxlICYgRGlzYWJsZSBOSUMgaW50ZXJydXB0IHZpYSB3cml0aW5nIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyCiAvLyBTaW5jZSBpdCB1c2UgQURBUFRFUiBzdHJ1Y3R1cmUsIGl0IGhhdmUgdG8gYmUgcHV0IGFmdGVyIHN0cnVjdHVyZSBkZWZpbml0aW9uLgpAQCAtMzIxNCw3ICszMjA5LDYgQEAKIAkvL1JUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9JTlRfRU5BLCAweDAwMDAwMDMwKTsgLy8gMSA6IGVuYWJsZQogCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjaWZkZWYgUlRfQklHX0VORElBTgogc3RhdGljIGlubGluZSBWT0lECVdyaXRlQmFja1RvRGVzY3JpcHRvcigKQEAgLTMyOTEsNyArMzI4NSw2IEBACiAJCUNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHJlYWQgb3IgdXBkYXRlIGRlc2NyaXB0b3IKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgaW5saW5lIFZPSUQJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoCiAJSU4JUFVDSEFSCQkJcERhdGEsCiAJSU4JVUxPTkcJCQlEZXNjcmlwdG9yVHlwZSkKQEAgLTMzMDEsNyArMzI5NCw2IEBACiAJKigoVUlOVDMyICopKHBEYXRhICsxMikpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSArIDEyKSkpOwkvLyBCeXRlIDEyfjE1CiAJKigoVUlOVDMyICopKHBEYXRhICsgNCkpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSArIDQpKSk7CQkJCS8vIEJ5dGUgNH43LCB0aGlzIG11c3QgYmUgc3dhcHBlZCBsYXN0CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIC8qCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNTUwLDYgKzM1NDIsOSBAQAogCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAogCUlOICBCT09MRUFOCQliSGFyZFJlc2V0KTsKIAorVk9JRCBOSUNSZXN0b3JlQkJQVmFsdWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCiBWT0lEIE5JQ0lzc3VlUmVzZXQoCiAJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOwogCkBAIC00MjA4LDcgKzQyMDMsNyBAQAogCiBWT0lEIEFzaWNGb3JjZVdha2V1cCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKLQlJTiBCT09MRUFOICAgIGJGcm9tVHgpOworCUlOIFVDSEFSICAgIAkgTGV2ZWwpOwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiBWT0lEIEFzaWNTZXRCc3NpZCgKQEAgLTQzMDQsMTEgKzQyOTksOSBAQAogCUlOIFVDSEFSICAgICAgICAgQXJnMCwKIAlJTiBVQ0hBUiAgICAgICAgIEFyZzEpOwogCi0jaWZkZWYgUlQyODYwCiBCT09MRUFOIEFzaWNDaGVja0NvbW1hbk9rKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkLAogCUlOIFVDSEFSCQkgQ29tbWFuZCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIFZPSUQgTWFjQWRkclJhbmRvbUJzc2lkKAogCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLApAQCAtNjk3OCw3ICs2OTcxLDYgQEAKIAogdm9pZCB0YnR0X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIAotI2lmZGVmIFJUMjg2MAogLy8KIC8vIEZ1bmN0aW9uIFByb3RvdHlwZSBpbiBjbW1fZGF0YV8yODYwLmMKIC8vCkBAIC03MDY5LDcgKzcwNjEsNyBAQAogCiBWT0lEIFJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKLQlJTiBCT09MRUFOICAgICAgIGJGcm9tVHgpOworCUlOIFVDSEFSICAgIAkgTGV2ZWwpOwogCiBWT0lEIFJUMjh4eFBjaVN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkLApAQCAtNzA5Myw3ICs3MDg1LDYgQEAKIAogVk9JRCBSVDI4eHhQY2lNbG1lUmFkaW9PRkYoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiBWT0lEIEFzaWNUdXJuT2ZmUkZDbGsoCiAJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCkBAIC03MTMyLDYgKzcxMjMsMTggQEAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKIFZPSUQgQXNpY1N0YUJicFR1bmluZygKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQXNpY1Jlc2V0RnJvbURNQUJ1c3koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNSZXNldEJCUCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQXNpY1Jlc2V0TUFDKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljUmVzZXRQQkYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiB2b2lkIFJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RlZi5oCmluZGV4IGJlOTgyMTQuLjI1YTUzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9kZWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfZGVmLmgKQEAgLTExMSw3ICsxMTEsNiBAQAogLy8gRW50cnkgbnVtYmVyIGZvciBlYWNoIERNQSBkZXNjcmlwdG9yIHJpbmcKIC8vCiAKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgVFhfUklOR19TSVpFICAgICAgICAgICAgNjQgLy82NAogI2RlZmluZSBNR01UX1JJTkdfU0laRSAgICAgICAgICAxMjgKICNkZWZpbmUgUlhfUklOR19TSVpFICAgICAgICAgICAgMTI4IC8vNjQKQEAgLTExOSw3ICsxMTgsNiBAQAogI2RlZmluZSBNQVhfRE1BX0RPTkVfUFJPQ0VTUyAgICBUWF9SSU5HX1NJWkUKICNkZWZpbmUgTUFYX1RYX0RPTkVfUFJPQ0VTUyAgICAgVFhfUklOR19TSVpFIC8vOAogI2RlZmluZSBMT0NBTF9UWEJVRl9TSVpFICAgICAgICAyCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVApAQCAtMjEyLDYgKzIxMCwxOSBAQAogI2RlZmluZSBmT1BfU1RBVFVTX1dBS0VVUF9OT1cgICAgICAgICAgICAgICAweDAwMDA4MDAwCiAjZGVmaW5lIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFICAgICAgIDB4MDAwMjAwMDAKIAorLy8KKy8vICBSVE1QX0FEQVBURVIgUFNGbGFncyA6IHJlbGF0ZWQgdG8gYWR2YW5jZWQgcG93ZXIgc2F2ZS4KKy8vCisvLyBJbmRpY2F0ZSB3aGV0aGVyIGRyaXZlciBjYW4gZ28gdG8gc2xlZXAgbW9kZSBmcm9tIG5vdy4gVGhpcyBmbGFnIGlzIHVzZWZ1bCBBRlRFUiBsaW5rIHVwCisjZGVmaW5lIGZSVE1QX1BTX0NBTl9HT19TTEVFUCAgICAgICAgICAweDAwMDAwMDAxCisvLyBJbmRpY2F0ZSB3aGV0aGVyIGRyaXZlciBoYXMgaXNzdWUgYSBMaW5rQ29udHJvbCBjb21tYW5kIHRvIFBDSWUgTDEKKyNkZWZpbmUgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQgICAgICAgICAgMHgwMDAwMDAwMgorLy8gSW5kaWNhdGUgZHJpdmVyIHNob3VsZCBkaXNhYmxlIGtpY2sgb2ZmIGhhcmR3YXJlIHRvIHNlbmQgcGFja2V0cyBmcm9tIG5vdy4KKyNkZWZpbmUgZlJUTVBfUFNfRElTQUJMRV9UWCAgICAgICAgIDB4MDAwMDAwMDQKKy8vIEluZGljYXRlIGRyaXZlciBzaG91bGQgSU1NRURJQVRFTFkgZm8gdG8gc2xlZXAgYWZ0ZXIgcmVjZWl2aW5nIEFQJ3MgYmVhY29uIGluIHdoaWNoICBkb2Vzbid0IGluZGljYXRlIHVuaWNhdGUgbm9yIG11bHRpY2FzdCBwYWNrZXRzIGZvciBtZQorLy8uIFRoaXMgZmxhZyBpcyB1c2VkIE9OTFkgaW4gUlRNUEhhbmRsZVJ4RG9uZUludGVycnVwdCByb3V0aW5lLgorI2RlZmluZSBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cgICAgICAgICAweDAwMDAwMDA4CisKICNpZmRlZiBET1QxMU5fRFJBRlQzCiAjZGVmaW5lIGZPUF9TVEFUVVNfU0NBTl8yMDQwICAgICAgICAgICAgICAgCSAgICAweDAwMDQwMDAwCiAjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLwpAQCAtMTUxNCwxMiArMTUyNSwxNCBAQAogI2RlZmluZSBNQ0FTVF9IVE1JWAkJMwogI2VuZGlmIC8vIE1DQVNUX1JBVEVfU1BFQ0lGSUMgLy8KIAotLy8gRm9yIEFzaWNSYWRpb09mZi9Bc2ljUmFkaW9PbiBmdW5jdGlvbgotI2RlZmluZSBET1QxMVBPV0VSU0FWRQkJMAotI2RlZmluZSBHVUlSQURJT19PRkYJCTEKLSNkZWZpbmUgUlRNUF9IQUxUCQkgICAgMgotI2RlZmluZSBHVUlfSURMRV9QT1dFUl9TQVZFCQkzCi0vLyAtLQorLy8gRm9yIEFzaWNSYWRpb09mZi9Bc2ljUmFkaW9Pbi9Bc2ljRm9yY2VXYWtldXAgZnVuY3Rpb24KKy8vIFRoaXMgaXMgdG8gaW5kaWNhdGUgZnJvbSB3aGVyZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisjZGVmaW5lIERPVDExUE9XRVJTQVZFCQkwCS8vIFRPIGRvIC4xMSBwb3dlciBzYXZlIHNsZWVwCisjZGVmaW5lIEdVSVJBRElPX09GRgkJMQkvLyBUbyBwZXJmb3JtIFJhZGlvIE9GZiBjb21tYW5kIGZyb20gR1VJCisjZGVmaW5lIFJUTVBfSEFMVAkJCTIJLy8gQ2FsbGVkIGZyb20gSGFsdCBoYW5kbGVyLgorI2RlZmluZSBHVUlfSURMRV9QT1dFUl9TQVZFCTMJLy8gQ2FsbCB0byBzbGVlcCBiZWZvcmUgbGluayB1cCB3aXRoIEFQCisjZGVmaW5lIEZST01fVFgJCQkJNAkvLyBGb3JjZSB3YWtlIHVwIGZyb20gVHggcGFja2V0LgorCiAKIAogLy8gZGVmaW5pdGlvbiBmb3IgV3BhU3VwcG9ydCBmbGFnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9hc3NvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXNzb2MuYwppbmRleCA0MmRiNzUzLi4zNGYxYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9hc3NvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Fzc29jLmMKQEAgLTQ3MywxMiArNDczLDcgQEAKIAkJCQlSU05JZSA9IElFX1dQQTI7CiAJCQl9CiAKLSNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAotI2lmZGVmIFNJT0NTSVdHRU5JRQotCQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSAxKQotI2VuZGlmIC8vIFNJT0NTSVdHRU5JRSAvLwotI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCi0gICAgICAgICAgICAJUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIEJTUzApOworICAgICAgICAgICAgUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIEJTUzApOwogCiAgICAgICAgICAgICAvLyBDaGVjayBmb3IgV1BBIFBNSyBjYWNoZSBsaXN0CiAJCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKQEAgLTUwNCwxNyArNDk5LDYgQEAKIAkJCQl9CiAJCQl9CiAKLSNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAotI2lmZGVmIFNJT0NTSVdHRU5JRQotCQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSAxKQotCQkJewotCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgCQkmdG1wLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAJcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAkJCXBBZC0+U3RhQ2ZnLlJTTl9JRSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgCUVORF9PRl9BUkdTKTsKLQkJCX0KLQkJCWVsc2UKLSNlbmRpZgotI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCiAJCQl7CiAJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAJCSZ0bXAsCiAJCQkJICAgICAgICAgICAgICAJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJTTkllLApAQCAtNTI1LDExICs1MDksNiBAQAogCiAJCQlGcmFtZUxlbiArPSB0bXA7CiAKLSNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAotI2lmZGVmIFNJT0NTSVdHRU5JRQotCQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSAxKQotI2VuZGlmCi0jZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KIAkJCXsKIAkgICAgICAgICAgICAvLyBBcHBlbmQgVmFyaWFibGUgSUUKIAkgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZSU05JZSwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKaW5kZXggMzZmMjhmOC4uZDhiY2M3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Nvbm5lY3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKQEAgLTMzNyw2ICszMzcsMTAgQEAKIAlNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgICBEaXNhc3NvY1JlcTsKIAlVTE9ORwkJCQkJICAgTm93OwogCisJLy8gQkJQIGFuZCBSRiBhcmUgbm90IGFjY2Vzc2libGUgaW4gUFMgbW9kZSwgd2UgaGFzIHRvIHdha2UgdGhlbSB1cCBmaXJzdAorCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQlBc2ljRm9yY2VXYWtldXAocEFkLCBSVE1QX0hBTFQpOworCiAJLy8gU3RlcCAxLiByZWNvcmQgdGhlIGRlc2lyZWQgdXNlciBzZXR0aW5ncyB0byBNbG1lQXV4CiAJTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7CiAJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBPaWRTc2lkLT5Tc2lkLCBwT2lkU3NpZC0+U3NpZExlbmd0aCk7CkBAIC0xMjQwLDYgKzEyNDQsMTMgQEAKIAlVQ0hBUglWYWx1ZSA9IDAsIGlkeDsKIAlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5OwogCisJaWYgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpCisJeworCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9IQUxUKTsKKwkJUlRNUHVzZWNEZWxheSg2MDAwKTsKKwkJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7CisJfQorCiAJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CiAKIAkvLwpAQCAtMTI2NCw3ICsxMjc1LDYgQEAKIAkvL3J0Mjg2MGIuIERvbid0IGtub3cgd2h5IG5lZWQgdGhpcwogCVN3aXRjaEJldHdlZW5XZXBBbmRDa2lwKHBBZCk7CiAKLSNpZmRlZiBSVDI4NjAKIAkvLyBCZWZvcmUgcG93ZXIgc2F2ZSBiZWZvcmUgbGluayB1cCBmdW5jdGlvbiwgV2Ugd2lsbCBmb3JjZSB1c2UgMVIuCiAJLy8gU28gYWZ0ZXIgbGluayB1cCwgY2hlY2sgUnggYW50ZW5uYSAjIGFnYWluLgogCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKQEAgLTEyODIsNyArMTI5Miw2IEBACiAJfQogCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKIAlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJaWYgKEJzc1R5cGUgPT0gQlNTX0FESE9DKQogCXsKQEAgLTEzMzAsOSArMTMzOSw3IEBACiAJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKIAkJVmFsdWUgJj0gKH4weDIwKTsKIAkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOwotI2lmZGVmIFJUMjg2MAogICAgICAgICBwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKIAkJRGF0YSAmPSAweGZmZmZmZmZlOwpAQCAtMTM2Nyw5ICsxMzc0LDcgQEAKIAkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmVmFsdWUpOwogCSAgICBWYWx1ZSB8PSAoMHgyMCk7CiAJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCiAJCXsKQEAgLTE0MDAsOSArMTQwNSw3IEBACiAJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKIAkJVmFsdWUgJj0gKH4weDIwKTsKIAkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOwotI2lmZGVmIFJUMjg2MAogICAgICAgICBwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKIAkJewpAQCAtMTU5OCw2ICsxNjAxLDggQEAKIAkJCUlWID0gMDsKIAkJCUlWIHw9IChwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPDwgMzApOwogCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIEJTU0lEX1dDSUQsIElWLCAwKTsKKworCQkJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwogCQl9CiAJCS8vIE5PVEU6CiAJCS8vIHRoZSBkZWNpc2lvbiBvZiB1c2luZyAic2hvcnQgc2xvdCB0aW1lIiBvciBub3QgbWF5IGNoYW5nZSBkeW5hbWljYWxseSBkdWUgdG8KQEAgLTE5MTksNiArMTkyNCw3IEBACiAJfQogCiAJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpOwogCiAjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCiAjaWZkZWYgRE9UMTFOX0RSQUZUMwpAQCAtMTk2MSw2ICsxOTY3LDcgQEAKIAlJTiAgQk9PTEVBTiAgICAgIElzUmVxRnJvbUFQKQogewogCVVDSEFSCQkJICAgIGksIEJ5dGVWYWx1ZSA9IDA7CisJQk9PTEVBTgkJQ2FuY2VsbGVkOwogCiAJLy8gRG8gbm90aGluZyBpZiBtb25pdG9yIG1vZGUgaXMgb24KIAlpZiAoTU9OSVRPUl9PTihwQWQpKQpAQCAtMTk3Miw2ICsxOTc5LDEyIEBACiAJCXJldHVybjsKICNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCiAKKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0dPX1RPX1NMRUVQX05PVyk7CisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCQkmQ2FuY2VsbGVkKTsKKworCS8vIE5vdCBhbGxvdyBnbyB0byBzbGVlcCB3aXRoaW4gbGlua2Rvd24gZnVuY3Rpb24uCisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCiAgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQogCXsKIAkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CkBAIC0xOTgwLDcgKzE5OTMsNiBAQAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gISEhXG4iKSk7CiAJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKIAotI2lmZGVmIFJUMjg2MAogICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAgICAgewogCSAgICBCT09MRUFOIENhbmNlbGxlZDsKQEAgLTE5ODgsMTcgKzIwMDAsMTUgQEAKICAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCSZDYW5jZWxsZWQpOwogICAgIH0KIAotICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpIHx8CisJCVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkgfHwKKwkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkKICAgICB7Ci0gICAgICAgIEFVVE9fV0FLRVVQX1NUUlVDIEF1dG9XYWtldXBDZmc7Ci0JCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOwotICAgICAgICBBdXRvV2FrZXVwQ2ZnLndvcmQgPSAwOwotCSAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7CisJCUFzaWNGb3JjZVdha2V1cChwQWQsIFJUTVBfSEFMVCk7CiAgICAgICAgIE9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwogICAgIH0KIAogICAgIHBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCWlmIChBREhPQ19PTihwQWQpKQkJLy8gQWRob2MgbW9kZSBsaW5rIGRvd24KIAl7CiAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gMSEhIVxuIikpOwpAQCAtMjI2Niw2ICsyMjc2LDkgQEAKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQVhfTEVOX0NGRywgMHgxZmZmKTsKIAlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKIAorCS8vIEFsbG93IGdvIHRvIHNsZWVwIGFmdGVyIGxpbmtkb3duIHN0ZXBzLgorCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkgewpAQCAtMjUxMCw3ICsyNTIzLDYgQEAKIAogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KLSNpZmRlZiBSVDI4NjAKIFZPSUQgQ29tcG9zZVBzUG9sbCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCkKIHsKQEAgLTI1MzQsNyArMjU0Niw2IEBACiAJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CiAJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvZGxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9kbHMuYwppbmRleCA3OGZiMjg5Li44NzNjZjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9kbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9kbHMuYwpAQCAtMTQxOSw3ICsxNDE5LDYgQEAKIAkJCQkvL0FzaWNBZGRLZXlFbnRyeShwQWQsIChVU0hPUlQpKGkgKyAyKSwgQlNTMCwgMCwgJlBhaXJ3aXNlS2V5LCBUUlVFLCBUUlVFKTsJLy8gcmVzZXJ2ZSAwIGZvciBtdWx0aWNhc3QsIDEgZm9yIHVuaWNhc3QKIAkJCQkvL0FzaWNVcGRhdGVSeFdDSURUYWJsZShwQWQsIChVU0hPUlQpKGkgKyAyKSwgcEFkZHIpOwogCQkJCS8vIEFkZCBQYWlyLXdpc2Uga2V5IHRvIEFzaWMKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgICAgIAlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeShwQWQsCiAJCQkJCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwKIAkJCQkJCQkJCQkoVUNIQVIpcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELApAQCAtMTQzMSw3ICsxNDMwLDYgQEAKIAkJCQkJCQkJCQkgIFBhaXJ3aXNlS2V5LkNpcGhlckFsZywKIAkJCQkJCQkJCQkgIHBFbnRyeSk7CiAKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleSwgJlBhaXJ3aXNlS2V5LCBzaXplb2YoQ0lQSEVSX0tFWSkpOwogCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIChQZWVyIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpIFxuIikpOwogCkBAIC0xNDc3LDcgKzE0NzUsNiBAQAogCQkJCS8vQXNpY0FkZEtleUVudHJ5KHBBZCwgKFVTSE9SVCkoaSArIDIpLCBCU1MwLCAwLCAmUGFpcndpc2VLZXksIFRSVUUsIFRSVUUpOwkvLyByZXNlcnZlIDAgZm9yIG11bHRpY2FzdCwgMSBmb3IgdW5pY2FzdAogCQkJCS8vQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHBBZCwgKFVTSE9SVCkoaSArIDIpLCBwQWRkcik7CiAJCQkJLy8gQWRkIFBhaXItd2lzZSBrZXkgdG8gQXNpYwotI2lmZGVmIFJUMjg2MAogICAgICAgICAgICAgCUFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KHBBZCwKIAkJCQkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyLAogCQkJCQkJCQkJCShVQ0hBUilwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQsCkBAIC0xNDg4LDcgKzE0ODUsNiBAQAogCQkJCQkJCQkJCSAgMCwKIAkJCQkJCQkJCQkgIFBhaXJ3aXNlS2V5LkNpcGhlckFsZywKIAkJCQkJCQkJCQkgIHBFbnRyeSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXksICZQYWlyd2lzZUtleSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKIAkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJlY2VpdmUgU1RBS2V5IE1lc3NhZ2UtMSAoSW5pdGlhdG9yIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpXG4iKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMKaW5kZXggMzZhZmYyNC4uYzVlNzZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuID4gMCkKICAgICAJCQkJewotI2lmZGVmIFJUMjg2MAogCQkJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKIAogCQkJCQkJLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKQEAgLTg5LDcgKzg4LDYgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCQkJLy8gRm9yIFByZXZlbnRpbmcgU2hhcmRLZXkgVGFibGUgaXMgY2xlYXJlZCBieSByZW1vdmUga2V5IHByb2NlZHVyZS4KICAgICAJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOwogCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5LZXlMZW47CkBAIC02OTMsMTQgKzY5MSwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAotI2lmZGVmIFJUMjg2MAogCQlpZiAoUnhQcm9jZXNzZWQrKyA+IE1BWF9SWF9QUk9DRVNTX0NOVCkKIAkJewogCQkJLy8gbmVlZCB0byByZXNjaGVkdWxlIHJ4IGhhbmRsZQogCQkJYlJlc2NoZWR1bGUgPSBUUlVFOwogCQkJYnJlYWs7CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlSeFByb2Nlc3NlZCArKzsgLy8gdGVzdAogCkBAIC04MTEsNiArODA3LDEzIEBACiAJCX0KIAl9CiAKKwkvLyBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cgaXMgc2V0IGlmIHJlY2VpdmluZyBiZWFjb24uCisJaWYgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpICYmIChJTkZSQV9PTihwQWQpKSkKKwl7CisJCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKTsKKwkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBwQWQtPlRoaXNUYnR0TnVtVG9OZXh0V2FrZVVwKTsKKwkJYlJlc2NoZWR1bGUgPSBGQUxTRTsKKwl9CiAJcmV0dXJuIGJSZXNjaGVkdWxlOwogfQogCkBAIC04MjgsNyArODMxLDcgQEAKIFZPSUQJUlRNUEhhbmRsZVR3YWtldXBJbnRlcnJ1cHQoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQpCiB7Ci0JQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRkFMU0UpOworCUFzaWNGb3JjZVdha2V1cChwQWQsIERPVDExUE9XRVJTQVZFKTsKIH0KIAogLyoKQEAgLTEyMjAsNyArMTIyMyw2IEBACiAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi0jaWZkZWYgUlQyODYwCiBORElTX1NUQVRVUyBSVE1QRnJlZVRYRFJlcXVlc3QoCiAJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAogCUlOCQlVQ0hBUgkJCVF1ZUlkeCwKQEAgLTEyNjQsNyArMTI2Niw2IEBACiAKIAlyZXR1cm4gKFN0YXR1cyk7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCkBAIC0xODg5LDcgKzE4OTAsOCBAQAogCQkvLwogCQkvLyBLaWNrIG91dCBUeAogCQkvLwotCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJCWlmICghUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpKQorCQkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOwogCiAJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKIAkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOwpAQCAtMjAxOSw3ICsyMDIxLDggQEAKIAkvLwogCS8vIEtpY2sgb3V0IFR4CiAJLy8KLQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCkpCisJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKIH0KICNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KIApAQCAtMjEzOSw3ICsyMTQyLDggQEAKIAkvLwogCS8vIEtpY2sgb3V0IFR4CiAJLy8KLQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCkpCisJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKIH0KIAogCkBAIC0yMjQ5LDcgKzIyNTMsOCBAQAogCS8vCiAJLy8gS2ljayBvdXQgVHgKIAkvLwotCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKKwlpZiAoIVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKSkKKwkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOwogCiB9CiAKQEAgLTI1MjYsNyArMjUzMSw3IEBACiAJaWYgKChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCiAJewogCSAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0ZvcmNlV2FrZXVwIEF0IEhhcmRUeFxuIikpOwotCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRlJPTV9UWCk7CiAJfQogCiAJLy8gSXQgc2hvdWxkIG5vdCBjaGFuZ2UgUFNNIGJpdCwgd2hlbiBBUFNEIHR1cm4gb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zeW5jLmMKaW5kZXggZDE5NmY4NS4uMTQ4MDM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvc3luYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3N5bmMuYwpAQCAtMjI4LDcgKzIyOCw2IEBACiAJLy8gSW5jcmVhc2UgdGhlIHNjYW4gcmV0cnkgY291bnRlcnMuCiAJcEFkLT5TdGFDZmcuU2NhbkNudCsrOwogCi0jaWZkZWYgUlQyODYwCiAgICAgaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpICYmCiAgICAgICAgIChJRExFX09OKHBBZCkpICYmCiAJCShwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkgJiYKQEAgLTIzNiw3ICsyMzUsNiBAQAogCXsKIAkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBHVUlfSURMRV9QT1dFUl9TQVZFKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkvLyBmaXJzdCBjaGVjayB0aGUgcGFyYW1ldGVyIHNhbml0eQogCWlmIChNbG1lU2NhblJlcVNhbml0eShwQWQsCkBAIC0zNDksNyArMzQ3LDYgQEAKIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBNbG1lSm9pblJlcUFjdGlvbihCU1MgIyVsZClcbiIsIHBJbmZvLT5Cc3NJZHgpKTsKIAotI2lmZGVmIFJUMjg2MAogICAgIGlmICgoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKSAmJgogICAgICAgICAoSURMRV9PTihwQWQpKSAmJgogCQkocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpICYmCkBAIC0zNTcsNyArMzU0LDYgQEAKIAl7CiAJCVJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgR1VJX0lETEVfUE9XRVJfU0FWRSk7CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMKIAlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CkBAIC0xNTMyLDEzICsxNTI4LDEwIEBACiAJCQkJLy8gIDUuIG90aGVyd2lzZSwgcHV0IFBIWSBiYWNrIHRvIHNsZWVwIHRvIHNhdmUgYmF0dGVyeS4KIAkJCQlpZiAoTWVzc2FnZVRvTWUpCiAJCQkJewotI2lmZGVmIFJUMjg2MAogCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogCQkJCQl7CiAJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBwQWQtPlN0YUNmZy5CQlBSMyk7Ci0JCQkJCQkvLyBUdXJuIGNsayB0byA4ME1oei4KIAkJCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlICYmCiAJCQkJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFICYmIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSSAmJiBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPKQogCQkJCQl7CkBAIC0xNTQ5LDEyICsxNTQyLDEwIEBACiAJCQkJfQogCQkJCWVsc2UgaWYgKEJjYXN0RmxhZyAmJiAoRHRpbUNvdW50ID09IDApICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKSkKIAkJCQl7Ci0jaWZkZWYgUlQyODYwCiAJCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAJCQkJCXsKIAkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIHBBZC0+U3RhQ2ZnLkJCUFIzKTsKIAkJCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCX0KIAkJCQllbHNlIGlmICgocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJfHwKIAkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKQEAgLTE1NjgsMTIgKzE1NTksMTAgQEAKIAkJCQl7CiAJCQkJCS8vIFRPRE86IGNvbnNpZGVyIHNjaGVkdWxlZCBIQ0NBLiBtaWdodCBub3QgYmUgcHJvcGVyIHRvIHVzZSB0cmFkaXRpb25hbCBEVElNLWJhc2VkIHBvd2VyLXNhdmluZyBzY2hlbWUKIAkJCQkJLy8gY2FuIHdlIGNoZWF0IGhlcmUgKGkuZS4ganVzdCBjaGVjayBNR01UICYgQUNfQkUpIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U/Ci0jaWZkZWYgUlQyODYwCiAJCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAJCQkJCXsKIAkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIHBBZC0+U3RhQ2ZnLkJCUFIzKTsKIAkJCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewpAQCAtMTU4OCw3ICsxNTc3LDEwIEBACiAKIAkJCQkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQogCQkJCQl7Ci0JCQkJCQlBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOworCQkJCQkJLy8gU2V0IGEgZmxhZyB0byBnbyB0byBzbGVlcCAuIFRoZW4gYWZ0ZXIgcGFyc2UgdGhpcyBSeERvbmVJbnRlcnJ1cHQsIHdpbGwgZ28gdG8gc2xlZXAgbW9kZS4KKwkJCQkJCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0dPX1RPX1NMRUVQX05PVyk7CisJCQkJCQlwQWQtPlRoaXNUYnR0TnVtVG9OZXh0V2FrZVVwID0gVGJ0dE51bVRvTmV4dFdha2VVcDsKKwkJCQkJCS8vQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKaW5kZXggNzc0YzY1Ni4uMjYwOWQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKQEAgLTEzODQsNiArMTM4NCwxMCBAQAogCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKIAkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKIAkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKQorCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQpCisJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CiAKICAgICAJLy9oZXhfZHVtcCgiR3JvdXAgS2V5IDoiLCBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwgTEVOX1RLSVBfRUspOwogCX0KQEAgLTE3NjAsNyArMTc2NCw3IEBACiAJLy8gR2V0IEdUSyBsZW5ndGggLSByZWZlciB0byBJRUVFIDgwMi4xMWktMjAwNCBwLjgyCiAJR1RLTEVOID0gcEtERS0+TGVuIC02OwogCi0JaWYgKEdUS0xFTiA8IExFTl9BRVNfS0VZKQorCWlmIChHVEtMRU4gPCBNSU5fTEVOX09GX0dUSykKIAl7CiAJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsIEdUS0xFTikpOwogICAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0xNzg2LDYgKzE3OTAsMTAgQEAKIAkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKIAllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQogCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CiAKIAlyZXR1cm4gVFJVRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKaW5kZXggM2VhMmIyYy4uYzU0NTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCkBAIC00OSwxNSArNDksOSBAQAogCiAjZGVmaW5lIEdST1VQX0tFWV9OTyAgICAgICAgICAgICAgICA0CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogI2RlZmluZSBJV0VfU1RSRUFNX0FERF9FVkVOVChfQSwgX0IsIF9DLCBfRCwgX0UpCQlpd2Vfc3RyZWFtX2FkZF9ldmVudChfQSwgX0IsIF9DLCBfRCwgX0UpCiAjZGVmaW5lIElXRV9TVFJFQU1fQUREX1BPSU5UKF9BLCBfQiwgX0MsIF9ELCBfRSkJCWl3ZV9zdHJlYW1fYWRkX3BvaW50KF9BLCBfQiwgX0MsIF9ELCBfRSkKICNkZWZpbmUgSVdFX1NUUkVBTV9BRERfVkFMVUUoX0EsIF9CLCBfQywgX0QsIF9FLCBfRikJaXdlX3N0cmVhbV9hZGRfdmFsdWUoX0EsIF9CLCBfQywgX0QsIF9FLCBfRikKLSNlbHNlCi0jZGVmaW5lIElXRV9TVFJFQU1fQUREX0VWRU5UKF9BLCBfQiwgX0MsIF9ELCBfRSkJCWl3ZV9zdHJlYW1fYWRkX2V2ZW50KF9CLCBfQywgX0QsIF9FKQotI2RlZmluZSBJV0VfU1RSRUFNX0FERF9QT0lOVChfQSwgX0IsIF9DLCBfRCwgX0UpCQlpd2Vfc3RyZWFtX2FkZF9wb2ludChfQiwgX0MsIF9ELCBfRSkKLSNkZWZpbmUgSVdFX1NUUkVBTV9BRERfVkFMVUUoX0EsIF9CLCBfQywgX0QsIF9FLCBfRikJaXdlX3N0cmVhbV9hZGRfdmFsdWUoX0IsIF9DLCBfRCwgX0UsIF9GKQotI2VuZGlmCiAKIGV4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGEyVGVtcGxhdGVbXTsKIGV4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGFQc2tUa2lwW107CkBAIC0zNTgsNiArMzUyLDIwIEBACiAKICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QQWRkS2V5IC0tLS0tLT5cbiIpKTsKIAorCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwlpZiAoUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EKSkKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpCisJCXsKKwkJCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisJCQlyZXR1cm47CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QV1BBQWRkS2V5UHJvYzE9PT5cbiIpKTsKKwkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfSEFMVCk7CisJCVJUTVB1c2VjRGVsYXkoNjAwMCk7CisJCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOworCX0KKwogCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCiAJewogCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQpAQCAtNTUxLDYgKzU1OSw4IEBACiAJCX0KIAl9CiBlbmQ6CisJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKyAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCAoIjwtLS0tLS0gUlRNUEFkZEtleVxuIikpOwogCXJldHVybjsKIH0KIApAQCAtNTczLDkgKzU4Myw3IEBACiB7CiAvLwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OwogCi0jaWZkZWYgUlQyODYwCiAgICAgc3RybmNweShuYW1lLCAiUlQyODYwIFdpcmVsZXNzIiwgSUZOQU1TSVopOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCXJldHVybiAwOwogfQogCkBAIC02NzAsMTEgKzY3OCw5IEBACiAJCWNhc2UgSVdfTU9ERV9JTkZSQToKIAkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiSW5mcmEiKTsKIAkJCWJyZWFrOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjApKQogICAgICAgICBjYXNlIElXX01PREVfTU9OSVRPUjoKIAkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiTW9uaXRvciIpOwogCQkJYnJlYWs7Ci0jZW5kaWYKIAkJZGVmYXVsdDoKIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5ydF9pb2N0bF9zaXdtb2RlOjpTSU9DU0lXTU9ERSAodW5rbm93biAlZClcbiIsICptb2RlKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTcxNSwxMiArNzIxLDEwIEBACiAJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKICAgICBlbHNlIGlmIChJTkZSQV9PTihwQWRhcHRlcikpCiAJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIwKSkKICAgICBlbHNlIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKICAgICB7CiAgICAgICAgICptb2RlID0gSVdfTU9ERV9NT05JVE9SOwogICAgIH0KLSNlbmRpZgogICAgIGVsc2UKICAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FVVE87CiAKQEAgLTEwMzgsNiArMTA0MiwxNSBAQAogICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICB9CiAKKwlpZiAoKHBBZGFwdGVyLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgKElETEVfT04ocEFkYXB0ZXIpKQorCQkmJiAocEFkYXB0ZXItPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkKKwkJJiYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkpCisJeworCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWRhcHRlciwgR1VJX0lETEVfUE9XRVJfU0FWRSk7CisJfQorCS8vIENoZWNrIGlmIHN0aWxsIHJhZGlvIG9mZi4KKwllbHNlIGlmIChwQWRhcHRlci0+YlBDSWNsa09mZiA9PSBUUlVFKQorCQlyZXR1cm4gMDsKIAogI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKIAlpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQpAQCAtMTc1Niw3ICsxNzY5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgZWxzZQogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KLQkJCWlmKCFlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpIHsKKwkJCWlmICghKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkpIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTIxNjEsMTIgKzIxNzQsNiBAQAogICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSQUlPX09OOgotICAgICAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlNjYW5uaW5nXG4iKTsKLSAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvID0gVFJVRTsKICAgICAgICAgICAgIC8vaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyAhPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pKQogICAgICAgICAgICAgewpAQCAtMjQ1MCw2ICsyNDU3LDIwIEBACiAgICAgSU4gIEJPT0xFQU4gICAgICAgICBiR1RLLAogICAgIElOICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0KQogeworCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZGFwdGVyLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCWlmIChSVE1QX1RFU1RfUFNGTEFHKHBBZGFwdGVyLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpCisJeworCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpCisJCXsKKwkJCVJUTVBfU0VUX1BTRkxBRyhwQWRhcHRlciwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwkJCXJldHVybjsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFBZGRLZXlQcm9jMT09PlxuIikpOworCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZGFwdGVyLCBSRVNUT1JFX0hBTFQpOworCQlSVE1QdXNlY0RlbGF5KDYwMDApOworCQlwQWRhcHRlci0+YlBDSWNsa09mZiA9IEZBTFNFOworCX0KKwogICAgIE5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CiAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IExFTl9US0lQX0VLOwogICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksIGV4dC0+a2V5LCBMRU5fVEtJUF9FSyk7CkBAIC0yNDgwLDYgKzI1MDEsOCBAQAogICAgIAkJCQkJCQkgIGtleUlkeCwKICAgICAJCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLAogICAgIAkJCQkJCQkgICZwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0pOworCisJUlRNUF9TRVRfUFNGTEFHKHBBZGFwdGVyLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwogfQogCiBpbnQgcnRfaW9jdGxfc2l3ZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yNTQ0LDYgKzI1NjcsMjEgQEAKIAogICAgICAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksICAxNik7CiAJCQkgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisKKwkJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQgfHwKKwkJCQkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQorCQkJCXsKKwkJCQkJLy8gU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljCisJCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgQlNTMCwga2V5SWR4LCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCBOVUxMLCBOVUxMKTsKKworCQkJCQkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZQorCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBrZXlJZHgsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcsIE5VTEwpOworCisJCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworCisgICAgCQkJCS8vIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJCisgICAgCQkJCXBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQl9CiAgICAgCQkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfRU5DT0RFX0FMR19US0lQIC0ga2V5SWR4ID0gJWQsIGV4dC0+a2V5X2xlbiA9ICVkXG4iLCBfX2Z1bmNfXywga2V5SWR4LCBleHQtPmtleV9sZW4pKTsKQEAgLTQyNTksNyArNDI5NywyMyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKQorCQkJCQlpZiAoKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IDApICYmCisJCQkJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCQkJCQl7CisJCQkJCQlLZXkgPSBwV2VwS2V5LT5LZXlNYXRlcmlhbDsKKworCQkJCQkJLy8gU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljCisgICAgCQkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBLZXksIE5VTEwsIE5VTEwpOworCisJCQkJCQkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZQorCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIE5VTEwpOworCisJCQkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKworICAgICAgICAJCQkJLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICAgICAgCQkJCXBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQkJfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKQogI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgS2V5ID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleTsKQEAgLTUyNjUsNyArNTMxOSw2IEBACiAJCWNhc2UgUlRfT0lEXzgwMl8xMV9QUk9EVUNUSUQ6CiAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9QUk9EVUNUSUQgXG4iKSk7CiAKLSNpZmRlZiBSVDI4NjAKIAkJCXsKIAogCQkJCVVTSE9SVCAgZGV2aWNlX2lkOwpAQCAtNTI3NSw3ICs1MzI4LDYgQEAKIAkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIHBjaV9kZXYgPSBOVUxMXG4iKSk7CiAJCQkJc3ByaW50Zih0bXAsICIlMDR4ICUwNHhcbiIsIE5JQ19QQ0lfVkVORE9SX0lELCBkZXZpY2VfaWQpOwogCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKHRtcCk7CiAJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgdG1wLCB3cnEtPnUuZGF0YS5sZW5ndGgpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC93cGEuaAppbmRleCA4OGM3YzhiLi4wMTM0YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvd3BhLmgKQEAgLTkwLDYgKzkwLDcgQEAKICNkZWZpbmUgVEtJUF9BUF9SWE1JQ0tfT0ZGU0VUCQkoVEtJUF9BUF9UWE1JQ0tfT0ZGU0VUK0xFTl9US0lQX1RYTUlDSykKICNkZWZpbmUgVEtJUF9HVEtfTEVOR1RICQkJCSgoTEVOX1RLSVBfRUspKyhMRU5fVEtJUF9SWE1JQ0spKyhMRU5fVEtJUF9UWE1JQ0spKQogI2RlZmluZSBMRU5fUFRLCQkJCQkJKChMRU5fRUFQX0tFWSkrKExFTl9US0lQX0tFWSkpCisjZGVmaW5lIE1JTl9MRU5fT0ZfR1RLCQkJCTUKIAogLy8gUlNOIElFIExlbmd0aCBkZWZpbml0aW9uCiAjZGVmaW5lIE1BWF9MRU5fT0ZfUlNOSUUgICAgICAgICAJOTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvMjg3MF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC8yODcwX21haW5fZGV2LmMKaW5kZXggMDRjNzY0ZC4uOWQ1OWUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC8yODcwX21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC8yODcwX21haW5fZGV2LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCSAqLwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX2Z1bmNfXykpOwogCi0JcE9iai0+TUxNRVRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7CisJcE9iai0+TUxNRVRocl90YXNrID0gTlVMTDsKIAogCWNvbXBsZXRlX2FuZF9leGl0ICgmcEFkLT5tbG1lQ29tcGxldGUsIDApOwogCXJldHVybiAwOwpAQCAtMzczLDcgKzM3Myw3IEBACiAJICovCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCAiPC0tLVJUVVNCQ21kVGhyZWFkXG4iKSk7CiAKLQlwT2JqLT5SVFVTQkNtZFRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7CisJcE9iai0+UlRVU0JDbWRUaHJfdGFzayA9IE5VTEw7CiAKIAljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZC0+Q21kUUNvbXBsZXRlLCAwKTsKIAlyZXR1cm4gMDsKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCSAqLwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX2Z1bmNfXykpOwogCi0JcE9iai0+VGltZXJRVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKKwlwT2JqLT5UaW1lclFUaHJfdGFzayA9IE5VTEw7CiAKIAljb21wbGV0ZV9hbmRfZXhpdCgmcEFkLT5UaW1lclFDb21wbGV0ZSwgMCk7CiAJcmV0dXJuIDA7CkBAIC05NDQsNjkgKzk0NCw0NiBAQAogCVJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMocEFkKTsKIAogCS8vIFRlcm1pbmF0ZSBUaHJlYWRzCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlRpbWVyUVRocl9waWQpCisJQlVHX09OKHBPYmotPlRpbWVyUVRocl90YXNrID09IE5VTEwpOworCUNIRUNLX1BJRF9MRUdBTElUWSh0YXNrX3BpZChwT2JqLT5UaW1lclFUaHJfdGFzaykpCiAJewogCQlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKIAotCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgVGltZXJRVGhyX3BpZD0lZCFcbiIsIEdFVF9QSURfTlVNQkVSKHBPYmotPlRpbWVyUVRocl9waWQpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRlcm1pbmF0ZSB0aGUgVGltZXJRVGhyIHBpZD0lZCFcbiIsCisJCQlwaWRfbnIodGFza19waWQocE9iai0+VGltZXJRVGhyX3Rhc2spKSk7CiAJCW1iKCk7CiAJCXBBZC0+VGltZXJGdW5jX2tpbGwgPSAxOwogCQltYigpOwotCQlyZXQgPSBLSUxMX1RIUkVBRF9QSUQocE9iai0+VGltZXJRVGhyX3BpZCwgU0lHVEVSTSwgMSk7Ci0JCWlmIChyZXQpCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RvcCBUaW1lclFUaHJlYWQsIHBpZD0lZCwgcmV0PSVkIVxuIiwKLQkJCQkJcEFkLT5uZXRfZGV2LT5uYW1lLCBHRVRfUElEX05VTUJFUihwT2JqLT5UaW1lclFUaHJfcGlkKSwgcmV0KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBBZC0+VGltZXJRQ29tcGxldGUpOwotCQkJcE9iai0+VGltZXJRVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLQkJfQorCQlrdGhyZWFkX3N0b3AocE9iai0+VGltZXJRVGhyX3Rhc2spOworCQlwT2JqLT5UaW1lclFUaHJfdGFzayA9IE5VTEw7CiAJfQogCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPk1MTUVUaHJfcGlkKQorCUJVR19PTihwT2JqLT5NTE1FVGhyX3Rhc2sgPT0gTlVMTCk7CisJQ0hFQ0tfUElEX0xFR0FMSVRZKHRhc2tfcGlkKHBPYmotPk1MTUVUaHJfdGFzaykpCiAJewotCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgTUxNRVRocl9waWQ9JWQhXG4iLCBHRVRfUElEX05VTUJFUihwT2JqLT5NTE1FVGhyX3BpZCkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVGVybWluYXRlIHRoZSBNTE1FVGhyIHBpZD0lZCFcbiIsCisJCQlwaWRfbnIodGFza19waWQocE9iai0+TUxNRVRocl90YXNrKSkpOwogCQltYigpOwogCQlwQWQtPm1sbWVfa2lsbCA9IDE7CiAJCS8vUlQyOFhYX01MTUVfSEFORExFUihwQWQpOwogCQltYigpOwotCQlyZXQgPSBLSUxMX1RIUkVBRF9QSUQocE9iai0+TUxNRVRocl9waWQsIFNJR1RFUk0sIDEpOwotCQlpZiAocmV0KQotCQl7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBNbG1lIHRocmVhZCwgcGlkPSVkLCByZXQ9JWQhXG4iLAotCQkJCQlwQWQtPm5ldF9kZXYtPm5hbWUsIEdFVF9QSURfTlVNQkVSKHBPYmotPk1MTUVUaHJfcGlkKSwgcmV0KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vd2FpdF9mb3JfY29tcGxldGlvbiAoJnBBZC0+bm90aWZ5KTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm1sbWVDb21wbGV0ZSk7Ci0JCQlwT2JqLT5NTE1FVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLQkJfQorCQlrdGhyZWFkX3N0b3AocE9iai0+TUxNRVRocl90YXNrKTsKKwkJcE9iai0+TUxNRVRocl90YXNrID0gTlVMTDsKIAl9CiAKLQlDSEVDS19QSURfTEVHQUxJVFkocE9iai0+UlRVU0JDbWRUaHJfcGlkKQorCUJVR19PTihwT2JqLT5SVFVTQkNtZFRocl90YXNrID09IE5VTEwpOworCUNIRUNLX1BJRF9MRUdBTElUWSh0YXNrX3BpZChwT2JqLT5SVFVTQkNtZFRocl90YXNrKSkKIAl7Ci0JCXByaW50aygiVGVybWluYXRlIHRoZSBSVFVTQkNtZFRocl9waWQ9JWQhXG4iLCBHRVRfUElEX05VTUJFUihwT2JqLT5SVFVTQkNtZFRocl9waWQpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRlcm1pbmF0ZSB0aGUgUlRVU0JDbWRUaHIgcGlkPSVkIVxuIiwKKwkJCXBpZF9ucih0YXNrX3BpZChwT2JqLT5SVFVTQkNtZFRocl90YXNrKSkpOwogCQltYigpOwogCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKIAkJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfU1RPUEVEOwogCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKIAkJbWIoKTsKIAkJLy9SVFVTQkNNRFVwKHBBZCk7Ci0JCXJldCA9IEtJTExfVEhSRUFEX1BJRChwT2JqLT5SVFVTQkNtZFRocl9waWQsIFNJR1RFUk0sIDEpOwotCQlpZiAocmV0KQotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIFJUVVNCQ21kIHRocmVhZCwgcGlkPSVkLCByZXQ9JWQhXG4iLAotCQkJCQlwQWQtPm5ldF9kZXYtPm5hbWUsIEdFVF9QSURfTlVNQkVSKHBPYmotPlJUVVNCQ21kVGhyX3BpZCksIHJldCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvL3dhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm5vdGlmeSk7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5DbWRRQ29tcGxldGUpOwotCQkJcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCX0KKwkJa3RocmVhZF9zdG9wKHBPYmotPlJUVVNCQ21kVGhyX3Rhc2spOworCQlwT2JqLT5SVFVTQkNtZFRocl90YXNrID0gTlVMTDsKIAl9CiAKIApAQCAtMTA2Nyw3ICsxMDQ0LDcgQEAKIAkJaWYgKGRldl9wLT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IHJ0dXNiX3VzYl9pZFtpXS5pZFZlbmRvciAmJgogCQkJZGV2X3AtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IHJ0dXNiX3VzYl9pZFtpXS5pZFByb2R1Y3QpCiAJCXsKLQkJCXByaW50aygicnQyODcwOiBpZFZlbmRvciA9IDB4JXgsIGlkUHJvZHVjdCA9IDB4JXhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAicnQyODcwOiBpZFZlbmRvciA9IDB4JXgsIGlkUHJvZHVjdCA9IDB4JXhcbiIsCiAJCQkJCWRldl9wLT5kZXNjcmlwdG9yLmlkVmVuZG9yLCBkZXZfcC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvVE9ETwppbmRleCBlYWUxYWM0Li4yZGYxYmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9UT0RPCkBAIC0xLDcgKzEsMTQgQEAKK0knbSBoZXNpdGFudCB0byBhZGQgYSBUT0RPIGZpbGUgaGVyZSwgYXMgdGhlIHdpcmVsZXNzIGRldmVsb3BlcnMgd291bGQKK3JlYWxseSBoYXZlIHBlb3BsZSBoZWxwIHRoZW0gb3V0IG9uIHRoZSAiY2xlYW4iIHJ0Mjg3MCBkcml2ZXIgdGhhdCBjYW4KK2JlIGZvdW5kIGF0IHRoZSBodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20vIHNpdGUuCisKK0J1dCwgaWYgeW91IHdpc2ggdG8gY2xlYW4gdXAgdGhpcyBkcml2ZXIgaW5zdGVhZCwgaGVyZSdzIGEgc2hvcnQgbGlzdCBvZgordGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIGdldCBpdCBpbnRvIGEgbW9yZSBtZXJnYWJsZSBzaGFwZToKKwogVE9ETzoKIAktIGNoZWNrcGF0Y2gucGwgY2xlYW4KIAktIHNwYXJzZSBjbGVhbgotCS0gcG9ydCB0byBpbi1rZXJuZWwgODAyMTEgc3RhY2sKKwktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrIGFuZCBjb21tb24gcnQyeDAwIGluZnJhc3RydWN0dXJlCiAJLSByZW1vdmUgcmVhZGluZyBmcm9tIC9ldGMvIGNvbmZpZyBmaWxlcwogCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi8yODcwX3J0bXBfaW5pdC5jCmluZGV4IDlmNTE0M2IuLmNiMTZkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vMjg3MF9ydG1wX2luaXQuYwpAQCAtNzI3LDggKzcyNyw4IEBACiAKIAl1c2JfZGV2ID0gcE9iai0+cFVzYl9EZXY7CiAKLQlwT2JqLT5NTE1FVGhyX3BpZAkJPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcE9iai0+UlRVU0JDbWRUaHJfcGlkCT0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOworCXBPYmotPk1MTUVUaHJfdGFzawkJPSBOVUxMOworCXBPYmotPlJUVVNCQ21kVGhyX3Rhc2sJPSBOVUxMOwogCiAJKnBwQWQgPSAoUFZPSUQpdm1hbGxvYyhzaXplb2YoUlRNUF9BREFQVEVSKSk7CiAKQEAgLTc2NSw3ICs3NjUsNyBAQAogewogCVBSVE1QX0FEQVBURVIgcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKIAlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7Ci0JcGlkX3QgcGlkX251bWJlciA9IC0xOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAJLy9pbml0X01VVEVYKCYocEFkLT51c2JkZXZfc2VtYXBob3JlKSk7CiAKQEAgLTc3OSwzNiArNzc5LDM5IEBACiAJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5UaW1lclFDb21wbGV0ZSk7CiAKIAkvLyBDcmVhdCBNTE1FIFRocmVhZAotCXBPYmotPk1MTUVUaHJfcGlkPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoTWxtZVRocmVhZCwgcEFkLCBDTE9ORV9WTSk7Ci0JaWYgKHBpZF9udW1iZXIgPCAwKQotCXsKKwlwT2JqLT5NTE1FVGhyX3Rhc2sgPSBOVUxMOworCXRzayA9IGt0aHJlYWRfcnVuKE1sbWVUaHJlYWQsIHBBZCwgcEFkLT5uZXRfZGV2LT5uYW1lKTsKKworCWlmIChJU19FUlIodHNrKSkgewogCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBNbG1lIHRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9Ci0JcE9iai0+TUxNRVRocl9waWQgPSBHRVRfUElEKHBpZF9udW1iZXIpOworCisJcE9iai0+TUxNRVRocl90YXNrID0gdHNrOwogCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5tbG1lQ29tcGxldGUpKTsKIAogCS8vIENyZWF0IENvbW1hbmQgVGhyZWFkCi0JcE9iai0+UlRVU0JDbWRUaHJfcGlkPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoUlRVU0JDbWRUaHJlYWQsIHBBZCwgQ0xPTkVfVk0pOwotCWlmIChwaWRfbnVtYmVyIDwgMCkKKwlwT2JqLT5SVFVTQkNtZFRocl90YXNrID0gTlVMTDsKKwl0c2sgPSBrdGhyZWFkX3J1bihSVFVTQkNtZFRocmVhZCwgcEFkLCBwQWQtPm5ldF9kZXYtPm5hbWUpOworCisJaWYgKElTX0VSUih0c2spIDwgMCkKIAl7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFJUVVNCQ21kIHRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9Ci0JcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gR0VUX1BJRChwaWRfbnVtYmVyKTsKKworCXBPYmotPlJUVVNCQ21kVGhyX3Rhc2sgPSB0c2s7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZC0+Q21kUUNvbXBsZXRlKSk7CiAKLQlwT2JqLT5UaW1lclFUaHJfcGlkPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoVGltZXJRVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKLQlpZiAocGlkX251bWJlciA8IDApCisJcE9iai0+VGltZXJRVGhyX3Rhc2sgPSBOVUxMOworCXRzayA9IGt0aHJlYWRfcnVuKFRpbWVyUVRocmVhZCwgcEFkLCBwQWQtPm5ldF9kZXYtPm5hbWUpOworCWlmIChJU19FUlIodHNrKSA8IDApCiAJewogCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBUaW1lclFUaHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQotCXBPYmotPlRpbWVyUVRocl9waWQgPSBHRVRfUElEKHBpZF9udW1iZXIpOworCXBPYmotPlRpbWVyUVRocl90YXNrID0gdHNrOwogCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5UaW1lclFDb21wbGV0ZSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2RhdGEuYwppbmRleCBmZDgwOWFiLi5mOGUwZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9kYXRhLmMKQEAgLTcwOSw5ICs3MDksNiBAQAogCX0KIAogCXJldHVybiBUUlVFOwotCi1GaWxsVHhCbGtFcnI6Ci0JcmV0dXJuIEZBTFNFOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMKaW5kZXggODcwYTAwZC4uMDk5YjZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMKQEAgLTM2NTUsNyArMzY1NSw3IEBACiAjaWZkZWYgUkFMSU5LXzI4eHhfUUEKIAkvL3BBZC0+YXRlLlJlcGVhdCA9IDA7CiAJcEFkLT5hdGUuVHhTdGF0dXMgPSAwOwotCXBBZC0+YXRlLkF0ZVBpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKKwlwQWQtPmF0ZS5BdGVQaWQgPSBOVUxMOwogI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCiAjZW5kaWYgLy8gUkFMSU5LX0FURSAvLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYwppbmRleCA2ZGI0NDNlLi5hZmRlMTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2lvLmMKQEAgLTk1OCw3ICs5NTgsOCBAQAogCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKIAogCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkKKwlCVUdfT04ocE9iai0+UlRVU0JDbWRUaHJfdGFzayA9PSBOVUxMKTsKKwlDSEVDS19QSURfTEVHQUxJVFkodGFza19waWQocE9iai0+UlRVU0JDbWRUaHJfdGFzaykpCiAJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKIAogCXN0YXR1cyA9IFJUTVBBbGxvY2F0ZU1lbW9yeSgoUFZPSUQgKikmY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vc3BlY3RydW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3NwZWN0cnVtLmMKaW5kZXggNDM3ODJjZS4uNzQzODA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vc3BlY3RydW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9zcGVjdHJ1bS5jCkBAIC0xNTk1LDcgKzE1OTUsNyBAQAogCiAJaWYgKChwTWVhc3VyZVJlcG9ydEluZm8gPSBrbWFsbG9jKHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKIAl7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIHVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIG1lYXN1cmUgcmVwb3J0IGJ1ZmZlciAoc2l6ZT0lZCkuXG4iLCBfX2Z1bmNfXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgdW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgbWVhc3VyZSByZXBvcnQgYnVmZmVyIChzaXplPSV6dSkuXG4iLCBfX2Z1bmNfXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydDI4NzAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnQyODcwLmgKaW5kZXggMzBhZjRiNS4uNWRkMTVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydDI4NzAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0Mjg3MC5oCkBAIC04Niw2ICs4Niw3IEBACiAjZGVmaW5lIFJUMjg3MF9VU0JfREVWSUNFUwlcCiB7CVwKIAl7VVNCX0RFVklDRSgweDE0OEYsMHgyNzcwKX0sIC8qIFJhbGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTczNywweDAwNzEpfSwgLyogTGlua3N5cyBXVVNCNjAwTiAqLwlcCiAJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4Mjg3MCl9LCAvKiBSYWxpbmsgKi8JCVwKIAl7VVNCX0RFVklDRSgweDE0OEYsMHgzMDcwKX0sIC8qIFJhbGluayAqLwkJXAogCXtVU0JfREVWSUNFKDB4MEIwNSwweDE3MzEpfSwgLyogQXN1cyAqLwkJCVwKQEAgLTU3NiwxNCArNTc3LDE2IEBACiAjZGVmaW5lIFJUVVNCTWxtZVVwKHBBZCkJICAgICAgICBcCiB7CQkJCQkJCQkgICAgXAogCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsJXAotCUNIRUNLX1BJRF9MRUdBTElUWShwT2JqLT5NTE1FVGhyX3BpZCkJCSAgICBcCisJQlVHX09OKHBPYmotPk1MTUVUaHJfdGFzayA9PSBOVUxMKTsJCSAgICBcCisJQ0hFQ0tfUElEX0xFR0FMSVRZKHRhc2tfcGlkKHBPYmotPk1MTUVUaHJfdGFzaykpCQkgICAgXAogICAgICAgICB1cCgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsgXAogfQogCiAjZGVmaW5lIFJUVVNCQ01EVXAocEFkKQkgICAgICAgICAgICAgICAgXAogewkJCQkJCQkJCSAgICBcCiAJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOwlcCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkJICAgIFwKKwlCVUdfT04ocE9iai0+UlRVU0JDbWRUaHJfdGFzayA9PSBOVUxMKTsJICAgIFwKKwlDSEVDS19QSURfTEVHQUxJVFkodGFza19waWQocE9iai0+UlRVU0JDbWRUaHJfdGFzaykpCSAgICBcCiAJICAgIHVwKCYocEFkLT5SVFVTQkNtZF9zZW1hcGhvcmUpKTsgXAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMKaW5kZXggOTkyZTNkMS4uZTM4NTUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguYwpAQCAtODk1LDcgKzg5NSw3IEBACiAKICAgICBpZiAocFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpID4gUlhfQlVGRkVSX0FHR1JFU0laRSkKICAgICB7Ci0gICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogU2l6ZSBpcyB0b28gbGFyZ2UhICglZClcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCV6dSlcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKIAkJZ290byBlcnJfZnJlZV9za19idWZmOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oCmluZGV4IDg1OWY5Y2UuLjVhNmVlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmgKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC02NSw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAKLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKIC8vIGxvYWQgZmlybXdhcmUKQEAgLTE2NiwxNCArMTY2LDEyIEBACiAKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogdHlwZWRlZglzdHJ1Y3QgcGlkICoJVEhSRUFEX1BJRDsKLSNkZWZpbmUJVEhSRUFEX1BJRF9JTklUX1ZBTFVFCU5VTEwKICNkZWZpbmUJR0VUX1BJRChfdikJZmluZF9nZXRfcGlkKF92KQogI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJcGlkX25yKF92KQogI2RlZmluZSBDSEVDS19QSURfTEVHQUxJVFkoX3BpZCkJaWYgKHBpZF9ucihfcGlkKSA+PSAwKQogI2RlZmluZSBLSUxMX1RIUkVBRF9QSUQoX0EsIF9CLCBfQykJa2lsbF9waWQoX0EsIF9CLCBfQykKICNlbHNlCiB0eXBlZGVmCXBpZF90CVRIUkVBRF9QSUQ7Ci0jZGVmaW5lCVRIUkVBRF9QSURfSU5JVF9WQUxVRQktMQogI2RlZmluZQlHRVRfUElEKF92KQlfdgogI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJX3YKICNkZWZpbmUgQ0hFQ0tfUElEX0xFR0FMSVRZKF9waWQpCWlmIChfcGlkID49IDApCkBAIC0xODksMTEgKzE4NywxMSBAQAogc3RydWN0IG9zX2Nvb2tpZSB7CiAKICNpZmRlZiBSVDI4NzAKLQlzdHJ1Y3QgdXNiX2RldmljZQkJKnBVc2JfRGV2OworCXN0cnVjdCB1c2JfZGV2aWNlCSpwVXNiX0RldjsKIAotCVRIUkVBRF9QSUQJCQkJTUxNRVRocl9waWQ7Ci0JVEhSRUFEX1BJRAkJCQlSVFVTQkNtZFRocl9waWQ7Ci0JVEhSRUFEX1BJRAkJCQlUaW1lclFUaHJfcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqTUxNRVRocl90YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqUlRVU0JDbWRUaHJfdGFzazsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKlRpbWVyUVRocl90YXNrOwogI2VuZGlmIC8vIFJUMjg3MCAvLwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlyeF9kb25lX3Rhc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YV9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGFfaW9jdGwuYwppbmRleCA5MWYwZmFiLi40YjQzMmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhX2lvY3RsLmMKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIGVsc2UKIAkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCi0JCQlpZighZXJxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSB7CisJCQlpZiAoIShlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKSB7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwLzI4NzBfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvMjg3MF9tYWluX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWRkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwLzI4NzBfbWFpbl9kZXYuYwpAQCAtMCwwICsxLDE2MjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcF9tYWluLmMKKworICAgIEFic3RyYWN0OgorICAgIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZXMKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE5hbWUgICAgICAgIERhdGUgICAgICAgICAgICBNb2RpZmljYXRpb24gbG9ncworICAgIEphbiBMZWUJCTAxLTEwLTIwMDUJICAgIG1vZGlmaWVkCisJU2FtcGxlCQlKdW4vMDEvMDcJCU1lcmdlIFJUMjg3MCBhbmQgUlQyODYwIGRyaXZlcnMuCisqLworCisjaW5jbHVkZSAicnRfY29uZmlnLmgiCisKKworLy8gRm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgc2hvdyB3aGVuIHlvdSBydW4gJ21vZGluZm8nCisvLyAqKiogSWYgeW91IGhhdmUgYSBzb2x1dGlvbiBmb3IgdGhlIGJ1ZyBpbiBjdXJyZW50IHZlcnNpb24gb2YgZHJpdmVyLCBwbGVhc2UgbWFpbCB0byBtZS4KKy8vIE90aGVyd2lzZSBwb3N0IHRvIGZvcnVtIGluIHJhbGlua3RlY2gncyB3ZWIgc2l0ZSh3d3cucmFsaW5rdGVjaC5jb20pIGFuZCBsZXQgYWxsIHVzZXJzIGhlbHAgeW91LiAqKioKK01PRFVMRV9BVVRIT1IoIlBhdWwgTGluIDxwYXVsX2xpbkByYWxpbmt0ZWNoLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUlQyODcwIFdpcmVsZXNzIExhbiBMaW51eCBEcml2ZXIiKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyNpZmRlZiBNT0RVTEVfVkVSU0lPTgorTU9EVUxFX1ZFUlNJT04oU1RBX0RSSVZFUl9WRVJTSU9OKTsKKyNlbmRpZgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisvLyByZWNvcmQgd2hldGhlciB0aGUgY2FyZCBpbiB0aGUgY2FyZCBsaXN0IGlzIHVzZWQgaW4gdGhlIGNhcmQgZmlsZQorZXh0ZXJuIFVJTlQ4ICBNQ19DYXJkVXNlZFtdOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisvKiBLZXJuZWwgdGhyZWFkIGFuZCB2YXJzLCB3aGljaCBoYW5kbGVzIHBhY2tldHMgdGhhdCBhcmUgY29tcGxldGVkLiBPbmx5CisgKiBwYWNrZXRzIHRoYXQgaGF2ZSBhICJjb21wbGV0ZSIgZnVuY3Rpb24gYXJlIHNlbnQgaGVyZS4gVGhpcyB3YXksIHRoZQorICogY29tcGxldGlvbiBpcyBydW4gb3V0IG9mIGtlcm5lbCBjb250ZXh0LCBhbmQgZG9lc24ndCBibG9jayB0aGUgcmVzdCBvZgorICogdGhlIHN0YWNrLiAqLworLy9zdGF0aWMgaW50IG1sbWVfa2lsbCA9IDA7CQkvLyBNbG1lIGtlcm5lbCB0aHJlYWQKKy8vc3RhdGljIGludCBSVFVTQkNtZF9raWxsID0gMDsJLy8gQ29tbWFuZCBrZXJuZWwgdGhyZWFkCisvL3N0YXRpYyBpbnQgVGltZXJGdW5jX2tpbGwgPSAwOwkvLyBUaW1lclEga2VybmVsIHRocmVhZAorCisvL3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCAJdGltZXJXYWl0UTsKKy8vc3RhdGljIHdhaXRfcXVldWVfdCAJCXdhaXRROworCitleHRlcm4gSU5UIF9fZGV2aW5pdCBydDI4eHhfcHJvYmUoSU4gdm9pZCAqX2Rldl9wLCBJTiB2b2lkICpfZGV2X2lkX3AsCisJCQkJCQkJCQlJTiBVSU5UIGFyZ2MsIE9VVCBQUlRNUF9BREFQVEVSICpwcEFkKTsKKworCisvKiBtb2R1bGUgdGFibGUgKi8KK3N0cnVjdCB1c2JfZGV2aWNlX2lkICAgIHJ0dXNiX3VzYl9pZFtdID0gUlQyODcwX1VTQl9ERVZJQ0VTOworSU5UIGNvbnN0ICAgICAgICAgICAgICAgcnR1c2JfdXNiX2lkX2xlbiA9IHNpemVvZihydHVzYl91c2JfaWQpIC8gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBydHVzYl91c2JfaWQpOworCisjaWZuZGVmIFBGX05PRlJFRVpFCisjZGVmaW5lIFBGX05PRlJFRVpFICAwCisjZW5kaWYKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vdGVzdGVkIGZvciBrZXJuZWwgMi40IHNlcmllcworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgKnJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIFVJTlQgaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3N0YXRpYyB2b2lkIHJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKTsKKworc3RydWN0IHVzYl9kcml2ZXIgcnR1c2JfZHJpdmVyID0geworCQluYW1lOiJydDI4NzAiLAorCQlwcm9iZTpydHVzYl9wcm9iZSwKKwkJZGlzY29ubmVjdDpydHVzYl9kaXNjb25uZWN0LAorCQlpZF90YWJsZTpydHVzYl91c2JfaWQsCisJfTsKKworI2Vsc2UKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBydDI4NzBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisjZW5kaWYgLy8gQ09ORklHX1BNIC8vCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vdGVzdGVkIGZvciBrZXJuZWwgMi42c2VyaWVzCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHJ0dXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBydHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworc3RydWN0IHVzYl9kcml2ZXIgcnR1c2JfZHJpdmVyID0geworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKyNlbmRpZgorCS5uYW1lPSJydDI4NzAiLAorCS5wcm9iZT1ydHVzYl9wcm9iZSwKKwkuZGlzY29ubmVjdD1ydHVzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZT1ydHVzYl91c2JfaWQsCisKKyNpZmRlZiBDT05GSUdfUE0KKwlzdXNwZW5kOglydDI4NzBfc3VzcGVuZCwKKwlyZXN1bWU6CQlydDI4NzBfcmVzdW1lLAorI2VuZGlmCisJfTsKKworI2lmZGVmIENPTkZJR19QTQorCitWT0lEIFJUMjg2MFJlamVjdFBlbmRpbmdQYWNrZXRzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCS8vIGNsZWFyIFBTIHBhY2tldHMKKwkvLyBjbGVhciBUeFN3IHBhY2tldHMKK30KKworc3RhdGljIGludCBydDI4NzBfc3VzcGVuZCgKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwlwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7CisJUFJUTVBfQURBUFRFUiBwQWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IHJ0Mjg3MF9zdXNwZW5kKClcbiIpKTsKKwluZXRfZGV2ID0gcEFkLT5uZXRfZGV2OworCQkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRfZGV2KTsKKworCXBBZC0+UE1fRmxnU3VzcGVuZCA9IDE7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0X2RldikpIHsKKwkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBydDI4NzBfc3VzcGVuZCgpXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZSgKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKKwlQUlRNUF9BREFQVEVSIHBBZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnQyODcwX3Jlc3VtZSgpXG4iKSk7CisKKwlwQWQtPlBNX0ZsZ1N1c3BlbmQgPSAwOworCW5ldF9kZXYgPSBwQWQtPm5ldF9kZXY7CisJCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldF9kZXYpOworCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0X2Rldik7CisJCQluZXRpZl9jYXJyaWVyX29uKG5ldF9kZXYpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gcnQyODcwX3Jlc3VtZSgpXG4iKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gQ09ORklHX1BNIC8vCisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworLy8gSW5pdCBkcml2ZXIgbW9kdWxlCitJTlQgX19pbml0IHJ0dXNiX2luaXQodm9pZCkKK3sKKwlwcmludGsoInJ0dXNiIGluaXQgLS0tPlxuIik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcnR1c2JfZHJpdmVyKTsKK30KKworLy8gRGVpbml0IGRyaXZlciBtb2R1bGUKK1ZPSUQgX19leGl0IHJ0dXNiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcnR1c2JfZHJpdmVyKTsKKwlwcmludGsoIjwtLS0gcnR1c2IgZXhpdFxuIik7Cit9CisKK21vZHVsZV9pbml0KHJ0dXNiX2luaXQpOworbW9kdWxlX2V4aXQocnR1c2JfZXhpdCk7CisKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMJCQkJCQkJCQkJCQkqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBNTE1FIGtlcm5lbCB0aHJlYWQuCisKK0FyZ3VtZW50czoKKwkqQ29udGV4dAkJCXRoZSBwQWQsIGRyaXZlciBjb250cm9sIGJsb2NrIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCWNsb3NlIHRoZSB0aHJlYWQKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBNbG1lVGhyZWFkKAorCUlOIHZvaWQgKkNvbnRleHQpCit7CisJUFJUTVBfQURBUFRFUglwQWQgPSAoUFJUTVBfQURBUFRFUilDb250ZXh0OworCVBPU19DT09LSUUJcE9iajsKKwlpbnQgc3RhdHVzOworCisJcE9iaiA9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOworCisJcnRtcF9vc190aHJlYWRfaW5pdCgicnQyODcwTWxtZVRocmVhZCIsIChQVk9JRCkmKHBBZC0+bWxtZUNvbXBsZXRlKSk7CisKKwl3aGlsZSAocEFkLT5tbG1lX2tpbGwgPT0gMCkKKwl7CisJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQkvL2Rvd24oJihwQWQtPm1sbWVfc2VtYXBob3JlKSk7CisJCXN0YXR1cyA9IGRvd25faW50ZXJydXB0aWJsZSgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsKKworCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgLCBuZWVkIHRvIGNoZWNrIGlmIHJlcXVpcmVkKi8KKwkJLy9kb3duKCYocEFkLT51c2JkZXZfc2VtYXBob3JlKSk7CisKKwkJaWYgKCFwQWQtPlBNX0ZsZ1N1c3BlbmQpCisJCU1sbWVIYW5kbGVyKHBBZCk7CisKKwkJLyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJLy91cCgmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCQlpZiAoc3RhdHVzICE9IDApCisJCXsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBub3RpZnkgdGhlIGV4aXQgcm91dGluZSB0aGF0IHdlJ3JlIGFjdHVhbGx5IGV4aXRpbmcgbm93CisJICoKKwkgKiBjb21wbGV0ZSgpL3dhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBzaW1pbGFyIHRvIHVwKCkvZG93bigpLAorCSAqIGV4Y2VwdCB0aGF0IGNvbXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCisJICogaXMgZ2V0dGluZyBkZWxldGVkIGluIGEgcGFyYWxsZWwgbW9kZSBvZiBleGVjdXRpb24gKGkuZS4ganVzdAorCSAqIGFmdGVyIHRoZSBkb3duKCkgLS0gdGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHRocmVhZC1zaHV0ZG93bgorCSAqIGNhc2UuCisJICoKKwkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIGdvZXMgZXZlbiBmdXJ0aGVyIHRoYW4gdGhpcyAtLSBpdCBpcyBzYWZlIGluCisJICogdGhlIGNhc2UgdGhhdCB0aGUgdGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKKwkgKiB0aGUgc3RydWN0dXJlKSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIG1vZHVsZS1yZW1vdmUgY2FzZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBpbiBwcmVlbXB0aW9uIGtlcm5lbHMsIHdoaWNoIHRyYW5zZmVyIHRoZSBmbG93CisJICogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgpLgorCSAqLworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX0ZVTkNUSU9OX18pKTsKKworCXBPYmotPk1MTUVUaHJfcGlkID0gTlVMTDsKKworCWNvbXBsZXRlX2FuZF9leGl0ICgmcEFkLT5tbG1lQ29tcGxldGUsIDApOworCXJldHVybiAwOworCit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBVU0IgY29tbWFuZCBrZXJuZWwgdGhyZWFkLgorCitBcmd1bWVudHM6CisJKkNvbnRleHQJCQl0aGUgcEFkLCBkcml2ZXIgY29udHJvbCBibG9jayBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICAwCQkJCQljbG9zZSB0aGUgdGhyZWFkCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgUlRVU0JDbWRUaHJlYWQoCisJSU4gdm9pZCAqIENvbnRleHQpCit7CisJUFJUTVBfQURBUFRFUglwQWQgPSAoUFJUTVBfQURBUFRFUilDb250ZXh0OworCVBPU19DT09LSUUJCXBPYmo7CisJaW50IHN0YXR1czsKKworCXBPYmogPSAoUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKKworCXJ0bXBfb3NfdGhyZWFkX2luaXQoInJ0Mjg3MENtZFRocmVhZCIsIChQVk9JRCkmKHBBZC0+Q21kUUNvbXBsZXRlKSk7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9SVU5OSU5HOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCisJd2hpbGUgKHBBZC0+Q21kUS5DbWRRU3RhdGUgPT0gUlQyODcwX1RIUkVBRF9SVU5OSU5HKQorCXsKKwkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCisJCS8vZG93bigmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7CisJCXN0YXR1cyA9IGRvd25faW50ZXJydXB0aWJsZSgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7CisKKwkJaWYgKHBBZC0+Q21kUS5DbWRRU3RhdGUgPT0gUlQyODcwX1RIUkVBRF9TVE9QRUQpCisJCQlicmVhazsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCXsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCQkJYnJlYWs7CisJCX0KKwkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICwgbmVlZCB0byBjaGVjayBpZiByZXF1aXJlZCovCisJCS8vZG93bigmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCisJCWlmICghcEFkLT5QTV9GbGdTdXNwZW5kKQorCQlDTURIYW5kbGVyKHBBZCk7CisKKwkJLyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJLy91cCgmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCX0KKworCWlmICghcEFkLT5QTV9GbGdTdXNwZW5kKQorCXsJLy8gQ2xlYXIgdGhlIENtZFFFbGVtZW50cy4KKwkJQ21kUUVsbXQJKnBDbWRRRWxtdCA9IE5VTEw7CisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCXBBZC0+Q21kUS5DbWRRU3RhdGUgPSBSVDI4NzBfVEhSRUFEX1NUT1BFRDsKKwkJd2hpbGUocEFkLT5DbWRRLnNpemUpCisJCXsKKwkJCVJUVVNCRGVxdWV1ZUNtZCgmcEFkLT5DbWRRLCAmcENtZFFFbG10KTsKKwkJCWlmIChwQ21kUUVsbXQpCisJCQl7CisJCQkJaWYgKHBDbWRRRWxtdC0+Q21kRnJvbU5kaXMgPT0gVFJVRSkKKwkJCQl7CisJCQkJCWlmIChwQ21kUUVsbXQtPmJ1ZmZlciAhPSBOVUxMKQorCQkJCQkJTmRpc0ZyZWVNZW1vcnkocENtZFFFbG10LT5idWZmZXIsIHBDbWRRRWxtdC0+YnVmZmVybGVuZ3RoLCAwKTsKKworCQkJCQlOZGlzRnJlZU1lbW9yeShwQ21kUUVsbXQsIHNpemVvZihDbWRRRWxtdCksIDApOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAoKHBDbWRRRWxtdC0+YnVmZmVyICE9IE5VTEwpICYmIChwQ21kUUVsbXQtPmJ1ZmZlcmxlbmd0aCAhPSAwKSkKKwkJCQkJCU5kaXNGcmVlTWVtb3J5KHBDbWRRRWxtdC0+YnVmZmVyLCBwQ21kUUVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisJCSAgICAgICAgICAgIHsKKwkJCQkJCU5kaXNGcmVlTWVtb3J5KHBDbWRRRWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwl9CisJLyogbm90aWZ5IHRoZSBleGl0IHJvdXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdworCSAqCisJICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKKwkgKiBleGNlcHQgdGhhdCBjb21wbGV0ZSgpIGlzIHNhZmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cnVjdHVyZQorCSAqIGlzIGdldHRpbmcgZGVsZXRlZCBpbiBhIHBhcmFsbGVsIG1vZGUgb2YgZXhlY3V0aW9uIChpLmUuIGp1c3QKKwkgKiBhZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQtc2h1dGRvd24KKwkgKiBjYXNlLgorCSAqCisJICogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4gZnVydGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgorCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRocmVhZCBvZiB0aGUgY2FsbGVyIGlzIGdvaW5nIGF3YXkgKG5vdCBqdXN0CisJICogdGhlIHN0cnVjdHVyZSkgLS0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBtb2R1bGUtcmVtb3ZlIGNhc2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2ZlciB0aGUgZmxvdworCSAqIG9mIGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGEgY29tcGxldGUoKS4KKwkgKi8KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoICI8LS0tUlRVU0JDbWRUaHJlYWRcbiIpKTsKKworCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZC0+Q21kUUNvbXBsZXRlLCAwKTsKKwlyZXR1cm4gMDsKKworfQorCisKK3N0YXRpYyB2b2lkIFJUMjg3MF9UaW1lclFfSGFuZGxlKFJUTVBfQURBUFRFUiAqcEFkKQoreworCWludCBzdGF0dXM7CisJUkFMSU5LX1RJTUVSX1NUUlVDVAkqcFRpbWVyOworCVJUMjg3MF9USU1FUl9FTlRSWQkqcEVudHJ5OworCXVuc2lnbmVkIGxvbmcJaXJxRmxhZzsKKworCXdoaWxlKCFwQWQtPlRpbWVyRnVuY19raWxsKQorCXsKKy8vCQlwcmludGsoIndhaXRpbmcgZm9yIGV2ZW50IVxuIik7CisJCXBUaW1lciA9IE5VTEw7CisKKwkJc3RhdHVzID0gZG93bl9pbnRlcnJ1cHRpYmxlKCYocEFkLT5SVFVTQlRpbWVyX3NlbWFwaG9yZSkpOworCisJCWlmIChwQWQtPlRpbWVyUS5zdGF0dXMgPT0gUlQyODcwX1RIUkVBRF9TVE9QRUQpCisJCQlicmVhazsKKworCQkvLyBldmVudCBoYXBwZW5lZC4KKwkJd2hpbGUocEFkLT5UaW1lclEucFFIZWFkKQorCQl7CisJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWcpOworCQkJcEVudHJ5ID0gcEFkLT5UaW1lclEucFFIZWFkOworCQkJaWYgKHBFbnRyeSkKKwkJCXsKKwkJCQlwVGltZXIgPSBwRW50cnktPnBSYVRpbWVyOworCisJCQkJLy8gdXBkYXRlIHBRSGVhZAorCQkJCXBBZC0+VGltZXJRLnBRSGVhZCA9IHBFbnRyeS0+cE5leHQ7CisJCQkJaWYgKHBFbnRyeSA9PSBwQWQtPlRpbWVyUS5wUVRhaWwpCisJCQkJCXBBZC0+VGltZXJRLnBRVGFpbCA9IE5VTEw7CisKKwkJCQkvLyByZXR1cm4gdGhpcyBxdWV1ZSBlbnRyeSB0byB0aW1lclFGcmVlTGlzdC4KKwkJCQlwRW50cnktPnBOZXh0ID0gcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3Q7CisJCQkJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBwRW50cnk7CisJCQl9CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZyk7CisKKwkJCWlmIChwVGltZXIpCisJCQl7CisJCQkJaWYgKHBUaW1lci0+aGFuZGxlICE9IE5VTEwpCisJCQkJaWYgKCFwQWQtPlBNX0ZsZ1N1c3BlbmQpCisJCQkJCXBUaW1lci0+aGFuZGxlKE5VTEwsIChQVk9JRCkgcFRpbWVyLT5jb29raWUsIE5VTEwsIHBUaW1lcik7CisJCQkJaWYgKChwVGltZXItPlJlcGVhdCkgJiYgKHBUaW1lci0+U3RhdGUgPT0gRkFMU0UpKQorCQkJCQlSVE1QX09TX0FkZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgcFRpbWVyLT5UaW1lclZhbHVlKTsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgIT0gMCkKKwkJeworCQkJcEFkLT5UaW1lclEuc3RhdHVzID0gUlQyODcwX1RIUkVBRF9TVE9QRUQ7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisKK0lOVCBUaW1lclFUaHJlYWQoCisJSU4gT1VUIFBWT0lEIENvbnRleHQpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUE9TX0NPT0tJRQlwT2JqOworCisJcEFkID0gKFBSVE1QX0FEQVBURVIpQ29udGV4dDsKKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcnRtcF9vc190aHJlYWRfaW5pdCgicnQyODcwVGltZXJRSGFuZGxlIiwgKFBWT0lEKSYocEFkLT5UaW1lclFDb21wbGV0ZSkpOworCisJUlQyODcwX1RpbWVyUV9IYW5kbGUocEFkKTsKKworCS8qIG5vdGlmeSB0aGUgZXhpdCByb3V0aW5lIHRoYXQgd2UncmUgYWN0dWFsbHkgZXhpdGluZyBub3cKKwkgKgorCSAqIGNvbXBsZXRlKCkvd2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3duKCksCisJICogZXhjZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJ1Y3R1cmUKKwkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1dGlvbiAoaS5lLiBqdXN0CisJICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3MgbmVjZXNzYXJ5IGZvciB0aGUgdGhyZWFkLXNodXRkb3duCisJICogY2FzZS4KKwkgKgorCSAqIGNvbXBsZXRlX2FuZF9leGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNhZmUgaW4KKwkgKiB0aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2luZyBhd2F5IChub3QganVzdAorCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgbW9kdWxlLXJlbW92ZSBjYXNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24ga2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKKwkgKiBvZiBleGVjdXRpb24gaW1tZWRpYXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCisJICovCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCAiPC0tLSVzXG4iLF9fRlVOQ1RJT05fXykpOworCisJcE9iai0+VGltZXJRVGhyX3BpZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgmcEFkLT5UaW1lclFDb21wbGV0ZSwgMCk7CisJcmV0dXJuIDA7CisKK30KKworCitSVDI4NzBfVElNRVJfRU5UUlkgKlJUMjg3MF9UaW1lclFfSW5zZXJ0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcikKK3sKKwlSVDI4NzBfVElNRVJfRU5UUlkgKnBRTm9kZSA9IE5VTEwsICpwUVRhaWw7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKKworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisJaWYgKHBBZC0+VGltZXJRLnN0YXR1cyAmIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVCkKKwl7CisJCWlmKHBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0KQorCQl7CisJCQlwUU5vZGUgPSBwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdDsKKwkJCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gcFFOb2RlLT5wTmV4dDsKKworCQkJcFFOb2RlLT5wUmFUaW1lciA9IHBUaW1lcjsKKwkJCXBRTm9kZS0+cE5leHQgPSBOVUxMOworCisJCQlwUVRhaWwgPSBwQWQtPlRpbWVyUS5wUVRhaWw7CisJCQlpZiAocEFkLT5UaW1lclEucFFUYWlsICE9IE5VTEwpCisJCQkJcFFUYWlsLT5wTmV4dCA9IHBRTm9kZTsKKwkJCXBBZC0+VGltZXJRLnBRVGFpbCA9IHBRTm9kZTsKKwkJCWlmIChwQWQtPlRpbWVyUS5wUUhlYWQgPT0gTlVMTCkKKwkJCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwUU5vZGU7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKworCQlpZiAocFFOb2RlKQorCQkJdXAoJnBBZC0+UlRVU0JUaW1lcl9zZW1hcGhvcmUpOworCQkJLy93YWtlX3VwKCZ0aW1lcldhaXRRKTsKKwl9CisJZWxzZQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKwl9CisJcmV0dXJuIHBRTm9kZTsKK30KKworCitCT09MRUFOIFJUMjg3MF9UaW1lclFfUmVtb3ZlKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcikKK3sKKwlSVDI4NzBfVElNRVJfRU5UUlkgKnBOb2RlLCAqcFByZXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKwlpZiAocEFkLT5UaW1lclEuc3RhdHVzID49IFJUMjg3MF9USFJFQURfSU5JVEVEKQorCXsKKwkJcE5vZGUgPSBwQWQtPlRpbWVyUS5wUUhlYWQ7CisJCXdoaWxlIChwTm9kZSkKKwkJeworCQkJaWYgKHBOb2RlLT5wUmFUaW1lciA9PSBwVGltZXIpCisJCQkJYnJlYWs7CisJCQlwUHJldiA9IHBOb2RlOworCQkJcE5vZGUgPSBwTm9kZS0+cE5leHQ7CisJCX0KKworCQkvLyBOb3cgbW92ZSBpdCB0byBmcmVlTGlzdCBxdWV1ZS4KKwkJaWYgKHBOb2RlKQorCQl7CisJCQlpZiAocE5vZGUgPT0gcEFkLT5UaW1lclEucFFIZWFkKQorCQkJCXBBZC0+VGltZXJRLnBRSGVhZCA9IHBOb2RlLT5wTmV4dDsKKwkJCWlmIChwTm9kZSA9PSBwQWQtPlRpbWVyUS5wUVRhaWwpCisJCQkJcEFkLT5UaW1lclEucFFUYWlsID0gcFByZXY7CisJCQlpZiAocFByZXYgIT0gTlVMTCkKKwkJCQlwUHJldi0+cE5leHQgPSBwTm9kZS0+cE5leHQ7CisKKwkJCS8vIHJldHVybiB0aGlzIHF1ZXVlIGVudHJ5IHRvIHRpbWVyUUZyZWVMaXN0LgorCQkJcE5vZGUtPnBOZXh0ID0gcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3Q7CisJCQlwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCA9IHBOb2RlOworCQl9CisJfQorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCit2b2lkIFJUMjg3MF9UaW1lclFfRXhpdChSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlSVDI4NzBfVElNRVJfRU5UUlkgKnBUaW1lclE7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworCXdoaWxlIChwQWQtPlRpbWVyUS5wUUhlYWQpCisJeworCQlwVGltZXJRID0gcEFkLT5UaW1lclEucFFIZWFkOworCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwVGltZXJRLT5wTmV4dDsKKwkJLy8gcmVtb3ZlIHRoZSB0aW1lUQorCX0KKwlwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCA9IE5VTEw7CisJb3NfZnJlZV9tZW0ocEFkLCBwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCk7CisJcEFkLT5UaW1lclEucFFUYWlsID0gTlVMTDsKKwlwQWQtPlRpbWVyUS5wUUhlYWQgPSBOVUxMOworCXBBZC0+VGltZXJRLnN0YXR1cyA9IFJUMjg3MF9USFJFQURfU1RPUEVEOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisKK30KKworCit2b2lkIFJUMjg3MF9UaW1lclFfSW5pdChSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlpbnQgCWk7CisJUlQyODcwX1RJTUVSX0VOVFJZICpwUU5vZGUsICpwRW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKKworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlRpbWVyUUxvY2spOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisJTmRpc1plcm9NZW1vcnkoJnBBZC0+VGltZXJRLCBzaXplb2YocEFkLT5UaW1lclEpKTsKKwkvL0ludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+VGltZXJRLmNvdW50LCAwKTsKKworCS8qIEluaXRpYWxpc2UgdGhlIHdhaXQgcSBoZWFkICovCisJLy9pbml0X3dhaXRxdWV1ZV9oZWFkKCZ0aW1lcldhaXRRKTsKKworCW9zX2FsbG9jX21lbShwQWQsICZwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCwgc2l6ZW9mKFJUMjg3MF9USU1FUl9FTlRSWSkgKiBUSU1FUl9RVUVVRV9TSVpFX01BWCk7CisJaWYgKHBBZC0+VGltZXJRLnBUaW1lclFQb2xsKQorCXsKKwkJcEVudHJ5ID0gTlVMTDsKKwkJcFFOb2RlID0gKFJUMjg3MF9USU1FUl9FTlRSWSAqKXBBZC0+VGltZXJRLnBUaW1lclFQb2xsOworCQlmb3IgKGkgPSAwIDtpIDxUSU1FUl9RVUVVRV9TSVpFX01BWDsgaSsrKQorCQl7CisJCQlwUU5vZGUtPnBOZXh0ID0gcEVudHJ5OworCQkJcEVudHJ5ID0gcFFOb2RlOworCQkJcFFOb2RlKys7CisJCX0KKwkJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBwRW50cnk7CisJCXBBZC0+VGltZXJRLnBRSGVhZCA9IE5VTEw7CisJCXBBZC0+VGltZXJRLnBRVGFpbCA9IE5VTEw7CisJCXBBZC0+VGltZXJRLnN0YXR1cyA9IFJUMjg3MF9USFJFQURfSU5JVEVEOworCX0KKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworfQorCisKK1ZPSUQgUlQyODcwX1dhdGNoRG9nKElOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJaW50IAkJCQkJaWR4OworCVVMT05HCQkJCWlycUZsYWdzOworCVBVUkIJCSAgIAkJcFVyYjsKKwlCT09MRUFOCQkJCW5lZWREdW1wU2VxID0gRkFMU0U7CisJVUlOVDMyICAgICAgICAgIAlNQUNWYWx1ZTsKKworCisJaWR4ID0gMDsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7CisJaWYgKChNQUNWYWx1ZSAmIDB4ZmYpICE9MCApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUWCBRVUVVRSAwIE5vdCBFTVBUWShWYWx1ZT0weCUweCkuICEhISEhISEhISEhISEhIVxuIiwgTUFDVmFsdWUpKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX0NGRywgMHhmNDAwMTIpOworCQl3aGlsZSgoTUFDVmFsdWUgJjB4ZmYpICE9IDAgJiYgKGlkeCsrIDwgMTApKQorCQl7CisJCSAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBUWFJYUV9QQ05ULCAmTUFDVmFsdWUpOworCQkgICAgICAgIE5kaXNNU2xlZXAoMSk7CisJCX0KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX0NGRywgMHhmNDAwMDYpOworCX0KKworLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZHggPSAwOworCQlpZiAoKE1BQ1ZhbHVlICYgMHhmZjAwKSAhPTAgKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUWCBRVUVVRSAxIE5vdCBFTVBUWShWYWx1ZT0weCUweCkuICEhISEhISEhISEhISEhIVxuIiwgTUFDVmFsdWUpKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDBhKTsKKwkJCXdoaWxlKChNQUNWYWx1ZSAmMHhmZjAwKSAhPSAwICYmIChpZHgrKyA8IDEwKSkKKwkJCXsKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7CisJCQkJTmRpc01TbGVlcCgxKTsKKwkJCX0KKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwQWQtPndhdGNoRG9nUnhPdmVyRmxvd0NudCA+PSAyKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWF5YmUgdGhlIFJ4IEJ1bGstSW4gaGFuZ2VkISBDYW5jZWwgdGhlIHBlbmRpbmcgUnggYnVsa3MgcmVxdWVzdCFcbiIpKTsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDYWxsIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOIHRvIGNhbmNlbCB0aGUgcGVuZGluZyBSeCBCdWxrIVxuIikpOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4sIE5VTEwsIDApOworCQkJbmVlZER1bXBTZXEgPSBUUlVFOworCQl9CisJCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250ID0gMDsKKwl9CisKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX09GX1RYX1JJTkc7IGlkeCsrKQorCXsKKwkJcFVyYiA9IE5VTEw7CisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7CisJCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1tpZHhdID09IFRSVUUpICYmIHBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnQpCisJCXsKKwkJCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbaWR4XSsrOworCisJCQlpZiAoKHBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbaWR4XSA+IDIpICYmCisJCQkJICghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQkJCSkKKwkJCXsKKwkJCQkvLyBGSVhNRTogRm9sbG93aW5nIGNvZGUganVzdCBzdXBwb3J0IHNpbmdsZSBidWxrIG91dC4gSWYgeW91IHdhbm5hIHN1cHBvcnQgbXVsdGlwbGUgYnVsayBvdXQuIE1vZGlmeSBpdCEKKwkJCQlwSFRUWENvbnRleHQgPSAoUEhUX1RYX0NPTlRFWFQpKCZwQWQtPlR4Q29udGV4dFtpZHhdKTsKKwkJCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCXsJLy8gQ2hlY2sgVHhDb250ZXh0LgorCQkJCQlwVXJiID0gcEhUVFhDb250ZXh0LT5wVXJiOworCQkJCX0KKwkJCQllbHNlIGlmIChpZHggPT0gTUdNVFBJUEVJRFgpCisJCQkJeworCQkJCQlQVFhfQ09OVEVYVCBwTUxNRUNvbnRleHQsIHBOVUxMQ29udGV4dCwgcFBzUG9sbENvbnRleHQ7CisKKwkJCQkJLy9DaGVjayBNZ210Q29udGV4dC4KKwkJCQkJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKShwQWQtPk1nbXRSaW5nLkNlbGxbcEFkLT5NZ210UmluZy5UeERtYUlkeF0uQWxsb2NWYSk7CisJCQkJCXBQc1BvbGxDb250ZXh0ID0gKFBUWF9DT05URVhUKSgmcEFkLT5Qc1BvbGxDb250ZXh0KTsKKwkJCQkJcE5VTExDb250ZXh0ID0gKFBUWF9DT05URVhUKSgmcEFkLT5OdWxsQ29udGV4dCk7CisKKwkJCQkJaWYgKHBNTE1FQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJeworCQkJCQkJQVNTRVJUKHBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyk7CisJCQkJCQlwVXJiID0gcE1MTUVDb250ZXh0LT5wVXJiOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBOVUxMQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJeworCQkJCQkJQVNTRVJUKHBOVUxMQ29udGV4dC0+SVJQUGVuZGluZyk7CisJCQkJCQlwVXJiID0gcE5VTExDb250ZXh0LT5wVXJiOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCQl7CisJCQkJCQlBU1NFUlQocFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcpOworCQkJCQkJcFVyYiA9IHBQc1BvbGxDb250ZXh0LT5wVXJiOworCQkJCQl9CisJCQkJfQorCisJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW2lkeF0sIGlycUZsYWdzKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1heWJlIHRoZSBUeCBCdWxrLU91dCBoYW5nZWQhIENhbmNlbCB0aGUgcGVuZGluZyBUeCBidWxrcyByZXF1ZXN0IG9mIGlkeCglZCkhXG4iLCBpZHgpKTsKKwkJCQlpZiAocFVyYikKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlVubGluayB0aGUgcGVuZGluZyBVUkIhXG4iKSk7CisJCQkJCS8vIHVubGluayBpdCBub3cKKwkJCQkJUlRVU0JfVU5MSU5LX1VSQihwVXJiKTsKKwkJCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2Vjb25kcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCQkJUlRNUHVzZWNEZWxheSgyMDApOworCQkJCQluZWVkRHVtcFNlcSA9IFRSVUU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlVua29udyBidWxrT3V0IFVSQiBtYXliZSBoYW5nZWQhISEhISEhISEhISFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW2lkeF0sIGlycUZsYWdzKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7CisJCX0KKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBGb3IgU2lnbWEgZGVidWcsIGR1bXAgdGhlIGJhX3Jlb3JkZXJpbmcgc2VxdWVuY2UuCisJaWYoKG5lZWREdW1wU2VxID09IFRSVUUpICYmIChwQWQtPkNvbW1vbkNmZy5iRGlzYWJsZVJlb3JkZXJpbmcgPT0gMCkpCisJeworCQlVU0hPUlQJCQkJSWR4OworCQlQQkFfUkVDX0VOVFJZCQlwQkFFbnRyeSA9IE5VTEw7CisJCVVDSEFSCQkJCWNvdW50ID0gMDsKKwkJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisKKwkJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5CQVJlY1djaWRBcnJheVswXTsKKworCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtJZHhdOworCQlpZigocEJBRW50cnktPmxpc3QucWxlbiA+IDApICYmIChwQkFFbnRyeS0+bGlzdC5uZXh0ICE9IE5VTEwpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOSUNVcGRhdGVSYXdDb3VudGVycygpOlRoZSBRdWV1ZWluZyBwa3QgaW4gcmVvcmRlcmluZyBidWZmZXI6XG4iKSk7CisJCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKKwkJCW1wZHVfYmxrID0gcEJBRW50cnktPmxpc3QubmV4dDsKKwkJCXdoaWxlIChtcGR1X2JsaykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJcdCVkOlNlcS0lZCwgYkFNU0RVLSVkIVxuIiwgY291bnQsIG1wZHVfYmxrLT5TZXF1ZW5jZSwgbXBkdV9ibGstPmJBTVNEVSkpOworCQkJCW1wZHVfYmxrID0gbXBkdV9ibGstPm5leHQ7CisJCQkJY291bnQrKzsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiXG5wQkFFbnRyeS0+TGFzdEluZFNlcT0lZCFcbiIsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKSk7CisJCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBSZWxlYXNlIGFsbG9jYXRlZCByZXNvdXJjZXMuCisKK0FyZ3VtZW50czoKKyAgICAqZGV2CQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCXBBZAkJCQkJZHJpdmVyIGNvbnRyb2wgYmxvY2sgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgX3J0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgUFJUTVBfQURBUFRFUiBwQWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldF9kZXYgPSBOVUxMOworCisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJydHVzYl9kaXNjb25uZWN0OiB1bnJlZ2lzdGVyIHVzYm5ldCB1c2ItJXMtJXNcbiIsCisJCQkJZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPmRldnBhdGgpKTsKKwlpZiAoIXBBZCkKKwl7CisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJCWlmICgocEFkLT5NQ19Sb3dJRCA+PSAwKSAmJiAocEFkLT5NQ19Sb3dJRCA8PSBNQVhfTlVNX09GX01VTFRJUExFX0NBUkQpKQorCQkJTUNfQ2FyZFVzZWRbcEFkLT5NQ19Sb3dJRF0gPSAwOyAvLyBub3QgY2xlYXIgTUFDIGFkZHJlc3MKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCQl3aGlsZShNT0RfSU5fVVNFID4gMCkKKwkJeworCQkJTU9EX0RFQ19VU0VfQ09VTlQ7CisJCX0KKyNlbHNlCisJCXVzYl9wdXRfZGV2KGRldik7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKwkJcHJpbnRrKCJydHVzYl9kaXNjb25uZWN0OiBwQWQgPT0gTlVMTCFcbiIpOworCQlyZXR1cm47CisJfQorCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpOworCisKKworCS8vIGZvciBkZWJ1Zywgd2FpdCB0byBzaG93IHNvbWUgbWVzc2FnZXMgdG8gL3Byb2Mgc3lzdGVtCisJdWRlbGF5KDEpOworCisKKworCisJbmV0X2RldiA9IHBBZC0+bmV0X2RldjsKKwlpZiAocEFkLT5uZXRfZGV2ICE9IE5VTEwpCisJeworCQlwcmludGsoInJ0dXNiX2Rpc2Nvbm5lY3Q6IHVucmVnaXN0ZXJfbmV0ZGV2KCksIGRldi0+bmFtZT0lcyFcbiIsIG5ldF9kZXYtPm5hbWUpOworCQl1bnJlZ2lzdGVyX25ldGRldiAocEFkLT5uZXRfZGV2KTsKKwl9CisJdWRlbGF5KDEpOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworI2Vsc2UKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCXVkZWxheSgxKTsKKworCS8vIGZyZWUgbmV0X2RldmljZSBtZW1vcnkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwlrZnJlZShuZXRfZGV2KTsKKyNlbHNlCisJZnJlZV9uZXRkZXYobmV0X2Rldik7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKwkvLyBmcmVlIGFkYXB0ZXIgbWVtb3J5CisJUlRNUEZyZWVBZGFwdGVyKHBBZCk7CisKKwkvLyByZWxlYXNlIGEgdXNlIG9mIHRoZSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXdoaWxlKE1PRF9JTl9VU0UgPiAwKQorCXsKKwkJTU9EX0RFQ19VU0VfQ09VTlQ7CisJfQorI2Vsc2UKKwl1c2JfcHV0X2RldihkZXYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCXVkZWxheSgxKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiBSVFVTQiBkaXNjb25uZWN0IHN1Y2Nlc3NmdWxseVxuIikpOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgUHJvYmUgUlQyOFhYIGNoaXBzZXQuCisKK0FyZ3VtZW50czoKKyAgICAqZGV2CQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCWludGVyZmFjZQorCSppZF90YWJsZQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZSBJRAorCitSZXR1cm4gVmFsdWU6CisgICAgTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworc3RhdGljIHZvaWQgKnJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIFVJTlQgaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCVBSVE1QX0FEQVBURVIgcEFkOworCXJ0Mjh4eF9wcm9iZSgodm9pZCAqKWRldiwgKHZvaWQgKilpZCwgaW50ZXJmYWNlLCAmcEFkKTsKKwlyZXR1cm4gKHZvaWQgKilwQWQ7Cit9CisKKy8vRGlzY29ubmVjdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGV4aXQgcm91dGluZQorc3RhdGljIHZvaWQgcnR1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB2b2lkICpwdHIpCit7CisJX3J0dXNiX2Rpc2Nvbm5lY3QoZGV2LCAoKFBSVE1QX0FEQVBURVIpcHRyKSk7Cit9CisKKyNlbHNlCS8qIGtlcm5lbCAyLjYgc2VyaWVzICovCitzdGF0aWMgaW50IHJ0dXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZDsKKwlyZXR1cm4gKGludClydDI4eHhfcHJvYmUoKHZvaWQgKilpbnRmLCAodm9pZCAqKWlkLCAwLCAmcEFkKTsKK30KKworCitzdGF0aWMgdm9pZCBydHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICAgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJUFJUTVBfQURBUFRFUiAgICAgICBwQWQ7CisKKworCXBBZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCV9ydHVzYl9kaXNjb25uZWN0KGRldiwgcEFkKTsKK30KKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENsb3NlIGtlcm5lbCB0aHJlYWRzLgorCitBcmd1bWVudHM6CisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICBOT05FCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUMjh4eFRocmVhZFRlcm1pbmF0ZSgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlQT1NfQ09PS0lFCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJSU5UCQkJcmV0OworCisKKwkvLyBTbGVlcCA1MCBtaWxsaXNlY29uZHMgc28gcGVuZGluZyBpbyBtaWdodCBmaW5pc2ggbm9ybWFsbHkKKwlSVE1QdXNlY0RlbGF5KDUwMDAwKTsKKworCS8vIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCBhbGwgcGVuZGluZyByZWNlaXZlcyBhbmQgc2VuZHMgdG8gdGhlCisJLy8gZGV2aWNlIG9iamVjdC4gV2UgY2FuY2VsIGFueQorCS8vIGlycHMuIFdhaXQgdW50aWwgc2VuZHMgYW5kIHJlY2VpdmVzIGhhdmUgc3RvcHBlZC4KKwlSVFVTQkNhbmNlbFBlbmRpbmdJUlBzKHBBZCk7CisKKwkvLyBUZXJtaW5hdGUgVGhyZWFkcworCWlmIChwT2JqLT5NTE1FVGhyX3BpZCkKKwl7CisJCXByaW50aygiVGVybWluYXRlIHRoZSBNTE1FVGhyX3BpZD0lZCFcbiIsIHBpZF9ucihwT2JqLT5NTE1FVGhyX3BpZCkpOworCQltYigpOworCQlwQWQtPm1sbWVfa2lsbCA9IDE7CisJCS8vUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCQltYigpOworCQlyZXQgPSBraWxsX3BpZChwT2JqLT5NTE1FVGhyX3BpZCwgU0lHVEVSTSwgMSk7CisJCWlmIChyZXQpCisJCXsKKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIE1sbWUgdGhyZWFkLCBwaWQ9JWQsIHJldD0lZCFcbiIsCisJCQkJCXBBZC0+bmV0X2Rldi0+bmFtZSwgcGlkX25yKHBPYmotPk1MTUVUaHJfcGlkKSwgcmV0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vd2FpdF9mb3JfY29tcGxldGlvbiAoJnBBZC0+bm90aWZ5KTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm1sbWVDb21wbGV0ZSk7CisJCQlwT2JqLT5NTE1FVGhyX3BpZCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAocE9iai0+UlRVU0JDbWRUaHJfcGlkID49IDApCisJeworCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgUlRVU0JDbWRUaHJfcGlkPSVkIVxuIiwgcGlkX25yKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkpOworCQltYigpOworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfU1RPUEVEOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJbWIoKTsKKwkJLy9SVFVTQkNNRFVwKHBBZCk7CisJCXJldCA9IGtpbGxfcGlkKHBPYmotPlJUVVNCQ21kVGhyX3BpZCwgU0lHVEVSTSwgMSk7CisJCWlmIChyZXQpCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gUlRVU0JDbWQgdGhyZWFkLCBwaWQ9JWQsIHJldD0lZCFcbiIsCisJCQkJCXBBZC0+bmV0X2Rldi0+bmFtZSwgcGlkX25yKHBPYmotPlJUVVNCQ21kVGhyX3BpZCksIHJldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvL3dhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm5vdGlmeSk7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5DbWRRQ29tcGxldGUpOworCQkJcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gTlVMTDsKKwkJfQorCX0KKwlpZiAocE9iai0+VGltZXJRVGhyX3BpZCA+PSAwKQorCXsKKwkJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisKKwkJcHJpbnRrKCJUZXJtaW5hdGUgdGhlIFRpbWVyUVRocl9waWQ9JWQhXG4iLCBwaWRfbnIocE9iai0+VGltZXJRVGhyX3BpZCkpOworCQltYigpOworCQlwQWQtPlRpbWVyRnVuY19raWxsID0gMTsKKwkJbWIoKTsKKwkJcmV0ID0ga2lsbF9waWQocE9iai0+VGltZXJRVGhyX3BpZCwgU0lHVEVSTSwgMSk7CisJCWlmIChyZXQpCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RvcCBUaW1lclFUaHJlYWQsIHBpZD0lZCwgcmV0PSVkIVxuIiwKKwkJCQkJcEFkLT5uZXRfZGV2LT5uYW1lLCBwaWRfbnIocE9iai0+VGltZXJRVGhyX3BpZCksIHJldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwcmludGsoIndhaXRfZm9yX2NvbXBsZXRpb24gVGltZXJRVGhyXG4iKTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBBZC0+VGltZXJRQ29tcGxldGUpOworCQkJcE9iai0+VGltZXJRVGhyX3BpZCA9IE5VTEw7CisJCX0KKwl9CisJLy8gS2lsbCB0YXNrbGV0cworCXBBZC0+bWxtZV9raWxsID0gMDsKKwlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9VTktOT1dOOworCXBBZC0+VGltZXJGdW5jX2tpbGwgPSAwOworfQorCisKK3ZvaWQga2lsbF90aHJlYWRfdGFzayhJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQT1NfQ09PS0lFIHBPYmo7CisKKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJdGFza2xldF9raWxsKCZwT2JqLT5yeF9kb25lX3Rhc2spOworCXRhc2tsZXRfa2lsbCgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjMl9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmhjY2FfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT50YnR0X3Rhc2spOworCit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDaGVjayB0aGUgY2hpcHNldCB2ZW5kb3IvcHJvZHVjdCBJRC4KKworQXJndW1lbnRzOgorICAgIF9kZXZfcAkJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UKKworUmV0dXJuIFZhbHVlOgorICAgIFRSVUUJCQkJQ2hlY2sgb2sKKwlGQUxTRQkJCQlDaGVjayBmYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUMjhYWENoaXBzZXRDaGVjaygKKwlJTiB2b2lkICpfZGV2X3ApCit7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCS8qIGtlcm5lbCAyLjQgc2VyaWVzICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gKHN0cnVjdCB1c2JfZGV2aWNlICopX2Rldl9wOworI2Vsc2UKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKV9kZXZfcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCVVJTlQzMiBpOworCisKKwlmb3IoaT0wOyBpPHJ0dXNiX3VzYl9pZF9sZW47IGkrKykKKwl7CisJCWlmIChkZXZfcC0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBydHVzYl91c2JfaWRbaV0uaWRWZW5kb3IgJiYKKwkJCWRldl9wLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBydHVzYl91c2JfaWRbaV0uaWRQcm9kdWN0KQorCQl7CisJCQlwcmludGsoInJ0Mjg3MDogaWRWZW5kb3IgPSAweCV4LCBpZFByb2R1Y3QgPSAweCV4XG4iLAorCQkJCQlkZXZfcC0+ZGVzY3JpcHRvci5pZFZlbmRvciwgZGV2X3AtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gcnR1c2JfdXNiX2lkX2xlbikKKwl7CisJCXByaW50aygicnQyODcwOiBFcnJvciEgRGV2aWNlIERlc2NyaXB0b3Igbm90IG1hdGNoaW5nIVxuIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEluaXQgbmV0IGRldmljZSBzdHJ1Y3R1cmUuCisKK0FyZ3VtZW50czoKKyAgICBfZGV2X3AJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCisgICAgKm5ldF9kZXYJCQlQb2ludCB0byB0aGUgbmV0IGRldmljZQorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgVFJVRQkJCQlJbml0IG9rCisJRkFMU0UJCQkJSW5pdCBmYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUMjhYWE5ldERldkluaXQoCisJSU4gdm9pZCAJCQkJKl9kZXZfcCwKKwlJTiBzdHJ1Y3QgIG5ldF9kZXZpY2UJKm5ldF9kZXYsCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCkKK3sKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSAoc3RydWN0IHVzYl9kZXZpY2UgKilfZGV2X3A7CisjZWxzZQorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopX2Rldl9wOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXBBZC0+Y29uZmlnID0gZGV2X3AtPmNvbmZpZzsKKyNlbHNlCisJcEFkLT5jb25maWcgPSAmZGV2X3AtPmNvbmZpZy0+ZGVzYzsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwlyZXR1cm4gVFJVRTsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEluaXQgbmV0IGRldmljZSBzdHJ1Y3R1cmUuCisKK0FyZ3VtZW50czoKKyAgICBfZGV2X3AJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICBUUlVFCQkJCUNvbmZpZyBvaworCUZBTFNFCQkJCUNvbmZpZyBmYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCitCT09MRUFOIFJUMjhYWFByb2JlUG9zdENvbmZpZygKKwlJTiB2b2lkIAkJCQkqX2Rldl9wLAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQsCisJSU4gSU5UMzIJCQkJaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKV9kZXZfcDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJVUxPTkcgQnVsa091dElkeDsKKwlVSU5UMzIgaTsKKworCisJLyogZ2V0IHRoZSBhY3RpdmUgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwlpbnRmID0gJmRldl9wLT5hY3Rjb25maWctPmludGVyZmFjZVtpbnRlcmZhY2VdOworCWlmYWNlX2Rlc2MgPSAmaW50Zi0+YWx0c2V0dGluZ1swXTsKKworCS8qIGdldCAjIG9mIGVucG9pbnRzICovCisJcEFkLT5OdW1iZXJPZlBpcGVzID0gaWZhY2VfZGVzYy0+Yk51bUVuZHBvaW50czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOdW1FbmRwb2ludHM9JWRcbiIsIGlmYWNlX2Rlc2MtPmJOdW1FbmRwb2ludHMpKTsKKworCS8qIENvbmZpZ3VyZSBQaXBlcyAqLworCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzBdOworCUJ1bGtPdXRJZHggPSAwOworCisJZm9yKGk9MDsgaTxwQWQtPk51bWJlck9mUGlwZXM7IGkrKykKKwl7CisJCWlmICgoZW5kcG9pbnRbaV0uYm1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCisJCQkoKGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pKQorCQl7CisJCQlwQWQtPkJ1bGtJbkVwQWRkciA9IGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3M7CisJCQlwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUgPSBlbmRwb2ludFtpXS53TWF4UGFja2V0U2l6ZTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiQlVMSyBJTiBNYXhpbXVtUGFja2V0U2l6ZSA9ICVkXG4iLCBwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeCAgXG4iLCBlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzKSk7CisJCX0KKwkJZWxzZSBpZiAoKGVuZHBvaW50W2ldLmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJgorCQkJCSgoZW5kcG9pbnRbaV0uYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpKQorCQl7CisJCQkvLyBUaGVyZSBhcmUgNiBidWxrIG91dCBFUC4gRVA2IGhpZ2hlc3QgcHJpb3JpdHkuCisJCQkvLyBFUDEtNCBpcyBFRENBLiAgRVA1IGlzIEhDQ0EuCisJCQlwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dElkeCsrXSA9IGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3M7CisJCQlwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplID0gZW5kcG9pbnRbaV0ud01heFBhY2tldFNpemU7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkJVTEsgT1VUIE1heGltdW1QYWNrZXRTaXplID0gJWRcbiIsIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeCAgXG4iLCBlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzKSk7CisJCX0KKwl9CisKKwlpZiAoIShwQWQtPkJ1bGtJbkVwQWRkciAmJiBwQWQtPkJ1bGtPdXRFcEFkZHJbMF0pKQorCXsKKwkJcHJpbnRrKCJDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50c1xuIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2Vsc2UKK0JPT0xFQU4gUlQyOFhYUHJvYmVQb3N0Q29uZmlnKAorCUlOIHZvaWQgCQkJCSpfZGV2X3AsCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCwKKwlJTiBJTlQzMgkJCQlpbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKilfZGV2X3A7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlVTE9ORyBCdWxrT3V0SWR4OworCVVJTlQzMiBpOworCisKKwkvKiBnZXQgdGhlIGFjdGl2ZSBpbnRlcmZhY2UgZGVzY3JpcHRvciAqLworCWlmYWNlX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCS8qIGdldCAjIG9mIGVucG9pbnRzICAqLworCXBBZC0+TnVtYmVyT2ZQaXBlcyA9IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCSgiTnVtRW5kcG9pbnRzPSVkXG4iLCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKKworCS8qIENvbmZpZ3VyZSBQaXBlcyAqLworCUJ1bGtPdXRJZHggPSAwOworCisJZm9yKGk9MDsgaTxwQWQtPk51bWJlck9mUGlwZXM7IGkrKykKKwl7CisJCWlmICgoaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5ibUF0dHJpYnV0ZXMgPT0KKwkJCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJgorCQkJKChpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCVVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTikpCisJCXsKKwkJCXBBZC0+QnVsa0luRXBBZGRyID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQkJcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy53TWF4UGFja2V0U2l6ZTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiQlVMSyBJTiBNYXhpbXVtUGFja2V0U2l6ZSA9ICVkXG4iLCBwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeFxuIiwgaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSk7CisJCX0KKwkJZWxzZSBpZiAoKGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYm1BdHRyaWJ1dGVzID09CisJCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCisJCQkJKChpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQlVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSkKKwkJeworCQkJLy8gdGhlcmUgYXJlIDYgYnVsayBvdXQgRVAuIEVQNiBoaWdoZXN0IHByaW9yaXR5LgorCQkJLy8gRVAxLTQgaXMgRURDQS4gIEVQNSBpcyBIQ0NBLgorCQkJcEFkLT5CdWxrT3V0RXBBZGRyW0J1bGtPdXRJZHgrK10gPSBpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCQlwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy53TWF4UGFja2V0U2l6ZTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiQlVMSyBPVVQgTWF4aW11bVBhY2tldFNpemUgPSAlZFxuIiwgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkpOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiRVAgYWRkcmVzcyA9IDB4JTJ4ICBcbiIsIGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykpOworCQl9CisJfQorCisJaWYgKCEocEFkLT5CdWxrSW5FcEFkZHIgJiYgcEFkLT5CdWxrT3V0RXBBZGRyWzBdKSkKKwl7CisJCXByaW50aygiJXM6IENvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBEaXNhYmxlIERNQS4KKworQXJndW1lbnRzOgorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisJTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVDI4WFhETUFEaXNhYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpCit7CisJLy8gbm8gdXNlCit9CisKKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEVuYWJsZSBETUEuCisKK0FyZ3VtZW50czoKKwkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorCU5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlQyOFhYRE1BRW5hYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpCit7CisJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisJVVNCX0RNQV9DRkdfU1RSVUMJVXNiQ2ZnOworCWludAkJCQkJaSA9IDA7CisKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHg0KTsKKwlkbworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmR2xvQ2ZnLndvcmQpOworCQlpZiAoKEdsb0NmZy5maWVsZC5UeERNQUJ1c3kgPT0gMCkgICYmIChHbG9DZmcuZmllbGQuUnhETUFCdXN5ID09IDApKQorCQkJYnJlYWs7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+ICBETUFCdXN5XG4iKSk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCWkrKzsKKwl9d2hpbGUgKCBpIDwyMDApOworCisKKwlSVE1QdXNlY0RlbGF5KDUwKTsKKwlHbG9DZmcuZmllbGQuRW5UWFdyaXRlQmFja0RET05FID0gMTsKKwlHbG9DZmcuZmllbGQuRW5hYmxlUnhETUEgPSAxOworCUdsb0NmZy5maWVsZC5FbmFibGVUeERNQSA9IDE7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFdSSVRFIERNQSBvZmZzZXQgMHgyMDggPSAweCV4XG4iLCBHbG9DZmcud29yZCkpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIEdsb0NmZy53b3JkKTsKKworCVVzYkNmZy53b3JkID0gMDsKKwlVc2JDZmcuZmllbGQucGh5Y2xlYXIgPSAwOworCS8qIHVzYiB2ZXJzaW9uIGlzIDEuMSxkbyBub3QgdXNlIGJ1bGsgaW4gYWdncmVnYXRpb24gKi8KKwlpZiAocEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID09IDUxMikKKwkJCVVzYkNmZy5maWVsZC5SeEJ1bGtBZ2dFbiA9IDE7CisJLyogZm9yIGxhc3QgcGFja2V0LCBQQkYgbWlnaHQgdXNlIG1vcmUgdGhhbiBsaW1pdGVkLCBzbyBtaW51cyAyIHRvIHByZXZlbnQgZnJvbSBlcnJvciAqLworCVVzYkNmZy5maWVsZC5SeEJ1bGtBZ2dMbXQgPSAoTUFYX1JYQlVMS19TSVpFIC8xMDI0KS0zOworCVVzYkNmZy5maWVsZC5SeEJ1bGtBZ2dUT3V0ID0gMHg4MDsgLyogMjAwNi0xMC0xOCAqLworCVVzYkNmZy5maWVsZC5SeEJ1bGtFbiA9IDE7CisJVXNiQ2ZnLmZpZWxkLlR4QnVsa0VuID0gMTsKKworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCBVc2JDZmcud29yZCk7CisKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBXcml0ZSBCZWFjb24gYnVmZmVyIHRvIEFzaWMuCisKK0FyZ3VtZW50czoKKwkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorCU5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlQyOHh4X1VwZGF0ZUJlYWNvblRvQXNpYygKKwlJTiBSVE1QX0FEQVBURVIJCSpwQWQsCisJSU4gSU5UCQkJCWFwaWR4LAorCUlOIFVMT05HCQkJRnJhbWVMZW4sCisJSU4gVUxPTkcJCQlVcGRhdGVQb3MpCit7CisJUFVDSEFSICAgICAgICAJcEJlYWNvbkZyYW1lID0gTlVMTDsKKwlVQ0hBUiAgCQkJKnB0cjsKKwlVSU5UICAJCQlpLCBwYWRkaW5nOworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwlVSU5UMzIJCQlsb25nVmFsdWU7CisvLwlVU0hPUlQJCQlzaG9ydFZhbHVlOworCUJPT0xFQU4JCQliQmNuUmVxID0gRkFMU0U7CisJVUNIQVIJCQliY25faWR4ID0gMDsKKworCisJaWYgKHBCZWFjb25GcmFtZSA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQmVhY29uRnJhbWUgaXMgTlVMTCFcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwQmVhY29uU3luYyA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQmVhY29uU3luYyBpcyBOVUxMIVxuIikpOworCQlyZXR1cm47CisJfQorCisJLy9pZiAoKHBBZC0+V2RzVGFiLk1vZGUgPT0gV0RTX0JSSURHRV9NT0RFKSB8fAorCS8vCSgocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLk1TU0lERGV2ID09IE5VTEwpIHx8ICEocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLk1TU0lERGV2LT5mbGFncyAmIElGRl9VUCkpCisJLy8JKQorCWlmIChiQmNuUmVxID09IEZBTFNFKQorCXsKKwkJLyogd2hlbiB0aGUgcmEgaW50ZXJmYWNlIGlzIGRvd24sIGRvIG5vdCBzZW5kIGl0cyBiZWFjb24gZnJhbWUgKi8KKwkJLyogY2xlYXIgYWxsIHplcm8gKi8KKwkJZm9yKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTQpIHsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgaSwgMHgwMCk7CisJCX0KKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCAmPSAofihCRUFDT05fQklUTUFQX01BU0sgJiAoMSA8PCBiY25faWR4KSkpOworCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtiY25faWR4XSwgVFhXSV9TSVpFKTsKKwl9CisJZWxzZQorCXsKKwkJcHRyID0gKFBVQ0hBUikmcEFkLT5CZWFjb25UeFdJOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUFdJRW5kaWFuQ2hhbmdlKHB0ciwgVFlQRV9UWFdJKTsKKyNlbmRpZgorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2Jjbl9pZHhdLCAmcEFkLT5CZWFjb25UeFdJLCBUWFdJX1NJWkUpID09IEZBTFNFKQorCQl7CS8vIElmIEJlYWNvblR4V0kgY2hhbmdlZCwgd2UgbmVlZCB0byByZXdyaXRlIHRoZSBUeFdJIGZvciB0aGUgQmVhY29uIGZyYW1lcy4KKwkJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgJj0gKH4oQkVBQ09OX0JJVE1BUF9NQVNLICYgKDEgPDwgYmNuX2lkeCkpKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2Jjbl9pZHhdLCAmcEFkLT5CZWFjb25UeFdJLCBUWFdJX1NJWkUpOworCQl9CisKKwkJaWYgKChwQmVhY29uU3luYy0+QmVhY29uQml0TWFwICYgKDEgPDwgYmNuX2lkeCkpICE9ICgxIDw8IGJjbl9pZHgpKQorCQl7CisJCQlmb3IgKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTQpICAvLyAxNi1ieXRlIFRYV0kgZmllbGQKKwkJCXsKKwkJCQlsb25nVmFsdWUgPSAgKnB0ciArICgqKHB0cisxKTw8OCkgKyAoKihwdHIrMik8PDE2KSArICgqKHB0ciszKTw8MjQpOworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgaSwgbG9uZ1ZhbHVlKTsKKwkJCQlwdHIgKz0gNDsKKwkJCX0KKwkJfQorCisJCXB0ciA9IHBCZWFjb25TeW5jLT5CZWFjb25CdWZbYmNuX2lkeF07CisJCXBhZGRpbmcgPSAoRnJhbWVMZW4gJiAweDAxKTsKKwkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4pLCBwYWRkaW5nKTsKKwkJRnJhbWVMZW4gKz0gcGFkZGluZzsKKwkJZm9yIChpID0gMCA7IGkgPCBGcmFtZUxlbiAvKkhXX0JFQUNPTl9PRkZTRVQqLzsgaSArPSAyKQorCQl7CisJCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHB0ciwgcEJlYWNvbkZyYW1lLCAyKSA9PSBGQUxTRSkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwdHIsIHBCZWFjb25GcmFtZSwgMik7CisJCQkJLy9zaG9ydFZhbHVlID0gKnB0ciArICgqKHB0cisxKTw8OCk7CisJCQkJLy9SVE1QX0lPX1dSSVRFOChwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgVFhXSV9TSVpFICsgaSwgc2hvcnRWYWx1ZSk7CisJCQkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgcEFkLT5CZWFjb25PZmZzZXRbYmNuX2lkeF0gKyBUWFdJX1NJWkUgKyBpLCBwdHIsIDIpOworCQkJfQorCQkJcHRyICs9MjsKKwkJCXBCZWFjb25GcmFtZSArPSAyOworCQl9CisKKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCB8PSAoMSA8PCBiY25faWR4KTsKKworCQkvLyBGb3IgQVAgaW50ZXJmYWNlLCBzZXQgdGhlIER0aW1CaXRPbiBzbyB0aGF0IHdlIGNhbiBzZW5kIEJjYXN0L01jYXN0IGZyYW1lIG91dCBhZnRlciB0aGlzIGJlYWNvbiBmcmFtZS4KKwl9CisKK30KKworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25TdG9wKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJaW50IGksIG9mZnNldDsKKwlCT09MRUFOCUNhbmNlbGxlZCA9IFRSVUU7CisKKwlwQmVhY29uU3luYyA9IHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jOworCWlmIChwQmVhY29uU3luYyAmJiBwQmVhY29uU3luYy0+RW5hYmxlQmVhY29uKQorCXsKKwkJSU5UIE51bU9mQmNuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJTnVtT2ZCY24gPSBNQVhfTUVTSF9OVU07CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCAmQ2FuY2VsbGVkKTsKKworCQlmb3IoaT0wOyBpPE51bU9mQmNuOyBpKyspCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbaV0sIEhXX0JFQUNPTl9PRkZTRVQpOworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbaV0sIFRYV0lfU0laRSk7CisKKwkJCWZvciAob2Zmc2V0PTA7IG9mZnNldDxIV19CRUFDT05fT0ZGU0VUOyBvZmZzZXQrPTQpCisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgcEFkLT5CZWFjb25PZmZzZXRbaV0gKyBvZmZzZXQsIDB4MDApOworCisJCQlwQmVhY29uU3luYy0+Q2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCXBCZWFjb25TeW5jLT5UaW1JRUxvY2F0aW9uSW5CZWFjb25baV0gPSAwOworCQl9CisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgPSAwOworCQlwQmVhY29uU3luYy0+RHRpbUJpdE9uID0gMDsKKwl9Cit9CisKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uU3RhcnQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpCit7CisJaW50IGFwaWR4OworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisvLwlMQVJHRV9JTlRFR0VSIAl0c2ZUaW1lLCBkZWx0YVRpbWU7CisKKwlwQmVhY29uU3luYyA9IHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jOworCWlmIChwQmVhY29uU3luYyAmJiBwQmVhY29uU3luYy0+RW5hYmxlQmVhY29uKQorCXsKKwkJSU5UIE51bU9mQmNuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJTnVtT2ZCY24gPSBNQVhfTUVTSF9OVU07CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlmb3IoYXBpZHg9MDsgYXBpZHg8TnVtT2ZCY247IGFwaWR4KyspCisJCXsKKwkJCVVDSEFSIENhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbiA9IDA7CisJCQlVQ0hBUiBUaW1JRUxvY2F0aW9uSW5CZWFjb24gPSAwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbYXBpZHhdLCBIV19CRUFDT05fT0ZGU0VUKTsKKwkJCXBCZWFjb25TeW5jLT5DYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb25bYXBpZHhdID0gQ2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uOworCQkJcEJlYWNvblN5bmMtPlRpbUlFTG9jYXRpb25JbkJlYWNvblthcGlkeF0gPSBUaW1JRUxvY2F0aW9uSW5CZWFjb247CisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVthcGlkeF0sIFRYV0lfU0laRSk7CisJCX0KKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7CisJCXBCZWFjb25TeW5jLT5EdGltQml0T24gPSAwOworCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lci5SZXBlYXQgPSBUUlVFOworCisJCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvbkFkanVzdCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvbkZhY3RvciA9IDB4ZmZmZmZmZmYgLyAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKKwkJcEFkLT5Db21tb25DZmcuQmVhY29uUmVtYWluID0gKDB4ZmZmZmZmZmYgJSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKSkgKyAxOworCQlwcmludGsoIlJUMjg3MF9Cc3NCZWFjb25TdGFydDpCZWFjb25GYWN0b3I9JWQsIEJlYWNvblJlbWFpbj0lZCFcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvbkZhY3RvciwgcEFkLT5Db21tb25DZmcuQmVhY29uUmVtYWluKTsKKwkJUlRNUFNldFRpbWVyKCZwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lciwgcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kKTsKKworCX0KK30KKworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25Jbml0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJaW50IGk7CisKKwlOZGlzQWxsb2NNZW1vcnkocEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMsIHNpemVvZihCRUFDT05fU1lOQ19TVFJVQ1QpLCBNRU1fQUxMT0NfRkxBRyk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jKQorCXsKKwkJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMsIHNpemVvZihCRUFDT05fU1lOQ19TVFJVQ1QpKTsKKwkJZm9yKGk9MDsgaSA8IEhXX0JFQUNPTl9NQVhfQ09VTlQ7IGkrKykKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvbkJ1ZltpXSwgSFdfQkVBQ09OX09GRlNFVCk7CisJCQlwQmVhY29uU3luYy0+Q2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCXBCZWFjb25TeW5jLT5UaW1JRUxvY2F0aW9uSW5CZWFjb25baV0gPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbaV0sIFRYV0lfU0laRSk7CisJCX0KKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7CisKKwkJLy9SVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQmVhY29uVXBkYXRlRXhlYyksIHBBZCwgVFJVRSk7CisJCXBCZWFjb25TeW5jLT5FbmFibGVCZWFjb24gPSBUUlVFOworCX0KK30KKworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25FeGl0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJQk9PTEVBTglDYW5jZWxsZWQgPSBUUlVFOworCWludCBpOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jKQorCXsKKwkJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwkJcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbiA9IEZBTFNFOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7CisKKwkJZm9yKGk9MDsgaTxIV19CRUFDT05fTUFYX0NPVU5UOyBpKyspCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbaV0sIEhXX0JFQUNPTl9PRkZTRVQpOworCQkJcEJlYWNvblN5bmMtPkNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7CisJCQlwQmVhY29uU3luYy0+VGltSUVMb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2ldLCBUWFdJX1NJWkUpOworCQl9CisKKwkJTmRpc0ZyZWVNZW1vcnkocEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMsIEhXX0JFQUNPTl9PRkZTRVQgKiBIV19CRUFDT05fTUFYX0NPVU5ULCAwKTsKKwkJcEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMgPSBOVUxMOworCX0KK30KKworVk9JRCBCZWFjb25VcGRhdGVFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlQUlRNUF9BREFQVEVSCXBBZCA9IChQUlRNUF9BREFQVEVSKUZ1bmN0aW9uQ29udGV4dDsKKwlMQVJHRV9JTlRFR0VSCXRzZlRpbWVfYTsvLywgdHNmVGltZV9iLCBkZWx0YVRpbWVfZXhwLCBkZWx0YVRpbWVfYWI7CisJVUlOVDMyCQkJZGVsdGEsIHJlbWFpbiwgcmVtYWluX2xvdywgcmVtYWluX2hpZ2g7CisvLwlCT09MRUFOCQkJcG9zaXRpdmU7CisKKwlSZVN5bmNCZWFjb25UaW1lKHBBZCk7CisKKworCisJUlRNUF9JT19SRUFEMzIocEFkLCBUU0ZfVElNRVJfRFcwLCAmdHNmVGltZV9hLnUuTG93UGFydCk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUU0ZfVElNRVJfRFcxLCAmdHNmVGltZV9hLnUuSGlnaFBhcnQpOworCisKKwkvL3Bvc2l0aXZlPWdldERlbHRhVGltZSh0c2ZUaW1lX2EsIGV4cGVjdGVkVGltZSwgJmRlbHRhVGltZV9leHApOworCXJlbWFpbl9oaWdoID0gcEFkLT5Db21tb25DZmcuQmVhY29uUmVtYWluICogdHNmVGltZV9hLnUuSGlnaFBhcnQ7CisJcmVtYWluX2xvdyA9IHRzZlRpbWVfYS51Lkxvd1BhcnQgJSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKKwlyZW1haW4gPSAocmVtYWluX2hpZ2ggKyByZW1haW5fbG93KSUocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKKwlkZWx0YSA9IChwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgMTApIC0gcmVtYWluOworCisJcEFkLT5Db21tb25DZmcuQmVhY29uVXBkYXRlVGltZXIuVGltZXJWYWx1ZSA9IChkZWx0YSA+PiAxMCkgKyAxMDsKKworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3ZmI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvS2NvbmZpZwpAQCAtMCwwICsxLDYgQEAKK2NvbmZpZyBSVDMwNzAKKwl0cmlzdGF0ZSAiUmFsaW5rIDMwNzAgd2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBYODYgJiYgV0xBTl84MDIxMQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayAzMDcwIHdpcmVsZXNzIGNoaXAuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTgwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL01ha2VmaWxlCkBAIC0wLDAgKzEsNDcgQEAKK29iai0kKENPTkZJR19SVDMwNzApCSs9IHJ0MzA3MHN0YS5vCisKKyMgVE9ETzogYWxsIG9mIHRoZXNlIHNob3VsZCBiZSByZW1vdmVkCitFWFRSQV9DRkxBR1MgKz0gLURMSU5VWCAtREFHR1JFR0FUSU9OX1NVUFBPUlQgLURQSUdHWUJBQ0tfU1VQUE9SVCAtRFdNTV9TVVBQT1JUCitFWFRSQV9DRkxBR1MgKz0gLURSVDI4NzAgLURSVDMweHggLURSVDMwNzAKK0VYVFJBX0NGTEFHUyArPSAtRENPTkZJR19TVEFfU1VQUE9SVAorRVhUUkFfQ0ZMQUdTICs9IC1EREJHCitFWFRSQV9DRkxBR1MgKz0gLURET1QxMV9OX1NVUFBPUlQKK0VYVFJBX0NGTEFHUyArPSAtRFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKK0VYVFJBX0NGTEFHUyArPSAtRE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisKK3J0MzA3MHN0YS1vYmpzIDo9CQlcCisJY29tbW9uL21kNS5vCQlcCisJY29tbW9uL21sbWUubwkJXAorCWNvbW1vbi9ydG1wX3dlcC5vCVwKKwljb21tb24vYWN0aW9uLm8JCVwKKwljb21tb24vY21tX2RhdGEubwlcCisJY29tbW9uL3J0bXBfaW5pdC5vCVwKKwljb21tb24vcnRtcF90a2lwLm8JXAorCWNvbW1vbi9jbW1fc3luYy5vCVwKKwljb21tb24vZWVwcm9tLm8JCVwKKwljb21tb24vY21tX3Nhbml0eS5vCVwKKwljb21tb24vY21tX2luZm8ubwlcCisJY29tbW9uL2NtbV93cGEubwlcCisJY29tbW9uL2Rmcy5vCQlcCisJY29tbW9uL3NwZWN0cnVtLm8JXAorCXN0YS9hc3NvYy5vCQlcCisJc3RhL2Fpcm9uZXQubwkJXAorCXN0YS9hdXRoLm8JCVwKKwlzdGEvYXV0aF9yc3AubwkJXAorCXN0YS9zeW5jLm8JCVwKKwlzdGEvc2FuaXR5Lm8JCVwKKwlzdGEvcnRtcF9kYXRhLm8JCVwKKwlzdGEvY29ubmVjdC5vCQlcCisJc3RhL3dwYS5vCQlcCisJcnRfbGludXgubwkJXAorCXJ0X3Byb2ZpbGUubwkJXAorCXJ0X21haW5fZGV2Lm8JCVwKKwlzdGFfaW9jdGwubwkJXAorCWNvbW1vbi9iYV9hY3Rpb24ubwlcCisJMjg3MF9tYWluX2Rldi5vCQlcCisJY29tbW9uLzI4NzBfcnRtcF9pbml0Lm8JXAorCWNvbW1vbi9ydHVzYl9pby5vCVwKKwljb21tb24vcnR1c2JfYnVsay5vCVwKKwljb21tb24vcnR1c2JfZGF0YS5vCVwKKwljb21tb24vY21tX2RhdGFfMjg3MC5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWN0aW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzg3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FjdGlvbi5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYWlyb25ldC5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisJUGF1bCBMaW4JMDQtMDYtMTUJCUluaXRpYWwKKyovCisKKyNpZm5kZWYJX19BQ1RJT05fSF9fCisjZGVmaW5lCV9fQUNUSU9OX0hfXworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX19IVF9JTkZPX09DVEVUCit7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVJlc2VydmVkOjU7CisJVUNIQVIgCVNUQV9DaGFubmVsX1dpZHRoOjE7CisJVUNIQVIJRm9ydHlfTUh6X0ludG9sZXJhbnQ6MTsKKwlVQ0hBUglSZXF1ZXN0OjE7CisjZWxzZQorCVVDSEFSCVJlcXVlc3Q6MTsKKwlVQ0hBUglGb3J0eV9NSHpfSW50b2xlcmFudDoxOworCVVDSEFSIAlTVEFfQ2hhbm5lbF9XaWR0aDoxOworCVVDSEFSCVJlc2VydmVkOjU7CisjZW5kaWYKK30gSFRfSU5GT1JNQVRJT05fT0NURVQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9fRlJBTUVfSFRfSU5GTworeworCUhFQURFUl84MDJfMTEgICAJCUhkcjsKKwlVQ0hBUgkJCQkJQ2F0ZWdvcnk7CisJVUNIQVIJCQkJCUFjdGlvbjsKKwlIVF9JTkZPUk1BVElPTl9PQ1RFVAlIVF9JbmZvOworfSAgIEZSQU1FX0hUX0lORk8sICpQRlJBTUVfSFRfSU5GTzsKKworI2VuZGlmIC8qIF9fQUNUSU9OX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWlyb25ldC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9haXJvbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwN2IxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWlyb25ldC5oCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWFpcm9uZXQuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworCVBhdWwgTGluCTA0LTA2LTE1CQlJbml0aWFsCisqLworCisjaWZuZGVmCV9fQUlST05FVF9IX18KKyNkZWZpbmUJX19BSVJPTkVUX0hfXworCisvLyBNZWFzdXJlbWVudCBUeXBlIGRlZmluaXRpb24KKyNkZWZpbmUJTVNSTl9UWVBFX1VOVVNFRAkJCQkwCisjZGVmaW5lCU1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVRCQkxCisjZGVmaW5lCU1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUQkJMgorI2RlZmluZQlNU1JOX1RZUEVfQkVBQ09OX1JFUQkJCTMKKyNkZWZpbmUJTVNSTl9UWVBFX0ZSQU1FX1JFUQkJCQk0CisKKy8vIFNjYW4gTW9kZSBpbiBCZWFjb24gUmVxdWVzdAorI2RlZmluZQlNU1JOX1NDQU5fTU9ERV9QQVNTSVZFCQkJMAorI2RlZmluZQlNU1JOX1NDQU5fTU9ERV9BQ1RJVkUJCQkxCisjZGVmaW5lCU1TUk5fU0NBTl9NT0RFX0JFQUNPTl9UQUJMRQkJMgorCisvLyBQSFkgdHlwZSBkZWZpbml0aW9uIGZvciBBaXJvbmV0IGJlYWNvbiByZXBvcnQsIENDWCAyIHRhYmxlIDM2LTkKKyNkZWZpbmUJUEhZX0ZICQkJCQkJCTEKKyNkZWZpbmUJUEhZX0RTUwkJCQkJCQkyCisjZGVmaW5lCVBIWV9VTlVTRUQJCQkJCQkzCisjZGVmaW5lCVBIWV9PRkRNCQkJCQkJNAorI2RlZmluZQlQSFlfSFJfRFNTCQkJCQkJNQorI2RlZmluZQlQSFlfRVJQCQkJCQkJCTYKKworLy8gUlBJIHRhYmxlIGluIGRCbQorI2RlZmluZQlSUElfMAkJCTAJCQkvLwlQb3dlciA8PSAtODcKKyNkZWZpbmUJUlBJXzEJCQkxCQkJLy8JLTg3IDwgUG93ZXIgPD0gLTgyCisjZGVmaW5lCVJQSV8yCQkJMgkJCS8vCS04MiA8IFBvd2VyIDw9IC03NworI2RlZmluZQlSUElfMwkJCTMJCQkvLwktNzcgPCBQb3dlciA8PSAtNzIKKyNkZWZpbmUJUlBJXzQJCQk0CQkJLy8JLTcyIDwgUG93ZXIgPD0gLTY3CisjZGVmaW5lCVJQSV81CQkJNQkJCS8vCS02NyA8IFBvd2VyIDw9IC02MgorI2RlZmluZQlSUElfNgkJCTYJCQkvLwktNjIgPCBQb3dlciA8PSAtNTcKKyNkZWZpbmUJUlBJXzcJCQk3CQkJLy8JLTU3IDwgUG93ZXIKKworLy8gQ2lzY28gQWlyb25ldCBJQVBQIGRlZmluZXRpb25zCisjZGVmaW5lCUFJUk9ORVRfSUFQUF9UWVBFCQkJCQkweDMyCisjZGVmaW5lCUFJUk9ORVRfSUFQUF9TVUJUWVBFX1JFUVVFU1QJCTB4MDEKKyNkZWZpbmUJQUlST05FVF9JQVBQX1NVQlRZUEVfUkVQT1JUCQkJMHg4MQorCisvLyBNZWFzdXJlbWVudCBSZXF1ZXN0IGRldGFpbCBmb3JtYXQKK3R5cGVkZWYJc3RydWN0CV9NRUFTVVJFTUVOVF9SRVFVRVNUCXsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCVNjYW5Nb2RlOwkJCS8vIFVzZSBvbmx5IGluIGJlYWNvbiByZXF1ZXN0LCBvdGhlciByZXF1ZXN0cyBkaWQgbm90IHVzZSB0aGlzIGZpZWxkCisJVVNIT1JUCUR1cmF0aW9uOworfQlNRUFTVVJFTUVOVF9SRVFVRVNULCAqUE1FQVNVUkVNRU5UX1JFUVVFU1Q7CisKKy8vIEJlYWNvbiBNZWFzdXJlbWVudCBSZXBvcnQKKy8vIEFsbCB0aGVzZSBmaWVsZCBtaWdodCBjaGFuZ2UgdG8gVUNIQVIsIGJlY2F1c2Ugd2UgZGlkbid0IGRvIGFueXRoaW5nIHRvIHRoZXNlIHJlcG9ydC4KKy8vIFdlIGNvcHkgYWxsIHRoZXNlIGJlYWNvbnMgYW5kIHJlcG9ydCB0byBDQ1ggMiBBUC4KK3R5cGVkZWYJc3RydWN0CV9CRUFDT05fUkVQT1JUCXsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCVNwYXJlOworCVVTSE9SVAlEdXJhdGlvbjsKKwlVQ0hBUglQaHlUeXBlOwkJCS8vIERlZmluaWF0aW9uIGlzIGxpc3RlZCBhYm92ZSB0YWJsZSAzNi05CisJVUNIQVIJUnhQb3dlcjsKKwlVQ0hBUglCU1NJRFs2XTsKKwlVQ0hBUglQYXJlbnRUU0ZbNF07CisJVUNIQVIJVGFyZ2V0VFNGWzhdOworCVVTSE9SVAlCZWFjb25JbnRlcnZhbDsKKwlVU0hPUlQJQ2FwYWJpbGl0eUluZm87Cit9CUJFQUNPTl9SRVBPUlQsICpQQkVBQ09OX1JFUE9SVDsKKworLy8gRnJhbWUgTWVhc3VyZW1lbnQgUmVwb3J0IChPcHRpb25hbCkKK3R5cGVkZWYJc3RydWN0CV9GUkFNRV9SRVBPUlQJeworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJU3BhcmU7CisJVVNIT1JUCUR1cmF0aW9uOworCVVDSEFSCVRBOworCVVDSEFSCUJTU0lEWzZdOworCVVDSEFSCVJTU0k7CisJVUNIQVIJQ291bnQ7Cit9CUZSQU1FX1JFUE9SVCwgKlBGUkFNRV9SRVBPUlQ7CisKKyNwcmFnbWEgcGFjaygxKQorLy8gQ2hhbm5lbCBMb2FkIFJlcG9ydAordHlwZWRlZglzdHJ1Y3QJX0NIQU5ORUxfTE9BRF9SRVBPUlQJeworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJU3BhcmU7CisJVVNIT1JUCUR1cmF0aW9uOworCVVDSEFSCUNDQUJ1c3k7Cit9CUNIQU5ORUxfTE9BRF9SRVBPUlQsICpQQ0hBTk5FTF9MT0FEX1JFUE9SVDsKKyNwcmFnbWEgcGFjaygpCisKKy8vIE5vc2llIEhpc3RvZ3JhbSBSZXBvcnQKK3R5cGVkZWYJc3RydWN0CV9OT0lTRV9ISVNUX1JFUE9SVAl7CisJVUNIQVIJQ2hhbm5lbDsKKwlVQ0hBUglTcGFyZTsKKwlVU0hPUlQJRHVyYXRpb247CisJVUNIQVIJRGVuc2l0eVs4XTsKK30JTk9JU0VfSElTVF9SRVBPUlQsICpQTk9JU0VfSElTVF9SRVBPUlQ7CisKKy8vIFJhZGlvIE1hbmFnZW1lbnQgQ2FwYWJpbGl0eSBlbGVtZW50Cit0eXBlZGVmCXN0cnVjdAlfUkFESU9fTUFOQUdFTUVOVF9DQVBBQklMSVRZCXsKKwlVQ0hBUglFaWQ7CQkJCS8vIFRPRE86IFdoeSB0aGUgRWlkIGlzIDEgYnl0ZSwgbm90IG5vcm1hbCAyIGJ5dGVzPz8/CisJVUNIQVIJTGVuZ3RoOworCVVDSEFSCUFpcm9uZXRPdWlbM107CQkvLyBBSXJvbmV0IE9VSSAoMDAgNDAgOTYpCisJVUNIQVIJVHlwZTsJCQkJLy8gVHlwZSAvIFZlcnNpb24KKwlVU0hPUlQJU3RhdHVzOwkJCQkvLyBzd2FwMTYgcmVxdWlyZWQKK30JUkFESU9fTUFOQUdFTUVOVF9DQVBBQklMSVRZLCAqUFJBRElPX01BTkFHRU1FTlRfQ0FQQUJJTElUWTsKKworLy8gTWVhc3VyZW1lbnQgTW9kZSBCaXQgZGVmaW5pdGlvbgordHlwZWRlZglzdHJ1Y3QJX01FQVNVUkVNRU5UX01PREUJeworCVVDSEFSCVJzdmQ6NDsKKwlVQ0hBUglSZXBvcnQ6MTsKKwlVQ0hBUglOb3RVc2VkOjE7CisJVUNIQVIJRW5hYmxlOjE7CisJVUNIQVIJUGFyYWxsZWw6MTsKK30JTUVBU1VSRU1FTlRfTU9ERSwgKlBNRUFTVVJFTUVOVF9NT0RFOworCisvLyBNZWFzdXJlbWVudCBSZXF1ZXN0IGVsZW1lbnQsIFRoaXMgaXMgbGl0dGxlIGVuZGlhbiBtb2RlCit0eXBlZGVmCXN0cnVjdAlfTUVBU1VSRU1FTlRfUkVRVUVTVF9FTEVNRU5UCXsKKwlVU0hPUlQJCQkJRWlkOworCVVTSE9SVAkJCQlMZW5ndGg7CQkJCS8vIHN3YXAxNiByZXF1aXJlZAorCVVTSE9SVAkJCQlUb2tlbjsJCQkJLy8gbm9uLXplcm8gdW5pcXVlIHRva2VuCisJVUNIQVIJCQkJTW9kZTsJCQkJLy8gTWVhc3VyZW1lbnQgTW9kZQorCVVDSEFSCQkJCVR5cGU7CQkJCS8vIE1lYXN1cmVtZW50IHR5cGUKK30JTUVBU1VSRU1FTlRfUkVRVUVTVF9FTEVNRU5ULCAqUE1FQVNVUkVNRU5UX1JFUVVFU1RfRUxFTUVOVDsKKworLy8gTWVhc3VyZW1lbnQgUmVwb3J0IGVsZW1lbnQsIFRoaXMgaXMgbGl0dGxlIGVuZGlhbiBtb2RlCit0eXBlZGVmCXN0cnVjdAlfTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJeworCVVTSE9SVAkJCQlFaWQ7CisJVVNIT1JUCQkJCUxlbmd0aDsJCQkJLy8gc3dhcDE2IHJlcXVpcmVkCisJVVNIT1JUCQkJCVRva2VuOwkJCQkvLyBub24temVybyB1bmlxdWUgdG9rZW4KKwlVQ0hBUgkJCQlNb2RlOwkJCQkvLyBNZWFzdXJlbWVudCBNb2RlCisJVUNIQVIJCQkJVHlwZTsJCQkJLy8gTWVhc3VyZW1lbnQgdHlwZQorfQlNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCwgKlBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVDsKKworLy8gQ2lzY28gQWlyb25ldCBJQVBQIEZyYW1lIEhlYWRlciwgTmV0d29yayBieXRlIG9yZGVyIHVzZWQKK3R5cGVkZWYJc3RydWN0CV9BSVJPTkVUX0lBUFBfSEVBREVSIHsKKwlVQ0hBUglDaXNjb1NuYXBIZWFkZXJbOF07CS8vIDggYnl0ZXMgQ2lzY28gc25hcCBoZWFkZXIKKwlVU0hPUlQJTGVuZ3RoOwkJCQkvLyBJQVBQIElEICYgbGVuZ3RoLCByZW1lbWJlciB0byBzd2FwMTYgaW4gTEUgc3lzdGVtCisJVUNIQVIJVHlwZTsJCQkJLy8gSUFQUCB0eXBlCisJVUNIQVIJU3ViVHlwZTsJCQkvLyBJQVBQIHN1YnR5cGUKKwlVQ0hBUglEQVs2XTsJCQkJLy8gRGVzdGluYXRpb24gTUFDIGFkZHJlc3MKKwlVQ0hBUglTQVs2XTsJCQkJLy8gU291cmNlIE1BQyBhZGRyZXNzCisJVVNIT1JUCVRva2VuOwkJCQkvLyBEaWFsb2cgdG9rZW4sIG5vIG5lZWQgdG8gc3dhcDE2IHNpbmNlIGl0IGlzIGZvciB5b2tlbiB1c2FnZSBvbmx5Cit9CUFJUk9ORVRfSUFQUF9IRUFERVIsICpQQUlST05FVF9JQVBQX0hFQURFUjsKKworLy8gUmFkaW8gTWVhc3VyZW1lbnQgUmVxdWVzdCBmcmFtZQordHlwZWRlZglzdHJ1Y3QJX0FJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRQl7CisgICAgQUlST05FVF9JQVBQX0hFQURFUglJQVBQOwkJCS8vIENvbW1vbiBoZWFkZXIKKwlVQ0hBUgkJCQlEZWxheTsJCQkvLyBBY3RpdmF0aW9uIERlbGF5CisJVUNIQVIJCQkJT2Zmc2V0OwkJCS8vIE1lYXN1cmVtZW50IG9mZnNldAorfQlBSVJPTkVUX1JNX1JFUVVFU1RfRlJBTUUsICpQQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FOworCisvLyBSYWRpbyBNZWFzdXJlbWVudCBSZXBvcnQgZnJhbWUKK3R5cGVkZWYJc3RydWN0CV9BSVJPTkVUX1JNX1JFUE9SVF9GUkFNRQl7CisgICAgQUlST05FVF9JQVBQX0hFQURFUglJQVBQOwkJCS8vIENvbW1vbiBoZWFkZXIKK30JQUlST05FVF9STV9SRVBPUlRfRlJBTUUsICpQQUlST05FVF9STV9SRVBPUlRfRlJBTUU7CisKKy8vIFNhdmVkIGVsZW1lbnQgcmVxdWVzdCBhY3Rpb25zIHdoaWNoIHdpbGwgc2F2ZWQgaW4gU3RhQ2ZnLgordHlwZWRlZglzdHJ1Y3QJX1JNX1JFUVVFU1RfQUNUSU9OCXsKKwlNRUFTVVJFTUVOVF9SRVFVRVNUX0VMRU1FTlQJUmVxRWxlbTsJCS8vIFNhdmVkIHJlcXVlc3QgZWxlbWVudAorCU1FQVNVUkVNRU5UX1JFUVVFU1QJCQlNZWFzdXJlbWVudDsJLy8gU2F2ZWQgbWVhc3VyZW1lbnQgd2l0aGluIHRoZSByZXF1ZXN0IGVsZW1lbnQKK30JUk1fUkVRVUVTVF9BQ1RJT04sICpQUk1fUkVRVUVTVF9BQ1RJT047CisKKy8vIENDWCBhZG1pbmlzdHJhdGlvbiBjb250cm9sCit0eXBlZGVmCXVuaW9uCV9DQ1hfQ09OVFJPTAl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlFbmFibGU6MTsJCQkvLyBFbmFibGUgQ0NYMgorCQlVSU5UMzIJCUxlYXBFbmFibGU6MTsJCS8vIEVuYWJsZSBMRUFQIGF0IENDWDIKKwkJVUlOVDMyCQlSTUVuYWJsZToxOwkJCS8vIFJhZGlvIE1lYXN1cmVtZW50IEVuYWJsZQorCQlVSU5UMzIJCURDUk1FbmFibGU6MTsJCS8vIE5vbiBzZXJ2aW5nIGNoYW5uZWwgUmFkaW8gTWVhc3VyZW1lbnQgZW5hYmxlCisJCVVJTlQzMgkJUU9TRW5hYmxlOjE7CQkvLyBFbmFibGUgUU9TIGZvciBDQ1ggMi4wIHN1cHBvcnQKKwkJVUlOVDMyCQlGYXN0Um9hbUVuYWJsZToxOwkvLyBFbmFibGUgZmFzdCByb2FtaW5nCisJCVVJTlQzMgkJUnN2ZDoyOwkJCQkvLyBOb3QgdXNlZAorCQlVSU5UMzIJCWRCbVRvUm9hbTo4OwkJLy8gdGhlIGNvbmRpdGlvbiB0byByb2FtIHdoZW4gcmVjZWl2aW5nIFJzc2kgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIEl0J3MgbmVnYXRpdmUgdmFsdWUuCisJCVVJTlQzMgkJVHVMaW1pdDoxNjsJCQkvLyBMaW1pdCBmb3IgZGlmZmVyZW50IGNoYW5uZWwgc2NhbgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ0NYX0NPTlRST0wsICpQQ0NYX0NPTlRST0w7CisKKyNlbmRpZgkvLyBfX0FJUk9ORVRfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViYTA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYXAuaApAQCAtMCwwICsxLDU1NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBhcC5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUGF1bCBMaW4gICAgMDgtMDEtMjAwMiAgICBjcmVhdGVkCisgICAgSmFtZXMgVGFuICAgMDktMDYtMjAwMiAgICBtb2RpZmllZCAoUmV2aXNlIE5UQ1JlZ1RhYmxlKQorICAgIEpvaG4gQ2hhbmcgIDEyLTIyLTIwMDQgICAgbW9kaWZpZWQgZm9yIFJUMjU2MS8yNjYxLiBtZXJnZSB3aXRoIFNUQSBkcml2ZXIKKyovCisjaWZuZGVmIF9fQVBfSF9fCisjZGVmaW5lIF9fQVBfSF9fCisKKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEFQIFJUTVAuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gICAgICBGdW5jdGlvbiBQcm90b3R5cGVzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIGFwX2RhdGEuYworCitCT09MRUFOIEFQQnJpZGdlVG9XaXJlbGVzc1N0YSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBIZWFkZXIsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIERhdGFMZW4sCisgICAgSU4gIFVMT05HICAgICAgICAgICBmcm9td2RzaWR4KTsKKworQk9PTEVBTiBBUEhhbmRsZVJ4RG9uZUludGVycnVwdCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQJQVBTZW5kUGFja2V0cygKKwlJTglORElTX0hBTkRMRQkJTWluaXBvcnRBZGFwdGVyQ29udGV4dCwKKwlJTglQUE5ESVNfUEFDS0VUCXBwUGFja2V0QXJyYXksCisJSU4JVUlOVAkJCU51bWJlck9mUGFja2V0cyk7CisKK05ESVNfU1RBVFVTIEFQU2VuZFBhY2tldCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQpOworCisKK05ESVNfU1RBVFVTIEFQSGFyZFRyYW5zbWl0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JVUNIQVIJCQlRdWVJZHgpOworCitWT0lEIEFQUnhFQVBPTEZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworTkRJU19TVEFUVVMgQVBDaGVja1J4RXJyb3IoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFJUMjhYWF9SWERfU1RSVUMJCXBSeEQsCisJSU4JVUNIQVIJCQlXY2lkKTsKKworQk9PTEVBTiBBUENoZWNrQ2xhc3MyQ2xhc3MzRXJyb3IoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gVUxPTkcgV2NpZCwKKwlJTiAgUEhFQURFUl84MDJfMTEgIHBIZWFkZXIpOworCitWT0lEIEFQSGFuZGxlUnhQc1BvbGwoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcEFkZHIsCisJSU4JVVNIT1JUCQkJQWlkLAorICAgIElOCUJPT0xFQU4JCQlpc0FjdGl2ZSk7CisKK1ZPSUQgICAgUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIERlc2NyaXB0b3JUeXBlKTsKKworVk9JRCAgICBSVE1QRnJhbWVFbmRpYW5DaGFuZ2UoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIERpciwKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgIEZyb21SeERvbmVJbnQpOworCisvLyBhcF9hc3NvYy5jCisKK1ZPSUQgQVBBc3NvY1N0YXRlTWFjaGluZUluaXQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCAgQVBQZWVyQXNzb2NSZXFBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIEFQUGVlclJlYXNzb2NSZXFBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIEFQUGVlckRpc2Fzc29jUmVxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1ic3NLaWNrT3V0U3RhcygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBJTlQgYXBpZHgsCisJSU4gVVNIT1JUIFJlYXNvbik7CisKK1ZPSUQgQVBNbG1lS2lja091dFN0YSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcFN0YUFkZHIsCisJSU4gVUNIQVIgV2NpZCwKKwlJTiBVU0hPUlQgUmVhc29uKTsKKworVk9JRCBBUE1sbWVEaXNhc3NvY1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICBBUENsczNlcnJBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gCVVMT05HIFdjaWQsCisgICAgSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlcik7CisKKworVVNIT1JUIEFQQnVpbGRBc3NvY2lhdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSwKKyAgICBJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisgICAgSU4gVUNIQVIgIE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMsCisgICAgSU4gVUNIQVIgICpSU04sCisgICAgSU4gVUNIQVIgICpwUlNOTGVuLAorICAgIElOIEJPT0xFQU4gYldtbUNhcGFibGUsCisgICAgSU4gVUxPTkcgIFJhbGlua0llLAorI2lmZGVmIERPVDExTl9EUkFGVDMKKyAgICBJTiBFWFRfQ0FQX0lORk9fRUxFTUVOVCBFeHRDYXBJbmZvLAorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKwlJTiBIVF9DQVBBQklMSVRZX0lFCQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiBVQ0hBUgkJIEh0Q2FwYWJpbGl0eUxlbiwKKyAgICBPVVQgVVNIT1JUICpwQWlkKTsKKworLyoKK1ZPSUQJUlRNUEFkZENsaWVudFNlYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUglCc3NJZHgsCisJSU4gVUNIQVIJCSBLZXlJZHgsCisJSU4gVUNIQVIJCSBDaXBoZXJBbGcsCisJSU4gUFVDSEFSCQkgcEtleSwKKwlJTiBQVUNIQVIJCSBwVHhNaWMsCisJSU4gUFVDSEFSCQkgcFJ4TWljLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5KTsKKyovCisKKy8vIGFwX2F1dGguYworCit2b2lkIEFQQXV0aFN0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gU1RBVEVfTUFDSElORSAqU20sCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBBUE1sbWVEZWF1dGhSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUENsczJlcnJBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gCVVMT05HIFdjaWQsCisgICAgSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlcik7CisKKy8vIGFwX2F1dGhyc3AuYworCitWT0lEIEFQQXV0aFJzcFN0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUFNUQVRFX01BQ0hJTkUgU20sCisgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIEFQUGVlckF1dGhBdEF1dGhSc3BJZGxlQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlckRlYXV0aFJlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlckF1dGhTaW1wbGVSc3BHZW5BbmRTZW5kKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gIFVTSE9SVCBBbGcsCisgICAgSU4gIFVTSE9SVCBTZXEsCisgICAgSU4gIFVTSE9SVCBTdGF0dXNDb2RlKTsKKworLy8gYXBfY29ubmVjdC5jCisKK0JPT0xFQU4gQmVhY29uVHJhbnNtaXRSZXF1aXJlZCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBJTlQJCQkJYXBpZHgpOworCitWT0lEIEFQTWFrZUJzc0JlYWNvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglJTlQJCQkJYXBpZHgpOworCitWT0lEICBBUFVwZGF0ZUJlYWNvbkZyYW1lKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCUlOVAkJCQlhcGlkeCk7CisKK1ZPSUQgQVBNYWtlQWxsQnNzQmVhY29uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCAgQVBVcGRhdGVBbGxCZWFjb25GcmFtZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKKworLy8gYXBfc3luYy5jCisKK1ZPSUQgQVBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIEFQU2NhblRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBUEludmFsaWRTdGF0ZVdoZW5TY2FuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBTY2FuVGltZW91dEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlclByb2JlUmVxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFBlZXJCZWFjb25BY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUE1sbWVTY2FuUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBTY2FuQ25jbEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFwU2l0ZVN1cnZleSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgU3VwcG9ydFJhdGUoCisJSU4gUFVDSEFSIFN1cFJhdGUsCisJSU4gVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiBQVUNIQVIgRXh0UmF0ZSwKKwlJTiBVQ0hBUiBFeHRSYXRlTGVuLAorCU9VVCBQVUNIQVIgKlJhdGVzLAorCU9VVCBQVUNIQVIgUmF0ZXNMZW4sCisJT1VUIFBVQ0hBUiBwTWF4U3VwcG9ydFJhdGUpOworCisKK0JPT0xFQU4gQXBTY2FuUnVubmluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEIEFQT3ZlcmxhcHBpbmdCU1NTY2FuKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKy8vIGFwX3dwYS5jCisKK1ZPSUQgQVBXcGFTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCisvLyBhcF9tbG1lLmMKKworVk9JRCBBUE1sbWVQZXJpb2RpY0V4ZWMoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFQTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFVDSEFSCQkJCSpwcFRhYmxlLAorCUlOIFBVQ0hBUgkJCQlwVGFibGVTaXplLAorCUlOIFBVQ0hBUgkJCQlwSW5pdFR4UmF0ZUlkeCk7CisKK1ZPSUQgQVBNbG1lU2V0VHhSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFJUTVBfVFhfUkFURV9TV0lUQ0gJcFR4UmF0ZSk7CisKK1ZPSUQgQVBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQVBRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK0JPT0xFQU4gQVBNc2dUeXBlU3Vic3QoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUEZSQU1FXzgwMl8xMSBwRnJhbWUsCisgICAgT1VUIElOVCAqTWFjaGluZSwKKyAgICBPVVQgSU5UICpNc2dUeXBlKTsKKworVk9JRCBBUFF1aWNrUmVzcG9uZUZvclJhdGVVcEV4ZWMoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworI2lmZGVmIFJUMjg3MAorVk9JRCBCZWFjb25VcGRhdGVFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKK1ZPSUQgUlRNUFNldFBpZ2d5QmFjaygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBCT09MRUFOCQkJYlBpZ2d5QmFjayk7CisKK1ZPSUQgQVBBc2ljRXZhbHVhdGVSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgQVBBc2ljUnhBbnRFdmFsVGltZW91dCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKKy8vIGFwLmMKKworVk9JRCBBUFN3aXRjaENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gSU5UIENoYW5uZWwpOworCitORElTX1NUQVRVUyBBUEluaXRpYWxpemUoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFQU2h1dGRvd24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQpOworCitWT0lEIEFQU3RhcnRVcCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgQVBTdG9wKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBUENsZWFudXBQc1F1ZXVlKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQUVVFVUVfSEVBREVSICAgcFF1ZXVlKTsKKworVk9JRCBNYWNUYWJsZVJlc2V0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTUFDX1RBQkxFX0VOVFJZICpNYWNUYWJsZUluc2VydEVudHJ5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEFkZHIsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlJTiBCT09MRUFOCUNsZWFuQWxsKTsKKworQk9PTEVBTiBNYWNUYWJsZURlbGV0ZUVudHJ5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIFVTSE9SVCB3Y2lkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEFkZHIpOworCitNQUNfVEFCTEVfRU5UUlkgKk1hY1RhYmxlTG9va3VwKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEFkZHIpOworCitWT0lEIE1hY1RhYmxlTWFpbnRlbmFuY2UoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitVSU5UMzIgTWFjVGFibGVBc3NvY1N0YU51bUdldCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK01BQ19UQUJMRV9FTlRSWSAqQVBTc1BzSW5xdWlyeSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyLAorICAgIE9VVCBTU1QgICAgICAgICAgICAgKlNzdCwKKyAgICBPVVQgVVNIT1JUICAgICAgICAgICpBaWQsCisgICAgT1VUIFVDSEFSICAgICAgICAgICAqUHNNb2RlLAorICAgIE9VVCBVQ0hBUiAgICAgICAgICAgKlJhdGUpOworCitCT09MRUFOIEFQUHNJbmRpY2F0ZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyLAorCUlOIFVMT05HIFdjaWQsCisgICAgSU4gIFVDSEFSICAgICAgICAgICBQc20pOworCitWT0lEIEFwTG9nRXZlbnQoCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gUFVDSEFSICAgICAgICAgICBwQWRkciwKKyAgICBJTiBVU0hPUlQgICAgICAgICAgIEV2ZW50KTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBBUFVwZGF0ZU9wZXJhdGlvbk1vZGUoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIEFQVXBkYXRlQ2FwYWJpbGl0eUFuZEVycEllKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBBcENoZWNrQWNjZXNzQ29udHJvbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSICAgICAgICBwQWRkciwKKwlJTiBVQ0hBUiAgICAgICAgIEFwaWR4KTsKKworVk9JRCBBcFVwZGF0ZUFjY2Vzc0NvbnRyb2xMaXN0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFVDSEFSICAgICAgICAgQXBpZHgpOworCitWT0lEIEFwRW5xdWV1ZU51bGxGcmFtZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgICAgICAgIHBBZGRyLAorCUlOIFVDSEFSICAgICAgICAgVHhSYXRlLAorCUlOIFVDSEFSICAgICAgICAgUElELAorCUlOIFVDSEFSICAgICAgICAgYXBpZHgsCisgICAgSU4gQk9PTEVBTiAgICAgICBiUW9zTnVsbCwKKyAgICBJTiBCT09MRUFOICAgICAgIGJFT1NQLAorICAgIElOIFVDSEFSICAgICAgICAgT2xkVVApOworCitWT0lEIEFwU2VuZEZyYW1lKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVk9JRCAgICAgICAgICAgcEJ1ZmZlciwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIExlbmd0aCwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIFR4UmF0ZSwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIFBJRCk7CisKK1ZPSUQgQXBFbnF1ZXVlQWNrRnJhbWUoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUFVDSEFSICAgICAgICBwQWRkciwKKyAgICBJTiBVQ0hBUiAgICAgICAgIFR4UmF0ZSwKKwlJTiBVQ0hBUiAgICAgICAgIGFwaWR4KTsKKworVUNIQVIgQVBBdXRvU2VsZWN0Q2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOIE9wdGltYWwpOworCisvLyBhcF9zYW5pdHkuYworCisKK0JPT0xFQU4gUGVlckFzc29jUmVxQ21tU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gaXNSZXNzb2MsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcExpc3RlbkludGVydmFsLAorICAgIE9VVCBQVUNIQVIgcEFwQWRkciwKKyAgICBPVVQgVUNIQVIgKnBTc2lkTGVuLAorICAgIE9VVCBjaGFyICpTc2lkLAorICAgIE9VVCBVQ0hBUiAqcFJhdGVzTGVuLAorICAgIE9VVCBVQ0hBUiBSYXRlc1tdLAorICAgIE9VVCBVQ0hBUiAqUlNOLAorICAgIE9VVCBVQ0hBUiAqcFJTTkxlbiwKKyAgICBPVVQgQk9PTEVBTiAqcGJXbW1DYXBhYmxlLAorICAgIE9VVCBVTE9ORyAgKnBSYWxpbmtJZSwKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisgICAgT1VUIEVYVF9DQVBfSU5GT19FTEVNRU5UCSpwRXh0Q2FwSW5mbywKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisgICAgT1VUIFVDSEFSCQkgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpOworCisKK0JPT0xFQU4gUGVlckRpc2Fzc29jUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBQZWVyRGVhdXRoUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBBUFBlZXJBdXRoU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkcjEsCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqQWxnLAorICAgIE9VVCBVU0hPUlQgKlNlcSwKKyAgICBPVVQgVVNIT1JUICpTdGF0dXMsCisgICAgQ0hBUiAqQ2hsZ1RleHQpOworCitCT09MRUFOIEFQUGVlclByb2JlUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqU3NpZExlbik7CisKK0JPT0xFQU4gQVBQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgUFVDSEFSIHBCc3NpZCwKKyAgICBPVVQgQ0hBUiBTc2lkW10sCisgICAgT1VUIFVDSEFSICpTc2lkTGVuLAorICAgIE9VVCBVQ0hBUiAqQnNzVHlwZSwKKyAgICBPVVQgVVNIT1JUICpCZWFjb25QZXJpb2QsCisgICAgT1VUIFVDSEFSICpDaGFubmVsLAorICAgIE9VVCBMQVJHRV9JTlRFR0VSICpUaW1lc3RhbXAsCisgICAgT1VUIFVTSE9SVCAqQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVDSEFSIFJhdGVbXSwKKyAgICBPVVQgVUNIQVIgKlJhdGVMZW4sCisgICAgT1VUIEJPT0xFQU4gKkV4dGVuZGVkUmF0ZUllRXhpc3QsCisgICAgT1VUIFVDSEFSICpFcnApOworCisKKy8vID09PT09PT09PT09PT09PT09PSBlbmQgb2YgQVAgUlRNUC5oID09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyNlbmRpZiAgLy8gX19BUF9IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jaGxpc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY2hsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1MWU4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY2hsaXN0LmgKQEAgLTAsMCArMSwxMjUzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWNobGlzdC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRm9uY2hpIFd1ICAgMjAwNy0xMi0xOSAgICBjcmVhdGVkCisqLworCisjaWZuZGVmIF9fQ0hMSVNUX0hfXworI2RlZmluZSBfX0NITElTVF9IX18KKworI2luY2x1ZGUgInJ0bXBfdHlwZS5oIgorI2luY2x1ZGUgInJ0bXBfZGVmLmgiCisKKworI2RlZmluZSBPRE9SCQkJMAorI2RlZmluZSBJRE9SCQkJMQorI2RlZmluZSBCT1RICQkJMgorCisjZGVmaW5lIEJBTkRfNUcgICAgICAgICAwCisjZGVmaW5lIEJBTkRfMjRHICAgICAgICAxCisjZGVmaW5lIEJBTkRfQk9USCAgICAgICAyCisKK3R5cGVkZWYgc3RydWN0IF9DSF9ERVNQIHsKKwlVQ0hBUiBGaXJzdENoYW5uZWw7CisJVUNIQVIgTnVtT2ZDaDsKKwlDSEFSIE1heFR4UHdyOwkJCS8vIGRCbQorCVVDSEFSIEdlb2dyYXBoeTsJCQkvLyAwOm91dCBkb29yLCAxOmluIGRvb3IsIDI6Ym90aAorCUJPT0xFQU4gRGZzUmVxOwkJCS8vIERmcyByZXF1aXJlLCAwOiBObywgMTogeWVzLgorfSBDSF9ERVNQLCAqUENIX0RFU1A7CisKK3R5cGVkZWYgc3RydWN0IF9DSF9SRUdJT04geworCVVDSEFSIENvdW50UmVnWzNdOworCVVDSEFSIERmc1R5cGU7CQkJLy8gMDogQ0UsIDE6IEZDQywgMjogSkFQLCAzOkpBUF9XNTMsIEpBUF9XNTYKKwlDSF9ERVNQIENoRGVzcFsxMF07Cit9IENIX1JFR0lPTiwgKlBDSF9SRUdJT047CisKK3N0YXRpYyBDSF9SRUdJT04gQ2hSZWdpb25bXSA9Cit7CisJCXsJLy8gQW50aWd1YSBhbmQgQmVyYnVkYQorCQkJIkFHIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQXJnZW50aW5hCisJCQkiQVIiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQXJ1YmEKKwkJCSJBVyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEF1c3RyYWxpYQorCQkJIkFVIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQXVzdHJpYQorCQkJIkFUIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjMsIElET1IsIFRSVUV9LAkJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0sCQkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQmFoYW1hcworCQkJIkJTIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQmFyYmFkb3MKKwkJCSJCQiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJlcm11ZGEKKwkJCSJCTSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJyYXppbAorCQkJIkJSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMTQ5LCA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJlbGdpdW0KKwkJCSJCRSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAxOCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDE4LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQnVsZ2FyaWEKKwkJCSJCRyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDYW5hZGEKKwkJCSJDQSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIENheW1hbiBJc0xhbmRzCisJCQkiS1kiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDaGlsZQorCQkJIkNMIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDUsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ2hpbmEKKwkJCSJDTiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAxNDksIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ29sb21iaWEKKwkJCSJDTyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAxNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDE0OSwgNSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDb3N0YSBSaWNhCisJCQkiQ1IiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMTcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgNCwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDeXBydXMKKwkJCSJDWSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9LAkJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEN6ZWNoX1JlcHVibGljCisJCQkiQ1oiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyMywgSURPUiwgVFJVRX0sCQkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIERlbm1hcmsKKwkJCSJESyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9LAkJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIERvbWluaWNhbiBSZXB1YmxpYworCQkJIkRPIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAwLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDAKKwkJCQl7IDE0OSwgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBFcXVhZG9yCisJCQkiRUMiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDEwMCwgMTEsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRWwgU2FsdmFkb3IKKwkJCSJTViIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDQsICAgMzYsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRmlubGFuZAorCQkJIkZJIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBGcmFuY2UKKwkJCSJGUiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHZXJtYW55CisJCQkiREUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEdyZWVjZQorCQkJIkdSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHdWFtCisJCQkiR1UiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDExLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgNCwgICAxNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMTQ5LCAgNSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHdWF0ZW1hbGEKKwkJCSJHVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDE3LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNCwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBIYWl0aQorCQkJIkhUIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMTcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEhvbmR1cmFzCisJCQkiSE4iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSG9uZyBLb25nCisJCQkiSEsiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSHVuZ2FyeQorCQkJIkhVIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEljZWxhbmQKKwkJCSJJUyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSW5kaWEKKwkJCSJJTiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMTQ5LCAJNCwgIDI0LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJbmRvbmVzaWEKKwkJCSJJRCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMTQ5LCAJNCwgIDI3LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJcmVsYW5kCisJCQkiSUUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJc3JhZWwKKwkJCSJJTCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgIDMsICAyMCwgSURPUiwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4zCisJCQkJeyA0LCAJNiwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCA0fjkKKwkJCQl7IDEwLCAJNCwgIDIwLCBJRE9SLCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxMH4xMworCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSXRhbHkKKwkJCSJJVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBPRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEphcGFuCisJCQkiSlAiLAorCQkJSkFQLAorCQkJeworCQkJCXsgMSwgICAxNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjE0CisJCQkJeyAzNCwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzR+NDYKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEpvcmRhbgorCQkJIkpPIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBJRE9SLCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDE0OSwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTGF0dmlhCisJCQkiTFYiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBMaWVjaHRlbnN0ZWluCisJCQkiTEkiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTGl0aHVhbmlhCisJCQkiTFQiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBMdXhlbWJ1cmcKKwkJCSJMVSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE1hbGF5c2lhCisJCQkiTVkiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAzNiwgCTQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNSwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBNYWx0YQorCQkJIk1UIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTWFyb2NjbworCQkJIk1BIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyNCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE1leGljbworCQkJIk1YIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNSwgIDMwLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBOZXRoZXJsYW5kcworCQkJIk5MIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDI0LCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTmV3IFplYWxhbmQKKwkJCSJOWiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTm9yd2F5CisJCQkiTk8iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDI0LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjQsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBQZXJ1CisJCQkiUEUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUG9ydHVnYWwKKwkJCSJQVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUG9sYW5kCisJCQkiUEwiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFJvbWFuaWEKKwkJCSJSTyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUnVzc2lhCisJCQkiUlUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgIDQsICAyMCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU2F1ZGkgQXJhYmlhCisJCQkiU0EiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU2VyYmlhX2FuZF9Nb250ZW5lZ3JvCisJCQkiQ1MiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNpbmdhcG9yZQorCQkJIlNHIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNsb3Zha2lhCisJCQkiU0siLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNsb3ZlbmlhCisJCQkiU0kiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU291dGggQWZyaWNhCisJCQkiWkEiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAxNDksICA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNvdXRoIEtvcmVhCisJCQkiS1IiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgIDgsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjEyOAorCQkJCXsgMTQ5LCAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTcGFpbgorCQkJIkVTIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMTcsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTd2VkZW4KKwkJCSJTRSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU3dpdHplcmxhbmQKKwkJCSJDSCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFRhaXdhbgorCQkJIlRXIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBUdXJrZXkKKwkJCSJUUiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMzYsICAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVUsKKwkJCSJHQiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVWtyYWluZQorCQkJIlVBIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBVbml0ZWRfQXJhYl9FbWlyYXRlcworCQkJIkFFIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBVbml0ZWRfU3RhdGVzCisJCQkiVVMiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDExLCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgIDQsICAxNywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDUyLCAgIDQsICAyNCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDE0OSwgIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVmVuZXp1ZWxhCisJCQkiVkUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDE0OSwgIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRGVmYXVsdAorCQkJIiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTEsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMzYsICAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgNTIsICAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAxNDksICA1LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgUENIX1JFR0lPTiBHZXRDaFJlZ2lvbigKKwlJTiBQVUNIQVIgQ250cnlDb2RlKQoreworCUlOVCBsb29wID0gMDsKKwlQQ0hfUkVHSU9OIHBDaFJlZ2lvbiA9IE5VTEw7CisKKwl3aGlsZSAoc3RyY21wKENoUmVnaW9uW2xvb3BdLkNvdW50UmVnLCAiIikgIT0gMCkKKwl7CisJCWlmIChzdHJuY21wKENoUmVnaW9uW2xvb3BdLkNvdW50UmVnLCBDbnRyeUNvZGUsIDIpID09IDApCisJCXsKKwkJCXBDaFJlZ2lvbiA9ICZDaFJlZ2lvbltsb29wXTsKKwkJCWJyZWFrOworCQl9CisJCWxvb3ArKzsKKwl9CisKKwlpZiAocENoUmVnaW9uID09IE5VTEwpCisJCXBDaFJlZ2lvbiA9ICZDaFJlZ2lvbltsb29wXTsKKwlyZXR1cm4gcENoUmVnaW9uOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQ2hCYW5kQ2hlY2soCisJSU4gVUNIQVIgUGh5TW9kZSwKKwlPVVQgUFVDSEFSIHBDaFR5cGUpCit7CisJc3dpdGNoKFBoeU1vZGUpCisJeworCQljYXNlIFBIWV8xMUE6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQU5fTUlYRUQ6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkqcENoVHlwZSA9IEJBTkRfNUc7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkqcENoVHlwZSA9IEJBTkRfQk9USDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkqcENoVHlwZSA9IEJBTkRfMjRHOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIFVDSEFSIEZpbGxDaExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUENIX0RFU1AgcENoRGVzcCwKKwlJTiBVQ0hBUiBPZmZzZXQsCisJSU4gVUNIQVIgaW5jcmVtZW50KQoreworCUlOVCBpLCBqLCBsOworCVVDSEFSIGNoYW5uZWw7CisKKwlqID0gT2Zmc2V0OworCWZvciAoaSA9IDA7IGkgPCBwQ2hEZXNwLT5OdW1PZkNoOyBpKyspCisJeworCQljaGFubmVsID0gcENoRGVzcC0+Rmlyc3RDaGFubmVsICsgaSAqIGluY3JlbWVudDsKKwkJZm9yIChsPTA7IGw8TUFYX05VTV9PRl9DSEFOTkVMUzsgbCsrKQorCQl7CisJCQlpZiAoY2hhbm5lbCA9PSBwQWQtPlR4UG93ZXJbbF0uQ2hhbm5lbCkKKwkJCXsKKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2pdLlBvd2VyID0gcEFkLT5UeFBvd2VyW2xdLlBvd2VyOworCQkJCXBBZC0+Q2hhbm5lbExpc3Rbal0uUG93ZXIyID0gcEFkLT5UeFBvd2VyW2xdLlBvd2VyMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAobCA9PSBNQVhfTlVNX09GX0NIQU5ORUxTKQorCQkJY29udGludWU7CisKKwkJcEFkLT5DaGFubmVsTGlzdFtqXS5DaGFubmVsID0gcENoRGVzcC0+Rmlyc3RDaGFubmVsICsgaSAqIGluY3JlbWVudDsKKwkJcEFkLT5DaGFubmVsTGlzdFtqXS5NYXhUeFB3ciA9IHBDaERlc3AtPk1heFR4UHdyOworCQlwQWQtPkNoYW5uZWxMaXN0W2pdLkRmc1JlcSA9IHBDaERlc3AtPkRmc1JlcTsKKwkJaisrOworCX0KKwlwQWQtPkNoYW5uZWxMaXN0TnVtID0gajsKKworCXJldHVybiBqOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQ3JlYXRlQ2hMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBDSF9SRUdJT04gcENoUmVnaW9uLAorCUlOIFVDSEFSIEdlb2dyYXBoeSkKK3sKKwlJTlQgaTsKKwlVQ0hBUiBvZmZzZXQgPSAwOworCVBDSF9ERVNQIHBDaERlc3A7CisJVUNIQVIgQ2hUeXBlOworCVVDSEFSIGluY3JlbWVudDsKKworCWlmIChwQ2hSZWdpb24gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hCYW5kQ2hlY2socEFkLT5Db21tb25DZmcuUGh5TW9kZSwgJkNoVHlwZSk7CisKKwlmb3IgKGk9MDsgaTwxMDsgaSsrKQorCXsKKwkJcENoRGVzcCA9ICZwQ2hSZWdpb24tPkNoRGVzcFtpXTsKKwkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKENoVHlwZSA9PSBCQU5EXzVHKQorCQl7CisJCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsIDw9IDE0KQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKENoVHlwZSA9PSBCQU5EXzI0RykKKwkJeworCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA+IDE0KQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gQk9USCkKKwkJCXx8IChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gR2VvZ3JhcGh5KSkKKyAgICAgICAgeworCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA+IDE0KQorICAgICAgICAgICAgICAgIGluY3JlbWVudCA9IDQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gMTsKKwkJCW9mZnNldCA9IEZpbGxDaExpc3QocEFkLCBwQ2hEZXNwLCBvZmZzZXQsIGluY3JlbWVudCk7CisgICAgICAgIH0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgVk9JRCBCdWlsZENoYW5uZWxMaXN0RXgoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUENIX1JFR0lPTiBwQ2hSZWc7CisKKwlwQ2hSZWcgPSBHZXRDaFJlZ2lvbihwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSk7CisJQ3JlYXRlQ2hMaXN0KHBBZCwgcENoUmVnLCBwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkpOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQnVpbGRCZWFjb25DaExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBVQ0hBUiBwQnVmLAorCU9VVAlQVUxPTkcgcEJ1ZkxlbikKK3sKKwlJTlQgaTsKKwlVTE9ORyBUbXBMZW47CisJUENIX1JFR0lPTiBwQ2hSZWdpb247CisJUENIX0RFU1AgcENoRGVzcDsKKwlVQ0hBUiBDaFR5cGU7CisKKwlwQ2hSZWdpb24gPSBHZXRDaFJlZ2lvbihwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSk7CisKKwlpZiAocENoUmVnaW9uID09IE5VTEwpCisJCXJldHVybjsKKworCUNoQmFuZENoZWNrKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsICZDaFR5cGUpOworCSpwQnVmTGVuID0gMDsKKworCWZvciAoaT0wOyBpPDEwOyBpKyspCisJeworCQlwQ2hEZXNwID0gJnBDaFJlZ2lvbi0+Q2hEZXNwW2ldOworCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID09IDApCisJCQlicmVhazsKKworCQlpZiAoQ2hUeXBlID09IEJBTkRfNUcpCisJCXsKKwkJCWlmIChwQ2hEZXNwLT5GaXJzdENoYW5uZWwgPD0gMTQpCisJCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoQ2hUeXBlID09IEJBTkRfMjRHKQorCQl7CisJCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID4gMTQpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKHBDaERlc3AtPkdlb2dyYXBoeSA9PSBCT1RIKQorCQkJfHwgKHBDaERlc3AtPkdlb2dyYXBoeSA9PSBwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkpKQorCQl7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwQnVmICsgKnBCdWZMZW4sCQkmVG1wTGVuLAorCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgCSZwQ2hEZXNwLT5GaXJzdENoYW5uZWwsCisJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAJJnBDaERlc3AtPk51bU9mQ2gsCisJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAJJnBDaERlc3AtPk1heFR4UHdyLAorCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQkqcEJ1ZkxlbiArPSBUbXBMZW47CisJCX0KKwl9Cit9CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorc3RhdGljIGlubGluZSBCT09MRUFOIElzVmFsaWRDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIGNoYW5uZWwpCisKK3sKKwlJTlQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpKyspCisJeworCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsID09IGNoYW5uZWwpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBwQWQtPkNoYW5uZWxMaXN0TnVtKQorCQlyZXR1cm4gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gVFJVRTsKK30KKworCitzdGF0aWMgaW5saW5lIFVDSEFSIEdldEV4dENoKAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gVUNIQVIgRGlyZWN0aW9uKQoreworCUNIQVIgRXh0Q2g7CisKKwlpZiAoRGlyZWN0aW9uID09IEVYVENIQV9BQk9WRSkKKwkJRXh0Q2ggPSBDaGFubmVsICsgNDsKKwllbHNlCisJCUV4dENoID0gKENoYW5uZWwgLSA0KSA+IDAgPyAoQ2hhbm5lbCAtIDQpIDogMDsKKworCXJldHVybiBFeHRDaDsKK30KKworCitzdGF0aWMgaW5saW5lIFZPSUQgTl9DaGFubmVsQ2hlY2soCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJLy9VQ0hBUiBDaGFubmVsTnVtID0gcEFkLT5DaGFubmVsTGlzdE51bTsKKwlVQ0hBUiBDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKworCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSAmJiAocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9PSBCV180MCkpCisJeworCQlpZiAoQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlpZiAoKENoYW5uZWwgPT0gMzYpIHx8IChDaGFubmVsID09IDQ0KSB8fCAoQ2hhbm5lbCA9PSA1MikgfHwgKENoYW5uZWwgPT0gNjApIHx8IChDaGFubmVsID09IDEwMCkgfHwgKENoYW5uZWwgPT0gMTA4KSB8fAorCQkJICAgIChDaGFubmVsID09IDExNikgfHwgKENoYW5uZWwgPT0gMTI0KSB8fCAoQ2hhbm5lbCA9PSAxMzIpIHx8IChDaGFubmVsID09IDE0OSkgfHwgKENoYW5uZWwgPT0gMTU3KSkKKwkJCXsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID0gRVhUQ0hBX0FCT1ZFOworCQkJfQorCQkJZWxzZSBpZiAoKENoYW5uZWwgPT0gNDApIHx8IChDaGFubmVsID09IDQ4KSB8fCAoQ2hhbm5lbCA9PSA1NikgfHwgKENoYW5uZWwgPT0gNjQpIHx8IChDaGFubmVsID09IDEwNCkgfHwgKENoYW5uZWwgPT0gMTEyKSB8fAorCQkJCQkoQ2hhbm5lbCA9PSAxMjApIHx8IChDaGFubmVsID09IDEyOCkgfHwgKENoYW5uZWwgPT0gMTM2KSB8fCAoQ2hhbm5lbCA9PSAxNTMpIHx8IChDaGFubmVsID09IDE2MSkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9CRUxPVzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgID0gQldfMjA7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlkbworCQkJeworCQkJCVVDSEFSIEV4dENoOworCQkJCVVDSEFSIERpciA9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEE7CisJCQkJRXh0Q2ggPSBHZXRFeHRDaChDaGFubmVsLCBEaXIpOworCQkJCWlmIChJc1ZhbGlkQ2hhbm5lbChwQWQsIEV4dENoKSkKKwkJCQkJYnJlYWs7CisKKwkJCQlEaXIgPSAoRGlyID09IEVYVENIQV9BQk9WRSkgPyBFWFRDSEFfQkVMT1cgOiBFWFRDSEFfQUJPVkU7CisJCQkJRXh0Q2ggPSBHZXRFeHRDaChDaGFubmVsLCBEaXIpOworCQkJCWlmIChJc1ZhbGlkQ2hhbm5lbChwQWQsIEV4dENoKSkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBEaXI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgID0gQldfMjA7CisJCQl9IHdoaWxlKEZBTFNFKTsKKworCQkJaWYgKENoYW5uZWwgPT0gMTQpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCQkJCS8vcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9OT05FOwkvLyBXZSBkaWRuJ3Qgc2V0IHRoZSBFeHRDaCBhcyBOT05FIGR1ZSB0byBpdCdsbCBzZXQgaW4gUlRNUFNldEhUKCkKKwkJCX0KKwkJfQorCX0KKworCit9CisKKworc3RhdGljIGlubGluZSBWT0lEIE5fU2V0Q2VuQ2goCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCkKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID09IEVYVENIQV9BQk9WRSkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsICsgMjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID09IDE0KQorCQkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDE7CisJCQllbHNlCisJCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKKwkJfQorCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJfQorfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKK3N0YXRpYyBpbmxpbmUgVUlOVDggR2V0Q3VudHJ5TWF4VHhQd3IoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDggY2hhbm5lbCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCA9PSBjaGFubmVsKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwkJcmV0dXJuIDB4ZmY7CisJZWxzZQorCQlyZXR1cm4gcEFkLT5DaGFubmVsTGlzdFtpXS5NYXhUeFB3cjsKK30KKyNlbmRpZiAvLyBfX0NITElTVF9IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vMjg3MF9ydG1wX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmOGRjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKQEAgLTAsMCArMSwxNzYyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCTI4NzBfcnRtcF9pbml0LmMKKworCUFic3RyYWN0OgorCU1pbmlwb3J0IGdlbmVyaWMgcG9ydGlvbiBoZWFkZXIgZmlsZQorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKKwktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlQYXVsIExpbiAgICAyMDAyLTA4LTAxICAgIGNyZWF0ZWQKKyAgICBKb2huIENoYW5nICAyMDA0LTA4LTIwICAgIFJUMjU2MS8yNjYxIHVzZSBzY2F0dGVyLWdhdGhlciBzY2hlbWUKKyAgICBKYW4gTGVlICAJMjAwNi0wOS0xNSAgICBSVDI4NjAuIENoYW5nZSBmb3IgODAyLjExbiAsIEVFUFJPTSwgTGVkLCBCQSwgSFQuCisJU2FtcGxlIExpbgkyMDA3LTA1LTMxICAgIE1lcmdlIFJUMjg2MCBhbmQgUlQyODcwIGRyaXZlcnMuCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKworc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfaGNjYV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfYWMzX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzJfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX2FjMV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfYWMwX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9tZ210X2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9udWxsX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9ydHNfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX3BzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBJbml0aWFsaXplIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzLgorCitBcmd1bWVudHM6CisgICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfUkVTT1VSQ0VTCisKK05vdGU6CisJSW5pdGlhbGl6ZSBhbGwgcmVjZWl2ZSByZWxlYXRlZCBwcml2YXRlIGJ1ZmZlciwgaW5jbHVkZSB0aG9zZSBkZWZpbmUKKwlpbiBSVE1QX0FEQVBURVIgc3RydWN0dXJlIGFuZCBhbGwgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBtYWhvcgorCXdvcmsgaXMgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBlYWNoIHBhY2tldCBhbmQgY2hhaW4gYnVmZmVyIHRvCisJTkRJUyBwYWNrZXQgZGVzY3JpcHRvci4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ0luaXRSZWN2KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQkJCWk7CisJTkRJU19TVEFUVVMJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdFJlY3ZcbiIpKTsKKwlwT2JqID0gcE9iajsKKworCS8vSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5QZW5kaW5nUngsIDApOworCXBBZC0+UGVuZGluZ1J4ID0gMDsKKwlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCAJPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwlwQWQtPk5leHRSeEJ1bGtJbkluZGV4CQk9IDAgOyAvL1JYX1JJTkdfU0laRSAtMTsgLy8gUnggQnVsayBwb2ludGVyCisJcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiAJPSAwOworCisJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCS8vQWxsb2NhdGUgVVJCCisJCXBSeENvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CisJCWlmIChwUnhDb250ZXh0LT5wVXJiID09IE5VTEwpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCisJCS8vIEFsbG9jYXRlIHRyYW5zZmVyIGJ1ZmZlcgorCQlwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IFJUVVNCX1VSQl9BTExPQ19CVUZGRVIocE9iai0+cFVzYl9EZXYsIE1BWF9SWEJVTEtfU0laRSwgJnBSeENvbnRleHQtPmRhdGFfZG1hKTsKKwkJaWYgKHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyID09IE5VTEwpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCisJCU5kaXNaZXJvTWVtb3J5KHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLCBNQVhfUlhCVUxLX1NJWkUpOworCisJCXBSeENvbnRleHQtPnBBZAk9IHBBZDsKKwkJcFJ4Q29udGV4dC0+cElycCA9IE5VTEw7CisJCXBSeENvbnRleHQtPkluVXNlCQk9IEZBTFNFOworCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nCT0gRkFMU0U7CisJCXBSeENvbnRleHQtPlJlYWRhYmxlCT0gRkFMU0U7CisJCS8vcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7CisJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gRkFMU0U7CisJCXBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCA9IDA7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIE5JQ0luaXRSZWN2XG4iKSk7CisJcmV0dXJuIFN0YXR1czsKKworb3V0MToKKwlmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykKKwl7CisJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisKKwkJaWYgKE5VTEwgIT0gcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIpCisJCXsKKwkJCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgTUFYX1JYQlVMS19TSVpFLAorCQkJCQkJCQlwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgcFJ4Q29udGV4dC0+ZGF0YV9kbWEpOworCQkJcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOworCQl9CisKKwkJaWYgKE5VTEwgIT0gcFJ4Q29udGV4dC0+cFVyYikKKwkJeworCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKwkJCVJUVVNCX0ZSRUVfVVJCKHBSeENvbnRleHQtPnBVcmIpOworCQkJcFJ4Q29udGV4dC0+cFVyYiA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgSW5pdGlhbGl6ZSB0cmFuc21pdCBkYXRhIHN0cnVjdHVyZXMuCisKK0FyZ3VtZW50czoKKyAgICBwQWQJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKwlORElTX1NUQVRVU19SRVNPVVJDRVMKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ0luaXRUcmFuc21pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyNkZWZpbmUgTE1fVVNCX0FMTE9DKHBPYmosIENvbnRleHQsIFRCX1R5cGUsIEJ1ZmZlclNpemUsIFN0YXR1cywgbXNnMSwgZXJyMSwgbXNnMiwgZXJyMikJXAorCUNvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CQlcCisJaWYgKENvbnRleHQtPnBVcmIgPT0gTlVMTCkgewkJCVwKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIG1zZzEpOwkJXAorCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CQlcCisJCWdvdG8gZXJyMTsgfQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gCQkJCVwKKwkJKFRCX1R5cGUpUlRVU0JfVVJCX0FMTE9DX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgQnVmZmVyU2l6ZSwgJkNvbnRleHQtPmRhdGFfZG1hKTsJXAorCWlmIChDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9PSBOVUxMKSB7CVwKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIG1zZzIpOwkJXAorCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CQlcCisJCWdvdG8gZXJyMjsgfQorCisjZGVmaW5lIExNX1VSQl9GUkVFKHBPYmosIENvbnRleHQsIEJ1ZmZlclNpemUpCQkJCVwKKwlpZiAoTlVMTCAhPSBDb250ZXh0LT5wVXJiKSB7CQkJCQkJCVwKKwkJUlRVU0JfVU5MSU5LX1VSQihDb250ZXh0LT5wVXJiKTsJCQkJCVwKKwkJUlRVU0JfRlJFRV9VUkIoQ29udGV4dC0+cFVyYik7CQkJCQkJXAorCQlDb250ZXh0LT5wVXJiID0gTlVMTDsgfQkJCQkJCQkJXAorCWlmIChOVUxMICE9IENvbnRleHQtPlRyYW5zZmVyQnVmZmVyKSB7CQkJCVwKKwkJUlRVU0JfVVJCX0ZSRUVfQlVGRkVSKHBPYmotPnBVc2JfRGV2LCBCdWZmZXJTaXplLAlcCisJCQkJCQkJCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyLAlcCisJCQkJCQkJCUNvbnRleHQtPmRhdGFfZG1hKTsJCQlcCisJCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsgfQorCisJVUNIQVIJCQlpLCBhY2lkeDsKKwlORElTX1NUQVRVUyAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0ICAgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCVBUWF9DT05URVhUCQlwUHNQb2xsQ29udGV4dCA9ICYocEFkLT5Qc1BvbGxDb250ZXh0KTsKKwlQVFhfQ09OVEVYVAkJcFJUU0NvbnRleHQgICAgPSAmKHBBZC0+UlRTQ29udGV4dCk7CisJUFRYX0NPTlRFWFQJCXBNTE1FQ29udGV4dCA9IE5VTEw7CisvLwlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQgPSBOVUxMOworCVBPU19DT09LSUUJCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJUFZPSUQJCQlSaW5nQmFzZVZhOworLy8JUlRNUF9UWF9SSU5HCSpwVHhSaW5nOworCVJUTVBfTUdNVF9SSU5HICAqcE1nbXRSaW5nOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRUcmFuc21pdFxuIikpOworCXBPYmogPSBwT2JqOworCisJLy8gSW5pdCA0IHNldCBvZiBUeCBwYXJhbWV0ZXJzCisJZm9yKGFjaWR4ID0gMDsgYWNpZHggPCBOVU1fT0ZfVFhfUklORzsgYWNpZHgrKykKKwl7CisJCS8vIEluaXRpYWxpemUgYWxsIFRyYW5zbWl0IHJlbGVhdGVkIHF1ZXVlcworCQlJbml0aWFsaXplUXVldWVIZWFkZXIoJnBBZC0+VHhTd1F1ZXVlW2FjaWR4XSk7CisKKwkJLy8gTmV4dCBMb2NhbCB0eCByaW5nIHBvaW50ZXIgd2FpdGluZyBmb3IgYnVjayBvdXQKKwkJcEFkLT5OZXh0QnVsa091dEluZGV4W2FjaWR4XSA9IGFjaWR4OworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW2FjaWR4XSA9IEZBTFNFOyAvLyBCdWNrIE91dCBjb250cm9sIGZsYWcKKwkJLy9wQWQtPkRhdGFCdWxrRG9uZUlkeFthY2lkeF0gPSAwOworCX0KKworCS8vcEFkLT5OZXh0TUxNRUluZGV4CT0gMDsKKwkvL3BBZC0+UHVzaE1nbXRJbmRleAk9IDA7CisJLy9wQWQtPlBvcE1nbXRJbmRleAk9IDA7CisJLy9JbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPk1nbXRRdWV1ZVNpemUsIDApOworCS8vSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5UeENvdW50LCAwKTsKKworCS8vcEFkLT5QcmlvUmluZ0ZpcnN0SW5kZXgJPSAwOworCS8vcEFkLT5QcmlvUmluZ1R4Q250CQk9IDA7CisKKwlkbworCXsKKwkJLy8KKwkJLy8gVFhfUklOR19TSVpFLCA0IEFDcworCQkvLworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlmb3IoYWNpZHg9MDsgYWNpZHg8NDsgYWNpZHgrKykKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJeworI2lmIDEgLy9kZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W2FjaWR4XSk7CisKKwkJCU5kaXNaZXJvTWVtb3J5KHBIVFRYQ29udGV4dCwgc2l6ZW9mKEhUX1RYX0NPTlRFWFQpKTsKKwkJCS8vQWxsb2NhdGUgVVJCCisJCQlMTV9VU0JfQUxMT0MocE9iaiwgcEhUVFhDb250ZXh0LCBQSFRUWF9CVUZGRVIsIHNpemVvZihIVFRYX0JVRkZFUiksIFN0YXR1cywKKwkJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBUeENvbnRleHRbJWRdIHVyYiEhIFxuIiwgYWNpZHgpLAorCQkJCQkJCWRvbmUsCisJCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggVHhDb250ZXh0WyVkXSBIVFRYX0JVRkZFUiAhISBcbiIsIGFjaWR4KSwKKwkJCQkJCQlvdXQxKTsKKworCQkJTmRpc1plcm9NZW1vcnkocEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+QWdncmVnYXRpb24sIDQpOworCQkJcEhUVFhDb250ZXh0LT5wQWQgPSBwQWQ7CisJCQlwSFRUWENvbnRleHQtPnBJcnAgPSBOVUxMOworCQkJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPSAwOworCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IDA7CisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSAwOworCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSAwOworCQkJcEhUVFhDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IDA7CisJCQlwSFRUWENvbnRleHQtPkJ1bGtPdXRQaXBlSWQgPSBhY2lkeDsKKwkJCXBIVFRYQ29udGV4dC0+YlJpbmdFbXB0eSA9IFRSVUU7CisJCQlwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9IEZBTFNFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1thY2lkeF0gPSBGQUxTRTsKKwkJfQorCisKKwkJLy8KKwkJLy8gTUdNVF9SSU5HX1NJWkUKKwkJLy8KKwkJLy8gQWxsb2NhdGUgTUdNVCByaW5nIGRlc2NyaXB0b3IncyBtZW1vcnkKKwkJcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplID0gTUdNVF9SSU5HX1NJWkUgKiBzaXplb2YoVFhfQ09OVEVYVCk7CisJCVJUTVBBbGxvY2F0ZU1lbW9yeSgmcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSwgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplKTsKKwkJaWYgKHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEgPT0gTlVMTCkKKwkJeworCQkJREJHUFJJTlRfRVJSKCgiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYmlnIGJ1ZmZlciBmb3IgTWdtdERlc2NSaW5nIVxuIikpOworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworCQkJZ290byBvdXQxOworCQl9CisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEsIHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jU2l6ZSk7CisJCVJpbmdCYXNlVmEgICAgID0gcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYTsKKworCQkvLyBJbml0aWFsaXplIE1HTVQgUmluZyBhbmQgYXNzb2NpYXRlZCBidWZmZXIgbWVtb3J5CisJCXBNZ210UmluZyA9ICZwQWQtPk1nbXRSaW5nOworCQlmb3IgKGkgPSAwOyBpIDwgTUdNVF9SSU5HX1NJWkU7IGkrKykKKwkJeworCQkJLy8gbGluayB0aGUgcHJlLWFsbG9jYXRlZCBNZ210IGJ1ZmZlciB0byBNZ210UmluZy5DZWxsCisJCQlwTWdtdFJpbmctPkNlbGxbaV0uQWxsb2NTaXplID0gc2l6ZW9mKFRYX0NPTlRFWFQpOworCQkJcE1nbXRSaW5nLT5DZWxsW2ldLkFsbG9jVmEgPSBSaW5nQmFzZVZhOworCQkJcE1nbXRSaW5nLT5DZWxsW2ldLnBOZGlzUGFja2V0ID0gTlVMTDsKKwkJCXBNZ210UmluZy0+Q2VsbFtpXS5wTmV4dE5kaXNQYWNrZXQgPSBOVUxMOworCisJCQkvL0FsbG9jYXRlIFVSQiBmb3IgTUxNRUNvbnRleHQKKwkJCXBNTE1FQ29udGV4dCA9IChQVFhfQ09OVEVYVCkgcEFkLT5NZ210UmluZy5DZWxsW2ldLkFsbG9jVmE7CisJCQlwTUxNRUNvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CisJCQlpZiAocE1MTUVDb250ZXh0LT5wVXJiID09IE5VTEwpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIE1MTUVDb250ZXh0WyVkXSB1cmIhISBcbiIsIGkpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJCQkJZ290byBvdXQyOworCQkJfQorCQkJcE1MTUVDb250ZXh0LT5wQWQgPSBwQWQ7CisJCQlwTUxNRUNvbnRleHQtPnBJcnAgPSBOVUxMOworCQkJcE1MTUVDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IE5VTEw7CisJCQlwTUxNRUNvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gRkFMU0U7CisJCQlwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID0gMDsKKwkJCXBNTE1FQ29udGV4dC0+U2VsZklkeCA9IGk7CisKKwkJCS8vIE9mZnNldCB0byBuZXh0IHJpbmcgZGVzY3JpcHRvciBhZGRyZXNzCisJCQlSaW5nQmFzZVZhID0gKFBVQ0hBUikgUmluZ0Jhc2VWYSArIHNpemVvZihUWF9DT05URVhUKTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNR01UIFJpbmc6IHRvdGFsICVkIGVudHJ5IGFsbG9jYXRlZFxuIiwgaSkpOworCisJCS8vcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA9IChNR01UX1JJTkdfU0laRSAtIDEpOworCQlwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID0gTUdNVF9SSU5HX1NJWkU7CisJCXBBZC0+TWdtdFJpbmcuVHhDcHVJZHggPSAwOworCQlwQWQtPk1nbXRSaW5nLlR4RG1hSWR4ID0gMDsKKworCQkvLworCQkvLyBCRUFDT05fUklOR19TSVpFCisJCS8vCisJCWZvcihpPTA7IGk8QkVBQ09OX1JJTkdfU0laRTsgaSsrKSAvLyAyCisJCXsKKwkJCVBUWF9DT05URVhUCXBCZWFjb25Db250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbaV0pOworCisKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25Db250ZXh0LCBzaXplb2YoVFhfQ09OVEVYVCkpOworCisJCQkvL0FsbG9jYXRlIFVSQgorCQkJTE1fVVNCX0FMTE9DKHBPYmosIHBCZWFjb25Db250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIEJlYWNvbkNvbnRleHRbJWRdIHVyYiEhIFxuIiwgaSksCisJCQkJCQkJb3V0MiwKKwkJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBCZWFjb25Db250ZXh0WyVkXSBUWF9CVUZGRVIgISEgXG4iLCBpKSwKKwkJCQkJCQlvdXQzKTsKKworCQkJcEJlYWNvbkNvbnRleHQtPnBBZCA9IHBBZDsKKwkJCXBCZWFjb25Db250ZXh0LT5wSXJwID0gTlVMTDsKKwkJCXBCZWFjb25Db250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJcEJlYWNvbkNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJfQorCisJCS8vCisJCS8vIE51bGxDb250ZXh0CisJCS8vCisJCU5kaXNaZXJvTWVtb3J5KHBOdWxsQ29udGV4dCwgc2l6ZW9mKFRYX0NPTlRFWFQpKTsKKworCQkvL0FsbG9jYXRlIFVSQgorCQlMTV9VU0JfQUxMT0MocE9iaiwgcE51bGxDb250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggTnVsbENvbnRleHQgdXJiISEgXG4iKSwKKwkJCQkJCW91dDMsCisJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBOdWxsQ29udGV4dCBUWF9CVUZGRVIgISEgXG4iKSwKKwkJCQkJCW91dDQpOworCisJCXBOdWxsQ29udGV4dC0+cEFkID0gcEFkOworCQlwTnVsbENvbnRleHQtPnBJcnAgPSBOVUxMOworCQlwTnVsbENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCisJCS8vCisJCS8vIFJUU0NvbnRleHQKKwkJLy8KKwkJTmRpc1plcm9NZW1vcnkocFJUU0NvbnRleHQsIHNpemVvZihUWF9DT05URVhUKSk7CisKKwkJLy9BbGxvY2F0ZSBVUkIKKwkJTE1fVVNCX0FMTE9DKHBPYmosIHBSVFNDb250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggUlRTQ29udGV4dCB1cmIhISBcbiIpLAorCQkJCQkJb3V0NCwKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFJUU0NvbnRleHQgVFhfQlVGRkVSICEhIFxuIiksCisJCQkJCQlvdXQ1KTsKKworCQlwUlRTQ29udGV4dC0+cEFkID0gcEFkOworCQlwUlRTQ29udGV4dC0+cElycCA9IE5VTEw7CisJCXBSVFNDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQlwUlRTQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCisJCS8vCisJCS8vIFBzUG9sbENvbnRleHQKKwkJLy8KKwkJLy9OZGlzWmVyb01lbW9yeShwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKFRYX0NPTlRFWFQpKTsKKwkJLy9BbGxvY2F0ZSBVUkIKKwkJTE1fVVNCX0FMTE9DKHBPYmosIHBQc1BvbGxDb250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggUHNQb2xsQ29udGV4dCB1cmIhISBcbiIpLAorCQkJCQkJb3V0NSwKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFBzUG9sbENvbnRleHQgVFhfQlVGRkVSICEhIFxuIiksCisJCQkJCQlvdXQ2KTsKKworCQlwUHNQb2xsQ29udGV4dC0+cEFkID0gcEFkOworCQlwUHNQb2xsQ29udGV4dC0+cElycCA9IE5VTEw7CisJCXBQc1BvbGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQlwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlwUHNQb2xsQ29udGV4dC0+YkFnZ3JlZ2F0aWJsZSA9IEZBTFNFOworCQlwUHNQb2xsQ29udGV4dC0+TGFzdE9uZSA9IFRSVUU7CisKKwl9ICAgd2hpbGUgKEZBTFNFKTsKKworCitkb25lOgorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0VHJhbnNtaXRcbiIpKTsKKworCXJldHVybiBTdGF0dXM7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRVJST1IgSEFORExFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworb3V0NjoKKwlMTV9VUkJfRlJFRShwT2JqLCBwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCitvdXQ1OgorCUxNX1VSQl9GUkVFKHBPYmosIHBSVFNDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKK291dDQ6CisJTE1fVVJCX0ZSRUUocE9iaiwgcE51bGxDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKK291dDM6CisJZm9yKGk9MDsgaTxCRUFDT05fUklOR19TSVpFOyBpKyspCisJeworCQlQVFhfQ09OVEVYVAlwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKKwkJaWYgKHBCZWFjb25Db250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEJlYWNvbkNvbnRleHQsIHNpemVvZihUWF9CVUZGRVIpKTsKKwl9CisKK291dDI6CisJaWYgKHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEpCisJeworCQlwTWdtdFJpbmcgPSAmcEFkLT5NZ210UmluZzsKKwlmb3IoaT0wOyBpPE1HTVRfUklOR19TSVpFOyBpKyspCisJeworCQlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpIHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOworCQlpZiAocE1MTUVDb250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcE1MTUVDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisJfQorCQlOZGlzRnJlZU1lbW9yeShwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhLCBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUsIDApOworCQlwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhID0gTlVMTDsKKwl9CisKK291dDE6CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwlmb3IoYWNpZHg9MDsgYWNpZHg8NDsgYWNpZHgrKykKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7CisJCVBIVF9UWF9DT05URVhUIHBUeENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W2FjaWR4XSk7CisJCWlmIChwVHhDb250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcFR4Q29udGV4dCwgc2l6ZW9mKEhUVFhfQlVGRkVSKSk7CisJfQorCisJLy8gSGVyZSB3ZSBkaWRuJ3QgaGF2ZSBhbnkgcHJlLWFsbG9jYXRlZCBtZW1vcnkgbmVlZCB0byBmcmVlLgorCisJcmV0dXJuIFN0YXR1czsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEFsbG9jYXRlIERNQSBtZW1vcnkgYmxvY2tzIGZvciBzZW5kLCByZWNlaXZlLgorCitBcmd1bWVudHM6CisgICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfRkFJTFVSRQorCU5ESVNfU1RBVFVTX1JFU09VUkNFUworCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisvLwlDT1VOVEVSXzgwMl8xMQlwQ291bnRlciA9ICZwQWQtPldsYW5Db3VudGVyczsKKwlORElTX1NUQVRVUwkJU3RhdHVzOworCUlOVAkJCQludW07CisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBSVE1QQWxsb2NUeFJ4UmluZ01lbW9yeVxuIikpOworCisKKwlkbworCXsKKwkJLy8gSW5pdCB0aGUgQ21kUSBhbmQgQ21kUUxvY2sKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJUlRVU0JJbml0aWFsaXplQ21kUSgmcEFkLT5DbWRRKTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NTE1FQnVsa091dExvY2spOworCQkvL05kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1MTUVXYWl0UXVldWVMb2NrKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbMF0pOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1sxXSk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzJdKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbM10pOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1s0XSk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzVdKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa0luTG9jayk7CisKKwkJZm9yIChudW0gPSAwOyBudW0gPCBOVU1fT0ZfVFhfUklORzsgbnVtKyspCisJCXsKKwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tudW1dKTsKKwkJfQorCisjaWZkZWYgUkFMSU5LX0FURQorCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisvLwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWVtTG9jayk7CS8vIE5vdCB1c2VkIGluIFJUMjhYWAorCisvLwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7IC8vIGluaXQgaXQgaW4gVXNlckNmZ0luaXQoKQorLy8JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7IC8vIGluaXQgaXQgaW4gQkFUYWJsZUluaXQoKQorCisvLwkJZm9yKG51bT0wOyBudW08TUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IG51bSsrKQorLy8JCXsKKy8vCQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W251bV0uUnhSZVJpbmdMb2NrKTsKKy8vCQl9CisKKwkJLy8KKwkJLy8gSW5pdCBNYWMgVGFibGUKKwkJLy8KKy8vCQlNYWNUYWJsZUluaXRpYWxpemUocEFkKTsKKworCQkvLworCQkvLyBJbml0IHNlbmQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMKKwkJLy8KKwkJU3RhdHVzID0gTklDSW5pdFRyYW5zbWl0KHBBZCk7CisJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCS8vCisJCS8vIEluaXQgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycworCQkvLworCQlTdGF0dXMgPSBOSUNJbml0UmVjdihwQWQpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQlwQWQtPlBlbmRpbmdJb0NvdW50ID0gMTsKKworCX0gd2hpbGUgKEZBTFNFKTsKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkZyYWdGcmFtZSwgc2l6ZW9mKEZSQUdNRU5UX0ZSQU1FKSk7CisJcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQgPSAgUlRNUF9BbGxvY2F0ZUZyYWdQYWNrZXRCdWZmZXIocEFkLCBSWF9CVUZGRVJfTk9STVNJWkUpOworCisJaWYgKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0ID09IE5VTEwpCisJeworCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJfQorCisJREJHUFJJTlRfUyhTdGF0dXMsICgiPC0tIFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5LCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCXJldHVybiBTdGF0dXM7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKwlDYWxscyBVU0JfSW50ZXJmYWNlU3RvcCBhbmQgZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIFVSQnMKKyAgICBjYWxscyBOZGlzTURlcmVnaXN0ZXJEZXZpY2UgYW5kIGZyZWVzIHRoZSBtZW1vcnkKKyAgICBhbGxvY2F0ZWQgaW4gVk5ldEluaXRpYWxpemUgZm9yIHRoZSBBZGFwdGVyIE9iamVjdAorCitBcmd1bWVudHM6CisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKwlOb25lCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisjZGVmaW5lIExNX1VSQl9GUkVFKHBPYmosIENvbnRleHQsIEJ1ZmZlclNpemUpCQkJCVwKKwlpZiAoTlVMTCAhPSBDb250ZXh0LT5wVXJiKSB7CQkJCQkJCVwKKwkJUlRVU0JfVU5MSU5LX1VSQihDb250ZXh0LT5wVXJiKTsJCQkJCVwKKwkJUlRVU0JfRlJFRV9VUkIoQ29udGV4dC0+cFVyYik7CQkJCQkJXAorCQlDb250ZXh0LT5wVXJiID0gTlVMTDsgfQkJCQkJCQkJXAorCWlmIChOVUxMICE9IENvbnRleHQtPlRyYW5zZmVyQnVmZmVyKSB7CQkJCQlcCisJCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgQnVmZmVyU2l6ZSwJXAorCQkJCQkJCQlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwJXAorCQkJCQkJCQlDb250ZXh0LT5kYXRhX2RtYSk7CQkJXAorCQlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IE5VTEw7IH0KKworCisJVUlOVCAgICAgICAgICAgICAgICBpLCBhY2lkeDsKKwlQVFhfQ09OVEVYVAkJCXBOdWxsQ29udGV4dCAgID0gJnBBZC0+TnVsbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUHNQb2xsQ29udGV4dCA9ICZwQWQtPlBzUG9sbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUlRTQ29udGV4dCAgICA9ICZwQWQtPlJUU0NvbnRleHQ7CisvLwlQSFRfVFhfQ09OVEVYVCAJCXBIVFRYQ29udGV4dDsKKwkvL1BSVE1QX1JFT1JERVJCVUYJcFJlb3JkZXJCdWY7CisJUE9TX0NPT0tJRQkJCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisvLwlSVE1QX1RYX1JJTkcJCSpwVHhSaW5nOworCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0tPiBSVE1QRnJlZVR4UnhSaW5nTWVtb3J5XG4iKSk7CisJcE9iaiA9IHBPYmo7CisKKwkvLyBGcmVlIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBSRUNFSVZFIGJ1ZmZlciBxdWV1ZS4KKwlmb3IoaT0wOyBpPChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQlpZiAocFJ4Q29udGV4dCkKKwkJCUxNX1VSQl9GUkVFKHBPYmosIHBSeENvbnRleHQsIE1BWF9SWEJVTEtfU0laRSk7CisJfQorCisJLy8gRnJlZSBQc1BvbGwgZnJhbWUgcmVzb3VyY2UKKwlMTV9VUkJfRlJFRShwT2JqLCBwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCisJLy8gRnJlZSBOVUxMIGZyYW1lIHJlc291cmNlCisJTE1fVVJCX0ZSRUUocE9iaiwgcE51bGxDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKKwkvLyBGcmVlIFJUUyBmcmFtZSByZXNvdXJjZQorCUxNX1VSQl9GUkVFKHBPYmosIHBSVFNDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKKworCS8vIEZyZWUgYmVhY29uIGZyYW1lIHJlc291cmNlCisJZm9yKGk9MDsgaTxCRUFDT05fUklOR19TSVpFOyBpKyspCisJeworCQlQVFhfQ09OVEVYVAlwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKKwkJaWYgKHBCZWFjb25Db250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEJlYWNvbkNvbnRleHQsIHNpemVvZihUWF9CVUZGRVIpKTsKKwl9CisKKworCS8vIEZyZWUgbWdtdCBmcmFtZSByZXNvdXJjZQorCWZvcihpID0gMDsgaSA8IE1HTVRfUklOR19TSVpFOyBpKyspCisJeworCQlQVFhfQ09OVEVYVCBwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpcEFkLT5NZ210UmluZy5DZWxsW2ldLkFsbG9jVmE7CisJCS8vTE1fVVJCX0ZSRUUocE9iaiwgcE1MTUVDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisJCWlmIChOVUxMICE9IHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCkKKwkJeworCQkJUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgcEFkLT5NZ210UmluZy5DZWxsW2ldLnBOZGlzUGFja2V0KTsKKwkJCXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCA9IE5VTEw7CisJCQlwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsKKwkJfQorCisJCWlmIChwTUxNRUNvbnRleHQpCisJCXsKKwkJCWlmIChOVUxMICE9IHBNTE1FQ29udGV4dC0+cFVyYikKKwkJCXsKKwkJCQlSVFVTQl9VTkxJTktfVVJCKHBNTE1FQ29udGV4dC0+cFVyYik7CisJCQkJUlRVU0JfRlJFRV9VUkIocE1MTUVDb250ZXh0LT5wVXJiKTsKKwkJCQlwTUxNRUNvbnRleHQtPnBVcmIgPSBOVUxMOworCQkJfQorCQl9CisJfQorCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhKQorCQlOZGlzRnJlZU1lbW9yeShwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhLCBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUsIDApOworCisKKwkvLyBGcmVlIFR4IGZyYW1lIHJlc291cmNlCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCWZvcihhY2lkeD0wOyBhY2lkeDw0OyBhY2lkeCsrKQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQl7CisJCVBIVF9UWF9DT05URVhUIHBIVFRYQ29udGV4dCA9ICYocEFkLT5UeENvbnRleHRbYWNpZHhdKTsKKwkJCWlmIChwSFRUWENvbnRleHQpCisJCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEhUVFhDb250ZXh0LCBzaXplb2YoSFRUWF9CVUZGRVIpKTsKKwkJfQorCisJaWYgKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KQorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJZm9yKGk9MDsgaTw2OyBpKyspCisJeworCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW2ldKTsKKwl9CisKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJ1bGtJbkxvY2spOworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrKTsKKworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworI2lmZGVmIFJBTElOS19BVEUKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJLy8gQ2xlYXIgYWxsIHBlbmRpbmcgYnVsay1vdXQgcmVxdWVzdCBmbGFncy4KKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCAweGZmZmZmZmZmKTsKKworLy8JTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworLy8JZm9yKGk9MDsgaTxNQVhfTEVOX09GX0JBX1JFQ19UQUJMRTsgaSsrKQorLy8JeworLy8JCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W2ldLlJ4UmVSaW5nTG9jayk7CisvLwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI8LS0tIFJlbGVhc2VBZGFwdGVyXG4iKSk7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFkYXB0ZXIgY29udHJvbCBibG9jay4KKworQXJndW1lbnRzOgorICAgIHBBZAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCitSZXR1cm4gVmFsdWU6CisJTkRJU19TVEFUVVNfU1VDQ0VTUworCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwlORElTX1NUQVRVU19SRVNPVVJDRVMKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIEFkYXB0ZXJCbG9ja0FsbG9jYXRlTWVtb3J5KAorCUlOIFBWT0lECWhhbmRsZSwKKwlPVVQJUFZPSUQJKnBwQWQpCit7CisJUFVTQl9ERVYJdXNiX2RldjsKKwlQT1NfQ09PS0lFCXBPYmogPSAoUE9TX0NPT0tJRSkgaGFuZGxlOworCisKKwl1c2JfZGV2ID0gcE9iai0+cFVzYl9EZXY7CisKKwlwT2JqLT5NTE1FVGhyX3BpZAk9IE5VTEw7CisJcE9iai0+UlRVU0JDbWRUaHJfcGlkCT0gTlVMTDsKKworCSpwcEFkID0gKFBWT0lEKXZtYWxsb2Moc2l6ZW9mKFJUTVBfQURBUFRFUikpOworCisJaWYgKCpwcEFkKQorCXsKKwkJTmRpc1plcm9NZW1vcnkoKnBwQWQsIHNpemVvZihSVE1QX0FEQVBURVIpKTsKKwkJKChQUlRNUF9BREFQVEVSKSpwcEFkKS0+T1NfQ29va2llID0gaGFuZGxlOworCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENyZWF0ZSBrZXJuZWwgdGhyZWFkcyAmIHRhc2tsZXRzLgorCitBcmd1bWVudHM6CisgICAgKm5ldF9kZXYJCQlQb2ludGVyIHRvIHdpcmVsZXNzIG5ldCBkZXZpY2UgaW50ZXJmYWNlCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfRkFJTFVSRQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJIENyZWF0ZVRocmVhZHMoCisJSU4Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlwaWRfdCBwaWRfbnVtYmVyOworCisJLy9pbml0X01VVEVYKCYocEFkLT51c2JkZXZfc2VtYXBob3JlKSk7CisKKwlpbml0X01VVEVYX0xPQ0tFRCgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsKKwlpbml0X2NvbXBsZXRpb24gKCZwQWQtPm1sbWVDb21wbGV0ZSk7CisKKwlpbml0X01VVEVYX0xPQ0tFRCgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7CisJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5DbWRRQ29tcGxldGUpOworCisJaW5pdF9NVVRFWF9MT0NLRUQoJihwQWQtPlJUVVNCVGltZXJfc2VtYXBob3JlKSk7CisJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5UaW1lclFDb21wbGV0ZSk7CisKKwkvLyBDcmVhdCBNTE1FIFRocmVhZAorCXBPYmotPk1MTUVUaHJfcGlkID0gTlVMTDsKKwlwaWRfbnVtYmVyID0ga2VybmVsX3RocmVhZChNbG1lVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKKwlpZiAocGlkX251bWJlciA8IDApCisJeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBNbG1lIHRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisJcE9iai0+TUxNRVRocl9waWQgPSBmaW5kX2dldF9waWQocGlkX251bWJlcik7CisJLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdGFydAorCXdhaXRfZm9yX2NvbXBsZXRpb24oJihwQWQtPm1sbWVDb21wbGV0ZSkpOworCisJLy8gQ3JlYXQgQ29tbWFuZCBUaHJlYWQKKwlwT2JqLT5SVFVTQkNtZFRocl9waWQgPSBOVUxMOworCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKFJUVVNCQ21kVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKKwlpZiAocGlkX251bWJlciA8IDApCisJeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBSVFVTQkNtZCB0aHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IGZpbmRfZ2V0X3BpZChwaWRfbnVtYmVyKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5DbWRRQ29tcGxldGUpKTsKKworCXBPYmotPlRpbWVyUVRocl9waWQgPSBOVUxMOworCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKFRpbWVyUVRocmVhZCwgcEFkLCBDTE9ORV9WTSk7CisJaWYgKHBpZF9udW1iZXIgPCAwKQorCXsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQgVGltZXJRVGhyZWFkXG4iLHBBZC0+bmV0X2Rldi0+bmFtZSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKwlwT2JqLT5UaW1lclFUaHJfcGlkID0gZmluZF9nZXRfcGlkKHBpZF9udW1iZXIpOworCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5UaW1lclFDb21wbGV0ZSkpOworCisJLy8gQ3JlYXRlIHJlY2VpdmUgdGFza2xldAorCXRhc2tsZXRfaW5pdCgmcE9iai0+cnhfZG9uZV90YXNrLCByeF9kb25lX3Rhc2tsZXQsIChVTE9ORylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrLCBydDI4NzBfbWdtdF9kbWFfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMwX2RtYV9kb25lX3Rhc2ssIHJ0Mjg3MF9hYzBfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrLCBydDI4NzBfYWMxX2RtYV9kb25lX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisJdGFza2xldF9pbml0KCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzaywgcnQyODcwX2FjMl9kbWFfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMzX2RtYV9kb25lX3Rhc2ssIHJ0Mjg3MF9hYzNfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPmhjY2FfZG1hX2RvbmVfdGFzaywgcnQyODcwX2hjY2FfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPnRidHRfdGFzaywgdGJ0dF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrLCBydDI4NzBfbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+cnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2ssIHJ0Mjg3MF9ydHNfZnJhbWVfY29tcGxldGVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPnBzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrLCBydDI4NzBfcHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorIAlBcyBTVEEncyBCU1NJRCBpcyBhIFdDIHRvbywgaXQgdXNlcyBzaGFyZWQga2V5IHRhYmxlLgorIAlUaGlzIGZ1bmN0aW9uIHdyaXRlIGNvcnJlY3QgdW5pY2FzdCBUWCBrZXkgdG8gQVNJQyBXQ0lELgorIAlBbmQgd2Ugc3RpbGwgbWFrZSBhIGNvcHkgaW4gb3VyIE1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LgorCUNhbGxlciBndWFyYW50ZWUgVEtJUC9BRVMgYWx3YXlzIGhhcyBrZXlpZHggPSAwLiAocGFpcndpc2Uga2V5KQorCUNhbGxlciBndWFyYW50ZWUgV0VQIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBzZXQgVHhrZXksICBkZWZhdWx0IGtleSBpbmRleD0wfjMuCisKK0FyZ3VtZW50czoKKwlwQWQgCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJcEtleQkJCQkJUG9pbnRlciB0byB0aGUgd2hlcmUgdGhlIGtleSBzdG9yZWQKKworUmV0dXJuIFZhbHVlOgorCU5ESVNfU1VDQ0VTUwkJCUFkZCBrZXkgc3VjY2Vzc2Z1bGx5CisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBBZGRCU1NJRENpcGhlcigKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JVUNIQVIJCQkJQWlkLAorCUlOCVBORElTXzgwMl8xMV9LRVkJcEtleSwKKwlJTiAgVUNIQVIgICAJCQlDaXBoZXJBbGcpCit7CisJUFVDSEFSCQlwVHhNaWMsIHBSeE1pYzsKKwlCT09MRUFOIAliS2V5UlNDLCBiQXV0aGVudGljYXRvcjsgLy8gaW5kaWNhdGUgdGhlIHJlY2VpdmUgU0Mgc2V0IGJ5IEtleVJTQyB2YWx1ZQorLy8JVUNIQVIJCUNpcGhlckFsZzsKKwlVQ0hBUgkJaTsKKwlVTE9ORwkJV0NJREF0dHJpOworCVVTSE9SVAkgCW9mZnNldDsKKwlVQ0hBUgkJS2V5SWR4LCBJVkVJVls4XTsKKwlVSU5UMzIJCVZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEFkZEJTU0lEQ2lwaGVyPT0+IEFpZCA9ICVkXG4iLEFpZCkpOworCisJLy8gQml0IDI5IG9mIEFkZC1rZXkgS2V5UlNDCisJYktleVJTQyAJICAgPSAocEtleS0+S2V5SW5kZXggJiAweDIwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKworCS8vIEJpdCAyOCBvZiBBZGQta2V5IEF1dGhlbnRpY2F0b3IKKwliQXV0aGVudGljYXRvciA9IChwS2V5LT5LZXlJbmRleCAmIDB4MTAwMDAwMDApID8gVFJVRSA6IEZBTFNFOworCUtleUlkeCA9IChVQ0hBUilwS2V5LT5LZXlJbmRleCYweGZmOworCisJaWYgKEtleUlkeCA+IDQpCisJCXJldHVybjsKKworCisJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApCisJewlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJeworCQkJLy8gZm9yIFdQQS1Ob25lIFR4LCBSeCBNSUMgaXMgdGhlIHNhbWUKKwkJCXBUeE1pYyA9IChQVUNIQVIpICgmcEtleS0+S2V5TWF0ZXJpYWwpICsgMTY7CisJCQlwUnhNaWMgPSBwVHhNaWM7CisJCX0KKwkJZWxzZSBpZiAoYkF1dGhlbnRpY2F0b3IgPT0gVFJVRSkKKwkJeworCQkJcFR4TWljID0gKFBVQ0hBUikgKCZwS2V5LT5LZXlNYXRlcmlhbCkgKyAxNjsKKwkJCXBSeE1pYyA9IChQVUNIQVIpICgmcEtleS0+S2V5TWF0ZXJpYWwpICsgMjQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwUnhNaWMgPSAoUFVDSEFSKSAoJnBLZXktPktleU1hdGVyaWFsKSArIDE2OworCQkJcFR4TWljID0gKFBVQ0hBUikgKCZwS2V5LT5LZXlNYXRlcmlhbCkgKyAyNDsKKwkJfQorCisJCW9mZnNldCA9IFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKEFpZCAqIEhXX0tFWV9FTlRSWV9TSVpFKSArIDB4MTA7CisJCWZvciAoaT0wOyBpPDg7ICkKKwkJeworCQkJVmFsdWUgPSAqKHBUeE1pYytpKTsKKwkJCVZhbHVlICs9ICgqKHBUeE1pYytpKzEpPDw4KTsKKwkJCVZhbHVlICs9ICgqKHBUeE1pYytpKzIpPDwxNik7CisJCQlWYWx1ZSArPSAoKihwVHhNaWMraSszKTw8MjQpOworCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0K2ksIFZhbHVlKTsKKwkJCWkrPTQ7CisJCX0KKworCQlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChBaWQgKiBIV19LRVlfRU5UUllfU0laRSkgKyAweDE4OworCQlmb3IgKGk9MDsgaTw4OyApCisJCXsKKwkJCVZhbHVlID0gKihwUnhNaWMraSk7CisJCQlWYWx1ZSArPSAoKihwUnhNaWMraSsxKTw8OCk7CisJCQlWYWx1ZSArPSAoKihwUnhNaWMraSsyKTw8MTYpOworCQkJVmFsdWUgKz0gKCoocFJ4TWljK2krMyk8PDI0KTsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCtpLCBWYWx1ZSk7CisJCQlpKz00OworCQl9CisKKwkJLy8gT25seSBLZXkgbGVudGggZXF1YWwgdG8gVEtJUCBrZXkgaGF2ZSB0aGVzZQorCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuUnhNaWMsIHBSeE1pYywgOCk7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeE1pYywgcFR4TWljLCA4KTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkoIglUeE1JQyAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggXG4iLAorCQkJCXBUeE1pY1swXSxwVHhNaWNbMV0scFR4TWljWzJdLHBUeE1pY1szXSwKKwkJCQlwVHhNaWNbNF0scFR4TWljWzVdLHBUeE1pY1s2XSxwVHhNaWNbN10pKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCIJUnhNSUMgID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFxuIiwKKwkJCQlwUnhNaWNbMF0scFJ4TWljWzFdLHBSeE1pY1syXSxwUnhNaWNbM10sCisJCQkJcFJ4TWljWzRdLHBSeE1pY1s1XSxwUnhNaWNbNl0scFJ4TWljWzddKSk7CisJfQorCisJLy8gMi4gUmVjb3JkIFNlY3VyaXR5IEtleS4KKwlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LktleUxlbj0gKFVDSEFSKXBLZXktPktleUxlbmd0aDsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuS2V5LCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisKKwkvLyAzLiBDaGVjayBSeFRzYy4gQW5kIHVzZWQgdG8gaW5pdCB0byBBU0lDIElWLgorCWlmIChiS2V5UlNDID09IFRSVUUpCisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5SeFRzYywgJnBLZXktPktleVJTQywgNik7CisJZWxzZQorCQlOZGlzWmVyb01lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuUnhUc2MsIDYpOworCisJLy8gNC4gSW5pdCBUeFRzYyB0byBvbmUgYmFzZWQgb24gV2lGaSBXUEEgc3BlY3MKKwlwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhUc2NbMF0gPSAxOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeFRzY1sxXSA9IDA7CisJcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlR4VHNjWzJdID0gMDsKKwlwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhUc2NbM10gPSAwOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeFRzY1s0XSA9IDA7CisJcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlR4VHNjWzVdID0gMDsKKworCUNpcGhlckFsZyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5DaXBoZXJBbGc7CisKKwlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChBaWQgKiBIV19LRVlfRU5UUllfU0laRSk7CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgKFVTSE9SVCkgb2Zmc2V0LCBwS2V5LT5LZXlNYXRlcmlhbCwKKwkJCQkoKHBLZXktPktleUxlbmd0aCA9PSBMRU5fVEtJUF9LRVkpID8gMTYgOiAoVVNIT1JUKXBLZXktPktleUxlbmd0aCkpOworCisJb2Zmc2V0ID0gU0hBUkVEX0tFWV9UQUJMRV9CQVNFICsgKEtleUlkeCAqIEhXX0tFWV9FTlRSWV9TSVpFKTsKKwlSVFVTQk11bHRpV3JpdGUocEFkLCAoVVNIT1JUKSBvZmZzZXQsIHBLZXktPktleU1hdGVyaWFsLCAoVVNIT1JUKXBLZXktPktleUxlbmd0aCk7CisKKwlvZmZzZXQgPSBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsgKEFpZCAqIEhXX0lWRUlWX0VOVFJZX1NJWkUpOworCU5kaXNaZXJvTWVtb3J5KElWRUlWLCA4KTsKKworCS8vIElWL0VJVgorCWlmICgoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB8fAorCQkoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwKKwkJKENpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSkKKwl7CisJCUlWRUlWWzNdID0gMHgyMDsgLy8gRWl2IGJpdCBvbi4ga2V5aWQgYWx3YXlzIDAgZm9yIHBhaXJ3aXNlIGtleQorCX0KKwkvLyBkZWZhdWx0IGtleSBpZHggbmVlZHMgdG8gc2V0LgorCS8vIGluIFRLSVAvQUVTIEtleUlkeCA9IDAgLCBXRVAgS2V5SWR4IGlzIGRlZmF1bHQgdHgga2V5LgorCWVsc2UKKwl7CisJCUlWRUlWWzNdIHw9IChLZXlJZHg8PCA2KTsKKwl9CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgKFVTSE9SVCkgb2Zmc2V0LCBJVkVJViwgOCk7CisKKwkvLyBXQ0lEIEF0dHJpYnV0ZSBVREY6MywgQlNTSWR4OjMsIEFsZzozLCBLZXl0YWJsZToxPVBBSVJXSVNFIEtFWSwgQlNTSWR4IGlzIDAKKwlpZiAoKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgfHwKKwkJKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpIHx8CisJCShDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykpCisJeworCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKwl9CisJZWxzZQorCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKworCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKEFpZCogSFdfV0NJRF9BVFRSSV9TSVpFKTsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7CisJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsICZWYWx1ZSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCU1NJRF9XQ0lEIDogb2Zmc2V0ID0gJXgsIFdDSURBdHRyaSA9ICVseFxuIiwKKwkJCW9mZnNldCwgV0NJREF0dHJpKSk7CisKKwkvLyBwQWRkcgorCS8vIEFkZCBCc3NpZCBtYWMgYWRkcmVzcyBhdCBsaW5rdXAuIG5vdCBoZXJlLiAgY2hlY2shCisJLypvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgKEJTU0lEX1dDSUQgKiBIV19XQ0lEX0VOVFJZX1NJWkUpOworCSpmb3IgKGk9MDsgaTxNQUNfQUREUl9MRU47IGkrKykKKwl7CisJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0K2ksIHBLZXktPkJTU0lEW2ldKTsKKwl9CisJKi8KKworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFkZEJTU0lEYXNXQ0lERW50cnk6IEFsZz0lcywgS2V5TGVuZ3RoID0gJWRcbiIsCisJCQlDaXBoZXJOYW1lW0NpcGhlckFsZ10sIHBLZXktPktleUxlbmd0aCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIktleSBbaWR4PSV4XSBbS2V5TGVuID0gJWRdXG4iLAorCQkJcEtleS0+S2V5SW5kZXgsIHBLZXktPktleUxlbmd0aCkpOworCWZvcihpPTA7IGk8cEtleS0+S2V5TGVuZ3RoOyBpKyspCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIiAleDoiLCBwS2V5LT5LZXlNYXRlcmlhbFtpXSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiCSBcbiIpKTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBHZXQgYSByZWNlaXZlZCBwYWNrZXQuCisKK0FyZ3VtZW50czoKKwlwQWQJCQkJCWRldmljZSBjb250cm9sIGJsb2NrCisJcFNhdmVSeEQJCQlyZWNlaXZlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24KKwkqcGJSZXNjaGVkdWxlCQluZWVkIHJlc2NoZWR1bGUgZmxhZworCSpwUnhQZW5kaW5nCQkJcGVuZGluZyByZWNlaXZlZCBwYWNrZXQgZmxhZworCitSZXR1cm4gVmFsdWU6CisgICAgdGhlIHJlY2lldmVkIHBhY2tldAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZSBSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRQkJCTQKK1BORElTX1BBQ0tFVCBHZXRQYWNrZXRGcm9tUnhSaW5nKAorCUlOCQlQUlRNUF9BREFQVEVSCQlwQWQsCisJT1VUCQlQUlQyOFhYX1JYRF9TVFJVQwlwU2F2ZVJ4RCwKKwlPVVQJCUJPT0xFQU4JCQkJKnBiUmVzY2hlZHVsZSwKKwlJTiBPVVQJVUlOVDMyCQkJCSpwUnhQZW5kaW5nKQoreworCVBSWF9DT05URVhUCQlwUnhDb250ZXh0OworCVBORElTX1BBQ0tFVAlwU2tiOworCVBVQ0hBUgkJCXBEYXRhOworCVVMT05HCQkJVGhpc0ZyYW1lTGVuOworCVVMT05HCQkJUnhCdWZmZXJMZW5ndGg7CisJUFJYV0lfU1RSVUMJCXBSeFdJOworCisJcFJ4Q29udGV4dCA9ICZwQWQtPlJ4Q29udGV4dFtwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleF07CisJaWYgKChwUnhDb250ZXh0LT5SZWFkYWJsZSA9PSBGQUxTRSkgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKQorCQlyZXR1cm4gTlVMTDsKKworCVJ4QnVmZmVyTGVuZ3RoID0gcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0IC0gcEFkLT5SZWFkUG9zaXRpb247CisJaWYgKFJ4QnVmZmVyTGVuZ3RoIDwgKFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgc2l6ZW9mKFJYV0lfU1RSVUMpICsgc2l6ZW9mKFJYSU5GT19TVFJVQykpKQorCXsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCXBEYXRhID0gJnBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyW3BBZC0+UmVhZFBvc2l0aW9uXTsgLyogNEtCICovCisJLy8gVGhlIFJYRE1BIGZpZWxkIGlzIDQgYnl0ZXMsIG5vdyBqdXN0IHVzZSB0aGUgZmlyc3QgMiBieXRlcy4gVGhlIExlbmd0aCBpbmNsdWRpbmcgdGhlIChSWFdJICsgTVNEVSArIFBhZGRpbmcpCisJVGhpc0ZyYW1lTGVuID0gKnBEYXRhICsgKCoocERhdGErMSk8PDgpOworICAgIGlmIChUaGlzRnJhbWVMZW4gPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJJUklkeCglZCk6IFJYRE1BTGVuIGlzIHplcm8uWyVsZF0sIEJ1bGtJbkJ1ZkxlbiA9ICVsZClcbiIsCisJCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCkpOworCQlnb3RvIGxhYmVsX251bGw7CisJfQorCWlmICgoVGhpc0ZyYW1lTGVuJjB4MykgIT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkJJUklkeCglZCk6IFJYRE1BTGVuIG5vdCBtdWx0aXBsZSBvZiA0LlslbGRdLCBCdWxrSW5CdWZMZW4gPSAlbGQpXG4iLAorCQkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgVGhpc0ZyYW1lTGVuLCBwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQpKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCWlmICgoVGhpc0ZyYW1lTGVuICsgOCk+IFJ4QnVmZmVyTGVuZ3RoKQkvLyA4IGZvciAoUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUgKyBzaXplb2YoUlhJTkZPX1NUUlVDKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQklSSWR4KCVkKTpGcmFtZUxlbigweCVseCkgb3V0cmFuZ2VzLiBCdWxrSW5MZW49MHglbHgsIHJlbWFpbmluZyBSeEJ1Zkxlbj0weCVseCwgUmVhZFBvcz0weCVseFxuIiwKKwkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCwgUnhCdWZmZXJMZW5ndGgsIHBBZC0+UmVhZFBvc2l0aW9uKSk7CisKKwkJLy8gZXJyb3IgZnJhbWUuIGZpbmlzaCB0aGlzIGxvb3AKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCS8vIHNraXAgVVNCIGZyYW1lIGxlbmd0aCBmaWVsZAorCXBEYXRhICs9IFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFOworCXBSeFdJID0gKFBSWFdJX1NUUlVDKXBEYXRhOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QV0lFbmRpYW5DaGFuZ2UocERhdGEsIFRZUEVfUlhXSSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCWlmIChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID4gVGhpc0ZyYW1lTGVuKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMoKTpwUnhXSU1QRFV0b3RhbEJ5dGVDb3VudCglZCkgbGFyZ2UgdGhhbiBSeERNQUxlbiglbGQpXG4iLAorCQkJCQkJCQkJX19GVU5DVElPTl9fLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LCBUaGlzRnJhbWVMZW4pKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKHBEYXRhLCBUWVBFX1JYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIGFsbG9jYXRlIGEgcnggcGFja2V0CisJcFNrYiA9IGRldl9hbGxvY19za2IoVGhpc0ZyYW1lTGVuKTsKKwlpZiAocFNrYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCIlcygpOkNhbm5vdCBBbGxvY2F0ZSBzayBidWZmZXIgZm9yIHRoaXMgQnVsay1JbiBidWZmZXIhXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCS8vIGNvcHkgdGhlIHJ4IHBhY2tldAorCW1lbWNweShza2JfcHV0KHBTa2IsIFRoaXNGcmFtZUxlbiksIHBEYXRhLCBUaGlzRnJhbWVMZW4pOworCVJUUEtUX1RPX09TUEtUKHBTa2IpLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBCU1MwKTsKKwlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKE9TUEtUX1RPX1JUUEtUKHBTa2IpLCBQS1RTUkNfTkRJUyk7CisKKwkvLyBjb3B5IFJ4RAorCSpwU2F2ZVJ4RCA9ICooUFJYSU5GT19TVFJVQykocERhdGEgKyBUaGlzRnJhbWVMZW4pOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBTYXZlUnhELCBUWVBFX1JYSU5GTyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJLy8gdXBkYXRlIG5leHQgcGFja2V0IHJlYWQgcG9zaXRpb24uCisJcEFkLT5SZWFkUG9zaXRpb24gKz0gKFRoaXNGcmFtZUxlbiArIFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgUlhJTkZPX1NJWkUpOwkvLyA4IGZvciAoUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUgKyBzaXplb2YoUlhJTkZPX1NUUlVDKSkKKworCXJldHVybiBwU2tiOworCitsYWJlbF9udWxsOgorCisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0cy4KKworQXJndW1lbnRzOgorCWRhdGEJCQkJLSBVUkIgaW5mb3JtYXRpb24gcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlwdXJiYl90IAkJCXBVcmI7CisJUFJYX0NPTlRFWFQJCQlwUnhDb250ZXh0OworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwl1bnNpZ25lZCBpbnQJCUlycUZsYWdzOworCisJcFVyYgkJPSAocHVyYmJfdClkYXRhOworCXBSeENvbnRleHQJPSAoUFJYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQk9IHBSeENvbnRleHQtPnBBZDsKKwlTdGF0dXMgPSBwVXJiLT5zdGF0dXM7CisKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCXBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCArPSBwVXJiLT5hY3R1YWxfbGVuZ3RoOworCS8vTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisJcEFkLT5QZW5kaW5nUngtLTsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlwQWQtPkJ1bGtJbkNvbXBsZXRlKys7CisJCXBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb24gPSAwOworCQlpZiAocFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0KQkvLyBBcyBqYW4ncyBjb21tZW50LCBpdCBtYXkgYnVsay1pbiBzdWNjZXNzIGJ1dCBzaXplIGlzIHplcm8uCisJCXsKKwkJCXBSeENvbnRleHQtPlJlYWRhYmxlID0gVFJVRTsKKwkJCUlOQ19SSU5HX0lOREVYKHBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsIFJYX1JJTkdfU0laRSk7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwl9CisJZWxzZQkgLy8gU1RBVFVTX09USEVSCisJeworCQlwQWQtPkJ1bGtJbkNvbXBsZXRlRmFpbCsrOworCQkvLyBTdGlsbCByZWFkIHRoaXMgcGFja2V0IGFsdGhvdWdoIGl0IG1heSBjb210YWluIHdyb25nIGJ5dGVzLgorCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IEZBTFNFOworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCisJCS8vIFBhcnNpbmcgYWxsIHBhY2tldHMuIGJlY2F1c2UgYWZ0ZXIgcmVzZXQsIHRoZSBpbmRleCB3aWxsIHJlc2V0IHRvIGFsbCB6ZXJvLgorCQlpZiAoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJCXsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGsgSW4gRmFpbGVkLiBTdGF0dXM9JWQsIEJJSWR4PTB4JXgsIEJJUklkeD0weCV4LCBhY3R1YWxfbGVuZ3RoPSAweCV4XG4iLAorCQkJCQkJCVN0YXR1cywgcEFkLT5OZXh0UnhCdWxrSW5JbmRleCwgcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXgsIHBSeENvbnRleHQtPnBVcmItPmFjdHVhbF9sZW5ndGgpKTsKKworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4sIE5VTEwsIDApOworCQl9CisJfQorCisJQVNTRVJUKChwUnhDb250ZXh0LT5JblVzZSA9PSBwUnhDb250ZXh0LT5JUlBQZW5kaW5nKSk7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorICAgIHsKKwkJLy8gSWYgdGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBhbmQgUnggZnJhbWUgaXMgc2V0IGludG8gaGVyZS4KKwkJaWYgKHBBZC0+Q29udGluQnVsa0luID09IFRSVUUpCisJCXsKKwkJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKworCXJldHVybjsKKworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9tZ210X2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIgCXBBZDsKKwlQVFhfQ09OVEVYVAkJcE1MTUVDb250ZXh0OworCWludAkJCQlpbmRleDsKKwlQTkRJU19QQUNLRVQJcFBhY2tldDsKKwlwdXJiYl90CQkJcFVyYjsKKwlOVFNUQVRVUwkJU3RhdHVzOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcE1MTUVDb250ZXh0CT0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJCT0gcE1MTUVDb250ZXh0LT5wQWQ7CisJU3RhdHVzCQkJPSBwVXJiLT5zdGF0dXM7CisJaW5kZXggCQkJPSBwTUxNRUNvbnRleHQtPlNlbGZJZHg7CisKKwlBU1NFUlQoKHBBZC0+TWdtdFJpbmcuVHhEbWFJZHggPT0gaW5kZXgpKTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisKKworCWlmIChTdGF0dXMgIT0gVVNCX1NUX05PRVJST1IpCisJeworCQkvL0J1bGstT3V0IGZhaWwgc3RhdHVzIGhhbmRsZQorCQlpZiAoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSkKKwkJeworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGsgT3V0IE1MTUUgRmFpbGVkLCBTdGF0dXM9JWQhXG4iLCBTdGF0dXMpKTsKKwkJCS8vIFRPRE86IEhvdyB0byBoYW5kbGUgYWJvdXQgdGhlIE1MTUVCdWxrT3V0IGZhaWxlZCBpc3N1ZS4gTmVlZCB0byByZXNlbmQgdGhlIG1nbXQgcGt0PworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IChNR01UUElQRUlEWCB8IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKTsKKwkJfQorCX0KKworCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gRkFMU0U7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKwkvLyBSZXNldCBNTE1FIGNvbnRleHQgZmxhZ3MKKwlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwlwTUxNRUNvbnRleHQtPkluVXNlID0gRkFMU0U7CisJcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPSBGQUxTRTsKKwlwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID0gMDsKKworCXBQYWNrZXQgPSBwQWQtPk1nbXRSaW5nLkNlbGxbaW5kZXhdLnBOZGlzUGFja2V0OworCXBBZC0+TWdtdFJpbmcuQ2VsbFtpbmRleF0ucE5kaXNQYWNrZXQgPSBOVUxMOworCisJLy8gSW5jcmVhc2UgTWdtdFJpbmcgSW5kZXgKKwlJTkNfUklOR19JTkRFWChwQWQtPk1nbXRSaW5nLlR4RG1hSWR4LCBNR01UX1JJTkdfU0laRSk7CisJcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCsrOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKworCS8vIE5vLW1hdHRlciBzdWNjZXNzIG9yIGZhaWwsIHdlIGZyZWUgdGhlIG1nbXQgcGFja2V0LgorCWlmIChwUGFja2V0KQorCQlSVE1QRnJlZU5kaXNQYWNrZXQocEFkLCBwUGFja2V0KTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSAmJgorCQkJKChwQWQtPmJ1bGtSZXNldFBpcGVpZCAmIEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKSA9PSBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykpCisJCXsJLy8gRm9yIE1nbXQgQnVsay1PdXQgZmFpbGVkLCBpZ25vcmUgaXQgbm93LgorCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJeworCisJCQkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkJCS8vIFRoZSBwcm90ZWN0aW9vbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCQkJaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPCBNR01UX1JJTkdfU0laRSAvKiBwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9PSBUUlVFICovKQorCQkJeworCQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfTUxNRSk7CisJCQl9CisJCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQkJfQorCQl9CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfaGNjYV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJUEhUX1RYX0NPTlRFWFQJCXBIVFRYQ29udGV4dDsKKwlVQ0hBUgkJCQlCdWxrT3V0UGlwZUlkID0gNDsKKwlwdXJiYl90CQkJCXBVcmI7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcEhUVFhDb250ZXh0CT0gKFBIVF9UWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkCQkJCT0gcEhUVFhDb250ZXh0LT5wQWQ7CisKKwlydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KCh1bnNpZ25lZCBsb25nKXBVcmIpOworCisJaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCXsKKwkJLy8gZG8gbm90aGluZyBhbmQgcmV0dXJuIGRpcmVjdGx5LgorCX0KKwllbHNlCisJeworCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKQorCQl7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKKwkJCWlmICgocEFkLT5UeFN3UXVldWVbQnVsa091dFBpcGVJZF0uTnVtYmVyID4gMCkgJiYKKwkJCQkvKigocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLworCQkJCShwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgorCQkJCShwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkKKwkJCXsKKwkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBCdWxrT3V0UGlwZUlkLCBNQVhfVFhfUFJPQ0VTUyk7CisJCQl9CisKKwkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUw8PDQpOworCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQl9CisJfQorCisKKwkJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzNfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDM7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyooKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KKwkJCQkocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKKwkJCQkocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpCisJCQl7CisJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCQkJfQorCisJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMPDwzKTsKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJfQorCX0KKworCisJCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfYWMyX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQgPSAyOworCXB1cmJiX3QJCQkJcFVyYjsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKworCXJ0Mjg3MF9kYXRhb3V0X2NvbXBsZXRlX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpcFVyYik7CisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJeworCQkvLyBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuCisJfQorCWVsc2UKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpCisJCXsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCQkJaWYgKChwQWQtPlR4U3dRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKSAmJgorCQkJCS8qKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uICsgMHg2MDAwKSkgfHwgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA+IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDB4NjAwMCkpICYmICovCisJCQkJKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbQnVsa091dFBpcGVJZF0gPT0gRkFMU0UpICYmCisJCQkJKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gRkFMU0UpKQorCQkJeworCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEJ1bGtPdXRQaXBlSWQsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCX0KKworCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTDw8Mik7CisJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisJCX0KKwl9CisKKwkJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzFfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDE7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyooKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KKwkJCQkocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKKwkJCQkocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpCisJCQl7CisJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCQkJfQorCisJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMPDwxKTsKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJfQorCX0KKworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzBfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDA7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyogICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLworCQkJCShwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgorCQkJCShwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkKKwkJCXsKKwkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBCdWxrT3V0UGlwZUlkLCBNQVhfVFhfUFJPQ0VTUyk7CisJCQl9CisKKwkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwpOworCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQl9CisJfQorCisKKwlyZXR1cm47CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0OworCXB1cmJiX3QJCQlwVXJiOworCU5UU1RBVFVTCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwlpcnFGbGFnOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBOdWxsQ29udGV4dAk9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZCAJCQk9IHBOdWxsQ29udGV4dC0+cEFkOworCVN0YXR1cyAJCQk9IHBVcmItPnN0YXR1czsKKworCS8vIFJlc2V0IE51bGwgZnJhbWUgY29udGV4dCBmbGFncworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyAJPSBGQUxTRTsKKwlwTnVsbENvbnRleHQtPkluVXNlIAkJPSBGQUxTRTsKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gRkFMU0U7CisJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFswXSA9IDA7CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCX0KKwllbHNlCS8vIFNUQVRVU19PVEhFUgorCXsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBOdWxsIEZyYW1lIEZhaWxlZCwgUmVhc29uQ29kZT0lZCFcbiIsIFN0YXR1cykpOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IChNR01UUElQRUlEWCB8IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKTsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCQl9CisJfQorCisJLy8gQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuCisJLy8gVGhlIHByb3RlY3Rpb29uIG9mIHJlc3QgYnVsayBzaG91bGQgYmUgaW4gQnVsa091dCByb3V0aW5lCisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCit9CisKKworc3RhdGljIHZvaWQgcnQyODcwX3J0c19mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlQVFhfQ09OVEVYVAkJcFJUU0NvbnRleHQ7CisJcHVyYmJfdAkJCXBVcmI7CisJTlRTVEFUVVMJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCWlycUZsYWc7CisKKworCXBVcmIJCT0gKHB1cmJiX3QpZGF0YTsKKwlwUlRTQ29udGV4dAk9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCT0gcFJUU0NvbnRleHQtPnBBZDsKKwlTdGF0dXMJCT0gcFVyYi0+c3RhdHVzOworCisJLy8gUmVzZXQgUlRTIGZyYW1lIGNvbnRleHQgZmxhZ3MKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwlwUlRTQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCXBSVFNDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCX0KKwllbHNlCS8vIFNUQVRVU19PVEhFUgorCXsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBSVFMgRnJhbWUgRmFpbGVkXG4iKSk7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisJCX0KKwl9CisKKwlSVE1QX1NFTV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BSVFNDb250ZXh0LT5CdWxrT3V0UGlwZUlkXSk7CisJcEFkLT5CdWxrT3V0UGVuZGluZ1twUlRTQ29udGV4dC0+QnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcFJUU0NvbnRleHQtPkJ1bGtPdXRQaXBlSWRdKTsKKworCS8vIEFsd2F5cyBjYWxsIEJ1bGsgcm91dGluZSwgZXZlbiByZXNldCBidWxrLgorCS8vIFRoZSBwcm90ZWN0aW9vbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUFRYX0NPTlRFWFQJCXBQc1BvbGxDb250ZXh0OworCXB1cmJiX3QJCQlwVXJiOworCU5UU1RBVFVTCQlTdGF0dXM7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcFBzUG9sbENvbnRleHQJPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwUHNQb2xsQ29udGV4dC0+cEFkOworCVN0YXR1cwkJCT0gcFVyYi0+c3RhdHVzOworCisJLy8gUmVzZXQgUHNQb2xsIGNvbnRleHQgZmxhZ3MKKwlwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZwk9IEZBTFNFOworCXBQc1BvbGxDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCX0KKwllbHNlIC8vIFNUQVRVU19PVEhFUgorCXsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBQU1BvbGwgRmFpbGVkXG4iKSk7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJfQorCisJUlRNUF9TRU1fTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSk7CisJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSk7CisKKwkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkvLyBUaGUgcHJvdGVjdGlvb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUKKwlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJcHVyYmJfdAkJCQlwVXJiOworCVBPU19DT09LSUUJCQlwT2JqOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCQlJcnFGbGFnczsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKwlwT2JqIAkJCT0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCVN0YXR1cwkJCT0gcFVyYi0+c3RhdHVzOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlCdWxrT3V0UGlwZUlkID0gcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkOworCXBBZC0+QnVsa091dERhdGFPbmVTZWNDb3VudCsrOworCisJLy9EQkdQUklOVChSVF9ERUJVR19MT1VELCAoIkRvbmUtQiglZCk6ST0weCVseCwgQ1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgQnVsa091dFBpcGVJZCwgaW5faW50ZXJydXB0KCksIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwKKwkvLwkJcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMDsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlwQWQtPkJ1bGtPdXRDb21wbGV0ZSsrOworCisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJCXBBZC0+Q291bnRlcnM4MDIzLkdvb2RUcmFuc21pdHMrKzsKKwkJLy9SVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlGUkVFX0hUVFhfUklORyhwQWQsIEJ1bGtPdXRQaXBlSWQsIHBIVFRYQ29udGV4dCk7CisJCS8vUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisKKwl9CisJZWxzZQkvLyBTVEFUVVNfT1RIRVIKKwl7CisJCVBVQ0hBUglwQnVmOworCisJCXBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIrKzsKKworCQlwQnVmID0gJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W3BIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbl07CisKKwkJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOworCQkJcEFkLT5idWxrUmVzZXRQaXBlaWQgPSBCdWxrT3V0UGlwZUlkOworCQkJcEFkLT5idWxrUmVzZXRSZXFbQnVsa091dFBpcGVJZF0gPSBwQWQtPkJ1bGtPdXRSZXE7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtPdXREYXRhUGFja2V0IGZhaWxlZDogUmVhc29uQ29kZT0lZCFcbiIsIFN0YXR1cykpOworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiXHQ+PkJ1bGtPdXQgUmVxPTB4JWx4LCBDb21wbGV0ZT0weCVseCwgT3RoZXI9MHglbHhcbiIsIHBBZC0+QnVsa091dFJlcSwgcEFkLT5CdWxrT3V0Q29tcGxldGUsIHBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIpKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlx0Pj5CdWxrT3V0IEhlYWRlcjoleCAleCAleCAleCAleCAleCAleCAleFxuIiwgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSwgcEJ1ZlszXSwgcEJ1Zls0XSwgcEJ1Zls1XSwgcEJ1Zls2XSwgcEJ1Zls3XSkpOworCQkvL0RCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCI+PkJ1bGtPdXRDb21wbGV0ZUNhbmNlbD0weCV4LCBCdWxrT3V0Q29tcGxldGVPdGhlcj0weCV4XG4iLCBwQWQtPkJ1bGtPdXRDb21wbGV0ZUNhbmNlbCwgcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlcikpOworCisJfQorCisJLy8KKwkvLyBiSW5Vc2UgPSBUUlVFLCBtZWFucyBzb21lIHByb2Nlc3MgYXJlIGZpbGxpbmcgVFggZGF0YSwgYWZ0ZXIgdGhhdCBtdXN0IHR1cm4gb24gYldhaXRpbmdCdWxrT3V0CisJLy8gYldhaXRpbmdCdWxrT3V0ID0gVFJVRSwgbWVhbnMgdGhlIFRYIGRhdGEgYXJlIHdhaXRpbmcgZm9yIGJ1bGsgb3V0LgorCS8vCisJLy9SVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pICYmCisJCShwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uICE9IChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24rOCkpICYmCisJCSFSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHIDw8IEJ1bGtPdXRQaXBlSWQpKSkKKwl7CisJCS8vIEluZGljYXRlIFRoZXJlIGlzIGRhdGEgYXZhbGlhYmxlCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwl9CisJLy9SVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkvLyBUaGUgcHJvdGVjdGlvbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKK30KKworLyogRW5kIG9mIDI4NzBfcnRtcF9pbml0LmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2FjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhZTUzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2FjdGlvbi5jCkBAIC0wLDAgKzEsMTAzOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKwlhY3Rpb24uYworCisgICAgQWJzdHJhY3Q6CisgICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSmFuIExlZQkJMjAwNgkgIAljcmVhdGVkIGZvciBydDI4NjAKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vYWN0aW9uLmgiCisKKworc3RhdGljIFZPSUQgUmVzZXJ2ZWRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lIGluaXQsIGluY2x1ZGluZyBzdGF0ZSB0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgUyAtIHBvaW50ZXIgdG8gdGhlIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUKKyAgICBOb3RlOgorICAgICAgICBUaGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTT0NfSURMRQorICAgICAgICBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgbWxtZV9kaXNhc3NvY19yZXFfYWN0aW9uCisgICAgICAgIE1UMl9QRUVSX0RJU0FTU09DX1JFUSAgICBwZWVyX2Rpc2Fzc29jX2FjdGlvbgorICAgICAgICBNVDJfUEVFUl9BU1NPQ19SRVEgICAgICAgZHJvcAorICAgICAgICBNVDJfUEVFUl9SRUFTU09DX1JFUSAgICAgZHJvcAorICAgICAgICBNVDJfQ0xTM0VSUiAgICAgICAgICAgICAgY2xzM2Vycl9hY3Rpb24KKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFjdGlvblN0YXRlTWFjaGluZUluaXQoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKQoreworCVN0YXRlTWFjaGluZUluaXQoUywgKFNUQVRFX01BQ0hJTkVfRlVOQyAqKVRyYW5zLCBNQVhfQUNUX1NUQVRFLCBNQVhfQUNUX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBQ1RfSURMRSwgQUNUX01BQ0hJTkVfQkFTRSk7CisKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX1NQRUNUUlVNX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclNwZWN0cnVtQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX1FPU19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJRT1NBY3Rpb24pOworCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9ETFNfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylSZXNlcnZlZEFjdGlvbik7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfRExTX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRMU0FjdGlvbik7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX0JBX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJBQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX0hUX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckhUQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX0FERF9CQV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVBRERCQUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lREVMQkFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX01MTUVfUkVDX0RFTEJBX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURFTEJBQWN0aW9uKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfUFVCTElDX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclB1YmxpY0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9STV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJSTUFjdGlvbik7CisKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX1FPU19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVRT1NBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX01MTUVfRExTX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURMU0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfQUNUX0lOVkFMSUQsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZUludmFsaWRBY3Rpb24pOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIE1sbWVBRERCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCisKK3sKKwlNTE1FX0FEREJBX1JFUV9TVFJVQ1QgKnBJbmZvOworCVVDSEFSICAgICAgICAgICBBZGRyWzZdOworCVBVQ0hBUiAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTICAgICBOU3RhdHVzOworCVVMT05HCQlJZHg7CisJRlJBTUVfQUREQkFfUkVRICBGcmFtZTsKKwlVTE9ORwkJRnJhbWVMZW47CisJQkFfT1JJX0VOVFJZCQkJKnBCQUVudHJ5ID0gTlVMTDsKKworCXBJbmZvID0gKE1MTUVfQUREQkFfUkVRX1NUUlVDVCAqKUVsZW0tPk1zZzsKKwlOZGlzWmVyb01lbW9yeSgmRnJhbWUsIHNpemVvZihGUkFNRV9BRERCQV9SRVEpKTsKKworCWlmKE1sbWVBZGRCQVJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyKSkKKwl7CisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKwkJLy8gMS4gZmluZCBlbnRyeQorCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5CQU9yaVdjaWRBcnJheVtwSW5mby0+VElEXTsKKwkJaWYgKElkeCA9PSAwKQorCQl7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGNhbid0IGZpbmQgQkFPcmlFbnRyeSBcbiIpKTsKKwkJCXJldHVybjsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKwkJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWlmIChBREhPQ19PTihwQWQpKQorCQkJCUFjdEhlYWRlckluaXQocEFkLCAmRnJhbWUuSGRyLCBwSW5mby0+cEFkZHIsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCWVsc2UKKwkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBJbmZvLT5wQWRkcik7CisKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCUZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfQkE7CisJCUZyYW1lLkFjdGlvbiA9IEFEREJBX1JFUTsKKwkJRnJhbWUuQmFQYXJtLkFNU0RVU3VwcG9ydGVkID0gMDsKKwkJRnJhbWUuQmFQYXJtLkJBUG9saWN5ID0gSU1NRURfQkE7CisJCUZyYW1lLkJhUGFybS5USUQgPSBwSW5mby0+VElEOworCQlGcmFtZS5CYVBhcm0uQnVmU2l6ZSA9IHBJbmZvLT5CYUJ1ZlNpemU7CisJCUZyYW1lLlRva2VuID0gcEluZm8tPlRva2VuOworCQlGcmFtZS5UaW1lT3V0VmFsdWUgPSBwSW5mby0+VGltZU91dFZhbHVlOworCQlGcmFtZS5CYVN0YXJ0U2VxLmZpZWxkLkZyYWdOdW0gPSAwOworCQlGcmFtZS5CYVN0YXJ0U2VxLmZpZWxkLlN0YXJ0U2VxID0gcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uVHhTZXFbcEluZm8tPlRJRF07CisKKwkJKihVU0hPUlQgKikoJkZyYW1lLkJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmRnJhbWUuQmFQYXJtKSk7CisJCUZyYW1lLlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KEZyYW1lLlRpbWVPdXRWYWx1ZSk7CisJCUZyYW1lLkJhU3RhcnRTZXEud29yZCA9IGNwdTJsZTE2KEZyYW1lLkJhU3RhcnRTZXEud29yZCk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCSAgICZGcmFtZUxlbiwKKwkJICAgICAgICAgICAgICBzaXplb2YoRlJBTUVfQUREQkFfUkVRKSwgJkZyYW1lLAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJLy9NaW5pcG9ydERhdGFNTVJlcXVlc3QocEFkLCBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5W3BJbmZvLT5USURdLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkEgLSBTZW5kIEFEREJBIHJlcXVlc3QuIFN0YXJ0U2VxID0gJXgsICBGcmFtZUxlbiA9ICVsZC4gQnVmU2l6ZSA9ICVkXG4iLCBGcmFtZS5CYVN0YXJ0U2VxLmZpZWxkLlN0YXJ0U2VxLCBGcmFtZUxlbiwgRnJhbWUuQmFQYXJtLkJ1ZlNpemUpKTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgc2VuZCBERUxCQSBhbmQgZGVsZXRlIEJhRW50cnkgaWYgYW55CisgICAgUGFyYW1ldHJzOgorICAgICAgICBFbGVtIC0gTUxNRSBtZXNzYWdlIE1MTUVfREVMQkFfUkVRX1NUUlVDVAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVERUxCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICpwSW5mbzsKKwlQVUNIQVIgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlQVUNIQVIJCSAgIHBPdXRCdWZmZXIyID0gTlVMTDsKKwlORElTX1NUQVRVUyAgICAgTlN0YXR1czsKKwlVTE9ORwkJSWR4OworCUZSQU1FX0RFTEJBX1JFUSAgRnJhbWU7CisJVUxPTkcJCUZyYW1lTGVuOworCUZSQU1FX0JBUglGcmFtZUJhcjsKKworCXBJbmZvID0gKE1MTUVfREVMQkFfUkVRX1NUUlVDVCAqKUVsZW0tPk1zZzsKKwkvLyBtdXN0IHNlbmQgYmFjayBERUxCQQorCU5kaXNaZXJvTWVtb3J5KCZGcmFtZSwgc2l6ZW9mKEZSQU1FX0RFTEJBX1JFUSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lREVMQkFBY3Rpb24oKSwgSW5pdGlhdG9yKCVkKSBcbiIsIHBJbmZvLT5Jbml0aWF0b3IpKTsKKworCWlmKE1sbWVEZWxCQVJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKSkKKwl7CisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVERUxCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgMS4gXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKworCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQkEgLSBNbG1lREVMQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIDIuIFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gU0VORCBCQVIgKFNlbmQgQkFSIHRvIHJlZnJlc2ggcGVlciByZW9yZGVyaW5nIGJ1ZmZlci4pCisJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLkJBT3JpV2NpZEFycmF5W3BJbmZvLT5USURdOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlCYXJIZWFkZXJJbml0KHBBZCwgJkZyYW1lQmFyLCBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5BZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5GcmFnTnVtID0gMDsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uVHhTZXFbcEluZm8tPlRJRF07IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5CYXJDb250cm9sLlRJRCA9IHBJbmZvLT5USUQ7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5CYXJDb250cm9sLkFDS1BvbGljeSA9IElNTUVEX0JBOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKwkJRnJhbWVCYXIuQmFyQ29udHJvbC5Db21wcmVzc2VkID0gMTsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLkJhckNvbnRyb2wuTVRJRCA9IDA7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIyLAkJCQkmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEZSQU1FX0JBUiksCSAgJkZyYW1lQmFyLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcjIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIC0gTWxtZURFTEJBQWN0aW9uKCkgLiBTZW5kIEJBUiB0byByZWZyZXNoIHBlZXIgcmVvcmRlcmluZyBidWZmZXIgXG4iKSk7CisKKwkJLy8gU0VORCBERUxCQSBGUkFNRQorCQlGcmFtZUxlbiA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWlmIChBREhPQ19PTihwQWQpKQorCQkJCUFjdEhlYWRlckluaXQocEFkLCAmRnJhbWUuSGRyLCBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5BZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQllbHNlCisJCQkJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsICBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQWRkcik7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9CQTsKKwkJRnJhbWUuQWN0aW9uID0gREVMQkE7CisJCUZyYW1lLkRlbGJhUGFybS5Jbml0aWF0b3IgPSBwSW5mby0+SW5pdGlhdG9yOworCQlGcmFtZS5EZWxiYVBhcm0uVElEID0gcEluZm8tPlRJRDsKKwkJRnJhbWUuUmVhc29uQ29kZSA9IDM5OyAvLyBUaW1lIE91dAorCQkqKFVTSE9SVCAqKSgmRnJhbWUuRGVsYmFQYXJtKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZGcmFtZS5EZWxiYVBhcm0pKTsKKwkJRnJhbWUuUmVhc29uQ29kZSA9IGNwdTJsZTE2KEZyYW1lLlJlYXNvbkNvZGUpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkgICAgICAgICAgICAgIHNpemVvZihGUkFNRV9ERUxCQV9SRVEpLCAgICAmRnJhbWUsCisJCSAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQSAtIE1sbWVERUxCQUFjdGlvbigpIC4gMyBERUxCQSBzZW50LiBJbml0aWF0b3IoJWQpXG4iLCBwSW5mby0+SW5pdGlhdG9yKSk7CisgICAgCX0KK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBNbG1lUU9TQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKK30KKworVk9JRCBNbG1lRExTQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKK30KKworVk9JRCBNbG1lSW52YWxpZEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJLy9QVUNIQVIJCSAgIHBPdXRCdWZmZXIgPSBOVUxMOworCS8vUmV0dXJuIHRoZSByZWNlaXZpbmcgZnJhbWUgZXhjZXB0IHRoZSBNU0Igb2YgY2F0ZWdvcnkgZmlsZWQgc2V0IHRvIDEuICA3LjMuMS4xMQorfQorCitWT0lEIFBlZXJRT1NBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitWT0lEIFBlZXJETFNBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSCUFjdGlvbiA9IEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzFdOworCisJc3dpdGNoKEFjdGlvbikKKwl7CisJCWNhc2UgQUNUSU9OX0RMU19SRVFVRVNUOgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCVBlZXJEbHNSZXFBY3Rpb24ocEFkLCBFbGVtKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCWJyZWFrOworCisJCWNhc2UgQUNUSU9OX0RMU19SRVNQT05TRToKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlQZWVyRGxzUnNwQWN0aW9uKHBBZCwgRWxlbSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKworCQljYXNlIEFDVElPTl9ETFNfVEVBUkRPV046CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJUGVlckRsc1RlYXJEb3duQWN0aW9uKHBBZCwgRWxlbSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKwl9Cit9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgUGVlckJBQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUglBY3Rpb24gPSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsxXTsKKworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIEFEREJBX1JFUToKKwkJCVBlZXJBZGRCQVJlcUFjdGlvbihwQWQsRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBBRERCQV9SRVNQOgorCQkJUGVlckFkZEJBUnNwQWN0aW9uKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCQljYXNlIERFTEJBOgorCQkJUGVlckRlbEJBQWN0aW9uKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCX0KK30KKworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIFN0YVB1YmxpY0FjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBCc3MyMDQwQ29leGlzdCkKK3sKKwlCU1NfMjA0MF9DT0VYSVNUX0lFCQlCc3NDb2V4aXN0OworCU1MTUVfU0NBTl9SRVFfU1RSVUNUCQkJU2NhblJlcTsKKworCUJzc0NvZXhpc3Qud29yZCA9IEJzczIwNDBDb2V4aXN0OworCS8vIEFQIGFza3MgU3RhdGlvbiB0byByZXR1cm4gYSAyMC80MCBCU1MgQ29leGlzdGVuY2UgbWdtdCBmcmFtZS4gIFNvIHdlIGZpcnN0IHN0YXJ0cyBhIHNjYW4sIHRoZW4gc2VuZCBiYWNrIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBtZ210IGZyYW1lCisJaWYgKChCc3NDb2V4aXN0LmZpZWxkLkluZm9SZXEgPT0gMSkgJiYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0NBTl8yMDQwKSkpCisJeworCQkvLyBDbGVhciByZWNvcmQgZmlyc3QuICBBZnRlciBzY2FuICwgd2lsbCB1cGRhdGUgdGhvc2UgYml0IGFuZCBzZW5kIGJhY2sgdG8gdHJhbnNtaXRlci4KKwkJcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAuZmllbGQuSW5mb1JlcSA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkludG9sZXJhbnQ0MCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkJTUzIwV2lkdGhSZXEgPSAwOworCQkvLyBGaWxsIG91dCBzdHVmZiBmb3Igc2NhbiByZXF1ZXN0CisJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl8yMDQwX0JTU19DT0VYSVNUKTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKwl9Cit9CisKKworLyoKK0Rlc2NyaXB0aW9uIDogQnVpbGQgSW50b2xlcmFudCBDaGFubmVsIFJlcnBvdCBmcm9tIFRyaWdnZXIgZXZlbnQgdGFibGUuCityZXR1cm4gOiBob3cgbWFueSBieXRlcyBjb3BpZWQuCisqLworVUxPTkcgQnVpbGRJbnRvbGVyYW50Q2hhbm5lbFJlcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBQVUNIQVIgIHBEZXN0KQoreworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCVVMT05HCQkJUmVhZE9mZnNldCA9IDA7CisJVUNIQVIJCQlpOworCVVDSEFSCQkJTGFzdFJlZ0NsYXNzID0gMHhmZjsKKwlQVUNIQVIJCQlwTGVuOworCisJZm9yICggaSA9IDA7aSA8IE1BWF9UUklHR0VSX0VWRU5UO2krKykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLmJWYWxpZCA9PSBUUlVFKQorCQl7CisJCQlpZiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5SZWdDbGFzcyA9PSBMYXN0UmVnQ2xhc3MpCisJCQl7CisJCQkJKihwRGVzdCArIFJlYWRPZmZzZXQpID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uQ2hhbm5lbDsKKwkJCQkqcExlbisrOworCQkJCVJlYWRPZmZzZXQrKzsKKwkJCQlGcmFtZUxlbisrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSoocERlc3QgKyBSZWFkT2Zmc2V0KSA9IElFXzIwNDBfQlNTX0lOVE9MRVJBTlRfUkVQT1JUOyAgLy8gSUUKKwkJCQkqKHBEZXN0ICsgUmVhZE9mZnNldCArIDEpID0gMjsJLy8gTGVuID0gUmVnQ2xhc3MgYnl0ZSArIGNoYW5uZWwgYnl0ZS4KKwkJCQlwTGVuID0gcERlc3QgKyBSZWFkT2Zmc2V0ICsgMTsKKwkJCQlMYXN0UmVnQ2xhc3MgPSBwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLlJlZ0NsYXNzOworCQkJCSoocERlc3QgKyBSZWFkT2Zmc2V0ICsgMikgPSBMYXN0UmVnQ2xhc3M7CS8vIExlbiA9IFJlZ0NsYXNzIGJ5dGUgKyBjaGFubmVsIGJ5dGUuCisJCQkJKihwRGVzdCArIFJlYWRPZmZzZXQgKyAzKSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNoYW5uZWw7CisJCQkJRnJhbWVMZW4gKz0gNDsKKwkJCQlSZWFkT2Zmc2V0ICs9IDQ7CisJCQl9CisKKwkJfQorCX0KKwlyZXR1cm4gRnJhbWVMZW47Cit9CisKKworLyoKK0Rlc2NyaXB0aW9uIDogU2VuZCAyMC80MCBCU1MgQ29leGlzdGVuY2UgQWN0aW9uIGZyYW1lIElmIG9uZSB0cmlnZ2VyIGV2ZW50IGlzIHRyaWdnZXJlZC4KKyovCitWT0lEIFNlbmQyMDQwQ29leGlzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTglCT09MRUFOCWJBZGRJbnRvbGVyYW50Q2hhKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIAlOU3RhdHVzOworCUZSQU1FX0FDVElPTl9IRFIJRnJhbWU7CisJVUxPTkcJCQlGcmFtZUxlbjsKKwlVTE9ORwkJCUludG9sZXJhbnRDaGFSZXBMZW47CisKKwlJbnRvbGVyYW50Q2hhUmVwTGVuID0gMDsKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQUNUIC0gU2VuZDIwNDBDb2V4aXN0QWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKwlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9QVUJMSUM7CisJRnJhbWUuQWN0aW9uID0gQUNUSU9OX0JTU18yMDQwX0NPRVhJU1Q7CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJICBzaXplb2YoRlJBTUVfQUNUSU9OX0hEUiksCSAgJkZyYW1lLAorCQkJCSAgRU5EX09GX0FSR1MpOworCisJKihwT3V0QnVmZmVyICsgRnJhbWVMZW4pID0gcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAud29yZDsKKwlGcmFtZUxlbisrOworCisJaWYgKGJBZGRJbnRvbGVyYW50Q2hhID09IFRSVUUpCisJCUludG9sZXJhbnRDaGFSZXBMZW4gPSBCdWlsZEludG9sZXJhbnRDaGFubmVsUmVwKHBBZCwgcE91dEJ1ZmZlciArIEZyYW1lTGVuKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiArIEludG9sZXJhbnRDaGFSZXBMZW4pOworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQUNUIC0gU2VuZDIwNDBDb2V4aXN0QWN0aW9uKCBCU1NDb2V4aXN0MjA0MCA9IDB4JXggKSAgXG4iLCBwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkKSk7CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJQWZ0ZXIgc2NhbiwgVXBkYXRlIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBJRSBhbmQgc2VuZCBvdXQuCisJQWNjb3JkaW5nIHRvIDgwMi4xMW4gRDMuMDMgMTEuMTQuMTAKKworCVBhcmFtZXRlcnM6CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBVcGRhdGUyMDQwQ29leGlzdEZyYW1lQW5kTm90aWZ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOCUJPT0xFQU4JYkFkZEludG9sZXJhbnRDaGEpCit7CisJQlNTXzIwNDBfQ09FWElTVF9JRQlPbGRWYWx1ZTsKKworCU9sZFZhbHVlLndvcmQgPSBwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkOworCWlmICgocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QU5vID4gMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEJDb3VudERvd24gPiAwKSkKKwkJcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAuZmllbGQuQlNTMjBXaWR0aFJlcSA9IDE7CisKKwkvLyBOZWVkIHRvIGNoZWNrICEhISEKKwkvLyBIb3cgU1RBIHdpbGwgc2V0IEludG9sZXJhbnQ0MCBpZiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuIE5vdyB3ZSBkb24ndCBzZXQgdGhpcyBiaXQgZmlyc3QuISEhISEKKwkvLyBTbyBPbmx5IGNoZWNrIEJTUzIwV2lkdGhSZXEgY2hhbmdlLgorCWlmIChPbGRWYWx1ZS5maWVsZC5CU1MyMFdpZHRoUmVxICE9IHBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkJTUzIwV2lkdGhSZXEpCisJeworCQlTZW5kMjA0MENvZXhpc3RBY3Rpb24ocEFkLCBXY2lkLCBiQWRkSW50b2xlcmFudENoYSk7CisJfQorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK0JPT0xFQU4gQ2hhbm5lbFN3aXRjaFNhbml0eUNoZWNrKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOICAgIFVDSEFSICBOZXdDaGFubmVsLAorCUlOICAgIFVDSEFSICBTZWNvbmRhcnkpCit7CisJVUNIQVIJCWk7CisKKwlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKChOZXdDaGFubmVsID4gNykgJiYgKFNlY29uZGFyeSA9PSAxKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKChOZXdDaGFubmVsIDwgNSkgJiYgKFNlY29uZGFyeSA9PSAzKSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gMC4gQ2hlY2sgaWYgbmV3IGNoYW5uZWwgaXMgaW4gdGhlIGNoYW5uZWxsaXN0LgorCWZvciAoaSA9IDA7aSA8IHBBZC0+Q2hhbm5lbExpc3ROdW07aSsrKQorCXsKKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCA9PSBOZXdDaGFubmVsKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCisKK1ZPSUQgQ2hhbm5lbFN3aXRjaEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTiAgICBVQ0hBUiAgTmV3Q2hhbm5lbCwKKwlJTiAgICBVQ0hBUiAgU2Vjb25kYXJ5KQoreworCVVDSEFSCQlCQlBWYWx1ZSA9IDA7CisJVUxPTkcJCU1BQ1ZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTUEVDVFJVTSAtIENoYW5uZWxTd2l0Y2hBY3Rpb24oTmV3Q2hhbm5lbCA9ICVkICwgU2Vjb25kYXJ5ID0gJWQpICBcbiIsIE5ld0NoYW5uZWwsIFNlY29uZGFyeSkpOworCisJaWYgKENoYW5uZWxTd2l0Y2hTYW5pdHlDaGVjayhwQWQsIFdjaWQsIE5ld0NoYW5uZWwsIFNlY29uZGFyeSkgPT0gRkFMU0UpCisJCXJldHVybjsKKworCS8vIDEuICBTd2l0Y2hlcyB0byBCVyA9IDIwLgorCWlmIChTZWNvbmRhcnkgPT0gMCkKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJQkJQVmFsdWUmPSAofjB4MTgpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MDgpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTEpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQl9CisJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOworCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gTmV3Q2hhbm5lbDsKKwkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5IVFBoeU1vZGUuZmllbGQuQlcgPSAwOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEyME1IeiAgICEhISBcbiIgKSk7CisJfQorCS8vIDEuICBTd2l0Y2hlcyB0byBCVyA9IDQwIEFuZCBTdGF0aW9uIHN1cHBvcnRzIEJXID0gNDAuCisJZWxzZSBpZiAoKChTZWNvbmRhcnkgPT0gMSkgfHwgKFNlY29uZGFyeSA9PSAzKSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IDEpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisKKwkJaWYgKFNlY29uZGFyeSA9PSAxKQorCQl7CisJCQkvLyBTZWNvbmRhcnkgYWJvdmUuCisJCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJk1BQ1ZhbHVlKTsKKwkJCU1BQ1ZhbHVlICY9IDB4ZmU7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgTUFDVmFsdWUpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUmPSAofjB4MTgpOworCQkJQkJQVmFsdWV8PSAoMHgxMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlBWYWx1ZSk7CisJCQlCQlBWYWx1ZSY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBWYWx1ZSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISE0ME1IeiBMb3dlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgQmVsb3cuIENlbnRyYWwgPSAlZCBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gU2Vjb25kYXJ5IGJlbG93LgorCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZNQUNWYWx1ZSk7CisJCQlNQUNWYWx1ZSAmPSAweGZlOworCQkJTUFDVmFsdWUgfD0gMHgxOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIE1BQ1ZhbHVlKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlfD0gKDB4MTApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUmPSAofjB4MjApOworCQkJQkJQVmFsdWV8PSAoMHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBWYWx1ZSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISE0ME1IeiBVcHBlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgVXBwZXJDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwkJfQorCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uSFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwl9Cit9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIFBlZXJQdWJsaWNBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlVQ0hBUglBY3Rpb24gPSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsxXTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIEFDVElPTl9CU1NfMjA0MF9DT0VYSVNUOgkvLyBGb3JtYXQgZGVmaW5lZCBpbiBJRUVFIDcuNC43YS4xIGluIDExbiBEcmFmMy4wMworCQkJeworCQkJCS8vVUNIQVIJQnNzQ29leGlzdDsKKwkJCQlCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQJCSpwQ29leGlzdEluZm87CisJCQkJQlNTXzIwNDBfQ09FWElTVF9JRSAJCQkqcEJzc0NvZXhpc3RJZTsKKwkJCQlCU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVAkqcEludG9sZXJhbnRSZXBvcnQgPSBOVUxMOworCisJCQkJaWYgKEVsZW0tPk1zZ0xlbiA8PSAoTEVOR1RIXzgwMl8xMSArIHNpemVvZihCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQpKSApCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBQ1RJT04gLSAyMC80MCBCU1MgQ29leGlzdGVuY2UgTWFuYWdlbWVudCBGcmFtZSBsZW5ndGggdG9vIHNob3J0ISBsZW4gPSAlbGQhXG4iLCBFbGVtLT5Nc2dMZW4pKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFDVElPTiAtIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBNYW5hZ2VtZW50IGFjdGlvbi0tLS0+IFxuIikpOworCQkJCWhleF9kdW1wKCJDb2V4aXN0ZW5jZU1nbXRGcmFtZSIsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKTsKKworCisJCQkJcENvZXhpc3RJbmZvID0gKEJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCAqKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl07CisJCQkJLy9oZXhfZHVtcCgiQ29leGlzdEluZm8iLCAoUFVDSEFSKXBDb2V4aXN0SW5mbywgc2l6ZW9mKEJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCkpOworCQkJCWlmIChFbGVtLT5Nc2dMZW4gPj0gKExFTkdUSF84MDJfMTEgKyBzaXplb2YoQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UKSArIHNpemVvZihCU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVCkpKQorCQkJCXsKKwkJCQkJcEludG9sZXJhbnRSZXBvcnQgPSAoQlNTXzIwNDBfSU5UT0xFUkFOVF9DSF9SRVBPUlQgKikoKFBVQ0hBUilwQ29leGlzdEluZm8gKyBzaXplb2YoQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UKSk7CisJCQkJfQorCQkJCS8vaGV4X2R1bXAoIkludG9sZXJhbnRSZXBvcnQgIiwgKFBVQ0hBUilwSW50b2xlcmFudFJlcG9ydCwgc2l6ZW9mKEJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUKSk7CisKKwkJCQlwQnNzQ29leGlzdEllID0gKEJTU18yMDQwX0NPRVhJU1RfSUUgKikoJnBDb2V4aXN0SW5mby0+QnNzQ29leGlzdEllKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCQkJeworCQkJCQkJU3RhUHVibGljQWN0aW9uKHBBZCwgcENvZXhpc3RJbmZvKTsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJfQorCQkJYnJlYWs7CisJfQorCisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCit9CisKKworc3RhdGljIFZPSUQgUmVzZXJ2ZWRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSIENhdGVnb3J5OworCisJaWYgKEVsZW0tPk1zZ0xlbiA8PSBMRU5HVEhfODAyXzExKQorCXsKKwkJcmV0dXJuOworCX0KKworCUNhdGVnb3J5ID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTFdOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUmN2IHJlc2VydmVkIGNhdGVnb3J5KCVkKSBBY3Rpb24gRnJhbWVcbiIsIENhdGVnb3J5KSk7CisJaGV4X2R1bXAoIlJlc2VydmVkIEFjdGlvbiBGcmFtZSIsICZFbGVtLT5Nc2dbMF0sIEVsZW0tPk1zZ0xlbik7Cit9CisKK1ZPSUQgUGVlclJNQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCXJldHVybjsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorc3RhdGljIFZPSUQgcmVzcG9uZF9odF9pbmZvcm1hdGlvbl9leGNoYW5nZV9hY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCVVMT05HCQkJRnJhbWVMZW47CisJRlJBTUVfSFRfSU5GTwlIVElORk9mcmFtZSwgKnBGcmFtZTsKKwlVQ0hBUiAgIAkJKnBBZGRyOworCisKKwkvLyAyLiBBbHdheXMgc2VuZCBiYWNrIEFEREJBIFJlc3BvbnNlCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKworCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIHJlc3BvbmRfaHRfaW5mb3JtYXRpb25fZXhjaGFuZ2VfYWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGdldCBSQQorCXBGcmFtZSA9IChGUkFNRV9IVF9JTkZPICopICZFbGVtLT5Nc2dbMF07CisJcEFkZHIgPSBwRnJhbWUtPkhkci5BZGRyMjsKKworCU5kaXNaZXJvTWVtb3J5KCZIVElORk9mcmFtZSwgc2l6ZW9mKEZSQU1FX0hUX0lORk8pKTsKKwkvLyAyLTEuIFByZXBhcmUgQUREQkEgUmVzcG9uc2UgZnJhbWUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChBREhPQ19PTihwQWQpKQorCQkJQWN0SGVhZGVySW5pdChwQWQsICZIVElORk9mcmFtZS5IZHIsIHBBZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCWVsc2UKKwkJCUFjdEhlYWRlckluaXQocEFkLCAmSFRJTkZPZnJhbWUuSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkZHIpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUhUSU5GT2ZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfSFQ7CisJSFRJTkZPZnJhbWUuQWN0aW9uID0gSFRfSU5GT19FWENIQU5HRTsKKwlIVElORk9mcmFtZS5IVF9JbmZvLlJlcXVlc3QgPSAwOworCUhUSU5GT2ZyYW1lLkhUX0luZm8uRm9ydHlfTUh6X0ludG9sZXJhbnQgPSBwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkZvcnR5X01oel9JbnRvbGVyYW50OworCUhUSU5GT2ZyYW1lLkhUX0luZm8uU1RBX0NoYW5uZWxfV2lkdGgJID0gcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJCSZGcmFtZUxlbiwKKwkJCQkJICBzaXplb2YoRlJBTUVfSFRfSU5GTyksCSZIVElORk9mcmFtZSwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Cit9CisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgU2VuZE5vdGlmeUJXQWN0aW9uRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgIFdjaWQsCisJSU4gVUNIQVIgYXBpZHgpCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgCU5TdGF0dXM7CisJRlJBTUVfQUNUSU9OX0hEUglGcmFtZTsKKwlVTE9ORwkJCUZyYW1lTGVuOworCVBVQ0hBUgkJCXBBZGRyMTsKKworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFDVCAtIFNlbmROb3RpZnlCV0FjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoV2NpZCA9PSBNQ0FTVF9XQ0lEKQorCQlwQWRkcjEgPSAmQlJPQURDQVNUX0FERFJbMF07CisJZWxzZQorCQlwQWRkcjEgPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHI7CisJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsIHBBZGRyMSwgcEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLkJzc2lkLCBwQWQtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uQnNzaWQpOworCisJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9IVDsKKwlGcmFtZS5BY3Rpb24gPSBOT1RJRllfQldfQUNUSU9OOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCSAgc2l6ZW9mKEZSQU1FX0FDVElPTl9IRFIpLAkgICZGcmFtZSwKKwkJCQkgIEVORF9PRl9BUkdTKTsKKworCSoocE91dEJ1ZmZlciArIEZyYW1lTGVuKSA9IHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aDsKKwlGcmFtZUxlbisrOworCisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUIC0gU2VuZE5vdGlmeUJXQWN0aW9uKE5vdGlmeUJXPSAlZCkhXG4iLCBwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGgpKTsKKworfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworCitWT0lEIFBlZXJIVEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMV07CisKKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisJc3dpdGNoKEFjdGlvbikKKwl7CisJCWNhc2UgTk9USUZZX0JXX0FDVElPTjoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUSU9OIC0gSFQgTm90aWZ5IENoYW5uZWwgYmFuZHdpZHRoIGFjdGlvbi0tLS0+IFxuIikpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJaWYocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPT0gRkFMU0UpCisJCQl7CisJCQkJLy8gTm90ZSwgdGhpcyBpcyB0byBwYXRjaCBESVItMTM1MyBBUC4gV2hlbiB0aGUgQVAgc2V0IHRvIFdlcCwgaXQgd2lsbCB1c2UgbGVnYWN5IG1vZGUuIEJ1dCBBUCBzdGlsbCBrZWVwcworCQkJCS8vIHNlbmRpbmcgQldfTm90aWZ5IEFjdGlvbiBmcmFtZSwgYW5kIGNhdXNlIHVzIHRvIGxpbmt1cCBhbmQgbGlua2Rvd24uCisJCQkJLy8gSW4gbGVnYWN5IG1vZGUsIGRvbid0IG5lZWQgdG8gcGFyc2UgSFQgYWN0aW9uIGZyYW1lLgorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUSU9OIC1JZ25vcmUgSFQgTm90aWZ5IENoYW5uZWwgQlcgd2hlbiBsaW5rIGFzIGxlZ2FjeSBtb2RlLiBCVyA9ICVkLS0tPiBcbiIsCisJCQkJCQkJCUVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdICkpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQlpZiAoRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl0gPT0gMCkJLy8gNy40LjguMi4gaWYgdmFsdWUgaXMgMSwga2VlcCB0aGUgc2FtZSBhcyBzdXBwb3J0ZWQgY2hhbm5lbCBiYW5kd2lkdGguCisJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5IVFBoeU1vZGUuZmllbGQuQlcgPSAwOworCisJCQlicmVhazsKKworCQljYXNlIFNNUFNfQUNUSU9OOgorCQkJLy8gNy4zLjEuMjUKKyAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIFNNUFMgYWN0aW9uLS0tLT4gXG4iKSk7CisJCQlpZiAoKChFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsyXSYweDEpID09IDApKQorCQkJeworCQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uTW1wc01vZGUgPSBNTVBTX0VOQUJMRTsKKwkJCX0KKwkJCWVsc2UgaWYgKCgoRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl0mMHgyKSA9PSAwKSkKKwkJCXsKKwkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLk1tcHNNb2RlID0gTU1QU19TVEFUSUM7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSA9IE1NUFNfRFlOQU1JQzsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBaWQoJWQpIE1JTU8gUFMgPSAlZFxuIiwgRWxlbS0+V2NpZCwgcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSkpOworCQkJLy8gcnQyODYwYyA6IGFkZCBzb21ldGhpbmcgZm9yIHNtcHMgY2hhbmdlLgorCQkJYnJlYWs7CisKKwkJY2FzZSBTRVRQQ09fQUNUSU9OOgorCQkJYnJlYWs7CisKKwkJY2FzZSBNSU1PX0NIQV9NRUFTVVJFX0FDVElPTjoKKwkJCWJyZWFrOworCisJCWNhc2UgSFRfSU5GT19FWENIQU5HRToKKwkJCXsKKwkJCQlIVF9JTkZPUk1BVElPTl9PQ1RFVAkqcEhUX2luZm87CisKKwkJCQlwSFRfaW5mbyA9IChIVF9JTkZPUk1BVElPTl9PQ1RFVCAqKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl07CisgICAgCQkJCS8vIDcuNC44LjEwCisgICAgCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUSU9OIC0gSFQgSW5mb3JtYXRpb24gRXhjaGFuZ2UgYWN0aW9uLS0tLT4gXG4iKSk7CisgICAgCQkJCWlmIChwSFRfaW5mby0+UmVxdWVzdCkKKyAgICAJCQkJeworICAgIAkJCQkJcmVzcG9uZF9odF9pbmZvcm1hdGlvbl9leGNoYW5nZV9hY3Rpb24ocEFkLCBFbGVtKTsKKyAgICAJCQkJfQorCQkJfQorICAgIAkJCWJyZWFrOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVJldHJ5IHNlbmRpbmcgQUREQkEgUmVxZXN0LgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlQYXJhbWV0cnM6CisJcDgwMjNIZWFkZXI6IGlmIHRoaXMgaXMgYWxyZWFkeSA4MDIuMyBmb3JtYXQsIHA4MDIzSGVhZGVyIGlzIE5VTEwKKworCVJldHVybgk6IFRSVUUgaWYgcHV0IGludG8gcnggcmVvcmRlcmluZyBidWZmZXIsIHNob3VsZG4ndCBpbmRpY2F0ZXJ4aGVyZS4KKwkJCQlGQUxTRSAsIHRoZW4gY29udGludWUgaW5kaWNhdGVyeCBhdCB0aGlzIG1vbWVudC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE9SSUJBVGltZXJUaW1lb3V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5OworCUlOVAkJCWksIHRvdGFsOworLy8JRlJBTUVfQkFSCQkJRnJhbWVCYXI7CisvLwlVTE9ORwkJCUZyYW1lTGVuOworLy8JTkRJU19TVEFUVVMgCU5TdGF0dXM7CisvLwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKy8vCVVTSE9SVAkJCVNlcXVlbmNlOworCVVDSEFSCQkJVElEOworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCXRvdGFsID0gcEFkLT5NYWNUYWIuU2l6ZSAqIE5VTV9PRl9USUQ7CisKKwlmb3IgKGkgPSAxOyAoKGkgPE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFKSAmJiAodG90YWwgPiAwKSkgOyBpKyspCisJeworCQlpZiAgKHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpXS5XY2lkXTsKKwkJCVRJRCA9IHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLlRJRDsKKworCQkJQVNTRVJUKHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLldjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSk7CisJCX0KKwkJdG90YWwgLS07CisJfQorfQorCisKK1ZPSUQgU2VuZFJlZnJlc2hCQVIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnkpCit7CisJRlJBTUVfQkFSCQlGcmFtZUJhcjsKKwlVTE9ORwkJCUZyYW1lTGVuOworCU5ESVNfU1RBVFVTIAlOU3RhdHVzOworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVVTSE9SVAkJCVNlcXVlbmNlOworCVVDSEFSCQkJaSwgVElEOworCVVTSE9SVAkJCWlkeDsKKwlCQV9PUklfRU5UUlkJKnBCQUVudHJ5OworCisJZm9yIChpID0gMDsgaSA8TlVNX09GX1RJRDsgaSsrKQorCXsKKwkJaWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtpXTsKKwkJaWYgKGlkeCA9PSAwKQorCQl7CisJCQljb250aW51ZTsKKwkJfQorCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpZHhdOworCisJCWlmICAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCQlUSUQgPSBwQkFFbnRyeS0+VElEOworCisJCQlBU1NFUlQocEJBRW50cnktPldjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSk7CisKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlTZXF1ZW5jZSA9IHBFbnRyeS0+VHhTZXFbVElEXTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCUJhckhlYWRlckluaXQocEFkLCAmRnJhbWVCYXIsIHBFbnRyeS0+QWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLkZyYWdOdW0gPSAwOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jdGlvbi4KKwkJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gU2VxdWVuY2U7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQkJRnJhbWVCYXIuQmFyQ29udHJvbC5USUQgPSBUSUQ7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCQkJICBzaXplb2YoRlJBTUVfQkFSKSwJICAmRnJhbWVCYXIsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkvL2lmICghKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpKSkKKwkJCWlmICgxKQkvLyBOb3cgd2UgYWx3YXlzIHNlbmQgQkFSLgorCQkJeworCQkJCS8vTWluaXBvcnRNTVJlcXVlc3RVbmxvY2socEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCQkvL01pbmlwb3J0RGF0YU1NUmVxdWVzdChwQWQsIE1hcFVzZXJQcmlvcml0eVRvQWNjZXNzQ2F0ZWdvcnlbVElEXSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQkJfQorCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJfQorCX0KK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBBY3RIZWFkZXJJbml0KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gUFVDSEFSIEFkZHIxLAorICAgIElOIFBVQ0hBUiBBZGRyMiwKKyAgICBJTiBQVUNIQVIgQWRkcjMpCit7CisgICAgTmRpc1plcm9NZW1vcnkocEhkcjgwMjExLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworICAgIHBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7CisgICAgcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9BQ1RJT047CisKKyAgICBDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIEFkZHIxKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjIsIEFkZHIyKTsKKyAgICBDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIEFkZHIzKTsKK30KKworVk9JRCBCYXJIZWFkZXJJbml0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE9VVCBQRlJBTUVfQkFSIHBDbnRsQmFyLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gUFVDSEFSIHBTQSkKK3sKKy8vCVVTSE9SVAlEdXJhdGlvbjsKKworCU5kaXNaZXJvTWVtb3J5KHBDbnRsQmFyLCBzaXplb2YoRlJBTUVfQkFSKSk7CisJcENudGxCYXItPkZDLlR5cGUgPSBCVFlQRV9DTlRMOworCXBDbnRsQmFyLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9CTE9DS19BQ0tfUkVROworICAgCXBDbnRsQmFyLT5CYXJDb250cm9sLk1USUQgPSAwOworCXBDbnRsQmFyLT5CYXJDb250cm9sLkNvbXByZXNzZWQgPSAxOworCXBDbnRsQmFyLT5CYXJDb250cm9sLkFDS1BvbGljeSA9IDA7CisKKworCXBDbnRsQmFyLT5EdXJhdGlvbiA9IDE2ICsgUlRNUENhbGNEdXJhdGlvbihwQWQsIFJBVEVfMSwgc2l6ZW9mKEZSQU1FX0JBKSk7CisKKwlDT1BZX01BQ19BRERSKHBDbnRsQmFyLT5BZGRyMSwgcERBKTsKKwlDT1BZX01BQ19BRERSKHBDbnRsQmFyLT5BZGRyMiwgcFNBKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBDYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUgaW50byB0aGUgYWN0aW9uIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCQkzLiBjYXRlZ29yeSBjb2RlIG9mIHRoZSBmcmFtZS4KKwkJNC4gYWN0aW9uIGNvZGUgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEluc2VydEFjdEZpZWxkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFVJTlQ4IENhdGVnb3J5LAorCUlOIFVJTlQ4IEFjdENvZGUpCit7CisJVUxPTkcgVGVtcExlbjsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKAlwRnJhbWVCdWYsCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCSZDYXRlZ29yeSwKKwkJCQkJCTEsCQkJCSZBY3RDb2RlLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYmFfYWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9iYV9hY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UxZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYmFfYWN0aW9uLmMKQEAgLTAsMCArMSwxODEwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisKKworI2RlZmluZSBCQV9PUklfSU5JVF9TRVEJCShwRW50cnktPlR4U2VxW1RJRF0pIC8vMQkJCS8vIGluaXRhbCBzZXF1ZW5jZSBudW1iZXIgb2YgQkEgc2Vzc2lvbgorCisjZGVmaW5lIE9SSV9TRVNTSU9OX01BWF9SRVRSWQk4CisjZGVmaW5lIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQJKDIwMDApCS8vIG1zCisjZGVmaW5lIFJFQ19CQV9TRVNTSU9OX0lETEVfVElNRU9VVAkoMTAwMCkJLy8gbXMKKworI2RlZmluZSBSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCQkoKDEwMCAqIEhaKS8xMDAwKQkvLyBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zCisjZGVmaW5lIE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCSgoMzAwMCAqIEhaKS8xMDAwKQkvLyBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zCisKKyNkZWZpbmUgUkVTRVRfUkNWX1NFUQkJKDB4RkZGRikKKworc3RhdGljIHZvaWQgYmFfbXBkdV9ibGtfZnJlZShQUlRNUF9BREFQVEVSIHBBZCwgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGspOworCisKK0JBX09SSV9FTlRSWSAqQkFUYWJsZUFsbG9jT3JpRW50cnkoCisJCQkJCQkJCSAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkJCSAgT1VUIFVTSE9SVCAgICAgICAgICAqSWR4KTsKKworQkFfUkVDX0VOVFJZICpCQVRhYmxlQWxsb2NSZWNFbnRyeSgKKwkJCQkJCQkJICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCQkJICBPVVQgVVNIT1JUICAgICAgICAgICpJZHgpOworCitWT0lEIEJBT3JpU2Vzc2lvblNldHVwVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKKworQlVJTERfVElNRVJfRlVOQ1RJT04oQkFPcmlTZXNzaW9uU2V0dXBUaW1lb3V0KTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KTsKKworI2RlZmluZSBBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChfcEFkLCBfbXBkdV9ibGspCVwKKwkJCUFubm91bmNlX1Jlb3JkZXJpbmdfUGFja2V0KF9wQWQsIF9tcGR1X2Jsayk7CisKK1ZPSUQgQkFfTWF4V2luU2l6ZVJlYXNpZ24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5UGVlciwKKwlPVVQgVUNIQVIJCQkqcFdpblNpemUpCit7CisJVUNIQVIgTWF4U2l6ZTsKKworCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4M19WRVJTSU9OKSAvLyAzKjMKKwl7CisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPj0gUkFMSU5LXzMwNzBfVkVSU0lPTikKKwkJeworCQkJaWYgKHBFbnRyeVBlZXItPldlcFN0YXR1cyAhPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQorCQkJCU1heFNpemUgPSA3OyAvLyBmb3Igbm9uLW9wZW4gbW9kZQorCQkJZWxzZQorCQkJCU1heFNpemUgPSAxMzsKKwkJfQorCQllbHNlCisJCQlNYXhTaXplID0gMzE7CisJfQorCWVsc2UgaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4MEVfVkVSU0lPTikgLy8gMjg4MCBlCisJeworCQlpZiAocEVudHJ5UGVlci0+V2VwU3RhdHVzICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCisJCQlNYXhTaXplID0gNzsgLy8gZm9yIG5vbi1vcGVuIG1vZGUKKwkJZWxzZQorCQkJTWF4U2l6ZSA9IDEzOworCX0KKwllbHNlCisJCU1heFNpemUgPSA3OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYmE+IFdpbiBTaXplID0gJWQsIE1heCBTaXplID0gJWRcbiIsCisJCQkqcFdpblNpemUsIE1heFNpemUpKTsKKworCWlmICgoKnBXaW5TaXplKSA+IE1heFNpemUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJiYT4gcmVhc3NpZ24gbWF4IHdpbiBzaXplIGZyb20gJWQgdG8gJWRcbiIsCisJCQkJKnBXaW5TaXplLCBNYXhTaXplKSk7CisKKwkJKnBXaW5TaXplID0gTWF4U2l6ZTsKKwl9Cit9CisKK3ZvaWQgQW5ub3VuY2VfUmVvcmRlcmluZ19QYWNrZXQoSU4gUFJUTVBfQURBUFRFUgkJCXBBZCwKKwkJCQkJCQkJSU4gc3RydWN0IHJlb3JkZXJpbmdfbXBkdQkqbXBkdSkKK3sKKwlQTkRJU19QQUNLRVQgICAgcFBhY2tldDsKKworCXBQYWNrZXQgPSBtcGR1LT5wUGFja2V0OworCisJaWYgKG1wZHUtPmJBTVNEVSkKKwl7CisJCUFTU0VSVCgwKTsKKwkJQkFfUmVvcmRlcl9BTVNEVV9Bbm5ub3VuY2UocEFkLCBwUGFja2V0KTsKKwl9CisJZWxzZQorCXsKKwkJLy8KKwkJLy8gcGFzcyB0aGlzIDgwMi4zIHBhY2tldCB0byB1cHBlciBsYXllciBvciBmb3J3YXJkIHRoaXMgcGFja2V0IHRvIFdNIGRpcmVjdGx5CisJCS8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcFBhY2tldCwgUlRNUF9HRVRfUEFDS0VUX0lGKHBQYWNrZXQpKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9Cit9CisKKy8qCisgKiBJbnNlcnQgYSByZW9yZGVyaW5nIG1wZHUgaW50byBzb3J0ZWQgbGlua2VkIGxpc3QgYnkgc2VxdWVuY2Ugbm8uCisgKi8KK0JPT0xFQU4gYmFfcmVvcmRlcmluZ19tcGR1X2luc2VydHNvcnRlZChzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0LCBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1KQoreworCisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqKnBwU2NhbiA9ICZsaXN0LT5uZXh0OworCisJd2hpbGUgKCpwcFNjYW4gIT0gTlVMTCkKKwl7CisJCWlmIChTRVFfU01BTExFUigoKnBwU2NhbiktPlNlcXVlbmNlLCBtcGR1LT5TZXF1ZW5jZSwgTUFYU0VRKSkKKwkJeworCQkJcHBTY2FuID0gJigqcHBTY2FuKS0+bmV4dDsKKwkJfQorCQllbHNlIGlmICgoKnBwU2NhbiktPlNlcXVlbmNlID09IG1wZHUtPlNlcXVlbmNlKQorCQl7CisJCQkvKiBnaXZlIHVwIHRoaXMgZHVwbGljYXRlZCBmcmFtZSAqLworCQkJcmV0dXJuKEZBTFNFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGZpbmQgcG9zaXRpb24gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJbXBkdS0+bmV4dCA9ICpwcFNjYW47CisJKnBwU2NhbiA9IG1wZHU7CisJbGlzdC0+cWxlbisrOworCXJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBjYWxsZXIgbG9jayBjcml0aWNhbCBzZWN0aW9uIGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYmFfZW5xdWV1ZShzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0LCBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsaykKK3sKKwlsaXN0LT5xbGVuKys7CisJbXBkdV9ibGstPm5leHQgPSBsaXN0LT5uZXh0OworCWxpc3QtPm5leHQgPSBtcGR1X2JsazsKK30KKworLyoKKyAqIGNhbGxlciBsb2NrIGNyaXRpY2FsIHNlY3Rpb24gaWYgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqIGJhX2RlcXVldWUoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsayA9IE5VTEw7CisKKwlBU1NFUlQobGlzdCk7CisKKwkJaWYgKGxpc3QtPnFsZW4pCisJCXsKKwkJCWxpc3QtPnFsZW4tLTsKKwkJCW1wZHVfYmxrID0gbGlzdC0+bmV4dDsKKwkJCWlmIChtcGR1X2JsaykKKwkJCXsKKwkJCQlsaXN0LT5uZXh0ID0gbXBkdV9ibGstPm5leHQ7CisJCQkJbXBkdV9ibGstPm5leHQgPSBOVUxMOworCQkJfQorCQl9CisJcmV0dXJuIG1wZHVfYmxrOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAgKmJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKHN0cnVjdCByZW9yZGVyaW5nX2xpc3QgKmxpc3QpCit7CisJcmV0dXJuKGJhX2RlcXVldWUobGlzdCkpOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAgKmJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZShzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0KQorCXsKKwlBU1NFUlQobGlzdCk7CisKKwkJcmV0dXJuKGxpc3QtPm5leHQpOworCX0KKworCisvKgorICogZnJlZSBhbGwgcmVzb3VyY2UgZm9yIHJlb3JkZXJpbmcgbWVjaGFuaXNtCisgKi8KK3ZvaWQgYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJBX1RBQkxFICAgICAgICAqVGFiOworCVBCQV9SRUNfRU5UUlkgICBwQkFFbnRyeTsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlpbnQgaTsKKworCVRhYiA9ICZwQWQtPkJBVGFibGU7CisKKwkvKiBJLiAgcmVsZWFzZSBhbGwgcGVuZGluZyByZW9yZGVyaW5nIHBhY2tldCAqLworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IGkrKykKKwl7CisJCXBCQUVudHJ5ID0gJlRhYi0+QkFSZWNFbnRyeVtpXTsKKwkJaWYgKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzICE9IFJlY2lwaWVudF9OT05FKQorCQl7CisJCQl3aGlsZSAoKG1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KSkpCisJCQl7CisJCQkJQVNTRVJUKG1wZHVfYmxrLT5wUGFja2V0KTsKKwkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgbXBkdV9ibGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisJCQl9CisJCX0KKwl9CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCisJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7CisJLyogSUkuIGZyZWUgbWVtb3J5IG9mIHJlb3JkZXJpbmcgbXBkdSB0YWJsZSAqLworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKwlvc19mcmVlX21lbShwQWQsIHBBZC0+bXBkdV9ibGtfcG9vbC5tZW0pOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKK30KKworCisKKy8qCisgKiBBbGxvY2F0ZSBhbGwgcmVzb3VyY2UgZm9yIHJlb3JkZXJpbmcgbWVjaGFuaXNtCisgKi8KK0JPT0xFQU4gYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9pbml0KFBSVE1QX0FEQVBURVIgcEFkLCBpbnQgbnVtKQoreworCWludCAgICAgaTsKKwlQVUNIQVIgIG1lbTsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpmcmVlbGlzdDsKKworCS8qIGFsbG9jYXRlIHNwaW5sb2NrICovCisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKworCS8qIGluaXRpYWxpemUgZnJlZWxpc3QgKi8KKwlmcmVlbGlzdCA9ICZwQWQtPm1wZHVfYmxrX3Bvb2wuZnJlZWxpc3Q7CisJZnJlZWxpc3QtPm5leHQgPSBOVUxMOworCWZyZWVsaXN0LT5xbGVuID0gMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFsbG9jYXRlICVkIG1lbW9yeSBmb3IgQkEgcmVvcmRlcmluZ1xuIiwgKFVJTlQzMikobnVtKnNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KSkpKTsKKworCS8qIGFsbG9jYXRlIG51bWJlciBvZiBtcGR1X2JsayBtZW1vcnkgKi8KKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1lbSwgKG51bSpzaXplb2Yoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSkpKTsKKworCXBBZC0+bXBkdV9ibGtfcG9vbC5tZW0gPSBtZW07CisKKwlpZiAobWVtID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDYW4ndCBBbGxvY2F0ZSBNZW1vcnkgZm9yIEJBIFJlb3JkZXJpbmdcbiIpKTsKKwkJcmV0dXJuKEZBTFNFKTsKKwl9CisKKwkvKiBidWlsZCBtcGR1X2JsayBmcmVlIGxpc3QgKi8KKwlmb3IgKGk9MDsgaTxudW07IGkrKykKKwl7CisJCS8qIGdldCBtcGR1X2JsayAqLworCQltcGR1X2JsayA9IChzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICopIG1lbTsKKwkJLyogaW5pdGlhbCBtcGR1X2JsayAqLworCQlOZGlzWmVyb01lbW9yeShtcGR1X2Jsaywgc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpKTsKKwkJLyogbmV4dCBtcGR1X2JsayAqLworCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpOworCQkvKiBpbnNlcnQgbXBkdV9ibGsgaW50byBmcmVlbGlzdCAqLworCQliYV9lbnF1ZXVlKGZyZWVsaXN0LCBtcGR1X2Jsayk7CisJfQorCisJcmV0dXJuKFRSVUUpOworfQorCisvL3N0YXRpYyBpbnQgYmxrX2NvdW50PTA7IC8vIHNhbXBsZSB0YWtlIG9mZiwgbm8gdXNlCisKK3N0YXRpYyBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpiYV9tcGR1X2Jsa19hbGxvYyhQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKwltcGR1X2JsayA9IGJhX2RlcXVldWUoJnBBZC0+bXBkdV9ibGtfcG9vbC5mcmVlbGlzdCk7CisJaWYgKG1wZHVfYmxrKQorCXsKKy8vCQlibGtfY291bnQrKzsKKwkJLyogcmVzZXQgbXBkdV9ibGsgKi8KKwkJTmRpc1plcm9NZW1vcnkobXBkdV9ibGssIHNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KSk7CisJfQorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKwlyZXR1cm4gbXBkdV9ibGs7Cit9CisKK3N0YXRpYyB2b2lkIGJhX21wZHVfYmxrX2ZyZWUoUFJUTVBfQURBUFRFUiBwQWQsIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrKQoreworCUFTU0VSVChtcGR1X2Jsayk7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7CisvLwlibGtfY291bnQtLTsKKwliYV9lbnF1ZXVlKCZwQWQtPm1wZHVfYmxrX3Bvb2wuZnJlZWxpc3QsIG1wZHVfYmxrKTsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7Cit9CisKKworc3RhdGljIFVTSE9SVCBiYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2luX29yZGVyKAorCQkJCQkJCQkJCQkJICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQkJCQkJCQkJCQkgICBJTiBQQkFfUkVDX0VOVFJZICAgIHBCQUVudHJ5LAorCQkJCQkJCQkJCQkJICAgSU4gVVNIT1JUICAgICAgICAgICBTdGFydFNlcSkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlVU0hPUlQgIExhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisKKwl3aGlsZSAoKG1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X3Byb2JlKCZwQkFFbnRyeS0+bGlzdCkpKQorCQl7CisJCQkvKiBmaW5kIGluLW9yZGVyIGZyYW1lICovCisJCWlmICghU0VRX1NURVBPTkUobXBkdV9ibGstPlNlcXVlbmNlLCBTdGFydFNlcSwgTUFYU0VRKSkKKwkJCXsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGRlcXVldWUgaW4tb3JkZXIgZnJhbWUgZnJvbSByZW9kZXJpbmcgbGlzdCAqLworCQkJbXBkdV9ibGsgPSBiYV9yZW9yZGVyaW5nX21wZHVfZGVxdWV1ZSgmcEJBRW50cnktPmxpc3QpOworCQkJLyogcGFzcyB0aGlzIGZyYW1lIHVwICovCisJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOworCQkvKiBtb3ZlIHRvIG5leHQgc2VxdWVuY2UgKi8KKwkJCVN0YXJ0U2VxID0gbXBkdV9ibGstPlNlcXVlbmNlOworCQlMYXN0SW5kU2VxID0gU3RhcnRTZXE7CisJCS8qIGZyZWUgbXBkdV9ibGsgKi8KKwkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisJfQorCisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisKKwkvKiB1cGRhdGUgbGFzdCBpbmRpY2F0ZWQgc2VxdWVuY2UgKi8KKwlyZXR1cm4gTGFzdEluZFNlcTsKK30KKworc3RhdGljIHZvaWQgYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEoCisJCQkJCQkJCQkJCSAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJCQkgICBJTiBQQkFfUkVDX0VOVFJZICAgIHBCQUVudHJ5LAorCQkJCQkJCQkJCQkgICBJTiBVU0hPUlQgICAgICAgICAgIFNlcXVlbmNlKQoreworCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisJd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZSgmcEJBRW50cnktPmxpc3QpKSkKKwkJeworCQkJLyogZmluZCBpbi1vcmRlciBmcmFtZSAqLworCQlpZiAoKG1wZHVfYmxrLT5TZXF1ZW5jZSA9PSBTZXF1ZW5jZSkgfHwgU0VRX1NNQUxMRVIobXBkdV9ibGstPlNlcXVlbmNlLCBTZXF1ZW5jZSwgTUFYU0VRKSkKKwkJeworCQkJLyogZGVxdWV1ZSBpbi1vcmRlciBmcmFtZSBmcm9tIHJlb2RlcmluZyBsaXN0ICovCisJCQltcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKCZwQkFFbnRyeS0+bGlzdCk7CisJCQkvKiBwYXNzIHRoaXMgZnJhbWUgdXAgKi8KKwkJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOworCQkJLyogZnJlZSBtcGR1X2JsayAqLworCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKKwkJfQorCQllbHNlCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworfQorCisKK3N0YXRpYyB2b2lkIGJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cygKKwkJCQkJCQkJCSAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJICAgUEJBX1JFQ19FTlRSWSAgICAgICBwQkFFbnRyeSkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCisJCQkvKiBkZXF1ZXVlIGluLW9yZGVyIGZyYW1lIGZyb20gcmVvZGVyaW5nIGxpc3QgKi8KKwl3aGlsZSAoKG1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KSkpCisJeworCQkJLyogcGFzcyB0aGlzIGZyYW1lIHVwICovCisJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOworCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gbXBkdV9ibGstPlNlcXVlbmNlOworCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKKworCQkvKiB1cGRhdGUgbGFzdCBpbmRpY2F0ZWQgc2VxdWVuY2UgKi8KKwl9CisJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7CisJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworfQorCisKKy8vc3RhdGljCit2b2lkIGJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cygKKwkJCQkJCQkJCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJSU4gUEJBX1JFQ19FTlRSWSAgICBwQkFFbnRyeSwKKwkJCQkJCQkJCUlOIFVMT05HICAgICAgICAgICAgTm93MzIpCisKK3sKKwlVU0hPUlQgU2VxdWVuY2U7CisKKy8vCWlmICgoUlRNUF9USU1FX0FGVEVSKCh1bnNpZ25lZCBsb25nKU5vdzMyLCAodW5zaWduZWQgbG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyK1JFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQpKSAmJgorLy8JCSAocEJBRW50cnktPmxpc3QucWxlbiA+ICgocEJBRW50cnktPkJBV2luU2l6ZSo3KS84KSkpIC8vfHwKKy8vCQkoUlRNUF9USU1FX0FGVEVSKCh1bnNpZ25lZCBsb25nKU5vdzMyLCAodW5zaWduZWQgbG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKygxMCpSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUKSkpICYmCisvLwkJIChwQkFFbnRyeS0+bGlzdC5xbGVuID4gKHBCQUVudHJ5LT5CQVdpblNpemUvOCkpKQorCWlmIChSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIrKE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VULzYpKSkKKwkJICYmKHBCQUVudHJ5LT5saXN0LnFsZW4gPiAxKQorCQkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoInRpbWVvdXRbJWRdICglMDhseC0lMDhseCA9ICVkID4gJWQpOiAleCwgZmx1c2ggYWxsIVxuICIsIHBCQUVudHJ5LT5saXN0LnFsZW4sIE5vdzMyLCAocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSwKKwkJCSAgIChpbnQpKChsb25nKSBOb3czMiAtIChsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIpKSwgTUFYX1JFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQsCisJCQkgICBwQkFFbnRyeS0+TGFzdEluZFNlcSkpOworCQliYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOworCX0KKwllbHNlCisJaWYgKFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcisoUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVCkpKQorCQkmJiAocEJBRW50cnktPmxpc3QucWxlbiA+IDApCisJICAgKQorCQl7CisvLwkJcHJpbnRrKCJ0aW1lb3V0WyVkXSAoJWx4LSVseCA9ICVkID4gJWQpOiAleCwgIiwgcEJBRW50cnktPmxpc3QucWxlbiwgTm93MzIsIChwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIpLAorLy8JCQkgICAoaW50KSgobG9uZykgTm93MzIgLSAobG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSksIFJFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQsCisvLwkJCSAgIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKyAgICAJCS8vCisJCS8vIGZvcmNlIExhc3RJbmRTZXEgdG8gc2hpZnQgdG8gTGFzdEluZFNlcSsxCisgICAgCQkvLworICAgIAkJU2VxdWVuY2UgPSAocEJBRW50cnktPkxhc3RJbmRTZXErMSkgJiBNQVhTRVE7CisgICAgCQliYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2xlX3NlcShwQWQsIHBCQUVudHJ5LCBTZXF1ZW5jZSk7CisgICAgCQlwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgPSBOb3czMjsKKwkJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7CisgICAgCQkvLworICAgIAkJLy8gaW5kaWNhdGUgaW4tb3JkZXIgbXBkdXMKKyAgICAJCS8vCisgICAgCQlTZXF1ZW5jZSA9IGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwgU2VxdWVuY2UpOworICAgIAkJaWYgKFNlcXVlbmNlICE9IFJFU0VUX1JDVl9TRVEpCisgICAgCQl7CisgICAgCQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBTZXF1ZW5jZTsKKyAgICAJCX0KKworCQkvL3ByaW50aygiJXgsIGZsdXNoIG9uZSFcbiIsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKworCX0KK30KKworCisvKgorICogZ2VuZXJhdGUgQUREQkEgcmVxdWVzdCB0bworICogc2V0IHVwIEJBIGFncmVlbWVudAorICovCitWT0lEIEJBT3JpU2Vzc2lvblNldFVwKAorCQkJCQkgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkgIElOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwkJCQkJICBJTiBVQ0hBUiAgICAgICAgICAgIFRJRCwKKwkJCQkJICBJTiBVU0hPUlQgICAgICAgICAgIFRpbWVPdXQsCisJCQkJCSAgSU4gVUxPTkcgICAgICAgICAgICBEZWxheVRpbWUsCisJCQkJCSAgSU4gQk9PTEVBTiAgICAgICAgICBpc0ZvcmNlZCkKKworeworCS8vTUxNRV9BRERCQV9SRVFfU1RSVUNUCUFkZGJhUmVxOworCUJBX09SSV9FTlRSWSAgICAgICAgICAgICpwQkFFbnRyeSA9IE5VTEw7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgSWR4OworCUJPT0xFQU4gICAgICAgICAgICAgICAgIENhbmNlbGxlZDsKKworCWlmICgocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSAhPSBUUlVFKSAgJiYgIChpc0ZvcmNlZCA9PSBGQUxTRSkpCisJCXJldHVybjsKKworCS8vIGlmIHRoaXMgZW50cnkgaXMgbGltaXRlZCB0byB1c2UgbGVnYWN5IHR4IG1vZGUsIGl0IGRvZXNuJ3QgZ2VuZXJhdGUgQkEuCisJaWYgKFJUTVBTdGFGaXhlZFR4TW9kZShwQWQsIHBFbnRyeSkgIT0gRklYRURfVFhNT0RFX0hUKQorCQlyZXR1cm47CisKKwlpZiAoKHBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICYgKDE8PFRJRCkpICYmIChpc0ZvcmNlZCA9PSBGQUxTRSkpCisJeworCQkvLyB0cnkgYWdhaW4gYWZ0ZXIgMyBzZWNzCisJCURlbGF5VGltZSA9IDMwMDA7CisvLwkJcHJpbnRrKCJEZUNsaW5lIEJBIGZyb20gUGVlclxuIik7CisvLwkJcmV0dXJuOworCX0KKworCisJSWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdOworCWlmIChJZHggPT0gMCkKKwl7CisJCS8vIGFsbG9jYXRlIGEgQkEgc2Vzc2lvbgorCQlwQkFFbnRyeSA9IEJBVGFibGVBbGxvY09yaUVudHJ5KHBBZCwgJklkeCk7CisJCWlmIChwQkFFbnRyeSA9PSBOVUxMKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFEREJBIC0gTWxtZUFEREJBQWN0aW9uKCkgYWxsb2NhdGUgQkEgc2Vzc2lvbiBmYWlsZWQgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEJBRW50cnkgPSZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtJZHhdOworCX0KKworCWlmIChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA+PSBPcmlnaW5hdG9yX1dhaXRSZXMpCisJeworCQlyZXR1cm47CisJfQorCisJcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdID0gSWR4OworCisJLy8gSW5pdGlhbGl6ZSBCQSBzZXNzaW9uCisJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX1dhaXRSZXM7CisJcEJBRW50cnktPldjaWQgPSBwRW50cnktPkFpZDsKKwlwQkFFbnRyeS0+QkFXaW5TaXplID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdDsKKwlwQkFFbnRyeS0+U2VxdWVuY2UgPSBCQV9PUklfSU5JVF9TRVE7CisJcEJBRW50cnktPlRva2VuID0gMTsJLy8gKDIwMDgtMDEtMjEpIEphbiBMZWUgcmVjb21tZW5kcyBpdCAtIHRoaXMgdG9rZW4gY2FuJ3QgYmUgMAorCXBCQUVudHJ5LT5USUQgPSBUSUQ7CisJcEJBRW50cnktPlRpbWVPdXRWYWx1ZSA9IFRpbWVPdXQ7CisJcEJBRW50cnktPnBBZGFwdGVyID0gcEFkOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZW5kIEFkZEJBIHRvICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFRpZDolZCBpc0ZvcmNlZDolZCBXY2lkOiVkXG4iCisJCSxwRW50cnktPkFkZHJbMF0scEVudHJ5LT5BZGRyWzFdLHBFbnRyeS0+QWRkclsyXQorCQkscEVudHJ5LT5BZGRyWzNdLHBFbnRyeS0+QWRkcls0XSxwRW50cnktPkFkZHJbNV0KKwkJLFRJRCxpc0ZvcmNlZCxwRW50cnktPkFpZCkpOworCisJaWYgKCEocEVudHJ5LT5UWEJBYml0bWFwICYgKDE8PFRJRCkpKQorCXsKKwkJUlRNUEluaXRUaW1lcihwQWQsICZwQkFFbnRyeS0+T1JJQkFUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKEJBT3JpU2Vzc2lvblNldHVwVGltZW91dCksIHBCQUVudHJ5LCBGQUxTRSk7CisJfQorCWVsc2UKKwkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkvLyBzZXQgdGltZXIgdG8gc2VuZCBBRERCQSByZXF1ZXN0CisJUlRNUFNldFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgRGVsYXlUaW1lKTsKK30KKworVk9JRCBCQU9yaVNlc3Npb25BZGQoCisJCQlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwkJCQkJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5LAorCQkJSU4gUEZSQU1FX0FEREJBX1JTUCBwRnJhbWUpCit7CisJQkFfT1JJX0VOVFJZICAqcEJBRW50cnkgPSBOVUxMOworCUJPT0xFQU4gICAgICAgQ2FuY2VsbGVkOworCVVDSEFSICAgICAgICAgVElEOworCVVTSE9SVCAgICAgICAgSWR4OworCVBVQ0hBUiAgICAgICAgICBwT3V0QnVmZmVyMiA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuOworCUZSQU1FX0JBUiAgICAgICBGcmFtZUJhcjsKKworCVRJRCA9IHBGcmFtZS0+QmFQYXJtLlRJRDsKKwlJZHggPSBwRW50cnktPkJBT3JpV2NpZEFycmF5W1RJRF07CisJcEJBRW50cnkgPSZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtJZHhdOworCisJLy8gU3RhcnQgZmlsbCBpbiBwYXJhbWV0ZXJzLgorCWlmICgoSWR4ICE9MCkgJiYgKHBCQUVudHJ5LT5USUQgPT0gVElEKSAmJiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9XYWl0UmVzKSkKKwl7CisJCXBCQUVudHJ5LT5CQVdpblNpemUgPSBtaW4ocEJBRW50cnktPkJBV2luU2l6ZSwgKChVQ0hBUilwRnJhbWUtPkJhUGFybS5CdWZTaXplKSk7CisJCUJBX01heFdpblNpemVSZWFzaWduKHBBZCwgcEVudHJ5LCAmcEJBRW50cnktPkJBV2luU2l6ZSk7CisKKwkJcEJBRW50cnktPlRpbWVPdXRWYWx1ZSA9IHBGcmFtZS0+VGltZU91dFZhbHVlOworCQlwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA9IE9yaWdpbmF0b3JfRG9uZTsKKwkJLy8gcmVzZXQgc2VxdWVuY2UgbnVtYmVyCisJCXBCQUVudHJ5LT5TZXF1ZW5jZSA9IEJBX09SSV9JTklUX1NFUTsKKwkJLy8gU2V0IEJpdG1hcCBmbGFnLgorCQlwRW50cnktPlRYQkFiaXRtYXAgfD0gKDE8PFRJRCk7CisJCQkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkJcEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSA9IDA7CS8vcEZyYW1lLT5UaW1lT3V0VmFsdWU7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIlcyA6IFRYQkFiaXRtYXAgPSAleCwgQkFXaW5TaXplID0gJWQsIFRpbWVPdXQgPSAlbGRcbiIsIF9fRlVOQ1RJT05fXywgcEVudHJ5LT5UWEJBYml0bWFwLAorCQkJCQkJCQkgcEJBRW50cnktPkJBV2luU2l6ZSwgcEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSkpOworCisJCS8vIFNFTkQgQkFSIDsKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyMik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBCQU9yaVNlc3Npb25BZGQoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQmFySGVhZGVySW5pdChwQWQsICZGcmFtZUJhciwgcEFkLT5NYWNUYWIuQ29udGVudFtwQkFFbnRyeS0+V2NpZF0uQWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJRnJhbWVCYXIuU3RhcnRpbmdTZXEuZmllbGQuRnJhZ051bSA9IDA7CS8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmN0aW9uLgorCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSA9IHBCQUVudHJ5LT5TZXF1ZW5jZTsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLkJhckNvbnRyb2wuVElEID0gcEJBRW50cnktPlRJRDsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIyLCAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJICBzaXplb2YoRlJBTUVfQkFSKSwgICAgICAmRnJhbWVCYXIsCisJCQkJCSAgRU5EX09GX0FSR1MpOworCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlcjIsIEZyYW1lTGVuKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyMik7CisKKworCQlpZiAocEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSkKKwkJCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIHBCQUVudHJ5LT5PUklCQVRpbWVyLlRpbWVyVmFsdWUpOyAvLyBpbiBtU2VjCisJfQorfQorCitCT09MRUFOIEJBUmVjU2Vzc2lvbkFkZCgKKwkJCQkJICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQkJCSAgIElOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwkJCQkJICAgSU4gUEZSQU1FX0FEREJBX1JFUSBwRnJhbWUpCit7CisJQkFfUkVDX0VOVFJZICAgICAgICAgICAgKnBCQUVudHJ5ID0gTlVMTDsKKwlCT09MRUFOICAgICAgICAgICAgICAgICBTdGF0dXMgPSBUUlVFOworCUJPT0xFQU4gICAgICAgICAgICAgICAgIENhbmNlbGxlZDsKKwlVU0hPUlQgICAgICAgICAgICAgICAgICBJZHg7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgVElEOworCVVDSEFSICAgICAgICAgICAgICAgICAgIEJBV2luU2l6ZTsKKwkvL1VJTlQzMiAgICAgICAgICAgICAgICAgIFZhbHVlOworCS8vVUlOVCAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OworCisKKwlBU1NFUlQocEVudHJ5KTsKKworCS8vIGZpbmQgVElECisJVElEID0gcEZyYW1lLT5CYVBhcm0uVElEOworCisJQkFXaW5TaXplID0gbWluKCgoVUNIQVIpcEZyYW1lLT5CYVBhcm0uQnVmU2l6ZSksIChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KTsKKworCS8vIEludGVsIHBhdGNoCisJaWYgKEJBV2luU2l6ZSA9PSAwKQorCXsKKwkJQkFXaW5TaXplID0gNjQ7CisJfQorCisJSWR4ID0gcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdOworCisKKwlpZiAoSWR4ID09IDApCisJeworCQlwQkFFbnRyeSA9IEJBVGFibGVBbGxvY1JlY0VudHJ5KHBBZCwgJklkeCk7CisJfQorCWVsc2UKKwl7CisJCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07CisJCS8vIGZsdXNoIGFsbCBwZW5kaW5nIHJlb3JkZXJpbmcgbXBkdXMKKwkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiJXMoJWxkKTogSWR4ID0gJWQsIEJBV2luU2l6ZShyZXEgJWQpID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50LCBJZHgsCisJCQkJCQkJIHBGcmFtZS0+QmFQYXJtLkJ1ZlNpemUsIEJBV2luU2l6ZSkpOworCisJLy8gU3RhcnQgZmlsbCBpbiBwYXJhbWV0ZXJzLgorCWlmIChwQkFFbnRyeSAhPSBOVUxMKQorCXsKKwkJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7CisKKwkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfSGFuZGxlUmVzOworCQlwQkFFbnRyeS0+QkFXaW5TaXplID0gQkFXaW5TaXplOworCQlwQkFFbnRyeS0+V2NpZCA9IHBFbnRyeS0+QWlkOworCQlwQkFFbnRyeS0+VElEID0gVElEOworCQlwQkFFbnRyeS0+VGltZU91dFZhbHVlID0gcEZyYW1lLT5UaW1lT3V0VmFsdWU7CisJCXBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X0FjY2VwdDsKKwkJLy8gaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROyAvL3BGcmFtZS0+QmFTdGFydFNlcS5maWVsZC5TdGFydFNlcTsKKworCQlwcmludGsoIlN0YXJ0IFNlcSA9ICUwOHhcbiIsICBwRnJhbWUtPkJhU3RhcnRTZXEuZmllbGQuU3RhcnRTZXEpOworCisJCWlmIChwRW50cnktPlJYQkFiaXRtYXAgJiAoMTw8VElEKSkKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+UkVDQkFUaW1lciwgJkNhbmNlbGxlZCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBCQUVudHJ5LT5SRUNCQVRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQkFSZWNTZXNzaW9uSWRsZVRpbWVvdXQpLCBwQkFFbnRyeSwgVFJVRSk7CisJCX0KKworCQkvLyBTZXQgQml0bWFwIGZsYWcuCisJCXBFbnRyeS0+UlhCQWJpdG1hcCB8PSAoMTw8VElEKTsKKwkJcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdID0gSWR4OworCisJCXBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICY9IH4oMTw8VElEKTsKKworCQkvLyBTZXQgQkEgc2Vzc2lvbiBtYXNrIGluIFdDSUQgdGFibGUuCisJCVJUMjhYWF9BRERfQkFfU0VTU0lPTl9UT19BU0lDKHBBZCwgcEVudHJ5LT5BaWQsIFRJRCk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNQUNFbnRyeVslZF1SWEJBYml0bWFwID0gMHgleC4gQkFSZWNXY2lkQXJyYXk9JWRcbiIsCisJCQkJcEVudHJ5LT5BaWQsIHBFbnRyeS0+UlhCQWJpdG1hcCwgcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdKSk7CisJfQorCWVsc2UKKwl7CisJCVN0YXR1cyA9IEZBTFNFOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNhbid0IEFjY2VwdCBBRERCQSBmb3IgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggVElEID0gJWRcbiIsCisJCQkJUFJJTlRfTUFDKHBFbnRyeS0+QWRkciksIFRJRCkpOworCX0KKwlyZXR1cm4oU3RhdHVzKTsKK30KKworCitCQV9SRUNfRU5UUlkgKkJBVGFibGVBbGxvY1JlY0VudHJ5KAorCQkJCQkJCQkgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJCQkgIE9VVCBVU0hPUlQgICAgICAgICAgKklkeCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlCQV9SRUNfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCisJaWYgKHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCA+PSBNQVhfQkFSRUNJX1NFU1NJT04pCisJeworCQlwcmludGsoIkJBIFJlY2lwZWludCBTZXNzaW9uICglbGQpID4gJWRcbiIsIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCwKKwkJCU1BWF9CQVJFQ0lfU0VTU0lPTik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvLyByZXNlcnZlIGlkeCAwIHRvIGlkZW50aWZ5IEJBV2NpZEFycmF5W1RJRF0gYXMgZW1wdHkKKwlmb3IgKGk9MTsgaSA8IE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBpKyspCisJeworCQlwQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W2ldOworCQlpZiAoKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID09IFJlY2lwaWVudF9OT05FKSkKKwkJeworCQkJLy8gZ2V0IG9uZQorCQkJcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50Kys7CisJCQlwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyA9IFJlY2lwaWVudF9VU0VEOworCQkJKklkeCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworZG9uZToKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJcmV0dXJuIHBCQUVudHJ5OworfQorCitCQV9PUklfRU5UUlkgKkJBVGFibGVBbGxvY09yaUVudHJ5KAorCQkJCQkJCQkgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJCQkgIE9VVCBVU0hPUlQgICAgICAgICAgKklkeCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlCQV9PUklfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCWlmIChwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yID49IChNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkpCisJeworCQlnb3RvIGRvbmU7CisJfQorCisJLy8gcmVzZXJ2ZSBpZHggMCB0byBpZGVudGlmeSBCQVdjaWRBcnJheVtUSURdIGFzIGVtcHR5CisJZm9yIChpPTE7IGk8TUFYX0xFTl9PRl9CQV9PUklfVEFCTEU7IGkrKykKKwl7CisJCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbaV07CisJCWlmICgocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9OT05FKSkKKwkJeworCQkJLy8gZ2V0IG9uZQorCQkJcEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvcisrOworCQkJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX1VTRUQ7CisJCQlwQkFFbnRyeS0+cEFkYXB0ZXIgPSBwQWQ7CisJCQkqSWR4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCitkb25lOgorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwlyZXR1cm4gcEJBRW50cnk7Cit9CisKKworVk9JRCBCQVRhYmxlRnJlZU9yaUVudHJ5KAorCQkJCQkJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQlJTiAgVUxPTkcgICAgICAgICAgIElkeCkKK3sKKwlCQV9PUklfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCisJaWYgKChJZHggPT0gMCkgfHwgKElkeCA+PSBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkpCisJCXJldHVybjsKKworCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKworCWlmIChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyAhPSBPcmlnaW5hdG9yX05PTkUpCisJeworCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwQkFFbnRyeS0+V2NpZF07CisJCXBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbcEJBRW50cnktPlRJRF0gPSAwOworCisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCQlpZiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCSAJcEVudHJ5LT5UWEJBYml0bWFwICY9ICh+KDE8PChwQkFFbnRyeS0+VElEKSApKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBVGFibGVGcmVlT3JpRW50cnkgbnVtQXNPcmlnaW5hdG9yPSAlbGRcbiIsIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCkpOworCQkJLy8gRXJhc2UgQml0bWFwIGZsYWcuCisJCX0KKworCQlBU1NFUlQocEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciAhPSAwKTsKKworCQlwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yIC09IDE7CisKKwkJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7CisJCXBCQUVudHJ5LT5Ub2tlbiA9IDA7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwl9Cit9CisKKworVk9JRCBCQVRhYmxlRnJlZVJlY0VudHJ5KAorCQkJCQkJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQlJTiAgVUxPTkcgICAgICAgICAgIElkeCkKK3sKKwlCQV9SRUNfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCisJaWYgKChJZHggPT0gMCkgfHwgKElkeCA+PSBNQVhfTEVOX09GX0JBX1JFQ19UQUJMRSkpCisJCXJldHVybjsKKworCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKworCWlmIChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyAhPSBSZWNpcGllbnRfTk9ORSkKKwl7CisJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BCQUVudHJ5LT5XY2lkXTsKKwkJcEVudHJ5LT5CQVJlY1djaWRBcnJheVtwQkFFbnRyeS0+VElEXSA9IDA7CisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCisJCUFTU0VSVChwQWQtPkJBVGFibGUubnVtQXNSZWNpcGllbnQgIT0gMCk7CisKKwkJcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50IC09IDE7CisKKwkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfTk9ORTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCX0KK30KKworCitWT0lEIEJBT3JpU2Vzc2lvblRlYXJEb3duKAorCQkJCQkJIElOIE9VVCAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCSBJTiAgICAgIFVDSEFSICAgICAgICAgICBXY2lkLAorCQkJCQkJIElOICAgICAgVUNIQVIgICAgICAgICAgIFRJRCwKKwkJCQkJCSBJTiAgICAgIEJPT0xFQU4gICAgICAgICBiUGFzc2l2ZSwKKwkJCQkJCSBJTiAgICAgIEJPT0xFQU4gICAgICAgICBiRm9yY2VTZW5kKQoreworCVVMT05HICAgICAgICAgICBJZHggPSAwOworCUJBX09SSV9FTlRSWSAgICAqcEJBRW50cnk7CisJQk9PTEVBTiAgICAgICAgIENhbmNlbGxlZDsKKworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vCisJLy8gTG9jYXRlIGNvcnJlc3BvbmRpbmcgQkEgT3JpZ2luYXRvciBFbnRyeSBpbiBCQSBUYWJsZSB3aXRoIHRoZSAocEFkZHIsVElEKS4KKwkvLworCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFPcmlXY2lkQXJyYXlbVElEXTsKKwlpZiAoKElkeCA9PSAwKSB8fCAoSWR4ID49IE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFKSkKKwl7CisJCWlmIChiRm9yY2VTZW5kID09IFRSVUUpCisJCXsKKwkJCS8vIGZvcmNlIHNlbmQgc3BlY2lmaWVkIFRJRCBEZWxCQQorCQkJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICAgRGVsYmFSZXE7CisJCQlNTE1FX1FVRVVFX0VMRU0gKkVsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKworCQkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJCU5kaXNaZXJvTWVtb3J5KEVsZW0sIHNpemVvZihNTE1FX1FVRVVFX0VMRU0pKTsKKworCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLCBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOworCQkJRGVsYmFSZXEuV2NpZCA9IFdjaWQ7CisJCQlEZWxiYVJlcS5USUQgPSBUSUQ7CisJCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBPUklHSU5BVE9SOworI2lmIDEKKwkJCUVsZW0tPk1zZ0xlbiAgPSBzaXplb2YoRGVsYmFSZXEpOworCQkJTmRpc01vdmVNZW1vcnkoRWxlbS0+TXNnLCAmRGVsYmFSZXEsIHNpemVvZihEZWxiYVJlcSkpOworCQkJTWxtZURFTEJBQWN0aW9uKHBBZCwgRWxlbSk7CisJCQlrZnJlZShFbGVtKTsKKyNlbHNlCisJCQlNbG1lRW5xdWV1ZShwQWQsIEFDVElPTl9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgc2l6ZW9mKE1MTUVfREVMQkFfUkVRX1NUUlVDVCksIChQVk9JRCkmRGVsYmFSZXEpOworCQkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworI2VuZGlmCisJCX0KKworCQlyZXR1cm47CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIlcz09PT5XY2lkPSVkLlRJRD0lZCBcbiIsIF9fRlVOQ1RJT05fXywgV2NpZCwgVElEKSk7CisKKwlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtJZHhdOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiXHQ9PT0+SWR4ID0gJWxkLCBXY2lkPSVkLlRJRD0lZCwgT1JJX0JBX1N0YXR1cyA9ICVkIFxuIiwgSWR4LCBXY2lkLCBUSUQsIHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzKSk7CisJLy8KKwkvLyBQcmVwYXJlIERlbEJBIGFjdGlvbiBmcmFtZSBhbmQgc2VuZCB0byB0aGUgcGVlci4KKwkvLworCWlmICgoYlBhc3NpdmUgPT0gRkFMU0UpICYmIChUSUQgPT0gcEJBRW50cnktPlRJRCkgJiYgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkpCisJeworCQlNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgICBEZWxiYVJlcTsKKwkJTUxNRV9RVUVVRV9FTEVNICpFbGVtID0gKE1MTUVfUVVFVUVfRUxFTSAqKSBrbWFsbG9jKHNpemVvZihNTE1FX1FVRVVFX0VMRU0pLCBNRU1fQUxMT0NfRkxBRyk7CisKKwkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJTmRpc1plcm9NZW1vcnkoRWxlbSwgc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSkpOworCisJCUNPUFlfTUFDX0FERFIoRGVsYmFSZXEuQWRkciwgcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyKTsKKwkJRGVsYmFSZXEuV2NpZCA9IFdjaWQ7CisJCURlbGJhUmVxLlRJRCA9IHBCQUVudHJ5LT5USUQ7CisJCURlbGJhUmVxLkluaXRpYXRvciA9IE9SSUdJTkFUT1I7CisjaWYgMQorCQlFbGVtLT5Nc2dMZW4gID0gc2l6ZW9mKERlbGJhUmVxKTsKKwkJTmRpc01vdmVNZW1vcnkoRWxlbS0+TXNnLCAmRGVsYmFSZXEsIHNpemVvZihEZWxiYVJlcSkpOworCQlNbG1lREVMQkFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJa2ZyZWUoRWxlbSk7CisjZWxzZQorCQlNbG1lRW5xdWV1ZShwQWQsIEFDVElPTl9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgc2l6ZW9mKE1MTUVfREVMQkFfUkVRX1NUUlVDVCksIChQVk9JRCkmRGVsYmFSZXEpOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisjZW5kaWYKKwl9CisJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7CisJQkFUYWJsZUZyZWVPcmlFbnRyeShwQWQsIElkeCk7CisKKwlpZiAoYlBhc3NpdmUpCisJeworCQkvL0JBT3JpU2Vzc2lvblNldFVwKHBBZCwgJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIFRJRCwgMCwgMTAwMDAsIFRSVUUpOworCX0KK30KKworVk9JRCBCQVJlY1Nlc3Npb25UZWFyRG93bigKKwkJCQkJCSBJTiBPVVQgIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkgSU4gICAgICBVQ0hBUiAgICAgICAgICAgV2NpZCwKKwkJCQkJCSBJTiAgICAgIFVDSEFSICAgICAgICAgICBUSUQsCisJCQkJCQkgSU4gICAgICBCT09MRUFOICAgICAgICAgYlBhc3NpdmUpCit7CisJVUxPTkcgICAgICAgICAgIElkeCA9IDA7CisJQkFfUkVDX0VOVFJZICAgICpwQkFFbnRyeTsKKworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vCisJLy8gIExvY2F0ZSBjb3JyZXNwb25kaW5nIEJBIE9yaWdpbmF0b3IgRW50cnkgaW4gQkEgVGFibGUgd2l0aCB0aGUgKHBBZGRyLFRJRCkuCisJLy8KKwlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF07CisJaWYgKElkeCA9PSAwKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiVzPT09PldjaWQ9JWQuVElEPSVkIFxuIiwgX19GVU5DVElPTl9fLCBXY2lkLCBUSUQpKTsKKworCisJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlx0PT09PklkeCA9ICVsZCwgV2NpZD0lZC5USUQ9JWQsIFJFQ19CQV9TdGF0dXMgPSAlZCBcbiIsIElkeCwgV2NpZCwgVElELCBwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cykpOworCS8vCisJLy8gUHJlcGFyZSBEZWxCQSBhY3Rpb24gZnJhbWUgYW5kIHNlbmQgdG8gdGhlIHBlZXIuCisJLy8KKwlpZiAoKFRJRCA9PSBwQkFFbnRyeS0+VElEKSAmJiAocEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPT0gUmVjaXBpZW50X0FjY2VwdCkpCisJeworCQlNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgICBEZWxiYVJlcTsKKwkJQk9PTEVBTiAJCQkJQ2FuY2VsbGVkOworCQlNTE1FX1FVRVVFX0VMRU0gKkVsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKwkJLy9VTE9ORyAgIG9mZnNldDsKKwkJLy9VSU5UMzIgIFZBTFVFOworCisJCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPlJFQ0JBVGltZXIsICZDYW5jZWxsZWQpOworCisJCS8vCisJCS8vIDEuIFNlbmQgREVMQkEgQWN0aW9uIEZyYW1lCisJCS8vCisJCWlmIChiUGFzc2l2ZSA9PSBGQUxTRSkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJCU5kaXNaZXJvTWVtb3J5KEVsZW0sIHNpemVvZihNTE1FX1FVRVVFX0VMRU0pKTsKKworCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLCBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOworCQkJRGVsYmFSZXEuV2NpZCA9IFdjaWQ7CisJCQlEZWxiYVJlcS5USUQgPSBUSUQ7CisJCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBSRUNJUElFTlQ7CisjaWYgMQorCQkJRWxlbS0+TXNnTGVuICA9IHNpemVvZihEZWxiYVJlcSk7CisJCQlOZGlzTW92ZU1lbW9yeShFbGVtLT5Nc2csICZEZWxiYVJlcSwgc2l6ZW9mKERlbGJhUmVxKSk7CisJCQlNbG1lREVMQkFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWtmcmVlKEVsZW0pOworI2Vsc2UKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQUNUSU9OX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX09SSV9ERUxCQV9DQVRFLCBzaXplb2YoTUxNRV9ERUxCQV9SRVFfU1RSVUNUKSwgKFBWT0lEKSZEZWxiYVJlcSk7CisJCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisjZW5kaWYKKwkJfQorCisKKwkJLy8KKwkJLy8gMi4gRnJlZSByZXNvdXJjZSBvZiBCQSBzZXNzaW9uCisJCS8vCisJCS8vIGZsdXNoIGFsbCBwZW5kaW5nIHJlb3JkZXJpbmcgbXBkdXMKKwkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCQkvLyBFcmFzZSBCaXRtYXAgZmxhZy4KKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROworCQlwQkFFbnRyeS0+QkFXaW5TaXplID0gMDsKKwkJLy8gRXJhc2UgQml0bWFwIGZsYWcgYXQgc29mdHdhcmUgbWFjdGFibGUKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5SWEJBYml0bWFwICY9ICh+KDE8PChwQkFFbnRyeS0+VElEKSkpOworCQlwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF0gPSAwOworCisJCVJUMjhYWF9ERUxfQkFfU0VTU0lPTl9GUk9NX0FTSUMocEFkLCBXY2lkLCBUSUQpOworCisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCX0KKworCUJBVGFibGVGcmVlUmVjRW50cnkocEFkLCBJZHgpOworfQorCitWT0lEIEJBU2Vzc2lvblRlYXJEb3duQUxMKAorCQkJCQkJIElOIE9VVCAgUFJUTVBfQURBUFRFUiBwQWQsCisJCQkJCQkgSU4gICAgICBVQ0hBUiBXY2lkKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8TlVNX09GX1RJRDsgaSsrKQorCXsKKwkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBXY2lkLCBpLCBGQUxTRSwgRkFMU0UpOworCQlCQVJlY1Nlc3Npb25UZWFyRG93bihwQWQsIFdjaWQsIGksIEZBTFNFKTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlSZXRyeSBzZW5kaW5nIEFEREJBIFJlcWVzdC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJUGFyYW1ldHJzOgorCXA4MDIzSGVhZGVyOiBpZiB0aGlzIGlzIGFscmVhZHkgODAyLjMgZm9ybWF0LCBwODAyM0hlYWRlciBpcyBOVUxMCisKKwlSZXR1cm4JOiBUUlVFIGlmIHB1dCBpbnRvIHJ4IHJlb3JkZXJpbmcgYnVmZmVyLCBzaG91bGRuJ3QgaW5kaWNhdGVyeGhlcmUuCisJCQkJRkFMU0UgLCB0aGVuIGNvbnRpbnVlIGluZGljYXRlcnggYXQgdGhpcyBtb21lbnQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBCQU9yaVNlc3Npb25TZXR1cFRpbWVvdXQoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCUJBX09SSV9FTlRSWSAgICAqcEJBRW50cnkgPSAoQkFfT1JJX0VOVFJZICopRnVuY3Rpb25Db250ZXh0OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCVBSVE1QX0FEQVBURVIgICBwQWQ7CisKKwlpZiAocEJBRW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcEFkID0gcEJBRW50cnktPnBBZGFwdGVyOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uCisJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUkFMSU5LX0FURQorCS8vIE5vdGhpbmcgdG8gZG8gaW4gQVRFIG1vZGUuCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBRW50cnktPldjaWRdOworCisJaWYgKChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA9PSBPcmlnaW5hdG9yX1dhaXRSZXMpICYmIChwQkFFbnRyeS0+VG9rZW4gPCBPUklfU0VTU0lPTl9NQVhfUkVUUlkpKQorCXsKKwkJTUxNRV9BRERCQV9SRVFfU1RSVUNUICAgIEFkZGJhUmVxOworCisJCU5kaXNaZXJvTWVtb3J5KCZBZGRiYVJlcSwgc2l6ZW9mKEFkZGJhUmVxKSk7CisJCUNPUFlfTUFDX0FERFIoQWRkYmFSZXEucEFkZHIsIHBFbnRyeS0+QWRkcik7CisJCUFkZGJhUmVxLldjaWQgPSAoVUNIQVIpKHBFbnRyeS0+QWlkKTsKKwkJQWRkYmFSZXEuVElEID0gcEJBRW50cnktPlRJRDsKKwkJQWRkYmFSZXEuQmFCdWZTaXplID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdDsKKwkJQWRkYmFSZXEuVGltZU91dFZhbHVlID0gMDsKKwkJQWRkYmFSZXEuVG9rZW4gPSBwQkFFbnRyeS0+VG9rZW47CisJCU1sbWVFbnF1ZXVlKHBBZCwgQUNUSU9OX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FERF9CQV9DQVRFLCBzaXplb2YoTUxNRV9BRERCQV9SRVFfU1RSVUNUKSwgKFBWT0lEKSZBZGRiYVJlcSk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwkJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIE9yaSBTZXNzaW9uIFRpbWVvdXQoJWQpIDogU2VuZCBBREQgQkEgYWdhaW5cbiIsIHBCQUVudHJ5LT5Ub2tlbikpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgT3JpIFNlc3Npb24gVGltZW91dCglZCkgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggVGlkOiVkIFdjaWQ6JWRcbiIKKwkJLHBCQUVudHJ5LT5Ub2tlbgorCQkscEVudHJ5LT5BZGRyWzBdLHBFbnRyeS0+QWRkclsxXSxwRW50cnktPkFkZHJbMl0KKwkJLHBFbnRyeS0+QWRkclszXSxwRW50cnktPkFkZHJbNF0scEVudHJ5LT5BZGRyWzVdCisJCSxwQkFFbnRyeS0+VElELHBFbnRyeS0+QWlkKSk7CisKKwkJcEJBRW50cnktPlRva2VuKys7CisJCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQpOworCX0KKwllbHNlCisJeworCQlCQVRhYmxlRnJlZU9yaUVudHJ5KHBBZCwgcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtwQkFFbnRyeS0+VElEXSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVJldHJ5IHNlbmRpbmcgQUREQkEgUmVxZXN0LgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlQYXJhbWV0cnM6CisJcDgwMjNIZWFkZXI6IGlmIHRoaXMgaXMgYWxyZWFkeSA4MDIuMyBmb3JtYXQsIHA4MDIzSGVhZGVyIGlzIE5VTEwKKworCVJldHVybgk6IFRSVUUgaWYgcHV0IGludG8gcnggcmVvcmRlcmluZyBidWZmZXIsIHNob3VsZG4ndCBpbmRpY2F0ZXJ4aGVyZS4KKwkJCQlGQUxTRSAsIHRoZW4gY29udGludWUgaW5kaWNhdGVyeCBhdCB0aGlzIG1vbWVudC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKworCUJBX1JFQ19FTlRSWSAgICAqcEJBRW50cnkgPSAoQkFfUkVDX0VOVFJZICopRnVuY3Rpb25Db250ZXh0OworCVBSVE1QX0FEQVBURVIgICBwQWQ7CisJVUxPTkcgICAgICAgICAgIE5vdzMyOworCisJaWYgKHBCQUVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICgocEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPT0gUmVjaXBpZW50X0FjY2VwdCkpCisJeworCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3czMik7CisKKwkJaWYgKFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciArIFJFQ19CQV9TRVNTSU9OX0lETEVfVElNRU9VVCkpKQorCQl7CisJCQlwQWQgPSBwQkFFbnRyeS0+cEFkYXB0ZXI7CisJCQkvLyBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCisJCQliYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJCQlwcmludGsoIiVsZDogUkVDIEJBIHNlc3Npb24gVGltZW91dFxuIiwgTm93MzIpOworCQl9CisJfQorfQorCisKK1ZPSUQgUGVlckFkZEJBUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCS8vCTcuNC40LjEKKwkvL1VMT05HCUlkeDsKKwlVQ0hBUiAgIFN0YXR1cyA9IDE7CisJVUNIQVIgICBwQWRkcls2XTsKKwlGUkFNRV9BRERCQV9SU1AgQUREZnJhbWU7CisJUFVDSEFSICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJUEZSQU1FX0FEREJBX1JFUSAgcEFkZHJlcUZyYW1lID0gTlVMTDsKKwkvL1VDSEFSCQlCdWZTaXplOworCVVMT05HICAgICAgIEZyYW1lTGVuOworCVBVTE9ORyAgICAgIHB0ZW1wOworCVBNQUNfVEFCTEVfRU5UUlkJcE1hY0VudHJ5OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgPT0+IChXY2lkID0gJWQpXG4iLCBfX0ZVTkNUSU9OX18sIEVsZW0tPldjaWQpKTsKKworCS8vaGV4X2R1bXAoIkFkZEJBUmVxIiwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pOworCisJLy9BRERCQSBSZXF1ZXN0IGZyb20gdW5rbm93biBwZWVyLCBpZ25vcmUgdGhpcy4KKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisJcE1hY0VudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF07CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIFBlZXJBZGRCQVJlcUFjdGlvbi0tLS0+IFxuIikpOworCXB0ZW1wID0gKFBVTE9ORylFbGVtLT5Nc2c7CisJLy9EQkdQUklOVF9SQVcoUlRfREVCVUdfRU1VLCAoIiUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eFxuIiwgKihwdGVtcCksICoocHRlbXArMSksICoocHRlbXArMiksICoocHRlbXArMyksICoocHRlbXArNCksICoocHRlbXArNSksICoocHRlbXArNiksICoocHRlbXArNyksICoocHRlbXArOCkpKTsKKworCWlmIChQZWVyQWRkQkFSZXFBY3Rpb25TYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgcEFkZHIpKQorCXsKKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUgPT0gRkFMU0UpICYmIElTX0hUX1NUQShwTWFjRW50cnkpKQorCQl7CisJCQlwQWRkcmVxRnJhbWUgPSAoUEZSQU1FX0FEREJBX1JFUSkoJkVsZW0tPk1zZ1swXSk7CisJCQlwcmludGsoIlJjdiBXY2lkKCVkKSBBZGRCQVJlcVxuIiwgRWxlbS0+V2NpZCk7CisJCQlpZiAoQkFSZWNTZXNzaW9uQWRkKHBBZCwgJnBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0sIHBBZGRyZXFGcmFtZSkpCisJCQkJU3RhdHVzID0gMDsKKwkJCWVsc2UKKwkJCQlTdGF0dXMgPSAzODsgLy8gbW9yZSBwYXJhbWV0ZXJzIGhhdmUgaW52YWxpZCB2YWx1ZXMKKwkJfQorCQllbHNlCisJCXsKKwkJCVN0YXR1cyA9IDM3OyAvLyB0aGUgcmVxdWVzdCBoYXMgYmVlbiBkZWNsaW5lZC4KKwkJfQorCX0KKworCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLlZhbGlkQXNDTEkpCisJCUFTU0VSVChwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLlNzdCA9PSBTU1RfQVNTT0MpOworCisJcEFkZHJlcUZyYW1lID0gKFBGUkFNRV9BRERCQV9SRVEpKCZFbGVtLT5Nc2dbMF0pOworCS8vIDIuIEFsd2F5cyBzZW5kIGJhY2sgQUREQkEgUmVzcG9uc2UKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIFBlZXJCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlOZGlzWmVyb01lbW9yeSgmQUREZnJhbWUsIHNpemVvZihGUkFNRV9BRERCQV9SU1ApKTsKKwkvLyAyLTEuIFByZXBhcmUgQUREQkEgUmVzcG9uc2UgZnJhbWUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChBREhPQ19PTihwQWQpKQorCQkJQWN0SGVhZGVySW5pdChwQWQsICZBRERmcmFtZS5IZHIsIHBBZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCWVsc2UKKwkJCUFjdEhlYWRlckluaXQocEFkLCAmQUREZnJhbWUuSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkZHIpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlBRERmcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0JBOworCUFERGZyYW1lLkFjdGlvbiA9IEFEREJBX1JFU1A7CisJQUREZnJhbWUuVG9rZW4gPSBwQWRkcmVxRnJhbWUtPlRva2VuOworCS8vIFdoYXQgaXMgdGhlIFN0YXR1cyBjb2RlPz8gIG5lZWQgdG8gY2hlY2suCisJQUREZnJhbWUuU3RhdHVzQ29kZSA9IFN0YXR1czsKKwlBRERmcmFtZS5CYVBhcm0uQkFQb2xpY3kgPSBJTU1FRF9CQTsKKwlBRERmcmFtZS5CYVBhcm0uQU1TRFVTdXBwb3J0ZWQgPSAwOworCUFERGZyYW1lLkJhUGFybS5USUQgPSBwQWRkcmVxRnJhbWUtPkJhUGFybS5USUQ7CisJQUREZnJhbWUuQmFQYXJtLkJ1ZlNpemUgPSBtaW4oKChVQ0hBUilwQWRkcmVxRnJhbWUtPkJhUGFybS5CdWZTaXplKSwgKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQpOworCWlmIChBRERmcmFtZS5CYVBhcm0uQnVmU2l6ZSA9PSAwKQorCXsKKwkJQUREZnJhbWUuQmFQYXJtLkJ1ZlNpemUgPSA2NDsKKwl9CisJQUREZnJhbWUuVGltZU91dFZhbHVlID0gMDsgLy9wQWRkcmVxRnJhbWUtPlRpbWVPdXRWYWx1ZTsKKworCSooVVNIT1JUICopKCZBRERmcmFtZS5CYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJkFERGZyYW1lLkJhUGFybSkpOworCUFERGZyYW1lLlN0YXR1c0NvZGUgPSBjcHUybGUxNihBRERmcmFtZS5TdGF0dXNDb2RlKTsKKwlBRERmcmFtZS5UaW1lT3V0VmFsdWUgPSBjcHUybGUxNihBRERmcmFtZS5UaW1lT3V0VmFsdWUpOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEZSQU1FX0FEREJBX1JTUCksICAmQUREZnJhbWUsCisJCQkgIEVORF9PRl9BUkdTKTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyglZCk6IFRJRCglZCksIEJ1ZlNpemUoJWQpIDw9PSBcbiIsIF9fRlVOQ1RJT05fXywgRWxlbS0+V2NpZCwgQUREZnJhbWUuQmFQYXJtLlRJRCwKKwkJCQkJCQkgIEFERGZyYW1lLkJhUGFybS5CdWZTaXplKSk7Cit9CisKKworVk9JRCBQZWVyQWRkQkFSc3BBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQorCit7CisJLy9VQ0hBUgkJSWR4LCBpOworCS8vUFVDSEFSCQkgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlQRlJBTUVfQUREQkFfUlNQICAgIHBGcmFtZSA9IE5VTEw7CisJLy9QQkFfT1JJX0VOVFJZCQlwQkFFbnRyeTsKKworCS8vQUREQkEgUmVzcG9uc2UgZnJvbSB1bmtub3duIHBlZXIsIGlnbm9yZSB0aGlzLgorCWlmIChFbGVtLT5XY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyA9PT4gV2NpZCglZClcbiIsIF9fRlVOQ1RJT05fXywgRWxlbS0+V2NpZCkpOworCisJLy9oZXhfZHVtcCgiUGVlckFkZEJBUnNwQWN0aW9uKCkiLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbik7CisKKwlpZiAoUGVlckFkZEJBUnNwQWN0aW9uU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pKQorCXsKKwkJcEZyYW1lID0gKFBGUkFNRV9BRERCQV9SU1ApKCZFbGVtLT5Nc2dbMF0pOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlx0XHQgU3RhdHVzQ29kZSA9ICVkXG4iLCBwRnJhbWUtPlN0YXR1c0NvZGUpKTsKKwkJc3dpdGNoIChwRnJhbWUtPlN0YXR1c0NvZGUpCisJCXsKKwkJCWNhc2UgMDoKKwkJCQkvLyBJIHdhbnQgYSBCQXNlc3Npb24gd2l0aCB0aGlzIHBlZXIgYXMgYW4gb3JpZ2luYXRvci4KKwkJCQlCQU9yaVNlc3Npb25BZGQocEFkLCAmcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXSwgcEZyYW1lKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLy8gY2hlY2sgc3RhdHVzID09IFVTRUQgPz8/CisJCQkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBFbGVtLT5XY2lkLCBwRnJhbWUtPkJhUGFybS5USUQsIFRSVUUsIEZBTFNFKTsKKwkJCQlicmVhazsKKwkJfQorCQkvLyBSY3YgRGVjbGluZSBTdGF0dXNDb2RlCisJCWlmICgocEZyYW1lLT5TdGF0dXNDb2RlID09IDM3KQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgICAgICAgICAgfHwgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiBTVEFfVEdOX1dJRklfT04ocEFkKSAmJiAocEZyYW1lLT5TdGF0dXNDb2RlICE9IDApKQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworICAgICAgICAgICAgKQorCQl7CisJCQlwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLkJBRGVjbGluZUJpdG1hcCB8PSAxPDxwRnJhbWUtPkJhUGFybS5USUQ7CisJCX0KKwl9Cit9CisKK1ZPSUQgUGVlckRlbEJBQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCS8vVUNIQVIJCQkJSWR4OworCS8vUFVDSEFSCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBGUkFNRV9ERUxCQV9SRVEgICAgcERlbEZyYW1lID0gTlVMTDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiJXMgPT0+XG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkvL0RFTEJBIFJlcXVlc3QgZnJvbSB1bmtub3duIHBlZXIsIGlnbm9yZSB0aGlzLgorCWlmIChQZWVyRGVsQkFBY3Rpb25TYW5pdHkocEFkLCBFbGVtLT5XY2lkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbikpCisJeworCQlwRGVsRnJhbWUgPSAoUEZSQU1FX0RFTEJBX1JFUSkoJkVsZW0tPk1zZ1swXSk7CisJCWlmIChwRGVsRnJhbWUtPkRlbGJhUGFybS5Jbml0aWF0b3IgPT0gT1JJR0lOQVRPUikKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIFBlZXJEZWxCQUFjdGlvbi0tLS0+IE9SSUdJTkFUT1JcbiIpKTsKKwkJCUJBUmVjU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwgcERlbEZyYW1lLT5EZWxiYVBhcm0uVElELCBUUlVFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBQZWVyRGVsQkFBY3Rpb24tLS0tPiBSRUNJUElFTlQsIFJlYXNvbiA9ICVkXG4iLCAgcERlbEZyYW1lLT5SZWFzb25Db2RlKSk7CisJCQkvL2hleF9kdW1wKCJEZWxCQSBGcmFtZSIsIHBEZWxGcmFtZSwgRWxlbS0+TXNnTGVuKTsKKwkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwgcERlbEZyYW1lLT5EZWxiYVBhcm0uVElELCBUUlVFLCBGQUxTRSk7CisJCX0KKwl9Cit9CisKKworQk9PTEVBTiBDbnRsRW5xdWV1ZUZvclJlY3YoCisJCQkJCQkgIElOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwkJCQkJCSAgSU4gVUxPTkcJCQkJV2NpZCwKKwkJCQkJCSAgSU4gVUxPTkcJCQkJTXNnTGVuLAorCQkJCQkJICBJTiBQRlJBTUVfQkFfUkVRCQlwTXNnKQoreworCVBGUkFNRV9CQV9SRVEgICBwRnJhbWUgPSBwTXNnOworCS8vUFJUTVBfUkVPUkRFUkJVRglwQnVmZmVyOworCS8vUFJUTVBfUkVPUkRFUkJVRglwRG1hQnVmOworCVBCQV9SRUNfRU5UUlkgcEJBRW50cnk7CisJLy9CT09MRUFOIAlSZXN1bHQ7CisJVUxPTkcgICBJZHg7CisJLy9VQ0hBUglOdW1SeFBrdDsKKwlVQ0hBUglUSUQ7Ly8sIGk7CisKKwlUSUQgPSAoVUNIQVIpcEZyYW1lLT5CQVJDb250cm9sLlRJRDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCk6IEJBUi1XY2lkKCVsZCksIFRpZCAoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIFdjaWQsIFRJRCkpOworCS8vaGV4X2R1bXAoIkJBUiIsIChQQ0hBUikgcEZyYW1lLCBNc2dMZW4pOworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybiBGQUxTRTsKKworCS8vIEZpcnN0IGNoZWNrIHRoZSBzaXplLCBpdCBNVVNUIG5vdCBleGNlZWQgdGhlIG1sbWUgcXVldWUgc2l6ZQorCWlmIChNc2dMZW4gPiBNR01UX0RNQV9CVUZGRVJfU0laRSkKKwl7CisJCURCR1BSSU5UX0VSUigoIkNudGxFbnF1ZXVlRm9yUmVjdjogZnJhbWUgdG9vIGxhcmdlLCBzaXplID0gJWxkIFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZSBpZiAoTXNnTGVuICE9IHNpemVvZihGUkFNRV9CQV9SRVEpKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQ250bEVucXVldWVGb3JSZWN2OiBCbG9ja0FjayBSZXF1ZXN0IGZyYW1lIGxlbmd0aCBzaXplID0gJWxkIGluY29ycmVjdFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZSBpZiAoTXNnTGVuICE9IHNpemVvZihGUkFNRV9CQV9SRVEpKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQ250bEVucXVldWVGb3JSZWN2OiBCbG9ja0FjayBSZXF1ZXN0IGZyYW1lIGxlbmd0aCBzaXplID0gJWxkIGluY29ycmVjdFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoKFdjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkgJiYgKFRJRCA8IDgpKQorCQl7CisJCS8vIGlmIHRoaXMgcmVjZWl2aW5nIHBhY2tldCBpcyBmcm9tIFNBIHRoYXQgaXMgaW4gb3VyIE9yaUVudHJ5LiBTaW5jZSBXQ0lEIDw5IGhhcyBkaXJlY3QgbWFwcGluZy4gbm8gbmVlZCBzZWFyY2guCisJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFSZWNXY2lkQXJyYXlbVElEXTsKKwkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwkJfQorCQllbHNlCisJCXsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBUiglbGQpIDogVGlkICglZCkgLSAlMDR4OiUwNHhcbiIsIFdjaWQsIFRJRCwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLCBwQkFFbnRyeS0+TGFzdEluZFNlcSApKTsKKworCWlmIChTRVFfU01BTExFUihwQkFFbnRyeS0+TGFzdEluZFNlcSwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLCBNQVhTRVEpKQorCXsKKwkJLy9wcmludGsoIkJBUiBTZXEgPSAleCwgTGFzdEluZFNlcSA9ICV4XG4iLCBwRnJhbWUtPkJBU3RhcnRpbmdTZXEuZmllbGQuU3RhcnRTZXEsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKwkJYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEocEFkLCBwQkFFbnRyeSwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxKTsKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSAocEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID09IDApID8gTUFYU0VRIDoocEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxIC0xKTsKKwl9CisJLy9iYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCitEZXNjcmlwdGlvbiA6IFNlbmQgUFNNUCBBY3Rpb24gZnJhbWUgSWYgUFNNUCBtb2RlIHN3aXRjaGVzLgorKi8KK1ZPSUQgU2VuZFBTTVBBY3Rpb24oCisJCQkJICAgSU4gUFJUTVBfQURBUFRFUgkJcEFkLAorCQkJCSAgIElOIFVDSEFSCQkJCVdjaWQsCisJCQkJICAgSU4gVUNIQVIJCQkJUHNtcCkKK3sKKwlQVUNIQVIgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJLy9VTE9ORyAgICAgICAgICAgSWR4OworCUZSQU1FX1BTTVBfQUNUSU9OICAgRnJhbWU7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuOworI2lmZGVmIFJUMzB4eAorCVVDSEFSCQkJYmJwZGF0YT0wOworCVVJTlQzMgkJCW1hY2RhdGE7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkJBIC0gTWxtZUFEREJBQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQWRkcik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlGcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0hUOworCUZyYW1lLkFjdGlvbiA9IFNNUFNfQUNUSU9OOworCXN3aXRjaCAoUHNtcCkKKwl7CisJCWNhc2UgTU1QU19FTkFCTEU6CisjaWZkZWYgUlQzMHh4CisJCQlpZiAoSVNfUlQzMDkwKHBBZCkpCisJCQl7CisJCQkJLy8gZGlzYWJsZSBNTVBTIEJCUCBjb250cm9sIHJlZ2lzdGVyCisJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmYmJwZGF0YSk7CisJCQkJYmJwZGF0YSAmPSB+KDB4MDQpOwkvL2JpdCAyCisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgYmJwZGF0YSk7CisKKwkJCQkvLyBkaXNhYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTIxMCwgJm1hY2RhdGEpOworCQkJCW1hY2RhdGEgJj0gfigweDA5KTsJLy9iaXQgMCwgMworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQlGcmFtZS5Qc21wID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE1NUFNfRFlOQU1JQzoKKyNpZmRlZiBSVDMweHgKKwkJCWlmIChJU19SVDMwOTAocEFkKSkKKwkJCXsKKwkJCQkvLyBlbmFibGUgTU1QUyBCQlAgY29udHJvbCByZWdpc3RlcgorCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJmJicGRhdGEpOworCQkJCWJicGRhdGEgfD0gMHgwNDsJLy9iaXQgMgorCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIGJicGRhdGEpOworCisJCQkJLy8gZW5hYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTIxMCwgJm1hY2RhdGEpOworCQkJCW1hY2RhdGEgfD0gMHgwOTsJLy9iaXQgMCwgMworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQlGcmFtZS5Qc21wID0gMzsKKwkJCWJyZWFrOworCQljYXNlIE1NUFNfU1RBVElDOgorI2lmZGVmIFJUMzB4eAorCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJeworCQkJCS8vIGVuYWJsZSBNTVBTIEJCUCBjb250cm9sIHJlZ2lzdGVyCisJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmYmJwZGF0YSk7CisJCQkJYmJwZGF0YSB8PSAweDA0OwkvL2JpdCAyCisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgYmJwZGF0YSk7CisKKwkJCQkvLyBlbmFibGUgTU1QUyBNQUMgY29udHJvbCByZWdpc3RlcgorCQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMjEwLCAmbWFjZGF0YSk7CisJCQkJbWFjZGF0YSB8PSAweDA5OwkvL2JpdCAwLCAzCisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgMHgxMjEwLCBtYWNkYXRhKTsKKwkJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCUZyYW1lLlBzbXAgPSAxOworCQkJYnJlYWs7CisJfQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihGUkFNRV9QU01QX0FDVElPTiksICAgICAgJkZyYW1lLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJIVCAtIFNlbmRQU01QQWN0aW9uKCAlZCApICBcbiIsIEZyYW1lLlBzbXApKTsKK30KKworCisjZGVmaW5lIFJBRElPX01FQVNVUkVNRU5UX1JFUVVFU1RfQUNUSU9OCTAKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VECit7CisJVUNIQVIJUmVndWxhdG9yeUNsYXNzOworCVVDSEFSCUNoYW5uZWxOdW1iZXI7CisJVVNIT1JUCVJhbmRvbUludGVydmFsOworCVVTSE9SVAlNZWFzdXJlbWVudER1cmF0aW9uOworCVVDSEFSCU1lYXN1cmVtZW50TW9kZTsKKwlVQ0hBUiAgIEJTU0lEW01BQ19BRERSX0xFTl07CisJVUNIQVIJUmVwb3J0aW5nQ29uZGl0aW9uOworCVVDSEFSCVRocmVzaG9sZDsKKwlVQ0hBUiAgIFNTSURJRVsyXTsJCQkvLyAyIGJ5dGUKK30gQkVBQ09OX1JFUVVFU1Q7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRAoreworCVVDSEFSCUlEOworCVVDSEFSCUxlbmd0aDsKKwlVQ0hBUglUb2tlbjsKKwlVQ0hBUglSZXF1ZXN0TW9kZTsKKwlVQ0hBUglUeXBlOworfSBNRUFTVVJFTUVOVF9SRVE7CisKKworCisKK3ZvaWQgY29udmVydF9yZW9yZGVyaW5nX3BhY2tldF90b19wcmVBTVNEVV9vcl84MDJfM19wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTiAgVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlQTkRJU19QQUNLRVQJcFJ4UGt0OworCVVDSEFSCQkJSGVhZGVyODAyXzNbTEVOR1RIXzgwMl8zXTsKKworCS8vIDEuIGdldCA4MDIuMyBIZWFkZXIKKwkvLyAyLiByZW1vdmUgTExDCisJLy8gCQlhLiBwb2ludGVyIHBSeEJsay0+cERhdGEgdG8gcGF5bG9hZAorCS8vICAgICAgYi4gbW9kaWZ5IHBSeEJsay0+RGF0YVNpemUKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCVJUTVBfODAyXzExX1JFTU9WRV9MTENfQU5EX0NPTlZFUlRfVE9fODAyXzMocFJ4QmxrLCBIZWFkZXI4MDJfMyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCXBSeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKworCVJUUEtUX1RPX09TUEtUKHBSeFBrdCktPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKKwlSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5sZW4gPSBwUnhCbGstPkRhdGFTaXplOworCVJUUEtUX1RPX09TUEtUKHBSeFBrdCktPnRhaWwgPSBSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5kYXRhICsgUlRQS1RfVE9fT1NQS1QocFJ4UGt0KS0+bGVuOworCisJLy8KKwkvLyBjb3B5IDgwMi4zIGhlYWRlciwgaWYgbmVjZXNzYXJ5CisJLy8KKwlpZiAoIVJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpKQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisjaWZkZWYgTElOVVgKKwkJCU5kaXNNb3ZlTWVtb3J5KHNrYl9wdXNoKHBSeFBrdCwgTEVOR1RIXzgwMl8zKSwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7CisjZW5kaWYKKyNpZmRlZiBVQ09TCisJCQlOZGlzTW92ZU1lbW9yeShuZXRfcGt0X3B1c2gocFJ4UGt0LCBMRU5HVEhfODAyXzMpLCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zKTsKKyNlbmRpZgorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorfQorCisKKyNkZWZpbmUgSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKF9wQWQsIF9wUnhCbGssIF9mcm9tV2hpY2hCU1NJRCkJCVwKKwlkbwkJCQkJCQkJCQkJCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJaWYgKFJYX0JMS19URVNUX0ZMQUcoX3BSeEJsaywgZlJYX0FNU0RVKSkJCQkJCQlcCisgICAgCXsJCQkJCQkJCQkJCQkJCQkJXAorICAgIAkJSW5kaWNhdGVfQU1TRFVfUGFja2V0KF9wQWQsIF9wUnhCbGssIF9mcm9tV2hpY2hCU1NJRCk7CQlcCisgICAgCX0JCQkJCQkJCQkJCQkJCQkJXAorCQllbHNlIGlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9FQVApKQkJCQkJXAorCQl7CQkJCQkJCQkJCQkJCQkJCVwKKwkJCUluZGljYXRlX0VBUE9MX1BhY2tldChfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpOwkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJZWxzZQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJewkJCQkJCQkJCQkJCQkJCQlcCisgICAgCQlJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KF9wQWQsIF9wUnhCbGssIF9mcm9tV2hpY2hCU1NJRCk7CQlcCisgICAgCX0JCQkJCQkJCQkJCQkJCQkJXAorCX0gd2hpbGUgKDApOworCisKKworc3RhdGljIFZPSUQgYmFfZW5xdWV1ZV9yZW9yZGVyaW5nX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQQkFfUkVDX0VOVFJZCXBCQUVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlVSU5UMTYJU2VxdWVuY2UgPSAoVUlOVDE2KSBwUnhCbGstPnBIZWFkZXItPlNlcXVlbmNlOworCisJbXBkdV9ibGsgPSBiYV9tcGR1X2Jsa19hbGxvYyhwQWQpOworCWlmIChtcGR1X2JsayAhPSBOVUxMKQorCXsKKwkJLy8gV3JpdGUgUnhEIGJ1ZmZlciBhZGRyZXNzICYgYWxsb2NhdGVkIGJ1ZmZlciBsZW5ndGgKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisKKwkJbXBkdV9ibGstPlNlcXVlbmNlID0gU2VxdWVuY2U7CisKKwkJbXBkdV9ibGstPmJBTVNEVSA9IFJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpOworCisJCWNvbnZlcnRfcmVvcmRlcmluZ19wYWNrZXRfdG9fcHJlQU1TRFVfb3JfODAyXzNfcGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisKKwkJU1RBVFNfSU5DX1JYX1BBQ0tFVFMocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisKKyAgICAgICAgLy8KKwkJLy8gaXQgaXMgbmVjZXNzYXJ5IGZvciByZW9yZGVyaW5nIHBhY2tldCB0byByZWNvcmQKKwkJLy8gd2hpY2ggQlNTIGl0IGNvbWUgZnJvbQorCQkvLworCQlSVE1QX1NFVF9QQUNLRVRfSUYocFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKworCQltcGR1X2Jsay0+cFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCisJCWlmIChiYV9yZW9yZGVyaW5nX21wZHVfaW5zZXJ0c29ydGVkKCZwQkFFbnRyeS0+bGlzdCwgbXBkdV9ibGspID09IEZBTFNFKQorCQl7CisJCQkvLyBoYWQgYmVlbiBhbHJlYWR5IHdpdGhpbiByZW9yZGVyaW5nIGxpc3QKKwkJCS8vIGRvbid0IGluZGljYXRlCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKKwkJfQorCisJCUFTU0VSVCgoMDw9IHBCQUVudHJ5LT5saXN0LnFsZW4pICAmJiAocEJBRW50cnktPmxpc3QucWxlbiA8PSBwQkFFbnRyeS0+QkFXaW5TaXplKSk7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgICgiISEhICglZCkgQ2FuJ3QgYWxsb2NhdGUgcmVvcmRlcmluZyBtcGR1IGJsa1xuIiwKKwkJCQkJCQkJICAgcEJBRW50cnktPmxpc3QucWxlbikpOworCQkvKgorCQkgKiBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCisJCSAqIGFuZCByZWNldmluZyBtcGR1IHRvIHVwcGVyIGxheWVyCisJCSAqIG1ha2UgdGNwL2lwIHRvIHRha2UgY2FyZSByZW9yZGVyaW5nIG1lY2hhbmlzbQorCQkgKi8KKwkJLy9iYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksIFNlcXVlbmNlKTsKKworCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFNlcXVlbmNlOworCQlJTkRJQ0FURV9MRUdBQ1lfT1JfQU1TRFUocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbmRpY2F0ZSB0aGlzIHBhY2tldCB0byB1cHBlciBsYXllciBvciBwdXQgaXQgaW50byByZW9yZGVyaW5nIGJ1ZmZlcgorCisJUGFyYW1ldHJzOgorCQlwUnhCbGsgICAgICAgICA6IGNhcnJ5IG5lY2Vzc2FyeSBwYWNrZXQgaW5mbyA4MDIuMTEgZm9ybWF0CisJCUZyb21XaGljaEJTU0lEIDogdGhlIHBhY2tldCByZWNlaXZlZCBmcm9tIHdoaWNoIEJTUworCisJUmV0dXJuCToKKwkJCSAgbm9uZQorCisJTm90ZSAgICA6CisJICAgICAgICAgIHRoZSBwYWNrZXQgcXVldWVkIGludG8gcmVvcmRlcmluZyBidWZmZXIgbmVlZCB0byBjb3ZlciB0byA4MDIuMyBmb3JtYXQKKwkJCSAgb3IgcHJlX0FNU0RVIGZvcm1hdAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworVk9JRCBJbmRpY2F0ZV9BTVBEVV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVVTSE9SVAkJCQlJZHg7CisJUEJBX1JFQ19FTlRSWQkJcEJBRW50cnkgPSBOVUxMOworCVVJTlQxNgkJCQlTZXF1ZW5jZSA9IHBSeEJsay0+cEhlYWRlci0+U2VxdWVuY2U7CisJVUxPTkcJCQkJTm93MzI7CisJVUNIQVIJCQkJV2NpZCA9IHBSeEJsay0+cFJ4V0ktPldpcmVsZXNzQ2xpSUQ7CisJVUNIQVIJCQkJVElEID0gcFJ4QmxrLT5wUnhXSS0+VElEOworCisKKwlpZiAoIVJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpICYmICAocFJ4QmxrLT5EYXRhU2l6ZSA+IE1BWF9SWF9QS1RfTEVOKSkKKwl7CisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoV2NpZCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5CQVJlY1djaWRBcnJheVtUSURdOworCQlpZiAoSWR4ID09IDApCisJCXsKKwkJCS8qIFJlYyBCQSBTZXNzaW9uIGhhZCBiZWVuIHRvcm4gZG93biAqLworCQkJSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCQlyZXR1cm47CisJCX0KKwkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwl9CisJZWxzZQorCXsKKwkJLy8gaW1wb3NzaWJsZSAhISEKKwkJQVNTRVJUKDApOworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJQVNTRVJUKHBCQUVudHJ5KTsKKworCS8vIHVwZGF0ZSBsYXN0IHJ4IHRpbWUKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3czMik7CisKKwlwQkFFbnRyeS0+cmN2U2VxID0gU2VxdWVuY2U7CisKKworCWJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cyhwQWQsIHBCQUVudHJ5LCBOb3czMik7CisJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisKKwkvLworCS8vIFJlc2V0IExhc3QgSW5kaWNhdGUgU2VxdWVuY2UKKwkvLworCWlmIChwQkFFbnRyeS0+TGFzdEluZFNlcSA9PSBSRVNFVF9SQ1ZfU0VRKQorCXsKKwkJQVNTRVJUKChwQkFFbnRyeS0+bGlzdC5xbGVuID09IDApICYmIChwQkFFbnRyeS0+bGlzdC5uZXh0ID09IE5VTEwpKTsKKworCQkvLyByZXNldCByY3Ygc2VxdWVuY2Ugb2YgQkEgc2Vzc2lvbgorCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFNlcXVlbmNlOworCQlwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgPSBOb3czMjsKKwkJSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCXJldHVybjsKKwl9CisKKworCS8vCisJLy8gSS4gQ2hlY2sgaWYgaW4gb3JkZXIuCisJLy8KKwlpZiAoU0VRX1NURVBPTkUoU2VxdWVuY2UsIHBCQUVudHJ5LT5MYXN0SW5kU2VxLCBNQVhTRVEpKQorCXsKKwkJVVNIT1JUICBMYXN0SW5kU2VxOworCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7CisJCUlORElDQVRFX0xFR0FDWV9PUl9BTVNEVShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworIAkJTGFzdEluZFNlcSA9IGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwgcEJBRW50cnktPkxhc3RJbmRTZXEpOworCQlpZiAoTGFzdEluZFNlcSAhPSBSRVNFVF9SQ1ZfU0VRKQorCQl7CisJCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IExhc3RJbmRTZXE7CisJCX0KKwkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisJfQorCS8vCisJLy8gSUkuIERyb3AgRHVwbGljYXRlZCBQYWNrZXQKKwkvLworCWVsc2UgaWYgKFNlcXVlbmNlID09IHBCQUVudHJ5LT5MYXN0SW5kU2VxKQorCXsKKworCQkvLyBkcm9wIGFuZCByZWxlYXNlIHBhY2tldAorCQlwQkFFbnRyeS0+bkRyb3BQYWNrZXQrKzsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisJLy8KKwkvLyBJSUkuIERyb3AgT2xkIFJlY2VpdmVkIFBhY2tldAorCS8vCisJZWxzZSBpZiAoU0VRX1NNQUxMRVIoU2VxdWVuY2UsIHBCQUVudHJ5LT5MYXN0SW5kU2VxLCBNQVhTRVEpKQorCXsKKworCQkvLyBkcm9wIGFuZCByZWxlYXNlIHBhY2tldAorCQlwQkFFbnRyeS0+bkRyb3BQYWNrZXQrKzsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisJLy8KKwkvLyBJVi4gUmVjZWl2ZSBTZXF1ZW5jZSB3aXRoaW4gV2luZG93IFNpemUKKwkvLworCWVsc2UgaWYgKFNFUV9TTUFMTEVSKFNlcXVlbmNlLCAoKChwQkFFbnRyeS0+TGFzdEluZFNlcStwQkFFbnRyeS0+QkFXaW5TaXplKzEpKSAmIE1BWFNFUSksIE1BWFNFUSkpCisJeworCQliYV9lbnF1ZXVlX3Jlb3JkZXJpbmdfcGFja2V0KHBBZCwgcEJBRW50cnksIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCX0KKwkvLworCS8vIFYuIFJlY2VpdmUgc2VxIHN1cnBhc3NlcyBXaW4obGFzdHNlcSArIG5NU0RVKS4gU28gcmVmcmVzaCBhbGwgcmVvcmRlciBidWZmZXIKKwkvLworCWVsc2UKKwl7CisJCUxPTkcgV2luU3RhcnRTZXEsIFRtcFNlcTsKKworCisJCVRtcFNlcSA9IFNlcXVlbmNlIC0gKHBCQUVudHJ5LT5CQVdpblNpemUpIC0xOworCQlpZiAoVG1wU2VxIDwgMCkKKwkJeworCQkJVG1wU2VxID0gKE1BWFNFUSsxKSArIFRtcFNlcTsKKwkJfQorCQlXaW5TdGFydFNlcSA9IChUbXBTZXErMSkgJiBNQVhTRVE7CisJCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksIFdpblN0YXJ0U2VxKTsKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBXaW5TdGFydFNlcTsgLy9UbXBTZXE7CisKKwkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisKKwkJYmFfZW5xdWV1ZV9yZW9yZGVyaW5nX3BhY2tldChwQWQsIHBCQUVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKworCQlUbXBTZXEgPSBiYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2luX29yZGVyKHBBZCwgcEJBRW50cnksIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKwkJaWYgKFRtcFNlcSAhPSBSRVNFVF9SQ1ZfU0VRKQorCQl7CisJCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFRtcFNlcTsKKwkJfQorCX0KK30KKworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWY5MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGEuYwpAQCAtMCwwICsxLDI4MjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisjZGVmaW5lIE1BWF9UWF9JTl9UQlRUCQkoMTYpCisKKworVUNIQVIJU05BUF84MDJfMUhbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKK1VDSEFSCVNOQVBfQlJJREdFX1RVTk5FTFtdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4Zjh9OworLy8gQWRkIENpc2NvIEFpcm9uZXQgU05BUCBoZWFkZSBmb3IgQ0NYMiBzdXBwb3J0CitVQ0hBUglTTkFQX0FJUk9ORVRbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwfTsKK1VDSEFSCUNLSVBfTExDX1NOQVBbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAyfTsKK1VDSEFSCUVBUE9MX0xMQ19TTkFQW109IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDhlfTsKK1VDSEFSCUVBUE9MW10gPSB7MHg4OCwgMHg4ZX07CitVQ0hBUiAgIFRQSURbXSA9IHsweDgxLCAweDAwfTsgLyogVkxBTiByZWxhdGVkICovCisKK1VDSEFSCUlQWFtdID0gezB4ODEsIDB4Mzd9OworVUNIQVIJQVBQTEVfVEFMS1tdID0gezB4ODAsIDB4ZjN9OworVUNIQVIJUmF0ZUlkVG9QbGNwU2lnbmFsWzEyXSA9IHsKKwkgMCwgLyogUkFURV8xICovCTEsIC8qIFJBVEVfMiAqLyAJMiwgLyogUkFURV81XzUgKi8JMywgLyogUkFURV8xMSAqLwkvLyBzZWUgQkJQIHNwZWMKKwkxMSwgLyogUkFURV82ICovICAgMTUsIC8qIFJBVEVfOSAqLyAgICAxMCwgLyogUkFURV8xMiAqLyAgIDE0LCAvKiBSQVRFXzE4ICovCS8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAuMTQKKwkgOSwgLyogUkFURV8yNCAqLyAgMTMsIC8qIFJBVEVfMzYgKi8JOCwgLyogUkFURV80OCAqLyAgIDEyICAvKiBSQVRFXzU0ICovIH07IC8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAuMTQKKworVUNIQVIJIE9mZG1TaWduYWxUb1JhdGVJZFsxNl0gPSB7CisJUkFURV81NCwgIFJBVEVfNTQsCVJBVEVfNTQsICBSQVRFXzU0LAkvLyBPRkRNIFBMQ1AgU2lnbmFsID0gMCwgIDEsICAyLCAgMyByZXNwZWN0aXZlbHkKKwlSQVRFXzU0LCAgUkFURV81NCwJUkFURV81NCwgIFJBVEVfNTQsCS8vIE9GRE0gUExDUCBTaWduYWwgPSA0LCAgNSwgIDYsICA3IHJlc3BlY3RpdmVseQorCVJBVEVfNDgsICBSQVRFXzI0LAlSQVRFXzEyLCAgUkFURV82LAkvLyBPRkRNIFBMQ1AgU2lnbmFsID0gOCwgIDksICAxMCwgMTEgcmVzcGVjdGl2ZWx5CisJUkFURV81NCwgIFJBVEVfMzYsCVJBVEVfMTgsICBSQVRFXzksCS8vIE9GRE0gUExDUCBTaWduYWwgPSAxMiwgMTMsIDE0LCAxNSByZXNwZWN0aXZlbHkKK307CisKK1VDSEFSCSBPZmRtUmF0ZVRvUnh3aU1DU1sxMl0gPSB7CisJMCwgIDAsCTAsICAwLAorCTAsICAxLAkyLCAgMywJLy8gT0ZETSByYXRlIDYsOSwxMiwxOCA9IHJ4d2kgbWNzIDAsMSwyLDMKKwk0LCAgNSwJNiwgIDcsCS8vIE9GRE0gcmF0ZSAyNCwzNiw0OCw1NCA9IHJ4d2kgbWNzIDQsNSw2LDcKK307CitVQ0hBUgkgUnh3aU1DU1RvT2ZkbVJhdGVbMTJdID0geworCVJBVEVfNiwgIFJBVEVfOSwJUkFURV8xMiwgIFJBVEVfMTgsCisJUkFURV8yNCwgIFJBVEVfMzYsCVJBVEVfNDgsICBSQVRFXzU0LAkvLyBPRkRNIHJhdGUgNiw5LDEyLDE4ID0gcnh3aSBtY3MgMCwxLDIsMworCTQsICA1LAk2LCAgNywJLy8gT0ZETSByYXRlIDI0LDM2LDQ4LDU0ID0gcnh3aSBtY3MgNCw1LDYsNworfTsKKworY2hhciogICBNQ1NUb01icHNbXSA9IHsiMU1icHMiLCIyTWJwcyIsIjUuNU1icHMiLCIxMU1icHMiLCIwNk1icHMiLCIwOU1icHMiLCIxMk1icHMiLCIxOE1icHMiLCIyNE1icHMiLCIzNk1icHMiLCI0OE1icHMiLCI1NE1icHMiLCJNTS0wIiwiTU0tMSIsIk1NLTIiLCJNTS0zIiwiTU0tNCIsIk1NLTUiLCJNTS02IiwiTU0tNyIsIk1NLTgiLCJNTS05IiwiTU0tMTAiLCJNTS0xMSIsIk1NLTEyIiwiTU0tMTMiLCJNTS0xNCIsIk1NLTE1IiwiTU0tMzIiLCJlZTEiLCJlZTIiLCJlZTMifTsKKworVUNIQVIgZGVmYXVsdF9jd21pbltdPXtDV19NSU5fSU5fQklUUywgQ1dfTUlOX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTLTEsIENXX01JTl9JTl9CSVRTLTJ9OworLy9VQ0hBUiBkZWZhdWx0X2N3bWF4W109e0NXX01BWF9JTl9CSVRTLCBDV19NQVhfSU5fQklUUywgQ1dfTUlOX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTLTF9OworVUNIQVIgZGVmYXVsdF9zdGFfYWlmc25bXT17Myw3LDIsMn07CisKK1VDSEFSIE1hcFVzZXJQcmlvcml0eVRvQWNjZXNzQ2F0ZWdvcnlbOF0gPSB7UUlEX0FDX0JFLCBRSURfQUNfQkssIFFJRF9BQ19CSywgUUlEX0FDX0JFLCBRSURfQUNfVkksIFFJRF9BQ19WSSwgUUlEX0FDX1ZPLCBRSURfQUNfVk99OworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlBUEkgZm9yIE1MTUUgdG8gdHJhbnNtaXQgbWFuYWdlbWVudCBmcmFtZSB0byBBUCAoQlNTIE1vZGUpCisJb3Igc3RhdGlvbiAoSUJTUyBNb2RlKQorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJUG9pbnRlciB0byB0aGUgb3V0Z29pbmcgODAyLjExIGZyYW1lCisJCUxlbmd0aAkJU2l6ZSBvZiBvdXRnb2luZyBtYW5hZ2VtZW50IGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwkJTkRJU19TVEFUVVNfUEVORElORworCQlORElTX1NUQVRVU19TVUNDRVNTCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE1pbmlwb3J0TU1SZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVJTlQJCQlMZW5ndGgpCit7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJTkRJU19TVEFUVVMgIAlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVMT05HCSAJCUZyZWVOdW07CisJVUNIQVIJCQlJcnFTdGF0ZTsKKwlVQ0hBUgkJCXJ0bXBId0hkcltUWElORk9fU0laRSArIFRYV0lfU0laRV07IC8vUlRNUF9IV19IRFJfTEVOXTsKKworCUFTU0VSVChMZW5ndGggPD0gTUdNVF9ETUFfQlVGRkVSX1NJWkUpOworCisJUXVlSWR4PTM7CisKKwkvLyAyODYwQyB1c2UgVHggUmluZworCisJSXJxU3RhdGUgPSBwQWQtPmlycV9kaXNhYmxlZDsKKworCWRvCisJeworCQkvLyBSZXNldCBpcyBpbiBwcm9ncmVzcywgc3RvcCBpbW1lZGlhdGVseQorCQlpZiAoIFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJCSBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCl8fAorCQkJICFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKQorCQl7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJYnJlYWs7CisJCX0KKworCQkvLyBDaGVjayBGcmVlIHByaW9yaXR5IHF1ZXVlCisJCS8vIFNpbmNlIHdlIHVzZSBQQkYgUXVldWUyIGZvciBtYW5hZ2VtZW50IGZyYW1lLiAgSXRzIGNvcnJlc3BvbmRpbmcgRE1BIHJpbmcgc2hvdWxkIGJlIHVzaW5nIFR4UmluZy4KKworCQkvLyAyODYwQyB1c2UgVHggUmluZworCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXsKKwkJCUZyZWVOdW0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGcmVlTnVtID0gR0VUX01HTVRSSU5HX0ZSRUVOTyhwQWQpOworCQl9CisKKwkJaWYgKChGcmVlTnVtID4gMCkpCisJCXsKKwkJCS8vIFdlIG5lZWQgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgcnRtcCBoYXJkd2FyZSBoZWFkZXIuIGkuZS4sIFR4V0kgZm9yIFJUMjg2MCBhbmQgVHhJbmZvK1R4V0kgZm9yIFJUMjg3MAorCQkJTmRpc1plcm9NZW1vcnkoJnJ0bXBId0hkciwgKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSk7CisJCQlTdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBQYWNrZXQsIChQVUNIQVIpJnJ0bXBId0hkciwgKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSwgcERhdGEsIExlbmd0aCk7CisJCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJNaW5pcG9ydE1NUmVxdWVzdCAoZXJyb3I6OiBjYW4ndCBhbGxvY2F0ZSBORElTIFBBQ0tFVClcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLy9wQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJLy9wQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfMjsKKworCisJCQlTdGF0dXMgPSBNbG1lSGFyZFRyYW5zbWl0KHBBZCwgUXVlSWR4LCBwUGFja2V0KTsKKwkJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQlSVE1QRnJlZU5kaXNQYWNrZXQocEFkLCBwUGFja2V0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQrKzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlFpZHgoJWQpLCBub3QgZW5vdWdoIHNwYWNlIGluIE1nbXRSaW5nLCBNZ210UmluZ0Z1bGxDb3VudD0lbGQhXG4iLAorCQkJCQkJCQkJCVF1ZUlkeCwgcEFkLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCkpOworCQl9CisKKwl9IHdoaWxlIChGQUxTRSk7CisKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworCitORElTX1NUQVRVUyBNbG1lRGF0YUhhcmRUcmFuc21pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUglRdWVJZHgsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisjZGVmaW5lIE1BWF9EQVRBTU1fUkVUUlkJMworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUFQSSBmb3IgTUxNRSB0byB0cmFuc21pdCBtYW5hZ2VtZW50IGZyYW1lIHRvIEFQIChCU1MgTW9kZSkKKwlvciBzdGF0aW9uIChJQlNTIE1vZGUpCisKKwlBcmd1bWVudHM6CisJCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlQb2ludGVyIHRvIHRoZSBvdXRnb2luZyA4MDIuMTEgZnJhbWUKKwkJTGVuZ3RoCQlTaXplIG9mIG91dGdvaW5nIG1hbmFnZW1lbnQgZnJhbWUKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQorCQlORElTX1NUQVRVU19QRU5ESU5HCisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTWluaXBvcnREYXRhTU1SZXF1ZXN0KAorCQkJCQkJCSBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCQkgSU4gIFVDSEFSICAgICAgICAgICBRdWVJZHgsCisJCQkJCQkJIElOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJCQkJCQkJIElOICBVSU5UICAgICAgICAgICAgTGVuZ3RoKQoreworCVBORElTX1BBQ0tFVCAgICBwUGFja2V0OworCU5ESVNfU1RBVFVTICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVMT05HICAgIEZyZWVOdW07CisJaW50IAlyZXRyeSA9IDA7CisJVUNIQVIgICAgICAgICAgIElycVN0YXRlOworCVVDSEFSCQkJcnRtcEh3SGRyW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsgLy9SVE1QX0hXX0hEUl9MRU5dOworCisJQVNTRVJUKExlbmd0aCA8PSBNR01UX0RNQV9CVUZGRVJfU0laRSk7CisKKwkvLyAyODYwQyB1c2UgVHggUmluZworCUlycVN0YXRlID0gcEFkLT5pcnFfZGlzYWJsZWQ7CisKKwlkbworCXsKKwkJLy8gUmVzZXQgaXMgaW4gcHJvZ3Jlc3MsIHN0b3AgaW1tZWRpYXRlbHkKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJCSBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCl8fAorCQkJIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCQlicmVhazsKKwkJfQorCisJCS8vIENoZWNrIEZyZWUgcHJpb3JpdHkgcXVldWUKKwkJLy8gU2luY2Ugd2UgdXNlIFBCRiBRdWV1ZTIgZm9yIG1hbmFnZW1lbnQgZnJhbWUuICBJdHMgY29ycmVzcG9uZGluZyBETUEgcmluZyBzaG91bGQgYmUgdXNpbmcgVHhSaW5nLgorCisJCS8vIDI4NjBDIHVzZSBUeCBSaW5nCisKKwkJLy8gZnJlZSBUeChRdWVJZHgpIHJlc291cmNlcworCQlGcmVlTnVtID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOworCisJCWlmICgoRnJlZU51bSA+IDApKQorCQl7CisJCQkvLyBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgZm9yIHJ0bXAgaGFyZHdhcmUgaGVhZGVyLiBpLmUuLCBUeFdJIGZvciBSVDI4NjAgYW5kIFR4SW5mbytUeFdJIGZvciBSVDI4NzAKKwkJCU5kaXNaZXJvTWVtb3J5KCZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSkpOworCQkJU3RhdHVzID0gUlRNUEFsbG9jYXRlTmRpc1BhY2tldChwQWQsICZwUGFja2V0LCAoUFVDSEFSKSZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSksIHBEYXRhLCBMZW5ndGgpOworCQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiTWluaXBvcnRNTVJlcXVlc3QgKGVycm9yOjogY2FuJ3QgYWxsb2NhdGUgTkRJUyBQQUNLRVQpXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCS8vcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzI7CisKKworCQkJU3RhdHVzID0gTWxtZURhdGFIYXJkVHJhbnNtaXQocEFkLCBRdWVJZHgsIHBQYWNrZXQpOworCQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCVJUTVBGcmVlTmRpc1BhY2tldChwQWQsIHBQYWNrZXQpOworCQkJcmV0cnkgPSBNQVhfREFUQU1NX1JFVFJZOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0cnkgKys7CisKKwkJCXByaW50aygicmV0cnkgJWRcbiIsIHJldHJ5KTsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQrKzsKKworCQkJaWYgKHJldHJ5ID49IE1BWF9EQVRBTU1fUkVUUlkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUWlkeCglZCksIG5vdCBlbm91Z2ggc3BhY2UgaW4gRGF0YVJpbmcsIE1nbXRSaW5nRnVsbENvdW50PSVsZCFcbiIsCisJCQkJCQkJCQkJCVF1ZUlkeCwgcEFkLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCkpOworCQkJfQorCQl9CisKKwl9IHdoaWxlIChyZXRyeSA8IE1BWF9EQVRBTU1fUkVUUlkpOworCisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKworCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSB0cmFuc21pdCBmdW5jdGlvbgorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwQnVmZmVyIAlQb2ludGVyIHRvCW1lbW9yeSBvZiBvdXRnb2luZyBmcmFtZQorCQlMZW5ndGgJCVNpemUgb2Ygb3V0Z29pbmcgbWFuYWdlbWVudCBmcmFtZQorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19GQUlMVVJFCisJCU5ESVNfU1RBVFVTX1BFTkRJTkcKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCWlmICgocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKQorI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisJCSkKKwl7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCQlyZXR1cm4gTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKHBBZCxRdWVJZHgscFBhY2tldCk7CisKK30KKworTkRJU19TVEFUVVMgTWxtZURhdGFIYXJkVHJhbnNtaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCWlmICgocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKQorI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisJCSkKKwl7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworI2lmZGVmIFJUMjg3MAorCXJldHVybiBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcocEFkLFF1ZUlkeCxwUGFja2V0KTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KK30KKworCisKKworCitORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCVBBQ0tFVF9JTkZPIAlQYWNrZXRJbmZvOworCVBVQ0hBUgkJCXBTcmNCdWZWQTsKKwlVSU5UCQkJU3JjQnVmTGVuOworCVBIRUFERVJfODAyXzExCXBIZWFkZXJfODAyXzExOworCUJPT0xFQU4gCQliQWNrUmVxdWlyZWQsIGJJbnNlcnRUaW1lc3RhbXA7CisJVUNIQVIJCQlNbG1lUmF0ZTsKKwlQVFhXSV9TVFJVQyAJcEZpcnN0VHhXSTsKKwlNQUNfVEFCTEVfRU5UUlkJKnBNYWNFbnRyeSA9IE5VTEw7CisKKwlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwUGFja2V0LCAmUGFja2V0SW5mbywgJnBTcmNCdWZWQSwgJlNyY0J1Zkxlbik7CisKKwkvLyBNYWtlIHN1cmUgTUdNVCByaW5nIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgdGhyZWFkcworLy8gc2FtcGxlLCBmb3IgSVJRIExPQ0sgLT4gU0VNIExPQ0sKKy8vCUlycVN0YXRlID0gcEFkLT5pcnFfZGlzYWJsZWQ7CisvLwlpZiAoIUlycVN0YXRlKQorCQlSVE1QX1NFTV9MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisKKworCWlmIChwU3JjQnVmVkEgPT0gTlVMTCkKKwl7CisJCS8vIFRoZSBidWZmZXIgc2hvdWxkbid0IGJlIE5VTEwKKy8vCQlpZiAoIUlycVN0YXRlKQorCQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBvdXRnb2luZyBmcmFtZSBhbHdheXMgd2FrZXVwIFBIWSB0byBwcmV2ZW50IGZyYW1lIGxvc3QKKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlwRmlyc3RUeFdJID0gKFBUWFdJX1NUUlVDKShwU3JjQnVmVkEgKyAgVFhJTkZPX1NJWkUpOworCXBIZWFkZXJfODAyXzExID0gKFBIRUFERVJfODAyXzExKSAocFNyY0J1ZlZBICsgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpOyAvL1RYV0lfU0laRSk7CisKKwlpZiAocEhlYWRlcl84MDJfMTEtPkFkZHIxWzBdICYgMHgwMSkKKwl7CisJCU1sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKKwl9CisJZWxzZQorCXsKKwkJTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwl9CisKKwkvLyBWZXJpZnkgTWxtZSByYXRlIGZvciBhIC8gZyBiYW5kcy4KKwlpZiAoKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA+IDE0KSAmJiAoTWxtZVJhdGUgPCBSQVRFXzYpKSAvLyAxMUEgYmFuZAorCQlNbG1lUmF0ZSA9IFJBVEVfNjsKKworCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkgJiYKKwkJKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfUU9TX05VTEwpKQorCXsKKwkJcE1hY0VudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwSGVhZGVyXzgwMl8xMS0+QWRkcjEpOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBGaXhlZCBXNTIgd2l0aCBBY3Rpdml0eSBzY2FuIGlzc3VlIGluIEFCR19NSVhFRCBhbmQgQUJHTl9NSVhFRCBtb2RlLgorCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdfTUlYRUQKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCXx8IHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHTl9NSVhFRAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkpCisJCXsKKwkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IDE7CisJCQllbHNlCisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAwOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8KKwkvLyBTaG91bGQgbm90IGJlIGhhcmQgY29kZSB0byBzZXQgUHdyTWdtdCB0byAwIChQV1JfQUNUSVZFKQorCS8vIFNuaWNlIGl0J3MgYmVlbiBzZXQgdG8gMCB3aGlsZSBvbiBNZ3RNYWNIZWFkZXJJbml0CisJLy8gQnkgdGhlIHdheSB0aGlzIHdpbGwgY2F1c2UgZnJhbWUgdG8gYmUgc2VuZCBvbiBQV1JfU0FWRSBmYWlsZWQuCisJLy8KKwkvLyBwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IDA7IC8vIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpOworCS8vCisJLy8gSW4gV01NLVVBUFNELCBtbG1lIGZyYW1lIHNob3VsZCBiZSBzZXQgcHNtIGFzIHBvd2VyIHNhdmluZyBidXQgcHJvYmUgcmVxdWVzdCBmcmFtZQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIC8vIERhdGEtTnVsbCBwYWNrZXRzIGFsc2UgcGFzcyB0aHJvdWdoIE1NUmVxdWVzdCBpbiBSVDI4NjAsIGhvd2V2ZXIsIHdlIGhvcGUgY29udHJvbCB0aGUgcHNtIGJpdCB0byBwYXNzIEFQU0QKKwlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlICE9IEJUWVBFX0RBVEEpICYmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSAhPSBCVFlQRV9DTlRMKSkKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJgorCQkJKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQUNUSU9OKSkKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Qd3JNZ210ID0gUFdSX1NBVkU7CisJCWVsc2UKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Qd3JNZ210ID0gUFdSX0FDVElWRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwliSW5zZXJ0VGltZXN0YW1wID0gRkFMU0U7CisJaWYgKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlID09IEJUWVBFX0NOVEwpIC8vIG11c3QgYmUgUFMtUE9MTAorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJLy9TZXQgUE0gYml0IGluIHBzLXBvbGwsIHRvIGZpeCBXTEsgMS4yICBQb3dlclNhdmVNb2RlX2V4dCBmYWlsdXJlIGlzc3VlLgorCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1BTX1BPTEwpKQorCQl7CisJCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCWJBY2tSZXF1aXJlZCA9IEZBTFNFOworCX0KKwllbHNlIC8vIEJUWVBFX01HTVQgb3IgQlRZUEVfREFUQShtdXN0IGJlIE5VTEwgZnJhbWUpCisJeworCQkvL3BBZC0+U2VxdWVuY2UrKzsKKwkJLy9wSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlNlcXVlbmNlOworCisJCWlmIChwSGVhZGVyXzgwMl8xMS0+QWRkcjFbMF0gJiAweDAxKSAvLyBNVUxUSUNBU1QsIEJST0FEQ0FTVAorCQl7CisJCQliQWNrUmVxdWlyZWQgPSBGQUxTRTsKKwkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9IDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQliQWNrUmVxdWlyZWQgPSBUUlVFOworCQkJcEhlYWRlcl84MDJfMTEtPkR1cmF0aW9uID0gUlRNUENhbGNEdXJhdGlvbihwQWQsIE1sbWVSYXRlLCAxNCk7CisJCQlpZiAocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9QUk9CRV9SU1ApCisJCQl7CisJCQkJYkluc2VydFRpbWVzdGFtcCA9IFRSVUU7CisJCQl9CisJCX0KKwl9CisKKwlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlNlcXVlbmNlKys7CisJaWYgKHBBZC0+U2VxdWVuY2UgPjB4ZmZmKQorCQlwQWQtPlNlcXVlbmNlID0gMDsKKworCS8vIEJlZm9yZSByYWRhciBkZXRlY3Rpb24gZG9uZSwgbWdtdCBmcmFtZSBjYW4gbm90IGJlIHNlbnQgYnV0IHByb2JlIHJlcQorCS8vIEJlY2F1c2Ugd2UgbmVlZCB0byB1c2UgcHJvYmUgcmVxIHRvIHRyaWdnZXIgZHJpdmVyIHRvIHNlbmQgcHJvYmUgcmVxIGluIHBhc3NpdmUgc2NhbgorCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgIT0gU1VCVFlQRV9QUk9CRV9SRVEpCisJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkmJiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiTWxtZUhhcmRUcmFuc21pdCAtLT4gcmFkYXIgZGV0ZWN0IG5vdCBpbiBub3JtYWwgbW9kZSAhISFcbiIpKTsKKy8vCQlpZiAoIUlycVN0YXRlKQorCQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcEhlYWRlcl84MDJfMTEsIERJUl9XUklURSwgRkFMU0UpOworI2VuZGlmCisKKwkvLworCS8vIGZpbGwgc2NhdHRlci1hbmQtZ2F0aGVyIGJ1ZmZlciBsaXN0IGludG8gVFhELiBJbnRlcm5hbGx5IGNyZWF0ZWQgTkRJUyBQQUNLRVQKKwkvLyBzaG91bGQgYWx3YXlzIGhhcyBvbmx5IG9uZSBvaHlzaWNhbCBidWZmZXIsIGFuZCB0aGUgd2hvbGUgZnJhbWUgc2l6ZSBlcXVhbHMKKwkvLyB0byB0aGUgZmlyc3Qgc2NhdHRlciBidWZmZXIgc2l6ZQorCS8vCisKKwkvLyBJbml0aWFsaXplIFRYIERlc2NyaXB0b3IKKwkvLyBGb3IgaW50ZXItZnJhbWUgZ2FwLCB0aGUgbnVtYmVyIGlzIGZvciB0aGlzIGZyYW1lIGFuZCBuZXh0IGZyYW1lCisJLy8gRm9yIE1MTUUgcmF0ZSwgd2Ugd2lsbCBmaXggYXMgMk1iIHRvIG1hdGNoIG90aGVyIHZlbmRvcidzIGltcGxlbWVudAorLy8JcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAxOworCisvLyBtYW5hZ2VtZW50IGZyYW1lIGRvZXNuJ3QgbmVlZCBlbmNyeXB0aW9uLiBzbyB1c2UgUkVTRVJWRURfV0NJRCBubyBtYXR0ZXIgdSBhcmUgc2VuZGluZyB0byBzcGVjaWZpYyB3Y2lkIG9yIG5vdC4KKwlpZiAocE1hY0VudHJ5ID09IE5VTEwpCisJeworCQlSVE1QV3JpdGVUeFdJKHBBZCwgcEZpcnN0VHhXSSwgRkFMU0UsIEZBTFNFLCBiSW5zZXJ0VGltZXN0YW1wLCBGQUxTRSwgYkFja1JlcXVpcmVkLCBGQUxTRSwKKwkJMCwgUkVTRVJWRURfV0NJRCwgKFNyY0J1ZkxlbiAtIFRYSU5GT19TSVpFIC0gVFhXSV9TSVpFKSwgUElEX01HTVQsIDAsICAoVUNIQVIpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywgSUZTX0JBQ0tPRkYsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKKwl9CisJZWxzZQorCXsKKwkJUlRNUFdyaXRlVHhXSShwQWQsIHBGaXJzdFR4V0ksIEZBTFNFLCBGQUxTRSwKKwkJCQkJYkluc2VydFRpbWVzdGFtcCwgRkFMU0UsIGJBY2tSZXF1aXJlZCwgRkFMU0UsCisJCQkJCTAsIHBNYWNFbnRyeS0+QWlkLCAoU3JjQnVmTGVuIC0gVFhJTkZPX1NJWkUgLSBUWFdJX1NJWkUpLAorCQkJCQlwTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MsIDAsCisJCQkJCShVQ0hBUilwTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MsCisJCQkJCUlGU19CQUNLT0ZGLCBGQUxTRSwgJnBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlKTsKKwl9CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcEZpcnN0VHhXSSwgVFlQRV9UWFdJKTsKKyNlbmRpZgorCisJLy8gTm93IGRvIGhhcmR3YXJlLWRlcGVuZWQga2ljayBvdXQuCisJSEFMX0tpY2tPdXRNZ210VHgocEFkLCBRdWVJZHgsIHBQYWNrZXQsIHBTcmNCdWZWQSwgU3JjQnVmTGVuKTsKKworCS8vIE1ha2Ugc3VyZSB0byByZWxlYXNlIE1HTVQgcmluZyByZXNvdXJjZQorLy8JaWYgKCFJcnFTdGF0ZSkKKwkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlOZXcgRGVRdWV1ZSBQcm9jZWR1cmVzLgorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgREVRVUVVRV9MT0NLKGxvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncykgCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKGJJbnRDb250ZXh0ID09IEZBTFNFKQkJCQkJCVwKKwkJCQlSVE1QX0lSUV9MT0NLKChsb2NrKSwgSXJxRmxhZ3MpOwkJXAorCQkJfXdoaWxlKDApCisKKyNkZWZpbmUgREVRVUVVRV9VTkxPQ0sobG9jaywgYkludENvbnRleHQsIElycUZsYWdzKQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChiSW50Q29udGV4dCA9PSBGQUxTRSkJCQkJCQlcCisJCQkJCVJUTVBfSVJRX1VOTE9DSygobG9jayksIElycUZsYWdzKTsJXAorCQkJfXdoaWxlKDApCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlUeCBQYXRoIGRlc2lnbiBhbGdvcml0aG06CisJCUJhc2ljYWxseSwgd2UgZGl2aWRlIHRoZSBwYWNrZXRzIGludG8gZm91ciB0eXBlcywgQnJvYWRjYXN0L011bHRpY2FzdCwgMTFOIFJhdGUoQU1QRFUsIEFNU0RVLCBOb3JtYWwpLCBCL0cgUmF0ZShBUkFMSU5LLCBOb3JtYWwpLAorCQlTcGVjaWZpYyBQYWNrZXQgVHlwZS4gRm9sbG93aW5nIHNob3cgdGhlIGNsYXNzaWZpY2F0aW9uIHJ1bGUgYW5kIHBvbGljeSBmb3IgZWFjaCBraW5kcyBvZiBwYWNrZXRzLgorCQkJCUNsYXNzaWZpY2F0aW9uIFJ1bGU9PgorCQkJCQlNdWx0aWNhc3Q6ICgqYWRkcjEgJiAweDAxKSA9PSAweDAxCisJCQkJCVNwZWNpZmljIDogYkRIQ1BGcmFtZSwgYkFSUEZyYW1lLCBiRUFQT0xGcmFtZSwgZXRjLgorCQkJCQkxMU4gUmF0ZSA6IElmIHBlZXIgc3VwcG9ydCBIVAorCQkJCQkJCQkoMSkuQU1QRFUgIC0tIElmIFRYQkEgaXMgbmVnb3RpYXRlZC4KKwkJCQkJCQkJKDIpLkFNU0RVICAtLSBJZiBBTVNEVSBpcyBjYXBhYmxlIGZvciBib3RoIHBlZXIgYW5kIG91cnNlbGYuCisJCQkJCQkJCQkJCSopLiBBTVNEVSBjYW4gZW1iZWRkZWQgaW4gYSBBTVBEVSwgYnV0IG5vdyB3ZSBkaWRuJ3Qgc3VwcG9ydCBpdC4KKwkJCQkJCQkJKDMpLk5vcm1hbCAtLSBPdGhlciBwYWNrZXRzIHdoaWNoIHNlbmQgYXMgMTFuIHJhdGUuCisKKwkJCQkJQi9HIFJhdGUgOiBJZiBwZWVyIGlzIGIvZyBvbmx5LgorCQkJCQkJCQkoMSkuQVJBTElOSy0tIElmIGJvdGggb2YgcGVlci91cyBzdXBwcm90IFJhbGluayBwcm9wcmlldGFyeSBBZ2dyZWdhdGlvbiBhbmQgdGhlIFR4UmF0ZSBpcyBsYXJnZSB0aGFuIFJBVEVfNgorCQkJCQkJCQkoMikuTm9ybWFsIC0tIE90aGVyIHBhY2tldHMgd2hpY2ggc2VuZCBhcyBiL2cgcmF0ZS4KKwkJCQkJRnJhZ21lbnQ6CisJCQkJCQkJCVRoZSBwYWNrZXQgbXVzdCBiZSB1bmljYXN0LCBOT1QgQS1SQUxJTkssIE5PVCBBLU1TRFUsIE5PVCAxMW4sIHRoZW4gY2FuIGNvbnNpZGVyIGFib3V0IGZyYWdtZW50LgorCisJCQkJQ2xhc3NpZmllZCBQYWNrZXQgSGFuZGxlIFJ1bGU9PgorCQkJCQlNdWx0aWNhc3Q6CisJCQkJCQkJCU5vIEFDSywgCQkvL3BUeEJsay0+YkFja1JlcXVpcmVkID0gRkFMU0U7CisJCQkJCQkJCU5vIFdNTSwgCQkvL3BUeEJsay0+YldNTSA9IEZBTFNFOworCQkJCQkJCQlObyBwaWdneWJhY2ssICAgLy9wVHhCbGstPmJQaWdneUJhY2sgPSBGQUxTRTsKKwkJCQkJCQkJRm9yY2UgTG93UmF0ZSwgIC8vcFR4QmxrLT5iRm9yY2VMb3dSYXRlID0gVFJVRTsKKwkJCQkJU3BlY2lmaWMgOglCYXNpY2FsbHksIGZvciBzcGVjaWZpYyBwYWNrZXQsIHdlIHNob3VsZCBoYW5kbGUgaXQgc3BlY2lmaWNhbGx5LCBidXQgbm93IGFsbCBzcGVjaWZpYyBwYWNrZXRzIGFyZSB1c2UKKwkJCQkJCQkJCXRoZSBzYW1lIHBvbGljeSB0byBoYW5kbGUgaXQuCisJCQkJCQkJCUZvcmNlIExvd1JhdGUsICAvL3BUeEJsay0+YkZvcmNlTG93UmF0ZSA9IFRSVUU7CisKKwkJCQkJMTFOIFJhdGUgOgorCQkJCQkJCQlObyBwaWdneWJhY2ssCS8vcFR4QmxrLT5iUGlnZ3lCYWNrID0gRkFMU0U7CisKKwkJCQkJCQkJKDEpLkFNU0RVCisJCQkJCQkJCQlwVHhCbGstPmJXTU0gPSBUUlVFOworCQkJCQkJCQkoMikuQU1QRFUKKwkJCQkJCQkJCXBUeEJsay0+YldNTSA9IFRSVUU7CisJCQkJCQkJCSgzKS5Ob3JtYWwKKworCQkJCQlCL0cgUmF0ZSA6CisJCQkJCQkJCSgxKS5BUkFMSU5LCisKKwkJCQkJCQkJKDIpLk5vcm1hbAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBVQ0hBUiBUeFBrdENsYXNzaWZpY2F0aW9uKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFBORElTX1BBQ0tFVCAgcFBhY2tldCkKK3sKKwlVQ0hBUgkJCVR4RnJhbWVUeXBlID0gVFhfVU5LT1dOX0ZSQU1FOworCVVDSEFSCQkJV2NpZDsKKwlNQUNfVEFCTEVfRU5UUlkJKnBNYWNFbnRyeSA9IE5VTEw7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJQk9PTEVBTgkJCWJIVFJhdGUgPSBGQUxTRTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVdjaWQgPSBSVE1QX0dFVF9QQUNLRVRfV0NJRChwUGFja2V0KTsKKwlpZiAoV2NpZCA9PSBNQ0FTVF9XQ0lEKQorCXsJLy8gSGFuZGxlIGZvciBSQSBpcyBCcm9hZGNhc3QvTXVsdGljYXN0IEFkZHJlc3MuCisJCXJldHVybiBUWF9NQ0FTVF9GUkFNRTsKKwl9CisKKwkvLyBIYW5kbGUgZm9yIHVuaWNhc3QgcGFja2V0cworCXBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdOworCWlmIChSVE1QX0dFVF9QQUNLRVRfTE9XUkFURShwUGFja2V0KSkKKwl7CS8vIEl0J3MgYSBzcGVjaWZpYyBwYWNrZXQgbmVlZCB0byBmb3JjZSBsb3cgcmF0ZSwgaS5lLiwgYkRIQ1BGcmFtZSwgYkVBUE9MRnJhbWUsIGJXQUlGcmFtZQorCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKKwl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJZWxzZSBpZiAoSVNfSFRfUkFURShwTWFjRW50cnkpKQorCXsJLy8gaXQncyBhIDExbiBjYXBhYmxlIHBhY2tldAorCisJCS8vIERlcGVuZHMgb24gSFRQaHlNb2RlIHRvIGNoZWNrIGlmIHRoZSBwZWVyIHN1cHBvcnQgdGhlIEhUUmF0ZSB0cmFuc21pc3Npb24uCisJCS8vIAlDdXJyZW50bHkgZGlkbid0IHN1cHBvcnQgQS1NU0RVIGVtYmVkZGVkIGluIEEtTVBEVQorCQliSFRSYXRlID0gVFJVRTsKKwkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9NT1JFREFUQShwUGFja2V0KSB8fCAocE1hY0VudHJ5LT5Qc01vZGUgPT0gUFdSX1NBVkUpKQorCQkJVHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7CisjaWZkZWYgVUFQU0RfQVBfU1VQUE9SVAorCQllbHNlIGlmIChSVE1QX0dFVF9QQUNLRVRfRU9TUChwUGFja2V0KSkKKwkJCVR4RnJhbWVUeXBlID0gVFhfTEVHQUNZX0ZSQU1FOworI2VuZGlmIC8vIFVBUFNEX0FQX1NVUFBPUlQgLy8KKwkJZWxzZSBpZigocE1hY0VudHJ5LT5UWEJBYml0bWFwICYgKDE8PChSVE1QX0dFVF9QQUNLRVRfVVAocFBhY2tldCkpKSkgIT0gMCkKKwkJCXJldHVybiBUWF9BTVBEVV9GUkFNRTsKKwkJZWxzZSBpZihDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCkpCisJCQlyZXR1cm4gVFhfQU1TRFVfRlJBTUU7CisJCWVsc2UKKwkJCVR4RnJhbWVUeXBlID0gVFhfTEVHQUNZX0ZSQU1FOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwllbHNlCisJewkvLyBpdCdzIGEgbGVnYWN5IGIvZyBwYWNrZXQuCisJCWlmICgoQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19BR0dSRUdBVElPTl9DQVBBQkxFKSAmJiBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKSAmJgorCQkJKFJUTVBfR0VUX1BBQ0tFVF9UWFJBVEUocFBhY2tldCkgPj0gUkFURV82KSAmJgorCQkJKCEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAmJiBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKSkpKQorCQl7CS8vIGlmIHBlZXIgc3VwcG9ydCBSYWxpbmsgQWdncmVnYXRpb24sIHdlIHVzZSBpdC4KKwkJCVR4RnJhbWVUeXBlID0gVFhfUkFMSU5LX0ZSQU1FOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7CisJCX0KKwl9CisKKwkvLyBDdXJyZW50bHksIG91ciBmcmFnbWVudCBvbmx5IHN1cHBvcnQgd2hlbiBhIHVuaWNhc3QgcGFja2V0IHNlbmQgYXMgTk9ULUFSQUxJTkssIE5PVC1BTVNEVSBhbmQgTk9ULUFNUERVLgorCWlmICgoUlRNUF9HRVRfUEFDS0VUX0ZSQUdNRU5UUyhwUGFja2V0KSA+IDEpICYmIChUeEZyYW1lVHlwZSA9PSBUWF9MRUdBQ1lfRlJBTUUpKQorCQlUeEZyYW1lVHlwZSA9IFRYX0ZSQUdfRlJBTUU7CisKKwlyZXR1cm4gVHhGcmFtZVR5cGU7Cit9CisKKworQk9PTEVBTiBSVE1QX0ZpbGxUeEJsa0luZm8oCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLICpwVHhCbGspCit7CisJUEFDS0VUX0lORk8JCQlQYWNrZXRJbmZvOworCVBORElTX1BBQ0tFVAkJcFBhY2tldDsKKwlQTUFDX1RBQkxFX0VOVFJZCXBNYWNFbnRyeSA9IE5VTEw7CisKKwlwUGFja2V0ID0gcFR4QmxrLT5wUGFja2V0OworCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAmcFR4QmxrLT5TcmNCdWZMZW4pOworCisJcFR4QmxrLT5XY2lkCSAJIAkJPSBSVE1QX0dFVF9QQUNLRVRfV0NJRChwUGFja2V0KTsKKwlwVHhCbGstPmFwaWR4CQkgCQk9IFJUTVBfR0VUX1BBQ0tFVF9JRihwUGFja2V0KTsKKwlwVHhCbGstPlVzZXJQcmlvcml0eSAJCT0gUlRNUF9HRVRfUEFDS0VUX1VQKHBQYWNrZXQpOworCXBUeEJsay0+RnJhbWVHYXAgPSBJRlNfSFRUWE9QOwkJLy8gQVNJQyBkZXRlcm1pbmUgRnJhbWUgR2FwCisKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX0NMRUFSX0VBUF9GUkFNRShwVHhCbGstPnBQYWNrZXQpKQorCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkNsZWFyRUFQRnJhbWUpOworCWVsc2UKKwkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYkNsZWFyRUFQRnJhbWUpOworCisJLy8gRGVmYXVsdCB0byBjbGVhciB0aGlzIGZsYWcKKwlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpOworCisKKwlpZiAocFR4QmxrLT5XY2lkID09IE1DQVNUX1dDSUQpCisJeworCQlwVHhCbGstPnBNYWNFbnRyeSA9IE5VTEw7CisJCXsKKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisJCQlQVUNIQVIgcERBID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCQkJaWYgKCgoKnBEQSAmIDB4MDEpID09IDB4MDEpICYmICgqcERBICE9IDB4ZmYpKQorCQkJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBBZC0+Q29tbW9uQ2ZnLk1DYXN0UGh5TW9kZTsKKwkJCWVsc2UKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisJCQkJcFR4QmxrLT5wVHJhbnNtaXQgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGU7CisJCX0KKworCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOwkvLyBBY2tSZXF1aXJlZCA9IEZBTFNFLCB3aGVuIGJyb2FkY2FzdCBwYWNrZXQgaW4gQWRob2MgbW9kZS4KKwkJLy9UWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTG93UmF0ZSk7CisJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JBbGxvd0ZyYWcpOworCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iV01NKTsKKwkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9NT1JFREFUQShwUGFja2V0KSkKKwkJeworCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisJCX0KKworCX0KKwllbHNlCisJeworCQlwVHhCbGstPnBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BUeEJsay0+V2NpZF07CisJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBUeEJsay0+cE1hY0VudHJ5LT5IVFBoeU1vZGU7CisKKwkJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisKKworCQkvLyBGb3IgYWxsIHVuaWNhc3QgcGFja2V0cywgbmVlZCBBY2sgdW5sZXNzIHRoZSBBY2sgUG9saWN5IGlzIG5vdCBzZXQgYXMgTk9STUFMX0FDSy4KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkFja1BvbGljeVtwVHhCbGstPlF1ZUlkeF0gIT0gTk9STUFMX0FDSykKKwkJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JBY2tSZXF1aXJlZCk7CisJCWVsc2UKKwkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOworCisJCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCXsKKworCQkJCS8vIElmIHN1cHBvcnQgV01NLCBlbmFibGUgaXQuCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkgJiYKKwkJCQkJQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSkpCisJCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iV01NKTsKKworLy8JCQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoKQorLy8JCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9BdXRvUmF0ZVN3aXRjaCk7CisJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKworCQlpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9MRUdBQ1lfRlJBTUUpCisJCXsKKwkJCWlmICggKFJUTVBfR0VUX1BBQ0tFVF9MT1dSQVRFKHBQYWNrZXQpKSB8fAorICAgICAgICAgICAgICAgICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSAmJiAocE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9PSBNT0RFX0NDSykgJiYgKHBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSBSQVRFXzEpKSkKKwkJCXsJLy8gU3BlY2lmaWMgcGFja2V0LCBpLmUuLCBiREhDUEZyYW1lLCBiRUFQT0xGcmFtZSwgYldBSUZyYW1lLCBuZWVkIGZvcmNlIGxvdyByYXRlLgorCQkJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCS8vIE1vZGlmeSB0aGUgV01NIGJpdCBmb3IgSUNWIGlzc3VlLiBJZiB3ZSBoYXZlIGEgcGFja2V0IHdpdGggRU9TUCBmaWVsZCBuZWVkIHRvIHNldCBhcyAxLCBob3cgdG8gaGFuZGxlIGl0Pz8/CisJCQkJaWYgKElTX0hUX1NUQShwVHhCbGstPnBNYWNFbnRyeSkgJiYKKwkJCQkJKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpKSAmJgorCQkJCQkoKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPT0gVFJVRSkgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSkpKQorCQkJCXsKKwkJCQkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYldNTSk7CisJCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKCAoSVNfSFRfUkFURShwTWFjRW50cnkpID09IEZBTFNFKSAmJgorCQkJCShDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFKSkpCisJCQl7CS8vIEN1cnJlbnRseSBwaWdneS1iYWNrIG9ubHkgc3VwcG9ydCB3aGVuIHBlZXIgaXMgb3BlcmF0ZSBpbiBiL2cgbW9kZS4KKwkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYlBpZ2d5QmFjayk7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCWlmIChSVE1QX0dFVF9QQUNLRVRfTU9SRURBVEEocFBhY2tldCkpCisJCQl7CisJCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisJCQl9CisjaWZkZWYgVUFQU0RfQVBfU1VQUE9SVAorCQkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9FT1NQKHBQYWNrZXQpKQorCQkJeworCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iV01NX1VBUFNEX0VPU1ApOworCQkJfQorI2VuZGlmIC8vIFVBUFNEX0FQX1NVUFBPUlQgLy8KKwkJfQorCQllbHNlIGlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0ZSQUdfRlJBTUUpCisJCXsKKwkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iQWxsb3dGcmFnKTsKKwkJfQorCisJCXBNYWNFbnRyeS0+RGVidWdUeENvdW50Kys7CisJfQorCisJcmV0dXJuIFRSVUU7CisKK0ZpbGxUeEJsa0VycjoKKwlyZXR1cm4gRkFMU0U7Cit9CisKKworQk9PTEVBTiBDYW5Eb0FnZ3JlZ2F0ZVRyYW5zbWl0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIE5ESVNfUEFDS0VUICpwUGFja2V0LAorCUlOIFRYX0JMSwkJKnBUeEJsaykKK3sKKworCS8vcHJpbnRrKCJDaGVjayBpZiBjYW4gZG8gYWdncmVnYXRpb24hIFR4RnJhbWVUeXBlPSVkIVxuIiwgcFR4QmxrLT5UeEZyYW1lVHlwZSk7CisKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCkgPT0gTUNBU1RfV0NJRCkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQpIHx8CisJCVJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwUGFja2V0KSB8fAorCQlSVE1QX0dFVF9QQUNLRVRfV0FJKHBQYWNrZXQpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpICYmCisJCSgocFR4QmxrLT5Ub3RhbEZyYW1lTGVuICsgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpPiAoUlhfQlVGRkVSX0FHR1JFU0laRSAtIDEwMCkpKQorCXsJLy8gRm9yIEFNU0RVLCBhbGxvdyB0aGUgcGFja2V0cyB3aXRoIHRvdGFsIGxlbmd0aCA8IG1heC1hbXNkdSBzaXplCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfUkFMSU5LX0ZSQU1FKSAmJgorCQkocFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyID09IDIpKQorCXsJLy8gRm9yIFJBTElOSy1BZ2dyZWdhdGlvbiwgYWxsb3cgdHdvIGZyYW1lcyBpbiBvbmUgYmF0Y2guCisJCXJldHVybiBGQUxTRTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAoKElORlJBX09OKHBBZCkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkgLy8gbXVzdCBiZSB1bmljYXN0IHRvIEFQCisJCXJldHVybiBUUlVFOworCWVsc2UKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJcmV0dXJuIEZBTFNFOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRvIGRvIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBhbmQgZXh0cmFjdCB0aGUgZmlyc3QgaXRlbSBvZiB3YWl0aW5nCisJCWxpc3QuIElmIGEgbnVtYmVyIG9mIGF2YWlsYWJsZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGNvdWxkIG1lZXQKKwkJdGhlIHJlcXVlc3Qgb2YgZXh0cmFjdGVkIGl0ZW0sIHRoZSBleHRyYWN0ZWQgaXRlbSB3aWxsIGJlIGZyYWdtZW50ZWQKKwkJaW50byBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLgorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwUXVldWUJCVBvaW50ZXIgdG8gV2FpdGluZyBRdWV1ZQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBEZVF1ZXVlUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBCT09MRUFOICAgICAgICAgYkludENvbnRleHQsCisJSU4gIFVDSEFSCQkJUUlkeCwgLyogQnVsa091dFBpcGVJZCAqLworCUlOICBVQ0hBUiAgICAgICAgICAgTWF4X1R4X1BhY2tldHMpCit7CisJUFFVRVVFX0VOVFJZICAgIHBFbnRyeSA9IE5VTEw7CisJUE5ESVNfUEFDS0VUIAlwUGFja2V0OworCU5ESVNfU1RBVFVTICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVDSEFSICAgICAgICAgICBDb3VudD0wOworCVBRVUVVRV9IRUFERVIgICBwUXVldWU7CisJVUxPTkcgICAgICAgICAgIEZyZWVOdW1iZXJbTlVNX09GX1RYX1JJTkddOworCVVDSEFSCQkJUXVlSWR4LCBzUUlkeCwgZVFJZHg7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFncyA9IDA7CisJQk9PTEVBTgkJCWhhc1R4RGVzYyA9IEZBTFNFOworCVRYX0JMSwkJCVR4QmxrOworCVRYX0JMSwkJCSpwVHhCbGs7CisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwlCT09MRUFOCQkJZmlyc3RSb3VuZDsKKwlSdG1wRGlhZ1N0cnVjdAkqcERpYWdTdHJ1Y3QgPSAmcEFkLT5EaWFnU3RydWN0OworI2VuZGlmCisKKworCWlmIChRSWR4ID09IE5VTV9PRl9UWF9SSU5HKQorCXsKKwkJc1FJZHggPSAwOworLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQllUUlkeCA9IDM7CS8vIDQgQUNzLCBzdGFydCBmcm9tIDAuCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCWVsc2UKKwl7CisJCXNRSWR4ID0gZVFJZHggPSBRSWR4OworCX0KKworCWZvciAoUXVlSWR4PXNRSWR4OyBRdWVJZHggPD0gZVFJZHg7IFF1ZUlkeCsrKQorCXsKKwkJQ291bnQ9MDsKKworCQlSVDI4WFhfU1RBUlRfREVRVUVVRShwQWQsIFF1ZUlkeCwgSXJxRmxhZ3MpOworCisjaWZkZWYgREJHX0RJQUdOT1NFCisJCWZpcnN0Um91bmQgPSAoKFF1ZUlkeCA9PSAwKSA/IFRSVUUgOiBGQUxTRSk7CisjZW5kaWYgLy8gREJHX0RJQUdOT1NFIC8vCisKKwkJd2hpbGUgKDEpCisJCXsKKwkJCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfAorCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCQkJeworCQkJCVJUMjhYWF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIElycUZsYWdzKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWlmIChDb3VudCA+PSBNYXhfVHhfUGFja2V0cykKKwkJCQlicmVhazsKKworCQkJREVRVUVVRV9MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworCQkJaWYgKCZwQWQtPlR4U3dRdWV1ZVtRdWVJZHhdID09IE5VTEwpCisJCQl7CisjaWZkZWYgREJHX0RJQUdOT1NFCisJCQkJaWYgKGZpcnN0Um91bmQgPT0gVFJVRSkKKwkJCQkJcERpYWdTdHJ1Y3QtPlR4U1dRdWVDbnRbcERpYWdTdHJ1Y3QtPkFycmF5Q3VySWR4XVswXSsrOworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCQkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworCQkJCWJyZWFrOworCQkJfQorCisKKwkJCS8vIHByb2JlIHRoZSBRdWV1ZSBIZWFkCisJCQlwUXVldWUgPSAmcEFkLT5UeFN3UXVldWVbUXVlSWR4XTsKKwkJCWlmICgocEVudHJ5ID0gcFF1ZXVlLT5IZWFkKSA9PSBOVUxMKQorCQkJeworCQkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlwVHhCbGsgPSAmVHhCbGs7CisJCQlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKXBUeEJsaywgc2l6ZW9mKFRYX0JMSykpOworCQkJLy9Jbml0aWFsaXplUXVldWVIZWFkZXIoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsJCS8vIERpZG4ndCBuZWVkIGl0IGJlY2F1c2Ugd2UgYWxyZWFkeSBtZW16ZXJvIGl0LgorCQkJcFR4QmxrLT5RdWVJZHggPSBRdWVJZHg7CisKKwkJCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QS1QocEVudHJ5KTsKKworCQkJLy8gRWFybHkgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vZ3VoIFR4IFJlc291cmNlLgorCQkJaGFzVHhEZXNjID0gUlQyOFhYX0hBU19FTk9VR0hfRlJFRV9ERVNDKHBBZCwgcFR4QmxrLCBGcmVlTnVtYmVyW1F1ZUlkeF0sIHBQYWNrZXQpOworCQkJaWYgKCFoYXNUeERlc2MpCisJCQl7CisJCQkJcEFkLT5Qcml2YXRlSW5mby5UeFJpbmdGdWxsQ250Kys7CisKKwkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKworCQkJCWJyZWFrOworCQkJfQorCisJCQlwVHhCbGstPlR4RnJhbWVUeXBlID0gVHhQa3RDbGFzc2lmaWNhdGlvbihwQWQsIHBQYWNrZXQpOworCQkJcEVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKHBRdWV1ZSk7CisJCQlwVHhCbGstPlRvdGFsRnJhbWVOdW0rKzsKKwkJCXBUeEJsay0+VG90YWxGcmFnTnVtICs9IFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCk7CS8vIFRoZSByZWFsIGZyYWdtZW50IG51bWJlciBtYXliZSB2YXJ5CisJCQlwVHhCbGstPlRvdGFsRnJhbWVMZW4gKz0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisJCQlwVHhCbGstPnBQYWNrZXQgPSBwUGFja2V0OworCQkJSW5zZXJ0VGFpbFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCwgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKKworCQkJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfUkFMSU5LX0ZSQU1FIHx8IHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpCisJCQl7CisJCQkJLy8gRW5oYW5jZSBTVyBBZ2dyZWdhdGlvbiBNZWNoYW5pc20KKwkJCQlpZiAoTkVFRF9RVUVVRV9CQUNLX0ZPUl9BR0cocEFkLCBRdWVJZHgsIEZyZWVOdW1iZXJbUXVlSWR4XSwgcFR4QmxrLT5UeEZyYW1lVHlwZSkpCisJCQkJeworCQkJCQlJbnNlcnRIZWFkUXVldWUocFF1ZXVlLCBQQUNLRVRfVE9fUVVFVUVfRU5UUlkocFBhY2tldCkpOworCQkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZG97CisJCQkJCWlmKChwRW50cnkgPSBwUXVldWUtPkhlYWQpID09IE5VTEwpCisJCQkJCQlicmVhazsKKworCQkJCQkvLyBGb3IgVFhfQU1TRFVfRlJBTUUvVFhfUkFMSU5LX0ZSQU1FLCBOZWVkIHRvIGNoZWNrIGlmIG5leHQgcGFrY2V0IGNhbiBkbyBhZ2dyZWdhdGlvbi4KKwkJCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BLVChwRW50cnkpOworCQkJCQlGcmVlTnVtYmVyW1F1ZUlkeF0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisJCQkJCWhhc1R4RGVzYyA9IFJUMjhYWF9IQVNfRU5PVUdIX0ZSRUVfREVTQyhwQWQsIHBUeEJsaywgRnJlZU51bWJlcltRdWVJZHhdLCBwUGFja2V0KTsKKwkJCQkJaWYgKChoYXNUeERlc2MgPT0gRkFMU0UpIHx8IChDYW5Eb0FnZ3JlZ2F0ZVRyYW5zbWl0KHBBZCwgcFBhY2tldCwgcFR4QmxrKSA9PSBGQUxTRSkpCisJCQkJCQlicmVhazsKKworCQkJCQkvL1JlbW92ZSB0aGUgcGFja2V0IGZyb20gdGhlIFR4U3dRdWV1ZSBhbmQgaW5zZXJ0IGludG8gcFR4QmxrCisJCQkJCXBFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZShwUXVldWUpOworCQkJCQlBU1NFUlQocEVudHJ5KTsKKwkJCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BLVChwRW50cnkpOworCQkJCQlwVHhCbGstPlRvdGFsRnJhbWVOdW0rKzsKKwkJCQkJcFR4QmxrLT5Ub3RhbEZyYWdOdW0gKz0gUlRNUF9HRVRfUEFDS0VUX0ZSQUdNRU5UUyhwUGFja2V0KTsJLy8gVGhlIHJlYWwgZnJhZ21lbnQgbnVtYmVyIG1heWJlIHZhcnkKKwkJCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCQkJCQlJbnNlcnRUYWlsUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0LCBQQUNLRVRfVE9fUVVFVUVfRU5UUlkocFBhY2tldCkpOworCQkJCX13aGlsZSgxKTsKKworCQkJCWlmIChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIgPT0gMSkKKwkJCQkJcFR4QmxrLT5UeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKKwkJCX0KKworI2lmZGVmIFJUMjg3MAorCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkJCUNvdW50ICs9IHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcjsKKworCQkJCS8vIERvIEhhcmRUcmFuc21pdCBub3cuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCVN0YXR1cyA9IFNUQUhhcmRUcmFuc21pdChwQWQsIHBUeEJsaywgUXVlSWR4KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJfQorCisJCVJUMjhYWF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIElycUZsYWdzKTsKKworI2lmZGVmIFJUMjg3MAorCQlpZiAoIWhhc1R4RGVzYykKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIEJMT0NLX05FVF9JRgorCQlpZiAoKHBBZC0+YmxvY2tRdWV1ZVRhYltRdWVJZHhdLlN3VHhRdWV1ZUJsb2NrRmxhZyA9PSBUUlVFKQorCQkJJiYgKHBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF0uTnVtYmVyIDwgMSkpCisJCXsKKwkJCXJlbGVhc2VOZXRJZigmcEFkLT5ibG9ja1F1ZXVlVGFiW1F1ZUlkeF0pOworCQl9CisjZW5kaWYgLy8gQkxPQ0tfTkVUX0lGIC8vCisKKwl9CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gd2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJhbnNtaXQgb3V0IGZyYW1lcworCXdpdGggZ2l2ZW4gc2l6ZSBhbmQgc3BlY2lmaWVkIHJhdGUuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlSYXRlCQkJVHJhbnNtaXQgcmF0ZQorCQlTaXplCQkJRnJhbWUgc2l6ZSBpbiB1bml0cyBvZiBieXRlCisKKwlSZXR1cm4gVmFsdWU6CisJCUR1cmF0aW9uIG51bWJlciBpbiB1bml0cyBvZiB1c2VjCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VTSE9SVAlSVE1QQ2FsY0R1cmF0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUmF0ZSwKKwlJTglVTE9ORwkJCVNpemUpCit7CisJVUxPTkcJRHVyYXRpb24gPSAwOworCisJaWYgKFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkgLy8gQ0NLCisJeworCQlpZiAoKFJhdGUgPiBSQVRFXzEpICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKSkKKwkJCUR1cmF0aW9uID0gOTY7CS8vIDcyKzI0IHByZWFtYmxlK3BsY3AKKwkJZWxzZQorCQkJRHVyYXRpb24gPSAxOTI7IC8vIDE0NCs0OCBwcmVhbWJsZStwbGNwCisKKwkJRHVyYXRpb24gKz0gKFVTSE9SVCkoKFNpemUgPDwgNCkgLyBSYXRlSWRUbzUwMEticHNbUmF0ZV0pOworCQlpZiAoKFNpemUgPDwgNCkgJSBSYXRlSWRUbzUwMEticHNbUmF0ZV0pCisJCQlEdXJhdGlvbiArKzsKKwl9CisJZWxzZSBpZiAoUmF0ZSA8PSBSQVRFX0xBU1RfT0ZETV9SQVRFKS8vIE9GRE0gcmF0ZXMKKwl7CisJCUR1cmF0aW9uID0gMjAgKyA2OwkJLy8gMTYrNCBwcmVhbWJsZStwbGNwICsgU2lnbmFsIEV4dGVuc2lvbgorCQlEdXJhdGlvbiArPSA0ICogKFVTSE9SVCkoKDExICsgU2l6ZSAqIDQpIC8gUmF0ZUlkVG81MDBLYnBzW1JhdGVdKTsKKwkJaWYgKCgxMSArIFNpemUgKiA0KSAlIFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSkKKwkJCUR1cmF0aW9uICs9IDQ7CisJfQorCWVsc2UJLy9taW1vIHJhdGUKKwl7CisJCUR1cmF0aW9uID0gMjAgKyA2OwkJLy8gMTYrNCBwcmVhbWJsZStwbGNwICsgU2lnbmFsIEV4dGVuc2lvbgorCX0KKworCXJldHVybiAoVVNIT1JUKUR1cmF0aW9uOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzCisJd2l0aCBnaXZlbiBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KKworCUFyZ3VtZW50czoKKwkJcFR4V0kJCVBvaW50ZXIgdG8gaGVhZCBvZiBlYWNoIE1QRFUgdG8gSFcuCisJCUFjayAJCVNldHRpbmcgZm9yIEFjayByZXF1aXJlbWVudCBiaXQKKwkJRnJhZ21lbnQJU2V0dGluZyBmb3IgRnJhZ21lbnQgYml0CisJCVJldHJ5TW9kZQlTZXR0aW5nIGZvciByZXRyeSBtb2RlCisJCUlmcyAJCVNldHRpbmcgZm9yIElGUyBnYXAKKwkJUmF0ZQkJU2V0dGluZyBmb3IgdHJhbnNtaXQgcmF0ZQorCQlTZXJ2aWNlIAlTZXR0aW5nIGZvciBzZXJ2aWNlCisJCUxlbmd0aAkJRnJhbWUgbGVuZ3RoCisJCVR4UHJlYW1ibGUJU2hvcnQgb3IgTG9uZyBwcmVhbWJsZSB3aGVuIHVzaW5nIENDSyByYXRlcworCQlRdWVJZHggLSAwLTMsIGFjY29yZGluZyB0byA4MDIuMTFlL2Q0LjQgSnVuZS8yMDAzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICBTZWUgYWxzbyA6IEJBU21hcnRIYXJkVHJhbnNtaXQoKSAgICAhISEKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFdyaXRlVHhXSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhXSV9TVFJVQyAJcE91dFR4V0ksCisJSU4JQk9PTEVBTgkJCUZSQUcsCisJSU4JQk9PTEVBTgkJCUNGQUNLLAorCUlOCUJPT0xFQU4JCQlJbnNUaW1lc3RhbXAsCisJSU4JQk9PTEVBTiAJCUFNUERVLAorCUlOCUJPT0xFQU4gCQlBY2ssCisJSU4JQk9PTEVBTiAJCU5TZXEsCQkvLyBIVyBuZXcgYSBzZXF1ZW5jZS4KKwlJTglVQ0hBUgkJCUJBU2l6ZSwKKwlJTglVQ0hBUgkJCVdDSUQsCisJSU4JVUxPTkcJCQlMZW5ndGgsCisJSU4JVUNIQVIgCQkJUElELAorCUlOCVVDSEFSCQkJVElELAorCUlOCVVDSEFSCQkJVHhSYXRlLAorCUlOCVVDSEFSCQkJVHhvcG1vZGUsCisJSU4JQk9PTEVBTgkJCUNmQWNrLAorCUlOCUhUVFJBTlNNSVRfU0VUVElORwkqcFRyYW5zbWl0KQoreworCVBNQUNfVEFCTEVfRU5UUlkJcE1hYyA9IE5VTEw7CisJVFhXSV9TVFJVQyAJCVR4V0k7CisJUFRYV0lfU1RSVUMgCXBUeFdJOworCisJaWYgKFdDSUQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcE1hYyA9ICZwQWQtPk1hY1RhYi5Db250ZW50W1dDSURdOworCisJLy8KKwkvLyBBbHdheXMgdXNlIExvbmcgcHJlYW1ibGUgYmVmb3JlIHZlcmlmaWF0aW9uIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3Mgd2VsbC4KKwkvLyBUb2RvOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3MKKwkvLworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJTmRpc1plcm9NZW1vcnkoJlR4V0ksIFRYV0lfU0laRSk7CisJcFR4V0kgPSAmVHhXSTsKKworCXBUeFdJLT5GUkFHPSBGUkFHOworCisJcFR4V0ktPkNGQUNLID0gQ0ZBQ0s7CisJcFR4V0ktPlRTPSBJbnNUaW1lc3RhbXA7CisJcFR4V0ktPkFNUERVID0gQU1QRFU7CisJcFR4V0ktPkFDSyA9IEFjazsKKwlwVHhXSS0+dHhvcD0gVHhvcG1vZGU7CisKKwlwVHhXSS0+TlNFUSA9IE5TZXE7CisJLy8gSm9obiB0dW5lIHRoZSBwZXJmb3JtYWNlIHdpdGggSW50ZWwgQ2xpZW50IGluIDIwIE1IeiBwZXJmb3JtYW5jZQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJBU2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4QkFTaXplOworCisJaWYoIEJBU2l6ZSA+NyApCisJCUJBU2l6ZSA9NzsKKwlwVHhXSS0+QkFXaW5TaXplID0gQkFTaXplOworCXBUeFdJLT5TaG9ydEdJID0gcFRyYW5zbWl0LT5maWVsZC5TaG9ydEdJOworCXBUeFdJLT5TVEJDID0gcFRyYW5zbWl0LT5maWVsZC5TVEJDOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPldpcmVsZXNzQ2xpSUQgPSBXQ0lEOworCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPSBMZW5ndGg7CisJcFR4V0ktPlBhY2tldElkID0gUElEOworCisJLy8gSWYgQ0NLIG9yIE9GRE0sIEJXIG11c3QgYmUgMjAKKwlwVHhXSS0+QlcgPSAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlpZiAocFR4V0ktPkJXKQorCQlwVHhXSS0+QlcgPSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID09IDApID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlwVHhXSS0+TUNTID0gcFRyYW5zbWl0LT5maWVsZC5NQ1M7CisJcFR4V0ktPlBIWU1PREUgPSBwVHJhbnNtaXQtPmZpZWxkLk1PREU7CisJcFR4V0ktPkNGQUNLID0gQ2ZBY2s7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocE1hYykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlKQorCQl7CisJCQlpZiAoKHBNYWMtPk1tcHNNb2RlID09IE1NUFNfRFlOQU1JQykgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpCisJCQl7CisJCQkJLy8gRHluYW1pYyBNSU1PIFBvd2VyIFNhdmUgTW9kZQorCQkJCXBUeFdJLT5NSU1PcHMgPSAxOworCQkJfQorCQkJZWxzZSBpZiAocE1hYy0+TW1wc01vZGUgPT0gTU1QU19TVEFUSUMpCisJCQl7CisJCQkJLy8gU3RhdGljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCQkJaWYgKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYICYmIHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykKKwkJCQl7CisJCQkJCXBUeFdJLT5NQ1MgPSA3OworCQkJCQlwVHhXSS0+TUlNT3BzID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJLy9wVHhXSS0+TUlNT3BzID0gKHBNYWMtPlBzTW9kZSA9PSBQV1JfTU1QUyk/IDE6MDsKKwkJaWYgKHBNYWMtPmJJQW1CYWRBdGhlcm9zICYmIChwTWFjLT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKSkKKwkJeworCQkJcFR4V0ktPk1wZHVEZW5zaXR5ID0gNzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBUeFdJLT5NcGR1RGVuc2l0eSA9IHBNYWMtPk1wZHVEZW5zaXR5OworCQl9CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPlBhY2tldElkID0gcFR4V0ktPk1DUzsKKwlOZGlzTW92ZU1lbW9yeShwT3V0VHhXSSwgJlR4V0ksIHNpemVvZihUWFdJX1NUUlVDKSk7Cit9CisKKworVk9JRCBSVE1QV3JpdGVUeFdJX0RhdGEoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCU9VVCBQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4JVFhfQkxLCQkJCSpwVHhCbGspCit7CisJSFRUUkFOU01JVF9TRVRUSU5HCSpwVHJhbnNtaXQ7CisJUE1BQ19UQUJMRV9FTlRSWQlwTWFjRW50cnk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJVUNIQVIJCQkJQkFTaXplOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKwlBU1NFUlQocFR4V0kpOworCisJcFRyYW5zbWl0ID0gcFR4QmxrLT5wVHJhbnNtaXQ7CisJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisKKworCS8vCisJLy8gQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuCisJLy8gVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzCisJLy8KKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOworCU5kaXNaZXJvTWVtb3J5KHBUeFdJLCBUWFdJX1NJWkUpOworCisJcFR4V0ktPkZSQUcJCT0gVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iQWxsb3dGcmFnKTsKKwlwVHhXSS0+QUNLCQk9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFja1JlcXVpcmVkKTsKKwlwVHhXSS0+dHhvcAkJPSBwVHhCbGstPkZyYW1lR2FwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJaWYgKHBNYWNFbnRyeSAmJgorCQkocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpICYmCisJCShwTWFjRW50cnktPlZhbGlkQXNEbHMgPT0gVFJVRSkpCisJCXBUeFdJLT5XaXJlbGVzc0NsaUlEID0gQlNTSURfV0NJRDsKKwllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCXBUeFdJLT5XaXJlbGVzc0NsaUlECQk9IHBUeEJsay0+V2NpZDsKKworCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQJPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKwlwVHhXSS0+Q0ZBQ0sJCQkJPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JQaWdneUJhY2spOworCisJLy8gSWYgQ0NLIG9yIE9GRE0sIEJXIG11c3QgYmUgMjAKKwlwVHhXSS0+QlcgPSAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKKwlpZiAocFR4V0ktPkJXKQorCQlwVHhXSS0+QlcgPSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID09IDApID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJcFR4V0ktPkFNUERVCT0gKChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNUERVX0ZSQU1FKSA/IFRSVUUgOiBGQUxTRSk7CisKKwkvLyBKb2huIHR1bmUgdGhlIHBlcmZvcm1hY2Ugd2l0aCBJbnRlbCBDbGllbnQgaW4gMjAgTUh6IHBlcmZvcm1hbmNlCisJQkFTaXplID0gcEFkLT5Db21tb25DZmcuVHhCQVNpemU7CisJaWYoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1QRFVfRlJBTUUpICYmIChwTWFjRW50cnkpKQorCXsKKwkJVUNIQVIJCVJBQkFPcmlJZHggPSAwOwkvL1RoZSBSQSdzIEJBIE9yaWdpbmF0b3IgdGFibGUgaW5kZXguCisKKwkJUkFCQU9yaUlkeCA9IHBUeEJsay0+cE1hY0VudHJ5LT5CQU9yaVdjaWRBcnJheVtwVHhCbGstPlVzZXJQcmlvcml0eV07CisJCUJBU2l6ZSA9IHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W1JBQkFPcmlJZHhdLkJBV2luU2l6ZTsKKwl9CisKKwlwVHhXSS0+VHhCRiA9IHBUcmFuc21pdC0+ZmllbGQuVHhCRjsKKwlwVHhXSS0+QkFXaW5TaXplID0gQkFTaXplOworCXBUeFdJLT5TaG9ydEdJID0gcFRyYW5zbWl0LT5maWVsZC5TaG9ydEdJOworCXBUeFdJLT5TVEJDID0gcFRyYW5zbWl0LT5maWVsZC5TVEJDOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPk1DUyA9IHBUcmFuc21pdC0+ZmllbGQuTUNTOworCXBUeFdJLT5QSFlNT0RFID0gcFRyYW5zbWl0LT5maWVsZC5NT0RFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKHBNYWNFbnRyeSkKKwl7CisJCWlmICgocE1hY0VudHJ5LT5NbXBzTW9kZSA9PSBNTVBTX0RZTkFNSUMpICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKQorCQl7CisJCQkvLyBEeW5hbWljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCQlwVHhXSS0+TUlNT3BzID0gMTsKKwkJfQorCQllbHNlIGlmIChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKQorCQl7CisJCQkvLyBTdGF0aWMgTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJCWlmIChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCAmJiBwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpCisJCQl7CisJCQkJcFR4V0ktPk1DUyA9IDc7CisJCQkJcFR4V0ktPk1JTU9wcyA9IDA7CisJCQl9CisJCX0KKworCQlpZiAocE1hY0VudHJ5LT5iSUFtQmFkQXRoZXJvcyAmJiAocE1hY0VudHJ5LT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKSkKKwkJeworCQkJcFR4V0ktPk1wZHVEZW5zaXR5ID0gNzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBUeFdJLT5NcGR1RGVuc2l0eSA9IHBNYWNFbnRyeS0+TXBkdURlbnNpdHk7CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwkJaWYgKHBUeEJsay0+UXVlSWR4PT0gMCkKKwkJeworCQkJcEFkLT5EaWFnU3RydWN0LlR4RGF0YUNudFtwQWQtPkRpYWdTdHJ1Y3QuQXJyYXlDdXJJZHhdKys7CisJCQlwQWQtPkRpYWdTdHJ1Y3QuVHhNY3NDbnRbcEFkLT5EaWFnU3RydWN0LkFycmF5Q3VySWR4XVtwVHhXSS0+TUNTXSsrOworCQl9CisjZW5kaWYgLy8gREJHX0RJQUdOT1NFIC8vCisKKwkvLyBmb3IgcmF0ZSBhZGFwYXRpb24KKwlwVHhXSS0+UGFja2V0SWQgPSBwVHhXSS0+TUNTOworI2lmZGVmIElORl9BTUFaT05fU0UKKy8qSXZlcnNvbiBwYXRjaCBmb3IgV01NIEE1LVQwNyAsV2lyZWxlc3NTdGFUb1dpcmVsZXNzU3RhIGRvIG5vdCBidWxrIG91dCBhZ2dyZWdhdGUgKi8KKwlpZiggUlRNUF9HRVRfUEFDS0VUX05PQlVMS09VVChwVHhCbGstPnBQYWNrZXQpKQorCXsKKwkJaWYocFR4V0ktPlBIWU1PREUgPT0gTU9ERV9DQ0spCisJCXsKKwkJCXBUeFdJLT5QYWNrZXRJZCA9IDY7CisJCX0KKwl9CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworfQorCisKK1ZPSUQgUlRNUFdyaXRlVHhXSV9DYWNoZSgKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JT1VUIFBUWFdJX1NUUlVDCQlwVHhXSSwKKwlJTglUWF9CTEsJCQkJKnBUeEJsaykKK3sKKwlQSFRUUkFOU01JVF9TRVRUSU5HCS8qcFR4SFRQaHlNb2RlLCovIHBUcmFuc21pdDsKKwlQTUFDX1RBQkxFX0VOVFJZCXBNYWNFbnRyeTsKKworCS8vCisJLy8gdXBkYXRlIFRYV0kKKwkvLworCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OworCXBUcmFuc21pdCA9IHBUeEJsay0+cFRyYW5zbWl0OworCisJLy9pZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSkKKwkvL2lmIChSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKHBBZCwgcE1hY0VudHJ5KSkKKwkvL2lmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX0F1dG9SYXRlU3dpdGNoKSkKKwlpZiAocE1hY0VudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCkKKwl7CisJCXBUeFdJLT50eG9wID0gSUZTX0hUVFhPUDsKKworCQkvLyBJZiBDQ0sgb3IgT0ZETSwgQlcgbXVzdCBiZSAyMAorCQlwVHhXSS0+QlcgPSAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworCQlwVHhXSS0+U2hvcnRHSSA9IHBUcmFuc21pdC0+ZmllbGQuU2hvcnRHSTsKKwkJcFR4V0ktPlNUQkMgPSBwVHJhbnNtaXQtPmZpZWxkLlNUQkM7CisKKwkJcFR4V0ktPk1DUyA9IHBUcmFuc21pdC0+ZmllbGQuTUNTOworCQlwVHhXSS0+UEhZTU9ERSA9IHBUcmFuc21pdC0+ZmllbGQuTU9ERTsKKworCQkvLyBzZXQgUElEIGZvciBUeFJhdGVTd2l0Y2hpbmcKKwkJcFR4V0ktPlBhY2tldElkID0gcFRyYW5zbWl0LT5maWVsZC5NQ1M7CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJcFR4V0ktPkFNUERVID0gKChwTWFjRW50cnktPk5vQkFEYXRhQ291bnREb3duID09IDApID8gVFJVRTogRkFMU0UpOworCXBUeFdJLT5NSU1PcHMgPSAwOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCWlmIChwVHhXSS0+QlcpCisJCXBUeFdJLT5CVyA9IChwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGggPT0gMCkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworCWlmIChwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlKQorCXsKKwkJLy8gTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJaWYgKChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfRFlOQU1JQykgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpCisJCXsKKwkJCS8vIER5bmFtaWMgTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJCXBUeFdJLT5NSU1PcHMgPSAxOworCQl9CisJCWVsc2UgaWYgKHBNYWNFbnRyeS0+TW1wc01vZGUgPT0gTU1QU19TVEFUSUMpCisJCXsKKwkJCS8vIFN0YXRpYyBNSU1PIFBvd2VyIFNhdmUgTW9kZQorCQkJaWYgKChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpCisJCQl7CisJCQkJcFR4V0ktPk1DUyA9IDc7CisJCQkJcFR4V0ktPk1JTU9wcyA9IDA7CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwlpZiAocFR4QmxrLT5RdWVJZHg9PSAwKQorCXsKKwkJcEFkLT5EaWFnU3RydWN0LlR4RGF0YUNudFtwQWQtPkRpYWdTdHJ1Y3QuQXJyYXlDdXJJZHhdKys7CisJCXBBZC0+RGlhZ1N0cnVjdC5UeE1jc0NudFtwQWQtPkRpYWdTdHJ1Y3QuQXJyYXlDdXJJZHhdW3BUeFdJLT5NQ1NdKys7CisJfQorI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisJcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNhbGN1bGF0ZXMgdGhlIGR1cmF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyYW5zbWl0IG91dCBmcmFtZXMKKwl3aXRoIGdpdmVuIHNpemUgYW5kIHNwZWNpZmllZCByYXRlLgorCisJQXJndW1lbnRzOgorCQlwVHhECQlQb2ludGVyIHRvIHRyYW5zbWl0IGRlc2NyaXB0b3IKKwkJQWNrIAkJU2V0dGluZyBmb3IgQWNrIHJlcXVpcmVtZW50IGJpdAorCQlGcmFnbWVudAlTZXR0aW5nIGZvciBGcmFnbWVudCBiaXQKKwkJUmV0cnlNb2RlCVNldHRpbmcgZm9yIHJldHJ5IG1vZGUKKwkJSWZzIAkJU2V0dGluZyBmb3IgSUZTIGdhcAorCQlSYXRlCQlTZXR0aW5nIGZvciB0cmFuc21pdCByYXRlCisJCVNlcnZpY2UgCVNldHRpbmcgZm9yIHNlcnZpY2UKKwkJTGVuZ3RoCQlGcmFtZSBsZW5ndGgKKwkJVHhQcmVhbWJsZQlTaG9ydCBvciBMb25nIHByZWFtYmxlIHdoZW4gdXNpbmcgQ0NLIHJhdGVzCisJCVF1ZUlkeCAtIDAtMywgYWNjb3JkaW5nIHRvIDgwMi4xMWUvZDQuNCBKdW5lLzIwMDMKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFdyaXRlVHhEZXNjcmlwdG9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWERfU1RSVUMJCXBUeEQsCisJSU4JQk9PTEVBTiAJCWJXSVYsCisJSU4JVUNIQVIJCQlRdWV1ZVNFTCkKK3sKKwkvLworCS8vIEFsd2F5cyB1c2UgTG9uZyBwcmVhbWJsZSBiZWZvcmUgdmVyaWZpYXRpb24gc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcyB3ZWxsLgorCS8vIFRvZG86IHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgaWYgc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcworCS8vCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKTsKKworCXBUeEQtPldJVgk9IChiV0lWKSA/IDE6IDA7CisJcFR4RC0+UVNFTD0gKFF1ZXVlU0VMKTsKKwlpZiAocEFkLT5iR2VuT25lSENDQSA9PSBUUlVFKQorCQlwVHhELT5RU0VMPSBGSUZPX0hDQ0E7CisJcFR4RC0+RE1BRE9ORSA9IDA7Cit9CisKKworLy8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gLQorLy8gMS4gTUVBRElBX0NPTk5FQ1RFRAorLy8gMi4gQUdHUkVHQVRJT05fSU5fVVNFRAorLy8gMy4gRnJhZ21lbnRhdGlvbiBub3QgaW4gdXNlZAorLy8gNC4gZWl0aGVyIG5vIHByZXZpb3VzIGZyYW1lIChwUHJldkFkZHIxPU5VTEwpIC5PUi4gcHJldmlvdWQgZnJhbWUgaXMgYWdncmVnYXRpYmxlCitCT09MRUFOIFR4RnJhbWVJc0FnZ3JlZ2F0aWJsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwUHJldkFkZHIxLAorCUlOCVBVQ0hBUgkJCXA4MDIzaGRyKQoreworCisJLy8gY2FuJ3QgYWdncmVnYXRlIEVBUE9MICg4MDIuMXgpIGZyYW1lCisJaWYgKChwODAyM2hkclsxMl0gPT0gMHg4OCkgJiYgKHA4MDIzaGRyWzEzXSA9PSAweDhlKSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gY2FuJ3QgYWdncmVnYXRlIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWUKKwlpZiAocDgwMjNoZHJbMF0gJiAweDAxKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAoSU5GUkFfT04ocEFkKSkgLy8gbXVzdCBiZSB1bmljYXN0IHRvIEFQCisJCXJldHVybiBUUlVFOworCWVsc2UgaWYgKChwUHJldkFkZHIxID09IE5VTEwpIHx8IE1BQ19BRERSX0VRVUFMKHBQcmV2QWRkcjEsIHA4MDIzaGRyKSkgLy8gdW5pY2FzdCB0byBzYW1lIFNUQQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkgICBDaGVjayB0aGUgTVNEVSBBZ2dyZWdhdGlvbiBwb2xpY3kKKwkxLkhUIGFnZ3JlZ2F0aW9uIGlzIEEtTVNEVQorCTIubGVnYWFjeSByYXRlIGFnZ3JlZ2F0aW9uIGlzIHNvZnR3YXJlIGFnZ3JlZ2F0aW9uIGJ5IFJhbGluay4KKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFBlZXJJc0FnZ3JlT24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUxPTkcJCSAgIFR4UmF0ZSwKKwlJTglQTUFDX1RBQkxFX0VOVFJZIHBNYWNFbnRyeSkKK3sKKwlVTE9ORwlBRmxhZ3MgPSAoZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VEIHwgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSk7CisKKwlpZiAocE1hY0VudHJ5ICE9IE5VTEwgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBBRmxhZ3MpKQorCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKHBNYWNFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKwkJeworCQkJcmV0dXJuIFRSVUU7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKKwkJaWYgKFR4UmF0ZSA+PSBSQVRFXzYgJiYgcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSAmJiAoIShPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKSkpCisJCXsJLy8gbGVnYWN5ICBSYWxpbmsgQWdncmVnYXRpb24gc3VwcG9ydAorCQkJcmV0dXJuIFRSVUU7CisJCX0KKyNlbmRpZiAvLyBBR0dSRUdBVElPTl9TVVBQT1JUIC8vCisJfQorCisJcmV0dXJuIEZBTFNFOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNoZWNrIGFuZCBmaW5lIHRoZSBwYWNrZXQgd2FpdGluZyBpbiBTVyBxdWV1ZSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkKKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJcFF1ZXVlCQlQb2ludGVyIHRvIFdhaXRpbmcgUXVldWUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1BRVUVVRV9IRUFERVIJUlRNUENoZWNrVHhTd1F1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBQVUNIQVIJCQlwUXVlSWR4KQoreworCisJVUxPTkcJTnVtYmVyOworCS8vIDIwMDQtMTEtMTUgdG8gYmUgcmVtb3ZlZC4gdGVzdCBhZ2dyZWdhdGlvbiBvbmx5CisvLwlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKSkgJiYgKCpwTnVtYmVyIDwgMikpCisvLwkJIHJldHVybiBOVUxMOworCisJTnVtYmVyID0gcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIKKwkJCSArIHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CRV0uTnVtYmVyCisJCQkgKyBwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldLk51bWJlcgorCQkJICsgcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXS5OdW1iZXIKKwkJCSArIHBBZC0+VHhTd1F1ZXVlW1FJRF9IQ0NBXS5OdW1iZXI7CisKKwlpZiAocEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9BQ19WTzsKKwkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXSk7CisJfQorCWVsc2UgaWYgKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WSV0uSGVhZCAhPSBOVUxMKQorCXsKKwkJKnBRdWVJZHggPSBRSURfQUNfVkk7CisJCXJldHVybiAoJnBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WSV0pOworCX0KKwllbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLkhlYWQgIT0gTlVMTCkKKwl7CisJCSpwUXVlSWR4ID0gUUlEX0FDX0JFOworCQlyZXR1cm4gKCZwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdKTsKKwl9CisJZWxzZSBpZiAocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9BQ19CSzsKKwkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXSk7CisJfQorCWVsc2UgaWYgKHBBZC0+VHhTd1F1ZXVlW1FJRF9IQ0NBXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9IQ0NBOworCQlyZXR1cm4gKCZwQWQtPlR4U3dRdWV1ZVtRSURfSENDQV0pOworCX0KKworCS8vIE5vIHBhY2tldCBwZW5kaW5nIGluIFR4IFN3IHF1ZXVlCisJKnBRdWVJZHggPSBRSURfQUNfQks7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVN1c3BlbmQgTVNEVSB0cmFuc21pc3Npb24KKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTdXNwZW5kTXNkdVRyYW5zbWlzc2lvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNDQU5OSU5HLCBzdXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uIC4uLlxuIikpOworCisKKwkvLworCS8vIEJlZm9yZSBCU1NfU0NBTl9JTl9QUk9HUkVTUywgd2UgbmVlZCB0byBrZWVwIEN1cnJlbnQgUjY2IHZhbHVlIGFuZAorCS8vIHVzZSBMb3dib3VuZCBhcyBSNjYgdmFsdWUgb24gU2Nhbk5leHRDaGFubmVsKC4uLikKKwkvLworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUpOworCisJLy8gc2V0IEJCUF9SNjYgdG8gMHgzMC8weDQwIHdoZW4gc2Nhbm5pbmcgKEFzaWNTd2l0Y2hDaGFubmVsIHdpbGwgc2V0IFI2NiBhY2NvcmRpbmcgdG8gY2hhbm5lbCB3aGVuIHNjYW5uaW5nKQorCS8vUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICgweDI2ICsgR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgQldfMjApOworCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworCS8vUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQ05UTF9DU1IsIDB4MDAwZjAwMDApOwkJLy8gYWJvcnQgYWxsIFRYIHJpbmdzCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlc3VtZSBNU0RVIHRyYW5zbWlzc2lvbgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QUmVzdW1lTXNkdVRyYW5zbWlzc2lvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKy8vICAgIFVDSEFSCQkJSXJxU3RhdGU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNDQU4gZG9uZSwgcmVzdW1lIE1TRFUgdHJhbnNtaXNzaW9uIC4uLlxuIikpOworCisKKwkvLyBBZnRlciBmaW5pc2ggQlNTX1NDQU5fSU5fUFJPR1JFU1MsIHdlIG5lZWQgdG8gcmVzdG9yZSBDdXJyZW50IFI2NiB2YWx1ZQorCS8vIFI2NiBzaG91bGQgbm90IGJlIDAKKwlpZiAocEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlID09IDApCisJeworCQlwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgPSAweDM4OworCQlEQkdQUklOVF9FUlIoKCJSVE1QUmVzdW1lTXNkdVRyYW5zbWlzc2lvbiwgUjY2Q3VycmVudFZhbHVlPTAuLi5cbiIpKTsKKwl9CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIHBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSk7CisKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKy8vIHNhbXBsZSwgZm9yIElSUSBMT0NLIHRvIFNFTSBMT0NLCisvLyAgICBJcnFTdGF0ZSA9IHBBZC0+aXJxX2Rpc2FibGVkOworLy8JaWYgKElycVN0YXRlKQorLy8JCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgVFJVRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKy8vICAgIGVsc2UKKwlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworfQorCisKK1VJTlQgZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUpCit7CisJVVNIT1JUIAkJCVBheWxvYWRTaXplOworCVVTSE9SVCAJCQlTdWJGcmFtZVNpemU7CisJUEhFQURFUl84MDJfMyAJcEFNU0RVc3ViaGVhZGVyOworCVVJTlQJCQluTVNEVTsKKyAgICBVQ0hBUgkJCUhlYWRlcjgwMl8zWzE0XTsKKworCVBVQ0hBUgkJCXBQYXlsb2FkLCBwREEsIHBTQSwgcFJlbW92ZWRMTENTTkFQOworCVBORElTX1BBQ0tFVAlwQ2xvbmVQYWNrZXQ7CisKKworCisJbk1TRFUgPSAwOworCisJd2hpbGUgKERhdGFTaXplID4gTEVOR1RIXzgwMl8zKQorCXsKKworCQluTVNEVSsrOworCisJCS8vaGV4X2R1bXAoInN1YmhlYWRlciIsIHBEYXRhLCA2NCk7CisJCXBBTVNEVXN1YmhlYWRlciA9IChQSEVBREVSXzgwMl8zKXBEYXRhOworCQkvL3BEYXRhICs9IExFTkdUSF84MDJfMzsKKwkJUGF5bG9hZFNpemUgPSBwQU1TRFVzdWJoZWFkZXItPk9jdGV0WzFdICsgKHBBTVNEVXN1YmhlYWRlci0+T2N0ZXRbMF08PDgpOworCQlTdWJGcmFtZVNpemUgPSBQYXlsb2FkU2l6ZSArIExFTkdUSF84MDJfMzsKKworCisJCWlmICgoRGF0YVNpemUgPCBTdWJGcmFtZVNpemUpIHx8IChQYXlsb2FkU2l6ZSA+IDE1MTggKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQkvL3ByaW50aygiJWQgc3ViZnJhbWU6IFNpemUgPSAlZFxuIiwgIG5NU0RVLCBQYXlsb2FkU2l6ZSk7CisKKwkJcFBheWxvYWQgPSBwRGF0YSArIExFTkdUSF84MDJfMzsKKwkJcERBID0gcERhdGE7CisJCXBTQSA9IHBEYXRhICsgTUFDX0FERFJfTEVOOworCisJCS8vIGNvbnZlcnQgdG8gODAyLjMgaGVhZGVyCisgICAgICAgIENPTlZFUlRfVE9fODAyXzMoSGVhZGVyODAyXzMsIHBEQSwgcFNBLCBwUGF5bG9hZCwgUGF5bG9hZFNpemUsIHBSZW1vdmVkTExDU05BUCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKChIZWFkZXI4MDJfM1sxMl0gPT0gMHg4OCkgJiYgKEhlYWRlcjgwMl8zWzEzXSA9PSAweDhFKSApCisJCXsKKwkJICAgIC8vIGF2b2lkIGxvY2FsIGhlYXAgb3ZlcmZsb3csIHVzZSBkeWFuYW1pYyBhbGxvY2F0aW9uCisJCSAgIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSA9IChNTE1FX1FVRVVFX0VMRU0gKikga21hbGxvYyhzaXplb2YoTUxNRV9RVUVVRV9FTEVNKSwgTUVNX0FMTE9DX0ZMQUcpOworCQkgICBtZW1tb3ZlKEVsZW0tPk1zZysoTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IKSwgcFBheWxvYWQsIFBheWxvYWRTaXplKTsKKwkJICAgRWxlbS0+TXNnTGVuID0gTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgUGF5bG9hZFNpemU7CisJCSAgIFdwYUVBUE9MS2V5QWN0aW9uKHBBZCwgRWxlbSk7CisJCSAgIGtmcmVlKEVsZW0pOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCSAgICAgICAgCWlmIChwUmVtb3ZlZExMQ1NOQVApCisJICAgICAgICAJeworCSAgICAJCQlwUGF5bG9hZCAtPSBMRU5HVEhfODAyXzM7CisJICAgIAkJCVBheWxvYWRTaXplICs9IExFTkdUSF84MDJfMzsKKwkgICAgCQkJTmRpc01vdmVNZW1vcnkocFBheWxvYWQsICZIZWFkZXI4MDJfM1swXSwgTEVOR1RIXzgwMl8zKTsKKwkgICAgICAgIAl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlwQ2xvbmVQYWNrZXQgPSBDbG9uZVBhY2tldChwQWQsIHBQYWNrZXQsIHBQYXlsb2FkLCBQYXlsb2FkU2l6ZSk7CisJCWlmIChwQ2xvbmVQYWNrZXQpCisJCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQocEFkLCBwQ2xvbmVQYWNrZXQsIFJUTVBfR0VUX1BBQ0tFVF9JRihwUGFja2V0KSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKworCisJCS8vIEEtTVNEVSBoYXMgcGFkZGluZyB0byBtdWx0aXBsZSBvZiA0IGluY2x1ZGluZyBzdWJmcmFtZSBoZWFkZXIuCisJCS8vIGFsaWduIFN1YkZyYW1lU2l6ZSB1cCB0byBtdWx0aXBsZSBvZiA0CisJCVN1YkZyYW1lU2l6ZSA9IChTdWJGcmFtZVNpemUrMykmKH4weDMpOworCisKKwkJaWYgKFN1YkZyYW1lU2l6ZSA+IDE1MjggfHwgU3ViRnJhbWVTaXplIDwgMzIpCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKERhdGFTaXplID4gU3ViRnJhbWVTaXplKQorCQl7CisJCQlwRGF0YSArPSBTdWJGcmFtZVNpemU7CisJCQlEYXRhU2l6ZSAtPSBTdWJGcmFtZVNpemU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBlbmQgb2YgQS1NU0RVCisJCQlEYXRhU2l6ZSA9IDA7CisJCX0KKwl9CisKKwkvLyBmaW5hbGx5IHJlbGVhc2Ugb3JpZ2luYWwgcnggcGFja2V0CisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJcmV0dXJuIG5NU0RVOworfQorCisKK1VJTlQgQkFfUmVvcmRlcl9BTVNEVV9Bbm5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJUFVDSEFSCQkJcERhdGE7CisJVVNIT1JUCQkJRGF0YVNpemU7CisJVUlOVAkJCW5NU0RVID0gMDsKKworCXBEYXRhID0gKFBVQ0hBUikgR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCURhdGFTaXplID0gKFVTSE9SVCkgR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisKKwluTVNEVSA9IGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFBhY2tldCwgcERhdGEsIERhdGFTaXplKTsKKworCXJldHVybiBuTVNEVTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUxvb2sgdXAgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBNQUMgdGFibGUuIFJldHVybiBOVUxMIGlmIG5vdCBmb3VuZC4KKwlSZXR1cm46CisJCXBFbnRyeSAtIHBvaW50ZXIgdG8gdGhlIE1BQyBlbnRyeTsgTlVMTCBpcyBub3QgZm91bmQKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK01BQ19UQUJMRV9FTlRSWSAqTWFjVGFibGVMb29rdXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJUFVDSEFSIHBBZGRyKQoreworCVVMT05HIEhhc2hJZHg7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCisJSGFzaElkeCA9IE1BQ19BRERSX0hBU0hfSU5ERVgocEFkZHIpOworCXBFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisKKwl3aGlsZSAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNDTEkgfHwgcEVudHJ5LT5WYWxpZEFzV0RTIHx8IHBFbnRyeS0+VmFsaWRBc0FwQ2xpIHx8IHBFbnRyeS0+VmFsaWRBc01lc2gpKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBFbnRyeS0+QWRkciwgcEFkZHIpKQorCQl7CisJCQlicmVhazsKKwkJfQorCQllbHNlCisJCQlwRW50cnkgPSBwRW50cnktPnBOZXh0OworCX0KKworCXJldHVybiBwRW50cnk7Cit9CisKK01BQ19UQUJMRV9FTlRSWSAqTWFjVGFibGVJbnNlcnRFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSCQkJcEFkZHIsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlJTiBCT09MRUFOCUNsZWFuQWxsKQoreworCVVDSEFSIEhhc2hJZHg7CisJaW50IGksIEZpcnN0V2NpZDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5OworLy8JVVNIT1JUCW9mZnNldDsKKy8vCVVMT05HCWFkZHI7CisKKwkvLyBpZiBGVUxMLCByZXR1cm4KKwlpZiAocEFkLT5NYWNUYWIuU2l6ZSA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlGaXJzdFdjaWQgPSAxOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKQorCQlGaXJzdFdjaWQgPSAyOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gYWxsb2NhdGUgb25lIE1BQyBlbnRyeQorCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisJZm9yIChpID0gRmlyc3RXY2lkOyBpPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKSAgIC8vIHNraXAgZW50cnkjMCBzbyB0aGF0ICJlbnRyeSBpbmRleCA9PSBBSUQiIGZvciBmYXN0IGxvb2t1cAorCXsKKwkJLy8gcGljayB1cCB0aGUgZmlyc3QgYXZhaWxhYmxlIHZhY2FuY3kKKwkJaWYgKChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPT0gRkFMU0UpICYmCisJCQkocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzV0RTID09IEZBTFNFKSAmJgorCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0FwQ2xpPT0gRkFMU0UpICYmCisJCQkocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzTWVzaCA9PSBGQUxTRSkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCSYmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNEbHMgPT0gRkFMU0UpCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkpCisJCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOworCQkJaWYgKENsZWFuQWxsID09IFRSVUUpCisJCQl7CisJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKwkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBSQVRFXzExOworCQkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworCQkJCXBFbnRyeS0+UGFpcndpc2VLZXkuS2V5TGVuID0gMDsKKwkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQkJfQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJaWYgKGFwaWR4ID49IE1JTl9ORVRfREVWSUNFX0ZPUl9ETFMpCisJCQl7CisJCQkJcEVudHJ5LT5WYWxpZEFzQ0xJID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzV0RTID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzQXBDbGkgPSBGQUxTRTsKKwkJCQlwRW50cnktPlZhbGlkQXNNZXNoID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzRGxzID0gVFJVRTsKKwkJCQlwRW50cnktPmlzQ2FjaGVkID0gRkFMU0U7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5WYWxpZEFzQ0xJID0gVFJVRTsKKwkJCQkJcEVudHJ5LT5WYWxpZEFzV0RTID0gRkFMU0U7CisJCQkJCXBFbnRyeS0+VmFsaWRBc0FwQ2xpID0gRkFMU0U7CisJCQkJCXBFbnRyeS0+VmFsaWRBc01lc2ggPSBGQUxTRTsKKwkJCQkJcEVudHJ5LT5WYWxpZEFzRGxzID0gRkFMU0U7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJfQorCisJCQlwRW50cnktPmJJQW1CYWRBdGhlcm9zID0gRkFMU0U7CisJCQlwRW50cnktPnBBZCA9IHBBZDsKKwkJCXBFbnRyeS0+Q01UaW1lclJ1bm5pbmcgPSBGQUxTRTsKKwkJCXBFbnRyeS0+RW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmcgPSBFQVBPTF9TVEFSVF9ESVNBQkxFOworCQkJcEVudHJ5LT5SU05JRV9MZW4gPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5SX0NvdW50ZXIsIHNpemVvZihwRW50cnktPlJfQ291bnRlcikpOworCQkJcEVudHJ5LT5SZVRyeUNvdW50ZXIgPSBQRUVSX01TRzFfUkVUUllfVElNRVJfQ1RSOworCisJCQlpZiAocEVudHJ5LT5WYWxpZEFzTWVzaCkKKwkJCQlwRW50cnktPmFwaWR4ID0gKGFwaWR4IC0gTUlOX05FVF9ERVZJQ0VfRk9SX01FU0gpOworCQkJZWxzZSBpZiAocEVudHJ5LT5WYWxpZEFzQXBDbGkpCisJCQkJcEVudHJ5LT5hcGlkeCA9IChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9BUENMSSk7CisJCQllbHNlIGlmIChwRW50cnktPlZhbGlkQXNXRFMpCisJCQkJcEVudHJ5LT5hcGlkeCA9IChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJZWxzZSBpZiAocEVudHJ5LT5WYWxpZEFzRGxzKQorCQkJCXBFbnRyeS0+YXBpZHggPSAoYXBpZHggLSBNSU5fTkVUX0RFVklDRV9GT1JfRExTKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCWVsc2UKKwkJCQlwRW50cnktPmFwaWR4ID0gYXBpZHg7CisKKwkJCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJCQlwRW50cnktPkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisJCQkJCXBFbnRyeS0+V2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQlwRW50cnktPlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQl9CisKKwkJCXBFbnRyeS0+R1RLU3RhdGUgPSBSRUtFWV9ORUdPVElBVElORzsKKwkJCXBFbnRyeS0+UGFpcndpc2VLZXkuS2V5TGVuID0gMDsKKwkJCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlpZiAocEVudHJ5LT5WYWxpZEFzRGxzID09IFRSVUUpCisJCQkJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJZWxzZQorI2VuZGlmIC8vUU9TX0RMU19TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlwRW50cnktPlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJcEVudHJ5LT5QTUtJRF9DYWNoZUlkeCA9IEVOVFJZX05PVF9GT1VORDsKKwkJCUNPUFlfTUFDX0FERFIocEVudHJ5LT5BZGRyLCBwQWRkcik7CisJCQlwRW50cnktPlNzdCA9IFNTVF9OT1RfQVVUSDsKKwkJCXBFbnRyeS0+QXV0aFN0YXRlID0gQVNfTk9UX0FVVEg7CisJCQlwRW50cnktPkFpZCA9IChVU0hPUlQpaTsgIC8vMDsKKwkJCXBFbnRyeS0+Q2FwYWJpbGl0eUluZm8gPSAwOworCQkJcEVudHJ5LT5Qc01vZGUgPSBQV1JfQUNUSVZFOworCQkJcEVudHJ5LT5Qc1FJZGxlQ291bnQgPSAwOworCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOworCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCA9IDA7CisJCQlJbml0aWFsaXplUXVldWVIZWFkZXIoJnBFbnRyeS0+UHNRdWV1ZSk7CisKKworCQkJcEFkLT5NYWNUYWIuU2l6ZSArKzsKKworCQkJLy8gQWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlCisJCQlSVDI4WFhfU1RBX0VOVFJZX0FERChwQWQsIHBFbnRyeSk7CisKKworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZUluc2VydEVudHJ5IC0gYWxsb2NhdGUgZW50cnkgIyVkLCBUb3RhbD0gJWRcbiIsaSwgcEFkLT5NYWNUYWIuU2l6ZSkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBhZGQgdGhpcyBNQUMgZW50cnkgaW50byBIQVNIIHRhYmxlCisJaWYgKHBFbnRyeSkKKwl7CisJCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKKwkJaWYgKHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPT0gTlVMTCkKKwkJeworCQkJcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XSA9IHBFbnRyeTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBDdXJyRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOworCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCisJCQkJcEN1cnJFbnRyeSA9IHBDdXJyRW50cnktPnBOZXh0OworCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7CisJCX0KKwl9CisKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCXJldHVybiBwRW50cnk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJRGVsZXRlIGEgc3BlY2lmaWVkIGNsaWVudCBmcm9tIE1BQyB0YWJsZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWFjVGFibGVEZWxldGVFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgd2NpZCwKKwlJTiBQVUNIQVIgcEFkZHIpCit7CisJVVNIT1JUIEhhc2hJZHg7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnksICpwUHJldkVudHJ5LCAqcFByb2JlRW50cnk7CisJQk9PTEVBTiBDYW5jZWxsZWQ7CisJLy9VU0hPUlQJb2Zmc2V0OwkvLyB1bnVzZWQgdmFyaWFibGUKKwkvL1VDSEFSCWo7CQkJLy8gdW51c2VkIHZhcmlhYmxlCisKKwlpZiAod2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIEZBTFNFOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKKwkvL3BFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbd2NpZF07CisKKwlpZiAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNDTEkgfHwgcEVudHJ5LT5WYWxpZEFzQXBDbGkgfHwgcEVudHJ5LT5WYWxpZEFzV0RTIHx8IHBFbnRyeS0+VmFsaWRBc01lc2gKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKyAJCXx8IHBFbnRyeS0+VmFsaWRBc0RscworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkpKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBFbnRyeS0+QWRkciwgcEFkZHIpKQorCQl7CisKKwkJCS8vIERlbGV0ZSB0aGlzIGVudHJ5IGZyb20gQVNJQyBvbi1jaGlwIFdDSUQgVGFibGUKKwkJCVJUMjhYWF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgd2NpZCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIGZyZWUgcmVzb3VyY2VzIG9mIEJBCisJCQlCQVNlc3Npb25UZWFyRG93bkFMTChwQWQsIHBFbnRyeS0+QWlkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisJCQlwUHJldkVudHJ5ID0gTlVMTDsKKwkJCXBQcm9iZUVudHJ5ID0gcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XTsKKwkJCUFTU0VSVChwUHJvYmVFbnRyeSk7CisKKwkJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJCWRvCisJCQl7CisJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCQl7CisJCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCXBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPSBwRW50cnktPnBOZXh0OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCQlwUHJvYmVFbnRyeSA9IHBQcm9iZUVudHJ5LT5wTmV4dDsKKwkJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQkJLy8gbm90IGZvdW5kICEhIQorCQkJQVNTRVJUKHBQcm9iZUVudHJ5ICE9IE5VTEwpOworCisJCQlSVDI4WFhfU1RBX0VOVFJZX0tFWV9ERUwocEFkLCBCU1MwLCB3Y2lkKTsKKworCisJCWlmIChwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nICE9IEVBUE9MX1NUQVJUX0RJU0FCTEUpCisJCXsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEVudHJ5LT5FbnF1ZXVlU3RhcnRGb3JQU0tUaW1lciwgJkNhbmNlbGxlZCk7CisJCQlwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nID0gRUFQT0xfU1RBUlRfRElTQUJMRTsKKwkJfQorCisKKyAgIAkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworCQkJcEFkLT5NYWNUYWIuU2l6ZSAtLTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1hY1RhYmxlRGVsZXRlRW50cnkxIC0gVG90YWw9ICVkXG4iLCBwQWQtPk1hY1RhYi5TaXplKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwcmludGsoIlxuJXM6IEltcG9zc2libGUgV2NpZCA9ICVkICEhISEhXG4iLCBfX0ZVTkNUSU9OX18sIHdjaWQpOworCQl9CisJfQorCisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCS8vUmVzZXQgb3BlcmF0aW5nIG1vZGUgd2hlbiBubyBTdGEuCisJaWYgKHBBZC0+TWFjVGFiLlNpemUgPT0gMCkKKwl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSA9IDA7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCS8vQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwIC8qcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlKi8sIChBTExOX1NFVFBST1RFQ1QpLCBUUlVFLCAwIC8qcEFkLT5NYWNUYWIuZkFueVN0YXRpb25Ob25HRiovKTsKKwkJUlQyOFhYX1VQREFURV9QUk9URUNUKHBBZCk7ICAvLyBlZGl0IGJ5IGpvaG5saSwgZml4ICJpbl9pbnRlcnJ1cHQiIGVycm9yIHdoZW4gY2FsbCAiTWFjVGFibGVEZWxldGVFbnRyeSIgaW4gUnggdGFza2xldAorCX0KKworCXJldHVybiBUUlVFOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIHJlc2V0IHRoZSBlbnRpcmUgTUFDIHRhYmxlLiBBbGwgcGFja2V0cyBwZW5kaW5nIGluCisJCXRoZSBwb3dlci1zYXZpbmcgcXVldWVzIGFyZSBmcmVlZCBoZXJlLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWFjVGFibGVSZXNldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgcEFkKQoreworCWludCAgICAgICAgIGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZVJlc2V0XG4iKSk7CisJLy9OZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisJZm9yIChpPTE7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPT0gVFJVRSkKKwkgICB7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIGZyZWUgcmVzb3VyY2VzIG9mIEJBCisJCQlCQVNlc3Npb25UZWFyRG93bkFMTChwQWQsIGkpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQlwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPSBGQUxTRTsKKworCisKKyNpZmRlZiBSVDI4NzAKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uQWRkciwgNik7CisJCQlSVDI4WFhfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIGkpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJCQkvL0FzaWNEZWxXY2lkVGFiKHBBZCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzc29jUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfQVNTT0NfUkVRX1NUUlVDVCAqQXNzb2NSZXEsCisJSU4gUFVDSEFSICAgICAgICAgICAgICAgICAgICAgcEFkZHIsCisJSU4gVVNIT1JUICAgICAgICAgICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUxPTkcgICAgICAgICAgICAgICAgICAgICAgVGltZW91dCwKKwlJTiBVU0hPUlQgICAgICAgICAgICAgICAgICAgICBMaXN0ZW5JbnR2KQoreworCUNPUFlfTUFDX0FERFIoQXNzb2NSZXEtPkFkZHIsIHBBZGRyKTsKKwkvLyBBZGQgbWFzayB0byBzdXBwb3J0IDgwMi4xMWIgbW9kZSBvbmx5CisJQXNzb2NSZXEtPkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm8gJiBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOyAvLyBub3QgY2YtcG9sbGFibGUsIG5vdCBjZi1wb2xsLXJlcXVlc3QKKwlBc3NvY1JlcS0+VGltZW91dCA9IFRpbWVvdXQ7CisJQXNzb2NSZXEtPkxpc3RlbkludHYgPSBMaXN0ZW5JbnR2OworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIERpc2Fzc29jUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCAqRGlzYXNzb2NSZXEsCisJSU4gUFVDSEFSIHBBZGRyLAorCUlOIFVTSE9SVCBSZWFzb24pCit7CisJQ09QWV9NQUNfQUREUihEaXNhc3NvY1JlcS0+QWRkciwgcEFkZHIpOworCURpc2Fzc29jUmVxLT5SZWFzb24gPSBSZWFzb247Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNoZWNrIHRoZSBvdXQgZ29pbmcgZnJhbWUsIGlmIHRoaXMgaXMgYW4gREhDUCBvciBBUlAgZGF0YWdyYW0KKwl3aWxsIGJlIGR1cGxpY2F0ZSBhbm90aGVyIGZyYW1lIGF0IGxvdyBkYXRhIHJhdGUgdHJhbnNtaXQuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFBhY2tldCAJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJCVRvIGJlIGR1cGxpY2F0ZSBhdCBMb3cgZGF0YSByYXRlIHRyYW5zbWl0LiAoMW1iKQorCQlGQUxTRQkJRG8gbm90aGluZy4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCQlNQUMgaGVhZGVyICsgSVAgSGVhZGVyICsgVURQIEhlYWRlcgorCQkgIDE0IEJ5dGVzCSAgMjAgQnl0ZXMKKworCQlVRFAgSGVhZGVyCisJCTAwfDAxfDAyfDAzfDA0fDA1fDA2fDA3fDA4fDA5fDEwfDExfDEyfDEzfDE0fDE1fAorCQkJCQkJU291cmNlIFBvcnQKKwkJMTZ8MTd8MTh8MTl8MjB8MjF8MjJ8MjN8MjR8MjV8MjZ8Mjd8Mjh8Mjl8MzB8MzF8CisJCQkJCURlc3RpbmF0aW9uIFBvcnQKKworCQlwb3J0IDB4NDMgbWVhbnMgQm9vdHN0cmFwIFByb3RvY29sLCBzZXJ2ZXIuCisJCVBvcnQgMHg0NCBtZWFucyBCb290c3RyYXAgUHJvdG9jb2wsIGNsaWVudC4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworQk9PTEVBTiBSVE1QQ2hlY2tESENQRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJUEFDS0VUX0lORk8gCVBhY2tldEluZm87CisJVUxPTkcJCQlOdW1iZXJPZkJ5dGVzUmVhZCA9IDA7CisJVUxPTkcJCQlDdXJyZW50T2Zmc2V0ID0gMDsKKwlQVk9JRAkJCXBWaXJ0dWFsQWRkcmVzcyA9IE5VTEw7CisJVUlOVAkJCU5kaXNCdWZmZXJMZW5ndGg7CisJUFVDSEFSCQkJcFNyYzsKKwlVU0hPUlQJCQlQcm90b2NvbDsKKwlVQ0hBUgkJCUJ5dGVPZmZzZXQzNiA9IDA7CisJVUNIQVIJCQlCeXRlT2Zmc2V0MzggPSAwOworCUJPT0xFQU4gCQlSZWFkRmlyc3RQYXJtID0gVFJVRTsKKworCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAoUFVDSEFSICopJnBWaXJ0dWFsQWRkcmVzcywgJk5kaXNCdWZmZXJMZW5ndGgpOworCisJTnVtYmVyT2ZCeXRlc1JlYWQgKz0gTmRpc0J1ZmZlckxlbmd0aDsKKwlwU3JjID0gKFBVQ0hBUikgcFZpcnR1YWxBZGRyZXNzOworCVByb3RvY29sID0gKihwU3JjICsgMTIpICogMjU2ICsgKihwU3JjICsgMTMpOworCisJLy8KKwkvLyBDaGVjayBESENQICYgQk9PVFAgcHJvdG9jb2wKKwkvLworCXdoaWxlIChOdW1iZXJPZkJ5dGVzUmVhZCA8PSBQYWNrZXRJbmZvLlRvdGFsUGFja2V0TGVuZ3RoKQorCXsKKwkJaWYgKChOdW1iZXJPZkJ5dGVzUmVhZCA+PSAzNSkgJiYgKFJlYWRGaXJzdFBhcm0gPT0gVFJVRSkpCisJCXsKKwkJCUN1cnJlbnRPZmZzZXQgPSAzNSAtIChOdW1iZXJPZkJ5dGVzUmVhZCAtIE5kaXNCdWZmZXJMZW5ndGgpOworCQkJQnl0ZU9mZnNldDM2ID0gKihwU3JjICsgQ3VycmVudE9mZnNldCk7CisJCQlSZWFkRmlyc3RQYXJtID0gRkFMU0U7CisJCX0KKworCQlpZiAoTnVtYmVyT2ZCeXRlc1JlYWQgPj0gMzcpCisJCXsKKwkJCUN1cnJlbnRPZmZzZXQgPSAzNyAtIChOdW1iZXJPZkJ5dGVzUmVhZCAtIE5kaXNCdWZmZXJMZW5ndGgpOworCQkJQnl0ZU9mZnNldDM4ID0gKihwU3JjICsgQ3VycmVudE9mZnNldCk7CisJCQkvL0VuZCBvZiBSZWFkCisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy8gQ2hlY2sgZm9yIERIQ1AgJiBCT09UUCBwcm90b2NvbAorCWlmICgoQnl0ZU9mZnNldDM2ICE9IDB4NDQpIHx8IChCeXRlT2Zmc2V0MzggIT0gMHg0MykpCisJCXsKKwkJLy8KKwkJLy8gMjA1NCAoaGV4IDA4MDYpIGZvciBBUlAgZGF0YWdyYW1zCisJCS8vIGlmIHRoaXMgcGFja2V0IGlzIG5vdCBBUlAgZGF0YWdyYW1zLCB0aGVuIGRvIG5vdGhpbmcKKwkJLy8gQVJQIGRhdGFncmFtcyB3aWxsIGFsc28gYmUgZHVwbGljYXRlIGF0IDFtYiBicm9hZGNhc3QgZnJhbWVzCisJCS8vCisJCWlmIChQcm90b2NvbCAhPSAweDA4MDYgKQorCQkJcmV0dXJuIEZBTFNFOworCQl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitCT09MRUFOIFJUTVBDaGVja0V0aGVyVHlwZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCkKK3sKKwlVU0hPUlQJVHlwZUxlbjsKKwlVQ0hBUglCeXRlMCwgQnl0ZTE7CisJUFVDSEFSCXBTcmNCdWY7CisJVUlOVDMyCXBrdExlbjsKKwlVSU5UMTYgCXNyY1BvcnQsIGRzdFBvcnQ7CisJQk9PTEVBTglzdGF0dXMgPSBUUlVFOworCisKKwlwU3JjQnVmID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCXBrdExlbiA9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCisJQVNTRVJUKHBTcmNCdWYpOworCisJUlRNUF9TRVRfUEFDS0VUX1NQRUNJRklDKHBQYWNrZXQsIDApOworCisJLy8gZ2V0IEV0aGVybmV0IHByb3RvY29sIGZpZWxkCisJVHlwZUxlbiA9IChwU3JjQnVmWzEyXSA8PCA4KSArIHBTcmNCdWZbMTNdOworCisJcFNyY0J1ZiArPSBMRU5HVEhfODAyXzM7CS8vIFNraXAgdGhlIEV0aGVybmV0IEhlYWRlci4KKworCWlmIChUeXBlTGVuIDw9IDE1MDApCisJewkvLyA4MDIuMywgODAyLjMgTExDCisJCS8qCisJCQlEZXN0TUFDKDYpICsgU3JjTUFDKDYpICsgTGVuZ2h0KDIpICsKKwkJCURTQVAoMSkgKyBTU0FQKDEpICsgQ29udHJvbCgxKSArCisJCQlpZiB0aGUgRFNBUCA9IDB4QUEsIFNTQVA9MHhBQSwgQ29udG9ybCA9IDB4MDMsIGl0IGhhcyBhIDUtYnl0ZXMgU05BUCBoZWFkZXIuCisJCQkJPT4gKyBTTkFQICg1LCBPcmlnaW5hdGlvbklEKDMpICsgZXRoZXJUeXBlKDIpKQorCQkqLworCQlpZiAocFNyY0J1ZlswXSA9PSAweEFBICYmIHBTcmNCdWZbMV0gPT0gMHhBQSAmJiBwU3JjQnVmWzJdID09IDB4MDMpCisJCXsKKwkJCVNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIocFNyY0J1ZiwgNiwgJkJ5dGUwLCAmQnl0ZTEpOworCQkJUlRNUF9TRVRfUEFDS0VUX0xMQ1NOQVAocFBhY2tldCwgMSk7CisJCQlUeXBlTGVuID0gKFVTSE9SVCkoKEJ5dGUwIDw8IDgpICsgQnl0ZTEpOworCQkJcFNyY0J1ZiArPSA4OyAvLyBTa2lwIHRoaXMgTExDL1NOQVAgaGVhZGVyCisJCX0KKwkJZWxzZQorCQl7CisJCQkvL0l0IGp1c3QgaGFzIDMtYnl0ZSBMTEMgaGVhZGVyLCBtYXliZSBhIGxlZ2FjeSBldGhlciB0eXBlIGZyYW1lLiB3ZSBkaWRuJ3QgaGFuZGxlIGl0LgorCQl9CisJfQorCisJLy8gSWYgaXQncyBhIFZMQU4gcGFja2V0LCBnZXQgdGhlIHJlYWwgVHlwZS9MZW5ndGggZmllbGQuCisJaWYgKFR5cGVMZW4gPT0gMHg4MTAwKQorCXsKKwkJLyogMHg4MTAwIG1lYW5zIFZMQU4gcGFja2V0cyAqLworCisJCS8qIERlc3QuIE1BQyBBZGRyZXNzICg2LWJ5dGVzKSArCisJCSAgIFNvdXJjZSBNQUMgQWRkcmVzcyAoNi1ieXRlcykgKworCQkgICBMZW5ndGgvVHlwZSA9IDgwMi4xUSBUYWcgVHlwZSAoMi1ieXRlKSArCisJCSAgIFRhZyBDb250cm9sIEluZm9ybWF0aW9uICgyLWJ5dGVzKSArCisJCSAgIExlbmd0aCAvIFR5cGUgKDItYnl0ZXMpICsKKwkJICAgZGF0YSBwYXlsb2FkICgwLW4gYnl0ZXMpICsKKwkJICAgUGFkICgwLXAgYnl0ZXMpICsKKwkJICAgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgKDQtYnl0ZXMpICovCisKKwkJUlRNUF9TRVRfUEFDS0VUX1ZMQU4ocFBhY2tldCwgMSk7CisJCVNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIocFNyY0J1ZiwgMiwgJkJ5dGUwLCAmQnl0ZTEpOworCQlUeXBlTGVuID0gKFVTSE9SVCkoKEJ5dGUwIDw8IDgpICsgQnl0ZTEpOworCisJCXBTcmNCdWYgKz0gNDsgLy8gU2tpcCB0aGUgVkxBTiBIZWFkZXIuCisJfQorCisJc3dpdGNoIChUeXBlTGVuKQorCXsKKwkJY2FzZSAweDA4MDA6CisJCQl7CisJCQkJQVNTRVJUKChwa3RMZW4gPiAzNCkpOworCQkJCWlmICgqKHBTcmNCdWYgKyA5KSA9PSAweDExKQorCQkJCXsJLy8gdWRwIHBhY2tldAorCQkJCQlBU1NFUlQoKHBrdExlbiA+IDM0KSk7CS8vIDE0IGZvciBldGhlcm5ldCBoZWFkZXIsIDIwIGZvciBJUCBoZWFkZXIKKworCQkJCQlwU3JjQnVmICs9IDIwOwkvLyBTa2lwIHRoZSBJUCBoZWFkZXIKKwkJCQkJc3JjUG9ydCA9IE9TX05UT0hTKCooKFVJTlQxNiAqKXBTcmNCdWYpKTsKKwkJCQkJZHN0UG9ydCA9IE9TX05UT0hTKCooKFVJTlQxNiAqKShwU3JjQnVmICsyKSkpOworCisJCQkJCWlmICgoc3JjUG9ydD09MHg0NCAmJiBkc3RQb3J0PT0weDQzKSB8fCAoc3JjUG9ydD09MHg0MyAmJiBkc3RQb3J0PT0weDQ0KSkKKwkJCQkJewkvL0l0J3MgYSBCT09UUC9ESENQIHBhY2tldAorCQkJCQkJUlRNUF9TRVRfUEFDS0VUX0RIQ1AocFBhY2tldCwgMSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAweDA4MDY6CisJCQl7CisJCQkJLy9BUlAgUGFja2V0LgorCQkJCVJUTVBfU0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQsIDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMHg4ODhlOgorCQkJeworCQkJCS8vIEVBUE9MIFBhY2tldC4KKwkJCQlSVE1QX1NFVF9QQUNLRVRfRUFQT0wocFBhY2tldCwgMSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0YXR1cyA9IEZBTFNFOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKKworfQorCisKKworVk9JRCBVcGRhdGVfUnNzaV9TYW1wbGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUlNTSV9TQU1QTEUJCSpwUnNzaSwKKwlJTiBQUlhXSV9TVFJVQwkJcFJ4V0kpCisJCXsKKwlDSEFSCXJzc2kwID0gcFJ4V0ktPlJTU0kwOworCUNIQVIJcnNzaTEgPSBwUnhXSS0+UlNTSTE7CisJQ0hBUglyc3NpMiA9IHBSeFdJLT5SU1NJMjsKKworCWlmIChyc3NpMCAhPSAwKQorCXsKKwkJcFJzc2ktPkxhc3RSc3NpMAk9IENvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUilyc3NpMCwgUlNTSV8wKTsKKwkJcFJzc2ktPkF2Z1Jzc2kwWDgJPSAocFJzc2ktPkF2Z1Jzc2kwWDggLSBwUnNzaS0+QXZnUnNzaTApICsgcFJzc2ktPkxhc3RSc3NpMDsKKwkJcFJzc2ktPkF2Z1Jzc2kwCT0gcFJzc2ktPkF2Z1Jzc2kwWDggPj4gMzsKKwl9CisKKwlpZiAocnNzaTEgIT0gMCkKKwl7CisJCXBSc3NpLT5MYXN0UnNzaTEJPSBDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpcnNzaTEsIFJTU0lfMSk7CisJCXBSc3NpLT5BdmdSc3NpMVg4CT0gKHBSc3NpLT5BdmdSc3NpMVg4IC0gcFJzc2ktPkF2Z1Jzc2kxKSArIHBSc3NpLT5MYXN0UnNzaTE7CisJCXBSc3NpLT5BdmdSc3NpMQk9IHBSc3NpLT5BdmdSc3NpMVg4ID4+IDM7CisJfQorCisJaWYgKHJzc2kyICE9IDApCisJeworCQlwUnNzaS0+TGFzdFJzc2kyCT0gQ29udmVydFRvUnNzaShwQWQsIChDSEFSKXJzc2kyLCBSU1NJXzIpOworCQlwUnNzaS0+QXZnUnNzaTJYOCAgPSAocFJzc2ktPkF2Z1Jzc2kyWDggLSBwUnNzaS0+QXZnUnNzaTIpICsgcFJzc2ktPkxhc3RSc3NpMjsKKwkJcFJzc2ktPkF2Z1Jzc2kyID0gcFJzc2ktPkF2Z1Jzc2kyWDggPj4gMzsKKwl9Cit9CisKKworCisvLyBOb3JtYWwgbGVnYWN5IFJ4IHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0xlZ2FjeV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVBORElTX1BBQ0tFVAlwUnhQYWNrZXQgPSBwUnhCbGstPnBSeFBhY2tldDsKKwlVQ0hBUgkJCUhlYWRlcjgwMl8zW0xFTkdUSF84MDJfM107CisKKwkvLyAxLiBnZXQgODAyLjMgSGVhZGVyCisJLy8gMi4gcmVtb3ZlIExMQworCS8vIAkJYS4gcG9pbnRlciBwUnhCbGstPnBEYXRhIHRvIHBheWxvYWQKKwkvLyAgICAgIGIuIG1vZGlmeSBwUnhCbGstPkRhdGFTaXplCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJUlRNUF84MDJfMTFfUkVNT1ZFX0xMQ19BTkRfQ09OVkVSVF9UT184MDJfMyhwUnhCbGssIEhlYWRlcjgwMl8zKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwUnhCbGstPkRhdGFTaXplID4gTUFYX1JYX1BLVF9MRU4pCisJeworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KKworCisJU1RBVFNfSU5DX1JYX1BBQ0tFVFMocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisKKyNpZmRlZiBSVDI4NzAKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApCisJeworCQlQQkFfUkVDX0VOVFJZCQlwQkFFbnRyeTsKKwkJVUxPTkcJCQkJTm93MzI7CisJCVVDSEFSCQkJCVdjaWQgPSBwUnhCbGstPnBSeFdJLT5XaXJlbGVzc0NsaUlEOworCQlVQ0hBUgkJCQlUSUQgPSBwUnhCbGstPnBSeFdJLT5USUQ7CisJCVVTSE9SVAkJCQlJZHg7CisKKyNkZWZpbmUgUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVAkJKCgxMDAgKiBIWikvMTAwMCkJLy8gc3lzdGVtIHRpY2tzIC0tIDEwMCBtcworCisJCWlmIChXY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXsKKwkJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFSZWNXY2lkQXJyYXlbVElEXTsKKwkJCWlmIChJZHggIT0gMCkKKwkJCXsKKwkJCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtJZHhdOworCQkJCS8vIHVwZGF0ZSBsYXN0IHJ4IHRpbWUKKwkJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3czMik7CisJCQkJaWYgKChwQkFFbnRyeS0+bGlzdC5xbGVuID4gMCkgJiYKKwkJCQkJIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcisoUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVCkpKQorCSAgIAkJCQkpCisJCQkJeworCQkJCQlwcmludGsoIkluZGljYXRlX0xlZ2FjeV9QYWNrZXQoKTpmbHVzaCByZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMhIFJ4V0ktPkZsYWdzPSVkLCBwUnhXSS5USUQ9JWQsIFJ4RC0+QU1QRFU9JWQhXG4iLCBwUnhCbGstPkZsYWdzLCBwUnhCbGstPnBSeFdJLT5USUQsIHBSeEJsay0+UnhELkFNUERVKTsKKwkJCQkJaGV4X2R1bXAoIkR1bXAgdGhlIGxlZ2FjeSBQYWNrZXQ6IiwgR0VUX09TX1BLVF9EQVRBUFRSKHBSeEJsay0+cFJ4UGFja2V0KSwgNjQpOworCQkJCQliYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMocEFkLCBwQkFFbnRyeSwgTm93MzIpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCXdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldChwQWQsIHBSeEJsaywgSGVhZGVyODAyXzMsIEZyb21XaGljaEJTU0lEKTsKKworCS8vCisJLy8gcGFzcyB0aGlzIDgwMi4zIHBhY2tldCB0byB1cHBlciBsYXllciBvciBmb3J3YXJkIHRoaXMgcGFja2V0IHRvIFdNIGRpcmVjdGx5CisJLy8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit9CisKKworLy8gTm9ybWFsLCBBTVBEVSBvciBBTVNEVQorVk9JRCBDbW1SeG5vblJhbGlua0ZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNUERVKSAmJiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApKQorCXsKKwkJSW5kaWNhdGVfQU1QRFVfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKSkKKwkJeworCQkJLy8gaGFuZGxlIEEtTVNEVQorCQkJSW5kaWNhdGVfQU1TRFVfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQlJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKwl9Cit9CisKKworVk9JRCBDbW1SeFJhbGlua0ZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVVDSEFSCQkJSGVhZGVyODAyXzNbTEVOR1RIXzgwMl8zXTsKKwlVSU5UMTYJCQlNc2R1MlNpemU7CisJVUlOVDE2IAkJCVBheWxvYWQxU2l6ZSwgUGF5bG9hZDJTaXplOworCVBVQ0hBUiAJCQlwRGF0YTI7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQyID0gTlVMTDsKKworCisKKwlNc2R1MlNpemUgPSAqKHBSeEJsay0+cERhdGEpICsgKCoocFJ4QmxrLT5wRGF0YSsxKSA8PCA4KTsKKworCWlmICgoTXNkdTJTaXplIDw9IDE1MzYpICYmIChNc2R1MlNpemUgPCBwUnhCbGstPkRhdGFTaXplKSkKKwl7CisJCS8qIHNraXAgdHdvIGJ5dGUgTVNEVTIgbGVuICovCisJCXBSeEJsay0+cERhdGEgKz0gMjsKKwkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSAyOworCX0KKwllbHNlCisJeworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJLy8gZ2V0IDgwMi4zIEhlYWRlciBhbmQgIHJlbW92ZSBMTEMKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlSVE1QXzgwMl8xMV9SRU1PVkVfTExDX0FORF9DT05WRVJUX1RPXzgwMl8zKHBSeEJsaywgSGVhZGVyODAyXzMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCisJLy8gUmFsaW5rIEFnZ3JlZ2F0aW9uIGZyYW1lCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQgKys7CisJUGF5bG9hZDFTaXplID0gcFJ4QmxrLT5EYXRhU2l6ZSAtIE1zZHUyU2l6ZTsKKwlQYXlsb2FkMlNpemUgPSBNc2R1MlNpemUgLSBMRU5HVEhfODAyXzM7CisKKwlwRGF0YTIgPSBwUnhCbGstPnBEYXRhICsgUGF5bG9hZDFTaXplICsgTEVOR1RIXzgwMl8zOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXBQYWNrZXQyID0gZHVwbGljYXRlX3BrdChwQWQsIChwRGF0YTItTEVOR1RIXzgwMl8zKSwgTEVOR1RIXzgwMl8zLCBwRGF0YTIsIFBheWxvYWQyU2l6ZSwgRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJaWYgKCFwUGFja2V0MikKKwl7CisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKwkvLyB1cGRhdGUgcGF5bG9hZCBzaXplIG9mIDFzdCBwYWNrZXQKKwlwUnhCbGstPkRhdGFTaXplID0gUGF5bG9hZDFTaXplOworCXdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldChwQWQsIHBSeEJsaywgSGVhZGVyODAyXzMsIEZyb21XaGljaEJTU0lEKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwUGFja2V0MikKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBQYWNrZXQyLCBGcm9tV2hpY2hCU1NJRCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorfQorCisKKyNkZWZpbmUgUkVTRVRfRlJBR0ZSQU1FKF9mcmFnRnJhbWUpIFwKKwl7CQkJCQkJCQlcCisJCV9mcmFnRnJhbWUuUnhTaXplID0gMDsJCVwKKwkJX2ZyYWdGcmFtZS5TZXF1ZW5jZSA9IDA7CVwKKwkJX2ZyYWdGcmFtZS5MYXN0RnJhZyA9IDA7CVwKKwkJX2ZyYWdGcmFtZS5GbGFncyA9IDA7CQlcCisJfQorCisKK1BORElTX1BBQ0tFVCBSVE1QRGVGcmFnbWVudERhdGFGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKQoreworCVBIRUFERVJfODAyXzExCXBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7CisJUE5ESVNfUEFDS0VUCXBSeFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCVVDSEFSCQkJKnBEYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlVU0hPUlQJCQlEYXRhU2l6ZSA9IHBSeEJsay0+RGF0YVNpemU7CisJUE5ESVNfUEFDS0VUCXBSZXRQYWNrZXQgPSBOVUxMOworCVVDSEFSCQkJKnBGcmFnQnVmZmVyID0gTlVMTDsKKwlCT09MRUFOIAkJYlJlYXNzRG9uZSA9IEZBTFNFOworCVVDSEFSCQkJSGVhZGVyUm9vbSA9IDA7CisKKworCUFTU0VSVChwSGVhZGVyKTsKKworCUhlYWRlclJvb20gPSBwRGF0YSAtIChVQ0hBUiAqKXBIZWFkZXI7CisKKwkvLyBSZS1hc3NlbWJsZSB0aGUgZnJhZ21lbnRlZCBwYWNrZXRzCisJaWYgKHBIZWFkZXItPkZyYWcgPT0gMCkJCS8vIEZyYWcuIE51bWJlciBpcyAwIDogRmlyc3QgZnJhZyBvciBvbmx5IG9uZSBwa3QKKwl7CisJCS8vIHRoZSBmaXJzdCBwa3Qgb2YgZnJhZ21lbnQsIHJlY29yZCBpdC4KKwkJaWYgKHBIZWFkZXItPkZDLk1vcmVGcmFnKQorCQl7CisJCQlBU1NFUlQocEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQpOworCQkJcEZyYWdCdWZmZXIgPSBHRVRfT1NfUEtUX0RBVEFQVFIocEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQpOworCQkJcEFkLT5GcmFnRnJhbWUuUnhTaXplICAgPSBEYXRhU2l6ZSArIEhlYWRlclJvb207CisJCQlOZGlzTW92ZU1lbW9yeShwRnJhZ0J1ZmZlciwJIHBIZWFkZXIsIHBBZC0+RnJhZ0ZyYW1lLlJ4U2l6ZSk7CisJCQlwQWQtPkZyYWdGcmFtZS5TZXF1ZW5jZSA9IHBIZWFkZXItPlNlcXVlbmNlOworCQkJcEFkLT5GcmFnRnJhbWUuTGFzdEZyYWcgPSBwSGVhZGVyLT5GcmFnOwkgICAvLyBTaG91bGQgYmUgMAorCQkJQVNTRVJUKHBBZC0+RnJhZ0ZyYW1lLkxhc3RGcmFnID09IDApOworCQkJZ290byBkb25lOwkvLyBlbmQgb2YgcHJvY2Vzc2luZyB0aGlzIGZyYW1lCisJCX0KKwl9CisJZWxzZQkvL01pZGRsZSAmIEVuZCBvZiBmcmFnbWVudAorCXsKKwkJaWYgKChwSGVhZGVyLT5TZXF1ZW5jZSAhPSBwQWQtPkZyYWdGcmFtZS5TZXF1ZW5jZSkgfHwKKwkJCShwSGVhZGVyLT5GcmFnICE9IChwQWQtPkZyYWdGcmFtZS5MYXN0RnJhZyArIDEpKSkKKwkJeworCQkJLy8gRnJhZ21lbnQgaXMgbm90IHRoZSBzYW1lIHNlcXVlbmNlIG9yIG91dCBvZiBmcmFnbWVudCBudW1iZXIgb3JkZXIKKwkJCS8vIFJlc2V0IEZyYWdtZW50IGNvbnRyb2wgYmxrCisJCQlSRVNFVF9GUkFHRlJBTUUocEFkLT5GcmFnRnJhbWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRnJhZ21lbnQgaXMgbm90IHRoZSBzYW1lIHNlcXVlbmNlIG9yIG91dCBvZiBmcmFnbWVudCBudW1iZXIgb3JkZXIuXG4iKSk7CisJCQlnb3RvIGRvbmU7IC8vIGdpdmUgdXAgdGhpcyBmcmFtZQorCQl9CisJCWVsc2UgaWYgKChwQWQtPkZyYWdGcmFtZS5SeFNpemUgKyBEYXRhU2l6ZSkgPiBNQVhfRlJBTUVfU0laRSkKKwkJeworCQkJLy8gRnJhZ21lbnQgZnJhbWUgaXMgdG9vIGxhcmdlLCBpdCBleGVlZHMgdGhlIG1heGltdW0gZnJhbWUgc2l6ZS4KKwkJCS8vIFJlc2V0IEZyYWdtZW50IGNvbnRyb2wgYmxrCisJCQlSRVNFVF9GUkFHRlJBTUUocEFkLT5GcmFnRnJhbWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRnJhZ21lbnQgZnJhbWUgaXMgdG9vIGxhcmdlLCBpdCBleGVlZHMgdGhlIG1heGltdW0gZnJhbWUgc2l6ZS5cbiIpKTsKKwkJCWdvdG8gZG9uZTsgLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCX0KKworICAgICAgICAvLworCQkvLyBCcm9hZGNvbSBBUChCQ005NDcwNEFHUikgd2lsbCBzZW5kIG91dCBMTEMgaW4gZnJhZ21lbnQncyBwYWNrZXQsIExMQyBvbmx5IGNhbiBhY2NwZXQgYXQgZmlyc3QgZnJhZ21lbnQuCisJCS8vIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBkcm9wdCBpdC4KKwkJLy8KKwkJaWYgKE5kaXNFcXVhbE1lbW9yeShwRGF0YSwgU05BUF84MDJfMUgsIHNpemVvZihTTkFQXzgwMl8xSCkpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJGaW5kIGFub3RoZXIgTExDIGF0IE1pZGRsZSBvciBFbmQgZnJhZ21lbnQoU049JWQsIEZyYWc9JWQpXG4iLCBwSGVhZGVyLT5TZXF1ZW5jZSwgcEhlYWRlci0+RnJhZykpOworCQkJZ290byBkb25lOyAvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJfQorCisJCXBGcmFnQnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KTsKKworCQkvLyBjb25jYXRlbmF0ZSB0aGlzIGZyYWdtZW50IGludG8gdGhlIHJlLWFzc2VtYmx5IGJ1ZmZlcgorCQlOZGlzTW92ZU1lbW9yeSgocEZyYWdCdWZmZXIgKyBwQWQtPkZyYWdGcmFtZS5SeFNpemUpLCBwRGF0YSwgRGF0YVNpemUpOworCQlwQWQtPkZyYWdGcmFtZS5SeFNpemUgICs9IERhdGFTaXplOworCQlwQWQtPkZyYWdGcmFtZS5MYXN0RnJhZyA9IHBIZWFkZXItPkZyYWc7CSAgIC8vIFVwZGF0ZSBmcmFnbWVudCBudW1iZXIKKworCQkvLyBMYXN0IGZyYWdtZW50CisJCWlmIChwSGVhZGVyLT5GQy5Nb3JlRnJhZyA9PSBGQUxTRSkKKwkJeworCQkJYlJlYXNzRG9uZSA9IFRSVUU7CisJCX0KKwl9CisKK2RvbmU6CisJLy8gYWx3YXlzIHJlbGVhc2UgcnggZnJhZ21lbnRlZCBwYWNrZXQKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKworCS8vIHJldHVybiBkZWZyYWdtZW50ZWQgcGFja2V0IGlmIHBhY2tldCBpcyByZWFzc2VtYmxlZCBjb21wbGV0ZWx5CisJLy8gb3RoZXJ3aXNlIHJldHVybiBOVUxMCisJaWYgKGJSZWFzc0RvbmUpCisJeworCQlQTkRJU19QQUNLRVQgcE5ld0ZyYWdQYWNrZXQ7CisKKwkJLy8gYWxsb2NhdGUgYSBuZXcgcGFja2V0IGJ1ZmZlciBmb3IgZnJhZ21lbnQKKwkJcE5ld0ZyYWdQYWNrZXQgPSBSVE1QX0FsbG9jYXRlRnJhZ1BhY2tldEJ1ZmZlcihwQWQsIFJYX0JVRkZFUl9OT1JNU0laRSk7CisJCWlmIChwTmV3RnJhZ1BhY2tldCkKKwkJeworCQkJLy8gdXBkYXRlIFJ4QmxrCisJCQlwUmV0UGFja2V0ID0gcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQ7CisJCQlwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCA9IHBOZXdGcmFnUGFja2V0OworCQkJcFJ4QmxrLT5wSGVhZGVyID0gKFBIRUFERVJfODAyXzExKSBHRVRfT1NfUEtUX0RBVEFQVFIocFJldFBhY2tldCk7CisJCQlwUnhCbGstPnBEYXRhID0gKFVDSEFSICopcFJ4QmxrLT5wSGVhZGVyICsgSGVhZGVyUm9vbTsKKwkJCXBSeEJsay0+RGF0YVNpemUgPSBwQWQtPkZyYWdGcmFtZS5SeFNpemUgLSBIZWFkZXJSb29tOworCQkJcFJ4QmxrLT5wUnhQYWNrZXQgPSBwUmV0UGFja2V0OworCQl9CisJCWVsc2UKKwkJeworCQkJUkVTRVRfRlJBR0ZSQU1FKHBBZC0+RnJhZ0ZyYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBwUmV0UGFja2V0OworfQorCisKK1ZPSUQgSW5kaWNhdGVfQU1TRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlVSU5UCQkJbk1TRFU7CisKKwl1cGRhdGVfb3NfcGFja2V0X2luZm8ocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwlSVE1QX1NFVF9QQUNLRVRfSUYocFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKwluTVNEVSA9IGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUpOworfQorCitWT0lEIEluZGljYXRlX0VBUE9MX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCVNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKHBBZCwgcEVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwRW50cnkgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiSW5kaWNhdGVfRUFQT0xfUGFja2V0OiBkcm9wIGFuZCByZWxlYXNlIHRoZSBpbnZhbGlkIHBhY2tldC5cbiIpKTsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBCQ05fVEJUVF9PRkZTRVQJCTY0CS8vZGVmZXIgNjQgdXMKK1ZPSUQgUmVTeW5jQmVhY29uVGltZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKK3sKKworCVVJTlQzMiAgT2Zmc2V0OworCisKKwlPZmZzZXQgPSAocEFkLT5UYnR0VGlja0NvdW50KSAlIChCQ05fVEJUVF9PRkZTRVQpOworCisJcEFkLT5UYnR0VGlja0NvdW50Kys7CisKKwkvLworCS8vIFRoZSB1cGRhdGVkIEJlYWNvbkludGVydmFsIFZhbHVlIHdpbGwgYWZmZWN0IEJlYWNvbiBJbnRlcnZhbCBhZnRlciB0d28gVEJUVAorCS8vIGJlYWNhc3VlIHRoZSBvcmlnaW5hbCBCZWFjb25JbnRlcnZhbCBoYWQgYmVlbiBsb2FkZWQgaW50byBuZXh0IFRCVFRfVElNRVIKKwkvLworCWlmIChPZmZzZXQgPT0gKEJDTl9UQlRUX09GRlNFVC0yKSkKKwl7CisJCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOworCQljc3IuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDQpIC0gMSA7CS8vIEFTSUMgcmVnaXN0ZXIgaW4gdW5pdHMgb2YgMS8xNiBUVSA9IDY0dXMKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7CisJfQorCWVsc2UKKwl7CisJCWlmIChPZmZzZXQgPT0gKEJDTl9UQlRUX09GRlNFVC0xKSkKKwkJeworCQkJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7CisJCQljc3IuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kKSA8PCA0OyAvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YV8yODcwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YV8yODcwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwNjZhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9kYXRhXzI4NzAuYwpAQCAtMCwwICsxLDk4MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKKyAgIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG11c3QgYmUgVVNCLWRlcGVuZGVkLCBvciB5b3Ugc2hvdWxkIG91dCB5b3VyIGZ1bmN0aW9uCisJaW4gb3RoZXIgZmlsZXMuCisKKyovCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKworLyoKKwlXZSBjYW4gZG8gY29weSB0aGUgZnJhbWUgaW50byBwVHhDb250ZXh0IHdoZW4gbWF0Y2ggZm9sbG93aW5nIGNvbmRpdGlvbnMuCisJCT0+CisJCT0+CisJCT0+CisqLworc3RhdGljIGlubGluZSBORElTX1NUQVRVUyBSdG1wVVNCQ2FuRG9Xcml0ZSgKKwlJTiBSVE1QX0FEQVBURVIJCSpwQWQsCisJSU4gVUNIQVIJCQlRdWVJZHgsCisJSU4gSFRfVFhfQ09OVEVYVCAJKnBIVFRYQ29udGV4dCkKK3sKKwlORElTX1NUQVRVUwljYW5Xcml0ZSA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKworCWlmICgoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikgPCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pICYmIChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyBMT0NBTF9UWEJVRl9TSVpFKSA+IHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUnRtcFVTQkNhbkRvV3JpdGUgYzEhXG4iKSk7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOworCX0KKwllbHNlIGlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID09IDgpICYmIChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPCBMT0NBTF9UWEJVRl9TSVpFKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUnRtcFVTQkNhbkRvV3JpdGUgYzIhXG4iKSk7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOworCX0KKwllbHNlIGlmIChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IFRSVUUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlJ0bXBVU0JDYW5Eb1dyaXRlIGMzIVxuIikpOworCX0KKwllbHNlCisJeworCQljYW5Xcml0ZSA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCisKKwlyZXR1cm4gY2FuV3JpdGU7Cit9CisKKworVVNIT1JUIFJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JQk9PTEVBTgkJCWJJc0xhc3QsCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKQoreworCisJLy8gRHVtbXkgZnVuY3Rpb24uIFNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCisJcmV0dXJuIDA7CisKK30KKworVVNIT1JUCVJ0bXBVU0JfV3JpdGVGcmFnVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhZ051bSwKKwlPVVQJVVNIT1JUCQkJKkZyZWVOdW1iZXIpCit7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCVVTSE9SVAkJCWh3SGRyTGVuOwkvLyBUaGUgaHdIZHJMZW4gY29uc2lzdCBvZiA4MDIuMTEgaGVhZGVyIGxlbmd0aCBwbHVzIHRoZSBoZWFkZXIgcGFkZGluZyBsZW5ndGguCisJVUlOVDMyCQkJZmlsbE9mZnNldDsKKwlUWElORk9fU1RSVUMJKnBUeEluZm87CisJVFhXSV9TVFJVQwkJKnBUeFdJOworCVBVQ0hBUgkJCXBXaXJlbGVzc1BhY2tldCA9IE5VTEw7CisJVUNIQVIJCQlRdWVJZHg7CisJTkRJU19TVEFUVVMJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCVVJTlQzMgkJCVVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKKwlCT09MRUFOCQkJVHhRTGFzdFJvdW5kID0gRkFMU0U7CisKKwkvLworCS8vIGdldCBUeCBSaW5nIFJlc291cmNlICYgRG1hIEJ1ZmZlciBhZGRyZXNzCisJLy8KKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCWlmKGZyYWdOdW0gPT0gMCkKKwl7CisJCS8vIENoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvciB0aGlzIGJ1bGstb3V0IGJhdGNoLgorCQlTdGF0dXMgPSBSdG1wVVNCQ2FuRG9Xcml0ZShwQWQsIFF1ZUlkeCwgcEhUVFhDb250ZXh0KTsKKwkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gVFJVRTsKKworCQkJLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgOCBieXRlcyBwYWRkaW5nLgorCQkJaWYgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpCisJCQl7CisJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OworCQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSA4OworCQkJCWZpbGxPZmZzZXQgKz0gODsKKwkJCX0KKwkJCXBUeEJsay0+UHJpdiA9IDA7CisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybihTdGF0dXMpOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8vIEZvciBzdWItc2VxdWVudCBmcmFtZXMgb2YgdGhpcyBidWxrLW91dCBiYXRjaC4gSnVzdCBjb3B5IGl0IHRvIG91ciBidWxrLW91dCBidWZmZXIuCisJCVN0YXR1cyA9ICgocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKSA/IE5ESVNfU1RBVFVTX1NVQ0NFU1MgOiBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlmaWxsT2Zmc2V0ICs9IHBUeEJsay0+UHJpdjsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybihTdGF0dXMpOworCQl9CisJfQorCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikoJnBUeEJsay0+SGVhZGVyQnVmWzBdKSwgVFhJTkZPX1NJWkUpOworCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmWzBdKTsKKwlwVHhXST0gKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKTsKKworCXBXaXJlbGVzc1BhY2tldCA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0XTsKKworCS8vIGNvcHkgVFhXSSArIFdMQU4gSGVhZGVyICsgTExDIGludG8gRE1BIEhlYWRlciBCdWZmZXIKKwkvL2h3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsKKwlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+SGRyUGFkTGVuOworCisJLy8gQnVpbGQgb3VyIFVSQiBmb3IgVVNCRAorCURNQUhkckxlbiA9IFRYV0lfU0laRSArIGh3SGRyTGVuOworCVVTQkRNQXBrdExlbiA9IERNQUhkckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOworCXBhZGRpbmcgPSAoNCAtIChVU0JETUFwa3RMZW4gJSA0KSkgJiAweDAzOwkvLyByb3VuZCB1cCB0byA0IGJ5dGUgYWxpZ25tZW50CisJVVNCRE1BcGt0TGVuICs9IHBhZGRpbmc7CisKKwlwVHhCbGstPlByaXYgKz0gKFRYSU5GT19TSVpFICsgVVNCRE1BcGt0TGVuKTsKKworCS8vIEZvciBUeEluZm8sIHRoZSBsZW5ndGggb2YgVVNCRE1BcGt0TGVuID0gVFhXSV9TSVpFICsgODAyLjExIGhlYWRlciArIHBheWxvYWQKKwlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShVU0JETUFwa3RMZW4pLCBGQUxTRSwgRklGT19FRENBLCBGQUxTRSAvKk5leHRWYWxpZCovLCAgRkFMU0UpOworCisJaWYgKGZyYWdOdW0gPT0gcFR4QmxrLT5Ub3RhbEZyYWdOdW0pCisJeworCQlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gMDsKKwkJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyBwVHhCbGstPlByaXYgKyAzOTA2KT4gTUFYX1RYQlVMS19MSU1JVCkKKwkJeworCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAxOworCQkJVHhRTGFzdFJvdW5kID0gVFJVRTsKKwkJfQorCX0KKwllbHNlCisJeworCQlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gMTsKKwl9CisKKwlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUikocFdpcmVsZXNzUGFja2V0ICsgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpLCBESVJfV1JJVEUsIEZBTFNFKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJcFdpcmVsZXNzUGFja2V0ICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKwlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPSAoVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbik7CisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4pOworCisJLy8JWmVybyB0aGUgbGFzdCBwYWRkaW5nLgorCXBXaXJlbGVzc1BhY2tldCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwlOZGlzWmVyb01lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBhZGRpbmcgKyA4KTsKKworCWlmIChmcmFnTnVtID09IHBUeEJsay0+VG90YWxGcmFnTnVtKQorCXsKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCS8vIFVwZGF0ZSB0aGUgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLiAzOTA2IHVzZWQgdG8gcHJldmVudCB0aGUgTmV4dEJ1bGtPdXQgaXMgYSBBLVJBTElOSy9BLU1TRFUgRnJhbWUuCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSBwVHhCbGstPlByaXY7CisJCWlmIChUeFFMYXN0Um91bmQgPT0gVFJVRSkKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDg7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisKKwkJLy8gRmluYWxseSwgc2V0IGJDdXJXcml0aW5nIGFzIEZBTFNFCisJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCS8vIHN1Y2NlZWQgYW5kIHJlbGVhc2UgdGhlIHNrYiBidWZmZXIKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJfQorCisKKwlyZXR1cm4oU3RhdHVzKTsKKworfQorCisKK1VTSE9SVCBSdG1wVVNCX1dyaXRlU2luZ2xlVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCUJPT0xFQU4JCQliSXNMYXN0LAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcikKK3sKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisJVVNIT1JUCQkJaHdIZHJMZW47CisJVUlOVDMyCQkJZmlsbE9mZnNldDsKKwlUWElORk9fU1RSVUMJKnBUeEluZm87CisJVFhXSV9TVFJVQwkJKnBUeFdJOworCVBVQ0hBUgkJCXBXaXJlbGVzc1BhY2tldDsKKwlVQ0hBUgkJCVF1ZUlkeDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCU5ESVNfU1RBVFVTCQlTdGF0dXM7CisJVUlOVDMyCQkJVVNCRE1BcGt0TGVuID0gMCwgRE1BSGRyTGVuLCBwYWRkaW5nOworCUJPT0xFQU4JCQliVHhRTGFzdFJvdW5kID0gRkFMU0U7CisKKwkvLyBGb3IgVVNCLCBkaWRuJ3QgbmVlZCBQQ0lfTUFQX1NJTkdMRSgpCisJLy9TcmNCdWZQQSA9IFBDSV9NQVBfU0lOR0xFKHBBZCwgKGNoYXIgKikgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisKKwkvLworCS8vIGdldCBUeCBSaW5nIFJlc291cmNlICYgRG1hIEJ1ZmZlciBhZGRyZXNzCisJLy8KKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCisKKwkvLyBDaGVjayByaW5nIGZ1bGwuCisJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7CisJaWYoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gVFJVRTsKKworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZlswXSk7CisJCXBUeFdJPSAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pOworCisJCS8vIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4KKwkJaWYgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpCisJCXsKKwkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gKz0gODsKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSA4OworCQkJZmlsbE9mZnNldCArPSA4OworCQl9CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisJCXBXaXJlbGVzc1BhY2tldCA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0XTsKKworCQkvLyBjb3B5IFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyCisJCS8vaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4sIDQpOworCQlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+SGRyUGFkTGVuOworCisJCS8vIEJ1aWxkIG91ciBVUkIgZm9yIFVTQkQKKwkJRE1BSGRyTGVuID0gVFhXSV9TSVpFICsgaHdIZHJMZW47CisJCVVTQkRNQXBrdExlbiA9IERNQUhkckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOworCQlwYWRkaW5nID0gKDQgLSAoVVNCRE1BcGt0TGVuICUgNCkpICYgMHgwMzsJLy8gcm91bmQgdXAgdG8gNCBieXRlIGFsaWdubWVudAorCQlVU0JETUFwa3RMZW4gKz0gcGFkZGluZzsKKworCQlwVHhCbGstPlByaXYgPSAoVFhJTkZPX1NJWkUgKyBVU0JETUFwa3RMZW4pOworCisJCS8vIEZvciBUeEluZm8sIHRoZSBsZW5ndGggb2YgVVNCRE1BcGt0TGVuID0gVFhXSV9TSVpFICsgODAyLjExIGhlYWRlciArIHBheWxvYWQKKwkJLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShVU0JETUFwa3RMZW4pLCBGQUxTRSwgRklGT19FRENBLCBGQUxTRSAvKk5leHRWYWxpZCovLCAgRkFMU0UpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMzkwNiArIHBUeEJsay0+UHJpdikgPiBNQVhfVFhCVUxLX0xJTUlUKQorCQl7CisJCQlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDE7CisJCQliVHhRTGFzdFJvdW5kID0gVFJVRTsKKwkJfQorCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpKHBXaXJlbGVzc1BhY2tldCArIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSwgRElSX1dSSVRFLCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQlwV2lyZWxlc3NQYWNrZXQgKz0gKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZHJMZW4pOworCisJCS8vIFdlIHVubG9jayBpdCBoZXJlIHRvIHByZXZlbnQgdGhlIGZpcnN0IDggYnl0ZXMgbWF5YmUgb3Zlci13cml0ZWQgaXNzdWUuCisJCS8vCTEuIEZpcnN0IHdlIGdvdCBDdXJXcml0ZVBvc2l0aW9uIGJ1dCB0aGUgZmlyc3QgOCBieXRlcyBzdGlsbCBub3Qgd3JpdGUgdG8gdGhlIHBUeGNvbnRleHQuCisJCS8vCTIuIEFuIGludGVycnVwdCBicmVhayBvdXIgcm91dGluZSBhbmQgaGFuZGxlIGJ1bGstb3V0IGNvbXBsZXRlLgorCQkvLwkzLiBJbiB0aGUgYnVsay1vdXQgY29tcGxsZXRlLCBpdCBuZWVkIHRvIGRvIGFub3RoZXIgYnVsay1vdXQsCisJCS8vCQkJaWYgdGhlIEVOZXh0QnVsa091dFBvc2l0aW9uIGlzIGp1c3QgdGhlIHNhbWUgYXMgQ3VyV3JpdGVQb3NpdGlvbiwgaXQgd2lsbCBzYXZlIHRoZSBmaXJzdCA4IGJ5dGVzIGZyb20gQ3VyV3JpdGVQb3NpdGlvbiwKKwkJLy8JCQlidXQgdGhlIHBheWxvYWQgc3RpbGwgbm90IGNvcHllZC4gdGhlIHBUeENvbnRleHQtPlNhdmVkUGFkW10gd2lsbCBzYXZlIGFzIGFsbHplcm8uIGFuZCBzZXQgdGhlIGJDb3B5UGFkID0gVFJVRS4KKwkJLy8JNC4gSW50ZXJydXB0IGNvbXBsZXRlLgorCQkvLyAgNS4gT3VyIGludGVycnVwdGVkIHJvdXRpbmUgZ28gYmFjayBhbmQgZmlsbCB0aGUgZmlyc3QgOCBieXRlcyB0byBwVHhDb250ZXh0LgorCQkvLwk2LiBOZXh0IHRpbWUgd2hlbiBkbyBidWxrLW91dCwgaXQgZm91bmQgdGhlIGJDb3B5UGFkPT1UUlVFIGFuZCB3aWxsIGNvcHkgdGhlIFNhdmVkUGFkW10gdG8gcFR4Q29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbi4KKwkJLy8JCWFuZCB0aGUgcGFja2V0IHdpbGwgd3JvbmcuCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPnBTcmNCdWZEYXRhLCBwVHhCbGstPlNyY0J1Zkxlbik7CisJCXBXaXJlbGVzc1BhY2tldCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwkJTmRpc1plcm9NZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwYWRkaW5nICsgOCk7CisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSBwVHhCbGstPlByaXY7CisJCWlmIChiVHhRTGFzdFJvdW5kKQorCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gODsKKwkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisKKwlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gRkFMU0U7CisJfQorCisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCisJLy8gc3VjY2VlZCBhbmQgcmVsZWFzZSB0aGUgc2tiIGJ1ZmZlcgorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJcmV0dXJuKFN0YXR1cyk7CisKK30KKworCitVU0hPUlQgUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhbWVOdW0sCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKQoreworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKwlVU0hPUlQJCQlod0hkckxlbjsJLy8gVGhlIGh3SGRyTGVuIGNvbnNpc3Qgb2YgODAyLjExIGhlYWRlciBsZW5ndGggcGx1cyB0aGUgaGVhZGVyIHBhZGRpbmcgbGVuZ3RoLgorCVVJTlQzMgkJCWZpbGxPZmZzZXQ7CisJVFhJTkZPX1NUUlVDCSpwVHhJbmZvOworCVRYV0lfU1RSVUMJCSpwVHhXSTsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQYWNrZXQgPSBOVUxMOworCVVDSEFSCQkJUXVlSWR4OworCU5ESVNfU1RBVFVTCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKwkvL1VJTlQzMgkJCVVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKKworCS8vCisJLy8gZ2V0IFR4IFJpbmcgUmVzb3VyY2UgJiBEbWEgQnVmZmVyIGFkZHJlc3MKKwkvLworCVF1ZUlkeCA9IHBUeEJsay0+UXVlSWR4OworCXBIVFRYQ29udGV4dCAgPSAmcEFkLT5UeENvbnRleHRbUXVlSWR4XTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCWlmKGZyYW1lTnVtID09IDApCisJeworCQkvLyBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhpcyBidWxrLW91dCBiYXRjaC4KKwkJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7CisJCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IFRSVUU7CisKKwkJCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmWzBdKTsKKwkJCXBUeFdJPSAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pOworCisKKwkJCS8vIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4KKwkJCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkJeworCisJCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IDg7CisJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OworCQkJfQorCQkJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisJCQlwV2lyZWxlc3NQYWNrZXQgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07CisKKwkJCS8vCisJCQkvLyBDb3B5IFRYSU5GTyArIFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyCisJCQkvLworCQkJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpCisJCQkJLy9od0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbi1MRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFELCA0KStMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOworCQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKyBwVHhCbGstPkhkclBhZExlbiArIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQ7CisJCQllbHNlIGlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSkKKwkJCQkvL2h3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRCwgNCkrTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEOworCQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRCArIHBUeEJsay0+SGRyUGFkTGVuICsgTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEOworCQkJZWxzZQorCQkJCS8vaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4sIDQpOworCQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5IZHJQYWRMZW47CisKKwkJCS8vIFVwZGF0ZSB0aGUgcFR4QmxrLT5Qcml2LgorCQkJcFR4QmxrLT5Qcml2ID0gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbjsKKworCQkJLy8JcFR4SW5mby0+VVNCRE1BcGt0TGVuIG5vdyBqdXN0IGEgdGVtcCB2YWx1ZSBhbmQgd2lsbCB0byBjb3JyZWN0IGxhdHRlci4KKwkJCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHBUeEJsay0+UHJpdiksIEZBTFNFLCBGSUZPX0VEQ0EsIEZBTFNFIC8qTmV4dFZhbGlkKi8sICBGQUxTRSk7CisKKwkJCS8vIENvcHkgaXQuCisJCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBwVHhCbGstPlByaXYpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpKHBXaXJlbGVzc1BhY2tldCsgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpLCBESVJfV1JJVEUsIEZBTFNFKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPSBwVHhCbGstPlByaXY7CisJCQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5Qcml2OworCQl9CisJfQorCWVsc2UKKwl7CS8vIEZvciBzdWItc2VxdWVudCBmcmFtZXMgb2YgdGhpcyBidWxrLW91dCBiYXRjaC4gSnVzdCBjb3B5IGl0IHRvIG91ciBidWxrLW91dCBidWZmZXIuCisKKwkJU3RhdHVzID0gKChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IFRSVUUpID8gTkRJU19TVEFUVVNfU1VDQ0VTUyA6IE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCWZpbGxPZmZzZXQgPSAgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIHBUeEJsay0+UHJpdik7CisJCQlwV2lyZWxlc3NQYWNrZXQgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07CisKKwkJCS8vaHdIZHJMZW4gPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisJCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBwVHhCbGstPk1wZHVIZWFkZXJMZW4pOworCQkJcFdpcmVsZXNzUGFja2V0ICs9IChwVHhCbGstPk1wZHVIZWFkZXJMZW4pOworCQkJcFR4QmxrLT5Qcml2ICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKwkJfQorCQllbHNlCisJCXsJLy8gSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCBub3cgdW5sZXNzIHdlIGFyZSBnb2luZyB0byBzaHV0ZG93bi4KKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyaXRlTXVsdGlUeFJlc291cmNlKCk6YkN1cldyaXRpbmcgaXMgRkFMU0Ugd2hlbiBoYW5kbGUgc3ViLXNlcXVlbnQgZnJhbWVzLlxuIikpOworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJfQorCX0KKworCisJLy8gV2UgdW5sb2NrIGl0IGhlcmUgdG8gcHJldmVudCB0aGUgZmlyc3QgOCBieXRlcyBtYXliZSBvdmVyLXdyaXRlIGlzc3VlLgorCS8vCTEuIEZpcnN0IHdlIGdvdCBDdXJXcml0ZVBvc2l0aW9uIGJ1dCB0aGUgZmlyc3QgOCBieXRlcyBzdGlsbCBub3Qgd3JpdGUgdG8gdGhlIHBUeENvbnRleHQuCisJLy8JMi4gQW4gaW50ZXJydXB0IGJyZWFrIG91ciByb3V0aW5lIGFuZCBoYW5kbGUgYnVsay1vdXQgY29tcGxldGUuCisJLy8JMy4gSW4gdGhlIGJ1bGstb3V0IGNvbXBsbGV0ZSwgaXQgbmVlZCB0byBkbyBhbm90aGVyIGJ1bGstb3V0LAorCS8vCQkJaWYgdGhlIEVOZXh0QnVsa091dFBvc2l0aW9uIGlzIGp1c3QgdGhlIHNhbWUgYXMgQ3VyV3JpdGVQb3NpdGlvbiwgaXQgd2lsbCBzYXZlIHRoZSBmaXJzdCA4IGJ5dGVzIGZyb20gQ3VyV3JpdGVQb3NpdGlvbiwKKwkvLwkJCWJ1dCB0aGUgcGF5bG9hZCBzdGlsbCBub3QgY29weWVkLiB0aGUgcFR4Q29udGV4dC0+U2F2ZWRQYWRbXSB3aWxsIHNhdmUgYXMgYWxsemVyby4gYW5kIHNldCB0aGUgYkNvcHlQYWQgPSBUUlVFLgorCS8vCTQuIEludGVycnVwdCBjb21wbGV0ZS4KKwkvLyAgNS4gT3VyIGludGVycnVwdGVkIHJvdXRpbmUgZ28gYmFjayBhbmQgZmlsbCB0aGUgZmlyc3QgOCBieXRlcyB0byBwVHhDb250ZXh0LgorCS8vCTYuIE5leHQgdGltZSB3aGVuIGRvIGJ1bGstb3V0LCBpdCBmb3VuZCB0aGUgYkNvcHlQYWQ9PVRSVUUgYW5kIHdpbGwgY29weSB0aGUgU2F2ZWRQYWRbXSB0byBwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLgorCS8vCQlhbmQgdGhlIHBhY2tldCB3aWxsIHdyb25nLgorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJXcml0ZU11bHRpVHhSZXNvdXJjZTogQ1dQb3MgPSAlbGQsIE5CT3V0UG9zID0gJWxkLlxuIiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKTsKKwkJZ290byBkb25lOworCX0KKworCS8vIENvcHkgdGhlIGZyYW1lIGNvbnRlbnQgaW50byBETUEgYnVmZmVyIGFuZCB1cGRhdGUgdGhlIHBUeEJsay0+UHJpdgorCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4pOworCXBXaXJlbGVzc1BhY2tldCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwlwVHhCbGstPlByaXYgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisKK2RvbmU6CisJLy8gUmVsZWFzZSB0aGUgc2tiIGJ1ZmZlciBoZXJlCisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisKKwlyZXR1cm4oU3RhdHVzKTsKKworfQorCisKK1ZPSUQgUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVTSE9SVAkJCXRvdGFsTVBEVVNpemUsCisJSU4JVVNIT1JUCQkJVHhJZHgpCit7CisJVUNIQVIJCQlRdWVJZHg7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCVVJTlQzMgkJCWZpbGxPZmZzZXQ7CisJVFhJTkZPX1NUUlVDCSpwVHhJbmZvOworCVRYV0lfU1RSVUMJCSpwVHhXSTsKKwlVSU5UMzIJCQlVU0JETUFwa3RMZW4sIHBhZGRpbmc7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQYWNrZXQ7CisKKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwlpZiAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKQorCXsKKwkJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKwkJaWYgKCgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pIHx8ICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbi04KSA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkJJiYgKHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID09IFRSVUUpKQorCQkJcFdpcmVsZXNzUGFja2V0ID0gKFBVQ0hBUikoJnBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbMF0pOworCQllbHNlCisJCQlwV2lyZWxlc3NQYWNrZXQgPSAoUFVDSEFSKSgmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF0pOworCisJCS8vCisJCS8vIFVwZGF0ZSBUeEluZm8tPlVTQkRNQXBrdExlbiAsCisJCS8vCQl0aGUgbGVuZ3RoID0gVFhXSV9TSVpFICsgODAyLjExX2hkciArIDgwMi4xMV9oZHJfcGFkICsgcGF5bG9hZF9vZl9hbGxfYmF0Y2hfZnJhbWVzICsgQnVsay1PdXQtcGFkZGluZworCQkvLworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKHBXaXJlbGVzc1BhY2tldCk7CisKKwkJLy8gQ2FsY3VsYXRlIHRoZSBidWxrLW91dCBwYWRkaW5nCisJCVVTQkRNQXBrdExlbiA9IHBUeEJsay0+UHJpdiAtIFRYSU5GT19TSVpFOworCQlwYWRkaW5nID0gKDQgLSAoVVNCRE1BcGt0TGVuICUgNCkpICYgMHgwMzsJLy8gcm91bmQgdXAgdG8gNCBieXRlIGFsaWdubWVudAorCQlVU0JETUFwa3RMZW4gKz0gcGFkZGluZzsKKworCQlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKKworCQkvLworCQkvLyBVcGRhdGUgVFhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ICwKKwkJLy8JCXRoZSBsZW5ndGggPSA4MDIuMTEgaGVhZGVyICsgcGF5bG9hZF9vZl9hbGxfYmF0Y2hfZnJhbWVzCisJCXBUeFdJPSAoUFRYV0lfU1RSVUMpKHBXaXJlbGVzc1BhY2tldCArIFRYSU5GT19TSVpFKTsKKwkJcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA9IHRvdGFsTVBEVVNpemU7CisKKwkJLy8KKwkJLy8gVXBkYXRlIHRoZSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24KKwkJLy8KKwkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IChUWElORk9fU0laRSArIFVTQkRNQXBrdExlbik7CisJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMzkwNik+IE1BWF9UWEJVTEtfTElNSVQpCisJCXsJLy8gQWRkIDM5MDYgZm9yIHByZXZlbnQgdGhlIE5leHRCdWxrT3V0IHBhY2tldCBzaXplIGlzIGEgQS1SQUxJTksvQS1NU0RVIEZyYW1lLgorCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gODsKKwkJCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMTsKKwkJfQorCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCisJCS8vCisJCS8vCVplcm8gdGhlIGxhc3QgcGFkZGluZy4KKwkJLy8KKwkJcFdpcmVsZXNzUGFja2V0ID0gKCZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0ICsgcFR4QmxrLT5Qcml2XSk7CisJCU5kaXNaZXJvTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcGFkZGluZyArIDgpOworCisJCS8vIEZpbmFsbHksIHNldCBiQ3VyV3JpdGluZyBhcyBGQUxTRQorCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gRkFMU0U7CisKKwl9CisJZWxzZQorCXsJLy8gSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCBub3cgdW5sZXNzIHdlIGFyZSBnb2luZyB0byBzaHV0ZG93bi4KKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRmluYWxXcml0ZVR4UmVzb3VyY2UoKTpiQ3VyV3JpdGluZyBpcyBGQUxTRSB3aGVuIGhhbmRsZSBsYXN0IGZyYW1lcy5cbiIpKTsKKwl9CisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworfQorCisKK1ZPSUQgUnRtcFVTQkRhdGFMYXN0VHhJZHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlRdWVJZHgsCisJSU4JVVNIT1JUCQkJVHhJZHgpCit7CisJLy8gRE8gbm90aGluZyBmb3IgVVNCLgorfQorCisKKy8qCisJV2hlbiBjYW4gZG8gYnVsay1vdXQ6CisJCTEuIFR4U3dGcmVlSWR4IDwgVFhfUklOR19TSVpFOworCQkJSXQgbWVhbnMgaGFzIGF0IGxlYXN0IG9uZSBSaW5nIGVudGl0eSBpcyByZWFkeSBmb3IgYnVsay1vdXQsIGtpY2sgaXQgb3V0LgorCQkyLiBJZiBUeFN3RnJlZUlkeCA9PSBUWF9SSU5HX1NJWkUKKwkJCUNoZWNrIGlmIHRoZSBDdXJXcml0aW5nIGZsYWcgaXMgRkFMU0UsIGlmIGl0J3MgRkFMU0UsIHdlIGNhbiBkbyBraWNrIG91dC4KKworKi8KK1ZPSUQgUnRtcFVTQkRhdGFLaWNrT3V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JVUNIQVIJCQlRdWVJZHgpCit7CisJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgUXVlSWR4KSk7CisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCit9CisKKworLyoKKwlNdXN0IGJlIHJ1biBpbiBJbnRlcnJ1cHQgY29udGV4dAorCVRoaXMgZnVuY3Rpb24gaGFuZGxlIFJUMjg3MCBzcGVjaWZpYyBUeERlc2MgYW5kIGNwdSBpbmRleCB1cGRhdGUgYW5kIGtpY2sgdGhlIHBhY2tldCBvdXQuCisgKi8KK2ludCBSdG1wVVNCTWdtdEtpY2tPdXQoCisJSU4gUlRNUF9BREFQVEVSIAkqcEFkLAorCUlOIFVDSEFSIAkJCVF1ZUlkeCwKKwlJTiBQTkRJU19QQUNLRVQJCXBQYWNrZXQsCisJSU4gUFVDSEFSCQkJcFNyY0J1ZlZBLAorCUlOIFVJTlQgCQkJU3JjQnVmTGVuKQoreworCVBUWElORk9fU1RSVUMJcFR4SW5mbzsKKwlVTE9ORwkJCUJ1bGtPdXRTaXplOworCVVDSEFSCQkJcGFkTGVuOworCVBVQ0hBUgkJCXBEZXN0OworCVVMT05HCQkJU3dJZHggPSBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4OworCVBUWF9DT05URVhUCQlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5BbGxvY1ZhOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKworCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykocFNyY0J1ZlZBKTsKKworCS8vIEJ1aWxkIG91ciBVUkIgZm9yIFVTQkQKKwlCdWxrT3V0U2l6ZSA9IFNyY0J1ZkxlbjsKKwlCdWxrT3V0U2l6ZSA9IChCdWxrT3V0U2l6ZSArIDMpICYgKH4zKTsKKwlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShCdWxrT3V0U2l6ZSAtIFRYSU5GT19TSVpFKSwgVFJVRSwgRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsICBGQUxTRSk7CisKKwlCdWxrT3V0U2l6ZSArPSA0OyAvLyBBbHdheXMgYWRkIDQgZXh0cmEgYnl0ZXMgYXQgZXZlcnkgcGFja2V0LgorCisJLy8gSWYgQnVsa091dFNpemUgaXMgbXVsdGlwbGUgb2YgQnVsa091dE1heFBhY2tldFNpemUsIGFkZCBleHRyYSA0IGJ5dGVzIGFnYWluLgorCWlmICgoQnVsa091dFNpemUgJSBwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplKSA9PSAwKQorCQlCdWxrT3V0U2l6ZSArPSA0OworCisJcGFkTGVuID0gQnVsa091dFNpemUgLSBTcmNCdWZMZW47CisJQVNTRVJUKChwYWRMZW4gPD0gUlRNUF9QS1RfVEFJTF9QQURESU5HKSk7CisKKwkvLyBOb3cgbWVtemVybyBhbGwgZXh0cmEgcGFkZGluZyBieXRlcy4KKwlwRGVzdCA9IChQVUNIQVIpKHBTcmNCdWZWQSArIFNyY0J1Zkxlbik7CisJc2tiX3B1dChHRVRfT1NfUEtUX1RZUEUocFBhY2tldCksIHBhZExlbik7CisJTmRpc1plcm9NZW1vcnkocERlc3QsIHBhZExlbik7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPk1MTUVCdWxrT3V0TG9jaywgSXJxRmxhZ3MpOworCisJcEFkLT5NZ210UmluZy5DZWxsW3BBZC0+TWdtdFJpbmcuVHhDcHVJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKKwlwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gKFBUWF9CVUZGRVIpKEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KSk7CisKKwkvLyBMZW5ndGggaW4gVHhJbmZvIHNob3VsZCBiZSA4IGxlc3MgdGhhbiBidWxrb3V0IHNpemUuCisJcE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IEJ1bGtPdXRTaXplOworCXBNTE1FQ29udGV4dC0+SW5Vc2UgPSBUUlVFOworCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gVFJVRTsKKworCisJLy9mb3IgZGVidWcKKwkvL2hleF9kdW1wKCJSdG1wVVNCTWdtdEtpY2tPdXQiLCAmcE1MTUVDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF0sIChwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID4gMTYgPyAxNiA6IHBNTE1FQ29udGV4dC0+QnVsa091dFNpemUpKTsKKworCS8vcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCS8vcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCisJLy9pZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA9PSBNR01UX1JJTkdfU0laRSkKKwkvLwluZWVkS2lja091dCA9IFRSVUU7CisKKwkvLyBEZWNyZWFzZSB0aGUgVHhTd0ZyZWVJZHggYW5kIEluY3JlYXNlIHRoZSBUWF9DVFhfSURYCisJcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeC0tOworCUlOQ19SSU5HX0lOREVYKHBBZC0+TWdtdFJpbmcuVHhDcHVJZHgsIE1HTVRfUklOR19TSVpFKTsKKworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKworCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfTUxNRSk7CisJLy9pZiAobmVlZEtpY2tPdXQpCisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisJcmV0dXJuIDA7Cit9CisKKworVk9JRCBSdG1wVVNCTnVsbEZyYW1lS2lja091dCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJUXVlSWR4LAorCUlOIFVDSEFSCQkqcE51bGxGcmFtZSwKKwlJTiBVSU5UMzIJCWZyYW1lTGVuKQoreworCWlmIChwQWQtPk51bGxDb250ZXh0LkluVXNlID09IEZBTFNFKQorCXsKKwkJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dDsKKwkJUFRYSU5GT19TVFJVQwlwVHhJbmZvOworCQlQVFhXSV9TVFJVQwkJcFR4V0k7CisJCVBVQ0hBUgkJCXBXaXJlbGVzc1BrdDsKKworCQlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCisJCS8vIFNldCB0aGUgaW4gdXNlIGJpdAorCQlwTnVsbENvbnRleHQtPkluVXNlID0gVFJVRTsKKwkJcFdpcmVsZXNzUGt0ID0gKFBVQ0hBUikmcE51bGxDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF07CisKKwkJUlRNUFplcm9NZW1vcnkoJnBXaXJlbGVzc1BrdFswXSwgMTAwKTsKKwkJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSZwV2lyZWxlc3NQa3RbMF07CisJCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHNpemVvZihIRUFERVJfODAyXzExKStUWFdJX1NJWkUpLCBUUlVFLCBFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgIEZBTFNFKTsKKwkJcFR4SW5mby0+UVNFTCA9IEZJRk9fRURDQTsKKwkJcFR4V0kgPSAoUFRYV0lfU1RSVUMpJnBXaXJlbGVzc1BrdFtUWElORk9fU0laRV07CisJCVJUTVBXcml0ZVR4V0kocEFkLCBwVHhXSSwgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgKHNpemVvZihIRUFERVJfODAyXzExKSksCisJCQkwLCAwLCAoVUNIQVIpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywgSUZTX0hUVFhPUCwgRkFMU0UsICZwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJCVJUTVBNb3ZlTWVtb3J5KCZwV2lyZWxlc3NQa3RbVFhXSV9TSVpFK1RYSU5GT19TSVpFXSwgJnBBZC0+TnVsbEZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUikmcFdpcmVsZXNzUGt0W1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXSwgRElSX1dSSVRFLCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQlwQWQtPk51bGxDb250ZXh0LkJ1bGtPdXRTaXplID0gIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKHBBZC0+TnVsbEZyYW1lKSArIDQ7CisKKwkJLy8gRmlsbCBvdXQgZnJhbWUgbGVuZ3RoIGluZm9ybWF0aW9uIGZvciBnbG9iYWwgQnVsayBvdXQgYXJiaXRvcgorCQkvL3BOdWxsQ29udGV4dC0+QnVsa091dFNpemUgPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIHNlbmQgTlVMTCBGcmFtZSBAJWQgTWJwcy4uLlxuIiwgUmF0ZUlkVG9NYnBzW3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZV0pKTsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpOworCisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCX0KKworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ2hlY2sgUnggZGVzY3JpcHRvciwgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkUgaWYgYW55IGVycm9yIGRvdW5kCisKKwlBcmd1bWVudHM6CisJCXBSeEQJCVBvaW50ZXIJdG8gdGhlIFJ4IGRlc2NyaXB0b3IKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJTm8gZXJyCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCUVycm9yCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRNUENoZWNrUnhFcnJvcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQSEVBREVSXzgwMl8xMQlwSGVhZGVyLAorCUlOCVBSWFdJX1NUUlVDCXBSeFdJLAorCUlOCVBSVDI4WFhfUlhEX1NUUlVDCXBSeElORk8pCit7CisJUENJUEhFUl9LRVkgcFdwYUtleTsKKwlJTlQJZEJtOworCisJaWYgKHBBZC0+YlByb21pc2N1b3VzID09IFRSVUUpCisJCXJldHVybihORElTX1NUQVRVU19TVUNDRVNTKTsKKwlpZihwUnhJTkZPID09IE5VTEwpCisJCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKKworCS8vIFBoeSBlcnJvcnMgJiBDUkMgZXJyb3JzCisJaWYgKHBSeElORk8tPkNyYykKKwl7CisJCS8vIENoZWNrIFJTU0kgZm9yIE5vaXNlIEhpc3Qgc3RhdGlzdGljIGNvbGxlY3Rpb24uCisJCWRCbSA9IChJTlQpIChwUnhXSS0+UlNTSTApIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKwkJaWYgKGRCbSA8PSAtODcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzBdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtODIpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzFdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNzcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzJdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNzIpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzNdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNjcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzRdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNjIpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzVdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNTcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzZdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA+IC01NykKKwkJCXBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbN10gKz0gMTsKKworCQlyZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisJLy8gQWRkIFJ4IHNpemUgdG8gY2hhbm5lbCBsb2FkIGNvdW50ZXIsIHdlIHNob3VsZCBpZ25vcmUgZXJyb3IgY291bnRzCisJcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgKz0gKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQrIDE0KTsKKworCS8vIERyb3AgVG9EcyBwcm9taXNjb3VzIGZyYW1lLCBpdCBpcyBvcGVuZWQgZHVlIHRvIENDWCAyIGNoYW5uZWwgbG9hZCBzdGF0aXN0aWNzCisJaWYgKHBIZWFkZXItPkZDLlRvRHMpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiRXJyO0ZDLlRvRHNcbiIpKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLy8gUGF1bCAwNC0wMyBmb3IgT0ZETSBSeCBsZW5ndGggaXNzdWUKKwlpZiAocFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA+IE1BWF9BR0dSRUdBVElPTl9TSVpFKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIikpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwkvLyBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW50J3MgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UKKwkvLyBJIGFtIGtpbmQgb2YgZG91YnRpbmcgdGhlIFUyTSBiaXQgb3BlcmF0aW9uCisJLy8gaWYgKHBSeEQtPlUyTSA9PSAwKQorCS8vCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKKworCS8vIGRyb3AgZGVjeXB0aW9uIGZhaWwgZnJhbWUKKwlpZiAocFJ4SU5GTy0+RGVjcnlwdGVkICYmIHBSeElORk8tPkNpcGhlckVycikKKwl7CisKKwkJLy8KKwkJLy8gTUlDIEVycm9yCisJCS8vCisJCWlmICgocFJ4SU5GTy0+Q2lwaGVyRXJyID09IDIpICYmIHBSeElORk8tPk15QnNzKQorCQl7CisJCQlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeFdJLT5LZXlJbmRleF07CisJCQlSVE1QUmVwb3J0TWljRXJyb3IocEFkLCBwV3BhS2V5KTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIlJ4IE1JQyBWYWx1ZSBlcnJvclxuIikpOworCQl9CisKKwkJaWYgKHBSeElORk8tPkRlY3J5cHRlZCAmJgorCQkJKHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeFdJLT5LZXlJbmRleF0uQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpICYmCisJCQkocEhlYWRlci0+U2VxdWVuY2UgPT0gcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UpKQorCQl7CisJCQkvLworCQkJLy8gQWNjZXB0YWJsZSBzaW5jZSB0aGUgRmlyc3QgRnJhZ0ZyYW1lIG5vIENpcGhlckVyciBwcm9ibGVtLgorCQkJLy8KKwkJCXJldHVybihORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJfQorCisJCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisKKwlyZXR1cm4oTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY0ZvcmNlV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gICAgICAgYkZyb21UeCkKK3sKKyAgICBBVVRPX1dBS0VVUF9TVFJVQwlBdXRvV2FrZXVwQ2ZnOworCisJQXV0b1dha2V1cENmZy53b3JkID0gMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7CisKKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIDB4ZmYsIDB4MDAsIDB4MDIpOworCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7Cit9CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApCit7CisJQVVUT19XQUtFVVBfU1RSVUMJQXV0b1dha2V1cENmZzsKKworCS8vIHdlIGhhdmUgZGVjaWRlZCB0byBTTEVFUCwgc28gYXQgbGVhc3QgZG8gaXQgZm9yIGEgQkVBQ09OIHBlcmlvZC4KKwlpZiAoVGJ0dE51bVRvTmV4dFdha2VVcCA9PSAwKQorCQlUYnR0TnVtVG9OZXh0V2FrZVVwID0gMTsKKworCUF1dG9XYWtldXBDZmcud29yZCA9IDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOworCisJQXV0b1dha2V1cENmZy5maWVsZC5OdW1vZlNsZWVwaW5nVGJ0dCA9IFRidHROdW1Ub05leHRXYWtlVXAgLSAxOworCUF1dG9XYWtldXBDZmcuZmllbGQuRW5hYmxlQXV0b1dha2V1cCA9IDE7CisJQXV0b1dha2V1cENmZy5maWVsZC5BdXRvTGVhZFRpbWUgPSA1OworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKKworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgMHhmZiwgMHhmZiwgMHgwMik7ICAgLy8gc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBUaW1lb3V0IDQwdXMuCisKKwlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7CisKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworVk9JRCBSVDI4eHhVc2JNbG1lUmFkaW9PbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUMjh4eFVzYk1sbWVSYWRpb09uKClcbiIpKTsKKworCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworICAgIAlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIDB4ZmYsIDB4MDAsIDB4MDIpOworCQlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJTklDUmVzZXRGcm9tRXJyb3IocEFkKTsKKworCS8vIEVuYWJsZSBUeC9SeAorCVJUTVBFbmFibGVSeFR4KHBBZCk7CisKKyNpZmRlZiBSVDMwNzAKKwlpZiAoSVNfUlQzMDcxKHBBZCkpCisJeworCQlSVDMweHhSZXZlcnNlUkZTbGVlcE1vZGVTZXR1cChwQWQpOworCX0KKyNlbmRpZiAvLyBSVDMwNzAgLy8KKworCS8vIENsZWFyIFJhZGlvIG9mZiBmbGFnCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gU2V0IExFRAorCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT04pOworfQorCitWT0lEIFJUMjh4eFVzYk1sbWVSYWRpb09GRigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlXUERNQV9HTE9fQ0ZHX1NUUlVDCUdsb0NmZzsKKwlVSU5UMzIJVmFsdWUsIGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUMjh4eFVzYk1sbWVSYWRpb09GRigpXG4iKSk7CisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCXJldHVybjsKKworCS8vIFNldCBMRUQKKwlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7CisJLy8gU2V0IFJhZGlvIG9mZiBmbGFnCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBMaW5rIGRvd24gZmlyc3QgaWYgYW55IGFzc29jaWF0aW9uIGV4aXN0cworCQlpZiAoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpKQorCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vIENsZWFuIHVwIG9sZCBic3MgdGFibGUKKwkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkKKwl7CisJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJfQorCWVsc2UKKwl7CisJCS8vIE11c3QgdXNpbmcgMjBNSHouCisJCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwl9CisKKwkvLyBEaXNhYmxlIFR4L1J4IERNQQorCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsJICAgLy8gZGlzYWJsZSBETUEKKwlHbG9DZmcuZmllbGQuRW5hYmxlVHhETUEgPSAwOworCUdsb0NmZy5maWVsZC5FbmFibGVSeERNQSA9IDA7CisJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgV1BETUFfR0xPX0NGRywgR2xvQ2ZnLndvcmQpOwkgICAvLyBhYm9ydCBhbGwgVFggcmluZ3MKKworCS8vIFdhaXRpbmcgZm9yIERNQSBpZGxlCisJaSA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKKwkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApICYmIChHbG9DZmcuZmllbGQuUnhETUFCdXN5ID09IDApKQorCQkJYnJlYWs7CisKKwkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwl9d2hpbGUgKGkrKyA8IDEwMCk7CisKKwkvLyBEaXNhYmxlIE1BQyBUeC9SeAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCVZhbHVlICY9ICgweGZmZmZmZmYzKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCS8vIE1BQ19TWVNfQ1RSTCA9PiB2YWx1ZSA9IDB4MCA9PiA0MG1BCisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDApOworCisJLy8gUFdSX1BJTl9DRkcgPT4gdmFsdWUgPSAweDAgPT4gNDBtQQorCS8vUlRNUF9JT19XUklURTMyKHBBZCwgUFdSX1BJTl9DRkcsIDApOworCisJLy8gVFhfUElOX0NGRyA9PiB2YWx1ZSA9IDB4MCA9PiAyMG1BCisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QSU5fQ0ZHLCAwKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgMHhmZiwgMHhmZiwgMHgwMik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1faW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2IxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0wLDAgKzEsMzM5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKK0lOVAlTaG93X1NTSURfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1dpcmVsZXNzTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfVHhCdXJzdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfVHhQcmVhbWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfQ2hhbm5lbF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfQkdQcm90ZWN0aW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19SVFNUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0lOVAlTaG93X0h0QndfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0TWNzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdEdpX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdE9wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0TXBkdURlbnNpdHlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRBbXNkdV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRBdXRvQmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0lOVAlTaG93X0NvdW50cnlSZWdpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfQ291bnRyeUNvZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCitJTlQJU2hvd19Qa3RBZ2dyZWdhdGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gQUdHUkVHQVRJT05fU1VQUE9SVCAvLworCisjaWZkZWYgV01NX1NVUFBPUlQKK0lOVAlTaG93X1dtbUNhcGFibGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gV01NX1NVUFBPUlQgLy8KKworSU5UCVNob3dfSUVFRTgwMjExSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorSU5UCVNob3dfTmV0d29ya1R5cGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK0lOVAlTaG93X0F1dGhNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19FbmNyeXBUeXBlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19EZWZhdWx0S2V5SURfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1dQQVBTS19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworc3RhdGljIHN0cnVjdCB7CisJQ0hBUiAqbmFtZTsKKwlJTlQgKCpzaG93X3Byb2MpKFBSVE1QX0FEQVBURVIgcEFkYXB0ZXIsIFBVQ0hBUiBhcmcpOworfSAqUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQywgUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DW10gPSB7CisJeyJTU0lEIiwJCQkJCVNob3dfU1NJRF9Qcm9jfSwKKwl7IldpcmVsZXNzTW9kZSIsCQkJU2hvd19XaXJlbGVzc01vZGVfUHJvY30sCisJeyJUeEJ1cnN0IiwJCQkJCVNob3dfVHhCdXJzdF9Qcm9jfSwKKwl7IlR4UHJlYW1ibGUiLAkJCQlTaG93X1R4UHJlYW1ibGVfUHJvY30sCisJeyJUeFBvd2VyIiwJCQkJCVNob3dfVHhQb3dlcl9Qcm9jfSwKKwl7IkNoYW5uZWwiLAkJCQkJU2hvd19DaGFubmVsX1Byb2N9LAorCXsiQkdQcm90ZWN0aW9uIiwJCQlTaG93X0JHUHJvdGVjdGlvbl9Qcm9jfSwKKwl7IlJUU1RocmVzaG9sZCIsCQkJU2hvd19SVFNUaHJlc2hvbGRfUHJvY30sCisJeyJGcmFnVGhyZXNob2xkIiwJCQlTaG93X0ZyYWdUaHJlc2hvbGRfUHJvY30sCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJeyJIdEJ3IiwJCQkJCVNob3dfSHRCd19Qcm9jfSwKKwl7Ikh0TWNzIiwJCQkJCVNob3dfSHRNY3NfUHJvY30sCisJeyJIdEdpIiwJCQkJCVNob3dfSHRHaV9Qcm9jfSwKKwl7Ikh0T3BNb2RlIiwJCQkJU2hvd19IdE9wTW9kZV9Qcm9jfSwKKwl7Ikh0RXh0Y2hhIiwJCQkJU2hvd19IdEV4dGNoYV9Qcm9jfSwKKwl7Ikh0TXBkdURlbnNpdHkiLAkJCVNob3dfSHRNcGR1RGVuc2l0eV9Qcm9jfSwKKwl7Ikh0QmFXaW5TaXplIiwJCSAgICAgICAgU2hvd19IdEJhV2luU2l6ZV9Qcm9jfSwKKwl7Ikh0UmRnIiwJCSAgICAgICAgCVNob3dfSHRSZGdfUHJvY30sCisJeyJIdEFtc2R1IiwJCSAgICAgICAgCVNob3dfSHRBbXNkdV9Qcm9jfSwKKwl7Ikh0QXV0b0JhIiwJCSAgICAgICAgU2hvd19IdEF1dG9CYV9Qcm9jfSwKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl7IkNvdW50cnlSZWdpb24iLAkJCVNob3dfQ291bnRyeVJlZ2lvbl9Qcm9jfSwKKwl7IkNvdW50cnlSZWdpb25BQmFuZCIsCQlTaG93X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jfSwKKwl7IkNvdW50cnlDb2RlIiwJCQkJU2hvd19Db3VudHJ5Q29kZV9Qcm9jfSwKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJeyJQa3RBZ2dyZWdhdGUiLAkJCVNob3dfUGt0QWdncmVnYXRlX1Byb2N9LAorI2VuZGlmCisKKyNpZmRlZiBXTU1fU1VQUE9SVAorCXsiV21tQ2FwYWJsZSIsCQkJCVNob3dfV21tQ2FwYWJsZV9Qcm9jfSwKKyNlbmRpZgorCXsiSUVFRTgwMjExSCIsCQkJCVNob3dfSUVFRTgwMjExSF9Qcm9jfSwKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICB7Ik5ldHdvcmtUeXBlIiwJCQkJU2hvd19OZXR3b3JrVHlwZV9Qcm9jfSwKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7IkF1dGhNb2RlIiwJCQkJU2hvd19BdXRoTW9kZV9Qcm9jfSwKKwl7IkVuY3J5cFR5cGUiLAkJCQlTaG93X0VuY3J5cFR5cGVfUHJvY30sCisJeyJEZWZhdWx0S2V5SUQiLAkJCVNob3dfRGVmYXVsdEtleUlEX1Byb2N9LAorCXsiS2V5MSIsCQkJCQlTaG93X0tleTFfUHJvY30sCisJeyJLZXkyIiwJCQkJCVNob3dfS2V5Ml9Qcm9jfSwKKwl7IktleTMiLAkJCQkJU2hvd19LZXkzX1Byb2N9LAorCXsiS2V5NCIsCQkJCQlTaG93X0tleTRfUHJvY30sCisJeyJXUEFQU0siLAkJCQkJU2hvd19XUEFQU0tfUHJvY30sCisJe05VTEwsIE5VTEx9Cit9OworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIEdldCBEcml2ZXIgdmVyc2lvbi4KKworICAgIFJldHVybjoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfRHJpdmVyVmVyc2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRyaXZlciB2ZXJzaW9uLSVzXG4iLCBTVEFfRFJJVkVSX1ZFUlNJT04pKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBDb3VudHJ5IFJlZ2lvbi4KKyAgICAgICAgVGhpcyBjb21tYW5kIHdpbGwgbm90IHdvcmssIGlmIHRoZSBmaWVsZCBvZiBDb3VudHJ5UmVnaW9uIGluIGVlcHJvbSBpcyBwcm9ncmFtbWVkLgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9Db3VudHJ5UmVnaW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIHJlZ2lvbjsKKworCXJlZ2lvbiA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJcmV0dXJuIC1FT1BOT1RTVVBQOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworCS8vIENvdW50cnkgY2FuIGJlIHNldCBvbmx5IHdoZW4gRUVQUk9NIG5vdCBwcm9ncmFtbWVkCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gJiAweDgwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0NvdW50cnlSZWdpb25fUHJvYzo6cGFyYW1ldGVyIG9mIENvdW50cnlSZWdpb24gaW4gZWVwcm9tIGlzIHByb2dyYW1tZWQgXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZigocmVnaW9uID49IDApICYmIChyZWdpb24gPD0gUkVHSU9OX01BWElNVU1fQkdfQkFORCkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uID0gKFVDSEFSKSByZWdpb247CisJfQorCWVsc2UgaWYgKHJlZ2lvbiA9PSBSRUdJT05fMzFfQkdfQkFORCkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoVUNIQVIpIHJlZ2lvbjsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0NvdW50cnlSZWdpb25fUHJvYzo6cGFyYW1ldGVycyBvdXQgb2YgcmFuZ2VcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIGlmIHNldCBjb3VudHJ5IHJlZ2lvbiwgZHJpdmVyIG5lZWRzIHRvIGJlIHJlc2V0CisJQnVpbGRDaGFubmVsTGlzdChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0NvdW50cnlSZWdpb25fUHJvYzo6KENvdW50cnlSZWdpb249JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQ291bnRyeSBSZWdpb24gZm9yIEEgYmFuZC4KKyAgICAgICAgVGhpcyBjb21tYW5kIHdpbGwgbm90IHdvcmssIGlmIHRoZSBmaWVsZCBvZiBDb3VudHJ5UmVnaW9uIGluIGVlcHJvbSBpcyBwcm9ncmFtbWVkLgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgcmVnaW9uOworCisJcmVnaW9uID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCisJLy8gQ291bnRyeSBjYW4gYmUgc2V0IG9ubHkgd2hlbiBFRVBST00gbm90IHByb2dyYW1tZWQKKwlpZiAocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kICYgMHg4MCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYzo6cGFyYW1ldGVyIG9mIENvdW50cnlSZWdpb24gaW4gZWVwcm9tIGlzIHByb2dyYW1tZWQgXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZigocmVnaW9uID49IDApICYmIChyZWdpb24gPD0gUkVHSU9OX01BWElNVU1fQV9CQU5EKSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9IChVQ0hBUikgcmVnaW9uOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2M6OnBhcmFtZXRlcnMgb3V0IG9mIHJhbmdlXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyBpZiBzZXQgY291bnRyeSByZWdpb24sIGRyaXZlciBuZWVkcyB0byBiZSByZXNldAorCUJ1aWxkQ2hhbm5lbExpc3QocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYzo6KENvdW50cnlSZWdpb249JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXaXJlbGVzcyBNb2RlCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1dpcmVsZXNzTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORwlXaXJlbGVzc01vZGU7CisJSU5UCQlzdWNjZXNzID0gVFJVRTsKKworCVdpcmVsZXNzTW9kZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlJTlQgTWF4UGh5TW9kZSA9IFBIWV8xMUc7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJTWF4UGh5TW9kZSA9IFBIWV8xMU5fNUc7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJaWYgKFdpcmVsZXNzTW9kZSA8PSBNYXhQaHlNb2RlKQorCQl7CisJCQlSVE1QU2V0UGh5TW9kZShwQWQsIFdpcmVsZXNzTW9kZSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoV2lyZWxlc3NNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJCQkJcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IEZBTFNFOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBGQUxTRTsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCS8vIFNldCBBZGhvY01vZGUgcmF0ZXMKKwkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCXsKKwkJCQlNbG1lVXBkYXRlVHhSYXRlcyhwQWQsIEZBTFNFLCAwKTsKKwkJCQlNYWtlSWJzc0JlYWNvbihwQWQpOyAgICAgICAgICAgLy8gcmUtYnVpbGQgQkVBQ09OIGZyYW1lCisJCQkJQXNpY0VuYWJsZUlic3NTeW5jKHBBZCk7ICAgICAgIC8vIGNvcHkgdG8gb24tY2hpcCBtZW1vcnkKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCXN1Y2Nlc3MgPSBGQUxTRTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIGl0IGlzIG5lZWRlZCB0byBzZXQgU1NJRCB0byB0YWtlIGVmZmVjdAorCWlmIChzdWNjZXNzID09IFRSVUUpCisJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfV2lyZWxlc3NNb2RlX1Byb2M6Oig9JWxkKVxuIiwgV2lyZWxlc3NNb2RlKSk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9XaXJlbGVzc01vZGVfUHJvYzo6cGFyYW1ldGVycyBvdXQgb2YgcmFuZ2VcbiIpKTsKKwl9CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQ2hhbm5lbAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9DaGFubmVsX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworIAlJTlQJCXN1Y2Nlc3MgPSBUUlVFOworCVVDSEFSCUNoYW5uZWw7CisKKwlDaGFubmVsID0gKFVDSEFSKSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJLy8gY2hlY2sgaWYgdGhpcyBjaGFubmVsIGlzIHZhbGlkCisJaWYgKENoYW5uZWxTYW5pdHkocEFkLCBDaGFubmVsKSA9PSBUUlVFKQorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IENoYW5uZWw7CisKKwkJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJTl9DaGFubmVsQ2hlY2socEFkKTsKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEICYmCisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCkKKwkJCQl7CisJCQkJCU5fU2V0Q2VuQ2gocEFkKTsKKwkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzQwLCBjb250cm9sX2NoYW5uZWwoJWQpLCBDZW50cmFsQ2hhbm5lbCglZCkgXG4iLAorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJeworCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzIwLCBDaGFubmVsKCVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCX0KKwkJCX0KKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlzdWNjZXNzID0gVFJVRTsKKwl9CisJZWxzZQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJc3VjY2VzcyA9IEZBTFNFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCisJaWYgKHN1Y2Nlc3MgPT0gVFJVRSkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0NoYW5uZWxfUHJvYzo6KENoYW5uZWw9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgU2hvcnQgU2xvdCBUaW1lIEVuYWJsZSBvciBEaXNhYmxlCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1Nob3J0U2xvdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBTaG9ydFNsb3Q7CisKKwlTaG9ydFNsb3QgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFNob3J0U2xvdCA9PSAxKQorCQlwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSA9IFRSVUU7CisJZWxzZSBpZiAoU2hvcnRTbG90ID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9TaG9ydFNsb3RfUHJvYzo6KFNob3J0U2xvdD0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgVHggcG93ZXIKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBUeFBvd2VyOworCUlOVCAgIHN1Y2Nlc3MgPSBGQUxTRTsKKworCVR4UG93ZXIgPSAoVUxPTkcpIHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFR4UG93ZXIgPD0gMTAwKQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdCA9IFR4UG93ZXI7CisJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0OworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCXN1Y2Nlc3MgPSBUUlVFOworCX0KKwllbHNlCisJCXN1Y2Nlc3MgPSBGQUxTRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9UeFBvd2VyX1Byb2M6OihUeFBvd2VyUGVyY2VudGFnZT0lbGQpXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSkpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IDExQi8xMUcgUHJvdGVjdGlvbgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9CR1Byb3RlY3Rpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJc3dpdGNoIChzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApKQorCXsKKwkJY2FzZSAwOiAvL0FVVE8KKwkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvL0Fsd2F5cyBPbgorCQkJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8vQWx3YXlzIE9GRgorCQkJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAgLy9JbnZhbGlkIGFyZ3VtZW50CisJCQlyZXR1cm4gRkFMU0U7CisJfQorCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQkdQcm90ZWN0aW9uX1Byb2M6OihCR1Byb3RlY3Rpb249JWxkKVxuIiwgcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgVHhQcmVhbWJsZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9UeFByZWFtYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVJUXzgwMl8xMV9QUkVBTUJMRQlQcmVhbWJsZTsKKworCVByZWFtYmxlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCisJc3dpdGNoIChQcmVhbWJsZSkKKwl7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZVNob3J0OgorCQkJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFByZWFtYmxlOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQlNbG1lU2V0VHhQcmVhbWJsZShwQWQsIFJ0ODAyXzExUHJlYW1ibGVTaG9ydCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKwkJY2FzZSBSdDgwMl8xMVByZWFtYmxlTG9uZzoKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJY2FzZSBSdDgwMl8xMVByZWFtYmxlQXV0bzoKKwkJCS8vIGlmIHVzZXIgd2FudHMgQVVUTywgaW5pdGlhbGl6ZSB0byBMT05HIGhlcmUsIHRoZW4gY2hhbmdlIGFjY29yZGluZyB0byBBUCdzCisJCQkvLyBjYXBhYmlsaXR5IHVwb24gYXNzb2NpYXRpb24uCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID0gUHJlYW1ibGU7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCU1sbWVTZXRUeFByZWFtYmxlKHBBZCwgUnQ4MDJfMTFQcmVhbWJsZUxvbmcpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorCQkJcmV0dXJuIEZBTFNFOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9UeFByZWFtYmxlX1Byb2M6OihUeFByZWFtYmxlPSVsZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBSVFMgVGhyZXNob2xkCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1JUU1RocmVzaG9sZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwkgTkRJU184MDJfMTFfUlRTX1RIUkVTSE9MRCAgICAgICAgICAgUnRzVGhyZXNoOworCisJUnRzVGhyZXNoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKChSdHNUaHJlc2ggPiAwKSAmJiAoUnRzVGhyZXNoIDw9IE1BWF9SVFNfVEhSRVNIT0xEKSkKKwkJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkICA9IChVU0hPUlQpUnRzVGhyZXNoOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWVsc2UgaWYgKFJ0c1RocmVzaCA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfUlRTVGhyZXNob2xkX1Byb2M6OihSVFNUaHJlc2hvbGQ9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBGcmFnbWVudCBUaHJlc2hvbGQKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfRnJhZ1RocmVzaG9sZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwkgTkRJU184MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQgICAgIEZyYWdUaHJlc2g7CisKKwlGcmFnVGhyZXNoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChGcmFnVGhyZXNoID4gTUFYX0ZSQUdfVEhSRVNIT0xEIHx8IEZyYWdUaHJlc2ggPCBNSU5fRlJBR19USFJFU0hPTEQpCisJeworCQkvL0lsbGVnYWwgRnJhZ1RocmVzaCBzbyB3ZSBzZXQgaXQgdG8gZGVmYXVsdAorCQlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwl9CisJZWxzZSBpZiAoRnJhZ1RocmVzaCAlIDIgPT0gMSkKKwl7CisJCS8vIFRoZSBsZW5ndGggb2YgZWFjaCBmcmFnbWVudCBzaGFsbCBhbHdheXMgYmUgYW4gZXZlbiBudW1iZXIgb2Ygb2N0ZXRzLCBleGNlcHQgZm9yIHRoZSBsYXN0IGZyYWdtZW50CisJCS8vIG9mIGFuIE1TRFUgb3IgTU1QRFUsIHdoaWNoIG1heSBiZSBlaXRoZXIgYW4gZXZlbiBvciBhbiBvZGQgbnVtYmVyIG9mIG9jdGV0cy4KKwkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKShGcmFnVGhyZXNoIC0gMSk7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gKFVTSE9SVClGcmFnVGhyZXNoOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPT0gTUFYX0ZSQUdfVEhSRVNIT0xEKQorCQkJcEFkLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9IFRSVUU7CisJCWVsc2UKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfRnJhZ1RocmVzaG9sZF9Qcm9jOjooRnJhZ1RocmVzaG9sZD0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgVHhCdXJzdAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9UeEJ1cnN0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFR4QnVyc3Q7CisKKwlUeEJ1cnN0ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVHhCdXJzdCA9PSAxKQorCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IFRSVUU7CisJZWxzZSBpZiAoVHhCdXJzdCA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IEZBTFNFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfVHhCdXJzdF9Qcm9jOjooVHhCdXJzdD0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFR4QnVyc3QKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfUGt0QWdncmVnYXRlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIGFnZ3JlOworCisJYWdncmUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKGFnZ3JlID09IDEpCisJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBUUlVFOworCWVsc2UgaWYgKGFnZ3JlID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfUGt0QWdncmVnYXRlX1Byb2M6OihBR0dSRT0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IElFRUU4MDIxMUguCisgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIDEgd2hlbiBuZWVkcyByYWRhciBkZXRlY3Rpb24sIG90aGVyd2lzZSAwCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0lFRUU4MDIxMUhfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUxPTkcgaWVlZTgwMjExaDsKKworCWllZWU4MDIxMWggPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKGllZWU4MDIxMWggPT0gMSkKKwkJcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPSBUUlVFOworCWVsc2UgaWYgKGllZWU4MDIxMWggPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0lFRUU4MDIxMUhfUHJvYzo6KElFRUU4MDIxMUg9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworI2lmZGVmIERCRworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBGb3IgRGVidWcgaW5mb3JtYXRpb24KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfRGVidWdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IFNldF9EZWJ1Z19Qcm9jICoqKioqKioqKioqKioqKioqKipcbiIpKTsKKworICAgIGlmKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPD0gUlRfREVCVUdfTE9VRCkKKyAgICAgICAgUlREZWJ1Z0xldmVsID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBTZXRfRGVidWdfUHJvYyhSVERlYnVnTGV2ZWwgPSAlbGQpXG4iLCBSVERlYnVnTGV2ZWwpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmCisKK0lOVAlTaG93X0Rlc2NJbmZvX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVzZXQgc3RhdGlzdGljcyBjb3VudGVyCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZGFwdGVyICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgICBhcmcKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9SZXNldFN0YXRDb3VudGVyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCS8vVUNIQVIgICAgICAgICAgIGk7CisJLy9NQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PlNldF9SZXNldFN0YXRDb3VudGVyX1Byb2NcbiIpKTsKKworCS8vIGFkZCB0aGUgbW9zdCB1cC10by1kYXRlIGgvdyByYXcgY291bnRlcnMgaW50byBzb2Z0d2FyZSBjb3VudGVycworCU5JQ1VwZGF0ZVJhd0NvdW50ZXJzKHBBZCk7CisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5XbGFuQ291bnRlcnMsIHNpemVvZihDT1VOVEVSXzgwMl8xMSkpOworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkNvdW50ZXJzODAyMywgc2l6ZW9mKENPVU5URVJfODAyXzMpKTsKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5SYWxpbmtDb3VudGVycywgc2l6ZW9mKENPVU5URVJfUkFMSU5LKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworQk9PTEVBTiBSVE1QQ2hlY2tTdHJQcmludEFibGUoCisgICAgSU4gIENIQVIgKnBJblB1dFN0ciwKKyAgICBJTiAgVUNIQVIgc3RyTGVuKQoreworICAgIFVDSEFSIGk9MDsKKworICAgIGZvciAoaT0wOyBpPHN0ckxlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChwSW5QdXRTdHJbaV0gPCAweDIxKSB8fAorICAgICAgICAgICAgKHBJblB1dFN0cltpXSA+IDB4N0UpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVtb3ZlIFdQQSBLZXkgcHJvY2VzcworCisJQXJndW1lbnRzOgorCQlwQWQgCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBCdWYJCQkJCQkJUG9pbnRlciB0byB0aGUgd2hlcmUgdGhlIGtleSBzdG9yZWQKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVUNDRVNTCQkJCQlBZGQga2V5IHN1Y2Nlc3NmdWxseQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCAgICBSVE1QU2V0RGVzaXJlZFJhdGVzKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIExPTkcgICAgICAgICAgICBSYXRlcykKK3sKKyAgICBORElTXzgwMl8xMV9SQVRFUyBhcnlSYXRlczsKKworICAgIG1lbXNldCgmYXJ5UmF0ZXMsIDB4MDAsIHNpemVvZihORElTXzgwMl8xMV9SQVRFUykpOworICAgIHN3aXRjaCAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBQSFlfMTFBOiAvLyBBIG9ubHkKKyAgICAgICAgICAgIHN3aXRjaCAoUmF0ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSA2MDAwMDAwOiAvLzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwYzsgLy8gNk0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDkwMDAwMDA6IC8vOU0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDEyOyAvLyA5TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTIwMDAwMDA6IC8vMTJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxODsgLy8gMTJNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxODAwMDAwMDogLy8xOE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDI0OyAvLyAxOE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18zOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI0MDAwMDAwOiAvLzI0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MzA7IC8vIDI0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzYwMDAwMDA6IC8vMzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg0ODsgLy8gMzZNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0ODAwMDAwMDogLy80OE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDYwOyAvLyA0OE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU182OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU0MDAwMDAwOiAvLzU0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NmM7IC8vIDU0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLTE6IC8vQXV0bworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg2YzsgLy8gNTRNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzFdID0gMHg2MDsgLy8gNDhNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzJdID0gMHg0ODsgLy8gMzZNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzNdID0gMHgzMDsgLy8gMjRNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzRdID0gMHgyNDsgLy8gMThNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzVdID0gMHgxODsgLy8gMTJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzZdID0gMHgxMjsgLy8gOU0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbN10gPSAweDBjOyAvLyA2TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTX0FVVE87CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEhZXzExQkdfTUlYRUQ6IC8vIEIvRyBNaXhlZAorICAgICAgICBjYXNlIFBIWV8xMUI6IC8vIEIgb25seQorICAgICAgICBjYXNlIFBIWV8xMUFCR19NSVhFRDogLy8gQS9CL0cgTWl4ZWQKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN3aXRjaCAoUmF0ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxMDAwMDAwOiAvLzFNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwMjsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDIwMDAwMDA6IC8vMk0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDA0OworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNTAwMDAwMDogLy81LjVNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwYjsgLy8gNS41TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTEwMDAwMDA6IC8vMTFNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxNjsgLy8gMTFNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA2MDAwMDAwOiAvLzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwYzsgLy8gNk0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDkwMDAwMDA6IC8vOU0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDEyOyAvLyA5TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTIwMDAwMDA6IC8vMTJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxODsgLy8gMTJNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxODAwMDAwMDogLy8xOE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDI0OyAvLyAxOE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18zOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI0MDAwMDAwOiAvLzI0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MzA7IC8vIDI0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzYwMDAwMDA6IC8vMzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg0ODsgLy8gMzZNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0ODAwMDAwMDogLy80OE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDYwOyAvLyA0OE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU182OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU0MDAwMDAwOiAvLzU0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NmM7IC8vIDU0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLTE6IC8vQXV0bworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKKyAgICAgICAgICAgICAgICAgICAgeyAvL0IgT25seQorICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDE2OyAvLyAxMU1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzFdID0gMHgwYjsgLy8gNS41TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMl0gPSAweDA0OyAvLyAyTWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbM10gPSAweDAyOyAvLyAxTWJwcworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeyAvLyhCL0cpIE1peGVkIG9yIChBL0IvRykgTWl4ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg2YzsgLy8gNTRNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1sxXSA9IDB4NjA7IC8vIDQ4TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMl0gPSAweDQ4OyAvLyAzNk1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzNdID0gMHgzMDsgLy8gMjRNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s0XSA9IDB4MTY7IC8vIDExTWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbNV0gPSAweDBiOyAvLyA1LjVNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s2XSA9IDB4MDQ7IC8vIDJNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s3XSA9IDB4MDI7IC8vIDFNYnBzCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZSwgJmFyeVJhdGVzLCBzaXplb2YoTkRJU184MDJfMTFfUkFURVMpKTsKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgUlRNUFNldERlc2lyZWRSYXRlcyAoJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4KVxuIiwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzBdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxXSwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzJdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVszXSwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzRdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs1XSwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzZdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs3XSApKTsKKyAgICAvLyBDaGFuZ2luZyBEZXNpcmVkUmF0ZSBtYXkgYWZmZWN0IHRoZSBNQVggVFggcmF0ZSB3ZSB1c2VkIHRvIFRYIGZyYW1lcyBvdXQKKyAgICBNbG1lVXBkYXRlVHhSYXRlcyhwQWRhcHRlciwgRkFMU0UsIDApOworfQorCitORElTX1NUQVRVUyBSVE1QV1BBUmVtb3ZlS2V5UHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVk9JRAkJCXBCdWYpCit7CisJUE5ESVNfODAyXzExX1JFTU9WRV9LRVkgcEtleTsKKwlVTE9ORwkJCQkJS2V5SWR4OworCU5ESVNfU1RBVFVTIAkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJQk9PTEVBTiAJYlR4S2V5OyAJCS8vIFNldCB0aGUga2V5IGFzIHRyYW5zbWl0IGtleQorCUJPT0xFQU4gCWJQYWlyd2lzZTsJCS8vIEluZGljYXRlIHRoZSBrZXkgaXMgcGFpcndpc2Uga2V5CisJQk9PTEVBTiAJYktleVJTQzsJCS8vIGluZGljYXRlIHRoZSByZWNlaXZlICBTQyBzZXQgYnkgS2V5UlNDIHZhbHVlLgorCQkJCQkJCQkvLyBPdGhlcndpc2UsIGl0IHdpbGwgc2V0IGJ5IHRoZSBOSUMuCisJQk9PTEVBTiAJYkF1dGhlbnRpY2F0b3I7IC8vIGluZGljYXRlIGtleSBpcyBzZXQgYnkgYXV0aGVudGljYXRvci4KKwlJTlQgCQlpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCItLS0+IFJUTVBXUEFSZW1vdmVLZXlQcm9jXG4iKSk7CisKKwlwS2V5ID0gKFBORElTXzgwMl8xMV9SRU1PVkVfS0VZKSBwQnVmOworCUtleUlkeCA9IHBLZXktPktleUluZGV4ICYgMHhmZjsKKwkvLyBCaXQgMzEgb2YgQWRkLWtleSwgVHggS2V5CisJYlR4S2V5CQkgICA9IChwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApID8gVFJVRSA6IEZBTFNFOworCS8vIEJpdCAzMCBvZiBBZGQta2V5IFBhaXJ3aXNlS2V5CisJYlBhaXJ3aXNlCSAgID0gKHBLZXktPktleUluZGV4ICYgMHg0MDAwMDAwMCkgPyBUUlVFIDogRkFMU0U7CisJLy8gQml0IDI5IG9mIEFkZC1rZXkgS2V5UlNDCisJYktleVJTQyAJICAgPSAocEtleS0+S2V5SW5kZXggJiAweDIwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKwkvLyBCaXQgMjggb2YgQWRkLWtleSBBdXRoZW50aWNhdG9yCisJYkF1dGhlbnRpY2F0b3IgPSAocEtleS0+S2V5SW5kZXggJiAweDEwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKworCS8vIDEuIElmIGJUeCBpcyBUUlVFLCByZXR1cm4gZmFpbHVyZSBpbmZvcm1hdGlvbgorCWlmIChiVHhLZXkgPT0gVFJVRSkKKwkJcmV0dXJuKE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQSk7CisKKwkvLyAyLiBDaGVjayBQYWlyd2lzZSBLZXkKKwlpZiAoYlBhaXJ3aXNlKQorCXsKKwkJLy8gYS4gSWYgQlNTSUQgaXMgYnJvYWRjYXN0LCByZW1vdmUgYWxsIHBhaXJ3aXNlIGtleXMuCisJCS8vIGIuIElmIG5vdCBicm9hZGNhc3QsIHJlbW92ZSB0aGUgcGFpcndpc2Ugc3BlY2lmaWVkIGJ5IEJTU0lECisJCWZvciAoaSA9IDA7IGkgPCBTSEFSRV9LRVlfTlVNOyBpKyspCisJCXsKKwkJCWlmIChNQUNfQUREUl9FUVVBTChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5Cc3NJZCwgcEtleS0+QlNTSUQpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUFdQQVJlbW92ZUtleVByb2MoS2V5SWR4PSVkKVxuIiwgaSkpOworCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLktleUxlbiA9IDA7CisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCQkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgKFVDSEFSKWkpOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLy8gMy4gR3JvdXAgS2V5CisJZWxzZQorCXsKKwkJLy8gYS4gSWYgQlNTSUQgaXMgYnJvYWRjYXN0LCByZW1vdmUgYWxsIGdyb3VwIGtleXMgaW5kZXhlZAorCQkvLyBiLiBJZiBCU1NJRCBtYXRjaGVkLCBkZWxldGUgdGhlIGdyb3VwIGtleSBpbmRleGVkLgorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFSZW1vdmVLZXlQcm9jKEtleUlkeD0lbGQpXG4iLCBLZXlJZHgpKTsKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPSAwOworCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQlBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCAoVUNIQVIpS2V5SWR4KTsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwl9CisKKwlyZXR1cm4gKFN0YXR1cyk7Cit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlbW92ZSBBbGwgV1BBIEtleXMKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBXUEFSZW1vdmVBbGxLZXlzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCisJVUNIQVIgCWk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFSZW1vdmVBbGxLZXlzKEF1dGhNb2RlPSVkLCBXZXBTdGF0dXM9JWQpXG4iLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisKKwkvLyBGb3IgV0VQL0NLSVAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVtb3ZlIGl0LCBzaW5jZSBXaW5YUCB3b24ndCBzZXQgaXQgYWdhaW4gYWZ0ZXIKKwkvLyBMaW5rIHVwLiBBbmQgaXQgd2lsbCBiZSByZXBsYWNlZCBpZiB1c2VyIGNoYW5nZWQgaXQuCisJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQlyZXR1cm47CisKKwkvLyBGb3IgV1BBLU5vbmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVtb3ZlIGl0LCBzaW5jZSBXaW5YUCB3b24ndCBzZXQgaXQgYWdhaW4gYWZ0ZXIKKwkvLyBMaW5rIHVwLiBBbmQgaXQgd2lsbCBiZSByZXBsYWNlZCBpZiB1c2VyIGNoYW5nZWQgaXQuCisJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCXJldHVybjsKKworCS8vIHNldCBCU1NJRCB3Y2lkIGVudHJ5IG9mIHRoZSBQYWlyLXdpc2UgS2V5IHRhYmxlIGFzIG5vLXNlY3VyaXR5IG1vZGUKKwlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIEJTUzAsIEJTU0lEX1dDSUQpOworCisJLy8gc2V0IGFsbCBzaGFyZWQga2V5IG1vZGUgYXMgbm8tc2VjdXJpdHkuCisJZm9yIChpID0gMDsgaSA8IFNIQVJFX0tFWV9OVU07IGkrKykKKyAgICB7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgicmVtb3ZlICVzIGtleSAjJWRcbiIsIENpcGhlck5hbWVbcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnXSwgaSkpOworCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisKKwkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaSk7CisJfQorCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2hhbmdlIE5JQyBQSFkgbW9kZS4gUmUtYXNzb2NpYXRpb24gbWF5IGJlIG5lY2Vzc2FyeS4gcG9zc2libGUgc2V0dGluZ3MKKwkJaW5jbHVkZSAtIFBIWV8xMUIsIFBIWV8xMUJHX01JWEVELCBQSFlfMTFBLCBhbmQgUEhZXzExQUJHX01JWEVECisKKwlBcmd1bWVudHM6CisJCXBBZCAtIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcGh5bW9kZSAgLQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFNldFBoeU1vZGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUxPTkcgcGh5bW9kZSkKK3sKKwlJTlQgaTsKKwkvLyB0aGUgc2VsZWN0ZWQgcGh5bW9kZSBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgUkYgSUMgZW5jb2RlZCBpbiBFMlBST00KKworCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAoVUNIQVIpcGh5bW9kZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUFNldFBoeU1vZGUgOiBQaHlNb2RlPSVkLCBjaGFubmVsPSVkIFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlCdWlsZENoYW5uZWxMaXN0RXgocEFkKTsKKyNlbHNlCisJQnVpbGRDaGFubmVsTGlzdChwQWQpOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworCS8vIHNhbml0eSBjaGVjayB1c2VyIHNldHRpbmcKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gRmlyc3RDaGFubmVsKHBBZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBTZXRQaHlNb2RlOiBjaGFubmVsIGlzIG91dCBvZiByYW5nZSwgdXNlIGZpcnN0IGNoYW5uZWw9JWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJfQorCisJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJc3dpdGNoIChwaHltb2RlKSB7CisJCWNhc2UgUEhZXzExQjoKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMF0gID0gMHg4MjsJICAvLyAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzFdICA9IDB4ODQ7CSAgLy8gMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsyXSAgPSAweDhCOwkgIC8vIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVszXSAgPSAweDk2OwkgIC8vIDExIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuICA9IDQ7CisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuICA9IDA7CisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzBdICA9IDI7CSAgIC8vIDEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0gID0gNDsJICAgLy8gMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSAgPSAxMTsgICAgLy8gNS41IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzNdICA9IDIyOyAgICAvLyAxMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOyAvLyBUaGlzIE1PREUgaXMgb25seSBGWUkuIG5vdCB1c2UKKwkJCWJyZWFrOworCisJCWNhc2UgUEhZXzExRzoKKwkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExTl8yXzRHOgorCQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6CisJCWNhc2UgUEhZXzExQkdOX01JWEVEOgorCQljYXNlIFBIWV8xMUdOX01JWEVEOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVswXSAgPSAweDgyOwkgIC8vIDEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMV0gID0gMHg4NDsJICAvLyAyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzJdICA9IDB4OEI7CSAgLy8gNS41IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzNdICA9IDB4OTY7CSAgLy8gMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNF0gID0gMHgxMjsJICAvLyA5IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzVdICA9IDB4MjQ7CSAgLy8gMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNl0gID0gMHg0ODsJICAvLyAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs3XSAgPSAweDZjOwkgIC8vIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuICA9IDg7CisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzBdICA9IDB4MEM7CSAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZVsxXSAgPSAweDE4OwkgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzJdICA9IDB4MzA7CSAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVbM10gID0gMHg2MDsJICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiAgPSA0OworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSAgPSAyOwkgICAvLyAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzFdICA9IDQ7CSAgIC8vIDIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMl0gID0gMTE7ICAgIC8vIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVszXSAgPSAyMjsgICAgLy8gMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNF0gID0gMTI7ICAgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNV0gID0gMTg7ICAgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0gID0gMjQ7ICAgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddICA9IDM2OyAgICAvLyAxOCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs4XSAgPSA0ODsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbOV0gID0gNzI7ICAgIC8vIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzEwXSA9IDk2OyAgICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxMV0gPSAxMDg7ICAgLy8gNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCWJyZWFrOworCisJCWNhc2UgUEhZXzExQToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFBR05fTUlYRUQ6CisJCWNhc2UgUEhZXzExTl81RzoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMF0gID0gMHg4QzsJICAvLyA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzFdICA9IDB4MTI7CSAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsyXSAgPSAweDk4OwkgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzNdICA9IDB4MjQ7CSAgLy8gMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNF0gID0gMHhiMDsJICAvLyAyNCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs1XSAgPSAweDQ4OwkgIC8vIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzZdICA9IDB4NjA7CSAgLy8gNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbN10gID0gMHg2YzsJICAvLyA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiAgPSA4OworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiAgPSAwOworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSAgPSAxMjsgICAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxXSAgPSAxODsgICAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSAgPSAyNDsgICAgLy8gMTIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10gID0gMzY7ICAgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzRdICA9IDQ4OyAgICAvLyAyNCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs1XSAgPSA3MjsgICAgLy8gMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0gID0gOTY7ICAgIC8vIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddICA9IDEwODsgICAvLyA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsgLy8gVGhpcyBNT0RFIGlzIG9ubHkgRllJLiBub3QgdXNlCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisKKwlwQWQtPkNvbW1vbkNmZy5CYW5kU3RhdGUgPSBVTktOT1dOX0JBTkQ7Cit9CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxsZXIgZW5zdXJlcyB3ZSBoYXMgODAyLjExbiBzdXBwb3J0LgorCQlDYWxscyBhdCBzZXR0aW5nIEhUIGZyb20gQVAvU1RBU2V0aW5mb3JtYXRpb24KKworCUFyZ3VtZW50czoKKwkJcEFkIC0gUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwaHltb2RlICAtCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRIVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglPSURfU0VUX0hUX1BIWU1PREUgKnBIVFBoeU1vZGUpCit7CisJLy9VTE9ORwkqcG1jczsKKwlVSU5UMzIJVmFsdWUgPSAwOworCVVDSEFSCUJCUFZhbHVlID0gMDsKKwlVQ0hBUglCQlAzVmFsdWUgPSAwOworCVVDSEFSCVJ4U3RyZWFtID0gcEFkLT5Db21tb25DZmcuUnhTdHJlYW07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SFQgOiBIVF9tb2RlKCVkKSwgRXh0T2Zmc2V0KCVkKSwgTUNTKCVkKSwgQlcoJWQpLCBTVEJDKCVkKSwgU0hPUlRHSSglZClcbiIsCisJCQkJCQkJCQkJcEhUUGh5TW9kZS0+SHRNb2RlLCBwSFRQaHlNb2RlLT5FeHRPZmZzZXQsCisJCQkJCQkJCQkJcEhUUGh5TW9kZS0+TUNTLCBwSFRQaHlNb2RlLT5CVywKKwkJCQkJCQkJCQlwSFRQaHlNb2RlLT5TVEJDLCBwSFRQaHlNb2RlLT5TSE9SVEdJKSk7CisKKwkvLyBEb24ndCB6ZXJvIHN1cHBvcnRlZEh5UGh5IHN0cnVjdHVyZS4KKwlSVE1QWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KSk7CisJUlRNUFplcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbykpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5OZXdFeHRDaGFuT2Zmc2V0LCBzaXplb2YocEFkLT5Db21tb25DZmcuTmV3RXh0Q2hhbk9mZnNldCkpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHksIHNpemVvZihwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkpKTsKKworICAgCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gMTsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0ID0gMTsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gMDsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0ID0gMDsKKwl9CisKKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1heFJBbXBkdUZhY3RvciA9IDM7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1heFJBbXBkdUZhY3RvciA9IDM7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SFQgOiBSeEJBV2luTGltaXQgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCkpOworCisJLy8gTWltbyBwb3dlciBzYXZlLCBBLU1TRFUgc2l6ZSwKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZTsKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5ID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eTsKKworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVTaXplOworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7CisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SFQgOiBBTXNkdVNpemUgPSAlZCwgTWltb1BzID0gJWQsIE1wZHVEZW5zaXR5ID0gJWQsIE1heFJBbXBkdUZhY3RvciA9ICVkXG4iLAorCQkJCQkJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUsCisJCQkJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcywKKwkJCQkJCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHksCisJCQkJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1heFJBbXBkdUZhY3RvcikpOworCisJaWYocEhUUGh5TW9kZS0+SHRNb2RlID09IEhUTU9ERV9HRikKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uR0YgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YgPSAxOworCX0KKwllbHNlCisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRiA9IDA7CisKKwkvLyBEZWNpZGUgUnggTUNTU2V0CisJc3dpdGNoIChSeFN0cmVhbSkKKwl7CisJCWNhc2UgMToKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAgMHhmZjsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAgMHgwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgMjoKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAgMHhmZjsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAgMHhmZjsKKwkJCWJyZWFrOworCisJCWNhc2UgMzogLy8gMyozCisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gIDB4ZmY7CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gIDB4ZmY7CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzJdID0gIDB4ZmY7CisJCQlicmVhazsKKwl9CisKKwlpZiAocEFkLT5Db21tb25DZmcuYkZvcnR5X01oel9JbnRvbGVyYW50ICYmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDE0KSAmJiAocEhUUGh5TW9kZS0+QlcgPT0gQldfNDApICkKKwl7CisJCXBIVFBoeU1vZGUtPkJXID0gQldfMjA7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uRm9ydHlfTWh6X0ludG9sZXJhbnQgPSAxOworCX0KKworCWlmKHBIVFBoeU1vZGUtPkJXID09IEJXXzQwKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFs0XSA9IDB4MTsgLy8gTUNTIDMyCisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0gMTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpCisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNDS21vZGVpbjQwID0gMTsKKworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gMTsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID0gMTsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID0gKHBIVFBoeU1vZGUtPkV4dE9mZnNldCA9PSBFWFRDSEFfQkVMT1cpPyAoRVhUQ0hBX0JFTE9XKTogRVhUQ0hBX0FCT1ZFOworCQkvLyBTZXQgUmVnc2l0ZXIgZm9yIGV4dGVuc2lvbiBjaGFubmVsIHBvc2l0aW9uLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlAzVmFsdWUpOworCQlpZiAoKHBIVFBoeU1vZGUtPkV4dE9mZnNldCA9PSBFWFRDSEFfQkVMT1cpKQorCQl7CisJCQlWYWx1ZSB8PSAweDE7CisJCQlCQlAzVmFsdWUgfD0gKDB4MjApOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKwkJfQorCQllbHNlIGlmICgocEhUUGh5TW9kZS0+RXh0T2Zmc2V0ID09IEVYVENIQV9BQk9WRSkpCisJCXsKKwkJCVZhbHVlICY9IDB4ZmU7CisJCQlCQlAzVmFsdWUgJj0gKH4weDIwKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7CisJCX0KKworCQkvLyBUdXJuIG9uIEJCUCA0ME1IeiBtb2RlIG5vdyBvbmx5IGFzIEFQIC4KKwkJLy8gU3RhIGNhbiB0dXJuIG9uIEJCUCA0ME1IeiBhZnRlciBjb25uZWN0aW9uIHdpdGggNDBNSHogQVAuIFN0YSBvbmx5IGJyb2FkY2FzdCA0ME1IeiBjYXBhYmlsaXR5IGJlZm9yZSBjb25uZWN0aW9uLgorCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkgfHwgSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpCisJCQkpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCQlCQlBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlAzVmFsdWUpOworCQkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPSAwOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID0gRVhUQ0hBX05PTkU7CisJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkJLy8gVHVybiBvbiBCQlAgMjBNSHogbW9kZSBieSByZXF1ZXN0IGhlcmUuCisJCXsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJfQorCX0KKworCWlmKHBIVFBoeU1vZGUtPlNUQkMgPT0gU1RCQ19VU0UpCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQyA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQyA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMgPSAxOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDID0gMDsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlJ4U1RCQyA9IDA7CisJfQorCisJaWYocEhUUGh5TW9kZS0+U0hPUlRHSSA9PSBHSV80MDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gMTsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSAxOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gMDsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSAwOworCX0KKworCS8vIFdlIHN1cHBvcnQgbGluayBhZGFwdGF0aW9uIGZvciB1bnNvbGljaXQgTUNTIGZlZWRiYWNrLCBzZXQgdG8gMi4KKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID0gTUNTRkJLX05PTkU7IC8vTUNTRkJLX1VOU09MSUNJVDsKKwlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQ29udHJvbENoYW4gPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCS8vIDEsIHRoZSBleHRlbnNpb24gY2hhbm5lbCBhYm92ZSB0aGUgY29udHJvbCBjaGFubmVsLgorCisJLy8gRURDQSBwYXJhbWV0ZXJzIHVzZWQgZm9yIEFQJ3Mgb3duIHRyYW5zbWlzc2lvbgorCWlmIChwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJWYWxpZCA9PSBGQUxTRSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYlZhbGlkID0gVFJVRTsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblswXSA9IDM7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMV0gPSA3OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzJdID0gMTsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblszXSA9IDE7CisKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblswXSA9IDQ7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMV0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzJdID0gMzsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblszXSA9IDI7CisKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFswXSA9IDY7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMV0gPSAxMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFsyXSA9IDQ7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbM10gPSAzOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFswXSAgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbMV0gID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzJdICA9IDk0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbM10gID0gNDc7CisJfQorCUFzaWNTZXRFZGNhUGFybShwQWQsICZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCVJUTVBTZXRJbmRpdmlkdWFsSFQocEFkLCAwKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxsZXIgZW5zdXJlcyB3ZSBoYXMgODAyLjExbiBzdXBwb3J0LgorCQlDYWxscyBhdCBzZXR0aW5nIEhUIGZyb20gQVAvU1RBU2V0aW5mb3JtYXRpb24KKworCUFyZ3VtZW50czoKKwkJcEFkIC0gUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwaHltb2RlICAtCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRJbmRpdmlkdWFsSFQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVDSEFSCQkJCWFwaWR4KQoreworCVBSVF9IVF9QSFlfSU5GTwkJcERlc2lyZWRfaHRfcGh5ID0gTlVMTDsKKwlVQ0hBUglUeFN0cmVhbSA9IHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtOworCVVDSEFSCURlc2lyZWRNY3MJPSBNQ1NfQVVUTzsKKworCWRvCisJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCXBEZXNpcmVkX2h0X3BoeSA9ICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvOworCQkJRGVzaXJlZE1jcyA9IHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOworCQkJLy9wQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9IChEZXNpcmVkTWNzID09IE1DU19BVVRPKSA/IFRSVUUgOiBGQUxTRTsKKwkJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0gd2hpbGUgKEZBTFNFKTsKKworCWlmIChwRGVzaXJlZF9odF9waHkgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBTZXRJbmRpdmlkdWFsSFQ6IGludmFsaWQgYXBpZHgoJWQpXG4iLCBhcGlkeCkpOworCQlyZXR1cm47CisJfQorCVJUTVBaZXJvTWVtb3J5KHBEZXNpcmVkX2h0X3BoeSwgc2l6ZW9mKFJUX0hUX1BIWV9JTkZPKSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SW5kaXZpZHVhbEhUIDogRGVzaXJlZCBNQ1MgPSAlZFxuIiwgRGVzaXJlZE1jcykpOworCS8vIENoZWNrIHRoZSB2YWxpZGl0eSBvZiBNQ1MKKwlpZiAoKFR4U3RyZWFtID09IDEpICYmICgoRGVzaXJlZE1jcyA+PSBNQ1NfOCkgJiYgKERlc2lyZWRNY3MgPD0gTUNTXzE1KSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlJUTVBTZXRJbmRpdmlkdWFsSFQ6IE1DUyglZCkgaXMgaW52YWxpZCBpbiAxUywgcmVzZXQgaXQgYXMgTUNTXzdcbiIsIERlc2lyZWRNY3MpKTsKKwkJRGVzaXJlZE1jcyA9IE1DU183OworCX0KKworCWlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCA9PSBCV18yMCkgJiYgKERlc2lyZWRNY3MgPT0gTUNTXzMyKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUlRNUFNldEluZGl2aWR1YWxIVDogTUNTXzMyIGlzIG9ubHkgc3VwcG9ydGVkIGluIDQwLU1IeiwgcmVzZXQgaXQgYXMgTUNTXzBcbiIpKTsKKwkJRGVzaXJlZE1jcyA9IE1DU18wOworCX0KKworCXBEZXNpcmVkX2h0X3BoeS0+Ykh0RW5hYmxlID0gVFJVRTsKKworCS8vIERlY2lkZSBkZXNpcmVkIFR4IE1DUworCXN3aXRjaCAoVHhTdHJlYW0pCisJeworCQljYXNlIDE6CisJCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykKKwkJCXsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXT0gMHgwMDsKKwkJCX0KKwkJCWVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzcpCisJCQl7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF09IDE8PERlc2lyZWRNY3M7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV09IDB4MDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIDI6CisJCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykKKwkJCXsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXT0gMHhmZjsKKwkJCX0KKwkJCWVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzE1KQorCQkJeworCQkJCVVMT05HIG1vZGU7CisKKwkJCQltb2RlID0gRGVzaXJlZE1jcyAvIDg7CisJCQkJaWYgKG1vZGUgPCAyKQorCQkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFttb2RlXSA9ICgxIDw8IChEZXNpcmVkTWNzIC0gbW9kZSAqIDgpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMzogLy8gMyozCisJCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykKKwkJCXsKKwkJCQkvKiBNQ1MwIH4gTUNTMjMsIDMgYnl0ZXMgKi8KKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsyXT0gMHhmZjsKKwkJCX0KKwkJCWVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzIzKQorCQkJeworCQkJCVVMT05HIG1vZGU7CisKKwkJCQltb2RlID0gRGVzaXJlZE1jcyAvIDg7CisJCQkJaWYgKG1vZGUgPCAzKQorCQkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFttb2RlXSA9ICgxIDw8IChEZXNpcmVkTWNzIC0gbW9kZSAqIDgpKTsKKwkJCX0KKwkJCWJyZWFrOworCX0KKworCWlmKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGggPT0gQldfNDApCisJeworCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTyB8fCBEZXNpcmVkTWNzID09IE1DU18zMikKKwkJCXBEZXNpcmVkX2h0X3BoeS0+TUNTU2V0WzRdID0gMHgxOworCX0KKworCS8vIHVwZGF0ZSBIVCBSYXRlIHNldHRpbmcKKyAgICBpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKyAgICAgICAgTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIEJTUzApOworICAgIGVsc2UKKwkgICAgTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIGFwaWR4KTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVVwZGF0ZSBIVCBJRSBmcm9tIG91ciBjYXBhYmlsaXR5LgorCisJQXJndW1lbnRzOgorCQlTZW5kIGFsbCBIVCBJRSBpbiBiZWFjb24vcHJvYmUgcnNwL2Fzc29jIHJzcC9hY3Rpb24gZnJhbWUuCisKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFVwZGF0ZUhUSUUoCisJSU4JUlRfSFRfQ0FQQUJJTElUWQkqcFJ0SHQsCisJSU4JCVVDSEFSCQkJCSpwTWNzU2V0LAorCU9VVAkJSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlPVVQJCUFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbykKK3sKKwlSVE1QWmVyb01lbW9yeShwSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCVJUTVBaZXJvTWVtb3J5KHBBZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPSBwUnRIdC0+Q2hhbm5lbFdpZHRoOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uTWltb1BzID0gcFJ0SHQtPk1pbW9QczsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkdGID0gcFJ0SHQtPkdGOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjIwID0gcFJ0SHQtPlNob3J0R0lmb3IyMDsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3I0MCA9IHBSdEh0LT5TaG9ydEdJZm9yNDA7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5UeFNUQkMgPSBwUnRIdC0+VHhTVEJDOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDID0gcFJ0SHQtPlJ4U1RCQzsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkFNc2R1U2l6ZSA9IHBSdEh0LT5BbXNkdVNpemU7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IgPSBwUnRIdC0+TWF4UkFtcGR1RmFjdG9yOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSBwUnRIdC0+TXBkdURlbnNpdHk7CisKKwkJcEFkZEh0SW5mby0+QWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPSBwUnRIdC0+RXh0Q2hhbk9mZnNldCA7CisJCXBBZGRIdEluZm8tPkFkZEh0SW5mby5SZWNvbVdpZHRoID0gcFJ0SHQtPlJlY29tV2lkdGg7CisJCXBBZGRIdEluZm8tPkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlID0gcFJ0SHQtPk9wZXJhaW9uTW9kZTsKKwkJcEFkZEh0SW5mby0+QWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSBwUnRIdC0+Tm9uR2ZQcmVzZW50OworCQlSVE1QTW92ZU1lbW9yeShwQWRkSHRJbmZvLT5NQ1NTZXQsIC8qcFJ0SHQtPk1DU1NldCovcE1jc1NldCwgNCk7IC8vIHJ0Mjg2MCBvbmx5IHN1cHBvcnQgTUNTIG1heD0zMiwgbm8gbmVlZCB0byBjb3B5IGFsbCAxNiB1Y2hhci4KKworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBVcGRhdGVIVElFIDw9PSBcbiIpKTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQWRkIENsaWVudCBzZWN1cml0eSBpbmZvcm1hdGlvbiBpbnRvIEFTSUMgV0NJRCB0YWJsZSBhbmQgSVZFSVYgdGFibGUuCisgICAgUmV0dXJuOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJzc0lkeCwKKwlJTiAJVUNIQVIJCSAJS2V5SWR4LAorCUlOIAlVQ0hBUgkJIAlDaXBoZXJBbGcsCisJSU4gCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5KQoreworCVVJTlQzMgkJV0NJREF0dHJpID0gMDsKKwlVU0hPUlQJCW9mZnNldDsKKwlVQ0hBUgkJSVZFSVYgPSAwOworCVVTSE9SVAkJV2NpZCA9IDA7CisKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWlmIChCc3NJZHggPiBCU1MwKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnk6IFRoZSBCU1MtaW5kZXgoJWQpIGlzIG91dCBvZiByYW5nZSBmb3IgSW5mcmEgbGluay4gXG4iLCBCc3NJZHgpKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIDEuCUluIEFESE9DIG1vZGUsIHRoZSBBSUQgaXMgd2NpZCBudW1iZXIuIEFuZCBOTyBtZXNoIGxpbmsgZXhpc3RzLgorCQkJLy8gMi4JSW4gSW5mcmEgbW9kZSwgdGhlIEFJRDoxIE1VU1QgYmUgd2NpZCBvZiBpbmZyYSBTVEEuCisJCQkvLwkJCQkJICAgdGhlIEFJRDoyfiBhc3NpZ24gdG8gbWVzaCBsaW5rIGVudHJ5LgorCQkJaWYgKHBFbnRyeSAmJiBBREhPQ19PTihwQWQpKQorCQkJCVdjaWQgPSBwRW50cnktPkFpZDsKKwkJCWVsc2UgaWYgKHBFbnRyeSAmJiBJTkZSQV9PTihwQWQpKQorCQkJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJCWlmIChwRW50cnktPlZhbGlkQXNEbHMgPT0gVFJVRSkKKwkJCQkJV2NpZCA9IHBFbnRyeS0+QWlkOworCQkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCQlXY2lkID0gQlNTSURfV0NJRDsKKwkJCX0KKwkJCWVsc2UKKwkJCQlXY2lkID0gTUNBU1RfV0NJRDsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCS8vIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZQorCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdjaWQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChwRW50cnkgJiYgcEVudHJ5LT5WYWxpZEFzTWVzaCkKKwkJCVdDSURBdHRyaSA9IChDaXBoZXJBbGc8PDEpIHwgUEFJUldJU0VLRVlUQUJMRTsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJZWxzZSBpZiAoKHBFbnRyeSkgJiYgKHBFbnRyeS0+VmFsaWRBc0RscykgJiYKKwkJCQkJKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApIHx8CisJCQkJIAkoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwKKwkJCQkJKENpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSB8fAorCQkJCSAJKENpcGhlckFsZyA9PSBDSVBIRVJfTk9ORSkpKQorCQkJV0NJREF0dHJpID0gKENpcGhlckFsZzw8MSkgfCBQQUlSV0lTRUtFWVRBQkxFOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQllbHNlCisJCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKSB8IFNIQVJFREtFWVRBQkxFOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgV0NJREF0dHJpKTsKKworCisJLy8gVXBkYXRlIElWL0VJViB0YWJsZQorCW9mZnNldCA9IE1BQ19JVkVJVl9UQUJMRV9CQVNFICsgKFdjaWQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKworCS8vIFdQQSBtb2RlCisJaWYgKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApIHx8IChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKSB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpKQorCXsKKwkJLy8gRWl2IGJpdCBvbi4ga2V5aWQgYWx3YXlzIGlzIDAgZm9yIHBhaXJ3aXNlIGtleQorCQlJVkVJViA9IChLZXlJZHggPDw2KSB8IDB4MjA7CisJfQorCWVsc2UKKwl7CisJCS8vIFdFUCBLZXlJZHggaXMgZGVmYXVsdCB0eCBrZXkuCisJCUlWRUlWID0gKEtleUlkeCA8PCA2KTsKKwl9CisKKwkvLyBGb3Iga2V5IGluZGV4IGFuZCBleHQgSVYgYml0LCBzbyBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbihvZmZzZXQrMykuCisjaWZkZWYgUlQyODcwCisJUlRVU0JNdWx0aVdyaXRlX09uZUJ5dGUocEFkLCBvZmZzZXQrMywgJklWRUlWKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeTogV0NJRCAjJWQsIEtleUluZGV4ICMlZCwgQWxnPSVzXG4iLFdjaWQsIEtleUlkeCwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIJV0NJREF0dHJpID0gMHgleCBcbiIsICBXQ0lEQXR0cmkpKTsKKworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFBhcnNlIGVuY3J5cHRpb24gdHlwZQorQXJndW1lbnRzOgorICAgIHBBZGFwdGVyICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitDSEFSICpHZXRFbmNyeXB0VHlwZShDSEFSIGVuYykKK3sKKyAgICBpZihlbmMgPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorICAgICAgICByZXR1cm4gIk5PTkUiOworICAgIGlmKGVuYyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkKKyAgICAJcmV0dXJuICJXRVAiOworICAgIGlmKGVuYyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgIAlyZXR1cm4gIlRLSVAiOworICAgIGlmKGVuYyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorICAgIAlyZXR1cm4gIkFFUyI7CisJaWYoZW5jID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQpCisgICAgCXJldHVybiAiVEtJUEFFUyI7CisgICAgZWxzZQorICAgIAlyZXR1cm4gIlVOS05PVyI7Cit9CisKK0NIQVIgKkdldEF1dGhNb2RlKENIQVIgYXV0aCkKK3sKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisgICAgCXJldHVybiAiT1BFTiI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpCisgICAgCXJldHVybiAiU0hBUkVEIjsKKwlpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpCisgICAgCXJldHVybiAiQVVUT1dFUCI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgCXJldHVybiAiV1BBIjsKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykKKyAgICAJcmV0dXJuICJXUEFQU0siOworICAgIGlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICAJcmV0dXJuICJXUEFOT05FIjsKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCisgICAgCXJldHVybiAiV1BBMiI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorICAgIAlyZXR1cm4gIldQQTJQU0siOworCWlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTIpCisgICAgCXJldHVybiAiV1BBMVdQQTIiOworCWlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0spCisgICAgCXJldHVybiAiV1BBMVBTS1dQQTJQU0siOworCisgICAgCXJldHVybiAiVU5LTk9XIjsKK30KKworI2lmIDEgLy8jaWZuZGVmIFVDT1MKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IHNpdGUgc3VydmV5IHJlc3VsdHMKKwlBcmd1bWVudHM6CisJICAgIHBBZGFwdGVyICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJICAgIHdycSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpb2N0bCBhcmd1bWVudAorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICBOb3RlOgorICAgICAgICBVc2FnZToKKyAgICAgICAgCQkxLikgVUkgbmVlZHMgdG8gd2FpdCA0IHNlY29uZHMgYWZ0ZXIgaXNzdWUgYSBzaXRlIHN1cnZleSBjb21tYW5kCisgICAgICAgIAkJMi4pIGl3cHJpdiByYTAgZ2V0X3NpdGVfc3VydmV5CisgICAgICAgIAkJMy4pIFVJIG5lZWRzIHRvIHByZXBhcmUgYXQgbGVhc3QgNDA5NmJ5dGVzIHRvIGdldCB0aGUgcmVzdWx0cworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZQlMSU5FX0xFTgkoNCszMysyMCs4KzEwKzkrNyszKQkvLyBDaGFubmVsK1NTSUQrQnNzaWQrV2VwU3RhdHVzK0F1dGhNb2RlK1NpZ25hbCtXaXJlc3NNb2RlK05ldHdvcmtUeXBlCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCitWT0lEIFJUTVBJb2N0bEdldFNpdGVTdXJ2ZXkoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwlDSEFSCQkqbXNnOworCUlOVCAJCWk9MDsKKwlJTlQJCQlXYWl0Q250OworCUlOVCAJCVN0YXR1cz0wOworCUNIQVIJCVNzaWRbTUFYX0xFTl9PRl9TU0lEICsxXTsKKyAgICBJTlQgICAgICAgICBSc3NpID0gMCwgbWF4X2xlbiA9IExJTkVfTEVOOworCVVJTlQgICAgICAgIFJzc2lfUXVhbGl0eSA9IDA7CisJTkRJU184MDJfMTFfTkVUV09SS19UWVBFICAgIHdpcmVsZXNzX21vZGU7CisKKwlvc19hbGxvY19tZW0oTlVMTCwgKFBVQ0hBUiAqKSZtc2csIHNpemVvZihDSEFSKSooKE1BWF9MRU5fT0ZfQlNTX1RBQkxFKSptYXhfbGVuKSk7CisKKwlpZiAobXNnID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QSW9jdGxHZXRTaXRlU3VydmV5IC0gbXNnIG1lbW9yeSBhbGxvYyBmYWlsLlxuIikpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KG1zZywgMCAsKE1BWF9MRU5fT0ZfQlNTX1RBQkxFKSptYXhfbGVuICk7CisJbWVtc2V0KFNzaWQsIDAgLChNQVhfTEVOX09GX1NTSUQgKzEpKTsKKwlzcHJpbnRmKG1zZywiJXMiLCJcbiIpOworCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTRzJS0zM3MlLTIwcyUtOHMlLTEwcyUtOXMlLTdzJS0zc1xuIiwKKwkgICAgIkNoIiwgIlNTSUQiLCAiQlNTSUQiLCAiRW5jIiwgIkF1dGgiLCAiU2lnYW5sKCUpIiwgIlctTW9kZSIsICIgTlQiKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJV2FpdENudCA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gVFJVRTsKKwl3aGlsZSAoKFNjYW5SdW5uaW5nKHBBZGFwdGVyKSA9PSBUUlVFKSAmJiAoV2FpdENudCsrIDwgMjAwKSkKKwkJT1NfV0FJVCg1MDApOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJZm9yKGk9MDsgaTxwQWRhcHRlci0+U2NhblRhYi5Cc3NOciA7aSsrKQorCXsKKwkJaWYoIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNoYW5uZWw9PTApCisJCQlicmVhazsKKworCQlpZigoc3RybGVuKG1zZykrbWF4X2xlbiApID49IElXX1NDQU5fTUFYX0RBVEEpCisJCQlicmVhazsKKworCQkvL0NoYW5uZWwKKwkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtNGQiLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsKTsKKwkJLy9TU0lECisJCW1lbWNweShTc2lkLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuKTsKKwkJU3NpZFtwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuXSA9ICdcMCc7CisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTMzcyIsIFNzaWQpOworCQkvL0JTU0lECisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAgICIsCisJCQlwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZFswXSwKKwkJCXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkWzFdLAorCQkJcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWRbMl0sCisJCQlwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZFszXSwKKwkJCXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkWzRdLAorCQkJcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWRbNV0pOworCQkvL0VuY3J5cHRpb24gVHlwZQorCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS04cyIsR2V0RW5jcnlwdFR5cGUocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV2VwU3RhdHVzKSk7CisJCS8vQXV0aGVudGljYXRpb24gTW9kZQorCQlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBzIiwgIlVOS05PVyIpOworCQllbHNlCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0xMHMiLEdldEF1dGhNb2RlKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkF1dGhNb2RlKSk7CisJCS8vIFJzc2kKKwkJUnNzaSA9IChJTlQpcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNzaTsKKwkJaWYgKFJzc2kgPj0gLTUwKQorCQkJUnNzaV9RdWFsaXR5ID0gMTAwOworCQllbHNlIGlmIChSc3NpID49IC04MCkgICAgLy8gYmV0d2VlbiAtNTAgfiAtODBkYm0KKwkJCVJzc2lfUXVhbGl0eSA9IChVSU5UKSgyNCArICgoUnNzaSArIDgwKSAqIDI2KS8xMCk7CisJCWVsc2UgaWYgKFJzc2kgPj0gLTkwKSAgIC8vIGJldHdlZW4gLTgwIH4gLTkwZGJtCisJCQlSc3NpX1F1YWxpdHkgPSAoVUlOVCkoKChSc3NpICsgOTApICogMjYpLzEwKTsKKwkJZWxzZSAgICAvLyA8IC04NCBkYm0KKwkJCVJzc2lfUXVhbGl0eSA9IDA7CisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTlkIiwgUnNzaV9RdWFsaXR5KTsKKwkJLy8gV2lyZWxlc3MgTW9kZQorCQl3aXJlbGVzc19tb2RlID0gTmV0d29ya1R5cGVJblVzZVNhbml0eSgmcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0pOworCQlpZiAod2lyZWxlc3NfbW9kZSA9PSBOZGlzODAyXzExRkggfHwKKwkJCXdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMURTKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAiMTFiIik7CisJCWVsc2UgaWYgKHdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMU9GRE01KQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAiMTFhIik7CisJCWVsc2UgaWYgKHdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMU9GRE01X04pCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS03cyIsICIxMWEvbiIpOworCQllbHNlIGlmICh3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFPRkRNMjQpCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS03cyIsICIxMWIvZyIpOworCQllbHNlIGlmICh3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFPRkRNMjRfTikKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTdzIiwgIjExYi9nL24iKTsKKwkJZWxzZQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAidW5rbm93Iik7CisJCS8vTmV0d29yayBUeXBlCisJCWlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTNzIiwgIiBBZCIpOworCQllbHNlCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0zcyIsICIgSW4iKTsKKworICAgICAgICBzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiXG4iKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgbXNnLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUElvY3RsR2V0U2l0ZVN1cnZleSAtIHdycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKwlvc19mcmVlX21lbShOVUxMLCAoUFVDSEFSKW1zZyk7Cit9CisKKworI2RlZmluZQlNQUNfTElORV9MRU4JKDE0KzQrNCsxMCsxMCsxMCs2KzYpCS8vIEFkZHIrYWlkK3BzbStkYXRhdGltZStyeGJ5dGUrdHhieXRlK2N1cnJlbnQgdHggcmF0ZStsYXN0IHR4IHJhdGUKK1ZPSUQgUlRNUElvY3RsR2V0TWFjVGFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gc3RydWN0IGl3cmVxICp3cnEpCit7CisJSU5UIGk7CisJUlRfODAyXzExX01BQ19UQUJMRSBNYWNUYWI7CisJY2hhciAqbXNnOworCisJTWFjVGFiLk51bSA9IDA7CisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgJiYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uU3N0ID09IFNTVF9BU1NPQykpCisJCXsKKwkJCUNPUFlfTUFDX0FERFIoTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkFkZHIsICZwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIpOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkFpZCA9IChVQ0hBUilwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFpZDsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5Qc20gPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlBzTW9kZTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5NaW1vUHMgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLk1tcHNNb2RlOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBGaWxsIGluIFJTU0kgcGVyIGVudHJ5CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQXZnUnNzaTAgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlJzc2lTYW1wbGUuQXZnUnNzaTA7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQXZnUnNzaTEgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlJzc2lTYW1wbGUuQXZnUnNzaTE7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQXZnUnNzaTIgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlJzc2lTYW1wbGUuQXZnUnNzaTI7CisKKwkJCS8vIHRoZSBjb25uZWN0ZWQgdGltZSBwZXIgZW50cnkKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5Db25uZWN0ZWRUaW1lID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5TdGFDb25uZWN0VGltZTsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuTUNTID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLlR4UmF0ZS5maWVsZC5CVyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLkJXOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLlR4UmF0ZS5maWVsZC5TaG9ydEdJID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSTsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuU1RCQyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLlNUQkM7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLmZpZWxkLnJzdiA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLnJzdjsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuTU9ERSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLk1PREU7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLndvcmQgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhUUGh5TW9kZS53b3JkOworCisJCQlNYWNUYWIuTnVtICs9IDE7CisJCX0KKwl9CisJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUXzgwMl8xMV9NQUNfVEFCTEUpOworCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJk1hY1RhYiwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOiBjb3B5X3RvX3VzZXIoKSBmYWlsXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwl9CisKKwltc2cgPSAoQ0hBUiAqKSBrbWFsbG9jKHNpemVvZihDSEFSKSooTUFYX0xFTl9PRl9NQUNfVEFCTEUqTUFDX0xJTkVfTEVOKSwgTUVNX0FMTE9DX0ZMQUcpOworCW1lbXNldChtc2csIDAgLE1BWF9MRU5fT0ZfTUFDX1RBQkxFKk1BQ19MSU5FX0xFTiApOworCXNwcmludGYobXNnLCIlcyIsIlxuIik7CisJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTRzJS00cyUtNHMlLTEwcyUtMTBzJS0xMHMlLTZzJS02c1xuIiwKKwkJIk1BQyIsICJBSUQiLCAiUFNNIiwgIkxEVCIsICJSeEIiLCAiVHhCIiwiQ1R4UiIsICJMVHhSIik7CisKKwlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCXsKKwkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKKwkJaWYgKHBFbnRyeS0+VmFsaWRBc0NMSSAmJiAocEVudHJ5LT5Tc3QgPT0gU1NUX0FTU09DKSkKKwkJeworCQkJaWYoKHN0cmxlbihtc2cpK01BQ19MSU5FX0xFTiApID49IChNQVhfTEVOX09GX01BQ19UQUJMRSpNQUNfTElORV9MRU4pICkKKwkJCQlicmVhazsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggICIsCisJCQkJcEVudHJ5LT5BZGRyWzBdLCBwRW50cnktPkFkZHJbMV0sIHBFbnRyeS0+QWRkclsyXSwKKwkJCQlwRW50cnktPkFkZHJbM10sIHBFbnRyeS0+QWRkcls0XSwgcEVudHJ5LT5BZGRyWzVdKTsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTRkIiwgKGludClwRW50cnktPkFpZCk7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS00ZCIsIChpbnQpcEVudHJ5LT5Qc01vZGUpOworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBkIiwwLypwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhTQ291bnRlci5MYXN0RGF0YVBhY2tldFRpbWUqLyk7IC8vIFRvRG8KKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTEwZCIsMC8qcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IU0NvdW50ZXIuVG90YWxSeEJ5dGVDb3VudCovKTsgLy8gVG9EbworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBkIiwwLypwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhTQ291bnRlci5Ub3RhbFR4Qnl0ZUNvdW50Ki8pOyAvLyBUb0RvCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS02ZCIsUmF0ZUlkVG9NYnBzW3BBZC0+TWFjVGFiLkNvbnRlbnRbaV0uQ3VyclR4UmF0ZV0pOworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtNmRcbiIsMC8qUmF0ZUlkVG9NYnBzW3BBZC0+TWFjVGFiLkNvbnRlbnRbaV0uTGFzdFR4UmF0ZV0qLyk7IC8vIFRvRG8KKwkJfQorCX0KKwkvLyBmb3IgY29tcGF0aWJsZSB3aXRoIG9sZCBBUEkganVzdCBkbyB0aGUgcHJpbnRrIHRvIGNvbnNvbGUKKwkvL3dycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOworCS8vaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyIsIG1zZykpOworCX0KKworCWtmcmVlKG1zZyk7Cit9CisjZW5kaWYgLy8gVUNPUyAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQJU2V0X0JBU2V0dXBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUNIQVIgbWFjWzZdLCB0aWQ7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKy8qCisJVGhlIEJBU2V0dXAgaW51cHQgc3RyaW5nIGZvcm1hdCBzaG91bGQgYmUgeHg6eHg6eHg6eHg6eHg6eHgtZCwKKwkJPT5UaGUgc2l4IDIgZGlnaXQgaGV4LWRlY2ltYWwgbnVtYmVyIHByZXZpb3VzIGFyZSB0aGUgTWFjIGFkZHJlc3MsCisJCT0+VGhlIHNldmVudGggZGVjaW1hbCBudW1iZXIgaXMgdGhlIHRpZCB2YWx1ZS4KKyovCisJLy9wcmludGsoIlxuJXNcbiIsIGFyZyk7CisKKwlpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aWQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCXRpZCA9IHNpbXBsZV9zdHJ0b2woKHRva2VuKzEpLCAwLCAxMCk7CisJCWlmICh0aWQgPiAxNSkKKwkJCXJldHVybiBGQUxTRTsKKworCQkqdG9rZW4gPSAnXDAnOworCQlmb3IgKGkgPSAwLCB0b2tlbiA9IHJzdHJ0b2soYXJnLCAmc2VwVmFsdWVbMF0pOyB0b2tlbjsgdG9rZW4gPSByc3RydG9rKE5VTEwsICZzZXBWYWx1ZVswXSksIGkrKykKKwkJeworCQkJaWYoKHN0cmxlbih0b2tlbikgIT0gMikgfHwgKCFpc3hkaWdpdCgqdG9rZW4pKSB8fCAoIWlzeGRpZ2l0KCoodG9rZW4rMSkpKSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQlBdG9IKHRva2VuLCAoUFVDSEFSKSgmbWFjW2ldKSwgMSk7CisJCX0KKwkJaWYoaSAhPSA2KQorCQkJcmV0dXJuIEZBTFNFOworCisJCXByaW50aygiXG4lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC0lMDJ4XG4iLCBtYWNbMF0sIG1hY1sxXSwKKwkJCQltYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIHRpZCk7CisKKwkgICAgcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBtYWMpOworCisgICAgCWlmIChwRW50cnkpIHsKKyAgICAgICAgCXByaW50aygiXG5TZXR1cCBCQSBTZXNzaW9uOiBUaWQgPSAlZFxuIiwgdGlkKTsKKwkgICAgICAgIEJBT3JpU2Vzc2lvblNldFVwKHBBZCwgcEVudHJ5LCB0aWQsIDAsIDEwMCwgVFJVRSk7CisgICAgCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisKK30KKworSU5UCVNldF9CQURlY2xpbmVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgYkJBRGVjbGluZTsKKworCWJCQURlY2xpbmUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKGJCQURlY2xpbmUgPT0gMCkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUgPSBGQUxTRTsKKwl9CisJZWxzZSBpZiAoYkJBRGVjbGluZSA9PSAxKQorCXsKKwkJcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSA9IFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0JBRGVjbGluZV9Qcm9jOjooQkFEZWNsaW5lPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfQkFPcmlUZWFyRG93bl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUiBtYWNbNl0sIHRpZDsKKwljaGFyICp0b2tlbiwgc2VwVmFsdWVbXSA9ICI6IiwgREFTSCA9ICctJzsKKwlJTlQgaTsKKyAgICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworICAgIC8vcHJpbnRrKCJcbiVzXG4iLCBhcmcpOworLyoKKwlUaGUgQkFPcmlUZWFyRG93biBpbnVwdCBzdHJpbmcgZm9ybWF0IHNob3VsZCBiZSB4eDp4eDp4eDp4eDp4eDp4eC1kLAorCQk9PlRoZSBzaXggMiBkaWdpdCBoZXgtZGVjaW1hbCBudW1iZXIgcHJldmlvdXMgYXJlIHRoZSBNYWMgYWRkcmVzcywKKwkJPT5UaGUgc2V2ZW50aCBkZWNpbWFsIG51bWJlciBpcyB0aGUgdGlkIHZhbHVlLgorKi8KKyAgICBpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aWQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCXRpZCA9IHNpbXBsZV9zdHJ0b2woKHRva2VuKzEpLCAwLCAxMCk7CisJCWlmICh0aWQgPiBOVU1fT0ZfVElEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkgICAgcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSUwMngiLCBtYWNbMF0sIG1hY1sxXSwKKwkgICAgICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwgdGlkKTsKKworCSAgICBwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIG1hYyk7CisKKwkgICAgaWYgKHBFbnRyeSkgeworCSAgICAgICAgcHJpbnRrKCJcblRlYXIgZG93biBPcmkgQkEgU2Vzc2lvbjogVGlkID0gJWRcbiIsIHRpZCk7CisgICAgICAgIEJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgcEVudHJ5LT5BaWQsIHRpZCwgRkFMU0UsIFRSVUUpOworCSAgICB9CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworCit9CisKK0lOVAlTZXRfQkFSZWNUZWFyRG93bl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUiBtYWNbNl0sIHRpZDsKKwljaGFyICp0b2tlbiwgc2VwVmFsdWVbXSA9ICI6IiwgREFTSCA9ICctJzsKKwlJTlQgaTsKKyAgICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworICAgIC8vcHJpbnRrKCJcbiVzXG4iLCBhcmcpOworLyoKKwlUaGUgQkFSZWNUZWFyRG93biBpbnVwdCBzdHJpbmcgZm9ybWF0IHNob3VsZCBiZSB4eDp4eDp4eDp4eDp4eDp4eC1kLAorCQk9PlRoZSBzaXggMiBkaWdpdCBoZXgtZGVjaW1hbCBudW1iZXIgcHJldmlvdXMgYXJlIHRoZSBNYWMgYWRkcmVzcywKKwkJPT5UaGUgc2V2ZW50aCBkZWNpbWFsIG51bWJlciBpcyB0aGUgdGlkIHZhbHVlLgorKi8KKyAgICBpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aWQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCXRpZCA9IHNpbXBsZV9zdHJ0b2woKHRva2VuKzEpLCAwLCAxMCk7CisJCWlmICh0aWQgPiBOVU1fT0ZfVElEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSUwMngiLCBtYWNbMF0sIG1hY1sxXSwKKwkJICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwgdGlkKTsKKworCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIG1hYyk7CisKKwkJaWYgKHBFbnRyeSkgeworCQkgICAgcHJpbnRrKCJcblRlYXIgZG93biBSZWMgQkEgU2Vzc2lvbjogVGlkID0gJWRcbiIsIHRpZCk7CisJCSAgICBCQVJlY1Nlc3Npb25UZWFyRG93bihwQWQsIHBFbnRyeS0+QWlkLCB0aWQsIEZBTFNFKTsKKwkJfQorCisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKKworfQorCitJTlQJU2V0X0h0QndfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgSHRCdzsKKworCUh0QncgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChIdEJ3ID09IEJXXzQwKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgID0gQldfNDA7CisJZWxzZSBpZiAoSHRCdyA9PSBCV18yMCkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0QndfUHJvYzo6KEh0Qnc9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0TWNzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIEh0TWNzLCBNY3NfdG1wOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIEJPT0xFQU4gYkF1dG9SYXRlID0gRkFMU0U7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlNY3NfdG1wID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChNY3NfdG1wIDw9IDE1IHx8IE1jc190bXAgPT0gMzIpCisJCUh0TWNzID0gTWNzX3RtcDsKKwllbHNlCisJCUh0TWNzID0gTUNTX0FVVE87CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBIdE1jczsKKwkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSAoSHRNY3MgPT0gTUNTX0FVVE8pID8gVFJVRTpGQUxTRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0TWNzX1Byb2M6OihIdE1jcz0lZCwgYkF1dG9UeFJhdGVTd2l0Y2ggPSAlZClcbiIsCisJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUywgcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2gpKTsKKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPCBQSFlfMTFBQkdOX01JWEVEKSB8fAorCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPCBNT0RFX0hUTUlYKSkKKwkJeworCSAgICAgICAgaWYgKChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyAhPSBNQ1NfQVVUTykgJiYKKwkJCQkoSHRNY3MgPj0gMCAmJiBIdE1jcyA8PSAzKSAmJgorCSAgICAgICAgICAgIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlID09IEZJWEVEX1RYTU9ERV9DQ0spKQorCQkJeworCQkJCVJUTVBTZXREZXNpcmVkUmF0ZXMocEFkLCAoTE9ORykgKFJhdGVJZFRvTWJwc1tIdE1jc10gKiAxMDAwMDAwKSk7CisJCQl9CisJICAgICAgICBlbHNlIGlmICgocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pICYmCisJCQkJCShIdE1jcyA+PSAwICYmIEh0TWNzIDw9IDcpICYmCisJICAgICAgICAgICAgCShwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlID09IEZJWEVEX1RYTU9ERV9PRkRNKSkKKwkJCXsKKwkJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgKExPTkcpIChSYXRlSWRUb01icHNbSHRNY3MrNF0gKiAxMDAwMDAwKSk7CisJCQl9CisJCQllbHNlCisJCQkJYkF1dG9SYXRlID0gVFJVRTsKKworCQkJaWYgKGJBdXRvUmF0ZSkKKwkJCXsKKwkgICAgICAgICAgICBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworCQkJCVJUTVBTZXREZXNpcmVkUmF0ZXMocEFkLCAtMSk7CisJCQl9CisJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRNY3NfUHJvYzo6KEZpeGVkVHhNb2RlPSVkKVxuIixwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlKSk7CisJCX0KKyAgICAgICAgaWYgKEFESE9DX09OKHBBZCkpCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlTZXRDb21tb25IVChwQWQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRHaV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBIdEdpOworCisJSHRHaSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoIEh0R2kgPT0gR0lfNDAwKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSA9IEdJXzQwMDsKKwllbHNlIGlmICggSHRHaSA9PSBHSV84MDAgKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0R2lfUHJvYzo6KFNob3J0R0k9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitJTlQJU2V0X0h0VHhCQVNpemVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgU2l6ZTsKKworCVNpemUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFNpemUgPD0wIHx8IFNpemUgPj02NCkKKwl7CisJCVNpemUgPSA4OworCX0KKwlwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZSA9IFNpemUtMTsKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfSHRUeEJBU2l6ZSA6OihUeEJBU2l6ZT0gJWQpXG4iLCBTaXplKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitJTlQJU2V0X0h0T3BNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPT0gSFRNT0RFX0dGKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFICA9IEhUTU9ERV9HRjsKKwllbHNlIGlmICggVmFsdWUgPT0gSFRNT0RFX01NICkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSAgPSBIVE1PREVfTU07CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE9wTW9kZV9Qcm9jOjooSHRPcE1vZGU9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREUpKTsKKworCXJldHVybiBUUlVFOworCit9CisKK0lOVAlTZXRfSHRTdGJjX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPT0gU1RCQ19VU0UpCisJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDID0gU1RCQ19VU0U7CisJZWxzZSBpZiAoIFZhbHVlID09IFNUQkNfTk9ORSApCisJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfU3RiY19Qcm9jOjooSHRTdGJjPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQykpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRIdGNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5IVENFbmFibGUgPSBGQUxTRTsKKwllbHNlIGlmICggVmFsdWUgPT0xICkKKyAgICAgICAgCXBBZC0+SFRDRW5hYmxlID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRIdGNfUHJvYzo6KEh0SHRjPSVkKVxuIixwQWQtPkhUQ0VuYWJsZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBICA9IEVYVENIQV9CRUxPVzsKKwllbHNlIGlmICggVmFsdWUgPT0xICkKKyAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9BQk9WRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0RXh0Y2hhX1Byb2M6OihIdEV4dGNoYT0lZClcbiIscEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRNcGR1RGVuc2l0eV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA8PTcgJiYgVmFsdWUgPj0gMCkKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gVmFsdWU7CisJZWxzZQorCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSA0OworCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE1wZHVEZW5zaXR5X1Byb2M6OihIdE1wZHVEZW5zaXR5PSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisKKwlpZiAoVmFsdWUgPj0xICYmIFZhbHVlIDw9IDY0KQorCXsKKwkJcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IFZhbHVlOworCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gVmFsdWU7CisJfQorCWVsc2UKKwl7CisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OworCX0KKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRCYVdpblNpemVfUHJvYzo6KEh0QmFXaW5TaXplPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iUmRnID0gRkFMU0U7CisJZWxzZSBpZiAoIFZhbHVlID09MSApCisJeworCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisgICAgICAgIAlwQWQtPkNvbW1vbkNmZy5iUmRnID0gVFJVRTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdFJkZ19Qcm9jOjooSHRSZGc9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLmJSZGcpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0TGlua0FkYXB0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPmJMaW5rQWRhcHQgPSBGQUxTRTsKKwllbHNlIGlmICggVmFsdWUgPT0xICkKKwl7CisJCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisJCQlwQWQtPmJMaW5rQWRhcHQgPSBUUlVFOworCX0KKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRMaW5rQWRhcHRfUHJvYzo6KEh0TGlua0FkYXB0PSVkKVxuIixwQWQtPmJMaW5rQWRhcHQpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0QW1zZHVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSA9IEZBTFNFOworCWVsc2UgaWYgKCBWYWx1ZSA9PSAxICkKKyAgICAgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0QW1zZHVfUHJvYzo6KEh0QW1zZHU9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRBdXRvQmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBCQV9OT1RVU0U7CisJfQorICAgICAgICBlbHNlIGlmIChWYWx1ZSA9PSAxKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBJTU1FRF9CQTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisgICAgcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkE7CisgICAgcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3k7CisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdEF1dG9CYV9Qcm9jOjooSHRBdXRvQmE9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEpKTsKKworCXJldHVybiBUUlVFOworCit9CisKK0lOVAlTZXRfSHRQcm90ZWN0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0ID0gRkFMU0U7CisgICAgZWxzZSBpZiAoVmFsdWUgPT0gMSkKKwkJcEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCA9IFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0UHJvdGVjdF9Qcm9jOjooSHRQcm90ZWN0PSVkKVxuIixwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9TZW5kUFNNUEFjdGlvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUiBtYWNbNl0sIG1vZGU7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKyAgICAvL3ByaW50aygiXG4lc1xuIiwgYXJnKTsKKy8qCisJVGhlIEJBUmVjVGVhckRvd24gaW51cHQgc3RyaW5nIGZvcm1hdCBzaG91bGQgYmUgeHg6eHg6eHg6eHg6eHg6eHgtZCwKKwkJPT5UaGUgc2l4IDIgZGlnaXQgaGV4LWRlY2ltYWwgbnVtYmVyIHByZXZpb3VzIGFyZSB0aGUgTWFjIGFkZHJlc3MsCisJCT0+VGhlIHNldmVudGggZGVjaW1hbCBudW1iZXIgaXMgdGhlIG1vZGUgdmFsdWUuCisqLworICAgIGlmKHN0cmxlbihhcmcpIDwgMTkpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNyBwbHVzIHRoZSAiLSIgYW5kIG1vZGUgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworICAgCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCW1vZGUgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCQlpZiAobW9kZSA+IE1NUFNfRU5BQkxFKQorCQkJcmV0dXJuIEZBTFNFOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSUwMngiLCBtYWNbMF0sIG1hY1sxXSwKKwkJICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwgbW9kZSk7CisKKwkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBtYWMpOworCisJCWlmIChwRW50cnkpIHsKKwkJICAgIHByaW50aygiXG5TZW5kUFNNUEFjdGlvbiBNSVBTIG1vZGUgPSAlZFxuIiwgbW9kZSk7CisJCSAgICBTZW5kUFNNUEFjdGlvbihwQWQsIHBFbnRyeS0+QWlkLCBtb2RlKTsKKwkJfQorCisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKKworCit9CisKK0lOVAlTZXRfSHRNSU1PUFNtb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFZhbHVlIDw9MyAmJiBWYWx1ZSA+PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBWYWx1ZTsKKwllbHNlCisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IDM7CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0TUlNT1BTbW9kZV9Qcm9jOjooTUlNT1BTIG1vZGU9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworSU5UCVNldF9Gb3JjZVNob3J0R0lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+V0lGSXRlc3RiZWQuYlNob3J0R0kgPSBGQUxTRTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPldJRkl0ZXN0YmVkLmJTaG9ydEdJID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0ZvcmNlU2hvcnRHSV9Qcm9jOjooRm9yY2VTaG9ydEdJPSVkKVxuIiwgcEFkLT5XSUZJdGVzdGJlZC5iU2hvcnRHSSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworCitJTlQJU2V0X0ZvcmNlR0ZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+V0lGSXRlc3RiZWQuYkdyZWVuRmllbGQgPSBGQUxTRTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0ZvcmNlR0ZfUHJvYzo6KEZvcmNlR0Y9JWQpXG4iLCBwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdE1pbW9Qc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSA9IEZBTFNFOworCWVsc2UgaWYgKFZhbHVlID09IDEpCisJCXBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE1pbW9Qc19Qcm9jOjooSHRNaW1vUHM9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0lOVAlTZXRDb21tb25IVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlPSURfU0VUX0hUX1BIWU1PREUJCVNldEhUOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPCBQSFlfMTFBQkdOX01JWEVEKQorCQlyZXR1cm4gRkFMU0U7CisKKwlTZXRIVC5QaHlNb2RlID0gcEFkLT5Db21tb25DZmcuUGh5TW9kZTsKKwlTZXRIVC5UcmFuc21pdE5vID0gKChVQ0hBUilwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoKTsKKwlTZXRIVC5IdE1vZGUgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERTsKKwlTZXRIVC5FeHRPZmZzZXQgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQTsKKwlTZXRIVC5NQ1MgPSBNQ1NfQVVUTzsKKwlTZXRIVC5CVyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlc7CisJU2V0SFQuU1RCQyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQzsKKwlTZXRIVC5TSE9SVEdJID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJOworCisJUlRNUFNldEhUKHBBZCwgJlNldEhUKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitJTlQJU2V0X0ZpeGVkVHhNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSCWZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCisJaWYgKHN0cmNtcChhcmcsICJPRkRNIikgPT0gMCB8fCBzdHJjbXAoYXJnLCAib2ZkbSIpID09IDApCisJeworCQlmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9PRkRNOworCX0KKwllbHNlIGlmIChzdHJjbXAoYXJnLCAiQ0NLIikgPT0gMCB8fCBzdHJjbXAoYXJnLCAiY2NrIikgPT0gMCkKKwl7CisgICAgICAgIGZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0NDSzsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlID0gZml4X3R4X21vZGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfRml4ZWRUeE1vZGVfUHJvYzo6KEZpeGVkVHhNb2RlPSVkKVxuIiwgZml4X3R4X21vZGUpKTsKKworCXJldHVybiBUUlVFOworfQorCisjaWZkZWYgQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQKK0lOVAlTZXRfT3BNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisjaWZkZWYgUlQyODcwCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpCisjZW5kaWYgLy8gUlQyODcwIC8vCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDYW4gbm90IHN3aXRjaCBvcGVyYXRlIG1vZGUgb24gaW50ZXJmYWNlIHVwICEhIFxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+T3BNb2RlID0gT1BNT0RFX1NUQTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPk9wTW9kZSA9IE9QTU9ERV9BUDsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfT3BNb2RlX1Byb2M6OihPcE1vZGU9JXMpXG4iLCBwQWQtPk9wTW9kZSA9PSAxID8gIkFQIE1vZGUiIDogIlNUQSBNb2RlIikpOworCisJcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitQQ0hBUiAgIFJUTVBHZXRSYWxpbmtBdXRoTW9kZVN0cigKKyAgICBJTiAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSBhdXRoTW9kZSkKK3sKKwlzd2l0Y2goYXV0aE1vZGUpCisJeworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW46CisJCQlyZXR1cm4gIk9QRU4iOworICAgICAgICBkZWZhdWx0OgorCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSzoKKwkJCXJldHVybiAiV1BBUFNLIjsKKwkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ6CisJCQlyZXR1cm4gIlNIQVJFRCI7CisJCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBOgorCQkJcmV0dXJuICJXUEEiOworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI6CisJCQlyZXR1cm4gIldQQTIiOworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s6CisJCQlyZXR1cm4gIldQQTJQU0siOworICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLOgorCQkJcmV0dXJuICJXUEFQU0tXUEEyUFNLIjsKKyAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMjoKKwkJCXJldHVybiAiV1BBMVdQQTIiOworCX0KK30KKworUENIQVIgICBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKAorICAgIElOICBVU0hPUlQgZW5jcnlNb2RlKQoreworCXN3aXRjaChlbmNyeU1vZGUpCisJeworCSAgICBkZWZhdWx0OgorCQljYXNlIE5kaXM4MDJfMTFXRVBEaXNhYmxlZDoKKwkJCXJldHVybiAiTk9ORSI7CisJCWNhc2UgTmRpczgwMl8xMVdFUEVuYWJsZWQ6CisJCQlyZXR1cm4gIldFUCI7CisJCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDoKKwkJCXJldHVybiAiVEtJUCI7CisJCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDoKKwkJCXJldHVybiAiQUVTIjsKKyAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkOgorCQkJcmV0dXJuICJUS0lQQUVTIjsKKwl9Cit9CisKK0lOVCBSVE1QU2hvd0NmZ1ZhbHVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBOYW1lLAorCUlOCVBVQ0hBUgkJCXBCdWYpCit7CisJSU5UCVN0YXR1cyA9IDA7CisKKwlmb3IgKFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MgPSBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0M7IFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MtPm5hbWU7IFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MrKykKKwl7CisJCWlmICghc3RyY21wKHBOYW1lLCBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lKSkKKwkJeworCQkJaWYoUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+c2hvd19wcm9jKHBBZCwgcEJ1ZikpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWJyZWFrOyAgLy9FeGl0IGZvciBsb29wLgorCQl9CisJfQorCisJaWYoUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+bmFtZSA9PSBOVUxMKQorCXsKKwkJc3ByaW50ZihwQnVmLCAiXG4iKTsKKwkJZm9yIChQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DID0gUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DOyBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lOyBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DKyspCisJCQlzcHJpbnRmKHBCdWYsICIlcyVzXG4iLCBwQnVmLCBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gU3RhdHVzOworfQorCitJTlQJU2hvd19TU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuU3NpZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1dpcmVsZXNzTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKQorCXsKKwkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFCL0ciKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUI6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQToKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQS9CL0ciKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUc6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExRyIpOworCQkJYnJlYWs7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQUJHTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBL0IvRy9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFOXzJfNEc6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExTiBvbmx5IHdpdGggMi40RyIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExR05fTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExRy9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBL04iKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFCL0cvTiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMUEvRy9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFOXzVHOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMU4gb25seSB3aXRoIDVHIik7CisJCQlicmVhazsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVkKSIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpOworCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisKK0lOVAlTaG93X1R4QnVyc3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgPyAiVFJVRSI6IkZBTFNFIik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1R4UHJlYW1ibGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSkKKwl7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZVNob3J0OgorCQkJc3ByaW50ZihwQnVmLCAiXHRTaG9ydCIpOworCQkJYnJlYWs7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZUxvbmc6CisJCQlzcHJpbnRmKHBCdWYsICJcdExvbmciKTsKKwkJCWJyZWFrOworCQljYXNlIFJ0ODAyXzExUHJlYW1ibGVBdXRvOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBdXRvIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVsdSkiLCBwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitJTlQJU2hvd19UeFBvd2VyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlbHUiLCBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0NoYW5uZWxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVkIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0JHUHJvdGVjdGlvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24pCisJeworCQljYXNlIDE6IC8vQWx3YXlzIE9uCisJCQlzcHJpbnRmKHBCdWYsICJcdE9OIik7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvL0Fsd2F5cyBPRkYKKwkJCXNwcmludGYocEJ1ZiwgIlx0T0ZGIik7CisJCQlicmVhazsKKwkJY2FzZSAwOiAvL0FVVE8KKwkJCXNwcmludGYocEJ1ZiwgIlx0QXV0byIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSglbHUpIiwgcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfUlRTVGhyZXNob2xkX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCV1IiwgcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQJU2hvd19IdEJ3X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCkKKwl7CisJCXNwcmludGYocEJ1ZiwgIlx0NDAgTUh6Iik7CisJfQorCWVsc2UKKwl7CisgICAgICAgIHNwcmludGYocEJ1ZiwgIlx0MjAgTUh6Iik7CisJfQorCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdE1jc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRHaV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSkKKwl7CisJCWNhc2UgR0lfNDAwOgorCQkJc3ByaW50ZihwQnVmLCAiXHRHSV80MDAiKTsKKwkJCWJyZWFrOworCQljYXNlIEdJXzgwMDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0R0lfODAwIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCV1KSIsIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRPcE1vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSkKKwl7CisJCWNhc2UgSFRNT0RFX0dGOgorCQkJc3ByaW50ZihwQnVmLCAiXHRHRiIpOworCQkJYnJlYWs7CisJCWNhc2UgSFRNT0RFX01NOgorCQkJc3ByaW50ZihwQnVmLCAiXHRNTSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSgldSkiLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSkKKwl7CisJCWNhc2UgRVhUQ0hBX0JFTE9XOgorCQkJc3ByaW50ZihwQnVmLCAiXHRCZWxvdyIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhUQ0hBX0FCT1ZFOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBYm92ZSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSgldSkiLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworCitJTlQJU2hvd19IdE1wZHVEZW5zaXR5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5iUmRnID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdEFtc2R1X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRBdXRvQmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworSU5UCVNob3dfQ291bnRyeVJlZ2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JWQiLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKTsKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlZCIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0NvdW50cnlDb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKK0lOVAlTaG93X1BrdEFnZ3JlZ2F0ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorI2VuZGlmIC8vIEFHR1JFR0FUSU9OX1NVUFBPUlQgLy8KKworI2lmZGVmIFdNTV9TVVBQT1JUCitJTlQJU2hvd19XbW1DYXBhYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPyAiVFJVRSI6IkZBTFNFIik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBXTU1fU1VQUE9SVCAvLworCitJTlQJU2hvd19JRUVFODAyMTFIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitJTlQJU2hvd19OZXR3b3JrVHlwZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPlN0YUNmZy5Cc3NUeXBlKQorCXsKKwkJY2FzZSBCU1NfQURIT0M6CisJCQlzcHJpbnRmKHBCdWYsICJcdEFkaG9jIik7CisJCQlicmVhazsKKwkJY2FzZSBCU1NfSU5GUkE6CisJCQlzcHJpbnRmKHBCdWYsICJcdEluZnJhIik7CisJCQlicmVhazsKKwkJY2FzZSBCU1NfQU5ZOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBbnkiKTsKKwkJCWJyZWFrOworCQljYXNlIEJTU19NT05JVE9SOgorCQkJc3ByaW50ZihwQnVmLCAiXHRNb25pdG9yIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVkKSIsIHBBZC0+U3RhQ2ZnLkJzc1R5cGUpOworCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitJTlQJU2hvd19BdXRoTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJQXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmICgoQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikgJiYKKwkJKEF1dGhNb2RlIDw9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLKSkKKwkJc3ByaW50ZihwQnVmLCAiXHQlcyIsIFJUTVBHZXRSYWxpbmtBdXRoTW9kZVN0cihBdXRoTW9kZSkpOworCWVsc2UKKwkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJWQpIiwgQXV0aE1vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0VuY3J5cFR5cGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTCVdlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCVdlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmICgoV2VwU3RhdHVzID49IE5kaXM4MDJfMTFXRVBFbmFibGVkKSAmJgorCQkoV2VwU3RhdHVzIDw9IE5kaXM4MDJfMTFFbmNyeXB0aW9uNEtleUFic2VudCkpCisJCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKFdlcFN0YXR1cykpOworCWVsc2UKKwkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJWQpIiwgV2VwU3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitJTlQJU2hvd19EZWZhdWx0S2V5SURfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlVQ0hBUiBEZWZhdWx0S2V5SWQgPSAwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJRGVmYXVsdEtleUlkID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJc3ByaW50ZihwQnVmLCAiXHQlZCIsIERlZmF1bHRLZXlJZCk7CisKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfV2VwS2V5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIElOVAkJCQlLZXlJZHgsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJVUNIQVIgICBLZXlbMTZdID0gezB9LCBLZXlMZW5ndGggPSAwOworCUlOVAkJaW5kZXggPSBCU1MwOworCisJS2V5TGVuZ3RoID0gcEFkLT5TaGFyZWRLZXlbaW5kZXhdW0tleUlkeF0uS2V5TGVuOworCU5kaXNNb3ZlTWVtb3J5KEtleSwgcEFkLT5TaGFyZWRLZXlbaW5kZXhdW0tleUlkeF0uS2V5LCBLZXlMZW5ndGgpOworCisJLy9jaGVjayBrZXkgc3RyaW5nIGlzIEFTQ0lJIG9yIG5vdAorICAgIGlmIChSVE1QQ2hlY2tTdHJQcmludEFibGUoS2V5LCBLZXlMZW5ndGgpKQorICAgICAgICBzcHJpbnRmKHBCdWYsICJcdCVzIiwgS2V5KTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgaWR4OworICAgICAgICBzcHJpbnRmKHBCdWYsICJcdCIpOworICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEtleUxlbmd0aDsgaWR4KyspCisgICAgICAgICAgICBzcHJpbnRmKHBCdWYrc3RybGVuKHBCdWYpLCAiJTAyWCIsIEtleVtpZHhdKTsKKyAgICB9CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMCwgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMSwgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMiwgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMywgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1dQQVBTS19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCUlOVCAJaWR4OworCVVDSEFSCVBNS1szMl0gPSB7MH07CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCU5kaXNNb3ZlTWVtb3J5KFBNSywgcEFkLT5TdGFDZmcuUE1LLCAzMik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyAgICBzcHJpbnRmKHBCdWYsICJcdFBNSyA9ICIpOworICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgMzI7IGlkeCsrKQorICAgICAgICBzcHJpbnRmKHBCdWYrc3RybGVuKHBCdWYpLCAiJTAyWCIsIFBNS1tpZHhdKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc2FuaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc2FuaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExOGRmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9zYW5pdHkuYwpAQCAtMCwwICsxLDE2NjkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc2FuaXR5LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nICAyMDA0LTA5LTAxICAgICAgYWRkIFdNTSBzdXBwb3J0CisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisKK2V4dGVybiBVQ0hBUglDSVNDT19PVUlbXTsKKworZXh0ZXJuIFVDSEFSCVdQQV9PVUlbXTsKK2V4dGVybiBVQ0hBUglSU05fT1VJW107CitleHRlcm4gVUNIQVIJV01FX0lORk9fRUxFTVtdOworZXh0ZXJuIFVDSEFSCVdNRV9QQVJNX0VMRU1bXTsKK2V4dGVybiBVQ0hBUglDY3gyUW9zSW5mb1tdOworZXh0ZXJuIFVDSEFSCVJBTElOS19PVUlbXTsKK2V4dGVybiBVQ0hBUglCUk9BRENPTV9PVUlbXTsKK2V4dGVybiBVQ0hBUiAgICBXUFNfT1VJW107CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVBZGRCQVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyKQoreworICAgIFBNTE1FX0FEREJBX1JFUV9TVFJVQ1QgICBwSW5mbzsKKworICAgIHBJbmZvID0gKE1MTUVfQUREQkFfUkVRX1NUUlVDVCAqKU1zZzsKKworICAgIGlmICgoTXNnTGVuICE9IHNpemVvZihNTE1FX0FEREJBX1JFUV9TVFJVQ1QpKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVBZGRCQVJlcVNhbml0eSBmYWlsIC0gbWVzc2FnZSBsZW5naHQgbm90IGNvcnJlY3QuXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoKHBJbmZvLT5XY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVBZGRCQVJlcVNhbml0eSBmYWlsIC0gVGhlIHBlZXIgTWFjIGlzIG5vdCBhc3NvY2lhdGVkIHlldC5cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCS8qCisgICAgaWYgKChwSW5mby0+QmFCdWZTaXplID4gTUFYX1JYX1JFT1JERVJCVUYpIHx8IChwSW5mby0+QmFCdWZTaXplIDwgMikpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIFJ4IFJlb3JkZXJpbmcgYnVmZmVyIHRvbyBiaWcgb3IgdG9vIHNtYWxsXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisJKi8KKworICAgIGlmICgocEluZm8tPnBBZGRyWzBdJjB4MDEpID09IDB4MDEpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIGJyb2FkY2FzdCBhZGRyZXNzIG5vdCBzdXBwb3J0IEJBXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZURlbEJBUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pCit7CisJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICpwSW5mbzsKKwlwSW5mbyA9IChNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgKilNc2c7CisKKyAgICBpZiAoKE1zZ0xlbiAhPSBzaXplb2YoTUxNRV9ERUxCQV9SRVFfU1RSVUNUKSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIG1lc3NhZ2UgbGVuZ2h0IG5vdCBjb3JyZWN0LlxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChwSW5mby0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIFRoZSBwZWVyIE1hYyBpcyBub3QgYXNzb2NpYXRlZCB5ZXQuXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoKHBJbmZvLT5USUQgJiAweGYwKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1sbWVEZWxCQVJlcVNhbml0eSBmYWlsIC0gVGhlIHBlZXIgVElEIGlzIGluY29ycmVjdC5cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCWlmIChOZGlzRXF1YWxNZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQWRkciwgcEluZm8tPkFkZHIsIE1BQ19BRERSX0xFTikgPT0gMCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1sbWVEZWxCQVJlcVNhbml0eSBmYWlsIC0gdGhlIHBlZXIgYWRkciBkb3Nlbid0IGV4aXN0LlxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0JPT0xFQU4gUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyKQoreworCVBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQRlJBTUVfQUREQkFfUkVRIHBBZGRGcmFtZTsKKwlwQWRkRnJhbWUgPSAoUEZSQU1FX0FEREJBX1JFUSkocE1zZyk7CisJaWYgKE1zZ0xlbiA8IChzaXplb2YoRlJBTUVfQUREQkFfUkVRKSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVxdWVzdCBmcmFtZSBsZW5ndGggc2l6ZSA9ICVsZCBpbmNvcnJlY3RcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8vIHdlIHN1cHBvcnQgaW1tZWRpYXRlIEJBLgorCSooVVNIT1JUICopKCZwQWRkRnJhbWUtPkJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEFkZEZyYW1lLT5CYVBhcm0pKTsKKwlwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+VGltZU91dFZhbHVlKTsKKwlwQWRkRnJhbWUtPkJhU3RhcnRTZXEud29yZCA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+QmFTdGFydFNlcS53b3JkKTsKKworCWlmIChwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSAhPSBJTU1FRF9CQSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXF1ZXN0IEJhIFBvbGljeVslZF0gbm90IHN1cHBvcnRcbiIsIHBBZGRGcmFtZS0+QmFQYXJtLkJBUG9saWN5KSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQUREQkEgUmVxdWVzdC4gdGlkPSV4LCBCdWZzaXplPSV4LCBBTVNEVVN1cHBvcnRlZD0leCBcbiIsIHBBZGRGcmFtZS0+QmFQYXJtLlRJRCwgcEFkZEZyYW1lLT5CYVBhcm0uQnVmU2l6ZSwgcEFkZEZyYW1lLT5CYVBhcm0uQU1TRFVTdXBwb3J0ZWQpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIHdlIHN1cHBvcnQgaW1tZWRpYXRlIEJBLgorCWlmIChwQWRkRnJhbWUtPkJhUGFybS5USUQgJjB4ZmZmMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXF1ZXN0IGluY29ycmVjdCBUSUQgPSAlZFxuIiwgcEFkZEZyYW1lLT5CYVBhcm0uVElEKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKKwlyZXR1cm4gVFJVRTsKK30KKworQk9PTEVBTiBQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pCit7CisJLy9QRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKXBNc2c7CisJUEZSQU1FX0FEREJBX1JTUCBwQWRkRnJhbWU7CisKKwlwQWRkRnJhbWUgPSAoUEZSQU1FX0FEREJBX1JTUCkocE1zZyk7CisJaWYgKE1zZ0xlbiA8IChzaXplb2YoRlJBTUVfQUREQkFfUlNQKSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJzcEFjdGlvblNhbml0eTogQUREQkEgUmVzcG9uc2UgZnJhbWUgbGVuZ3RoIHNpemUgPSAlbGQgaW5jb3JyZWN0XG4iLCBNc2dMZW4pKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkvLyB3ZSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4KKwkqKFVTSE9SVCAqKSgmcEFkZEZyYW1lLT5CYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBBZGRGcmFtZS0+QmFQYXJtKSk7CisJcEFkZEZyYW1lLT5TdGF0dXNDb2RlID0gY3B1MmxlMTYocEFkZEZyYW1lLT5TdGF0dXNDb2RlKTsKKwlwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+VGltZU91dFZhbHVlKTsKKworCWlmIChwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSAhPSBJTU1FRF9CQSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXNwb25zZSBCYSBQb2xpY3lbJWRdIG5vdCBzdXBwb3J0XG4iLCBwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy8gd2Ugc3VwcG9ydCBpbW1lZGlhdGUgQkEuCisJaWYgKHBBZGRGcmFtZS0+QmFQYXJtLlRJRCAmMHhmZmYwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHk6IEFEREJBIFJlc3BvbnNlIGluY29ycmVjdCBUSUQgPSAlZFxuIiwgcEFkZEZyYW1lLT5CYVBhcm0uVElEKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJcmV0dXJuIFRSVUU7CisKK30KKworQk9PTEVBTiBQZWVyRGVsQkFBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVUNIQVIgV2NpZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiApCit7CisJLy9QRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKXBNc2c7CisJUEZSQU1FX0RFTEJBX1JFUSAgcERlbEZyYW1lOworCWlmIChNc2dMZW4gIT0gKHNpemVvZihGUkFNRV9ERUxCQV9SRVEpKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKFdjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybiBGQUxTRTsKKworCXBEZWxGcmFtZSA9IChQRlJBTUVfREVMQkFfUkVRKShwTXNnKTsKKworCSooVVNIT1JUICopKCZwRGVsRnJhbWUtPkRlbGJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcERlbEZyYW1lLT5EZWxiYVBhcm0pKTsKKwlwRGVsRnJhbWUtPlJlYXNvbkNvZGUgPSBjcHUybGUxNihwRGVsRnJhbWUtPlJlYXNvbkNvZGUpOworCisJaWYgKHBEZWxGcmFtZS0+RGVsYmFQYXJtLlRJRCAmMHhmZmYwKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgSU4gVUNIQVIgIE1zZ0NoYW5uZWwsCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFBVQ0hBUiBwQnNzaWQsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqcFNzaWRMZW4sCisgICAgT1VUIFVDSEFSICpwQnNzVHlwZSwKKyAgICBPVVQgVVNIT1JUICpwQmVhY29uUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqcENoYW5uZWwsCisgICAgT1VUIFVDSEFSICpwTmV3Q2hhbm5lbCwKKyAgICBPVVQgTEFSR0VfSU5URUdFUiAqcFRpbWVzdGFtcCwKKyAgICBPVVQgQ0ZfUEFSTSAqcENmUGFybSwKKyAgICBPVVQgVVNIT1JUICpwQXRpbVdpbiwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVDSEFSICpwRXJwLAorICAgIE9VVCBVQ0hBUiAqcER0aW1Db3VudCwKKyAgICBPVVQgVUNIQVIgKnBEdGltUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqcEJjYXN0RmxhZywKKyAgICBPVVQgVUNIQVIgKnBNZXNzYWdlVG9NZSwKKyAgICBPVVQgVUNIQVIgU3VwUmF0ZVtdLAorICAgIE9VVCBVQ0hBUiAqcFN1cFJhdGVMZW4sCisgICAgT1VUIFVDSEFSIEV4dFJhdGVbXSwKKyAgICBPVVQgVUNIQVIgKnBFeHRSYXRlTGVuLAorICAgIE9VVAlVQ0hBUiAqcENraXBGbGFnLAorICAgIE9VVAlVQ0hBUiAqcEFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKyAgICBPVVQgUEVEQ0FfUEFSTSAgICAgICBwRWRjYVBhcm0sCisgICAgT1VUIFBRQlNTX0xPQURfUEFSTSAgcFFic3NMb2FkLAorICAgIE9VVCBQUU9TX0NBUEFCSUxJVFlfUEFSTSBwUW9zQ2FwYWJpbGl0eSwKKyAgICBPVVQgVUxPTkcgKnBSYWxpbmtJZSwKKyAgICBPVVQgVUNIQVIJCSAqcEh0Q2FwYWJpbGl0eUxlbiwKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICBPVVQgVUNIQVIJCSAqcFByZU5IdENhcGFiaWxpdHlMZW4sCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJT1VUIFVDSEFSCQkgKkFkZEh0SW5mb0xlbiwKKwlPVVQgQUREX0hUX0lORk9fSUUgKkFkZEh0SW5mbywKKwlPVVQgVUNIQVIgKk5ld0V4dENoYW5uZWxPZmZzZXQsCQkvLyBIdCBleHRlbnNpb24gY2hhbm5lbCBvZmZzZXQoYWJvdmUgb3IgYmVsb3cpCisgICAgT1VUIFVTSE9SVCAqTGVuZ3RoVklFLAorICAgIE9VVAlQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpCit7CisgICAgQ0hBUgkJCQkqUHRyOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUNIQVIgCQkJCVRpbUxlbjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICBQRlJBTUVfODAyXzExCQlwRnJhbWU7CisgICAgUEVJRF9TVFJVQ1QgICAgICAgICBwRWlkOworICAgIFVDSEFSCQkJCVN1YlR5cGU7CisgICAgVUNIQVIJCQkJU2FuaXR5OworICAgIC8vVUNIQVIJCQkJRUNXTWluLCBFQ1dNYXg7CisgICAgLy9NQUNfQ1NSOV9TVFJVQwkJQ3NyOTsKKyAgICBVTE9ORwkJCQlMZW5ndGggPSAwOworCisJLy8gRm9yIHNvbWUgMTFhIEFQIHdoaWNoIGRpZG4ndCBoYXZlIERTX0lFLCB3ZSB1c2UgdHdvIGNvbmRpdGlvbnMgdG8gZGVjaWRlIHRoZSBjaGFubmVsCisJLy8JMS4gSWYgdGhlIEFQIGlzIDExbiBlbmFibGVkLCB0aGVuIGNoZWNrIHRoZSBjb250cm9sIGNoYW5uZWwuCisJLy8JMi4gSWYgdGhlIEFQIGRpZG4ndCBoYXZlIGFueSBpbmZvIGFib3V0IGNoYW5uZWwsIHVzZSB0aGUgY2hhbm5lbCB3ZSByZWNlaXZlZCB0aGlzIGZyYW1lIGFzIHRoZSBjaGFubmVsLiAoTWF5IGluYWNjdXJhY3khISkKKwlVQ0hBUgkJCUN0cmxDaGFubmVsID0gMDsKKworICAgIC8vIEFkZCBmb3IgMyBuZWNlc3NhcnkgRUlEIGZpZWxkIGNoZWNrCisgICAgU2FuaXR5ID0gMDsKKworICAgICpwQXRpbVdpbiA9IDA7CisgICAgKnBFcnAgPSAwOworICAgICpwRHRpbUNvdW50ID0gMDsKKyAgICAqcER0aW1QZXJpb2QgPSAwOworICAgICpwQmNhc3RGbGFnID0gMDsKKyAgICAqcE1lc3NhZ2VUb01lID0gMDsKKyAgICAqcEV4dFJhdGVMZW4gPSAwOworICAgICpwQ2tpcEZsYWcgPSAwOwkJCSAgICAgICAgLy8gRGVmYXVsdCBvZiBDa2lwRmxhZyBpcyAwCisgICAgKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPSAweEZGOyAgLy8gRGVmYXVsdCBvZiBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgaXMgMHhGRgorICAgICpMZW5ndGhWSUUgPSAwOwkJCQkJLy8gU2V0IHRoZSBsZW5ndGggb2YgVklFIHRvIGluaXQgdmFsdWUgMAorICAgICpwSHRDYXBhYmlsaXR5TGVuID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwkJKnBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAqQWRkSHRJbmZvTGVuID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyAgICAqcFJhbGlua0llID0gMDsKKyAgICAqcE5ld0NoYW5uZWwgPSAwOworICAgICpOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsJLy9EZWZhdWx0IDB4ZmYgbWVhbnMgbm8gc3VjaCBJRQorICAgIHBDZlBhcm0tPmJWYWxpZCA9IEZBTFNFOyAgICAgICAgLy8gZGVmYXVsdDogbm8gSUVfQ0YgZm91bmQKKyAgICBwUWJzc0xvYWQtPmJWYWxpZCA9IEZBTFNFOyAgICAgIC8vIGRlZmF1bHQ6IG5vIElFX1FCU1NfTE9BRCBmb3VuZAorICAgIHBFZGNhUGFybS0+YlZhbGlkID0gRkFMU0U7ICAgICAgLy8gZGVmYXVsdDogbm8gSUVfRURDQV9QQVJBTUVURVIgZm91bmQKKyAgICBwUW9zQ2FwYWJpbGl0eS0+YlZhbGlkID0gRkFMU0U7IC8vIGRlZmF1bHQ6IG5vIElFX1FPU19DQVBBQklMSVRZIGZvdW5kCisKKyAgICBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICAvLyBnZXQgc3VidHlwZSBmcm9tIGhlYWRlcgorICAgIFN1YlR5cGUgPSAoVUNIQVIpcEZyYW1lLT5IZHIuRkMuU3ViVHlwZTsKKworICAgIC8vIGdldCBBZGRyMiBhbmQgQlNTSUQgZnJvbSBoZWFkZXIKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOworICAgIENPUFlfTUFDX0FERFIocEJzc2lkLCBwRnJhbWUtPkhkci5BZGRyMyk7CisKKy8vCWhleF9kdW1wKCJCZWFjb24iLCBNc2csIE1zZ0xlbik7CisKKyAgICBQdHIgPSBwRnJhbWUtPk9jdGV0OworICAgIExlbmd0aCArPSBMRU5HVEhfODAyXzExOworCisgICAgLy8gZ2V0IHRpbWVzdGFtcCBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwVGltZXN0YW1wLCBQdHIsIFRJTUVTVEFNUF9MRU4pOworCisJcFRpbWVzdGFtcC0+dS5Mb3dQYXJ0ID0gY3B1MmxlMzIocFRpbWVzdGFtcC0+dS5Mb3dQYXJ0KTsKKwlwVGltZXN0YW1wLT51LkhpZ2hQYXJ0ID0gY3B1MmxlMzIocFRpbWVzdGFtcC0+dS5IaWdoUGFydCk7CisKKyAgICBQdHIgKz0gVElNRVNUQU1QX0xFTjsKKyAgICBMZW5ndGggKz0gVElNRVNUQU1QX0xFTjsKKworICAgIC8vIGdldCBiZWFjb24gaW50ZXJ2YWwgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocEJlYWNvblBlcmlvZCwgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKyAgICBMZW5ndGggKz0gMjsKKworICAgIC8vIGdldCBjYXBhYmlsaXR5IGluZm8gZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCBQdHIsIDIpOworICAgIFB0ciArPSAyOworICAgIExlbmd0aCArPSAyOworCisgICAgaWYgKENBUF9JU19FU1NfT04oKnBDYXBhYmlsaXR5SW5mbykpCisgICAgICAgICpwQnNzVHlwZSA9IEJTU19JTkZSQTsKKyAgICBlbHNlCisgICAgICAgICpwQnNzVHlwZSA9IEJTU19BREhPQzsKKworICAgIHBFaWQgPSAoUEVJRF9TVFJVQ1QpIFB0cjsKKworICAgIC8vIGdldCB2YXJpYWJsZSBmaWVsZHMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgd2hpbGUgKChMZW5ndGggKyAyICsgcEVpZC0+TGVuKSA8PSBNc2dMZW4pCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTZWN1cmUgY29weSBWSUUgdG8gVmFySUVbTUFYX1ZJRV9MRU5dIGRpZG4ndCBvdmVyZmxvdy4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCgqTGVuZ3RoVklFICsgcEVpZC0+TGVuICsgMikgPj0gTUFYX1ZJRV9MRU4pCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gVmFyaWFibGUgSUVzIG91dCBvZiByZXNvdXJjZSBbbGVuKD0lZCkgPiBNQVhfVklFX0xFTig9JWQpXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKCpMZW5ndGhWSUUgKyBwRWlkLT5MZW4gKyAyKSwgTUFYX1ZJRV9MRU4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHBFaWQtPkVpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBJRV9TU0lEOgorICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFzIG9uZSBTU0lEIEVJRCBpbiB0aGlzIGJlYWNvbiwgaWdub3JlIHRoZSBzZWNvbmQgb25lCisgICAgICAgICAgICAgICAgaWYgKFNhbml0eSAmIDB4MSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1NJRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFNzaWQsIHBFaWQtPk9jdGV0LCBwRWlkLT5MZW4pOworICAgICAgICAgICAgICAgICAgICAqcFNzaWRMZW4gPSBwRWlkLT5MZW47CisgICAgICAgICAgICAgICAgICAgIFNhbml0eSB8PSAweDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX1NTSUQgKGxlbj0lZClcbiIscEVpZC0+TGVuKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZihwRWlkLT5MZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTYW5pdHkgfD0gMHgyOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgKnBTdXBSYXRlTGVuID0gcEVpZC0+TGVuOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IDIwMDQtMDktMTQgbm90IGEgZ29vZCBkZXNpZ24gaGVyZSwgY2F1c2UgaXQgZXhjbHVkZSBleHRyYSByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIFNjYW5UYWIuIFdlIHNob3VsZCByZXBvcnQgYXMgaXMuIEFuZCBmaWx0ZXIgb3V0IHVuc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGVzIGluIE1sbWVBdXguCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHN1cHBvcnRlZCByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBSVE1QQ2hlY2tSYXRlcyhwQWQsIFN1cFJhdGUsIHBTdXBSYXRlTGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU1VQUF9SQVRFUyAobGVuPSVkKVxuIixwRWlkLT5MZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9IVF9DQVA6CisJCQlpZiAocEVpZC0+TGVuID49IFNJWkVfSFRfQ0FQX0lFKSAgLy9Ob3RlOiBhbGxvdyBleHRlbnNpb24uISEKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCBwRWlkLT5PY3RldCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOwkvLyBObm93IHdlIG9ubHkgc3VwcG9ydCAyNiBieXRlcy4KKworCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykpOworCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQl7CisJCQkJCSpwUHJlTkh0Q2FwYWJpbGl0eUxlbiA9IDA7CS8vIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLgorCisJCQkJCVB0ciA9IChQVUNIQVIpIHBWSUU7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KFB0ciArICpMZW5ndGhWSUUsICZwRWlkLT5FaWQsIHBFaWQtPkxlbiArIDIpOworCQkJCQkqTGVuZ3RoVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuIHBFaWQtPkxlbiA9ICVkXG4iLCBwRWlkLT5MZW4pKTsKKwkJCX0KKworCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSUVfQUREX0hUOgorCQkJaWYgKHBFaWQtPkxlbiA+PSBzaXplb2YoQUREX0hUX0lORk9fSUUpKQorCQkJeworCQkJCS8vIFRoaXMgSUUgYWxsb3dzIGV4dGVuc2lvbiwgYnV0IHdlIGNhbiBpZ25vcmUgZXh0cmEgYnl0ZXMgYmV5b25kIG91ciBrbm93bGVkZ2UgLCBzbyBvbmx5CisJCQkJLy8gY29weSBmaXJzdCBzaXplb2YoQUREX0hUX0lORk9fSUUpCisJCQkJTmRpc01vdmVNZW1vcnkoQWRkSHRJbmZvLCBwRWlkLT5PY3RldCwgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisJCQkJKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CisKKwkJCQlDdHJsQ2hhbm5lbCA9IEFkZEh0SW5mby0+Q29udHJvbENoYW47CisKKwkJCQkqKFVTSE9SVCAqKSgmQWRkSHRJbmZvLT5BZGRIdEluZm8yKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZBZGRIdEluZm8tPkFkZEh0SW5mbzIpKTsKKwkJCQkqKFVTSE9SVCAqKSgmQWRkSHRJbmZvLT5BZGRIdEluZm8zKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZBZGRIdEluZm8tPkFkZEh0SW5mbzMpKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJICAgICAgICAgICAgICAgIFB0ciA9IChQVUNIQVIpIHBWSUU7CisJCQkgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwgJnBFaWQtPkVpZCwgcEVpZC0+TGVuICsgMik7CisJCQkgICAgICAgICAgICAgICAgKkxlbmd0aFZJRSArPSAocEVpZC0+TGVuICsgMik7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfQUREX0hULiBcbiIpKTsKKwkJCX0KKworCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSUVfU0VDT05EQVJZX0NIX09GRlNFVDoKKwkJCWlmIChwRWlkLT5MZW4gPT0gMSkKKwkJCXsKKwkJCQkqTmV3RXh0Q2hhbm5lbE9mZnNldCA9IHBFaWQtPk9jdGV0WzBdOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU0VDT05EQVJZX0NIX09GRlNFVC4gXG4iKSk7CisJCQl9CisKKwkJYnJlYWs7CisgICAgICAgICAgICBjYXNlIElFX0ZIX1BBUk06CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KElFX0ZIX1BBUk0pIFxuIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0RTX1BBUk06CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcENoYW5uZWwgPSAqcEVpZC0+T2N0ZXQ7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCXsKKwkJCQkJCWlmIChDaGFubmVsU2FuaXR5KHBBZCwgKnBDaGFubmVsKSA9PSAwKQorCQkJCQkJeworCisJCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgICAgIFNhbml0eSB8PSAweDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0RTX1BBUk0gKGxlbj0lZClcbiIscEVpZC0+TGVuKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfQ0ZfUEFSTToKKyAgICAgICAgICAgICAgICBpZihwRWlkLT5MZW4gPT0gNikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPmJWYWxpZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPkNmcENvdW50ID0gcEVpZC0+T2N0ZXRbMF07CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPkNmcFBlcmlvZCA9IHBFaWQtPk9jdGV0WzFdOworICAgICAgICAgICAgICAgICAgICBwQ2ZQYXJtLT5DZnBNYXhEdXJhdGlvbiA9IHBFaWQtPk9jdGV0WzJdICsgMjU2ICogcEVpZC0+T2N0ZXRbM107CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPkNmcER1clJlbWFpbmluZyA9IHBFaWQtPk9jdGV0WzRdICsgMjU2ICogcEVpZC0+T2N0ZXRbNV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0NGX1BBUk1cbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9JQlNTX1BBUk06CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuID09IDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQXRpbVdpbiwgcEVpZC0+T2N0ZXQsIHBFaWQtPkxlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0lCU1NfUEFSTVxuIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgICAgICAgICBjYXNlIElFX1RJTToKKyAgICAgICAgICAgICAgICBpZihJTkZSQV9PTihwQWQpICYmIFN1YlR5cGUgPT0gU1VCVFlQRV9CRUFDT04pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHZXRUaW1CaXQoKFBVQ0hBUilwRWlkLCBwQWQtPlN0YUFjdGl2ZS5BaWQsICZUaW1MZW4sIHBCY2FzdEZsYWcsIHBEdGltQ291bnQsIHBEdGltUGVyaW9kLCBwTWVzc2FnZVRvTWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIGNhc2UgSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UOgorICAgICAgICAgICAgICAgIGlmKHBFaWQtPkxlbiA9PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJKnBOZXdDaGFubmVsID0gcEVpZC0+T2N0ZXRbMV07CS8vZXh0cmFjdCBuZXcgY2hhbm5lbCBudW1iZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIE5ldyBmb3IgV1BBCisgICAgICAgICAgICAvLyBDQ1ggdjIgaGFzIHRoZSBzYW1lIElFLCB3ZSBuZWVkIHRvIHBhcnNlIHRoYXQgdG9vCisgICAgICAgICAgICAvLyBXaWZpIFdNTSB1c2UgdGhlIHNhbWUgSUUgdmFsZSwgbmVlZCB0byBwYXJzZSB0aGF0IHRvbworICAgICAgICAgICAgLy8gY2FzZSBJRV9XUEE6CisgICAgICAgICAgICBjYXNlIElFX1ZFTkRPUl9TUEVDSUZJQzoKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBCcm9hZGNvbS9BdGhlcm9zIDgwMi4xMW4gT1VJIHZlcnNpb24sIGZvciBIVCBDYXBhYmlsaXR5IElFLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgSFQgSUUgaXMgYmVmb3JlIElFRUUgZHJhZnQgc2V0IEhUIElFIHZhbHVlLjIwMDYtMDktMjggYnkgSmFuLgorICAgICAgICAgICAgICAgIC8qaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgQlJPQURDT01fT1VJLCAzKSAmJiAocEVpZC0+TGVuID49IDQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJaWYgKChwRWlkLT5PY3RldFszXSA9PSBPVUlfQlJPQURDT01fSFQpICYmIChwRWlkLT5MZW4gPj0gMzApKQorICAgICAgICAgICAgCQl7CisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCAmcEVpZC0+T2N0ZXRbNF0sIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisJCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7CS8vIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLgorCQkJCX0KKyAgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIAlpZiAoKHBFaWQtPk9jdGV0WzNdID09IE9VSV9CUk9BRENPTV9IVCkgJiYgKHBFaWQtPkxlbiA+PSAyNikpCisgICAgICAgICAgICAJCXsKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KEFkZEh0SW5mbywgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKwkJCQkJKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CS8vIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLgorCQkJCX0KKyAgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIH0KKwkJCQkqLworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBPVUkgdmVyc2lvbiwgZmlsdGVyIG91dCBub24tc3RhbmRhcmQgdXNhZ2UKKyAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBSQUxJTktfT1VJLCAzKSAmJiAocEVpZC0+TGVuID09IDcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8qcFJhbGlua0llID0gcEVpZC0+T2N0ZXRbM107CisgICAgICAgICAgICAgICAgICAgIGlmIChwRWlkLT5PY3RldFszXSAhPSAwKQorICAgICAgICAJCQkJKnBSYWxpbmtJZSA9IHBFaWQtPk9jdGV0WzNdOworICAgICAgICAJCQllbHNlCisgICAgICAgIAkJCQkqcFJhbGlua0llID0gMHhmMDAwMDAwMDsgLy8gU2V0IHRvIG5vbi16ZXJvIHZhbHVlIChjYW4ndCBzZXQgYml0MC0yKSB0byByZXByZXNlbnQgdGhpcyBpcyBSYWxpbmsgQ2hpcC4gU28gYXQgbGlua3VwLCB3ZSB3aWxsIHNldCByYWxpbmtjaGlwIGZsYWcuCisgICAgICAgICAgICAgICAgfQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkvLyBUaGlzIEhUIElFIGlzIGJlZm9yZSBJRUVFIGRyYWZ0IHNldCBIVCBJRSB2YWx1ZS4yMDA2LTA5LTI4IGJ5IEphbi4KKworICAgICAgICAgICAgICAgIC8vIE90aGVyIHZlbmRvcnMgaGFkIHByb2R1Y3Rpb24gYmVmb3JlIElFX0hUX0NBUCB2YWx1ZSBpcyBhc3NpZ25lZC4gVG8gYmFja3dhcmQgc3VwcG9ydCB0aG9zZSBvbGQtZmlybXdhcmUgQVAsCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYnJvYWRjb20tZGVmaWVuZCBwcmUtODAyLjExbkQxLjAgT1VJIGZvciBIVCByZWxhdGVkIElFLCBpbmNsdWRpbmcgSFQgQ2FwYXRpbGl0aWVzIElFIGFuZCBIVCBJbmZvcm1hdGlvbiBJRQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgqcEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJiBOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFBSRV9OX0hUX09VSSwgMykgJiYgKHBFaWQtPkxlbiA+PSA0KSAmJiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHBFaWQtPk9jdGV0WzNdID09IE9VSV9QUkVOX0hUX0NBUCkgJiYgKHBFaWQtPkxlbiA+PSAzMCkgJiYgKCpwSHRDYXBhYmlsaXR5TGVuID09IDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCAmcEVpZC0+T2N0ZXRbNF0sIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqcFByZU5IdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICgocEVpZC0+T2N0ZXRbM10gPT0gT1VJX1BSRU5fQUREX0hUKSAmJiAocEVpZC0+TGVuID49IDI2KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoQWRkSHRJbmZvLCAmcEVpZC0+T2N0ZXRbNF0sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworICAgICAgICAgICAgICAgICAgICAgICAgKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXUEFfT1VJLCA0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgdG8gcFZJRSB3aGljaCB3aWxsIHJlcG9ydCB0byBtaWNyb3NvZnQgYnNzaWQgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgUHRyID0gKFBVQ0hBUikgcFZJRTsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwgJnBFaWQtPkVpZCwgcEVpZC0+TGVuICsgMik7CisgICAgICAgICAgICAgICAgICAgICpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdNRV9QQVJNX0VMRU0sIDYpICYmIChwRWlkLT5MZW4gPT0gMjQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUFVDSEFSIHB0cjsKKyAgICAgICAgICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2luZyBFRENBIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iVmFsaWQgICAgICAgICAgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJRQWNrICAgICAgICAgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4MTA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlF1ZXVlUmVxdWVzdCAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHgyMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iVHhvcFJlcXVlc3QgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDQwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCA9IHBFaWQtPk9jdGV0WzZdICYgMHgwZjsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQVBTRENhcGFibGUgICAgPSAocEVpZC0+T2N0ZXRbNl0gJiAweDgwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcEVpZC0+T2N0ZXRbOF07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVIgYWNpID0gKCpwdHIgJiAweDYwKSA+PiA1OyAvLyBiNX42IGlzIEFDIElOREVYCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bYWNpXSAgPSAoKCgqcHRyKSAmIDB4MTApID09IDB4MTApOyAgIC8vIGI1IGlzIEFDTQorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzblthY2ldID0gKCpwdHIpICYgMHgwZjsgICAgICAgICAgICAgICAvLyBiMH4zIGlzIEFJRlNOCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW2FjaV0gPSAqKHB0cisxKSAmIDB4MGY7ICAgICAgICAgICAgIC8vIGIwfjQgaXMgQ3dtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbYWNpXSA9ICoocHRyKzEpID4+IDQ7ICAgICAgICAgICAgICAgLy8gYjV+OCBpcyBDd21heAorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW2FjaV0gID0gKihwdHIrMikgKyAyNTYgKiAoKihwdHIrMykpOyAvLyBpbiB1bml0IG9mIDMyLXVzCisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKz0gNDsgLy8gcG9pbnQgdG8gbmV4dCBBQworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV01FX0lORk9fRUxFTSwgNikgJiYgKHBFaWQtPkxlbiA9PSA3KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNpbmcgRURDQSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlZhbGlkICAgICAgICAgID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iUUFjayAgICAgICAgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDEwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJRdWV1ZVJlcXVlc3QgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4MjA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlR4b3BSZXF1ZXN0ICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHg0MDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5FZGNhVXBkYXRlQ291bnQgPSBwRWlkLT5PY3RldFs2XSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFQU0RDYXBhYmxlICAgID0gKHBFaWQtPk9jdGV0WzZdICYgMHg4MCkgPyAxIDogMDsKKworICAgICAgICAgICAgICAgICAgICAvLyB1c2UgZGVmYXVsdCBFRENBIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bUUlEX0FDX0JFXSAgPSAwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV0gPSAzOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CRV0gPSBDV19NSU5fSU5fQklUUzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdID0gQ1dfTUFYX0lOX0JJVFM7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdICA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19CS10gID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQktdID0gNzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQktdID0gQ1dfTUlOX0lOX0JJVFM7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JLXSA9IENXX01BWF9JTl9CSVRTOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JLXSAgPSAwOworCisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFDTVtRSURfQUNfVkldICA9IDA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9IDI7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZJXSA9IENXX01JTl9JTl9CSVRTLTE7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZJXSA9IENXX01BWF9JTl9CSVRTOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXSAgPSA5NjsgICAvLyBBQ19WSTogOTYqMzJ1cyB+PSAzbXMKKworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bUUlEX0FDX1ZPXSAgPSAwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WT10gPSAyOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WT10gPSBDV19NSU5fSU5fQklUUy0yOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WT10gPSBDV19NQVhfSU5fQklUUy0xOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZPXSAgPSA0ODsgICAvLyBBQ19WTzogNDgqMzJ1cyB+PSAxLjVtcworICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0VYVF9TVVBQX1JBVEVTOgorICAgICAgICAgICAgICAgIGlmIChwRWlkLT5MZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShFeHRSYXRlLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgKnBFeHRSYXRlTGVuID0gcEVpZC0+TGVuOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IDIwMDQtMDktMTQgbm90IGEgZ29vZCBkZXNpZ24gaGVyZSwgY2F1c2UgaXQgZXhjbHVkZSBleHRyYSByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIFNjYW5UYWIuIFdlIHNob3VsZCByZXBvcnQgYXMgaXMuIEFuZCBmaWx0ZXIgb3V0IHVuc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGVzIGluIE1sbWVBdXguCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHN1cHBvcnRlZCByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBSVE1QQ2hlY2tSYXRlcyhwQWQsIEV4dFJhdGUsIHBFeHRSYXRlTGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfRVJQOgorICAgICAgICAgICAgICAgIGlmIChwRWlkLT5MZW4gPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwRXJwID0gKFVDSEFSKXBFaWQtPk9jdGV0WzBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9BSVJPTkVUX0NLSVA6CisgICAgICAgICAgICAgICAgLy8gMC4gQ2hlY2sgQWlyb25ldCBJRSBsZW5ndGgsIGl0IG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRvIDI4CisgICAgICAgICAgICAgICAgLy8gQ2lzY28gQVAzNTAgdXNlZCBsZW5ndGggYXMgMjgKKyAgICAgICAgICAgICAgICAvLyBDaXNjbyBBUDEyWFggdXNlZCBsZW5ndGggYXMgMzAKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDwgKENLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gMS4gQ29weSBDS0lQIGZsYWcgYnl0ZSB0byBidWZmZXIgZm9yIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAqcENraXBGbGFnID0gKihwRWlkLT5PY3RldCArIDgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0FQX1RYX1BPV0VSOgorICAgICAgICAgICAgICAgIC8vIEFQIENvbnRyb2wgb2YgQ2xpZW50IFRyYW5zbWl0IFBvd2VyCisgICAgICAgICAgICAgICAgLy8wLiBDaGVjayBBaXJvbmV0IElFIGxlbmd0aCwgaXQgbXVzdCBiZSA2CisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiAhPSAweDA2KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIEdldCBjZWxsIHBvd2VyIGxpbWl0IGluIGRCbQorICAgICAgICAgICAgICAgIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIENJU0NPX09VSSwgMykgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPSAqKHBFaWQtPk9jdGV0ICsgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIFdQQTIgJiA4MDIuMTFpIFJTTgorICAgICAgICAgICAgY2FzZSBJRV9SU046CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gT1VJIGZvciB2ZXJzaW9uIGFueW1vcmUsIGNoZWNrIHRoZSBncm91cCBjaXBoZXIgT1VJIGJlZm9yZSBjb3B5aW5nCisgICAgICAgICAgICAgICAgaWYgKFJUTVBFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29weSB0byBwVklFIHdoaWNoIHdpbGwgcmVwb3J0IHRvIG1pY3Jvc29mdCBic3NpZCBsaXN0LgorICAgICAgICAgICAgICAgICAgICBQdHIgPSAoUFVDSEFSKSBwVklFOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShQdHIgKyAqTGVuZ3RoVklFLCAmcEVpZC0+RWlkLCBwRWlkLT5MZW4gKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgKkxlbmd0aFZJRSArPSAocEVpZC0+TGVuICsgMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCWNhc2UgSUVfQ09VTlRSWToKKwkJCQlQdHIgPSAoUFVDSEFSKSBwVklFOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFB0ciArICpMZW5ndGhWSUUsICZwRWlkLT5FaWQsIHBFaWQtPkxlbiArIDIpOworICAgICAgICAgICAgICAgICpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCWJyZWFrOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBMZW5ndGggPSBMZW5ndGggKyAyICsgcEVpZC0+TGVuOyAgLy8gRWlkWzFdICsgTGVuWzFdKyBjb250ZW50W0xlbl0KKyAgICAgICAgcEVpZCA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKilwRWlkICsgMiArIHBFaWQtPkxlbik7CisgICAgfQorCisgICAgLy8gRm9yIHNvbWUgMTFhIEFQLiBpdCBkaWQgbm90IGhhdmUgdGhlIGNoYW5uZWwgRUlELCBwYXRjaCBoZXJlCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCVVDSEFSIExhdGNoUmZDaGFubmVsID0gTXNnQ2hhbm5lbDsKKwkJaWYgKChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkgJiYgKChTYW5pdHkgJiAweDQpID09IDApKQorCQl7CisJCQlpZiAoQ3RybENoYW5uZWwgIT0gMCkKKwkJCQkqcENoYW5uZWwgPSBDdHJsQ2hhbm5lbDsKKwkJCWVsc2UKKwkJCQkqcENoYW5uZWwgPSBMYXRjaFJmQ2hhbm5lbDsKKwkJCVNhbml0eSB8PSAweDQ7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAoU2FuaXR5ICE9IDB4NykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gbWlzc2luZyBmaWVsZCwgU2FuaXR5PTB4JTAyeFxuIiwgU2FuaXR5KSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFRSVUU7CisJfQorCit9CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sgZm9yIHNvbWUgSUUgYWRkcmVzc2VkICBpbiA4MDIuMTFuIGQzLjAzLgorCVJldHVybjoKKwkJVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eTIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVk9JRCAqTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgVUNIQVIgCSpSZWdDbGFzcykKK3sKKwlDSEFSCQkJCSpQdHI7CisJUEZSQU1FXzgwMl8xMQkJcEZyYW1lOworCVBFSURfU1RSVUNUCQkJcEVpZDsKKwlVTE9ORwkJCQlMZW5ndGggPSAwOworCisJcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisJKlJlZ0NsYXNzID0gMDsKKwlQdHIgPSBwRnJhbWUtPk9jdGV0OworCUxlbmd0aCArPSBMRU5HVEhfODAyXzExOworCisJLy8gZ2V0IHRpbWVzdGFtcCBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKwlQdHIgKz0gVElNRVNUQU1QX0xFTjsKKwlMZW5ndGggKz0gVElNRVNUQU1QX0xFTjsKKworCS8vIGdldCBiZWFjb24gaW50ZXJ2YWwgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisJUHRyICs9IDI7CisJTGVuZ3RoICs9IDI7CisKKwkvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorCVB0ciArPSAyOworCUxlbmd0aCArPSAyOworCisJcEVpZCA9IChQRUlEX1NUUlVDVCkgUHRyOworCisJLy8gZ2V0IHZhcmlhYmxlIGZpZWxkcyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKwl3aGlsZSAoKExlbmd0aCArIDIgKyBwRWlkLT5MZW4pIDw9IE1zZ0xlbikKKwl7CisJCXN3aXRjaChwRWlkLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfU1VQUF9SRUdfQ0xBU1M6CisJCQkJaWYocEVpZC0+TGVuID4gMCkKKwkJCQl7CisJCQkJCSpSZWdDbGFzcyA9ICpwRWlkLT5PY3RldDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU1NJRCAobGVuPSVkKVxuIixwRWlkLT5MZW4pKTsKKwkJCQkJcmV0dXJuIEZBTFNFOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCisJCUxlbmd0aCA9IExlbmd0aCArIDIgKyBwRWlkLT5MZW47ICAvLyBFaWRbMV0gKyBMZW5bMV0rIGNvbnRlbnRbTGVuXQorCQlwRWlkID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKXBFaWQgKyAyICsgcEVpZC0+TGVuKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKKworfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNbG1lU2NhblJlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBVQ0hBUiAqcEJzc1R5cGUsCisJT1VUIENIQVIgU3NpZFtdLAorCU9VVCBVQ0hBUiAqcFNzaWRMZW4sCisJT1VUIFVDSEFSICpwU2NhblR5cGUpCit7CisJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgKkluZm87CisKKwlJbmZvID0gKE1MTUVfU0NBTl9SRVFfU1RSVUNUICopKE1zZyk7CisJKnBCc3NUeXBlID0gSW5mby0+QnNzVHlwZTsKKwkqcFNzaWRMZW4gPSBJbmZvLT5Tc2lkTGVuOworCU5kaXNNb3ZlTWVtb3J5KFNzaWQsIEluZm8tPlNzaWQsICpwU3NpZExlbik7CisJKnBTY2FuVHlwZSA9IEluZm8tPlNjYW5UeXBlOworCisJaWYgKCgqcEJzc1R5cGUgPT0gQlNTX0lORlJBIHx8ICpwQnNzVHlwZSA9PSBCU1NfQURIT0MgfHwgKnBCc3NUeXBlID09IEJTU19BTlkpCisJCSYmICgqcFNjYW5UeXBlID09IFNDQU5fQUNUSVZFIHx8ICpwU2NhblR5cGUgPT0gU0NBTl9QQVNTSVZFCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCXx8ICpwU2NhblR5cGUgPT0gU0NBTl9DSVNDT19QQVNTSVZFIHx8ICpwU2NhblR5cGUgPT0gU0NBTl9DSVNDT19BQ1RJVkUKKwkJfHwgKnBTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCB8fCAqcFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fTk9JU0UKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJKSkKKwl7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2NhblJlcVNhbml0eSBmYWlsIC0gd3JvbmcgQnNzVHlwZSBvciBTY2FuVHlwZVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1VDSEFSIENoYW5uZWxTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVUNIQVIgY2hhbm5lbCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpICsrKQorICAgIHsKKyAgICAgICAgaWYgKGNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBQZWVyRGVhdXRoU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqcFJlYXNvbikKK3sKKyAgICBQRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKU1zZzsKKworICAgIENPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7CisgICAgTmRpc01vdmVNZW1vcnkocFJlYXNvbiwgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJBdXRoU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkciwKKyAgICBPVVQgVVNIT1JUICpwQWxnLAorICAgIE9VVCBVU0hPUlQgKnBTZXEsCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBDSEFSICpwQ2hsZ1RleHQpCit7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyLCAgIHBGcmFtZS0+SGRyLkFkZHIyKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWxnLCAgICAmcEZyYW1lLT5PY3RldFswXSwgMik7CisgICAgTmRpc01vdmVNZW1vcnkocFNlcSwgICAgJnBGcmFtZS0+T2N0ZXRbMl0sIDIpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBTdGF0dXMsICZwRnJhbWUtPk9jdGV0WzRdLCAyKTsKKworICAgIGlmICgoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyAgICAgIHx8ICgqcEFsZyA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisgICAgICApCisgICAgeworICAgICAgICBpZiAoKnBTZXEgPT0gMSB8fCAqcFNlcSA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBdXRoU2FuaXR5IGZhaWwgLSB3cm9uZyBTZWcjXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQorICAgIHsKKyAgICAgICAgaWYgKCpwU2VxID09IDEgfHwgKnBTZXEgPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnBTZXEgPT0gMiB8fCAqcFNlcSA9PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ2hsZ1RleHQsICZwRnJhbWUtPk9jdGV0WzhdLCBDSVBIRVJfVEVYVF9MRU4pOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXV0aFNhbml0eSBmYWlsIC0gd3JvbmcgU2VnI1xuIikpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBdXRoU2FuaXR5IGZhaWwgLSB3cm9uZyBhbGdvcml0aG1cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNbG1lQXV0aFJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIsCisgICAgT1VUIFVMT05HICpwVGltZW91dCwKKyAgICBPVVQgVVNIT1JUICpwQWxnKQoreworICAgIE1MTUVfQVVUSF9SRVFfU1RSVUNUICpwSW5mbzsKKworICAgIHBJbmZvICA9IChNTE1FX0FVVEhfUkVRX1NUUlVDVCAqKU1zZzsKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyLCBwSW5mby0+QWRkcik7CisgICAgKnBUaW1lb3V0ID0gcEluZm8tPlRpbWVvdXQ7CisgICAgKnBBbGcgPSBwSW5mby0+QWxnOworCisgICAgaWYgKCgoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSB8fCgqcEFsZyA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICB8fCAoKnBBbGcgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworICAgICAJKSAmJgorICAgICAgICAoKCpwQWRkciAmIDB4MDEpID09IDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVBdXRoUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBhbGdvcml0aG1cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZUFzc29jUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQXBBZGRyLAorICAgIE9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKyAgICBPVVQgVUxPTkcgKnBUaW1lb3V0LAorICAgIE9VVCBVU0hPUlQgKnBMaXN0ZW5JbnR2KQoreworICAgIE1MTUVfQVNTT0NfUkVRX1NUUlVDVCAqcEluZm87CisKKyAgICBwSW5mbyA9IChNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKilNc2c7CisgICAgKnBUaW1lb3V0ID0gcEluZm8tPlRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aW1lb3V0CisgICAgQ09QWV9NQUNfQUREUihwQXBBZGRyLCBwSW5mby0+QWRkcik7ICAgICAgICAgICAgICAgICAgIC8vIEFQIGFkZHJlc3MKKyAgICAqcENhcGFiaWxpdHlJbmZvID0gcEluZm8tPkNhcGFiaWxpdHlJbmZvOyAgICAgICAgICAgICAgIC8vIGNhcGFiaWxpdHkgaW5mbworICAgICpwTGlzdGVuSW50diA9IHBJbmZvLT5MaXN0ZW5JbnR2OworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJEaXNhc3NvY1Nhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBVU0hPUlQgKnBSZWFzb24pCit7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBSZWFzb24sICZwRnJhbWUtPk9jdGV0WzBdLCAyKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNhbml0eSBjaGVjayBOZXR3b3JrVHlwZSAoMTFiLCAxMWcgb3IgMTFhKQorCisJQXJndW1lbnRzOgorCQlwQnNzIC0gUG9pbnRlciB0byBCU1MgdGFibGUuCisKKwlSZXR1cm4gVmFsdWU6CisgICAgICAgIE5kaXM4MDJfMTFEUyAuLi4uLi4uKDExYikKKyAgICAgICAgTmRpczgwMl8xMU9GRE0yNC4uLi4oMTFnKQorICAgICAgICBOZGlzODAyXzExT0ZETTUuLi4uLigxMWEpCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfODAyXzExX05FVFdPUktfVFlQRSBOZXR3b3JrVHlwZUluVXNlU2FuaXR5KAorICAgIElOIFBCU1NfRU5UUlkgcEJzcykKK3sKKwlORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUJTmV0V29ya1R5cGU7CisJVUNIQVIJCQkJCQlyYXRlLCBpOworCisJTmV0V29ya1R5cGUgPSBOZGlzODAyXzExRFM7CisKKwlpZiAocEJzcy0+Q2hhbm5lbCA8PSAxNCkKKwl7CisJCS8vCisJCS8vIEZpcnN0IGNoZWNrIHN1cHBvcnQgUmF0ZS4KKwkJLy8KKwkJZm9yIChpID0gMDsgaSA8IHBCc3MtPlN1cFJhdGVMZW47IGkrKykKKwkJeworCQkJcmF0ZSA9IHBCc3MtPlN1cFJhdGVbaV0gJiAweDdmOyAvLyBNYXNrIG91dCBiYXNpYyByYXRlIHNldCBiaXQKKwkJCWlmICgocmF0ZSA9PSAyKSB8fCAocmF0ZSA9PSA0KSB8fCAocmF0ZSA9PSAxMSkgfHwgKHJhdGUgPT0gMjIpKQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vCisJCQkJLy8gT3RoZXJ3aXNlIChldmVuIHJhdGUgPiAxMDgpIG1lYW5zIE5kaXM4MDJfMTFPRkRNMjQKKwkJCQkvLworCQkJCU5ldFdvcmtUeXBlID0gTmRpczgwMl8xMU9GRE0yNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8vCisJCS8vIFNlY29uZCBjaGVjayBFeHRlbmQgUmF0ZS4KKwkJLy8KKwkJaWYgKE5ldFdvcmtUeXBlICE9IE5kaXM4MDJfMTFPRkRNMjQpCisJCXsKKwkJCWZvciAoaSA9IDA7IGkgPCBwQnNzLT5FeHRSYXRlTGVuOyBpKyspCisJCQl7CisJCQkJcmF0ZSA9IHBCc3MtPlN1cFJhdGVbaV0gJiAweDdmOyAvLyBNYXNrIG91dCBiYXNpYyByYXRlIHNldCBiaXQKKwkJCQlpZiAoKHJhdGUgPT0gMikgfHwgKHJhdGUgPT0gNCkgfHwgKHJhdGUgPT0gMTEpIHx8IChyYXRlID09IDIyKSkKKwkJCQl7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBPdGhlcndpc2UgKGV2ZW4gcmF0ZSA+IDEwOCkgbWVhbnMgTmRpczgwMl8xMU9GRE0yNAorCQkJCQkvLworCQkJCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNMjQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNNTsKKwl9CisKKyAgICBpZiAocEJzcy0+SHRDYXBhYmlsaXR5TGVuICE9IDApCisgICAgeworICAgICAgICBpZiAoTmV0V29ya1R5cGUgPT0gTmRpczgwMl8xMU9GRE01KQorICAgICAgICAgICAgTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTVfTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTI0X047CisgICAgfQorCisJcmV0dXJuIE5ldFdvcmtUeXBlOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFdQQSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlcldwYU1lc3NhZ2VTYW5pdHkoCisgICAgSU4gCVBSVE1QX0FEQVBURVIgCQlwQWQsCisgICAgSU4gCVBFQVBPTF9QQUNLRVQgCQlwTXNnLAorICAgIElOIAlVTE9ORyAJCQkJTXNnTGVuLAorICAgIElOIAlVQ0hBUgkJCQlNc2dUeXBlLAorICAgIElOIAlNQUNfVEFCTEVfRU5UUlkgIAkqcEVudHJ5KQoreworCVVDSEFSCQkJbWljW0xFTl9LRVlfREVTQ19NSUNdLCBkaWdlc3RbODBdLCBLRVlEQVRBW01BWF9MRU5fT0ZfUlNOSUVdOworCUJPT0xFQU4JCQliUmVwbGF5RGlmZiA9IEZBTFNFOworCUJPT0xFQU4JCQliV1BBMiA9IEZBTFNFOworCUtFWV9JTkZPCQlFYXBvbEtleUluZm87CisJVUNIQVIJCQlHcm91cEtleUluZGV4ID0gMDsKKworCisJTmRpc1plcm9NZW1vcnkobWljLCBzaXplb2YobWljKSk7CisJTmRpc1plcm9NZW1vcnkoZGlnZXN0LCBzaXplb2YoZGlnZXN0KSk7CisJTmRpc1plcm9NZW1vcnkoS0VZREFUQSwgc2l6ZW9mKEtFWURBVEEpKTsKKwlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZFYXBvbEtleUluZm8sIHNpemVvZihFYXBvbEtleUluZm8pKTsKKworCU5kaXNNb3ZlTWVtb3J5KChQVUNIQVIpJkVhcG9sS2V5SW5mbywgKFBVQ0hBUikmcE1zZy0+S2V5RGVzYy5LZXlJbmZvLCBzaXplb2YoS0VZX0lORk8pKTsKKworCSooKFVTSE9SVCAqKSZFYXBvbEtleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJkVhcG9sS2V5SW5mbykpOworCisJLy8gQ2hvb3NlIFdQQTIgb3Igbm90CisJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQliV1BBMiA9IFRSVUU7CisKKwkvLyAwLiBDaGVjayBNc2dUeXBlCisJaWYgKChNc2dUeXBlID4gRUFQT0xfR1JPVVBfTVNHXzIpIHx8IChNc2dUeXBlIDwgRUFQT0xfUEFJUl9NU0dfMSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQoJWQpISBcbiIsIE1zZ1R5cGUpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIDEuIFJlcGxheSBjb3VudGVyIGNoZWNrCisgCWlmIChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEgfHwgTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zIHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpCS8vIEZvciBzdXBwbGljYW50CisgICAgeworICAgIAkvLyBGaXJzdCB2YWxpZGF0ZSByZXBsYXkgY291bnRlciwgb25seSBhY2NlcHQgbWVzc2FnZSB3aXRoIGxhcmdlciByZXBsYXkgY291bnRlci4KKwkJLy8gTGV0IGVxdWFsIHBhc3MsIHNvbWUgQVAgc3RhcnQgd2l0aCBhbGwgemVybyByZXBsYXkgY291bnRlcgorCQlVQ0hBUglaZXJvUmVwbGF5W0xFTl9LRVlfREVTQ19SRVBMQVldOworCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KFplcm9SZXBsYXksIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQlpZiAoKFJUTVBDb21wYXJlTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgcEVudHJ5LT5SX0NvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpICYmCisJCQkoUlRNUENvbXBhcmVNZW1vcnkocE1zZy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAwKSkKKyAgICAJeworCQkJYlJlcGxheURpZmYgPSBUUlVFOworICAgIAl9CisgCX0KKwllbHNlIGlmIChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzIgfHwgTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR180IHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzIpCS8vIEZvciBhdXRoZW50aWNhdG9yCisJeworCQkvLyBjaGVjayBSZXBsYXkgQ291bnRlciBjb3Jlc3BvbmRzIHRvIE1TRyBmcm9tIGF1dGhlbnRpY2F0b3IsIG90aGVyd2lzZSBkaXNjYXJkCisgICAgCWlmICghTmRpc0VxdWFsTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgcEVudHJ5LT5SX0NvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpKQorICAgIAl7CisJCQliUmVwbGF5RGlmZiA9IFRSVUU7CisgICAgCX0KKwl9CisKKwkvLyBSZXBsYXkgQ291bnRlciBkaWZmZXJlbnQgY29uZGl0aW9uCisJaWYgKGJSZXBsYXlEaWZmKQorCXsKKwkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciByZXBsYXkgY291bnRlciBkaWZmZXJlbnQKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfUkVQTEFZX0NPVU5URVJfRElGRl9FVkVOVF9GTEFHLCBwRW50cnktPkFkZHIsIHBFbnRyeS0+YXBpZHgsIDApOworCisJCWlmIChNc2dUeXBlIDwgRUFQT0xfR1JPVVBfTVNHXzEpCisJCXsKKyAgICAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJlcGxheSBDb3VudGVyIERpZmZlcmVudCBpbiBwYWlyd2lzZSBtc2cgJWQgb2YgNC13YXkgaGFuZHNoYWtlIVxuIiwgTXNnVHlwZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUmVwbGF5IENvdW50ZXIgRGlmZmVyZW50IGluIGdyb3VwIG1zZyAlZCBvZiAyLXdheSBoYW5kc2hha2UhXG4iLCAoTXNnVHlwZSAtIEVBUE9MX1BBSVJfTVNHXzQpKSk7CisJCX0KKworCQloZXhfZHVtcCgiUmVjZWl2ZSByZXBsYXkgY291bnRlciAiLCBwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQloZXhfZHVtcCgiQ3VycmVudCByZXBsYXkgY291bnRlciAiLCBwRW50cnktPlJfQ291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKwl9CisKKwkvLyAyLiBWZXJpZnkgTUlDIGV4Y2VwdCBQYWlyd2lzZSBNc2cxCisJaWYgKE1zZ1R5cGUgIT0gRUFQT0xfUEFJUl9NU0dfMSkKKwl7CisJCVVDSEFSCQkJcmN2ZF9taWNbTEVOX0tFWV9ERVNDX01JQ107CisKKwkJLy8gUmVjb3JkIHRoZSByZWNlaXZlZCBNSUMgZm9yIGNoZWNrIGxhdGVyCisJCU5kaXNNb3ZlTWVtb3J5KHJjdmRfbWljLCBwTXNnLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJCU5kaXNaZXJvTWVtb3J5KHBNc2ctPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworICAgICAgICBpZiAocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkJLy8gVEtJUAorICAgICAgICB7CisgICAgICAgICAgICBobWFjX21kNShwRW50cnktPlBUSywgTEVOX0VBUF9NSUNLLCAoUFVDSEFSKXBNc2csIE1zZ0xlbiwgbWljKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQkvLyBBRVMKKyAgICAgICAgeworICAgICAgICAgICAgSE1BQ19TSEExKChQVUNIQVIpcE1zZywgTXNnTGVuLCBwRW50cnktPlBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkobWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOZGlzRXF1YWxNZW1vcnkocmN2ZF9taWMsIG1pYywgTEVOX0tFWV9ERVNDX01JQykpCisgICAgICAgIHsKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgTUlDIGRpZmZlcmVudAorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX01JQ19ESUZGX0VWRU5UX0ZMQUcsIHBFbnRyeS0+QWRkciwgcEVudHJ5LT5hcGlkeCwgMCk7CisKKwkJCWlmIChNc2dUeXBlIDwgRUFQT0xfR1JPVVBfTVNHXzEpCisJCQl7CisgICAgICAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiTUlDIERpZmZlcmVudCBpbiBwYWlyd2lzZSBtc2cgJWQgb2YgNC13YXkgaGFuZHNoYWtlIVxuIiwgTXNnVHlwZSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1JQyBEaWZmZXJlbnQgaW4gZ3JvdXAgbXNnICVkIG9mIDItd2F5IGhhbmRzaGFrZSFcbiIsIChNc2dUeXBlIC0gRUFQT0xfUEFJUl9NU0dfNCkpKTsKKwkJCX0KKworCQkJaGV4X2R1bXAoIlJlY2VpdmVkIE1JQyIsIHJjdmRfbWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwkJCWhleF9kdW1wKCJEZXNpcmVkICBNSUMiLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJCQlyZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKwl9CisKKwkvLyBFeHRyYWN0IHRoZSBjb250ZXh0IG9mIHRoZSBLZXkgRGF0YSBmaWVsZCBpZiBpdCBleGlzdAorCS8vIFRoZSBmaWVsZCBpbiBwYWlyd2lzZV9tc2dfMl9XUEExKFdQQTIpICYgcGFpcndpc2VfbXNnXzNfV1BBMSBpcyB1bi1lbmNyeXB0ZWQuCisJLy8gVGhlIGZpZWxkIGluIGdyb3VwX21zZ18xX1dQQTEoV1BBMikgJiBwYWlyd2lzZV9tc2dfM19XUEEyIGlzIGVuY3J5cHRlZC4KKwlpZiAocE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdID4gMCkKKwl7CisJCS8vIERlY3J5cHQgdGhpcyBmaWVsZAorCQlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMikgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCQl7CisJCQlpZihwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJeworCQkJCS8vIEFFUworCQkJCUFFU19HVEtfS0VZX1VOV1JBUCgmcEVudHJ5LT5QVEtbMTZdLCBLRVlEQVRBLCBwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0scE1zZy0+S2V5RGVzYy5LZXlEYXRhKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlJTlQgCWk7CisJCQkJVUNIQVIgICBLZXlbMzJdOworCQkJCS8vIERlY3J5cHQgVEtJUCBHVEsKKwkJCQkvLyBDb25zdHJ1Y3QgMzIgYnl0ZXMgUkM0IEtleQorCQkJCU5kaXNNb3ZlTWVtb3J5KEtleSwgcE1zZy0+S2V5RGVzYy5LZXlJdiwgMTYpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZLZXlbMTZdLCAmcEVudHJ5LT5QVEtbMTZdLCAxNik7CisJCQkJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtleSwgMzIpOworCQkJCS8vZGlzY2FyZCBmaXJzdCAyNTYgYnl0ZXMKKwkJCQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJCQkJQVJDRk9VUl9CWVRFKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQpOworCQkJCS8vIERlY3J5cHQgR1RLLiBCZWNhcmVmdWwsIHRoZXJlIGlzIG5vIElDViB0byBjaGVjayB0aGUgcmVzdWx0IGlzIGNvcnJlY3Qgb3Igbm90CisJCQkJQVJDRk9VUl9ERUNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtFWURBVEEsIHBNc2ctPktleURlc2MuS2V5RGF0YSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdKTsKKwkJCX0KKworCQkJaWYgKCFiV1BBMiAmJiAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpCisJCQkJR3JvdXBLZXlJbmRleCA9IEVhcG9sS2V5SW5mby5LZXlJbmRleDsKKworCQl9CisJCWVsc2UgaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzIpIHx8IChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgIWJXUEEyKSkKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoS0VZREFUQSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhLCBwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0pOworCQl9CisJCWVsc2UKKwkJeworCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCisJCS8vIFBhcnNlIEtleSBEYXRhIGZpZWxkIHRvCisJCS8vIDEuIHZlcmlmeSBSU04gSUUgZm9yIHBhaXJ3aXNlX21zZ18yX1dQQTEoV1BBMikgLHBhaXJ3aXNlX21zZ18zX1dQQTEoV1BBMikKKwkJLy8gMi4gdmVyaWZ5IEtERSBmb3JtYXQgZm9yIHBhaXJ3aXNlX21zZ18zX1dQQTIsIGdyb3VwX21zZ18xX1dQQTIKKwkJLy8gMy4gdXBkYXRlIHNoYXJlZCBrZXkgZm9yIHBhaXJ3aXNlX21zZ18zX1dQQTIsIGdyb3VwX21zZ18xX1dQQTEoV1BBMikKKwkJaWYgKCFSVE1QUGFyc2VFYXBvbEtleURhdGEocEFkLCBLRVlEQVRBLCBwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIEdyb3VwS2V5SW5kZXgsIE1zZ1R5cGUsIGJXUEEyLCBwRW50cnkpKQorCQl7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKKworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitCT09MRUFOIE1sbWVEbHNSZXFTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFJUXzgwMl8xMV9ETFMgKnBETFMsCisgICAgT1VUIFBVU0hPUlQgcFJlYXNvbikKK3sKKwlNTE1FX0RMU19SRVFfU1RSVUNUICpwSW5mbzsKKworICAgIHBJbmZvID0gKE1MTUVfRExTX1JFUV9TVFJVQ1QgKilNc2c7CisKKwkqcERMUyA9IHBJbmZvLT5wRExTOworCSpwUmVhc29uID0gcEluZm8tPlJlYXNvbjsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitCT09MRUFOIFBlZXJEbHNSZXFTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcERsc1RpbWVvdXQsCisgICAgT1VUIFVDSEFSICpwUmF0ZXNMZW4sCisgICAgT1VUIFVDSEFSIFJhdGVzW10sCisJT1VUIFVDSEFSICpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5KQoreworCUNIQVIgICAgICAgICAgICAqUHRyOworICAgIFBGUkFNRV84MDJfMTEJRnIgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisJUEVJRF9TVFJVQ1QgIGVpZF9wdHI7CisKKyAgICAvLyB0byBwcmV2ZW50IGNhbGxlciBmcm9tIHVzaW5nIGdhcmJhZ2Ugb3V0cHV0IHZhbHVlCisgICAgKnBDYXBhYmlsaXR5SW5mbwk9IDA7CisgICAgKnBEbHNUaW1lb3V0CT0gMDsKKwkqcEh0Q2FwYWJpbGl0eUxlbiA9IDA7CisKKyAgICBQdHIgPSBGci0+T2N0ZXQ7CisKKwkvLyBvZmZzZXQgdG8gZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQpCisgICAgUHRyICs9IDI7CisKKyAgICAvLyBnZXQgREEgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocERBLCBQdHIsIE1BQ19BRERSX0xFTik7CisgICAgUHRyICs9IE1BQ19BRERSX0xFTjsKKworICAgIC8vIGdldCBTQSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwU0EsIFB0ciwgTUFDX0FERFJfTEVOKTsKKyAgICBQdHIgKz0gTUFDX0FERFJfTEVOOworCisgICAgLy8gZ2V0IGNhcGFiaWxpdHkgaW5mbyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwQ2FwYWJpbGl0eUluZm8sIFB0ciwgMik7CisgICAgUHRyICs9IDI7CisKKyAgICAvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBEbHNUaW1lb3V0LCBQdHIsIDIpOworICAgIFB0ciArPSAyOworCisJLy8gQ2F0ZWdvcnkgYW5kIEFjdGlvbiBmaWVsZCArIERBICsgU0EgKyBjYXBhYmlsaXR5ICsgVGltZW91dAorCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpICZGci0+T2N0ZXRbMThdOworCisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoVUNIQVIqKUZyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAoKGVpZF9wdHItPkxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykgJiYgKGVpZF9wdHItPkxlbiA+IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUmF0ZXMsIGVpZF9wdHItPk9jdGV0LCBlaWRfcHRyLT5MZW4pOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gSUVfU1VQUF9SQVRFUy4sIExlbj0lZC4gUmF0ZXNbMF09JXhcbiIsZWlkX3B0ci0+TGVuLCBSYXRlc1swXSkpOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYXRlc1sxXT0leCAleCAleCAleCAleCAleCAleFxuIiwgUmF0ZXNbMV0sIFJhdGVzWzJdLCBSYXRlc1szXSwgUmF0ZXNbNF0sIFJhdGVzWzVdLCBSYXRlc1s2XSwgUmF0ZXNbN10pKTsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IGVpZF9wdHItPkxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IDg7CisJCQkJCVJhdGVzWzBdID0gMHg4MjsKKwkJCQkJUmF0ZXNbMV0gPSAweDg0OworCQkJCQlSYXRlc1syXSA9IDB4OGI7CisJCQkJCVJhdGVzWzNdID0gMHg5NjsKKwkJCQkJUmF0ZXNbNF0gPSAweDEyOworCQkJCQlSYXRlc1s1XSA9IDB4MjQ7CisJCQkJCVJhdGVzWzZdID0gMHg0ODsKKwkJCQkJUmF0ZXNbN10gPSAweDZjOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gd3JvbmcgSUVfU1VQUF9SQVRFUy4sIExlbj0lZFxuIixlaWRfcHRyLT5MZW4pKTsKKyAgICAgICAgICAgICAgICB9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfRVhUX1NVUFBfUkFURVM6CisgICAgICAgICAgICAgICAgaWYgKGVpZF9wdHItPkxlbiArICpwUmF0ZXNMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUmF0ZXNbKnBSYXRlc0xlbl0sIGVpZF9wdHItPk9jdGV0LCBlaWRfcHRyLT5MZW4pOworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gKCpwUmF0ZXNMZW4pICsgZWlkX3B0ci0+TGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUmF0ZXNbKnBSYXRlc0xlbl0sIGVpZF9wdHItPk9jdGV0LCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyAtICgqcFJhdGVzTGVuKSk7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsKKyAgICAgICAgICAgICAgICB9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfSFRfQ0FQOgorCQkJCWlmIChlaWRfcHRyLT5MZW4gPj0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKQorCQkJCXsKKwkJCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgZWlkX3B0ci0+T2N0ZXQsIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisKKwkJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSk7CisJCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykpOworCQkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IHNpemVvZihIVF9DQVBBQklMSVRZX0lFKTsKKworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gSUVfSFRfQ0FQXG4iKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSZXFTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuZWlkX3B0ci0+TGVuID0gJWRcbiIsIGVpZF9wdHItPkxlbikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworICAgIHJldHVybiBUUlVFOworfQorCitCT09MRUFOIFBlZXJEbHNSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpCit7CisgICAgQ0hBUiAgICAgICAgICAgICpQdHI7CisgICAgUEZSQU1FXzgwMl8xMQlGciA9IChQRlJBTUVfODAyXzExKU1zZzsKKwlQRUlEX1NUUlVDVCAgZWlkX3B0cjsKKworICAgIC8vIHRvIHByZXZlbnQgY2FsbGVyIGZyb20gdXNpbmcgZ2FyYmFnZSBvdXRwdXQgdmFsdWUKKyAgICAqcFN0YXR1cwkJPSAwOworICAgICpwQ2FwYWJpbGl0eUluZm8JPSAwOworCSpwSHRDYXBhYmlsaXR5TGVuID0gMDsKKworICAgIFB0ciA9IEZyLT5PY3RldDsKKworCS8vIG9mZnNldCB0byBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAoQ2F0ZWdvcnkgYW5kIEFjdGlvbiBmaWVsZCkKKyAgICBQdHIgKz0gMjsKKworCS8vIGdldCBzdGF0dXMgY29kZSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwU3RhdHVzLCBQdHIsIDIpOworICAgIFB0ciArPSAyOworCisgICAgLy8gZ2V0IERBIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBEQSwgUHRyLCBNQUNfQUREUl9MRU4pOworICAgIFB0ciArPSBNQUNfQUREUl9MRU47CisKKyAgICAvLyBnZXQgU0EgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFNBLCBQdHIsIE1BQ19BRERSX0xFTik7CisgICAgUHRyICs9IE1BQ19BRERSX0xFTjsKKworCWlmIChwU3RhdHVzID09IDApCisJeworCSAgICAvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorCSAgICBOZGlzTW92ZU1lbW9yeShwQ2FwYWJpbGl0eUluZm8sIFB0ciwgMik7CisJICAgIFB0ciArPSAyOworCX0KKworCS8vIENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQgKyBzdGF0dXMgY29kZSArIERBICsgU0EgKyBjYXBhYmlsaXR5CisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkgJkZyLT5PY3RldFsxOF07CisKKwl3aGlsZSAoKChVQ0hBUiopZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwgKChVQ0hBUiopRnIgKyBNc2dMZW4pKQorCXsKKwkJc3dpdGNoKGVpZF9wdHItPkVpZCkKKwkJeworCQkJY2FzZSBJRV9TVVBQX1JBVEVTOgorICAgICAgICAgICAgICAgIGlmICgoZWlkX3B0ci0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKSAmJiAoZWlkX3B0ci0+TGVuID4gMCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShSYXRlcywgZWlkX3B0ci0+T2N0ZXQsIGVpZF9wdHItPkxlbik7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSBJRV9TVVBQX1JBVEVTLiwgTGVuPSVkLiBSYXRlc1swXT0leFxuIixlaWRfcHRyLT5MZW4sIFJhdGVzWzBdKSk7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhdGVzWzFdPSV4ICV4ICV4ICV4ICV4ICV4ICV4XG4iLCBSYXRlc1sxXSwgUmF0ZXNbMl0sIFJhdGVzWzNdLCBSYXRlc1s0XSwgUmF0ZXNbNV0sIFJhdGVzWzZdLCBSYXRlc1s3XSkpOworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gZWlkX3B0ci0+TGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gODsKKwkJCQkJUmF0ZXNbMF0gPSAweDgyOworCQkJCQlSYXRlc1sxXSA9IDB4ODQ7CisJCQkJCVJhdGVzWzJdID0gMHg4YjsKKwkJCQkJUmF0ZXNbM10gPSAweDk2OworCQkJCQlSYXRlc1s0XSA9IDB4MTI7CisJCQkJCVJhdGVzWzVdID0gMHgyNDsKKwkJCQkJUmF0ZXNbNl0gPSAweDQ4OworCQkJCQlSYXRlc1s3XSA9IDB4NmM7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSB3cm9uZyBJRV9TVVBQX1JBVEVTLiwgTGVuPSVkXG4iLGVpZF9wdHItPkxlbikpOworICAgICAgICAgICAgICAgIH0KKwkJCQlicmVhazsKKworCQkJY2FzZSBJRV9FWFRfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAoZWlkX3B0ci0+TGVuICsgKnBSYXRlc0xlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZSYXRlc1sqcFJhdGVzTGVuXSwgZWlkX3B0ci0+T2N0ZXQsIGVpZF9wdHItPkxlbik7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSAoKnBSYXRlc0xlbikgKyBlaWRfcHRyLT5MZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZSYXRlc1sqcFJhdGVzTGVuXSwgZWlkX3B0ci0+T2N0ZXQsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTIC0gKCpwUmF0ZXNMZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOworICAgICAgICAgICAgICAgIH0KKwkJCQlicmVhazsKKworCQkJY2FzZSBJRV9IVF9DQVA6CisJCQkJaWYgKGVpZF9wdHItPkxlbiA+PSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpCisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCBlaWRfcHRyLT5PY3RldCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKworCQkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pKTsKKwkJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSk7CisJCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSBJRV9IVF9DQVBcbiIpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckRsc1JzcFNhbml0eSAtIHdyb25nIElFX0hUX0NBUC5laWRfcHRyLT5MZW4gPSAlZFxuIiwgZWlkX3B0ci0+TGVuKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisKKwkJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKillaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7CisJfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0JPT0xFQU4gUGVlckRsc1RlYXJEb3duU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwREEsCisgICAgT1VUIFBVQ0hBUiBwU0EsCisgICAgT1VUIFVTSE9SVCAqcFJlYXNvbikKK3sKKyAgICBDSEFSICAgICAgICAgICAgKlB0cjsKKyAgICBQRlJBTUVfODAyXzExCUZyID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisgICAgLy8gdG8gcHJldmVudCBjYWxsZXIgZnJvbSB1c2luZyBnYXJiYWdlIG91dHB1dCB2YWx1ZQorICAgICpwUmVhc29uCT0gMDsKKworICAgIFB0ciA9IEZyLT5PY3RldDsKKworCS8vIG9mZnNldCB0byBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAoQ2F0ZWdvcnkgYW5kIEFjdGlvbiBmaWVsZCkKKyAgICBQdHIgKz0gMjsKKworICAgIC8vIGdldCBEQSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwREEsIFB0ciwgTUFDX0FERFJfTEVOKTsKKyAgICBQdHIgKz0gTUFDX0FERFJfTEVOOworCisgICAgLy8gZ2V0IFNBIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBTQSwgUHRyLCBNQUNfQUREUl9MRU4pOworICAgIFB0ciArPSBNQUNfQUREUl9MRU47CisKKwkvLyBnZXQgcmVhc29uIGNvZGUgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFJlYXNvbiwgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc3luYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3N5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmU3Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3N5bmMuYwpAQCAtMCwwICsxLDcxMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlzeW5jLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nCTIwMDQtMDktMDEgICAgICBtb2RpZmllZCBmb3IgcnQyNTYxLzI2NjEKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKy8vIDIuNCBHaHogY2hhbm5lbCBwbGFuIGluZGV4IGluIHRoZSBUeFBvd2VyIGFycmF5cy4KKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMF9TVEFSVAkwCQkJLy8gMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMF9TSVpFCTExCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzFfU1RBUlQJMAkJCS8vIDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzFfU0laRQkxMworI2RlZmluZQlCR19CQU5EX1JFR0lPTl8yX1NUQVJUCTkJCQkvLyAxMCwxMQorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8yX1NJWkUJMgorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zX1NUQVJUCTkJCQkvLyAxMCwxMSwxMiwxMworI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zX1NJWkUJNAorI2RlZmluZQlCR19CQU5EX1JFR0lPTl80X1NUQVJUCTEzCQkJLy8gMTQKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNF9TSVpFCTEKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNV9TVEFSVAkwCQkJLy8gMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNV9TSVpFCTE0CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzZfU1RBUlQJMgkJCS8vIDMsNCw1LDYsNyw4LDkKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNl9TSVpFCTcKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fN19TVEFSVAk0CQkJLy8gNSw2LDcsOCw5LDEwLDExLDEyLDEzCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzdfU0laRQk5CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzMxX1NUQVJUCTAJCQkvLyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNAorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zMV9TSVpFCTE0CisKKy8vIDUgR2h6IGNoYW5uZWwgcGxhbiBpbmRleCBpbiB0aGUgVHhQb3dlciBhcnJheXMuCitVQ0hBUiBBX0JBTkRfUkVHSU9OXzBfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjV9OworVUNIQVIgQV9CQU5EX1JFR0lPTl8xX0NIQU5ORUxfTElTVFtdPXszNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwfTsKK1VDSEFSIEFfQkFORF9SRUdJT05fMl9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fM19DSEFOTkVMX0xJU1RbXT17NTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzRfQ0hBTk5FTF9MSVNUW109ezE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fNV9DSEFOTkVMX0xJU1RbXT17MTQ5LCAxNTMsIDE1NywgMTYxfTsKK1VDSEFSIEFfQkFORF9SRUdJT05fNl9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDh9OworVUNIQVIgQV9CQU5EX1JFR0lPTl83X0NIQU5ORUxfTElTVFtdPXszNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwLCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzhfQ0hBTk5FTF9MSVNUW109ezUyLCA1NiwgNjAsIDY0fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fOV9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTMyLCAxMzYsIDE0MCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjV9OworVUNIQVIgQV9CQU5EX1JFR0lPTl8xMF9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fMTFfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTQ5LCAxNTMsIDE1NywgMTYxfTsKKworLy9CYVNpemVBcnJheSBmb2xsb3dzIHRoZSA4MDIuMTFuIGRlZmluaXRpb24gYXMgTWF4UnhGYWN0b3IuICAyXigxMytmYWN0b3IpIGJ5dGVzLiBXaGVuIGZhY3RvciA9MCwgaXQncyBhYm91dCBCYSBidWZmZXIgc2l6ZSA9OC4KK1VDSEFSIEJhU2l6ZUFycmF5WzRdID0gezgsMTYsMzIsNjR9OworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVVwZGF0ZSBTdGFDZmctPkNoYW5uZWxMaXN0W10gYWNjb3JkaW5nIHRvIDEpIENvdW50cnkgUmVnaW9uIDIpIFJGIElDIHR5cGUsCisJCWFuZCAzKSBQSFktbW9kZSB1c2VyIHNlbGVjdGVkLgorCQlUaGUgb3V0Y29tZSBpcyB1c2VkIGJ5IGRyaXZlciB3aGVuIGRvaW5nIHNpdGUgc3VydmV5LgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQnVpbGRDaGFubmVsTGlzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVQ0hBUiBpLCBqLCBpbmRleD0wLCBudW09MDsKKwlQVUNIQVIJcENoYW5uZWxMaXN0ID0gTlVMTDsKKworCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q2hhbm5lbExpc3QsIE1BWF9OVU1fT0ZfQ0hBTk5FTFMgKiBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikpOworCisJLy8gaWYgbm90IDExYS1vbmx5IG1vZGUsIGNoYW5uZWwgbGlzdCBzdGFydHMgZnJvbSAyLjRHaHogYmFuZAorCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSAhPSBQSFlfMTFBKQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSAhPSBQSFlfMTFBTl9NSVhFRCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgIT0gUEhZXzExTl81RykKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkpCisJeworCQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gICYgMHg3ZikKKwkJeworCQkJY2FzZSBSRUdJT05fMF9CR19CQU5EOgkvLyAxIC0xMQorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8wX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fMF9TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl8wX1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8xX0JHX0JBTkQ6CS8vIDEgLSAxMworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8xX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fMV9TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl8xX1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8yX0JHX0JBTkQ6CS8vIDEwIC0gMTEKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fMl9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzJfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMl9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fM19CR19CQU5EOgkvLyAxMCAtIDEzCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzNfU1RBUlRdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikgKiBCR19CQU5EX1JFR0lPTl8zX1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzNfU0laRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzRfQkdfQkFORDoJLy8gMTQKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fNF9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzRfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fNF9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNV9CR19CQU5EOgkvLyAxIC0gMTQKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fNV9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzVfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fNV9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNl9CR19CQU5EOgkvLyAzIC0gOQorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl82X1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fNl9TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl82X1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl83X0JHX0JBTkQ6ICAvLyA1IC0gMTMKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fN19TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzdfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fN19TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fMzFfQkdfQkFORDoJLy8gMSAtIDE0CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzMxX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fMzFfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMzFfU0laRTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6ICAgICAgICAgICAgLy8gRXJyb3IuIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJCQlicmVhazsKKwkJfQorCQlmb3IgKGk9MDsgaTxpbmRleDsgaSsrKQorCQkJcEFkLT5DaGFubmVsTGlzdFtpXS5NYXhUeFB3ciA9IDIwOworCX0KKworCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdfTUlYRUQpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCXx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKQorCQl8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBR05fTUlYRUQpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJKQorCXsKKwkJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQgJiAweDdmKQorCQl7CisJCQljYXNlIFJFR0lPTl8wX0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl8wX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzBfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fMV9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMV9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xX0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzJfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzJfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMl9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8zX0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl8zX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzNfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNF9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fNF9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl80X0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzVfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzVfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fNV9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl82X0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl82X0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzZfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fN19BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fN19DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl83X0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzhfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzhfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fOF9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl85X0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl85X0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzlfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFR0lPTl8xMF9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFR0lPTl8xMV9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMTFfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMTFfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OiAgICAgICAgICAgIC8vIEVycm9yLiBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwoImNvdW50cnlyZWdpb249JWQgbm90IHN1cHBvcnQiLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQpKTsKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChudW0gIT0gMCkKKwkJeworCQkJVUNIQVIgUmFkYXJDaFsxNV09ezUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MH07CisJCQlmb3IgKGk9MDsgaTxudW07IGkrKykKKwkJCXsKKwkJCQlmb3IgKGo9MDsgajxNQVhfTlVNX09GX0NIQU5ORUxTOyBqKyspCisJCQkJeworCQkJCQlpZiAocENoYW5uZWxMaXN0W2ldID09IHBBZC0+VHhQb3dlcltqXS5DaGFubmVsKQorCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXgraV0sICZwQWQtPlR4UG93ZXJbal0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSk7CisJCQkJCX0KKwkJCQlmb3IgKGo9MDsgajwxNTsgaisrKQorCQkJCXsKKwkJCQkJaWYgKHBDaGFubmVsTGlzdFtpXSA9PSBSYWRhckNoW2pdKQorCQkJCQkJcEFkLT5DaGFubmVsTGlzdFtpbmRleCtpXS5EZnNSZXEgPSBUUlVFOworCQkJCX0KKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2luZGV4K2ldLk1heFR4UHdyID0gMjA7CisJCQl9CisJCQlpbmRleCArPSBudW07CisJCX0KKwl9CisKKwlwQWQtPkNoYW5uZWxMaXN0TnVtID0gaW5kZXg7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJjb3VudHJ5IGNvZGU9JWQvJWQsIFJGSUM9JWQsIFBIWSBtb2RlPSVkLCBzdXBwb3J0ICVkIGNoYW5uZWxzXG4iLAorCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQsIHBBZC0+UmZJY1R5cGUsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsIHBBZC0+Q2hhbm5lbExpc3ROdW0pKTsKKyNpZmRlZiBEQkcKKwlmb3IgKGk9MDtpPHBBZC0+Q2hhbm5lbExpc3ROdW07aSsrKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQnVpbGRDaGFubmVsICMgJWQgOjogUHdyMCA9ICVkLCBQd3IxID0lZCwgXG4gIiwgcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0W2ldLlBvd2VyLCBwQWQtPkNoYW5uZWxMaXN0W2ldLlBvd2VyMikpOworCX0KKyNlbmRpZgorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSByZXR1cm4gdGhlIGZpcnN0IGNoYW5uZWwgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgY291bnRyeQorCQljb2RlIHNlbGVjdGlvbiBhbmQgUkYgSUMgc2VsZWN0aW9uIChzaWduYWwgYmFuZCBvciBkdWFsIGJhbmQpLiBJdCBpcyBjYWxsZWQKKwkJd2hlbmV2ZXIgZHJpdmVyIG5lZWQgdG8gc3RhcnQgYSBzaXRlIHN1cnZleSBvZiBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzLgorCVJldHVybjoKKwkJY2ggLSB0aGUgZmlyc3QgY2hhbm5lbCBudW1iZXIgb2YgY3VycmVudCBjb3VudHJ5IGNvZGUgc2V0dGluZworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1VDSEFSIEZpcnN0Q2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlyZXR1cm4gcEFkLT5DaGFubmVsTGlzdFswXS5DaGFubmVsOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBuZXh0IGNoYW5uZWwgbnVtYmVyLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkCisJCWR1cmluZyBkcml2ZXIgbmVlZCB0byBzdGFydCBhIHNpdGUgc3VydmV5IG9mIGFsbCBzdXBwb3J0ZWQgY2hhbm5lbHMuCisJUmV0dXJuOgorCQluZXh0X2NoYW5uZWwgLSB0aGUgbmV4dCBjaGFubmVsIG51bWJlciB2YWxpZCBpbiBjdXJyZW50IGNvdW50cnkgY29kZSBzZXR0aW5nLgorCU5vdGU6CisJCXJldHVybiAwIGlmIG5vIG1vcmUgbmV4dCBjaGFubmVsCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVUNIQVIgTmV4dENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgY2hhbm5lbCkKK3sKKwlpbnQgaTsKKwlVQ0hBUiBuZXh0X2NoYW5uZWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IChwQWQtPkNoYW5uZWxMaXN0TnVtIC0gMSk7IGkrKykKKwkJaWYgKGNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorCQl7CisJCQluZXh0X2NoYW5uZWwgPSBwQWQtPkNoYW5uZWxMaXN0W2krMV0uQ2hhbm5lbDsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbmV4dF9jaGFubmVsOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBpcyBmb3IgQ2lzY28gQ29tcGF0aWJsZSBFeHRlbnNpb25zIDIuWAorCQlTcGVjMzEuIEFQIENvbnRyb2wgb2YgQ2xpZW50IFRyYW5zbWl0IFBvd2VyCisJUmV0dXJuOgorCQlOb25lCisJTm90ZToKKwkgICBSZXF1aXJlZCBieSBBaXJvbmV0IGRCbShtVykKKwkJICAgMGRCbSgxbVcpLCAgIDFkQm0oNW1XKSwgMTNkQm0oMjBtVyksIDE1ZEJtKDMwbVcpLAorCQkgIDE3ZEJtKDUwbXcpLCAyMGRCbSgxMDBtVykKKworCSAgIFdlIHN1cHBvcnRlZAorCQkgICAzZEJtKExvd2VzdCksIDZkQm0oMTAlKSwgOWRCbSgyNSUpLCAxMmRCbSg1MCUpLAorCQkgIDE0ZEJtKDc1JSksICAgMTVkQm0oMTAwJSkKKworCQlUaGUgY2xpZW50IHN0YXRpb24ncyBhY3R1YWwgdHJhbnNtaXQgcG93ZXIgc2hhbGwgYmUgd2l0aGluICsvLSA1ZEIgb2YKKwkJdGhlIG1pbmltdW0gdmFsdWUgb3IgbmV4dCBsb3dlciB2YWx1ZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIENoYW5nZVRvQ2VsbFBvd2VyTGltaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgICAgICAgICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpCit7CisJLy92YWx1ZCAweEZGIG1lYW5zIHRoYXQgaGFzbid0IGZvdW5kIHBvd2VyIGxpbWl0IGluZm9ybWF0aW9uCisJLy9mcm9tIHRoZSBBUCdzIEJlYWNvbi9Qcm9iZSByZXNwb25zZS4KKwlpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0ID09IDB4RkYpCisJCXJldHVybjsKKworCWlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCA2KSAvL1VzZWQgTG93ZXN0IFBvd2VyIFBlcmNlbnRhZ2UuCisJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gNjsKKwllbHNlIGlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCA5KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDEwOworCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDEyKQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDI1OworCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDE0KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDUwOworCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDE1KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDc1OworCWVsc2UKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAxMDA7IC8vZWxzZSB1c2VkIG1heGltdW0KKworCWlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0OworCit9CisKK0NIQVIJQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCQkJUnNzaSwKKwlJTiAgVUNIQVIgICBSc3NpTnVtYmVyKQoreworCVVDSEFSCVJzc2lPZmZzZXQsIExOQUdhaW47CisKKwkvLyBSc3NpIGVxdWFscyB0byB6ZXJvIHNob3VsZCBiZSBhbiBpbnZhbGlkIHZhbHVlCisJaWYgKFJzc2kgPT0gMCkKKwkJcmV0dXJuIC05OTsKKworCUxOQUdhaW4gPSBHRVRfTE5BX0dBSU4ocEFkKTsKKyAgICBpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpCisgICAgeworICAgICAgICBpZiAoUnNzaU51bWJlciA9PSAwKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDE7CisJCWVsc2UKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKFJzc2lOdW1iZXIgPT0gMCkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkJHUnNzaU9mZnNldDA7CisJCWVsc2UgaWYgKFJzc2lOdW1iZXIgPT0gMSkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkJHUnNzaU9mZnNldDE7CisJCWVsc2UKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkJHUnNzaU9mZnNldDI7CisgICAgfQorCisgICAgcmV0dXJuICgtMTIgLSBSc3NpT2Zmc2V0IC0gTE5BR2FpbiAtIFJzc2kpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNjYW4gbmV4dCBjaGFubmVsCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTY2FuTmV4dENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSEVBREVSXzgwMl8xMSAgIEhkcjgwMjExOworCVBVQ0hBUiAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUyAgICAgTlN0YXR1czsKKwlVTE9ORyAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCVVDSEFSICAgICAgICAgICBTc2lkTGVuID0gMCwgU2NhblR5cGUgPSBwQWQtPk1sbWVBdXguU2NhblR5cGUsIEJCUFZhbHVlID0gMDsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVU0hPUlQgICAgICAgICAgU3RhdHVzOworCVBIRUFERVJfODAyXzExICBwSGRyODAyMTE7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJVUlOVAkJCVNjYW5UaW1lSW41Z0NoYW5uZWwgPSBTSE9SVF9DSEFOTkVMX1RJTUU7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJCXJldHVybjsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBSQUxJTktfQVRFCisJLy8gTm90aGluZyB0byBkbyBpbiBBVEUgbW9kZS4KKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPT0gMCkKKwl7CisJCWlmICgocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJJiYgKElORlJBX09OKHBBZCkKKwkJCQl8fCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSkKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCSkKKwkJeworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUgJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlIHw9IDB4MTA7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gRW5kIG9mIFNDQU4sIHJlc3RvcmUgdG8gNDBNSHogY2hhbm5lbCAlZCwgVG90YWwgQlNTWyUwMmRdXG4iLHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBwQWQtPlNjYW5UYWIuQnNzTnIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gRW5kIG9mIFNDQU4sIHJlc3RvcmUgdG8gY2hhbm5lbCAlZCwgVG90YWwgQlNTWyUwMmRdXG4iLHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+U2NhblRhYi5Cc3NOcikpOworCQl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJLy8KKwkJCS8vIFRvIHByZXZlbnQgZGF0YSBsb3N0LgorCQkJLy8gU2VuZCBhbiBOVUxMIGRhdGEgd2l0aCB0dXJuZWQgUFNNIGJpdCBvbiB0byBjdXJyZW50IGFzc29jaWF0ZWQgQVAgYmVmb3JlIFNDQU4gcHJvZ3Jlc3MuCisJCQkvLyBOb3csIHdlIG5lZWQgdG8gc2VuZCBhbiBOVUxMIGRhdGEgd2l0aCB0dXJuZWQgUFNNIGJpdCBvZmYgdG8gQVAsIHdoZW4gc2NhbiBwcm9ncmVzcyBkb25lCisJCQkvLworCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJiAoSU5GUkFfT04ocEFkKSkpCisJCQl7CisJCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7CisJCQkJaWYgKE5TdGF0dXMJPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQl7CisJCQkJCXBIZHI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsIHBIZHI4MDIxMSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJCXBIZHI4MDIxMS0+RHVyYXRpb24gPSAwOworCQkJCQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCQkJCQlwSGRyODAyMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKKworCQkJCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVNjYW5SZXFBY3Rpb24gLS0gU2VuZCBQU00gRGF0YSBmcmFtZVxuIikpOworCQkJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQkJCX0KKwkJCX0KKworCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKwl9CisjaWZkZWYgUlQyODcwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJZWxzZSBpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwl7CisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCU1sbWVDbnRsQ29uZmlybShwQWQsIE1UMl9TQ0FOX0NPTkYsIE1MTUVfRkFJTF9OT19SRVNPVVJDRSk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCWVsc2UKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJLy8gQkJQIGFuZCBSRiBhcmUgbm90IGFjY2Vzc2libGUgaW4gUFMgbW9kZSwgd2UgaGFzIHRvIHdha2UgdGhlbSB1cCBmaXJzdAorCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCisJCQkvLyBsZWF2ZSBQU00gZHVyaW5nIHNjYW5uaW5nLiBvdGhlcndpc2Ugd2UgbWF5IGxvc3QgUHJvYmVSc3AgJiBCRUFDT04KKwkJCWlmIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCisJCQkJTWxtZVNldFBzbUJpdChwQWQsIFBXUl9BQ1RJVkUpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCwgVFJVRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPiAxNCkKKwkJCXsKKwkJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpKQorCQkJCXsKKwkJCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCQkJCVNjYW5UaW1lSW41Z0NoYW5uZWwgPSBNSU5fQ0hBTk5FTF9USU1FOworCQkJCX0KKwkJCX0KKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8gUm9nZXIgc3luYyBDYXJyaWVyCisJCQkvLyBjYXJyaWVyIGRldGVjdGlvbgorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID09IFRSVUUpCisJCQl7CisJCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCQkJU2NhblRpbWVJbjVnQ2hhbm5lbCA9IE1JTl9DSEFOTkVMX1RJTUU7CisJCQl9CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCQl9CisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkvL0dsb2JhbCBjb3VudHJ5IGRvbWFpbihjaDEtMTE6YWN0aXZlIHNjYW4sIGNoMTItMTQgcGFzc2l2ZSBzY2FuKQorCQlpZiAoKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KSAmJiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPj0gMTIpICYmICgocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiAmIDB4N2YpID09IFJFR0lPTl8zMV9CR19CQU5EKSkKKwkJeworCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCX0KKworCQkvLyBXZSBuZWVkIHRvIHNob3J0ZW4gYWN0aXZlIHNjYW4gdGltZSBpbiBvcmRlciBmb3IgV1pDIGNvbm5lY3QgaXNzdWUKKwkJLy8gQ2huYWdlIHRoZSBjaGFubmVsIHNjYW4gdGltZSBmb3IgQ0lTQ08gc3R1ZmYgYmFzZWQgb24gaXRzIElBUFAgYW5ub3VuY2VtZW50CisJCWlmIChTY2FuVHlwZSA9PSBGQVNUX1NDQU5fQUNUSVZFKQorCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBGQVNUX0FDVElWRV9TQ0FOX1RJTUUpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQllbHNlIGlmICgoKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFKSB8fAorCQkJCShTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX1BBU1NJVkUpIHx8CisJCQkJKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSB8fAorCQkJCShTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgPCAyNSkKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsIHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lICogMik7CisJCQllbHNlCisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJZWxzZSAvLyBtdXN0IGJlIFNDQU5fUEFTU0lWRSBvciBTQ0FOX0FDVElWRQorCQl7CisJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCXx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFHTl9NSVhFRCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCSkKKwkJCXsKKwkJCQlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPiAxNCkKKwkJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBTY2FuVGltZUluNWdDaGFubmVsKTsKKwkJCQllbHNlCisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBNSU5fQ0hBTk5FTF9USU1FKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsIE1BWF9DSEFOTkVMX1RJTUUpOworCQl9CisKKwkJaWYgKChTY2FuVHlwZSA9PSBTQ0FOX0FDVElWRSkgfHwgKFNjYW5UeXBlID09IEZBU1RfU0NBTl9BQ1RJVkUpIHx8CisJCQkoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19BQ1RJVkUpKQorCQl7CisJCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gU2Nhbk5leHRDaGFubmVsKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxcbiIpKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJCQkJU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworCQkJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9DT05GLCAyLCAmU3RhdHVzKTsKKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCBicm9hZGNhc3QgcHJvYmUgcmVxdWVzdCBpZiBhY3RpdmUgc2NhbiBpcyBpbiBlZmZlY3QuCisJCQlpZiAoKFNjYW5UeXBlID09IFNDQU5fQUNUSVZFKSB8fCAoU2NhblR5cGUgPT0gRkFTVF9TQ0FOX0FDVElWRSkKKwkJCQkpCisJCQkJU3NpZExlbiA9IHBBZC0+TWxtZUF1eC5Tc2lkTGVuOworCQkJZWxzZQorCQkJCVNzaWRMZW4gPSAwOworCisJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkhkcjgwMjExLCBTVUJUWVBFX1BST0JFX1JFUSwgMCwgQlJPQURDQVNUX0FERFIsIEJST0FEQ0FTVF9BRERSKTsKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAmSGRyODAyMTEsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkTGVuLAorCQkJCQkJCSAgU3NpZExlbiwJCQkgICAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiwKKwkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW4sICBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCisJCQlpZiAocEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbikKKwkJCXsKKwkJCQlVTE9ORyBUbXA7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXAsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuLAorCQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW4sICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcDsKKwkJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKKwkJCXsKKwkJCQlVTE9ORwlUbXA7CisJCQkJVUNIQVIJSHRMZW47CisJCQkJVUNIQVIJQlJPQURDT01bNF0gPSB7MHgwLCAweDkwLCAweDRjLCAweDMzfTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJSFRfQ0FQQUJJTElUWV9JRSBIdENhcGFiaWxpdHlUbXA7CisjZW5kaWYKKwkJCQlpZiAocEFkLT5iQnJvYWRDb21IVCA9PSBUUlVFKQorCQkJCXsKKwkJCQkJSHRMZW4gPSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuICsgNDsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pKTsKKworCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdExlbiwKKwkJCQkJCQkJCTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbHNlCisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmV3BhSWUsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCQkJNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCUk9BRENPTVswXSwKKwkJCQkJCQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4sICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUh0TGVuID0gcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbjsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksIFNJWkVfSFRfQ0FQX0lFKTsKKwkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykpOworCisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCQlIdExlbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbHNlCisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCQlIdExlbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCQkJfQorCQkJCUZyYW1lTGVuICs9IFRtcDsKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLmIyMDQwQ29leGlzdFNjYW5TdXAgPT0gMSkKKwkJCQl7CisJCQkJCVVMT05HCQlUbXA7CisJCQkJCUh0TGVuID0gMTsKKwkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkgIDEsCQkJCQkmRXh0SHRDYXBJZSwKKwkJCQkJCQkJCSAgMSwJCQkJCSZIdExlbiwKKwkJCQkJCQkJCSAgMSwgICAgICAgICAgCQkJJnBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLndvcmQsCisJCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQkJCQlGcmFtZUxlbiArPSBUbXA7CisJCQkJfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCX0KKworCQkvLyBGb3IgU0NBTl9DSVNDT19QQVNTSVZFLCBkbyBub3RoaW5nIGFuZCBzaWxlbnRseSB3YWl0IGZvciBiZWFjb24gb3Igb3RoZXIgcHJvYmUgcmVwb25zZQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU0NBTl9MSVNURU47CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwl9Cit9CisKK1ZPSUQgTWd0UHJvYlJlcU1hY0hlYWRlckluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUIFBIRUFERVJfODAyXzExIHBIZHI4MDIxMSwKKwlJTiBVQ0hBUiBTdWJUeXBlLAorCUlOIFVDSEFSIFRvRHMsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcEJzc2lkKQoreworCU5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7CisJcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU3ViVHlwZTsKKwlpZiAoU3ViVHlwZSA9PSBTVUJUWVBFX0FDSykKKwkJcEhkcjgwMjExLT5GQy5UeXBlID0gQlRZUEVfQ05UTDsKKwlwSGRyODAyMTEtPkZDLlRvRHMgPSBUb0RzOworCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMSwgcERBKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMywgcEJzc2lkKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fd3BhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzMyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV93cGEuYwpAQCAtMCwwICsxLDE2MDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJd3BhLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKYW4JTGVlCQkwMy0wNy0yMgkJSW5pdGlhbAorCVBhdWwgTGluCTAzLTExLTI4CQlNb2RpZnkgZm9yIHN1cHBsaWNhbnQKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisvLyBXUEEgT1VJCitVQ0hBUgkJT1VJX1dQQV9OT05FX0FLTVs0XQkJPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMH07CitVQ0hBUiAgICAgICBPVUlfV1BBX1ZFUlNJT05bNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAxfTsKK1VDSEFSICAgICAgIE9VSV9XUEFfVEtJUFs0XSAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMn07CitVQ0hBUiAgICAgICBPVUlfV1BBX0NDTVBbNF0gICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDR9OworVUNIQVIgICAgICAgT1VJX1dQQV84MDIxWF9BS01bNF0JPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMX07CitVQ0hBUiAgICAgICBPVUlfV1BBX1BTS19BS01bNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAyfTsKKy8vIFdQQTIgT1VJCitVQ0hBUiAgICAgICBPVUlfV1BBMl9XRVA0MFs0XSAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDF9OworVUNIQVIgICAgICAgT1VJX1dQQTJfVEtJUFs0XSAgICAgICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwMn07CitVQ0hBUiAgICAgICBPVUlfV1BBMl9DQ01QWzRdICAgICAgICA9IHsweDAwLCAweDBGLCAweEFDLCAweDA0fTsKK1VDSEFSICAgICAgIE9VSV9XUEEyXzgwMjFYX0FLTVs0XSAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDF9OworVUNIQVIgICAgICAgT1VJX1dQQTJfUFNLX0FLTVs0XSAgIAk9IHsweDAwLCAweDBGLCAweEFDLCAweDAyfTsKKy8vIE1TQSBPVUkKK1VDSEFSICAgCU9VSV9NU0FfODAyMVhfQUtNWzRdICAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDV9OwkJLy8gTm90IHlldCBmaW5hbCAtIElFRUUgODAyLjExcy1EMS4wNgorVUNIQVIgICAJT1VJX01TQV9QU0tfQUtNWzRdICAgCT0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDZ9OwkJLy8gTm90IHlldCBmaW5hbCAtIElFRUUgODAyLjExcy1EMS4wNgorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJVGhlIHBzZXVkby1yYW5kb20gZnVuY3Rpb24oUFJGKSB0aGF0IGhhc2hlcyB2YXJpb3VzIGlucHV0cyB0bworCQlkZXJpdmUgYSBwc2V1ZG8tcmFuZG9tIHZhbHVlLiBUbyBhZGQgbGl2ZW5lc3MgdG8gdGhlIHBzZXVkby1yYW5kb20KKwkJdmFsdWUsIGEgbm9uY2Ugc2hvdWxkIGJlIG9uZSBvZiB0aGUgaW5wdXRzLgorCisJCUl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgUFRLLCBHVEsgb3Igc29tZSBzcGVjaWZpYyByYW5kb20gdmFsdWUuCisKKwlBcmd1bWVudHM6CisJCVVDSEFSCSprZXksCQktCXRoZSBrZXkgbWF0ZXJpYWwgZm9yIEhNQUNfU0hBMSB1c2UKKwkJSU5UCQlrZXlfbGVuCQktCXRoZSBsZW5ndGggb2Yga2V5CisJCVVDSEFSCSpwcmVmaXgJCS0JYSBwcmVmaXggbGFiZWwKKwkJSU5UCQlwcmVmaXhfbGVuCS0JdGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwKKwkJVUNIQVIJKmRhdGEJCS0JYSBzcGVjaWZpYyBkYXRhIHdpdGggdmFyaWFibGUgbGVuZ3RoCisJCUlOVAkJZGF0YV9sZW4JLQl0aGUgbGVuZ3RoIG9mIGEgc3BlY2lmaWMgZGF0YQorCQlJTlQJCWxlbgkJCS0JdGhlIG91dHB1dCBsZW5naHQKKworCVJldHVybiBWYWx1ZToKKwkJVUNIQVIJKm91dHB1dAkJLQl0aGUgY2FsY3VsYXRlZCByZXN1bHQKKworCU5vdGU6CisJCTgwMi4xMWktMjAwNAlBbm5leCBILjMKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUFJGKAorCUlOCVVDSEFSCSprZXksCisJSU4JSU5UCQlrZXlfbGVuLAorCUlOCVVDSEFSCSpwcmVmaXgsCisJSU4JSU5UCQlwcmVmaXhfbGVuLAorCUlOCVVDSEFSCSpkYXRhLAorCUlOCUlOVAkJZGF0YV9sZW4sCisJT1VUCVVDSEFSCSpvdXRwdXQsCisJSU4JSU5UCQlsZW4pCit7CisJSU5UCQlpOworICAgIFVDSEFSICAgKmlucHV0OworCUlOVAkJY3VycmVudGluZGV4ID0gMDsKKwlJTlQJCXRvdGFsX2xlbjsKKworCS8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW5wdXQKKwlvc19hbGxvY19tZW0oTlVMTCwgKFBVQ0hBUiAqKSZpbnB1dCwgMTAyNCk7CisKKyAgICBpZiAoaW5wdXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiEhIVBSRjogbm8gbWVtb3J5ISEhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKwkvLyBHZW5lcmF0ZSBjb25jYXRlbmF0aW9uIGlucHV0CisJTmRpc01vdmVNZW1vcnkoaW5wdXQsIHByZWZpeCwgcHJlZml4X2xlbik7CisKKwkvLyBDb25jYXRlbmF0ZSBhIHNpbmdsZSBvY3RldCBjb250YWluaW5nIDAKKwlpbnB1dFtwcmVmaXhfbGVuXSA9CTA7CisKKwkvLyBDb25jYXRlbmF0ZSBzcGVjaWZpYyBkYXRhCisJTmRpc01vdmVNZW1vcnkoJmlucHV0W3ByZWZpeF9sZW4gKyAxXSwgZGF0YSwgZGF0YV9sZW4pOworCXRvdGFsX2xlbiA9CXByZWZpeF9sZW4gKyAxICsgZGF0YV9sZW47CisKKwkvLyBDb25jYXRlbmF0ZSBhIHNpbmdsZSBvY3RldCBjb250YWluaW5nIDAKKwkvLyBUaGlzIG9jdGV0IHNoYWxsIGJlIHVwZGF0ZSBsYXRlcgorCWlucHV0W3RvdGFsX2xlbl0gPSAwOworCXRvdGFsX2xlbisrOworCisJLy8gSXRlcmF0ZSB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdCBieSBobWFjLXNoYS0xCisJLy8gVGhlbiBjb25jYXRlbmF0ZSB0byBsYXN0IHJlc3VsdAorCWZvcgkoaSA9IDA7CWkgPAkobGVuICsgMTkpIC8gMjA7IGkrKykKKwl7CisJCUhNQUNfU0hBMShpbnB1dCwgdG90YWxfbGVuLAlrZXksIGtleV9sZW4sICZvdXRwdXRbY3VycmVudGluZGV4XSk7CisJCWN1cnJlbnRpbmRleCArPQkyMDsKKworCQkvLyB1cGRhdGUgdGhlIGxhc3Qgb2N0ZXQKKwkJaW5wdXRbdG90YWxfbGVuIC0gMV0rKzsKKwl9CisgICAgb3NfZnJlZV9tZW0oTlVMTCwgaW5wdXQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSXQgdXRpbGl6ZXMgUFJGLTM4NCBvciBQUkYtNTEyIHRvIGRlcml2ZSBzZXNzaW9uLXNwZWNpZmljIGtleXMgZnJvbSBhIFBNSy4KKwkJSXQgc2hhbGwgYmUgY2FsbGVkIGJ5IDQtd2F5IGhhbmRzaGFrZSBwcm9jZXNzaW5nLgorCisJQXJndW1lbnRzOgorCQlwQWQgCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorCQlQTUsJCS0JcG9pbnRlciB0byBQTUsKKwkJQU5vbmNlCS0JcG9pbnRlciB0byBBTm9uY2UKKwkJQUEJCS0JcG9pbnRlciB0byBBdXRoZW50aWNhdG9yIEFkZHJlc3MKKwkJU05vbmNlCS0JcG9pbnRlciB0byBTTm9uY2UKKwkJU0EJCS0JcG9pbnRlciB0byBTdXBwbGljYW50IEFkZHJlc3MKKwkJbGVuCQktCWluZGljYXRlIHRoZSBsZW5ndGggb2YgUFRLIChvY3RldCkKKworCVJldHVybiBWYWx1ZToKKwkJT3V0cHV0CQlwb2ludGVyIHRvIHRoZSBQVEsKKworCU5vdGU6CisJCVJlZmVyIHRvIElFRUUgODAyLjExaS0yMDA0IDguNS4xLjIKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgV3BhQ291bnRQVEsoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJKlBNSywKKwlJTglVQ0hBUgkqQU5vbmNlLAorCUlOCVVDSEFSCSpBQSwKKwlJTglVQ0hBUgkqU05vbmNlLAorCUlOCVVDSEFSCSpTQSwKKwlPVVQJVUNIQVIJKm91dHB1dCwKKwlJTglVSU5UCWxlbikKK3sKKwlVQ0hBUgljb25jYXRlbmF0aW9uWzc2XTsKKwlVSU5UCUN1cnJQb3MgPSAwOworCVVDSEFSCXRlbXBbMzJdOworCVVDSEFSCVByZWZpeFtdID0geydQJywgJ2EnLCAnaScsICdyJywgJ3cnLCAnaScsICdzJywgJ2UnLCAnICcsICdrJywgJ2UnLCAneScsICcgJywKKwkJCQkJCSdlJywgJ3gnLCAncCcsICdhJywgJ24nLCAncycsICdpJywgJ28nLCAnbid9OworCisJLy8gaW5pdGlhdGUgdGhlIGNvbmNhdGVuYXRpb24gaW5wdXQKKwlOZGlzWmVyb01lbW9yeSh0ZW1wLCBzaXplb2YodGVtcCkpOworCU5kaXNaZXJvTWVtb3J5KGNvbmNhdGVuYXRpb24sIDc2KTsKKworCS8vIEdldCBzbWFsbGVyIGFkZHJlc3MKKwlpZiAoUlRNUENvbXBhcmVNZW1vcnkoU0EsIEFBLCA2KSA9PSAxKQorCQlOZGlzTW92ZU1lbW9yeShjb25jYXRlbmF0aW9uLCBBQSwgNik7CisJZWxzZQorCQlOZGlzTW92ZU1lbW9yeShjb25jYXRlbmF0aW9uLCBTQSwgNik7CisJQ3VyclBvcyArPSA2OworCisJLy8gR2V0IGxhcmdlciBhZGRyZXNzCisJaWYgKFJUTVBDb21wYXJlTWVtb3J5KFNBLCBBQSwgNikgPT0gMSkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIFNBLCA2KTsKKwllbHNlCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBBQSwgNik7CisKKwkvLyBzdG9yZSB0aGUgbGFyZ2VyIG1hYyBhZGRyZXNzIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlIG9mCisJLy8gcmFsaW5rIHByb3ByaWV0YXJ5IFNUQS1rZXkgaXNzdWUKKwlOZGlzTW92ZU1lbW9yeSh0ZW1wLCAmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgTUFDX0FERFJfTEVOKTsKKwlDdXJyUG9zICs9IDY7CisKKwkvLyBHZXQgc21hbGxlciBOb25jZQorCWlmIChSVE1QQ29tcGFyZU1lbW9yeShBTm9uY2UsIFNOb25jZSwgMzIpID09IDApCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCB0ZW1wLCAzMik7CS8vIHBhdGNoIGZvciByYWxpbmsgcHJvcHJpZXRhcnkgU1RBLWtleSBpc3N1ZQorCWVsc2UgaWYgKFJUTVBDb21wYXJlTWVtb3J5KEFOb25jZSwgU05vbmNlLCAzMikgPT0gMSkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIFNOb25jZSwgMzIpOworCWVsc2UKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIEFOb25jZSwgMzIpOworCUN1cnJQb3MgKz0gMzI7CisKKwkvLyBHZXQgbGFyZ2VyIE5vbmNlCisJaWYgKFJUTVBDb21wYXJlTWVtb3J5KEFOb25jZSwgU05vbmNlLCAzMikgPT0gMCkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIHRlbXAsIDMyKTsJLy8gcGF0Y2ggZm9yIHJhbGluayBwcm9wcmlldGFyeSBTVEEta2V5IGlzc3VlCisJZWxzZSBpZiAoUlRNUENvbXBhcmVNZW1vcnkoQU5vbmNlLCBTTm9uY2UsIDMyKSA9PSAxKQorCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgQU5vbmNlLCAzMik7CisJZWxzZQorCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgU05vbmNlLCAzMik7CisJQ3VyclBvcyArPSAzMjsKKworCWhleF9kdW1wKCJjb25jYXRlbmF0aW9uPSIsIGNvbmNhdGVuYXRpb24sIDc2KTsKKworCS8vIFVzZSBQUkYgdG8gZ2VuZXJhdGUgUFRLCisJUFJGKFBNSywgTEVOX01BU1RFUl9LRVksIFByZWZpeCwgMjIsIGNvbmNhdGVuYXRpb24sIDc2LCBvdXRwdXQsIGxlbik7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUdlbmVyYXRlIHJhbmRvbSBudW1iZXIgYnkgc29mdHdhcmUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0CisJCW1hY0FkZHIJLQlwb2ludGVyIHRvIGxvY2FsIE1BQyBhZGRyZXNzCisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCQk4MDIuMWlpLTIwMDQgIEFubmV4IEguNQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlHZW5SYW5kb20oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQkqbWFjQWRkciwKKwlPVVQJVUNIQVIJCQkqcmFuZG9tKQoreworCUlOVAkJaSwgY3VycjsKKwlVQ0hBUglsb2NhbFs4MF0sIEtleUNvdW50ZXJbMzJdOworCVVDSEFSCXJlc3VsdFs4MF07CisJVUxPTkcJQ3VycmVudFRpbWU7CisJVUNIQVIJcHJlZml4W10gPSB7J0knLCAnbicsICdpJywgJ3QnLCAnICcsICdDJywgJ28nLCAndScsICduJywgJ3QnLCAnZScsICdyJ307CisKKwkvLyBaZXJvIHRoZSByZWxhdGVkIGluZm9ybWF0aW9uCisJTmRpc1plcm9NZW1vcnkocmVzdWx0LCA4MCk7CisJTmRpc1plcm9NZW1vcnkobG9jYWwsIDgwKTsKKwlOZGlzWmVyb01lbW9yeShLZXlDb3VudGVyLCAzMik7CisKKwlmb3IJKGkgPSAwOwlpIDwJMzI7CWkrKykKKwl7CisJCS8vIGNvcHkgdGhlIGxvY2FsIE1BQyBhZGRyZXNzCisJCUNPUFlfTUFDX0FERFIobG9jYWwsIG1hY0FkZHIpOworCQljdXJyID0JTUFDX0FERFJfTEVOOworCisJCS8vIGNvbmNhdGVuYXRlIHRoZSBjdXJyZW50IHRpbWUKKwkJTmRpc0dldFN5c3RlbVVwVGltZSgmQ3VycmVudFRpbWUpOworCQlOZGlzTW92ZU1lbW9yeSgmbG9jYWxbY3Vycl0sICAmQ3VycmVudFRpbWUsCXNpemVvZihDdXJyZW50VGltZSkpOworCQljdXJyICs9CXNpemVvZihDdXJyZW50VGltZSk7CisKKwkJLy8gY29uY2F0ZW5hdGUgdGhlIGxhc3QgcmVzdWx0CisJCU5kaXNNb3ZlTWVtb3J5KCZsb2NhbFtjdXJyXSwgIHJlc3VsdCwgMzIpOworCQljdXJyICs9CTMyOworCisJCS8vIGNvbmNhdGVuYXRlIGEgdmFyaWFibGUKKwkJTmRpc01vdmVNZW1vcnkoJmxvY2FsW2N1cnJdLCAgJmksICAyKTsKKwkJY3VyciArPQkyOworCisJCS8vIGNhbGN1bGF0ZSB0aGUgcmVzdWx0CisJCVBSRihLZXlDb3VudGVyLCAzMiwgcHJlZml4LDEyLCBsb2NhbCwgY3VyciwgcmVzdWx0LCAzMik7CisJfQorCisJTmRpc01vdmVNZW1vcnkocmFuZG9tLCByZXN1bHQsCTMyKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJ1aWxkIGNpcGhlciBzdWl0ZSBpbiBSU04tSUUuCisJCUl0IG9ubHkgc2hhbGwgYmUgY2FsbGVkIGJ5IFJUTVBNYWtlUlNOSUUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlFbGVtZW50SUQJLQlpbmRpY2F0ZSB0aGUgV1BBMSBvciBXUEEyCisgICAgCVdlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKwkJYk1peENpcGhlcgktCWEgYm9vbGVhbiB0byBpbmRpY2F0ZSB0aGUgcGFpcndpc2UgY2lwaGVyIGFuZCBncm91cAorCQkJCQkJY2lwaGVyIGFyZSB0aGUgc2FtZSBvciBub3QKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgVk9JRCBSVE1QSW5zZXJ0UnNuSWVDaXBoZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlFbGVtZW50SUQsCisJSU4JVUlOVAkJCVdlcFN0YXR1cywKKwlJTglCT09MRUFOCQkJYk1peENpcGhlciwKKwlJTglVQ0hBUgkJCUZsZXhpYmxlQ2lwaGVyLAorCU9VVAlQVUNIQVIJCQlwUnNuSWUsCisJT1VUCVVDSEFSCQkJKnJzbl9sZW4pCit7CisJVUNIQVIJUGFpcndpc2VDbnQ7CisKKwkqcnNuX2xlbiA9IDA7CisKKwkvLyBkZWNpZGUgV1BBMiBvciBXUEExCisJaWYgKEVsZW1lbnRJRCA9PSBXcGEySWUpCisJeworCQlSU05JRTIJKnBSc25pZV9jaXBoZXIgPSAoUlNOSUUyKilwUnNuSWU7CisKKwkJLy8gQXNzaWduIHRoZSB2ZXJzb24gYXMgMQorCQlwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gMTsKKworICAgICAgICBzd2l0Y2ggKFdlcFN0YXR1cykKKyAgICAgICAgeworICAgICAgICAJLy8gVEtJUCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1RLSVAsIDQpOworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBMl9US0lQLCA0KTsKKyAgICAgICAgICAgICAgICAqcnNuX2xlbiA9IHNpemVvZihSU05JRTIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkvLyBBRVMgbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOgorCQkJCWlmIChiTWl4Q2lwaGVyKQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQTJfVEtJUCwgNCk7CisJCQkJZWxzZQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQTJfQ0NNUCwgNCk7CisgICAgICAgICAgICAgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEEyX0NDTVAsIDQpOworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCS8vIFRLSVAtQUVTIG1peCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1RLSVAsIDQpOworCisJCQkJUGFpcndpc2VDbnQgPSAxOworCQkJCS8vIEluc2VydCBXUEEyIFRLSVAgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCWlmIChNSVhfQ0lQSEVSX1dQQTJfVEtJUF9PTihGbGV4aWJsZUNpcGhlcikpCisJCQkJeworICAgICAgICAgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEEyX1RLSVAsIDQpOworCQkJCQkvLyBJbnNlcnQgV1BBMiBBRVMgYXMgdGhlIHNlY29uZGFyeSBwYWlyd2lzZSBjaXBoZXIKKwkJCQkJaWYgKE1JWF9DSVBIRVJfV1BBMl9BRVNfT04oRmxleGlibGVDaXBoZXIpKQorCQkJCQl7CisgICAgICAgICAgICAgICAgCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWkgKyA0LCBPVUlfV1BBMl9DQ01QLCA0KTsKKwkJCQkJCVBhaXJ3aXNlQ250ID0gMjsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBJbnNlcnQgV1BBMiBBRVMgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEEyX0NDTVAsIDQpOworCQkJCX0KKworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IFBhaXJ3aXNlQ250OworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFMikgKyAoNCAqIChQYWlyd2lzZUNudCAtIDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisJCS8vIHN3YXAgZm9yIGJpZy1lbmRpYW4gcGxhdGZvcm0KKwkJcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnZlcnNpb24pOworCSAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT51Y291bnQpOworCX0KKwllbHNlCisJeworCQlSU05JRQkqcFJzbmllX2NpcGhlciA9IChSU05JRSopcFJzbkllOworCisJCS8vIEFzc2lnbiBPVUkgYW5kIHZlcnNpb24KKwkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+b3VpLCBPVUlfV1BBX1ZFUlNJT04sIDQpOworICAgICAgICBwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gMTsKKworCQlzd2l0Y2ggKFdlcFN0YXR1cykKKwkJeworCQkJLy8gVEtJUCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfVEtJUCwgNCk7CisgICAgICAgICAgICAgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEFfVEtJUCwgNCk7CisgICAgICAgICAgICAgICAgKnJzbl9sZW4gPSBzaXplb2YoUlNOSUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkvLyBBRVMgbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOgorCQkJCWlmIChiTWl4Q2lwaGVyKQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9US0lQLCA0KTsKKwkJCQllbHNlCisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBX0NDTVAsIDQpOworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBX0NDTVAsIDQpOworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJLy8gVEtJUC1BRVMgbWl4IG1vZGUKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZDoKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9US0lQLCA0KTsKKworCQkJCVBhaXJ3aXNlQ250ID0gMTsKKwkJCQkvLyBJbnNlcnQgV1BBIFRLSVAgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCWlmIChNSVhfQ0lQSEVSX1dQQV9US0lQX09OKEZsZXhpYmxlQ2lwaGVyKSkKKwkJCQl7CisgICAgICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSwgT1VJX1dQQV9US0lQLCA0KTsKKwkJCQkJLy8gSW5zZXJ0IFdQQSBBRVMgYXMgdGhlIHNlY29uZGFyeSBwYWlyd2lzZSBjaXBoZXIKKwkJCQkJaWYgKE1JWF9DSVBIRVJfV1BBX0FFU19PTihGbGV4aWJsZUNpcGhlcikpCisJCQkJCXsKKyAgICAgICAgICAgICAgICAJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSArIDQsIE9VSV9XUEFfQ0NNUCwgNCk7CisJCQkJCQlQYWlyd2lzZUNudCA9IDI7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gSW5zZXJ0IFdQQSBBRVMgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEFfQ0NNUCwgNCk7CisJCQkJfQorCisgICAgICAgICAgICAgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gUGFpcndpc2VDbnQ7CisgICAgICAgICAgICAgICAgKnJzbl9sZW4gPSBzaXplb2YoUlNOSUUpICsgKDQgKiAoUGFpcndpc2VDbnQgLSAxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCQkvLyBzd2FwIGZvciBiaWctZW5kaWFuIHBsYXRmb3JtCisJCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT52ZXJzaW9uKTsKKwkgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dWNvdW50KTsKKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJ1aWxkIEFLTSBzdWl0ZSBpbiBSU04tSUUuCisJCUl0IG9ubHkgc2hhbGwgYmUgY2FsbGVkIGJ5IFJUTVBNYWtlUlNOSUUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlFbGVtZW50SUQJLQlpbmRpY2F0ZSB0aGUgV1BBMSBvciBXUEEyCisgICAgCUF1dGhNb2RlCS0JaW5kaWNhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUKKwkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIFJUTVBJbnNlcnRSc25JZUFLTSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglVQ0hBUgkJCUVsZW1lbnRJRCwKKwlJTglVSU5UCQkJQXV0aE1vZGUsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlPVVQJUFVDSEFSCQkJcFJzbkllLAorCU9VVAlVQ0hBUgkJCSpyc25fbGVuKQoreworCVJTTklFX0FVVEgJCSpwUnNuaWVfYXV0aDsKKworCXBSc25pZV9hdXRoID0gKFJTTklFX0FVVEgqKShwUnNuSWUgKyAoKnJzbl9sZW4pKTsKKworCS8vIGRlY2lkZSBXUEEyIG9yIFdQQTEKKwlpZiAoRWxlbWVudElEID09IFdwYTJJZSkKKwl7CisJCXN3aXRjaCAoQXV0aE1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMjoKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTI6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwgT1VJX1dQQTJfODAyMVhfQUtNLCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOgorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSzoKKyAgICAgICAgICAgICAgICBwUnNuaWVfYXV0aC0+YWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocFJzbmllX2F1dGgtPmF1dGhbMF0ub3VpLCBPVUlfV1BBMl9QU0tfQUtNLCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCX0KKwllbHNlCisJeworCQlzd2l0Y2ggKEF1dGhNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQToKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTI6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2F1dGgtPmF1dGhbMF0ub3VpLCBPVUlfV1BBXzgwMjFYX0FLTSwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOgorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSzoKKyAgICAgICAgICAgICAgICBwUnNuaWVfYXV0aC0+YWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksIE9VSV9XUEFfUFNLX0FLTSwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZToKKyAgICAgICAgICAgICAgICBwUnNuaWVfYXV0aC0+YWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksIE9VSV9XUEFfTk9ORV9BS00sIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisJfQorCisJcFJzbmllX2F1dGgtPmFjb3VudCA9IGNwdTJsZTE2KHBSc25pZV9hdXRoLT5hY291bnQpOworCisJKCpyc25fbGVuKSArPSBzaXplb2YoUlNOSUVfQVVUSCk7CS8vIHVwZGF0ZSBjdXJyZW50IFJTTklFIGxlbmd0aAorCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCdWlsZCBjYXBhYmlsaXR5IGluIFJTTi1JRS4KKwkJSXQgb25seSBzaGFsbCBiZSBjYWxsZWQgYnkgUlRNUE1ha2VSU05JRS4KKworCUFyZ3VtZW50czoKKwkJcEFkCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0CisgICAgCUVsZW1lbnRJRAktCWluZGljYXRlIHRoZSBXUEExIG9yIFdQQTIKKwkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIFJUTVBJbnNlcnRSc25JZUNhcCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglVQ0hBUgkJCUVsZW1lbnRJRCwKKwlJTglVQ0hBUgkJCWFwaWR4LAorCU9VVAlQVUNIQVIJCQlwUnNuSWUsCisJT1VUCVVDSEFSCQkJKnJzbl9sZW4pCit7CisJUlNOX0NBUEFCSUxJVElFUyAgICAqcFJTTl9DYXA7CisKKwkvLyBpdCBjb3VsZCBiZSBpZ25vcmVkIGluIFdQQTEgbW9kZQorCWlmIChFbGVtZW50SUQgPT0gV3BhSWUpCisJCXJldHVybjsKKworCXBSU05fQ2FwID0gKFJTTl9DQVBBQklMSVRJRVMqKShwUnNuSWUgKyAoKnJzbl9sZW4pKTsKKworCisJcFJTTl9DYXAtPndvcmQgPSBjcHUybGUxNihwUlNOX0NhcC0+d29yZCk7CisKKwkoKnJzbl9sZW4pICs9IHNpemVvZihSU05fQ0FQQUJJTElUSUVTKTsJLy8gdXBkYXRlIGN1cnJlbnQgUlNOSUUgbGVuZ3RoCisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQnVpbGQgUlNOIElFIGNvbnRleHQuIEl0IGlzIG5vdCBpbmNsdWRlZCBlbGVtZW50LUlEIGFuZCBsZW5ndGguCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlBdXRoTW9kZQktCWluZGljYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBtb2RlCisgICAgCVdlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKwkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUE1ha2VSU05JRSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEF1dGhNb2RlLAorICAgIElOICBVSU5UICAgICAgICAgICAgV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJYXBpZHgpCit7CisJUFVDSEFSCQlwUnNuSWUgPSBOVUxMOwkJCS8vIHByaW1hcnkgUlNOSUUKKwlVQ0hBUiAJCSpyc25pZWxlbl9jdXJfcCA9IDA7CS8vIHRoZSBsZW5ndGggb2YgdGhlIHByaW1hcnkgUlNOSUUKKwlVQ0hBUgkJKnJzbmllbGVuX2V4X2N1cl9wID0gMDsJLy8gdGhlIGxlbmd0aCBvZiB0aGUgc2Vjb25kYXJ5IFJTTklFCisJVUNIQVIJCVByaW1hcnlSc25pZTsKKwlCT09MRUFOCQliTWl4Q2lwaGVyID0gRkFMU0U7CS8vIGluZGljYXRlIHRoZSBwYWlyd2lzZSBhbmQgZ3JvdXAgY2lwaGVyIGFyZSBkaWZmZXJlbnQKKwlVQ0hBUgkJcF9vZmZzZXQ7CisJV1BBX01JWF9QQUlSX0NJUEhFUgkJRmxleGlibGVDaXBoZXIgPSBNSVhfQ0lQSEVSX05PVFVTRTsJLy8gaXQgcHJvdmlkZSB0aGUgbW9yZSBmbGV4aWJsZSBjaXBoZXIgY29tYmluYXRpb24gaW4gV1BBLVdQQTIgYW5kIFRLSVBBRVMgbW9kZQorCisJcnNuaWVsZW5fY3VyX3AgPSBOVUxMOworCXJzbmllbGVuX2V4X2N1cl9wID0gTlVMTDsKKworCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKwkJCXsKKwkJCQlpZiAoQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCQl7CisJCQkJLy8gU3VwcG9ydCBXUEFQU0sgb3IgV1BBMlBTSyBpbiBTVEEtSW5mcmEgbW9kZQorCQkJCS8vIFN1cHBvcnQgV1BBTm9uZSBpbiBTVEEtQWRob2MgbW9kZQorCQkJCWlmICgoQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorCQkJCQkoQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgJiYKKwkJCQkJKEF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCQkJCSkKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIj09PiBSVE1QTWFrZVJTTklFKFNUQSlcbiIpKTsKKworCQkJLy8gWmVybyBSU05JRSBjb250ZXh0CisJCQlwQWQtPlN0YUNmZy5SU05JRV9MZW4gPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUlNOX0lFLCBNQVhfTEVOX09GX1JTTklFKTsKKworCQkJLy8gUG9pbnRlciB0byBSU05JRQorCQkJcnNuaWVsZW5fY3VyX3AgPSAmcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCQkJcFJzbkllID0gcEFkLT5TdGFDZmcuUlNOX0lFOworCisJCQliTWl4Q2lwaGVyID0gcEFkLT5TdGFDZmcuYk1peENpcGhlcjsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCS8vIGluZGljYXRlIHByaW1hcnkgUlNOSUUgYXMgV1BBIG9yIFdQQTIKKwlpZiAoKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKwkJKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpIHx8CisJCShBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMikgfHwKKwkJKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLKSkKKwkJUHJpbWFyeVJzbmllID0gV3BhSWU7CisJZWxzZQorCQlQcmltYXJ5UnNuaWUgPSBXcGEySWU7CisKKwl7CisJCS8vIEJ1aWxkIHRoZSBwcmltYXJ5IFJTTklFCisJCS8vIDEuIGluc2VydCBjaXBoZXIgc3VpdGUKKwkJUlRNUEluc2VydFJzbkllQ2lwaGVyKHBBZCwgUHJpbWFyeVJzbmllLCBXZXBTdGF0dXMsIGJNaXhDaXBoZXIsIEZsZXhpYmxlQ2lwaGVyLCBwUnNuSWUsICZwX29mZnNldCk7CisKKwkJLy8gMi4gaW5zZXJ0IEFLTQorCQlSVE1QSW5zZXJ0UnNuSWVBS00ocEFkLCBQcmltYXJ5UnNuaWUsIEF1dGhNb2RlLCBhcGlkeCwgcFJzbkllLCAmcF9vZmZzZXQpOworCisJCS8vIDMuIGluc2VydCBjYXBhYmlsaXR5CisJCVJUTVBJbnNlcnRSc25JZUNhcChwQWQsIFByaW1hcnlSc25pZSwgYXBpZHgsIHBSc25JZSwgJnBfb2Zmc2V0KTsKKwl9CisKKwkvLyA0LiB1cGRhdGUgdGhlIFJTTklFIGxlbmd0aAorCSpyc25pZWxlbl9jdXJfcCA9IHBfb2Zmc2V0OworCisJaGV4X2R1bXAoIlRoZSBwcmltYXJ5IFJTTklFIiwgcFJzbkllLCAoKnJzbmllbGVuX2N1cl9wKSk7CisKKworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisJCUNoZWNrIHdoZXRoZXIgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIEVBUCBmcmFtZS4KKworCUFyZ3VtZW50czoKKwkJcEFkCQkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorCQlwRW50cnkJCQktCXBvaW50ZXIgdG8gYWN0aXZlIGVudHJ5CisJCXBEYXRhCQkJLQl0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJRGF0YUJ5dGVDb3VudCAJLQl0aGUgcmVjZWl2ZWQgZnJhbWUncyBsZW5ndGgKKwkJRnJvbVdoaWNoQlNTSUQJLQlpbmRpY2F0ZSB0aGUgaW50ZXJmYWNlIGluZGV4CisKKyAgICBSZXR1cm46CisgICAgICAgICBUUlVFIAkJCS0JVGhpcyBmcmFtZSBpcyBFQVAgZnJhbWUKKyAgICAgICAgIEZBTFNFIAkJCS0Jb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUTVBDaGVja1dQQWZyYW1lKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5LAorICAgIElOIFBVQ0hBUiAgICAgICAgICAgcERhdGEsCisgICAgSU4gVUxPTkcgICAgICAgICAgICBEYXRhQnl0ZUNvdW50LAorCUlOIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJVUxPTkcJQm9keV9sZW47CisJQk9PTEVBTiBDYW5jZWxsZWQ7CisKKworICAgIGlmKERhdGFCeXRlQ291bnQgPCAoTEVOR1RIXzgwMl8xX0ggKyBMRU5HVEhfRUFQT0xfSCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCisJLy8gU2tpcCBMTEMgaGVhZGVyCisgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShTTkFQXzgwMl8xSCwgcERhdGEsIDYpIHx8CisgICAgICAgIC8vIENpc2NvIDEyMDAgQVAgbWF5IHNlbmQgcGFja2V0IHdpdGggU05BUF9CUklER0VfVFVOTkVMCisgICAgICAgIE5kaXNFcXVhbE1lbW9yeShTTkFQX0JSSURHRV9UVU5ORUwsIHBEYXRhLCA2KSkKKyAgICB7CisgICAgICAgIHBEYXRhICs9IDY7CisgICAgfQorCS8vIFNraXAgMi1ieXRlcyBFQVBvTCB0eXBlCisgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShFQVBPTCwgcERhdGEsIDIpKQorICAgIHsKKyAgICAgICAgcERhdGEgKz0gMjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBzd2l0Y2ggKCoocERhdGErMSkpCisgICAgeworICAgICAgICBjYXNlIEVBUFBhY2tldDoKKwkJCUJvZHlfbGVuID0gKCoocERhdGErMik8PDgpIHwgKCoocERhdGErMykpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVjZWl2ZSBFQVAtUGFja2V0IGZyYW1lLCBUWVBFID0gMCwgTGVuZ3RoID0gJWxkXG4iLCBCb2R5X2xlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xTdGFydDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wtU3RhcnQgZnJhbWUsIFRZUEUgPSAxIFxuIikpOworCQkJaWYgKHBFbnRyeS0+RW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmcgIT0gRUFQT0xfU1RBUlRfRElTQUJMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDYW5jZWwgdGhlIEVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nIFxuIikpOworICAgICAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEVudHJ5LT5FbnF1ZXVlU3RhcnRGb3JQU0tUaW1lciwgJkNhbmNlbGxlZCk7CisgICAgICAgICAgICAgICAgcEVudHJ5LT5FbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyA9IEVBUE9MX1NUQVJUX0RJU0FCTEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFQVBPTExvZ29mZjoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0xMb2dvZmYgZnJhbWUsIFRZUEUgPSAyIFxuIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xLZXk6CisJCQlCb2R5X2xlbiA9ICgqKHBEYXRhKzIpPDw4KSB8ICgqKHBEYXRhKzMpKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wtS2V5IGZyYW1lLCBUWVBFID0gMywgTGVuZ3RoID0gJWxkXG4iLCBCb2R5X2xlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xBU0ZBbGVydDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0xBU0ZBbGVydCBmcmFtZSwgVFlQRSA9IDQgXG4iKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIEVOQ1JZUFQgQUVTIEdUSyBiZWZvcmUgc2VuZGluZyBpbiBFQVBPTCBmcmFtZS4KKyAgICAgICAgQUVTIEdUSyBsZW5ndGggPSAxMjggYml0LCAgc28gZml4IGJsb2NrcyBmb3IgYWVzLWtleS13cmFwIGFzIDIgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZWZlcmVuY2VzIHRvIFJGQyAzMzk0IGZvciBhZXMga2V5IHdyYXAgYWxnb3JpdGhtLgorICAgIFJldHVybjoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQUVTX0dUS19LRVlfV1JBUCgKKyAgICBJTiBVQ0hBUiAgICAqa2V5LAorICAgIElOIFVDSEFSICAgICpwbGFpbnRleHQsCisgICAgSU4gVUNIQVIgICAgcF9sZW4sCisgICAgT1VUIFVDSEFSICAgKmNpcGhlcnRleHQpCit7CisgICAgVUNIQVIgICAgICAgQVs4XSwgQklOWzE2XSwgQk9VVFsxNl07CisgICAgVUNIQVIgICAgICAgUls1MTJdOworICAgIElOVCAgICAgICAgIG51bV9ibG9ja3MgPSBwX2xlbi84OyAgIC8vIHVuaXQ6NjRiaXRzCisgICAgSU5UICAgICAgICAgaSwgajsKKyAgICBhZXNfY29udGV4dCBhZXNjdHg7CisgICAgVUNIQVIgICAgICAgeG9yOworCisgICAgcnRtcF9hZXNfc2V0X2tleSgmYWVzY3R4LCBrZXksIDEyOCk7CisKKyAgICAvLyBJbml0IElBCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgQVtpXSA9IDB4YTY7CisKKyAgICAvL0lucHV0IHBsYWludGV4dAorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYmxvY2tzOyBpKyspCisgICAgeworICAgICAgICBmb3IgKGogPSAwIDsgaiA8IDg7IGorKykKKyAgICAgICAgICAgIFJbOCAqIChpICsgMSkgKyBqXSA9IHBsYWludGV4dFs4ICogaSArIGpdOworICAgIH0KKworICAgIC8vIEtleSBNaXgKKyAgICBmb3IgKGogPSAwOyBqIDwgNjsgaisrKQorICAgIHsKKyAgICAgICAgZm9yKGkgPSAxOyBpIDw9IG51bV9ibG9ja3M7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLy9waGFzZSAxCisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShCSU4sIEEsIDgpOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJkJJTls4XSwgJlJbOCAqIGldLCA4KTsKKyAgICAgICAgICAgIHJ0bXBfYWVzX2VuY3J5cHQoJmFlc2N0eCwgQklOLCBCT1VUKTsKKworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoQSwgJkJPVVRbMF0sIDgpOworICAgICAgICAgICAgeG9yID0gbnVtX2Jsb2NrcyAqIGogKyBpOworICAgICAgICAgICAgQVs3XSA9IEJPVVRbN10gXiB4b3I7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUls4ICogaV0sICZCT1VUWzhdLCA4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE91dHB1dCBjaXBoZXJ0ZXh0CisgICAgTmRpc01vdmVNZW1vcnkoY2lwaGVydGV4dCwgQSwgOCk7CisKKyAgICBmb3IgKGkgPSAxOyBpIDw9IG51bV9ibG9ja3M7IGkrKykKKyAgICB7CisgICAgICAgIGZvciAoaiA9IDAgOyBqIDwgODsgaisrKQorICAgICAgICAgICAgY2lwaGVydGV4dFs4ICogaSArIGpdID0gUls4ICogaSArIGpdOworICAgIH0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJTWlzYyBmdW5jdGlvbiB0byBkZWNyeXB0IEFFUyBib2R5CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCQlUaGlzIGZ1bmN0aW9uIHJlZmVyZW5jZXMgdG8JUkZDCTMzOTQgZm9yIGFlcyBrZXkgdW53cmFwIGFsZ29yaXRobS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQUVTX0dUS19LRVlfVU5XUkFQKAorCUlOCVVDSEFSCSprZXksCisJT1VUCVVDSEFSCSpwbGFpbnRleHQsCisJSU4JVUNIQVIgICAgY19sZW4sCisJSU4JVUNIQVIJKmNpcGhlcnRleHQpCisKK3sKKwlVQ0hBUiAgICAgICBBWzhdLCBCSU5bMTZdLCBCT1VUWzE2XTsKKwlVQ0hBUiAgICAgICB4b3I7CisJSU5UICAgICAgICAgaSwgajsKKwlhZXNfY29udGV4dCBhZXNjdHg7CisJVUNIQVIgICAgICAgKlI7CisJSU5UICAgICAgICAgbnVtX2Jsb2NrcyA9IGNfbGVuLzg7CS8vIHVuaXQ6NjRiaXRzCisKKworCW9zX2FsbG9jX21lbShOVUxMLCAoUFVDSEFSICopJlIsIDUxMik7CisKKwlpZiAoUiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiISEhQUVTX0dUS19LRVlfVU5XUkFQOiBubyBtZW1vcnkhISFcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gLyogRW5kIG9mIGlmICovCisKKwkvLyBJbml0aWFsaXplCisJTmRpc01vdmVNZW1vcnkoQSwgY2lwaGVydGV4dCwgOCk7CisJLy9JbnB1dCBwbGFpbnRleHQKKwlmb3IoaSA9IDA7IGkgPCAoY19sZW4tOCk7IGkrKykKKwl7CisJCVJbIGldID0gY2lwaGVydGV4dFtpICsgOF07CisJfQorCisJcnRtcF9hZXNfc2V0X2tleSgmYWVzY3R4LCBrZXksIDEyOCk7CisKKwlmb3IoaiA9IDU7IGogPj0gMDsgai0tKQorCXsKKwkJZm9yKGkgPSAobnVtX2Jsb2Nrcy0xKTsgaSA+IDA7IGktLSkKKwkJeworCQkJeG9yID0gKG51bV9ibG9ja3MgLTEgKSogaiArIGk7CisJCQlOZGlzTW92ZU1lbW9yeShCSU4sIEEsIDgpOworCQkJQklOWzddID0gQVs3XSBeIHhvcjsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZCSU5bOF0sICZSWyhpLTEpKjhdLCA4KTsKKwkJCXJ0bXBfYWVzX2RlY3J5cHQoJmFlc2N0eCwgQklOLCBCT1VUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEEsICZCT1VUWzBdLCA4KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZSWyhpLTEpKjhdLCAmQk9VVFs4XSwgOCk7CisJCX0KKwl9CisKKwkvLyBPVVRQVVQKKwlmb3IoaSA9IDA7IGkgPCBjX2xlbjsgaSsrKQorCXsKKwkJcGxhaW50ZXh0W2ldID0gUltpXTsKKwl9CisKKworCW9zX2ZyZWVfbWVtKE5VTEwsIFIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisJCVJlcG9ydCB0aGUgRUFQIG1lc3NhZ2UgdHlwZQorCisJQXJndW1lbnRzOgorCQltc2cJCS0JRUFQT0xfUEFJUl9NU0dfMQorCQkJCQlFQVBPTF9QQUlSX01TR18yCisJCQkJCUVBUE9MX1BBSVJfTVNHXzMKKwkJCQkJRUFQT0xfUEFJUl9NU0dfNAorCQkJCQlFQVBPTF9HUk9VUF9NU0dfMQorCQkJCQlFQVBPTF9HUk9VUF9NU0dfMgorCisgICAgUmV0dXJuOgorICAgICAgICAgbWVzc2FnZSB0eXBlIHN0cmluZworCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitDSEFSICpHZXRFYXBvbE1zZ1R5cGUoQ0hBUiBtc2cpCit7CisgICAgaWYobXNnID09IEVBUE9MX1BBSVJfTVNHXzEpCisgICAgICAgIHJldHVybiAiUGFpcndpc2UgTWVzc2FnZSAxIjsKKyAgICBlbHNlIGlmKG1zZyA9PSBFQVBPTF9QQUlSX01TR18yKQorICAgICAgICByZXR1cm4gIlBhaXJ3aXNlIE1lc3NhZ2UgMiI7CisJZWxzZSBpZihtc2cgPT0gRUFQT0xfUEFJUl9NU0dfMykKKyAgICAgICAgcmV0dXJuICJQYWlyd2lzZSBNZXNzYWdlIDMiOworCWVsc2UgaWYobXNnID09IEVBUE9MX1BBSVJfTVNHXzQpCisgICAgICAgIHJldHVybiAiUGFpcndpc2UgTWVzc2FnZSA0IjsKKwllbHNlIGlmKG1zZyA9PSBFQVBPTF9HUk9VUF9NU0dfMSkKKyAgICAgICAgcmV0dXJuICJHcm91cCBNZXNzYWdlIDEiOworCWVsc2UgaWYobXNnID09IEVBUE9MX0dST1VQX01TR18yKQorICAgICAgICByZXR1cm4gIkdyb3VwIE1lc3NhZ2UgMiI7CisgICAgZWxzZQorICAgIAlyZXR1cm4gIkludmFsaWQgTWVzc2FnZSI7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgQ2hlY2sgU2FuaXR5IFJTTiBJRSBvZiBFQVBvTCBtZXNzYWdlCisKKyAgICBBcmd1bWVudHM6CisKKyAgICBSZXR1cm4gVmFsdWU6CisKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gUlRNUENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCU9VVAlVQ0hBUgkJCSpPZmZzZXQpCit7CisJUFVDSEFSICAgICAgICAgICAgICBwVklFOworCVVDSEFSICAgICAgICAgICAgICAgbGVuOworCVBFSURfU1RSVUNUICAgICAgICAgcEVpZDsKKwlCT09MRUFOCQkJCXJlc3VsdCA9IEZBTFNFOworCisJcFZJRSA9IHBEYXRhOworCWxlbgkgPSBEYXRhTGVuOworCSpPZmZzZXQgPSAwOworCisJd2hpbGUgKGxlbiA+IHNpemVvZihSU05JRTIpKQorCXsKKwkJcEVpZCA9IChQRUlEX1NUUlVDVCkgcFZJRTsKKwkJLy8gV1BBIFJTTiBJRQorCQlpZiAoKHBFaWQtPkVpZCA9PSBJRV9XUEEpICYmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKSkKKwkJeworCQkJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSB8fCBwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKwkJCQkoTmRpc0VxdWFsTWVtb3J5KHBWSUUsIHBFbnRyeS0+UlNOX0lFLCBwRW50cnktPlJTTklFX0xlbikpICYmCisJCQkJKHBFbnRyeS0+UlNOSUVfTGVuID09IChwRWlkLT5MZW4gKyAyKSkpCisJCQl7CisJCQkJCXJlc3VsdCA9IFRSVUU7CisJCQl9CisKKwkJCSpPZmZzZXQgKz0gKHBFaWQtPkxlbiArIDIpOworCQl9CisJCS8vIFdQQTIgUlNOIElFCisJCWVsc2UgaWYgKChwRWlkLT5FaWQgPT0gSUVfUlNOKSAmJiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0ICsgMiwgUlNOX09VSSwgMykpKQorCQl7CisJCQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMiB8fCBwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCisJCQkJKE5kaXNFcXVhbE1lbW9yeShwVklFLCBwRW50cnktPlJTTl9JRSwgcEVudHJ5LT5SU05JRV9MZW4pKSAmJgorCQkJCShwRW50cnktPlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpLyogVG9Eby1BbGJlcnRZIGZvciBtZXNoKi8pCisJCQl7CisJCQkJCXJlc3VsdCA9IFRSVUU7CisJCQl9CisKKwkJCSpPZmZzZXQgKz0gKHBFaWQtPkxlbiArIDIpOworCQl9CisJCWVsc2UKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQlwVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJbGVuICAtPSAocEVpZC0+TGVuICsgMik7CisJfQorCisKKwlyZXR1cm4gcmVzdWx0OworCit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgUGFyc2UgS0VZREFUQSBmaWVsZC4gIEtFWURBVEFbXSBNYXkgY29udGFpbiAyIFJTTiBJRSBhbmQgb3B0aW9uYWxseSBHVEsuCisgICAgR1RLICBpcyBlbmNhcHR1bGF0ZWQgaW4gS0RFIGZvcm1hdCBhdCAgcC44MyA4MDIuMTFpIEQxMAorCisgICAgQXJndW1lbnRzOgorCisgICAgUmV0dXJuIFZhbHVlOgorCisgICAgTm90ZToKKyAgICAgICAgODAyLjExaSBEMTAKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gUlRNUFBhcnNlRWFwb2xLZXlEYXRhKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleURhdGEsCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlEYXRhTGVuLAorCUlOCVVDSEFSCQkJR3JvdXBLZXlJbmRleCwKKwlJTglVQ0hBUgkJCU1zZ1R5cGUsCisJSU4JQk9PTEVBTgkJCWJXUEEyLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSkKK3sKKyAgICBQS0RFX0VOQ0FQICAgICAgICAgIHBLREUgPSBOVUxMOworICAgIFBVQ0hBUiAgICAgICAgICAgICAgcE15S2V5RGF0YSA9IHBLZXlEYXRhOworICAgIFVDSEFSICAgICAgICAgICAgICAgS2V5RGF0YUxlbmd0aCA9IEtleURhdGFMZW47CisgICAgVUNIQVIgICAgICAgICAgICAgICBHVEtMRU4gPSAwOworCVVDSEFSCQkJCURlZmF1bHRJZHggPSAwOworCVVDSEFSCQkJCXNraXBfb2Zmc2V0OworCisJLy8gVmVyaWZ5IFRoZSBSU04gSUUgY29udGFpbmVkIGluIHBhaXJld2lzZV9tc2dfMiAmJiBwYWlyZXdpc2VfbXNnXzMgYW5kIHNraXAgaXQKKwlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18yIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKyAgICB7CisJCS8vIENoZWNrIFJTTiBJRSB3aGV0aGVyIGl0IGlzIFdQQTIvV1BBMlBTSworCQlpZiAoIVJUTVBDaGVja1JTTklFKHBBZCwgcEtleURhdGEsIEtleURhdGFMZW4sIHBFbnRyeSwgJnNraXBfb2Zmc2V0KSkKKwkJeworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBSU04gSUUgZGlmZmVyZW50CisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfUlNOSUVfRElGRl9FVkVOVF9GTEFHLCBwRW50cnktPkFkZHIsIHBFbnRyeS0+YXBpZHgsIDApOworCisgICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSU05fSUUgRGlmZmVyZW50IGluIG1zZyAlZCBvZiA0LXdheSBoYW5kc2hha2UhXG4iLCBNc2dUeXBlKSk7CisJCQloZXhfZHVtcCgiUmVjZWl2ZSBSU05fSUUgIiwgcEtleURhdGEsIEtleURhdGFMZW4pOworCQkJaGV4X2R1bXAoIkRlc2lyZWQgUlNOX0lFICIsIHBFbnRyeS0+UlNOX0lFLCBwRW50cnktPlJTTklFX0xlbik7CisKKwkJCXJldHVybiBGQUxTRTsKKyAgICAJfQorICAgIAllbHNlCisJCXsKKwkJCWlmIChiV1BBMiAmJiBNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpCisJCQl7CisJCQkJLy8gc2tpcCBSU04gSUUKKwkJCQlwTXlLZXlEYXRhICs9IHNraXBfb2Zmc2V0OworCQkJCUtleURhdGFMZW5ndGggLT0gc2tpcF9vZmZzZXQ7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFBhcnNlRWFwb2xLZXlEYXRhID09PiBXUEEyL1dQQTJQU0sgUlNOIElFIG1hdGNoZWQgaW4gTXNnIDMsIExlbmd0aCglZCkgXG4iLCBza2lwX29mZnNldCkpOworCQkJfQorCQkJZWxzZQorCQkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QUGFyc2VFYXBvbEtleURhdGEgPT0+IEtleURhdGFMZW5ndGggJWQgd2l0aG91dCBSU05fSUUgXG4iLCBLZXlEYXRhTGVuZ3RoKSk7CisKKwkvLyBQYXJzZSBFS0QgZm9ybWF0IGluIHBhaXJ3aXNlX21zZ18zX1dQQTIgJiYgZ3JvdXBfbXNnXzFfV1BBMgorCWlmIChiV1BBMiAmJiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zIHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCXsKKwkJaWYgKEtleURhdGFMZW5ndGggPj0gOCkJLy8gS0RFIGZvcm1hdCBleGNsdWRlIEdUSyBsZW5ndGgKKyAgICAJeworICAgICAgICAJcEtERSA9IChQS0RFX0VOQ0FQKSBwTXlLZXlEYXRhOworCisKKwkJCURlZmF1bHRJZHggPSBwS0RFLT5HVEtFbmNhcC5LaWQ7CisKKwkJCS8vIFNhbml0eSBjaGVjayAtIEtFRCBsZW5ndGgKKwkJCWlmIChLZXlEYXRhTGVuZ3RoIDwgKHBLREUtPkxlbiArIDIpKQorICAgIAkJeworICAgICAgICAJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBUaGUgbGVuIGZyb20gS0RFIGlzIHRvbyBzaG9ydCBcbiIpKTsKKyAgICAgICAgCQlyZXR1cm4gRkFMU0U7CisgICAgCQl9CisKKwkJCS8vIEdldCBHVEsgbGVuZ3RoIC0gcmVmZXIgdG8gSUVFRSA4MDIuMTFpLTIwMDQgcC44MgorCQkJR1RLTEVOID0gcEtERS0+TGVuIC02OworCQkJaWYgKEdUS0xFTiA8IExFTl9BRVNfS0VZKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsIEdUS0xFTikpOworICAgICAgICAJCXJldHVybiBGQUxTRTsKKwkJCX0KKworICAgIAl9CisJCWVsc2UKKyAgICAJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1I6IEtERSBmb3JtYXQgbGVuZ3RoIGlzIHRvbyBzaG9ydCBcbiIpKTsKKwkgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkdUSyBpbiBLREUgZm9ybWF0ICxEZWZhdWx0S2V5SUQ9JWQsIEtleUxlbj0lZCBcbiIsIERlZmF1bHRJZHgsIEdUS0xFTikpOworCQkvLyBza2lwIGl0CisJCXBNeUtleURhdGEgKz0gODsKKwkJS2V5RGF0YUxlbmd0aCAtPSA4OworCisJfQorCWVsc2UgaWYgKCFiV1BBMiAmJiBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKQorCXsKKwkJRGVmYXVsdElkeCA9IEdyb3VwS2V5SW5kZXg7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkdUSyBEZWZhdWx0S2V5SUQ9JWQgXG4iLCBEZWZhdWx0SWR4KSk7CisJfQorCisJLy8gU2FuaXR5IGNoZWNrIC0gc2hhcmVkIGtleSBpbmRleCBtdXN0IGJlIDEgfiAzCisJaWYgKERlZmF1bHRJZHggPCAxIHx8IERlZmF1bHRJZHggPiAzKQorICAgIHsKKyAgICAgCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGluZGV4KCVkKSBpcyBpbnZhbGlkIGluICVzICVzIFxuIiwgRGVmYXVsdElkeCwgKChiV1BBMikgPyAiV1BBMiIgOiAiV1BBIiksIEdldEVhcG9sTXNnVHlwZShNc2dUeXBlKSkpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkvLyBUb2RvCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm4gVFJVRTsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSBmb3IgV1BBIGhhbmRzaGFraW5nCisJCUl0cyBmb3JtYXQgaXMgYmVsb3csCisKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IFByb3RvY29sIFZlcnNpb24JIHwgIDEgb2N0ZXQKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IFByb3RvY29sIFR5cGUJCSB8CTEgb2N0ZXQKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEJvZHkgTGVuZ3RoCQkgfCAgMiBvY3RldHMKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IERlc2NyaXB0b3IgVHlwZQkgfAkxIG9jdGV0CisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgSW5mb3JtYXRpb24gICAgfAkyIG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IExlbmd0aAkgICAgIHwgIDEgb2N0ZXQKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEtleSBSZXBhbHkgQ291bnRlciB8CTggb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgTm9uY2UJCSAgICAgfCAgMzIgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgSVYJCQkgfCAgMTYgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgUlNDCQkJIHwgIDggb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgSUQgb3IgUmVzZXJ2ZWQgfAk4IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IE1JQwkJCSB8CTE2IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IERhdGEgTGVuZ3RoCSB8CTIgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgRGF0YQkJCSB8CW4gb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisJQXJndW1lbnRzOgorCQlwQWQJCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUNvbnN0cnVjdEVhcG9sTXNnKAorCUlOIAlQUlRNUF9BREFQVEVSICAgIAlwQWQsCisgICAgSU4gCVVDSEFSCQkJCUF1dGhNb2RlLAorICAgIElOIAlVQ0hBUgkJCQlXZXBTdGF0dXMsCisgICAgSU4gCVVDSEFSCQkJCUdyb3VwS2V5V2VwU3RhdHVzLAorICAgIElOIAlVQ0hBUgkJCQlNc2dUeXBlLAorICAgIElOCVVDSEFSCQkJCURlZmF1bHRLZXlJZHgsCisgICAgSU4gCVVDSEFSCQkJCSpSZXBsYXlDb3VudGVyLAorCUlOIAlVQ0hBUgkJCQkqS2V5Tm9uY2UsCisJSU4JVUNIQVIJCQkJKlR4UlNDLAorCUlOCVVDSEFSCQkJCSpQVEssCisJSU4JVUNIQVIJCQkJKkdUSywKKwlJTglVQ0hBUgkJCQkqUlNOSUUsCisJSU4JVUNIQVIJCQkJUlNOSUVfTGVuLAorICAgIE9VVCBQRUFQT0xfUEFDS0VUICAgICAgIHBNc2cpCit7CisJQk9PTEVBTgliV1BBMiA9IEZBTFNFOworCisJLy8gQ2hvb3NlIFdQQTIgb3Igbm90CisJaWYgKChBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCWJXUEEyID0gVFJVRTsKKworICAgIC8vIEluaXQgUGFja2V0IGFuZCBGaWxsIGhlYWRlcgorICAgIHBNc2ctPlByb1ZlciA9IEVBUE9MX1ZFUjsKKyAgICBwTXNnLT5Qcm9UeXBlID0gRUFQT0xLZXk7CisKKwkvLyBEZWZhdWx0IDk1IGJ5dGVzLCB0aGUgRUFQb0wtS2V5IGRlc2NyaXB0b3IgZXhjbHVkZSBLZXktZGF0YSBmaWVsZAorCXBNc2ctPkJvZHlfTGVuWzFdID0gTEVOX0VBUE9MX0tFWV9NU0c7CisKKwkvLyBGaWxsIGluIEVBUG9MIGRlc2NyaXB0b3IKKwlpZiAoYldQQTIpCisJCXBNc2ctPktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisJZWxzZQorCQlwTXNnLT5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworCisJLy8gRmlsbCBpbiBLZXkgaW5mb3JtYXRpb24sIHJlZmVyIHRvIElFRUUgU3RkIDgwMi4xMWktMjAwNCBwYWdlIDc4CisJLy8gV2hlbiBlaXRoZXIgdGhlIHBhaXJ3aXNlIG9yIHRoZSBncm91cCBjaXBoZXIgaXMgQUVTLCB0aGUgREVTQ19UWVBFX0FFUygyKSBzaGFsbCBiZSB1c2VkLgorCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0KKyAgICAgICAgCSgoKFdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB8fCAoR3JvdXBLZXlXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpID8gKERFU0NfVFlQRV9BRVMpIDogKERFU0NfVFlQRV9US0lQKSk7CisKKwkvLyBTcGVjaWZ5IEtleSBUeXBlIGFzIEdyb3VwKDApIG9yIFBhaXJ3aXNlKDEpCisJaWYgKE1zZ1R5cGUgPj0gRUFQT0xfR1JPVVBfTVNHXzEpCisJCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gR1JPVVBLRVk7CisJZWxzZQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gU3BlY2lmeSBLZXkgSW5kZXgsIG9ubHkgZ3JvdXBfbXNnMV9XUEExCisJaWYgKCFiV1BBMiAmJiAoTXNnVHlwZSA+PSBFQVBPTF9HUk9VUF9NU0dfMSkpCisJCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlJbmRleCA9IERlZmF1bHRLZXlJZHg7CisKKwlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uSW5zdGFsbCA9IDE7CisKKwlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5QWNrID0gMTsKKworCWlmIChNc2dUeXBlICE9IEVBUE9MX1BBSVJfTVNHXzEpCisJCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlNaWMgPSAxOworCisJaWYgKChiV1BBMiAmJiAoTXNnVHlwZSA+PSBFQVBPTF9QQUlSX01TR18zKSkgfHwgKCFiV1BBMiAmJiAoTXNnVHlwZSA+PSBFQVBPTF9HUk9VUF9NU0dfMSkpKQorICAgIHsKKyAgICAgICAJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLlNlY3VyZSA9IDE7CisgICAgfQorCisJaWYgKGJXUEEyICYmICgoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKSB8fCAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpKQorICAgIHsKKyAgICAgICAgcE1zZy0+S2V5RGVzYy5LZXlJbmZvLkVLRF9ETCA9IDE7CisgICAgfQorCisJLy8ga2V5IEluZm9ybWF0aW9uIGVsZW1lbnQgaGFzIGRvbmUuCisJKihVU0hPUlQgKikoJnBNc2ctPktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcE1zZy0+S2V5RGVzYy5LZXlJbmZvKSk7CisKKwkvLyBGaWxsIGluIEtleSBMZW5ndGgKKwl7CisJCWlmIChNc2dUeXBlID49IEVBUE9MX0dST1VQX01TR18xKQorCQl7CisJCQkvLyB0aGUgbGVuZ3RoIG9mIGdyb3VwIGtleSBjaXBoZXIKKwkJCXBNc2ctPktleURlc2MuS2V5TGVuZ3RoWzFdID0gKChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSA/IFRLSVBfR1RLX0xFTkdUSCA6IExFTl9BRVNfS0VZKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHRoZSBsZW5ndGggb2YgcGFpcndpc2Uga2V5IGNpcGhlcgorCQkJcE1zZy0+S2V5RGVzYy5LZXlMZW5ndGhbMV0gPSAoKFdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSA/IExFTl9US0lQX0tFWSA6IExFTl9BRVNfS0VZKTsKKwkJfQorCX0KKworIAkvLyBGaWxsIGluIHJlcGxheSBjb3VudGVyCisgICAgTmRpc01vdmVNZW1vcnkocE1zZy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBSZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIEZpbGwgS2V5IE5vbmNlIGZpZWxkCisJLy8gQU5vbmNlIDogcGFpcndpc2VfbXNnMSAmIHBhaXJ3aXNlX21zZzMKKwkvLyBTTm9uY2UgOiBwYWlyd2lzZV9tc2cyCisJLy8gR05vbmNlIDogZ3JvdXBfbXNnMV93cGExCisJaWYgKChNc2dUeXBlIDw9IEVBUE9MX1BBSVJfTVNHXzMpIHx8ICgoIWJXUEEyICYmIChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkpKQorICAgIAlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleU5vbmNlLCBLZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIEZpbGwga2V5IElWIC0gV1BBMiBhcyAwLCBXUEExIGFzIHJhbmRvbQorCWlmICghYldQQTIgJiYgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCXsKKwkJLy8gU3VnZ2VzdCBJViBiZSByYW5kb20gbnVtYmVyIHBsdXMgc29tZSBudW1iZXIsCisJCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5SXYsICZLZXlOb25jZVsxNl0sIExFTl9LRVlfREVTQ19JVik7CisgICAgICAgIHBNc2ctPktleURlc2MuS2V5SXZbMTVdICs9IDI7CisJfQorCisgICAgLy8gRmlsbCBLZXkgUlNDIGZpZWxkCisgICAgLy8gSXQgY29udGFpbnMgdGhlIFJTQyBmb3IgdGhlIEdUSyBiZWluZyBpbnN0YWxsZWQuCisJaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTIpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwl7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5UnNjLCBUeFJTQywgNik7CisJfQorCisJLy8gQ2xlYXIgS2V5IE1JQyBmaWVsZCBmb3IgTUlDIGNhbGN1bGF0aW9uIGxhdGVyCisgICAgTmRpc1plcm9NZW1vcnkocE1zZy0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJQ29uc3RydWN0RWFwb2xLZXlEYXRhKHBBZCwKKwkJCQkJCSAgQXV0aE1vZGUsCisJCQkJCQkgIFdlcFN0YXR1cywKKwkJCQkJCSAgR3JvdXBLZXlXZXBTdGF0dXMsCisJCQkJCQkgIE1zZ1R5cGUsCisJCQkJCQkgIERlZmF1bHRLZXlJZHgsCisJCQkJCQkgIGJXUEEyLAorCQkJCQkJICBQVEssCisJCQkJCQkgIEdUSywKKwkJCQkJCSAgUlNOSUUsCisJCQkJCQkgIFJTTklFX0xlbiwKKwkJCQkJCSAgcE1zZyk7CisKKwkvLyBDYWxjdWxhdGUgTUlDIGFuZCBmaWxsIGluIEtleU1pYyBGaWVsZCBleGNlcHQgUGFpcndpc2UgTXNnIDEuCisJaWYgKE1zZ1R5cGUgIT0gRUFQT0xfUEFJUl9NU0dfMSkKKwl7CisJCUNhbGN1bGF0ZU1JQyhwQWQsIFdlcFN0YXR1cywgUFRLLCBwTXNnKTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IENvbnN0cnVjdEVhcG9sTXNnIGZvciAlcyAlc1xuIiwgKChiV1BBMikgPyAiV1BBMiIgOiAiV1BBIiksIEdldEVhcG9sTXNnVHlwZShNc2dUeXBlKSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIgkgICAgIEJvZHkgbGVuZ3RoID0gJWQgXG4iLCBwTXNnLT5Cb2R5X0xlblsxXSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIgkgICAgIEtleSBsZW5ndGggID0gJWQgXG4iLCBwTXNnLT5LZXlEZXNjLktleUxlbmd0aFsxXSkpOworCisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvbnN0cnVjdCB0aGUgS2V5IERhdGEgZmllbGQgb2YgRUFQb0wgbWVzc2FnZQorCisJQXJndW1lbnRzOgorCQlwQWQJCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCUVsZW0JCU1lc3NhZ2UgYm9keQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlDb25zdHJ1Y3RFYXBvbEtleURhdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlBdXRoTW9kZSwKKwlJTglVQ0hBUgkJCVdlcFN0YXR1cywKKwlJTglVQ0hBUgkJCUdyb3VwS2V5V2VwU3RhdHVzLAorCUlOIAlVQ0hBUgkJCU1zZ1R5cGUsCisJSU4JVUNIQVIJCQlEZWZhdWx0S2V5SWR4LAorCUlOCUJPT0xFQU4JCQliV1BBMkNhcGFibGUsCisJSU4JVUNIQVIJCQkqUFRLLAorCUlOCVVDSEFSCQkJKkdUSywKKwlJTglVQ0hBUgkJCSpSU05JRSwKKwlJTglVQ0hBUgkJCVJTTklFX0xFTiwKKwlPVVQgUEVBUE9MX1BBQ0tFVCAgIHBNc2cpCit7CisJVUNIQVIJCSptcG9vbCwgKktleV9EYXRhLCAqUmM0R1RLOworCVVDSEFSICAgICAgIGVrZXlbKExFTl9LRVlfREVTQ19JVitMRU5fRUFQX0VLKV07CisJVUNIQVIJCWRhdGFfb2Zmc2V0OworCisKKwlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfNCB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18yKQorCQlyZXR1cm47CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgcG9vbAorCW9zX2FsbG9jX21lbShwQWQsIChQVUNIQVIgKikmbXBvb2wsIDE1MDApOworCisgICAgaWYgKG1wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFJjNEdUSyBMZW4gPSA1MTIgKi8KKwlSYzRHVEsgPSAoVUNIQVIgKikgUk9VTkRfVVAobXBvb2wsIDQpOworCS8qIEtleV9EYXRhIExlbiA9IDUxMiAqLworCUtleV9EYXRhID0gKFVDSEFSICopIFJPVU5EX1VQKFJjNEdUSyArIDUxMiwgNCk7CisKKwlOZGlzWmVyb01lbW9yeShLZXlfRGF0YSwgNTEyKTsKKwlwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0gPSAwOworCWRhdGFfb2Zmc2V0ID0gMDsKKworCS8vIEVuY2Fwc3VsYXRlIFJTTklFIGluIHBhaXJ3aXNlX21zZzIgJiBwYWlyd2lzZV9tc2czCisJaWYgKFJTTklFX0xFTiAmJiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMikgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykpKQorCXsKKwkJaWYgKGJXUEEyQ2FwYWJsZSkKKwkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMF0gPSBJRV9XUEEyOworCQllbHNlCisJCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDBdID0gSUVfV1BBOworCisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSBSU05JRV9MRU47CisJCU5kaXNNb3ZlTWVtb3J5KCZLZXlfRGF0YVtkYXRhX29mZnNldCArIDJdLCBSU05JRSwgUlNOSUVfTEVOKTsKKwkJZGF0YV9vZmZzZXQgKz0gKDIgKyBSU05JRV9MRU4pOworCX0KKworCS8vIEVuY2Fwc3VsYXRlIEtERSBmb3JtYXQgaW4gcGFpcndpc2VfbXNnM19XUEEyICYgZ3JvdXBfbXNnMV9XUEEyCisJaWYgKGJXUEEyQ2FwYWJsZSAmJiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKSkKKwl7CisJCS8vIEtleSBEYXRhIEVuY2Fwc3VsYXRpb24gKEtERSkgZm9ybWF0IC0gODAyLjExaS0yMDA0ICBGaWd1cmUtNDN3IGFuZCBUYWJsZS0yMGgKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAwXSA9IDB4REQ7CisKKwkJaWYgKEdyb3VwS2V5V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCXsKKwkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAweDE2Oy8vIDQrMisxNihPVUkrRGF0YVR5cGUrRGF0YUZpZWxkKQorCQl9CisJCWVsc2UKKwkJeworCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAxXSA9IDB4MjY7Ly8gNCsyKzMyKE9VSStEYXRhVHlwZStEYXRhRmllbGQpCisJCX0KKworICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDJdID0gMHgwMDsKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAzXSA9IDB4MEY7CisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgNF0gPSAweEFDOworICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDVdID0gMHgwMTsKKworCQkvLyBHVEsgS0RFIGZvcm1hdCAtIDgwMi4xMWktMjAwNCAgRmlndXJlLTQzeAorICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDZdID0gKERlZmF1bHRLZXlJZHggJiAweDAzKTsKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA3XSA9IDB4MDA7CS8vIFJlc2VydmVkIEJ5dGUKKworCQlkYXRhX29mZnNldCArPSA4OworCX0KKworCisJLy8gRW5jYXBzdWxhdGUgR1RLIGFuZCBlbmNyeXB0IHRoZSBrZXktZGF0YSBmaWVsZCB3aXRoIEtFSy4KKwkvLyBPbmx5IGZvciBwYWlyd2lzZV9tc2czX1dQQTIgYW5kIGdyb3VwX21zZzEKKwlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMkNhcGFibGUpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwl7CisJCS8vIEZpbGwgaW4gR1RLCisJCWlmIChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQl7CisJCQlOZGlzTW92ZU1lbW9yeSgmS2V5X0RhdGFbZGF0YV9vZmZzZXRdLCBHVEssIExFTl9BRVNfS0VZKTsKKwkJCWRhdGFfb2Zmc2V0ICs9IExFTl9BRVNfS0VZOworCQl9CisJCWVsc2UKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoJktleV9EYXRhW2RhdGFfb2Zmc2V0XSwgR1RLLCBUS0lQX0dUS19MRU5HVEgpOworCQkJZGF0YV9vZmZzZXQgKz0gVEtJUF9HVEtfTEVOR1RIOworCQl9CisKKwkJLy8gU3RpbGwgZG9udCBrbm93IHdoeSwgYnV0IGlmIG5vdCBhcHBlbmQgd2lsbCBvY2N1ciAiR1RLIG5vdCBpbmNsdWRlIGluIE1TRzMiCisJCS8vIFBhdGNoIGZvciBjb21wYXRpYmlsaXR5IGJldHdlZW4gemVybyBjb25maWcgYW5kIGZ1bmsKKwkJaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMkNhcGFibGUpCisJCXsKKwkJCWlmIChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJeworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMF0gPSAweEREOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAwOworCQkJCWRhdGFfb2Zmc2V0ICs9IDI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAwXSA9IDB4REQ7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAxXSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAyXSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAzXSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA0XSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA1XSA9IDA7CisJCQkJZGF0YV9vZmZzZXQgKz0gNjsKKwkJCX0KKwkJfQorCisJCS8vIEVuY3J5cHQgdGhlIGRhdGEgbWF0ZXJpYWwgaW4ga2V5IGRhdGEgZmllbGQKKwkJaWYgKFdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQl7CisJCQlBRVNfR1RLX0tFWV9XUkFQKCZQVEtbMTZdLCBLZXlfRGF0YSwgZGF0YV9vZmZzZXQsIFJjNEdUSyk7CisgICAgICAgICAgICAvLyBBRVMgd3JhcCBmdW5jdGlvbiB3aWxsIGdyb3cgOCBieXRlcyBpbiBsZW5ndGgKKyAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IDg7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBQUkVQQVJFIEVuY3J5cHRlZCAgIktleSBEQVRBIiBmaWVsZC4gIChFbmNyeXB0IEdUSyB3aXRoIFJDNCwgdXNpbmYgUFRLWzE2XS0+WzMxXSBhcyBLZXksIElWLWZpZWxkIGFzIElWKQorCQkJLy8gcHV0IFR4VHNjIGluIEtleSBSU0MgZmllbGQKKwkJCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBQUFBJTklURkNTMzI7ICAgLy9Jbml0IGNyYzMyLgorCisJCQkvLyBla2V5IGlzIHRoZSBjb250YW5ldGlvbiBvZiBJVi1maWVsZCwgYW5kIFBUS1sxNl0tPlBUS1szMV0KKwkJCU5kaXNNb3ZlTWVtb3J5KGVrZXksIHBNc2ctPktleURlc2MuS2V5SXYsIExFTl9LRVlfREVTQ19JVik7CisJCQlOZGlzTW92ZU1lbW9yeSgmZWtleVtMRU5fS0VZX0RFU0NfSVZdLCAmUFRLWzE2XSwgTEVOX0VBUF9FSyk7CisJCQlBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgZWtleSwgc2l6ZW9mKGVrZXkpKTsgIC8vSU5JVCBTQk9YLCBLRVlMRU4rMyhJVikKKwkJCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBSVE1QX0NBTENfRkNTMzIocEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiwgS2V5X0RhdGEsIGRhdGFfb2Zmc2V0KTsKKwkJCVdQQUFSQ0ZPVVJfRU5DUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBSYzRHVEssIEtleV9EYXRhLCBkYXRhX29mZnNldCk7CisJCX0KKworCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleURhdGEsIFJjNEdUSywgZGF0YV9vZmZzZXQpOworCX0KKwllbHNlCisJeworCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleURhdGEsIEtleV9EYXRhLCBkYXRhX29mZnNldCk7CisJfQorCisJLy8gc2V0IGtleSBkYXRhIGxlbmd0aCBmaWVsZCBhbmQgdG90YWwgbGVuZ3RoCisJcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdID0gZGF0YV9vZmZzZXQ7CisgICAgcE1zZy0+Qm9keV9MZW5bMV0gKz0gZGF0YV9vZmZzZXQ7CisKKwlvc19mcmVlX21lbShwQWQsIG1wb29sKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsY2F1bGF0ZSBNSUMuIEl0IGlzIHVzZWQgZHVyaW5nIDQtd2F5cyBoYW5kc2hhcmtpbmcuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJUGVlcldlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUNhbGN1bGF0ZU1JQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVBlZXJXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQkqUFRLLAorCU9VVCBQRUFQT0xfUEFDS0VUICAgcE1zZykKK3sKKyAgICBVQ0hBUiAgICpPdXRCdWZmZXI7CisJVUxPTkcJRnJhbWVMZW4gPSAwOworCVVDSEFSCW1pY1tMRU5fS0VZX0RFU0NfTUlDXTsKKwlVQ0hBUglkaWdlc3RbODBdOworCisJLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBNSUMgY2FsY3VsYXRpb24KKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJk91dEJ1ZmZlciwgNTEyKTsKKworICAgIGlmIChPdXRCdWZmZXIgPT0gTlVMTCkKKyAgICB7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiEhIUNhbGN1bGF0ZU1JQzogbm8gbWVtb3J5ISEhXG4iKSk7CisJCXJldHVybjsKKyAgICB9CisKKwkvLyBtYWtlIGEgZnJhbWUgZm9yIGNhbGN1bGF0aW5nIE1JQy4KKyAgICBNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIsICAgICAgICAgICAgCSZGcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwTXNnLT5Cb2R5X0xlblsxXSArIDQsICAJcE1zZywKKyAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwlOZGlzWmVyb01lbW9yeShtaWMsIHNpemVvZihtaWMpKTsKKworCS8vIENhbGN1bGF0ZSBNSUMKKyAgICBpZiAoUGVlcldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorIAl7CisJCUhNQUNfU0hBMShPdXRCdWZmZXIsICBGcmFtZUxlbiwgUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KG1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUoUFRLLCAgTEVOX0VBUF9NSUNLLCBPdXRCdWZmZXIsIEZyYW1lTGVuLCBtaWMpOworCX0KKworCS8vIHN0b3JlIHRoZSBjYWxjdWxhdGVkIE1JQworCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5TWljLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJb3NfZnJlZV9tZW0ocEFkLCBPdXRCdWZmZXIpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU29tZSByZWNlaXZlZCBmcmFtZXMgY2FuJ3QgZGVjcnlwdCBieSBBc2ljLCBzbyBkZWNyeXB0IHRoZW0gYnkgc29mdHdhcmUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJUGVlcldlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJLQlkZWNyeXB0aW9uIHN1Y2Nlc3NmdWwKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQkJLQlkZWNyeXB0aW9uIGZhaWx1cmUKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCVJUTVBTb2Z0RGVjcnlwdEJyb2FkQ2FzdERhdGEoCisJSU4JUFJUTVBfQURBUFRFUgkJCQkJcEFkLAorCUlOCVJYX0JMSwkJCQkJCQkqcFJ4QmxrLAorCUlOICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAJR3JvdXBDaXBoZXIsCisJSU4gIFBDSVBIRVJfS0VZCQkJCQkJcFNoYXJkX2tleSkKK3sKKwlQUlhXSV9TVFJVQwkJCXBSeFdJID0gcFJ4QmxrLT5wUnhXSTsKKworCisKKwkvLyBoYW5kbGUgV0VQIGRlY3J5cHRpb24KKwlpZiAoR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkKKyAgICB7CisJCWlmIChSVE1QU29mdERlY3J5cHRXRVAocEFkLCBwUnhCbGstPnBEYXRhLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LCBwU2hhcmRfa2V5KSkKKwkJeworCisJCQkvL01pbnVzIElWWzRdICYgSUNWWzRdCisJCQlwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IC09IDg7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUiA6IFNvZnR3YXJlIGRlY3J5cHQgV0VQIGRhdGEgZmFpbHMuXG4iKSk7CisJCQkvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCQl9CisJfQorCS8vIGhhbmRsZSBUS0lQIGRlY3J5cHRpb24KKwllbHNlIGlmIChHcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCXsKKwkJaWYgKFJUTVBTb2Z0RGVjcnlwdFRLSVAocEFkLCBwUnhCbGstPnBEYXRhLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LCAwLCBwU2hhcmRfa2V5KSkKKwkJeworCisJCQkvL01pbnVzIDggYnl0ZXMgTUlDLCA4IGJ5dGVzIElWL0VJViwgNCBieXRlcyBJQ1YKKwkJCXBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgLT0gMjA7CisJCX0KKyAgICAgICAgZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUiA6IFJUTVBTb2Z0RGVjcnlwdFRLSVAgRmFpbGVkXG4iKSk7CisJCQkvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworICAgICAgICB9CisJfQorCS8vIGhhbmRsZSBBRVMgZGVjcnlwdGlvbgorCWVsc2UgaWYgKEdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQlpZiAoUlRNUFNvZnREZWNyeXB0QUVTKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAsIHBTaGFyZF9rZXkpKQorCQl7CisKKwkJCS8vOCBieXRlcyBNSUMsIDggYnl0ZXMgSVYvRUlWIChDQ01QIEhlYWRlcikKKwkJCXBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgLT0gMTY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUiA6IFJUTVBTb2Z0RGVjcnlwdEFFUyBGYWlsZWRcbiIpKTsKKwkJCS8vIGdpdmUgdXAgdGhpcyBmcmFtZQorCQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2Rmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vZGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkNjAxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2Rmcy5jCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIGFwX2Rmcy5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBTdXBwb3J0IERGUyBmdW5jdGlvbi4KKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgRm9uY2hpICAgIDAzLTEyLTIwMDcgICAgICBjcmVhdGVkCisqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKK3R5cGVkZWYgc3RydWN0IF9SQURBUl9EVVJBVElPTl9UQUJMRQoreworCVVMT05HIFJERHVyUmVnaW9uOworCVVMT05HIFJhZGFyU2lnbmFsRHVyYXRpb247CisJVUxPTkcgVG9sZXJhbmNlOworfSBSQURBUl9EVVJBVElPTl9UQUJMRSwgKlBSQURBUl9EVVJBVElPTl9UQUJMRTsKKworCitzdGF0aWMgVUNIQVIgUmRJZGxlVGltZVRhYmxlW01BWF9SRF9SRUdJT05dWzRdID0KK3sKKwl7OSwgMjUwLCAyNTAsIDI1MH0sCQkvLyBDRQorCXs0LCAyNTAsIDI1MCwgMjUwfSwJCS8vIEZDQworCXs0LCAyNTAsIDI1MCwgMjUwfSwJCS8vIEpBUAorCXsxNSwgMjUwLCAyNTAsIDI1MH0sCS8vIEpBUF9XNTMKKwl7NCwgMjUwLCAyNTAsIDI1MH0JCS8vIEpBUF9XNTYKK307CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCYnAgUmFkYXIgZGV0ZWN0aW9uIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEJicFJhZGFyRGV0ZWN0aW9uU3RhcnQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUlOVDggUmFkYXJQZXJpb2Q7CisKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTE0LCAweDAyKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTIxLCAweDIwKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTIyLCAweDAwKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTIzLCAweDA4LyoweDgwKi8pOworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCAxMjQsIDB4MjgpOworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCAxMjUsIDB4ZmYpOworCisJUmFkYXJQZXJpb2QgPSAoKFVJTlQpUmRJZGxlVGltZVRhYmxlW3BBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uXVswXSArIChVSU5UKXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lKSA8IDI1MCA/CisJCQkoUmRJZGxlVGltZVRhYmxlW3BBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uXVswXSArIHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lKSA6IDI1MDsKKworCVJUTVBfSU9fV1JJVEU4KHBBZCwgMHg3MDIwLCAweDFkKTsKKwlSVE1QX0lPX1dSSVRFOChwQWQsIDB4NzAyMSwgMHg0MCk7CisKKwlSYWRhckRldGVjdGlvblN0YXJ0KHBBZCwgMCwgUmFkYXJQZXJpb2QpOworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJicCBSYWRhciBkZXRlY3Rpb24gcm91dGluZQorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQmJwUmFkYXJEZXRlY3Rpb25TdG9wKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVJUTVBfSU9fV1JJVEU4KHBBZCwgMHg3MDIwLCAweDFkKTsKKwlSVE1QX0lPX1dSSVRFOChwQWQsIDB4NzAyMSwgMHg2MCk7CisKKwlSYWRhckRldGVjdGlvblN0b3AocEFkKTsKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSYWRhciBkZXRlY3Rpb24gcm91dGluZQorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUmFkYXJEZXRlY3Rpb25TdGFydCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOIENUU1Byb3RlY3QsCisJSU4gVUlOVDggQ1RTUGVyaW9kKQoreworCVVJTlQ4IERmc0FjdGl2ZVRpbWUgPSAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgJiAweDFmKTsKKwlVSU5UOCBDdHNQcm90ZWN0ID0gKENUU1Byb3RlY3QgPT0gMSkgPyAweDAyIDogMHgwMTsgLy8gQ1RTIHByb3RlY3QuCisKKwlpZiAoQ1RTUHJvdGVjdCAhPSAwKQorCXsKKwkJc3dpdGNoKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uKQorCQl7CisJCWNhc2UgRkNDOgorCQljYXNlIEpBUF9XNTY6CisJCQlDdHNQcm90ZWN0ID0gMHgwMzsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0U6CisJCWNhc2UgSkFQX1c1MzoKKwkJZGVmYXVsdDoKKwkJCUN0c1Byb3RlY3QgPSAweDAyOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZQorCQlDdHNQcm90ZWN0ID0gMHgwMTsKKworCisJLy8gc2VuZCBzdGFydC1SRCB3aXRoIENUUyBwcm90ZWN0aW9uIGNvbW1hbmQgdG8gTUNVCisJLy8gaGlnaGJ5dGUgWzddCQlyZXNlcnZlCisJLy8gaGlnaGJ5dGUgWzY6NV0JMHg6IHN0b3AgQ2Fycmllci9SYWRhciBkZXRlY3Rpb24KKwkvLyBoaWdoYnl0ZSBbMTBdOglTdGFydCBDYXJyaWVyL1JhZGFyIGRldGVjdGlvbiB3aXRob3V0IENUUyBwcm90ZWN0aW9uLCAxMTogU3RhcnQgQ2Fycmllci9SYWRhciBkZXRlY3Rpb24gd2l0aCBDVFMgcHJvdGVjdGlvbgorCS8vIGhpZ2hieXRlIFs0OjBdCVJhZGFyL2NhcnJpZXIgZGV0ZWN0aW9uIGR1cmF0aW9uLiBJbiAxbXMuCisKKwkvLyBsb3dieXRlIFs3OjBdCVJhZGFyL2NhcnJpZXIgZGV0ZWN0aW9uIHBlcmlvZCwgaW4gMW1zLgorCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg2MCwgMHhmZiwgQ1RTUGVyaW9kLCBEZnNBY3RpdmVUaW1lIHwgKEN0c1Byb3RlY3QgPDwgNSkpOworCS8vQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDYzLCAweGZmLCAxMCwgMCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSYWRhciBkZXRlY3Rpb24gcm91dGluZQorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRQlGb3VuZCByYWRhciBzaWduYWwKKwkJRkFMU0UJTm90IGZvdW5kIHJhZGFyIHNpZ25hbAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSYWRhckRldGVjdGlvblN0b3AoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSYWRhckRldGVjdGlvblN0b3AuXG4iKSk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDYwLCAweGZmLCAweDAwLCAweDAwKTsJLy8gc2VuZCBzdGFydC1SRCB3aXRoIENUUyBwcm90ZWN0aW9uIGNvbW1hbmQgdG8gTUNVCisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSYWRhciBjaGFubmVsIGNoZWNrIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJbmVlZCB0byBkbyByYWRhciBkZXRlY3QKKwkJRkFMU0UJbmVlZCBub3QgdG8gZG8gcmFkYXIgZGV0ZWN0CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJhZGFyQ2hhbm5lbENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQ2gpCit7CisjaWYgMQorCUlOVAkJaTsKKwlCT09MRUFOIHJlc3VsdCA9IEZBTFNFOworCisJZm9yIChpPTA7IGk8cEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKENoID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKKwkJeworCQkJcmVzdWx0ID0gcEFkLT5DaGFubmVsTGlzdFtpXS5EZnNSZXE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7CisjZWxzZQorCUlOVAkJaTsKKwlVQ0hBUglDaGFubmVsWzE1XT17NTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwfTsKKworCWZvciAoaT0wOyBpPDE1OyBpKyspCisJeworCQlpZiAoQ2ggPT0gQ2hhbm5lbFtpXSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSAhPSAxNSkKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7CisjZW5kaWYKK30KKworVUxPTkcgSmFwUmFkYXJUeXBlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVMT05HCQlpOworCWNvbnN0IFVDSEFSCUNoYW5uZWxbMTVdPXs1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDB9OworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uICE9IEpBUCkKKwl7CisJCXJldHVybiBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbjsKKwl9CisKKwlmb3IgKGk9MDsgaTwxNTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPT0gQ2hhbm5lbFtpXSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA8IDQpCisJCXJldHVybiBKQVBfVzUzOworCWVsc2UgaWYgKGkgPCAxNSkKKwkJcmV0dXJuIEpBUF9XNTY7CisJZWxzZQorCQlyZXR1cm4gSkFQOyAvLyBXNTIKKworfQorCitVTE9ORyBSVE1QQmJwUmVhZFJhZGFyRHVyYXRpb24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUlOVDggYnl0ZVZhbHVlID0gMDsKKwlVTE9ORyByZXN1bHQ7CisKKwlCQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMTUsICZieXRlVmFsdWUpOworCisJcmVzdWx0ID0gMDsKKwlzd2l0Y2ggKGJ5dGVWYWx1ZSkKKwl7CisJY2FzZSAxOiAvLyByYWRhciBzaWduYWwgZGV0ZWN0ZWQgYnkgcHVsc2UgbW9kZS4KKwljYXNlIDI6IC8vIHJhZGFyIHNpZ25hbCBkZXRlY3RlZCBieSB3aWR0aCBtb2RlLgorCQlyZXN1bHQgPSBSVE1QUmVhZFJhZGFyRHVyYXRpb24ocEFkKTsKKwkJYnJlYWs7CisKKwljYXNlIDA6IC8vIE5vIHJhZGFyIHNpZ25hbC4KKwlkZWZhdWx0OgorCisJCXJlc3VsdCA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK1VMT05HIFJUTVBSZWFkUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVTE9ORyByZXN1bHQgPSAwOworCisjaWZkZWYgREZTX1NVUFBPUlQKKwlVSU5UOCBkdXJhdGlvbjEgPSAwLCBkdXJhdGlvbjIgPSAwLCBkdXJhdGlvbjMgPSAwOworCisJQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMTE2LCAmZHVyYXRpb24xKTsKKwlCQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMTcsICZkdXJhdGlvbjIpOworCUJCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjExOCwgJmR1cmF0aW9uMyk7CisJcmVzdWx0ID0gKGR1cmF0aW9uMSA8PCAxNikgKyAoZHVyYXRpb24yIDw8IDgpICsgZHVyYXRpb24zOworI2VuZGlmIC8vIERGU19TVVBQT1JUIC8vCisKKwlyZXR1cm4gcmVzdWx0OworCit9CisKK1ZPSUQgUlRNUENsZWFuUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlyZXR1cm47Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmFkYXIgd2F2ZSBkZXRlY3Rpb24uIFRoZSBBUEkgc2hvdWxkIGJlIGludm9rZSBlYWNoIHNlY29uZC4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgcEFkICAgICAgICAgLSBBZGFwdGVyIHBvaW50ZXIKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBcFJhZGFyRGV0ZWN0UGVyaW9kaWMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSU5UCWk7CisKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5JblNlcnZpY2VNb25pdG9yQ291bnQrKzsKKworCWZvciAoaT0wOyBpPHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwl7CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgPiAwKQorCQl7CisJCQlwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgLS07CisJCQlpZiAoKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kJTUpID09IDApCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFkYXJEZXRlY3RQZXJpb2RpYyAtIGNoPSVkLCBSZW1haW5pbmdUaW1lRm9yVXNlPSVkXG4iLCBwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwsIHBBZC0+Q2hhbm5lbExpc3RbaV0uUmVtYWluaW5nVGltZUZvclVzZSkpOworCQkJfQorCQl9CisJfQorCisJLy9yYWRhciBkZXRlY3QKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJJiYgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpCisJCSYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpCisJeworCQlSYWRhckRldGVjdFBlcmlvZGljKHBBZCk7CisJfQorCisJcmV0dXJuOworfQorCisvLyBQZXJpb2RpYyBSYWRhciBkZXRlY3Rpb24sIHN3aXRjaCBjaGFubmVsIHdpbGwgb2NjdXIgaW4gUlRNUEhhbmRsZVRCVFRJbnRlcnJ1cHQoKQorLy8gQmVmb3JlIHN3aXRjaCBjaGFubmVsLCBkcml2ZXIgbmVlZHMgZG9pbmcgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50LgorVk9JRCBSYWRhckRldGVjdFBlcmlvZGljKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCS8vIG5lZWQgdG8gY2hlY2sgY2hhbm5lbCBhdmFpbGFiaWxpdHksIGFmdGVyIHN3aXRjaCBjaGFubmVsCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9TSUxFTkNFX01PREUpCisJCQlyZXR1cm47CisKKwkvLyBjaGFubmVsIGF2YWlsYWJpbGl0eSBjaGVjayB0aW1lIGlzIDYwc2VjLCB1c2UgNjUgZm9yIGFzc3VyYW5jZQorCWlmIChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRENvdW50KysgPiBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DaE1vdmluZ1RpbWUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb3QgZm91bmQgcmFkYXIgc2lnbmFsLCBzdGFydCBzZW5kIGJlYWNvbiBhbmQgcmFkYXIgZGV0ZWN0aW9uIGluIHNlcnZpY2UgbW9uaXRvclxuXG4iKSk7CisJCQlCYnBSYWRhckRldGVjdGlvblN0b3AocEFkKTsKKwkJQXNpY0VuYWJsZUJzc1N5bmMocEFkKTsKKwkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfTk9STUFMX01PREU7CisKKworCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQorCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKwkJY2hhbmdlIGNoYW5uZWwgbW92aW5nIHRpbWUgZm9yIERGUyB0ZXN0aW5nLgorCisJQXJndW1lbnRzOgorCSAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCSAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICAgICAxLikgaXdwcml2IHJhMCBzZXQgQ2hNb3ZUaW1lPVt2YWx1ZV0KKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfQ2hNb3ZpbmdUaW1lX1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZykKK3sKKwlVSU5UOCBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNoTW92aW5nVGltZSA9IFZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OiAlZFxuIiwgX19GVU5DVElPTl9fLAorCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DaE1vdmluZ1RpbWUpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X0xvbmdQdWxzZVJhZGFyVGhfUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgYXJnKQoreworCVVJTlQ4IFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID4gMTAgPyAxMCA6IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5Mb25nUHVsc2VSYWRhclRoID0gVmFsdWU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6ICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkxvbmdQdWxzZVJhZGFyVGgpKTsKKworCXJldHVybiBUUlVFOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlMWRjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2VlcHJvbS5jCkBAIC0wLDAgKzEsMTQ5OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwllZXByb20uYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKK1ZPSUQgUmFpc2VDbG9jaygKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVUlOVDMyICp4KQoreworICAgICp4ID0gKnggfCBFRVNLOworICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsICp4KTsKKyAgICBSVE1QdXNlY0RlbGF5KDEpOwkJCQkvLyBNYXggZnJlcXVlbmN5ID0gMU1IeiBpbiBTcGVjLiBkZWZpbml0aW9uCit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitWT0lEIExvd2VyQ2xvY2soCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFVJTlQzMiAqeCkKK3sKKyAgICAqeCA9ICp4ICYgfkVFU0s7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgKngpOworICAgIFJUTVB1c2VjRGVsYXkoMSk7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitVU0hPUlQgU2hpZnRJbkJpdHMoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisgICAgVUlOVDMyCQl4LGk7CisJVVNIT1JUICAgICAgZGF0YT0wOworCisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisKKyAgICB4ICY9IH4oIEVFRE8gfCBFRURJKTsKKworICAgIGZvcihpPTA7IGk8MTY7IGkrKykKKyAgICB7CisgICAgICAgIGRhdGEgPSBkYXRhIDw8IDE7CisgICAgICAgIFJhaXNlQ2xvY2socEFkLCAmeCk7CisKKyAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisJCUxvd2VyQ2xvY2socEFkLCAmeCk7IC8vcHJldmVudCByZWFkIGZhaWxlZAorCisgICAgICAgIHggJj0gfihFRURJKTsKKyAgICAgICAgaWYoeCAmIEVFRE8pCisgICAgICAgICAgICBkYXRhIHw9IDE7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitWT0lEIFNoaWZ0T3V0Qml0cygKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVVNIT1JUIGRhdGEsCisgICAgSU4gIFVTSE9SVCBjb3VudCkKK3sKKyAgICBVSU5UMzIgICAgICAgeCxtYXNrOworCisgICAgbWFzayA9IDB4MDEgPDwgKGNvdW50IC0gMSk7CisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisKKyAgICB4ICY9IH4oRUVETyB8IEVFREkpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHggJj0gfkVFREk7CisgICAgICAgIGlmKGRhdGEgJiBtYXNrKQkJeCB8PSBFRURJOworCisgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOworCisgICAgICAgIFJhaXNlQ2xvY2socEFkLCAmeCk7CisgICAgICAgIExvd2VyQ2xvY2socEFkLCAmeCk7CisKKyAgICAgICAgbWFzayA9IG1hc2sgPj4gMTsKKyAgICB9IHdoaWxlKG1hc2spOworCisgICAgeCAmPSB+RUVESTsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKK30KKworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKK1ZPSUQgRUVwcm9tQ2xlYW51cCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyAgICBVSU5UMzIgeDsKKworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCisgICAgeCAmPSB+KEVFQ1MgfCBFRURJKTsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworICAgIFJhaXNlQ2xvY2socEFkLCAmeCk7CisgICAgTG93ZXJDbG9jayhwQWQsICZ4KTsKK30KKworVk9JRCBFV0VOKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworICAgIFVJTlQzMgl4OworCisgICAgLy8gcmVzZXQgYml0cyBhbmQgc2V0IEVFQ1MKKyAgICBSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKyAgICB4ICY9IH4oRUVESSB8IEVFRE8gfCBFRVNLKTsKKyAgICB4IHw9IEVFQ1M7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkvLyBraWNrIGEgcHVsc2UKKwlSYWlzZUNsb2NrKHBBZCwgJngpOworCUxvd2VyQ2xvY2socEFkLCAmeCk7CisKKyAgICAvLyBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlIGFuZCBzaXggcHVsc2UgaW4gdGhhdCBvcmRlcgorICAgIFNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9FV0VOX09QQ09ERSwgNSk7CisgICAgU2hpZnRPdXRCaXRzKHBBZCwgMCwgNik7CisKKyAgICBFRXByb21DbGVhbnVwKHBBZCk7Cit9CisKK1ZPSUQgRVdEUygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyAgICBVSU5UMzIJeDsKKworICAgIC8vIHJlc2V0IGJpdHMgYW5kIHNldCBFRUNTCisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisgICAgeCAmPSB+KEVFREkgfCBFRURPIHwgRUVTSyk7CisgICAgeCB8PSBFRUNTOworICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOworCisJLy8ga2ljayBhIHB1bHNlCisJUmFpc2VDbG9jayhwQWQsICZ4KTsKKwlMb3dlckNsb2NrKHBBZCwgJngpOworCisgICAgLy8gb3V0cHV0IHRoZSByZWFkX29wY29kZSBhbmQgc2l4IHB1bHNlIGluIHRoYXQgb3JkZXIKKyAgICBTaGlmdE91dEJpdHMocEFkLCBFRVBST01fRVdEU19PUENPREUsIDUpOworICAgIFNoaWZ0T3V0Qml0cyhwQWQsIDAsIDYpOworCisgICAgRUVwcm9tQ2xlYW51cChwQWQpOworfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorVVNIT1JUIFJUTVBfRUVQUk9NX1JFQUQxNigKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVVNIT1JUIE9mZnNldCkKK3sKKyAgICBVSU5UMzIJCXg7CisgICAgVVNIT1JUCQlkYXRhOworCisJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5BbnREaXZlcnNpdHkpCisgICAgeworICAgIAlwQWQtPkVlcHJvbUFjY2VzcyA9IFRSVUU7CisgICAgfQorLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KK3sKKyAgICBPZmZzZXQgLz0gMjsKKyAgICAvLyByZXNldCBiaXRzIGFuZCBzZXQgRUVDUworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworICAgIHggJj0gfihFRURJIHwgRUVETyB8IEVFU0spOworICAgIHggfD0gRUVDUzsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCS8vIHBhdGNoIGNhbiBub3QgYWNjZXNzIGUtRnVzZSBpc3N1ZQorICAgIGlmICghSVNfUlQzMDkwKHBBZCkpCisgICAgeworCS8vIGtpY2sgYSBwdWxzZQorCVJhaXNlQ2xvY2socEFkLCAmeCk7CisJTG93ZXJDbG9jayhwQWQsICZ4KTsKKyAgICB9CisKKyAgICAvLyBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlIGFuZCByZWdpc3RlciBudW1iZXIgaW4gdGhhdCBvcmRlcgorICAgIFNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9SRUFEX09QQ09ERSwgMyk7CisgICAgU2hpZnRPdXRCaXRzKHBBZCwgT2Zmc2V0LCBwQWQtPkVFUFJPTUFkZHJlc3NOdW0pOworCisgICAgLy8gTm93IHJlYWQgdGhlIGRhdGEgKDE2IGJpdHMpIGluIGZyb20gdGhlIHNlbGVjdGVkIEVFUFJPTSB3b3JkCisgICAgZGF0YSA9IFNoaWZ0SW5CaXRzKHBBZCk7CisKKyAgICBFRXByb21DbGVhbnVwKHBBZCk7CisKKwkvLyBBbnRlbm5hIGFuZCBFRVBST00gYWNjZXNzIGFyZSBib3RoIHVzaW5nIEVFU0sgcGluLAorICAgIC8vIFRoZXJlZm9yIHdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgRUVTSyBhdCB0aGUgc2FtZSB0aW1lCisgICAgLy8gVGhlbiByZXN0b3JlIGFudGVubmEgYWZ0ZXIgRUVQUk9NIGFjY2VzcworCWlmICgocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkgfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwKSkKKyAgICB7CisJICAgIHBBZC0+RWVwcm9tQWNjZXNzID0gRkFMU0U7CisJICAgIEFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworICAgIH0KK30KKyAgICByZXR1cm4gZGF0YTsKK30JLy9SZWFkRUVwcm9tCisKK1ZPSUQgUlRNUF9FRVBST01fV1JJVEUxNigKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVVNIT1JUIE9mZnNldCwKKyAgICBJTiAgVVNIT1JUIERhdGEpCit7CisgICAgVUlOVDMyIHg7CisKKwlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkKKyAgICB7CisgICAgCXBBZC0+RWVwcm9tQWNjZXNzID0gVFJVRTsKKyAgICB9CisJLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KKwl7CisJT2Zmc2V0IC89IDI7CisKKwlFV0VOKHBBZCk7CisKKyAgICAvLyByZXNldCBiaXRzIGFuZCBzZXQgRUVDUworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworICAgIHggJj0gfihFRURJIHwgRUVETyB8IEVFU0spOworICAgIHggfD0gRUVDUzsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCS8vIHBhdGNoIGNhbiBub3QgYWNjZXNzIGUtRnVzZSBpc3N1ZQorICAgIGlmICghSVNfUlQzMDkwKHBBZCkpCisgICAgeworCS8vIGtpY2sgYSBwdWxzZQorCVJhaXNlQ2xvY2socEFkLCAmeCk7CisJTG93ZXJDbG9jayhwQWQsICZ4KTsKKyAgICB9CisKKyAgICAvLyBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlICxyZWdpc3RlciBudW1iZXIgYW5kIGRhdGEgaW4gdGhhdCBvcmRlcgorICAgIFNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9XUklURV9PUENPREUsIDMpOworICAgIFNoaWZ0T3V0Qml0cyhwQWQsIE9mZnNldCwgcEFkLT5FRVBST01BZGRyZXNzTnVtKTsKKwlTaGlmdE91dEJpdHMocEFkLCBEYXRhLCAxNik7CQkvLyAxNi1iaXQgYWNjZXNzCisKKyAgICAvLyByZWFkIERPIHN0YXR1cworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCisJRUVwcm9tQ2xlYW51cChwQWQpOworCisJUlRNUHVzZWNEZWxheSgxMDAwMCk7CS8vZGVsYXkgZm9yIHR3cChNQVgpPTEwbXMKKworCUVXRFMocEFkKTsKKworICAgIEVFcHJvbUNsZWFudXAocEFkKTsKKworCS8vIEFudGVubmEgYW5kIEVFUFJPTSBhY2Nlc3MgYXJlIGJvdGggdXNpbmcgRUVTSyBwaW4sCisgICAgLy8gVGhlcmVmb3Igd2Ugc2hvdWxkIGF2b2lkIGFjY2Vzc2luZyBFRVNLIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAvLyBUaGVuIHJlc3RvcmUgYW50ZW5uYSBhZnRlciBFRVBST00gYWNjZXNzCisJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KSB8fCAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApKQorICAgIHsKKwkgICAgcEFkLT5FZXByb21BY2Nlc3MgPSBGQUxTRTsKKwkgICAgQXNpY1NldFJ4QW50KHBBZCwgcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCk7CisgICAgfQorfQorfQorCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2U8LS0KKyNpZmRlZiBSVDMweHgKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUNIQVIgZUZ1c2VSZWFkUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSkKK3sKKwlFRlVTRV9DVFJMX1NUUlVDCQllRnVzZUN0cmxTdHJ1YzsKKwlpbnQJaTsKKwlVU0hPUlQJZWZ1c2VEYXRhT2Zmc2V0OworCVVJTlQzMglkYXRhOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCS8vU3RlcDAuIFdyaXRlIDEwLWJpdCBvZiBhZGRyZXNzIHRvIEVGU1JPTV9BSU4gKDB4NTgwLCBiaXQyNTpiaXQxNikuIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbm1lbnQuCisJLy9Vc2UgdGhlIGVlcHJvbSBsb2dpY2FsIGFkZHJlc3MgYW5kIGNvdmVydCB0byBhZGRyZXNzIHRvIGJsb2NrIG51bWJlcgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMC4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDA7CisKKwkvL1N0ZXAyLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQkvL3J0bXAuSHdNZW1vcnlSZWFkRHdvcmQoRUZVU0VfQ1RSTCwgKERXT1JEICopICZlRnVzZUN0cmxTdHJ1YywgNCk7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCXsKKwkJCWJyZWFrOworCQl9CisJCVJUTVB1c2VjRGVsYXkoMik7CisJCWkrKzsKKwl9CisKKwkvL2lmIEVGU1JPTV9BT1VUIGlzIG5vdCBmb3VuZCBpbiBwaHlzaWNhbCBhZGRyZXNzLCB3cml0ZSAweGZmZmYKKwlpZiAoZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FPVVQgPT0gMHgzZikKKwl7CisJCWZvcihpPTA7IGk8TGVuZ3RoLzI7IGkrKykKKwkJCSoocERhdGErMippKSA9IDB4ZmZmZjsKKwl9CisJZWxzZQorCXsKKwkJLy9TdGVwNC4gUmVhZCAxNi1ieXRlIG9mIGRhdGEgZnJvbSBFRlVTRV9EQVRBMC0zICgweDU5MC0weDU5QykKKwkJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzIC0gKE9mZnNldCAmIDB4QykgIDsKKwkJLy9kYXRhIGhvbGQgNCBieXRlcyBkYXRhLgorCQkvL0luIFJUTVBfSU9fUkVBRDMyIHdpbGwgYXV0b21hdGljYWxseSBleGVjdXRlIDMyLWJ5dGVzIHN3YXBwaW5nCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAmZGF0YSk7CisJCS8vRGVjaWRlIHRoZSB1cHBlciAyIGJ5dGVzIG9yIHRoZSBib3R0b20gMiBieXRlcy4KKwkJLy8gTGl0dGxlLWVuZGlhbgkJUwl8CVMJQmlnLWVuZGlhbgorCQkvLyBhZGRyCTMJMgkxCTAJfAkwCTEJMgkzCisJCS8vIE9yaS1WCUQJQwlCCUEJfAlBCUIJQwlECisJCS8vQWZ0ZXIgc3dhcHBpbmcKKwkJLy8JCUQJQwlCCUEJfAlECUMJQglBCisJCS8vUmV0dXJuIDItYnl0ZXMKKwkJLy9UaGUgcmV0dXJuIGJ5dGUgc3RhdHJzIGZyb20gUy4gVGhlcmVmb3JlLCB0aGUgbGl0dGxlLWVuZGlhbiB3aWxsIHJldHVybiBCQSwgdGhlIEJpZy1lbmRpYW4gd2lsbCByZXR1cm4gREMuCisJCS8vRm9yIHJldHVybmluZyB0aGUgYm90dG9tIDIgYnl0ZXMsIHRoZSBCaWctZW5kaWFuIHNob3VsZCBzaGlmdCByaWdodCAyLWJ5dGVzLgorI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJZGF0YSA9IGRhdGEgPDwgKDgqKChPZmZzZXQgJiAweDMpXjB4MikpOworI2Vsc2UKKwkJZGF0YSA9IGRhdGEgPj4gKDgqKE9mZnNldCAmIDB4MykpOworI2VuZGlmCisKKwkJTmRpc01vdmVNZW1vcnkocERhdGEsICZkYXRhLCBMZW5ndGgpOworCX0KKworCXJldHVybiAoVUNIQVIpIGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BT1VUOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBlRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJT1VUCVVTSE9SVCogcERhdGEpCit7CisJRUZVU0VfQ1RSTF9TVFJVQwkJZUZ1c2VDdHJsU3RydWM7CisJaW50CWk7CisJVVNIT1JUCWVmdXNlRGF0YU9mZnNldDsKKwlVSU5UMzIJZGF0YTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisKKwkvL1N0ZXAwLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMS4KKwkvL1JlYWQgaW4gcGh5c2ljYWwgdmlldworCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMTsKKworCS8vU3RlcDIuIFdyaXRlIEVGU1JPTV9LSUNLICgweDU4MCwgYml0MzApIHRvIDEgdG8ga2ljay1vZmYgcGh5c2ljYWwgcmVhZCBwcm9jZWR1cmUuCisJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0tJQ0sgPSAxOworCisJTmRpc01vdmVNZW1vcnkoJmRhdGEsICZlRnVzZUN0cmxTdHJ1YywgNCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgRUZVU0VfQ1RSTCwgZGF0YSk7CisKKwkvL1N0ZXAzLiBQb2xsaW5nIEVGU1JPTV9LSUNLKDB4NTgwLCBiaXQzMCkgdW50aWwgaXQgYmVjb21lIDAgYWdhaW4uCisJaSA9IDA7CisJd2hpbGUoaSA8IDEwMCkKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQlicmVhazsKKwkJUlRNUHVzZWNEZWxheSgyKTsKKwkJaSsrOworCX0KKworCS8vU3RlcDQuIFJlYWQgMTYtYnl0ZSBvZiBkYXRhIGZyb20gRUZVU0VfREFUQTAtMyAoMHg1OUMtMHg1OTApCisJLy9CZWNhdXNlIHRoZSBzaXplIG9mIGVhY2ggRUZVU0VfREFUQSBpcyA0IEJ5dGVzLCB0aGUgc2l6ZSBvZiBhZGRyZXNzIG9mIGVhY2ggaXMgMiBiaXRzLgorCS8vVGhlIHByZXZpb3VzIDIgYml0cyBpcyB0aGUgRUZVU0VfREFUQSBudW1iZXIsIHRoZSBsYXN0IDIgYml0cyBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBieXRlcworCS8vRGVjaWRlIHdoaWNoIEVGVVNFX0RBVEEgdG8gcmVhZAorCS8vNTkwOkYgRSBEIEMKKwkvLzU5NDpCIEEgOSA4CisJLy81OTg6NyA2IDUgNAorCS8vNTlDOjMgMiAxIDAKKwllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTMgLSAoT2Zmc2V0ICYgMHhDKSAgOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBlZnVzZURhdGFPZmZzZXQsICZkYXRhKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJZGF0YSA9IGRhdGEgPDwgKDgqKChPZmZzZXQgJiAweDMpXjB4MikpOworI2Vsc2UKKwlkYXRhID0gZGF0YSA+PiAoOCooT2Zmc2V0ICYgMHgzKSk7CisjZW5kaWYKKworCU5kaXNNb3ZlTWVtb3J5KHBEYXRhLCAmZGF0YSwgTGVuZ3RoKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VSZWFkUGh5c2ljYWwoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisgIAlJTglQVVNIT1JUIGxwSW5CdWZmZXIsCisgIAlJTglVTE9ORyBuSW5CdWZmZXJTaXplLAorICAJT1VUCVBVU0hPUlQgbHBPdXRCdWZmZXIsCisgIAlJTglVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKQoreworCVVTSE9SVCogcEluQnVmID0gKFVTSE9SVCopbHBJbkJ1ZmZlcjsKKwlVU0hPUlQqIHBPdXRCdWYgPSAoVVNIT1JUKilscE91dEJ1ZmZlcjsKKworCVVTSE9SVCBPZmZzZXQgPSBwSW5CdWZbMF07CQkJCQkvL2FkZHIKKwlVU0hPUlQgTGVuZ3RoID0gcEluQnVmWzFdOwkJCQkJLy9sZW5ndGgKKwlpbnQgCQlpOworCisJZm9yKGk9MDsgaTxMZW5ndGg7IGkrPTIpCisJeworCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsT2Zmc2V0K2ksIDIsICZwT3V0QnVmW2kvMl0pOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBlRnVzZVJlYWQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCU9VVAlQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlMZW5ndGgpCit7CisJVVNIT1JUKiBwT3V0QnVmID0gKFVTSE9SVCopcERhdGE7CisJTlRTVEFUVVMJU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJVUNIQVIJRUZTUk9NX0FPVVQ7CisJaW50CWk7CisKKwlmb3IoaT0wOyBpPExlbmd0aDsgaSs9MikKKwl7CisJCUVGU1JPTV9BT1VUID0gZUZ1c2VSZWFkUmVnaXN0ZXJzKHBBZCwgT2Zmc2V0K2ksIDIsICZwT3V0QnVmW2kvMl0pOworCX0KKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VQaHlzaWNhbFdyaXRlUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSkKK3sKKwlFRlVTRV9DVFJMX1NUUlVDCQllRnVzZUN0cmxTdHJ1YzsKKwlpbnQJaTsKKwlVU0hPUlQJZWZ1c2VEYXRhT2Zmc2V0OworCVVJTlQzMglkYXRhLCBlRnVzZURhdGFCdWZmZXJbNF07CisKKwkvL1N0ZXAwLiBXcml0ZSAxNi1ieXRlIG9mIGRhdGEgdG8gRUZVU0VfREFUQTAtMyAoMHg1OTAtMHg1OUMpLCB3aGVyZSBFRlVTRV9EQVRBMCBpcyB0aGUgTFNCIERXLCBFRlVTRV9EQVRBMyBpcyB0aGUgTVNCIERXLgorCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkvL3JlYWQgY3VycmVudCB2YWx1ZXMgb2YgMTYtYnl0ZSBibG9jaworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisKKwkvL1N0ZXAwLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMS4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDE7CisKKwkvL1N0ZXAyLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQlicmVhazsKKwkJUlRNUHVzZWNEZWxheSgyKTsKKwkJaSsrOworCX0KKworCS8vU3RlcDQuIFJlYWQgMTYtYnl0ZSBvZiBkYXRhIGZyb20gRUZVU0VfREFUQTAtMyAoMHg1OUMtMHg1OTApCisJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzOworCWZvcihpPTA7IGk8IDQ7IGkrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAoUFVJTlQzMikgJmVGdXNlRGF0YUJ1ZmZlcltpXSk7CisJCWVmdXNlRGF0YU9mZnNldCAtPSAgNDsKKwl9CisKKwkvL1VwZGF0ZSB0aGUgdmFsdWUsIHRoZSBvZmZzZXQgaXMgbXVsdGlwbGUgb2YgMiwgbGVuZ3RoIGlzIDIKKwllZnVzZURhdGFPZmZzZXQgPSAoT2Zmc2V0ICYgMHhjKSA+PiAyOworCWRhdGEgPSBwRGF0YVswXSAmIDB4ZmZmZjsKKwkvL1RoZSBvZmZzZXQgc2hvdWxkIGJlIDB4KioqMTAgb3IgMHgqKiowMAorCWlmKChPZmZzZXQgJSA0KSAhPSAwKQorCXsKKwkJZUZ1c2VEYXRhQnVmZmVyW2VmdXNlRGF0YU9mZnNldF0gPSAoZUZ1c2VEYXRhQnVmZmVyW2VmdXNlRGF0YU9mZnNldF0gJiAweGZmZmYpIHwgKGRhdGEgPDwgMTYpOworCX0KKwllbHNlCisJeworCQllRnVzZURhdGFCdWZmZXJbZWZ1c2VEYXRhT2Zmc2V0XSA9IChlRnVzZURhdGFCdWZmZXJbZWZ1c2VEYXRhT2Zmc2V0XSAmIDB4ZmZmZjAwMDApIHwgZGF0YTsKKwl9CisKKwllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTM7CisJZm9yKGk9MDsgaTwgNDsgaSsrKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCBlRnVzZURhdGFCdWZmZXJbaV0pOworCQllZnVzZURhdGFPZmZzZXQgLT0gNDsKKwl9CisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCS8vU3RlcDEuIFdyaXRlIDEwLWJpdCBvZiBhZGRyZXNzIHRvIEVGU1JPTV9BSU4gKDB4NTgwLCBiaXQyNTpiaXQxNikuIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbm1lbnQuCisJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FJTiA9IE9mZnNldCAmIDB4ZmZmMDsKKworCS8vU3RlcDIuIFdyaXRlIEVGU1JPTV9NT0RFICgweDU4MCwgYml0NzpiaXQ2KSB0byAzLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMzsKKworCS8vU3RlcDMuIFdyaXRlIEVGU1JPTV9LSUNLICgweDU4MCwgYml0MzApIHRvIDEgdG8ga2ljay1vZmYgcGh5c2ljYWwgd3JpdGUgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwNC4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLiBJdKGmcyBkb25lLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDIpOworCQlpKys7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIGVGdXNlV3JpdGVSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCUlOCVVTSE9SVCogcERhdGEpCit7CisJVVNIT1JUCWk7CisJVVNIT1JUCWVGdXNlRGF0YTsKKwlVU0hPUlQJTG9naWNhbEFkZHJlc3MsIEJsa051bSA9IDB4ZmZmZjsKKwlVQ0hBUglFRlNST01fQU9VVDsKKworCVVTSE9SVCBhZGRyLHRtcGFkZHIsIEluQnVmWzNdLCB0bXBPZmZzZXQ7CisJVVNIT1JUIGJ1ZmZlcls4XTsKKwlCT09MRUFOCQliV3JpdGVTdWNjZXNzID0gVFJVRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnMgT2Zmc2V0PSV4LCBwRGF0YT0leFxuIiwgT2Zmc2V0LCAqcERhdGEpKTsKKworCS8vU3RlcCAwLiBmaW5kIHRoZSBlbnRyeSBpbiB0aGUgbWFwcGluZyB0YWJsZQorCS8vVGhlIGFkZHJlc3Mgb2YgRUVQUk9NIGlzIDItYnl0ZXMgYWxpZ25tZW50LgorCS8vVGhlIGxhc3QgYml0IGlzIHVzZWQgZm9yIGFsaWdubWVudCwgc28gaXQgbXVzdCBiZSAwLgorCXRtcE9mZnNldCA9IE9mZnNldCAmIDB4ZmZmZTsKKwlFRlNST01fQU9VVCA9IGVGdXNlUmVhZFJlZ2lzdGVycyhwQWQsIHRtcE9mZnNldCwgMiwgJmVGdXNlRGF0YSk7CisKKwlpZiggRUZTUk9NX0FPVVQgPT0gMHgzZikKKwl7CS8vZmluZCBhdmFpbGFibGUgbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIKKwkJLy90aGUgbG9naWNhbCBhZGRyZXNzIGRvZXMgbm90IGV4aXN0LCBmaW5kIGFuIGVtcHR5IG9uZQorCQkvL2Zyb20gdGhlIGZpcnN0IGFkZHJlc3Mgb2YgYmxvY2sgNDU9MTYqNDU9MHgyZDAgdG8gdGhlIGxhc3QgYWRkcmVzcyBvZiBibG9jayA0NworCQkvLz09PjQ4KjE2LTMocmVzZXJ2ZWQpPTJGQworCQlmb3IgKGk9RUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpPD1FRlVTRV9VU0FHRV9NQVBfRU5EOyBpKz0yKQorCQl7CisJCQkvL1JldHJpdmUgdGhlIGxvZ2ljYWwgYmxvY2sgbnVibWVyIGZvcm0gZWFjaCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJLy9JdCB3aWxsIGFjY2VzcyB0d28gbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIgZWFjaCB0aW1lLgorCQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOworCQkJaWYoIChMb2dpY2FsQWRkcmVzcyAmIDB4ZmYpID09IDApCisJCQl7Ly9Ob3QgdXNlZCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZigoIChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApCisJCQl7Ly9Ob3QgdXNlZCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJCWlmIChpICE9IEVGVVNFX1VTQUdFX01BUF9FTkQpCisJCQkJeworCQkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVCsxOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlCbGtOdW0gPSBFRlNST01fQU9VVDsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzIEJsa051bSA9ICVkIFxuIiwgQmxrTnVtKSk7CisKKwlpZihCbGtOdW0gPT0gMHhmZmZmKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyczogb3V0IG9mIGZyZWUgRS1mdXNlIHNwYWNlISEhXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvL1N0ZXAgMS4gU2F2ZSBkYXRhIG9mIHRoaXMgYmxvY2sJd2hpY2ggaXMgcG9pbnRlZCBieSB0aGUgYXZhaWJsZSBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCS8vIHJlYWQgYW5kIHNhdmUgdGhlIG9yaWdpbmFsIGJsb2NrIGRhdGEKKwlmb3IoaSA9MDsgaTw4OyBpKyspCisJeworCQlhZGRyID0gQmxrTnVtICogMHgxMCA7CisKKwkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJSW5CdWZbMV0gPSAyOworCQlJbkJ1ZlsyXSA9IDB4MDsKKworCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQlidWZmZXJbaV0gPSBJbkJ1ZlsyXTsKKwl9CisKKwkvL1N0ZXAgMi4gVXBkYXRlIHRoZSBkYXRhIGluIGJ1ZmZlciwgYW5kIHdyaXRlIHRoZSBkYXRhIHRvIEVmdXNlCisJYnVmZmVyWyAoT2Zmc2V0ID4+IDEpICUgOF0gPSBwRGF0YVswXTsKKworCWRvCisJeworCQkvL1N0ZXAgMy4gV3JpdGUgdGhlIGRhdGEgdG8gRWZ1c2UKKwkJaWYoIWJXcml0ZVN1Y2Nlc3MpCisJCXsKKwkJCWZvcihpID0wOyBpPDg7IGkrKykKKwkJCXsKKwkJCQlhZGRyID0gQmxrTnVtICogMHgxMCA7CisKKwkJCQlJbkJ1ZlswXSA9IGFkZHIrMippOworCQkJCUluQnVmWzFdID0gMjsKKwkJCQlJbkJ1ZlsyXSA9IGJ1ZmZlcltpXTsKKworCQkJCWVGdXNlV3JpdGVQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNiwgTlVMTCwgMik7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQkJSW5CdWZbMF0gPSBhZGRyKyhPZmZzZXQgJSAxNik7CisJCQkJSW5CdWZbMV0gPSAyOworCQkJCUluQnVmWzJdID0gcERhdGFbMF07CisKKwkJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDIpOworCQl9CisKKwkJLy9TdGVwIDQuIFdyaXRlIG1hcHBpbmcgdGFibGUKKwkJYWRkciA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVCtCbGtOdW07CisKKwkJdG1wYWRkciA9IGFkZHI7CisKKwkJaWYoYWRkciAlIDIgIT0gMCkKKwkJCWFkZHIgPSBhZGRyIC0xOworCQlJbkJ1ZlswXSA9IGFkZHI7CisJCUluQnVmWzFdID0gMjsKKworCQkvL2NvbnZlcnQgdGhlIGFkZHJlc3MgZnJvbSAxMCB0byA4IGJpdCAoIGJpdDcsIDYgPSBwYXJpdHkgYW5kIGJpdDUgfiAwID0gYml0OX40KSwgYW5kIHdyaXRlIHRvIGxvZ2ljYWwgbWFwIGVudHJ5CisJCXRtcE9mZnNldCA9IE9mZnNldDsKKwkJdG1wT2Zmc2V0ID4+PSA0OworCQl0bXBPZmZzZXQgfD0gKCh+KCh0bXBPZmZzZXQgJiAweDAxKSBeICggdG1wT2Zmc2V0ID4+IDEgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDIgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSkpIDw8IDYpICYgMHg0MDsKKwkJdG1wT2Zmc2V0IHw9ICgofiggKHRtcE9mZnNldCA+PiAyICYgMHgwMSkgXiAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSBeICh0bXBPZmZzZXQgPj4gNCAmIDB4MDEpIF4gKCB0bXBPZmZzZXQgPj4gNSAmIDB4MDEpKSkgPDwgNykgJiAweDgwOworCisJCS8vIHdyaXRlIHRoZSBsb2dpY2FsIGFkZHJlc3MKKwkJaWYodG1wYWRkciUyICE9IDApCisJCQlJbkJ1ZlsyXSA9IHRtcE9mZnNldDw8ODsKKwkJZWxzZQorCQkJSW5CdWZbMl0gPSB0bXBPZmZzZXQ7CisKKwkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCisJCS8vU3RlcCA1LiBDb21wYXJlIGRhdGEgaWYgbm90IHRoZSBzYW1lLCBpbnZhbGlkYXRlIHRoZSBtYXBwaW5nIGVudHJ5LCB0aGVuIHJlLXdyaXRlIHRoZSBkYXRhIHVudGlsIEUtZnVzZSBpcyBleGhhdXN0ZWQKKwkJYldyaXRlU3VjY2VzcyA9IFRSVUU7CisJCWZvcihpID0wOyBpPDg7IGkrKykKKwkJeworCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQlJbkJ1ZlswXSA9IGFkZHIrMippOworCQkJSW5CdWZbMV0gPSAyOworCQkJSW5CdWZbMl0gPSAweDA7CisKKwkJCWVGdXNlUmVhZFBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA0LCAmSW5CdWZbMl0sIDIpOworCisJCQlpZihidWZmZXJbaV0gIT0gSW5CdWZbMl0pCisJCQl7CisJCQkJYldyaXRlU3VjY2VzcyA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLy9TdGVwIDYuIGludmxpZGF0ZSBtYXBwaW5nIGVudHJ5IGFuZCBmaW5kIGEgZnJlZSBtYXBwaW5nIGVudHJ5IGlmIG5vdCBzdWNjZWVkCisJCWlmICghYldyaXRlU3VjY2VzcykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTm90IGJXcml0ZVN1Y2Nlc3MgQmxrTnVtID0gJWRcbiIsIEJsa051bSkpOworCisJCQkvLyB0aGUgb2Zmc2V0IG9mIGN1cnJlbnQgbWFwcGluZyBlbnRyeQorCQkJYWRkciA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVCtCbGtOdW07CisKKwkJCS8vZmluZCBhIG5ldyBtYXBwaW5nIGVudHJ5CisJCQlCbGtOdW0gPSAweGZmZmY7CisJCQlmb3IgKGk9RUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpPD1FRlVTRV9VU0FHRV9NQVBfRU5EOyBpKz0yKQorCQkJeworCQkJCWVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHBBZCwgaSwgMiwgJkxvZ2ljYWxBZGRyZXNzKTsKKwkJCQlpZiggKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkKKwkJCQl7CisJCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZigoIChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApCisJCQkJeworCQkJCQlpZiAoaSAhPSBFRlVTRV9VU0FHRV9NQVBfRU5EKQorCQkJCQl7CisJCQkJCQlCbGtOdW0gPSBpKzEtRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vdCBiV3JpdGVTdWNjZXNzIG5ldyBCbGtOdW0gPSAlZFxuIiwgQmxrTnVtKSk7CisJCQlpZihCbGtOdW0gPT0gMHhmZmZmKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnM6IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKworCQkJLy9pbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudHJ5IGlmIG5ldyBlbnRyeSBpcyBub3QgZm91bmQKKwkJCXRtcGFkZHIgPSBhZGRyOworCisJCQlpZihhZGRyICUgMiAhPSAwKQorCQkJCWFkZHIgPSBhZGRyIC0xOworCQkJSW5CdWZbMF0gPSBhZGRyOworCQkJSW5CdWZbMV0gPSAyOworCisJCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQkJLy8gd3JpdGUgdGhlIGxvZ2ljYWwgYWRkcmVzcworCQkJaWYodG1wYWRkciUyICE9IDApCisJCQl7CisJCQkJLy8gSW52YWxpZGF0ZSB0aGUgaGlnaCBieXRlCisJCQkJZm9yIChpPTg7IGk8MTU7IGkrKykKKwkJCQl7CisJCQkJCWlmKCAoIChJbkJ1ZlsyXSA+PiBpKSAmIDB4MDEpID09IDApCisJCQkJCXsKKwkJCQkJCUluQnVmWzJdIHw9ICgweDEgPDxpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGludmFsaWRhdGUgdGhlIGxvdyBieXRlCisJCQkJZm9yIChpPTA7IGk8ODsgaSsrKQorCQkJCXsKKwkJCQkJaWYoICggKEluQnVmWzJdID4+IGkpICYgMHgwMSkgPT0gMCkKKwkJCQkJeworCQkJCQkJSW5CdWZbMl0gfD0gKDB4MSA8PGkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCQl9CisJfQorCXdoaWxlKCFiV3JpdGVTdWNjZXNzKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VXcml0ZVBoeXNpY2FsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorICAJUFVTSE9SVCBscEluQnVmZmVyLAorCVVMT05HIG5JbkJ1ZmZlclNpemUsCisgIAlQVUNIQVIgbHBPdXRCdWZmZXIsCisgIAlVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKQoreworCVVTSE9SVCogcEluQnVmID0gKFVTSE9SVCopbHBJbkJ1ZmZlcjsKKwlpbnQgCQlpOworCS8vVVNIT1JUKiBwT3V0QnVmID0gKFVTSE9SVCopaW9CdWZmZXI7CisKKwlVU0hPUlQgT2Zmc2V0ID0gcEluQnVmWzBdOwkJCQkJLy9hZGRyCisJVVNIT1JUIExlbmd0aCA9IHBJbkJ1ZlsxXTsJCQkJCS8vbGVuZ3RoCisJVVNIT1JUKiBwVmFsdWVYID0gJnBJbkJ1ZlsyXTsJCQkJLy92YWx1ZSAuLi4KKwkJLy8gTGl0dGxlLWVuZGlhbgkJUwl8CVMJQmlnLWVuZGlhbgorCQkvLyBhZGRyCTMJMgkxCTAJfAkwCTEJMgkzCisJCS8vIE9yaS1WCUQJQwlCCUEJfAlBCUIJQwlECisJCS8vQWZ0ZXIgc3dhcHBpbmcKKwkJLy8JCUQJQwlCCUEJfAlECUMJQglBCisJCS8vQm90aCB0aGUgbGl0dGxlIGFuZCBiaWctZW5kaWFuIHVzZSB0aGUgc2FtZSBzZXF1ZW5jZSB0byB3cml0ZSAgZGF0YS4KKwkJLy9UaGVyZWZvcmUsIHdlIG9ubHkgbmVlZCBzd2FwIGRhdGEgd2hlbiByZWFkIHRoZSBkYXRhLgorCWZvcihpPTA7IGk8TGVuZ3RoOyBpKz0yKQorCXsKKwkJZUZ1c2VQaHlzaWNhbFdyaXRlUmVnaXN0ZXJzKHBBZCwgT2Zmc2V0K2ksIDIsICZwVmFsdWVYW2kvMl0pOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIGVGdXNlV3JpdGUoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCkKK3sKKwlpbnQgaTsKKworCVVTSE9SVCogcFZhbHVlWCA9IChQVVNIT1JUKSBwRGF0YTsJCQkJLy92YWx1ZSAuLi4KKwkJLy9UaGUgaW5wdXQgdmFsdWU9MzA3MCB3aWxsIGJlIHN0b3JlZCBhcyBmb2xsb3dpbmcKKyAJCS8vIExpdHRsZS1lbmRpYW4JCVMJfAlTCUJpZy1lbmRpYW4KKwkJLy8gYWRkcgkJCTEJMAl8CTAJMQorCQkvLyBPcmktVgkJCTMwCTcwCXwJMzAJNzAKKwkJLy9BZnRlciBzd2FwcGluZworCQkvLwkJCQkzMAk3MAl8CTcwCTMwCisJCS8vQ2FzdGluZworCQkvLwkJCQkzMDcwCXwJNzAzMCAoeCkKKwkJLy9UaGUgc3dhcHBpbmcgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIGJpZy1lbmRpYW4KKwlmb3IoaT0wOyBpPGxlbmd0aDsgaSs9MikKKwl7CisJCWVGdXNlV3JpdGVSZWdpc3RlcnMocEFkLCBPZmZzZXQraSwgMiwgJnBWYWx1ZVhbaS8yXSk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIHNldF9lRnVzZUdldEZyZWVCbG9ja0NvdW50X1Byb2MoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVTSE9SVCBpOworCVVTSE9SVAlMb2dpY2FsQWRkcmVzczsKKwlVU0hPUlQgZWZ1c2VmcmVlbnVtPTA7CisJaWYoIXBBZC0+YlVzZUVmdXNlKQorCQlyZXR1cm4gRkFMU0U7CisJZm9yIChpID0gRUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpIDw9IEVGVVNFX1VTQUdFX01BUF9FTkQ7IGkrPTIpCisJeworCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCWlmKCAoTG9naWNhbEFkZHJlc3MgJiAweGZmKSA9PSAwKQorCQl7CisJCQllZnVzZWZyZWVudW09IChVQ0hBUikgKEVGVVNFX1VTQUdFX01BUF9FTkQtaSsxKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYoKCAoTG9naWNhbEFkZHJlc3MgPj4gOCkgJiAweGZmKSA9PSAwKQorCQl7CisJCQllZnVzZWZyZWVudW0gPSAoVUNIQVIpIChFRlVTRV9VU0FHRV9NQVBfRU5ELWkpOworCQkJYnJlYWs7CisJCX0KKworCQlpZihpID09IEVGVVNFX1VTQUdFX01BUF9FTkQpCisJCQllZnVzZWZyZWVudW0gPSAwOworCX0KKwlwcmludGsoImVmdXNlRnJlZU51bWJlciBpcyAlZFxuIixlZnVzZWZyZWVudW0pOworCXJldHVybiBUUlVFOworfQorSU5UIHNldF9lRnVzZWR1bXBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CitVU0hPUlQgSW5CdWZbM107CisJSU5UIGk9MDsKKwlpZighcEFkLT5iVXNlRWZ1c2UpCisJCXJldHVybiBGQUxTRTsKKwlmb3IoaSA9MDsgaTxFRlVTRV9VU0FHRV9NQVBfRU5ELzI7IGkrKykKKwl7CisJCUluQnVmWzBdID0gMippOworCQlJbkJ1ZlsxXSA9IDI7CisJCUluQnVmWzJdID0gMHgwOworCisJCWVGdXNlUmVhZFBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA0LCAmSW5CdWZbMl0sIDIpOworCQlpZihpJTQ9PTApCisJCXByaW50aygiXG5CbG9jayAleDoiLGkvOCk7CisJCXByaW50aygiJTA0eCAiLEluQnVmWzJdKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CitJTlQJc2V0X2VGdXNlTG9hZEZyb21CaW5fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUgkJCQkJKnNyYzsKKwlzdHJ1Y3QgZmlsZQkJCQkqc3JjZjsKKwlJTlQgCQkJCQlyZXR2YWwsIG9yZ2ZzdWlkLCBvcmdmc2dpZDsKKyAgIAltbV9zZWdtZW50X3QJCQlvcmdmczsKKwlVQ0hBUgkJCQkJKmJ1ZmZlcjsKKwlVQ0hBUgkJCQkJQmluRmlsZVNpemU9MDsKKwlJTlQJCQkJCQlpID0gMCxqPTAsaz0xOworCVVTSE9SVAkJCQkJKlBEQVRBOworCVVTSE9SVAkJCQkJREFUQTsKKwlCaW5GaWxlU2l6ZT1zdHJsZW4oIlJUMzB4eEVFUFJPTS5iaW4iKTsKKwlzcmMgPSBrbWFsbG9jKDEyOCwgTUVNX0FMTE9DX0ZMQUcpOworCU5kaXNaZXJvTWVtb3J5KHNyYywgMTI4KTsKKworIAlpZihzdHJsZW4oYXJnKT4wKQorCXsKKworCQlOZGlzTW92ZU1lbW9yeShzcmMsIGFyZywgc3RybGVuKGFyZykpOworIAl9CisKKwllbHNlCisJeworCisJCU5kaXNNb3ZlTWVtb3J5KHNyYywgIlJUMzB4eEVFUFJPTS5iaW4iLCBCaW5GaWxlU2l6ZSk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRmlsZU5hbWU9JXNcbiIsc3JjKSk7CisJYnVmZmVyID0ga21hbGxvYyhNQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKworCWlmKGJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJa2ZyZWUoc3JjKTsKKwkJIHJldHVybiBGQUxTRTsKK30KKwlQREFUQT1rbWFsbG9jKHNpemVvZihVU0hPUlQpKjgsTUVNX0FMTE9DX0ZMQUcpOworCisJaWYoUERBVEE9PU5VTEwpCisJeworCQlrZnJlZShzcmMpOworCisJCWtmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBGQUxTRTsKKwl9CisJLyogRG9uJ3QgY2hhbmdlIHRvIHVpZCAwLCBsZXQgdGhlIGZpbGUgYmUgb3BlbmVkIGFzIHRoZSAibm9ybWFsIiB1c2VyICovCisjaWYgMAorCW9yZ2ZzdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJb3JnZnNnaWQgPSBjdXJyZW50LT5mc2dpZDsKKwljdXJyZW50LT5mc3VpZD1jdXJyZW50LT5mc2dpZCA9IDA7CisjZW5kaWYKKyAgICAJb3JnZnMgPSBnZXRfZnMoKTsKKyAgIAkgc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlpZiAoc3JjICYmICpzcmMpCisJeworCQlzcmNmID0gZmlscF9vcGVuKHNyYywgT19SRE9OTFksIDApOworCQlpZiAoSVNfRVJSKHNyY2YpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIC1QVFJfRVJSKHNyY2YpLHNyYykpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gVGhlIG9iamVjdCBtdXN0IGhhdmUgYSByZWFkIG1ldGhvZAorCQkJaWYgKHNyY2YtPmZfb3AgJiYgc3JjZi0+Zl9vcC0+cmVhZCkKKwkJCXsKKwkJCQltZW1zZXQoYnVmZmVyLCAweDAwLCBNQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUpOworCQkJCXdoaWxlKHNyY2YtPmZfb3AtPnJlYWQoc3JjZiwgJmJ1ZmZlcltpXSwgMSwgJnNyY2YtPmZfcG9zKT09MSkKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiUwMlggIixidWZmZXJbaV0pKTsKKwkJCQkJaWYoKGkrMSklOD09MCkKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlxuIikpOworICAgICAgICAgICAgICAJCQlpKys7CisJCQkJCQlpZihpPj1NQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUpCisJCQkJCQkJeworCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWxkIHJlYWRpbmcgJXMsIFRoZSBmaWxlIGlzIHRvbyBsYXJnZVsxMDI0XVxuIiwgLVBUUl9FUlIoc3JjZiksc3JjKSk7CisJCQkJCQkJCWtmcmVlKFBEQVRBKTsKKwkJCQkJCQkJa2ZyZWUoYnVmZmVyKTsKKwkJCQkJCQkJa2ZyZWUoc3JjKTsKKwkJCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQkJCX0KKwkJCSAgICAgICB9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IhISBTeXN0ZW0gZG9lc3Qgbm90IHN1cHBvcnQgcmVhZCBmdW5jdGlvblxuIikpOworCQkJCQkJa2ZyZWUoUERBVEEpOworCQkJCQkJa2ZyZWUoYnVmZmVyKTsKKwkJCQkJCWtmcmVlKHNyYyk7CisJCQkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisgICAgICAJCX0KKworCisJfQorCWVsc2UKKwkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3Igc3JjICBvciBzcmNmIGlzIG51bGxcbiIpKTsKKwkJCQkJa2ZyZWUoUERBVEEpOworCQkJCQlrZnJlZShidWZmZXIpOworCQkJCQlyZXR1cm4gRkFMU0U7CisKKwkJfQorCisKKwlyZXR2YWw9ZmlscF9jbG9zZShzcmNmLE5VTEwpOworCisJaWYgKHJldHZhbCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBFcnJvciAlZCBjbG9zaW5nICVzXG4iLCAtcmV0dmFsLCBzcmMpKTsKKwl9CisJc2V0X2ZzKG9yZ2ZzKTsKKyNpZiAwCisJY3VycmVudC0+ZnN1aWQgPSBvcmdmc3VpZDsKKwljdXJyZW50LT5mc2dpZCA9IG9yZ2ZzZ2lkOworI2VuZGlmCisJZm9yKGo9MDtqPGk7aisrKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJTAyWCAiLGJ1ZmZlcltqXSkpOworCQlpZigoaisxKSUyPT0wKQorCQkJUERBVEFbai8yJThdPSgoYnVmZmVyW2pdPDw4KSYweGZmMDApfChidWZmZXJbai0xXSYweGZmKTsKKwkJaWYoaiUxNj09MCkKKwkJeworCQkJaz1idWZmZXJbal07CisJCX0KKwkJZWxzZQorCQl7CisJCQlrJj1idWZmZXJbal07CisJCQlpZigoaisxKSUxNj09MCkKKwkJCXsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiByZXN1bHQ9JTAyWCxibGs9JTAyeFxuIixrLGovMTYpKTsKKworCQkJCWlmKGshPTB4ZmYpCisJCQkJCWVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluKHBBZCwoVVNIT1JUKWotMTUsIDE2LCBQREFUQSk7CisJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlpZihlRnVzZVJlYWRSZWdpc3RlcnMocEFkLGosIDIsKFBVU0hPUlQpJkRBVEEpIT0weDNmKQorCQkJCQkJCWVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluKHBBZCwoVVNIT1JUKWotMTUsIDE2LCBQREFUQSk7CisJCQkJCX0KKwkJCQkvKgorCQkJCWZvcihsPTA7bDw4O2wrKykKKwkJCQkJcHJpbnRrKCIlMDR4ICIsUERBVEFbbF0pOworCQkJCXByaW50aygiXG4iKTsKKwkJCQkqLworCQkJCU5kaXNaZXJvTWVtb3J5KFBEQVRBLDE2KTsKKworCisJCQl9CisJCX0KKworCisJfQorCisKKwlrZnJlZShQREFUQSk7CisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZShzcmMpOworCXJldHVybiBUUlVFOworfQorTlRTVEFUVVMgZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW4oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCUlOCVVTSE9SVCogcERhdGEpCit7CisJVVNIT1JUCWk7CisJVVNIT1JUCWVGdXNlRGF0YTsKKwlVU0hPUlQJTG9naWNhbEFkZHJlc3MsIEJsa051bSA9IDB4ZmZmZjsKKwlVQ0hBUglFRlNST01fQU9VVCxMb29wPTA7CisJRUZVU0VfQ1RSTF9TVFJVQwkJZUZ1c2VDdHJsU3RydWM7CisJVVNIT1JUCWVmdXNlRGF0YU9mZnNldDsKKwlVSU5UMzIJZGF0YSx0ZW1wYnVmZmVyOworCVVTSE9SVCBhZGRyLHRtcGFkZHIsIEluQnVmWzNdLCB0bXBPZmZzZXQ7CisJVUlOVDMyIGJ1ZmZlcls0XTsKKwlCT09MRUFOCQliV3JpdGVTdWNjZXNzID0gVFJVRTsKKwlCT09MRUFOCQliTm90V3JpdGU9VFJVRTsKKwlCT09MRUFOCQliQWxsb2NhdGVOZXdCbGs9VFJVRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluIE9mZnNldD0leCwgcERhdGE9JTA0eDolMDR4OiUwNHg6JTA0eFxuIiwgT2Zmc2V0LCAqcERhdGEsKihwRGF0YSsxKSwqKHBEYXRhKzIpLCoocERhdGErMykpKTsKKworCWRvCisJeworCS8vU3RlcCAwLiBmaW5kIHRoZSBlbnRyeSBpbiB0aGUgbWFwcGluZyB0YWJsZQorCS8vVGhlIGFkZHJlc3Mgb2YgRUVQUk9NIGlzIDItYnl0ZXMgYWxpZ25tZW50LgorCS8vVGhlIGxhc3QgYml0IGlzIHVzZWQgZm9yIGFsaWdubWVudCwgc28gaXQgbXVzdCBiZSAwLgorCUxvb3ArKzsKKwl0bXBPZmZzZXQgPSBPZmZzZXQgJiAweGZmZmU7CisJRUZTUk9NX0FPVVQgPSBlRnVzZVJlYWRSZWdpc3RlcnMocEFkLCB0bXBPZmZzZXQsIDIsICZlRnVzZURhdGEpOworCisJaWYoIEVGU1JPTV9BT1VUID09IDB4M2YpCisJewkvL2ZpbmQgYXZhaWxhYmxlIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCS8vdGhlIGxvZ2ljYWwgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCwgZmluZCBhbiBlbXB0eSBvbmUKKwkJLy9mcm9tIHRoZSBmaXJzdCBhZGRyZXNzIG9mIGJsb2NrIDQ1PTE2KjQ1PTB4MmQwIHRvIHRoZSBsYXN0IGFkZHJlc3Mgb2YgYmxvY2sgNDcKKwkJLy89PT40OCoxNi0zKHJlc2VydmVkKT0yRkMKKwkJYkFsbG9jYXRlTmV3QmxrPVRSVUU7CisJCWZvciAoaT1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7IGk8PUVGVVNFX1VTQUdFX01BUF9FTkQ7IGkrPTIpCisJCXsKKwkJCS8vUmV0cml2ZSB0aGUgbG9naWNhbCBibG9jayBudWJtZXIgZm9ybSBlYWNoIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCQkvL0l0IHdpbGwgYWNjZXNzIHR3byBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlciBlYWNoIHRpbWUuCisJCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCQlpZiggKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkKKwkJCXsvL05vdCB1c2VkIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCQkJQmxrTnVtID0gaS1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmKCggKExvZ2ljYWxBZGRyZXNzID4+IDgpICYgMHhmZikgPT0gMCkKKwkJCXsvL05vdCB1c2VkIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCQkJaWYgKGkgIT0gRUZVU0VfVVNBR0VfTUFQX0VORCkKKwkJCQl7CisJCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUKzE7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCWJBbGxvY2F0ZU5ld0Jsaz1GQUxTRTsKKwkJQmxrTnVtID0gRUZTUk9NX0FPVVQ7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVycyBCbGtOdW0gPSAlZCBcbiIsIEJsa051bSkpOworCisJaWYoQmxrTnVtID09IDB4ZmZmZikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnM6IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8vU3RlcCAxLjEuMAorCS8vSWYgdGhlIGJsb2NrIGlzIG5vdCBleGlzdGluZyBpbiBtYXBwaW5nIHRhYmxlLCBjcmVhdGUgb25lCisJLy9hbmQgd3JpdGUgZG93biB0aGUgMTYtYnl0ZXMgZGF0YSB0byB0aGUgbmV3IGJsb2NrCisJaWYoYkFsbG9jYXRlTmV3QmxrKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWxsb2NhdGUgTmV3IEJsa1xuIikpOworCQllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTM7CisJCWZvcihpPTA7IGk8IDQ7IGkrKykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWxsb2NhdGUgTmV3IEJsaywgRGF0YSVkPSUwNHglMDR4XG4iLDMtaSxwRGF0YVsyKmkrMV0scERhdGFbMippXSkpOworCQkJdGVtcGJ1ZmZlcj0oKHBEYXRhWzIqaSsxXTw8MTYpJjB4ZmZmZjAwMDApfHBEYXRhWzIqaV07CisKKworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LHRlbXBidWZmZXIpOworCQkJZWZ1c2VEYXRhT2Zmc2V0IC09IDQ7CisKKwkJfQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisJCS8vU3RlcDEuMS4xLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gQmxrTnVtKiAweDEwIDsKKworCQkvL1N0ZXAxLjEuMi4gV3JpdGUgRUZTUk9NX01PREUgKDB4NTgwLCBiaXQ3OmJpdDYpIHRvIDMuCisJCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMzsKKworCQkvL1N0ZXAxLjEuMy4gV3JpdGUgRUZTUk9NX0tJQ0sgKDB4NTgwLCBiaXQzMCkgdG8gMSB0byBraWNrLW9mZiBwaHlzaWNhbCB3cml0ZSBwcm9jZWR1cmUuCisJCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCQlOZGlzTW92ZU1lbW9yeSgmZGF0YSwgJmVGdXNlQ3RybFN0cnVjLCA0KTsKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKKworCQkvL1N0ZXAxLjEuNC4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLiBJdKGmcyBkb25lLgorCQlpID0gMDsKKwkJd2hpbGUoaSA8IDEwMCkKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCQkJaWYoZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0tJQ0sgPT0gMCkKKwkJCQlicmVhazsKKworCQkJUlRNUHVzZWNEZWxheSgyKTsKKwkJCWkrKzsKKwkJfQorCisJfQorCWVsc2UKKwl7CS8vU3RlcDEuMi4KKwkJLy9JZiB0aGUgc2FtZSBsb2dpY2FsIG51bWJlciBpcyBleGlzdGluZywgY2hlY2sgaWYgdGhlIHdyaXR0aW5nIGRhdGEgYW5kIHRoZSBkYXRhCisJCS8vc2F2aW5nIGluIHRoaXMgYmxvY2sgYXJlIHRoZSBzYW1lLgorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvL3JlYWQgY3VycmVudCB2YWx1ZXMgb2YgMTYtYnl0ZSBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCS8vU3RlcDEuMi4wLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gT2Zmc2V0ICYgMHhmZmYwOworCisJCS8vU3RlcDEuMi4xLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMS4KKwkJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX01PREUgPSAwOworCisJCS8vU3RlcDEuMi4yLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7CisKKwkJTmRpc01vdmVNZW1vcnkoJmRhdGEsICZlRnVzZUN0cmxTdHJ1YywgNCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJCS8vU3RlcDEuMi4zLiBQb2xsaW5nIEVGU1JPTV9LSUNLKDB4NTgwLCBiaXQzMCkgdW50aWwgaXQgYmVjb21lIDAgYWdhaW4uCisJCWkgPSAwOworCQl3aGlsZShpIDwgMTAwKQorCQl7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCQlpZihlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKQorCQkJCWJyZWFrOworCQkJUlRNUHVzZWNEZWxheSgyKTsKKwkJCWkrKzsKKwkJfQorCisJCS8vU3RlcDEuMi40LiBSZWFkIDE2LWJ5dGUgb2YgZGF0YSBmcm9tIEVGVVNFX0RBVEEwLTMgKDB4NTlDLTB4NTkwKQorCQllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTM7CisJCWZvcihpPTA7IGk8IDQ7IGkrKykKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBlZnVzZURhdGFPZmZzZXQsIChQVUlOVDMyKSAmYnVmZmVyW2ldKTsKKwkJCWVmdXNlRGF0YU9mZnNldCAtPSAgNDsKKwkJfQorCQkvL1N0ZXAxLjIuNS4gQ2hlY2sgaWYgdGhlIGRhdGEgb2YgZWZ1c2UgYW5kIHRoZSB3cml0aW5nIGRhdGEgYXJlIHRoZSBzYW1lLgorCQlmb3IoaSA9MDsgaTw0OyBpKyspCisJCXsKKwkJCXRlbXBidWZmZXI9KChwRGF0YVsyKmkrMV08PDE2KSYweGZmZmYwMDAwKXxwRGF0YVsyKmldOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYnVmZmVyWyVkXT0leCxwRGF0YVslZF09JXgscERhdGFbJWRdPSV4LHRlbXBidWZmZXI9JXhcbiIsaSxidWZmZXJbaV0sMippLHBEYXRhWzIqaV0sMippKzEscERhdGFbMippKzFdLHRlbXBidWZmZXIpKTsKKworCQkJaWYoKChidWZmZXJbaV0mMHhmZmZmMDAwMCk9PShwRGF0YVsyKmkrMV08PDE2KSkmJigoYnVmZmVyW2ldJjB4ZmZmZik9PXBEYXRhWzIqaV0pKQorCQkJCWJOb3RXcml0ZSY9VFJVRTsKKwkJCWVsc2UKKwkJCXsKKwkJCQliTm90V3JpdGUmPUZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmKCFiTm90V3JpdGUpCisJCXsKKwkJcHJpbnRrKCJUaGUgZGF0YSBpcyBub3QgdGhlIHNhbWVcbiIpOworCisJCQlmb3IoaSA9MDsgaTw4OyBpKyspCisJCQl7CisJCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJCQlJbkJ1ZlsxXSA9IDI7CisJCQkJSW5CdWZbMl0gPSBwRGF0YVtpXTsKKworCQkJCWVGdXNlV3JpdGVQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNiwgTlVMTCwgMik7CisJCQl9CisKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gVFJVRTsKKwkgICAgIH0KKworCisKKwkJLy9TdGVwIDIuIFdyaXRlIG1hcHBpbmcgdGFibGUKKwkJYWRkciA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVCtCbGtOdW07CisKKwkJdG1wYWRkciA9IGFkZHI7CisKKwkJaWYoYWRkciAlIDIgIT0gMCkKKwkJCWFkZHIgPSBhZGRyIC0xOworCQlJbkJ1ZlswXSA9IGFkZHI7CisJCUluQnVmWzFdID0gMjsKKworCQkvL2NvbnZlcnQgdGhlIGFkZHJlc3MgZnJvbSAxMCB0byA4IGJpdCAoIGJpdDcsIDYgPSBwYXJpdHkgYW5kIGJpdDUgfiAwID0gYml0OX40KSwgYW5kIHdyaXRlIHRvIGxvZ2ljYWwgbWFwIGVudHJ5CisJCXRtcE9mZnNldCA9IE9mZnNldDsKKwkJdG1wT2Zmc2V0ID4+PSA0OworCQl0bXBPZmZzZXQgfD0gKCh+KCh0bXBPZmZzZXQgJiAweDAxKSBeICggdG1wT2Zmc2V0ID4+IDEgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDIgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSkpIDw8IDYpICYgMHg0MDsKKwkJdG1wT2Zmc2V0IHw9ICgofiggKHRtcE9mZnNldCA+PiAyICYgMHgwMSkgXiAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSBeICh0bXBPZmZzZXQgPj4gNCAmIDB4MDEpIF4gKCB0bXBPZmZzZXQgPj4gNSAmIDB4MDEpKSkgPDwgNykgJiAweDgwOworCisJCS8vIHdyaXRlIHRoZSBsb2dpY2FsIGFkZHJlc3MKKwkJaWYodG1wYWRkciUyICE9IDApCisJCQlJbkJ1ZlsyXSA9IHRtcE9mZnNldDw8ODsKKwkJZWxzZQorCQkJSW5CdWZbMl0gPSB0bXBPZmZzZXQ7CisKKwkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCisJCS8vU3RlcCAzLiBDb21wYXJlIGRhdGEgaWYgbm90IHRoZSBzYW1lLCBpbnZhbGlkYXRlIHRoZSBtYXBwaW5nIGVudHJ5LCB0aGVuIHJlLXdyaXRlIHRoZSBkYXRhIHVudGlsIEUtZnVzZSBpcyBleGhhdXN0ZWQKKwkJYldyaXRlU3VjY2VzcyA9IFRSVUU7CisJCWZvcihpID0wOyBpPDg7IGkrKykKKwkJeworCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQlJbkJ1ZlswXSA9IGFkZHIrMippOworCQkJSW5CdWZbMV0gPSAyOworCQkJSW5CdWZbMl0gPSAweDA7CisKKwkJCWVGdXNlUmVhZFBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA0LCAmSW5CdWZbMl0sIDIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYWRkcj0leCwgYnVmZmVyW2ldPSV4LEluQnVmWzJdPSV4XG4iLEluQnVmWzBdLHBEYXRhW2ldLEluQnVmWzJdKSk7CisJCQlpZihwRGF0YVtpXSAhPSBJbkJ1ZlsyXSkKKwkJCXsKKwkJCQliV3JpdGVTdWNjZXNzID0gRkFMU0U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvL1N0ZXAgNC4gaW52bGlkYXRlIG1hcHBpbmcgZW50cnkgYW5kIGZpbmQgYSBmcmVlIG1hcHBpbmcgZW50cnkgaWYgbm90IHN1Y2NlZWQKKworCQlpZiAoIWJXcml0ZVN1Y2Nlc3MmJkxvb3A8MikKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW46Ok5vdCBiV3JpdGVTdWNjZXNzIEJsa051bSA9ICVkXG4iLCBCbGtOdW0pKTsKKworCQkJLy8gdGhlIG9mZnNldCBvZiBjdXJyZW50IG1hcHBpbmcgZW50cnkKKwkJCWFkZHIgPSBFRlVTRV9VU0FHRV9NQVBfU1RBUlQrQmxrTnVtOworCisJCQkvL2ZpbmQgYSBuZXcgbWFwcGluZyBlbnRyeQorCQkJQmxrTnVtID0gMHhmZmZmOworCQkJZm9yIChpPUVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaTw9RUZVU0VfVVNBR0VfTUFQX0VORDsgaSs9MikKKwkJCXsKKwkJCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCQkJaWYoIChMb2dpY2FsQWRkcmVzcyAmIDB4ZmYpID09IDApCisJCQkJeworCQkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYoKCAoTG9naWNhbEFkZHJlc3MgPj4gOCkgJiAweGZmKSA9PSAwKQorCQkJCXsKKwkJCQkJaWYgKGkgIT0gRUZVU0VfVVNBR0VfTUFQX0VORCkKKwkJCQkJeworCQkJCQkJQmxrTnVtID0gaSsxLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbjo6Tm90IGJXcml0ZVN1Y2Nlc3MgbmV3IEJsa051bSA9ICVkXG4iLCBCbGtOdW0pKTsKKwkJCWlmKEJsa051bSA9PSAweGZmZmYpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW46IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKworCQkJLy9pbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudHJ5IGlmIG5ldyBlbnRyeSBpcyBub3QgZm91bmQKKwkJCXRtcGFkZHIgPSBhZGRyOworCisJCQlpZihhZGRyICUgMiAhPSAwKQorCQkJCWFkZHIgPSBhZGRyIC0xOworCQkJSW5CdWZbMF0gPSBhZGRyOworCQkJSW5CdWZbMV0gPSAyOworCisJCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQkJLy8gd3JpdGUgdGhlIGxvZ2ljYWwgYWRkcmVzcworCQkJaWYodG1wYWRkciUyICE9IDApCisJCQl7CisJCQkJLy8gSW52YWxpZGF0ZSB0aGUgaGlnaCBieXRlCisJCQkJZm9yIChpPTg7IGk8MTU7IGkrKykKKwkJCQl7CisJCQkJCWlmKCAoIChJbkJ1ZlsyXSA+PiBpKSAmIDB4MDEpID09IDApCisJCQkJCXsKKwkJCQkJCUluQnVmWzJdIHw9ICgweDEgPDxpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGludmFsaWRhdGUgdGhlIGxvdyBieXRlCisJCQkJZm9yIChpPTA7IGk8ODsgaSsrKQorCQkJCXsKKwkJCQkJaWYoICggKEluQnVmWzJdID4+IGkpICYgMHgwMSkgPT0gMCkKKwkJCQkJeworCQkJCQkJSW5CdWZbMl0gfD0gKDB4MSA8PGkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCQl9CisKKwl9CisJd2hpbGUoIWJXcml0ZVN1Y2Nlc3MmJkxvb3A8Mik7CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8vIFJUMzB4eCAvLworLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21kNS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0Nzc2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21kNS5jCkBAIC0wLDAgKzEsMTQyNyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBtZDUuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworCWphbgkJCTEwLTI4LTAzCQlJbml0aWFsCisJUml0YSAgICAJMTEtMjMtMDQJCU1vZGlmeSBNRDUgYW5kIFNIQS0xCisJUml0YQkJMTAtMTQtMDUJCU1vZGlmeSBTSEEtMSBpbiBiaWctZW5kaWFuIHBsYXRmb3JtCisgKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworLyoqCisgKiBtZDVfbWFjOgorICogQGtleTogcG9pbnRlciB0bwl0aGUJa2V5CXVzZWQgZm9yIE1BQyBnZW5lcmF0aW9uCisgKiBAa2V5X2xlbjogbGVuZ3RoCW9mIHRoZSBrZXkgaW4gYnl0ZXMKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgZm9yIHdoaWNoIHRoZSBNQUMgaXMJZ2VuZXJhdGVkCisgKiBAZGF0YV9sZW46IGxlbmd0aCBvZgl0aGUJZGF0YSBpbglieXRlcworICogQG1hYzogcG9pbnRlciB0bwl0aGUJYnVmZmVyIGhvbGRpbmcgc3BhY2UgZm9yIHRoZSBNQUM7IHRoZSBidWZmZXIgc2hvdWxkCisgKiBoYXZlCXNwYWNlIGZvciAxMjgtYml0ICgxNiBieXRlcykgTUQ1IGhhc2ggdmFsdWUKKyAqCisgKiBtZDVfbWFjKCkgZGV0ZXJtaW5lcwl0aGUJbWVzc2FnZQlhdXRoZW50aWNhdGlvbiBjb2RlCWJ5IHVzaW5nIHNlY3VyZQloYXNoCisgKiBNRDUoa2V5IHwgZGF0YSB8CWtleSkuCisgKi8KK3ZvaWQgbWQ1X21hYyh1OCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1hYykKK3sKKwlNRDVfQ1RYCWNvbnRleHQ7CisKKwlNRDVJbml0KCZjb250ZXh0KTsKKwlNRDVVcGRhdGUoJmNvbnRleHQsCWtleSwga2V5X2xlbik7CisJTUQ1VXBkYXRlKCZjb250ZXh0LAlkYXRhLCBkYXRhX2xlbik7CisJTUQ1VXBkYXRlKCZjb250ZXh0LAlrZXksIGtleV9sZW4pOworCU1ENUZpbmFsKG1hYywgJmNvbnRleHQpOworfQorCisvKioKKyAqIGhtYWNfbWQ1OgorICogQGtleTogcG9pbnRlciB0bwl0aGUJa2V5CXVzZWQgZm9yIE1BQyBnZW5lcmF0aW9uCisgKiBAa2V5X2xlbjogbGVuZ3RoCW9mIHRoZSBrZXkgaW4gYnl0ZXMKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgZm9yIHdoaWNoIHRoZSBNQUMgaXMJZ2VuZXJhdGVkCisgKiBAZGF0YV9sZW46IGxlbmd0aCBvZgl0aGUJZGF0YSBpbglieXRlcworICogQG1hYzogcG9pbnRlciB0bwl0aGUJYnVmZmVyIGhvbGRpbmcgc3BhY2UgZm9yIHRoZSBNQUM7IHRoZSBidWZmZXIgc2hvdWxkCisgKiBoYXZlCXNwYWNlIGZvciAxMjgtYml0ICgxNiBieXRlcykgTUQ1IGhhc2ggdmFsdWUKKyAqCisgKiBobWFjX21kNSgpIGRldGVybWluZXMgdGhlIG1lc3NhZ2UgYXV0aGVudGljYXRpb24JY29kZSB1c2luZyBITUFDLU1ENS4KKyAqIFRoaXMJaW1wbGVtZW50YXRpb24gaXMgYmFzZWQJb24gdGhlIHNhbXBsZSBjb2RlIHByZXNlbnRlZCBpbglSRkMJMjEwNC4KKyAqLwordm9pZCBobWFjX21kNSh1OCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1hYykKK3sKKwlNRDVfQ1RYCWNvbnRleHQ7CisgICAgdTgga19pcGFkWzY1XTsgLyogaW5uZXIgcGFkZGluZyAtIGtleSBYT1JkIHdpdGggaXBhZCAqLworICAgIHU4IGtfb3BhZFs2NV07IC8qIG91dGVyIHBhZGRpbmcgLSBrZXkgWE9SZCB3aXRoIG9wYWQgKi8KKyAgICB1OCB0a1sxNl07CisJaW50CWk7CisKKwkvL2Fzc2VydChrZXkgIT0gTlVMTCAmJiBkYXRhICE9IE5VTEwgJiYgbWFjICE9IE5VTEwpOworCisJLyogaWYga2V5IGlzIGxvbmdlcgl0aGFuIDY0CWJ5dGVzIHJlc2V0CWl0IHRvIGtleSA9CU1ENShrZXkpICovCisJaWYgKGtleV9sZW4JPiA2NCkgeworCQlNRDVfQ1RYCXR0Y29udGV4dDsKKworCQlNRDVJbml0KCZ0dGNvbnRleHQpOworCQlNRDVVcGRhdGUoJnR0Y29udGV4dCwga2V5LCBrZXlfbGVuKTsKKwkJTUQ1RmluYWwodGssICZ0dGNvbnRleHQpOworCQkvL2tleT0oUFVDSEFSKXR0Y29udGV4dC5idWY7CisJCWtleQk9IHRrOworCQlrZXlfbGVuCT0gMTY7CisJfQorCisJLyogdGhlIEhNQUNfTUQ1CXRyYW5zZm9ybSBsb29rcwlsaWtlOgorCSAqCisJICogTUQ1KEsgWE9SIG9wYWQsIE1ENShLIFhPUiBpcGFkLCB0ZXh0KSkKKwkgKgorCSAqIHdoZXJlIEsgaXMgYW4gbiBieXRlCWtleQorCSAqIGlwYWQJaXMgdGhlIGJ5dGUJMHgzNiByZXBlYXRlZCA2NCB0aW1lcworCSAqIG9wYWQJaXMgdGhlIGJ5dGUJMHg1YyByZXBlYXRlZCA2NCB0aW1lcworCSAqIGFuZCB0ZXh0CWlzIHRoZSBkYXRhCWJlaW5nIHByb3RlY3RlZAkqLworCisJLyogc3RhcnQgb3V0IGJ5CXN0b3JpbmcJa2V5CWluIHBhZHMJKi8KKwlOZGlzWmVyb01lbW9yeShrX2lwYWQsIHNpemVvZihrX2lwYWQpKTsKKwlOZGlzWmVyb01lbW9yeShrX29wYWQsCXNpemVvZihrX29wYWQpKTsKKwkvL2Fzc2VydChrZXlfbGVuIDwgc2l6ZW9mKGtfaXBhZCkpOworCU5kaXNNb3ZlTWVtb3J5KGtfaXBhZCwga2V5LAlrZXlfbGVuKTsKKwlOZGlzTW92ZU1lbW9yeShrX29wYWQsIGtleSwJa2V5X2xlbik7CisKKwkvKiBYT1Iga2V5IHdpdGgJaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KKwlmb3IJKGkgPSAwOwlpIDwJNjQ7CWkrKykgeworCQlrX2lwYWRbaV0gXj0gMHgzNjsKKwkJa19vcGFkW2ldIF49IDB4NWM7CisJfQorCisJLyogcGVyZm9ybSBpbm5lciBNRDUgKi8KKwlNRDVJbml0KCZjb250ZXh0KTsJCQkJCSAvKglpbml0IGNvbnRleHQgZm9yIDFzdCBwYXNzICovCisJTUQ1VXBkYXRlKCZjb250ZXh0LAlrX2lwYWQsCTY0KTsJIC8qCXN0YXJ0IHdpdGggaW5uZXIgcGFkICovCisJTUQ1VXBkYXRlKCZjb250ZXh0LAlkYXRhLCBkYXRhX2xlbik7IC8qCXRoZW4gdGV4dCBvZiBkYXRhZ3JhbSAqLworCU1ENUZpbmFsKG1hYywgJmNvbnRleHQpOwkJCSAvKglmaW5pc2ggdXAgMXN0IHBhc3MgKi8KKworCS8qIHBlcmZvcm0gb3V0ZXIgTUQ1ICovCisJTUQ1SW5pdCgmY29udGV4dCk7CQkJCQkgLyoJaW5pdCBjb250ZXh0IGZvciAybmQgcGFzcyAqLworCU1ENVVwZGF0ZSgmY29udGV4dCwJa19vcGFkLAk2NCk7CSAvKglzdGFydCB3aXRoIG91dGVyIHBhZCAqLworCU1ENVVwZGF0ZSgmY29udGV4dCwJbWFjLCAxNik7CQkgLyoJdGhlbiByZXN1bHRzIG9mCTFzdAloYXNoICovCisJTUQ1RmluYWwobWFjLCAmY29udGV4dCk7CQkJIC8qCWZpbmlzaCB1cCAybmQgcGFzcyAqLworfQorCisjaWZuZGVmIFJUX0JJR19FTkRJQU4KKyNkZWZpbmUgYnl0ZVJldmVyc2UoYnVmLCBsZW4pICAgLyogTm90aGluZyAqLworI2Vsc2UKK3ZvaWQgYnl0ZVJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25ncyk7Cit2b2lkIGJ5dGVSZXZlcnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpCit7CisgICAgZG8geworICAgICAgICAqKFVJTlQzMiAqKWJ1ZiA9IFNXQVAzMigqKFVJTlQzMiAqKWJ1Zik7CisgICAgICAgIGJ1ZiArPSA0OworICAgIH0gd2hpbGUgKC0tbG9uZ3MpOworfQorI2VuZGlmCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT0gIE1ENSBpbXBsZW1lbnRhdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vIGZvdXIgYmFzZSBmdW5jdGlvbnMgZm9yIE1ENQorI2RlZmluZSBNRDVfRjEoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKQorI2RlZmluZSBNRDVfRjIoeCwgeSwgeikgKCgoeCkgJiAoeikpIHwgKCh5KSAmICh+eikpKQorI2RlZmluZSBNRDVfRjMoeCwgeSwgeikgKCh4KSBeICh5KSBeICh6KSkKKyNkZWZpbmUgTUQ1X0Y0KHgsIHksIHopICgoeSkgXiAoKHgpIHwgKH56KSkpCisjZGVmaW5lIENZQ0xJQ19MRUZUX1NISUZUKHcsIHMpICgoKHcpIDw8IChzKSkgfCAoKHcpID4+ICgzMi0ocykpKSkKKworI2RlZmluZQlNRDVTdGVwKGYsIHcsIHgsIHksCXosIGRhdGEsIHQsIHMpCVwKKwkoIHcJKz0gZih4LAl5LCB6KSArCWRhdGEgKyB0LCAgdyA9IChDWUNMSUNfTEVGVF9TSElGVCh3LCBzKSkgJiAweGZmZmZmZmZmLCB3ICs9CXggKQorCisKKy8qCisgKiAgRnVuY3Rpb24gRGVzY3JpcHRpb246CisgKiAgICAgIEluaXRpYXRlIE1ENSBDb250ZXh0IHNhdGlzZmllZCBpbiBSRkMgMTMyMQorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIHBDdHggICAgICAgIFBvaW50ZXIJdG8gTUQ1IGNvbnRleHQKKyAqCisgKiAgUmV0dXJuIFZhbHVlOgorICogICAgICBOb25lCisgKi8KK1ZPSUQgTUQ1SW5pdChNRDVfQ1RYICpwQ3R4KQoreworICAgIHBDdHgtPkJ1ZlswXT0weDY3NDUyMzAxOworICAgIHBDdHgtPkJ1ZlsxXT0weGVmY2RhYjg5OworICAgIHBDdHgtPkJ1ZlsyXT0weDk4YmFkY2ZlOworICAgIHBDdHgtPkJ1ZlszXT0weDEwMzI1NDc2OworCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFswXT0wOworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMV09MDsKK30KKworCisvKgorICogIEZ1bmN0aW9uIERlc2NyaXB0aW9uOgorICogICAgICBVcGRhdGUgTUQ1IENvbnRleHQsIGFsbG93IG9mIGFuIGFycmFyeSBvZiBvY3RldHMgYXMgdGhlIG5leHQgcG9ydGlvbgorICogICAgICBvZiB0aGUgbWVzc2FnZQorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIHBDdHgJCVBvaW50ZXIJdG8gTUQ1IGNvbnRleHQKKyAqIAkgICAgcERhdGEgICAgICAgUG9pbnRlciB0byBpbnB1dCBkYXRhCisgKiAgICAgIExlbkluQnl0ZXMgIFRoZSBsZW5ndGggb2YgaW5wdXQgZGF0YSAodW5pdDogYnl0ZSkKKyAqCisgKiAgUmV0dXJuIFZhbHVlOgorICogICAgICBOb25lCisgKgorICogIE5vdGU6CisgKiAgICAgIENhbGxlZCBhZnRlciBNRDVJbml0IG9yIE1ENVVwZGF0ZShpdHNlbGYpCisgKi8KK1ZPSUQgTUQ1VXBkYXRlKE1ENV9DVFggKnBDdHgsIFVDSEFSICpwRGF0YSwgVUlOVDMyIExlbkluQnl0ZXMpCit7CisKKyAgICBVSU5UMzIgVGZUaW1lczsKKyAgICBVSU5UMzIgdGVtcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworICAgIHRlbXAgPSBwQ3R4LT5MZW5JbkJpdENvdW50WzBdOworCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFswXSA9IChVSU5UMzIpIChwQ3R4LT5MZW5JbkJpdENvdW50WzBdICsgKExlbkluQnl0ZXMgPDwgMykpOworCisgICAgaWYgKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPCB0ZW1wKQorICAgICAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdKys7ICAgLy9jYXJyeSBpbgorCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSArPSBMZW5JbkJ5dGVzID4+IDI5OworCisgICAgLy8gbW9kIDY0IGJ5dGVzCisgICAgdGVtcCA9ICh0ZW1wID4+IDMpICYgMHgzZjsKKworICAgIC8vIHByb2Nlc3MgbGFja3Mgb2YgNjQtYnl0ZSBkYXRhCisgICAgaWYgKHRlbXApCisgICAgeworICAgICAgICBVQ0hBUiAqcEFkcyA9IChVQ0hBUiAqKSBwQ3R4LT5JbnB1dCArIHRlbXA7CisKKyAgICAgICAgaWYgKCh0ZW1wK0xlbkluQnl0ZXMpIDwgNjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCBMZW5JbkJ5dGVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCA2NC10ZW1wKTsKKyAgICAgICAgYnl0ZVJldmVyc2UocEN0eC0+SW5wdXQsIDE2KTsKKyAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKworICAgICAgICBwRGF0YSArPSA2NC10ZW1wOworICAgICAgICBMZW5JbkJ5dGVzIC09IDY0LXRlbXA7CisgICAgfSAvLyBlbmQgb2YgaWYgKHRlbXApCisKKworICAgIFRmVGltZXMgPSAoTGVuSW5CeXRlcyA+PiA2KTsKKworICAgIGZvciAoaT1UZlRpbWVzOyBpPjA7IGktLSkKKyAgICB7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBDdHgtPklucHV0LCAoVUNIQVIgKilwRGF0YSwgNjQpOworICAgICAgICBieXRlUmV2ZXJzZShwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworICAgICAgICBwRGF0YSArPSA2NDsKKyAgICAgICAgTGVuSW5CeXRlcyAtPSA2NDsKKyAgICB9IC8vIGVuZCBvZiBmb3IKKworICAgIC8vIGJ1ZmZlcmluZyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEKKyAgICBpZihMZW5JbkJ5dGVzKQorICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ3R4LT5JbnB1dCwgKFVDSEFSICopcERhdGEsIExlbkluQnl0ZXMpOworCit9CisKKworLyoKKyAqICBGdW5jdGlvbiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQXBwZW5kIHBhZGRpbmcgYml0cyBhbmQgbGVuZ3RoIG9mIG9yaWdpbmFsIG1lc3NhZ2UgaW4gdGhlIHRhaWwKKyAqICAgICAgVGhlIG1lc3NhZ2UgZGlnZXN0IGhhcyB0byBiZSBjb21wbGV0ZWQgaW4gdGhlIGVuZAorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIERpZ2VzdAkJT3V0cHV0IG9mIERpZ2VzdC1NZXNzYWdlIGZvciBNRDUKKyAqICAJcEN0eCAgICAgICAgUG9pbnRlcgl0byBNRDUgY29udGV4dAorICoKKyAqICBSZXR1cm4gVmFsdWU6CisgKiAgICAgIE5vbmUKKyAqCisgKiAgTm90ZToKKyAqICAgICAgQ2FsbGVkIGFmdGVyIE1ENVVwZGF0ZQorICovCitWT0lEIE1ENUZpbmFsKFVDSEFSIERpZ2VzdFsxNl0sIE1ENV9DVFggKnBDdHgpCit7CisgICAgVUNIQVIgUmVtYWluZGVyOworICAgIFVDSEFSIFBhZExlbkluQnl0ZXM7CisgICAgVUNIQVIgKnBBcHBlbmQ9MDsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIFJlbWFpbmRlciA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gMykgJiAweDNmKTsKKworICAgIFBhZExlbkluQnl0ZXMgPSAoUmVtYWluZGVyIDwgNTYpID8gKDU2LVJlbWFpbmRlcikgOiAoMTIwLVJlbWFpbmRlcik7CisKKyAgICBwQXBwZW5kID0gKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXI7CisKKyAgICAvLyBwYWRkaW5nIGJpdHMgd2l0aG91dCBjcm9zc2luZyBibG9jayg2NC1ieXRlIGJhc2VkKSBib3VuZGFyeQorICAgIGlmIChSZW1haW5kZXIgPCA1NikKKyAgICB7CisgICAgICAgICpwQXBwZW5kID0gMHg4MDsKKyAgICAgICAgUGFkTGVuSW5CeXRlcyAtLTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIFJlbWFpbmRlcisxLCBQYWRMZW5JbkJ5dGVzKTsKKworCQkvLyBhZGQgZGF0YS1sZW5ndGggZmllbGQsIGZyb20gbG93IHRvIGhpZ2gKKyAgICAgICAJZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICB7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs1NitpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMV0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisgICAgfSAvLyBlbmQgb2YgaWYKKworICAgIC8vIHBhZGRpbmcgYml0cyB3aXRoIGNyb3NzaW5nIGJsb2NrKDY0LWJ5dGUgYmFzZWQpIGJvdW5kYXJ5CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gdGhlIGZpcnN0IGJsb2NrID09PQorICAgICAgICAqcEFwcGVuZCA9IDB4ODA7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLS07CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXIrMSwgKDY0LVJlbWFpbmRlci0xKSk7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLT0gKDY0IC0gUmVtYWluZGVyIC0gMSk7CisKKyAgICAgICAgYnl0ZVJldmVyc2UocEN0eC0+SW5wdXQsIDE2KTsKKyAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKworCisgICAgICAgIC8vIHRoZSBzZWNvbmQgYmxvY2sgPT09CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0LCBQYWRMZW5JbkJ5dGVzKTsKKworICAgICAgICAvLyBhZGQgZGF0YS1sZW5ndGggZmllbGQKKyAgICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICB7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs1NitpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMV0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisgICAgfSAvLyBlbmQgb2YgZWxzZQorCisKKyAgICBOZGlzTW92ZU1lbW9yeSgoVUNIQVIgKilEaWdlc3QsIChVSU5UMzIgKilwQ3R4LT5CdWYsIDE2KTsgLy8gb3V0cHV0CisgICAgYnl0ZVJldmVyc2UoKFVDSEFSICopRGlnZXN0LCA0KTsKKyAgICBOZGlzWmVyb01lbW9yeShwQ3R4LCBzaXplb2YocEN0eCkpOyAvLyBtZW1vcnkgZnJlZQorfQorCisKKy8qCisgKiAgRnVuY3Rpb24gRGVzY3JpcHRpb246CisgKiAgICAgIFRoZSBjZW50cmFsIGFsZ29yaXRobSBvZiBNRDUsIGNvbnNpc3RzIG9mIGZvdXIgcm91bmRzIGFuZCBzaXh0ZWVuCisgKiAgCXN0ZXBzIHBlciByb3VuZAorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIEJ1ZiAgICAgQnVmZmVycyBvZiBmb3VyIHN0YXRlcyAob3V0cHV0OiAxNiBieXRlcykKKyAqIAkgICAgTWVzICAgICBJbnB1dCBkYXRhIChpbnB1dDogNjQgYnl0ZXMpCisgKgorICogIFJldHVybiBWYWx1ZToKKyAqICAgICAgTm9uZQorICoKKyAqICBOb3RlOgorICogICAgICBDYWxsZWQgYnkgTUQ1VXBkYXRlIG9yIE1ENUZpbmFsCisgKi8KK1ZPSUQgTUQ1VHJhbnNmb3JtKFVJTlQzMiBCdWZbNF0sIFVJTlQzMiBNZXNbMTZdKQoreworICAgIFVJTlQzMiBSZWdbNF0sIFRlbXA7CisJdW5zaWduZWQgaW50IGk7CisKKyAgICBzdGF0aWMgVUNIQVIgTFNoaWZ0VmFsWzE2XSA9CisgICAgeworICAgICAgICA3LCAxMiwgMTcsIDIyLAorCQk1LCA5ICwgMTQsIDIwLAorCQk0LCAxMSwgMTYsIDIzLAorIAkJNiwgMTAsIDE1LCAyMSwKKyAJfTsKKworCisJLy8gW2VxdWFsIHRvIDQyOTQ5NjcyOTYqYWJzKHNpbihpbmRleCkpXQorICAgIHN0YXRpYyBVSU5UMzIgTUQ1VGFibGVbNjRdID0KKwl7CisJCTB4ZDc2YWE0NzgsCTB4ZThjN2I3NTYsCTB4MjQyMDcwZGIsCTB4YzFiZGNlZWUsCisJCTB4ZjU3YzBmYWYsCTB4NDc4N2M2MmEsCTB4YTgzMDQ2MTMsIDB4ZmQ0Njk1MDEsCisJCTB4Njk4MDk4ZDgsCTB4OGI0NGY3YWYsCTB4ZmZmZjViYjEsCTB4ODk1Y2Q3YmUsCisgICAgCTB4NmI5MDExMjIsCTB4ZmQ5ODcxOTMsCTB4YTY3OTQzOGUsCTB4NDliNDA4MjEsCisKKyAgICAJMHhmNjFlMjU2MiwJMHhjMDQwYjM0MCwJMHgyNjVlNWE1MSwJMHhlOWI2YzdhYSwKKyAgICAJMHhkNjJmMTA1ZCwJMHgwMjQ0MTQ1MywJMHhkOGExZTY4MSwJMHhlN2QzZmJjOCwKKyAgICAJMHgyMWUxY2RlNiwJMHhjMzM3MDdkNiwJMHhmNGQ1MGQ4NywJMHg0NTVhMTRlZCwKKyAgICAJMHhhOWUzZTkwNSwJMHhmY2VmYTNmOCwJMHg2NzZmMDJkOSwJMHg4ZDJhNGM4YSwKKworICAgIAkweGZmZmEzOTQyLAkweDg3NzFmNjgxLAkweDZkOWQ2MTIyLAkweGZkZTUzODBjLAorICAgIAkweGE0YmVlYTQ0LAkweDRiZGVjZmE5LAkweGY2YmI0YjYwLAkweGJlYmZiYzcwLAorICAgIAkweDI4OWI3ZWM2LAkweGVhYTEyN2ZhLAkweGQ0ZWYzMDg1LAkweDA0ODgxZDA1LAorICAgIAkweGQ5ZDRkMDM5LAkweGU2ZGI5OWU1LAkweDFmYTI3Y2Y4LAkweGM0YWM1NjY1LAorCisgICAgCTB4ZjQyOTIyNDQsCTB4NDMyYWZmOTcsCTB4YWI5NDIzYTcsCTB4ZmM5M2EwMzksCisgICAJCTB4NjU1YjU5YzMsCTB4OGYwY2NjOTIsCTB4ZmZlZmY0N2QsCTB4ODU4NDVkZDEsCisgICAgCTB4NmZhODdlNGYsCTB4ZmUyY2U2ZTAsCTB4YTMwMTQzMTQsCTB4NGUwODExYTEsCisgICAgCTB4Zjc1MzdlODIsCTB4YmQzYWYyMzUsCTB4MmFkN2QyYmIsCTB4ZWI4NmQzOTEKKwl9OworCisKKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIFJlZ1tpXT1CdWZbaV07CisKKworICAgIC8vIDY0IHN0ZXBzIGluIE1ENSBhbGdvcml0aG0KKyAgICBmb3IgKGk9MDsgaTwxNjsgaSsrKQorICAgIHsKKyAgICAgICAgTUQ1U3RlcChNRDVfRjEsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzW2ldLAorICAgICAgICAgICAgICAgIE1ENVRhYmxlW2ldLCBMU2hpZnRWYWxbaSAmIDB4M10pOworCisgICAgICAgIC8vIG9uZS13b3JkIHJpZ2h0IHNoaWZ0CisgICAgICAgIFRlbXAgICA9IFJlZ1szXTsKKyAgICAgICAgUmVnWzNdID0gUmVnWzJdOworICAgICAgICBSZWdbMl0gPSBSZWdbMV07CisgICAgICAgIFJlZ1sxXSA9IFJlZ1swXTsKKyAgICAgICAgUmVnWzBdID0gVGVtcDsKKyAgICB9CisgICAgZm9yIChpPTE2OyBpPDMyOyBpKyspCisgICAgeworICAgICAgICBNRDVTdGVwKE1ENV9GMiwgUmVnWzBdLCBSZWdbMV0sIFJlZ1syXSwgUmVnWzNdLCBNZXNbKDUqKGkgJiAweGYpKzEpICYgMHhmXSwKKyAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsWygweDEgPDwgMikrKGkgJiAweDMpXSk7CisKKyAgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQKKyAgICAgICAgVGVtcCAgID0gUmVnWzNdOworICAgICAgICBSZWdbM10gPSBSZWdbMl07CisgICAgICAgIFJlZ1syXSA9IFJlZ1sxXTsKKyAgICAgICAgUmVnWzFdID0gUmVnWzBdOworICAgICAgICBSZWdbMF0gPSBUZW1wOworICAgIH0KKyAgICBmb3IgKGk9MzI7IGk8NDg7IGkrKykKKyAgICB7CisgICAgICAgIE1ENVN0ZXAoTUQ1X0YzLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIE1lc1soMyooaSAmIDB4ZikrNSkgJiAweGZdLAorICAgICAgICAgICAgICAgIE1ENVRhYmxlW2ldLCBMU2hpZnRWYWxbKDB4MSA8PCAzKSsoaSAmIDB4MyldKTsKKworICAgICAgICAvLyBvbmUtd29yZCByaWdodCBzaGlmdAorICAgICAgICBUZW1wICAgPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisgICAgfQorICAgIGZvciAoaT00ODsgaTw2NDsgaSsrKQorICAgIHsKKyAgICAgICAgTUQ1U3RlcChNRDVfRjQsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzWyg3KihpICYgMHhmKSkgJiAweGZdLAorICAgICAgICAgICAgICAgIE1ENVRhYmxlW2ldLCBMU2hpZnRWYWxbKDB4MyA8PCAyKSsoaSAmIDB4MyldKTsKKworICAgICAgICAvLyBvbmUtd29yZCByaWdodCBzaGlmdAorICAgICAgICBUZW1wICAgPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisgICAgfQorCisKKyAgICAvLyAodGVtcG9yYXJ5KW91dHB1dAorICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgQnVmW2ldICs9IFJlZ1tpXTsKKworfQorCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PSAgU0hBLTEgaW1wbGVtZW50YXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vIGZvdXIgYmFzZSBmdW5jdGlvbnMgZm9yIFNIQS0xCisjZGVmaW5lIFNIQTFfRjEoYiwgYywgZCkgICAgKCgoYikgJiAoYykpIHwgKCh+YikgJiAoZCkpKQorI2RlZmluZSBTSEExX0YyKGIsIGMsIGQpICAgICgoYikgXiAoYykgXiAoZCkpCisjZGVmaW5lIFNIQTFfRjMoYiwgYywgZCkgICAgKCgoYikgJiAoYykpIHwgKChiKSAmIChkKSkgfCAoKGMpICYgKGQpKSkKKworCisjZGVmaW5lIFNIQTFTdGVwKGYsIGEsIGIsIGMsIGQsIGUsIHcsIGspICAgIFwKKyAgICAoIGUJKz0gKCBmKGIsIGMsIGQpICsgdyArIGsgKyBDWUNMSUNfTEVGVF9TSElGVChhLCA1KSkgJiAweGZmZmZmZmZmLCBcCisgICAgICBiID0gQ1lDTElDX0xFRlRfU0hJRlQoYiwgMzApICkKKworLy9Jbml0aWF0ZSBTSEEtMSBDb250ZXh0IHNhdGlzZmllZCBpbiBSRkMgMzE3NAorVk9JRCBTSEFJbml0KFNIQV9DVFggKnBDdHgpCit7CisgICAgcEN0eC0+QnVmWzBdPTB4Njc0NTIzMDE7CisgICAgcEN0eC0+QnVmWzFdPTB4ZWZjZGFiODk7CisgICAgcEN0eC0+QnVmWzJdPTB4OThiYWRjZmU7CisgICAgcEN0eC0+QnVmWzNdPTB4MTAzMjU0NzY7CisgICAgcEN0eC0+QnVmWzRdPTB4YzNkMmUxZjA7CisKKyAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzBdPTA7CisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXT0wOworfQorCisvKgorICogIEZ1bmN0aW9uIERlc2NyaXB0aW9uOgorICogICAgICBVcGRhdGUgU0hBLTEgQ29udGV4dCwgYWxsb3cgb2YgYW4gYXJyYXJ5IG9mIG9jdGV0cyBhcyB0aGUgbmV4dAorICogICAgICBwb3J0aW9uIG9mIHRoZSBtZXNzYWdlCisgKgorICogIEFyZ3VtZW50czoKKyAqICAgICAgcEN0eAkJUG9pbnRlcgl0byBTSEEtMSBjb250ZXh0CisgKiAJICAgIHBEYXRhICAgICAgIFBvaW50ZXIgdG8gaW5wdXQgZGF0YQorICogICAgICBMZW5JbkJ5dGVzICBUaGUgbGVuZ3RoIG9mIGlucHV0IGRhdGEgKHVuaXQ6IGJ5dGUpCisgKgorICogIFJldHVybiBWYWx1ZToKKyAqICAgICAgZXJyb3IgICAgICAgaW5kaWNhdGUgbW9yZSB0aGFuIHBvdygyLDY0KSBiaXRzIG9mIGRhdGEKKyAqCisgKiAgTm90ZToKKyAqICAgICAgQ2FsbGVkIGFmdGVyIFNIQUluaXQgb3IgU0hBVXBkYXRlKGl0c2VsZikKKyAqLworVUNIQVIgU0hBVXBkYXRlKFNIQV9DVFggKnBDdHgsIFVDSEFSICpwRGF0YSwgVUlOVDMyIExlbkluQnl0ZXMpCit7CisgICAgVUlOVDMyIFRmVGltZXM7CisgICAgVUlOVDMyIHRlbXAxLHRlbXAyOworCXVuc2lnbmVkIGludCBpOworCVVDSEFSIGVycj0xOworCisgICAgdGVtcDEgPSBwQ3R4LT5MZW5JbkJpdENvdW50WzBdOworICAgIHRlbXAyID0gcEN0eC0+TGVuSW5CaXRDb3VudFsxXTsKKworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMF0gPSAoVUlOVDMyKSAocEN0eC0+TGVuSW5CaXRDb3VudFswXSArIChMZW5JbkJ5dGVzIDw8IDMpKTsKKyAgICBpZiAocEN0eC0+TGVuSW5CaXRDb3VudFswXSA8IHRlbXAxKQorICAgICAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdKys7ICAgLy9jYXJyeSBpbgorCisKKyAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdID0gKFVJTlQzMikgKHBDdHgtPkxlbkluQml0Q291bnRbMV0gKyhMZW5JbkJ5dGVzID4+IDI5KSk7CisgICAgaWYgKHBDdHgtPkxlbkluQml0Q291bnRbMV0gPCB0ZW1wMikKKyAgICAgICAgcmV0dXJuIChlcnIpOyAgIC8vY2hlY2sgdG90YWwgbGVuZ3RoIG9mIG9yaWdpbmFsIGRhdGEKKworCisgICAgLy8gbW9kIDY0IGJ5dGVzCisgICAgdGVtcDEgPSAodGVtcDEgPj4gMykgJiAweDNmOworCisgICAgLy8gcHJvY2VzcyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEKKyAgICBpZiAodGVtcDEpCisgICAgeworICAgICAgICBVQ0hBUiAqcEFkcyA9IChVQ0hBUiAqKSBwQ3R4LT5JbnB1dCArIHRlbXAxOworCisgICAgICAgIGlmICgodGVtcDErTGVuSW5CeXRlcykgPCA2NCkKKyAgICAgICAgeworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkcywgKFVDSEFSICopcERhdGEsIExlbkluQnl0ZXMpOworICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorCisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCA2NC10ZW1wMSk7CisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyA2NCwgMTYpOworICAgICAgICBTSEFUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworCisgICAgICAgIHBEYXRhICs9IDY0LXRlbXAxOworICAgICAgICBMZW5JbkJ5dGVzIC09IDY0LXRlbXAxOworICAgIH0gLy8gZW5kIG9mIGlmICh0ZW1wMSkKKworCisgICAgVGZUaW1lcyA9IChMZW5JbkJ5dGVzID4+IDYpOworCisgICAgZm9yIChpPVRmVGltZXM7IGk+MDsgaS0tKQorICAgIHsKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBEYXRhLCA2NCk7CisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyA2NCwgMTYpOworICAgICAgICBTSEFUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworICAgICAgICBwRGF0YSArPSA2NDsKKyAgICAgICAgTGVuSW5CeXRlcyAtPSA2NDsKKyAgICB9IC8vIGVuZCBvZiBmb3IKKworICAgIC8vIGJ1ZmZlcmluZyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEKKyAgICBpZihMZW5JbkJ5dGVzKQorICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ3R4LT5JbnB1dCwgKFVDSEFSICopcERhdGEsIExlbkluQnl0ZXMpOworCisJcmV0dXJuICgwKTsKKworfQorCisvLyBBcHBlbmQgcGFkZGluZyBiaXRzIGFuZCBsZW5ndGggb2Ygb3JpZ2luYWwgbWVzc2FnZSBpbiB0aGUgdGFpbAorLy8gVGhlIG1lc3NhZ2UgZGlnZXN0IGhhcyB0byBiZSBjb21wbGV0ZWQgaW4gdGhlIGVuZAorVk9JRCBTSEFGaW5hbChTSEFfQ1RYICpwQ3R4LCBVQ0hBUiBEaWdlc3RbMjBdKQoreworICAgIFVDSEFSIFJlbWFpbmRlcjsKKyAgICBVQ0hBUiBQYWRMZW5JbkJ5dGVzOworICAgIFVDSEFSICpwQXBwZW5kPTA7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBSZW1haW5kZXIgPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzBdID4+IDMpICYgMHgzZik7CisKKyAgICBwQXBwZW5kID0gKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXI7CisKKyAgICBQYWRMZW5JbkJ5dGVzID0gKFJlbWFpbmRlciA8IDU2KSA/ICg1Ni1SZW1haW5kZXIpIDogKDEyMC1SZW1haW5kZXIpOworCisgICAgLy8gcGFkZGluZyBiaXRzIHdpdGhvdXQgY3Jvc3NpbmcgYmxvY2soNjQtYnl0ZSBiYXNlZCkgYm91bmRhcnkKKyAgICBpZiAoUmVtYWluZGVyIDwgNTYpCisgICAgeworICAgICAgICAqcEFwcGVuZCA9IDB4ODA7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLS07CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXIrMSwgUGFkTGVuSW5CeXRlcyk7CisKKwkJLy8gYWRkIGRhdGEtbGVuZ3RoIGZpZWxkLCBmcm9tIGhpZ2ggdG8gbG93CisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAJcEN0eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+ICgoMy1pKSA8PCAzKSkgJiAweGZmKTsKKyAgICAgICAgCXBDdHgtPklucHV0WzYwK2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAoKDMtaSkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE0KTsKKyAgICAgICAgU0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKyAgICB9IC8vIGVuZCBvZiBpZgorCisgICAgLy8gcGFkZGluZyBiaXRzIHdpdGggY3Jvc3NpbmcgYmxvY2soNjQtYnl0ZSBiYXNlZCkgYm91bmRhcnkKKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyB0aGUgZmlyc3QgYmxvY2sgPT09CisgICAgICAgICpwQXBwZW5kID0gMHg4MDsKKyAgICAgICAgUGFkTGVuSW5CeXRlcyAtLTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIFJlbWFpbmRlcisxLCAoNjQtUmVtYWluZGVyLTEpKTsKKyAgICAgICAgUGFkTGVuSW5CeXRlcyAtPSAoNjQgLSBSZW1haW5kZXIgLSAxKTsKKworICAgICAgICBieXRlUmV2ZXJzZSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIDY0LCAxNik7CisgICAgICAgIFNIQVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisKKworICAgICAgICAvLyB0aGUgc2Vjb25kIGJsb2NrID09PQorICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgUGFkTGVuSW5CeXRlcyk7CisKKwkJLy8gYWRkIGRhdGEtbGVuZ3RoIGZpZWxkCisJCWZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAJcEN0eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+ICgoMy1pKSA8PCAzKSkgJiAweGZmKTsKKyAgICAgICAgCXBDdHgtPklucHV0WzYwK2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAoKDMtaSkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE2KTsKKyAgICAgICAgU0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKyAgICB9IC8vIGVuZCBvZiBlbHNlCisKKworICAgIC8vT3V0cHV0LCBieXRlcmV2ZXJzZQorICAgIGZvciAoaT0wOyBpPDIwOyBpKyspCisgICAgeworICAgICAgICBEaWdlc3QgW2ldID0gKFVDSEFSKShwQ3R4LT5CdWZbaT4+Ml0gPj4gOCooMy0oaSAmIDB4MykpKTsKKyAgICB9CisKKyAgICBOZGlzWmVyb01lbW9yeShwQ3R4LCBzaXplb2YocEN0eCkpOyAvLyBtZW1vcnkgZnJlZQorfQorCisKKy8vIFRoZSBjZW50cmFsIGFsZ29yaXRobSBvZiBTSEEtMSwgY29uc2lzdHMgb2YgZm91ciByb3VuZHMgYW5kCisvLyB0d2VudHkgc3RlcHMgcGVyIHJvdW5kCitWT0lEIFNIQVRyYW5zZm9ybShVSU5UMzIgQnVmWzVdLCBVSU5UMzIgTWVzWzIwXSkKK3sKKyAgICBVSU5UMzIgUmVnWzVdLFRlbXA7CisJdW5zaWduZWQgaW50IGk7CisgICAgVUlOVDMyIFdbODBdOworCisgICAgc3RhdGljIFVJTlQzMiBTSEExVGFibGVbNF0gPSB7IDB4NWE4Mjc5OTksIDB4NmVkOWViYTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNiB9OworCisgICAgUmVnWzBdPUJ1ZlswXTsKKwlSZWdbMV09QnVmWzFdOworCVJlZ1syXT1CdWZbMl07CisJUmVnWzNdPUJ1ZlszXTsKKwlSZWdbNF09QnVmWzRdOworCisgICAgLy90aGUgZmlyc3Qgb2N0ZXQgb2YgYSB3b3JkIGlzIHN0b3JlZCBpbiB0aGUgMHRoIGVsZW1lbnQsIGJ5dGVyZXZlcnNlCisJZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgCVdbaV0gID0gKE1lc1tpXSA+PiAyNCkgJiAweGZmOworICAgICAgICBXW2ldIHw9IChNZXNbaV0gPj4gOCApICYgMHhmZjAwOworICAgICAgICBXW2ldIHw9IChNZXNbaV0gPDwgOCApICYgMHhmZjAwMDA7CisgICAgICAgIFdbaV0gfD0gKE1lc1tpXSA8PCAyNCkgJiAweGZmMDAwMDAwOworICAgIH0KKworCisgICAgZm9yCShpID0gMDsgaSA8IDY0OyBpKyspCisJICAgIFdbMTYraV0gPSBDWUNMSUNfTEVGVF9TSElGVChXW2ldIF4gV1syK2ldIF4gV1s4K2ldIF4gV1sxMytpXSwgMSk7CisKKworICAgIC8vIDgwIHN0ZXBzIGluIFNIQS0xIGFsZ29yaXRobQorICAgIGZvciAoaT0wOyBpPDgwOyBpKyspCisgICAgeworICAgICAgICBpZiAoaTwyMCkKKyAgICAgICAgICAgIFNIQTFTdGVwKFNIQTFfRjEsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgUmVnWzRdLAorICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzBdKTsKKworICAgICAgICBlbHNlIGlmIChpPj0yMCAmJiBpPDQwKQorICAgICAgICAgICAgU0hBMVN0ZXAoU0hBMV9GMiwgUmVnWzBdLCBSZWdbMV0sIFJlZ1syXSwgUmVnWzNdLCBSZWdbNF0sCisgICAgICAgICAgICAgICAgICAgICBXW2ldLCBTSEExVGFibGVbMV0pOworCisJCWVsc2UgaWYgKGk+PTQwICYmIGk8NjApCisgICAgICAgICAgICBTSEExU3RlcChTSEExX0YzLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIFJlZ1s0XSwKKyAgICAgICAgICAgICAgICAgICAgICBXW2ldLCBTSEExVGFibGVbMl0pOworCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNIQTFTdGVwKFNIQTFfRjIsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgUmVnWzRdLAorICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzNdKTsKKworCisgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQKKwkJVGVtcCAgID0gUmVnWzRdOworICAgICAgICBSZWdbNF0gPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisKKyAgICB9IC8vIGVuZCBvZiBmb3ItbG9vcAorCisKKyAgICAvLyAodGVtcG9yYXJ5KW91dHB1dAorICAgIGZvciAoaT0wOyBpPDU7IGkrKykKKyAgICAgICAgQnVmW2ldICs9IFJlZ1tpXTsKKworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gIEFFUyBFbi9EZWNyeXB0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIGZvcndhcmQgUy1ib3ggKi8KK3N0YXRpYyB1aW50MzIgRlNiWzI1Nl0gPQoreworCTB4NjMsIDB4N0MsCTB4NzcsIDB4N0IsCTB4RjIsIDB4NkIsCTB4NkYsIDB4QzUsCisJMHgzMCwgMHgwMSwJMHg2NywgMHgyQiwJMHhGRSwgMHhENywJMHhBQiwgMHg3NiwKKwkweENBLCAweDgyLAkweEM5LCAweDdELAkweEZBLCAweDU5LAkweDQ3LCAweEYwLAorCTB4QUQsIDB4RDQsCTB4QTIsIDB4QUYsCTB4OUMsIDB4QTQsCTB4NzIsIDB4QzAsCisJMHhCNywgMHhGRCwJMHg5MywgMHgyNiwJMHgzNiwgMHgzRiwJMHhGNywgMHhDQywKKwkweDM0LCAweEE1LAkweEU1LCAweEYxLAkweDcxLCAweEQ4LAkweDMxLCAweDE1LAorCTB4MDQsIDB4QzcsCTB4MjMsIDB4QzMsCTB4MTgsIDB4OTYsCTB4MDUsIDB4OUEsCisJMHgwNywgMHgxMiwJMHg4MCwgMHhFMiwJMHhFQiwgMHgyNywJMHhCMiwgMHg3NSwKKwkweDA5LCAweDgzLAkweDJDLCAweDFBLAkweDFCLCAweDZFLAkweDVBLCAweEEwLAorCTB4NTIsIDB4M0IsCTB4RDYsIDB4QjMsCTB4MjksIDB4RTMsCTB4MkYsIDB4ODQsCisJMHg1MywgMHhEMSwJMHgwMCwgMHhFRCwJMHgyMCwgMHhGQywJMHhCMSwgMHg1QiwKKwkweDZBLCAweENCLAkweEJFLCAweDM5LAkweDRBLCAweDRDLAkweDU4LCAweENGLAorCTB4RDAsIDB4RUYsCTB4QUEsIDB4RkIsCTB4NDMsIDB4NEQsCTB4MzMsIDB4ODUsCisJMHg0NSwgMHhGOSwJMHgwMiwgMHg3RiwJMHg1MCwgMHgzQywJMHg5RiwgMHhBOCwKKwkweDUxLCAweEEzLAkweDQwLCAweDhGLAkweDkyLCAweDlELAkweDM4LCAweEY1LAorCTB4QkMsIDB4QjYsCTB4REEsIDB4MjEsCTB4MTAsIDB4RkYsCTB4RjMsIDB4RDIsCisJMHhDRCwgMHgwQywJMHgxMywgMHhFQywJMHg1RiwgMHg5NywJMHg0NCwgMHgxNywKKwkweEM0LCAweEE3LAkweDdFLCAweDNELAkweDY0LCAweDVELAkweDE5LCAweDczLAorCTB4NjAsIDB4ODEsCTB4NEYsIDB4REMsCTB4MjIsIDB4MkEsCTB4OTAsIDB4ODgsCisJMHg0NiwgMHhFRSwJMHhCOCwgMHgxNCwJMHhERSwgMHg1RSwJMHgwQiwgMHhEQiwKKwkweEUwLCAweDMyLAkweDNBLCAweDBBLAkweDQ5LCAweDA2LAkweDI0LCAweDVDLAorCTB4QzIsIDB4RDMsCTB4QUMsIDB4NjIsCTB4OTEsIDB4OTUsCTB4RTQsIDB4NzksCisJMHhFNywgMHhDOCwJMHgzNywgMHg2RCwJMHg4RCwgMHhENSwJMHg0RSwgMHhBOSwKKwkweDZDLCAweDU2LAkweEY0LCAweEVBLAkweDY1LCAweDdBLAkweEFFLCAweDA4LAorCTB4QkEsIDB4NzgsCTB4MjUsIDB4MkUsCTB4MUMsIDB4QTYsCTB4QjQsIDB4QzYsCisJMHhFOCwgMHhERCwJMHg3NCwgMHgxRiwJMHg0QiwgMHhCRCwJMHg4QiwgMHg4QSwKKwkweDcwLCAweDNFLAkweEI1LCAweDY2LAkweDQ4LCAweDAzLAkweEY2LCAweDBFLAorCTB4NjEsIDB4MzUsCTB4NTcsIDB4QjksCTB4ODYsIDB4QzEsCTB4MUQsIDB4OUUsCisJMHhFMSwgMHhGOCwJMHg5OCwgMHgxMSwJMHg2OSwgMHhEOSwJMHg4RSwgMHg5NCwKKwkweDlCLCAweDFFLAkweDg3LCAweEU5LAkweENFLCAweDU1LAkweDI4LCAweERGLAorCTB4OEMsIDB4QTEsCTB4ODksIDB4MEQsCTB4QkYsIDB4RTYsCTB4NDIsIDB4NjgsCisJMHg0MSwgMHg5OSwJMHgyRCwgMHgwRiwJMHhCMCwgMHg1NCwJMHhCQiwgMHgxNgorfTsKKworLyogZm9yd2FyZCB0YWJsZSAqLworI2RlZmluZQlGVCBcCitcCisJVihDNiw2Myw2MyxBNSksCVYoRjgsN0MsN0MsODQpLAlWKEVFLDc3LDc3LDk5KSwJVihGNiw3Qiw3Qiw4RCksCVwKKwlWKEZGLEYyLEYyLDBEKSwJVihENiw2Qiw2QixCRCksCVYoREUsNkYsNkYsQjEpLAlWKDkxLEM1LEM1LDU0KSwJXAorCVYoNjAsMzAsMzAsNTApLAlWKDAyLDAxLDAxLDAzKSwJVihDRSw2Nyw2NyxBOSksCVYoNTYsMkIsMkIsN0QpLAlcCisJVihFNyxGRSxGRSwxOSksCVYoQjUsRDcsRDcsNjIpLAlWKDRELEFCLEFCLEU2KSwJVihFQyw3Niw3Niw5QSksCVwKKwlWKDhGLENBLENBLDQ1KSwJVigxRiw4Miw4Miw5RCksCVYoODksQzksQzksNDApLAlWKEZBLDdELDdELDg3KSwJXAorCVYoRUYsRkEsRkEsMTUpLAlWKEIyLDU5LDU5LEVCKSwJVig4RSw0Nyw0NyxDOSksCVYoRkIsRjAsRjAsMEIpLAlcCisJVig0MSxBRCxBRCxFQyksCVYoQjMsRDQsRDQsNjcpLAlWKDVGLEEyLEEyLEZEKSwJVig0NSxBRixBRixFQSksCVwKKwlWKDIzLDlDLDlDLEJGKSwJVig1MyxBNCxBNCxGNyksCVYoRTQsNzIsNzIsOTYpLAlWKDlCLEMwLEMwLDVCKSwJXAorCVYoNzUsQjcsQjcsQzIpLAlWKEUxLEZELEZELDFDKSwJVigzRCw5Myw5MyxBRSksCVYoNEMsMjYsMjYsNkEpLAlcCisJVig2QywzNiwzNiw1QSksCVYoN0UsM0YsM0YsNDEpLAlWKEY1LEY3LEY3LDAyKSwJVig4MyxDQyxDQyw0RiksCVwKKwlWKDY4LDM0LDM0LDVDKSwJVig1MSxBNSxBNSxGNCksCVYoRDEsRTUsRTUsMzQpLAlWKEY5LEYxLEYxLDA4KSwJXAorCVYoRTIsNzEsNzEsOTMpLAlWKEFCLEQ4LEQ4LDczKSwJVig2MiwzMSwzMSw1MyksCVYoMkEsMTUsMTUsM0YpLAlcCisJVigwOCwwNCwwNCwwQyksCVYoOTUsQzcsQzcsNTIpLAlWKDQ2LDIzLDIzLDY1KSwJVig5RCxDMyxDMyw1RSksCVwKKwlWKDMwLDE4LDE4LDI4KSwJVigzNyw5Niw5NixBMSksCVYoMEEsMDUsMDUsMEYpLAlWKDJGLDlBLDlBLEI1KSwJXAorCVYoMEUsMDcsMDcsMDkpLAlWKDI0LDEyLDEyLDM2KSwJVigxQiw4MCw4MCw5QiksCVYoREYsRTIsRTIsM0QpLAlcCisJVihDRCxFQixFQiwyNiksCVYoNEUsMjcsMjcsNjkpLAlWKDdGLEIyLEIyLENEKSwJVihFQSw3NSw3NSw5RiksCVwKKwlWKDEyLDA5LDA5LDFCKSwJVigxRCw4Myw4Myw5RSksCVYoNTgsMkMsMkMsNzQpLAlWKDM0LDFBLDFBLDJFKSwJXAorCVYoMzYsMUIsMUIsMkQpLAlWKERDLDZFLDZFLEIyKSwJVihCNCw1QSw1QSxFRSksCVYoNUIsQTAsQTAsRkIpLAlcCisJVihBNCw1Miw1MixGNiksCVYoNzYsM0IsM0IsNEQpLAlWKEI3LEQ2LEQ2LDYxKSwJVig3RCxCMyxCMyxDRSksCVwKKwlWKDUyLDI5LDI5LDdCKSwJVihERCxFMyxFMywzRSksCVYoNUUsMkYsMkYsNzEpLAlWKDEzLDg0LDg0LDk3KSwJXAorCVYoQTYsNTMsNTMsRjUpLAlWKEI5LEQxLEQxLDY4KSwJVigwMCwwMCwwMCwwMCksCVYoQzEsRUQsRUQsMkMpLAlcCisJVig0MCwyMCwyMCw2MCksCVYoRTMsRkMsRkMsMUYpLAlWKDc5LEIxLEIxLEM4KSwJVihCNiw1Qiw1QixFRCksCVwKKwlWKEQ0LDZBLDZBLEJFKSwJVig4RCxDQixDQiw0NiksCVYoNjcsQkUsQkUsRDkpLAlWKDcyLDM5LDM5LDRCKSwJXAorCVYoOTQsNEEsNEEsREUpLAlWKDk4LDRDLDRDLEQ0KSwJVihCMCw1OCw1OCxFOCksCVYoODUsQ0YsQ0YsNEEpLAlcCisJVihCQixEMCxEMCw2QiksCVYoQzUsRUYsRUYsMkEpLAlWKDRGLEFBLEFBLEU1KSwJVihFRCxGQixGQiwxNiksCVwKKwlWKDg2LDQzLDQzLEM1KSwJVig5QSw0RCw0RCxENyksCVYoNjYsMzMsMzMsNTUpLAlWKDExLDg1LDg1LDk0KSwJXAorCVYoOEEsNDUsNDUsQ0YpLAlWKEU5LEY5LEY5LDEwKSwJVigwNCwwMiwwMiwwNiksCVYoRkUsN0YsN0YsODEpLAlcCisJVihBMCw1MCw1MCxGMCksCVYoNzgsM0MsM0MsNDQpLAlWKDI1LDlGLDlGLEJBKSwJVig0QixBOCxBOCxFMyksCVwKKwlWKEEyLDUxLDUxLEYzKSwJVig1RCxBMyxBMyxGRSksCVYoODAsNDAsNDAsQzApLAlWKDA1LDhGLDhGLDhBKSwJXAorCVYoM0YsOTIsOTIsQUQpLAlWKDIxLDlELDlELEJDKSwJVig3MCwzOCwzOCw0OCksCVYoRjEsRjUsRjUsMDQpLAlcCisJVig2MyxCQyxCQyxERiksCVYoNzcsQjYsQjYsQzEpLAlWKEFGLERBLERBLDc1KSwJVig0MiwyMSwyMSw2MyksCVwKKwlWKDIwLDEwLDEwLDMwKSwJVihFNSxGRixGRiwxQSksCVYoRkQsRjMsRjMsMEUpLAlWKEJGLEQyLEQyLDZEKSwJXAorCVYoODEsQ0QsQ0QsNEMpLAlWKDE4LDBDLDBDLDE0KSwJVigyNiwxMywxMywzNSksCVYoQzMsRUMsRUMsMkYpLAlcCisJVihCRSw1Riw1RixFMSksCVYoMzUsOTcsOTcsQTIpLAlWKDg4LDQ0LDQ0LENDKSwJVigyRSwxNywxNywzOSksCVwKKwlWKDkzLEM0LEM0LDU3KSwJVig1NSxBNyxBNyxGMiksCVYoRkMsN0UsN0UsODIpLAlWKDdBLDNELDNELDQ3KSwJXAorCVYoQzgsNjQsNjQsQUMpLAlWKEJBLDVELDVELEU3KSwJVigzMiwxOSwxOSwyQiksCVYoRTYsNzMsNzMsOTUpLAlcCisJVihDMCw2MCw2MCxBMCksCVYoMTksODEsODEsOTgpLAlWKDlFLDRGLDRGLEQxKSwJVihBMyxEQyxEQyw3RiksCVwKKwlWKDQ0LDIyLDIyLDY2KSwJVig1NCwyQSwyQSw3RSksCVYoM0IsOTAsOTAsQUIpLAlWKDBCLDg4LDg4LDgzKSwJXAorCVYoOEMsNDYsNDYsQ0EpLAlWKEM3LEVFLEVFLDI5KSwJVig2QixCOCxCOCxEMyksCVYoMjgsMTQsMTQsM0MpLAlcCisJVihBNyxERSxERSw3OSksCVYoQkMsNUUsNUUsRTIpLAlWKDE2LDBCLDBCLDFEKSwJVihBRCxEQixEQiw3NiksCVwKKwlWKERCLEUwLEUwLDNCKSwJVig2NCwzMiwzMiw1NiksCVYoNzQsM0EsM0EsNEUpLAlWKDE0LDBBLDBBLDFFKSwJXAorCVYoOTIsNDksNDksREIpLAlWKDBDLDA2LDA2LDBBKSwJVig0OCwyNCwyNCw2QyksCVYoQjgsNUMsNUMsRTQpLAlcCisJVig5RixDMixDMiw1RCksCVYoQkQsRDMsRDMsNkUpLAlWKDQzLEFDLEFDLEVGKSwJVihDNCw2Miw2MixBNiksCVwKKwlWKDM5LDkxLDkxLEE4KSwJVigzMSw5NSw5NSxBNCksCVYoRDMsRTQsRTQsMzcpLAlWKEYyLDc5LDc5LDhCKSwJXAorCVYoRDUsRTcsRTcsMzIpLAlWKDhCLEM4LEM4LDQzKSwJVig2RSwzNywzNyw1OSksCVYoREEsNkQsNkQsQjcpLAlcCisJVigwMSw4RCw4RCw4QyksCVYoQjEsRDUsRDUsNjQpLAlWKDlDLDRFLDRFLEQyKSwJVig0OSxBOSxBOSxFMCksCVwKKwlWKEQ4LDZDLDZDLEI0KSwJVihBQyw1Niw1NixGQSksCVYoRjMsRjQsRjQsMDcpLAlWKENGLEVBLEVBLDI1KSwJXAorCVYoQ0EsNjUsNjUsQUYpLAlWKEY0LDdBLDdBLDhFKSwJVig0NyxBRSxBRSxFOSksCVYoMTAsMDgsMDgsMTgpLAlcCisJVig2RixCQSxCQSxENSksCVYoRjAsNzgsNzgsODgpLAlWKDRBLDI1LDI1LDZGKSwJVig1QywyRSwyRSw3MiksCVwKKwlWKDM4LDFDLDFDLDI0KSwJVig1NyxBNixBNixGMSksCVYoNzMsQjQsQjQsQzcpLAlWKDk3LEM2LEM2LDUxKSwJXAorCVYoQ0IsRTgsRTgsMjMpLAlWKEExLERELERELDdDKSwJVihFOCw3NCw3NCw5QyksCVYoM0UsMUYsMUYsMjEpLAlcCisJVig5Niw0Qiw0QixERCksCVYoNjEsQkQsQkQsREMpLAlWKDBELDhCLDhCLDg2KSwJVigwRiw4QSw4QSw4NSksCVwKKwlWKEUwLDcwLDcwLDkwKSwJVig3QywzRSwzRSw0MiksCVYoNzEsQjUsQjUsQzQpLAlWKENDLDY2LDY2LEFBKSwJXAorCVYoOTAsNDgsNDgsRDgpLAlWKDA2LDAzLDAzLDA1KSwJVihGNyxGNixGNiwwMSksCVYoMUMsMEUsMEUsMTIpLAlcCisJVihDMiw2MSw2MSxBMyksCVYoNkEsMzUsMzUsNUYpLAlWKEFFLDU3LDU3LEY5KSwJVig2OSxCOSxCOSxEMCksCVwKKwlWKDE3LDg2LDg2LDkxKSwJVig5OSxDMSxDMSw1OCksCVYoM0EsMUQsMUQsMjcpLAlWKDI3LDlFLDlFLEI5KSwJXAorCVYoRDksRTEsRTEsMzgpLAlWKEVCLEY4LEY4LDEzKSwJVigyQiw5OCw5OCxCMyksCVYoMjIsMTEsMTEsMzMpLAlcCisJVihEMiw2OSw2OSxCQiksCVYoQTksRDksRDksNzApLAlWKDA3LDhFLDhFLDg5KSwJVigzMyw5NCw5NCxBNyksCVwKKwlWKDJELDlCLDlCLEI2KSwJVigzQywxRSwxRSwyMiksCVYoMTUsODcsODcsOTIpLAlWKEM5LEU5LEU5LDIwKSwJXAorCVYoODcsQ0UsQ0UsNDkpLAlWKEFBLDU1LDU1LEZGKSwJVig1MCwyOCwyOCw3OCksCVYoQTUsREYsREYsN0EpLAlcCisJVigwMyw4Qyw4Qyw4RiksCVYoNTksQTEsQTEsRjgpLAlWKDA5LDg5LDg5LDgwKSwJVigxQSwwRCwwRCwxNyksCVwKKwlWKDY1LEJGLEJGLERBKSwJVihENyxFNixFNiwzMSksCVYoODQsNDIsNDIsQzYpLAlWKEQwLDY4LDY4LEI4KSwJXAorCVYoODIsNDEsNDEsQzMpLAlWKDI5LDk5LDk5LEIwKSwJVig1QSwyRCwyRCw3NyksCVYoMUUsMEYsMEYsMTEpLAlcCisJVig3QixCMCxCMCxDQiksCVYoQTgsNTQsNTQsRkMpLAlWKDZELEJCLEJCLEQ2KSwJVigyQywxNiwxNiwzQSkKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNhIyNiIyNjIyNkCitzdGF0aWMgdWludDMyIEZUMFsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNkIyNhIyNiIyNjCitzdGF0aWMgdWludDMyIEZUMVsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNjIyNkIyNhIyNiCitzdGF0aWMgdWludDMyIEZUMlsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNiIyNjIyNkIyNhCitzdGF0aWMgdWludDMyIEZUM1syNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI3VuZGVmIEZUCisKKy8qIHJldmVyc2UgUy1ib3ggKi8KKworc3RhdGljIHVpbnQzMiBSU2JbMjU2XSA9Cit7CisJMHg1MiwgMHgwOSwJMHg2QSwgMHhENSwJMHgzMCwgMHgzNiwJMHhBNSwgMHgzOCwKKwkweEJGLCAweDQwLAkweEEzLCAweDlFLAkweDgxLCAweEYzLAkweEQ3LCAweEZCLAorCTB4N0MsIDB4RTMsCTB4MzksIDB4ODIsCTB4OUIsIDB4MkYsCTB4RkYsIDB4ODcsCisJMHgzNCwgMHg4RSwJMHg0MywgMHg0NCwJMHhDNCwgMHhERSwJMHhFOSwgMHhDQiwKKwkweDU0LCAweDdCLAkweDk0LCAweDMyLAkweEE2LCAweEMyLAkweDIzLCAweDNELAorCTB4RUUsIDB4NEMsCTB4OTUsIDB4MEIsCTB4NDIsIDB4RkEsCTB4QzMsIDB4NEUsCisJMHgwOCwgMHgyRSwJMHhBMSwgMHg2NiwJMHgyOCwgMHhEOSwJMHgyNCwgMHhCMiwKKwkweDc2LCAweDVCLAkweEEyLCAweDQ5LAkweDZELCAweDhCLAkweEQxLCAweDI1LAorCTB4NzIsIDB4RjgsCTB4RjYsIDB4NjQsCTB4ODYsIDB4NjgsCTB4OTgsIDB4MTYsCisJMHhENCwgMHhBNCwJMHg1QywgMHhDQywJMHg1RCwgMHg2NSwJMHhCNiwgMHg5MiwKKwkweDZDLCAweDcwLAkweDQ4LCAweDUwLAkweEZELCAweEVELAkweEI5LCAweERBLAorCTB4NUUsIDB4MTUsCTB4NDYsIDB4NTcsCTB4QTcsIDB4OEQsCTB4OUQsIDB4ODQsCisJMHg5MCwgMHhEOCwJMHhBQiwgMHgwMCwJMHg4QywgMHhCQywJMHhEMywgMHgwQSwKKwkweEY3LCAweEU0LAkweDU4LCAweDA1LAkweEI4LCAweEIzLAkweDQ1LCAweDA2LAorCTB4RDAsIDB4MkMsCTB4MUUsIDB4OEYsCTB4Q0EsIDB4M0YsCTB4MEYsIDB4MDIsCisJMHhDMSwgMHhBRiwJMHhCRCwgMHgwMywJMHgwMSwgMHgxMywJMHg4QSwgMHg2QiwKKwkweDNBLCAweDkxLAkweDExLCAweDQxLAkweDRGLCAweDY3LAkweERDLCAweEVBLAorCTB4OTcsIDB4RjIsCTB4Q0YsIDB4Q0UsCTB4RjAsIDB4QjQsCTB4RTYsIDB4NzMsCisJMHg5NiwgMHhBQywJMHg3NCwgMHgyMiwJMHhFNywgMHhBRCwJMHgzNSwgMHg4NSwKKwkweEUyLCAweEY5LAkweDM3LCAweEU4LAkweDFDLCAweDc1LAkweERGLCAweDZFLAorCTB4NDcsIDB4RjEsCTB4MUEsIDB4NzEsCTB4MUQsIDB4MjksCTB4QzUsIDB4ODksCisJMHg2RiwgMHhCNywJMHg2MiwgMHgwRSwJMHhBQSwgMHgxOCwJMHhCRSwgMHgxQiwKKwkweEZDLCAweDU2LAkweDNFLCAweDRCLAkweEM2LCAweEQyLAkweDc5LCAweDIwLAorCTB4OUEsIDB4REIsCTB4QzAsIDB4RkUsCTB4NzgsIDB4Q0QsCTB4NUEsIDB4RjQsCisJMHgxRiwgMHhERCwJMHhBOCwgMHgzMywJMHg4OCwgMHgwNywJMHhDNywgMHgzMSwKKwkweEIxLCAweDEyLAkweDEwLCAweDU5LAkweDI3LCAweDgwLAkweEVDLCAweDVGLAorCTB4NjAsIDB4NTEsCTB4N0YsIDB4QTksCTB4MTksIDB4QjUsCTB4NEEsIDB4MEQsCisJMHgyRCwgMHhFNSwJMHg3QSwgMHg5RiwJMHg5MywgMHhDOSwJMHg5QywgMHhFRiwKKwkweEEwLCAweEUwLAkweDNCLCAweDRELAkweEFFLCAweDJBLAkweEY1LCAweEIwLAorCTB4QzgsIDB4RUIsCTB4QkIsIDB4M0MsCTB4ODMsIDB4NTMsCTB4OTksIDB4NjEsCisJMHgxNywgMHgyQiwJMHgwNCwgMHg3RSwJMHhCQSwgMHg3NywJMHhENiwgMHgyNiwKKwkweEUxLCAweDY5LAkweDE0LCAweDYzLAkweDU1LCAweDIxLAkweDBDLCAweDdECit9OworCisvKiByZXZlcnNlIHRhYmxlICovCisKKyNkZWZpbmUJUlQgXAorXAorCVYoNTEsRjQsQTcsNTApLAlWKDdFLDQxLDY1LDUzKSwJVigxQSwxNyxBNCxDMyksCVYoM0EsMjcsNUUsOTYpLAlcCisJVigzQixBQiw2QixDQiksCVYoMUYsOUQsNDUsRjEpLAlWKEFDLEZBLDU4LEFCKSwJVig0QixFMywwMyw5MyksCVwKKwlWKDIwLDMwLEZBLDU1KSwJVihBRCw3Niw2RCxGNiksCVYoODgsQ0MsNzYsOTEpLAlWKEY1LDAyLDRDLDI1KSwJXAorCVYoNEYsRTUsRDcsRkMpLAlWKEM1LDJBLENCLEQ3KSwJVigyNiwzNSw0NCw4MCksCVYoQjUsNjIsQTMsOEYpLAlcCisJVihERSxCMSw1QSw0OSksCVYoMjUsQkEsMUIsNjcpLAlWKDQ1LEVBLDBFLDk4KSwJVig1RCxGRSxDMCxFMSksCVwKKwlWKEMzLDJGLDc1LDAyKSwJVig4MSw0QyxGMCwxMiksCVYoOEQsNDYsOTcsQTMpLAlWKDZCLEQzLEY5LEM2KSwJXAorCVYoMDMsOEYsNUYsRTcpLAlWKDE1LDkyLDlDLDk1KSwJVihCRiw2RCw3QSxFQiksCVYoOTUsNTIsNTksREEpLAlcCisJVihENCxCRSw4MywyRCksCVYoNTgsNzQsMjEsRDMpLAlWKDQ5LEUwLDY5LDI5KSwJVig4RSxDOSxDOCw0NCksCVwKKwlWKDc1LEMyLDg5LDZBKSwJVihGNCw4RSw3OSw3OCksCVYoOTksNTgsM0UsNkIpLAlWKDI3LEI5LDcxLEREKSwJXAorCVYoQkUsRTEsNEYsQjYpLAlWKEYwLDg4LEFELDE3KSwJVihDOSwyMCxBQyw2NiksCVYoN0QsQ0UsM0EsQjQpLAlcCisJVig2MyxERiw0QSwxOCksCVYoRTUsMUEsMzEsODIpLAlWKDk3LDUxLDMzLDYwKSwJVig2Miw1Myw3Riw0NSksCVwKKwlWKEIxLDY0LDc3LEUwKSwJVihCQiw2QixBRSw4NCksCVYoRkUsODEsQTAsMUMpLAlWKEY5LDA4LDJCLDk0KSwJXAorCVYoNzAsNDgsNjgsNTgpLAlWKDhGLDQ1LEZELDE5KSwJVig5NCxERSw2Qyw4NyksCVYoNTIsN0IsRjgsQjcpLAlcCisJVihBQiw3MyxEMywyMyksCVYoNzIsNEIsMDIsRTIpLAlWKEUzLDFGLDhGLDU3KSwJVig2Niw1NSxBQiwyQSksCVwKKwlWKEIyLEVCLDI4LDA3KSwJVigyRixCNSxDMiwwMyksCVYoODYsQzUsN0IsOUEpLAlWKEQzLDM3LDA4LEE1KSwJXAorCVYoMzAsMjgsODcsRjIpLAlWKDIzLEJGLEE1LEIyKSwJVigwMiwwMyw2QSxCQSksCVYoRUQsMTYsODIsNUMpLAlcCisJVig4QSxDRiwxQywyQiksCVYoQTcsNzksQjQsOTIpLAlWKEYzLDA3LEYyLEYwKSwJVig0RSw2OSxFMixBMSksCVwKKwlWKDY1LERBLEY0LENEKSwJVigwNiwwNSxCRSxENSksCVYoRDEsMzQsNjIsMUYpLAlWKEM0LEE2LEZFLDhBKSwJXAorCVYoMzQsMkUsNTMsOUQpLAlWKEEyLEYzLDU1LEEwKSwJVigwNSw4QSxFMSwzMiksCVYoQTQsRjYsRUIsNzUpLAlcCisJVigwQiw4MyxFQywzOSksCVYoNDAsNjAsRUYsQUEpLAlWKDVFLDcxLDlGLDA2KSwJVihCRCw2RSwxMCw1MSksCVwKKwlWKDNFLDIxLDhBLEY5KSwJVig5NixERCwwNiwzRCksCVYoREQsM0UsMDUsQUUpLAlWKDRELEU2LEJELDQ2KSwJXAorCVYoOTEsNTQsOEQsQjUpLAlWKDcxLEM0LDVELDA1KSwJVigwNCwwNixENCw2RiksCVYoNjAsNTAsMTUsRkYpLAlcCisJVigxOSw5OCxGQiwyNCksCVYoRDYsQkQsRTksOTcpLAlWKDg5LDQwLDQzLENDKSwJVig2NyxEOSw5RSw3NyksCVwKKwlWKEIwLEU4LDQyLEJEKSwJVigwNyw4OSw4Qiw4OCksCVYoRTcsMTksNUIsMzgpLAlWKDc5LEM4LEVFLERCKSwJXAorCVYoQTEsN0MsMEEsNDcpLAlWKDdDLDQyLDBGLEU5KSwJVihGOCw4NCwxRSxDOSksCVYoMDAsMDAsMDAsMDApLAlcCisJVigwOSw4MCw4Niw4MyksCVYoMzIsMkIsRUQsNDgpLAlWKDFFLDExLDcwLEFDKSwJVig2Qyw1QSw3Miw0RSksCVwKKwlWKEZELDBFLEZGLEZCKSwJVigwRiw4NSwzOCw1NiksCVYoM0QsQUUsRDUsMUUpLAlWKDM2LDJELDM5LDI3KSwJXAorCVYoMEEsMEYsRDksNjQpLAlWKDY4LDVDLEE2LDIxKSwJVig5Qiw1Qiw1NCxEMSksCVYoMjQsMzYsMkUsM0EpLAlcCisJVigwQywwQSw2NyxCMSksCVYoOTMsNTcsRTcsMEYpLAlWKEI0LEVFLDk2LEQyKSwJVigxQiw5Qiw5MSw5RSksCVwKKwlWKDgwLEMwLEM1LDRGKSwJVig2MSxEQywyMCxBMiksCVYoNUEsNzcsNEIsNjkpLAlWKDFDLDEyLDFBLDE2KSwJXAorCVYoRTIsOTMsQkEsMEEpLAlWKEMwLEEwLDJBLEU1KSwJVigzQywyMixFMCw0MyksCVYoMTIsMUIsMTcsMUQpLAlcCisJVigwRSwwOSwwRCwwQiksCVYoRjIsOEIsQzcsQUQpLAlWKDJELEI2LEE4LEI5KSwJVigxNCwxRSxBOSxDOCksCVwKKwlWKDU3LEYxLDE5LDg1KSwJVihBRiw3NSwwNyw0QyksCVYoRUUsOTksREQsQkIpLAlWKEEzLDdGLDYwLEZEKSwJXAorCVYoRjcsMDEsMjYsOUYpLAlWKDVDLDcyLEY1LEJDKSwJVig0NCw2NiwzQixDNSksCVYoNUIsRkIsN0UsMzQpLAlcCisJVig4Qiw0MywyOSw3NiksCVYoQ0IsMjMsQzYsREMpLAlWKEI2LEVELEZDLDY4KSwJVihCOCxFNCxGMSw2MyksCVwKKwlWKEQ3LDMxLERDLENBKSwJVig0Miw2Myw4NSwxMCksCVYoMTMsOTcsMjIsNDApLAlWKDg0LEM2LDExLDIwKSwJXAorCVYoODUsNEEsMjQsN0QpLAlWKEQyLEJCLDNELEY4KSwJVihBRSxGOSwzMiwxMSksCVYoQzcsMjksQTEsNkQpLAlcCisJVigxRCw5RSwyRiw0QiksCVYoREMsQjIsMzAsRjMpLAlWKDBELDg2LDUyLEVDKSwJVig3NyxDMSxFMyxEMCksCVwKKwlWKDJCLEIzLDE2LDZDKSwJVihBOSw3MCxCOSw5OSksCVYoMTEsOTQsNDgsRkEpLAlWKDQ3LEU5LDY0LDIyKSwJXAorCVYoQTgsRkMsOEMsQzQpLAlWKEEwLEYwLDNGLDFBKSwJVig1Niw3RCwyQyxEOCksCVYoMjIsMzMsOTAsRUYpLAlcCisJVig4Nyw0OSw0RSxDNyksCVYoRDksMzgsRDEsQzEpLAlWKDhDLENBLEEyLEZFKSwJVig5OCxENCwwQiwzNiksCVwKKwlWKEE2LEY1LDgxLENGKSwJVihBNSw3QSxERSwyOCksCVYoREEsQjcsOEUsMjYpLAlWKDNGLEFELEJGLEE0KSwJXAorCVYoMkMsM0EsOUQsRTQpLAlWKDUwLDc4LDkyLDBEKSwJVig2QSw1RixDQyw5QiksCVYoNTQsN0UsNDYsNjIpLAlcCisJVihGNiw4RCwxMyxDMiksCVYoOTAsRDgsQjgsRTgpLAlWKDJFLDM5LEY3LDVFKSwJVig4MixDMyxBRixGNSksCVwKKwlWKDlGLDVELDgwLEJFKSwJVig2OSxEMCw5Myw3QyksCVYoNkYsRDUsMkQsQTkpLAlWKENGLDI1LDEyLEIzKSwJXAorCVYoQzgsQUMsOTksM0IpLAlWKDEwLDE4LDdELEE3KSwJVihFOCw5Qyw2Myw2RSksCVYoREIsM0IsQkIsN0IpLAlcCisJVihDRCwyNiw3OCwwOSksCVYoNkUsNTksMTgsRjQpLAlWKEVDLDlBLEI3LDAxKSwJVig4Myw0Riw5QSxBOCksCVwKKwlWKEU2LDk1LDZFLDY1KSwJVihBQSxGRixFNiw3RSksCVYoMjEsQkMsQ0YsMDgpLAlWKEVGLDE1LEU4LEU2KSwJXAorCVYoQkEsRTcsOUIsRDkpLAlWKDRBLDZGLDM2LENFKSwJVihFQSw5RiwwOSxENCksCVYoMjksQjAsN0MsRDYpLAlcCisJVigzMSxBNCxCMixBRiksCVYoMkEsM0YsMjMsMzEpLAlWKEM2LEE1LDk0LDMwKSwJVigzNSxBMiw2NixDMCksCVwKKwlWKDc0LDRFLEJDLDM3KSwJVihGQyw4MixDQSxBNiksCVYoRTAsOTAsRDAsQjApLAlWKDMzLEE3LEQ4LDE1KSwJXAorCVYoRjEsMDQsOTgsNEEpLAlWKDQxLEVDLERBLEY3KSwJVig3RixDRCw1MCwwRSksCVYoMTcsOTEsRjYsMkYpLAlcCisJVig3Niw0RCxENiw4RCksCVYoNDMsRUYsQjAsNEQpLAlWKENDLEFBLDRELDU0KSwJVihFNCw5NiwwNCxERiksCVwKKwlWKDlFLEQxLEI1LEUzKSwJVig0Qyw2QSw4OCwxQiksCVYoQzEsMkMsMUYsQjgpLAlWKDQ2LDY1LDUxLDdGKSwJXAorCVYoOUQsNUUsRUEsMDQpLAlWKDAxLDhDLDM1LDVEKSwJVihGQSw4Nyw3NCw3MyksCVYoRkIsMEIsNDEsMkUpLAlcCisJVihCMyw2NywxRCw1QSksCVYoOTIsREIsRDIsNTIpLAlWKEU5LDEwLDU2LDMzKSwJVig2RCxENiw0NywxMyksCVwKKwlWKDlBLEQ3LDYxLDhDKSwJVigzNyxBMSwwQyw3QSksCVYoNTksRjgsMTQsOEUpLAlWKEVCLDEzLDNDLDg5KSwJXAorCVYoQ0UsQTksMjcsRUUpLAlWKEI3LDYxLEM5LDM1KSwJVihFMSwxQyxFNSxFRCksCVYoN0EsNDcsQjEsM0MpLAlcCisJVig5QyxEMixERiw1OSksCVYoNTUsRjIsNzMsM0YpLAlWKDE4LDE0LENFLDc5KSwJVig3MyxDNywzNyxCRiksCVwKKwlWKDUzLEY3LENELEVBKSwJVig1RixGRCxBQSw1QiksCVYoREYsM0QsNkYsMTQpLAlWKDc4LDQ0LERCLDg2KSwJXAorCVYoQ0EsQUYsRjMsODEpLAlWKEI5LDY4LEM0LDNFKSwJVigzOCwyNCwzNCwyQyksCVYoQzIsQTMsNDAsNUYpLAlcCisJVigxNiwxRCxDMyw3MiksCVYoQkMsRTIsMjUsMEMpLAlWKDI4LDNDLDQ5LDhCKSwJVihGRiwwRCw5NSw0MSksCVwKKwlWKDM5LEE4LDAxLDcxKSwJVigwOCwwQyxCMyxERSksCVYoRDgsQjQsRTQsOUMpLAlWKDY0LDU2LEMxLDkwKSwJXAorCVYoN0IsQ0IsODQsNjEpLAlWKEQ1LDMyLEI2LDcwKSwJVig0OCw2Qyw1Qyw3NCksCVYoRDAsQjgsNTcsNDIpCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYSMjYiMjYyMjZAorc3RhdGljIHVpbnQzMiBSVDBbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjZCMjYSMjYiMjYworc3RhdGljIHVpbnQzMiBSVDFbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYgorc3RhdGljIHVpbnQzMiBSVDJbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYiMjYyMjZCMjYQorc3RhdGljIHVpbnQzMiBSVDNbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyN1bmRlZiBSVAorCisvKiByb3VuZCBjb25zdGFudHMgKi8KKworc3RhdGljIHVpbnQzMiBSQ09OWzEwXSA9Cit7CisJMHgwMTAwMDAwMCwJMHgwMjAwMDAwMCwJMHgwNDAwMDAwMCwJMHgwODAwMDAwMCwKKwkweDEwMDAwMDAwLAkweDIwMDAwMDAwLAkweDQwMDAwMDAwLAkweDgwMDAwMDAwLAorCTB4MUIwMDAwMDAsCTB4MzYwMDAwMDAKK307CisKKy8qIGtleSBzY2hlZHVsZQl0YWJsZXMgKi8KKworc3RhdGljIGludCBLVF9pbml0ID0gMTsKKworc3RhdGljIHVpbnQzMiBLVDBbMjU2XTsKK3N0YXRpYyB1aW50MzIgS1QxWzI1Nl07CitzdGF0aWMgdWludDMyIEtUMlsyNTZdOworc3RhdGljIHVpbnQzMiBLVDNbMjU2XTsKKworLyogcGxhdGZvcm0taW5kZXBlbmRhbnQJMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uCW1hY3JvcyAqLworCisjZGVmaW5lCUdFVF9VSU5UMzIobixiLGkpCQkJCQkJXAorewkJCQkJCQkJCQkJCVwKKwkobikJPSAoCSh1aW50MzIpIChiKVsoaSkJXSA8PCAyNAkpCQlcCisJCXwgKAkodWludDMyKSAoYilbKGkpICsgMV0gPDwgMTYJKQkJXAorCQl8ICgJKHVpbnQzMikgKGIpWyhpKSArIDJdIDw8ICA4CSkJCVwKKwkJfCAoCSh1aW50MzIpIChiKVsoaSkgKyAzXQkJKTsJCVwKK30KKworI2RlZmluZQlQVVRfVUlOVDMyKG4sYixpKQkJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJKGIpWyhpKQkgICBdID0gKHVpbnQ4KSAoIChuKSA+PgkyNCApOwkJXAorCShiKVsoaSkJKyAxXSA9ICh1aW50OCkgKCAobikgPj4JMTYgKTsJCVwKKwkoYilbKGkpCSsgMl0gPSAodWludDgpICggKG4pID4+CSA4ICk7CQlcCisJKGIpWyhpKQkrIDNdID0gKHVpbnQ4KSAoIChuKQkgICApOwkJXAorfQorCisvKiBBRVMga2V5IHNjaGVkdWxpbmcgcm91dGluZSAqLworCitpbnQJcnRtcF9hZXNfc2V0X2tleSggYWVzX2NvbnRleHQgKmN0eCwgdWludDggKmtleSwgaW50IG5iaXRzICkKK3sKKwlpbnQJaTsKKwl1aW50MzIgKlJLLAkqU0s7CisKKwlzd2l0Y2goCW5iaXRzICkKKwl7CisJCWNhc2UgMTI4OiBjdHgtPm5yID0JMTA7CWJyZWFrOworCQljYXNlIDE5MjogY3R4LT5uciA9CTEyOwlicmVhazsKKwkJY2FzZSAyNTY6IGN0eC0+bnIgPQkxNDsJYnJlYWs7CisJCWRlZmF1bHQJOiByZXR1cm4oIDEJKTsKKwl9CisKKwlSSyA9IGN0eC0+ZXJrOworCisJZm9yKCBpID0gMDsJaSA8CShuYml0cyA+PiA1KTsgaSsrICkKKwl7CisJCUdFVF9VSU5UMzIoCVJLW2ldLCBrZXksCWkgKgk0ICk7CisJfQorCisJLyogc2V0dXAgZW5jcnlwdGlvbglyb3VuZCBrZXlzICovCisKKwlzd2l0Y2goCW5iaXRzICkKKwl7CisJY2FzZSAxMjg6CisKKwkJZm9yKCBpID0gMDsJaSA8CTEwOwlpKyssIFJLCSs9IDQgKQorCQl7CisJCQlSS1s0XSAgPSBSS1swXSBeIFJDT05baV0gXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1szXSA+PiAxNiApIF0gPDwJMjQgKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzNdID4+ICA4ICkgXSA8PAkxNiApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbM10JCSApIF0gPDwJIDggKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzNdID4+IDI0ICkgXQkgICApOworCisJCQlSS1s1XSAgPSBSS1sxXSBeIFJLWzRdOworCQkJUktbNl0gID0gUktbMl0gXiBSS1s1XTsKKwkJCVJLWzddICA9IFJLWzNdIF4gUktbNl07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDE5MjoKKworCQlmb3IoIGkgPSAwOwlpIDwJODsgaSsrLAlSSyArPSA2CSkKKwkJeworCQkJUktbNl0gID0gUktbMF0gXiBSQ09OW2ldIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbNV0gPj4gMTYgKSBdIDw8CTI0ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAgOCApIF0gPDwJMTYgKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzVdCQkgKSBdIDw8CSA4ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAyNCApIF0JICAgKTsKKworCQkJUktbN10gID0gUktbMV0gXiBSS1s2XTsKKwkJCVJLWzhdICA9IFJLWzJdIF4gUktbN107CisJCQlSS1s5XSAgPSBSS1szXSBeIFJLWzhdOworCQkJUktbMTBdID0gUktbNF0gXiBSS1s5XTsKKwkJCVJLWzExXSA9IFJLWzVdIF4gUktbMTBdOworCQl9CisJCWJyZWFrOworCisJY2FzZSAyNTY6CisKKwkJZm9yKCBpID0gMDsJaSA8CTc7IGkrKywJUksgKz0gOAkpCisJCXsKKwkJCVJLWzhdICA9IFJLWzBdIF4gUkNPTltpXSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+IDE2ICkgXSA8PAkyNCApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbN10gPj4gIDggKSBdIDw8CTE2ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s3XQkJICkgXSA8PAkgOCApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbN10gPj4gMjQgKSBdCSAgICk7CisKKwkJCVJLWzldICA9IFJLWzFdIF4gUktbOF07CisJCQlSS1sxMF0gPSBSS1syXSBeIFJLWzldOworCQkJUktbMTFdID0gUktbM10gXiBSS1sxMF07CisKKwkJCVJLWzEyXSA9IFJLWzRdIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+IDI0ICkJXSA8PCAyNAkpIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+IDE2ICkJXSA8PCAxNgkpIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+CTggKQldIDw8ICA4CSkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1sxMV0JCSAgKQldCQkpOworCisJCQlSS1sxM10gPSBSS1s1XSBeIFJLWzEyXTsKKwkJCVJLWzE0XSA9IFJLWzZdIF4gUktbMTNdOworCQkJUktbMTVdID0gUktbN10gXiBSS1sxNF07CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogc2V0dXAgZGVjcnlwdGlvbglyb3VuZCBrZXlzICovCisKKwlpZigJS1RfaW5pdAkpCisJeworCQlmb3IoIGkgPSAwOwlpIDwJMjU2OyBpKysgKQorCQl7CisJCQlLVDBbaV0gPSBSVDBbIEZTYltpXSBdOworCQkJS1QxW2ldID0gUlQxWyBGU2JbaV0gXTsKKwkJCUtUMltpXSA9IFJUMlsgRlNiW2ldIF07CisJCQlLVDNbaV0gPSBSVDNbIEZTYltpXSBdOworCQl9CisKKwkJS1RfaW5pdAk9IDA7CisJfQorCisJU0sgPSBjdHgtPmRyazsKKworCSpTSysrID0JKlJLKys7CisJKlNLKysgPQkqUksrKzsKKwkqU0srKyA9CSpSSysrOworCSpTSysrID0JKlJLKys7CisKKwlmb3IoIGkgPSAxOwlpIDwJY3R4LT5ucjsgaSsrICkKKwl7CisJCVJLIC09IDg7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisJfQorCisJUksgLT0gODsKKworCSpTSysrID0JKlJLKys7CisJKlNLKysgPQkqUksrKzsKKwkqU0srKyA9CSpSSysrOworCSpTSysrID0JKlJLKys7CisKKwlyZXR1cm4oCTAgKTsKK30KKworLyogQUVTIDEyOC1iaXQgYmxvY2sgZW5jcnlwdGlvbglyb3V0aW5lCSovCisKK3ZvaWQgcnRtcF9hZXNfZW5jcnlwdChhZXNfY29udGV4dCAqY3R4LCB1aW50OCBpbnB1dFsxNl0sCXVpbnQ4IG91dHB1dFsxNl0gKQoreworCXVpbnQzMiAqUkssCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMzsKKworCVJLID0gY3R4LT5lcms7CisJR0VUX1VJTlQzMigJWDAsCWlucHV0LAkwICk7IFgwCV49IFJLWzBdOworCUdFVF9VSU5UMzIoCVgxLAlpbnB1dCwJNCApOyBYMQlePSBSS1sxXTsKKwlHRVRfVUlOVDMyKAlYMiwJaW5wdXQsCTggKTsgWDIJXj0gUktbMl07CisJR0VUX1VJTlQzMigJWDMsCWlucHV0LCAxMiApOyBYMwlePSBSS1szXTsKKworI2RlZmluZQlBRVNfRlJPVU5EKFgwLFgxLFgyLFgzLFkwLFkxLFkyLFkzKQkJXAorewkJCQkJCQkJCQkJCVwKKwlSSyArPSA0OwkJCQkJCQkJCVwKKwkJCQkJCQkJCQkJCVwKKwlYMCA9IFJLWzBdIF4gRlQwWyAodWludDgpICgJWTAgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMSA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkyID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTMJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMSA9IFJLWzFdIF4gRlQwWyAodWludDgpICgJWTEgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMiA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkzID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTAJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMiA9IFJLWzJdIF4gRlQwWyAodWludDgpICgJWTIgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMyA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkwID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTEJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMyA9IFJLWzNdIF4gRlQwWyAodWludDgpICgJWTMgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMCA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkxID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTIJCSApIF07CVwKK30KKworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMSAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgMiAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMyAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgNCAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgNSAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgNiAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgNyAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgOCAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgOSAqLworCisJaWYoCWN0eC0+bnIJPiAxMCApCisJeworCQlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJLyogcm91bmQgMTAJKi8KKwkJQUVTX0ZST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CS8qIHJvdW5kIDExCSovCisJfQorCisJaWYoCWN0eC0+bnIJPiAxMiApCisJeworCQlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJLyogcm91bmQgMTIJKi8KKwkJQUVTX0ZST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CS8qIHJvdW5kIDEzCSovCisJfQorCisJLyogbGFzdAlyb3VuZCAqLworCisJUksgKz0gNDsKKworCVgwID0gUktbMF0gXiAoIEZTYlsJKHVpbnQ4KQkoIFkwID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMSA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTIgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkzCSAgICkgXQkJICk7CisKKwlYMSA9IFJLWzFdIF4gKCBGU2JbCSh1aW50OCkJKCBZMSA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTIgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMAkgICApIF0JCSApOworCisJWDIgPSBSS1syXSBeICggRlNiWwkodWludDgpCSggWTIgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMCA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTEJICAgKSBdCQkgKTsKKworCVgzID0gUktbM10gXiAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMCA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTEgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkyCSAgICkgXQkJICk7CisKKwlQVVRfVUlOVDMyKAlYMCwJb3V0cHV0LAkgMCApOworCVBVVF9VSU5UMzIoCVgxLAlvdXRwdXQsCSA0ICk7CisJUFVUX1VJTlQzMigJWDIsCW91dHB1dCwJIDggKTsKKwlQVVRfVUlOVDMyKAlYMywJb3V0cHV0LAkxMiApOworfQorCisvKiBBRVMgMTI4LWJpdCBibG9jayBkZWNyeXB0aW9uCXJvdXRpbmUJKi8KKwordm9pZCBydG1wX2Flc19kZWNyeXB0KCBhZXNfY29udGV4dCAqY3R4LAl1aW50OCBpbnB1dFsxNl0sIHVpbnQ4IG91dHB1dFsxNl0gKQoreworCXVpbnQzMiAqUkssCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMzsKKworCVJLID0gY3R4LT5kcms7CisKKwlHRVRfVUlOVDMyKAlYMCwJaW5wdXQsCTAgKTsgWDAJXj0gUktbMF07CisJR0VUX1VJTlQzMigJWDEsCWlucHV0LAk0ICk7IFgxCV49IFJLWzFdOworCUdFVF9VSU5UMzIoCVgyLAlpbnB1dCwJOCApOyBYMglePSBSS1syXTsKKwlHRVRfVUlOVDMyKAlYMywJaW5wdXQsIDEyICk7IFgzCV49IFJLWzNdOworCisjZGVmaW5lCUFFU19SUk9VTkQoWDAsWDEsWDIsWDMsWTAsWTEsWTIsWTMpCQlcCit7CQkJCQkJCQkJCQkJXAorCVJLICs9IDQ7CQkJCQkJCQkJXAorCQkJCQkJCQkJCQkJXAorCVgwID0gUktbMF0gXiBSVDBbICh1aW50OCkgKAlZMCA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkzID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTIgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMQkJICkgXTsJXAorCQkJCQkJCQkJCQkJXAorCVgxID0gUktbMV0gXiBSVDBbICh1aW50OCkgKAlZMSA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkwID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTMgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMgkJICkgXTsJXAorCQkJCQkJCQkJCQkJXAorCVgyID0gUktbMl0gXiBSVDBbICh1aW50OCkgKAlZMiA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkxID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTAgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMwkJICkgXTsJXAorCQkJCQkJCQkJCQkJXAorCVgzID0gUktbM10gXiBSVDBbICh1aW50OCkgKAlZMyA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkyID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTEgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMAkJICkgXTsJXAorfQorCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCAxICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCAyICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCAzICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA0ICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCA1ICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA2ICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCA3ICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA4ICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCA5ICovCisKKwlpZigJY3R4LT5ucgk+IDEwICkKKwl7CisJCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkvKiByb3VuZCAxMAkqLworCQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJLyogcm91bmQgMTEJKi8KKwl9CisKKwlpZigJY3R4LT5ucgk+IDEyICkKKwl7CisJCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkvKiByb3VuZCAxMgkqLworCQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJLyogcm91bmQgMTMJKi8KKwl9CisKKwkvKiBsYXN0CXJvdW5kICovCisKKwlSSyArPSA0OworCisJWDAgPSBSS1swXSBeICggUlNiWwkodWludDgpCSggWTAgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkzID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMiA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTEJICAgKSBdCQkgKTsKKworCVgxID0gUktbMV0gXiAoIFJTYlsJKHVpbnQ4KQkoIFkxID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMCA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTMgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkyCSAgICkgXQkJICk7CisKKwlYMiA9IFJLWzJdIF4gKCBSU2JbCSh1aW50OCkJKCBZMiA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTEgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkwID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMwkgICApIF0JCSApOworCisJWDMgPSBSS1szXSBeICggUlNiWwkodWludDgpCSggWTMgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkyID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMSA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTAJICAgKSBdCQkgKTsKKworCVBVVF9VSU5UMzIoCVgwLAlvdXRwdXQsCSAwICk7CisJUFVUX1VJTlQzMigJWDEsCW91dHB1dCwJIDQgKTsKKwlQVVRfVUlOVDMyKAlYMiwJb3V0cHV0LAkgOCApOworCVBVVF9VSU5UMzIoCVgzLAlvdXRwdXQsCTEyICk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTSEExIGZ1bmN0aW9uCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlITUFDX1NIQTEoCisJSU4JVUNIQVIJKnRleHQsCisJSU4JVUlOVAl0ZXh0X2xlbiwKKwlJTglVQ0hBUgkqa2V5LAorCUlOCVVJTlQJa2V5X2xlbiwKKwlJTglVQ0hBUgkqZGlnZXN0KQoreworCVNIQV9DVFgJY29udGV4dDsKKwlVQ0hBUglrX2lwYWRbNjVdOyAvKiBpbm5lciBwYWRkaW5nIC0ga2V5IFhPUmQgd2l0aCBpcGFkCSovCisJVUNIQVIJa19vcGFkWzY1XTsgLyogb3V0ZXIgcGFkZGluZyAtIGtleSBYT1JkIHdpdGggb3BhZAkqLworCUlOVAkJaTsKKworCS8vIGlmIGtleSBpcyBsb25nZXIJdGhhbiA2NAlieXRlcyByZXNldAlpdCB0byBrZXk9U0hBMShrZXkpCisJaWYgKGtleV9sZW4JPiA2NCkKKwl7CisJCVNIQV9DVFgJCSB0Y3R4OworCQlTSEFJbml0KCZ0Y3R4KTsKKwkJU0hBVXBkYXRlKCZ0Y3R4LCBrZXksIGtleV9sZW4pOworCQlTSEFGaW5hbCgmdGN0eCwJa2V5KTsKKwkJa2V5X2xlbgk9IDIwOworCX0KKwlOZGlzWmVyb01lbW9yeShrX2lwYWQsIHNpemVvZihrX2lwYWQpKTsKKwlOZGlzWmVyb01lbW9yeShrX29wYWQsIHNpemVvZihrX29wYWQpKTsKKwlOZGlzTW92ZU1lbW9yeShrX2lwYWQsIGtleSwJa2V5X2xlbik7CisJTmRpc01vdmVNZW1vcnkoa19vcGFkLCBrZXksCWtleV9sZW4pOworCisJLy8gWE9SIGtleSB3aXRoCWlwYWQgYW5kIG9wYWQgdmFsdWVzCisJZm9yCShpID0gMDsJaSA8CTY0OwlpKyspCisJeworCQlrX2lwYWRbaV0gXj0gMHgzNjsKKwkJa19vcGFkW2ldIF49IDB4NWM7CisJfQorCisJLy8gcGVyZm9ybSBpbm5lciBTSEExCisJU0hBSW5pdCgmY29udGV4dCk7IAkJCQkJCS8qIGluaXQgY29udGV4dCBmb3IgMXN0IHBhc3MgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCWtfaXBhZCwJNjQpOwkJLyoJc3RhcnQgd2l0aCBpbm5lciBwYWQgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCXRleHQsIHRleHRfbGVuKTsJLyoJdGhlbiB0ZXh0IG9mIGRhdGFncmFtICovCisJU0hBRmluYWwoJmNvbnRleHQsIGRpZ2VzdCk7CQkJCS8qIGZpbmlzaCB1cCAxc3QgcGFzcyAqLworCisJLy9wZXJmb3JtIG91dGVyCVNIQTEKKwlTSEFJbml0KCZjb250ZXh0KTsJCQkJCS8qIGluaXQgY29udGV4dCBmb3IgMm5kIHBhc3MgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCWtfb3BhZCwJNjQpOwkvKglzdGFydCB3aXRoIG91dGVyIHBhZCAqLworCVNIQVVwZGF0ZSgmY29udGV4dCwJZGlnZXN0LAkyMCk7CS8qCXRoZW4gcmVzdWx0cyBvZgkxc3QJaGFzaCAqLworCVNIQUZpbmFsKCZjb250ZXh0LCBkaWdlc3QpOwkJCS8qIGZpbmlzaCB1cCAybmQgcGFzcyAqLworCit9CisKKy8qCisqIEYoUCwgUywgYywgaSkgPSBVMSB4b3IgVTIgeG9yIC4uLiBVYworKiBVMSA9IFBSRihQLCBTIHx8IEludChpKSkKKyogVTIgPSBQUkYoUCwgVTEpCisqIFVjID0gUFJGKFAsIFVjLTEpCisqLworCit2b2lkIEYoY2hhciAqcGFzc3dvcmQsIHVuc2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCBpbnQgaXRlcmF0aW9ucywgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpCit7CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbMzZdLCBkaWdlc3QxW1NIQV9ESUdFU1RfTEVOXTsKKyAgICBpbnQgaSwgajsKKworICAgIC8qIFUxID0gUFJGKFAsIFMgfHwgaW50KGkpKSAqLworICAgIG1lbWNweShkaWdlc3QsIHNzaWQsIHNzaWRsZW5ndGgpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoXSA9ICh1bnNpZ25lZCBjaGFyKSgoY291bnQ+PjI0KSAmIDB4ZmYpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoKzFdID0gKHVuc2lnbmVkIGNoYXIpKChjb3VudD4+MTYpICYgMHhmZik7CisgICAgZGlnZXN0W3NzaWRsZW5ndGgrMl0gPSAodW5zaWduZWQgY2hhcikoKGNvdW50Pj44KSAmIDB4ZmYpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoKzNdID0gKHVuc2lnbmVkIGNoYXIpKGNvdW50ICYgMHhmZik7CisgICAgSE1BQ19TSEExKGRpZ2VzdCwgc3NpZGxlbmd0aCs0LCAodW5zaWduZWQgY2hhciopIHBhc3N3b3JkLCAoaW50KSBzdHJsZW4ocGFzc3dvcmQpLCBkaWdlc3QxKTsgLy8gZm9yIFdQQSB1cGRhdGUKKworICAgIC8qIG91dHB1dCA9IFUxICovCisgICAgbWVtY3B5KG91dHB1dCwgZGlnZXN0MSwgU0hBX0RJR0VTVF9MRU4pOworCisgICAgZm9yIChpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykKKyAgICB7CisgICAgICAgIC8qIFVuID0gUFJGKFAsIFVuLTEpICovCisgICAgICAgIEhNQUNfU0hBMShkaWdlc3QxLCBTSEFfRElHRVNUX0xFTiwgKHVuc2lnbmVkIGNoYXIqKSBwYXNzd29yZCwgKGludCkgc3RybGVuKHBhc3N3b3JkKSwgZGlnZXN0KTsgLy8gZm9yIFdQQSB1cGRhdGUKKyAgICAgICAgbWVtY3B5KGRpZ2VzdDEsIGRpZ2VzdCwgU0hBX0RJR0VTVF9MRU4pOworCisgICAgICAgIC8qIG91dHB1dCA9IG91dHB1dCB4b3IgVW4gKi8KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IFNIQV9ESUdFU1RfTEVOOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFtqXSBePSBkaWdlc3Rbal07CisgICAgICAgIH0KKyAgICB9Cit9CisvKgorKiBwYXNzd29yZCAtIGFzY2lpIHN0cmluZyB1cCB0byA2MyBjaGFyYWN0ZXJzIGluIGxlbmd0aAorKiBzc2lkIC0gb2N0ZXQgc3RyaW5nIHVwIHRvIDMyIG9jdGV0cworKiBzc2lkbGVuZ3RoIC0gbGVuZ3RoIG9mIHNzaWQgaW4gb2N0ZXRzCisqIG91dHB1dCBtdXN0IGJlIDQwIG9jdGV0cyBpbiBsZW5ndGggYW5kIG91dHB1dHMgMjU2IGJpdHMgb2Yga2V5CisqLworaW50IFBhc3N3b3JkSGFzaChjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgY2hhciAqc3NpZCwgaW50IHNzaWRsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCkKK3sKKyAgICBpZiAoKHN0cmxlbihwYXNzd29yZCkgPiA2MykgfHwgKHNzaWRsZW5ndGggPiAzMikpCisgICAgICAgIHJldHVybiAwOworCisgICAgRihwYXNzd29yZCwgc3NpZCwgc3NpZGxlbmd0aCwgNDA5NiwgMSwgb3V0cHV0KTsKKyAgICBGKHBhc3N3b3JkLCBzc2lkLCBzc2lkbGVuZ3RoLCA0MDk2LCAyLCAmb3V0cHV0W1NIQV9ESUdFU1RfTEVOXSk7CisgICAgcmV0dXJuIDE7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWxtZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWxtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmJmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9tbG1lLmMKQEAgLTAsMCArMSw5MTM2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCW1sbWUuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4gQ2hhbmcJMjAwNC0wOC0yNQkJTW9kaWZ5IGZyb20gUlQyNTAwIGNvZGUgYmFzZQorCUpvaG4gQ2hhbmcJMjAwNC0wOS0wNgkJbW9kaWZpZWQgZm9yIFJUMjYwMAorKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitVQ0hBUglDSVNDT19PVUlbXSA9IHsweDAwLCAweDQwLCAweDk2fTsKKworVUNIQVIJV1BBX09VSVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDF9OworVUNIQVIJUlNOX09VSVtdID0gezB4MDAsIDB4MGYsIDB4YWN9OworVUNIQVIJV0FQSV9PVUlbXSA9IHsweDAwLCAweDE0LCAweDcyfTsKK1VDSEFSICAgV01FX0lORk9fRUxFTVtdICA9IHsweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAwLCAweDAxfTsKK1VDSEFSICAgV01FX1BBUk1fRUxFTVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDEsIDB4MDF9OworVUNIQVIJQ2N4MlFvc0luZm9bXSA9IHsweDAwLCAweDQwLCAweDk2LCAweDA0fTsKK1VDSEFSICAgUkFMSU5LX09VSVtdICA9IHsweDAwLCAweDBjLCAweDQzfTsKK1VDSEFSICAgQlJPQURDT01fT1VJW10gID0gezB4MDAsIDB4OTAsIDB4NGN9OworVUNIQVIgICBXUFNfT1VJW10gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwNH07CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitVQ0hBUglQUkVfTl9IVF9PVUlbXQk9IHsweDAwLCAweDkwLCAweDRjfTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgxMSwgMHgwMCwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MDAsICAwLCA0MCwgMTAxLAorICAgIDB4MDEsIDB4MDAsICAxLCA0MCwgNTAsCisgICAgMHgwMiwgMHgwMCwgIDIsIDM1LCA0NSwKKyAgICAweDAzLCAweDAwLCAgMywgMjAsIDQ1LAorICAgIDB4MDQsIDB4MjEsICAwLCAzMCwgNTAsCisgICAgMHgwNSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDA2LCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDcsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwOCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA5LCAweDIxLCAgNSwgMTAsIDI1LAorICAgIDB4MGEsIDB4MjEsICA2LCAgOCwgMjUsCisgICAgMHgwYiwgMHgyMSwgIDcsICA4LCAyNSwKKyAgICAweDBjLCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDBkLCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MGUsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwZiwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDEwLCAweDIyLCAxNSwgIDgsIDI1LAorICAgIDB4MTEsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxMiwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDEzLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTQsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxNSwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDE2LCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTcsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxOCwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDE5LCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MWEsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxYiwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDFjLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MWQsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxZSwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDFmLCAweDAwLCAgMCwgIDAsICAwLAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwNCwgMHgwMywgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MDAsICAwLCA0MCwgMTAxLAorICAgIDB4MDEsIDB4MDAsICAxLCA0MCwgNTAsCisgICAgMHgwMiwgMHgwMCwgIDIsIDM1LCA0NSwKKyAgICAweDAzLCAweDAwLCAgMywgMjAsIDQ1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDAwLCAgMCwgNDAsIDEwMSwKKyAgICAweDAxLCAweDAwLCAgMSwgNDAsIDUwLAorICAgIDB4MDIsIDB4MDAsICAyLCAzNSwgNDUsCisgICAgMHgwMywgMHgwMCwgIDMsIDIwLCA0NSwKKyAgICAweDA0LCAweDEwLCAgMiwgMjAsIDM1LAorICAgIDB4MDUsIDB4MTAsICAzLCAxNiwgMzUsCisgICAgMHgwNiwgMHgxMCwgIDQsIDEwLCAyNSwKKyAgICAweDA3LCAweDEwLCAgNSwgMTYsIDI1LAorICAgIDB4MDgsIDB4MTAsICA2LCAxMCwgMjUsCisgICAgMHgwOSwgMHgxMCwgIDcsIDEwLCAxMywKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExR1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MDgsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDEwLCAgMCwgMjAsIDEwMSwKKyAgICAweDAxLCAweDEwLCAgMSwgMjAsIDM1LAorICAgIDB4MDIsIDB4MTAsICAyLCAyMCwgMzUsCisgICAgMHgwMywgMHgxMCwgIDMsIDE2LCAzNSwKKyAgICAweDA0LCAweDEwLCAgNCwgMTAsIDI1LAorICAgIDB4MDUsIDB4MTAsICA1LCAxNiwgMjUsCisgICAgMHgwNiwgMHgxMCwgIDYsIDEwLCAyNSwKKyAgICAweDA3LCAweDEwLCAgNywgMTAsIDEzLAorfTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOMVNbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDA5LCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIxLCAgNSwgMTAsIDI1LAorICAgIDB4MDYsIDB4MjEsICA2LCAgOCwgMTQsCisgICAgMHgwNywgMHgyMSwgIDcsICA4LCAxNCwKKyAgICAweDA4LCAweDIzLCAgNywgIDgsIDE0LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOMlNbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLCAgICAgIC8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOM1NbXSA9IHsKKy8vIEl0ZW0gTm8uCU1vZGUJQ3Vyci1NQ1MJVHJhaW5VcAlUcmFpbkRvd24JLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLCAgICAgIC8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFtdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGIsIDB4MDksICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsIDEwMSwKKyAgICAweDAxLCAweDIxLCAgMSwgMjAsIDUwLAorICAgIDB4MDIsIDB4MjEsICAyLCAyMCwgNTAsCisgICAgMHgwMywgMHgyMSwgIDMsIDE1LCA1MCwKKyAgICAweDA0LCAweDIxLCAgNCwgMTUsIDMwLAorICAgIDB4MDUsIDB4MjEsICA1LCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTIsICAxNSwgMzAsCisgICAgMHgwNywgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDksIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwYSwgMHgyMiwgMTUsICA4LCAyNSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExTjNTRm9yQUJhbmRbXSA9IHsgLy8gMyozCisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwYiwgMHgwOSwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwgMTAxLAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMSwgIDUsIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDA3LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOSwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDBhLCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04xU1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGQsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDAwLCAgMCwgNDAsIDEwMSwKKyAgICAweDAxLCAweDAwLCAgMSwgNDAsIDUwLAorICAgIDB4MDIsIDB4MDAsICAyLCAzNSwgNDUsCisgICAgMHgwMywgMHgwMCwgIDMsIDIwLCA0NSwKKyAgICAweDA0LCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwNSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDA2LCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDcsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwOCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA5LCAweDIxLCAgNSwgMTAsIDI1LAorICAgIDB4MGEsIDB4MjEsICA2LCAgOCwgMTQsCisgICAgMHgwYiwgMHgyMSwgIDcsICA4LCAxNCwKKwkweDBjLCAweDIzLCAgNywgIDgsIDE0LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIwLCAxMiwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjAsIDEzLCAgOCwgMjAsCisgICAgMHgwNywgMHgyMCwgMTQsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNSwgIDgsIDI1LAorICAgIDB4MDksIDB4MjIsIDE1LCAgOCwgMjUsCit9OworCitVQ0hBUiBSYXRlU3dpdGNoVGFibGUxMUJHTjNTW10gPSB7IC8vIDMqMworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAyMCwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCA1MCwKKyNpZiAxCisgICAgMHgwNSwgMHgyMCwgMjAsIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAyMSwgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDIyLCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMjMsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAyMywgIDgsIDI1LAorI2Vsc2UgLy8gZm9yIFJUMjg2MCAyKjMgdGVzdAorICAgIDB4MDUsIDB4MjAsIDEyLCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA3LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwOSwgMHgyMiwgMTUsICA4LCAyNSwKKyNlbmRpZgorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwYiwgMHgwOSwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwxMDEsCS8vNTAKKyAgICAweDAxLCAweDIxLCAgMSwgMjAsIDUwLAorICAgIDB4MDIsIDB4MjEsICAyLCAyMCwgNTAsCisgICAgMHgwMywgMHgyMSwgIDMsIDE1LCA1MCwKKyAgICAweDA0LCAweDIxLCAgNCwgMTUsIDMwLAorICAgIDB4MDUsIDB4MjEsICA1LCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTIsIDE1LCAzMCwKKyAgICAweDA3LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOSwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDBhLCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04zU0ZvckFCYW5kW10gPSB7IC8vIDMqMworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGMsIDB4MDksICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIxLCAgNSwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjEsIDEyLCAxNSwgMzAsCisgICAgMHgwNywgMHgyMCwgMjAsIDE1LCAzMCwKKyAgICAweDA4LCAweDIwLCAyMSwgIDgsIDIwLAorICAgIDB4MDksIDB4MjAsIDIyLCAgOCwgMjAsCisgICAgMHgwYSwgMHgyMCwgMjMsICA4LCAyNSwKKyAgICAweDBiLCAweDIyLCAyMywgIDgsIDI1LAorfTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworUFVDSEFSIFJlYXNvblN0cmluZ1tdID0geworCS8qIDAgICovCSAiUmVzZXJ2ZWQiLAorCS8qIDEgICovCSAiVW5zcGVjaWZpZWQgUmVhc29uIiwKKwkvKiAyICAqLwkgIlByZXZpb3VzIEF1dGggbm8gbG9uZ2VyIHZhbGlkIiwKKwkvKiAzICAqLwkgIlNUQSBpcyBsZWF2aW5nIC8gaGFzIGxlZnQiLAorCS8qIDQgICovCSAiRElTLUFTU09DIGR1ZSB0byBpbmFjdGl2aXR5IiwKKwkvKiA1ICAqLwkgIkFQIHVuYWJsZSB0byBoYW5sZSBhbGwgYXNzb2NpYXRpb25zIiwKKwkvKiA2ICAqLwkgImNsYXNzIDIgZXJyb3IiLAorCS8qIDcgICovCSAiY2xhc3MgMyBlcnJvciIsCisJLyogOCAgKi8JICJTVEEgaXMgbGVhdmluZyAvIGhhcyBsZWZ0IiwKKwkvKiA5ICAqLwkgInJlcXVpcmUgYXV0aCBiZWZvcmUgYXNzb2MvcmUtYXNzb2MiLAorCS8qIDEwICovCSAiUmVzZXJ2ZWQiLAorCS8qIDExICovCSAiUmVzZXJ2ZWQiLAorCS8qIDEyICovCSAiUmVzZXJ2ZWQiLAorCS8qIDEzICovCSAiaW52YWxpZCBJRSIsCisJLyogMTQgKi8JICJNSUMgZXJyb3IiLAorCS8qIDE1ICovCSAiNC13YXkgaGFuZHNoYWtlIHRpbWVvdXQiLAorCS8qIDE2ICovCSAiMi13YXkgKGdyb3VwIGtleSkgaGFuZHNoYWtlIHRpbWVvdXQiLAorCS8qIDE3ICovCSAiNC13YXkgaGFuZHNoYWtlIElFIGRpZmYgYW1vbmcgQXNzb3NSZXEvUnNwL0JlYWNvbiIsCisJLyogMTggKi8KK307CisKK2V4dGVybiBVQ0hBUgkgT2ZkbVJhdGVUb1J4d2lNQ1NbXTsKKy8vIHNpbmNlIFJUNjEgaGFzIGJldHRlciBSWCBzZW5zaWJpbGl0eSwgd2UgaGF2ZSB0byBsaW1pdCBUWCBBQ0sgcmF0ZSBub3QgdG8gZXhjZWVkIG91ciBub3JtYWwgZGF0YSBUWCByYXRlLgorLy8gb3RoZXJ3aXNlIHRoZSBXTEFOIHBlZXIgbWF5IG5vdCBiZSBhYmxlIHRvIHJlY2VpdmUgdGhlIEFDSyB0aHVzIGRvd25ncmFkZSBpdHMgZGF0YSBUWCByYXRlCitVTE9ORyBCYXNpY1JhdGVNYXNrWzEyXQkJCQk9IHsweGZmZmZmMDAxIC8qIDEtTWJwcyAqLywgMHhmZmZmZjAwMyAvKiAyIE1icHMgKi8sIDB4ZmZmZmYwMDcgLyogNS41ICovLCAweGZmZmZmMDBmIC8qIDExICovLAorCQkJCQkJCQkJICAweGZmZmZmMDFmIC8qIDYgKi8JICwgMHhmZmZmZjAzZiAvKiA5ICovCSAgLCAweGZmZmZmMDdmIC8qIDEyICovICwgMHhmZmZmZjBmZiAvKiAxOCAqLywKKwkJCQkJCQkJCSAgMHhmZmZmZjFmZiAvKiAyNCAqLwkgLCAweGZmZmZmM2ZmIC8qIDM2ICovCSAgLCAweGZmZmZmN2ZmIC8qIDQ4ICovICwgMHhmZmZmZmZmZiAvKiA1NCAqL307CisKK1VDSEFSIE1VTFRJQ0FTVF9BRERSW01BQ19BRERSX0xFTl0gPSB7MHgxLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CitVQ0hBUiBCUk9BRENBU1RfQUREUltNQUNfQUREUl9MRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworVUNIQVIgWkVST19NQUNfQUREUltNQUNfQUREUl9MRU5dICA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKworLy8gZS5nLiBSc3NpU2FmZUxldmVsRm9yVHhSYXRlW1JBVEVfMzZdIiBtZWFucyBpZiB0aGUgY3VycmVudCBSU1NJIGlzIGdyZWF0ZXIgdGhhbgorLy8JCXRoaXMgdmFsdWUsIHRoZW4gaXQncyBxdWFyYW50ZWVkIGNhcGFibGUgb2Ygb3BlcmF0aW5nIGluIDM2IG1icHMgVFggcmF0ZSBpbgorLy8JCWNsZWFuIGVudmlyb25tZW50LgorLy8JCQkJCQkJCSAgVHhSYXRlOiAxICAgMiAgIDUuNQkxMQkgNgkgIDkgICAgMTIJMTgJIDI0ICAgMzYgICA0OAk1NAkgNzIgIDEwMAorQ0hBUiBSc3NpU2FmZUxldmVsRm9yVHhSYXRlW10gPXsgIC05MiwgLTkxLCAtOTAsIC04NywgLTg4LCAtODYsIC04NSwgLTgzLCAtODEsIC03OCwgLTcyLCAtNzEsIC00MCwgLTQwIH07CisKK1VDSEFSICBSYXRlSWRUb01icHNbXQkgPSB7IDEsIDIsIDUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0LCA3MiwgMTAwfTsKK1VTSE9SVCBSYXRlSWRUbzUwMEticHNbXSA9IHsgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4LCAxNDQsIDIwMH07CisKK1VDSEFSICBTc2lkSWUJID0gSUVfU1NJRDsKK1VDSEFSICBTdXBSYXRlSWUgPSBJRV9TVVBQX1JBVEVTOworVUNIQVIgIEV4dFJhdGVJZSA9IElFX0VYVF9TVVBQX1JBVEVTOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVUNIQVIgIEh0Q2FwSWUgPSBJRV9IVF9DQVA7CitVQ0hBUiAgQWRkSHRJbmZvSWUgPSBJRV9BRERfSFQ7CitVQ0hBUiAgTmV3RXh0Q2hhbkllID0gSUVfU0VDT05EQVJZX0NIX09GRlNFVDsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitVQ0hBUiAgRXh0SHRDYXBJZSA9IElFX0VYVF9DQVBBQklMSVRZOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KK1VDSEFSICBFcnBJZQkgPSBJRV9FUlA7CitVQ0hBUiAgRHNJZSAJID0gSUVfRFNfUEFSTTsKK1VDSEFSICBUaW1JZQkgPSBJRV9USU07CitVQ0hBUiAgV3BhSWUJID0gSUVfV1BBOworVUNIQVIgIFdwYTJJZQkgPSBJRV9XUEEyOworVUNIQVIgIElic3NJZQkgPSBJRV9JQlNTX1BBUk07CitVQ0hBUiAgQ2N4MkllCSA9IElFX0NDWF9WMjsKK1VDSEFSICBXYXBpSWUJID0gSUVfV0FQSTsKKworZXh0ZXJuIFVDSEFSCVdQQV9PVUlbXTsKKworVUNIQVIJU0VTX09VSVtdID0gezB4MDAsIDB4OTAsIDB4NGN9OworCitVQ0hBUglaZXJvU3NpZFszMl0gPSB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsKKworLy8gUmVzZXQgdGhlIFJGSUMgc2V0dGluZyB0byBuZXcgc2VyaWVzCitSVE1QX1JGX1JFR1MgUkYyODUwUmVnVGFibGVbXSA9IHsKKy8vCQljaAkgUjEgCQkgUjIgCQkgUjMoVFgwfjQ9MCkgUjQKKwkJezEsICAweDk4NDAyZWNjLCAweDk4NGMwNzg2LCAweDk4MTZiNDU1LCAweDk4MDA1MTBifSwKKwkJezIsICAweDk4NDAyZWNjLCAweDk4NGMwNzg2LCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezMsICAweDk4NDAyZWNjLCAweDk4NGMwNzhhLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezQsICAweDk4NDAyZWNjLCAweDk4NGMwNzhhLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezUsICAweDk4NDAyZWNjLCAweDk4NGMwNzhlLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezYsICAweDk4NDAyZWNjLCAweDk4NGMwNzhlLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezcsICAweDk4NDAyZWNjLCAweDk4NGMwNzkyLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezgsICAweDk4NDAyZWNjLCAweDk4NGMwNzkyLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezksICAweDk4NDAyZWNjLCAweDk4NGMwNzk2LCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezEwLCAweDk4NDAyZWNjLCAweDk4NGMwNzk2LCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezExLCAweDk4NDAyZWNjLCAweDk4NGMwNzlhLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezEyLCAweDk4NDAyZWNjLCAweDk4NGMwNzlhLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezEzLCAweDk4NDAyZWNjLCAweDk4NGMwNzllLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezE0LCAweDk4NDAyZWNjLCAweDk4NGMwN2EyLCAweDk4MTY4YTU1LCAweDk4MDA1MTkzfSwKKworCQkvLyA4MDIuMTEgVU5JIC8gSHlwZXJMYW4gMgorCQl7MzYsIDB4OTg0MDJlY2MsIDB4OTg0YzA5OWEsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LAorCQl7MzgsIDB4OTg0MDJlY2MsIDB4OTg0YzA5OWUsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9LAorCQl7NDAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODIsIDB4OTgxNThhNTUsIDB4OTgwZWQxODN9LAorCQl7NDQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODIsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LAorCQl7NDYsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODYsIDB4OTgxNThhNTUsIDB4OTgwZWQxOGJ9LAorCQl7NDgsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODYsIDB4OTgxNThhNTUsIDB4OTgwZWQxOWJ9LAorCQl7NTIsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGEsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9LAorCQl7NTQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGEsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LAorCQl7NTYsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGUsIDB4OTgxNThhNTUsIDB4OTgwZWQxOGJ9LAorCQl7NjAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxODN9LAorCQl7NjIsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9LAorCQl7NjQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LCAvLyBQbHVnZmVzdCM0LCBEYXk0LCBjaGFuZ2UgUkZSMyBsZWZ0NHRoIDktPjUuCisKKwkJLy8gODAyLjExIEh5cGVyTGFuIDIKKwkJezEwMCwgMHg5ODQwMmVjOCwgMHg5ODRjMDZiMiwgMHg5ODE3OGE1NSwgMHg5ODBlZDc4M30sCisKKwkJLy8gMjAwOC4wNC4zMCBtb2RpZmllZAorCQkvLyBUaGUgc3lzdGVtIHRlYW0gaGFzIEFOIHRvIGltcHJvdmUgdGhlIEVWTSB2YWx1ZQorCQkvLyBmb3IgY2hhbm5lbCAxMDIgdG8gMTA4IGZvciB0aGUgUlQyODUwL1JUMjc1MCBkdWFsIGJhbmQgc29sdXRpb24uCisJCXsxMDIsIDB4OTg0MDJlYzgsIDB4OTg1YzA2YjIsIDB4OTg1NzhhNTUsIDB4OTgwZWQ3OTN9LAorCQl7MTA0LCAweDk4NDAyZWM4LCAweDk4NWMwNmIyLCAweDk4NTc4YTU1LCAweDk4MGVkMWEzfSwKKwkJezEwOCwgMHg5ODQwMmVjYywgMHg5ODVjMGEzMiwgMHg5ODU3OGE1NSwgMHg5ODBlZDE5M30sCisKKwkJezExMCwgMHg5ODQwMmVjYywgMHg5ODRjMGEzNiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30sCisJCXsxMTIsIDB4OTg0MDJlY2MsIDB4OTg0YzBhMzYsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOWJ9LAorCQl7MTE2LCAweDk4NDAyZWNjLCAweDk4NGMwYTNhLCAweDk4MTc4YTU1LCAweDk4MGVkMWEzfSwKKwkJezExOCwgMHg5ODQwMmVjYywgMHg5ODRjMGEzZSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5M30sCisJCXsxMjAsIDB4OTg0MDJlYzQsIDB4OTg0YzAzODIsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODN9LAorCQl7MTI0LCAweDk4NDAyZWM0LCAweDk4NGMwMzgyLCAweDk4MTc4YTU1LCAweDk4MGVkMTkzfSwKKwkJezEyNiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE1Yn0sIC8vIDB4OTgwZWQxYmItPjB4OTgwZWQxNWIgcmVxdWlyZWQgYnkgUm9yeSAyMDA3MDkyNworCQl7MTI4LCAweDk4NDAyZWM0LCAweDk4NGMwMzgyLCAweDk4MTc4YTU1LCAweDk4MGVkMWEzfSwKKwkJezEzMiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4NiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4Yn0sCisJCXsxMzQsIDB4OTg0MDJlYzQsIDB4OTg0YzAzODYsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOTN9LAorCQl7MTM2LCAweDk4NDAyZWM0LCAweDk4NGMwMzg2LCAweDk4MTc4YTU1LCAweDk4MGVkMTlifSwKKwkJezE0MCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4YSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30sCisKKwkJLy8gODAyLjExIFVOSUkKKwkJezE0OSwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4YSwgMHg5ODE3OGE1NSwgMHg5ODBlZDFhN30sCisJCXsxNTEsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODd9LAorCQl7MTUzLCAweDk4NDAyZWM0LCAweDk4NGMwMzhlLCAweDk4MTc4YTU1LCAweDk4MGVkMThmfSwKKwkJezE1NywgMHg5ODQwMmVjNCwgMHg5ODRjMDM4ZSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5Zn0sCisJCXsxNTksIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxYTd9LAorCQl7MTYxLCAweDk4NDAyZWM0LCAweDk4NGMwMzkyLCAweDk4MTc4YTU1LCAweDk4MGVkMTg3fSwKKwkJezE2NSwgMHg5ODQwMmVjNCwgMHg5ODRjMDM5MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5N30sCisKKwkJLy8gSmFwYW4KKwkJezE4NCwgMHg5NTAwMmNjYywgMHg5NTAwNDkxZSwgMHg5NTA5YmU1NSwgMHg5NTBjMGEwYn0sCisJCXsxODgsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5MjIsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMTN9LAorCQl7MTkyLCAweDk1MDAyY2NjLCAweDk1MDA0OTI2LCAweDk1MDliZTU1LCAweDk1MGMwYTFifSwKKwkJezE5NiwgMHg5NTAwMmNjYywgMHg5NTAwNDkyYSwgMHg5NTA5YmU1NSwgMHg5NTBjMGEyM30sCisJCXsyMDgsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5M2EsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMTN9LAorCQl7MjEyLCAweDk1MDAyY2NjLCAweDk1MDA0OTNlLCAweDk1MDliZTU1LCAweDk1MGMwYTFifSwKKwkJezIxNiwgMHg5NTAwMmNjYywgMHg5NTAwNDk4MiwgMHg5NTA5YmU1NSwgMHg5NTBjMGEyM30sCisKKwkJLy8gc3RpbGwgbGFjayBvZiBNTUFDKEphcGFuKSBjaCAzNCwzOCw0Miw0NgorfTsKK1VDSEFSCU5VTV9PRl8yODUwX0NITkwgPSAoc2l6ZW9mKFJGMjg1MFJlZ1RhYmxlKSAvIHNpemVvZihSVE1QX1JGX1JFR1MpKTsKKworRlJFUVVFTkNZX0lURU0gRnJlcUl0ZW1zMzAyMFtdID0KK3sKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy8gSVNNIDogMi40IHRvIDIuNDgzIEdIeiAgICAgICAgICAgICAgICAgICAgICAgICAvLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvLyAxMWcKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy8tQ0gtLS1OLS0tLS0tLVItLS1LLS0tLS0tLS0tLS0KKwl7MSwgICAgMjQxLCAgMiwgIDJ9LAorCXsyLCAgICAyNDEsCSAyLCAgN30sCisJezMsICAgIDI0MiwJIDIsICAyfSwKKwl7NCwgICAgMjQyLAkgMiwgIDd9LAorCXs1LCAgICAyNDMsCSAyLCAgMn0sCisJezYsICAgIDI0MywJIDIsICA3fSwKKwl7NywgICAgMjQ0LAkgMiwgIDJ9LAorCXs4LCAgICAyNDQsCSAyLCAgN30sCisJezksICAgIDI0NSwJIDIsICAyfSwKKwl7MTAsICAgMjQ1LAkgMiwgIDd9LAorCXsxMSwgICAyNDYsCSAyLCAgMn0sCisJezEyLCAgIDI0NiwJIDIsICA3fSwKKwl7MTMsICAgMjQ3LAkgMiwgIDJ9LAorCXsxNCwgICAyNDgsCSAyLCAgNH0sCit9OworLy8yMDA4LzA3LzEwOktIIE1vZGlmaWVkIHRvIHNoYXJlIHRoaXMgdmFyaWFibGUKK1VDSEFSCU5VTV9PRl8zMDIwX0NITkw9KHNpemVvZihGcmVxSXRlbXMzMDIwKSAvIHNpemVvZihGUkVRVUVOQ1lfSVRFTSkpOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWluaXRpYWxpemUgdGhlIE1MTUUgdGFzayBhbmQgaXRzIGRhdGEgc3RydWN0dXJlIChxdWV1ZSwgc3BpbmxvY2ssCisJCXRpbWVyLCBzdGF0ZSBtYWNoaW5lcykuCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJUmV0dXJuOgorCQlhbHdheXMgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1MKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTWxtZUluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTkRJU19TVEFUVVMgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBNTE1FIEluaXRpYWxpemVcbiIpKTsKKworCWRvCisJeworCQlTdGF0dXMgPSBNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVldWUpOworCQlpZihTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCXBBZC0+TWxtZS5iUnVubmluZyA9IEZBTFNFOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisKKwkJCS8vIGluaXQgU1RBIHN0YXRlIG1hY2hpbmVzCisJCQlBc3NvY1N0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkFzc29jTWFjaGluZSwgcEFkLT5NbG1lLkFzc29jRnVuYyk7CisJCQlBdXRoU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQXV0aE1hY2hpbmUsIHBBZC0+TWxtZS5BdXRoRnVuYyk7CisJCQlBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUsIHBBZC0+TWxtZS5BdXRoUnNwRnVuYyk7CisJCQlTeW5jU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuU3luY01hY2hpbmUsIHBBZC0+TWxtZS5TeW5jRnVuYyk7CisJCQlXcGFQc2tTdGF0ZU1hY2hpbmVJbml0KHBBZCwgJnBBZC0+TWxtZS5XcGFQc2tNYWNoaW5lLCBwQWQtPk1sbWUuV3BhUHNrRnVuYyk7CisJCQlBaXJvbmV0U3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUsIHBBZC0+TWxtZS5BaXJvbmV0RnVuYyk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCURsc1N0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkRsc01hY2hpbmUsIHBBZC0+TWxtZS5EbHNGdW5jKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCisJCQkvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgc3dpdGNoL2Nhc2UgdG8gaW1wbGVtZW50IGl0LCB0aGUgaW5pdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYWJvdmUKKwkJCS8vIHN0YXRlIG1hY2hpbmUgaW5pdAorCQkJTWxtZUNudGxJbml0KHBBZCwgJnBBZC0+TWxtZS5DbnRsTWFjaGluZSwgTlVMTCk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKwkJQWN0aW9uU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQWN0TWFjaGluZSwgcEFkLT5NbG1lLkFjdEZ1bmMpOworCisJCS8vIEluaXQgbWxtZSBwZXJpb2RpYyB0aW1lcgorCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyksIHBBZCwgVFJVRSk7CisKKwkJLy8gU2V0IG1sbWUgcGVyaW9kaWMgdGltZXIKKwkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgTUxNRV9UQVNLX0VYRUNfSU5UVik7CisKKwkJLy8gc29mdHdhcmUtYmFzZWQgUlggQW50ZW5uYSBkaXZlcnNpdHkKKwkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUnhBbnRFdmFsVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihBc2ljUnhBbnRFdmFsVGltZW91dCksIHBBZCwgRkFMU0UpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCX0gd2hpbGUgKEZBTFNFKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBNTE1FIEluaXRpYWxpemVcbiIpKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJbWFpbiBsb29wIG9mIHRoZSBNTE1FCisJUHJlOgorCQlNbG1lIGhhcyB0byBiZSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGFyZSBzb21ldGhpbmcgaW5zaWRlIHRoZSBxdWV1ZQorCU5vdGU6CisJCVRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIE1QU2V0SW5mb3JtYXRpb24gYW5kIE1QUmVjZWl2ZTsKKwkJVGhpcyB0YXNrIGd1YXJhbnRlZSBvbmx5IG9uZSBNbG1lSGFuZGxlciB3aWxsIHJ1bi4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lSGFuZGxlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlNTE1FX1FVRVVFX0VMRU0gCSAgICpFbGVtID0gTlVMTDsKKworCS8vIE9ubHkgYWNjZXB0IE1MTUUgYW5kIEZyYW1lIGZyb20gcGVlciBzaWRlLCBubyBvdGhlciAoY29udHJvbC9kYXRhKSBmcmFtZSBzaG91bGQKKwkvLyBnZXQgaW50byB0aGlzIHN0YXRlIG1hY2hpbmUKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisJaWYocEFkLT5NbG1lLmJSdW5uaW5nKQorCXsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJeworCQlwQWQtPk1sbWUuYlJ1bm5pbmcgPSBUUlVFOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOworCisJd2hpbGUgKCFNbG1lUXVldWVFbXB0eSgmcEFkLT5NbG1lLlF1ZXVlKSkKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUxNRV9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSB8fAorCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEZXZpY2UgSGFsdGVkIG9yIFJlbW92ZWQgb3IgTWxtZVJlc3QsIGV4aXQgTWxtZUhhbmRsZXIhIChxdWV1ZSBudW0gPSAlbGQpXG4iLCBwQWQtPk1sbWUuUXVldWUuTnVtKSk7CisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgUkFMSU5LX0FURQorCQlpZihBVEVfT04ocEFkKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBub3cgaW4gTWxtZUhhbmRsZXJcbiIpKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJCS8vRnJvbSBtZXNzYWdlIHR5cGUsIGRldGVybWluZSB3aGljaCBzdGF0ZSBtYWNoaW5lIEkgc2hvdWxkIGRyaXZlCisJCWlmIChNbG1lRGVxdWV1ZSgmcEFkLT5NbG1lLlF1ZXVlLCAmRWxlbSkpCisJCXsKKyNpZmRlZiBSVDI4NzAKKwkJCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9SRVNFVF9DT05GKQorCQkJeworCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIhISEgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworCQkJCU1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKHBBZCk7CisJCQkJRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKKwkJCQlFbGVtLT5Nc2dMZW4gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisJCQkvLyBpZiBkZXF1ZXVlIHN1Y2Nlc3MKKwkJCXN3aXRjaCAoRWxlbS0+TWFjaGluZSkKKwkJCXsKKwkJCQkvLyBTVEEgc3RhdGUgbWFjaGluZXMKKyNpZmRlZglDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQljYXNlIEFTU09DX1NUQVRFX01BQ0hJTkU6CisJCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLkFzc29jTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQVVUSF9TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5BdXRoTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQVVUSF9SU1BfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNZTkNfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuU3luY01hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FOgorCQkJCQlNbG1lQ250bE1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5DbnRsTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgV1BBX1BTS19TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5XcGFQc2tNYWNoaW5lLCBFbGVtKTsKKwkJCQkJYnJlYWs7CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJY2FzZSBMRUFQX1NUQVRFX01BQ0hJTkU6CisJCQkJCUxlYXBNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuTGVhcE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWNhc2UgQUlST05FVF9TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQkJY2FzZSBETFNfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuRGxzTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJY2FzZSBBQ1RJT05fU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQWN0TWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCisKKworCisJCQkJZGVmYXVsdDoKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRVJST1I6IElsbGVnYWwgbWFjaGluZSAlbGQgaW4gTWxtZUhhbmRsZXIoKVxuIiwgRWxlbS0+TWFjaGluZSkpOworCQkJCQlicmVhazsKKwkJCX0gLy8gZW5kIG9mIHN3aXRjaAorCisJCQkvLyBmcmVlIE1MTUUgZWxlbWVudAorCQkJRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKKwkJCUVsZW0tPk1zZ0xlbiA9IDA7CisKKwkJfQorCQllbHNlIHsKKwkJCURCR1BSSU5UX0VSUigoIk1sbWVIYW5kbGVyOiBNbG1lUXVldWUgZW1wdHlcbiIpKTsKKwkJfQorCX0KKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisJcEFkLT5NbG1lLmJSdW5uaW5nID0gRkFMU0U7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlEZXN0cnVjdG9yIG9mIE1MTUUgKERlc3Ryb3kgcXVldWUsIHN0YXRlIG1hY2hpbmUsIHNwaW4gbG9jayBhbmQgdGltZXIpCisJUGFyYW1ldGVyczoKKwkJQWRhcHRlciAtIE5JQyBBZGFwdGVyIHBvaW50ZXIKKwlQb3N0OgorCQlUaGUgTUxNRSB0YXNrIHdpbGwgbm8gbG9uZ2VyIHdvcmsgcHJvcGVybHkKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVIYWx0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJPT0xFQU4JCUNhbmNlbGxlZDsKKyNpZmRlZiBSVDMwNzAKKwlVSU5UMzIJCVR4UGluQ2ZnID0gMHgwMDA1MEYwRjsKKyNlbmRpZiAvLyBSVDMwNzAgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lSGFsdFxuIikpOworCisJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJeworCQkvLyBkaXNhYmxlIEJFQUNPTiBnZW5lcmF0aW9uIGFuZCBvdGhlciBCRUFDT04gcmVsYXRlZCBoYXJkd2FyZSB0aW1lcnMKKwkJQXNpY0Rpc2FibGVTeW5jKHBBZCk7CisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCVVDSEFSCQlpOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkvLyBDYW5jZWwgcGVuZGluZyB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwJCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwJJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwJCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwJCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsCQkmQ2FuY2VsbGVkKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwJCSZDYW5jZWxsZWQpOworCisKKworCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCXsKKwkJLy8gU2V0IExFRAorCQlSVE1QU2V0TEVEKHBBZCwgTEVEX0hBTFQpOworICAgICAgICBSVE1QU2V0U2lnbmFsTEVEKHBBZCwgLTEwMCk7CS8vIEZvcmNlIHNpZ25hbCBzdHJlbmd0aCBMZWQgdG8gYmUgdHVybmVkIG9mZiwgZmlybXdhcmUgaXMgbm90IGRvbmUgaXQuCisjaWZkZWYgUlQyODcwCisgICAgICAgIHsKKyAgICAgICAgICAgIExFRF9DRkdfU1RSVUMgTGVkQ2ZnOworICAgICAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBMRURfQ0ZHLCAmTGVkQ2ZnLndvcmQpOworICAgICAgICAgICAgTGVkQ2ZnLmZpZWxkLkxlZFBvbGFyID0gMDsKKyAgICAgICAgICAgIExlZENmZy5maWVsZC5STGVkTW9kZSA9IDA7CisgICAgICAgICAgICBMZWRDZmcuZmllbGQuR0xlZE1vZGUgPSAwOworICAgICAgICAgICAgTGVkQ2ZnLmZpZWxkLllMZWRNb2RlID0gMDsKKyAgICAgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIExFRF9DRkcsIExlZENmZy53b3JkKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIFJUMjg3MCAvLworI2lmZGVmIFJUMzA3MAorCQkvLworCQkvLyBUdXJuIG9mZiBMTkFfUEUKKwkJLy8KKwkJaWYgKElTX1JUMzA3MChwQWQpIHx8IElTX1JUMzA3MShwQWQpKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGMEYwOworCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCQl9CisjZW5kaWYgLy8gUlQzMDcwIC8vCisJfQorCisJUlRNUHVzZWNEZWxheSg1MDAwKTsgICAgLy8gIDUgbXNlYyB0byBndXJhbnRlZSBBbnQgRGl2ZXJzaXR5IHRpbWVyIGNhbmNlbGVkCisKKwlNbG1lUXVldWVEZXN0cm95KCZwQWQtPk1sbWUuUXVldWUpOworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gTWxtZUhhbHRcbiIpKTsKK30KKworVk9JRCBNbG1lUmVzZXRSYWxpbmtDb3VudGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKK3sKKwlwQWQtPlJhbGlua0NvdW50ZXJzLkxhc3RPbmVTZWNSeE9rRGF0YUNudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0RhdGFDbnQ7CisJLy8gY2xlYXIgYWxsIE9uZVNlY3h4eCBjb3VudGVycy4KKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0JlYWNvblNlbnRDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRmFsc2VDQ0FDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0NudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250ID0gMDsKKworCS8vIFRPRE86IGZvciBkZWJ1ZyBvbmx5LiB0byBiZSByZW1vdmVkCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX0JFXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX0JLXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX1ZJXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX1ZPXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX0JFXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX0JLXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX1ZJXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX1ZPXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeENvdW50ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4QWdncmVnYXRpb25Db3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQgPSAwOworCisJcmV0dXJuOworfQorCit1bnNpZ25lZCBsb25nIHJ4X0FNU0RVOwordW5zaWduZWQgbG9uZyByeF9Ub3RhbDsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgaXMgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHRvIC0KKwkJMS4gRGVjaWRlIGlmIGl0J3MgYSByaWdodCB0aW1lIHRvIHR1cm4gb24gUHdyTWdtdCBiaXQgb2YgYWxsCisJCSAgIG91dGdvaWluZyBmcmFtZXMKKwkJMi4gQ2FsY3VsYXRlIENoYW5uZWxRdWFsaXR5IGJhc2VkIG9uIHN0YXRpc3RpY3Mgb2YgdGhlIGxhc3QKKwkJICAgcGVyaW9kLCBzbyB0aGF0IFRYIHJhdGUgd29uJ3QgdG9nZ2xpbmcgdmVyeSBmcmVxdWVudGx5IGJldHdlZW4gYQorCQkgICBzdWNjZXNzZnVsIFRYIGFuZCBhIGZhaWxlZCBUWC4KKwkJMy4gSWYgdGhlIGNhbGN1bGF0ZWQgQ2hhbm5lbFF1YWxpdHkgaW5kaWNhdGVkIGN1cnJlbnQgY29ubmVjdGlvbiBub3QKKwkJICAgaGVhbHRoeSwgdGhlbiBhIFJPQU1pbmcgYXR0ZW1wdCBpcyB0cmllZCBoZXJlLgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisjZGVmaW5lIEFESE9DX0JFQUNPTl9MT1NUX1RJTUUJCSg4Kk9TX0haKSAgLy8gOCBzZWMKK1ZPSUQgTWxtZVBlcmlvZGljRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJVUxPTkcJCQlUeFRvdGFsQ250OworCVBSVE1QX0FEQVBURVIJcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkpKQorCQlyZXR1cm47CisKKwlSVDI4WFhfTUxNRV9QUkVfU0FOSVRZX0NIRUNLKHBBZCk7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJLyogRG8gbm90IHNob3cgUlNTSSB1bnRpbCAiTm9ybWFsIDEgc2Vjb25kIE1sbWUgUGVyaW9kaWNFeGVjIi4gKi8KKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAhPSAoTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgLSAxKSkKKwl7CisJCQlwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCArKzsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gRG8gbm90aGluZyBpZiBtb25pdG9yIG1vZGUgaXMgb24KKwkJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJCXJldHVybjsKKworCQlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJiAweDEpCisJCXsKKwkJCS8vIFRoaXMgaXMgdGhlIGZpeCBmb3Igd2lmaSAxMW4gZXh0ZW5zaW9uIGNoYW5uZWwgb3ZlcmxhcHBpbmcgdGVzdCBjYXNlLiAgZm9yIDI4NjBECisJCQlpZiAoKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID09IDB4MDEwMSkgJiYKKwkJCQkoU1RBX1RHTl9XSUZJX09OKHBBZCkpICYmCisJCQkJKHBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9PSBGQUxTRSkpCisKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYT1BfQ1RSTF9DRkcsIDB4MjRCZik7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9IFRSVUU7CisJCQkJfQorCQkJCWVsc2UgaWYgKChTVEFfVEdOX1dJRklfT04ocEFkKSkgJiYKKwkJCQkJCSgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA9PSAweDAxMDEpKQorCQkJCXsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhPUF9DVFJMX0NGRywgMHgyNDNmKTsKKwkJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iVG9nZ2xlID0gRkFMU0U7CisJCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEFkLT5iVXBkYXRlQmNuQ250RG9uZSA9IEZBTFNFOworCisvLwlSRUNCQVRpbWVyVGltZW91dChTeXN0ZW1TcGVjaWZpYzEsRnVuY3Rpb25Db250ZXh0LFN5c3RlbVNwZWNpZmljMixTeXN0ZW1TcGVjaWZpYzMpOworCXBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICsrOworCisjaWZkZWYgUlQyODcwCisJLy8gZXhlY3V0ZSBldmVyeSAxMDBtcywgdXBkYXRlIHRoZSBUeCBGSUZPIENudCBmb3IgdXBkYXRlIFR4IFJhdGUuCisJTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKHBBZCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJLy8gZXhlY3V0ZSBldmVyeSA1MDBtcworCWlmICgocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSA1ID09IDApICYmIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKHBBZCkvKihPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpKSovKQorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJLy8gcGVyZm9ybSBkeW5hbWljIHR4IHJhdGUgc3dpdGNoaW5nIGJhc2VkIG9uIHBhc3QgVFggaGlzdG9yeQorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQorCQkJCQkpCisJCQkJJiYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKSkKKwkJCQlNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZyhwQWQpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJLy8gTm9ybWFsIDEgc2Vjb25kIE1sbWUgUGVyaW9kaWNFeGVjLgorCWlmIChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCAlTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgPT0gMCkKKwl7CisgICAgICAgICAgICAgICAgcEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgKys7CisKKyNpZmRlZiBSQUxJTktfQVRFCisgICAgCWlmIChBVEVfT04ocEFkKSkKKyAgICAJeworCQkJLyogcmVxdWVzdCBmcm9tIEJhcm9uIDogbW92ZSB0aGlzIHJvdXRpbmUgZnJvbSBsYXRlciB0byBoZXJlICovCisJCQkvKiBmb3Igc2hvd2luZyBSeCBlcnJvciBjb3VudCBpbiBBVEUgUlhGUkFNRSAqLworICAgICAgICAgICAgTklDVXBkYXRlUmF3Q291bnRlcnMocEFkKTsKKwkJCWlmIChwQWQtPmF0ZS5iUnhGZXIgPT0gMSkKKwkJCXsKKwkJCQlwQWQtPmF0ZS5SeFRvdGFsQ250ICs9IHBBZC0+YXRlLlJ4Q250UGVyU2VjOworCQkJICAgIGF0ZV9wcmludChLRVJOX0VNRVJHICJNbG1lUGVyaW9kaWNFeGVjOiBSeCBwYWNrZXQgY250ID0gJWQvJWRcbiIsIHBBZC0+YXRlLlJ4Q250UGVyU2VjLCBwQWQtPmF0ZS5SeFRvdGFsQ250KTsKKwkJCQlwQWQtPmF0ZS5SeENudFBlclNlYyA9IDA7CisKKwkJCQlpZiAocEFkLT5hdGUuUnhBbnRlbm5hU2VsID09IDApCisJCQkJCWF0ZV9wcmludChLRVJOX0VNRVJHICJNbG1lUGVyaW9kaWNFeGVjOiBSeCBBdmdSc3NpMD0lZCwgQXZnUnNzaTE9JWQsIEF2Z1Jzc2kyPSVkXG5cbiIsCisJCQkJCQlwQWQtPmF0ZS5BdmdSc3NpMCwgcEFkLT5hdGUuQXZnUnNzaTEsIHBBZC0+YXRlLkF2Z1Jzc2kyKTsKKwkJCQllbHNlCisJCQkJCWF0ZV9wcmludChLRVJOX0VNRVJHICJNbG1lUGVyaW9kaWNFeGVjOiBSeCBBdmdSc3NpPSVkXG5cbiIsIHBBZC0+YXRlLkF2Z1Jzc2kwKTsKKwkJCX0KKwkJCU1sbWVSZXNldFJhbGlua0NvdW50ZXJzKHBBZCk7CisJCQlyZXR1cm47CisgICAgCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKworCQlpZiAocnhfVG90YWwpCisJCXsKKworCQkJLy8gcmVzZXQgY291bnRlcnMKKwkJCXJ4X0FNU0RVID0gMDsKKwkJCXJ4X1RvdGFsID0gMDsKKwkJfQorCisJCS8vT1JJQkFUaW1lclRpbWVvdXQocEFkKTsKKworCQkvLyBNZWRpYSBzdGF0dXMgY2hhbmdlZCwgcmVwb3J0IHRvIE5ESVMKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NRURJQV9TVEFURV9DSEFOR0UpKQorCQl7CisJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX01FRElBX1NUQVRFX0NIQU5HRSk7CisJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQkJeworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKwkJCX0KKwkJfQorCisJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+TWxtZS5Ob3czMik7CisKKwkJLy8gYWRkIHRoZSBtb3N0IHVwLXRvLWRhdGUgaC93IHJhdyBjb3VudGVycyBpbnRvIHNvZnR3YXJlIHZhcmlhYmxlLCBzbyB0aGF0CisJCS8vIHRoZSBkeW5hbWljIHR1bmluZyBtZWNoYW5pc20gYmVsb3cgYXJlIGJhc2VkIG9uIG1vc3QgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbgorCQlOSUNVcGRhdGVSYXdDb3VudGVycyhwQWQpOworCisjaWZkZWYgUlQyODcwCisJCVJUMjg3MF9XYXRjaERvZyhwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAJCS8vIE5lZWQgc3RhdGlzdGljcyBhZnRlciByZWFkIGNvdW50ZXIuIFNvIHB1dCBhZnRlciBOSUNVcGRhdGVSYXdDb3VudGVycworCQlPUklCQVRpbWVyVGltZW91dChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCS8vIFRoZSB0aW1lIHBlcmlvZCBmb3IgY2hlY2tpbmcgYW50ZW5uYSBpcyBhY2NvcmRpbmcgdG8gdHJhZmZpYworCQl7CisJCQlpZiAocEFkLT5NbG1lLmJFbmFibGVBdXRvQW50ZW5uYUNoZWNrKQorCQkJeworCQkJCVR4VG90YWxDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKworCQkJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJCQkJCSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OworCisJCQkJCS8vIGR5bmFtaWMgYWRqdXN0IGFudGVubmEgZXZhbHVhdGlvbiBwZXJpb2QgYWNjb3JkaW5nIHRvIHRoZSB0cmFmZmljCisJCQkJaWYgKFR4VG90YWxDbnQgPiA1MCkKKwkJCQl7CisJCQkJCWlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDEwID09IDApCisJCQkJCXsKKwkJCQkJCUFzaWNFdmFsdWF0ZVJ4QW50KHBBZCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMyA9PSAwKQorCQkJCQl7CisJCQkJCQlBc2ljRXZhbHVhdGVSeEFudChwQWQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCVNUQU1sbWVQZXJpb2RpY0V4ZWMocEFkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlNbG1lUmVzZXRSYWxpbmtDb3VudGVycyhwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCXsKKwkJCQkvLyBXaGVuIEFkaG9jIGJlYWNvbiBpcyBlbmFibGVkIGFuZCBSVFMvQ1RTIGlzIGVuYWJsZWQsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgaGFyZHdhcmUgTUFDIEZTTSB3aWxsIHJ1biBpbnRvIGEgZGVhZGxvY2sKKwkJCQkvLyBhbmQgc2VuZGluZyBDVFMtdG8tc2VsZiBvdmVyIGFuZCBvdmVyLgorCQkJCS8vIFNvZnR3YXJlIFBhdGNoIFNvbHV0aW9uOgorCQkJCS8vIDEuIFBvbGxpbmcgZGVidWcgc3RhdGUgcmVnaXN0ZXIgMHgxMEY0IGV2ZXJ5IG9uZSBzZWNvbmQuCisJCQkJLy8gMi4gSWYgaW4gMHgxMEY0IHRoZSAoKGJpdDI5PT0xKSAmJiAoYml0Nz09MSkpIE9SICgoYml0Mjk9PTEpICYmIChiaXQ1PT0xKSksIGl0IG1lYW5zIHRoZSBkZWFkbG9jayBoYXMgb2NjdXJyZWQuCisJCQkJLy8gMy4gSWYgdGhlIGRlYWRsb2NrIG9jY3VycmVkLCByZXNldCBNQUMvQkJQIGJ5IHNldHRpbmcgMHgxMDA0IHRvIDB4MDAwMSBmb3IgYSB3aGlsZSB0aGVuIHNldHRpbmcgaXQgYmFjayB0byAweDAwMEMgYWdhaW4uCisKKwkJCQlVSU5UMzIJTWFjUmVnID0gMDsKKworCQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMEY0LCAmTWFjUmVnKTsKKwkJCQlpZiAoKChNYWNSZWcgJiAweDIwMDAwMDAwKSAmJiAoTWFjUmVnICYgMHg4MCkpIHx8ICgoTWFjUmVnICYgMHgyMDAwMDAwMCkgJiYgKE1hY1JlZyAmIDB4MjApKSkKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgxKTsKKwkJCQkJUlRNUHVzZWNEZWxheSgxKTsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweEMpOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sKCJXYXJuaW5nLCBNQUMgc3BlY2lmaWMgY29uZGl0aW9uIG9jY3VycyBcbiIpKTsKKwkJCQl9CisJCQl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJfQorCisKKwlwQWQtPmJVcGRhdGVCY25DbnREb25lID0gRkFMU0U7Cit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgU1RBTWxtZVBlcmlvZGljRXhlYygKKwlQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORwkJCSAgICBUeFRvdGFsQ250OworCWludCAJaTsKKworLy8KKy8vIFdlIHJldHVybiBoZXJlIGluIEFURSBtb2RlLCBiZWNhdXNlIHRoZSBzdGF0aXN0aWNzCisvLyB0aGF0IEFURSBuZWVkcyBhcmUgbm90IGNvbGxlY3RlZCB2aWEgdGhpcyByb3V0aW5lLgorLy8KKyNpZmRlZiBSQUxJTktfQVRFCisJLy8gSXQgaXMgc3VwcG9zZWQgdGhhdCB3ZSB3aWxsIG5ldmVyIHJlYWNoIGhlcmUgaW4gQVRFIG1vZGUuCisJQVNTRVJUKCEoQVRFX09OKHBBZCkpKTsKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICB7CisgICAgCS8vIFdQQSBNSUMgZXJyb3Igc2hvdWxkIGJsb2NrIGFzc29jaWF0aW9uIGF0dGVtcHQgZm9yIDYwIHNlY29uZHMKKyAgICAJaWYgKHBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jICYmIChwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lICsgKDYwICogT1NfSFopIDwgcEFkLT5NbG1lLk5vdzMyKSkKKyAgICAJCXBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChwQWQtPlByZU1lZGlhU3RhdGUgIT0gcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUpICYmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkpCisJeworCQlpZiAocEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCisJCXsKKwkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LVVBfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJfQorCQlwQWQtPlByZU1lZGlhU3RhdGUgPSBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZTsKKwl9CisKKworCisKKyAgIAlBc2ljU3RhQmJwVHVuaW5nKHBBZCk7CisKKwlUeFRvdGFsQ250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkJIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgKworCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKKworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJeworCQkvLyB1cGRhdGUgY2hhbm5lbCBxdWFsaXR5IGZvciBSb2FtaW5nIGFuZCBVSSBMaW5rUXVhbGl0eSBkaXNwbGF5CisJCU1sbWVDYWxjdWxhdGVDaGFubmVsUXVhbGl0eShwQWQsIHBBZC0+TWxtZS5Ob3czMik7CisJfQorCisJLy8gbXVzdCBiZSBBRlRFUiBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygpIGJlY2F1c2UgaXQgbmVlZHMgdG8ga25vdyBpZgorCS8vIFJhZGlvIGlzIGN1cnJlbnRseSBpbiBub2lzeSBlbnZpcm9ubWVudAorCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJQXNpY0FkanVzdFR4UG93ZXIocEFkKTsKKworCWlmIChJTkZSQV9PTihwQWQpKQorCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy8gQ2hlY2sgRExTIHRpbWUgb3V0LCB0aGVuIHRlYXIgZG93biB0aG9zZSBzZXNzaW9uCisJCVJUTVBDaGVja0RMU1RpbWVPdXQocEFkKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQkvLyBJcyBQU00gYml0IGNvbnNpc3RlbnQgd2l0aCB1c2VyIHBvd2VyIG1hbmFnZW1lbnQgcG9saWN5PworCQkvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgd2lsbCBzZXQgUFNNIGJpdCBPTi4KKwkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQlNbG1lQ2hlY2tQc21DaGFuZ2UocEFkLCBwQWQtPk1sbWUuTm93MzIpOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCA9IFR4VG90YWxDbnQ7CisKKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgMSpPU19IWiA8IHBBZC0+TWxtZS5Ob3czMikgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgJiYKKwkJCSgoVHhUb3RhbENudCArIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0NudCA8IDYwMCkpKQorCQl7CisJCQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgQldfMjApOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBObyBCRUFDT04uIHJlc3RvcmUgUjY2IHRvIHRoZSBsb3cgYm91bmQoJWQpIFxuIiwgKDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKSkpKTsKKwkJfQorCisgICAgICAgIC8vaWYgKChwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPT0gMCkgJiYKKyAgICAgICAgLy8gICAgKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgPT0gMCkpCisgICAgICAgIHsKKyAgICAJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpCisgICAgCQl7CisgICAgCQkgICAgLy8gV2hlbiBBUFNEIGlzIGVuYWJsZWQsIHRoZSBwZXJpb2QgY2hhbmdlcyBhcyAyMCBzZWMKKyAgICAJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMjApID09IDgpCisgICAgCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBUUlVFKTsKKyAgICAJCX0KKyAgICAJCWVsc2UKKyAgICAJCXsKKyAgICAJCSAgICAvLyBTZW5kIG91dCBhIE5VTEwgZnJhbWUgZXZlcnkgMTAgc2VjIHRvIGluZm9ybSBBUCB0aGF0IFNUQSBpcyBzdGlsbCBhbGl2ZSAoQXZvaWQgYmVpbmcgYWdlIG91dCkKKyAgICAJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMTApID09IDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpCisgICAgCQkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgfQorICAgIAkJfQorICAgICAgICB9CisKKwkJaWYgKENRSV9JU19ERUFEKHBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSkpCisJCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNTUNISyAtIE5vIEJFQUNPTi4gRGVhZCBDUUkuIEF1dG8gUmVjb3ZlcnkgYXR0ZW1wdCAjJWxkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50KSk7CisJCQlwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQUmVwb3J0RmxhZyA9IFRSVUU7CisJCQlwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQTGlua0Rvd25UaW1lID0gcEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZTsKKworCQkJLy8gTG9zdCBBUCwgc2VuZCBkaXNjb25uZWN0ICYgbGluayBkb3duIGV2ZW50CisJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisJCQl7CisgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgIC8vc2VuZCBkaXNhc3NvY2lhdGUgZXZlbnQgdG8gd3BhX3N1cHBsaWNhbnQKKyAgICAgICAgICAgICAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgICAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfRElTQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgICAgICAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJCQkvLyBSVE1QUGF0Y2hNYWNCYnBCdWcocEFkKTsKKwkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKKwkJfQorCQllbHNlIGlmIChDUUlfSVNfQkFEKHBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSkpCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuQmFkQ1FJQXV0b1JlY292ZXJ5Q291bnQgKys7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNTUNISyAtIEJhZCBDUUkuIEF1dG8gUmVjb3ZlcnkgYXR0ZW1wdCAjJWxkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50KSk7CisJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7CisJCX0KKworCQkvLyBBZGQgYXV0byBzZWFtbGVzcyByb2FtaW5nCisJCWlmIChwQWQtPlN0YUNmZy5iRmFzdFJvYW1pbmcpCisJCXsKKwkJCVNIT1JUCWRCbVRvUm9hbSA9IChTSE9SVClwQWQtPlN0YUNmZy5kQm1Ub1JvYW07CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJzc2k9JWQsIGRCbVRvUm9hbT0lZFxuIiwgUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKSwgKENIQVIpZEJtVG9Sb2FtKSk7CisKKwkJCWlmIChSVE1QTWF4UnNzaShwQWQsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMSwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpIDw9IChDSEFSKWRCbVRvUm9hbSkKKwkJCXsKKwkJCQlNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZyhwQWQsIHBBZC0+TWxtZS5Ob3czMik7CisJCQl9CisJCX0KKwl9CisJZWxzZSBpZiAoQURIT0NfT04ocEFkKSkKKwl7CisJCS8vcmFkYXIgZGV0ZWN0CisJCWlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorCQkJJiYgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpCisJCQkmJiBSYWRhckNoYW5uZWxDaGVjayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKQorCQl7CisJCQlSYWRhckRldGVjdFBlcmlvZGljKHBBZCk7CisJCX0KKworCQkvLyBJZiBhbGwgcGVlcnMgbGVhdmUsIGFuZCB0aGlzIFNUQSBiZWNvbWVzIHRoZSBsYXN0IG9uZSBpbiB0aGlzIElCU1MsIHRoZW4gY2hhbmdlIE1lZGlhU3RhdGUKKwkJLy8gdG8gRElTQ09OTkVDVEVELiBCdXQgc3RpbGwgaG9sZGluZyB0aGlzIElCU1MgKGkuZS4gc2VuZGluZyBCRUFDT04pIHNvIHRoYXQgb3RoZXIgU1RBcyBjYW4KKwkJLy8gam9pbiBsYXRlci4KKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgQURIT0NfQkVBQ09OX0xPU1RfVElNRSA8IHBBZC0+TWxtZS5Ob3czMikgJiYKKwkJCU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJeworCQkJTUxNRV9TVEFSVF9SRVFfU1RSVUNUICAgICBTdGFydFJlcTsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBleGNlc3NpdmUgQkVBQ09OIGxvc3QsIGxhc3QgU1RBIGluIHRoaXMgSUJTUywgTWVkaWFTdGF0ZT1EaXNjb25uZWN0ZWRcbiIpKTsKKwkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOworCisJCQlTdGFydFBhcm1GaWxsKHBBZCwgJlN0YXJ0UmVxLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgc2l6ZW9mKE1MTUVfU1RBUlRfUkVRX1NUUlVDVCksICZTdGFydFJlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX1NUQVJUOworCQl9CisKKwkJZm9yIChpID0gMTsgaSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJCXsKKwkJCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07CisKKwkJCWlmIChwRW50cnktPlZhbGlkQXNDTEkgPT0gRkFMU0UpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwRW50cnktPkxhc3RCZWFjb25SeFRpbWUgKyBBREhPQ19CRUFDT05fTE9TVF9USU1FIDwgcEFkLT5NbG1lLk5vdzMyKQorCQkJCU1hY1RhYmxlRGVsZXRlRW50cnkocEFkLCBwRW50cnktPkFpZCwgcEVudHJ5LT5BZGRyKTsKKwkJfQorCX0KKwllbHNlIC8vIG5vIElORlJBIG5vciBBREhPQyBjb25uZWN0aW9uCisJeworCisJCWlmIChwQWQtPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJICYmCisgICAgICAgICAgICAoKHBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSArIDMwICogT1NfSFopID4gcEFkLT5NbG1lLk5vdzMyKSkKKwkJCWdvdG8gU0tJUF9BVVRPX1NDQU5fQ09OTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcEFkLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IEZBTFNFOworCisJCWlmICgocEFkLT5TdGFDZmcuYkF1dG9SZWNvbm5lY3QgPT0gVFJVRSkKKwkJCSYmIFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkKKwkJCSYmIChNbG1lVmFsaWRhdGVTU0lEKHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKSA9PSBUUlVFKSkKKwkJeworCQkJaWYgKChwQWQtPlNjYW5UYWIuQnNzTnI9PTApICYmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkpCisJCQl7CisJCQkJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJICAgU2NhblJlcTsKKworCQkJCWlmICgocEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lICsgMTAgKiBPU19IWikgPCBwQWQtPk1sbWUuTm93MzIpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTVEFNbG1lUGVyaW9kaWNFeGVjKCk6Q05UTCAtIFNjYW5UYWIuQnNzTnI9PTAsIHN0YXJ0IGEgbmV3IEFDVElWRSBzY2FuIFNTSURbJXNdXG4iLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQpKTsKKwkJCQkJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuLCBCU1NfQU5ZLCBTQ0FOX0FDVElWRSk7CisJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwgc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNjYW5SZXEpOworCQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47CisJCQkJCS8vIFJlc2V0IE1pc3NlZCBzY2FuIG51bWJlcgorCQkJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBwQWQtPk1sbWUuTm93MzI7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQkvLyBRdWl0IHRoZSBmb3JldmVyIHNjYW4gd2hlbiBpbiBhIHZlcnkgY2xlYW4gcm9vbQorCQkJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7CisJCQl9CisJCQllbHNlIGlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKKwkJCXsKKwkJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgNykgPT0gMCkKKwkJCQl7CisJCQkJCU1sbWVBdXRvU2NhbihwQWQpOworCQkJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBwQWQtPk1sbWUuTm93MzI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLyBSb2dlciBzeW5jIENhcnJpZXIKKwkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID09IFRSVUUpCisJCQkJCXsKKwkJCQkJCWlmICgocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSA1KSA9PSAxKQorCQkJCQkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCQkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworU0tJUF9BVVRPX1NDQU5fQ09OTjoKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIGlmICgocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5UWEJBYml0bWFwICE9MCkgJiYgKHBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPT0gRkFMU0UpKQorCXsKKwkJcEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbiA9IFRSVUU7CisJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfRk9SQ0VSVFNDVFMsICBBTExOX1NFVFBST1RFQ1QsIEZBTFNFLCBGQUxTRSk7CisJfQorCWVsc2UgaWYgKChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlRYQkFiaXRtYXAgPT0wKSAmJiAocEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbiA9PSBUUlVFKSkKKwl7CisJCXBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPSBGQUxTRTsKKwkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgRkFMU0UpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NDQU5fMjA0MCkpCisJCVRyaUV2ZW50Q291bnRlck1haW50ZW5hbmNlKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcmV0dXJuOworfQorCisvLyBMaW5rIGRvd24gcmVwb3J0CitWT0lEIExpbmtEb3duRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIE1sbWVBdXRvU2NhbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gRHJpdmVyIGF1dG8gc2NhblxuIikpOworCQlNbG1lRW5xdWV1ZShwQWQsCisJCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCQlPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwKKwkJCQkJMCwKKwkJCQkJTlVMTCk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwl9Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCisKKwkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCWlmICgocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpICYmCisJCShNbG1lVmFsaWRhdGVTU0lEKHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKSA9PSBUUlVFKSkKKwl7CisJCU5ESVNfODAyXzExX1NTSUQgT2lkU3NpZDsKKwkJT2lkU3NpZC5Tc2lkTGVuZ3RoID0gcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuOworCQlOZGlzTW92ZU1lbW9yeShPaWRTc2lkLlNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEcml2ZXIgYXV0byByZWNvbm5lY3QgdG8gbGFzdCBPSURfODAyXzExX1NTSUQgc2V0dGluZyAtICVzLCBsZW4gLSAlZFxuIiwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pKTsKKwkJTWxtZUVucXVldWUocEFkLAorCQkJCQlNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKwkJCQkJT0lEXzgwMl8xMV9TU0lELAorCQkJCQlzaXplb2YoTkRJU184MDJfMTFfU1NJRCksCisJCQkJCSZPaWRTc2lkKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVZhbGlkYXRlIFNTSUQgZm9yIGNvbm5lY3Rpb24gdHJ5IGFuZCByZXNjYW4gcHVycG9zZQorCVZhbGlkIFNTSUQgd2lsbCBoYXZlIHZpc2libGUgY2hhcnMgb25seS4KKwlUaGUgdmFsaWQgbGVuZ3RoIGlzIGZyb20gMCB0byAzMi4KKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVWYWxpZGF0ZVNTSUQoCisJSU4gUFVDSEFSCXBTc2lkLAorCUlOIFVDSEFSCVNzaWRMZW4pCit7CisJaW50CWluZGV4OworCisJaWYgKFNzaWRMZW4gPiBNQVhfTEVOX09GX1NTSUQpCisJCXJldHVybiAoRkFMU0UpOworCisJLy8gQ2hlY2sgZWFjaCBjaGFyYWN0ZXIgdmFsdWUKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBTc2lkTGVuOyBpbmRleCsrKQorCXsKKwkJaWYgKHBTc2lkW2luZGV4XSA8IDB4MjApCisJCQlyZXR1cm4gKEZBTFNFKTsKKwl9CisKKwkvLyBBbGwgY2hlY2tlZAorCXJldHVybiAoVFJVRSk7Cit9CisKK1ZPSUQgTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFVDSEFSCQkJCSpwcFRhYmxlLAorCUlOIFBVQ0hBUgkJCQlwVGFibGVTaXplLAorCUlOIFBVQ0hBUgkJCQlwSW5pdFR4UmF0ZUlkeCkKK3sKKwlkbworCXsKKwkJLy8gZGVjaWRlIHRoZSByYXRlIHRhYmxlIGZvciB0dW5pbmcKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZVRhYmxlU2l6ZSA+IDApCisJCXsKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlOworCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGVbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGVbMV07CisKKwkJCWJyZWFrOworCQl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiBBREhPQ19PTihwQWQpKQorCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgJiYKKwkJCQkocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCQkJKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkpKQorCQkJey8vIDExTiAxUyBBZGhvYworCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4xU1sxXTsKKworCQkJfQorCQkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgJiYKKwkJCQkJKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkJCQkocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4ZmYpICYmCisJCQkJCShwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQkJey8vIDExTiAyUyBBZGhvYworCQkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07CisJCQkJfQorCisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gNCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkJJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDApCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJCSkKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQjsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQlswXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07CisKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxNCkKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkc7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMV07CisKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExR1swXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUdbMV07CisKKwkJCX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJLy9pZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID09IDEyKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMHhmZikgJiYKKwkJLy8JKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAweDAwKSB8fCAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSkpCisJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDEyKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCQkoKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweDAwKSB8fCAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkpKQorCQl7Ly8gMTFCR04gMVMgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04xUzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04xU1swXTsKKwkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gMTIpICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkvLwkocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMHhmZikgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDEyKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCQkocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4ZmYpICYmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAyKSkKKwkJey8vIDExQkdOIDJTIEFQCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yUzsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbMF07CisJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU1sxXTsKKworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kOworCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZFsxXTsKKworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQkvL2Vsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDB4MDApIHx8IChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpKSkKKwkJaWYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpKSkKKwkJey8vIDExTiAxUyBBUAorCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4xU1sxXTsKKworCQkJYnJlYWs7CisJCX0KKworCQkvL2Vsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMHhmZikgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCWlmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHhmZikgJiYgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDIpKQorCQl7Ly8gMTFOIDJTIEFQCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yUzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gPT0gNCkgJiYgKHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gMCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gNCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vSXZlcnNvbiBtYXJrIGZvciBBZGhvYyBiIG1vZGUsc3RhIHdpbGwgdXNlIHJhdGUgNTQgIE1icHMgd2hlbiBjb25uZWN0IHdpdGggc3RhIGIvZy9uIG1vZGUKKy8vCQkJJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDApCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkpCisJCXsvLyBCIG9ubHkgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCOworCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPiA4KSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDApKQorCQlpZiAoKHBFbnRyeS0+UmF0ZUxlbiA+IDgpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCSkKKwkJey8vIEIvRyAgbWl4ZWQgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCRzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1swXTsKKwkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gOCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gOCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCSYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMCkgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAwKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJKQorCQl7Ly8gRyBvbmx5IEFQCisJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzBdOworCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzFdOworCisJCQlicmVhazsKKwkJfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJCWlmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7CS8vIExlZ2FjeSBtb2RlCisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSA8PSBSQVRFXzExKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUI7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPiBSQVRFXzExKSAmJiAocEFkLT5Db21tb25DZmcuTWluVHhSYXRlID4gUkFURV8xMSkpCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUdbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExR1sxXTsKKworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkc7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1sxXTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFswXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFsxXTsKKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CisJCQkJfQorCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiRFJTOiB1bmtvd24gbW9kZSAoU3VwUmF0ZUxlbj0lZCwgRXh0UmF0ZUxlbj0lZCwgTUNTU2V0WzBdPTB4JXgsIE1DU1NldFsxXT0weCV4KVxuIiwKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLCBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuLCBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSwgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0pKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0gd2hpbGUoRkFMU0UpOworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBjaGVja3MgaWYgdGhlcmUncmUgb3RoZXIgQVBzIG91dCB0aGVyZSBjYXBhYmxlIGZvcgorCQlyb2FtaW5nLiBDYWxsZXIgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIG9ubHkgd2hlbiBMaW5rIHVwIGluIElORlJBIG1vZGUKKwkJYW5kIGNoYW5uZWwgcXVhbGl0eSBpcyBiZWxvdyBDUUlfR09PRF9USFJFU0hPTEQuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU91dHB1dDoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVDaGVja0ZvclJvYW1pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcJTm93MzIpCit7CisJVVNIT1JUCSAgIGk7CisJQlNTX1RBQkxFICAqcFJvYW1UYWIgPSAmcEFkLT5NbG1lQXV4LlJvYW1UYWI7CisJQlNTX0VOVFJZICAqcEJzczsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lQ2hlY2tGb3JSb2FtaW5nXG4iKSk7CisJLy8gcHV0IGFsbCByb2FtaW5nIGNhbmRpZGF0ZXMgaW50byBSb2FtVGFiLCBhbmQgc29ydCBpbiBSU1NJIG9yZGVyCisJQnNzVGFibGVJbml0KHBSb2FtVGFiKTsKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5TY2FuVGFiLkJzc05yOyBpKyspCisJeworCQlwQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKKworCQlpZiAoKHBCc3MtPkxhc3RCZWFjb25SeFRpbWUgKyBCRUFDT05fTE9TVF9USU1FKSA8IE5vdzMyKQorCQkJY29udGludWU7CSAvLyBBUCBkaXNhcHBlYXIKKwkJaWYgKHBCc3MtPlJzc2kgPD0gUlNTSV9USFJFU0hPTERfRk9SX1JPQU1JTkcpCisJCQljb250aW51ZTsJIC8vIFJTU0kgdG9vIHdlYWsuIGZvcmdldCBpdC4KKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBCc3MtPkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCkpCisJCQljb250aW51ZTsJIC8vIHNraXAgY3VycmVudCBBUAorCQlpZiAocEJzcy0+UnNzaSA8IChwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCArIFJTU0lfREVMVEEpKQorCQkJY29udGludWU7CSAvLyBvbmx5IEFQIHdpdGggc3Ryb25nZXIgUlNTSSBpcyBlbGlnaWJsZSBmb3Igcm9hbWluZworCisJCS8vIEFQIHBhc3NpbmcgYWxsIGFib3ZlIHJ1bGVzIGlzIHB1dCBpbnRvIHJvYW1pbmcgY2FuZGlkYXRlIHRhYmxlCisJCU5kaXNNb3ZlTWVtb3J5KCZwUm9hbVRhYi0+QnNzRW50cnlbcFJvYW1UYWItPkJzc05yXSwgcEJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCQlwUm9hbVRhYi0+QnNzTnIgKz0gMTsKKwl9CisKKwlpZiAocFJvYW1UYWItPkJzc05yID4gMCkKKwl7CisJCS8vIGNoZWNrIENudGxNYWNoaW5lLkN1cnJTdGF0ZSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBORElTIFNldE9JRCByZXF1ZXN0CisJCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKKwkJeworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50ICsrOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBSb2FtaW5nIGF0dGVtcHQgIyVsZFxuIiwgcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50KSk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ST0FNSU5HX1JFUSwgMCwgTlVMTCk7CisJCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJCX0KKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IE1sbWVDaGVja0ZvclJvYW1pbmcoIyBvZiBjYW5kaWRhdGU9ICVkKVxuIixwUm9hbVRhYi0+QnNzTnIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIHRoZXJlJ3JlIG90aGVyIEFQcyBvdXQgdGhlcmUgY2FwYWJsZSBmb3IKKwkJcm9hbWluZy4gQ2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBvbmx5IHdoZW4gbGluayB1cCBpbiBJTkZSQSBtb2RlCisJCWFuZCBjaGFubmVsIHF1YWxpdHkgaXMgYmVsb3cgQ1FJX0dPT0RfVEhSRVNIT0xELgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlPdXRwdXQ6CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVTE9ORwkJCU5vdykKK3sKKwlVU0hPUlQJCWk7CisJQlNTX1RBQkxFCSpwUm9hbVRhYiA9ICZwQWQtPk1sbWVBdXguUm9hbVRhYjsKKwlCU1NfRU5UUlkJKnBCc3M7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmdcbiIpKTsKKwkvLyBwdXQgYWxsIHJvYW1pbmcgY2FuZGlkYXRlcyBpbnRvIFJvYW1UYWIsIGFuZCBzb3J0IGluIFJTU0kgb3JkZXIKKwlCc3NUYWJsZUluaXQocFJvYW1UYWIpOworCWZvciAoaSA9IDA7IGkgPCBwQWQtPlNjYW5UYWIuQnNzTnI7IGkrKykKKwl7CisJCXBCc3MgPSAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W2ldOworCisgICAgICAgIGlmICgocEJzcy0+UnNzaSA8PSAtNTApICYmIChwQnNzLT5DaGFubmVsID09IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKQorCQkJY29udGludWU7CSAvLyBSU1NJIHRvbyB3ZWFrLiBmb3JnZXQgaXQuCisJCWlmIChNQUNfQUREUl9FUVVBTChwQnNzLT5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpKQorCQkJY29udGludWU7CSAvLyBza2lwIGN1cnJlbnQgQVAKKwkJaWYgKCFTU0lEX0VRVUFMKHBCc3MtPlNzaWQsIHBCc3MtPlNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pKQorCQkJY29udGludWU7CSAvLyBza2lwIGRpZmZlcmVudCBTU0lECisgICAgICAgIGlmIChwQnNzLT5Sc3NpIDwgKFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMikgKyBSU1NJX0RFTFRBKSkKKwkJCWNvbnRpbnVlOwkgLy8gc2tpcCBBUCB3aXRob3V0IGJldHRlciBSU1NJCisKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTGFzdFJzc2kwID0gJWQsIHBCc3MtPlJzc2kgPSAlZFxuIiwgUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKSwgcEJzcy0+UnNzaSkpOworCQkvLyBBUCBwYXNzaW5nIGFsbCBhYm92ZSBydWxlcyBpcyBwdXQgaW50byByb2FtaW5nIGNhbmRpZGF0ZSB0YWJsZQorCQlOZGlzTW92ZU1lbW9yeSgmcFJvYW1UYWItPkJzc0VudHJ5W3BSb2FtVGFiLT5Cc3NOcl0sIHBCc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJcFJvYW1UYWItPkJzc05yICs9IDE7CisJfQorCisJaWYgKHBSb2FtVGFiLT5Cc3NOciA+IDApCisJeworCQkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCQlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCArKzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gUm9hbWluZyBhdHRlbXB0ICMlbGRcbiIsIHBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCkpOworCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfUk9BTUlOR19SRVEsIDAsIE5VTEwpOworCQkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCQl9CisJfQorCS8vIE1heWJlIHNpdGUgc3VydmV5IHJlcXVpcmVkCisJZWxzZQorCXsKKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgKyAxMCAqIDEwMDApIDwgTm93KQorCQl7CisJCQkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBSb2FtaW5nLCBObyBlbGlnYWJsZSBlbnRyeSwgdHJ5IG5ldyBzY2FuIVxuIikpOworCQkJcEFkLT5TdGFDZmcuU2NhbkNudCA9IDI7CisJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBOb3c7CisJCQlNbG1lQXV0b1NjYW4ocEFkKTsKKwkJfQorCX0KKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZyAoQnNzTnI9JWQpXG4iLCBwUm9hbVRhYi0+QnNzTnIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyBUeFBFUiwgUnhQRVIgb2YgdGhlIHBhc3QgTi1zZWMgcGVyaW9kLiBBbmQKKwkJYWNjb3JkaW5nIHRvIHRoZSBjYWxjdWxhdGlvbiByZXN1bHQsIENoYW5uZWxRdWFsaXR5IGlzIGNhbGN1bGF0ZWQgaGVyZQorCQl0byBkZWNpZGUgaWYgY3VycmVudCBBUCBpcyBzdGlsbCBkb2luZyB0aGUgam9iLgorCisJCUlmIENoYW5uZWxRdWFsaXR5IGlzIG5vdCBnb29kLCBhIFJPQU1pbmcgYXR0ZW1wdCBtYXkgYmUgdHJpZWQgbGF0ZXIuCisJT3V0cHV0OgorCQlTdGFDZmcuQ2hhbm5lbFF1YWxpdHkgLSAwLi4xMDAKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTk9URTogVGhpcyByb3V0aW5lIGRlY2lkZSBjaGFubmxlIHF1YWxpdHkgYmFzZWQgb24gUlggQ1JDIGVycm9yIHJhdGlvLgorCQlDYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSBhIGZ1bmN0aW9uIGNhbGwgdG8gTklDVXBkYXRlUmF3Q291bnRlcnMocEFkKQorCQlpcyBwZXJmb3JtZWQgcmlnaHQgYmVmb3JlIHRoaXMgcm91dGluZSwgc28gdGhhdCB0aGlzIHJvdXRpbmUgY2FuIGRlY2lkZQorCQljaGFubmVsIHF1YWxpdHkgYmFzZWQgb24gdGhlIG1vc3QgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUNhbGN1bGF0ZUNoYW5uZWxRdWFsaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIE5vdzMyKQoreworCVVMT05HIFR4T2tDbnQsIFR4Q250LCBUeFBFUiwgVHhQUlI7CisJVUxPTkcgUnhDbnQsIFJ4UEVSOworCVVDSEFSIE5vclJzc2k7CisJQ0hBUiAgTWF4UnNzaTsKKwlVTE9ORyBCZWFjb25Mb3N0VGltZSA9IEJFQUNPTl9MT1NUX1RJTUU7CisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vIFJvZ2VyIHN5bmMgQ2FycmllcgorCS8vIGxvbmdlciBiZWFjb24gbG9zdCB0aW1lIHdoZW4gY2FycmllciBkZXRlY3Rpb24gZW5hYmxlZAorCWlmIChwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9PSBUUlVFKQorCXsKKwkJQmVhY29uTG9zdFRpbWUgPSBCRUFDT05fTE9TVF9USU1FICsgQkVBQ09OX0xPU1RfVElNRS8yOworCX0KKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKwlNYXhSc3NpID0gUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKTsKKworCS8vCisJLy8gY2FsY3VsYXRlIFRYIHBhY2tldCBlcnJvciByYXRpbyBhbmQgVFggcmV0cnkgcmF0aW8gLSBpZiB0b28gZmV3IFRYIHNhbXBsZXMsIHNraXAgVFggcmVsYXRlZCBzdGF0aXN0aWNzCisJLy8KKwlUeE9rQ250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudDsKKwlUeENudCA9IFR4T2tDbnQgKyBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OworCWlmIChUeENudCA8IDUpCisJeworCQlUeFBFUiA9IDA7CisJCVR4UFJSID0gMDsKKwl9CisJZWxzZQorCXsKKwkJVHhQRVIgPSAocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudCAqIDEwMCkgLyBUeENudDsKKwkJVHhQUlIgPSAoKFR4Q250IC0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50KSAqIDEwMCkgLyBUeENudDsKKwl9CisKKwkvLworCS8vIGNhbGN1bGF0ZSBSWCBQRVIgLSBkb24ndCB0YWtlIFJ4UEVSIGludG8gY29uc2lkZXJhdGlvbiBpZiB0b28gZmV3IHNhbXBsZQorCS8vCisJUnhDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tDbnQgKyBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4RmNzRXJyQ250OworCWlmIChSeENudCA8IDUpCisJCVJ4UEVSID0gMDsKKwllbHNlCisJCVJ4UEVSID0gKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQgKiAxMDApIC8gUnhDbnQ7CisKKwkvLworCS8vIGRlY2lkZSBDaGFubmVsUXVhbGl0eSBiYXNlZCBvbjogMSlsYXN0IEJFQUNPTiByZWNlaXZlZCB0aW1lLCAyKWxhc3QgUlNTSSwgMylUeFBFUiwgYW5kIDQpUnhQRVIKKwkvLworCWlmIChJTkZSQV9PTihwQWQpICYmCisJCShwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPCAyKSAmJiAvLyBubyBoZWF2eSB0cmFmZmljCisJCShwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgQmVhY29uTG9zdFRpbWUgPCBOb3czMikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCRUFDT04gbG9zdCA+ICVsZCBtc2VjIHdpdGggVHhPa0NudD0lbGQgLT4gQ1FJPTBcbiIsIEJlYWNvbkxvc3RUaW1lLCBUeE9rQ250KSk7CisJCXBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSA9IDA7CisJfQorCWVsc2UKKwl7CisJCS8vIE5vcm1hbGl6ZSBSc3NpCisJCWlmIChNYXhSc3NpID4gLTQwKQorCQkJTm9yUnNzaSA9IDEwMDsKKwkJZWxzZSBpZiAoTWF4UnNzaSA8IC05MCkKKwkJCU5vclJzc2kgPSAwOworCQllbHNlCisJCQlOb3JSc3NpID0gKE1heFJzc2kgKyA5MCkgKiAyOworCisJCS8vIENoYW5uZWxRdWFsaXR5ID0gVzEqUlNTSSArIFcyKlR4UFJSICsgVzMqUnhQRVIJIChSU1NJIDAuLjEwMCksIChUeFBFUiAxMDAuLjApLCAoUnhQRVIgMTAwLi4wKQorCQlwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkgPSAoUlNTSV9XRUlHSFRJTkcgKiBOb3JSc3NpICsKKwkJCQkJCQkJICAgVFhfV0VJR0hUSU5HICogKDEwMCAtIFR4UFJSKSArCisJCQkJCQkJCSAgIFJYX1dFSUdIVElORyogKDEwMCAtIFJ4UEVSKSkgLyAxMDA7CisJCWlmIChwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkgPj0gMTAwKQorCQkJcEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ID0gMTAwOworCX0KKworfQorCitWT0lEIE1sbWVTZXRUeFJhdGUoCisJSU4gUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJCXBFbnRyeSwKKwlJTiBQUlRNUF9UWF9SQVRFX1NXSVRDSAlwVHhSYXRlKQoreworCVVDSEFSCU1heE1vZGUgPSBNT0RFX09GRE07CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlNYXhNb2RlID0gTU9ERV9IVEdSRUVORklFTEQ7CisKKwlpZiAocFR4UmF0ZS0+U1RCQyAmJiAocEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMpICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfVVNFOworCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisKKwlpZiAocFR4UmF0ZS0+Q3Vyck1DUyA8IE1DU19BVVRPKQorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID0gcFR4UmF0ZS0+Q3Vyck1DUzsKKworCWlmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID4gNykKKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisKKyAgIAlpZiAoQURIT0NfT04ocEFkKSkKKwl7CisJCS8vIElmIHBlZXIgYWRob2MgaXMgYi1vbmx5IG1vZGUsIHdlIGNhbid0IHNlbmQgMTFnIHJhdGUuCisJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TVEJDCT0gU1RCQ19OT05FOworCisJCS8vCisJCS8vIEZvciBBZGhvYyBNT0RFX0NDSywgZHJpdmVyIHdpbGwgdXNlIEFkaG9jQk9ubHlKb2luZWQgZmxhZyB0byByb2xsIGJhY2sgdG8gQiBvbmx5IGlmIG5lY2Vzc2FyeQorCQkvLworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcFR4UmF0ZS0+TW9kZTsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKworCQkvLyBQYXRjaCBzcGVlZCBlcnJvciBpbiBzdGF0dXMgcGFnZQorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREU7CisJfQorCWVsc2UKKwl7CisJCWlmIChwVHhSYXRlLT5Nb2RlIDw9IE1heE1vZGUpCisJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBUeFJhdGUtPk1vZGU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKHBUeFJhdGUtPlNob3J0R0kgJiYgKHBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJKSkKKwkJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfNDAwOworCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkvLyBSZWV4YW0gZWFjaCBiYW5kd2lkdGgncyBTR0kgc3VwcG9ydC4KKwkJaWYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID09IEdJXzQwMCkKKwkJeworCQkJaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5CVyA9PSBCV18yMCkgJiYgKCFDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpKSkKKwkJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKwkJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuQlcgPT0gQldfNDApICYmICghQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKSkpCisJCQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisJCX0KKworCQkvLyBUdXJuIFJUUy9DVFMgcmF0ZSB0byA2TWJwcy4KKwkJaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMCkgJiYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gMCkpCisJCXsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJaWYgKHBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24pCisJCQl7CisJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBIVF9GT1JDRVJUU0NUUywgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwgKEJPT0xFQU4pcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSA4KSAmJiAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyAhPSA4KSkKKwkJeworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTCQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQlpZiAocEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbikKKwkJCXsKKwkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX0ZPUkNFUlRTQ1RTLCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIChCT09MRUFOKXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IDApICYmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID09IDApKQorCQl7CisJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX1JUU0NUU182TSwgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKworCQl9CisJCWVsc2UgaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gOCkgJiYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gOCkpCisJCXsKKwkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfUlRTQ1RTXzZNLCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIChCT09MRUFOKXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQpOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0k7CisJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREU7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmICgocEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVEdSRUVORklFTEQpICYmCisJCSAgICBwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkKQorCQkgICAgcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCX0KKworCXBBZC0+TGFzdFR4UmF0ZSA9IChVU0hPUlQpKHBFbnRyeS0+SFRQaHlNb2RlLndvcmQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSBhY3VtdWxhdGVkIFR4UEVSIG9mIGVheGggVHhSYXRlLiBBbmQKKwkJYWNjb3JkaW5nIHRvIHRoZSBjYWxjdWxhdGlvbiByZXN1bHQsIGNoYW5nZSBDb21tb25DZmcuVHhSYXRlIHdoaWNoCisJCWlzIHRoZSBzdGFibGUgVFggUmF0ZSB3ZSBleHBlY3QgdGhlIFJhZGlvIHNpdHVhdGlvbiBjb3VsZCBzdXN0YWluZWQuCisKKwkJQ29tbW9uQ2ZnLlR4UmF0ZSB3aWxsIGNoYW5nZSBkeW5hbWljYWxseSB3aXRoaW4ge1JBVEVfMS9SQVRFXzYsIE1heFR4UmF0ZX0KKwlPdXRwdXQ6CisJCUNvbW1vbkNmZy5UeFJhdGUgLQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOT1RFOgorCQljYWxsIHRoaXMgcm91dGluZSBldmVyeSBzZWNvbmQKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCQkJCQlVcFJhdGVJZHggPSAwLCBEb3duUmF0ZUlkeCA9IDAsIEN1cnJSYXRlSWR4OworCVVMT05HCQkJCQlpLCBBY2N1VHhUb3RhbENudCA9IDAsIFR4VG90YWxDbnQ7CisJVUxPTkcJCQkJCVR4RXJyb3JSYXRpbyA9IDA7CisJQk9PTEVBTgkJCQkJYlR4UmF0ZUNoYW5nZWQsIGJVcGdyYWRlUXVhbGl0eSA9IEZBTFNFOworCVBSVE1QX1RYX1JBVEVfU1dJVENICXBDdXJyVHhSYXRlLCBwTmV4dFR4UmF0ZSA9IE5VTEw7CisJUFVDSEFSCQkJCQlwVGFibGU7CisJVUNIQVIJCQkJCVRhYmxlU2l6ZSA9IDA7CisJVUNIQVIJCQkJCUluaXRUeFJhdGVJZHggPSAwLCBUcmFpblVwLCBUcmFpbkRvd247CisJQ0hBUgkJCQkJUnNzaSwgUnNzaU9mZnNldCA9IDA7CisJVFhfU1RBX0NOVDFfU1RSVUMJCVN0YVR4MTsKKwlUWF9TVEFfQ05UMF9TVFJVQwkJVHhTdGFDbnQwOworCVVMT05HCQkJCQlUeFJldHJhbnNtaXQgPSAwLCBUeFN1Y2Nlc3MgPSAwLCBUeEZhaWxDb3VudCA9IDA7CisJTUFDX1RBQkxFX0VOVFJZCQkJKnBFbnRyeTsKKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCS8vCisJLy8gd2FsayB0aHJvdWdoIE1BQyB0YWJsZSwgc2VlIGlmIG5lZWQgdG8gY2hhbmdlIEFQJ3MgVFggcmF0ZSB0b3dhcmQgZWFjaCBlbnRyeQorCS8vCisgICAJZm9yIChpID0gMTsgaSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJeworCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKKworCQkvLyBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gc3dpdGNoIHJhdGUgYXV0b21hdGljYWxseQorCQlpZiAoUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaChwQWQsIHBFbnRyeSkgPT0gRkFMU0UpCisJCQljb250aW51ZTsKKworCQlpZiAoKHBBZC0+TWFjVGFiLlNpemUgPT0gMSkgfHwgKHBFbnRyeS0+VmFsaWRBc0RscykpCisJCXsKKwkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCwKKwkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAorCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCisJCQkvLyBVcGRhdGUgc3RhdGlzdGljIGNvdW50ZXIKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZUeFN0YUNudDAud29yZCk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmU3RhVHgxLndvcmQpOworCQkJcEFkLT5iVXBkYXRlQmNuQ250RG9uZSA9IFRSVUU7CisJCQlUeFJldHJhbnNtaXQgPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCQkJVHhTdWNjZXNzID0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCVR4RmFpbENvdW50ID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJVHhUb3RhbENudCA9IFR4UmV0cmFuc21pdCArIFR4U3VjY2VzcyArIFR4RmFpbENvdW50OworCisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICs9IFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydCArPSBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOworCQkJcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCArPSBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7CisKKwkJCS8vIGlmIG5vIHRyYWZmaWMgaW4gdGhlIHBhc3QgMS1zZWMgcGVyaW9kLCBkb24ndCBjaGFuZ2UgVFggcmF0ZSwKKwkJCS8vIGJ1dCBjbGVhciBhbGwgYmFkIGhpc3RvcnkuIGJlY2F1c2UgdGhlIGJhZCBoaXN0b3J5IG1heSBhZmZlY3QgdGhlIG5leHQKKwkJCS8vIENoYXJpb3QgdGhyb3VnaHB1dCB0ZXN0CisJCQlBY2N1VHhUb3RhbENudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKKworCQkJaWYgKFR4VG90YWxDbnQpCisJCQkJVHhFcnJvclJhdGlvID0gKChUeFJldHJhbnNtaXQgKyBUeEZhaWxDb3VudCkgKiAxMDApIC8gVHhUb3RhbENudDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChJTkZSQV9PTihwQWQpICYmIChpID09IDEpKQorCQkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAsCisJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEsCisJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCQkJZWxzZQorCQkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMCwKKwkJCQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAorCQkJCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCisJCQlUeFRvdGFsQ250ID0gcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkgcEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgocEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKworCQlDdXJyUmF0ZUlkeCA9IHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4OworCisJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJkluaXRUeFJhdGVJZHgpOworCisJCWlmIChDdXJyUmF0ZUlkeCA+PSBUYWJsZVNpemUpCisJCXsKKwkJCUN1cnJSYXRlSWR4ID0gVGFibGVTaXplIC0gMTsKKwkJfQorCisJCS8vIFdoZW4gc3dpdGNoIGZyb20gRml4ZWQgcmF0ZSAtPiBhdXRvIHJhdGUsIHRoZSBSRUFMIFRYIHJhdGUgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXguCisJCS8vIFNvIG5lZWQgdG8gc3luYyBoZXJlLgorCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoQ3VyclJhdGVJZHgrMSkqNV07CisJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IHBDdXJyVHhSYXRlLT5DdXJyTUNTKQorCQkJLy8mJiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gVFJVRSkKKwkJCSkKKwkJeworCisJCQkvLyBOZWVkIHRvIHN5bmMgUmVhbCBUeCByYXRlIGFuZCBvdXIgcmVjb3JkLgorCQkJLy8gVGhlbiByZXR1cm4gZm9yIG5leHQgRFJTLgorCQkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpICZwVGFibGVbKEluaXRUeFJhdGVJZHgrMSkqNV07CisJCQlwRW50cnktPkN1cnJUeFJhdGVJbmRleCA9IEluaXRUeFJhdGVJZHg7CisJCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwQ3VyclR4UmF0ZSk7CisKKwkJCS8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworCQkJUkVTRVRfT05FX1NFQ19UWF9DTlQocEVudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLy8gZGVjaWRlIHRoZSBuZXh0IHVwZ3JhZGUgcmF0ZSBhbmQgZG93bmdyYWRlIHJhdGUsIGlmIGFueQorCQlpZiAoKEN1cnJSYXRlSWR4ID4gMCkgJiYgKEN1cnJSYXRlSWR4IDwgKFRhYmxlU2l6ZSAtIDEpKSkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHggKyAxOworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeCAtMTsKKwkJfQorCQllbHNlIGlmIChDdXJyUmF0ZUlkeCA9PSAwKQorCQl7CisJCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeCArIDE7CisJCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4OworCQl9CisJCWVsc2UgaWYgKEN1cnJSYXRlSWR4ID09IChUYWJsZVNpemUgLSAxKSkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHg7CisJCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4IC0gMTsKKwkJfQorCisJCXBDdXJyVHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhDdXJyUmF0ZUlkeCsxKSo1XTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoKFJzc2kgPiAtNjUpICYmIChwQ3VyclR4UmF0ZS0+TW9kZSA+PSBNT0RFX0hUTUlYKSkKKwkJeworCQkJVHJhaW5VcAkJPSAocEN1cnJUeFJhdGUtPlRyYWluVXAgKyAocEN1cnJUeFJhdGUtPlRyYWluVXAgPj4gMSkpOworCQkJVHJhaW5Eb3duCT0gKHBDdXJyVHhSYXRlLT5UcmFpbkRvd24gKyAocEN1cnJUeFJhdGUtPlRyYWluRG93biA+PiAxKSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQlUcmFpblVwCQk9IHBDdXJyVHhSYXRlLT5UcmFpblVwOworCQkJVHJhaW5Eb3duCT0gcEN1cnJUeFJhdGUtPlRyYWluRG93bjsKKwkJfQorCisJCS8vcEFkLT5EcnNDb3VudGVycy5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9IHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsKKworCQkvLworCQkvLyBLZWVwIHRoZSBsYXN0IHRpbWUgVHhSYXRlQ2hhbmdlQWN0aW9uIHN0YXR1cy4KKwkJLy8KKwkJcEVudHJ5LT5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9IHBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsKKworCisKKwkJLy8KKwkJLy8gQ0FTRSAxLiB3aGVuIFRYIHNhbXBsZXMgYXJlIGZld2VyIHRoYW4gMTUsIHRoZW4gZGVjaWRlIFRYIHJhdGUgc29sZWx5IG9uIFJTU0kKKwkJLy8gICAgICAgICAoY3JpdGVyaWEgY29waWVkIGZyb20gUlQyNTAwIGZvciBOZXRvcGlhIGNhc2UpCisJCS8vCisJCWlmIChUeFRvdGFsQ250IDw9IDE1KQorCQl7CisJCQlDSEFSCWlkeCA9IDA7CisJCQlVQ0hBUglUeFJhdGVJZHg7CisJCQkvL1VDSEFSCU1DUzAgPSAwLCBNQ1MxID0gMCwgTUNTMiA9IDAsIE1DUzMgPSAwLCBNQ1M0ID0gMCwgTUNTNyA9IDAsIE1DUzEyID0gMCwgTUNTMTMgPSAwLCBNQ1MxNCA9IDAsIE1DUzE1ID0gMDsKKwkJCVVDSEFSCU1DUzAgPSAwLCBNQ1MxID0gMCwgTUNTMiA9IDAsIE1DUzMgPSAwLCBNQ1M0ID0gMCwgIE1DUzUgPTAsIE1DUzYgPSAwLCBNQ1M3ID0gMDsKKwkgICAgICAgIFVDSEFSCU1DUzEyID0gMCwgTUNTMTMgPSAwLCBNQ1MxNCA9IDAsIE1DUzE1ID0gMDsKKwkJCVVDSEFSCU1DUzIwID0gMCwgTUNTMjEgPSAwLCBNQ1MyMiA9IDAsIE1DUzIzID0gMDsgLy8gMyozCisKKwkJCS8vIGNoZWNrIHRoZSBleGlzdGVuY2UgYW5kIGluZGV4IG9mIGVhY2ggbmVlZGVkIE1DUworCQkJd2hpbGUgKGlkeCA8IHBUYWJsZVswXSkKKwkJCXsKKwkJCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoaWR4KzEpKjVdOworCisJCQkJaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18wKQorCQkJCXsKKwkJCQkJTUNTMCA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEpCisJCQkJeworCQkJCQlNQ1MxID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMikKKwkJCQl7CisJCQkJCU1DUzIgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18zKQorCQkJCXsKKwkJCQkJTUNTMyA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzQpCisJCQkJeworCQkJCQlNQ1M0ID0gaWR4OworCQkJCX0KKwkgICAgICAgICAgICBlbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNSkKKwkgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgIE1DUzUgPSBpZHg7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU182KQorCSAgICAgICAgICAgIHsKKwkgICAgICAgICAgICAgICAgTUNTNiA9IGlkeDsKKwkgICAgICAgICAgICB9CisJCQkJLy9lbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNykKKwkJCQllbHNlIGlmICgocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzcpICYmIChwQ3VyclR4UmF0ZS0+U2hvcnRHSSA9PSBHSV84MDApKQkvLyBwcmV2ZW50IHRoZSBoaWdoZXN0IE1DUyB1c2luZyBzaG9ydCBHSSB3aGVuIDFUIGFuZCBsb3cgdGhyb3VnaHB1dAorCQkJCXsKKwkJCQkJTUNTNyA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEyKQorCQkJCXsKKwkJCQkJTUNTMTIgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18xMykKKwkJCQl7CisJCQkJCU1DUzEzID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMTQpCisJCQkJeworCQkJCQlNQ1MxNCA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18xNSkgJiYgKHBDdXJyVHhSYXRlLT5TaG9ydEdJID09IEdJXzgwMCkpCisJCQkJeworCQkJCQlNQ1MxNSA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzIwKSAvLyAzKjMKKwkJCQl7CisJCQkJCU1DUzIwID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMjEpCisJCQkJeworCQkJCQlNQ1MyMSA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzIyKQorCQkJCXsKKwkJCQkJTUNTMjIgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMykKKwkJCQl7CisJCQkJCU1DUzIzID0gaWR4OworCQkJCX0KKwkJCQlpZHggKys7CisJCQl9CisKKwkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJCQl7CisJCQkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcpCisJCQkJeworCQkJCQlSc3NpT2Zmc2V0ID0gMjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUnNzaU9mZnNldCA9IDU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JBKQorCQkJCXsKKwkJCQkJUnNzaU9mZnNldCA9IDU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJzc2lPZmZzZXQgPSA4OworCQkJCX0KKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8qaWYgKE1DUzE1KSovCisJCQlpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjNTKSB8fAorCQkJCShwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOM1MpIHx8CisJCQkJKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUpKQorCQkJey8vIE4gbW9kZSB3aXRoIDMgc3RyZWFtIC8vIDMqMworCQkJCWlmIChNQ1MyMyAmJiAoUnNzaSA+PSAtNzApKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxNTsKKwkJCQllbHNlIGlmIChNQ1MyMiAmJiAoUnNzaSA+PSAtNzIpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxNDsKKyAgICAgICAgCSAgICBlbHNlIGlmIChNQ1MyMSAmJiAoUnNzaSA+PSAtNzYpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxMzsKKwkJCQllbHNlIGlmIChNQ1MyMCAmJiAoUnNzaSA+PSAtNzgpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxMjsKKwkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPj0gLTgyKSkKKwkJCQlUeFJhdGVJZHggPSBNQ1M0OworCQkJZWxzZSBpZiAoTUNTMyAmJiAoUnNzaSA+PSAtODQpKQorCQkJCVR4UmF0ZUlkeCA9IE1DUzM7CisJCQllbHNlIGlmIChNQ1MyICYmIChSc3NpID49IC04NikpCisJCQkJVHhSYXRlSWR4ID0gTUNTMjsKKwkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPj0gLTg4KSkKKwkJCQlUeFJhdGVJZHggPSBNQ1MxOworCQkJZWxzZQorCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCX0KKy8vCQllbHNlIGlmICgocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlMpIHx8IChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kKSB8fChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMlMpIHx8KHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZSkpCisJCWVsc2UgaWYgKChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yUykgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmQpIHx8KHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yUykgfHwocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQpKSAvLyAzKjMKKwkJCXsvLyBOIG1vZGUgd2l0aCAyIHN0cmVhbQorCQkJCWlmIChNQ1MxNSAmJiAoUnNzaSA+PSAoLTcwK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTU7CisJCQkJZWxzZSBpZiAoTUNTMTQgJiYgKFJzc2kgPj0gKC03MitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzE0OworCQkJCWVsc2UgaWYgKE1DUzEzICYmIChSc3NpID49ICgtNzYrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxMzsKKwkJCQllbHNlIGlmIChNQ1MxMiAmJiAoUnNzaSA+PSAoLTc4K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTI7CisJCQkJZWxzZSBpZiAoTUNTNCAmJiAoUnNzaSA+PSAoLTgyK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNDsKKwkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID49ICgtODQrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MzOworCQkJCWVsc2UgaWYgKE1DUzIgJiYgKFJzc2kgPj0gKC04NitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzI7CisJCQkJZWxzZSBpZiAoTUNTMSAmJiAoUnNzaSA+PSAoLTg4K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCQllbHNlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCQl9CisJCQllbHNlIGlmICgocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVMpIHx8IChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMVMpKQorCQkJey8vIE4gbW9kZSB3aXRoIDEgc3RyZWFtCisJCQkJaWYgKE1DUzcgJiYgKFJzc2kgPiAoLTcyK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNzsKKwkJCQllbHNlIGlmIChNQ1M2ICYmIChSc3NpID4gKC03NCtSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzY7CisJCQkJZWxzZSBpZiAoTUNTNSAmJiAoUnNzaSA+ICgtNzcrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M1OworCQkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPiAoLTc5K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNDsKKwkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID4gKC04MStSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzM7CisJCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+ICgtODMrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MyOworCQkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPiAoLTg2K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCQllbHNlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7Ly8gTGVnYWN5IG1vZGUKKwkJCQlpZiAoTUNTNyAmJiAoUnNzaSA+IC03MCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzc7CisJCQkJZWxzZSBpZiAoTUNTNiAmJiAoUnNzaSA+IC03NCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzY7CisJCQkJZWxzZSBpZiAoTUNTNSAmJiAoUnNzaSA+IC03OCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzU7CisJCQkJZWxzZSBpZiAoTUNTNCAmJiAoUnNzaSA+IC04MikpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzQ7CisJCQkJZWxzZSBpZiAoTUNTNCA9PSAwKQkvLyBmb3IgQi1vbmx5IG1vZGUKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKKwkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID4gLTg1KSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKKwkJCQllbHNlIGlmIChNQ1MyICYmIChSc3NpID4gLTg3KSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMjsKKwkJCQllbHNlIGlmIChNQ1MxICYmIChSc3NpID4gLTkwKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCQllbHNlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCQl9CisKKwkvLwkJaWYgKFR4UmF0ZUlkeCAhPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCkKKwkJCXsKKwkJCQlwRW50cnktPkN1cnJUeFJhdGVJbmRleCA9IFR4UmF0ZUlkeDsKKwkJCQlwTmV4dFR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsocEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgrMSkqNV07CisJCQkJTWxtZVNldFR4UmF0ZShwQWQsIHBFbnRyeSwgcE5leHRUeFJhdGUpOworCQkJfQorCisJCQlOZGlzWmVyb01lbW9yeShwRW50cnktPlR4UXVhbGl0eSwgc2l6ZW9mKFVTSE9SVCkgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisJCQlOZGlzWmVyb01lbW9yeShwRW50cnktPlBFUiwgc2l6ZW9mKFVDSEFSKSAqIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKKwkJCXBFbnRyeS0+Zkxhc3RTZWNBY2NvcmRpbmdSU1NJID0gVFJVRTsKKwkJCS8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworCQkJUkVTRVRfT05FX1NFQ19UWF9DTlQocEVudHJ5KTsKKworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocEVudHJ5LT5mTGFzdFNlY0FjY29yZGluZ1JTU0kgPT0gVFJVRSkKKwkJeworCQkJcEVudHJ5LT5mTGFzdFNlY0FjY29yZGluZ1JTU0kgPSBGQUxTRTsKKwkJCXBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9IDA7CisJCQkvLyByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMKKwkJCVJFU0VUX09ORV9TRUNfVFhfQ05UKHBFbnRyeSk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZG8KKwkJeworCQkJQk9PTEVBTgliVHJhaW5VcERvd24gPSBGQUxTRTsKKworCQkJcEVudHJ5LT5DdXJyVHhSYXRlU3RhYmxlVGltZSArKzsKKworCQkJLy8gZG93bmdyYWRlIFRYIHF1YWxpdHkgaWYgUEVSID49IFJhdGUtRG93biB0aHJlc2hvbGQKKwkJCWlmIChUeEVycm9yUmF0aW8gPj0gVHJhaW5Eb3duKQorCQkJeworCQkJCWJUcmFpblVwRG93biA9IFRSVUU7CisJCQkJcEVudHJ5LT5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0gRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQ7CisJCQl9CisJCQkvLyB1cGdyYWRlIFRYIHF1YWxpdHkgaWYgUEVSIDw9IFJhdGUtVXAgdGhyZXNob2xkCisJCQllbHNlIGlmIChUeEVycm9yUmF0aW8gPD0gVHJhaW5VcCkKKwkJCXsKKwkJCQliVHJhaW5VcERvd24gPSBUUlVFOworCQkJCWJVcGdyYWRlUXVhbGl0eSA9IFRSVUU7CisJCQkJaWYgKHBFbnRyeS0+VHhRdWFsaXR5W0N1cnJSYXRlSWR4XSkKKwkJCQkJcEVudHJ5LT5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdIC0tOyAgLy8gcXVhbGl0eSB2ZXJ5IGdvb2QgaW4gQ3VyclJhdGUKKworCQkJCWlmIChwRW50cnktPlR4UmF0ZVVwUGVuYWx0eSkKKwkJCQkJcEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkgLS07CisJCQkJZWxzZSBpZiAocEVudHJ5LT5UeFF1YWxpdHlbVXBSYXRlSWR4XSkKKwkJCQkJcEVudHJ5LT5UeFF1YWxpdHlbVXBSYXRlSWR4XSAtLTsgICAgLy8gbWF5IGltcHJvdmUgbmV4dCBVUCByYXRlJ3MgcXVhbGl0eQorCQkJfQorCisJCQlwRW50cnktPlBFUltDdXJyUmF0ZUlkeF0gPSAoVUNIQVIpVHhFcnJvclJhdGlvOworCisJCQlpZiAoYlRyYWluVXBEb3duKQorCQkJeworCQkJCS8vIHBlcmZvcm0gRFJTIC0gY29uc2lkZXIgVHhSYXRlIERvd24gZmlyc3QsIHRoZW4gcmF0ZSB1cC4KKwkJCQlpZiAoKEN1cnJSYXRlSWR4ICE9IERvd25SYXRlSWR4KSAmJiAocEVudHJ5LT5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID49IERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EKSkKKwkJCQl7CisJCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID0gRG93blJhdGVJZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKChDdXJyUmF0ZUlkeCAhPSBVcFJhdGVJZHgpICYmIChwRW50cnktPlR4UXVhbGl0eVtVcFJhdGVJZHhdIDw9IDApKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7CisJCQkJfQorCQkJfQorCQl9IHdoaWxlIChGQUxTRSk7CisKKwkJLy8gaWYgcmF0ZS11cCBoYXBwZW4sIGNsZWFyIGFsbCBiYWQgaGlzdG9yeSBvZiBhbGwgVFggcmF0ZXMKKwkJaWYgKHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID4gQ3VyclJhdGVJZHgpCisJCXsKKwkJCXBFbnRyeS0+Q3VyclR4UmF0ZVN0YWJsZVRpbWUgPSAwOworCQkJcEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkgPSAwOworCQkJcEVudHJ5LT5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID0gMTsgLy8gcmF0ZSBVUAorCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5UeFF1YWxpdHksIHNpemVvZihVU0hPUlQpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5QRVIsIHNpemVvZihVQ0hBUikgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisKKwkJCS8vCisJCQkvLyBGb3IgVHhSYXRlIGZhc3QgdHJhaW4gdXAKKwkJCS8vCisJCQlpZiAoIXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZykKKwkJCXsKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLCAxMDApOworCisJCQkJcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nID0gVFJVRTsKKwkJCX0KKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQkvLyBpZiByYXRlLWRvd24gaGFwcGVuLCBvbmx5IGNsZWFyIERvd25SYXRlJ3MgYmFkIGhpc3RvcnkKKwkJZWxzZSBpZiAocEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPCBDdXJyUmF0ZUlkeCkKKwkJeworCQkJcEVudHJ5LT5DdXJyVHhSYXRlU3RhYmxlVGltZSA9IDA7CisJCQlwRW50cnktPlR4UmF0ZVVwUGVuYWx0eSA9IDA7ICAgICAgICAgICAvLyBubyBwZW5hbHR5CisJCQlwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAyOyAvLyByYXRlIERPV04KKwkJCXBFbnRyeS0+VHhRdWFsaXR5W3BFbnRyeS0+Q3VyclR4UmF0ZUluZGV4XSA9IDA7CisJCQlwRW50cnktPlBFUltwRW50cnktPkN1cnJUeFJhdGVJbmRleF0gPSAwOworCisJCQkvLworCQkJLy8gRm9yIFR4UmF0ZSBmYXN0IHRyYWluIGRvd24KKwkJCS8vCisJCQlpZiAoIXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZykKKwkJCXsKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLCAxMDApOworCisJCQkJcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nID0gVFJVRTsKKwkJCX0KKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9IDA7IC8vIHJhdGUgbm8gY2hhbmdlCisJCQliVHhSYXRlQ2hhbmdlZCA9IEZBTFNFOworCQl9CisKKwkJcEVudHJ5LT5MYXN0VHhPa0NvdW50ID0gVHhTdWNjZXNzOworCisJCS8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworCQlSRVNFVF9PTkVfU0VDX1RYX0NOVChwRW50cnkpOworCisJCXBOZXh0VHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhwRW50cnktPkN1cnJUeFJhdGVJbmRleCsxKSo1XTsKKwkJaWYgKGJUeFJhdGVDaGFuZ2VkICYmIHBOZXh0VHhSYXRlKQorCQl7CisJCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwTmV4dFR4UmF0ZSk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU3RhdGlvbiBzaWRlLCBBdXRvIFR4UmF0ZSBmYXN0ZXIgdHJhaW4gdXAgdGltZXIgY2FsbCBiYWNrIGZ1bmN0aW9uLgorCisJQXJndW1lbnRzOgorCQlTeXN0ZW1TcGVjaWZpYzEJCQktIE5vdCB1c2VkLgorCQlGdW5jdGlvbkNvbnRleHQJCQktIFBvaW50ZXIgdG8gb3VyIEFkYXB0ZXIgY29udGV4dC4KKwkJU3lzdGVtU3BlY2lmaWMyCQkJLSBOb3QgdXNlZC4KKwkJU3lzdGVtU3BlY2lmaWMzCQkJLSBOb3QgdXNlZC4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlQUlRNUF9BREFQVEVSCQkJcEFkID0gKFBSVE1QX0FEQVBURVIpRnVuY3Rpb25Db250ZXh0OworCVVDSEFSCQkJCQlVcFJhdGVJZHggPSAwLCBEb3duUmF0ZUlkeCA9IDAsIEN1cnJSYXRlSWR4ID0gMDsKKwlVTE9ORwkJCQkJVHhUb3RhbENudDsKKwlVTE9ORwkJCQkJVHhFcnJvclJhdGlvID0gMDsKKwlCT09MRUFOCQkJCQliVHhSYXRlQ2hhbmdlZDsgLy8sIGJVcGdyYWRlUXVhbGl0eSA9IEZBTFNFOworCVBSVE1QX1RYX1JBVEVfU1dJVENICXBDdXJyVHhSYXRlLCBwTmV4dFR4UmF0ZSA9IE5VTEw7CisJUFVDSEFSCQkJCQlwVGFibGU7CisJVUNIQVIJCQkJCVRhYmxlU2l6ZSA9IDA7CisJVUNIQVIJCQkJCUluaXRUeFJhdGVJZHggPSAwLCBUcmFpblVwLCBUcmFpbkRvd247CisJVFhfU1RBX0NOVDFfU1RSVUMJCVN0YVR4MTsKKwlUWF9TVEFfQ05UMF9TVFJVQwkJVHhTdGFDbnQwOworCUNIQVIJCQkJCVJzc2ksIHJhdGlvOworCVVMT05HCQkJCQlUeFJldHJhbnNtaXQgPSAwLCBUeFN1Y2Nlc3MgPSAwLCBUeEZhaWxDb3VudCA9IDA7CisJTUFDX1RBQkxFX0VOVFJZCQkJKnBFbnRyeTsKKwlVTE9ORwkJCQkJaTsKKworCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IEZBTFNFOworCisgICAgLy8KKyAgICAvLyB3YWxrIHRocm91Z2ggTUFDIHRhYmxlLCBzZWUgaWYgbmVlZCB0byBjaGFuZ2UgQVAncyBUWCByYXRlIHRvd2FyZCBlYWNoIGVudHJ5CisgICAgLy8KKwlmb3IgKGkgPSAxOyBpIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOworCisJCS8vIGNoZWNrIGlmIHRoaXMgZW50cnkgbmVlZCB0byBzd2l0Y2ggcmF0ZSBhdXRvbWF0aWNhbGx5CisJCWlmIChSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKHBBZCwgcEVudHJ5KSA9PSBGQUxTRSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChJTkZSQV9PTihwQWQpICYmIChpID09IDEpKQorCQkJUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwKKwkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwLAorCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEsCisJCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMik7CisJCWVsc2UKKwkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kwLAorCQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMSwKKwkJCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCisJCUN1cnJSYXRlSWR4ID0gcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXg7CisKKwkJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJkluaXRUeFJhdGVJZHgpOworCisJCS8vIGRlY2lkZSB0aGUgbmV4dCB1cGdyYWRlIHJhdGUgYW5kIGRvd25ncmFkZSByYXRlLCBpZiBhbnkKKwkJaWYgKChDdXJyUmF0ZUlkeCA+IDApICYmIChDdXJyUmF0ZUlkeCA8IChUYWJsZVNpemUgLSAxKSkpCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4ICsgMTsKKwkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHggLTE7CisJCX0KKwkJZWxzZSBpZiAoQ3VyclJhdGVJZHggPT0gMCkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHggKyAxOworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeDsKKwkJfQorCQllbHNlIGlmIChDdXJyUmF0ZUlkeCA9PSAoVGFibGVTaXplIC0gMSkpCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4OworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeCAtIDE7CisJCX0KKworCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoQ3VyclJhdGVJZHgrMSkqNV07CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKChSc3NpID4gLTY1KSAmJiAocEN1cnJUeFJhdGUtPk1vZGUgPj0gTU9ERV9IVE1JWCkpCisJCXsKKwkJCVRyYWluVXAJCT0gKHBDdXJyVHhSYXRlLT5UcmFpblVwICsgKHBDdXJyVHhSYXRlLT5UcmFpblVwID4+IDEpKTsKKwkJCVRyYWluRG93bgk9IChwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duICsgKHBDdXJyVHhSYXRlLT5UcmFpbkRvd24gPj4gMSkpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJVHJhaW5VcAkJPSBwQ3VyclR4UmF0ZS0+VHJhaW5VcDsKKwkJCVRyYWluRG93bgk9IHBDdXJyVHhSYXRlLT5UcmFpbkRvd247CisJCX0KKworCQlpZiAocEFkLT5NYWNUYWIuU2l6ZSA9PSAxKQorCQl7CisJCQkvLyBVcGRhdGUgc3RhdGlzdGljIGNvdW50ZXIKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZUeFN0YUNudDAud29yZCk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmU3RhVHgxLndvcmQpOworCisJCQlUeFJldHJhbnNtaXQgPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCQkJVHhTdWNjZXNzID0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCVR4RmFpbENvdW50ID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJVHhUb3RhbENudCA9IFR4UmV0cmFuc21pdCArIFR4U3VjY2VzcyArIFR4RmFpbENvdW50OworCisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICs9IFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydCArPSBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOworCQkJcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCArPSBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgoVHhSZXRyYW5zbWl0ICsgVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeFRvdGFsQ250ID0gcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkgcEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgocEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKworCisJCS8vCisJCS8vIENBU0UgMS4gd2hlbiBUWCBzYW1wbGVzIGFyZSBmZXdlciB0aGFuIDE1LCB0aGVuIGRlY2lkZSBUWCByYXRlIHNvbGVseSBvbiBSU1NJCisJCS8vICAgICAgICAgKGNyaXRlcmlhIGNvcGllZCBmcm9tIFJUMjUwMCBmb3IgTmV0b3BpYSBjYXNlKQorCQkvLworCQlpZiAoVHhUb3RhbENudCA8PSAxMikKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHksIHNpemVvZihVU0hPUlQpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5QRVIsIHNpemVvZihVQ0hBUikgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisKKwkJCWlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09IDEpICYmIChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBEb3duUmF0ZUlkeDsKKwkJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0gPSBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORDsKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPT0gMikgJiYgKEN1cnJSYXRlSWR4ICE9IFVwUmF0ZUlkeCkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7CisJCQl9CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIlF1aWNrRFJTOiBUeFRvdGFsQ250IDw9IDE1LCB0cmFpbiBiYWNrIHRvIG9yaWdpbmFsIHJhdGUgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKworCQlkbworCQl7CisJCQlVTE9ORyBPbmVTZWNUeE5vUmV0cnlPS1JhdGlvbkNvdW50OworCisJCQlpZiAocEFkLT5EcnNDb3VudGVycy5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9PSAwKQorCQkJCXJhdGlvID0gNTsKKwkJCWVsc2UKKwkJCQlyYXRpbyA9IDQ7CisKKwkJCS8vIGRvd25ncmFkZSBUWCBxdWFsaXR5IGlmIFBFUiA+PSBSYXRlLURvd24gdGhyZXNob2xkCisJCQlpZiAoVHhFcnJvclJhdGlvID49IFRyYWluRG93bikKKwkJCXsKKwkJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0gPSBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORDsKKwkJCX0KKworCQkJcEFkLT5EcnNDb3VudGVycy5QRVJbQ3VyclJhdGVJZHhdID0gKFVDSEFSKVR4RXJyb3JSYXRpbzsKKworCQkJT25lU2VjVHhOb1JldHJ5T0tSYXRpb25Db3VudCA9IChUeFN1Y2Nlc3MgKiByYXRpbyk7CisKKwkJCS8vIHBlcmZvcm0gRFJTIC0gY29uc2lkZXIgVHhSYXRlIERvd24gZmlyc3QsIHRoZW4gcmF0ZSB1cC4KKwkJCWlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09IDEpICYmIChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkpCisJCQl7CisJCQkJaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RUeE9rQ291bnQgKyAyKSA+PSBPbmVTZWNUeE5vUmV0cnlPS1JhdGlvbkNvdW50KQorCQkJCXsKKwkJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBEb3duUmF0ZUlkeDsKKwkJCQkJcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0gRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQ7CisKKwkJCQl9CisKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPT0gMikgJiYgKEN1cnJSYXRlSWR4ICE9IFVwUmF0ZUlkeCkpCisJCQl7CisJCQkJaWYgKChUeEVycm9yUmF0aW8gPj0gNTApIHx8IChUeEVycm9yUmF0aW8gPj0gVHJhaW5Eb3duKSkKKwkJCQl7CisKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFR4T2tDb3VudCArIDIpID49IE9uZVNlY1R4Tm9SZXRyeU9LUmF0aW9uQ291bnQpCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IFVwUmF0ZUlkeDsKKwkJCQl9CisJCQl9CisJCX13aGlsZSAoRkFMU0UpOworCisJCS8vIGlmIHJhdGUtdXAgaGFwcGVuLCBjbGVhciBhbGwgYmFkIGhpc3Rvcnkgb2YgYWxsIFRYIHJhdGVzCisJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA+IEN1cnJSYXRlSWR4KQorCQl7CisJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UmF0ZVVwUGVuYWx0eSA9IDA7CisJCQlOZGlzWmVyb01lbW9yeShwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eSwgc2l6ZW9mKFVTSE9SVCkgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisJCQlOZGlzWmVyb01lbW9yeShwQWQtPkRyc0NvdW50ZXJzLlBFUiwgc2l6ZW9mKFVDSEFSKSAqIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQkvLyBpZiByYXRlLWRvd24gaGFwcGVuLCBvbmx5IGNsZWFyIERvd25SYXRlJ3MgYmFkIGhpc3RvcnkKKwkJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPCBDdXJyUmF0ZUlkeCkKKwkJeworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiUXVpY2tEUlM6IC0tVFggcmF0ZSBmcm9tICVkIHRvICVkIFxuIiwgQ3VyclJhdGVJZHgsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4KSk7CisKKwkJCXBBZC0+RHJzQ291bnRlcnMuVHhSYXRlVXBQZW5hbHR5ID0gMDsgICAgICAgICAgIC8vIG5vIHBlbmFsdHkKKwkJCXBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4XSA9IDA7CisJCQlwQWQtPkRyc0NvdW50ZXJzLlBFUltwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleF0gPSAwOworCQkJYlR4UmF0ZUNoYW5nZWQgPSBUUlVFOworCQl9CisJCWVsc2UKKwkJeworCQkJYlR4UmF0ZUNoYW5nZWQgPSBGQUxTRTsKKwkJfQorCisJCXBOZXh0VHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCsxKSo1XTsKKwkJaWYgKGJUeFJhdGVDaGFuZ2VkICYmIHBOZXh0VHhSYXRlKQorCQl7CisJCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwTmV4dFR4UmF0ZSk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIGlzIGV4ZWN1dGVkIHBlcmlvZGljYWxseSBpbnNpZGUgTWxtZVBlcmlvZGljRXhlYygpIGFmdGVyCisJCWFzc29jaWF0aW9uIHdpdGggYW4gQVAuCisJCUl0IGNoZWNrcyBpZiBTdGFDZmcuUHNtIGlzIGNvbnNpc3RlbnQgd2l0aCB1c2VyIHBvbGljeSAocmVjb3JkZWQgaW4KKwkJU3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUpLiBJZiBub3QsIGVuZm9yY2UgdXNlciBwb2xpY3kuIEhvd2V2ZXIsCisJCXRoZXJlJ3JlIHNvbWUgY29uZGl0aW9ucyB0byBjb25zaWRlcjoKKwkJMS4gd2UgZG9uJ3Qgc3VwcG9ydCBwb3dlci1zYXZpbmcgaW4gQURIT0MgbW9kZSwgc28gUHNtPVBXUl9BQ1RJVkUgYWxsCisJCSAgIHRoZSB0aW1lIHdoZW4gTWlic3M9PVRSVUUKKwkJMi4gV2hlbiBsaW5rIHVwIGluIElORlJBIG1vZGUsIFBzbSBzaG91bGQgbm90IGJlIHN3aXRjaCB0byBQV1JfU0FWRQorCQkgICBpZiBvdXRnb2luZyB0cmFmZmljIGF2YWlsYWJsZSBpbiBUeFJpbmcgb3IgTWdtdFJpbmcuCisJT3V0cHV0OgorCQkxLiBjaGFuZ2UgcEFkLT5TdGFDZmcuUHNtIHRvIFBXUl9TQVZFIG9yIGxlYXZlIGl0IHVudG91Y2hlZAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVDaGVja1BzbUNoYW5nZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORwlOb3czMikKK3sKKwlVTE9ORwlQb3dlck1vZGU7CisKKwkvLyBjb25kaXRpb24gLQorCS8vIDEuIFBzbSBtYXliZSBPTiBvbmx5IGhhcHBlbiBpbiBJTkZSQVNUUlVDVFVSRSBtb2RlCisJLy8gMi4gdXNlciB3YW50cyBlaXRoZXIgTUFYX1BTUCBvciBGQVNUX1BTUAorCS8vIDMuIGJ1dCBjdXJyZW50IHBzbSBpcyBub3QgaW4gUFdSX1NBVkUKKwkvLyA0LiBDTlRMIHN0YXRlIG1hY2hpbmUgaXMgbm90IGRvaW5nIFNDQU5uaW5nCisJLy8gNS4gbm8gVFggU1VDQ0VTUyBldmVudCBmb3IgdGhlIHBhc3QgMS1zZWMgcGVyaW9kCisjaWZkZWYgTkRJUzUxX01JTklQT1JUCisJaWYgKHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlclByb2ZpbGUgPT0gTmRpc1Bvd2VyUHJvZmlsZUJhdHRlcnkpCisJCVBvd2VyTW9kZSA9IHBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlOworCWVsc2UKKyNlbmRpZgorCQlQb3dlck1vZGUgPSBwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlOworCisJaWYgKElORlJBX09OKHBBZCkgJiYKKwkJKFBvd2VyTW9kZSAhPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKSAmJgorCQkocEFkLT5TdGFDZmcuUHNtID09IFBXUl9BQ1RJVkUpICYmCisvLwkJKCEgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSAvKiYmCisJCShwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPT0gMCkgJiYKKwkJKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgPT0gMCkqLykKKwl7CisJCS8vIGFkZCBieSBqb2hubGksIHVzZSBSeCBPSyBkYXRhIGNvdW50IHBlciBzZWNvbmQgdG8gY2FsY3VsYXRlIHRocm91Z2hwdXQKKwkJLy8gSWYgVHRyYWZmaWMgaXMgdG9vIGhpZ2ggKCA+IDQwMCBSeCBwZXIgc2Vjb25kKSwgZG9uJ3QgZ28gdG8gc2xlZXAgbW9kZS4gSWYgdHggcmF0ZSBpcyBsb3csIHVzZSBsb3cgY3JpdGVyaWEKKwkJLy8gTW9kZT1DQ0svTUNTPTMgPT4gMTEgTWJwcywgTW9kZT1PRkRNL01DUz0zID0+IDE4IE1icHMKKwkJaWYgKCgocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA8PSAzKSAmJgorLyogSXZlcnNvbiBtYXJrCisJCQkJKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgJiYKKyovCisJCQkJKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0RhdGFDbnQgPCAoVUxPTkcpMTAwKSkgfHwKKwkJCSgocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA+IDMpICYmCisvKiBJdmVyc29uIG1hcmsKKwkJCShwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA+IE1PREVfT0ZETSkgJiYKKyovCisJCQkocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rRGF0YUNudCA8IChVTE9ORyk0MDApKSkKKwkJeworCQkJCS8vIEdldCB0aGlzIHRpbWUKKwkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+TWxtZS5MYXN0U2VuZE5VTExwc21UaW1lKTsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwgPSAwOworCQkJTWxtZVNldFBzbUJpdChwQWQsIFBXUl9TQVZFKTsKKwkJCWlmICghKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSkpCisJCQl7CisJCQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUsIEZBTFNFKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgVFJVRSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVNldFBzbUJpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgcHNtKQoreworCUFVVE9fUlNQX0NGR19TVFJVQyBjc3I0OworCisJcEFkLT5TdGFDZmcuUHNtID0gcHNtOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmY3NyNC53b3JkKTsKKwljc3I0LmZpZWxkLkFja0N0c1BzbUJpdCA9IChwc20gPT0gUFdSX1NBVkUpPyAxOjA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCBjc3I0LndvcmQpOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBNbG1lU2V0VHhQcmVhbWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgVHhQcmVhbWJsZSkKK3sKKwlBVVRPX1JTUF9DRkdfU1RSVUMgY3NyNDsKKworCS8vCisJLy8gQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuCisJLy8gVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzCisJLy8KKwkvL1R4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlTG9uZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmY3NyNC53b3JkKTsKKwlpZiAoVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlTG9uZykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVTZXRUeFByZWFtYmxlICg9IExPTkcgUFJFQU1CTEUpXG4iKSk7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJCWNzcjQuZmllbGQuQXV0b1Jlc3BvbmRlclByZWFtYmxlID0gMDsKKwl9CisJZWxzZQorCXsKKwkJLy8gTk9URTogMU1icHMgc2hvdWxkIGFsd2F5cyB1c2UgbG9uZyBwcmVhbWJsZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2V0VHhQcmVhbWJsZSAoPSBTSE9SVCBQUkVBTUJMRSlcbiIpKTsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJCWNzcjQuZmllbGQuQXV0b1Jlc3BvbmRlclByZWFtYmxlID0gMTsKKwl9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1JTUF9DRkcsIGNzcjQud29yZCk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgVXBkYXRlIGJhc2ljIHJhdGUgYml0bWFwCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCitWT0lEIFVwZGF0ZUJhc2ljUmF0ZUJpdG1hcCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyKQoreworICAgIElOVCAgaSwgajsKKyAgICAgICAgICAgICAgICAgIC8qIDEgIDIgIDUuNSwgMTEsICA2LCAgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCAgNTQgKi8KKyAgICBVQ0hBUiByYXRlW10gPSB7IDIsIDQsICAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDggfTsKKyAgICBVQ0hBUiAqc3VwX3AgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlN1cFJhdGU7CisgICAgVUNIQVIgKmV4dF9wID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5FeHRSYXRlOworICAgIFVMT05HIGJpdG1hcCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwOworCisKKyAgICAvKiBpZiBBIG1vZGUsIGFsd2F5cyB1c2UgZml4IEJhc2ljUmF0ZUJpdE1hcCAqLworICAgIC8vaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCA9PSBQSFlfMTFBKQorCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5CYXNpY1JhdGVCaXRtYXAgPSAweDE1MDsgLyogNiwgMTIsIDI0TSAqLworICAgIC8qIEVuZCBvZiBpZiAqLworCisgICAgaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID4gNDA5NSkKKyAgICB7CisgICAgICAgIC8qICgyIF4gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpIC0xICovCisgICAgICAgIHJldHVybjsKKyAgICB9IC8qIEVuZCBvZiBpZiAqLworCisgICAgZm9yKGk9MDsgaTxNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaSsrKQorICAgIHsKKyAgICAgICAgc3VwX3BbaV0gJj0gMHg3ZjsKKyAgICAgICAgZXh0X3BbaV0gJj0gMHg3ZjsKKyAgICB9IC8qIEVuZCBvZiBmb3IgKi8KKworICAgIGZvcihpPTA7IGk8TUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChiaXRtYXAgJiAoMSA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKGo9MDsgajxNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzdXBfcFtqXSA9PSByYXRlW2ldKQorICAgICAgICAgICAgICAgICAgICBzdXBfcFtqXSB8PSAweDgwOworICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBpZiAqLworICAgICAgICAgICAgfSAvKiBFbmQgb2YgZm9yICovCisKKyAgICAgICAgICAgIGZvcihqPTA7IGo8TUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0X3Bbal0gPT0gcmF0ZVtpXSkKKyAgICAgICAgICAgICAgICAgICAgZXh0X3Bbal0gfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAvKiBFbmQgb2YgaWYgKi8KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIGZvciAqLworICAgICAgICB9IC8qIEVuZCBvZiBpZiAqLworICAgIH0gLyogRW5kIG9mIGZvciAqLworfSAvKiBFbmQgb2YgVXBkYXRlQmFzaWNSYXRlQml0bWFwICovCisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKy8vIGJMaW5rVXAgaXMgdG8gaWRlbnRpZnkgdGhlIGluaXRhbCBsaW5rIHNwZWVkLgorLy8gVFJVRSBpbmRpY2F0ZXMgdGhlIHJhdGUgdXBkYXRlIGF0IGxpbmt1cCwgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc2V0IHRoZSByYXRlIGF0IDU0TWJwcy4KK1ZPSUQgTWxtZVVwZGF0ZVR4UmF0ZXMoCisJSU4gUFJUTVBfQURBUFRFUiAJCXBBZCwKKwlJTiAJQk9PTEVBTgkJIAkJYkxpbmtVcCwKKwlJTglVQ0hBUgkJCQlhcGlkeCkKK3sKKwlpbnQgaSwgbnVtOworCVVDSEFSIFJhdGUgPSBSQVRFXzYsIE1heERlc2lyZSA9IFJBVEVfMSwgTWF4U3VwcG9ydCA9IFJBVEVfMTsKKwlVQ0hBUiBNaW5TdXBwb3J0ID0gUkFURV81NDsKKwlVTE9ORyBCYXNpY1JhdGVCaXRtYXAgPSAwOworCVVDSEFSIEN1cnJCYXNpY1JhdGUgPSBSQVRFXzE7CisJVUNIQVIgKnBTdXBSYXRlLCBTdXBSYXRlTGVuLCAqcEV4dFJhdGUsIEV4dFJhdGVMZW47CisJUEhUVFJBTlNNSVRfU0VUVElORwkJcEh0UGh5ID0gTlVMTDsKKwlQSFRUUkFOU01JVF9TRVRUSU5HCQlwTWF4SHRQaHkgPSBOVUxMOworCVBIVFRSQU5TTUlUX1NFVFRJTkcJCXBNaW5IdFBoeSA9IE5VTEw7CisJQk9PTEVBTiAJCQkJKmF1dG9fcmF0ZV9jdXJfcDsKKwlVQ0hBUgkJCQkJSHRNY3MgPSBNQ1NfQVVUTzsKKworCS8vIGZpbmQgbWF4IGRlc2lyZWQgcmF0ZQorCVVwZGF0ZUJhc2ljUmF0ZUJpdG1hcChwQWQpOworCisJbnVtID0gMDsKKwlhdXRvX3JhdGVfY3VyX3AgPSBOVUxMOworCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspCisJeworCQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbaV0gJiAweDdmKQorCQl7CisJCQljYXNlIDI6ICBSYXRlID0gUkFURV8xOyAgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSA0OiAgUmF0ZSA9IFJBVEVfMjsgICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTE6IFJhdGUgPSBSQVRFXzVfNTsgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDIyOiBSYXRlID0gUkFURV8xMTsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSAxMjogUmF0ZSA9IFJBVEVfNjsgICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTg6IFJhdGUgPSBSQVRFXzk7ICAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDI0OiBSYXRlID0gUkFURV8xMjsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSAzNjogUmF0ZSA9IFJBVEVfMTg7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgNDg6IFJhdGUgPSBSQVRFXzI0OyAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDcyOiBSYXRlID0gUkFURV8zNjsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSA5NjogUmF0ZSA9IFJBVEVfNDg7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsgbnVtKys7ICAgYnJlYWs7CisJCQkvL2RlZmF1bHQ6IFJhdGUgPSBSQVRFXzE7ICAgYnJlYWs7CisJCX0KKwkJaWYgKE1heERlc2lyZSA8IFJhdGUpICBNYXhEZXNpcmUgPSBSYXRlOworCX0KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcEh0UGh5IAkJPSAmcEFkLT5TdGFDZmcuSFRQaHlNb2RlOworCQlwTWF4SHRQaHkJPSAmcEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlOworCQlwTWluSHRQaHkJPSAmcEFkLT5TdGFDZmcuTWluSFRQaHlNb2RlOworCisJCWF1dG9fcmF0ZV9jdXJfcCA9ICZwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKKwkJSHRNY3MgCQk9IHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOworCisJCWlmICgocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpICYmCisJCQkocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKSAmJgorCQkJKE1heERlc2lyZSA+IFJBVEVfMTEpKQorCQl7CisJCQlNYXhEZXNpcmUgPSBSQVRFXzExOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEFkLT5Db21tb25DZmcuTWF4RGVzaXJlZFJhdGUgPSBNYXhEZXNpcmU7CisJcE1pbkh0UGh5LT53b3JkID0gMDsKKwlwTWF4SHRQaHktPndvcmQgPSAwOworCXBIdFBoeS0+d29yZCA9IDA7CisKKwkvLyBBdXRvIHJhdGUgc3dpdGNoaW5nIGlzIGVuYWJsZWQgb25seSBpZiBtb3JlIHRoYW4gb25lIERFU0lSRUQgUkFURVMgYXJlCisJLy8gc3BlY2lmaWVkOyBvdGhlcndpc2UgZGlzYWJsZWQKKwlpZiAobnVtIDw9IDEpCisJeworCQkvL09QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOworCQkvL3BBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoCT0gRkFMU0U7CisJCSphdXRvX3JhdGVfY3VyX3AgPSBGQUxTRTsKKwl9CisJZWxzZQorCXsKKwkJLy9PUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCk7CisJCS8vcEFkLT5Db21tb25DZmcuYkF1dG9UeFJhdGVTd2l0Y2gJPSBUUlVFOworCQkqYXV0b19yYXRlX2N1cl9wID0gVFJVRTsKKwl9CisKKyNpZiAxCisJaWYgKEh0TWNzICE9IE1DU19BVVRPKQorCXsKKwkJLy9PUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKTsKKwkJLy9wQWQtPkNvbW1vbkNmZy5iQXV0b1R4UmF0ZVN3aXRjaAk9IEZBTFNFOworCQkqYXV0b19yYXRlX2N1cl9wID0gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJCS8vT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOworCQkvL3BBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoCT0gVFJVRTsKKwkJKmF1dG9fcmF0ZV9jdXJfcCA9IFRSVUU7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAoKEFESE9DX09OKHBBZCkgfHwgSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorCXsKKwkJcFN1cFJhdGUgPSAmcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZVswXTsKKwkJcEV4dFJhdGUgPSAmcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZVswXTsKKwkJU3VwUmF0ZUxlbiA9IHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW47CisJCUV4dFJhdGVMZW4gPSBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuOworCX0KKwllbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeworCQlwU3VwUmF0ZSA9ICZwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzBdOworCQlwRXh0UmF0ZSA9ICZwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzBdOworCQlTdXBSYXRlTGVuID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbjsKKwkJRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47CisJfQorCisJLy8gZmluZCBtYXggc3VwcG9ydGVkIHJhdGUKKwlmb3IgKGk9MDsgaTxTdXBSYXRlTGVuOyBpKyspCisJeworCQlzd2l0Y2ggKHBTdXBSYXRlW2ldICYgMHg3ZikKKwkJeworCQkJY2FzZSAyOiAgIFJhdGUgPSBSQVRFXzE7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDE7CSBicmVhazsKKwkJCWNhc2UgNDogICBSYXRlID0gUkFURV8yOwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAyOwkgYnJlYWs7CisJCQljYXNlIDExOiAgUmF0ZSA9IFJBVEVfNV81OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA0OwkgYnJlYWs7CisJCQljYXNlIDIyOiAgUmF0ZSA9IFJBVEVfMTE7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7CSBicmVhazsKKwkJCWNhc2UgMTI6ICBSYXRlID0gUkFURV82OwkvKmlmIChwU3VwUmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMTA7ICBicmVhazsKKwkJCWNhc2UgMTg6ICBSYXRlID0gUkFURV85OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDIwOwkgYnJlYWs7CisJCQljYXNlIDI0OiAgUmF0ZSA9IFJBVEVfMTI7CS8qaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA0MDsgIGJyZWFrOworCQkJY2FzZSAzNjogIFJhdGUgPSBSQVRFXzE4OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDgwOwkgYnJlYWs7CisJCQljYXNlIDQ4OiAgUmF0ZSA9IFJBVEVfMjQ7CS8qaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDEwMDsgIGJyZWFrOworCQkJY2FzZSA3MjogIFJhdGUgPSBSQVRFXzM2OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMjAwOwkgYnJlYWs7CisJCQljYXNlIDk2OiAgUmF0ZSA9IFJBVEVfNDg7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA0MDA7CSBicmVhazsKKwkJCWNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDgwMDsJIGJyZWFrOworCQkJZGVmYXVsdDogIFJhdGUgPSBSQVRFXzE7CWJyZWFrOworCQl9CisJCWlmIChNYXhTdXBwb3J0IDwgUmF0ZSkJTWF4U3VwcG9ydCA9IFJhdGU7CisKKwkJaWYgKE1pblN1cHBvcnQgPiBSYXRlKSBNaW5TdXBwb3J0ID0gUmF0ZTsKKwl9CisKKwlmb3IgKGk9MDsgaTxFeHRSYXRlTGVuOyBpKyspCisJeworCQlzd2l0Y2ggKHBFeHRSYXRlW2ldICYgMHg3ZikKKwkJeworCQkJY2FzZSAyOiAgIFJhdGUgPSBSQVRFXzE7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDE7CSBicmVhazsKKwkJCWNhc2UgNDogICBSYXRlID0gUkFURV8yOwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAyOwkgYnJlYWs7CisJCQljYXNlIDExOiAgUmF0ZSA9IFJBVEVfNV81OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA0OwkgYnJlYWs7CisJCQljYXNlIDIyOiAgUmF0ZSA9IFJBVEVfMTE7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7CSBicmVhazsKKwkJCWNhc2UgMTI6ICBSYXRlID0gUkFURV82OwkvKmlmIChwRXh0UmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMTA7ICBicmVhazsKKwkJCWNhc2UgMTg6ICBSYXRlID0gUkFURV85OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDIwOwkgYnJlYWs7CisJCQljYXNlIDI0OiAgUmF0ZSA9IFJBVEVfMTI7CS8qaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA0MDsgIGJyZWFrOworCQkJY2FzZSAzNjogIFJhdGUgPSBSQVRFXzE4OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDgwOwkgYnJlYWs7CisJCQljYXNlIDQ4OiAgUmF0ZSA9IFJBVEVfMjQ7CS8qaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDEwMDsgIGJyZWFrOworCQkJY2FzZSA3MjogIFJhdGUgPSBSQVRFXzM2OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMjAwOwkgYnJlYWs7CisJCQljYXNlIDk2OiAgUmF0ZSA9IFJBVEVfNDg7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA0MDA7CSBicmVhazsKKwkJCWNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDgwMDsJIGJyZWFrOworCQkJZGVmYXVsdDogIFJhdGUgPSBSQVRFXzE7CWJyZWFrOworCQl9CisJCWlmIChNYXhTdXBwb3J0IDwgUmF0ZSkJTWF4U3VwcG9ydCA9IFJhdGU7CisKKwkJaWYgKE1pblN1cHBvcnQgPiBSYXRlKSBNaW5TdXBwb3J0ID0gUmF0ZTsKKwl9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRUdBQ1lfQkFTSUNfUkFURSwgQmFzaWNSYXRlQml0bWFwKTsKKworCS8vIGNhbGN1bGF0ZSB0aGUgZXhwdGVjdGVkIEFDSyByYXRlIGZvciBlYWNoIFRYIHJhdGUuIFRoaXMgaW5mbyBpcyB1c2VkIHRvIGNhY3VsYXRlCisJLy8gdGhlIERVUkFUSU9OIGZpZWxkIG9mIG91dGdvaW5nIHVuaWljYXN0IERBVEEvTUdNVCBmcmFtZQorCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspCisJeworCQlpZiAoQmFzaWNSYXRlQml0bWFwICYgKDB4MDEgPDwgaSkpCisJCQlDdXJyQmFzaWNSYXRlID0gKFVDSEFSKWk7CisJCXBBZC0+Q29tbW9uQ2ZnLkV4cGVjdGVkQUNLUmF0ZVtpXSA9IEN1cnJCYXNpY1JhdGU7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNbG1lVXBkYXRlVHhSYXRlc1tNYXhTdXBwb3J0ID0gJWRdID0gTWF4RGVzaXJlICVkIE1icHNcbiIsIFJhdGVJZFRvTWJwc1tNYXhTdXBwb3J0XSwgUmF0ZUlkVG9NYnBzW01heERlc2lyZV0pKTsKKwkvLyBtYXggdHggcmF0ZSA9IG1pbiB7bWF4IGRlc2lyZSByYXRlLCBtYXggc3VwcG9ydGVkIHJhdGV9CisJaWYgKE1heFN1cHBvcnQgPCBNYXhEZXNpcmUpCisJCXBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSA9IE1heFN1cHBvcnQ7CisJZWxzZQorCQlwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPSBNYXhEZXNpcmU7CisKKwlwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGUgPSBNaW5TdXBwb3J0OworCS8vIDIwMDMtMDctMzEgam9obiAtIDI1MDAgZG9lc24ndCBoYXZlIGdvb2Qgc2Vuc2l0aXZpdHkgYXQgaGlnaCBPRkRNIHJhdGVzLiB0byBpbmNyZWFzZSB0aGUgc3VjY2VzcworCS8vIHJhdGlvIG9mIGluaXRpYWwgREhDUCBwYWNrZXQgZXhjaGFuZ2UsIFRYIHJhdGUgc3RhcnRzIGZyb20gYSBsb3dlciByYXRlIGRlcGVuZGluZworCS8vIG9uIGF2ZXJhZ2UgUlNTSQorCS8vCSAxLiBSU1NJID49IC03MGRiLCBzdGFydCBhdCA1NCBNYnBzIChzaG9ydCBkaXN0YW5jZSkKKwkvLwkgMi4gLTcwID4gUlNTSSA+PSAtNzUsIHN0YXJ0IGF0IDI0IE1icHMgKG1pZCBkaXN0YW5jZSkKKwkvLwkgMy4gLTc1ID4gUlNTSSwgc3RhcnQgYXQgMTEgTWJwcyAobG9uZyBkaXN0YW5jZSkKKwkvL2lmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpLyogJiYKKwkvLwlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkqLykKKwlpZiAoKmF1dG9fcmF0ZV9jdXJfcCkKKwl7CisJCXNob3J0IGRibSA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlkYm0gPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJaWYgKGJMaW5rVXAgPT0gVFJVRSkKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfMjQ7CisJCWVsc2UKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKKworCQlpZiAoZGJtIDwgLTc1KQorCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV8xMTsKKwkJZWxzZSBpZiAoZGJtIDwgLTcwKQorCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV8yNDsKKworCQkvLyBzaG91bGQgbmV2ZXIgZXhjZWVkIE1heFR4UmF0ZSAoY29uc2lkZXIgMTFCLW9ubHkgbW9kZSkKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA+IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSkKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKKworCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IDA7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKKwkJcEh0UGh5LT5maWVsZC5NQ1MJPSAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4gMykgPyAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlIC0gNCkgOiBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGU7CisJCXBIdFBoeS0+ZmllbGQuTU9ERQk9IChwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPiAzKSA/IE1PREVfT0ZETSA6IE1PREVfQ0NLOworCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLlNUQkMJPSBwSHRQaHktPmZpZWxkLlNUQkM7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kJPSBwSHRQaHktPmZpZWxkLlNob3J0R0k7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwSHRQaHktPmZpZWxkLk1DUzsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBIdFBoeS0+ZmllbGQuTU9ERTsKKwl9CisKKwlpZiAocEFkLT5Db21tb25DZmcuVHhSYXRlIDw9IFJBVEVfMTEpCisJeworCQlwTWF4SHRQaHktPmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGU7CisJCXBNaW5IdFBoeS0+ZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuTWluVHhSYXRlOworCX0KKwllbHNlCisJeworCQlwTWF4SHRQaHktPmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCXBNYXhIdFBoeS0+ZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuVHhSYXRlXTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA+PSBSQVRFXzYgJiYgKHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA8PSBSQVRFXzU0KSkKKwkJCXtwTWluSHRQaHktPmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZV07fQorCQllbHNlCisJCQl7cE1pbkh0UGh5LT5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGU7fQorCX0KKworCXBIdFBoeS0+d29yZCA9IChwTWF4SHRQaHktPndvcmQpOworCWlmIChiTGlua1VwICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwl7CisJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkID0gcEh0UGh5LT53b3JkOworCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NYXhIVFBoeU1vZGUud29yZCA9IHBNYXhIdFBoeS0+d29yZDsKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uTWluSFRQaHlNb2RlLndvcmQgPSBwTWluSHRQaHktPndvcmQ7CisJfQorCWVsc2UKKwl7CisJCXN3aXRjaCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSkKKwkJeworCQkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKwkJCWNhc2UgUEhZXzExQjoKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWNhc2UgUEhZXzExQkdOX01JWEVEOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV8xOworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IFJBVEVfMTsKKworLy8jaWZkZWYJV0lGSV9URVNUCisJCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfMTE7CisvLyNlbHNlCisvLwkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOworLy8jZW5kaWYKKwkJCQlicmVhazsKKwkJCWNhc2UgUEhZXzExRzoKKwkJCWNhc2UgUEhZXzExQToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQkJY2FzZSBQSFlfMTFHTl9NSVhFRDoKKwkJCWNhc2UgUEhZXzExTl8yXzRHOgorCQkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJCWNhc2UgUEhZXzExTl81RzoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV82OworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJCQkJYnJlYWs7CisJCQljYXNlIFBIWV8xMUFCR19NSVhFRDoKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWNhc2UgUEhZXzExQUJHTl9NSVhFRDoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV8xOworCQkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gUkFURV8xOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKKwkJCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfNjsKKwkJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDogLy8gZXJyb3IKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzE7CisJCQkJYnJlYWs7CisJCX0KKwkJLy8KKwkJLy8gS2VlcCBCYXNpYyBNbG1lIFJhdGUuCisJCS8vCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlLndvcmQgPSBwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQud29yZDsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID09IE1PREVfT0ZETSkKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW1JBVEVfMjRdOworCQllbHNlCisJCQlwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBSQVRFXzE7CisJCXBBZC0+Q29tbW9uQ2ZnLkJhc2ljTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTWxtZVVwZGF0ZVR4UmF0ZXMgKE1heERlc2lyZT0lZCwgTWF4U3VwcG9ydD0lZCwgTWF4VHhSYXRlPSVkLCBNaW5SYXRlPSVkLCBSYXRlIFN3aXRjaGluZyA9JWQpXG4iLAorCQkJIFJhdGVJZFRvTWJwc1tNYXhEZXNpcmVdLCBSYXRlSWRUb01icHNbTWF4U3VwcG9ydF0sIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGVdLCBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuTWluVHhSYXRlXSwKKwkJCSAvKk9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkqLyphdXRvX3JhdGVfY3VyX3ApKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTWxtZVVwZGF0ZVR4UmF0ZXMgKFR4UmF0ZT0lZCwgUnRzUmF0ZT0lZCwgQmFzaWNSYXRlQml0bWFwPTB4JTA0bHgpXG4iLAorCQkJIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5UeFJhdGVdLCBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuUnRzUmF0ZV0sIEJhc2ljUmF0ZUJpdG1hcCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVVcGRhdGVUeFJhdGVzIChNbG1lVHJhbnNtaXQ9MHgleCwgTWluSFRQaHlNb2RlPSV4LCBNYXhIVFBoeU1vZGU9MHgleCwgSFRQaHlNb2RlPTB4JXgpXG4iLAorCQkJIHBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC53b3JkLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1pbkhUUGh5TW9kZS53b3JkICxwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1heEhUUGh5TW9kZS53b3JkICxwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkICkpOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgZnVuY3Rpb24gdXBkYXRlIEhUIFJhdGUgc2V0dGluZy4KKwkJSW5wdXQgV2NpZCB2YWx1ZSBpcyB2YWxpZCBmb3IgMiBjYXNlIDoKKwkJMS4gaXQncyB1c2VkIGZvciBTdGF0aW9uIGluIGluZnJhIG1vZGUgdGhhdCBjb3B5IEFQIHJhdGUgdG8gTWFjdGFibGUuCisJCTIuIE9SIFN0YXRpb24gCWluIGFkaG9jIG1vZGUgdG8gY29weSBwZWVyJ3MgSFQgcmF0ZSB0byBNYWN0YWJsZS4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lVXBkYXRlSHRUeFJhdGVzKAorCUlOIFBSVE1QX0FEQVBURVIgCQlwQWQsCisJSU4JVUNIQVIJCQkJYXBpZHgpCit7CisJVUNIQVIJU3RiY01jczsgLy9qLCBTdGJjTWNzLCBiaXRtYXNrOworCUNIQVIgCWk7IC8vIDMqMworCVJUX0hUX0NBUEFCSUxJVFkgCSpwUnRIdENhcCA9IE5VTEw7CisJUlRfSFRfUEhZX0lORk8JCSpwQWN0aXZlSHRQaHkgPSBOVUxMOworCVVMT05HCQlCYXNpY01DUzsKKwlVQ0hBUiBqLCBiaXRtYXNrOworCVBSVF9IVF9QSFlfSU5GTwkJCXBEZXNpcmVIdFBoeSA9IE5VTEw7CisJUEhUVFJBTlNNSVRfU0VUVElORwkJcEh0UGh5ID0gTlVMTDsKKwlQSFRUUkFOU01JVF9TRVRUSU5HCQlwTWF4SHRQaHkgPSBOVUxMOworCVBIVFRSQU5TTUlUX1NFVFRJTkcJCXBNaW5IdFBoeSA9IE5VTEw7CisJQk9PTEVBTiAJCQkJKmF1dG9fcmF0ZV9jdXJfcDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiTWxtZVVwZGF0ZUh0VHhSYXRlcz09PT4gXG4iKSk7CisKKwlhdXRvX3JhdGVfY3VyX3AgPSBOVUxMOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCXBEZXNpcmVIdFBoeQk9ICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvOworCQlwQWN0aXZlSHRQaHkJPSAmcEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mbzsKKwkJcEh0UGh5IAkJPSAmcEFkLT5TdGFDZmcuSFRQaHlNb2RlOworCQlwTWF4SHRQaHkJPSAmcEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlOworCQlwTWluSHRQaHkJPSAmcEFkLT5TdGFDZmcuTWluSFRQaHlNb2RlOworCisJCWF1dG9fcmF0ZV9jdXJfcCA9ICZwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAoKEFESE9DX09OKHBBZCkgfHwgSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorCXsKKwkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKQorCQkJcmV0dXJuOworCisJCXBSdEh0Q2FwID0gJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5OworCQlwQWN0aXZlSHRQaHkgPSAmcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mbzsKKwkJU3RiY01jcyA9IChVQ0hBUilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzMuU3RiY01jczsKKwkJQmFzaWNNQ1MgPXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uTUNTU2V0WzBdKyhwQWQtPk1sbWVBdXguQWRkSHRJbmZvLk1DU1NldFsxXTw8OCkrKFN0YmNNY3M8PDE2KTsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSAmJiAocFJ0SHRDYXAtPlJ4U1RCQykgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCQlwTWF4SHRQaHktPmZpZWxkLlNUQkMgPSBTVEJDX1VTRTsKKwkJZWxzZQorCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCX0KKwllbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeworCQlpZiAocERlc2lyZUh0UGh5LT5iSHRFbmFibGUgPT0gRkFMU0UpCisJCQlyZXR1cm47CisKKwkJcFJ0SHRDYXAgPSAmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5OworCQlTdGJjTWNzID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8zLlN0YmNNY3M7CisJCUJhc2ljTUNTID0gcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLk1DU1NldFswXSsocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLk1DU1NldFsxXTw8OCkrKFN0YmNNY3M8PDE2KTsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSAmJiAocFJ0SHRDYXAtPlJ4U1RCQykgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCQlwTWF4SHRQaHktPmZpZWxkLlNUQkMgPSBTVEJDX1VTRTsKKwkJZWxzZQorCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCX0KKworCS8vIERlY2lkZSBNQVggaHQgcmF0ZS4KKwlpZiAoKHBSdEh0Q2FwLT5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCXBNYXhIdFBoeS0+ZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCWVsc2UKKwkJcE1heEh0UGh5LT5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKworICAgIGlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkgJiYgKHBSdEh0Q2FwLT5DaGFubmVsV2lkdGgpKQorCQlwTWF4SHRQaHktPmZpZWxkLkJXID0gQldfNDA7CisJZWxzZQorCQlwTWF4SHRQaHktPmZpZWxkLkJXID0gQldfMjA7CisKKyAgICBpZiAocE1heEh0UGh5LT5maWVsZC5CVyA9PSBCV18yMCkKKwkJcE1heEh0UGh5LT5maWVsZC5TaG9ydEdJID0gKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjAgJiBwUnRIdENhcC0+U2hvcnRHSWZvcjIwKTsKKwllbHNlCisJCXBNYXhIdFBoeS0+ZmllbGQuU2hvcnRHSSA9IChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwICYgcFJ0SHRDYXAtPlNob3J0R0lmb3I0MCk7CisKKwlmb3IgKGk9MjM7IGk+PTA7IGktLSkgLy8gMyozCisJeworCQlqID0gaS84OworCQliaXRtYXNrID0gKDE8PChpLShqKjgpKSk7CisKKwkJaWYgKChwQWN0aXZlSHRQaHktPk1DU1NldFtqXSAmIGJpdG1hc2spICYmIChwRGVzaXJlSHRQaHktPk1DU1NldFtqXSAmIGJpdG1hc2spKQorCQl7CisJCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IGk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpPT0wKQorCQkJYnJlYWs7CisJfQorCisJLy8gQ29weSBNSU4gaHQgcmF0ZS4gIHJ0Mjg2MD8/PworCXBNaW5IdFBoeS0+ZmllbGQuQlcgPSBCV18yMDsKKwlwTWluSHRQaHktPmZpZWxkLk1DUyA9IDA7CisJcE1pbkh0UGh5LT5maWVsZC5TVEJDID0gMDsKKwlwTWluSHRQaHktPmZpZWxkLlNob3J0R0kgPSAwOworCS8vSWYgU1RBIGFzc2lnbnMgZml4ZWQgcmF0ZS4gdXBkYXRlIHRvIGZpeGVkIGhlcmUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzBdICE9IDB4ZmYpKQorCXsKKwkJaWYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzRdICE9IDApCisJCXsKKwkJCXBNYXhIdFBoeS0+ZmllbGQuTUNTID0gMzI7CisJCQlwTWluSHRQaHktPmZpZWxkLk1DUyA9IDMyOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNbG1lVXBkYXRlSHRUeFJhdGVzPD09PSBVc2UgRml4ZWQgTUNTID0gJWRcbiIscE1pbkh0UGh5LT5maWVsZC5NQ1MpKTsKKwkJfQorCisJCWZvciAoaT0yMzsgKENIQVIpaSA+PSAwOyBpLS0pIC8vIDMqMworCQl7CisJCQlqID0gaS84OworCQkJYml0bWFzayA9ICgxPDwoaS0oaio4KSkpOworCQkJaWYgKCAocERlc2lyZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSAmJiAocEFjdGl2ZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSkKKwkJCXsKKwkJCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IGk7CisJCQkJcE1pbkh0UGh5LT5maWVsZC5NQ1MgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGk9PTApCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCS8vIERlY2lkZSBodCByYXRlCisJcEh0UGh5LT5maWVsZC5TVEJDID0gcE1heEh0UGh5LT5maWVsZC5TVEJDOworCXBIdFBoeS0+ZmllbGQuQlcgPSBwTWF4SHRQaHktPmZpZWxkLkJXOworCXBIdFBoeS0+ZmllbGQuTU9ERSA9IHBNYXhIdFBoeS0+ZmllbGQuTU9ERTsKKwlwSHRQaHktPmZpZWxkLk1DUyA9IHBNYXhIdFBoeS0+ZmllbGQuTUNTOworCXBIdFBoeS0+ZmllbGQuU2hvcnRHSSA9IHBNYXhIdFBoeS0+ZmllbGQuU2hvcnRHSTsKKworCS8vIHVzZSBkZWZhdWx0IG5vdy4gcnQyODYwCisJaWYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzBdICE9IDB4ZmYpCisJCSphdXRvX3JhdGVfY3VyX3AgPSBGQUxTRTsKKwllbHNlCisJCSphdXRvX3JhdGVfY3VyX3AgPSBUUlVFOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1sbWVVcGRhdGVIdFR4UmF0ZXM8LS0tLkFNc2R1U2l6ZSA9ICVkICBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUgKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJUWDogTUNTWzBdID0gJXggKGNob29zZSAlZCksIEJXID0gJWQsIFNob3J0R0kgPSAlZCwgTU9ERSA9ICVkLCAgXG4iLCBwQWN0aXZlSHRQaHktPk1DU1NldFswXSxwSHRQaHktPmZpZWxkLk1DUywKKwkJcEh0UGh5LT5maWVsZC5CVywgcEh0UGh5LT5maWVsZC5TaG9ydEdJLCBwSHRQaHktPmZpZWxkLk1PREUpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIk1sbWVVcGRhdGVIdFR4UmF0ZXM8PT09IFxuIikpOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVJhZGlvT2ZmKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVJUMjhYWF9NTE1FX1JBRElPX09GRihwQWQpOworfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVJhZGlvT24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUlQyOFhYX01MTUVfUkFESU9fT04ocEFkKTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gYnNzX3RhYmxlLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisvKiEgXGJyaWVmIGluaXRpYWxpemUgQlNTIHRhYmxlCisgKglccGFyYW0gcF90YWIgcG9pbnRlciB0byB0aGUgdGFibGUKKyAqCVxyZXR1cm4gbm9uZQorICoJXHByZQorICoJXHBvc3QKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworVk9JRCBCc3NUYWJsZUluaXQoCisJSU4gQlNTX1RBQkxFICpUYWIpCit7CisJaW50IGk7CisKKwlUYWItPkJzc05yID0gMDsKKyAgICBUYWItPkJzc092ZXJsYXBOciA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQlNTX1RBQkxFOyBpKyspCisJeworCQlOZGlzWmVyb01lbW9yeSgmVGFiLT5Cc3NFbnRyeVtpXSwgc2l6ZW9mKEJTU19FTlRSWSkpOworCQlUYWItPkJzc0VudHJ5W2ldLlJzc2kgPSAtMTI3OwkvLyBpbml0aWFsIHRoZSByc3NpIGFzIGEgbWluaW11bSB2YWx1ZQorCX0KK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBCQVRhYmxlSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBCQV9UQUJMRSAqVGFiKQoreworCWludCBpOworCisJVGFiLT5udW1Bc09yaWdpbmF0b3IgPSAwOworCVRhYi0+bnVtQXNSZWNpcGllbnQgPSAwOworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBpKyspCisJeworCQlUYWItPkJBUmVjRW50cnlbaV0uUkVDX0JBX1N0YXR1cyA9IFJlY2lwaWVudF9OT05FOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmKFRhYi0+QkFSZWNFbnRyeVtpXS5SeFJlUmluZ0xvY2spKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFOyBpKyspCisJeworCQlUYWItPkJBT3JpRW50cnlbaV0uT1JJX0JBX1N0YXR1cyA9IE9yaWdpbmF0b3JfTk9ORTsKKwl9Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKy8qISBcYnJpZWYgc2VhcmNoIHRoZSBCU1MgdGFibGUgYnkgU1NJRAorICoJXHBhcmFtIHBfdGFiIHBvaW50ZXIgdG8gdGhlIGJzcyB0YWJsZQorICoJXHBhcmFtIHNzaWQgU1NJRCBzdHJpbmcKKyAqCVxyZXR1cm4gaW5kZXggb2YgdGhlIHRhYmxlLCBCU1NfTk9UX0ZPVU5EIGlmIG5vdCBpbiB0aGUgdGFibGUKKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZSBzZWFyY2ggYnkgc2VxdWVudGlhbCBzZWFyY2gKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KK1VMT05HIEJzc1RhYmxlU2VhcmNoKAorCUlOIEJTU19UQUJMRSAqVGFiLAorCUlOIFBVQ0hBUgkgcEJzc2lkLAorCUlOIFVDSEFSCSBDaGFubmVsKQoreworCVVDSEFSIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKQorCXsKKwkJLy8KKwkJLy8gU29tZSBBUCB0aGF0IHN1cHBvcnQgQS9CL0cgbW9kZSB0aGF0IG1heSB1c2VkIHRoZSBzYW1lIEJTU0lEIG9uIDExQSBhbmQgMTFCL0cuCisJCS8vIFdlIHNob3VsZCBkaXN0aW5ndWlzaCB0aGlzIGNhc2UuCisJCS8vCisJCWlmICgoKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPD0gMTQpICYmIChDaGFubmVsIDw9IDE0KSkgfHwKKwkJCSAoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA+IDE0KSAmJiAoQ2hhbm5lbCA+IDE0KSkpICYmCisJCQlNQUNfQUREUl9FUVVBTChUYWItPkJzc0VudHJ5W2ldLkJzc2lkLCBwQnNzaWQpKQorCQl7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gKFVMT05HKUJTU19OT1RfRk9VTkQ7Cit9CisKK1VMT05HIEJzc1NzaWRUYWJsZVNlYXJjaCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIJIHBCc3NpZCwKKwlJTiBQVUNIQVIJIHBTc2lkLAorCUlOIFVDSEFSCSBTc2lkTGVuLAorCUlOIFVDSEFSCSBDaGFubmVsKQoreworCVVDSEFSIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKQorCXsKKwkJLy8KKwkJLy8gU29tZSBBUCB0aGF0IHN1cHBvcnQgQS9CL0cgbW9kZSB0aGF0IG1heSB1c2VkIHRoZSBzYW1lIEJTU0lEIG9uIDExQSBhbmQgMTFCL0cuCisJCS8vIFdlIHNob3VsZCBkaXN0aW5ndWlzaCB0aGlzIGNhc2UuCisJCS8vCisJCWlmICgoKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPD0gMTQpICYmIChDaGFubmVsIDw9IDE0KSkgfHwKKwkJCSAoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA+IDE0KSAmJiAoQ2hhbm5lbCA+IDE0KSkpICYmCisJCQlNQUNfQUREUl9FUVVBTChUYWItPkJzc0VudHJ5W2ldLkJzc2lkLCBwQnNzaWQpICYmCisJCQlTU0lEX0VRVUFMKHBTc2lkLCBTc2lkTGVuLCBUYWItPkJzc0VudHJ5W2ldLlNzaWQsIFRhYi0+QnNzRW50cnlbaV0uU3NpZExlbikpCisJCXsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAoVUxPTkcpQlNTX05PVF9GT1VORDsKK30KKworVUxPTkcgQnNzVGFibGVTZWFyY2hXaXRoU1NJRCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIJIEJzc2lkLAorCUlOIFBVQ0hBUgkgcFNzaWQsCisJSU4gVUNIQVIJIFNzaWRMZW4sCisJSU4gVUNIQVIJIENoYW5uZWwpCit7CisJVUNIQVIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBUYWItPkJzc05yOyBpKyspCisJeworCQlpZiAoKCgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsIDw9IDE0KSAmJiAoQ2hhbm5lbCA8PSAxNCkpIHx8CisJCQkoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA+IDE0KSAmJiAoQ2hhbm5lbCA+IDE0KSkpICYmCisJCQlNQUNfQUREUl9FUVVBTCgmKFRhYi0+QnNzRW50cnlbaV0uQnNzaWQpLCBCc3NpZCkgJiYKKwkJCShTU0lEX0VRVUFMKHBTc2lkLCBTc2lkTGVuLCBUYWItPkJzc0VudHJ5W2ldLlNzaWQsIFRhYi0+QnNzRW50cnlbaV0uU3NpZExlbikgfHwKKwkJCShOZGlzRXF1YWxNZW1vcnkocFNzaWQsIFplcm9Tc2lkLCBTc2lkTGVuKSkgfHwKKwkJCShOZGlzRXF1YWxNZW1vcnkoVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkLCBaZXJvU3NpZCwgVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkTGVuKSkpKQorCQl7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gKFVMT05HKUJTU19OT1RfRk9VTkQ7Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBCc3NUYWJsZURlbGV0ZUVudHJ5KAorCUlOIE9VVAlCU1NfVEFCTEUgKlRhYiwKKwlJTgkJUFVDSEFSCSAgcEJzc2lkLAorCUlOCQlVQ0hBUgkgIENoYW5uZWwpCit7CisJVUNIQVIgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBUYWItPkJzc05yOyBpKyspCisJeworCQlpZiAoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA9PSBDaGFubmVsKSAmJgorCQkJKE1BQ19BRERSX0VRVUFMKFRhYi0+QnNzRW50cnlbaV0uQnNzaWQsIHBCc3NpZCkpKQorCQl7CisJCQlmb3IgKGogPSBpOyBqIDwgVGFiLT5Cc3NOciAtIDE7IGorKykKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmKFRhYi0+QnNzRW50cnlbal0pLCAmKFRhYi0+QnNzRW50cnlbaiArIDFdKSwgc2l6ZW9mKEJTU19FTlRSWSkpOworCQkJfQorCQkJTmRpc1plcm9NZW1vcnkoJihUYWItPkJzc0VudHJ5W1RhYi0+QnNzTnIgLSAxXSksIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCVRhYi0+QnNzTnIgLT0gMTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlEZWxldGUgdGhlIE9yaWdpbmF0b3IgRW50cnkgaW4gQkF0YWJsZS4gT3IgZGVjcmVhc2UgbnVtQXMgT3JpZ2luYXRvciBieSAxIGlmIG5lZWRlZC4KKworCUFyZ3VtZW50czoKKwkvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEJBVGFibGVEZWxldGVPUklFbnRyeSgKKwlJTiBPVVQJUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JCUJBX09SSV9FTlRSWQkqcEJBT1JJRW50cnkpCit7CisKKwlpZiAocEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgIT0gT3JpZ2luYXRvcl9OT05FKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCQlpZiAocEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCQlwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yIC09IDE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQVRhYmxlRGVsZXRlT1JJRW50cnkgbnVtQXNPcmlnaW5hdG9yPSAlbGRcbiIsIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCkpOworCQkJLy8gRXJhc2UgQml0bWFwIGZsYWcuCisJCX0KKwkJcEFkLT5NYWNUYWIuQ29udGVudFtwQkFPUklFbnRyeS0+V2NpZF0uVFhCQWJpdG1hcCAmPSAofigxPDwocEJBT1JJRW50cnktPlRJRCkgKSk7CS8vIElmIFNUQSBtb2RlLCAgZXJhc2UgZmxhZyBoZXJlCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBT1JJRW50cnktPldjaWRdLkJBT3JpV2NpZEFycmF5W3BCQU9SSUVudHJ5LT5USURdID0gMDsJLy8gSWYgU1RBIG1vZGUsICBlcmFzZSBmbGFnIGhlcmUKKwkJcEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7CisJCXBCQU9SSUVudHJ5LT5Ub2tlbiA9IDE7CisJCS8vIE5vdCBjbGVhciBTZXF1ZW5jZSBoZXJlLgorCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJfQorfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvKiEgXGJyaWVmCisgKglccGFyYW0KKyAqCVxyZXR1cm4KKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitWT0lEIEJzc0VudHJ5U2V0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBCU1NfRU5UUlkgKnBCc3MsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIEJzc1R5cGUsCisJSU4gVVNIT1JUIEJlYWNvblBlcmlvZCwKKwlJTiBQQ0ZfUEFSTSBwQ2ZQYXJtLAorCUlOIFVTSE9SVCBBdGltV2luLAorCUlOIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiBVQ0hBUiBTdXBSYXRlW10sCisJSU4gVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiBVQ0hBUiBFeHRSYXRlW10sCisJSU4gVUNIQVIgRXh0UmF0ZUxlbiwKKwlJTiBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCUlOIEFERF9IVF9JTkZPX0lFICpwQWRkSHRJbmZvLAkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlJTiBVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiBVQ0hBUgkJCUFkZEh0SW5mb0xlbiwKKwlJTiBVQ0hBUgkJCU5ld0V4dENoYW5PZmZzZXQsCisJSU4gVUNIQVIgQ2hhbm5lbCwKKwlJTiBDSEFSIFJzc2ksCisJSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCisJSU4gVUNIQVIgQ2tpcEZsYWcsCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisJSU4gUFFCU1NfTE9BRF9QQVJNIHBRYnNzTG9hZCwKKwlJTiBVU0hPUlQgTGVuZ3RoVklFLAorCUlOIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSkKK3sKKwlDT1BZX01BQ19BRERSKHBCc3MtPkJzc2lkLCBwQnNzaWQpOworCS8vIERlZmF1bHQgSGlkZGVuIFNTSUQgdG8gYmUgVFJVRSwgaXQgd2lsbCBiZSB0dXJuZWQgdG8gRkFMU0UgYWZ0ZXIgY29waW5nIFNTSUQKKwlwQnNzLT5IaWRkZW4gPSAxOworCWlmIChTc2lkTGVuID4gMCkKKwl7CisJCS8vIEZvciBoaWRkZW4gU1NJRCBBUCwgaXQgbWlnaHQgc2VuZCBiZWFjb24gd2l0aCBTU0lEIGxlbiBlcXVhbCB0byAwCisJCS8vIE9yIHNlbmQgYmVhY29uIC9wcm9iZSByZXNwb25zZSB3aXRoIFNTSUQgbGVuIG1hdGNoaW5nIHJlYWwgU1NJRCBsZW5ndGgsCisJCS8vIGJ1dCBTU0lEIGlzIGFsbCB6ZXJvLiBzdWNoIGFzICIwMC0wMC0wMC0wMCIgd2l0aCBsZW5ndGggNC4KKwkJLy8gV2UgaGF2ZSB0byBwcmV2ZW50IHRoaXMgY2FzZSBvdmVyd3JpdGUgY29ycmVjdCB0YWJsZQorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KFNzaWQsIFplcm9Tc2lkLCBTc2lkTGVuKSA9PSAwKQorCQl7CisJCSAgICBOZGlzWmVyb01lbW9yeShwQnNzLT5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+U3NpZCwgU3NpZCwgU3NpZExlbik7CisJCQlwQnNzLT5Tc2lkTGVuID0gU3NpZExlbjsKKwkJCXBCc3MtPkhpZGRlbiA9IDA7CisJCX0KKwl9CisJZWxzZQorCQlwQnNzLT5Tc2lkTGVuID0gMDsKKwlwQnNzLT5Cc3NUeXBlID0gQnNzVHlwZTsKKwlwQnNzLT5CZWFjb25QZXJpb2QgPSBCZWFjb25QZXJpb2Q7CisJaWYgKEJzc1R5cGUgPT0gQlNTX0lORlJBKQorCXsKKwkJaWYgKHBDZlBhcm0tPmJWYWxpZCkKKwkJeworCQkJcEJzcy0+Q2ZwQ291bnQgPSBwQ2ZQYXJtLT5DZnBDb3VudDsKKwkJCXBCc3MtPkNmcFBlcmlvZCA9IHBDZlBhcm0tPkNmcFBlcmlvZDsKKwkJCXBCc3MtPkNmcE1heER1cmF0aW9uID0gcENmUGFybS0+Q2ZwTWF4RHVyYXRpb247CisJCQlwQnNzLT5DZnBEdXJSZW1haW5pbmcgPSBwQ2ZQYXJtLT5DZnBEdXJSZW1haW5pbmc7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEJzcy0+QXRpbVdpbiA9IEF0aW1XaW47CisJfQorCisJcEJzcy0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsKKwkvLyBUaGUgcHJpdmFjeSBiaXQgaW5kaWNhdGUgc2VjdXJpdHkgaXMgT04sIGl0IG1haWdodCBiZSBXRVAsIFRLSVAgb3IgQUVTCisJLy8gQ29tYmluZSB3aXRoIEF1dGhNb2RlLCB0aGV5IHdpbGwgZGVjaWRlIHRoZSBjb25uZWN0aW9uIG1ldGhvZHMuCisJcEJzcy0+UHJpdmFjeSA9IENBUF9JU19QUklWQUNZX09OKHBCc3MtPkNhcGFiaWxpdHlJbmZvKTsKKwlBU1NFUlQoU3VwUmF0ZUxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJaWYgKFN1cFJhdGVMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlN1cFJhdGUsIFN1cFJhdGUsIFN1cFJhdGVMZW4pOworCWVsc2UKKwkJTmRpc01vdmVNZW1vcnkocEJzcy0+U3VwUmF0ZSwgU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCXBCc3MtPlN1cFJhdGVMZW4gPSBTdXBSYXRlTGVuOworCUFTU0VSVChFeHRSYXRlTGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwlOZGlzTW92ZU1lbW9yeShwQnNzLT5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKKwlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+SHRDYXBhYmlsaXR5LCBwSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4pOworCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5BZGRIdEluZm8sIHBBZGRIdEluZm8sIEFkZEh0SW5mb0xlbik7CisJcEJzcy0+TmV3RXh0Q2hhbk9mZnNldCA9IE5ld0V4dENoYW5PZmZzZXQ7CisJcEJzcy0+RXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47CisJcEJzcy0+Q2hhbm5lbCA9IENoYW5uZWw7CisJcEJzcy0+Q2VudHJhbENoYW5uZWwgPSBDaGFubmVsOworCXBCc3MtPlJzc2kgPSBSc3NpOworCS8vIFVwZGF0ZSBDa2lwRmxhZy4gaWYgbm90IGV4aXN0cywgdGhlIHZhbHVlIGlzIDB4MAorCXBCc3MtPkNraXBGbGFnID0gQ2tpcEZsYWc7CisKKwkvLyBOZXcgZm9yIG1pY3Jvc29mdCBGaXhlZCBJRXMKKwlOZGlzTW92ZU1lbW9yeShwQnNzLT5GaXhJRXMuVGltZXN0YW1wLCAmVGltZVN0YW1wLCA4KTsKKwlwQnNzLT5GaXhJRXMuQmVhY29uSW50ZXJ2YWwgPSBCZWFjb25QZXJpb2Q7CisJcEJzcy0+Rml4SUVzLkNhcGFiaWxpdGllcyA9IENhcGFiaWxpdHlJbmZvOworCisJLy8gTmV3IGZvciBtaWNyb3NvZnQgVmFyaWFibGUgSUVzCisJaWYgKExlbmd0aFZJRSAhPSAwKQorCXsKKwkJcEJzcy0+VmFySUVMZW4gPSBMZW5ndGhWSUU7CisJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlZhcklFcywgcFZJRSwgcEJzcy0+VmFySUVMZW4pOworCX0KKwllbHNlCisJeworCQlwQnNzLT5WYXJJRUxlbiA9IDA7CisJfQorCisJcEJzcy0+QWRkSHRJbmZvTGVuID0gMDsKKwlwQnNzLT5IdENhcGFiaWxpdHlMZW4gPSAwOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChIdENhcGFiaWxpdHlMZW4+IDApCisJeworCQlwQnNzLT5IdENhcGFiaWxpdHlMZW4gPSBIdENhcGFiaWxpdHlMZW47CisJCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5IdENhcGFiaWxpdHksIHBIdENhcGFiaWxpdHksIEh0Q2FwYWJpbGl0eUxlbik7CisJCWlmIChBZGRIdEluZm9MZW4gPiAwKQorCQl7CisJCQlwQnNzLT5BZGRIdEluZm9MZW4gPSBBZGRIdEluZm9MZW47CisJCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+QWRkSHRJbmZvLCBwQWRkSHRJbmZvLCBBZGRIdEluZm9MZW4pOworCisJIAkJCWlmICgocEFkZEh0SW5mby0+Q29udHJvbENoYW4gPiAyKSYmIChwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQkVMT1cpICYmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKKwkgCQkJeworCSAJCQkJcEJzcy0+Q2VudHJhbENoYW5uZWwgPSBwQWRkSHRJbmZvLT5Db250cm9sQ2hhbiAtIDI7CisJIAkJCX0KKwkgCQkJZWxzZSBpZiAoKHBBZGRIdEluZm8tPkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9BQk9WRSkgJiYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQkJCXsKKwkJIAkJCQlwQnNzLT5DZW50cmFsQ2hhbm5lbCA9IHBBZGRIdEluZm8tPkNvbnRyb2xDaGFuICsgMjsKKwkJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlCc3NDaXBoZXJQYXJzZShwQnNzKTsKKworCS8vIG5ldyBmb3IgUU9TCisJaWYgKHBFZGNhUGFybSkKKwkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPkVkY2FQYXJtLCBwRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwllbHNlCisJCXBCc3MtPkVkY2FQYXJtLmJWYWxpZCA9IEZBTFNFOworCWlmIChwUW9zQ2FwYWJpbGl0eSkKKwkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPlFvc0NhcGFiaWxpdHksIHBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCWVsc2UKKwkJcEJzcy0+UW9zQ2FwYWJpbGl0eS5iVmFsaWQgPSBGQUxTRTsKKwlpZiAocFFic3NMb2FkKQorCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+UWJzc0xvYWQsIHBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJZWxzZQorCQlwQnNzLT5RYnNzTG9hZC5iVmFsaWQgPSBGQUxTRTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlQRUlEX1NUUlVDVCAgICAgcEVpZDsKKwkJVVNIT1JUICAgICAgICAgIExlbmd0aCA9IDA7CisKKworCQlOZGlzWmVyb01lbW9yeSgmcEJzcy0+V3BhSUUuSUVbMF0sIE1BWF9DVVNUT01fTEVOKTsKKwkJTmRpc1plcm9NZW1vcnkoJnBCc3MtPlJzbklFLklFWzBdLCBNQVhfQ1VTVE9NX0xFTik7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCQlOZGlzWmVyb01lbW9yeSgmcEJzcy0+Q291bnRyeVN0cmluZ1swXSwgMyk7CisJCXBCc3MtPmJIYXNDb3VudHJ5SUUgPSBGQUxTRTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBWSUU7CisJCXdoaWxlICgoTGVuZ3RoICsgMiArIChVU0hPUlQpcEVpZC0+TGVuKSA8PSBMZW5ndGhWSUUpCisJCXsKKwkJCXN3aXRjaChwRWlkLT5FaWQpCisJCQl7CisJCQkJY2FzZSBJRV9XUEE6CisJCQkJCWlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKQorCQkJCQl7CisJCQkJCQlpZiAoKHBFaWQtPkxlbiArIDIpID4gTUFYX0NVU1RPTV9MRU4pCisJCQkJCQl7CisJCQkJCQkJcEJzcy0+V3BhSUUuSUVMZW4gPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJcEJzcy0+V3BhSUUuSUVMZW4gPSBwRWlkLT5MZW4gKyAyOworCQkJCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+V3BhSUUuSUUsIHBFaWQsIHBCc3MtPldwYUlFLklFTGVuKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElFX1JTTjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKQorCQkJCQl7CisJCQkJCQlpZiAoKHBFaWQtPkxlbiArIDIpID4gTUFYX0NVU1RPTV9MRU4pCisJCQkJCQl7CisJCQkJCQkJcEJzcy0+UnNuSUUuSUVMZW4gPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJcEJzcy0+UnNuSUUuSUVMZW4gPSBwRWlkLT5MZW4gKyAyOworCQkJCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+UnNuSUUuSUUsIHBFaWQsIHBCc3MtPlJzbklFLklFTGVuKTsKKwkJCX0KKwkJCQlicmVhazsKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQkJY2FzZSBJRV9DT1VOVFJZOgorCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+Q291bnRyeVN0cmluZ1swXSwgcEVpZC0+T2N0ZXQsIDMpOworCQkJCQlwQnNzLT5iSGFzQ291bnRyeUlFID0gVFJVRTsKKwkJCQkJYnJlYWs7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworICAgICAgICAgICAgfQorCQkJTGVuZ3RoID0gTGVuZ3RoICsgMiArIChVU0hPUlQpcEVpZC0+TGVuOyAgLy8gRWlkWzFdICsgTGVuWzFdKyBjb250ZW50W0xlbl0KKwkJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopcEVpZCArIDIgKyBwRWlkLT5MZW4pOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfQorCisvKiEKKyAqCVxicmllZiBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgYnNzIHRhYmxlCisgKglccGFyYW0gcF90YWIgVGhlIEJTUyB0YWJsZQorICoJXHBhcmFtIEJzc2lkIEJTU0lECisgKglccGFyYW0gc3NpZCBTU0lECisgKglccGFyYW0gc3NpZF9sZW4gTGVuZ3RoIG9mIFNTSUQKKyAqCVxwYXJhbSBic3NfdHlwZQorICoJXHBhcmFtIGJlYWNvbl9wZXJpb2QKKyAqCVxwYXJhbSB0aW1lc3RhbXAKKyAqCVxwYXJhbSBwX2NmCisgKglccGFyYW0gYXRpbV93aW4KKyAqCVxwYXJhbSBjYXAKKyAqCVxwYXJhbSByYXRlcworICoJXHBhcmFtIHJhdGVzX2xlbgorICoJXHBhcmFtIGNoYW5uZWxfaWR4CisgKglccmV0dXJuIG5vbmUKKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZSBJZiBTU0lEIGlzIGlkZW50aWNhbCwgdGhlIG9sZCBlbnRyeSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lCisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitVTE9ORyBCc3NUYWJsZVNldEVudHJ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQnNzVHlwZSwKKwlJTiBVU0hPUlQgQmVhY29uUGVyaW9kLAorCUlOIENGX1BBUk0gKkNmUGFybSwKKwlJTiBVU0hPUlQgQXRpbVdpbiwKKwlJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlJTiBBRERfSFRfSU5GT19JRSAqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlBZGRIdEluZm9MZW4sCisJSU4gVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0LAorCUlOIFVDSEFSIENoYW5uZWxObywKKwlJTiBDSEFSIFJzc2ksCisJSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCisJSU4gVUNIQVIgQ2tpcEZsYWcsCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisJSU4gUFFCU1NfTE9BRF9QQVJNIHBRYnNzTG9hZCwKKwlJTiBVU0hPUlQgTGVuZ3RoVklFLAorCUlOIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSkKK3sKKwlVTE9ORwlJZHg7CisKKwlJZHggPSBCc3NUYWJsZVNlYXJjaFdpdGhTU0lEKFRhYiwgcEJzc2lkLCAgU3NpZCwgU3NpZExlbiwgQ2hhbm5lbE5vKTsKKwlpZiAoSWR4ID09IEJTU19OT1RfRk9VTkQpCisJeworCQlpZiAoVGFiLT5Cc3NOciA+PSBNQVhfTEVOX09GX0JTU19UQUJMRSkKKwkgICAgeworCQkJLy8KKwkJCS8vIEl0IG1heSBoYXBwZW4gd2hlbiBCU1MgVGFibGUgd2FzIGZ1bGwuCisJCQkvLyBUaGUgZGVzaXJlZCBBUCB3aWxsIG5vdCBiZSBhZGRlZCBpbnRvIEJTUyBUYWJsZQorCQkJLy8gSW4gdGhpcyBjYXNlLCBpZiB3ZSBmb3VuZCB0aGUgZGVzaXJlZCBBUCB0aGVuIG92ZXJ3cml0ZSBCU1MgVGFibGUuCisJCQkvLworCQkJaWYoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCXsKKwkJCQlpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBwQnNzaWQpIHx8CisJCQkJCVNTSURfRVFVQUwocEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCBTc2lkLCBTc2lkTGVuKSkKKwkJCQl7CisJCQkJCUlkeCA9IFRhYi0+QnNzT3ZlcmxhcE5yOworCQkJCQlCc3NFbnRyeVNldChwQWQsICZUYWItPkJzc0VudHJ5W0lkeF0sIHBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLCBDZlBhcm0sIEF0aW1XaW4sCisJCQkJCQlDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbixwSHRDYXBhYmlsaXR5LCBwQWRkSHRJbmZvLEh0Q2FwYWJpbGl0eUxlbiwgQWRkSHRJbmZvTGVuLAorCQkJCQkJTmV3RXh0Q2hhbk9mZnNldCwgQ2hhbm5lbE5vLCBSc3NpLCBUaW1lU3RhbXAsIENraXBGbGFnLCBwRWRjYVBhcm0sIHBRb3NDYXBhYmlsaXR5LCBwUWJzc0xvYWQsIExlbmd0aFZJRSwgcFZJRSk7CisgICAgICAgICAgICAgICAgICAgIFRhYi0+QnNzT3ZlcmxhcE5yID0gKFRhYi0+QnNzT3ZlcmxhcE5yKyspICUgTUFYX0xFTl9PRl9CU1NfVEFCTEU7CisJCQkJfQorCQkJCXJldHVybiBJZHg7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQlyZXR1cm4gQlNTX05PVF9GT1VORDsKKwkJCX0KKwkJfQorCQlJZHggPSBUYWItPkJzc05yOworCQlCc3NFbnRyeVNldChwQWQsICZUYWItPkJzc0VudHJ5W0lkeF0sIHBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLCBDZlBhcm0sIEF0aW1XaW4sCisJCQkJCUNhcGFiaWxpdHlJbmZvLCBTdXBSYXRlLCBTdXBSYXRlTGVuLCBFeHRSYXRlLCBFeHRSYXRlTGVuLHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8sSHRDYXBhYmlsaXR5TGVuLCBBZGRIdEluZm9MZW4sCisJCQkJCU5ld0V4dENoYW5PZmZzZXQsIENoYW5uZWxObywgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywgcEVkY2FQYXJtLCBwUW9zQ2FwYWJpbGl0eSwgcFFic3NMb2FkLCBMZW5ndGhWSUUsIHBWSUUpOworCQlUYWItPkJzc05yKys7CisJfQorCWVsc2UKKwl7CisJCS8qIGF2b2lkICBIaWRkZW4gU1NJRCBmb3JtIGJlYWNvbiB0byBvdmVyd2lyaXRlIGNvcnJlY3QgU1NJRCBmcm9tIHByb2JlIHJlc3BvbnNlICovCisJCWlmICgoU1NJRF9FUVVBTChTc2lkLCBTc2lkTGVuLCBUYWItPkJzc0VudHJ5W0lkeF0uU3NpZCwgVGFiLT5Cc3NFbnRyeVtJZHhdLlNzaWRMZW4pKSB8fAorCQkJKE5kaXNFcXVhbE1lbW9yeShUYWItPkJzc0VudHJ5W0lkeF0uU3NpZCwgWmVyb1NzaWQsIFRhYi0+QnNzRW50cnlbSWR4XS5Tc2lkTGVuKSkpCisJCXsKKwkJCUJzc0VudHJ5U2V0KHBBZCwgJlRhYi0+QnNzRW50cnlbSWR4XSwgcEJzc2lkLCBTc2lkLCBTc2lkTGVuLCBCc3NUeXBlLCBCZWFjb25QZXJpb2QsQ2ZQYXJtLCBBdGltV2luLAorCQkJCQkJQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4scEh0Q2FwYWJpbGl0eSwgcEFkZEh0SW5mbyxIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwKKwkJCQkJCU5ld0V4dENoYW5PZmZzZXQsIENoYW5uZWxObywgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywgcEVkY2FQYXJtLCBwUW9zQ2FwYWJpbGl0eSwgcFFic3NMb2FkLCBMZW5ndGhWSUUsIHBWSUUpOworCQl9CisJfQorCisJcmV0dXJuIElkeDsKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgIFRyaUV2ZW50SW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJaTsKKworCWZvciAoaSA9IDA7aSA8IE1BWF9UUklHR0VSX0VWRU5UO2krKykKKwkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5iVmFsaWQgPSBGQUxTRTsKKworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFObyA9IDA7CisJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QkNvdW50RG93biA9IDA7Cit9CisKK1VMT05HIFRyaUV2ZW50VGFibGVTZXRFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgVFJJR0dFUl9FVkVOVF9UQUIgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlSZWdDbGFzcywKKwlJTiBVQ0hBUiBDaGFubmVsTm8pCit7CisJLy8gRXZlbnQgQQorCWlmIChIdENhcGFiaWxpdHlMZW4gPT0gMCkKKwl7CisJCWlmIChUYWItPkV2ZW50QU5vIDwgTUFYX1RSSUdHRVJfRVZFTlQpCisJCXsKKwkJCVJUTVBNb3ZlTWVtb3J5KFRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLkJTU0lELCBwQnNzaWQsIDYpOworCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uYlZhbGlkID0gVFJVRTsKKwkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLkNoYW5uZWwgPSBDaGFubmVsTm87CisJCQlUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5DRENvdW50ZXIgPSBwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheTsKKwkJCWlmIChSZWdDbGFzcyAhPSAwKQorCQkJeworCQkJCS8vIEJlYWNvbiBoYXMgUmVndWxhdG9yeSBjbGFzcyBJRS4gU28gdXNlIGJlYWNvbidzCisJCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uUmVnQ2xhc3MgPSBSZWdDbGFzczsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBVc2UgU3RhdGlvbidzIFJlZ3VsYXRvcnkgY2xhc3MgaW5zdGVhZC4KKwkJCQlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuYkh0RW5hYmxlID09IFRSVUUpCisJCQkJeworCQkJCQlpZiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPiBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCQl7CisJCQkJCQlUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5SZWdDbGFzcyA9IDMyOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLlJlZ0NsYXNzID0gMzM7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uUmVnQ2xhc3MgPSA/PzsKKworCQkJfQorCisJCQlUYWItPkV2ZW50QU5vICsrOworCQl9CisJfQorCWVsc2UgaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5JbnRvbGVyYW50NDApCisJeworCQlUYWItPkV2ZW50QkNvdW50RG93biA9IHBBZC0+Q29tbW9uQ2ZnLkRvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5OworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRyaWdnZXIgRXZlbnQgdGFibGUgTWFpbnRhaW5lbmNlIGNhbGxlZCBvbmNlIGV2ZXJ5IHNlY29uZC4KKworCUFyZ3VtZW50czoKKwkvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFRyaUV2ZW50Q291bnRlck1haW50ZW5hbmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQlpOworCUJPT0xFQU4JCQliTm90aWZ5ID0gRkFMU0U7CisJZm9yIChpID0gMDtpIDwgTUFYX1RSSUdHRVJfRVZFTlQ7aSsrKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uYlZhbGlkICYmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNEQ291bnRlciA+IDApKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNEQ291bnRlci0tOworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uQ0RDb3VudGVyID09IDApCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5iVmFsaWQgPSBGQUxTRTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBTm8gLS07CisJCQkJLy8gTmVlZCB0byBzZW5kIDIwLzQwIENvZXhpc3RlbmNlIE5vdGlmeSBmcmFtZSBpZiBoYXMgc3RhdHVzIGNoYW5nZS4KKwkJCQliTm90aWZ5ID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KKwlpZiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QkNvdW50RG93biA+IDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRCQ291bnREb3duLS07CisJCWlmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRCQ291bnREb3duID09IDApCisJCQliTm90aWZ5ID0gVFJVRTsKKwl9CisKKwlpZiAoYk5vdGlmeSA9PSBUUlVFKQorCQlVcGRhdGUyMDQwQ29leGlzdEZyYW1lQW5kTm90aWZ5KHBBZCwgQlNTSURfV0NJRCwgVFJVRSk7Cit9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQnNzVGFibGVTc2lkU29ydCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgQlNTX1RBQkxFICpPdXRUYWIsCisJSU4JQ0hBUiBTc2lkW10sCisJSU4JVUNIQVIgU3NpZExlbikKK3sKKwlJTlQgaTsKKwlCc3NUYWJsZUluaXQoT3V0VGFiKTsKKworCWZvciAoaSA9IDA7IGkgPCBwQWQtPlNjYW5UYWIuQnNzTnI7IGkrKykKKwl7CisJCUJTU19FTlRSWSAqcEluQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKKwkJQk9PTEVBTgliSXNIaWRkZW5BcEluY2x1ZGVkID0gRkFMU0U7CisKKwkJaWYgKCgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYKKyAgICAgICAgICAgIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+IDE0KSAmJgorICAgICAgICAgICAgIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEluQnNzLT5DaGFubmVsKSkKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vIFJvZ2VyIHN5bmMgQ2FycmllcgorICAgICAgICAgICAgIHx8IChwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9PSBUUlVFKQorI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICkKKwkJeworCQkJaWYgKHBJbkJzcy0+SGlkZGVuKQorCQkJCWJJc0hpZGRlbkFwSW5jbHVkZWQgPSBUUlVFOworCQl9CisKKwkJaWYgKChwSW5Cc3MtPkJzc1R5cGUgPT0gcEFkLT5TdGFDZmcuQnNzVHlwZSkgJiYKKwkJCShTU0lEX0VRVUFMKFNzaWQsIFNzaWRMZW4sIHBJbkJzcy0+U3NpZCwgcEluQnNzLT5Tc2lkTGVuKSB8fCBiSXNIaWRkZW5BcEluY2x1ZGVkKSkKKwkJeworCQkJQlNTX0VOVFJZICpwT3V0QnNzID0gJk91dFRhYi0+QnNzRW50cnlbT3V0VGFiLT5Cc3NOcl07CisKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCS8vIElmIG5vIENvdW50cnkgSUUgZXhpc3RzIG5vIENvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZCB3aGVuIElFRUU4MDIxMWRDbGllbnRNb2RlIGlzIHN0cmljdC4KKwkJCWlmICgocEFkLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgPT0gUnQ4MDJfMTFfRF9TdHJpY3QpICYmCisJCQkJKHBJbkJzcy0+Ykhhc0NvdW50cnlJRSA9PSBGQUxTRSkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgPT0gUnQ4MDJfMTFfRF9TdHJpY3QsIGJ1dCB0aGlzIEFQIGRvZXNuJ3QgaGF2ZSBjb3VudHJ5IElFLlxuIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJLy8gMi40Ry81RyBOIG9ubHkgbW9kZQorCQkJaWYgKChwSW5Cc3MtPkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJgorCQkJCSgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzJfNEcpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQSBpcyBpbiBOLW9ubHkgTW9kZSwgdGhpcyBBUCBkb24ndCBoYXZlIEh0IGNhcGFiaWxpdHkgaW4gQmVhY29uLlxuIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBOZXcgZm9yIFdQQTIKKwkJCS8vIENoZWNrIHRoZSBBdXRobW9kZSBmaXJzdAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCXsKKwkJCQkvLyBDaGVjayBBdXRoTW9kZSBhbmQgQXV0aE1vZGVBdXggZm9yIG1hdGNoaW5nLCBpbiBjYXNlIEFQIHN1cHBvcnQgZHVhbC1tb2RlCisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1dGhNb2RlKSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gcEluQnNzLT5BdXRoTW9kZUF1eCkpCisJCQkJCS8vIE5vbmUgbWF0Y2hlZAorCQkJCQljb250aW51ZTsKKworCQkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQS5iTWl4TW9kZSA9PSBGQUxTRSkKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXIpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXJBdXgpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQTIuYk1peE1vZGUgPT0gRkFMU0UpCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBncm91cCBjaXBoZXIKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlckF1eCkpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQkvLyBCc3MgVHlwZSBtYXRjaGVkLCBTU0lEIG1hdGNoZWQuCisJCQkvLyBXZSB3aWxsIGNoZWNrIHdlcHN0YXR1cyBmb3IgcXVhbGlmaWNhdGlvbiBCc3MKKwkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldlcFN0YXR1cykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlN0YUNmZy5XZXBTdGF0dXM9JWQsIHdoaWxlIHBJbkJzcy0+V2VwU3RhdHVzPSVkXG4iLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIHBJbkJzcy0+V2VwU3RhdHVzKSk7CisJCQkJLy8KKwkJCQkvLyBGb3IgdGhlIFNFU3YyIGNhc2UsIHdlIHdpbGwgbm90IHF1YWxpZnkgV2VwU3RhdHVzLgorCQkJCS8vCisJCQkJaWYgKCFwSW5Cc3MtPmJTRVMpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLyBTaW5jZSB0aGUgQVAgaXMgdXNpbmcgaGlkZGVuIFNTSUQsIGFuZCB3ZSBhcmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gQU5ZCisJCQkvLyBJdCBkZWZpbml0ZWx5IHdpbGwgZmFpbC4gU28sIHNraXAgaXQuCisJCQkvLyBDQ1ggYWxzbyByZXF1aXJlIG5vdCBldmVuIHRyeSB0byBjb25uZWN0IGl0ISEKKwkJCWlmIChTc2lkTGVuID09IDApCisJCQkJY29udGludWU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIElmIGJvdGggc3RhdGlvbiBhbmQgQVAgdXNlIDQwTUh6LCBzdGlsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSA0ME1IWiBiYW5kJ3MgbGVnYWxpdHkgaW4gbXkgY291bnRyeSByZWdpb24KKwkJCS8vIElmIHRoaXMgNDBNSHogd2lkZWJhbmQgaXMgbm90IGFsbG93ZWQgaW4gbXkgY291bnRyeSBsaXN0LCB1c2UgYmFuZHdpZHRoIDIwTUhaIGluc3RlYWQsCisJCQlpZiAoKHBJbkJzcy0+Q2VudHJhbENoYW5uZWwgIT0gcEluQnNzLT5DaGFubmVsKSAmJgorCQkJCShwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApKQorCQkJeworCQkJCWlmIChSVE1QQ2hlY2tDaGFubmVsKHBBZCwgcEluQnNzLT5DZW50cmFsQ2hhbm5lbCwgcEluQnNzLT5DaGFubmVsKSA9PSBGQUxTRSkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlTZXRDb21tb25IVChwQWQpOworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPSBCV180MDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGggPT0gQkFORF9XSURUSF8yMCkKKwkJCQkJeworCQkJCQkJU2V0Q29tbW9uSFQocEFkKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJLy8gY29weSBtYXRjaGluZyBCU1MgZnJvbSBJblRhYiB0byBPdXRUYWIKKwkJCU5kaXNNb3ZlTWVtb3J5KHBPdXRCc3MsIHBJbkJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCisJCQlPdXRUYWItPkJzc05yKys7CisJCX0KKwkJZWxzZSBpZiAoKHBJbkJzcy0+QnNzVHlwZSA9PSBwQWQtPlN0YUNmZy5Cc3NUeXBlKSAmJiAoU3NpZExlbiA9PSAwKSkKKwkJeworCQkJQlNTX0VOVFJZICpwT3V0QnNzID0gJk91dFRhYi0+QnNzRW50cnlbT3V0VGFiLT5Cc3NOcl07CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJLy8gMi40Ry81RyBOIG9ubHkgbW9kZQorCQkJaWYgKChwSW5Cc3MtPkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJgorCQkJCSgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzJfNEcpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQSBpcyBpbiBOLW9ubHkgTW9kZSwgdGhpcyBBUCBkb24ndCBoYXZlIEh0IGNhcGFiaWxpdHkgaW4gQmVhY29uLlxuIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBOZXcgZm9yIFdQQTIKKwkJCS8vIENoZWNrIHRoZSBBdXRobW9kZSBmaXJzdAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCXsKKwkJCQkvLyBDaGVjayBBdXRoTW9kZSBhbmQgQXV0aE1vZGVBdXggZm9yIG1hdGNoaW5nLCBpbiBjYXNlIEFQIHN1cHBvcnQgZHVhbC1tb2RlCisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1dGhNb2RlKSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gcEluQnNzLT5BdXRoTW9kZUF1eCkpCisJCQkJCS8vIE5vbmUgbWF0Y2hlZAorCQkJCQljb250aW51ZTsKKworCQkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQS5iTWl4TW9kZSA9PSBGQUxTRSkKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXIpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXJBdXgpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQTIuYk1peE1vZGUgPT0gRkFMU0UpCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBncm91cCBjaXBoZXIKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlckF1eCkpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQkvLyBCc3MgVHlwZSBtYXRjaGVkLCBTU0lEIG1hdGNoZWQuCisJCQkvLyBXZSB3aWxsIGNoZWNrIHdlcHN0YXR1cyBmb3IgcXVhbGlmaWNhdGlvbiBCc3MKKwkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldlcFN0YXR1cykKKwkJCQkJY29udGludWU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIElmIGJvdGggc3RhdGlvbiBhbmQgQVAgdXNlIDQwTUh6LCBzdGlsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSA0ME1IWiBiYW5kJ3MgbGVnYWxpdHkgaW4gbXkgY291bnRyeSByZWdpb24KKwkJCS8vIElmIHRoaXMgNDBNSHogd2lkZWJhbmQgaXMgbm90IGFsbG93ZWQgaW4gbXkgY291bnRyeSBsaXN0LCB1c2UgYmFuZHdpZHRoIDIwTUhaIGluc3RlYWQsCisJCQlpZiAoKHBJbkJzcy0+Q2VudHJhbENoYW5uZWwgIT0gcEluQnNzLT5DaGFubmVsKSAmJgorCQkJCShwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApKQorCQkJeworCQkJCWlmIChSVE1QQ2hlY2tDaGFubmVsKHBBZCwgcEluQnNzLT5DZW50cmFsQ2hhbm5lbCwgcEluQnNzLT5DaGFubmVsKSA9PSBGQUxTRSkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlTZXRDb21tb25IVChwQWQpOworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPSBCV180MDsKKwkJCQl9CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCS8vIGNvcHkgbWF0Y2hpbmcgQlNTIGZyb20gSW5UYWIgdG8gT3V0VGFiCisJCQlOZGlzTW92ZU1lbW9yeShwT3V0QnNzLCBwSW5Cc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKworCQkJT3V0VGFiLT5Cc3NOcisrOworCQl9CisKKwkJaWYgKE91dFRhYi0+QnNzTnIgPj0gTUFYX0xFTl9PRl9CU1NfVEFCTEUpCisJCQlicmVhazsKKwl9CisKKwlCc3NUYWJsZVNvcnRCeVJzc2koT3V0VGFiKTsKK30KKworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQnNzVGFibGVTb3J0QnlSc3NpKAorCUlOIE9VVCBCU1NfVEFCTEUgKk91dFRhYikKK3sKKwlJTlQgCSAgaSwgajsKKwlCU1NfRU5UUlkgVG1wQnNzOworCisJZm9yIChpID0gMDsgaSA8IE91dFRhYi0+QnNzTnIgLSAxOyBpKyspCisJeworCQlmb3IgKGogPSBpKzE7IGogPCBPdXRUYWItPkJzc05yOyBqKyspCisJCXsKKwkJCWlmIChPdXRUYWItPkJzc0VudHJ5W2pdLlJzc2kgPiBPdXRUYWItPkJzc0VudHJ5W2ldLlJzc2kpCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkoJlRtcEJzcywgJk91dFRhYi0+QnNzRW50cnlbal0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmT3V0VGFiLT5Cc3NFbnRyeVtqXSwgJk91dFRhYi0+QnNzRW50cnlbaV0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmT3V0VGFiLT5Cc3NFbnRyeVtpXSwgJlRtcEJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCQkJfQorCQl9CisJfQorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK1ZPSUQgQnNzQ2lwaGVyUGFyc2UoCisJSU4gT1VUCVBCU1NfRU5UUlkJcEJzcykKK3sKKwlQRUlEX1NUUlVDVCAJCSBwRWlkOworCVBVQ0hBUgkJCQlwVG1wOworCVBSU05fSUVfSEVBREVSX1NUUlVDVAkJCXBSc25IZWFkZXI7CisJUENJUEhFUl9TVUlURV9TVFJVQ1QJCQlwQ2lwaGVyOworCVBBS01fU1VJVEVfU1RSVUNUCQkJCXBBS007CisJVVNIT1JUCQkJCQkJCUNvdW50OworCUlOVAkJCQkJCQkJTGVuZ3RoOworCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCVRtcENpcGhlcjsKKworCS8vCisJLy8gV2VwU3RhdHVzIHdpbGwgYmUgcmVzZXQgbGF0ZXIsIGlmIEFQIGFubm91bmNlIFRLSVAgb3IgQUVTIG9uIHRoZSBiZWFjb24gZnJhbWUuCisJLy8KKwlpZiAocEJzcy0+UHJpdmFjeSkKKwl7CisJCXBCc3MtPldlcFN0YXR1cyAJPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwl9CisJZWxzZQorCXsKKwkJcEJzcy0+V2VwU3RhdHVzIAk9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwl9CisJLy8gU2V0IGRlZmF1bHQgdG8gZGlzYWJsZSAmIG9wZW4gYXV0aGVudGljYXRpb24gYmVmb3JlIHBhcnNpbmcgdmFyaWFibGUgSUUKKwlwQnNzLT5BdXRoTW9kZQkJPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCXBCc3MtPkF1dGhNb2RlQXV4CT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKworCS8vIEluaXQgV1BBIHNldHRpbmcKKwlwQnNzLT5XUEEuUGFpckNpcGhlcgk9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwlwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwlwQnNzLT5XUEEuR3JvdXBDaXBoZXIJPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBLlJzbkNhcGFiaWxpdHkgPSAwOworCXBCc3MtPldQQS5iTWl4TW9kZQkJPSBGQUxTRTsKKworCS8vIEluaXQgV1BBMiBzZXR0aW5nCisJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyCSA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwlwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXggPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBMi5Hcm91cENpcGhlcgkgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBMi5Sc25DYXBhYmlsaXR5ID0gMDsKKwlwQnNzLT5XUEEyLmJNaXhNb2RlIAkgPSBGQUxTRTsKKworCisJTGVuZ3RoID0gKElOVCkgcEJzcy0+VmFySUVMZW47CisKKwl3aGlsZSAoTGVuZ3RoID4gMCkKKwl7CisJCS8vIFBhcnNlIGNpcGhlciBzdWl0ZSBiYXNlIG9uIFdQQTEgJiBXUEEyLCB0aGV5IHNob3VsZCBiZSBwYXJzZWQgZGlmZmVyZW50bHkKKwkJcFRtcCA9ICgoUFVDSEFSKSBwQnNzLT5WYXJJRXMpICsgcEJzcy0+VmFySUVMZW4gLSBMZW5ndGg7CisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBUbXA7CisJCXN3aXRjaCAocEVpZC0+RWlkKQorCQl7CisJCQljYXNlIElFX1dQQToKKwkJCQkvL1BhcnNlIENpc2NvIElFX1dQQSAoTEVBUCwgQ0NLTSwgZXRjLikKKwkJCQlpZiAoIE5kaXNFcXVhbE1lbW9yeSgocFRtcCs4KSwgQ0lTQ09fT1VJLCAzKSkKKwkJCQl7CisJCQkJCXBUbXAgICArPSAxMTsKKwkJCQkJc3dpdGNoICgqcFRtcCkKKwkJCQkJeworCQkJCQkJY2FzZSAxOgorCQkJCQkJY2FzZSA1OgkvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKKwkJCQkJCQlwQnNzLT5XZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAyOgorCQkJCQkJCXBCc3MtPldlcFN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDQ6CisJCQkJCQkJcEJzcy0+V2VwU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCQlwQnNzLT5XUEEuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQkvLyBpZiBDaXNjbyBJRV9XUEEsIGJyZWFrCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFNFU19PVUksIDMpICYmIChwRWlkLT5MZW4gPT0gNykpCisJCQkJeworCQkJCQlwQnNzLT5iU0VTID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkgIT0gMSkKKwkJCQl7CisJCQkJCS8vIGlmIHVuc3VwcG9ydGVkIHZlbmRvciBzcGVjaWZpYyBJRQorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gU2tpcCBPVUksIHZlcnNpb24sIGFuZCBtdWx0aWNhc3Qgc3VpdGUKKwkJCQkvLyBUaGlzIHBhcnQgc2hvdWxkIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUgd2hlbiBBUCBzdXBwb3J0ZWQgbXVsdGlwbGUgY2lwaGVyIHN1aXRlLgorCQkJCS8vIEZvciBub3csIGl0J3MgT0sgc2luY2UgYWxtb3N0IGFsbCBBUHMgaGF2ZSBmaXhlZCBjaXBoZXIgc3VpdGUgc3VwcG9ydGVkLgorCQkJCS8vIHBUbXAgPSAoUFVDSEFSKSBwRWlkLT5PY3RldDsKKwkJCQlwVG1wICAgKz0gMTE7CisKKwkJCQkvLyBDaXBoZXIgU3VpdGUgU2VsZWN0b3JzIGZyb20gU3BlYyBQODAyLjExaS9EMy4yIFAyNi4KKwkJCQkvLwlWYWx1ZQkgICBNZWFuaW5nCisJCQkJLy8JMAkJCU5vbmUKKwkJCQkvLwkxCQkJV0VQLTQwCisJCQkJLy8JMgkJCVRraXAKKwkJCQkvLwkzCQkJV1JBUAorCQkJCS8vCTQJCQlBRVMKKwkJCQkvLwk1CQkJV0VQLTEwNAorCQkJCS8vIFBhcnNlIGdyb3VwIGNpcGhlcgorCQkJCXN3aXRjaCAoKnBUbXApCisJCQkJeworCQkJCQljYXNlIDE6CisJCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjoKKwkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA0OgorCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIG51bWJlciBvZiB1bmljYXN0IHN1aXRlCisJCQkJcFRtcCAgICs9IDE7CisKKwkJCQkvLyBza2lwIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0ZXMKKwkJCQkvL0NvdW50ID0gKihQVVNIT1JUKSBwVG1wOworCQkJCUNvdW50ID0gKHBUbXBbMV08PDgpICsgcFRtcFswXTsKKwkJCQlwVG1wICAgKz0gc2l6ZW9mKFVTSE9SVCk7CisKKwkJCQkvLyBQYXJzaW5nIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0ZQorCQkJCXdoaWxlIChDb3VudCA+IDApCisJCQkJeworCQkJCQkvLyBTa2lwIE9VSQorCQkJCQlwVG1wICs9IDM7CisJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJCQkJc3dpdGNoICgqcFRtcCkKKwkJCQkJeworCQkJCQkJY2FzZSAxOgorCQkJCQkJY2FzZSA1OiAvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKKwkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAyOgorCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDQ6CisJCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKFRtcENpcGhlciA+IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQorCQkJCQl7CisJCQkJCQkvLyBNb3ZlIHRoZSBsb3dlciBjaXBoZXIgc3VpdGUgdG8gUGFpckNpcGhlckF1eAorCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEuUGFpckNpcGhlcjsKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyCT0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBUbXBDaXBoZXI7CisJCQkJCX0KKwkJCQkJcFRtcCsrOworCQkJCQlDb3VudC0tOworCQkJCX0KKworCQkJCS8vIDQuIGdldCBBS00gc3VpdGUgY291bnRzCisJCQkJLy9Db3VudAk9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlDb3VudCA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOworCQkJCXBUbXAgICArPSAzOworCisJCQkJc3dpdGNoICgqcFRtcCkKKwkJCQl7CisJCQkJCWNhc2UgMToKKwkJCQkJCS8vIFNldCBBUCBzdXBwb3J0IFdQQSBtb2RlCisJCQkJCQlpZiAocEJzcy0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikKKwkJCQkJCQlwQnNzLT5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisJCQkJCQllbHNlCisJCQkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwVG1wICAgKz0gMTsKKworCQkJCS8vIEZpeGVkIGZvciBXUEEtTm9uZQorCQkJCWlmIChwQnNzLT5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCQl7CisJCQkJCXBCc3MtPkF1dGhNb2RlCSAgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7CisJCQkJCXBCc3MtPldlcFN0YXR1cyAgID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOworCQkJCQlpZiAocEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEuR3JvdXBDaXBoZXI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJcEJzcy0+V2VwU3RhdHVzICAgPSBwQnNzLT5XUEEuUGFpckNpcGhlcjsKKworCQkJCS8vIENoZWNrIHRoZSBQYWlyICYgR3JvdXAsIGlmIGRpZmZlcmVudCwgdHVybiBvbiBtaXhlZCBtb2RlIGZsYWcKKwkJCQlpZiAocEJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQorCQkJCQlwQnNzLT5XUEEuYk1peE1vZGUgPSBUUlVFOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfUlNOOgorCQkJCXBSc25IZWFkZXIgPSAoUFJTTl9JRV9IRUFERVJfU1RSVUNUKSBwVG1wOworCisJCQkJLy8gMC4gVmVyc2lvbiBtdXN0IGJlIDEKKwkJCQlpZiAobGUyY3B1MTYocFJzbkhlYWRlci0+VmVyc2lvbikgIT0gMSkKKwkJCQkJYnJlYWs7CisJCQkJcFRtcCAgICs9IHNpemVvZihSU05fSUVfSEVBREVSX1NUUlVDVCk7CisKKwkJCQkvLyAxLiBDaGVjayBncm91cCBjaXBoZXIKKwkJCQlwQ2lwaGVyID0gKFBDSVBIRVJfU1VJVEVfU1RSVUNUKSBwVG1wOworCQkJCWlmICghUlRNUEVxdWFsTWVtb3J5KHBUbXAsIFJTTl9PVUksIDMpKQorCQkJCQlicmVhazsKKworCQkJCS8vIFBhcnNlIGdyb3VwIGNpcGhlcgorCQkJCXN3aXRjaCAocENpcGhlci0+VHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgMToKKwkJCQkJY2FzZSA1OgkvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjoKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNDoKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gc2V0IHRvIGNvcnJlY3Qgb2Zmc2V0IGZvciBuZXh0IHBhcnNpbmcKKwkJCQlwVG1wICAgKz0gc2l6ZW9mKENJUEhFUl9TVUlURV9TVFJVQ1QpOworCisJCQkJLy8gMi4gR2V0IHBhaXJ3aXNlIGNpcGhlciBjb3VudHMKKwkJCQkvL0NvdW50ID0gKihQVVNIT1JUKSBwVG1wOworCQkJCUNvdW50ID0gKHBUbXBbMV08PDgpICsgcFRtcFswXTsKKwkJCQlwVG1wICAgKz0gc2l6ZW9mKFVTSE9SVCk7CisKKwkJCQkvLyAzLiBHZXQgcGFpcndpc2UgY2lwaGVyCisJCQkJLy8gUGFyc2luZyBhbGwgdW5pY2FzdCBjaXBoZXIgc3VpdGUKKwkJCQl3aGlsZSAoQ291bnQgPiAwKQorCQkJCXsKKwkJCQkJLy8gU2tpcCBPVUkKKwkJCQkJcENpcGhlciA9IChQQ0lQSEVSX1NVSVRFX1NUUlVDVCkgcFRtcDsKKwkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworCQkJCQlzd2l0Y2ggKHBDaXBoZXItPlR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCWNhc2UgNTogLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMjoKKwkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA0OgorCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChUbXBDaXBoZXIgPiBwQnNzLT5XUEEyLlBhaXJDaXBoZXIpCisJCQkJCXsKKwkJCQkJCS8vIE1vdmUgdGhlIGxvd2VyIGNpcGhlciBzdWl0ZSB0byBQYWlyQ2lwaGVyQXV4CisJCQkJCQlwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEyLlBhaXJDaXBoZXI7CisJCQkJCQlwQnNzLT5XUEEyLlBhaXJDaXBoZXIJID0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4ID0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCXBUbXAgKz0gc2l6ZW9mKENJUEhFUl9TVUlURV9TVFJVQ1QpOworCQkJCQlDb3VudC0tOworCQkJCX0KKworCQkJCS8vIDQuIGdldCBBS00gc3VpdGUgY291bnRzCisJCQkJLy9Db3VudAk9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlDb3VudCA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOworCisJCQkJLy8gNS4gR2V0IEFLTSBjaXBoZXJzCisJCQkJcEFLTSA9IChQQUtNX1NVSVRFX1NUUlVDVCkgcFRtcDsKKwkJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeShwVG1wLCBSU05fT1VJLCAzKSkKKwkJCQkJYnJlYWs7CisKKwkJCQlzd2l0Y2ggKHBBS00tPlR5cGUpCisJCQkJeworCQkJCQljYXNlIDE6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyOworCQkJCQkJZWxzZQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMjsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOworCQkJCQkJZWxzZQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXBUbXAgICArPSAoQ291bnQgKiBzaXplb2YoQUtNX1NVSVRFX1NUUlVDVCkpOworCisJCQkJLy8gRml4ZWQgZm9yIFdQQS1Ob25lCisJCQkJaWYgKHBCc3MtPkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCQkJCXsKKwkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7CisJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4OworCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIJPSBwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyOworCQkJCQlwQnNzLT5XZXBTdGF0dXMgCQk9IHBCc3MtPldQQS5Hcm91cENpcGhlcjsKKwkJCQkJaWYgKHBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOworCQkJCX0KKwkJCQlwQnNzLT5XZXBTdGF0dXMgICA9IHBCc3MtPldQQTIuUGFpckNpcGhlcjsKKworCQkJCS8vIDYuIEdldCBSU04gY2FwYWJpbGl0eQorCQkJCS8vcEJzcy0+V1BBMi5Sc25DYXBhYmlsaXR5ID0gKihQVVNIT1JUKSBwVG1wOworCQkJCXBCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCArPSBzaXplb2YoVVNIT1JUKTsKKworCQkJCS8vIENoZWNrIHRoZSBQYWlyICYgR3JvdXAsIGlmIGRpZmZlcmVudCwgdHVybiBvbiBtaXhlZCBtb2RlIGZsYWcKKwkJCQlpZiAocEJzcy0+V1BBMi5Hcm91cENpcGhlciAhPSBwQnNzLT5XUEEyLlBhaXJDaXBoZXIpCisJCQkJCXBCc3MtPldQQTIuYk1peE1vZGUgPSBUUlVFOworCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCUxlbmd0aCAtPSAocEVpZC0+TGVuICsgMik7CisJfQorfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWNfdGFibGUuYworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiEgXGJyaWVmIGdlbmVyYXRlcyBhIHJhbmRvbSBtYWMgYWRkcmVzcyB2YWx1ZSBmb3IgSUJTUyBCU1NJRAorICoJXHBhcmFtIEFkZHIgdGhlIGJzc2lkIGxvY2F0aW9uCisgKglccmV0dXJuIG5vbmUKKyAqCVxwcmUKKyAqCVxwb3N0CisgKi8KK1ZPSUQgTWFjQWRkclJhbmRvbUJzc2lkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEFkZHIpCit7CisJSU5UIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFDX0FERFJfTEVOOyBpKyspCisJeworCQlwQWRkcltpXSA9IFJhbmRvbUJ5dGUocEFkKTsKKwl9CisKKwlwQWRkclswXSA9IChwQWRkclswXSAmIDB4ZmUpIHwgMHgwMjsgIC8vIHRoZSBmaXJzdCAyIGJpdHMgbXVzdCBiZSAwMXh4eHh4eHh4Cit9CisKKy8qISBcYnJpZWYgaW5pdCB0aGUgbWFuYWdlbWVudCBtYWMgZnJhbWUgaGVhZGVyCisgKglccGFyYW0gcF9oZHIgbWFjIGhlYWRlcgorICoJXHBhcmFtIHN1YnR5cGUgc3VidHlwZSBvZiB0aGUgZnJhbWUKKyAqCVxwYXJhbSBwX2RzIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGRvbid0IGNhcmUgaWYgaXQgaXMgYSBicm9hZGNhc3QgYWRkcmVzcworICoJXHJldHVybiBub25lCisgKglccHJlIHRoZSBzdGF0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGluIHRoZSBwQWQtPlN0YUNmZworICoJIC0gYnNzaWQKKyAqCSAtIHN0YXRpb24gYWRkcmVzcworICoJXHBvc3QKKyAqCVxub3RlIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGZvbGxvd2luZyBmaWVsZAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitWT0lEIE1ndE1hY0hlYWRlckluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUIFBIRUFERVJfODAyXzExIHBIZHI4MDIxMSwKKwlJTiBVQ0hBUiBTdWJUeXBlLAorCUlOIFVDSEFSIFRvRHMsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcEJzc2lkKQoreworCU5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7CisJcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU3ViVHlwZTsKKy8vCWlmIChTdWJUeXBlID09IFNVQlRZUEVfQUNLKQkvLyBzYW1wbGUsIG5vIHVzZSwgaXQgd2lsbCBjb25mbGljdCB3aXRoIEFDVElPTiBmcmFtZSBzdWIgdHlwZQorLy8JCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX0NOVEw7CisJcEhkcjgwMjExLT5GQy5Ub0RzID0gVG9EczsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIHBEQSk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIHBCc3NpZCk7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1lbV9tZ210LmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGQgYW4gb3V0Z29pbmcgZnJhbWUsIGFuZCBmaWxsIGFsbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQKKyAqIGluIGFyZ3VtZW50IGxpc3QgdG8gdGhlIGZyYW1lIGJvZHkuIFRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBpcyB0aGUgc3VtbWF0aW9uCisgKiBvZiBhbGwgYXJndW1lbnRzLgorICogaW5wdXQgcGFyYW1zOgorICoJCUJ1ZmZlciAtIHBvaW50ZXIgdG8gYSBwcmUtYWxsb2NhdGVkIG1lbW9yeSBzZWdtZW50CisgKgkJYXJncyAtIGEgbGlzdCBvZiA8aW50IGFyZ19zaXplLCBhcmc+IHBhaXJzLgorICoJCU5PVEUgTk9URSBOT1RFISEhISB0aGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIE5VTEwsIG90aGVyd2lzZSB0aGlzCisgKgkJCQkJCSAgIGZ1bmN0aW9uIHdpbGwgRkFJTCEhIQorICogcmV0dXJuOgorICoJCVNpemUgb2YgdGhlIGJ1ZmZlcgorICogdXNhZ2U6CisgKgkJTWFrZU91dGdvaW5nRnJhbWUoQnVmZmVyLCBvdXRwdXRfbGVuZ3RoLCAyLCAmZmMsIDIsICZkdXIsIDYsIHBfYWRkcjEsIDYscF9hZGRyMiwgRU5EX09GX0FSR1MpOworCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitVTE9ORyBNYWtlT3V0Z29pbmdGcmFtZSgKKwlPVVQgQ0hBUiAqQnVmZmVyLAorCU9VVCBVTE9ORyAqRnJhbWVMZW4sIC4uLikKK3sKKwlDSEFSICAgKnA7CisJaW50IAlsZW5nOworCVVMT05HCVRvdExlbmc7CisJdmFfbGlzdCBBcmdzOworCisJLy8gY2FsY3VsYXRlcyB0aGUgdG90YWwgbGVuZ3RoCisJVG90TGVuZyA9IDA7CisJdmFfc3RhcnQoQXJncywgRnJhbWVMZW4pOworCWRvCisJeworCQlsZW5nID0gdmFfYXJnKEFyZ3MsIGludCk7CisJCWlmIChsZW5nID09IEVORF9PRl9BUkdTKQorCQl7CisJCQlicmVhazsKKwkJfQorCQlwID0gdmFfYXJnKEFyZ3MsIFBWT0lEKTsKKwkJTmRpc01vdmVNZW1vcnkoJkJ1ZmZlcltUb3RMZW5nXSwgcCwgbGVuZyk7CisJCVRvdExlbmcgPSBUb3RMZW5nICsgbGVuZzsKKwl9IHdoaWxlKFRSVUUpOworCisJdmFfZW5kKEFyZ3MpOyAvKiBjbGVhbiB1cCAqLworCSpGcmFtZUxlbiA9IFRvdExlbmc7CisJcmV0dXJuIFRvdExlbmc7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1sbWVfcXVldWUuYworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiEgXGJyaWVmCUluaXRpYWxpemUgVGhlIE1MTUUgUXVldWUsIHVzZWQgYnkgTUxNRSBGdW5jdGlvbnMKKyAqCVxwYXJhbQkqUXVldWUJICAgVGhlIE1MTUUgUXVldWUKKyAqCVxyZXR1cm4gQWx3YXlzCSAgIFJldHVybiBORElTX1NUQVRFX1NVQ0NFU1MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorICoJXHByZQorICoJXHBvc3QKKyAqCVxub3RlCUJlY2F1c2UgdGhpcyBpcyBkb25lIG9ubHkgb25jZSAoYXQgdGhlIGluaXQgc3RhZ2UpLCBubyBuZWVkIHRvIGJlIGxvY2tlZAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICovCitORElTX1NUQVRVUyBNbG1lUXVldWVJbml0KAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKQoreworCUlOVCBpOworCisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJlF1ZXVlLT5Mb2NrKTsKKworCVF1ZXVlLT5OdW0JPSAwOworCVF1ZXVlLT5IZWFkID0gMDsKKwlRdWV1ZS0+VGFpbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9NTE1FX1FVRVVFOyBpKyspCisJeworCQlRdWV1ZS0+RW50cnlbaV0uT2NjdXBpZWQgPSBGQUxTRTsKKwkJUXVldWUtPkVudHJ5W2ldLk1zZ0xlbiA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KFF1ZXVlLT5FbnRyeVtpXS5Nc2csIE1HTVRfRE1BX0JVRkZFUl9TSVpFKTsKKwl9CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworLyohIFxicmllZgkgRW5xdWV1ZSBhIG1lc3NhZ2UgZm9yIG90aGVyIHRocmVhZHMsIGlmIHRoZXkgd2FudCB0byBzZW5kIG1lc3NhZ2VzIHRvIE1MTUUgdGhyZWFkCisgKglccGFyYW0JKlF1ZXVlCSAgVGhlIE1MTUUgUXVldWUKKyAqCVxwYXJhbQkgTWFjaGluZSAgVGhlIFN0YXRlIE1hY2hpbmUgSWQKKyAqCVxwYXJhbQkgTXNnVHlwZSAgVGhlIE1lc3NhZ2UgVHlwZQorICoJXHBhcmFtCSBNc2dMZW4gICBUaGUgTWVzc2FnZSBsZW5ndGgKKyAqCVxwYXJhbQkqTXNnCSAgVGhlIG1lc3NhZ2UgcG9pbnRlcgorICoJXHJldHVybiAgVFJVRSBpZiBlbnF1ZXVlIGlzIHN1Y2Nlc3NmdWwsIEZBTFNFIGlmIHRoZSBxdWV1ZSBpcyBmdWxsCisgKglccHJlCisgKglccG9zdAorICoJXG5vdGUJIFRoZSBtZXNzYWdlIGhhcyB0byBiZSBpbml0aWFsaXplZAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVFbnF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVMT05HIE1hY2hpbmUsCisJSU4gVUxPTkcgTXNnVHlwZSwKKwlJTiBVTE9ORyBNc2dMZW4sCisJSU4gVk9JRCAqTXNnKQoreworCUlOVCBUYWlsOworCU1MTUVfUVVFVUUJKlF1ZXVlID0gKE1MTUVfUVVFVUUgKikmcEFkLT5NbG1lLlF1ZXVlOworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gRmlyc3QgY2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplCisJaWYgKE1zZ0xlbiA+IE1HTVRfRE1BX0JVRkZFUl9TSVpFKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTWxtZUVucXVldWU6IG1zZyB0b28gbGFyZ2UsIHNpemUgPSAlbGQgXG4iLCBNc2dMZW4pKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWlmIChNbG1lUXVldWVGdWxsKFF1ZXVlKSkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlUYWlsID0gUXVldWUtPlRhaWw7CisJUXVldWUtPlRhaWwrKzsKKwlRdWV1ZS0+TnVtKys7CisJaWYgKFF1ZXVlLT5UYWlsID09IE1BWF9MRU5fT0ZfTUxNRV9RVUVVRSkKKwl7CisJCVF1ZXVlLT5UYWlsID0gMDsKKwl9CisKKwlRdWV1ZS0+RW50cnlbVGFpbF0uV2NpZCA9IFJFU0VSVkVEX1dDSUQ7CisJUXVldWUtPkVudHJ5W1RhaWxdLk9jY3VwaWVkID0gVFJVRTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uTWFjaGluZSA9IE1hY2hpbmU7CisJUXVldWUtPkVudHJ5W1RhaWxdLk1zZ1R5cGUgPSBNc2dUeXBlOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dMZW4gID0gTXNnTGVuOworCisJaWYgKE1zZyAhPSBOVUxMKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoUXVldWUtPkVudHJ5W1RhaWxdLk1zZywgTXNnLCBNc2dMZW4pOworCX0KKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCXJldHVybiBUUlVFOworfQorCisvKiEgXGJyaWVmCSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBSZWN2IGdldHMgYSBNTE1FIG1lc3NhZ2UKKyAqCVxwYXJhbQkqUXVldWUJCQkgVGhlIE1MTUUgUXVldWUKKyAqCVxwYXJhbQkgVGltZVN0YW1wSGlnaAkgVGhlIHVwcGVyIDMyIGJpdCBvZiB0aW1lc3RhbXAKKyAqCVxwYXJhbQkgVGltZVN0YW1wTG93CSBUaGUgbG93ZXIgMzIgYml0IG9mIHRpbWVzdGFtcAorICoJXHBhcmFtCSBSc3NpCQkJIFRoZSByZWNlaXZpbmcgUlNTSSBzdHJlbmd0aAorICoJXHBhcmFtCSBNc2dMZW4gCQkgVGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZQorICoJXHBhcmFtCSpNc2cJCQkgVGhlIG1lc3NhZ2UgcG9pbnRlcgorICoJXHJldHVybiAgVFJVRSBpZiBldmVyeXRoaW5nIG9rLCBGQUxTRSBvdGhlcndpc2UgKGxpa2UgUXVldWUgRnVsbCkKKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVFbnF1ZXVlRm9yUmVjdigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVTE9ORyBXY2lkLAorCUlOIFVMT05HIFRpbWVTdGFtcEhpZ2gsCisJSU4gVUxPTkcgVGltZVN0YW1wTG93LAorCUlOIFVDSEFSIFJzc2kwLAorCUlOIFVDSEFSIFJzc2kxLAorCUlOIFVDSEFSIFJzc2kyLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlJTiBWT0lEICpNc2csCisJSU4gVUNIQVIgU2lnbmFsKQoreworCUlOVCAJCSBUYWlsLCBNYWNoaW5lOworCVBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCUlOVAkJIE1zZ1R5cGU7CisJTUxNRV9RVUVVRQkqUXVldWUgPSAoTUxNRV9RVUVVRSAqKSZwQWQtPk1sbWUuUXVldWU7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJLyogTm90aGluZyB0byBkbyBpbiBBVEUgbW9kZSAqLworCWlmKEFURV9PTihwQWQpKQorCQlyZXR1cm4gRkFMU0U7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwl7CisJCURCR1BSSU5UX0VSUigoIk1sbWVFbnF1ZXVlRm9yUmVjdjogZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyBGaXJzdCBjaGVjayB0aGUgc2l6ZSwgaXQgTVVTVCBub3QgZXhjZWVkIHRoZSBtbG1lIHF1ZXVlIHNpemUKKwlpZiAoTXNnTGVuID4gTUdNVF9ETUFfQlVGRkVSX1NJWkUpCisJeworCQlEQkdQUklOVF9FUlIoKCJNbG1lRW5xdWV1ZUZvclJlY3Y6IGZyYW1lIHRvbyBsYXJnZSwgc2l6ZSA9ICVsZCBcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKE1sbWVRdWV1ZUZ1bGwoUXVldWUpKQorCXsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoIU1zZ1R5cGVTdWJzdChwQWQsIHBGcmFtZSwgJk1hY2hpbmUsICZNc2dUeXBlKSkKKwkJeworCQkJREJHUFJJTlRfRVJSKCgiTWxtZUVucXVldWVGb3JSZWN2OiB1bi1yZWNvbmduaXplZCBtZ210LT5zdWJ0eXBlPSVkXG4iLHBGcmFtZS0+SGRyLkZDLlN1YlR5cGUpKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIE9LLCB3ZSBnb3QgYWxsIHRoZSBpbmZvcm1hdGlvbnMsIGl0IGlzIHRpbWUgdG8gcHV0IHRoaW5ncyBpbnRvIHF1ZXVlCisJTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisJVGFpbCA9IFF1ZXVlLT5UYWlsOworCVF1ZXVlLT5UYWlsKys7CisJUXVldWUtPk51bSsrOworCWlmIChRdWV1ZS0+VGFpbCA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUpCisJeworCQlRdWV1ZS0+VGFpbCA9IDA7CisJfQorCVF1ZXVlLT5FbnRyeVtUYWlsXS5PY2N1cGllZCA9IFRSVUU7CisJUXVldWUtPkVudHJ5W1RhaWxdLk1hY2hpbmUgPSBNYWNoaW5lOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dUeXBlID0gTXNnVHlwZTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uTXNnTGVuICA9IE1zZ0xlbjsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uVGltZVN0YW1wLnUuTG93UGFydCA9IFRpbWVTdGFtcExvdzsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uVGltZVN0YW1wLnUuSGlnaFBhcnQgPSBUaW1lU3RhbXBIaWdoOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Sc3NpMCA9IFJzc2kwOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Sc3NpMSA9IFJzc2kxOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Sc3NpMiA9IFJzc2kyOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5TaWduYWwgPSBTaWduYWw7CisJUXVldWUtPkVudHJ5W1RhaWxdLldjaWQgPSAoVUNIQVIpV2NpZDsKKworCVF1ZXVlLT5FbnRyeVtUYWlsXS5DaGFubmVsID0gcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsOworCisJaWYgKE1zZyAhPSBOVUxMKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoUXVldWUtPkVudHJ5W1RhaWxdLk1zZywgTXNnLCBNc2dMZW4pOworCX0KKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworLyohIFxicmllZgkgRGVxdWV1ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgTUxNRSBRdWV1ZQorICoJXHBhcmFtCSpRdWV1ZQkgIFRoZSBNTE1FIFF1ZXVlCisgKglccGFyYW0JKkVsZW0JICBUaGUgbWVzc2FnZSBkZXF1ZXVlZCBmcm9tIE1MTUUgUXVldWUKKyAqCVxyZXR1cm4gIFRSVUUgaWYgdGhlIEVsZW0gY29udGFpbnMgc29tZXRoaW5nLCBGQUxTRSBvdGhlcndpc2UKKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVEZXF1ZXVlKAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlLAorCU9VVCBNTE1FX1FVRVVFX0VMRU0gKipFbGVtKQoreworCU5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCSpFbGVtID0gJihRdWV1ZS0+RW50cnlbUXVldWUtPkhlYWRdKTsKKwlRdWV1ZS0+TnVtLS07CisJUXVldWUtPkhlYWQrKzsKKwlpZiAoUXVldWUtPkhlYWQgPT0gTUFYX0xFTl9PRl9NTE1FX1FVRVVFKQorCXsKKwkJUXVldWUtPkhlYWQgPSAwOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lECU1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUJPT0xFQU4JCQkJQ2FuY2VsbGVkOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUgXG4iKSk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlVQ0hBUiBpOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkvLyBDYW5jZWwgYWxsIHRpbWVyIGV2ZW50cworCQkvLyBCZSBjYXJlZnVsIHRvIGNhbmNlbCBuZXcgYWRkZWQgdGltZXIKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwJICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCAgICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwJICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLAkgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLAkgICAmQ2FuY2VsbGVkKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIENoYW5nZSBiYWNrIHRvIG9yaWdpbmFsIGNoYW5uZWwgaW4gY2FzZSBvZiBkb2luZyBzY2FuCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwkvLyBSZXN1bWUgTVNEVSB3aGljaCBpcyB0dXJuZWQgb2ZmIGR1cm5pbmcgc2NhbgorCVJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gU2V0IGFsbCBzdGF0ZSBtYWNoaW5lcyBiYWNrIElETEUKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IENOVExfSURMRTsKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgICA9IEFTU09DX0lETEU7CisJCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgICAgPSBBVVRIX1JFUV9JRExFOworCQlwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SU1BfSURMRTsKKwkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IFNZTkNfSURMRTsKKwkJcEFkLT5NbG1lLkFjdE1hY2hpbmUuQ3VyclN0YXRlICAgID0gQUNUX0lETEU7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCXBBZC0+TWxtZS5EbHNNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IERMU19JRExFOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworfQorCisvKiEgXGJyaWVmCXRlc3QgaWYgdGhlIE1MTUUgUXVldWUgaXMgZW1wdHkKKyAqCVxwYXJhbQkqUXVldWUJICBUaGUgTUxNRSBRdWV1ZQorICoJXHJldHVybiBUUlVFIGlmIHRoZSBRdWV1ZSBpcyBlbXB0eSwgRkFMU0Ugb3RoZXJ3aXNlCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworQk9PTEVBTiBNbG1lUXVldWVFbXB0eSgKKwlJTiBNTE1FX1FVRVVFICpRdWV1ZSkKK3sKKwlCT09MRUFOIEFuczsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCUFucyA9IChRdWV1ZS0+TnVtID09IDApOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCisJcmV0dXJuIEFuczsKK30KKworLyohIFxicmllZgkgdGVzdCBpZiB0aGUgTUxNRSBRdWV1ZSBpcyBmdWxsCisgKglccGFyYW0JICpRdWV1ZSAJIFRoZSBNTE1FIFF1ZXVlCisgKglccmV0dXJuICBUUlVFIGlmIHRoZSBRdWV1ZSBpcyBlbXB0eSwgRkFMU0Ugb3RoZXJ3aXNlCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVRdWV1ZUZ1bGwoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpCit7CisJQk9PTEVBTiBBbnM7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlBbnMgPSAoUXVldWUtPk51bSA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUgfHwgUXVldWUtPkVudHJ5W1F1ZXVlLT5UYWlsXS5PY2N1cGllZCk7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisKKwlyZXR1cm4gQW5zOworfQorCisvKiEgXGJyaWVmCSBUaGUgZGVzdHJ1Y3RvciBvZiBNTE1FIFF1ZXVlCisgKglccGFyYW0KKyAqCVxyZXR1cm4KKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZQlDbGVhciBNbG1lIFF1ZXVlLCBTZXQgUXVldWUtPk51bSB0byBaZXJvLgorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICovCitWT0lEIE1sbWVRdWV1ZURlc3Ryb3koCisJSU4gTUxNRV9RVUVVRSAqcFF1ZXVlKQoreworCU5kaXNBY3F1aXJlU3BpbkxvY2soJihwUXVldWUtPkxvY2spKTsKKwlwUXVldWUtPk51bSAgPSAwOworCXBRdWV1ZS0+SGVhZCA9IDA7CisJcFF1ZXVlLT5UYWlsID0gMDsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYocFF1ZXVlLT5Mb2NrKSk7CisJTmRpc0ZyZWVTcGluTG9jaygmKHBRdWV1ZS0+TG9jaykpOworfQorCisvKiEgXGJyaWVmCSBUbyBzdWJzdGl0dXRlIHRoZSBtZXNzYWdlIHR5cGUgaWYgdGhlIG1lc3NhZ2UgaXMgY29taW5nIGZyb20gZXh0ZXJuYWwKKyAqCVxwYXJhbQlwRnJhbWUJCSAgIFRoZSBmcmFtZSByZWNlaXZlZAorICoJXHBhcmFtCSpNYWNoaW5lCSAgIFRoZSBzdGF0ZSBtYWNoaW5lCisgKglccGFyYW0JKk1zZ1R5cGUJICAgdGhlIG1lc3NhZ2UgdHlwZSBmb3IgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxyZXR1cm4gVFJVRSBpZiB0aGUgc3Vic3RpdHV0aW9uIGlzIHN1Y2Nlc3NmdWwsIEZBTFNFIG90aGVyd2lzZQorICoJXHByZQorICoJXHBvc3QKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0JPT0xFQU4gTXNnVHlwZVN1YnN0KAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBQRlJBTUVfODAyXzExIHBGcmFtZSwKKwlPVVQgSU5UICpNYWNoaW5lLAorCU9VVCBJTlQgKk1zZ1R5cGUpCit7CisJVVNIT1JUCVNlcTsKKwlVQ0hBUglFQVBUeXBlOworCVBVQ0hBUglwRGF0YTsKKworCS8vIFBvaW50ZXIgdG8gc3RhcnQgb2YgZGF0YSBmcmFtZXMgaW5jbHVkaW5nIFNOQVAgaGVhZGVyCisJcERhdGEgPSAoUFVDSEFSKSBwRnJhbWUgKyBMRU5HVEhfODAyXzExOworCisJLy8gVGhlIG9ubHkgZGF0YSB0eXBlIHdpbGwgcGFzcyB0byB0aGlzIGZ1bmN0aW9uIGlzIEVBUE9MIGZyYW1lCisJaWYgKHBGcmFtZS0+SGRyLkZDLlR5cGUgPT0gQlRZUEVfREFUQSkKKwl7CisJCWlmIChOZGlzRXF1YWxNZW1vcnkoU05BUF9BSVJPTkVULCBwRGF0YSwgTEVOR1RIXzgwMl8xX0gpKQorCQl7CisJCQkvLyBDaXNjbyBBaXJvbmV0IFNOQVAgaGVhZGVyCisJCQkqTWFjaGluZSA9IEFJUk9ORVRfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX0FJUk9ORVRfTVNHOworCQkJcmV0dXJuIChUUlVFKTsKKwkJfQorI2lmZGVmIExFQVBfU1VQUE9SVAorCQlpZiAoIHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVAgKSAvL0xFQVAKKwkJeworCQkJLy8gTEVBUCBmcmFtZXMKKwkJCSpNYWNoaW5lID0gTEVBUF9TVEFURV9NQUNISU5FOworCQkJRUFQVHlwZSA9ICooKFVDSEFSKilwRnJhbWUgKyBMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0ggKyAxKTsKKwkJCXJldHVybiAoTGVhcE1zZ1R5cGVTdWJzdChFQVBUeXBlLCBNc2dUeXBlKSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQl7CisJCQkqTWFjaGluZSA9IFdQQV9QU0tfU1RBVEVfTUFDSElORTsKKwkJCUVBUFR5cGUgPSAqKChVQ0hBUiopcEZyYW1lICsgTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgMSk7CisJCQlyZXR1cm4oV3BhTXNnVHlwZVN1YnN0KEVBUFR5cGUsIE1zZ1R5cGUpKTsKKwkJfQorCX0KKworCXN3aXRjaCAocEZyYW1lLT5IZHIuRkMuU3ViVHlwZSkKKwl7CisJCWNhc2UgU1VCVFlQRV9BU1NPQ19SRVE6CisJCQkqTWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FTU09DX1JFUTsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfQVNTT0NfUlNQOgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BU1NPQ19SU1A7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX1JFQVNTT0NfUkVROgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9SRUFTU09DX1JFUTsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfUkVBU1NPQ19SU1A6CisJCQkqTWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX1JFQVNTT0NfUlNQOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9QUk9CRV9SRVE6CisJCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfUFJPQkVfUkVROworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9QUk9CRV9SU1A6CisJCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfUFJPQkVfUlNQOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9CRUFDT046CisJCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfQkVBQ09OOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9BVElNOgorCQkJKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FUSU07CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX0RJU0FTU09DOgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9ESVNBU1NPQ19SRVE7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX0FVVEg6CisJCQkvLyBnZXQgdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIHBheWxvYWQgMjQgTWFjIEhlYWRlciArIDIgYnl0ZXMgYWxnb3JpdGhtCisJCQlOZGlzTW92ZU1lbW9yeSgmU2VxLCAmcEZyYW1lLT5PY3RldFsyXSwgc2l6ZW9mKFVTSE9SVCkpOworCQkJaWYgKFNlcSA9PSAxIHx8IFNlcSA9PSAzKQorCQkJeworCQkJCSpNYWNoaW5lID0gQVVUSF9SU1BfU1RBVEVfTUFDSElORTsKKwkJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FVVEhfT0REOworCQkJfQorCQkJZWxzZSBpZiAoU2VxID09IDIgfHwgU2VxID09IDQpCisJCQl7CisJCQkJKk1hY2hpbmUgPSBBVVRIX1NUQVRFX01BQ0hJTkU7CisJCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BVVRIX0VWRU47CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcmV0dXJuIEZBTFNFOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9ERUFVVEg6CisJCQkqTWFjaGluZSA9IEFVVEhfUlNQX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0RFQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfQUNUSU9OOgorCQkJKk1hY2hpbmUgPSBBQ1RJT05fU1RBVEVfTUFDSElORTsKKwkJCS8vICBTb21ldGltZXMgU3RhIHdpbGwgcmV0dXJuIHdpdGggY2F0ZWdvcnkgYnl0ZXMgd2l0aCBNU0IgPSAxLCBpZiB0aGV5IHJlY2VpdmUgY2F0b2dvcnkgb3V0IG9mIHRoZWlyIHN1cHBvcnQKKwkJCWlmICgocEZyYW1lLT5PY3RldFswXSYweDdGKSA+IE1BWF9QRUVSX0NBVEVfTVNHKQorCQkJeworCQkJCSpNc2dUeXBlID0gTVQyX0FDVF9JTlZBTElEOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpNc2dUeXBlID0gKHBGcmFtZS0+T2N0ZXRbMF0mMHg3Rik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBGQUxTRTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBzdGF0ZV9tYWNoaW5lLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyohIFxicmllZiBJbml0aWFsaXplIHRoZSBzdGF0ZSBtYWNoaW5lLgorICoJXHBhcmFtICpTCQkJcG9pbnRlciB0byB0aGUgc3RhdGUgbWFjaGluZQorICoJXHBhcmFtCVRyYW5zCQlTdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb24gZnVuY3Rpb24KKyAqCVxwYXJhbQlTdE5yCQludW1iZXIgb2Ygc3RhdGVzCisgKglccGFyYW0JTXNnTnIJCW51bWJlciBvZiBtZXNzYWdlcworICoJXHBhcmFtCURlZkZ1bmMgCWRlZmF1bHQgZnVuY3Rpb24sIHdoZW4gdGhlcmUgaXMgaW52YWxpZCBzdGF0ZS9tZXNzYWdlIGNvbWJpbmF0aW9uCisgKglccGFyYW0JSW5pdFN0YXRlCWluaXRpYWwgc3RhdGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbQlCYXNlCQlTdGF0ZU1hY2hpbmUgYmFzZSwgaW50ZXJuYWwgdXNlIG9ubHkKKyAqCVxwcmUgcF9zbSBzaG91bGQgYmUgYSBsZWdhbCBwb2ludGVyCisgKglccG9zdAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICovCitWT0lEIFN0YXRlTWFjaGluZUluaXQoCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSwKKwlJTiBVTE9ORyBTdE5yLAorCUlOIFVMT05HIE1zZ05yLAorCUlOIFNUQVRFX01BQ0hJTkVfRlVOQyBEZWZGdW5jLAorCUlOIFVMT05HIEluaXRTdGF0ZSwKKwlJTiBVTE9ORyBCYXNlKQoreworCVVMT05HIGksIGo7CisKKwkvLyBzZXQgbnVtYmVyIG9mIHN0YXRlcyBhbmQgbWVzc2FnZXMKKwlTLT5OclN0YXRlID0gU3ROcjsKKwlTLT5Ock1zZyAgID0gTXNnTnI7CisJUy0+QmFzZSAgICA9IEJhc2U7CisKKwlTLT5UcmFuc0Z1bmMgID0gVHJhbnM7CisKKwkvLyBpbml0IGFsbCBzdGF0ZSB0cmFuc2l0aW9uIHRvIGRlZmF1bHQgZnVuY3Rpb24KKwlmb3IgKGkgPSAwOyBpIDwgU3ROcjsgaSsrKQorCXsKKwkJZm9yIChqID0gMDsgaiA8IE1zZ05yOyBqKyspCisJCXsKKwkJCVMtPlRyYW5zRnVuY1tpICogTXNnTnIgKyBqXSA9IERlZkZ1bmM7CisJCX0KKwl9CisKKwkvLyBzZXQgdGhlIHN0YXJ0aW5nIHN0YXRlCisJUy0+Q3VyclN0YXRlID0gSW5pdFN0YXRlOworfQorCisvKiEgXGJyaWVmIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW50byB0aGUgY2VsbCBpbiB0aGUgc3RhdGUgbWFjaGluZQorICoJXHBhcmFtICpTCXBvaW50ZXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbSBTdAlzdGF0ZQorICoJXHBhcmFtIE1zZwlpbmNvbWluZyBtZXNzYWdlCisgKglccGFyYW0gZgl0aGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiAoc3RhdGUsIG1lc3NhZ2UpIGNvbWJpbmF0aW9uIG9jY3VycyBhdCB0aGUgc3RhdGUgbWFjaGluZQorICoJXHByZSAqUyBzaG91bGQgYmUgYSBsZWdhbCBwb2ludGVyIHRvIHRoZSBzdGF0ZSBtYWNoaW5lLCBzdCwgbXNnLCBzaG91bGQgYmUgYWxsIHdpdGhpbiB0aGUgcmFuZ2UsIEJhc2Ugc2hvdWxkIGJlIHNldCBpbiB0aGUgaW5pdGlhbCBzdGF0ZQorICoJXHBvc3QKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisKKyAqLworVk9JRCBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBVTE9ORyBTdCwKKwlJTiBVTE9ORyBNc2csCisJSU4gU1RBVEVfTUFDSElORV9GVU5DIEZ1bmMpCit7CisJVUxPTkcgTXNnSWR4OworCisJTXNnSWR4ID0gTXNnIC0gUy0+QmFzZTsKKworCWlmIChTdCA8IFMtPk5yU3RhdGUgJiYgTXNnSWR4IDwgUy0+TnJNc2cpCisJeworCQkvLyBib3VuZGFyeSBjaGVja2luZyBiZWZvcmUgc2V0dGluZyB0aGUgYWN0aW9uCisJCVMtPlRyYW5zRnVuY1tTdCAqIFMtPk5yTXNnICsgTXNnSWR4XSA9IEZ1bmM7CisJfQorfQorCisvKiEgXGJyaWVmCSBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHN0YXRlIHRyYW5zaXRpb24KKyAqCVxwYXJhbQkgKkFkYXB0ZXIgdGhlIE5JQyBhZGFwdGVyIHBvaW50ZXIKKyAqCVxwYXJhbQkgKlMgCSAgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbQkgKkVsZW0JICB0aGUgbWVzc2FnZSB0byBiZSBleGVjdXRlZAorICoJXHJldHVybiAgIE5vbmUKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KK1ZPSUQgU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwkoKihTLT5UcmFuc0Z1bmNbUy0+Q3VyclN0YXRlICogUy0+TnJNc2cgKyBFbGVtLT5Nc2dUeXBlIC0gUy0+QmFzZV0pKShwQWQsIEVsZW0pOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoZSBkcm9wIGZ1bmN0aW9uLCB3aGVuIG1hY2hpbmUgZXhlY3V0ZXMgdGhpcywgdGhlIG1lc3NhZ2UgaXMgc2ltcGx5CisJCWlnbm9yZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLCB0aGUgbWVzc2FnZSBpcyBmcmVlZCBpbgorCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIERyb3AoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBsZnNyLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTGZzckluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcgU2VlZCkKK3sKKwlpZiAoU2VlZCA9PSAwKQorCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSAxOworCWVsc2UKKwkJcEFkLT5NbG1lLlNoaWZ0UmVnID0gU2VlZDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1VDSEFSIFJhbmRvbUJ5dGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUxPTkcgaTsKKwlVQ0hBUiBSLCBSZXN1bHQ7CisKKwlSID0gMDsKKworCWlmIChwQWQtPk1sbWUuU2hpZnRSZWcgPT0gMCkKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKChVTE9ORyAqKSZwQWQtPk1sbWUuU2hpZnRSZWcpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwl7CisJCWlmIChwQWQtPk1sbWUuU2hpZnRSZWcgJiAweDAwMDAwMDAxKQorCQl7CisJCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSAoKHBBZC0+TWxtZS5TaGlmdFJlZyBeIExGU1JfTUFTSykgPj4gMSkgfCAweDgwMDAwMDAwOworCQkJUmVzdWx0ID0gMTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+TWxtZS5TaGlmdFJlZyA9IHBBZC0+TWxtZS5TaGlmdFJlZyA+PiAxOworCQkJUmVzdWx0ID0gMDsKKwkJfQorCQlSID0gKFIgPDwgMSkgfCBSZXN1bHQ7CisJfQorCisJcmV0dXJuIFI7Cit9CisKK1ZPSUQgQXNpY1VwZGF0ZUF1dG9GYWxsQmFja1RhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBSYXRlVGFibGUpCit7CisJVUNIQVIJCQkJCWk7CisJSFRfRkJLX0NGRzBfU1RSVUMJCUh0Q2ZnMDsKKwlIVF9GQktfQ0ZHMV9TVFJVQwkJSHRDZmcxOworCUxHX0ZCS19DRkcwX1NUUlVDCQlMZ0NmZzA7CisJTEdfRkJLX0NGRzFfU1RSVUMJCUxnQ2ZnMTsKKwlQUlRNUF9UWF9SQVRFX1NXSVRDSAlwQ3VyclR4UmF0ZSwgcE5leHRUeFJhdGU7CisKKwkvLyBzZXQgdG8gaW5pdGlhbCB2YWx1ZQorCUh0Q2ZnMC53b3JkID0gMHg2NTQzMjEwMDsKKwlIdENmZzEud29yZCA9IDB4ZWRjYmE5ODg7CisJTGdDZmcwLndvcmQgPSAweGVkY2JhOTg4OworCUxnQ2ZnMS53b3JkID0gMHgwMDAwMjEwMDsKKworCXBOZXh0VHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKXBSYXRlVGFibGUrMTsKKwlmb3IgKGkgPSAxOyBpIDwgKigoUFVDSEFSKSBwUmF0ZVRhYmxlKTsgaSsrKQorCXsKKwkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpcFJhdGVUYWJsZSsxK2k7CisJCXN3aXRjaCAocEN1cnJUeFJhdGUtPk1vZGUpCisJCXsKKwkJCWNhc2UgMDoJCS8vQ0NLCisJCQkJYnJlYWs7CisJCQljYXNlIDE6CQkvL09GRE0KKwkJCQl7CisJCQkJCXN3aXRjaChwQ3VyclR4UmF0ZS0+Q3Vyck1DUykKKwkJCQkJeworCQkJCQkJY2FzZSAwOgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTMEZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzFGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDI6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1MyRkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAzOgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTM0ZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgNDoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzRGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDU6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1M1RkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA2OgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTNkZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgNzoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzdGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQljYXNlIDI6CQkvL0hULU1JWAorCQkJY2FzZSAzOgkJLy9IVC1HRgorCQkJCXsKKwkJCQkJaWYgKChwTmV4dFR4UmF0ZS0+TW9kZSA+PSBNT0RFX0hUTUlYKSAmJiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgIT0gcE5leHRUeFJhdGUtPkN1cnJNQ1MpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2gocEN1cnJUeFJhdGUtPkN1cnJNQ1MpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAwOgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1MwRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMToKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTMUZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzJGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAzOgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1MzRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgNDoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTNEZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDU6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzVGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSA2OgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1M2RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgNzoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTN0ZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDg6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzhGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSA5OgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1M5RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTA6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzEwRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTE6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzExRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTI6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzEyRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTM6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzEzRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTQ6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzE0RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTU6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzE1RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNVcGRhdGVBdXRvRmFsbEJhY2tUYWJsZTogbm90IHN1cHBvcnQgQ3Vyck1DUz0lZFxuIiwgcEN1cnJUeFJhdGUtPkN1cnJNQ1MpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJfQorCisJCXBOZXh0VHhSYXRlID0gcEN1cnJUeFJhdGU7CisJfQorCisJUlRNUF9JT19XUklURTMyKHBBZCwgSFRfRkJLX0NGRzAsIEh0Q2ZnMC53b3JkKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBIVF9GQktfQ0ZHMSwgSHRDZmcxLndvcmQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIExHX0ZCS19DRkcwLCBMZ0NmZzAud29yZCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTEdfRkJLX0NGRzEsIExnQ2ZnMS53b3JkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBNQUMgcmVnaXN0ZXIgdmFsdWUgYWNjb3JkaW5nIG9wZXJhdGlvbiBtb2RlLgorCQlPcGVyYXRpb25Nb2RlIEFORCBiTm9uR0ZFeGlzdCBhcmUgZm9yIE1NIGFuZCBHRiBQcm90ZWNpdG9uLgorCQlJZiBNTSBvciBHRiBtYXNrIGlzIG5vdCBzZXQsIHRob3NlIHBhc3NpbmcgYXJndW1lbnQgZG9lc24ndCBub3QgdGFrZSBlZmZlY3QuCisKKwkJT3BlcmF0aW9uIG1vZGUgbWVhbmluZzoKKwkJPSAwIDogUHVyZSBIVCwgbm8gcHJlb3RlY3Rpb24uCisJCT0gMHgwMTsgdGhlcmUgbWF5IGJlIG5vbi1IVCBkZXZpY2VzIGluIGJvdGggdGhlIGNvbnRyb2wgYW5kIGV4dGVuc2lvbiBjaGFubmVsLCBwcm90ZWN0aW9uIGlzIG9wdGlvbmFsIGluIEJTUy4KKwkJPSAweDEwOiBObyBUcmFuc21pc3Npb24gaW4gNDBNIGlzIHByb3RlY3RlZC4KKwkJPSAweDExOiBUcmFuc21pc3Npb24gaW4gYm90aCA0ME0gYW5kIDIwTSBzaGFsbCBiZSBwcm90ZWN0ZWQKKwkJaWYgKGJOb25HRkV4aXN0KQorCQkJd2Ugc2hvdWxkIGNob29zZSBub3QgdG8gdXNlIEdGLiBCdXQgc3RpbGwgc2V0IGNvcnJlY3QgQVNJQyByZWdpc3RlcnMuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCAJQXNpY1VwZGF0ZVByb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIAkJVVNIT1JUCQkJT3BlcmF0aW9uTW9kZSwKKwlJTiAJCVVDSEFSCQkJU2V0TWFzaywKKwlJTgkJQk9PTEVBTgkJCWJEaXNhYmxlQkdQcm90ZWN0LAorCUlOCQlCT09MRUFOCQkJYk5vbkdGRXhpc3QpCit7CisJUFJPVF9DRkdfU1RSVUMJUHJvdENmZywgUHJvdENmZzQ7CisJVUlOVDMyIFByb3RlY3RbNl07CisJVVNIT1JUCQkJb2Zmc2V0OworCVVDSEFSCQkJaTsKKwlVSU5UMzIgTWFjUmVnID0gMDsKKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoIShwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0KSAmJiAoT3BlcmF0aW9uTW9kZSAhPSA4KSkKKwl7CisJCXJldHVybjsKKwl9CisKKwlpZiAocEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvcikKKwl7CisJCS8vCisJCS8vIGVuYWJsZSB0aGUgUlRTL0NUUyB0byBhdm9pZCBjaGFubmVsIGNvbGxpc2lvbgorCQkvLworCQlTZXRNYXNrID0gQUxMTl9TRVRQUk9URUNUOworCQlPcGVyYXRpb25Nb2RlID0gODsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBDb25maWcgQVNJQyBSVFMgdGhyZXNob2xkIHJlZ2lzdGVyCisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9SVFNfQ0ZHLCAmTWFjUmVnKTsKKwlNYWNSZWcgJj0gMHhGRjAwMDBGRjsKKworCS8vIElmIHRoZSB1c2VyIHdhbnQgZGlzYWJsZSBSdHNUaHJlc2hvbGQgYW5kIGVuYmFsZSBBbXNkdS9SYWxpbmstQWdncmVnYXRpb24sIHNldCB0aGUgUnRzVGhyZXNob2xkIGFzIDQwOTYKKyAgICBpZiAoKAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlKSB8fAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkocEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA9PSBUUlVFKSkKKyAgICAgICAgJiYgcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID09IE1BWF9SVFNfVEhSRVNIT0xEKQorICAgIHsKKwkJTWFjUmVnIHw9ICgweDEwMDAgPDwgOCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJCU1hY1JlZyB8PSAocEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkIDw8IDgpOworICAgIH0KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1JUU19DRkcsIE1hY1JlZyk7CisKKwkvLyBJbml0aWFsIGNvbW1vbiBwcm90ZWN0aW9uIHNldHRpbmdzCisJUlRNUFplcm9NZW1vcnkoUHJvdGVjdCwgc2l6ZW9mKFByb3RlY3QpKTsKKwlQcm90Q2ZnNC53b3JkID0gMDsKKwlQcm90Q2ZnLndvcmQgPSAwOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93R0Y0MCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dHRjIwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd01NNDAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93TU0yMCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dPZmRtID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0NjayA9IDE7CisJUHJvdENmZy5maWVsZC5SVFNUaEVuID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCisJLy8gdXBkYXRlIFBIWSBtb2RlIGFuZCByYXRlCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IDB4NDAwMDsKKwlQcm90Q2ZnLmZpZWxkLlByb3RlY3RSYXRlIHw9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7CisKKwkvLyBIYW5kbGUgbGVnYWN5KEIvRykgcHJvdGVjdGlvbgorCWlmIChiRGlzYWJsZUJHUHJvdGVjdCkKKwl7CisJCS8vUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7CisJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSAwOworCQlQcm90ZWN0WzBdID0gUHJvdENmZy53b3JkOworCQlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOworCX0KKwllbHNlCisJeworCQkvL1Byb3RDZmcuZmllbGQuUHJvdGVjdFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5SdHNSYXRlOworCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3RDdHJsID0gMDsJCQkvLyBDQ0sgZG8gbm90IG5lZWQgdG8gYmUgcHJvdGVjdGVkCisJCVByb3RlY3RbMF0gPSBQcm90Q2ZnLndvcmQ7CisJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX0NUUzsJLy8gT0ZETSBuZWVkcyB1c2luZyBDQ0sgdG8gcHJvdGVjdAorCQlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIERlY2lkZSBIVCBmcmFtZSBwcm90ZWN0aW9uLgorCWlmICgoU2V0TWFzayAmIEFMTE5fU0VUUFJPVEVDVCkgIT0gMCkKKwl7CisJCXN3aXRjaChPcGVyYXRpb25Nb2RlKQorCQl7CisJCQljYXNlIDB4MDoKKwkJCQkvLyBOTyBQUk9URUNUCisJCQkJLy8gMS5BbGwgU1RBcyBpbiB0aGUgQlNTIGFyZSAyMC80MCBNSHogSFQKKwkJCQkvLyAyLiBpbiBhaSAyMC80ME1IeiBCU1MKKwkJCQkvLyAzLiBhbGwgU1RBcyBhcmUgMjBNSHogaW4gYSAyME1IeiBCU1MKKwkJCQkvLyBQdXJlIEhULiBubyBwcm90ZWN0aW9uLgorCisJCQkJLy8gTU0yMF9QUk9UX0NGRworCQkJCS8vCVJlc2VydmVkICgzMToyNykKKwkJCQkvLyAJUFJPVF9UWE9QKDI1OjIwKSAtLSAwMTAxMTEKKwkJCQkvLwlQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikKKwkJCQkvLyAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkKKwkJCQkvLyAJUFJPVF9SQVRFKDE1OjApICAtLSAweDQwMDQgKE9GRE0gMjRNKQorCQkJCVByb3RlY3RbMl0gPSAweDAxNzQ0MDA0OworCisJCQkJLy8gTU00MF9QUk9UX0NGRworCQkJCS8vCVJlc2VydmVkICgzMToyNykKKwkJCQkvLyAJUFJPVF9UWE9QKDI1OjIwKSAtLSAxMTExMTEKKwkJCQkvLwlQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikKKwkJCQkvLyAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkKKwkJCQkvLyAJUFJPVF9SQVRFKDE1OjApICAtLSAweDQwODQgKGR1cGxpY2F0ZSBPRkRNIDI0TSkKKwkJCQlQcm90ZWN0WzNdID0gMHgwM2Y0NDA4NDsKKworCQkJCS8vIENGMjBfUFJPVF9DRkcKKwkJCQkvLwlSZXNlcnZlZCAoMzE6MjcpCisJCQkJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMDEwMTExCisJCQkJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJCQkJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJCQkJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDA0IChPRkRNIDI0TSkKKwkJCQlQcm90ZWN0WzRdID0gMHgwMTc0NDAwNDsKKworCQkJCS8vIENGNDBfUFJPVF9DRkcKKwkJCQkvLwlSZXNlcnZlZCAoMzE6MjcpCisJCQkJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMTExMTExCisJCQkJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJCQkJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJCQkJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDg0IChkdXBsaWNhdGUgT0ZETSAyNE0pCisJCQkJUHJvdGVjdFs1XSA9IDB4MDNmNDQwODQ7CisKKwkJCQlpZiAoYk5vbkdGRXhpc3QpCisJCQkJeworCQkJCQkvLyBQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlpb24pCisJCQkJCS8vIFBST1RfQ1RSTCgxNzoxNikgLS0gMDEgKFJUUy9DVFMpCisJCQkJCVByb3RlY3RbNF0gPSAweDAxNzU0MDA0OworCQkJCQlQcm90ZWN0WzVdID0gMHgwM2Y1NDA4NDsKKwkJCQl9CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOworCQkJCWJyZWFrOworCisgCQkJY2FzZSAxOgorCQkJCS8vIFRoaXMgaXMgIkhUIG5vbi1tZW1iZXIgcHJvdGVjdGlvbiBtb2RlLiIKKwkJCQkvLyBJZiB0aGVyZSBtYXkgYmUgbm9uLUhUIFNUQXMgbXkgQlNTCisJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0NDAwNDsJLy8gUFJPVF9DVFJMKDE3OjE2KSA6IDAgKE5vbmUpCisJCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDQwODQ7IC8vIGR1cGxpY2FldCBsZWdhY3kgMjRNLiBCVyBzZXQgMS4KKwkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCkpCisJCQkJeworCQkJCQlQcm90Q2ZnLndvcmQgPSAweDAxNzQwMDAzOwkvL0VSUCB1c2UgUHJvdGVjdGlvbiBiaXQgaXMgc2V0LCB1c2UgcHJvdGVjdGlvbiByYXRlIGF0IENsYXVzZSAxOC4uCisJCQkJCVByb3RDZmc0LndvcmQgPSAweDAzZjQwMDAzOyAvLyBEb24ndCBkdXBsaWNhdGUgUlRTL0NUUyBpbiBDQ0sgbW9kZS4gMHgwM2Y0MDA4MzsKKwkJCQl9CisJCQkJLy9Bc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDIwJjQwIE1IeiBwYWNrZXRzCisJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKwkJCQlQcm90ZWN0WzJdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbM10gPSBQcm90Q2ZnNC53b3JkOworCQkJCVByb3RlY3RbNF0gPSBQcm90Q2ZnLndvcmQ7CisJCQkJUHJvdGVjdFs1XSA9IFByb3RDZmc0LndvcmQ7CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IFRSVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoKKwkJCQkvLyBJZiBvbmx5IEhUIFNUQXMgYXJlIGluIEJTUy4gYXQgbGVhc3Qgb25lIGlzIDIwTUh6LiBPbmx5IHByb3RlY3QgNDBNSHogcGFja2V0cworCQkJCVByb3RDZmcud29yZCA9IDB4MDE3NDQwMDQ7ICAvLyBQUk9UX0NUUkwoMTc6MTYpIDogMCAoTm9uZSkKKwkJCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0NDA4NDsgLy8gZHVwbGljYWV0IGxlZ2FjeSAyNE0uIEJXIHNldCAxLgorCisJCQkJLy9Bc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDQwTUh6IHBhY2tldHMKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCQkJCVByb3RlY3RbMl0gPSBQcm90Q2ZnLndvcmQ7CisJCQkJUHJvdGVjdFszXSA9IFByb3RDZmc0LndvcmQ7CisJCQkJaWYgKGJOb25HRkV4aXN0KQorCQkJCXsKKwkJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCQkJCX0KKwkJCQlQcm90ZWN0WzRdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbNV0gPSBQcm90Q2ZnNC53b3JkOworCisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOworCQkJCWJyZWFrOworCisJCQljYXNlIDM6CisJCQkJLy8gSFQgbWl4ZWQgbW9kZS4JIFBST1RFQ1QgQUxMIQorCQkJCS8vIEFzc2lnbiBSYXRlCisJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0NDAwNDsJLy9kdXBsaWNhZXQgbGVnYWN5IDI0TS4gQlcgc2V0IDEuCisJCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDQwODQ7CisJCQkJLy8gYm90aCAyME1IeiBhbmQgNDBNSHogYXJlIHByb3RlY3RlZC4gV2hldGhlciB1c2UgUlRTIG9yIENUUy10by1zZWxmIGRlcGVuZHMgb24gdGhlCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpKQorCQkJCXsKKwkJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0MDAwMzsJLy9FUlAgdXNlIFByb3RlY3Rpb24gYml0IGlzIHNldCwgdXNlIHByb3RlY3Rpb24gcmF0ZSBhdCBDbGF1c2UgMTguLgorCQkJCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0MDAwMzsgLy8gRG9uJ3QgZHVwbGljYXRlIFJUUy9DVFMgaW4gQ0NLIG1vZGUuIDB4MDNmNDAwODMKKwkJCQl9CisJCQkJLy9Bc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDIwJjQwIE1IeiBwYWNrZXRzCisJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKwkJCQlQcm90ZWN0WzJdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbM10gPSBQcm90Q2ZnNC53b3JkOworCQkJCVByb3RlY3RbNF0gPSBQcm90Q2ZnLndvcmQ7CisJCQkJUHJvdGVjdFs1XSA9IFByb3RDZmc0LndvcmQ7CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IFRSVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQlQcm90ZWN0WzJdID0gMHgwMTc1NDAwNDsKKwkJCQlQcm90ZWN0WzNdID0gMHgwM2Y1NDA4NDsKKwkJCQlQcm90ZWN0WzRdID0gMHgwMTc1NDAwNDsKKwkJCQlQcm90ZWN0WzVdID0gMHgwM2Y1NDA4NDsKKwkJCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJSVFNMb25nUHJvdE9uID0gVFJVRTsKKwkJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCW9mZnNldCA9IENDS19QUk9UX0NGRzsKKwlmb3IgKGkgPSAwO2kgPCA2O2krKykKKwl7CisJCWlmICgoU2V0TWFzayAmICgxPDwgaSkpKQorCQl7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyBpKjQsIFByb3RlY3RbaV0pOworCQl9CisJfQorfQorCisKKyNpZmRlZiBSVDMweHgKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSBSVDMweHggUkYgcmVnaXN0ZXIgdGhyb3VnaCBNQUMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUMzB4eFdyaXRlUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJlZ0lELAorCUlOCVVDSEFSCQkJVmFsdWUpCit7CisJUkZfQ1NSX0NGR19TVFJVQwlyZmNzcjsKKwlVSU5UCQkJCWkgPSAwOworCisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUkZfQ1NSX0NGRywgJnJmY3NyLndvcmQpOworCisJCWlmICghcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0spCisJCQlicmVhazsKKwkJaSsrOworCX0KKwl3aGlsZSAoKGkgPCBSRVRSWV9MSU1JVCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKTsKKworCWlmICgoaSA9PSBSRVRSWV9MSU1JVCkgfHwgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUmV0cnkgY291bnQgZXhoYXVzdGVkIG9yIGRldmljZSByZW1vdmVkISEhXG4iKSk7CisJCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOworCX0KKworCXJmY3NyLmZpZWxkLlJGX0NTUl9XUiA9IDE7CisJcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPSAxOworCXJmY3NyLmZpZWxkLlRFU1RDU1JfUkZBQ0NfUkVHTlVNID0gUmVnSUQ7CisJcmZjc3IuZmllbGQuUkZfQ1NSX0RBVEEgPSBWYWx1ZTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJGX0NTUl9DRkcsIHJmY3NyLndvcmQpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIFJUMzB4eCBSRiByZWdpc3RlciB0aHJvdWdoIE1BQworCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMgUlQzMHh4UmVhZFJGUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlSZWdJRCwKKwlJTglQVUNIQVIJCQlwVmFsdWUpCit7CisJUkZfQ1NSX0NGR19TVFJVQwlyZmNzcjsKKwlVSU5UCQkJCWk9MCwgaz0wOworCisJZm9yIChpPTA7IGk8TUFYX0JVU1lfQ09VTlQ7IGkrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUkZfQ1NSX0NGRywgJnJmY3NyLndvcmQpOworCisJCWlmIChyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9PSBCVVNZKQorCQl7CisJCQljb250aW51ZTsKKwkJfQorCQlyZmNzci53b3JkID0gMDsKKwkJcmZjc3IuZmllbGQuUkZfQ1NSX1dSID0gMDsKKwkJcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPSAxOworCQlyZmNzci5maWVsZC5URVNUQ1NSX1JGQUNDX1JFR05VTSA9IFJlZ0lEOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSRl9DU1JfQ0ZHLCByZmNzci53b3JkKTsKKwkJZm9yIChrPTA7IGs8TUFYX0JVU1lfQ09VTlQ7IGsrKykKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBSRl9DU1JfQ0ZHLCAmcmZjc3Iud29yZCk7CisKKwkJCWlmIChyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9PSBJRExFKQorCQkJCWJyZWFrOworCQl9CisJCWlmICgocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gSURMRSkgJiYKKwkJCShyZmNzci5maWVsZC5URVNUQ1NSX1JGQUNDX1JFR05VTSA9PSBSZWdJRCkpCisJCXsKKwkJCSpwVmFsdWUgPSAoVUNIQVIpcmZjc3IuZmllbGQuUkZfQ1NSX0RBVEE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gQlVTWSkKKwl7CisJCURCR1BSSU5UX0VSUigoIlJGIHJlYWQgUiVkPTB4JXggZmFpbCwgaVslZF0sIGtbJWRdXG4iLCBSZWdJRCwgcmZjc3Iud29yZCxpLGspKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgUlQzMHh4CisvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJTG9hZCBSRiBub3JtYWwgb3BlcmF0aW9uLW1vZGUgc2V0dXAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCkKK3sKKwlVQ0hBUiBSRlZhbHVlOworCisJLy8gUlgwX1BEICYgVFgwX1BELCBSRiBSMSByZWdpc3RlciBCaXQgMiAmIEJpdCAzIHRvIDAgYW5kIFJGX0JMT0NLX2VuLFJYMV9QRCAmIFRYMV9QRCwgQml0MCwgQml0IDQgJiBCaXQ1IHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHgwQykpIHwgMHgzMTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOworCisJLy8gVFhfTE8yX2VuLCBSRiBSMTUgcmVnaXN0ZXIgQml0IDMgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjE1LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MDgpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxNSwgUkZWYWx1ZSk7CisKKwkvLyBUWF9MTzFfZW4sIFJGIFIxNyByZWdpc3RlciBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTcsICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwOCk7CisJLy8gdG8gZml4IHJ4IGxvbmcgcmFuZ2UgaXNzdWUKKwlpZiAoKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIxMSkgJiYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcgPT0gMCkpCisJeworCQlSRlZhbHVlIHw9IDB4MjA7CisJfQorCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxNywgUkZWYWx1ZSk7CisKKwkvLyBSWF9MTzFfZW4sIFJGIFIyMCByZWdpc3RlciBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjAsICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwOCk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIwLCBSRlZhbHVlKTsKKworCS8vIFJYX0xPMl9lbiwgUkYgUjIxIHJlZ2lzdGVyIEJpdCAzIHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDA4KTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsIFJGVmFsdWUpOworCisJLy8gTERPUkZfVkMsIFJGIFIyNyByZWdpc3RlciBCaXQgMiB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsICZSRlZhbHVlKTsKKwlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpCisJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpIHwgMHgzOworCWVsc2UKKwkJUkZWYWx1ZSA9IChSRlZhbHVlICYgKH4weDc3KSk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCBSRlZhbHVlKTsKKwkvKiBlbmQgam9obmxpICovCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUxvYWQgUkYgc2xlZXAtbW9kZSBzZXR1cAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBSVDMweHhMb2FkUkZTbGVlcE1vZGVTZXR1cCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQpCit7CisJVUNIQVIgUkZWYWx1ZTsKKwlVSU5UMzIgTUFDVmFsdWU7CisKKwkvLyBSRl9CTE9DS19lbi4gUkYgUjEgcmVnaXN0ZXIgQml0IDAgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MDEpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgUkZWYWx1ZSk7CisKKwkvLyBWQ09fSUMsIFJGIFI3IHJlZ2lzdGVyIEJpdCA0ICYgQml0IDUgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MzApOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgUkZWYWx1ZSk7CisKKwkvLyBJZG9oLCBSRiBSOSByZWdpc3RlciBCaXQgMSwgQml0IDIgJiBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDksICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwRSk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCBSRlZhbHVlKTsKKworCS8vIFJYX0NUQl9lbiwgUkYgUjIxIHJlZ2lzdGVyIEJpdCA3IHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDgwKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsIFJGVmFsdWUpOworCisJLy8gTERPUkZfVkMsIFJGIFIyNyByZWdpc3RlciBCaXQgMCwgQml0IDEgJiBCaXQgMiB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsICZSRlZhbHVlKTsKKwlSRlZhbHVlIHw9IDB4Nzc7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCBSRlZhbHVlKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7CisJTUFDVmFsdWUgfD0gMHgxRDAwMDAwMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRE9fQ0ZHMCwgTUFDVmFsdWUpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlSZXZlcnNlIFJGIHNsZWVwLW1vZGUgc2V0dXAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlQzMHh4UmV2ZXJzZVJGU2xlZXBNb2RlU2V0dXAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkKQoreworCVVDSEFSIFJGVmFsdWU7CisJVUlOVDMyIE1BQ1ZhbHVlOworCisJLy8gUkZfQkxPQ0tfZW4sIFJGIFIxIHJlZ2lzdGVyIEJpdCAwIHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgfD0gMHgwMTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOworCisJLy8gVkNPX0lDLCBSRiBSNyByZWdpc3RlciBCaXQgNCAmIEJpdCA1IHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgJlJGVmFsdWUpOworCVJGVmFsdWUgfD0gMHgzMDsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDcsIFJGVmFsdWUpOworCisJLy8gSWRvaCwgUkYgUjkgcmVnaXN0ZXIgQml0IDEsIEJpdCAyICYgQml0IDMgdG8gMQorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSB8PSAweDBFOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwOSwgUkZWYWx1ZSk7CisKKwkvLyBSWF9DVEJfZW4sIFJGIFIyMSByZWdpc3RlciBCaXQgNyB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsICZSRlZhbHVlKTsKKwlSRlZhbHVlIHw9IDB4ODA7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCBSRlZhbHVlKTsKKworCS8vIExET1JGX1ZDLCBSRiBSMjcgcmVnaXN0ZXIgQml0IDIgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAmUkZWYWx1ZSk7CisJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKQorCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKSB8IDB4MzsKKwllbHNlCisJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgUkZWYWx1ZSk7CisKKwkvLyBSVDMwNzEgdmVyc2lvbiBFIGhhcyBmaXhlZCB0aGlzIGlzc3VlCisJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKSAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpKQorCXsKKwkJLy8gcGF0Y2ggdHggRVZNIGlzc3VlIHRlbXBvcmFyaWx5CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7CisJCU1BQ1ZhbHVlID0gKChNQUNWYWx1ZSAmIDB4RTBGRkZGRkYpIHwgMHgwRDAwMDAwMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBNQUNWYWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7CisJCU1BQ1ZhbHVlID0gKChNQUNWYWx1ZSAmIDB4RTBGRkZGRkYpIHwgMHgwMTAwMDAwMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBNQUNWYWx1ZSk7CisJfQorfQorLy8gZW5kIGpvaG5saQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljU3dpdGNoQ2hhbm5lbCgKKwkJCQkJICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVQ0hBUgkJCUNoYW5uZWwsCisJSU4JQk9PTEVBTgkJCWJTY2FuKQoreworCVVMT05HCQkJUjIgPSAwLCBSMyA9IERFRkFVTFRfUkZfVFhfUE9XRVIsIFI0ID0gMDsKKwlDSEFSICAgIFR4UHdlciA9IDAsIFR4UHdlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOyAvL0JicDk0ID0gQkJQUjk0X0RFRkFVTFQsIFR4UHdlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCVVDSEFSCWluZGV4OworCVVJTlQzMiAJVmFsdWUgPSAwOyAvL0JicFJlZywgVmFsdWU7CisJUlRNUF9SRl9SRUdTICpSRlJlZ1RhYmxlOworCisJLy8gU2VhcmNoIFR4IHBvd2VyIHZhbHVlCisjaWYgMQorCS8vIFdlIGNhbid0IHVzZSBDaGFubmVsTGlzdCB0byBzZWFyY2ggY2hhbm5lbCwgc2luY2Ugc29tZSBjZW50cmFsIGNoYW5ubCdzIHR4cG93ciBkb2Vzbid0IGxpc3QKKwkvLyBpbiBDaGFubmVsTGlzdCwgc28gdXNlIFR4UG93ZXIgYXJyYXkgaW5zdGVhZC4KKwkvLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9OVU1fT0ZfQ0hBTk5FTFM7IGluZGV4KyspCisJeworCQlpZiAoQ2hhbm5lbCA9PSBwQWQtPlR4UG93ZXJbaW5kZXhdLkNoYW5uZWwpCisJCXsKKwkJCVR4UHdlciA9IHBBZC0+VHhQb3dlcltpbmRleF0uUG93ZXI7CisJCQlUeFB3ZXIyID0gcEFkLT5UeFBvd2VyW2luZGV4XS5Qb3dlcjI7CisJCQlicmVhazsKKwkJfQorCX0KKyNlbHNlCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaW5kZXgrKykKKwl7CisJCWlmIChDaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLkNoYW5uZWwpCisJCXsKKwkJCVR4UHdlciA9IHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLlBvd2VyOworCQkJVHhQd2VyMiA9IHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLlBvd2VyMjsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisKKwlpZiAoaW5kZXggPT0gTUFYX05VTV9PRl9DSEFOTkVMUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNTd2l0Y2hDaGFubmVsOiBDYW4ndCBmaW5kIHRoZSBDaGFubmVsIyVkIFxuIiwgQ2hhbm5lbCkpOworCX0KKworI2lmZGVmIFJUMzB4eAorCS8vIFRoZSBSRiBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBkaWZmZXJlbmNlIGJldHdlZW4gM3h4eCBhbmQgMnh4eAorCWlmICgoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDkwKHBBZCkpICYmICgocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApIHx8IChwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkgfHwKKwkJKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIxKSB8fCAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjIpKSkKKwl7CisJCS8qIG1vZGlmeSBieSBXWSBmb3IgUmVhZCBSRiBSZWcuIGVycm9yICovCisJCVVDSEFSIFJGVmFsdWU7CisKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzMwMjBfQ0hOTDsgaW5kZXgrKykKKwkJeworCQkJaWYgKENoYW5uZWwgPT0gRnJlcUl0ZW1zMzAyMFtpbmRleF0uQ2hhbm5lbCkKKwkJCXsKKwkJCQkvLyBQcm9ncmFtbWluZyBjaGFubmVsIHBhcmFtZXRlcnMKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDIsIEZyZXFJdGVtczMwMjBbaW5kZXhdLk4pOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMywgRnJlcUl0ZW1zMzAyMFtpbmRleF0uSyk7CisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEZDKSB8IEZyZXFJdGVtczMwMjBbaW5kZXhdLlI7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCBSRlZhbHVlKTsKKworCQkJCS8vIFNldCBUeDAgUG93ZXIKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgJlJGVmFsdWUpOworCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4RTApIHwgVHhQd2VyOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgVHgxIFBvd2VyCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTMsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UHdlcjI7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjEzLCBSRlZhbHVlKTsKKworCQkJCS8vIFR4L1J4IFN0cmVhbSBzZXR0aW5nCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsICZSRlZhbHVlKTsKKwkJCQkvL2lmIChJU19SVDMwOTAocEFkKSkKKwkJCQkvLwlSRlZhbHVlIHw9IDB4MDE7IC8vIEVuYWJsZSBSRiBibG9jay4KKwkJCQlSRlZhbHVlICY9IDB4MDM7CS8vY2xlYXIgYml0Wzd+Ml0KKwkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQkJCQlSRlZhbHVlIHw9IDB4QTA7CisJCQkJZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKQorCQkJCQlSRlZhbHVlIHw9IDB4ODA7CisJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJCQkJUkZWYWx1ZSB8PSAweDUwOworCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCQkJUkZWYWx1ZSB8PSAweDQwOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgUkYgb2Zmc2V0CisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweDgwKSB8IHBBZC0+UmZGcmVxT2Zmc2V0OworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMywgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgQlcKKwkJCQlpZiAoIWJTY2FuICYmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApKQorCQkJCXsKKwkJCQkJUkZWYWx1ZSA9IHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0OworCQkJCQkvL0RJU0FCTEVfMTFOX0NIRUNLKHBBZCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJGVmFsdWUgPSBwQWQtPk1sbWUuQ2FsaUJXMjBSZlIyNDsKKwkJCQl9CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRlZhbHVlKTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsIFJGVmFsdWUpOworCisJCQkJLy8gRW5hYmxlIFJGIHR1bmluZworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IFJGVmFsdWUgfCAweDE7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCBSRlZhbHVlKTsKKworCQkJCS8vIGxhdGNoIGNoYW5uZWwgZm9yIGZ1dHVyZSB1c2FnZS4KKwkJCQlwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOworCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgUHdyMD0lZCwgUHdyMT0lZCwgJWRUKSwgTj0weCUwMlgsIEs9MHglMDJYLCBSPTB4JTAyWFxuIiwKKwkJCQkJQ2hhbm5lbCwKKwkJCQkJcEFkLT5SZkljVHlwZSwKKwkJCQkJVHhQd2VyLAorCQkJCQlUeFB3ZXIyLAorCQkJCQlwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAorCQkJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5OLAorCQkJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5LLAorCQkJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5SKSk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwl7CisJCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKKworCQlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpCisJCXsKKwkJCWNhc2UgUkZJQ18yODIwOgorCQkJY2FzZSBSRklDXzI4NTA6CisJCQljYXNlIFJGSUNfMjcyMDoKKwkJCWNhc2UgUkZJQ18yNzUwOgorCisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjg1MF9DSE5MOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpCisJCQkJeworCQkJCQlSMiA9IFJGUmVnVGFibGVbaW5kZXhdLlIyOworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDQwMDA7CS8vIElmIFRYcGF0aCBpcyAxLCBiaXQgMTQgPSAxOworCQkJCQl9CisKKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCQkJeworCQkJCQkJUjIgfD0gMHg0MDsJLy8gd3JpdGUgMSB0byBvZmYgUnhwYXRoLgorCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJCQkJeworCQkJCQkJUjIgfD0gMHgyMDA0MDsJLy8gd3JpdGUgMSB0byBvZmYgUnhQYXRoCisJCQkJCX0KKworCQkJCQlpZiAoQ2hhbm5lbCA+IDE0KQorCQkJCQl7CisJCQkJCQkvLyBpbml0aWFsaXplIFIzLCBSNAorCQkJCQkJUjMgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjMgJiAweGZmZmZjMWZmKTsKKwkJCQkJCVI0ID0gKFJGUmVnVGFibGVbaW5kZXhdLlI0ICYgKH4weDAwMWY4N2MwKSkgfCAocEFkLT5SZkZyZXFPZmZzZXQgPDwgMTUpOworCisJCQkJCQkvLyA1RyBiYW5kIHBvd2VyIHJhbmdlOiAweEY5fjBYMEYsIFRYMCBSZWczIGJpdDkvVFgxIFJlZzQgYml0Nj0iMCIgbWVhbnMgdGhlIFRYIHBvd2VyIHJlZHVjZSA3ZEIKKwkJCQkJCS8vIFIzCisJCQkJCQlpZiAoKFR4UHdlciA+PSAtNykgJiYgKFR4UHdlciA8IDApKQorCQkJCQkJeworCQkJCQkJCVR4UHdlciA9ICg3K1R4UHdlcik7CisJCQkJCQkJVHhQd2VyID0gKFR4UHdlciA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIpOworCQkJCQkJCVIzIHw9IChUeFB3ZXIgPDwgMTApOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNTd2l0Y2hDaGFubmVsOiBUeFB3ZXI9JWQgXG4iLCBUeFB3ZXIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIgPSAoVHhQd2VyID4gMHhGKSA/ICgweEYpIDogKFR4UHdlcik7CisJCQkJCQkJUjMgfD0gKFR4UHdlciA8PCAxMCkgfCAoMSA8PCA5KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gUjQKKwkJCQkJCWlmICgoVHhQd2VyMiA+PSAtNykgJiYgKFR4UHdlcjIgPCAwKSkKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIyID0gKDcrVHhQd2VyMik7CisJCQkJCQkJVHhQd2VyMiA9IChUeFB3ZXIyID4gMHhGKSA/ICgweEYpIDogKFR4UHdlcjIpOworCQkJCQkJCVI0IHw9IChUeFB3ZXIyIDw8IDcpOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNTd2l0Y2hDaGFubmVsOiBUeFB3ZXIyPSVkIFxuIiwgVHhQd2VyMikpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCVR4UHdlcjIgPSAoVHhQd2VyMiA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIyKTsKKwkJCQkJCQlSNCB8PSAoVHhQd2VyMiA8PCA3KSB8ICgxIDw8IDYpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUjMgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjMgJiAweGZmZmZjMWZmKSB8IChUeFB3ZXIgPDwgOSk7IC8vIHNldCBUWCBwb3dlcjAKKwkJCQkJUjQgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjQgJiAofjB4MDAxZjg3YzApKSB8IChwQWQtPlJmRnJlcU9mZnNldCA8PCAxNSkgfCAoVHhQd2VyMiA8PDYpOy8vIFNldCBmcmVxIE9mZnNldCAmIFR4UHdyMQorCQkJCQl9CisKKwkJCQkJLy8gQmFzZWQgb24gQkJQIGN1cnJlbnQgbW9kZSBiZWZvcmUgY2hhbmdpbmcgUkYgY2hhbm5lbC4KKwkJCQkJaWYgKCFiU2NhbiAmJiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSkKKwkJCQkJeworCQkJCQkJUjQgfD0weDIwMDAwMDsKKwkJCQkJfQorCisJCQkJCS8vIFVwZGF0ZSB2YXJpYWJsZXMKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMSA9IFJGUmVnVGFibGVbaW5kZXhdLlIxOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIyID0gUjI7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSMzsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI0OworCisJCQkJCS8vIFNldCBSRiB2YWx1ZSAxJ3Mgc2V0IFIzW2JpdDJdID0gWzBdCisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAofjB4MDQpKSk7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOworCisJCQkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKworCQkJCQkvLyBTZXQgUkYgdmFsdWUgMidzIHNldCBSM1tiaXQyXSA9IFsxXQorCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIChwQWQtPkxhdGNoUmZSZWdzLlIzIHwgMHgwNCkpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKworCQkJCQlSVE1QdXNlY0RlbGF5KDIwMCk7CisKKwkJCQkJLy8gU2V0IFJGIHZhbHVlIDMncyBzZXQgUjNbYml0Ml0gPSBbMF0KKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCAocEFkLT5MYXRjaFJmUmVncy5SMyAmICh+MHgwNCkpKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8vIENoYW5nZSBCQlAgc2V0dGluZyBkdXJpbmcgc2l3dGNoIGZyb20gYS0+ZywgZy0+YQorCWlmIChDaGFubmVsIDw9IDE0KQorCXsKKwkgICAgVUxPTkcJVHhQaW5DZmcgPSAweDAwMDUwRjBBOy8vR2FyeSAyMDA3LzA4LzA5IDB4MDUwQTBBCisKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjIsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjMsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjQsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODYsIDApOy8vKDB4NDQgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOwkvLyBBY2NvcmRpbmcgdGhlIFJvcnkncyBzdWdnZXN0aW9uIHRvIHNvbHZlIHRoZSBtaWRkbGUgcmFuZ2UgaXNzdWUuCisJCS8vUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4NjIpOworCisJCS8vIFJ4IEhpZ2ggcG93ZXIgVkdBIG9mZnNldCBmb3IgTE5BIHNlbGVjdAorCSAgICBpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yRykKKwkgICAgeworCSAgICAgICAgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4NjIpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzUsIDB4NDYpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCSAgICAgICAgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4ODQpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzUsIDB4NTApOworCSAgICB9CisKKwkJLy8gNUcgYmFuZCBzZWxlY3Rpb24gUElOLCBiaXQxIGFuZCBiaXQyIGFyZSBjb21wbGVtZW50CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHg2KTsKKwkJVmFsdWUgfD0gKDB4MDQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCisgICAgICAgIC8vIFR1cm4gb2ZmIHVudXNlZCBQQSBvciBMTkEgd2hlbiBvbmx5IDFUIG9yIDFSCisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkZGRjM7CisJCX0KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjNGRjsKKwkJfQorCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BJTl9DRkcsIFR4UGluQ2ZnKTsKKwl9CisJZWxzZQorCXsKKwkgICAgVUxPTkcJVHhQaW5DZmcgPSAweDAwMDUwRjA1Oy8vR2FyeSAyMDA3LzgvOSAweDA1MDUwNQorCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYyLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYzLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAwKTsvLygweDQ0IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsgICAvLyBBY2NvcmRpbmcgdGhlIFJvcnkncyBzdWdnZXN0aW9uIHRvIHNvbHZlIHRoZSBtaWRkbGUgcmFuZ2UgaXNzdWUuCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweEYyKTsKKworCQkvLyBSeCBIaWdoIHBvd2VyIFZHQSBvZmZzZXQgZm9yIExOQSBzZWxlY3QKKwkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckEpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDQ2KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDUwKTsKKwkJfQorCisJCS8vIDVHIGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4Nik7CisJCVZhbHVlIHw9ICgweDAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworICAgICAgICAvLyBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUgorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGRkYzOworCX0KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjNGRjsKKwl9CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCX0KKworICAgIC8vIFI2NiBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byBDaGFubmVsIGFuZCB1c2UgMjBNSHogd2hlbiBzY2FubmluZworCS8vUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICgweDJFICsgR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwlpZiAoYlNjYW4pCisJCVJUTVBTZXRBR0NJbml0VmFsdWUocEFkLCBCV18yMCk7CisJZWxzZQorCQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXKTsKKworCS8vCisJLy8gT24gMTFBLCBXZSBzaG91bGQgZGVsYXkgYW5kIHdhaXQgUkYvQkJQIHRvIGJlIHN0YWJsZQorCS8vIGFuZCB0aGUgYXBwcm9wcmlhdGUgdGltZSBzaG91bGQgYmUgMTAwMCBtaWNybyBzZWNvbmRzCisJLy8gMjAwNS8wNi8wNSAtIE9uIDExRywgV2UgYWxzbyBuZWVkIHRoaXMgZGVsYXkgdGltZS4gT3RoZXJ3aXNlIGl0J3MgZGlmZmljdWx0IHRvIHBhc3MgdGhlIFdIUUwuCisJLy8KKwlSVE1QdXNlY0RlbGF5KDEwMDApOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgUHdyMD0lbHUsIFB3cjE9JWx1LCAlZFQpIHRvICwgUjE9MHglMDhseCwgUjI9MHglMDhseCwgUjM9MHglMDhseCwgUjQ9MHglMDhseFxuIiwKKwkJCQkJCQkgIENoYW5uZWwsCisJCQkJCQkJICBwQWQtPlJmSWNUeXBlLAorCQkJCQkJCSAgKFIzICYgMHgwMDAwM2UwMCkgPj4gOSwKKwkJCQkJCQkgIChSNCAmIDB4MDAwMDA3YzApID4+IDYsCisJCQkJCQkJICBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAorCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMSwKKwkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjIsCisJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIzLAorCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SNCkpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIDI0MjEgb25seSwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBkdXJpbmcKKwkJc2l0ZSBzdXJ2ZXkuIEl0J3Mgb25seSByZXF1aXJlZCBhZnRlciBOSUMgZGVjaWRlZCB0byBzdGF5IGF0IGEgY2hhbm5lbAorCQlmb3IgYSBsb25nZXIgcGVyaW9kLgorCQlXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCdzIGFsd2F5cyBhZnRlciBBc2ljU3dpdGNoQ2hhbm5lbCgpLgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY0xvY2tDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIENoYW5uZWwpCit7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lECUFzaWNBbnRlbm5hU2VsZWN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQ2hhbm5lbCkKK3sKKwkJCWlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDIgPT0gMSkKKwkJCXsKKwkJCQkvLyBwYXRjaCBmb3IgQXNpY1NldFJ4QW50IGZhaWxlZAorCQkJCXBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPSAwOworCisJCQkJLy8gY2hlY2sgZXZlcnkgMiBzZWNvbmQuIElmIHJjdi1iZWFjb24gbGVzcyB0aGFuIDUgaW4gdGhlIHBhc3QgMiBzZWNvbmQsIHRoZW4gQXZnUlNTSSBpcyBubyBsb25nZXIgYQorCQkJCS8vIHZhbGlkIGluZGljYXRpb24gb2YgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBBUCBhbmQgaXRzIGNsaWVudHMuCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQl7CisJCQkJCVNIT1JUCXJlYWxhdmdyc3NpMTsKKworCQkJCQkvLyBpZiBubyB0cmFmZmljIHRoZW4gcmVzZXQgYXZlcmFnZSByc3NpIHRvIHRyaWdnZXIgZXZhbHVhdGlvbgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQlpZiAocEFkLT5TdGFDZmcuTnVtT2ZBdmdSc3NpU2FtcGxlIDwgNSkKKwkJCQkJeworCQkJCQkJcEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpID0gKC05OSk7CisJCQkJCQlwQWQtPlJ4QW50LlBhaXIyTGFzdEF2Z1Jzc2kgPSAoLTk5KTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVQZXJpb2RpY0V4ZWM6IG5vIHRyYWZmaWMvYmVhY29uLCByZXNldCBSU1NJXG4iKSk7CisJCQkJCX0KKworCQkJCQlwQWQtPlN0YUNmZy5OdW1PZkF2Z1Jzc2lTYW1wbGUgPSAwOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQlyZWFsYXZncnNzaTEgPSAocEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudF0gPj4gMyk7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBbnQtcmVhbHJzc2kwKCVkKSwgTGFzdHJzc2kwKCVkKSwgRXZhbHVhdGVTdGFibGVDbnQ9JWRcbiIsIHJlYWxhdmdyc3NpMSwgcEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpLCBwQWQtPlJ4QW50LkV2YWx1YXRlU3RhYmxlQ250KSk7CisKKwkJCQkJLy8gaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcnNzaSBpcyBsYXJnZXIgb3IgbGVzcyB0aGFuIDUsIHRoZW4gZXZhbHVhdGUgdGhlIG90aGVyIGFudGVubmEKKwkJCQkJaWYgKChwQWQtPlJ4QW50LkV2YWx1YXRlU3RhYmxlQ250IDwgMikgfHwgKHJlYWxhdmdyc3NpMSA+IChwQWQtPlJ4QW50LlBhaXIxTGFzdEF2Z1Jzc2kgKyA1KSkgfHwgKHJlYWxhdmdyc3NpMSA8IChwQWQtPlJ4QW50LlBhaXIxTGFzdEF2Z1Jzc2kgLSA1KSkpCisJCQkJCXsKKwkJCQkJCXBBZC0+UnhBbnQuUGFpcjFMYXN0QXZnUnNzaSA9IHJlYWxhdmdyc3NpMTsKKwkJCQkJCUFzaWNFdmFsdWF0ZVJ4QW50KHBBZCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gaWYgbm90IGNvbm5lY3RlZCwgYWx3YXlzIHN3aXRjaCBhbnRlbm5hIHRvIHRyeSB0byBjb25uZWN0CisJCQkJCVVDSEFSCXRlbXA7CisKKwkJCQkJdGVtcCA9IHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQ7CisJCQkJCXBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQgPSBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQ7CisJCQkJCXBBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudCA9IHRlbXA7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVBlcmlvZGljRXhlYzogbm8gY29ubmVjdCwgc3dpdGNoIHRvIGFub3RoZXIgb25lIHRvIHRyeSBjb25uZWN0aW9uXG4iKSk7CisKKwkJCQkJQXNpY1NldFJ4QW50KHBBZCwgcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCk7CisJCQkJfQorCQkJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQW50ZW5uYSBtaXNjZWxsYW5lb3VzIHNldHRpbmcuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJQmFuZFN0YXRlCQkJCUluZGljYXRlIGN1cnJlbnQgQmFuZCBTdGF0ZS4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA8PSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKwkJMS4pIEZyYW1lIEVuZCB0eXBlIGNvbnRyb2wKKwkJCW9ubHkgdmFsaWQgZm9yIEcgb25seSAoUkZfMjUyNyAmIFJGXzI1MjkpCisJCQkwOiBtZWFucyBEUERULCBzZXQgQkJQIFI0IGJpdCA1IHRvIDEKKwkJCTE6IG1lYW5zIFNQRFQsIHNldCBCQlAgUjQgYml0IDUgdG8gMAorCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFzaWNBbnRlbm5hU2V0dGluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglBQkdCQU5EX1NUQVRFCUJhbmRTdGF0ZSkKK3sKK30KKworVk9JRCBBc2ljUmZUdW5pbmdFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHaXZlcyBDQ0sgVFggcmF0ZSAyIG1vcmUgZEIgVFggcG93ZXIuCisJCVRoaXMgcm91dGluZSB3b3JrcyBvbmx5IGluIExJTksgVVAgaW4gSU5GUkFTVFJVQ1RVUkUgbW9kZS4KKworCQljYWxjdWxhdGUgZGVzaXJlZCBUeCBwb3dlciBpbiBSRiBSMy5UeDB+NSwJc2hvdWxkIGNvbnNpZGVyIC0KKwkJMC4gaWYgY3VycmVudCByYWRpbyBpcyBhIG5vaXN5IGVudmlyb25tZW50IChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KQorCQkxLiBUeFBvd2VyUGVyY2VudGFnZQorCQkyLiBhdXRvIGNhbGlicmF0aW9uIGJhc2VkIG9uIFRTU0kgZmVlZGJhY2sKKwkJMy4gZXh0cmEgMiBkYiBmb3IgQ0NLCisJCTQuIC0xMCBkYiB1cG9uIHZlcnktc2hvcnQgZGlzdGFuY2UgKEF2Z1JTU0kgPj0gLTQwZGIpIHRvIEFQCisKKwlOT1RFOiBTaW5jZSB0aGlzIHJvdXRpbmUgcmVxdWlyZXMgdGhlIHZhbHVlIG9mIChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KSwKKwkJaXQgc2hvdWxkIGJlIGNhbGxlZCBBRlRFUiBNbG1lRHluYW1pY1R4UmF0U3dpdGNoaW5nKCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVAkJCWksIGo7CisJQ0hBUgkJRGVsdGFQd3IgPSAwOworCUJPT0xFQU4JCWJBdXRvVHhBZ2MgPSBGQUxTRTsKKwlVQ0hBUgkJVHNzaVJlZiwgKnBUc3NpTWludXNCb3VuZGFyeSwgKnBUc3NpUGx1c0JvdW5kYXJ5LCBUeEFnY1N0ZXA7CisJVUNIQVIJCUJicFIxID0gMCwgQmJwUjQ5ID0gMCwgaWR4OworCVBDSEFSCQlwVHhBZ2NDb21wZW5zYXRlOworCVVMT05HCQlUeFB3cls1XTsKKwlDSEFSCQlWYWx1ZTsKKworCisKKwlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gMTQpCisJCXsKKwkJCVR4UHdyWzBdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzBdOworCQkJVHhQd3JbMV0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMV07CisJCQlUeFB3clsyXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFsyXTsKKwkJCVR4UHdyWzNdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzNdOworCQkJVHhQd3JbNF0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbNF07CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzRdOworCQl9CisJfQorCWVsc2UKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJCXsKKwkJCVR4UHdyWzBdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzBdOworCQkJVHhQd3JbMV0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMV07CisJCQlUeFB3clsyXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFsyXTsKKwkJCVR4UHdyWzNdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzNdOworCQkJVHhQd3JbNF0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbNF07CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzRdOworCQl9CisJfQorCisJLy8gVFggcG93ZXIgY29tcGVuc2F0aW9uIGZvciB0ZW1wZXJhdHVyZSB2YXJpYXRpb24gYmFzZWQgb24gVFNTSS4gdHJ5IGV2ZXJ5IDQgc2Vjb25kCisJaWYgKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgNCA9PSAwKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCS8qIGJnIGNoYW5uZWwgKi8KKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0c7CisJCQlUc3NpUmVmICAgICAgICAgICAgPSBwQWQtPlRzc2lSZWZHOworCQkJcFRzc2lNaW51c0JvdW5kYXJ5ID0gJnBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzBdOworCQkJcFRzc2lQbHVzQm91bmRhcnkgID0gJnBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMF07CisJCQlUeEFnY1N0ZXAgICAgICAgICAgPSBwQWQtPlR4QWdjU3RlcEc7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVHOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogYSBjaGFubmVsICovCisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NBOworCQkJVHNzaVJlZiAgICAgICAgICAgID0gcEFkLT5Uc3NpUmVmQTsKKwkJCXBUc3NpTWludXNCb3VuZGFyeSA9ICZwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVswXTsKKwkJCXBUc3NpUGx1c0JvdW5kYXJ5ICA9ICZwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzBdOworCQkJVHhBZ2NTdGVwICAgICAgICAgID0gcEFkLT5UeEFnY1N0ZXBBOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlQTsKKwkJfQorCisJCWlmIChiQXV0b1R4QWdjKQorCQl7CisJCQkvKiBCYnBSMSBpcyB1bnNpZ25lZCBjaGFyICovCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQ5LCAmQmJwUjQ5KTsKKworCQkJLyogKHApIFRzc2lQbHVzQm91bmRhcnlHWzBdID0gMCA9IChtKSBUc3NpTWludXNCb3VuZGFyeUdbMF0gKi8KKwkJCS8qIGNvbXBlbnNhdGU6ICs0ICAgICArMyAgICsyICAgKzEgICAgMCAgIC0xICAgLTIgICAtMyAgIC00ICogc3RlcHMgKi8KKwkJCS8qIHN0ZXAgdmFsdWUgaXMgZGVmaW5lZCBpbiBwQWQtPlR4QWdjU3RlcEcgZm9yIHR4IHBvd2VyIHZhbHVlICovCisKKwkJCS8qIFs0XSsxK1s0XSAgIHA0ICAgICBwMyAgIHAyICAgcDEgICBvMSAgIG0xICAgbTIgICBtMyAgIG00ICovCisJCQkvKiBleDogICAgICAgICAweDAwIDB4MTUgMHgyNSAweDQ1IDB4ODggMHhBMCAweEI1IDB4RDAgMHhGMAorCQkJICAgYWJvdmUgdmFsdWUgYXJlIGV4YW1pbmVkIGluIG1hc3MgZmFjdG9yeSBwcm9kdWN0aW9uICovCisJCQkvKiAgICAgICAgICAgICBbNF0gICAgWzNdICBbMl0gIFsxXSAgWzBdICBbMV0gIFsyXSAgWzNdICBbNF0gKi8KKworCQkJLyogcGx1cyAoKykgaXMgMHgwMCB+IDB4NDUsIG1pbnVzICgtKSBpcyAweGEwIH4gMHhmMCAqLworCQkJLyogaWYgdmFsdWUgaXMgYmV0d2VlbiBwMSB+IG8xIG9yIG8xIH4gczEsIG5vIG5lZWQgdG8gYWRqdXN0IHR4IHBvd2VyICovCisJCQkvKiBpZiB2YWx1ZSBpcyAweGE1LCB0eCBwb3dlciB3aWxsIGJlIC09IFR4QWdjU3RlcCooMi0xKSAqLworCisJCQlpZiAoQmJwUjQ5ID4gcFRzc2lNaW51c0JvdW5kYXJ5WzFdKQorCQkJeworCQkJCS8vIFJlYWRpbmcgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZQorCQkJCS8vIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBkZWNyZWFzZSB0aGUgVHggcG93ZXIKKwkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKEJicFI0OSA8PSBwVHNzaU1pbnVzQm91bmRhcnlbaWR4XSkgIC8vIEZvdW5kIHRoZSByYW5nZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgZGVjcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlCisvLwkJCQlpZiAoUjMgPiAoVUxPTkcpIChUeEFnY1N0ZXAgKiAoaWR4LTEpKSkKKwkJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAtKFR4QWdjU3RlcCAqIChpZHgtMSkpOworLy8JCQkJZWxzZQorLy8JCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gLSgoVUNIQVIpUjMpOworCisJCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLSBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSAtJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCBpZHgtMSkpOworCQkJfQorCQkJZWxzZSBpZiAoQmJwUjQ5IDwgcFRzc2lQbHVzQm91bmRhcnlbMV0pCisJCQl7CisJCQkJLy8gUmVhZGluZyBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZQorCQkJCS8vIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgVHggcG93ZXIKKwkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKEJicFI0OSA+PSBwVHNzaVBsdXNCb3VuZGFyeVtpZHhdKSAgIC8vIEZvdW5kIHRoZSByYW5nZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgaW5jcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlCisJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSBUeEFnY1N0ZXAgKiAoaWR4LTEpOworCQkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiKysgVHggUG93ZXIsIEJCUCBSMT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gKyVkXG4iLAorCQkJCQlCYnBSNDksIFRzc2lSZWYsIFR4QWdjU3RlcCwgaWR4LTEpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IDA7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiICAgVHggUG93ZXIsIEJCUCBSNDk9JXgsIFRzc2lSZWY9JXgsIFR4QWdjU3RlcD0leCwgc3RlcCA9ICslZFxuIiwKKwkJCQkJQmJwUjQ5LCBUc3NpUmVmLCBUeEFnY1N0ZXAsIDApKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjRzsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUc7CisJCX0KKwkJZWxzZQorCQl7CisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NBOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlQTsKKwkJfQorCisJCWlmIChiQXV0b1R4QWdjKQorCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwl9CisKKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCYnBSMSk7CisJQmJwUjEgJj0gMHhGQzsKKworI2lmZGVmIFNJTkdMRV9TS1UKKwkvLyBIYW5kbGUgcmVndWxhdG9yeSBtYXggdHggcG93ZXIgY29uc3RyYWluCisJZG8KKwl7CisJCVVDSEFSICAgIFR4UHdySW5FRVBST00gPSAweEZGLCBDb3VudHJ5VHhQd3IgPSAweEZGLCBjcml0ZXJpb247CisJCVVDSEFSICAgIEFkanVzdE1heFR4UHdyWzQwXTsKKworCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAvLyA1RyBiYW5kCisJCQlUeFB3ckluRUVQUk9NID0gKChwQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3ciAmIDB4RkYwMCkgPj4gOCk7CisJCWVsc2UgLy8gMi40RyBiYW5kCisJCQlUeFB3ckluRUVQUk9NID0gKHBBZC0+Q29tbW9uQ2ZnLkRlZmluZU1heFR4UHdyICYgMHgwMEZGKTsKKwkJQ291bnRyeVR4UHdyID0gR2V0Q3VudHJ5TWF4VHhQd3IocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCQkvLyBlcnJvciBoYW5kbGluZywgcmFuZ2UgY2hlY2sKKwkJaWYgKChUeFB3ckluRUVQUk9NID4gMHg1MCkgfHwgKENvdW50cnlUeFB3ciA+IDB4NTApKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFzaWNBZGp1c3RUeFBvd2VyIC0gSW52YWxpZCBtYXggdHggcG93ZXIgKD0weCUwMngpLCBDb3VudHJ5VHhQd3I9JWRcbiIsIFR4UHdySW5FRVBST00sIENvdW50cnlUeFB3cikpOworCQkJYnJlYWs7CisJCX0KKworCQljcml0ZXJpb24gPSAqKChQVUNIQVIpVHhQd3IgKyAyKSAmIDB4RjsgICAgICAgIC8vIEZBRSB1c2UgT0ZETSA2TSBhcyBjcml0ZXJpb24KKworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRqdXN0VHhQb3dlciAoY3JpdGVyaW9uPSVkLCBUeFB3ckluRUVQUk9NPSVkLCBDb3VudHJ5VHhQd3I9JWQpXG4iLCBjcml0ZXJpb24sIFR4UHdySW5FRVBST00sIENvdW50cnlUeFB3cikpOworCisJCS8vIEFkanVzdCBtYXggdHggcG93ZXIgYWNjb3JkaW5nIHRvIHRoZSByZWxhdGlvbnNoaXAgb2YgdHggcG93ZXIgaW4gRTJQUk9NCisJCWZvciAoaT0wOyBpPDU7IGkrKykKKwkJeworCQkJLy8gQ0NLIHdpbGwgaGF2ZSA0ZEJtIGxhcmdlciB0aGFuIE9GRE0KKwkJCS8vIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHNlcGFyYXRlIHRvIHBhcnNlIHRoZSB0eCBwb3dlciBmaWVsZAorCQkJaWYgKGkgPT0gMCkKKwkJCXsKKwkJCQlmb3IgKGo9MDsgajw4OyBqKyspCisJCQkJeworCQkJCQlWYWx1ZSA9IChDSEFSKSgoVHhQd3JbaV0gPj4gaio0KSAmIDB4MEYpOworCisJCQkJCWlmIChqIDwgNCkKKwkJCQkJeworCQkJCQkJLy8gQ0NLIHdpbGwgaGF2ZSA0ZEJtIGxhcmdlciB0aGFuIE9GRE0KKwkJCQkJCUFkanVzdE1heFR4UHdyW2kqOCtqXSA9IFR4UHdySW5FRVBST00gKyAoVmFsdWUgLSBjcml0ZXJpb24pICsgNDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCUFkanVzdE1heFR4UHdyW2kqOCtqXSA9IFR4UHdySW5FRVBST00gKyAoVmFsdWUgLSBjcml0ZXJpb24pOworCQkJCQl9CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGp1c3RUeFBvd2VyIChpL2o9JWQvJWQsIFZhbHVlPSVkLCAlZClcbiIsIGksIGosIFZhbHVlLCBBZGp1c3RNYXhUeFB3cltpKjgral0pKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAoQ0hBUikoKFR4UHdyW2ldID4+IGoqNCkgJiAweDBGKTsKKworCQkJCQlBZGp1c3RNYXhUeFB3cltpKjgral0gPSBUeFB3ckluRUVQUk9NICsgKFZhbHVlIC0gY3JpdGVyaW9uKTsKKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkanVzdFR4UG93ZXIgKGkvaj0lZC8lZCwgVmFsdWU9JWQsICVkKVxuIiwgaSwgaiwgVmFsdWUsIEFkanVzdE1heFR4UHdyW2kqOCtqXSkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEFkanVzdCB0eCBwb3dlciBhY2NvcmRpbmcgdG8gdGhlIHJlbGF0aW9uc2hpcAorCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCXsKKwkJCWlmIChUeFB3cltpXSAhPSAweGZmZmZmZmZmKQorCQkJeworCQkJCWZvciAoaj0wOyBqPDg7IGorKykKKwkJCQl7CisJCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7CisKKwkJCQkJLy8gVGhlIHN5c3RlbSB0eCBwb3dlciBpcyBsYXJnZXIgdGhhbiB0aGUgcmVndWxhdG9yeSwgdGhlIHBvd2VyIHNob3VsZCBiZSByZXN0cmFpbgorCQkJCQlpZiAoQWRqdXN0TWF4VHhQd3JbaSo4K2pdID4gQ291bnRyeVR4UHdyKQorCQkJCQl7CisJCQkJCQkvLyBkZWNyZWFzZSB0byB6ZXJvIGFuZCBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBCQlBSMQorCQkJCQkJaWYgKChWYWx1ZSAtIChBZGp1c3RNYXhUeFB3cltpKjgral0gLSBDb3VudHJ5VHhQd3IpKSA+IDApCisJCQkJCQkJVmFsdWUgLT0gKEFkanVzdE1heFR4UHdyW2kqOCtqXSAtIENvdW50cnlUeFB3cik7CisJCQkJCQllbHNlCisJCQkJCQkJVmFsdWUgPSAwOworCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRqdXN0VHhQb3dlciAoaS9qPSVkLyVkLCBWYWx1ZT0lZCwgJWQpXG4iLCBpLCBqLCBWYWx1ZSwgQWRqdXN0TWF4VHhQd3JbaSo4K2pdKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkanVzdFR4UG93ZXIgKGkvaj0lZC8lZCwgVmFsdWU9JWQsICVkLCBubyBjaGFuZ2UpXG4iLCBpLCBqLCBWYWx1ZSwgQWRqdXN0TWF4VHhQd3JbaSo4K2pdKSk7CisKKwkJCQkJCVR4UHdyW2ldID0gKFR4UHdyW2ldICYgfigweDAwMDAwMDBGIDw8IGoqNCkpIHwgKFZhbHVlIDw8IGoqNCk7CisJCQkJfQorCQkJfQorCQl9CisJfSB3aGlsZSAoRkFMU0UpOworI2VuZGlmIC8vIFNJTkdMRV9TS1UgLy8KKworCS8qIGNhbGN1bGF0ZSBkZWx0YSBwb3dlciBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBzcGVjaWZpZWQgZnJvbSBVSSAqLworCS8vIEUyUFJPTSBzZXR0aW5nIGlzIGNhbGlicmF0ZWQgZm9yIG1heGltdW0gVFggcG93ZXIgKGkuZS4gMTAwJSkKKwkvLyBXZSBsb3dlciBUWCBwb3dlciBoZXJlIGFjY29yZGluZyB0byB0aGUgcGVyY2VudGFnZSBzcGVjaWZpZWQgZnJvbSBVSQorCWlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9PSAweGZmZmZmZmZmKSAgICAgICAvLyBBVVRPIFRYIFBPV0VSIGNvbnRyb2wKKwkJOworCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOTApICAvLyA5MSB+IDEwMCUgJiBBVVRPLCB0cmVhdCBhcyAxMDAlIGluIHRlcm1zIG9mIG1XCisJCTsKKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDYwKSAgLy8gNjEgfiA5MCUsIHRyZWF0IGFzIDc1JSBpbiB0ZXJtcyBvZiBtVwkJLy8gRGVsdGFQd3IgLT0gMTsKKwl7CisJCURlbHRhUHdyIC09IDE7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMzApICAvLyAzMSB+IDYwJSwgdHJlYXQgYXMgNTAlIGluIHRlcm1zIG9mIG1XCQkvLyBEZWx0YVB3ciAtPSAzOworCXsKKwkJRGVsdGFQd3IgLT0gMzsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiAxNSkgIC8vIDE2IH4gMzAlLCB0cmVhdCBhcyAyNSUgaW4gdGVybXMgb2YgbVcJCS8vIERlbHRhUHdyIC09IDY7CisJeworCQlCYnBSMSB8PSAweDAxOworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkpICAgLy8gMTAgfiAxNSUsIHRyZWF0IGFzIDEyLjUlIGluIHRlcm1zIG9mIG1XCQkvLyBEZWx0YVB3ciAtPSA5OworCXsKKwkJQmJwUjEgfD0gMHgwMTsKKwkJRGVsdGFQd3IgLT0gMzsKKwl9CisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIH4gOSAlLCB0cmVhdCBhcyBNSU4ofjMlKSBpbiB0ZXJtcyBvZiBtVwkJLy8gRGVsdGFQd3IgLT0gMTI7CisJeworCQlCYnBSMSB8PSAweDAyOworCX0KKworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsIEJicFIxKTsKKworCS8qIHJlc2V0IGRpZmZlcmVudCBuZXcgdHggcG93ZXIgZm9yIGRpZmZlcmVudCBUWCByYXRlICovCisJZm9yKGk9MDsgaTw1OyBpKyspCisJeworCQlpZiAoVHhQd3JbaV0gIT0gMHhmZmZmZmZmZikKKwkJeworCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJeworCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7IC8qIDAgfiAxNSAqLworCisJCQkJaWYgKChWYWx1ZSArIERlbHRhUHdyKSA8IDApCisJCQkJeworCQkJCQlWYWx1ZSA9IDA7IC8qIG1pbiAqLworCQkJCX0KKwkJCQllbHNlIGlmICgoVmFsdWUgKyBEZWx0YVB3cikgPiAweEYpCisJCQkJeworCQkJCQlWYWx1ZSA9IDB4RjsgLyogbWF4ICovCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVZhbHVlICs9IERlbHRhUHdyOyAvKiB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gKi8KKwkJCQl9CisKKwkJCQkvKiBmaWxsIG5ldyB2YWx1ZSB0byBDU1Igb2Zmc2V0ICovCisJCQkJVHhQd3JbaV0gPSAoVHhQd3JbaV0gJiB+KDB4MDAwMDAwMEYgPDwgaio0KSkgfCAoVmFsdWUgPDwgaio0KTsKKwkJCX0KKworCQkJLyogd3JpdGUgdHggcG93ZXIgdmFsdWUgdG8gQ1NSICovCisJCQkvKiBUWF9QV1JfQ0ZHXzAgKDggdHggcmF0ZSkgZm9yCVRYIHBvd2VyIGZvciBPRkRNIDEyTS8xOE0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIE9GRE0gNk0vOU0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIENDSzUuNU0vMTFNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBDQ0sxTS8yTSAqLworCQkJLyogVFhfUFdSX0NGR18xIH4gVFhfUFdSX0NGR180ICovCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QV1JfQ0ZHXzAgKyBpKjQsIFR4UHdyW2ldKTsKKwkJfQorCX0KKworCit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcHV0IFBIWSB0byBzbGVlcCBoZXJlLCBhbmQgc2V0IG5leHQgd2FrZXVwIHRpbWVyLiBQSFkgZG9lc24ndCBub3Qgd2FrZXVwCisJCWF1dG9tYXRpY2FsbHkuIEluc3RlYWQsIE1DVSB3aWxsIGlzc3VlIGEgVHdha2VVcEludGVycnVwdCB0byBob3N0IGFmdGVyCisJCXRoZSB3YWtldXAgdGltZXIgdGltZW91dC4gRHJpdmVyIGhhcyB0byBpc3N1ZSBhIHNlcGFyYXRlIGNvbW1hbmQgdG8gd2FrZQorCQlQSFkgdXAuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApCit7CisgICAgUlQyOFhYX1NUQV9TTEVFUF9USEVOX0FVVE9fV0FLRVVQKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQXNpY0ZvcmNlV2FrZXVwKCkgaXMgdXNlZCB3aGVuZXZlciBtYW51YWwgd2FrZXVwIGlzIHJlcXVpcmVkCisJCUFzaWNGb3JjZVNsZWVwKCkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIG5vdCBpbiBJTkZSQSBCU1MuIFdoZW4KKwkJaW4gSU5GUkEgQlNTLCB3ZSBzaG91bGQgdXNlIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKCkgaW5zdGVhZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNGb3JjZVNsZWVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQXNpY0ZvcmNlV2FrZXVwKCkgaXMgdXNlZCB3aGVuZXZlciBUd2FrZXVwIHRpbWVyIChzZXQgdmlhIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKQorCQlleHBpcmVkLgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNGb3JjZVdha2V1cCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOICAgIGJGcm9tVHgpCit7CisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IEFzaWNGb3JjZVdha2V1cCBcbiIpKTsKKyAgICBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIGJGcm9tVHgpOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTZXQgTXkgQlNTSUQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljU2V0QnNzaWQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBCc3NpZCkKK3sKKwlVTE9ORwkJICBBZGRyNDsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PT09PT09PT09PT4gQXNpY1NldEJzc2lkICV4OiV4OiV4OiV4OiV4OiV4XG4iLAorCQlwQnNzaWRbMF0scEJzc2lkWzFdLHBCc3NpZFsyXSxwQnNzaWRbM10sIHBCc3NpZFs0XSxwQnNzaWRbNV0pKTsKKworCUFkZHI0ID0gKFVMT05HKShwQnNzaWRbMF0pCQkgfAorCQkJKFVMT05HKShwQnNzaWRbMV0gPDwgOCkgIHwKKwkJCShVTE9ORykocEJzc2lkWzJdIDw8IDE2KSB8CisJCQkoVUxPTkcpKHBCc3NpZFszXSA8PCAyNCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0JTU0lEX0RXMCwgQWRkcjQpOworCisJQWRkcjQgPSAwOworCS8vIGFsd2F5cyBvbmUgQlNTSUQgaW4gU1RBIG1vZGUKKwlBZGRyNCA9IChVTE9ORykocEJzc2lkWzRdKSB8IChVTE9ORykocEJzc2lkWzVdIDw8IDgpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0JTU0lEX0RXMSwgQWRkcjQpOworfQorCitWT0lEIEFzaWNTZXRNY2FzdFdDKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF07CisJVVNIT1JUCQlvZmZzZXQ7CisKKwlwRW50cnktPlNzdCAgICAgICAgPSBTU1RfQVNTT0M7CisJcEVudHJ5LT5BaWQgICAgICAgID0gTUNBU1RfV0NJRDsJLy8gU29mdGFwIHN1cHBvcnRzIDEgQlNTSUQgYW5kIHVzZSBXQ0lEPTAgYXMgbXVsdGljYXN0IFdjaWQgaW5kZXgKKwlwRW50cnktPlBzTW9kZSAgICAgPSBQV1JfQUNUSVZFOworCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlOworCW9mZnNldCA9IE1BQ19XQ0lEX0JBU0UgKyBCU1MwTWNhc3RfV0NJRCAqIEhXX1dDSURfRU5UUllfU0laRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNEZWxXY2lkVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCVdjaWQpCit7CisJVUxPTkcJCSAgQWRkcjAgPSAweDAsIEFkZHIxID0gMHgwOworCVVMT05HIAkJb2Zmc2V0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0RlbFdjaWRUYWI9PT5XY2lkID0gMHgleFxuIixXY2lkKSk7CisJb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIFdjaWQgKiBIV19XQ0lEX0VOVFJZX1NJWkU7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyMCk7CisJb2Zmc2V0ICs9IDQ7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyMSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRW5hYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVRYX0xJTktfQ0ZHX1NUUlVDCVR4TGlua0NmZzsKKwlVSU5UMzIJCQkJRGF0YSA9IDA7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0xJTktfQ0ZHLCAmVHhMaW5rQ2ZnLndvcmQpOworCVR4TGlua0NmZy5maWVsZC5UeFJER0VuID0gMTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBFRENBX0FDMF9DRkcsICZEYXRhKTsKKwlEYXRhICAmPSAweEZGRkZGRjAwOworCURhdGEgIHw9IDB4ODA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBEYXRhKTsKKworCS8vT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNEaXNhYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVRYX0xJTktfQ0ZHX1NUUlVDCVR4TGlua0NmZzsKKwlVSU5UMzIJCQkJRGF0YSA9IDA7CisKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfTElOS19DRkcsICZUeExpbmtDZmcud29yZCk7CisJVHhMaW5rQ2ZnLmZpZWxkLlR4UkRHRW4gPSAwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0xJTktfQ0ZHLCBUeExpbmtDZmcud29yZCk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJkRhdGEpOworCisJRGF0YSAgJj0gMHhGRkZGRkYwMDsKKwkvL0RhdGEgIHw9IDB4MjA7CisjaWZuZGVmIFdJRklfVEVTVAorCS8vaWYgKCBwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCApCisJLy8JRGF0YSB8PSAweDYwOyAvLyBmb3IgcGVyZm9ybWFuY2UgaXNzdWUgbm90IHNldCB0aGUgVFhPUCB0byAwCisjZW5kaWYKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0RZTkFNSUNfQkVfVFhPUF9BQ1RJVkUpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCSYmIChwQWQtPk1hY1RhYi5mQW55U3RhdGlvbk1JTU9QU0R5bmFtaWMgPT0gRkFMU0UpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJKQorCXsKKwkJLy8gRm9yIENXQyB0ZXN0LCBjaGFuZ2UgdHhvcCBmcm9tIDB4MzAgdG8gMHgyMCBpbiBUeEJ1cnN0IG1vZGUKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KQorCQkJRGF0YSB8PSAweDIwOworCX0KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRGlzYWJsZVN5bmMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5EaXNhYmxlIFRTRiBzeW5jaHJvbml6YXRpb25cbiIpKTsKKworCS8vIDIwMDMtMTItMjAgZGlzYWJsZSBUU0YgYW5kIFRCVFQgd2hpbGUgTklDIGluIHBvd2VyLXNhdmluZyBoYXZlIHNpZGUgZWZmZWN0CisJLy8JCQkgIHRoYXQgTklDIHdpbGwgbmV2ZXIgd2FrZXMgdXAgYmVjYXVzZSBUU0Ygc3RvcHMgYW5kIG5vIG1vcmUKKwkvLwkJCSAgVEJUVCBpbnRlcnJ1cHRzCisJcEFkLT5UYnR0VGlja0NvdW50ID0gMDsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzci53b3JkKTsKKwljc3IuZmllbGQuYkJlYWNvbkdlbiA9IDA7CisJY3NyLmZpZWxkLmJUQlRURW5hYmxlID0gMDsKKwljc3IuZmllbGQuVHNmU3luY01vZGUgPSAwOworCWNzci5maWVsZC5iVHNmVGlja2luZyA9IDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNFbmFibGVCc3NTeW5jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+QXNpY0VuYWJsZUJzc1N5bmMoSU5GUkEgbW9kZSlcbiIpKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOworLy8JUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAweDAwMDAwMDAwKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJY3NyLmZpZWxkLkJlYWNvbkludGVydmFsID0gcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDQ7IC8vIEFTSUMgcmVnaXN0ZXIgaW4gdW5pdHMgb2YgMS8xNiBUVQorCQljc3IuZmllbGQuYlRzZlRpY2tpbmcgPSAxOworCQljc3IuZmllbGQuVHNmU3luY01vZGUgPSAxOyAvLyBzeW5jIFRTRiBpbiBJTkZSQVNUUlVDVFVSRSBtb2RlCisJCWNzci5maWVsZC5iQmVhY29uR2VuICA9IDA7IC8vIGRvIE5PVCBnZW5lcmF0ZSBCRUFDT04KKwkJY3NyLmZpZWxkLmJUQlRURW5hYmxlID0gMTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwlOb3RlOgorCQlCRUFDT04gZnJhbWUgaW4gc2hhcmVkIG1lbW9yeSBzaG91bGQgYmUgYnVpbHQgb2sgYmVmb3JlIHRoaXMgcm91dGluZQorCQljYW4gYmUgY2FsbGVkLiBPdGhlcndpc2UsIGEgZ2FyYmFnZSBmcmFtZSBtYXliZSB0cmFuc21pdHRlZCBvdXQgZXZlcnkKKwkJQmVhY29uIHBlcmlvZC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRW5hYmxlSWJzc1N5bmMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjk7CisJUFVDSEFSCQkJcHRyOworCVVJTlQgaTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5Bc2ljRW5hYmxlSWJzc1N5bmMoQURIT0MgbW9kZS4gTVBEVXRvdGFsQnl0ZUNvdW50ID0gJWQpXG4iLCBwQWQtPkJlYWNvblR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50KSk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzcjkud29yZCk7CisJY3NyOS5maWVsZC5iQmVhY29uR2VuID0gMDsKKwljc3I5LmZpZWxkLmJUQlRURW5hYmxlID0gMDsKKwljc3I5LmZpZWxkLmJUc2ZUaWNraW5nID0gMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzcjkud29yZCk7CisKKworI2lmZGVmIFJUMjg3MAorCS8vIG1vdmUgQkVBQ09OIFRYRCBhbmQgZnJhbWUgY29udGVudCB0byBvbi1jaGlwIG1lbW9yeQorCXB0ciA9IChQVUNIQVIpJnBBZC0+QmVhY29uVHhXSTsKKwlmb3IgKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTIpICAvLyAxNi1ieXRlIFRYV0kgZmllbGQKKwl7CisJCS8vVUlOVDMyIGxvbmdwdHIgPSAgKnB0ciArICgqKHB0cisxKTw8OCkgKyAoKihwdHIrMik8PDE2KSArICgqKHB0ciszKTw8MjQpOworCQkvL1JUTVBfSU9fV1JJVEUzMihwQWQsIEhXX0JFQUNPTl9CQVNFMCArIGksIGxvbmdwdHIpOworCQlSVFVTQk11bHRpV3JpdGUocEFkLCBIV19CRUFDT05fQkFTRTAgKyBpLCBwdHIsIDIpOworCQlwdHIgKz0gMjsKKwl9CisKKwkvLyBzdGFydCByaWdodCBhZnRlciB0aGUgMTYtYnl0ZSBUWFdJIGZpZWxkCisJcHRyID0gcEFkLT5CZWFjb25CdWY7CisJZm9yIChpPTA7IGk8IHBBZC0+QmVhY29uVHhXSS5NUERVdG90YWxCeXRlQ291bnQ7IGkrPTIpCisJeworCQkvL1VJTlQzMiBsb25ncHRyID0gICpwdHIgKyAoKihwdHIrMSk8PDgpICsgKCoocHRyKzIpPDwxNikgKyAoKihwdHIrMyk8PDI0KTsKKwkJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBIV19CRUFDT05fQkFTRTAgKyBUWFdJX1NJWkUgKyBpLCBsb25ncHRyKTsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgVFhXSV9TSVpFICsgaSwgcHRyLCAyKTsKKwkJcHRyICs9MjsKKwl9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLworCS8vIEZvciBXaS1GaSBmYWlseSBnZW5lcmF0ZWQgYmVhY29ucyBiZXR3ZWVuIHBhcnRpY2lwYXRpbmcgc3RhdGlvbnMuCisJLy8gU2V0IFRCVFQgcGhhc2UgYWRhcHRpdmUgYWRqdXN0bWVudCBzdGVwIHRvIDh1cyAoZGVmYXVsdCAxNnVzKQorCS8vIGRvbid0IGNoYW5nZSBzZXR0aW5ncyAyMDA2LTUtIGJ5IEplcnJ5CisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBUQlRUX1NZTkNfQ0ZHLCAweDAwMDAxMDEwKTsKKworCS8vIHN0YXJ0IHNlbmRpbmcgQkVBQ09OCisJY3NyOS5maWVsZC5CZWFjb25JbnRlcnZhbCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCA0OyAvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUKKwljc3I5LmZpZWxkLmJUc2ZUaWNraW5nID0gMTsKKwljc3I5LmZpZWxkLlRzZlN5bmNNb2RlID0gMjsgLy8gc3luYyBUU0YgaW4gSUJTUyBtb2RlCisJY3NyOS5maWVsZC5iVEJUVEVuYWJsZSA9IDE7CisJY3NyOS5maWVsZC5iQmVhY29uR2VuID0gMTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzcjkud29yZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNTZXRFZGNhUGFybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRURDQV9QQVJNCSBwRWRjYVBhcm0pCit7CisJRURDQV9BQ19DRkdfU1RSVUMgICBBYzBDZmcsIEFjMUNmZywgQWMyQ2ZnLCBBYzNDZmc7CisJQUNfVFhPUF9DU1IwX1NUUlVDIGNzcjA7CisJQUNfVFhPUF9DU1IxX1NUUlVDIGNzcjE7CisJQUlGU05fQ1NSX1NUUlVDICAgIEFpZnNuQ3NyOworCUNXTUlOX0NTUl9TVFJVQyAgICBDd21pbkNzcjsKKwlDV01BWF9DU1JfU1RSVUMgICAgQ3dtYXhDc3I7CisJaW50IGk7CisKKwlBYzBDZmcud29yZCA9IDA7CisJQWMxQ2ZnLndvcmQgPSAwOworCUFjMkNmZy53b3JkID0gMDsKKwlBYzNDZmcud29yZCA9IDA7CisJaWYgKChwRWRjYVBhcm0gPT0gTlVMTCkgfHwgKHBFZGNhUGFybS0+YlZhbGlkID09IEZBTFNFKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY1NldEVkY2FQYXJtXG4iKSk7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpOworCQlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCQl7CisJCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJIHx8IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0FwQ2xpKQorCQkJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtpXSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCQl9CisKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyAgICAgIE1BQyBSZWdpc3RlciBoYXMgYSBjb3B5IC4KKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8jaWZuZGVmIFdJRklfVEVTVAorCQlpZiggcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgKQorCQl7CisJCQkvLyBGb3IgQ1dDIHRlc3QsIGNoYW5nZSB0eG9wIGZyb20gMHgzMCB0byAweDIwIGluIFR4QnVyc3QgbW9kZQorCQkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IDB4MjA7IC8vIFN1Z2dlc3QgYnkgSm9obiBmb3IgVHhCdXJzdCBpbiBIVCBNb2RlCisJCX0KKwkJZWxzZQorCQkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IDA7CS8vIFFJRF9BQ19CRQorLy8jZWxzZQorLy8JCUFjMENmZy5maWVsZC5BY1R4b3AgPSAwOwkvLyBRSURfQUNfQkUKKy8vI2VuZGlmCisJCUFjMENmZy5maWVsZC5Dd21pbiA9IENXX01JTl9JTl9CSVRTOworCQlBYzBDZmcuZmllbGQuQ3dtYXggPSBDV19NQVhfSU5fQklUUzsKKwkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gMjsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBBYzBDZmcud29yZCk7CisKKwkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9IDA7CS8vIFFJRF9BQ19CSworCQlBYzFDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMxQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjMUNmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMxX0NGRywgQWMxQ2ZnLndvcmQpOworCisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisJCXsKKwkJCUFjMkNmZy5maWVsZC5BY1R4b3AgPSAxOTI7CS8vIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMKKwkJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSA5NjsJLy8gQUNfVk86IDk2KjMydXMgIH49IDNtcworCQl9CisJCWVsc2UKKwkJeworCQkJQWMyQ2ZnLmZpZWxkLkFjVHhvcCA9IDk2OwkvLyBBQ19WSTogOTYqMzJ1cyB+PSAzbXMKKwkJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSA0ODsJLy8gQUNfVk86IDQ4KjMydXMgfj0gMS41bXMKKwkJfQorCQlBYzJDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMyQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjMkNmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMyX0NGRywgQWMyQ2ZnLndvcmQpOworCQlBYzNDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMzQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjM0NmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMzX0NGRywgQWMzQ2ZnLndvcmQpOworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBETUEgUmVnaXN0ZXIgaGFzIGEgY29weSB0b28uCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJY3NyMC5maWVsZC5BYzBUeG9wID0gMDsJCS8vIFFJRF9BQ19CRQorCQljc3IwLmZpZWxkLkFjMVR4b3AgPSAwOwkJLy8gUUlEX0FDX0JLCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMF9DRkcsIGNzcjAud29yZCk7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisJCXsKKwkJCWNzcjEuZmllbGQuQWMyVHhvcCA9IDE5MjsJCS8vIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMKKwkJCWNzcjEuZmllbGQuQWMzVHhvcCA9IDk2OwkJLy8gQUNfVk86IDk2KjMydXMgIH49IDNtcworCQl9CisJCWVsc2UKKwkJeworCQkJY3NyMS5maWVsZC5BYzJUeG9wID0gOTY7CQkvLyBBQ19WSTogOTYqMzJ1cyB+PSAzbXMKKwkJCWNzcjEuZmllbGQuQWMzVHhvcCA9IDQ4OwkJLy8gQUNfVk86IDQ4KjMydXMgfj0gMS41bXMKKwkJfQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IxLndvcmQpOworCisJCUN3bWluQ3NyLndvcmQgPSAwOworCQlDd21pbkNzci5maWVsZC5Dd21pbjAgPSBDV19NSU5fSU5fQklUUzsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4xID0gQ1dfTUlOX0lOX0JJVFM7CisJCUN3bWluQ3NyLmZpZWxkLkN3bWluMiA9IENXX01JTl9JTl9CSVRTOworCQlDd21pbkNzci5maWVsZC5Dd21pbjMgPSBDV19NSU5fSU5fQklUUzsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0NXTUlOX0NGRywgQ3dtaW5Dc3Iud29yZCk7CisKKwkJQ3dtYXhDc3Iud29yZCA9IDA7CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MCA9IENXX01BWF9JTl9CSVRTOworCQlDd21heENzci5maWVsZC5Dd21heDEgPSBDV19NQVhfSU5fQklUUzsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgyID0gQ1dfTUFYX0lOX0JJVFM7CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MyA9IENXX01BWF9JTl9CSVRTOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNQVhfQ0ZHLCBDd21heENzci53b3JkKTsKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQUlGU05fQ0ZHLCAweDAwMDAyMjIyKTsKKworCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCX0KKwllbHNlCisJeworCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCk7CisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBNQUMgUmVnaXN0ZXIgaGFzIGEgY29weS4KKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLworCQkvLyBNb2RpZnkgQ3dtaW4vQ3dtYXgvVHhvcCBvbiBxdWV1ZVtRSURfQUNfVkldLCBSZWNvbW1lbmQgYnkgSmVycnkgMjAwNS8wNy8yNworCQkvLyBUbyBkZWdyYWRlIG91ciBWSURPIFF1ZXVlJ3MgdGhyb3VnaHB1dCBmb3IgV2lGaSBXTU0gUzNUMDcgSXNzdWUuCisJCS8vCisJCS8vcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV0gPSBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXSAqIDcgLyAxMDsgLy8gcnQyODYwYyBuZWVkIHRoaXMKKworCQlBYzBDZmcuZmllbGQuQWNUeG9wID0gIHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdOworCQlBYzBDZmcuZmllbGQuQ3dtaW49IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JFXTsKKwkJQWMwQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdOworCQlBYzBDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV07IC8vKzE7CisKKwkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9ICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JLXTsKKwkJQWMxQ2ZnLmZpZWxkLkN3bWluID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQktdOyAvLysyOworCQlBYzFDZmcuZmllbGQuQ3dtYXggPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19CS107CisJCUFjMUNmZy5maWVsZC5BaWZzbiA9IHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JLXTsgLy8rMTsKKworCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gKHBFZGNhUGFybS0+VHhvcFtRSURfQUNfVkldICogNikgLyAxMDsKKwkJQWMyQ2ZnLmZpZWxkLkN3bWluID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVkldOworCQlBYzJDZmcuZmllbGQuQ3dtYXggPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WSV07CisJCUFjMkNmZy5maWVsZC5BaWZzbiA9IHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXTsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJLy8gVHVuaW5nIGZvciBXaS1GaSBXTU0gUzA2CisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpRmlUZXN0ICYmCisJCQkJcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKQorCQkJCUFjMkNmZy5maWVsZC5BaWZzbiAtPSAxOworCisJCQkvLyBUdW5pbmcgZm9yIFRHbiBXaS1GaSA1LjIuMzIKKwkJCS8vIFNUQSBUZXN0QmVkIGNoYW5nZXMgaW4gdGhpcyBpdGVtOiBjb25leGFudCBsZWdhY3kgc3RhID09PiBicm9hZGNvbSAxMW4gc3RhCisJCQlpZiAoU1RBX1RHTl9XSUZJX09OKHBBZCkgJiYKKwkJCQlwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gPT0gMTApCisJCQl7CisJCQkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gMzsKKwkJCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gNTsKKwkJCX0KKworI2lmZGVmIFJUMzB4eAorCQkJaWYgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwIHx8IHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKQorCQkJeworCQkJCS8vIFR1bmluZyBmb3IgV2lGaSBXTU0gUzMtVDA3OiBjb25uZXhhbnQgbGVnYWN5IHN0YSA9PT4gYnJvYWRjb20gMTFuIHN0YS4KKwkJCQlBYzJDZmcuZmllbGQuQWlmc24gPSA1OworCQkJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJQWMzQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfVk9dOworCQlBYzNDZmcuZmllbGQuQ3dtaW4gPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WT107CisJCUFjM0NmZy5maWVsZC5Dd21heCA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZPXTsKKwkJQWMzQ2ZnLmZpZWxkLkFpZnNuID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVk9dOworCisvLyNpZmRlZiBXSUZJX1RFU1QKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCkKKwkJeworCQkJaWYgKEFjM0NmZy5maWVsZC5BY1R4b3AgPT0gMTAyKQorCQkJeworCQkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdID8gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CRV0gOiAxMDsKKwkJCQlBYzBDZmcuZmllbGQuQWlmc24gID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQkVdLTE7IC8qIEFJRlNOIG11c3QgPj0gMSAqLworCQkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQktdOworCQkJCUFjMUNmZy5maWVsZC5BaWZzbiAgPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CS107CisJCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV07CisJCQl9IC8qIEVuZCBvZiBpZiAqLworCQl9CisvLyNlbmRpZiAvLyBXSUZJX1RFU1QgLy8KKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIEFjMENmZy53b3JkKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzFfQ0ZHLCBBYzFDZmcud29yZCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMyX0NGRywgQWMyQ2ZnLndvcmQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDM19DRkcsIEFjM0NmZy53b3JkKTsKKworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBETUEgUmVnaXN0ZXIgaGFzIGEgY29weSB0b28uCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJY3NyMC5maWVsZC5BYzBUeG9wID0gQWMwQ2ZnLmZpZWxkLkFjVHhvcDsKKwkJY3NyMC5maWVsZC5BYzFUeG9wID0gQWMxQ2ZnLmZpZWxkLkFjVHhvcDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AwX0NGRywgY3NyMC53b3JkKTsKKworCQljc3IxLmZpZWxkLkFjMlR4b3AgPSBBYzJDZmcuZmllbGQuQWNUeG9wOworCQljc3IxLmZpZWxkLkFjM1R4b3AgPSBBYzNDZmcuZmllbGQuQWNUeG9wOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IxLndvcmQpOworCisJCUN3bWluQ3NyLndvcmQgPSAwOworCQlDd21pbkNzci5maWVsZC5Dd21pbjAgPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CRV07CisJCUN3bWluQ3NyLmZpZWxkLkN3bWluMSA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JLXTsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4yID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVkldOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4zID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVk9dIC0gMTsgLy9mb3IgVEduIHdpZmkgdGVzdAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNSU5fQ0ZHLCBDd21pbkNzci53b3JkKTsKKworCQlDd21heENzci53b3JkID0gMDsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgwID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdOworCQlDd21heENzci5maWVsZC5Dd21heDEgPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19CS107CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MiA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZJXTsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgzID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVk9dOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNQVhfQ0ZHLCBDd21heENzci53b3JkKTsKKworCQlBaWZzbkNzci53b3JkID0gMDsKKwkJQWlmc25Dc3IuZmllbGQuQWlmc24wID0gQWMwQ2ZnLmZpZWxkLkFpZnNuOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JFXTsKKwkJQWlmc25Dc3IuZmllbGQuQWlmc24xID0gQWMxQ2ZnLmZpZWxkLkFpZnNuOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JLXTsKKwkJQWlmc25Dc3IuZmllbGQuQWlmc24yID0gQWMyQ2ZnLmZpZWxkLkFpZnNuOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXTsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJLy8gVHVuaW5nIGZvciBXaS1GaSBXTU0gUzA2CisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpRmlUZXN0ICYmCisJCQkJcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKQorCQkJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMiA9IEFjMkNmZy5maWVsZC5BaWZzbiAtIDQ7CisKKwkJCS8vIFR1bmluZyBmb3IgVEduIFdpLUZpIDUuMi4zMgorCQkJLy8gU1RBIFRlc3RCZWQgY2hhbmdlcyBpbiB0aGlzIGl0ZW06IGNvbm5leGFudCBsZWdhY3kgc3RhID09PiBicm9hZGNvbSAxMW4gc3RhCisJCQlpZiAoU1RBX1RHTl9XSUZJX09OKHBBZCkgJiYKKwkJCQlwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gPT0gMTApCisJCQl7CisJCQkJQWlmc25Dc3IuZmllbGQuQWlmc24wID0gMzsKKwkJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSA3OworCQkJfQorCisJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQWlmc25Dc3IuZmllbGQuQWlmc24zID0gQWMzQ2ZnLmZpZWxkLkFpZnNuIC0gMTsgLy9wRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WT107IC8vZm9yIFRHbiB3aWZpIHRlc3QKKyNpZmRlZiBSVDMweHgKKwkJaWYgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwIHx8IHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKQorCQl7CisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSAweDI7IC8vcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldOyAvL2ZvciBXaUZpIFdNTSBTNC1UMDQuCisJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0FJRlNOX0NGRywgQWlmc25Dc3Iud29yZCk7CisKKwkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0sIHBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCQlpZiAoIUFESE9DX09OKHBBZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRURDQSBbIyVkXTogQUlGU04gQ1dtaW4gQ1dtYXggIFRYT1AodXMpICBBQ01cbiIsIHBFZGNhUGFybS0+RWRjYVVwZGF0ZUNvdW50KSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfQkUgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzBdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bMF0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFswXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbMF08PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzBdKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfQksgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzFdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bMV0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFsxXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbMV08PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzFdKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfVkkgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzJdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bMl0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFsyXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbMl08PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzJdKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfVk8gICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzNdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bM10sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFszXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbM108PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzNdKSk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIAlBc2ljU2V0U2xvdFRpbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiBiVXNlU2hvcnRTbG90VGltZSkKK3sKKwlVTE9ORwlTbG90VGltZTsKKwlVSU5UMzIJUmVnVmFsdWUgPSAwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJYlVzZVNob3J0U2xvdFRpbWUgPSBUUlVFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJaWYgKGJVc2VTaG9ydFNsb3RUaW1lKQorCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQpOworCWVsc2UKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQpOworCisJU2xvdFRpbWUgPSAoYlVzZVNob3J0U2xvdFRpbWUpPyA5IDogMjA7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gZm9yY2UgdXNpbmcgc2hvcnQgU0xPVCB0aW1lIGZvciBGQUUgdG8gZGVtbyBwZXJmb3JtYW5jZSB3aGVuIFR4QnVyc3QgaXMgT04KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KQorCQkJU2xvdFRpbWUgPSA5OworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vCisJLy8gRm9yIHNvbWUgcmVhc29ucywgYWx3YXlzIHNldCBpdCB0byBzaG9ydCBzbG90IHRpbWUuCisJLy8KKwkvLyBUb0RvOiBTaG91bGQgY29uc2lkZXIgY2FwYWJpbGl0eSB3aXRoIDExQgorCS8vCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCVNsb3RUaW1lID0gMjA7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJUlRNUF9JT19SRUFEMzIocEFkLCBCS09GRl9TTE9UX0NGRywgJlJlZ1ZhbHVlKTsKKwlSZWdWYWx1ZSA9IFJlZ1ZhbHVlICYgMHhGRkZGRkYwMDsKKworCVJlZ1ZhbHVlIHw9IFNsb3RUaW1lOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgQktPRkZfU0xPVF9DRkcsIFJlZ1ZhbHVlKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQWRkIFNoYXJlZCBrZXkgaW5mb3JtYXRpb24gaW50byBBU0lDLgorCQlVcGRhdGUgc2hhcmVkIGtleSwgVHhNaWMgYW5kIFJ4TWljIHRvIEFzaWMgU2hhcmVkIGtleSB0YWJsZQorCQlVcGRhdGUgaXRzIGNpcGhlckFsZyB0byBBc2ljIFNoYXJlZCBrZXkgTW9kZS4KKworICAgIFJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNBZGRTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJIEJzc0luZGV4LAorCUlOIFVDSEFSCQkgS2V5SWR4LAorCUlOIFVDSEFSCQkgQ2lwaGVyQWxnLAorCUlOIFBVQ0hBUgkJIHBLZXksCisJSU4gUFVDSEFSCQkgcFR4TWljLAorCUlOIFBVQ0hBUgkJIHBSeE1pYykKK3sKKwlVTE9ORyBvZmZzZXQ7IC8vLCBjc3IwOworCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc2ljQWRkU2hhcmVkS2V5RW50cnkgQnNzSW5kZXg9JWQsIEtleUlkeD0lZFxuIiwgQnNzSW5kZXgsS2V5SWR4KSk7CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGRTaGFyZWRLZXlFbnRyeTogJXMga2V5ICMlZFxuIiwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddLCBCc3NJbmRleCo0ICsgS2V5SWR4KSk7CisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiAJS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEtleVswXSxwS2V5WzFdLHBLZXlbMl0scEtleVszXSxwS2V5WzRdLHBLZXlbNV0scEtleVs2XSxwS2V5WzddLHBLZXlbOF0scEtleVs5XSxwS2V5WzEwXSxwS2V5WzExXSxwS2V5WzEyXSxwS2V5WzEzXSxwS2V5WzE0XSxwS2V5WzE1XSkpOworCWlmIChwUnhNaWMpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiIAlSeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJcFJ4TWljWzBdLHBSeE1pY1sxXSxwUnhNaWNbMl0scFJ4TWljWzNdLHBSeE1pY1s0XSxwUnhNaWNbNV0scFJ4TWljWzZdLHBSeE1pY1s3XSkpOworCX0KKwlpZiAocFR4TWljKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiAJVHggTUlDIEtleSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCXBUeE1pY1swXSxwVHhNaWNbMV0scFR4TWljWzJdLHBUeE1pY1szXSxwVHhNaWNbNF0scFR4TWljWzVdLHBUeE1pY1s2XSxwVHhNaWNbN10pKTsKKwl9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8KKwkvLyBmaWxsIGtleSBtYXRlcmlhbCAtIGtleSArIFRYIE1JQyArIFJYIE1JQworCS8vCisKKyNpZmRlZiBSVDI4NzAKK3sKKwlvZmZzZXQgPSBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoNCpCc3NJbmRleCArIEtleUlkeCkqSFdfS0VZX0VOVFJZX1NJWkU7CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwS2V5LCBNQVhfTEVOX09GX1NIQVJFX0tFWSk7CisKKwlvZmZzZXQgKz0gTUFYX0xFTl9PRl9TSEFSRV9LRVk7CisJaWYgKHBUeE1pYykKKwl7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcFR4TWljLCA4KTsKKwl9CisKKwlvZmZzZXQgKz0gODsKKwlpZiAocFJ4TWljKQorCXsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwUnhNaWMsIDgpOworCX0KK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vCisJLy8gVXBkYXRlIGNpcGhlciBhbGdvcml0aG0uIFdTVEEgYWx3YXlzIHVzZSBCU1MwCisJLy8KKwlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFKzQqKEJzc0luZGV4LzIpLCAmY3NyMS53b3JkKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJlYWQ6IFNIQVJFRF9LRVlfTU9ERV9CQVNFIGF0IHRoaXMgQnNzWyVkXSBLZXlJZHhbJWRdPSAweCV4IFxuIiwgQnNzSW5kZXgsS2V5SWR4LCBjc3IxLndvcmQpKTsKKwlpZiAoKEJzc0luZGV4JTIpID09IDApCisJeworCQlpZiAoS2V5SWR4ID09IDApCisJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJZWxzZQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKKwl9CisJZWxzZQorCXsKKwkJaWYgKEtleUlkeCA9PSAwKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MENpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCisJCQljc3IxLmZpZWxkLkJzczFLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQllbHNlIGlmIChLZXlJZHggPT0gMikKKwkJCWNzcjEuZmllbGQuQnNzMUtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCWVsc2UKKwkJCWNzcjEuZmllbGQuQnNzMUtleTNDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJfQorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiV3JpdGU6IFNIQVJFRF9LRVlfTU9ERV9CQVNFIGF0IHRoaXMgQnNzWyVkXSA9IDB4JXggXG4iLCBCc3NJbmRleCwgY3NyMS53b3JkKSk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UrNCooQnNzSW5kZXgvMiksIGNzcjEud29yZCk7CisKK30KKworLy8JSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIEFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJIEJzc0luZGV4LAorCUlOIFVDSEFSCQkgS2V5SWR4KQoreworCS8vVUxPTkcgU2VjQ3NyMDsKKwlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnk6ICMlZCBcbiIsIEJzc0luZGV4KjQgKyBLZXlJZHgpKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UrNCooQnNzSW5kZXgvMiksICZjc3IxLndvcmQpOworCWlmICgoQnNzSW5kZXglMikgPT0gMCkKKwl7CisJCWlmIChLZXlJZHggPT0gMCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSAwOworCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSAwOworCQllbHNlIGlmIChLZXlJZHggPT0gMikKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSAwOworCQllbHNlCisJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gMDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKEtleUlkeCA9PSAwKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MENpcGhlckFsZyA9IDA7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAxKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MUNpcGhlckFsZyA9IDA7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MkNpcGhlckFsZyA9IDA7CisJCWVsc2UKKwkJCWNzcjEuZmllbGQuQnNzMUtleTNDaXBoZXJBbGcgPSAwOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIldyaXRlOiBTSEFSRURfS0VZX01PREVfQkFTRSBhdCB0aGlzIEJzc1slZF0gPSAweCV4IFxuIiwgQnNzSW5kZXgsIGNzcjEud29yZCkpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFKzQqKEJzc0luZGV4LzIpLCBjc3IxLndvcmQpOworCUFTU0VSVChCc3NJbmRleCA8IDQpOworCUFTU0VSVChLZXlJZHggPCA0KTsKKworfQorCisKK1ZPSUQgQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFVDSEFSCQlCc3NJbmRleCwKKwlJTiBVQ0hBUiAgICAgICAgQ2lwaGVyQWxnLAorCUlOIEJPT0xFQU4JCWJVc2VQYWlyZXdpc2VLZXlUYWJsZSkKK3sKKwlVTE9ORyAgIFdDSURBdHRyaSA9IDAsIG9mZnNldDsKKworCS8vCisJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlLgorCS8vIE9ubHkgVHhLZXkgY291bGQgdXBkYXRlIFdDSUQgYXR0cmlidXRlLgorCS8vCisJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoV0NJRCAqIEhXX1dDSURfQVRUUklfU0laRSk7CisJV0NJREF0dHJpID0gKEJzc0luZGV4IDw8IDQpIHwgKENpcGhlckFsZyA8PCAxKSB8IChiVXNlUGFpcmV3aXNlS2V5VGFibGUpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgV0NJREF0dHJpKTsKK30KKworVk9JRCBBc2ljVXBkYXRlV0NJRElWRUlWKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVTE9ORyAgICAgICAgdUlWLAorCUlOIFVMT05HICAgICAgICB1RUlWKQoreworCVVMT05HCW9mZnNldDsKKworCW9mZnNldCA9IE1BQ19JVkVJVl9UQUJMRV9CQVNFICsgKFdDSUQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgdUlWKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyA0LCB1RUlWKTsKK30KKworVk9JRCBBc2ljVXBkYXRlUnhXQ0lEVGFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIpCit7CisJVUxPTkcgb2Zmc2V0OworCVVMT05HIEFkZHI7CisKKwlvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgKFdDSUQgKiBIV19XQ0lEX0VOVFJZX1NJWkUpOworCUFkZHIgPSBwQWRkclswXSArIChwQWRkclsxXSA8PCA4KSArKHBBZGRyWzJdIDw8IDE2KSArKHBBZGRyWzNdIDw8IDI0KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIEFkZHIpOworCUFkZHIgPSBwQWRkcls0XSArIChwQWRkcls1XSA8PCA4KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyA0LCBBZGRyKTsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IENpcGhlciBLZXksIENpcGhlciBhbGdvcml0aG0sIElWL0VJViB0byBBc2ljCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgICAgV0NJRCAgICAgICAgICAgICAgICAgICAgV0NJRCBFbnRyeSBudW1iZXIuCisgICAgICAgIEJzc0luZGV4ICAgICAgICAgICAgICAgIEJTU0lEIGluZGV4LCBzdGF0aW9uIG9yIG5vbmUgbXVsdGlwbGUgQlNTSUQgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHZhbHVlIHNob3VsZCBiZSAwLgorICAgICAgICBLZXlJZHggICAgICAgICAgICAgICAgICBUaGlzIEtleUlkeCB3aWxsIHNldCB0byBJVidzIEtleUlEIGlmIGJUeEtleSBlbmFibGVkCisgICAgICAgIHBDaXBoZXJLZXkgICAgICAgICAgICAgIFBvaW50ZXIgdG8gQ2lwaGVyIEtleS4KKyAgICAgICAgYlVzZVBhaXJld2lzZUtleVRhYmxlICAgVFJVRSBtZWFucyBzYXZlZCB0aGUga2V5IGluIFNoYXJlZEtleSB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIFBhaXJld2lzZUtleSB0YWJsZQorICAgICAgICBiVHhLZXkgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSB0cmFuc21pdCBrZXkgaWYgZW5hYmxlZC4KKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVGhpcyByb3V0aW5lIHdpbGwgc2V0IHRoZSByZWxhdGl2ZSBrZXkgc3R1ZmYgdG8gQXNpYyBpbmNsdWRpbmcgV0NJRCBhdHRyaWJ1dGUsCisgICAgICAgIENpcGhlciBLZXksIENpcGhlciBhbGdvcml0aG0gYW5kIElWL0VJVi4KKworICAgICAgICBJVi9FSVYgd2lsbCBiZSB1cGRhdGUgaWYgdGhpcyBDaXBoZXJLZXkgaXMgdGhlIHRyYW5zbWlzc2lvbiBrZXkgYmVjYXVzZQorICAgICAgICBBU0lDIHdpbGwgYmFzZSBvbiBJVidzIEtleUlEIHZhbHVlIHRvIHNlbGVjdCBDaXBoZXIgS2V5LgorCisgICAgICAgIElmIGJUeEtleSBzZXRzIHRvIEZBTFNFLCB0aGlzIGlzIG5vdCB0aGUgVFgga2V5LCBidXQgaXQgY291bGQgYmUKKyAgICAgICAgUlgga2V5CisKKyAgICAJRm9yIEFQIG1vZGUgYlR4S2V5IG11c3QgYmUgYWx3YXlzIHNldCB0byBUUlVFLgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY0FkZEtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIJCUtleUlkeCwKKwlJTiBQQ0lQSEVSX0tFWQlwQ2lwaGVyS2V5LAorCUlOIEJPT0xFQU4JCWJVc2VQYWlyZXdpc2VLZXlUYWJsZSwKKwlJTiBCT09MRUFOCQliVHhLZXkpCit7CisJVUxPTkcJb2Zmc2V0OworLy8JVUxPTkcgICBXQ0lEQXR0cmkgPSAwOworCVVDSEFSCUlWNCA9IDA7CisJUFVDSEFSCQlwS2V5ID0gcENpcGhlcktleS0+S2V5OworLy8JVUxPTkcJCUtleUxlbiA9IHBDaXBoZXJLZXktPktleUxlbjsKKwlQVUNIQVIJCXBUeE1pYyA9IHBDaXBoZXJLZXktPlR4TWljOworCVBVQ0hBUgkJcFJ4TWljID0gcENpcGhlcktleS0+UnhNaWM7CisJUFVDSEFSCQlwVHh0c2MgPSBwQ2lwaGVyS2V5LT5UeFRzYzsKKwlVQ0hBUgkJQ2lwaGVyQWxnID0gcENpcGhlcktleS0+Q2lwaGVyQWxnOworCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7CisKKy8vCUFTU0VSVChLZXlMZW4gPD0gTUFYX0xFTl9PRl9QRUVSX0tFWSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gQXNpY0FkZEtleUVudHJ5XG4iKSk7CisJLy8KKwkvLyAxLikgZGVjaWRlIGtleSB0YWJsZSBvZmZzZXQKKwkvLworCWlmIChiVXNlUGFpcmV3aXNlS2V5VGFibGUpCisJCW9mZnNldCA9IFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKFdDSUQgKiBIV19LRVlfRU5UUllfU0laRSk7CisJZWxzZQorCQlvZmZzZXQgPSBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoNCAqIEJzc0luZGV4ICsgS2V5SWR4KSAqIEhXX0tFWV9FTlRSWV9TSVpFOworCisJLy8KKwkvLyAyLikgU2V0IEtleSB0byBBc2ljCisJLy8KKwkvL2ZvciAoaSA9IDA7IGkgPCBLZXlMZW47IGkrKykKKworI2lmZGVmIFJUMjg3MAorCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcEtleSwgTUFYX0xFTl9PRl9QRUVSX0tFWSk7CisJb2Zmc2V0ICs9IE1BWF9MRU5fT0ZfUEVFUl9LRVk7CisKKwkvLworCS8vIDMuKSBTZXQgTUlDIGtleSBpZiBhdmFpbGFibGUKKwkvLworCWlmIChwVHhNaWMpCisJeworCQlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsIHBUeE1pYywgOCk7CisJfQorCW9mZnNldCArPSBMRU5fVEtJUF9UWE1JQ0s7CisKKwlpZiAocFJ4TWljKQorCXsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwUnhNaWMsIDgpOworCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vCisJLy8gNC4pIE1vZGlmeSBJVi9FSVYgaWYgbmVlZHMKKwkvLyAgICAgVGhpcyB3aWxsIGZvcmNlIEFzaWMgdG8gdXNlIHRoaXMga2V5IElEIGJ5IHNldHRpbmcgSVYuCisJLy8KKwlpZiAoYlR4S2V5KQorCXsKKworI2lmZGVmIFJUMjg3MAorCQlVSU5UMzIgdG1wVmFsOworCisJCS8vCisJCS8vIFdyaXRlIElWCisJCS8vCisJCUlWNCA9IChLZXlJZHggPDwgNik7CisJCWlmICgoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwoQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpKQorCQkJSVY0IHw9IDB4MjA7ICAvLyB0dXJuIG9uIGV4dGVuc2lvbiBiaXQgbWVhbnMgRUlWIGV4aXN0ZW5jZQorCisJCXRtcFZhbCA9IHBUeHRzY1sxXSArICgoKHBUeHRzY1sxXSB8IDB4MjApICYgMHg3ZikgPDwgOCkgKyAocFR4dHNjWzBdIDw8IDE2KSArIChJVjQgPDwgMjQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIHRtcFZhbCk7CisKKwkJLy8KKwkJLy8gV3JpdGUgRUlWCisJCS8vCisJCW9mZnNldCArPSA0OworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsICooUFVJTlQzMikmcENpcGhlcktleS0+VHhUc2NbMl0pOworI2VuZGlmIC8vIFJUMjg3MCAvLworCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZShwQWQsIFdDSUQsIEJzc0luZGV4LCBDaXBoZXJBbGcsIGJVc2VQYWlyZXdpc2VLZXlUYWJsZSk7CisJfQorCisJaWYgKCFiVXNlUGFpcmV3aXNlS2V5VGFibGUpCisJeworCQkvLworCQkvLyBPbmx5IHVwZGF0ZSB0aGUgc2hhcmVkIGtleSBzZWN1cml0eSBtb2RlCisJCS8vCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyA0ICogKEJzc0luZGV4IC8gMiksICZjc3IxLndvcmQpOworCQlpZiAoKEJzc0luZGV4ICUgMikgPT0gMCkKKwkJeworCQkJaWYgKEtleUlkeCA9PSAwKQorCQkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCisJCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJCWVsc2UKKwkJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKEtleUlkeCA9PSAwKQorCQkJCWNzcjEuZmllbGQuQnNzMUtleTBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCQljc3IxLmZpZWxkLkJzczFLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCisJCQkJY3NyMS5maWVsZC5Cc3MxS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJCWVsc2UKKwkJCQljc3IxLmZpZWxkLkJzczFLZXkzQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQl9CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFICsgNCAqIChCc3NJbmRleCAvIDIpLCBjc3IxLndvcmQpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBBc2ljQWRkS2V5RW50cnlcbiIpKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlBZGQgUGFpci13aXNlIGtleSBtYXRlcmlhbCBpbnRvIEFTSUMuCisJCVVwZGF0ZSBwYWlyd2lzZSBrZXksIFR4TWljIGFuZCBSeE1pYyB0byBBc2ljIFBhaXItd2lzZSBrZXkgdGFibGUKKworICAgIFJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIsCisJSU4gVUNIQVIJCVdDSUQsCisJSU4gQ0lQSEVSX0tFWQkJICpwQ2lwaGVyS2V5KQoreworCUlOVCBpOworCVVMT05HIAkJb2Zmc2V0OworCVBVQ0hBUgkJIHBLZXkgPSBwQ2lwaGVyS2V5LT5LZXk7CisJUFVDSEFSCQkgcFR4TWljID0gcENpcGhlcktleS0+VHhNaWM7CisJUFVDSEFSCQkgcFJ4TWljID0gcENpcGhlcktleS0+UnhNaWM7CisjaWZkZWYgREJHCisJVUNIQVIJCUNpcGhlckFsZyA9IHBDaXBoZXJLZXktPkNpcGhlckFsZzsKKyNlbmRpZiAvLyBEQkcgLy8KKworCS8vIEVLRVkKKwlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfS0VZX0VOVFJZX1NJWkUpOworI2lmZGVmIFJUMjg3MAorCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgJnBDaXBoZXJLZXktPktleVswXSwgTUFYX0xFTl9PRl9QRUVSX0tFWSk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9QRUVSX0tFWTsgaSs9NCkKKwl7CisJCVVJTlQzMiBWYWx1ZTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBvZmZzZXQgKyBpLCAmVmFsdWUpOworCX0KKworCW9mZnNldCArPSBNQVhfTEVOX09GX1BFRVJfS0VZOworCisJLy8gIE1JQyBLRVkKKwlpZiAocFR4TWljKQorCXsKKyNpZmRlZiBSVDI4NzAKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCAmcENpcGhlcktleS0+VHhNaWNbMF0sIDgpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKwlvZmZzZXQgKz0gODsKKwlpZiAocFJ4TWljKQorCXsKKyNpZmRlZiBSVDI4NzAKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCAmcENpcGhlcktleS0+UnhNaWNbMF0sIDgpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnk6IFdDSUQgIyVkIEFsZz0lc1xuIixXQ0lELCBDaXBoZXJOYW1lW0NpcGhlckFsZ10pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIglLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQlwS2V5WzBdLHBLZXlbMV0scEtleVsyXSxwS2V5WzNdLHBLZXlbNF0scEtleVs1XSxwS2V5WzZdLHBLZXlbN10scEtleVs4XSxwS2V5WzldLHBLZXlbMTBdLHBLZXlbMTFdLHBLZXlbMTJdLHBLZXlbMTNdLHBLZXlbMTRdLHBLZXlbMTVdKSk7CisJaWYgKHBSeE1pYykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIglSeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJcFJ4TWljWzBdLHBSeE1pY1sxXSxwUnhNaWNbMl0scFJ4TWljWzNdLHBSeE1pY1s0XSxwUnhNaWNbNV0scFJ4TWljWzZdLHBSeE1pY1s3XSkpOworCX0KKwlpZiAocFR4TWljKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiCVR4IE1JQyBLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQlwVHhNaWNbMF0scFR4TWljWzFdLHBUeE1pY1syXSxwVHhNaWNbM10scFR4TWljWzRdLHBUeE1pY1s1XSxwVHhNaWNbNl0scFR4TWljWzddKSk7CisJfQorfQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUmVtb3ZlIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgZnJvbSBBU0lDLgorCisgICAgUmV0dXJuOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCSBCc3NJZHgsCisJSU4gVUNIQVIJCSBXY2lkKQoreworCVVMT05HCQlXQ0lEQXR0cmk7CisJVVNIT1JUCQlvZmZzZXQ7CisKKwkvLyByZS1zZXQgdGhlIGVudHJ5J3MgV0NJRCBhdHRyaWJ1dGUgYXMgT1BFTi1OT05FLgorCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdjaWQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCVdDSURBdHRyaSA9IChCc3NJZHg8PDQpIHwgUEFJUldJU0VLRVlUQUJMRTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7Cit9CisKK0JPT0xFQU4gQXNpY1NlbmRDb21tYW5kVG9NY3UoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCSBDb21tYW5kLAorCUlOIFVDSEFSCQkgVG9rZW4sCisJSU4gVUNIQVIJCSBBcmcwLAorCUlOIFVDSEFSCQkgQXJnMSkKK3sKKwlIT1NUX0NNRF9DU1JfU1RSVUMJSDJNQ21kOworCUgyTV9NQUlMQk9YX1NUUlVDCUgyTU1haWxib3g7CisJVUxPTkcJCQkJaSA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAmSDJNTWFpbGJveC53b3JkKTsKKwkJaWYgKEgyTU1haWxib3guZmllbGQuT3duZXIgPT0gMCkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMik7CisJfSB3aGlsZShpKysgPCAxMDApOworCisJaWYgKGkgPj0gMTAwKQorCXsKKwkJeworCQlEQkdQUklOVF9FUlIoKCJIMk1fTUFJTEJPWCBzdGlsbCBob2xkIGJ5IE1DVS4gY29tbWFuZCBmYWlsXG4iKSk7CisJCX0KKwkJcmV0dXJuIEZBTFNFOworCX0KKworCisJSDJNTWFpbGJveC5maWVsZC5Pd25lcgkgID0gMTsJICAgLy8gcGFzcyBvd25lcnNoaXAgdG8gTUNVCisJSDJNTWFpbGJveC5maWVsZC5DbWRUb2tlbiA9IFRva2VuOworCUgyTU1haWxib3guZmllbGQuSGlnaEJ5dGUgPSBBcmcxOworCUgyTU1haWxib3guZmllbGQuTG93Qnl0ZSAgPSBBcmcwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgSDJNTWFpbGJveC53b3JkKTsKKworCUgyTUNtZC53b3JkIAkJCSAgPSAwOworCUgyTUNtZC5maWVsZC5Ib3N0Q29tbWFuZCAgPSBDb21tYW5kOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEhPU1RfQ01EX0NTUiwgSDJNQ21kLndvcmQpOworCisJaWYgKENvbW1hbmQgIT0gMHg4MCkKKwl7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBkaWZmZXJlbnQgUEhZIHR5cGUKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBDaGVja1JhdGVzKAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBPVVQJVUNIQVIJCQlTdXBSYXRlW10sCisJSU4gT1VUCVVDSEFSCQkJKlN1cFJhdGVMZW4pCit7CisJVUNIQVIJUmF0ZUlkeCwgaSwgajsKKwlVQ0hBUglOZXdSYXRlWzEyXSwgTmV3UmF0ZUxlbjsKKworCU5ld1JhdGVMZW4gPSAwOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKKwkJUmF0ZUlkeCA9IDQ7CisJZWxzZQorCQlSYXRlSWR4ID0gMTI7CisKKwkvLyBDaGVjayBmb3Igc3VwcG9ydCByYXRlcyBleGNsdWRlIGJhc2ljIHJhdGUgYml0CisJZm9yIChpID0gMDsgaSA8ICpTdXBSYXRlTGVuOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBSYXRlSWR4OyBqKyspCisJCQlpZiAoKFN1cFJhdGVbaV0gJiAweDdmKSA9PSBSYXRlSWRUbzUwMEticHNbal0pCisJCQkJTmV3UmF0ZVtOZXdSYXRlTGVuKytdID0gU3VwUmF0ZVtpXTsKKworCSpTdXBSYXRlTGVuID0gTmV3UmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCBOZXdSYXRlLCBOZXdSYXRlTGVuKTsKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorQk9PTEVBTiBSVE1QQ2hlY2tDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCQlDZW50cmFsQ2hhbm5lbCwKKwlJTiBVQ0hBUgkJQ2hhbm5lbCkKK3sKKwlVQ0hBUgkJazsKKwlVQ0hBUgkJVXBwZXJDaGFubmVsID0gMCwgTG93ZXJDaGFubmVsID0gMDsKKwlVQ0hBUgkJTm9FZmZlY3RDaGFubmVsaW5MaXN0ID0gMDsKKworCS8vIEZpbmQgdXBwZXIgYW5kIGxvd2VyIGNoYW5uZWwgYWNjb3JkaW5nIHRvIDQwTUh6IGN1cnJlbnQgb3BlcmF0aW9uLgorCWlmIChDZW50cmFsQ2hhbm5lbCA8IENoYW5uZWwpCisJeworCQlVcHBlckNoYW5uZWwgPSBDaGFubmVsOworCQlpZiAoQ2VudHJhbENoYW5uZWwgPiAyKQorCQkJTG93ZXJDaGFubmVsID0gQ2VudHJhbENoYW5uZWwgLSAyOworCQllbHNlCisJCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UgaWYgKENlbnRyYWxDaGFubmVsID4gQ2hhbm5lbCkKKwl7CisJCVVwcGVyQ2hhbm5lbCA9IENlbnRyYWxDaGFubmVsICsgMjsKKwkJTG93ZXJDaGFubmVsID0gQ2hhbm5lbDsKKwl9CisKKwlmb3IgKGsgPSAwO2sgPCBwQWQtPkNoYW5uZWxMaXN0TnVtO2srKykKKwl7CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2tdLkNoYW5uZWwgPT0gVXBwZXJDaGFubmVsKQorCQl7CisJCQlOb0VmZmVjdENoYW5uZWxpbkxpc3QgKys7CisJCX0KKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3Rba10uQ2hhbm5lbCA9PSBMb3dlckNoYW5uZWwpCisJCXsKKwkJCU5vRWZmZWN0Q2hhbm5lbGluTGlzdCArKzsKKwkJfQorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiVG90YWwgQ2hhbm5lbCBpbiBDaGFubmVsIExpc3QgPSBbJWRdXG4iLCBOb0VmZmVjdENoYW5uZWxpbkxpc3QpKTsKKwlpZiAoTm9FZmZlY3RDaGFubmVsaW5MaXN0ID09IDIpCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJVmVyaWZ5IHRoZSBzdXBwb3J0IHJhdGUgZm9yIEhUIHBoeSB0eXBlCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlGQUxTRSBpZiBwQWQtPkNvbW1vbkNmZy5TdXBwb3J0ZWRIdFBoeSBkb2Vzbid0IGFjY2VwdCB0aGUgcEh0Q2FwYWJpbGl0eS4gIChBUCBNb2RlKQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gCVJUTVBDaGVja0h0KAorCUlOCVBSVE1QX0FEQVBURVIJCQlwQWQsCisJSU4JVUNIQVIJCQkJCVdjaWQsCisJSU4gCUhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorCUlOIAlBRERfSFRfSU5GT19JRQkJCSpwQWRkSHRJbmZvKQoreworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyBJZiB1c2UgQU1TRFUsIHNldCBmbGFnLgorCWlmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUpCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCk7CisJLy8gU2F2ZSBQZWVyIENhcGFiaWxpdHkKKwlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3IyMCkKKwkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uVHhTVEJDKQorCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5SeFNUQkMpCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwlpZiAocEFkLT5Db21tb25DZmcuYlJkZyAmJiBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwl7CisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKTsKKwl9CisKKwlpZiAoV2NpZCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5NcGR1RGVuc2l0eSA9IHBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwl9CisKKwkvLyBXaWxsIGNoZWNrIENoYW5uZWxXaWR0aCBmb3IgTUNTU2V0WzRdIGJlbG93CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0gPSAweDE7CisgICAgc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSkKKwl7CisJCWNhc2UgMToKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gMHhmZjsKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMHgwMDsKKyAgICAgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzJdID0gMHgwMDsKKyAgICAgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzNdID0gMHgwMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDB4ZmY7CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDB4ZmY7CisgICAgICAgICAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSA9IDB4MDA7CisgICAgICAgICAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFszXSA9IDB4MDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAweGZmOworCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAweGZmOworICAgICAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMl0gPSAweGZmOworICAgICAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbM10gPSAweDAwOworCQkJYnJlYWs7CisJfQorCisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0gcEFkZEh0SW5mby0+QWRkSHRJbmZvLlJlY29tV2lkdGggJiBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUENoZWNrSHQ6OiBIdENhcEluZm8uQ2hhbm5lbFdpZHRoPSVkLCBSZWNvbVdpZHRoPSVkLCBEZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoPSVkLCBCVzQwTUF2YWlsRm9yQS9HPSVkLyVkLCBQaHlNb2RlPSVkIFxuIiwKKwkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoLCBwQWRkSHRJbmZvLT5BZGRIdEluZm8uUmVjb21XaWR0aCwgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCwKKwkJcEFkLT5OaWNDb25maWcyLmZpZWxkLkJXNDBNQXZhaWxGb3JBLCBwQWQtPk5pY0NvbmZpZzIuZmllbGQuQlc0ME1BdmFpbEZvckcsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpKTsKKworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkdGID0gIHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRiAmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGOworCisJLy8gU2VuZCBBc3NvYyBSZXEgd2l0aCBteSBIVCBjYXBhYmlsaXR5LgorCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9ICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9ICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9ICAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCkgJiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3IyMCk7CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwKSAmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkMgPSAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMgPSAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMpJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uVHhTVEJDKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IgPSBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWF4UkFtcGR1RmFjdG9yOworICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5ID0gcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlBsdXNIVEM7CisJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5IVENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMgPSBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUGx1c0hUQzsKKwlpZiAocEFkLT5Db21tb25DZmcuYlJkZykKKwl7CisJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlJER1N1cHBvcnQgPSBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUkRHU3VwcG9ydDsKKyAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9IDE7CisJfQorCisgICAgaWYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV18yMCkKKyAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0gPSAweDA7ICAvLyBCVzIwIGNhbid0IHRyYW5zbWl0IE1DUzMyCisKKwlDT1BZX0FQX0hUU0VUVElOR1NfRlJPTV9CRUFDT04ocEFkLCBwSHRDYXBhYmlsaXR5KTsKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBkaWZmZXJlbnQgUEhZIHR5cGUKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBVcGRhdGVNbG1lUmF0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUglNaW5pbXVtUmF0ZTsKKwlVQ0hBUglQcm9wZXJNbG1lUmF0ZTsgLy89IFJBVEVfNTQ7CisJVUNIQVIJaSwgaiwgUmF0ZUlkeCA9IDEyOyAvLzEsIDIsIDUuNSwgMTEsIDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQKKwlCT09MRUFOCWJNYXRjaCA9IEZBTFNFOworCisJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKQorCXsKKwkJY2FzZSBQSFlfMTFCOgorCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzExOworCQkJTWluaW11bVJhdGUgPSBSQVRFXzE7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBQSFlfMTFBQkdOX01JWEVEOgorCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCWlmICgocEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4gPT0gNCkgJiYKKwkJCQkocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gPT0gMCkpCisJCQkJLy8gQiBvbmx5IEFQCisJCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzExOworCQkJZWxzZQorCQkJCVByb3Blck1sbWVSYXRlID0gUkFURV8yNDsKKworCQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KQorCQkJCU1pbmltdW1SYXRlID0gUkFURV8xOworCQkJZWxzZQorCQkJCU1pbmltdW1SYXRlID0gUkFURV82OworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBQSFlfMTFOXzJfNEc6CS8vIHJ0Mjg2MCBuZWVkIHRvIGNoZWNrIG1sbWVyYXRlIGZvciA4MDIuMTFuCisJCWNhc2UgUEhZXzExR05fTUlYRUQ6CisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQljYXNlIFBIWV8xMUFOX01JWEVEOgorCQljYXNlIFBIWV8xMU5fNUc6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMjQ7CisJCQlNaW5pbXVtUmF0ZSA9IFJBVEVfNjsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUFCR19NSVhFRDoKKwkJCVByb3Blck1sbWVSYXRlID0gUkFURV8yNDsKKwkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA8PSAxNCkKKwkJCSAgIE1pbmltdW1SYXRlID0gUkFURV8xOworCQkJZWxzZQorCQkJCU1pbmltdW1SYXRlID0gUkFURV82OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8vIGVycm9yCisJCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMTsKKwkJCU1pbmltdW1SYXRlID0gUkFURV8xOworCQkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuOyBpKyspCisJeworCQlmb3IgKGogPSAwOyBqIDwgUmF0ZUlkeDsgaisrKQorCQl7CisJCQlpZiAoKHBBZC0+TWxtZUF1eC5TdXBSYXRlW2ldICYgMHg3ZikgPT0gUmF0ZUlkVG81MDBLYnBzW2pdKQorCQkJeworCQkJCWlmIChqID09IFByb3Blck1sbWVSYXRlKQorCQkJCXsKKwkJCQkJYk1hdGNoID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGJNYXRjaCkKKwkJCWJyZWFrOworCX0KKworCWlmIChiTWF0Y2ggPT0gRkFMU0UpCisJeworCQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW47IGkrKykKKwkJeworCQkJZm9yIChqID0gMDsgaiA8IFJhdGVJZHg7IGorKykKKwkJCXsKKwkJCQlpZiAoKHBBZC0+TWxtZUF1eC5FeHRSYXRlW2ldICYgMHg3ZikgPT0gUmF0ZUlkVG81MDBLYnBzW2pdKQorCQkJCXsKKwkJCQkJaWYgKGogPT0gUHJvcGVyTWxtZVJhdGUpCisJCQkJCXsKKwkJCQkJCWJNYXRjaCA9IFRSVUU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGJNYXRjaCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChiTWF0Y2ggPT0gRkFMU0UpCisJeworCQlQcm9wZXJNbG1lUmF0ZSA9IE1pbmltdW1SYXRlOworCX0KKworCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gTWluaW11bVJhdGU7CisJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFByb3Blck1sbWVSYXRlOworCWlmIChwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA+PSBSQVRFXzYpCisJeworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBVcGRhdGVNbG1lUmF0ZSA9PT4gICBNbG1lVHJhbnNtaXQgPSAweCV4ICBcbiIgLCBwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQud29yZCkpOworfQorCitDSEFSIFJUTVBNYXhSc3NpKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIENIQVIJCQkJUnNzaTAsCisJSU4gQ0hBUgkJCQlSc3NpMSwKKwlJTiBDSEFSCQkJCVJzc2kyKQoreworCUNIQVIJbGFyZ2VyID0gLTEyNzsKKworCWlmICgocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKSAmJiAoUnNzaTAgIT0gMCkpCisJeworCQlsYXJnZXIgPSBSc3NpMDsKKwl9CisKKwlpZiAoKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMikgJiYgKFJzc2kxICE9IDApKQorCXsKKwkJbGFyZ2VyID0gbWF4KFJzc2kwLCBSc3NpMSk7CisJfQorCisJaWYgKChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpICYmIChSc3NpMiAhPSAwKSkKKwl7CisJCWxhcmdlciA9IG1heChsYXJnZXIsIFJzc2kyKTsKKwl9CisKKwlpZiAobGFyZ2VyID09IC0xMjcpCisJCWxhcmdlciA9IDA7CisKKwlyZXR1cm4gbGFyZ2VyOworfQorCisKKy8vIEFudGVubmEgZGl2ZXNpdHkgdXNlIEdQSU8zIGFuZCBFRVNLIHBpbiBmb3IgY29udHJvbAorLy8gQW50ZW5uYSBhbmQgRUVQUk9NIGFjY2VzcyBhcmUgYm90aCB1c2luZyBFRVNLIHBpbiwKKy8vIFRoZXJlZm9yIHdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgRUVTSyBhdCB0aGUgc2FtZSB0aW1lCisvLyBUaGVuIHJlc3RvcmUgYW50ZW5uYSBhZnRlciBFRVBST00gYWNjZXNzCitWT0lEIEFzaWNTZXRSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUFudCkKK3sKKyNpZmRlZiBSVDMweHgKKwlVSU5UMzIJVmFsdWU7CisJVUlOVDMyCXg7CisKKwlpZiAoKHBBZC0+RWVwcm9tQWNjZXNzKQkJCQkJCQkJCQl8fAorCQkoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkJfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkJfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQkJCXx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vIHRoZSBhbnRlbm5hIHNlbGVjdGlvbiBpcyB0aHJvdWdoIGZpcm13YXJlIGFuZCBNQUMgcmVnaXN0ZXIoR1BJTzMpCisJaWYgKEFudCA9PSAwKQorCXsKKwkJLy8gTWFpbiBhbnRlbm5hCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCQl4IHw9IChFRVNLKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDB4MDgwOCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEdQSU9fQ1RSTF9DRkcsIFZhbHVlKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNTZXRSeEFudCwgc3dpdGNoIHRvIG1haW4gYW50ZW5uYVxuIikpOworCX0KKwllbHNlCisJeworCQkvLyBBdXggYW50ZW5uYQorCQlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKwkJeCAmPSB+KEVFU0spOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMHgwODA4KTsKKwkJVmFsdWUgfD0gMHgwODsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgR1BJT19DVFJMX0NGRywgVmFsdWUpOworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQXNpY1NldFJ4QW50LCBzd2l0Y2ggdG8gYXV4IGFudGVubmFcbiIpKTsKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBQZXJpb2RpYyBldmFsdWF0ZSBhbnRlbm5hIGxpbmsgc3RhdHVzCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY0V2YWx1YXRlUnhBbnQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJQkJQUjMgPSAwOworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUwl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9SQURJT19PRkYJCQl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUCQl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykgfHwKKwkJCQkJCQlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpCisjaWZkZWYgUlQzMHh4CisJCQkJCQkJfHwgKHBBZC0+RWVwcm9tQWNjZXNzKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCQkJCSkKKwkJcmV0dXJuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy9pZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkvLwlyZXR1cm47CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gdHdvIGFudGVubmEgc2VsZWN0aW9uIG1lY2hhbmlzbS0gb25lIGlzIGFudGVubmEgZGl2ZXJzaXR5LCB0aGUgb3RoZXIgaXMgZmFpbGVkIGFudGVubmEgcmVtb3ZlCisJLy8gb25lIGlzIGFudGVubmEgZGl2ZXJzaXR5OnRoZXJlIGlzIG9ubHkgb25lIGFudGVubmEgY2FuIHJ4IGFuZCB0eAorCS8vIHRoZSBvdGhlciBpcyBmYWlsZWQgYW50ZW5uYSByZW1vdmU6dHdvIHBoeXNpY2FsIGFudGVubmEgY2FuIHJ4IGFuZCB0eAorCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBbnREaXYgLSBiZWZvcmUgZXZhbHVhdGUgUGFpcjEtQW50ICglZCwlZClcbiIsCisJCQlwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50LCBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQpKTsKKworCQlBc2ljU2V0UnhBbnQocEFkLCBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQpOworCisJCXBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPSAxOyAvLyAxOk1lYW5zIHN3aXRjaCB0byBTZWNvbmRhcnlSeEFudCwgMDpNZWFucyBzd2l0Y2ggdG8gUGFpcjFQcmltYXJ5UnhBbnQKKwkJcEFkLT5SeEFudC5GaXJzdFBrdEFycml2ZWRXaGVuRXZhbHVhdGUgPSBGQUxTRTsKKwkJcEFkLT5SeEFudC5SY3ZQa3ROdW1XaGVuRXZhbHVhdGUgPSAwOworCisJCS8vIGEgb25lLXNob3QgdGltZXIgdG8gZW5kIHRoZSBldmFsdXRpb24KKwkJLy8gZHluYW1pYyBhZGp1c3QgYW50ZW5uYSBldmFsdWF0aW9uIHBlcmlvZCBhY2NvcmRpbmcgdG8gdGhlIHRyYWZmaWMKKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCAxMDApOworCQllbHNlCisJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwgMzAwKTsKKwl9CisJZWxzZQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlpZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkJcmV0dXJuOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFIzKTsKKwkJQkJQUjMgJj0gKH4weDE4KTsKKwkJaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCQl7CisJCQlCQlBSMyB8PSAoMHgxMCk7CisJCX0KKwkJZWxzZSBpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCXsKKwkJCUJCUFIzIHw9ICgweDgpOworCQl9CisJCWVsc2UgaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQl7CisJCQlCQlBSMyB8PSAoMHgwKTsKKwkJfQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKKwkJCSkKKwkJeworCQkJVUxPTkcJVHhUb3RhbENudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJCQkJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICsKKwkJCQkJCQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCS8vIGR5bmFtaWMgYWRqdXN0IGFudGVubmEgZXZhbHVhdGlvbiBwZXJpb2QgYWNjb3JkaW5nIHRvIHRoZSB0cmFmZmljCisJCQlpZiAoVHhUb3RhbENudCA+IDUwKQorCQkJeworCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCAyMCk7CisJCQkJcEFkLT5NbG1lLmJMb3dUaHJvdWdocHV0ID0gRkFMU0U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUnhBbnRFdmFsVGltZXIsIDMwMCk7CisJCQkJcEFkLT5NbG1lLmJMb3dUaHJvdWdocHV0ID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBBZnRlciBldmFsdWF0aW9uLCBjaGVjayBhbnRlbm5hIGxpbmsgc3RhdHVzCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUgkqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVQ0hBUgkJCUJCUFIzID0gMDsKKwlDSEFSCQkJbGFyZ2VyID0gLTEyNywgcnNzaTAsIHJzc2kxLCByc3NpMjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTCXwKKwkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfUkFESU9fT0ZGCQkJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgfHwKKwkJCQkJCQlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpCisjaWZkZWYgUlQzMHh4CisJCQkJCQkJfHwgKHBBZC0+RWVwcm9tQWNjZXNzKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCQkJCSkKKwkJcmV0dXJuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy9pZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkvLwlyZXR1cm47CisKKwkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5BbnREaXZlcnNpdHkpCisJCXsKKwkJCWlmICgocEFkLT5SeEFudC5SY3ZQa3ROdW1XaGVuRXZhbHVhdGUgIT0gMCkgJiYgKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW3BBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudF0gPj0gcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudF0pKQorCQkJeworCQkJCVVDSEFSCQkJdGVtcDsKKworCQkJCS8vCisJCQkJLy8gc2VsZWN0IFByaW1hcnlSeEFudFBhaXIKKwkJCQkvLyAgICBSb2xlIGNoYW5nZSwgVXNlZCBQYWlyMVNlY29uZGFyeVJ4QW50IGFzIFByaW1hcnlSeEFudFBhaXIuCisJCQkJLy8gICAgU2luY2UgUGFpcjFTZWNvbmRhcnlSeEFudCBRdWFsaXR5IGdvb2QgdGhhbiBQYWlyMVByaW1hcnlSeEFudAorCQkJCS8vCisJCQkJdGVtcCA9IHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQ7CisJCQkJcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCA9IHBBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudDsKKwkJCQlwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQgPSB0ZW1wOworCisJCQkJcEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpID0gKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW3BBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudF0gPj4gMyk7CisJCQkJcEFkLT5SeEFudC5FdmFsdWF0ZVN0YWJsZUNudCA9IDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gaWYgdGhlIGV2YWx1YXRlZCBhbnRlbm5hIGlzIG5vdCBiZXR0ZXIgdGhhbiBvcmlnaW5hbCwgc3dpdGNoIGJhY2sgdG8gb3JpZ2luYWwgYW50ZW5uYQorCQkJCUFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworCQkJCXBBZC0+UnhBbnQuRXZhbHVhdGVTdGFibGVDbnQgKys7CisJCQl9CisKKwkJCXBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPSAwOyAvLyAxOk1lYW5zIHN3aXRjaCB0byBTZWNvbmRhcnlSeEFudCwgMDpNZWFucyBzd2l0Y2ggdG8gUGFpcjFQcmltYXJ5UnhBbnQKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljUnhBbnRFdmFsQWN0aW9uOjpBZnRlciBFdmFsKGZpeCBpbiAjJWQpLCA8JWQsICVkPiwgUmN2UGt0TnVtV2hlbkV2YWx1YXRlPSVsZFxuIiwKKwkJCQkJcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCwgKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpWzBdID4+IDMpLCAocEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbMV0gPj4gMyksIHBBZC0+UnhBbnQuUmN2UGt0TnVtV2hlbkV2YWx1YXRlKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkJCXJldHVybjsKKworCQkJLy8gaWYgdGhlIHRyYWZmaWMgaXMgbG93LCB1c2UgYXZlcmFnZSByc3NpIGFzIHRoZSBjcml0ZXJpYQorCQkJaWYgKHBBZC0+TWxtZS5iTG93VGhyb3VnaHB1dCA9PSBUUlVFKQorCQkJeworCQkJCXJzc2kwID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTA7CisJCQkJcnNzaTEgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMTsKKwkJCQlyc3NpMiA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJzc2kwID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMDsKKwkJCQlyc3NpMSA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTE7CisJCQkJcnNzaTIgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyOworCQkJfQorCisJCQlpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpCisJCQl7CisJCQkJbGFyZ2VyID0gbWF4KHJzc2kwLCByc3NpMSk7CisKKwkJCQlpZiAobGFyZ2VyID4gKHJzc2kyICsgMjApKQorCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDI7CisJCQkJZWxzZQorCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDM7CisJCQl9CisJCQllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCXsKKwkJCQlpZiAocnNzaTAgPiAocnNzaTEgKyAyMCkpCisJCQkJCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gMTsKKwkJCQllbHNlCisJCQkJCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gMjsKKwkJCX0KKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQUjMpOworCQkJQkJQUjMgJj0gKH4weDE4KTsKKwkJCWlmKHBBZC0+TWxtZS5SZWFsUnhQYXRoID09IDMpCisJCQl7CisJCQkJQkJQUjMgfD0gKDB4MTApOworCQkJfQorCQkJZWxzZSBpZihwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9PSAyKQorCQkJeworCQkJCUJCUFIzIHw9ICgweDgpOworCQkJfQorCQkJZWxzZSBpZihwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9PSAxKQorCQkJeworCQkJCUJCUFIzIHw9ICgweDApOworCQkJfQorCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOworCQl9CisJfQorCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK30KKworCisKK1ZPSUQgQVBTRFBlcmlvZGljRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCXJldHVybjsKKworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50Kys7CisKKy8vIERyaXZlciBzaG91bGQgbm90IHNlbmQgdHJpZ2dlciBmcmFtZSwgaXQgc2hvdWxkIGJlIHNlbmQgYnkgYXBwbGljYXRpb24gbGF5ZXIKKy8qCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZQorCQkmJiAocEFkLT5Db21tb25DZmcuYk5lZWRTZW5kVHJpZ2dlckZyYW1lIHx8CisJCSgoKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50JTIwKSA9PSAxOSkgJiYgKCFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFIHx8ICFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JLIHx8ICFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJIHx8ICFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPKSkpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZW5kaW5nIHRyaWdnZXIgZnJhbWUgYW5kIGVudGVyIHNlcnZpY2UgcGVyaW9kIHdoZW4gc3VwcG9ydCBBUFNEXG4iKSk7CisJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBUUlVFKTsKKwkJcEFkLT5Db21tb25DZmcuYk5lZWRTZW5kVHJpZ2dlckZyYW1lID0gRkFMU0U7CisJCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50ID0gMDsKKwkJcEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCA9IFRSVUU7CisJfSovCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0L3Jlc2V0IE1BQyByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIGJQaWdneUJhY2sgcGFyYW1ldGVyCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisgICAgICAgIGJQaWdneUJhY2sgIC0gRW5hYmxlIC8gRGlzYWJsZSBQaWdneS1CYWNrCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFNldFBpZ2d5QmFjaygKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBCT09MRUFOICAgICAgICAgIGJQaWdneUJhY2spCit7CisJVFhfTElOS19DRkdfU1RSVUMgIFR4TGlua0NmZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfTElOS19DRkcsICZUeExpbmtDZmcud29yZCk7CisKKwlUeExpbmtDZmcuZmllbGQuVHhDRkFja0VuID0gYlBpZ2d5QmFjazsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIGNoZWNrIGlmIHRoaXMgZW50cnkgbmVlZCB0byBzd2l0Y2ggcmF0ZSBhdXRvbWF0aWNhbGx5CisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZAorICAgICAgICBwRW50cnkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFVSRQorICAgICAgICBGQUxTRQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5KQoreworCUJPT0xFQU4JCXJlc3VsdCA9IFRSVUU7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBvbmx5IGFzc29jaWF0ZWQgU1RBIGNvdW50cworCQlpZiAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNDTEkpICYmIChwRW50cnktPlNzdCA9PSBTU1RfQVNTT0MpKQorCQl7CisJCQlyZXN1bHQgPSBwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKKwkJfQorCQllbHNlCisJCQlyZXN1bHQgPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitCT09MRUFOIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkKQoreworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCkKKwkJCXJldHVybiBUUlVFOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlyZXR1cm4gRkFMU0U7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gZml4IHR4IGxlZ2FjeSByYXRlCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZAorICAgICAgICBwRW50cnkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFVSRQorICAgICAgICBGQUxTRQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUNIQVIgUlRNUFN0YUZpeGVkVHhNb2RlKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5KQoreworCVVDSEFSCXR4X21vZGUgPSBGSVhFRF9UWE1PREVfSFQ7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQl0eF9tb2RlID0gKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGU7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuIHR4X21vZGU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgT3ZlcndyaXRlIEhUIFR4IE1vZGUgYnkgRml4ZWQgTGVnZW5jeSBUeCBNb2RlLCBpZiBzcGVjaWZpZWQuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZAorICAgICAgICBwRW50cnkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFVSRQorICAgICAgICBGQUxTRQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKAorCQlVQ0hBUgkJCQlmaXhlZF90eF9tb2RlLAorCQlQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSkKK3sKKwlIVFRSQU5TTUlUX1NFVFRJTkcgVHJhbnNtaXRTZXR0aW5nOworCisJaWYgKGZpeGVkX3R4X21vZGUgPT0gRklYRURfVFhNT0RFX0hUKQorCQlyZXR1cm47CisKKwlUcmFuc21pdFNldHRpbmcud29yZCA9IDA7CisKKwlUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSA9IHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREU7CisJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUzsKKworCWlmIChmaXhlZF90eF9tb2RlID09IEZJWEVEX1RYTU9ERV9DQ0spCisJeworCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkvLyBDQ0sgbW9kZSBhbGxvdyBNQ1MgMH4zCisJCWlmIChUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID4gTUNTXzMpCisJCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzM7CisJfQorCWVsc2UKKwl7CisJCVRyYW5zbWl0U2V0dGluZy5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkvLyBPRkRNIG1vZGUgYWxsb3cgTUNTIDB+NworCQlpZiAoVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA+IE1DU183KQorCQkJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU183OworCX0KKworCWlmIChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID49IFRyYW5zbWl0U2V0dGluZy5maWVsZC5NT0RFKQorCXsKKwkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IFRyYW5zbWl0U2V0dGluZy53b3JkOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nIDogd2NpZC0lZCwgTU9ERT0lcywgTUNTPSVkIFxuIiwKKwkJCQlwRW50cnktPkFpZCwgR2V0UGh5TW9kZShwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFKSwgcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTKSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWR5bmFtaWMgdHVuZSBCQlAgUjY2IHRvIGZpbmQgYSBiYWxhbmNlIGJldHdlZW4gc2Vuc2liaWxpdHkgYW5kCisJCW5vaXNlIGlzb2xhdGlvbgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNTdGFCYnBUdW5pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUNIQVIJT3JpZ1I2NlZhbHVlID0gMCwgUjY2Oy8vLCBSNjZVcHBlckJvdW5kID0gMHgzMCwgUjY2TG93ZXJCb3VuZCA9IDB4MzA7CisJQ0hBUglSc3NpOworCisJLy8gMjg2MEMgZGlkIG5vdCBzdXBwb3J0IEZhc2UgQ0NBLCB0aGVyZWZvcmUgY2FuJ3QgdHVuZQorCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJcmV0dXJuOworCisJLy8KKwkvLyB3b3JrIGFzIGEgU1RBCisJLy8KKwlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpICAvLyBubyBSNjYgdHVuaW5nIHdoZW4gU0NBTk5JTkcKKwkJcmV0dXJuOworCisJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCQkmJiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCisJCQkpCisJCSYmICEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJKQorCXsKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgJk9yaWdSNjZWYWx1ZSk7CisJCVI2NiA9IE9yaWdSNjZWYWx1ZTsKKworCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+IDEpCisJCQlSc3NpID0gKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgKyBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxKSA+PiAxOworCQllbHNlCisJCQlSc3NpID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMDsKKworCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQl7CS8vQkcgYmFuZAorI2lmZGVmIFJUMzB4eAorCQkJLy8gUlQzMDcwIGlzIGEgbm8gTE5BIHNvbHV0aW9uLCBpdCBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgY29udHJvbCByZWdhcmRpbmcgdG8gQUdDIGdhaW4gY29udHJvbAorCQkJLy8gT3RoZXJ3aXNlLCBpdCB3aWxsIGhhdmUgc29tZSB0aHJvdWdocHV0IHNpZGUgZWZmZWN0IHdoZW4gbG93IFJTU0kKKwkJCWlmIChJU19SVDMweHgocEFkKSkKKwkJCXsKKwkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpCisJCQkJeworCQkJCQlSNjYgPSAweDFDICsgMipHRVRfTE5BX0dBSU4ocEFkKSArIDB4MjA7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSNjYgPSAweDFDICsgMipHRVRfTE5BX0dBSU4ocEFkKTsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJeworCQkJCWlmIChSc3NpID4gUlNTSV9GT1JfTUlEX0xPV19TRU5TSUJJTElUWSkKKwkJCQl7CisJCQkJCVI2NiA9ICgweDJFICsgR0VUX0xOQV9HQUlOKHBBZCkpICsgMHgxMDsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVI2NiA9IDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKTsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0KKwkJZWxzZQorCQl7CS8vQSBiYW5kCisJCQlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzIwKQorCQkJeworCQkJCWlmIChSc3NpID4gUlNTSV9GT1JfTUlEX0xPV19TRU5TSUJJTElUWSkKKwkJCQl7CisJCQkJCVI2NiA9IDB4MzIgKyAoR0VUX0xOQV9HQUlOKHBBZCkqNSkvMyArIDB4MTA7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSNjYgPSAweDMyICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzM7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpCisJCQkJeworCQkJCQlSNjYgPSAweDNBICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMgKyAweDEwOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUjY2ID0gMHgzQSArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCisJfQorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitWT0lEIFJUTVBTZXRBR0NJbml0VmFsdWUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUNIQVIJCQlCYW5kV2lkdGgpCit7CisJVUNIQVIJUjY2ID0gMHgzMDsKKworCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJewkvLyBCRyBiYW5kCisJCVI2NiA9IDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJfQorCWVsc2UKKwl7CS8vQSBiYW5kCisJCWlmIChCYW5kV2lkdGggPT0gQldfMjApCisJCXsKKwkJCVI2NiA9IChVQ0hBUikoMHgzMiArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWVsc2UKKwkJeworCQkJUjY2ID0gKFVDSEFSKSgweDNBICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl9CisKK30KKworVk9JRCBBc2ljVHVybk9mZlJGQ2xrKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVDSEFSCQlDaGFubmVsKQoreworCS8vIFJGIFIyIGJpdCAxOCA9IDAKKwlVSU5UMzIJCQlSMSA9IDAsIFIyID0gMCwgUjMgPSAwOworCVVDSEFSCQkJaW5kZXg7CisJUlRNUF9SRl9SRUdTCSpSRlJlZ1RhYmxlOworCisjaWZkZWYgUlQzMHh4CisJLy8gVGhlIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGRpZmZlcmVuY2UgYmV0d2VlbiAzeHh4IGFuZCAyeHh4CisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwkJUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXAocEFkKTsgIC8vIGFkZCBieSBqb2hubGksICBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgbG9hZCBSRiBzbGVlcC1tb2RlIHNldHVwCisJfQorCWVsc2UKKwl7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJUkZSZWdUYWJsZSA9IFJGMjg1MFJlZ1RhYmxlOworCisJc3dpdGNoIChwQWQtPlJmSWNUeXBlKQorCXsKKwkJY2FzZSBSRklDXzI4MjA6CisJCWNhc2UgUkZJQ18yODUwOgorCQljYXNlIFJGSUNfMjcyMDoKKwkJY2FzZSBSRklDXzI3NTA6CisKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspCisJCQl7CisJCQkJaWYgKENoYW5uZWwgPT0gUkZSZWdUYWJsZVtpbmRleF0uQ2hhbm5lbCkKKwkJCQl7CisJCQkJCVIxID0gUkZSZWdUYWJsZVtpbmRleF0uUjEgJiAweGZmZmZkZmZmOworCQkJCQlSMiA9IFJGUmVnVGFibGVbaW5kZXhdLlIyICYgMHhmZmZiZmZmZjsKKwkJCQkJUjMgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMyAmIDB4ZmZmM2ZmZmY7CisKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjEpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMik7CisKKwkJCQkJLy8gUHJvZ3JhbSBSMWIxMyB0byAxLCBSMy9iMTgsMTkgdG8gMCwgUjJiMTggdG8gMC4KKwkJCQkJLy8gU2V0IFJGIFIyIGJpdDE4PTAsIFIzIGJpdFsxODoxOV09MAorCQkJCQkvL2lmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpCisJCQkJCWlmICgxKQorCQkJCQl7CisJCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMyk7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNUdXJuT2ZmUkZDbGsjJWQoUkY9JWQsICkgLCBSMj0weCUwOHgsICBSMyA9IDB4JTA4eCBcbiIsCisJCQkJCQkJQ2hhbm5lbCwgcEFkLT5SZkljVHlwZSwgUjIsIFIzKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY1R1cm5PZmZSRkNsayMlZChSRj0lZCwgKSAsIFIyPTB4JTA4eCBcbiIsCisJCQkJCQkJQ2hhbm5lbCwgcEFkLT5SZkljVHlwZSwgUjIpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKyNpZmRlZiBSVDMweHgKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKK30KKworCitWT0lEIEFzaWNUdXJuT25SRkNsaygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVQ0hBUgkJCUNoYW5uZWwpCit7CisJLy8gUkYgUjIgYml0IDE4ID0gMAorCVVJTlQzMgkJCVIxID0gMCwgUjIgPSAwLCBSMyA9IDA7CisJVUNIQVIJCQlpbmRleDsKKwlSVE1QX1JGX1JFR1MJKlJGUmVnVGFibGU7CisKKyNpZmRlZiBSVDMweHgKKwkvLyBUaGUgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIDN4eHggYW5kIDJ4eHgKKwlpZiAoSVNfUlQzMDkwKHBBZCkpCisJeworCX0KKwllbHNlCisJeworI2VuZGlmIC8vIFJUMzB4eCAvLworCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKKworCXN3aXRjaCAocEFkLT5SZkljVHlwZSkKKwl7CisJCWNhc2UgUkZJQ18yODIwOgorCQljYXNlIFJGSUNfMjg1MDoKKwkJY2FzZSBSRklDXzI3MjA6CisJCWNhc2UgUkZJQ18yNzUwOgorCisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjg1MF9DSE5MOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpCisJCQkJeworCQkJCQlSMyA9IHBBZC0+TGF0Y2hSZlJlZ3MuUjM7CisJCQkJCVIzICY9IDB4ZmZmM2ZmZmY7CisJCQkJCVIzIHw9IDB4MDAwODAwMDA7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIzKTsKKworCQkJCQlSMSA9IFJGUmVnVGFibGVbaW5kZXhdLlIxOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMSk7CisKKwkJCQkJUjIgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMjsKKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJCQkJeworCQkJCQkJUjIgfD0gMHg0MDAwOwkvLyBJZiBUWHBhdGggaXMgMSwgYml0IDE0ID0gMTsKKwkJCQkJfQorCisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4NDA7CS8vIHdyaXRlIDEgdG8gb2ZmIFJ4cGF0aC4KKwkJCQkJfQorCQkJCQllbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4MjAwNDA7CS8vIHdyaXRlIDEgdG8gb2ZmIFJ4UGF0aAorCQkJCQl9CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIyKTsKKworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisjaWZkZWYgUlQzMHh4CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL25ldGlmX2Jsb2NrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9uZXRpZl9ibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzNjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9uZXRpZl9ibG9jay5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisjaW5jbHVkZSAibmV0aWZfYmxvY2suaCIKKworc3RhdGljIE5FVElGX0VOVFJZIGZyZWVOZXRJZkVudHJ5UG9vbFtGUkVFX05FVElGX1BPT0xfU0laRV07CitzdGF0aWMgTElTVF9IRUFERVIgZnJlZU5ldElmRW50cnlMaXN0OworCit2b2lkIGluaXRibG9ja1F1ZXVlVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCWludCBpOworCisJaW5pdExpc3QoJmZyZWVOZXRJZkVudHJ5TGlzdCk7CisJZm9yIChpID0gMDsgaSA8IEZSRUVfTkVUSUZfUE9PTF9TSVpFOyBpKyspCisJCWluc2VydFRhaWxMaXN0KCZmcmVlTmV0SWZFbnRyeUxpc3QsIChQTElTVF9FTlRSWSkmZnJlZU5ldElmRW50cnlQb29sW2ldKTsKKworCWZvciAoaT0wOyBpIDwgTlVNX09GX1RYX1JJTkc7IGkrKykKKwkJaW5pdExpc3QoJnBBZC0+YmxvY2tRdWV1ZVRhYltpXS5OZXRJZkxpc3QpOworCisJcmV0dXJuOworfQorCitCT09MRUFOIGJsb2NrTmV0SWYoCisJSU4gUEJMT0NLX1FVRVVFX0VOVFJZIHBCbG9ja1F1ZXVlRW50cnksCisJSU4gUE5FVF9ERVYgcE5ldERldikKK3sKKwlQTkVUSUZfRU5UUlkgcE5ldElmRW50cnkgPSBOVUxMOworCisJaWYgKChwTmV0SWZFbnRyeSA9IChQTkVUSUZfRU5UUlkpcmVtb3ZlSGVhZExpc3QoJmZyZWVOZXRJZkVudHJ5TGlzdCkpICE9IE5VTEwpCisJeworCQluZXRpZl9zdG9wX3F1ZXVlKHBOZXREZXYpOworCQlwTmV0SWZFbnRyeS0+cE5ldERldiA9IHBOZXREZXY7CisJCWluc2VydFRhaWxMaXN0KCZwQmxvY2tRdWV1ZUVudHJ5LT5OZXRJZkxpc3QsIChQTElTVF9FTlRSWSlwTmV0SWZFbnRyeSk7CisKKwkJcEJsb2NrUXVldWVFbnRyeS0+U3dUeFF1ZXVlQmxvY2tGbGFnID0gVFJVRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgibmV0aWZfc3RvcF9xdWV1ZSglcylcbiIsIHBOZXREZXYtPm5hbWUpKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworVk9JRCByZWxlYXNlTmV0SWYoCisJSU4gUEJMT0NLX1FVRVVFX0VOVFJZIHBCbG9ja1F1ZXVlRW50cnkpCit7CisJUE5FVElGX0VOVFJZIHBOZXRJZkVudHJ5ID0gTlVMTDsKKwlQTElTVF9IRUFERVIgcE5ldElmTGlzdCA9ICZwQmxvY2tRdWV1ZUVudHJ5LT5OZXRJZkxpc3Q7CisKKwl3aGlsZSgocE5ldElmRW50cnkgPSAoUE5FVElGX0VOVFJZKXJlbW92ZUhlYWRMaXN0KHBOZXRJZkxpc3QpKSAhPSAgTlVMTCkKKwl7CisJCVBORVRfREVWIHBOZXREZXYgPSBwTmV0SWZFbnRyeS0+cE5ldERldjsKKwkJbmV0aWZfd2FrZV9xdWV1ZShwTmV0RGV2KTsKKwkJaW5zZXJ0VGFpbExpc3QoJmZyZWVOZXRJZkVudHJ5TGlzdCwgKFBMSVNUX0VOVFJZKXBOZXRJZkVudHJ5KTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJuZXRpZl93YWtlX3F1ZXVlKCVzKVxuIiwgcE5ldERldi0+bmFtZSkpOworCX0KKwlwQmxvY2tRdWV1ZUVudHJ5LT5Td1R4UXVldWVCbG9ja0ZsYWcgPSBGQUxTRTsKKwlyZXR1cm47Cit9CisKKworVk9JRCBTdG9wTmV0SWZRdWV1ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBRdWVJZHgsCisJSU4gUE5ESVNfUEFDS0VUIHBQYWNrZXQpCit7CisJUE5FVF9ERVYgTmV0RGV2ID0gTlVMTDsKKwlVQ0hBUiBJZklkeCA9IDA7CisJQk9PTEVBTiB2YWxpZCA9IEZBTFNFOworCisjaWZkZWYgV0RTX1NVUFBPUlQKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX05FVF9ERVZJQ0UocFBhY2tldCkgPj0gTUlOX05FVF9ERVZJQ0VfRk9SX1dEUykKKwl7CisJCUlmSWR4ID0gKFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFKHBQYWNrZXQpIC0gTUlOX05FVF9ERVZJQ0VfRk9SX1dEUykgJSBNQVhfV0RTX0VOVFJZOworCQlOZXREZXYgPSBwQWQtPldkc1RhYi5XZHNFbnRyeVtJZklkeF0uZGV2OworCX0KKwllbHNlCisjZW5kaWYgLy8gV0RTX1NVUFBPUlQgLy8KKwl7CisjaWZkZWYgTUJTU19TVVBQT1JUCisJCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApCisJCXsKKwkJCUlmSWR4ID0gKFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFKHBQYWNrZXQpIC0gTUlOX05FVF9ERVZJQ0VfRk9SX01CU1NJRCkgJSBNQVhfTUJTU0lEX05VTTsKKwkJCU5ldERldiA9IHBBZC0+QXBDZmcuTUJTU0lEW0lmSWR4XS5NU1NJRERldjsKKwkJfQorCQllbHNlCisJCXsKKwkJCUlmSWR4ID0gTUFJTl9NQlNTSUQ7CisJCQlOZXREZXYgPSBwQWQtPm5ldF9kZXY7CisJCX0KKyNlbHNlCisJCUlmSWR4ID0gTUFJTl9NQlNTSUQ7CisJCU5ldERldiA9IHBBZC0+bmV0X2RldjsKKyNlbmRpZgorCX0KKworCS8vIFdNTSBzdXBwb3J0IDQgc29mdHdhcmUgcXVldWVzLgorCS8vIE9uZSBzb2Z0d2FyZSBxdWV1ZSBmdWxsIGRvZXNuJ3QgbWVhbiBkZXZpY2UgaGF2ZSBubyBjYXBiaWxpdHkgdG8gdHJhbnNtaXQgcGFja2V0LgorCS8vIFNvIGRpc2FibGUgYmxvY2sgTmV0LUlmIHF1ZXVlIGZ1bmN0aW9uIHdoaWxlIFdNTSBlbmFibGUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJdmFsaWQgPSAocEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPT0gVFJVRSkgPyBGQUxTRSA6IFRSVUU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAodmFsaWQpCisJCWJsb2NrTmV0SWYoJnBBZC0+YmxvY2tRdWV1ZVRhYltRdWVJZHhdLCBOZXREZXYpOworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTAzZjZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF9pbml0LmMKQEAgLTAsMCArMSw0MTk3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfaW5pdC5jCisKKwlBYnN0cmFjdDoKKwlNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBMaW4gICAgMjAwMi0wOC0wMSAgICBjcmVhdGVkCisgICAgSm9obiBDaGFuZyAgMjAwNC0wOC0yMCAgICBSVDI1NjEvMjY2MSB1c2Ugc2NhdHRlci1nYXRoZXIgc2NoZW1lCisgICAgSmFuIExlZSAgMjAwNi0wOS0xNSAgICBSVDI4NjAuIENoYW5nZSBmb3IgODAyLjExbiAsIEVFUFJPTSwgTGVkLCBCQSwgSFQuCisqLworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgCSIuLi9maXJtd2FyZS5oIgorCisvLyNkZWZpbmUgQklOX0lOX0ZJTEUgLyogdXNlICouYmluIGZpcm13YXJlICovCisKK1VDSEFSICAgIEJJVDhbXSA9IHsweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKK1VMT05HICAgIEJJVDMyW10gPSB7MHgwMDAwMDAwMSwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwOCwKKwkJCQkJMHgwMDAwMDAxMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA4MCwKKwkJCQkJMHgwMDAwMDEwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDQwMCwgMHgwMDAwMDgwMCwKKwkJCQkJMHgwMDAwMTAwMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDAwMCwgMHgwMDAwODAwMCwKKwkJCQkJMHgwMDAxMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDA0MDAwMCwgMHgwMDA4MDAwMCwKKwkJCQkJMHgwMDEwMDAwMCwgMHgwMDIwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDgwMDAwMCwKKwkJCQkJMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwKKwkJCQkJMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMH07CisKK2NoYXIqICAgQ2lwaGVyTmFtZVtdID0geyJub25lIiwid2VwNjQiLCJ3ZXAxMjgiLCJUS0lQIiwiQUVTIiwiQ0tJUDY0IiwiQ0tJUDEyOCJ9OworCitjb25zdCB1bnNpZ25lZCBzaG9ydCBjY2l0dF8xNlRhYmxlW10gPSB7CisJMHgwMDAwLCAweDEwMjEsIDB4MjA0MiwgMHgzMDYzLCAweDQwODQsIDB4NTBBNSwgMHg2MEM2LCAweDcwRTcsCisJMHg4MTA4LCAweDkxMjksIDB4QTE0QSwgMHhCMTZCLCAweEMxOEMsIDB4RDFBRCwgMHhFMUNFLCAweEYxRUYsCisJMHgxMjMxLCAweDAyMTAsIDB4MzI3MywgMHgyMjUyLCAweDUyQjUsIDB4NDI5NCwgMHg3MkY3LCAweDYyRDYsCisJMHg5MzM5LCAweDgzMTgsIDB4QjM3QiwgMHhBMzVBLCAweEQzQkQsIDB4QzM5QywgMHhGM0ZGLCAweEUzREUsCisJMHgyNDYyLCAweDM0NDMsIDB4MDQyMCwgMHgxNDAxLCAweDY0RTYsIDB4NzRDNywgMHg0NEE0LCAweDU0ODUsCisJMHhBNTZBLCAweEI1NEIsIDB4ODUyOCwgMHg5NTA5LCAweEU1RUUsIDB4RjVDRiwgMHhDNUFDLCAweEQ1OEQsCisJMHgzNjUzLCAweDI2NzIsIDB4MTYxMSwgMHgwNjMwLCAweDc2RDcsIDB4NjZGNiwgMHg1Njk1LCAweDQ2QjQsCisJMHhCNzVCLCAweEE3N0EsIDB4OTcxOSwgMHg4NzM4LCAweEY3REYsIDB4RTdGRSwgMHhENzlELCAweEM3QkMsCisJMHg0OEM0LCAweDU4RTUsIDB4Njg4NiwgMHg3OEE3LCAweDA4NDAsIDB4MTg2MSwgMHgyODAyLCAweDM4MjMsCisJMHhDOUNDLCAweEQ5RUQsIDB4RTk4RSwgMHhGOUFGLCAweDg5NDgsIDB4OTk2OSwgMHhBOTBBLCAweEI5MkIsCisJMHg1QUY1LCAweDRBRDQsIDB4N0FCNywgMHg2QTk2LCAweDFBNzEsIDB4MEE1MCwgMHgzQTMzLCAweDJBMTIsCisJMHhEQkZELCAweENCREMsIDB4RkJCRiwgMHhFQjlFLCAweDlCNzksIDB4OEI1OCwgMHhCQjNCLCAweEFCMUEsCisJMHg2Q0E2LCAweDdDODcsIDB4NENFNCwgMHg1Q0M1LCAweDJDMjIsIDB4M0MwMywgMHgwQzYwLCAweDFDNDEsCisJMHhFREFFLCAweEZEOEYsIDB4Q0RFQywgMHhERENELCAweEFEMkEsIDB4QkQwQiwgMHg4RDY4LCAweDlENDksCisJMHg3RTk3LCAweDZFQjYsIDB4NUVENSwgMHg0RUY0LCAweDNFMTMsIDB4MkUzMiwgMHgxRTUxLCAweDBFNzAsCisJMHhGRjlGLCAweEVGQkUsIDB4REZERCwgMHhDRkZDLCAweEJGMUIsIDB4QUYzQSwgMHg5RjU5LCAweDhGNzgsCisJMHg5MTg4LCAweDgxQTksIDB4QjFDQSwgMHhBMUVCLCAweEQxMEMsIDB4QzEyRCwgMHhGMTRFLCAweEUxNkYsCisJMHgxMDgwLCAweDAwQTEsIDB4MzBDMiwgMHgyMEUzLCAweDUwMDQsIDB4NDAyNSwgMHg3MDQ2LCAweDYwNjcsCisJMHg4M0I5LCAweDkzOTgsIDB4QTNGQiwgMHhCM0RBLCAweEMzM0QsIDB4RDMxQywgMHhFMzdGLCAweEYzNUUsCisJMHgwMkIxLCAweDEyOTAsIDB4MjJGMywgMHgzMkQyLCAweDQyMzUsIDB4NTIxNCwgMHg2Mjc3LCAweDcyNTYsCisJMHhCNUVBLCAweEE1Q0IsIDB4OTVBOCwgMHg4NTg5LCAweEY1NkUsIDB4RTU0RiwgMHhENTJDLCAweEM1MEQsCisJMHgzNEUyLCAweDI0QzMsIDB4MTRBMCwgMHgwNDgxLCAweDc0NjYsIDB4NjQ0NywgMHg1NDI0LCAweDQ0MDUsCisJMHhBN0RCLCAweEI3RkEsIDB4ODc5OSwgMHg5N0I4LCAweEU3NUYsIDB4Rjc3RSwgMHhDNzFELCAweEQ3M0MsCisJMHgyNkQzLCAweDM2RjIsIDB4MDY5MSwgMHgxNkIwLCAweDY2NTcsIDB4NzY3NiwgMHg0NjE1LCAweDU2MzQsCisJMHhEOTRDLCAweEM5NkQsIDB4RjkwRSwgMHhFOTJGLCAweDk5QzgsIDB4ODlFOSwgMHhCOThBLCAweEE5QUIsCisJMHg1ODQ0LCAweDQ4NjUsIDB4NzgwNiwgMHg2ODI3LCAweDE4QzAsIDB4MDhFMSwgMHgzODgyLCAweDI4QTMsCisJMHhDQjdELCAweERCNUMsIDB4RUIzRiwgMHhGQjFFLCAweDhCRjksIDB4OUJEOCwgMHhBQkJCLCAweEJCOUEsCisJMHg0QTc1LCAweDVBNTQsIDB4NkEzNywgMHg3QTE2LCAweDBBRjEsIDB4MUFEMCwgMHgyQUIzLCAweDNBOTIsCisJMHhGRDJFLCAweEVEMEYsIDB4REQ2QywgMHhDRDRELCAweEJEQUEsIDB4QUQ4QiwgMHg5REU4LCAweDhEQzksCisJMHg3QzI2LCAweDZDMDcsIDB4NUM2NCwgMHg0QzQ1LCAweDNDQTIsIDB4MkM4MywgMHgxQ0UwLCAweDBDQzEsCisJMHhFRjFGLCAweEZGM0UsIDB4Q0Y1RCwgMHhERjdDLCAweEFGOUIsIDB4QkZCQSwgMHg4RkQ5LCAweDlGRjgsCisJMHg2RTE3LCAweDdFMzYsIDB4NEU1NSwgMHg1RTc0LCAweDJFOTMsIDB4M0VCMiwgMHgwRUQxLCAweDFFRjAKK307CisjZGVmaW5lIEJ5dGVDUkMxNih2LCBjcmMpIFwKKwkodW5zaWduZWQgc2hvcnQpKChjcmMgPDwgOCkgXiAgY2NpdHRfMTZUYWJsZVsoKGNyYyA+PiA4KSBeICh2KSkgJiAyNTVdKQorCit1bnNpZ25lZCBjaGFyIEJpdFJldmVyc2UodW5zaWduZWQgY2hhciB4KQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgVGVtcD0wOworCWZvcihpPTA7IDsgaSsrKQorCXsKKwkJaWYoeCAmIDB4ODApCVRlbXAgfD0gMHg4MDsKKwkJaWYoaT09NykJCWJyZWFrOworCQl4CTw8PSAxOworCQlUZW1wID4+PSAxOworCX0KKwlyZXR1cm4gVGVtcDsKK30KKworLy8KKy8vIEJCUCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXQKKy8vCitSRUdfUEFJUiAgIEJCUFJlZ1RhYmxlW10gPSB7CisJe0JCUF9SNjUsCQkweDJDfSwJCS8vIGZpeCByc3NpIGlzc3VlCisJe0JCUF9SNjYsCQkweDM4fSwJLy8gQWxzbyBzZXQgdGhpcyBkZWZhdWx0IHZhbHVlIHRvIHBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSBhdCBpbml0aWFsCisJe0JCUF9SNjksCQkweDEyfSwKKwl7QkJQX1I3MCwJCTB4YX0sCS8vIEJCUF9SNzAgd2lsbCBjaGFuZ2UgdG8gMHg4IGluIEFwU3RhcnRVcCBhbmQgTGlua1VwIGZvciBydDI4NjBDLCBvdGhlcndpc2UgdmFsdWUgaXMgMHhhCisJe0JCUF9SNzMsCQkweDEwfSwKKwl7QkJQX1I4MSwJCTB4Mzd9LAorCXtCQlBfUjgyLAkJMHg2Mn0sCisJe0JCUF9SODMsCQkweDZBfSwKKwl7QkJQX1I4NCwJCTB4OTl9LAkvLyAweDE5IGlzIGZvciBydDI4NjBFIGFuZCBhZnRlci4gVGhpcyBpcyBmb3IgZXh0ZW5zaW9uIGNoYW5uZWwgb3ZlcmxhcHBpbmcgSU9ULiAweDk5IGlzIGZvciBydDI4NjBEIGFuZCBiZWZvcmUKKwl7QkJQX1I4NiwJCTB4MDB9LAkvLyBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjgKKwl7QkJQX1I5MSwJCTB4MDR9LAkvLyBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjgKKwl7QkJQX1I5MiwJCTB4MDB9LAkvLyBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjgKKwl7QkJQX1IxMDMsICAJMHgwMH0sIAkvLyBuZWFyIHJhbmdlIGhpZ2gtcG93ZXIgaXNzdWUsIHJlcXVlc3RlZCBmcm9tIEdhcnkgQDIwMDgtMDUyOAorCXtCQlBfUjEwNSwJCTB4MDV9LAkvLyAweDA1IGlzIGZvciBydDI4NjBFIHRvIHR1cm4gb24gRkVRIGNvbnRyb2wuIEl0IGlzIHNhZmUgZm9yIHJ0Mjg2MEQgYW5kIGJlZm9yZSwgYmVjYXVzZSBCaXQgNzoyIGFyZSByZXNlcnZlZCBpbiBydDI4NjBEIGFuZCBiZWZvcmUuCit9OworI2RlZmluZQlOVU1fQkJQX1JFR19QQVJNUwkoc2l6ZW9mKEJCUFJlZ1RhYmxlKSAvIHNpemVvZihSRUdfUEFJUikpCisKKy8vCisvLyBSRiByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXQKKy8vCisjaWZkZWYgUlQzMHh4CitSRUdfUEFJUiAgIFJUMzB4eF9SRlJlZ1RhYmxlW10gPSB7CisgICAgICAgIHtSRl9SMDQsICAgICAgICAgIDB4NDB9LAorICAgICAgICB7UkZfUjA1LCAgICAgICAgICAweDAzfSwKKyAgICAgICAge1JGX1IwNiwgICAgICAgICAgMHgwMn0sCisgICAgICAgIHtSRl9SMDcsICAgICAgICAgIDB4NzB9LAorICAgICAgICB7UkZfUjA5LCAgICAgICAgICAweDBGfSwKKyAgICAgICAge1JGX1IxMCwgICAgICAgICAgMHg0MX0sCisgICAgICAgIHtSRl9SMTEsICAgICAgICAgIDB4MjF9LAorICAgICAgICB7UkZfUjEyLCAgICAgICAgICAweDdCfSwKKyAgICAgICAge1JGX1IxNCwgICAgICAgICAgMHg5MH0sCisgICAgICAgIHtSRl9SMTUsICAgICAgICAgIDB4NTh9LAorICAgICAgICB7UkZfUjE2LCAgICAgICAgICAweEIzfSwKKyAgICAgICAge1JGX1IxNywgICAgICAgICAgMHg5Mn0sCisgICAgICAgIHtSRl9SMTgsICAgICAgICAgIDB4MkN9LAorICAgICAgICB7UkZfUjE5LCAgICAgICAgICAweDAyfSwKKyAgICAgICAge1JGX1IyMCwgICAgICAgICAgMHhCQX0sCisgICAgICAgIHtSRl9SMjEsICAgICAgICAgIDB4REJ9LAorICAgICAgICB7UkZfUjI0LCAgICAgICAgICAweDE2fSwKKyAgICAgICAge1JGX1IyNSwgICAgICAgICAgMHgwMX0sCisgICAgICAgIHtSRl9SMjksICAgICAgICAgIDB4MUZ9LAorfTsKKyNkZWZpbmUJTlVNX1JGX1JFR19QQVJNUwkoc2l6ZW9mKFJUMzB4eF9SRlJlZ1RhYmxlKSAvIHNpemVvZihSRUdfUEFJUikpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKy8vCisvLyBBU0lDIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIHNldHMKKy8vCisKK1JUTVBfUkVHX1BBSVIJTUFDUmVnVGFibGVbXSA9CXsKKyNpZiBkZWZpbmVkKEhXX0JFQUNPTl9PRkZTRVQpICYmIChIV19CRUFDT05fT0ZGU0VUID09IDB4MjAwKQorCXtCQ05fT0ZGU0VUMCwJCQkweGY4ZjBlOGUwfSwgLyogMHgzODAwKGUwKSwgMHgzQTAwKGU4KSwgMHgzQzAwKGYwKSwgMHgzRTAwKGY4KSwgNTEyQiBmb3IgZWFjaCBiZWFjb24gKi8KKwl7QkNOX09GRlNFVDEsCQkJMHg2Zjc3ZDBjOH0sIC8qIDB4MzIwMChjOCksIDB4MzQwMChkMCksIDB4MURDMCg3NyksIDB4MUJDMCg2ZiksIDUxMkIgZm9yIGVhY2ggYmVhY29uICovCisjZWxpZiBkZWZpbmVkKEhXX0JFQUNPTl9PRkZTRVQpICYmIChIV19CRUFDT05fT0ZGU0VUID09IDB4MTAwKQorCXtCQ05fT0ZGU0VUMCwJCQkweGVjZThlNGUwfSwgLyogMHgzODAwLCAweDNBMDAsIDB4M0MwMCwgMHgzRTAwLCA1MTJCIGZvciBlYWNoIGJlYWNvbiAqLworCXtCQ05fT0ZGU0VUMSwJCQkweGZjZjhmNGYwfSwgLyogMHgzODAwLCAweDNBMDAsIDB4M0MwMCwgMHgzRTAwLCA1MTJCIGZvciBlYWNoIGJlYWNvbiAqLworI2Vsc2UKKyAgICAjZXJyb3IgWW91IG11c3QgcmUtY2FsY3VsYXRlIG5ldyB2YWx1ZSBmb3IgQkNOX09GRlNFVDAgJiBCQ05fT0ZGU0VUMSBpbiBNQUNSZWdUYWJsZVtdISEhCisjZW5kaWYgLy8gSFdfQkVBQ09OX09GRlNFVCAvLworCisJe0xFR0FDWV9CQVNJQ19SQVRFLAkJMHgwMDAwMDEzZn0sIC8vICBCYXNpYyByYXRlIHNldCBiaXRtYXAKKwl7SFRfQkFTSUNfUkFURSwJCTB4MDAwMDgwMDN9LCAvLyBCYXNpYyBIVCByYXRlIHNldCAsIDIwTSwgTUNTPTMsIE1NLiBGb3JtYXQgaXMgdGhlIHNhbWUgYXMgaW4gVFhXSS4KKwl7TUFDX1NZU19DVFJMLAkJMHgwMH0sIC8vIDB4MTAwNCwgLCBkZWZhdWx0IERpc2FibGUgUlgKKwl7UlhfRklMVFJfQ0ZHLAkJMHgxN2Y5N30sIC8vMHgxNDAwICAsIFJYIGZpbHRlciBjb250cm9sLAorCXtCS09GRl9TTE9UX0NGRywJMHgyMDl9LCAvLyBkZWZhdWx0IHNldCBzaG9ydCBzbG90IHRpbWUsIENDX0RFTEFZX1RJTUUgc2hvdWxkIGJlIDIKKwkvL3tUWF9TV19DRkcwLAkJMHg0MGEwNn0sIC8vIEdhcnksMjAwNi0wOC0yMworCXtUWF9TV19DRkcwLAkJMHgwfSwgCQkvLyBHYXJ5LDIwMDgtMDUtMjEgZm9yIENXQyB0ZXN0CisJe1RYX1NXX0NGRzEsCQkweDgwNjA2fSwgLy8gR2FyeSwyMDA2LTA4LTIzCisJe1RYX0xJTktfQ0ZHLAkJMHgxMDIwfSwJCS8vIEdhcnksMjAwNi0wOC0yMworCXtUWF9USU1FT1VUX0NGRywJMHgwMDBhMjA5MH0sCisJe01BWF9MRU5fQ0ZHLAkJTUFYX0FHR1JFR0FUSU9OX1NJWkUgfCAweDAwMDAxMDAwfSwJLy8gMHgzMDE4LCBNQVggZnJhbWUgbGVuZ3RoLiBNYXggUFNEVSA9IDE2a2J5dGVzLgorCXtMRURfQ0ZHLAkJMHg3ZjAzMWU0Nn0sIC8vIEdhcnksIDIwMDYtMDgtMjMKKworLy8jaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvLwl7V01NX0FJRlNOX0NGRywJCTB4MDAwMDIyNzN9LAorLy8Je1dNTV9DV01JTl9DRkcsCQkweDAwMDAyMzQ0fSwKKy8vCXtXTU1fQ1dNQVhfQ0ZHLAkJMHgwMDAwMzRhYX0sCisvLyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJe1BCRl9NQVhfUENOVCwJCQkweDFGM0Y2RjZGfSwgCS8vaXZlcnNvbiBtb2RpZnkgZm9yIHVzYiBpc3N1ZSwgMjAwOC8wOS8xOQorCQkJCQkJCQkJCQkvLyA2RiArIDZGIDwgdG90YWwgcGFnZSBjb3VudCBGRQorCQkJCQkJCQkJCQkvLyBzbyB0aGF0IFJYIGRvZXNuJ3Qgb2NjdXB5IFRYJ3MgYnVmZmVyIHNwYWNlIHdoZW4gV01NIGNvbmdlc3Rpb24uCisjZWxzZQorCXtQQkZfTUFYX1BDTlQsCQkJMHgxRjNGQkY5Rn0sIAkvLzB4MUYzZjdmOWZ9LAkJLy9KYW4sIDIwMDYvMDQvMjAKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJLy97VFhfUlRZX0NGRywJCQkweDZiYjgwNDA4fSwJLy8gSmFuLCAyMDA2LzExLzE2CisJe1RYX1JUWV9DRkcsCQkJMHg0N2QwMWYwZn0sCS8vIEphbiwgMjAwNi8xMS8xNiwgU2V0IFR4V0ktPkFDSyA9MCBpbiBQcm9iZSBSc3AgTW9kaWZ5IGZvciAyODYwRSAsMjAwNy0wOC0wMworCXtBVVRPX1JTUF9DRkcsCQkJMHgwMDAwMDAxM30sCS8vIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlcgorCXtDQ0tfUFJPVF9DRkcsCQkJMHgwNTc0MDAwMyAvKjB4MDE3NDAwMDMqL30sCS8vIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlci4gQW5kIFJUUyB0aHJlc2hvbGQgaXMgZW5hYmxlZC4KKwl7T0ZETV9QUk9UX0NGRywJCQkweDA1NzQwMDAzIC8qMHgwMTc0MDAwMyovfSwJLy8gSW5pdGlhbCBBdXRvX1Jlc3BvbmRlciwgYmVjYXVzZSBRQSB3aWxsIHR1cm4gb2ZmIEF1dG8tUmVzcG9uZGVyLiBBbmQgUlRTIHRocmVzaG9sZCBpcyBlbmFibGVkLgorLy9QUyBwYWNrZXRzIHVzZSBUeDFRIChmb3IgSENDQSkgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisjaWZkZWYgUlQyODcwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJe1BCRl9DRkcsIAkJCQkweGY0MDAwNn0sIAkJLy8gT25seSBlbmFibGUgUXVldWUgMgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCXtNTTQwX1BST1RfQ0ZHLAkJCTB4M0Y0NDA4NH0sCQkvLyBJbml0aWFsIEF1dG9fUmVzcG9uZGVyLCBiZWNhdXNlIFFBIHdpbGwgdHVybiBvZmYgQXV0by1SZXNwb25kZXIKKwl7V1BETUFfR0xPX0NGRywJCQkweDAwMDAwMDMwfSwKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl7R0YyMF9QUk9UX0NGRywJCQkweDAxNzQ0MDA0fSwgICAgLy8gc2V0IDE5OjE4IC0tPiBTaG9ydCBOQVYgZm9yIE1JTU8gUFMKKwl7R0Y0MF9QUk9UX0NGRywJCQkweDAzRjQ0MDg0fSwKKwl7TU0yMF9QUk9UX0NGRywJCQkweDAxNzQ0MDA0fSwKKwl7VFhPUF9DVFJMX0NGRywJCQkweDAwMDA1ODNmLCAvKjB4MDAwMDI0M2YqLyAvKjB4MDAwMDI0YmYqL30sCS8vRXh0ZW5zaW9uIGNoYW5uZWwgYmFja29mZi4KKwl7VFhfUlRTX0NGRywJCQkweDAwMDkyYjIwfSwKKy8vI2lmZGVmIFdJRklfVEVTVAorCXtFWFBfQUNLX1RJTUUsCQkJMHgwMDI0MDBjYX0sCS8vIGRlZmF1bHQgdmFsdWUKKy8vI2Vsc2UKKy8vCXtFWFBfQUNLX1RJTUUsCQkJMHgwMDU0MDBjYX0sCS8vIHN1Z2dlc3RlZCBieSBHcmF5IEAgMjAwNzAzMjMgZm9yIDExbiBpbnRlbC1zdGEgdGhyb3VnaHB1dAorLy8jZW5kaWYgLy8gZW5kIC0gV0lGSV9URVNUIC8vCisJe1RYT1BfSExEUl9FVCwgCQkJMHgwMDAwMDAwMn0sCisKKwkvKiBKZXJyeSBjb21tZW50cyAyMDA4LzAxLzE2OiB3ZSB1c2UgU0lGUyA9IDEwdXMgaW4gQ0NLIGRlZmF1bHRseSwgYnV0IGl0IHNlZW1zIHRoYXQgMTB1cworCQlpcyB0b28gc21hbGwgZm9yIElOVEVMIDIyMDBiZyBjYXJkLCBzbyBpbiBNQlNTIG1vZGUsIHRoZSBkZWx0YSB0aW1lIGJldHdlZW4gYmVhY29uMAorCQlhbmQgYmVhY29uMSBpcyBTSUZTICgxMHVzKSwgc28gaWYgSU5URUwgMjIwMGJnIGNhcmQgY29ubmVjdHMgdG8gQlNTMCwgdGhlIHBpbmcKKwkJd2lsbCBhbHdheXMgbG9zdC4gU28gd2UgY2hhbmdlIHRoZSBTSUZTIG9mIENDSyBmcm9tIDEwdXMgdG8gMTZ1cy4gKi8KKwl7WElGU19USU1FX0NGRywJCQkweDMzYTQxMDEwfSwKKwl7UFdSX1BJTl9DRkcsCQkJMHgwMDAwMDAwM30sCS8vIHBhdGNoIGZvciAyODgwLUUKK307CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorUlRNUF9SRUdfUEFJUglTVEFNQUNSZWdUYWJsZVtdID0JeworCXtXTU1fQUlGU05fQ0ZHLAkJMHgwMDAwMjI3M30sCisJe1dNTV9DV01JTl9DRkcsCTB4MDAwMDIzNDR9LAorCXtXTU1fQ1dNQVhfQ0ZHLAkweDAwMDAzNGFhfSwKK307CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNkZWZpbmUJTlVNX01BQ19SRUdfUEFSTVMJCShzaXplb2YoTUFDUmVnVGFibGUpIC8gc2l6ZW9mKFJUTVBfUkVHX1BBSVIpKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZQlOVU1fU1RBX01BQ19SRUdfUEFSTVMJKHNpemVvZihTVEFNQUNSZWdUYWJsZSkgLyBzaXplb2YoUlRNUF9SRUdfUEFJUikpCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDI4NzAKKy8vCisvLyBSVDI4NzAgRmlybXdhcmUgU3BlYyBvbmx5IHVzZWQgMSBvY3QgZm9yIHZlcnNpb24gZXhwcmVzc2lvbgorLy8KKyNkZWZpbmUgRklSTVdBUkVfTUlOT1JfVkVSU0lPTgk3CisKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworLy8gTmV3IDhrIGJ5dGUgZmlybXdhcmUgc2l6ZSBmb3IgUlQzMDcxL1JUMzA3MgorI2RlZmluZSBGSVJNV0FSRUlNQUdFX01BWF9MRU5HVEgJMHgyMDAwCisjZGVmaW5lIEZJUk1XQVJFSU1BR0VfTEVOR1RICQkoc2l6ZW9mIChGaXJtd2FyZUltYWdlKSAvIHNpemVvZihVQ0hBUikpCisjZGVmaW5lIEZJUk1XQVJFX01BSk9SX1ZFUlNJT04JMAorCisjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMV9MRU5HVEgJMHgxMDAwCisjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMl9MRU5HVEgJMHgxMDAwCisKKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQWxsb2NhdGUgUlRNUF9BREFQVEVSIGRhdGEgYmxvY2sgYW5kIGRvIHNvbWUgaW5pdGlhbGl6YXRpb24KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRNUEFsbG9jQWRhcHRlckJsb2NrKAorCUlOICBQVk9JRAloYW5kbGUsCisJT1VUCVBSVE1QX0FEQVBURVIJKnBwQWRhcHRlcikKK3sKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlORElTX1NUQVRVUwkJU3RhdHVzOworCUlOVCAJCQlpbmRleDsKKwlVQ0hBUgkJCSpwQmVhY29uQnVmID0gTlVMTDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBSVE1QQWxsb2NBZGFwdGVyQmxvY2tcbiIpKTsKKworCSpwcEFkYXB0ZXIgPSBOVUxMOworCisJZG8KKwl7CisJCS8vIEFsbG9jYXRlIFJUTVBfQURBUFRFUiBtZW1vcnkgYmxvY2sKKwkJcEJlYWNvbkJ1ZiA9IGttYWxsb2MoTUFYX0JFQUNPTl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisJCWlmIChwQmVhY29uQnVmID09IE5VTEwpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCQlEQkdQUklOVF9FUlIoKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IC0gQmVhY29uQnVmIVxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQlTdGF0dXMgPSBBZGFwdGVyQmxvY2tBbGxvY2F0ZU1lbW9yeShoYW5kbGUsIChQVk9JRCAqKSZwQWQpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCURCR1BSSU5UX0VSUigoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgLSBBREFQVEVSXG4iKSk7CisJCQlicmVhazsKKwkJfQorCQlwQWQtPkJlYWNvbkJ1ZiA9IHBCZWFjb25CdWY7CisJCXByaW50aygiXG5cbj09PSBwQWQgPSAlcCwgc2l6ZSA9ICVkID09PVxuXG4iLCBwQWQsIChVSU5UMzIpc2l6ZW9mKFJUTVBfQURBUFRFUikpOworCisKKwkJLy8gSW5pdCBzcGluIGxvY2tzCisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7CisKKwkJZm9yIChpbmRleCA9MCA7IGluZGV4IDwgTlVNX09GX1RYX1JJTkc7IGluZGV4KyspCisJCXsKKwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlR4U3dRdWV1ZUxvY2tbaW5kZXhdKTsKKwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkRlUXVldWVMb2NrW2luZGV4XSk7CisJCQlwQWQtPkRlUXVldWVSdW5uaW5nW2luZGV4XSA9IEZBTFNFOworCQl9CisKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+aXJxX2xvY2spOworCisJfSB3aGlsZSAoRkFMU0UpOworCisJaWYgKChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgJiYgKHBCZWFjb25CdWYpKQorCQlrZnJlZShwQmVhY29uQnVmKTsKKworCSpwcEFkYXB0ZXIgPSBwQWQ7CisKKwlEQkdQUklOVF9TKFN0YXR1cywgKCI8LS0gUlRNUEFsbG9jQWRhcHRlckJsb2NrLCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSZWFkIGluaXRpYWwgVHggcG93ZXIgcGVyIE1DUyBhbmQgQlcgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBSZWFkVHhQd3JQZXJSYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVMT05HCQlkYXRhLCBBZGF0YSwgR2RhdGE7CisJVVNIT1JUCQlpLCB2YWx1ZSwgdmFsdWUyOworCUlOVAkJCUFwd3JkZWx0YSwgR3B3cmRlbHRhOworCVVDSEFSCQl0MSx0Mix0Myx0NDsKKwlCT09MRUFOCQliVmFsaWQsIGJBcHdyZGVsdGFNaW51cyA9IFRSVUUsIGJHcHdyZGVsdGFNaW51cyA9IFRSVUU7CisKKwkvLworCS8vIEdldCBwb3dlciBkZWx0YSBmb3IgMjBNSHogYW5kIDQwTUh6LgorCS8vCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhwb3dlciBwZXIgUmF0ZVxuIikpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfREVMVEEsIHZhbHVlMik7CisJQXB3cmRlbHRhID0gMDsKKwlHcHdyZGVsdGEgPSAwOworCisJaWYgKCh2YWx1ZTIgJiAweGZmKSAhPSAweGZmKQorCXsKKwkJaWYgKCh2YWx1ZTIgJiAweDgwKSkKKwkJCUdwd3JkZWx0YSA9ICh2YWx1ZTImMHhmKTsKKworCQlpZiAoKHZhbHVlMiAmIDB4NDApKQorCQkJYkdwd3JkZWx0YU1pbnVzID0gRkFMU0U7CisJCWVsc2UKKwkJCWJHcHdyZGVsdGFNaW51cyA9IFRSVUU7CisJfQorCWlmICgodmFsdWUyICYgMHhmZjAwKSAhPSAweGZmMDApCisJeworCQlpZiAoKHZhbHVlMiAmIDB4ODAwMCkpCisJCQlBcHdyZGVsdGEgPSAoKHZhbHVlMiYweGYwMCk+PjgpOworCisJCWlmICgodmFsdWUyICYgMHg0MDAwKSkKKwkJCWJBcHdyZGVsdGFNaW51cyA9IEZBTFNFOworCQllbHNlCisJCQliQXB3cmRlbHRhTWludXMgPSBUUlVFOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJHcHdyZGVsdGEgPSAleCwgQXB3cmRlbHRhID0gJXggLlxuIiwgR3B3cmRlbHRhLCBBcHdyZGVsdGEpKTsKKworCS8vCisJLy8gR2V0IFR4cG93ZXIgcGVyIE1DUyBmb3IgMjBNSHogaW4gMi40Ry4KKwkvLworCWZvciAoaT0wOyBpPDU7IGkrKykKKwl7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzJfNEcgKyBpKjQsIHZhbHVlKTsKKwkJZGF0YSA9IHZhbHVlOworCQlpZiAoYkFwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQl7CisJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQxID4gMHhmKQorCQkJCXQxID0gMHhmOworCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0MiA+IDB4ZikKKwkJCQl0MiA9IDB4ZjsKKwkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQzID4gMHhmKQorCQkJCXQzID0gMHhmOworCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0NCA+IDB4ZikKKwkJCQl0NCA9IDB4ZjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQl0MSA9ICh2YWx1ZSYweGYpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQxID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEFwd3JkZWx0YSkKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQyID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDMgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDQgPSAwOworCQl9CisJCUFkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCQlpZiAoYkdwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQl7CisJCQl0MSA9ICh2YWx1ZSYweGYpKyhHcHdyZGVsdGEpOworCQkJaWYgKHQxID4gMHhmKQorCQkJCXQxID0gMHhmOworCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MiA+IDB4ZikKKwkJCQl0MiA9IDB4ZjsKKwkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhHcHdyZGVsdGEpOworCQkJaWYgKHQzID4gMHhmKQorCQkJCXQzID0gMHhmOworCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0NCA+IDB4ZikKKwkJCQl0NCA9IDB4ZjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICgodmFsdWUmMHhmKSA+IEdwd3JkZWx0YSkKKwkJCQl0MSA9ICh2YWx1ZSYweGYpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQxID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEdwd3JkZWx0YSkKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQyID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBHcHdyZGVsdGEpCisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEdwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDMgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gR3B3cmRlbHRhKQorCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEdwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDQgPSAwOworCQl9CisJCUdkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzJfNEcgKyBpKjQgKyAyLCB2YWx1ZSk7CisJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCXsKKwkJCXQxID0gKHZhbHVlJjB4ZikrKEFwd3JkZWx0YSk7CisJCQlpZiAodDEgPiAweGYpCisJCQkJdDEgPSAweGY7CisJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQyID4gMHhmKQorCQkJCXQyID0gMHhmOworCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEFwd3JkZWx0YSk7CisJCQlpZiAodDMgPiAweGYpCisJCQkJdDMgPSAweGY7CisJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQ0ID4gMHhmKQorCQkJCXQ0ID0gMHhmOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKCh2YWx1ZSYweGYpID4gQXB3cmRlbHRhKQorCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDEgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDIgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEFwd3JkZWx0YSkKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oQXB3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MyA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBBcHdyZGVsdGEpCisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0NCA9IDA7CisJCX0KKwkJQWRhdGEgfD0gKCh0MTw8MTYpICsgKHQyPDwyMCkgKyAodDM8PDI0KSArICh0NDw8MjgpKTsKKwkJaWYgKGJHcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJeworCQkJdDEgPSAodmFsdWUmMHhmKSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MSA+IDB4ZikKKwkJCQl0MSA9IDB4ZjsKKwkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEdwd3JkZWx0YSk7CisJCQlpZiAodDIgPiAweGYpCisJCQkJdDIgPSAweGY7CisJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MyA+IDB4ZikKKwkJCQl0MyA9IDB4ZjsKKwkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEdwd3JkZWx0YSk7CisJCQlpZiAodDQgPiAweGYpCisJCQkJdDQgPSAweGY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoKHZhbHVlJjB4ZikgPiBHcHdyZGVsdGEpCisJCQkJdDEgPSAodmFsdWUmMHhmKS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MSA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBHcHdyZGVsdGEpCisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MiA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gR3B3cmRlbHRhKQorCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQzID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEdwd3JkZWx0YSkKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQ0ID0gMDsKKwkJfQorCQlHZGF0YSB8PSAoKHQxPDwxNikgKyAodDI8PDIwKSArICh0Mzw8MjQpICsgKHQ0PDwyOCkpOworCQlkYXRhIHw9ICh2YWx1ZTw8MTYpOworCisJCXBBZC0+VHgyME1Qd3JDZmdBQmFuZFtpXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpXSA9IEFkYXRhOworCQlwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbaV0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaV0gPSBHZGF0YTsKKworCQlpZiAoZGF0YSAhPSAweGZmZmZmZmZmKQorCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBkYXRhKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjIwTUh6IEJXLCAyLjRHIGJhbmQtJWx4LCAgQWRhdGEgPSAlbHgsICBHZGF0YSA9ICVseCBcbiIsIGRhdGEsIEFkYXRhLCBHZGF0YSkpOworCX0KKworCS8vCisJLy8gQ2hlY2sgdGhpcyBibG9jayBpcyB2YWxpZCBmb3IgNDBNSHogaW4gMi40Ry4gSWYgaW52YWxpZCwgdXNlIHBhcmFtZXRlciBmb3IgMjBNSHogaW4gMi40RworCS8vCisJYlZhbGlkID0gVFJVRTsKKwlmb3IgKGk9MDsgaTw2OyBpKyspCisJeworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl8yXzRHICsgMiArIGkqMiwgdmFsdWUpOworCQlpZiAoKCh2YWx1ZSAmIDB4MDBGRikgPT0gMHgwMEZGKSB8fCAoKHZhbHVlICYgMHhGRjAwKSA9PSAweEZGMDApKQorCQl7CisJCQliVmFsaWQgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLy8KKwkvLyBHZXQgVHhwb3dlciBwZXIgTUNTIGZvciA0ME1IeiBpbiAyLjRHLgorCS8vCisJaWYgKGJWYWxpZCkKKwl7CisJCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJeworCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfMl80RyArIGkqNCwgdmFsdWUpOworCQkJaWYgKGJHcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEdwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBHcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEdwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gR3B3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJR2RhdGEgPSB0MSArICh0Mjw8NCkgKyAodDM8PDgpICsgKHQ0PDwxMik7CisKKwkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzJfNEcgKyBpKjQgKyAyLCB2YWx1ZSk7CisJCQlpZiAoYkdwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQkJeworCQkJCXQxID0gKHZhbHVlJjB4ZikrKEdwd3JkZWx0YSk7CisJCQkJaWYgKHQxID4gMHhmKQorCQkJCQl0MSA9IDB4ZjsKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MiA+IDB4ZikKKwkJCQkJdDIgPSAweGY7CisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEdwd3JkZWx0YSk7CisJCQkJaWYgKHQzID4gMHhmKQorCQkJCQl0MyA9IDB4ZjsKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0NCA+IDB4ZikKKwkJCQkJdDQgPSAweGY7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKCh2YWx1ZSYweGYpID4gR3B3cmRlbHRhKQorCQkJCQl0MSA9ICh2YWx1ZSYweGYpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDEgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEdwd3JkZWx0YSkKKwkJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQyID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gR3B3cmRlbHRhKQorCQkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQzID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBHcHdyZGVsdGEpCisJCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0NCA9IDA7CisJCQl9CisJCQlHZGF0YSB8PSAoKHQxPDwxNikgKyAodDI8PDIwKSArICh0Mzw8MjQpICsgKHQ0PDwyOCkpOworCisJCQlpZiAoaSA9PSAwKQorCQkJCXBBZC0+VHg0ME1Qd3JDZmdHQmFuZFtpKzFdID0gKHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFtpKzFdICYgMHgwMDAwRkZGRikgfCAoR2RhdGEgJiAweEZGRkYwMDAwKTsKKwkJCWVsc2UKKwkJCQlwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaSsxXSA9IEdkYXRhOworCisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiNDBNSHogQlcsIDIuNEcgYmFuZCwgR2RhdGEgPSAlbHggXG4iLCBHZGF0YSkpOworCQl9CisJfQorCisJLy8KKwkvLyBDaGVjayB0aGlzIGJsb2NrIGlzIHZhbGlkIGZvciAyME1IeiBpbiA1Ry4gSWYgaW52YWxpZCwgdXNlIHBhcmFtZXRlciBmb3IgMjBNSHogaW4gMi40RworCS8vCisJYlZhbGlkID0gVFJVRTsKKwlmb3IgKGk9MDsgaTw4OyBpKyspCisJeworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RyArIDIgKyBpKjIsIHZhbHVlKTsKKwkJaWYgKCgodmFsdWUgJiAweDAwRkYpID09IDB4MDBGRikgfHwgKCh2YWx1ZSAmIDB4RkYwMCkgPT0gMHhGRjAwKSkKKwkJeworCQkJYlZhbGlkID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8vCisJLy8gR2V0IFR4cG93ZXIgcGVyIE1DUyBmb3IgMjBNSHogaW4gNUcuCisJLy8KKwlpZiAoYlZhbGlkKQorCXsKKwkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQl7CisJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RyArIGkqNCwgdmFsdWUpOworCQkJaWYgKGJBcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBBcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEFwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJQWRhdGEgPSB0MSArICh0Mjw8NCkgKyAodDM8PDgpICsgKHQ0PDwxMik7CisKKwkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzVHICsgaSo0ICsgMiwgdmFsdWUpOworCQkJaWYgKGJBcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBBcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEFwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJQWRhdGEgfD0gKCh0MTw8MTYpICsgKHQyPDwyMCkgKyAodDM8PDI0KSArICh0NDw8MjgpKTsKKworCQkJaWYgKGkgPT0gMCkKKwkJCQlwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gPSAocEFkLT5UeDIwTVB3ckNmZ0FCYW5kW2ldICYgMHgwMDAwRkZGRikgfCAoQWRhdGEgJiAweEZGRkYwMDAwKTsKKwkJCWVsc2UKKwkJCQlwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gPSBBZGF0YTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjIwTUh6IEJXLCA1R0h6IGJhbmQsIEFkYXRhID0gJWx4IFxuIiwgQWRhdGEpKTsKKwkJfQorCX0KKworCS8vCisJLy8gQ2hlY2sgdGhpcyBibG9jayBpcyB2YWxpZCBmb3IgNDBNSHogaW4gNUcuIElmIGludmFsaWQsIHVzZSBwYXJhbWV0ZXIgZm9yIDIwTUh6IGluIDIuNEcKKwkvLworCWJWYWxpZCA9IFRSVUU7CisJZm9yIChpPTA7IGk8NjsgaSsrKQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcgKyAyICsgaSoyLCB2YWx1ZSk7CisJCWlmICgoKHZhbHVlICYgMHgwMEZGKSA9PSAweDAwRkYpIHx8ICgodmFsdWUgJiAweEZGMDApID09IDB4RkYwMCkpCisJCXsKKwkJCWJWYWxpZCA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLworCS8vIEdldCBUeHBvd2VyIHBlciBNQ1MgZm9yIDQwTUh6IGluIDVHLgorCS8vCisJaWYgKGJWYWxpZCkKKwl7CisJCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJeworCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcgKyBpKjQsIHZhbHVlKTsKKwkJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUFkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCisJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl81RyArIGkqNCArIDIsIHZhbHVlKTsKKwkJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUFkYXRhIHw9ICgodDE8PDE2KSArICh0Mjw8MjApICsgKHQzPDwyNCkgKyAodDQ8PDI4KSk7CisKKwkJCWlmIChpID09IDApCisJCQkJcEFkLT5UeDQwTVB3ckNmZ0FCYW5kW2krMV0gPSAocEFkLT5UeDQwTVB3ckNmZ0FCYW5kW2krMV0gJiAweDAwMDBGRkZGKSB8IChBZGF0YSAmIDB4RkZGRjAwMDApOworCQkJZWxzZQorCQkJCXBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpKzFdID0gQWRhdGE7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCI0ME1IeiBCVywgNUdIeiBiYW5kLCBBZGF0YSA9ICVseCBcbiIsIEFkYXRhKSk7CisJCX0KKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlYWQgaW5pdGlhbCBjaGFubmVsIHBvd2VyIHBhcmFtZXRlcnMgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBSZWFkQ2hhbm5lbFB3cigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJCQlpLCBjaG9mZnNldDsKKwlFRVBST01fVFhfUFdSX1NUUlVDCSAgICBQb3dlcjsKKwlFRVBST01fVFhfUFdSX1NUUlVDCSAgICBQb3dlcjI7CisKKwkvLyBSZWFkIFR4IHBvd2VyIHZhbHVlIGZvciBhbGwgY2hhbm5lbHMKKwkvLyBWYWx1ZSBmcm9tIDEgLSAweDdmLiBEZWZhdWx0IHZhbHVlIGlzIDI0LgorCS8vIFBvd2VyIHZhbHVlIDogMi40RyAweDAwICgwKSB+IDB4MUYgKDMxKQorCS8vICAgICAgICAgICAgIDogNS41RyAweEY5ICgtNykgfiAweDBGICgxNSkKKworCS8vIDAuIDExYi9nLCBjaDEgLSBjaCAxNAorCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJeworLy8JCVBvd2VyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fR19UWF9QV1JfT0ZGU0VUICsgaSAqIDIpOworLy8JCVBvd2VyMi53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0dfVFgyX1BXUl9PRkZTRVQgKyBpICogMik7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0dfVFhfUFdSX09GRlNFVCArIGkgKiAyLCBQb3dlci53b3JkKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fR19UWDJfUFdSX09GRlNFVCArIGkgKiAyLCBQb3dlcjIud29yZCk7CisJCXBBZC0+VHhQb3dlcltpICogMl0uQ2hhbm5lbCA9IGkgKiAyICsgMTsKKwkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uQ2hhbm5lbCA9IGkgKiAyICsgMjsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwID4gMzEpIHx8IChQb3dlci5maWVsZC5CeXRlMCA8IDApKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCWVsc2UKKwkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMDsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUxID4gMzEpIHx8IChQb3dlci5maWVsZC5CeXRlMSA8IDApKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQllbHNlCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwID4gMzEpIHx8IChQb3dlcjIuZmllbGQuQnl0ZTAgPCAwKSkKKwkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJZWxzZQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPiAzMSkgfHwgKFBvd2VyMi5maWVsZC5CeXRlMSA8IDApKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJZWxzZQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUxOworCX0KKworCS8vIDEuIFUtTklJIGxvd2VyL21pZGRsZSBiYW5kOiAzNiwgMzgsIDQwOyA0NCwgNDYsIDQ4OyA1MiwgNTQsIDU2OyA2MCwgNjIsIDY0IChpbmNsdWRpbmcgY2VudHJhbCBmcmVxdWVuY3kgaW4gQlcgNDBNSHopCisJLy8gMS4xIEZpbGwgdXAgY2hhbm5lbAorCWNob2Zmc2V0ID0gMTQ7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwl7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uQ2hhbm5lbAk9IDM2ICsgaSAqIDggKyAwOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uQ2hhbm5lbAk9IDM2ICsgaSAqIDggKyAyOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uQ2hhbm5lbAk9IDM2ICsgaSAqIDggKyA0OworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCX0KKworCS8vIDEuMiBGaWxsIHVwIHBvd2VyCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwl7CisvLwkJUG93ZXIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyBpICogMik7CisvLwkJUG93ZXIyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIGkgKiAyKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgaSAqIDIsIFBvd2VyLndvcmQpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgaSAqIDIsIFBvd2VyMi53b3JkKTsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKKwl9CisKKwkvLyAyLiBIaXBwZXJMQU4gMiAxMDAsIDEwMiAsMTA0OyAxMDgsIDExMCwgMTEyOyAxMTYsIDExOCwgMTIwOyAxMjQsIDEyNiwgMTI4OyAxMzIsIDEzNCwgMTM2OyAxNDAgKGluY2x1ZGluZyBjZW50cmFsIGZyZXF1ZW5jeSBpbiBCVyA0ME1IeikKKwkvLyAyLjEgRmlsbCB1cCBjaGFubmVsCisJY2hvZmZzZXQgPSAxNCArIDEyOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJeworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwJPSAxMDAgKyBpICogOCArIDA7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyMgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5DaGFubmVsCT0gMTAwICsgaSAqIDggKyAyOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uQ2hhbm5lbAk9IDEwMCArIGkgKiA4ICsgNDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwl9CisJcEFkLT5UeFBvd2VyWzMgKiA1ICsgY2hvZmZzZXQgKyAwXS5DaGFubmVsCQk9IDE0MDsKKwlwQWQtPlR4UG93ZXJbMyAqIDUgKyBjaG9mZnNldCArIDBdLlBvd2VyCQk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJcEFkLT5UeFBvd2VyWzMgKiA1ICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIJCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCS8vIDIuMiBGaWxsIHVwIHBvd2VyCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwl7CisvLwkJUG93ZXIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMik7CisvLwkJUG93ZXIyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIsIFBvd2VyLndvcmQpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIsIFBvd2VyMi53b3JkKTsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKKwl9CisKKwkvLyAzLiBVLU5JSSB1cHBlciBiYW5kOiAxNDksIDE1MSwgMTUzOyAxNTcsIDE1OSwgMTYxOyAxNjUgKGluY2x1ZGluZyBjZW50cmFsIGZyZXF1ZW5jeSBpbiBCVyA0ME1IeikKKwkvLyAzLjEgRmlsbCB1cCBjaGFubmVsCisJY2hvZmZzZXQgPSAxNCArIDEyICsgMTY7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwl7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uQ2hhbm5lbAk9IDE0OSArIGkgKiA4ICsgMDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLkNoYW5uZWwJPSAxNDkgKyBpICogOCArIDI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uUG93ZXIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyMgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5DaGFubmVsCT0gMTQ5ICsgaSAqIDggKyA0OworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCX0KKwlwQWQtPlR4UG93ZXJbMyAqIDIgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwJCT0gMTY1OworCXBBZC0+VHhQb3dlclszICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIJCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwlwQWQtPlR4UG93ZXJbMyAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyMgkJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJLy8gMy4yIEZpbGwgdXAgcG93ZXIKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCXsKKy8vCQlQb3dlci53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyKTsKKy8vCQlQb3dlcjIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMiwgUG93ZXIud29yZCk7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMiwgUG93ZXIyLndvcmQpOworCisJCWlmICgoUG93ZXIuZmllbGQuQnl0ZTAgPCAxNikgJiYgKFBvd2VyLmZpZWxkLkJ5dGUwID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMDsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTE7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTAgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMDsKKworCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIyLmZpZWxkLkJ5dGUxID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMV0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUxOworCX0KKworCS8vIDQuIFByaW50IGFuZCBEZWJ1ZworCWNob2Zmc2V0ID0gMTQgKyAxMiArIDE2ICsgNzsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCB0aGUgZm9sbG93aW5nIGZyb20gdGhlIHJlZ2lzdHJ5CisJCTEuIEFsbCB0aGUgcGFyYW1ldGVycworCQkyLiBOZXR3b3JrQWRkcmVzCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCVdyYXBwZXJDb25maWd1cmF0aW9uQ29udGV4dAlGb3IgdXNlIGJ5IE5kaXNPcGVuQ29uZmlndXJhdGlvbgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwkJTkRJU19TVEFUVVNfUkVTT1VSQ0VTCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ1JlYWRSZWdQYXJhbWV0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglORElTX0hBTkRMRQkJCVdyYXBwZXJDb25maWd1cmF0aW9uQ29udGV4dAorCSkKK3sKKwlORElTX1NUQVRVUwkJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJREJHUFJJTlRfUyhTdGF0dXMsICgiPC0tIE5JQ1JlYWRSZWdQYXJhbWV0ZXJzLCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCXJldHVybiBTdGF0dXM7Cit9CisKKworI2lmZGVmIFJUMzB4eAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUZvciBSRiBmaWx0ZXIgY2FsaWJyYXRpb24gcHVycG9zZQorCisJQXJndW1lbnRzOgorCQlwQWQgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUEZpbHRlckNhbGlicmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCVI1NXggPSAwLCB2YWx1ZSwgRmlsdGVyVGFyZ2V0ID0gMHgxRSwgQkJQVmFsdWU9MDsKKwlVSU5UCWxvb3AgPSAwLCBjb3VudCA9IDAsIGxvb3BjbnQgPSAwLCBSZVRyeSA9IDA7CisJVUNIQVIJUkZfUjI0X1ZhbHVlID0gMDsKKworCS8vIEdpdmUgYmJwIGZpbHRlciBpbml0aWFsIHZhbHVlCisJcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQgPSAweDFGOworCXBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0ID0gMHgyRjsgLy9CaXRbNV0gbXVzdCBiZSAxIGZvciBCVyA0MAorCisJZG8KKwl7CisJCWlmIChsb29wID09IDEpCS8vQmFuZFdpZHRoID0gNDAgTUh6CisJCXsKKwkJCS8vIFdyaXRlIDB4MjcgdG8gUkZfUjI0IHRvIHByb2dyYW0gZmlsdGVyCisJCQlSRl9SMjRfVmFsdWUgPSAweDI3OworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOworCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJCUZpbHRlclRhcmdldCA9IDB4MTU7CisJCQllbHNlCisJCQkJRmlsdGVyVGFyZ2V0ID0gMHgxOTsKKworCQkJLy8gd2hlbiBjYWxpYnJhdGUgQlc0MCwgQkJQIG1hc2sgbXVzdCBzZXQgdG8gQlc0MC4KKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlfD0gKDB4MTApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCisJCQkvLyBzZXQgdG8gQlc0MAorCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsICZ2YWx1ZSk7CisJCQl2YWx1ZSB8PSAweDIwOworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCB2YWx1ZSk7CisJCX0KKwkJZWxzZQkJCS8vQmFuZFdpZHRoID0gMjAgTUh6CisJCXsKKwkJCS8vIFdyaXRlIDB4MDcgdG8gUkZfUjI0IHRvIHByb2dyYW0gZmlsdGVyCisJCQlSRl9SMjRfVmFsdWUgPSAweDA3OworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOworCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJCUZpbHRlclRhcmdldCA9IDB4MTM7CisJCQllbHNlCisJCQkJRmlsdGVyVGFyZ2V0ID0gMHgxNjsKKworCQkJLy8gc2V0IHRvIEJXMjAKKwkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCAmdmFsdWUpOworCQkJdmFsdWUgJj0gKH4weDIwKTsKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgdmFsdWUpOworCQl9CisKKwkJLy8gV3JpdGUgMHgwMSB0byBSRl9SMjIgdG8gZW5hYmxlIGJhc2ViYW5kIGxvb3BiYWNrIG1vZGUKKwkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsICZ2YWx1ZSk7CisJCXZhbHVlIHw9IDB4MDE7CisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMiwgdmFsdWUpOworCisJCS8vIFdyaXRlIDB4MDAgdG8gQkJQX1IyNCB0byBzZXQgcG93ZXIgJiBmcmVxdWVuY3kgb2YgcGFzc2JhbmQgdGVzdCB0b25lCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCAwKTsKKworCQlkbworCQl7CisJCQkvLyBXcml0ZSAweDkwIHRvIEJCUF9SMjUgdG8gdHJhbnNtaXQgdGVzdCB0b25lCisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNSwgMHg5MCk7CisKKwkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCQkvLyBSZWFkIEJCUF9SNTVbNjowXSBmb3IgcmVjZWl2ZWQgcG93ZXIsIHNldCBSNTV4ID0gQkJQX1I1NVs2OjBdCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjU1LCAmdmFsdWUpOworCQkJUjU1eCA9IHZhbHVlICYgMHhGRjsKKworCQl9IHdoaWxlICgoUmVUcnkrKyA8IDEwMCkgJiYgKFI1NXggPT0gMCkpOworCisJCS8vIFdyaXRlIDB4MDYgdG8gQkJQX1IyNCB0byBzZXQgcG93ZXIgJiBmcmVxdWVuY3kgb2Ygc3RvcGJhbmQgdGVzdCB0b25lCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCAweDA2KTsKKworCQl3aGlsZShUUlVFKQorCQl7CisJCQkvLyBXcml0ZSAweDkwIHRvIEJCUF9SMjUgdG8gdHJhbnNtaXQgdGVzdCB0b25lCisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNSwgMHg5MCk7CisKKwkJCS8vV2UgbmVlZCB0byB3YWl0IGZvciBjYWxpYnJhdGlvbgorCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNTUsICZ2YWx1ZSk7CisJCQl2YWx1ZSAmPSAweEZGOworCQkJaWYgKChSNTV4IC0gdmFsdWUpIDwgRmlsdGVyVGFyZ2V0KQorCQkJeworCQkJCVJGX1IyNF9WYWx1ZSArKzsKKwkJCX0KKwkJCWVsc2UgaWYgKChSNTV4IC0gdmFsdWUpID09IEZpbHRlclRhcmdldCkKKwkJCXsKKwkJCQlSRl9SMjRfVmFsdWUgKys7CisJCQkJY291bnQgKys7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBjYXVzZSBkcml2ZXIgaGFuZy4KKwkJCWlmIChsb29wY250KysgPiAxMDApCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRNUEZpbHRlckNhbGlicmF0aW9uIC0gY2FuJ3QgZmluZCBhIHZhbGlkIHZhbHVlLCBsb29wY250PSVkIHN0b3AgY2FsaWJyYXRpbmciLCBsb29wY250KSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIFdyaXRlIFJGX1IyNCB0byBwcm9ncmFtIGZpbHRlcgorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOworCQl9CisKKwkJaWYgKGNvdW50ID4gMCkKKwkJeworCQkJUkZfUjI0X1ZhbHVlID0gUkZfUjI0X1ZhbHVlIC0gKChjb3VudCkgPyAoMSkgOiAoMCkpOworCQl9CisKKwkJLy8gU3RvcmUgZm9yIGZ1dHVyZSB1c2FnZQorCQlpZiAobG9vcGNudCA8IDEwMCkKKwkJeworCQkJaWYgKGxvb3ArKyA9PSAwKQorCQkJeworCQkJCS8vQmFuZFdpZHRoID0gMjAgTUh6CisJCQkJcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQgPSAoVUNIQVIpUkZfUjI0X1ZhbHVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vQmFuZFdpZHRoID0gNDAgTUh6CisJCQkJcEFkLT5NbG1lLkNhbGlCVzQwUmZSMjQgPSAoVUNIQVIpUkZfUjI0X1ZhbHVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWJyZWFrOworCisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZfUjI0X1ZhbHVlKTsKKworCQkvLyByZXNldCBjb3VudAorCQljb3VudCA9IDA7CisJfSB3aGlsZShUUlVFKTsKKworCS8vCisJLy8gU2V0IGJhY2sgdG8gaW5pdGlhbCBzdGF0ZQorCS8vCisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsIDApOworCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsICZ2YWx1ZSk7CisJdmFsdWUgJj0gfigweDAxKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsIHZhbHVlKTsKKworCS8vIHNldCBCQlAgYmFjayB0byBCVzIwCisJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCUJCUFZhbHVlJj0gKH4weDE4KTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QRmlsdGVyQ2FsaWJyYXRpb24gLSBDYWxpQlcyMFJmUjI0PTB4JXgsIENhbGlCVzQwUmZSMjQ9MHgleFxuIiwgcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQsIHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0KSk7Cit9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKworI2lmZGVmIFJUMzA3MAorVk9JRCBOSUNJbml0UlQzMHh4UkZSZWdpc3RlcnMoSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSU5UIGk7CisJLy8gRHJpdmVyIG11c3QgcmVhZCBFRVBST00gdG8gZ2V0IFJmSWNUeXBlIGJlZm9yZSBpbml0aWFsIFJGIHJlZ2lzdGVycworCS8vIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCWlmIChJU19SVDMwNzAocEFkKSB8fCBJU19SVDMwNzEocEFkKSkKKwl7CisJCS8vIEluaXQgUkYgY2FsaWJyYXRpb24KKwkJLy8gRHJpdmVyIHNob3VsZCB0b2dnbGUgUkYgUjMwIGJpdDcgYmVmb3JlIGluaXQgUkYgcmVnaXN0ZXJzCisJCVVJTlQzMiBSZlJlZyA9IDA7CisJCVVJTlQzMiBkYXRhOworCisJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjMwLCAoUFVDSEFSKSZSZlJlZyk7CisJCVJmUmVnIHw9IDB4ODA7CisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMCwgKFVDSEFSKVJmUmVnKTsKKwkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwkJUmZSZWcgJj0gMHg3RjsKKwkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMwLCAoVUNIQVIpUmZSZWcpOworCisJCS8vIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JGX1JFR19QQVJNUzsgaSsrKQorCQl7CisJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSVDMweHhfUkZSZWdUYWJsZVtpXS5SZWdpc3RlciwgUlQzMHh4X1JGUmVnVGFibGVbaV0uVmFsdWUpOworCQl9CisKKwkJLy8gYWRkIGJ5IGpvaG5saQorCQlpZiAoSVNfUlQzMDcwKHBBZCkpCisJCXsKKwkJCS8vICBVcGRhdGUgTUFDIDB4MDVENCBmcm9tIDAxeHh4eHh4IHRvIDBEeHh4eHh4ICh2b2x0YWdlIDEuMlYgdG8gMS4zNVYpIGZvciBSVDMwNzAgdG8gaW1wcm92ZSB5aWVsZCByYXRlCisJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCAmZGF0YSk7CisJCQlkYXRhID0gKChkYXRhICYgMHhGMEZGRkZGRikgfCAweDBEMDAwMDAwKTsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCBkYXRhKTsKKwkJfQorCQllbHNlIGlmIChJU19SVDMwNzEocEFkKSkKKwkJeworCQkJLy8gRHJpdmVyIHNob3VsZCBzZXQgUkYgUjYgYml0NiBvbiBiZWZvcmUgaW5pdCBSRiByZWdpc3RlcnMKKwkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAoUFVDSEFSKSZSZlJlZyk7CisJCQlSZlJlZyB8PSAweDQwOworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAoVUNIQVIpUmZSZWcpOworCisJCQkvLyBpbml0IFIzMQorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCAweDE0KTsKKworCQkJLy8gUlQzMDcxIHZlcnNpb24gRSBoYXMgZml4ZWQgdGhpcyBpc3N1ZQorCQkJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKSAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpKQorCQkJeworCQkJCS8vIHBhdGNoIHR4IEVWTSBpc3N1ZSB0ZW1wb3JhcmlseQorCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgTERPX0NGRzAsICZkYXRhKTsKKwkJCQlkYXRhID0gKChkYXRhICYgMHhFMEZGRkZGRikgfCAweDBEMDAwMDAwKTsKKwkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBMRE9fQ0ZHMCwgZGF0YSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUF9JT19SRUFEMzIocEFkLCBMRE9fQ0ZHMCwgJmRhdGEpOworCQkJCWRhdGEgPSAoKGRhdGEgJiAweEUwRkZGRkZGKSB8IDB4MDEwMDAwMDApOworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBkYXRhKTsKKwkJCX0KKworCQkJLy8gcGF0Y2ggTE5BX1BFX0cxIGZhaWxlZCBpc3N1ZQorCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBHUElPX1NXSVRDSCwgJmRhdGEpOworCQkJZGF0YSAmPSB+KDB4MjApOworCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgR1BJT19TV0lUQ0gsIGRhdGEpOworCQl9CisKKwkJLy9Gb3IgUkYgZmlsdGVyIENhbGlicmF0aW9uCisJCVJUTVBGaWx0ZXJDYWxpYnJhdGlvbihwQWQpOworCisJCS8vIEluaXRpYWxpemUgUkYgUjI3IHJlZ2lzdGVyLCBzZXQgUkYgUjI3IG11c3QgYmUgYmVoaW5kIFJUTVBGaWx0ZXJDYWxpYnJhdGlvbigpCisJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgMHgzKTsKKworCQkvLyBzZXQgbGVkIG9wZW4gZHJhaW4gZW5hYmxlCisJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgT1BUXzE0LCAmZGF0YSk7CisJCWRhdGEgfD0gMHgwMTsKKwkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgT1BUXzE0LCBkYXRhKTsKKworCQlpZiAoSVNfUlQzMDcxKHBBZCkpCisJCXsKKwkJCS8vIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBsb2FkIFJGIG5vcm1hbCBvcGVyYXRpb24tbW9kZSBzZXR1cAorCQkJUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKHBBZCk7CisJCX0KKwl9CisKK30KKyNlbmRpZiAvLyBSVDMwNzAgLy8KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCBpbml0aWFsIHBhcmFtZXRlcnMgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCW1hY19hZGRyKQoreworCVVJTlQzMgkJCWRhdGEgPSAwOworCVVTSE9SVAkJCWksIHZhbHVlLCB2YWx1ZTI7CisJVUNIQVIJCQlUbXBQaHk7CisJRUVQUk9NX1RYX1BXUl9TVFJVQwkgICAgUG93ZXI7CisJRUVQUk9NX1ZFUlNJT05fU1RSVUMgICAgVmVyc2lvbjsKKwlFRVBST01fQU5URU5OQV9TVFJVQwlBbnRlbm5hOworCUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQyAgICBOaWNDb25maWcyOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzXG4iKSk7CisKKwkvLyBJbml0IEVFUFJPTSBBZGRyZXNzIE51bWJlciwgYmVmb3JlIGFjY2VzcyBFRVBST007IGlmIDkzYzQ2LCBFRVBST01BZGRyZXNzTnVtPTYsIGVsc2UgaWYgOTNjNjYsIEVFUFJPTUFkZHJlc3NOdW09OAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJmRhdGEpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBFMlBST01fQ1NSID0gMHgleFxuIiwgZGF0YSkpOworCisJaWYoKGRhdGEgJiAweDMwKSA9PSAwKQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA2OwkJLy8gOTNDNDYKKwllbHNlIGlmKChkYXRhICYgMHgzMCkgPT0gMHgxMCkKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gODsgICAgIC8vIDkzQzY2CisJZWxzZQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA4OyAgICAgLy8gOTNDODYKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gRUVQUk9NQWRkcmVzc051bSA9ICVkXG4iLCBwQWQtPkVFUFJPTUFkZHJlc3NOdW0gKSk7CisKKwkvLyBSVDI4NjAgTUFDIG5vIGxvbmdlciBhdXRvIGxvYWQgTUFDIGFkZHJlc3MgZnJvbSBFMlBST00uIERyaXZlciBoYXMgdG8gaW50aWFsaXplCisJLy8gTUFDIGFkZHJlc3MgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBFMlBST00gc2V0dGluZworCWlmIChtYWNfYWRkciA9PSBOVUxMIHx8CisJCXN0cmxlbihtYWNfYWRkcikgIT0gMTcgfHwKKwkJbWFjX2FkZHJbMl0gIT0gJzonICB8fCBtYWNfYWRkcls1XSAhPSAnOicgIHx8IG1hY19hZGRyWzhdICE9ICc6JyB8fAorCQltYWNfYWRkclsxMV0gIT0gJzonIHx8IG1hY19hZGRyWzE0XSAhPSAnOicpCisJeworCQlVU0hPUlQgIEFkZHIwMSxBZGRyMjMsQWRkcjQ1IDsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDQsIEFkZHIwMSk7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNiwgQWRkcjIzKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA4LCBBZGRyNDUpOworCisJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSA9IChVQ0hBUikoQWRkcjAxICYgMHhmZik7CisJCXBBZC0+UGVybWFuZW50QWRkcmVzc1sxXSA9IChVQ0hBUikoQWRkcjAxID4+IDgpOworCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMl0gPSAoVUNIQVIpKEFkZHIyMyAmIDB4ZmYpOworCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbM10gPSAoVUNIQVIpKEFkZHIyMyA+PiA4KTsKKwkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzRdID0gKFVDSEFSKShBZGRyNDUgJiAweGZmKTsKKwkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdID0gKFVDSEFSKShBZGRyNDUgPj4gOCk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSW5pdGlhbGl6ZSBNQUMgQWRkcmVzcyBmcm9tIEUyUFJPTSBcbiIpKTsKKwl9CisJZWxzZQorCXsKKwkJSU5UCQlqOworCQlQVUNIQVIJbWFjcHRyOworCisJCW1hY3B0ciA9IG1hY19hZGRyOworCisJCWZvciAoaj0wOyBqPE1BQ19BRERSX0xFTjsgaisrKQorCQl7CisJCQlBdG9IKG1hY3B0ciwgJnBBZC0+UGVybWFuZW50QWRkcmVzc1tqXSwgMSk7CisJCQltYWNwdHI9bWFjcHRyKzM7CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbml0aWFsaXplIE1BQyBBZGRyZXNzIGZyb20gbW9kdWxlIHBhcmFtZXRlciBcbiIpKTsKKwl9CisKKworCXsKKwkJLy9tb3JlIGNvbnZlbmluZXQgdG8gdGVzdCBtYnNzaWQsIHNvIGFwJ3MgYnNzaWQgJjB4ZjEKKwkJaWYgKHBBZC0+UGVybWFuZW50QWRkcmVzc1swXSA9PSAweGZmKQorCQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzBdID0gUmFuZG9tQnl0ZShwQWQpJjB4Zjg7CisKKwkJLy9pZiAocEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdID09IDB4ZmYpCisJCS8vCXBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSA9IFJhbmRvbUJ5dGUocEFkKSYweGY4OworCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkUyUFJPTSBNQUM6ID0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzFdLAorCQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzJdLCBwQWQtPlBlcm1hbmVudEFkZHJlc3NbM10sCisJCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbNF0sIHBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSkpOworCQlpZiAocEFkLT5iTG9jYWxBZG1pbk1BQyA9PSBGQUxTRSkKKwkJeworCQkJTUFDX0RXMF9TVFJVQyBjc3IyOworCQkJTUFDX0RXMV9TVFJVQyBjc3IzOworCQkJQ09QWV9NQUNfQUREUihwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPlBlcm1hbmVudEFkZHJlc3MpOworCQkJY3NyMi5maWVsZC5CeXRlMCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMF07CisJCQljc3IyLmZpZWxkLkJ5dGUxID0gcEFkLT5DdXJyZW50QWRkcmVzc1sxXTsKKwkJCWNzcjIuZmllbGQuQnl0ZTIgPSBwQWQtPkN1cnJlbnRBZGRyZXNzWzJdOworCQkJY3NyMi5maWVsZC5CeXRlMyA9IHBBZC0+Q3VycmVudEFkZHJlc3NbM107CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQUREUl9EVzAsIGNzcjIud29yZCk7CisJCQljc3IzLndvcmQgPSAwOworCQkJY3NyMy5maWVsZC5CeXRlNCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbNF07CisJCQljc3IzLmZpZWxkLkJ5dGU1ID0gcEFkLT5DdXJyZW50QWRkcmVzc1s1XTsKKwkJCWNzcjMuZmllbGQuVTJNZU1hc2sgPSAweGZmOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0FERFJfRFcxLCBjc3IzLndvcmQpOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiRTJQUk9NIE1BQzogPSUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzFdLAorCQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1syXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzNdLAorCQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1s0XSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdKSk7CisJCX0KKwl9CisKKwkvLyBpZiBub3QgcmV0dXJuIGVhcmx5LiBjYXVzZSBmYWlsIGF0IGVtdWxhdGlvbi4KKwkvLyBJbml0IHRoZSBjaGFubmVsIG51bWJlciBmb3IgVFggY2hhbm5lbCBwb3dlcgorCVJUTVBSZWFkQ2hhbm5lbFB3cihwQWQpOworCisJLy8gaWYgRTJQUk9NIHZlcnNpb24gbWlzbWF0Y2ggd2l0aCBkcml2ZXIncyBleHBlY3RhdGlvbiwgdGhlbiBza2lwCisJLy8gYWxsIHN1YnNlcXVlbnQgRTJSUE9NIHJldGlldmFsIGFuZCBzZXQgYSBzeXN0ZW0gZXJyb3IgYml0IHRvIG5vdGlmeSBHVUkKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9WRVJTSU9OX09GRlNFVCwgVmVyc2lvbi53b3JkKTsKKwlwQWQtPkVlcHJvbVZlcnNpb24gPSBWZXJzaW9uLmZpZWxkLlZlcnNpb24gKyBWZXJzaW9uLmZpZWxkLkZhZVJlbGVhc2VOdW1iZXIgKiAyNTY7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRTJQUk9NOiBWZXJzaW9uID0gJWQsIEZBRSByZWxlYXNlICMlZFxuIiwgVmVyc2lvbi5maWVsZC5WZXJzaW9uLCBWZXJzaW9uLmZpZWxkLkZhZVJlbGVhc2VOdW1iZXIpKTsKKworCWlmIChWZXJzaW9uLmZpZWxkLlZlcnNpb24gPiBWQUxJRF9FRVBST01fVkVSU0lPTikKKwl7CisJCURCR1BSSU5UX0VSUigoIkUyUFJPTTogV1JPTkcgVkVSU0lPTiAweCV4LCBzaG91bGQgYmUgJWRcbiIsVmVyc2lvbi5maWVsZC5WZXJzaW9uLCBWQUxJRF9FRVBST01fVkVSU0lPTikpOworCQkvKnBBZC0+U3lzdGVtRXJyb3JCaXRtYXAgfD0gMHgwMDAwMDAwMTsKKworCQkvLyBoYXJkLWNvZGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3BlciBFMlBST00gaW5zdGFsbGVkCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsKKwkJcEFkLT5iQXV0b1R4QWdjRyA9IEZBTFNFOworCisJCS8vIERlZmF1bHQgdGhlIGNoYW5uZWwgcG93ZXIKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfQ0hBTk5FTFM7IGkrKykKKwkJCXBBZC0+VHhQb3dlcltpXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJLy8gRGVmYXVsdCB0aGUgY2hhbm5lbCBwb3dlcgorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl8xMUpDSEFOTkVMUzsgaSsrKQorCQkJcEFkLT5UeFBvd2VyMTFKW2ldLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlmb3IoaSA9IDA7IGkgPCBOVU1fRUVQUk9NX0JCUF9QQVJNUzsgaSsrKQorCQkJcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gPSAweGZmZmY7CisJCXJldHVybjsgICovCisJfQorCisJLy8gUmVhZCBCQlAgZGVmYXVsdCB2YWx1ZSBmcm9tIEVFUFJPTSBhbmQgc3RvcmUgdG8gYXJyYXkoRUVQUk9NRGVmYXVsdFZhbHVlKSBpbiBwQWQKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMxX09GRlNFVCwgdmFsdWUpOworCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzBdID0gdmFsdWU7CisKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMyX09GRlNFVCwgdmFsdWUpOworCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzFdID0gdmFsdWU7CisKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MzgsIHZhbHVlKTsJLy8gQ291bnRyeSBSZWdpb24KKwlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVsyXSA9IHZhbHVlOworCisJZm9yKGkgPSAwOyBpIDwgODsgaSsrKQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQkJQX0JBU0VfT0ZGU0VUICsgaSoyLCB2YWx1ZSk7CisJCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2krM10gPSB2YWx1ZTsKKwl9CisKKwkvLyBXZSBoYXZlIHRvIHBhcnNlIE5JQyBjb25maWd1cmF0aW9uIDAgYXQgaGVyZS4KKwkvLyBJZiBUU1NJIGRpZCBub3QgaGF2ZSBwcmVsb2FkZWQgdmFsdWUsIGl0IHNob3VsZCByZXNldCB0aGUgVHhBdXRvQWdjIHRvIGZhbHNlCisJLy8gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHJlYWQgVHhBdXRvQWdjIGNvbnRyb2wgYmVmb3JlaGFuZC4KKwkvLyBSZWFkIFR4IEFHQyBjb250cm9sIGJpdAorCUFudGVubmEud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzBdOworCWlmIChBbnRlbm5hLndvcmQgPT0gMHhGRkZGKQorCXsKKyNpZmRlZiBSVDMweHgKKwkJaWYoSVNfUlQzMDkwKHBBZCkpCisJCXsKKwkJCUFudGVubmEud29yZCA9IDA7CisJCQlBbnRlbm5hLmZpZWxkLlJmSWNUeXBlID0gUkZJQ18zMDIwOworCQkJQW50ZW5uYS5maWVsZC5UeFBhdGggPSAxOworCQkJQW50ZW5uYS5maWVsZC5SeFBhdGggPSAxOworCQl9CisJCWVsc2UKKwkJeworI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJQW50ZW5uYS53b3JkID0gMDsKKwkJCUFudGVubmEuZmllbGQuUmZJY1R5cGUgPSBSRklDXzI4MjA7CisJCQlBbnRlbm5hLmZpZWxkLlR4UGF0aCA9IDE7CisJCQlBbnRlbm5hLmZpZWxkLlJ4UGF0aCA9IDI7CisJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIkUyUFJPTSBlcnJvciwgaGFyZCBjb2RlIGFzIDB4JTA0eFxuIiwgQW50ZW5uYS53b3JkKSk7CisjaWZkZWYgUlQzMHh4CisJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKwl9CisKKwkvLyBDaG9vc2UgdGhlIGRlc2lyZWQgVHgmUnggc3RyZWFtLgorCWlmICgocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID4gQW50ZW5uYS5maWVsZC5UeFBhdGgpKQorCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IEFudGVubmEuZmllbGQuVHhQYXRoOworCisJaWYgKChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9PSAwKSB8fCAocEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPiBBbnRlbm5hLmZpZWxkLlJ4UGF0aCkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IEFudGVubmEuZmllbGQuUnhQYXRoOworCisJCWlmICgocEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzI4ODNfVkVSU0lPTikgJiYKKwkJCShwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA+IDIpKQorCQl7CisJCQkvLyBvbmx5IDIgUnggc3RyZWFtcyBmb3IgUlQyODYwIHNlcmllcworCQkJcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSAyOworCQl9CisJfQorCisJLy8gMyozCisJLy8gcmVhZCB2YWx1ZSBmcm9tIEVFUFJPTSBhbmQgc2V0IHRoZW0gdG8gQ1NSMTc0IH4gMTc3IGluIGNoYWluMCB+IGNoYWluMgorCS8vIHlldCBpbXBsZW1lbnQKKwlmb3IoaT0wOyBpPDM7IGkrKykKKwl7CisJfQorCisJTmljQ29uZmlnMi53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMV07CisKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmICgoTmljQ29uZmlnMi53b3JkICYgMHgwMGZmKSA9PSAweGZmKQorCQl7CisJCQlOaWNDb25maWcyLndvcmQgJj0gMHhmZjAwOworCQl9CisKKwkJaWYgKChOaWNDb25maWcyLndvcmQgPj4gOCkgPT0gMHhmZikKKwkJeworCQkJTmljQ29uZmlnMi53b3JkICY9IDB4MDBmZjsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChOaWNDb25maWcyLmZpZWxkLkR5bmFtaWNUeEFnY0NvbnRyb2wgPT0gMSkKKwkJcEFkLT5iQXV0b1R4QWdjQSA9IHBBZC0+YkF1dG9UeEFnY0cgPSBUUlVFOworCWVsc2UKKwkJcEFkLT5iQXV0b1R4QWdjQSA9IHBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsKKworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJOSUNSZWFkRUVQUk9NUGFyYW1ldGVyczogUnhQYXRoID0gJWQsIFR4UGF0aCA9ICVkXG4iLCBBbnRlbm5hLmZpZWxkLlJ4UGF0aCwgQW50ZW5uYS5maWVsZC5UeFBhdGgpKTsKKworCS8vIFNhdmUgdGhlIGFudGVubmEgZm9yIGZ1dHVyZSB1c2UKKwlwQWQtPkFudGVubmEud29yZCA9IEFudGVubmEud29yZDsKKworCS8vCisJLy8gUmVzZXQgUGh5TW9kZSBpZiB3ZSBkb24ndCBzdXBwb3J0IDgwMi4xMWEKKwkvLyBPbmx5IFJGSUNfMjg1MCAmIFJGSUNfMjc1MCBzdXBwb3J0IDgwMi4xMWEKKwkvLworCWlmICgoQW50ZW5uYS5maWVsZC5SZkljVHlwZSAhPSBSRklDXzI4NTApICYmIChBbnRlbm5hLmZpZWxkLlJmSWNUeXBlICE9IFJGSUNfMjc1MCkpCisJeworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKSB8fAorCQkJKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQSkpCisJCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gUEhZXzExQkdfTUlYRUQ7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpCXx8CisJCQkJIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKSAJfHwKKwkJCQkgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUdOX01JWEVEKSAJfHwKKwkJCQkgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpCisJCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gUEhZXzExQkdOX01JWEVEOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCX0KKworCS8vIFJlYWQgVFNTSSByZWZlcmVuY2UgYW5kIFRTU0kgYm91bmRhcnkgZm9yIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbi4gVGhpcyBpcyB1Z2x5CisJLy8gMC4gMTFiL2cKKwl7CisJCS8qIHRoZXNlIGFyZSB0ZW1wYXR1cmUgcmVmZXJlbmNlIHZhbHVlICgweDAwIH4gMHhGRSkKKwkJICAgZXg6IDB4MDAgMHgxNSAweDI1IDB4NDUgMHg4OCAweEEwIDB4QjUgMHhEMCAweEYwCisJCSAgIFRzc2lQbHVzQm91bmRhcnlHIFs0XSBbM10gWzJdIFsxXSBbMF0gKHNtYWxsZXIpICsKKwkJICAgVHNzaU1pbnVzQm91bmRhcnlHWzBdIFsxXSBbMl0gWzNdIFs0XSAobGFyZ2VyKSAqLworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NkUsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1s0XSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1szXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzAsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1syXSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1sxXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzIsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lSZWZHICAgPSBQb3dlci5maWVsZC5CeXRlMDsgLyogcmVmZXJlbmNlIHZhbHVlIFswXSAqLworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzFdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHg3NCwgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1szXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzYsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzRdID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHhBZ2NTdGVwRyA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlwQWQtPlR4QWdjQ29tcGVuc2F0ZUcgPSAwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1swXSA9IHBBZC0+VHNzaVJlZkc7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMF0gID0gcEFkLT5Uc3NpUmVmRzsKKworCQkvLyBEaXNhYmxlIFR4QWdjIGlmIHRoZSBiYXNlZCB2YWx1ZSBpcyBub3QgcmlnaHQKKwkJaWYgKHBBZC0+VHNzaVJlZkcgPT0gMHhmZikKKwkJCXBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkUyUFJPTTogRyBUc3NpWy00IC4uICs0XSA9ICVkICVkICVkICVkIC0gJWQgLSVkICVkICVkICVkLCBzdGVwPSVkLCB0dW5pbmc9JWRcbiIsCisJCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1s0XSwgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbM10sIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzJdLCBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1sxXSwKKwkJCXBBZC0+VHNzaVJlZkcsCisJCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzFdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzJdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzNdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzRdLAorCQkJcEFkLT5UeEFnY1N0ZXBHLCBwQWQtPmJBdXRvVHhBZ2NHKSk7CisJfQorCS8vIDEuIDExYQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ0LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbM10gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ2LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ4LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpUmVmQSAgID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweERBLCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVsyXSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzNdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhEQywgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5UeEFnY1N0ZXBBID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCXBBZC0+VHhBZ2NDb21wZW5zYXRlQSA9IDA7CisJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzBdID0gcEFkLT5Uc3NpUmVmQTsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVswXSAgPSBwQWQtPlRzc2lSZWZBOworCisJCS8vIERpc2FibGUgVHhBZ2MgaWYgdGhlIGJhc2VkIHZhbHVlIGlzIG5vdCByaWdodAorCQlpZiAocEFkLT5Uc3NpUmVmQSA9PSAweGZmKQorCQkJcEFkLT5iQXV0b1R4QWdjQSA9IEZBTFNFOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRTJQUk9NOiBBIFRzc2lbLTQgLi4gKzRdID0gJWQgJWQgJWQgJWQgLSAlZCAtJWQgJWQgJWQgJWQsIHN0ZXA9JWQsIHR1bmluZz0lZFxuIiwKKwkJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzRdLCBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVszXSwgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMl0sIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzFdLAorCQkJcEFkLT5Uc3NpUmVmQSwKKwkJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMV0sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMl0sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbM10sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbNF0sCisJCQlwQWQtPlR4QWdjU3RlcEEsIHBBZC0+YkF1dG9UeEFnY0EpKTsKKwl9CisJcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSA9IDB4MDsKKworCS8vIFJlYWQgZnJlcXVlbmN5IG9mZnNldCBzZXR0aW5nIGZvciBSRgorCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0ZSRVFfT0ZGU0VULCB2YWx1ZSk7CisJaWYgKCh2YWx1ZSAmIDB4MDBGRikgIT0gMHgwMEZGKQorCQlwQWQtPlJmRnJlcU9mZnNldCA9IChVTE9ORykgKHZhbHVlICYgMHgwMEZGKTsKKwllbHNlCisJCXBBZC0+UmZGcmVxT2Zmc2V0ID0gMDsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJFMlBST006IFJGIEZyZXFPZmZzZXQ9MHglbHggXG4iLCBwQWQtPlJmRnJlcU9mZnNldCkpOworCisJLy9Db3VudHJ5UmVnaW9uIGJ5dGUgb2Zmc2V0ICgzOGgpCisJdmFsdWUgPSBwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVsyXSA+PiA4OwkJLy8gMi40RyBiYW5kCisJdmFsdWUyID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gJiAweDAwRkY7CS8vIDVHIGJhbmQKKworCWlmICgodmFsdWUgPD0gUkVHSU9OX01BWElNVU1fQkdfQkFORCkgJiYgKHZhbHVlMiA8PSBSRUdJT05fTUFYSU1VTV9BX0JBTkQpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiA9ICgoVUNIQVIpIHZhbHVlKSB8IDB4ODA7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9ICgoVUNIQVIpIHZhbHVlMikgfCAweDgwOworCQlUbXBQaHkgPSBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlOworCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsKKwkJUlRNUFNldFBoeU1vZGUocEFkLCBUbXBQaHkpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCX0KKworCS8vCisJLy8gR2V0IFJTU0kgT2Zmc2V0IG9uIEVFUFJPTSAweDlBaCAmIDB4OUNoLgorCS8vIFRoZSB2YWxpZCB2YWx1ZSBhcmUgKC0xMCB+IDEwKQorCS8vCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkJHUnNzaU9mZnNldDAgPSB2YWx1ZSAmIDB4MDBmZjsKKwlwQWQtPkJHUnNzaU9mZnNldDEgPSAodmFsdWUgPj4gOCk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQrMiwgdmFsdWUpOworCXBBZC0+QkdSc3NpT2Zmc2V0MiA9IHZhbHVlICYgMHgwMGZmOworCXBBZC0+QUxOQUdhaW4xID0gKHZhbHVlID4+IDgpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0xOQV9PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkJMTkFHYWluID0gdmFsdWUgJiAweDAwZmY7CisJcEFkLT5BTE5BR2FpbjAgPSAodmFsdWUgPj4gOCk7CisKKwkvLyBWYWxpZGF0ZSAxMWIvZyBSU1NJXzAgb2Zmc2V0LgorCWlmICgocEFkLT5CR1Jzc2lPZmZzZXQwIDwgLTEwKSB8fCAocEFkLT5CR1Jzc2lPZmZzZXQwID4gMTApKQorCQlwQWQtPkJHUnNzaU9mZnNldDAgPSAwOworCisJLy8gVmFsaWRhdGUgMTFiL2cgUlNTSV8xIG9mZnNldC4KKwlpZiAoKHBBZC0+QkdSc3NpT2Zmc2V0MSA8IC0xMCkgfHwgKHBBZC0+QkdSc3NpT2Zmc2V0MSA+IDEwKSkKKwkJcEFkLT5CR1Jzc2lPZmZzZXQxID0gMDsKKworCS8vIFZhbGlkYXRlIDExYi9nIFJTU0lfMiBvZmZzZXQuCisJaWYgKChwQWQtPkJHUnNzaU9mZnNldDIgPCAtMTApIHx8IChwQWQtPkJHUnNzaU9mZnNldDIgPiAxMCkpCisJCXBBZC0+QkdSc3NpT2Zmc2V0MiA9IDA7CisKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9SU1NJX0FfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5BUnNzaU9mZnNldDAgPSB2YWx1ZSAmIDB4MDBmZjsKKwlwQWQtPkFSc3NpT2Zmc2V0MSA9ICh2YWx1ZSA+PiA4KTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIChFRVBST01fUlNTSV9BX09GRlNFVCsyKSwgdmFsdWUpOworCXBBZC0+QVJzc2lPZmZzZXQyID0gdmFsdWUgJiAweDAwZmY7CisJcEFkLT5BTE5BR2FpbjIgPSAodmFsdWUgPj4gOCk7CisKKwlpZiAoKChVQ0hBUilwQWQtPkFMTkFHYWluMSA9PSAweEZGKSB8fCAocEFkLT5BTE5BR2FpbjEgPT0gMHgwMCkpCisJCXBBZC0+QUxOQUdhaW4xID0gcEFkLT5BTE5BR2FpbjA7CisJaWYgKCgoVUNIQVIpcEFkLT5BTE5BR2FpbjIgPT0gMHhGRikgfHwgKHBBZC0+QUxOQUdhaW4yID09IDB4MDApKQorCQlwQWQtPkFMTkFHYWluMiA9IHBBZC0+QUxOQUdhaW4wOworCisJLy8gVmFsaWRhdGUgMTFhIFJTU0lfMCBvZmZzZXQuCisJaWYgKChwQWQtPkFSc3NpT2Zmc2V0MCA8IC0xMCkgfHwgKHBBZC0+QVJzc2lPZmZzZXQwID4gMTApKQorCQlwQWQtPkFSc3NpT2Zmc2V0MCA9IDA7CisKKwkvLyBWYWxpZGF0ZSAxMWEgUlNTSV8xIG9mZnNldC4KKwlpZiAoKHBBZC0+QVJzc2lPZmZzZXQxIDwgLTEwKSB8fCAocEFkLT5BUnNzaU9mZnNldDEgPiAxMCkpCisJCXBBZC0+QVJzc2lPZmZzZXQxID0gMDsKKworCS8vVmFsaWRhdGUgMTFhIFJTU0lfMiBvZmZzZXQuCisJaWYgKChwQWQtPkFSc3NpT2Zmc2V0MiA8IC0xMCkgfHwgKHBBZC0+QVJzc2lPZmZzZXQyID4gMTApKQorCQlwQWQtPkFSc3NpT2Zmc2V0MiA9IDA7CisKKwkvLworCS8vIEdldCBMRUQgU2V0dGluZy4KKwkvLworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgzYSwgdmFsdWUpOworCXBBZC0+TGVkQ250bC53b3JkID0gKHZhbHVlJjB4ZmYwMCkgPj4gODsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MRUQxX09GRlNFVCwgdmFsdWUpOworCXBBZC0+TGVkMSA9IHZhbHVlOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0xFRDJfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5MZWQyID0gdmFsdWU7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTEVEM19PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkxlZDMgPSB2YWx1ZTsKKworCVJUTVBSZWFkVHhQd3JQZXJSYXRlKHBBZCk7CisKKyNpZmRlZiBTSU5HTEVfU0tVCisJLy9wQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3ciA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9ERUZJTkVfTUFYX1RYUFdSKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9ERUZJTkVfTUFYX1RYUFdSLCBwQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3cik7CisjZW5kaWYgLy8gU0lOR0xFX1NLVSAvLworI2lmZGVmIFJUMzB4eAorCWlmIChJU19SVDMweHgocEFkKSkKKwl7CisJCWVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHBBZCwgRUZVU0VfVEFHLCAyLCAmdmFsdWUpOworCQlwQWQtPkVGdXNlVGFnID0gKHZhbHVlICYgMHhmZik7CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTZXQgZGVmYXVsdCB2YWx1ZSBmcm9tIEVFUFJPTQorCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJTklDSW5pdEFzaWNGcm9tRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCVVJTlQzMgkJCQkJZGF0YSA9IDA7CisJVUNIQVIJQkJQUjEgPSAwOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCVVTSE9SVAkJCQkJaTsKKwlFRVBST01fQU5URU5OQV9TVFJVQwlBbnRlbm5hOworCUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQyAgICBOaWNDb25maWcyOworCVVDSEFSCUJCUFIzID0gMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0QXNpY0Zyb21FRVBST01cbiIpKTsKKwlmb3IoaSA9IDM7IGkgPCBOVU1fRUVQUk9NX0JCUF9QQVJNUzsgaSsrKQorCXsKKwkJVUNIQVIgQmJwUmVnSWR4LCBCYnBWYWx1ZTsKKworCQlpZiAoKHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldICE9IDB4RkZGRikgJiYgKHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldICE9IDApKQorCQl7CisJCQlCYnBSZWdJZHggPSAoVUNIQVIpKHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldID4+IDgpOworCQkJQmJwVmFsdWUgID0gKFVDSEFSKShwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpXSAmIDB4ZmYpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJicFJlZ0lkeCwgQmJwVmFsdWUpOworCQl9CisJfQorCisJQW50ZW5uYS53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMF07CisJaWYgKEFudGVubmEud29yZCA9PSAweEZGRkYpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFMlBST00gZXJyb3IsIGhhcmQgY29kZSBhcyAweCUwNHhcbiIsIEFudGVubmEud29yZCkpOworCQlCVUdfT04oQW50ZW5uYS53b3JkID09IDB4RkZGRik7CisJfQorCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gKFVDSEFSKSBBbnRlbm5hLmZpZWxkLlJ4UGF0aDsKKwlwQWQtPlJmSWNUeXBlID0gKFVDSEFSKSBBbnRlbm5hLmZpZWxkLlJmSWNUeXBlOworCisJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJwQWQtPlJmSWNUeXBlID0gJWQsIFJlYWxSeFBhdGg9JWQsIFR4UGF0aCA9ICVkXG4iLCBwQWQtPlJmSWNUeXBlLCBwQWQtPk1sbWUuUmVhbFJ4UGF0aCxBbnRlbm5hLmZpZWxkLlR4UGF0aCkpOworCisJLy8gU2F2ZSB0aGUgYW50ZW5uYSBmb3IgZnV0dXJlIHVzZQorCXBBZC0+QW50ZW5uYS53b3JkID0gQW50ZW5uYS53b3JkOworCisJTmljQ29uZmlnMi53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMV07CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoKE5pY0NvbmZpZzIud29yZCAmIDB4MDBmZikgPT0gMHhmZikKKwkJeworCQkJTmljQ29uZmlnMi53b3JkICY9IDB4ZmYwMDsKKwkJfQorCisJCWlmICgoTmljQ29uZmlnMi53b3JkID4+IDgpID09IDB4ZmYpCisJCXsKKwkJCU5pY0NvbmZpZzIud29yZCAmPSAweDAwZmY7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBTYXZlIHRoZSBhbnRlbm5hIGZvciBmdXR1cmUgdXNlCisJcEFkLT5OaWNDb25maWcyLndvcmQgPSBOaWNDb25maWcyLndvcmQ7CisKKwkvLyBzZXQgZGVmYXVsdCBhbnRlbm5hIGFzIG1haW4KKwlpZiAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApCisJCUFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworCisJLy8KKwkvLyBTZW5kIExFRCBTZXR0aW5nIHRvIE1DVS4KKwkvLworCWlmIChwQWQtPkxlZENudGwud29yZCA9PSAweEZGKQorCXsKKwkJcEFkLT5MZWRDbnRsLndvcmQgPSAweDAxOworCQlwQWQtPkxlZDEgPSAweDU1NTU7CisJCXBBZC0+TGVkMiA9IDB4MjIyMTsKKworI2lmZGVmIFJUMjg3MAorCQlwQWQtPkxlZDMgPSAweDU2Mjc7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJfQorCisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUyLCAweGZmLCAoVUNIQVIpcEFkLT5MZWQxLCAoVUNIQVIpKHBBZC0+TGVkMSA+PiA4KSk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUzLCAweGZmLCAoVUNIQVIpcEFkLT5MZWQyLCAoVUNIQVIpKHBBZC0+TGVkMiA+PiA4KSk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDU0LCAweGZmLCAoVUNIQVIpcEFkLT5MZWQzLCAoVUNIQVIpKHBBZC0+TGVkMyA+PiA4KSk7CisgICAgcEFkLT5MZWRJbmRpY2F0b3JTdHJlZ3RoID0gMHhGRjsKKyAgICBSVE1QU2V0U2lnbmFsTEVEKHBBZCwgLTEwMCk7CS8vIEZvcmNlIHNpZ25hbCBzdHJlbmd0aCBMZWQgdG8gYmUgdHVybmVkIG9mZiwgYmVmb3JlIGxpbmsgdXAKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBSZWFkIEhhcmR3YXJlIGNvbnRyb2xsZWQgUmFkaW8gc3RhdGUgZW5hYmxlIGJpdAorCQlpZiAoTmljQ29uZmlnMi5maWVsZC5IYXJkd2FyZVJhZGlvQ29udHJvbCA9PSAxKQorCQl7CisJCQlwQWQtPlN0YUNmZy5iSGFyZHdhcmVSYWRpbyA9IFRSVUU7CisKKwkJCS8vIFJlYWQgR1BJTyBwaW4yIGFzIEhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8gc3RhdGUKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOworCQkJaWYgKChkYXRhICYgMHgwNCkgPT0gMCkKKwkJCXsKKwkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9IEZBTFNFOworCQkJCXBBZC0+U3RhQ2ZnLmJSYWRpbyA9IEZBTFNFOworLy8JCQkJUlRNUF9JT19XUklURTMyKHBBZCwgUFdSX1BJTl9DRkcsIDB4MDAwMDE4MTgpOworCQkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJcEFkLT5TdGFDZmcuYkhhcmR3YXJlUmFkaW8gPSBGQUxTRTsKKworCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQl7CisJCQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09OKTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIFR1cm4gb2ZmIHBhdGNoaW5nIGZvciBjYXJkYnVzIGNvbnRyb2xsZXIKKwlpZiAoTmljQ29uZmlnMi5maWVsZC5DYXJkYnVzQWNjZWxlcmF0aW9uID09IDEpCisJeworLy8JCXBBZC0+YlRlc3QxID0gVFJVRTsKKwl9CisKKwlpZiAoTmljQ29uZmlnMi5maWVsZC5EeW5hbWljVHhBZ2NDb250cm9sID09IDEpCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gVFJVRTsKKwllbHNlCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CisJLy8KKwkvLyBTaW5jZSBCQlAgaGFzIGJlZW4gcHJvZ2FtZWQsIHRvIG1ha2Ugc3VyZSBCQlAgc2V0dGluZyB3aWxsIGJlCisJLy8gdXBhdGUgaW5zaWRlIG9mIEFzaWNBbnRlbm5hU2VsZWN0LCBzbyByZXNldCB0byBVTktOT1dOX0JBTkQhIQorCS8vCisJcEFkLT5Db21tb25DZmcuQmFuZFN0YXRlID0gVU5LTk9XTl9CQU5EOworCisJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQUjMpOworCUJCUFIzICY9ICh+MHgxOCk7CisJaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCXsKKwkJQkJQUjMgfD0gKDB4MTApOworCX0KKwllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwl7CisJCUJCUFIzIHw9ICgweDgpOworCX0KKwllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwl7CisJCUJCUFIzIHw9ICgweDApOworCX0KKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gSGFuZGxlIHRoZSBkaWZmZXJlbmNlIHdoZW4gMVQKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQkJQUjEpOworCQlpZihwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCXsKKwkJQkJQUjEgJj0gKH4weDE4KTsKKwkJfQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCQlBSMSk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVXNlIEh3IFJhZGlvIENvbnRyb2wgUGluPSVkOyBpZiB1c2VkIFBpbj0lZDtcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJIYXJkd2FyZVJhZGlvLCBwQWQtPkNvbW1vbkNmZy5iSGFyZHdhcmVSYWRpbykpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeFBhdGggPSAlZCwgUnhQYXRoID0gJWQsIFJGSUM9JWQsIFBvbGFyK0xFRCBtb2RlPSV4XG4iLCBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLCBwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoLCBwQWQtPlJmSWNUeXBlLCBwQWQtPkxlZENudGwud29yZCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0QXNpY0Zyb21FRVBST01cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUluaXRpYWxpemUgTklDIGhhcmR3YXJlCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJTklDSW5pdGlhbGl6ZUFkYXB0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICBCT09MRUFOICAgIGJIYXJkUmVzZXQpCit7CisJTkRJU19TVEFUVVMgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisvLwlJTlRfTUFTS19DU1JfU1RSVUMJCUludE1hc2s7CisJVUxPTkcJaSA9MCwgaj0wOworCUFDX1RYT1BfQ1NSMF9TVFJVQwljc3IwOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRpYWxpemVBZGFwdGVyXG4iKSk7CisKKwkvLyAzLiBTZXQgRE1BIGdsb2JhbCBjb25maWd1cmF0aW9uIGV4Y2VwdCBUWF9ETUFfRU4gYW5kIFJYX0RNQV9FTiBiaXRzOgorcmV0cnk6CisJaSA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKKwkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApICAmJiAoR2xvQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCWkrKzsKKwl9d2hpbGUgKCBpPDEwMCk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IERNQSBvZmZzZXQgMHgyMDggPSAweCV4XG4iLCBHbG9DZmcud29yZCkpOworCUdsb0NmZy53b3JkICY9IDB4ZmYwOworCUdsb0NmZy5maWVsZC5FblRYV3JpdGVCYWNrRERPTkUgPTE7CisJUlRNUF9JT19XUklURTMyKHBBZCwgV1BETUFfR0xPX0NGRywgR2xvQ2ZnLndvcmQpOworCisJLy8gUmVjb3JkIEhXIEJlYWNvbiBvZmZzZXQKKwlwQWQtPkJlYWNvbk9mZnNldFswXSA9IEhXX0JFQUNPTl9CQVNFMDsKKwlwQWQtPkJlYWNvbk9mZnNldFsxXSA9IEhXX0JFQUNPTl9CQVNFMTsKKwlwQWQtPkJlYWNvbk9mZnNldFsyXSA9IEhXX0JFQUNPTl9CQVNFMjsKKwlwQWQtPkJlYWNvbk9mZnNldFszXSA9IEhXX0JFQUNPTl9CQVNFMzsKKwlwQWQtPkJlYWNvbk9mZnNldFs0XSA9IEhXX0JFQUNPTl9CQVNFNDsKKwlwQWQtPkJlYWNvbk9mZnNldFs1XSA9IEhXX0JFQUNPTl9CQVNFNTsKKwlwQWQtPkJlYWNvbk9mZnNldFs2XSA9IEhXX0JFQUNPTl9CQVNFNjsKKwlwQWQtPkJlYWNvbk9mZnNldFs3XSA9IEhXX0JFQUNPTl9CQVNFNzsKKworCS8vCisJLy8gd3JpdGUgYWxsIHNoYXJlZCBSaW5nJ3MgYmFzZSBhZGRyZXNzIGludG8gQVNJQworCS8vCisKKwkvLyBhc2ljIHNpbXVsYXRpb24gc2VxdWVuY2UgcHV0IHRoaXMgYWhlYWQgYmVmb3JlIGxvYWRpbmcgZmlybXdhcmUuCisJLy8gcGJmIGhhcmR3YXJlIHJlc2V0CisKKwkvLyBJbml0aWFsemUgQVNJQyBmb3IgVFggJiBSeCBvcGVyYXRpb24KKwlpZiAoTklDSW5pdGlhbGl6ZUFzaWMocEFkICwgYkhhcmRSZXNldCkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCWlmIChqKysgPT0gMCkKKwkJeworCQkJTklDTG9hZEZpcm13YXJlKHBBZCk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCisKKworCS8vIFdNTSBwYXJhbWV0ZXIKKwljc3IwLndvcmQgPSAwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMF9DRkcsIGNzcjAud29yZCk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKKwl7CisJCWNzcjAuZmllbGQuQWMwVHhvcCA9IDE5MjsJLy8gQUNfVkk6IDE5MiozMnVzIH49IDZtcworCQljc3IwLmZpZWxkLkFjMVR4b3AgPSA5NjsJLy8gQUNfVk86IDk2KjMydXMgIH49IDNtcworCX0KKwllbHNlCisJeworCQljc3IwLmZpZWxkLkFjMFR4b3AgPSA5NjsJLy8gQUNfVkk6IDk2KjMydXMgfj0gM21zCisJCWNzcjAuZmllbGQuQWMxVHhvcCA9IDQ4OwkvLyBBQ19WTzogNDgqMzJ1cyB+PSAxLjVtcworCX0KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IwLndvcmQpOworCisKKworCisJLy8gcmVzZXQgYWN0aW9uCisJLy8gTG9hZCBmaXJtd2FyZQorCS8vICBTdGF0dXMgPSBOSUNMb2FkRmlybXdhcmUocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0aWFsaXplQWRhcHRlclxuIikpOworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0aWFsaXplIEFTSUMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUwlOSUNJbml0aWFsaXplQXNpYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgQk9PTEVBTgkJYkhhcmRSZXNldCkKK3sKKwlVTE9ORwkJCUluZGV4ID0gMDsKKwlVQ0hBUgkJCVIwID0gMHhmZjsKKwlVSU5UMzIJCQlNYWNDc3IxMiA9IDAsIENvdW50ZXIgPSAwOworI2lmZGVmIFJUMjg3MAorCVVJTlQzMgkJCU1hY0NzcjAgPSAwOworCU5UU1RBVFVTCQlTdGF0dXM7CisJVUNIQVIJCQlWYWx1ZSA9IDB4ZmY7CisjZW5kaWYgLy8gUlQyODcwIC8vCisjaWZkZWYgUlQzMHh4CisJVUlOVDMyCQkJZUZ1c2VDdHJsOworI2VuZGlmIC8vIFJUMzB4eCAvLworCVVTSE9SVAkJCUtleUlkeDsKKwlJTlQJCQkJaSxhcGlkeDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0aWFsaXplQXNpY1xuIikpOworCisKKyNpZmRlZiBSVDI4NzAKKwkvLworCS8vIE1ha2Ugc3VyZSBNQUMgZ2V0cyByZWFkeSBhZnRlciBOSUNMb2FkRmlybXdhcmUoKS4KKwkvLworCUluZGV4ID0gMDsKKworCS8vVG8gYXZvaWQgaGFuZy1vbiBpc3N1ZSB3aGVuIGludGVyZmFjZSB1cCBpbiBrZXJuZWwgMi40LAorCS8vd2UgdXNlIGEgbG9jYWwgdmFyaWFibGUgIk1hY0NzcjAiIGluc3RlYWQgb2YgdXNpbmcgInBBZC0+TUFDVmVyc2lvbiIgZGlyZWN0bHkuCisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX0NTUjAsICZNYWNDc3IwKTsKKworCQlpZiAoKE1hY0NzcjAgIT0gMHgwMCkgJiYgKE1hY0NzcjAgIT0gMHhGRkZGRkZGRikpCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDEwKTsKKwl9IHdoaWxlIChJbmRleCsrIDwgMTAwKTsKKworCXBBZC0+TUFDVmVyc2lvbiA9IE1hY0NzcjA7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTUFDX0NTUjAgIFsgVmVyOlJldj0weCUwOHhdXG4iLCBwQWQtPk1BQ1ZlcnNpb24pKTsKKwkvLyB0dXJuIG9uIGJpdDEzIChzZXQgdG8gemVybykgYWZ0ZXIgcnQyODYwRC4gVGhpcyBpcyB0byBzb2x2ZSBoaWdoLWN1cnJlbnQgaXNzdWUuCisJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZNYWNDc3IxMik7CisJTWFjQ3NyMTIgJj0gKH4weDIwMDApOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgTWFjQ3NyMTIpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDMpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFVTQl9ETUFfQ0ZHLCAweDApOworCVN0YXR1cyA9IFJUVVNCVmVuZGVyUmVzZXQocEFkKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwKTsKKworCS8vIEluaXRpYWxpemUgTUFDIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwlmb3IoSW5kZXg9MDsgSW5kZXg8TlVNX01BQ19SRUdfUEFSTVM7IEluZGV4KyspCisJeworI2lmZGVmIFJUMzA3MAorCQlpZiAoKE1BQ1JlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciA9PSBUWF9TV19DRkcwKSAmJiAoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDcxKHBBZCkpKQorCQl7CisJCQlNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUgPSAweDAwMDAwNDAwOworCQl9CisjZW5kaWYgLy8gUlQzMDcwIC8vCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIChVU0hPUlQpTUFDUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLCBNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUpOworCX0KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5VTV9TVEFfTUFDX1JFR19QQVJNUzsgSW5kZXgrKykKKwkJeworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgKFVTSE9SVClTVEFNQUNSZWdUYWJsZVtJbmRleF0uUmVnaXN0ZXIsIFNUQU1BQ1JlZ1RhYmxlW0luZGV4XS5WYWx1ZSk7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDMweHgKKwkvLyBJbml0aWFsaXplIFJUMzA3MCBzZXJpYWwgTUFjIHJlZ2lzdGVycyB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBSVDI4NzAgc2VyaWFsCisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMSwgMCk7CisKKwkJLy8gUlQzMDcxIHZlcnNpb24gRSBoYXMgZml4ZWQgdGhpcyBpc3N1ZQorCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpCisJCXsKKwkJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKQorCQkJeworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDB4MUYpOwkvLyBUbyBmaXggdGhyb3VnaHB1dCBkcm9wIGRyYXN0aWNhbGx5CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMiwgMHgwRik7CS8vIFRvIGZpeCB0aHJvdWdocHV0IGRyb3AgZHJhc3RpY2FsbHkKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDB4MCk7CisJCX0KKwl9CisJZWxzZSBpZiAoSVNfUlQzMDcwKHBBZCkpCisJeworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcxLCAwKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMiwgMHgxRik7CS8vIFRvIGZpeCB0aHJvdWdocHV0IGRyb3AgZHJhc3RpY2FsbHkKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkvLworCS8vIEJlZm9yZSBwcm9ncmFtIEJCUCwgd2UgbmVlZCB0byB3YWl0IEJCUC9SRiBnZXQgd2FrZSB1cC4KKwkvLworCUluZGV4ID0gMDsKKwlkbworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1RBVFVTX0NGRywgJk1hY0NzcjEyKTsKKworCQlpZiAoKE1hY0NzcjEyICYgMHgwMykgPT0gMCkJLy8gaWYgQkIuUkYgaXMgc3RhYmxlCisJCQlicmVhazsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGVjayBNQUNfU1RBVFVTX0NGRyAgPSBCdXN5ID0gJXhcbiIsIE1hY0NzcjEyKSk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJfSB3aGlsZSAoSW5kZXgrKyA8IDEwMCk7CisKKyAgICAvLyBUaGUgY29tbWFuZHMgdG8gZmlybXdhcmUgc2hvdWxkIGJlIGFmdGVyIHRoZXNlIGNvbW1hbmRzLCB0aGVzZSBjb21tYW5kcyB3aWxsIGluaXQgZmlybXdhcmUKKwkvLyBQQ0kgYW5kIFVTQiBhcmUgbm90IHRoZSBzYW1lIGJlY2F1c2UgUENJIGRyaXZlciBuZWVkcyB0byB3YWl0IGZvciBQQ0kgYnVzIHJlYWR5CisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX0JCUF9BR0VOVCwgMCk7CS8vIGluaXRpYWxpemUgQkJQIFIvVyBhY2Nlc3MgYWdlbnQKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9DU1IsIDApOworCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisKKwkvLyBSZWFkIEJCUCByZWdpc3RlciwgbWFrZSBzdXJlIEJCUCBpcyB1cCBhbmQgcnVubmluZyBiZWZvcmUgd3JpdGUgbmV3IGRhdGEKKwlJbmRleCA9IDA7CisJZG8KKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMCwgJlIwKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkJQIHZlcnNpb24gPSAleFxuIiwgUjApKTsKKwl9IHdoaWxlICgoKytJbmRleCA8IDIwKSAmJiAoKFIwID09IDB4ZmYpIHx8IChSMCA9PSAweDAwKSkpOworCS8vQVNTRVJUKEluZGV4IDwgMjApOyAvL3RoaXMgd2lsbCBjYXVzZSBCU09EIG9uIENoZWNrLWJ1aWxkIGRyaXZlcgorCisJaWYgKChSMCA9PSAweGZmKSB8fCAoUjAgPT0gMHgwMCkpCisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCisJLy8gSW5pdGlhbGl6ZSBCQlAgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5VTV9CQlBfUkVHX1BBUk1TOyBJbmRleCsrKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUFJlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciwgQkJQUmVnVGFibGVbSW5kZXhdLlZhbHVlKTsKKwl9CisKKwkvLyBmb3IgcnQyODYwRSBhbmQgYWZ0ZXIsIGluaXQgQkJQX1I4NCB3aXRoIDB4MTkuIFRoaXMgaXMgZm9yIGV4dGVuc2lvbiBjaGFubmVsIG92ZXJsYXBwaW5nIElPVC4KKwkvLyBSVDMwOTAgc2hvdWxkIG5vdCBwcm9ncmFtIEJCUCBSODQgdG8gMHgxOSwgb3RoZXJ3aXNlIFRYIHdpbGwgYmxvY2suCisJaWYgKCgocEFkLT5NQUNWZXJzaW9uJjB4ZmZmZikgIT0gMHgwMTAxKSAmJiAoIUlTX1JUMzB4eChwQWQpKSkKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODQsIDB4MTkpOworCisvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cAorI2lmZGVmIFJUMzB4eAorCWlmIChJU19SVDMweHgocEFkKSkKKwl7CS8vdXBkYXRlIGZvciBSVDMwNzAvNzEvNzIvOTAvOTEvOTIuCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc5LCAweDEzKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODAsIDB4MDUpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MSwgMHgzMyk7CisJfQorCisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwkJVUNIQVIJCWJicHJlZz0wOworCisJCS8vIGVuYWJsZSBEQyBmaWx0ZXIKKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIxMSkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMTAzLCAweGMwKTsKKwkJfQorCisJCS8vIGltcHJvdmUgcG93ZXIgY29uc3VtcHRpb24KKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMzgsICZiYnByZWcpOworCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQkvLyB0dXJuIG9mZiB0eCBEQUNfMQorCQkJYmJwcmVnID0gKGJicHJlZyB8IDB4MjApOworCQl9CisKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJLy8gdHVybiBvZmYgdHggQURDXzEKKwkJCWJicHJlZyAmPSAofjB4Mik7CisJCX0KKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMTM4LCBiYnByZWcpOworCisJCS8vIGltcHJvdmUgcG93ZXIgY29uc3VtcHRpb24gaW4gUlQzMDcxIFZlci5FCisJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA+PSAweDAyMTEpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMzEsICZiYnByZWcpOworCQkJYmJwcmVnICY9ICh+MHgzKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMxLCBiYnByZWcpOworCQl9CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworLy8gZW5kIGpvaG5saQorCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMik7CisgICAgfQorCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4MEVfVkVSU0lPTiAmJiBwQWQtPk1BQ1ZlcnNpb24gPCBSQUxJTktfMzA3MF9WRVJTSU9OKSAvLyAzKjMKKwl7CisJCS8vIGVubGFyZ2UgTUFYX0xFTl9DRkcKKwkJVUlOVDMyIGNzcjsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQVhfTEVOX0NGRywgJmNzcik7CisJCWNzciAmPSAweEZGRjsKKwkJY3NyIHw9IDB4MjAwMDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFYX0xFTl9DRkcsIGNzcik7CisJfQorCisjaWZkZWYgUlQyODcwCit7CisJVUNIQVIJTUFDX1ZhbHVlW109ezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMCwwfTsKKworCS8vSW5pdGlhbGl6ZSBXQ0lEIHRhYmxlCisJVmFsdWUgPSAweGZmOworCWZvcihJbmRleCA9MCA7SW5kZXggPCAyNTQ7SW5kZXgrKykKKwl7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIChVU0hPUlQpKE1BQ19XQ0lEX0JBU0UgKyBJbmRleCAqIDgpLCBNQUNfVmFsdWUsIDgpOworCX0KK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIEFkZCByYWRpbyBvZmYgY29udHJvbAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQl7CisvLwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBXUl9QSU5fQ0ZHLCAweDAwMDAxODE4KTsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgUmFkaW8gT2ZmXG4iKSk7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBDbGVhciByYXcgY291bnRlcnMKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDIsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDIsICZDb3VudGVyKTsKKworCS8vIEFTSUMgd2lsbCBrZWVwIGdhcmJhZ2UgdmFsdWUgYWZ0ZXIgYm9vdAorCS8vIENsZWFyIGFsbCBzZWFyZWQga2V5IHRhYmxlIHdoZW4gaW5pdGlhbAorCS8vIFRoaXMgcm91dGluZSBjYW4gYmUgaWdub3JlZCBpbiByYWRpby1PTi9PRkYgb3BlcmF0aW9uLgorCWlmIChiSGFyZFJlc2V0KQorCXsKKwkJZm9yIChLZXlJZHggPSAwOyBLZXlJZHggPCA0OyBLZXlJZHgrKykKKwkJeworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyA0KktleUlkeCwgMCk7CisJCX0KKworCS8vIENsZWFyIGFsbCBwYWlyd2lzZSBrZXkgdGFibGUgd2hlbiBpbml0aWFsCisJZm9yIChLZXlJZHggPSAwOyBLZXlJZHggPCAyNTY7IEtleUlkeCsrKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoS2V5SWR4ICogSFdfV0NJRF9BVFRSSV9TSVpFKSwgMSk7CisJfQorCX0KKworCS8vIGFzc2VydCBIT1NUIHJlYWR5IGJpdAorLy8gIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxLCAweDApOyAvLyAyMDA0LTA5LTE0IGFza2VkIGJ5IE1hcmsKKy8vICBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMSwgMHg0KTsKKworCS8vIEl0IGlzbid0IG5lY2Vzc2FyeSB0byBjbGVhciB0aGlzIHNwYWNlIHdoZW4gbm90IGhhcmQgcmVzZXQuCisJaWYgKGJIYXJkUmVzZXQgPT0gVFJVRSkKKwl7CisJCS8vIGNsZWFyIGFsbCBvbi1jaGlwIEJFQUNPTiBmcmFtZSBzcGFjZQorCQlmb3IgKGFwaWR4ID0gMDsgYXBpZHggPCBIV19CRUFDT05fTUFYX0NPVU5UOyBhcGlkeCsrKQorCQl7CisJCQlmb3IgKGkgPSAwOyBpIDwgSFdfQkVBQ09OX09GRlNFVD4+MjsgaSs9NCkKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBwQWQtPkJlYWNvbk9mZnNldFthcGlkeF0gKyBpLCAweDAwKTsKKwkJfQorCX0KKyNpZmRlZiBSVDI4NzAKKwlBc2ljRGlzYWJsZVN5bmMocEFkKTsKKwkvLyBDbGVhciByYXcgY291bnRlcnMKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDIsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDIsICZDb3VudGVyKTsKKwkvLyBEZWZhdWx0IFBDSSBjbG9jayBjeWNsZSBwZXIgbXMgaXMgZGlmZmVyZW50IGFzIGRlZmF1bHQgc2V0dGluZywgd2hpY2ggaXMgYmFzZWQgb24gUENJLgorCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0NZQ19DRkcsICZDb3VudGVyKTsKKwlDb3VudGVyJj0weGZmZmZmZjAwOworCUNvdW50ZXJ8PTB4MDAwMDAxZTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBVU0JfQ1lDX0NGRywgQ291bnRlcik7CisjZW5kaWYgLy8gUlQyODcwIC8vCisjaWZkZWYgUlQzMHh4CisJcEFkLT5iVXNlRWZ1c2U9RkFMU0U7CisJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAmZUZ1c2VDdHJsKTsKKwlwQWQtPmJVc2VFZnVzZSA9ICggKGVGdXNlQ3RybCAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApID8gMSA6IDA7CisJaWYocEFkLT5iVXNlRWZ1c2UpCisJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTlZNIGlzIEVmdXNlXG4iKSk7CisJfQorCWVsc2UKKwl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOVk0gaXMgRUVQUk9NXG4iKSk7CisKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gZm9yIHJ0Mjg2MEUgYW5kIGFmdGVyLCBpbml0IFRYT1BfQ1RSTF9DRkcgd2l0aCAweDU4M2YuIFRoaXMgaXMgZm9yIGV4dGVuc2lvbiBjaGFubmVsIG92ZXJsYXBwaW5nIElPVC4KKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24mMHhmZmZmKSAhPSAweDAxMDEpCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWE9QX0NUUkxfQ0ZHLCAweDU4M2YpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0aWFsaXplQXNpY1xuIikpOworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVzZXQgTklDIEFzaWNzCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCQlSZXNldCBOSUMgdG8gaW5pdGlhbCBzdGF0ZSBBUyBJUyBzeXN0ZW0gYm9vdCB1cCB0aW1lLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlOSUNJc3N1ZVJlc2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVJTlQzMglWYWx1ZSA9IDA7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0lzc3VlUmVzZXRcbiIpKTsKKworCS8vIEFib3J0IFR4LCBwcmV2ZW50IEFTSUMgZnJvbSB3cml0aW5nIHRvIEhvc3QgbWVtb3J5CisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9DTlRMX0NTUiwgMHgwMDFmMDAwMCk7CisKKwkvLyBEaXNhYmxlIFJ4LCByZWdpc3RlciB2YWx1ZSBzdXBwb3NlZCB3aWxsIHJlbWFpbiBhZnRlciByZXNldAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCVZhbHVlICY9ICgweGZmZmZmZmYzKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCS8vIElzc3VlIHJlc2V0IGFuZCBjbGVhciBmcm9tIHJlc2V0IHN0YXRlCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDAzKTsgLy8gMjAwNC0wOS0xNyBjaGFuZ2UgZnJvbSAweDAxCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDAwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJc3N1ZVJlc2V0XG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDaGVjayBBU0lDIHJlZ2lzdGVycyBhbmQgZmluZCBhbnkgcmVhc29uIHRoZSBzeXN0ZW0gbWlnaHQgaGFuZworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4JTklDQ2hlY2tGb3JIYW5nKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCXJldHVybiAoRkFMU0UpOworfQorCitWT0lEIE5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlUWF9TVEFfRklGT19TVFJVQwlTdGFGaWZvOworCU1BQ19UQUJMRV9FTlRSWQkJKnBFbnRyeTsKKwlVQ0hBUgkJCQlpID0gMDsKKwlVQ0hBUgkJCXBpZCA9IDAsIHdjaWQgPSAwOworCUNIQVIJCQkJcmVUcnk7CisJVUNIQVIJCQkJc3VjY01DUzsKKworI2lmZGVmIFJBTElOS19BVEUKKwkvKiBOb3RoaW5nIHRvIGRvIGluIEFURSBtb2RlICovCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJCWRvCisJCXsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0ZJRk8sICZTdGFGaWZvLndvcmQpOworCisJCQlpZiAoU3RhRmlmby5maWVsZC5iVmFsaWQgPT0gMCkKKwkJCQlicmVhazsKKworCQkJd2NpZCA9IChVQ0hBUilTdGFGaWZvLmZpZWxkLndjaWQ7CisKKworCQkvKiBpZ25vcmUgTm9BQ0sgYW5kIE1HTVQgZnJhbWUgdXNlIDB4RkYgYXMgV0NJRCAqLworCQkJaWYgKChTdGFGaWZvLmZpZWxkLlR4QWNrUmVxdWlyZWQgPT0gMCkgfHwgKHdjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpKQorCQkJeworCQkJCWkrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUElEIHN0b3JlIFR4IE1DUyBSYXRlICovCisJCQlwaWQgPSAoVUNIQVIpU3RhRmlmby5maWVsZC5QaWRUeXBlOworCisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt3Y2lkXTsKKworCQkJcEVudHJ5LT5EZWJ1Z0ZJRk9Db3VudCsrOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoU3RhRmlmby5maWVsZC5UeEJGKSAvLyAzKjMKKwkJCQlwRW50cnktPlR4QkZDb3VudCsrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgVUFQU0RfQVBfU1VQUE9SVAorCQkJVUFQU0RfU1BfQVVFX0hhbmRsZShwQWQsIHBFbnRyeSwgU3RhRmlmby5maWVsZC5UeFN1Y2Nlc3MpOworI2VuZGlmIC8vIFVBUFNEX0FQX1NVUFBPUlQgLy8KKworCQkJaWYgKCFTdGFGaWZvLmZpZWxkLlR4U3VjY2VzcykKKwkJCXsKKwkJCQlwRW50cnktPkZJRk9Db3VudCsrOworCQkJCXBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQrKzsKKworCQkJCWlmIChwRW50cnktPkZJRk9Db3VudCA+PSAxKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIyIpKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkJcEVudHJ5LT5Ob0JBRGF0YUNvdW50RG93biA9IDY0OworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkJCWlmKHBFbnRyeS0+UHNNb2RlID09IFBXUl9BQ1RJVkUpCisJCQkJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkJCWludCB0aWQ7CisJCQkJCQlmb3IgKHRpZD0wOyB0aWQ8TlVNX09GX1RJRDsgdGlkKyspCisJCQkJCQl7CisJCQkJCQkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBwRW50cnktPkFpZCwgIHRpZCwgRkFMU0UsIEZBTFNFKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJCQkJLy8gVXBkYXRlIHRoZSBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBjb3VudGVyIGV4Y2VwdCBQUyBtb2RlCisJCQkJCQlwRW50cnktPkNvbnRpbnVlVHhGYWlsQ250Kys7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLyBDbGVhciB0aGUgRklGT0NvdW50IHdoZW4gc3RhIGluIFBvd2VyIFNhdmUgbW9kZS4gQmFzaWNhbGx5IHdlIGFzc3VtZQorCQkJCQkJLy8gICAgIHRoaXMgdHggZXJyb3IgaGFwcGVuZWQgZHVlIHRvIHN0YSBqdXN0IGdvIHRvIHNsZWVwLgorCQkJCQkJcEVudHJ5LT5GSUZPQ291bnQgPSAwOworCQkJCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCA9IDA7CisJCQkJCX0KKwkJCQkJLy9wRW50cnktPkZJRk9Db3VudCA9IDA7CisJCQkJfQorCQkJCS8vcEVudHJ5LT5iU2VuZEJBUiA9IFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJaWYgKChwRW50cnktPlBzTW9kZSAhPSBQV1JfU0FWRSkgJiYgKHBFbnRyeS0+Tm9CQURhdGFDb3VudERvd24gPiAwKSkKKwkJCQl7CisJCQkJCXBFbnRyeS0+Tm9CQURhdGFDb3VudERvd24tLTsKKwkJCQkJaWYgKHBFbnRyeS0+Tm9CQURhdGFDb3VudERvd249PTApCisJCQkJCXsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkBcbiIpKTsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwRW50cnktPkZJRk9Db3VudCA9IDA7CisJCQkJcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50Kys7CisJCQkJLy8gdXBkYXRlIE5vRGF0YUlkbGVDb3VudCB3aGVuIHN1Y2Vzc2Z1bCBzZW5kIHBhY2tldCB0byBTVEEuCisJCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOworCQkJCXBFbnRyeS0+Q29udGludWVUeEZhaWxDbnQgPSAwOworCQkJfQorCisJCQlzdWNjTUNTID0gU3RhRmlmby5maWVsZC5TdWNjZXNzUmF0ZSAmIDB4N0Y7CisKKwkJCXJlVHJ5ID0gcGlkIC0gc3VjY01DUzsKKworCQkJaWYgKFN0YUZpZm8uZmllbGQuVHhTdWNjZXNzKQorCQkJeworCQkJCXBFbnRyeS0+VFhNQ1NFeHBlY3RlZFtwaWRdKys7CisJCQkJaWYgKHBpZCA9PSBzdWNjTUNTKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5UWE1DU1N1Y2Nlc3NmdWxbcGlkXSsrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwRW50cnktPlRYTUNTQXV0b0ZhbGxCYWNrW3BpZF1bc3VjY01DU10rKzsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEVudHJ5LT5UWE1DU0ZhaWxlZFtwaWRdKys7CisJCQl9CisKKwkJCWlmIChyZVRyeSA+IDApCisJCQl7CisJCQkJaWYgKChwaWQgPj0gMTIpICYmIHN1Y2NNQ1MgPD03KQorCQkJCXsKKwkJCQkJcmVUcnkgLT0gNDsKKwkJCQl9CisJCQkJcEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArPSByZVRyeTsKKwkJCX0KKworCQkJaSsrOworCQkJLy8gQVNJQyBzdG9yZSAxNiBzdGFjaworCQl9IHdoaWxlICggaSA8ICgyKlRYX1JJTkdfU0laRSkgKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCBzdGF0aXN0aWNhbCBjb3VudGVycyBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgcmVjb3JkIHRoZW0KKwkJaW4gc29mdHdhcmUgdmFyaWFibGVzIGZvciBsYXRlciBvbiBxdWVyeQorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIE5JQ1VwZGF0ZVJhd0NvdW50ZXJzKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVJTlQzMglPbGRWYWx1ZTsvLywgVmFsdWUyOworCS8vVUxPTkcJUGFnZVN1bSwgT25lU2VjVHJhbnNtaXRDb3VudDsKKwkvL1VMT05HCVR4RXJyb3JSYXRpbywgUmV0cnksIEZhaWw7CisJUlhfU1RBX0NOVDBfU1RSVUMJIFJ4U3RhQ250MDsKKwlSWF9TVEFfQ05UMV9TVFJVQyAgIFJ4U3RhQ250MTsKKwlSWF9TVEFfQ05UMl9TVFJVQyAgIFJ4U3RhQ250MjsKKwlUWF9TVEFfQ05UMF9TVFJVQyAJIFR4U3RhQ250MDsKKwlUWF9TVEFfQ05UMV9TVFJVQwkgU3RhVHgxOworCVRYX1NUQV9DTlQyX1NUUlVDCSBTdGFUeDI7CisJVFhfQUdHX0NOVF9TVFJVQwlUeEFnZ0NudDsKKwlUWF9BR0dfQ05UMF9TVFJVQwlUeEFnZ0NudDA7CisJVFhfQUdHX0NOVDFfU1RSVUMJVHhBZ2dDbnQxOworCVRYX0FHR19DTlQyX1NUUlVDCVR4QWdnQ250MjsKKwlUWF9BR0dfQ05UM19TVFJVQwlUeEFnZ0NudDM7CisJVFhfQUdHX0NOVDRfU1RSVUMJVHhBZ2dDbnQ0OworCVRYX0FHR19DTlQ1X1NUUlVDCVR4QWdnQ250NTsKKwlUWF9BR0dfQ05UNl9TVFJVQwlUeEFnZ0NudDY7CisJVFhfQUdHX0NOVDdfU1RSVUMJVHhBZ2dDbnQ3OworCisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMCwgJlJ4U3RhQ250MC53b3JkKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQyLCAmUnhTdGFDbnQyLndvcmQpOworCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQxLCAmUnhTdGFDbnQxLndvcmQpOworCSAgICAvLyBVcGRhdGUgUlggUExDUCBlcnJvciBjb3VudGVyCisJICAgIHBBZC0+UHJpdmF0ZUluZm8uUGh5UnhFcnJDbnQgKz0gUnhTdGFDbnQxLmZpZWxkLlBsY3BFcnI7CisJCS8vIFVwZGF0ZSBGYWxzZSBDQ0EgY291bnRlcgorCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250ICs9IFJ4U3RhQ250MS5maWVsZC5GYWxzZUNjYTsKKwl9CisKKwkvLyBVcGRhdGUgRkNTIGNvdW50ZXJzCisJT2xkVmFsdWU9IHBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0OworCXBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0ICs9IChSeFN0YUNudDAuZmllbGQuQ3JjRXJyKTsgLy8gPj4gNyk7CisJaWYgKHBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0IDwgT2xkVmFsdWUpCisJCXBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5IaWdoUGFydCsrOworCisJLy8gQWRkIEZDUyBlcnJvciBjb3VudCB0byBwcml2YXRlIGNvdW50ZXJzCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEZjc0VyckNudCArPSBSeFN0YUNudDAuZmllbGQuQ3JjRXJyOworCU9sZFZhbHVlID0gcEFkLT5SYWxpbmtDb3VudGVycy5SZWFsRmNzRXJyQ291bnQudS5Mb3dQYXJ0OworCXBBZC0+UmFsaW5rQ291bnRlcnMuUmVhbEZjc0VyckNvdW50LnUuTG93UGFydCArPSBSeFN0YUNudDAuZmllbGQuQ3JjRXJyOworCWlmIChwQWQtPlJhbGlua0NvdW50ZXJzLlJlYWxGY3NFcnJDb3VudC51Lkxvd1BhcnQgPCBPbGRWYWx1ZSkKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5SZWFsRmNzRXJyQ291bnQudS5IaWdoUGFydCsrOworCisJLy8gVXBkYXRlIER1cGxpY2F0ZSBSY3YgY2hlY2sKKwlwQWQtPlJhbGlua0NvdW50ZXJzLkR1cGxpY2F0ZVJjdiArPSBSeFN0YUNudDIuZmllbGQuUnhEdXBsaUNvdW50OworCXBBZC0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQudS5Mb3dQYXJ0ICs9IFJ4U3RhQ250Mi5maWVsZC5SeER1cGxpQ291bnQ7CisJLy8gVXBkYXRlIFJYIE92ZXJmbG93IGNvdW50ZXIKKwlwQWQtPkNvdW50ZXJzODAyMy5SeE5vQnVmZmVyICs9IChSeFN0YUNudDIuZmllbGQuUnhGaWZvT3ZlcmZsb3dDb3VudCk7CisKKwkvL3BBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudCA9IDA7CisjaWZkZWYgUlQyODcwCisJaWYgKHBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudCAhPSBwQWQtPndhdGNoRG9nUnhDbnQpCisJeworCQlwQWQtPndhdGNoRG9nUnhDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQ7CisJCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250ID0gMDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKFJ4U3RhQ250Mi5maWVsZC5SeEZpZm9PdmVyZmxvd0NvdW50KQorCQkJcEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQrKzsKKwkJZWxzZQorCQkJcEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQgPSAwOworCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisJLy9pZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkgfHwKKwkvLwkoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSAmJiAocEFkLT5NYWNUYWIuU2l6ZSAhPSAxKSkpCisJaWYgKCFwQWQtPmJVcGRhdGVCY25DbnREb25lKQorCXsKKwkvLyBVcGRhdGUgQkVBQ09OIHNlbnQgY291bnQKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmVHhTdGFDbnQwLndvcmQpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDEsICZTdGFUeDEud29yZCk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMiwgJlN0YVR4Mi53b3JkKTsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0JlYWNvblNlbnRDbnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4QmVhY29uQ291bnQ7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArPSBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwlwQWQtPldsYW5Db3VudGVycy5SZXRyeUNvdW50LnUuTG93UGFydCArPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCArPSBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7CisJfQorCisJLy9pZiAocEFkLT5iU3RhRmlmb1Rlc3QgPT0gVFJVRSkKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQUdHX0NOVCwgJlR4QWdnQ250LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQwLCAmVHhBZ2dDbnQwLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQxLCAmVHhBZ2dDbnQxLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQyLCAmVHhBZ2dDbnQyLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQzLCAmVHhBZ2dDbnQzLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ0LCAmVHhBZ2dDbnQ0LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ1LCAmVHhBZ2dDbnQ1LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ2LCAmVHhBZ2dDbnQ2LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ3LCAmVHhBZ2dDbnQ3LndvcmQpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnQ291bnQgKz0gVHhBZ2dDbnQuZmllbGQuQWdnVHhDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeE5vbkFnZ0NvdW50ICs9IFR4QWdnQ250LmZpZWxkLk5vbkFnZ1R4Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxTVBEVUNvdW50ICs9IFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMk1QRFVDb3VudCArPSBUeEFnZ0NudDAuZmllbGQuQWdnU2l6ZTJDb3VudDsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnM01QRFVDb3VudCArPSBUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzRNUERVQ291bnQgKz0gVHhBZ2dDbnQxLmZpZWxkLkFnZ1NpemU0Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2c1TVBEVUNvdW50ICs9IFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnNk1QRFVDb3VudCArPSBUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTZDb3VudDsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnN01QRFVDb3VudCArPSBUeEFnZ0NudDMuZmllbGQuQWdnU2l6ZTdDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzhNUERVQ291bnQgKz0gVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2c5TVBEVUNvdW50ICs9IFR4QWdnQ250NC5maWVsZC5BZ2dTaXplOUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMTBNUERVQ291bnQgKz0gVHhBZ2dDbnQ0LmZpZWxkLkFnZ1NpemUxMENvdW50OworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxMU1QRFVDb3VudCArPSBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTExQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxMk1QRFVDb3VudCArPSBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTEyQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxM01QRFVDb3VudCArPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTEzQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxNE1QRFVDb3VudCArPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQ7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzE1TVBEVUNvdW50ICs9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTVDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzE2TVBEVUNvdW50ICs9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTZDb3VudDsKKworCQkvLyBDYWxjdWxhdGUgdGhlIHRyYW5zbWl0dGVkIEEtTVBEVSBjb3VudAorCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUxQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUyQ291bnQgLyAyKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250MS5maWVsZC5BZ2dTaXplM0NvdW50IC8gMyk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQxLmZpZWxkLkFnZ1NpemU0Q291bnQgLyA0KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNUNvdW50IC8gNSk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU2Q291bnQgLyA2KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250My5maWVsZC5BZ2dTaXplN0NvdW50IC8gNyk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQgLyA4KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250NC5maWVsZC5BZ2dTaXplOUNvdW50IC8gOSk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ0LmZpZWxkLkFnZ1NpemUxMENvdW50IC8gMTApOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMUNvdW50IC8gMTEpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250NS5maWVsZC5BZ2dTaXplMTJDb3VudCAvIDEyKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250Ni5maWVsZC5BZ2dTaXplMTNDb3VudCAvIDEzKTsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQgLyAxNCk7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE1Q291bnQgLyAxNSk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ3LmZpZWxkLkFnZ1NpemUxNkNvdW50IC8gMTYpOworCX0KKworI2lmZGVmIERCR19ESUFHTk9TRQorCXsKKwkJUnRtcERpYWdTdHJ1Y3QJKnBEaWFnOworCQlDT1VOVEVSX1JBTElOSwkqcFJhbGlua0NvdW50ZXJzOworCQlVQ0hBUgkJCUFycmF5Q3VySWR4LCBpOworCisJCXBEaWFnID0gJnBBZC0+RGlhZ1N0cnVjdDsKKwkJcFJhbGlua0NvdW50ZXJzID0gJnBBZC0+UmFsaW5rQ291bnRlcnM7CisJCUFycmF5Q3VySWR4ID0gcERpYWctPkFycmF5Q3VySWR4OworCisJCWlmIChwRGlhZy0+aW5pdGVkID09IDApCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBEaWFnLCBzaXplb2Yoc3RydWN0IF9SdG1wRGlhZ1N0cmN1dF8pKTsKKwkJCXBEaWFnLT5BcnJheVN0YXJ0SWR4ID0gcERpYWctPkFycmF5Q3VySWR4ID0gMDsKKwkJCXBEaWFnLT5pbml0ZWQgPSAxOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gVHgKKwkJCXBEaWFnLT5UeEZhaWxDbnRbQXJyYXlDdXJJZHhdID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJcERpYWctPlR4QWdnQ250W0FycmF5Q3VySWR4XSA9IFR4QWdnQ250LmZpZWxkLkFnZ1R4Q291bnQ7CisJCQlwRGlhZy0+VHhOb25BZ2dDbnRbQXJyYXlDdXJJZHhdID0gVHhBZ2dDbnQuZmllbGQuTm9uQWdnVHhDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVswXSA9IFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMUNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzFdID0gVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUyQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMl0gPSBUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVszXSA9IFR4QWdnQ250MS5maWVsZC5BZ2dTaXplNENvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzRdID0gVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU1Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bNV0gPSBUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTZDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVs2XSA9IFR4QWdnQ250My5maWVsZC5BZ2dTaXplN0NvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzddID0gVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bOF0gPSBUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTlDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVs5XSA9IFR4QWdnQ250NC5maWVsZC5BZ2dTaXplMTBDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxMF0gPSBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTExQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMTFdID0gVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMkNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzEyXSA9IFR4QWdnQ250Ni5maWVsZC5BZ2dTaXplMTNDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxM10gPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMTRdID0gVHhBZ2dDbnQ3LmZpZWxkLkFnZ1NpemUxNUNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzE1XSA9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTZDb3VudDsKKworCQkJcERpYWctPlJ4Q3JjRXJyQ250W0FycmF5Q3VySWR4XSA9IFJ4U3RhQ250MC5maWVsZC5DcmNFcnI7CisKKwkJCUlOQ19SSU5HX0lOREVYKHBEaWFnLT5BcnJheUN1cklkeCwgIERJQUdOT1NFX1RJTUUpOworCQkJQXJyYXlDdXJJZHggPSBwRGlhZy0+QXJyYXlDdXJJZHg7CisJCQlmb3IgKGkgPTA7IGkgPCA5OyBpKyspCisJCQl7CisJCQkJcERpYWctPlR4RGVzY0NudFtBcnJheUN1cklkeF1baV09IDA7CisJCQkJcERpYWctPlR4U1dRdWVDbnRbQXJyYXlDdXJJZHhdW2ldID0wOworCQkJCXBEaWFnLT5UeE1jc0NudFtBcnJheUN1cklkeF1baV0gPSAwOworCQkJCXBEaWFnLT5SeE1jc0NudFtBcnJheUN1cklkeF1baV0gPSAwOworCQkJfQorCQkJcERpYWctPlR4RGF0YUNudFtBcnJheUN1cklkeF0gPSAwOworCQkJcERpYWctPlR4RmFpbENudFtBcnJheUN1cklkeF0gPSAwOworCQkJcERpYWctPlJ4RGF0YUNudFtBcnJheUN1cklkeF0gPSAwOworCQkJcERpYWctPlJ4Q3JjRXJyQ250W0FycmF5Q3VySWR4XSAgPSAwOworLy8JCQlmb3IgKGkgPSA5OyBpIDwgMTY7IGkrKykKKwkJCWZvciAoaSA9IDk7IGkgPCAyNDsgaSsrKSAvLyAzKjMKKwkJCXsKKwkJCQlwRGlhZy0+VHhEZXNjQ250W0FycmF5Q3VySWR4XVtpXSA9IDA7CisJCQkJcERpYWctPlR4TWNzQ250W0FycmF5Q3VySWR4XVtpXSA9IDA7CisJCQkJcERpYWctPlJ4TWNzQ250W0FycmF5Q3VySWR4XVtpXSA9IDA7Cit9CisKKwkJCWlmIChwRGlhZy0+QXJyYXlDdXJJZHggPT0gcERpYWctPkFycmF5U3RhcnRJZHgpCisJCQkJSU5DX1JJTkdfSU5ERVgocERpYWctPkFycmF5U3RhcnRJZHgsICBESUFHTk9TRV9USU1FKTsKKwkJfQorCisJfQorI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVzZXQgTklDIGZyb20gZXJyb3IKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisJCVJlc2V0IE5JQyBmcm9tIGVycm9yIHN0YXRlCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5JQ1Jlc2V0RnJvbUVycm9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCS8vIFJlc2V0IEJCUCAoYWNjb3JkaW5nIHRvIGFsZXgsIHJlc2V0IEFTSUMgd2lsbCBmb3JjZSByZXNldCBCQlAKKwkvLyBUaGVyZWZvcmUsIHNraXAgdGhlIHJlc2V0IEJCUAorCS8vIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxLCAweDIpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDEpOworCS8vIFJlbW92ZSBBU0lDIGZyb20gcmVzZXQgc3RhdGUKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MCk7CisKKwlOSUNJbml0aWFsaXplQWRhcHRlcihwQWQsIEZBTFNFKTsKKwlOSUNJbml0QXNpY0Zyb21FRVBST00ocEFkKTsKKworCS8vIFN3aXRjaCB0byBjdXJyZW50IGNoYW5uZWwsIHNpbmNlIGR1cmluZyByZXNldCBwcm9jZXNzLCB0aGUgY29ubmVjdGlvbiBzaG91bGQgcmVtYWlucyBvbi4KKwlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJZXJhc2UgODA1MSBmaXJtd2FyZSBpbWFnZSBpbiBNQUMgQVNJQworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgTklDRXJhc2VGaXJtd2FyZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORyBpOworCisJZm9yKGk9MDsgaTxNQVhfRklSTVdBUkVfSU1BR0VfU0laRTsgaSs9NCkKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRklSTVdBUkVfSU1BR0VfQkFTRSArIGksIDApOworCit9LyogRW5kIG9mIE5JQ0VyYXNlRmlybXdhcmUgKi8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUxvYWQgODA1MSBmaXJtd2FyZSBSVDI1NjEuQklOIGZpbGUgaW50byBNQUMgQVNJQworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTICAgICAgICAgZmlybXdhcmUgaW1hZ2UgbG9hZCBvaworCQlORElTX1NUQVRVU19GQUlMVVJFICAgICAgICAgaW1hZ2Ugbm90IGZvdW5kCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTklDTG9hZEZpcm13YXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworI2lmZGVmIEJJTl9JTl9GSUxFCisjZGVmaW5lIE5JQ0xGX0RFRkFVTFRfVVNFKCkJXAorCWZsZ19kZWZhdWx0X2Zpcm1fdXNlID0gVFJVRTsgXAorCXByaW50aygiJXMgLSBVc2UgZGVmYXVsdCBmaXJtd2FyZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlORElTX1NUQVRVUwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQVUNIQVIJCQlzcmM7CisJc3RydWN0IGZpbGUJCSpzcmNmOworCUlOVCAJCQlyZXR2YWwsIG9yZ2ZzdWlkLCBvcmdmc2dpZCwgaTsKKyAgIAltbV9zZWdtZW50X3QJb3JnZnM7CisJUFVDSEFSCQkJcEZpcm13YXJlSW1hZ2U7CisJVUlOVAkJCUZpbGVMZW5ndGggPSAwOworCVVJTlQzMgkJCU1hY1JlZzsKKwlVTE9ORwkJCUluZGV4OworCVVMT05HCQkJZmlybTsKKwlCT09MRUFOCQkJZmxnX2RlZmF1bHRfZmlybV91c2UgPSBGQUxTRTsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiAlc1xuIiwgX19GVU5DVElPTl9fKSk7CisKKwkvKiBpbml0ICovCisJcEZpcm13YXJlSW1hZ2UgPSBOVUxMOworCXNyYyA9IFJUTVBfRklSTVdBUkVfRklMRV9OQU1FOworCisJLyogc2F2ZSB1aWQgYW5kIGdpZCB1c2VkIGZvciBmaWxlc3lzdGVtIGFjY2Vzcy4KKwkgICBzZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkgKi8KKwlvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCW9yZ2ZzZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJY3VycmVudC0+ZnN1aWQgPSBjdXJyZW50LT5mc2dpZCA9IDA7CisgICAgb3JnZnMgPSBnZXRfZnMoKTsKKyAgICBzZXRfZnMoS0VSTkVMX0RTKTsKKworCXBBZC0+RmlybXdhcmVWZXJzaW9uID0gKEZJUk1XQVJFX01BSk9SX1ZFUlNJT04gPDwgOCkgKyBcCisJCQkJCQkgICBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OOworCisKKwkvKiBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIgKi8KKyAgICBwRmlybXdhcmVJbWFnZSA9IGttYWxsb2MoTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKyAgICBpZiAocEZpcm13YXJlSW1hZ2UgPT0gTlVMTCkKKwl7CisJCS8qIGFsbG9jYXRlIGZhaWwsIHVzZSBkZWZhdWx0IGZpcm13YXJlIGFycmF5IGluIGZpcm13YXJlLmggKi8KKwkJcHJpbnRrKCIlcyAtIEFsbG9jYXRlIG1lbW9yeSBmYWlsIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJTklDTEZfREVGQVVMVF9VU0UoKTsKKyAgICB9CisJZWxzZQorCXsKKwkJLyogYWxsb2NhdGUgb2shIHplcm8gdGhlIGZpcm13YXJlIGJ1ZmZlciAqLworCQltZW1zZXQocEZpcm13YXJlSW1hZ2UsIDB4MDAsIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFKTsKKwl9IC8qIEVuZCBvZiBpZiAqLworCisKKwkvKiBpZiBvaywgcmVhZCBmaXJtd2FyZSBmaWxlIGZyb20gKi5iaW4gZmlsZSAqLworCWlmIChmbGdfZGVmYXVsdF9maXJtX3VzZSA9PSBGQUxTRSkKKwl7CisJCWRvCisJCXsKKwkJCS8qIG9wZW4gdGhlIGJpbiBmaWxlICovCisJCQlzcmNmID0gZmlscF9vcGVuKHNyYywgT19SRE9OTFksIDApOworCisJCQlpZiAoSVNfRVJSKHNyY2YpKQorCQkJeworCQkJCXByaW50aygiJXMgLSBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwKKwkJCQkJICAgX19GVU5DVElPTl9fLCAtUFRSX0VSUihzcmNmKSwgc3JjKTsKKwkJCQlOSUNMRl9ERUZBVUxUX1VTRSgpOworCQkJCWJyZWFrOworCQkJfSAvKiBFbmQgb2YgaWYgKi8KKworCQkJLyogdGhlIG9iamVjdCBtdXN0IGhhdmUgYSByZWFkIG1ldGhvZCAqLworCQkJaWYgKChzcmNmLT5mX29wID09IE5VTEwpIHx8IChzcmNmLT5mX29wLT5yZWFkID09IE5VTEwpKQorCQkJeworCQkJCXByaW50aygiJXMgLSAlcyBkb2VzIG5vdCBoYXZlIGEgd3JpdGUgbWV0aG9kXG4iLCBfX0ZVTkNUSU9OX18sIHNyYyk7CisJCQkJTklDTEZfREVGQVVMVF9VU0UoKTsKKwkJCQlicmVhazsKKwkJCX0gLyogRW5kIG9mIGlmICovCisKKwkJCS8qIHJlYWQgdGhlIGZpcm13YXJlIGZyb20gdGhlIGZpbGUgKi5iaW4gKi8KKwkJCUZpbGVMZW5ndGggPSBzcmNmLT5mX29wLT5yZWFkKHNyY2YsCisJCQkJCQkJCQkJICBwRmlybXdhcmVJbWFnZSwKKwkJCQkJCQkJCQkgIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLAorCQkJCQkJCQkJCSAgJnNyY2YtPmZfcG9zKTsKKworCQkJaWYgKEZpbGVMZW5ndGggIT0gTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUpCisJCQl7CisJCQkJcHJpbnRrKCIlczogZXJyb3IgZmlsZSBsZW5ndGggKD0lZCkgaW4gUlQyODYwQVAuQklOXG4iLAorCQkJCQkgICBfX0ZVTkNUSU9OX18sIEZpbGVMZW5ndGgpOworCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUFVDSEFSIHB0ciA9IHBGaXJtd2FyZUltYWdlOworCQkJCVVTSE9SVCBjcmMgPSAweGZmZmY7CisKKworCQkJCS8qIGNhbGN1bGF0ZSBmaXJtd2FyZSBDUkMgKi8KKwkJCQlmb3IoaT0wOyBpPChNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0yKTsgaSsrLCBwdHIrKykKKwkJCQkJY3JjID0gQnl0ZUNSQzE2KEJpdFJldmVyc2UoKnB0ciksIGNyYyk7CisJCQkJLyogRW5kIG9mIGZvciAqLworCisJCQkJaWYgKChwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0yXSAhPSBcCisJCQkJCQkJCShVQ0hBUilCaXRSZXZlcnNlKChVQ0hBUikoY3JjPj44KSkpIHx8CisJCQkJCShwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0xXSAhPSBcCisJCQkJCQkJCShVQ0hBUilCaXRSZXZlcnNlKChVQ0hBUiljcmMpKSkKKwkJCQl7CisJCQkJCS8qIENSQyBmYWlsICovCisJCQkJCXByaW50aygiJXM6IENSQyA9IDB4JTAyeCAweCUwMnggIgorCQkJCQkJICAgImVycm9yLCBzaG91bGQgYmUgMHglMDJ4IDB4JTAyeFxuIiwKKwkJCQkJCSAgIF9fRlVOQ1RJT05fXywKKwkJCQkJCSAgIHBGaXJtd2FyZUltYWdlW01BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLTJdLAorCQkJCQkJICAgcEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtMV0sCisJCQkJCQkgICAoVUNIQVIpKGNyYz4+OCksIChVQ0hBUikoY3JjKSk7CisJCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBmaXJtd2FyZSBpcyBvayAqLworCQkJCQlwQWQtPkZpcm13YXJlVmVyc2lvbiA9IFwKKwkJCQkJCShwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS00XSA8PCA4KSArCisJCQkJCQlwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0zXTsKKworCQkJCQkvKiBjaGVjayBpZiBmaXJtd2FyZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHRvbyBvbGQgKi8KKwkJCQkJaWYgKChwQWQtPkZpcm13YXJlVmVyc2lvbikgPCBcCisJCQkJCQkJCQkJCSgoRklSTVdBUkVfTUFKT1JfVkVSU0lPTiA8PCA4KSArCisJCQkJCQkJCQkgIAkgCSBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OKSkKKwkJCQkJeworCQkJCQkJcHJpbnRrKCIlczogZmlybXdhcmUgdmVyc2lvbiB0b28gb2xkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJCQlicmVhazsKKwkJCQkJfSAvKiBFbmQgb2YgaWYgKi8KKwkJCQl9IC8qIEVuZCBvZiBpZiAqLworCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJCQkgKCJOSUNMb2FkRmlybXdhcmU6IENSQyBvaywgdmVyPSVkLiVkXG4iLAorCQkJCQkJICBwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS00XSwKKwkJCQkJCSAgcEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtM10pKTsKKwkJCX0gLyogRW5kIG9mIGlmIChGaWxlTGVuZ3RoID09IE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFKSAqLworCQkJYnJlYWs7CisJCX0gd2hpbGUoVFJVRSk7CisKKwkJLyogY2xvc2UgZmlybXdhcmUgZmlsZSAqLworCQlpZiAoSVNfRVJSKHNyY2YpKQorCQkJOworCQllbHNlCisJCXsKKwkJCXJldHZhbCA9IGZpbHBfY2xvc2Uoc3JjZiwgTlVMTCk7CisJCQlpZiAocmV0dmFsKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCQkJICgiLS0+IEVycm9yICVkIGNsb3NpbmcgJXNcbiIsIC1yZXR2YWwsIHNyYykpOworCQkJfSAvKiBFbmQgb2YgaWYgKi8KKwkJfSAvKiBFbmQgb2YgaWYgKi8KKwl9IC8qIEVuZCBvZiBpZiAqLworCisKKwkvKiB3cml0ZSBmaXJtd2FyZSB0byBBU0lDICovCisJaWYgKGZsZ19kZWZhdWx0X2Zpcm1fdXNlID09IFRSVUUpCisJeworCQkvKiB1c2UgZGVmYXVsdCBmaW1ld2FyZSwgZnJlZSBhbGxvY2F0ZWQgYnVmZmVyICovCisJCWlmIChwRmlybXdhcmVJbWFnZSAhPSBOVUxMKQorCQkJa2ZyZWUocEZpcm13YXJlSW1hZ2UpOworCQkvKiBFbmQgb2YgaWYgKi8KKworCQkvKiB1c2UgZGVmYXVsdCAqLmJpbiBhcnJheSAqLworCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2U7CisJCUZpbGVMZW5ndGggPSBzaXplb2YoRmlybXdhcmVJbWFnZSk7CisJfSAvKiBFbmQgb2YgaWYgKi8KKworCS8qIGVuYWJsZSBIb3N0IHByb2dyYW0gcmFtIHdyaXRlIHNlbGVjdGlvbiAqLworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgxMDAwMCk7CisKKwlmb3IoaT0wOyBpPEZpbGVMZW5ndGg7IGkrPTQpCisJeworCQlmaXJtID0gcEZpcm13YXJlSW1hZ2VbaV0gKworCQkJICAgKHBGaXJtd2FyZUltYWdlW2krM10gPDwgMjQpICsKKwkJCSAgIChwRmlybXdhcmVJbWFnZVtpKzJdIDw8IDE2KSArCisJCQkgICAocEZpcm13YXJlSW1hZ2VbaSsxXSA8PCA4KTsKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBGSVJNV0FSRV9JTUFHRV9CQVNFICsgaSwgZmlybSk7CisJfSAvKiBFbmQgb2YgZm9yICovCisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIDB4MDAwMDApOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMSk7CisKKwkvKiBpbml0aWFsaXplIEJCUCBSL1cgYWNjZXNzIGFnZW50ICovCisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX0JCUF9BR0VOVCwgMCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAwKTsKKworCWlmIChmbGdfZGVmYXVsdF9maXJtX3VzZSA9PSBGQUxTRSkKKwl7CisJCS8qIHVzZSBmaWxlIGZpcm13YXJlLCBmcmVlIGFsbG9jYXRlZCBidWZmZXIgKi8KKwkJaWYgKHBGaXJtd2FyZUltYWdlICE9IE5VTEwpCisJCQlrZnJlZShwRmlybXdhcmVJbWFnZSk7CisJCS8qIEVuZCBvZiBpZiAqLworCX0gLyogRW5kIG9mIGlmICovCisKKwlzZXRfZnMob3JnZnMpOworCWN1cnJlbnQtPmZzdWlkID0gb3JnZnN1aWQ7CisJY3VycmVudC0+ZnNnaWQgPSBvcmdmc2dpZDsKKyNlbHNlCisKKwlORElTX1NUQVRVUwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQVUNIQVIJCQlwRmlybXdhcmVJbWFnZTsKKwlVTE9ORwkJCUZpbGVMZW5ndGgsIEluZGV4OworCS8vVUxPTkcJCQlmaXJtOworCVVJTlQzMgkJCU1hY1JlZyA9IDA7CisJVUlOVDMyCQkJVmVyc2lvbiA9IChwQWQtPk1BQ1ZlcnNpb24gPj4gMTYpOworCisJcEZpcm13YXJlSW1hZ2UgPSBGaXJtd2FyZUltYWdlOworCUZpbGVMZW5ndGggPSBzaXplb2YoRmlybXdhcmVJbWFnZSk7CisKKwkvLyBOZXcgOGsgYnl0ZSBmaXJtd2FyZSBzaXplIGZvciBSVDMwNzEvUlQzMDcyCisJLy9wcmludGsoIlVzYiBDaGlwXG4iKTsKKwlpZiAoRklSTVdBUkVJTUFHRV9MRU5HVEggPT0gRklSTVdBUkVJTUFHRV9NQVhfTEVOR1RIKQorCS8vVGhlIGZpcm13YXJlIGltYWdlIGNvbnNpc3RzIG9mIHR3byBwYXJ0cy4gT25lIGlzIHRoZSBvcmlnaWFubCBhbmQgdGhlIG90aGVyIGlzIHRoZSBuZXcuCisJLy9Vc2UgU2Vjb25kIFBhcnQKKwl7CisjaWZkZWYgUlQyODcwCisJCWlmICgoVmVyc2lvbiAhPSAweDI4NjApICYmIChWZXJzaW9uICE9IDB4Mjg3MikgJiYgKFZlcnNpb24gIT0gMHgzMDcwKSkKKwkJewkvLyBVc2UgRmlybXdhcmUgVjIuCisJCQkvL3ByaW50aygiS0g6VXNlIE5ldyBWZXJzaW9uLHBhcnQyXG4iKTsKKwkJCXBGaXJtd2FyZUltYWdlID0gKFBVQ0hBUikmRmlybXdhcmVJbWFnZVtGSVJNV0FSRUlNQUdFVjFfTEVOR1RIXTsKKwkJCUZpbGVMZW5ndGggPSBGSVJNV0FSRUlNQUdFVjJfTEVOR1RIOworCQl9CisJCWVsc2UKKwkJeworCQkJLy9wcmludGsoIktIOlVzZSBOZXcgVmVyc2lvbixwYXJ0MVxuIik7CisJCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2U7CisJCQlGaWxlTGVuZ3RoID0gRklSTVdBUkVJTUFHRVYxX0xFTkdUSDsKKwkJfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJLSDogYmluIGZpbGUgc2hvdWxkIGJlIDhLQi5cbiIpKTsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwlSVDI4WFhfV1JJVEVfRklSTVdBUkUocEFkLCBwRmlybXdhcmVJbWFnZSwgRmlsZUxlbmd0aCk7CisKKyNlbmRpZgorCisJLyogY2hlY2sgaWYgTUNVIGlzIHJlYWR5ICovCisJSW5kZXggPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJk1hY1JlZyk7CisKKwkJaWYgKE1hY1JlZyAmIDB4ODApCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCX0gd2hpbGUgKEluZGV4KysgPCAxMDAwKTsKKworICAgIGlmIChJbmRleCA+PSAxMDAwKQorCXsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiTklDTG9hZEZpcm13YXJlOiBNQ1UgaXMgbm90IHJlYWR5XG5cblxuIikpOworCX0gLyogRW5kIG9mIGlmICovCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCSAoIjw9PT0gJXMgKHN0YXR1cz0lZClcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7CisgICAgcmV0dXJuIFN0YXR1czsKK30gLyogRW5kIG9mIE5JQ0xvYWRGaXJtd2FyZSAqLworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlMb2FkIFR4IHJhdGUgc3dpdGNoaW5nIHBhcmFtZXRlcnMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgIGZpcm13YXJlIGltYWdlIGxvYWQgb2sKKwkJTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgIGltYWdlIG5vdCBmb3VuZAorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCVJhdGUgVGFibGUgRm9ybWF0OgorCQkxLiAoQjA6IFZhbGlkIEl0ZW0gbnVtYmVyKSAoQjE6SW5pdGlhbCBpdGVtIGZyb20gemVybykKKwkJMi4gSXRlbSBOdW1iZXIoRGVjKSAgICAgIE1vZGUoSGV4KSAgICAgQ3VycmVudCBNQ1MoRGVjKSAgICBUcmFpblVwKERlYykgICAgVHJhaW5Eb3duKERlYykKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJaWYgIHBTcmMxIGFsbCB6ZXJvIHdpdGggbGVuZ3RoIExlbmd0aCwgcmV0dXJuIDAuCisJCUlmIG5vdCBhbGwgemVybywgcmV0dXJuIDEKKworCUFyZ3VtZW50czoKKwkJcFNyYzEKKworCVJldHVybiBWYWx1ZToKKwkJMToJCQlub3QgYWxsIHplcm8KKwkJMDoJCQlhbGwgemVybworCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUxPTkcJUlRNUE5vdEFsbFplcm8oCisJSU4JUFZPSUQJcFNyYzEsCisJSU4JVUxPTkcJTGVuZ3RoKQoreworCVBVQ0hBUglwTWVtMTsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtMSA9IChQVUNIQVIpIHBTcmMxOworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVuZ3RoOyBJbmRleCsrKQorCXsKKwkJaWYgKHBNZW0xW0luZGV4XSAhPSAweDApCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKEluZGV4ID09IExlbmd0aCkKKwl7CisJCXJldHVybiAoMCk7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiAoMSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ29tcGFyZSB0d28gbWVtb3J5IGJsb2NrCisKKwlBcmd1bWVudHM6CisJCXBTcmMxCQlQb2ludGVyIHRvIGZpcnN0IG1lbW9yeSBhZGRyZXNzCisJCXBTcmMyCQlQb2ludGVyIHRvIHNlY29uZCBtZW1vcnkgYWRkcmVzcworCisJUmV0dXJuIFZhbHVlOgorCQkwOgkJCW1lbW9yeSBpcyBlcXVhbAorCQkxOgkJCXBTcmMxIG1lbW9yeSBpcyBsYXJnZXIKKwkJMjoJCQlwU3JjMiBtZW1vcnkgaXMgbGFyZ2VyCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVTE9ORwlSVE1QQ29tcGFyZU1lbW9yeSgKKwlJTglQVk9JRAlwU3JjMSwKKwlJTglQVk9JRAlwU3JjMiwKKwlJTglVTE9ORwlMZW5ndGgpCit7CisJUFVDSEFSCXBNZW0xOworCVBVQ0hBUglwTWVtMjsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtMSA9IChQVUNIQVIpIHBTcmMxOworCXBNZW0yID0gKFBVQ0hBUikgcFNyYzI7CisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspCisJeworCQlpZiAocE1lbTFbSW5kZXhdID4gcE1lbTJbSW5kZXhdKQorCQkJcmV0dXJuICgxKTsKKwkJZWxzZSBpZiAocE1lbTFbSW5kZXhdIDwgcE1lbTJbSW5kZXhdKQorCQkJcmV0dXJuICgyKTsKKwl9CisKKwkvLyBFcXVhbAorCXJldHVybiAoMCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlaZXJvIG91dCBtZW1vcnkgYmxvY2sKKworCUFyZ3VtZW50czoKKwkJcFNyYzEJCVBvaW50ZXIgdG8gbWVtb3J5IGFkZHJlc3MKKwkJTGVuZ3RoCQlTaXplCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QWmVyb01lbW9yeSgKKwlJTglQVk9JRAlwU3JjLAorCUlOCVVMT05HCUxlbmd0aCkKK3sKKwlQVUNIQVIJcE1lbTsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtID0gKFBVQ0hBUikgcFNyYzsKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXgrKykKKwl7CisJCXBNZW1bSW5kZXhdID0gMHgwMDsKKwl9Cit9CisKK1ZPSUQJUlRNUEZpbGxNZW1vcnkoCisJSU4JUFZPSUQJcFNyYywKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JVUNIQVIJRmlsbCkKK3sKKwlQVUNIQVIJcE1lbTsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtID0gKFBVQ0hBUikgcFNyYzsKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXgrKykKKwl7CisJCXBNZW1bSW5kZXhdID0gRmlsbDsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb3B5IGRhdGEgZnJvbSBtZW1vcnkgYmxvY2sgMSB0byBtZW1vcnkgYmxvY2sgMgorCisJQXJndW1lbnRzOgorCQlwRGVzdAkJUG9pbnRlciB0byBkZXN0aW5hdGlvbiBtZW1vcnkgYWRkcmVzcworCQlwU3JjCQlQb2ludGVyIHRvIHNvdXJjZSBtZW1vcnkgYWRkcmVzcworCQlMZW5ndGgJCUNvcHkgc2l6ZQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUE1vdmVNZW1vcnkoCisJT1VUCVBWT0lECXBEZXN0LAorCUlOCVBWT0lECXBTcmMsCisJSU4JVUxPTkcJTGVuZ3RoKQoreworCVBVQ0hBUglwTWVtMTsKKwlQVUNIQVIJcE1lbTI7CisJVUlOVAlJbmRleDsKKworCUFTU0VSVCgoTGVuZ3RoPT0wKSB8fCAocERlc3QgJiYgcFNyYykpOworCisJcE1lbTEgPSAoUFVDSEFSKSBwRGVzdDsKKwlwTWVtMiA9IChQVUNIQVIpIHBTcmM7CisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspCisJeworCQlwTWVtMVtJbmRleF0gPSBwTWVtMltJbmRleF07CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdGlhbGl6ZSBwb3J0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlVc2VyQ2ZnSW5pdCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKy8vCUVEQ0FfUEFSTSBEZWZhdWx0RWRjYVBhcm07CisgICAgVUlOVCBrZXlfaW5kZXgsIGJzc19pbmRleDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBVc2VyQ2ZnSW5pdFxuIikpOworCisJLy8KKwkvLyAgcGFydCBJLiBpbnRpYWxpemUgY29tbW9uIGNvbmZpZ3VyYXRpb24KKwkvLworI2lmZGVmIFJUMjg3MAorCXBBZC0+QnVsa091dFJlcSA9IDA7CisKKwlwQWQtPkJ1bGtPdXRDb21wbGV0ZSA9IDA7CisJcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlciA9IDA7CisJcEFkLT5CdWxrT3V0Q29tcGxldGVDYW5jZWwgPSAwOworCXBBZC0+QnVsa0luUmVxID0gMDsKKwlwQWQtPkJ1bGtJbkNvbXBsZXRlID0gMDsKKwlwQWQtPkJ1bGtJbkNvbXBsZXRlRmFpbCA9IDA7CisKKwkvL3BBZC0+UXVpY2tUaW1lclAgPSAxMDA7CisJLy9wQWQtPlR1cm5BZ2dyQnVsa0luQ291bnQgPSAwOworCXBBZC0+YlVzYlR4QnVsa0FnZ3JlID0gMDsKKworCS8vIGluaXQgYXMgdW5zZWQgdmFsdWUgdG8gZW5zdXJlIGRyaXZlciB3aWxsIHNldCB0byBNQ1Ugb25jZS4KKwlwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSAweEZGOworCisJcEFkLT5Db21tb25DZmcuTWF4UGt0T25lVHhCdWxrID0gMjsKKwlwQWQtPkNvbW1vbkNmZy5UeEJ1bGtGYWN0b3IgPSAxOworCXBBZC0+Q29tbW9uQ2ZnLlJ4QnVsa0ZhY3RvciA9MTsKKworCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXIgPSAxMDA7IC8vbVcKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLCBzaXplb2YocEFkLT5Db21tb25DZmcuSU9UZXN0UGFybSkpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJZm9yKGtleV9pbmRleD0wOyBrZXlfaW5kZXg8U0hBUkVfS0VZX05VTTsga2V5X2luZGV4KyspCisJeworCQlmb3IoYnNzX2luZGV4ID0gMDsgYnNzX2luZGV4IDwgTUFYX01CU1NJRF9OVU07IGJzc19pbmRleCsrKQorCQl7CisJCQlwQWQtPlNoYXJlZEtleVtic3NfaW5kZXhdW2tleV9pbmRleF0uS2V5TGVuID0gMDsKKwkJCXBBZC0+U2hhcmVkS2V5W2Jzc19pbmRleF1ba2V5X2luZGV4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKyAgICAgICAgfSAvKiBFbmQgb2YgZm9yICovCisgICAgfSAvKiBFbmQgb2YgZm9yICovCisKKwlwQWQtPkVlcHJvbUFjY2VzcyA9IEZBTFNFOworCisJcEFkLT5BbnRlbm5hLndvcmQgPSAwOworCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOworCisJcEFkLT5MZWRDbnRsLndvcmQgPSAwOworCisJcEFkLT5iQXV0b1R4QWdjQSA9IEZBTFNFOwkJCS8vIERlZmF1bHQgaXMgT0ZGCisJcEFkLT5iQXV0b1R4QWdjRyA9IEZBTFNFOwkJCS8vIERlZmF1bHQgaXMgT0ZGCisJcEFkLT5SZkljVHlwZSA9IFJGSUNfMjgyMDsKKworCS8vIEluaXQgdGltZXIgZm9yIHJlc2V0IGNvbXBsZXRlIGV2ZW50CisJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAxOworCXBBZC0+YkZvcmNlUHJpbnRUWCA9IEZBTFNFOworCXBBZC0+YkZvcmNlUHJpbnRSWCA9IEZBTFNFOworCXBBZC0+YlN0YUZpZm9UZXN0ID0gRkFMU0U7CisJcEFkLT5iUHJvdGVjdGlvblRlc3QgPSBGQUxTRTsKKwlwQWQtPmJIQ0NBVGVzdCA9IEZBTFNFOworCXBBZC0+Ykdlbk9uZUhDQ0EgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5Ec2lmcyA9IDEwOyAgICAgIC8vIGluIHVuaXRzIG9mIHVzZWMKKwlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyID0gMTAwOyAvL21XCisJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAweGZmZmZmZmZmOyAvLyBBVVRPCisJcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQgPSAweGZmZmZmZmZmOyAvLyBBVVRPCisJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFJ0ODAyXzExUHJlYW1ibGVBdXRvOyAvLyB1c2UgTG9uZyBwcmVhbWJsZSBvbiBUWCBieSBkZWZhdXQKKwlwQWQtPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gMjM0NzsKKwlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IDIzNDY7CisJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMDsgICAgLy8gMDogQVVUTworCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gVFJVRTsgLy8wOworCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAweGZmOyAgICAgLy8gdW5rbm93bgorCXBBZC0+Q29tbW9uQ2ZnLkJhbmRTdGF0ZSA9IFVOS05PV05fQkFORDsKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCA9IDEwOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNTQ291bnQgPSAwOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX05PUk1BTF9NT0RFOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNoTW92aW5nVGltZSA9IDY1OworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkxvbmdQdWxzZVJhZGFyVGggPSAzOworCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLmJOZWVkU2VuZFRyaWdnZXJGcmFtZSA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50ID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuYkNvdW50cnlGbGFnID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSAwOworCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMDsKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkJlYWNvblR4V0ksIHNpemVvZihwQWQtPkJlYWNvblR4V0kpKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksIHNpemVvZihwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkpKTsKKwlwQWQtPkhUQ0VuYWJsZSA9IEZBTFNFOworCXBBZC0+YkJyb2FkQ29tSFQgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5iUmRnID0gRkFMU0U7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhblBhc3NpdmVEd2VsbCA9IGRvdDExT0JTU1NjYW5QYXNzaXZlRHdlbGw7CS8vIFVuaXQgOiBUVS4gNX4xMDAwCisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhbkFjdGl2ZUR3ZWxsID0gZG90MTFPQlNTU2NhbkFjdGl2ZUR3ZWxsOwkvLyBVbml0IDogVFUuIDEwfjEwMDAKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoVHJpZ2dlclNjYW5JbnQgPSBkb3QxMUJTU1dpZHRoVHJpZ2dlclNjYW5JbnRlcnZhbDsJLy8gVW5pdCA6IFNlY29uZAorCXBBZC0+Q29tbW9uQ2ZnLkRvdDExT0Jzc1NjYW5QYXNzaXZlVG90YWxQZXJDaGFubmVsID0gZG90MTFPQlNTU2NhblBhc3NpdmVUb3RhbFBlckNoYW5uZWw7CS8vIFVuaXQgOiBUVS4gMjAwfjEwMDAwCisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbCA9IGRvdDExT0JTU1NjYW5BY3RpdmVUb3RhbFBlckNoYW5uZWw7CS8vIFVuaXQgOiBUVS4gMjB+MTAwMDAKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheUZhY3RvciA9IGRvdDExQlNTV2lkdGhDaGFubmVsVHJhbnNhY3Rpb25EZWxheUZhY3RvcjsKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMU9Cc3NTY2FuQWN0aXZpdHlUaHJlID0gZG90MTFCU1NTY2FuQWN0aXZpdHlUaHJlc2hvbGQ7CS8vIFVuaXQgOiBwZXJjZW50YWdlCisJcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXkgPSAocEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50ICogcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3IpOworI2VuZGlmICAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLCBzaXplb2YocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKSk7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gTU1QU19FTkFCTEU7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gSU1NRURfQkE7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OyAvLzMyOworCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5UeEJBV2luTGltaXQgPSA2NDsgLy8zMjsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVXNlckNmZ0luaXQuIEJBQ2FwYWJpbGl0eSA9IDB4JXhcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkKSk7CisKKwlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJQkFUYWJsZUluaXQocEFkLCAmcEFkLT5CQVRhYmxlKTsKKworCXBBZC0+Q29tbW9uQ2ZnLmJFeHRDaGFubmVsU3dpdGNoQW5ub3VuY2VtZW50ID0gMTsKKwlwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0ID0gMTsKKwlwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlID0gVFJVRTsKKwlwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID0gRkFMU0U7CisKKwlwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZSA9IDc7CisKKwlwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkud29yZCA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkvL3BBZC0+Q29tbW9uQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKwkvL3BBZC0+Q29tbW9uQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCS8vcEFkLT5Db21tb25DZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV82OworCisJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IE1DU19SQVRFXzY7CisJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLkJXID0gQldfMjA7CisJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisKKwlwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPSAxMDA7ICAgICAvLyBpbiBtU2VjCisKKwkvLworCS8vIHBhcnQgSUkuIGludGlhbGl6ZSBTVEEgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorCS8vCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCVJYX0ZJTFRFUl9TRVRfRkxBRyhwQWQsIGZSWF9GSUxURVJfQUNDRVBUX0RJUkVDVCk7CisJCVJYX0ZJTFRFUl9DTEVBUl9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJUlhfRklMVEVSX1NFVF9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfQlJPQURDQVNUKTsKKwkJUlhfRklMVEVSX1NFVF9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfQUxMX01VTFRJQ0FTVCk7CisKKwkJcEFkLT5TdGFDZmcuUHNtID0gUFdSX0FDVElWRTsKKworCQlwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CisJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJcEFkLT5TdGFDZmcuYk1peENpcGhlciA9IEZBTFNFOworCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAwOworCisJCS8vIDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkJcEFkLT5TdGFDZmcuUHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyODAyMXhXRVA7CisJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gMDsKKwkJcEFkLT5TdGFDZmcuTWljRXJyQ250ICAgICAgICA9IDA7CisJCXBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jICAgICAgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgICAgICAgICA9IFNTX05PVFVTRTsKKworCQlwQWQtPkNvbW1vbkNmZy5OZGlzUmFkaW9TdGF0ZU9mZiA9IEZBTFNFOwkJLy8gTmV3IHRvIHN1cHBvcnQgbWljcm9zb2Z0IGRpc2FibGUgcmFkaW8gd2l0aCBPSUQgY29tbWFuZAorCisJCXBBZC0+U3RhQ2ZnLlJzc2lUcmlnZ2VyID0gMDsKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUsIHNpemVvZihSU1NJX1NBTVBMRSkpOworCQlwQWQtPlN0YUNmZy5Sc3NpVHJpZ2dlck1vZGUgPSBSU1NJX1RSSUdHRVJFRF9VUE9OX0JFTE9XX1RIUkVTSE9MRDsKKwkJcEFkLT5TdGFDZmcuQXRpbVdpbiA9IDA7CisJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7Ly9kZWZhdWx0IGxpc3RlbiBjb3VudDsKKwkJcEFkLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19JTkZSQTsgIC8vIEJTU19JTkZSQSBvciBCU1NfQURIT0Mgb3IgQlNTX01PTklUT1IKKwkJcEFkLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IEZBTFNFOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV0FLRVVQX05PVyk7CisKKwkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworCX0KKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlwQWQtPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSA9IFJ0ODAyXzExX0RfTm9uZTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBnbG9iYWwgdmFyaWFibGVzIG1YWFhYIHVzZWQgaW4gTUFDIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzCisJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKKworCS8vIFBIWSBzcGVjaWZpY2F0aW9uCisJcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IFBIWV8xMUJHX01JWEVEOwkJLy8gZGVmYXVsdCBQSFkgbW9kZQorCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7ICAvLyBDQ0sgdXNlIExPTkcgcHJlYW1ibGUKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyB1c2VyIGRlc2lyZWQgcG93ZXIgbW9kZQorCQlwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKwkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworCQlwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID0gRkFMU0U7CisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJLy8gQ0NYIHYxLjAgcmVsZWF0ZWQgaW5pdCB2YWx1ZQorCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLkxlYXBBdXRoVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihMZWFwQXV0aFRpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKwkJcEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID0gQ0lTQ09fQXV0aE1vZGVMRUFQTm9uZTsKKwkJcEFkLT5TdGFDZmcuYkNraXBPbiA9IEZBTFNFOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKSwgcEFkLCBGQUxTRSk7CisJCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IEZBTFNFOworCisJCS8vIFBhdGNoIGZvciBOZHRlc3QKKwkJcEFkLT5TdGFDZmcuU2NhbkNudCA9IDA7CisKKwkJLy8gQ0NYIDIuMCBjb250cm9sIGZsYWcgaW5pdAorCQlwQWQtPlN0YUNmZy5DQ1hFbmFibGUgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSA9IE1TUk5fVFlQRV9VTlVTRUQ7CisJCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01pbgk9IDQ7CisJCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01heAk9IDEwOworCisJCXBBZC0+U3RhQ2ZnLmJId1JhZGlvICA9IFRSVUU7IC8vIERlZmF1bHQgSGFyZHdhcmUgUmFkaW8gc3RhdHVzIGlzIE9uCisJCXBBZC0+U3RhQ2ZnLmJTd1JhZGlvICA9IFRSVUU7IC8vIERlZmF1bHQgU29mdHdhcmUgUmFkaW8gc3RhdHVzIGlzIE9uCisJCXBBZC0+U3RhQ2ZnLmJSYWRpbyAgICA9IFRSVUU7IC8vIGJId1JhZGlvICYmIGJTd1JhZGlvCisJCXBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID0gRkFMU0U7CQkvLyBEZWZhdWx0IGlzIE9GRgorCQlwQWQtPlN0YUNmZy5iU2hvd0hpZGRlblNTSUQgPSBGQUxTRTsJCS8vIERlZmF1bHQgbm8gc2hvdworCisJCS8vIE5pdHJvIG1vZGUgY29udHJvbAorCQlwQWQtPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisKKwkJLy8gU2F2ZSB0aGUgaW5pdCB0aW1lIGFzIGxhc3Qgc2NhbiB0aW1lLCB0aGUgc3lzdGVtIHNob3VsZCBkbyBzY2FuIGFmdGVyIDIgc2Vjb25kcy4KKwkJLy8gVGhpcyBwYXRjaCBpcyBmb3IgZHJpdmVyIHdha2UgdXAgZnJvbSBzdGFuZGJ5IG1vZGUsIHN5c3RlbSB3aWxsIGRvIHNjYW4gcmlnaHQgYXdheS4KKwkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gMDsKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5uaWNrbmFtZSwgSVdfRVNTSURfTUFYX1NJWkUrMSk7CisJCXNwcmludGYocEFkLT5uaWNrbmFtZSwgIiVzIiwgU1RBX05JQ19ERVZJQ0VfTkFNRSk7CisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5TdGFDZmcuV3BhRGlzYXNzb2NBbmRCbG9ja0Fzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyksIHBBZCwgRkFMU0UpOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJcEFkLT5TdGFDZmcuSUVFRTgwMjFYID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLklFRUU4MDIxeF9yZXF1aXJlZF9rZXlzID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEU7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFOworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gRGVmYXVsdCBmb3IgZXh0cmEgaW5mb3JtYXRpb24gaXMgbm90IHZhbGlkCisJcEFkLT5FeHRyYUluZm8gPSBFWFRSQV9JTkZPX0NMRUFSOworCisJLy8gRGVmYXVsdCBDb25maWcgY2hhbmdlIGZsYWcKKwlwQWQtPmJDb25maWdDaGFuZ2VkID0gRkFMU0U7CisKKwkvLworCS8vIHBhcnQgSUlJLiBBUCBjb25maWd1cmF0aW9ucworCS8vCisKKworCS8vCisJLy8gcGFydCBJVi4gb3RoZXJzCisJLy8KKwkvLyBkeW5hbWljIEJCUCBSNjY6c2Vuc2liaXR5IHR1bmluZyB0byBvdmVyY29tZSBiYWNrZ3JvdW5kIG5vaXNlCisJcEFkLT5CYnBUdW5pbmcuYkVuYWJsZSAgICAgICAgICAgICAgICA9IFRSVUU7CisJcEFkLT5CYnBUdW5pbmcuRmFsc2VDY2FMb3dlclRocmVzaG9sZCA9IDEwMDsKKwlwQWQtPkJicFR1bmluZy5GYWxzZUNjYVVwcGVyVGhyZXNob2xkID0gNTEyOworCXBBZC0+QmJwVHVuaW5nLlI2NkRlbHRhICAgICAgICAgICAgICAgPSA0OworCXBBZC0+TWxtZS5iRW5hYmxlQXV0b0FudGVubmFDaGVjayA9IFRSVUU7CisKKwkvLworCS8vIEFsc28gaW5pdGlhbCBSNjZDdXJyZW50VmFsdWUsIFJUVVNCUmVzdW1lTXNkdVRyYW5zbWlzc2lvbiBtaWdodCB1c2UgdGhpcyB2YWx1ZS4KKwkvLyBpZiBub3QgaW5pdGlhbCB0aGlzIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIDAuCisJLy8KKwlwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgPSAweDM4OworCisJcEFkLT5CYnA5NCA9IEJCUFI5NF9ERUZBVUxUOworCXBBZC0+QmJwRm9yQ0NLID0gRkFMU0U7CisKKwkvLyBEZWZhdWx0IGlzIEZBTFNFIGZvciB0ZXN0IGJpdCAxCisJLy9wQWQtPmJUZXN0MSA9IEZBTFNFOworCisJLy8gaW5pdGlhbGl6ZSBNQUMgdGFibGUgYW5kIGFsbG9jYXRlIHNwaW4gbG9jaworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1hY1RhYiwgc2l6ZW9mKE1BQ19UQUJMRSkpOworCUluaXRpYWxpemVRdWV1ZUhlYWRlcigmcEFkLT5NYWNUYWIuTWNhc3RQc1F1ZXVlKTsKKwlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCS8vUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPlJFQ0JBVGltZXIsIFJFQ0JBVGltZXJUaW1lb3V0LCBwQWQsIFRSVUUpOworCS8vUlRNUFNldFRpbWVyKCZwQWQtPlJFQ0JBVGltZXIsIFJFT1JERVJfRVhFQ19JTlRWKTsKKworI2lmZGVmIFJBTElOS19BVEUKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5hdGUsIHNpemVvZihBVEVfSU5GTykpOworCXBBZC0+YXRlLk1vZGUgPSBBVEVfU1RPUDsKKwlwQWQtPmF0ZS5UeENvdW50ID0gMjAwOy8qIHRvIGV4Y2VlZCBUWF9SSU5HX1NJWkUgLi4uICovCisJcEFkLT5hdGUuVHhMZW5ndGggPSAxMDI0OworCXBBZC0+YXRlLlR4V0kuU2hvcnRHSSA9IDA7Ly8gTE9ORyBHSSA6IDgwMCBucworCXBBZC0+YXRlLlR4V0kuUEhZTU9ERSA9IE1PREVfQ0NLOworCXBBZC0+YXRlLlR4V0kuTUNTID0gMzsKKwlwQWQtPmF0ZS5UeFdJLkJXID0gQldfMjA7CisJcEFkLT5hdGUuQ2hhbm5lbCA9IDE7CisJcEFkLT5hdGUuUUlEID0gUUlEX0FDX0JFOworCXBBZC0+YXRlLkFkZHIxWzBdID0gMHgwMDsKKwlwQWQtPmF0ZS5BZGRyMVsxXSA9IDB4MTE7CisJcEFkLT5hdGUuQWRkcjFbMl0gPSAweDIyOworCXBBZC0+YXRlLkFkZHIxWzNdID0gMHhBQTsKKwlwQWQtPmF0ZS5BZGRyMVs0XSA9IDB4QkI7CisJcEFkLT5hdGUuQWRkcjFbNV0gPSAweENDOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+YXRlLkFkZHIyLCBwQWQtPmF0ZS5BZGRyMSwgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPmF0ZS5BZGRyMywgcEFkLT5hdGUuQWRkcjEsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJcEFkLT5hdGUuYlJ4RmVyID0gMDsKKwlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKKwlwQWQtPmF0ZS5BdGVQaWQgPSAwOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisKKwlwQWQtPkNvbW1vbkNmZy5iV2lGaVRlc3QgPSBGQUxTRTsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIFVzZXJDZmdJbml0XG4iKSk7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitVQ0hBUiBCdG9IKGNoYXIgY2gpCit7CisJaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHJldHVybiAoY2ggLSAnMCcpOyAgICAgICAgLy8gSGFuZGxlIG51bWVyYWxzCisJaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHJldHVybiAoY2ggLSAnQScgKyAweEEpOyAgLy8gSGFuZGxlIGNhcGl0b2wgaGV4IGRpZ2l0cworCWlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSByZXR1cm4gKGNoIC0gJ2EnICsgMHhBKTsgIC8vIEhhbmRsZSBzbWFsbCBoZXggZGlnaXRzCisJcmV0dXJuKDI1NSk7Cit9CisKKy8vCisvLyAgRlVOQ1RJT046IEF0b0goY2hhciAqLCBVQ0hBUiAqLCBpbnQpCisvLworLy8gIFBVUlBPU0U6ICBDb252ZXJ0cyBhc2NpaSBzdHJpbmcgdG8gbmV0d29yayBvcmRlciBoZXgKKy8vCisvLyAgUEFSQU1FVEVSUzoKKy8vICAgIHNyYyAgICAtIHBvaW50ZXIgdG8gaW5wdXQgYXNjaWkgc3RyaW5nCisvLyAgICBkZXN0ICAgLSBwb2ludGVyIHRvIG91dHB1dCBoZXgKKy8vICAgIGRlc3RsZW4gLSBzaXplIG9mIGRlc3QKKy8vCisvLyAgQ09NTUVOVFM6CisvLworLy8gICAgMiBhc2NpaSBieXRlcyBtYWtlIGEgaGV4IGJ5dGUgc28gbXVzdCBwdXQgMXN0IGFzY2lpIGJ5dGUgb2YgcGFpcgorLy8gICAgaW50byB1cHBlciBuaWJibGUgYW5kIDJuZCBhc2NpaSBieXRlIG9mIHBhaXIgaW50byBsb3dlciBuaWJibGUuCisvLworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwordm9pZCBBdG9IKGNoYXIgKiBzcmMsIFVDSEFSICogZGVzdCwgaW50IGRlc3RsZW4pCit7CisJY2hhciAqIHNyY3B0cjsKKwlQVUNIQVIgZGVzdFRlbXA7CisKKwlzcmNwdHIgPSBzcmM7CisJZGVzdFRlbXAgPSAoUFVDSEFSKSBkZXN0OworCisJd2hpbGUoZGVzdGxlbi0tKQorCXsKKwkJKmRlc3RUZW1wID0gQnRvSCgqc3JjcHRyKyspIDw8IDQ7ICAgIC8vIFB1dCAxc3QgYXNjaWkgYnl0ZSBpbiB1cHBlciBuaWJibGUuCisJCSpkZXN0VGVtcCArPSBCdG9IKCpzcmNwdHIrKyk7ICAgICAgLy8gQWRkIDJuZCBhc2NpaSBieXRlIHRvIGFib3ZlLgorCQlkZXN0VGVtcCsrOworCX0KK30KKworVk9JRAlSVE1QUGF0Y2hNYWNCYnBCdWcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUxPTkcJSW5kZXg7CisKKwkvLyBJbml0aWFsaXplIEJCUCByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTlVNX0JCUF9SRUdfUEFSTVM7IEluZGV4KyspCisJeworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLCAoVUNIQVIpQkJQUmVnVGFibGVbSW5kZXhdLlZhbHVlKTsKKwl9CisKKwkvLyBJbml0aWFsaXplIFJGIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCS8vIFJlLWluaXQgQkJQIHJlZ2lzdGVyIGZyb20gRUVQUk9NIHZhbHVlCisJTklDSW5pdEFzaWNGcm9tRUVQUk9NKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0IHRpbWVyIG9iamVjdHMKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwVGltZXIJCQkJVGltZXIgc3RydWN0dXJlCisJCXBUaW1lckZ1bmMJCQlGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGltZXIgZXhwaXJlZAorCQlSZXBlYXQJCQkJVHVyZSBmb3IgcGVyaW9kIHRpbWVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBJbml0VGltZXIoCisJSU4JUFJUTVBfQURBUFRFUgkJCXBBZCwKKwlJTglQUkFMSU5LX1RJTUVSX1NUUlVDVAlwVGltZXIsCisJSU4JUFZPSUQJCQkJCXBUaW1lckZ1bmMsCisJSU4JUFZPSUQJCQkJCXBEYXRhLAorCUlOCUJPT0xFQU4JCQkJCVJlcGVhdCkKK3sKKwkvLworCS8vIFNldCBWYWxpZCB0byBUUlVFIGZvciBsYXRlciB1c2VkLgorCS8vIEl0IHdpbGwgY3Jhc2ggaWYgd2UgY2FuY2VsIGEgdGltZXIgb3Igc2V0IGEgdGltZXIKKwkvLyB0aGF0IHdlIGhhdmVuJ3QgaW5pdGlhbGl6ZSBiZWZvcmUuCisJLy8KKwlwVGltZXItPlZhbGlkICAgICAgPSBUUlVFOworCisJcFRpbWVyLT5QZXJpb2RpY1R5cGUgPSBSZXBlYXQ7CisJcFRpbWVyLT5TdGF0ZSAgICAgID0gRkFMU0U7CisJcFRpbWVyLT5jb29raWUgPSAoVUxPTkcpIHBEYXRhOworCisjaWZkZWYgUlQyODcwCisJcFRpbWVyLT5wQWQgPSBwQWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlSVE1QX09TX0luaXRfVGltZXIocEFkLAkmcFRpbWVyLT5UaW1lck9iaiwJcFRpbWVyRnVuYywgKFBWT0lEKSBwVGltZXIpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdCB0aW1lciBvYmplY3RzCisKKwlBcmd1bWVudHM6CisJCXBUaW1lcgkJCQlUaW1lciBzdHJ1Y3R1cmUKKwkJVmFsdWUJCQkJVGltZXIgdmFsdWUgaW4gbWlsbGlzZWNvbmRzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCVRvIHVzZSB0aGlzIHJvdXRpbmUsIG11c3QgY2FsbCBSVE1QSW5pdFRpbWVyIGJlZm9yZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFNldFRpbWVyKAorCUlOCVBSQUxJTktfVElNRVJfU1RSVUNUCXBUaW1lciwKKwlJTglVTE9ORwkJCQkJVmFsdWUpCit7CisJaWYgKHBUaW1lci0+VmFsaWQpCisJeworCQlwVGltZXItPlRpbWVyVmFsdWUgPSBWYWx1ZTsKKwkJcFRpbWVyLT5TdGF0ZSAgICAgID0gRkFMU0U7CisJCWlmIChwVGltZXItPlBlcmlvZGljVHlwZSA9PSBUUlVFKQorCQl7CisJCQlwVGltZXItPlJlcGVhdCA9IFRSVUU7CisJCQlSVE1QX1NldFBlcmlvZGljVGltZXIoJnBUaW1lci0+VGltZXJPYmosIFZhbHVlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBUaW1lci0+UmVwZWF0ID0gRkFMU0U7CisJCQlSVE1QX09TX0FkZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgVmFsdWUpOworCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlJUTVBTZXRUaW1lciBmYWlsZWQsIFRpbWVyIGhhc24ndCBiZWVuIGluaXRpYWxpemUhXG4iKSk7CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0IHRpbWVyIG9iamVjdHMKKworCUFyZ3VtZW50czoKKwkJcFRpbWVyCQkJCVRpbWVyIHN0cnVjdHVyZQorCQlWYWx1ZQkJCQlUaW1lciB2YWx1ZSBpbiBtaWxsaXNlY29uZHMKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKwkJVG8gdXNlIHRoaXMgcm91dGluZSwgbXVzdCBjYWxsIFJUTVBJbml0VGltZXIgYmVmb3JlLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QTW9kVGltZXIoCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCUlOCVVMT05HCQkJCQlWYWx1ZSkKK3sKKwlCT09MRUFOCUNhbmNlbDsKKworCWlmIChwVGltZXItPlZhbGlkKQorCXsKKwkJcFRpbWVyLT5UaW1lclZhbHVlID0gVmFsdWU7CisJCXBUaW1lci0+U3RhdGUgICAgICA9IEZBTFNFOworCQlpZiAocFRpbWVyLT5QZXJpb2RpY1R5cGUgPT0gVFJVRSkKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKHBUaW1lciwgJkNhbmNlbCk7CisJCQlSVE1QU2V0VGltZXIocFRpbWVyLCBWYWx1ZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX09TX01vZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgVmFsdWUpOworCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlJUTVBNb2RUaW1lciBmYWlsZWQsIFRpbWVyIGhhc24ndCBiZWVuIGluaXRpYWxpemUhXG4iKSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FuY2VsIHRpbWVyIG9iamVjdHMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCTEuKSBUbyB1c2UgdGhpcyByb3V0aW5lLCBtdXN0IGNhbGwgUlRNUEluaXRUaW1lciBiZWZvcmUuCisJCTIuKSBSZXNldCBOSUMgdG8gaW5pdGlhbCBzdGF0ZSBBUyBJUyBzeXN0ZW0gYm9vdCB1cCB0aW1lLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QQ2FuY2VsVGltZXIoCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCU9VVAlCT09MRUFOCQkJCQkqcENhbmNlbGxlZCkKK3sKKwlpZiAocFRpbWVyLT5WYWxpZCkKKwl7CisJCWlmIChwVGltZXItPlN0YXRlID09IEZBTFNFKQorCQkJcFRpbWVyLT5SZXBlYXQgPSBGQUxTRTsKKwkJCVJUTVBfT1NfRGVsX1RpbWVyKCZwVGltZXItPlRpbWVyT2JqLCBwQ2FuY2VsbGVkKTsKKworCQlpZiAoKnBDYW5jZWxsZWQgPT0gVFJVRSkKKwkJCXBUaW1lci0+U3RhdGUgPSBUUlVFOworCisjaWZkZWYgUlQyODcwCisJCS8vIFdlIG5lZWQgdG8gZ28tdGhyb3VnaCB0aGUgVGltZXJRIHRvIGZpbmRvdXQgdGhpcyB0aW1lciBoYW5kbGVyIGFuZCByZW1vdmUgaXQgaWYKKwkJLy8JCWl0J3Mgc3RpbGwgd2FpdGluZyBmb3IgZXhlY3V0aW9uLgorCisJCVJUMjg3MF9UaW1lclFfUmVtb3ZlKHBUaW1lci0+cEFkLCBwVGltZXIpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKwllbHNlCisJeworCQkvLworCQkvLyBOZGlzTUNhbmNlbFRpbWVyIGp1c3QgY2FuY2VkIHRoZSB0aW1lciBhbmQgbm90IG1lYW4gcmVsZWFzZSB0aGUgdGltZXIuCisJCS8vIEFuZCBkb24ndCBzZXQgdGhlICJWYWxpZCIgdG8gRmFsc2UuIFNvIHRoYXQgd2UgY2FuIHVzZSB0aGlzIHRpbWVyIGFnYWluLgorCQkvLworCQlEQkdQUklOVF9FUlIoKCJSVE1QQ2FuY2VsVGltZXIgZmFpbGVkLCBUaW1lciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplIVxuIikpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBMRUQgU3RhdHVzCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJU3RhdHVzCQkJCQlMRUQgU3RhdHVzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QU2V0TEVEKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBVQ0hBUgkJCVN0YXR1cykKK3sKKwkvL1VMT05HCQkJZGF0YTsKKwlVQ0hBUgkJCUhpZ2hCeXRlID0gMDsKKwlVQ0hBUgkJCUxvd0J5dGU7CisKKy8vIEluIEFURSBtb2RlIG9mIFJUMjg2MCBBUC9TVEEsIHdlIGhhdmUgZXJhc2VkIDgwNTEgZmlybXdhcmUuCisvLyBTbyBMRUQgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gQVRFIGlzIHJ1bm5pbmcuCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCUxvd0J5dGUgPSBwQWQtPkxlZENudGwuZmllbGQuTGVkTW9kZSYweDdmOworCXN3aXRjaCAoU3RhdHVzKQorCXsKKwkJY2FzZSBMRURfTElOS19ET1dOOgorCQkJSGlnaEJ5dGUgPSAweDIwOworCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7CisJCQlwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSAwOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX0xJTktfVVA6CisJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorCQkJCUhpZ2hCeXRlID0gMHhhMDsKKwkJCWVsc2UKKwkJCQlIaWdoQnl0ZSA9IDB4NjA7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworCQljYXNlIExFRF9SQURJT19PTjoKKwkJCUhpZ2hCeXRlID0gMHgyMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX0hBTFQ6CisJCQlMb3dCeXRlID0gMDsgLy8gRHJpdmVyIHNldHMgTUFDIHJlZ2lzdGVyIGFuZCBNQUMgY29udHJvbHMgTEVECisJCWNhc2UgTEVEX1JBRElPX09GRjoKKwkJCUhpZ2hCeXRlID0gMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgTEVEX1dQUzoKKwkJCUhpZ2hCeXRlID0gMHgxMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX09OX1NJVEVfU1VSVkVZOgorCQkJSGlnaEJ5dGUgPSAweDA4OworCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7CisJCQlicmVhazsKKwkJY2FzZSBMRURfUE9XRVJfVVA6CisJCQlIaWdoQnl0ZSA9IDB4MDQ7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJSVE1QU2V0TEVEOjpVbmtub3duIFN0YXR1cyAlZFxuIiwgU3RhdHVzKSk7CisJCQlicmVhazsKKwl9CisKKyAgICAvLworCS8vIEtlZXAgTEVEIHN0YXR1cyBmb3IgTEVEIFNpdGVTdXJ2ZXkgbW9kZS4KKwkvLyBBZnRlciBTaXRlU3VydmV5LCB3ZSB3aWxsIHNldCB0aGUgTEVEIG1vZGUgdG8gcHJldmlvdXMgc3RhdHVzLgorCS8vCisJaWYgKChTdGF0dXMgIT0gTEVEX09OX1NJVEVfU1VSVkVZKSAmJiAoU3RhdHVzICE9IExFRF9QT1dFUl9VUCkpCisJCXBBZC0+TGVkU3RhdHVzID0gU3RhdHVzOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNldExFRDo6TW9kZT0lZCxIaWdoQnl0ZT0weCUwMngsTG93Qnl0ZT0weCUwMnhcbiIsIHBBZC0+TGVkQ250bC5maWVsZC5MZWRNb2RlLCBIaWdoQnl0ZSwgTG93Qnl0ZSkpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU2V0IExFRCBTaWduYWwgU3RyZWd0aAorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCURibQkJCQkJCVNpZ25hbCBTdHJlZ3RoCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCQlDYW4gYmUgcnVuIG9uIGFueSBJUlFMIGxldmVsLgorCisJCUFjY29yZGluZyB0byBNaWNyb3NvZnQgWmVybyBDb25maWcgV2lyZWxlc3MgU2lnbmFsIFN0cmVndGggZGVmaW5pdGlvbiBhcyBiZWxvd3MuCisJCTw9IC05MCAgTm8gU2lnbmFsCisJCTw9IC04MSAgVmVyeSBMb3cKKwkJPD0gLTcxICBMb3cKKwkJPD0gLTY3ICBHb29kCisJCTw9IC01NyAgVmVyeSBHb29kCisJCSA+IC01NyAgRXhjZWxsZW50CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QU2V0U2lnbmFsTEVEKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBORElTXzgwMl8xMV9SU1NJIERibSkKK3sKKwlVQ0hBUgkJbkxlZCA9IDA7CisKKwkvLworCS8vIGlmIG5vdCBTaWduYWwgU3RyZWd0aCwgdGhlbiBkbyBub3RoaW5nLgorCS8vCisJaWYgKHBBZC0+TGVkQ250bC5maWVsZC5MZWRNb2RlICE9IExFRF9NT0RFX1NJR05BTF9TVFJFR1RIKQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmIChEYm0gPD0gLTkwKQorCQluTGVkID0gMDsKKwllbHNlIGlmIChEYm0gPD0gLTgxKQorCQluTGVkID0gMTsKKwllbHNlIGlmIChEYm0gPD0gLTcxKQorCQluTGVkID0gMzsKKwllbHNlIGlmIChEYm0gPD0gLTY3KQorCQluTGVkID0gNzsKKwllbHNlIGlmIChEYm0gPD0gLTU3KQorCQluTGVkID0gMTU7CisJZWxzZQorCQluTGVkID0gMzE7CisKKwkvLworCS8vIFVwZGF0ZSBTaWduYWwgU3RyZWd0aCB0byBmaXJtd2FyZSBpZiBjaGFuZ2VkLgorCS8vCisJaWYgKHBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCAhPSBuTGVkKQorCXsKKwkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUxLCAweGZmLCBuTGVkLCBwQWQtPkxlZENudGwuZmllbGQuUG9sYXJpdHkpOworCQlwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSBuTGVkOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUVuYWJsZSBSWAorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPD0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCUJlZm9yZSBFbmFibGUgUlgsIG1ha2Ugc3VyZSB5b3UgaGF2ZSBlbmFibGVkIEludGVycnVwdC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBFbmFibGVSeFR4KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworLy8JV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisvLwlVTE9ORwlpID0gMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QRW5hYmxlUnhUeFxuIikpOworCisJLy8gRW5hYmxlIFJ4IERNQS4KKwlSVDI4WFhETUFFbmFibGUocEFkKTsKKworCS8vIGVuYWJsZSBSWCBvZiBNQUMgYmxvY2sKKwlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKQorCXsKKwkJVUlOVDMyIHJ4X2ZpbHRlcl9mbGFnID0gQVBOT1JNQUw7CisKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIHJ4X2ZpbHRlcl9mbGFnKTsgICAgIC8vIGVuYWJsZSBSWCBvZiBETUEgYmxvY2sKKwl9CisJZWxzZQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCBTVEFOT1JNQUwpOyAgICAgLy8gU3RhaW9uIG5vdCBkcm9wIGNvbnRyb2wgZnJhbWUgd2lsbCBmYWlsIFdpRmkgQ2VydGlmaWNhdGlvbi4KKwl9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4Yyk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFJUTVBFbmFibGVSeFR4XG4iKSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3RraXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg5ODZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF90a2lwLmMKQEAgLTAsMCArMSwxNjEzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfdGtpcC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBXdQkJMDItMjUtMDIJCUluaXRpYWwKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworLy8gUm90YXRpb24gZnVuY3Rpb25zIG9uIDMyIGJpdCB2YWx1ZXMKKyNkZWZpbmUgUk9MMzIoIEEsIG4gKSBcCisJKCAoKEEpIDw8IChuKSkgfCAoICgoQSk+PigzMi0obikpKSAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQorI2RlZmluZSBST1IzMiggQSwgbiApIFJPTDMyKCAoQSksIDMyLShuKSApCisKK1VJTlQgVGtpcF9TYm94X0xvd2VyWzI1Nl0gPQoreworCTB4QTUsMHg4NCwweDk5LDB4OEQsMHgwRCwweEJELDB4QjEsMHg1NCwKKwkweDUwLDB4MDMsMHhBOSwweDdELDB4MTksMHg2MiwweEU2LDB4OUEsCisJMHg0NSwweDlELDB4NDAsMHg4NywweDE1LDB4RUIsMHhDOSwweDBCLAorCTB4RUMsMHg2NywweEZELDB4RUEsMHhCRiwweEY3LDB4OTYsMHg1QiwKKwkweEMyLDB4MUMsMHhBRSwweDZBLDB4NUEsMHg0MSwweDAyLDB4NEYsCisJMHg1QywweEY0LDB4MzQsMHgwOCwweDkzLDB4NzMsMHg1MywweDNGLAorCTB4MEMsMHg1MiwweDY1LDB4NUUsMHgyOCwweEExLDB4MEYsMHhCNSwKKwkweDA5LDB4MzYsMHg5QiwweDNELDB4MjYsMHg2OSwweENELDB4OUYsCisJMHgxQiwweDlFLDB4NzQsMHgyRSwweDJELDB4QjIsMHhFRSwweEZCLAorCTB4RjYsMHg0RCwweDYxLDB4Q0UsMHg3QiwweDNFLDB4NzEsMHg5NywKKwkweEY1LDB4NjgsMHgwMCwweDJDLDB4NjAsMHgxRiwweEM4LDB4RUQsCisJMHhCRSwweDQ2LDB4RDksMHg0QiwweERFLDB4RDQsMHhFOCwweDRBLAorCTB4NkIsMHgyQSwweEU1LDB4MTYsMHhDNSwweEQ3LDB4NTUsMHg5NCwKKwkweENGLDB4MTAsMHgwNiwweDgxLDB4RjAsMHg0NCwweEJBLDB4RTMsCisJMHhGMywweEZFLDB4QzAsMHg4QSwweEFELDB4QkMsMHg0OCwweDA0LAorCTB4REYsMHhDMSwweDc1LDB4NjMsMHgzMCwweDFBLDB4MEUsMHg2RCwKKwkweDRDLDB4MTQsMHgzNSwweDJGLDB4RTEsMHhBMiwweENDLDB4MzksCisJMHg1NywweEYyLDB4ODIsMHg0NywweEFDLDB4RTcsMHgyQiwweDk1LAorCTB4QTAsMHg5OCwweEQxLDB4N0YsMHg2NiwweDdFLDB4QUIsMHg4MywKKwkweENBLDB4MjksMHhEMywweDNDLDB4NzksMHhFMiwweDFELDB4NzYsCisJMHgzQiwweDU2LDB4NEUsMHgxRSwweERCLDB4MEEsMHg2QywweEU0LAorCTB4NUQsMHg2RSwweEVGLDB4QTYsMHhBOCwweEE0LDB4MzcsMHg4QiwKKwkweDMyLDB4NDMsMHg1OSwweEI3LDB4OEMsMHg2NCwweEQyLDB4RTAsCisJMHhCNCwweEZBLDB4MDcsMHgyNSwweEFGLDB4OEUsMHhFOSwweDE4LAorCTB4RDUsMHg4OCwweDZGLDB4NzIsMHgyNCwweEYxLDB4QzcsMHg1MSwKKwkweDIzLDB4N0MsMHg5QywweDIxLDB4REQsMHhEQywweDg2LDB4ODUsCisJMHg5MCwweDQyLDB4QzQsMHhBQSwweEQ4LDB4MDUsMHgwMSwweDEyLAorCTB4QTMsMHg1RiwweEY5LDB4RDAsMHg5MSwweDU4LDB4MjcsMHhCOSwKKwkweDM4LDB4MTMsMHhCMywweDMzLDB4QkIsMHg3MCwweDg5LDB4QTcsCisJMHhCNiwweDIyLDB4OTIsMHgyMCwweDQ5LDB4RkYsMHg3OCwweDdBLAorCTB4OEYsMHhGOCwweDgwLDB4MTcsMHhEQSwweDMxLDB4QzYsMHhCOCwKKwkweEMzLDB4QjAsMHg3NywweDExLDB4Q0IsMHhGQywweEQ2LDB4M0EKK307CisKK1VJTlQgVGtpcF9TYm94X1VwcGVyWzI1Nl0gPQoreworCTB4QzYsMHhGOCwweEVFLDB4RjYsMHhGRiwweEQ2LDB4REUsMHg5MSwKKwkweDYwLDB4MDIsMHhDRSwweDU2LDB4RTcsMHhCNSwweDRELDB4RUMsCisJMHg4RiwweDFGLDB4ODksMHhGQSwweEVGLDB4QjIsMHg4RSwweEZCLAorCTB4NDEsMHhCMywweDVGLDB4NDUsMHgyMywweDUzLDB4RTQsMHg5QiwKKwkweDc1LDB4RTEsMHgzRCwweDRDLDB4NkMsMHg3RSwweEY1LDB4ODMsCisJMHg2OCwweDUxLDB4RDEsMHhGOSwweEUyLDB4QUIsMHg2MiwweDJBLAorCTB4MDgsMHg5NSwweDQ2LDB4OUQsMHgzMCwweDM3LDB4MEEsMHgyRiwKKwkweDBFLDB4MjQsMHgxQiwweERGLDB4Q0QsMHg0RSwweDdGLDB4RUEsCisJMHgxMiwweDFELDB4NTgsMHgzNCwweDM2LDB4REMsMHhCNCwweDVCLAorCTB4QTQsMHg3NiwweEI3LDB4N0QsMHg1MiwweERELDB4NUUsMHgxMywKKwkweEE2LDB4QjksMHgwMCwweEMxLDB4NDAsMHhFMywweDc5LDB4QjYsCisJMHhENCwweDhELDB4NjcsMHg3MiwweDk0LDB4OTgsMHhCMCwweDg1LAorCTB4QkIsMHhDNSwweDRGLDB4RUQsMHg4NiwweDlBLDB4NjYsMHgxMSwKKwkweDhBLDB4RTksMHgwNCwweEZFLDB4QTAsMHg3OCwweDI1LDB4NEIsCisJMHhBMiwweDVELDB4ODAsMHgwNSwweDNGLDB4MjEsMHg3MCwweEYxLAorCTB4NjMsMHg3NywweEFGLDB4NDIsMHgyMCwweEU1LDB4RkQsMHhCRiwKKwkweDgxLDB4MTgsMHgyNiwweEMzLDB4QkUsMHgzNSwweDg4LDB4MkUsCisJMHg5MywweDU1LDB4RkMsMHg3QSwweEM4LDB4QkEsMHgzMiwweEU2LAorCTB4QzAsMHgxOSwweDlFLDB4QTMsMHg0NCwweDU0LDB4M0IsMHgwQiwKKwkweDhDLDB4QzcsMHg2QiwweDI4LDB4QTcsMHhCQywweDE2LDB4QUQsCisJMHhEQiwweDY0LDB4NzQsMHgxNCwweDkyLDB4MEMsMHg0OCwweEI4LAorCTB4OUYsMHhCRCwweDQzLDB4QzQsMHgzOSwweDMxLDB4RDMsMHhGMiwKKwkweEQ1LDB4OEIsMHg2RSwweERBLDB4MDEsMHhCMSwweDlDLDB4NDksCisJMHhEOCwweEFDLDB4RjMsMHhDRiwweENBLDB4RjQsMHg0NywweDEwLAorCTB4NkYsMHhGMCwweDRBLDB4NUMsMHgzOCwweDU3LDB4NzMsMHg5NywKKwkweENCLDB4QTEsMHhFOCwweDNFLDB4OTYsMHg2MSwweDBELDB4MEYsCisJMHhFMCwweDdDLDB4NzEsMHhDQywweDkwLDB4MDYsMHhGNywweDFDLAorCTB4QzIsMHg2QSwweEFFLDB4NjksMHgxNywweDk5LDB4M0EsMHgyNywKKwkweEQ5LDB4RUIsMHgyQiwweDIyLDB4RDIsMHhBOSwweDA3LDB4MzMsCisJMHgyRCwweDNDLDB4MTUsMHhDOSwweDg3LDB4QUEsMHg1MCwweEE1LAorCTB4MDMsMHg1OSwweDA5LDB4MUEsMHg2NSwweEQ3LDB4ODQsMHhEMCwKKwkweDgyLDB4MjksMHg1QSwweDFFLDB4N0IsMHhBOCwweDZELDB4MkMKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKiBTQk9YIFRhYmxlICoqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworVUNIQVIgU2JveFRhYmxlWzI1Nl0gPQoreworCTB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUsCisJMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwKKwkweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLAorCTB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsCisJMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYywKKwkweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LAorCTB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEsCisJMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSwKKwkweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLAorCTB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsCisJMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YiwKKwkweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLAorCTB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUsCisJMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCwKKwkweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LAorCTB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsCisJMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNywKKwkweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLAorCTB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgsCisJMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYiwKKwkweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLAorCTB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksCisJMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSwKKwkweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LAorCTB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYsCisJMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSwKKwkweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLAorCTB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsCisJMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCwKKwkweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLAorCTB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgsCisJMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNgorfTsKKworVk9JRCB4b3JfMzIoCisJSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYSwKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBiLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgeG9yXzEyOCgKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBhLAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGIsCisJT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBuZXh0X2tleSgKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBrZXksCisJSU4gIElOVCAgICAgICAgICAgICAgICAgcm91bmQpOworCitWT0lEIGJ5dGVfc3ViKAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgc2hpZnRfcm93KAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgbWl4X2NvbHVtbigKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBpbiwKKwlPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitVQ0hBUiBSVE1QQ2tpcFNib3goCisJSU4gIFVDSEFSICAgICAgICAgICAgICAgYSk7CisvLworLy8gRXhwYW5kZWQgSVYgZm9yIFRLSVAgZnVuY3Rpb24uCisvLwordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9JVl9DT05UUk9MXworeworCXVuaW9uIFBBQ0tFRAorCXsKKwkJc3RydWN0IFBBQ0tFRAorCQl7CisJCQlVQ0hBUgkJcmMwOworCQkJVUNIQVIJCXJjMTsKKwkJCVVDSEFSCQlyYzI7CisKKwkJCXVuaW9uIFBBQ0tFRAorCQkJeworCQkJCXN0cnVjdCBQQUNLRUQKKwkJCQl7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlVQ0hBUglLZXlJRDoyOworCQkJCQlVQ0hBUglFeHRJVjoxOworCQkJCQlVQ0hBUglSc3ZkOjU7CisjZWxzZQorCQkJCQlVQ0hBUglSc3ZkOjU7CisJCQkJCVVDSEFSCUV4dElWOjE7CisJCQkJCVVDSEFSCUtleUlEOjI7CisjZW5kaWYKKwkJCQl9CWZpZWxkOworCQkJCVVDSEFSCQlCeXRlOworCQkJfQlDT05UUk9MOworCQl9CWZpZWxkOworCisJCVVMT05HCXdvcmQ7CisJfQlJVjE2OworCisJVUxPTkcJSVYzMjsKK30JVEtJUF9JViwgKlBUS0lQX0lWOworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDb252ZXJ0IGZyb20gVUNIQVJbXSB0byBVTE9ORyBpbiBhIHBvcnRhYmxlIHdheQorCisJQXJndW1lbnRzOgorICAgICAgcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVTE9ORwlSVE1QVGtpcEdldFVJbnQzMigKKwlJTglQVUNIQVIJcE1JQ0tleSkKK3sKKwlVTE9ORwlyZXMgPSAwOworCUlOVAkJaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJeworCQlyZXMgfD0gKCpwTUlDS2V5KyspIDw8ICg4ICogaSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvbnZlcnQgZnJvbSBVTE9ORyB0byBVQ0hBUltdIGluIGEgcG9ydGFibGUgd2F5CisKKwlBcmd1bWVudHM6CisgICAgICBwRHN0CQkJcG9pbnRlciB0byBkZXN0aW5hdGlvbiBmb3IgY29udmVydCBVTE9ORyB0byBVQ0hBUltdCisgICAgICB2YWwJCQl0aGUgdmFsdWUgZm9yIGNvbnZlcnQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QVGtpcFB1dFVJbnQzMigKKwlJTiBPVVQJUFVDSEFSCQlwRHN0LAorCUlOCQlVTE9ORwkJdmFsKQoreworCUlOVCBpOworCisJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKQorCXsKKwkJKnBEc3QrKyA9IChVQ0hBUikgKHZhbCAmIDB4ZmYpOworCQl2YWwgPj49IDg7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJU2V0IHRoZSBNSUMgS2V5LgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICBwTUlDS2V5CQlwb2ludGVyIHRvIE1JQyBLZXkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QVGtpcFNldE1JQ0tleSgKKwlJTglQVEtJUF9LRVlfSU5GTwlwVGtpcCwKKwlJTglQVUNIQVIJCQlwTUlDS2V5KQoreworCS8vIFNldCB0aGUga2V5CisJcFRraXAtPkswID0gUlRNUFRraXBHZXRVSW50MzIocE1JQ0tleSk7CisJcFRraXAtPksxID0gUlRNUFRraXBHZXRVSW50MzIocE1JQ0tleSArIDQpOworCS8vIGFuZCByZXNldCB0aGUgbWVzc2FnZQorCXBUa2lwLT5MID0gcFRraXAtPkswOworCXBUa2lwLT5SID0gcFRraXAtPksxOworCXBUa2lwLT5uQnl0ZXNJbk0gPSAwOworCXBUa2lwLT5NID0gMDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNhbGN1bGF0ZSB0aGUgTUlDIFZhbHVlLgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICB1Q2hhcgkJCUFwcGVuZCB0aGlzIHVDaGFyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFRraXBBcHBlbmRCeXRlKAorCUlOCVBUS0lQX0tFWV9JTkZPCXBUa2lwLAorCUlOCVVDSEFSIAkJCXVDaGFyKQoreworCS8vIEFwcGVuZCB0aGUgYnl0ZSB0byBvdXIgd29yZC1zaXplZCBidWZmZXIKKwlwVGtpcC0+TSB8PSAodUNoYXIgPDwgKDgqIHBUa2lwLT5uQnl0ZXNJbk0pKTsKKwlwVGtpcC0+bkJ5dGVzSW5NKys7CisJLy8gUHJvY2VzcyB0aGUgd29yZCBpZiBpdCBpcyBmdWxsLgorCWlmKCBwVGtpcC0+bkJ5dGVzSW5NID49IDQgKQorCXsKKwkJcFRraXAtPkwgXj0gcFRraXAtPk07CisJCXBUa2lwLT5SIF49IFJPTDMyKCBwVGtpcC0+TCwgMTcgKTsKKwkJcFRraXAtPkwgKz0gcFRraXAtPlI7CisJCXBUa2lwLT5SIF49ICgocFRraXAtPkwgJiAweGZmMDBmZjAwKSA+PiA4KSB8ICgocFRraXAtPkwgJiAweDAwZmYwMGZmKSA8PCA4KTsKKwkJcFRraXAtPkwgKz0gcFRraXAtPlI7CisJCXBUa2lwLT5SIF49IFJPTDMyKCBwVGtpcC0+TCwgMyApOworCQlwVGtpcC0+TCArPSBwVGtpcC0+UjsKKwkJcFRraXAtPlIgXj0gUk9SMzIoIHBUa2lwLT5MLCAyICk7CisJCXBUa2lwLT5MICs9IHBUa2lwLT5SOworCQkvLyBDbGVhciB0aGUgYnVmZmVyCisJCXBUa2lwLT5NID0gMDsKKwkJcFRraXAtPm5CeXRlc0luTSA9IDA7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ2FsY3VsYXRlIHRoZSBNSUMgVmFsdWUuCisKKwlBcmd1bWVudHM6CisgICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgIHBTcmMJCQlQb2ludGVyIHRvIHNvdXJjZSBkYXRhIGZvciBDYWxjdWxhdGUgTUlDIFZhbHVlCisgICAgICBMZW4JCQlJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBUa2lwQXBwZW5kKAorCUlOCVBUS0lQX0tFWV9JTkZPCXBUa2lwLAorCUlOCVBVQ0hBUgkJCXBTcmMsCisJSU4JVUlOVAkJCW5CeXRlcykKK3sKKwkvLyBUaGlzIGlzIHNpbXBsZQorCXdoaWxlKG5CeXRlcyA+IDApCisJeworCQlSVE1QVGtpcEFwcGVuZEJ5dGUocFRraXAsICpwU3JjKyspOworCQluQnl0ZXMtLTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlHZXQgdGhlIE1JQyBWYWx1ZS4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCXRoZSBNSUMgVmFsdWUgaXMgc3RvcmUgaW4gcEFkLT5Qcml2YXRlSW5mby5NSUMKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBUa2lwR2V0TUlDKAorCUlOCVBUS0lQX0tFWV9JTkZPCXBUa2lwKQoreworCS8vIEFwcGVuZCB0aGUgbWluaW11bSBwYWRkaW5nCisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAweDVhICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJLy8gYW5kIHRoZW4gemVyb2VzIHVudGlsIHRoZSBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0CisJd2hpbGUoIHBUa2lwLT5uQnl0ZXNJbk0gIT0gMCApCisJeworCQlSVE1QVGtpcEFwcGVuZEJ5dGUocFRraXAsIDAgKTsKKwl9CisJLy8gVGhlIGFwcGVuZEJ5dGUgZnVuY3Rpb24gaGFzIGFscmVhZHkgY29tcHV0ZWQgdGhlIHJlc3VsdC4KKwlSVE1QVGtpcFB1dFVJbnQzMihwVGtpcC0+TUlDLCBwVGtpcC0+TCk7CisJUlRNUFRraXBQdXRVSW50MzIocFRraXAtPk1JQyArIDQsIHBUa2lwLT5SKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUluaXQgVGtpcCBmdW5jdGlvbi4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwVEtleSAgICAgICBQb2ludGVyIHRvIHRoZSBUZW1wb3JhbCBLZXkgKFRLKSwgVEsgc2hhbGwgYmUgMTI4Yml0cy4KKwkJS2V5SWQJCVRLIEtleSBJRAorCQlwVEEJCQlQb2ludGVyIHRvIHRyYW5zbWl0dGVyIGFkZHJlc3MKKwkJcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEluaXRUa2lwRW5naW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JVUNIQVIJCQlLZXlJZCwKKwlJTglQVUNIQVIJCQlwVEEsCisJSU4JUFVDSEFSCQkJcE1JQ0tleSwKKwlJTglQVUNIQVIJCQlwVFNDLAorCU9VVAlQVUxPTkcJCQlwSVYxNiwKKwlPVVQJUFVMT05HCQkJcElWMzIpCit7CisJVEtJUF9JVgl0a2lwSXY7CisKKwkvLyBQcmVwYXJlIDggYnl0ZXMgVEtJUCBlbmNhcHN1bGF0aW9uIGZvciBNUERVCisJTmRpc1plcm9NZW1vcnkoJnRraXBJdiwgc2l6ZW9mKFRLSVBfSVYpKTsKKwl0a2lwSXYuSVYxNi5maWVsZC5yYzAgPSAqKHBUU0MgKyAxKTsKKwl0a2lwSXYuSVYxNi5maWVsZC5yYzEgPSAodGtpcEl2LklWMTYuZmllbGQucmMwIHwgMHgyMCkgJiAweDdmOworCXRraXBJdi5JVjE2LmZpZWxkLnJjMiA9ICpwVFNDOworCXRraXBJdi5JVjE2LmZpZWxkLkNPTlRST0wuZmllbGQuRXh0SVYgPSAxOyAgLy8gMDogbm9uLWV4dGVuZGVkIElWLCAxOiBhbiBleHRlbmRlZCBJVgorCXRraXBJdi5JVjE2LmZpZWxkLkNPTlRST0wuZmllbGQuS2V5SUQgPSBLZXlJZDsKKy8vCXRraXBJdi5JVjMyID0gKihQVUxPTkcpKHBUU0MgKyAyKTsKKwlOZGlzTW92ZU1lbW9yeSgmdGtpcEl2LklWMzIsIChwVFNDICsgMiksIDQpOyAgIC8vIENvcHkgSVYKKworCSpwSVYxNiA9IHRraXBJdi5JVjE2LndvcmQ7CisJKnBJVjMyID0gdGtpcEl2LklWMzI7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlJbml0IE1JQyBWYWx1ZSBjYWxjdWxhdGlvbiBmdW5jdGlvbiB3aGljaCBpbmNsdWRlIHNldCBNSUMga2V5ICYKKwkJY2FsY3VsYXRlIGZpcnN0IDE2IGJ5dGVzIChEQSArIFNBICsgcHJpb3JpdHkgKyAgMCkKKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwVEtleSAgICAgICBQb2ludGVyIHRvIHRoZSBUZW1wb3JhbCBLZXkgKFRLKSwgVEsgc2hhbGwgYmUgMTI4Yml0cy4KKwkJcERBCQkJUG9pbnRlciB0byBEQSBhZGRyZXNzCisJCXBTQQkJCVBvaW50ZXIgdG8gU0EgYWRkcmVzcworCQlwTUlDS2V5CQlwb2ludGVyIHRvIE1JQyBLZXkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEluaXRNSUNFbmdpbmUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcEtleSwKKwlJTglQVUNIQVIJCQlwREEsCisJSU4JUFVDSEFSCQkJcFNBLAorCUlOICBVQ0hBUiAgICAgICAgICAgVXNlclByaW9yaXR5LAorCUlOCVBVQ0hBUgkJCXBNSUNLZXkpCit7CisJVUxPTkcgUHJpb3JpdHkgPSBVc2VyUHJpb3JpdHk7CisKKwkvLyBJbml0IE1JQyB2YWx1ZSBjYWxjdWxhdGlvbgorCVJUTVBUa2lwU2V0TUlDS2V5KCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwTUlDS2V5KTsKKwkvLyBEQQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwREEsIE1BQ19BRERSX0xFTik7CisJLy8gU0EKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcFNBLCBNQUNfQUREUl9MRU4pOworCS8vIFByaW9yaXR5ICsgMyBieXRlcyBvZiAwCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIChQVUNIQVIpJlByaW9yaXR5LCA0KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvbXBhcmUgTUlDIHZhbHVlIG9mIHJlY2VpdmVkIE1TRFUKKworCUFyZ3VtZW50czoKKwkJcEFkCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFNyYyAgICAgICAgUG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgUGxhaW4gdGV4dCBkYXRhCisJCXBEQQkJCVBvaW50ZXIgdG8gREEgYWRkcmVzcworCQlwU0EJCQlQb2ludGVyIHRvIFNBIGFkZHJlc3MKKwkJcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisJCUxlbiAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIHBsYWluIHRleHQgZGF0YSBleGNsdWRlIE1JQyB2YWx1ZQorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFICAgICAgICBNSUMgdmFsdWUgbWF0Y2hlZAorCQlGQUxTRSAgICAgICBNSUMgdmFsdWUgbWlzbWF0Y2hlZAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTglSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVBVQ0hBUgkJCXBEQSwKKwlJTglQVUNIQVIJCQlwU0EsCisJSU4JUFVDSEFSCQkJcE1JQ0tleSwKKwlJTglVQ0hBUgkJCVVzZXJQcmlvcml0eSwKKwlJTglVSU5UCQkJTGVuKQoreworCVVDSEFSCU9sZE1pY1s4XTsKKwlVTE9ORwlQcmlvcml0eSA9IFVzZXJQcmlvcml0eTsKKworCS8vIEluaXQgTUlDIHZhbHVlIGNhbGN1bGF0aW9uCisJUlRNUFRraXBTZXRNSUNLZXkoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBNSUNLZXkpOworCS8vIERBCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBEQSwgTUFDX0FERFJfTEVOKTsKKwkvLyBTQQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU0EsIE1BQ19BRERSX0xFTik7CisJLy8gUHJpb3JpdHkgKyAzIGJ5dGVzIG9mIDAKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgKFBVQ0hBUikmUHJpb3JpdHksIDQpOworCisJLy8gQ2FsY3VsYXRlIE1JQyB2YWx1ZSBmcm9tIHBsYWluIHRleHQgZGF0YQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU3JjLCBMZW4pOworCisJLy8gR2V0IE1JQyB2YWx1ZGUgZnJvbSByZWNlaXZlZCBmcmFtZQorCU5kaXNNb3ZlTWVtb3J5KE9sZE1pYywgcFNyYyArIExlbiwgOCk7CisKKwkvLyBHZXQgTUlDIHZhbHVlIGZyb20gZGVjcnlwdGVkIHBsYWluIGRhdGEKKwlSVE1QVGtpcEdldE1JQygmcEFkLT5Qcml2YXRlSW5mby5SeCk7CisKKwkvLyBNb3ZlIE1JQyB2YWx1ZSBmcm9tIE1TRFUsIHRoaXMgc3RlcHMgc2hvdWxkIG1vdmUgdG8gZGF0YSBwYXRoLgorCS8vIFNpbmNlIHRoZSBNSUMgdmFsdWUgbWlnaHQgY3Jvc3MgTVBEVXMuCisJaWYoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlByaXZhdGVJbmZvLlJ4Lk1JQywgT2xkTWljLCA4KSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZSgpOiBUS0lQIE1JQyBFcnJvciAhXG4iKSk7ICAvL01JQyBlcnJvci4KKworCisJCXJldHVybiAoRkFMU0UpOworCX0KKwlyZXR1cm4gKFRSVUUpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ29tcGFyZSBNSUMgdmFsdWUgb2YgcmVjZWl2ZWQgTVNEVQorCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwTExDCQlMTEMgaGVhZGVyCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIFBsYWluIHRleHQgZGF0YQorCQlwREEJCQlQb2ludGVyIHRvIERBIGFkZHJlc3MKKwkJcFNBCQkJUG9pbnRlciB0byBTQSBhZGRyZXNzCisJCXBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQorCQlMZW4gICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBwbGFpbiB0ZXh0IGRhdGEgZXhjbHVkZSBNSUMgdmFsdWUKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRSAgICAgICAgTUlDIHZhbHVlIG1hdGNoZWQKKwkJRkFMU0UgICAgICAgTUlDIHZhbHVlIG1pc21hdGNoZWQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4JUlRNUFRraXBDb21wYXJlTUlDVmFsdWVXaXRoTExDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBMTEMsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglQVUNIQVIJCQlwREEsCisJSU4JUFVDSEFSCQkJcFNBLAorCUlOCVBVQ0hBUgkJCXBNSUNLZXksCisJSU4JVUlOVAkJCUxlbikKK3sKKwlVQ0hBUglPbGRNaWNbOF07CisJVUxPTkcJUHJpb3JpdHkgPSAwOworCisJLy8gSW5pdCBNSUMgdmFsdWUgY2FsY3VsYXRpb24KKwlSVE1QVGtpcFNldE1JQ0tleSgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcE1JQ0tleSk7CisJLy8gREEKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcERBLCBNQUNfQUREUl9MRU4pOworCS8vIFNBCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBTQSwgTUFDX0FERFJfTEVOKTsKKwkvLyBQcmlvcml0eSArIDMgYnl0ZXMgb2YgMAorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCAoUFVDSEFSKSZQcmlvcml0eSwgNCk7CisKKwkvLyBTdGFydCB3aXRoIExMQyBoZWFkZXIKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcExMQywgOCk7CisKKwkvLyBDYWxjdWxhdGUgTUlDIHZhbHVlIGZyb20gcGxhaW4gdGV4dCBkYXRhCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBTcmMsIExlbik7CisKKwkvLyBHZXQgTUlDIHZhbHVkZSBmcm9tIHJlY2VpdmVkIGZyYW1lCisJTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwU3JjICsgTGVuLCA4KTsKKworCS8vIEdldCBNSUMgdmFsdWUgZnJvbSBkZWNyeXB0ZWQgcGxhaW4gZGF0YQorCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlJ4KTsKKworCS8vIE1vdmUgTUlDIHZhbHVlIGZyb20gTVNEVSwgdGhpcyBzdGVwcyBzaG91bGQgbW92ZSB0byBkYXRhIHBhdGguCisJLy8gU2luY2UgdGhlIE1JQyB2YWx1ZSBtaWdodCBjcm9zcyBNUERVcy4KKwlpZighTmRpc0VxdWFsTWVtb3J5KHBBZC0+UHJpdmF0ZUluZm8uUnguTUlDLCBPbGRNaWMsIDgpKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlV2l0aExMQygpOiBUS0lQIE1JQyBFcnJvciAhXG4iKSk7ICAvL01JQyBlcnJvci4KKworCisJCXJldHVybiAoRkFMU0UpOworCX0KKwlyZXR1cm4gKFRSVUUpOworfQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSB0cmFuc21pdCBmdW5jdGlvbgorCisJQXJndW1lbnRzOgorCQlwQWQJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKKwkJUE5ESVNfUEFDS0VUCVBvaW50ZXIgdG8gTmRpcyBQYWNrZXQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCQlwRW5jYXAJCQlQb2ludGVyIHRvIExMQyBlbmNhcCBkYXRhCisJCUxlbkVuY2FwCQlUb3RhbCBlbmNhcCBsZW5ndGgsIG1pZ2h0IGJlIDAgd2hpY2ggaW5kaWNhdGVzIG5vIGVuY2FwCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUENhbGN1bGF0ZU1JQ1ZhbHVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBFbmNhcCwKKwlJTglQQ0lQSEVSX0tFWQkJcEtleSwKKwlJTglVQ0hBUgkJCWFwaWR4KQoreworCVBBQ0tFVF9JTkZPCQlQYWNrZXRJbmZvOworCVBVQ0hBUgkJCXBTcmNCdWZWQTsKKwlVSU5UCQkJU3JjQnVmTGVuOworCVBVQ0hBUgkJCXBTcmM7CisgICAgVUNIQVIgICAgICAgICAgIFVzZXJQcmlvcml0eTsKKwlVQ0hBUgkJCXZsYW5fb2Zmc2V0ID0gMDsKKworCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFNyY0J1ZlZBLCAmU3JjQnVmTGVuKTsKKworCVVzZXJQcmlvcml0eSA9IFJUTVBfR0VUX1BBQ0tFVF9VUChwUGFja2V0KTsKKwlwU3JjID0gcFNyY0J1ZlZBOworCisJLy8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB2bGFuIHBhY2tldAorCWlmICgoKCoocFNyYyArIDEyKSA8PCA4KSArICoocFNyYyArIDEzKSkgPT0gMHg4MTAwKQorCQl2bGFuX29mZnNldCA9IDQ7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7CisJCVJUTVBJbml0TUlDRW5naW5lKAorCQkJcEFkLAorCQkJcEtleS0+S2V5LAorCQkJcFNyYywKKwkJCXBTcmMgKyA2LAorCQkJVXNlclByaW9yaXR5LAorCQkJcEtleS0+VHhNaWMpOworCX0KKworCisJaWYgKHBFbmNhcCAhPSBOVUxMKQorCXsKKwkJLy8gTExDIGVuY2Fwc3VsYXRpb24KKwkJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBFbmNhcCwgNik7CisJCS8vIFByb3RvY29sIFR5cGUKKwkJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBTcmMgKyAxMiArIHZsYW5fb2Zmc2V0LCAyKTsKKwl9CisJU3JjQnVmTGVuIC09ICgxNCArIHZsYW5fb2Zmc2V0KTsKKwlwU3JjICs9ICgxNCArIHZsYW5fb2Zmc2V0KTsKKwlkbworCXsKKwkJaWYgKFNyY0J1ZkxlbiA+IDApCisJCXsKKwkJCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwU3JjLCBTcmNCdWZMZW4pOworCQl9CisKKwkJYnJlYWs7CS8vIE5vIG5lZWQgaGFuZGxlIG5leHQgcGFja2V0CisKKwl9CXdoaWxlIChUUlVFKTsJCS8vIEVuZCBvZiBjb3B5aW5nIHBheWxvYWQKKworCS8vIENvbXB1dGUgdGhlIGZpbmFsIE1JQyBWYWx1ZQorCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlR4KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogdGtpcF9zYm94KCkJCQkJCQkJCQkJCQkJCQkJKi8KKy8qIFJldHVybnMgYSAxNiBiaXQgdmFsdWUgZnJvbSBhIDY0SyBlbnRyeSB0YWJsZS4gVGhlIFRhYmxlICovCisvKiBpcyBzeW50aGVzaXplZCBmcm9tIHR3byAyNTYgZW50cnkgYnl0ZSB3aWRlIHRhYmxlcy4JCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitVSU5UIHRraXBfc2JveChVSU5UIGluZGV4KQoreworCVVJTlQgaW5kZXhfbG93OworCVVJTlQgaW5kZXhfaGlnaDsKKwlVSU5UIGxlZnQsIHJpZ2h0OworCisJaW5kZXhfbG93ID0gKGluZGV4ICUgMjU2KTsKKwlpbmRleF9oaWdoID0gKChpbmRleCA+PiA4KSAlIDI1Nik7CisKKwlsZWZ0ID0gVGtpcF9TYm94X0xvd2VyW2luZGV4X2xvd10gKyAoVGtpcF9TYm94X1VwcGVyW2luZGV4X2xvd10gKiAyNTYpOworCXJpZ2h0ID0gVGtpcF9TYm94X1VwcGVyW2luZGV4X2hpZ2hdICsgKFRraXBfU2JveF9Mb3dlcltpbmRleF9oaWdoXSAqIDI1Nik7CisKKwlyZXR1cm4gKGxlZnQgXiByaWdodCk7Cit9CisKK1VJTlQgcm90cjEoVUlOVCBhKQoreworCXVuc2lnbmVkIGludCBiOworCisJaWYgKChhICYgMHgwMSkgPT0gMHgwMSkKKwl7CisJCWIgPSAoYSA+PiAxKSB8IDB4ODAwMDsKKwl9CisJZWxzZQorCXsKKwkJYiA9IChhID4+IDEpICYgMHg3ZmZmOworCX0KKwliID0gYiAlIDY1NTM2OworCXJldHVybiBiOworfQorCitWT0lEIFJUTVBUa2lwTWl4S2V5KAorCVVDSEFSICprZXksCisJVUNIQVIgKnRhLAorCVVMT05HIHBubCwgLyogTGVhc3Qgc2lnbmlmaWNhbnQgMTYgYml0cyBvZiBQTiAqLworCVVMT05HIHBuaCwgLyogTW9zdCBzaWduaWZpY2FudCAzMiBiaXRzIG9mIFBOICovCisJVUNIQVIgKnJjNGtleSwKKwlVSU5UICpwMWspCit7CisKKwlVSU5UIHRzYzA7CisJVUlOVCB0c2MxOworCVVJTlQgdHNjMjsKKworCVVJTlQgcHBrMDsKKwlVSU5UIHBwazE7CisJVUlOVCBwcGsyOworCVVJTlQgcHBrMzsKKwlVSU5UIHBwazQ7CisJVUlOVCBwcGs1OworCisJSU5UIGk7CisJSU5UIGo7CisKKwl0c2MwID0gKHVuc2lnbmVkIGludCkoKHBuaCA+PiAxNikgJSA2NTUzNik7IC8qIG1zYiAqLworCXRzYzEgPSAodW5zaWduZWQgaW50KShwbmggJSA2NTUzNik7CisJdHNjMiA9ICh1bnNpZ25lZCBpbnQpKHBubCAlIDY1NTM2KTsgLyogbHNiICovCisKKwkvKiBQaGFzZSAxLCBzdGVwIDEgKi8KKwlwMWtbMF0gPSB0c2MxOworCXAxa1sxXSA9IHRzYzA7CisJcDFrWzJdID0gKFVJTlQpKHRhWzBdICsgKHRhWzFdKjI1NikpOworCXAxa1szXSA9IChVSU5UKSh0YVsyXSArICh0YVszXSoyNTYpKTsKKwlwMWtbNF0gPSAoVUlOVCkodGFbNF0gKyAodGFbNV0qMjU2KSk7CisKKwkvKiBQaGFzZSAxLCBzdGVwIDIgKi8KKwlmb3IgKGk9MDsgaTw4OyBpKyspCisJeworCQlqID0gMiooaSAmIDEpOworCQlwMWtbMF0gPSAocDFrWzBdICsgdGtpcF9zYm94KCAocDFrWzRdIF4gKCgyNTYqa2V5WzEral0pICsga2V5W2pdKSkgJSA2NTUzNiApKSAlIDY1NTM2OworCQlwMWtbMV0gPSAocDFrWzFdICsgdGtpcF9zYm94KCAocDFrWzBdIF4gKCgyNTYqa2V5WzUral0pICsga2V5WzQral0pKSAlIDY1NTM2ICkpICUgNjU1MzY7CisJCXAxa1syXSA9IChwMWtbMl0gKyB0a2lwX3Nib3goIChwMWtbMV0gXiAoKDI1NiprZXlbOStqXSkgKyBrZXlbOCtqXSkpICUgNjU1MzYgKSkgJSA2NTUzNjsKKwkJcDFrWzNdID0gKHAxa1szXSArIHRraXBfc2JveCggKHAxa1syXSBeICgoMjU2KmtleVsxMytqXSkgKyBrZXlbMTIral0pKSAlIDY1NTM2ICkpICUgNjU1MzY7CisJCXAxa1s0XSA9IChwMWtbNF0gKyB0a2lwX3Nib3goIChwMWtbM10gXiAoKCgyNTYqa2V5WzEral0pICsga2V5W2pdKSkpICUgNjU1MzYgKSkgJSA2NTUzNjsKKwkJcDFrWzRdID0gKHAxa1s0XSArIGkpICUgNjU1MzY7CisJfQorCisJLyogUGhhc2UgMiwgU3RlcCAxICovCisJcHBrMCA9IHAxa1swXTsKKwlwcGsxID0gcDFrWzFdOworCXBwazIgPSBwMWtbMl07CisJcHBrMyA9IHAxa1szXTsKKwlwcGs0ID0gcDFrWzRdOworCXBwazUgPSAocDFrWzRdICsgdHNjMikgJSA2NTUzNjsKKworCS8qIFBoYXNlMiwgU3RlcCAyICovCisJcHBrMCA9IHBwazAgKyB0a2lwX3Nib3goIChwcGs1IF4gKCgyNTYqa2V5WzFdKSArIGtleVswXSkpICUgNjU1MzYpOworCXBwazEgPSBwcGsxICsgdGtpcF9zYm94KCAocHBrMCBeICgoMjU2KmtleVszXSkgKyBrZXlbMl0pKSAlIDY1NTM2KTsKKwlwcGsyID0gcHBrMiArIHRraXBfc2JveCggKHBwazEgXiAoKDI1NiprZXlbNV0pICsga2V5WzRdKSkgJSA2NTUzNik7CisJcHBrMyA9IHBwazMgKyB0a2lwX3Nib3goIChwcGsyIF4gKCgyNTYqa2V5WzddKSArIGtleVs2XSkpICUgNjU1MzYpOworCXBwazQgPSBwcGs0ICsgdGtpcF9zYm94KCAocHBrMyBeICgoMjU2KmtleVs5XSkgKyBrZXlbOF0pKSAlIDY1NTM2KTsKKwlwcGs1ID0gcHBrNSArIHRraXBfc2JveCggKHBwazQgXiAoKDI1NiprZXlbMTFdKSArIGtleVsxMF0pKSAlIDY1NTM2KTsKKworCXBwazAgPSBwcGswICsgcm90cjEocHBrNSBeICgoMjU2KmtleVsxM10pICsga2V5WzEyXSkpOworCXBwazEgPSBwcGsxICsgcm90cjEocHBrMCBeICgoMjU2KmtleVsxNV0pICsga2V5WzE0XSkpOworCXBwazIgPSBwcGsyICsgcm90cjEocHBrMSk7CisJcHBrMyA9IHBwazMgKyByb3RyMShwcGsyKTsKKwlwcGs0ID0gcHBrNCArIHJvdHIxKHBwazMpOworCXBwazUgPSBwcGs1ICsgcm90cjEocHBrNCk7CisKKwkvKiBQaGFzZSAyLCBTdGVwIDMgKi8KKyAgICAvKiBQaGFzZSAyLCBTdGVwIDMgKi8KKworCXRzYzAgPSAodW5zaWduZWQgaW50KSgocG5oID4+IDE2KSAlIDY1NTM2KTsgLyogbXNiICovCisJdHNjMSA9ICh1bnNpZ25lZCBpbnQpKHBuaCAlIDY1NTM2KTsKKwl0c2MyID0gKHVuc2lnbmVkIGludCkocG5sICUgNjU1MzYpOyAvKiBsc2IgKi8KKworCXJjNGtleVswXSA9ICh0c2MyID4+IDgpICUgMjU2OworCXJjNGtleVsxXSA9ICgoKHRzYzIgPj4gOCkgJSAyNTYpIHwgMHgyMCkgJiAweDdmOworCXJjNGtleVsyXSA9IHRzYzIgJSAyNTY7CisJcmM0a2V5WzNdID0gKChwcGs1IF4gKCgyNTYqa2V5WzFdKSArIGtleVswXSkpID4+IDEpICUgMjU2OworCisJcmM0a2V5WzRdID0gcHBrMCAlIDI1NjsKKwlyYzRrZXlbNV0gPSAocHBrMCA+PiA4KSAlIDI1NjsKKworCXJjNGtleVs2XSA9IHBwazEgJSAyNTY7CisJcmM0a2V5WzddID0gKHBwazEgPj4gOCkgJSAyNTY7CisKKwlyYzRrZXlbOF0gPSBwcGsyICUgMjU2OworCXJjNGtleVs5XSA9IChwcGsyID4+IDgpICUgMjU2OworCisJcmM0a2V5WzEwXSA9IHBwazMgJSAyNTY7CisJcmM0a2V5WzExXSA9IChwcGszID4+IDgpICUgMjU2OworCisJcmM0a2V5WzEyXSA9IHBwazQgJSAyNTY7CisJcmM0a2V5WzEzXSA9IChwcGs0ID4+IDgpICUgMjU2OworCisJcmM0a2V5WzE0XSA9IHBwazUgJSAyNTY7CisJcmM0a2V5WzE1XSA9IChwcGs1ID4+IDgpICUgMjU2OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBjb25zdHJ1Y3RfbWljX2hlYWRlcjEoKSAgICAgICAgICAgICAgICAgICAgICAqLworLyogQnVpbGRzIHRoZSBmaXJzdCBNSUMgaGVhZGVyIGJsb2NrIGZyb20gICAgICAgKi8KKy8qIGhlYWRlciBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGNvbnN0cnVjdF9taWNfaGVhZGVyMSgKKwl1bnNpZ25lZCBjaGFyICptaWNfaGVhZGVyMSwKKwlpbnQgaGVhZGVyX2xlbmd0aCwKKwl1bnNpZ25lZCBjaGFyICptcGR1KQoreworCW1pY19oZWFkZXIxWzBdID0gKHVuc2lnbmVkIGNoYXIpKChoZWFkZXJfbGVuZ3RoIC0gMikgLyAyNTYpOworCW1pY19oZWFkZXIxWzFdID0gKHVuc2lnbmVkIGNoYXIpKChoZWFkZXJfbGVuZ3RoIC0gMikgJSAyNTYpOworCW1pY19oZWFkZXIxWzJdID0gbXBkdVswXSAmIDB4Y2Y7ICAgIC8qIE11dGUgQ0YgcG9sbCAmIENGIGFjayBiaXRzICovCisJbWljX2hlYWRlcjFbM10gPSBtcGR1WzFdICYgMHhjNzsgICAgLyogTXV0ZSByZXRyeSwgbW9yZSBkYXRhIGFuZCBwd3IgbWd0IGJpdHMgKi8KKwltaWNfaGVhZGVyMVs0XSA9IG1wZHVbNF07ICAgICAgIC8qIEExICovCisJbWljX2hlYWRlcjFbNV0gPSBtcGR1WzVdOworCW1pY19oZWFkZXIxWzZdID0gbXBkdVs2XTsKKwltaWNfaGVhZGVyMVs3XSA9IG1wZHVbN107CisJbWljX2hlYWRlcjFbOF0gPSBtcGR1WzhdOworCW1pY19oZWFkZXIxWzldID0gbXBkdVs5XTsKKwltaWNfaGVhZGVyMVsxMF0gPSBtcGR1WzEwXTsgICAgIC8qIEEyICovCisJbWljX2hlYWRlcjFbMTFdID0gbXBkdVsxMV07CisJbWljX2hlYWRlcjFbMTJdID0gbXBkdVsxMl07CisJbWljX2hlYWRlcjFbMTNdID0gbXBkdVsxM107CisJbWljX2hlYWRlcjFbMTRdID0gbXBkdVsxNF07CisJbWljX2hlYWRlcjFbMTVdID0gbXBkdVsxNV07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBjb25zdHJ1Y3RfbWljX2hlYWRlcjIoKSAgICAgICAgICAgICAgICAgICAgICAqLworLyogQnVpbGRzIHRoZSBsYXN0IE1JQyBoZWFkZXIgYmxvY2sgZnJvbSAgICAgICAgKi8KKy8qIGhlYWRlciBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGNvbnN0cnVjdF9taWNfaGVhZGVyMigKKwl1bnNpZ25lZCBjaGFyICptaWNfaGVhZGVyMiwKKwl1bnNpZ25lZCBjaGFyICptcGR1LAorCWludCBhNF9leGlzdHMsCisJaW50IHFjX2V4aXN0cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGk8MTY7IGkrKykgbWljX2hlYWRlcjJbaV09MHgwMDsKKworCW1pY19oZWFkZXIyWzBdID0gbXBkdVsxNl07ICAgIC8qIEEzICovCisJbWljX2hlYWRlcjJbMV0gPSBtcGR1WzE3XTsKKwltaWNfaGVhZGVyMlsyXSA9IG1wZHVbMThdOworCW1pY19oZWFkZXIyWzNdID0gbXBkdVsxOV07CisJbWljX2hlYWRlcjJbNF0gPSBtcGR1WzIwXTsKKwltaWNfaGVhZGVyMls1XSA9IG1wZHVbMjFdOworCisJLy8gSW4gU2VxdWVuY2UgQ29udHJvbCBmaWVsZCwgbXV0ZSBzZXF1ZW5jZSBudW1lciBiaXRzICgxMi1iaXQpCisJbWljX2hlYWRlcjJbNl0gPSBtcGR1WzIyXSAmIDB4MGY7ICAgLyogU0MgKi8KKwltaWNfaGVhZGVyMls3XSA9IDB4MDA7IC8qIG1wZHVbMjNdOyAqLworCisJaWYgKCghcWNfZXhpc3RzKSAmIGE0X2V4aXN0cykKKwl7CisJCWZvciAoaT0wO2k8NjtpKyspIG1pY19oZWFkZXIyWzgraV0gPSBtcGR1WzI0K2ldOyAgIC8qIEE0ICovCisKKwl9CisKKwlpZiAocWNfZXhpc3RzICYmICghYTRfZXhpc3RzKSkKKwl7CisJCW1pY19oZWFkZXIyWzhdID0gbXBkdVsyNF0gJiAweDBmOyAvKiBtdXRlIGJpdHMgMTUgLSA0ICovCisJCW1pY19oZWFkZXIyWzldID0gbXBkdVsyNV0gJiAweDAwOworCX0KKworCWlmIChxY19leGlzdHMgJiYgYTRfZXhpc3RzKQorCXsKKwkJZm9yIChpPTA7aTw2O2krKykgbWljX2hlYWRlcjJbOCtpXSA9IG1wZHVbMjQraV07ICAgLyogQTQgKi8KKworCQltaWNfaGVhZGVyMlsxNF0gPSBtcGR1WzMwXSAmIDB4MGY7CisJCW1pY19oZWFkZXIyWzE1XSA9IG1wZHVbMzFdICYgMHgwMDsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGNvbnN0cnVjdF9taWNfaXYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBCdWlsZHMgdGhlIE1JQyBJViBmcm9tIGhlYWRlciBmaWVsZHMgYW5kIFBOICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBjb25zdHJ1Y3RfbWljX2l2KAorCXVuc2lnbmVkIGNoYXIgKm1pY19pdiwKKwlpbnQgcWNfZXhpc3RzLAorCWludCBhNF9leGlzdHMsCisJdW5zaWduZWQgY2hhciAqbXBkdSwKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW5ndGgsCisJdW5zaWduZWQgY2hhciAqcG5fdmVjdG9yKQoreworCWludCBpOworCisJbWljX2l2WzBdID0gMHg1OTsKKwlpZiAocWNfZXhpc3RzICYmIGE0X2V4aXN0cykKKwkJbWljX2l2WzFdID0gbXBkdVszMF0gJiAweDBmOyAgICAvKiBRb1NfVEMgICAgICAgICAgICovCisJaWYgKHFjX2V4aXN0cyAmJiAhYTRfZXhpc3RzKQorCQltaWNfaXZbMV0gPSBtcGR1WzI0XSAmIDB4MGY7ICAgLyogbXV0ZSBiaXRzIDctNCAgICAqLworCWlmICghcWNfZXhpc3RzKQorCQltaWNfaXZbMV0gPSAweDAwOworCWZvciAoaSA9IDI7IGkgPCA4OyBpKyspCisJCW1pY19pdltpXSA9IG1wZHVbaSArIDhdOyAgICAgICAgICAgICAgICAgICAgLyogbWljX2l2WzI6N10gPSBBMlswOjVdID0gbXBkdVsxMDoxNV0gKi8KKyNpZmRlZiBDT05TSVNURU5UX1BOX09SREVSCisJCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQorCQkJbWljX2l2W2ldID0gcG5fdmVjdG9yW2kgLSA4XTsgICAgICAgICAgIC8qIG1pY19pdls4OjEzXSA9IFBOWzA6NV0gKi8KKyNlbHNlCisJCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQorCQkJbWljX2l2W2ldID0gcG5fdmVjdG9yWzEzIC0gaV07ICAgICAgICAgIC8qIG1pY19pdls4OjEzXSA9IFBOWzU6MF0gKi8KKyNlbmRpZgorCWkgPSAocGF5bG9hZF9sZW5ndGggLyAyNTYpOworCWkgPSAocGF5bG9hZF9sZW5ndGggJSAyNTYpOworCW1pY19pdlsxNF0gPSAodW5zaWduZWQgY2hhcikgKHBheWxvYWRfbGVuZ3RoIC8gMjU2KTsKKwltaWNfaXZbMTVdID0gKHVuc2lnbmVkIGNoYXIpIChwYXlsb2FkX2xlbmd0aCAlIDI1Nik7CisKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBiaXR3aXNlX3hvcigpICAgICAgICAgICAgICAgICAgICAqLworLyogQSAxMjggYml0LCBiaXR3aXNlIGV4Y2x1c2l2ZSBvciAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYml0d2lzZV94b3IodW5zaWduZWQgY2hhciAqaW5hLCB1bnNpZ25lZCBjaGFyICppbmIsIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKwlpbnQgaTsKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKQorCXsKKwkJb3V0W2ldID0gaW5hW2ldIF4gaW5iW2ldOworCX0KK30KKworCit2b2lkIGFlczEyOGsxMjhkKHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCkKK3sKKwlpbnQgcm91bmQ7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBpbnRlcm1lZGlhdGVhWzE2XTsKKwl1bnNpZ25lZCBjaGFyIGludGVybWVkaWF0ZWJbMTZdOworCXVuc2lnbmVkIGNoYXIgcm91bmRfa2V5WzE2XTsKKworCWZvcihpPTA7IGk8MTY7IGkrKykgcm91bmRfa2V5W2ldID0ga2V5W2ldOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgMTE7IHJvdW5kKyspCisJeworCQlpZiAocm91bmQgPT0gMCkKKwkJeworCQkJeG9yXzEyOChyb3VuZF9rZXksIGRhdGEsIGNpcGhlcnRleHQpOworCQkJbmV4dF9rZXkocm91bmRfa2V5LCByb3VuZCk7CisJCX0KKwkJZWxzZSBpZiAocm91bmQgPT0gMTApCisJCXsKKwkJCWJ5dGVfc3ViKGNpcGhlcnRleHQsIGludGVybWVkaWF0ZWEpOworCQkJc2hpZnRfcm93KGludGVybWVkaWF0ZWEsIGludGVybWVkaWF0ZWIpOworCQkJeG9yXzEyOChpbnRlcm1lZGlhdGViLCByb3VuZF9rZXksIGNpcGhlcnRleHQpOworCQl9CisJCWVsc2UgICAgLyogMSAtIDkgKi8KKwkJeworCQkJYnl0ZV9zdWIoY2lwaGVydGV4dCwgaW50ZXJtZWRpYXRlYSk7CisJCQlzaGlmdF9yb3coaW50ZXJtZWRpYXRlYSwgaW50ZXJtZWRpYXRlYik7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzBdLCAmaW50ZXJtZWRpYXRlYVswXSk7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzRdLCAmaW50ZXJtZWRpYXRlYVs0XSk7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzhdLCAmaW50ZXJtZWRpYXRlYVs4XSk7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzEyXSwgJmludGVybWVkaWF0ZWFbMTJdKTsKKwkJCXhvcl8xMjgoaW50ZXJtZWRpYXRlYSwgcm91bmRfa2V5LCBjaXBoZXJ0ZXh0KTsKKwkJCW5leHRfa2V5KHJvdW5kX2tleSwgcm91bmQpOworCQl9CisJfQorCit9CisKK3ZvaWQgY29uc3RydWN0X2N0cl9wcmVsb2FkKAorCXVuc2lnbmVkIGNoYXIgKmN0cl9wcmVsb2FkLAorCWludCBhNF9leGlzdHMsCisJaW50IHFjX2V4aXN0cywKKwl1bnNpZ25lZCBjaGFyICptcGR1LAorCXVuc2lnbmVkIGNoYXIgKnBuX3ZlY3RvciwKKwlpbnQgYykKK3sKKworCWludCBpID0gMDsKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKSBjdHJfcHJlbG9hZFtpXSA9IDB4MDA7CisJaSA9IDA7CisKKwljdHJfcHJlbG9hZFswXSA9IDB4MDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWcgKi8KKwlpZiAocWNfZXhpc3RzICYmIGE0X2V4aXN0cykgY3RyX3ByZWxvYWRbMV0gPSBtcGR1WzMwXSAmIDB4MGY7ICAgLyogUW9DX0NvbnRyb2wgICovCisJaWYgKHFjX2V4aXN0cyAmJiAhYTRfZXhpc3RzKSBjdHJfcHJlbG9hZFsxXSA9IG1wZHVbMjRdICYgMHgwZjsKKworCWZvciAoaSA9IDI7IGkgPCA4OyBpKyspCisJCWN0cl9wcmVsb2FkW2ldID0gbXBkdVtpICsgOF07ICAgICAgICAgICAgICAgICAgICAgICAvKiBjdHJfcHJlbG9hZFsyOjddID0gQTJbMDo1XSA9IG1wZHVbMTA6MTVdICovCisjaWZkZWYgQ09OU0lTVEVOVF9QTl9PUkRFUgorCSAgZm9yIChpID0gODsgaSA8IDE0OyBpKyspCisJCQljdHJfcHJlbG9hZFtpXSA9ICAgIHBuX3ZlY3RvcltpIC0gOF07ICAgICAgICAgICAvKiBjdHJfcHJlbG9hZFs4OjEzXSA9IFBOWzA6NV0gKi8KKyNlbHNlCisJICBmb3IgKGkgPSA4OyBpIDwgMTQ7IGkrKykKKwkJCWN0cl9wcmVsb2FkW2ldID0gICAgcG5fdmVjdG9yWzEzIC0gaV07ICAgICAgICAgIC8qIGN0cl9wcmVsb2FkWzg6MTNdID0gUE5bNTowXSAqLworI2VuZGlmCisJY3RyX3ByZWxvYWRbMTRdID0gICh1bnNpZ25lZCBjaGFyKSAoYyAvIDI1Nik7IC8vIEN0cgorCWN0cl9wcmVsb2FkWzE1XSA9ICAodW5zaWduZWQgY2hhcikgKGMgJSAyNTYpOworCit9CisKKworLy8KKy8vIFRSVUU6IFN1Y2Nlc3MhCisvLyBGQUxTRTogRGVjcnlwdCBFcnJvciEKKy8vCitCT09MRUFOIFJUTVBTb2Z0RGVjcnlwdFRLSVAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBEYXRhLAorCUlOIFVMT05HCURhdGFCeXRlQ250LAorCUlOIFVDSEFSICAgIFVzZXJQcmlvcml0eSwKKwlJTiBQQ0lQSEVSX0tFWQlwV3BhS2V5KQoreworCVVDSEFSCQkJS2V5SUQ7CisJVUlOVAkJCUhlYWRlckxlbjsKKyAgICBVQ0hBUgkJCWZjMDsKKwlVQ0hBUgkJCWZjMTsKKwlVU0hPUlQJCQlmYzsKKwlVSU5UCQkJZnJhbWVfdHlwZTsKKwlVSU5UCQkJZnJhbWVfc3VidHlwZTsKKyAgICBVSU5UCQkJZnJvbV9kczsKKyAgICBVSU5UCQkJdG9fZHM7CisJSU5UCQkJCWE0X2V4aXN0czsKKwlJTlQJCQkJcWNfZXhpc3RzOworCVVTSE9SVAkJCWR1cmF0aW9uOworCVVTSE9SVAkJCXNlcV9jb250cm9sOworCVVTSE9SVAkJCXFvc19jb250cm9sOworCVVDSEFSCQkJVEFbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUgkJCURBW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQlTQVtNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJUkM0S2V5WzE2XTsKKwlVSU5UCQkJcDFrWzVdOyAvL2ZvciBtaXhfa2V5OworCVVMT05HCQkJcG5sOy8qIExlYXN0IHNpZ25pZmljYW50IDE2IGJpdHMgb2YgUE4gKi8KKwlVTE9ORwkJCXBuaDsvKiBNb3N0IHNpZ25pZmljYW50IDMyIGJpdHMgb2YgUE4gKi8KKwlVSU5UCQkJbnVtX2Jsb2NrczsKKwlVSU5UCQkJcGF5bG9hZF9yZW1haW5kZXI7CisJQVJDRk9VUkNPTlRFWFQgCUFyY0ZvdXJDb250ZXh0OworCVVJTlQJCQljcmMzMiA9IDA7CisJVUlOVAkJCXRyYWlsZmNzID0gMDsKKwlVQ0hBUgkJCU1JQ1s4XTsKKwlVQ0hBUgkJCVRyYWlsTUlDWzhdOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcERhdGEsIERJUl9SRUFELCBGQUxTRSk7CisjZW5kaWYKKworCWZjMCA9ICpwRGF0YTsKKwlmYzEgPSAqKHBEYXRhICsgMSk7CisKKwlmYyA9ICooKFBVU0hPUlQpcERhdGEpOworCisJZnJhbWVfdHlwZSA9ICgoZmMwID4+IDIpICYgMHgwMyk7CisJZnJhbWVfc3VidHlwZSA9ICgoZmMwID4+IDQpICYgMHgwZik7CisKKyAgICBmcm9tX2RzID0gKGZjMSAmIDB4MikgPj4gMTsKKyAgICB0b19kcyA9IChmYzEgJiAweDEpOworCisgICAgYTRfZXhpc3RzID0gKGZyb21fZHMgJiB0b19kcyk7CisgICAgcWNfZXhpc3RzID0gKChmcmFtZV9zdWJ0eXBlID09IDB4MDgpIHx8ICAgIC8qIEFzc3VtZWQgUW9TIHN1YnR5cGVzICovCisgICAgICAgICAgICAgICAgICAoZnJhbWVfc3VidHlwZSA9PSAweDA5KSB8fCAgIC8qIExpa2VseSB0byBjaGFuZ2UuICAgICovCisgICAgICAgICAgICAgICAgICAoZnJhbWVfc3VidHlwZSA9PSAweDBhKSB8fAorICAgICAgICAgICAgICAgICAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwYikKKyAgICAgICAgICAgICAgICAgKTsKKworCUhlYWRlckxlbiA9IDI0OworCWlmIChhNF9leGlzdHMpCisJCUhlYWRlckxlbiArPSA2OworCisJS2V5SUQgPSAqKChQVUNIQVIpKHBEYXRhKyBIZWFkZXJMZW4gKyAzKSk7CisJS2V5SUQgPSBLZXlJRCA+PiA2OworCisJaWYgKHBXcGFLZXlbS2V5SURdLktleUxlbiA9PSAwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNvZnREZWNyeXB0VEtJUCBmYWlsZWQhKEtleUlEWyVkXSBMZW5ndGggY2FuIG5vdCBiZSAwKVxuIiwgS2V5SUQpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWR1cmF0aW9uID0gKigoUFVTSE9SVCkocERhdGErMikpOworCisJc2VxX2NvbnRyb2wgPSAqKChQVVNIT1JUKShwRGF0YSsyMikpOworCisJaWYgKHFjX2V4aXN0cykKKwl7CisJCWlmIChhNF9leGlzdHMpCisJCXsKKwkJCXFvc19jb250cm9sID0gKigoUFVTSE9SVCkocERhdGErMzApKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXFvc19jb250cm9sID0gKigoUFVTSE9SVCkocERhdGErMjQpKTsKKwkJfQorCX0KKworCWlmICh0b19kcyA9PSAwICYmIGZyb21fZHMgPT0gMSkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KERBLCBwRGF0YSs0LCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShTQSwgcERhdGErMTYsIE1BQ19BRERSX0xFTik7CisJCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsgIC8vQlNTSUQKKwl9CisJZWxzZSBpZiAodG9fZHMgPT0gMCAmJiBmcm9tX2RzID09IDAgKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErNCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoU0EsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCX0KKwllbHNlIGlmICh0b19kcyA9PSAxICYmIGZyb21fZHMgPT0gMCkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErMTYsIE1BQ19BRERSX0xFTik7CisJfQorCWVsc2UgaWYgKHRvX2RzID09IDEgJiYgZnJvbV9kcyA9PSAxKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErMTYsIE1BQ19BRERSX0xFTik7CisJCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSsyMiwgTUFDX0FERFJfTEVOKTsKKwl9CisKKwludW1fYmxvY2tzID0gKERhdGFCeXRlQ250IC0gMTYpIC8gMTY7CisJcGF5bG9hZF9yZW1haW5kZXIgPSAoRGF0YUJ5dGVDbnQgLSAxNikgJSAxNjsKKworCXBubCA9ICgqKHBEYXRhICsgSGVhZGVyTGVuKSkgKiAyNTYgKyAqKHBEYXRhICsgSGVhZGVyTGVuICsgMik7CisJcG5oID0gKigoUFVMT05HKShwRGF0YSArIEhlYWRlckxlbiArIDQpKTsKKwlwbmggPSBjcHUybGUzMihwbmgpOworCVJUTVBUa2lwTWl4S2V5KHBXcGFLZXlbS2V5SURdLktleSwgVEEsIHBubCwgcG5oLCBSQzRLZXksIHAxayk7CisKKwlBUkNGT1VSX0lOSVQoJkFyY0ZvdXJDb250ZXh0LCBSQzRLZXksIDE2KTsKKworCUFSQ0ZPVVJfREVDUllQVCgmQXJjRm91ckNvbnRleHQsIHBEYXRhICsgSGVhZGVyTGVuLCBwRGF0YSArIEhlYWRlckxlbiArIDgsIERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCk7CisJTmRpc01vdmVNZW1vcnkoJnRyYWlsZmNzLCBwRGF0YSArIERhdGFCeXRlQ250IC0gOCAtIDQsIDQpOworCWNyYzMyID0gUlRNUF9DQUxDX0ZDUzMyKFBQUElOSVRGQ1MzMiwgcERhdGEgKyBIZWFkZXJMZW4sIERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCAtIDQpOyAgLy9Ta2lwIElWK0VJViA4IGJ5dGVzICYgU2tpcCBsYXN0IDQgYnl0ZXMoRkNTKS4KKwljcmMzMiBePSAweGZmZmZmZmZmOyAgICAgICAgICAgICAvKiBjb21wbGVtZW50ICovCisKKyAgICBpZihjcmMzMiAhPSBjcHUybGUzMih0cmFpbGZjcykpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU29mdERlY3J5cHRUS0lQLCBXRVAgRGF0YSBJQ1YgRXJyb3IgIVxuIikpOwkgLy9JQ1YgZXJyb3IuCisKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCisJTmRpc01vdmVNZW1vcnkoVHJhaWxNSUMsIHBEYXRhICsgRGF0YUJ5dGVDbnQgLSA4IC0gOCAtIDQsIDgpOworCVJUTVBJbml0TUlDRW5naW5lKHBBZCwgcFdwYUtleVtLZXlJRF0uS2V5LCBEQSwgU0EsIFVzZXJQcmlvcml0eSwgcFdwYUtleVtLZXlJRF0uUnhNaWMpOworCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwRGF0YSArIEhlYWRlckxlbiwgRGF0YUJ5dGVDbnQgLSBIZWFkZXJMZW4gLSA4IC0gMTIpOworCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlR4KTsKKwlOZGlzTW92ZU1lbW9yeShNSUMsIHBBZC0+UHJpdmF0ZUluZm8uVHguTUlDLCA4KTsKKworCWlmICghTmRpc0VxdWFsTWVtb3J5KE1JQywgVHJhaWxNSUMsIDgpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRNUFNvZnREZWNyeXB0VEtJUCwgV0VQIERhdGEgTUlDIEVycm9yICFcbiIpKTsJIC8vTUlDIGVycm9yLgorCQkvL1JUTVBSZXBvcnRNaWNFcnJvcihwQWQsICZwV3BhS2V5W0tleUlEXSk7CS8vIG1hcmtlZCBieSBBbGJlcnRZIEAgMjAwNjA2MzAKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcERhdGEsIERJUl9SRUFELCBGQUxTRSk7CisjZW5kaWYKKwkvL0RCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiUlRNUFNvZnREZWNyeXB0VEtJUCBEZWNyaXB0IGRvbmUhIVxuIik7CisJcmV0dXJuIFRSVUU7Cit9CisKKworCisKK0JPT0xFQU4gUlRNUFNvZnREZWNyeXB0QUVTKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUglwRGF0YSwKKwlJTiBVTE9ORwlEYXRhQnl0ZUNudCwKKwlJTiBQQ0lQSEVSX0tFWQlwV3BhS2V5KQoreworCVVDSEFSCQkJS2V5SUQ7CisJVUlOVAkJCUhlYWRlckxlbjsKKwlVQ0hBUgkJCVBOWzZdOworCVVJTlQJCQlwYXlsb2FkX2xlbjsKKwlVSU5UCQkJbnVtX2Jsb2NrczsKKwlVSU5UCQkJcGF5bG9hZF9yZW1haW5kZXI7CisJVVNIT1JUCQkJZmM7CisJVUNIQVIJCQlmYzA7CisJVUNIQVIJCQlmYzE7CisJVUlOVAkJCWZyYW1lX3R5cGU7CisJVUlOVAkJCWZyYW1lX3N1YnR5cGU7CisJVUlOVAkJCWZyb21fZHM7CisJVUlOVAkJCXRvX2RzOworCUlOVAkJCQlhNF9leGlzdHM7CisJSU5UCQkJCXFjX2V4aXN0czsKKwlVQ0hBUgkJCWFlc19vdXRbMTZdOworCWludCAJCQlwYXlsb2FkX2luZGV4OworCVVJTlQgCQkJaTsKKwlVQ0hBUiAJCQljdHJfcHJlbG9hZFsxNl07CisJVUNIQVIgCQkJY2hhaW5fYnVmZmVyWzE2XTsKKwlVQ0hBUiAJCQlwYWRkZWRfYnVmZmVyWzE2XTsKKwlVQ0hBUiAJCQltaWNfaXZbMTZdOworCVVDSEFSIAkJCW1pY19oZWFkZXIxWzE2XTsKKwlVQ0hBUiAJCQltaWNfaGVhZGVyMlsxNl07CisJVUNIQVIJCQlNSUNbOF07CisJVUNIQVIJCQlUcmFpbE1JQ1s4XTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBEYXRhLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmCisKKwlmYzAgPSAqcERhdGE7CisJZmMxID0gKihwRGF0YSArIDEpOworCisJZmMgPSAqKChQVVNIT1JUKXBEYXRhKTsKKworCWZyYW1lX3R5cGUgPSAoKGZjMCA+PiAyKSAmIDB4MDMpOworCWZyYW1lX3N1YnR5cGUgPSAoKGZjMCA+PiA0KSAmIDB4MGYpOworCisJZnJvbV9kcyA9IChmYzEgJiAweDIpID4+IDE7CisJdG9fZHMgPSAoZmMxICYgMHgxKTsKKworCWE0X2V4aXN0cyA9IChmcm9tX2RzICYgdG9fZHMpOworCXFjX2V4aXN0cyA9ICgoZnJhbWVfc3VidHlwZSA9PSAweDA4KSB8fCAgICAvKiBBc3N1bWVkIFFvUyBzdWJ0eXBlcyAqLworCQkJCSAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwOSkgfHwgICAvKiBMaWtlbHkgdG8gY2hhbmdlLiAgICAqLworCQkJCSAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwYSkgfHwKKwkJCQkgIChmcmFtZV9zdWJ0eXBlID09IDB4MGIpCisJCQkJICk7CisKKwlIZWFkZXJMZW4gPSAyNDsKKwlpZiAoYTRfZXhpc3RzKQorCQlIZWFkZXJMZW4gKz0gNjsKKworCUtleUlEID0gKigoUFVDSEFSKShwRGF0YSsgSGVhZGVyTGVuICsgMykpOworCUtleUlEID0gS2V5SUQgPj4gNjsKKworCWlmIChwV3BhS2V5W0tleUlEXS5LZXlMZW4gPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBTb2Z0RGVjcnlwdEFFUyBmYWlsZWQhKEtleUlEWyVkXSBMZW5ndGggY2FuIG5vdCBiZSAwKVxuIiwgS2V5SUQpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCVBOWzBdID0gKihwRGF0YSsgSGVhZGVyTGVuKTsKKwlQTlsxXSA9ICoocERhdGErIEhlYWRlckxlbiArIDEpOworCVBOWzJdID0gKihwRGF0YSsgSGVhZGVyTGVuICsgNCk7CisJUE5bM10gPSAqKHBEYXRhKyBIZWFkZXJMZW4gKyA1KTsKKwlQTls0XSA9ICoocERhdGErIEhlYWRlckxlbiArIDYpOworCVBOWzVdID0gKihwRGF0YSsgSGVhZGVyTGVuICsgNyk7CisKKwlwYXlsb2FkX2xlbiA9IERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCAtIDg7CS8vIDggYnl0ZXMgZm9yIENDTVAgaGVhZGVyICwgOCBieXRlcyBmb3IgTUlDCisJcGF5bG9hZF9yZW1haW5kZXIgPSAocGF5bG9hZF9sZW4pICUgMTY7CisJbnVtX2Jsb2NrcyA9IChwYXlsb2FkX2xlbikgLyAxNjsKKworCisKKwkvLyBGaW5kIHN0YXJ0IG9mIHBheWxvYWQKKwlwYXlsb2FkX2luZGV4ID0gSGVhZGVyTGVuICsgODsgLy9JVitFSVYKKworCWZvciAoaT0wOyBpPCBudW1fYmxvY2tzOyBpKyspCisJeworCQljb25zdHJ1Y3RfY3RyX3ByZWxvYWQoY3RyX3ByZWxvYWQsCisJCQkJCQkJCWE0X2V4aXN0cywKKwkJCQkJCQkJcWNfZXhpc3RzLAorCQkJCQkJCQlwRGF0YSwKKwkJCQkJCQkJUE4sCisJCQkJCQkJCWkrMSApOworCisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY3RyX3ByZWxvYWQsIGFlc19vdXQpOworCisJCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgY2hhaW5fYnVmZmVyKTsKKwkJTmRpc01vdmVNZW1vcnkocERhdGEgKyBwYXlsb2FkX2luZGV4IC0gOCwgY2hhaW5fYnVmZmVyLCAxNik7CisJCXBheWxvYWRfaW5kZXggKz0gMTY7CisJfQorCisJLy8KKwkvLyBJZiB0aGVyZSBpcyBhIHNob3J0IGZpbmFsIGJsb2NrLCB0aGVuIHBhZCBpdAorCS8vIGVuY3J5cHQgaXQgYW5kIGNvcHkgdGhlIHVucGFkZGVkIHBhcnQgYmFjaworCS8vCisJaWYgKHBheWxvYWRfcmVtYWluZGVyID4gMCkKKwl7CisJCWNvbnN0cnVjdF9jdHJfcHJlbG9hZChjdHJfcHJlbG9hZCwKKwkJCQkJCQkJYTRfZXhpc3RzLAorCQkJCQkJCQlxY19leGlzdHMsCisJCQkJCQkJCXBEYXRhLAorCQkJCQkJCQlQTiwKKwkJCQkJCQkJbnVtX2Jsb2NrcyArIDEpOworCisJCU5kaXNaZXJvTWVtb3J5KHBhZGRlZF9idWZmZXIsIDE2KTsKKwkJTmRpc01vdmVNZW1vcnkocGFkZGVkX2J1ZmZlciwgcERhdGEgKyBwYXlsb2FkX2luZGV4LCBwYXlsb2FkX3JlbWFpbmRlcik7CisKKwkJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjdHJfcHJlbG9hZCwgYWVzX291dCk7CisKKwkJYml0d2lzZV94b3IoYWVzX291dCwgcGFkZGVkX2J1ZmZlciwgY2hhaW5fYnVmZmVyKTsKKwkJTmRpc01vdmVNZW1vcnkocERhdGEgKyBwYXlsb2FkX2luZGV4IC0gOCwgY2hhaW5fYnVmZmVyLCBwYXlsb2FkX3JlbWFpbmRlcik7CisJCXBheWxvYWRfaW5kZXggKz0gcGF5bG9hZF9yZW1haW5kZXI7CisJfQorCisJLy8KKwkvLyBEZXNjcnlwdCB0aGUgTUlDCisJLy8KKwljb25zdHJ1Y3RfY3RyX3ByZWxvYWQoY3RyX3ByZWxvYWQsCisJCQkJCQkJYTRfZXhpc3RzLAorCQkJCQkJCXFjX2V4aXN0cywKKwkJCQkJCQlwRGF0YSwKKwkJCQkJCQlQTiwKKwkJCQkJCQkwKTsKKwlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7CisJTmRpc01vdmVNZW1vcnkocGFkZGVkX2J1ZmZlciwgcERhdGEgKyBwYXlsb2FkX2luZGV4LCA4KTsKKworCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY3RyX3ByZWxvYWQsIGFlc19vdXQpOworCisJYml0d2lzZV94b3IoYWVzX291dCwgcGFkZGVkX2J1ZmZlciwgY2hhaW5fYnVmZmVyKTsKKworCU5kaXNNb3ZlTWVtb3J5KFRyYWlsTUlDLCBjaGFpbl9idWZmZXIsIDgpOworCisJLy8KKwkvLyBDYWxjdWxhdGUgTUlDCisJLy8KKworCS8vRm9yY2UgdGhlIHByb3RlY3RlZCBmcmFtZSBiaXQgb24KKwkqKHBEYXRhICsgMSkgPSAqKHBEYXRhICsgMSkgfCAweDQwOworCisJLy8gRmluZCBzdGFydCBvZiBwYXlsb2FkCisJLy8gQmVjYXVzZSB0aGUgQ0NNUCBoZWFkZXIgaGFzIGJlZW4gcmVtb3ZlZAorCXBheWxvYWRfaW5kZXggPSBIZWFkZXJMZW47CisKKwljb25zdHJ1Y3RfbWljX2l2KAorCQkJCQltaWNfaXYsCisJCQkJCXFjX2V4aXN0cywKKwkJCQkJYTRfZXhpc3RzLAorCQkJCQlwRGF0YSwKKwkJCQkJcGF5bG9hZF9sZW4sCisJCQkJCVBOKTsKKworCWNvbnN0cnVjdF9taWNfaGVhZGVyMSgKKwkJCQkJCW1pY19oZWFkZXIxLAorCQkJCQkJSGVhZGVyTGVuLAorCQkJCQkJcERhdGEpOworCisJY29uc3RydWN0X21pY19oZWFkZXIyKAorCQkJCQkJbWljX2hlYWRlcjIsCisJCQkJCQlwRGF0YSwKKwkJCQkJCWE0X2V4aXN0cywKKwkJCQkJCXFjX2V4aXN0cyk7CisKKwlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIG1pY19pdiwgYWVzX291dCk7CisJYml0d2lzZV94b3IoYWVzX291dCwgbWljX2hlYWRlcjEsIGNoYWluX2J1ZmZlcik7CisJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjaGFpbl9idWZmZXIsIGFlc19vdXQpOworCWJpdHdpc2VfeG9yKGFlc19vdXQsIG1pY19oZWFkZXIyLCBjaGFpbl9idWZmZXIpOworCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKworCS8vIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIDE2IGJ5dGUgcGF5bG9hZCBibG9jaworCWZvciAoaSA9IDA7IGkgPCBudW1fYmxvY2tzOyBpKyspCisJeworCQliaXR3aXNlX3hvcihhZXNfb3V0LCBwRGF0YSArIHBheWxvYWRfaW5kZXgsIGNoYWluX2J1ZmZlcik7CisJCXBheWxvYWRfaW5kZXggKz0gMTY7CisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKwl9CisKKwkvLyBBZGQgb24gdGhlIGZpbmFsIHBheWxvYWQgYmxvY2sgaWYgaXQgbmVlZHMgcGFkZGluZworCWlmIChwYXlsb2FkX3JlbWFpbmRlciA+IDApCisJeworCQlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7CisJCU5kaXNNb3ZlTWVtb3J5KHBhZGRlZF9idWZmZXIsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgcGF5bG9hZF9yZW1haW5kZXIpOworCisJCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBhZGRlZF9idWZmZXIsIGNoYWluX2J1ZmZlcik7CisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKwl9CisKKwkvLyBhZXNfb3V0IGNvbnRhaW5zIHBhZGRlZCBtaWMsIGRpc2NhcmQgbW9zdCBzaWduaWZpY2FudAorCS8vIDggYnl0ZXMgdG8gZ2VuZXJhdGUgNjQgYml0IE1JQworCWZvciAoaSA9IDAgOyBpIDwgODsgaSsrKSBNSUNbaV0gPSBhZXNfb3V0W2ldOworCisJaWYgKCFOZGlzRXF1YWxNZW1vcnkoTUlDLCBUcmFpbE1JQywgOCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVE1QU29mdERlY3J5cHRBRVMsIE1JQyBFcnJvciAhXG4iKSk7CSAvL01JQyBlcnJvci4KKwkJcmV0dXJuIEZBTFNFOworCX0KKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBEYXRhLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBhZXMxMjhrMTI4ZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFBlcmZvcm1zIGEgMTI4IGJpdCBBRVMgZW5jcnlwdCB3aXRoICAqLworLyogMTI4IGJpdCBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1ZPSUQgeG9yXzEyOCgKKwlJTiAgUFVDSEFSICBhLAorCUlOICBQVUNIQVIgIGIsCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCBpOworCisJZm9yIChpPTA7aTwxNjsgaSsrKQorCXsKKwkJb3V0W2ldID0gYVtpXSBeIGJbaV07CisJfQorfQorCitWT0lEIG5leHRfa2V5KAorCUlOICBQVUNIQVIgIGtleSwKKwlJTiAgSU5UICAgICByb3VuZCkKK3sKKwlVQ0hBUiAgICAgICByY29uOworCVVDSEFSICAgICAgIHNib3hfa2V5WzRdOworCVVDSEFSICAgICAgIHJjb25fdGFibGVbMTJdID0KKwl7CisJCTB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisJCTB4MWIsIDB4MzYsIDB4MzYsIDB4MzYKKwl9OworCisJc2JveF9rZXlbMF0gPSBSVE1QQ2tpcFNib3goa2V5WzEzXSk7CisJc2JveF9rZXlbMV0gPSBSVE1QQ2tpcFNib3goa2V5WzE0XSk7CisJc2JveF9rZXlbMl0gPSBSVE1QQ2tpcFNib3goa2V5WzE1XSk7CisJc2JveF9rZXlbM10gPSBSVE1QQ2tpcFNib3goa2V5WzEyXSk7CisKKwlyY29uID0gcmNvbl90YWJsZVtyb3VuZF07CisKKwl4b3JfMzIoJmtleVswXSwgc2JveF9rZXksICZrZXlbMF0pOworCWtleVswXSA9IGtleVswXSBeIHJjb247CisKKwl4b3JfMzIoJmtleVs0XSwgJmtleVswXSwgJmtleVs0XSk7CisJeG9yXzMyKCZrZXlbOF0sICZrZXlbNF0sICZrZXlbOF0pOworCXhvcl8zMigma2V5WzEyXSwgJmtleVs4XSwgJmtleVsxMl0pOworfQorCitWT0lEIHhvcl8zMigKKwlJTiAgUFVDSEFSICBhLAorCUlOICBQVUNIQVIgIGIsCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCBpOworCisJZm9yIChpPTA7aTw0OyBpKyspCisJeworCQlvdXRbaV0gPSBhW2ldIF4gYltpXTsKKwl9Cit9CisKK1ZPSUQgYnl0ZV9zdWIoCisJSU4gIFBVQ0hBUiAgaW4sCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCBpOworCisJZm9yIChpPTA7IGk8IDE2OyBpKyspCisJeworCQlvdXRbaV0gPSBSVE1QQ2tpcFNib3goaW5baV0pOworCX0KK30KKworVUNIQVIgUlRNUENraXBTYm94KAorCUlOICBVQ0hBUiAgIGEpCit7CisJcmV0dXJuIFNib3hUYWJsZVsoaW50KWFdOworfQorCitWT0lEIHNoaWZ0X3JvdygKKwlJTiAgUFVDSEFSICBpbiwKKwlPVVQgUFVDSEFSICBvdXQpCit7CisJb3V0WzBdID0gIGluWzBdOworCW91dFsxXSA9ICBpbls1XTsKKwlvdXRbMl0gPSAgaW5bMTBdOworCW91dFszXSA9ICBpblsxNV07CisJb3V0WzRdID0gIGluWzRdOworCW91dFs1XSA9ICBpbls5XTsKKwlvdXRbNl0gPSAgaW5bMTRdOworCW91dFs3XSA9ICBpblszXTsKKwlvdXRbOF0gPSAgaW5bOF07CisJb3V0WzldID0gIGluWzEzXTsKKwlvdXRbMTBdID0gaW5bMl07CisJb3V0WzExXSA9IGluWzddOworCW91dFsxMl0gPSBpblsxMl07CisJb3V0WzEzXSA9IGluWzFdOworCW91dFsxNF0gPSBpbls2XTsKKwlvdXRbMTVdID0gaW5bMTFdOworfQorCitWT0lEIG1peF9jb2x1bW4oCisJSU4gIFBVQ0hBUiAgaW4sCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCAgICAgICAgIGk7CisJVUNIQVIgICAgICAgYWRkMWJbNF07CisJVUNIQVIgICAgICAgYWRkMWJmN1s0XTsKKwlVQ0hBUiAgICAgICByb3RsWzRdOworCVVDSEFSICAgICAgIHN3YXBfaGFsZnNbNF07CisJVUNIQVIgICAgICAgYW5kZjdbNF07CisJVUNIQVIgICAgICAgcm90cls0XTsKKwlVQ0hBUiAgICAgICB0ZW1wWzRdOworCVVDSEFSICAgICAgIHRlbXBiWzRdOworCisJZm9yIChpPTAgOyBpPDQ7IGkrKykKKwl7CisJCWlmICgoaW5baV0gJiAweDgwKT09IDB4ODApCisJCQlhZGQxYltpXSA9IDB4MWI7CisJCWVsc2UKKwkJCWFkZDFiW2ldID0gMHgwMDsKKwl9CisKKwlzd2FwX2hhbGZzWzBdID0gaW5bMl07ICAgIC8qIFN3YXAgaGFsZnMgKi8KKwlzd2FwX2hhbGZzWzFdID0gaW5bM107CisJc3dhcF9oYWxmc1syXSA9IGluWzBdOworCXN3YXBfaGFsZnNbM10gPSBpblsxXTsKKworCXJvdGxbMF0gPSBpblszXTsgICAgICAgIC8qIFJvdGF0ZSBsZWZ0IDggYml0cyAqLworCXJvdGxbMV0gPSBpblswXTsKKwlyb3RsWzJdID0gaW5bMV07CisJcm90bFszXSA9IGluWzJdOworCisJYW5kZjdbMF0gPSBpblswXSAmIDB4N2Y7CisJYW5kZjdbMV0gPSBpblsxXSAmIDB4N2Y7CisJYW5kZjdbMl0gPSBpblsyXSAmIDB4N2Y7CisJYW5kZjdbM10gPSBpblszXSAmIDB4N2Y7CisKKwlmb3IgKGkgPSAzOyBpPjA7IGktLSkgICAgLyogbG9naWNhbCBzaGlmdCBsZWZ0IDEgYml0ICovCisJeworCQlhbmRmN1tpXSA9IGFuZGY3W2ldIDw8IDE7CisJCWlmICgoYW5kZjdbaS0xXSAmIDB4ODApID09IDB4ODApCisJCXsKKwkJCWFuZGY3W2ldID0gKGFuZGY3W2ldIHwgMHgwMSk7CisJCX0KKwl9CisJYW5kZjdbMF0gPSBhbmRmN1swXSA8PCAxOworCWFuZGY3WzBdID0gYW5kZjdbMF0gJiAweGZlOworCisJeG9yXzMyKGFkZDFiLCBhbmRmNywgYWRkMWJmNyk7CisKKwl4b3JfMzIoaW4sIGFkZDFiZjcsIHJvdHIpOworCisJdGVtcFswXSA9IHJvdHJbMF07ICAgICAgICAgLyogUm90YXRlIHJpZ2h0IDggYml0cyAqLworCXJvdHJbMF0gPSByb3RyWzFdOworCXJvdHJbMV0gPSByb3RyWzJdOworCXJvdHJbMl0gPSByb3RyWzNdOworCXJvdHJbM10gPSB0ZW1wWzBdOworCisJeG9yXzMyKGFkZDFiZjcsIHJvdHIsIHRlbXApOworCXhvcl8zMihzd2FwX2hhbGZzLCByb3RsLHRlbXBiKTsKKwl4b3JfMzIodGVtcCwgdGVtcGIsIG91dCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0bXBfd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3dlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjBhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3dlcC5jCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfd2VwLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlQYXVsIFd1CQkxMC0yOC0wMgkJSW5pdGlhbAorKi8KKworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorCitVSU5UIEZDU1RBQl8zMlsyNTZdID0KK3sKKwkweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLAorCTB4MDc2ZGM0MTksIDB4NzA2YWY0OGYsIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsCisJMHgwZWRiODgzMiwgMHg3OWRjYjhhNCwgMHhlMGQ1ZTkxZSwgMHg5N2QyZDk4OCwKKwkweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LCAweDkwYmYxZDkxLAorCTB4MWRiNzEwNjQsIDB4NmFiMDIwZjIsIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsCisJMHgxYWRhZDQ3ZCwgMHg2ZGRkZTRlYiwgMHhmNGQ0YjU1MSwgMHg4M2QzODVjNywKKwkweDEzNmM5ODU2LCAweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLAorCTB4MTQwMTVjNGYsIDB4NjMwNjZjZDksIDB4ZmEwZjNkNjMsIDB4OGQwODBkZjUsCisJMHgzYjZlMjBjOCwgMHg0YzY5MTA1ZSwgMHhkNTYwNDFlNCwgMHhhMjY3NzE3MiwKKwkweDNjMDNlNGQxLCAweDRiMDRkNDQ3LCAweGQyMGQ4NWZkLCAweGE1MGFiNTZiLAorCTB4MzViNWE4ZmEsIDB4NDJiMjk4NmMsIDB4ZGJiYmM5ZDYsIDB4YWNiY2Y5NDAsCisJMHgzMmQ4NmNlMywgMHg0NWRmNWM3NSwgMHhkY2Q2MGRjZiwgMHhhYmQxM2Q1OSwKKwkweDI2ZDkzMGFjLCAweDUxZGUwMDNhLCAweGM4ZDc1MTgwLCAweGJmZDA2MTE2LAorCTB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsIDB4Y2ZiYTk1OTksIDB4YjhiZGE1MGYsCisJMHgyODAyYjg5ZSwgMHg1ZjA1ODgwOCwgMHhjNjBjZDliMiwgMHhiMTBiZTkyNCwKKwkweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLAorCTB4NzZkYzQxOTAsIDB4MDFkYjcxMDYsIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsCisJMHg3MWIxODU4OSwgMHgwNmI2YjUxZiwgMHg5ZmJmZTRhNSwgMHhlOGI4ZDQzMywKKwkweDc4MDdjOWEyLCAweDBmMDBmOTM0LCAweDk2MDlhODhlLCAweGUxMGU5ODE4LAorCTB4N2Y2YTBkYmIsIDB4MDg2ZDNkMmQsIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsCisJMHg2YjZiNTFmNCwgMHgxYzZjNjE2MiwgMHg4NTY1MzBkOCwgMHhmMjYyMDA0ZSwKKwkweDZjMDY5NWVkLCAweDFiMDFhNTdiLCAweDgyMDhmNGMxLCAweGY1MGZjNDU3LAorCTB4NjViMGQ5YzYsIDB4MTJiN2U5NTAsIDB4OGJiZWI4ZWEsIDB4ZmNiOTg4N2MsCisJMHg2MmRkMWRkZiwgMHgxNWRhMmQ0OSwgMHg4Y2QzN2NmMywgMHhmYmQ0NGM2NSwKKwkweDRkYjI2MTU4LCAweDNhYjU1MWNlLCAweGEzYmMwMDc0LCAweGQ0YmIzMGUyLAorCTB4NGFkZmE1NDEsIDB4M2RkODk1ZDcsIDB4YTRkMWM0NmQsIDB4ZDNkNmY0ZmIsCisJMHg0MzY5ZTk2YSwgMHgzNDZlZDlmYywgMHhhZDY3ODg0NiwgMHhkYTYwYjhkMCwKKwkweDQ0MDQyZDczLCAweDMzMDMxZGU1LCAweGFhMGE0YzVmLCAweGRkMGQ3Y2M5LAorCTB4NTAwNTcxM2MsIDB4MjcwMjQxYWEsIDB4YmUwYjEwMTAsIDB4YzkwYzIwODYsCisJMHg1NzY4YjUyNSwgMHgyMDZmODViMywgMHhiOTY2ZDQwOSwgMHhjZTYxZTQ5ZiwKKwkweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIwZDA5ODIyLCAweGM3ZDdhOGI0LAorCTB4NTliMzNkMTcsIDB4MmViNDBkODEsIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsCisJMHhlZGI4ODMyMCwgMHg5YWJmYjNiNiwgMHgwM2I2ZTIwYywgMHg3NGIxZDI5YSwKKwkweGVhZDU0NzM5LCAweDlkZDI3N2FmLCAweDA0ZGIyNjE1LCAweDczZGMxNjgzLAorCTB4ZTM2MzBiMTIsIDB4OTQ2NDNiODQsIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsCisJMHhlNDBlY2YwYiwgMHg5MzA5ZmY5ZCwgMHgwYTAwYWUyNywgMHg3ZDA3OWViMSwKKwkweGYwMGY5MzQ0LCAweDg3MDhhM2QyLCAweDFlMDFmMjY4LCAweDY5MDZjMmZlLAorCTB4Zjc2MjU3NWQsIDB4ODA2NTY3Y2IsIDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsCisJMHhmZWQ0MWI3NiwgMHg4OWQzMmJlMCwgMHgxMGRhN2E1YSwgMHg2N2RkNGFjYywKKwkweGY5YjlkZjZmLCAweDhlYmVlZmY5LCAweDE3YjdiZTQzLCAweDYwYjA4ZWQ1LAorCTB4ZDZkNmEzZTgsIDB4YTFkMTkzN2UsIDB4MzhkOGMyYzQsIDB4NGZkZmYyNTIsCisJMHhkMWJiNjdmMSwgMHhhNmJjNTc2NywgMHgzZmI1MDZkZCwgMHg0OGIyMzY0YiwKKwkweGQ4MGQyYmRhLCAweGFmMGExYjRjLCAweDM2MDM0YWY2LCAweDQxMDQ3YTYwLAorCTB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsIDB4MzE2ZThlZWYsIDB4NDY2OWJlNzksCisJMHhjYjYxYjM4YywgMHhiYzY2ODMxYSwgMHgyNTZmZDJhMCwgMHg1MjY4ZTIzNiwKKwkweGNjMGM3Nzk1LCAweGJiMGI0NzAzLCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLAorCTB4YzViYTNiYmUsIDB4YjJiZDBiMjgsIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsCisJMHhjMmQ3ZmZhNywgMHhiNWQwY2YzMSwgMHgyY2Q5OWU4YiwgMHg1YmRlYWUxZCwKKwkweDliNjRjMmIwLCAweGVjNjNmMjI2LCAweDc1NmFhMzljLCAweDAyNmQ5MzBhLAorCTB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsCisJMHg5NWJmNGE4MiwgMHhlMmI4N2ExNCwgMHg3YmIxMmJhZSwgMHgwY2I2MWIzOCwKKwkweDkyZDI4ZTliLCAweGU1ZDViZTBkLCAweDdjZGNlZmI3LCAweDBiZGJkZjIxLAorCTB4ODZkM2QyZDQsIDB4ZjFkNGUyNDIsIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsCisJMHg4MWJlMTZjZCwgMHhmNmI5MjY1YiwgMHg2ZmIwNzdlMSwgMHgxOGI3NDc3NywKKwkweDg4MDg1YWU2LCAweGZmMGY2YTcwLCAweDY2MDYzYmNhLCAweDExMDEwYjVjLAorCTB4OGY2NTllZmYsIDB4Zjg2MmFlNjksIDB4NjE2YmZmZDMsIDB4MTY2Y2NmNDUsCisJMHhhMDBhZTI3OCwgMHhkNzBkZDJlZSwgMHg0ZTA0ODM1NCwgMHgzOTAzYjNjMiwKKwkweGE3NjcyNjYxLCAweGQwNjAxNmY3LCAweDQ5Njk0NzRkLCAweDNlNmU3N2RiLAorCTB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsIDB4NDBkZjBiNjYsIDB4MzdkODNiZjAsCisJMHhhOWJjYWU1MywgMHhkZWJiOWVjNSwgMHg0N2IyY2Y3ZiwgMHgzMGI1ZmZlOSwKKwkweGJkYmRmMjFjLCAweGNhYmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LAorCTB4YmFkMDM2MDUsIDB4Y2RkNzA2OTMsIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsCisJMHhiMzY2N2EyZSwgMHhjNDYxNGFiOCwgMHg1ZDY4MWIwMiwgMHgyYTZmMmI5NCwKKwkweGI0MGJiZTM3LCAweGMzMGM4ZWExLCAweDVhMDVkZjFiLCAweDJkMDJlZjhkCit9OworCisvKgorVUNIQVIgICBXRVBLRVlbXSA9IHsKKwkJLy9JVgorCQkweDAwLCAweDExLCAweDIyLAorCQkvL1dFUCBLRVkKKwkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQworCX07CisgKi8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUluaXQgV0VQIGZ1bmN0aW9uLgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBLZXkgICAgICAgIFBvaW50ZXIgdG8gdGhlIFdFUCBLRVkKKwkJS2V5SWQJCSAgIFdFUCBLZXkgSUQKKwkJS2V5TGVuICAgICAgdGhlIGxlbmd0aCBvZiBXRVAgS0VZCisJCXBEZXN0ICAgICAgIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHdoaWNoIEVuY3J5cHRpb24gZGF0YSB3aWxsIHN0b3JlIGluLgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBJbml0V2VwRW5naW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JVUNIQVIJCQlLZXlJZCwKKwlJTglVQ0hBUgkJCUtleUxlbiwKKwlJTiBPVVQJUFVDSEFSCQlwRGVzdCkKK3sKKwlVSU5UIGk7CisJVUNIQVIgICBXRVBLRVlbXSA9IHsKKwkJLy9JVgorCQkweDAwLCAweDExLCAweDIyLAorCQkvL1dFUCBLRVkKKwkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQworCX07CisKKwlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUFBQSU5JVEZDUzMyOyAgIC8vSW5pdCBjcmMzMi4KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIGlmIChwQWQtPlN0YUNmZy5iQ2tpcE9uICYmIChwQWQtPlN0YUNmZy5Da2lwRmxhZyAmIDB4MTApICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKyAgICB7CisgICAgICAgIEFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBwS2V5LCBLZXlMZW4pOyAgLy9JTklUIFNCT1gsIEtFWUxFTiszKElWKQorICAgICAgICBOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEtleSwgMyk7ICAvL0FwcGVuZCBJbml0IFZlY3RvcgorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgeworCQlOZGlzTW92ZU1lbW9yeShXRVBLRVkgKyAzLCBwS2V5LCBLZXlMZW4pOworCisgICAgICAgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKwkJCVdFUEtFWVtpXSA9IFJhbmRvbUJ5dGUocEFkKTsgICAvL0NhbGwgbWxtZSBSYW5kb21CeXRlKCkgZnVuY3Rpb24uCisJCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBXRVBLRVksIEtleUxlbiArIDMpOyAgLy9JTklUIFNCT1gsIEtFWUxFTiszKElWKQorCisJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBXRVBLRVksIDMpOyAgLy9BcHBlbmQgSW5pdCBWZWN0b3IKKyAgICB9CisJKihwRGVzdCszKSA9IChLZXlJZCA8PCA2KTsgICAgICAgLy9BcHBlbmQgS0VZSUQKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJRW5jcnlwdCB0cmFuc2ltaXR0ZWQgZGF0YQorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICBwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSB0cmFuc2ltaXR0ZWQgc291cmNlIGRhdGEgdGhhdCB3aWxsIGJlIGVuY3J5cHQKKyAgICAgIHBEZXN0ICAgICAgIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHdoZXJlIGVudHJ5cHRpb24gZGF0YSB3aWxsIGJlIHN0b3JlIGluLgorICAgICAgTGVuCQkJSW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGRhdGEKKworCVJldHVybiBWYWx1ZToKKyAgICAgIE5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEVuY3J5cHREYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBTcmMsCisJSU4JUFVDSEFSCQkJcERlc3QsCisJSU4JVUlOVAkJCUxlbikKK3sKKwlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUlRNUF9DQUxDX0ZDUzMyKHBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIsIHBTcmMsIExlbik7CisJQVJDRk9VUl9FTkNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIHBEZXN0LCBwU3JjLCBMZW4pOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlEZWNyeXB0IHJlY2VpdmVkIFdFUCBkYXRhCisKKwlBcmd1bWVudHM6CisJCXBBZGFwdGVyCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIGRhdGEKKwkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFICAgICAgICBEZWNyeXB0IFdFUCBkYXRhIHN1Y2Nlc3MKKwkJRkFMU0UgICAgICAgRGVjcnlwdCBXRVAgZGF0YSBmYWlsZWQKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOCVJUTVBTb2Z0RGVjcnlwdFdFUCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gUFVDSEFSCQkJcERhdGEsCisJSU4gVUxPTkcJCQlEYXRhQnl0ZUNudCwKKwlJTiBQQ0lQSEVSX0tFWQkJcEdyb3VwS2V5KQoreworCVVJTlQJdHJhaWxmY3M7CisJVUlOVCAgICBjcmMzMjsKKwlVQ0hBUglLZXlJZHg7CisJVUNIQVIgICBXRVBLRVlbXSA9IHsKKwkJLy9JVgorCQkweDAwLCAweDExLCAweDIyLAorCQkvL1dFUCBLRVkKKwkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQworCX07CisJVUNIQVIgCSpwUGF5bG9hZCA9IChVQ0hBUiAqKXBEYXRhICsgTEVOR1RIXzgwMl8xMTsKKwlVTE9ORwlwYXlsb2FkX2xlbiA9IERhdGFCeXRlQ250IC0gTEVOR1RIXzgwMl8xMTsKKworCU5kaXNNb3ZlTWVtb3J5KFdFUEtFWSwgcFBheWxvYWQsIDMpOyAgICAvL0dldCBXRVAgSVYKKworCUtleUlkeCA9ICgqKHBQYXlsb2FkICsgMykgJiAweGMwKSA+PiA2OworCWlmIChwR3JvdXBLZXlbS2V5SWR4XS5LZXlMZW4gPT0gMCkKKwkJcmV0dXJuIChGQUxTRSk7CisKKwlOZGlzTW92ZU1lbW9yeShXRVBLRVkgKyAzLCBwR3JvdXBLZXlbS2V5SWR4XS5LZXksIHBHcm91cEtleVtLZXlJZHhdLktleUxlbik7CisJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIFdFUEtFWSwgcEdyb3VwS2V5W0tleUlkeF0uS2V5TGVuICsgMyk7CisJQVJDRk9VUl9ERUNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIHBQYXlsb2FkLCBwUGF5bG9hZCArIDQsIHBheWxvYWRfbGVuIC0gNCk7CisJTmRpc01vdmVNZW1vcnkoJnRyYWlsZmNzLCBwUGF5bG9hZCArIHBheWxvYWRfbGVuIC0gOCwgNCk7CisJY3JjMzIgPSBSVE1QX0NBTENfRkNTMzIoUFBQSU5JVEZDUzMyLCBwUGF5bG9hZCwgcGF5bG9hZF9sZW4gLSA4KTsgIC8vU2tpcCBsYXN0IDQgYnl0ZXMoRkNTKS4KKwljcmMzMiBePSAweGZmZmZmZmZmOyAgICAgICAgICAgICAvKiBjb21wbGVtZW50ICovCisKKyAgICBpZihjcmMzMiAhPSBjcHUybGUzMih0cmFpbGZjcykpCisgICAgeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhIFdFUCBEYXRhIENSQyBFcnJvciAhXG4iKSk7CSAvL0NSQyBlcnJvci4KKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCXJldHVybiAoVFJVRSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlUaGUgU3RyZWFtIENpcGhlciBFbmNyeXB0aW9uIEFsZ29yaXRobSAiQVJDRk9VUiIgaW5pdGlhbGl6ZQorCisJQXJndW1lbnRzOgorCSAgIEN0eCAgICAgICAgIFBvaW50ZXIgdG8gQVJDRk9VUiBDT05URVhUIChTQk9YKQorCQlwS2V5ICAgICAgICBQb2ludGVyIHRvIHRoZSBXRVAgS0VZCisJCUtleUxlbiAgICAgIEluZGljYXRlIHRoZSBsZW5ndGggZm8gdGhlIFdFUCBLRVkKKworCVJldHVybiBWYWx1ZToKKwkgICBOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFSQ0ZPVVJfSU5JVCgKKwlJTglQQVJDRk9VUkNPTlRFWFQJQ3R4LAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JVUlOVAkJCUtleUxlbikKK3sKKwlVQ0hBUgl0LCB1OworCVVJTlQJa2V5aW5kZXg7CisJVUlOVAlzdGF0ZWluZGV4OworCVBVQ0hBUglzdGF0ZTsKKwlVSU5UCWNvdW50ZXI7CisKKwlzdGF0ZSA9IEN0eC0+U1RBVEU7CisJQ3R4LT5YID0gMDsKKwlDdHgtPlkgPSAwOworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCAyNTY7IGNvdW50ZXIrKykKKwkJc3RhdGVbY291bnRlcl0gPSAoVUNIQVIpY291bnRlcjsKKwlrZXlpbmRleCA9IDA7CisJc3RhdGVpbmRleCA9IDA7CisJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IDI1NjsgY291bnRlcisrKQorCXsKKwkJdCA9IHN0YXRlW2NvdW50ZXJdOworCQlzdGF0ZWluZGV4ID0gKHN0YXRlaW5kZXggKyBwS2V5W2tleWluZGV4XSArIHQpICYgMHhmZjsKKwkJdSA9IHN0YXRlW3N0YXRlaW5kZXhdOworCQlzdGF0ZVtzdGF0ZWluZGV4XSA9IHQ7CisJCXN0YXRlW2NvdW50ZXJdID0gdTsKKwkJaWYgKCsra2V5aW5kZXggPj0gS2V5TGVuKQorCQkJa2V5aW5kZXggPSAwOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUdldCBieXRlcyBmcm9tIEFSQ0ZPVVIgQ09OVEVYVCAoUy1CT1gpCisKKwlBcmd1bWVudHM6CisJICAgQ3R4ICAgICAgICAgUG9pbnRlciB0byBBUkNGT1VSIENPTlRFWFQgKFNCT1gpCisKKwlSZXR1cm4gVmFsdWU6CisJICAgVUNIQVIgIC0gdGhlIHZhbHVlIG9mIHRoZSBBUkNGT1VSIENPTlRFWFQgKFMtQk9YKQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VDSEFSCUFSQ0ZPVVJfQllURSgKKwlJTglQQVJDRk9VUkNPTlRFWFQJCUN0eCkKK3sKKyAgVUlOVCB4OworICBVSU5UIHk7CisgIFVDSEFSIHN4LCBzeTsKKyAgUFVDSEFSIHN0YXRlOworCisgIHN0YXRlID0gQ3R4LT5TVEFURTsKKyAgeCA9IChDdHgtPlggKyAxKSAmIDB4ZmY7CisgIHN4ID0gc3RhdGVbeF07CisgIHkgPSAoc3ggKyBDdHgtPlkpICYgMHhmZjsKKyAgc3kgPSBzdGF0ZVt5XTsKKyAgQ3R4LT5YID0geDsKKyAgQ3R4LT5ZID0geTsKKyAgc3RhdGVbeV0gPSBzeDsKKyAgc3RhdGVbeF0gPSBzeTsKKworICByZXR1cm4oc3RhdGVbKHN4ICsgc3kpICYgMHhmZl0pOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlUaGUgU3RyZWFtIENpcGhlciBEZWNyeXB0aW9uIEFsZ29yaXRobQorCisJQXJndW1lbnRzOgorCQlDdHggICAgICAgICBQb2ludGVyIHRvIEFSQ0ZPVVIgQ09OVEVYVCAoU0JPWCkKKwkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQorCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBUkNGT1VSX0RFQ1JZUFQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwRGVzdCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUlOVCBpOworCisJZm9yIChpID0gMDsgaSA8IExlbjsgaSsrKQorCQlwRGVzdFtpXSA9IHBTcmNbaV0gXiBBUkNGT1VSX0JZVEUoQ3R4KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCVRoZSBTdHJlYW0gQ2lwaGVyIEVuY3J5cHRpb24gQWxnb3JpdGhtCisKKwlBcmd1bWVudHM6CisJCUN0eCAgICAgICAgIFBvaW50ZXIgdG8gQVJDRk9VUiBDT05URVhUIChTQk9YKQorCQlwRGVzdAkJCVBvaW50ZXIgdG8gdGhlIERlc3RpbmF0aW9uCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIFNvdXJjZSBkYXRhCisJCUxlbiAgICAgICAgIEluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIFNvdXJjZSBkdGEKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBUkNGT1VSX0VOQ1JZUFQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwRGVzdCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUlOVCBpOworCisJZm9yIChpID0gMDsgaSA8IExlbjsgaSsrKQorCQlwRGVzdFtpXSA9IHBTcmNbaV0gXiBBUkNGT1VSX0JZVEUoQ3R4KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCVRoZSBTdHJlYW0gQ2lwaGVyIEVuY3J5cHRpb24gQWxnb3JpdGhtIHdoaWNoIGNvbmZvcm0gdG8gdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnQgdG8gZW5jcnlwdCAgR1RLLgorCisJQXJndW1lbnRzOgorCQlDdHggICAgICAgICBQb2ludGVyIHRvIEFSQ0ZPVVIgQ09OVEVYVCAoU0JPWCkKKwkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQorCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZHRhCisKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworVk9JRAlXUEFBUkNGT1VSX0VOQ1JZUFQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwRGVzdCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUlOVCBpOworICAgICAgICAvL2Rpc2NhcmQgZmlyc3QgMjU2IGJ5dGVzCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgICAgICAgQVJDRk9VUl9CWVRFKEN0eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTGVuOyBpKyspCisJCXBEZXN0W2ldID0gcFNyY1tpXSBeIEFSQ0ZPVVJfQllURShDdHgpOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDYWxjdWxhdGUgYSBuZXcgRkNTIGdpdmVuIHRoZSBjdXJyZW50IEZDUyBhbmQgdGhlIG5ldyBkYXRhLgorCisJQXJndW1lbnRzOgorCQlGY3MJICAgICAgdGhlIG9yaWdpbmFsIEZDUyB2YWx1ZQorCQlDcCAgICAgICAgICBwb2ludGVyIHRvIHRoZSBkYXRhIHdoaWNoIHdpbGwgYmUgY2FsY3VsYXRlIHRoZSBGQ1MKKwkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlVSU5UIC0gRkNTIDMyIGJpdHMKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VJTlQJUlRNUF9DQUxDX0ZDUzMyKAorCUlOCVVJTlQJRmNzLAorCUlOCVBVQ0hBUglDcCwKKwlJTglJTlQJCUxlbikKK3sKKwl3aGlsZSAoTGVuLS0pCisJICAgRmNzID0gKCgoRmNzKSA+PiA4KSBeIEZDU1RBQl8zMlsoKEZjcykgXiAoKkNwKyspKSAmIDB4ZmZdKTsKKworCXJldHVybiAoRmNzKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJR2V0IGxhc3QgRkNTIGFuZCBlbmNyeXB0IGl0IHRvIHRoZSBkZXN0aW5hdGlvbgorCisJQXJndW1lbnRzOgorCQlwRGVzdAkJCVBvaW50ZXIgdG8gdGhlIERlc3RpbmF0aW9uCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRJQ1YoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCXBEZXN0KQoreworCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgXj0gMHhmZmZmZmZmZjsgICAgICAgICAgICAgLyogY29tcGxlbWVudCAqLworCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBjcHUybGUzMihwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyKTsKKworCUFSQ0ZPVVJfRU5DUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBwRGVzdCwgKFBVQ0hBUikgJnBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIsIDQpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9idWxrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9idWxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNTcwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2J1bGsuYwpAQCAtMCwwICsxLDEzODIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJcnR1c2JfYnVsay5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCU1vZGlmaWNhdGlvbiBsb2dzCisJUGF1bCBMaW4JMDYtMjUtMjAwNAljcmVhdGVkCisKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKy8vIE1hdGNoIHRvdGFsIDYgYnVsa291dCBlbmRwb2ludCB0byBjb3JyZXNwb25kaW5nIHF1ZXVlLgorVUNIQVIJRXBUb1F1ZXVlWzZdPXtGSUZPX0VEQ0EsIEZJRk9fRURDQSwgRklGT19FRENBLCBGSUZPX0VEQ0EsIEZJRk9fRURDQSwgRklGT19NR01UfTsKKworLy9zdGF0aWMgQk9PTEVBTiBTaW5nbGVCdWxrT3V0ID0gRkFMU0U7CisKK3ZvaWQgUlRVU0JfRklMTF9CVUxLX1VSQiAoc3RydWN0IHVyYiAqcFVyYiwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcFVzYl9EZXYsCisJdW5zaWduZWQgaW50IGJ1bGtwaXBlLAorCXZvaWQgKnBUcmFuc2ZlckJ1ZiwKKwlpbnQgQnVmU2l6ZSwKKwl1c2JfY29tcGxldGVfdCBDb21wbGV0ZSwKKwl2b2lkICpwQ29udGV4dCkKK3sKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwl1c2JfZmlsbF9idWxrX3VyYihwVXJiLCBwVXNiX0RldiwgYnVsa3BpcGUsIHBUcmFuc2ZlckJ1ZiwgQnVmU2l6ZSwgKHVzYl9jb21wbGV0ZV90KUNvbXBsZXRlLCBwQ29udGV4dCk7CisjZWxzZQorCUZJTExfQlVMS19VUkIocFVyYiwgcFVzYl9EZXYsIGJ1bGtwaXBlLCBwVHJhbnNmZXJCdWYsIEJ1ZlNpemUsIENvbXBsZXRlLCBwQ29udGV4dCk7CisjZW5kaWYKKworfQorCitWT0lECVJUVVNCSW5pdFR4RGVzYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhfQ09OVEVYVAkJcFR4Q29udGV4dCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQsCisJSU4JdXNiX2NvbXBsZXRlX3QJRnVuYykKK3sKKwlQVVJCCQkJCXBVcmI7CisJUFVDSEFSCQkJCXBTcmMgPSBOVUxMOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcFVyYiA9IHBUeENvbnRleHQtPnBVcmI7CisJQVNTRVJUKHBVcmIpOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlwVHhDb250ZXh0LT5CdWxrT3V0UGlwZUlkID0gQnVsa091dFBpcGVJZDsKKworCWlmIChwVHhDb250ZXh0LT5iQWdncmVnYXRpYmxlKQorCXsKKwkJcFNyYyA9ICZwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+QWdncmVnYXRpb25bMl07CisJfQorCWVsc2UKKwl7CisJCXBTcmMgPSAoUFVDSEFSKSBwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXQ7CisJfQorCisKKwkvL0luaXRpYWxpemUgYSB0eCBidWxrIHVyYgorCVJUVVNCX0ZJTExfQlVMS19VUkIocFVyYiwKKwkJCQkJCXBPYmotPnBVc2JfRGV2LAorCQkJCQkJdXNiX3NuZGJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dFBpcGVJZF0pLAorCQkJCQkJcFNyYywKKwkJCQkJCXBUeENvbnRleHQtPkJ1bGtPdXRTaXplLAorCQkJCQkJRnVuYywKKwkJCQkJCXBUeENvbnRleHQpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCWlmIChwVHhDb250ZXh0LT5iQWdncmVnYXRpYmxlKQorCQlwVXJiLT50cmFuc2Zlcl9kbWEJPSAocFR4Q29udGV4dC0+ZGF0YV9kbWEgKyBUWF9CVUZGRVJfTk9STVNJWkUgKyAyKTsKKwllbHNlCisJCXBVcmItPnRyYW5zZmVyX2RtYQk9IHBUeENvbnRleHQtPmRhdGFfZG1hOworCisJcFVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisjZW5kaWYKKworfQorCitWT0lECVJUVVNCSW5pdEhUVHhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIVF9UWF9DT05URVhUCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVMT05HCQkJQnVsa091dFNpemUsCisJSU4JdXNiX2NvbXBsZXRlX3QJRnVuYykKK3sKKwlQVVJCCQkJCXBVcmI7CisJUFVDSEFSCQkJCXBTcmMgPSBOVUxMOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcFVyYiA9IHBUeENvbnRleHQtPnBVcmI7CisJQVNTRVJUKHBVcmIpOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlwVHhDb250ZXh0LT5CdWxrT3V0UGlwZUlkID0gQnVsa091dFBpcGVJZDsKKworCXBTcmMgPSAmcFR4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W3BUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb25dOworCisKKwkvL0luaXRpYWxpemUgYSB0eCBidWxrIHVyYgorCVJUVVNCX0ZJTExfQlVMS19VUkIocFVyYiwKKwkJCQkJCXBPYmotPnBVc2JfRGV2LAorCQkJCQkJdXNiX3NuZGJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dFBpcGVJZF0pLAorCQkJCQkJcFNyYywKKwkJCQkJCUJ1bGtPdXRTaXplLAorCQkJCQkJRnVuYywKKwkJCQkJCXBUeENvbnRleHQpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCXBVcmItPnRyYW5zZmVyX2RtYQk9IChwVHhDb250ZXh0LT5kYXRhX2RtYSArIHBUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pOworCXBVcmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworI2VuZGlmCisKK30KKworVk9JRAlSVFVTQkluaXRSeERlc2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFJYX0NPTlRFWFQJCXBSeENvbnRleHQpCit7CisJUFVSQgkJCQlwVXJiOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCVVMT05HCQkJCVJYX2J1bGtfc2l6ZTsKKworCisJcFVyYiA9IHBSeENvbnRleHQtPnBVcmI7CisJQVNTRVJUKHBVcmIpOworCisJaWYgKCBwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUgPT0gNjQpCisJCVJYX2J1bGtfc2l6ZSA9IDQwOTY7CisJZWxzZQorCQlSWF9idWxrX3NpemUgPSBNQVhfUlhCVUxLX1NJWkU7CisKKwkvL0luaXRpYWxpemUgYSByeCBidWxrIHVyYgorCVJUVVNCX0ZJTExfQlVMS19VUkIocFVyYiwKKwkJCQkJCXBPYmotPnBVc2JfRGV2LAorCQkJCQkJdXNiX3JjdmJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtJbkVwQWRkciksCisJCQkJCQkmKHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyW3BBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb25dKSwKKwkJCQkJCVJYX2J1bGtfc2l6ZSAtIChwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uKSwKKwkJCQkJCSh1c2JfY29tcGxldGVfdClSVFVTQkJ1bGtSeENvbXBsZXRlLAorCQkJCQkJKHZvaWQgKilwUnhDb250ZXh0KTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlwVXJiLT50cmFuc2Zlcl9kbWEJPSBwUnhDb250ZXh0LT5kYXRhX2RtYSArIHBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb247CisJcFVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisjZW5kaWYKKworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2RlZmluZSBCVUxLX09VVF9MT0NLKHBMb2NrLCBJcnFGbGFncykJXAorCQlpZigxIC8qIShpbl9pbnRlcnJ1cHQoKSAmIDB4ZmZmZjAwMDApKi8pCVwKKwkJCVJUTVBfSVJRX0xPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisjZGVmaW5lIEJVTEtfT1VUX1VOTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKKwkJaWYoMSAvKiEoaW5faW50ZXJydXB0KCkgJiAweGZmZmYwMDAwKSovKQlcCisJCQlSVE1QX0lSUV9VTkxPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisKK1ZPSUQJUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKworCVBIVF9UWF9DT05URVhUCXBIVFRYQ29udGV4dDsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwlQVFhJTkZPX1NUUlVDCXBUeEluZm8sIHBMYXN0VHhJbmZvID0gTlVMTDsKKwlQVFhXSV9TVFJVQyAgICAgICAgICAgICBwVHhXSTsKKwlVTE9ORwkJCVRtcEJ1bGtFbmRQb3MsIFRoaXNCdWxrU2l6ZTsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzID0gMCwgSXJxRmxhZ3MyID0gMDsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQa3QsIHBBcHBlbmRhbnQ7CisJQk9PTEVBTgkJCWJUeFFMYXN0Um91bmQgPSBGQUxTRTsKKwlVQ0hBUgkJCWFsbHplcm9bNF09IHsweDAsMHgwLDB4MCwweDB9OworCisJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBUUlVFOworCisJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKKwkJKQorCXsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOworCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCisJcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXSk7CisKKwlCVUxLX09VVF9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MyKTsKKwlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKQorCQl8fCAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24tOCkgPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKKwl7CisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzMik7CisKKwkJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisKKwkJLy8gQ2xlYXIgRGF0YSBmbGFnCisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwkJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvLyBDbGVhciBEYXRhIGZsYWcKKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBRyA8PCBCdWxrT3V0UGlwZUlkKSk7CisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisKKwkvL0RCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQnVsa091dC1COkk9MHglbHgsIENXUG9zPSVsZCwgQ1dSUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCFcbiIsIGluX2ludGVycnVwdCgpLAorCS8vCQkJCQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwKKwkvLwkJCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOworCXBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA9IHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb247CisJVGhpc0J1bGtTaXplID0gMDsKKwlUbXBCdWxrRW5kUG9zID0gcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uOworCXBXaXJlbGVzc1BrdCA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXTsKKworCWlmICgocEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPT0gVFJVRSkpCisJeworCQlpZiAoUlRNUEVxdWFsTWVtb3J5KHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsIGFsbHplcm8sNCkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoImUxLCBhbGx6ZXJvIDogJXggICV4ICAleCAgJXggICV4ICAleCAgJXggICV4IFxuIiwKKwkJCQlwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzFdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzJdLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbM10KKwkJCQkscEhUVFhDb250ZXh0LT5TYXZlZFBhZFs0XSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs1XSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs2XSxwSFRUWENvbnRleHQtPlNhdmVkUGFkWzddKSk7CisJCX0KKwkJTmRpc01vdmVNZW1vcnkoJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZCwgOCk7CisJCXBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID0gRkFMU0U7CisJCWlmIChwQWQtPmJGb3JjZVByaW50VFggPT0gVFJVRSkKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldCAtLT4gQ09QWSBQQUQuIEN1cldyaXRlID0gJWxkLCBOZXh0QnVsayA9ICVsZC4gICBFTmV4dEJ1bGsgPSAlbGQuXG4iLCAgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSk7CisJfQorCisJZG8KKwl7CisJCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykmcFdpcmVsZXNzUGt0W1RtcEJ1bGtFbmRQb3NdOworCQlwVHhXSSA9IChQVFhXSV9TVFJVQykmcFdpcmVsZXNzUGt0W1RtcEJ1bGtFbmRQb3MgKyBUWElORk9fU0laRV07CisKKwkJaWYgKHBBZC0+YkZvcmNlUHJpbnRUWCA9PSBUUlVFKQorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldCBBTVBEVSA9ICVkLlxuIiwgICBwVHhXSS0+QU1QRFUpKTsKKworCQkvLyBhZGQgYnkgSXZlcnNvbiwgbGltaXQgQnVsa091dCBzaXplIHRvIDRrIHRvIHBhc3MgV01NIGIgbW9kZSAyVDFSIHRlc3QgaXRlbXMKKwkJLy9pZiAoKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkKKwkJaWYgKChUaGlzQnVsa1NpemUgIT0gMCkgJiYgKHBUeFdJLT5QSFlNT0RFID09IE1PREVfQ0NLKSkKKwkJeworI2lmZGVmIElORl9BTUFaT05fU0UKKwkJCS8qSXZlcnNvbiBBZGQgZm9yIEFNQVpPTiBVU0IgKFJUMjA3MCAmJiAgUlQzMDcwKSB0byBwYXNzIFdNTSBBMi1UNCB+IEEyLVQxMCovCisJCQlpZihPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpKQorCQkJeworCQkJCS8qSXZlcnNvbiBwYXRjaCBmb3IgV01NIEE1LVQwNyAsV2lyZWxlc3NTdGFUb1dpcmVsZXNzU3RhIGRvIG5vdCBidWxrIG91dCBhZ2dyZWdhdGUqLworCQkJCWlmKHBUeFdJLT5QYWNrZXRJZCA9PSA2KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisgICAgICAgICAgICAgICAgCWJyZWFrOworICAgICAgICAgICAgICAgIH0KKwkJCQllbHNlIGlmIChCdWxrT3V0UGlwZUlkID09IDEpCisJCQkJeworCQkJCQkvKkJLICBObyBMaW1pdCBCdWxrT3V0IHNpemUgLiovCisJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKCgoVGhpc0J1bGtTaXplJjB4MTAwMCkgPT0gMHgxMDAwKSAmJiAgKEJ1bGtPdXRQaXBlSWQgPT0gMCkgICkpCisJCQkJeworCQkJCQkvKkJFICBMaW1pdCBCdWxrT3V0IHNpemUgdG8gYWJvdXQgNGsgYnl0ZXMuKi8KKwkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmICgoKFRoaXNCdWxrU2l6ZSYweGZmZmY4MDAwKSAhPSAwKSB8fCAoKChUaGlzQnVsa1NpemUmMHgxYzAwKSA9PSAweDFjMDApICYmICAoQnVsa091dFBpcGVJZCA9PSAyKSAgKSkKKwkJCQl7CisJCQkJCS8qVkkgTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDdrIGJ5dGVzLiovCisJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKCgoVGhpc0J1bGtTaXplJjB4MjUwMCkgPT0gMHgyNTAwKSAmJiAgKEJ1bGtPdXRQaXBlSWQgPT0gMykgICkpCisJCQkJeworCQkJCQkvKlZPIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA5ayBieXRlcy4qLworCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHgxMDAwKSA9PSAweDEwMDApKQorCQkJeworCQkJCS8qIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA0ayBieXRlcy4qLworCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCWJyZWFrOworCQkJfQorI2Vsc2UKKwkJCWlmICgoKFRoaXNCdWxrU2l6ZSYweGZmZmY4MDAwKSAhPSAwKSB8fCAoKFRoaXNCdWxrU2l6ZSYweDEwMDApID09IDB4MTAwMCkpCisJCQl7CisJCQkJLy8gTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDRrIGJ5dGVzLgorCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKworCQkJZWxzZSBpZiAoKChwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplIDwgNTEyKSAmJiAoKFRoaXNCdWxrU2l6ZSYweGZmZmZmODAwKSAhPSAwKSApIC8qfHwgKCAoVGhpc0J1bGtTaXplICE9IDApICAmJiAocFR4V0ktPkFNUERVID09IDApKSovKQorCQkJeworCQkJCS8vIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuCisJCQkJLy8gRm9yIHBlcmZvcm1lbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvLyBlbmQgSXZlcnNvbgorCQllbHNlCisJCXsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisvLyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vCQkJaWYoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHg2MDAwKSA9PSAweDYwMDApIHx8ICggKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkpCisvLwkJCXsKKy8vCQkJCS8qIEFNQVpPTl9TRTogQkcgbW9kZSBEaXNhYmxlIEJ1bGtPdXQgQWdncmVnYXRlLCBOIG1vZGUgQnVsa091dCBBZ2dyZWdhZXQgc2l6ZSAyNEsgKi8KKy8vCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworLy8gICAgICAgICAgICAgICBicmVhazsKKy8vCQkJfQorLy8JCQllbHNlCisvLyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKy8vCQkJeworCQkJCWlmKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkKKwkJCQl7CisJCQkJCWlmICgoKHBBZC0+QnVsa091dE1heFBhY2tldFNpemUgPCA1MTIpICYmICgoVGhpc0J1bGtTaXplJjB4ZmZmZmY4MDApICE9IDApKSB8fAorCQkJCQkJKFRoaXNCdWxrU2l6ZSAhPSAwKSkKKwkJCQkJeworCQkJCQkJLyogQU1BWk9OX1NFOiBSVDIwNzAgIERpc2FibGUgQnVsa091dCBBZ2dyZWdhdGUgd2hlbiBXTU0gZm9yIFVTQiBpc3N1ZSAqLworCQkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKy8qCisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHg2MDAwKSA9PSAweDYwMDApKQorCQkJCXsKKwkJCQkJLy8gTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDI0ayBieXRlcy4KKwkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyovCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisJCQlpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHg2MDAwKSA9PSAweDYwMDApKQorCQkJewkvLyBMaW1pdCBCdWxrT3V0IHNpemUgdG8gYWJvdXQgMjRrIGJ5dGVzLgorCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCWJyZWFrOworCQkJfQorCisJCQllbHNlIGlmICgoKHBBZC0+QnVsa091dE1heFBhY2tldFNpemUgPCA1MTIpICYmICgoVGhpc0J1bGtTaXplJjB4ZmZmZmY4MDApICE9IDApICkgLyp8fCAoIChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpKi8pCisJCQl7CS8vIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuCisJCQkJLy8gRm9yIHBlcmZvcm1lbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChUbXBCdWxrRW5kUG9zID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKKwkJeworCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQlicmVhazsKKwkJfQorCQkvL1BTIHBhY2tldHMgdXNlIEhDQ0EgcXVldWUgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJaWYgKHBUeEluZm8tPlFTRUwgIT0gRklGT19FRENBKQorCQl7CisJCQlwcmludGsoIiVzKCk6ID09PT0+IHBUeEluZm8tPlF1ZXVlU2VsKCVkKSE9IEZJRk9fRURDQSEhISFcbiIsIF9fRlVOQ1RJT05fXywgcFR4SW5mby0+UVNFTCk7CisJCQlwcmludGsoIlx0Q1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkKTsKKwkJCWhleF9kdW1wKCJXcm9uZyBRU2VsIFBrdDoiLCAoUFVDSEFSKSZwV2lyZWxlc3NQa3RbVG1wQnVsa0VuZFBvc10sIChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gLSBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKTsKKwkJfQorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJaWYgKHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIDw9IDgpCisJCXsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzMik7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiAvKlJUX0RFQlVHX1RSQUNFKi8sKCJlMiwgVVNCRE1BVHhQa3RMZW49PTAsIFNpemU9JWxkLCBiQ1NQYWQ9JWQsIENXUG9zPSVsZCwgTkJQb3M9JWxkLCBDV1JQb3M9JWxkIVxuIiwKKwkJCQkJcEhUVFhDb250ZXh0LT5CdWxrT3V0U2l6ZSwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcykpOworCQkJeworCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiAvKlJUX0RFQlVHX1RSQUNFKi8sKCIleCAgJXggICV4ICAleCAgJXggICV4ICAleCAgJXggXG4iLAorCQkJCQlwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzFdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzJdLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbM10KKwkJCQkJLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNF0sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNV0sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNl0scEhUVFhDb250ZXh0LT5TYXZlZFBhZFs3XSkpOworCQkJfQorCQkJcEFkLT5iRm9yY2VQcmludFRYID0gVFJVRTsKKwkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQkJLy9EQkdQUklOVChSVF9ERUJVR19MT1VELCgiT3V0OnBUeEluZm8tPlVTQkRNQVR4UGt0TGVuPSVkIVxuIiwgcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4pKTsKKwkJCXJldHVybjsKKwkJfQorCisJCQkvLyBJbmNyZWFzZSBUb3RhbCB0cmFuc21pdCBieXRlIGNvdW50ZXIKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudDsKKworCQlwTGFzdFR4SW5mbyA9IHBUeEluZm87CisKKwkJLy8gTWFrZSBzdXJlIHdlIHVzZSBFRENBIFFVRVVFLgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlwVHhJbmZvLT5RU0VMID0gRklGT19FRENBOyAvL1BTIHBhY2tldHMgdXNlIEhDQ0EgcXVldWUgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCVRoaXNCdWxrU2l6ZSArPSAocFR4SW5mby0+VVNCRE1BVHhQa3RMZW4rNCk7CisJCVRtcEJ1bGtFbmRQb3MgKz0gKHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuKzQpOworCisJCWlmIChUbXBCdWxrRW5kUG9zICE9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKKwkJCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSAxOworCisJCWlmIChwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9PSAxKQorCQl7CisJCQlpZiAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID09IDgpCisJCQkJcFR4SW5mby0+VVNCRE1BTmV4dFZMRCA9IDA7CisJCQlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDA7CisKKwkJCWJUeFFMYXN0Um91bmQgPSBUUlVFOworCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IDg7CisKKwkjaWZkZWYgUlRfQklHX0VORElBTgorCQkJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhJbmZvLCBUWVBFX1RYSU5GTyk7CisJCQlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhXSSwgVFlQRV9UWFdJKTsKKwkjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCQlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBUeEluZm8sIFRZUEVfVFhJTkZPKTsKKwkJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJfXdoaWxlIChUUlVFKTsKKworCS8vIGFkanVzdCB0aGUgcFR4SW5mby0+VVNCRE1BTmV4dFZMRCB2YWx1ZSBvZiBsYXN0IHBUeEluZm8uCisJaWYgKHBMYXN0VHhJbmZvKQorCXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcExhc3RUeEluZm8sIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCXBMYXN0VHhJbmZvLT5VU0JETUFOZXh0VkxEID0gMDsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcExhc3RUeEluZm8sIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJfQorCisJLyoKKwkJV2UgbmVlZCB0byBjb3B5IFNhdmVkUGFkIHdoZW4gZm9sbG93aW5nIGNvbmRpdGlvbiBtYXRjaGVkIQorCQkJMS4gTm90IHRoZSBsYXN0IHJvdW5kIG9mIHRoZSBUeFF1ZXVlIGFuZAorCQkJMi4gYW55IG1hdGNoIG9mIGZvbGxvd2luZyBjYXNlczoKKwkJCQkoMSkuIFRoZSBFbmQgUG9zaXRpb24gb2YgdGhpcyBidWxrIG91dCBpcyByZWFjaCB0byB0aGUgQ3VycmVuY3QgV3JpdGUgcG9zaXRpb24gYW5kCisJCQkJCQl0aGUgVHhJbmZvIGFuZCByZWxhdGVkIGhlYWRlciBhbHJlYWR5IHdyaXRlIHRvIHRoZSBDdXJXcml0ZVBvc2l0aW9uLgorCQkJICAgCQk9PihFTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBDdXJXcml0ZVBvc2l0aW9uKSAmJiAoQ3VyV3JpdGVSZWFsUG9zID4gQ3VyV3JpdGVQb3NpdGlvbikKKworCQkJCSgyKS4gVGhlIEVuZFBvc2l0aW9uIG9mIHRoZSBidWxrIG91dCBpcyBub3QgcmVhY2ggdG8gdGhlIEN1cnJlbnQgV3JpdGUgUG9zaXRpb24uCisJCQkJCT0+KEVOZXh0QnVsa091dFBvc2l0aW9uICE9IEN1cldyaXRlUG9zaXRpb24pCisJKi8KKwlpZiAoKGJUeFFMYXN0Um91bmQgPT0gRkFMU0UpICYmCisJCSAoKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikgJiYgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkgfHwKKwkJICAocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkpCisJeworCQlOZGlzTW92ZU1lbW9yeShwSFRUWENvbnRleHQtPlNhdmVkUGFkLCAmcFdpcmVsZXNzUGt0W3BIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb25dLCA4KTsKKwkJcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPSBUUlVFOworCQlpZiAoUlRNUEVxdWFsTWVtb3J5KHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsIGFsbHplcm8sNCkpCisJCXsKKwkJCVBVQ0hBUglwQnVmID0gJnBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbMF07CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJXQVJOSU5HLVplcm8tMzolMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCxDV1Bvcz0lbGQsIENXUlBvcz0lbGQsIGJDVz0lZCwgTkJQb3M9JWxkLCBUQlBvcz0lbGQsIFRCU2l6ZT0lbGRcbiIsCisJCQkJcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSxwQnVmWzNdLHBCdWZbNF0sIHBCdWZbNV0sIHBCdWZbNl0scEJ1Zls3XSwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcywKKwkJCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sIFRtcEJ1bGtFbmRQb3MsIFRoaXNCdWxrU2l6ZSkpOworCisJCQlwQnVmID0gJnBXaXJlbGVzc1BrdFtwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb25dOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiXHRDV1Bvcz0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSxwQnVmWzNdLHBCdWZbNF0sIHBCdWZbNV0sIHBCdWZbNl0scEJ1Zls3XSkpOworCQl9CisJCS8vREJHUFJJTlQoUlRfREVCVUdfTE9VRCwoIkVOUG9zPT1DV1Bvcz0lbGQsIENXUlBvcz0lbGQsIGJDU1BhZD0lZCFcbiIsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkKSk7CisJfQorCisJaWYgKHBBZC0+YkZvcmNlUHJpbnRUWCA9PSBUUlVFKQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJ1bGtPdXQtQTpTaXplPSVsZCwgQ1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgVGhpc0J1bGtTaXplLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQpKTsKKwkvL0RCR1BSSU5UKFJUX0RFQlVHX0xPVUQsKCJCdWxrT3V0LUE6U2l6ZT0lbGQsIENXUG9zPSVsZCwgQ1dSUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCwgYkxSb3VuZD0lZCFcbiIsIFRoaXNCdWxrU2l6ZSwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcywgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCwgYlR4UUxhc3RSb3VuZCkpOworCisJCS8vIFVTQiBETUEgZW5naW5lIHJlcXVpcmVzIHRvIHBhZCBleHRyYSA0IGJ5dGVzLiBUaGlzIHBhZCBkb2Vzbid0IGNvdW50IGludG8gcmVhbCBidWxrb3V0c2l6ZS4KKwlwQXBwZW5kYW50ID0gJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXTsKKwlOZGlzWmVyb01lbW9yeShwQXBwZW5kYW50LCA4KTsKKwkJVGhpc0J1bGtTaXplICs9IDQ7CisJCXBIVFRYQ29udGV4dC0+TGFzdE9uZSA9IFRSVUU7CisJCWlmICgoVGhpc0J1bGtTaXplICUgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKKwkJCVRoaXNCdWxrU2l6ZSArPSA0OworCXBIVFRYQ29udGV4dC0+QnVsa091dFNpemUgPSBUaGlzQnVsa1NpemU7CisKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFnczIpOworCisJLy8gSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IKKwlSVFVTQkluaXRIVFR4RGVzYyhwQWQsIHBIVFRYQ29udGV4dCwgQnVsa091dFBpcGVJZCwgVGhpc0J1bGtTaXplLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKKworCXBVcmIgPSBwSFRUWENvbnRleHQtPnBVcmI7CisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCisJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOworCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMDsKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkJcmV0dXJuOworCX0KKworCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCXBBZC0+QnVsa091dFJlcSsrOworCit9CisKKworVk9JRCBSVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQ7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUE9TX0NPT0tJRSAJCXBPYmo7CisJVUNIQVIJCQlCdWxrT3V0UGlwZUlkOworCisKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKwlwT2JqIAkJCT0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlCdWxrT3V0UGlwZUlkCT0gcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkOworCXBBZC0+QnVsa091dERhdGFPbmVTZWNDb3VudCsrOworCisJc3dpdGNoIChCdWxrT3V0UGlwZUlkKQorCXsKKwkJY2FzZSAwOgorCQkJCXBPYmotPmFjMF9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJCXBPYmotPmFjMV9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJCXBPYmotPmFjMl9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMl9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJCXBPYmotPmFjM19kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJCXBPYmotPmhjY2FfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5oY2NhX2RtYV9kb25lX3Rhc2spOworCQkJCWJyZWFrOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6IE5VTEwgZnJhbWUgdXNlIEJ1bGtPdXRQaXBlSWQgPSAwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQnVsa091dE51bGxGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0ID0gJihwQWQtPk51bGxDb250ZXh0KTsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBUUlVFOworCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAxOworCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisKKwkvLyBJbmNyZWFzZSBUb3RhbCB0cmFuc21pdCBieXRlIGNvdW50ZXIKKwlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQnl0ZUNvdW50ICs9ICBwTnVsbENvbnRleHQtPkJ1bGtPdXRTaXplOworCisKKwkvLyBDbGVhciBOdWxsIGZyYW1lIGJ1bGsgZmxhZworCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcE51bGxDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJUlRVU0JJbml0VHhEZXNjKHBBZCwgcE51bGxDb250ZXh0LCAwLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0TnVsbEZyYW1lQ29tcGxldGUpOworCisJcFVyYiA9IHBOdWxsQ29udGV4dC0+cFVyYjsKKwlpZigocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKSkhPTApCisJeworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKKwkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFswXSA9IDA7CisJCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVFVTQkJ1bGtPdXROdWxsRnJhbWU6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKKwkJcmV0dXJuOworCX0KKworfQorCisvLyBOVUxMIGZyYW1lIHVzZSBCdWxrT3V0UGlwZUlkID0gMAorVk9JRCBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQVFhfQ09OVEVYVAkJCXBOdWxsQ29udGV4dDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwlQT1NfQ09PS0lFCQkJcE9iajsKKworCisJcE51bGxDb250ZXh0CT0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJCT0gcE51bGxDb250ZXh0LT5wQWQ7CisJU3RhdHVzIAkJCT0gcFVyYi0+c3RhdHVzOworCisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlwT2JqLT5udWxsX2ZyYW1lX2NvbXBsZXRlX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7CisJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6IE1MTUUgdXNlIEJ1bGtPdXRQaXBlSWQgPSAwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQnVsa091dE1MTUVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQVFhfQ09OVEVYVAkJcE1MTUVDb250ZXh0OworCVBVUkIJCQlwVXJiOworCWludAkJCQlyZXQgPSAwOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKwlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpcEFkLT5NZ210UmluZy5DZWxsW3BBZC0+TWdtdFJpbmcuVHhEbWFJZHhdLkFsbG9jVmE7CisJcFVyYiA9IHBNTE1FQ29udGV4dC0+cFVyYjsKKworCWlmICgocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA+PSBNR01UX1JJTkdfU0laRSkgfHwKKwkJKHBNTE1FQ29udGV4dC0+SW5Vc2UgPT0gRkFMU0UpIHx8CisJCShwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9PSBGQUxTRSkpCisJeworCisKKwkJLy8gQ2xlYXIgTUxNRSBidWxrIGZsYWcKKwkJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOworCisJCXJldHVybjsKKwl9CisKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisJaWYgKChwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gVFJVRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W01HTVRQSVBFSURYXSA9IDE7CisJcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IEZBTFNFOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKKworCS8vIEluY3JlYXNlIFRvdGFsIHRyYW5zbWl0IGJ5dGUgY291bnRlcgorCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBNTE1FQ29udGV4dC0+QnVsa091dFNpemU7CisKKwkvLyBDbGVhciBNTE1FIGJ1bGsgZmxhZworCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9NTE1FKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBNTE1FQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKwkvLyBJbml0IFR4IGNvbnRleHQgZGVzY3JpcHRvcgorCVJUVVNCSW5pdFR4RGVzYyhwQWQsIHBNTE1FQ29udGV4dCwgTUdNVFBJUEVJRFgsICh1c2JfY29tcGxldGVfdClSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCS8vRm9yIG1nbXQgdXJiIGJ1ZmZlciwgYmVjYXVzZSB3ZSB1c2Ugc2tfYnVmZiwgc28gd2UgbmVlZCB0byBub3RpZnkgdGhlIFVTQiBjb250cm9sbGVyIGRvIGRtYSBtYXBwaW5nLgorCXBVcmItPnRyYW5zZmVyX2RtYQk9IDA7CisJcFVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gKH5VUkJfTk9fVFJBTlNGRVJfRE1BX01BUCk7CisjZW5kaWYKKworCXBVcmIgPSBwTUxNRUNvbnRleHQtPnBVcmI7CisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0TUxNRVBhY2tldDogU3VibWl0IE1MTUUgVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gRkFMU0U7CisJCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbTUdNVFBJUEVJRFhdID0gMDsKKwkJcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gVFJVRTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCisJCXJldHVybjsKKwl9CisKKwkvL0RCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAoIjwtLS1SVFVTQkJ1bGtPdXRNTE1FUGFja2V0IFxuIikpOworLy8JcHJpbnRrKCI8LS0tUlRVU0JCdWxrT3V0TUxNRVBhY2tldCxDcHU9JWQhLCBEbWE9JWQsIFN3SWR4PSVkIVxuIiwgcEFkLT5NZ210UmluZy5UeENwdUlkeCwgcEFkLT5NZ210UmluZy5UeERtYUlkeCwgcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCk7Cit9CisKKworVk9JRCBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlQVFhfQ09OVEVYVAkJCXBNTE1FQ29udGV4dDsKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJUE9TX0NPT0tJRSAJCQlwT2JqOworCWludAkJCQkJaW5kZXg7CisKKwkvL0RCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAoIi0tLT5SVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGVcbiIpKTsKKwlwTUxNRUNvbnRleHQJPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQkJPSBwTUxNRUNvbnRleHQtPnBBZDsKKwlwT2JqIAkJCT0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisJU3RhdHVzCQkJPSBwVXJiLT5zdGF0dXM7CisJaW5kZXggCQkJPSBwTUxNRUNvbnRleHQtPlNlbGZJZHg7CisKKwlwT2JqLT5tZ210X2RtYV9kb25lX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7CisJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6IFBzUG9sbCB1c2UgQnVsa091dFBpcGVJZCA9IDAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JCdWxrT3V0UHNQb2xsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVBUWF9DT05URVhUCQlwUHNQb2xsQ29udGV4dCA9ICYocEFkLT5Qc1BvbGxDb250ZXh0KTsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBUUlVFOworCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAxOworCXBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKworCisJLy8gQ2xlYXIgUFMtUG9sbCBidWxrIGZsYWcKKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfUFNQT0xMKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBQc1BvbGxDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJUlRVU0JJbml0VHhEZXNjKHBBZCwgcFBzUG9sbENvbnRleHQsIE1HTVRQSVBFSURYLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUpOworCisJcFVyYiA9IHBQc1BvbGxDb250ZXh0LT5wVXJiOworCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOworCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKKwkJcFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0UHNQb2xsOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCXJldHVybjsKKwl9CisKK30KKworLy8gUFMtUG9sbCBmcmFtZSB1c2UgQnVsa091dFBpcGVJZCA9IDAKK1ZPSUQgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUocHVyYmJfdCBwVXJiLHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQVFhfQ09OVEVYVAkJCXBQc1BvbGxDb250ZXh0OworCU5UU1RBVFVTCQkJU3RhdHVzOworCVBPU19DT09LSUUJCQlwT2JqOworCisKKwlwUHNQb2xsQ29udGV4dD0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkID0gcFBzUG9sbENvbnRleHQtPnBBZDsKKwlTdGF0dXMgPSBwVXJiLT5zdGF0dXM7CisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzayk7CisKK30KKworVk9JRCBEb0J1bGtJbihJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5JbmRleF0pOworCWlmICgocEFkLT5QZW5kaW5nUnggPiAwKSB8fCAocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gVFJVRSkgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlwUnhDb250ZXh0LT5JblVzZSA9IFRSVUU7CisJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJcEFkLT5QZW5kaW5nUngrKzsKKwlwQWQtPkJ1bGtJblJlcSsrOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisKKwkvLyBJbml0IFJ4IGNvbnRleHQgZGVzY3JpcHRvcgorCU5kaXNaZXJvTWVtb3J5KHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLCBwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQpOworCVJUVVNCSW5pdFJ4RGVzYyhwQWQsIHBSeENvbnRleHQpOworCisJcFVyYiA9IHBSeENvbnRleHQtPnBVcmI7CisJaWYgKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CS8vIGZhaWwKKworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlwQWQtPlBlbmRpbmdSeC0tOworCQlwQWQtPkJ1bGtJblJlcS0tOworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVFVTQkJ1bGtSZWNlaXZlOiBTdWJtaXQgUnggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJfQorCWVsc2UKKwl7CS8vIHN1Y2Nlc3MKKwkJQVNTRVJUKChwUnhDb250ZXh0LT5JblVzZSA9PSBwUnhDb250ZXh0LT5JUlBQZW5kaW5nKSk7CisJCS8vcHJpbnRrKCJCSURvbmUsIFBlbmQ9JWQsQklJZHg9JWQsQklSSWR4PSVkIVxuIiwgcEFkLT5QZW5kaW5nUngsIHBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4KTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJVVNCX1J4UGFja2V0IGluaXRpYWxpemVzIGEgVVJCIGFuZCB1c2VzIHRoZSBSeCBJUlAgdG8gc3VibWl0IGl0CisJdG8gVVNCLiBJdCBjaGVja3MgaWYgYW4gUnggRGVzY3JpcHRvciBpcyBhdmFpbGFibGUgYW5kIHBhc3NlcyB0aGUKKwl0aGUgY29yZXNwb25kaW5nIGJ1ZmZlciB0byBiZSBmaWxsZWQuIElmIG5vIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlCisJZmFpbHMgdGhlIHJlcXVlc3QuIFdoZW4gc2V0dGluZyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdlIHBhc3Mgb3VyCisJQWRhcHRlciBPYmplY3QgYXMgQ29udGV4dC4KKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRQkJCWZvdW5kIG1hdGNoZWQgdHVwbGUgY2FjaGUKKwkJRkFMU0UJCQlubyBtYXRjaGVkIGZvdW5kCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZSBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9SWAkJXAorCQkoZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwJXAorCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgXAorCQkgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCkKKworI2RlZmluZSBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9IQU5ETEVfUlgJXAorCQkoZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwJXAorCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgXAorCQkgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpCisKK1ZPSUQJUlRVU0JCdWxrUmVjZWl2ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9IQU5ETEVfUlgpKQorCQlyZXR1cm47CisKKwl3aGlsZSgxKQorCXsKKworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXhdKTsKKwkJaWYgKCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gRkFMU0UpICYmIChwUnhDb250ZXh0LT5SZWFkYWJsZSA9PSBUUlVFKSkgJiYKKwkJCShwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9PSBGQUxTRSkpCisJCXsKKwkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gVFJVRTsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisKKwkJCS8vIHJlYWQgUnhDb250ZXh0LCBTaW5jZSBub3QKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJU1RBUnhEb25lSW50ZXJydXB0SGFuZGxlKHBBZCwgVFJVRSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCS8vIEZpbmlzaCB0byBoYW5kbGUgdGhpcyBidWxrSW4gYnVmZmVyLgorCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQlwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQgPSAwOworCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUgPSBGQUxTRTsKKwkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gRkFMU0U7CisJCQlwQWQtPlJlYWRQb3NpdGlvbiA9IDA7CisJCQlwQWQtPlRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gMDsKKwkJCUlOQ19SSU5HX0lOREVYKHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBSWF9SSU5HX1NJWkUpOworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCEoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9SWCkpKQorCQlEb0J1bGtJbihwQWQpOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBwcm9jZXNzIFJ4IElycCBhbmQgY2FsbCByeCBjb21wbGV0ZSBmdW5jdGlvbi4KKworCUFyZ3VtZW50czoKKwkJRGV2aWNlT2JqZWN0CVBvaW50ZXIgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIG5leHQgbG93ZXIKKwkJCQkJCWRldmljZS4gRGV2aWNlT2JqZWN0IHBhc3NlZCBpbiBoZXJlIGJlbG9uZ3MgdG8KKwkJCQkJCXRoZSBuZXh0IGxvd2VyIGRyaXZlciBpbiB0aGUgc3RhY2sgYmVjYXVzZSB3ZQorCQkJCQkJd2VyZSBpbnZva2VkIHZpYSBJb0NhbGxEcml2ZXIgaW4gVVNCX1J4UGFja2V0CisJCQkJCQlBTkQgaXQgaXMgbm90IE9VUiBkZXZpY2Ugb2JqZWN0CisJICBJcnAJCQkJUHRyIHRvIGNvbXBsZXRlZCBJUlAKKwkgIENvbnRleHQJCQlQdHIgdG8gb3VyIEFkYXB0ZXIgb2JqZWN0IChjb250ZXh0IHNwZWNpZmllZAorCQkJCQkJaW4gSW9TZXRDb21wbGV0aW9uUm91dGluZQorCisJUmV0dXJuIFZhbHVlOgorCQlBbHdheXMgcmV0dXJucyBTVEFUVVNfTU9SRV9QUk9DRVNTSU5HX1JFUVVJUkVECisKKwlOb3RlOgorCQlBbHdheXMgcmV0dXJucyBTVEFUVVNfTU9SRV9QUk9DRVNTSU5HX1JFUVVJUkVECisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVFVTQkJ1bGtSeENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJLy8gdXNlIGEgcmVjZWl2ZSB0YXNrbGV0IHRvIGhhbmRsZSByZWNlaXZlZCBwYWNrZXRzOworCS8vIG9yIHNvbWV0aW1lcyBoYXJkd2FyZSBJUlEgd2lsbCBiZSBkaXNhYmxlZCBoZXJlLCBzbyB3ZSBjYW4gbm90CisJLy8gdXNlIHNwaW5fbG9ja19iaCgpL3NwaW5fdW5sb2NrX2JoKCkgYWZ0ZXIgSVJRIGlzIGRpc2FibGVkLiA6PAorCVBSWF9DT05URVhUCQlwUnhDb250ZXh0OworCVBSVE1QX0FEQVBURVIJcEFkOworCVBPU19DT09LSUUgCQlwT2JqOworCisKKwlwUnhDb250ZXh0CT0gKFBSWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJPSBwUnhDb250ZXh0LT5wQWQ7CisJcE9iaiAJCT0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcE9iai0+cnhfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPnJ4X2RvbmVfdGFzayk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQktpY2tCdWxrT3V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkKQoreworCS8vIEJ1bGtJbiBSZXNldCB3aWxsIHJlc2V0IHdob2xlIFVTQiBQSFkuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUIG5vdCBmbGFnZWQuCisJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQgLGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKQorI2lmZGVmIFJBTElOS19BVEUKKwkJJiYgIShBVEVfT04ocEFkKSkKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCSkKKwl7CisJCS8vIDIuIFBTLVBvbGwgZnJhbWUgaXMgbmV4dAorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfUFNQT0xMKSkKKwkJeworCQkJUlRVU0JCdWxrT3V0UHNQb2xsKHBBZCk7CisJCX0KKworCQkvLyA1LiBNbG1lIGZyYW1lIGlzIG5leHQKKwkJZWxzZSBpZiAoKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpKSAmJgorCQkJCSAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA8IE1HTVRfUklOR19TSVpFKSkKKwkJeworCQkJUlRVU0JCdWxrT3V0TUxNRVBhY2tldChwQWQsIHBBZC0+TWdtdFJpbmcuVHhEbWFJZHgpOworCQl9CisKKwkJLy8gNi4gRGF0YSBmcmFtZSBub3JtYWwgaXMgbmV4dAorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJCVJUVVNCQnVsa091dERhdGFQYWNrZXQocEFkLCAwLCBwQWQtPk5leHRCdWxrT3V0SW5kZXhbMF0pOworCQkJfQorCQl9CisJCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF8yKSkKKwkJeworCQkJaWYgKCgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHx8CisJCQkJKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJKSkKKwkJCXsKKwkJCQlSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMSwgcEFkLT5OZXh0QnVsa091dEluZGV4WzFdKTsKKwkJCX0KKwkJfQorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMykpCisJCXsKKwkJCWlmICgoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKSB8fAorCQkJCSghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQkJCSkpCisJCQl7CisJCQkJUlRVU0JCdWxrT3V0RGF0YVBhY2tldChwQWQsIDIsIHBBZC0+TmV4dEJ1bGtPdXRJbmRleFsyXSk7CisJCQl9CisJCX0KKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzQpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJCVJUVVNCQnVsa091dERhdGFQYWNrZXQocEFkLCAzLCBwQWQtPk5leHRCdWxrT3V0SW5kZXhbM10pOworCQkJfQorCQl9CisJCS8vUFMgcGFja2V0cyB1c2UgSENDQSBxdWV1ZSB3aGVuIGRlcXVldWUgZnJvbSBQUyB1bmljYXN0IHF1ZXVlIChXaUZpIFdQQTIgTUE5X0RUMSBmb3IgTWFydmVsbCBCIFNUQSkKKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzUpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJfQorCQl9CisKKwkJLy8gNy4gTnVsbCBmcmFtZSBpcyB0aGUgbGFzdAorCQllbHNlIGlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpKQorCQl7CisJCQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCQl7CisJCQkJUlRVU0JCdWxrT3V0TnVsbEZyYW1lKHBBZCk7CisJCQl9CisJCX0KKworCQkvLyA4LiBObyBkYXRhIGF2YWxpYWJsZQorCQllbHNlCisJCXsKKworCQl9CisJfQorI2lmZGVmIFJBTElOS19BVEUKKwkvKiBJZiB0aGUgbW9kZSBpcyBpbiBBVEUgbW9kZS4gKi8KKwllbHNlIGlmKChBVEVfT04ocEFkKSkgJiYKKwkJIVJUTVBfVEVTVF9GTEFHKHBBZCAsZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgpKS8vIFBFVEVSIDogd2F0Y2ggb3V0ICEKKwl7CisJCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSkpCisJCXsKKwkJCUFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMCk7CisJCX0KKwl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCUNhbGwgZnJvbSBSZXNldCBhY3Rpb24gYWZ0ZXIgQnVsa091dCBmYWlsZWQuCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJCUlkeDsKKwlQSFRfVFhfQ09OVEVYVAlwVHhDb250ZXh0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlXG4iKSk7CisKKwlmb3IgKElkeCA9IDA7IElkeCA8IDQ7IElkeCsrKQorCXsKKwkJcFR4Q29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtJZHhdOworCisJCXBUeENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSBwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uOworCQlwVHhDb250ZXh0LT5MYXN0T25lID0gRkFMU0U7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbSWR4XSk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW0lkeF0pOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1DbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2xlYW5VcE1MTUVCdWxrT3V0UXVldWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlXG4iKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLUNsZWFuVXBNTE1FQnVsa091dFF1ZXVlXG4iKSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwlVSU5UCQkJaTsKKworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCItLS0+UlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQXG4iKSk7CisJZm9yICggaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCXsKKwkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQlpZihwUnhDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCXsKKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJLy9OZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsKKwkJCS8vcEFkLT5QZW5kaW5nUngtLTsKKwkJfQorCX0KKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiPC0tLVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVBUWF9DT05URVhUCQkJcE1MTUVDb250ZXh0OworCVBUWF9DT05URVhUCQkJcEJlYWNvbkNvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwTnVsbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUHNQb2xsQ29udGV4dDsKKwlQVFhfQ09OVEVYVAkJCXBSVFNDb250ZXh0OworCVVJTlQJCQkJaSwgSWR4OworLy8JdW5zaWduZWQgaW50IAkJSXJxRmxhZ3M7CisvLwlORElTX1NQSU5fTE9DSwkJKnBMb2NrOworLy8JQk9PTEVBTgkJCQkqcFBlbmRpbmc7CisKKworLy8JcExvY2sgPSAmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF07CisvLwlwUGVuZGluZyA9ICZwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXTsKKworCWZvciAoSWR4ID0gMDsgSWR4IDwgNDsgSWR4KyspCisJeworCQlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W0lkeF0pOworCisJCWlmIChwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJeworCisJCQkvLyBHZXQgdGhlIFVTQl9DT05URVhUIGFuZCBjYW5jZWwgaXQncyBJUlA7IHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgd2lsbCBpdHNlbGYKKwkJCS8vIHJlbW92ZSBpdCBmcm9tIHRoZSBIZWFkUGVuZGluZ1NlbmRMaXN0IGFuZCBOVUxMIG91dCBIZWFkUGVuZGluZ1NlbmRMaXN0CisJCQkvLwl3aGVuIHRoZSBsYXN0IElSUCBvbiB0aGUgbGlzdCBoYXMgYmVlbgljYW5jZWxsZWQ7IHRoYXQncyBob3cgd2UgZXhpdCB0aGlzIGxvb3AKKwkJCS8vCisKKwkJCVJUVVNCX1VOTElOS19VUkIocEhUVFhDb250ZXh0LT5wVXJiKTsKKworCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2Vjb25kcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKwkJfQorCisjaWZkZWYgUkFMSU5LX0FURQorCQlwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9IDA7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDA7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gMDsKKwkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCQlwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPSAwOworCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gMDsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOworCX0KKworCS8vUlRNUF9JUlFfTE9DSyhwTG9jaywgSXJxRmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBNR01UX1JJTkdfU0laRTsgaSsrKQorCXsKKwkJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOworCQlpZihwTUxNRUNvbnRleHQgJiYgKHBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKSkKKwkJeworCisJCQkvLyBHZXQgdGhlIFVTQl9DT05URVhUIGFuZCBjYW5jZWwgaXQncyBJUlA7IHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgd2lsbCBpdHNlbGYKKwkJCS8vIHJlbW92ZSBpdCBmcm9tIHRoZSBIZWFkUGVuZGluZ1NlbmRMaXN0IGFuZCBOVUxMIG91dCBIZWFkUGVuZGluZ1NlbmRMaXN0CisJCQkvLwl3aGVuIHRoZSBsYXN0IElSUCBvbiB0aGUgbGlzdCBoYXMgYmVlbgljYW5jZWxsZWQ7IHRoYXQncyBob3cgd2UgZXhpdCB0aGlzIGxvb3AKKwkJCS8vCisKKwkJCVJUVVNCX1VOTElOS19VUkIocE1MTUVDb250ZXh0LT5wVXJiKTsKKwkJCXBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCisJCQkvLyBTbGVlcCAyMDAgbWljcm9zZWNzIHRvIGdpdmUgY2FuY2VsbGF0aW9uIHRpbWUgdG8gd29yaworCQkJUlRNUHVzZWNEZWxheSgyMDApOworCQl9CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gRkFMU0U7CisJLy9SVE1QX0lSUV9VTkxPQ0socExvY2ssIElycUZsYWdzKTsKKworCisJZm9yIChpID0gMDsgaSA8IEJFQUNPTl9SSU5HX1NJWkU7IGkrKykKKwl7CisJCXBCZWFjb25Db250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbaV0pOworCisJCWlmKHBCZWFjb25Db250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCXsKKworCQkJLy8gR2V0IHRoZSBVU0JfQ09OVEVYVCBhbmQgY2FuY2VsIGl0J3MgSVJQOyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdpbGwgaXRzZWxmCisJCQkvLyByZW1vdmUgaXQgZnJvbSB0aGUgSGVhZFBlbmRpbmdTZW5kTGlzdCBhbmQgTlVMTCBvdXQgSGVhZFBlbmRpbmdTZW5kTGlzdAorCQkJLy8Jd2hlbiB0aGUgbGFzdCBJUlAgb24gdGhlIGxpc3QgaGFzIGJlZW4JY2FuY2VsbGVkOyB0aGF0J3MgaG93IHdlIGV4aXQgdGhpcyBsb29wCisJCQkvLworCisJCQlSVFVTQl9VTkxJTktfVVJCKHBCZWFjb25Db250ZXh0LT5wVXJiKTsKKworCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2VjcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKwkJfQorCX0KKworCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJaWYgKHBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKQorCQlSVFVTQl9VTkxJTktfVVJCKHBOdWxsQ29udGV4dC0+cFVyYik7CisKKwlwUlRTQ29udGV4dCA9ICYocEFkLT5SVFNDb250ZXh0KTsKKwlpZiAocFJUU0NvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJUlRVU0JfVU5MSU5LX1VSQihwUlRTQ29udGV4dC0+cFVyYik7CisKKwlwUHNQb2xsQ29udGV4dCA9ICYocEFkLT5Qc1BvbGxDb250ZXh0KTsKKwlpZiAocFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJUlRVU0JfVU5MSU5LX1VSQihwUHNQb2xsQ29udGV4dC0+cFVyYik7CisKKwlmb3IgKElkeCA9IDA7IElkeCA8IDQ7IElkeCsrKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1tJZHhdKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tJZHhdID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbSWR4XSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxMzA5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2RhdGEuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydHVzYl9kYXRhLmMKKworCUFic3RyYWN0OgorCVJhbGluayBVU0IgZHJpdmVyIFR4L1J4IGZ1bmN0aW9ucy4KKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSmFuICAgICAgICAgICAgMDMtMjUtMjAwNiAgICBjcmVhdGVkCisKKyovCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKK2V4dGVybiAgVUNIQVIgUGh5MTFCR05leHRSYXRlVXB3YXJkW107IC8vIGRlZmluZWQgaW4gbWxtZS5jCitleHRlcm4gVUNIQVIJRXBUb1F1ZXVlW107CisKKworVk9JRCBSRVBPUlRfQU1TRFVfRlJBTUVTX1RPX0xMQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplKQoreworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCVVJTlQJCQluTVNEVTsKKwlzdHJ1Y3QJCQlza19idWZmICpwU2tiOworCisJbk1TRFUgPSAwOworCS8qIGFsbG9jYXRlIGEgcnggcGFja2V0ICovCisJcFNrYiA9IGRldl9hbGxvY19za2IoUlhfQlVGRkVSX0FHR1JFU0laRSk7CisJcFBhY2tldCA9IChQTkRJU19QQUNLRVQpT1NQS1RfVE9fUlRQS1QocFNrYik7CisJaWYgKHBTa2IpCisJeworCisJCS8qIGNvbnZlcnQgODAyLjExIHRvIDgwMi4zIHBhY2tldCAqLworCQlwU2tiLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBCU1MwKTsKKwkJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShwUGFja2V0LCBQS1RTUkNfTkRJUyk7CisJCWRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFBhY2tldCwgcERhdGEsIERhdGFTaXplKTsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJDYW4ndCBhbGxvY2F0ZSBza2JcbiIpKTsKKwl9Cit9CisKK05ESVNfU1RBVFVTCVJUVVNCRnJlZURlc2NyaXB0b3JSZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVSU5UMzIJCQlOdW1iZXJSZXF1aXJlZCkKK3sKKy8vCVVDSEFSCQkJRnJlZU51bWJlciA9IDA7CisvLwlVSU5UCQkJSW5kZXg7CisJTkRJU19TVEFUVVMJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJdW5zaWduZWQgbG9uZyAgIElycUZsYWdzOworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKworCisJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pICYmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgTnVtYmVyUmVxdWlyZWQgKyBMT0NBTF9UWEJVRl9TSVpFKSA+IHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikpCisJeworCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwl9CisJZWxzZSBpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9PSA4KSAmJiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uIDwgKE51bWJlclJlcXVpcmVkICsgTE9DQUxfVFhCVUZfU0laRSkpKQorCXsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgQnVsa091dFBpcGVJZCkpOworCX0KKwllbHNlIGlmIChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IFRSVUUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUVVNCRnJlZUQgYzMgLS0+IFF1ZUlkeD0lZCwgQ1dQb3M9JWxkLCBOQk91dFBvcz0lbGQhXG4iLCBCdWxrT3V0UGlwZUlkLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikpOworCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisJfQorCWVsc2UKKwl7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCisJcmV0dXJuIChTdGF0dXMpOworfQorCisKK05ESVNfU1RBVFVTIFJUVVNCRnJlZURlc2NyaXB0b3JSZWxlYXNlKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFVDSEFSCQlCdWxrT3V0UGlwZUlkKQoreworCXVuc2lnbmVkIGxvbmcgICBJcnFGbGFnczsKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisKKwlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gRkFMU0U7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKK30KKworCitCT09MRUFOCVJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJQnVsa091dFBpcGVJZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgSXJxRmxhZ3M7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCUJPT0xFQU4JCQluZWVkUXVlQmFjayA9IEZBTFNFOworCisJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlpZiAoKHBIVFRYQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKSAgLyomJiAocEFkLT5UeFN3UXVldWVbQnVsa091dFBpcGVJZF0uTnVtYmVyID09IDApICovKQorCXsKKwkJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSAmJgorCQkJKCgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbitNQVhfQUdHUkVHQVRJT05fU0laRSkgPCBNQVhfVFhCVUxLX0xJTUlUKSB8fCAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gTUFYX0FHR1JFR0FUSU9OX1NJWkUpKSkKKwkJeworCQkJbmVlZFF1ZUJhY2sgPSBUUlVFOworCQl9CisJCWVsc2UgaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSAmJgorCQkJCSAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gKyBNQVhfQUdHUkVHQVRJT05fU0laRSkgPCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQl7CisJCQluZWVkUXVlQmFjayA9IFRSVUU7CisJCX0KKwl9CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJcmV0dXJuIG5lZWRRdWVCYWNrOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJCQlJbmRleDsKKwlQUVVFVUVfRU5UUlkJcEVudHJ5OworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCVBRVUVVRV9IRUFERVIJcFF1ZXVlOworCisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCA0OyBJbmRleCsrKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5UeFN3UXVldWVMb2NrW0luZGV4XSk7CisJCXdoaWxlIChwQWQtPlR4U3dRdWV1ZVtJbmRleF0uSGVhZCAhPSBOVUxMKQorCQl7CisJCQlwUXVldWUgPSAoUFFVRVVFX0hFQURFUikgJihwQWQtPlR4U3dRdWV1ZVtJbmRleF0pOworCQkJcEVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKHBRdWV1ZSk7CisJCQlwUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSk7CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCX0KKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFN3UXVldWVMb2NrW0luZGV4XSk7CisKKwl9CisKK30KKworVk9JRCBSVE1QV3JpdGVUeEluZm8oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYSU5GT19TVFJVQyAJcFR4SW5mbywKKwlJTgkgIFVTSE9SVAkJVVNCRE1BcGt0TGVuLAorCUlOCSAgQk9PTEVBTgkJYldpdiwKKwlJTgkgIFVDSEFSCQkJUXVldWVTZWwsCisJSU4JICBVQ0hBUgkJCU5leHRWYWxpZCwKKwlJTgkgIFVDSEFSCQkJVHhCdXJzdCkKK3sKKwlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKKwlwVHhJbmZvLT5RU0VMID0gUXVldWVTZWw7CisJaWYgKFF1ZXVlU2VsICE9IEZJRk9fRURDQSkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gUXVldWVTZWwgIT0gRklGT19FRENBPD09PT09PT09PT09PVxuIikpOworCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSBGQUxTRTsgLy9OZXh0VmFsaWQ7ICAvLyBOZWVkIHRvIGNoZWNrIHdpdGggSmFuIGFib3V0IHRoaXMuCisJcFR4SW5mby0+VVNCRE1BVHhidXJzdCA9IFR4QnVyc3Q7CisJcFR4SW5mby0+V0lWID0gYldpdjsKKwlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDA7CisJcFR4SW5mby0+cnN2ID0gMDsKKwlwVHhJbmZvLT5yc3YyID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnR1c2JfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNTJlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2lvLmMKQEAgLTAsMCArMSwxOTA4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIAlNb2R1bGUgTmFtZToKKwlydHVzYl9pby5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkgICAgV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCSAgICBNb2RpZmljYXRpb24gbG9ncworCVBhdWwgTGluICAgIDA2LTI1LTIwMDQgIGNyZWF0ZWQKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogTklDIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKK05UU1RBVFVTCVJUVVNCRmlybXdhcmVSdW4oCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQlVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCisJCTB4MDEsCisJCTB4OCwKKwkJMCwKKwkJTlVMTCwKKwkJMCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIEZpcm13YXJlIHRvIE5JQy4KKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUVVNCRmlybXdhcmVXcml0ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJCXBGd0ltYWdlLAorCUlOIFVMT05HCQlGd0xlbikKK3sKKwlVSU5UMzIJCU1hY1JlZzsKKwlOVFNUQVRVUyAJU3RhdHVzOworLy8JVUxPTkcgCQlpOworCVVTSE9SVAkJd3JpdGVMZW47CisKKwlTdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IwLCAmTWFjUmVnKTsKKworCisJd3JpdGVMZW4gPSBGd0xlbjsKKwlSVFVTQk11bHRpV3JpdGUocEFkLCBGSVJNV0FSRV9JTUFHRV9CQVNFLCBwRndJbWFnZSwgd3JpdGVMZW4pOworCisJU3RhdHVzID0gUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgMHg3MDE0LCAweGZmZmZmZmZmKTsKKwlTdGF0dXMgPSBSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCAweDcwMWMsIDB4ZmZmZmZmZmYpOworCVN0YXR1cyA9IFJUVVNCRmlybXdhcmVSdW4ocEFkKTsKKworCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsSDJNX01BSUxCT1hfQ1NSLDApOworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMCk7Ly9yZXNldCByZiBieSBNQ1Ugc3VwcG9ydGVkIGJ5IG5ldyBmaXJtd2FyZQorCisJcmV0dXJuIFN0YXR1czsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogR2V0IGN1cnJlbnQgZmlybXdhcmUgb3BlcmF0aW9uIG1vZGUgKFJldHVybiBWYWx1ZSkKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJMCBvciAxID0gRG93bmxvYWRlZCBieSBob3N0IGRyaXZlcgorCQlvdGhlcnMgPSBEcml2ZXIgZG9lc24ndCBkb3dubG9hZCBmaXJtd2FyZQorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JGaXJtd2FyZU9wbW9kZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCShVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTiB8IFVTQkRfU0hPUlRfVFJBTlNGRVJfT0spLAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4sCisJCTB4MSwKKwkJMHgxMSwKKwkJMCwKKwkJcFZhbHVlLAorCQk0KTsKKwlyZXR1cm4gU3RhdHVzOworfQorTlRTVEFUVVMJUlRVU0JWZW5kZXJSZXNldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIi0tPlJUVVNCVmVuZGVyUmVzZXRcbiIpKTsKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCVVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKKwkJMHgwMSwKKwkJMHgxLAorCQkwLAorCQlOVUxMLAorCQkwKTsKKworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCI8LS1SVFVTQlZlbmRlclJlc2V0XG4iKSk7CisJcmV0dXJuIFN0YXR1czsKK30KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIHZhcmlvdXMgbGVuZ3RoIGRhdGEgZnJvbSBSVDI1NzMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCTXVsdGlSZWFkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJKFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOIHwgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSyksCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiwKKwkJMHg3LAorCQkwLAorCQlPZmZzZXQsCisJCXBEYXRhLAorCQlsZW5ndGgpOworCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIHZhcmlvdXMgbGVuZ3RoIGRhdGEgdG8gUlQyNTczCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQk11bHRpV3JpdGVfT25lQnl0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJLy8gVE9ETzogSW4gMjg3MCwgdXNlIHRoaXMgZnVuY2l0b24gY2FyZWZ1bGx5IGNhdXNlIGl0J3Mgbm90IHN0YWJsZS4KKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCVVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKKwkJMHg2LAorCQkwLAorCQlPZmZzZXQsCisJCXBEYXRhLAorCQkxKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKK05UU1RBVFVTCVJUVVNCTXVsdGlXcml0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCisgICAgICAgIFVTSE9SVCAgICAgICAgICBpbmRleCA9IDAsVmFsdWU7CisgICAgICAgIFBVQ0hBUiAgICAgICAgICBwU3JjID0gcERhdGE7CisgICAgICAgIFVTSE9SVCAgICAgICAgICByZXN1ZGUgPSAwOworCisgICAgICAgIHJlc3VkZSA9IGxlbmd0aCAlIDI7CisJCWxlbmd0aCAgKz0gcmVzdWRlOworCQlkbworCQl7CisJCQlWYWx1ZSA9KFVTSE9SVCkoICpwU3JjICB8ICgqKHBTcmMgKyAxKSA8PCA4KSk7CisJCVN0YXR1cyA9IFJUVVNCU2luZ2xlV3JpdGUocEFkLE9mZnNldCArIGluZGV4LFZhbHVlKTsKKyAgICAgICAgICAgIGluZGV4ICs9MjsKKyAgICAgICAgICAgIGxlbmd0aCAtPSAyOworICAgICAgICAgICAgcFNyYyA9IHBTcmMgKyAyOworICAgICAgICB9d2hpbGUobGVuZ3RoID4gMCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKK05UU1RBVFVTIFJUVVNCU2luZ2xlV3JpdGUoCisJSU4gCVJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVVNIT1JUCQkJVmFsdWUpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQlVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCisJCTB4MiwKKwkJVmFsdWUsCisJCU9mZnNldCwKKwkJTlVMTCwKKwkJMCk7CisKKwlyZXR1cm4gU3RhdHVzOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgMzItYml0IE1BQyByZWdpc3RlcgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkTUFDUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCU9VVAlQVUlOVDMyCQkJcFZhbHVlKQoreworCU5UU1RBVFVTCVN0YXR1czsKKwlVSU5UMzIJCWxvY2FsVmFsOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQkoVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gfCBVU0JEX1NIT1JUX1RSQU5TRkVSX09LKSwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOLAorCQkweDcsCisJCTAsCisJCU9mZnNldCwKKwkJJmxvY2FsVmFsLAorCQk0KTsKKworCSpwVmFsdWUgPSBsZTJjcHUzMihsb2NhbFZhbCk7CisKKworCWlmIChTdGF0dXMgPCAwKQorCQkqcFZhbHVlID0gMHhmZmZmZmZmZjsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIDMyLWJpdCBNQUMgcmVnaXN0ZXIKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCV3JpdGVNQUNSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVUlOVDMyCQkJVmFsdWUpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCVVJTlQzMgkJbG9jYWxWYWw7CisKKwlsb2NhbFZhbCA9IFZhbHVlOworCisJU3RhdHVzID0gUlRVU0JTaW5nbGVXcml0ZShwQWQsIE9mZnNldCwgKFVTSE9SVCkobG9jYWxWYWwgJiAweGZmZmYpKTsKKwlTdGF0dXMgPSBSVFVTQlNpbmdsZVdyaXRlKHBBZCwgT2Zmc2V0ICsgMiwgKFVTSE9SVCkoKGxvY2FsVmFsICYgMHhmZmZmMDAwMCkgPj4gMTYpKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworCisjaWYgMQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgOC1iaXQgQkJQIHJlZ2lzdGVyCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQlJlYWRCQlBSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUlkLAorCUlOCVBVQ0hBUgkJCXBWYWx1ZSkKK3sKKwlCQlBfQ1NSX0NGR19TVFJVQwlCYnBDc3I7CisJVUlOVAkJCWkgPSAwOworCU5UU1RBVFVTCQlzdGF0dXM7CisKKwkvLyBWZXJpZnkgdGhlIGJ1c3kgY29uZGl0aW9uCisJZG8KKwl7CisJCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgQkJQX0NTUl9DRkcsICZCYnBDc3Iud29yZCk7CisJCWlmKHN0YXR1cyA+PSAwKQorCQl7CisJCWlmICghKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpKQorCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRrKCJSVFVTQlJlYWRCQlBSZWdpc3RlcihCQlBfQ1NSX0NGR18xKTpyZXRyeSBjb3VudD0lZCFcbiIsIGkpOworCQlpKys7CisJfQorCXdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOworCisJaWYgKChpID09IFJFVFJZX0xJTUlUKSB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCS8vCisJCS8vIFJlYWQgZmFpbGVkIHRoZW4gUmV0dXJuIERlZmF1bHQgdmFsdWUuCisJCS8vCisJCSpwVmFsdWUgPSBwQWQtPkJicFdyaXRlTGF0Y2hbSWRdOworCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJLy8gUHJlcGFyZSBmb3Igd3JpdGUgbWF0ZXJpYWwKKwlCYnBDc3Iud29yZCAJCQkJPSAwOworCUJicENzci5maWVsZC5mUmVhZAkJCT0gMTsKKwlCYnBDc3IuZmllbGQuQnVzeQkJCT0gMTsKKwlCYnBDc3IuZmllbGQuUmVnTnVtIAkJPSBJZDsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgQmJwQ3NyLndvcmQpOworCisJaSA9IDA7CisJLy8gVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbgorCWRvCisJeworCQlzdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIEJCUF9DU1JfQ0ZHLCAmQmJwQ3NyLndvcmQpOworCQlpZiAoc3RhdHVzID49IDApCisJCXsKKwkJaWYgKCEoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkpCisJCXsKKwkJCSpwVmFsdWUgPSAoVUNIQVIpQmJwQ3NyLmZpZWxkLlZhbHVlOworCQkJYnJlYWs7CisJCX0KKwkJfQorCQlwcmludGsoIlJUVVNCUmVhZEJCUFJlZ2lzdGVyKEJCUF9DU1JfQ0ZHXzIpOnJldHJ5IGNvdW50PSVkIVxuIiwgaSk7CisJCWkrKzsKKwl9CisJd2hpbGUgKChpIDwgUkVUUllfTElNSVQpICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSk7CisKKwlpZiAoKGkgPT0gUkVUUllfTElNSVQpIHx8IChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJLy8KKwkJLy8gUmVhZCBmYWlsZWQgdGhlbiBSZXR1cm4gRGVmYXVsdCB2YWx1ZS4KKwkJLy8KKwkJKnBWYWx1ZSA9IHBBZC0+QmJwV3JpdGVMYXRjaFtJZF07CisKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCEhIVxuIikpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisjZWxzZQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgOC1iaXQgQkJQIHJlZ2lzdGVyIHZpYSBmaXJtd2FyZQorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkQkJQUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJZCwKKwlJTglQVUNIQVIJCQlwVmFsdWUpCit7CisJQkJQX0NTUl9DRkdfU1RSVUMJQmJwQ3NyOworCWludAkJCQkJaSwgazsKKwlmb3IgKGk9MDsgaTxNQVhfQlVTWV9DT1VOVDsgaSsrKQorCXsKKwkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBIMk1fQkJQX0FHRU5ULCAmQmJwQ3NyLndvcmQpOworCQlpZiAoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkKKwkJeworCQkJY29udGludWU7CisJCX0KKwkJQmJwQ3NyLndvcmQgPSAwOworCQlCYnBDc3IuZmllbGQuZlJlYWQgPSAxOworCQlCYnBDc3IuZmllbGQuQkJQX1JXX01PREUgPSAxOworCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CisJCUJicENzci5maWVsZC5SZWdOdW0gPSBJZDsKKwkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgSDJNX0JCUF9BR0VOVCwgQmJwQ3NyLndvcmQpOworCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4ODAsIDB4ZmYsIDB4MCwgMHgwKTsKKwkJZm9yIChrPTA7IGs8TUFYX0JVU1lfQ09VTlQ7IGsrKykKKwkJeworCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBIMk1fQkJQX0FHRU5ULCAmQmJwQ3NyLndvcmQpOworCQkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IElETEUpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKChCYnBDc3IuZmllbGQuQnVzeSA9PSBJRExFKSAmJgorCQkJKEJicENzci5maWVsZC5SZWdOdW0gPT0gSWQpKQorCQl7CisJCQkqcFZhbHVlID0gKFVDSEFSKUJicENzci5maWVsZC5WYWx1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQkJQIHJlYWQgUiVkPTB4JXggZmFpbFxuIiwgSWQsIEJicENzci53b3JkKSk7CisJCSpwVmFsdWUgPSBwQWQtPkJicFdyaXRlTGF0Y2hbSWRdOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2VuZGlmCisKKyNpZiAxCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogV3JpdGUgOC1iaXQgQkJQIHJlZ2lzdGVyCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQldyaXRlQkJQUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJZCwKKwlJTglVQ0hBUgkJCVZhbHVlKQoreworCUJCUF9DU1JfQ0ZHX1NUUlVDCUJicENzcjsKKwlVSU5UCQkJaSA9IDA7CisJTlRTVEFUVVMJCXN0YXR1czsKKwkvLyBWZXJpZnkgdGhlIGJ1c3kgY29uZGl0aW9uCisJZG8KKwl7CisJCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgQkJQX0NTUl9DRkcsICZCYnBDc3Iud29yZCk7CisJCWlmIChzdGF0dXMgPj0gMCkKKwkJeworCQlpZiAoIShCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSkKKwkJCWJyZWFrOworCQl9CisJCXByaW50aygiUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKEJCUF9DU1JfQ0ZHKTpyZXRyeSBjb3VudD0lZCFcbiIsIGkpOworCQlpKys7CisJfQorCXdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOworCisJaWYgKChpID09IFJFVFJZX0xJTUlUKSB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJLy8gUHJlcGFyZSBmb3Igd3JpdGUgbWF0ZXJpYWwKKwlCYnBDc3Iud29yZCAJCQkJPSAwOworCUJicENzci5maWVsZC5mUmVhZAkJCT0gMDsKKwlCYnBDc3IuZmllbGQuVmFsdWUJCQk9IFZhbHVlOworCUJicENzci5maWVsZC5CdXN5CQkJPSAxOworCUJicENzci5maWVsZC5SZWdOdW0gCQk9IElkOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIEJCUF9DU1JfQ0ZHLCBCYnBDc3Iud29yZCk7CisKKwlwQWQtPkJicFdyaXRlTGF0Y2hbSWRdID0gVmFsdWU7CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisjZWxzZQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIDgtYml0IEJCUCByZWdpc3RlciB2aWEgZmlybXdhcmUKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworTlRTVEFUVVMJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JVUNIQVIJCQlWYWx1ZSkKKworeworCUJCUF9DU1JfQ0ZHX1NUUlVDCUJicENzcjsKKwlpbnQJCQkJCUJ1c3lDbnQ7CisJZm9yIChCdXN5Q250PTA7IEJ1c3lDbnQ8TUFYX0JVU1lfQ09VTlQ7IEJ1c3lDbnQrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgSDJNX0JCUF9BR0VOVCwgJkJicENzci53b3JkKTsKKwkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpCisJCQljb250aW51ZTsKKwkJQmJwQ3NyLndvcmQgPSAwOworCQlCYnBDc3IuZmllbGQuZlJlYWQgPSAwOworCQlCYnBDc3IuZmllbGQuQkJQX1JXX01PREUgPSAxOworCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CisJCUJicENzci5maWVsZC5WYWx1ZSA9IFZhbHVlOworCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gSWQ7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsKKwkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDgwLCAweGZmLCAweDAsIDB4MCk7CisJCXBBZC0+QmJwV3JpdGVMYXRjaFtJZF0gPSBWYWx1ZTsKKwkJYnJlYWs7CisJfQorCWlmIChCdXN5Q250ID09IE1BWF9CVVNZX0NPVU5UKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQkJQIHdyaXRlIFIlZD0weCV4IGZhaWxcbiIsIElkLCBCYnBDc3Iud29yZCkpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2VuZGlmCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogV3JpdGUgUkYgcmVnaXN0ZXIgdGhyb3VnaCBNQUMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVJTlQzMgkJCVZhbHVlKQoreworCVBIWV9DU1I0X1NUUlVDCVBoeUNzcjQ7CisJVUlOVAkJCWkgPSAwOworCU5UU1RBVFVTCQlzdGF0dXM7CisKKwlOZGlzWmVyb01lbW9yeSgmUGh5Q3NyNCwgc2l6ZW9mKFBIWV9DU1I0X1NUUlVDKSk7CisJZG8KKwl7CisJCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgUkZfQ1NSX0NGRzAsICZQaHlDc3I0LndvcmQpOworCQlpZiAoc3RhdHVzID49IDApCisJCXsKKwkJaWYgKCEoUGh5Q3NyNC5maWVsZC5CdXN5KSkKKwkJCWJyZWFrOworCQl9CisJCXByaW50aygiUlRVU0JXcml0ZVJGUmVnaXN0ZXIoUkZfQ1NSX0NGRzApOnJldHJ5IGNvdW50PSVkIVxuIiwgaSk7CisJCWkrKzsKKwl9CisJd2hpbGUgKChpIDwgUkVUUllfTElNSVQpICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSk7CisKKwlpZiAoKGkgPT0gUkVUUllfTElNSVQpIHx8IChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCEhIVxuIikpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBSRl9DU1JfQ0ZHMCwgVmFsdWUpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisjaWZkZWYgUlQzMHh4CisJaWYocEFkLT5iVXNlRWZ1c2UpCisJeworCQlTdGF0dXMgPWVGdXNlUmVhZChwQWQsIE9mZnNldCwgcERhdGEsIGxlbmd0aCk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQkoVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gfCBVU0JEX1NIT1JUX1RSQU5TRkVSX09LKSwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOLAorCQkweDksCisJCTAsCisJCU9mZnNldCwKKwkJcERhdGEsCisJCWxlbmd0aCk7CisJfQorCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQldyaXRlRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlsZW5ndGgpCit7CisJTlRTVEFUVVMJU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyNpZmRlZiBSVDMweHgKKwlpZihwQWQtPmJVc2VFZnVzZSkKKwl7CisJCVN0YXR1cyA9IGVGdXNlV3JpdGUocEFkLCBPZmZzZXQsIHBEYXRhLCBsZW5ndGgpOworCX0KKwllbHNlCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAorCQkweDgsCisJCTAsCisJCU9mZnNldCwKKwkJcERhdGEsCisJCWxlbmd0aCk7CisJfQorCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUVVNCUHV0VG9TbGVlcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVSU5UMzIJCXZhbHVlOworCisJLy8gVGltZW91dCAweDQwIHggNTB1cworCXZhbHVlID0gKFNMRUVQQ0lEPDwxNikrKE9XTkVSTUNVPDwyNCkrICgweDQwPDw4KSsxOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NzAxMCwgdmFsdWUpOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NDA0LCAweDMwKTsKKwkvL1JUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJTbGVlcCBNYWlsYm94IHRlc3R2YWx1ZSAleFxuIiwgdmFsdWUpKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUVVNCV2FrZVVwKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAorCQkweDAxLAorCQkweDA5LAorCQkwLAorCQlOVUxMLAorCQkwKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkluaXRpYWxpemVDbWRRKAorCUlOCVBDbWRRCWNtZHEpCit7CisJY21kcS0+aGVhZCA9IE5VTEw7CisJY21kcS0+dGFpbCA9IE5VTEw7CisJY21kcS0+c2l6ZSA9IDA7CisJY21kcS0+Q21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9JTklURUQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRVU0JFbnF1ZXVlQ21kRnJvbU5kaXMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTkRJU19PSUQJCU9pZCwKKwlJTglCT09MRUFOCQkJU2V0SW5mb3JtYXRpb24sCisJSU4JUFZPSUQJCQlwSW5mb3JtYXRpb25CdWZmZXIsCisJSU4JVUlOVDMyCQkJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpCit7CisJTkRJU19TVEFUVVMJc3RhdHVzOworCVBDbWRRRWxtdAljbWRxZWxtdCA9IE5VTEw7CisJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisKKwlpZiAocE9iai0+UlRVU0JDbWRUaHJfcGlkIDwgMCkKKwkJcmV0dXJuIChORElTX1NUQVRVU19SRVNPVVJDRVMpOworCisJc3RhdHVzID0gUlRNUEFsbG9jYXRlTWVtb3J5KChQVk9JRCAqKSZjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSk7CisJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10ID09IE5VTEwpKQorCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1JFU09VUkNFUyk7CisKKwkJY21kcWVsbXQtPmJ1ZmZlciA9IE5VTEw7CisJCWlmIChwSW5mb3JtYXRpb25CdWZmZXIgIT0gTlVMTCkKKwkJeworCQkJc3RhdHVzID0gUlRNUEFsbG9jYXRlTWVtb3J5KChQVk9JRCAqKSZjbWRxZWxtdC0+YnVmZmVyLCBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCk7CisJCQlpZiAoKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB8fCAoY21kcWVsbXQtPmJ1ZmZlciA9PSBOVUxMKSkKKwkJCXsKKwkJCQlrZnJlZShjbWRxZWxtdCk7CisJCQkJcmV0dXJuIChORElTX1NUQVRVU19SRVNPVVJDRVMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIHBJbmZvcm1hdGlvbkJ1ZmZlciwgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCQkJCWNtZHFlbG10LT5idWZmZXJsZW5ndGggPSBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKKwkJCX0KKwkJfQorCQllbHNlCisJCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gMDsKKworCWNtZHFlbG10LT5jb21tYW5kID0gT2lkOworCWNtZHFlbG10LT5DbWRGcm9tTmRpcyA9IFRSVUU7CisJaWYgKFNldEluZm9ybWF0aW9uID09IFRSVUUpCisJCWNtZHFlbG10LT5TZXRPcGVyYXRpb24gPSBUUlVFOworCWVsc2UKKwkJY21kcWVsbXQtPlNldE9wZXJhdGlvbiA9IEZBTFNFOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJaWYgKHBBZC0+Q21kUS5DbWRRU3RhdGUgJiBSVDI4NzBfVEhSRUFEX0NBTl9ET19JTlNFUlQpCisJeworCQlFbnF1ZXVlQ21kKCgmcEFkLT5DbWRRKSwgY21kcWVsbXQpOworCQlzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKworCWlmIChzdGF0dXMgPT0gTkRJU19TVEFUVVNfRkFJTFVSRSkKKwl7CisJCWlmIChjbWRxZWxtdC0+YnVmZmVyKQorCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQtPmJ1ZmZlciwgY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwl9CisJZWxzZQorCVJUVVNCQ01EVXAocEFkKTsKKworCisgICAgcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFJUVVNCRW5xdWV1ZUludGVybmFsQ21kKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE5ESVNfT0lECQkJT2lkLAorCUlOIFBWT0lECQkJcEluZm9ybWF0aW9uQnVmZmVyLAorCUlOIFVJTlQzMgkJCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKQoreworCU5ESVNfU1RBVFVTCXN0YXR1czsKKwlQQ21kUUVsbXQJY21kcWVsbXQgPSBOVUxMOworCisKKwlzdGF0dXMgPSBSVE1QQWxsb2NhdGVNZW1vcnkoKFBWT0lEICopJmNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpKTsKKwlpZiAoKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB8fCAoY21kcWVsbXQgPT0gTlVMTCkpCisJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKwlOZGlzWmVyb01lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSk7CisKKwlpZihJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA+IDApCisJeworCQlzdGF0dXMgPSBSVE1QQWxsb2NhdGVNZW1vcnkoKFBWT0lEICopJmNtZHFlbG10LT5idWZmZXIsIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKwkJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10LT5idWZmZXIgPT0gTlVMTCkpCisJCXsKKwkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwkJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIHBJbmZvcm1hdGlvbkJ1ZmZlciwgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCQkJY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCA9IEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOworCQl9CisJfQorCWVsc2UKKwl7CisJCWNtZHFlbG10LT5idWZmZXIgPSBOVUxMOworCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gMDsKKwl9CisKKwljbWRxZWxtdC0+Y29tbWFuZCA9IE9pZDsKKwljbWRxZWxtdC0+Q21kRnJvbU5kaXMgPSBGQUxTRTsKKworCWlmIChjbWRxZWxtdCAhPSBOVUxMKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCWlmIChwQWQtPkNtZFEuQ21kUVN0YXRlICYgUlQyODcwX1RIUkVBRF9DQU5fRE9fSU5TRVJUKQorCQl7CisJCQlFbnF1ZXVlQ21kKCgmcEFkLT5DbWRRKSwgY21kcWVsbXQpOworCQkJc3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKwkJaWYgKHN0YXR1cyA9PSBORElTX1NUQVRVU19GQUlMVVJFKQorCQl7CisJCQlpZiAoY21kcWVsbXQtPmJ1ZmZlcikKKwkJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBjbWRxZWxtdC0+YnVmZmVybGVuZ3RoLCAwKTsKKwkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwkJfQorCQllbHNlCisJCVJUVVNCQ01EVXAocEFkKTsKKwl9CisJcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JEZXF1ZXVlQ21kKAorCUlOCVBDbWRRCQljbWRxLAorCU9VVAlQQ21kUUVsbXQJKnBjbWRxZWxtdCkKK3sKKwkqcGNtZHFlbG10ID0gY21kcS0+aGVhZDsKKworCWlmICgqcGNtZHFlbG10ICE9IE5VTEwpCisJeworCQljbWRxLT5oZWFkID0gY21kcS0+aGVhZC0+bmV4dDsKKwkJY21kcS0+c2l6ZS0tOworCQlpZiAoY21kcS0+c2l6ZSA9PSAwKQorCQkJY21kcS0+dGFpbCA9IE5VTEw7CisJfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgdXNiX2NvbnRyb2xfbXNnIC0gQnVpbGRzIGEgY29udHJvbCB1cmIsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24KKwkgIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworCSAgQHBpcGU6IGVuZHBvaW50ICJwaXBlIiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisJICBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZQorCSAgQHJlcXVlc3R0eXBlOiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUKKwkgIEB2YWx1ZTogVVNCIG1lc3NhZ2UgdmFsdWUKKwkgIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWUKKwkgIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQKKwkgIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZAorCSAgQHRpbWVvdXQ6IHRpbWUgaW4gamlmZmllcyB0byB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSBiZWZvcmUKKwkJCSAgdGltaW5nIG91dCAoaWYgMCB0aGUgd2FpdCBpcyBmb3JldmVyKQorCSAgQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorCisJICBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludAorCSAgYW5kIHdhaXRzIGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSwgb3IgdGltZW91dC4KKwkgIElmIHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorCisJIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LCBsaWtlIGEKKwkgIGJvdHRvbSBoYWxmIGhhbmRsZXIuCUlmIHlvdSBuZWVkIGFuIGFzeW5jaHJvbm91cyBtZXNzYWdlLCBvciBuZWVkIHRvIHNlbmQKKwkgIGEgbWVzc2FnZSBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dCwgdXNlIHVzYl9zdWJtaXRfdXJiKCkKKwkgIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLCBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkKKwkgIG1ldGhvZCBjYW4gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBTaW5jZSB5b3UgZG9uJ3QgaGF2ZSBhIGhhbmRsZSBvbgorCSAgdGhlIFVSQiB1c2VkLCB5b3UgY2FuJ3QgY2FuY2VsIHRoZSByZXF1ZXN0LgorCisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTICAgIFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUlOVDMyCQkJVHJhbnNmZXJGbGFncywKKwlJTglVQ0hBUgkJCVJlcXVlc3RUeXBlLAorCUlOCVVDSEFSCQkJUmVxdWVzdCwKKwlJTglVU0hPUlQJCQlWYWx1ZSwKKwlJTglVU0hPUlQJCQlJbmRleCwKKwlJTglQVk9JRAkJCVRyYW5zZmVyQnVmZmVyLAorCUlOCVVJTlQzMgkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoKQoreworCWludAkJCQlyZXQ7CisJUE9TX0NPT0tJRQkJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJkZXZpY2UgZGlzY29ubmVjdGVkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisJZWxzZSBpZiAoaW5faW50ZXJydXB0KCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJpbl9pbnRlcnJ1cHQsIFJUVVNCX1ZlbmRvclJlcXVlc3QgUmVxdWVzdCUwMnggVmFsdWUlMDR4IE9mZnNldCUwNHhcbiIsUmVxdWVzdCxWYWx1ZSxJbmRleCkpOworCisJCXJldHVybiAtMTsKKwl9CisJZWxzZQorCXsKKyNkZWZpbmUgTUFYX1JFVFJZX0NPVU5UICAxMAorCisJCWludCByZXRyeUNvdW50ID0gMDsKKwkJdm9pZAkqdG1wQnVmID0gVHJhbnNmZXJCdWZmZXI7CisKKwkJLy8gQWNxdWlyZSBDb250cm9sIHRva2VuCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCQlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJihwQWQtPlVzYlZlbmRvclJlcV9zZW1hcGhvcmUpKTsKKwkJaWYgKHBBZC0+VXNiVmVuZG9yUmVxQnVmKQorCQl7CisJCQlBU1NFUlQoVHJhbnNmZXJCdWZmZXJMZW5ndGggPE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisKKwkJICAgCXRtcEJ1ZiA9ICh2b2lkICopcEFkLT5Vc2JWZW5kb3JSZXFCdWY7CisJCSAgIAlOZGlzWmVyb01lbW9yeShwQWQtPlVzYlZlbmRvclJlcUJ1ZiwgVHJhbnNmZXJCdWZmZXJMZW5ndGgpOworCisJCSAgIAlpZiAoUmVxdWVzdFR5cGUgPT0gREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCkKKwkJICAgCSBOZGlzTW92ZU1lbW9yeSh0bXBCdWYsIFRyYW5zZmVyQnVmZmVyLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisJCX0KKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJCWRvIHsKKwkJaWYoIFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQpCisJCQlyZXQ9dXNiX2NvbnRyb2xfbXNnKHBPYmotPnBVc2JfRGV2LCB1c2Jfc25kY3RybHBpcGUoIHBPYmotPnBVc2JfRGV2LCAwICksIFJlcXVlc3QsIFJlcXVlc3RUeXBlLCBWYWx1ZSxJbmRleCwgdG1wQnVmLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCwgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMpOworCQllbHNlIGlmKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTikKKwkJCXJldD11c2JfY29udHJvbF9tc2cocE9iai0+cFVzYl9EZXYsIHVzYl9yY3ZjdHJscGlwZSggcE9iai0+cFVzYl9EZXYsIDAgKSwgUmVxdWVzdCwgUmVxdWVzdFR5cGUsIFZhbHVlLEluZGV4LCB0bXBCdWYsIFRyYW5zZmVyQnVmZmVyTGVuZ3RoLCBDT05UUk9MX1RJTUVPVVRfSklGRklFUyk7CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgidmVuZG9yIHJlcXVlc3QgZGlyZWN0aW9uIGlzIGZhaWxlZFxuIikpOworCQkJcmV0ID0gLTE7CisJCX0KKworCQkJcmV0cnlDb3VudCsrOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoIiNcbiIpOworCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCQl9CisJCX0gd2hpbGUoKHJldCA8IDApICYmIChyZXRyeUNvdW50IDwgTUFYX1JFVFJZX0NPVU5UKSk7CisKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJICAJaWYgKChwQWQtPlVzYlZlbmRvclJlcUJ1ZikgJiYgKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTikpCisJCQlOZGlzTW92ZU1lbW9yeShUcmFuc2ZlckJ1ZmZlciwgdG1wQnVmLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisJICAJdXAoJihwQWQtPlVzYlZlbmRvclJlcV9zZW1hcGhvcmUpKTsKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKy8vCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiVVNCVmVuZG9yUmVxdWVzdCBmYWlsZWQgcmV0PSVkIFxuIixyZXQpKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCX1ZlbmRvclJlcXVlc3QgZmFpbGVkKCVkKSxUeEZsYWdzPTB4JXgsIFJlcVR5cGU9JXMsIFJlcT0weCV4LCBJbmRleD0weCV4XG4iLAorCQkJCQkJcmV0LCBUcmFuc2ZlckZsYWdzLCAoUmVxdWVzdFR5cGUgPT0gREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCA/ICJPVVQiIDogIklOIiksIFJlcXVlc3QsIEluZGV4KSk7CisJCQlpZiAoUmVxdWVzdCA9PSAweDIpCisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiXHRSZXF1ZXN0IFZhbHVlPTB4JTA0eCFcbiIsIFZhbHVlKSk7CisKKwkJCWlmICgoVHJhbnNmZXJCdWZmZXIhPSBOVUxMKSAmJiAoVHJhbnNmZXJCdWZmZXJMZW5ndGggPiAwKSkKKwkJCQloZXhfZHVtcCgiRmFpbGVkIFRyYW5zZmVyQnVmZmVyIHZhbHVlIiwgVHJhbnNmZXJCdWZmZXIsIFRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkgIENyZWF0ZXMgYW4gSVJQIHRvIHN1Ym1pdGUgYW4gSU9DVExfSU5URVJOQUxfVVNCX1JFU0VUX1BPUlQKKwkgIHN5bmNocm9ub3VzbHkuIENhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1bm5pbmcgYXQKKwkgIFBBU1NJVkUgTEVWRUwuCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JfUmVzZXREZXZpY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJTlRTVEFUVVMJCVN0YXR1cyA9IFRSVUU7CisKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiLS0tPlVTQl9SZXNldERldmljZVxuIikpOworCS8vUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpOworCXJldHVybiBTdGF0dXM7Cit9CisKK1ZPSUQgQ01ESGFuZGxlcigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQQ21kUUVsbXQJCWNtZHFlbG10OworCVBVQ0hBUgkJCXBEYXRhOworCU5ESVNfU1RBVFVTCQlOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKy8vCVVMT05HCQkJTm93ID0gMDsKKwlOVFNUQVRVUwkJbnRTdGF0dXM7CisvLwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJd2hpbGUgKHBBZC0+Q21kUS5zaXplID4gMCkKKwl7CisJCU5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCQlSVFVTQkRlcXVldWVDbWQoJnBBZC0+Q21kUSwgJmNtZHFlbG10KTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKwkJaWYgKGNtZHFlbG10ID09IE5VTEwpCisJCQlicmVhazsKKworCQlwRGF0YSA9IGNtZHFlbG10LT5idWZmZXI7CisKKwkJaWYoIShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkKKwkJeworCQkJc3dpdGNoIChjbWRxZWxtdC0+Y29tbWFuZCkKKwkJCXsKKwkJCQljYXNlIENNRFRIUkVBRF9DSEVDS19HUElPOgorCQkJCQl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlVSU5UMzIgZGF0YTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNpZmRlZiBSQUxJTktfQVRFCisgICAgICAgCQkJCQlpZihBVEVfT04ocEFkKSkKKwkJCQkJCXsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCisKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQl7CisJCQkJCQkJLy8gUmVhZCBHUElPIHBpbjIgYXMgSGFyZHdhcmUgY29udHJvbGxlZCByYWRpbyBzdGF0ZQorCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIoIHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOworCisJCQkJCQkJaWYgKGRhdGEgJiAweDA0KQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBUUlVFOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9IEZBTFNFOworCQkJCQkJCX0KKworCQkJCQkJCWlmKHBBZC0+U3RhQ2ZnLmJSYWRpbyAhPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pKQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYlJhZGlvID0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKTsKKwkJCQkJCQkJaWYocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisJCQkJCQkJCXsKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCIhISEgUmFkaW8gT24gISEhXG4iKSk7CisKKwkJCQkJCQkJCU1sbWVSYWRpb09uKHBBZCk7CisJCQkJCQkJCQkvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24KKwkJCQkJCQkJCXBBZC0+RXh0cmFJbmZvID0gRVhUUkFfSU5GT19DTEVBUjsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCXsKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCIhISEgUmFkaW8gT2ZmICEhIVxuIikpOworCisJCQkJCQkJCQlNbG1lUmFkaW9PZmYocEFkKTsKKwkJCQkJCQkJCS8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQkJCQkJcEFkLT5FeHRyYUluZm8gPSBIV19SQURJT19PRkY7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQljYXNlIENNRFRIUkVBRF9RS0VSSU9ESUNfRVhFQ1VUOgorCQkJCQl7CisJCQkJCQlTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKE5VTEwsIHBBZCwgTlVMTCwgTlVMTCk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQljYXNlIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVDoKKwkJCQkJeworCQkJCQkJVUlOVDMyCQlNQUNWYWx1ZTsKKwkJCQkJCVVDSEFSCQlJbmRleDsKKwkJCQkJCWludAkJCXJldD0wOworCQkJCQkJUEhUX1RYX0NPTlRFWFQJcEhUVFhDb250ZXh0OworLy8JCQkJCQlSVE1QX1RYX1JJTkcgKnBUeFJpbmc7CisJCQkJCQl1bnNpZ25lZCBsb25nIElycUZsYWdzOworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCVBUWF9DT05URVhUCQlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQoUmVzZXRQaXBlaWQ9MHglMHgpPT09PlxuIiwgcEFkLT5idWxrUmVzZXRQaXBlaWQpKTsKKwkJCQkJCS8vIEFsbCB0cmFuc2ZlcnMgbXVzdCBiZSBhYm9ydGVkIG9yIGNhbmNlbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgcGlwZS4KKwkJCQkJCS8vUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJCQkJLy8gV2FpdCAxMG1zIHRvIGxldCBwcmV2aW91cyBwYWNrZXQgdGhhdCBhcmUgYWxyZWFkeSBpbiBIVyBGSUZPIHRvIGNsZWFyLiBieSBNQVhMRUUgMTItMjUtMjAwNworCQkJCQkJSW5kZXggPSAwOworCQkJCQkJZG8KKwkJCQkJCXsKKwkJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7CisJCQkJCQkJaWYgKChNQUNWYWx1ZSAmIDB4ZjAwMDAwLyoweDgwMDAwMCovKSA9PSAwKQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQlJbmRleCsrOworCQkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCQkJCQkJfXdoaWxlKEluZGV4IDwgMTAwKTsKKwkJCQkJCU1BQ1ZhbHVlID0gMDsKKwkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsICZNQUNWYWx1ZSk7CisJCQkJCQkvLyBUbyBwcmV2ZW50IFJlYWQgUmVnaXN0ZXIgZXJyb3IsIHdlIDJuZCBjaGVjayB0aGUgdmFsaWRpdHkuCisJCQkJCQlpZiAoKE1BQ1ZhbHVlICYgMHhjMDAwMDApID09IDApCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBVU0JfRE1BX0NGRywgJk1BQ1ZhbHVlKTsKKwkJCQkJCS8vIFRvIHByZXZlbnQgUmVhZCBSZWdpc3RlciBlcnJvciwgd2UgM3JkIGNoZWNrIHRoZSB2YWxpZGl0eS4KKwkJCQkJCWlmICgoTUFDVmFsdWUgJiAweGMwMDAwMCkgPT0gMCkKKwkJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCAmTUFDVmFsdWUpOworCQkJCQkJTUFDVmFsdWUgfD0gMHg4MDAwMDsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCBNQUNWYWx1ZSk7CisKKwkJCQkJCS8vIFdhaXQgMW1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBiZWZvcmUgSFcgcmVzZXQuIGJ5IE1BWExFRSAxMi0yNS0yMDA3CisJCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCisJCQkJCQlNQUNWYWx1ZSAmPSAofjB4ODAwMDApOworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsIE1BQ1ZhbHVlKTsKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJcdFNldCAweDJhMCBiaXQxOS4gQ2xlYXIgVVNCIERNQSBUWCBwYXRoXG4iKSk7CisKKwkJCQkJCS8vIFdhaXQgNW1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBiZWZvcmUgSFcgcmVzZXQuIGJ5IE1BWExFRSAxMi0yNS0yMDA3CisJCQkJCQkvL1JUTVB1c2VjRGVsYXkoNTAwMCk7CisKKwkJCQkJCWlmICgocEFkLT5idWxrUmVzZXRQaXBlaWQgJiBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykgPT0gQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpCisJCQkJCQl7CisJCQkJCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCQkJCQlpZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA8IE1HTVRfUklOR19TSVpFIC8qIHBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID09IFRSVUUgKi8pCisJCQkJCQkJeworCQkJCQkJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOworCQkJCQkJCX0KKwkJCQkJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisKKwkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiXHRUWCBNR01UIFJFQ09WRVIgRG9uZSFcbiIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJLy9OZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJUlRNUF9JTlRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKwkJCQkJCQlpZiAoIHBBZC0+QnVsa091dFBlbmRpbmdbcEFkLT5idWxrUmVzZXRQaXBlaWRdID09IEZBTFNFKQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1twQWQtPmJ1bGtSZXNldFBpcGVpZF0gPSBUUlVFOworCQkJCQkJCQlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCQkJCQkJCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSA9IDE7CisKKwkJCQkJCQkJLy8gbm8gbWF0dGVyIHdoYXQsIGNsZWFuIHRoZSBmbGFnCisJCQkJCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisKKwkJCQkJCQkJLy9OZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCQkJaWYoQVRFX09OKHBBZCkpCisJCQkJCQkJICAgIHsKKwkJCQkJCQkJCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJCQkJCQkJCQkvLworCQkJCQkJCQkJLy8gSWYgZHJpdmVyIGlzIHN0aWxsIGluIEFURSBUWEZSQU1FIG1vZGUsCisJCQkJCQkJCQkvLyBrZWVwIG9uIHRyYW5zbWl0dGluZyBBVEUgZnJhbWVzLgorCQkJCQkJCQkJLy8KKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJwQWQtPmF0ZS5Nb2RlID09ICVkXG5wQWQtPkNvbnRpbkJ1bGtPdXQgPT0gJWRcbnBBZC0+QnVsa091dFJlbWFpbmVkID09ICVkXG4iLCBwQWQtPmF0ZS5Nb2RlLCBwQWQtPkNvbnRpbkJ1bGtPdXQsIGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkpKTsKKwkJCQkJCQkJCWlmKChwQWQtPmF0ZS5Nb2RlID09IEFURV9UWEZSQU1FKSAmJiAoKHBBZC0+Q29udGluQnVsa091dCA9PSBUUlVFKSB8fCAoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+IDApKSkKKwkJCQkJCQkJICAgIHsKKwkJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQWZ0ZXIgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBjb250aW51ZSB0byBidWxrIG91dCBmcmFtZXMgIVxuIikpOworCisJCQkJCQkJCQkJLy8gSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IKKwkJCQkJCQkJCQlSVFVTQkluaXRUeERlc2MocEFkLCBwTnVsbENvbnRleHQsIDAvKiBwQWQtPmJ1bGtSZXNldFBpcGVpZCAqLywgKHVzYl9jb21wbGV0ZV90KUFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUpOworCisJCQkJCQkJCQkJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocE51bGxDb250ZXh0LT5wVXJiKSkhPTApCisJCQkJCQkJCQkJeworCQkJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXBBZC0+QnVsa091dFJlcSsrOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCQkJCQkJeworCQkJCQkJCQlSVFVTQkluaXRIVFR4RGVzYyhwQWQsIHBIVFRYQ29udGV4dCwgcEFkLT5idWxrUmVzZXRQaXBlaWQsIHBIVFRYQ29udGV4dC0+QnVsa091dFNpemUsICh1c2JfY29tcGxldGVfdClSVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUpOworCisJCQkJCQkJCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBIVFRYQ29udGV4dC0+cFVyYikpIT0wKQorCQkJCQkJCQl7CisJCQkJCQkJCQkJUlRNUF9JTlRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKwkJCQkJCQkJCXBBZC0+QnVsa091dFBlbmRpbmdbcEFkLT5idWxrUmVzZXRQaXBlaWRdID0gRkFMU0U7CisJCQkJCQkJCQlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJCQkJCQkJCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSA9IDA7CisJCQkJCQkJCQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCisJCQkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCQkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIlx0Q01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBUeENvbnRleHRbJWRdOkNXUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCwgcGVuZGluZz0lZCFcbiIsCisJCQkJCQkJCQkJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sCisJCQkJCQkJCQkJCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCwgcEFkLT5CdWxrT3V0UGVuZGluZ1twQWQtPmJ1bGtSZXNldFBpcGVpZF0pKTsKKwkJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJcdFx0QnVsa091dCBSZXE9MHglbHgsIENvbXBsZXRlPTB4JWx4LCBPdGhlcj0weCVseFxuIiwKKwkJCQkJCQkJCQkJCQkJCXBBZC0+QnVsa091dFJlcSwgcEFkLT5CdWxrT3V0Q29tcGxldGUsIHBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIpKTsKKwkJCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisJCQkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIlx0Q01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBTdWJtaXQgVHggREFUQSBVUkIgZm9yIGZhaWxlZCBCdWxrUmVxKDB4JWx4KSBEb25lLCBzdGF0dXM9JWQhXG4iLCBwQWQtPmJ1bGtSZXNldFJlcVtwQWQtPmJ1bGtSZXNldFBpcGVpZF0sIHBIVFRYQ29udGV4dC0+cFVyYi0+c3RhdHVzKSk7CisKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQkvL05kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdKTsKKwkJCQkJCQkJLy9SVE1QX0lOVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisKKwkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkNtZFRocmVhZCA6IFRYIERBVEEgUkVDT1ZFUiBGQUlMIGZvciBCdWxrUmVxKDB4JWx4KSBiZWNhdXNlIEJ1bGtPdXRQZW5kaW5nWyVkXSBpcyBUUlVFIVxuIiwgcEFkLT5idWxrUmVzZXRSZXFbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBwQWQtPmJ1bGtSZXNldFBpcGVpZCkpOworCQkJCQkJCQlpZiAocEFkLT5idWxrUmVzZXRQaXBlaWQgPT0gMCkKKwkJCQkJCQkJeworCQkJCQkJCQkJVUNIQVIJcGVuZGluZ0NvbnRleHQgPSAwOworCQkJCQkJCQkJUEhUX1RYX0NPTlRFWFQgcEhUVFhDb250ZXh0ID0gKFBIVF9UWF9DT05URVhUKSgmcEFkLT5UeENvbnRleHRbcEFkLT5idWxrUmVzZXRQaXBlaWQgXSk7CisJCQkJCQkJCQlQVFhfQ09OVEVYVCBwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpKHBBZC0+TWdtdFJpbmcuQ2VsbFtwQWQtPk1nbXRSaW5nLlR4RG1hSWR4XS5BbGxvY1ZhKTsKKwkJCQkJCQkJCVBUWF9DT05URVhUIHBOVUxMQ29udGV4dCA9IChQVFhfQ09OVEVYVCkoJnBBZC0+UHNQb2xsQ29udGV4dCk7CisJCQkJCQkJCQlQVFhfQ09OVEVYVCBwUHNQb2xsQ29udGV4dCA9IChQVFhfQ09OVEVYVCkoJnBBZC0+TnVsbENvbnRleHQpOworCisJCQkJCQkJCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCQkJCQkJCXBlbmRpbmdDb250ZXh0IHw9IDE7CisJCQkJCQkJCQllbHNlIGlmIChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQgfD0gMjsKKwkJCQkJCQkJCWVsc2UgaWYgKHBOVUxMQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJCQkJCQlwZW5kaW5nQ29udGV4dCB8PSA0OworCQkJCQkJCQkJZWxzZSBpZiAocFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQgfD0gODsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCQlwZW5kaW5nQ29udGV4dCA9IDA7CisKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJcdFRYIE9jY3VwaWVkIGJ5ICVkIVxuIiwgcGVuZGluZ0NvbnRleHQpKTsKKwkJCQkJCQkJfQorCisJCQkJCQkJLy8gbm8gbWF0dGVyIHdoYXQsIGNsZWFuIHRoZSBmbGFnCisJCQkJCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKworCQkJCQkJCQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisKKwkJCQkJCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgcEFkLT5idWxrUmVzZXRQaXBlaWQpKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCQkJCQkJCS8vUlRVU0JLaWNrQnVsa091dChwQWQpOworCQkJCQkJfQorCisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJCS8vIERvbid0IGNhbmNlbCBCVUxLSU4uCisJCQkJCQl3aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSAmJgorCQkJCQkJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQl7CisJCQkJCQkJaWYgKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKQorCQkJCQkJCXsKKwkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtJbiBJUlAgUGVuZGluZyEhY2FuY2VsIGl0IVxuIikpOworCQkJCQkJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKwkJCQkJCQl9CisJCQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwMDApOworCQkJCQkJfQorCisJCQkJCQlpZiAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPT0gMCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpKQorCQkJCQkJeworCQkJCQkJCVVDSEFSCWk7CisJCQkJCQkJUlRVU0JSeFBhY2tldChwQWQpOworCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4ID0gMDsJLy8gTmV4dCBSeCBSZWFkIGluZGV4CisJCQkJCQkJcEFkLT5OZXh0UnhCdWxrSW5JbmRleAkJPSAwOwkvLyBSeCBCdWxrIHBvaW50ZXIKKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykKKwkJCQkJCQl7CisJCQkJCQkJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisKKwkJCQkJCQkJcFJ4Q29udGV4dC0+cEFkCT0gcEFkOworCQkJCQkJCQlwUnhDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZwk9IEZBTFNFOworCQkJCQkJCQlwUnhDb250ZXh0LT5SZWFkYWJsZQk9IEZBTFNFOworCQkJCQkJCQlwUnhDb250ZXh0LT5SZW9yZGVySW5Vc2UgPSBGQUxTRTsKKworCQkJCQkJCX0KKwkJCQkJCQlSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCQnVsa1JlY2VpdmVcbiIpKTsKKwkJCQkJCX0qLworCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUPD09PVxuIikpOworICAgIAkgICAJCQlicmVhazsKKworCQkJCWNhc2UgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfUkVTRVRfQlVMS19JTiA9PT0gPlxuIikpOworCisJCQkJCS8vIEFsbCB0cmFuc2ZlcnMgbXVzdCBiZSBhYm9ydGVkIG9yIGNhbmNlbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgcGlwZS4KKwkJCQkJeworCQkJCQkJVUlOVDMyCQlNQUNWYWx1ZTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCWlmIChBVEVfT04ocEFkKSkKKwkJCQkJCXsKKwkJCQkJCQlpZigocEFkLT5QZW5kaW5nUnggPiAwKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQkJeworCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQVRFIDogQnVsa0luIElSUCBQZW5kaW5nISEhXG4iKSk7CisJCQkJCQkJCUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKwkJCQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwMDApOworCQkJCQkJCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJCQkJeworCQkJCQkJLy93aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQlpZigocEFkLT5QZW5kaW5nUnggPiAwKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQl7CisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtJbiBJUlAgUGVuZGluZyEhIVxuIikpOworCQkJCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworCQkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDAwKTsKKwkJCQkJCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFdhaXQgMTBtcyBiZWZvcmUgcmVhZGluZyByZWdpc3Rlci4KKwkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCQkJCQkJbnRTdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IwLCAmTUFDVmFsdWUpOworCisJCQkJCQlpZiAoKE5UX1NVQ0NFU1MobnRTdGF0dXMpID09IFRSVUUpICYmCisJCQkJCQkJKCEoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKKwkJCQkJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpKQorCQkJCQkJeworCQkJCQkJCVVDSEFSCWk7CisKKwkJCQkJCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKKwkJCQkJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb24gPSBwQWQtPlJ4Q29udGV4dFtwQWQtPk5leHRSeEJ1bGtJbkluZGV4XS5CdWxrSW5PZmZzZXQ7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQlVMS19JTl9SRVNFVDogTkJJSWR4PTB4JXgsTkJJUklkeD0weCV4LCBCSVJQb3M9MHglbHguIEJJUmVxPXglbHgsIEJJQ29tcGxldGU9MHglbHgsIEJJQ0ZhaWwweCVseFxuIiwKKwkJCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsICBwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiwgcEFkLT5CdWxrSW5SZXEsIHBBZC0+QnVsa0luQ29tcGxldGUsIHBBZC0+QnVsa0luQ29tcGxldGVGYWlsKSk7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKQorCQkJCQkJCXsKKyAJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlx0UnhDb250ZXh0WyVkXTogSVJQUGVuZGluZz0lZCwgSW5Vc2U9JWQsIFJlYWRhYmxlPSVkIVxuIgorCQkJCQkJCQkJLCBpLCBwQWQtPlJ4Q29udGV4dFtpXS5JUlBQZW5kaW5nLCBwQWQtPlJ4Q29udGV4dFtpXS5JblVzZSwgcEFkLT5SeENvbnRleHRbaV0uUmVhZGFibGUpKTsKKwkJCQkJCQl9CisgCQkJCQkJCS8qCisKKwkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKSk7CisKKwkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCA9IDA7CS8vIE5leHQgUnggUmVhZCBpbmRleAorCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgJCT0gMDsJLy8gUnggQnVsayBwb2ludGVyCisJCQkJCQkJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCQkJCQkJCXBSeENvbnRleHQtPnBBZAk9IHBBZDsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisJCQkJCQkJCXBSeENvbnRleHQtPklSUFBlbmRpbmcJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7CisKKwkJCQkJCQl9Ki8KKwkJCQkJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCk7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IHBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQkvL1JUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJCQkJCQkJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJCQkJCQkJCVBVUkIJCQlwVXJiOworCQkJCQkJCQlpbnQJCQkJcmV0ID0gMDsKKwkJCQkJCQkJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCisJCQkJCQkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJCQkJCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtwQWQtPk5leHRSeEJ1bGtJbkluZGV4XSk7CisJCQkJCQkJCWlmICgocEFkLT5QZW5kaW5nUnggPiAwKSB8fCAocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gVFJVRSkgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKQorCQkJCQkJCQl7CisJCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBUUlVFOworCQkJCQkJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwkJCQkJCQkJcEFkLT5QZW5kaW5nUngrKzsKKwkJCQkJCQkJcEFkLT5CdWxrSW5SZXErKzsKKwkJCQkJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKworCQkJCQkJCQkvLyBJbml0IFJ4IGNvbnRleHQgZGVzY3JpcHRvcgorCQkJCQkJCQlSVFVTQkluaXRSeERlc2MocEFkLCBwUnhDb250ZXh0KTsKKwkJCQkJCQkJcFVyYiA9IHBSeENvbnRleHQtPnBVcmI7CisJCQkJCQkJCWlmICgocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKSkhPTApCisJCQkJCQkJCXsJLy8gZmFpbAorCisJCQkJCQkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJCQkJCQkJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQkJCQkJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQkJCQkJCQlwQWQtPlBlbmRpbmdSeC0tOworCQkJCQkJCQkJcEFkLT5CdWxrSW5SZXEtLTsKKwkJCQkJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogU3VibWl0IFJ4IFVSQiBmYWlsZWQoJWQpLCBzdGF0dXM9JWRcbiIsIHJldCwgcFVyYi0+c3RhdHVzKSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7CS8vIHN1Y2Nlc3MKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogU3VibWl0IFJ4IFVSQiBEb25lLCBzdGF0dXM9JWQhXG4iLCBwVXJiLT5zdGF0dXMpKTsKKwkJCQkJCQkJCUFTU0VSVCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gcFJ4Q29udGV4dC0+SVJQUGVuZGluZykpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLy8gQ2FyZCBtdXN0IGJlIHJlbW92ZWQKKwkJCQkJCQlpZiAoTlRfU1VDQ0VTUyhudFN0YXR1cykgIT0gVFJVRSkKKwkJCQkJCQl7CisJCQkJCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCk7CisJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogUmVhZCBSZWdpc3RlciBGYWlsZWQhQ2FyZCBtdXN0IGJlIHJlbW92ZWQhIVxuXG4iKSk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogQ2Fubm90IGRvIGJ1bGsgaW4gYmVjYXVzZSBmbGFncygweCVseCkgb24gIVxuIiwgcEFkLT5GbGFncykpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCX0KKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkNtZFRocmVhZCA6IENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOIDw9PT1cbiIpKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEOgorCQkJCQl7CisJCQkJCQlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOworCQkJCQkJVVNIT1JUCQlvZmZzZXQ7CisJCQkJCQlVSU5UMzIJCU1BQ1ZhbHVlLCBNQUNSVmFsdWUgPSAwOworCQkJCQkJU2V0QXNpY1djaWQgPSAqKChQUlRfU0VUX0FTSUNfV0NJRCkocERhdGEpKTsKKworCQkJCQkJaWYgKFNldEFzaWNXY2lkLldDSUQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCQkJCQkJcmV0dXJuOworCisJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgKChVQ0hBUilTZXRBc2ljV2NpZC5XQ0lEKSpIV19XQ0lEX0VOVFJZX1NJWkU7CisKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfU0VUX0FTSUNfV0NJRCA6IFdDSUQgPSAlbGQsIFNldFRpZCAgPSAlbHgsIERlbGV0ZVRpZCA9ICVseC5cbiIsIFNldEFzaWNXY2lkLldDSUQsIFNldEFzaWNXY2lkLlNldFRpZCwgU2V0QXNpY1djaWQuRGVsZXRlVGlkKSk7CisJCQkJCQlNQUNWYWx1ZSA9IChwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbM108PDI0KSsocEFkLT5NYWNUYWIuQ29udGVudFtTZXRBc2ljV2NpZC5XQ0lEXS5BZGRyWzJdPDwxNikrKHBBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkclsxXTw8OCkrKHBBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkclswXSk7CisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiMS1NQUNWYWx1ZT0gJXgsXG4iLCBNQUNWYWx1ZSkpOworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNWYWx1ZSk7CisJCQkJCQkvLyBSZWFkIGJpdG1hc2sKKwkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0KzQsICZNQUNSVmFsdWUpOworCQkJCQkJaWYgKCBTZXRBc2ljV2NpZC5EZWxldGVUaWQgIT0gMHhmZmZmZmZmZikKKwkJCQkJCQlNQUNSVmFsdWUgJj0gKH5TZXRBc2ljV2NpZC5EZWxldGVUaWQpOworCQkJCQkJaWYgKFNldEFzaWNXY2lkLlNldFRpZCAhPSAweGZmZmZmZmZmKQorCQkJCQkJCU1BQ1JWYWx1ZSB8PSAoU2V0QXNpY1djaWQuU2V0VGlkKTsKKwkJCQkJCU1BQ1JWYWx1ZSAmPSAweGZmZmYwMDAwOworCisJCQkJCQlNQUNWYWx1ZSA9IChwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbNV08PDgpK3BBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkcls0XTsKKwkJCQkJCU1BQ1ZhbHVlIHw9IE1BQ1JWYWx1ZTsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCs0LCBNQUNWYWx1ZSk7CisKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIyLU1BQ1ZhbHVlPSAleCxcbiIsIE1BQ1ZhbHVlKSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEX0NJUEhFUjoKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJUlRfU0VUX0FTSUNfV0NJRF9BVFRSSQlTZXRBc2ljV2NpZEF0dHJpOworCQkJCQkJVVNIT1JUCQlvZmZzZXQ7CisJCQkJCQlVSU5UMzIJCU1BQ1JWYWx1ZSA9IDA7CisJCQkJCQlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOworCQkJCQkJU2V0QXNpY1djaWRBdHRyaSA9ICooKFBSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJKShwRGF0YSkpOworCisJCQkJCQlpZiAoU2V0QXNpY1djaWRBdHRyaS5XQ0lEID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQkJCQkJCXJldHVybjsKKworCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoKFVDSEFSKVNldEFzaWNXY2lkQXR0cmkuV0NJRCkqSFdfV0NJRF9BVFRSSV9TSVpFOworCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kIDogQ01EVEhSRUFEX1NFVF9BU0lDX1dDSURfQ0lQSEVSIDogV0NJRCA9ICVsZCwgQ2lwaGVyID0gJWx4LlxuIiwgU2V0QXNpY1djaWRBdHRyaS5XQ0lELCBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikpOworCQkJCQkJLy8gUmVhZCBiaXRtYXNrCisJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgJk1BQ1JWYWx1ZSk7CisJCQkJCQlNQUNSVmFsdWUgPSAwOworCQkJCQkJTUFDUlZhbHVlIHw9ICgoKFVDSEFSKVNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyKSA8PCAxKTsKKworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNSVmFsdWUpOworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjItb2Zmc2V0ID0gJXggLCBNQUNWYWx1ZT0gJXgsXG4iLCBvZmZzZXQsIE1BQ1JWYWx1ZSkpOworCisJCQkJCQlvZmZzZXQgPSBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsgKChVQ0hBUilTZXRBc2ljV2NpZEF0dHJpLldDSUQpKkhXX0lWRUlWX0VOVFJZX1NJWkU7CisJCQkJCQlNQUNSVmFsdWUgPSAwOworCQkJCQkJaWYgKCAoU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIgPD0gQ0lQSEVSX1dFUDEyOCkpCisJCQkJCQkJTUFDUlZhbHVlIHw9ICggcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDMwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlNQUNSVmFsdWUgfD0gKDB4MjAwMDAwMDApOworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNSVmFsdWUpOworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjItb2Zmc2V0ID0gJXggLCBNQUNWYWx1ZT0gJXgsXG4iLCBvZmZzZXQsIE1BQ1JWYWx1ZSkpOworCisJCQkJCQkvLworCQkJCQkJLy8gVXBkYXRlIGNpcGhlciBhbGdvcml0aG0uIFdTVEEgYWx3YXlzIHVzZSBCU1MwCisJCQkJCQkvLworCQkJCQkJLy8gZm9yIGFkaG9jIG1vZGUgb25seSAsYmVjYXVzZSB3ZXAgc3RhdHVzIHNsb3cgdGhhbiBhZGQga2V5LCB3aGVuIHVzZSB6ZXJvIGNvbmZpZworCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DICkKKwkJCQkJCXsKKwkJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRTsKKworCQkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCAmTUFDUlZhbHVlKTsKKwkJCQkJCQlNQUNSVmFsdWUgJj0gKH4weGUpOworCQkJCQkJCU1BQ1JWYWx1ZSB8PSAoKChVQ0hBUilTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikgPDwgMSk7CisKKwkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsIE1BQ1JWYWx1ZSk7CisKKwkJCQkJCQkvL1VwZGF0ZSBncm91cCBrZXkgY2lwaGVyLCxiZWNhdXNlIHdlcCBzdGF0dXMgc2xvdyB0aGFuIGFkZCBrZXksIHdoZW4gdXNlIHplcm8gY29uZmlnCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSs0KigwLzIpLCAmY3NyMS53b3JkKTsKKworCQkJCQkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcjsKKwkJCQkJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gU2V0QXNpY1djaWRBdHRyaS5DaXBoZXI7CisKKwkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSs0KigwLzIpLCBjc3IxLndvcmQpOworCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQl9CisJCQkJCWJyZWFrOworCisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCAtLT4KKwkJCQljYXNlIFJUX0NNRF9TRVRfS0VZX1RBQkxFOiAvL0dlbmVyYWwgY2FsbCBmb3IgQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkoKQorCQkJCXsKKwkJCQkJUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSBLZXlJbmZvOworCQkJCQlLZXlJbmZvID0gKigoUFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkpKHBEYXRhKSk7CisJCQkJCUFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KHBBZCwKKwkJCQkJCQkJCQkJS2V5SW5mby5NYWNBZGRyLAorCQkJCQkJCQkJCQkoVUNIQVIpS2V5SW5mby5NYWNUYWJNYXRjaFdDSUQsCisJCQkJCQkJCQkJCSZLZXlJbmZvLkNpcGhlcktleSk7CisJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIFJUX0NNRF9TRVRfUlhfV0NJRF9UQUJMRTogLy9HZW5lcmFsIGNhbGwgZm9yIFJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkoKQorCQkJCXsKKwkJCQkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnk7CisJCQkJCVVDSEFSIEtleUlkeDsKKwkJCQkJVUNIQVIgQ2lwaGVyQWxnOworCQkJCQlVQ0hBUiBBcElkeDsKKworCQkJCQlwRW50cnkgPSAoUE1BQ19UQUJMRV9FTlRSWSkocERhdGEpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQkJCUtleUlkeCA9IDA7CisJCQkJCUNpcGhlckFsZyA9IHBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnOworCQkJCQlBcElkeCA9IEJTUzA7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeSgKKwkJCQkJCQkJCQkgIHBBZCwKKwkJCQkJCQkJCQkgIEFwSWR4LAorCQkJCQkJCQkJCSAgS2V5SWR4LAorCQkJCQkJCQkJCSAgQ2lwaGVyQWxnLAorCQkJCQkJCQkJCSAgcEVudHJ5KTsKKwkJCQkJfQorCQkJCQkJYnJlYWs7CisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCA8LS0KKworCQkJCWNhc2UgQ01EVEhSRUFEX1NFVF9DTElFTlRfTUFDX0VOVFJZOgorCQkJCQl7CisJCQkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQkJCXBFbnRyeSA9IChNQUNfVEFCTEVfRU5UUlkgKilwRGF0YTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJeworCQkJCQkJCUFzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KHBBZCwgcEVudHJ5LT5hcGlkeCwgKFVDSEFSKXBFbnRyeS0+QWlkKTsKKwkJCQkJCQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPD0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCkgJiYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpKQorCQkJCQkJCXsKKwkJCQkJCQkJVUlOVDMyIHVJViA9IDA7CisJCQkJCQkJCVBVQ0hBUiAgcHRyOworCisJCQkJCQkJCXB0ciA9IChQVUNIQVIpICZ1SVY7CisJCQkJCQkJCSoocHRyICsgMykgPSAocEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDYpOworCQkJCQkJCQlBc2ljVXBkYXRlV0NJRElWRUlWKHBBZCwgcEVudHJ5LT5BaWQsIHVJViwgMCk7CisJCQkJCQkJCUFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKHBBZCwgcEVudHJ5LT5BaWQsIEJTUzAsIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLCBGQUxTRSk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgaWYgKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJCQkJCQl7CisJCQkJCQkJCVVJTlQzMiB1SVYgPSAwOworCQkJCQkJCQlQVUNIQVIgIHB0cjsKKworCQkJCQkJCQlwdHIgPSAoUFVDSEFSKSAmdUlWOworCQkJCQkJCQkqKHB0ciArIDMpID0gKHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA8PCA2KTsKKwkJCQkJCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIHBFbnRyeS0+QWlkLCB1SVYsIDApOworCQkJCQkJCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZShwQWQsIHBFbnRyeS0+QWlkLCBCU1MwLCBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywgRkFMU0UpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQkvLworCQkJCQkJCQkvLyBPdGhlciBjYXNlLCBkaXNhYmxlIGVuZ2luZS4KKwkJCQkJCQkJLy8gRG9uJ3Qgd29ycnkgV1BBIGtleSwgd2Ugd2lsbCBhZGQgV1BBIEtleSBhZnRlciA0LVdheSBoYW5kc2hha2luZy4KKwkJCQkJCQkJLy8KKwkJCQkJCQkJVVNIT1JUICAgb2Zmc2V0OworCQkJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChwRW50cnktPkFpZCAqIEhXX1dDSURfQVRUUklfU0laRSk7CisJCQkJCQkJCS8vIFJYX1BLRVlfTU9ERTowIGZvciBubyBzZWN1cml0eTsgUlhfS0VZX1RBQjowIGZvciBzaGFyZWQga2V5IHRhYmxlOyBCU1NfSURYOjAKKwkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCAwKTsKKwkJCQkJCQl9CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQkJCUFzaWNVcGRhdGVSeFdDSURUYWJsZShwQWQsIHBFbnRyeS0+QWlkLCBwRW50cnktPkFkZHIpOworCQkJCQkJcHJpbnRrKCJVcGRhdGVSeFdDSURUYWJsZSgpOiBBaWQ9JWQsIEFkZHI9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnghXG4iLCBwRW50cnktPkFpZCwKKwkJCQkJCQkJcEVudHJ5LT5BZGRyWzBdLCBwRW50cnktPkFkZHJbMV0sIHBFbnRyeS0+QWRkclsyXSwgcEVudHJ5LT5BZGRyWzNdLCBwRW50cnktPkFkZHJbNF0sIHBFbnRyeS0+QWRkcls1XSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKy8vIGFkZCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKwkJCQljYXNlIENNRFRIUkVBRF9VUERBVEVfUFJPVEVDVDoKKwkJCQkJeworCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwLCAoQUxMTl9TRVRQUk9URUNUKSwgVFJVRSwgMCk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisvLyBlbmQgam9obmxpCisKKwkJCQljYXNlIE9JRF84MDJfMTFfQUREX1dFUDoKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJVUlOVAlpOworCQkJCQkJVUlOVDMyCUtleUlkeDsKKwkJCQkJCVBORElTXzgwMl8xMV9XRVAJcFdlcEtleTsKKworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkOjpPSURfODAyXzExX0FERF9XRVAgIFxuIikpOworCisJCQkJCQlwV2VwS2V5ID0gKFBORElTXzgwMl8xMV9XRVApcERhdGE7CisJCQkJCQlLZXlJZHggPSBwV2VwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7CisKKwkJCQkJCS8vIGl0IGlzIGEgc2hhcmVkIGtleQorCQkJCQkJaWYgKChLZXlJZHggPj0gNCkgfHwgKChwV2VwS2V5LT5LZXlMZW5ndGggIT0gNSkgJiYgKHBXZXBLZXktPktleUxlbmd0aCAhPSAxMykpKQorCQkJCQkJeworCQkJCQkJCU5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19JTlZBTElEX0RBVEE7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ21kVGhyZWFkOjpPSURfODAyXzExX0FERF9XRVAsIElOVkFMSURfREFUQSEhXG4iKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJVUNIQVIgQ2lwaGVyQWxnOworCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gKFVDSEFSKSBwV2VwS2V5LT5LZXlMZW5ndGg7CisJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXksICZwV2VwS2V5LT5LZXlNYXRlcmlhbCwgcFdlcEtleS0+S2V5TGVuZ3RoKTsKKwkJCQkJCQlDaXBoZXJBbGcgPSAocEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPT0gNSk/IENJUEhFUl9XRVA2NCA6IENJUEhFUl9XRVAxMjg7CisKKwkJCQkJCQkvLworCQkJCQkJCS8vIENoYW5nZSB0aGUgV0VQIGNpcGhlciB0byBDS0lQIGNpcGhlciBpZiBDS0lQIEtQIG9uLgorCQkJCQkJCS8vIEZ1bmsgVUkgb3IgTWVldGluZ2hvdXNlIFVJIHdpbGwgYWRkIGNraXAga2V5IGZyb20gdGhpcyBwYXRoLgorCQkJCQkJCS8vCisKKwkJCQkJCQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwkJCQkJCSAJeworCQkJCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworCQkJCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LktleUxlbiA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuOworCQkJCQkJIAl9CisJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQkJCQkJaWYgKHBXZXBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKKwkJCQkJCQl7CisJCQkJCQkJCS8vIERlZmF1bHQga2V5IGZvciB0eCAoc2hhcmVkIGtleSkKKwkJCQkJCQkJVUNIQVIJSVZFSVZbOF07CisJCQkJCQkJCVVJTlQzMglXQ0lEQXR0cmksIFZhbHVlOworCQkJCQkJCQlVU0hPUlQJb2Zmc2V0LCBvZmZzZXQyOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShJVkVJViwgOCk7CisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworCQkJCQkJCQkvLyBBZGQgQlNTSUQgdG8gV0NUYWJsZS4gYmVjYXVzZSB0aGlzIGlzIFR4IHdlcCBrZXkuCisJCQkJCQkJCS8vIFdDSUQgQXR0cmlidXRlIFVERjozLCBCU1NJZHg6MywgQWxnOjMsIEtleXRhYmxlOjE9UEFJUldJU0UgS0VZLCBCU1NJZHggaXMgMAorCQkJCQkJCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKworCQkJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChCU1NJRF9XQ0lEKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCQkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7CisJCQkJCQkJCS8vIDEuIElWL0VJVgorCQkJCQkJCQkvLyBTcGVjaWZ5IGtleSBpbmRleCB0byBmaW5kIHNoYXJlZCBrZXkuCisJCQkJCQkJCUlWRUlWWzNdID0gKFVDSEFSKShLZXlJZHg8PCA2KTsJLy9XRVAgRWl2IGJpdCBvZmYuIGdyb3Vwa2V5IGluZGV4IGlzIG5vdCAwCisJCQkJCQkJCW9mZnNldCA9IFBBSVJXSVNFX0lWRUlWX1RBQkxFX0JBU0UgKyAoQlNTME1jYXN0X1dDSUQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKwkJCQkJCQkJb2Zmc2V0MiA9IFBBSVJXSVNFX0lWRUlWX1RBQkxFX0JBU0UgKyAoQlNTSURfV0NJRCogSFdfSVZFSVZfRU5UUllfU0laRSk7CisJCQkJCQkJCWZvciAoaT0wOyBpPDg7KQorCQkJCQkJCQl7CisJCQkJCQkJCQlWYWx1ZSA9IElWRUlWW2ldOworCQkJCQkJCQkJVmFsdWUgKz0gKElWRUlWW2krMV08PDgpOworCQkJCQkJCQkJVmFsdWUgKz0gKElWRUlWW2krMl08PDE2KTsKKwkJCQkJCQkJCVZhbHVlICs9IChJVkVJVltpKzNdPDwyNCk7CisJCQkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQraSwgVmFsdWUpOworCQkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0MitpLCBWYWx1ZSk7CisJCQkJCQkJCQlpKz00OworCQkJCQkJCQl9CisKKwkJCQkJCQkJLy8gMi4gV0NJRCBBdHRyaWJ1dGUgVURGOjMsIEJTU0lkeDozLCBBbGc6MywgS2V5dGFibGU6dXNlIHNoYXJlIGtleSwgQlNTSWR4IGlzIDAKKwkJCQkJCQkJV0NJREF0dHJpID0gKHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKwkJCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoQlNTME1jYXN0X1dDSUQqIEhXX1dDSURfQVRUUklfU0laRSk7CisJCQkJCQkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCU1MwTWNhc3RfV0NJRCA6IG9mZnNldCA9ICV4LCBXQ0lEQXR0cmkgPSAleFxuIiwgb2Zmc2V0LCBXQ0lEQXR0cmkpKTsKKwkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBXQ0lEQXR0cmkpOworCisJCQkJCQkJfQorCQkJCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsIChVQ0hBUilLZXlJZHgsIENpcGhlckFsZywgcFdlcEtleS0+S2V5TWF0ZXJpYWwsIE5VTEwsIE5VTEwpOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNtZFRocmVhZDo6T0lEXzgwMl8xMV9BRERfV0VQIChLZXlJZHg9JWQsIExlbj0lZC1ieXRlKVxuIiwgS2V5SWR4LCBwV2VwS2V5LT5LZXlMZW5ndGgpKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgQ01EVEhSRUFEXzgwMl8xMV9DT1VOVEVSX01FQVNVUkU6CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IENvbnRyb2wgVGhyZWFkICEhIEVSUk9SICEhIFVua25vd24oY21kcWVsbXQtPmNvbW1hbmQ9MHgleCkgISEgXG4iLCBjbWRxZWxtdC0+Y29tbWFuZCkpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjbWRxZWxtdC0+Q21kRnJvbU5kaXMgPT0gVFJVRSkKKwkJeworCQkJCWlmIChjbWRxZWxtdC0+YnVmZmVyICE9IE5VTEwpCisJCQkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIGNtZHFlbG10LT5idWZmZXJsZW5ndGgsIDApOworCisJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoKGNtZHFlbG10LT5idWZmZXIgIT0gTlVMTCkgJiYgKGNtZHFlbG10LT5idWZmZXJsZW5ndGggIT0gMCkpCisJCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQtPmJ1ZmZlciwgY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisgICAgICAgICAgICB7CisJCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCksIDApOworCQkJfQorCQl9CisJfQkvKiBlbmQgb2Ygd2hpbGUgKi8KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vc3BlY3RydW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3NwZWN0cnVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1N2IxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3NwZWN0cnVtLmMKQEAgLTAsMCArMSwxODc2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorCWFjdGlvbi5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBIYW5kbGUgYXNzb2NpYXRpb24gcmVsYXRlZCByZXF1ZXN0cyBlaXRoZXIgZnJvbSBXU1RBIG9yIGZyb20gbG9jYWwgTUxNRQorCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUZvbmNoaSBXdSAgICAyMDA4CSAgCSAgIGNyZWF0ZWQgZm9yIDgwMi4xMWgKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vYWN0aW9uLmgiCisKK1ZPSUQgTWVhc3VyZVJlcVRhYkluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKworCXBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SRVFfVEFCKSwgR0ZQX0FUT01JQyk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiKQorCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYiwgc2l6ZW9mKE1FQVNVUkVfUkVRX1RBQikpOworCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgRmFpbCB0byBhbGxvYyBtZW1vcnkgZm9yIHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiLlxuIiwgX19GVU5DVElPTl9fKSk7CisKKwlyZXR1cm47Cit9CisKK1ZPSUQgTWVhc3VyZVJlcVRhYkV4aXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTmRpc0ZyZWVTcGluTG9jayhwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisKKwlpZiAocEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIpCisJCWtmcmVlKHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiKTsKKwlwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYiA9IE5VTEw7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBQTUVBU1VSRV9SRVFfRU5UUlkgTWVhc3VyZVJlcUxvb2tVcCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCVVJTlQgSGFzaElkeDsKKwlQTUVBU1VSRV9SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisKKwlpZiAocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBNZWFzdXJlUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCisJSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOworCXBFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisKKwl3aGlsZSAocEVudHJ5KQorCXsKKwkJaWYgKHBFbnRyeS0+RGlhbG9nVG9rZW4gPT0gRGlhbG9nVG9rZW4pCisJCQlicmVhazsKKwkJZWxzZQorCQl7CisJCQlwUHJldkVudHJ5ID0gcEVudHJ5OworCQkJcEVudHJ5ID0gcEVudHJ5LT5wTmV4dDsKKwkJfQorCX0KKworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCisJcmV0dXJuIHBFbnRyeTsKK30KKworc3RhdGljIFBNRUFTVVJFX1JFUV9FTlRSWSBNZWFzdXJlUmVxSW5zZXJ0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVJTlQ4CQkJRGlhbG9nVG9rZW4pCit7CisJSU5UIGk7CisJVUxPTkcgSGFzaElkeDsKKwlQTUVBU1VSRV9SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTCwgcEN1cnJFbnRyeTsKKwlVTE9ORyBOb3c7CisKKwlpZihwVGFiID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogcE1lYXN1cmVSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwRW50cnkgPSBNZWFzdXJlUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pOworCWlmIChwRW50cnkgPT0gTlVMTCkKKwl7CisJCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRTsgaSsrKQorCQl7CisJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJcEVudHJ5ID0gJnBUYWItPkNvbnRlbnRbaV07CisKKwkJCWlmICgocEVudHJ5LT5WYWxpZCA9PSBUUlVFKQorCQkJCSYmIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3csICh1bnNpZ25lZCBsb25nKShwRW50cnktPmxhc3RUaW1lICsgTVFfUkVRX0FHRV9PVVQpKSkKKwkJCXsKKwkJCQlQTUVBU1VSRV9SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisJCQkJVUxPTkcgSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgocEVudHJ5LT5EaWFsb2dUb2tlbik7CisJCQkJUE1FQVNVUkVfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQkJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJCQlkbworCQkJCXsKKwkJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCQkJeworCQkJCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkKKwkJCQkJCXsKKwkJCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwUHJldkVudHJ5LT5wTmV4dCA9IHBFbnRyeS0+cE5leHQ7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCQkJfSB3aGlsZSAocFByb2JlRW50cnkpOworCisJCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2YoTUVBU1VSRV9SRVFfRU5UUlkpKTsKKwkJCQlwVGFiLT5TaXplLS07CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHBFbnRyeS0+VmFsaWQgPT0gRkFMU0UpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA8IE1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRSkKKwkJeworCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKwkJCXBFbnRyeS0+bGFzdFRpbWUgPSBOb3c7CisJCQlwRW50cnktPlZhbGlkID0gVFJVRTsKKwkJCXBFbnRyeS0+RGlhbG9nVG9rZW4gPSBEaWFsb2dUb2tlbjsKKwkJCXBUYWItPlNpemUrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeSA9IE5VTEw7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogcE1lYXN1cmVSZXFUYWIgdGFiIGZ1bGwuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJfQorCisJCS8vIGFkZCB0aGlzIE5laWdoYm9yIGVudHJ5IGludG8gSEFTSCB0YWJsZQorCQlpZiAocEVudHJ5KQorCQl7CisJCQlIYXNoSWR4ID0gTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChEaWFsb2dUb2tlbik7CisJCQlpZiAocFRhYi0+SGFzaFtIYXNoSWR4XSA9PSBOVUxMKQorCQkJeworCQkJCXBUYWItPkhhc2hbSGFzaElkeF0gPSBwRW50cnk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEN1cnJFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisJCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCisJCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKKwkJCQlwQ3VyckVudHJ5LT5wTmV4dCA9IHBFbnRyeTsKKwkJCX0KKwkJfQorCisJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCX0KKworCXJldHVybiBwRW50cnk7Cit9CisKK3N0YXRpYyBWT0lEIE1lYXN1cmVSZXFEZWxldGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlQTUVBU1VSRV9SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCWlmKHBUYWIgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwTWVhc3VyZVJlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyBpZiBlbXB0eSwgcmV0dXJuCisJaWYgKHBUYWItPlNpemUgPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInBNZWFzdXJlUmVxVGFiIGVtcHR5LlxuIikpOworCQlyZXR1cm47CisJfQorCisJcEVudHJ5ID0gTWVhc3VyZVJlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKKwlpZiAocEVudHJ5ICE9IE5VTEwpCisJeworCQlQTUVBU1VSRV9SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisJCVVMT05HIEhhc2hJZHggPSBNUV9ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQlQTUVBU1VSRV9SRVFfRU5UUlkgcFByb2JlRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOworCisJCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKwkJLy8gdXBkYXRlIEhhc2ggbGlzdAorCQlkbworCQl7CisJCQlpZiAocFByb2JlRW50cnkgPT0gcEVudHJ5KQorCQkJeworCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJeworCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJcFByZXZFbnRyeSA9IHBQcm9iZUVudHJ5OworCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihNRUFTVVJFX1JFUV9FTlRSWSkpOworCQlwVGFiLT5TaXplLS07CisKKwkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisJfQorCisJcmV0dXJuOworfQorCitWT0lEIFRwY1JlcVRhYkluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCisJcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYiA9IGttYWxsb2Moc2l6ZW9mKFRQQ19SRVFfVEFCKSwgR0ZQX0FUT01JQyk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIpCisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIsIHNpemVvZihUUENfUkVRX1RBQikpOworCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgRmFpbCB0byBhbGxvYyBtZW1vcnkgZm9yIHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKworCXJldHVybjsKK30KKworVk9JRCBUcGNSZXFUYWJFeGl0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5kaXNGcmVlU3BpbkxvY2socEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisKKwlpZiAocEFkLT5Db21tb25DZmcucFRwY1JlcVRhYikKKwkJa2ZyZWUocEFkLT5Db21tb25DZmcucFRwY1JlcVRhYik7CisJcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYiA9IE5VTEw7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBQVFBDX1JFUV9FTlRSWSBUcGNSZXFMb29rVXAoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlVSU5UIEhhc2hJZHg7CisJUFRQQ19SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiOworCVBUUENfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEw7CisJUFRQQ19SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisKKwlpZiAocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKworCUhhc2hJZHggPSBUUENfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChEaWFsb2dUb2tlbik7CisJcEVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCXdoaWxlIChwRW50cnkpCisJeworCQlpZiAocEVudHJ5LT5EaWFsb2dUb2tlbiA9PSBEaWFsb2dUb2tlbikKKwkJCWJyZWFrOworCQllbHNlCisJCXsKKwkJCXBQcmV2RW50cnkgPSBwRW50cnk7CisJCQlwRW50cnkgPSBwRW50cnktPnBOZXh0OworCQl9CisJfQorCisJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKworCXJldHVybiBwRW50cnk7Cit9CisKKworc3RhdGljIFBUUENfUkVRX0VOVFJZIFRwY1JlcUluc2VydCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCUlOVCBpOworCVVMT05HIEhhc2hJZHg7CisJUFRQQ19SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiOworCVBUUENfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEwsIHBDdXJyRW50cnk7CisJVUxPTkcgTm93OworCisJaWYocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwRW50cnkgPSBUcGNSZXFMb29rVXAocEFkLCBEaWFsb2dUb2tlbik7CisJaWYgKHBFbnRyeSA9PSBOVUxMKQorCXsKKwkJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfVFBDX1JFUV9UQUJfU0laRTsgaSsrKQorCQl7CisJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJcEVudHJ5ID0gJnBUYWItPkNvbnRlbnRbaV07CisKKwkJCWlmICgocEVudHJ5LT5WYWxpZCA9PSBUUlVFKQorCQkJCSYmIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3csICh1bnNpZ25lZCBsb25nKShwRW50cnktPmxhc3RUaW1lICsgVFBDX1JFUV9BR0VfT1VUKSkpCisJCQl7CisJCQkJUFRQQ19SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisJCQkJVUxPTkcgSGFzaElkeCA9IFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQkJCVBUUENfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQkJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJCQlkbworCQkJCXsKKwkJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCQkJeworCQkJCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkKKwkJCQkJCXsKKwkJCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwUHJldkVudHJ5LT5wTmV4dCA9IHBFbnRyeS0+cE5leHQ7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCQkJfSB3aGlsZSAocFByb2JlRW50cnkpOworCisJCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2YoVFBDX1JFUV9FTlRSWSkpOworCQkJCXBUYWItPlNpemUtLTsKKworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAocEVudHJ5LT5WYWxpZCA9PSBGQUxTRSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpIDwgTUFYX1RQQ19SRVFfVEFCX1NJWkUpCisJCXsKKwkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJCQlwRW50cnktPmxhc3RUaW1lID0gTm93OworCQkJcEVudHJ5LT5WYWxpZCA9IFRSVUU7CisJCQlwRW50cnktPkRpYWxvZ1Rva2VuID0gRGlhbG9nVG9rZW47CisJCQlwVGFiLT5TaXplKys7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnkgPSBOVUxMOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgdGFiIGZ1bGwuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJfQorCisJCS8vIGFkZCB0aGlzIE5laWdoYm9yIGVudHJ5IGludG8gSEFTSCB0YWJsZQorCQlpZiAocEVudHJ5KQorCQl7CisJCQlIYXNoSWR4ID0gVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOworCQkJaWYgKHBUYWItPkhhc2hbSGFzaElkeF0gPT0gTlVMTCkKKwkJCXsKKwkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBDdXJyRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOworCQkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKQorCQkJCQlwQ3VyckVudHJ5ID0gcEN1cnJFbnRyeS0+cE5leHQ7CisJCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7CisJCQl9CisJCX0KKworCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCX0KKworCXJldHVybiBwRW50cnk7Cit9CisKK3N0YXRpYyBWT0lEIFRwY1JlcURlbGV0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCVBUUENfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYjsKKwlQVFBDX1JFUV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJaWYocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCisJLy8gaWYgZW1wdHksIHJldHVybgorCWlmIChwVGFiLT5TaXplID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwVHBjUmVxVGFiIGVtcHR5LlxuIikpOworCQlyZXR1cm47CisJfQorCisJcEVudHJ5ID0gVHBjUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pOworCWlmIChwRW50cnkgIT0gTlVMTCkKKwl7CisJCVBUUENfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCQlVTE9ORyBIYXNoSWR4ID0gVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgocEVudHJ5LT5EaWFsb2dUb2tlbik7CisJCVBUUENfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKwkJLy8gdXBkYXRlIEhhc2ggbGlzdAorCQlkbworCQl7CisJCQlpZiAocFByb2JlRW50cnkgPT0gcEVudHJ5KQorCQkJeworCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJeworCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJcFByZXZFbnRyeSA9IHBQcm9iZUVudHJ5OworCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihUUENfUkVRX0VOVFJZKSk7CisJCXBUYWItPlNpemUtLTsKKworCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCX0KKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHZXQgQ3VycmVudCBUaW1lUyB0YW1wLgorCisJUGFyYW1ldHJzOgorCisJUmV0dXJuCTogQ3VycmVudCBUaW1lIFN0YW1wLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBVSU5UNjQgR2V0Q3VycmVudFRpbWVTdGFtcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwkvLyBnZXQgY3VycmVudCB0aW1lIHN0YW1wLgorCXJldHVybiAwOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUdldCBDdXJyZW50IFRyYW5zbWl0IFBvd2VyLgorCisJUGFyYW1ldHJzOgorCisJUmV0dXJuCTogQ3VycmVudCBUaW1lIFN0YW1wLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBVSU5UOCBHZXRDdXJUeFB3cigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVSU5UOCBXY2lkKQoreworCXJldHVybiAxNjsgLyogMTYgZEJtICovCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5zZXJ0IERpYWxvZyBUb2tlbiBpbnRvIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCQkzLiBEaWFsb2cgdG9rZW4uCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydERpYWxvZ1Rva2VuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFVJTlQ4IERpYWxvZ1Rva2VuKQoreworCVVMT05HIFRlbXBMZW47CisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkmVGVtcExlbiwKKwkJCQkJMSwJCQkJJkRpYWxvZ1Rva2VuLAorCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5zZXJ0IFRQQyBSZXF1ZXN0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKyBzdGF0aWMgVk9JRCBJbnNlcnRUcGNSZXFJRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbikKK3sKKwlVTE9ORyBUZW1wTGVuOworCVVMT05HIExlbiA9IDA7CisJVUlOVDggRWxlbWVudElEID0gSUVfVFBDX1JFUVVFU1Q7CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBUUEMgUmVwb3J0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisJCTMuIFRyYW5zbWl0IFBvd2VyLgorCQk0LiBMaW5rIE1hcmdpbi4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworIHN0YXRpYyBWT0lEIEluc2VydFRwY1JlcG9ydElFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFVJTlQ4IFR4UHdyLAorCUlOIFVJTlQ4IExpbmtNYXJnaW4pCit7CisJVUxPTkcgVGVtcExlbjsKKwlVTE9ORyBMZW4gPSBzaXplb2YoVFBDX1JFUE9SVF9JTkZPKTsKKwlVSU5UOCBFbGVtZW50SUQgPSBJRV9UUENfUkVQT1JUOworCVRQQ19SRVBPUlRfSU5GTyBUcGNSZXBvcnRJRTsKKworCVRwY1JlcG9ydElFLlR4UHdyID0gVHhQd3I7CisJVHBjUmVwb3J0SUUuTGlua01hcmdpbiA9IExpbmtNYXJnaW47CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJTGVuLAkJCQkJCSZUcGNSZXBvcnRJRSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgSUUgaW50byBmcmFtZS4KKworCVBhcmFtZXRyczoKKwkJMS4gZnJhbWUgYnVmZmVyIHBvaW50ZXIuCisJCTIuIGZyYW1lIGxlbmd0aC4KKwkJMy4gY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCisJCTQuIG5ldyBzZWxlY3RlZCBjaGFubmVsLgorCQk1LiBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgY291bnQuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydENoU3dBbm5JRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBDaFN3TW9kZSwKKwlJTiBVSU5UOCBOZXdDaGFubmVsLAorCUlOIFVJTlQ4IENoU3dDbnQpCit7CisJVUxPTkcgVGVtcExlbjsKKwlVTE9ORyBMZW4gPSBzaXplb2YoQ0hfU1dfQU5OX0lORk8pOworCVVJTlQ4IEVsZW1lbnRJRCA9IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVDsKKwlDSF9TV19BTk5fSU5GTyBDaFN3QW5uSUU7CisKKwlDaFN3QW5uSUUuQ2hTd01vZGUgPSBDaFN3TW9kZTsKKwlDaFN3QW5uSUUuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJQ2hTd0FubklFLkNoU3dDbnQgPSBDaFN3Q250OworCisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJJkVsZW1lbnRJRCwKKwkJCQkJCTEsCQkJCQkJJkxlbiwKKwkJCQkJCUxlbiwJCQkJCSZDaFN3QW5uSUUsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgTWVhc3VyZSBSZXF1ZXN0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisJCTMuIE1lYXN1cmUgVG9rZW4uCisJCTQuIE1lYXN1cmUgUmVxdWVzdCBNb2RlLgorCQk1LiBNZWFzdXJlIFJlcXVlc3QgVHlwZS4KKwkJNi4gTWVhc3VyZSBDaGFubmVsLgorCQk3LiBNZWFzdXJlIFN0YXJ0IHRpbWUuCisJCTguIE1lYXN1cmUgRHVyYXRpb24uCisKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIFZPSUQgSW5zZXJ0TWVhc3VyZVJlcUlFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFBNRUFTVVJFX1JFUV9JTkZPIHBNZWFzdXJlUmVxSUUpCit7CisJVUxPTkcgVGVtcExlbjsKKwlVSU5UOCBMZW4gPSBzaXplb2YoTUVBU1VSRV9SRVFfSU5GTyk7CisJVUlOVDggRWxlbWVudElEID0gSUVfTUVBU1VSRU1FTlRfUkVRVUVTVDsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwJCQkJCSZUZW1wTGVuLAorCQkJCQkJMSwJCQkJCQkJJkVsZW1lbnRJRCwKKwkJCQkJCTEsCQkJCQkJCSZMZW4sCisJCQkJCQlMZW4sCQkJCQkJcE1lYXN1cmVSZXFJRSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgTWVhc3VyZSBSZXBvcnQgSUUgaW50byBmcmFtZS4KKworCVBhcmFtZXRyczoKKwkJMS4gZnJhbWUgYnVmZmVyIHBvaW50ZXIuCisJCTIuIGZyYW1lIGxlbmd0aC4KKwkJMy4gTWVhc3VyZSBUb2tlbi4KKwkJNC4gTWVhc3VyZSBSZXF1ZXN0IE1vZGUuCisJCTUuIE1lYXN1cmUgUmVxdWVzdCBUeXBlLgorCQk2LiBMZW5ndGggb2YgUmVwb3J0IEluZm9tYXRpb24KKwkJNy4gUG9pbnRlciBvZiBSZXBvcnQgSW5mb21hdGlvbiBCdWZmZXIuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydE1lYXN1cmVSZXBvcnRJRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBQTUVBU1VSRV9SRVBPUlRfSU5GTyBwTWVhc3VyZVJlcG9ydElFLAorCUlOIFVJTlQ4IFJlcG9ydExuZm9MZW4sCisJSU4gUFVJTlQ4IHBSZXBvcnRJbmZvKQoreworCVVMT05HIFRlbXBMZW47CisJVUxPTkcgTGVuOworCVVJTlQ4IEVsZW1lbnRJRCA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKworCUxlbiA9IHNpemVvZihNRUFTVVJFX1JFUE9SVF9JTkZPKSArIFJlcG9ydExuZm9MZW47CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJTGVuLAkJCQkJCXBNZWFzdXJlUmVwb3J0SUUsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKwlpZiAoKFJlcG9ydExuZm9MZW4gPiAwKSAmJiAocFJlcG9ydEluZm8gIT0gTlVMTCkpCisJeworCQlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYgKyAqcEZyYW1lTGVuLAkJJlRlbXBMZW4sCisJCQkJCQkJUmVwb3J0TG5mb0xlbiwJCQkJcFJlcG9ydEluZm8sCisJCQkJCQkJRU5EX09GX0FSR1MpOworCisJCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKwl9CisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVNZWFzdXJlbWVudFJlcSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IE1lYXN1cmVUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxTW9kZSwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxVHlwZSwKKwlJTiBVSU5UOCBNZWFzdXJlQ2gsCisJSU4gVUlOVDE2IE1lYXN1cmVEdXJhdGlvbikKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKwlIRUFERVJfODAyXzExIEFjdEhkcjsKKwlNRUFTVVJFX1JFUV9JTkZPIE1lYXN1cmVSZXFJRTsKKwlVSU5UOCBSbVJlcURhaWxvZ1Rva2VuID0gUmFuZG9tQnl0ZShwQWQpOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lID0gR2V0Q3VycmVudFRpbWVTdGFtcChwQWQpOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX01SUSk7CisKKwkvLyBmaWxsIERpYWxvZyBUb2tlbgorCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgTWVhc3VyZVRva2VuKTsKKworCS8vIHByZXBhcmUgTWVhc3VyZW1lbnQgSUUuCisJTmRpc1plcm9NZW1vcnkoJk1lYXN1cmVSZXFJRSwgc2l6ZW9mKE1FQVNVUkVfUkVRX0lORk8pKTsKKwlNZWFzdXJlUmVxSUUuVG9rZW4gPSBSbVJlcURhaWxvZ1Rva2VuOworCU1lYXN1cmVSZXFJRS5SZXFNb2RlLndvcmQgPSBNZWFzdXJlUmVxTW9kZTsKKwlNZWFzdXJlUmVxSUUuUmVxVHlwZSA9IE1lYXN1cmVSZXFUeXBlOworCU1lYXN1cmVSZXFJRS5NZWFzdXJlUmVxLkNoTnVtID0gTWVhc3VyZUNoOworCU1lYXN1cmVSZXFJRS5NZWFzdXJlUmVxLk1lYXN1cmVTdGFydFRpbWUgPSBjcHUybGU2NChNZWFzdXJlU3RhcnRUaW1lKTsKKwlNZWFzdXJlUmVxSUUuTWVhc3VyZVJlcS5NZWFzdXJlRHVyYXRpb24gPSBjcHUybGUxNihNZWFzdXJlRHVyYXRpb24pOworCUluc2VydE1lYXN1cmVSZXFJRShwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sICZNZWFzdXJlUmVxSUUpOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVwb3J0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCisJCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCisKKwlQYXJhbWV0cnM6CisJCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZU1lYXN1cmVtZW50UmVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggRGlhbG9nVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVRva2VuLAorCUlOIFVJTlQ4IE1lYXN1cmVSZXFNb2RlLAorCUlOIFVJTlQ4IE1lYXN1cmVSZXFUeXBlLAorCUlOIFVJTlQ4IFJlcG9ydEluZm9MZW4sCisJSU4gUFVJTlQ4IHBSZXBvcnRJbmZvKQoreworCVBVQ0hBUiBwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUyBOU3RhdHVzOworCVVMT05HIEZyYW1lTGVuOworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCU1FQVNVUkVfUkVQT1JUX0lORk8gTWVhc3VyZVJlcElFOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX01SUCk7CisKKwkvLyBmaWxsIERpYWxvZyBUb2tlbgorCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgRGlhbG9nVG9rZW4pOworCisJLy8gcHJlcGFyZSBNZWFzdXJlbWVudCBJRS4KKwlOZGlzWmVyb01lbW9yeSgmTWVhc3VyZVJlcElFLCBzaXplb2YoTUVBU1VSRV9SRVBPUlRfSU5GTykpOworCU1lYXN1cmVSZXBJRS5Ub2tlbiA9IE1lYXN1cmVUb2tlbjsKKwlNZWFzdXJlUmVwSUUuUmVwb3J0TW9kZS53b3JkID0gTWVhc3VyZVJlcU1vZGU7CisJTWVhc3VyZVJlcElFLlJlcG9ydFR5cGUgPSBNZWFzdXJlUmVxVHlwZTsKKwlJbnNlcnRNZWFzdXJlUmVwb3J0SUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCAmTWVhc3VyZVJlcElFLCBSZXBvcnRJbmZvTGVuLCBwUmVwb3J0SW5mbyk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBUUEMgUmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVUUENSZXEoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVQ0hBUiBEaWFsb2dUb2tlbikKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX1RQQ1JRKTsKKworCS8vIGZpbGwgRGlhbG9nIFRva2VuCisJSW5zZXJ0RGlhbG9nVG9rZW4ocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBEaWFsb2dUb2tlbik7CisKKwkvLyBJbnNlcnQgVFBDIFJlcXVlc3QgSUUuCisJSW5zZXJ0VHBjUmVxSUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIFRQQyBSZXBvcnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlVFBDUmVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggRGlhbG9nVG9rZW4sCisJSU4gVUlOVDggVHhQd3IsCisJSU4gVUlOVDggTGlua01hcmdpbikKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX1RQQ1JQKTsKKworCS8vIGZpbGwgRGlhbG9nIFRva2VuCisJSW5zZXJ0RGlhbG9nVG9rZW4ocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBEaWFsb2dUb2tlbik7CisKKwkvLyBJbnNlcnQgVFBDIFJlcXVlc3QgSUUuCisJSW5zZXJ0VHBjUmVwb3J0SUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBUeFB3ciwgTGlua01hcmdpbik7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKwkJMi4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCisJCTIuIGEgTmV3IHNlbGVjdGVkIGNoYW5uZWwuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZUNoU3dBbm4oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBDaFN3TW9kZSwKKwlJTiBVSU5UOCBOZXdDaCkKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX0NIQU5ORUxfU1dJVENIKTsKKworCUluc2VydENoU3dBbm5JRShwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENoU3dNb2RlLCBOZXdDaCwgMCk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBCT09MRUFOIERmc1JlcXVpcmVtZW50Q2hlY2soCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDggQ2hhbm5lbCkKK3sKKwlCT09MRUFOIFJlc3VsdCA9IEZBTFNFOworCUlOVCBpOworCisJZG8KKwl7CisJCS8vIGNoZWNrIERGUyBwcm9jZWR1cmUgaXMgcnVubmluZy4KKwkJLy8gbWFrZSBzdXJlIERGUyBwcm9jZWR1cmUgd29uJ3Qgc3RhcnQgdHdpY2UuCisJCWlmIChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgIT0gUkRfTk9STUFMX01PREUpCisJCXsKKwkJCVJlc3VsdCA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKworCQkvLyBjaGVjayB0aGUgbmV3IGNoYW5uZWwgY2FycmllZCBmcm9tIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbW5ldCBpcyB2YWxpZC4KKwkJZm9yIChpPTA7IGk8cEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCQl7CisJCQlpZiAoKENoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorCQkJCSYmKHBBZC0+Q2hhbm5lbExpc3RbaV0uUmVtYWluaW5nVGltZUZvclVzZSA9PSAwKSkKKwkJCXsKKwkJCQkvLyBmb3VuZCByYWRhciBzaWduYWwgaW4gdGhlIGNoYW5uZWwuIHRoZSBjaGFubmVsIGNhbid0IHVzZSBhdCBsZWFzdCBmb3IgMzAgbWludXRlcy4KKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgPSAxODAwOy8vMzAgbWluID0gMTgwMCBzZWMKKwkJCQlSZXN1bHQgPSBUUlVFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZShGQUxTRSk7CisKKwlyZXR1cm4gUmVzdWx0OworfQorCitWT0lEIE5vdGlmeUNoU3dBbm5Ub1BlZXJBUHMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBSQSwKKwlJTiBQVUNIQVIgcFRBLAorCUlOIFVJTlQ4IENoU3dNb2RlLAorCUlOIFVJTlQ4IENoYW5uZWwpCit7CisjaWZkZWYgV0RTX1NVUFBPUlQKKwlpZiAoISgocFJBWzBdICYgMHhmZikgPT0gMHhmZikpIC8vIGlzIHBSQSBhIGJyb2FkY2FzZSBhZGRyZXNzLgorCXsKKwkJSU5UIGk7CisJCS8vIGluZm8gbmVpZ2hib3IgQVBzIHRoYXQgUmFkYXIgc2lnbmFsIGZvdW5kIHRocm9naCBXRFMgbGluay4KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9XRFNfRU5UUlk7IGkrKykKKwkJeworCQkJaWYgKFZhbGlkV2RzRW50cnkocEFkLCBpKSkKKwkJCXsKKwkJCQlQVUNIQVIgcERBID0gcEFkLT5XZHNUYWIuV2RzRW50cnlbaV0uUGVlcldkc0FkZHI7CisKKwkJCQkvLyBEQSBlcXVhbCB0byBTQS4gaGF2ZSBubyBuZWNlc3Nhcnkgb3JpZ25hbCBBUCB3aGljaCBmb3VuZCBSYWRhciBzaWduYWwuCisJCQkJaWYgKE1BQ19BRERSX0VRVUFMKHBUQSwgcERBKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvLyBzZW5kIENoYW5uZWwgU3dpdGNoIEFjdGlvbiBmcmFtZSB0byBpbmZvIE5laWdoYnJvIEFQcy4KKwkJCQlFbnF1ZXVlQ2hTd0FubihwQWQsIHBEQSwgQ2hTd01vZGUsIENoYW5uZWwpOworCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIFdEU19TVVBQT1JUIC8vCit9CisKK3N0YXRpYyBWT0lEIFN0YXJ0REZTUHJvY2VkdXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gVUlOVDggQ2hTd01vZGUpCit7CisJLy8gc3RhcnQgREZTIHByb2NlZHVyZQorCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBDaGFubmVsOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU5fQ2hhbm5lbENoZWNrKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfU1dJVENISU5HX01PREU7CisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ1NDb3VudCA9IDA7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IGluZm9tYXRpb24gYnVmZmVyLgorCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAgQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IElFLgorICArLS0tLSstLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisgIHwgSUQgfCBMZW4gfENoIFN3IE1vZGUgfCBOZXcgQ2ggTnVtIHwgQ2ggU3cgQ250IHwKKyAgKy0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgIDEgICAgMSAgICAgICAgMSAgICAgICAgICAgMSAgICAgICAgICAgIDEKKyovCitzdGF0aWMgQk9PTEVBTiBQZWVyQ2hTd0FublNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUENIX1NXX0FOTl9JTkZPIHBDaFN3QW5uSW5mbykKK3sKKwlQRlJBTUVfODAyXzExIEZyID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQVUNIQVIgcEZyYW1lUHRyID0gRnItPk9jdGV0OworCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7CisJUEVJRF9TVFJVQ1QgZWlkX3B0cjsKKworCS8vIHNraXAgODAyLjExIGhlYWRlci4KKwlNc2dMZW4gLT0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJLy8gc2tpcCBjYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUuCisJcEZyYW1lUHRyICs9IDI7CisJTXNnTGVuIC09IDI7CisKKwlpZiAocENoU3dBbm5JbmZvID09IE5VTEwpCisJCXJldHVybiByZXN1bHQ7CisKKwllaWRfcHRyID0gKFBFSURfU1RSVUNUKXBGcmFtZVB0cjsKKwl3aGlsZSAoKChVQ0hBUiopZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwgKChQVUNIQVIpcEZyYW1lUHRyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UOgorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQ2hTd0FubkluZm8tPkNoU3dNb2RlLCBlaWRfcHRyLT5PY3RldCwgMSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBDaFN3QW5uSW5mby0+Q2hhbm5lbCwgZWlkX3B0ci0+T2N0ZXQgKyAxLCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcENoU3dBbm5JbmZvLT5DaFN3Q250LCBlaWRfcHRyLT5PY3RldCArIDIsIDEpOworCisJCQkJcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1lYXN1cmVtZW50IHJlcXVlc3QgYWN0aW9uIGZyYW1lIHNhbml0eSBjaGVjay4KKworCVBhcmFtZXRyczoKKwkJMS4gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisJCTIuIG1lc3NhZ2UgbGVuZ3RoLgorCQkzLiBNZWFzdXJlbWVudCByZXF1ZXN0IGluZm9tYXRpb24gYnVmZmVyLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgQk9PTEVBTiBQZWVyTWVhc3VyZVJlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVJTlQ4IHBEaWFsb2dUb2tlbiwKKwlPVVQgUE1FQVNVUkVfUkVRX0lORk8gcE1lYXN1cmVSZXFJbmZvKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCVBVQ0hBUiBwdHI7CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKKworCS8vIHNraXAgODAyLjExIGhlYWRlci4KKwlNc2dMZW4gLT0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJLy8gc2tpcCBjYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUuCisJcEZyYW1lUHRyICs9IDI7CisJTXNnTGVuIC09IDI7CisKKwlpZiAocE1lYXN1cmVSZXFJbmZvID09IE5VTEwpCisJCXJldHVybiByZXN1bHQ7CisKKwlOZGlzTW92ZU1lbW9yeShwRGlhbG9nVG9rZW4sIHBGcmFtZVB0ciwgMSk7CisJcEZyYW1lUHRyICs9IDE7CisJTXNnTGVuIC09IDE7CisKKwllaWRfcHRyID0gKFBFSURfU1RSVUNUKXBGcmFtZVB0cjsKKwl3aGlsZSAoKChVQ0hBUiopZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwgKChQVUNIQVIpcEZyYW1lUHRyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfUkVRVUVTVDoKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5Ub2tlbiwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcUluZm8tPlJlcU1vZGUud29yZCwgZWlkX3B0ci0+T2N0ZXQgKyAxLCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5SZXFUeXBlLCBlaWRfcHRyLT5PY3RldCArIDIsIDEpOworCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5NZWFzdXJlUmVxLkNoTnVtLCBwdHIsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZNZWFzdXJlU3RhcnRUaW1lLCBwdHIgKyAxLCA4KTsKKwkJCQlwTWVhc3VyZVJlcUluZm8tPk1lYXN1cmVSZXEuTWVhc3VyZVN0YXJ0VGltZSA9IFNXQVA2NChNZWFzdXJlU3RhcnRUaW1lKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmTWVhc3VyZUR1cmF0aW9uLCBwdHIgKyA5LCAyKTsKKwkJCQlwTWVhc3VyZVJlcUluZm8tPk1lYXN1cmVSZXEuTWVhc3VyZUR1cmF0aW9uID0gU1dBUDE2KE1lYXN1cmVEdXJhdGlvbik7CisKKwkJCQlyZXN1bHQgPSBUUlVFOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTWVhc3VyZW1lbnQgcmVwb3J0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gTWVhc3VyZW1lbnQgcmVwb3J0IGluZm9tYXRpb24gYnVmZmVyLgorCQk0LiBiYXNpYyByZXBvcnQgaW5mb21hdGlvbiBidWZmZXIuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAgTWVhc3VyZW1lbnQgUmVwb3J0IElFLgorICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJRCB8IExlbiB8IFRva2VuIHwgUmVwb3J0IE1vZGUgfCBNZWFzdXJlIFR5cGUgfCBNZWFzdXJlIFJlcG9ydCB8CisgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgIDEgICAgIDEgICAgICAxICAgICAgICAgIDEgICAgICAgICAgICAgMSAgICAgICAgICAgIHZhcmlhYmxlCisKKyAgQmFzaWMgUmVwb3J0LgorICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rCisgIHwgQ2ggTnVtIHwgU3RhcnQgVGltZSB8IER1cmF0aW9uIHwgTWFwIHwKKyAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKworICAgICAgMSAgICAgICAgICA4ICAgICAgICAgICAyICAgICAgICAxCisKKyAgTWFwIEZpZWxkIEJpdCBGb3JtYXQuCisgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgIHwgQnNzIHwgT0ZETSBQcmVhbWJsZSB8IFVuaWRlbnRpZmllZCBzaWduYWwgfCBSYWRhciB8IFVubWVhc3VyZWQgfCBSZXNlcnZlZCB8CisgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgIDMgICAgICAgICA0ICAgICAgICAgIDUtNworKi8KK3N0YXRpYyBCT09MRUFOIFBlZXJNZWFzdXJlUmVwb3J0U2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKnBNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUlOVDggcERpYWxvZ1Rva2VuLAorCU9VVCBQTUVBU1VSRV9SRVBPUlRfSU5GTyBwTWVhc3VyZVJlcG9ydEluZm8sCisJT1VUIFBVSU5UOCBwUmVwb3J0QnVmKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCVBVQ0hBUiBwdHI7CisKKwkvLyBza2lwIDgwMi4xMSBoZWFkZXIuCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBNZWFzdXJlUmVwb3J0SW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX01FQVNVUkVNRU5UX1JFUE9SVDoKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXBvcnRJbmZvLT5Ub2tlbiwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcG9ydEluZm8tPlJlcG9ydE1vZGUsIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVwb3J0SW5mby0+UmVwb3J0VHlwZSwgZWlkX3B0ci0+T2N0ZXQgKyAyLCAxKTsKKwkJCQlpZiAocE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRUeXBlID09IFJNX0JBU0lDKQorCQkJCXsKKwkJCQkJUE1FQVNVUkVfQkFTSUNfUkVQT1JUIHBSZXBvcnQgPSAoUE1FQVNVUkVfQkFTSUNfUkVQT1JUKXBSZXBvcnRCdWY7CisJCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWFwLCBwdHIgKyAxMSwgMSk7CisKKwkJCQl9CisJCQkJZWxzZSBpZiAocE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRUeXBlID09IFJNX0NDQSkKKwkJCQl7CisJCQkJCVBNRUFTVVJFX0NDQV9SRVBPUlQgcFJlcG9ydCA9IChQTUVBU1VSRV9DQ0FfUkVQT1JUKXBSZXBvcnRCdWY7CisJCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+Q0NBX0J1c3lfRnJhY3Rpb24sIHB0ciArIDExLCAxKTsKKworCQkJCX0KKwkJCQllbHNlIGlmIChwTWVhc3VyZVJlcG9ydEluZm8tPlJlcG9ydFR5cGUgPT0gUk1fUlBJX0hJU1RPR1JBTSkKKwkJCQl7CisJCQkJCVBNRUFTVVJFX1JQSV9SRVBPUlQgcFJlcG9ydCA9IChQTUVBU1VSRV9SUElfUkVQT1JUKXBSZXBvcnRCdWY7CisJCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+UlBJX0RlbnNpdHksIHB0ciArIDExLCA4KTsKKwkJCQl9CisJCQkJcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRQQyBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gRGlhbG9nIFRva2VuLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgQk9PTEVBTiBQZWVyVHBjUmVxU2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKnBNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUlOVDggcERpYWxvZ1Rva2VuKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBEaWFsb2dUb2tlbiA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX1RQQ19SRVFVRVNUOgorCQkJCXJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKillaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUUEMgUmVwb3J0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gRGlhbG9nIFRva2VuLgorCQk0LiBUUEMgUmVwb3J0IElFLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgQk9PTEVBTiBQZWVyVHBjUmVwU2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKnBNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUlOVDggcERpYWxvZ1Rva2VuLAorCU9VVCBQVFBDX1JFUE9SVF9JTkZPIHBUcGNSZXBJbmZvKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBEaWFsb2dUb2tlbiA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX1RQQ19SRVBPUlQ6CisJCQkJTmRpc01vdmVNZW1vcnkoJnBUcGNSZXBJbmZvLT5UeFB3ciwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwVHBjUmVwSW5mby0+TGlua01hcmdpbiwgZWlkX3B0ci0+T2N0ZXQgKyAxLCAxKTsKKwkJCQlyZXN1bHQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJDaFN3QW5uQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlDSF9TV19BTk5fSU5GTyBDaFN3QW5uSW5mbzsKKwlQRlJBTUVfODAyXzExIHBGciA9IChQRlJBTUVfODAyXzExKUVsZW0tPk1zZzsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVQ0hBUiBpbmRleCA9IDAsIENoYW5uZWwgPSAwLCBOZXdDaGFubmVsID0gMDsKKwlVTE9ORyBCc3NpZHggPSAwOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJTmRpc1plcm9NZW1vcnkoJkNoU3dBbm5JbmZvLCBzaXplb2YoQ0hfU1dfQU5OX0lORk8pKTsKKwlpZiAoISBQZWVyQ2hTd0FublNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmQ2hTd0FubkluZm8pKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSW52YWxpZCBDaGFubmVsIFN3aXRjaCBBY3Rpb24gRnJhbWUuXG4iKSk7CisJCXJldHVybjsKKwl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCXsKKwkJQnNzaWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEZyLT5IZHIuQWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJDaFN3QW5uQWN0aW9uIC0gQnNzaWR4IGlzIG5vdCBmb3VuZFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiXG4qKioqQnNzaWR4IGlzICVkLCBDaGFubmVsID0gJWRcbiIsIGluZGV4LCBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5DaGFubmVsKSk7CisJCWhleF9kdW1wKCJTU0lEIixwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5Cc3NpZCAsNik7CisKKwkJQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJCU5ld0NoYW5uZWwgPSBDaFN3QW5uSW5mby5DaGFubmVsOworCisJCWlmICgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYgKE5ld0NoYW5uZWwgIT0gMCkgJiYgKENoYW5uZWwgIT0gTmV3Q2hhbm5lbCkpCisJCXsKKwkJCS8vIFN3aXRjaGluZyB0byBjaGFubmVsIDEgY2FuIHByZXZlbnQgZnJvbSByZXNjYW5uaW5nIHRoZSBjdXJyZW50IGNoYW5uZWwgaW1tZWRpYXRlbHkgKGJ5IGF1dG8gcmVjb25uZWN0aW9uKS4KKwkJCS8vIEluIGFkZGl0aW9uLCBjbGVhciB0aGUgTUxNRSBxdWV1ZSBhbmQgdGhlIHNjYW4gdGFibGUgdG8gZGlzY2FyZCB0aGUgUlggcGFja2V0cyBhbmQgcHJldmlvdXMgc2Nhbm5pbmcgcmVzdWx0cy4KKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgMSwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgMSk7CisJCSAgICBMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCU1sbWVRdWV1ZUluaXQoJnBBZC0+TWxtZS5RdWV1ZSk7CisJCQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisJCSAgICBSVE1QdXNlY0RlbGF5KDEwMDAwMDApOwkJLy8gdXNlIGRlbGF5IHRvIHByZXZlbnQgU1RBIGRvIHJlYXNzb2MKKworCQkJLy8gY2hhbm5lbCBzYW5pdHkgY2hlY2sKKwkJCWZvciAoaW5kZXggPSAwIDsgaW5kZXggPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2luZGV4XS5DaGFubmVsID09IE5ld0NoYW5uZWwpCisJCQkJeworCQkJCQlwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5DaGFubmVsID0gTmV3Q2hhbm5lbDsKKwkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJiYmJiYmJiYmJiYmJiYmJlBlZXJDaFN3QW5uQWN0aW9uIC0gU1RBIHJlY2VpdmUgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IElFIChOZXcgQ2hhbm5lbCA9JWQpXG4iLCBOZXdDaGFubmVsKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGluZGV4ID49IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJCQl7CisJCQkJREJHUFJJTlRfRVJSKCgiJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiZQZWVyQ2hTd0FubkFjdGlvbihjYW4gbm90IGZpbmQgTmV3IENoYW5uZWw9JWQgaW4gQ2hhbm5lbExpc3RbJWRdXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0TnVtKSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm47Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNZWFzdXJlbWVudCBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJNZWFzdXJlUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQRlJBTUVfODAyXzExIHBGciA9IChQRlJBTUVfODAyXzExKUVsZW0tPk1zZzsKKwlVSU5UOCBEaWFsb2dUb2tlbjsKKwlNRUFTVVJFX1JFUV9JTkZPIE1lYXN1cmVSZXFJbmZvOworCU1FQVNVUkVfUkVQT1JUX01PREUgUmVwb3J0TW9kZTsKKworCWlmKFBlZXJNZWFzdXJlUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZEaWFsb2dUb2tlbiwgJk1lYXN1cmVSZXFJbmZvKSkKKwl7CisJCVJlcG9ydE1vZGUud29yZCA9IDA7CisJCVJlcG9ydE1vZGUuZmllbGQuSW5jYXBhYmxlID0gMTsKKwkJRW5xdWV1ZU1lYXN1cmVtZW50UmVwKHBBZCwgcEZyLT5IZHIuQWRkcjIsIERpYWxvZ1Rva2VuLCBNZWFzdXJlUmVxSW5mby5Ub2tlbiwgUmVwb3J0TW9kZS53b3JkLCBNZWFzdXJlUmVxSW5mby5SZXFUeXBlLCAwLCBOVUxMKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTWVhc3VyZW1lbnQgUmVwb3J0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJNZWFzdXJlUmVwb3J0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlNRUFTVVJFX1JFUE9SVF9JTkZPIE1lYXN1cmVSZXBvcnRJbmZvOworCVBGUkFNRV84MDJfMTEgcEZyID0gKFBGUkFNRV84MDJfMTEpRWxlbS0+TXNnOworCVVJTlQ4IERpYWxvZ1Rva2VuOworCVBVSU5UOCBwTWVhc3VyZVJlcG9ydEluZm87CisKKy8vCWlmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCAhPSBUUlVFKQorLy8JCXJldHVybjsKKworCWlmICgocE1lYXN1cmVSZXBvcnRJbmZvID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBtZWFzdXJlIHJlcG9ydCBidWZmZXIgKHNpemU9JWQpLlxuIiwgX19GVU5DVElPTl9fLCBzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSkpOworCQlyZXR1cm47CisJfQorCisJTmRpc1plcm9NZW1vcnkoJk1lYXN1cmVSZXBvcnRJbmZvLCBzaXplb2YoTUVBU1VSRV9SRVBPUlRfSU5GTykpOworCU5kaXNaZXJvTWVtb3J5KHBNZWFzdXJlUmVwb3J0SW5mbywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpOworCWlmIChQZWVyTWVhc3VyZVJlcG9ydFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmRGlhbG9nVG9rZW4sICZNZWFzdXJlUmVwb3J0SW5mbywgcE1lYXN1cmVSZXBvcnRJbmZvKSkKKwl7CisJCWRvIHsKKwkJCVBNRUFTVVJFX1JFUV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJCQkvLyBOb3QgYSBhdXRvbm9tb3VzIG1lYXN1cmUgcmVwb3J0LgorCQkJLy8gY2hlY2sgdGhlIGRpYWxvZyB0b2tlbiBmaWVsZC4gZHJvcCBpdCBpZiB0aGUgZGlhbG9nIHRva2VuIGRvZXNuJ3QgbWF0Y2guCisJCQlpZiAoKERpYWxvZ1Rva2VuICE9IDApCisJCQkJJiYgKChwRW50cnkgPSBNZWFzdXJlUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pKSA9PSBOVUxMKSkKKwkJCQlicmVhazsKKworCQkJaWYgKHBFbnRyeSAhPSBOVUxMKQorCQkJCU1lYXN1cmVSZXFEZWxldGUocEFkLCBwRW50cnktPkRpYWxvZ1Rva2VuKTsKKworCQkJaWYgKE1lYXN1cmVSZXBvcnRJbmZvLlJlcG9ydFR5cGUgPT0gUk1fQkFTSUMpCisJCQl7CisJCQkJUE1FQVNVUkVfQkFTSUNfUkVQT1JUIHBCYXNpY1JlcG9ydCA9IChQTUVBU1VSRV9CQVNJQ19SRVBPUlQpcE1lYXN1cmVSZXBvcnRJbmZvOworCQkJCWlmICgocEJhc2ljUmVwb3J0LT5NYXAuZmllbGQuUmFkYXIpCisJCQkJCSYmIChEZnNSZXF1aXJlbWVudENoZWNrKHBBZCwgcEJhc2ljUmVwb3J0LT5DaE51bSkgPT0gVFJVRSkpCisJCQkJeworCQkJCQlOb3RpZnlDaFN3QW5uVG9QZWVyQVBzKHBBZCwgcEZyLT5IZHIuQWRkcjEsIHBGci0+SGRyLkFkZHIyLCAxLCBwQmFzaWNSZXBvcnQtPkNoTnVtKTsKKwkJCQkJU3RhcnRERlNQcm9jZWR1cmUocEFkLCBwQmFzaWNSZXBvcnQtPkNoTnVtLCAxKTsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKEZBTFNFKTsKKwl9CisJZWxzZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbnZhbGlkIE1lYXN1cmVtZW50IFJlcG9ydCBGcmFtZS5cbiIpKTsKKworCWtmcmVlKHBNZWFzdXJlUmVwb3J0SW5mbyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVFBDIFJlcXVlc3QgYWN0aW9uIGZyYW1lIGhhbmRsZXIuCisKKwlQYXJhbWV0cnM6CisJCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIFZPSUQgUGVlclRwY1JlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUEZSQU1FXzgwMl8xMSBwRnIgPSAoUEZSQU1FXzgwMl8xMSlFbGVtLT5Nc2c7CisJUFVDSEFSIHBGcmFtZVB0ciA9IHBGci0+T2N0ZXQ7CisJVUlOVDggRGlhbG9nVG9rZW47CisJVUlOVDggVHhQd3IgPSBHZXRDdXJUeFB3cihwQWQsIEVsZW0tPldjaWQpOworCVVJTlQ4IExpbmtNYXJnaW4gPSAwOworCUNIQVIgUmVhbFJzc2k7CisKKwkvLyBsaW5rIG1hcmdpbjogUmF0aW8gb2YgdGhlIHJlY2VpdmVkIHNpZ25hbCBwb3dlciB0byB0aGUgbWluaW11bSBkZXNpcmVkIGJ5IHRoZSBzdGF0aW9uIChTVEEpLiBUaGUKKwkvLwkJCQlTVEEgbWF5IGluY29ycG9yYXRlIHJhdGUgaW5mb3JtYXRpb24gYW5kIGNoYW5uZWwgY29uZGl0aW9ucywgaW5jbHVkaW5nIGludGVyZmVyZW5jZSwgaW50byBpdHMgY29tcHV0YXRpb24KKwkvLwkJCQlvZiBsaW5rIG1hcmdpbi4KKworCVJlYWxSc3NpID0gUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksCisJCQkJCQkJCUNvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwKKwkJCQkJCQkJQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKKworCS8vIHNraXAgQ2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCisJLy8gRGlhbG9nIHRva2VuLgorCU5kaXNNb3ZlTWVtb3J5KCZEaWFsb2dUb2tlbiwgcEZyYW1lUHRyLCAxKTsKKworCUxpbmtNYXJnaW4gPSAoUmVhbFJzc2kgLyBNSU5fUkNWX1BXUik7CisJaWYgKFBlZXJUcGNSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkRpYWxvZ1Rva2VuKSkKKwkJRW5xdWV1ZVRQQ1JlcChwQWQsIHBGci0+SGRyLkFkZHIyLCBEaWFsb2dUb2tlbiwgVHhQd3IsIExpbmtNYXJnaW4pOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRQQyBSZXBvcnQgYWN0aW9uIGZyYW1lIGhhbmRsZXIuCisKKwlQYXJhbWV0cnM6CisJCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIFZPSUQgUGVlclRwY1JlcEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUlOVDggRGlhbG9nVG9rZW47CisJVFBDX1JFUE9SVF9JTkZPIFRwY1JlcEluZm87CisJUFRQQ19SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCU5kaXNaZXJvTWVtb3J5KCZUcGNSZXBJbmZvLCBzaXplb2YoVFBDX1JFUE9SVF9JTkZPKSk7CisJaWYgKFBlZXJUcGNSZXBTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkRpYWxvZ1Rva2VuLCAmVHBjUmVwSW5mbykpCisJeworCQlpZiAoKHBFbnRyeSA9IFRwY1JlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKSkgIT0gTlVMTCkKKwkJeworCQkJVHBjUmVxRGVsZXRlKHBBZCwgcEVudHJ5LT5EaWFsb2dUb2tlbik7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczogRGlhbG9nVG9rZW49JXgsIFR4UHdyPSVkLCBMaW5rTWFyZ2luPSVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgRGlhbG9nVG9rZW4sIFRwY1JlcEluZm8uVHhQd3IsIFRwY1JlcEluZm8uTGlua01hcmdpbikpOworCQl9CisJfQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNwZWN0cnVuIGFjdGlvbiBmcmFtZXMgSGFuZGxlciBzdWNoIGFzIGNoYW5uZWwgc3dpdGNoIGFubm91Y2VtZW50LAorCQltZWFzdXJlbWVudCByZXBvcnQsIG1lYXN1cmVtZW50IHJlcXVlc3QgYWN0aW9ucyBmcmFtZXMuCisKKwlQYXJhbWV0cnM6CisJCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyU3BlY3RydW1BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCisJVUNIQVIJQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMV07CisKKwlpZiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggIT0gVFJVRSkKKwkJcmV0dXJuOworCisJc3dpdGNoKEFjdGlvbikKKwl7CisJCWNhc2UgU1BFQ19NUlE6CisJCQkvLyBjdXJyZW50IHJ0Mjg2MCB1bmFibGUgZG8gc3VjaCBtZWFzdXJlIHNwZWNpZmllZCBpbiBNZWFzdXJlbWVudCBSZXF1ZXN0LgorCQkJLy8gcmVqZWN0IGFsbCBtZWFzdXJlbWVudCByZXF1ZXN0LgorCQkJUGVlck1lYXN1cmVSZXFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFQ19NUlA6CisJCQlQZWVyTWVhc3VyZVJlcG9ydEFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVDX1RQQ1JROgorCQkJUGVlclRwY1JlcUFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVDX1RQQ1JQOgorCQkJUGVlclRwY1JlcEFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVDX0NIQU5ORUxfU1dJVENIOgoreworI2lmZGVmIERPVDExTl9EUkFGVDMKKwkJCQlTRUNfQ0hBX09GRlNFVF9JRQlTZWNvbmRhcnk7CisJCQkJQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRQlDaGFubmVsU3dpdGNoOworCisJCQkJLy8gODAyLjExaCBvbmx5IGhhcyBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgSUUuCisJCQkJUlRNUE1vdmVNZW1vcnkoJkNoYW5uZWxTd2l0Y2gsICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSs0XSwgc2l6ZW9mIChDSEFfU1dJVENIX0FOTk9VTkNFX0lFKSk7CisKKwkJCQkvLyA4MDIuMTFuIEQzLjAzIGFkZHMgc2Vjb25kYXJ5IGNoYW5uZWwgb2Zmc2V0IGVsZW1lbnQgaW4gdGhlIGVuZC4KKwkJCQlpZiAoRWxlbS0+TXNnTGVuID09ICAoTEVOR1RIXzgwMl8xMSArIDIgKyBzaXplb2YgKENIQV9TV0lUQ0hfQU5OT1VOQ0VfSUUpICsgc2l6ZW9mIChTRUNfQ0hBX09GRlNFVF9JRSkpKQorCQkJCXsKKwkJCQkJUlRNUE1vdmVNZW1vcnkoJlNlY29uZGFyeSwgJkVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzldLCBzaXplb2YgKFNFQ19DSEFfT0ZGU0VUX0lFKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVNlY29uZGFyeS5TZWNvbmRhcnlDaGFubmVsT2Zmc2V0ID0gMDsKKwkJCQl9CisKKwkJCQlpZiAoKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdID09IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVCkgJiYgKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzNdID09IDMpKQorCQkJCXsKKwkJCQkJQ2hhbm5lbFN3aXRjaEFjdGlvbihwQWQsIEVsZW0tPldjaWQsIENoYW5uZWxTd2l0Y2guTmV3Q2hhbm5lbCwgU2Vjb25kYXJ5LlNlY29uZGFyeUNoYW5uZWxPZmZzZXQpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCit9CisJCQlQZWVyQ2hTd0FubkFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlQYXJhbWV0cnM6CisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0lOVCBTZXRfTWVhc3VyZVJlcV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVSU5UIEFpZCA9IDE7CisJVUlOVCBBcmdJZHg7CisJUFVDSEFSIHRoaXNDaGFyOworCisJTUVBU1VSRV9SRVFfTU9ERSBNZWFzdXJlUmVxTW9kZTsKKwlVSU5UOCBNZWFzdXJlUmVxVG9rZW4gPSBSYW5kb21CeXRlKHBBZCk7CisJVUlOVDggTWVhc3VyZVJlcVR5cGUgPSBSTV9CQVNJQzsKKwlVSU5UOCBNZWFzdXJlQ2ggPSAxOworCisJQXJnSWR4ID0gMTsKKwl3aGlsZSAoKHRoaXNDaGFyID0gc3Ryc2VwKChjaGFyICoqKSZhcmcsICItIikpICE9IE5VTEwpCisJeworCQlzd2l0Y2goQXJnSWR4KQorCQl7CisJCQljYXNlIDE6CS8vIEFpZC4KKwkJCQlBaWQgPSBzaW1wbGVfc3RydG9sKHRoaXNDaGFyLCAwLCAxNik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjogLy8gTWVhc3VyZW1lbnQgUmVxdWVzdCBUeXBlLgorCQkJCU1lYXN1cmVSZXFUeXBlID0gc2ltcGxlX3N0cnRvbCh0aGlzQ2hhciwgMCwgMTYpOworCQkJCWlmIChNZWFzdXJlUmVxVHlwZSA+IDMpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogdW5rbm93IE1lYXN1cmVSZXFUeXBlKCVkKVxuIiwgX19GVU5DVElPTl9fLCBNZWFzdXJlUmVxVHlwZSkpOworCQkJCQlyZXR1cm4gVFJVRTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzogLy8gTWVhc3VyZW1lbnQgY2hhbm5lbC4KKwkJCQlNZWFzdXJlQ2ggPSBzaW1wbGVfc3RydG9sKHRoaXNDaGFyLCAwLCAxNik7CisJCQkJYnJlYWs7CisJCX0KKwkJQXJnSWR4Kys7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OkFpZCA9ICVkLCBNZWFzdXJlUmVxVHlwZT0lZCBNZWFzdXJlQ2g9JWRcbiIsIF9fRlVOQ1RJT05fXywgQWlkLCBNZWFzdXJlUmVxVHlwZSwgTWVhc3VyZUNoKSk7CisJaWYgKCFWQUxJRF9XQ0lEKEFpZCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogdW5rbm93IHN0YSBvZiBBaWQoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIEFpZCkpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlNZWFzdXJlUmVxTW9kZS53b3JkID0gMDsKKwlNZWFzdXJlUmVxTW9kZS5maWVsZC5FbmFibGUgPSAxOworCisJTWVhc3VyZVJlcUluc2VydChwQWQsIE1lYXN1cmVSZXFUb2tlbik7CisKKwlFbnF1ZXVlTWVhc3VyZW1lbnRSZXEocEFkLCBwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uQWRkciwKKwkJTWVhc3VyZVJlcVRva2VuLCBNZWFzdXJlUmVxTW9kZS53b3JkLCBNZWFzdXJlUmVxVHlwZSwgTWVhc3VyZUNoLCAyMDAwKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X1RwY1JlcV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVSU5UIEFpZDsKKworCVVJTlQ4IFRwY1JlcVRva2VuID0gUmFuZG9tQnl0ZShwQWQpOworCisJQWlkID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDE2KTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpBaWQgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBBaWQpKTsKKwlpZiAoIVZBTElEX1dDSUQoQWlkKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiB1bmtub3cgc3RhIG9mIEFpZCglZClcbiIsIF9fRlVOQ1RJT05fXywgQWlkKSk7CisJCXJldHVybiBUUlVFOworCX0KKworCVRwY1JlcUluc2VydChwQWQsIFRwY1JlcVRva2VuKTsKKworCUVucXVldWVUUENSZXEocEFkLCBwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uQWRkciwgVHBjUmVxVG9rZW4pOworCisJcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZGZzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Rmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MmE2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Rmcy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIGRmcy5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBTdXBwb3J0IERGUyBmdW5jdGlvbi4KKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgRm9uY2hpICAgIDAzLTEyLTIwMDcgICAgICBjcmVhdGVkCisqLworCisjZGVmaW5lIFJBREFSX1BVTFNFIDEKKyNkZWZpbmUgUkFEQVJfV0lEVEggMgorCisjZGVmaW5lIFdJRFRIX1JEX0lETEUgMAorI2RlZmluZSBXSURUSF9SRF9DSEVDSyAxCisKKworVk9JRCBCYnBSYWRhckRldGVjdGlvblN0YXJ0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBCYnBSYWRhckRldGVjdGlvblN0b3AoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIFJhZGFyRGV0ZWN0aW9uU3RhcnQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiBDVFNfUHJvdGVjdCwKKwlJTiBVSU5UOCBDVFNQZXJpb2QpOworCitWT0lEIFJhZGFyRGV0ZWN0aW9uU3RvcCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUmFkYXJEZXRlY3RQZXJpb2RpYygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKKworQk9PTEVBTiBSYWRhckNoYW5uZWxDaGVjaygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUNoKTsKKworVUxPTkcgSmFwUmFkYXJUeXBlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUxPTkcgUlRNUEJicFJlYWRSYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworVUxPTkcgUlRNUFJlYWRSYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVE1QQ2xlYW5SYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVE1QUHJlcGFyZVJEQ1RTRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBLAorCUlOCVVMT05HCQkJRHVyYXRpb24sCisJSU4gIFVDSEFSICAgICAgICAgICBSVFNSYXRlLAorCUlOICBVTE9ORyAgICAgICAgICAgQ1RTQmFzZUFkZHIsCisJSU4gIFVDSEFSCQkJRnJhbWVHYXApOworCitWT0lEIFJUTVBQcmVwYXJlUmFkYXJEZXRlY3RQYXJhbXMoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCisKK0lOVCBTZXRfQ2hNb3ZpbmdUaW1lX1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZyk7CisKK0lOVCBTZXRfTG9uZ1B1bHNlUmFkYXJUaF9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDc3ODNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9maXJtd2FyZS5oCkBAIC0wLDAgKzEsNTU4IEBACisvKgorIENvcHlyaWdodCAoYykgMjAwNywgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIG1ldDoKKworIAkqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlCisgCWZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAJcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIAkqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAJc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworIAlzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAJKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCisgCWlzIHBlcm1pdHRlZC4KKworIExpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCisgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyCisgb3ducyBvciBjb250cm9scyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZAorIHNlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55Cisgc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5IHRvIFV0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbgorIGNvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZCB1bmRlciBhbiBhcHByb3ZlZCBPcGVuCisgU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0CisgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzLiAgVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyCisgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCisgRElTQ0xBSU1FUi4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywKKyBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyBEQU1BR0UuCisqLworLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KKy8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCisKKworVUNIQVIgRmlybXdhcmVJbWFnZSBbXSA9IHsKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTAsIDB4MjgsIDB4MDIsIDB4MTAsIDB4MzIsIDB4MDIsIDB4MTAsIDB4NzgsIDB4MDIsIDB4MTIsIDB4NjcsIDB4MDIsCisweDEyLCAweDY4LCAweDAyLCAweDEyLCAweDg3LCAweDAyLCAweDEyLCAweDhjLCAweDEyLCAweDEyLCAweDg4LCAweDIyLCAweDAyLCAweDE2LCAweDQ5LCAweDAyLAorMHgxNywgMHgxZiwgMHgwMiwgMHgxMywgMHg3NywgMHgwMiwgMHgxMiwgMHg4ZCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgyMCwgMHgwZCwgMHgwMywgMHgxMiwgMHgxNywKKzB4YzEsIDB4MjIsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MWIsIDB4ZTUsIDB4NGMsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4NDAsCisweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDEwLCAweDJmLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweDc0LCAweDA4LCAweGYwLCAweGU0LAorMHg5MCwgMHgwMSwgMHhhNywgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxYywgMHg5MCwgMHgwMSwgMHg4MCwgMHhlMCwgMHhiNCwKKzB4MDIsIDB4MTUsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MTAsIDB4OTAsIDB4MDEsIDB4ODQsIDB4ZTAsIDB4YjQsIDB4ODEsIDB4MDksIDB4OTAsIDB4MDEsCisweDhjLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDBkLCAweGM4LCAweDIyLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDAyLAorMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHg1NiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgxMiwgMHgwYSwgMHg5ZCwgMHgxMCwKKzB4YjcsIDB4MzEsIDB4MTAsIDB4ZTAsIDB4NTAsIDB4MTEsIDB4MDQsIDB4NTEsIDB4MTEsIDB4MGQsIDB4NTIsIDB4MTEsIDB4MGQsIDB4NTMsIDB4MTEsIDB4MGQsCisweDU0LCAweDExLCAweDRlLCAweDU1LCAweDExLCAweDdlLCAweDcwLCAweDExLCAweGE5LCAweDcxLCAweDExLCAweGQ3LCAweDcyLCAweDEyLCAweDFkLCAweDczLAorMHgxMiwgMHgzZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2NiwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwgMHgwMiwgMHhhZiwKKzB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsCisweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDg1LCAweDU2LCAweDQxLCAweGQyLCAweDAyLCAweDIyLAorMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMSwKKzB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4NjQsIDB4MjAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4NzUsIDB4NGUsIDB4MDMsCisweDc1LCAweDRmLCAweDIwLCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDQ3LCAweDIyLCAweDkwLCAweDA0LCAweDA0LAorMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NywgMHgyNSwgMHg1NywKKzB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsCisweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLAorMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHhlNSwgMHg0NywKKzB4NjQsIDB4MDcsIDB4NjAsIDB4MGIsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4OTAsCisweDcwLCAweDExLCAweGUwLCAweDU0LCAweDBmLCAweGY1LCAweDNhLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAzLAorMHgwMywgMHhlNCwgMHhmNSwgMHg0NiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHhkMiwgMHgwNCwgMHgyMiwgMHg5MCwgMHg3MCwKKzB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsCisweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LAorMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwKKzB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsCisweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLAorMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhiNCwgMHg3MCwgMHgxZSwgMHhhMywgMHhlMCwKKzB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZmQsIDB4OTAsIDB4MDUsIDB4MDUsIDB4ZTAsIDB4NTQsCisweGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLCAweDkwLCAweDA1LCAweDA4LCAweGYwLCAweGU0LCAweGY1LCAweDRlLCAweGY1LAorMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwKKzB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4NGIsIDB4ODAsIDB4NDIsIDB4OTAsIDB4NzAsIDB4MTAsCisweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDkzLCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LAorMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgyYSwgMHg4MCwgMHgyMSwgMHg5MCwgMHg3MCwKKzB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsCisweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDA3LCAweDkwLAorMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHgyMiwgMHhlNSwgMHg1MywgMHg3MCwgMHgxYSwgMHgzMCwgMHg2MCwgMHgwOSwgMHhiMiwKKzB4NGQsIDB4MzAsIDB4NGQsIDB4MDQsIDB4MDUsIDB4NDYsIDB4YzIsIDB4MDQsIDB4ZTUsIDB4NGYsIDB4NDUsIDB4NGUsIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NGYsCisweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweDIyLCAweDIyLCAweGMyLCAweDQyLCAweGQzLCAweDIyLCAweDIyLCAweGMyLCAweDRiLCAweGMyLAorMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwYSwgMHg5ZCwgMHgxMiwgMHhhZiwgMHgwMCwgMHgxMywgMHg0MiwgMHgwNCwgMHgxMywgMHgzZSwgMHgwOCwgMHgxMywKKzB4MTksIDB4MTAsIDB4MTIsIDB4YzMsIDB4MjAsIDB4MTIsIDB4ZTMsIDB4NjAsIDB4MTIsIDB4ZjQsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDQsIDB4ODUsCisweDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLCAweDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDEzLAorMHg0NCwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwKKzB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NjYsIDB4NTMsIDB4NDMsCisweDBmLCAweDgwLCAweDYxLCAweDg1LCAweDQ5LCAweDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LAorMHg3MCwgMHg1MiwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwgMHhjNCwgMHg1NCwgMHgwZiwKKzB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4MzUsIDB4ZTUsCisweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLCAweGY1LCAweDQzLCAweDgwLCAweDJiLCAweGU1LCAweDQ3LCAweGI0LCAweDA0LCAweDA2LCAweDUzLCAweDVlLAorMHhmYiwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywgMHg1ZSwgMHgwNCwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwKKzB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZDIsIDB4NGIsCisweDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDI1LCAweGU1LCAweDQyLCAweGM0LCAweDU0LCAweGYwLCAweGZmLCAweGU1LCAweDQzLCAweDU0LAorMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHg5MCwgMHg3MCwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg1ZSwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YSwgMHhmMCwKKzB4YTMsIDB4ZTUsIDB4NDgsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGMsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDIsIDB4ZjAsCisweGEzLCAweGU1LCAweDQzLCAweGYwLCAweGQyLCAweDYwLCAweDIyLCAweGU1LCAweDQ3LCAweDYwLCAweDEwLCAweDI0LCAweGMwLCAweDcwLCAweDAzLCAweDEyLAorMHgxNiwgMHgyOSwgMHgxMiwgMHgxMywgMHg4YywgMHhjMiwgMHhhZiwgMHhjMiwgMHgwNCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwNCwKKzB4MTQsIDB4ZTAsIDB4NTQsIDB4MGUsIDB4NjAsIDB4MDQsIDB4ZDIsIDB4MTgsIDB4ODAsIDB4MDgsIDB4ZTUsIDB4NGUsIDB4NDUsIDB4NGYsIDB4MjQsIDB4ZmYsCisweDkyLCAweDE4LCAweGQyLCAweGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweGEyLCAweGU0LCAweDkyLCAweDE5LCAweDc0LCAweDFlLCAweGYwLCAweGU1LAorMHg1ZiwgMHg1NCwgMHgwZiwgMHhmNSwgMHgyZCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgxMywgMHgzMCwgMHgxOCwgMHgwNSwgMHhlNSwgMHg1ZiwgMHgyMCwgMHhlNSwKKzB4MGIsIDB4MzAsIDB4MTksIDB4MTksIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MzAsIDB4ZmYsIDB4YmYsIDB4MzAsIDB4MTEsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsCisweDc1LCAweDI1LCAweDBjLCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDBmLCAweGU1LCAweDVmLCAweDMwLAorMHhlNiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwNCwgMHhkMiwgMHg2YywgMHhjMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwMywKKzB4NzAsIDB4MjEsIDB4MzAsIDB4NGIsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MTgsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDMsIDB4MzAsCisweDRjLCAweDExLCAweGMyLCAweDRjLCAweGU1LCAweDI1LCAweDcwLCAweDA1LCAweDc1LCAweDI1LCAweDA3LCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLAorMHg2YywgMHhkMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgxNCwgMHhlNSwgMHg0NCwgMHgyMCwgMHhlMywgMHgwYiwgMHhlNSwgMHgzYSwgMHg2NCwKKzB4MDIsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDQsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4OTAsIDB4NzAsIDB4NDYsIDB4ZTUsCisweDJkLCAweGYwLCAweDIwLCAweDY5LCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLCAweDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LAorMHg1ZSwgMHgyMCwgMHhlMSwgMHgwMiwgMHhiMiwgMHg2YSwgMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywKKzB4OTAsIDB4NzAsIDB4NDcsIDB4ZTUsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MjYsCisweDMwLCAweDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLAorMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwKKzB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzMsIDB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsCisweDI2LCAweDMwLCAweDZhLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLAorMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwKKzB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzUsIDB4OTIsIDB4NzQsIDB4MjAsIDB4NmQsIDB4MDQsIDB4YTIsIDB4NmMsCisweDgwLCAweDI2LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LAorMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwKKzB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsCisweDkwLCAweDEwLCAweDJmLCAweGYwLCAweDkwLCAweDEwLCAweDAzLCAweGUwLCAweGMzLCAweDk0LCAweDMwLCAweDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLAorMHg3NywgMHhhMiwgMHg3MCwgMHg5MiwgMHg3NiwgMHhlNSwgMHgyZSwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwKKzB4NzYsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NGMsIDB4OTAsIDB4MDIsIDB4MjksCisweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDQzLCAweGM0LCAweDU0LCAweDBmLCAweDE0LCAweDYwLCAweDE0LCAweDI0LCAweGZlLCAweDYwLCAweDIzLAorMHgyNCwgMHgwMywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgzMCwgMHg0NywgMHgwZiwgMHg4MCwgMHgwNywKKzB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MjAsIDB4NDcsIDB4MDYsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4NDQsIDB4MDEsIDB4ZjAsCisweDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDAyLAorMHgyOCwgMHhlMCwgMHg1NCwgMHhmZSwgMHg0ZiwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNywgMHg2MCwgMHgwZiwgMHhlNSwKKzB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDksIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTQsIDB4ZjUsCisweDI3LCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDJkLCAweDE0LCAweDYwLCAweDJlLAorMHgxNCwgMHg2MCwgMHgzNiwgMHgyNCwgMHhmYywgMHg2MCwgMHg1ZiwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxZiwgMHgyNCwgMHgwZSwgMHg3MCwgMHg2OSwgMHhlNSwKKzB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4YWYsIDB4ZjAsIDB4MjAsIDB4NDcsIDB4MDQsIDB4N2UsIDB4MDEsCisweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVmLCAweDZlLCAweDI0LCAweGZmLCAweDgwLCAweDQ1LCAweGEyLCAweDQ3LCAweDgwLCAweDQxLCAweGU1LCAweDQ2LAorMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgyNywgMHhjMywgMHg4MCwgMHgyNCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwgMHg1NCwgMHgzOCwKKzB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MjAsCisweDQ3LCAweDA0LCAweDdkLCAweDAxLCAweDgwLCAweDAyLCAweDdkLCAweDAwLCAweGVmLCAweDZkLCAweDRlLCAweDI0LCAweGZmLCAweDkyLCAweDM4LCAweGEyLAorMHg0NywgMHhiMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgxOSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKKzB4MzksIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4ODAsIDB4MDcsIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4OTIsIDB4MzksIDB4OTAsCisweDAyLCAweDI4LCAweGUwLCAweDU0LCAweGZjLCAweDQ1LCAweDI3LCAweGYwLCAweDkwLCAweDcwLCAweDljLCAweGU1LCAweDNhLCAweGYwLCAweGEzLCAweGU1LAorMHg0NywgMHhmMCwgMHg5MCwgMHg3MCwgMHg0MSwgMHhlNSwgMHgzYSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywKKzB4MDQsIDB4YWYsIDB4NDUsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4NDUsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsCisweDUwLCAweGQyLCAweDU5LCAweDIyLCAweDhmLCAweDU0LCAweGQyLCAweDU4LCAweDIyLCAweGU0LCAweGY1LCAweDYyLCAweGMyLCAweGFmLCAweGU1LCAweDUxLAorMHgxNCwgMHg2MCwgMHg0NiwgMHgxNCwgMHg2MCwgMHg2MiwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNywgMHgwMywgMHhkMiwgMHg1OSwgMHg3NSwKKzB4NTUsIDB4MDEsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MjIsIDB4OTAsIDB4MDQsCisweDM0LCAweGUwLCAweGI0LCAweDAyLCAweDFiLCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDE2LCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDExLCAweDdmLAorMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmMywgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMSwgMHg4MCwgMHg3MywKKzB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsIDB4MDMsIDB4ODAsIDB4NmEsIDB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsIDB4NzAsCisweDExLCAweDdmLCAweDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDc1LCAweDUxLCAweDAyLAorMHg4MCwgMHg1MSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwMiwgMHg4MCwgMHg0NiwgMHg5MCwgMHgwMiwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNiwgMHgzYiwgMHg5MCwKKzB4MDQsIDB4MzcsIDB4ZTAsIDB4NjQsIDB4MjIsIDB4NzAsIDB4MzMsIDB4OTAsIDB4MDEsIDB4OGEsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OTYsCisweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLAorMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg1NCwgMHhmOSwgMHhmMCwgMHg3NSwKKzB4NjIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4ODAsIDB4MDksIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsCisweDAzLCAweGY1LCAweDUxLCAweGU1LCAweDYyLCAweDYwLCAweDE1LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGFkLCAweDYyLAorMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg2MiwgMHhiNCwgMHgwMywgMHgwMiwgMHhkMiwgMHgwMywgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwKKzB4YWYsIDB4MzAsIDB4MDEsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YzIsIDB4MDEsIDB4N2QsCisweDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDUyLCAweDE0LCAweDYwLCAweDA5LCAweDA0LCAweDcwLCAweDRjLCAweDc1LCAweDUyLAorMHgwMSwgMHg3NSwgMHg1NSwgMHgwMywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg0NCwKKzB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsCisweDAzLCAweGYwLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LCAweDBjLCAweGYwLAorMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwYiwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwgMHgxMiwgMHgxNywKKzB4OGQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsCisweDJkLCAweGU0LCAweGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLAorMHgxOSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwKKzB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsCisweDIyLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDMwLCAweGUxLCAweDRkLCAweGMyLCAweGFmLCAweDkwLCAweDcwLCAweDI4LCAweGUwLCAweDkwLCAweDEwLAorMHgxYywgMHhmMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwKKzB4MWUsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4ZjUsIDB4NjIsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsCisweDEwLCAweDFjLCAweGUwLCAweDkwLCAweDcwLCAweDI4LCAweGYwLCAweDkwLCAweDEwLCAweDFkLCAweGUwLCAweDkwLCAweDcwLCAweDI5LCAweGYwLCAweDkwLAorMHgxMCwgMHgxZSwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhmMCwgMHgzMCwgMHg0YSwgMHgwNywgMHg5MCwgMHg3MCwgMHgyNCwgMHhlMCwgMHg0NCwgMHgwMSwKKzB4ZjAsIDB4YzIsIDB4MDUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTQsIDB4M2YsCisweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDEwLCAweDI4LCAweDAyLCAweDEwLCAweDMyLCAweDAyLCAweDEwLCAweDc4LCAweDAyLCAweDEyLCAweDY3LCAweDAyLAorMHgxMiwgMHg2OCwgMHgwMiwgMHgxMiwgMHg4NywgMHgwMiwgMHgxMiwgMHg4YywgMHgxMiwgMHgxMiwgMHg4OCwgMHgyMiwgMHgwMiwgMHgxNiwgMHg0OSwgMHgwMiwKKzB4MTcsIDB4MWYsIDB4MDIsIDB4MTMsIDB4NzcsIDB4MDIsIDB4MTIsIDB4OGQsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MTIsIDB4MTcsCisweGMxLCAweDIyLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUzLCAweDFiLCAweGU1LCAweDRjLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDQwLAorMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHg3NCwgMHgwOCwgMHhmMCwgMHhlNCwKKzB4OTAsIDB4MDEsIDB4YTcsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MWMsIDB4OTAsIDB4MDEsIDB4ODAsIDB4ZTAsIDB4YjQsCisweDAyLCAweDE1LCAweGEzLCAweGUwLCAweGI0LCAweDAxLCAweDEwLCAweDkwLCAweDAxLCAweDg0LCAweGUwLCAweGI0LCAweDgxLCAweDA5LCAweDkwLCAweDAxLAorMHg4YywgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHhkZCwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwKKzB4MTIsIDB4NjYsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MTIsIDB4MGEsIDB4YjYsIDB4MTAsCisweGI3LCAweDMxLCAweDEwLCAweGUwLCAweDUwLCAweDExLCAweDA0LCAweDUxLCAweDExLCAweDBkLCAweDUyLCAweDExLCAweDBkLCAweDUzLCAweDExLCAweDBkLAorMHg1NCwgMHgxMSwgMHg0ZSwgMHg1NSwgMHgxMSwgMHg3ZSwgMHg3MCwgMHgxMSwgMHhhOSwgMHg3MSwgMHgxMSwgMHhkNywgMHg3MiwgMHgxMiwgMHgxZCwgMHg3MywKKzB4MTIsIDB4M2UsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjYsIDB4MjAsIDB4MDIsIDB4MDMsIDB4MzAsIDB4MDMsIDB4MWQsIDB4N2QsIDB4MDIsIDB4YWYsCisweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LAorMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg4NSwgMHg1NiwgMHg0MSwgMHhkMiwgMHgwMiwgMHgyMiwKKzB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4OTAsIDB4NzAsIDB4MTEsCisweGUwLCAweDY0LCAweDA4LCAweDYwLCAweDA4LCAweGUwLCAweDY0LCAweDIwLCAweDYwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDc1LCAweDRlLCAweDAzLAorMHg3NSwgMHg0ZiwgMHgyMCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwKKzB4ZTAsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4NWQsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsCisweGY4LCAweGM2LCAweGVmLCAweGM2LCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZmLCAweDc0LCAweDQ4LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLAorMHhjNiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwKKzB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4ZTUsIDB4NDcsCisweDY0LCAweDA3LCAweDYwLCAweDBiLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA1LCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweDkwLAorMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHgzYSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgwOCwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywKKzB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4ZDIsIDB4MDQsIDB4MjIsIDB4OTAsIDB4NzAsCisweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY4LCAweGU2LCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LAorMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwKKzB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsCisweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLAorMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwKKzB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4OTAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YjQsIDB4NzAsIDB4MWUsIDB4YTMsIDB4ZTAsCisweGI0LCAweDMwLCAweDE5LCAweDkwLCAweDA1LCAweDA4LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGZkLCAweDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LAorMHhmYiwgMHhmMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlZCwgMHg1NCwgMHhmZSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwKKzB4NGYsIDB4NzUsIDB4M2EsIDB4ZmYsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsCisweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDRiLCAweDgwLCAweDQyLCAweDkwLCAweDcwLCAweDEwLAorMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg5MywgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwKKzB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4MmEsIDB4ODAsIDB4MjEsIDB4OTAsIDB4NzAsCisweDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDRhLCAweGQyLCAweDA1LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLAorMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwNywgMHg5MCwKKzB4NzAsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4MjIsIDB4ZTUsIDB4NTMsIDB4NzAsIDB4MWEsIDB4MzAsIDB4NjAsIDB4MDksIDB4YjIsCisweDRkLCAweDMwLCAweDRkLCAweDA0LCAweDA1LCAweDQ2LCAweGMyLCAweDA0LCAweGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLAorMHgxNSwgMHg0ZiwgMHg3MCwgMHgwMiwgMHgxNSwgMHg0ZSwgMHgyMiwgMHgyMiwgMHhjMiwgMHg0MiwgMHhkMywgMHgyMiwgMHgyMiwgMHhjMiwgMHg0YiwgMHhjMiwKKzB4NGMsIDB4ZTUsIDB4NDQsIDB4MTIsIDB4MGEsIDB4YjYsIDB4MTIsIDB4YWYsIDB4MDAsIDB4MTMsIDB4NDIsIDB4MDQsIDB4MTMsIDB4M2UsIDB4MDgsIDB4MTMsCisweDE5LCAweDEwLCAweDEyLCAweGMzLCAweDIwLCAweDEyLCAweGUzLCAweDYwLCAweDEyLCAweGY0LCAweGEwLCAweDAwLCAweDAwLCAweDEzLCAweDQ0LCAweDg1LAorMHg0OCwgMHg0MywgMHg4NSwgMHg0YSwgMHg0MiwgMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKKzB4NDQsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDgsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsCisweDQyLCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDY2LCAweDUzLCAweDQzLAorMHgwZiwgMHg4MCwgMHg2MSwgMHg4NSwgMHg0OSwgMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwKKzB4NzAsIDB4NTIsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsIDB4YzQsIDB4NTQsIDB4MGYsCisweGY1LCAweDQyLCAweGU1LCAweDRkLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDM1LCAweGU1LAorMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgxMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgyYiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNCwgMHgwNiwgMHg1MywgMHg1ZSwKKzB4ZmIsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDUsIDB4MDYsIDB4NDMsIDB4NWUsIDB4MDQsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsCisweDQ3LCAweGI0LCAweDA2LCAweDEwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDMwLCAweGY1LCAweDQzLCAweDgwLCAweDA2LCAweGQyLCAweDRiLAorMHg4MCwgMHgwMiwgMHhkMiwgMHg0YywgMHhlNCwgMHhmNSwgMHgyNSwgMHhlNSwgMHg0MiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmZiwgMHhlNSwgMHg0MywgMHg1NCwKKzB4MGYsIDB4NGYsIDB4ZjUsIDB4NWYsIDB4OTAsIDB4NzAsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NWUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGEsIDB4ZjAsCisweGEzLCAweGU1LCAweDQ4LCAweGYwLCAweGEzLCAweGU1LCAweDRjLCAweGYwLCAweGEzLCAweGU1LCAweDQ0LCAweGYwLCAweGEzLCAweGU1LCAweDQyLCAweGYwLAorMHhhMywgMHhlNSwgMHg0MywgMHhmMCwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxMCwgMHgyNCwgMHhjMCwgMHg3MCwgMHgwMywgMHgxMiwKKzB4MTYsIDB4MjksIDB4MTIsIDB4MTMsIDB4OGMsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4OTAsIDB4MDQsCisweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDE4LCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LCAweDRmLCAweDI0LCAweGZmLAorMHg5MiwgMHgxOCwgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxOSwgMHg3NCwgMHgxZSwgMHhmMCwgMHhlNSwKKzB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MTgsIDB4MDUsIDB4ZTUsIDB4NWYsIDB4MjAsIDB4ZTUsCisweDBiLCAweDMwLCAweDE5LCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LCAweDI1LCAweDcwLCAweDA1LAorMHg3NSwgMHgyNSwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwgMHhlNSwgMHg1ZiwgMHgzMCwKKzB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDMsCisweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDI1LCAweDcwLCAweDAzLCAweDMwLAorMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwNywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwKKzB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MTQsIDB4ZTUsIDB4NDQsIDB4MjAsIDB4ZTMsIDB4MGIsIDB4ZTUsIDB4M2EsIDB4NjQsCisweDAyLCAweDYwLCAweDA1LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDA0LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDkwLCAweDcwLCAweDQ2LCAweGU1LAorMHgyZCwgMHhmMCwgMHgyMCwgMHg2OSwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwMiwgMHhiMiwgMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwKKzB4NWUsIDB4MjAsIDB4ZTEsIDB4MDIsIDB4YjIsIDB4NmEsIDB4MjAsIDB4NmQsIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsCisweDkwLCAweDcwLCAweDQ3LCAweGU1LCAweDJkLCAweGYwLCAweDc1LCAweDJlLCAweDQwLCAweDIwLCAweDY5LCAweDA0LCAweGEyLCAweDY4LCAweDgwLCAweDI2LAorMHgzMCwgMHg2OCwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwKKzB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsCisweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDczLCAweDkyLCAweDcyLCAweDIwLCAweDZiLCAweDA0LCAweGEyLCAweDZhLCAweDgwLAorMHgyNiwgMHgzMCwgMHg2YSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwNCwgMHg3ZiwKKzB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsCisweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDc1LCAweDkyLCAweDc0LCAweDIwLCAweDZkLCAweDA0LCAweGEyLCAweDZjLAorMHg4MCwgMHgyNiwgMHgzMCwgMHg2YywgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwNCwKKzB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsCisweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDcxLCAweDkyLCAweDcwLCAweDkwLCAweDEwLCAweDAwLCAweGUwLAorMHg5MCwgMHgxMCwgMHgyZiwgMHhmMCwgMHg5MCwgMHgxMCwgMHgwMywgMHhlMCwgMHhjMywgMHg5NCwgMHgzMCwgMHg0MCwgMHgxNCwgMHhhMiwgMHg3MSwgMHg5MiwKKzB4NzcsIDB4YTIsIDB4NzAsIDB4OTIsIDB4NzYsIDB4ZTUsIDB4MmUsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4MmUsIDB4YzIsIDB4NzcsIDB4ZDIsCisweDc2LCAweDkwLCAweDEwLCAweDJmLCAweGU1LCAweDJlLCAweGYwLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDRjLCAweDkwLCAweDAyLCAweDI5LAorMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg0MywgMHhjNCwgMHg1NCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxNCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgyMywKKzB4MjQsIDB4MDMsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MzAsIDB4NDcsIDB4MGYsIDB4ODAsIDB4MDcsCisweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDIwLCAweDQ3LCAweDA2LCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDE2LCAweDE4LCAweDQ0LCAweDAxLCAweGYwLAorMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgwMiwKKzB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4NGYsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MGYsIDB4ZTUsCisweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA5LCAweGU1LCAweDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDAzLCAweDAyLCAweDE2LCAweDE4LCAweGU0LCAweGY1LAorMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmYywgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyZCwgMHgxNCwgMHg2MCwgMHgyZSwKKzB4MTQsIDB4NjAsIDB4MzYsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NWYsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MWYsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjksIDB4ZTUsCisweDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLAorMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHgyNCwgMHhmZiwgMHg4MCwgMHg0NSwgMHhhMiwgMHg0NywgMHg4MCwgMHg0MSwgMHhlNSwgMHg0NiwKKzB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MjcsIDB4YzMsIDB4ODAsIDB4MjQsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsCisweGMzLCAweDk0LCAweDMwLCAweDUwLCAweDA2LCAweDdlLCAweDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweDIwLAorMHg0NywgMHgwNCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwgMHgzOCwgMHhhMiwKKzB4NDcsIDB4YjMsIDB4OTIsIDB4MzksIDB4ODAsIDB4MTksIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsCisweDM5LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDgwLCAweDA3LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDkyLCAweDM5LCAweDkwLAorMHgwMiwgMHgyOCwgMHhlMCwgMHg1NCwgMHhmYywgMHg0NSwgMHgyNywgMHhmMCwgMHg5MCwgMHg3MCwgMHg5YywgMHhlNSwgMHgzYSwgMHhmMCwgMHhhMywgMHhlNSwKKzB4NDcsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4NDEsIDB4ZTUsIDB4M2EsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsCisweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LCAweGZmLCAweDkwLCAweDAyLCAweDI4LCAweGVmLCAweGYwLCAweDIyLCAweDhmLAorMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwgMHgyMiwgMHhlNCwgMHhmNSwgMHg2MiwgMHhjMiwgMHhhZiwgMHhlNSwgMHg1MSwKKzB4MTQsIDB4NjAsIDB4NDYsIDB4MTQsIDB4NjAsIDB4NjIsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTcsIDB4MDMsIDB4ZDIsIDB4NTksIDB4NzUsCisweDU1LCAweDAxLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGEzLCAweGUwLCAweDIwLCAweGU3LCAweDIyLCAweDkwLCAweDA0LAorMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYiwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxNiwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxMSwgMHg3ZiwKKzB4MjAsIDB4MTIsIDB4MTYsIDB4M2YsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDEsIDB4ODAsIDB4NzMsCisweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDYyLCAweDAzLCAweDgwLCAweDZhLCAweDkwLCAweDEyLCAweDAwLCAweGUwLCAweDU0LCAweDAzLCAweDcwLAorMHgxMSwgMHg3ZiwgMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMiwKKzB4ODAsIDB4NTEsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDIsIDB4ODAsIDB4NDYsIDB4OTAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTYsIDB4M2IsIDB4OTAsCisweDA0LCAweDM3LCAweGUwLCAweDY0LCAweDIyLCAweDcwLCAweDMzLCAweDkwLCAweDAxLCAweDhhLCAweDc0LCAweDdlLCAweGYwLCAweDkwLCAweDAxLCAweDk2LAorMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwKKzB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZmEsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NTQsIDB4ZjksIDB4ZjAsIDB4NzUsCisweDYyLCAweDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDYyLAorMHgwMywgMHhmNSwgMHg1MSwgMHhlNSwgMHg2MiwgMHg2MCwgMHgxNSwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHhhZCwgMHg2MiwKKzB4YWYsIDB4NDAsIDB4MTIsIDB4MTcsIDB4OGQsIDB4ZTUsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCisweGFmLCAweDMwLCAweDAxLCAweDEyLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLAorMHgwMiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwNCwgMHg3MCwgMHg0YywgMHg3NSwgMHg1MiwKKzB4MDEsIDB4NzUsIDB4NTUsIDB4MDMsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NDQsCisweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LAorMHgwMywgMHhmMCwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwYywgMHhmMCwKKzB4ZTQsIDB4ZjUsIDB4NTIsIDB4ZjUsIDB4NTUsIDB4MzAsIDB4MDIsIDB4MGIsIDB4YzIsIDB4MDIsIDB4N2QsIDB4MDEsIDB4YWYsIDB4NDEsIDB4MTIsIDB4MTcsCisweDhkLCAweDgwLCAweDAyLCAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweGVmLCAweGY0LCAweDYwLAorMHgyZCwgMHhlNCwgMHhmZSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlMCwgMHhiNCwgMHhmZiwKKzB4MTksIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4NzQsIDB4MWMsIDB4MmUsCisweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVkLCAweGYwLCAweDIyLCAweDBlLCAweGJlLCAweDA0LCAweGQ1LCAweDIyLCAweDIyLAorMHgyMiwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHg0ZCwgMHhjMiwgMHhhZiwgMHg5MCwgMHg3MCwgMHgyOCwgMHhlMCwgMHg5MCwgMHgxMCwKKzB4MWMsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4OTAsIDB4MTAsCisweDFlLCAweGYwLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweGY1LCAweDYyLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDIwLCAweGUxLCAweGYzLCAweDkwLAorMHgxMCwgMHgxYywgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOCwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhmMCwgMHg5MCwKKzB4MTAsIDB4MWUsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZjAsIDB4MzAsIDB4NGEsIDB4MDcsIDB4OTAsIDB4NzAsIDB4MjQsIDB4ZTAsIDB4NDQsIDB4MDEsCisweGYwLCAweGMyLCAweDA1LCAweGQyLCAweGFmLCAweDIyLCAweDIyLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDliLCAweGMwLCB9IDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGVhcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9sZWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxOGMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGVhcC5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWxlYXAuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKyNpZm5kZWYgX19MRUFQX0hfXworI2RlZmluZSBfX0xFQVBfSF9fCisKKy8vIE1lc3NhZ2VzIGZvciBBc3NvY2lhdGUgc3RhdGUgbWFjaGluZQorI2RlZmluZSBMRUFQX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAgICAgICAzMAorCisjZGVmaW5lIExFQVBfTVNHX1JFUVVFU1RfSURFTlRJVFkgICAgICAgICAgIDMxCisjZGVmaW5lIExFQVBfTVNHX1JFUVVFU1RfTEVBUCAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIExFQVBfTVNHX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIExFQVBfTVNHX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIExFQVBfTVNHX1JFU1BPTlNFX0xFQVAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIExFQVBfTVNHX0VBUE9MS0VZICAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIExFQVBfTVNHX1VOS05PV04gICAgICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIExFQVBfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4CisvLyEgYXNzb2Mgc3RhdGUtbWFjaGluZSBzdGF0ZXMKKyNkZWZpbmUgTEVBUF9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBMRUFQX1dBSVRfSURFTlRJVFlfUkVRVUVTVCAgICAgICAgICAxCisjZGVmaW5lIExFQVBfV0FJVF9DSEFOTExFTkdFX1JFUVVFU1QgICAgICAgIDIKKyNkZWZpbmUgTEVBUF9XQUlUX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBMRUFQX1dBSVRfQ0hBTkxMRU5HRV9SRVNQT05TRSAgICAgICA0CisjZGVmaW5lIExFQVBfV0FJVF9FQVBPTEtFWSAgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBMRUFQX1JFQVNPTl9JTlZBTElEX0FVVEggICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTEVBUF9SRUFTT05fQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIExFQVBfUkVBU09OX0NIQUxMRU5HRV9GUk9NX0FQX0ZBSUxFRCAgICAgICAgMHgwMworI2RlZmluZSBMRUFQX1JFQVNPTl9DSEFMTEVOR0VfVE9fQVBfRkFJTEVEICAgICAgICAgIDB4MDQKKworI2RlZmluZSBDSVNDT19BdXRoTW9kZUxFQVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQ0lTQ09fQXV0aE1vZGVMRUFQTm9uZSAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExFQVBfQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAwMDAKKyNkZWZpbmUgTEVBUF9DSEFMTEVOR0VfUkVTUE9OU0VfTEVOR1RIICAgICAgICAgICAgICAyNAorI2RlZmluZSBMRUFQX0NIQUxMRU5HRV9SRVFVRVNUX0xFTkdUSCAgICAgICAgICAgICAgIDgKKwordHlwZWRlZiBzdHJ1Y3QgX0xFQVBfRUFQT0xfSEVBREVSXyB7CisgICAgVUNIQVIgICAgICAgVmVyc2lvbjsKKyAgICBVQ0hBUiAgICAgICBUeXBlOworICAgIFVDSEFSICAgICAgIExlbmd0aFsyXTsKK30gTEVBUF9FQVBPTF9IRUFERVIsICpQTEVBUF9FQVBPTF9IRUFERVI7CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0VBUE9MX1BBQ0tFVF8geworICAgIFVDSEFSICAgICAgIENvZGU7CisgICAgVUNIQVIgICAgICAgSWRlbnRpZmllcjsKKyAgICBVQ0hBUiAgICAgICBMZW5ndGhbMl07CisgICAgVUNIQVIgICAgICAgVHlwZTsKK30gTEVBUF9FQVBPTF9QQUNLRVQsICpQTEVBUF9FQVBPTF9QQUNLRVQ7CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0VBUF9DT05URU5UU18geworICAgIFVDSEFSICAgICAgIFZlcnNpb247CisgICAgVUNIQVIgICAgICAgUmVzZXJ2ZWQ7CisgICAgVUNIQVIgICAgICAgTGVuZ3RoOworfSBMRUFQX0VBUF9DT05URU5UUywgKlBMRUFQX0VBUF9DT05URU5UUzsKKworLyoqKiBFQVBPTCBrZXkgKioqLwordHlwZWRlZiBzdHJ1Y3QgX0VBUE9MX0tFWV9IRUFERVJfIHsKKyAgICBVQ0hBUiAgICAgICBUeXBlOworICAgIFVDSEFSICAgICAgIExlbmd0aFsyXTsKKyAgICBVQ0hBUiAgICAgICBDb3VudGVyWzhdOworICAgIFVDSEFSICAgICAgIElWWzE2XTsKKyAgICBVQ0hBUiAgICAgICBJbmRleDsKKyAgICBVQ0hBUiAgICAgICBTaWduYXR1cmVbMTZdOworfSBFQVBPTF9LRVlfSEVBREVSLCAqUEVBUE9MX0tFWV9IRUFERVI7CisKK0JPT0xFQU4gTGVhcE1zZ1R5cGVTdWJzdCgKKyAgICBJTiAgVUNIQVIgICBFQVBUeXBlLAorICAgIE9VVCBVTE9ORyAgICpNc2dUeXBlKTsKKworVk9JRCBMZWFwTWFjaGluZVBlcmZvcm1BY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gU1RBVEVfTUFDSElORSAgICAqUywKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBMZWFwTWFjSGVhZGVySW5pdCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisgICAgSU4gIE9VVCBQSEVBREVSXzgwMl8xMSAgcEhkcjgwMjExLAorICAgIElOICBVQ0hBUiAgICAgICAgICAgICAgIHdlcCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBwQWRkcjMpOworCitWT0lEIExlYXBTdGFydEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBMZWFwSWRlbnRpdHlBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgTGVhcFBlZXJDaGFsbGVuZ2VBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgSGFzaFB3ZCgKKyAgICBJTiAgUFVDSEFSICBwd2QsCisgICAgSU4gIElOVCAgICAgcHdkbGVuLAorICAgIE9VVCBQVUNIQVIgIGhhc2gpOworCitWT0lEIFBlZXJDaGFsbGVuZ2VSZXNwb25zZSgKKyAgICBJTiAgUFVDSEFSICBzekNoYWxsZW5nZSwKKyAgICBJTiAgUFVDSEFSICBzbWJQYXNzd2QsCisgICAgT1VUIFBVQ0hBUiAgc3pSZXNwb25zZSk7CisKK1ZPSUQgUGFyaXR5S2V5KAorICAgIE9VVCBQVUNIQVIgIHN6T3V0LAorICAgIElOICBQVUNIQVIgIHN6SW4pOworCitWT0lEIERlc0tleSgKKyAgICBPVVQgVUxPTkcgICBrWzE2XVsyXSwKKyAgICBJTiAgUFVDSEFSICBrZXksCisgICAgSU4gIElOVCAgICAgZGVjcnlwdCk7CisKK1ZPSUQgRGVzKAorICAgIElOICBVTE9ORyAgIGtzWzE2XVsyXSwKKyAgICBPVVQgVUNIQVIgICBibG9ja1s4XSk7CisKK1ZPSUQgRGVzRW5jcnlwdCgKKyAgICBJTiAgUFVDSEFSICBzekNsZWFyLAorICAgIElOICBQVUNIQVIgIHN6S2V5LAorICAgIE9VVCBQVUNIQVIgIHN6T3V0KTsKKworVk9JRCBMZWFwTmV0d29ya0NoYWxsZW5nZUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBMZWFwTmV0d29ya0NoYWxsZW5nZVJlc3BvbnNlKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIEhhc2hwd2RIYXNoKAorICAgIElOICBQVUNIQVIgIGhhc2gsCisgICAgSU4gIFBVQ0hBUiAgaGFzaGhhc2gpOworCitWT0lEIFByb2Nlc3NTZXNzaW9uS2V5KAorICAgIE9VVCBQVUNIQVIgIFNlc3Npb25LZXksCisgICAgSU4gIFBVQ0hBUiAgaGFzaDIsCisgICAgSU4gIFBVQ0hBUiAgQ2hhbGxlbmdlVG9SYWRpdXMsCisgICAgSU4gIFBVQ0hBUiAgQ2hhbGxlbmdlUmVzcG9uc2VGcm9tUmFkaXVzLAorICAgIElOICBQVUNIQVIgIENoYWxsZW5nZUZyb21SYWRpdXMsCisgICAgSU4gIFBVQ0hBUiAgQ2hhbGxlbmdlUmVzcG9uc2VUb1JhZGl1cyk7CisKK1ZPSUQgTGVhcEVhcG9sS2V5QWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIFJvZ3VlQXBUYWJsZUluaXQoCisgICAgSU4gUk9HVUVBUF9UQUJMRSAgICAqVGFiKTsKKworVUxPTkcgUm9ndWVBcFRhYmxlU2VhcmNoKAorICAgIElOIFJPR1VFQVBfVEFCTEUgICAgKlRhYiwKKyAgICBJTiBQVUNIQVIgICAgICAgICAgIHBBZGRyKTsKKworVk9JRCBSb2d1ZUFwRW50cnlTZXQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgT1VUIFJPR1VFQVBfRU5UUlkgICAqcFJvZ3VlQXAsCisgICAgSU4gUFVDSEFSICAgICAgICAgICBwQWRkciwKKyAgICBJTiBVQ0hBUiAgICAgICAgICAgIEZhaWxlQ29kZSk7CisKK1VMT05HIFJvZ3VlQXBUYWJsZVNldEVudHJ5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIE9VVCBST0dVRUFQX1RBQkxFICAqVGFiLAorICAgIElOIFBVQ0hBUiAgICAgICAgICAgcEFkZHIsCisgICAgSU4gVUNIQVIgICAgICAgICAgICBGYWlsZUNvZGUpOworCitWT0lEIFJvZ3VlQXBUYWJsZURlbGV0ZUVudHJ5KAorICAgIElOIE9VVCBST0dVRUFQX1RBQkxFICpUYWIsCisgICAgSU4gUFVDSEFSICAgICAgICAgIHBBZGRyKTsKKworVk9JRCBMZWFwQXV0aFRpbWVvdXQoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBMZWFwU2VuZFJvZ3VlQVBSZXBvcnQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitCT09MRUFOIENDS01Bc3NvY1JzcFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBWT0lEICAgICAgICAgICAgICpNc2csCisgICAgSU4gVUxPTkcgICAgICAgICAgICBNc2dMZW4pOworCisjZW5kaWYgIC8vIF9fTEVBUF9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGlua19saXN0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xpbmtfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTIxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xpbmtfbGlzdC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTElOS19MSVNUX0hfXworI2RlZmluZSBfX0xJTktfTElTVF9IX18KKwordHlwZWRlZiBzdHJ1Y3QgX0xJU1RfRU5UUlkKK3sKKwlzdHJ1Y3QgX0xJU1RfRU5UUlkgKnBOZXh0OworfSBMSVNUX0VOVFJZLCAqUExJU1RfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IF9MSVNUX0hFQURSCit7CisJUExJU1RfRU5UUlkgcEhlYWQ7CisJUExJU1RfRU5UUlkgcFRhaWw7CisJVUNIQVIgc2l6ZTsKK30gTElTVF9IRUFERVIsICpQTElTVF9IRUFERVI7CisKK3N0YXRpYyBpbmxpbmUgVk9JRCBpbml0TGlzdCgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QpCit7CisJcExpc3QtPnBIZWFkID0gcExpc3QtPnBUYWlsID0gTlVMTDsKKwlwTGlzdC0+c2l6ZSA9IDA7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgaW5zZXJ0VGFpbExpc3QoCisJSU4gUExJU1RfSEVBREVSIHBMaXN0LAorCUlOIFBMSVNUX0VOVFJZIHBFbnRyeSkKK3sKKwlwRW50cnktPnBOZXh0ID0gTlVMTDsKKwlpZiAocExpc3QtPnBUYWlsKQorCQlwTGlzdC0+cFRhaWwtPnBOZXh0ID0gcEVudHJ5OworCWVsc2UKKwkJcExpc3QtPnBIZWFkID0gcEVudHJ5OworCXBMaXN0LT5wVGFpbCA9IHBFbnRyeTsKKwlwTGlzdC0+c2l6ZSsrOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIFBMSVNUX0VOVFJZIHJlbW92ZUhlYWRMaXN0KAorCUlOIFBMSVNUX0hFQURFUiBwTGlzdCkKK3sKKwlQTElTVF9FTlRSWSBwTmV4dDsKKwlQTElTVF9FTlRSWSBwRW50cnk7CisKKwlwRW50cnkgPSBwTGlzdC0+cEhlYWQ7CisJaWYgKHBMaXN0LT5wSGVhZCAhPSBOVUxMKQorCXsKKwkJcE5leHQgPSBwTGlzdC0+cEhlYWQtPnBOZXh0OworCQlwTGlzdC0+cEhlYWQgPSBwTmV4dDsKKwkJaWYgKHBOZXh0ID09IE5VTEwpCisJCQlwTGlzdC0+cFRhaWwgPSBOVUxMOworCQlwTGlzdC0+c2l6ZS0tOworCX0KKwlyZXR1cm4gcEVudHJ5OworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRMaXN0U2l6ZSgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QpCit7CisJcmV0dXJuIHBMaXN0LT5zaXplOworfQorCitzdGF0aWMgaW5saW5lIFBMSVNUX0VOVFJZIGRlbEVudHJ5TGlzdCgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QsCisJSU4gUExJU1RfRU5UUlkgcEVudHJ5KQoreworCVBMSVNUX0VOVFJZIHBDdXJFbnRyeTsKKwlQTElTVF9FTlRSWSBwUHJ2RW50cnk7CisKKwlpZihwTGlzdC0+cEhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZihwRW50cnkgPT0gcExpc3QtPnBIZWFkKQorCXsKKwkJcEN1ckVudHJ5ID0gcExpc3QtPnBIZWFkOworCQlwTGlzdC0+cEhlYWQgPSBwQ3VyRW50cnktPnBOZXh0OworCisJCWlmKHBMaXN0LT5wSGVhZCA9PSBOVUxMKQorCQkJcExpc3QtPnBUYWlsID0gTlVMTDsKKworCQlwTGlzdC0+c2l6ZS0tOworCQlyZXR1cm4gcEN1ckVudHJ5OworCX0KKworCXBQcnZFbnRyeSA9IHBMaXN0LT5wSGVhZDsKKwlwQ3VyRW50cnkgPSBwUHJ2RW50cnktPnBOZXh0OworCXdoaWxlKHBDdXJFbnRyeSAhPSBOVUxMKQorCXsKKwkJaWYgKHBFbnRyeSA9PSBwQ3VyRW50cnkpCisJCXsKKwkJCXBQcnZFbnRyeS0+cE5leHQgPSBwQ3VyRW50cnktPnBOZXh0OworCisJCQlpZihwRW50cnkgPT0gcExpc3QtPnBUYWlsKQorCQkJCXBMaXN0LT5wVGFpbCA9IHBQcnZFbnRyeTsKKworCQkJcExpc3QtPnNpemUtLTsKKwkJCWJyZWFrOworCQl9CisJCXBQcnZFbnRyeSA9IHBDdXJFbnRyeTsKKwkJcEN1ckVudHJ5ID0gcFBydkVudHJ5LT5wTmV4dDsKKwl9CisKKwlyZXR1cm4gcEN1ckVudHJ5OworfQorCisjZW5kaWYgLy8gX19fTElOS19MSVNUX0hfXyAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWU1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaApAQCAtMCwwICsxLDQyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTUQ0X0hfXworI2RlZmluZSBfX01ENF9IX18KKworLyogTUQ0IGNvbnRleHQuICovCit0eXBlZGVmCXN0cnVjdAlfTUQ0X0NUWF8JeworCVVMT05HCXN0YXRlWzRdOyAgICAgICAgLyogc3RhdGUgKEFCQ0QpICovCisJVUxPTkcJY291bnRbMl07ICAgICAgICAvKiBudW1iZXIgb2YgYml0cywgbW9kdWxvIDJeNjQgKGxzYiBmaXJzdCkgKi8KKwlVQ0hBUglidWZmZXJbNjRdOyAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLworfQlNRDRfQ1RYOworCitWT0lEIE1ENEluaXQgKE1ENF9DVFggKik7CitWT0lEIE1ENFVwZGF0ZSAoTUQ0X0NUWCAqLCBQVUNIQVIsIFVJTlQpOworVk9JRCBNRDRGaW5hbCAoVUNIQVIgWzE2XSwgTUQ0X0NUWCAqKTsKKworI2VuZGlmIC8vX19NRDRfSF9fClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1ZGIxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ1LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJbWQ1LmgKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQkJTW9kaWZpY2F0aW9uIGxvZ3MKKwlqYW4JCQkxMC0yOC0wMwkJSW5pdGlhbAorCVJpdGEgICAgCTExLTIzLTA0CQlNb2RpZnkgTUQ1IGFuZCBTSEEtMQorKi8KKworI2lmbmRlZgl1aW50OAorI2RlZmluZQl1aW50OCAgdW5zaWduZWQJY2hhcgorI2VuZGlmCisKKyNpZm5kZWYJdWludDMyCisjZGVmaW5lCXVpbnQzMiB1bnNpZ25lZAlsb25nIGludAorI2VuZGlmCisKKworI2lmbmRlZglfX01ENV9IX18KKyNkZWZpbmUJX19NRDVfSF9fCisKKyNkZWZpbmUgTUQ1X01BQ19MRU4gMTYKKwordHlwZWRlZiBzdHJ1Y3QgX01ENV9DVFggeworICAgIFVJTlQzMiAgIEJ1Zls0XTsgICAgICAgICAgICAgLy8gYnVmZmVycyBvZiBmb3VyIHN0YXRlcworCVVDSEFSICAgSW5wdXRbNjRdOyAgICAgICAgICAvLyBpbnB1dCBtZXNzYWdlCisJVUlOVDMyICAgTGVuSW5CaXRDb3VudFsyXTsgICAvLyBsZW5ndGggY291bnRlciBmb3IgaW5wdXQgbWVzc2FnZSwgMCB1cCB0byA2NCBiaXRzCit9ICAgTUQ1X0NUWDsKKworVk9JRCBNRDVJbml0KE1ENV9DVFggKnBDdHgpOworVk9JRCBNRDVVcGRhdGUoTUQ1X0NUWCAqcEN0eCwgVUNIQVIgKnBEYXRhLCBVSU5UMzIgTGVuSW5CeXRlcyk7CitWT0lEIE1ENUZpbmFsKFVDSEFSIERpZ2VzdFsxNl0sIE1ENV9DVFggKnBDdHgpOworVk9JRCBNRDVUcmFuc2Zvcm0oVUlOVDMyIEJ1Zls0XSwgVUlOVDMyIE1lc1sxNl0pOworCit2b2lkIG1kNV9tYWModTggKmtleSwgc2l6ZV90IGtleV9sZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptYWMpOwordm9pZCBobWFjX21kNSh1OCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1hYyk7CisKKy8vCisvLyBTSEEgY29udGV4dAorLy8KK3R5cGVkZWYJc3RydWN0IF9TSEFfQ1RYCit7CisJVUlOVDMyICAgQnVmWzVdOyAgICAgICAgICAgICAvLyBidWZmZXJzIG9mIGZpdmUgc3RhdGVzCisJVUNIQVIgICBJbnB1dFs4MF07ICAgICAgICAgIC8vIGlucHV0IG1lc3NhZ2UKKwlVSU5UMzIgICBMZW5JbkJpdENvdW50WzJdOyAgIC8vIGxlbmd0aCBjb3VudGVyIGZvciBpbnB1dCBtZXNzYWdlLCAwIHVwIHRvIDY0IGJpdHMKKworfQlTSEFfQ1RYOworCitWT0lEIFNIQUluaXQoU0hBX0NUWCAqcEN0eCk7CitVQ0hBUiBTSEFVcGRhdGUoU0hBX0NUWCAqcEN0eCwgVUNIQVIgKnBEYXRhLCBVSU5UMzIgTGVuSW5CeXRlcyk7CitWT0lEIFNIQUZpbmFsKFNIQV9DVFggKnBDdHgsIFVDSEFSIERpZ2VzdFsyMF0pOworVk9JRCBTSEFUcmFuc2Zvcm0oVUlOVDMyIEJ1Zls1XSwgVUlOVDMyIE1lc1syMF0pOworCisjZGVmaW5lIFNIQV9ESUdFU1RfTEVOIDIwCisjZW5kaWYgLy8gX19NRDVfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9BRVNfSAorI2RlZmluZQlfQUVTX0gKKwordHlwZWRlZglzdHJ1Y3QKK3sKKwl1aW50MzIgZXJrWzY0XTsJCS8qIGVuY3J5cHRpb24gcm91bmQJa2V5cyAqLworCXVpbnQzMiBkcmtbNjRdOwkJLyogZGVjcnlwdGlvbiByb3VuZAlrZXlzICovCisJaW50CW5yOwkJCQkvKiBudW1iZXIgb2Ygcm91bmRzCSovCit9CithZXNfY29udGV4dDsKKworaW50CSBydG1wX2Flc19zZXRfa2V5KCBhZXNfY29udGV4dCAqY3R4LAl1aW50OCAqa2V5LAlpbnQJbmJpdHMgKTsKK3ZvaWQgcnRtcF9hZXNfZW5jcnlwdCggYWVzX2NvbnRleHQgKmN0eCwJdWludDggaW5wdXRbMTZdLCB1aW50OCBvdXRwdXRbMTZdICk7Cit2b2lkIHJ0bXBfYWVzX2RlY3J5cHQoIGFlc19jb250ZXh0ICpjdHgsCXVpbnQ4IGlucHV0WzE2XSwgdWludDggb3V0cHV0WzE2XSApOworCit2b2lkIEYoY2hhciAqcGFzc3dvcmQsIHVuc2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCBpbnQgaXRlcmF0aW9ucywgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOworaW50IFBhc3N3b3JkSGFzaChjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgY2hhciAqc3NpZCwgaW50IHNzaWRsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCk7CisKKyNlbmRpZiAvKiBhZXMuaAkqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21sbWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWxtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21sbWUuaApAQCAtMCwwICsxLDE0NjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJbWxtZS5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZwkyMDAzLTA4LTI4CQlDcmVhdGVkCisJSm9obiBDaGFuZyAgMjAwNC0wOS0wNiAgICAgIG1vZGlmaWVkIGZvciBSVDI2MDAKKworKi8KKyNpZm5kZWYgX19NTE1FX0hfXworI2RlZmluZSBfX01MTUVfSF9fCisKKy8vZXh0ZXJuIFVDSEFSIEJST0FEQ0FTVF9BRERSW107CisKKy8vIG1heGltdW0gc3VwcG9ydGVkIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gLQorLy8gRVNTLCBJQlNTLCBQcml2YWN5LCBTaG9ydCBQcmVhbWJsZSwgU3BlY3RydW0gbWdtdCwgU2hvcnQgU2xvdAorI2RlZmluZSBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPICAgMHgwNTMzCisKKyNkZWZpbmUgRU5EX09GX0FSR1MgICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIExGU1JfTUFTSyAgICAgICAgICAgICAgICAgICAweDgwMDAwMDU3CisjZGVmaW5lIE1MTUVfVEFTS19FWEVDX0lOVFYgICAgICAgICAxMDAvKjIwMCovICAgICAgIC8vCisjZGVmaW5lIExFQURfVElNRSAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1MTUVfVEFTS19FWEVDX01VTFRJUExFICAgICAgIDEwICAvKjUqLyAgICAgICAvLyBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIE1MTUVfVEFTS19FWEVDX0lOVFYgPSAxIHNlYworI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UViAgICAgICAgIAkxMDAgICAgICAgLy8gMC4xIHNlYworLy8jZGVmaW5lIFRCVFRfUFJFTE9BRF9USU1FICAgICAgICAgMzg0ICAgICAgICAvLyB1c2VjLiBMb21nUHJlYW1ibGUgKyAyNC1ieXRlIGF0IDFNYnBzCisKKy8vIFRoZSBkZWZpbml0aW9uIG9mIFJhZGFyIGRldGVjdGlvbiBkdXJhdGlvbiByZWdpb24KKyNkZWZpbmUgQ0UJCTAKKyNkZWZpbmUgRkNDCQkxCisjZGVmaW5lIEpBUAkJMgorI2RlZmluZSBKQVBfVzUzCTMKKyNkZWZpbmUgSkFQX1c1Ngk0CisjZGVmaW5lIE1BWF9SRF9SRUdJT04gNQorCisjaWZkZWYJTkRJUzUxX01JTklQT1JUCisjZGVmaW5lIEJFQUNPTl9MT1NUX1RJTUUgICAgICAgICAgICA0MDAwICAgICAgIC8vIDIwNDggbXNlYyA9IDIgc2VjCisjZWxzZQorI2RlZmluZSBCRUFDT05fTE9TVF9USU1FICAgICAgICAgICAgNCAqIE9TX0haICAgIC8vIDIwNDggbXNlYyA9IDIgc2VjCisjZW5kaWYKKworI2RlZmluZSBETFNfVElNRU9VVCAgICAgICAgICAgICAgICAgMTIwMCAgICAgIC8vIHVuaXQ6IG1zZWMKKyNkZWZpbmUgQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgIDMwMCAgICAgICAvLyB1bml0OiBtc2VjCisjZGVmaW5lIEFTU09DX1RJTUVPVVQgICAgICAgICAgICAgICAzMDAgICAgICAgLy8gdW5pdDogbXNlYworI2RlZmluZSBKT0lOX1RJTUVPVVQgICAgICAgICAgICAgICAgMiAqIE9TX0haICAgICAgLy8gdW5pdDogbXNlYworI2RlZmluZSBTSE9SVF9DSEFOTkVMX1RJTUUgICAgICAgICAgOTAgICAgICAgIC8vIHVuaXQ6IG1zZWMKKyNkZWZpbmUgTUlOX0NIQU5ORUxfVElNRSAgICAgICAgICAgIDExMCAgICAgICAgLy8gdW5pdDogbXNlYywgZm9yIGR1YWwgYmFuZCBzY2FuCisjZGVmaW5lIE1BWF9DSEFOTkVMX1RJTUUgICAgICAgICAgICAxNDAgICAgICAgLy8gdW5pdDogbXNlYywgZm9yIHNpbmdsZSBiYW5kIHNjYW4KKyNkZWZpbmUJRkFTVF9BQ1RJVkVfU0NBTl9USU1FCSAgICAzMCAJCSAgLy8gQWN0aXZlIHNjYW4gd2FpdGluZyBmb3IgcHJvYmUgcmVzcG9uc2UgdGltZQorI2RlZmluZSBDV19NSU5fSU5fQklUUyAgICAgICAgICAgICAgNCAgICAgICAgIC8vIGFjdHVhbCBDd01pbiA9IDJeQ1dfTUlOX0lOX0JJVFMgLSAxCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmbmRlZiBDT05GSUdfQVBfU1VQUE9SVAorI2RlZmluZSBDV19NQVhfSU5fQklUUyAgICAgICAgICAgICAgMTAgICAgICAgIC8vIGFjdHVhbCBDd01heCA9IDJeQ1dfTUFYX0lOX0JJVFMgLSAxCisjZW5kaWYKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitleHRlcm4gVUlOVDMyIENXX01BWF9JTl9CSVRTOworI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKy8vIE5vdGU6IFJTU0lfVE9fREJNX09GRlNFVCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHZhcmlhYmxlIGZvciBuZXcgUkYgKDIwMDQtMDcyMCkuCisvLyBTSG91bGQgbm90IHJlZmVyIHRvIHRoaXMgY29uc3RhbnQgYW55bW9yZQorLy8jZGVmaW5lIFJTU0lfVE9fREJNX09GRlNFVCAgICAgICAgICAxMjAgLy8gZm9yIFJUMjUzMCBSU1NJLTExNSA9IGRCbQorI2RlZmluZSBSU1NJX0ZPUl9NSURfVFhfUE9XRVIgICAgICAgLTU1ICAvLyAtNTUgZGIgaXMgY29uc2lkZXJlZCBtaWQtZGlzdGFuY2UKKyNkZWZpbmUgUlNTSV9GT1JfTE9XX1RYX1BPV0VSICAgICAgIC00NSAgLy8gLTQ1IGRiIGlzIGNvbnNpZGVyZWQgdmVyeSBzaG9ydCBkaXN0YW5jZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGlnaWJsZSB0byB1c2UgYSBsb3dlciBUWCBwb3dlcgorI2RlZmluZSBSU1NJX0ZPUl9MT1dFU1RfVFhfUE9XRVIgICAgLTMwCisvLyNkZWZpbmUgTUlEX1RYX1BPV0VSX0RFTFRBICAgICAgICAgIDAgICAvLyAwIGRiIGZyb20gZnVsbCBUWCBwb3dlciB1cG9uIG1pZC1kaXN0YW5jZSB0byBBUAorI2RlZmluZSBMT1dfVFhfUE9XRVJfREVMVEEgICAgICAgICAgNiAgICAvLyAtMyBkYiBmcm9tIGZ1bGwgVFggcG93ZXIgdXBvbiB2ZXJ5IHNob3J0IGRpc3RhbmNlLiAxIGdyYWRlIGlzIDAuNSBkYgorI2RlZmluZSBMT1dFU1RfVFhfUE9XRVJfREVMVEEgICAgICAgMTYgICAvLyAtOCBkYiBmcm9tIGZ1bGwgVFggcG93ZXIgdXBvbiBzaG9ydGVzdCBkaXN0YW5jZS4gMSBncmFkZSBpcyAwLjUgZGIKKworI2RlZmluZSBSU1NJX1RSSUdHRVJFRF9VUE9OX0JFTE9XX1RIUkVTSE9MRCAgICAgMAorI2RlZmluZSBSU1NJX1RSSUdHRVJFRF9VUE9OX0VYQ0NFRURfVEhSRVNIT0xEICAgMQorI2RlZmluZSBSU1NJX1RIUkVTSE9MRF9GT1JfUk9BTUlORyAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUlNTSV9ERUxUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gQ2hhbm5lbCBRdWFsaXR5IEluZGljYXRpb24KKyNkZWZpbmUgQ1FJX0lTX0dPT0QoY3FpKSAgICAgICAgICAgICgoY3FpKSA+PSA1MCkKKy8vI2RlZmluZSBDUUlfSVNfRkFJUihjcWkpICAgICAgICAgICgoKGNxaSkgPj0gMjApICYmICgoY3FpKSA8IDUwKSkKKyNkZWZpbmUgQ1FJX0lTX1BPT1IoY3FpKSAgICAgICAgICAgIChjcWkgPCA1MCkgIC8vKCgoY3FpKSA+PSA1KSAmJiAoKGNxaSkgPCAyMCkpCisjZGVmaW5lIENRSV9JU19CQUQoY3FpKSAgICAgICAgICAgICAoY3FpIDwgNSkKKyNkZWZpbmUgQ1FJX0lTX0RFQUQoY3FpKSAgICAgICAgICAgIChjcWkgPT0gMCkKKworLy8gd2VpZ2h0aW5nIGZhY3RvciB0byBjYWxjdWxhdGUgQ2hhbm5lbCBxdWFsaXR5LCB0b3RhbCBzaG91bGQgYmUgMTAwJQorI2RlZmluZSBSU1NJX1dFSUdIVElORyAgICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBUWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBSWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyNkZWZpbmUgUEVFUl9LRVlfTk9UX1VTRUQgICAgICAgICAgICAgICAgMAorLy8jZGVmaW5lIFBFRVJfS0VZXzY0X0JJVCAgICAgICAgICAgICAgICAgIDY0CisvLyNkZWZpbmUgUEVFUl9LRVlfMTI4X0JJVCAgICAgICAgICAgICAgICAgMTI4CisKKy8vI2RlZmluZSBQRUVSX0tFWV82NEJJVF9MRU4gICAgICAgICAgICAgICA4CisvLyNkZWZpbmUgUEVFUl9LRVlfMTI4QklUX0xFTiAgICAgICAgICAgICAgMTYKKworI2RlZmluZSBCU1NfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBNQVhfTEVOX09GX01MTUVfUVVFVUUgICAgICAgICAgICA0MCAvLzEwCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNkZWZpbmUgU0NBTl9QQVNTSVZFICAgICAgICAgICAgICAgICAgICAgMTgJCS8vIHNjYW4gd2l0aCBubyBwcm9iZSByZXF1ZXN0LCBvbmx5IHdhaXQgYmVhY29uIGFuZCBwcm9iZSByZXNwb25zZQorI2RlZmluZSBTQ0FOX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAxOQkJLy8gc2NhbiB3aXRoIHByb2JlIHJlcXVlc3QsIGFuZCB3YWl0IGJlYWNvbiBhbmQgcHJvYmUgcmVzcG9uc2UKKyNkZWZpbmUJU0NBTl9DSVNDT19QQVNTSVZFCQkJCSAyMAkJLy8gU2luZ2xlIGNoYW5uZWwgcGFzc2l2ZSBzY2FuCisjZGVmaW5lCVNDQU5fQ0lTQ09fQUNUSVZFCQkJCSAyMQkJLy8gU2luZ2xlIGNoYW5uZWwgYWN0aXZlIHNjYW4KKyNkZWZpbmUJU0NBTl9DSVNDT19OT0lTRQkJCQkgMjIJCS8vIFNpbmdsZSBjaGFubmVsIHBhc3NpdmUgc2NhbiBmb3Igbm9pc2UgaGlzdG9ncmFtIGNvbGxlY3Rpb24KKyNkZWZpbmUJU0NBTl9DSVNDT19DSEFOTkVMX0xPQUQJCQkgMjMJCS8vIFNpbmdsZSBjaGFubmVsIHBhc3NpdmUgc2NhbiBmb3IgY2hhbm5lbCBsb2FkIGNvbGxlY3Rpb24KKyNkZWZpbmUgRkFTVF9TQ0FOX0FDVElWRSAgICAgICAgICAgICAgICAgMjQJCS8vIHNjYW4gd2l0aCBwcm9iZSByZXF1ZXN0LCBhbmQgd2FpdCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlCisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisjZGVmaW5lIFNDQU5fMjA0MF9CU1NfQ09FWElTVCAgICAgICAgICAgICAgICAgIDI2CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisvLyNkZWZpbmUgQlNTX1RBQkxFX0VNUFRZKHgpICAgICAgICAgICAgICgoeCkuQnNzTnIgPT0gMCkKKyNkZWZpbmUgTUFDX0FERFJfSVNfR1JPVVAoQWRkcikgICAgICAgKCgoQWRkclswXSkgJiAweDAxKSkKKyNkZWZpbmUgTUFDX0FERFJfSEFTSChBZGRyKSAgICAgICAgICAgIChBZGRyWzBdIF4gQWRkclsxXSBeIEFkZHJbMl0gXiBBZGRyWzNdIF4gQWRkcls0XSBeIEFkZHJbNV0pCisjZGVmaW5lIE1BQ19BRERSX0hBU0hfSU5ERVgoQWRkcikgICAgICAoTUFDX0FERFJfSEFTSChBZGRyKSAlIEhBU0hfVEFCTEVfU0laRSkKKyNkZWZpbmUgVElEX01BQ19IQVNIKEFkZHIsVElEKSAgICAgICAgICAgIChUSUReQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQorI2RlZmluZSBUSURfTUFDX0hBU0hfSU5ERVgoQWRkcixUSUQpICAgICAgKFRJRF9NQUNfSEFTSChBZGRyLFRJRCkgJSBIQVNIX1RBQkxFX1NJWkUpCisKKy8vIExFRCBDb250cm9sCisvLyBhc3NvaWF0aW9uIE9OLiBvbmUgTEVEIE9OLiBhbm90aGVyIGJsaW5raW5nIHdoZW4gVFgsIE9GRiB3aGVuIGlkbGUKKy8vIG5vIGFzc29jaWF0aW9uLCBib3RoIExFRCBvZmYKKyNkZWZpbmUgQVNJQ19MRURfQUNUX09OKHBBZCkgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxNCwgMHgwMDAzMWU0NikKKyNkZWZpbmUgQVNJQ19MRURfQUNUX09GRihwQWQpICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxNCwgMHgwMDAwMWU0NikKKworLy8gYml0IGRlZmluaXRpb24gb2YgdGhlIDItYnl0ZSBwQkVBQ09OLT5DYXBhYmlsaXR5IGZpZWxkCisjZGVmaW5lIENBUF9JU19FU1NfT04oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxKSAhPSAwKQorI2RlZmluZSBDQVBfSVNfSUJTU19PTih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMikgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0NGX1BPTExBQkxFX09OKHgpICAgICAgICAgKCgoeCkgJiAweDAwMDQpICE9IDApCisjZGVmaW5lIENBUF9JU19DRl9QT0xMX1JFUV9PTih4KSAgICAgICAgICgoKHgpICYgMHgwMDA4KSAhPSAwKQorI2RlZmluZSBDQVBfSVNfUFJJVkFDWV9PTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX1NIT1JUX1BSRUFNQkxFX09OKHgpICAgICAgKCgoeCkgJiAweDAwMjApICE9IDApCisjZGVmaW5lIENBUF9JU19QQkNDX09OKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwKSAhPSAwKQorI2RlZmluZSBDQVBfSVNfQUdJTElUWV9PTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX1NQRUNUUlVNX01HTVQoeCkgICAgICAgICAgKCgoeCkgJiAweDAxMDApICE9IDApICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIENBUF9JU19RT1MoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorI2RlZmluZSBDQVBfSVNfU0hPUlRfU0xPVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0FQU0QoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDApICE9IDApICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIENBUF9JU19JTU1FRF9CQSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorI2RlZmluZSBDQVBfSVNfRFNTU19PRkRNKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0RFTEFZX0JBKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDApICE9IDApICAvLyA4MDIuMTFlIGQ5CisKKyNkZWZpbmUgQ0FQX0dFTkVSQVRFKGVzcyxpYnNzLHByaXYsc19wcmUsc19zbG90LHNwZWN0cnVtKSAgKCgoZXNzKSA/IDB4MDAwMSA6IDB4MDAwMCkgfCAoKGlic3MpID8gMHgwMDAyIDogMHgwMDAwKSB8ICgocHJpdikgPyAweDAwMTAgOiAweDAwMDApIHwgKChzX3ByZSkgPyAweDAwMjAgOiAweDAwMDApIHwgKChzX3Nsb3QpID8gMHgwNDAwIDogMHgwMDAwKSB8ICgoc3BlY3RydW0pID8gMHgwMTAwIDogMHgwMDAwKSkKKworLy8jZGVmaW5lIFNUQV9RT1NfQ0FQQUJJTElUWSAgICAgICAgICAgICAgIDAgLy8gMS1ieXRlLiBzZWUgODAyLjExZSBkOS4wIGZvciBiaXQgZGVmaW5pdGlvbgorCisjZGVmaW5lIEVSUF9JU19OT05fRVJQX1BSRVNFTlQoeCkgICAgICAgICgoKHgpICYgMHgwMSkgIT0gMCkgICAgLy8gODAyLjExZworI2RlZmluZSBFUlBfSVNfVVNFX1BST1RFQ1RJT04oeCkgICAgICAgICAoKCh4KSAmIDB4MDIpICE9IDApICAgIC8vIDgwMi4xMWcKKyNkZWZpbmUgRVJQX0lTX1VTRV9CQVJLRVJfUFJFQU1CTEUoeCkgICAgKCgoeCkgJiAweDA0KSAhPSAwKSAgICAvLyA4MDIuMTFnCisKKyNkZWZpbmUgRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQgICAgICAgOC8vIDMgIC8vIGp1c3QgdGVzdCBieSBnYXJ5CisjZGVmaW5lIERSU19QRU5BTFRZICAgICAgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBCQV9OT1RVU0UgCTIKKy8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lCisjZGVmaW5lIElNTUVEX0JBIAkxCisjZGVmaW5lIERFTEFZX0JBCTAKKworLy8gQkEgSW5pdGlhdG9yIHN1YmZpZWxkIGluIERFTEJBIGZyYW1lCisjZGVmaW5lIE9SSUdJTkFUT1IJMQorI2RlZmluZSBSRUNJUElFTlQJMAorCisvLyBBRERCQSBTdGF0dXMgQ29kZQorI2RlZmluZSBBRERCQV9SRVNVTFRDT0RFX1NVQ0NFU1MJCQkJCTAKKyNkZWZpbmUgQUREQkFfUkVTVUxUQ09ERV9SRUZVU0VECQkJCQkzNworI2RlZmluZSBBRERCQV9SRVNVTFRDT0RFX0lOVkFMSURfUEFSQU1FVEVSUwkJCTM4CisKKy8vIERFTEJBIFJlYXNvbiBDb2RlCisjZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfUVNUQV9MRUFWSU5HCQkJCTM2CisjZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfRU5EX0JBCQkJCQkJMzcKKyNkZWZpbmUgREVMQkFfUkVBU09OQ09ERV9VTktOT1dOX0JBCQkJCQkzOAorI2RlZmluZSBERUxCQV9SRUFTT05DT0RFX1RJTUVPVVQJCQkJCTM5CisKKy8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworI2RlZmluZSBSRVNFVF9PTkVfU0VDX1RYX0NOVChfX3BFbnRyeSkgXAoraWYgKCgoX19wRW50cnkpKSAhPSBOVUxMKSBcCit7IFwKKwkoX19wRW50cnkpLT5PbmVTZWNUeFJldHJ5T2tDb3VudCA9IDA7IFwKKwkoX19wRW50cnkpLT5PbmVTZWNUeEZhaWxDb3VudCA9IDA7IFwKKwkoX19wRW50cnkpLT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsgXAorfQorCisvLworLy8gODAyLjExIGZyYW1lIGZvcm1hdHMKKy8vCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJTFNJR1R4b3BQcm9TdXA6MTsKKwlVU0hPUlQJRm9ydHlfTWh6X0ludG9sZXJhbnQ6MTsKKwlVU0hPUlQJUFNNUDoxOworCVVTSE9SVAlDQ0ttb2RlaW40MDoxOworCVVTSE9SVAlBTXNkdVNpemU6MTsKKwlVU0hPUlQJRGVsYXllZEJBOjE7CS8vcnQyODYwYyBub3Qgc3VwcG9ydAorCVVTSE9SVAlSeFNUQkM6MjsKKwlVU0hPUlQJVHhTVEJDOjE7CisJVVNIT1JUCVNob3J0R0lmb3I0MDoxOwkvL2ZvcjQwTUh6CisJVVNIT1JUCVNob3J0R0lmb3IyMDoxOworCVVTSE9SVAlHRjoxOwkvL2dyZWVuIGZpZWxkCisJVVNIT1JUCU1pbW9QczoyOy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCUNoYW5uZWxXaWR0aDoxOworCVVTSE9SVAlBZHZDb2Rpbmc6MTsKKyNlbHNlCisJVVNIT1JUCUFkdkNvZGluZzoxOworCVVTSE9SVAlDaGFubmVsV2lkdGg6MTsKKwlVU0hPUlQJTWltb1BzOjI7Ly9tb21pIHBvd2VyIHNhZmUKKwlVU0hPUlQJR0Y6MTsJLy9ncmVlbiBmaWVsZAorCVVTSE9SVAlTaG9ydEdJZm9yMjA6MTsKKwlVU0hPUlQJU2hvcnRHSWZvcjQwOjE7CS8vZm9yNDBNSHoKKwlVU0hPUlQJVHhTVEJDOjE7CisJVVNIT1JUCVJ4U1RCQzoyOworCVVTSE9SVAlEZWxheWVkQkE6MTsJLy9ydDI4NjBjIG5vdCBzdXBwb3J0CisJVVNIT1JUCUFNc2R1U2l6ZToxOwkvLyBvbmx5IHN1cHBvcnQgYXMgemVybworCVVTSE9SVAlDQ0ttb2RlaW40MDoxOworCVVTSE9SVAlQU01QOjE7CisJVVNIT1JUCUZvcnR5X01oel9JbnRvbGVyYW50OjE7CisJVVNIT1JUCUxTSUdUeG9wUHJvU3VwOjE7CisjZW5kaWYJLyogIVJUX0JJR19FTkRJQU4gKi8KK30gSFRfQ0FQX0lORk8sICpQSFRfQ0FQX0lORk87CisKKy8vICBIVCBDYXBhYmlsaXR5IElORk8gZmllbGQgaW4gSFQgQ2FwIElFIC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCXJzdjozOy8vbW9taSBwb3dlciBzYWZlCisJVUNIQVIJTXBkdURlbnNpdHk6MzsKKwlVQ0hBUglNYXhSQW1wZHVGYWN0b3I6MjsKKyNlbHNlCisJVUNIQVIJTWF4UkFtcGR1RmFjdG9yOjI7CisJVUNIQVIJTXBkdURlbnNpdHk6MzsKKwlVQ0hBUglyc3Y6MzsvL21vbWkgcG93ZXIgc2FmZQorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEhUX0NBUF9QQVJNLCAqUEhUX0NBUF9QQVJNOworCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworCVVDSEFSCU1DU1NldFsxMF07CisJVUNIQVIJU3VwUmF0ZVsyXTsgIC8vIHVuaXQgOiAxTWJwcworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglyc3Y6MzsKKwlVQ0hBUglNcGR1RGVuc2l0eToxOworCVVDSEFSCVR4U3RyZWFtOjI7CisJVUNIQVIJVHhSeE5vdEVxdWFsOjE7CisJVUNIQVIJVHhNQ1NTZXREZWZpbmVkOjE7CisjZWxzZQorCVVDSEFSCVR4TUNTU2V0RGVmaW5lZDoxOworCVVDSEFSCVR4UnhOb3RFcXVhbDoxOworCVVDSEFSCVR4U3RyZWFtOjI7CisJVUNIQVIJTXBkdURlbnNpdHk6MTsKKwlVQ0hBUglyc3Y6MzsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJVUNIQVIJcnN2M1szXTsKK30gSFRfTUNTX1NFVCwgKlBIVF9NQ1NfU0VUOworCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2Mjo0OworCVVTSE9SVAlSREdTdXBwb3J0OjE7CS8vcmV2ZXJzZSBEaXJlY3Rpb24gR3JhbnQgIHN1cHBvcnQKKwlVU0hPUlQJUGx1c0hUQzoxOwkvLytIVEMgY29udHJvbCBmaWVsZCBzdXBwb3J0CisJVVNIT1JUCU1DU0ZlZWRiYWNrOjI7CS8vMDpubyBNQ1MgZmVlZGJhY2ssIDI6dW5zb2xpY2l0ZWQgTUNTIGZlZWRiYWNrLCAzOkZ1bGwgTUNTIGZlZWRiYWNrLCAgMTpyc3YuCisJVVNIT1JUCXJzdjo1Oy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCVRyYW5UaW1lOjI7CisJVVNIT1JUCVBjbzoxOworI2Vsc2UKKwlVU0hPUlQJUGNvOjE7CisJVVNIT1JUCVRyYW5UaW1lOjI7CisJVVNIT1JUCXJzdjo1Oy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCU1DU0ZlZWRiYWNrOjI7CS8vMDpubyBNQ1MgZmVlZGJhY2ssIDI6dW5zb2xpY2l0ZWQgTUNTIGZlZWRiYWNrLCAzOkZ1bGwgTUNTIGZlZWRiYWNrLCAgMTpyc3YuCisJVVNIT1JUCVBsdXNIVEM6MTsJLy8rSFRDIGNvbnRyb2wgZmllbGQgc3VwcG9ydAorCVVTSE9SVAlSREdTdXBwb3J0OjE7CS8vcmV2ZXJzZSBEaXJlY3Rpb24gR3JhbnQgIHN1cHBvcnQKKwlVU0hPUlQJcnN2Mjo0OworI2VuZGlmIC8qIFJUX0JJR19FTkRJQU4gKi8KK30gRVhUX0hUX0NBUF9JTkZPLCAqUEVYVF9IVF9DQVBfSU5GTzsKKworLy8gIEhUIEJlYW1mb3JtaW5nIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0hUX0JGX0NBUHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUxPTkcJcnN2OjM7CisJVUxPTkcJQ2hhbkVzdGltYXRpb246MjsKKwlVTE9ORwlDU0lSb3dCRlN1cDoyOworCVVMT05HCUNvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlOb0NvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlDU0lCRkFudFN1cDoyOworCVVMT05HCU1pbkdyb3VwaW5nOjI7CisJVUxPTkcJRXhwQ29tQkY6MjsKKwlVTE9ORwlFeHBOb0NvbUJGOjI7CisJVUxPTkcJRXhwQ1NJRmJrOjI7CisJVUxPTkcJRXhwQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwTm9Db21TdGVlckNhcGFibGU6MTsKKwlVTE9ORwlFeHBDU0lDYXBhYmxlOjE7CisJVUxPTkcJQ2FsaWJyYXRpb246MjsKKwlVTE9ORwlJbXBUeEJGQ2FwYWJsZToxOworCVVMT05HCVR4TkRQQ2FwYWJsZToxOworCVVMT05HCVJ4TkRQQ2FwYWJsZToxOworCVVMT05HCVR4U291bmRDYXBhYmxlOjE7CisJVUxPTkcJUnhTb3VuZENhcGFibGU6MTsKKwlVTE9ORwlUeEJGUmVjQ2FwYWJsZToxOworI2Vsc2UKKwlVTE9ORwlUeEJGUmVjQ2FwYWJsZToxOworCVVMT05HCVJ4U291bmRDYXBhYmxlOjE7CisJVUxPTkcJVHhTb3VuZENhcGFibGU6MTsKKwlVTE9ORwlSeE5EUENhcGFibGU6MTsKKwlVTE9ORwlUeE5EUENhcGFibGU6MTsKKwlVTE9ORwlJbXBUeEJGQ2FwYWJsZToxOworCVVMT05HCUNhbGlicmF0aW9uOjI7CisJVUxPTkcJRXhwQ1NJQ2FwYWJsZToxOworCVVMT05HCUV4cE5vQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwQ1NJRmJrOjI7CisJVUxPTkcJRXhwTm9Db21CRjoyOworCVVMT05HCUV4cENvbUJGOjI7CisJVUxPTkcJTWluR3JvdXBpbmc6MjsKKwlVTE9ORwlDU0lCRkFudFN1cDoyOworCVVMT05HCU5vQ29tU3RlZXJCRkFudFN1cDoyOworCVVMT05HCUNvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlDU0lSb3dCRlN1cDoyOworCVVMT05HCUNoYW5Fc3RpbWF0aW9uOjI7CisJVUxPTkcJcnN2OjM7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworfSBIVF9CRl9DQVAsICpQSFRfQkZfQ0FQOworCisvLyAgSFQgYW50ZW5uYSBzZWxlY3Rpb24gZmllbGQgaW4gSFQgQ2FwIElFIC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfSFRfQVNfQ0FQeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglyc3Y6MTsKKwlVQ0hBUglUeFNvdW5kUFBEVToxOworCVVDSEFSCVJ4QVNlbDoxOworCVVDSEFSCUFudEluZEZiazoxOworCVVDSEFSCUV4cENTSUZiazoxOworCVVDSEFSCUFudEluZEZia1R4QVNFTDoxOworCVVDSEFSCUV4cENTSUZia1R4QVNFTDoxOworCVVDSEFSCUFudFNlbGVjdDoxOworI2Vsc2UKKwlVQ0hBUglBbnRTZWxlY3Q6MTsKKwlVQ0hBUglFeHBDU0lGYmtUeEFTRUw6MTsKKwlVQ0hBUglBbnRJbmRGYmtUeEFTRUw6MTsKKwlVQ0hBUglFeHBDU0lGYms6MTsKKwlVQ0hBUglBbnRJbmRGYms6MTsKKwlVQ0hBUglSeEFTZWw6MTsKKwlVQ0hBUglUeFNvdW5kUFBEVToxOworCVVDSEFSCXJzdjoxOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KK30gSFRfQVNfQ0FQLCAqUEhUX0FTX0NBUDsKKworLy8gRHJhZnQgMS4wIHNldCBJRSBsZW5ndGggMjYsIGJ1dCBpcyBleHRlbnNpYmxlLi4KKyNkZWZpbmUgU0laRV9IVF9DQVBfSUUJCTI2CisvLyBUaGUgc3RydWN0dXJlIGZvciBIVCBDYXBhYmlsaXR5IElFLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9IVF9DQVBBQklMSVRZX0lFeworCUhUX0NBUF9JTkZPCQlIdENhcEluZm87CisJSFRfQ0FQX1BBUk0JCUh0Q2FwUGFybTsKKy8vCUhUX01DU19TRVQJCUh0TUNTU2V0OworCVVDSEFSCQkJTUNTU2V0WzE2XTsKKwlFWFRfSFRfQ0FQX0lORk8JRXh0SHRDYXBJbmZvOworCUhUX0JGX0NBUAkJVHhCRkNhcDsJLy8gYmVhbWZvcm1pbmcgY2FwLiBydDI4NjBjIG5vdCBzdXBwb3J0IGJlYW1mb3JtaW5nLgorCUhUX0FTX0NBUAkJQVNDYXA7CS8vYW50ZW5uYSBzZWxlY3Rpb24uCit9IEhUX0NBUEFCSUxJVFlfSUUsICpQSFRfQ0FQQUJJTElUWV9JRTsKKworCisvLyA4MDIuMTFuIGRyYWZ0MyByZWxhdGVkIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KKy8vIDcuMy4yLjYwCisjZGVmaW5lIGRvdDExT0JTU1NjYW5QYXNzaXZlRHdlbGwJCQkJCQkJMjAJLy8gaW4gVFUuIG1pbiBhbW91bnQgb2YgdGltZSB0aGF0IHRoZSBTVEEgY29udGlub3VzbHkgc2NhbnMgZWFjaCBjaGFubmVsIHdoZW4gcGVyZm9ybWluZyBhbiBhY3RpdmUgT0JTUyBzY2FuLgorI2RlZmluZSBkb3QxMU9CU1NTY2FuQWN0aXZlRHdlbGwJCQkJCQkJMTAJLy8gaW4gVFUubWluIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBjb250aW5vdXNseSBzY2FucyBlYWNoIGNoYW5uZWwgd2hlbiBwZXJmb3JtaW5nIGFuIHBhc3NpdmUgT0JTUyBzY2FuLgorI2RlZmluZSBkb3QxMUJTU1dpZHRoVHJpZ2dlclNjYW5JbnRlcnZhbAkJCQkJMzAwICAvLyBpbiBzZWMuIG1heCBpbnRlcnZhbCBiZXR3ZWVuIHNjYW4gb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgdG8gZGV0ZWN0IEJTUyBjaGFubmVsIHdpZHRoIHRyaWdnZXIgZXZlbnRzLgorI2RlZmluZSBkb3QxMU9CU1NTY2FuUGFzc2l2ZVRvdGFsUGVyQ2hhbm5lbAkJCQkJMjAwCS8vIGluIFRVLiBtaW4gdG90YWwgYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgU1RBIHNjYW5zIGVhY2ggY2hhbm5lbCB3aGVuIHBlcmZvcm1pbmcgYSBwYXNzaXZlIE9CU1Mgc2Nhbi4KKyNkZWZpbmUgZG90MTFPQlNTU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbAkJCQkJMjAJLy9pbiBUVS4gbWluIHRvdGFsIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBzY2FucyBlYWNoIGNoYW5uZWwgd2hlbiBwZXJmb3JtaW5nIGEgYWN0aXZlIE9CU1Mgc2NhbgorI2RlZmluZSBkb3QxMUJTU1dpZHRoQ2hhbm5lbFRyYW5zYWN0aW9uRGVsYXlGYWN0b3IJCQk1CS8vIG1pbiByYXRpbyBiZXR3ZWVuIHRoZSBkZWxheSB0aW1lIGluIHBlcmZvcm1pbmcgYSBzd2l0Y2ggZnJvbSAyME1IeiBCU1MgdG8gMjAvNDAgQlNTIG9wZXJhdGlvbiBhbmQgdGhlIG1heGltYQorCQkJCQkJCQkJCQkJCQkJCS8vCWludGVydmFsIGJldHdlZW4gb3ZlcmxhcHBpbmcgQlNTIHNjYW4gb3BlcmF0aW9ucy4KKyNkZWZpbmUgZG90MTFCU1NTY2FuQWN0aXZpdHlUaHJlc2hvbGQJCQkJCQkyNQkvLyBpbiAlJSwgbWF4IHRvdGFsIHRpbWUgdGhhdCBhIFNUQSBtYXkgYmUgYWN0aXZlIG9uIHRoZSBtZWRpdW0gZHVyaW5nIGEgcGVyaW9kIG9mCisJCQkJCQkJCQkJCQkJCQkJLy8JKGRvdDExQlNTV2lkdGhDaGFubmVsVHJhbnNhY3Rpb25EZWxheUZhY3RvciAqIGRvdDExQlNTV2lkdGhUcmlnZ2VyU2NhbkludGVydmFsKSBzZWNvbmRzIHdpdGhvdXQKKwkJCQkJCQkJCQkJCQkJCQkvLwliZWluZyBvYmxpZ2F0ZWQgdG8gcGVyZm9ybSBPQlNTIFNjYW4gb3BlcmF0aW9ucy4gZGVmYXVsdCBpcyAyNSg9PSAwLjI1JSkKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9PVkVSTEFQX0JTU19TQ0FOX0lFeworCVVTSE9SVAkJU2NhblBhc3NpdmVEd2VsbDsKKwlVU0hPUlQJCVNjYW5BY3RpdmVEd2VsbDsKKwlVU0hPUlQJCVRyaWdnZXJTY2FuSW50OwkJCQkvLyBUcmlnZ2VyIHNjYW4gaW50ZXJ2YWwKKwlVU0hPUlQJCVBhc3NpdmVUYWxQZXJDaGFubmVsOwkJLy8gcGFzc2l2ZSB0b3RhbCBwZXIgY2hhbm5lbAorCVVTSE9SVAkJQWN0aXZlVGFsUGVyQ2hhbm5lbDsJCS8vIGFjdGl2ZSB0b3RhbCBwZXIgY2hhbm5lbAorCVVTSE9SVAkJRGVsYXlGYWN0b3I7CQkJCS8vIEJTUyB3aWR0aCBjaGFubmVsIHRyYW5zaXRpb24gZGVsYXkgZmFjdG9yCisJVVNIT1JUCQlTY2FuQWN0VGhyZTsJCQkJLy8gU2NhbiBBY3Rpdml0eSB0aHJlc2hvbGQKK31PVkVSTEFQX0JTU19TQ0FOX0lFLCAqUE9WRVJMQVBfQlNTX1NDQU5fSUU7CisKKworLy8gIDcuMy4yLjU2LiAyMC80MCBDb2V4aXN0ZW5jZSBlbGVtZW50IHVzZWQgaW4gIEVsZW1lbnQgSUQgPSA3MiA9IElFXzIwNDBfQlNTX0NPRVhJU1QKK3R5cGVkZWYgdW5pb24gUEFDS0VEIF9CU1NfMjA0MF9DT0VYSVNUX0lFeworIHN0cnVjdCBQQUNLRUQgeworICNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJcnN2OjU7CisJVUNIQVIJQlNTMjBXaWR0aFJlcToxOworCVVDSEFSCUludG9sZXJhbnQ0MDoxOworCVVDSEFSCUluZm9SZXE6MTsKKyAjZWxzZQorCVVDSEFSCUluZm9SZXE6MTsKKwlVQ0hBUglJbnRvbGVyYW50NDA6MTsJCQkvLyBJbnRlci1CU1MuIHNldCAxIHdoZW4gcHJvaGliaXRzIGEgcmVjZWl2aW5nIEJTUyBmcm9tIG9wZXJhdGluZyBhcyBhIDIwLzQwIE1oeiBCU1MuCisJVUNIQVIJQlNTMjBXaWR0aFJlcToxOwkJLy8gSW50cmEtQlNTIHNldCAxIHdoZW4gcHJvaGliaXRzIGEgcmVjZWl2aW5nIEFQIGZyb20gb3BlcmF0aW5nIGl0cyBCU1MgYXMgYSAyMC80ME1IeiBCU1MuCisJVUNIQVIJcnN2OjU7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworICAgIH0gZmllbGQ7CisgVUNIQVIgICB3b3JkOworfSBCU1NfMjA0MF9DT0VYSVNUX0lFLCAqUEJTU18yMDQwX0NPRVhJU1RfSUU7CisKKwordHlwZWRlZiBzdHJ1Y3QgIF9UUklHR0VSX0VWRU5UQXsKKwlCT09MRUFOCQkJYlZhbGlkOworCVVDSEFSCUJTU0lEWzZdOworCVVDSEFSCVJlZ0NsYXNzOwkvLyBSZWd1bGF0b3J5IENsYXNzCisJVVNIT1JUCUNoYW5uZWw7CisJVUxPTkcJQ0RDb3VudGVyOyAgIC8vIE1haW50YWluIGEgc2VwZXJhdGUgY291bnQgZG93biBjb3VudGVyIGZvciBlYWNoIEV2ZW50IEEuCit9IFRSSUdHRVJfRVZFTlRBLCAqUFRSSUdHRVJfRVZFTlRBOworCisvLyAyMC80MCB0cmlnZ2VyIGV2ZW50IHRhYmxlCisvLyBJZiBvbmUgRXZlbnQgQSBkZWxldGUgb3IgY3JlYXRlZCwgb3IgaWYgRXZlbnQgQiBpcyBkZXRlY3RlZCBvciBub3QgZGV0ZWN0ZWQsIFNUQSBzaG91bGQgc2VuZCAyMDQwQlNTQ29leGlzdGVuY2UgdG8gQVAuCisjZGVmaW5lIE1BWF9UUklHR0VSX0VWRU5UCQk2NAordHlwZWRlZiBzdHJ1Y3QgIF9UUklHR0VSX0VWRU5UX1RBQnsKKwlVQ0hBUglFdmVudEFObzsKKwlUUklHR0VSX0VWRU5UQQlFdmVudEFbTUFYX1RSSUdHRVJfRVZFTlRdOworCVVMT05HCQkJRXZlbnRCQ291bnREb3duOwkvLyBDb3VudCBkb3duIGNvdW50ZXIgZm9yIEV2ZW50IEIuCit9IFRSSUdHRVJfRVZFTlRfVEFCLCAqUFRSSUdHRVJfRVZFTlRfVEFCOworCisvLyA3LjMuMjcgMjAvNDAgQnNzIENvZXhpc3RlbmNlIE1nbXQgY2FwYWJpbGl0eSB1c2VkIGluIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBpbmZvcm1hdGlvbiBJRSggSUQgPSAxMjcgPSBJRV9FWFRfQ0FQQUJJTElUWSkuCisvLwlUaGlzIGlzIHRoZSBmaXJzdCBvY3RldCBhbmQgd2FzIGRlZmluZWQgaW4gODAyLjExbiBEMy4wMyBhbmQgODAyLjExeUQ5LjAKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRVhUX0NBUF9JTkZPX0VMRU1FTlR7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCXJzdjI6NTsKKwlVQ0hBUglFeHRlbmRDaGFubmVsU3dpdGNoOjE7CisJVUNIQVIJcnN2OjE7CisJVUNIQVIJQnNzQ29leGlzdE1nbXRTdXBwb3J0OjE7CisjZWxzZQorCVVDSEFSCUJzc0NvZXhpc3RNZ210U3VwcG9ydDoxOworCVVDSEFSCXJzdjoxOworCVVDSEFSCUV4dGVuZENoYW5uZWxTd2l0Y2g6MTsKKwlVQ0hBUglyc3YyOjU7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworfUVYVF9DQVBfSU5GT19FTEVNRU5ULCAqUEVYVF9DQVBfSU5GT19FTEVNRU5UOworCisKKy8vIDgwMi4xMW4gNy4zLjIuNjEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UeworCVVDSEFSCQkJCQlFbGVtZW50SUQ7CQkvLyBJRCA9IElFXzIwNDBfQlNTX0NPRVhJU1QgPSA3MgorCVVDSEFSCQkJCQlMZW47CisJQlNTXzIwNDBfQ09FWElTVF9JRQkJQnNzQ29leGlzdEllOworfUJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCwgKlBCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQ7CisKKworLy84MDIuMTFuIDcuMy4yLjU5Cit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0JTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUeworCVVDSEFSCQkJCUVsZW1lbnRJRDsJCS8vIElEID0gSUVfMjA0MF9CU1NfSU5UT0xFUkFOVF9SRVBPUlQgPSA3MworCVVDSEFSCQkJCUxlbjsKKwlVQ0hBUgkJCQlSZWd1bGF0b3J5Q2xhc3M7CisJVUNIQVIJCQkJQ2hMaXN0WzBdOworfUJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JULCAqUEJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUOworCisKKy8vIFRoZSBzdHJ1Y3R1cmUgZm9yIGNoYW5uZWwgc3dpdGNoIGFubm91Y2VtZW50IElFLiBUaGlzIGlzIGluIDgwMi4xMW4gRDMuMDMKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRXsKKwlVQ0hBUgkJCVN3aXRjaE1vZGU7CS8vY2hhbm5lbCBzd2l0Y2ggbW9kZQorCVVDSEFSCQkJTmV3Q2hhbm5lbDsJLy8KKwlVQ0hBUgkJCVN3aXRjaENvdW50OwkvLworfSBDSEFfU1dJVENIX0FOTk9VTkNFX0lFLCAqUENIQV9TV0lUQ0hfQU5OT1VOQ0VfSUU7CisKKworLy8gVGhlIHN0cnVjdHVyZSBmb3IgY2hhbm5lbCBzd2l0Y2ggYW5ub3VjZW1lbnQgSUUuIFRoaXMgaXMgaW4gODAyLjExbiBEMy4wMwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9TRUNfQ0hBX09GRlNFVF9JRXsKKwlVQ0hBUgkJCVNlY29uZGFyeUNoYW5uZWxPZmZzZXQ7CSAvLyAxOiBTZWNvbmRhcnkgYWJvdmUsIDM6IFNlY29uZGFyeSBiZWxvdywgMDogbm8gU2Vjb25kYXJ5Cit9IFNFQ19DSEFfT0ZGU0VUX0lFLCAqUFNFQ19DSEFfT0ZGU0VUX0lFOworCisKKy8vIFRoaXMgc3RydWN0dXJlIGlzIGV4dHJhY3RlZCBmcm9tIHN0cnVjdCBSVF9IVF9DQVBBQklMSVRZCit0eXBlZGVmIHN0cnVjdCB7CisJQk9PTEVBTgkJCWJIdEVuYWJsZTsJIC8vIElmIHdlIHNob3VsZCB1c2UgaHQgcmF0ZS4KKwlCT09MRUFOCQkJYlByZU5IdDsJIC8vIElmIHdlIHNob3VsZCB1c2UgaHQgcmF0ZS4KKwkvL1N1YnN0cmFjdCBmcm9tIEhUIENhcGFiaWxpdHkgSUUKKwlVQ0hBUgkJCU1DU1NldFsxNl07CS8vb25seSBzdXBvb3J0IE1DUz0wLTE1LDMyICwKK30gUlRfSFRfUEhZX0lORk8sICpQUlRfSFRfUEhZX0lORk87CisKKy8vVGhpcyBzdHJ1Y3R1cmUgc3Vic3RyYWN0cyByYWxpbmsgc3VwcG9ydHMgZnJvbSBhbGwgODAyLjExbi1yZWxhdGVkIGZlYXR1cmVzLgorLy9GZWF0dXJlcyBub3QgbGlzdGVkIGhlcmUgYnV0IGNvbnRhaW5lZCBpbiA4MDIuMTFuIHNwZWMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gcnQyODYwLgordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2OjU7CisJVVNIT1JUCUFtc2R1U2l6ZToxOwkvLyBNYXggcmVjZWl2aW5nIEEtTVNEVSBzaXplCisJVVNIT1JUCUFtc2R1RW5hYmxlOjE7CS8vIEVuYWJsZSB0byB0cmFuc21pdCBBLU1TRFUuIFN1Z2dlc3QgZGlzYWJsZS4gV2Ugc2hvdWxkIHVzZSBBLU1QRFUgdG8gZ2FpbiBiZXN0IGJlbmlmaXQgb2YgODAyLjExbgorCVVTSE9SVAlSeFNUQkM6MjsJLy8gMiBiaXRzCisJVVNIT1JUCVR4U1RCQzoxOworCVVTSE9SVAlTaG9ydEdJZm9yNDA6MTsJLy9mb3I0ME1IegorCVVTSE9SVAlTaG9ydEdJZm9yMjA6MTsKKwlVU0hPUlQJR0Y6MTsJLy9ncmVlbiBmaWVsZAorCVVTSE9SVAlNaW1vUHM6MjsvL21pbW8gcG93ZXIgc2FmZSBNTVBTXworCVVTSE9SVAlDaGFubmVsV2lkdGg6MTsKKyNlbHNlCisJVVNIT1JUCUNoYW5uZWxXaWR0aDoxOworCVVTSE9SVAlNaW1vUHM6MjsvL21pbW8gcG93ZXIgc2FmZSBNTVBTXworCVVTSE9SVAlHRjoxOwkvL2dyZWVuIGZpZWxkCisJVVNIT1JUCVNob3J0R0lmb3IyMDoxOworCVVTSE9SVAlTaG9ydEdJZm9yNDA6MTsJLy9mb3I0ME1IegorCVVTSE9SVAlUeFNUQkM6MTsKKwlVU0hPUlQJUnhTVEJDOjI7CS8vIDIgYml0cworCVVTSE9SVAlBbXNkdUVuYWJsZToxOwkvLyBFbmFibGUgdG8gdHJhbnNtaXQgQS1NU0RVLiBTdWdnZXN0IGRpc2FibGUuIFdlIHNob3VsZCB1c2UgQS1NUERVIHRvIGdhaW4gYmVzdCBiZW5pZml0IG9mIDgwMi4xMW4KKwlVU0hPUlQJQW1zZHVTaXplOjE7CS8vIE1heCByZWNlaXZpbmcgQS1NU0RVIHNpemUKKwlVU0hPUlQJcnN2OjU7CisjZW5kaWYKKworCS8vU3Vic3RyYWN0IGZyb20gQWRkaW9udCBIVCBJTkZPIElFCisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVJlY29tV2lkdGg6MTsKKwlVQ0hBUglFeHRDaGFuT2Zmc2V0OjI7CS8vIFBsZWFzZSBub3QgdGhlIGRpZmZlcmVuY2Ugd2l0aCBmb2xsb3dpbmcgCVVDSEFSCU5ld0V4dENoYW5uZWxPZmZzZXQ7IGZyb20gODAyLjExbgorCVVDSEFSCU1wZHVEZW5zaXR5OjM7CisJVUNIQVIJTWF4UkFtcGR1RmFjdG9yOjI7CisjZWxzZQorCVVDSEFSCU1heFJBbXBkdUZhY3RvcjoyOworCVVDSEFSCU1wZHVEZW5zaXR5OjM7CisJVUNIQVIJRXh0Q2hhbk9mZnNldDoyOwkvLyBQbGVhc2Ugbm90IHRoZSBkaWZmZXJlbmNlIHdpdGggZm9sbG93aW5nIAlVQ0hBUglOZXdFeHRDaGFubmVsT2Zmc2V0OyBmcm9tIDgwMi4xMW4KKwlVQ0hBUglSZWNvbVdpZHRoOjE7CisjZW5kaWYKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2MjoxMTsKKwlVU0hPUlQJT0JTU19Ob25IVEV4aXN0OjE7CisJVVNIT1JUCXJzdjM6MTsKKwlVU0hPUlQJTm9uR2ZQcmVzZW50OjE7CisJVVNIT1JUCU9wZXJhaW9uTW9kZToyOworI2Vsc2UKKwlVU0hPUlQJT3BlcmFpb25Nb2RlOjI7CisJVVNIT1JUCU5vbkdmUHJlc2VudDoxOworCVVTSE9SVAlyc3YzOjE7CisJVVNIT1JUCU9CU1NfTm9uSFRFeGlzdDoxOworCVVTSE9SVAlyc3YyOjExOworI2VuZGlmCisKKwkvLyBOZXcgRXh0ZW5zaW9uIENoYW5uZWwgT2Zmc2V0IElFCisJVUNIQVIJTmV3RXh0Q2hhbm5lbE9mZnNldDsKKwkvLyBFeHRlbnNpb24gQ2FwYWJpbGl0eSBJRSA9IDEyNworCVVDSEFSCUJTU0NvZXhpc3QyMDQwOworfSBSVF9IVF9DQVBBQklMSVRZLCAqUFJUX0hUX0NBUEFCSUxJVFk7CisKKy8vICAgZmllbGQgaW4gQWRkdGlvbmFsIEhUIEluZm9ybWF0aW9uIElFIC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVNlckludGVyR3JhbnU6MzsKKwlVQ0hBUglTX1BTTVBTdXA6MTsKKwlVQ0hBUglSaWZzTW9kZToxOworCVVDSEFSCVJlY29tV2lkdGg6MTsKKwlVQ0hBUglFeHRDaGFuT2Zmc2V0OjI7CisjZWxzZQorCVVDSEFSCUV4dENoYW5PZmZzZXQ6MjsKKwlVQ0hBUglSZWNvbVdpZHRoOjE7CisJVUNIQVIJUmlmc01vZGU6MTsKKwlVQ0hBUglTX1BTTVBTdXA6MTsJIC8vSW5kaWNhdGUgc3VwcG9ydCBmb3Igc2NoZWR1bGVkIFBTTVAKKwlVQ0hBUglTZXJJbnRlckdyYW51OjM7CSAvL3NlcnZpY2UgaW50ZXJ2YWwgZ3JhbnVsYXJpdHkKKyNlbmRpZgorfSBBRERfSFRJTkZPLCAqUEFERF9IVElORk87CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCXJzdjI6MTE7CisJVVNIT1JUCU9CU1NfTm9uSFRFeGlzdDoxOworCVVTSE9SVAlyc3Y6MTsKKwlVU0hPUlQJTm9uR2ZQcmVzZW50OjE7CisJVVNIT1JUCU9wZXJhaW9uTW9kZToyOworI2Vsc2UKKwlVU0hPUlQJT3BlcmFpb25Nb2RlOjI7CisJVVNIT1JUCU5vbkdmUHJlc2VudDoxOworCVVTSE9SVAlyc3Y6MTsKKwlVU0hPUlQJT0JTU19Ob25IVEV4aXN0OjE7CisJVVNIT1JUCXJzdjI6MTE7CisjZW5kaWYKK30gQUREX0hUSU5GTzIsICpQQUREX0hUSU5GTzI7CisKKworLy8gVE9ETzogTmVlZCBzeW5jIHdpdGggc3BlYyBhYm91dCB0aGUgZGVmaW5pdGlvbiBvZiBTdGJjTWNzLiBJbiBEcmFmdCAzLjAzLCBpdCdzIHJlc2VydmVkLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2OjQ7CisJVVNIT1JUCVBjb1BoYXNlOjE7CisJVVNIT1JUCVBjb0FjdGl2ZToxOworCVVTSE9SVAlMc2lnVHhvcFByb3Q6MTsKKwlVU0hPUlQJU1RCQ0JlYWNvbjoxOworCVVTSE9SVAlEdWFsQ1RTUHJvdGVjdDoxOworCVVTSE9SVAlEdWFsQmVhY29uOjE7CisJVVNIT1JUCVN0YmNNY3M6NjsKKyNlbHNlCisJVVNIT1JUCVN0YmNNY3M6NjsKKwlVU0hPUlQJRHVhbEJlYWNvbjoxOworCVVTSE9SVAlEdWFsQ1RTUHJvdGVjdDoxOworCVVTSE9SVAlTVEJDQmVhY29uOjE7CisJVVNIT1JUCUxzaWdUeG9wUHJvdDoxOwkvLyBMLVNJRyBUWE9QIHByb3RlY3Rpb24gZnVsbCBzdXBwb3J0CisJVVNIT1JUCVBjb0FjdGl2ZToxOworCVVTSE9SVAlQY29QaGFzZToxOworCVVTSE9SVAlyc3Y6NDsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCit9IEFERF9IVElORk8zLCAqUEFERF9IVElORk8zOworCisjZGVmaW5lIFNJWkVfQUREX0hUX0lORk9fSUUJCTIyCit0eXBlZGVmIHN0cnVjdCAgUEFDS0VEeworCVVDSEFSCQkJCUNvbnRyb2xDaGFuOworCUFERF9IVElORk8JCQlBZGRIdEluZm87CisJQUREX0hUSU5GTzIJCQlBZGRIdEluZm8yOworCUFERF9IVElORk8zCQkJQWRkSHRJbmZvMzsKKwlVQ0hBUgkJCQlNQ1NTZXRbMTZdOwkJLy8gQmFzaWMgTUNTIHNldAorfSBBRERfSFRfSU5GT19JRSwgKlBBRERfSFRfSU5GT19JRTsKKwordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRHsKKwlVQ0hBUgkJCQlOZXdFeHRDaGFuT2Zmc2V0OworfSBORVdfRVhUX0NIQU5fSUUsICpQTkVXX0VYVF9DSEFOX0lFOworCisKKy8vIDQtYnl0ZSBIVEMgZmllbGQuICBtYXliZSBpbmNsdWRlZCBpbiBhbnkgZnJhbWUgZXhjZXB0IG5vbi1RT1MgZGF0YSBmcmFtZS4gIFRoZSBPcmRlciBiaXQgbXVzdCBzZXQgMS4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVJTlQzMgkJUkRHOjE7CS8vUkRHIC8gTW9yZSBQUERVCisgICAgVUlOVDMyCQlBQ0NvbnN0cmFpbnQ6MTsJLy9mZWVkYmFjayByZXF1ZXN0CisgICAgVUlOVDMyCQlyc3Y6NTsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCVpMRkFubm91Y2U6MTsJLy8gWkxGIGFubm91bmNlbWVudAorICAgIFVJTlQzMgkJQ1NJU1RFRVJJTkc6MjsJLy9DU0kvIFNURUVSSU5HCisgICAgVUlOVDMyCQlGQktSZXE6MjsJLy9mZWVkYmFjayByZXF1ZXN0CisgICAgVUlOVDMyCQlDYWxTZXE6MjsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCUNhbFBvczoyOwkvLyBjYWxpYnJhdGlvbiBwb3NpdGlvbgorICAgIFVJTlQzMgkJTUZCb3JBU0M6NzsJLy9MaW5rIGFkYXB0YXRpb24gZmVlZGJhY2sgY29udGFpbmluZyByZWNvbW1lbmRlZCBNQ1MuIDB4N2YgZm9yIG5vIGZlZWRiYWNrIG9yIG5vdCBhdmFpbGFibGUKKyAgICBVSU5UMzIJCU1GUzozOwkvL1NFVCB0byB0aGUgcmVjZWl2ZWQgdmFsdWUgb2YgTVJTLiAweDExMSBmb3IgdW5zb2xpY2l0ZWQgTUZCLgorICAgIFVJTlQzMgkJTVJTb3JBU0k6MzsJLy8gTVJRIFNlcXVlbmNlIGlkZW50aWZpZXIuIHVuY2hhbmdlZCBkdXJpbmcgZW50aXJlIHByb2NlZHVyZS4gMHgwMDAtMHgxMTAuCisgICAgVUlOVDMyCQlNUlE6MTsJLy9NQ1MgZmVlZGJhY2suIFJlcXVlc3QgZm9yIGEgTUNTIGZlZWRiYWNrCisgICAgVUlOVDMyCQlUUlE6MTsJLy9zb3VuZGluZyByZXF1ZXN0CisgICAgVUlOVDMyCQlNQToxOwkvL21hbmFnZW1lbnQgYWN0aW9uIHBheWxvYWQgZXhpc3QgaW4gKFFvUyBOdWxsK0hUQykKKyNlbHNlCisgICAgVUlOVDMyCQlNQToxOwkvL21hbmFnZW1lbnQgYWN0aW9uIHBheWxvYWQgZXhpc3QgaW4gKFFvUyBOdWxsK0hUQykKKyAgICBVSU5UMzIJCVRSUToxOwkvL3NvdW5kaW5nIHJlcXVlc3QKKyAgICBVSU5UMzIJCU1SUToxOwkvL01DUyBmZWVkYmFjay4gUmVxdWVzdCBmb3IgYSBNQ1MgZmVlZGJhY2sKKyAgICBVSU5UMzIJCU1SU29yQVNJOjM7CS8vIE1SUSBTZXF1ZW5jZSBpZGVudGlmaWVyLiB1bmNoYW5nZWQgZHVyaW5nIGVudGlyZSBwcm9jZWR1cmUuIDB4MDAwLTB4MTEwLgorICAgIFVJTlQzMgkJTUZTOjM7CS8vU0VUIHRvIHRoZSByZWNlaXZlZCB2YWx1ZSBvZiBNUlMuIDB4MTExIGZvciB1bnNvbGljaXRlZCBNRkIuCisgICAgVUlOVDMyCQlNRkJvckFTQzo3OwkvL0xpbmsgYWRhcHRhdGlvbiBmZWVkYmFjayBjb250YWluaW5nIHJlY29tbWVuZGVkIE1DUy4gMHg3ZiBmb3Igbm8gZmVlZGJhY2sgb3Igbm90IGF2YWlsYWJsZQorICAgIFVJTlQzMgkJQ2FsUG9zOjI7CS8vIGNhbGlicmF0aW9uIHBvc2l0aW9uCisgICAgVUlOVDMyCQlDYWxTZXE6MjsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCUZCS1JlcToyOwkvL2ZlZWRiYWNrIHJlcXVlc3QKKyAgICBVSU5UMzIJCUNTSVNURUVSSU5HOjI7CS8vQ1NJLyBTVEVFUklORworICAgIFVJTlQzMgkJWkxGQW5ub3VjZToxOwkvLyBaTEYgYW5ub3VuY2VtZW50CisgICAgVUlOVDMyCQlyc3Y6NTsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCUFDQ29uc3RyYWludDoxOwkvL2ZlZWRiYWNrIHJlcXVlc3QKKyAgICBVSU5UMzIJCVJERzoxOwkvL1JERyAvIE1vcmUgUFBEVQorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEhUX0NPTlRST0wsICpQSFRfQ09OVFJPTDsKKworLy8gMi1ieXRlIFFPUyBDT05UUk9MIGZpZWxkCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUeG9wX1F1ZXVlU2l6ZTo4OworICAgIFVTSE9SVCAgICAgIEFNc2R1UHJlc2VudDoxOworICAgIFVTSE9SVCAgICAgIEFja1BvbGljeToyOyAgLy8wOiBub3JtYWwgQUNLIDE6Tm8gQUNLIDI6c2NoZWR1bGVkIHVuZGVyIE1UQkEvUFNNUCAgMzogQkEKKyAgICBVU0hPUlQgICAgICBFT1NQOjE7CisgICAgVVNIT1JUICAgICAgVElEOjQ7CisjZWxzZQorICAgIFVTSE9SVCAgICAgIFRJRDo0OworICAgIFVTSE9SVCAgICAgIEVPU1A6MTsKKyAgICBVU0hPUlQgICAgICBBY2tQb2xpY3k6MjsgIC8vMDogbm9ybWFsIEFDSyAxOk5vIEFDSyAyOnNjaGVkdWxlZCB1bmRlciBNVEJBL1BTTVAgIDM6IEJBCisgICAgVVNIT1JUICAgICAgQU1zZHVQcmVzZW50OjE7CisgICAgVVNIT1JUICAgICAgVHhvcF9RdWV1ZVNpemU6ODsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBRT1NfQ09OVFJPTCwgKlBRT1NfQ09OVFJPTDsKKworLy8gMi1ieXRlIEZyYW1lIGNvbnRyb2wgZmllbGQKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVTSE9SVAkJT3JkZXI6MTsJCQkvLyBTdHJpY3Qgb3JkZXIgZXhwZWN0ZWQKKwlVU0hPUlQJCVdlcDoxOwkJCQkvLyBXZXAgZGF0YQorCVVTSE9SVAkJTW9yZURhdGE6MTsJCQkvLyBNb3JlIGRhdGEgYml0CisJVVNIT1JUCQlQd3JNZ210OjE7CQkJLy8gUG93ZXIgbWFuYWdlbWVudCBiaXQKKwlVU0hPUlQJCVJldHJ5OjE7CQkJLy8gUmV0cnkgc3RhdHVzIGJpdAorCVVTSE9SVAkJTW9yZUZyYWc6MTsJCQkvLyBNb3JlIGZyYWdtZW50IGJpdAorCVVTSE9SVAkJRnJEczoxOwkJCQkvLyBGcm9tIERTIGluZGljYXRpb24KKwlVU0hPUlQJCVRvRHM6MTsJCQkJLy8gVG8gRFMgaW5kaWNhdGlvbgorCVVTSE9SVAkJU3ViVHlwZTo0OwkJCS8vIE1TRFUgc3VidHlwZQorCVVTSE9SVAkJVHlwZToyOwkJCQkvLyBNU0RVIHR5cGUKKwlVU0hPUlQJCVZlcjoyOwkJCQkvLyBQcm90b2NvbCB2ZXJzaW9uCisjZWxzZQorCVVTSE9SVAkJVmVyOjI7CQkJCS8vIFByb3RvY29sIHZlcnNpb24KKwlVU0hPUlQJCVR5cGU6MjsJCQkJLy8gTVNEVSB0eXBlCisJVVNIT1JUCQlTdWJUeXBlOjQ7CQkJLy8gTVNEVSBzdWJ0eXBlCisJVVNIT1JUCQlUb0RzOjE7CQkJCS8vIFRvIERTIGluZGljYXRpb24KKwlVU0hPUlQJCUZyRHM6MTsJCQkJLy8gRnJvbSBEUyBpbmRpY2F0aW9uCisJVVNIT1JUCQlNb3JlRnJhZzoxOwkJCS8vIE1vcmUgZnJhZ21lbnQgYml0CisJVVNIT1JUCQlSZXRyeToxOwkJCS8vIFJldHJ5IHN0YXR1cyBiaXQKKwlVU0hPUlQJCVB3ck1nbXQ6MTsJCQkvLyBQb3dlciBtYW5hZ2VtZW50IGJpdAorCVVTSE9SVAkJTW9yZURhdGE6MTsJCQkvLyBNb3JlIGRhdGEgYml0CisJVVNIT1JUCQlXZXA6MTsJCQkJLy8gV2VwIGRhdGEKKwlVU0hPUlQJCU9yZGVyOjE7CQkJLy8gU3RyaWN0IG9yZGVyIGV4cGVjdGVkCisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gRlJBTUVfQ09OVFJPTCwgKlBGUkFNRV9DT05UUk9MOworCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX0hFQURFUl84MDJfMTEJeworICAgIEZSQU1FX0NPTlRST0wgICBGQzsKKyAgICBVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisgICAgVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisgICAgVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQlBZGRyM1tNQUNfQUREUl9MRU5dOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKwlVU0hPUlQJCQlGcmFnOjQ7CisjZWxzZQorCVVTSE9SVAkJCUZyYWc6NDsKKwlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworCVVDSEFSCQkJT2N0ZXRbMF07Cit9CUhFQURFUl84MDJfMTEsICpQSEVBREVSXzgwMl8xMTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV84MDJfMTEgeworICAgIEhFQURFUl84MDJfMTEgICBIZHI7CisgICAgVUNIQVIgICAgICAgICAgICBPY3RldFsxXTsKK30gICBGUkFNRV84MDJfMTEsICpQRlJBTUVfODAyXzExOworCisvLyBRb1NOdWxsIGVtYmVkZGluZyBvZiBtYW5hZ2VtZW50IGFjdGlvbi4gV2hlbiBIVCBDb250cm9sIE1BIGZpZWxkIHNldCB0byAxLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9NQV9CT0RZIHsKKyAgICBVQ0hBUiAgICAgICAgICAgIENhdGVnb3J5OworICAgIFVDSEFSICAgICAgICAgICAgQWN0aW9uOworICAgIFVDSEFSICAgICAgICAgICAgT2N0ZXRbMV07Cit9ICAgTUFfQk9EWSwgKlBNQV9CT0RZOworCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX0hFQURFUl84MDJfMwl7CisgICAgVUNIQVIgICAgICAgICAgIERBQWRkcjFbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgU0FBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBPY3RldFsyXTsKK30JSEVBREVSXzgwMl8zLCAqUEhFQURFUl84MDJfMzsKKy8vLy9CbG9jayBBQ0sgcmVsYXRlZCBmb3JtYXQKKy8vIDItYnl0ZSBCQSBQYXJhbWV0ZXIgIGZpZWxkICBpbiAJREVMQkEgZnJhbWVzIHRvIHRlcm1pbmF0ZSBhbiBhbHJlYWR5IHNldCB1cCBiQQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUSUQ6NDsJLy8gdmFsdWUgb2YgVEMgb3MgVFMKKyAgICBVU0hPUlQgICAgICBJbml0aWF0b3I6MTsJLy8gMTogb3JpZ2luYXRvciAgICAwOnJlY2lwaWVudAorICAgIFVTSE9SVCAgICAgIFJzdjoxMTsJLy8gYWx3YXlzIHNldCB0byAwCisjZWxzZQorICAgIFVTSE9SVCAgICAgIFJzdjoxMTsJLy8gYWx3YXlzIHNldCB0byAwCisgICAgVVNIT1JUICAgICAgSW5pdGlhdG9yOjE7CS8vIDE6IG9yaWdpbmF0b3IgICAgMDpyZWNpcGllbnQKKyAgICBVU0hPUlQgICAgICBUSUQ6NDsJLy8gdmFsdWUgb2YgVEMgb3MgVFMKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBERUxCQV9QQVJNLCAqUERFTEJBX1BBUk07CisKKy8vIDItYnl0ZSBCQSBQYXJhbWV0ZXIgU2V0IGZpZWxkICBpbiBBRERCQSBmcmFtZXMgdG8gc2lnbmFsIHBhcm0gZm9yIHNldHRpbmcgdXAgYSBCQQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgQnVmU2l6ZToxMDsJLy8gbnVtYmVyIG9mIGJ1ZmZlIG9mIHNpemUgMjMwNCBvY3RldHNyCisgICAgVVNIT1JUICAgICAgVElEOjQ7CS8vIHZhbHVlIG9mIFRDIG9zIFRTCisgICAgVVNIT1JUICAgICAgQkFQb2xpY3k6MTsJLy8gMTogaW1tZWRpYXRlbHkgQkEgICAgMDpkZWxheWVkIEJBCisgICAgVVNIT1JUICAgICAgQU1TRFVTdXBwb3J0ZWQ6MTsJLy8gMDogbm90IHBlcm1pdHRlZAkJMTogcGVybWl0dGVkCisjZWxzZQorICAgIFVTSE9SVCAgICAgIEFNU0RVU3VwcG9ydGVkOjE7CS8vIDA6IG5vdCBwZXJtaXR0ZWQJCTE6IHBlcm1pdHRlZAorICAgIFVTSE9SVCAgICAgIEJBUG9saWN5OjE7CS8vIDE6IGltbWVkaWF0ZWx5IEJBICAgIDA6ZGVsYXllZCBCQQorICAgIFVTSE9SVCAgICAgIFRJRDo0OwkvLyB2YWx1ZSBvZiBUQyBvcyBUUworICAgIFVTSE9SVCAgICAgIEJ1ZlNpemU6MTA7CS8vIG51bWJlciBvZiBidWZmZSBvZiBzaXplIDIzMDQgb2N0ZXRzcgorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEJBX1BBUk0sICpQQkFfUEFSTTsKKworLy8gMi1ieXRlIEJBIFN0YXJ0aW5nIFNlcSBDT05UUk9MIGZpZWxkCit0eXBlZGVmIHVuaW9uIFBBQ0tFRCB7CisgICAgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIFN0YXJ0U2VxOjEyOyAgIC8vIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgMXN0IE1TRFUgZm9yIHdoaWNoIHRoaXMgQkFSIGlzIHNlbnQKKwlVU0hPUlQgICAgICBGcmFnTnVtOjQ7CS8vIGFsd2F5cyBzZXQgdG8gMAorI2Vsc2UKKyAgICBVU0hPUlQgICAgICBGcmFnTnVtOjQ7CS8vIGFsd2F5cyBzZXQgdG8gMAorCVVTSE9SVCAgICAgIFN0YXJ0U2VxOjEyOyAgIC8vIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgMXN0IE1TRFUgZm9yIHdoaWNoIHRoaXMgQkFSIGlzIHNlbnQKKyNlbmRpZiAvKiBSVF9CSUdfRU5ESUFOICovCisgICAgfSAgIGZpZWxkOworICAgIFVTSE9SVCAgICAgICAgICAgd29yZDsKK30gQkFTRVFfQ09OVFJPTCwgKlBCQVNFUV9DT05UUk9MOworCisvL0JBQ29udHJvbCBhbmQgQkFSQ29udHJvbCBhcmUgdGhlIHNhbWUKKy8vIDItYnl0ZSBCQSBDT05UUk9MIGZpZWxkIGluIEJBIGZyYW1lCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUSUQ6NDsKKyAgICBVU0hPUlQgICAgICBSc3Y6OTsKKyAgICBVU0hPUlQgICAgICBDb21wcmVzc2VkOjE7CisgICAgVVNIT1JUICAgICAgTVRJRDoxOwkJLy9FV0MgVjEuMjQKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsgLy8gb25seSByZWxhdGVkIHRvIE4tRGVsYXllZCBCQS4gQnV0IG5vdCBzdXBwb3J0IGluIFJUMjg2MGIuIDA6Tm9ybWFsQUNLICAxOk5vIEFDSworI2Vsc2UKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsgLy8gb25seSByZWxhdGVkIHRvIE4tRGVsYXllZCBCQS4gQnV0IG5vdCBzdXBwb3J0IGluIFJUMjg2MGIuIDA6Tm9ybWFsQUNLICAxOk5vIEFDSworICAgIFVTSE9SVCAgICAgIE1USUQ6MTsJCS8vRVdDIFYxLjI0CisgICAgVVNIT1JUICAgICAgQ29tcHJlc3NlZDoxOworICAgIFVTSE9SVCAgICAgIFJzdjo5OworICAgIFVTSE9SVCAgICAgIFRJRDo0OworI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEJBX0NPTlRST0wsICpQQkFfQ09OVFJPTDsKKworLy8gMi1ieXRlIEJBUiBDT05UUk9MIGZpZWxkIGluIEJBUiBmcmFtZQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgVElEOjQ7CisgICAgVVNIT1JUICAgICAgUnN2MTo5OworICAgIFVTSE9SVCAgICAgIENvbXByZXNzZWQ6MTsKKyAgICBVU0hPUlQgICAgICBNVElEOjE7CQkvL2lmIHRoaXMgYml0MSwgdXNlICBGUkFNRV9NVEJBX1JFUSwgIGlmIDAsIHVzZSBGUkFNRV9CQV9SRVEKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsKKyNlbHNlCisgICAgVVNIT1JUICAgICAgQUNLUG9saWN5OjE7IC8vIDA6bm9ybWFsIGFjaywgIDE6bm8gYWNrLgorICAgIFVTSE9SVCAgICAgIE1USUQ6MTsJCS8vaWYgdGhpcyBiaXQxLCB1c2UgIEZSQU1FX01UQkFfUkVRLCAgaWYgMCwgdXNlIEZSQU1FX0JBX1JFUQorICAgIFVTSE9SVCAgICAgIENvbXByZXNzZWQ6MTsKKyAgICBVU0hPUlQgICAgICBSc3YxOjk7CisgICAgVVNIT1JUICAgICAgVElEOjQ7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gQkFSX0NPTlRST0wsICpQQkFSX0NPTlRST0w7CisKKy8vIEJBUkNvbnRyb2wgaW4gTVRCQVIgZnJhbWUKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIE51bVRJRDo0OworICAgIFVTSE9SVCAgICAgIFJzdjE6OTsKKyAgICBVU0hPUlQgICAgICBDb21wcmVzc2VkOjE7CisgICAgVVNIT1JUICAgICAgTVRJRDoxOworICAgIFVTSE9SVCAgICAgIEFDS1BvbGljeToxOworI2Vsc2UKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsKKyAgICBVU0hPUlQgICAgICBNVElEOjE7CisgICAgVVNIT1JUICAgICAgQ29tcHJlc3NlZDoxOworICAgIFVTSE9SVCAgICAgIFJzdjE6OTsKKyAgICBVU0hPUlQgICAgICBOdW1USUQ6NDsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBNVEJBUl9DT05UUk9MLCAqUE1UQkFSX0NPTlRST0w7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIFRJRDo0OworICAgIFVTSE9SVCAgICAgIFJzdjE6MTI7CisjZWxzZQorICAgIFVTSE9SVCAgICAgIFJzdjE6MTI7CisgICAgVVNIT1JUICAgICAgVElEOjQ7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gUEVSX1RJRF9JTkZPLCAqUFBFUl9USURfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVBFUl9USURfSU5GTyAgICAgIFBlclRJRDsKKwlCQVNFUV9DT05UUk9MIAkgQkFTdGFydGluZ1NlcTsKK30gRUFDSF9USUQsICpQRUFDSF9USUQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9QU1BPTExfRlJBTUUgeworICAgIEZSQU1FX0NPTlRST0wgICBGQzsKKyAgICBVU0hPUlQgICAgICAgICAgQWlkOworICAgIFVDSEFSICAgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBUYVtNQUNfQUREUl9MRU5dOworfSAgIFBTUE9MTF9GUkFNRSwgKlBQU1BPTExfRlJBTUU7CisKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfUlRTX0ZSQU1FCXsKKyAgICBGUkFNRV9DT05UUk9MICAgRkM7CisgICAgVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworICAgIFVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworfVJUU19GUkFNRSwgKlBSVFNfRlJBTUU7CisKKy8vIEJBUkVRIEFORCBNVEJBUkVRIGhhdmUgdGhlIHNhbWUgc3VidHlwZSBCQVIsIDgwMi4xMW4gQkFSIHVzZSBjb21wcmVzc2VkIGJpdG1hcC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQkFfUkVRIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJBUl9DT05UUk9MICBCQVJDb250cm9sOworCUJBU0VRX0NPTlRST0wgCSBCQVN0YXJ0aW5nU2VxOworfSAgIEZSQU1FX0JBX1JFUSwgKlBGUkFNRV9CQV9SRVE7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfTVRCQV9SRVEgeworCUZSQU1FX0NPTlRST0wgICBGQzsKKwlVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisJVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJTVRCQVJfQ09OVFJPTCAgTVRCQVJDb250cm9sOworCVBFUl9USURfSU5GTwlQZXJUSURJbmZvOworCUJBU0VRX0NPTlRST0wgCSBCQVN0YXJ0aW5nU2VxOworfSAgIEZSQU1FX01UQkFfUkVRLCAqUEZSQU1FX01UQkFfUkVROworCisvLyBDb21wcmVzc2VkIGZvcm1hdCBpcyBtYW5kYW50b3J5IGluIEhUIFNUQQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9NVEJBIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJBX0NPTlRST0wgIEJBQ29udHJvbDsKKwlCQVNFUV9DT05UUk9MIAkgQkFTdGFydGluZ1NlcTsKKwlVQ0hBUgkJQml0TWFwWzhdOworfSAgIEZSQU1FX01UQkEsICpQRlJBTUVfTVRCQTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9QU01QX0FDVElPTiB7CisJSEVBREVSXzgwMl8xMSAgIEhkcjsKKwlVQ0hBUglDYXRlZ29yeTsKKwlVQ0hBUglBY3Rpb247CisJVUNIQVIJUHNtcDsJLy8gNy4zLjEuMjUKK30gICBGUkFNRV9QU01QX0FDVElPTiwgKlBGUkFNRV9QU01QX0FDVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9BQ1RJT05fSERSIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKK30gICBGUkFNRV9BQ1RJT05fSERSLCAqUEZSQU1FX0FDVElPTl9IRFI7CisKKy8vQWN0aW9uIEZyYW1lCisvL0FjdGlvbiBGcmFtZSAgQ2F0ZWdvcnk6U3BlY3RydW0sICBBY3Rpb246Q2hhbm5lbCBTd2l0Y2guIDcuMy4yLjIwCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0NIQU5fU1dJVENIX0FOTk9VTkNFIHsKKwlVQ0hBUgkJCQkJRWxlbWVudElEOwkvLyBJRCA9IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVCA9IDM3CisJVUNIQVIJCQkJCUxlbjsKKwlDSEFfU1dJVENIX0FOTk9VTkNFX0lFCUNTQW5ub3VuY2VJZTsKK30gICBDSEFOX1NXSVRDSF9BTk5PVU5DRSwgKlBDSEFOX1NXSVRDSF9BTk5PVU5DRTsKKworCisvLzgwMi4xMW4gOiA3LjMuMi4yMGEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfU0VDT05EX0NIQU5fT0ZGU0VUIHsKKwlVQ0hBUgkJCQlFbGVtZW50SUQ7CQkvLyBJRCA9IElFX1NFQ09OREFSWV9DSF9PRkZTRVQgPSA2MgorCVVDSEFSCQkJCUxlbjsKKwlTRUNfQ0hBX09GRlNFVF9JRQlTZWNDaE9mZnNldEllOworfSAgIFNFQ09ORF9DSEFOX09GRlNFVCwgKlBTRUNPTkRfQ0hBTl9PRkZTRVQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9TUEVUUlVNX0NTIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKKwlDSEFOX1NXSVRDSF9BTk5PVU5DRQlDU0Fubm91bmNlOworCVNFQ09ORF9DSEFOX09GRlNFVAkJU2Vjb25kQ2hhbm5lbDsKK30gICBGUkFNRV9TUEVUUlVNX0NTLCAqUEZSQU1FX1NQRVRSVU1fQ1M7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9BRERCQV9SRVEgeworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCVVDSEFSCVRva2VuOwkvLyAxCisJQkFfUEFSTQkJQmFQYXJtOwkgICAgICAvLyAgMiAtIDEwCisJVVNIT1JUCQlUaW1lT3V0VmFsdWU7CS8vIDAgLSAwCisJQkFTRVFfQ09OVFJPTAlCYVN0YXJ0U2VxOyAvLyAwLTAKK30gICBGUkFNRV9BRERCQV9SRVEsICpQRlJBTUVfQUREQkFfUkVROworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX0FEREJBX1JTUCB7CisJSEVBREVSXzgwMl8xMSAgIEhkcjsKKwlVQ0hBUglDYXRlZ29yeTsKKwlVQ0hBUglBY3Rpb247CisJVUNIQVIJVG9rZW47CisJVVNIT1JUCVN0YXR1c0NvZGU7CisJQkFfUEFSTQkJQmFQYXJtOyAvLzAgLSAyCisJVVNIT1JUCQlUaW1lT3V0VmFsdWU7Cit9ICAgRlJBTUVfQUREQkFfUlNQLCAqUEZSQU1FX0FEREJBX1JTUDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9ERUxCQV9SRVEgeworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCURFTEJBX1BBUk0JCURlbGJhUGFybTsKKwlVU0hPUlQJUmVhc29uQ29kZTsKK30gICBGUkFNRV9ERUxCQV9SRVEsICpQRlJBTUVfREVMQkFfUkVROworCisKKy8vNy4yLjEuNwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9CQVIgeworCUZSQU1FX0NPTlRST0wgICBGQzsKKwlVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisJVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJQkFSX0NPTlRST0wJCUJhckNvbnRyb2w7CisJQkFTRVFfQ09OVFJPTAlTdGFydGluZ1NlcTsKK30gICBGUkFNRV9CQVIsICpQRlJBTUVfQkFSOworCisvLzcuMi4xLjcKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQkEgeworCUZSQU1FX0NPTlRST0wgICBGQzsKKwlVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisJVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJQkFSX0NPTlRST0wJCUJhckNvbnRyb2w7CisJQkFTRVFfQ09OVFJPTAlTdGFydGluZ1NlcTsKKwlVQ0hBUgkJYml0bWFza1s4XTsKK30gICBGUkFNRV9CQSwgKlBGUkFNRV9CQTsKKworCisvLyBSYWRpbyBNZWFzdWVtZW50IFJlcXVlc3QgRnJhbWUgRm9ybWF0Cit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX1JNX1JFUV9BQ1RJT04geworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCVVDSEFSCVRva2VuOworCVVTSE9SVAlSZXBldGl0aW9uOworCVVDSEFSICAgZGF0YVswXTsKK30gICBGUkFNRV9STV9SRVFfQUNUSU9OLCAqUEZSQU1FX1JNX1JFUV9BQ1RJT047CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisJVUNIQVIJCUlEOworCVVDSEFSCQlMZW5ndGg7CisJVUNIQVIJCUNoYW5uZWxTd2l0Y2hNb2RlOworCVVDSEFSCQlOZXdSZWdDbGFzczsKKwlVQ0hBUgkJTmV3Q2hhbm5lbE51bTsKKwlVQ0hBUgkJQ2hhbm5lbFN3aXRjaENvdW50OworfSBIVF9FWFRfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UX0lFLCAqUEhUX0VYVF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlRfSUU7CisKKworLy8KKy8vIF9MaW1pdCBtdXN0IGJlIHRoZSAyKipuIC0gMQorLy8gX1NFUTEgLCBfU0VRMiBtdXN0IGJlIHdpdGhpbiAwIH4gX0xpbWl0CisvLworI2RlZmluZSBTRVFfU1RFUE9ORShfU0VRMSwgX1NFUTIsIF9MaW1pdCkJKChfU0VRMSA9PSAoKF9TRVEyKzEpICYgX0xpbWl0KSkpCisjZGVmaW5lIFNFUV9TTUFMTEVSKF9TRVExLCBfU0VRMiwgX0xpbWl0KQkoKChfU0VRMS1fU0VRMikgJiAoKF9MaW1pdCsxKT4+MSkpKQorI2RlZmluZSBTRVFfTEFSR0VSKF9TRVExLCBfU0VRMiwgX0xpbWl0KQkoKF9TRVExICE9IF9TRVEyKSAmJiAhKCgoX1NFUTEtX1NFUTIpICYgKChfTGltaXQrMSk+PjEpKSkpCisjZGVmaW5lIFNFUV9XSVRISU5fV0lOKF9TRVExLCBfU0VRMiwgX1dJTiwgX0xpbWl0KSAoU0VRX0xBUkdFUihfU0VRMSwgX1NFUTIsIF9MaW1pdCkgJiYgIFwKKwkJCQkJCQkJCQkJCVNFUV9TTUFMTEVSKF9TRVExLCAoKF9TRVEyK19XSU4rMSkmX0xpbWl0KSwgX0xpbWl0KSkKKworLy8KKy8vIENvbnRlbnRpb24tZnJlZSBwYXJhbWV0ZXIgKHdpdGhvdXQgSUQgYW5kIExlbmd0aCkKKy8vCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIFVDSEFSICAgICAgIENmcENvdW50OworICAgIFVDSEFSICAgICAgIENmcFBlcmlvZDsKKyAgICBVU0hPUlQgICAgICBDZnBNYXhEdXJhdGlvbjsKKyAgICBVU0hPUlQgICAgICBDZnBEdXJSZW1haW5pbmc7Cit9IENGX1BBUk0sICpQQ0ZfUEFSTTsKKwordHlwZWRlZglzdHJ1Y3QJX0NJUEhFUl9TVUlURQl7CisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJUGFpckNpcGhlcjsJCS8vIFVuaWNhc3QgY2lwaGVyIDEsIHRoaXMgb25lIGhhcyBtb3JlIHNlY3VyZWQgY2lwaGVyIHN1aXRlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJUGFpckNpcGhlckF1eDsJLy8gVW5pY2FzdCBjaXBoZXIgMiBpZiBBUCBhbm5vdW5jZSB0d28gdW5pY2FzdCBjaXBoZXIgc3VpdGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwlHcm91cENpcGhlcjsJLy8gR3JvdXAgY2lwaGVyCisJVVNIT1JUCQkJCQkJCVJzbkNhcGFiaWxpdHk7CS8vIFJTTiBjYXBhYmlsaXR5IGZyb20gYmVhY29uCisJQk9PTEVBTgkJCQkJCQliTWl4TW9kZTsJCS8vIEluZGljYXRlIFBhaXIgJiBHcm91cCBjaXBoZXIgbWlnaHQgYmUgZGlmZmVyZW50Cit9CUNJUEhFUl9TVUlURSwgKlBDSVBIRVJfU1VJVEU7CisKKy8vIEVEQ0EgY29uZmlndXJhdGlvbiBmcm9tIEFQJ3MgQkVBQ09OL1Byb2JlUnNwCit0eXBlZGVmIHN0cnVjdCB7CisgICAgQk9PTEVBTiAgICAgYlZhbGlkOyAgICAgICAgIC8vIDE6IHZhcmlhYmxlIGNvbnRhaW5zIHZhbGlkIHZhbHVlCisgICAgQk9PTEVBTiAgICAgYkFkZDsgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIEJPT0xFQU4gICAgIGJRQWNrOworICAgIEJPT0xFQU4gICAgIGJRdWV1ZVJlcXVlc3Q7CisgICAgQk9PTEVBTiAgICAgYlR4b3BSZXF1ZXN0OworICAgIEJPT0xFQU4gICAgIGJBUFNEQ2FwYWJsZTsKKy8vICBCT09MRUFOICAgICBiTW9yZURhdGFBY2s7CisgICAgVUNIQVIgICAgICAgRWRjYVVwZGF0ZUNvdW50OworICAgIFVDSEFSICAgICAgIEFpZnNuWzRdOyAgICAgICAvLyAwOkFDX0JLLCAxOkFDX0JFLCAyOkFDX1ZJLCAzOkFDX1ZPCisgICAgVUNIQVIgICAgICAgQ3dtaW5bNF07CisgICAgVUNIQVIgICAgICAgQ3dtYXhbNF07CisgICAgVVNIT1JUICAgICAgVHhvcFs0XTsgICAgICAvLyBpbiB1bml0IG9mIDMyLXVzCisgICAgQk9PTEVBTiAgICAgYkFDTVs0XTsgICAgICAvLyAxOiBBZG1pc3Npb24gQ29udHJvbCBvZiBBQ19CSyBpcyBtYW5kYXR0b3J5Cit9IEVEQ0FfUEFSTSwgKlBFRENBX1BBUk07CisKKy8vIFFCU1MgTE9BRCBpbmZvcm1hdGlvbiBmcm9tIFFBUCdzIEJFQUNPTi9Qcm9iZVJzcAordHlwZWRlZiBzdHJ1Y3QgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAgICAgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIFVTSE9SVCAgICAgIFN0YU51bTsKKyAgICBVQ0hBUiAgICAgICBDaGFubmVsVXRpbGl6YXRpb247CisgICAgVVNIT1JUICAgICAgUmVtYWluaW5nQWRtaXNzaW9uQ29udHJvbDsgIC8vIGluIHVuaXQgb2YgMzItdXMKK30gUUJTU19MT0FEX1BBUk0sICpQUUJTU19MT0FEX1BBUk07CisKKy8vIFFCU1MgSW5mbyBmaWVsZCBpbiBRU1RBJ3MgYXNzb2MgcmVxCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUgkJUnN2MjoxOworCVVDSEFSCQlNYXhTUExlbmd0aDoyOworCVVDSEFSCQlSc3YxOjE7CisJVUNIQVIJCVVBUFNEX0FDX0JFOjE7CisJVUNIQVIJCVVBUFNEX0FDX0JLOjE7CisJVUNIQVIJCVVBUFNEX0FDX1ZJOjE7CisJVUNIQVIJCVVBUFNEX0FDX1ZPOjE7CisjZWxzZQorICAgIFVDSEFSCQlVQVBTRF9BQ19WTzoxOworCVVDSEFSCQlVQVBTRF9BQ19WSToxOworCVVDSEFSCQlVQVBTRF9BQ19CSzoxOworCVVDSEFSCQlVQVBTRF9BQ19CRToxOworCVVDSEFSCQlSc3YxOjE7CisJVUNIQVIJCU1heFNQTGVuZ3RoOjI7CisJVUNIQVIJCVJzdjI6MTsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBRQlNTX1NUQV9JTkZPX1BBUk0sICpQUUJTU19TVEFfSU5GT19QQVJNOworCisvLyBRQlNTIEluZm8gZmllbGQgaW4gUUFQJ3MgQmVhY29uL1Byb2JlUnNwCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUgkJVUFQU0Q6MTsKKwlVQ0hBUgkJUnN2OjM7CisgICAgVUNIQVIJCVBhcmFtU2V0Q291bnQ6NDsKKyNlbHNlCisgICAgVUNIQVIJCVBhcmFtU2V0Q291bnQ6NDsKKwlVQ0hBUgkJUnN2OjM7CisJVUNIQVIJCVVBUFNEOjE7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gUUJTU19BUF9JTkZPX1BBUk0sICpQUUJTU19BUF9JTkZPX1BBUk07CisKKy8vIFFPUyBDYXBhYmlsaXR5IHJlcG9ydGVkIGluIFFBUCdzIEJFQUNPTi9Qcm9iZVJzcAorLy8gUU9TIENhcGFiaWxpdHkgc2VudCBvdXQgaW4gUVNUQSdzIEFzc29jaWF0ZVJlcS9SZUFzc29jaWF0ZVJlcQordHlwZWRlZiBzdHJ1Y3QgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAgICAgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIEJPT0xFQU4gICAgIGJRQWNrOworICAgIEJPT0xFQU4gICAgIGJRdWV1ZVJlcXVlc3Q7CisgICAgQk9PTEVBTiAgICAgYlR4b3BSZXF1ZXN0OworLy8gIEJPT0xFQU4gICAgIGJNb3JlRGF0YUFjazsKKyAgICBVQ0hBUiAgICAgICBFZGNhVXBkYXRlQ291bnQ7Cit9IFFPU19DQVBBQklMSVRZX1BBUk0sICpQUU9TX0NBUEFCSUxJVFlfUEFSTTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QgeworICAgIFVDSEFSICAgICAgIElFTGVuOworICAgIFVDSEFSICAgICAgIElFW01BWF9DVVNUT01fTEVOXTsKK30gV1BBX0lFXzsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVUNIQVIgICBCc3NpZFtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgQ2hhbm5lbDsKKwlVQ0hBUiAgIENlbnRyYWxDaGFubmVsOwkvL1N0b3JlIHRoZSB3aWRlLWJhbmQgY2VudHJhbCBjaGFubmVsIGZvciA0ME1Iei4gIC51c2VkIGluIDQwTUh6IEFQLiBPciB0aGlzIGlzIHRoZSBzYW1lIGFzIENoYW5uZWwuCisgICAgVUNIQVIgICBCc3NUeXBlOworICAgIFVTSE9SVCAgQXRpbVdpbjsKKyAgICBVU0hPUlQgIEJlYWNvblBlcmlvZDsKKworICAgIFVDSEFSICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisgICAgVUNIQVIgICBTdXBSYXRlTGVuOworICAgIFVDSEFSICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisgICAgVUNIQVIgICBFeHRSYXRlTGVuOworCUhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5OworCVVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuOworCUFERF9IVF9JTkZPX0lFIEFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlBZGRIdEluZm9MZW47CisJVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0OworCUNIQVIgICAgUnNzaTsKKyAgICBVQ0hBUiAgIFByaXZhY3k7CQkJLy8gSW5kaWNhdGUgc2VjdXJpdHkgZnVuY3Rpb24gT04vT0ZGLiBEb24ndCBtZXNzIHVwIHdpdGggYXV0aCBtb2RlLgorCVVDSEFSCUhpZGRlbjsKKworICAgIFVTSE9SVCAgRHRpbVBlcmlvZDsKKyAgICBVU0hPUlQgIENhcGFiaWxpdHlJbmZvOworCisgICAgVVNIT1JUICBDZnBDb3VudDsKKyAgICBVU0hPUlQgIENmcFBlcmlvZDsKKyAgICBVU0hPUlQgIENmcE1heER1cmF0aW9uOworICAgIFVTSE9SVCAgQ2ZwRHVyUmVtYWluaW5nOworICAgIFVDSEFSICAgU3NpZExlbjsKKyAgICBDSEFSICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKworICAgIFVMT05HICAgTGFzdEJlYWNvblJ4VGltZTsgLy8gT1MncyB0aW1lc3RhbXAKKworCUJPT0xFQU4JYlNFUzsKKworCS8vIE5ldyBmb3IgV1BBMgorCUNJUEhFUl9TVUlURQkJCQkJV1BBOwkJCS8vIEFQIGFubm91bmNlZCBXUEEgY2lwaGVyIHN1aXRlCisJQ0lQSEVSX1NVSVRFCQkJCQlXUEEyOwkJCS8vIEFQIGFubm91bmNlZCBXUEEyIGNpcGhlciBzdWl0ZQorCisJLy8gTmV3IGZvciBtaWNyb3NvZnQgV1BBIHN1cHBvcnQKKwlORElTXzgwMl8xMV9GSVhFRF9JRXMJRml4SUVzOworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJQXV0aE1vZGVBdXg7CS8vIEFkZGl0aW9uIG1vZGUgZm9yIFdQQTIgLyBXUEEgY2FwYWJsZSBBUAorCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJQXV0aE1vZGU7CisJTkRJU184MDJfMTFfV0VQX1NUQVRVUwlXZXBTdGF0dXM7CQkJCS8vIFVuaWNhc3QgRW5jcnlwdGlvbiBBbGdvcml0aG0gZXh0cmFjdCBmcm9tIFZBUl9JRQorCVVTSE9SVAkJCQkJVmFySUVMZW47CQkJCS8vIExlbmd0aCBvZiBuZXh0IFZJRSBpbmNsdWRlIEVJRCAmIExlbmd0aAorCVVDSEFSCQkJCQlWYXJJRXNbTUFYX1ZJRV9MRU5dOworCisJLy8gQ0NYIENraXAgaW5mb3JtYXRpb24KKyAgICBVQ0hBUiAgIENraXBGbGFnOworCisJLy8gQ0NYIDIgVFNGCisJVUNIQVIJUFRTRls0XTsJCS8vIFBhcmVudCBUU0YKKwlVQ0hBUglUVFNGWzhdOwkJLy8gVGFyZ2V0IFRTRgorCisgICAgLy8gODAyLjExZSBkOSwgYW5kIFdNTQorCUVEQ0FfUEFSTSAgICAgICAgICAgRWRjYVBhcm07CisJUU9TX0NBUEFCSUxJVFlfUEFSTSBRb3NDYXBhYmlsaXR5OworCVFCU1NfTE9BRF9QQVJNICAgICAgUWJzc0xvYWQ7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgV1BBX0lFXyAgICAgV3BhSUU7CisgICAgV1BBX0lFXyAgICAgUnNuSUU7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCVVDSEFSCQlDb3VudHJ5U3RyaW5nWzNdOworCUJPT0xFQU4JCWJIYXNDb3VudHJ5SUU7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfSBCU1NfRU5UUlksICpQQlNTX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVUNIQVIgICAgICAgICAgIEJzc05yOworICAgIFVDSEFSICAgICAgICAgICBCc3NPdmVybGFwTnI7CisgICAgQlNTX0VOVFJZICAgICAgIEJzc0VudHJ5W01BWF9MRU5fT0ZfQlNTX1RBQkxFXTsKK30gQlNTX1RBQkxFLCAqUEJTU19UQUJMRTsKKworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9RVUVVRV9FTEVNIHsKKyAgICBVTE9ORyAgICAgICAgICAgICBNYWNoaW5lOworICAgIFVMT05HICAgICAgICAgICAgIE1zZ1R5cGU7CisgICAgVUxPTkcgICAgICAgICAgICAgTXNnTGVuOworICAgIFVDSEFSICAgICAgICAgICAgIE1zZ1tNR01UX0RNQV9CVUZGRVJfU0laRV07CisgICAgTEFSR0VfSU5URUdFUiAgICAgVGltZVN0YW1wOworICAgIFVDSEFSICAgICAgICAgICAgIFJzc2kwOworICAgIFVDSEFSICAgICAgICAgICAgIFJzc2kxOworICAgIFVDSEFSICAgICAgICAgICAgIFJzc2kyOworICAgIFVDSEFSICAgICAgICAgICAgIFNpZ25hbDsKKyAgICBVQ0hBUiAgICAgICAgICAgICBDaGFubmVsOworICAgIFVDSEFSICAgICAgICAgICAgIFdjaWQ7CisgICAgQk9PTEVBTiAgICAgICAgICAgT2NjdXBpZWQ7CisjaWZkZWYgTUxNRV9FWAorCVVTSE9SVCAgICAgICAgICAgIElkeDsKKyNlbmRpZiAvLyBNTE1FX0VYIC8vCit9IE1MTUVfUVVFVUVfRUxFTSwgKlBNTE1FX1FVRVVFX0VMRU07CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX1FVRVVFIHsKKyAgICBVTE9ORyAgICAgICAgICAgICBOdW07CisgICAgVUxPTkcgICAgICAgICAgICAgSGVhZDsKKyAgICBVTE9ORyAgICAgICAgICAgICBUYWlsOworICAgIE5ESVNfU1BJTl9MT0NLICAgTG9jazsKKyAgICBNTE1FX1FVRVVFX0VMRU0gIEVudHJ5W01BWF9MRU5fT0ZfTUxNRV9RVUVVRV07Cit9IE1MTUVfUVVFVUUsICpQTUxNRV9RVUVVRTsKKwordHlwZWRlZiBWT0lEICgqU1RBVEVfTUFDSElORV9GVU5DKShWT0lEICpBZGFwdG9yLCBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCit0eXBlZGVmIHN0cnVjdCBfU1RBVEVfTUFDSElORSB7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgTnJTdGF0ZTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5yTXNnOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VyclN0YXRlOworICAgIFNUQVRFX01BQ0hJTkVfRlVOQyAgICAgICAgICAgICAqVHJhbnNGdW5jOworfSBTVEFURV9NQUNISU5FLCAqUFNUQVRFX01BQ0hJTkU7CisKKworLy8gTUxNRSBBVVggZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkIHRlbXBvcmFybGl5IHNldHRpbmdzIGR1cmluZyBhIGNvbm5lY3Rpb24gYXR0ZW1wdC4KKy8vIE9uY2UgdGhpcyBhdHRlbXAgc3VjY2VlZHMsIGFsbCBzZXR0aW5ncyB3aWxsIGJlIGNvcHkgdG8gcEFkLT5TdGFBY3RpdmUuCisvLyBBIGNvbm5lY3Rpb24gYXR0ZW1wdCAodXNlciBzZXQgT0lELCByb2FtaW5nLCBDQ1ggZmFzdCByb2FtaW5nLC4uKSBjb25zaXN0cyBvZgorLy8gc2V2ZXJhbCBzdGVwcyAoSk9JTiwgQVVUSCwgQVNTT0Mgb3IgUkVBU1NPQykgYW5kIG1heSBmYWlsIGF0IGFueSBzdGVwLiBXZSBwdXJwb3NlbHkKKy8vIHNlcGFyYXRlIHRoaXMgdW5kZXItdHJpYWwgc2V0dGluZ3MgYXdheSBmcm9tIHBBZC0+U3RhQWN0aXZlIHNvIHRoYXQgb25jZQorLy8gdGhpcyBuZXcgYXR0ZW1wdCBmYWlsZWQsIGRyaXZlciBjYW4gYXV0by1yZWNvdmVyIGJhY2sgdG8gdGhlIGFjdGl2ZSBzZXR0aW5ncy4KK3R5cGVkZWYgc3RydWN0IF9NTE1FX0FVWCB7CisgICAgVUNIQVIgICAgICAgICAgICAgICBCc3NUeXBlOworICAgIFVDSEFSICAgICAgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworICAgIFVDSEFSICAgICAgICAgICAgICAgU3NpZExlbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEJzc2lkW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQkJQXV0b1JlY29ubmVjdFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKwlVQ0hBUgkJCQlBdXRvUmVjb25uZWN0U3NpZExlbjsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIEFsZzsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIFNjYW5UeXBlOworICAgIFVDSEFSICAgICAgICAgICAgICAgQ2hhbm5lbDsKKwlVQ0hBUiAgICAgICAgICAgICAgIENlbnRyYWxDaGFubmVsOworICAgIFVTSE9SVCAgICAgICAgICAgICAgQWlkOworICAgIFVTSE9SVCAgICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm87CisgICAgVVNIT1JUICAgICAgICAgICAgICBCZWFjb25QZXJpb2Q7CisgICAgVVNIT1JUICAgICAgICAgICAgICBDZnBNYXhEdXJhdGlvbjsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIENmcFBlcmlvZDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIEF0aW1XaW47CisKKwkvLyBDb3B5IHN1cHBvcnRlZCByYXRlIGZyb20gZGVzaXJlZCBBUCdzIGJlYWNvbi4gV2UgYXJlIHRyeWluZyB0byBtYXRjaAorCS8vIEFQJ3Mgc3VwcG9ydGVkIGFuZCBleHRlbmRlZCByYXRlIHNldHRpbmdzLgorCVVDSEFSCQkgICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkgICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkgICAgICAgIFN1cFJhdGVMZW47CisJVUNIQVIJCSAgICAgICAgRXh0UmF0ZUxlbjsKKwlIVF9DQVBBQklMSVRZX0lFCQlIdENhcGFiaWxpdHk7CisJVUNIQVIJCSAgICAgICAgCUh0Q2FwYWJpbGl0eUxlbjsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQ7CisJLy9SVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworCisgICAgLy8gbmV3IGZvciBRT1MKKyAgICBRT1NfQ0FQQUJJTElUWV9QQVJNIEFQUW9zQ2FwYWJpbGl0eTsgICAgLy8gUU9TIGNhcGFiaWxpdHkgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUAorICAgIEVEQ0FfUEFSTSAgICAgICAgICAgQVBFZGNhUGFybTsgICAgICAgICAvLyBFRENBIHBhcmFtZXRlcnMgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUAorICAgIFFCU1NfTE9BRF9QQVJNICAgICAgQVBRYnNzTG9hZDsgICAgICAgICAvLyBRQlNTIGxvYWQgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUAorCisgICAgLy8gbmV3IHRvIGtlZXAgUmFsaW5rIHNwZWNpZmljIGZlYXR1cmUKKyAgICBVTE9ORyAgICAgICAgICAgICAgIEFQUmFsaW5rSWU7CisKKyAgICBCU1NfVEFCTEUgICAgICAgICAgIFNzaWRCc3NUYWI7ICAgICAvLyBBUCBsaXN0IGZvciB0aGUgc2FtZSBTU0lECisgICAgQlNTX1RBQkxFICAgICAgICAgICBSb2FtVGFiOyAgICAgICAgLy8gQVAgbGlzdCBlbGlnaWJsZSBmb3Igcm9hbWluZworICAgIFVMT05HICAgICAgICAgICAgICAgQnNzSWR4OworICAgIFVMT05HICAgICAgICAgICAgICAgUm9hbUlkeDsKKworCUJPT0xFQU4JCQkJQ3VyclJlcUlzRnJvbU5kaXM7CisKKyAgICBSQUxJTktfVElNRVJfU1RSVUNUIEJlYWNvblRpbWVyLCBTY2FuVGltZXI7CisgICAgUkFMSU5LX1RJTUVSX1NUUlVDVCBBdXRoVGltZXI7CisgICAgUkFMSU5LX1RJTUVSX1NUUlVDVCBBc3NvY1RpbWVyLCBSZWFzc29jVGltZXIsIERpc2Fzc29jVGltZXI7Cit9IE1MTUVfQVVYLCAqUE1MTUVfQVVYOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9BRERCQV9SRVFfU1RSVUNUeworCVVDSEFSICAgV2NpZDsJLy8KKwlVQ0hBUiAgIHBBZGRyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICBCYUJ1ZlNpemU7CisJVVNIT1JUCVRpbWVPdXRWYWx1ZTsKKwlVQ0hBUiAgIFRJRDsKKwlVQ0hBUiAgIFRva2VuOworCVVTSE9SVAlCYVN0YXJ0U2VxOworfSBNTE1FX0FEREJBX1JFUV9TVFJVQ1QsICpQTUxNRV9BRERCQV9SRVFfU1RSVUNUOworCisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0RFTEJBX1JFUV9TVFJVQ1R7CisJVUNIQVIgICBXY2lkOwkvLworCVVDSEFSICAgICBBZGRyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICBUSUQ7CisJVUNIQVIJSW5pdGlhdG9yOworfSBNTE1FX0RFTEJBX1JFUV9TVFJVQ1QsICpQTUxNRV9ERUxCQV9SRVFfU1RSVUNUOworCisvLyBhc3NvYyBzdHJ1Y3QgaXMgZXF1YWwgdG8gcmVhc3NvYwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfQVNTT0NfUkVRX1NUUlVDVHsKKyAgICBVQ0hBUiAgICAgQWRkcltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICBDYXBhYmlsaXR5SW5mbzsKKyAgICBVU0hPUlQgICAgTGlzdGVuSW50djsKKyAgICBVTE9ORyAgICAgVGltZW91dDsKK30gTUxNRV9BU1NPQ19SRVFfU1RSVUNULCAqUE1MTUVfQVNTT0NfUkVRX1NUUlVDVCwgTUxNRV9SRUFTU09DX1JFUV9TVFJVQ1QsICpQTUxNRV9SRUFTU09DX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1R7CisgICAgVUNIQVIgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgUmVhc29uOworfSBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QsICpQTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9BVVRIX1JFUV9TVFJVQ1QgeworICAgIFVDSEFSICAgICAgICBBZGRyW01BQ19BRERSX0xFTl07CisgICAgVVNIT1JUICAgICAgIEFsZzsKKyAgICBVTE9ORyAgICAgICAgVGltZW91dDsKK30gTUxNRV9BVVRIX1JFUV9TVFJVQ1QsICpQTUxNRV9BVVRIX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0RFQVVUSF9SRVFfU1RSVUNUIHsKKyAgICBVQ0hBUiAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICBSZWFzb247Cit9IE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QsICpQTUxNRV9ERUFVVEhfUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFVMT05HICAgICAgQnNzSWR4OworfSBNTE1FX0pPSU5fUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfU0NBTl9SRVFfU1RSVUNUIHsKKyAgICBVQ0hBUiAgICAgIEJzc2lkW01BQ19BRERSX0xFTl07CisgICAgVUNIQVIgICAgICBCc3NUeXBlOworICAgIFVDSEFSICAgICAgU2NhblR5cGU7CisgICAgVUNIQVIgICAgICBTc2lkTGVuOworICAgIENIQVIgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworfSBNTE1FX1NDQU5fUkVRX1NUUlVDVCwgKlBNTE1FX1NDQU5fUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfU1RBUlRfUkVRX1NUUlVDVCB7CisgICAgQ0hBUiAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworICAgIFVDSEFSICAgICAgIFNzaWRMZW47Cit9IE1MTUVfU1RBUlRfUkVRX1NUUlVDVCwgKlBNTE1FX1NUQVJUX1JFUV9TVFJVQ1Q7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKy8vIHN0cnVjdHVyZSBmb3IgRExTCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0RMUyB7CisJVVNIT1JUCQkJCQkJVGltZU91dDsJCS8vIFVzZSB0byB0aW1lIG91dCB3aGlsZSBzbGllbmNlLCB1bml0OiBzZWNvbmQgLCBzZXQgYnkgVUkKKwlVU0hPUlQJCQkJCQlDb3VudERvd25UaW1lcjsJLy8gVXNlIHRvIHRpbWUgb3V0IHdoaWxlIHNsaWVuY2UsdW5pdDogc2Vjb25kICwgdXNlZCBieSBkcml2ZXIgb25seQorCU5ESVNfODAyXzExX01BQ19BRERSRVNTCQlNYWNBZGRyOwkJLy8gc2V0IGJ5IFVJCisJVUNIQVIJCQkJCQlTdGF0dXM7CQkJLy8gMDogbm9uZSAsIDE6IHdhaXQgU1RBa2V5LCAyOiBmaW5pc2ggRExTIHNldHVwICwgc2V0IGJ5IGRyaXZlciBvbmx5CisJQk9PTEVBTgkJCQkJCVZhbGlkOwkJCS8vIDE6IHZhbGlkICwgMDogaW52YWxpZCAsIHNldCBieSBVSSwgdXNlIHRvIHNldHVwIG9yIHRlYXIgZG93biBETFMgbGluaworCVJBTElOS19USU1FUl9TVFJVQ1QJCQlUaW1lcjsJCQkvLyBVc2UgdG8gdGltZSBvdXQgd2hpbGUgaGFuZHNoYWtlCisJVVNIT1JUCQkJCQkJU2VxdWVuY2U7CisJVVNIT1JUCQkJCQkJTWFjVGFiTWF0Y2hXQ0lEOwkvLyBBU0lDCisJQk9PTEVBTgkJCQkJCWJIVENhcDsKKwlQVk9JRAkJCQkJCXBBZDsKK30gUlRfODAyXzExX0RMUywgKlBSVF84MDJfMTFfRExTOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9ETFNfUkVRX1NUUlVDVCB7CisgICAgUFJUXzgwMl8xMV9ETFMJcERMUzsKKyAgICBVU0hPUlQJCQlSZWFzb247Cit9IE1MTUVfRExTX1JFUV9TVFJVQ1QsICpQTUxNRV9ETFNfUkVRX1NUUlVDVDsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyAgICBVQ0hBUiAgIEVpZDsKKyAgICBVQ0hBUiAgIExlbjsKKyAgICBDSEFSICAgT2N0ZXRbMV07Cit9IEVJRF9TVFJVQ1QsKlBFSURfU1RSVUNULCBCRUFDT05fRUlEX1NUUlVDVCwgKlBCRUFDT05fRUlEX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SVE1QX1RYX1JBVEVfU1dJVENICit7CisJVUNIQVIgICBJdGVtTm87CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVJzdjI6MjsKKwlVQ0hBUglNb2RlOjI7CisJVUNIQVIJUnN2MToxOworCVVDSEFSCUJXOjE7CisJVUNIQVIJU2hvcnRHSToxOworCVVDSEFSCVNUQkM6MTsKKyNlbHNlCisJVUNIQVIJU1RCQzoxOworCVVDSEFSCVNob3J0R0k6MTsKKwlVQ0hBUglCVzoxOworCVVDSEFSCVJzdjE6MTsKKwlVQ0hBUglNb2RlOjI7CisJVUNIQVIJUnN2MjoyOworI2VuZGlmCisJVUNIQVIgICBDdXJyTUNTOworCVVDSEFSICAgVHJhaW5VcDsKKwlVQ0hBUiAgIFRyYWluRG93bjsKK30gUlJUTVBfVFhfUkFURV9TV0lUQ0gsICpQUlRNUF9UWF9SQVRFX1NXSVRDSDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQVAgbWxtZS5oID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgVEJUVF9QUkVMT0FEX1RJTUUgICAgICAgMzg0ICAgICAgICAvLyB1c2VjLiBMb21nUHJlYW1ibGUgKyAyNC1ieXRlIGF0IDFNYnBzCisjZGVmaW5lIERFRkFVTFRfRFRJTV9QRVJJT0QgICAgIDEKKworLy8gd2VpZ2h0aW5nIGZhY3RvciB0byBjYWxjdWxhdGUgQ2hhbm5lbCBxdWFsaXR5LCB0b3RhbCBzaG91bGQgYmUgMTAwJQorLy8jZGVmaW5lIFJTU0lfV0VJR0hUSU5HICAgICAgICAgICAgICAgICAgIDAKKy8vI2RlZmluZSBUWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICA0MAorLy8jZGVmaW5lIFJYX1dFSUdIVElORyAgICAgICAgICAgICAgICAgICAgIDYwCisKKyNkZWZpbmUgTUFDX1RBQkxFX0FHRU9VVF9USU1FCQkJMzAwCQkJLy8gdW5pdDogc2VjCisjZGVmaW5lIE1BQ19UQUJMRV9BU1NPQ19USU1FT1VUCQkJNQkJCS8vIHVuaXQ6IHNlYworI2RlZmluZSBNQUNfVEFCTEVfRlVMTChUYWIpCQkJCSgoVGFiKS5zaXplID09IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCisvLyBBUCBzaGFsbCBkcm9wIHRoZSBzdGEgaWYgY29udGluZSBUeCBmYWlsIGNvdW50IHJlYWNoIGl0LgorI2RlZmluZSBNQUNfRU5UUllfTElGRV9DSEVDS19DTlQJCTIwCQkJLy8gcGFja2V0IGNudC4KKworLy8gVmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+U3N0Cit0eXBlZGVmIGVudW0gX1NzdCB7CisgICAgU1NUX05PVF9BVVRILCAgIC8vIDA6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAxCisgICAgU1NUX0FVVEgsICAgICAgIC8vIDE6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAyCisgICAgU1NUX0FTU09DICAgICAgIC8vIDI6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAzCit9IFNTVDsKKworLy8gdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+QXV0aFN0YXRlCit0eXBlZGVmIGVudW0gX0F1dGhTdGF0ZSB7CisgICAgQVNfTk9UX0FVVEgsCisgICAgQVNfQVVUSF9PUEVOLCAgICAgICAvLyBTVEEgaGFzIGJlZW4gYXV0aGVudGljYXRlZCB1c2luZyBPUEVOIFNZU1RFTQorICAgIEFTX0FVVEhfS0VZLCAgICAgICAgLy8gU1RBIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgdXNpbmcgU0hBUkVEIEtFWQorICAgIEFTX0FVVEhFTlRJQ0FUSU5HICAgLy8gU1RBIGlzIHdhaXRpbmcgZm9yIEFVVEggc2VxIzMgdXNpbmcgU0hBUkVEIEtFWQorfSBBVVRIX1NUQVRFOworCisvL2Zvci13cGEgdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+V3BhU3RhdGUgIDgwMi4xaSBEMyAgIHAuMTE0Cit0eXBlZGVmIGVudW0gX0FwV3BhU3RhdGUgeworICAgIEFTX05PVFVTRSwgICAgICAgICAgICAgIC8vIDAKKyAgICBBU19ESVNDT05ORUNULCAgICAgICAgICAvLyAxCisgICAgQVNfRElTQ09OTkVDVEVELCAgICAgICAgLy8gMgorICAgIEFTX0lOSVRJQUxJWkUsICAgICAgICAgIC8vIDMKKyAgICBBU19BVVRIRU5USUNBVElPTiwgICAgICAvLyA0CisgICAgQVNfQVVUSEVOVElDQVRJT04yLCAgICAgLy8gNQorICAgIEFTX0lOSVRQTUssICAgICAgICAgICAgIC8vIDYKKyAgICBBU19JTklUUFNLLCAgICAgICAgICAgICAvLyA3CisgICAgQVNfUFRLU1RBUlQsICAgICAgICAgICAgLy8gOAorICAgIEFTX1BUS0lOSVRfTkVHT1RJQVRJTkcsIC8vIDkKKyAgICBBU19QVEtJTklURE9ORSwgICAgICAgICAvLyAxMAorICAgIEFTX1VQREFURUtFWVMsICAgICAgICAgIC8vIDExCisgICAgQVNfSU5URUdSSVRZX0ZBSUxVUkUsICAgLy8gMTIKKyAgICBBU19LRVlVUERBVEUsICAgICAgICAgICAvLyAxMworfSBBUF9XUEFfU1RBVEU7CisKKy8vIGZvci13cGEgdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+V3BhU3RhdGUgIDgwMi4xaSBEMyAgIHAuMTE0Cit0eXBlZGVmIGVudW0gX0dUS1N0YXRlIHsKKyAgICBSRUtFWV9ORUdPVElBVElORywKKyAgICBSRUtFWV9FU1RBQkxJU0hFRCwKKyAgICBLRVlFUlJPUiwKK30gR1RLX1NUQVRFOworCisvLyAgZm9yLXdwYSAgdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+V3BhU3RhdGUgIDgwMi4xaSBEMyAgIHAuMTE0Cit0eXBlZGVmIGVudW0gX1dwYUdUS1N0YXRlIHsKKyAgICBTRVRLRVlTLAorICAgIFNFVEtFWVNfRE9ORSwKK30gV1BBX0dUS19TVEFURTsKKy8vID09PT09PT09PT09PT09PT09PT09PT0gZW5kIG9mIEFQIG1sbWUuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworI2VuZGlmCS8vIE1MTUVfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL25ldGlmX2Jsb2NrLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL25ldGlmX2Jsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1MTUxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbmV0aWZfYmxvY2suaApAQCAtMCwwICsxLDU4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTkVUX0lGX0JMT0NLX0hfXworI2RlZmluZSBfX05FVF9JRl9CTE9DS19IX18KKworLy8jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSAibGlua19saXN0LmgiCisjaW5jbHVkZSAicnRtcC5oIgorCisjZGVmaW5lIEZSRUVfTkVUSUZfUE9PTF9TSVpFIDMyCisKK3R5cGVkZWYgc3RydWN0IF9ORVRJRl9FTlRSWQoreworCXN0cnVjdCBfTkVUSUZfRU5UUlkgKnBOZXh0OworCVBORVRfREVWIHBOZXREZXY7Cit9IE5FVElGX0VOVFJZLCAqUE5FVElGX0VOVFJZOworCit2b2lkIGluaXRibG9ja1F1ZXVlVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBibG9ja05ldElmKAorCUlOIFBCTE9DS19RVUVVRV9FTlRSWSBwQmxvY2tRdWV1ZUVudHJ5LAorCUlOIFBORVRfREVWIHBOZXREZXYpOworCitWT0lEIHJlbGVhc2VOZXRJZigKKwlJTiBQQkxPQ0tfUVVFVUVfRU5UUlkgcEJsb2NrUXVldWVFbnRyeSk7CisKK1ZPSUQgU3RvcE5ldElmUXVldWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgUXVlSWR4LAorCUlOIFBORElTX1BBQ0tFVCBwUGFja2V0KTsKKyNlbmRpZiAvLyBfX05FVF9JRl9CTE9DS19IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9vaWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvb2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4YmYwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvb2lkLmgKQEAgLTAsMCArMSwxMTQyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCW9pZC5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisqLworI2lmbmRlZiBfT0lEX0hfCisjZGVmaW5lIF9PSURfSF8KKworLy8jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKworCisjZGVmaW5lIFRSVUUJCQkJMQorI2RlZmluZSBGQUxTRQkJCQkwCisvLworLy8gSUVFRSA4MDIuMTEgU3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKKy8vCisjZGVmaW5lIE1BWF9UWF9QT1dFUl9MRVZFTCAgICAgICAgICAgICAgMTAwICAgLyogbVcgKi8KKyNkZWZpbmUgTUFYX1JTU0lfVFJJR0dFUiAgICAgICAgICAgICAgICAtMTAgICAgLyogZEJtICovCisjZGVmaW5lIE1JTl9SU1NJX1RSSUdHRVIgICAgICAgICAgICAgICAgLTIwMCAgIC8qIGRCbSAqLworI2RlZmluZSBNQVhfRlJBR19USFJFU0hPTEQgICAgICAgICAgICAgIDIzNDYgIC8qIGJ5dGUgY291bnQgKi8KKyNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAgICAgICAgICAyNTYgICAvKiBieXRlIGNvdW50ICovCisjZGVmaW5lIE1BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjM0NyAgLyogYnl0ZSBjb3VudCAqLworCisvLyBuZXcgdHlwZXMgZm9yIE1lZGlhIFNwZWNpZmljIEluZGljYXRpb25zCisvLyBFeHRlbnNpb24gY2hhbm5lbCBvZmZzZXQKKyNkZWZpbmUgRVhUQ0hBX05PTkUJCQkwCisjZGVmaW5lIEVYVENIQV9BQk9WRQkJMHgxCisjZGVmaW5lIEVYVENIQV9CRUxPVwkJMHgzCisKKy8vIEJXCisjZGVmaW5lIEJBTkRfV0lEVEhfMjAJCTAKKyNkZWZpbmUgQkFORF9XSURUSF80MAkJMQorI2RlZmluZSBCQU5EX1dJRFRIX0JPVEgJCTIKKyNkZWZpbmUgQkFORF9XSURUSF8xMAkJMwkvLyA4MDIuMTFqIGhhcyAxME1Iei4gVGhpcyBkZWZpbml0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2FnZS4gZG9lc24ndCBmaWxsIGluIHRoZSBJRSBvciBvdGhlciBmaWVsZC4KKy8vIFNIT1JUR0kKKyNkZWZpbmUgR0FQX0lOVEVSVkFMXzQwMAkxCS8vIG9ubHkgc3VwcG9ydCBpbiBIVCBtb2RlCisjZGVmaW5lIEdBUF9JTlRFUlZBTF84MDAJMAorI2RlZmluZSBHQVBfSU5URVJWQUxfQk9USAkyCisKKyNkZWZpbmUgTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQJCQkxCisjZGVmaW5lIE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkCQkwCisKKyNkZWZpbmUgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQgICAgICAgICAzMgorI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfUkFURVMgICAgICAgIDgKKyNkZWZpbmUgTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYICAgICAxNgorI2RlZmluZSBNQUNfQUREUl9MRU5HVEggICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTUFYX05VTV9PRl9DSFMJCQkJCTQ5IC8vIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkgKyA0IEBNTUFDICsgMTEgQEhpcGVyTEFOMiArIDcgQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uYworI2RlZmluZSBNQVhfTlVNQkVSX09GX0VWRU5UCQkJCTEwICAvLyBlbnRyeSAjIGluIEVWRU5UIHRhYmxlCisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfTUFDCQkJCTMyIC8vIGlmIE1BWF9NQlNTSURfTlVNIGlzIDgsIHRoaXMgdmFsdWUgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gMjExCisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfQUNMCQkJCTY0CisjZGVmaW5lIE1BWF9MRU5HVEhfT0ZfU1VQUE9SVF9SQVRFUwkJMTIgICAgLy8gMSwgMiwgNS41LCAxMSwgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NAorI2RlZmluZSBNQVhfTlVNQkVSX09GX0RMU19FTlRSWQkJCTQKKworCisKKyNpZm5kZWYgVU5ERVJfQ0UKKy8vIE9JRCBkZWZpbml0aW9uLCBzaW5jZSBORElTIDUuMCBkaWRuJ3QgZGVmaW5lIHRoZXNlLCB3ZSBuZWVkIHRvIGRlZmluZSBmb3Igb3VyIG93bgorLy8jaWYgX1dJTjMyX1dJTk5UPD0weDA1MDAKKworI2RlZmluZSBPSURfR0VOX01BQ0hJTkVfTkFNRSAgICAgICAgICAgICAgIDB4MDAwMTAyMUEKKworI2lmZGVmIFJBTElOS19BVEUKKyNkZWZpbmUgUlRfUVVFUllfQVRFX1RYRE9ORV9DT1VOVAkJCTB4MDQwMQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKyNkZWZpbmUgUlRfUVVFUllfU0lHTkFMX0NPTlRFWFQJCQkJMHgwNDAyCisjZGVmaW5lIFJUX1NFVF9JQVBQX1BJRCAgICAgICAgICAgICAgICAgCTB4MDQwNAorI2RlZmluZSBSVF9TRVRfQVBEX1BJRAkJCQkJCTB4MDQwNQorI2RlZmluZSBSVF9TRVRfREVMX01BQ19FTlRSWQkJCQkweDA0MDYKKworLy8KKy8vIElFRUUgODAyLjExIE9JRHMKKy8vCisjZGVmaW5lCU9JRF9HRVRfU0VUX1RPR0dMRQkJCTB4ODAwMAorCisjZGVmaW5lCU9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQJCQkweDAxMDMKKyNkZWZpbmUJT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCQkJCTB4MDEwNAorI2RlZmluZQlPSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCQkJCTB4MDEwNworI2RlZmluZQlSVF9PSURfODAyXzExX1JTU0kJCQkJCQkJMHgwMTA4IC8vcnQyODYwCW9ubHkgLCBrYXRoeQorI2RlZmluZQlSVF9PSURfODAyXzExX1JTU0lfMQkJCQkJCTB4MDEwOSAvL3J0Mjg2MAlvbmx5ICwga2F0aHkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SU1NJXzIJCQkJCQkweDAxMEEgLy9ydDI4NjAJb25seSAsIGthdGh5CisjZGVmaW5lCU9JRF84MDJfMTFfTlVNQkVSX09GX0FOVEVOTkFTCQkJCTB4MDEwQgorI2RlZmluZQlPSURfODAyXzExX1JYX0FOVEVOTkFfU0VMRUNURUQJCQkJMHgwMTBDCisjZGVmaW5lCU9JRF84MDJfMTFfVFhfQU5URU5OQV9TRUxFQ1RFRAkJCQkweDAxMEQKKyNkZWZpbmUJT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMJCQkJCTB4MDEwRQorI2RlZmluZQlPSURfODAyXzExX0FERF9XRVAJCQkJCQkJMHgwMTEyCisjZGVmaW5lCU9JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCQkJCTB4MDExMworI2RlZmluZQlPSURfODAyXzExX0RJU0FTU09DSUFURQkJCQkJCTB4MDExNAorI2RlZmluZQlPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQkJCQkweDAxMTgKKyNkZWZpbmUJT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgkJCTB4MDExRQorI2RlZmluZQlPSURfODAyXzExX1RFU1QJCQkJCQkJCTB4MDExRgorI2RlZmluZQlSVF9PSURfODAyXzExX0NPVU5UUllfUkVHSU9OCQkJCTB4MDUwNworI2RlZmluZQlPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJCQkJMHgwNTA4CisjZGVmaW5lCU9JRF84MDJfMTFfU1NJRAkJCQkJCQkJMHgwNTA5CisjZGVmaW5lCU9JRF84MDJfMTFfQlNTSUQJCQkJCQkJMHgwNTBBCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkFESU8JCQkJCQkJMHgwNTBCCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUEhZX01PREUJCQkJCQkweDA1MEMKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHCQkJCQkweDA1MEQKKyNkZWZpbmUJT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCQkJCQkweDA1MEUKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9QUkVBTUJMRQkJCQkJCTB4MDUwRgorI2RlZmluZQlPSURfODAyXzExX1dFUF9TVEFUVVMJCQkJCQkweDA1MTAKKyNkZWZpbmUJT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCQkJCTB4MDUxMQorI2RlZmluZQlPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUJCQkJMHgwNTEyCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkVTRVRfQ09VTlRFUlMJCQkJMHgwNTEzCisjZGVmaW5lCU9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAkJCQkJMHgwNTE0CisjZGVmaW5lCU9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQJCQkweDA1MTUKKyNkZWZpbmUJT0lEXzgwMl8xMV9QT1dFUl9NT0RFCQkJCQkJMHgwNTE2CisjZGVmaW5lCU9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwJCQkJCTB4MDUxNworI2RlZmluZQlSVF9PSURfODAyXzExX0FERF9XUEEJCQkJCQkweDA1MTgKKyNkZWZpbmUJT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJCQkJMHgwNTE5CisjZGVmaW5lCU9JRF84MDJfMTFfQUREX0tFWQkJCQkJCQkweDA1MjAKKyNkZWZpbmUJT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OCQkJCQkweDA1MjEKKyNkZWZpbmUJT0lEXzgwMl8xMV9UWF9QQUNLRVRfQlVSU1QJCQkJCTB4MDUyMgorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX05PSVNFX0xFVkVMCQkJCTB4MDUyMworI2RlZmluZQlSVF9PSURfODAyXzExX0VYVFJBX0lORk8JCQkJCTB4MDUyNAorI2lmZGVmCURCRworI2RlZmluZQlSVF9PSURfODAyXzExX0hBUkRXQVJFX1JFR0lTVEVSCQkJCTB4MDUyNQorI2VuZGlmCisjZGVmaW5lIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgICAgICAgICAgICBPSURfODAyXzExX1dFUF9TVEFUVVMKKyNkZWZpbmUgT0lEXzgwMl8xMV9ERUFVVEhFTlRJQ0FUSU9OICAgICAgICAgICAgICAgICAweDA1MjYKKyNkZWZpbmUgT0lEXzgwMl8xMV9EUk9QX1VORU5DUllQVEVEICAgICAgICAgICAgICAgICAweDA1MjcKKyNkZWZpbmUgT0lEXzgwMl8xMV9NSUNfRkFJTFVSRV9SRVBPUlRfRlJBTUUgICAgICAgICAweDA1MjgKKworLy8gRm9yIDgwMi4xeCBkYWVtaW4gdXNpbmcgdG8gcmVxdWlyZSBjdXJyZW50IGRyaXZlciBjb25maWd1cmF0aW9uCisjZGVmaW5lIE9JRF84MDJfMTFfUkFESVVTX1FVRVJZX1NFVFRJTkcJCQkJMHgwNTQwCisKKyNkZWZpbmUJUlRfT0lEX0RFVklDRV9OQU1FCQkJCQkJCTB4MDYwNworI2RlZmluZQlSVF9PSURfVkVSU0lPTl9JTkZPCQkJCQkJCTB4MDYwOAorI2RlZmluZQlPSURfODAyXzExX0JTU0lEX0xJU1QJCQkJCQkweDA2MDkKKyNkZWZpbmUJT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUwkJCQkJMHgwNjBBCisjZGVmaW5lCU9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVMJCQkJMHgwNjBCCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfTElOS19TVEFUVVMJCQkJMHgwNjBDCisjZGVmaW5lCU9JRF84MDJfMTFfUlNTSQkJCQkJCQkJMHgwNjBECisjZGVmaW5lCU9JRF84MDJfMTFfU1RBVElTVElDUwkJCQkJCTB4MDYwRQorI2RlZmluZQlPSURfR0VOX1JDVl9PSwkJCQkJCQkJMHgwNjBGCisjZGVmaW5lCU9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCQkJCTB4MDYxMAorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0VFUFJPTV9WRVJTSU9OCQkJMHgwNjExCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfRklSTVdBUkVfVkVSU0lPTgkJMHgwNjEyCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9SWF9SQVRFCQkJMHgwNjEzCisjZGVmaW5lCVJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMQkJCQkweDA2MTQKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9QSURWSUQJCQkJCTB4MDYxNQorLy9mb3IgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2RlZmluZSBPSURfU0VUX0NPVU5URVJNRUFTVVJFUyAgICAgICAgICAgICAgICAgICAgIDB4MDYxNgorI2RlZmluZSBPSURfODAyXzExX1NFVF9JRUVFODAyMVggICAgICAgICAgICAgICAgICAgIDB4MDYxNworI2RlZmluZSBPSURfODAyXzExX1NFVF9JRUVFODAyMVhfUkVRVUlSRV9LRVkgICAgICAgIDB4MDYxOAorI2RlZmluZSBPSURfODAyXzExX1BNS0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYyMAorI2RlZmluZSBSVF9PSURfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAgICAgICAgICAgICAgIDB4MDYyMQorI2RlZmluZSBSVF9PSURfV0VfVkVSU0lPTl9DT01QSUxFRCAgICAgICAgICAgICAgICAgIDB4MDYyMgorI2RlZmluZSBSVF9PSURfTkVXX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYyMworCisKKy8vcnQyODYwICwga2F0aHkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TTlJfMAkJCQkJCQkweDA2MzAKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TTlJfMQkJCQkJCQkweDA2MzEKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1RYX1JBVEUJCQkweDA2MzIKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9IVF9QSFlNT0RFCQkJCTB4MDYzMworI2RlZmluZQlSVF9PSURfODAyXzExX1NFVF9IVF9QSFlNT0RFCQkJCTB4MDYzNAorI2RlZmluZQlPSURfODAyXzExX1JFTE9BRF9ERUZBVUxUUwkJCQkJMHgwNjM1CisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfQVBTRF9TRVRUSU5HCQkJMHgwNjM2CisjZGVmaW5lCVJUX09JRF84MDJfMTFfU0VUX0FQU0RfU0VUVElORwkJCQkweDA2MzcKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9BUFNEX1BTTQkJCQkweDA2MzgKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9QU00JCQkJCTB4MDYzOQorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0RMUwkJCQkJCTB4MDYzQQorI2RlZmluZQlSVF9PSURfODAyXzExX1NFVF9ETFMJCQkJCQkweDA2M0IKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9ETFNfUEFSQU0JCQkJMHgwNjNDCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTQkJCQkJMHgwNjNECisjZGVmaW5lIFJUX09JRF84MDJfMTFfUVVFUllfV01NICAgICAgICAgICAgICAJCTB4MDYzRQorI2RlZmluZSBSVF9PSURfODAyXzExX1NFVF9XTU0gICAgICAJCQkJCTB4MDYzRgorI2RlZmluZSBSVF9PSURfODAyXzExX1FVRVJZX0lNTUVfQkFfQ0FQCQkJCTB4MDY0MAorI2RlZmluZSBSVF9PSURfODAyXzExX1NFVF9JTU1FX0JBX0NBUAkJCQkweDA2NDEKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9RVUVSWV9CQVRBQkxFCQkJCQkweDA2NDIKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQQkJCQkJMHgwNjQzCisjZGVmaW5lIFJUX09JRF84MDJfMTFfVEVBUl9JTU1FX0JBCQkJCQkweDA2NDQKKyNkZWZpbmUgUlRfT0lEX0RSSVZFUl9ERVZJQ0VfTkFNRSAgICAgICAgICAgICAgICAgICAweDA2NDUKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9RVUVSWV9EQVRfSFRfUEhZTU9ERSAgICAgICAgICAweDA2NDYKKyNkZWZpbmUgUlRfT0lEX1FVRVJZX01VTFRJUExFX0NBUkRfU1VQUE9SVCAgICAgICAgICAweDA2NDcKKworLy8gUmFsaW5rIGRlZmluZWQgT0lEcworLy8gRGVubmlzIExlZSBtb3ZlIHRvIHBsYXRmb3JtIHNwZWNpZmljCisKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9CU1NJRAkJCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9CU1NJRCkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TU0lECQkJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1NTSUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfQUREX1dFUAkJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0FERF9XRVApCisjZGVmaW5lCVJUX09JRF84MDJfMTFfQUREX0tFWQkJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0FERF9LRVkpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUkVNT1ZFX1dFUCkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9SRU1PVkVfS0VZKQorI2RlZmluZQlSVF9PSURfODAyXzExX0RJU0FTU09DSUFURQkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfRElTQVNTT0NJQVRFKQorI2RlZmluZQlSVF9PSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKQorI2RlZmluZQlSVF9PSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSKQorI2RlZmluZQlSVF9PSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4pCisjZGVmaW5lCVJUX09JRF84MDJfMTFfV0VQX1NUQVRVUwkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfV0VQX1NUQVRVUykKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SRUxPQURfREVGQVVMVFMJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUkVMT0FEX0RFRkFVTFRTKQorI2RlZmluZQlSVF9PSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFKQorI2RlZmluZQlSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMKQorI2RlZmluZQlSVF9PSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUlNTSV9UUklHR0VSKQorI2RlZmluZQlSVF9PSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEKQorI2RlZmluZQlSVF9PSURfODAyXzExX1JUU19USFJFU0hPTEQJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JUU19USFJFU0hPTEQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUlhfQU5URU5OQV9TRUxFQ1RFRAkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JYX0FOVEVOTkFfU0VMRUNURUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfVFhfQU5URU5OQV9TRUxFQ1RFRAkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1RYX0FOVEVOTkFfU0VMRUNURUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUykKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTKQorI2RlZmluZQlSVF9PSURfODAyXzExX0NPTkZJR1VSQVRJT04JCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0NPTkZJR1VSQVRJT04pCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUE9XRVJfTU9ERQkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUE9XRVJfTU9ERSkKKworCisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfU1RBVFVTX1RZUEUKK3sKKyAgICBOZGlzODAyXzExU3RhdHVzVHlwZV9BdXRoZW50aWNhdGlvbiwKKyAgICBOZGlzODAyXzExU3RhdHVzVHlwZV9NZWRpYVN0cmVhbU1vZGUsCisgICAgTmRpczgwMl8xMVN0YXR1c1R5cGVfUE1LSURfQ2FuZGlkYXRlTGlzdCwKKyAgICBOZGlzODAyXzExU3RhdHVzVHlwZU1heCAgICAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKK30gTkRJU184MDJfMTFfU1RBVFVTX1RZUEUsICpQTkRJU184MDJfMTFfU1RBVFVTX1RZUEU7CisKK3R5cGVkZWYgVUNIQVIgICBORElTXzgwMl8xMV9NQUNfQUREUkVTU1s2XTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1NUQVRVU19JTkRJQ0FUSU9OCit7CisgICAgTkRJU184MDJfMTFfU1RBVFVTX1RZUEUgU3RhdHVzVHlwZTsKK30gTkRJU184MDJfMTFfU1RBVFVTX0lORElDQVRJT04sICpQTkRJU184MDJfMTFfU1RBVFVTX0lORElDQVRJT047CisKKy8vIG1hc2sgZm9yIGF1dGhlbnRpY2F0aW9uL2ludGVncml0eSBmaWVsZHMKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX0FVVEhfRklFTERTICAgICAgICAweDBmCisKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX1JFQVVUSCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9LRVlVUERBVEUgICAgICAgICAgMHgwMgorI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfUEFJUldJU0VfRVJST1IgICAgIDB4MDYKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SICAgICAgICAweDBFCisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9SRVFVRVNUCit7CisgICAgVUxPTkcgTGVuZ3RoOyAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCc3NpZDsKKyAgICBVTE9ORyBGbGFnczsKK30gTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgKlBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9SRVFVRVNUOworCisvL0FkZGVkIG5ldyB0eXBlcyBmb3IgUE1LSUQgQ2FuZGlkYXRlIGxpc3RzLgordHlwZWRlZiBzdHJ1Y3QgX1BNS0lEX0NBTkRJREFURSB7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7CisgICAgVUxPTkcgRmxhZ3M7Cit9IFBNS0lEX0NBTkRJREFURSwgKlBQTUtJRF9DQU5ESURBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfTElTVAoreworICAgIFVMT05HIFZlcnNpb247ICAgICAgIC8vIFZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZQorICAgIFVMT05HIE51bUNhbmRpZGF0ZXM7IC8vIE5vLiBvZiBwbWtpZCBjYW5kaWRhdGVzCisgICAgUE1LSURfQ0FORElEQVRFIENhbmRpZGF0ZUxpc3RbMV07Cit9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9MSVNULCAqUE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9MSVNUOworCisvL0ZsYWdzIGZvciBQTUtJRCBDYW5kaWRhdGUgbGlzdCBzdHJ1Y3R1cmUKKyNkZWZpbmUgTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRAkweDAxCisKKy8vIEFkZGVkIG5ldyB0eXBlcyBmb3IgT0ZETSA1RyBhbmQgMi40RwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUKK3sKKyAgIE5kaXM4MDJfMTFGSCwKKyAgIE5kaXM4MDJfMTFEUywKKyAgICBOZGlzODAyXzExT0ZETTUsCisgICAgTmRpczgwMl8xMU9GRE01X04sCisgICAgTmRpczgwMl8xMU9GRE0yNCwKKyAgICBOZGlzODAyXzExT0ZETTI0X04sCisgICBOZGlzODAyXzExQXV0b21vZGUsCisgICAgTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4ICAgIC8vIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZAorfSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUsICpQTkRJU184MDJfMTFfTkVUV09SS19UWVBFOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfTkVUV09SS19UWVBFX0xJU1QKK3sKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkl0ZW1zOyAgLy8gaW4gbGlzdCBiZWxvdywgYXQgbGVhc3QgMQorICAgTkRJU184MDJfMTFfTkVUV09SS19UWVBFICAgIE5ldHdvcmtUeXBlIFsxXTsKK30gTkRJU184MDJfMTFfTkVUV09SS19UWVBFX0xJU1QsICpQTkRJU184MDJfMTFfTkVUV09SS19UWVBFX0xJU1Q7CisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfUE9XRVJfTU9ERQoreworICAgIE5kaXM4MDJfMTFQb3dlck1vZGVDQU0sCisgICAgTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1AsCisgICAgTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQLAorICAgIE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQLAorICAgIE5kaXM4MDJfMTFQb3dlck1vZGVNYXggICAgICAvLyBub3QgYSByZWFsIG1vZGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKK30gTkRJU184MDJfMTFfUE9XRVJfTU9ERSwgKlBORElTXzgwMl8xMV9QT1dFUl9NT0RFOworCit0eXBlZGVmIFVMT05HICAgTkRJU184MDJfMTFfVFhfUE9XRVJfTEVWRUw7IC8vIGluIG1pbGxpd2F0dHMKKworLy8KKy8vIFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBJbmRpY2F0aW9uCisvLwordHlwZWRlZiBMT05HICAgIE5ESVNfODAyXzExX1JTU0k7ICAgICAgICAgICAvLyBpbiBkQm0KKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0NPTkZJR1VSQVRJT05fRkgKK3sKKyAgIFVMT05HICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHN0cnVjdHVyZQorICAgVUxPTkcgICAgICAgICAgIEhvcFBhdHRlcm47ICAgICAgICAvLyBBcyBkZWZpbmVkIGJ5IDgwMi4xMSwgTVNCIHNldAorICAgVUxPTkcgICAgICAgICAgIEhvcFNldDsgICAgICAgICAgICAvLyB0byBvbmUgaWYgbm9uLTgwMi4xMQorICAgVUxPTkcgICAgICAgICAgIER3ZWxsVGltZTsgICAgICAgICAvLyB1bml0cyBhcmUgS3VzZWMKK30gTkRJU184MDJfMTFfQ09ORklHVVJBVElPTl9GSCwgKlBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OX0ZIOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQ09ORklHVVJBVElPTgoreworICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVhY29uUGVyaW9kOyAgICAgICAvLyB1bml0cyBhcmUgS3VzZWMKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRJTVdpbmRvdzsgICAgICAgICAvLyB1bml0cyBhcmUgS3VzZWMKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNDb25maWc7ICAgICAgICAgICAvLyBGcmVxdWVuY3ksIHVuaXRzIGFyZSBrSHoKKyAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT05fRkggICAgRkhDb25maWc7Cit9IE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04sICpQTkRJU184MDJfMTFfQ09ORklHVVJBVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1NUQVRJU1RJQ1MKK3sKKyAgIFVMT05HICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgIExBUkdFX0lOVEVHRVIgICBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIEZhaWxlZENvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFJldHJ5Q291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgTXVsdGlwbGVSZXRyeUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFJUU1N1Y2Nlc3NDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBSVFNGYWlsdXJlQ291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgQUNLRmFpbHVyZUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIEZyYW1lRHVwbGljYXRlQ291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgUmVjZWl2ZWRGcmFnbWVudENvdW50OworICAgTEFSR0VfSU5URUdFUiAgIE11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBGQ1NFcnJvckNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFRLSVBMb2NhbE1JQ0ZhaWx1cmVzOworICAgTEFSR0VfSU5URUdFUiAgIFRLSVBSZW1vdGVNSUNFcnJvcnM7CisgICBMQVJHRV9JTlRFR0VSICAgVEtJUElDVkVycm9yczsKKyAgIExBUkdFX0lOVEVHRVIgICBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKKyAgIExBUkdFX0lOVEVHRVIgICBUS0lQUmVwbGF5czsKKyAgIExBUkdFX0lOVEVHRVIgICBDQ01QRm9ybWF0RXJyb3JzOworICAgTEFSR0VfSU5URUdFUiAgIENDTVBSZXBsYXlzOworICAgTEFSR0VfSU5URUdFUiAgIENDTVBEZWNyeXB0RXJyb3JzOworICAgTEFSR0VfSU5URUdFUiAgIEZvdXJXYXlIYW5kc2hha2VGYWlsdXJlczsKK30gTkRJU184MDJfMTFfU1RBVElTVElDUywgKlBORElTXzgwMl8xMV9TVEFUSVNUSUNTOworCit0eXBlZGVmICBVTE9ORyAgTkRJU184MDJfMTFfS0VZX0lOREVYOwordHlwZWRlZiBVTE9OR0xPTkcgICBORElTXzgwMl8xMV9LRVlfUlNDOworCisjZGVmaW5lIE1BWF9SQURJVVNfU1JWX05VTQkJCTIJICAvLyA4MDIuMXggZmFpbG92ZXIgbnVtYmVyCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUkFESVVTX1NSVl9JTkZPIHsKKwlVSU5UMzIJCQlyYWRpdXNfaXA7CisJVUlOVDMyCQkJcmFkaXVzX3BvcnQ7CisJVUNIQVIJCQlyYWRpdXNfa2V5WzY0XTsKKwlVQ0hBUgkJCXJhZGl1c19rZXlfbGVuOworfSBSQURJVVNfU1JWX0lORk8sICpQUkFESVVTX1NSVl9JTkZPOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JBRElVU19LRVlfSU5GTworeworCVVDSEFSCQkJcmFkaXVzX3Nydl9udW07CisJUkFESVVTX1NSVl9JTkZPCXJhZGl1c19zcnZfaW5mb1tNQVhfUkFESVVTX1NSVl9OVU1dOworCVVDSEFSCQkJaWVlZTgwMjF4V0VQOwkJIC8vIGR5bmFtaWMgV0VQCisgICAgVUNIQVIgICAgICAgICAgIGtleV9pbmRleDsKKyAgICBVQ0hBUiAgICAgICAgICAga2V5X2xlbmd0aDsgICAgICAgICAgLy8gbGVuZ3RoIG9mIGtleSBpbiBieXRlcworICAgIFVDSEFSICAgICAgICAgICBrZXlfbWF0ZXJpYWxbMTNdOworfSBSQURJVVNfS0VZX0lORk8sICpQUkFESVVTX0tFWV9JTkZPOworCisvLyBJdCdzIHVzZWQgYnkgODAyLjF4IGRhZW1vbiB0byByZXF1aXJlIHJlbGF0aXZlIGNvbmZpZ3VyYXRpb24KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUkFESVVTX0NPTkYKK3sKKyAgICBVSU5UMzIgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBVQ0hBUgkJCW1ic3NfbnVtOwkJCS8vIGluZGljYXRlIG11bHRpcGxlIEJTUyBudW1iZXIKKwlVSU5UMzIJCQlvd25faXBfYWRkcjsKKwlVSU5UMzIJCQlyZXRyeV9pbnRlcnZhbDsKKwlVSU5UMzIJCQlzZXNzaW9uX3RpbWVvdXRfaW50ZXJ2YWw7CisJVUNIQVIJCQlFQVBpZm5hbWVbSUZOQU1TSVpdOworCVVDSEFSCQkJRUFQaWZuYW1lX2xlbjsKKwlVQ0hBUiAJCQlQcmVBdXRoaWZuYW1lW0lGTkFNU0laXTsKKwlVQ0hBUgkJCVByZUF1dGhpZm5hbWVfbGVuOworCVJBRElVU19LRVlfSU5GTwlSYWRpdXNJbmZvWzgvKk1BWF9NQlNTSURfTlVNKi9dOworfSBSQURJVVNfQ09ORiwgKlBSQURJVVNfQ09ORjsKKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vIEtleSBtYXBwaW5nIGtleXMgcmVxdWlyZSBhIEJTU0lECit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfS0VZCit7CisgICAgVUlOVCAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBVSU5UICAgICAgICAgICBLZXlJbmRleDsKKyAgICBVSU5UICAgICAgICAgICBLZXlMZW5ndGg7ICAgICAgICAgIC8vIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCU1NJRDsKKyAgICBORElTXzgwMl8xMV9LRVlfUlNDIEtleVJTQzsKKyAgICBVQ0hBUiAgICAgICAgICAgS2V5TWF0ZXJpYWxbMV07ICAgICAvLyB2YXJpYWJsZSBsZW5ndGggZGVwZW5kaW5nIG9uIGFib3ZlIGZpZWxkCit9IE5ESVNfODAyXzExX0tFWSwgKlBORElTXzgwMl8xMV9LRVk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9SRU1PVkVfS0VZCit7CisgICAgVUlOVCAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBVSU5UICAgICAgICAgICBLZXlJbmRleDsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCU1NJRDsKK30gTkRJU184MDJfMTFfUkVNT1ZFX0tFWSwgKlBORElTXzgwMl8xMV9SRU1PVkVfS0VZOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfV0VQCit7CisgICBVSU5UICAgICBMZW5ndGg7ICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgIFVJTlQgICAgIEtleUluZGV4OyAgICAgICAgICAgLy8gMCBpcyB0aGUgcGVyLWNsaWVudCBrZXksIDEtTiBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xvYmFsIGtleXMKKyAgIFVJTlQgICAgIEtleUxlbmd0aDsgICAgIC8vIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMKKyAgIFVDSEFSICAgICBLZXlNYXRlcmlhbFsxXTsvLyB2YXJpYWJsZSBsZW5ndGggZGVwZW5kaW5nIG9uIGFib3ZlIGZpZWxkCit9IE5ESVNfODAyXzExX1dFUCwgKlBORElTXzgwMl8xMV9XRVA7CisKKwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFCit7CisgICBOZGlzODAyXzExSUJTUywKKyAgIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSwKKyAgIE5kaXM4MDJfMTFBdXRvVW5rbm93biwKKyAgIE5kaXM4MDJfMTFNb25pdG9yLAorICAgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlTWF4ICAgICAvLyBOb3QgYSByZWFsIHZhbHVlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kCit9IE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUsICpQTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRTsKKworLy8gQWRkIG5ldyBhdXRoZW50aWNhdGlvbiBtb2RlcwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCit7CisgICBOZGlzODAyXzExQXV0aE1vZGVPcGVuLAorICAgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkLAorICAgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwKKyAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEsCisgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLLAorICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUsCisgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyLAorICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSywKKyAgIAlOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMiwKKwlOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSywKKyAgIE5kaXM4MDJfMTFBdXRoTW9kZU1heCAgICAgICAgICAgLy8gTm90IGEgcmVhbCBtb2RlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kCit9IE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUsICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERTsKKwordHlwZWRlZiBVQ0hBUiAgIE5ESVNfODAyXzExX1JBVEVTW05ESVNfODAyXzExX0xFTkdUSF9SQVRFU107ICAgICAgICAvLyBTZXQgb2YgOCBkYXRhIHJhdGVzCit0eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfUkFURVNfRVhbTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYXTsgIC8vIFNldCBvZiAxNiBkYXRhIHJhdGVzCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU184MDJfMTFfU1NJRAoreworICAgIFVJTlQgICBTc2lkTGVuZ3RoOyAgICAgICAgIC8vIGxlbmd0aCBvZiBTU0lEIGZpZWxkIGJlbG93LCBpbiBieXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjYW4gYmUgemVyby4KKyAgICBVQ0hBUiAgIFNzaWRbTkRJU184MDJfMTFfTEVOR1RIX1NTSURdOyAgICAgICAgICAgLy8gU1NJRCBpbmZvcm1hdGlvbiBmaWVsZAorfSBORElTXzgwMl8xMV9TU0lELCAqUE5ESVNfODAyXzExX1NTSUQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9ORElTX1dMQU5fQlNTSUQKK3sKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsgICAgIC8vIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZQorICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgICAgICAgICAgICAgTWFjQWRkcmVzczsgLy8gQlNTSUQKKyAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkWzJdOworICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsgICAgICAgLy8gU1NJRAorICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeTsgICAgLy8gV0VQIGVuY3J5cHRpb24gcmVxdWlyZW1lbnQKKyAgIE5ESVNfODAyXzExX1JTU0kgICAgICAgICAgICAgICAgICAgIFJzc2k7ICAgICAgIC8vIHJlY2VpdmUgc2lnbmFsIHN0cmVuZ3RoIGluIGRCbQorICAgTkRJU184MDJfMTFfTkVUV09SS19UWVBFICAgICAgICAgICAgTmV0d29ya1R5cGVJblVzZTsKKyAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gICAgICAgICAgIENvbmZpZ3VyYXRpb247CisgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBJbmZyYXN0cnVjdHVyZU1vZGU7CisgICBORElTXzgwMl8xMV9SQVRFUyAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRSYXRlczsKK30gTkRJU19XTEFOX0JTU0lELCAqUE5ESVNfV0xBTl9CU1NJRDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9ORElTXzgwMl8xMV9CU1NJRF9MSVNUCit7CisgICBVSU5UICAgICAgICAgICBOdW1iZXJPZkl0ZW1zOyAgICAgIC8vIGluIGxpc3QgYmVsb3csIGF0IGxlYXN0IDEKKyAgIE5ESVNfV0xBTl9CU1NJRCBCc3NpZFsxXTsKK30gTkRJU184MDJfMTFfQlNTSURfTElTVCwgKlBORElTXzgwMl8xMV9CU1NJRF9MSVNUOworCisvLyBBZGRlZCBDYXBhYmlsaXRpZXMsIElFTGVuZ3RoIGFuZCBJRXMgZm9yIGVhY2ggQlNTSUQKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU19XTEFOX0JTU0lEX0VYCit7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyAgICAgICAgICAgICBNYWNBZGRyZXNzOyAgICAgICAgIC8vIEJTU0lECisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRbMl07CisgICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsgICAgICAgICAgICAgICAvLyBTU0lECisgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeTsgICAgICAgICAgICAvLyBXRVAgZW5jcnlwdGlvbiByZXF1aXJlbWVudAorICAgIE5ESVNfODAyXzExX1JTU0kgICAgICAgICAgICAgICAgICAgIFJzc2k7ICAgICAgICAgICAgICAgLy8gcmVjZWl2ZSBzaWduYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmVuZ3RoIGluIGRCbQorICAgIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICAgICAgICAgIE5ldHdvcmtUeXBlSW5Vc2U7CisgICAgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiAgICAgICAgICAgQ29uZmlndXJhdGlvbjsKKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBJbmZyYXN0cnVjdHVyZU1vZGU7CisgICAgTkRJU184MDJfMTFfUkFURVNfRVggICAgICAgICAgICAgICAgU3VwcG9ydGVkUmF0ZXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVMZW5ndGg7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVzWzFdOworfSBORElTX1dMQU5fQlNTSURfRVgsICpQTkRJU19XTEFOX0JTU0lEX0VYOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX05ESVNfODAyXzExX0JTU0lEX0xJU1RfRVgKK3sKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgIE51bWJlck9mSXRlbXM7ICAgICAgLy8gaW4gbGlzdCBiZWxvdywgYXQgbGVhc3QgMQorICAgIE5ESVNfV0xBTl9CU1NJRF9FWCAgICAgIEJzc2lkWzFdOworfSBORElTXzgwMl8xMV9CU1NJRF9MSVNUX0VYLCAqUE5ESVNfODAyXzExX0JTU0lEX0xJU1RfRVg7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU184MDJfMTFfRklYRURfSUVzCit7CisgICAgVUNIQVIgVGltZXN0YW1wWzhdOworICAgIFVTSE9SVCBCZWFjb25JbnRlcnZhbDsKKyAgICBVU0hPUlQgQ2FwYWJpbGl0aWVzOworfSBORElTXzgwMl8xMV9GSVhFRF9JRXMsICpQTkRJU184MDJfMTFfRklYRURfSUVzOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCit7CisgICAgVUNIQVIgRWxlbWVudElEOworICAgIFVDSEFSIExlbmd0aDsgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgZmllbGQKKyAgICBVQ0hBUiBkYXRhWzFdOworfSBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMsICpQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzOworCit0eXBlZGVmICBVTE9ORyAgIE5ESVNfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEOworCit0eXBlZGVmICBVTE9ORyAgIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQ7CisKK3R5cGVkZWYgIFVMT05HICAgTkRJU184MDJfMTFfQU5URU5OQTsKKwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgoreworICAgTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGwsCisgICBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQCit9IE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSLCAqUE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSOworCisvLyBBZGRlZCBuZXcgZW5jcnlwdGlvbiB0eXBlcworLy8gQWxzbyBhbGlhc2VkIHR5cGVkZWYgdG8gbmV3IG5hbWUKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfV0VQX1NUQVRVUworeworICAgTmRpczgwMl8xMVdFUEVuYWJsZWQsCisgICAgTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCA9IE5kaXM4MDJfMTFXRVBFbmFibGVkLAorICAgTmRpczgwMl8xMVdFUERpc2FibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQsCisgICBOZGlzODAyXzExV0VQS2V5QWJzZW50LAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUtleUFic2VudCA9IE5kaXM4MDJfMTFXRVBLZXlBYnNlbnQsCisgICBOZGlzODAyXzExV0VQTm90U3VwcG9ydGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uTm90U3VwcG9ydGVkID0gTmRpczgwMl8xMVdFUE5vdFN1cHBvcnRlZCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMktleUFic2VudCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0tleUFic2VudCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkLAkvLyBUS0lQIG9yIEFFUyBtaXgKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjRLZXlBYnNlbnQsCit9IE5ESVNfODAyXzExX1dFUF9TVEFUVVMsICpQTkRJU184MDJfMTFfV0VQX1NUQVRVUywKKyAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMsICpQTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVM7CisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfUkVMT0FEX0RFRkFVTFRTCit7CisgICBOZGlzODAyXzExUmVsb2FkV0VQS2V5cworfSBORElTXzgwMl8xMV9SRUxPQURfREVGQVVMVFMsICpQTkRJU184MDJfMTFfUkVMT0FEX0RFRkFVTFRTOworCisjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFUUZJX0NBUEFCSUxJVElFUyAgICAgIDEKKyNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVRRklfTElTVEVOSU5URVJWQUwgICAgMgorI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVFGSV9DVVJSRU5UQVBBRERSRVNTICA0CisKKyNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVTRklfQ0FQQUJJTElUSUVTICAgICAgMQorI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVNGSV9TVEFUVVNDT0RFICAgICAgICAyCisjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFU0ZJX0FTU09DSUFUSU9OSUQgICAgIDQKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FJX1JFUUZJCit7CisgICAgVVNIT1JUIENhcGFiaWxpdGllczsKKyAgICBVU0hPUlQgTGlzdGVuSW50ZXJ2YWw7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgIEN1cnJlbnRBUEFkZHJlc3M7Cit9IE5ESVNfODAyXzExX0FJX1JFUUZJLCAqUE5ESVNfODAyXzExX0FJX1JFUUZJOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQUlfUkVTRkkKK3sKKyAgICBVU0hPUlQgQ2FwYWJpbGl0aWVzOworICAgIFVTSE9SVCBTdGF0dXNDb2RlOworICAgIFVTSE9SVCBBc3NvY2lhdGlvbklkOworfSBORElTXzgwMl8xMV9BSV9SRVNGSSwgKlBORElTXzgwMl8xMV9BSV9SRVNGSTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCit7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTGVuZ3RoOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZVJlcXVlc3RGaXhlZElFczsKKyAgICBORElTXzgwMl8xMV9BSV9SRVFGSSAgICBSZXF1ZXN0Rml4ZWRJRXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgUmVxdWVzdElFTGVuZ3RoOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE9mZnNldFJlcXVlc3RJRXM7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlUmVzcG9uc2VGaXhlZElFczsKKyAgICBORElTXzgwMl8xMV9BSV9SRVNGSSAgICBSZXNwb25zZUZpeGVkSUVzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlSUVMZW5ndGg7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgT2Zmc2V0UmVzcG9uc2VJRXM7Cit9IE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OLCAqUE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQKK3sKKyAgICBORElTXzgwMl8xMV9TVEFUVVNfSU5ESUNBVElPTiAgICAgICBTdGF0dXM7CisgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fUkVRVUVTVCAgUmVxdWVzdFsxXTsKK30gTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQsICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQ7CisKKy8qCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfVEVTVAoreworICAgIFVMT05HIExlbmd0aDsKKyAgICBVTE9ORyBUeXBlOworICAgIHVuaW9uCisgICAgeworICAgICAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9FVkVOVCBBdXRoZW50aWNhdGlvbkV2ZW50OworICAgICAgICBORElTXzgwMl8xMV9SU1NJIFJzc2lUcmlnZ2VyOworICAgIH07Cit9IE5ESVNfODAyXzExX1RFU1QsICpQTkRJU184MDJfMTFfVEVTVDsKKyAqLworCisvLyA4MDIuMTEgTWVkaWEgc3RyZWFtIGNvbnN0cmFpbnRzLCBhc3NvY2lhdGVkIHdpdGggT0lEXzgwMl8xMV9NRURJQV9TVFJFQU1fTU9ERQordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9NRURJQV9TVFJFQU1fTU9ERQoreworICAgIE5kaXM4MDJfMTFNZWRpYVN0cmVhbU9mZiwKKyAgICBOZGlzODAyXzExTWVkaWFTdHJlYW1PbiwKK30gTkRJU184MDJfMTFfTUVESUFfU1RSRUFNX01PREUsICpQTkRJU184MDJfMTFfTUVESUFfU1RSRUFNX01PREU7CisKKy8vIFBNS0lEIFN0cnVjdHVyZXMKK3R5cGVkZWYgVUNIQVIgICBORElTXzgwMl8xMV9QTUtJRF9WQUxVRVsxNl07CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK3R5cGVkZWYgc3RydWN0IF9CU1NJRF9JTkZPCit7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7CisgICAgTkRJU184MDJfMTFfUE1LSURfVkFMVUUgUE1LSUQ7Cit9IEJTU0lEX0lORk8sICpQQlNTSURfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1BNS0lECit7CisgICAgVUlOVCAgICBMZW5ndGg7CisgICAgVUlOVCAgICBCU1NJREluZm9Db3VudDsKKyAgICBCU1NJRF9JTkZPIEJTU0lESW5mb1sxXTsKK30gTkRJU184MDJfMTFfUE1LSUQsICpQTkRJU184MDJfMTFfUE1LSUQ7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VOQ1JZUFRJT04KK3sKKyAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFIEF1dGhNb2RlU3VwcG9ydGVkOworICAgIE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTIEVuY3J5cHRTdGF0dXNTdXBwb3J0ZWQ7Cit9IE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VOQ1JZUFRJT04sICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRU5DUllQVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0NBUEFCSUxJVFkKK3sKKyAgICAgVUxPTkcgTGVuZ3RoOworICAgICBVTE9ORyBWZXJzaW9uOworICAgICBVTE9ORyBOb09mUE1LSURzOworICAgICBVTE9ORyBOb09mQXV0aEVuY3J5cHRQYWlyc1N1cHBvcnRlZDsKKyAgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRU5DUllQVElPTiBBdXRoZW50aWNhdGlvbkVuY3J5cHRpb25TdXBwb3J0ZWRbMV07Cit9IE5ESVNfODAyXzExX0NBUEFCSUxJVFksICpQTkRJU184MDJfMTFfQ0FQQUJJTElUWTsKKworLy8jZW5kaWYgLy9vZiBXSU4gMmsKKyNlbmRpZiAvL1VOREVSX0NFCisKKyNpZiBXSVJFTEVTU19FWFQgPD0gMTEKKyNpZm5kZWYgU0lPQ0RFVlBSSVZBVEUKKyNkZWZpbmUgU0lPQ0RFVlBSSVZBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRTAKKyNlbmRpZgorI2RlZmluZSBTSU9DSVdGSVJTVFBSSVYJCQkJCQkJCVNJT0NERVZQUklWQVRFCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBSVF9QUklWX0lPQ1RMX0VYVAkJCQkJCQkoU0lPQ0lXRklSU1RQUklWICsgMHgwMSkgLy8gU3luYy4gd2l0aCBBUCBmb3Igd3NjIHVwbnAgZGFlbW9uCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9TRVQJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MDIpCisKKyNpZmRlZiBEQkcKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0JCUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwMykKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwNSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1JGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgxMykKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0UyUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwNykKKyNlbmRpZgorCisjaWZkZWYgUkFMSU5LX0FURQorI2lmZGVmIFJBTElOS18yOHh4X1FBCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9BVEUJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MDgpCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwOSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0FERF9QTUtJRF9DQUNIRSAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwQSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1JBRElVU19EQVRBICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwQykKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0dTSVRFU1VSVkVZCQkJCQkoU0lPQ0lXRklSU1RQUklWICsgMHgwRCkKKyNkZWZpbmUgUlRfUFJJVl9JT0NUTAkJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MEUpIC8vIFN5bmMuIHdpdGggUlQ2MSAoZm9yIHdwYV9zdXBwbGljYW50KQorI2RlZmluZSBSVFBSSVZfSU9DVExfR0VUX01BQ19UQUJMRQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MEYpCisKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1NIT1cJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MTEpCitlbnVtIHsKKyAgICBTSE9XX0NPTk5fU1RBVFVTID0gNCwKKyAgICBTSE9XX0RSVklFUl9WRVJJT04gPSA1LAorICAgIFNIT1dfQkFfSU5GTyA9IDYsCisJU0hPV19ERVNDX0lORk8gPSA3LAorI2lmZGVmIFJUMjg3MAorCVNIT1dfUlhCVUxLX0lORk8gPSA4LAorCVNIT1dfVFhCVUxLX0lORk8gPSA5LAorI2VuZGlmIC8vIFJUMjg3MCAvLworICAgIFJBSU9fT0ZGID0gMTAsCisgICAgUkFJT19PTiA9IDExLAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCVNIT1dfRExTX0VOVFJZX0lORk8gPSAxOSwKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwlTSE9XX0NGR19WQUxVRSA9IDIwLAorfTsKKworCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisjaWZkZWYgU05NUF9TVVBQT1JUCisvL1NOTVAgaWVlZSA4MDJkb3QxMSwga2F0aHkgLCAyMDA4XzAyMjAKKy8vIGRvdDExcmVzKDMpCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVST1VJCQkJMHgwNzAwCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVSTkFNRQkJCTB4MDcwMQorI2RlZmluZSBSVF9PSURfODAyXzExX1JFU09VUkNFVFlQRUlETkFNRQkJMHgwNzAyCisKKy8vIGRvdDExc210KDEpCisjZGVmaW5lIFJUX09JRF84MDJfMTFfUFJJVkFDWU9QVElPTklNUExFTUVOVEVECTB4MDcwMworI2RlZmluZSBSVF9PSURfODAyXzExX1BPV0VSTUFOQUdFTUVOVE1PREUJCTB4MDcwNAorI2RlZmluZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRQkJCTB4MDcwNSAvLyByZWFkICwgd3JpdGUKKyNkZWZpbmUgT0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZSUQJCQkJMHgwNzA2CisjZGVmaW5lIFJUX09JRF84MDJfMTFfV0VQS0VZTUFQUElOR0xFTkdUSAkJMHgwNzA3CisjZGVmaW5lIE9JRF84MDJfMTFfU0hPUlRSRVRSWUxJTUlUCQkJCTB4MDcwOAorI2RlZmluZSBPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUCQkJCTB4MDcwOQorI2RlZmluZSBSVF9PSURfODAyXzExX1BST0RVQ1RJRAkJCQkJMHgwNzEwCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVJRAkJCQkweDA3MTEKKworLy8gLy9kb3QxMVBoeSg0KQorI2RlZmluZSBPSURfODAyXzExX0NVUlJFTlRDSEFOTkVMCQkJCTB4MDcxMgorCisvL2RvdDExbWFjCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFDX0FERFJFU1MJCQkJMHgwNzEzCisjZW5kaWYgLy8gU05NUF9TVVBQT1JUIC8vCisKKyNkZWZpbmUgT0lEXzgwMl8xMV9CVUlMRF9DSEFOTkVMX0VYCQkJCTB4MDcxNAorI2RlZmluZSBPSURfODAyXzExX0dFVF9DSF9MSVNUCQkJCQkweDA3MTUKKyNkZWZpbmUgT0lEXzgwMl8xMV9HRVRfQ09VTlRSWV9DT0RFCQkJCTB4MDcxNgorI2RlZmluZSBPSURfODAyXzExX0dFVF9DSEFOTkVMX0dFT0dSQVBIWQkJMHgwNzE3CisKKy8vI2RlZmluZSBSVF9PSURfODAyXzExX1NUQVRJU1RJQ1MgICAgICAgICAgICAgIChPSURfR0VUX1NFVF9UT0dHTEUgfCBPSURfODAyXzExX1NUQVRJU1RJQ1MpCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfUEFTU1BIUkFTRSAgICAgICAgICAgICAgICAgICAweDA3NDAgLy8gcGFzc3BocmFzZSBmb3Igd3BhKDIpLXBzaworI2RlZmluZSBSVF9PSURfV1NDX0RSSVZFUl9BVVRPX0NPTk5FQ1QgICAgICAgICAgICAgIDB4MDc0MQorI2RlZmluZSBSVF9PSURfV1NDX1FVRVJZX0RFRkFVTFRfUFJPRklMRSAgICAgICAgICAgIDB4MDc0MgorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9DT05OX0JZX1BST0ZJTEVfSU5ERVggICAgICAgIDB4MDc0MworI2RlZmluZSBSVF9PSURfV1NDX1NFVF9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgIDB4MDc0NAorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9TU0lEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc0NQorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9QSU5fQ09ERSAgICAgICAgICAgICAgICAgICAgIDB4MDc0NgorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc0NyAvLyBQSU4gb3IgUEJDCisjZGVmaW5lIFJUX09JRF9XU0NfU0VUX0NPTkZfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwNzQ4IC8vIEVucm9sbGVlIG9yIFJlZ2lzdHJhcgorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9QUk9GSUxFICAgICAgICAgICAgICAgICAgICAgIDB4MDc0OQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2RlZmluZSBSVF9PSURfODAyXzExX1dTQ19RVUVSWV9QUk9GSUxFCQkJCTB4MDc1MAorLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggUlQ2MQorI2RlZmluZSBSVF9PSURfV1NDX1FVRVJZX1NUQVRVUwkJCQkJCTB4MDc1MQorI2RlZmluZSBSVF9PSURfV1NDX1BJTl9DT0RFCQkJCQkJCTB4MDc1MgorI2RlZmluZSBSVF9PSURfV1NDX1VVSUQJCQkJCQkJCTB4MDc1MworI2RlZmluZSBSVF9PSURfV1NDX1NFVF9TRUxFQ1RFRF9SRUdJU1RSQVIJCQkweDA3NTQKKyNkZWZpbmUgUlRfT0lEX1dTQ19FQVBNU0cJCQkJCQkJMHgwNzU1CisjZGVmaW5lIFJUX09JRF9XU0NfTUFOVUZBQ1RVUkVSCQkJCQkJMHgwNzU2CisjZGVmaW5lIFJUX09JRF9XU0NfTU9ERUxfTkFNRQkJCQkJCTB4MDc1NworI2RlZmluZSBSVF9PSURfV1NDX01PREVMX05PCQkJCQkJCTB4MDc1OAorI2RlZmluZSBSVF9PSURfV1NDX1NFUklBTF9OTwkJCQkJCTB4MDc1OQorI2RlZmluZSBSVF9PSURfV1NDX01BQ19BRERSRVNTCQkJCQkJMHgwNzYwCisKKyNpZmRlZiBMTFREX1NVUFBPUlQKKy8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIFJUNjEKKyNkZWZpbmUgUlRfT0lEX0dFVF9QSFlfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDc2MQorI2VuZGlmIC8vIExMVERfU1VQUE9SVCAvLworCisjaWZkZWYgTklOVEVORE9fQVAKKy8vI2RlZmluZSBSVF9PSURfTklOVEVORE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMTA3NzAKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9OSU5URU5ET19HRVRfVEFCTEUJCQkweDA3NzEgLy8oKFJUX09JRF9OSU5URU5ETyArIDB4MDEpICYgMHhmZmZmKQorI2RlZmluZSBSVF9PSURfODAyXzExX05JTlRFTkRPX1NFVF9UQUJMRQkJCTB4MDc3MiAvLygoUlRfT0lEX05JTlRFTkRPICsgMHgwMikgJiAweGZmZmYpCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTklOVEVORE9fQ0FQQUJMRQkJCQkweDA3NzMgLy8oKFJUX09JRF9OSU5URU5ETyArIDB4MDMpICYgMHhmZmZmKQorI2VuZGlmIC8vIE5JTlRFTkRPX0FQIC8vCisKKy8vQWRkIFBhdWwgQ2hlbiBmb3IgQWNjdG9uCisvLyNkZWZpbmUgUlRfT0lEX1RYX1BPV0VSX0xFVkVMICAgICAgICAgICAgICAgICAweEZGMDIwMDEwCisvLyNkZWZpbmUgUlRfT0lEX1NFVF9UWF9QT1dFUl9MRVZFTAkgICAgICAgICAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8IFJUX09JRF9UWF9QT1dFUl9MRVZFTCkKKworLy8gTmV3IGZvciBNZWV0aW5nSG91c2UgQXBpIHN1cHBvcnQKKyNkZWZpbmUgT0lEX01IXzgwMl8xWF9TVVBQT1JURUQgICAgICAgICAgICAgICAweEZGRURDMTAwCisKKy8vIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSS4gRG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbiEhIQordHlwZWRlZiB1bmlvbiAgX0hUVFJBTlNNSVRfU0VUVElORyB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCXN0cnVjdAl7CisJVVNIT1JUCQlNT0RFOjI7CS8vIFVzZSBkZWZpbml0aW9uIE1PREVfeHh4LgorLy8JVVNIT1JUCQlyc3Y6MzsKKwlVU0hPUlQJCVR4QkY6MTsKKwlVU0hPUlQJCXJzdjoyOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisJVVNIT1JUCQlTaG9ydEdJOjE7CisJVVNIT1JUCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVCAgIAlNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworCX0JZmllbGQ7CisjZWxzZQorCXN0cnVjdAl7CisJVVNIT1JUICAgCU1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisJVVNIT1JUCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVAkJU2hvcnRHSToxOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisvLwlVU0hPUlQJCXJzdjozOworCVVTSE9SVAkJcnN2OjI7CisJVVNIT1JUCQlUeEJGOjE7CisJVVNIT1JUCQlNT0RFOjI7CS8vIFVzZSBkZWZpbml0aW9uIE1PREVfeHh4LgorCX0JZmllbGQ7CisjZW5kaWYKKwlVU0hPUlQJCXdvcmQ7CisgfSBIVFRSQU5TTUlUX1NFVFRJTkcsICpQSFRUUkFOU01JVF9TRVRUSU5HOworCit0eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9QUkVBTUJMRSB7CisgICAgUnQ4MDJfMTFQcmVhbWJsZUxvbmcsCisgICAgUnQ4MDJfMTFQcmVhbWJsZVNob3J0LAorICAgIFJ0ODAyXzExUHJlYW1ibGVBdXRvCit9IFJUXzgwMl8xMV9QUkVBTUJMRSwgKlBSVF84MDJfMTFfUFJFQU1CTEU7CisKKy8vIE9ubHkgZm9yIFNUQSwgbmVlZCB0byBzeW5jIHdpdGggQVAKKy8vIDIwMDUtMDMtMDggbWF0Y2ggY3VycmVudCBSYUNvbmZpZy4KK3R5cGVkZWYgZW51bSBfUlRfODAyXzExX1BIWV9NT0RFIHsKKwlQSFlfMTFCR19NSVhFRCA9IDAsCisJUEhZXzExQiwKKwlQSFlfMTFBLAorCVBIWV8xMUFCR19NSVhFRCwKKwlQSFlfMTFHLAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVBIWV8xMUFCR05fTUlYRUQsCS8vIGJvdGggYmFuZCAgIDUKKwlQSFlfMTFOXzJfNEcsCQkvLyAxMW4tb25seSB3aXRoIDIuNEcgYmFuZCAgIAk2CisJUEhZXzExR05fTUlYRUQsCS8vIDIuNEcgYmFuZCAgICAgIDcKKwlQSFlfMTFBTl9NSVhFRCwJLy8gNUcgIGJhbmQgICAgICAgOAorCVBIWV8xMUJHTl9NSVhFRCwJLy8gaWYgY2hlY2sgODAyLjExYi4gICAgICA5CisJUEhZXzExQUdOX01JWEVELAkvLyBpZiBjaGVjayA4MDIuMTFiLiAgICAgIDEwCisJUEhZXzExTl81RywJCQkvLyAxMW4tb25seSB3aXRoIDVHIGJhbmQJCTExCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9IFJUXzgwMl8xMV9QSFlfTU9ERTsKKworLy8gcHV0IGFsbCBwcm9wcmlldGVyeSBmb3ItcXVlcnkgb2JqZWN0cyBoZXJlIHRvIHJlZHVjZSAjIG9mIFF1ZXJ5X09JRAordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9MSU5LX1NUQVRVUyB7CisgICAgVUxPTkcgICBDdXJyVHhSYXRlOyAgICAgICAgIC8vIGluIHVuaXRzIG9mIDAuNU1icHMKKyAgICBVTE9ORyAgIENoYW5uZWxRdWFsaXR5OyAgICAgLy8gMC4uMTAwICUKKyAgICBVTE9ORyAgIFR4Qnl0ZUNvdW50OyAgICAgICAgLy8gYm90aCBvayBhbmQgZmFpbAorICAgIFVMT05HICAgUnhCeXRlQ291bnQ7ICAgICAgICAvLyBib3RoIG9rIGFuZCBmYWlsCisgICAgVUxPTkcJQ2VudHJhbENoYW5uZWw7CQkvLyA0ME1IeiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyCit9IFJUXzgwMl8xMV9MSU5LX1NUQVRVUywgKlBSVF84MDJfMTFfTElOS19TVEFUVVM7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRVZFTlRfTE9HIHsKKyAgICBMQVJHRV9JTlRFR0VSICAgU3lzdGVtVGltZTsgIC8vIHRpbWVzdGFtbXAgdmlhIE5kaXNHZXRDdXJyZW50U3lzdGVtVGltZSgpCisgICAgVUNIQVIgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOR1RIXTsKKyAgICBVU0hPUlQgICAgICAgICAgRXZlbnQ7ICAgICAgIC8vIEVWRU5UX3h4eAorfSBSVF84MDJfMTFfRVZFTlRfTE9HLCAqUFJUXzgwMl8xMV9FVkVOVF9MT0c7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRVZFTlRfVEFCTEUgeworICAgIFVMT05HICAgICAgIE51bTsKKyAgICBVTE9ORyAgICAgICBSc3Y7ICAgICAvLyB0byBhbGlnbiBMb2dbXSBhdCBMQVJHRV9JTkVHRVIgYm91bmRhcnkKKyAgICBSVF84MDJfMTFfRVZFTlRfTE9HICAgTG9nW01BWF9OVU1CRVJfT0ZfRVZFTlRdOworfSBSVF84MDJfMTFfRVZFTlRfVEFCTEUsIFBSVF84MDJfMTFfRVZFTlRfVEFCTEU7CisKKy8vIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSS4gRG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbiEhIQordHlwZWRlZiB1bmlvbiAgX01BQ0hUVFJBTlNNSVRfU0VUVElORyB7CisJc3RydWN0CXsKKwlVU0hPUlQgICAJTUNTOjc7ICAgICAgICAgICAgICAgICAvLyBNQ1MKKwlVU0hPUlQJCUJXOjE7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVVNIT1JUCQlTaG9ydEdJOjE7CisJVVNIT1JUCQlTVEJDOjI7CS8vU1BBQ0UKKwlVU0hPUlQJCXJzdjozOworCVVTSE9SVAkJTU9ERToyOwkvLyBVc2UgZGVmaW5pdGlvbiBNT0RFX3h4eC4KKwl9CWZpZWxkOworCVVTSE9SVAkJd29yZDsKKyB9IE1BQ0hUVFJBTlNNSVRfU0VUVElORywgKlBNQUNIVFRSQU5TTUlUX1NFVFRJTkc7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfTUFDX0VOVFJZIHsKKyAgICBVQ0hBUiAgICAgICBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgICAgVUNIQVIgICAgICAgQWlkOworICAgIFVDSEFSICAgICAgIFBzbTsgICAgIC8vIDA6UFdSX0FDVElWRSwgMTpQV1JfU0FWRQorICAgIFVDSEFSCQlNaW1vUHM7ICAvLyAwOk1NUFNfU1RBVElDLCAxOk1NUFNfRFlOQU1JQywgMzpNTVBTX0VuYWJsZWQKKyAgICBDSEFSCQlBdmdSc3NpMDsKKwlDSEFSCQlBdmdSc3NpMTsKKwlDSEFSCQlBdmdSc3NpMjsKKwlVSU5UMzIJCUNvbm5lY3RlZFRpbWU7CisgICAgTUFDSFRUUkFOU01JVF9TRVRUSU5HCVR4UmF0ZTsKK30gUlRfODAyXzExX01BQ19FTlRSWSwgKlBSVF84MDJfMTFfTUFDX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX01BQ19UQUJMRSB7CisgICAgVUxPTkcgICAgICAgTnVtOworICAgIFJUXzgwMl8xMV9NQUNfRU5UUlkgRW50cnlbTUFYX05VTUJFUl9PRl9NQUNdOworfSBSVF84MDJfMTFfTUFDX1RBQkxFLCAqUFJUXzgwMl8xMV9NQUNfVEFCTEU7CisKKy8vIHN0cnVjdHVyZSBmb3IgcXVlcnkvc2V0IGhhcmR3YXJlIHJlZ2lzdGVyIC0gTUFDLCBCQlAsIFJGIHJlZ2lzdGVyCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0hBUkRXQVJFX1JFR0lTVEVSIHsKKyAgICBVTE9ORyAgIEhhcmR3YXJlVHlwZTsgICAgICAgLy8gMDpNQUMsIDE6QkJQLCAyOlJGIHJlZ2lzdGVyLCAzOkVFUFJPTQorICAgIFVMT05HICAgT2Zmc2V0OyAgICAgICAgICAgICAvLyBRL1MgcmVnaXN0ZXIgb2Zmc2V0IGFkZHIKKyAgICBVTE9ORyAgIERhdGE7ICAgICAgICAgICAgICAgLy8gUi9XIGRhdGEgYnVmZmVyCit9IFJUXzgwMl8xMV9IQVJEV0FSRV9SRUdJU1RFUiwgKlBSVF84MDJfMTFfSEFSRFdBUkVfUkVHSVNURVI7CisKKy8vIHN0cnVjdHVyZSB0byB0dW5lIEJCUCBSMTcgIlJYIEFHQyBWR0MgaW5pdCIKKy8vdHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9SWF9BR0NfVkdDX1RVTklORyB7CisvLyAgICBVQ0hBUiAgIEZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQ7ICAvLyAwLTI1NSwgZGVmIDEwCisvLyAgICBVQ0hBUiAgIEZhbHNlQ2NhVXBwZXJUaHJlc2hvbGQ7ICAvLyAwLTI1NSwgZGVmIDEwMAorLy8gICAgVUNIQVIgICBWZ2NEZWx0YTsgICAgICAgICAgICAgICAgLy8gUjE3ICstPSBWZ2NEZWx0YSB3aGVuZXZlciBmbGFzZSBDQ0Egb3ZlciBVcHByVGhyZXNob2xkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBsb3dlciB0aGFuIExvd2VyVGhyZXNob2xkdXBwZXIgdGhyZXNob2xkCisvLyAgICBVQ0hBUiAgIFZnY1VwcGVyQm91bmQ7ICAgICAgICAgICAvLyBtYXggdmFsdWUgb2YgUjE3CisvL30gUlRfODAyXzExX1JYX0FHQ19WR0NfVFVOSU5HLCAqUFJUXzgwMl8xMV9SWF9BR0NfVkdDX1RVTklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9BUF9DT05GSUcgeworICAgIFVMT05HICAgRW5hYmxlVHhCdXJzdDsgICAgICAvLyAwLWRpc2FibGUsIDEtZW5hYmxlCisgICAgVUxPTkcgICBFbmFibGVUdXJib1JhdGU7ICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUgNzIvMTAwbWJwcyB0dXJibyByYXRlCisgICAgVUxPTkcgICBJc29sYXRlSW50ZXJTdGFUcmFmZmljOyAgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZSBpc29sYXRpb24KKyAgICBVTE9ORyAgIEhpZGVTc2lkOyAgICAgICAgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZSBoaWRpbmcKKyAgICBVTE9ORyAgIFVzZUJHUHJvdGVjdGlvbjsgICAgLy8gMC1BVVRPLCAxLWFsd2F5cyBPTiwgMi1hbHdheXMgT0ZGCisgICAgVUxPTkcgICBVc2VTaG9ydFNsb3RUaW1lOyAgIC8vIDAtbm8gdXNlLCAxLXVzZSA5LXVzIHNob3J0IHNsb3QgdGltZQorICAgIFVMT05HICAgUnN2MTsgICAgICAgICAgICAgICAvLyBtdXN0IGJlIDAKKyAgICBVTE9ORyAgIFN5c3RlbUVycm9yQml0bWFwOyAgLy8gaWdub3JlIHVwb24gU0VULCByZXR1cm4gc3lzdGVtIGVycm9yIHVwb24gUVVFUlkKK30gUlRfODAyXzExX0FQX0NPTkZJRywgKlBSVF84MDJfMTFfQVBfQ09ORklHOworCisvLyBzdHJ1Y3R1cmUgdG8gcXVlcnkvc2V0IFNUQV9DT05GSUcKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfU1RBX0NPTkZJRyB7CisgICAgVUxPTkcgICBFbmFibGVUeEJ1cnN0OyAgICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUKKyAgICBVTE9ORyAgIEVuYWJsZVR1cmJvUmF0ZTsgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZSA3Mi8xMDBtYnBzIHR1cmJvIHJhdGUKKyAgICBVTE9ORyAgIFVzZUJHUHJvdGVjdGlvbjsgICAgLy8gMC1BVVRPLCAxLWFsd2F5cyBPTiwgMi1hbHdheXMgT0ZGCisgICAgVUxPTkcgICBVc2VTaG9ydFNsb3RUaW1lOyAgIC8vIDAtbm8gdXNlLCAxLXVzZSA5LXVzIHNob3J0IHNsb3QgdGltZSB3aGVuIGFwcGxpY2FibGUKKyAgICBVTE9ORyAgIEFkaG9jTW9kZTsgCQkJLy8gMC0xMWIgcmF0ZXMgb25seSAoV0lGSSBzcGVjKSwgMSAtIGIvZyBtaXhlZCwgMiAtIGcgb25seQorICAgIFVMT05HICAgSHdSYWRpb1N0YXR1czsgICAgICAvLyAwLU9GRiwgMS1PTiwgZGVmYXVsdCBpcyAxLCBSZWFkLU9ubHkKKyAgICBVTE9ORyAgIFJzdjE7ICAgICAgICAgICAgICAgLy8gbXVzdCBiZSAwCisgICAgVUxPTkcgICBTeXN0ZW1FcnJvckJpdG1hcDsgIC8vIGlnbm9yZSB1cG9uIFNFVCwgcmV0dXJuIHN5c3RlbSBlcnJvciB1cG9uIFFVRVJZCit9IFJUXzgwMl8xMV9TVEFfQ09ORklHLCAqUFJUXzgwMl8xMV9TVEFfQ09ORklHOworCisvLworLy8gIEZvciBPSUQgUXVlcnkgb3IgU2V0IGFib3V0IEJBIHN0cnVjdHVyZQorLy8KK3R5cGVkZWYJc3RydWN0CV9PSURfQkFDQVBfU1RSVUMJeworCQlVQ0hBUgkJUnhCQVdpbkxpbWl0OworCQlVQ0hBUgkJVHhCQVdpbkxpbWl0OworCQlVQ0hBUgkJUG9saWN5OwkvLyAwOiBERUxBWV9CQSAxOklNTUVEX0JBICAoLy9CQSBQb2xpY3kgc3ViZmlsZWQgdmFsdWUgaW4gQUREQkEgZnJhbWUpICAgMjpCQS1ub3QgdXNlLiBvdGhlciB2YWx1ZSBpbnZhbGlkCisJCVVDSEFSCQlNcGR1RGVuc2l0eTsJLy8gMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZS4gb3RoZXIgdmFsdWUgaW52YWxpZAorCQlVQ0hBUiAgICAgICAJQW1zZHVFbmFibGU7CS8vRW5hYmxlIEFNU0RVIHRyYW5zbWlzc3Rpb24KKwkJVUNIQVIgICAgICAgCUFtc2R1U2l6ZTsJLy8gMDozODM5LCAxOjc5MzUgYnl0ZXMuIFVJTlQgIE1TRFVTaXplVG9CeXRlc1tdCT0geyAzODM5LCA3OTM1fTsKKwkJVUNIQVIgICAgICAgCU1NUFNtb2RlOwkvLyBNSU1PIHBvd2VyIHNhdmUgbW9yZSwgMDpzdGF0aWMsIDE6ZHluYW1pYywgMjpyc3YsIDM6bWltbyBlbmFibGUKKwkJQk9PTEVBTgkJQXV0b0JBOwkvLyBBdXRvIEJBIHdpbGwgYXV0b21hdGljYWxseQorfSBPSURfQkFDQVBfU1RSVUMsICpQT0lEX0JBQ0FQX1NUUlVDOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0FDTF9FTlRSWSB7CisgICAgVUNIQVIgICBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgICAgVVNIT1JUICBSc3Y7Cit9IFJUXzgwMl8xMV9BQ0xfRU5UUlksICpQUlRfODAyXzExX0FDTF9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SVF84MDJfMTFfQUNMIHsKKyAgICBVTE9ORyAgIFBvbGljeTsgICAgICAgICAgICAgLy8gMC1kaXNhYmxlLCAxLXBvc2l0aXZlIGxpc3QsIDItbmVnYXRpdmUgbGlzdAorICAgIFVMT05HICAgTnVtOworICAgIFJUXzgwMl8xMV9BQ0xfRU5UUlkgRW50cnlbTUFYX05VTUJFUl9PRl9BQ0xdOworfSBSVF84MDJfMTFfQUNMLCAqUFJUXzgwMl8xMV9BQ0w7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfV0RTIHsKKyAgICBVTE9ORwkJCQkJCU51bTsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUwkJRW50cnlbMjQvKk1BWF9OVU1fT0ZfV0RTX0xJTksqL107CisJVUxPTkcJCQkJCQlLZXlMZW5ndGg7CisJVUNIQVIJCQkJCQlLZXlNYXRlcmlhbFszMl07Cit9IFJUXzgwMl8xMV9XRFMsICpQUlRfODAyXzExX1dEUzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9UWF9SQVRFU18geworICAgIFVDSEFSICAgICAgIFN1cFJhdGVMZW47CisgICAgVUNIQVIgICAgICAgU3VwUmF0ZVtNQVhfTEVOR1RIX09GX1NVUFBPUlRfUkFURVNdOworICAgIFVDSEFSICAgICAgIEV4dFJhdGVMZW47CisgICAgVUNIQVIgICAgICAgRXh0UmF0ZVtNQVhfTEVOR1RIX09GX1NVUFBPUlRfUkFURVNdOworfSBSVF84MDJfMTFfVFhfUkFURVMsICpQUlRfODAyXzExX1RYX1JBVEVTOworCisKKy8vIERlZmluaXRpb24gb2YgZXh0cmEgaW5mb3JtYXRpb24gY29kZQorI2RlZmluZQlHRU5FUkFMX0xJTktfVVAJCQkweDAJCQkvLyBMaW5rIGlzIFVwCisjZGVmaW5lCUdFTkVSQUxfTElOS19ET1dOCQkweDEJCQkvLyBMaW5rIGlzIERvd24KKyNkZWZpbmUJSFdfUkFESU9fT0ZGCQkJMHgyCQkJLy8gSGFyZHdhcmUgcmFkaW8gb2ZmCisjZGVmaW5lCVNXX1JBRElPX09GRgkJCTB4MwkJCS8vIFNvZnR3YXJlIHJhZGlvIG9mZgorI2RlZmluZQlBVVRIX0ZBSUwJCQkJMHg0CQkJLy8gT3BlbiBhdXRoZW50aWNhdGlvbiBmYWlsCisjZGVmaW5lCUFVVEhfRkFJTF9LRVlTCQkJMHg1CQkJLy8gU2hhcmVkIGF1dGhlbnRpY2F0aW9uIGZhaWwKKyNkZWZpbmUJQVNTT0NfRkFJTAkJCQkweDYJCQkvLyBBc3NvY2lhdGlvbiBmYWlsZWQKKyNkZWZpbmUJRUFQX01JQ19GQUlMVVJFCQkJMHg3CQkJLy8gRGVhdXRoZW5jYXRpb24gYmVjYXVzZSBNSUMgZmFpbHVyZQorI2RlZmluZQlFQVBfNFdBWV9USU1FT1VUCQkweDgJCQkvLyBEZWF1dGhlbmNhdGlvbiBvbiA0LXdheSBoYW5kc2hha2UgdGltZW91dAorI2RlZmluZQlFQVBfR1JPVVBfS0VZX1RJTUVPVVQJMHg5CQkJLy8gRGVhdXRoZW5jYXRpb24gb24gZ3JvdXAga2V5IGhhbmRzaGFrZSB0aW1lb3V0CisjZGVmaW5lCUVBUF9TVUNDRVNTCQkJCTB4YQkJCS8vIEVBUCBzdWNjZWVkCisjZGVmaW5lCURFVEVDVF9SQURBUl9TSUdOQUwJCTB4YiAgICAgICAgIC8vIFJhZGFyIHNpZ25hbCBvY2N1ciBpbiBjdXJyZW50IGNoYW5uZWwKKyNkZWZpbmUgRVhUUkFfSU5GT19NQVgJCQkweGIJCQkvLyBJbmRpY2F0ZSBMYXN0IE9JRAorCisjZGVmaW5lIEVYVFJBX0lORk9fQ0xFQVIJCTB4ZmZmZmZmZmYKKworLy8gVGhpcyBpcyBPSUQgc2V0dGluZyBzdHJ1Y3R1cmUuIFNvIG9ubHkgR0Ygb3IgTU0gYXMgTW9kZS4gVGhpcyBpcyB2YWxpZCB3aGVuIG91ciB3aXJlbHNzIG1vZGUgaGFzIDgwMi4xMW4gaW4gdXNlLgordHlwZWRlZiBzdHJ1Y3QgeworCVJUXzgwMl8xMV9QSFlfTU9ERQkJUGh5TW9kZTsgCS8vCisJVUNIQVIJCVRyYW5zbWl0Tm87CisJVUNIQVIJCUh0TW9kZTsgCS8vSFRNT0RFX0dGIG9yIEhUTU9ERV9NTQorCVVDSEFSCQlFeHRPZmZzZXQ7CS8vZXh0ZW5zaW9uIGNoYW5uZWwgYWJvdmUgb3IgYmVsb3cKKwlVQ0hBUgkJTUNTOworCVVDSEFSICAgCUJXOworCVVDSEFSCQlTVEJDOworCVVDSEFSCQlTSE9SVEdJOworCVVDSEFSCQlyc3Y7Cit9IE9JRF9TRVRfSFRfUEhZTU9ERSwgKlBPSURfU0VUX0hUX1BIWU1PREU7CisKKyNpZmRlZiBOSU5URU5ET19BUAorI2RlZmluZSBOSU5URU5ET19NQVhfRU5UUlkgMTYKKyNkZWZpbmUgTklOVEVORE9fU1NJRF9OQU1FX0xOIDgKKyNkZWZpbmUgTklOVEVORE9fU1NJRF9OQU1FICJOV0NVU0JBUCIKKyNkZWZpbmUgTklOVEVORE9fUFJPQkVfUkVRX0ZMQUdfTUFTSyAweDAzCisjZGVmaW5lIE5JTlRFTkRPX1BST0JFX1JFUV9PTiAweDAxCisjZGVmaW5lIE5JTlRFTkRPX1BST0JFX1JFUV9TSUdOQUwgMHgwMgorI2RlZmluZSBOSU5URU5ET19QUk9CRV9SU1BfT04gMHgwMQorI2RlZmluZSBOSU5URU5ET19TU0lEX05JQ0tOQU1FX0xOIDIwCisKKyNkZWZpbmUgTklOVEVORE9fV0VQS0VZX0xOIDEzCisKK3R5cGVkZWYgc3RydWN0IF9OSU5URU5ET19TU0lECit7CisJVUNIQVIJTklOVEVORE9GaXhDaGFyW05JTlRFTkRPX1NTSURfTkFNRV9MTl07CisJVUNIQVIJemVybzE7CisJVUNIQVIJcmVnaXN0ZTsKKwlVQ0hBUglJRDsKKwlVQ0hBUgl6ZXJvMjsKKwlVQ0hBUglOSUNLbmFtZVtOSU5URU5ET19TU0lEX05JQ0tOQU1FX0xOXTsKK30gUlRfTklOVEVORE9fU1NJRCwgKlBSVF9OSU5URU5ET19TU0lEOworCit0eXBlZGVmIHN0cnVjdCBfTklOVEVORE9fRU5UUlkKK3sKKwlVQ0hBUglOSUNLbmFtZVtOSU5URU5ET19TU0lEX05JQ0tOQU1FX0xOXTsKKyAgICBVQ0hBUiAgIERTX0FkZHJbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKwlVQ0hBUglyZWdpc3RlOworCVVDSEFSCVVzZXJTcGFjZUFjazsKK30gUlRfTklOVEVORE9fRU5UUlksICpQUlRfTklOVEVORE9fRU5UUlk7CisKKy8vUlRQUklWX0lPQ1RMX05JTlRFTkRPX0dFVF9UQUJMRQorLy9SVFBSSVZfSU9DVExfTklOVEVORE9fU0VUX1RBQkxFCit0eXBlZGVmIHN0cnVjdCBfTklOVEVORE9fVEFCTEUKK3sKKwlVSU5UCQkJCW51bWJlcjsKKwlSVF9OSU5URU5ET19FTlRSWQllbnRyeVtOSU5URU5ET19NQVhfRU5UUlldOworfSBSVF9OSU5URU5ET19UQUJMRSwgKlBSVF9OSU5URU5ET19UQUJMRTsKKworLy9SVFBSSVZfSU9DVExfTklOVEVORE9fU0VFRF9XRVBLRVkKK3R5cGVkZWYgc3RydWN0IF9OSU5URU5ET19TRUVEX1dFUEtFWQoreworCVVDSEFSCXNlZWRbTklOVEVORE9fU1NJRF9OSUNLTkFNRV9MTl07CisJVUNIQVIJd2Vwa2V5WzE2XTsvL3VzZSAxMyBmb3IgMTA0IGJpdHMgd2VwIGtleQorfSBSVF9OSU5URU5ET19TRUVEX1dFUEtFWSwgKlBSVF9OSU5URU5ET19TRUVEX1dFUEtFWTsKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCisjaWZkZWYgTExURF9TVVBQT1JUCit0eXBlZGVmIHN0cnVjdCBfUlRfTExURF9BU1NPSUNBVElPTl9FTlRSWSB7CisgICAgVUNIQVIgICAgICAgICAgIEFkZHJbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgTU9SOyAgICAgICAgLy8gbWF4aW11bSBvcGVyYXRpb25hbCByYXRlCisgICAgVUNIQVIgICAgICAgICAgIHBoeU1vZGU7Cit9IFJUX0xMVERfQVNTT0lDQVRJT05fRU5UUlksICpQUlRfTExURF9BU1NPSUNBVElPTl9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUX0xMVERfQVNTT0lDQVRJT05fVEFCTEUgeworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBOdW07CisgICAgUlRfTExURF9BU1NPSUNBVElPTl9FTlRSWSAgIEVudHJ5W01BWF9OVU1CRVJfT0ZfTUFDXTsKK30gUlRfTExURF9BU1NPSUNBVElPTl9UQUJMRSwgKlBSVF9MTFREX0FTU09JQ0FUSU9OX1RBQkxFOworI2VuZGlmIC8vIExMVERfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisvL3J0Mjg2MCwga2F0aHkgMjAwNy0wMTE4CisvLyBzdHJ1Y3R1cmUgZm9yIERMUwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9ETFNfVUkgeworCVVTSE9SVAkJCQkJCVRpbWVPdXQ7CQkvLyB1bml0OiBzZWNvbmQgLCBzZXQgYnkgVUkKKwlVU0hPUlQJCQkJCQlDb3VudERvd25UaW1lcjsJLy8gdW5pdDogc2Vjb25kICwgdXNlZCBieSBkcml2ZXIgb25seQorCU5ESVNfODAyXzExX01BQ19BRERSRVNTCQlNYWNBZGRyOwkJLy8gc2V0IGJ5IFVJCisJVUNIQVIJCQkJCQlTdGF0dXM7CQkJLy8gMDogbm9uZSAsIDE6IHdhaXQgU1RBa2V5LCAyOiBmaW5pc2ggRExTIHNldHVwICwgc2V0IGJ5IGRyaXZlciBvbmx5CisJQk9PTEVBTgkJCQkJCVZhbGlkOwkJCS8vIDE6IHZhbGlkICwgMDogaW52YWxpZCAsIHNldCBieSBVSSwgdXNlIHRvIHNldHVwIG9yIHRlYXIgZG93biBETFMgbGluaworfSBSVF84MDJfMTFfRExTX1VJLCAqUFJUXzgwMl8xMV9ETFNfVUk7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRExTX0lORk8geworCVJUXzgwMl8xMV9ETFNfVUkJRW50cnlbTUFYX05VTUJFUl9PRl9ETFNfRU5UUlldOworCVVDSEFSCQkJCW51bTsKK30gUlRfODAyXzExX0RMU19JTkZPLCAqUFJUXzgwMl8xMV9ETFNfSU5GTzsKKwordHlwZWRlZiBlbnVtIF9SVF84MDJfMTFfRExTX01PREUgeworICAgIERMU19OT05FLAorICAgIERMU19XQUlUX0tFWSwKKyAgICBETFNfRklOSVNICit9IFJUXzgwMl8xMV9ETFNfTU9ERTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNkZWZpbmUJUlRfQVNTT0NfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDEKKyNkZWZpbmUJUlRfRElTQVNTT0NfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAweDAxMDIKKyNkZWZpbmUJUlRfUkVRSUVfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDMKKyNkZWZpbmUJUlRfUkVTUElFX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDQKKyNkZWZpbmUJUlRfQVNTT0NJTkZPX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAweDAxMDUKKyNkZWZpbmUgUlRfUE1LSURDQU5EX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDYKKyNkZWZpbmUgUlRfSU5URVJGQUNFX0RPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDcKKyNkZWZpbmUgUlRfSU5URVJGQUNFX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDgKKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDEyOAorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCit0eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9EX0NMSUVOVF9NT0RFCit7CisgICBSdDgwMl8xMV9EX05vbmUsCisgICBSdDgwMl8xMV9EX0ZsZXhpYmxlLAorICAgUnQ4MDJfMTFfRF9TdHJpY3QsCit9IFJUXzgwMl8xMV9EX0NMSUVOVF9NT0RFLCAqUFJUXzgwMl8xMV9EX0NMSUVOVF9NT0RFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit0eXBlZGVmIHN0cnVjdCBfUlRfQ0hBTk5FTF9MSVNUX0lORk8KK3sKKwlVQ0hBUiBDaGFubmVsTGlzdFtNQVhfTlVNX09GX0NIU107ICAgLy8gbGlzdCBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzIGZvciBzaXRlIHN1cnZleQorCVVDSEFSIENoYW5uZWxMaXN0TnVtOyAvLyBudW1iZXIgb2YgY2hhbm5lbCBpbiBDaGFubmVsTGlzdFtdCit9IFJUX0NIQU5ORUxfTElTVF9JTkZPLCAqUFJUX0NIQU5ORUxfTElTVF9JTkZPOworCisvLyBXU0MgY29uZmlndXJlZCBjcmVkZW50aWFsCit0eXBlZGVmCXN0cnVjdAlfV1NDX0NSRURFTlRJQUwKK3sKKwlORElTXzgwMl8xMV9TU0lECVNTSUQ7CQkJCS8vIG1hbmRhdG9yeQorCVVTSE9SVAkJCQlBdXRoVHlwZTsJCQkvLyBtYW5kYXRvcnksIDE6IG9wZW4sIDI6IHdwYS1wc2ssIDQ6IHNoYXJlZCwgODp3cGEsIDB4MTA6IHdwYTIsIDB4MjA6IHdwYTItcHNrCisJVVNIT1JUCQkJCUVuY3JUeXBlOwkJCS8vIG1hbmRhdG9yeSwgMTogbm9uZSwgMjogd2VwLCA0OiB0a2lwLCA4OiBhZXMKKwlVQ0hBUgkJCQlLZXlbNjRdOwkJCS8vIG1hbmRhdG9yeSwgTWF4aW11bSA2NCBieXRlCisJVVNIT1JUCQkJCUtleUxlbmd0aDsKKwlVQ0hBUgkJCQlNYWNBZGRyWzZdOwkJCS8vIG1hbmRhdG9yeSwgQVAgTUFDIGFkZHJlc3MKKwlVQ0hBUgkJCQlLZXlJbmRleDsJCQkvLyBvcHRpb25hbCwgZGVmYXVsdCBpcyAxCisJVUNIQVIJCQkJUnN2ZFszXTsJCQkvLyBNYWtlIGFsaWdubWVudAorfQlXU0NfQ1JFREVOVElBTCwgKlBXU0NfQ1JFREVOVElBTDsKKworLy8gV1NDIGNvbmZpZ3VyZWQgcHJvZmlsZXMKK3R5cGVkZWYJc3RydWN0CV9XU0NfUFJPRklMRQoreworCVVJTlQJCQlQcm9maWxlQ250OworCVdTQ19DUkVERU5USUFMCVByb2ZpbGVbOF07CQkJCS8vIFN1cHBvcnQgdXAgdG8gOCBwcm9maWxlcworfQlXU0NfUFJPRklMRSwgKlBXU0NfUFJPRklMRTsKKworCisKKyNlbmRpZiAvLyBfT0lEX0hfCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyODcwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjg3MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmEyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjg3MC5oCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fUlQyODcwX0hfXworI2RlZmluZSBfX1JUMjg3MF9IX18KKworLy91c2IgaGVhZGVyIGZpbGVzCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qIHJ0bXBfZGVmLmggKi8KKy8vCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorI2RlZmluZSBCVUxLQUdHUkVfWklTRSAgICAgICAgICAxMDAKKyNkZWZpbmUgUlQyOFhYX0RSVkRBVEFfU0VUKF9hKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoX2EsIHBBZCk7CisjZGVmaW5lIFJUMjhYWF9QVVRfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcHV0X2RldgorI2RlZmluZSBSVFVTQl9BTExPQ19VUkIoaXNvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2FsbG9jX3VyYihpc28sIEdGUF9BVE9NSUMpCisjZGVmaW5lIFJUVVNCX1NVQk1JVF9VUkIocFVyYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc3VibWl0X3VyYihwVXJiLCBHRlBfQVRPTUlDKQorI2RlZmluZQlSVFVTQl9VUkJfQUxMT0NfQlVGRkVSKHBVc2JfRGV2LCBCdWZTaXplLCBwRG1hX2FkZHIpICAgICAgICAgICAgICAgdXNiX2J1ZmZlcl9hbGxvYyhwVXNiX0RldiwgQnVmU2l6ZSwgR0ZQX0FUT01JQywgcERtYV9hZGRyKQorI2RlZmluZQlSVFVTQl9VUkJfRlJFRV9CVUZGRVIocFVzYl9EZXYsIEJ1ZlNpemUsIHBUcmFuc2ZlckJ1ZiwgRG1hX2FkZHIpICAgdXNiX2J1ZmZlcl9mcmVlKHBVc2JfRGV2LCBCdWZTaXplLCBwVHJhbnNmZXJCdWYsIERtYV9hZGRyKQorI2Vsc2UKKyNkZWZpbmUgQlVMS0FHR1JFX1pJU0UgICAgICAgICAgNjAKKyNkZWZpbmUgUlQyOFhYX0RSVkRBVEFfU0VUKF9hKQorI2RlZmluZSBSVDI4WFhfUFVUX0RFVklDRShkZXZfcCkKKyNkZWZpbmUgUlRVU0JfQUxMT0NfVVJCKGlzbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9hbGxvY191cmIoaXNvKQorI2RlZmluZSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3N1Ym1pdF91cmIocFVyYikKKyNkZWZpbmUgUlRVU0JfVVJCX0FMTE9DX0JVRkZFUihwVXNiX0RldiwgQnVmU2l6ZSwgcERtYV9hZGRyKSAgICAgICAgICAgICAgIGttYWxsb2MoQnVmU2l6ZSwgR0ZQX0FUT01JQykKKyNkZWZpbmUJUlRVU0JfVVJCX0ZSRUVfQlVGRkVSKHBVc2JfRGV2LCBCdWZTaXplLCBwVHJhbnNmZXJCdWYsIERtYV9hZGRyKSAgIGtmcmVlKHBUcmFuc2ZlckJ1ZikKKyNlbmRpZgorCisjZGVmaW5lIFJYQlVMS0FHR1JFX1pJU0UgICAgICAgIDEyCisjZGVmaW5lIE1BWF9UWEJVTEtfTElNSVQgICAgICAgIChMT0NBTF9UWEJVRl9TSVpFKihCVUxLQUdHUkVfWklTRS0xKSkKKyNkZWZpbmUgTUFYX1RYQlVMS19TSVpFICAgICAgICAgKExPQ0FMX1RYQlVGX1NJWkUqQlVMS0FHR1JFX1pJU0UpCisjZGVmaW5lIE1BWF9SWEJVTEtfU0laRSAgICAgICAgIChMT0NBTF9UWEJVRl9TSVpFKlJYQlVMS0FHR1JFX1pJU0UpCisjZGVmaW5lIE1BWF9NTE1FX0hBTkRMRVJfTUVNT1JZIDIwCisjZGVmaW5lIEJVRkZFUl9TSVpFCQkJCTI0MDAJLy8yMDQ4CisjZGVmaW5lCVRYX1JJTkcJCQkJCTB4YQorI2RlZmluZQlQUklPX1JJTkcJCQkJMHhjCisKKworLy8gRmxhZ3MgZm9yIEJ1bGtmbGFncyBjb250cm9sIGZvciBidWxrIG91dCBkYXRhCisvLworI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgZlJUVVNCX0JVTEtfT1VUX1JUUwkJCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX01MTUUJCQkJCTB4MDAwMDAwMDQKKworI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwJCQkJMHgwMDAxMDAwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMgkJCTB4MDAwMjAwMDAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzMJCQkweDAwMDQwMDAwCisjZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF80CQkJMHgwMDA4MDAwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfNQkJCTB4MDAxMDAwMDAKKworI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfUFNQT0xMCQkJCQkweDAwMDAwMDIwCisjZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX0ZSQUcJCQkJMHgwMDAwMDA0MAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzIJCQkJMHgwMDAwMDA4MAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzMJCQkJMHgwMDAwMDEwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzQJCQkJMHgwMDAwMDIwMAorCisjaWZkZWYgUkFMSU5LX0FURQorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUJCQkJMHgwMDEwMDAwMAorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2RlZmluZSBSVDI4NzBfVVNCX0RFVklDRVMJXAorewlcCisJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4Mjc3MCl9LCAvKiBSYWxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0OEYsMHgyODcwKX0sIC8qIFJhbGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDMwNzApfSwgLyogUmFsaW5rIDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDMwNzEpfSwgLyogUmFsaW5rIDMwNzEgKi8JXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDMwNzIpfSwgLyogUmFsaW5rIDMwNzIgKi8JXAorCXtVU0JfREVWSUNFKDB4MEIwNSwweDE3MzEpfSwgLyogQXN1cyAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDBCMDUsMHgxNzMyKX0sIC8qIEFzdXMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwQjA1LDB4MTc0Mil9LCAvKiBBc3VzICovCQkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwMTcpfSwgLyogU2l0ZWNvbSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwMkIpfSwgLyogU2l0ZWNvbSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwMkMpfSwgLyogU2l0ZWNvbSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwM0UpfSwgLyogU2l0ZWNvbSAzMDcwICovCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDJEKX0sIC8qIFNpdGVjb20gKi8JCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDM5KX0sIC8qIFNpdGVjb20gMjc3MCAqLwlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MwNil9LCAvKiBDb25jZXB0cm9uaWMgKi8JXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjgpfSwgLyogQ29uY2VwdHJvbmljICovCVwKKwl7VVNCX0RFVklDRSgweDIwMTksMHhFRDA2KX0sIC8qIFBsYW5leCBDb21tdW5pY2F0aW9ucywgSW5jLiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MjAxOSwweEFCMjUpfSwgLyogUGxhbmV4IENvbW11bmljYXRpb25zLCBJbmMuIFJUMzA3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDdEMSwweDNDMDkpfSwgLyogRC1MaW5rICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwN0QxLDB4M0MxMSl9LCAvKiBELUxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDIwMDEsMHgzQzA5KX0sIC8qIEQtTGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MjAwMSwweDNDMEEpfSwgLyogRC1MaW5rIDMwNzIqLwlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MwNyl9LCAvKiBBTCAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzEyKX0sIC8qIEFMIDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA1MEQsMHg4MDUzKX0sIC8qIEJlbGtpbiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjMpfSwgLyogQWlybGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjcpfSwgLyogQWlybGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDdBQSwweDAwMkYpfSwgLyogQ29yZWdhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwN0FBLDB4MDAzQyl9LCAvKiBDb3JlZ2EgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3QUEsMHgwMDNGKX0sIC8qIENvcmVnYSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MThDNSwweDAwMTIpfSwgLyogQ29yZWdhIDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MTA0NCwweDgwMEIpfSwgLyogR2lnYWJ5dGUgKi8JCVwKKwl7VVNCX0RFVklDRSgweDEwNDQsMHg4MDBEKX0sIC8qIEdpZ2FieXRlIEdOLVdCMzJMIDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE1QTksMHgwMDA2KX0sIC8qIFNwYXJrbGFuICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4QjUyMil9LCAvKiBTTUMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4QTYxOCl9LCAvKiBTTUMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4ODUyMil9LCAvKiBBcmNhZHlhbiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweDc1MTIpfSwgLyogQXJjYWR5YW4gMjc3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweDc1MjIpfSwgLyogQXJjYWR5YW4gKi8JCVwKKwl7VVNCX0RFVklDRSgweDA4M0EsMHg3NTExKX0sIC8qIEFyY2FkeWFuIDMwNzAgKi8gXAorCXtVU0JfREVWSUNFKDB4MENERSwweDAwMjIpfSwgLyogWkNPTSAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDA1ODYsMHgzNDE2KX0sIC8qIFp5eGVsICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwQ0RFLDB4MDAyNSl9LCAvKiBaeXhlbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTc0MCwweDk3MDEpfSwgLyogRW5HZW5pdXMgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE3NDAsMHg5NzAyKX0sIC8qIEVuR2VuaXVzICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNzQwLDB4OTcwMyl9LCAvKiBFbkdlbml1cyAzMDcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNDcxLDB4MjAwZil9LCAvKiBQaGlsaXBzICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MyNSl9LCAvKiBEcmF5dGVrICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxM0QzLDB4MzI0Nyl9LCAvKiBBenVyZVdhdmUgKi8JXAorCXtVU0JfREVWSUNFKDB4MTNEMywweDMyNzMpfSwgLyogQXp1cmVXYXZlIDMwNzAqLwlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4NjYxOCl9LCAvKiBBY2N0b24gKi8JCVwKKwl7VVNCX0RFVklDRSgweDE1YzUsMHgwMDA4KX0sIC8qIEFtaXQgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwRTY2LDB4MDAwMSl9LCAvKiBIYXdraW5nICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwRTY2LDB4MDAwMyl9LCAvKiBIYXdraW5nICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxMjlCLDB4MTgyOCl9LCAvKiBTaWVtZW5zICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNTdFLDB4MzAwRSl9LCAvKiBVLU1lZGlhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNTBkLDB4ODA1Yyl9LAkJCQkJXAorCXtVU0JfREVWSUNFKDB4MTQ4MiwweDNDMDkpfSwgLyogQWJvY29tKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzA5KX0sIC8qIEFscGhhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNEU4LDB4MjAxOCl9LCAvKiBzYW1zdW5nICovICAJXAorCXtVU0JfREVWSUNFKDB4MDdCOCwweDMwNzApfSwgLyogQWJvQ29tIDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MDdCOCwweDMwNzEpfSwgLyogQWJvQ29tIDMwNzEgKi8JXAorCXtVU0JfREVWSUNFKDB4MDdCOCwweDMwNzIpfSwgLyogQWJvY29tIDMwNzIgKi8JXAorCXtVU0JfREVWSUNFKDB4NzM5MiwweDc3MTEpfSwgLyogRWRpbWF4IDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4NUE1NywweDAyODApfSwgLyogWmlud2VsbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4NUE1NywweDAyODIpfSwgLyogWmlud2VsbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MUEzMiwweDAzMDQpfSwgLyogUXVhbnRhIDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3ODksMHgwMTYyKX0sIC8qIExvZ2l0ZWMgMjg3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDc4OSwweDAxNjMpfSwgLyogTG9naXRlYyAyODcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNzg5LDB4MDE2NCl9LCAvKiBMb2dpdGVjIDI4NzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDFFREEsMHgyMzEwKX0sIC8qIEFpclRpZXMgMzA3MCAqLwkJXAorCXsgfS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZQlGUkVFX0hUVFhfUklORyhfcCwgX2IsIF90KQkJCVwKK3sJCQkJCQkJCQkJXAorCWlmICgoX3QpLT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSAoX3QpLT5DdXJXcml0ZVBvc2l0aW9uKQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQkoX3QpLT5iUmluZ0VtcHR5ID0gVFJVRTsJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCS8qTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCYoX3ApLT5UeENvdW50KTsgKi9cCit9CisKKy8vCisvLyBSWElORk8gYXBwZW5kcyBhdCB0aGUgZW5kIG9mIGVhY2ggcnggcGFja2V0LgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYSU5GT19TVFJVQyB7CisJVUlOVDMyCQlQbGNwU2lnbmFsOjEyOworCVVJTlQzMgkJTGFzdEFNU0RVOjE7CisJVUlOVDMyCQlDaXBoZXJBbGc6MTsKKwlVSU5UMzIJCVBsY3BSc3NpbDoxOworCVVJTlQzMgkJRGVjcnlwdGVkOjE7CisJVUlOVDMyCQlBTVBEVToxOwkJLy8gVG8gYmUgbW92ZWQKKwlVSU5UMzIJCUwyUEFEOjE7CisJVUlOVDMyCQlSU1NJOjE7CisJVUlOVDMyCQlIVEM6MTsKKwlVSU5UMzIJCUFNU0RVOjE7CQkvLyByeCB3aXRoIDgwMi4zIGhlYWRlciwgbm90IDgwMi4xMSBoZWFkZXIuCisJVUlOVDMyCQlDaXBoZXJFcnI6MjsgICAgICAgIC8vIDA6IGRlY3J5cHRpb24gb2theSwgMTpJQ1YgZXJyb3IsIDI6TUlDIGVycm9yLCAzOktFWSBub3QgdmFsaWQKKwlVSU5UMzIJCUNyYzoxOyAgICAgICAgICAgICAgLy8gMTogQ1JDIGVycm9yCisJVUlOVDMyCQlNeUJzczoxOyAgCS8vIDE6IHRoaXMgZnJhbWUgYmVsb25ncyB0byB0aGUgc2FtZSBCU1NJRAorCVVJTlQzMgkJQmNhc3Q6MTsgICAgICAgICAgICAvLyAxOiB0aGlzIGlzIGEgYnJvYWRjYXN0IGZyYW1lCisJVUlOVDMyCQlNY2FzdDoxOyAgICAgICAgICAgIC8vIDE6IHRoaXMgaXMgYSBtdWx0aWNhc3QgZnJhbWUKKwlVSU5UMzIJCVUyTToxOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJVUlOVDMyCQlGUkFHOjE7CisJVUlOVDMyCQlOVUxMREFUQToxOworCVVJTlQzMgkJREFUQToxOworCVVJTlQzMgkJQkE6MTsKK30JUlhJTkZPX1NUUlVDLCAqUFJYSU5GT19TVFJVQywgUlQyOFhYX1JYRF9TVFJVQywgKlBSVDI4WFhfUlhEX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfUlhJTkZPX1NUUlVDIHsKKwlVSU5UMzIJCUJBOjE7CisJVUlOVDMyCQlEQVRBOjE7CisJVUlOVDMyCQlOVUxMREFUQToxOworCVVJTlQzMgkJRlJBRzoxOworCVVJTlQzMgkJVTJNOjE7ICAgICAgICAgICAgICAvLyAxOiB0aGlzIFJYIGZyYW1lIGlzIHVuaWNhc3QgdG8gbWUKKwlVSU5UMzIJCU1jYXN0OjE7ICAgICAgICAgICAgLy8gMTogdGhpcyBpcyBhIG11bHRpY2FzdCBmcmFtZQorCVVJTlQzMgkJQmNhc3Q6MTsgICAgICAgICAgICAvLyAxOiB0aGlzIGlzIGEgYnJvYWRjYXN0IGZyYW1lCisJVUlOVDMyCQlNeUJzczoxOyAgCS8vIDE6IHRoaXMgZnJhbWUgYmVsb25ncyB0byB0aGUgc2FtZSBCU1NJRAorCVVJTlQzMgkJQ3JjOjE7ICAgICAgICAgICAgICAvLyAxOiBDUkMgZXJyb3IKKwlVSU5UMzIJCUNpcGhlckVycjoyOyAgICAgICAgLy8gMDogZGVjcnlwdGlvbiBva2F5LCAxOklDViBlcnJvciwgMjpNSUMgZXJyb3IsIDM6S0VZIG5vdCB2YWxpZAorCVVJTlQzMgkJQU1TRFU6MTsJCS8vIHJ4IHdpdGggODAyLjMgaGVhZGVyLCBub3QgODAyLjExIGhlYWRlci4KKwlVSU5UMzIJCUhUQzoxOworCVVJTlQzMgkJUlNTSToxOworCVVJTlQzMgkJTDJQQUQ6MTsKKwlVSU5UMzIJCUFNUERVOjE7CQkvLyBUbyBiZSBtb3ZlZAorCVVJTlQzMgkJRGVjcnlwdGVkOjE7CisJVUlOVDMyCQlQbGNwUnNzaWw6MTsKKwlVSU5UMzIJCUNpcGhlckFsZzoxOworCVVJTlQzMgkJTGFzdEFNU0RVOjE7CisJVUlOVDMyCQlQbGNwU2lnbmFsOjEyOworfQlSWElORk9fU1RSVUMsICpQUlhJTkZPX1NUUlVDLCBSVDI4WFhfUlhEX1NUUlVDLCAqUFJUMjhYWF9SWERfU1RSVUM7CisjZW5kaWYKKworCisvLworLy8gVFhJTkZPCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJc3RydWN0CV9UWElORk9fU1RSVUMgeworCS8vIFdvcmQJMAorCVVJTlQzMgkJVVNCRE1BVHhidXJzdDoxOy8vdXNlZCBPTkxZIGluIFVTQiBidWxrIEFnZ3JlLiBGb3JjZSBVU0IgRE1BIHRyYW5zbWl0IGZyYW1lIGZyb20gY3VycmVudCBzZWxlY3RlZCBlbmRwb2ludAorCVVJTlQzMgkJVVNCRE1BTmV4dFZMRDoxOwkvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZWdhdGlvbiwgTmV4dFZhbGlkCisJVUlOVDMyCQlyc3YyOjI7ICAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlTd1VzZUxhc3RSb3VuZDoxOyAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlRU0VMOjI7CS8vIHNlbGVjdCBvbi1jaGlwIEZJRk8gSUQgZm9yIDJuZC1zdGFnZSBvdXRwdXQgc2NoZWR1bGVyLjA6TUdNVCwgMTpIQ0NBIDI6RURDQQorCVVJTlQzMgkJV0lWOjE7CS8vIFdpcmVsZXNzIEluZm8gVmFsaWQuIDEgaWYgRHJpdmVyIGFscmVhZHkgZmlsbCBXSSwgIG8gaWYgRE1BIG5lZWRzIHRvIGNvcHkgV0kgdG8gY29ycmVjdHBvc2l0aW9uCisJVUlOVDMyCQlyc3Y6ODsKKwlVSU5UMzIJCVVTQkRNQVR4UGt0TGVuOjE2OwkvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZWdhdGlvbiwgIFRvdGFsIGJ5dGUgY291bnRzIG9mIGFsbCBzdWItZnJhbWUuCit9CVRYSU5GT19TVFJVQywgKlBUWElORk9fU1RSVUM7CisjZWxzZQordHlwZWRlZglzdHJ1Y3QJX1RYSU5GT19TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlVU0JETUFUeFBrdExlbjoxNjsJLy91c2VkIE9OTFkgaW4gVVNCIGJ1bGsgQWdncmVnYXRpb24sICBUb3RhbCBieXRlIGNvdW50cyBvZiBhbGwgc3ViLWZyYW1lLgorCVVJTlQzMgkJcnN2Ojg7CisJVUlOVDMyCQlXSVY6MTsJLy8gV2lyZWxlc3MgSW5mbyBWYWxpZC4gMSBpZiBEcml2ZXIgYWxyZWFkeSBmaWxsIFdJLCAgbyBpZiBETUEgbmVlZHMgdG8gY29weSBXSSB0byBjb3JyZWN0cG9zaXRpb24KKwlVSU5UMzIJCVFTRUw6MjsJLy8gc2VsZWN0IG9uLWNoaXAgRklGTyBJRCBmb3IgMm5kLXN0YWdlIG91dHB1dCBzY2hlZHVsZXIuMDpNR01ULCAxOkhDQ0EgMjpFRENBCisJVUlOVDMyCQlTd1VzZUxhc3RSb3VuZDoxOyAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlyc3YyOjI7ICAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlVU0JETUFOZXh0VkxEOjE7CS8vdXNlZCBPTkxZIGluIFVTQiBidWxrIEFnZ3JlZ2F0aW9uLCBOZXh0VmFsaWQKKwlVSU5UMzIJCVVTQkRNQVR4YnVyc3Q6MTsvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZS4gRm9yY2UgVVNCIERNQSB0cmFuc21pdCBmcmFtZSBmcm9tIGN1cnJlbnQgc2VsZWN0ZWQgZW5kcG9pbnQKK30JVFhJTkZPX1NUUlVDLCAqUFRYSU5GT19TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lIFRYSU5GT19TSVpFCQkJCTQKKyNkZWZpbmUgUlhJTkZPX1NJWkUJCQkJNAorI2RlZmluZSBUWFBBRERJTkdfU0laRQkJCTExCisKKy8vCisvLyBNYW5hZ2VtZW50IHJpbmcgYnVmZmVyIGZvcm1hdAorLy8KK3R5cGVkZWYJc3RydWN0CV9NR01UX1NUUlVDCXsKKwlCT09MRUFOCQlWYWxpZDsKKwlQVUNIQVIJCXBCdWZmZXI7CisJVUxPTkcJCUxlbmd0aDsKK30JTUdNVF9TVFJVQywgKlBNR01UX1NUUlVDOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEVFUFJPTSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZkZWYgUlQzMHh4CisjZGVmaW5lIFJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgb2Zmc2V0LCB2YXIpCQkJCQlcCisJZG8gewkJCQkJCQkJCQkJCQkJXAorCQlSVFVTQlJlYWRFRVBST00ocEFkLCBvZmZzZXQsIChQVUNIQVIpJih2YXIpLCAyKTsJCVwKKwkJaWYoIXBBZC0+YlVzZUVmdXNlKQkJCQkJCQkJCQlcCisJCQl2YXIgPSBsZTJjcHUxNih2YXIpOwkJCQkJCQkJXAorCX13aGlsZSgwKQorCisjZGVmaW5lIFJUMjh4eF9FRVBST01fV1JJVEUxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvewkJCQkJCQkJCQkJCQkJCVwKKwkJVVNIT1JUIF90bXBWYXI9dmFyOwkJCQkJCQkJCQlcCisJCWlmKCFwQWQtPmJVc2VFZnVzZSkJCQkJCQkJCQlcCisJCV90bXBWYXIgPSBjcHUybGUxNih2YXIpOwkJCQkJCQkJXAorCQlSVFVTQldyaXRlRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYoX3RtcFZhciksIDIpOwlcCisJfXdoaWxlKDApCisjZW5kaWYgLy8gUlQzMHh4IC8vCisjaWZuZGVmIFJUMzB4eAorI2RlZmluZSBSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCQkJCVwKKwkJUlRVU0JSZWFkRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYodmFyKSwgMik7CQlcCisJCQl2YXIgPSBsZTJjcHUxNih2YXIpOwkJCQkJCQkJXAorCX13aGlsZSgwKQorCisjZGVmaW5lIFJUMjh4eF9FRVBST01fV1JJVEUxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvewkJCQkJCQkJCQkJCQkJCVwKKwkJVVNIT1JUIF90bXBWYXI9dmFyOwkJCQkJCQkJCQlcCisJCV90bXBWYXIgPSBjcHUybGUxNih2YXIpOwkJCQkJCQkJXAorCQlSVFVTQldyaXRlRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYoX3RtcFZhciksIDIpOwlcCisJfXdoaWxlKDApCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFRBU0svVEhSRUFEIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX1RBU0tfVEhSRUFEX0lOSVQocEFkLCBTdGF0dXMpCQlcCisJU3RhdHVzID0gQ3JlYXRlVGhyZWFkcyhuZXRfZGV2KTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBGcmltd2FyZSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9XUklURV9GSVJNV0FSRShfcEFkLCBfcEZ3SW1hZ2UsIF9Gd0xlbikJCVwKKwlSVFVTQkZpcm13YXJlV3JpdGUoX3BBZCwgX3BGd0ltYWdlLCBfRndMZW4pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFRYIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX1NUQVJUX0RFUVVFVUUocEFkLCBRdWVJZHgsIGlycUZsYWdzKQkJCQlcCisJCQl7CQkJCQkJCQkJCQkJCVwKKwkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkRlUXVldWVMb2NrW1F1ZUlkeF0sIGlycUZsYWdzKTsJCVwKKwkJCQlpZiAocEFkLT5EZVF1ZXVlUnVubmluZ1tRdWVJZHhdKQkJCQkJCVwKKwkJCQl7CQkJCQkJCQkJCQkJCQlcCisJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7XAorCQkJCQlwcmludGsoIkRlUXVldWVSdW5uaW5nWyVkXT0gVFJVRSFcbiIsIFF1ZUlkeCk7CQlcCisJCQkJCWNvbnRpbnVlOwkJCQkJCQkJCQkJXAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCVwKKwkJCQl7CQkJCQkJCQkJCQkJCQlcCisJCQkJCXBBZC0+RGVRdWV1ZVJ1bm5pbmdbUXVlSWR4XSA9IFRSVUU7CQkJCQlcCisJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7XAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCX0KKyNkZWZpbmUgUlQyOFhYX1NUT1BfREVRVUVVRShwQWQsIFF1ZUlkeCwgaXJxRmxhZ3MpCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJXAorCQkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpOwkJXAorCQkJCXBBZC0+RGVRdWV1ZVJ1bm5pbmdbUXVlSWR4XSA9IEZBTFNFOwkJCQkJXAorCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7CVwKKwkJCX13aGlsZSgwKQorCisKKyNkZWZpbmUJUlQyOFhYX0hBU19FTk9VR0hfRlJFRV9ERVNDKHBBZCwgcFR4QmxrLCBmcmVlTnVtLCBwUGFja2V0KSBcCisJCShSVFVTQkZyZWVEZXNjcmlwdG9yUmVxdWVzdChwQWQsIHBUeEJsay0+UXVlSWR4LCAocFR4QmxrLT5Ub3RhbEZyYW1lTGVuICsgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpKSA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCisjZGVmaW5lIFJUMjhYWF9SRUxFQVNFX0RFU0NfUkVTT1VSQ0UocEFkLCBRdWVJZHgpCQkJXAorCQlkb3t9d2hpbGUoMCkKKworI2RlZmluZSBORUVEX1FVRVVFX0JBQ0tfRk9SX0FHRyhfcEFkLCBfUXVlSWR4LCBfZnJlZU51bSwgX1R4RnJhbWVUeXBlKSAJCVwKKwkJKChfVHhGcmFtZVR5cGUgPT0gVFhfUkFMSU5LX0ZSQU1FKSAmJiAoUlRVU0JOZWVkUXVldWVCYWNrRm9yQWdnKF9wQWQsIF9RdWVJZHgpKSkKKworCisKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgJCVwKKwkJKGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CVwKKwkJIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQgfCBcCisJCSBmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8IGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKQorCisKKyNkZWZpbmUgSEFMX1dyaXRlU3ViVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgYklzTGFzdCwgcEZyZWVOdW1iZXIpCVwKKwkJCVJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBiSXNMYXN0LCBwRnJlZU51bWJlcikKKworI2RlZmluZSBIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLGJJc0xhc3QsIHBGcmVlTnVtYmVyKQlcCisJCQlSdG1wVVNCX1dyaXRlU2luZ2xlVHhSZXNvdXJjZShwQWQsIHBUeEJsayxiSXNMYXN0LCBwRnJlZU51bWJlcikKKworI2RlZmluZSBIQUxfV3JpdGVGcmFnVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhZ051bSwgcEZyZWVOdW1iZXIpIFwKKwkJCVJ0bXBVU0JfV3JpdGVGcmFnVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhZ051bSwgcEZyZWVOdW1iZXIpCisKKyNkZWZpbmUgSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLGZyYW1lTnVtLCBwRnJlZU51bWJlcikJXAorCQkJUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsayxmcmFtZU51bSwgcEZyZWVOdW1iZXIpCisKKyNkZWZpbmUgSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBUeElkeCkJXAorCQkJUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgdG90YWxNUERVU2l6ZSwgVHhJZHgpCisKKyNkZWZpbmUgSEFMX0xhc3RUeElkeChwQWQsIFF1ZUlkeCxUeElkeCkgXAorCQkJLypSdG1wVVNCRGF0YUxhc3RUeElkeChwQWQsIFF1ZUlkeCxUeElkeCkqLworCisjZGVmaW5lIEhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIFF1ZUlkeCkJXAorCQkJUnRtcFVTQkRhdGFLaWNrT3V0KHBBZCwgcFR4QmxrLCBRdWVJZHgpCisKKworI2RlZmluZSBIQUxfS2lja091dE1nbXRUeChwQWQsIFF1ZUlkeCwgcFBhY2tldCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4pCVwKKwkJCVJ0bXBVU0JNZ210S2lja091dChwQWQsIFF1ZUlkeCwgcFBhY2tldCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4pCisKKyNkZWZpbmUgSEFMX0tpY2tPdXROdWxsRnJhbWVUeChfcEFkLCBfUXVlSWR4LCBfcE51bGxGcmFtZSwgX2ZyYW1lTGVuKQlcCisJCQlSdG1wVVNCTnVsbEZyYW1lS2lja091dChfcEFkLCBfUXVlSWR4LCBfcE51bGxGcmFtZSwgX2ZyYW1lTGVuKQorCisjZGVmaW5lIFJUTVBfUEtUX1RBSUxfUEFERElORyAJMTEgLy8gMyhtYXggNCBieXRlIHBhZGRpbmcpICsgNCAobGFzdCBwYWNrZXQgcGFkZGluZykgKyA0IChNYXhCdWxrT3V0c2l6ZSBhbGlnbiBwYWRkaW5nKQorCitleHRlcm4gVUNIQVIgRXBUb1F1ZXVlWzZdOworCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgR0VUX1RYUklOR19GUkVFTk8oX3BBZCwgX1F1ZUlkeCkgCShfUXVlSWR4KSAvLyhfcEFkLT5UeFJpbmdbX1F1ZUlkeF0uVHhTd0ZyZWVJZHgpCisjZGVmaW5lIEdFVF9NR01UUklOR19GUkVFTk8oX3BBZCkgCQkJKF9wQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4KQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFJYIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vI2RlZmluZSBSVDI4WFhfUlhfRVJST1JfQ0hFQ0sJCQkJUlRNUENoZWNrUnhXSQorCisjZGVmaW5lIFJUMjhYWF9SVl9BTExfQlVGX0VORChiQnVsa1JlY2VpdmUpCQlcCisJLyogV2UgcmV0dXJuIFNUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQgc28gdGhhdCB0aGUgY29tcGxldGlvbiAqLwlcCisJLyogcm91dGluZSAoSW9mQ29tcGxldGVSZXF1ZXN0KSB3aWxsIHN0b3Agd29ya2luZyBvbiB0aGUgaXJwLiAqLwkJXAorCWlmIChiQnVsa1JlY2VpdmUgPT0gVFJVRSkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEFTSUMgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworLy8gcmVzZXQgTUFDIG9mIGEgc3RhdGlvbiBlbnRyeSB0byAweEZGRkZGRkZGRkZGRgorI2RlZmluZSBSVDI4WFhfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIFdjaWQpCQkJCQlcCisJewlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOwkJCQkJCVwKKwkJU2V0QXNpY1djaWQuV0NJRCA9IFdjaWQ7CQkJCQkJCQlcCisJCVNldEFzaWNXY2lkLlNldFRpZCA9IDB4ZmZmZmZmZmY7CQkJCQkJXAorCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAweGZmZmZmZmZmOwkJCQkJCVwKKwkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0FTSUNfV0NJRCwgCVwKKwkJCQkmU2V0QXNpY1djaWQsIHNpemVvZihSVF9TRVRfQVNJQ19XQ0lEKSk7CX0KKworLy8gYWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlCisjZGVmaW5lIFJUMjhYWF9TVEFfRU5UUllfQUREKHBBZCwgcEVudHJ5KQkJCQkJCQlcCisJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0NMSUVOVF9NQUNfRU5UUlksIAlcCisJCQkJCQkJcEVudHJ5LCBzaXplb2YoTUFDX1RBQkxFX0VOVFJZKSk7CisKKy8vIGFkZCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKy8vIFNldCBNQUMgcmVnaXN0ZXIgdmFsdWUgYWNjb3JkaW5nIG9wZXJhdGlvbiBtb2RlCisjZGVmaW5lIFJUMjhYWF9VUERBVEVfUFJPVEVDVChwQWQpCVwKKyAJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfVVBEQVRFX1BST1RFQ1QsIE5VTEwsIDApOworLy8gZW5kIGpvaG5saQorCisvLyByZW1vdmUgUGFpci13aXNlIGtleSBtYXRlcmlhbCBmcm9tIEFTSUMKKy8vIHlldCBpbXBsZW1lbnQKKyNkZWZpbmUgUlQyOFhYX1NUQV9FTlRSWV9LRVlfREVMKHBBZCwgQnNzSWR4LCBXY2lkKQorCisvLyBhZGQgQ2xpZW50IHNlY3VyaXR5IGluZm9ybWF0aW9uIGludG8gQVNJQyBXQ0lEIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorI2RlZmluZSBSVDI4WFhfU1RBX1NFQ1VSSVRZX0lORk9fQUREKHBBZCwgYXBpZHgsIEtleUlELCBwRW50cnkpCQkJCQkJXAorCXsJUlQyOFhYX1NUQV9FTlRSWV9NQUNfUkVTRVQocEFkLCBwRW50cnktPkFpZCk7CQkJCQkJCQlcCisJCWlmIChwRW50cnktPkFpZCA+PSAxKSB7CQkJCQkJCQkJCQkJCQlcCisJCQlSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJCVNldEFzaWNXY2lkQXR0cmk7CQkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZEF0dHJpLldDSUQgPSBwRW50cnktPkFpZDsJCQkJCQkJCQlcCisJCQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPD0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCkgJiYJCQkJXAorCQkJCShwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSkJCQkJXAorCQkJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlTZXRBc2ljV2NpZEF0dHJpLkNpcGhlciA9IHBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnOwlcCisJCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJZWxzZSBpZiAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQkJCQkJXAorCQkJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlTZXRBc2ljV2NpZEF0dHJpLkNpcGhlciA9IHBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnOwlcCisJCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJZWxzZSBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlciA9IDA7CQkJCQkJCQkJCVwKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImFpZCBjaXBoZXIgPSAlbGRcbiIsU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIpKTsgICAgICAgXAorCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0FTSUNfV0NJRF9DSVBIRVIsIAkJCVwKKwkJCQkJCQkmU2V0QXNpY1djaWRBdHRyaSwgc2l6ZW9mKFJUX1NFVF9BU0lDX1dDSURfQVRUUkkpKTsgfSB9CisKKy8vIEluc2VydCB0aGUgQkEgYml0bWFwIHRvIEFTSUMgZm9yIHRoZSBXY2lkIGVudHJ5CisjZGVmaW5lIFJUMjhYWF9BRERfQkFfU0VTU0lPTl9UT19BU0lDKF9wQWQsIF9BaWQsIF9USUQpCQkJCQlcCisJCWRvewkJCQkJCQkJCQkJCQkJCQlcCisJCQlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOwkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5XQ0lEID0gKF9BaWQpOwkJCQkJCQkJCVwKKwkJCVNldEFzaWNXY2lkLlNldFRpZCA9ICgweDEwMDAwPDwoX1RJRCkpOwkJCQkJCVwKKwkJCVNldEFzaWNXY2lkLkRlbGV0ZVRpZCA9IDB4ZmZmZmZmZmY7CQkJCQkJCVwKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKChfcEFkKSwgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQsICZTZXRBc2ljV2NpZCwgc2l6ZW9mKFJUX1NFVF9BU0lDX1dDSUQpKTsJXAorCQl9d2hpbGUoMCkKKworLy8gUmVtb3ZlIHRoZSBCQSBiaXRtYXAgZnJvbSBBU0lDIGZvciB0aGUgV2NpZCBlbnRyeQorI2RlZmluZSBSVDI4WFhfREVMX0JBX1NFU1NJT05fRlJPTV9BU0lDKF9wQWQsIF9XY2lkLCBfVElEKQkJCQlcCisJCWRvewkJCQkJCQkJCQkJCQkJCQlcCisJCQlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOwkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5XQ0lEID0gKF9XY2lkKTsJCQkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5TZXRUaWQgPSAoMHhmZmZmZmZmZik7CQkJCQkJCVwKKwkJCVNldEFzaWNXY2lkLkRlbGV0ZVRpZCA9ICgweDEwMDAwPDwoX1RJRCkgKTsJCQkJCVwKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKChfcEFkKSwgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQsICZTZXRBc2ljV2NpZCwgc2l6ZW9mKFJUX1NFVF9BU0lDX1dDSUQpKTsJXAorCQl9d2hpbGUoMCkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBQQ0kvVVNCIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX0hBTkRMRV9ERVZfQVNTSUdOKGhhbmRsZSwgZGV2X3ApCQkJXAorCSgoUE9TX0NPT0tJRSloYW5kbGUpLT5wVXNiX0RldiA9IGRldl9wOworCisvLyBubyB1c2UKKyNkZWZpbmUgUlQyOFhYX1VOTUFQKCkKKyNkZWZpbmUgUlQyOFhYX0lSUV9SRVFVRVNUKG5ldF9kZXYpCisjZGVmaW5lIFJUMjhYWF9JUlFfUkVMRUFTRShuZXRfZGV2KQorI2RlZmluZSBSVDI4WFhfSVJRX0lOSVQocEFkKQorI2RlZmluZSBSVDI4WFhfSVJRX0VOQUJMRShwQWQpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0gTUxNRSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKQkJCVJUVVNCTWxtZVVwKHBBZCkKKworI2RlZmluZSBSVDI4WFhfTUxNRV9QUkVfU0FOSVRZX0NIRUNLKHBBZCkJCQkJCQkJCVwKKwl7CWlmICgocEFkLT5Db21tb25DZmcuYkhhcmR3YXJlUmFkaW8gPT0gVFJVRSkgJiYgCQkJCQlcCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYJCVwKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkgewlcCisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9DSEVDS19HUElPLCBOVUxMLCAwKTsgfSB9CisKKyNkZWZpbmUgUlQyOFhYX01MTUVfU1RBX1FVSUNLX1JTUF9XQUtFX1VQKHBBZCkJXAorCXsJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUUtFUklPRElDX0VYRUNVVCwgTlVMTCwgMCk7CVwKKwkJUlRVU0JNbG1lVXAocEFkKTsgfQorCisjZGVmaW5lIFJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkKQlcCisJCSAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFU0VUX0NPTkYsIDAsIE5VTEwpOwlcCisJCSAgICAgICAgUlRVU0JNbG1lVXAocEFkKTsKKworI2RlZmluZSBSVDI4WFhfSEFORExFX0NPVU5URVJfTUVBU1VSRShfcEFkLCBfcEVudHJ5KQkJXAorCXsJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQoX3BBZCwgQ01EVEhSRUFEXzgwMl8xMV9DT1VOVEVSX01FQVNVUkUsIF9wRW50cnksIHNpemVvZihNQUNfVEFCTEVfRU5UUlkpKTsJXAorCQlSVFVTQk1sbWVVcChfcEFkKTsJCQkJCQkJCQlcCisJfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFBvd2VyIFNhdmUgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSVDI4WFhfUFNfUE9MTF9FTlFVRVVFKHBBZCkJCQkJCQlcCisJewlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCk7CVwKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOyB9CisKKyNkZWZpbmUgUlQyOHh4X0NISVBfTkFNRSAgICAgICAgICAgICJSVDI4NzAiCisjZGVmaW5lIFVTQl9DWUNfQ0ZHICAgICAgICAgICAgICAgICAweDAyYTQKKyNkZWZpbmUgTlRfU1VDQ0VTUyhzdGF0dXMpCQkJKCgoc3RhdHVzKSA+IDApID8gKDEpOigwKSkKKyNkZWZpbmUgSW50ZXJsb2NrZWRJbmNyZW1lbnQgCSAJYXRvbWljX2luYworI2RlZmluZSBOZGlzSW50ZXJsb2NrZWRJbmNyZW1lbnQgCWF0b21pY19pbmMKKyNkZWZpbmUgSW50ZXJsb2NrZWREZWNyZW1lbnQJCWF0b21pY19kZWMKKyNkZWZpbmUgTmRpc0ludGVybG9ja2VkRGVjcmVtZW50IAlhdG9taWNfZGVjCisjZGVmaW5lIEludGVybG9ja2VkRXhjaGFuZ2UJCQlhdG9taWNfc2V0CisvLyNkZWZpbmUgTmRpc01TZW5kQ29tcGxldGUJCQlSVE1QX1NlbmRDb21wbGV0ZQorI2RlZmluZSBOZGlzTUNhbmNlbFRpbWVyCQkJUlRNUENhbmNlbFRpbWVyCisjZGVmaW5lIE5kaXNBbGxvY01lbW9yeShfcHRyLCBfc2l6ZSwgX2ZsYWcpCVwKKwkJCQkJCQkJCWRve19wdHIgPSBrbWFsbG9jKChfc2l6ZSksKF9mbGFnKSk7fXdoaWxlKDApCisjZGVmaW5lIE5kaXNGcmVlTWVtb3J5KGEsIGIsIGMpIAlrZnJlZSgoYSkpCisjZGVmaW5lIE5kaXNNU2xlZXAJCQkJCVJUTVB1c2VjRGVsYXkJCS8qIHVuaXQ6IG1pY3Jvc2Vjb25kICovCisKKworI2RlZmluZSBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQJCTAKKyNkZWZpbmUgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4JCTAKKyNkZWZpbmUgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSwkJCTAKKyNkZWZpbmUgUFVSQgkJCXB1cmJiX3QKKworI2RlZmluZSBSVFVTQl9GUkVFX1VSQihwVXJiKQl1c2JfZnJlZV91cmIocFVyYikKKworLy8jdW5kZWYgTWxtZUFsbG9jYXRlTWVtb3J5CisvLyN1bmRlZiBNbG1lRnJlZU1lbW9yeQorCit0eXBlZGVmIHN0cnVjdCB1c2JfZGV2aWNlCSogUFVTQl9ERVY7CisKKy8qIE1BQ1JPIGZvciBsaW51eCB1c2IgKi8KK3R5cGVkZWYgc3RydWN0IHVyYiAqcHVyYmJfdDsKK3R5cGVkZWYgc3RydWN0IHVzYl9jdHJscmVxdWVzdCBkZXZjdHJscmVxdWVzdDsKKyNkZWZpbmUgUElSUAkJUFZPSUQKKyNkZWZpbmUgUE1ETAkJUFZPSUQKKyNkZWZpbmUgTkRJU19PSUQJVUlOVAorI2lmbmRlZiBVU0JfU1RfTk9FUlJPUgorI2RlZmluZSBVU0JfU1RfTk9FUlJPUiAgICAgMAorI2VuZGlmCisKKy8vIHZlbmRvci1zcGVjaWZpYyBjb250cm9sIG9wZXJhdGlvbnMKKyNkZWZpbmUgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMgKCAoMTAwICogSFopIC8gMTAwMCkKKyNkZWZpbmUgVU5MSU5LX1RJTUVPVVRfTVMJCTMKKworLyogdW5saW5rIHVyYgkqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsNykKKyNkZWZpbmUgUlRVU0JfVU5MSU5LX1VSQihwVXJiKQkJdXNiX2tpbGxfdXJiKHBVcmIpCisjZWxzZQorI2RlZmluZSBSVFVTQl9VTkxJTktfVVJCKHBVcmIpCQl1c2JfdW5saW5rX3VyYihwVXJiKQorI2VuZGlmCisKKy8vIFByb3RvdHlwZXMgb2YgY29tcGxldGlvbiBmdW51Yy4KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNkZWZpbmUgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmIsIHB0X3JlZ3MpICAgIFJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUocFVyYiwgcHRfcmVncykgICAgUlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKHBVcmIpCisjZGVmaW5lIFJUVVNCQnVsa091dE51bGxGcmFtZUNvbXBsZXRlKHBVcmIsIHB0X3JlZ3MpICAgICBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZShwVXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXRSVFNGcmFtZUNvbXBsZXRlKHBVcmIsIHB0X3JlZ3MpICAgICAgUlRVU0JCdWxrT3V0UlRTRnJhbWVDb21wbGV0ZShwVXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXRQc1BvbGxDb21wbGV0ZShwVXJiLCBwdF9yZWdzKSAgICAgICAgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUocFVyYikKKyNkZWZpbmUgUlRVU0JCdWxrUnhDb21wbGV0ZShwVXJiLCBwdF9yZWdzKSAgICAgICAgICAgICAgIFJUVVNCQnVsa1J4Q29tcGxldGUocFVyYikKKyNlbmRpZgorCisKK1ZPSUQgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcHVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7CitWT0lEIFJUVVNCQnVsa091dE51bGxGcmFtZUNvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXRSVFNGcmFtZUNvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXRQc1BvbGxDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKK1ZPSUQgUlRVU0JCdWxrUnhDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKKworCisjZGVmaW5lIFJUVVNCTWxtZVVwKHBBZCkJICAgICAgICBcCit7CQkJCQkJCQkgICAgXAorCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsJXAorCWlmKHBPYmotPk1MTUVUaHJfcGlkPjApCQkgICAgXAorICAgICAgICB1cCgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsgXAorfQorCisjZGVmaW5lIFJUVVNCQ01EVXAocEFkKQkgICAgICAgICAgICAgICAgXAorewkJCQkJCQkJCSAgICBcCisJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOwlcCisJaWYocE9iai0+UlRVU0JDbWRUaHJfcGlkPjApCQkgICAgXAorCSAgICB1cCgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7IFwKK30KKworCitzdGF0aWMgaW5saW5lIE5ESVNfU1RBVFVTIFJUTVBBbGxvY2F0ZU1lbW9yeSgKKwlPVVQgUFZPSUQgKnB0ciwKKwlJTiBzaXplX3Qgc2l6ZSkKK3sKKwkqcHRyID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwlpZigqcHRyKQorCQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwllbHNlCisJCXJldHVybiBORElTX1NUQVRVU19SRVNPVVJDRVM7Cit9CisKKy8qIHJ0bXAuaCAqLworI2RlZmluZQlCRUFDT05fUklOR19TSVpFICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCAgICAgICAweDQwCisjZGVmaW5lIERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiAgICAgICAgMHhjMAorI2RlZmluZSBJTlRFUkZBQ0VfVkVORE9SX1JFUVVFU1RfT1VUICAgIDB4NDEKKyNkZWZpbmUgSU5URVJGQUNFX1ZFTkRPUl9SRVFVRVNUX0lOICAgICAweGMxCisjZGVmaW5lIE1HTVRQSVBFSURYCQkJCQkJMAkvLyBFUDYgaXMgaGlnaGVzdCBwcmlvcml0eQorCisjZGVmaW5lIEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHCQkJCTB4ODAKKworI2RlZmluZSBSVFVTQl9TRVRfQlVMS19GTEFHKF9NLCBfRikJCQkJKChfTSktPkJ1bGtGbGFncyB8PSAoX0YpKQorI2RlZmluZSBSVFVTQl9DTEVBUl9CVUxLX0ZMQUcoX00sIF9GKQkJCSgoX00pLT5CdWxrRmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIFJUVVNCX1RFU1RfQlVMS19GTEFHKF9NLCBfRikJCQkoKChfTSktPkJ1bGtGbGFncyAmIChfRikpICE9IDApCisKKyNkZWZpbmUgRW5xdWV1ZUNtZChjbWRxLCBjbWRxZWxtdCkJCVwKK3sJCQkJCQkJCQkJXAorCWlmIChjbWRxLT5zaXplID09IDApCQkJCVwKKwkJY21kcS0+aGVhZCA9IGNtZHFlbG10OwkJCVwKKwllbHNlCQkJCQkJCQlcCisJCWNtZHEtPnRhaWwtPm5leHQgPSBjbWRxZWxtdDsJXAorCWNtZHEtPnRhaWwgPSBjbWRxZWxtdDsJCQkJXAorCWNtZHFlbG10LT5uZXh0ID0gTlVMTDsJCQkJXAorCWNtZHEtPnNpemUrKzsJCQkJCQlcCit9CisKK3R5cGVkZWYgc3RydWN0ICAgX1JUX1NFVF9BU0lDX1dDSUQgeworCVVMT05HIFdDSUQ7ICAgICAgICAgIC8vIG1lY2hhbmlzbSBmb3IgcmVrZXlpbmc6IDA6ZGlzYWJsZSwgMTogdGltZS1iYXNlZCwgMjogcGFja2V0LWJhc2VkCisJVUxPTkcgU2V0VGlkOyAgICAgICAgLy8gdGltZS1iYXNlZDogc2Vjb25kcywgcGFja2V0LWJhc2VkOiBraWxvLXBhY2tldHMKKwlVTE9ORyBEZWxldGVUaWQ7ICAgICAgICAvLyB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cworfSBSVF9TRVRfQVNJQ19XQ0lELCpQUlRfU0VUX0FTSUNfV0NJRDsKKwordHlwZWRlZiBzdHJ1Y3QgICBfUlRfU0VUX0FTSUNfV0NJRF9BVFRSSSB7CisJVUxPTkcJV0NJRDsgICAgICAgICAgLy8gbWVjaGFuaXNtIGZvciByZWtleWluZzogMDpkaXNhYmxlLCAxOiB0aW1lLWJhc2VkLCAyOiBwYWNrZXQtYmFzZWQKKwlVTE9ORwlDaXBoZXI7ICAgICAgICAvLyBBU0lDIENpcGhlciBkZWZpbml0aW9uCisJVUNIQVIJQWRkcltFVEhfTEVOR1RIX09GX0FERFJFU1NdOworfSBSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJLCpQUlRfU0VUX0FTSUNfV0NJRF9BVFRSSTsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfTUVNT1JZX1NUUlVDVCB7CisJUFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAvL1BvaW50ZXIgdG8gdGhlIGJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5CisJc3RydWN0IF9NTE1FX01FTU9SWV9TVFJVQ1QgICAgICAqTmV4dDsgICAgICAvL1BvaW50ZXIgdG8gdGhlIG5leHQgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Cit9ICAgTUxNRV9NRU1PUllfU1RSVUNULCAqUE1MTUVfTUVNT1JZX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgIF9NTE1FX01FTU9SWV9IQU5ETEVSIHsKKwlCT09MRUFOICAgICAgICAgICAgICAgICBNZW1SdW5uaW5nOyAgICAgICAgIC8vVGhlIGZsYWcgb2YgdGhlIE1sbWUgbWVtb3J5IGhhbmRsZXIncyBzdGF0dXMKKwlVSU5UICAgICAgICAgICAgICAgICAgICBNZW1vcnlDb3VudDsgICAgICAgIC8vVG90YWwgbm9ucGFnZWQgc3lzdGVtLXNwYWNlIG1lbW9yeSBub3Qgc2l6ZQorCVVJTlQgICAgICAgICAgICAgICAgICAgIEluVXNlQ291bnQ7ICAgICAgICAgLy9Ob25wYWdlZCBzeXN0ZW0tc3BhY2UgbWVtb3J5IGluIHVzZWQgY291bnRzCisJVUlOVCAgICAgICAgICAgICAgICAgICAgVW5Vc2VDb3VudDsgICAgICAgICAvL05vbnBhZ2VkIHN5c3RlbS1zcGFjZSBtZW1vcnkgYXZhaWxhYmxlIGNvdW50cworCUlOVCAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0NvdW50OyAgICAgICAvL05vbnBhZ2VkIHN5c3RlbS1zcGFjZSBtZW1vcnkgZm9yIGZyZWUgY291bnRzCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcEluVXNlSGVhZDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbnBhZWQgbWVtb3J5IG5vdCB1c2VkCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcEluVXNlVGFpbDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGxhc3Qgbm9ucGFnZWQgbWVtb3J5IG5vdCB1c2VkCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcFVuVXNlSGVhZDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbnBhZ2VkIG1lbW9yeSBpbiB1c2VkCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcFVuVXNlVGFpbDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGxhc3Qgbm9ucGFnZWQgbWVtb3J5IGluIHVzZWQKKwlQVUxPTkcgICAgICAgICAgICAgICAgICBNZW1GcmVlUGVuZGluZ1tNQVhfTUxNRV9IQU5ETEVSX01FTU9SWV07ICAgLy9hbiBhcnJheSB0byBrZWVwIHBlbmRpbmcgZnJlZS1tZW1vcnkncyBwb2ludGVyICgzMmJpdHMpCit9ICAgTUxNRV9NRU1PUllfSEFORExFUiwgKlBNTE1FX01FTU9SWV9IQU5ETEVSOworCit0eXBlZGVmCXN0cnVjdCBfQ21kUUVsbXQJeworCVVJTlQJCQkJY29tbWFuZDsKKwlQVk9JRAkJCQlidWZmZXI7CisJVUxPTkcJCQkJYnVmZmVybGVuZ3RoOworCUJPT0xFQU4JCQkJQ21kRnJvbU5kaXM7CisJQk9PTEVBTgkJCQlTZXRPcGVyYXRpb247CisJc3RydWN0IF9DbWRRRWxtdAkqbmV4dDsKK30JQ21kUUVsbXQsICpQQ21kUUVsbXQ7CisKK3R5cGVkZWYJc3RydWN0CV9DbWRRCXsKKwlVSU5UCQlzaXplOworCUNtZFFFbG10CSpoZWFkOworCUNtZFFFbG10CSp0YWlsOworCVVJTlQzMgkJQ21kUVN0YXRlOworfUNtZFEsICpQQ21kUTsKKworLy8KKy8vIEZvciBXUEEgU1VQUExJQ0FOVDogV0lSRUxFU1MgRVhUIHN1cHBvcnQgd2lyZWxlc3MgZXZlbnRzOiB2MTQgb3IgbmV3ZXIKKy8vCisjaWYgV0lSRUxFU1NfRVhUID49IDE0CisvLyNkZWZpbmUgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAgMQorI2VuZGlmCisKKy8qIG9pZC5oICovCisvLyBDaXBoZXIgc3VpdGUgdHlwZSBmb3IgbWl4ZWQgbW9kZSBncm91cCBjaXBoZXIsIFA4MDIuMTFpLTIwMDQKK3R5cGVkZWYgZW51bSBfUlRfODAyXzExX0NJUEhFUl9TVUlURV9UWVBFIHsKKwlDaXBoZXJfVHlwZV9OT05FLAorCUNpcGhlcl9UeXBlX1dFUDQwLAorCUNpcGhlcl9UeXBlX1RLSVAsCisJQ2lwaGVyX1R5cGVfUlNWRCwKKwlDaXBoZXJfVHlwZV9DQ01QLAorCUNpcGhlcl9UeXBlX1dFUDEwNAorfSBSVF84MDJfMTFfQ0lQSEVSX1NVSVRFX1RZUEUsICpQUlRfODAyXzExX0NJUEhFUl9TVUlURV9UWVBFOworCisvL0NNRFRIUkVBRF9NVUxUSV9SRUFEX01BQworLy9DTURUSFJFQURfTVVMVElfV1JJVEVfTUFDCisvL0NNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1JFQUQKKy8vQ01EVEhSRUFEX1ZFTkRPUl9FRVBST01fV1JJVEUKK3R5cGVkZWYJc3RydWN0CV9DTURIYW5kbGVyX1RMVgl7CisJVVNIT1JUCQlPZmZzZXQ7CisJVVNIT1JUCQlMZW5ndGg7CisJVUNIQVIJCURhdGFGaXJzdDsKK30JQ01ESGFuZGxlcl9UTFYsICpQQ01ESGFuZGxlcl9UTFY7CisKKy8vIE5ldyBmb3IgTWVldGluZ0hvdXNlIEFwaSBzdXBwb3J0CisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDEwMQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9VTlBMVUcgICAgICAgICAgICAgICAgICAgICAweDBENzMwMTAyCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1NXSVRDSF9GVU5DVElPTiAgICAgICAgICAgIDB4MEQ3MzAxMDMJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9NVUxUSV9XUklURV9NQUMgICAgICAgICAgICAgICAgICAgMHgwRDczMDEwNwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX01VTFRJX1JFQURfTUFDICAgICAgICAgICAgICAgICAgICAweDBENzMwMTA4CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0VFUFJPTV9XUklURSAgICAgICAgICAgICAgIDB4MEQ3MzAxMEEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1JFQUQgICAgICAgICAgICAgICAgMHgwRDczMDEwQgkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9FTlRFUl9URVNUTU9ERSAgICAgICAgICAgICAweDBENzMwMTBDCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0VYSVRfVEVTVE1PREUgICAgICAgICAgICAgIDB4MEQ3MzAxMEQJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfV1JJVEVfQkJQICAgICAgICAgICAgICAgICAgMHgwRDczMDExOQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9SRUFEX0JCUCAgICAgICAgICAgICAgICAgICAweDBENzMwMTE4CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1dSSVRFX1JGICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMUEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRkxJUF9JUSAgICAgICAgICAgICAgICAgICAgMHgwRDczMDExRAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUICAgICAgICAgICAgICAgICAgICAweDBENzMwMjEwCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfUkVTRVRfQlVMS19JTiAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfUFNNX0JJVF9TQVZFICAgICAgICAgICAgICAgICAgMHgwRDczMDIxMgkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9SQURJTyAgICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjE0CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVVBEQVRFX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTYJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfQUREX0tFWV9XRVAgICAgICAgICAgICAgICAgMHgwRDczMDIxOAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1JFU0VUX0ZST01fRVJST1IgICAgICAgICAgICAgICAgICAweDBENzMwMjFBCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfTElOS19ET1dOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMUIJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9SRVNFVF9GUk9NX05ESVMgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxQwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX0NIRUNLX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjE1CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfRk9SQ0VfV0FLRV9VUCAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMjIJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfQlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyNQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI2CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfU0VUX0FTSUNfV0NJRF9DSVBIRVIgICAgICAgICAgICAgIDB4MEQ3MzAyMjcJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9RS0VSSU9ESUNfRVhFQ1VUICAgICAgICAgICAgICAgICAgMHgwRDczMDIzRAkvLyBjbWQKKyNkZWZpbmUgUlRfQ01EX1NFVF9LRVlfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI4ICAvLyBjbWQKKyNkZWZpbmUgUlRfQ01EX1NFVF9SWF9XQ0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI5ICAvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9DTElFTlRfTUFDX0VOVFJZICAgICAgICAgICAgICAweDBENzMwMjNFCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX1FVRVJZX0hBUkRXQVJFX1JFR0lTVEVSICAgIDB4MEQ3MTAxMDUJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfU0VUX1BIWV9NT0RFICAgICAgICAgICAgICAgMHgwRDc5MDEwQwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEXzgwMl8xMV9TRVRfU1RBX0NPTkZJRyAgICAgICAgICAgICAweDBENzkwMTExCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX1NFVF9QUkVBTUJMRSAgICAgICAgICAgICAgIDB4MEQ3OTAxMDEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfQ09VTlRFUl9NRUFTVVJFCQkJMHgwRDc5MDEwMgkvLyBjbWQKKy8vIGFkZCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKyNkZWZpbmUgQ01EVEhSRUFEX1VQREFURV9QUk9URUNUCQkJCQkweDBENzkwMTAzCS8vIGNtZAorLy8gZW5kIGpvaG5saQorCisjZGVmaW5lIFdQQTFBS01CSVQJICAgIDB4MDEKKyNkZWZpbmUgV1BBMkFLTUJJVAkgICAgMHgwMgorI2RlZmluZSBXUEExUFNLQUtNQklUICAgMHgwNAorI2RlZmluZSBXUEEyUFNLQUtNQklUICAgMHgwOAorI2RlZmluZSBUS0lQQklUICAgICAgICAgMHgwMQorI2RlZmluZSBDQ01QQklUICAgICAgICAgMHgwMgorCisKKyNkZWZpbmUgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBiRnJvbVR4KSBcCisgICAgUlQyOHh4VXNiU3RhQXNpY0ZvcmNlV2FrZXVwKHBBZCwgYkZyb21UeCk7CisKKyNkZWZpbmUgUlQyOFhYX1NUQV9TTEVFUF9USEVOX0FVVE9fV0FLRVVQKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCkgXAorICAgIFJUMjh4eFVzYlN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisKKyNkZWZpbmUgUlQyOFhYX01MTUVfUkFESU9fT04ocEFkKSBcCisgICAgUlQyOHh4VXNiTWxtZVJhZGlvT24ocEFkKTsKKworI2RlZmluZSBSVDI4WFhfTUxNRV9SQURJT19PRkYocEFkKSBcCisgICAgUlQyOHh4VXNiTWxtZVJhZGlvT0ZGKHBBZCk7CisKKyNlbmRpZiAvL19fUlQyODcwX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydDI4eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyOHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzN2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyOHh4LmgKQEAgLTAsMCArMSwyNzI1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0Mjh4eC5oCisKKwlBYnN0cmFjdDoKKwlSVDI4eHggQVNJQyByZWxhdGVkIGRlZmluaXRpb24gJiBzdHJ1Y3R1cmVzCisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCSAgV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgSmFuIExlZSAgICAgICAgICAgSmFuLTMtMjAwNiAgICAgY3JlYXRlZCBmb3IgUlQyODYwYworKi8KKworI2lmbmRlZglfX1JUMjhYWF9IX18KKyNkZWZpbmUJX19SVDI4WFhfSF9fCisKKworLy8KKy8vIFBDSSByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgwMDAwCisvLworI2RlZmluZSBQQ0lfQ0ZHCQkJMHgwMDAwCisjZGVmaW5lIFBDSV9FRUNUUkwJCQkweDAwMDQKKyNkZWZpbmUgUENJX01DVUNUUkwJCQkweDAwMDgKKworI2RlZmluZQlPUFRfMTQJCQkweDExNAorCit0eXBlZGVmIGludAkJCQlOVFNUQVRVUzsKKyNkZWZpbmUJUkVUUllfTElNSVQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MJCQkJMHgwMAorI2RlZmluZSBTVEFUVVNfVU5TVUNDRVNTRlVMIAkJMHgwMQorCisvLworLy8gU0NIL0RNQSByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgwMjAwCisvLworLy8gSU5UX1NPVVJDRV9DU1I6IEludGVycnVwdCBzb3VyY2UgcmVnaXN0ZXIuIFdyaXRlIG9uZSB0byBjbGVhciBjb3JyZXNwb25kaW5nIGJpdAorLy8KKyNkZWZpbmUgRE1BX0NTUjAgICAgICAweDIwMAorI2RlZmluZSBJTlRfU09VUkNFX0NTUiAgICAgIDB4MjAwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSU5UX1NPVVJDRV9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJOjE0OworCQlVSU5UMzIgICAgICAgCVR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlSeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJR1BUaW1lcjoxOworCQlVSU5UMzIgICAgICAgCUF1dG9XYWtldXA6MTsvL2JpdDE0CisJCVVJTlQzMiAgICAgICAJVFhGaWZvU3RhdHVzSW50OjE7Ly9GSUZPIFN0YXRpc3RpY3MgaXMgZnVsbCwgc3cgc2hvdWxkIHJlYWQgMHgxNzFjCisJCVVJTlQzMiAgICAgICAJUHJlVEJUVDoxOworCQlVSU5UMzIgICAgICAgCVRCVFRJbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlSeFR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlNQ1VDb21tYW5kSU5UOjE7CisJCVVJTlQzMiAgICAgICAJTWdtdERtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlIY2NhRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjM0RtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzJEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMxRG1hRG9uZToxOworCQlVSU5UMzIJCUFjMERtYURvbmU6MTsKKwkJVUlOVDMyCQlSeERvbmU6MTsKKwkJVUlOVDMyCQlUeERlbGF5SU5UOjE7CS8vZGVsYXllZCBpbnRlcnJ1cHQsIG5vdCBpbnRlcnJ1cHQgdW50aWwgc2V2ZXJhbCBpbnQgb3IgdGltZSBsaW1pdCBoaXQKKwkJVUlOVDMyCQlSeERlbGF5SU5UOjE7IC8vZGVhbHllZCBpbnRlcnJ1cHQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUlOVF9TT1VSQ0VfQ1NSX1NUUlVDLCAqUElOVF9TT1VSQ0VfQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0lOVF9TT1VSQ0VfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJ4RGVsYXlJTlQ6MTsKKwkJVUlOVDMyCQlUeERlbGF5SU5UOjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJQWMwRG1hRG9uZToxOy8vNAorCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzJEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMzRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUhjY2FEbWFEb25lOjE7IC8vIGJpdDcKKwkJVUlOVDMyICAgICAgIAlNZ210RG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCU1DVUNvbW1hbmRJTlQ6MTsvL2JpdCA5CisJCVVJTlQzMiAgICAgICAJUnhUeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJVEJUVEludDoxOworCQlVSU5UMzIgICAgICAgCVByZVRCVFQ6MTsKKwkJVUlOVDMyICAgICAgIAlUWEZpZm9TdGF0dXNJbnQ6MTsvL0ZJRk8gU3RhdGlzdGljcyBpcyBmdWxsLCBzdyBzaG91bGQgcmVhZCAweDE3MWMKKwkJVUlOVDMyICAgICAgIAlBdXRvV2FrZXVwOjE7Ly9iaXQxNAorCQlVSU5UMzIgICAgICAgCUdQVGltZXI6MTsKKwkJVUlOVDMyICAgICAgIAlSeENvaGVyZW50OjE7Ly9iaXQxNgorCQlVSU5UMzIgICAgICAgCVR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAk6MTQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfSBJTlRfU09VUkNFX0NTUl9TVFJVQywgKlBJTlRfU09VUkNFX0NTUl9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gSU5UX01BU0tfQ1NSOiAgIEludGVycnVwdCBNQVNLIHJlZ2lzdGVyLiAgIDE6IHRoZSBpbnRlcnJ1cHQgaXMgbWFzayBPRkYKKy8vCisjZGVmaW5lIElOVF9NQVNLX0NTUiAgICAgICAgMHgyMDQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9JTlRfTUFTS19DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJVHhDb2hlcmVudDoxOworCQlVSU5UMzIgICAgICAgCVJ4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAk6MjA7CisJCVVJTlQzMiAgICAgICAJTUNVQ29tbWFuZElOVDoxOworCQlVSU5UMzIgICAgICAgCU1nbXREbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJSGNjYURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzNEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMyRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyCQlBYzBEbWFEb25lOjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJVHhEZWxheToxOworCQlVSU5UMzIJCVJYRGVsYXlfSU5UX01TSzoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31JTlRfTUFTS19DU1JfU1RSVUMsICpQSU5UX01BU0tfQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0lOVF9NQVNLX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSWERlbGF5X0lOVF9NU0s6MTsKKwkJVUlOVDMyCQlUeERlbGF5OjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJQWMwRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzJEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMzRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUhjY2FEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJTWdtdERtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlNQ1VDb21tYW5kSU5UOjE7CisJCVVJTlQzMiAgICAgICAJOjIwOworCQlVSU5UMzIgICAgICAgCVJ4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlUeENvaGVyZW50OjE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfSBJTlRfTUFTS19DU1JfU1RSVUMsICpQSU5UX01BU0tfQ1NSX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFdQRE1BX0dMT19DRkcgCTB4MjA4CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfV1BETUFfR0xPX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIAlIRFJfU0VHX0xFTjoxNjsKKwkJVUlOVDMyICAgICAgIAlSWEhkclNjYXRlcjo4OworCQlVSU5UMzIgICAgICAgCUJpZ0VuZGlhbjoxOworCQlVSU5UMzIgICAgICAgCUVuVFhXcml0ZUJhY2tERE9ORToxOworCQlVSU5UMzIgICAgICAgCVdQRE1BQnVyc3RTSVpFOjI7CisJCVVJTlQzMgkJUnhETUFCdXN5OjE7CisJCVVJTlQzMgkJRW5hYmxlUnhETUE6MTsKKwkJVUlOVDMyCQlUeERNQUJ1c3k6MTsKKwkJVUlOVDMyCQlFbmFibGVUeERNQToxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31XUERNQV9HTE9fQ0ZHX1NUUlVDLCAqUFdQRE1BX0dMT19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfV1BETUFfR0xPX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlFbmFibGVUeERNQToxOworCQlVSU5UMzIJCVR4RE1BQnVzeToxOworCQlVSU5UMzIJCUVuYWJsZVJ4RE1BOjE7CisJCVVJTlQzMgkJUnhETUFCdXN5OjE7CisJCVVJTlQzMiAgICAgICAJV1BETUFCdXJzdFNJWkU6MjsKKwkJVUlOVDMyICAgICAgIAlFblRYV3JpdGVCYWNrRERPTkU6MTsKKwkJVUlOVDMyICAgICAgIAlCaWdFbmRpYW46MTsKKwkJVUlOVDMyICAgICAgIAlSWEhkclNjYXRlcjo4OworCQlVSU5UMzIgICAgICAgCUhEUl9TRUdfTEVOOjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gV1BETUFfR0xPX0NGR19TVFJVQywgKlBXUERNQV9HTE9fQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFdQRE1BX1JTVF9JRFggCTB4MjBjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfV1BETUFfUlNUX0lEWF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIAk6MTU7CisJCVVJTlQzMiAgICAgICAJUlNUX0RSWF9JRFgwOjE7CisJCVVJTlQzMiAgICAgICAJcnN2OjEwOworCQlVSU5UMzIgICAgICAgCVJTVF9EVFhfSURYNToxOworCQlVSU5UMzIgICAgICAgCVJTVF9EVFhfSURYNDoxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMzoxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMjoxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMToxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMDoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31XUERNQV9SU1RfSURYX1NUUlVDLCAqUFdQRE1BX1JTVF9JRFhfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfV1BETUFfUlNUX0lEWF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDA6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDE6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDI6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDM6MTsKKwkJVUlOVDMyICAgICAgIAlSU1RfRFRYX0lEWDQ6MTsKKwkJVUlOVDMyICAgICAgIAlSU1RfRFRYX0lEWDU6MTsKKwkJVUlOVDMyICAgICAgIAlyc3Y6MTA7CisJCVVJTlQzMiAgICAgICAJUlNUX0RSWF9JRFgwOjE7CisJCVVJTlQzMiAgICAgICAJOjE1OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gV1BETUFfUlNUX0lEWF9TVFJVQywgKlBXUERNQV9SU1RfSURYX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIERFTEFZX0lOVF9DRkcgIDB4MDIxMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0RFTEFZX0lOVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJVFhETFlfSU5UX0VOOjE7CisJCVVJTlQzMiAgICAgICAJVFhNQVhfUElOVDo3OworCQlVSU5UMzIgICAgICAgCVRYTUFYX1BUSU1FOjg7CisJCVVJTlQzMiAgICAgICAJUlhETFlfSU5UX0VOOjE7CisJCVVJTlQzMiAgICAgICAJUlhNQVhfUElOVDo3OworCQlVSU5UMzIJCVJYTUFYX1BUSU1FOjg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfURFTEFZX0lOVF9DRkdfU1RSVUMsICpQREVMQVlfSU5UX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9ERUxBWV9JTlRfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJYTUFYX1BUSU1FOjg7CisJCVVJTlQzMiAgICAgICAJUlhNQVhfUElOVDo3OworCQlVSU5UMzIgICAgICAgCVJYRExZX0lOVF9FTjoxOworCQlVSU5UMzIgICAgICAgCVRYTUFYX1BUSU1FOjg7CisJCVVJTlQzMiAgICAgICAJVFhNQVhfUElOVDo3OworCQlVSU5UMzIgICAgICAgCVRYRExZX0lOVF9FTjoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gREVMQVlfSU5UX0NGR19TVFJVQywgKlBERUxBWV9JTlRfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFdNTV9BSUZTTl9DRkcgICAweDAyMTQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9BSUZTTl9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwkgICAgVUlOVDMyICAgQWlmc24zOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBBaWZzbjI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEFpZnNuMTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQWlmc24wOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUlGU05fQ1NSX1NUUlVDLCAqUEFJRlNOX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BSUZTTl9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIEFpZnNuMDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwkgICAgVUlOVDMyICAgQWlmc24xOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBBaWZzbjI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEFpZnNuMzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgUnN2OjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUlGU05fQ1NSX1NUUlVDLCAqUEFJRlNOX0NTUl9TVFJVQzsKKyNlbmRpZgorLy8KKy8vIENXTUlOX0NTUjogQ1dtaW4gZm9yIGVhY2ggRURDQSBBQworLy8KKyNkZWZpbmUgV01NX0NXTUlOX0NGRyAgIDB4MDIxOAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0NXTUlOX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgUnN2OjE2OworCSAgICBVSU5UMzIgICBDd21pbjM6NDsgICAgICAgLy8gZm9yIEFDX1ZPCisJICAgIFVJTlQzMiAgIEN3bWluMjo0OyAgICAgICAvLyBmb3IgQUNfVkkKKwkgICAgVUlOVDMyICAgQ3dtaW4xOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBDd21pbjA6NDsgICAgICAgLy8gZm9yIEFDX0JFCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlDV01JTl9DU1JfU1RSVUMsICpQQ1dNSU5fQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0NXTUlOX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgQ3dtaW4wOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCSAgICBVSU5UMzIgICBDd21pbjE6NDsgICAgICAgLy8gZm9yIEFDX0JLCisJICAgIFVJTlQzMiAgIEN3bWluMjo0OyAgICAgICAvLyBmb3IgQUNfVkkKKwkgICAgVUlOVDMyICAgQ3dtaW4zOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBSc3Y6MTY7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlDV01JTl9DU1JfU1RSVUMsICpQQ1dNSU5fQ1NSX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBDV01BWF9DU1I6IENXbWluIGZvciBlYWNoIEVEQ0EgQUMKKy8vCisjZGVmaW5lIFdNTV9DV01BWF9DRkcgICAweDAyMWMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9DV01BWF9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwkgICAgVUlOVDMyICAgQ3dtYXgzOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBDd21heDI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEN3bWF4MTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQ3dtYXgwOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ1dNQVhfQ1NSX1NUUlVDLCAqUENXTUFYX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9DV01BWF9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIEN3bWF4MDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwkgICAgVUlOVDMyICAgQ3dtYXgxOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBDd21heDI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEN3bWF4Mzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgUnN2OjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ1dNQVhfQ1NSX1NUUlVDLCAqUENXTUFYX0NTUl9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBBQ19UWE9QX0NTUjA6IEFDX0JLL0FDX0JFIFRYT1AgcmVnaXN0ZXIKKy8vCisjZGVmaW5lIFdNTV9UWE9QMF9DRkcgICAgMHgwMjIwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQUNfVFhPUF9DU1IwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFjMVR4b3A7ICAgICAgICAvLyBmb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cworCSAgICBVU0hPUlQgIEFjMFR4b3A7ICAgICAgICAvLyBmb3IgQUNfQkssIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUNfVFhPUF9DU1IwX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BQ19UWE9QX0NTUjBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWMwVHhvcDsgICAgICAgIC8vIGZvciBBQ19CSywgaW4gdW5pdCBvZiAzMnVzCisJICAgIFVTSE9SVCAgQWMxVHhvcDsgICAgICAgIC8vIGZvciBBQ19CRSwgaW4gdW5pdCBvZiAzMnVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBQ19UWE9QX0NTUjBfU1RSVUMsICpQQUNfVFhPUF9DU1IwX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBBQ19UWE9QX0NTUjE6IEFDX1ZPL0FDX1ZJIFRYT1AgcmVnaXN0ZXIKKy8vCisjZGVmaW5lIFdNTV9UWE9QMV9DRkcgICAgMHgwMjI0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQUNfVFhPUF9DU1IxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFjM1R4b3A7ICAgICAgICAvLyBmb3IgQUNfVk8sIGluIHVuaXQgb2YgMzJ1cworCSAgICBVU0hPUlQgIEFjMlR4b3A7ICAgICAgICAvLyBmb3IgQUNfVkksIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUNfVFhPUF9DU1IxX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BQ19UWE9QX0NTUjFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWMyVHhvcDsgICAgICAgIC8vIGZvciBBQ19WSSwgaW4gdW5pdCBvZiAzMnVzCisJICAgIFVTSE9SVCAgQWMzVHhvcDsgICAgICAgIC8vIGZvciBBQ19WTywgaW4gdW5pdCBvZiAzMnVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBQ19UWE9QX0NTUjFfU1RSVUMsICpQQUNfVFhPUF9DU1IxX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFJJTkdSRUdfRElGRgkJCTB4MTAKKyNkZWZpbmUgR1BJT19DVFJMX0NGRyAgICAweDAyMjgJLy9NQUNfQ1NSMTMKKyNkZWZpbmUgTUNVX0NNRF9DRkcgICAgMHgwMjJjCisjZGVmaW5lIFRYX0JBU0VfUFRSMCAgICAgMHgwMjMwCS8vQUNfQksgYmFzZSBhZGRyZXNzCisjZGVmaW5lIFRYX01BWF9DTlQwICAgICAgMHgwMjM0CisjZGVmaW5lIFRYX0NUWF9JRFgwICAgICAgIDB4MDIzOAorI2RlZmluZSBUWF9EVFhfSURYMCAgICAgIDB4MDIzYworI2RlZmluZSBUWF9CQVNFX1BUUjEgICAgIDB4MDI0MCAJLy9BQ19CRSBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgVFhfTUFYX0NOVDEgICAgICAweDAyNDQKKyNkZWZpbmUgVFhfQ1RYX0lEWDEgICAgICAgMHgwMjQ4CisjZGVmaW5lIFRYX0RUWF9JRFgxICAgICAgMHgwMjRjCisjZGVmaW5lIFRYX0JBU0VfUFRSMiAgICAgMHgwMjUwIAkvL0FDX1ZJIGJhc2UgYWRkcmVzcworI2RlZmluZSBUWF9NQVhfQ05UMiAgICAgIDB4MDI1NAorI2RlZmluZSBUWF9DVFhfSURYMiAgICAgICAweDAyNTgKKyNkZWZpbmUgVFhfRFRYX0lEWDIgICAgICAweDAyNWMKKyNkZWZpbmUgVFhfQkFTRV9QVFIzICAgICAweDAyNjAgCS8vQUNfVk8gYmFzZSBhZGRyZXNzCisjZGVmaW5lIFRYX01BWF9DTlQzICAgICAgMHgwMjY0CisjZGVmaW5lIFRYX0NUWF9JRFgzICAgICAgIDB4MDI2OAorI2RlZmluZSBUWF9EVFhfSURYMyAgICAgIDB4MDI2YworI2RlZmluZSBUWF9CQVNFX1BUUjQgICAgIDB4MDI3MCAJLy9IQ0NBIGJhc2UgYWRkcmVzcworI2RlZmluZSBUWF9NQVhfQ05UNCAgICAgIDB4MDI3NAorI2RlZmluZSBUWF9DVFhfSURYNCAgICAgICAweDAyNzgKKyNkZWZpbmUgVFhfRFRYX0lEWDQgICAgICAweDAyN2MKKyNkZWZpbmUgVFhfQkFTRV9QVFI1ICAgICAweDAyODAgCS8vTUdNVCBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgIFRYX01BWF9DTlQ1ICAgICAweDAyODQKKyNkZWZpbmUgVFhfQ1RYX0lEWDUgICAgICAgMHgwMjg4CisjZGVmaW5lIFRYX0RUWF9JRFg1ICAgICAgMHgwMjhjCisjZGVmaW5lIFRYX01HTVRNQVhfQ05UICAgICAgVFhfTUFYX0NOVDUKKyNkZWZpbmUgVFhfTUdNVENUWF9JRFggICAgICAgVFhfQ1RYX0lEWDUKKyNkZWZpbmUgVFhfTUdNVERUWF9JRFggICAgICBUWF9EVFhfSURYNQorI2RlZmluZSBSWF9CQVNFX1BUUiAgICAgMHgwMjkwIAkvL1JYIGJhc2UgYWRkcmVzcworI2RlZmluZSBSWF9NQVhfQ05UICAgICAgMHgwMjk0CisjZGVmaW5lIFJYX0NSWF9JRFggICAgICAgMHgwMjk4CisjZGVmaW5lIFJYX0RSWF9JRFggICAgICAweDAyOWMKKyNkZWZpbmUgVVNCX0RNQV9DRkcgICAgICAweDAyYTAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9VU0JfRE1BX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICBUeEJ1c3k6MTsgICAJLy9VU0IgRE1BIFRYIEZTTSBidXN5IC4gZGVidWcgb25seQorCSAgICBVSU5UMzIgIFJ4QnVzeToxOyAgICAgICAgLy9VU0IgRE1BIFJYIEZTTSBidXN5IC4gZGVidWcgb25seQorCSAgICBVSU5UMzIgIEVwb3V0VmFsaWQ6NjsgICAgICAgIC8vT1VUIGVuZHBvaW50IGRhdGEgdmFsaWQuIGRlYnVnIG9ubHkKKwkgICAgVUlOVDMyICBUeEJ1bGtFbjoxOyAgICAgICAgLy9FbmFibGUgVVNCIERNQSBUeAorCSAgICBVSU5UMzIgIFJ4QnVsa0VuOjE7ICAgICAgICAvL0VuYWJsZSBVU0IgRE1BIFJ4CisJICAgIFVJTlQzMiAgUnhCdWxrQWdnRW46MTsgICAgICAgIC8vRW5hYmxlIFJ4IEJ1bGsgQWdncmVnYXRpb24KKwkgICAgVUlOVDMyICBUeG9wSGFsdDoxOyAgICAgICAgLy9IYWx0IFRYT1AgY291bnQgZG93biB3aGVuIFRYIGJ1ZmZlciBpcyBmdWxsLgorCSAgICBVSU5UMzIgIFR4Q2xlYXI6MTsgICAgICAgIC8vQ2xlYXIgVVNCIERNQSBUWCBwYXRoCisJICAgIFVJTlQzMiAgcnN2OjI7CisJICAgIFVJTlQzMiAgcGh5Y2xlYXI6MTsgICAgICAgIAkJLy9waHkgd2F0Y2ggZG9nIGVuYWJsZS4gd3JpdGUgMQorCSAgICBVSU5UMzIgIFJ4QnVsa0FnZ0xtdDo4OyAgICAgICAgLy9SeCBCdWxrIEFnZ3JlZ2F0aW9uIExpbWl0ICBpbiB1bml0IG9mIDEwMjQgYnl0ZXMKKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dUT3V0Ojg7ICAgICAgICAvL1J4IEJ1bGsgQWdncmVnYXRpb24gVGltZU91dCAgaW4gdW5pdCBvZiAzM25zCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlVU0JfRE1BX0NGR19TVFJVQywgKlBVU0JfRE1BX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9VU0JfRE1BX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dUT3V0Ojg7ICAgICAgICAvL1J4IEJ1bGsgQWdncmVnYXRpb24gVGltZU91dCAgaW4gdW5pdCBvZiAzM25zCisJICAgIFVJTlQzMiAgUnhCdWxrQWdnTG10Ojg7ICAgICAgICAvL1J4IEJ1bGsgQWdncmVnYXRpb24gTGltaXQgIGluIHVuaXQgb2YgMjU2IGJ5dGVzCisJICAgIFVJTlQzMiAgcGh5Y2xlYXI6MTsgICAgICAgIAkJLy9waHkgd2F0Y2ggZG9nIGVuYWJsZS4gd3JpdGUgMQorCSAgICBVSU5UMzIgIHJzdjoyOworCSAgICBVSU5UMzIgIFR4Q2xlYXI6MTsgICAgICAgIC8vQ2xlYXIgVVNCIERNQSBUWCBwYXRoCisJICAgIFVJTlQzMiAgVHhvcEhhbHQ6MTsgICAgICAgIC8vSGFsdCBUWE9QIGNvdW50IGRvd24gd2hlbiBUWCBidWZmZXIgaXMgZnVsbC4KKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dFbjoxOyAgICAgICAgLy9FbmFibGUgUnggQnVsayBBZ2dyZWdhdGlvbgorCSAgICBVSU5UMzIgIFJ4QnVsa0VuOjE7ICAgICAgICAvL0VuYWJsZSBVU0IgRE1BIFJ4CisJICAgIFVJTlQzMiAgVHhCdWxrRW46MTsgICAgICAgIC8vRW5hYmxlIFVTQiBETUEgVHgKKwkgICAgVUlOVDMyICBFcG91dFZhbGlkOjY7ICAgICAgICAvL09VVCBlbmRwb2ludCBkYXRhIHZhbGlkCisJICAgIFVJTlQzMiAgUnhCdXN5OjE7ICAgICAgICAvL1VTQiBETUEgUlggRlNNIGJ1c3kKKwkgICAgVUlOVDMyICBUeEJ1c3k6MTsgICAJLy9VU0IgRE1BIFRYIEZTTSBidXN5CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlVU0JfRE1BX0NGR19TVFJVQywgKlBVU0JfRE1BX0NGR19TVFJVQzsKKyNlbmRpZgorCisvLworLy8gIDMgIFBCRiAgcmVnaXN0ZXJzCisvLworLy8KKy8vIE1vc3QgYXJlIGZvciBkZWJ1Zy4gRHJpdmVyIGRvZXNuJ3QgdG91Y2ggUEJGIHJlZ2lzdGVyLgorI2RlZmluZSAJUEJGX1NZU19DVFJMIAkgMHgwNDAwCisjZGVmaW5lICAgICBQQkZfQ0ZHICAgICAgICAgICAgICAgICAweDA0MDgKKyNkZWZpbmUgCVBCRl9NQVhfUENOVCAJIDB4MDQwQworI2RlZmluZSAJUEJGX0NUUkwJIAkweDA0MTAKKyNkZWZpbmUgCVBCRl9JTlRfU1RBCSAweDA0MTQKKyNkZWZpbmUgCVBCRl9JTlRfRU5BCSAweDA0MTgKKyNkZWZpbmUgCVRYUlhRX1BDTlQgIAkgMHgwNDM4CisjZGVmaW5lIAlQQkZfREJHIAkgCSAweDA0M2MKKyNkZWZpbmUgICAgIFBCRl9DQVBfQ1RSTCAgICAgMHgwNDQwCisKKworLy8gZUZ1c2UgcmVnaXN0ZXJzCisjZGVmaW5lIEVGVVNFX0NUUkwgICAgICAgICAgICAgIDB4MDU4MAorI2RlZmluZSBFRlVTRV9EQVRBMCAgICAgICAgICAgICAweDA1OTAKKyNkZWZpbmUgRUZVU0VfREFUQTEgICAgICAgICAgICAgMHgwNTk0CisjZGVmaW5lIEVGVVNFX0RBVEEyICAgICAgICAgICAgIDB4MDU5OAorI2RlZmluZSBFRlVTRV9EQVRBMyAgICAgICAgICAgICAweDA1OWMKKyNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX1NUQVJUICAgMHgyZDAKKyNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX0VORCAgICAgMHgyZmMKKyNkZWZpbmUgRUZVU0VfVEFHICAgICAgICAgICAgICAgMHgyZmUKKyNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX1NJWkUgICAgNDUKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VGVVNFX0NUUkxfU1RSVUMgeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAgICAgIFNFTF9FRlVTRToxOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fS0lDSzoxOworCQlVSU5UMzIgICAgICAgICAgICBSRVNFUlZFRDo0OworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fQUlOOjEwOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fTERPX09OX1RJTUU6MjsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0xET19PRkZfVElNRTo2OworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fTU9ERToyOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fQU9VVDo2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRUZVU0VfQ1RSTF9TVFJVQywgKlBFRlVTRV9DVFJMX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0VGVVNFX0NUUkxfU1RSVUMgeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9BT1VUOjY7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9NT0RFOjI7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9MRE9fT0ZGX1RJTUU6NjsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0xET19PTl9USU1FOjI7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9BSU46MTA7CisJCVVJTlQzMiAgICAgICAgICAgIFJFU0VSVkVEOjQ7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9LSUNLOjE7CisJCVVJTlQzMiAgICAgICAgICAgIFNFTF9FRlVTRToxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRUZVU0VfQ1RSTF9TVFJVQywgKlBFRlVTRV9DVFJMX1NUUlVDOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworI2RlZmluZSBMRE9fQ0ZHMCAJCQkJMHgwNWQ0CisjZGVmaW5lIEdQSU9fU1dJVENICQkJCTB4MDVkYworCisvLworLy8gIDQgIE1BQyAgcmVnaXN0ZXJzCisvLworLy8KKy8vICA0LjEgTUFDIFNZU1RFTSAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldDoweDEwMDApCisvLworI2RlZmluZSBNQUNfQ1NSMCAgICAgICAgICAgIDB4MTAwMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0FTSUNfVkVSX0lEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFTSUNWZXI7ICAgICAgICAvLyB2ZXJzaW9uIDogMjg2MAorCSAgICBVU0hPUlQgIEFTSUNSZXY7ICAgICAgICAvLyByZXZlcnNpb24gIDogMAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQVNJQ19WRVJfSURfU1RSVUMsICpQQVNJQ19WRVJfSURfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQVNJQ19WRVJfSURfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQVNJQ1JldjsgICAgICAgIC8vIHJldmVyc2lvbiAgOiAwCisJICAgIFVTSE9SVCAgQVNJQ1ZlcjsgICAgICAgIC8vIHZlcnNpb24gOiAyODYwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBU0lDX1ZFUl9JRF9TVFJVQywgKlBBU0lDX1ZFUl9JRF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBNQUNfU1lTX0NUUkwgICAgICAgICAgICAweDEwMDQJCS8vTUFDX0NTUjEKKyNkZWZpbmUgTUFDX0FERFJfRFcwICAgICAgICAgICAgCQkweDEwMDgJCS8vIE1BQyBBRERSIERXMAorI2RlZmluZSBNQUNfQUREUl9EVzEgICAgICAgICAgIAkJIDB4MTAwYwkJLy8gTUFDIEFERFIgRFcxCisvLworLy8gTUFDX0NTUjI6IFNUQSBNQUMgcmVnaXN0ZXIgMAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTM7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDMKKwkJVUNIQVIJCUJ5dGUyOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAyCisJCVVDSEFSCQlCeXRlMTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMQorCQlVQ0hBUgkJQnl0ZTA7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19EVzBfU1RSVUMsICpQTUFDX0RXMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTA7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDAKKwkJVUNIQVIJCUJ5dGUxOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAxCisJCVVDSEFSCQlCeXRlMjsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMgorCQlVQ0hBUgkJQnl0ZTM7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDMKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19EVzBfU1RSVUMsICpQTUFDX0RXMF9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gTUFDX0NTUjM6IFNUQSBNQUMgcmVnaXN0ZXIgMQorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJUnN2ZDE7CisJCVVDSEFSCQlVMk1lTWFzazsKKwkJVUNIQVIJCUJ5dGU1OwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSA1CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTUFDX0RXMV9TVFJVQywgKlBNQUNfRFcxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX01BQ19EVzFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCQlVQ0hBUgkJQnl0ZTU7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDUKKwkJVUNIQVIJCVUyTWVNYXNrOworCQlVQ0hBUgkJUnN2ZDE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfRFcxX1NUUlVDLCAqUE1BQ19EVzFfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBNQUNfQlNTSURfRFcwICAgICAgICAgICAgCQkweDEwMTAJCS8vIE1BQyBCU1NJRCBEVzAKKyNkZWZpbmUgTUFDX0JTU0lEX0RXMSAgICAgICAgICAgIAkJMHgxMDE0CQkvLyBNQUMgQlNTSUQgRFcxCisKKy8vCisvLyBNQUNfQ1NSNTogQlNTSUQgcmVnaXN0ZXIgMQorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NQUNfQ1NSNV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVVNIT1JUCQlSc3ZkOjExOworCQlVU0hPUlQJCU1Cc3NCY25OdW06MzsKKwkJVVNIT1JUCQlCc3NJZE1vZGU6MjsgLy8gMDogb25lIEJTU0lELCAxMDogNCBCU1NJRCwgIDAxOiAyIEJTU0lEICwgMTE6IDhCU1NJRAorCQlVQ0hBUgkJQnl0ZTU7CQkgLy8gQlNTSUQgYnl0ZSA1CisJCVVDSEFSCQlCeXRlNDsJCSAvLyBCU1NJRCBieXRlIDQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19DU1I1X1NUUlVDLCAqUE1BQ19DU1I1X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX01BQ19DU1I1X1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTQ7CQkgLy8gQlNTSUQgYnl0ZSA0CisJCVVDSEFSCQlCeXRlNTsJCSAvLyBCU1NJRCBieXRlIDUKKwkJVVNIT1JUICAgICAgCUJzc0lkTWFzazoyOyAvLyAwOiBvbmUgQlNTSUQsIDEwOiA0IEJTU0lELCAgMDE6IDIgQlNTSUQgLCAxMTogOEJTU0lECisJCVVTSE9SVAkJTUJzc0Jjbk51bTozOworCQlVU0hPUlQJCVJzdmQ6MTE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfQ1NSNV9TVFJVQywgKlBNQUNfQ1NSNV9TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9MRU5fQ0ZHICAgICAgICAgICAgICAweDEwMTgJCS8vIHJ0Mjg2MGIgbWF4IDE2ayBieXRlcy4gYml0MTI6MTMgTWF4aW11bSBQU0RVIGxlbmd0aCAocG93ZXIgZmFjdG9yKSAwOjJeMTMsIDE6Ml4xNCwgMjoyXjE1LCAzOjJeMTYKKyNkZWZpbmUgQkJQX0NTUl9DRkcgICAgICAgICAgICAJCTB4MTAxYwkJLy8KKy8vCisvLyBCQlBfQ1NSX0NGRzogQkJQIHNlcmlhbCBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0JCUF9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCToxMjsKKwkJVUlOVDMyCQlCQlBfUldfTU9ERToxOwkJLy8gMDogdXNlIHNlcmlhbCBtb2RlICAxOnBhcmFsbGVsCisJCVVJTlQzMgkJQkJQX1BBUl9EVVI6MTsJCSAgICAvLyAwOiA0IE1BQyBjbG9jayBjeWNsZXMgIDE6IDggTUFDIGNsb2NrIGN5Y2xlcworCQlVSU5UMzIJCUJ1c3k6MTsJCQkJLy8gMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgQkJQIHByb2dyYW1taW5nLgorCQlVSU5UMzIJCWZSZWFkOjE7CQkgICAgLy8gMDogV3JpdGUJQkJQLCAxOglSZWFkIEJCUAorCQlVSU5UMzIJCVJlZ051bTo4OwkJCS8vIFNlbGVjdGVkCUJCUAlyZWdpc3RlcgorCQlVSU5UMzIJCVZhbHVlOjg7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQkJQX0NTUl9DRkdfU1RSVUMsICpQQkJQX0NTUl9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQkJQX0NTUl9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJVmFsdWU6ODsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJUmVnTnVtOjg7CQkJLy8gU2VsZWN0ZWQJQkJQCXJlZ2lzdGVyCisJCVVJTlQzMgkJZlJlYWQ6MTsJCSAgICAvLyAwOiBXcml0ZQlCQlAsIDE6CVJlYWQgQkJQCisJCVVJTlQzMgkJQnVzeToxOwkJCQkvLyAxOiBBU0lDIGlzIGJ1c3kgZXhlY3V0ZSBCQlAgcHJvZ3JhbW1pbmcuCisJCVVJTlQzMgkJQkJQX1BBUl9EVVI6MTsJCSAgICAgLy8gMDogNCBNQUMgY2xvY2sgY3ljbGVzICAxOiA4IE1BQyBjbG9jayBjeWNsZXMKKwkJVUlOVDMyCQlCQlBfUldfTU9ERToxOwkJLy8gMDogdXNlIHNlcmlhbCBtb2RlICAxOnBhcmFsbGVsCisJCVVJTlQzMgkJOjEyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQkJQX0NTUl9DRkdfU1RSVUMsICpQQkJQX0NTUl9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgUkZfQ1NSX0NGRzAgICAgICAgICAgICAJCTB4MTAyMAorLy8KKy8vIFJGX0NTUl9DRkc6IFJGIGNvbnRyb2wgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJQnVzeToxOwkJICAgIC8vIDA6IGlkbGUgMTogOGJ1c3kKKwkJVUlOVDMyCQlTZWw6MTsJCQkJLy8gMDpSRl9MRTAgYWN0aXZhdGUgIDE6UkZfTEUxIGFjdGl2YXRlCisJCVVJTlQzMgkJU3RhbmRieU1vZGU6MTsJCSAgICAvLyAwOiBoaWdoIHdoZW4gc3RhbmQgYnkgMToJbG93IHdoZW4gc3RhbmRieQorCQlVSU5UMzIJCWJpdHdpZHRoOjU7CQkJLy8gU2VsZWN0ZWQJQkJQCXJlZ2lzdGVyCisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJGX0NTUl9DRkcwX1NUUlVDLCAqUFJGX0NTUl9DRkcwX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJYml0d2lkdGg6NTsJCQkvLyBTZWxlY3RlZAlCQlAJcmVnaXN0ZXIKKwkJVUlOVDMyCQlTdGFuZGJ5TW9kZToxOwkJICAgIC8vIDA6IGhpZ2ggd2hlbiBzdGFuZCBieSAxOglsb3cgd2hlbiBzdGFuZGJ5CisJCVVJTlQzMgkJU2VsOjE7CQkJCS8vIDA6UkZfTEUwIGFjdGl2YXRlICAxOlJGX0xFMSBhY3RpdmF0ZQorCQlVSU5UMzIJCUJ1c3k6MTsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSRl9DU1JfQ0ZHMF9TVFJVQywgKlBSRl9DU1JfQ0ZHMF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBSRl9DU1JfQ0ZHMSAgICAgICAgICAgCQkweDEwMjQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHMV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlyc3Y6NzsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJCVVJTlQzMgkJUkZHYXA6NTsJCQkvLyBHYXAgYmV0d2VlbiBCQl9DT05UUk9MX1JGIGFuZCBSRl9MRS4gMDogMyBzeXN0ZW0gY2xvY2sgY3ljbGUgKDM3LjV1c2VjKSAxOiA1IHN5c3RlbSBjbG9jayBjeWNsZSAoNjIuNXVzZWMpCisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJGX0NTUl9DRkcxX1NUUlVDLCAqUFJGX0NTUl9DRkcxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJUkZHYXA6NTsJCQkvLyBHYXAgYmV0d2VlbiBCQl9DT05UUk9MX1JGIGFuZCBSRl9MRS4gMDogMyBzeXN0ZW0gY2xvY2sgY3ljbGUgKDM3LjV1c2VjKSAxOiA1IHN5c3RlbSBjbG9jayBjeWNsZSAoNjIuNXVzZWMpCisJCVVJTlQzMgkJcnN2Ojc7CQkgICAgLy8gMDogaWRsZSAxOiA4YnVzeQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUkZfQ1NSX0NGRzFfU1RSVUMsICpQUkZfQ1NSX0NGRzFfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgUkZfQ1NSX0NGRzIgICAgICAgICAgIAkJMHgxMDI4CQkvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCXJzdjo4OwkJICAgIC8vIDA6IGlkbGUgMTogOGJ1c3kKKwkJVUlOVDMyCQlSZWdJZEFuZENvbnRlbnQ6MjQ7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUkZfQ1NSX0NGRzJfU1RSVUMsICpQUkZfQ1NSX0NGRzJfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGRzJfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwkJVUlOVDMyCQlyc3Y6ODsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSRl9DU1JfQ0ZHMl9TVFJVQywgKlBSRl9DU1JfQ0ZHMl9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBMRURfQ0ZHICAgICAgICAgICAJCTB4MTAyYwkJLy8gIE1BQ19DU1IxNAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0xFRF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJOjE7CisJCVVJTlQzMgkJTGVkUG9sYXI6MTsJCQkvLyBMZWQgUG9sYXJpdHkuICAwOiBhY3RpdmUgbG93MTogYWN0aXZlIGhpZ2gKKwkJVUlOVDMyCQlZTGVkTW9kZToyOwkJCS8vIHllbGxvdyBMZWQgTW9kZQorCQlVSU5UMzIJCUdMZWRNb2RlOjI7CQkJLy8gZ3JlZW4gTGVkIE1vZGUKKwkJVUlOVDMyCQlSTGVkTW9kZToyOwkJCS8vIHJlZCBMZWQgTW9kZSAgICAwOiBvZmYxOiBibGlua2luZyB1cG9uIFRYMjogcGVyaW9kaWMgc2xvdyBibGlua2luZzM6IGFsd2F5cyBvbgorCQlVSU5UMzIJCXJzdjoyOworCQlVSU5UMzIJCVNsb3dCbGlua1BlcmlvZDo2OwkJCS8vIHNsb3cgYmxpbmtpbmcgcGVyaW9kLiB1bml0OjFtcworCQlVSU5UMzIJCU9mZlBlcmlvZDo4OwkJCS8vIGJsaW5raW5nIG9mZiBwZXJpb2QgdW5pdCAxbXMKKwkJVUlOVDMyCQlPblBlcmlvZDo4OwkJCS8vIGJsaW5raW5nIG9uIHBlcmlvZCB1bml0IDFtcworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTEVEX0NGR19TVFJVQywgKlBMRURfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0xFRF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJT25QZXJpb2Q6ODsJCQkvLyBibGlua2luZyBvbiBwZXJpb2QgdW5pdCAxbXMKKwkJVUlOVDMyCQlPZmZQZXJpb2Q6ODsJCQkvLyBibGlua2luZyBvZmYgcGVyaW9kIHVuaXQgMW1zCisJCVVJTlQzMgkJU2xvd0JsaW5rUGVyaW9kOjY7CQkJLy8gc2xvdyBibGlua2luZyBwZXJpb2QuIHVuaXQ6MW1zCisJCVVJTlQzMgkJcnN2OjI7CisJCVVJTlQzMgkJUkxlZE1vZGU6MjsJCQkvLyByZWQgTGVkIE1vZGUgICAgMDogb2ZmMTogYmxpbmtpbmcgdXBvbiBUWDI6IHBlcmlvZGljIHNsb3cgYmxpbmtpbmczOiBhbHdheXMgb24KKwkJVUlOVDMyCQlHTGVkTW9kZToyOwkJCS8vIGdyZWVuIExlZCBNb2RlCisJCVVJTlQzMgkJWUxlZE1vZGU6MjsJCQkvLyB5ZWxsb3cgTGVkIE1vZGUKKwkJVUlOVDMyCQlMZWRQb2xhcjoxOwkJCS8vIExlZCBQb2xhcml0eS4gIDA6IGFjdGl2ZSBsb3cxOiBhY3RpdmUgaGlnaAorCQlVSU5UMzIJCToxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTEVEX0NGR19TVFJVQywgKlBMRURfQ0ZHX1NUUlVDOworI2VuZGlmCisvLworLy8gIDQuMiBNQUMgVElNSU5HICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTEwMCkKKy8vCisjZGVmaW5lIFhJRlNfVElNRV9DRkcgICAgICAgICAgICAgMHgxMTAwCQkgLy8gTUFDX0NTUjggIE1BQ19DU1I5CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSUZTX1NMT1RfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgIHJzdjoyOworCSAgICBVSU5UMzIgIEJCUnhlbmRFbmFibGU6MTsgICAgICAgIC8vICByZWZlcmVuY2UgUlhFTkQgc2lnbmFsIHRvIGJlZ2luIFhJRlMgZGVmZXIKKwkgICAgVUlOVDMyICBFSUZTOjk7ICAgICAgICAvLyAgdW5pdCAxdXMKKwkgICAgVUlOVDMyICBPZmRtWGlmc1RpbWU6NDsgICAgICAgIC8vT0ZETSBTSUZTLiB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYIHdoZW4gTUFDIGRvZXNuJ3QgcmVmZXJlbmNlIEJCUCBzaWduYWwgQkJSWEVORAorCSAgICBVSU5UMzIgIE9mZG1TaWZzVGltZTo4OyAgICAgICAgLy8gIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIE9GRE0gUlgvVFgKKwkgICAgVUlOVDMyICBDY2ttU2lmc1RpbWU6ODsgICAgICAgIC8vICB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBDQ0sgUlgvVFgKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUlGU19TTE9UX0NGR19TVFJVQywgKlBJRlNfU0xPVF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfSUZTX1NMT1RfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgIENja21TaWZzVGltZTo4OyAgICAgICAgLy8gIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIENDSyBSWC9UWAorCSAgICBVSU5UMzIgIE9mZG1TaWZzVGltZTo4OyAgICAgICAgLy8gIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIE9GRE0gUlgvVFgKKwkgICAgVUlOVDMyICBPZmRtWGlmc1RpbWU6NDsgICAgICAgIC8vT0ZETSBTSUZTLiB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYIHdoZW4gTUFDIGRvZXNuJ3QgcmVmZXJlbmNlIEJCUCBzaWduYWwgQkJSWEVORAorCSAgICBVSU5UMzIgIEVJRlM6OTsgICAgICAgIC8vICB1bml0IDF1cworCSAgICBVSU5UMzIgIEJCUnhlbmRFbmFibGU6MTsgICAgICAgIC8vICByZWZlcmVuY2UgUlhFTkQgc2lnbmFsIHRvIGJlZ2luIFhJRlMgZGVmZXIKKwkgICAgVUlOVDMyICByc3Y6MjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUlGU19TTE9UX0NGR19TVFJVQywgKlBJRlNfU0xPVF9DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBCS09GRl9TTE9UX0NGRyAgICAgICAgICAgICAweDExMDQJCSAvLyAgbWFjX2NzcjkgbGFzdCA4IGJpdHMKKyNkZWZpbmUgTkFWX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTEwOAkJIC8vIE5BViAgKE1BQ19DU1IxNSkKKyNkZWZpbmUgQ0hfVElNRV9DRkcgICAgICAgICAgICAgMHgxMTBDCQkgCS8vIENvdW50IGFzIGNoYW5uZWwgYnVzeQorI2RlZmluZSBQQkZfTElGRV9USU1FUiAgICAgICAgICAgICAweDExMTAJCSAvL1RYL1JYIE1QRFUgdGltZXN0YW1wIHRpbWVyIChmcmVlIHJ1bilVbml0OiAxdXMKKyNkZWZpbmUgQkNOX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTExNAkJIC8vIFRYUlhfQ1NSOQorCisjZGVmaW5lIEJDTl9PRkZTRVQwCQkJCTB4MDQyQworI2RlZmluZSBCQ05fT0ZGU0VUMQkJCQkweDA0MzAKKworLy8KKy8vIEJDTl9USU1FX0NGRyA6IFN5bmNocm9uaXphdGlvbiBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0JDTl9USU1FX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlUeFRpbWVzdGFtcENvbXBlbnNhdGU6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIDozOworCQlVSU5UMzIJCWJCZWFjb25HZW46MTsJCS8vIEVuYWJsZSBiZWFjb24gZ2VuZXJhdG9yCisgICAgICAgIFVJTlQzMiAgICAgICBiVEJUVEVuYWJsZToxOworCQlVSU5UMzIJCVRzZlN5bmNNb2RlOjI7CQkvLyBFbmFibGUgVFNGIHN5bmMsIDAwOiBkaXNhYmxlLCAwMTogaW5mcmEgbW9kZSwgMTA6IGFkLWhvYyBtb2RlCisJCVVJTlQzMgkJYlRzZlRpY2tpbmc6MTsJCS8vIEVuYWJsZSBUU0YgYXV0byBjb3VudGluZworCQlVSU5UMzIgICAgICAgQmVhY29uSW50ZXJ2YWw6MTY7ICAvLyBpbiB1bml0IG9mIDEvMTYgVFUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUJDTl9USU1FX0NGR19TVFJVQywgKlBCQ05fVElNRV9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQkNOX1RJTUVfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgQmVhY29uSW50ZXJ2YWw6MTY7ICAvLyBpbiB1bml0IG9mIDEvMTYgVFUKKwkJVUlOVDMyCQliVHNmVGlja2luZzoxOwkJLy8gRW5hYmxlIFRTRiBhdXRvIGNvdW50aW5nCisJCVVJTlQzMgkJVHNmU3luY01vZGU6MjsJCS8vIEVuYWJsZSBUU0Ygc3luYywgMDA6IGRpc2FibGUsIDAxOiBpbmZyYSBtb2RlLCAxMDogYWQtaG9jIG1vZGUKKyAgICAgICAgVUlOVDMyICAgICAgIGJUQlRURW5hYmxlOjE7CisJCVVJTlQzMgkJYkJlYWNvbkdlbjoxOwkJLy8gRW5hYmxlIGJlYWNvbiBnZW5lcmF0b3IKKyAgICAgICAgVUlOVDMyICAgICAgIDozOworCQlVSU5UMzIJCVR4VGltZXN0YW1wQ29tcGVuc2F0ZTo4OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQkNOX1RJTUVfQ0ZHX1NUUlVDLCAqUEJDTl9USU1FX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUQlRUX1NZTkNfQ0ZHICAgICAgICAgICAgMHgxMTE4ICAJCS8vIHR4cnhfY3NyMTAKKyNkZWZpbmUgVFNGX1RJTUVSX0RXMCAgICAgICAgICAgICAweDExMUMgIAkJLy8gTG9jYWwgVFNGIHRpbWVyIGxzYiAzMiBiaXRzLiBSZWFkLW9ubHkKKyNkZWZpbmUgVFNGX1RJTUVSX0RXMSAgICAgICAgICAgICAweDExMjAgIAkJLy8gbXNiIDMyIGJpdHMuIFJlYWQtb25seS4KKyNkZWZpbmUgVEJUVF9USU1FUiAgICAgICAgICAgICAJMHgxMTI0ICAJCS8vIFRJbWVyIHJlbWFpbnMgdGlsbCBuZXh0IFRCVFQuIFJlYWQtb25seS4gIFRYUlhfQ1NSMTQKKyNkZWZpbmUgSU5UX1RJTUVSX0NGRyAgICAgICAgICAgICAgCTB4MTEyOCAgCQkvLworI2RlZmluZSBJTlRfVElNRVJfRU4gICAgICAgICAgICAgCTB4MTEyYyAgCQkvLyAgR1AtdGltZXIgYW5kIHByZS10YnR0IEludCBlbmFibGUKKyNkZWZpbmUgQ0hfSURMRV9TVEEgICAgICAgICAgICAgIAkweDExMzAgIAkJLy8gIGNoYW5uZWwgaWRsZSB0aW1lCisjZGVmaW5lIENIX0JVU1lfU1RBICAgICAgICAgICAgICAJMHgxMTM0ICAJCS8vICBjaGFubmxlIGJ1c3kgdGltZQorLy8KKy8vICA0LjIgTUFDIFBPV0VSICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTIwMCkKKy8vCisjZGVmaW5lIE1BQ19TVEFUVVNfQ0ZHICAgICAgICAgICAgIDB4MTIwMAkJIC8vIG9sZCBNQUNfQ1NSMTIKKyNkZWZpbmUgUFdSX1BJTl9DRkcgICAgICAgICAgICAgMHgxMjA0CQkgLy8gb2xkIE1BQ19DU1IxMgorI2RlZmluZSBBVVRPX1dBS0VVUF9DRkcgICAgICAgICAgICAgMHgxMjA4CQkgLy8gb2xkIE1BQ19DU1IxMAorLy8KKy8vIEFVVE9fV0FLRVVQX0NGRzogTWFudWFsIHBvd2VyIGNvbnRyb2wgLyBzdGF0dXMgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQVVUT19XQUtFVVBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJOjE2OworCQlVSU5UMzIJCUVuYWJsZUF1dG9XYWtldXA6MTsJLy8gMDpzbGVlcCwgMTphd2FrZQorCQlVSU5UMzIgICAgICAgTnVtb2ZTbGVlcGluZ1RidHQ6NzsgICAgICAgICAgLy8gRm9yY2VXYWtlIGhhcyBoaWdoIHByaXZpbGVnZSB0aGFuIFB1dFRvU2xlZXAgd2hlbiBib3RoIHNldAorCQlVSU5UMzIgICAgICAgQXV0b0xlYWRUaW1lOjg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBVVRPX1dBS0VVUF9TVFJVQywgKlBBVVRPX1dBS0VVUF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BVVRPX1dBS0VVUF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIEF1dG9MZWFkVGltZTo4OworCQlVSU5UMzIgICAgICAgTnVtb2ZTbGVlcGluZ1RidHQ6NzsgICAgICAgICAgLy8gRm9yY2VXYWtlIGhhcyBoaWdoIHByaXZpbGVnZSB0aGFuIFB1dFRvU2xlZXAgd2hlbiBib3RoIHNldAorCQlVSU5UMzIJCUVuYWJsZUF1dG9XYWtldXA6MTsJLy8gMDpzbGVlcCwgMTphd2FrZQorCQlVSU5UMzIJCToxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFVVE9fV0FLRVVQX1NUUlVDLCAqUEFVVE9fV0FLRVVQX1NUUlVDOworI2VuZGlmCisvLworLy8gIDQuMyBNQUMgVFggIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIChvZmZzZXQ6MHgxMzAwKQorLy8KKworI2RlZmluZSBFRENBX0FDMF9DRkcJMHgxMzAwCQkvL0FDX1RYT1BfQ1NSMCAweDM0NzQKKyNkZWZpbmUgRURDQV9BQzFfQ0ZHCTB4MTMwNAorI2RlZmluZSBFRENBX0FDMl9DRkcJMHgxMzA4CisjZGVmaW5lIEVEQ0FfQUMzX0NGRwkweDEzMGMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRENBX0FDX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICA6MTI7ICAgICAgICAvLworCSAgICBVSU5UMzIgIEN3bWF4OjQ7ICAgICAgICAvL3VuaXQgcG93ZXIgb2YgMgorCSAgICBVSU5UMzIgIEN3bWluOjQ7ICAgICAgICAvLworCSAgICBVSU5UMzIgIEFpZnNuOjQ7ICAgICAgICAvLyAjIG9mIHNsb3QgdGltZQorCSAgICBVSU5UMzIgIEFjVHhvcDo4OyAgICAgICAgLy8gIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRURDQV9BQ19DRkdfU1RSVUMsICpQRURDQV9BQ19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRURDQV9BQ19DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgQWNUeG9wOjg7ICAgICAgICAvLyAgaW4gdW5pdCBvZiAzMnVzCisJICAgIFVJTlQzMiAgQWlmc246NDsgICAgICAgIC8vICMgb2Ygc2xvdCB0aW1lCisJICAgIFVJTlQzMiAgQ3dtaW46NDsgICAgICAgIC8vCisJICAgIFVJTlQzMiAgQ3dtYXg6NDsgICAgICAgIC8vdW5pdCBwb3dlciBvZiAyCisJICAgIFVJTlQzMiAgOjEyOyAgICAgICAvLworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRURDQV9BQ19DRkdfU1RSVUMsICpQRURDQV9BQ19DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBFRENBX1RJRF9BQ19NQVAJMHgxMzEwCisjZGVmaW5lIFRYX1BXUl9DRkdfMAkweDEzMTQKKyNkZWZpbmUgVFhfUFdSX0NGR18xCTB4MTMxOAorI2RlZmluZSBUWF9QV1JfQ0ZHXzIJMHgxMzFDCisjZGVmaW5lIFRYX1BXUl9DRkdfMwkweDEzMjAKKyNkZWZpbmUgVFhfUFdSX0NGR180CTB4MTMyNAorI2RlZmluZSBUWF9QSU5fQ0ZHCQkweDEzMjgKKyNkZWZpbmUgVFhfQkFORF9DRkcJMHgxMzJjCQkvLyAweDEgdXNlIHVwcGVyIDIwTUh6LiAwIGp1c2UgbG93ZXIgMjBNSHoKKyNkZWZpbmUgVFhfU1dfQ0ZHMAkJMHgxMzMwCisjZGVmaW5lIFRYX1NXX0NGRzEJCTB4MTMzNAorI2RlZmluZSBUWF9TV19DRkcyCQkweDEzMzgKKyNkZWZpbmUgVFhPUF9USFJFU19DRkcJCTB4MTMzYworI2RlZmluZSBUWE9QX0NUUkxfQ0ZHCQkweDEzNDAKKyNkZWZpbmUgVFhfUlRTX0NGRwkJMHgxMzQ0CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9SVFNfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgcnN2Ojc7CisJICAgIFVJTlQzMiAgICAgICBSdHNGYmtFbjoxOyAgICAvLyBlbmFibGUgcnRzIHJhdGUgZmFsbGJhY2sKKwkgICAgVUlOVDMyICAgICAgIFJ0c1RocmVzOjE2OyAgICAvLyB1bml0OmJ5dGUKKwkgICAgVUlOVDMyICAgICAgIEF1dG9SdHNSZXRyeUxpbWl0Ojg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFNfQ0ZHX1NUUlVDLCAqUFRYX1JUU19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfUlRTX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIEF1dG9SdHNSZXRyeUxpbWl0Ojg7CisJICAgIFVJTlQzMiAgICAgICBSdHNUaHJlczoxNjsgICAgLy8gdW5pdDpieXRlCisJICAgIFVJTlQzMiAgICAgICBSdHNGYmtFbjoxOyAgICAvLyBlbmFibGUgcnRzIHJhdGUgZmFsbGJhY2sKKwkgICAgVUlOVDMyICAgICAgIHJzdjo3OyAgICAgLy8gMTogSFQgbm9uLVNUQkMgY29udHJvbCBmcmFtZSBlbmFibGUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1JUU19DRkdfU1RSVUMsICpQVFhfUlRTX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9USU1FT1VUX0NGRwkweDEzNDgKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9USU1FT1VUX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjI6ODsKKwkgICAgVUlOVDMyICAgICAgIFR4b3BUaW1lb3V0Ojg7CS8vVFhPUCB0aW1lb3V0IHZhbHVlIGZvciBUWE9QIHRydW5jYXRpb24uICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IChTTE9UX1RJTUUpID4gKFRYX09QX1RJTUVPVVQpID4gKFJYX0FDS19USU1FT1VUKQorCSAgICBVSU5UMzIgICAgICAgUnhBY2tUaW1lb3V0Ojg7CS8vIHVuaXQ6c2xvdC4gVXNlZCBmb3IgVFggcHJlY2VkdXJlCisJICAgIFVJTlQzMiAgICAgICBNcGR1TGlmZVRpbWU6NDsgICAgLy8gIGV4cGlyYXRpb24gdGltZSA9IDJeKDkrTVBEVSBMSUZFIFRJTUUpICB1cworCSAgICBVSU5UMzIgICAgICAgcnN2OjQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9USU1FT1VUX0NGR19TVFJVQywgKlBUWF9USU1FT1VUX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9USU1FT1VUX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjo0OworCSAgICBVSU5UMzIgICAgICAgTXBkdUxpZmVUaW1lOjQ7ICAgIC8vICBleHBpcmF0aW9uIHRpbWUgPSAyXig5K01QRFUgTElGRSBUSU1FKSAgdXMKKwkgICAgVUlOVDMyICAgICAgIFJ4QWNrVGltZW91dDo4OwkvLyB1bml0OnNsb3QuIFVzZWQgZm9yIFRYIHByZWNlZHVyZQorCSAgICBVSU5UMzIgICAgICAgVHhvcFRpbWVvdXQ6ODsJLy9UWE9QIHRpbWVvdXQgdmFsdWUgZm9yIFRYT1AgdHJ1bmNhdGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgKFNMT1RfVElNRSkgPiAoVFhfT1BfVElNRU9VVCkgPiAoUlhfQUNLX1RJTUVPVVQpCisJICAgIFVJTlQzMiAgICAgICByc3YyOjg7ICAgICAvLyAxOiBIVCBub24tU1RCQyBjb250cm9sIGZyYW1lIGVuYWJsZQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfVElNRU9VVF9DRkdfU1RSVUMsICpQVFhfVElNRU9VVF9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfUlRZX0NGRwkweDEzNGMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfVFhfUlRZX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjoxOworCSAgICBVSU5UMzIgICAgICAgVHhhdXRvRkJFbmFibGU6MTsgICAgLy8gVHggcmV0cnkgUEhZIHJhdGUgYXV0byBmYWxsYmFjayBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIEFnZ1J0eU1vZGU6MTsJLy8gQWdncmVnYXRlIE1QRFUgcmV0cnkgbW9kZS4gIDA6ZXhwaXJlZCBieSByZXRyeSBsaW1pdCwgMTogZXhwaXJlZCBieSBtcGR1IGxpZmUgdGltZXIKKwkgICAgVUlOVDMyICAgICAgIE5vbkFnZ1J0eU1vZGU6MTsJLy8gTm9uLUFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyCisJICAgIFVJTlQzMiAgICAgICBMb25nUnR5VGhyZToxMjsJLy8gTG9uZyByZXRyeSB0aHJlc2hvb2xkCisJICAgIFVJTlQzMiAgICAgICBMb25nUnR5TGltaXQ6ODsJLy9sb25nIHJldHJ5IGxpbWl0CisJICAgIFVJTlQzMiAgICAgICBTaG9ydFJ0eUxpbWl0Ojg7CS8vICBzaG9ydCByZXRyeSBsaW1pdAorCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFlfQ0ZHX1NUUlVDLCAqUFRYX1JUWV9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBQQUNLRUQgX1RYX1JUWV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBTaG9ydFJ0eUxpbWl0Ojg7CS8vICBzaG9ydCByZXRyeSBsaW1pdAorCSAgICBVSU5UMzIgICAgICAgTG9uZ1J0eUxpbWl0Ojg7CS8vbG9uZyByZXRyeSBsaW1pdAorCSAgICBVSU5UMzIgICAgICAgTG9uZ1J0eVRocmU6MTI7CS8vIExvbmcgcmV0cnkgdGhyZXNob29sZAorCSAgICBVSU5UMzIgICAgICAgTm9uQWdnUnR5TW9kZToxOwkvLyBOb24tQWdncmVnYXRlIE1QRFUgcmV0cnkgbW9kZS4gIDA6ZXhwaXJlZCBieSByZXRyeSBsaW1pdCwgMTogZXhwaXJlZCBieSBtcGR1IGxpZmUgdGltZXIKKwkgICAgVUlOVDMyICAgICAgIEFnZ1J0eU1vZGU6MTsJLy8gQWdncmVnYXRlIE1QRFUgcmV0cnkgbW9kZS4gIDA6ZXhwaXJlZCBieSByZXRyeSBsaW1pdCwgMTogZXhwaXJlZCBieSBtcGR1IGxpZmUgdGltZXIKKwkgICAgVUlOVDMyICAgICAgIFR4YXV0b0ZCRW5hYmxlOjE7ICAgIC8vIFR4IHJldHJ5IFBIWSByYXRlIGF1dG8gZmFsbGJhY2sgZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICByc3Y6MTsgICAgIC8vIDE6IEhUIG5vbi1TVEJDIGNvbnRyb2wgZnJhbWUgZW5hYmxlCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFlfQ0ZHX1NUUlVDLCAqUFRYX1JUWV9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfTElOS19DRkcJMHgxMzUwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglQQUNLRUQgX1RYX0xJTktfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QgUEFDS0VEIHsKKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZTOjg7CS8vcmVtb3RlIE1DUyBmZWVkYmFjayBzZXF1ZW5jZSBudW1iZXIKKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZCOjg7ICAgIC8vICByZW1vdGUgTUNTIGZlZWRiYWNrCisJICAgIFVJTlQzMiAgICAgICByc3Y6MzsJLy8KKwkgICAgVUlOVDMyICAgICAgIFR4Q0ZBY2tFbjoxOwkvLyAgIFBpZ2d5YmFjayBDRi1BQ0sgZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICBUeFJER0VuOjE7CS8vIFJERyBUWCBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFR4TVJRRW46MTsJLy8gIE1DUyByZXF1ZXN0IFRYIGVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgUmVtb3RlVU1GU0VuYWJsZToxOwkvLyAgcmVtb3RlIHVuc29saWNpdCAgTUZCIGVuYWJsZS4gIDA6IG5vdCBhcHBseSByZW1vdGUgcmVtb3RlIHVuc29saWNpdCAoTUZTPTcpCisJICAgIFVJTlQzMiAgICAgICBNRkJFbmFibGU6MTsJLy8gIFRYIGFwcGx5IHJlbW90ZSBNRkIgMTplbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFJlbW90ZU1GQkxpZmVUaW1lOjg7CS8vcmVtb3RlIE1GQiBsaWZlIHRpbWUuIHVuaXQgOiAzMnVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9MSU5LX0NGR19TVFJVQywgKlBUWF9MSU5LX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCVBBQ0tFRCBfVFhfTElOS19DRkdfU1RSVUMJeworCXN0cnVjdCBQQUNLRUQgeworCSAgICBVSU5UMzIgICAgICAgUmVtb3RlTUZCTGlmZVRpbWU6ODsJLy9yZW1vdGUgTUZCIGxpZmUgdGltZS4gdW5pdCA6IDMydXMKKwkgICAgVUlOVDMyICAgICAgIE1GQkVuYWJsZToxOwkvLyAgVFggYXBwbHkgcmVtb3RlIE1GQiAxOmVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgUmVtb3RlVU1GU0VuYWJsZToxOwkvLyAgcmVtb3RlIHVuc29saWNpdCAgTUZCIGVuYWJsZS4gIDA6IG5vdCBhcHBseSByZW1vdGUgcmVtb3RlIHVuc29saWNpdCAoTUZTPTcpCisJICAgIFVJTlQzMiAgICAgICBUeE1SUUVuOjE7CS8vICBNQ1MgcmVxdWVzdCBUWCBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFR4UkRHRW46MTsJLy8gUkRHIFRYIGVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgVHhDRkFja0VuOjE7CS8vICAgUGlnZ3liYWNrIENGLUFDSyBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIHJzdjozOwkvLworCSAgICBVSU5UMzIgICAgICAgUmVtb3RNRkI6ODsgICAgLy8gIHJlbW90ZSBNQ1MgZmVlZGJhY2sKKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZTOjg7CS8vcmVtb3RlIE1DUyBmZWVkYmFjayBzZXF1ZW5jZSBudW1iZXIKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0xJTktfQ0ZHX1NUUlVDLCAqUFRYX0xJTktfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIEhUX0ZCS19DRkcwCTB4MTM1NAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9IVF9GQktfQ0ZHMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTN0ZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M2RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzVGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MzRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzJGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MwRkJLOjQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlIVF9GQktfQ0ZHMF9TVFJVQywgKlBIVF9GQktfQ0ZHMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfSFRfRkJLX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzBGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MyRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzNGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M1RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzZGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTN0ZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzBfU1RSVUMsICpQSFRfRkJLX0NGRzBfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgSFRfRkJLX0NGRzEJMHgxMzU4CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSFRfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzE1RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzE0RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzEzRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzEyRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzExRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzEwRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzlGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTOEZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzFfU1RSVUMsICpQSFRfRkJLX0NGRzFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfSFRfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzhGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTOUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMkZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxM0ZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxNUZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzFfU1RSVUMsICpQSFRfRkJLX0NGRzFfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgTEdfRkJLX0NGRzAJMHgxMzVjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTEdfRkJLX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTN0ZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgNgorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzZGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDUKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M1RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyA0CisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTNEZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMworCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzNGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDIKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MyRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAxCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTMUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMAorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzBGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUxHX0ZCS19DRkcwX1NUUlVDLCAqUExHX0ZCS19DRkcwX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0xHX0ZCS19DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzBGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MxRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTMkZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMQorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzNGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDIKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M0RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAzCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTNUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgNAorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzZGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDUKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M3RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyA2CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlMR19GQktfQ0ZHMF9TVFJVQywgKlBMR19GQktfQ0ZHMF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBMR19GQktfQ0ZHMQkJMHgxMzYwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTEdfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3Y6MTY7CisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MzRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAyCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MyRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAxCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MxRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MwRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlMR19GQktfQ0ZHMV9TVFJVQywgKlBMR19GQktfQ0ZHMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9MR19GQktfQ0ZHMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzBGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzFGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzJGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDEKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzNGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDIKKwkgICAgVUlOVDMyICAgICAgIHJzdjoxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUxHX0ZCS19DRkcxX1NUUlVDLCAqUExHX0ZCS19DRkcxX1NUUlVDOworI2VuZGlmCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy89PT09PT09PT09PT09PT09IFByb3RlY3Rpb24gUGFyYW1hdGVyPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBDQ0tfUFJPVF9DRkcJMHgxMzY0CQkvL0NDSyBQcm90ZWN0aW9uCisjZGVmaW5lIEFTSUNfU0hPUlROQVYJCTEKKyNkZWZpbmUgQVNJQ19MT05HTkFWCQkyCisjZGVmaW5lIEFTSUNfUlRTCQkxCisjZGVmaW5lIEFTSUNfQ1RTCQkyCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUFJPVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3Y6NTsKKwkgICAgVUlOVDMyICAgICAgIFJUU1RoRW46MTsJLy9SVFMgdGhyZXNob2xkIGVuYWJsZSBvbiBDQ0sgVFgKKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuIDA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dPZmRtOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dDY2s6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3ROYXY6MjsJLy9UWE9QIHByb3RlY3Rpb24gdHlwZSBmb3IgQ0NLIFRYLiAwOk5vbmUsIDE6U2hvcnROQVZwcm90ZWN0LCAgMjpMb25nTkFWUHJvdGVjdCwgMzpyc3YKKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3RDdHJsOjI7CS8vUHJvdGVjdGlvbiBjb250cm9sIGZyYW1lIHR5cGUgZm9yIENDSyBUWC4gMTpSVFMvQ1RTLCAyOkNUUy10by1zZWxmLCAwOk5vbmUsIDM6cnN2CisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0UmF0ZToxNjsJLy9Qcm90ZWN0aW9uIGNvbnRyb2wgZnJhbWUgcmF0ZSBmb3IgQ0NLIFRYKFJUUy9DVFMvQ0ZFbmQpLgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUFJPVF9DRkdfU1RSVUMsICpQUFJPVF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUFJPVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0UmF0ZToxNjsJLy9Qcm90ZWN0aW9uIGNvbnRyb2wgZnJhbWUgcmF0ZSBmb3IgQ0NLIFRYKFJUUy9DVFMvQ0ZFbmQpLgorCSAgICBVSU5UMzIgICAgICAgUHJvdGVjdEN0cmw6MjsJLy9Qcm90ZWN0aW9uIGNvbnRyb2wgZnJhbWUgdHlwZSBmb3IgQ0NLIFRYLiAxOlJUUy9DVFMsIDI6Q1RTLXRvLXNlbGYsIDA6Tm9uZSwgMzpyc3YKKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3ROYXY6MjsJLy9UWE9QIHByb3RlY3Rpb24gdHlwZSBmb3IgQ0NLIFRYLiAwOk5vbmUsIDE6U2hvcnROQVZwcm90ZWN0LCAgMjpMb25nTkFWUHJvdGVjdCwgMzpyc3YKKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0NjazoxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LgorCSAgICBVSU5UMzIgICAgICAgVHhvcEFsbG93T2ZkbToxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LgorCSAgICBVSU5UMzIgICAgICAgVHhvcEFsbG93TU0yMDoxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4gMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFJUU1RoRW46MTsJLy9SVFMgdGhyZXNob2xkIGVuYWJsZSBvbiBDQ0sgVFgKKwkgICAgVUlOVDMyICAgICAgIHJzdjo1OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUFJPVF9DRkdfU1RSVUMsICpQUFJPVF9DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBPRkRNX1BST1RfQ0ZHCTB4MTM2OAkJLy9PRkRNIFByb3RlY3Rpb24KKyNkZWZpbmUgTU0yMF9QUk9UX0NGRwkweDEzNkMJCS8vTU0yMCBQcm90ZWN0aW9uCisjZGVmaW5lIE1NNDBfUFJPVF9DRkcJMHgxMzcwCQkvL01NNDAgUHJvdGVjdGlvbgorI2RlZmluZSBHRjIwX1BST1RfQ0ZHCTB4MTM3NAkJLy9HRjIwIFByb3RlY3Rpb24KKyNkZWZpbmUgR0Y0MF9QUk9UX0NGRwkweDEzNzgJCS8vR1I0MCBQcm90ZWN0aW9uCisjZGVmaW5lIEVYUF9DVFNfVElNRQkweDEzN0MJCS8vCisjZGVmaW5lIEVYUF9BQ0tfVElNRQkweDEzODAJCS8vCisKKy8vCisvLyAgNC40IE1BQyBSWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTQwMCkKKy8vCisjZGVmaW5lIFJYX0ZJTFRSX0NGRwkweDE0MDAJCQkvL1RYUlhfQ1NSMAorI2RlZmluZSBBVVRPX1JTUF9DRkcJMHgxNDA0CQkJLy9UWFJYX0NTUjQKKy8vCisvLyBUWFJYX0NTUjQ6IEF1dG8tUmVzcG9uZGVyLworLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmIHVuaW9uIF9BVVRPX1JTUF9DRkdfU1RSVUMgeworIHN0cnVjdCB7CisgICAgIFVJTlQzMiAgICAgICAgOjI0OworICAgICBVSU5UMzIgICAgICAgQWNrQ3RzUHNtQml0OjE7ICAgLy8gUG93ZXIgYml0IHZhbHVlIGluIGNvbnJ0cm9sIGZyYW1lCisgICAgIFVJTlQzMiAgICAgICBEdWFsQ1RTRW46MTsgICAvLyBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUKKyAgICAgVUlOVDMyICAgICAgIHJzdjoxOyAgIC8vIFBvd2VyIGJpdCB2YWx1ZSBpbiBjb25ydHJvbCBmcmFtZQorICAgICBVSU5UMzIgICAgICAgQXV0b1Jlc3BvbmRlclByZWFtYmxlOjE7ICAgIC8vIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZQorICAgICBVSU5UMzIgICAgICAgQ1RTNDBNUmVmOjE7ICAvLyBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUKKyAgICAgVUlOVDMyICAgICAgIENUUzQwTU1vZGU6MTsgIC8vIFJlc3BvbnNlIENUUyA0ME1IeiBkdXBsaWNhdGUgbW9kZQorICAgICBVSU5UMzIgICAgICAgQkFDQWNrUG9saWN5RW5hYmxlOjE7ICAgIC8vIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZQorICAgICBVSU5UMzIgICAgICAgQXV0b1Jlc3BvbmRlckVuYWJsZToxOworIH0gZmllbGQ7CisgVUlOVDMyICAgd29yZDsKK30gQVVUT19SU1BfQ0ZHX1NUUlVDLCAqUEFVVE9fUlNQX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmIHVuaW9uIF9BVVRPX1JTUF9DRkdfU1RSVUMgeworIHN0cnVjdCB7CisgICAgIFVJTlQzMiAgICAgICBBdXRvUmVzcG9uZGVyRW5hYmxlOjE7CisgICAgIFVJTlQzMiAgICAgICBCQUNBY2tQb2xpY3lFbmFibGU6MTsgICAgLy8gMDpsb25nLCAxOnNob3J0IHByZWFtYmxlCisgICAgIFVJTlQzMiAgICAgICBDVFM0ME1Nb2RlOjE7ICAvLyBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUKKyAgICAgVUlOVDMyICAgICAgIENUUzQwTVJlZjoxOyAgLy8gUmVzcG9uc2UgQ1RTIDQwTUh6IGR1cGxpY2F0ZSBtb2RlCisgICAgIFVJTlQzMiAgICAgICBBdXRvUmVzcG9uZGVyUHJlYW1ibGU6MTsgICAgLy8gMDpsb25nLCAxOnNob3J0IHByZWFtYmxlCisgICAgIFVJTlQzMiAgICAgICByc3Y6MTsgICAvLyBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUKKyAgICAgVUlOVDMyICAgICAgIER1YWxDVFNFbjoxOyAgIC8vIFBvd2VyIGJpdCB2YWx1ZSBpbiBjb25ydHJvbCBmcmFtZQorICAgICBVSU5UMzIgICAgICAgQWNrQ3RzUHNtQml0OjE7ICAgLy8gUG93ZXIgYml0IHZhbHVlIGluIGNvbnJ0cm9sIGZyYW1lCisgICAgIFVJTlQzMiAgICAgICAgOjI0OworIH0gZmllbGQ7CisgVUlOVDMyICAgd29yZDsKK30gQVVUT19SU1BfQ0ZHX1NUUlVDLCAqUEFVVE9fUlNQX0NGR19TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lIExFR0FDWV9CQVNJQ19SQVRFCTB4MTQwOAkvLyAgVFhSWF9DU1I1ICAgICAgICAgICAweDMwNTQKKyNkZWZpbmUgSFRfQkFTSUNfUkFURQkJMHgxNDBjCisjZGVmaW5lIEhUX0NUUkxfQ0ZHCQkweDE0MTAKKyNkZWZpbmUgU0lGU19DT1NUX0NGRwkJMHgxNDE0CisjZGVmaW5lIFJYX1BBUlNFUl9DRkcJCTB4MTQxOAkvL1NldCBOQVYgZm9yIGFsbCByZWNlaXZlZCBmcmFtZXMKKworLy8KKy8vICA0LjUgTUFDIFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gKG9mZnNldDoweDE1MDApCisvLworI2RlZmluZSBUWF9TRUNfQ05UMAkJMHgxNTAwCQkvLworI2RlZmluZSBSWF9TRUNfQ05UMAkJMHgxNTA0CQkvLworI2RlZmluZSBDQ01QX0ZDX01VVEUJCTB4MTUwOAkJLy8KKy8vCisvLyAgNC42IEhDQ0EvUFNNUCAob2Zmc2V0OjB4MTYwMCkKKy8vCisjZGVmaW5lIFRYT1BfSExEUl9BRERSMAkJMHgxNjAwCisjZGVmaW5lIFRYT1BfSExEUl9BRERSMQkJMHgxNjA0CisjZGVmaW5lIFRYT1BfSExEUl9FVAkJMHgxNjA4CisjZGVmaW5lIFFPU19DRlBPTExfUkFfRFcwCQkweDE2MGMKKyNkZWZpbmUgUU9TX0NGUE9MTF9BMV9EVzEJCTB4MTYxMAorI2RlZmluZSBRT1NfQ0ZQT0xMX1FDCQkweDE2MTQKKy8vCisvLyAgNC43IE1BQyBTdGF0aXN0aXMgcmVnaXN0ZXJzIChvZmZzZXQ6MHgxNzAwKQorLy8KKyNkZWZpbmUgUlhfU1RBX0NOVDAJCTB4MTcwMAkJLy8KKyNkZWZpbmUgUlhfU1RBX0NOVDEJCTB4MTcwNAkJLy8KKyNkZWZpbmUgUlhfU1RBX0NOVDIJCTB4MTcwOAkJLy8KKworLy8KKy8vIFJYX1NUQV9DTlQwX1NUUlVDOiBSWCBQTENQIGVycm9yIGNvdW50ICYgUlggQ1JDIGVycm9yIGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JYX1NUQV9DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFBoeUVycjsKKwkgICAgVVNIT1JUICBDcmNFcnI7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9TVEFfQ05UMF9TVFJVQywgKlBSWF9TVEFfQ05UMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBDcmNFcnI7CisJICAgIFVTSE9SVCAgUGh5RXJyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDBfU1RSVUMsICpQUlhfU1RBX0NOVDBfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFJYX1NUQV9DTlQxX1NUUlVDOiBSWCBGYWxzZSBDQ0EgY291bnQgJiBSWCBMT05HIGZyYW1lIGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JYX1NUQV9DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFBsY3BFcnI7CisJICAgIFVTSE9SVCAgRmFsc2VDY2E7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9TVEFfQ05UMV9TVFJVQywgKlBSWF9TVEFfQ05UMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBGYWxzZUNjYTsKKwkgICAgVVNIT1JUICBQbGNwRXJyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDFfU1RSVUMsICpQUlhfU1RBX0NOVDFfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFJYX1NUQV9DTlQyX1NUUlVDOgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBSeEZpZm9PdmVyZmxvd0NvdW50OworCSAgICBVU0hPUlQgIFJ4RHVwbGlDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJYX1NUQV9DTlQyX1NUUlVDLCAqUFJYX1NUQV9DTlQyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JYX1NUQV9DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFJ4RHVwbGlDb3VudDsKKwkgICAgVVNIT1JUICBSeEZpZm9PdmVyZmxvd0NvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDJfU1RSVUMsICpQUlhfU1RBX0NOVDJfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfU1RBX0NOVDAJCTB4MTcwQwkJLy8KKy8vCisvLyBTVEFfQ1NSMzogVFggQmVhY29uIGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX1NUQV9DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFR4QmVhY29uQ291bnQ7CisJICAgIFVTSE9SVCAgVHhGYWlsQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfQ05UMF9TVFJVQywgKlBUWF9TVEFfQ05UMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9TVEFfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUeEZhaWxDb3VudDsKKwkgICAgVVNIT1JUICBUeEJlYWNvbkNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0NOVDBfU1RSVUMsICpQVFhfU1RBX0NOVDBfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfU1RBX0NOVDEJCTB4MTcxMAkJLy8KKy8vCisvLyBUWF9TVEFfQ05UMTogVFggdHggY291bnQKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfU1RBX0NOVDFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVHhSZXRyYW5zbWl0OworCSAgICBVU0hPUlQgIFR4U3VjY2VzczsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9DTlQxX1NUUlVDLCAqUFRYX1NUQV9DTlQxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX1NUQV9DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFR4U3VjY2VzczsKKwkgICAgVVNIT1JUICBUeFJldHJhbnNtaXQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfQ05UMV9TVFJVQywgKlBUWF9TVEFfQ05UMV9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9TVEFfQ05UMgkJMHgxNzE0CQkvLworLy8KKy8vIFRYX1NUQV9DTlQyOiBUWCB0eCBjb3VudAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9TVEFfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUeFVuZGVyRmxvd0NvdW50OworCSAgICBVU0hPUlQgIFR4WmVyb0xlbkNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0NOVDJfU1RSVUMsICpQVFhfU1RBX0NOVDJfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfU1RBX0NOVDJfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVHhaZXJvTGVuQ291bnQ7CisJICAgIFVTSE9SVCAgVHhVbmRlckZsb3dDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9DTlQyX1NUUlVDLCAqUFRYX1NUQV9DTlQyX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX1NUQV9GSUZPCQkweDE3MTgJCS8vCisvLworLy8gVFhfU1RBX0ZJRk9fU1RSVUM6IFRYIFJlc3VsdCBmb3Igc3BlY2lmaWMgUElEIHN0YXR1cyBmaWZvIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9UWF9TVEFfRklGT19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSZXNlcnZlOjI7CisJCVVJTlQzMgkJVHhCRjoxOyAvLyAzKjMKKwkJVUlOVDMyCQlTdWNjZXNzUmF0ZToxMzsJLy9pbmNsdWRlIE1DUywgbW9kZSAsc2hvcnRHSSwgQlcgc2V0dGluZ1NhbWUgZm9ybWF0IGFzIFRYV0kgV29yZCAwIEJpdCAzMS0xNi4KKy8vCQlVSU5UMzIJCVN1Y2Nlc3NSYXRlOjE2OwkvL2luY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LgorCQlVSU5UMzIJCXdjaWQ6ODsJCS8vd2lyZWxlc3MgY2xpZW50IGluZGV4CisJCVVJTlQzMiAgICAgICAJVHhBY2tSZXF1aXJlZDoxOyAgICAvLyBhY2sgcmVxdWlyZWQKKwkJVUlOVDMyICAgICAgIAlUeEFnZ3JlOjE7ICAgIC8vIFR4IGlzIGFnZ3JlZ2F0ZWQKKwkJVUlOVDMyICAgICAgIAlUeFN1Y2Nlc3M6MTsgICAvLyBUeCBzdWNjZXNzLiB3aGV0aGVyIHN1Y2Nlc3Mgb3Igbm90CisJCVVJTlQzMiAgICAgICAJUGlkVHlwZTo0OworCQlVSU5UMzIgICAgICAgCWJWYWxpZDoxOyAgIC8vIDE6VGhpcyByZWdpc3RlciBjb250YWlucyBhIHZhbGlkIFRYIHJlc3VsdAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0ZJRk9fU1RSVUMsICpQVFhfU1RBX0ZJRk9fU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBQQUNLRUQgX1RYX1NUQV9GSUZPX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgCWJWYWxpZDoxOyAgIC8vIDE6VGhpcyByZWdpc3RlciBjb250YWlucyBhIHZhbGlkIFRYIHJlc3VsdAorCQlVSU5UMzIgICAgICAgCVBpZFR5cGU6NDsKKwkJVUlOVDMyICAgICAgIAlUeFN1Y2Nlc3M6MTsgICAvLyBUeCBObyByZXRyeSBzdWNjZXNzCisJCVVJTlQzMiAgICAgICAJVHhBZ2dyZToxOyAgICAvLyBUeCBSZXRyeSBTdWNjZXNzCisJCVVJTlQzMiAgICAgICAJVHhBY2tSZXF1aXJlZDoxOyAgICAvLyBUeCBmYWlsCisJCVVJTlQzMgkJd2NpZDo4OwkJLy93aXJlbGVzcyBjbGllbnQgaW5kZXgKKy8vCQlVSU5UMzIJCVN1Y2Nlc3NSYXRlOjE2OwkvL2luY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LgorCQlVSU5UMzIJCVN1Y2Nlc3NSYXRlOjEzOwkvL2luY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LgorCQlVSU5UMzIJCVR4QkY6MTsKKwkJVUlOVDMyCQlSZXNlcnZlOjI7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfRklGT19TVFJVQywgKlBUWF9TVEFfRklGT19TVFJVQzsKKyNlbmRpZgorLy8gRGVidWcgY291bnRlcgorI2RlZmluZSBUWF9BR0dfQ05UCTB4MTcxYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnVHhDb3VudDsKKwkgICAgVVNIT1JUICBOb25BZ2dUeENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVF9TVFJVQywgKlBUWF9BR0dfQ05UX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgTm9uQWdnVHhDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dUeENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVF9TVFJVQywgKlBUWF9BR0dfQ05UX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQwCTB4MTcyMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUyQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTFDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQwX1NUUlVDLCAqUFRYX0FHR19DTlQwX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTJDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQwX1NUUlVDLCAqUFRYX0FHR19DTlQwX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQxCTB4MTcyNAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU0Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTNDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQxX1NUUlVDLCAqUFRYX0FHR19DTlQxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUzQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTRDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQxX1NUUlVDLCAqUFRYX0FHR19DTlQxX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0FHR19DTlQyCTB4MTcyOAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU2Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTVDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQyX1NUUlVDLCAqUFRYX0FHR19DTlQyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU1Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTZDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQyX1NUUlVDLCAqUFRYX0FHR19DTlQyX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQzCTB4MTcyYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQzX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU4Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTdDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQzX1NUUlVDLCAqUFRYX0FHR19DTlQzX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQzX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU3Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZThDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQzX1NUUlVDLCAqUFRYX0FHR19DTlQzX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQ0CTB4MTczMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ0X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxMENvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU5Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UNF9TVFJVQywgKlBUWF9BR0dfQ05UNF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplOUNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxMENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDRfU1RSVUMsICpQVFhfQUdHX0NOVDRfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfQUdHX0NOVDUJMHgxNzM0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDVfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTEyQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTExQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UNV9TVFJVQywgKlBUWF9BR0dfQ05UNV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTFDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTJDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ1X1NUUlVDLCAqUFRYX0FHR19DTlQ1X1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0FHR19DTlQ2CQkweDE3MzgKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTRDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTNDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ2X1NUUlVDLCAqUFRYX0FHR19DTlQ2X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ2X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxM0NvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxNENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDZfU1RSVUMsICpQVFhfQUdHX0NOVDZfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfQUdHX0NOVDcJCTB4MTczYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ3X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxNkNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxNUNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDdfU1RSVUMsICpQVFhfQUdHX0NOVDdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTE1Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTE2Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UN19TVFJVQywgKlBUWF9BR0dfQ05UN19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBNUERVX0RFTlNJVFlfQ05UCQkweDE3NDAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NUERVX0RFTl9DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgUlhaZXJvRGVsQ291bnQ7CS8vUlggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50CisJICAgIFVTSE9SVCAgVFhaZXJvRGVsQ291bnQ7CS8vVFggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNUERVX0RFTl9DTlRfU1RSVUMsICpQTVBEVV9ERU5fQ05UX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX01QRFVfREVOX0NOVF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUWFplcm9EZWxDb3VudDsJLy9UWCB6ZXJvIGxlbmd0aCBkZWxpbWl0ZXIgY291bnQKKwkgICAgVVNIT1JUICBSWFplcm9EZWxDb3VudDsJLy9SWCB6ZXJvIGxlbmd0aCBkZWxpbWl0ZXIgY291bnQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1QRFVfREVOX0NOVF9TVFJVQywgKlBNUERVX0RFTl9DTlRfU1RSVUM7CisjZW5kaWYKKy8vCisvLyBUWFJYIGNvbnRyb2wgcmVnaXN0ZXJzIC0gYmFzZSBhZGRyZXNzIDB4MzAwMAorLy8KKy8vIHJ0Mjg2MGIgIFVOS05PV04gcmVnIHVzZSBSL08gUmVnIEFkZHIgMHg3N2QwIGZpcnN0Li4KKyNkZWZpbmUgVFhSWF9DU1IxICAgICAgICAgICAweDc3ZDAKKworLy8KKy8vIFNlY3VyaXR5IGtleSB0YWJsZSBtZW1vcnksIGJhc2UgYWRkcmVzcyA9IDB4MTAwMAorLy8KKyNkZWZpbmUgTUFDX1dDSURfQkFTRQkJMHgxODAwIC8vOC1ieXRlcyh1c2Ugb25seSA2LWJ5dGVzKSAqIDI1NiBlbnRyeSA9CisjZGVmaW5lIEhXX1dDSURfRU5UUllfU0laRSAgIDgKKyNkZWZpbmUgUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgICAgIDB4NDAwMCAgICAgIC8vIDMyLWJ5dGUgKiAyNTYtZW50cnkgPSAgLWJ5dGUKKyNkZWZpbmUgSFdfS0VZX0VOVFJZX1NJWkUgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUEFJUldJU0VfSVZFSVZfVEFCTEVfQkFTRSAgICAgMHg2MDAwICAgICAgLy8gOC1ieXRlICogMjU2LWVudHJ5ID0gIC1ieXRlCisjZGVmaW5lIE1BQ19JVkVJVl9UQUJMRV9CQVNFICAgICAweDYwMDAgICAgICAvLyA4LWJ5dGUgKiAyNTYtZW50cnkgPSAgLWJ5dGUKKyNkZWZpbmUgSFdfSVZFSVZfRU5UUllfU0laRSAgIDgKKyNkZWZpbmUgTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgICAgIDB4NjgwMCAgICAgIC8vIDQtYnl0ZSAqIDI1Ni1lbnRyeSA9ICAtYnl0ZQorI2RlZmluZSBIV19XQ0lEX0FUVFJJX1NJWkUgICA0CisjZGVmaW5lIFdDSURfUkVTRVJWRUQgICAgICAgICAgCQkweDZiZmMKKyNkZWZpbmUgU0hBUkVEX0tFWV9UQUJMRV9CQVNFICAgICAgIDB4NmMwMCAgICAgIC8vIDMyLWJ5dGUgKiAxNi1lbnRyeSA9IDUxMi1ieXRlCisjZGVmaW5lIFNIQVJFRF9LRVlfTU9ERV9CQVNFICAgICAgIDB4NzAwMCAgICAgIC8vIDMyLWJ5dGUgKiAxNi1lbnRyeSA9IDUxMi1ieXRlCisjZGVmaW5lIEhXX1NIQVJFRF9LRVlfTU9ERV9TSVpFICAgNAorI2RlZmluZSBTSEFSRURLRVlUQUJMRQkJCTAKKyNkZWZpbmUgUEFJUldJU0VLRVlUQUJMRQkJCTEKKworCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfU0hBUkVES0VZX01PREVfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkwQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkwQ2lwaGVyQWxnOjM7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlTSEFSRURLRVlfTU9ERV9TVFJVQywgKlBTSEFSRURLRVlfTU9ERV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9TSEFSRURLRVlfTU9ERV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkwQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkwQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVNIQVJFREtFWV9NT0RFX1NUUlVDLCAqUFNIQVJFREtFWV9NT0RFX1NUUlVDOworI2VuZGlmCisvLyA2NC1lbnRyeSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit0eXBlZGVmIHN0cnVjdCBfSFdfV0NJRF9FTlRSWSB7ICAvLyA4LWJ5dGUgcGVyIGVudHJ5CisgICAgVUNIQVIgICBBZGRyZXNzWzZdOworICAgIFVDSEFSICAgUnN2WzJdOworfSBIV19XQ0lEX0VOVFJZLCBQSFdfV0NJRF9FTlRSWTsKKworCisKKy8vCisvLyBPdGhlciBvbi1jaGlwIHNoYXJlZCBtZW1vcnkgc3BhY2UsIGJhc2UgPSAweDIwMDAKKy8vCisKKy8vIENJUyBzcGFjZSAtIGJhc2UgYWRkcmVzcyA9IDB4MjAwMAorI2RlZmluZSBIV19DSVNfQkFTRSAgICAgICAgICAgICAweDIwMDAKKworLy8gQ2Fycmllci1zZW5zZSBDVFMgZnJhbWUgYmFzZSBhZGRyZXNzLiBJdCdzIHdoZXJlIG1hYyBzdG9yZXMgY2Fycmllci1zZW5zZSBmcmFtZSBmb3IgY2Fycmllci1zZW5zZSBmdW5jdGlvbi4KKyNkZWZpbmUgSFdfQ1NfQ1RTX0JBU0UJCQkweDc3MDAKKy8vIERGUyBDVFMgZnJhbWUgYmFzZSBhZGRyZXNzLiBJdCdzIHdoZXJlIG1hYyBzdG9yZXMgQ1RTIGZyYW1lIGZvciBERlMuCisjZGVmaW5lIEhXX0RGU19DVFNfQkFTRQkJCTB4Nzc4MAorI2RlZmluZSBIV19DVFNfRlJBTUVfU0laRQkJMHg4MAorCisvLyAyMDA0LTExLTA4IGpvaG4gLSBzaW5jZSBOVUxMIGZyYW1lIHdvbid0IGJlIHRoYXQgbG9uZyAoMjU2IGJ5dGUpLiBXZSBzdGVhbCAxNiB0YWlsIGJ5dGVzCisvLyB0byBzYXZlIGRlYnVnZ2luZyBzZXR0aW5ncworI2RlZmluZSBIV19ERUJVR19TRVRUSU5HX0JBU0UgICAweDc3ZjAgIC8vIDB4NzdmMH4weDc3ZmYgdG90YWwgMTYgYnl0ZXMKKyNkZWZpbmUgSFdfREVCVUdfU0VUVElOR19CQVNFMiAgIDB4Nzc3MCAgLy8gMHg3N2YwfjB4NzdmZiB0b3RhbCAxNiBieXRlcworCisvLyBJbiBvcmRlciB0byBzdXBwb3J0IG1heGltdW0gOCBNQlNTIGFuZCBpdHMgbWF4aW11bSBsZW5ndGggaXMgNTEyIGZvciBlYWNoIGJlYWNvbgorLy8gVGhyZWUgc2VjdGlvbiBkaXNjb250aW51ZSBtZW1vcnkgc2VnbWVudHMgd2lsbCBiZSB1c2VkLgorLy8gMS4gVGhlIG9yaWdpbmFsIHJlZ2lvbiBmb3IgQkNOIDB+MworLy8gMi4gRXh0cmFjdCBtZW1vcnkgZnJvbSBGQ0UgdGFibGUgZm9yIEJDTiA0fjUKKy8vIDMuIEV4dHJhY3QgbWVtb3J5IGZyb20gUGFpci13aXNlIGtleSB0YWJsZSBmb3IgQkNOIDZ+NworLy8JICBJdCBvY2N1cGllZCB0aG9zZSBtZW1vcnkgb2Ygd2NpZCAyMzh+MjUzIGZvciBCQ04gNgorLy8JCQkJCQkgICAgICBhbmQgd2NpZCAyMjJ+MjM3IGZvciBCQ04gNworI2RlZmluZSBIV19CRUFDT05fTUFYX1NJWkUgICAgICAweDEwMDAgLyogdW5pdDogYnl0ZSAqLworI2RlZmluZSBIV19CRUFDT05fQkFTRTAgICAgICAgICAweDc4MDAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0UxICAgICAgICAgMHg3QTAwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFMiAgICAgICAgIDB4N0MwMAorI2RlZmluZSBIV19CRUFDT05fQkFTRTMgICAgICAgICAweDdFMDAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0U0ICAgICAgICAgMHg3MjAwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFNSAgICAgICAgIDB4NzQwMAorI2RlZmluZSBIV19CRUFDT05fQkFTRTYgICAgICAgICAweDVEQzAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0U3ICAgICAgICAgMHg1QkMwCisKKyNkZWZpbmUgSFdfQkVBQ09OX01BWF9DT1VOVCAgICAgOAorI2RlZmluZSBIV19CRUFDT05fT0ZGU0VUCQkweDAyMDAKKyNkZWZpbmUgSFdfQkVBQ09OX0NPTlRFTlRfTEVOCShIV19CRUFDT05fT0ZGU0VUIC0gVFhXSV9TSVpFKQorCisvLyBIT1NULU1DVSBzaGFyZWQgbWVtb3J5IC0gYmFzZSBhZGRyZXNzID0gMHgyMTAwCisjZGVmaW5lIEhPU1RfQ01EX0NTUgkJMHg0MDQKKyNkZWZpbmUgSDJNX01BSUxCT1hfQ1NSICAgICAgICAgMHg3MDEwCisjZGVmaW5lIEgyTV9NQUlMQk9YX0NJRCAgICAgICAgIDB4NzAxNAorI2RlZmluZSBIMk1fTUFJTEJPWF9TVEFUVVMgICAgICAweDcwMWMKKyNkZWZpbmUgSDJNX0lOVF9TUkMgICAgICAgICAgICAgMHg3MDI0CisjZGVmaW5lIEgyTV9CQlBfQUdFTlQgICAgICAgICAgIDB4NzAyOAorI2RlZmluZSBNMkhfQ01EX0RPTkVfQ1NSICAgICAgICAweDAwMGMKKyNkZWZpbmUgTUNVX1RYT1BfQVJSQVlfQkFTRSAgICAgMHgwMDBjICAgLy8gVE9ETzogdG8gYmUgcHJvdmlkZWQgYnkgQWxiZXJ0CisjZGVmaW5lIE1DVV9UWE9QX0VOVFJZX1NJWkUgICAgIDMyICAgICAgIC8vIFRPRE86IHRvIGJlIHByb3ZpZGVkIGJ5IEFsYmVydAorI2RlZmluZSBNQVhfTlVNX09GX1RYT1BfRU5UUlkgICAxNiAgICAgICAvLyBUT0RPOiBtdXN0IGJlIHNhbWUgd2l0aCA4MDUxIGZpcm13YXJlCisjZGVmaW5lIE1DVV9NQk9YX1ZFUlNJT04gICAgICAgIDB4MDEgICAgIC8vIFRPRE86IHRvIGJlIGNvbmZpcm1lZCBieSBBbGJlcnQKKyNkZWZpbmUgTUNVX01CT1hfVkVSU0lPTl9PRkZTRVQgNSAgICAgICAgLy8gVE9ETzogdG8gYmUgcHJvdmlkZWQgYnkgQWxiZXJ0CisKKy8vCisvLyBIb3N0IERNQSByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgyMDAgLiAgVFgwLTM9RURDQVFpZDAtMywgVFg0PUhDQ0EsIFRYNT1NR01ULAorLy8KKy8vCisvLyAgRE1BIFJJTkcgREVTQ1JJUFRPUgorLy8KKyNkZWZpbmUgRTJQUk9NX0NTUiAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgSU9fQ05UTF9DU1IgICAgICAgICAweDc3ZDAKKworI2lmZGVmIFJUMjg3MAorLy8gODA1MSBmaXJtd2FyZSBpbWFnZSBmb3IgdXNiIC0gdXNlIGxhc3QtaGFsZiBiYXNlIGFkZHJlc3MgPSAweDMwMDAKKyNkZWZpbmUgRklSTVdBUkVfSU1BR0VfQkFTRSAgICAgMHgzMDAwCisjZGVmaW5lIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFIDB4MTAwMCAgICAvLyA0a2J5dGUKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworLy8gVE9ETzogPz8/Pz8gb2xkIFJUMjU2MCByZWdpc3RlcnMuIHRvIGtlZXAgdGhlbSBvciByZW1vdmUgdGhlbT8KKy8vI2RlZmluZSBNQ0FTVDAgICAgICAgICAgICAgICAgICAweDAxNzggIC8vIG11bHRpY2FzdCBmaWx0ZXIgcmVnaXN0ZXIgMAorLy8jZGVmaW5lIE1DQVNUMSAgICAgICAgICAgICAgICAgIDB4MDE3YyAgLy8gbXVsdGljYXN0IGZpbHRlciByZWdpc3RlciAxCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVHggLwlSeCAvIE1nbXQgcmluZyBkZXNjcmlwdG9yIGRlZmluaXRpb24KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gdGhlIGZvbGxvd2luZyBQSUQgdmFsdWVzIGFyZSB1c2VkIHRvIG1hcmsgb3V0Z29pbmcgZnJhbWUgdHlwZSBpbiBUWEQtPlBJRCBzbyB0aGF0CisvLyBwcm9wZXIgVFggc3RhdGlzdGljcyBjYW4gYmUgY29sbGVjdGVkIGJhc2VkIG9uIHRoZXNlIGNhdGVnb3JpZXMKKy8vIGIzLTIgb2YgUElEIGZpZWxkIC0KKyNkZWZpbmUgUElEX01HTVQJCQkweDA1CisjZGVmaW5lIFBJRF9CRUFDT04JCQkweDBjCisjZGVmaW5lIFBJRF9EQVRBX05PUk1BTFVDQVNUCSAJMHgwMgorI2RlZmluZSBQSURfREFUQV9BTVBEVQkgCTB4MDQKKyNkZWZpbmUgUElEX0RBVEFfTk9fQUNLICAgIAkweDA4CisjZGVmaW5lIFBJRF9EQVRBX05PVF9OT1JNX0FDSwkgCTB4MDMKKy8vIHZhbHVlIGRvbWFpbiBvZiBwVHhELT5Ib3N0UUlkICg0LWJpdDogMH4xNSkKKyNkZWZpbmUgUUlEX0FDX0JLICAgICAgICAgICAgICAgMSAgIC8vIG1lZXQgQUNJIGRlZmluaXRpb24gaW4gODAyLjExZQorI2RlZmluZSBRSURfQUNfQkUgICAgICAgICAgICAgICAwICAgLy8gbWVldCBBQ0kgZGVmaW5pdGlvbiBpbiA4MDIuMTFlCisjZGVmaW5lIFFJRF9BQ19WSSAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUUlEX0FDX1ZPICAgICAgICAgICAgICAgMworI2RlZmluZSBRSURfSENDQSAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE5VTV9PRl9UWF9SSU5HICAgICAgICAgIDUKKyNkZWZpbmUgUUlEX01HTVQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUUlEX1JYICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgUUlEX09USEVSICAgICAgICAgICAgICAgMTUKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJCUCAmIFJGCWRlZmluaXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZQlCVVNZCQkgICAgICAgICAgICAgICAgMQorI2RlZmluZQlJRExFCQkgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lCVJGX1IwMAkJCQkJICAgIDAKKyNkZWZpbmUJUkZfUjAxCQkJCQkgICAgMQorI2RlZmluZQlSRl9SMDIJCQkJCSAgICAyCisjZGVmaW5lCVJGX1IwMwkJCQkJICAgIDMKKyNkZWZpbmUJUkZfUjA0CQkJCQkgICAgNAorI2RlZmluZQlSRl9SMDUJCQkJCSAgICA1CisjZGVmaW5lCVJGX1IwNgkJCQkJICAgIDYKKyNkZWZpbmUJUkZfUjA3CQkJCQkgICAgNworI2RlZmluZQlSRl9SMDgJCQkJCSAgICA4CisjZGVmaW5lCVJGX1IwOQkJCQkJICAgIDkKKyNkZWZpbmUJUkZfUjEwCQkJCQkgICAgMTAKKyNkZWZpbmUJUkZfUjExCQkJCQkgICAgMTEKKyNkZWZpbmUJUkZfUjEyCQkJCQkgICAgMTIKKyNkZWZpbmUJUkZfUjEzCQkJCQkgICAgMTMKKyNkZWZpbmUJUkZfUjE0CQkJCQkgICAgMTQKKyNkZWZpbmUJUkZfUjE1CQkJCQkgICAgMTUKKyNkZWZpbmUJUkZfUjE2CQkJCQkgICAgMTYKKyNkZWZpbmUJUkZfUjE3CQkJCQkgICAgMTcKKyNkZWZpbmUJUkZfUjE4CQkJCQkgICAgMTgKKyNkZWZpbmUJUkZfUjE5CQkJCQkgICAgMTkKKyNkZWZpbmUJUkZfUjIwCQkJCQkgICAgMjAKKyNkZWZpbmUJUkZfUjIxCQkJCQkgICAgMjEKKyNkZWZpbmUJUkZfUjIyCQkJCQkgICAgMjIKKyNkZWZpbmUJUkZfUjIzCQkJCQkgICAgMjMKKyNkZWZpbmUJUkZfUjI0CQkJCQkgICAgMjQKKyNkZWZpbmUJUkZfUjI1CQkJCQkgICAgMjUKKyNkZWZpbmUJUkZfUjI2CQkJCQkgICAgMjYKKyNkZWZpbmUJUkZfUjI3CQkJCQkgICAgMjcKKyNkZWZpbmUJUkZfUjI4CQkJCQkgICAgMjgKKyNkZWZpbmUJUkZfUjI5CQkJCQkgICAgMjkKKyNkZWZpbmUJUkZfUjMwCQkJCQkgICAgMzAKKyNkZWZpbmUJUkZfUjMxCQkJCQkgICAgMzEKKworI2RlZmluZQlCQlBfUjAJCQkJCSAgICAwICAvLyB2ZXJzaW9uCisjZGVmaW5lCUJCUF9SMQkJCQkgICAgICAgIDEgIC8vIFRTU0kKKyNkZWZpbmUJQkJQX1IyICAgICAgICAgIAkJCTIgIC8vIFRYIGNvbmZpZ3VyZQorI2RlZmluZSBCQlBfUjMgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBCQlBfUjQgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBCQlBfUjUgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBCQlBfUjYgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZQlCQlBfUjE0CQkJICAgICAgICAgICAgMTQgLy8gUlggY29uZmlndXJlCisjZGVmaW5lIEJCUF9SMTYgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBCQlBfUjE3ICAgICAgICAgICAgICAgICAgICAgMTcgLy8gUlggc2Vuc2liaWxpdHkKKyNkZWZpbmUgQkJQX1IxOCAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEJCUF9SMjEgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBCQlBfUjIyICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQkJQX1IyNCAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEJCUF9SMjUgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBCQlBfUjMxICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQkJQX1I0OSAgICAgICAgICAgICAgICAgICAgIDQ5IC8vVFNTSQorI2RlZmluZSBCQlBfUjUwICAgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgQkJQX1I1MSAgICAgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIEJCUF9SNTIgICAgICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBCQlBfUjU1ICAgICAgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgQkJQX1I2MiAgICAgICAgICAgICAgICAgICAgIDYyIC8vIFJ4IFNRMCBUaHJlc2hvbGQgSElHSAorI2RlZmluZSBCQlBfUjYzICAgICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgQkJQX1I2NCAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEJCUF9SNjUgICAgICAgICAgICAgICAgICAgICA2NQorI2RlZmluZSBCQlBfUjY2ICAgICAgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgQkJQX1I2NyAgICAgICAgICAgICAgICAgICAgIDY3CisjZGVmaW5lIEJCUF9SNjggICAgICAgICAgICAgICAgICAgICA2OAorI2RlZmluZSBCQlBfUjY5ICAgICAgICAgICAgICAgICAgICAgNjkKKyNkZWZpbmUgQkJQX1I3MCAgICAgICAgICAgICAgICAgICAgIDcwIC8vIFJ4IEFHQyBTUSBDQ0sgWGNvcnIgdGhyZXNob2xkCisjZGVmaW5lIEJCUF9SNzMgICAgICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBCQlBfUjc1CQkJCQkJNzUKKyNkZWZpbmUgQkJQX1I3NyAgICAgICAgICAgICAgICAgICAgIDc3CisjZGVmaW5lIEJCUF9SNzkgICAgICAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBCQlBfUjgwICAgICAgICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgQkJQX1I4MSAgICAgICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIEJCUF9SODIgICAgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBCQlBfUjgzICAgICAgICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgQkJQX1I4NCAgICAgICAgICAgICAgICAgICAgIDg0CisjZGVmaW5lIEJCUF9SODYJCQkJCQk4NgorI2RlZmluZSBCQlBfUjkxCQkJCQkJOTEKKyNkZWZpbmUgQkJQX1I5MgkJCQkJCTkyCisjZGVmaW5lIEJCUF9SOTQgICAgICAgICAgICAgICAgICAgICA5NCAvLyBUeCBHYWluIENvbnRyb2wKKyNkZWZpbmUgQkJQX1IxMDMgICAgICAgICAgICAgICAgICAgIDEwMworI2RlZmluZSBCQlBfUjEwNSAgICAgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIEJCUF9SMTEzICAgICAgICAgICAgICAgICAgICAxMTMKKyNkZWZpbmUgQkJQX1IxMTQgICAgICAgICAgICAgICAgICAgIDExNAorI2RlZmluZSBCQlBfUjExNSAgICAgICAgICAgICAgICAgICAgMTE1CisjZGVmaW5lIEJCUF9SMTE2ICAgICAgICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgQkJQX1IxMTcgICAgICAgICAgICAgICAgICAgIDExNworI2RlZmluZSBCQlBfUjExOCAgICAgICAgICAgICAgICAgICAgMTE4CisjZGVmaW5lIEJCUF9SMTE5ICAgICAgICAgICAgICAgICAgICAxMTkKKyNkZWZpbmUgQkJQX1IxMjAgICAgICAgICAgICAgICAgICAgIDEyMAorI2RlZmluZSBCQlBfUjEyMSAgICAgICAgICAgICAgICAgICAgMTIxCisjZGVmaW5lIEJCUF9SMTIyICAgICAgICAgICAgICAgICAgICAxMjIKKyNkZWZpbmUgQkJQX1IxMjMgICAgICAgICAgICAgICAgICAgIDEyMworI2lmZGVmIFJUMzB4eAorI2RlZmluZSBCQlBfUjEzOCAgICAgICAgICAgICAgICAgICAgMTM4IC8vIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbAorI2VuZGlmIC8vIFJUMzB4eCAvLworCisKKyNkZWZpbmUgQkJQUjk0X0RFRkFVTFQgICAgICAgICAgICAgIDB4MDYgLy8gQWRkIDEgdmFsdWUgd2lsbCBnYWluIDFkYgorCisvLyNkZWZpbmUgUEhZX1RSX1NXSVRDSF9USU1FICAgICAgICAgIDUgIC8vIHVzZWMKKworLy8jZGVmaW5lIEJCUF9SMTdfTE9XX1NFTlNJQklMSVRZICAgICAweDUwCisvLyNkZWZpbmUgQkJQX1IxN19NSURfU0VOU0lCSUxJVFkgICAgIDB4NDEKKy8vI2RlZmluZSBCQlBfUjE3X0RZTkFNSUNfVVBfQk9VTkQgICAgMHg0MAorI2RlZmluZSBSU1NJX0ZPUl9WRVJZX0xPV19TRU5TSUJJTElUWSAtMzUKKyNkZWZpbmUgUlNTSV9GT1JfTE9XX1NFTlNJQklMSVRZICAgICAgLTU4CisjZGVmaW5lIFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkgIC04MAorI2RlZmluZSBSU1NJX0ZPUl9NSURfU0VOU0lCSUxJVFkgICAgICAtOTAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFRVBST00gZGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIEVFRE8gICAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEVFREkgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEVFQ1MgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEVFU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEVFUkwgICAgICAgICAgICAgICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgRUVQUk9NX1dSSVRFX09QQ09ERSAgICAgICAgIDB4MDUKKyNkZWZpbmUgRUVQUk9NX1JFQURfT1BDT0RFICAgICAgICAgIDB4MDYKKyNkZWZpbmUgRUVQUk9NX0VXRFNfT1BDT0RFICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRUVQUk9NX0VXRU5fT1BDT0RFICAgICAgICAgIDB4MTMKKworI2RlZmluZQlOVU1fRUVQUk9NX0JCUF9QQVJNUwkJMTkJCQkvLyBJbmNsdWRlIE5JQyBDb25maWcgMCwgMSwgQ1IsIFRYIEFMQyBzdGVwLCBCQlBzCisjZGVmaW5lCU5VTV9FRVBST01fVFhfR19QQVJNUwkJNworI2RlZmluZQlFRVBST01fTklDMV9PRkZTRVQgICAgICAgICAgMHgzNAkJLy8gVGhlIGFkZHJlc3MgaXMgZnJvbSBOSUMgY29uZmlnIDAsIG5vdCBCQlAgcmVnaXN0ZXIgSUQKKyNkZWZpbmUJRUVQUk9NX05JQzJfT0ZGU0VUICAgICAgICAgIDB4MzYJCS8vIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElECisjZGVmaW5lCUVFUFJPTV9CQlBfQkFTRV9PRkZTRVQJCTB4ZjAJCS8vIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElECisjZGVmaW5lCUVFUFJPTV9HX1RYX1BXUl9PRkZTRVQJCTB4NTIKKyNkZWZpbmUJRUVQUk9NX0dfVFgyX1BXUl9PRkZTRVQJCTB4NjAKKyNkZWZpbmUgRUVQUk9NX0xFRDFfT0ZGU0VUCQkJMHgzYworI2RlZmluZSBFRVBST01fTEVEMl9PRkZTRVQJCQkweDNlCisjZGVmaW5lIEVFUFJPTV9MRUQzX09GRlNFVAkJCTB4NDAKKyNkZWZpbmUgRUVQUk9NX0xOQV9PRkZTRVQJCQkweDQ0CisjZGVmaW5lIEVFUFJPTV9SU1NJX0JHX09GRlNFVAkJMHg0NgorI2RlZmluZSBFRVBST01fUlNTSV9BX09GRlNFVAkJMHg0YQorI2RlZmluZSBFRVBST01fREVGSU5FX01BWF9UWFBXUgkJMHg0ZQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfMjBNSFpfMl80RwkweGRlCS8vIDIwTUhaIDIuNEcgdHggcG93ZXIuCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl8yXzRHCTB4ZWUJLy8gNDBNSFogMi40RyB0eCBwb3dlci4KKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzVHCQkweGZhCS8vIDIwTUhaIDVHIHR4IHBvd2VyLgorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcJCTB4MTBhCS8vIDQwTUhaIDVHIHR4IHBvd2VyLgorI2RlZmluZSBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICAgICAgMHg3OAorI2RlZmluZSBFRVBST01fQV9UWDJfUFdSX09GRlNFVCAgICAgIDB4YTYKKy8vI2RlZmluZSBFRVBST01fSmFwYW5fVFhfUFdSX09GRlNFVCAgICAgIDB4OTAgLy8gODAyLjExagorLy8jZGVmaW5lIEVFUFJPTV9KYXBhbl9UWDJfUFdSX09GRlNFVCAgICAgIDB4YmUKKy8vI2RlZmluZSBFRVBST01fVFNTSV9SRUZfT0ZGU0VUCTB4NTQKKy8vI2RlZmluZSBFRVBST01fVFNTSV9ERUxUQV9PRkZTRVQJMHgyNAorLy8jZGVmaW5lIEVFUFJPTV9DQ0tfVFhfUFdSX09GRlNFVCAgMHg2MgorLy8jZGVmaW5lIEVFUFJPTV9DQUxJQlJBVEVfT0ZGU0VUCTB4N2MKKyNkZWZpbmUgRUVQUk9NX1ZFUlNJT05fT0ZGU0VUICAgICAgIDB4MDIKKyNkZWZpbmUJRUVQUk9NX0ZSRVFfT0ZGU0VUCQkJMHgzYQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEUgCTB4ZGUJLy8gMjBNSFogcG93ZXIuCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0RFTFRBCQkweDUwCS8vIDIwTUhaIEFORCA0MCBNSFogdXNlIGRpZmZlcmVudCBwb3dlci4gVGhpcyBpcyBkZWx0YSBpbiA0ME1IWi4KKyNkZWZpbmUgVkFMSURfRUVQUk9NX1ZFUlNJT04gICAgICAgIDEKKworLy8gUGFpcktleU1vZGUgZGVmaW5pdGlvbgorI2RlZmluZSBQS01PREVfTk9ORSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQS01PREVfV0VQNjQgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQS01PREVfV0VQMTI4ICAgICAgICAgICAgICAgMgorI2RlZmluZSBQS01PREVfVEtJUCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQS01PREVfQUVTICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBQS01PREVfQ0tJUDY0ICAgICAgICAgICAgICAgNQorI2RlZmluZSBQS01PREVfQ0tJUDEyOCAgICAgICAgICAgICAgNgorI2RlZmluZSBQS01PREVfVEtJUF9OT19NSUMgICAgICAgICAgNyAgICAgICAvLyBNSUMgYXBwZW5kZWQgYnkgZHJpdmVyOiBub3QgYSB2YWxpZCB2YWx1ZSBpbiBoYXJkd2FyZSBrZXkgdGFibGUKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBXQ0lEICBmb3JtYXQKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy83LjEJV0NJRCAgRU5UUlkgIGZvcm1hdCAgOiA4Ynl0ZXMKK3R5cGVkZWYJc3RydWN0CV9XQ0lEX0VOVFJZX1NUUlVDIHsKKwlVQ0hBUgkJUlhCQUJpdG1hcDc7ICAgIC8vIGJpdDAgZm9yIFRJRDgsIGJpdDcgZm9yIFRJRCAxNQorCVVDSEFSCQlSWEJBQml0bWFwMDsgICAgLy8gYml0MCBmb3IgVElEMCwgYml0NyBmb3IgVElEIDcKKwlVQ0hBUgkJTUFDWzZdOwkvLyAwIGZvciBzaGFyZWQga2V5IHRhYmxlLiAgMSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit9CVdDSURfRU5UUllfU1RSVUMsICpQV0NJRF9FTlRSWV9TVFJVQzsKKworLy84LjEuMQlTRUNVUklUWSAgS0VZICBmb3JtYXQgIDogOERXCisvLyAzMi1ieXRlIHBlciBlbnRyeSwgdG90YWwgMTYtZW50cnkgZm9yIHNoYXJlZCBrZXkgdGFibGUsIDY0LWVudHJ5IGZvciBwYWlyd2lzZSBrZXkgdGFibGUKK3R5cGVkZWYgc3RydWN0IF9IV19LRVlfRU5UUlkgeyAgICAgICAgICAvLyAzMi1ieXRlIHBlciBlbnRyeQorICAgIFVDSEFSICAgS2V5WzE2XTsKKyAgICBVQ0hBUiAgIFR4TWljWzhdOworICAgIFVDSEFSICAgUnhNaWNbOF07Cit9IEhXX0tFWV9FTlRSWSwgKlBIV19LRVlfRU5UUlk7CisKKy8vOC4xLjIJSVYvRUlWICBmb3JtYXQgIDogMkRXCisKKy8vOC4xLjMJUlggYXR0cmlidXRlIGVudHJ5IGZvcm1hdCAgOiAxRFcKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlfTUFDX0FUVFJJQlVURV9TVFJVQyB7CisJVUlOVDMyCQlyc3Y6MjI7CisJVUlOVDMyCQlSWFdJVURGOjM7CisJVUlOVDMyCQlCU1NJRElkeDozOyAvL211bHRpcGxlQlNTIGluZGV4IGZvciB0aGUgV0NJRAorCVVJTlQzMgkJUGFpcktleU1vZGU6MzsKKwlVSU5UMzIJCUtleVRhYjoxOwkvLyAwIGZvciBzaGFyZWQga2V5IHRhYmxlLiAgMSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit9CU1BQ19BVFRSSUJVVEVfU1RSVUMsICpQTUFDX0FUVFJJQlVURV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXN0cnVjdAlfTUFDX0FUVFJJQlVURV9TVFJVQyB7CisJVUlOVDMyCQlLZXlUYWI6MTsJLy8gMCBmb3Igc2hhcmVkIGtleSB0YWJsZS4gIDEgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZQorCVVJTlQzMgkJUGFpcktleU1vZGU6MzsKKwlVSU5UMzIJCUJTU0lESWR4OjM7IC8vbXVsdGlwbGVCU1MgaW5kZXggZm9yIHRoZSBXQ0lECisJVUlOVDMyCQlSWFdJVURGOjM7CisJVUlOVDMyCQlyc3Y6MjI7Cit9CU1BQ19BVFRSSUJVVEVfU1RSVUMsICpQTUFDX0FUVFJJQlVURV9TVFJVQzsKKyNlbmRpZgorCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVFggLyBSWCByaW5nIGRlc2NyaXB0b3IgZm9ybWF0CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gdGhlIGZpcnN0IDI0LWJ5dGUgaW4gVFhEIGlzIGNhbGxlZCBUWElORk8gYW5kIHdpbGwgYmUgRE1BZWQgdG8gTUFDIGJsb2NrIHRocm91Z2ggVFhGSUZPLgorLy8gTUFDIGJsb2NrIHVzZSB0aGlzIFRYSU5GTyB0byBjb250cm9sIHRoZSB0cmFuc21pc3Npb24gYmVoYXZpb3Igb2YgdGhpcyBmcmFtZS4KKyNkZWZpbmUgRklGT19NR01UICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fSENDQSAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGSUZPX0VEQ0EgICAgICAgICAgICAgICAgIDIKKworLy8KKy8vIFRYIGRlc2NyaXB0b3IgZm9ybWF0LCBUeAlyaW5nLCBNZ210IFJpbmcKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9UWERfU1RSVUMgeworCS8vIFdvcmQgMAorCVVJTlQzMgkJU0RQdHIwOworCS8vIFdvcmQgMQorCVVJTlQzMgkJRE1BRE9ORToxOworCVVJTlQzMgkJTGFzdFNlYzA6MTsKKwlVSU5UMzIJCVNETGVuMDoxNDsKKwlVSU5UMzIJCUJ1cnN0OjE7CisJVUlOVDMyCQlMYXN0U2VjMToxOworCVVJTlQzMgkJU0RMZW4xOjE0OworCS8vIFdvcmQgMgorCVVJTlQzMgkJU0RQdHIxOworCS8vIFdvcmQgMworCVVJTlQzMgkJSUNPOjE7CisJVUlOVDMyCQlVQ086MTsKKwlVSU5UMzIJCVRDTzoxOworCVVJTlQzMgkJcnN2OjI7CisJVUlOVDMyCQlRU0VMOjI7CS8vIHNlbGVjdCBvbi1jaGlwIEZJRk8gSUQgZm9yIDJuZC1zdGFnZSBvdXRwdXQgc2NoZWR1bGVyLjA6TUdNVCwgMTpIQ0NBIDI6RURDQQorCVVJTlQzMgkJV0lWOjE7CS8vIFdpcmVsZXNzIEluZm8gVmFsaWQuIDEgaWYgRHJpdmVyIGFscmVhZHkgZmlsbCBXSSwgIG8gaWYgRE1BIG5lZWRzIHRvIGNvcHkgV0kgdG8gY29ycmVjdHBvc2l0aW9uCisJVUlOVDMyCQlyc3YyOjI0OworfQlUWERfU1RSVUMsICpQVFhEX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfVFhEX1NUUlVDIHsKKwkvLyBXb3JkCTAKKwlVSU5UMzIJCVNEUHRyMDsKKwkvLyBXb3JkCTEKKwlVSU5UMzIJCVNETGVuMToxNDsKKwlVSU5UMzIJCUxhc3RTZWMxOjE7CisJVUlOVDMyCQlCdXJzdDoxOworCVVJTlQzMgkJU0RMZW4wOjE0OworCVVJTlQzMgkJTGFzdFNlYzA6MTsKKwlVSU5UMzIJCURNQURPTkU6MTsKKwkvL1dvcmQyCisJVUlOVDMyCQlTRFB0cjE7CisJLy9Xb3JkMworCVVJTlQzMgkJcnN2MjoyNDsKKwlVSU5UMzIJCVdJVjoxOwkvLyBXaXJlbGVzcyBJbmZvIFZhbGlkLiAxIGlmIERyaXZlciBhbHJlYWR5IGZpbGwgV0ksICBvIGlmIERNQSBuZWVkcyB0byBjb3B5IFdJIHRvIGNvcnJlY3Rwb3NpdGlvbgorCVVJTlQzMgkJUVNFTDoyOwkvLyBzZWxlY3Qgb24tY2hpcCBGSUZPIElEIGZvciAybmQtc3RhZ2Ugb3V0cHV0IHNjaGVkdWxlci4wOk1HTVQsIDE6SENDQSAyOkVEQ0EKKwlVSU5UMzIJCXJzdjoyOworCVVJTlQzMgkJVENPOjE7CS8vCisJVUlOVDMyCQlVQ086MTsJLy8KKwlVSU5UMzIJCUlDTzoxOwkvLworfQlUWERfU1RSVUMsICpQVFhEX1NUUlVDOworI2VuZGlmCisKKworLy8KKy8vIFRYRCBXaXJlbGVzcyBJbmZvcm1hdGlvbiBmb3JtYXQgZm9yIFR4IHJpbmcgYW5kIE1nbXQgUmluZworLy8KKy8vdHhvcCA6IGZvciB0eG9wIG1vZGUKKy8vIDA6dHhvcCBmb3IgdGhlIE1QRFUgZnJhbWUgd2lsbCBiZSBoYW5kbGVzIGJ5IEFTSUMgYnkgcmVnaXN0ZXIKKy8vIDEvMi8zOnRoZSBNUERVIGZyYW1lIGlzIHNlbmQgYWZ0ZXIgUElGUy9iYWNrb2ZmL1NJRlMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1RYV0lfU1RSVUMgeworCS8vIFdvcmQgMAorCVVJTlQzMgkJUEhZTU9ERToyOworCVVJTlQzMgkJVHhCRjoxOwkvLyAzKjMKKwlVSU5UMzIJCXJzdjI6MTsKKy8vCVVJTlQzMgkJcnN2MjoyOworCVVJTlQzMgkJSWZzOjE7CS8vCisJVUlOVDMyCQlTVEJDOjI7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVUlOVDMyCQlTaG9ydEdJOjE7CisJVUlOVDMyCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVJTlQzMgkJTUNTOjc7CisKKwlVSU5UMzIJCXJzdjo2OworCVVJTlQzMgkJdHhvcDoyOwkvL3R4IGJhY2sgb2ZmIG1vZGUgMDpIVCBUWE9QIHJ1bGUgLCAxOlBJRlMgVFggLDI6QmFja29mZiwgMzpzaWZzIG9ubHkgd2hlbiBwcmV2aW91cyBmcmFtZSBleGNoYW5nZSBpcyBzdWNjZXNzZnVsLgorCVVJTlQzMgkJTXBkdURlbnNpdHk6MzsKKwlVSU5UMzIJCUFNUERVOjE7CisKKwlVSU5UMzIJCVRTOjE7CisJVUlOVDMyCQlDRkFDSzoxOworCVVJTlQzMgkJTUlNT3BzOjE7CS8vIHRoZSByZW1vdGUgcGVlciBpcyBpbiBkeW5hbWljIE1JTU8tUFMgbW9kZQorCVVJTlQzMgkJRlJBRzoxOwkJLy8gMSB0byBpbmZvcm0gVEtJUCBlbmdpbmUgdGhpcyBpcyBhIGZyYWdtZW50LgorCS8vIFdvcmQgMQorCVVJTlQzMgkJUGFja2V0SWQ6NDsKKwlVSU5UMzIJCU1QRFV0b3RhbEJ5dGVDb3VudDoxMjsKKwlVSU5UMzIJCVdpcmVsZXNzQ2xpSUQ6ODsKKwlVSU5UMzIJCUJBV2luU2l6ZTo2OworCVVJTlQzMgkJTlNFUToxOworCVVJTlQzMgkJQUNLOjE7CisJLy8gV29yZCAyCisJVUlOVDMyCQlJVjsKKwkvLyBXb3JkIDMKKwlVSU5UMzIJCUVJVjsKK30JVFhXSV9TVFJVQywgKlBUWFdJX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfVFhXSV9TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlGUkFHOjE7CQkvLyAxIHRvIGluZm9ybSBUS0lQIGVuZ2luZSB0aGlzIGlzIGEgZnJhZ21lbnQuCisJVUlOVDMyCQlNSU1PcHM6MTsJLy8gdGhlIHJlbW90ZSBwZWVyIGlzIGluIGR5bmFtaWMgTUlNTy1QUyBtb2RlCisJVUlOVDMyCQlDRkFDSzoxOworCVVJTlQzMgkJVFM6MTsKKworCVVJTlQzMgkJQU1QRFU6MTsKKwlVSU5UMzIJCU1wZHVEZW5zaXR5OjM7CisJVUlOVDMyCQl0eG9wOjI7CS8vRk9SICJUSElTIiBmcmFtZS4gMDpIVCBUWE9QIHJ1bGUgLCAxOlBJRlMgVFggLDI6QmFja29mZiwgMzpzaWZzIG9ubHkgd2hlbiBwcmV2aW91cyBmcmFtZSBleGNoYW5nZSBpcyBzdWNjZXNzZnVsLgorCVVJTlQzMgkJcnN2OjY7CisKKwlVSU5UMzIJCU1DUzo3OworCVVJTlQzMgkJQlc6MTsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVSU5UMzIJCVNob3J0R0k6MTsKKwlVSU5UMzIJCVNUQkM6MjsJLy8gMTogU1RCQyBzdXBwb3J0IE1DUyA9MC03LCAgIDIsMyA6IFJFU0VSVkUKKwlVSU5UMzIJCUlmczoxOwkvLworLy8JVUlOVDMyCQlyc3YyOjI7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVUlOVDMyCQlyc3YyOjE7CisJVUlOVDMyCQlUeEJGOjE7CS8vIDMqMworCVVJTlQzMgkJUEhZTU9ERToyOworCS8vIFdvcmQJMQorCVVJTlQzMgkJQUNLOjE7CisJVUlOVDMyCQlOU0VROjE7CisJVUlOVDMyCQlCQVdpblNpemU6NjsKKwlVSU5UMzIJCVdpcmVsZXNzQ2xpSUQ6ODsKKwlVSU5UMzIJCU1QRFV0b3RhbEJ5dGVDb3VudDoxMjsKKwlVSU5UMzIJCVBhY2tldElkOjQ7CisJLy9Xb3JkMgorCVVJTlQzMgkJSVY7CisJLy9Xb3JkMworCVVJTlQzMgkJRUlWOworfQlUWFdJX1NUUlVDLCAqUFRYV0lfU1RSVUM7CisjZW5kaWYKKy8vCisvLyBSeCBkZXNjcmlwdG9yIGZvcm1hdCwgUngJUmluZworLy8KKy8vCisvLyBSWFdJIHdpcmVsZXNzIGluZm9ybWF0aW9uIGZvcm1hdCwgaW4gUEJGLiBpbnZpc2libGUgaW4gZHJpdmVyLgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYV0lfU1RSVUMgeworCS8vIFdvcmQgMAorCVVJTlQzMgkJVElEOjQ7CisJVUlOVDMyCQlNUERVdG90YWxCeXRlQ291bnQ6MTI7CisJVUlOVDMyCQlVREY6MzsKKwlVSU5UMzIJCUJTU0lEOjM7CisJVUlOVDMyCQlLZXlJbmRleDoyOworCVVJTlQzMgkJV2lyZWxlc3NDbGlJRDo4OworCS8vIFdvcmQgMQorCVVJTlQzMgkJUEhZTU9ERToyOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJVUlOVDMyCQlyc3Y6MzsKKwlVSU5UMzIJCVNUQkM6MjsKKwlVSU5UMzIJCVNob3J0R0k6MTsKKwlVSU5UMzIJCUJXOjE7CisJVUlOVDMyCQlNQ1M6NzsKKwlVSU5UMzIJCVNFUVVFTkNFOjEyOworCVVJTlQzMgkJRlJBRzo0OworCS8vIFdvcmQgMgorCVVJTlQzMgkJcnN2MTo4OworCVVJTlQzMgkJUlNTSTI6ODsKKwlVSU5UMzIJCVJTU0kxOjg7CisJVUlOVDMyCQlSU1NJMDo4OworCS8vIFdvcmQgMworCVVJTlQzMgkJcnN2MjoxNjsKKwlVSU5UMzIJCVNOUjE6ODsKKwlVSU5UMzIJCVNOUjA6ODsKK30JUlhXSV9TVFJVQywgKlBSWFdJX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfUlhXSV9TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlXaXJlbGVzc0NsaUlEOjg7CisJVUlOVDMyCQlLZXlJbmRleDoyOworCVVJTlQzMgkJQlNTSUQ6MzsKKwlVSU5UMzIJCVVERjozOworCVVJTlQzMgkJTVBEVXRvdGFsQnl0ZUNvdW50OjEyOworCVVJTlQzMgkJVElEOjQ7CisJLy8gV29yZAkxCisJVUlOVDMyCQlGUkFHOjQ7CisJVUlOVDMyCQlTRVFVRU5DRToxMjsKKwlVSU5UMzIJCU1DUzo3OworCVVJTlQzMgkJQlc6MTsKKwlVSU5UMzIJCVNob3J0R0k6MTsKKwlVSU5UMzIJCVNUQkM6MjsKKwlVSU5UMzIJCXJzdjozOworCVVJTlQzMgkJUEhZTU9ERToyOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJLy9Xb3JkMgorCVVJTlQzMgkJUlNTSTA6ODsKKwlVSU5UMzIJCVJTU0kxOjg7CisJVUlOVDMyCQlSU1NJMjo4OworCVVJTlQzMgkJcnN2MTo4OworCS8vV29yZDMKKwlVSU5UMzIJCVNOUjA6ODsKKwlVSU5UMzIJCVNOUjE6ODsKKwlVSU5UMzIJCXJzdjI6MTY7Cit9CVJYV0lfU1RSVUMsICpQUlhXSV9TVFJVQzsKKyNlbmRpZgorCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSE9TVC1NQ1UgY29tbXVuaWNhdGlvbiBkYXRhIHN0cnVjdHVyZQorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vCisvLyBIMk1fTUFJTEJPWF9DU1I6IEhvc3QtdG8tTUNVIE1haWxib3gKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZiB1bmlvbiAgX0gyTV9NQUlMQk9YX1NUUlVDIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBVSU5UMzIgICAgICAgT3duZXI6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuOjg7ICAgIC8vIDB4ZmYgdGVsbHMgTUNVIG5vdCB0byByZXBvcnQgQ21kRG9uZUludCBhZnRlciBleGN1dGluZyB0aGUgY29tbWFuZAorICAgICAgICBVSU5UMzIgICAgICAgSGlnaEJ5dGU6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIExvd0J5dGU6ODsKKyAgICB9ICAgZmllbGQ7CisgICAgVUlOVDMyICAgICAgICAgICB3b3JkOworfSBIMk1fTUFJTEJPWF9TVFJVQywgKlBIMk1fTUFJTEJPWF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmIHVuaW9uICBfSDJNX01BSUxCT1hfU1RSVUMgeworICAgIHN0cnVjdCB7CisgICAgICAgIFVJTlQzMiAgICAgICBMb3dCeXRlOjg7CisgICAgICAgIFVJTlQzMiAgICAgICBIaWdoQnl0ZTo4OworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW46ODsKKyAgICAgICAgVUlOVDMyICAgICAgIE93bmVyOjg7CisgICAgfSAgIGZpZWxkOworICAgIFVJTlQzMiAgICAgICAgICAgd29yZDsKK30gSDJNX01BSUxCT1hfU1RSVUMsICpQSDJNX01BSUxCT1hfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIE0ySF9DTURfRE9ORV9DU1I6IE1DVS10by1Ib3N0IGNvbW1hbmQgY29tcGxldGUgaW5kaWNhdGlvbgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmIHVuaW9uIF9NMkhfQ01EX0RPTkVfU1RSVUMgeworICAgIHN0cnVjdCAgeworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4zOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4yOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4xOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4wOworICAgIH0gZmllbGQ7CisgICAgVUlOVDMyICAgICAgICAgICB3b3JkOworfSBNMkhfQ01EX0RPTkVfU1RSVUMsICpQTTJIX0NNRF9ET05FX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYgdW5pb24gX00ySF9DTURfRE9ORV9TVFJVQyB7CisgICAgc3RydWN0ICB7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjA7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjE7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjI7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjM7CisgICAgfSBmaWVsZDsKKyAgICBVSU5UMzIgICAgICAgICAgIHdvcmQ7Cit9IE0ySF9DTURfRE9ORV9TVFJVQywgKlBNMkhfQ01EX0RPTkVfU1RSVUM7CisjZW5kaWYKKworCisKKy8vCisvLyBNQ1VfTEVEQ1M6IE1DVSBMRUQgQ29udHJvbCBTZXR0aW5nLgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmIHVuaW9uICBfTUNVX0xFRENTX1NUUlVDIHsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJUG9sYXJpdHk6MTsKKwkJVUNIQVIJCUxlZE1vZGU6NzsKKwl9IGZpZWxkOworCVVDSEFSCQkJCXdvcmQ7Cit9IE1DVV9MRURDU19TVFJVQywgKlBNQ1VfTEVEQ1NfU1RSVUM7CisjZWxzZQordHlwZWRlZiB1bmlvbiAgX01DVV9MRURDU19TVFJVQyB7CisJc3RydWN0CXsKKwkJVUNIQVIJCUxlZE1vZGU6NzsKKwkJVUNIQVIJCVBvbGFyaXR5OjE7CisJfSBmaWVsZDsKKwlVQ0hBUgkJCXdvcmQ7Cit9IE1DVV9MRURDU19TVFJVQywgKlBNQ1VfTEVEQ1NfU1RSVUM7CisjZW5kaWYKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gUmVnaXN0ZXIgZm9ybWF0CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKKy8vTkFWX1RJTUVfQ0ZHIDpOQVYKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9OQVZfVElNRV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVTSE9SVAkJcnN2OjY7CisJCVVTSE9SVAkJWmVyb1NpZnM6MTsgICAgICAgICAgICAgICAvLyBBcHBsaWVkIHplcm8gU0lGUyB0aW1lciBhZnRlciBPRkRNIFJYIDA6IGRpc2FibGUKKwkJVVNIT1JUCQlFaWZzOjk7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVDSEFSICAgICAgIFNsb3RUaW1lOyAgICAvLyBpbiB1bml0IG9mIDEtdXMKKwkJVUNIQVIJCVNpZnM7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlOQVZfVElNRV9DRkdfU1RSVUMsICpQTkFWX1RJTUVfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX05BVl9USU1FX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCVNpZnM7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVDSEFSICAgICAgIFNsb3RUaW1lOyAgICAvLyBpbiB1bml0IG9mIDEtdXMKKwkJVVNIT1JUCQlFaWZzOjk7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVTSE9SVAkJWmVyb1NpZnM6MTsgICAgICAgICAgICAgICAvLyBBcHBsaWVkIHplcm8gU0lGUyB0aW1lciBhZnRlciBPRkRNIFJYIDA6IGRpc2FibGUKKwkJVVNIT1JUCQlyc3Y6NjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU5BVl9USU1FX0NGR19TVFJVQywgKlBOQVZfVElNRV9DRkdfU1RSVUM7CisjZW5kaWYKKworCisKKworCisvLworLy8gUlhfRklMVFJfQ0ZHOiAgL1JYIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglSWF9GSUxUUl9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJOjE1OworCQlVSU5UMzIgICAgICAgRHJvcFJzdkNudGxUeXBlOjE7CisKKyAgICAgICAgCVVJTlQzMiAgICAgICAJRHJvcEJBUjoxOyAgICAgICAvLworCQlVSU5UMzIJCURyb3BCQToxOwkJLy8KKwkJVUlOVDMyCQlEcm9wUHNQb2xsOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wUnRzOjE7CQkvLyBEcm9wIFBzLVBvbGwKKworCQlVSU5UMzIJCURyb3BDdHM6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BBY2s6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BDRkVuZDoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcENGRW5kQWNrOjE7CQkvLyBEcm9wIFBzLVBvbGwKKworCQlVSU5UMzIJCURyb3BEdXBsaWNhdGU6MTsJCS8vIERyb3AgZHVwbGljYXRlIGZyYW1lCisJCVVJTlQzMgkJRHJvcEJjYXN0OjE7CQkvLyBEcm9wIGJyb2FkY2FzdCBmcmFtZXMKKwkJVUlOVDMyCQlEcm9wTWNhc3Q6MTsJCS8vIERyb3AgbXVsdGljYXN0IGZyYW1lcworCQlVSU5UMzIJCURyb3BWZXJFcnI6MTsJICAgIC8vIERyb3AgdmVyc2lvbiBlcnJvciBmcmFtZQorCisJCVVJTlQzMgkJRHJvcE5vdE15QlNTSUQ6MTsJCQkvLyBEcm9wIGZyYW0gVG9EcyBiaXQgaXMgdHJ1ZQorCQlVSU5UMzIJCURyb3BOb3RUb01lOjE7CQkvLyBEcm9wIG5vdCB0byBtZSB1bmljYXN0IGZyYW1lCisJCVVJTlQzMgkJRHJvcFBoeUVycjoxOwkJLy8gRHJvcCBwaHlzaWNhbCBlcnJvcgorCQlVSU5UMzIJCURyb3BDUkNFcnI6MTsJCS8vIERyb3AgQ1JDIGVycm9yCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9GSUxUUl9DRkdfU1RSVUMsICpQUlhfRklMVFJfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JYX0ZJTFRSX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlEcm9wQ1JDRXJyOjE7CQkvLyBEcm9wIENSQyBlcnJvcgorCQlVSU5UMzIJCURyb3BQaHlFcnI6MTsJCS8vIERyb3AgcGh5c2ljYWwgZXJyb3IKKwkJVUlOVDMyCQlEcm9wTm90VG9NZToxOwkJLy8gRHJvcCBub3QgdG8gbWUgdW5pY2FzdCBmcmFtZQorCQlVSU5UMzIJCURyb3BOb3RNeUJTU0lEOjE7CQkJLy8gRHJvcCBmcmFtIFRvRHMgYml0IGlzIHRydWUKKworCQlVSU5UMzIJCURyb3BWZXJFcnI6MTsJICAgIC8vIERyb3AgdmVyc2lvbiBlcnJvciBmcmFtZQorCQlVSU5UMzIJCURyb3BNY2FzdDoxOwkJLy8gRHJvcCBtdWx0aWNhc3QgZnJhbWVzCisJCVVJTlQzMgkJRHJvcEJjYXN0OjE7CQkvLyBEcm9wIGJyb2FkY2FzdCBmcmFtZXMKKwkJVUlOVDMyCQlEcm9wRHVwbGljYXRlOjE7CQkvLyBEcm9wIGR1cGxpY2F0ZSBmcmFtZQorCisJCVVJTlQzMgkJRHJvcENGRW5kQWNrOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wQ0ZFbmQ6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BBY2s6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BDdHM6MTsJCS8vIERyb3AgUHMtUG9sbAorCisJCVVJTlQzMgkJRHJvcFJ0czoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcFBzUG9sbDoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcEJBOjE7CQkvLworICAgICAgICAJVUlOVDMyICAgICAgIAlEcm9wQkFSOjE7ICAgICAgIC8vCisKKwkJVUlOVDMyICAgICAgIAlEcm9wUnN2Q250bFR5cGU6MTsKKwkJVUlOVDMyCQk6MTU7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9GSUxUUl9DRkdfU1RSVUMsICpQUlhfRklMVFJfQ0ZHX1NUUlVDOworI2VuZGlmCisKKworCisKKy8vCisvLyBQSFlfQ1NSNDogUkYgc2VyaWFsIGNvbnRyb2wgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUEhZX0NTUjRfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJQnVzeToxOwkJCQkvLyAxOiBBU0lDIGlzIGJ1c3kgZXhlY3V0ZSBSRiBwcm9ncmFtbWluZy4KKwkJVUlOVDMyCQlQTExfTEQ6MTsJCQkvLyBSRiBQTExfTEQgc3RhdHVzCisJCVVJTlQzMgkJSUZTZWxlY3Q6MTsJCQkvLyAxOiBzZWxlY3QgSUYJdG8gcHJvZ3JhbSwJMDogc2VsZWN0IFJGIHRvCXByb2dyYW0KKwkJVUlOVDMyCQlOdW1iZXJPZkJpdHM6NTsJCS8vIE51bWJlciBvZiBiaXRzIHVzZWQgaW4gUkZSZWdWYWx1ZSAoSToyMCwJUkZNRDoyMikKKwkJVUlOVDMyCQlSRlJlZ1ZhbHVlOjI0OwkJLy8gUmVnaXN0ZXIJdmFsdWUgKGluY2x1ZGUgcmVnaXN0ZXIJaWQpCXNlcmlhbCBvdXQgdG8gUkYvSUYJY2hpcC4KKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVBIWV9DU1I0X1NUUlVDLCAqUFBIWV9DU1I0X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1BIWV9DU1I0X1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJGUmVnVmFsdWU6MjQ7CQkvLyBSZWdpc3Rlcgl2YWx1ZSAoaW5jbHVkZSByZWdpc3RlcglpZCkJc2VyaWFsIG91dCB0byBSRi9JRgljaGlwLgorCQlVSU5UMzIJCU51bWJlck9mQml0czo1OwkJLy8gTnVtYmVyIG9mIGJpdHMgdXNlZCBpbiBSRlJlZ1ZhbHVlIChJOjIwLAlSRk1EOjIyKQorCQlVSU5UMzIJCUlGU2VsZWN0OjE7CQkJLy8gMTogc2VsZWN0IElGCXRvIHByb2dyYW0sCTA6IHNlbGVjdCBSRiB0bwlwcm9ncmFtCisJCVVJTlQzMgkJUExMX0xEOjE7CQkJLy8gUkYgUExMX0xEIHN0YXR1cworCQlVSU5UMzIJCUJ1c3k6MTsJCQkJLy8gMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgUkYgcHJvZ3JhbW1pbmcuCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlQSFlfQ1NSNF9TVFJVQywgKlBQSFlfQ1NSNF9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBTRUNfQ1NSNTogc2hhcmVkIGtleSB0YWJsZSBzZWN1cml0eSBtb2RlIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1NFQ19DU1I1X1NUUlVDCXsKKwlzdHJ1Y3QJeworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MENpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MENpcGhlckFsZzozOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JU0VDX0NTUjVfU1RSVUMsICpQU0VDX0NTUjVfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfU0VDX0NTUjVfU1RSVUMJeworCXN0cnVjdAl7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MENpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MENpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlTRUNfQ1NSNV9TVFJVQywgKlBTRUNfQ1NSNV9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBIT1NUX0NNRF9DU1I6IEZvciBIT1NUIHRvIGludGVycnVwdCBlbWJlZGRlZCBwcm9jZXNzb3IKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSE9TVF9DTURfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICBSc3Y6MjQ7CisJICAgIFVJTlQzMiAgIEhvc3RDb21tYW5kOjg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlIT1NUX0NNRF9DU1JfU1RSVUMsICpQSE9TVF9DTURfQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0hPU1RfQ01EX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgSG9zdENvbW1hbmQ6ODsKKwkgICAgVUlOVDMyICAgUnN2OjI0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSE9TVF9DTURfQ1NSX1NUUlVDLCAqUEhPU1RfQ01EX0NTUl9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBBSUZTTl9DU1I6IEFJRlNOIGZvciBlYWNoIEVEQ0EgQUMKKy8vCisKKworCisvLworLy8gRTJQUk9NX0NTUjogRUVQUk9NIGNvbnRyb2wgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRTJQUk9NX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSc3ZkOjI1OworCQlVSU5UMzIgICAgICAgTG9hZFN0YXR1czoxOyAgIC8vIDE6bG9hZGluZywgMDpkb25lCisJCVVJTlQzMgkJVHlwZToxOwkJCS8vIDE6IDkzQzQ2LCAwOjkzQzY2CisJCVVJTlQzMgkJRWVwcm9tRE86MTsKKwkJVUlOVDMyCQlFZXByb21ESToxOworCQlVSU5UMzIJCUVlcHJvbUNTOjE7CisJCVVJTlQzMgkJRWVwcm9tU0s6MTsKKwkJVUlOVDMyCQlSZWxvYWQ6MTsJCS8vIFJlbG9hZCBFRVBST00gY29udGVudCwgd3JpdGUgb25lIHRvIHJlbG9hZCwgc2VsZi1jbGVhcmVkLgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRTJQUk9NX0NTUl9TVFJVQywgKlBFMlBST01fQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0UyUFJPTV9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUmVsb2FkOjE7CQkvLyBSZWxvYWQgRUVQUk9NIGNvbnRlbnQsIHdyaXRlIG9uZSB0byByZWxvYWQsIHNlbGYtY2xlYXJlZC4KKwkJVUlOVDMyCQlFZXByb21TSzoxOworCQlVSU5UMzIJCUVlcHJvbUNTOjE7CisJCVVJTlQzMgkJRWVwcm9tREk6MTsKKwkJVUlOVDMyCQlFZXByb21ETzoxOworCQlVSU5UMzIJCVR5cGU6MTsJCQkvLyAxOiA5M0M0NiwgMDo5M0M2NgorCQlVSU5UMzIgICAgICAgTG9hZFN0YXR1czoxOyAgIC8vIDE6bG9hZGluZywgMDpkb25lCisJCVVJTlQzMgkJUnN2ZDoyNTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUUyUFJPTV9DU1JfU1RSVUMsICpQRTJQUk9NX0NTUl9TVFJVQzsKKyNlbmRpZgorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBFMlBST00gZGF0YSBsYXlvdXQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8KKy8vIEVFUFJPTSBhbnRlbm5hIHNlbGVjdCBmb3JtYXQKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRUVQUk9NX0FOVEVOTkFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVTSE9SVCAgICAgIFJzdjo0OworCQlVU0hPUlQgICAgICBSZkljVHlwZTo0OyAgICAgICAgICAgICAvLyBzZWUgRTJQUk9NIGRvY3VtZW50CisJCVVTSE9SVAkJVHhQYXRoOjQ7CS8vIDE6IDFULCAyOiAyVAorCQlVU0hPUlQJCVJ4UGF0aDo0OwkvLyAxOiAxUiwgMjogMlIsIDM6IDNSCisJfQlmaWVsZDsKKwlVU0hPUlQJCQl3b3JkOworfQlFRVBST01fQU5URU5OQV9TVFJVQywgKlBFRVBST01fQU5URU5OQV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fQU5URU5OQV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVVNIT1JUCQlSeFBhdGg6NDsJLy8gMTogMVIsIDI6IDJSLCAzOiAzUgorCQlVU0hPUlQJCVR4UGF0aDo0OwkvLyAxOiAxVCwgMjogMlQKKwkJVVNIT1JUICAgICAgUmZJY1R5cGU6NDsgICAgICAgICAgICAgLy8gc2VlIEUyUFJPTSBkb2N1bWVudAorCQlVU0hPUlQgICAgICBSc3Y6NDsKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CUVFUFJPTV9BTlRFTk5BX1NUUlVDLCAqUEVFUFJPTV9BTlRFTk5BX1NUUlVDOworI2VuZGlmCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uIF9FRVBST01fTklDX0NJTkZJRzJfU1RSVUMJeworCXN0cnVjdAl7CisgICAgICAgIFVTSE9SVAkJREFDVGVzdEJpdDoxOwkJCS8vIGNvbnRyb2wgaWYgZHJpdmVyIHNob3VsZCBwYXRjaCB0aGUgREFDIGlzc3VlCisJCVVTSE9SVAkJUnN2MjozOwkJCQkJLy8gbXVzdCBiZSAwCisgICAgICAgIFVTSE9SVAkJQW50RGl2ZXJzaXR5OjE7CQkJLy8gQW50ZW5uYSBkaXZlcnNpdHkKKwkJVVNIT1JUCQlSc3YxOjE7CQkJCQkvLyBtdXN0IGJlIDAKKwkJVVNIT1JUCQlCVzQwTUF2YWlsRm9yQToxOwkJCS8vIDA6ZW5hYmxlLCAxOmRpc2FibGUKKwkJVVNIT1JUCQlCVzQwTUF2YWlsRm9yRzoxOwkJCS8vIDA6ZW5hYmxlLCAxOmRpc2FibGUKKwkJVVNIT1JUCQlFbmFibGVXUFNQQkM6MTsgICAgICAgICAgICAgICAgIC8vIFdQUyBQQkMgQ29udHJvbCBiaXQKKwkJVVNIT1JUCQlCVzQwTVNpZGViYW5kRm9yQToxOworCQlVU0hPUlQJCUJXNDBNU2lkZWJhbmRGb3JHOjE7CisJCVVTSE9SVAkJQ2FyZGJ1c0FjY2VsZXJhdGlvbjoxOwkvLyAhISEgTk9URTogMCAtIGVuYWJsZSwgMSAtIGRpc2FibGUKKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckE6MTsJCQkvLyBleHRlcm5hbCBMTkEgZW5hYmxlIGZvciA1RworCQlVU0hPUlQJCUV4dGVybmFsTE5BRm9yRzoxOwkJCS8vIGV4dGVybmFsIExOQSBlbmFibGUgZm9yIDIuNEcKKwkJVVNIT1JUCQlEeW5hbWljVHhBZ2NDb250cm9sOjE7CQkJLy8KKwkJVVNIT1JUCQlIYXJkd2FyZVJhZGlvQ29udHJvbDoxOwkvLyBXaGV0aGVyIFJGIGlzIGNvbnRyb2xsZWQgYnkgZHJpdmVyIG9yIEhXLiAxOmVuYWJsZSBodyBjb250cm9sLCAwOmRpc2FibGUKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQywgKlBFRVBST01fTklDX0NPTkZJRzJfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBfRUVQUk9NX05JQ19DSU5GSUcyX1NUUlVDCXsKKwlzdHJ1Y3QgeworCQlVU0hPUlQJCUhhcmR3YXJlUmFkaW9Db250cm9sOjE7CS8vIDE6ZW5hYmxlLCAwOmRpc2FibGUKKwkJVVNIT1JUCQlEeW5hbWljVHhBZ2NDb250cm9sOjE7CQkJLy8KKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckc6MTsJCQkJLy8KKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckE6MTsJCQkvLyBleHRlcm5hbCBMTkEgZW5hYmxlIGZvciAyLjRHCisJCVVTSE9SVAkJQ2FyZGJ1c0FjY2VsZXJhdGlvbjoxOwkvLyAhISEgTk9URTogMCAtIGVuYWJsZSwgMSAtIGRpc2FibGUKKwkJVVNIT1JUCQlCVzQwTVNpZGViYW5kRm9yRzoxOworCQlVU0hPUlQJCUJXNDBNU2lkZWJhbmRGb3JBOjE7CisJCVVTSE9SVAkJRW5hYmxlV1BTUEJDOjE7ICAgICAgICAgICAgICAgICAvLyBXUFMgUEJDIENvbnRyb2wgYml0CisJCVVTSE9SVAkJQlc0ME1BdmFpbEZvckc6MTsJCQkvLyAwOmVuYWJsZSwgMTpkaXNhYmxlCisJCVVTSE9SVAkJQlc0ME1BdmFpbEZvckE6MTsJCQkvLyAwOmVuYWJsZSwgMTpkaXNhYmxlCisJCVVTSE9SVAkJUnN2MToxOwkJCQkJLy8gbXVzdCBiZSAwCisJCVVTSE9SVAkJQW50RGl2ZXJzaXR5OjE7CQkJLy8gQW50ZW5uYSBkaXZlcnNpdHkKKwkJVVNIT1JUCQlSc3YyOjM7CQkJCQkvLyBtdXN0IGJlIDAKKwkJVVNIT1JUCQlEQUNUZXN0Qml0OjE7CQkJLy8gY29udHJvbCBpZiBkcml2ZXIgc2hvdWxkIHBhdGNoIHRoZSBEQUMgaXNzdWUKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQywgKlBFRVBST01fTklDX0NPTkZJRzJfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFRYX1BXUiBWYWx1ZSB2YWxpZCByYW5nZSAweEZBKC02KSB+IDB4MjQoMzYpCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9UWF9QV1JfU1RSVUMJeworCXN0cnVjdAl7CisJCUNIQVIJQnl0ZTE7CQkJCS8vIEhpZ2ggQnl0ZQorCQlDSEFSCUJ5dGUwOwkJCQkvLyBMb3cgQnl0ZQorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9UWF9QV1JfU1RSVUMsICpQRUVQUk9NX1RYX1BXUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fVFhfUFdSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlDSEFSCUJ5dGUwOwkJCQkvLyBMb3cgQnl0ZQorCQlDSEFSCUJ5dGUxOwkJCQkvLyBIaWdoIEJ5dGUKKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fVFhfUFdSX1NUUlVDLCAqUEVFUFJPTV9UWF9QV1JfU1RSVUM7CisjZW5kaWYKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9WRVJTSU9OX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUglWZXJzaW9uOwkJCS8vIEhpZ2ggQnl0ZQorCQlVQ0hBUglGYWVSZWxlYXNlTnVtYmVyOwkvLyBMb3cgQnl0ZQorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9WRVJTSU9OX1NUUlVDLCAqUEVFUFJPTV9WRVJTSU9OX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9WRVJTSU9OX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUglGYWVSZWxlYXNlTnVtYmVyOwkvLyBMb3cgQnl0ZQorCQlVQ0hBUglWZXJzaW9uOwkJCS8vIEhpZ2ggQnl0ZQorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9WRVJTSU9OX1NUUlVDLCAqUEVFUFJPTV9WRVJTSU9OX1NUUlVDOworI2VuZGlmCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRVBST01fTEVEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVU0hPUlQJUnN2ZDozOwkJCQkvLyBSZXNlcnZlZAorCQlVU0hPUlQJTGVkTW9kZTo1OwkJCS8vIExlZCBtb2RlLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzQ6MTsJLy8gUG9sYXJpdHkgR1BJTyM0IHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMzoxOwkvLyBQb2xhcml0eSBHUElPIzMgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT18yOjE7CS8vIFBvbGFyaXR5IEdQSU8jMiBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzE6MTsJLy8gUG9sYXJpdHkgR1BJTyMxIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMDoxOwkvLyBQb2xhcml0eSBHUElPIzAgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5QUNUOjE7CQkvLyBQb2xhcml0eSBBQ1Qgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5UkRZX0E6MTsJCS8vIFBvbGFyaXR5IFJEWV9BIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eVJEWV9HOjE7CQkvLyBQb2xhcml0eSBSRFlfRyBzZXR0aW5nLgorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9MRURfU1RSVUMsICpQRUVQUk9NX0xFRF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fTEVEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVU0hPUlQJUG9sYXJpdHlSRFlfRzoxOwkJLy8gUG9sYXJpdHkgUkRZX0cgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5UkRZX0E6MTsJCS8vIFBvbGFyaXR5IFJEWV9BIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUFDVDoxOwkJLy8gUG9sYXJpdHkgQUNUIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMDoxOwkvLyBQb2xhcml0eSBHUElPIzAgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT18xOjE7CS8vIFBvbGFyaXR5IEdQSU8jMSBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzI6MTsJLy8gUG9sYXJpdHkgR1BJTyMyIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMzoxOwkvLyBQb2xhcml0eSBHUElPIzMgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT180OjE7CS8vIFBvbGFyaXR5IEdQSU8jNCBzZXR0aW5nLgorCQlVU0hPUlQJTGVkTW9kZTo1OwkJCS8vIExlZCBtb2RlLgorCQlVU0hPUlQJUnN2ZDozOwkJCQkvLyBSZXNlcnZlZAorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9MRURfU1RSVUMsICpQRUVQUk9NX0xFRF9TVFJVQzsKKyNlbmRpZgorCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCVR4UG93ZXJFbmFibGU6MTsvLyBFbmFibGUKKwkJVUNIQVIJVHlwZToxOwkJCS8vIDE6IHBsdXMgdGhlIGRlbHRhIHZhbHVlLCAwOiBtaW51cyB0aGUgZGVsdGEgdmFsdWUKKwkJVUNIQVIJRGVsdGFWYWx1ZTo2OwkvLyBUeCBQb3dlciBkYWx0YSB2YWx1ZSAoTUFYPTQpCisJfQlmaWVsZDsKKwlVQ0hBUgl2YWx1ZTsKK30JRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMsICpQRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCURlbHRhVmFsdWU6NjsJLy8gVHggUG93ZXIgZGFsdGEgdmFsdWUgKE1BWD00KQorCQlVQ0hBUglUeXBlOjE7CQkJLy8gMTogcGx1cyB0aGUgZGVsdGEgdmFsdWUsIDA6IG1pbnVzIHRoZSBkZWx0YSB2YWx1ZQorCQlVQ0hBUglUeFBvd2VyRW5hYmxlOjE7Ly8gRW5hYmxlCisJfQlmaWVsZDsKKwlVQ0hBUgl2YWx1ZTsKK30JRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMsICpQRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFFPU19DU1IwOiBUWE9QIGhvbGRlciBhZGRyZXNzMCByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9RT1NfQ1NSMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGUzOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAzCisJCVVDSEFSCQlCeXRlMjsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMgorCQlVQ0hBUgkJQnl0ZTE7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDEKKwkJVUNIQVIJCUJ5dGUwOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlRT1NfQ1NSMF9TVFJVQywgKlBRT1NfQ1NSMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9RT1NfQ1NSMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGUwOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAwCisJCVVDSEFSCQlCeXRlMTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMQorCQlVQ0hBUgkJQnl0ZTI7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDIKKwkJVUNIQVIJCUJ5dGUzOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlRT1NfQ1NSMF9TVFJVQywgKlBRT1NfQ1NSMF9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gUU9TX0NTUjE6IFRYT1AgaG9sZGVyIGFkZHJlc3MxIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1FPU19DU1IxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJUnN2ZDE7CisJCVVDSEFSCQlSc3ZkMDsKKwkJVUNIQVIJCUJ5dGU1OwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSA1CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUU9TX0NTUjFfU1RSVUMsICpQUU9TX0NTUjFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUU9TX0NTUjFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCQlVQ0hBUgkJQnl0ZTU7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDUKKwkJVUNIQVIJCVJzdmQwOworCQlVQ0hBUgkJUnN2ZDE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlRT1NfQ1NSMV9TVFJVQywgKlBRT1NfQ1NSMV9TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lCVJGX0NTUl9DRkcJMHg1MDAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UCVJzdmQxOjE0OwkJCQkvLyBSZXNlcnZlZAorCQlVSU5UCVJGX0NTUl9LSUNLOjE7CQkJLy8ga2ljayBSRiByZWdpc3RlciByZWFkL3dyaXRlCisJCVVJTlQJUkZfQ1NSX1dSOjE7CQkJLy8gMDogcmVhZCAgMTogd3JpdGUKKwkJVUlOVAlSc3ZkMjozOwkJCQkvLyBSZXNlcnZlZAorCQlVSU5UCVRFU1RDU1JfUkZBQ0NfUkVHTlVNOjU7CS8vIFJGIHJlZ2lzdGVyIElECisJCVVJTlQJUkZfQ1NSX0RBVEE6ODsJCQkvLyBEQVRBCisJfQlmaWVsZDsKKwlVSU5UCXdvcmQ7Cit9CVJGX0NTUl9DRkdfU1RSVUMsICpQUkZfQ1NSX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UCVJGX0NTUl9EQVRBOjg7CQkJLy8gREFUQQorCQlVSU5UCVRFU1RDU1JfUkZBQ0NfUkVHTlVNOjU7CS8vIFJGIHJlZ2lzdGVyIElECisJCVVJTlQJUnN2ZDI6MzsJCQkJLy8gUmVzZXJ2ZWQKKwkJVUlOVAlSRl9DU1JfV1I6MTsJCQkvLyAwOiByZWFkICAxOiB3cml0ZQorCQlVSU5UCVJGX0NTUl9LSUNLOjE7CQkJLy8ga2ljayBSRiByZWdpc3RlciByZWFkL3dyaXRlCisJCVVJTlQJUnN2ZDE6MTQ7CQkJCS8vIFJlc2VydmVkCisJfQlmaWVsZDsKKwlVSU5UCXdvcmQ7Cit9CVJGX0NTUl9DRkdfU1RSVUMsICpQUkZfQ1NSX0NGR19TVFJVQzsKKyNlbmRpZgorCisjZW5kaWYJLy8gX19SVDI4WFhfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2F0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjM4ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuYwpAQCAtMCwwICsxLDY1MDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpbmNsdWRlICJydF9jb25maWcuaCIKKworI2lmZGVmIFVDT1MKK0lOVCBJb2N0bFJlc3BvbnNlKFBVQ0hBUiBwYXlsb2FkLCBQVUNIQVIgbXNnLCBJTlQgbGVuKTsKKyNlbmRpZiAvLyBVQ09TIC8vCisKKyNkZWZpbmUgQVRFX0JCUF9SRUdfTlVNCTE2OAorVUNIQVIgcmVzdG9yZV9CQlBbQVRFX0JCUF9SRUdfTlVNXT17MH07CisKKyNpZmRlZiBSQUxJTktfQVRFCitVQ0hBUiBUZW1wbGF0ZUZyYW1lWzI0XSA9IHsweDA4LyogRGF0YSB0eXBlICovLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHhBQSwweEJCLDB4MTIsMHgzNCwweDU2LDB4MDAsMHgxMSwweDIyLDB4QUEsMHhCQiwweENDLDB4MDAsMHgwMH07CS8vIDgwMi4xMSBNQUMgSGVhZGVyLCBUeXBlOkRhdGEsIExlbmd0aDoyNGJ5dGVzCitleHRlcm4gUlRNUF9SRl9SRUdTIFJGMjg1MFJlZ1RhYmxlW107CitleHRlcm4gVUNIQVIgTlVNX09GXzI4NTBfQ0hOTDsKKworI2lmZGVmIFJUMjg3MAorZXh0ZXJuIFVDSEFSIEVwVG9RdWV1ZVtdOworZXh0ZXJuIFZPSUQJUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cygJSU4JUFJUTVBfQURBUFRFUglwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkcyB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCitleHRlcm4gRlJFUVVFTkNZX0lURU0gRnJlcUl0ZW1zMzAyMFtdOworZXh0ZXJuIFVDSEFSIE5VTV9PRl8zMDIwX0NITkw7CisvLzIwMDgvMDcvMTA6S0ggYWRkcyB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNpZmRlZiBVQ09TCitleHRlcm4gSU5UIENvbnNvbGVSZXNwb25zZShJTiBQVUNIQVIgYnVmZik7CitleHRlcm4gaW50ICgqcmVtb3RlX2Rpc3BsYXkpKGNoYXIgKik7CisjZW5kaWYgLy8gVUNPUyAvLworCitzdGF0aWMgQ0hBUiBDQ0tSYXRlVGFibGVbXSA9IHswLCAxLCAyLCAzLCA4LCA5LCAxMCwgMTEsIC0xfTsgLyogQ0NLIE1vZGUuICovCitzdGF0aWMgQ0hBUiBPRkRNUmF0ZVRhYmxlW10gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgLTF9OyAvKiBPRkRNIE1vZGUuICovCitzdGF0aWMgQ0hBUiBIVE1JWFJhdGVUYWJsZVtdID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xfTsgLyogSFQgTWl4IE1vZGUuICovCisKK3N0YXRpYyBJTlQgVHhEbWFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworc3RhdGljIElOVCBSeERtYUJ1c3koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitzdGF0aWMgVk9JRCBSdG1wRG1hRW5hYmxlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIElOVCBFbmFibGUpOworCitzdGF0aWMgVk9JRCBCYnBTb2Z0UmVzZXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitzdGF0aWMgVk9JRCBSdG1wUmZJb1dyaXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworc3RhdGljIElOVCBBVEVTZXRVcEZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVJTlQzMiBUeElkeCk7CisKK3N0YXRpYyBJTlQgQVRFVHhQd3JIYW5kbGVyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIGNoYXIgaW5kZXgpOworCitzdGF0aWMgSU5UIEFURUNtZEhhbmRsZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworc3RhdGljIGludCBDaGVja01DU1ZhbGlkKAorCUlOIFVDSEFSIE1vZGUsCisJSU4gVUNIQVIgTWNzKTsKKworCisjaWZkZWYgUlQyODcwCitzdGF0aWMgVk9JRCBBVEVXcml0ZVR4SW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhJTkZPX1NUUlVDIAlwVHhJbmZvLAorCUlOCSAgVVNIT1JUCQlVU0JETUFwa3RMZW4sCisJSU4JICBCT09MRUFOCQliV2l2LAorCUlOCSAgVUNIQVIJCQlRdWV1ZVNlbCwKKwlJTgkgIFVDSEFSCQkJTmV4dFZhbGlkLAorCUlOCSAgVUNIQVIJCQlUeEJ1cnN0KTsKKworc3RhdGljIFZPSUQgQVRFV3JpdGVUeFdJKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWFdJX1NUUlVDIAlwVHhXSSwKKwlJTglCT09MRUFOCQkJRlJBRywKKwlJTglCT09MRUFOCQkJSW5zVGltZXN0YW1wLAorCUlOCUJPT0xFQU4gCQlBTVBEVSwKKwlJTglCT09MRUFOIAkJQWNrLAorCUlOCUJPT0xFQU4gCQlOU2VxLAkJLy8gSFcgbmV3IGEgc2VxdWVuY2UuCisJSU4JVUNIQVIJCQlCQVNpemUsCisJSU4JVUNIQVIJCQlXQ0lELAorCUlOCVVMT05HCQkJTGVuZ3RoLAorCUlOCVVDSEFSIAkJCVBJRCwKKwlJTglVQ0hBUgkJCU1JTU9wcywKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJVHJhbnNtaXQpOworCisjZW5kaWYgLy8gUlQyODcwIC8vCisKK3N0YXRpYyBWT0lEIFNldEphcGFuRmlsdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09ZW5kIG9mIHByb3RvdHlwZT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKyNpZmRlZiBSVDI4NzAKK3N0YXRpYyBJTlQgVHhEbWFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVCByZXN1bHQ7CisJVVNCX0RNQV9DRkdfU1RSVUMgVXNiQ2ZnOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBVU0JfRE1BX0NGRywgJlVzYkNmZy53b3JkKTsJLy8gZGlzYWJsZSBETUEKKwlpZiAoVXNiQ2ZnLmZpZWxkLlR4QnVzeSkKKwkJcmVzdWx0ID0gMTsKKwllbHNlCisJCXJlc3VsdCA9IDA7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgSU5UIFJ4RG1hQnVzeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlJTlQgcmVzdWx0OworCVVTQl9ETUFfQ0ZHX1NUUlVDIFVzYkNmZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0RNQV9DRkcsICZVc2JDZmcud29yZCk7CS8vIGRpc2FibGUgRE1BCisJaWYgKFVzYkNmZy5maWVsZC5SeEJ1c3kpCisJCXJlc3VsdCA9IDE7CisJZWxzZQorCQlyZXN1bHQgPSAwOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFZPSUQgUnRtcERtYUVuYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBJTlQgRW5hYmxlKQoreworCUJPT0xFQU4gdmFsdWU7CisJVUxPTkcgV2FpdENudDsKKwlVU0JfRE1BX0NGR19TVFJVQyBVc2JDZmc7CisKKwl2YWx1ZSA9IEVuYWJsZSA+IDAgPyAxIDogMDsKKworCS8vIGNoZWNrIERNQSBpcyBpbiBidXN5IG1vZGUuCisJV2FpdENudCA9IDA7CisJd2hpbGUgKFR4RG1hQnVzeShwQWQpIHx8IFJ4RG1hQnVzeShwQWQpKQorCXsKKwkJUlRNUHVzZWNEZWxheSgxMCk7CisJCWlmIChXYWl0Q250KysgPiAxMDApCisJCQlicmVhazsKKwl9CisKKwkvL1doeSBub3QgdG8gY2xlYXIgVVNCIERNQSBUWCBwYXRoIGZpcnN0ID8/PworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0RNQV9DRkcsICZVc2JDZmcud29yZCk7CS8vIGRpc2FibGUgRE1BCisJVXNiQ2ZnLmZpZWxkLlR4QnVsa0VuID0gdmFsdWU7CisJVXNiQ2ZnLmZpZWxkLlJ4QnVsa0VuID0gdmFsdWU7CisJUlRNUF9JT19XUklURTMyKHBBZCwgVVNCX0RNQV9DRkcsIFVzYkNmZy53b3JkKTsJLy8gYWJvcnQgYWxsIFRYIHJpbmdzCisJUlRNUHVzZWNEZWxheSg1MDAwKTsKKworCXJldHVybjsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworc3RhdGljIFZPSUQgQmJwU29mdFJlc2V0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSIEJicERhdGEgPSAwOworCisJLy8gU29mdCByZXNldCwgc2V0IEJCUCBSMjEgYml0MD0xLT4wCisJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIxLCAmQmJwRGF0YSk7CisJQmJwRGF0YSB8PSAweDAwMDAwMDAxOyAvL3NldCBiaXQwPTEKKwlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIxLCBCYnBEYXRhKTsKKworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMSwgJkJicERhdGEpOworCUJicERhdGEgJj0gfigweDAwMDAwMDAxKTsgLy9zZXQgYml0MD0wCisJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMSwgQmJwRGF0YSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBWT0lEIFJ0bXBSZklvV3JpdGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJLy8gU2V0IFJGIHZhbHVlIDEncyBzZXQgUjNbYml0Ml0gPSBbMF0KKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCAocEFkLT5MYXRjaFJmUmVncy5SMyAmICh+MHgwNCkpKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKworCVJUTVB1c2VjRGVsYXkoMjAwKTsKKworCS8vIFNldCBSRiB2YWx1ZSAyJ3Mgc2V0IFIzW2JpdDJdID0gWzFdCisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgfCAweDA0KSk7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisKKwlSVE1QdXNlY0RlbGF5KDIwMCk7CisKKwkvLyBTZXQgUkYgdmFsdWUgMydzIHNldCBSM1tiaXQyXSA9IFswXQorCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIChwQWQtPkxhdGNoUmZSZWdzLlIzICYgKH4weDA0KSkpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IENoZWNrTUNTVmFsaWQoCisJVUNIQVIgTW9kZSwKKwlVQ0hBUiBNY3MpCit7CisJaW50IGk7CisJUENIQVIgcFJhdGVUYWI7CisKKwlzd2l0Y2goTW9kZSkKKwl7CisJCWNhc2UgMDoKKwkJCXBSYXRlVGFiID0gQ0NLUmF0ZVRhYmxlOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBSYXRlVGFiID0gT0ZETVJhdGVUYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJCXBSYXRlVGFiID0gSFRNSVhSYXRlVGFibGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInVucmVjb2duaXphYmxlIFR4IE1vZGUgJWRcbiIsIE1vZGUpKTsKKwkJCXJldHVybiAtMTsKKwkJCWJyZWFrOworCX0KKworCWkgPSAwOworCXdoaWxlKHBSYXRlVGFiW2ldICE9IC0xKQorCXsKKwkJaWYgKHBSYXRlVGFiW2ldID09IE1jcykKKwkJCXJldHVybiAwOworCQlpKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCisjaWYgMQorc3RhdGljIElOVCBBVEVUeFB3ckhhbmRsZXIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gY2hhciBpbmRleCkKK3sKKwlVTE9ORyBSOworCUNIQVIgVHhQb3dlcjsKKwlVQ0hBUiBCYnA5NCA9IDA7CisJQk9PTEVBTiBiUG93ZXJSZWR1Y2UgPSBGQUxTRTsKKyNpZmRlZiBSVDMweHgKKwlVQ0hBUiBSRlZhbHVlOworI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJaWYgKChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpIHx8IChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpKQorCXsKKwkJLyogV2hlbiBRQSBpcyB1c2VkIGZvciBUeCwgcEFkLT5hdGUuVHhQb3dlcjAvMSBhbmQgcmVhbCB0eCBwb3dlcgorCQkqKiBhcmUgbm90IHN5bmNocm9uaXplZC4KKwkJKi8KKy8qCisJCXBBZC0+YXRlLlR4UG93ZXIwID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisJCXBBZC0+YXRlLlR4UG93ZXIxID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisqLworCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJeworCQlUeFBvd2VyID0gaW5kZXggPT0gMCA/IHBBZC0+YXRlLlR4UG93ZXIwIDogcEFkLT5hdGUuVHhQb3dlcjE7CisKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCWlmIChUeFBvd2VyID4gMzEpCisJCQl7CisJCQkJLy8KKwkJCQkvLyBSMywgUjQgY2FuJ3QgbGFyZ2UgdGhhbiAzMSAoMHgyNCksIDMxIH4gMzYgdXNlZCBieSBCQlAgOTQKKwkJCQkvLworCQkJCVIgPSAzMTsKKwkJCQlpZiAoVHhQb3dlciA8PSAzNikKKwkJCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVCArIChVQ0hBUikoVHhQb3dlciAtIDMxKTsKKwkJCX0KKwkJCWVsc2UgaWYgKFR4UG93ZXIgPCAwKQorCQkJeworCQkJCS8vCisJCQkJLy8gUjMsIFI0IGNhbid0IGxlc3MgdGhhbiAwLCAtMSB+IC02IHVzZWQgYnkgQkJQIDk0CisJCQkJLy8KKwkJCQlSID0gMDsKKwkJCQlpZiAoVHhQb3dlciA+PSAtNikKKwkJCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVCArIFR4UG93ZXI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gMCB+IDMxCisJCQkJUiA9IChVTE9ORykgVHhQb3dlcjsKKwkJCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUOworCQkJfQorCisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyAoVHhQb3dlcj0lZCwgUj0lbGQsIEJCUF9SOTQ9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFIsIEJicDk0KSk7CisJCX0KKwkJZWxzZS8vIDUuNSBHSHoKKwkJeworCQkJaWYgKFR4UG93ZXIgPiAxNSkKKwkJCXsKKwkJCQkvLworCQkJCS8vIFIzLCBSNCBjYW4ndCBsYXJnZSB0aGFuIDE1ICgweDBGKQorCQkJCS8vCisJCQkJUiA9IDE1OworCQkJfQorCQkJZWxzZSBpZiAoVHhQb3dlciA8IDApCisJCQl7CisJCQkJLy8KKwkJCQkvLyBSMywgUjQgY2FuJ3QgbGVzcyB0aGFuIDAKKwkJCQkvLworCQkJCS8vIC0xIH4gLTcKKwkJCQlBU1NFUlQoKFR4UG93ZXIgPj0gLTcpKTsKKwkJCQlSID0gKFVMT05HKShUeFBvd2VyICsgNyk7CisJCQkJYlBvd2VyUmVkdWNlID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyAwIH4gMTUKKwkJCQlSID0gKFVMT05HKSBUeFBvd2VyOworCQkJfQorCisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyAoVHhQb3dlcj0lZCwgUj0lbHUpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFIpKTsKKwkJfQorLy8yMDA4LzA5LzEwOktIIGFkZHMgdG8gc3VwcG9ydCAzMDcwIEFURSBUWCBQb3dlciB0dW5uaW5nIHJlYWwgdGltZTwtLQorI2lmZGVmIFJUMzB4eAorCQlpZihJU19SVDMweHgocEFkKSkKKwkJeworCQkJLy8gU2V0IFR4IFBvd2VyCisKKwkJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UG93ZXI7CisJCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgKFVDSEFSKVJGVmFsdWUpOworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIzMDcwIG9yIDIwNzA6JXMgKFR4UG93ZXI9JWQsIFJGVmFsdWU9JXgpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFJGVmFsdWUpKTsKKworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkgICAgICB7CisJCWlmIChwQWQtPmF0ZS5DaGFubmVsIDw9IDE0KQorCQl7CisJCQlpZiAoaW5kZXggPT0gMCkKKwkJCXsKKwkJCQlSID0gUiA8PCA5OwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFIzKSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlIzICYgMHhmZmZmYzFmZik7CisJCQkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUiA9IFIgPDwgNjsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSNCkgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSOworCQkJfQorCQl9CisJCWVsc2UvLyA1LjVHSHoKKwkJeworCQkJaWYgKGJQb3dlclJlZHVjZSA9PSBGQUxTRSkKKwkJCXsKKwkJCQlpZiAoaW5kZXggPT0gMCkKKwkJCQl7CisJCQkJCVIgPSAoUiA8PCAxMCkgfCAoMSA8PCA5KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAweGZmZmZjMWZmKTsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVIgPSAoUiA8PCA3KSB8ICgxIDw8IDYpOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGluZGV4ID09IDApCisJCQkJeworCQkJCQlSID0gKFIgPDwgMTApOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFIzKSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SMyAmIDB4ZmZmZmMxZmYpOworCisJCQkJCS8qIENsZWFyIGJpdCA5IG9mIFIzIHRvIHJlZHVjZSA3ZEIuICovCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSAoUiAmICh+KDEgPDwgOSkpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUiA9IChSIDw8IDcpOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCisJCQkJCS8qIENsZWFyIGJpdCA2IG9mIFI0IHRvIHJlZHVjZSA3ZEIuICovCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSAoUiAmICh+KDEgPDwgNikpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworICAgICAgICAgICB9CisvLzIwMDgvMDkvMTA6S0ggYWRkcyB0byBzdXBwb3J0IDMwNzAgQVRFIFRYIFBvd2VyIHR1bm5pbmcgcmVhbCB0aW1lLS0+CisKKwkJcmV0dXJuIDA7CisJfQorfQorI2Vsc2UvLyAxIC8vCitzdGF0aWMgSU5UIEFURVR4UHdySGFuZGxlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBjaGFyIGluZGV4KQoreworCVVMT05HIFI7CisJQ0hBUiBUeFBvd2VyOworCVVDSEFSIEJicDk0ID0gMDsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJaWYgKChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpIHx8IChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpKQorCXsKKwkJLy8gVE9ETzogaG93IHRvIGdldCBjdXJyZW50IFR4UG93ZXIwLzEgZnJvbSBwQWQtPkxhdGNoUmZSZWdzID8KKwkJLyogV2hlbiBRQSBpcyB1c2VkIGZvciBUeCwgcEFkLT5hdGUuVHhQb3dlcjAvMSBhbmQgcmVhbCB0eCBwb3dlcgorCQkqKiBhcmUgbm90IHN5bmNocm9uaXplZC4KKwkJKi8KKy8qCisJCXBBZC0+YXRlLlR4UG93ZXIwID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisJCXBBZC0+YXRlLlR4UG93ZXIxID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisqLworCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJeworCQlUeFBvd2VyID0gaW5kZXggPT0gMCA/IHBBZC0+YXRlLlR4UG93ZXIwIDogcEFkLT5hdGUuVHhQb3dlcjE7CisKKwlpZiAoVHhQb3dlciA+IDMxKQorCXsKKwkJLy8KKwkJLy8gUjMsIFI0IGNhbid0IGxhcmdlIHRoYW4gMzYgKDB4MjQpLCAzMSB+IDM2IHVzZWQgYnkgQkJQIDk0CisJCS8vCisJCVIgPSAzMTsKKwkJaWYgKFR4UG93ZXIgPD0gMzYpCisJCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUICsgKFVDSEFSKShUeFBvd2VyIC0gMzEpOworCX0KKwllbHNlIGlmIChUeFBvd2VyIDwgMCkKKwl7CisJCS8vCisJCS8vIFIzLCBSNCBjYW4ndCBsZXNzIHRoYW4gMCwgLTEgfiAtNiB1c2VkIGJ5IEJCUCA5NAorCQkvLworCQlSID0gMDsKKwkJaWYgKFR4UG93ZXIgPj0gLTYpCisJCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUICsgVHhQb3dlcjsKKwl9CisJZWxzZQorCXsKKwkJLy8gMCB+IDMxCisJCVIgPSAoVUxPTkcpIFR4UG93ZXI7CisJCUJicDk0ID0gQkJQUjk0X0RFRkFVTFQ7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgKFR4UG93ZXI9JWQsIFIzPSVsZCwgQkJQX1I5ND0lZClcbiIsIF9fRlVOQ1RJT05fXywgVHhQb3dlciwgUiwgQmJwOTQpKTsKKworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCWlmIChpbmRleCA9PSAwKQorCXsKKwkJUiA9IFIgPDwgOTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAweGZmZmZjMWZmKTsKKwkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFI7CisJfQorCWVsc2UKKwl7CisJCVIgPSBSIDw8IDY7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYoUjQpIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbgorCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlI0ICYgMHhmZmZmZjgzZik7CisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSOworCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChpbmRleCA9PSAwKQorCQkJeworCQkJCVIgPSAoUiA8PCAxMCkgfCAoMSA8PCA5KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SMyAmIDB4ZmZmZmMxZmYpOworCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVIgPSAoUiA8PCA3KSB8ICgxIDw8IDYpOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlI0ICYgMHhmZmZmZjgzZik7CisJCQkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI7CisJCQl9CisJCX0KKworCVJ0bXBSZklvV3JpdGUocEFkKTsKKworCXJldHVybiAwOworCX0KK30KKyNlbmRpZiAvLyAxIC8vCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgb3BlcmF0aW9uIG1vZGUgdG8KKyAgICAgICAgMC4gQVRFU1RBUlQgID0gU3RhcnQgQVRFIE1vZGUKKyAgICAgICAgMS4gQVRFU1RPUCAgID0gU3RvcCBBVEUgTW9kZQorICAgICAgICAyLiBUWENPTlQgICAgPSBDb250aW51b3VzIFRyYW5zbWl0CisgICAgICAgIDMuIFRYQ0FSUiAgICA9IFRyYW5zbWl0IENhcnJpZXIKKyAgICAgICAgNC4gVFhGUkFNRSAgID0gVHJhbnNtaXQgRnJhbWVzCisgICAgICAgIDUuIFJYRlJBTUUgICA9IFJlY2VpdmUgRnJhbWVzCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKyAgICAgICAgNi4gVFhTVE9QICAgID0gU3RvcCBBbnkgVHlwZSBvZiBUcmFuc21pdGlvbgorICAgICAgICA3LiBSWFNUT1AgICAgPSBTdG9wIFJlY2VpdmluZyBGcmFtZXMKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT1FbmQgb2YgUlQyODYwPT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PVN0YXJ0IG9mIFJUMjg3MD09PT09PT09PT09PT09PT09PT09PT0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFJUMjg3MAorc3RhdGljIElOVAlBVEVDbWRIYW5kbGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVSU5UMzIJCQlWYWx1ZTsKKwlVQ0hBUgkJCUJicERhdGE7CisJVUlOVDMyICAgICAgICAgIE1hY0RhdGE7CisJVUlOVAkJCWk9MCwgYXRlbW9kZTsKKwkvL05ESVNfU1RBVFVTCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCS8vUFVDSEFSCQkJcERlc3Q7CisJVUlOVDMyIAkJCXRlbXA7CisJVUxPTkcJCQlJcnFGbGFnczsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gQVRFQ21kSGFuZGxlcigpXG4iKSk7CisJQVRFQXNpY1N3aXRjaENoYW5uZWwocEFkKTsKKwkvKiBBc2ljTG9ja0NoYW5uZWwoKSBpcyBlbXB0eSBmdW5jdGlvbiBzbyBmYXIgaW4gZmFjdCAqLworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+YXRlLkNoYW5uZWwpOworCisJUlRNUHVzZWNEZWxheSg1MDAwKTsKKworCS8vIERlZmF1bHQgdmFsdWUgaW4gQkJQIFIyMiBpcyAweDAuCisJQmJwRGF0YSA9IDA7CisKKwkvKiBFbnRlciBBVEUgbW9kZSBhbmQgc2V0IFR4L1J4IElkbGUgKi8KKwlpZiAoIXN0cmNtcChhcmcsICJBVEVTVEFSVCIpKQorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQk9PTEVBTiAgICAgICBDYW5jZWxsZWQ7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogQVRFU1RBUlRcbiIpKTsKKworCQluZXRpZl9zdG9wX3F1ZXVlKHBBZC0+bmV0X2Rldik7CisKKwkJYXRlbW9kZSA9IHBBZC0+YXRlLk1vZGU7CisJCXBBZC0+YXRlLk1vZGUgPSBBVEVfU1RBUlQ7CisvLwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSBwQWQtPmF0ZS5UeENvdW50OworCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8vIERpc2FibGUgYXV0byByZXNwb25kZXIKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBBVVRPX1JTUF9DRkcsICZ0ZW1wKTsKKwkJdGVtcCA9IHRlbXAgJiAweEZGRkZGRkZFOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1JTUF9DRkcsIHRlbXApOworCisJCS8vIHJlYWQgTUFDX1NZU19DVFJMIGFuZCBiYWNrdXAgTUFDX1NZU19DVFJMIHZhbHVlLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQkvLyBjbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKwkJLy8gU3RvcCBjb250aW51b3VzIFRYIHByb2R1Y3Rpb24gdGVzdC4KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsvL2Rpc2FibGUgb3IgY2FuY2VsIHBlbmRpbmcgaXJwIGZpcnN0ID8/PworCisgICAgICAgIGlmIChhdGVtb2RlICYgQVRFX1RYQ0FSUgorI2lmZGVmIFJUMzB4eAorIHx8IGF0ZW1vZGUgJiBBVEVfVFhDT05UCisjZW5kaWYgLy8gUlQzMHh4IC8vCispCisJCXsKKyNpZmRlZiBSVDMweHgKKwkJCS8vSGFyZHdhcmUgUmVzZXQgQkJQCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJnRlbXApOworCQkJdGVtcCA9IHRlbXAgfDB4MDAwMDAwMDI7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIHRlbXApOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZ0ZW1wKTsKKwkJCXRlbXAgPSB0ZW1wICYgfigweDAwMDAwMDAyKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgdGVtcCk7CisJCQkvL1Jlc3RvcmUgQWxsIEJCUCBWYWx1ZQorCQkJZm9yKGk9MDtpPEFURV9CQlBfUkVHX05VTTtpKyspCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLGkscmVzdG9yZV9CQlBbaV0pOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisJCQkvLyBObyBDYXJyaWVyIFRlc3Qgc2V0IEJCUCBSMjIgYml0Nz0wLCBiaXQ2PTAsIGJpdFs1fjBdPTB4MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IDB4RkZGRkZGMDA7IC8vY2xlYXIgYml0NywgYml0NiwgYml0WzV+MF0KKwkJICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQl9CisJCWVsc2UgaWYgKGF0ZW1vZGUgJiBBVEVfVFhDQVJSU1VQUCkKKwkJeworI2lmZGVmIFJUMzB4eAorCQkJLy9IYXJkd2FyZSBSZXNldCBCQlAKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmdGVtcCk7CisJCQl0ZW1wID0gdGVtcCB8MHgwMDAwMDAwMjsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgdGVtcCk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJnRlbXApOworCQkJdGVtcCA9IHRlbXAgJiB+KDB4MDAwMDAwMDIpOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCB0ZW1wKTsKKwkJCS8vUmVzdG9yZSBBbGwgQkJQIFZhbHVlCisJCQlmb3IoaT0wO2k8QVRFX0JCUF9SRUdfTlVNO2krKykKKwkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsaSxyZXN0b3JlX0JCUFtpXSk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkJCS8vIE5vIENvbnQuIFRYIHNldCBCQlAgUjIyIGJpdDc9MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IH4oMSA8PCA3KTsgLy9zZXQgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKworCQkJLy8gTm8gQ2FycmllciBTdXBwcmVzc2lvbiBzZXQgQkJQIFIyNCBiaXQwPTAKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyNCwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSAweEZGRkZGRkZFOyAvL2NsZWFyIGJpdDAKKwkJICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsIEJicERhdGEpOworCQl9CisJCS8vIFdlIHNob3VsZCBmcmVlIHNvbWUgcmVzb3VyY2Ugd2hpY2ggYWxsb2NhdGUgd2hlbiBBVEVfVFhGUkFNRSAsIEFURV9TVE9QLCBhbmQgQVRFX1RYQ09OVC4KKwkJLy8gVE9ETzpTaG91bGQgd2UgZnJlZSBzb21lIHJlc291cmNlIHdoaWNoIHdhcyBhbGxvY2F0ZWQgd2hlbiBMb29wQmFjayBhbmQgQVRFX1NUT1AgPworCQllbHNlIGlmICgoYXRlbW9kZSAmIEFURV9UWEZSQU1FKSB8fCAoYXRlbW9kZSA9PSBBVEVfU1RPUCkpCisJCXsKKwkJCWlmIChhdGVtb2RlICYgQVRFX1RYQ09OVCkKKwkJCXsKKwkJCQkvLyBOb3QgQ29udC4gVFggYW55bW9yZSwgc28gc2V0IEJCUCBSMjIgYml0Nz0wCisJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQkJQmJwRGF0YSAmPSB+KDEgPDwgNyk7IC8vc2V0IGJpdDc9MAorCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQkJfQorCQkJLy8gQWJvcnQgVHgsIFJ4IERNQS4KKwkJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCQkJeworCQkJCS8vIEl0IHNlZW1zIG5vdGhpbmcgdG8gZnJlZSwKKwkJCQkvLyBiZWNhdXNlIHdlIGRpZG4ndCBhbGxvY2F0ZSBhbnkgcmVzb3VyY2Ugd2hlbiB3ZSBlbnRlcmVkIEFURV9UWEZSQU1FIG1vZGUgbGF0ZXN0bHkuCisJCQl9CisKKwkJCS8vIFN0YXJ0IFR4LCBSWCBETUEKKwkJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKwkJfQorCisJCVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMocEFkKTsKKwkJUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZShwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCS8vCisJCS8vIEl0IHdpbGwgYmUgY2FsbGVkIGluIE1sbWVTdXNwZW5kKCkuCisJCS8vCisJCS8vIENhbmNlbCBwZW5kaW5nIHRpbWVycworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAgICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlJlYXNzb2NUaW1lciwgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCAgICAgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICAgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAgICAgICAmQ2FuY2VsbGVkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkvL1JUVVNCQ2xlYW5VcE1MTUVXYWl0UXVldWUocEFkKTsJLyogbm90IHVzZWQgaW4gUlQyOHh4ICovCisJCVJUVVNCQ2xlYW5VcE1MTUVCdWxrT3V0UXVldWUocEFkKTsKKworCQkvLyBTb21ldGltZXMga2VybmVsIHdpbGwgaGFuZyBvbiwgc28gd2UgYXZvaWQgY2FsbGluZyBNbG1lU3VzcGVuZCgpLgorLy8JCU1sbWVTdXNwZW5kKHBBZCwgVFJVRSk7CisJCS8vUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJLy8gRGlzYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgYnVsayBpbi9vdXQgSVJQcyBiZWZvcmUgd2UgZ28gb24uCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQkvKiBwQWQtPlBlbmRpbmdSeCBpcyBub3Qgb2YgdHlwZSBhdG9taWNfdCBhbnltb3JlIGluIDI4eHggKi8KKy8vCQl3aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXdoaWxlICgocEFkLT5QZW5kaW5nUnggPiAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXsKKyNpZiAxCisJCQlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisjZWxzZQorCQkJTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisjZW5kaWYKKwkJCS8qIGRlbGF5IDAuNSBzZWNvbmRzICovCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCX0KKwkJLyogcGV0ZXIgOiB3aHkgZG9uJ3Qgd2UgaGF2ZSB0byBnZXQgQnVsa091dExvY2sgZmlyc3QgPyAqLworCQl3aGlsZSAoKChwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMV0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1syXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzNdID09IFRSVUUpKSAmJiAocEFkLT5CdWxrRmxhZ3MgIT0gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl7CisJCQlkbworCQkJeworCQkJCS8qIHBBZC0+QnVsa091dFBlbmRpbmdbeV0gd2lsbCBiZSBzZXQgdG8gRkFMU0UgaW4gUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpICovCisJCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJfSB3aGlsZSAoRkFMU0UpOworCisJCQkvKiB3ZSBoYXZlIGVub3VnaCB0aW1lIGRlbGF5IGluIFJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKQorCQkJKiogc28gdGhpcyBpcyBub3QgbmVjZXNzYXJ5CisJCQkqLworLy8JCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQkvKiBwQWQtPlBlbmRpbmdSeCBpcyBub3Qgb2YgdHlwZSBhdG9taWNfdCBhbnltb3JlIGluIDI4eHggKi8KKy8vCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA9PSAwKTsKKwkJQVNTRVJUKHBBZC0+UGVuZGluZ1J4ID09IDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCQkvLyByZXNldCBSeCBzdGF0aXN0aWNzLgorCQlwQWQtPmF0ZS5MYXN0U05SMCA9IDA7CisJCXBBZC0+YXRlLkxhc3RTTlIxID0gMDsKKwkJcEFkLT5hdGUuTGFzdFJzc2kwID0gMDsKKwkJcEFkLT5hdGUuTGFzdFJzc2kxID0gMDsKKwkJcEFkLT5hdGUuTGFzdFJzc2kyID0gMDsKKwkJcEFkLT5hdGUuQXZnUnNzaTAgPSAwOworCQlwQWQtPmF0ZS5BdmdSc3NpMSA9IDA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kyID0gMDsKKwkJcEFkLT5hdGUuQXZnUnNzaTBYOCA9IDA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kxWDggPSAwOworCQlwQWQtPmF0ZS5BdmdSc3NpMlg4ID0gMDsKKwkJcEFkLT5hdGUuTnVtT2ZBdmdSc3NpU2FtcGxlID0gMDsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCS8vIFR4IGZyYW1lCisJCXBBZC0+YXRlLmJRQVR4U3RhcnQgPSBGQUxTRTsKKwkJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOworCQlwQWQtPmF0ZS5zZXEgPSAwOworCisJCS8vIGNvdW50ZXJzCisJCXBBZC0+YXRlLlUyTSA9IDA7CisJCXBBZC0+YXRlLk90aGVyRGF0YSA9IDA7CisJCXBBZC0+YXRlLkJlYWNvbiA9IDA7CisJCXBBZC0+YXRlLk90aGVyQ291bnQgPSAwOworCQlwQWQtPmF0ZS5UeEFjMCA9IDA7CisJCXBBZC0+YXRlLlR4QWMxID0gMDsKKwkJcEFkLT5hdGUuVHhBYzIgPSAwOworCQlwQWQtPmF0ZS5UeEFjMyA9IDA7CisJCXBBZC0+YXRlLlR4SENDQSA9IDA7CisJCXBBZC0+YXRlLlR4TWdtdCA9IDA7CisJCXBBZC0+YXRlLlJTU0kwID0gMDsKKwkJcEFkLT5hdGUuUlNTSTEgPSAwOworCQlwQWQtPmF0ZS5SU1NJMiA9IDA7CisJCXBBZC0+YXRlLlNOUjAgPSAwOworCQlwQWQtPmF0ZS5TTlIxID0gMDsKKworCQkvLyBjb250cm9sCisJCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKwkJcEFkLT5hdGUuVHhTdGF0dXMgPSAwOyAvLyB0YXNrIFR4IHN0YXR1cyAvLyAwIC0tPiB0YXNrIGlzIGlkbGUsIDEgLS0+IHRhc2sgaXMgcnVubmluZworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisKKwkJLy8gU29mdCByZXNldCBCQlAuCisJCUJicFNvZnRSZXNldChwQWQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQXNpY0Rpc2FibGVTeW5jKHBBZCk7CisKKwkJLyoKKwkJKiogSWYgd2Ugc2tpcCAiTGlua0Rvd24oKSIsIHdlIHNob3VsZCBkaXNhYmxlIHByb3RlY3Rpb24KKwkJKiogdG8gcHJldmVudCBmcm9tIHNlbmRpbmcgb3V0IFJUUyBvciBDVFMtdG8tc2VsZi4KKwkJKi8KKwkJQVRFRGlzYWJsZUFzaWNQcm90ZWN0KHBBZCk7CisJCVJUTVBTdGF0aW9uU3RvcChwQWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCS8vIERlZmF1bHQgdmFsdWUgaW4gQkJQIFIyMiBpcyAweDAuCisJCUJicERhdGEgPSAwOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCisJCS8vIENsZWFuIGJpdDQgdG8gc3RvcCBjb250aW51b3VzIFR4IHByb2R1Y3Rpb24gdGVzdC4KKwkJTWFjRGF0YSAmPSAweEZGRkZGRkVGOworCSAgIAlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkgICAgCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisJCS8vQ2xlYW4gQVRFIEJ1bGsgaW4vb3V0IGNvdW50ZXIgYW5kIGNvbnRpbnVlIHNldHVwCisJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCAwKTsKKworCQkvKiBOZGlzQWNxdWlyZVNwaW5Mb2NrKCkvTmRpc1JlbGVhc2VTcGluTG9jaygpIG5lZWQgb25seSBvbmUgYXJndW1lbnQgaW4gUlQyOHh4ICovCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfQVRFKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJBVEVTVE9QIikpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEUgOiBBVEVTVE9QID09PT5cbiIpKTsKKworCQkvLyBEZWZhdWx0IHZhbHVlIGluIEJCUCBSMjIgaXMgMHgwLgorCQlCYnBEYXRhID0gMDsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsvLzA4MjAKKwkJLy8gQ2xlYW4gYml0NCB0byBzdG9wIGNvbnRpbnVvdXMgVHggcHJvZHVjdGlvbiB0ZXN0LgorCQlNYWNEYXRhICY9IDB4RkZGRkZGRUY7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIE1hY0RhdGEpOyAvLyByZWNvdmVyIHRoZSBNQUNfU1lTX0NUUkwgcmVnaXN0ZXIgYmFjay4KKworCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8qCisJCSoqIEFib3J0IFR4LCBSWCBETUEuCisJCSoqIFEgICA6IEhvdyB0byBkbyB0aGUgZm9sbG93aW5nIEkvTyBpZiBUeCwgUnggRE1BIGlzIGFib3J0ZWQgPworCQkqKiBBbnMgOiBCdWxrIGVuZHBvaW50cyBhcmUgYWJvcnRlZCwgd2hpbGUgdGhlIGNvbnRyb2wgZW5kcG9pbnQgaXMgbm90LgorCQkqLworCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJLy8gRGlzYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgYnVsayBpbi9vdXQgSVJQcyBiZWZvcmUgd2UgZ28gb24uICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLy8JCXdoaWxlICgoYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJd2hpbGUgKHBBZC0+UGVuZGluZ1J4ID4gMCkKKwkJeworI2lmIDEKKwkJCUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKyNlbHNlCisvLwkJCU5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworCQkJcEFkLT5QZW5kaW5nUngtLTsKKyNlbmRpZgorCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJd2hpbGUgKCgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzFdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMl0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1szXSA9PSBUUlVFKSkgJiYgKHBBZC0+QnVsa0ZsYWdzICE9IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJeworCQkJZG8KKwkJCXsKKwkJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7CisJCQl9IHdoaWxlIChGQUxTRSk7CisKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMDAwKTsKKwkJfQorCisvLwkJQVNTRVJUKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPT0gMCk7CisJCUFTU0VSVChwQWQtPlBlbmRpbmdSeCA9PSAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgIFJlc2V0IFJ4IFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8vCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPlBlbmRpbmdSeCwgMCk7CisJCXBBZC0+UGVuZGluZ1J4ID0gMDsKKwkJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXggPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwkJcEFkLT5OZXh0UnhCdWxrSW5JbmRleCA9IFJYX1JJTkdfU0laRSAtIDE7CS8vIFJ4IEJ1bGsgcG9pbnRlcgorCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCXsKKwkJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisJCQlOZGlzWmVyb01lbW9yeShwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgTUFYX1JYQlVMS19TSVpFKTsKKwkJCS8qIHBldGVyIDogd2h5IGRvbid0IHdlIGhhdmUgdG8gZ2V0IEJ1bGtJbkxvY2sgZmlyc3QgPyAqLworCQkJcFJ4Q29udGV4dC0+cEFkCT0gcEFkOworCQkJcFJ4Q29udGV4dC0+cElycCA9IE5VTEw7CisgICAgICAgICAgICAvKiBwZXRlciBkZWJ1ZyArKyAqLworCQkJcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0ID0gMDsKKwkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gRkFMU0U7CisgICAgICAgICAgICAvKiBwZXRlciBkZWJ1ZyAtLSAqLworCQkJcFJ4Q29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nCT0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5SZWFkYWJsZQk9IEZBTFNFOworLy8JCQlwUnhDb250ZXh0LT5SZW9yZGVySW5Vc2UgPSBGQUxTRTsKKy8vCQkJcFJ4Q29udGV4dC0+UmVhZFBvc09mZnNldCA9IDA7CisJCX0KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qICAgICAgUmVzZXQgVHggUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQlkbworCQl7CisJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7CisJCX0gd2hpbGUgKEZBTFNFKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLy8gRW5hYmxlIGF1dG8gcmVzcG9uZGVyLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIEFVVE9fUlNQX0NGRywgJnRlbXApOworCQl0ZW1wID0gdGVtcCB8ICgweDAxKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCB0ZW1wKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQlBc2ljRW5hYmxlQnNzU3luYyhwQWQpOworCisJCS8qIFNvZnQgcmVzZXQgQkJQLiovCisJCS8qIEluIDI4NzAgY2hpcHNldCwgQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoKSA9PSBSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoKSAqLworCQkvKiBCb3RoIHJ0Mjg3MGFwIGFuZCBydDI4NzBzdGEgdXNlIEJicFNvZnRSZXNldChwQWQpIHRvIGRvIEJCUCBzb2Z0IHJlc2V0ICovCisJCUJicFNvZnRSZXNldChwQWQpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkvLyBTZXQgYWxsIHN0YXRlIG1hY2hpbmVzIGJhY2sgSURMRQorCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IENOVExfSURMRTsKKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlICAgPSBBU1NPQ19JRExFOworCQkJcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IEFVVEhfUkVRX0lETEU7CisJCQlwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SU1BfSURMRTsKKwkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgICAgPSBTWU5DX0lETEU7CisJCQlwQWQtPk1sbWUuQWN0TWFjaGluZS5DdXJyU3RhdGUgICAgPSBBQ1RfSURMRTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJLy8KKwkJCS8vID09PT4gcmVmZXIgdG8gTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUoKS4KKwkJCS8vIFdoZW4gd2UgZW50ZXJlZCBBVEVfU1RBUlQgbW9kZSwgUGVyaW9kaWNUaW1lciB3YXMgbm90IGNhbmNlbGxlZC4KKwkJCS8vIFNvIHdlIGRvbid0IGhhdmUgdG8gc2V0IGl0IGhlcmUuCisJCQkvLworCQkJLy9SVE1QU2V0VGltZXIocEFkLCAmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsIE1MTUVfVEFTS19FWEVDX0lOVFYpOworCisJCQlBU1NFUlQocEFkLT5Db21tb25DZmcuQ2hhbm5lbCAhPSAwKTsKKworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCSAgICBSVE1QU3RhdGlvblN0YXJ0KHBBZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKy8vCisvLyBUaGVzZSB0d28gc3RlcHMgaGF2ZSBiZWVuIGRvbmUgd2hlbiBlbnRlcmluZyBBVEVfU1RPUCBtb2RlLgorLy8KKwkJLy8gQ2xlYW4gQVRFIEJ1bGsgaW4vb3V0IGNvdW50ZXIgYW5kIGNvbnRpbnVlIHNldHVwLgorCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgMCk7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJLyogV2FpdCA1MG1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBkdXJpbmcgSFcgcmVzZXQuICovCisJCS8qIHRvZG8gOiByZW1vdmUgdGhpcyBpZiBub3QgbmVjZXNzYXJ5ICovCisJCU5kaXNNU2xlZXAoNTAwMDApOworCisJCXBBZC0+YXRlLk1vZGUgPSBBVEVfU1RPUDsKKworCQkvLyBFbmFibGUgVHgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlIHw9ICgxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLyogcmVzdG9yZSBSWF9GSUxUUl9DRkcgKi8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJLyogcmVzdG9yZSBSWF9GSUxUUl9DRkcgaW4gb3JkZXIgdGhhdCBRQSBtYXliZSBzZXQgaXQgdG8gMHgzICovCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKwkJLy8gRW5hYmxlIFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvLyBFbmFibGUgUngKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlIHw9ICgxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBXYWl0IDEwbXMgdG8gd2FpdCBhbGwgb2YgdGhlIGJ1bGstaW4gVVJCcyB0byBjb21wbGV0ZS4KKwkJLyogdG9kbyA6IHJlbW92ZSB0aGlzIGlmIG5vdCBuZWNlc3NhcnkgKi8KKwkJTmRpc01TbGVlcCgxMDAwMCk7CisKKwkJLy8gRXZlcnl0aGluZyBpcyByZWFkeSB0byBzdGFydCBub3JtYWwgVHgvUnguCisJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJbmV0aWZfc3RhcnRfcXVldWUocEFkLT5uZXRfZGV2KTsKKworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09IEFURSA6IEFURVNUT1AgXG4iKSk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiVFhDQVJSIikpCS8vIFR4IENhcnJpZXIKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogVFhDQVJSXG4iKSk7CisJCXBBZC0+YXRlLk1vZGUgfD0gQVRFX1RYQ0FSUjsKKworI2lmZGVmIFJUMzB4eAorCQkJZm9yKGk9MDtpPEFURV9CQlBfUkVHX05VTTtpKyspCisJCQkJcmVzdG9yZV9CQlBbaV09MDsKKwkJCS8vUmVjb3JkIEFsbCBCQlAgVmFsdWUKKwkJCWZvcihpPTA7aTxBVEVfQkJQX1JFR19OVU07aSsrKQorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLGksJnJlc3RvcmVfQkJQW2ldKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworCQkvLyBEaXNhYmxlIFJ4CisJCS8vIE1heSBiZSB3ZSBuZWVkIG5vdCB0byBkbyB0aGlzLCBiZWNhdXNlIHRoZXNlIGhhdmUgYmVlbiBkb25lIGluIEFURV9TVEFSVCBtb2RlID8/PworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBRQSBoYXMgZG9uZSB0aGUgZm9sbG93aW5nIHN0ZXBzIGlmIGl0IGlzIHVzZWQuCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IEZBTFNFKQorCQl7CisJCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJCUJicFNvZnRSZXNldChwQWQpOworCisJCQkvLyBDYXJyaWVyIFRlc3Qgc2V0IEJCUCBSMjIgYml0Nz0xLCBiaXQ2PTEsIGJpdFs1fjBdPTB4MDEKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSAweEZGRkZGRjAwOyAvL2NsZWFyIGJpdDcsIGJpdDYsIGJpdFs1fjBdCisJCQlCYnBEYXRhIHw9IDB4MDAwMDAwQzE7IC8vc2V0IGJpdDc9MSwgYml0Nj0xLCBiaXRbNX4wXT0weDAxCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKworCQkJLy8gc2V0IE1BQ19TWVNfQ1RSTCgweDEwMDQpIENvbnRpbnVvdXMgVHggUHJvZHVjdGlvbiBUZXN0IChiaXQ0KSA9IDEKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQkJVmFsdWUgPSBWYWx1ZSB8IDB4MDAwMDAwMTA7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKwkJfQorCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIlRYQ09OVCIpKQkvLyBUeCBDb250aW51ZQorCXsKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLyogc2V0IE1BQ19TWVNfQ1RSTCgweDEwMDQpIGJpdDQoQ29udGludW91cyBUeCBQcm9kdWN0aW9uIFRlc3QpCisJCQkgICBhbmQgYml0MihNQUMgVFggZW5hYmxlKSBiYWNrIHRvIHplcm8uICovCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQkJTWFjRGF0YSAmPSAweEZGRkZGRkVCOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworCQkJLy8gc2V0IEJCUCBSMjIgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkY3RjsgLy9zZXQgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJfQorCisJCS8qIGZvciBUeENvbnQgbW9kZS4KKwkJKiogU3RlcCAxOiBTZW5kIDUwIHBhY2tldHMgZmlyc3QgdGhlbiB3YWl0IGZvciBhIG1vbWVudC4KKwkJKiogU3RlcCAyOiBTZW5kIG1vcmUgNTAgcGFja2V0IHRoZW4gc3RhcnQgY29udGludWUgbW9kZS4KKwkJKi8KKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBUWENPTlRcbiIpKTsKKworI2lmZGVmIFJUMzB4eAorCQkJCWZvcihpPTA7aTxBVEVfQkJQX1JFR19OVU07aSsrKQorCQkJCXJlc3RvcmVfQkJQW2ldPTA7CisJCQkvL1JlY29yZCBBbGwgQkJQIFZhbHVlCisJCQlmb3IoaT0wO2k8QVRFX0JCUF9SRUdfTlVNO2krKykKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCxpLCZyZXN0b3JlX0JCUFtpXSk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkJLy8gU3RlcCAxOiBzZW5kIDUwIHBhY2tldHMgZmlyc3QuCisJCXBBZC0+YXRlLk1vZGUgfD0gQVRFX1RYQ09OVDsKKwkJcEFkLT5hdGUuVHhDb3VudCA9IDUwOworCQlwQWQtPmF0ZS5UeERvbmVDb3VudCA9IDA7CisKKwkJLy8gU29mdCByZXNldCBCQlAuCisJCUJicFNvZnRSZXNldChwQWQpOworCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCisJCS8qIE9ubHkgbmVlZGVkIGlmIHdlIGhhdmUgdG8gc2VuZCBzb21lIG5vcm1hbCBmcmFtZXMuICovCisJCVNldEphcGFuRmlsdGVyKHBBZCk7CisKKwkJLy8gU2V0dXAgZnJhbWUgZm9ybWF0LgorCQlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBTdGFydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisKKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5CdWxrT3V0UmVtYWluZWQsIHBBZC0+YXRlLlR4Q291bnQpOworCisjaWZkZWYJUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEFkLT5hdGUuVHhTdGF0dXMgPSAxOworCQkJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCQl9CisjZW5kaWYJLy8gUkFMSU5LXzI4eHhfUUEgLy8KKworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsvLzA4MjAKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpOworCisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisJCS8qIFRvIG1ha2Ugc3VyZSBhbGwgdGhlIDUwIGZyYW1lcyBoYXZlIGJlZW4gYnVsayBvdXQgYmVmb3JlIGV4ZWN1dGluZyBzdGVwIDIgKi8KKwkJd2hpbGUgKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPiAwKQorCQl7CisJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQl9CisKKwkJLy8gU3RlcCAyOiBzZW5kIG1vcmUgNTAgcGFja2V0cyB0aGVuIHN0YXJ0IGNvbnRpbnVlIG1vZGUuCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCQkvLyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTEKKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCUJicERhdGEgfD0gMHgwMDAwMDA4MDsgLy9zZXQgYml0Nz0xCisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCisJCXBBZC0+YXRlLlR4Q291bnQgPSA1MDsKKwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSAwOworCisJCVNldEphcGFuRmlsdGVyKHBBZCk7CisKKwkJLy8gU2V0dXAgZnJhbWUgZm9ybWF0LgorCQlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCisJCS8vIFN0YXJ0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgcEFkLT5hdGUuVHhDb3VudCk7CisKKyNpZmRlZglSQUxJTktfMjh4eF9RQQorCQlpZiAocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKQorCQl7CisJCQlwQWQtPmF0ZS5UeFN0YXR1cyA9IDE7CisJCQkvL3BBZC0+YXRlLlJlcGVhdCA9IDA7CisJCX0KKyNlbmRpZgkvLyBSQUxJTktfMjh4eF9RQSAvLworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOy8vMDgyMAorCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisjaWYgMQorCQlSVE1QdXNlY0RlbGF5KDUwMCk7CisjZWxzZQorCQl3aGlsZSAoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+IDApCisJCXsKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCX0KKyNlbmRpZiAvLyAxIC8vCisKKwkJLy8gU2V0IE1BQ19TWVNfQ1RSTCgweDEwMDQpIENvbnRpbnVvdXMgVHggUHJvZHVjdGlvbiBUZXN0IChiaXQ0KSA9IDEuCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmTWFjRGF0YSk7CisJCU1hY0RhdGEgfD0gMHgwMDAwMDAxMDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJUWEZSQU1FIikpCS8vIFR4IEZyYW1lcworCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBUWEZSQU1FKENvdW50PTB4JTA4eClcbiIsIHBBZC0+YXRlLlR4Q291bnQpKTsKKwkJcEFkLT5hdGUuTW9kZSB8PSBBVEVfVFhGUkFNRTsKKworCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJQmJwU29mdFJlc2V0KHBBZCk7CisKKwkJLy8gRGVmYXVsdCB2YWx1ZSBpbiBCQlAgUjIyIGlzIDB4MC4KKwkJQmJwRGF0YSA9IDA7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKworCQkvLyBDbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKworCSAgIAlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCS8vIGFkZCB0aGlzIGZvciBMb29wQmFjayBtb2RlCisJCWlmIChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IEZBTFNFKQorCQl7CisJCQkvLyBEaXNhYmxlIFJ4CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJCVZhbHVlICY9IH4oMSA8PCAzKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCQl9CisKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEFkLT5hdGUuVHhTdGF0dXMgPSAxOworCQkJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCQl9CisjZWxzZQorCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKyAgICAgICAgU2V0SmFwYW5GaWx0ZXIocEFkKTsKKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSAwOworCisgICAgICAgIC8vIFNldHVwIGZyYW1lIGZvcm1hdAorCQlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwkJLy8gU3RhcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDEpOworCisJCS8vIENoZWNrIGNvdW50IGlzIGNvbnRpbnVvdXMgb3Igbm90IHlldC4KKwkJLy8KKwkJLy8gRHVlIHRvIHRoZSB0eXBlIG1pc21hdGNoIGJldHdlZW4gInBBZC0+QnVsa091dFJlbWFpbmVkIihhdG9taWNfdCkgYW5kICJwQWQtPmF0ZS5UeENvdW50IihVSU5UMzIpCisJCS8vCisJCWlmIChwQWQtPmF0ZS5UeENvdW50ID09IDApCisJCXsKKwkJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCAwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCBwQWQtPmF0ZS5UeENvdW50KTsKKwkJfQorCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJidWxrIG91dCBjb3VudCA9ICVkXG4iLCBhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpKSk7CisJCUFTU0VSVCgoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+PSAwKSk7CisKKwkJaWYgKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPT0gMCkKKwkJeworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBwYWNrZXQgY291bnRpbnVvdXNseVxuIikpOworCisJCQkvKiBJbiAyOHh4LCBOZGlzQWNxdWlyZVNwaW5Mb2NrKCkgPT0gc3Bpbl9sb2NrX2JoKCkgKi8KKwkJCS8qIE5kaXNBY3F1aXJlU3BpbkxvY2sgb25seSBuZWVkIG9uZSBhcmd1bWVudCBpbiAyOHh4LiAqLworCQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisJCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBUUlVFOworCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJCS8qIEluIDI4eHgsIEJVTEtfT1VUX0xPQ0soKSA9PSBzcGluX2xvY2tfaXJxc2F2ZSgpICovCisJCQlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7Ly8gcGV0ZXIgOiBOZGlzQWNxdWlyZVNwaW5Mb2NrID09PiBCVUxLX09VVF9MT0NLCisJCQlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gRkFMU0U7CisJCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsvLyBwZXRlciA6IE5kaXNBY3F1aXJlU3BpbkxvY2sgPT0+IEJVTEtfT1VUX0xPQ0sKKwkJfQorCQllbHNlCisJCXsKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgcGFja2V0cyBkZXBlbmQgb24gY291bnRlclxuIikpOworCisJCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKwkJCXBBZC0+Q29udGluQnVsa091dCA9IEZBTFNFOworCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQl9CisKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisKKwkJLy8gS2ljayBidWxrIG91dAorCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisJfQorI2lmZGVmIFJBTElOS18yOHh4X1FBCisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJUWFNUT1AiKSkgCQkvL0VudGVyIEFURSBtb2RlIGFuZCBzZXQgVHgvUnggSWRsZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBUWFNUT1BcbiIpKTsKKworCQlhdGVtb2RlID0gcEFkLT5hdGUuTW9kZTsKKwkJcEFkLT5hdGUuTW9kZSAmPSBBVEVfVFhTVE9QOworCQlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisvLwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSBwQWQtPmF0ZS5UeENvdW50OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQlpZiAoYXRlbW9kZSAmIEFURV9UWENBUlIpCisJCXsKKwkJCS8vIE5vIENhcnJpZXIgVGVzdCBzZXQgQkJQIFIyMiBiaXQ3PTAsIGJpdDY9MCwgYml0WzV+MF09MHgwCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkYwMDsgLy9jbGVhciBiaXQ3LCBiaXQ2LCBiaXRbNX4wXQorCQkgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCX0KKwkJZWxzZSBpZiAoYXRlbW9kZSAmIEFURV9UWENBUlJTVVBQKQorCQl7CisJCQkvLyBObyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTAKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSB+KDEgPDwgNyk7IC8vc2V0IGJpdDc9MAorCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisKKwkJCS8vIE5vIENhcnJpZXIgU3VwcHJlc3Npb24gc2V0IEJCUCBSMjQgYml0MD0wCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkZGRTsgLy9jbGVhciBiaXQwCisJCSAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCBCYnBEYXRhKTsKKwkJfQorCQllbHNlIGlmICgoYXRlbW9kZSAmIEFURV9UWEZSQU1FKSB8fCAoYXRlbW9kZSA9PSBBVEVfU1RPUCkpCisJCXsKKwkJCWlmIChhdGVtb2RlICYgQVRFX1RYQ09OVCkKKwkJCXsKKwkJCQkvLyBObyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTAKKwkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCQlCYnBEYXRhICY9IH4oMSA8PCA3KTsgLy9zZXQgYml0Nz0wCisJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCQl9CisJCX0KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cyhwQWQpOworCQlSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKHBBZCk7CisKKwkJLyogbm90IHVzZWQgaW4gUlQyOHh4ICovCisJCS8vUlRVU0JDbGVhblVwTUxNRVdhaXRRdWV1ZShwQWQpOworCQkvKiBlbXB0eSBmdW5jdGlvbiBzbyBmYXIgKi8KKwkJUlRVU0JDbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZShwQWQpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLy8gQWJvcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCQkvKiBJbiAyOHh4LCBwQWQtPlBlbmRpbmdSeCBpcyBub3Qgb2YgdHlwZSBhdG9taWNfdCBhbnltb3JlICovCisvLwkJd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQkvKiBwZXRlciB0b2RvIDogQnVsa0luTG9jayAqLworCQl3aGlsZSAocEFkLT5QZW5kaW5nUnggPiAwKQorCQl7CisjaWYgMQorCQkJQVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworI2Vsc2UKKy8vCQkJTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisJCQlwQWQtPlBlbmRpbmdSeC0tOworI2VuZGlmCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQl3aGlsZSAoKChwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMV0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1syXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzNdID09IFRSVUUpKSAmJiAocEFkLT5CdWxrRmxhZ3MgIT0gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl7CisJCQlkbworCQkJeworCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwkJCX0gd2hpbGUgKEZBTFNFKTsKKworCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJQVNTRVJUKHBBZC0+UGVuZGluZ1J4ID09IDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLy8gRW5hYmxlIFR4LCBSeCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvKiB0YXNrIFR4IHN0YXR1cyA6IDAgLS0+IHRhc2sgaXMgaWRsZSwgMSAtLT4gdGFzayBpcyBydW5uaW5nICovCisJCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKKworCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJQmJwU29mdFJlc2V0KHBBZCk7CisKKwkJLy8gRGlzYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQlNYWNEYXRhICY9ICgweGZmZmZmZmZiKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworCQkvL0NsZWFuIEFURSBCdWxrIGluL291dCBjb3VudGVyIGFuZCBjb250aW51ZSBzZXR1cAorCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgMCk7CisKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiUlhTVE9QIikpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEU6IFJYU1RPUFxuIikpOworCQlhdGVtb2RlID0gcEFkLT5hdGUuTW9kZTsKKworCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCXBBZC0+YXRlLk1vZGUgJj0gQVRFX1JYU1RPUDsKKwkJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOworLy8JCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gcEFkLT5hdGUuVHhDb3VudDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cyhwQWQpOworCQlSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKHBBZCk7CisKKwkJLyogbm90IHVzZWQgaW4gUlQyOHh4ICovCisJCS8vUlRVU0JDbGVhblVwTUxNRVdhaXRRdWV1ZShwQWQpOworCQlSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKHBBZCk7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvLwkJd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkpCisJCXdoaWxlIChwQWQtPlBlbmRpbmdSeCA+IDApCisJCXsKKyNpZiAxCisJCQlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisjZWxzZQorLy8JCQlOZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsKKwkJCXBBZC0+UGVuZGluZ1J4LS07CisjZW5kaWYKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMDAwKTsKKwkJfQorCisJCXdoaWxlICgoKHBBZC0+QnVsa091dFBlbmRpbmdbMF0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1sxXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzJdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbM10gPT0gVFJVRSkpICYmIChwQWQtPkJ1bGtGbGFncyAhPSAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXsKKwkJCWRvCisJCQl7CisJCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJfSB3aGlsZSAoRkFMU0UpOworCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQlBU1NFUlQocEFkLT5QZW5kaW5nUnggPT0gMCk7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisJCS8vIFNvZnQgcmVzZXQgQkJQLgorCQlCYnBTb2Z0UmVzZXQocEFkKTsKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwllbHNlIGlmICghc3RyY21wKGFyZywgIlJYRlJBTUUiKSkgLy8gUnggRnJhbWVzCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEU6IFJYRlJBTUVcbiIpKTsKKworCQkvLyBEaXNhYmxlIFJ4IG9mIE1BQyBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBEZWZhdWx0IHZhbHVlIGluIEJCUCBSMjIgaXMgMHgwLgorCQlCYnBEYXRhID0gMDsKKworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQkvLyBDbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKworCSAgIAlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworCQlwQWQtPmF0ZS5Nb2RlIHw9IEFURV9SWEZSQU1FOworCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCQkvLyBEaXNhYmxlIFRYIG9mIE1BQyBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworICAgICAgICAvLyBSZXNldCBSeCBSSU5HLgorCQlmb3IgKCBpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCXsKKwkJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisKKwkJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IEZBTFNFOworCisJCQkvLworCQkJLy8gR2V0IHRoZSB1cmIgZnJvbSBrZXJuZWwgYmFjayB0byBkcml2ZXIuCisJCQkvLworCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKworCQkJLyogU2xlZXAgMjAwIG1pY3Jvc2VjcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsuICovCisJCQlOZGlzTVNsZWVwKDIwMCk7CisJCQlwQWQtPkJ1bGtJblJlcSA9IDA7CisKKy8vCQkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5QZW5kaW5nUngsIDApOworCQkJcEFkLT5QZW5kaW5nUnggPSAwOworCQkJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXggPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgJCT0gUlhfUklOR19TSVpFIC0gMTsJLy8gUnggQnVsayBwb2ludGVyCisJCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gMDsKKwkJfQorCisJCS8vIHJlYWQgdG8gY2xlYXIgY291bnRlcnMKKwkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBSWF9TVEFfQ05UMCwgJnRlbXApOyAvL1JYIFBIWSAmIFJYIENSQyBjb3VudAorCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFJYX1NUQV9DTlQxLCAmdGVtcCk7IC8vUlggUExDUCBlcnJvciBjb3VudCAmIENDQSBmYWxzZSBhbGFybSBjb3VudAorCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFJYX1NUQV9DTlQyLCAmdGVtcCk7IC8vUlggRklGTyBvdmVyZmxvdyBmcmFtZSBjb3VudCAmIFJYIGR1cGxpY2F0ZWQgZmlsdGVyZWQgZnJhbWUgY291bnQKKworCQlwQWQtPkNvbnRpbkJ1bGtJbiA9IFRSVUU7CisKKwkJLy8gRW5hYmxlIFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvLyBFbmFibGUgUlggb2YgTUFDIGJsb2NrCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gS2ljayBidWxrIGluCisJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwl9CisJZWxzZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBJbnZhbGlkIGFyZyFcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlSVE1QdXNlY0RlbGF5KDUwMDApOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBBVEVDbWRIYW5kbGVyKClcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCitJTlQJU2V0X0FURV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlpZiAoQVRFQ21kSGFuZGxlcihwQWQsIGFyZykpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1Byb2MgRmFpbGVkXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBBRERSMT1EQSBmb3IgVHhGcmFtZShBUCAgOiBUbyBEUyA9IDAgOyBGcm9tIERTID0gMSkKKyAgICAgICAgb3IKKyAgICAgICAgU2V0IEFURSBBRERSMz1EQSBmb3IgVHhGcmFtZShTVEEgOiBUbyBEUyA9IDEgOyBGcm9tIERTID0gMCkKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfREFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUgkJCQkqdmFsdWU7CisJSU5UCQkJCQlpOworCisJaWYoc3RybGVuKGFyZykgIT0gMTcpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNworCQlyZXR1cm4gRkFMU0U7CisKKyAgICBmb3IgKGk9MCwgdmFsdWUgPSByc3RydG9rKGFyZywgIjoiKTsgdmFsdWU7IHZhbHVlID0gcnN0cnRvayhOVUxMLCAiOiIpKQorCXsKKwkJaWYoKHN0cmxlbih2YWx1ZSkgIT0gMikgfHwgKCFpc3hkaWdpdCgqdmFsdWUpKSB8fCAoIWlzeGRpZ2l0KCoodmFsdWUrMSkpKSApCisJCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUF0b0godmFsdWUsICZwQWQtPmF0ZS5BZGRyM1tpKytdLCAxKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKwlpZihpICE9IDYpCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX0RBX1Byb2MgKERBID0gJTJYOiUyWDolMlg6JTJYOiUyWDolMlgpXG4iLCBwQWQtPmF0ZS5BZGRyM1swXSwKKwkJcEFkLT5hdGUuQWRkcjNbMV0sIHBBZC0+YXRlLkFkZHIzWzJdLCBwQWQtPmF0ZS5BZGRyM1szXSwgcEFkLT5hdGUuQWRkcjNbNF0sIHBBZC0+YXRlLkFkZHIzWzVdKSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfREFfUHJvYyBTdWNjZXNzXG4iKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIEFERFIzPVNBIGZvciBUeEZyYW1lKEFQICA6IFRvIERTID0gMCA7IEZyb20gRFMgPSAxKQorICAgICAgICBvcgorICAgICAgICBTZXQgQVRFIEFERFIyPVNBIGZvciBUeEZyYW1lKFNUQSA6IFRvIERTID0gMSA7IEZyb20gRFMgPSAwKQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9TQV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlDSEFSCQkJCSp2YWx1ZTsKKwlJTlQJCQkJCWk7CisKKwlpZihzdHJsZW4oYXJnKSAhPSAxNykgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3CisJCXJldHVybiBGQUxTRTsKKworICAgIGZvciAoaT0wLCB2YWx1ZSA9IHJzdHJ0b2soYXJnLCAiOiIpOyB2YWx1ZTsgdmFsdWUgPSByc3RydG9rKE5VTEwsICI6IikpCisJeworCQlpZigoc3RybGVuKHZhbHVlKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp2YWx1ZSkpIHx8ICghaXN4ZGlnaXQoKih2YWx1ZSsxKSkpICkKKwkJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQXRvSCh2YWx1ZSwgJnBBZC0+YXRlLkFkZHIyW2krK10sIDEpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCWlmKGkgIT0gNikKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfU0FfUHJvYyAoU0EgPSAlMlg6JTJYOiUyWDolMlg6JTJYOiUyWClcbiIsIHBBZC0+YXRlLkFkZHIyWzBdLAorCQlwQWQtPmF0ZS5BZGRyMlsxXSwgcEFkLT5hdGUuQWRkcjJbMl0sIHBBZC0+YXRlLkFkZHIyWzNdLCBwQWQtPmF0ZS5BZGRyMls0XSwgcEFkLT5hdGUuQWRkcjJbNV0pKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9TQV9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgQUREUjI9QlNTSUQgZm9yIFR4RnJhbWUoQVAgIDogVG8gRFMgPSAwIDsgRnJvbSBEUyA9IDEpCisgICAgICAgIG9yCisgICAgICAgIFNldCBBVEUgQUREUjE9QlNTSUQgZm9yIFR4RnJhbWUoU1RBIDogVG8gRFMgPSAxIDsgRnJvbSBEUyA9IDApCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX0JTU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIJCQkJKnZhbHVlOworCUlOVAkJCQkJaTsKKworCWlmKHN0cmxlbihhcmcpICE9IDE3KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcKKwkJcmV0dXJuIEZBTFNFOworCisgICAgZm9yIChpPTAsIHZhbHVlID0gcnN0cnRvayhhcmcsICI6Iik7IHZhbHVlOyB2YWx1ZSA9IHJzdHJ0b2soTlVMTCwgIjoiKSkKKwl7CisJCWlmKChzdHJsZW4odmFsdWUpICE9IDIpIHx8ICghaXN4ZGlnaXQoKnZhbHVlKSkgfHwgKCFpc3hkaWdpdCgqKHZhbHVlKzEpKSkgKQorCQkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlBdG9IKHZhbHVlLCAmcEFkLT5hdGUuQWRkcjFbaSsrXSwgMSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJaWYoaSAhPSA2KQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9CU1NJRF9Qcm9jIChCU1NJRCA9ICUyWDolMlg6JTJYOiUyWDolMlg6JTJYKVxuIiwJcEFkLT5hdGUuQWRkcjFbMF0sCisJCXBBZC0+YXRlLkFkZHIxWzFdLCBwQWQtPmF0ZS5BZGRyMVsyXSwgcEFkLT5hdGUuQWRkcjFbM10sIHBBZC0+YXRlLkFkZHIxWzRdLCBwQWQtPmF0ZS5BZGRyMVs1XSkpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX0JTU0lEX1Byb2MgU3VjY2Vzc1xuIikpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBDaGFubmVsCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX0NIQU5ORUxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgY2hhbm5lbDsKKworCWNoYW5uZWwgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiAyMTYpKS8vIHRvIGFsbG93IEEgYmFuZCBjaGFubmVsIDogKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiAxNCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX0NIQU5ORUxfUHJvYzo6T3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMX4xNC5cbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlwQWQtPmF0ZS5DaGFubmVsID0gY2hhbm5lbDsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfQ0hBTk5FTF9Qcm9jIChBVEUgQ2hhbm5lbCA9ICVkKVxuIiwgcEFkLT5hdGUuQ2hhbm5lbCkpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9DSEFOTkVMX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IFBvd2VyMAorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9QT1dFUjBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiBUeFBvd2VyOworCisJVHhQb3dlciA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwl7CisJCWlmICgoVHhQb3dlciA+IDMxKSB8fCAoVHhQb3dlciA8IDApKQorCQl7CisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgVHhQb3dlcikpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCWVsc2UvLyA1LjVHSHoKKwl7CisJCWlmICgoVHhQb3dlciA+IDE1KSB8fCAoVHhQb3dlciA8IC03KSkKKwkJeworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9QT1dFUjBfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIFR4UG93ZXIpKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKworCXBBZC0+YXRlLlR4UG93ZXIwID0gVHhQb3dlcjsKKwlBVEVUeFB3ckhhbmRsZXIocEFkLCAwKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfUE9XRVIwX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IFBvd2VyMQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9QT1dFUjFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiBUeFBvd2VyOworCisJVHhQb3dlciA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwl7CisJaWYgKChUeFBvd2VyID4gMzEpIHx8IChUeFBvd2VyIDwgMCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgVHhQb3dlcikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCX0KKwllbHNlCisJeworCQlpZiAoKFR4UG93ZXIgPiAxNSkgfHwgKFR4UG93ZXIgPCAtNykpCisJCXsKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfUE9XRVIxX1Byb2M6Ok91dCBvZiByYW5nZSAoVmFsdWU9JWQpXG4iLCBUeFBvd2VyKSk7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisKKwlwQWQtPmF0ZS5UeFBvd2VyMSA9IFR4UG93ZXI7CisJQVRFVHhQd3JIYW5kbGVyKHBBZCwgMSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBBbnRlbm5hCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0FudGVubmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiB2YWx1ZTsKKworCXZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmICgodmFsdWUgPiAyKSB8fCAodmFsdWUgPCAwKSkKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfQW50ZW5uYV9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgdmFsdWUpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IHZhbHVlOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MgKEFudGVubmEgPSAlZClcbiIsIHBBZC0+YXRlLlR4QW50ZW5uYVNlbCkpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUmFsaW5rOiBTZXRfQVRFX1RYX0FudGVubmFfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgUnggQW50ZW5uYQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9SWF9BbnRlbm5hX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIgdmFsdWU7CisKKwl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoKHZhbHVlID4gMykgfHwgKHZhbHVlIDwgMCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1JYX0FudGVubmFfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIHZhbHVlKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSB2YWx1ZTsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jIChBbnRlbm5hID0gJWQpXG4iLCBwQWQtPmF0ZS5SeEFudGVubmFTZWwpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBSRiBmcmVxdWVuY2Ugb2Zmc2V0CisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgUkZGcmVxT2Zmc2V0OworCVVMT05HIFI0OworCisJUkZGcmVxT2Zmc2V0ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKyNpZm5kZWYgUlQzMHh4CisJaWYoUkZGcmVxT2Zmc2V0ID49IDY0KQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA4LzA2OiBLSCBtb2RpZmllZCB0aGUgbGltaXQgb2Ygb2Zmc2V0IHZhbHVlIGZyb20gNjUgdG8gOTUoMHg1RikKKwlpZihSRkZyZXFPZmZzZXQgPj0gOTUpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYzo6T3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMH42My5cbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXBBZC0+YXRlLlJGRnJlcU9mZnNldCA9IFJGRnJlcU9mZnNldDsKKyNpZmRlZiBSVDMweHgKKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCS8vIFNldCBSRiBvZmZzZXQKKwkJVUNIQVIgUkZWYWx1ZTsKKwkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCS8vMjAwOC8wOC8wNjogS0ggbW9kaWZpZWQgInBBZC0+UkZGcmVxT2Zmc2V0IiB0byAicEFkLT5hdGUuUkZGcmVxT2Zmc2V0IgorCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4ODApIHwgcEFkLT5hdGUuUkZGcmVxT2Zmc2V0OworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIChVQ0hBUilSRlZhbHVlKTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKworCQlSNCA9IHBBZC0+YXRlLlJGRnJlcU9mZnNldCA8PCAxNTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRiByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJUjQgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjQgJiAoKH4weDAwMWY4MDAwKSkpOworCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjQ7CisKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYyAoUkZGcmVxT2Zmc2V0ID0gJWQpXG4iLCBwQWQtPmF0ZS5SRkZyZXFPZmZzZXQpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBSRiBCVworCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9CV19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlpbnQgaTsKKwlVQ0hBUiB2YWx1ZSA9IDA7CisJVUNIQVIgQkJQQ3VycmVudEJXOworCisJQkJQQ3VycmVudEJXID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKEJCUEN1cnJlbnRCVyA9PSAwKQorCQlwQWQtPmF0ZS5UeFdJLkJXID0gQldfMjA7CisJZWxzZQorCQlwQWQtPmF0ZS5UeFdJLkJXID0gQldfNDA7CisKKwlpZihwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzIwKQorCXsKKwkJaWYocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworIAkJZm9yIChpPTA7IGk8NTsgaSsrKQorIAkJeworCQkJCWlmIChwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbaV0gIT0gMHhmZmZmZmZmZikKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgcEFkLT5UeDIwTVB3ckNmZ0dCYW5kW2ldKTsKKwkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+VHgyME1Qd3JDZmdBQmFuZFtpXSAhPSAweGZmZmZmZmZmKQorIAkJCXsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0pOworIAkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworIAkJCX0KKyAJCX0KKwkJfQorCisJCS8vU2V0IEJCUCBSNCBiaXRbNDozXT0wOjAKKyAJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmdmFsdWUpOworIAkJdmFsdWUgJj0gKH4weDE4KTsKKyAJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgdmFsdWUpOworCisgIAkJLy9TZXQgQkJQIFI2Nj0weDNDCisgCQl2YWx1ZSA9IDB4M0M7CisgCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCB2YWx1ZSk7CisJCS8vU2V0IEJCUCBSNjg9MHgwQgorCQkvL3RvIGltcHJvdmUgUnggc2Vuc2l0aXZpdHkuCisJCXZhbHVlID0gMHgwQjsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OCwgdmFsdWUpOworCQkvL1NldCBCQlAgUjY5PTB4MTYKKwkJdmFsdWUgPSAweDE2OworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgdmFsdWUpOworCQkvL1NldCBCQlAgUjcwPTB4MDgKKwkJdmFsdWUgPSAweDA4OworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgdmFsdWUpOworCQkvL1NldCBCQlAgUjczPTB4MTEKKwkJdmFsdWUgPSAweDExOworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgdmFsdWUpOworCisJICAgIC8vIElmIENoYW5uZWw9MTQsIEJhbmR3aWR0aD0yME0gYW5kIE1vZGU9Q0NLLCBTZXQgQkJQIFI0IGJpdDU9MQorCSAgICAvLyAoSmFwYW4gZmlsdGVyIGNvZWZmaWNpZW50cykKKwkgICAgLy8gVGhpcyBzZWdtZW50IG9mIGNvZGUgd2lsbCBvbmx5IHdvcmtzIHdoZW4gQVRFVFhNT0RFIGFuZCBBVEVDSEFOTkVMCisJICAgIC8vIHdlcmUgc2V0IHRvIE1PREVfQ0NLIGFuZCAxNCByZXNwZWN0aXZlbHkgYmVmb3JlIEFURVRYQlcgaXMgc2V0IHRvIDAuCisJICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCWlmIChwQWQtPmF0ZS5DaGFubmVsID09IDE0KQorCQl7CisJCQlpbnQgVHhNb2RlID0gcEFkLT5hdGUuVHhXSS5QSFlNT0RFOworCQkJaWYgKFR4TW9kZSA9PSBNT0RFX0NDSykKKwkJCXsKKwkJCQkvLyB3aGVuIENoYW5uZWw9PTE0ICYmIE1vZGU9PUNDSyAmJiBCYW5kV2lkdGg9PTIwTSwgQkJQIFI0IGJpdDU9MQorIAkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJnZhbHVlKTsKKwkJCQl2YWx1ZSB8PSAweDIwOyAvL3NldCBiaXQ1PTEKKyAJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCB2YWx1ZSk7CisJCQl9CisJCX0KKworCSAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyBJZiBiYW5kd2lkdGggIT0gNDBNLCBSRiBSZWc0IGJpdCAyMSA9IDAuCisjaWZkZWYgUlQzMHh4CisJLy8gU2V0IEJXCisJCWlmKElTX1JUMzB4eChwQWQpKQorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCAoVUNIQVIpIHBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0KTsKKwkJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl7CisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgJj0gfjB4MDAyMDAwMDA7CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisKKwl9CisJZWxzZSBpZihwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzQwKQorCXsKKwkJaWYocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaV0gIT0gMHhmZmZmZmZmZikKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgcEFkLT5UeDQwTVB3ckNmZ0dCYW5kW2ldKTsKKwkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpXSAhPSAweGZmZmZmZmZmKQorCQkJCXsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbaV0pOworCQkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQkJCX0KKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmICgocEFkLT5hdGUuVHhXSS5QSFlNT0RFID49IE1PREVfSFRNSVgpICYmIChwQWQtPmF0ZS5UeFdJLk1DUyA9PSA3KSkKKwkJCXsKKyAgICAJCQl2YWx1ZSA9IDB4Mjg7CisgICAgCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NywgdmFsdWUpOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl9CisKKwkJLy9TZXQgQkJQIFI0IGJpdFs0OjNdPTE6MAorCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJnZhbHVlKTsKKwkJdmFsdWUgJj0gKH4weDE4KTsKKwkJdmFsdWUgfD0gMHgxMDsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCB2YWx1ZSk7CisKKwkJLy9TZXQgQkJQIFI2Nj0weDNDCisJCXZhbHVlID0gMHgzQzsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgdmFsdWUpOworCQkvL1NldCBCQlAgUjY4PTB4MEMKKwkJLy90byBpbXByb3ZlIFJ4IHNlbnNpdGl2aXR5LgorCQl2YWx1ZSA9IDB4MEM7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjgsIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI2OT0weDFBCisJCXZhbHVlID0gMHgxQTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgdmFsdWUpOworCQkvL1NldCBCQlAgUjcwPTB4MEEKKwkJdmFsdWUgPSAweDBBOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCB2YWx1ZSk7CisJCS8vU2V0IEJCUCBSNzM9MHgxNgorCQl2YWx1ZSA9IDB4MTY7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIHZhbHVlKTsKKworCQkvLyBJZiBiYW5kd2lkdGggPSA0ME0sIHNldCBSRiBSZWc0IGJpdCAyMSA9IDEuCisjaWZkZWYgUlQzMHh4CisJLy8gU2V0IEJXCisJCWlmKElTX1JUMzB4eChwQWQpKQorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCAoVUNIQVIpIHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0KTsKKwkJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl7CisJCQlwQWQtPkxhdGNoUmZSZWdzLlI0IHw9IDB4MDAyMDAwMDA7CisJCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisJCX0KKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0JXX1Byb2MgKEJCUEN1cnJlbnRCVyA9ICVkKVxuIiwgcEFkLT5hdGUuVHhXSS5CVykpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9UWF9CV19Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBmcmFtZSBsZW5ndGgKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfTEVOR1RIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXBBZC0+YXRlLlR4TGVuZ3RoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKChwQWQtPmF0ZS5UeExlbmd0aCA8IDI0KSB8fCAocEFkLT5hdGUuVHhMZW5ndGggPiAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKSkKKwl7CisJCXBBZC0+YXRlLlR4TGVuZ3RoID0gKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKTsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9MRU5HVEhfUHJvYzo6T3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMjR+JWQuXG4iLCAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jIChUeExlbmd0aCA9ICVkKVxuIiwgcEFkLT5hdGUuVHhMZW5ndGgpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfTEVOR1RIX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IGZyYW1lIGNvdW50CisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0NPVU5UX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXBBZC0+YXRlLlR4Q291bnQgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9DT1VOVF9Qcm9jIChUeENvdW50ID0gJWQpXG4iLCBwQWQtPmF0ZS5UeENvdW50KSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX0NPVU5UX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IGZyYW1lIE1DUworCisgICAgICAgIFJldHVybjoKKyAgICAgICAgCVRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX01DU19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVQ0hBUiBNQ1M7CisJaW50IHJlc3VsdDsKKworCU1DUyA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJcmVzdWx0ID0gQ2hlY2tNQ1NWYWxpZChwQWQtPmF0ZS5UeFdJLlBIWU1PREUsIE1DUyk7CisKKwlpZiAocmVzdWx0ICE9IC0xKQorCXsKKwkJcEFkLT5hdGUuVHhXSS5NQ1MgPSAoVUNIQVIpTUNTOworCX0KKwllbHNlCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX01DU19Qcm9jOjpPdXQgb2YgcmFuZ2UsIHJlZmVyIHRvIHJhdGUgdGFibGUuXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX01DU19Qcm9jIChNQ1MgPSAlZClcbiIsIHBBZC0+YXRlLlR4V0kuTUNTKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX01DU19Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBmcmFtZSBNb2RlCisgICAgICAgIDA6IE1PREVfQ0NLCisgICAgICAgIDE6IE1PREVfT0ZETQorICAgICAgICAyOiBNT0RFX0hUTUlYCisgICAgICAgIDM6IE1PREVfSFRHUkVFTkZJRUxECisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAJVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfTU9ERV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5UeFdJLlBIWU1PREUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYocEFkLT5hdGUuVHhXSS5QSFlNT0RFID4gMykKKwl7CisJCXBBZC0+YXRlLlR4V0kuUEhZTU9ERSA9IDA7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfTU9ERV9Qcm9jOjpPdXQgb2YgcmFuZ2UuIGl0IHNob3VsZCBiZSBpbiByYW5nZSBvZiAwfjNcbiIpKTsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiMDogQ0NLLCAxOiBPRkRNLCAyOiBIVF9NSVgsIDM6IEhUX0dSRUVOX0ZJRUxELlxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9NT0RFX1Byb2MgKFR4TW9kZSA9ICVkKVxuIiwgcEFkLT5hdGUuVHhXSS5QSFlNT0RFKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX01PREVfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgVHggZnJhbWUgR0kKKworICAgICAgICBSZXR1cm46CisgICAgICAgIAlUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9HSV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5UeFdJLlNob3J0R0kgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYocEFkLT5hdGUuVHhXSS5TaG9ydEdJID4gMSkKKwl7CisJCXBBZC0+YXRlLlR4V0kuU2hvcnRHSSA9IDA7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfR0lfUHJvYzo6T3V0IG9mIHJhbmdlXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0dJX1Byb2MgKEdJID0gJWQpXG4iLCBwQWQtPmF0ZS5UeFdJLlNob3J0R0kpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfR0lfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworSU5UCVNldF9BVEVfUlhfRkVSX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXBBZC0+YXRlLmJSeEZlciA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAocEFkLT5hdGUuYlJ4RmVyID09IDEpCisJeworCQlwQWQtPmF0ZS5SeENudFBlclNlYyA9IDA7CisJCXBBZC0+YXRlLlJ4VG90YWxDbnQgPSAwOworCX0KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfUlhfRkVSX1Byb2MgKGJSeEZlciA9ICVkKVxuIiwgcEFkLT5hdGUuYlJ4RmVyKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1JYX0ZFUl9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1JlYWRfUkZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgUlQzMHh4IEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJCS8qIG1vZGlmeSBieSBXWSBmb3IgUmVhZCBSRiBSZWcuIGVycm9yICovCisJCVVDSEFSIFJGVmFsdWU7CisJCUlOVCBpbmRleD0wOworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgrKykKKwkJeworCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBpbmRleCwgKFBVQ0hBUikmUkZWYWx1ZSk7CisJCQlwcmludGsoIlIlZD0lZFxuIixpbmRleCxSRlZhbHVlKTsKKwkJfQorCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgUlQzMHh4IEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlIxID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlIyID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlIzID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlIzKTsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlI0ID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1dyaXRlX1JGMV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJcHJpbnRrKCJXYXJuaW5nISEgUlQzMHh4IERvbid0IFN1cHBvcnRcbiIpOworCQlyZXR1cm4gRkFMU0U7CisKKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlVSU5UMzIgdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTYpOworCisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjEgPSB2YWx1ZTsKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlyZXR1cm4gVFJVRTsKKworfQorCitJTlQgU2V0X0FURV9Xcml0ZV9SRjJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEU8LS0KKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCXByaW50aygiV2FybmluZyEhIFJUMzB4eCBEb24ndCBTdXBwb3J0XG4iKTsKKwkJcmV0dXJuIEZBTFNFOworCisJfQorCWVsc2UKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJVUlOVDMyIHZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDE2KTsKKworCQlwQWQtPkxhdGNoUmZSZWdzLlIyID0gdmFsdWU7CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1dyaXRlX1JGM19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJcHJpbnRrKCJXYXJuaW5nISEgUlQzMHh4IERvbid0IFN1cHBvcnRcbiIpOworCQlyZXR1cm4gRkFMU0U7CisKKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlVSU5UMzIgdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTYpOworCisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSB2YWx1ZTsKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworSU5UIFNldF9BVEVfV3JpdGVfUkY0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCisJaWYoSVNfUlQzMHh4KHBBZCkpCisJeworCQlwcmludGsoIldhcm5pbmchISBSVDMweHggRG9uJ3QgU3VwcG9ydFxuIik7CisJCXJldHVybiBGQUxTRTsKKworCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEUtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisJCVVJTlQzMiB2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxNik7CisKKwkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IHZhbHVlOworCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisJfQorCXJldHVybiBUUlVFOworfQorI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCitJTlQJU0VUX0FURV8zMDcwUkZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiAqdGhpc19jaGFyOworCUNIQVIgKnZhbHVlOworCVVJTlQzMiBSZWcsUkZWYWx1ZTsKKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCXByaW50aygiU0VUX0FURV8zMDcwUkZfUHJvYz0lc1xuIixhcmcpOworCQl0aGlzX2NoYXIgPWFyZzsKKwkJaWYgKCh2YWx1ZSA9IHN0cmNocih0aGlzX2NoYXIsICc6JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisJCVJlZz0gc2ltcGxlX3N0cnRvbCh0aGlzX2NoYXIsIDAsIDE2KTsKKwkJUkZWYWx1ZT0gc2ltcGxlX3N0cnRvbCh2YWx1ZSwgMCwgMTYpOworCQlwcmludGsoIlJGIFJlZ1slZF09JWRcbiIsUmVnLFJGVmFsdWUpOworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSZWcsUkZWYWx1ZSk7CisJfQorCWVsc2UKKwkJcHJpbnRrKCJXYXJuaW5nISEgT25seSAzMDcwIFN1cHBvcnRcbiIpOworCXJldHVybiBUUlVFOworfQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIExvYWQgYW5kIFdyaXRlIEVFUFJPTSBmcm9tIGEgYmluYXJ5IGZpbGUgcHJlcGFyZWQgaW4gYWR2YW5jZS4KKworICAgICAgICBSZXR1cm46CisgICAgICAgIAlUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisjaWZuZGVmIFVDT1MKK0lOVCBTZXRfQVRFX0xvYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUJPT0xFQU4JCSAgICByZXQgPSBGQUxTRTsKKwlQVUNIQVIJCQlzcmMgPSBFRVBST01fQklOX0ZJTEVfTkFNRTsKKwlzdHJ1Y3QgZmlsZQkJKnNyY2Y7CisJSU5UMzIgCQkJcmV0dmFsLCBvcmdmc3VpZCwgb3JnZnNnaWQ7CisgICAJbW1fc2VnbWVudF90CW9yZ2ZzOworCVVTSE9SVCAJCQlXcml0ZUVFUFJPTVsoRUVQUk9NX1NJWkUvMildOworCVVJTlQzMgkJCUZpbGVMZW5ndGggPSAwOworCVVJTlQzMiAJCQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI9PT0+ICVzICh2YWx1ZT0lZClcblxuIiwgX19GVU5DVElPTl9fLCB2YWx1ZSkpOworCisJaWYgKHZhbHVlID4gMCkKKwl7CisJCS8qIHplcm8gdGhlIGUycCBidWZmZXIgKi8KKwkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUilXcml0ZUVFUFJPTSwgRUVQUk9NX1NJWkUpOworCisJCS8qIHNhdmUgdWlkIGFuZCBnaWQgdXNlZCBmb3IgZmlsZXN5c3RlbSBhY2Nlc3MuCisJICAgICoqIHNldCB1c2VyIGFuZCBncm91cCB0byAwIChyb290KQorCSAgICAqLworCQlvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCQlvcmdmc2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCQkvKiBhcyByb290ICovCisJCWN1cnJlbnQtPmZzdWlkID0gY3VycmVudC0+ZnNnaWQgPSAwOworICAgIAlvcmdmcyA9IGdldF9mcygpOworICAgIAlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQlkbworCQl7CisJCQkvKiBvcGVuIHRoZSBiaW4gZmlsZSAqLworCQkJc3JjZiA9IGZpbHBfb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsKKworCQkJaWYgKElTX0VSUihzcmNmKSkKKwkJCXsKKwkJCQlhdGVfcHJpbnQoIiVzIC0gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIF9fRlVOQ1RJT05fXywgLVBUUl9FUlIoc3JjZiksIHNyYyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHRoZSBvYmplY3QgbXVzdCBoYXZlIGEgcmVhZCBtZXRob2QgKi8KKwkJCWlmICgoc3JjZi0+Zl9vcCA9PSBOVUxMKSB8fCAoc3JjZi0+Zl9vcC0+cmVhZCA9PSBOVUxMKSkKKwkJCXsKKwkJCQlhdGVfcHJpbnQoIiVzIC0gJXMgZG9lcyBub3QgaGF2ZSBhIHJlYWQgbWV0aG9kXG4iLCBfX0ZVTkNUSU9OX18sIHNyYyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHJlYWQgdGhlIGZpcm13YXJlIGZyb20gdGhlIGZpbGUgKi5iaW4gKi8KKwkJCUZpbGVMZW5ndGggPSBzcmNmLT5mX29wLT5yZWFkKHNyY2YsCisJCQkJCQkJCQkJICAoUFVDSEFSKVdyaXRlRUVQUk9NLAorCQkJCQkJCQkJCSAgRUVQUk9NX1NJWkUsCisJCQkJCQkJCQkJICAmc3JjZi0+Zl9wb3MpOworCisJCQlpZiAoRmlsZUxlbmd0aCAhPSBFRVBST01fU0laRSkKKwkJCXsKKwkJCQlhdGVfcHJpbnQoIiVzOiBlcnJvciBmaWxlIGxlbmd0aCAoPSVkKSBpbiBlMnAuYmluXG4iLAorCQkJCQkgICBfX0ZVTkNUSU9OX18sIEZpbGVMZW5ndGgpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIHdyaXRlIHRoZSBjb250ZW50IG9mIC5iaW4gZmlsZSB0byBFRVBST00gKi8KKwkJCQlydF9lZV93cml0ZV9hbGwocEFkLCBXcml0ZUVFUFJPTSk7CisJCQkJcmV0ID0gVFJVRTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IHdoaWxlKFRSVUUpOworCisJCS8qIGNsb3NlIGZpcm13YXJlIGZpbGUgKi8KKwkJaWYgKElTX0VSUihzcmNmKSkKKwkJeworCQkJCTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldHZhbCA9IGZpbHBfY2xvc2Uoc3JjZiwgTlVMTCk7CisJCQlpZiAocmV0dmFsKQorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIi0tPiBFcnJvciAlZCBjbG9zaW5nICVzXG4iLCAtcmV0dmFsLCBzcmMpKTsKKworCQkJfQorCQl9CisKKwkJLyogcmVzdG9yZSAqLworCQlzZXRfZnMob3JnZnMpOworCQljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOworCQljdXJyZW50LT5mc2dpZCA9IG9yZ2ZzZ2lkOworCX0KKyAgICBBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI8PT09ICVzIChyZXQ9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHJldCkpOworCisgICAgcmV0dXJuIHJldDsKKworfQorI2Vsc2UKK0lOVCBTZXRfQVRFX0xvYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVTSE9SVCAJCQlXcml0ZUVFUFJPTVsoRUVQUk9NX1NJWkUvMildOworCXN0cnVjdCBpd3JlcQkqd3JxID0gKHN0cnVjdCBpd3JlcSAqKWFyZzsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gJXMgKHdycS0+dS5kYXRhLmxlbmd0aCA9ICVkKVxuXG4iLCBfX0ZVTkNUSU9OX18sIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBFRVBST01fU0laRSkKKwl7CisJCWF0ZV9wcmludCgiJXM6IGVycm9yIGxlbmd0aCAoPSVkKSBmcm9tIGhvc3RcbiIsCisJCQkgICBfX0ZVTkNUSU9OX18sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZS8qICh3cnEtPnUuZGF0YS5sZW5ndGggPT0gRUVQUk9NX1NJWkUpICovCisJeworCQkvKiB6ZXJvIHRoZSBlMnAgYnVmZmVyICovCisJCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpV3JpdGVFRVBST00sIEVFUFJPTV9TSVpFKTsKKworCQkvKiBmaWxsIHRoZSBsb2NhbCBidWZmZXIgKi8KKwkJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUilXcml0ZUVFUFJPTSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQlkbworCQl7CisJCQkJLyogd3JpdGUgdGhlIGNvbnRlbnQgb2YgLmJpbiBmaWxlIHRvIEVFUFJPTSAqLworCQkJCXJ0X2VlX3dyaXRlX2FsbChwQWQsIFdyaXRlRUVQUk9NKTsKKworCQl9IHdoaWxlKEZBTFNFKTsKKwkJfQorCisgICAgQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSAlc1xuIiwgX19GVU5DVElPTl9fKSk7CisKKyAgICByZXR1cm4gVFJVRTsKKworfQorI2VuZGlmIC8vICFVQ09TIC8vCisKK0lOVCBTZXRfQVRFX1JlYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVTSE9SVCBidWZmZXJbRUVQUk9NX1NJWkUvMl07CisJVVNIT1JUICpwOworCWludCBpOworCisJcnRfZWVfcmVhZF9hbGwocEFkLCAoVVNIT1JUICopYnVmZmVyKTsKKwlwID0gYnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCAoRUVQUk9NX1NJWkUvMik7IGkrKykKKwl7CisJCWF0ZV9wcmludCgiJTQuNHggIiwgKnApOworCQlpZiAoKChpKzEpICUgMTYpID09IDApCisJCQlhdGVfcHJpbnQoIlxuIik7CisJCXArKzsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfQVRFX1Nob3dfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJYXRlX3ByaW50KCJNb2RlPSVkXG4iLCBwQWQtPmF0ZS5Nb2RlKTsKKwlhdGVfcHJpbnQoIlR4UG93ZXIwPSVkXG4iLCBwQWQtPmF0ZS5UeFBvd2VyMCk7CisJYXRlX3ByaW50KCJUeFBvd2VyMT0lZFxuIiwgcEFkLT5hdGUuVHhQb3dlcjEpOworCWF0ZV9wcmludCgiVHhBbnRlbm5hU2VsPSVkXG4iLCBwQWQtPmF0ZS5UeEFudGVubmFTZWwpOworCWF0ZV9wcmludCgiUnhBbnRlbm5hU2VsPSVkXG4iLCBwQWQtPmF0ZS5SeEFudGVubmFTZWwpOworCWF0ZV9wcmludCgiQkJQQ3VycmVudEJXPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLkJXKTsKKwlhdGVfcHJpbnQoIkdJPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLlNob3J0R0kpOworCWF0ZV9wcmludCgiTUNTPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLk1DUyk7CisJYXRlX3ByaW50KCJUeE1vZGU9JWRcbiIsIHBBZC0+YXRlLlR4V0kuUEhZTU9ERSk7CisJYXRlX3ByaW50KCJBZGRyMT0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEFkLT5hdGUuQWRkcjFbMF0sIHBBZC0+YXRlLkFkZHIxWzFdLCBwQWQtPmF0ZS5BZGRyMVsyXSwgcEFkLT5hdGUuQWRkcjFbM10sIHBBZC0+YXRlLkFkZHIxWzRdLCBwQWQtPmF0ZS5BZGRyMVs1XSk7CisJYXRlX3ByaW50KCJBZGRyMj0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEFkLT5hdGUuQWRkcjJbMF0sIHBBZC0+YXRlLkFkZHIyWzFdLCBwQWQtPmF0ZS5BZGRyMlsyXSwgcEFkLT5hdGUuQWRkcjJbM10sIHBBZC0+YXRlLkFkZHIyWzRdLCBwQWQtPmF0ZS5BZGRyMls1XSk7CisJYXRlX3ByaW50KCJBZGRyMz0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEFkLT5hdGUuQWRkcjNbMF0sIHBBZC0+YXRlLkFkZHIzWzFdLCBwQWQtPmF0ZS5BZGRyM1syXSwgcEFkLT5hdGUuQWRkcjNbM10sIHBBZC0+YXRlLkFkZHIzWzRdLCBwQWQtPmF0ZS5BZGRyM1s1XSk7CisJYXRlX3ByaW50KCJDaGFubmVsPSVkXG4iLCBwQWQtPmF0ZS5DaGFubmVsKTsKKwlhdGVfcHJpbnQoIlR4TGVuZ3RoPSVkXG4iLCBwQWQtPmF0ZS5UeExlbmd0aCk7CisJYXRlX3ByaW50KCJUeENvdW50PSV1XG4iLCBwQWQtPmF0ZS5UeENvdW50KTsKKwlhdGVfcHJpbnQoIlJGRnJlcU9mZnNldD0lZFxuIiwgcEFkLT5hdGUuUkZGcmVxT2Zmc2V0KTsKKwlhdGVfcHJpbnQoS0VSTl9FTUVSRyAiU2V0X0FURV9TaG93X1Byb2MgU3VjY2Vzc1xuIik7CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfQVRFX0hlbHBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJYXRlX3ByaW50KCJBVEU9QVRFU1RBUlQsIEFURVNUT1AsIFRYQ09OVCwgVFhDQVJSLCBUWEZSQU1FLCBSWEZSQU1FXG4iKTsKKwlhdGVfcHJpbnQoIkFURURBXG4iKTsKKwlhdGVfcHJpbnQoIkFURVNBXG4iKTsKKwlhdGVfcHJpbnQoIkFURUJTU0lEXG4iKTsKKwlhdGVfcHJpbnQoIkFURUNIQU5ORUwsIHJhbmdlOjB+MTQodW5sZXNzIEEgYmFuZCAhKVxuIik7CisJYXRlX3ByaW50KCJBVEVUWFBPVzAsIHNldCBwb3dlciBsZXZlbCBvZiBhbnRlbm5hIDEuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYUE9XMSwgc2V0IHBvd2VyIGxldmVsIG9mIGFudGVubmEgMi5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhBTlQsIHNldCBUWCBhbnRlbm5hLiAwOmFsbCwgMTphbnRlbm5hIG9uZSwgMjphbnRlbm5hIHR3by5cbiIpOworCWF0ZV9wcmludCgiQVRFUlhBTlQsIHNldCBSWCBhbnRlbm5hLjA6YWxsLCAxOmFudGVubmEgb25lLCAyOmFudGVubmEgdHdvLCAzOmFudGVubmEgdGhyZWUuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYRlJFUU9GRlNFVCwgc2V0IGZyZXF1ZW5jeSBvZmZzZXQsIHJhbmdlIDB+NjNcbiIpOworCWF0ZV9wcmludCgiQVRFVFhCVywgc2V0IEJhbmRXaWR0aCwgMDoyME1IeiwgMTo0ME1Iei5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhMRU4sIHNldCBGcmFtZSBsZW5ndGgsIHJhbmdlIDI0fiVkXG4iLCAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKTsKKwlhdGVfcHJpbnQoIkFURVRYQ05ULCBzZXQgaG93IG1hbnkgZnJhbWUgZ29pbmcgdG8gdHJhbnNtaXQuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYTUNTLCBzZXQgTUNTLCByZWZlcmVuY2UgdG8gcmF0ZSB0YWJsZS5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhNT0RFLCBzZXQgTW9kZSAwOkNDSywgMTpPRkRNLCAyOkhULU1peCwgMzpHcmVlbkZpZWxkLCByZWZlcmVuY2UgdG8gcmF0ZSB0YWJsZS5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhHSSwgc2V0IEdJIGludGVydmFsLCAwOkxvbmcsIDE6U2hvcnRcbiIpOworCWF0ZV9wcmludCgiQVRFUlhGRVIsIDA6ZGlzYWJsZSBSeCBGcmFtZSBlcnJvciByYXRlLiAxOmVuYWJsZSBSeCBGcmFtZSBlcnJvciByYXRlLlxuIik7CisJYXRlX3ByaW50KCJBVEVSUkYsIHNob3cgYWxsIFJGIHJlZ2lzdGVycy5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGMSwgc2V0IFJGMSByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGMiwgc2V0IFJGMiByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGMywgc2V0IFJGMyByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGNCwgc2V0IFJGNCByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFTERFMlAsIGxvYWQgRUVQUk9NIGZyb20gLmJpbiBmaWxlLlxuIik7CisJYXRlX3ByaW50KCJBVEVSRTJQLCBkaXNwbGF5IGFsbCBFRVBST00gY29udGVudC5cbiIpOworCWF0ZV9wcmludCgiQVRFU0hPVywgZGlzcGxheSBhbGwgcGFyYW1ldGVycyBvZiBBVEUuXG4iKTsKKwlhdGVfcHJpbnQoIkFURUhFTFAsIG9ubGluZSBoZWxwLlxuIik7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJQXNpY1N3aXRjaENoYW5uZWwoKSBkZWRpY2F0ZWQgZm9yIEFURS4KKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBVEVBc2ljU3dpdGNoQ2hhbm5lbCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVSU5UMzIgUjIgPSAwLCBSMyA9IERFRkFVTFRfUkZfVFhfUE9XRVIsIFI0ID0gMCwgVmFsdWUgPSAwOworCUNIQVIgVHhQd2VyID0gMCwgVHhQd2VyMiA9IDA7CisJVUNIQVIgaW5kZXgsIEJicFZhbHVlID0gMCwgUjY2ID0gMHgzMDsKKwlSVE1QX1JGX1JFR1MgKlJGUmVnVGFibGU7CisJVUNIQVIgQ2hhbm5lbDsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJaWYgKChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpIHx8IChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpKQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgIT0gcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsKQorCQl7CisJCQlwQWQtPmF0ZS5DaGFubmVsID0gcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsOworCQl9CisJCXJldHVybjsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJQ2hhbm5lbCA9IHBBZC0+YXRlLkNoYW5uZWw7CisKKwkvLyBTZWxlY3QgYW50ZW5uYQorCUFzaWNBbnRlbm5hU2VsZWN0KHBBZCwgQ2hhbm5lbCk7CisKKwkvLyBmaWxsIFR4IHBvd2VyIHZhbHVlCisJVHhQd2VyID0gcEFkLT5hdGUuVHhQb3dlcjA7CisJVHhQd2VyMiA9IHBBZC0+YXRlLlR4UG93ZXIxOworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCisKKwkvLyBUaGUgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIDN4eHggYW5kIDJ4eHgKKwkvLyBUaGUgMzA3MCBpcyAxVDFSLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgVHgvUnggcGF0aCBhbmQgdGhlIG9ubHkgam9iIGlzIHRvIHNldCB0aGUgcGFyYW1ldGVycyBvZiBjaGFubmVscy4KKwlpZiAoSVNfUlQzMHh4KHBBZCkgJiYgKChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMCkgfHwKKyhwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMSkgfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIyKSB8fAorKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKSkpCisJeworCQkvKiBtb2RpZnkgYnkgV1kgZm9yIFJlYWQgUkYgUmVnLiBlcnJvciAqLworCQlVQ0hBUiBSRlZhbHVlOworCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8zMDIwX0NITkw7IGluZGV4KyspCisJCXsKKwkJCWlmIChDaGFubmVsID09IEZyZXFJdGVtczMwMjBbaW5kZXhdLkNoYW5uZWwpCisJCQl7CisJCQkJLy8gUHJvZ3JhbW1pbmcgY2hhbm5lbCBwYXJhbWV0ZXJzCisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAyLCBGcmVxSXRlbXMzMDIwW2luZGV4XS5OKTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDMsIEZyZXFJdGVtczMwMjBbaW5kZXhdLkspOworCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4RkMpIHwgRnJlcUl0ZW1zMzAyMFtpbmRleF0uUjsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIFNldCBUeCBQb3dlcgorCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjEyLCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UHdlcjsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIFNldCBSRiBvZmZzZXQKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMywgKFBVQ0hBUikmUkZWYWx1ZSk7CisJCQkJLy8yMDA4LzA4LzA2OiBLSCBtb2RpZmllZCAicEFkLT5SRkZyZXFPZmZzZXQiIHRvICJwQWQtPmF0ZS5SRkZyZXFPZmZzZXQiCisJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHg4MCkgfCBwQWQtPmF0ZS5SRkZyZXFPZmZzZXQ7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIzLCAoVUNIQVIpUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgQlcKKwkJCQlpZiAocEFkLT5hdGUuVHhXSS5CVyA9PSBCV180MCkKKwkJCQl7CisJCQkJCVJGVmFsdWUgPSBwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNDsKKwkJCQkJLy9ESVNBQkxFXzExTl9DSEVDSyhwQWQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSRlZhbHVlID0gcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQ7CisJCQkJfQorCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgKFVDSEFSKVJGVmFsdWUpOworCisJCQkJLy8gRW5hYmxlIFJGIHR1bmluZworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gUkZWYWx1ZSB8IDB4MTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDcsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIGxhdGNoIGNoYW5uZWwgZm9yIGZ1dHVyZSB1c2FnZS4KKwkJCQlwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTd2l0Y2hDaGFubmVsIyVkKFJGPSVkLCBQd3IwPSVkLCBQd3IxPSVkLCAlZFQpLCBOPTB4JTAyWCwgSz0weCUwMlgsIFI9MHglMDJYXG4iLAorCQkJQ2hhbm5lbCwKKwkJCXBBZC0+UmZJY1R5cGUsCisJCQlUeFB3ZXIsCisJCQlUeFB3ZXIyLAorCQkJcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCwKKwkJCUZyZXFJdGVtczMwMjBbaW5kZXhdLk4sCisJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5LLAorCQkJRnJlcUl0ZW1zMzAyMFtpbmRleF0uUikpOworCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEUtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KK3sKKwlSRlJlZ1RhYmxlID0gUkYyODUwUmVnVGFibGU7CisKKwlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpCisJeworCQkvKiBCdXQgb25seSAyODUwIGFuZCAyNzUwIHN1cHBvcnQgNS41R0h6IGJhbmQuLi4gKi8KKwkJY2FzZSBSRklDXzI4MjA6CisJCWNhc2UgUkZJQ18yODUwOgorCQljYXNlIFJGSUNfMjcyMDoKKwkJY2FzZSBSRklDXzI3NTA6CisKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspCisJCQl7CisJCQkJaWYgKENoYW5uZWwgPT0gUkZSZWdUYWJsZVtpbmRleF0uQ2hhbm5lbCkKKwkJCQl7CisJCQkJCVIyID0gUkZSZWdUYWJsZVtpbmRleF0uUjI7CisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4NDAwMDsJLy8gSWYgVFhwYXRoIGlzIDEsIGJpdCAxNCA9IDE7CisJCQkJCX0KKworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHBBZC0+YXRlLlJ4QW50ZW5uYVNlbCkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6CisJCQkJCQkJCVIyIHw9IDB4MjAwNDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDAwOworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAyOgorCQkJCQkJCQlSMiB8PSAweDEwMDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwMTsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCVIyIHw9IDB4NDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQkvKiBPbmx5IGVuYWJsZSB0d28gQW50ZW5uYSB0byByZWNlaXZlLiAqLworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDA4OworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDIwMDQwOwkvLyB3cml0ZSAxIHRvIG9mZiBSeFBhdGgKKwkJCQkJfQorCisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpCisJCQkJCXsKKwkJCQkJCWlmIChwQWQtPmF0ZS5UeEFudGVubmFTZWwgPT0gMSkKKwkJCQkJCXsKKwkJCQkJCQlSMiB8PSAweDQwMDA7CS8vIElmIFRYIEFudGVubmEgc2VsZWN0IGlzIDEgLCBiaXQgMTQgPSAxOyBEaXNhYmxlIEFudCAyCisJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCYnBWYWx1ZSk7CisJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNzsJCS8vMTExMDAxMTFCCisJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCYnBWYWx1ZSk7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChwQWQtPmF0ZS5UeEFudGVubmFTZWwgPT0gMikKKwkJCQkJCXsKKwkJCQkJCQlSMiB8PSAweDgwMDA7CS8vIElmIFRYIEFudGVubmEgc2VsZWN0IGlzIDIgLCBiaXQgMTUgPSAxOyBEaXNhYmxlIEFudCAxCisJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCYnBWYWx1ZSk7CisJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNzsKKwkJCQkJCQlCYnBWYWx1ZSB8PSAweDA4OworCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgQmJwVmFsdWUpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQmJwVmFsdWUpOworCQkJCQkJCUJicFZhbHVlICY9IDB4RTc7CisJCQkJCQkJQmJwVmFsdWUgfD0gMHgxMDsKKwkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsIEJicFZhbHVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHBBZC0+YXRlLlJ4QW50ZW5uYVNlbCkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6CisJCQkJCQkJCVIyIHw9IDB4MjAwNDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDAwOworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAyOgorCQkJCQkJCQlSMiB8PSAweDEwMDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwMTsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMzoKKwkJCQkJCQkJUjIgfD0gMHgzMDAwMDsKKwkJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCYnBWYWx1ZSk7CisJCQkJCQkJCUJicFZhbHVlICY9IDB4RTQ7CisJCQkJCQkJCUJicFZhbHVlIHw9IDB4MDI7CisJCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQmJwVmFsdWUpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgxMDsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJaWYgKENoYW5uZWwgPiAxNCkKKwkJCQkJeworCQkJCQkJLy8gaW5pdGlhbGl6ZSBSMywgUjQKKwkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZik7CisJCQkJCQlSNCA9IChSRlJlZ1RhYmxlW2luZGV4XS5SNCAmICh+MHgwMDFmODdjMCkpIHwgKHBBZC0+YXRlLlJGRnJlcU9mZnNldCA8PCAxNSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0aGUgUm9yeSdzIHN1Z2dlc3Rpb24gdG8gc29sdmUgdGhlIG1pZGRsZSByYW5nZSBpc3N1ZS4KKwkJCQkJCS8vIDUuNUcgYmFuZCBwb3dlciByYW5nZTogMHhGOX4wWDBGLCBUWDAgUmVnMyBiaXQ5L1RYMSBSZWc0IGJpdDY9IjAiIG1lYW5zIHRoZSBUWCBwb3dlciByZWR1Y2UgN2RCCisJCQkJCQkvLyBSMworCQkJCQkJaWYgKChUeFB3ZXIgPj0gLTcpICYmIChUeFB3ZXIgPCAwKSkKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIgPSAoNytUeFB3ZXIpOworCQkJCQkJCVR4UHdlciA9IChUeFB3ZXIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyKTsKKwkJCQkJCQlSMyB8PSAoVHhQd2VyIDw8IDEwKTsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEVBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyPSVkIFxuIiwgVHhQd2VyKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyID0gKFR4UHdlciA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIpOworCQkJCQkJCVIzIHw9IChUeFB3ZXIgPDwgMTApIHwgKDEgPDwgOSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIFI0CisJCQkJCQlpZiAoKFR4UHdlcjIgPj0gLTcpICYmIChUeFB3ZXIyIDwgMCkpCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyMiA9ICg3K1R4UHdlcjIpOworCQkJCQkJCVR4UHdlcjIgPSAoVHhQd2VyMiA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIyKTsKKwkJCQkJCQlSNCB8PSAoVHhQd2VyMiA8PCA3KTsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEVBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyMj0lZCBcbiIsIFR4UHdlcjIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIyID0gKFR4UHdlcjIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyMik7CisJCQkJCQkJUjQgfD0gKFR4UHdlcjIgPDwgNykgfCAoMSA8PCA2KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZikgfCAoVHhQd2VyIDw8IDkpOyAvLyBzZXQgVFggcG93ZXIwCisJCQkJCQlSNCA9IChSRlJlZ1RhYmxlW2luZGV4XS5SNCAmICh+MHgwMDFmODdjMCkpIHwgKHBBZC0+YXRlLlJGRnJlcU9mZnNldCA8PCAxNSkgfCAoVHhQd2VyMiA8PDYpOy8vIFNldCBmcmVxIG9mZnNldCAmIFR4UHdyMQorCQkJCQl9CisKKwkJCQkJLy8gQmFzZWQgb24gQkJQIGN1cnJlbnQgbW9kZSBiZWZvcmUgY2hhbmdpbmcgUkYgY2hhbm5lbC4KKwkJCQkJaWYgKHBBZC0+YXRlLlR4V0kuQlcgPT0gQldfNDApCisJCQkJCXsKKwkJCQkJCVI0IHw9MHgyMDAwMDA7CisJCQkJCX0KKworCQkJCQkvLyBVcGRhdGUgdmFyaWFibGVzCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA9IENoYW5uZWw7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjEgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMTsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMiA9IFIyOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIzID0gUjM7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSNDsKKworCQkJCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKwkvLyBDaGFuZ2UgQkJQIHNldHRpbmcgZHVyaW5nIHN3aXRjaCBmcm9tIGEtPmcsIGctPmEKKwlpZiAoQ2hhbm5lbCA8PSAxNCkKKwl7CisJICAgIFVMT05HCVR4UGluQ2ZnID0gMHgwMDA1MEYwQTsvLyAyMDA3LjEwLjA5IGJ5IEJyaWFuIDogMHgwMDA1MDUwQSA9PT4gMHgwMDA1MEYwQQorCisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjIsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MywgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisKKwkJLyogRm9yIDFULzJSIGNoaXAgb25seS4uLiAqLworCSAgICBpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yRykKKwkgICAgeworCSAgICAgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHg2Mik7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJICAgICAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDg0KTsKKwkgICAgfQorCisgICAgICAgIC8vIEFjY29yZGluZyB0aGUgUm9yeSdzIHN1Z2dlc3Rpb24gdG8gc29sdmUgdGhlIG1pZGRsZSByYW5nZSBpc3N1ZS4KKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAmQmJwVmFsdWUpOworCQlBU1NFUlQoKEJicFZhbHVlID09IDB4MDApKTsKKwkJaWYgKChCYnBWYWx1ZSAhPSAweDAwKSkKKwkJeworCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4NiwgMHgwMCk7CisJCX0KKworCQkvLyA1LjVHSHogYmFuZCBzZWxlY3Rpb24gUElOLCBiaXQxIGFuZCBiaXQyIGFyZSBjb21wbGVtZW50CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHg2KTsKKwkJVmFsdWUgfD0gKDB4MDQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCisgICAgICAgIC8vIFR1cm4gb2ZmIHVudXNlZCBQQSBvciBMTkEgd2hlbiBvbmx5IDFUIG9yIDFSLgorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGRkYzOworCQl9CisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkYzRkY7CisJCX0KKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QSU5fQ0ZHLCBUeFBpbkNmZyk7CisJfQorCWVsc2UKKwl7CisJICAgIFVMT05HCVR4UGluQ2ZnID0gMHgwMDA1MEYwNTsvLzIwMDcuMTAuMDkgYnkgQnJpYW4gOiAweDAwMDUwNTA1ID09PiAweDAwMDUwRjA1CisKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MiwgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYzLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjQsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHhGMik7CisKKyAgICAgICAgLy8gQWNjb3JkaW5nIHRoZSBSb3J5J3Mgc3VnZ2VzdGlvbiB0byBzb2x2ZSB0aGUgbWlkZGxlIHJhbmdlIGlzc3VlLgorCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SODYsICZCYnBWYWx1ZSk7CisJCUFTU0VSVCgoQmJwVmFsdWUgPT0gMHgwMCkpOworCQlpZiAoKEJicFZhbHVlICE9IDB4MDApKQorCQl7CisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAweDAwKTsKKwkJfQorCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SOTEsICZCYnBWYWx1ZSk7CisJCUFTU0VSVCgoQmJwVmFsdWUgPT0gMHgwNCkpOworCisJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I5MiwgJkJicFZhbHVlKTsKKwkJQVNTRVJUKChCYnBWYWx1ZSA9PSAweDAwKSk7CisKKwkJLy8gNS41R0h6IGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4Nik7CisJCVZhbHVlIHw9ICgweDAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworICAgICAgICAvLyBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUi4KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRkZGMzsKKwkgICAgfQorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGM0ZGOworCQl9CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCX0KKworICAgIC8vIFI2NiBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byBDaGFubmVsIGFuZCB1c2UgMjBNSHogd2hlbiBzY2FubmluZworCWlmIChDaGFubmVsIDw9IDE0KQorCXsKKwkJLy8gQkcgYmFuZAorCQlSNjYgPSAweDJFICsgR0VUX0xOQV9HQUlOKHBBZCk7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJfQorCWVsc2UKKwl7CisJCS8vIDUuNSBHSHogYmFuZAorCQlpZiAocEFkLT5hdGUuVHhXSS5CVyA9PSBCV18yMCkKKwkJeworCQkJUjY2ID0gKFVDSEFSKSgweDMyICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMpOworICAgIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVI2NiA9IChVQ0hBUikoMHgzQSArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zKTsKKwkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCX0KKwl9CisKKwkvLworCS8vIE9uIDExQSwgV2Ugc2hvdWxkIGRlbGF5IGFuZCB3YWl0IFJGL0JCUCB0byBiZSBzdGFibGUKKwkvLyBhbmQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgc2hvdWxkIGJlIDEwMDAgbWljcm8gc2Vjb25kcworCS8vIDIwMDUvMDYvMDUgLSBPbiAxMUcsIFdlIGFsc28gbmVlZCB0aGlzIGRlbGF5IHRpbWUuIE90aGVyd2lzZSBpdCdzIGRpZmZpY3VsdCB0byBwYXNzIHRoZSBXSFFMLgorCS8vCisJUlRNUHVzZWNEZWxheSgxMDAwKTsKKworCWlmIChDaGFubmVsID4gMTQpCisJeworCQkvLyBXaGVuIDUuNUdIeiBiYW5kIHRoZSBMU0Igb2YgVHhQd3Igd2lsbCBiZSB1c2VkIHRvIHJlZHVjZWQgN2RCIG9yIG5vdC4KKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgJWRUKSB0byAsIFIxPTB4JTA4bHgsIFIyPTB4JTA4bHgsIFIzPTB4JTA4bHgsIFI0PTB4JTA4bHhcbiIsCisJCQkJCQkJCSAgQ2hhbm5lbCwKKwkJCQkJCQkJICBwQWQtPlJmSWNUeXBlLAorCQkJCQkJCQkgIHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGgsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMSwKKwkJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIyLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjMsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SNCkpOworCX0KKwllbHNlCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTd2l0Y2hDaGFubmVsIyVkKFJGPSVkLCBQd3IwPSV1LCBQd3IxPSV1LCAlZFQpIHRvICwgUjE9MHglMDhseCwgUjI9MHglMDhseCwgUjM9MHglMDhseCwgUjQ9MHglMDhseFxuIiwKKwkJCQkJCQkJICBDaGFubmVsLAorCQkJCQkJCQkgIHBBZC0+UmZJY1R5cGUsCisJCQkJCQkJCSAgKFIzICYgMHgwMDAwM2UwMCkgPj4gOSwKKwkJCQkJCQkJICAoUjQgJiAweDAwMDAwN2MwKSA+PiA2LAorCQkJCQkJCQkgIHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGgsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMSwKKwkJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIyLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjMsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SNCkpOworICAgIH0KK30KKworLy8KKy8vIEluIGZhY3QsIG5vIG9uZSB3aWxsIGNhbGwgdGhpcyByb3V0aW5lIHNvIGZhciAhCisvLworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHaXZlcyBDQ0sgVFggcmF0ZSAyIG1vcmUgZEIgVFggcG93ZXIuCisJCVRoaXMgcm91dGluZSB3b3JrcyBvbmx5IGluIEFURSBtb2RlLgorCisJCWNhbGN1bGF0ZSBkZXNpcmVkIFR4IHBvd2VyIGluIFJGIFIzLlR4MH41LAlzaG91bGQgY29uc2lkZXIgLQorCQkwLiBpZiBjdXJyZW50IHJhZGlvIGlzIGEgbm9pc3kgZW52aXJvbm1lbnQgKHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQpCisJCTEuIFR4UG93ZXJQZXJjZW50YWdlCisJCTIuIGF1dG8gY2FsaWJyYXRpb24gYmFzZWQgb24gVFNTSSBmZWVkYmFjaworCQkzLiBleHRyYSAyIGRiIGZvciBDQ0sKKwkJNC4gLTEwIGRiIHVwb24gdmVyeS1zaG9ydCBkaXN0YW5jZSAoQXZnUlNTSSA+PSAtNDBkYikgdG8gQVAKKworCU5PVEU6IFNpbmNlIHRoaXMgcm91dGluZSByZXF1aXJlcyB0aGUgdmFsdWUgb2YgKHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQpLAorCQlpdCBzaG91bGQgYmUgY2FsbGVkIEFGVEVSIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFURUFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVAkJCWksIGo7CisJQ0hBUgkJRGVsdGFQd3IgPSAwOworCUJPT0xFQU4JCWJBdXRvVHhBZ2MgPSBGQUxTRTsKKwlVQ0hBUgkJVHNzaVJlZiwgKnBUc3NpTWludXNCb3VuZGFyeSwgKnBUc3NpUGx1c0JvdW5kYXJ5LCBUeEFnY1N0ZXA7CisJVUNIQVIJCUJicFI0OSA9IDAsIGlkeDsKKwlQQ0hBUgkJcFR4QWdjQ29tcGVuc2F0ZTsKKwlVTE9ORwkJVHhQd3JbNV07CisJQ0hBUgkJVmFsdWU7CisKKwkvKiBubyBvbmUgY2FsbHMgdGhpcyBwcm9jZWR1cmUgc28gZmFyICovCisJaWYgKHBBZC0+YXRlLlR4V0kuQlcgPT0gQldfNDApCisJeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzRdOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFs0XTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzRdOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFs0XTsKKwkJfQorCX0KKworCS8vIFRYIHBvd2VyIGNvbXBlbnNhdGlvbiBmb3IgdGVtcGVyYXR1cmUgdmFyaWF0aW9uIGJhc2VkIG9uIFRTU0kuCisJLy8gRG8gaXQgcGVyIDQgc2Vjb25kcy4KKwlpZiAocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSA0ID09IDApCisJeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJLyogYmcgY2hhbm5lbCAqLworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjRzsKKwkJCVRzc2lSZWYgICAgICAgICAgICA9IHBBZC0+VHNzaVJlZkc7CisJCQlwVHNzaU1pbnVzQm91bmRhcnkgPSAmcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMF07CisJCQlwVHNzaVBsdXNCb3VuZGFyeSAgPSAmcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1swXTsKKwkJCVR4QWdjU3RlcCAgICAgICAgICA9IHBBZC0+VHhBZ2NTdGVwRzsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUc7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBhIGNoYW5uZWwgKi8KKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0E7CisJCQlUc3NpUmVmICAgICAgICAgICAgPSBwQWQtPlRzc2lSZWZBOworCQkJcFRzc2lNaW51c0JvdW5kYXJ5ID0gJnBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzBdOworCQkJcFRzc2lQbHVzQm91bmRhcnkgID0gJnBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMF07CisJCQlUeEFnY1N0ZXAgICAgICAgICAgPSBwQWQtPlR4QWdjU3RlcEE7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVBOworCQl9CisKKwkJaWYgKGJBdXRvVHhBZ2MpCisJCXsKKwkJCS8qIEJicFI0OSBpcyB1bnNpZ25lZCBjaGFyICovCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNDksICZCYnBSNDkpOworCisJCQkvKiAocCkgVHNzaVBsdXNCb3VuZGFyeUdbMF0gPSAwID0gKG0pIFRzc2lNaW51c0JvdW5kYXJ5R1swXSAqLworCQkJLyogY29tcGVuc2F0ZTogKzQgICAgICszICAgKzIgICArMSAgICAwICAgLTEgICAtMiAgIC0zICAgLTQgKiBzdGVwcyAqLworCQkJLyogc3RlcCB2YWx1ZSBpcyBkZWZpbmVkIGluIHBBZC0+VHhBZ2NTdGVwRyBmb3IgdHggcG93ZXIgdmFsdWUgKi8KKworCQkJLyogWzRdKzErWzRdICAgcDQgICAgIHAzICAgcDIgICBwMSAgIG8xICAgbTEgICBtMiAgIG0zICAgbTQgKi8KKwkJCS8qIGV4OiAgICAgICAgIDB4MDAgMHgxNSAweDI1IDB4NDUgMHg4OCAweEEwIDB4QjUgMHhEMCAweEYwCisJCQkgICBhYm92ZSB2YWx1ZSBhcmUgZXhhbWluZWQgaW4gbWFzcyBmYWN0b3J5IHByb2R1Y3Rpb24gKi8KKwkJCS8qICAgICAgICAgICAgIFs0XSAgICBbM10gIFsyXSAgWzFdICBbMF0gIFsxXSAgWzJdICBbM10gIFs0XSAqLworCisJCQkvKiBwbHVzIGlzIDB4MTAgfiAweDQwLCBtaW51cyBpcyAweDYwIH4gMHg5MCAqLworCQkJLyogaWYgdmFsdWUgaXMgYmV0d2VlbiBwMSB+IG8xIG9yIG8xIH4gczEsIG5vIG5lZWQgdG8gYWRqdXN0IHR4IHBvd2VyICovCisJCQkvKiBpZiB2YWx1ZSBpcyAweDY1LCB0eCBwb3dlciB3aWxsIGJlIC09IFR4QWdjU3RlcCooMi0xKSAqLworCisJCQlpZiAoQmJwUjQ5ID4gcFRzc2lNaW51c0JvdW5kYXJ5WzFdKQorCQkJeworCQkJCS8vIFJlYWRpbmcgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZS4KKwkJCQkvLyBDaGVjayBmb3IgaG93IGxhcmdlIHdlIG5lZWQgdG8gZGVjcmVhc2UgdGhlIFR4IHBvd2VyLgorCQkJCWZvciAoaWR4ID0gMTsgaWR4IDwgNTsgaWR4KyspCisJCQkJeworCQkJCQlpZiAoQmJwUjQ5IDw9IHBUc3NpTWludXNCb3VuZGFyeVtpZHhdKSAgLy8gRm91bmQgdGhlIHJhbmdlCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gVGhlIGluZGV4IGlzIHRoZSBzdGVwIHdlIHNob3VsZCBkZWNyZWFzZSwgaWR4ID0gMCBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBlbnNhdGUKKy8vCQkJCWlmIChSMyA+IChVTE9ORykgKFR4QWdjU3RlcCAqIChpZHgtMSkpKQorCQkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IC0oVHhBZ2NTdGVwICogKGlkeC0xKSk7CisvLwkJCQllbHNlCisvLwkJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAtKChVQ0hBUilSMyk7CisKKwkJCQlEZWx0YVB3ciArPSAoKnBUeEFnY0NvbXBlbnNhdGUpOworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tIFR4IFBvd2VyLCBCQlAgUjE9JXgsIFRzc2lSZWY9JXgsIFR4QWdjU3RlcD0leCwgc3RlcCA9IC0lZFxuIiwKKwkJCQkJQmJwUjQ5LCBUc3NpUmVmLCBUeEFnY1N0ZXAsIGlkeC0xKSk7CisJCQl9CisJCQllbHNlIGlmIChCYnBSNDkgPCBwVHNzaVBsdXNCb3VuZGFyeVsxXSkKKwkJCXsKKwkJCQkvLyBSZWFkaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVmZXJlbmNlIHZhbHVlCisJCQkJLy8gY2hlY2sgZm9yIGhvdyBsYXJnZSB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBUeCBwb3dlcgorCQkJCWZvciAoaWR4ID0gMTsgaWR4IDwgNTsgaWR4KyspCisJCQkJeworCQkJCQlpZiAoQmJwUjQ5ID49IHBUc3NpUGx1c0JvdW5kYXJ5W2lkeF0pICAgLy8gRm91bmQgdGhlIHJhbmdlCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gVGhlIGluZGV4IGlzIHRoZSBzdGVwIHdlIHNob3VsZCBpbmNyZWFzZSwgaWR4ID0gMCBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBlbnNhdGUKKwkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IFR4QWdjU3RlcCAqIChpZHgtMSk7CisJCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIrKyBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSArJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCBpZHgtMSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gMDsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgICBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSArJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCAwKSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0c7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVHOworCQl9CisJCWVsc2UKKwkJeworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjQTsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUE7CisJCX0KKworCQlpZiAoYkF1dG9UeEFnYykKKwkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJfQorCisJLyogY2FsY3VsYXRlIGRlbHRhIHBvd2VyIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlIHNwZWNpZmllZCBmcm9tIFVJICovCisJLy8gRTJQUk9NIHNldHRpbmcgaXMgY2FsaWJyYXRlZCBmb3IgbWF4aW11bSBUWCBwb3dlciAoaS5lLiAxMDAlKQorCS8vIFdlIGxvd2VyIFRYIHBvd2VyIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBwZXJjZW50YWdlIHNwZWNpZmllZCBmcm9tIFVJCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID09IDB4ZmZmZmZmZmYpICAgICAgIC8vIEFVVE8gVFggUE9XRVIgY29udHJvbAorCQk7CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiA5MCkgIC8vIDkxIH4gMTAwJSAmIEFVVE8sIHRyZWF0IGFzIDEwMCUgaW4gdGVybXMgb2YgbVcKKwkJOworCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gNjApICAvLyA2MSB+IDkwJSwgdHJlYXQgYXMgNzUlIGluIHRlcm1zIG9mIG1XCisJeworCQlEZWx0YVB3ciAtPSAxOworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDMwKSAgLy8gMzEgfiA2MCUsIHRyZWF0IGFzIDUwJSBpbiB0ZXJtcyBvZiBtVworCXsKKwkJRGVsdGFQd3IgLT0gMzsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiAxNSkgIC8vIDE2IH4gMzAlLCB0cmVhdCBhcyAyNSUgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDY7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOSkgICAvLyAxMCB+IDE1JSwgdHJlYXQgYXMgMTIuNSUgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDk7CisJfQorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB+IDkgJSwgdHJlYXQgYXMgTUlOKH4zJSkgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDEyOworCX0KKworCS8qIHJlc2V0IGRpZmZlcmVudCBuZXcgdHggcG93ZXIgZm9yIGRpZmZlcmVudCBUWCByYXRlICovCisJZm9yKGk9MDsgaTw1OyBpKyspCisJeworCQlpZiAoVHhQd3JbaV0gIT0gMHhmZmZmZmZmZikKKwkJeworCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJeworCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7IC8qIDAgfiAxNSAqLworCisJCQkJaWYgKChWYWx1ZSArIERlbHRhUHdyKSA8IDApCisJCQkJeworCQkJCQlWYWx1ZSA9IDA7IC8qIG1pbiAqLworCQkJCX0KKwkJCQllbHNlIGlmICgoVmFsdWUgKyBEZWx0YVB3cikgPiAweEYpCisJCQkJeworCQkJCQlWYWx1ZSA9IDB4RjsgLyogbWF4ICovCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVZhbHVlICs9IERlbHRhUHdyOyAvKiB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gKi8KKwkJCQl9CisKKwkJCQkvKiBmaWxsIG5ldyB2YWx1ZSB0byBDU1Igb2Zmc2V0ICovCisJCQkJVHhQd3JbaV0gPSAoVHhQd3JbaV0gJiB+KDB4MDAwMDAwMEYgPDwgaio0KSkgfCAoVmFsdWUgPDwgaio0KTsKKwkJCX0KKworCQkJLyogd3JpdGUgdHggcG93ZXIgdmFsdWUgdG8gQ1NSICovCisJCQkvKiBUWF9QV1JfQ0ZHXzAgKDggdHggcmF0ZSkgZm9yCVRYIHBvd2VyIGZvciBPRkRNIDEyTS8xOE0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIE9GRE0gNk0vOU0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIENDSzUuNU0vMTFNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBDQ0sxTS8yTSAqLworCQkJLyogVFhfUFdSX0NGR18xIH4gVFhfUFdSX0NGR180ICovCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QV1JfQ0ZHXzAgKyBpKjQsIFR4UHdyW2ldKTsKKworCisJCX0KKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlXcml0ZSBUeFdJIGZvciBBVEUgbW9kZS4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2lmZGVmIFJUMjg3MAorc3RhdGljIFZPSUQgQVRFV3JpdGVUeFdJKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWFdJX1NUUlVDIAlwVHhXSSwKKwlJTglCT09MRUFOCQkJRlJBRywKKwlJTglCT09MRUFOCQkJSW5zVGltZXN0YW1wLAorCUlOCUJPT0xFQU4gCQlBTVBEVSwKKwlJTglCT09MRUFOIAkJQWNrLAorCUlOCUJPT0xFQU4gCQlOU2VxLAkJLy8gSFcgbmV3IGEgc2VxdWVuY2UuCisJSU4JVUNIQVIJCQlCQVNpemUsCisJSU4JVUNIQVIJCQlXQ0lELAorCUlOCVVMT05HCQkJTGVuZ3RoLAorCUlOCVVDSEFSIAkJCVBJRCwKKwlJTglVQ0hBUgkJCU1JTU9wcywKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJVHJhbnNtaXQpCit7CisJLy8KKwkvLyBBbHdheXMgdXNlIExvbmcgcHJlYW1ibGUgYmVmb3JlIHZlcmlmaWF0aW9uIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3Mgd2VsbC4KKwkvLyBUb2RvOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3MKKwkvLworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJcFR4V0ktPkZSQUc9IEZSQUc7CisJcFR4V0ktPlRTPSBJbnNUaW1lc3RhbXA7CisJcFR4V0ktPkFNUERVID0gQU1QRFU7CisKKwlwVHhXSS0+TUlNT3BzID0gUFdSX0FDVElWRTsKKwlwVHhXSS0+TXBkdURlbnNpdHkgPSA0OworCXBUeFdJLT5BQ0sgPSBBY2s7CisJcFR4V0ktPnR4b3AgPSBUeG9wbW9kZTsKKwlwVHhXSS0+TlNFUSA9IE5TZXE7CisJcFR4V0ktPkJBV2luU2l6ZSA9IEJBU2l6ZTsKKworCXBUeFdJLT5XaXJlbGVzc0NsaUlEID0gV0NJRDsKKwlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID0gTGVuZ3RoOworCXBUeFdJLT5QYWNrZXRJZCA9IFBJRDsKKworCXBUeFdJLT5CVyA9IFRyYW5zbWl0LmZpZWxkLkJXOworCXBUeFdJLT5TaG9ydEdJID0gVHJhbnNtaXQuZmllbGQuU2hvcnRHSTsKKwlwVHhXSS0+U1RCQz0gVHJhbnNtaXQuZmllbGQuU1RCQzsKKworCXBUeFdJLT5NQ1MgPSBUcmFuc21pdC5maWVsZC5NQ1M7CisJcFR4V0ktPlBIWU1PREU9IFRyYW5zbWl0LmZpZWxkLk1PREU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLworCS8vIE1NUFMgaXMgODAyLjExbiBmZWF0dXJlcy4gQmVjYXVzZSBUeFdJLT5NQ1MgPiA3IG11c3QgYmUgSFQgbW9kZSwKKwkvLyBzbyBuZWVkIG5vdCBjaGVjayBpZiBpdCdzIEhUIHJhdGUuCisJLy8KKwlpZiAoKE1JTU9wcyA9PSBNTVBTX1NUQVRJQykgJiYgKHBUeFdJLT5NQ1MgPiA3KSkKKwkJcFR4V0ktPk1DUyA9IDc7CisKKwlpZiAoKE1JTU9wcyA9PSBNTVBTX0RZTkFNSUMpICYmIChwVHhXSS0+TUNTID4gNykpIC8vIFNNUFMgcHJvdGVjdCAyIHNwYXRpYWwuCisJCXBUeFdJLT5NSU1PcHMgPSAxOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPkNGQUNLID0gQ2ZBY2s7CisKKwlyZXR1cm47Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRGlzYWJsZSBwcm90ZWN0aW9uIGZvciBBVEUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBVEVEaXNhYmxlQXNpY1Byb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVBST1RfQ0ZHX1NUUlVDCVByb3RDZmcsIFByb3RDZmc0OworCVVJTlQzMiBQcm90ZWN0WzZdOworCVVTSE9SVAkJCW9mZnNldDsKKwlVQ0hBUgkJCWk7CisJVUlOVDMyIE1hY1JlZyA9IDA7CisKKwkvLyBDb25maWcgQVNJQyBSVFMgdGhyZXNob2xkIHJlZ2lzdGVyCisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9SVFNfQ0ZHLCAmTWFjUmVnKTsKKwlNYWNSZWcgJj0gMHhGRjAwMDBGRjsKKwlNYWNSZWcgfD0gKHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA8PCA4KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9SVFNfQ0ZHLCBNYWNSZWcpOworCisJLy8gSW5pdGlhbCBjb21tb24gcHJvdGVjdGlvbiBzZXR0aW5ncworCVJUTVBaZXJvTWVtb3J5KFByb3RlY3QsIHNpemVvZihQcm90ZWN0KSk7CisJUHJvdENmZzQud29yZCA9IDA7CisJUHJvdENmZy53b3JkID0gMDsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0dGNDAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93R0YyMCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dNTTQwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd01NMjAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93T2ZkbSA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dDY2sgPSAxOworCVByb3RDZmcuZmllbGQuUlRTVGhFbiA9IDE7CisJUHJvdENmZy5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKworCS8vIEhhbmRsZSBsZWdhY3koQi9HKSBwcm90ZWN0aW9uCisJUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7CisJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IDA7CisJUHJvdGVjdFswXSA9IFByb3RDZmcud29yZDsKKwlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOworCisJLy8gTk8gUFJPVEVDVAorCS8vIDEuQWxsIFNUQXMgaW4gdGhlIEJTUyBhcmUgMjAvNDAgTUh6IEhUCisJLy8gMi4gaW4gYWkgMjAvNDBNSHogQlNTCisJLy8gMy4gYWxsIFNUQXMgYXJlIDIwTUh6IGluIGEgMjBNSHogQlNTCisJLy8gUHVyZSBIVC4gbm8gcHJvdGVjdGlvbi4KKworCS8vIE1NMjBfUFJPVF9DRkcKKwkvLwlSZXNlcnZlZCAoMzE6MjcpCisJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMDEwMTExCisJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDA0IChPRkRNIDI0TSkKKwlQcm90ZWN0WzJdID0gMHgwMTc0NDAwNDsKKworCS8vIE1NNDBfUFJPVF9DRkcKKwkvLwlSZXNlcnZlZCAoMzE6MjcpCisJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMTExMTExCisJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDg0IChkdXBsaWNhdGUgT0ZETSAyNE0pCisJUHJvdGVjdFszXSA9IDB4MDNmNDQwODQ7CisKKwkvLyBDRjIwX1BST1RfQ0ZHCisJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDAxMDExMQorCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDAwNCAoT0ZETSAyNE0pCisJUHJvdGVjdFs0XSA9IDB4MDE3NDQwMDQ7CisKKwkvLyBDRjQwX1BST1RfQ0ZHCisJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDExMTExMQorCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDA4NCAoZHVwbGljYXRlIE9GRE0gMjRNKQorCVByb3RlY3RbNV0gPSAweDAzZjQ0MDg0OworCisJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOworCisJb2Zmc2V0ID0gQ0NLX1BST1RfQ0ZHOworCWZvciAoaSA9IDA7aSA8IDY7aSsrKQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyBpKjQsIFByb3RlY3RbaV0pOworCit9CisKKyNpZmRlZiBSVDI4NzAKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJV3JpdGUgVHhJbmZvIGZvciBBVEUgbW9kZS4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIEFURVdyaXRlVHhJbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWElORk9fU1RSVUMgCXBUeEluZm8sCisJSU4JVVNIT1JUCQlVU0JETUFwa3RMZW4sCisJSU4JQk9PTEVBTgkJYldpdiwKKwlJTglVQ0hBUgkJCVF1ZXVlU2VsLAorCUlOCVVDSEFSCQkJTmV4dFZhbGlkLAorCUlOCVVDSEFSCQkJVHhCdXJzdCkKK3sKKwlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKKwlwVHhJbmZvLT5RU0VMID0gUXVldWVTZWw7CisKKwlpZiAoUXVldWVTZWwgIT0gRklGT19FRENBKQorCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PT09PiBRdWV1ZVNlbCAhPSBGSUZPX0VEQ0E8PT09PT09PVxuIikpOworCisJcFR4SW5mby0+VVNCRE1BTmV4dFZMRCA9IE5leHRWYWxpZDsKKwlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gVHhCdXJzdDsKKwlwVHhJbmZvLT5XSVYgPSBiV2l2OworCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMDsKKwlwVHhJbmZvLT5yc3YgPSAwOworCXBUeEluZm8tPnJzdjIgPSAwOworCisJcmV0dXJuOworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gY29udmVydCBSc3NpICovCisjaWYgMQorLy8KKy8vIFRoZSB3YXkgdXNlZCB3aXRoIEdFVF9MTkFfR0FJTigpLgorLy8KK0NIQVIgQVRFQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCVJzc2ksCisJSU4gIFVDSEFSICAgUnNzaU51bWJlcikKK3sKKwlVQ0hBUglSc3NpT2Zmc2V0LCBMTkFHYWluOworCisJLy8gUnNzaSBlcXVhbHMgdG8gemVybyBzaG91bGQgYmUgYW4gaW52YWxpZCB2YWx1ZQorCWlmIChSc3NpID09IDApCisJCXJldHVybiAtOTk7CisKKwlMTkFHYWluID0gR0VUX0xOQV9HQUlOKHBBZCk7CisJaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA+IDE0KQorCXsKKwkJaWYgKFJzc2lOdW1iZXIgPT0gMCkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MDsKKwkJZWxzZSBpZiAoUnNzaU51bWJlciA9PSAxKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDI7CisJfQorCWVsc2UKKwl7CisJCWlmIChSc3NpTnVtYmVyID09IDApCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQyOworCX0KKworCXJldHVybiAoLTEyIC0gUnNzaU9mZnNldCAtIExOQUdhaW4gLSBSc3NpKTsKK30KKyNlbHNlCisvLworLy8gVGhlIHdheSBvcmlnaW5hbGx5IHVzZWQgaW4gQVRFIG9mIHJ0Mjg2MGFwLgorLy8KK0NIQVIgQVRFQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCQkJUnNzaSwKKwlJTiAgVUNIQVIgICBSc3NpTnVtYmVyKQoreworCVVDSEFSCVJzc2lPZmZzZXQsIExOQUdhaW47CisKKwkvLyBSc3NpIGVxdWFscyB0byB6ZXJvIHNob3VsZCBiZSBhbiBpbnZhbGlkIHZhbHVlCisJaWYgKFJzc2kgPT0gMCkKKwkJcmV0dXJuIC05OTsKKworICAgIGlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkKKyAgICB7CisgICAgICAgIExOQUdhaW4gPSBwQWQtPkFMTkFHYWluOworICAgICAgICBpZiAoUnNzaU51bWJlciA9PSAwKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDE7CisJCWVsc2UKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE5BR2FpbiA9IHBBZC0+QkxOQUdhaW47CisgICAgICAgIGlmIChSc3NpTnVtYmVyID09IDApCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQyOworICAgIH0KKworICAgIHJldHVybiAoLTMyIC0gUnNzaU9mZnNldCArIExOQUdhaW4gLSBSc3NpKTsKK30KKyNlbmRpZiAvKiBlbmQgb2YgI2lmIDEgKi8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBKYXBhbiBmaWx0ZXIgY29lZmZpY2llbnRzIGlmIG5lZWRlZC4KKwlOb3RlOgorCQlUaGlzIHJvdXRpbmUgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4KKwkJZW50ZXJpbmcgVFhGUkFNRSBtb2RlIG9yIFRYQ09OVCBtb2RlLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIFZPSUQgU2V0SmFwYW5GaWx0ZXIoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQkJQmJwRGF0YSA9IDA7CisKKwkvLworCS8vIElmIENoYW5uZWw9MTQgYW5kIEJhbmR3aWR0aD0yME0gYW5kIE1vZGU9Q0NLLCBzZXQgQkJQIFI0IGJpdDU9MQorCS8vIChKYXBhbiBUeCBmaWx0ZXIgY29lZmZpY2llbnRzKXdoZW4gKFRYRlJBTUUgb3IgVFhDT05UKS4KKwkvLworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQmJwRGF0YSk7CisKKyAgICBpZiAoKHBBZC0+YXRlLlR4V0kuUEhZTU9ERSA9PSBNT0RFX0NDSykgJiYgKHBBZC0+YXRlLkNoYW5uZWwgPT0gMTQpICYmIChwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzIwKSkKKyAgICB7CisgICAgICAgIEJicERhdGEgfD0gMHgyMDsgICAgLy8gdHVybiBvbgorICAgICAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRKYXBhbkZpbHRlciEhIVxuIikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCQlCYnBEYXRhICY9IDB4ZGY7ICAgIC8vIHR1cm4gb2ZmCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNsZWFySmFwYW5GaWx0ZXIhISFcbiIpKTsKKyAgICB9CisKKwlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJicERhdGEpOworfQorCitWT0lEIEFURVNhbXBsZVJzc2koCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUFJYV0lfU1RSVUMJCXBSeFdJKQoreworCS8qIFRoZXJlIGFyZSB0d28gd2F5cyB0byBjb2xsZWN0IFJTU0kuICovCisjaWYgMQorCS8vcEFkLT5MYXN0UnhSYXRlID0gKFVTSE9SVCkoKHBSeFdJLT5NQ1MpICsgKHBSeFdJLT5CVyA8PDcpICsgKHBSeFdJLT5TaG9ydEdJIDw8OCkrIChwUnhXSS0+UEhZTU9ERSA8PDE0KSkgOworCWlmIChwUnhXSS0+UlNTSTAgIT0gMCkKKwl7CisJCXBBZC0+YXRlLkxhc3RSc3NpMAk9IEFURUNvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUikgcFJ4V0ktPlJTU0kwLCBSU1NJXzApOworCQlwQWQtPmF0ZS5BdmdSc3NpMFg4CT0gKHBBZC0+YXRlLkF2Z1Jzc2kwWDggLSBwQWQtPmF0ZS5BdmdSc3NpMCkgKyBwQWQtPmF0ZS5MYXN0UnNzaTA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kwICAJPSBwQWQtPmF0ZS5BdmdSc3NpMFg4ID4+IDM7CisJfQorCWlmIChwUnhXSS0+UlNTSTEgIT0gMCkKKwl7CisJCXBBZC0+YXRlLkxhc3RSc3NpMQk9IEFURUNvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUikgcFJ4V0ktPlJTU0kxLCBSU1NJXzEpOworCQlwQWQtPmF0ZS5BdmdSc3NpMVg4CT0gKHBBZC0+YXRlLkF2Z1Jzc2kxWDggLSBwQWQtPmF0ZS5BdmdSc3NpMSkgKyBwQWQtPmF0ZS5MYXN0UnNzaTE7CisJCXBBZC0+YXRlLkF2Z1Jzc2kxCT0gcEFkLT5hdGUuQXZnUnNzaTFYOCA+PiAzOworCX0KKwlpZiAocFJ4V0ktPlJTU0kyICE9IDApCisJeworCQlwQWQtPmF0ZS5MYXN0UnNzaTIJPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMiwgUlNTSV8yKTsKKwkJcEFkLT5hdGUuQXZnUnNzaTJYOAk9IChwQWQtPmF0ZS5BdmdSc3NpMlg4IC0gcEFkLT5hdGUuQXZnUnNzaTIpICsgcEFkLT5hdGUuTGFzdFJzc2kyOworCQlwQWQtPmF0ZS5BdmdSc3NpMgk9IHBBZC0+YXRlLkF2Z1Jzc2kyWDggPj4gMzsKKwl9CisKKwlwQWQtPmF0ZS5MYXN0U05SMCA9IChDSEFSKShwUnhXSS0+U05SMCk7Ly8gQ0hBUiA9PT4gVUNIQVIgPworCXBBZC0+YXRlLkxhc3RTTlIxID0gKENIQVIpKHBSeFdJLT5TTlIxKTsvLyBDSEFSID09PiBVQ0hBUiA/CisKKwlwQWQtPmF0ZS5OdW1PZkF2Z1Jzc2lTYW1wbGUgKys7CisjZWxzZQorCXBBZC0+YXRlLkxhc3RTTlIwID0gKENIQVIpKHBSeFdJLT5TTlIwKTsKKwlwQWQtPmF0ZS5MYXN0U05SMSA9IChDSEFSKShwUnhXSS0+U05SMSk7CisJcEFkLT5hdGUuUnhDbnRQZXJTZWMrKzsKKwlwQWQtPmF0ZS5MYXN0UnNzaTAgPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMCwgUlNTSV8wKTsKKwlwQWQtPmF0ZS5MYXN0UnNzaTEgPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMSwgUlNTSV8xKTsKKwlwQWQtPmF0ZS5MYXN0UnNzaTIgPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMiwgUlNTSV8yKTsKKwlwQWQtPmF0ZS5BdmdSc3NpMFg4ID0gKHBBZC0+YXRlLkF2Z1Jzc2kwWDggLSBwQWQtPmF0ZS5BdmdSc3NpMCkgKyBwQWQtPmF0ZS5MYXN0UnNzaTA7CisJcEFkLT5hdGUuQXZnUnNzaTAgPSBwQWQtPmF0ZS5BdmdSc3NpMFg4ID4+IDM7CisJcEFkLT5hdGUuQXZnUnNzaTFYOCA9IChwQWQtPmF0ZS5BdmdSc3NpMVg4IC0gcEFkLT5hdGUuQXZnUnNzaTEpICsgcEFkLT5hdGUuTGFzdFJzc2kxOworCXBBZC0+YXRlLkF2Z1Jzc2kxID0gcEFkLT5hdGUuQXZnUnNzaTFYOCA+PiAzOworCXBBZC0+YXRlLkF2Z1Jzc2kyWDggPSAocEFkLT5hdGUuQXZnUnNzaTJYOCAtIHBBZC0+YXRlLkF2Z1Jzc2kyKSArIHBBZC0+YXRlLkxhc3RSc3NpMjsKKwlwQWQtPmF0ZS5BdmdSc3NpMiA9IHBBZC0+YXRlLkF2Z1Jzc2kyWDggPj4gMzsKKwlwQWQtPmF0ZS5OdW1PZkF2Z1Jzc2lTYW1wbGUgKys7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCBSVE1QU3RhdGlvblN0b3AoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpCit7CisvLwlCT09MRUFOICAgICAgIENhbmNlbGxlZDsKKworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QU3RhdGlvblN0b3BcbiIpKTsKKworCS8vIEZvciByeCBzdGF0aXN0aWNzLCB3ZSBuZWVkIHRvIGtlZXAgdGhpcyB0aW1lciBydW5uaW5nLgorLy8JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgICAgICAmQ2FuY2VsbGVkKTsKKworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBSVE1QU3RhdGlvblN0b3BcbiIpKTsKK30KKworVk9JRCBSVE1QU3RhdGlvblN0YXJ0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKQoreworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QU3RhdGlvblN0YXJ0XG4iKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFJUTVBTdGF0aW9uU3RhcnRcbiIpKTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTZXR1cCBGcmFtZSBmb3JtYXQuCisJTk9URToKKwkJVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gQVRFIG1vZGUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaWZkZWYgUlQyODcwCisvKj09PT09PT09PT09PT09PT09PT09PT1TdGFydCBvZiBSVDI4NzA9PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgSU5UIEFURVNldFVwRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDMyIFR4SWR4KQoreworCVVJTlQgajsKKwlQVFhfQ09OVEVYVAlwTnVsbENvbnRleHQ7CisJUFVDSEFSCQkJcERlc3Q7CisJSFRUUkFOU01JVF9TRVRUSU5HCVR4SFRQaHlNb2RlOworCVBUWFdJX1NUUlVDCQlwVHhXSTsKKwlQVFhJTkZPX1NUUlVDCQlwVHhJbmZvOworCVVJTlQzMgkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoLCBPcmdCdWZmZXJMZW5ndGggPSAwOworCVVDSEFSCQkJcGFkTGVuID0gMDsKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCVBIRUFERVJfODAyXzExCXBIZWFkZXI4MDIxMSA9IE5VTEw7CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkgfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJeworCQlyZXR1cm4gLTE7CisJfQorCisJLyogV2UgYWx3YXlzIHVzZSBRSURfQUNfQkUgYW5kIEZJRk9fRURDQSBpbiBBVEUgbW9kZS4gKi8KKworCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJQVNTRVJUKHBOdWxsQ29udGV4dCAhPSBOVUxMKTsKKworCWlmIChwTnVsbENvbnRleHQtPkluVXNlID09IEZBTFNFKQorCXsKKwkJLy8gU2V0IHRoZSBpbiB1c2UgYml0CisJCXBOdWxsQ29udGV4dC0+SW5Vc2UgPSBUUlVFOworCQlOZGlzWmVyb01lbW9yeSgmKHBBZC0+TnVsbEZyYW1lKSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCQkvLyBGaWxsIDgwMi4xMSBoZWFkZXIuCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEhlYWRlcjgwMjExID0gTmRpc01vdmVNZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIHBBZC0+YXRlLkhlYWRlciwgcEFkLT5hdGUuSExlbik7CisvLwkJCXBEZXN0ID0gTmRpc01vdmVNZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIHBBZC0+YXRlLkhlYWRlciwgcEFkLT5hdGUuSExlbik7CisvLwkJCXBIZWFkZXI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSlwRGVzdDsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwkJeworCQkJLy8gRmlsbCA4MDIuMTEgaGVhZGVyLgorCQkJTmRpc01vdmVNZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIFRlbXBsYXRlRnJhbWUsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCX0KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpJihwQWQtPk51bGxGcmFtZSksIERJUl9SRUFELCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLyogbW9kaWZ5IHNlcXVlbmNlIG51bWJlci4uLi4gKi8KKwkJCWlmIChwQWQtPmF0ZS5UeERvbmVDb3VudCA9PSAwKQorCQkJeworCQkJCXBBZC0+YXRlLnNlcSA9IHBIZWFkZXI4MDIxMS0+U2VxdWVuY2U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEhlYWRlcjgwMjExLT5TZXF1ZW5jZSA9ICsrcEFkLT5hdGUuc2VxOworCQkJfQorCQkJLyogV2UgYWxyZWFkeSBnb3QgYWxsIHRoZSBhZGRyLiBmaWVsZHMgZnJvbSBRQSBHVUkuICovCisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJCXsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjEsIHBBZC0+YXRlLkFkZHIxKTsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjIsIHBBZC0+YXRlLkFkZHIyKTsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjMsIHBBZC0+YXRlLkFkZHIzKTsKKwkJfQorCisJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXSwgVFhfQlVGRkVSX05PUk1TSVpFKTsvLz8/PworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLy8gQXZvaWQgdG8gZXhjZWVkIHRoZSByYW5nZSBvZiBXaXJlbGVzc1BhY2tldFtdLgorCQkJQVNTRVJUKHBBZC0+YXRlLlR4SW5mby5VU0JETUFUeFBrdExlbiA8PSAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBUeEluZm8sICYocEFkLT5hdGUuVHhJbmZvKSwgc2l6ZW9mKHBBZC0+YXRlLlR4SW5mbykpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCQl7CisJCQkvLyBBdm9pZCB0byBleGNlZWQgdGhlIHJhbmdlIG9mIFdpcmVsZXNzUGFja2V0W10uCisJCQlBU1NFUlQocEFkLT5hdGUuVHhMZW5ndGggPD0gKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKSk7CisKKwkJCS8vIHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIHdpbGwgYmUgdXBkYXRlZCB0byBpbmNsdWRlIHBhZGRpbmcgbGF0ZXIuCisJCQlBVEVXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKFRYV0lfU0laRSArIHBBZC0+YXRlLlR4TGVuZ3RoKSwgVFJVRSwgRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsICBGQUxTRSk7CisJCQlwVHhJbmZvLT5RU0VMID0gRklGT19FRENBOworCQl9CisKKwkJcFR4V0kgPSAoUFRYV0lfU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYSU5GT19TSVpFXTsKKworCQkvLyBGaWxsIFR4V0kuCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLkJXID0gcEFkLT5hdGUuVHhXSS5CVzsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBwQWQtPmF0ZS5UeFdJLlNob3J0R0k7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5TVEJDID0gcEFkLT5hdGUuVHhXSS5TVEJDOworCQkJVHhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEFkLT5hdGUuVHhXSS5NQ1M7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5NT0RFID0gcEFkLT5hdGUuVHhXSS5QSFlNT0RFOworCQkJQVRFV3JpdGVUeFdJKHBBZCwgcFR4V0ksIHBBZC0+YXRlLlR4V0kuRlJBRywgcEFkLT5hdGUuVHhXSS5UUywgcEFkLT5hdGUuVHhXSS5BTVBEVSwgcEFkLT5hdGUuVHhXSS5BQ0ssIHBBZC0+YXRlLlR4V0kuTlNFUSwKKwkJCQlwQWQtPmF0ZS5UeFdJLkJBV2luU2l6ZSwgQlNTSURfV0NJRCwgcEFkLT5hdGUuVHhXSS5NUERVdG90YWxCeXRlQ291bnQvKiBpbmNsdWRlIDgwMi4xMSBoZWFkZXIgKi8sIHBBZC0+YXRlLlR4V0kuUGFja2V0SWQsIDAsIHBBZC0+YXRlLlR4V0kudHhvcC8qSUZTX0hUVFhPUCovLCBwQWQtPmF0ZS5UeFdJLkNGQUNLLypGQUxTRSovLCBUeEhUUGh5TW9kZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5CVyA9IHBBZC0+YXRlLlR4V0kuQlc7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gcEFkLT5hdGUuVHhXSS5TaG9ydEdJOworCQkJVHhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPmF0ZS5UeFdJLk1DUzsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBwQWQtPmF0ZS5UeFdJLlBIWU1PREU7CisKKwkJCUFURVdyaXRlVHhXSShwQWQsIHBUeFdJLCAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UvKiBObyBhY2sgcmVxdWlyZWQuICovLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgcEFkLT5hdGUuVHhMZW5ndGgsCisJCQkJMCwgMCwgSUZTX0hUVFhPUCwgRkFMU0UsIFR4SFRQaHlNb2RlKTsvLyAiTU1QU19TVEFUSUMiIGluc3RlYWQgb2YgIk1NUFNfRFlOQU1JQyIgPz8/CisJCX0KKworCQlSVE1QTW92ZU1lbW9yeSgmcEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbVFhJTkZPX1NJWkUrVFhXSV9TSVpFXSwgJnBBZC0+TnVsbEZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCisJCXBEZXN0ID0gJihwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtUWElORk9fU0laRStUWFdJX1NJWkUrc2l6ZW9mKEhFQURFUl84MDJfMTEpXSk7CisKKwkJLy8gUHJlcGFyZSBmcmFtZSBwYXlsb2FkCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLy8gY29weSBwYXR0ZXJuCisJCQlpZiAoKHBBZC0+YXRlLlBMZW4gIT0gMCkpCisJCQl7CisJCQkJZm9yIChqID0gMDsgaiA8IHBBZC0+YXRlLkRMZW47IGorPXBBZC0+YXRlLlBMZW4pCisJCQkJeworCQkJCQlSVE1QTW92ZU1lbW9yeShwRGVzdCwgcEFkLT5hdGUuUGF0dGVybiwgcEFkLT5hdGUuUExlbik7CisJCQkJCXBEZXN0ICs9IHBBZC0+YXRlLlBMZW47CisJCQkJfQorCQkJfQorCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggPSBUWElORk9fU0laRSArIFRYV0lfU0laRSArIHBBZC0+YXRlLlR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50OworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCQl7CisJCSAgICBmb3IgKGogPSAwOyBqIDwgKHBBZC0+YXRlLlR4TGVuZ3RoIC0gc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsgaisrKQorCQkgICAgeworCQkJCSpwRGVzdCA9IDB4QTU7CisJCQkJcERlc3QgKz0gMTsKKwkJICAgIH0KKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBwQWQtPmF0ZS5UeExlbmd0aDsKKwkJfQorCisjaWYgMQorCQlPcmdCdWZmZXJMZW5ndGggPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsKKwkJVHJhbnNmZXJCdWZmZXJMZW5ndGggPSAoVHJhbnNmZXJCdWZmZXJMZW5ndGggKyAzKSAmICh+Myk7CisKKwkJLy8gQWx3YXlzIGFkZCA0IGV4dHJhIGJ5dGVzIGF0IGV2ZXJ5IHBhY2tldC4KKwkJcGFkTGVuID0gVHJhbnNmZXJCdWZmZXJMZW5ndGggLSBPcmdCdWZmZXJMZW5ndGggKyA0Oy8qIDQgPT0gbGFzdCBwYWNrZXQgcGFkZGluZyAqLworCQlBU1NFUlQoKHBhZExlbiA8PSAoUlRNUF9QS1RfVEFJTF9QQURESU5HIC0gNC8qIDQgPT0gTWF4QnVsa091dHNpemUgYWxpZ25tZW50IHBhZGRpbmcgKi8pKSk7CisKKwkJLyogTm93IG1lbXplcm8gYWxsIGV4dHJhIHBhZGRpbmcgYnl0ZXMuICovCisJCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCBwYWRMZW4pOworCQlwRGVzdCArPSBwYWRMZW47CisjZWxzZQorCQlpZiAoKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICUgNCkgPT0gMSkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocERlc3QsIDcpOworCQkJcERlc3QgKz0gNzsKKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoICArPSAzOworCQl9CisJCWVsc2UgaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0aCAlIDQpID09IDIpCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCA2KTsKKwkJCXBEZXN0ICs9IDY7CisJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCAgKz0gMjsKKwkJfQorCQllbHNlIGlmICgoVHJhbnNmZXJCdWZmZXJMZW5ndGggJSA0KSA9PSAzKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShwRGVzdCwgNSk7CisJCQlwRGVzdCArPSA1OworCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggICs9IDE7CisJCX0KKyNlbmRpZiAvLyAxIC8vCisKKwkJLy8gVXBkYXRlIHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIHRvIGluY2x1ZGUgcGFkZGluZy4KKwkJcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aCAtIFRYSU5GT19TSVpFOworCisJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoICs9IDQ7CisKKwkJLy8gSWYgVHJhbnNmZXJCdWZmZXJMZW5ndGggaXMgbXVsdGlwbGUgb2YgNjQsIGFkZCBleHRyYSA0IGJ5dGVzIGFnYWluLgorCQlpZiAoKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICUgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocERlc3QsIDQpOworCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggKz0gNDsKKwkJfQorCisJCS8vIEZpbGwgb3V0IGZyYW1lIGxlbmd0aCBpbmZvcm1hdGlvbiBmb3IgZ2xvYmFsIEJ1bGsgb3V0IGFyYml0b3IKKwkJcEFkLT5OdWxsQ29udGV4dC5CdWxrT3V0U2l6ZSA9IFRyYW5zZmVyQnVmZmVyTGVuZ3RoOworCX0KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKCgoUFVDSEFSKXBUeEluZm8pK1RYV0lfU0laRStUWElORk9fU0laRSksIERJUl9XUklURSwgRkFMU0UpOworICAgIFJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4SW5mbywgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwlyZXR1cm4gMDsKK30KKworVk9JRCBBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBUWF9DT05URVhUCQkgICAgcE51bGxDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJSXJxRmxhZ3M7CisJVUxPTkcJCQkgICAgT2xkVmFsdWU7CisKKwlwTnVsbENvbnRleHQgPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgPSBwTnVsbENvbnRleHQtPnBBZDsKKworCisJLy8gUmVzZXQgTnVsbCBmcmFtZSBjb250ZXh0IGZsYWdzCisJcE51bGxDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJcE51bGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCVN0YXR1cyA9IHBVcmItPnN0YXR1czsKKworCS8vIFN0b3JlIEJ1bGtPdXQgUGlwZUlkCisJQnVsa091dFBpcGVJZCA9IHBOdWxsQ29udGV4dC0+QnVsa091dFBpcGVJZDsKKwlwQWQtPkJ1bGtPdXREYXRhT25lU2VjQ291bnQrKzsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCWlmICgoQVRFX09OKHBBZCkpICYmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpKQorCQl7CisJCQlpZiAocEFkLT5hdGUuUUlEID09IEJ1bGtPdXRQaXBlSWQpCisJCQl7CisJCQkJLy8gTGV0IFJ4IGNhbiBoYXZlIGEgY2hhbmNlIHRvIGJyZWFrIGluIGR1cmluZyBUeCBwcm9jZXNzLAorCQkJCS8vIGVzcGVjaWFsbHkgZm9yIGxvb3BiYWNrIG1vZGUgaW4gUUEgQVRFLgorCQkJCS8vIFRvIHRyYWRlIG9mZiBiZXR3ZWVuIHR4IHBlcmZvcm1hbmNlIGFuZCBsb29wYmFjayBtb2RlIGludGVncml0eS4KKwkJCQkvKiBRICAgOiBOb3cgUnggaXMgaGFuZGxlZCBieSB0YXNrbGV0LCBkbyB3ZSBzdGlsbCBuZWVkIHRoaXMgZGVsYXkgPyAqLworCQkJCS8qIEFucyA6IEV2ZW4gdGFza2xldCBpcyB1c2VkLCBSeC9UeCA8IDEgaWYgd2UgZG8gbm90IGRlbGF5IGZvciBhIHdoaWxlIHJpZ2h0IGhlcmUuICovCisJCQkJUlRNUHVzZWNEZWxheSg1MDApOworCQkJCXBBZC0+YXRlLlR4RG9uZUNvdW50Kys7CisJCQkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQkJCUFTU0VSVChwQWQtPmF0ZS5RSUQgPT0gMCk7CisJCQkJcEFkLT5hdGUuVHhBYzArKzsKKwkJCX0KKwkJfQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJCXBBZC0+QnVsa091dENvbXBsZXRlKys7CisKKwkJcEFkLT5Db3VudGVyczgwMjMuR29vZFRyYW5zbWl0cysrOworCisJCS8qIERvbid0IHdvcnJ5IGFib3V0IHRoZSBxdWV1ZSBpcyBlbXB0eSBvciBub3QuIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpdHNlbGYuICovCisJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgVFJVRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCisJCS8qIEluIDI4eHgsIFNlbmRUeFdhaXRRdWV1ZSA9PT4gVHhTd1F1ZXVlICAqLworLyoKKwkJaWYgKHBBZC0+U2VuZFR4V2FpdFF1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApCisJCXsKKwkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgQnVsa091dFBpcGVJZCk7CisJCX0KKyovCisJfQorCWVsc2UJLy8gU1RBVFVTX09USEVSCisJeworCQlwQWQtPkJ1bGtPdXRDb21wbGV0ZU90aGVyKys7CisKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQnVsa091dERhdGFQYWNrZXQgRmFpbGVkIFNUQVRVU19PVEhFUiA9IDB4JXggLiBcbiIsIFN0YXR1cykpOworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI+PkJ1bGtPdXRSZXE9MHglbHgsIEJ1bGtPdXRDb21wbGV0ZT0weCVseFxuIiwgcEFkLT5CdWxrT3V0UmVxLCBwQWQtPkJ1bGtPdXRDb21wbGV0ZSkpOworCisJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQl7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCS8qIEluIDI4eHgsIFJUX09JRF9VU0JfUkVTRVRfQlVMS19PVVQgPT0+IENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCAqLworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQkJLy8gQ2hlY2sKKwkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gQnVsa091dFBpcGVJZDsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJfQorCisKKworCWlmIChhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpID4gMCkKKwl7CisJCWF0b21pY19kZWMoJnBBZC0+QnVsa091dFJlbWFpbmVkKTsKKwl9CisKKwkvLyAxc3QgLSBUcmFuc21pdCBTdWNjZXNzCisJT2xkVmFsdWUgPSBwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0OworCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQrKzsKKworCWlmIChwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0IDwgT2xkVmFsdWUpCisJeworCQlwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5IaWdoUGFydCsrOworCX0KKworCWlmKCgocEFkLT5Db250aW5CdWxrT3V0ID09IFRSVUUgKSB8fChhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpID4gMCkpICYmIChwQWQtPmF0ZS5Nb2RlICYgQVRFX1RYRlJBTUUpKQorCXsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisJfQorCWVsc2UKKwl7CisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJcEFkLT5hdGUuVHhTdGF0dXMgPSAwOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJfQorCisJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCS8vIEFsd2F5cyBjYWxsIEJ1bGsgcm91dGluZSwgZXZlbiByZXNldCBidWxrLgorCS8vIFRoZSBwcm90ZWN0aW9uIG9mIHJlc3QgYnVsayBzaG91bGQgYmUgaW4gQnVsa091dCByb3V0aW5lLgorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQpCit7CisJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJUFVSQgkJCXBVcmI7CisJaW50CQkJCXJldCA9IDA7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCisJQVNTRVJUKEJ1bGtPdXRQaXBlSWQgPT0gMCk7CisKKwkvKiBCdWlsZCB1cCB0aGUgZnJhbWUgZmlyc3QuICovCisvLwlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwlpZiAocEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9PSBUUlVFKQorCXsKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gVFJVRTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCS8vIEluY3JlYXNlIFRvdGFsIHRyYW5zbWl0IGJ5dGUgY291bnRlcgorCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBOdWxsQ29udGV4dC0+QnVsa091dFNpemU7CisJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcE51bGxDb250ZXh0LT5CdWxrT3V0U2l6ZTsKKworCS8vIENsZWFyIEFURSBmcmFtZSBidWxrIG91dCBmbGFnCisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfQVRFKTsKKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJcE51bGxDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlSVFVTQkluaXRUeERlc2MocEFkLCBwTnVsbENvbnRleHQsIEJ1bGtPdXRQaXBlSWQsICh1c2JfY29tcGxldGVfdClBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKKwlwVXJiID0gcE51bGxDb250ZXh0LT5wVXJiOworCisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXQ6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKKwkJcmV0dXJuOworCX0KKworCXBBZC0+QnVsa091dFJlcSsrOworCXJldHVybjsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJVUlOVAkJCWk7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+QVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworI2lmIDEKKwlmb3IgKCBpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisJCWlmKHBSeENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJeworCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKwkJCXBSeENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQkvL05kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworCQkJLy9wQWQtPlBlbmRpbmdSeC0tOworCQl9CisJfQorI2Vsc2UKKwlmb3IgKCBpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisJCWlmKGF0b21pY19yZWFkKCZwUnhDb250ZXh0LT5JcnBMb2NrKSA9PSBJUlBMT0NLX0NBTkNFTEFCTEUpCisJCXsKKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisJCX0KKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcFJ4Q29udGV4dC0+SXJwTG9jaywgSVJQTE9DS19DQU5DRV9TVEFSVCk7CisJfQorI2VuZGlmIC8vIDEgLy8KKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tQVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworCXJldHVybjsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworVk9JRCBydF9lZV9yZWFkX2FsbChQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUICpEYXRhKQoreworCVVTSE9SVCBpOworCVVTSE9SVCB2YWx1ZTsKKworCWZvciAoaSA9IDAgOyBpIDwgRUVQUk9NX1NJWkUvMiA7ICkKKwl7CisJCS8qICJ2YWx1ZSIgaXMgZXhwZWNpYWxseSBmb3Igc29tZSBjb21waWxlcnMuLi4gKi8KKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBpKjIsIHZhbHVlKTsKKwkJRGF0YVtpXSA9IHZhbHVlOworCQlpKys7CisJfQorfQorCitWT0lEIHJ0X2VlX3dyaXRlX2FsbChQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUICpEYXRhKQoreworCVVTSE9SVCBpOworCVVTSE9SVCB2YWx1ZTsKKworCWZvciAoaSA9IDAgOyBpIDwgRUVQUk9NX1NJWkUvMiA7ICkKKwl7CisJCS8qICJ2YWx1ZSIgaXMgZXhwZWNpYWxseSBmb3Igc29tZSBjb21waWxlcnMuLi4gKi8KKwkJdmFsdWUgPSBEYXRhW2ldOworCQlSVDI4eHhfRUVQUk9NX1dSSVRFMTYocEFkLCBpKjIsIHZhbHVlKTsKKwkJaSArKzsKKwl9Cit9CisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKK1ZPSUQgQVRFX1FBX1N0YXRpc3RpY3MoCisJSU4gUFJUTVBfQURBUFRFUgkJCXBBZCwKKwlJTiBQUlhXSV9TVFJVQwkJCQlwUnhXSSwKKwlJTiBQUlQyOFhYX1JYRF9TVFJVQwkJcFJ4RCwKKwlJTiBQSEVBREVSXzgwMl8xMQkJCXBIZWFkZXIpCit7CisJLy8gdXBkYXRlIGNvdW50ZXIgZmlyc3QKKwlpZiAocEhlYWRlciAhPSBOVUxMKQorCXsKKwkJaWYgKHBIZWFkZXItPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkKKwkJeworCQkJaWYgKHBSeEQtPlUyTSkKKwkJCQlwQWQtPmF0ZS5VMk0rKzsKKwkJCWVsc2UKKwkJCQlwQWQtPmF0ZS5PdGhlckRhdGErKzsKKwkJfQorCQllbHNlIGlmIChwSGVhZGVyLT5GQy5UeXBlID09IEJUWVBFX01HTVQpCisJCXsKKwkJCWlmIChwSGVhZGVyLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKQorCQkJCXBBZC0+YXRlLkJlYWNvbisrOworCQkJZWxzZQorCQkJCXBBZC0+YXRlLk90aGVyQ291bnQrKzsKKwkJfQorCQllbHNlIGlmIChwSGVhZGVyLT5GQy5UeXBlID09IEJUWVBFX0NOVEwpCisJCXsKKwkJCXBBZC0+YXRlLk90aGVyQ291bnQrKzsKKwkJfQorCX0KKwlwQWQtPmF0ZS5SU1NJMCA9IHBSeFdJLT5SU1NJMDsKKwlwQWQtPmF0ZS5SU1NJMSA9IHBSeFdJLT5SU1NJMTsKKwlwQWQtPmF0ZS5SU1NJMiA9IHBSeFdJLT5SU1NJMjsKKwlwQWQtPmF0ZS5TTlIwID0gcFJ4V0ktPlNOUjA7CisJcEFkLT5hdGUuU05SMSA9IHBSeFdJLT5TTlIxOworfQorCisvKiBjb21tYW5kIGlkIHdpdGggQ21kIFR5cGUgPT0gMHgwMDA4KGZvciAyOHh4KS8weDAwMDUoZm9yIGlOSUMpICovCisjZGVmaW5lIFJBQ0ZHX0NNRF9SRl9XUklURV9BTEwJCTB4MDAwMAorI2RlZmluZSBSQUNGR19DTURfRTJQUk9NX1JFQUQxNgkJMHgwMDAxCisjZGVmaW5lIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEUxNgkweDAwMDIKKyNkZWZpbmUgUkFDRkdfQ01EX0UyUFJPTV9SRUFEX0FMTAkweDAwMDMKKyNkZWZpbmUgUkFDRkdfQ01EX0UyUFJPTV9XUklURV9BTEwJMHgwMDA0CisjZGVmaW5lIFJBQ0ZHX0NNRF9JT19SRUFECQkJMHgwMDA1CisjZGVmaW5lIFJBQ0ZHX0NNRF9JT19XUklURQkJCTB4MDAwNgorI2RlZmluZSBSQUNGR19DTURfSU9fUkVBRF9CVUxLCQkweDAwMDcKKyNkZWZpbmUgUkFDRkdfQ01EX0JCUF9SRUFEOAkJCTB4MDAwOAorI2RlZmluZSBSQUNGR19DTURfQkJQX1dSSVRFOAkJMHgwMDA5CisjZGVmaW5lIFJBQ0ZHX0NNRF9CQlBfUkVBRF9BTEwJCTB4MDAwYQorI2RlZmluZSBSQUNGR19DTURfR0VUX0NPVU5URVIJCTB4MDAwYgorI2RlZmluZSBSQUNGR19DTURfQ0xFQVJfQ09VTlRFUgkJMHgwMDBjCisKKyNkZWZpbmUgUkFDRkdfQ01EX1JTVjEJCQkJMHgwMDBkCisjZGVmaW5lIFJBQ0ZHX0NNRF9SU1YyCQkJCTB4MDAwZQorI2RlZmluZSBSQUNGR19DTURfUlNWMwkJCQkweDAwMGYKKworI2RlZmluZSBSQUNGR19DTURfVFhfU1RBUlQJCQkweDAwMTAKKyNkZWZpbmUgUkFDRkdfQ01EX0dFVF9UWF9TVEFUVVMJCTB4MDAxMQorI2RlZmluZSBSQUNGR19DTURfVFhfU1RPUAkJCTB4MDAxMgorI2RlZmluZSBSQUNGR19DTURfUlhfU1RBUlQJCQkweDAwMTMKKyNkZWZpbmUgUkFDRkdfQ01EX1JYX1NUT1AJCQkweDAwMTQKKyNkZWZpbmUgUkFDRkdfQ01EX0dFVF9OT0lTRV9MRVZFTAkweDAwMTUKKworI2RlZmluZSBSQUNGR19DTURfQVRFX1NUQVJUCQkJMHgwMDgwCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RPUAkJCTB4MDA4MQorCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUgkJMHgwMTAwCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ09OVAkJCTB4MDEwMQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0ZSQU1FCQkweDAxMDIKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQlcJICAgICAgICAgICAgMHgwMTAzCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMAkgICAgICAgIDB4MDEwNAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjEJCQkweDAxMDUKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfRlJFUV9PRkZTRVQJCTB4MDEwNgorI2RlZmluZSBSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTCQkweDAxMDcKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9SRVNFVF9DT1VOVEVSCQkJMHgwMTA4CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkEJCTB4MDEwOQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFTF9SWF9BTlRFTk5BCQkweDAxMGEKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEUJCQkweDAxMGIKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQ0hBTk5FTAkJCTB4MDEwYworI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMQkJCQkweDAxMGQKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQUREUjIJCQkJMHgwMTBlCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIzCQkJCTB4MDEwZgorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9SQVRFCQkJCTB4MDExMAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9MRU4JCTB4MDExMQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVAkweDAxMTIKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TVEFSVF9SWF9GUkFNRQkJMHgwMTEzCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1JFQURfQlVMSwkweDAxMTQKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9FMlBST01fV1JJVEVfQlVMSwkweDAxMTUKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9JT19XUklURV9CVUxLCQkweDAxMTYKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9CQlBfUkVBRF9CVUxLCQkweDAxMTcKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9CQlBfV1JJVEVfQlVMSwkweDAxMTgKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9SRl9SRUFEX0JVTEsJCTB4MDExOQorI2RlZmluZSBSQUNGR19DTURfQVRFX1JGX1dSSVRFX0JVTEsJCTB4MDExYQorCisKKworI2RlZmluZSBBMkhleChfWCwgX3ApIAkJCQlcCit7CQkJCQkJCQkJXAorCVVDSEFSICpwOwkJCQkJCVwKKwlfWCA9IDA7CQkJCQkJCVwKKwlwID0gX3A7CQkJCQkJCVwKKwl3aGlsZSAoKCgqcCA+PSAnYScpICYmICgqcCA8PSAnZicpKSB8fCAoKCpwID49ICdBJykgJiYgKCpwIDw9ICdGJykpIHx8ICgoKnAgPj0gJzAnKSAmJiAoKnAgPD0gJzknKSkpCQlcCisJewkJCQkJCQkJCQkJCVwKKwkJaWYgKCgqcCA+PSAnYScpICYmICgqcCA8PSAnZicpKQkJCQlcCisJCQlfWCA9IF9YICogMTYgKyAqcCAtIDg3OwkJCQkJXAorCQllbHNlIGlmICgoKnAgPj0gJ0EnKSAmJiAoKnAgPD0gJ0YnKSkJCVwKKwkJCV9YID0gX1ggKiAxNiArICpwIC0gNTU7CQkJCQlcCisJCWVsc2UgaWYgKCgqcCA+PSAnMCcpICYmICgqcCA8PSAnOScpKQkJXAorCQkJX1ggPSBfWCAqIDE2ICsgKnAgLSA0ODsJCQkJCVwKKwkJcCsrOwkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCVwKK30KKworCitzdGF0aWMgVk9JRCBtZW1jcHlfZXhsKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVTE9ORyBsZW4pOworc3RhdGljIFZPSUQgbWVtY3B5X2V4cyhQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUxPTkcgbGVuKTsKK3N0YXRpYyBWT0lEIFJUTVBfSU9fUkVBRF9CVUxLKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVSU5UMzIgbGVuKTsKKworI2lmZGVmIFVDT1MKK2ludCBhdGVfY29weV90b191c2VyKAorCUlOIFBVQ0hBUiBwYXlsb2FkLAorCUlOIFBVQ0hBUiBtc2csCisJSU4gSU5UICAgIGxlbikKK3sKKwltZW1tb3ZlKHBheWxvYWQsIG1zZywgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworI3VuZGVmCWNvcHlfdG9fdXNlcgorI2RlZmluZSBjb3B5X3RvX3VzZXIoeCx5LHopIGF0ZV9jb3B5X3RvX3VzZXIoKFBVQ0hBUil4LCAoUFVDSEFSKXksIHopCisjZW5kaWYgLy8gVUNPUyAvLworCisjZGVmaW5lCUxFTl9PRl9BUkcgMTYKKworVk9JRCBSdG1wRG9BdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBDb21tYW5kX0lkOworCXN0cnVjdCBhdGVfcmFjZmdoZHIgKnBSYUNmZzsKKwlJTlQJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworCisKKwlpZigocFJhQ2ZnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0ZV9yYWNmZ2hkciksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCXsKKwkJU3RhdHVzID0gLUVJTlZBTDsKKwkJcmV0dXJuOworCX0KKworCU5kaXNaZXJvTWVtb3J5KHBSYUNmZywgc2l6ZW9mKHN0cnVjdCBhdGVfcmFjZmdoZHIpKTsKKworICAgIGlmIChjb3B5X2Zyb21fdXNlcigoUFVDSEFSKXBSYUNmZywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwl7CisJCVN0YXR1cyA9IC1FRkFVTFQ7CisJCWtmcmVlKHBSYUNmZyk7CisJCXJldHVybjsKKwl9CisKKworCUNvbW1hbmRfSWQgPSBudG9ocyhwUmFDZmctPmNvbW1hbmRfaWQpOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJcbiVzOiBDb21tYW5kX0lkID0gMHglMDR4ICFcbiIsIF9fRlVOQ1RJT05fXywgQ29tbWFuZF9JZCkpOworCisJc3dpdGNoIChDb21tYW5kX0lkKQorCXsKKyAJCS8vIFdlIHdpbGwgZ2V0IHRoaXMgY29tbWFuZCB3aGVuIFFBIHN0YXJ0cy4KKwkJY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVEFSVFxuIikpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjayBhcyBzb29uIGFzIHdlIGNhbiB0byBhdm9pZCBRQSB0aW1lb3V0LgorCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TVEFSVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiQVRFU1RBUlQiKTsKKwkJCX0KKwkJCWJyZWFrOworCisgCQkvLyBXZSB3aWxsIGdldCB0aGlzIGNvbW1hbmQgZWl0aGVyIFFBIGlzIGNsb3NlZCBvciBhdGVkIGlzIGtpbGxlZCBieSB1c2VyLgorCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU1RPUDoKKwkJCXsKKyNpZm5kZWYgVUNPUworCQkJCUlOVDMyIHJldDsKKyNlbmRpZiAvLyAhVUNPUyAvLworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NUT1BcbiIpKTsKKworCQkJCS8vIERpc3Rpbmd1aXNoIHRoaXMgY29tbWFuZCBjYW1lIGZyb20gUUEodmlhIGF0ZWQpCisJCQkJLy8gb3IgYXRlIGRhZW1vbiBhY2NvcmRpbmcgdG8gdGhlIGV4aXN0ZW5jZSBvZiBwaWQgaW4gcGF5bG9hZC4KKwkJCQkvLyBObyBuZWVkIHRvIHByZXBhcmUgZmVlZGJhY2sgaWYgdGhpcyBjbWQgY2FtZSBkaXJlY3RseSBmcm9tIGF0ZSBkYWVtb24uCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlpZiAocFJhQ2ZnLT5sZW5ndGggPT0gc2l6ZW9mKHBBZGFwdGVyLT5hdGUuQXRlUGlkKSkKKwkJCQl7CisJCQkJCS8vIFRoaXMgY29tbWFuZCBjYW1lIGZyb20gUUEuCisJCQkJCS8vIEdldCB0aGUgcGlkIG9mIEFURSBkYWVtb24uCisJCQkJCW1lbWNweSgoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5BdGVQaWQsCisJCQkJCQkoJnBSYUNmZy0+ZGF0YVswXSkgLSAyLyogPT0gJihwUmFDZmctPnN0YXR1cykgKi8sCisJCQkJCQlzaXplb2YocEFkYXB0ZXItPmF0ZS5BdGVQaWQpKTsKKworCQkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrIGFzIHNvb24gYXMgd2UgY2FuIHRvIGF2b2lkIFFBIHRpbWVvdXQuCisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisJICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCSAgICAgICAgICAgIAl7CisJICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TVE9QXG4iKSk7CisJICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworCSAgICAgICAgICAgIAl9CisKKwkJCQkJLy8KKwkJCQkJLy8ga2lsbCBBVEUgZGFlbW9uIHdoZW4gbGVhdmluZyBBVEUgbW9kZS4KKwkJCQkJLy8gV2UgbXVzdCBraWxsIEFURSBkYWVtb24gZmlyc3QgYmVmb3JlIHNldHRpbmcgQVRFU1RPUCwKKwkJCQkJLy8gb3IgTWljcm9zb2Z0IHdpbGwgcmVwb3J0IHN0aC4gd3JvbmcuCisjaWZuZGVmIFVDT1MKKwkJCQkJcmV0ID0ga2lsbF9wcm9jKHBBZGFwdGVyLT5hdGUuQXRlUGlkLCBTSUdURVJNLCAxKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJeworCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHVuYWJsZSB0byBzaWduYWwgdGhyZWFkXG4iLCBwQWRhcHRlci0+bmV0X2Rldi0+bmFtZSkpOworCQkJCQl9CisjZW5kaWYgLy8gIVVDT1MgLy8KKwkJCQl9CisKKyNpZmRlZiBVQ09TCisJCQkJLy8gUm9nZXIgYWRkIHRvIGF2b2lkIGVycm9yIG1lc3NhZ2UgYWZ0ZXIgY2xvc2UgUUEKKwkJCQlpZiAocEFkYXB0ZXItPkNTUkJhc2VBZGRyZXNzID09IFJUMjg2MF9DU1JfQUREUikKKwkJCQl7CisKKwkJCQkJLy8gcHJlcGFyZSBmZWVkYmFjayBhcyBzb29uIGFzIHdlIGNhbiB0byBhdm9pZCBRQSB0aW1lb3V0LgorCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKwkgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJICAgICAgICAgICAgCXsKKwkgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVBfU1RBUlRcbiIpKTsKKwkgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisJICAgICAgICAgICAgCX0KKwkJCQl9CisjZW5kaWYgLy8gVUNPUyAvLworCisJCQkJLy8gQVAgbWlnaHQgaGF2ZSBpbiBBVEVfU1RPUCBtb2RlIGR1ZSB0byBjbWQgZnJvbSBRQS4KKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCS8vIFNvbWVvbmUgaGFzIGtpbGxlZCBhdGUgZGFlbW9uIHdoaWxlIFFBIEdVSSBpcyBzdGlsbCBvcGVuLgorCQkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJBVEVTVE9QIik7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BUF9TVEFSVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9SRl9XUklURV9BTEw6CisJCQl7CisJCQkJVUlOVDMyIFIxLCBSMiwgUjMsIFI0OworCQkJCVVTSE9SVCBjaGFubmVsOworCisJCQkJbWVtY3B5KCZSMSwgcFJhQ2ZnLT5kYXRhLTIsIDQpOworCQkJCW1lbWNweSgmUjIsIHBSYUNmZy0+ZGF0YSsyLCA0KTsKKwkJCQltZW1jcHkoJlIzLCBwUmFDZmctPmRhdGErNiwgNCk7CisJCQkJbWVtY3B5KCZSNCwgcFJhQ2ZnLT5kYXRhKzEwLCA0KTsKKwkJCQltZW1jcHkoJmNoYW5uZWwsIHBSYUNmZy0+ZGF0YSsxNCwgMik7CisKKwkJCQlwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjEgPSBudG9obChSMSk7CisJCQkJcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlIyID0gbnRvaGwoUjIpOworCQkJCXBBZGFwdGVyLT5MYXRjaFJmUmVncy5SMyA9IG50b2hsKFIzKTsKKwkJCQlwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjQgPSBudG9obChSNCk7CisJCQkJcEFkYXB0ZXItPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBudG9ocyhjaGFubmVsKTsKKworCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWRhcHRlciwgcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlIxKTsKKwkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkYXB0ZXIsIHBBZGFwdGVyLT5MYXRjaFJmUmVncy5SMik7CisJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZGFwdGVyLCBwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjMpOworCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWRhcHRlciwgcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlI0KTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1JGX1dSSVRFX0FMTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfUkZfV1JJVEVfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKyAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0UyUFJPTV9SRUFEMTY6CisJCQl7CisJCQkJVVNIT1JUCW9mZnNldCwgdmFsdWUsIHRtcDsKKworCQkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCQkvKiAidG1wIiBpcyBleHBlY2lhbGx5IGZvciBzb21lIGNvbXBpbGVycy4uLiAqLworCQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZGFwdGVyLCBvZmZzZXQsIHRtcCk7CisJCQkJdmFsdWUgPSB0bXA7CisJCQkJdmFsdWUgPSBodG9ucyh2YWx1ZSk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkVFUFJPTSBSZWFkIG9mZnNldCA9IDB4JTA0eCwgdmFsdWUgPSAweCUwNHhcbiIsIG9mZnNldCwgdmFsdWUpKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDQpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJbWVtY3B5KHBSYUNmZy0+ZGF0YSwgJnZhbHVlLCAyKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInNpemVvZihzdHJ1Y3QgYXRlX3JhY2ZnaGRyKSA9ICVkXG4iLCBzaXplb2Yoc3RydWN0IGF0ZV9yYWNmZ2hkcikpKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfRTJQUk9NX1JFQUQxNlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfRTJQUk9NX1JFQUQxNiBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisgICAgICAgICAgIAl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEUxNjoKKwkJCXsKKwkJCQlVU0hPUlQJb2Zmc2V0LCB2YWx1ZTsKKworCQkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCQltZW1jcHkoJnZhbHVlLCBwUmFDZmctPmRhdGEsIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCVJUMjh4eF9FRVBST01fV1JJVEUxNihwQWRhcHRlciwgb2Zmc2V0LCB2YWx1ZSk7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEUxNlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfRTJQUk9NX1dSSVRFMTYgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfRTJQUk9NX1JFQURfQUxMOgorCQkJeworCQkJCVVTSE9SVCBidWZmZXJbRUVQUk9NX1NJWkUvMl07CisKKwkJCQlydF9lZV9yZWFkX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKwkJCQltZW1jcHlfZXhzKHBBZGFwdGVyLCBwUmFDZmctPmRhdGEsIChVQ0hBUiAqKWJ1ZmZlciwgRUVQUk9NX1NJWkUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMitFRVBST01fU0laRSk7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfRTJQUk9NX1JFQURfQUxMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9FMlBST01fUkVBRF9BTEwgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfRTJQUk9NX1dSSVRFX0FMTDoKKwkJCXsKKwkJCQlVU0hPUlQgYnVmZmVyW0VFUFJPTV9TSVpFLzJdOworCisJCQkJTmRpc1plcm9NZW1vcnkoKFVDSEFSICopYnVmZmVyLCBFRVBST01fU0laRSk7CisJCQkJbWVtY3B5X2V4cyhwQWRhcHRlciwgKFVDSEFSICopYnVmZmVyLCAoVUNIQVIgKikmcFJhQ2ZnLT5zdGF0dXMsIEVFUFJPTV9TSVpFKTsKKwkJCQlydF9lZV93cml0ZV9hbGwocEFkYXB0ZXIsKFVTSE9SVCAqKWJ1ZmZlcik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEVfQUxMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJBQ0ZHX0NNRF9FMlBST01fV1JJVEVfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfSU9fUkVBRDoKKwkJCXsKKwkJCQlVSU5UMzIJb2Zmc2V0OworCQkJCVVJTlQzMgl2YWx1ZTsKKworCQkJCW1lbWNweSgmb2Zmc2V0LCAmcFJhQ2ZnLT5zdGF0dXMsIDQpOworCQkJCW9mZnNldCA9IG50b2hsKG9mZnNldCk7CisKKwkJCQkvLyBXZSBkbyBub3QgbmVlZCB0aGUgYmFzZSBhZGRyZXNzLgorCQkJCS8vIFNvIGp1c3QgZXh0cmFjdCB0aGUgb2Zmc2V0IG91dC4KKwkJCQlvZmZzZXQgJj0gMHgwMDAwRkZGRjsKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgb2Zmc2V0LCAmdmFsdWUpOworCQkJCXZhbHVlID0gaHRvbmwodmFsdWUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoNik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQltZW1jcHkocFJhQ2ZnLT5kYXRhLCAmdmFsdWUsIDQpOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0lPX1JFQURcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0lPX1JFQUQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfSU9fV1JJVEU6CisJCQl7CisJCQkJVUlOVDMyCW9mZnNldCwgdmFsdWU7CisKKwkJCQltZW1jcHkoJm9mZnNldCwgcFJhQ2ZnLT5kYXRhLTIsIDQpOworCQkJCW1lbWNweSgmdmFsdWUsIHBSYUNmZy0+ZGF0YSsyLCA0KTsKKworCQkJCW9mZnNldCA9IG50b2hsKG9mZnNldCk7CisKKwkJCQkvLyBXZSBkbyBub3QgbmVlZCB0aGUgYmFzZSBhZGRyZXNzLgorCQkJCS8vIFNvIGp1c3QgZXh0cmFjdCBvdXQgdGhlIG9mZnNldC4KKwkJCQlvZmZzZXQgJj0gMHgwMDAwRkZGRjsKKwkJCQl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9JT19XUklURTogb2Zmc2V0ID0gJXgsIHZhbHVlID0gJXhcbiIsIG9mZnNldCwgdmFsdWUpKTsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIG9mZnNldCwgdmFsdWUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfSU9fV1JJVEVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0lPX1dSSVRFIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0lPX1JFQURfQlVMSzoKKwkJCXsKKwkJCQlVSU5UMzIJb2Zmc2V0OworCQkJCVVTSE9SVAlsZW47CisKKwkJCQltZW1jcHkoJm9mZnNldCwgJnBSYUNmZy0+c3RhdHVzLCA0KTsKKwkJCQlvZmZzZXQgPSBudG9obChvZmZzZXQpOworCisJCQkJLy8gV2UgZG8gbm90IG5lZWQgdGhlIGJhc2UgYWRkcmVzcy4KKwkJCQkvLyBTbyBqdXN0IGV4dHJhY3QgdGhlIG9mZnNldC4KKwkJCQlvZmZzZXQgJj0gMHgwMDAwRkZGRjsKKwkJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhKzIsIDIpOworCQkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCQlpZiAobGVuID4gMzcxKQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJsZW4gaXMgdG9vIGxhcmdlLCBtYWtlIGl0IHNtYWxsZXJcbiIpKTsKKwkJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJUlRNUF9JT19SRUFEX0JVTEsocEFkYXB0ZXIsIHBSYUNmZy0+ZGF0YSwgKFVDSEFSICopb2Zmc2V0LCBsZW4qNCk7Ly8gdW5pdCBpbiBmb3VyIGJ5dGVzCisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyK2xlbio0KTsvLyB1bml0IGluIGZvdXIgYnl0ZXMKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9JT19SRUFEX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0lPX1JFQURfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9CQlBfUkVBRDg6CisJCQl7CisJCQkJVVNIT1JUCW9mZnNldDsKKwkJCQlVQ0hBUgl2YWx1ZTsKKworCQkJCXZhbHVlID0gMDsKKwkJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisKKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBvZmZzZXQsICAmdmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIG9mZnNldCwgICZ2YWx1ZSk7CisJCQkJfQorCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDMpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJcFJhQ2ZnLT5kYXRhWzBdID0gdmFsdWU7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJCUCB2YWx1ZSA9ICV4XG4iLCB2YWx1ZSkpOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0JCUF9SRUFEOFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQkJQX1JFQUQ4IGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJBQ0ZHX0NNRF9CQlBfV1JJVEU4OgorCQkJeworCQkJCVVTSE9SVAlvZmZzZXQ7CisJCQkJVUNIQVIJdmFsdWU7CisKKwkJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQkJbWVtY3B5KCZ2YWx1ZSwgcFJhQ2ZnLT5kYXRhLCAxKTsKKworCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCXsKKwkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBvZmZzZXQsICB2YWx1ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIG9mZnNldCwgIHZhbHVlKTsKKwkJCQl9CisKKwkJCQlpZiAoKG9mZnNldCA9PSBCQlBfUjEpIHx8IChvZmZzZXQgPT0gQkJQX1IzKSkKKwkJCQl7CisJCQkJCVN5bmNUeFJ4Q29uZmlnKHBBZGFwdGVyLCBvZmZzZXQsIHZhbHVlKTsKKwkJCQl9CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9CQlBfV1JJVEU4XG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9CQlBfV1JJVEU4IGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0JCUF9SRUFEX0FMTDoKKwkJCXsKKwkJCQlVU0hPUlQgajsKKworCQkJCWZvciAoaiA9IDA7IGogPCAxMzc7IGorKykKKwkJCQl7CisJCQkJCXBSYUNmZy0+ZGF0YVtqXSA9IDA7CisKKwkJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJCXsKKwkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqXSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGosICAmcFJhQ2ZnLT5kYXRhW2pdKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrMTM3KTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0JCUF9SRUFEX0FMTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQkJQX1JFQURfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0UyUFJPTV9SRUFEX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGJ1ZmZlcltFRVBST01fU0laRS8yXTsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlydF9lZV9yZWFkX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKwkJCWlmIChvZmZzZXQgKyBsZW4gPD0gRUVQUk9NX1NJWkUpCisJCQkJbWVtY3B5X2V4cyhwQWRhcHRlciwgcFJhQ2ZnLT5kYXRhLCAoVUNIQVIgKilidWZmZXIrb2Zmc2V0LCBsZW4pOworCQkJZWxzZQorCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImV4Y2VlZCBFRVBST00gc2l6ZVxuIikpOworCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrbGVuKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0UyUFJPTV9SRUFEX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1JFQURfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGJ1ZmZlcltFRVBST01fU0laRS8yXTsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlydF9lZV9yZWFkX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKwkJCW1lbWNweV9leHMocEFkYXB0ZXIsIChVQ0hBUiAqKWJ1ZmZlciArIG9mZnNldCwgKFVDSEFSICopcFJhQ2ZnLT5kYXRhICsgMiwgbGVuKTsKKwkJCXJ0X2VlX3dyaXRlX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0lPX1dSSVRFX0JVTEs6CisJCXsKKwkJCVVJTlQzMiBvZmZzZXQsIGksIHZhbHVlOworCQkJVVNIT1JUIGxlbjsKKworCQkJbWVtY3B5KCZvZmZzZXQsICZwUmFDZmctPnN0YXR1cywgNCk7CisJCQlvZmZzZXQgPSBudG9obChvZmZzZXQpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSsyLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkKKwkJCXsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAoVUNIQVIgKikmdmFsdWUsIHBSYUNmZy0+ZGF0YSs0K2ksIDQpOworCQkJCXByaW50aygiV3JpdGUgJXggJXhcbiIsIG9mZnNldCArIGksIHZhbHVlKTsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIChvZmZzZXQgK2kpICYgMHhmZmZmLCB2YWx1ZSk7CisJCQl9CisKKwkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0lPX1dSSVRFX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJBQ0ZHX0NNRF9BVEVfSU9fV1JJVEVfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfQkJQX1JFQURfQlVMSzoKKwkJeworCQkJVVNIT1JUIG9mZnNldDsKKwkJCVVTSE9SVCBsZW47CisJCQlVU0hPUlQgajsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSA9IDA7CisKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5Nb2RlID09IEFURV9TVE9QKQorCQkJCXsKKwkJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSk7CisJCQkJfQorCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrbGVuKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9CQlBfUkVBRF9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0JCUF9SRUFEX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0JCUF9XUklURV9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBqOworCQkJVUNIQVIgKnZhbHVlOworCisJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXZhbHVlID0gcFJhQ2ZnLT5kYXRhICsgMiArIChqIC0gb2Zmc2V0KTsKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5Nb2RlID09IEFURV9TVE9QKQorCQkJCXsKKwkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICp2YWx1ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICp2YWx1ZSk7CisJCQkJfQorCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0JCUF9XUklURV9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0JCUF9XUklURV9CVUxLIGlzIGRvbmUgIVxuIikpOworCQkJfQorCQl9CisJCQlicmVhazsKKworI2lmZGVmIENPTkZJR19SQUxJTktfUlQzMDUyCisJCWNhc2UgUkFDRkdfQ01EX0FURV9SRl9SRUFEX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGo7CisKKwkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCW1lbWNweSgmbGVuLCBwUmFDZmctPmRhdGEsIDIpOworCQkJbGVuID0gbnRvaHMobGVuKTsKKworCQkJZm9yIChqID0gb2Zmc2V0OyBqIDwgKG9mZnNldCtsZW4pOyBqKyspCisJCQl7CisJCQkJcFJhQ2ZnLT5kYXRhW2ogLSBvZmZzZXRdID0gMDsKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgaiwgICZwUmFDZmctPmRhdGFbaiAtIG9mZnNldF0pOworCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrbGVuKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9SRl9SRUFEX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfUkZfUkVBRF9CVUxLIGlzIGRvbmUgIVxuIikpOworCQkJfQorCisJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9SRl9XUklURV9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBqOworCQkJVUNIQVIgKnZhbHVlOworCisJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXZhbHVlID0gcFJhQ2ZnLT5kYXRhICsgMiArIChqIC0gb2Zmc2V0KTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkYXB0ZXIsIGosICAqdmFsdWUpOworCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1JGX1dSSVRFX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfUkZfV1JJVEVfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKyNlbmRpZgorCisKKwkJY2FzZSBSQUNGR19DTURfR0VUX05PSVNFX0xFVkVMOgorCQkJeworCQkJCVVDSEFSCWNoYW5uZWw7CisJCQkJSU5UMzIgICBidWZmZXJbM11bMTBdOy8qIDMgOiBSeFBhdGggOyAxMCA6IG5vLiBvZiBwZXIgcnNzaSBzYW1wbGVzICovCisKKwkJCQljaGFubmVsID0gKG50b2hzKHBSYUNmZy0+c3RhdHVzKSAmIDB4MDBGRik7CisJCQkJQ2FsTm9pc2VMZXZlbChwQWRhcHRlciwgY2hhbm5lbCwgYnVmZmVyKTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAoVUNIQVIgKilwUmFDZmctPmRhdGEsIChVQ0hBUiAqKSYoYnVmZmVyWzBdWzBdKSwgKHNpemVvZihJTlQzMikqMyoxMCkpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMiArIChzaXplb2YoSU5UMzIpKjMqMTApKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9HRVRfTk9JU0VfTEVWRUxcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0dFVF9OT0lTRV9MRVZFTCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9HRVRfQ09VTlRFUjoKKwkJCXsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzBdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5VMk0sIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLk90aGVyRGF0YSwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs4XSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuQmVhY29uLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzEyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuT3RoZXJDb3VudCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsxNl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4QWMwLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzIwXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhBYzEsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMjRdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5UeEFjMiwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsyOF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4QWMzLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzMyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhIQ0NBLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzM2XSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhNZ210LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzQwXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuUlNTSTAsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDRdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5SU1NJMSwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0OF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlJTU0kyLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzUyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuU05SMCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs1Nl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlNOUjEsIDQpOworCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKzYwKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9HRVRfQ09VTlRFUlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfR0VUX0NPVU5URVIgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQ0xFQVJfQ09VTlRFUjoKKwkJCXsKKwkJCQlwQWRhcHRlci0+YXRlLlUyTSA9IDA7CisJCQkJcEFkYXB0ZXItPmF0ZS5PdGhlckRhdGEgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuQmVhY29uID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLk90aGVyQ291bnQgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzAgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzEgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzIgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzMgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhIQ0NBID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4TWdtdCA9IDA7CisJCQkJcEFkYXB0ZXItPmF0ZS5UeERvbmVDb3VudCA9IDA7CisKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQ0xFQVJfQ09VTlRFUlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQ0xFQVJfQ09VTlRFUiBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX1RYX1NUQVJUOgorCQkJeworCQkJCVVTSE9SVCAqcDsKKwkJCQlVU0hPUlQJZXJyID0gMTsKKwkJCQlVQ0hBUiAgIEJicDIyVmFsdWUgPSAwLCBCYnAyNFZhbHVlID0gMDsKKworCQkJCWlmICgocEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyAhPSAwKSAmJiAocEFkYXB0ZXItPmF0ZS5Nb2RlICYgQVRFX1RYRlJBTUUpKQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBdGUgVHggaXMgYWxyZWFkeSBydW5uaW5nLCB0byBydW4gbmV4dCBUeCwgeW91IG11c3Qgc3RvcCBpdCBmaXJzdFxuIikpOworCQkJCQllcnIgPSAyOworCQkJCQlnb3RvIFRYX1NUQVJUX0VSUk9SOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyAhPSAwKSAmJiAhKHBBZGFwdGVyLT5hdGUuTW9kZSAmIEFURV9UWEZSQU1FKSkKKwkJCQl7CisJCQkJCWludCBpID0gMDsKKworCQkJCQl3aGlsZSAoKGkrKyA8IDEwKSAmJiAocEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyAhPSAwKSkKKwkJCQkJeworCQkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQkJfQorCisJCQkJCS8vIGZvcmNlIGl0IHRvIHN0b3AKKwkJCQkJcEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyA9IDA7CisJCQkJCXBBZGFwdGVyLT5hdGUuVHhEb25lQ291bnQgPSAwOworCQkJCQkvL3BBZGFwdGVyLT5hdGUuUmVwZWF0ID0gMDsKKwkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisJCQkJfQorCisJCQkJLy8gSWYgcFJhQ2ZnLT5sZW5ndGggPT0gMCwgdGhpcyAiUkFDRkdfQ01EX1RYX1NUQVJUIiBpcyBmb3IgQ2FycmllciB0ZXN0IG9yIENhcnJpZXIgU3VwcHJlc3Npb24uCisJCQkJaWYgKG50b2hzKHBSYUNmZy0+bGVuZ3RoKSAhPSAwKQorCQkJCXsKKwkJCQkJLy8gR2V0IGZyYW1lIGluZm8KKyNpZmRlZiBSVDI4NzAKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZGFwdGVyLT5hdGUuVHhJbmZvLCBwUmFDZmctPmRhdGEgLSAyLCA0KTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpICZwQWRhcHRlci0+YXRlLlR4SW5mbywgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5UeFdJLCBwUmFDZmctPmRhdGEgKyAyLCAxNik7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUikmcEFkYXB0ZXItPmF0ZS5UeFdJLCBUWVBFX1RYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5UeENvdW50LCBwUmFDZmctPmRhdGEgKyAxOCwgNCk7CisJCQkJCXBBZGFwdGVyLT5hdGUuVHhDb3VudCA9IG50b2hsKHBBZGFwdGVyLT5hdGUuVHhDb3VudCk7CisKKwkJCQkJcCA9IChVU0hPUlQgKikoJnBSYUNmZy0+ZGF0YVsyMl0pOworCQkJCQkvL3AgPSBwUmFDZmctPmRhdGEgKyAyMjsKKwkJCQkJLy8gYWx3YXlzIHVzZSBRSURfQUNfQkUKKwkJCQkJcEFkYXB0ZXItPmF0ZS5RSUQgPSAwOworCQkJCQlwID0gKFVTSE9SVCAqKSgmcFJhQ2ZnLT5kYXRhWzI0XSk7CisJCQkJCS8vcCA9IHBSYUNmZy0+ZGF0YSArIDI0OworCQkJCQlwQWRhcHRlci0+YXRlLkhMZW4gPSBudG9ocygqcCk7CisKKwkJCQkJaWYgKHBBZGFwdGVyLT5hdGUuSExlbiA+IDMyKQorCQkJCQl7CisJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoInBBZGFwdGVyLT5hdGUuSExlbiA+IDMyXG4iKSk7CisJCQkJCQllcnIgPSAzOworCQkJCQkJZ290byBUWF9TVEFSVF9FUlJPUjsKKwkJCQkJfQorCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+YXRlLkhlYWRlciwgcFJhQ2ZnLT5kYXRhICsgMjYsIHBBZGFwdGVyLT5hdGUuSExlbik7CisKKworCQkJCQlwQWRhcHRlci0+YXRlLlBMZW4gPSBudG9ocyhwUmFDZmctPmxlbmd0aCkgLSAocEFkYXB0ZXItPmF0ZS5ITGVuICsgMjgpOworCisJCQkJCWlmIChwQWRhcHRlci0+YXRlLlBMZW4gPiAzMikKKwkJCQkJeworCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQWRhcHRlci0+YXRlLlBMZW4gPiAzMlxuIikpOworCQkJCQkJZXJyID0gNDsKKwkJCQkJCWdvdG8gVFhfU1RBUlRfRVJST1I7CisJCQkJCX0KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5QYXR0ZXJuLCBwUmFDZmctPmRhdGEgKyAyNiArIHBBZGFwdGVyLT5hdGUuSExlbiwgcEFkYXB0ZXItPmF0ZS5QTGVuKTsKKwkJCQkJcEFkYXB0ZXItPmF0ZS5ETGVuID0gcEFkYXB0ZXItPmF0ZS5UeFdJLk1QRFV0b3RhbEJ5dGVDb3VudCAtIHBBZGFwdGVyLT5hdGUuSExlbjsKKwkJCQl9CisKKwkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1IyMiwgJkJicDIyVmFsdWUpOworCisJCQkJc3dpdGNoIChCYnAyMlZhbHVlKQorCQkJCXsKKwkJCQkJY2FzZSBCQlAyMl9UWEZSQU1FOgorCQkJCQkJeworCQkJCQkJCWlmIChwQWRhcHRlci0+YXRlLlR4Q291bnQgPT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJfQorCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1RBUlQgVFhGUkFNRVxuIikpOworCQkJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IFRSVUU7CisJCQkJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhGUkFNRSIpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBCQlAyMl9UWENPTlRfT1JfQ0FSUlNVUFA6CisJCQkJCQl7CisJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQlAyMl9UWENPTlRfT1JfQ0FSUlNVUFBcbiIpKTsKKwkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgMjQsICZCYnAyNFZhbHVlKTsKKworCQkJCQkJCXN3aXRjaCAoQmJwMjRWYWx1ZSkKKwkJCQkJCQl7CisJCQkJCQkJCWNhc2UgQkJQMjRfVFhDT05UOgorCQkJCQkJCQkJeworCQkJCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1RBUlQgVFhDT05UXG4iKSk7CisJCQkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gVFJVRTsKKwkJCQkJCQkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJUWENPTlQiKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJCWNhc2UgQkJQMjRfQ0FSUlNVUFA6CisJCQkJCQkJCQl7CisJCQkJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFSVCBUWENBUlJTVVBQXG4iKSk7CisJCQkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gVFJVRTsKKwkJCQkJCQkJCQlwQWRhcHRlci0+YXRlLk1vZGUgfD0gQVRFX1RYQ0FSUlNVUFA7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlicmVhazsKKworCQkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQkJeworCQkJCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiVW5rbm93biBTdGFydCBUWCBzdWJ0eXBlICEiKSk7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIEJCUDIyX1RYQ0FSUjoKKwkJCQkJCXsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQVJUIFRYQ0FSUlxuIikpOworCQkJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IFRSVUU7CisJCQkJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhDQVJSIik7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJeworCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiVW5rbm93biBTdGFydCBUWCBzdWJ0eXBlICEiKSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCQkJeworCQkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJICAgICAgICAgICAgCXsKKwkgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIHdhcyBmYWlsZWQgaW4gY2FzZSBSQUNGR19DTURfVFhfU1RBUlRcbiIpKTsKKwkgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisJICAgICAgICAgICAgCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfVFhfU1RBUlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCitUWF9TVEFSVF9FUlJPUjoKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKGVycik7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1RYX1NUQVJUXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImZlZWRiYWNrIG9mIFRYX1NUQVJUX0VSUk9SIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0dFVF9UWF9TVEFUVVM6CisJCQl7CisJCQkJVUlOVDMyIGNvdW50OworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoNik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQljb3VudCA9IGh0b25sKHBBZGFwdGVyLT5hdGUuVHhEb25lQ291bnQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KHBSYUNmZy0+ZGF0YSwgJmNvdW50LCA0KTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfR0VUX1RYX1NUQVRVU1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfR0VUX1RYX1NUQVRVUyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9UWF9TVE9QOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX1RYX1NUT1BcbiIpKTsKKworCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlRYU1RPUCIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfVFhfU1RPUFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfVFhfU1RPUCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9SWF9TVEFSVDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9SWF9TVEFSVFxuIikpOworCisJCQkJcEFkYXB0ZXItPmF0ZS5iUUFSeFN0YXJ0ID0gVFJVRTsKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJSWEZSQU1FIik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9SWF9TVEFSVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfUlhfU1RBUlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfUlhfU1RPUDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9SWF9TVE9QXG4iKSk7CisKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJSWFNUT1AiKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1JYX1NUT1BcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1JYX1NUT1AgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJLyogVGhlIGZvbGxvd2luZyBjYXNlcyBhcmUgZm9yIG5ldyBBVEUgR1VJKG5vdCBRQSkuICovCisJCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUjoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUlxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhDQVJSIik7CisKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NBUlJJRVJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DQVJSSUVSIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DT05UOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DT05UXG4iKSk7CisKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJUWENPTlQiKTsKKworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ09OVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NPTlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0ZSQU1FOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRVxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhGUkFNRSIpOworCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRVxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NUQVJUX1RYX0ZSQU1FIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQlc6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0JXXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCisJCQkJU2V0X0FURV9UWF9CV19Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9CV1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9CVyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMDoKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIwXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfUE9XRVIwX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjAgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjE6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMVxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjFcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIxIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfRlJFUV9PRkZTRVQ6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0ZSRVFfT0ZGU0VUXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9GUkVRX09GRlNFVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9GUkVRX09GRlNFVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfR0VUX1NUQVRJU1RJQ1M6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTXG4iKSk7CisKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzBdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5UeERvbmVDb3VudCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0XSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbOF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsxMl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJUU1N1Y2Nlc3NDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMTZdLCAoVUNIQVIgKikmcEFkYXB0ZXItPldsYW5Db3VudGVycy5SVFNGYWlsdXJlQ291bnQudS5Mb3dQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzIwXSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUmVjZWl2ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzI0XSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMjhdLCAoVUNIQVIgKikmcEFkYXB0ZXItPkNvdW50ZXJzODAyMy5SeE5vQnVmZmVyLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzMyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRnJhbWVEdXBsaWNhdGVDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMzZdLCAoVUNIQVIgKikmcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250LCA0KTsKKworCQkJCWlmIChwQWRhcHRlci0+YXRlLlJ4QW50ZW5uYVNlbCA9PSAwKQorCQkJCXsKKwkJCQkJSU5UMzIgUlNTSTAgPSAwOworCQkJCQlJTlQzMiBSU1NJMSA9IDA7CisJCQkJCUlOVDMyIFJTU0kyID0gMDsKKworCQkJCQlSU1NJMCA9IChJTlQzMikocEFkYXB0ZXItPmF0ZS5MYXN0UnNzaTAgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGEpOworCQkJCQlSU1NJMSA9IChJTlQzMikocEFkYXB0ZXItPmF0ZS5MYXN0UnNzaTEgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGEpOworCQkJCQlSU1NJMiA9IChJTlQzMikocEFkYXB0ZXItPmF0ZS5MYXN0UnNzaTIgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGEpOworCQkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzQwXSwgKFVDSEFSICopJlJTU0kwLCA0KTsKKwkJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0NF0sIChVQ0hBUiAqKSZSU1NJMSwgNCk7CisJCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDhdLCAoVUNIQVIgKikmUlNTSTIsIDQpOworCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrNTIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlJTlQzMiBSU1NJMCA9IDA7CisKKwkJCQkJUlNTSTAgPSAoSU5UMzIpKHBBZGFwdGVyLT5hdGUuTGFzdFJzc2kwIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhKTsKKwkJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0MF0sIChVQ0hBUiAqKSZSU1NJMCwgNCk7CisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMis0NCk7CisJCQkJfQorCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9HRVRfU1RBVElTVElDU1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9SRVNFVF9DT1VOVEVSOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMTsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1JFU0VUX0NPVU5URVJcbiIpKTsKKworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9SZXNldFN0YXRDb3VudGVyX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQlwQWRhcHRlci0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfUkVTRVRfQ09VTlRFUlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1JFU0VUX0NPVU5URVIgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkE6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkFcbiIpKTsKKworCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CisJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7CisJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkFcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRUxfVFhfQU5URU5OQSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkE6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkFcbiIpKTsKKworCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CisJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7CisJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJU2V0X0FURV9SWF9BbnRlbm5hX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkFcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRUxfUlhfQU5URU5OQSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1BSRUFNQkxFOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9QUkVBTUJMRVxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX01PREVfUHJvYyhwQWRhcHRlciwgc3RyKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEUgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfQ0hBTk5FTF9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX0NIQU5ORUwgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMToKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIxXG4iKSk7CisKKwkJCQkvLyBBZGRyIGlzIGFuIGFycmF5IG9mIFVDSEFSLAorCQkJCS8vIHNvIG5vIG5lZWQgdG8gcGVyZm9ybSBlbmRpYW4gc3dhcC4KKwkJCQltZW1jcHkocEFkYXB0ZXItPmF0ZS5BZGRyMSwgKFBVQ0hBUikocFJhQ2ZnLT5kYXRhIC0gMiksIE1BQ19BRERSX0xFTik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIxXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIxIGlzIGRvbmUgIVxuIChBRERSMSA9ICUyWDolMlg6JTJYOiUyWDolMlg6JTJYKVxuIiwgcEFkYXB0ZXItPmF0ZS5BZGRyMVswXSwKKwkJCQkJCXBBZGFwdGVyLT5hdGUuQWRkcjFbMV0sIHBBZGFwdGVyLT5hdGUuQWRkcjFbMl0sIHBBZGFwdGVyLT5hdGUuQWRkcjFbM10sIHBBZGFwdGVyLT5hdGUuQWRkcjFbNF0sIHBBZGFwdGVyLT5hdGUuQWRkcjFbNV0pKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIyOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfQUREUjJcbiIpKTsKKworCQkJCS8vIEFkZHIgaXMgYW4gYXJyYXkgb2YgVUNIQVIsCisJCQkJLy8gc28gbm8gbmVlZCB0byBwZXJmb3JtIGVuZGlhbiBzd2FwLgorCQkJCW1lbWNweShwQWRhcHRlci0+YXRlLkFkZHIyLCAoUFVDSEFSKShwUmFDZmctPmRhdGEgLSAyKSwgTUFDX0FERFJfTEVOKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQUREUjJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfQUREUjIgaXMgZG9uZSAhXG4gKEFERFIyID0gJTJYOiUyWDolMlg6JTJYOiUyWDolMlgpXG4iLCBwQWRhcHRlci0+YXRlLkFkZHIyWzBdLAorCQkJCQkJcEFkYXB0ZXItPmF0ZS5BZGRyMlsxXSwgcEFkYXB0ZXItPmF0ZS5BZGRyMlsyXSwgcEFkYXB0ZXItPmF0ZS5BZGRyMlszXSwgcEFkYXB0ZXItPmF0ZS5BZGRyMls0XSwgcEFkYXB0ZXItPmF0ZS5BZGRyMls1XSkpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQUREUjM6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9BRERSM1xuIikpOworCisJCQkJLy8gQWRkciBpcyBhbiBhcnJheSBvZiBVQ0hBUiwKKwkJCQkvLyBzbyBubyBuZWVkIHRvIHBlcmZvcm0gZW5kaWFuIHN3YXAuCisJCQkJbWVtY3B5KHBBZGFwdGVyLT5hdGUuQWRkcjMsIChQVUNIQVIpKHBSYUNmZy0+ZGF0YSAtIDIpLCBNQUNfQUREUl9MRU4pOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9BRERSM1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9BRERSMyBpcyBkb25lICFcbiAoQUREUjMgPSAlMlg6JTJYOiUyWDolMlg6JTJYOiUyWClcbiIsIHBBZGFwdGVyLT5hdGUuQWRkcjNbMF0sCisJCQkJCQlwQWRhcHRlci0+YXRlLkFkZHIzWzFdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzJdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzNdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzRdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzVdKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9SQVRFOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9SQVRFXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfTUNTX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1JBVEVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfUkFURSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0xFTjoKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfVFhfRlJBTUVfTEVOXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfTEVOR1RIX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0xFTlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9MRU4gaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVDoKKwkJCXsKKwkJCQlVU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0NPVU5UXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXsKKwkJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJCVNldF9BVEVfVFhfQ09VTlRfUHJvYyhwQWRhcHRlciwgc3RyKTsKKwkJCQl9CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0NPVU5UXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0NPVU5UIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9SWF9GUkFNRToKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9SWF9TVEFSVFxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiUlhGUkFNRSIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfUlhfU1RBUlRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1JYX1NUQVJUIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorICAgIEFTU0VSVChwUmFDZmcgIT0gTlVMTCk7CisgICAgaWYgKHBSYUNmZyAhPSBOVUxMKQorICAgIHsKKyAgICBrZnJlZShwUmFDZmcpOworICAgIH0KKwlyZXR1cm47Cit9CisKK1ZPSUQgQnViYmxlU29ydChJTlQzMiBuLCBJTlQzMiBhW10pCit7CisJSU5UMzIgaywgaiwgdGVtcDsKKworCWZvciAoayA9IG4tMTsgIGs+MDsgIGstLSkKKwl7CisJCWZvciAoaiA9IDA7IGo8azsgaisrKQorCQl7CisJCQlpZihhW2pdID4gYVtqKzFdKQorCQkJeworCQkJCXRlbXAgPSBhW2pdOworCQkJCWFbal09YVtqKzFdOworCQkJCWFbaisxXT10ZW1wOworCQkJfQorCQl9CisJfQorfQorCitWT0lEIENhbE5vaXNlTGV2ZWwoUFJUTVBfQURBUFRFUiBwQWQsIFVDSEFSIGNoYW5uZWwsIElOVDMyIFJTU0lbM11bMTBdKQoreworCUlOVDMyCQlSU1NJMCwgUlNTSTEsIFJTU0kyOworIAlDSEFSCQlSc3NpME9mZnNldCwgUnNzaTFPZmZzZXQsIFJzc2kyT2Zmc2V0OworCVVDSEFSCQlCYnBSNTBSc3NpMCA9IDAsIEJicFI1MVJzc2kxID0gMCwgQmJwUjUyUnNzaTIgPSAwOworCVVDSEFSCQlPcmdfQkJQNjZ2YWx1ZSA9IDAsIE9yZ19CQlA2OXZhbHVlID0gMCwgT3JnX0JCUDcwdmFsdWUgPSAwLCBkYXRhID0gMDsKKwlVU0hPUlQJCUxOQV9HYWluID0gMDsKKwlJTlQzMiAgICAgICBqID0gMDsKKwlVQ0hBUgkJT3JnX0NoYW5uZWwgPSBwQWQtPmF0ZS5DaGFubmVsOworCVVTSE9SVAkgICAgR2FpblZhbHVlID0gMCwgT2Zmc2V0VmFsdWUgPSAwOworCisJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAmT3JnX0JCUDY2dmFsdWUpOworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgJk9yZ19CQlA2OXZhbHVlKTsKKwlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsICZPcmdfQkJQNzB2YWx1ZSk7CisKKwkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkvLyBSZWFkIHRoZSB2YWx1ZSBvZiBMTkEgZ2FpbiBhbmQgUnNzaSBvZmZzZXQKKwkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MTkFfT0ZGU0VULCBHYWluVmFsdWUpOworCisJLy8gZm9yIE5vaXNlIExldmVsCisJaWYgKGNoYW5uZWwgPD0gMTQpCisJeworCQlMTkFfR2FpbiA9IEdhaW5WYWx1ZSAmIDB4MDBGRjsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9SU1NJX0JHX09GRlNFVCwgT2Zmc2V0VmFsdWUpOworCQlSc3NpME9mZnNldCA9IE9mZnNldFZhbHVlICYgMHgwMEZGOworCQlSc3NpMU9mZnNldCA9IChPZmZzZXRWYWx1ZSAmIDB4RkYwMCkgPj4gODsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAoRUVQUk9NX1JTU0lfQkdfT0ZGU0VUICsgMikvKiAweDQ4ICovLCBPZmZzZXRWYWx1ZSk7CisJCVJzc2kyT2Zmc2V0ID0gT2Zmc2V0VmFsdWUgJiAweDAwRkY7CisJfQorCWVsc2UKKwl7CisJCUxOQV9HYWluID0gKEdhaW5WYWx1ZSAmIDB4RkYwMCkgPj4gODsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9SU1NJX0FfT0ZGU0VULCBPZmZzZXRWYWx1ZSk7CisJCVJzc2kwT2Zmc2V0ID0gT2Zmc2V0VmFsdWUgJiAweDAwRkY7CisJCVJzc2kxT2Zmc2V0ID0gKE9mZnNldFZhbHVlICYgMHhGRjAwKSA+PiA4OworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIChFRVBST01fUlNTSV9BX09GRlNFVCArIDIpLyogMHg0QyAqLywgT2Zmc2V0VmFsdWUpOworCQlSc3NpMk9mZnNldCA9IE9mZnNldFZhbHVlICYgMHgwMEZGOworCX0KKwkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwl7CisJCXBBZC0+YXRlLkNoYW5uZWwgPSBjaGFubmVsOworCQlBVEVBc2ljU3dpdGNoQ2hhbm5lbChwQWQpOworCQltZGVsYXkoNSk7CisKKwkJZGF0YSA9IDB4MTA7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIGRhdGEpOworCQlkYXRhID0gMHg0MDsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgZGF0YSk7CisJCWRhdGEgPSAweDQwOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCBkYXRhKTsKKwkJbWRlbGF5KDUpOworCisJCS8vIFN0YXJ0IFJ4CisJCXBBZC0+YXRlLmJRQVJ4U3RhcnQgPSBUUlVFOworCQlTZXRfQVRFX1Byb2MocEFkLCAiUlhGUkFNRSIpOworCisJCW1kZWxheSg1KTsKKworCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKKwkJeworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjUwLCAmQmJwUjUwUnNzaTApOworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjUxLCAmQmJwUjUxUnNzaTEpOworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjUyLCAmQmJwUjUyUnNzaTIpOworCisJCQltZGVsYXkoMTApOworCisJCQkvLyBDYWxjdWxhdGUgUlNTSSAwCisJCQlpZiAoQmJwUjUwUnNzaTAgPT0gMCkKKwkJCXsKKwkJCQlSU1NJMCA9IC0xMDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlNTSTAgPSAoSU5UMzIpKC0xMiAtIEJicFI1MFJzc2kwIC0gTE5BX0dhaW4gLSBSc3NpME9mZnNldCk7CisJCQl9CisJCQlSU1NJWzBdW2pdID0gUlNTSTA7CisKKwkJCWlmICggcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAyICkgLy8gMlIKKwkJCXsKKwkJCQkvLyBDYWxjdWxhdGUgUlNTSSAxCisJCQkJaWYgKEJicFI1MVJzc2kxID09IDApCisJCQkJeworCQkJCQlSU1NJMSA9IC0xMDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJTU0kxID0gKElOVDMyKSgtMTIgLSBCYnBSNTFSc3NpMSAtIExOQV9HYWluIC0gUnNzaTFPZmZzZXQpOworCQkJCX0KKwkJCQlSU1NJWzFdW2pdID0gUlNTSTE7CisJCQl9CisKKwkJCWlmICggcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAzICkgLy8gM1IKKwkJCXsKKwkJCQkvLyBDYWxjdWxhdGUgUlNTSSAyCisJCQkJaWYgKEJicFI1MlJzc2kyID09IDApCisJCQkJCVJTU0kyID0gLTEwMDsKKwkJCQllbHNlCisJCQkJCVJTU0kyID0gKElOVDMyKSgtMTIgLSBCYnBSNTJSc3NpMiAtIExOQV9HYWluIC0gUnNzaTJPZmZzZXQpOworCisJCQkJUlNTSVsyXVtqXSA9IFJTU0kyOworCQkJfQorCQl9CisKKwkJLy8gU3RvcCBSeAorCQlTZXRfQVRFX1Byb2MocEFkLCAiUlhTVE9QIik7CisKKwkJbWRlbGF5KDUpOworCisJCUJ1YmJsZVNvcnQoMTAsIFJTU0lbMF0pOwkvLyAxUgorCisJCWlmICggcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAyICkgLy8gMlIKKwkJeworCQkJQnViYmxlU29ydCgxMCwgUlNTSVsxXSk7CisJCX0KKworCQlpZiAoIHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMyApIC8vIDNSCisJCXsKKwkJCUJ1YmJsZVNvcnQoMTAsIFJTU0lbMl0pOworCQl9CisKKwl9CisKKwlwQWQtPmF0ZS5DaGFubmVsID0gT3JnX0NoYW5uZWw7CisJQVRFQXNpY1N3aXRjaENoYW5uZWwocEFkKTsKKworCS8vIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWUKKyAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBPcmdfQkJQNjZ2YWx1ZSk7CisgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgT3JnX0JCUDY5dmFsdWUpOworICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIE9yZ19CQlA3MHZhbHVlKTsKKworCXJldHVybjsKK30KKworQk9PTEVBTiBTeW5jVHhSeENvbmZpZyhQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUIG9mZnNldCwgVUNIQVIgdmFsdWUpCit7CisJVUNIQVIgdG1wID0gMCwgYmJwX2RhdGEgPSAwOworCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBvZmZzZXQsICZiYnBfZGF0YSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIG9mZnNldCwgJmJicF9kYXRhKTsKKwl9CisKKwkvKiBjb25maXJtIGFnYWluICovCisJQVNTRVJUKGJicF9kYXRhID09IHZhbHVlKTsKKworCXN3aXRjaChvZmZzZXQpCisJeworCQljYXNlIEJCUF9SMToKKwkJCS8qIE5lZWQgdG8gc3luYy4gdHggY29uZmlndXJhdGlvbiB3aXRoIGxlZ2FjeSBBVEUuICovCisJCQl0bXAgPSAoYmJwX2RhdGEgJiAoKDEgPDwgNCkgfCAoMSA8PCAzKSkvKiAweDE4ICovKSA+PiAzOworCQkgICAgc3dpdGNoKHRtcCkKKwkJICAgIHsKKwkJCQkvKiBUaGUgQkJQIFIxIGJpdFs0OjNdID0gMiA6OiBCb3RoIERBQ3Mgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMjoKKwkJCQkJLyogQWxsICovCisJCQkJCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IDA7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjEgYml0WzQ6M10gPSAwIDo6IERBQyAwIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDA6CisJCQkJCS8qIEFudGVubmEgb25lICovCisJCQkJCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IDE7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjEgYml0WzQ6M10gPSAxIDo6IERBQyAxIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDE6CisJCQkJCS8qIEFudGVubmEgdHdvICovCisJCQkJCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IDI7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgIGRlZmF1bHQ6CisJCSAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzIC0tIFN0aC4gd3JvbmchICA6IHJldHVybiBGQUxTRTsgXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCQkgICAgfQorCQkJYnJlYWs7LyogY2FzZSBCQlBfUjEgKi8KKworCQljYXNlIEJCUF9SMzoKKwkJCS8qIE5lZWQgdG8gc3luYy4gcnggY29uZmlndXJhdGlvbiB3aXRoIGxlZ2FjeSBBVEUuICovCisJCQl0bXAgPSAoYmJwX2RhdGEgJiAoKDEgPDwgMSkgfCAoMSA8PCAwKSkvKiAweDAzICovKTsKKwkJICAgIHN3aXRjaCh0bXApCisJCSAgICB7CisJCQkJLyogVGhlIEJCUCBSMyBiaXRbMTowXSA9IDMgOjogQWxsIEFEQ3Mgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMzoKKwkJCQkJLyogQWxsICovCisJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDA7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjMgYml0WzE6MF0gPSAwIDo6IEFEQyAwIHdpbGwgYmUgdXNlZCBieSBRQSwgKi8KKwkJCQkvKiB1bmxlc3MgdGhlIEJCUCBSMyBiaXRbNDozXSA9IDIgKi8KKwkJICAgICAgICBjYXNlIDA6CisJCQkJCS8qIEFudGVubmEgb25lICovCisJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDE7CisJCQkJCXRtcCA9ICgoYmJwX2RhdGEgJiAoKDEgPDwgNCkgfCAoMSA8PCAzKSkvKiAweDAzICovKSA+PiAzKTsKKwkJCQkJaWYgKHRtcCA9PSAyKS8vIDNSCisJCQkJCXsKKwkJCQkJCS8qIERlZmF1bHQgOiBBbGwgQURDcyB3aWxsIGJlIHVzZWQgYnkgUUEgKi8KKwkJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDA7CisJCQkJCX0KKwkJICAgICAgICAgICAgYnJlYWs7CisJCQkJLyogVGhlIEJCUCBSMyBiaXRbMTowXSA9IDEgOjogQURDIDEgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMToKKwkJCQkJLyogQW50ZW5uYSB0d28gKi8KKwkJCQkJcEFkLT5hdGUuUnhBbnRlbm5hU2VsID0gMjsKKwkJICAgICAgICAgICAgYnJlYWs7CisJCQkJLyogVGhlIEJCUCBSMyBiaXRbMTowXSA9IDIgOjogQURDIDIgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMjoKKwkJCQkJLyogQW50ZW5uYSB0aHJlZSAqLworCQkJCQlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSAzOworCQkgICAgICAgICAgICBicmVhazsKKwkJICAgICAgICBkZWZhdWx0OgorCQkgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyAtLSBJbXBvc3NpYmxlISAgOiByZXR1cm4gRkFMU0U7IFxuIiwgX19GVU5DVElPTl9fKSk7CisJCSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKwkJICAgIH0KKwkJCWJyZWFrOy8qIGNhc2UgQkJQX1IzICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIC0tIFN0aC4gd3JvbmchICA6IHJldHVybiBGQUxTRTsgXG4iLCBfX0ZVTkNUSU9OX18pKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIFZPSUQgbWVtY3B5X2V4bChQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUxPTkcgbGVuKQoreworCVVMT05HIGksIFZhbHVlID0gMDsKKwlVTE9ORyAqcERzdCwgKnBTcmM7CisJVUNIQVIgKnA4OworCisJcDggPSBzcmM7CisJcERzdCA9IChVTE9ORyAqKSBkc3Q7CisJcFNyYyA9IChVTE9ORyAqKSBzcmM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IChsZW4vNCk7IGkrKykKKwl7CisJCS8qIEZvciBhbGlnbm1lbnQgaXNzdWUsIHdlIG5lZWQgYSB2YXJpYWJsZSAiVmFsdWUiLiAqLworCQltZW1tb3ZlKCZWYWx1ZSwgcFNyYywgNCk7CisJCVZhbHVlID0gaHRvbmwoVmFsdWUpOworCQltZW1tb3ZlKHBEc3QsICZWYWx1ZSwgNCk7CisJCXBEc3QrKzsKKwkJcFNyYysrOworCX0KKwlpZiAoKGxlbiAlIDQpICE9IDApCisJeworCQkvKiB3aXNoIHRoYXQgaXQgd2lsbCBuZXZlciByZWFjaCBoZXJlICovCisJCW1lbW1vdmUoJlZhbHVlLCBwU3JjLCAobGVuICUgNCkpOworCQlWYWx1ZSA9IGh0b25sKFZhbHVlKTsKKwkJbWVtbW92ZShwRHN0LCAmVmFsdWUsIChsZW4gJSA0KSk7CisJfQorfQorCitzdGF0aWMgVk9JRCBtZW1jcHlfZXhzKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVTE9ORyBsZW4pCit7CisJVUxPTkcgaTsKKwlVQ0hBUiAqcERzdCwgKnBTcmM7CisKKwlwRHN0ID0gZHN0OworCXBTcmMgPSBzcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxlbi8yKTsgaSsrKQorCXsKKwkJbWVtbW92ZShwRHN0LCBwU3JjLCAyKTsKKwkJKigoVVNIT1JUICopcERzdCkgPSBodG9ucygqKChVU0hPUlQgKilwRHN0KSk7CisJCXBEc3QrPTI7CisJCXBTcmMrPTI7CisJfQorCisJaWYgKChsZW4gJSAyKSAhPSAwKQorCXsKKwkJbWVtbW92ZShwRHN0LCBwU3JjLCAxKTsKKwl9Cit9CisKK3N0YXRpYyBWT0lEIFJUTVBfSU9fUkVBRF9CVUxLKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVSU5UMzIgbGVuKQoreworCVVJTlQzMiBpLCBWYWx1ZTsKKwlVSU5UMzIgKnBEc3QsICpwU3JjOworCisJcERzdCA9IChVSU5UMzIgKikgZHN0OworCXBTcmMgPSAoVUlOVDMyICopIHNyYzsKKworCWZvciAoaSA9IDAgOyBpIDwgKGxlbi80KTsgaSsrKQorCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCAoVUxPTkcpcFNyYywgJlZhbHVlKTsKKwkJVmFsdWUgPSBodG9ubChWYWx1ZSk7CisJCW1lbW1vdmUocERzdCwgJlZhbHVlLCA0KTsKKwkJcERzdCsrOworCQlwU3JjKys7CisJfQorCXJldHVybjsKK30KKworSU5UIFNldF9UeFN0b3BfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZXRfVHhTdG9wX1Byb2NcbiIpKTsKKworCWlmIChTZXRfQVRFX1Byb2MocEFkLCAiVFhTVE9QIikpCisJeworCXJldHVybiBUUlVFOworfQorCWVsc2UKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKK0lOVCBTZXRfUnhTdG9wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2V0X1J4U3RvcF9Qcm9jXG4iKSk7CisKKwlpZiAoU2V0X0FURV9Qcm9jKHBBZCwgIlJYU1RPUCIpKQorCXsKKwlyZXR1cm4gVFJVRTsKK30KKwllbHNlCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorI2VuZGlmCS8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYJLy8gUkFMSU5LX0FURSAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2F0ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjllYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuaApAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX0FURV9IX18KKyNkZWZpbmUgX19BVEVfSF9fCisKKyNpZm5kZWYgVUNPUworI2RlZmluZSBhdGVfcHJpbnQgcHJpbnRrCisjZGVmaW5lIEFURURCR1BSSU5UIERCR1BSSU5UCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgRUVQUk9NX1NJWkUJCQkJCQkJCTB4NDAwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIEVFUFJPTV9CSU5fRklMRV9OQU1FICAiL2V0Yy9XaXJlbGVzcy9SVDI4NzBTVEEvZTJwLmJpbiIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKyNlbHNlIC8vICFVQ09TIC8vCisjZGVmaW5lIGZBVEVfTE9BRF9FRVBST00JCQkJCQkweDBDNDMKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitleHRlcm4gSU5UIENvbnNvbGVSZXNwb25zZShJTiBQVUNIQVIgYnVmZik7CitleHRlcm4gaW50ICgqcmVtb3RlX2Rpc3BsYXkpKGNoYXIgKik7CitleHRlcm4gdm9pZCBwdXRzIChjb25zdCBjaGFyICpzKTsKKworLyogc3BlY2lmaWNseSBkZWZpbmVkIHRvIHJlZGlyZWN0IGFuZCBzaG93IGF0ZS1yZWxhdGVkIG1lc3NhZ2VzIHRvIGhvc3QuICovCisvKiBUcnkgdG8gZGVmaW5lIGF0ZV9wcmludCBhcyBhIG1hY3JvLiAqLworI2RlZmluZSBhdGVfcHJpbnQoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgXAorZG97ICAgaW50ICgqb3JnX3JlbW90ZV9kaXNwbGF5KShjaGFyICopID0gTlVMTDsgICBcCisJb3JnX3JlbW90ZV9kaXNwbGF5ID0gcmVtb3RlX2Rpc3BsYXk7XAorCS8qIFNhdmUgb3JpZ2luYWwgInJlbW90ZV9kaXNwbGF5IiAqL1wKKwlyZW1vdGVfZGlzcGxheSA9IChpbnQgKCopKGNoYXIgKikpQ29uc29sZVJlc3BvbnNlOyAgICAgICAgICAgXAorCXByaW50ayhmbXQsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIFJlc3RvcmUgdGhlIHJlbW90ZV9kaXNwbGF5IGZ1bmN0aW9uIHBvaW50ZXIgKi8gICAgICAgIFwKKwlyZW1vdGVfZGlzcGxheSA9IG9yZ19yZW1vdGVfZGlzcGxheTsgfXdoaWxlKDApCisKKyNkZWZpbmUgQVRFREJHUFJJTlQoTGV2ZWwsIEZtdCkgICAgCVwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKExldmVsKSA8PSBSVERlYnVnTGV2ZWwpICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdGVfcHJpbnQgRm10OwkJCQkJXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIENPTkZJR19QUklOVEsgLy8KKyNlbmRpZiAvLyAhVUNPUyAvLworCisjZGVmaW5lIEFURV9PTihfcCkgICAgICAgICAgICAgICgoKF9wKS0+YXRlLk1vZGUpICE9IEFURV9TVE9QKQorCisvKiBSVDI4ODBfaU5JQyB3aWxsIGRlZmluZSAiUlQyODYwIi4gKi8KKworLyogUlQyODgwX2lOSUMgd2lsbCBkZWZpbmUgUlQyODYwLiAqLworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEVFUFJPTV9TSVpFCQkJCQkJCQkweDQwMAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBFRVBST01fQklOX0ZJTEVfTkFNRSAgIi9ldGMvV2lyZWxlc3MvUlQyODcwU1RBL2UycC5iaW4iCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgIFJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikKKyNkZWZpbmUgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpICAgIFJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikKKworI2RlZmluZSBCVUxLX09VVF9MT0NLKHBMb2NrLCBJcnFGbGFncykJXAorCQlpZigxIC8qIShpbl9pbnRlcnJ1cHQoKSAmIDB4ZmZmZjAwMDApKi8pCVwKKwkJCVJUTVBfSVJRX0xPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisjZGVmaW5lIEJVTEtfT1VUX1VOTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKKwkJaWYoMSAvKiEoaW5faW50ZXJydXB0KCkgJiAweGZmZmYwMDAwKSovKQlcCisJCQlSVE1QX0lSUV9VTkxPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisvLyBQcm90b3R5cGVzIG9mIGNvbXBsZXRpb24gZnVudWMuCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjZGVmaW5lIEFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUocHVyYiwgcHRfcmVncykgICAgQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiKQorI2VuZGlmCisKK1ZPSUQgQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZSgKKwlJTiBwdXJiYl90IHB1cmIsCisJT1VUIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKKworVk9JRCBBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQpOworCitWT0lEIEFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQzMHh4CisjZGVmaW5lIEFURV9SRl9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgICBSVE1QX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikKKyNkZWZpbmUgQVRFX1JGX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikgICAgIFJUTVBfUkZfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisKK1ZPSUQgcnRfZWVfcmVhZF9hbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFVTSE9SVCAqRGF0YSk7CisKKworVk9JRCBydF9lZV93cml0ZV9hbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCAqRGF0YSk7CisKK0lOVCBTZXRfQVRFX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfREFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9TQV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX0JTU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfQ0hBTk5FTF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0FudGVubmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9SWF9BbnRlbm5hX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0JXX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfTEVOR1RIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfQ09VTlRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9NQ1NfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9NT0RFX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfR0lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisKK0lOVAlTZXRfQVRFX1JYX0ZFUl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQVRFX1JlYWRfUkZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Mb2FkX0UyUF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQVRFX1JlYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfU2hvd19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX0hlbHBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisjaWZkZWYgUkFMSU5LX0FURQorI2lmZGVmIFJBTElOS18yOHh4X1FBCitWT0lEIEFURV9RQV9TdGF0aXN0aWNzKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQUlhXSV9TVFJVQwkJCXBSeFdJLAorCUlOIFBSVDI4WFhfUlhEX1NUUlVDICAgIHAyOHh4UnhELAorCUlOIFBIRUFERVJfODAyXzExCQlwSGVhZGVyKTsKKworVk9JRCBSdG1wRG9BdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKK1ZPSUQgQnViYmxlU29ydCgKKwlJTiAgSU5UMzIgbiwKKwlJTiAgSU5UMzIgYVtdKTsKKworVk9JRCBDYWxOb2lzZUxldmVsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisJSU4gIFVDSEFSICAgICAgICAgICBjaGFubmVsLAorCU9VVCBJTlQzMiAgICAgICAgICAgYnVmZmVyWzNdWzEwXSk7CisKK0JPT0xFQU4gU3luY1R4UnhDb25maWcoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglVU0hPUlQJCQlvZmZzZXQsCisJSU4JVUNIQVIJCQl2YWx1ZSk7CisKK0lOVCBTZXRfVHhTdG9wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9SeFN0b3BfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKK1ZPSUQgQVRFQXNpY1N3aXRjaENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFURUFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBVEVEaXNhYmxlQXNpY1Byb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkKTsKKworQ0hBUiBBVEVDb252ZXJ0VG9Sc3NpKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBDSEFSCQkJCVJzc2ksCisJSU4gVUNIQVIgICAgUnNzaU51bWJlcik7CisKK1ZPSUQgQVRFU2FtcGxlUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBQUlhXSV9TVFJVQwkJcFJ4V0kpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgUlRNUFN0YXRpb25TdG9wKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QU3RhdGlvblN0YXJ0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBfX0FURV9IX18gLy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfY29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDY0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2NvbmZpZy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0X2NvbmZpZy5oCisKKwlBYnN0cmFjdDoKKwlDZW50cmFsIGhlYWRlciBmaWxlIHRvIG1haW50YWluIGFsbCBpbmNsdWRlIGZpbGVzIGZvciBhbGwgTkRJUworCW1pbmlwb3J0IGRyaXZlciByb3V0aW5lcy4KKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBMaW4gICAgMDgtMDEtMjAwMiAgICBjcmVhdGVkCisKKyovCisjaWZuZGVmCV9fUlRfQ09ORklHX0hfXworI2RlZmluZQlfX1JUX0NPTkZJR19IX18KKworI2luY2x1ZGUgICAgInJ0bXBfdHlwZS5oIgorI2lmZGVmIFVDT1MKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAJInJ0X3Vjb3MuaCIKKyNlbmRpZgorCisjaWZkZWYgTElOVVgKKyNpbmNsdWRlCSJydF9saW51eC5oIgorI2VuZGlmCisjaW5jbHVkZSAgICAicnRtcF9kZWYuaCIKKyNpbmNsdWRlICAgICJydDI4eHguaCIKKworCisjaWZkZWYgUlQyODcwCisjaW5jbHVkZQkicnQyODcwLmgiCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpbmNsdWRlICAgICJvaWQuaCIKKyNpbmNsdWRlICAgICJtbG1lLmgiCisjaW5jbHVkZSAgICAid3BhLmgiCisjaW5jbHVkZSAgICAibWQ1LmgiCisjaW5jbHVkZSAgICAicnRtcC5oIgorI2luY2x1ZGUJImFwLmgiCisjaW5jbHVkZQkiZGZzLmgiCisjaW5jbHVkZQkiY2hsaXN0LmgiCisjaW5jbHVkZQkic3BlY3RydW0uaCIKKyNpZmRlZiBNTE1FX0VYCisjaW5jbHVkZQkibWxtZV9leF9kZWYuaCIKKyNpbmNsdWRlCSJtbG1lX2V4LmgiCisjZW5kaWYgLy8gTUxNRV9FWCAvLworCisjdW5kZWYgQVBfV1NDX0lOQ0xVREVECisjdW5kZWYgU1RBX1dTQ19JTkNMVURFRAorI3VuZGVmIFdTQ19JTkNMVURFRAorCisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyNpbmNsdWRlICAgICJsZWFwLmgiCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIEJMT0NLX05FVF9JRgorI2luY2x1ZGUgIm5ldGlmX2Jsb2NrLmgiCisjZW5kaWYgLy8gQkxPQ0tfTkVUX0lGIC8vCisKKyNpZmRlZiBJR01QX1NOT09QX1NVUFBPUlQKKyNpbmNsdWRlICJpZ21wX3Nub29wLmgiCisjZW5kaWYgLy8gSUdNUF9TTk9PUF9TVVBQT1JUIC8vCisKKyNpZmRlZiBSQUxJTktfQVRFCisjaW5jbHVkZSAicnRfYXRlLmgiCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisKKworI2lmIGRlZmluZWQoQVBfV1NDX0lOQ0xVREVEKSB8fCBkZWZpbmVkKFNUQV9XU0NfSU5DTFVERUQpCisjZGVmaW5lIFdTQ19JTkNMVURFRAorI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNlcnJvciAiQnVpbGQgZm9yIGJlaW5nIGNvbnRyb2xsZWQgYnkgTmV0d29ya01hbmFnZXIgb3Igd2V4dCwgcGxlYXNlIHNldCBIQVNfV1BBX1NVUFBMSUNBTlQ9eSBhbmQgSEFTX05BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUPXkiCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgSUtBTk9TX1ZYXzFYMAorI2luY2x1ZGUJInZyX2lrYW5zLmgiCisjZW5kaWYgLy8gSUtBTk9TX1ZYXzFYMCAvLworCisjZW5kaWYJLy8gX19SVF9DT05GSUdfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjMzODUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5jCkBAIC0wLDAgKzEsMTA2MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgorCitVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKKworQlVJTERfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyk7CisvL0JVSUxEX1RJTUVSX0ZVTkNUSU9OKE1sbWVSc3NpUmVwb3J0RXhlYyk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBc2ljUnhBbnRFdmFsVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBUFNEUGVyaW9kaWNFeGVjKTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEFzaWNSZlR1bmluZ0V4ZWMpOworI2lmZGVmIFJUMjg3MAorQlVJTERfVElNRVJfRlVOQ1RJT04oQmVhY29uVXBkYXRlRXhlYyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorQlVJTERfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihTY2FuVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBdXRoVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oUmVhc3NvY1RpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oRGlzYXNzb2NUaW1lb3V0KTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKExpbmtEb3duRXhlYyk7CisjaWZkZWYgTEVBUF9TVVBQT1JUCitCVUlMRF9USU1FUl9GVU5DVElPTihMZWFwQXV0aFRpbWVvdXQpOworI2VuZGlmCitCVUlMRF9USU1FUl9GVU5DVElPTihTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKERsc1RpbWVvdXRBY3Rpb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKworCisvLyBmb3Igd2lyZWxlc3Mgc3lzdGVtIGV2ZW50IG1lc3NhZ2UKK2NoYXIgY29uc3QgKnBXaXJlbGVzc1N5c0V2ZW50VGV4dFtJV19TWVNfRVZFTlRfVFlQRV9OVU1dID0geworCS8vIHN5c3RlbSBzdGF0dXMgZXZlbnQKKyAgICAiaGFkIGFzc29jaWF0ZWQgc3VjY2Vzc2Z1bGx5IiwJCQkJCQkJLyogSVdfQVNTT0NfRVZFTlRfRkxBRyAqLworICAgICJoYWQgZGlzYXNzb2NpYXRlZCIsCQkJCQkJCQkJLyogSVdfRElTQVNTT0NfRVZFTlRfRkxBRyAqLworICAgICJoYWQgZGVhdXRoZW50aWNhdGVkIiwJCQkJCQkJCQkvKiBJV19ERUFVVEhfRVZFTlRfRkxBRyAqLworICAgICJoYWQgYmVlbiBhZ2VkLW91dCBhbmQgZGlzYXNzb2NpYXRlZCIsCQkJCQkvKiBJV19BR0VPVVRfRVZFTlRfRkxBRyAqLworICAgICJvY2N1cnJlZCBDb3VudGVyTWVhc3VyZXMgYXR0YWNrIiwJCQkJCQkvKiBJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgcmVwbGF5IGNvdW50ZXIgZGlmZmVyZW50IGluIEtleSBIYW5kc2hha2luZyIsCS8qIElXX1JFUExBWV9DT1VOVEVSX0RJRkZfRVZFTlRfRkxBRyAqLworICAgICJvY2N1cnJlZCBSU05JRSBkaWZmZXJlbnQgaW4gS2V5IEhhbmRzaGFraW5nIiwJCQkvKiBJV19SU05JRV9ESUZGX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgTUlDIGRpZmZlcmVudCBpbiBLZXkgSGFuZHNoYWtpbmciLAkJCS8qIElXX01JQ19ESUZGX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgSUNWIGVycm9yIGluIFJYIiwJCQkJCQkJCS8qIElXX0lDVl9FUlJPUl9FVkVOVF9GTEFHICovCisgICAgIm9jY3VycmVkIE1JQyBlcnJvciBpbiBSWCIsCQkJCQkJCQkvKiBJV19NSUNfRVJST1JfRVZFTlRfRkxBRyAqLworCSJHcm91cCBLZXkgSGFuZHNoYWtpbmcgdGltZW91dCIsCQkJCQkJLyogSVdfR1JPVVBfSFNfVElNRU9VVF9FVkVOVF9GTEFHICovCisJIlBhaXJ3aXNlIEtleSBIYW5kc2hha2luZyB0aW1lb3V0IiwJCQkJCQkvKiBJV19QQUlSV0lTRV9IU19USU1FT1VUX0VWRU5UX0ZMQUcgKi8KKwkiUlNOIElFIHNhbml0eSBjaGVjayBmYWlsdXJlIiwJCQkJCQkJLyogSVdfUlNOSUVfU0FOSVRZX0ZBSUxfRVZFTlRfRkxBRyAqLworCSJzZXQga2V5IGRvbmUgaW4gV1BBL1dQQVBTSyIsCQkJCQkJCS8qIElXX1NFVF9LRVlfRE9ORV9XUEExX0VWRU5UX0ZMQUcgKi8KKwkic2V0IGtleSBkb25lIGluIFdQQTIvV1BBMlBTSyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcgKi8KKwkiY29ubmVjdHMgd2l0aCBvdXIgd2lyZWxlc3MgY2xpZW50IiwgICAgICAgICAgICAgICAgICAgIC8qIElXX1NUQV9MSU5LVVBfRVZFTlRfRkxBRyAqLworCSJkaXNjb25uZWN0cyB3aXRoIG91ciB3aXJlbGVzcyBjbGllbnQiLCAgICAgICAgICAgICAgICAgLyogSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcgKi8KKwkic2NhbiBjb21wbGV0ZWQiCQkJCQkJCQkJCS8qIElXX1NDQU5fQ09NUExFVEVEX0VWRU5UX0ZMQUcgKi8KKwkic2NhbiB0ZXJtaW5hdGUhISBCdXN5ISEgRW5xdWV1ZSBmYWlsISEiCQkJCS8qIElXX1NDQU5fRU5RVUVVRV9GQUlMX0VWRU5UX0ZMQUcgKi8KKwl9OworCisvLyBmb3Igd2lyZWxlc3MgSURTX3Nwb29mX2F0dGFjayBldmVudCBtZXNzYWdlCitjaGFyIGNvbnN0ICpwV2lyZWxlc3NTcG9vZkV2ZW50VGV4dFtJV19TUE9PRl9FVkVOVF9UWVBFX05VTV0gPSB7CisgICAgImRldGVjdGVkIGNvbmZsaWN0IFNTSUQiLAkJCQkJCQkJLyogSVdfQ09ORkxJQ1RfU1NJRF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgYXNzb2NpYXRpb24gcmVzcG9uc2UiLAkJCQkvKiBJV19TUE9PRl9BU1NPQ19SRVNQX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCByZWFzc29jaWF0aW9uIHJlc3BvbnNlcyIsCQkJCS8qIElXX1NQT09GX1JFQVNTT0NfUkVTUF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgcHJvYmUgcmVzcG9uc2UiLAkJCQkJCS8qIElXX1NQT09GX1BST0JFX1JFU1BfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGJlYWNvbiIsCQkJCQkJCQkvKiBJV19TUE9PRl9CRUFDT05fRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGRpc2Fzc29jaWF0aW9uIiwJCQkJCQkvKiBJV19TUE9PRl9ESVNBU1NPQ19FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgYXV0aGVudGljYXRpb24iLAkJCQkJCS8qIElXX1NQT09GX0FVVEhfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGRlYXV0aGVudGljYXRpb24iLAkJCQkJLyogSVdfU1BPT0ZfREVBVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCB1bmtub3duIG1hbmFnZW1lbnQgZnJhbWUiLAkJCS8qIElXX1NQT09GX1VOS05PV05fTUdNVF9FVkVOVF9GTEFHICovCisJImRldGVjdGVkIHJlcGxheSBhdHRhY2siCQkJCQkJCQkvKiBJV19SRVBMQVlfQVRUQUNLX0VWRU5UX0ZMQUcgKi8KKwl9OworCisvLyBmb3Igd2lyZWxlc3MgSURTX2Zsb29kaW5nX2F0dGFjayBldmVudCBtZXNzYWdlCitjaGFyIGNvbnN0ICpwV2lyZWxlc3NGbG9vZEV2ZW50VGV4dFtJV19GTE9PRF9FVkVOVF9UWVBFX05VTV0gPSB7CisJImRldGVjdGVkIGF1dGhlbnRpY2F0aW9uIGZsb29kaW5nIiwJCQkJCQkvKiBJV19GTE9PRF9BVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgYXNzb2NpYXRpb24gcmVxdWVzdCBmbG9vZGluZyIsCQkJCS8qIElXX0ZMT09EX0FTU09DX1JFUV9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHJlYXNzb2NpYXRpb24gcmVxdWVzdCBmbG9vZGluZyIsCQkJCS8qIElXX0ZMT09EX1JFQVNTT0NfUkVRX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgcHJvYmUgcmVxdWVzdCBmbG9vZGluZyIsCQkJCQkJLyogSVdfRkxPT0RfUFJPQkVfUkVRX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgZGlzYXNzb2NpYXRpb24gZmxvb2RpbmciLAkJCQkJCS8qIElXX0ZMT09EX0RJU0FTU09DX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgZGVhdXRoZW50aWNhdGlvbiBmbG9vZGluZyIsCQkJCQkvKiBJV19GTE9PRF9ERUFVVEhfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCA4MDIuMXggZWFwLXJlcXVlc3QgZmxvb2RpbmciCQkJCQkvKiBJV19GTE9PRF9FQVBfUkVRX0VWRU5UX0ZMQUcgKi8KKwl9OworCisKKy8qIHRpbWVvdXQgLS0gbXMgKi8KK1ZPSUQgUlRNUF9TZXRQZXJpb2RpY1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIgKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJdGltZW91dCA9ICgodGltZW91dCpIWikgLyAxMDAwKTsKKwlwVGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dDsKKwlhZGRfdGltZXIocFRpbWVyKTsKK30KKworLyogY29udmVydCBOZGlzTUluaXRpYWxpemVUaW1lciAtLT4gUlRNUF9PU19Jbml0X1RpbWVyICovCitWT0lEIFJUTVBfT1NfSW5pdF9UaW1lcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglORElTX01JTklQT1JUX1RJTUVSICpwVGltZXIsCisJSU4JVElNRVJfRlVOQ1RJT04gZnVuY3Rpb24sCisJSU4JUFZPSUQgZGF0YSkKK3sKKwlpbml0X3RpbWVyKHBUaW1lcik7CisgICAgcFRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKyAgICBwVGltZXItPmZ1bmN0aW9uID0gZnVuY3Rpb247Cit9CisKKworVk9JRCBSVE1QX09TX0FkZF9UaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSCQkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlpZiAodGltZXJfcGVuZGluZyhwVGltZXIpKQorCQlyZXR1cm47CisKKwl0aW1lb3V0ID0gKCh0aW1lb3V0KkhaKSAvIDEwMDApOworCXBUaW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OworCWFkZF90aW1lcihwVGltZXIpOworfQorCitWT0lEIFJUTVBfT1NfTW9kX1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIJCSpwVGltZXIsCisJSU4JdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXRpbWVvdXQgPSAoKHRpbWVvdXQqSFopIC8gMTAwMCk7CisJbW9kX3RpbWVyKHBUaW1lciwgamlmZmllcyArIHRpbWVvdXQpOworfQorCitWT0lEIFJUTVBfT1NfRGVsX1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIJCSpwVGltZXIsCisJT1VUCUJPT0xFQU4JCQkJCSpwQ2FuY2VsbGVkKQoreworCWlmICh0aW1lcl9wZW5kaW5nKHBUaW1lcikpCisJeworCQkqcENhbmNlbGxlZCA9IGRlbF90aW1lcl9zeW5jKHBUaW1lcik7CisJfQorCWVsc2UKKwl7CisJCSpwQ2FuY2VsbGVkID0gVFJVRTsKKwl9CisKK30KKworVk9JRCBSVE1QX09TX1JlbGVhc2VfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVBRVUVVRV9FTlRSWSAgcEVudHJ5KQoreworCS8vUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgKHN0cnVjdCBza19idWZmICopcEVudHJ5KTsKK30KKworLy8gVW5pZnkgYWxsIGRlbGF5IHJvdXRpbmUgYnkgdXNpbmcgdWRlbGF5CitWT0lEIFJUTVB1c2VjRGVsYXkoCisJSU4JVUxPTkcJdXNlYykKK3sKKwlVTE9ORwlpOworCisJZm9yIChpID0gMDsgaSA8ICh1c2VjIC8gNTApOyBpKyspCisJCXVkZWxheSg1MCk7CisKKwlpZiAodXNlYyAlIDUwKQorCQl1ZGVsYXkodXNlYyAlIDUwKTsKK30KKwordm9pZCBSVE1QX0dldEN1cnJlbnRTeXN0ZW1UaW1lKExBUkdFX0lOVEVHRVIgKnRpbWUpCit7CisJdGltZS0+dS5Mb3dQYXJ0ID0gamlmZmllczsKK30KKworLy8gcEFkIE1VU1QgYWxsb3cgdG8gYmUgTlVMTAorTkRJU19TVEFUVVMgb3NfYWxsb2NfbWVtKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCU9VVAlQVUNIQVIgKm1lbSwKKwlJTglVTE9ORyAgc2l6ZSkKK3sKKwkqbWVtID0gKFBVQ0hBUikga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoKm1lbSkKKwkJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKKwllbHNlCisJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7Cit9CisKKy8vIHBBZCBNVVNUIGFsbG93IHRvIGJlIE5VTEwKK05ESVNfU1RBVFVTIG9zX2ZyZWVfbWVtKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVBVQ0hBUiBtZW0pCit7CisKKwlBU1NFUlQobWVtKTsKKwlrZnJlZShtZW0pOworCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OworCisJcGt0ID0gZGV2X2FsbG9jX3NrYihMZW5ndGgpOworCisJaWYgKHBrdCA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY2FuJ3QgYWxsb2NhdGUgZnJhZyByeCAlbGQgc2l6ZSBwYWNrZXRcbiIsTGVuZ3RoKSk7CisJfQorCisJaWYgKHBrdCkKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UoT1NQS1RfVE9fUlRQS1QocGt0KSwgUEtUU1JDX05ESVMpOworCX0KKworCXJldHVybiAoUE5ESVNfUEFDS0VUKSBwa3Q7Cit9CisKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVUeFBhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OworCisJcGt0ID0gZGV2X2FsbG9jX3NrYihMZW5ndGgpOworCisJaWYgKHBrdCA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY2FuJ3QgYWxsb2NhdGUgdHggJWxkIHNpemUgcGFja2V0XG4iLExlbmd0aCkpOworCX0KKworCWlmIChwa3QpCisJeworCQlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKE9TUEtUX1RPX1JUUEtUKHBrdCksIFBLVFNSQ19ORElTKTsKKwkJKlZpcnR1YWxBZGRyZXNzID0gKFBWT0lEKSBwa3QtPmRhdGE7CisJfQorCWVsc2UKKwl7CisJCSpWaXJ0dWFsQWRkcmVzcyA9IChQVk9JRCkgTlVMTDsKKwl9CisKKwlyZXR1cm4gKFBORElTX1BBQ0tFVCkgcGt0OworfQorCisKK1ZPSUQgYnVpbGRfdHhfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUglwRnJhbWUsCisJSU4JVUxPTkcJRnJhbWVMZW4pCit7CisKKwlzdHJ1Y3Qgc2tfYnVmZgkqcFR4UGt0OworCisJQVNTRVJUKHBQYWNrZXQpOworCXBUeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOworCisJTmRpc01vdmVNZW1vcnkoc2tiX3B1dChwVHhQa3QsIEZyYW1lTGVuKSwgcEZyYW1lLCBGcmFtZUxlbik7Cit9CisKK1ZPSUQJUlRNUEZyZWVBZGFwdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworICAgIFBPU19DT09LSUUgb3NfY29va2llOworCWludCBpbmRleDsKKworCW9zX2Nvb2tpZT0oUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKKworCWtmcmVlKHBBZC0+QmVhY29uQnVmKTsKKworCisJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NZ210UmluZ0xvY2spOworCisKKwlmb3IgKGluZGV4ID0wIDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykKKwl7CisgICAgCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+VHhTd1F1ZXVlTG9ja1tpbmRleF0pOworCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkRlUXVldWVMb2NrW2luZGV4XSk7CisJCXBBZC0+RGVRdWV1ZVJ1bm5pbmdbaW5kZXhdID0gRkFMU0U7CisJfQorCisJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5pcnFfbG9jayk7CisKKworCXZmcmVlKHBBZCk7IC8vIHBjaV9mcmVlX2NvbnNpc3RlbnQob3NfY29va2llLT5wY2lfZGV2LHNpemVvZihSVE1QX0FEQVBURVIpLHBBZCxvc19jb29raWUtPnBBZF9wYSk7CisJa2ZyZWUob3NfY29va2llKTsKK30KKworQk9PTEVBTiBPU19OZWVkX0Nsb25lX1BhY2tldCh2b2lkKQoreworCXJldHVybiAoRkFMU0UpOworfQorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCWNsb25lIGFuIGlucHV0IE5ESVMgUEFDS0VUIHRvIGFub3RoZXIgb25lLiBUaGUgbmV3IGludGVybmFsbHkgY3JlYXRlZCBORElTIFBBQ0tFVAorCQltdXN0IGhhdmUgb25seSBvbmUgTkRJUyBCVUZGRVIKKwkJcmV0dXJuIC0gYnl0ZSBjb3BpZWQuIDAgbWVhbnMgY2FuJ3QgY3JlYXRlIE5ESVMgUEFDS0VUCisJCU5PVEU6IGludGVybmFsbHkgY3JlYXRlZCBORElTX1BBQ0tFVCBzaG91bGQgYmUgZGVzdHJveWVkIGJ5IFJUTVBGcmVlTmRpc1BhY2tldAorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcEluc0FNU0RVSGRyCUVXQyBBLU1TRFUgZm9ybWF0IGhhcyBleHRyYSAxNC1ieXRlcyBoZWFkZXIuIGlmIFRSVUUsIGluc2VydCB0aGlzIDE0LWJ5dGUgaGRyIGluIGZyb250IG9mIE1TRFUuCisJCSpwU3JjVG90YWxMZW4JCQlyZXR1cm4gdG90YWwgcGFja2V0IGxlbmd0aC4gVGhpcyBsZW5naHQgaXMgY2FsY3VsYXRlZCB3aXRoIDgwMi4zIGZvcm1hdCBwYWNrZXQuCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFJUTVBDbG9uZU5kaXNQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JQk9PTEVBTgkJCXBJbnNBTVNEVUhkciwKKwlJTglQTkRJU19QQUNLRVQJcEluUGFja2V0LAorCU9VVCBQTkRJU19QQUNLRVQgICAqcHBPdXRQYWNrZXQpCit7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OworCisJQVNTRVJUKHBJblBhY2tldCk7CisJQVNTRVJUKHBwT3V0UGFja2V0KTsKKworCS8vIDEuIEFsbG9jYXRlIGEgcGFja2V0CisJcGt0ID0gZGV2X2FsbG9jX3NrYigyMDQ4KTsKKworCWlmIChwa3QgPT0gTlVMTCkKKwl7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworIAlza2JfcHV0KHBrdCwgR0VUX09TX1BLVF9MRU4ocEluUGFja2V0KSk7CisJTmRpc01vdmVNZW1vcnkocGt0LT5kYXRhLCBHRVRfT1NfUEtUX0RBVEFQVFIocEluUGFja2V0KSwgR0VUX09TX1BLVF9MRU4ocEluUGFja2V0KSk7CisJKnBwT3V0UGFja2V0ID0gT1NQS1RfVE9fUlRQS1QocGt0KTsKKworCisJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShPU1BLVF9UT19SVFBLVChwa3QpLCBQS1RTUkNfTkRJUyk7CisKKwlwcmludGsoIiMjI0Nsb25lIyMjXG4iKTsKKworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisKKy8vIHRoZSBhbGxvY2F0ZWQgTkRJUyBQQUNLRVQgbXVzdCBiZSBmcmVlZCB2aWEgUlRNUEZyZWVOZGlzUGFja2V0KCkKK05ESVNfU1RBVFVTIFJUTVBBbGxvY2F0ZU5kaXNQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUIFBORElTX1BBQ0tFVCAgICpwcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyLAorCUlOCVVJTlQJCQlIZWFkZXJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUlOVAkJCURhdGFMZW4pCit7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJQVNTRVJUKHBEYXRhKTsKKwlBU1NFUlQoRGF0YUxlbik7CisKKwkvLyAxLiBBbGxvY2F0ZSBhIHBhY2tldAorCXBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUICopIGRldl9hbGxvY19za2IoSGVhZGVyTGVuICsgRGF0YUxlbiArIFRYUEFERElOR19TSVpFKTsKKwlpZiAocFBhY2tldCA9PSBOVUxMKQorIAl7CisJCSpwcFBhY2tldCA9IE5VTEw7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJSVE1QQWxsb2NhdGVOZGlzUGFja2V0IEZhaWxcblxuIik7CisjZW5kaWYKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLy8gMi4gY2xvbmUgdGhlIGZyYW1lIGNvbnRlbnQKKwlpZiAoSGVhZGVyTGVuID4gMCkKKwkJTmRpc01vdmVNZW1vcnkoR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpLCBwSGVhZGVyLCBIZWFkZXJMZW4pOworCWlmIChEYXRhTGVuID4gMCkKKwkJTmRpc01vdmVNZW1vcnkoR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpICsgSGVhZGVyTGVuLCBwRGF0YSwgRGF0YUxlbik7CisKKwkvLyAzLiB1cGRhdGUgbGVuZ3RoIG9mIHBhY2tldAorIAlza2JfcHV0KEdFVF9PU19QS1RfVFlQRShwUGFja2V0KSwgSGVhZGVyTGVuK0RhdGFMZW4pOworCisJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShwUGFja2V0LCBQS1RTUkNfTkRJUyk7CisvLwlwcmludGsoIiVzIDogcFBhY2tldCA9ICVwLCBsZW4gPSAlZFxuIiwgX19GVU5DVElPTl9fLCBwUGFja2V0LCBHRVRfT1NfUEtUX0xFTihwUGFja2V0KSk7CisJKnBwUGFja2V0ID0gcFBhY2tldDsKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIERlc2NyaXB0aW9uOgorCVRoaXMgcm91dGluZSBmcmVlcyBhIG1pbmlwb3J0IGludGVybmFsbHkgYWxsb2NhdGVkIE5ESVNfUEFDS0VUIGFuZCBpdHMKKwljb3JyZXNwb25kaW5nIE5ESVNfQlVGRkVSIGFuZCBhbGxvY2F0ZWQgbWVtb3J5LgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBGcmVlTmRpc1BhY2tldCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQTkRJU19QQUNLRVQgIHBQYWNrZXQpCit7CisJZGV2X2tmcmVlX3NrYl9hbnkoUlRQS1RfVE9fT1NQS1QocFBhY2tldCkpOworfQorCisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorLy8gTk9URTogd2UgZG8gaGF2ZSBhbiBhc3N1bXB0aW9uIGhlcmUsIHRoYXQgQnl0ZTAgYW5kIEJ5dGUxIGFsd2F5cyByZWFzaWQgYXQgdGhlIHNhbWUKKy8vCQkJIHNjYXR0ZXIgZ2F0aGVyIGJ1ZmZlcgorTkRJU19TVEFUVVMgU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcigKKwlJTglQTkRJU19CVUZGRVIJcEZpcnN0QnVmZmVyLAorCUlOCVVDSEFSCQkJRGVzaXJlZE9mZnNldCwKKwlPVVQgUFVDSEFSCQkJcEJ5dGUwLAorCU9VVCBQVUNIQVIJCQlwQnl0ZTEpCit7CisgICAgKnBCeXRlMCA9ICooUFVDSEFSKShwRmlyc3RCdWZmZXIgKyBEZXNpcmVkT2Zmc2V0KTsKKyAgICAqcEJ5dGUxID0gKihQVUNIQVIpKHBGaXJzdEJ1ZmZlciArIERlc2lyZWRPZmZzZXQgKyAxKTsKKworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisKK3ZvaWQgUlRNUF9RdWVyeVBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCBwUGFja2V0LAorCU9VVCBQQUNLRVRfSU5GTyAgKnBQYWNrZXRJbmZvLAorCU9VVCBQVUNIQVIJCSAqcFNyY0J1ZlZBLAorCU9VVAlVSU5UCQkgKnBTcmNCdWZMZW4pCit7CisJcFBhY2tldEluZm8tPkJ1ZmZlckNvdW50ID0gMTsKKwlwUGFja2V0SW5mby0+cEZpcnN0QnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMTsKKwlwUGFja2V0SW5mby0+VG90YWxQYWNrZXRMZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKworCSpwU3JjQnVmVkEgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCk7CisJKnBTcmNCdWZMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKK30KKwordm9pZCBSVE1QX1F1ZXJ5TmV4dFBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCAqcHBQYWNrZXQsCisJT1VUIFBBQ0tFVF9JTkZPICAqcFBhY2tldEluZm8sCisJT1VUIFBVQ0hBUgkJICpwU3JjQnVmVkEsCisJT1VUCVVJTlQJCSAqcFNyY0J1ZkxlbikKK3sKKwlQTkRJU19QQUNLRVQgcFBhY2tldCA9IE5VTEw7CisKKwlpZiAoKnBwUGFja2V0KQorCQlwUGFja2V0ID0gR0VUX09TX1BLVF9ORVhUKCpwcFBhY2tldCk7CisKKwlpZiAocFBhY2tldCkKKwl7CisJCXBQYWNrZXRJbmZvLT5CdWZmZXJDb3VudCA9IDE7CisJCXBQYWNrZXRJbmZvLT5wRmlyc3RCdWZmZXIgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCk7CisJCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMTsKKwkJcFBhY2tldEluZm8tPlRvdGFsUGFja2V0TGVuZ3RoID0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisKKwkJKnBTcmNCdWZWQSA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwkJKnBTcmNCdWZMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKwkJKnBwUGFja2V0ID0gR0VUX09TX1BLVF9ORVhUKHBQYWNrZXQpOworCX0KKwllbHNlCisJeworCQlwUGFja2V0SW5mby0+QnVmZmVyQ291bnQgPSAwOworCQlwUGFja2V0SW5mby0+cEZpcnN0QnVmZmVyID0gTlVMTDsKKwkJcFBhY2tldEluZm8tPlBoeXNpY2FsQnVmZmVyQ291bnQgPSAwOworCQlwUGFja2V0SW5mby0+VG90YWxQYWNrZXRMZW5ndGggPSAwOworCisJCSpwU3JjQnVmVkEgPSBOVUxMOworCQkqcFNyY0J1ZkxlbiA9IDA7CisJCSpwcFBhY2tldCA9IE5VTEw7CisJfQorfQorCisvLyBub3QgeWV0IHN1cHBvcnQgTUJTUworUE5FVF9ERVYgZ2V0X25ldGRldl9mcm9tX2Jzc2lkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisgICAgUE5FVF9ERVYgZGV2X3AgPSBOVUxMOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJZGV2X3AgPSBwQWQtPm5ldF9kZXY7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJQVNTRVJUKGRldl9wKTsKKwlyZXR1cm4gZGV2X3A7IC8qIHJldHVybiBvbmUgb2YgTUJTUyAqLworfQorCitQTkRJU19QQUNLRVQgRHVwbGljYXRlUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlQTkRJU19QQUNLRVQJcFJldFBhY2tldCA9IE5VTEw7CisJVVNIT1JUCQkJRGF0YVNpemU7CisJVUNIQVIJCQkqcERhdGE7CisKKwlEYXRhU2l6ZSA9IChVU0hPUlQpIEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCXBEYXRhID0gKFBVQ0hBUikgR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCisKKwlza2IgPSBza2JfY2xvbmUoUlRQS1RfVE9fT1NQS1QocFBhY2tldCksIE1FTV9BTExPQ19GTEFHKTsKKwlpZiAoc2tiKQorCXsKKwkJc2tiLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisJCXBSZXRQYWNrZXQgPSBPU1BLVF9UT19SVFBLVChza2IpOworCX0KKworCXJldHVybiBwUmV0UGFja2V0OworCit9CisKK1BORElTX1BBQ0tFVCBkdXBsaWNhdGVfcGt0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlQTkRJU19QQUNLRVQJcFBhY2tldCA9IE5VTEw7CisKKworCWlmICgoc2tiID0gX19kZXZfYWxsb2Nfc2tiKEhkckxlbiArIERhdGFTaXplICsgMiwgTUVNX0FMTE9DX0ZMQUcpKSAhPSBOVUxMKQorCXsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwSGVhZGVyODAyXzMsIEhkckxlbik7CisJCXNrYl9wdXQoc2tiLCBIZHJMZW4pOworCQlOZGlzTW92ZU1lbW9yeShza2ItPnRhaWwsIHBEYXRhLCBEYXRhU2l6ZSk7CisJCXNrYl9wdXQoc2tiLCBEYXRhU2l6ZSk7CisJCXNrYi0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCQlwUGFja2V0ID0gT1NQS1RfVE9fUlRQS1Qoc2tiKTsKKwl9CisKKwlyZXR1cm4gcFBhY2tldDsKK30KKworCisjZGVmaW5lIFRLSVBfVFhfTUlDX1NJWkUJCTgKK1BORElTX1BBQ0tFVCBkdXBsaWNhdGVfcGt0X3dpdGhfVEtJUF9NSUMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYiwgKm5ld3NrYjsKKworCisJc2tiID0gUlRQS1RfVE9fT1NQS1QocFBhY2tldCk7CisJaWYgKHNrYl90YWlscm9vbShza2IpIDwgVEtJUF9UWF9NSUNfU0laRSkKKwl7CisJCS8vIGFsbG9jIGEgbmV3IHNrYiBhbmQgY29weSB0aGUgcGFja2V0CisJCW5ld3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIHNrYl9oZWFkcm9vbShza2IpLCBUS0lQX1RYX01JQ19TSVpFLCBHRlBfQVRPTUlDKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJaWYgKG5ld3NrYiA9PSBOVUxMKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFeHRlbmQgVHguTUlDIGZvciBwYWNrZXQgZmFpbGVkISwgZHJvcHBpbmcgcGFja2V0IVxuIikpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJc2tiID0gbmV3c2tiOworCX0KKworCXJldHVybiBPU1BLVF9UT19SVFBLVChza2IpOworfQorCisKKworCitQTkRJU19QQUNLRVQgQ2xvbmVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqcFJ4UGt0OworCXN0cnVjdCBza19idWZmCSpwQ2xvbmVkUGt0OworCisJQVNTRVJUKHBQYWNrZXQpOworCXBSeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOworCisJLy8gY2xvbmUgdGhlIHBhY2tldAorCXBDbG9uZWRQa3QgPSBza2JfY2xvbmUocFJ4UGt0LCBNRU1fQUxMT0NfRkxBRyk7CisKKwlpZiAocENsb25lZFBrdCkKKwl7CisgICAgCS8vIHNldCB0aGUgY29ycmVjdCBkYXRhcHRyIGFuZCBkYXRhIGxlbgorICAgIAlwQ2xvbmVkUGt0LT5kZXYgPSBwUnhQa3QtPmRldjsKKyAgICAJcENsb25lZFBrdC0+ZGF0YSA9IHBEYXRhOworICAgIAlwQ2xvbmVkUGt0LT5sZW4gPSBEYXRhU2l6ZTsKKyAgICAJcENsb25lZFBrdC0+dGFpbCA9IHBDbG9uZWRQa3QtPmRhdGEgKyBwQ2xvbmVkUGt0LT5sZW47CisJCUFTU0VSVChEYXRhU2l6ZSA8IDE1MzApOworCX0KKwlyZXR1cm4gcENsb25lZFBrdDsKK30KKworLy8KKy8vIGNoYW5nZSBPUyBwYWNrZXQgRGF0YVB0ciBhbmQgRGF0YUxlbgorLy8KK3ZvaWQgIHVwZGF0ZV9vc19wYWNrZXRfaW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCXN0cnVjdCBza19idWZmCSpwT1NQa3Q7CisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCXBPU1BrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKworCXBPU1BrdC0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCXBPU1BrdC0+ZGF0YSA9IHBSeEJsay0+cERhdGE7CisJcE9TUGt0LT5sZW4gPSBwUnhCbGstPkRhdGFTaXplOworCXBPU1BrdC0+dGFpbCA9IHBPU1BrdC0+ZGF0YSArIHBPU1BrdC0+bGVuOworfQorCisKK3ZvaWQgd2xhbl84MDJfMTFfdG9fODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JUFVDSEFSCQkJcEhlYWRlcjgwMl8zLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCXN0cnVjdCBza19idWZmCSpwT1NQa3Q7CisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCUFTU0VSVChwSGVhZGVyODAyXzMpOworCisJcE9TUGt0ID0gUlRQS1RfVE9fT1NQS1QocFJ4QmxrLT5wUnhQYWNrZXQpOworCisJcE9TUGt0LT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisJcE9TUGt0LT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlwT1NQa3QtPmxlbiA9IHBSeEJsay0+RGF0YVNpemU7CisJcE9TUGt0LT50YWlsID0gcE9TUGt0LT5kYXRhICsgcE9TUGt0LT5sZW47CisKKwkvLworCS8vIGNvcHkgODAyLjMgaGVhZGVyCisJLy8KKwkvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJTmRpc01vdmVNZW1vcnkoc2tiX3B1c2gocE9TUGt0LCBMRU5HVEhfODAyXzMpLCBwSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisKKwordm9pZCBhbm5vdW5jZV84MDJfM19wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisKKwlzdHJ1Y3Qgc2tfYnVmZgkqcFJ4UGt0OworCisJQVNTRVJUKHBQYWNrZXQpOworCisJcFJ4UGt0ID0gUlRQS1RfVE9fT1NQS1QocFBhY2tldCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworICAgIC8qIFB1c2ggdXAgdGhlIHByb3RvY29sIHN0YWNrICovCisjaWZkZWYgSUtBTk9TX1ZYXzFYMAorCUlLQU5PU19EYXRhRnJhbWVSeChwQWQsIHBSeFBrdC0+ZGV2LCBwUnhQa3QsIHBSeFBrdC0+bGVuKTsKKyNlbHNlCisJcFJ4UGt0LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBSeFBrdCwgcFJ4UGt0LT5kZXYpOworCisvLyNpZmRlZiBDT05GSUdfNVZUX0VOSEFOQ0UKKy8vCSooaW50KikocFJ4UGt0LT5jYikgPSBCUklER0VfVEFHOworLy8jZW5kaWYKKwluZXRpZl9yeChwUnhQa3QpOworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KK30KKworCitQUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUCitydF9nZXRfc2dfbGlzdF9mcm9tX3BhY2tldChQTkRJU19QQUNLRVQgcFBhY2tldCwgUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUICpzZykKK3sKKwlzZy0+TnVtYmVyT2ZFbGVtZW50cyA9IDE7CisJc2ctPkVsZW1lbnRzWzBdLkFkZHJlc3MgPSAgR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCXNnLT5FbGVtZW50c1swXS5MZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKwlyZXR1cm4gKHNnKTsKK30KKwordm9pZCBoZXhfZHVtcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnBTcmNCdWZWQSwgdW5zaWduZWQgaW50IFNyY0J1ZkxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpwdDsKKwlpbnQgeDsKKworCWlmIChSVERlYnVnTGV2ZWwgPCBSVF9ERUJVR19UUkFDRSkKKwkJcmV0dXJuOworCisJcHQgPSBwU3JjQnVmVkE7CisJcHJpbnRrKCIlczogJXAsIGxlbiA9ICVkXG4iLHN0ciwgIHBTcmNCdWZWQSwgU3JjQnVmTGVuKTsKKwlmb3IgKHg9MDsgeDxTcmNCdWZMZW47IHgrKykKKwl7CisJCWlmICh4ICUgMTYgPT0gMCkKKwkJCXByaW50aygiMHglMDR4IDogIiwgeCk7CisJCXByaW50aygiJTAyeCAiLCAoKHVuc2lnbmVkIGNoYXIpcHRbeF0pKTsKKwkJaWYgKHglMTYgPT0gMTUpIHByaW50aygiXG4iKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU2VuZCBsb2cgbWVzc2FnZSB0aHJvdWdoIHdpcmVsZXNzIGV2ZW50CisKKwkJU3VwcG9ydCBzdGFuZGFyZCBpd19ldmVudCB3aXRoIElXRVZDVVNUT00uIEl0IGlzIHVzZWQgYmVsb3cuCisKKwkJaXdyZXFfZGF0YS5kYXRhLmZsYWdzIGlzIHVzZWQgdG8gc3RvcmUgZXZlbnRfZmxhZyB0aGF0IGlzIGRlZmluZWQgYnkgdXNlci4KKwkJaXdyZXFfZGF0YS5kYXRhLmxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBldmVudCBsb2cuCisKKwkJVGhlIGZvcm1hdCBvZiB0aGUgZXZlbnQgbG9nIGlzIGNvbXBvc2VkIG9mIHRoZSBlbnRyeSdzIE1BQyBhZGRyZXNzIGFuZAorCQl0aGUgZGVzaXJlZCBsb2cgbWVzc2FnZSAocmVmZXIgdG8gcFdpcmVsZXNzRXZlbnRUZXh0KS4KKworCQkJZXg6IDExOjIyOjMzOjQ0OjU1OjY2IGhhcyBhc3NvY2lhdGVkIHN1Y2Nlc3NmdWxseQorCisJCXAucy4gVGhlIHJlcXVpcmVtZW50IG9mIFdpcmVsZXNzIEV4dGVuc2lvbiBpcyB2MTUgb3IgbmV3ZXIuCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBTZW5kV2lyZWxlc3NFdmVudCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlFdmVudF9mbGFnLAorCUlOCVBVQ0hBUiAJCQlwQWRkciwKKwlJTglVQ0hBUgkJCUJzc0lkeCwKKwlJTglDSEFSCQkJUnNzaSkKK3sKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTUKKworCXVuaW9uIAlpd3JlcV9kYXRhICAgICAgd3JxdTsKKwlQVUNIQVIgCXBCdWYgPSBOVUxMLCBwQnVmUHRyID0gTlVMTDsKKwlVU0hPUlQJZXZlbnQsIHR5cGUsIEJ1ZkxlbjsKKwlVQ0hBUglldmVudF90YWJsZV9sZW4gPSAwOworCisJdHlwZSA9IEV2ZW50X2ZsYWcgJiAweEZGMDA7CisJZXZlbnQgPSBFdmVudF9mbGFnICYgMHgwMEZGOworCisJc3dpdGNoICh0eXBlKQorCXsKKwkJY2FzZSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVDoKKwkJCWV2ZW50X3RhYmxlX2xlbiA9IElXX1NZU19FVkVOVF9UWVBFX05VTTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfU1BPT0ZfRVZFTlRfRkxBR19TVEFSVDoKKwkJCWV2ZW50X3RhYmxlX2xlbiA9IElXX1NQT09GX0VWRU5UX1RZUEVfTlVNOworCQkJYnJlYWs7CisKKwkJY2FzZSBJV19GTE9PRF9FVkVOVF9GTEFHX1NUQVJUOgorCQkJZXZlbnRfdGFibGVfbGVuID0gSVdfRkxPT0RfRVZFTlRfVFlQRV9OVU07CisJCQlicmVhazsKKwl9CisKKwlpZiAoZXZlbnRfdGFibGVfbGVuID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFRoZSB0eXBlKCUweDAyeCkgaXMgbm90IHZhbGlkLlxuIiwgX19GVU5DVElPTl9fLCB0eXBlKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXZlbnQgPj0gZXZlbnRfdGFibGVfbGVuKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBUaGUgZXZlbnQoJTB4MDJ4KSBpcyBub3QgdmFsaWQuXG4iLCBfX0ZVTkNUSU9OX18sIGV2ZW50KSk7CisJCXJldHVybjsKKwl9CisKKwkvL0FsbG9jYXRlIG1lbW9yeSBhbmQgY29weSB0aGUgbXNnLgorCWlmKChwQnVmID0ga21hbGxvYyhJV19DVVNUT01fTUFYX0xFTiwgR0ZQX0FUT01JQykpICE9IE5VTEwpCisJeworCQkvL1ByZXBhcmUgdGhlIHBheWxvYWQKKwkJbWVtc2V0KHBCdWYsIDAsIElXX0NVU1RPTV9NQVhfTEVOKTsKKworCQlwQnVmUHRyID0gcEJ1ZjsKKworCQlpZiAocEFkZHIpCisJCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIihSVDI4NjApIFNUQSglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCkgIiwgUFJJTlRfTUFDKHBBZGRyKSk7CisJCWVsc2UgaWYgKEJzc0lkeCA8IE1BWF9NQlNTSURfTlVNKQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIoUlQyODYwKSBCU1MocmElZCkgIiwgQnNzSWR4KTsKKwkJZWxzZQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIoUlQyODYwKSAiKTsKKworCQlpZiAodHlwZSA9PSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVCkKKwkJCXBCdWZQdHIgKz0gc3ByaW50ZihwQnVmUHRyLCAiJXMiLCBwV2lyZWxlc3NTeXNFdmVudFRleHRbZXZlbnRdKTsKKwkJZWxzZSBpZiAodHlwZSA9PSBJV19TUE9PRl9FVkVOVF9GTEFHX1NUQVJUKQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIlcyAoUlNTST0lZCkiLCBwV2lyZWxlc3NTcG9vZkV2ZW50VGV4dFtldmVudF0sIFJzc2kpOworCQllbHNlIGlmICh0eXBlID09IElXX0ZMT09EX0VWRU5UX0ZMQUdfU1RBUlQpCisJCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIiVzIiwgcFdpcmVsZXNzRmxvb2RFdmVudFRleHRbZXZlbnRdKTsKKwkJZWxzZQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIlcyIsICJ1bmtub3duIGV2ZW50Iik7CisKKwkJcEJ1ZlB0cltwQnVmUHRyIC0gcEJ1Zl0gPSAnXDAnOworCQlCdWZMZW4gPSBwQnVmUHRyIC0gcEJ1ZjsKKworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJICAgIHdycXUuZGF0YS5mbGFncyA9IEV2ZW50X2ZsYWc7CisJCXdycXUuZGF0YS5sZW5ndGggPSBCdWZMZW47CisKKwkJLy9zZW5kIHdpcmVsZXNzIGV2ZW50CisJICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgcEJ1Zik7CisKKwkJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyA6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIHBCdWYpKTsKKworCQlrZnJlZShwQnVmKTsKKwl9CisJZWxzZQorCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igd2lyZWxlc3MgZXZlbnQuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKyNlbHNlCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBUaGUgV2lyZWxlc3MgRXh0ZW5zaW9uIE1VU1QgYmUgdjE1IG9yIG5ld2VyLlxuIiwgX19GVU5DVElPTl9fKSk7CisjZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+PSAxNSAqLworfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK3ZvaWQgc2VuZF9tb25pdG9yX3BhY2tldHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaykKK3sKKyAgICBzdHJ1Y3Qgc2tfYnVmZgkqcE9TUGt0OworICAgIHdsYW5fbmdfcHJpc20yX2hlYWRlciAqcGg7CisgICAgaW50IHJhdGVfaW5kZXggPSAwOworICAgIFVTSE9SVCBoZWFkZXJfbGVuID0gMDsKKyAgICBVQ0hBUiB0ZW1wX2hlYWRlcls0MF0gPSB7MH07CisKKyAgICB1X2ludDMyX3QgcmFsaW5rcmF0ZVsyNTZdID0gezIsNCwxMSwyMiwgMTIsMTgsMjQsMzYsNDgsNzIsOTYsICAxMDgsICAgMTA5LCAxMTAsIDExMSwgMTEyLCAxMywgMjYsIDM5LCA1Miw3OCwxMDQsIDExNywgMTMwLCAyNiwgNTIsIDc4LDEwNCwgMTU2LCAyMDgsIDIzNCwgMjYwLCAyNywgNTQsODEsMTA4LDE2MiwgMjE2LCAyNDMsIDI3MCwgLy8gTGFzdCAzOAorCTU0LCAxMDgsIDE2MiwgMjE2LCAzMjQsIDQzMiwgNDg2LCA1NDAsICAxNCwgMjksIDQzLCA1NywgODcsIDExNSwgMTMwLCAxNDQsIDI5LCA1OSw4NywxMTUsIDE3MywgMjMwLDI2MCwgMjg4LCAzMCwgNjAsOTAsMTIwLDE4MCwyNDAsMjcwLDMwMCw2MCwxMjAsMTgwLDI0MCwzNjAsNDgwLDU0MCw2MDAsIDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsCisJMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODB9OworCisKKyAgICBBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworICAgIGlmIChwUnhCbGstPkRhdGFTaXplIDwgMTApCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFNpemUgaXMgdG9vIHNtYWxsISAoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBSeEJsay0+RGF0YVNpemUpKTsKKwkJZ290byBlcnJfZnJlZV9za19idWZmOworICAgIH0KKworICAgIGlmIChwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikgPiBSWF9CVUZGRVJfQUdHUkVTSVpFKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCVkKVxuIiwgX19GVU5DVElPTl9fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKKwkJZ290byBlcnJfZnJlZV9za19idWZmOworICAgIH0KKworICAgIHBPU1BrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKwlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEJTUzApOworICAgIGlmIChwUnhCbGstPnBIZWFkZXItPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkKKyAgICB7CisgICAgICAgIHBSeEJsay0+RGF0YVNpemUgLT0gTEVOR1RIXzgwMl8xMTsKKyAgICAgICAgaWYgKChwUnhCbGstPnBIZWFkZXItPkZDLlRvRHMgPT0gMSkgJiYKKyAgICAgICAgICAgIChwUnhCbGstPnBIZWFkZXItPkZDLkZyRHMgPT0gMSkpCisgICAgICAgICAgICBoZWFkZXJfbGVuID0gTEVOR1RIXzgwMl8xMV9XSVRIX0FERFI0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBoZWFkZXJfbGVuID0gTEVOR1RIXzgwMl8xMTsKKworICAgICAgICAvLyBRT1MKKyAgICAJaWYgKHBSeEJsay0+cEhlYWRlci0+RkMuU3ViVHlwZSAmIDB4MDgpCisgICAgCXsKKyAgICAJICAgIGhlYWRlcl9sZW4gKz0gMjsKKyAgICAJCS8vIERhdGEgc2tpcCBRT1MgY29udG9ybCBmaWVsZAorICAgIAkJcFJ4QmxrLT5EYXRhU2l6ZSAtPTI7CisgICAgCX0KKworICAgIAkvLyBPcmRlciBiaXQ6IEEtUmFsaW5rIG9yIEhUQysKKyAgICAJaWYgKHBSeEJsay0+cEhlYWRlci0+RkMuT3JkZXIpCisgICAgCXsKKyAgICAJICAgIGhlYWRlcl9sZW4gKz0gNDsKKwkJCS8vIERhdGEgc2tpcCBIVEMgY29udG9ybCBmaWVsZAorCQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSA0OworICAgIAl9CisKKyAgICAgICAgLy8gQ29weSBIZWFkZXIKKyAgICAgICAgaWYgKGhlYWRlcl9sZW4gPD0gNDApCisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSh0ZW1wX2hlYWRlciwgcFJ4QmxrLT5wRGF0YSwgaGVhZGVyX2xlbik7CisKKyAgICAgICAgLy8gc2tpcCBIVyBwYWRkaW5nCisgICAgCWlmIChwUnhCbGstPlJ4RC5MMlBBRCkKKyAgICAJICAgIHBSeEJsay0+cERhdGEgKz0gKGhlYWRlcl9sZW4gKyAyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcFJ4QmxrLT5wRGF0YSArPSBoZWFkZXJfbGVuOworICAgIH0gLy9lbmQgaWYKKworCisJaWYgKHBSeEJsay0+RGF0YVNpemUgPCBwT1NQa3QtPmxlbikgeworICAgICAgICBza2JfdHJpbShwT1NQa3QscFJ4QmxrLT5EYXRhU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2tiX3B1dChwT1NQa3QsKHBSeEJsay0+RGF0YVNpemUgLSBwT1NQa3QtPmxlbikpOworICAgIH0gLy9lbmQgaWYKKworICAgIGlmICgocFJ4QmxrLT5wRGF0YSAtIHBPU1BrdC0+ZGF0YSkgPiAwKSB7CisJICAgIHNrYl9wdXQocE9TUGt0LChwUnhCbGstPnBEYXRhIC0gcE9TUGt0LT5kYXRhKSk7CisJICAgIHNrYl9wdWxsKHBPU1BrdCwocFJ4QmxrLT5wRGF0YSAtIHBPU1BrdC0+ZGF0YSkpOworICAgIH0gLy9lbmQgaWYKKworICAgIGlmIChza2JfaGVhZHJvb20ocE9TUGt0KSA8IChzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSsgaGVhZGVyX2xlbikpIHsKKyAgICAgICAgaWYgKHBza2JfZXhwYW5kX2hlYWQocE9TUGt0LCAoc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikgKyBoZWFkZXJfbGVuKSwgMCwgR0ZQX0FUT01JQykpIHsKKwkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogUmVhbGxvY2F0ZSBoZWFkZXIgc2l6ZSBvZiBza19idWZmIGZhaWwhXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCWdvdG8gZXJyX2ZyZWVfc2tfYnVmZjsKKwkgICAgfSAvL2VuZCBpZgorICAgIH0gLy9lbmQgaWYKKworICAgIGlmIChoZWFkZXJfbGVuID4gMCkKKyAgICAgICAgTmRpc01vdmVNZW1vcnkoc2tiX3B1c2gocE9TUGt0LCBoZWFkZXJfbGVuKSwgdGVtcF9oZWFkZXIsIGhlYWRlcl9sZW4pOworCisgICAgcGggPSAod2xhbl9uZ19wcmlzbTJfaGVhZGVyICopIHNrYl9wdXNoKHBPU1BrdCwgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpOworCU5kaXNaZXJvTWVtb3J5KHBoLCBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSk7CisKKyAgICBwaC0+bXNnY29kZQkJICAgID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybTsKKwlwaC0+bXNnbGVuCQkgICAgPSBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKTsKKwlzdHJjcHkocGgtPmRldm5hbWUsIHBBZC0+bmV0X2Rldi0+bmFtZSk7CisKKyAgICBwaC0+aG9zdHRpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ob3N0dGltZTsKKwlwaC0+aG9zdHRpbWUuc3RhdHVzID0gMDsKKwlwaC0+aG9zdHRpbWUubGVuID0gNDsKKwlwaC0+aG9zdHRpbWUuZGF0YSA9IGppZmZpZXM7CisKKwlwaC0+bWFjdGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWU7CisJcGgtPm1hY3RpbWUuc3RhdHVzID0gMDsKKwlwaC0+bWFjdGltZS5sZW4gPSAwOworCXBoLT5tYWN0aW1lLmRhdGEgPSAwOworCisgICAgcGgtPmlzdHguZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9pc3R4OworCXBoLT5pc3R4LnN0YXR1cyA9IDA7CisJcGgtPmlzdHgubGVuID0gMDsKKwlwaC0+aXN0eC5kYXRhID0gMDsKKworICAgIHBoLT5jaGFubmVsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fY2hhbm5lbDsKKwlwaC0+Y2hhbm5lbC5zdGF0dXMgPSAwOworCXBoLT5jaGFubmVsLmxlbiA9IDQ7CisKKyAgICBwaC0+Y2hhbm5lbC5kYXRhID0gKHVfaW50MzJfdClwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCisgICAgcGgtPnJzc2kuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpOworCXBoLT5yc3NpLnN0YXR1cyA9IDA7CisJcGgtPnJzc2kubGVuID0gNDsKKyAgICBwaC0+cnNzaS5kYXRhID0gKHVfaW50MzJfdClSVE1QTWF4UnNzaShwQWQsIENvbnZlcnRUb1Jzc2kocEFkLCBwUnhCbGstPnBSeFdJLT5SU1NJMCwgUlNTSV8wKSwgQ29udmVydFRvUnNzaShwQWQsIHBSeEJsay0+cFJ4V0ktPlJTU0kxLCBSU1NJXzEpLCBDb252ZXJ0VG9Sc3NpKHBBZCwgcFJ4QmxrLT5wUnhXSS0+UlNTSTIsIFJTU0lfMikpOzsKKworCXBoLT5zaWduYWwuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWw7CisJcGgtPnNpZ25hbC5zdGF0dXMgPSAwOworCXBoLT5zaWduYWwubGVuID0gNDsKKwlwaC0+c2lnbmFsLmRhdGEgPSAwOyAvL3Jzc2kgKyBub2lzZTsKKworCXBoLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOworCXBoLT5ub2lzZS5zdGF0dXMgPSAwOworCXBoLT5ub2lzZS5sZW4gPSA0OworCXBoLT5ub2lzZS5kYXRhID0gMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIGlmIChwUnhCbGstPnBSeFdJLT5QSFlNT0RFID49IE1PREVfSFRNSVgpCisgICAgeworICAgIAlyYXRlX2luZGV4ID0gMTYgKyAoKFVDSEFSKXBSeEJsay0+cFJ4V0ktPkJXICoxNikgKyAoKFVDSEFSKXBSeEJsay0+cFJ4V0ktPlNob3J0R0kgKjMyKSArICgoVUNIQVIpcFJ4QmxrLT5wUnhXSS0+TUNTKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCWlmIChwUnhCbGstPnBSeFdJLT5QSFlNT0RFID09IE1PREVfT0ZETSkKKyAgICAJcmF0ZV9pbmRleCA9IChVQ0hBUikocFJ4QmxrLT5wUnhXSS0+TUNTKSArIDQ7CisgICAgZWxzZQorICAgIAlyYXRlX2luZGV4ID0gKFVDSEFSKShwUnhCbGstPnBSeFdJLT5NQ1MpOworICAgIGlmIChyYXRlX2luZGV4IDwgMCkKKyAgICAgICAgcmF0ZV9pbmRleCA9IDA7CisgICAgaWYgKHJhdGVfaW5kZXggPiAyNTUpCisgICAgICAgIHJhdGVfaW5kZXggPSAyNTU7CisKKwlwaC0+cmF0ZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGU7CisJcGgtPnJhdGUuc3RhdHVzID0gMDsKKwlwaC0+cmF0ZS5sZW4gPSA0OworICAgIHBoLT5yYXRlLmRhdGEgPSByYWxpbmtyYXRlW3JhdGVfaW5kZXhdOworCisJcGgtPmZybWxlbi5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2ZybWxlbjsKKyAgICBwaC0+ZnJtbGVuLnN0YXR1cyA9IDA7CisJcGgtPmZybWxlbi5sZW4gPSA0OworCXBoLT5mcm1sZW4uZGF0YQk9ICh1X2ludDMyX3QpcFJ4QmxrLT5EYXRhU2l6ZTsKKworCisgICAgcE9TUGt0LT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisgICAgcE9TUGt0LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBPU1BrdCwgcE9TUGt0LT5kZXYpOworICAgIHBPU1BrdC0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKyAgICBuZXRpZl9yeChwT1NQa3QpOworCisgICAgcmV0dXJuOworCitlcnJfZnJlZV9za19idWZmOgorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJcmV0dXJuOworCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwordm9pZCBydG1wX29zX3RocmVhZF9pbml0KFBVQ0hBUiBwVGhyZWFkTmFtZSwgUFZPSUQgcE5vdGlmeSkKK3sKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlkYWVtb25pemUocFRocmVhZE5hbWUgLyoiJXMiLHBBZC0+bmV0X2Rldi0+bmFtZSovKTsKKworCWFsbG93X3NpZ25hbChTSUdURVJNKTsKKwlhbGxvd19zaWduYWwoU0lHS0lMTCk7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYWVtb25pemUoKTsKKwlyZXBhcmVudF90b19pbml0KCk7CisJc3RyY3B5KGN1cnJlbnQtPmNvbW0sIHBUaHJlYWROYW1lKTsKKworCXNpZ2luaXRzZXRpbnYoJmN1cnJlbnQtPmJsb2NrZWQsIHNpZ21hc2soU0lHVEVSTSkgfCBzaWdtYXNrKFNJR0tJTEwpKTsKKworCS8qIEFsbG93IGludGVyY2VwdGlvbiBvZiBTSUdLSUxMIG9ubHkKKwkgKiBEb24ndCBhbGxvdyBvdGhlciBzaWduYWxzIHRvIGludGVycnVwdCB0aGUgdHJhbnNtaXNzaW9uICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIyKQorCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdtYXNrX2xvY2ssIGZsYWdzKTsKKwlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCXJlY2FsY19zaWdwZW5kaW5nKGN1cnJlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ21hc2tfbG9jaywgZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8qIHNpZ25hbCB0aGF0IHdlJ3ZlIHN0YXJ0ZWQgdGhlIHRocmVhZCAqLworCWNvbXBsZXRlKHBOb3RpZnkpOworCit9CisKK3ZvaWQgUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCXsKKwkJaWYgKHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKQorCQl7CisJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TVEFfTElOS1VQX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TVEFfTElOS0RPV05fRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2xpbnV4LmgKQEAgLTAsMCArMSw4ODcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgUHJvZ3JhbTogICAgcnRfbGludXguYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQ3JlYXRlZDogICAgNC8yMS8yMDA2IDE6MTc6MzggUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQXV0aG9yOiAgICAgV3UgWGktS3VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQ29tbWVudHM6ICAgYGRlc2NyaXB0aW9uYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEhpc3Rvcnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFJldmlzaW9uIDEuMSA0LzIxLzIwMDYgMToxNzozOCBQTSAgeHNpa3VuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEluaXRpYWwgcmV2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInJ0bXBfdHlwZS5oIgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisvLyBsb2FkIGZpcm13YXJlCisjZGVmaW5lIF9fS0VSTkVMX1NZU0NBTExTX18KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisKKyNkZWZpbmUgTUVNX0FMTE9DX0ZMQUcgICAgICAoR0ZQX0FUT01JQykgLy8oR0ZQX0RNQSB8IEdGUF9BVE9NSUMpCisKKyNpZm5kZWYgSUZOQU1TSVoKKyNkZWZpbmUgSUZOQU1TSVogMTYKKyNlbmRpZgorCisvLyNkZWZpbmUgQ09ORklHX0NLSVBfU1VQUE9SVAorCisjdW5kZWYgX19pbmxpbmUKKyNkZWZpbmUgX19pbmxpbmUJICAgc3RhdGljIGlubGluZQorCit0eXBlZGVmIGludCAoKkhBUkRfU1RBUlRfWE1JVF9GVU5DKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CisKKy8vIGFkZCBieSBrYXRoeQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgU1RBX1BST0ZJTEVfUEFUSAkJCSIvZXRjL1dpcmVsZXNzL1JUMjg3MFNUQS9SVDI4NzBTVEEuZGF0IgorI2RlZmluZSBTVEFfUlQyODcwX0lNQUdFX0ZJTEVfTkFNRSAgIi9ldGMvV2lyZWxlc3MvUlQyODcwU1RBL3J0Mjg3MC5iaW4iCisjZGVmaW5lIFNUQV9OSUNfREVWSUNFX05BTUUJCQkiUlQyODcwU1RBIgorI2RlZmluZSBTVEFfRFJJVkVSX1ZFUlNJT04JCQkiMi4wLjEuMCIKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKyNkZWZpbmUgQ0FSRF9JTkZPX1BBVEgJCQkiL2V0Yy9XaXJlbGVzcy9SVDI4NzBTVEEvUlQyODcwU1RBQ2FyZC5kYXQiCisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCisjZGVmaW5lIFJUTVBfVElNRV9BRlRFUihhLGIpCQlcCisJKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZylhKSAmJiBcCisJIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZyliKSAmJiBcCisJICgobG9uZykoYikgLSAobG9uZykoYSkgPCAwKSkKKworI2RlZmluZSBSVE1QX1RJTUVfQUZURVJfRVEoYSxiKQlcCisJKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZylhKSAmJiBcCisJIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZyliKSAmJiBcCisJICgobG9uZykoYSkgLSAobG9uZykoYikgPj0gMCkpCisjZGVmaW5lIFJUTVBfVElNRV9CRUZPUkUoYSxiKQlSVE1QX1RJTUVfQUZURVJfRVEoYixhKQorI2Vsc2UKKyNkZWZpbmUgUlRNUF9USU1FX0FGVEVSKGEsYikgdGltZV9hZnRlcihhLCBiKQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjZGVmaW5lIFJUX01PRF9JTkNfVVNFX0NPVU5UKCkgXAorCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSBcCisJeyBcCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBjYW5ub3QgcmVzZXJ2ZSBtb2R1bGVcbiIsIF9fRlVOQ1RJT05fXykpOyBcCisJCXJldHVybiAtMTsgXAorCX0KKworI2RlZmluZSBSVF9NT0RfREVDX1VTRV9DT1VOVCgpIG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworI2Vsc2UKKyNkZWZpbmUgUlRfTU9EX0lOQ19VU0VfQ09VTlQoKQlNT0RfSU5DX1VTRV9DT1VOVDsKKyNkZWZpbmUgUlRfTU9EX0RFQ19VU0VfQ09VTlQoKSBNT0RfREVDX1VTRV9DT1VOVDsKKyNlbmRpZgorCisjZGVmaW5lIE9TX0haCQkJSFoKKworI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgorCisjZGVmaW5lIElOCisjZGVmaW5lIE9VVAorCisjZGVmaW5lIE5ESVNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQKKyNkZWZpbmUgTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCQkJCTB4MDIKKyNkZWZpbmUgTkRJU19TVEFUVVNfUkVTT1VSQ0VTICAgICAgICAgICAgICAgICAgIDB4MDMKKworI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfQUlECQkJMHgwMAkJLy8weDAwfjB4M2YKKyNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX01CU1NJRAkJMHgwMAkJLy8weDAwLDB4MTAsMHgyMCwweDMwCisjZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMJCQkweDEwCQkvLzB4NDAsMHg1MCwweDYwLDB4NzAKKyNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX0FQQ0xJCQkweDIwCisjZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9NRVNICQkJMHgzMAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfRExTCQkJMHg0MAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRAkJMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJMQorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJMgorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJMworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitzdHJ1Y3Qgb3NfbG9jayAgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgbG9uZyAgCWZsYWdzOworfTsKKworCitzdHJ1Y3Qgb3NfY29va2llIHsKKworI2lmZGVmIFJUMjg3MAorCXN0cnVjdCB1c2JfZGV2aWNlCQkqcFVzYl9EZXY7CisKKwlzdHJ1Y3QgcGlkICoJCU1MTUVUaHJfcGlkOworCXN0cnVjdCBwaWQgKgkJUlRVU0JDbWRUaHJfcGlkOworCXN0cnVjdCBwaWQgKgkJVGltZXJRVGhyX3BpZDsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJcnhfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJbWdtdF9kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJYWMwX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlhYzFfZG1hX2RvbmVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWFjMl9kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJYWMzX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IAloY2NhX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRidHRfdGFzazsKKyNpZmRlZiBSVDI4NzAKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlydHNfZnJhbWVfY29tcGxldGVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2s7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworCXVuc2lnbmVkIGxvbmcJCQlhcGRfcGlkOyAvLzgwMi4xeCBkYWVtb24gcGlkCisJSU5UCQkJCQkJaW9jdGxfaWZfdHlwZTsKKwlJTlQgCQkJCQlpb2N0bF9pZjsKK307CisKK3R5cGVkZWYgc3RydWN0IF9WSVJUVUFMX0FEQVBURVIKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKlJ0bXBEZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpWaXJ0dWFsRGV2OworfSBWSVJUVUFMX0FEQVBURVIsIFBWSVJUVUFMX0FEQVBURVI7CisKKyN1bmRlZiAgQVNTRVJUCisjZGVmaW5lIEFTU0VSVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghKHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyBfX0ZJTEVfXyAiOiVkIGFzc2VydCAiICN4ICJmYWlsZWRcbiIsIF9fTElORV9fKTsgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK3R5cGVkZWYgc3RydWN0IG9zX2Nvb2tpZQkqIFBPU19DT09LSUU7Cit0eXBlZGVmIHN0cnVjdCBwY2lfZGV2IAkJKiBQUENJX0RFVjsKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UJKiBQTkVUX0RFVjsKK3R5cGVkZWYgdm9pZAkJCQkqIFBORElTX1BBQ0tFVDsKK3R5cGVkZWYgY2hhcgkJCQlORElTX1BBQ0tFVDsKK3R5cGVkZWYgUE5ESVNfUEFDS0VUCQkqIFBQTkRJU19QQUNLRVQ7Cit0eXBlZGVmCWRtYV9hZGRyX3QJCQlORElTX1BIWVNJQ0FMX0FERFJFU1M7Cit0eXBlZGVmCWRtYV9hZGRyX3QJCQkqIFBORElTX1BIWVNJQ0FMX0FERFJFU1M7CisvL3R5cGVkZWYgc3RydWN0IHRpbWVyX2xpc3QJUkFMSU5LX1RJTUVSX1NUUlVDVDsKKy8vdHlwZWRlZiBzdHJ1Y3QgdGltZXJfbGlzdAkqIFBSQUxJTktfVElNRVJfU1RSVUNUOworLy90eXBlZGVmIHN0cnVjdCBvc19sb2NrCQlORElTX1NQSU5fTE9DSzsKK3R5cGVkZWYgc3BpbmxvY2tfdAkJCU5ESVNfU1BJTl9MT0NLOwordHlwZWRlZiBzdHJ1Y3QgdGltZXJfbGlzdAlORElTX01JTklQT1JUX1RJTUVSOwordHlwZWRlZiB2b2lkCQkJCSogTkRJU19IQU5ETEU7Cit0eXBlZGVmIGNoYXIgCQkJCSogUE5ESVNfQlVGRkVSOworCisKKwordm9pZCBoZXhfZHVtcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnBTcmNCdWZWQSwgdW5zaWduZWQgaW50IFNyY0J1Zkxlbik7CisKK2RtYV9hZGRyX3QgbGludXhfcGNpX21hcF9zaW5nbGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgc2RfaWR4LCBpbnQgZGlyZWN0aW9uKTsKK3ZvaWQgbGludXhfcGNpX3VubWFwX3NpbmdsZSh2b2lkICpoYW5kbGUsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNT1ZFIFRPIHJ0bXAuaCA/CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBQS1RTUkNfTkRJUyAgICAgICAgICAgICAweDdmCisjZGVmaW5lIFBLVFNSQ19EUklWRVIgICAgICAgICAgIDB4MGYKKyNkZWZpbmUgUFJJTlRfTUFDKGFkZHIpCVwKKwlhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdCisKKworI2RlZmluZSBSVDI4NjBfUENJX0RFVklDRV9JRAkJMHgwNjAxCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgUENJX01BUF9TSU5HTEUoX2hhbmRsZSwgX3B0ciwgX3NpemUsIF9kaXIpIChVTE9ORykwCisKKyNkZWZpbmUgUENJX1VOTUFQX1NJTkdMRShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX2RpcikKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisjZGVmaW5lIEJFQUNPTl9GUkFNRV9ETUFfQ0FDSEVfV0JBQ0soX3B0ciwgX3NpemUpCVwKKwlkbWFfY2FjaGVfd2JhY2soX3B0ciwgX3NpemUpCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworI2RlZmluZSBOZGlzTUluZGljYXRlU3RhdHVzKF93LCBfeCwgX3ksIF96KQorCisKK3R5cGVkZWYgc3RydWN0IHRpbWVyX2xpc3QJUlRNUF9PU19USU1FUjsKKworI2lmZGVmIFJUMjg3MAorLyogLS0tLS0tLS0tLS0tLS0tLS0gVGltZXIgUmVsYXRlZCBNQVJDTyAtLS0tLS0tLS0tLS0tLS0qLworLy8gSW4gUlQyODcwLCB3ZSBoYXZlIGEgbG90IG9mIHRpbWVyIGZ1bmN0aW9ucyBhbmQgd2lsbCByZWFkL3dyaXRlIHJlZ2lzdGVyLCBpdCdzCisvLwlub3QgYWxsb3dlZCBpbiBMaW51eCBVU0Igc3ViLXN5c3RlbSB0byBkbyBpdCAoIGJlY2F1c2Ugb2Ygc2xlZXAgaXNzdWUgd2hlbiBzdWJtaXQKKy8vICB0byBjdHJsIHBpcGUpLiBTbyB3ZSBuZWVkIGEgd3JhcHBlciBmdW5jdGlvbiB0byB0YWtlIGNhcmUgaXQuCisKK3R5cGVkZWYgVk9JRCAoKlJUMjg3MF9USU1FUl9IQU5ETEUpKAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMSwKKwlJTiAgUFZPSUQgICBGdW5jdGlvbkNvbnRleHQsCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMyLAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwordHlwZWRlZiBzdHJ1Y3QgIF9SQUxJTktfVElNRVJfU1RSVUNUICAgIHsKKyAgICBSVE1QX09TX1RJTUVSCQlUaW1lck9iajsgICAgICAgLy8gTmRpcyBUaW1lciBvYmplY3QKKwlCT09MRUFOCQkJCVZhbGlkOwkJCS8vIFNldCB0byBUcnVlIHdoZW4gY2FsbCBSVE1QSW5pdFRpbWVyCisgICAgQk9PTEVBTiAgICAgICAgICAgICBTdGF0ZTsgICAgICAgICAgLy8gVHJ1ZSBpZiB0aW1lciBjYW5jZWxsZWQKKyAgICBCT09MRUFOCSAgICAgIAkJUGVyaW9kaWNUeXBlOwkvLyBUcnVlIGlmIHRpbWVyIGlzIHBlcmlvZGljIHRpbWVyCisgICAgQk9PTEVBTiAgICAgICAgICAgICBSZXBlYXQ7ICAgICAgICAgLy8gVHJ1ZSBpZiBwZXJpb2RpYyB0aW1lcgorICAgIFVMT05HICAgICAgICAgICAgICAgVGltZXJWYWx1ZTsgICAgIC8vIFRpbWVyIHZhbHVlIGluIG1pbGxpc2Vjb25kcworCVVMT05HCQkJCWNvb2tpZTsJCQkvLyBvcyBzcGVjaWZpYyBvYmplY3QKKyNpZmRlZiBSVDI4NzAKKwlSVDI4NzBfVElNRVJfSEFORExFCWhhbmRsZTsKKwl2b2lkCQkJCSpwQWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCit9ICAgUkFMSU5LX1RJTUVSX1NUUlVDVCwgKlBSQUxJTktfVElNRVJfU1RSVUNUOworCisKKyNpZmRlZiBSVDI4NzAKKwordHlwZWRlZiBlbnVtIF9SVDI4NzBfS0VSTkVMX1RIUkVBRF9TVEFUVVNfCit7CisJUlQyODcwX1RIUkVBRF9VTktOT1dOID0gMCwKKwlSVDI4NzBfVEhSRUFEX0lOSVRFRCA9IDEsCisJUlQyODcwX1RIUkVBRF9SVU5OSU5HID0gMiwKKwlSVDI4NzBfVEhSRUFEX1NUT1BFRCA9IDQsCit9UlQyODcwX0tFUk5FTF9USFJFQURfU1RBVFVTOworCisjZGVmaW5lIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVAkJKFJUMjg3MF9USFJFQURfSU5JVEVEIHxSVDI4NzBfVEhSRUFEX1JVTk5JTkcpCisKK3R5cGVkZWYgc3RydWN0IF9SVDI4NzBfVElNRVJfRU5UUllfCit7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAJCQkqcFJhVGltZXI7CisJc3RydWN0IF9SVDI4NzBfVElNRVJfRU5UUllfIAkqcE5leHQ7Cit9UlQyODcwX1RJTUVSX0VOVFJZOworCisKKyNkZWZpbmUgVElNRVJfUVVFVUVfU0laRV9NQVgJMTI4Cit0eXBlZGVmIHN0cnVjdCBfUlQyODcwX1RJTUVSX1FVRVVFXworeworCXVuc2lnbmVkIGludAkJc3RhdHVzOworCS8vd2FpdF9xdWV1ZV9oZWFkX3QgCXRpbWVyV2FpdFE7CisJLy9hdG9taWNfdAkJCWNvdW50OworCVVDSEFSCQkJCSpwVGltZXJRUG9sbDsKKwlSVDI4NzBfVElNRVJfRU5UUlkJKnBRUG9sbEZyZWVMaXN0OworCVJUMjg3MF9USU1FUl9FTlRSWSAJKnBRSGVhZDsKKwlSVDI4NzBfVElNRVJfRU5UUlkgCSpwUVRhaWw7Cit9UlQyODcwX1RJTUVSX1FVRVVFOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8vI2RlZmluZSBEQkcJMQorCisvLworLy8gIE1BQ1JPIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKy8vCisKKyNpZmRlZiBEQkcKK2V4dGVybiBVTE9ORyAgICBSVERlYnVnTGV2ZWw7CisKKyNkZWZpbmUgREJHUFJJTlRfUkFXKExldmVsLCBGbXQpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoTGV2ZWwgPD0gUlREZWJ1Z0xldmVsKSAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRrIEZtdDsgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREJHUFJJTlQoTGV2ZWwsIEZtdCkgICAgREJHUFJJTlRfUkFXKExldmVsLCBGbXQpCisKKworI2RlZmluZSBEQkdQUklOVF9FUlIoRm10KSAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaW50aygiRVJST1IhISEgIik7ICAgICAgICAgIFwKKyAgICBwcmludGsgRm10OyAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBEQkdQUklOVF9TKFN0YXR1cywgRm10KQkJXAorewkJCQkJCQkJCVwKKwlwcmludGsgRm10OwkJCQkJXAorfQorCisKKyNlbHNlCisjZGVmaW5lIERCR1BSSU5UKExldmVsLCBGbXQpCisjZGVmaW5lIERCR1BSSU5UX1JBVyhMZXZlbCwgRm10KQorI2RlZmluZSBEQkdQUklOVF9TKFN0YXR1cywgRm10KQorI2RlZmluZSBEQkdQUklOVF9FUlIoRm10KQorI2VuZGlmCisKKworLy8KKy8vICBzcGluX2xvY2sgZW5oYW5jZWQgZm9yIE5lc3RlZCBzcGluIGxvY2sKKy8vCisjZGVmaW5lIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKF9fbG9jaykgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5fbG9ja19pbml0KChzcGlubG9ja190ICopKF9fbG9jaykpOyAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBOZGlzRnJlZVNwaW5Mb2NrKGxvY2spICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBSVE1QX1NFTV9MT0NLKF9fbG9jaykJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJCQlcCit9CisKKyNkZWZpbmUgUlRNUF9TRU1fVU5MT0NLKF9fbG9jaykJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJc3Bpbl91bmxvY2tfYmgoKHNwaW5sb2NrX3QgKikoX19sb2NrKSk7CQkJCVwKK30KKworLy8gc2FtcGxlLCB1c2Ugc2VtYXBob3JlIGxvY2sgdG8gcmVwbGFjZSBJUlEgbG9jaywgMjAwNy8xMS8xNQorI2RlZmluZSBSVE1QX0lSUV9MT0NLKF9fbG9jaywgX19pcnFmbGFncykJCQlcCit7CQkJCQkJCQkJCQkJCVwKKwlfX2lycWZsYWdzID0gMDsJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJCVwKKwlwQWQtPmlycV9kaXNhYmxlZCB8PSAxOyBcCit9CisKKyNkZWZpbmUgUlRNUF9JUlFfVU5MT0NLKF9fbG9jaywgX19pcnFmbGFnKQkJCVwKK3sJCQkJCQkJCQkJCQkJXAorCXBBZC0+aXJxX2Rpc2FibGVkICY9IDA7IFwKKwlzcGluX3VubG9ja19iaCgoc3BpbmxvY2tfdCAqKShfX2xvY2spKTsJCQlcCit9CisKKyNkZWZpbmUgUlRNUF9JTlRfTE9DSyhfX2xvY2ssIF9faXJxZmxhZ3MpCQkJXAorewkJCQkJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoKHNwaW5sb2NrX3QgKilfX2xvY2ssIF9faXJxZmxhZ3MpOwlcCit9CisKKyNkZWZpbmUgUlRNUF9JTlRfVU5MT0NLKF9fbG9jaywgX19pcnFmbGFnKQkJCVwKK3sJCQkJCQkJCQkJCQkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoKHNwaW5sb2NrX3QgKikoX19sb2NrKSwgKCh1bnNpZ25lZCBsb25nKV9faXJxZmxhZykpOwlcCit9CisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgUlRNUF9JT19SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCQlcCisJUlRVU0JSZWFkTUFDUmVnaXN0ZXIoX0EsIF9SLCBfcFYpCisKKyNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFJUTVBfSU9fV1JJVEUzMihfQSwgX1IsIF9WKQkJCQkJCQkJXAorCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihfQSwgX1IsIF9WKQorCisKKyNkZWZpbmUgUlRNUF9JT19XUklURTgoX0EsIF9SLCBfVikJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJXAorCVVTSE9SVAlfVmFsID0gX1Y7CQkJCQkJCQkJCQlcCisJUlRVU0JTaW5nbGVXcml0ZShfQSwgX1IsIF9WYWwpOwkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgUlRNUF9JT19XUklURTE2KF9BLCBfUiwgX1YpCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCVwKKwlSVFVTQlNpbmdsZVdyaXRlKF9BLCBfUiwgX1YpOwkJCQkJCQkJXAorfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZuZGVmIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSBcCitkbyB7IFwKKyAgICAgICAgd2FpdF9xdWV1ZV90IF9fd2FpdDsgXAorICAgICAgICBpbml0X3dhaXRxdWV1ZV9lbnRyeSgmX193YWl0LCBjdXJyZW50KTsgXAorICAgICAgICBhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOyBcCisgICAgICAgIGZvciAoOzspIHsgXAorICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7IFwKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICAgICAgICAgIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2NoZWR1bGVfdGltZW91dChyZXQpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IFwKKyAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7IFwKKyAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7IFwKKyAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KSBcCisoeyBcCisgICAgICAgIGxvbmcgX19yZXQgPSB0aW1lb3V0OyBcCisgICAgICAgIGlmICghKGNvbmRpdGlvbikpIFwKKyAgICAgICAgICAgICAgICBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIF9fcmV0KTsgXAorICAgICAgICBfX3JldDsgXAorfSkKKyNlbmRpZgorI2RlZmluZSBPTkVfVElDSyAxCisjZGVmaW5lIE9TX1dBSVQoX3RpbWUpIFwKK3sJaW50IF9pOyBcCisJbG9uZyBfbG9vcCA9ICgoX3RpbWUpLygxMDAwL09TX0haKSkgPiAwID8gKChfdGltZSkvKDEwMDAvT1NfSFopKSA6IDE7XAorCXdhaXRfcXVldWVfaGVhZF90IF93YWl0OyBcCisJaW5pdF93YWl0cXVldWVfaGVhZCgmX3dhaXQpOyBcCisJZm9yIChfaT0wOyBfaTwoX2xvb3ApOyBfaSsrKSBcCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KF93YWl0LCAwLCBPTkVfVElDSyk7IH0KKworCisvKiBNb2RpZmllZCBieSBXdSBYaS1LdW4gNC8yMS8yMDA2ICovCit0eXBlZGVmIHZvaWQgKCpUSU1FUl9GVU5DVElPTikodW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgQ09QWV9NQUNfQUREUihBZGRyMSwgQWRkcjIpICAgICAgICAgICAgIG1lbWNweSgoQWRkcjEpLCAoQWRkcjIpLCBNQUNfQUREUl9MRU4pCisKKyNkZWZpbmUgTWxtZUFsbG9jYXRlTWVtb3J5KF9wQWQsIF9wcFZBKSBvc19hbGxvY19tZW0oX3BBZCwgX3BwVkEsIE1HTVRfRE1BX0JVRkZFUl9TSVpFKQorI2RlZmluZSBNbG1lRnJlZU1lbW9yeShfcEFkLCBfcFZBKSAgICAgb3NfZnJlZV9tZW0oX3BBZCwgX3BWQSkKKworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCQkJCQkJCQkJCQlcCit2b2lkIGxpbnV4XyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQkJCQkJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJUFJBTElOS19USU1FUl9TVFJVQ1QJX3BUaW1lciA9IChQUkFMSU5LX1RJTUVSX1NUUlVDVClkYXRhOwkJCQkJXAorCVJUMjg3MF9USU1FUl9FTlRSWQkJKl9wUU5vZGU7CQkJCQkJCQkJCQkJXAorCVJUTVBfQURBUFRFUgkJCSpfcEFkOwkJCQkJCQkJCQkJCQlcCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwlfcFRpbWVyLT5oYW5kbGUgPSBfZnVuYzsJCQkJCQkJCQkJCQkJCQlcCisJX3BBZCA9IChSVE1QX0FEQVBURVIgKilfcFRpbWVyLT5wQWQ7CQkJCQkJCQkJCQkJXAorCV9wUU5vZGUgPSBSVDI4NzBfVGltZXJRX0luc2VydChfcEFkLCBfcFRpbWVyKTsgCQkJCQkJCQkJXAorCWlmICgoX3BRTm9kZSA9PSBOVUxMKSAmJiAoX3BBZC0+VGltZXJRLnN0YXR1cyAmIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVCkpCVwKKwkJUlRNUF9PU19BZGRfVGltZXIoJl9wVGltZXItPlRpbWVyT2JqLCBIWik7ICAgICAgICAgICAgICAgCQkJCQlcCit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworI2RlZmluZSBERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCVwKK3ZvaWQgbGludXhfIyNfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCisKKyNkZWZpbmUgR0VUX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCQlcCisJCWxpbnV4XyMjX2Z1bmMKKworREVDTEFSRV9USU1FUl9GVU5DVElPTihNbG1lUGVyaW9kaWNFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oTWxtZVJzc2lSZXBvcnRFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXNpY1J4QW50RXZhbFRpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihBUFNEUGVyaW9kaWNFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXNpY1JmVHVuaW5nRXhlYyk7CisjaWZkZWYgUlQyODcwCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblVwZGF0ZUV4ZWMpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFNjYW5UaW1lb3V0KTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXV0aFRpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihSZWFzc29jVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKERpc2Fzc29jVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKExpbmtEb3duRXhlYyk7CisjaWZkZWYgTEVBUF9TVVBQT1JUCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKExlYXBBdXRoVGltZW91dCk7CisjZW5kaWYKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oUHNQb2xsV2FrZUV4ZWMpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihSYWRpb09uRXhlYyk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oRGxzVGltZW91dEFjdGlvbik7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyN1bmRlZiBBUF9XU0NfSU5DTFVERUQKKyN1bmRlZiBTVEFfV1NDX0lOQ0xVREVECisjdW5kZWYgV1NDX0lOQ0xVREVECisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWYgZGVmaW5lZChBUF9XU0NfSU5DTFVERUQpIHx8IGRlZmluZWQoU1RBX1dTQ19JTkNMVURFRCkKKyNkZWZpbmUgV1NDX0lOQ0xVREVECisjZW5kaWYKKworCisKK3ZvaWQgUlRNUF9HZXRDdXJyZW50U3lzdGVtVGltZShMQVJHRV9JTlRFR0VSICp0aW1lKTsKKworCisvKgorICogcGFja2V0IGhlbHBlcgorICogCS0gY29udmVydCBpbnRlcm5hbCBydCBwYWNrZXQgdG8gb3MgcGFja2V0IG9yCisgKiAgICAgICAgICAgICBvcyBwYWNrZXQgdG8gcnQgcGFja2V0CisgKi8KKyNkZWZpbmUgUlRQS1RfVE9fT1NQS1QoX3ApCQkoKHN0cnVjdCBza19idWZmICopKF9wKSkKKyNkZWZpbmUgT1NQS1RfVE9fUlRQS1QoX3ApCQkoKFBORElTX1BBQ0tFVCkoX3ApKQorCisjZGVmaW5lIEdFVF9PU19QS1RfREFUQVBUUihfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+ZGF0YSkKKworI2RlZmluZSBHRVRfT1NfUEtUX0xFTihfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bGVuKQorCisjZGVmaW5lIEdFVF9PU19QS1RfREFUQVRBSUwoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPnRhaWwpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9IRUFEKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5oZWFkKQorCisjZGVmaW5lIEdFVF9PU19QS1RfRU5EKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5lbmQpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9ORVRERVYoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmRldikKKworI2RlZmluZSBHRVRfT1NfUEtUX1RZUEUoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCkpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9ORVhUKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5uZXh0KQorCisKKyNkZWZpbmUgT1NfTlRPSFMoX1ZhbCkgXAorCQkobnRvaHMoX1ZhbCkpCisjZGVmaW5lIE9TX0hUT05TKF9WYWwpIFwKKwkJKGh0b25zKF9WYWwpKQorI2RlZmluZSBPU19OVE9ITChfVmFsKSBcCisJCShudG9obChfVmFsKSkKKyNkZWZpbmUgT1NfSFRPTkwoX1ZhbCkgXAorCQkoaHRvbmwoX1ZhbCkpCisKKy8qIHN0YXRpc3RpY3MgY291bnRlciAqLworI2RlZmluZSBTVEFUU19JTkNfUlhfUEFDS0VUUyhfcEFkLCBfZGV2KQorI2RlZmluZSBTVEFUU19JTkNfVFhfUEFDS0VUUyhfcEFkLCBfZGV2KQorCisjZGVmaW5lIFNUQVRTX0lOQ19SWF9CWVRFU1MoX3BBZCwgX2RldiwgbGVuKQorI2RlZmluZSBTVEFUU19JTkNfVFhfQllURVNTKF9wQWQsIF9kZXYsIGxlbikKKworI2RlZmluZSBTVEFUU19JTkNfUlhfRVJST1JTKF9wQWQsIF9kZXYpCisjZGVmaW5lIFNUQVRTX0lOQ19UWF9FUlJPUlMoX3BBZCwgX2RldikKKworI2RlZmluZSBTVEFUU19JTkNfUlhfRFJPUFBFRChfcEFkLCBfZGV2KQorI2RlZmluZSBTVEFUU19JTkNfVFhfRFJPUFBFRChfcEFkLCBfZGV2KQorCisKKyNkZWZpbmUgQ0JfT0ZGICAxMAorCisKKy8vICAgY2hlY2sgRERLIE5ESVNfUEFDS0VUIGRhdGEgc3RydWN0dXJlIGFuZCBmaW5kIG91dCBvbmx5IE1pbmlwb3J0UmVzZXJ2ZWRFeFswLi43XSBjYW4gYmUgdXNlZCBieSBvdXIgZHJpdmVyIHdpdGhvdXQKKy8vICAgYW1iaWd1aXR5LiBGaWVsZHMgYWZ0ZXIgcFBhY2tldC0+TWluaXBvcnRSZXNlcnZlZEV4WzhdIG1heSBiZSB1c2VkIGJ5IG90aGVyIHdyYXBwZXIgbGF5ZXIgdGh1cyBjcmFzaGVzIHRoZSBkcml2ZXIKKy8vCisvLyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX01SKF9wKQkJCShSVFBLVF9UT19PU1BLVChfcCkpCisKKy8vIFVzZXIgUHJpb3JpdHkKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1VQKF9wLCBfcHJpbykJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMF0gPSBfcHJpbykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1VQKF9wKQkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzBdKQorCisvLyBGcmFnbWVudCAjCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9GUkFHTUVOVFMoX3AsIF9udW0pCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMV0gPSBfbnVtKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfRlJBR01FTlRTKF9wKQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxXSkKKworLy8gMHgwIH4weDdmOiBUWCB0byBBUCdzIG93biBCU1Mgd2hpY2ggaGFzIHRoZSBzcGVjaWZpZWQgQUlELiBpZiBBSUQ+MTI3LCBzZXQgYml0IDcgaW4gUlRNUF9TRVRfUEFDS0VUX0VNQUNUQUIgdG9vLgorLy8odGhpcyB2YWx1ZSBhbHNvIGFzIE1BQyhvbi1jaGlwIFdDSUQpIHRhYmxlIGluZGV4KQorLy8gMHg4MH4weGZmOiBUWCB0byBhIFdEUyBsaW5rLiBiMH42OiBXRFMgaW5kZXgKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1dDSUQoX3AsIF93ZHNpZHgpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMl0gPSBfd2RzaWR4KQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfV0NJRChfcCkgICAgICAgICAgCQkoKFVDSEFSKShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyXSkpCisKKy8vIDB4ZmY6IFBLVFNSQ19ORElTLCBvdGhlcnM6IGxvY2FsIFRYIGJ1ZmZlciBpbmRleC4gVGhpcyB2YWx1ZSBhZmZlY3RzIGhvdyB0byBhIHBhY2tldAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfU09VUkNFKF9wLCBfcGt0c3JjKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzNdID0gX3BrdHNyYykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1NPVVJDRShfcCkgICAgICAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrM10pCisKKy8vIFJUUy9DVFMtdG8tc2VsZiBwcm90ZWN0aW9uIG1ldGhvZAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfUlRTKF9wLCBfbnVtKSAgICAgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzRdID0gX251bSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1JUUyhfcCkgICAgICAgICAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNF0pCisvLyBzZWUgUlRNUF9TKEcpRVRfUEFDS0VUX0VNQUNUQUIKKworLy8gVFggcmF0ZSBpbmRleAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfVFhSQVRFKF9wLCBfcmF0ZSkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis1XSA9IF9yYXRlKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfVFhSQVRFKF9wKQkJICAJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis1XSkKKworLy8gRnJvbSB3aGljaCBJbnRlcmZhY2UKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0lGKF9wLCBfaWZkeCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis2XSA9IF9pZmR4KQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfSUYoX3ApCQkgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzZdKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3AsIF9ic3MpCQlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKF9ic3MpKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9XRFMoX3AsIF9ic3MpCQlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKChfYnNzKSArIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9BUENMSShfcCwgX2lkeCkgICAJUlRNUF9TRVRfUEFDS0VUX0lGKChfcCksICgoX2lkeCkgKyBNSU5fTkVUX0RFVklDRV9GT1JfQVBDTEkpKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NRVNIKF9wLCBfaWR4KSAgIAlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKChfaWR4KSArIE1JTl9ORVRfREVWSUNFX0ZPUl9NRVNIKSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUJTU0lEKF9wKQkJCVJUTVBfR0VUX1BBQ0tFVF9JRigoX3ApKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRShfcCkJCQkJCVJUTVBfR0VUX1BBQ0tFVF9JRigoX3ApKQorCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9NT1JFREFUQShfcCwgX21vcmViaXQpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrN10gPSBfbW9yZWJpdCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX01PUkVEQVRBKF9wKQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrN10pCisKKy8vI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3AsIF9ic3MpCShSVFBLVF9UT19PU1BLVChfcCktPmNiWzhdID0gX2JzcykKKy8vI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYls4XSkKKworLy8KKy8vCVNlcGNpZmljIFBha2NldCBUeXBlIGRlZmluaXRpb24KKy8vCisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0NCX09GRlNFVAkxMQorCisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1AJCTB4MDEKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wJCTB4MDIKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNAkJMHgwNAorI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19XQUkJCTB4MDgKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfVkxBTgkJMHgxMAorI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19MTENTTkFQCTB4MjAKKworLy9TcGVjaWZpYworI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfU1BFQ0lGSUMoX3AsIF9mbGcpCSAgIAkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdID0gX2ZsZykKKworLy9ESENQCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9ESENQKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1ApOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfREhDUCk7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfREhDUChfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQKQorCisvL0VBUE9MCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9FQVBPTChfcCwgX2ZsZykgICAJCQkJCQkJCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTCk7CQlcCisJCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTCk7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfRUFQT0woX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wpCisKKy8vV0FJCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9XQUkoX3AsIF9mbGcpICAgCQkJCQkJCQkJCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJKTsJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSSk7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfV0FJKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSSkKKworI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTE9XUkFURShfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wgfCBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQIHwgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJKSkKKworLy9WTEFOCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9WTEFOKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX1ZMQU4pOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfVkxBTik7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfVkxBTihfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19WTEFOKQorCisvL0xMQy9TTkFQCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9MTENTTkFQKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX0xMQ1NOQVApOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfTExDU05BUCk7CQlcCisJCQl9d2hpbGUoMCkKKworI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTExDU05BUChfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19MTENTTkFQKQorCisvLyBJUAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfSVBWNChfcCwgX2ZsZykJCQkJCQkJCQkJCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNCk7CQlcCisJCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19JUFY0KTsJXAorCQkJfXdoaWxlKDApCisKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0lQVjQoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNCkKKworLy8gSWYgdGhpcyBmbGFnIGlzIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBFQVBvTCBmcmFtZSBNVVNUIGJlIGNsZWFyLgorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfQ0xFQVJfRUFQX0ZSQU1FKF9wLCBfZmxnKSAgIChSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMl0gPSBfZmxnKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfQ0xFQVJfRUFQX0ZSQU1FKF9wKSAgICAgICAgIChSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMl0pCisKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUXzVWVChfcCwgX2ZsZykgICAoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMjJdID0gX2ZsZykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUXzVWVChfcCkgICAgICAgICAoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMjJdKQorCisKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisvKkl2ZXJzb24gcGF0Y2ggZm9yIFdNTSBBNS1UMDcgLFdpcmVsZXNzU3RhVG9XaXJlbGVzc1N0YSBkbyBub3QgYnVsayBvdXQgYWdncmVnYXRlICovCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9OT0JVTEtPVVQoX3AsIF9tb3JlYml0KQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyM10gPSBfbW9yZWJpdCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX05PQlVMS09VVChfcCkJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyM10pCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisKKworI2lmZGVmIENPTkZJR181VlRfRU5IQU5DRQorI2RlZmluZSBCUklER0VfVEFHIDB4MzU1NjQyNTIgICAgLy8gZGVwZW5kcyBvbiA1VlQgZGVmaW5lIGluIGJyX2lucHV0LmMKKyNlbmRpZgorCisKKyNkZWZpbmUgTkRJU19TRVRfUEFDS0VUX1NUQVRVUyhfcCwgX3N0YXR1cykKKworCisjZGVmaW5lIEdFVF9TR19MSVNUX0ZST01fUEFDS0VUKF9wLCBfc2MpCVwKKyAgICBydF9nZXRfc2dfbGlzdF9mcm9tX3BhY2tldChfcCwgX3NjKQorCisjZGVmaW5lIE5kaXNNb3ZlTWVtb3J5KERlc3RpbmF0aW9uLCBTb3VyY2UsIExlbmd0aCkgbWVtbW92ZShEZXN0aW5hdGlvbiwgU291cmNlLCBMZW5ndGgpCisjZGVmaW5lIE5kaXNaZXJvTWVtb3J5KERlc3RpbmF0aW9uLCBMZW5ndGgpICAgICAgICAgbWVtc2V0KERlc3RpbmF0aW9uLCAwLCBMZW5ndGgpCisjZGVmaW5lIE5kaXNGaWxsTWVtb3J5KERlc3RpbmF0aW9uLCBMZW5ndGgsIEZpbGwpICAgbWVtc2V0KERlc3RpbmF0aW9uLCBGaWxsLCBMZW5ndGgpCisjZGVmaW5lIE5kaXNFcXVhbE1lbW9yeShTb3VyY2UxLCBTb3VyY2UyLCBMZW5ndGgpICAgKCFtZW1jbXAoU291cmNlMSwgU291cmNlMiwgTGVuZ3RoKSkKKyNkZWZpbmUgUlRNUEVxdWFsTWVtb3J5KFNvdXJjZTEsIFNvdXJjZTIsIExlbmd0aCkJKCFtZW1jbXAoU291cmNlMSwgU291cmNlMiwgTGVuZ3RoKSkKKworCisjZGVmaW5lIFJUTVBfSU5DX1JFRihfQSkJCTAKKyNkZWZpbmUgUlRNUF9ERUNfUkVGKF9BKQkJMAorI2RlZmluZSBSVE1QX0dFVF9SRUYoX0EpCQkwCisKKworCisvKgorICogVUxPTkcKKyAqIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KAorICogICBJTiBORElTX1BIWVNJQ0FMX0FERFJFU1MgIFBoeXNpY2FsQWRkcmVzcyk7CisgKi8KKyNkZWZpbmUgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NMb3coUGh5c2ljYWxBZGRyZXNzKQkJKFBoeXNpY2FsQWRkcmVzcykKKworLyoKKyAqIFVMT05HCisgKiBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goCisgKiAgIElOIE5ESVNfUEhZU0lDQUxfQUREUkVTUyAgUGh5c2ljYWxBZGRyZXNzKTsKKyAqLworI2RlZmluZSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goUGh5c2ljYWxBZGRyZXNzKQkJKDApCisKKy8qCisgKiBWT0lECisgKiBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0xvdygKKyAqICAgSU4gTkRJU19QSFlTSUNBTF9BRERSRVNTICBQaHlzaWNhbEFkZHJlc3MsCisgKiAgIElOIFVMT05HICBWYWx1ZSk7CisgKi8KKyNkZWZpbmUgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coUGh5c2ljYWxBZGRyZXNzLCBWYWx1ZSkJXAorCQkJUGh5c2ljYWxBZGRyZXNzID0gVmFsdWU7CisKKy8qCisgKiBWT0lECisgKiBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0hpZ2goCisgKiAgIElOIE5ESVNfUEhZU0lDQUxfQUREUkVTUyAgUGh5c2ljYWxBZGRyZXNzLAorICogICBJTiBVTE9ORyAgVmFsdWUpOworICovCisjZGVmaW5lIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChQaHlzaWNhbEFkZHJlc3MsIFZhbHVlKQorCisKKy8vQ09OVEFJTklOR19SRUNPUkQocEVudHJ5LCBORElTX1BBQ0tFVCwgTWluaXBvcnRSZXNlcnZlZEV4KTsKKyNkZWZpbmUgUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSkgXAorCShQTkRJU19QQUNLRVQpKHBFbnRyeSkKKworI2RlZmluZSBQQUNLRVRfVE9fUVVFVUVfRU5UUlkocFBhY2tldCkgXAorCShQUVVFVUVfRU5UUlkpKHBQYWNrZXQpCisKKworI2lmbmRlZiBDT05UQUlOSU5HX1JFQ09SRAorI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkJCQlcCisoKHR5cGUgKikoKFBDSEFSKShhZGRyZXNzKSAtIG9mZnNldG9mKHR5cGUsIGZpZWxkKSkpCisjZW5kaWYKKworCisjZGVmaW5lIFJFTEVBU0VfTkRJU19QQUNLRVQoX3BBZCwgX3BQYWNrZXQsIF9TdGF0dXMpICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJUTVBGcmVlTmRpc1BhY2tldChfcEFkLCBfcFBhY2tldCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBTV0lUQ0hfUGh5QUIoX3BBQSwgX3BCQikgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVTE9ORwlBQUJhc2VQYUhpZ2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVMT05HCUFBQmFzZVBhTG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVTE9ORwlCQkJhc2VQYUhpZ2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVMT05HCUJCQmFzZVBhTG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCQkJhc2VQYUhpZ2ggPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goX3BCQik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCQkJhc2VQYUxvdyA9IFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KF9wQkIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUFCYXNlUGFIaWdoID0gUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKF9wQUEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUFCYXNlUGFMb3cgPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhfcEFBKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChfcEFBLCBCQkJhc2VQYUhpZ2gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coX3BBQSwgQkJCYXNlUGFMb3cpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NIaWdoKF9wQkIsIEFBQmFzZVBhSGlnaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0xvdyhfcEJCLCBBQUJhc2VQYUxvdyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworCisjZGVmaW5lIE5kaXNXcml0ZUVycm9yTG9nRW50cnkoX2EsIF9iLCBfYywgX2QpCisjZGVmaW5lIE5kaXNNQWxsb2NhdGVNYXBSZWdpc3RlcnMoX2EsIF9iLCBfYywgX2QsIF9lKQkJTkRJU19TVEFUVVNfU1VDQ0VTUworCisKKyNkZWZpbmUgTmRpc0FjcXVpcmVTcGluTG9jawkJUlRNUF9TRU1fTE9DSworI2RlZmluZSBOZGlzUmVsZWFzZVNwaW5Mb2NrCQlSVE1QX1NFTV9VTkxPQ0sKKworc3RhdGljIGlubGluZSB2b2lkIE5kaXNHZXRTeXN0ZW1VcFRpbWUoVUxPTkcgKnRpbWUpCit7CisJKnRpbWUgPSBqaWZmaWVzOworfQorCisvL3BQYWNrZXQgPSBDT05UQUlOSU5HX1JFQ09SRChwRW50cnksIE5ESVNfUEFDS0VULCBNaW5pcG9ydFJlc2VydmVkRXgpOworI2RlZmluZSBRVUVVRV9FTlRSWV9UT19QS1QocEVudHJ5KSBcCisJCSgoUE5ESVNfUEFDS0VUKSAocEVudHJ5KSkKKworaW50IHJ0Mjh4eF9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCisKK3ZvaWQgcnRtcF9vc190aHJlYWRfaW5pdChQVUNIQVIgcFRocmVhZE5hbWUsIFBWT0lEIHBOb3RpZnkpOworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9tYWluX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMDA2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X21haW5fZGV2LmMKQEAgLTAsMCArMSwxODAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIHJ0X21haW5fZGV2LmMKKworICAgIEFic3RyYWN0OgorICAgIENyZWF0ZSBhbmQgcmVnaXN0ZXIgbmV0d29yayBpbnRlcmZhY2UuCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTYW1wbGUJCU1hci8yMS8wNwkJTWVyZ2UgUlQyODcwIGFuZCBSVDI4NjAgZHJpdmVycy4KKyovCisKKyNpbmNsdWRlICJydF9jb25maWcuaCIKKworI2RlZmluZSBGT1JUWV9NSFpfSU5UT0xFUkFOVF9JTlRFUlZBTAkoNjAqMTAwMCkgLy8gMSBtaW4KKworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorLy8gcmVjb3JkIHdoZXRoZXIgdGhlIGNhcmQgaW4gdGhlIGNhcmQgbGlzdCBpcyB1c2VkIGluIHRoZSBjYXJkIGZpbGUKK1VJTlQ4ICBNQ19DYXJkVXNlZFtNQVhfTlVNX09GX01VTFRJUExFX0NBUkRdOworLy8gcmVjb3JkIHVzZWQgY2FyZCBtYWMgYWRkcmVzcyBpbiB0aGUgY2FyZCBsaXN0CitzdGF0aWMgVUlOVDggIE1DX0NhcmRNYWNbTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEXVs2XTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitVSU5UMzIgQ1dfTUFYX0lOX0JJVFM7CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBWYXJpYWJsZXMgVXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy9zdGF0aWMgUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgUGVyaW9kaWNUaW1lcjsKKworY2hhciAqbWFjID0gIiI7CQkgICAvLyBkZWZhdWx0IDAwOjAwOjAwOjAwOjAwOjAwCitjaGFyICpob3N0bmFtZSA9ICIiOwkJICAgLy8gZGVmYXVsdCBDTVBDCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMikKK01PRFVMRV9QQVJNIChtYWMsICJzIik7CisjZWxzZQorbW9kdWxlX3BhcmFtIChtYWMsIGNoYXJwLCAwKTsKKyNlbmRpZgorTU9EVUxFX1BBUk1fREVTQyAobWFjLCAicnQyOHh4OiB3aXJlbGVzcyBtYWMgYWRkciIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByb3RvdHlwZXMgb2YgRnVuY3Rpb25zIFVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK2V4dGVybiBCT09MRUFOIGJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfaW5pdChQUlRNUF9BREFQVEVSIHBBZCwgaW50IG51bSk7CitleHRlcm4gdm9pZCBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworZXh0ZXJuIE5ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKElOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworCisvLyBwdWJsaWMgZnVuY3Rpb24gcHJvdG90eXBlCitJTlQgX19kZXZpbml0IHJ0Mjh4eF9wcm9iZShJTiB2b2lkICpfZGV2X3AsIElOIHZvaWQgKl9kZXZfaWRfcCwKKwkJCQkJCQlJTiBVSU5UIGFyZ2MsIE9VVCBQUlRNUF9BREFQVEVSICpwcEFkKTsKKworLy8gcHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGUKK3N0YXRpYyBpbnQgcnQyOHh4X2luaXQoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworSU5UIHJ0Mjh4eF9zZW5kX3BhY2tldHMoSU4gc3RydWN0IHNrX2J1ZmYgKnNrYl9wLCBJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gMHgyMDQwMgkvLyBSZWQgSGF0IDcuMQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldigKKwlpbnQgc2l6ZW9mX3ByaXYsCisJY29uc3QgY2hhciAqbWFzaywKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworc3RhdGljIHZvaWQgQ2ZnSW5pdEhvb2soUFJUTVBfQURBUFRFUiBwQWQpOworLy9zdGF0aWMgQk9PTEVBTiBSVDI4WFhBdmFpbFJBTmFtZUFzc2lnbihJTiBDSEFSICpuYW1lX3ApOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitleHRlcm4JY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJ0Mjh4eF9pd19oYW5kbGVyX2RlZjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitleHRlcm4JY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJ0Mjh4eF9hcF9pd19oYW5kbGVyX2RlZjsKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gcXVlcnkgL3Byb2MKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzKAorICAgIElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKKyNlbmRpZgorCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqUlQyOHh4X2dldF9ldGhlcl9zdGF0cygKKyAgICBJTiAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENsb3NlIHJheHggaW50ZXJmYWNlLgorCitBcmd1bWVudHM6CisJKm5ldF9kZXYJCQl0aGUgcmF4eCBpbnRlcmZhY2UgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJT3BlbiBPSworCW90aGVyd2lzZQkJCU9wZW4gRmFpbAorCitOb3RlOgorCTEuIGlmIG9wZW4gZmFpbCwga2VybmVsIHdpbGwgbm90IGNhbGwgdGhlIGNsb3NlIGZ1bmN0aW9uLgorCTIuIEZyZWUgbWVtb3J5IGZvcgorCQkoMSkgTWxtZSBNZW1vcnkgSGFuZGxlcjoJCU1sbWVIYWx0KCkKKwkJKDIpIFRYICYgUlg6CQkJCQlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KCkKKwkJKDMpIEJBIFJlb3JkZXJpbmc6IAkJCQliYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworaW50IE1haW5WaXJ0dWFsSUZfY2xvc2UoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJCXJldHVybiAwOyAvLyBjbG9zZSBvaworCisJbmV0aWZfY2Fycmllcl9vZmYocEFkLT5uZXRfZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKHBBZC0+bmV0X2Rldik7CisKKworCisJVklSVFVBTF9JRl9ET1dOKHBBZCk7CisKKwlSVF9NT0RfREVDX1VTRV9DT1VOVCgpOworCisJcmV0dXJuIDA7IC8vIGNsb3NlIG9rCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgT3BlbiByYXh4IGludGVyZmFjZS4KKworQXJndW1lbnRzOgorCSpuZXRfZGV2CQkJdGhlIHJheHggaW50ZXJmYWNlIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCU9wZW4gT0sKKwlvdGhlcndpc2UJCQlPcGVuIEZhaWwKKworTm90ZToKKwkxLiBpZiBvcGVuIGZhaWwsIGtlcm5lbCB3aWxsIG5vdCBjYWxsIHRoZSBjbG9zZSBmdW5jdGlvbi4KKwkyLiBGcmVlIG1lbW9yeSBmb3IKKwkJKDEpIE1sbWUgTWVtb3J5IEhhbmRsZXI6CQlNbG1lSGFsdCgpCisJCSgyKSBUWCAmIFJYOgkJCQkJUlRNUEZyZWVUeFJ4UmluZ01lbW9yeSgpCisJCSgzKSBCQSBSZW9yZGVyaW5nOiAJCQkJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK2ludCBNYWluVmlydHVhbElGX29wZW4oSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJCXJldHVybiAwOyAvLyBjbG9zZSBvaworCisJaWYgKFZJUlRVQUxfSUZfVVAocEFkKSAhPSAwKQorCQlyZXR1cm4gLTE7CisKKwkvLyBpbmNyZWFzZSBNT0RVTEUgdXNlIGNvdW50CisJUlRfTU9EX0lOQ19VU0VfQ09VTlQoKTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOworCW5ldGlmX2NhcnJpZXJfb24obmV0X2Rldik7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENsb3NlIHJheHggaW50ZXJmYWNlLgorCitBcmd1bWVudHM6CisJKm5ldF9kZXYJCQl0aGUgcmF4eCBpbnRlcmZhY2UgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJT3BlbiBPSworCW90aGVyd2lzZQkJCU9wZW4gRmFpbAorCitOb3RlOgorCTEuIGlmIG9wZW4gZmFpbCwga2VybmVsIHdpbGwgbm90IGNhbGwgdGhlIGNsb3NlIGZ1bmN0aW9uLgorCTIuIEZyZWUgbWVtb3J5IGZvcgorCQkoMSkgTWxtZSBNZW1vcnkgSGFuZGxlcjoJCU1sbWVIYWx0KCkKKwkJKDIpIFRYICYgUlg6CQkJCQlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KCkKKwkJKDMpIEJBIFJlb3JkZXJpbmc6IAkJCQliYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworaW50IHJ0Mjh4eF9jbG9zZShJTiBQTkVUX0RFViBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKiBuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2OworICAgIFJUTVBfQURBUFRFUgkqcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwlCT09MRUFOIAkJQ2FuY2VsbGVkID0gRkFMU0U7CisJVUlOVDMyCQkJaSA9IDA7CisjaWZkZWYgUlQyODcwCisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodW5saW5rX3dha2V1cCk7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwkvL1JUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnQyOHh4X2Nsb3NlXG4iKSk7CisKKwkvLyBTYW5pdHkgY2hlY2sgZm9yIHBBZAorCWlmIChwQWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7IC8vIGNsb3NlIG9rCisKKworI2lmZGVmIFdEU19TVVBQT1JUCisJV2RzRG93bihwQWQpOworI2VuZGlmIC8vIFdEU19TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKworCQkvLyBJZiBkaXJ2ZXIgZG9lc24ndCB3YWtlIHVwIGZpcm13YXJlIGhlcmUsCisJCS8vIE5JQ0xvYWRGaXJtd2FyZSB3aWxsIGhhbmcgZm9yZXZlciB3aGVuIGludGVyZmFjZSBpcyB1cCBhZ2Fpbi4KKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisgICAgICAgIHsKKwkJICAgIEFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworICAgICAgICB9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy8gc2VuZCBETFMtVEVBUl9ET1dOIG1lc3NhZ2UsCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJeworCQkJVUNIQVIgaTsKKworCQkJLy8gdGVhciBkb3duIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCXsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCX0KKwkJCX0KKworCQkJLy8gdGVhciBkb3duIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJCQlmb3IgKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCXsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCX0KKwkJCX0KKwkJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCWlmIChJTkZSQV9PTihwQWQpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCXsKKwkJCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVAlEaXNSZXE7CisJCQlNTE1FX1FVRVVFX0VMRU0gKk1zZ0VsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKworCQkJQ09QWV9NQUNfQUREUihEaXNSZXEuQWRkciwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJRGlzUmVxLlJlYXNvbiA9ICBSRUFTT05fREVBVVRIX1NUQV9MRUFWSU5HOworCisJCQlNc2dFbGVtLT5NYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKKwkJCU1zZ0VsZW0tPk1zZ1R5cGUgPSBNVDJfTUxNRV9ESVNBU1NPQ19SRVE7CisJCQlNc2dFbGVtLT5Nc2dMZW4gPSBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0tPk1zZywgJkRpc1JlcSwgc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCkpOworCisJCQkvLyBQcmV2ZW50IHRvIGNvbm5lY3QgQVAgYWdhaW4gaW4gU1RBTWxtZVBlcmlvZGljRXhlYworCQkJcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7CisJCQlNbG1lRGlzYXNzb2NSZXFBY3Rpb24ocEFkLCBNc2dFbGVtKTsKKwkJCWtmcmVlKE1zZ0VsZW0pOworCisJCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCQl9CisKKyNpZmRlZiBSVDI4NzAKKwlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgQ0NYX1NVUFBPUlQKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5MZWFwQXV0aFRpbWVyLCAmQ2FuY2VsbGVkKTsKKyNlbmRpZgorCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXIsICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLldwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyLCAmQ2FuY2VsbGVkKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJeworCQkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCB0byB3cGFfc3VwcGxpY2FudCBmb3IgaW5mcm9taW5nIGludGVyZmFjZSBkb3duLgorCQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQkJd3JxdS5kYXRhLmZsYWdzID0gUlRfSU5URVJGQUNFX0RPV047CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworCQl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwkJTWxtZVJhZGlvT2ZmKHBBZCk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9PRl9UWF9SSU5HOyBpKyspCisJeworCQl3aGlsZSAocEFkLT5EZVF1ZXVlUnVubmluZ1tpXSA9PSBUUlVFKQorCQl7CisJCQlwcmludGsoIldhaXRpbmcgZm9yIFR4UXVldWVbJWRdIGRvbmUuLi4uLi4uLi4uXG4iLCBpKTsKKwkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCX0KKwl9CisKKyNpZmRlZiBSVDI4NzAKKwkvLyBlbnN1cmUgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZlIHVyYnMuCisJYWRkX3dhaXRfcXVldWUgKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7CisJcEFkLT53YWl0ID0gJnVubGlua193YWtldXA7CisKKwkvLyBtYXliZSB3YWl0IGZvciBkZWxldGlvbnMgdG8gZmluaXNoLgorCWkgPSAwOworCS8vd2hpbGUoKGkgPCAyNSkgJiYgYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApCisJd2hpbGUoaSA8IDI1KQorCXsKKwkJdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKKworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJaWYgKHBBZC0+UGVuZGluZ1J4ID09IDApCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQlicmVhazsKKwkJfQorCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDkpCisJCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7CS8vVGltZSBpbiBtaWxsaXNlY29uZAorI2Vsc2UKKwkJUlRNUHVzZWNEZWxheShVTkxJTktfVElNRU9VVF9NUyoxMDAwKTsJLy9UaW1lIGluIG1pY3Jvc2Vjb25kCisjZW5kaWYKKwkJaSsrOworCX0KKwlwQWQtPndhaXQgPSBOVUxMOworCXJlbW92ZV93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJLy9SVFVTQkNsZWFuVXBNTE1FV2FpdFF1ZXVlKHBBZCk7CS8qbm90IHVzZWQgaW4gUlQyOHh4Ki8KKworCisjaWZkZWYgUlQyODcwCisJLy8gV2UgbmVlZCBjbGVhciB0aW1lclEgcmVsYXRlZCBzdHJ1Y3R1cmUgYmVmb3JlIGV4aXRzIG9mIHRoZSB0aW1lciB0aHJlYWQuCisJUlQyODcwX1RpbWVyUV9FeGl0KHBBZCk7CisJLy8gQ2xvc2Uga2VybmVsIHRocmVhZHMgb3IgdGFza2xldHMKKwlSVDI4eHhUaHJlYWRUZXJtaW5hdGUocEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIFN0b3AgTWxtZSBzdGF0ZSBtYWNoaW5lCisJTWxtZUhhbHQocEFkKTsKKworCS8vIENsb3NlIGtlcm5lbCB0aHJlYWRzIG9yIHRhc2tsZXRzCisJa2lsbF90aHJlYWRfdGFzayhwQWQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJTWFjVGFibGVSZXNldChwQWQpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJTWVhc3VyZVJlcVRhYkV4aXQocEFkKTsKKwlUcGNSZXFUYWJFeGl0KHBBZCk7CisKKworCisKKwkvLyBGcmVlIFJpbmcgb3IgVVNCIGJ1ZmZlcnMKKwlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KHBBZCk7CisKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gRnJlZSBCQSByZW9yZGVyIHJlc291cmNlCisJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDI4NzAKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJaWYgKHBBZC0+VXNiVmVuZG9yUmVxQnVmKQorCQlvc19mcmVlX21lbShwQWQsIHBBZC0+VXNiVmVuZG9yUmVxQnVmKTsKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKTsKKworCXJldHVybiAwOyAvLyBjbG9zZSBvaworfSAvKiBFbmQgb2YgcnQyOHh4X2Nsb3NlICovCisKK3N0YXRpYyBpbnQgcnQyOHh4X2luaXQoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJUFJUTVBfQURBUFRFUiAJCQlwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCVVJTlQJCQkJCWluZGV4OworCVVDSEFSCQkJCQlUbXBQaHk7CisvLwlVTE9ORwkJCQkJVmFsdWU9MDsKKwlORElTX1NUQVRVUwkJCQlTdGF0dXM7CisvLyAgICBPSURfU0VUX0hUX1BIWU1PREUJCVNldEhUOworLy8JV1BETUFfR0xPX0NGR19TVFJVQyAgICAgR2xvQ2ZnOworCVVJTlQzMiAJCU1hY0NzcjAgPSAwOworCVVJTlQzMgkJTWFjVmFsdWUgPSAwOworCisjaWZkZWYgUlQyODcwCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCWluaXRfTVVURVgoJihwQWQtPlVzYlZlbmRvclJlcV9zZW1hcGhvcmUpKTsKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSKSZwQWQtPlVzYlZlbmRvclJlcUJ1ZiwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFIC0gMSk7CisJaWYgKHBBZC0+VXNiVmVuZG9yUmVxQnVmID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBbGxvY2F0ZSB2ZW5kb3IgcmVxdWVzdCB0ZW1wIGJ1ZmZlciBmYWlsZWQhXG4iKSk7CisJCWdvdG8gZXJyMDsKKwl9CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gQWxsb2NhdGUgQkEgUmVvcmRlcmluZyBtZW1vcnkKKwliYV9yZW9yZGVyaW5nX3Jlc291cmNlX2luaXQocEFkLCBNQVhfUkVPUkRFUklOR19NUERVX05VTSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBNYWtlIHN1cmUgTUFDIGdldHMgcmVhZHkuCisJaW5kZXggPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19DU1IwLCAmTWFjQ3NyMCk7CisJCXBBZC0+TUFDVmVyc2lvbiA9IE1hY0NzcjA7CisKKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gIT0gMHgwMCkgJiYgKHBBZC0+TUFDVmVyc2lvbiAhPSAweEZGRkZGRkZGKSkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMTApOworCX0gd2hpbGUgKGluZGV4KysgPCAxMDApOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTUFDX0NTUjAgIFsgVmVyOlJldj0weCUwOHhdXG4iLCBwQWQtPk1BQ1ZlcnNpb24pKTsKKy8qSXZlcnNvbiBwYXRjaCBQQ0lFIEwxIGlzc3VlICovCisKKwkvLyBEaXNhYmxlIERNQQorCVJUMjhYWERNQURpc2FibGUocEFkKTsKKworCisJLy8gTG9hZCA4MDUxIGZpcm13YXJlCisJU3RhdHVzID0gTklDTG9hZEZpcm13YXJlKHBBZCk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTklDTG9hZEZpcm13YXJlIGZhaWxlZCwgU3RhdHVzWz0weCUwOHhdXG4iLCBTdGF0dXMpKTsKKwkJZ290byBlcnIxOworCX0KKworCU5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKHBBZCk7CisKKwkvLyBEaXNhYmxlIGludGVycnVwdHMgaGVyZSB3aGljaCBpcyBhcyBzb29uIGFzIHBvc3NpYmxlCisJLy8gVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5ldmVyIGJlIHRydWUuIFdlIG1pZ2h0IGNvbnNpZGVyIHRvIHJlbW92ZSBpdCBsYXRlcgorCisJU3RhdHVzID0gUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkocEFkKTsKKwlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVF9FUlIoKCJSVE1QQWxsb2NETUFNZW1vcnkgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsIFN0YXR1cykpOworCQlnb3RvIGVycjE7CisJfQorCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSk7CisKKwkvLyBpbml0aWFsaXplIE1MTUUKKwkvLworCisJU3RhdHVzID0gTWxtZUluaXQocEFkKTsKKwlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVF9FUlIoKCJNbG1lSW5pdCBmYWlsZWQsIFN0YXR1c1s9MHglMDh4XVxuIiwgU3RhdHVzKSk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwkvLyBJbml0aWFsaXplIHBBZC0+U3RhQ2ZnLCBwQWQtPkFwQ2ZnLCBwQWQtPkNvbW1vbkNmZyB0byBtYW51ZmFjdHVyZSBkZWZhdWx0CisJLy8KKwlVc2VyQ2ZnSW5pdChwQWQpOworCisjaWZkZWYgUlQyODcwCisJLy8gV2UgbmVlZCBpbml0IHRpbWVyUSByZWxhdGVkIHN0cnVjdHVyZSBiZWZvcmUgY3JlYXRlIHRoZSB0aW1lciB0aHJlYWQuCisJUlQyODcwX1RpbWVyUV9Jbml0KHBBZCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlSVDI4WFhfVEFTS19USFJFQURfSU5JVChwQWQsIFN0YXR1cyk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIGVycjE7CisKKy8vCUNPUFlfTUFDX0FERFIocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLkJzc2lkLCBuZXRpZi0+aHdhZGRyKTsKKy8vCXBBZC0+YkZvcmNlUHJpbnRUWCA9IFRSVUU7CisKKwlDZmdJbml0SG9vayhwQWQpOworCisKKyNpZmRlZiBCTE9DS19ORVRfSUYKKwlpbml0YmxvY2tRdWV1ZVRhYihwQWQpOworI2VuZGlmIC8vIEJMT0NLX05FVF9JRiAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlNZWFzdXJlUmVxVGFiSW5pdChwQWQpOworCVRwY1JlcVRhYkluaXQocEFkKTsKKworCS8vCisJLy8gSW5pdCB0aGUgaGFyZHdhcmUsIHdlIG5lZWQgdG8gaW5pdCBhc2ljIGJlZm9yZSByZWFkIHJlZ2lzdHJ5LCBvdGhlcndpc2UgbWFjIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQKKwkvLworCVN0YXR1cyA9IE5JQ0luaXRpYWxpemVBZGFwdGVyKHBBZCwgVFJVRSk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTklDSW5pdGlhbGl6ZUFkYXB0ZXIgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsIFN0YXR1cykpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gZXJyMzsKKwl9CisKKwkvLyBSZWFkIHBhcmFtZXRlcnMgZnJvbSBDb25maWcgRmlsZQorCVN0YXR1cyA9IFJUTVBSZWFkUGFyYW1ldGVyc0hvb2socEFkKTsKKworCXByaW50aygiMS4gUGh5IE1vZGUgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTklDUmVhZFJlZ1BhcmFtZXRlcnMgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsU3RhdHVzKSk7CisJCWdvdG8gZXJyNDsKKwl9CisKKyNpZmRlZiBSVDI4NzAKKwlwQWQtPkNvbW1vbkNmZy5iTXVsdGlwbGVJUlAgPSBGQUxTRTsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5iTXVsdGlwbGVJUlApCisJCXBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQID0gUlhfUklOR19TSVpFOworCWVsc2UKKwkJcEFkLT5Db21tb25DZmcuTnVtT2ZCdWxrSW5JUlAgPSAxOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyAgIAkvL0luaXQgQmEgQ2FwYWJpbGl0eSBwYXJhbWV0ZXJzLgorLy8JUlQyOFhYX0JBX0lOSVQocEFkKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5OworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlOworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcyA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOworCS8vIFVQZGF0YSB0byBIVCBJRQorCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7CisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7CisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBhZnRlciByZWFkaW5nIFJlZ2lzdHJ5LCB3ZSBub3cga25vdyBpZiBpbiBBUCBtb2RlIG9yIFNUQSBtb2RlCisKKwkvLyBMb2FkIDgwNTEgZmlybXdhcmU7IGNyYXNoIHdoZW4gRlcgaW1hZ2Ugbm90IGV4aXN0ZW50CisJLy8gU3RhdHVzID0gTklDTG9hZEZpcm13YXJlKHBBZCk7CisJLy8gaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCS8vICAgIGJyZWFrOworCisJcHJpbnRrKCIyLiBQaHkgTW9kZSA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKTsKKworCS8vIFdlIHNob3VsZCByZWFkIEVFUFJPTSBmb3IgYWxsIGNhc2VzLiAgcnQyODYwYgorCU5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKHBBZCwgbWFjKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXByaW50aygiMy4gUGh5IE1vZGUgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSk7CisKKwlOSUNJbml0QXNpY0Zyb21FRVBST00ocEFkKTsgLy9ydDI4NjBiCisKKwkvLyBTZXQgUEhZIHRvIGFwcHJvcHJpYXRlIG1vZGUKKwlUbXBQaHkgPSBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlOworCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAweGZmOworCVJUTVBTZXRQaHlNb2RlKHBBZCwgVG1wUGh5KTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gTm8gdmFsaWQgY2hhbm5lbHMuCisJaWYgKHBBZC0+Q2hhbm5lbExpc3ROdW0gPT0gMCkKKwl7CisJCXByaW50aygiV3JvbmcgY29uZmlndXJhdGlvbi4gTm8gdmFsaWQgY2hhbm5lbCBmb3VuZC4gQ2hlY2sgXCJDb250cnlDb2RlXCIgYW5kIFwiQ2hhbm5lbEdlb2dyYXBoeVwiIHNldHRpbmcuXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXByaW50aygiTUNTIFNldCA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFswXSwKKyAgICAgICAgICAgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSwgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSwKKyAgICAgICAgICAgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFszXSwgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFs0XSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDMweHgKKyAgICAvL0luaXQgUlQzMHh4IFJGUmVnaXN0ZXJzIGFmdGVyIHJlYWQgUkZJQyB0eXBlIGZyb20gRUVQUk9NCisJTklDSW5pdFJUMzB4eFJGUmVnaXN0ZXJzKHBBZCk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKy8vCQlBUEluaXRpYWxpemUocEFkKTsKKworI2lmZGVmIElLQU5PU19WWF8xWDAKKwlWUl9JS0FOT1NfRlBfSW5pdChwQWQtPkFwQ2ZnLkJzc2lkTnVtLCBwQWQtPlBlcm1hbmVudEFkZHJlc3MpOworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworCQkvLworCS8vIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCS8vCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwlpZiAocEFkICYmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykpCisJeworCQkvLworCQkvLyBVbmRvIGV2ZXJ5dGhpbmcgaWYgaXQgZmFpbGVkCisJCS8vCisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJCXsKKy8vCQkJTmRpc01EZXJlZ2lzdGVySW50ZXJydXB0KCZwQWQtPkludGVycnVwdCk7CisJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOworCQl9CisvLwkJUlRNUEZyZWVBZGFwdGVyKHBBZCk7IC8vIHdlIHdpbGwgZnJlZSBpdCBpbiBkaXNjb25uZWN0KCkKKwl9CisJZWxzZSBpZiAocEFkKQorCXsKKwkJLy8gTWljcm9zb2Z0IEhDVCByZXF1aXJlIGRyaXZlciBzZW5kIGEgZGlzY29ubmVjdCBldmVudCBhZnRlciBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisvLwkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfQ0hBTkdFKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUIEV2ZW50IEIhXG4iKSk7CisKKworI2lmZGVmIFJUMjg3MAorCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKTsKKwkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpOworCisJCS8vCisJCS8vIFN1cHBvcnQgbXVsdGlwbGUgQnVsa0luIElSUCwKKwkJLy8gdGhlIHZhbHVlIG9uIHBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQIG1heSBiZSBsYXJnZSB0aGFuIDEuCisJCS8vCisJCWZvcihpbmRleD0wOyBpbmRleDxwQWQtPkNvbW1vbkNmZy5OdW1PZkJ1bGtJbklSUDsgaW5kZXgrKykKKwkJeworCQkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRVU0JCdWxrUmVjZWl2ZSFcbiIgKSk7CisJCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl9Ly8gZW5kIG9mIGVsc2UKKworCisJREJHUFJJTlRfUyhTdGF0dXMsICgiPD09PT0gUlRNUEluaXRpYWxpemUsIFN0YXR1cz0leFxuIiwgU3RhdHVzKSk7CisKKwlyZXR1cm4gVFJVRTsKKworCitlcnI0OgorZXJyMzoKKwlNbG1lSGFsdChwQWQpOworZXJyMjoKKwlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KHBBZCk7CisvLwlSVE1QRnJlZUFkYXB0ZXIocEFkKTsKK2VycjE6CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlvc19mcmVlX21lbShwQWQsIHBBZC0+bXBkdV9ibGtfcG9vbC5tZW0pOyAvLyBmcmVlIEJBIHBvb2wKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2Rldik7CisKKwkvLyBzaGFsbCBub3Qgc2V0IHByaXYgdG8gTlVMTCBoZXJlIGJlY2F1c2UgdGhlIHByaXYgZGlkbid0IGJlZW4gZnJlZSB5ZXQuCisJLy9uZXRfZGV2LT5tbF9wcml2ID0gMDsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCitlcnIwOgorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKwlwcmludGsoIiEhISAlcyBJbml0aWFsaXplZCBmYWlsICEhIVxuIiwgUlQyOHh4X0NISVBfTkFNRSk7CisJcmV0dXJuIEZBTFNFOworfSAvKiBFbmQgb2YgcnQyOHh4X2luaXQgKi8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIE9wZW4gcmF4eCBpbnRlcmZhY2UuCisKK0FyZ3VtZW50czoKKwkqbmV0X2RldgkJCXRoZSByYXh4IGludGVyZmFjZSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICAwCQkJCQlPcGVuIE9LCisJb3RoZXJ3aXNlCQkJT3BlbiBGYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitpbnQgcnQyOHh4X29wZW4oSU4gUE5FVF9ERVYgZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICogbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldjsKKwlQUlRNUF9BREFQVEVSIHBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJaW50IHJldHZhbCA9IDA7CisgCVBPU19DT09LSUUgcE9iajsKKworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKKwl7CisJCUNXX01BWF9JTl9CSVRTID0gNjsKKwl9CisJZWxzZSBpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwl7CisJCUNXX01BWF9JTl9CSVRTID0gMTA7CisJfQorCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisJaWYgKG5ldF9kZXYtPm1sX3ByaXZfZmxhZ3MgPT0gSU5UX01BSU4pCisJeworCQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKQorCQkJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZydDI4eHhfYXBfaXdfaGFuZGxlcl9kZWY7CisJCWVsc2UgaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJCQluZXRfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikgJnJ0Mjh4eF9pd19oYW5kbGVyX2RlZjsKKwl9CisjZW5kaWYgLy8gV0lSRUxFU1NfRVhUID49IDEyIC8vCisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gSW5pdAorIAlwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisKKwkvLyByZXNldCBBZGFwdGVyIGZsYWdzCisJUlRNUF9DTEVBUl9GTEFHUyhwQWQpOworCisJLy8gUmVxdWVzdCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBQQ0kgZGV2aWNlCisJLy8gcmVnaXN0ZXIgdGhlIGludGVycnVwdCByb3V0aW5lIHdpdGggdGhlIG9zCisJUlQyOFhYX0lSUV9SRVFVRVNUKG5ldF9kZXYpOworCisKKwkvLyBJbml0IEJzc1RhYiAmIENoYW5uZWxJbmZvIHRhYmJsZXMgZm9yIGF1dG8gY2hhbm5lbCBzZWxlY3QuCisKKworCS8vIENoaXAgJiBvdGhlciBpbml0CisJaWYgKHJ0Mjh4eF9pbml0KG5ldF9kZXYpID09IEZBTFNFKQorCQlnb3RvIGVycjsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5kZXZfbmFtZSwgMTYpOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5kZXZfbmFtZSwgbmV0X2Rldi0+bmFtZSwgc3RybGVuKG5ldF9kZXYtPm5hbWUpKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBTZXQgdXAgdGhlIE1hYyBhZGRyZXNzCisJTmRpc01vdmVNZW1vcnkobmV0X2Rldi0+ZGV2X2FkZHIsICh2b2lkICopIHBBZC0+Q3VycmVudEFkZHJlc3MsIDYpOworCisJLy8gSW5pdCBJUlEgcGFyYW1ldGVycworCVJUMjhYWF9JUlFfSU5JVChwQWQpOworCisJLy8gVmFyaW91cyBBUCBmdW5jdGlvbiBpbml0CisKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCQl7CisJCQl1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisJCQkvLyBzZW5kIHdpcmVsZXNzIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50IGZvciBpbmZyb21pbmcgaW50ZXJmYWNlIGRvd24uCisJCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSBSVF9JTlRFUkZBQ0VfVVA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworCQl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBFbmFibGUgSW50ZXJydXB0CisJUlQyOFhYX0lSUV9FTkFCTEUocEFkKTsKKworCS8vIE5vdyBFbmFibGUgUnhUeAorCVJUTVBFbmFibGVSeFR4KHBBZCk7CisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApOworCisJeworCVVJTlQzMiByZWcgPSAwOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMzAwLCAmcmVnKTsgIC8vIGNsZWFyIGdhcmJhZ2UgaW50ZXJydXB0cworCXByaW50aygiMHgxMzAwID0gJTA4eFxuIiwgcmVnKTsKKwl9CisKKwl7CisvLwl1MzIgcmVnOworLy8JdTggIGJ5dGU7CisvLwl1MTYgdG1wOworCisvLwlSVE1QX0lPX1JFQUQzMihwQWQsIFhJRlNfVElNRV9DRkcsICZyZWcpOworCisvLwl0bXAgPSAweDA4MDU7CisvLwlyZWcgID0gKHJlZyAmIDB4ZmZmZjAwMDApIHwgdG1wOworLy8JUlRNUF9JT19XUklURTMyKHBBZCwgWElGU19USU1FX0NGRywgcmVnKTsKKworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuIChyZXR2YWwpOworCitlcnI6CisJcmV0dXJuICgtMSk7Cit9IC8qIEVuZCBvZiBydDI4eHhfb3BlbiAqLworCisKKy8qIE11c3Qgbm90IGJlIGNhbGxlZCBmb3IgbWRldiBhbmQgYXBkZXYgKi8KK3N0YXRpYyBORElTX1NUQVRVUyBydF9pZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTkRJU19TVEFUVVMgU3RhdHVzOworCUlOVCAgICAgaT0wOworCUNIQVIgICAgc2xvdF9uYW1lW0lGTkFNU0laXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgICpkZXZpY2U7CisKKworCS8vZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHJ0Mjh4eF9zZW5kX3BhY2tldHM7CisKKyNpZmRlZiBJS0FOT1NfVlhfMVgwCisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBJS0FOT1NfRGF0YUZyYW1lc1R4OworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworLy8JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OworLy8JZGV2LT5jaGFuZ2VfbXR1ID0gaWVlZTgwMjExX2NoYW5nZV9tdHU7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJeworCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJ0Mjh4eF9pd19oYW5kbGVyX2RlZjsKKwl9CisjZW5kaWYgLy9XSVJFTEVTU19FWFQgPj0gMTIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKKwl7CisJCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcnQyOHh4X2FwX2l3X2hhbmRsZXJfZGVmOworCX0KKyNlbmRpZiAvL1dJUkVMRVNTX0VYVCA+PSAxMgorI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKyNpZiBXSVJFTEVTU19FWFQgPCAyMQorCQlkZXYtPmdldF93aXJlbGVzc19zdGF0cyA9IHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHM7CisjZW5kaWYKKwlkZXYtPmdldF9zdGF0cyA9IFJUMjh4eF9nZXRfZXRoZXJfc3RhdHM7CisJZGV2LT5vcGVuID0gTWFpblZpcnR1YWxJRl9vcGVuOyAvL3J0Mjh4eF9vcGVuOworCWRldi0+c3RvcCA9IE1haW5WaXJ0dWFsSUZfY2xvc2U7IC8vcnQyOHh4X2Nsb3NlOworLy8JZGV2LT51bmluaXQgPSBpZWVlODAyMTFfaWZfcmVpbml0OworLy8JZGV2LT5kZXN0cnVjdG9yID0gaWVlZTgwMjExX2lmX2ZyZWU7CisJZGV2LT5wcml2X2ZsYWdzID0gSU5UX01BSU47CisJZGV2LT5kb19pb2N0bCA9IHJ0Mjh4eF9pb2N0bDsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQorICAgIGRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7CisjZW5kaWYKKwkvLyBmaW5kIGF2YWlsYWJsZSBkZXZpY2UgbmFtZQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJeworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorCQlpZiAocEFkLT5NQ19Sb3dJRCA+PSAwKQorCQkJc3ByaW50ZihzbG90X25hbWUsICJyYSUwMmRfJWQiLCBwQWQtPk1DX1Jvd0lELCBpKTsKKwkJZWxzZQorI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCQlzcHJpbnRmKHNsb3RfbmFtZSwgInJhJWQiLCBpKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjYpCisgICAgICAgIGRldmljZSA9IGRldl9nZXRfYnlfbmFtZShkZXZfbmV0KGRldiksIHNsb3RfbmFtZSk7CisjZWxzZQorICAgICAgICBkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoZGV2LT5uZF9uZXQsIHNsb3RfbmFtZSk7CisjZW5kaWYKKyNlbHNlCisJCWRldmljZSA9IGRldl9nZXRfYnlfbmFtZShzbG90X25hbWUpOworI2VuZGlmCisJCWlmIChkZXZpY2UgIT0gTlVMTCkgZGV2X3B1dChkZXZpY2UpOworI2Vsc2UKKwkJZm9yIChkZXZpY2UgPSBkZXZfYmFzZTsgZGV2aWNlICE9IE5VTEw7IGRldmljZSA9IGRldmljZS0+bmV4dCkKKwkJeworCQkJaWYgKHN0cm5jbXAoZGV2aWNlLT5uYW1lLCBzbG90X25hbWUsIDQpID09IDApCisJCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlpZihkZXZpY2UgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKworCWlmKGkgPT0gOCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk5vIGF2YWlsYWJsZSBzbG90IG5hbWVcbiIpKTsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisJZWxzZQorCXsKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwkJaWYgKHBBZC0+TUNfUm93SUQgPj0gMCkKKwkgICAgICAgIHNwcmludGYoZGV2LT5uYW1lLCAicmElMDJkXyVkIiwgcEFkLT5NQ19Sb3dJRCwgaSk7CisJCWVsc2UKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKwkJc3ByaW50ZihkZXYtPm5hbWUsICJyYSVkIiwgaSk7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCisJcmV0dXJuIFN0YXR1czsKKworfQorCisKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgR2V0IGNhcmQgcHJvZmlsZSBwYXRoLgorCitBcmd1bWVudHM6CisgICAgcEFkCisKK1JldHVybiBWYWx1ZToKKyAgICBUUlVFCQktIEZpbmQgYSBjYXJkIHByb2ZpbGUKKwlGQUxTRQkJLSB1c2UgZGVmYXVsdCBwcm9maWxlCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitleHRlcm4gSU5UIFJUTVBHZXRLZXlQYXJhbWV0ZXIoCisgICAgSU4gIFBDSEFSICAga2V5LAorICAgIE9VVCBQQ0hBUiAgIGRlc3QsCisgICAgSU4gIElOVCAgICAgZGVzdHNpemUsCisgICAgSU4gIFBDSEFSICAgYnVmZmVyKTsKKworQk9PTEVBTiBSVE1QX0NhcmRJbmZvUmVhZCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyNkZWZpbmUgTUNfU0VMRUNUX0NBUkRJRAkJMAkvKiB1c2UgQ0FSRCBJRCAoMCB+IDMxKSB0byBpZGVudGlmeSBkaWZmZXJlbnQgY2FyZHMgKi8KKyNkZWZpbmUgTUNfU0VMRUNUX01BQwkJCTEJLyogdXNlIENBUkQgTUFDIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBjYXJkcyAqLworI2RlZmluZSBNQ19TRUxFQ1RfQ0FSRFRZUEUJCTIJLyogdXNlIENBUkQgdHlwZSAoYWJnbiBvciBiZ24pIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBjYXJkcyAqLworCisjZGVmaW5lIExFVFRFUl9DQVNFX1RSQU5TTEFURSh0eHRfcCwgY2FyZF9pZCkJCQlcCisJewlVSU5UMzIgX2xlbjsgY2hhciBfY2hhcjsJCQkJCQlcCisJCWZvcihfbGVuPTA7IF9sZW48c3RybGVuKGNhcmRfaWQpOyBfbGVuKyspIHsJCVwKKwkJCV9jaGFyID0gKih0eHRfcCArIF9sZW4pOwkJCQkJXAorCQkJaWYgKCgnQScgPD0gX2NoYXIpICYmIChfY2hhciA8PSAnWicpKQkJXAorCQkJCSoodHh0X3ArX2xlbikgPSAnYScrKF9jaGFyLSdBJyk7CQlcCisJCX0gfQorCisJc3RydWN0IGZpbGUgKnNyY2Y7CisJSU5UIHJldHZhbCwgb3JnZnN1aWQsIG9yZ2ZzZ2lkOworICAgCW1tX3NlZ21lbnRfdCBvcmdmczsKKwlDSEFSICpidWZmZXIsICp0bXBidWYsIGNhcmRfaWRfYnVmWzMwXSwgUkZJQ193b3JkWzMwXTsKKwlCT09MRUFOIGZsZ19tYXRjaF9vayA9IEZBTFNFOworCUlOVDMyIGNhcmRfc2VsZWN0X21ldGhvZDsKKwlJTlQzMiBjYXJkX2ZyZWVfaWQsIGNhcmRfbm91c2VfaWQsIGNhcmRfc2FtZV9tYWNfaWQsIGNhcmRfbWF0Y2hfaWQ7CisJRUVQUk9NX0FOVEVOTkFfU1RSVUMgYW50ZW5uYTsKKwlVU0hPUlQgYWRkcjAxLCBhZGRyMjMsIGFkZHI0NTsKKwlVSU5UOCBtYWNbNl07CisJVUlOVDMyIGRhdGEsIGNhcmRfaW5kZXg7CisJVUNIQVIgKnN0YXJ0X3B0cjsKKworCisJLy8gaW5pdAorCWJ1ZmZlciA9IGttYWxsb2MoTUFYX0lOSV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCWlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisJdG1wYnVmID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlpZih0bXBidWYgPT0gTlVMTCkKKwl7CisJCWtmcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCW9yZ2ZzdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJb3JnZnNnaWQgPSBjdXJyZW50LT5mc2dpZDsKKwljdXJyZW50LT5mc3VpZCA9IGN1cnJlbnQtPmZzZ2lkID0gMDsKKyAgICBvcmdmcyA9IGdldF9mcygpOworICAgIHNldF9mcyhLRVJORUxfRFMpOworCisJLy8gZ2V0IFJGIElDIHR5cGUKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZkYXRhKTsKKworCWlmICgoZGF0YSAmIDB4MzApID09IDApCisJCXBBZC0+RUVQUk9NQWRkcmVzc051bSA9IDY7CS8vIDkzQzQ2CisJZWxzZSBpZiAoKGRhdGEgJiAweDMwKSA9PSAweDEwKQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA4OwkvLyA5M0M2NgorCWVsc2UKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gODsJLy8gOTNDODYKKworCS8vYW50ZW5uYS53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX05JQzFfT0ZGU0VUKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMxX09GRlNFVCwgYW50ZW5uYS53b3JkKTsKKworCWlmICgoYW50ZW5uYS5maWVsZC5SZkljVHlwZSA9PSBSRklDXzI4NTApIHx8CisJCShhbnRlbm5hLmZpZWxkLlJmSWNUeXBlID09IFJGSUNfMjc1MCkpCisJeworCQkvKiBBQkdOIGNhcmQgKi8KKwkJc3RyY3B5KFJGSUNfd29yZCwgImFiZ24iKTsKKwl9CisJZWxzZQorCXsKKwkJLyogQkdOIGNhcmQgKi8KKwkJc3RyY3B5KFJGSUNfd29yZCwgImJnbiIpOworCX0KKworCS8vIGdldCBNQUMgYWRkcmVzcworCS8vYWRkcjAxID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNCk7CisJLy9hZGRyMjMgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCAweDA2KTsKKwkvL2FkZHI0NSA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDgpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNCwgYWRkcjAxKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDYsIGFkZHIyMyk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA4LCBhZGRyNDUpOworCisJbWFjWzBdID0gKFVDSEFSKShhZGRyMDEgJiAweGZmKTsKKwltYWNbMV0gPSAoVUNIQVIpKGFkZHIwMSA+PiA4KTsKKwltYWNbMl0gPSAoVUNIQVIpKGFkZHIyMyAmIDB4ZmYpOworCW1hY1szXSA9IChVQ0hBUikoYWRkcjIzID4+IDgpOworCW1hY1s0XSA9IChVQ0hBUikoYWRkcjQ1ICYgMHhmZik7CisJbWFjWzVdID0gKFVDSEFSKShhZGRyNDUgPj4gOCk7CisKKwkvLyBvcGVuIGNhcmQgaW5mb3JtYXRpb24gZmlsZQorCXNyY2YgPSBmaWxwX29wZW4oQ0FSRF9JTkZPX1BBVEgsIE9fUkRPTkxZLCAwKTsKKwlpZiAoSVNfRVJSKHNyY2YpKQorCXsKKwkJLyogY2FyZCBpbmZvcm1hdGlvbiBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkoIi0tPiBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwgLVBUUl9FUlIoc3JjZiksIENBUkRfSU5GT19QQVRIKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoc3JjZi0+Zl9vcCAmJiBzcmNmLT5mX29wLT5yZWFkKQorCXsKKwkJLyogY2FyZCBpbmZvcm1hdGlvbiBmaWxlIGV4aXN0cyBzbyByZWFkaW5nIHRoZSBjYXJkIGluZm9ybWF0aW9uICovCisJCW1lbXNldChidWZmZXIsIDB4MDAsIE1BWF9JTklfQlVGRkVSX1NJWkUpOworCQlyZXR2YWwgPSBzcmNmLT5mX29wLT5yZWFkKHNyY2YsIGJ1ZmZlciwgTUFYX0lOSV9CVUZGRVJfU0laRSwgJnNyY2YtPmZfcG9zKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCXsKKwkJCS8qIHJlYWQgZmFpbCAqLworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkoIi0tPiBSZWFkICVzIGVycm9yICVkXG4iLCBDQVJEX0lORk9fUEFUSCwgLXJldHZhbCkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogZ2V0IGNhcmQgc2VsZWN0aW9uIG1ldGhvZCAqLworCQkJbWVtc2V0KHRtcGJ1ZiwgMHgwMCwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKwkJCWNhcmRfc2VsZWN0X21ldGhvZCA9IE1DX1NFTEVDVF9DQVJEVFlQRTsgLy8gZGVmYXVsdAorCisJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiU0VMRUNUIiwgdG1wYnVmLCAyNTYsIGJ1ZmZlcikpCisJCQl7CisJCQkJaWYgKHN0cmNtcCh0bXBidWYsICJDQVJESUQiKSA9PSAwKQorCQkJCQljYXJkX3NlbGVjdF9tZXRob2QgPSBNQ19TRUxFQ1RfQ0FSRElEOworCQkJCWVsc2UgaWYgKHN0cmNtcCh0bXBidWYsICJNQUMiKSA9PSAwKQorCQkJCQljYXJkX3NlbGVjdF9tZXRob2QgPSBNQ19TRUxFQ1RfTUFDOworCQkJCWVsc2UgaWYgKHN0cmNtcCh0bXBidWYsICJDQVJEVFlQRSIpID09IDApCisJCQkJCWNhcmRfc2VsZWN0X21ldGhvZCA9IE1DX1NFTEVDVF9DQVJEVFlQRTsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJCSgiTUM+IENhcmQgU2VsZWN0aW9uID0gJWRcbiIsIGNhcmRfc2VsZWN0X21ldGhvZCkpOworCisJCQkvLyBpbml0CisJCQljYXJkX2ZyZWVfaWQgPSAtMTsKKwkJCWNhcmRfbm91c2VfaWQgPSAtMTsKKwkJCWNhcmRfc2FtZV9tYWNfaWQgPSAtMTsKKwkJCWNhcmRfbWF0Y2hfaWQgPSAtMTsKKworCQkJLy8gc2VhcmNoIGN1cnJlbnQgY2FyZCBpbmZvcm1hdGlvbiByZWNvcmRzCisJCQlmb3IoY2FyZF9pbmRleD0wOworCQkJCWNhcmRfaW5kZXg8TUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEOworCQkJCWNhcmRfaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAoKCooVUlOVDMyICopJk1DX0NhcmRNYWNbY2FyZF9pbmRleF1bMF0gPT0gMCkgJiYKKwkJCQkJKCooVUlOVDE2ICopJk1DX0NhcmRNYWNbY2FyZF9pbmRleF1bNF0gPT0gMCkpCisJCQkJeworCQkJCQkvLyBNQUMgaXMgYWxsLTAgc28gdGhlIGVudHJ5IGlzIGF2YWlsYWJsZQorCQkJCQlNQ19DYXJkVXNlZFtjYXJkX2luZGV4XSA9IDA7CisKKwkJCQkJaWYgKGNhcmRfZnJlZV9pZCA8IDApCisJCQkJCQljYXJkX2ZyZWVfaWQgPSBjYXJkX2luZGV4OyAvLyAxc3QgZnJlZSBlbnRyeQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAobWVtY21wKE1DX0NhcmRNYWNbY2FyZF9pbmRleF0sIG1hYywgNikgPT0gMCkKKwkJCQkJeworCQkJCQkJLy8gd2UgZmluZCB0aGUgZW50cnkgd2l0aCBzYW1lIE1BQworCQkJCQkJaWYgKGNhcmRfc2FtZV9tYWNfaWQgPCAwKQorCQkJCQkJCWNhcmRfc2FtZV9tYWNfaWQgPSBjYXJkX2luZGV4OyAvLyAxc3Qgc2FtZSBlbnRyeQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gTUFDIGlzIG5vdCBhbGwtMCBidXQgdXNlZCBmbGFnID09IDAKKwkJCQkJCWlmICgoTUNfQ2FyZFVzZWRbY2FyZF9pbmRleF0gPT0gMCkgJiYKKwkJCQkJCQkoY2FyZF9ub3VzZV9pZCA8IDApKQorCQkJCQkJeworCQkJCQkJCWNhcmRfbm91c2VfaWQgPSBjYXJkX2luZGV4OyAvLyAxc3QgYXZhaWxhYmxlIGVudHJ5CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkoIk1DPiBGcmVlID0gJWQsIFNhbWUgPSAlZCwgTk9VU0UgPSAlZFxuIiwKKwkJCQkJY2FyZF9mcmVlX2lkLCBjYXJkX3NhbWVfbWFjX2lkLCBjYXJkX25vdXNlX2lkKSk7CisKKwkJCWlmICgoY2FyZF9zYW1lX21hY19pZCA+PSAwKSAmJgorCQkJCSgoY2FyZF9zZWxlY3RfbWV0aG9kID09IE1DX1NFTEVDVF9DQVJESUQpIHx8CisJCQkJKGNhcmRfc2VsZWN0X21ldGhvZCA9PSBNQ19TRUxFQ1RfQ0FSRFRZUEUpKSkKKwkJCXsKKwkJCQkvLyBzYW1lIE1BQyBlbnRyeSBpcyBmb3VuZAorCQkJCWNhcmRfbWF0Y2hfaWQgPSBjYXJkX3NhbWVfbWFjX2lkOworCisJCQkJaWYgKGNhcmRfc2VsZWN0X21ldGhvZCA9PSBNQ19TRUxFQ1RfQ0FSRFRZUEUpCisJCQkJeworCQkJCQkvLyBmb3IgQ0FSRFRZUEUKKwkJCQkJc3ByaW50ZihjYXJkX2lkX2J1ZiwgIiUwMmRDQVJEVFlQRSVzIiwKKwkJCQkJCQljYXJkX21hdGNoX2lkLCBSRklDX3dvcmQpOworCisJCQkJCWlmICgoc3RhcnRfcHRyPXJ0c3Ryc3RydW5jYXNlY21wKGJ1ZmZlciwgY2FyZF9pZF9idWYpKSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQkvLyB3ZSBmb3VuZCB0aGUgY2FyZCBJRAorCQkJCQkJTEVUVEVSX0NBU0VfVFJBTlNMQVRFKHN0YXJ0X3B0ciwgY2FyZF9pZF9idWYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIHRoZSBjYXJkIGlzIDFzdCBwbHVnLWluLCB0cnkgdG8gZmluZCB0aGUgbWF0Y2ggY2FyZCBwcm9maWxlCisJCQkJc3dpdGNoKGNhcmRfc2VsZWN0X21ldGhvZCkKKwkJCQl7CisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRJRDogLy8gQ0FSRElECisJCQkJCWRlZmF1bHQ6CisJCQkJCQlpZiAoY2FyZF9mcmVlX2lkID49IDApCisJCQkJCQkJY2FyZF9tYXRjaF9pZCA9IGNhcmRfZnJlZV9pZDsKKwkJCQkJCWVsc2UKKwkJCQkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9ub3VzZV9pZDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgTUNfU0VMRUNUX01BQzogLy8gTUFDCisJCQkJCQlzcHJpbnRmKGNhcmRfaWRfYnVmLCAiTUFDJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQkJCQkJCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLAorCQkJCQkJCQltYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKworCQkJCQkJLyogdHJ5IHRvIGZpbmQgdGhlIGtleSB3b3JkIGluIHRoZSBjYXJkIGZpbGUgKi8KKwkJCQkJCWlmICgoc3RhcnRfcHRyPXJ0c3Ryc3RydW5jYXNlY21wKGJ1ZmZlciwgY2FyZF9pZF9idWYpKSAhPSBOVUxMKQorCQkJCQkJeworCQkJCQkJCUxFVFRFUl9DQVNFX1RSQU5TTEFURShzdGFydF9wdHIsIGNhcmRfaWRfYnVmKTsKKworCQkJCQkJCS8qIGdldCB0aGUgcm93IElEICgyIEFTQ0lJIGNoYXJhY3RlcnMpICovCisJCQkJCQkJc3RhcnRfcHRyIC09IDI7CisJCQkJCQkJY2FyZF9pZF9idWZbMF0gPSAqKHN0YXJ0X3B0cik7CisJCQkJCQkJY2FyZF9pZF9idWZbMV0gPSAqKHN0YXJ0X3B0cisxKTsKKwkJCQkJCQljYXJkX2lkX2J1ZlsyXSA9IDB4MDA7CisKKwkJCQkJCQljYXJkX21hdGNoX2lkID0gc2ltcGxlX3N0cnRvbChjYXJkX2lkX2J1ZiwgMCwgMTApOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBNQ19TRUxFQ1RfQ0FSRFRZUEU6IC8vIENBUkRUWVBFCisJCQkJCQljYXJkX25vdXNlX2lkID0gLTE7CisKKwkJCQkJCWZvcihjYXJkX2luZGV4PTA7CisJCQkJCQkJY2FyZF9pbmRleDxNQVhfTlVNX09GX01VTFRJUExFX0NBUkQ7CisJCQkJCQkJY2FyZF9pbmRleCsrKQorCQkJCQkJeworCQkJCQkJCXNwcmludGYoY2FyZF9pZF9idWYsICIlMDJkQ0FSRFRZUEUlcyIsCisJCQkJCQkJCQljYXJkX2luZGV4LCBSRklDX3dvcmQpOworCisJCQkJCQkJaWYgKChzdGFydF9wdHI9cnRzdHJzdHJ1bmNhc2VjbXAoYnVmZmVyLAorCQkJCQkJCQkJCQkJCQljYXJkX2lkX2J1ZikpICE9IE5VTEwpCisJCQkJCQkJeworCQkJCQkJCQlMRVRURVJfQ0FTRV9UUkFOU0xBVEUoc3RhcnRfcHRyLCBjYXJkX2lkX2J1Zik7CisKKwkJCQkJCQkJaWYgKE1DX0NhcmRVc2VkW2NhcmRfaW5kZXhdID09IDApCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIGN1cnJlbnQgdGhlIGNhcmQgcHJvZmlsZSBpcyBub3QgdXNlZCAqLworCQkJCQkJCQkJaWYgKCgqKFVJTlQzMiAqKSZNQ19DYXJkTWFjW2NhcmRfaW5kZXhdWzBdID09IDApICYmCisJCQkJCQkJCQkJKCooVUlOVDE2ICopJk1DX0NhcmRNYWNbY2FyZF9pbmRleF1bNF0gPT0gMCkpCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJLy8gZmluZCBpdCBhbmQgbm8gcHJldmlvdXMgY2FyZCB1c2UgaXQKKwkJCQkJCQkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9pbmRleDsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQkvLyBldmVyIGEgY2FyZCB1c2UgaXQKKwkJCQkJCQkJCQlpZiAoY2FyZF9ub3VzZV9pZCA8IDApCisJCQkJCQkJCQkJCWNhcmRfbm91c2VfaWQgPSBjYXJkX2luZGV4OworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBpZiBub3QgZmluZCBhIGZyZWUgb25lLCB1c2UgdGhlIGF2YWlsYWJsZSBvbmUKKwkJCQkJCWlmIChjYXJkX21hdGNoX2lkIDwgMCkKKwkJCQkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9ub3VzZV9pZDsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNhcmRfbWF0Y2hfaWQgPj0gMCkKKwkJCXsKKwkJCQkvLyBtYWtlIHVwIHNlYXJjaCBrZXl3b3JkCisJCQkJc3dpdGNoKGNhcmRfc2VsZWN0X21ldGhvZCkKKwkJCQl7CisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRJRDogLy8gQ0FSRElECisJCQkJCQlzcHJpbnRmKGNhcmRfaWRfYnVmLCAiJTAyZENBUkRJRCIsIGNhcmRfbWF0Y2hfaWQpOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBNQ19TRUxFQ1RfTUFDOiAvLyBNQUMKKwkJCQkJCXNwcmludGYoY2FyZF9pZF9idWYsCisJCQkJCQkJCSIlMDJkbWFjJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQkJCQkJCQljYXJkX21hdGNoX2lkLAorCQkJCQkJCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLAorCQkJCQkJCQltYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRUWVBFOiAvLyBDQVJEVFlQRQorCQkJCQlkZWZhdWx0OgorCQkJCQkJc3ByaW50ZihjYXJkX2lkX2J1ZiwgIiUwMmRjYXJkdHlwZSVzIiwKKwkJCQkJCQkJY2FyZF9tYXRjaF9pZCwgUkZJQ193b3JkKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlYXJjaCBLZXl3b3JkID0gJXNcbiIsIGNhcmRfaWRfYnVmKSk7CisKKwkJCQkvLyByZWFkIGNhcmQgZmlsZSBwYXRoCisJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoY2FyZF9pZF9idWYsIHRtcGJ1ZiwgMjU2LCBidWZmZXIpKQorCQkJCXsKKwkJCQkJaWYgKHN0cmxlbih0bXBidWYpIDwgc2l6ZW9mKHBBZC0+TUNfRmlsZU5hbWUpKQorCQkJCQl7CisJCQkJCQkvLyBiYWNrdXAgY2FyZCBpbmZvcm1hdGlvbgorCQkJCQkJcEFkLT5NQ19Sb3dJRCA9IGNhcmRfbWF0Y2hfaWQ7IC8qIGJhc2UgMCAqLworCQkJCQkJTUNfQ2FyZFVzZWRbY2FyZF9tYXRjaF9pZF0gPSAxOworCQkJCQkJbWVtY3B5KE1DX0NhcmRNYWNbY2FyZF9tYXRjaF9pZF0sIG1hYywgc2l6ZW9mKG1hYykpOworCisJCQkJCQkvLyBiYWNrdXAgY2FyZCBmaWxlIHBhdGgKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TUNfRmlsZU5hbWUsIHRtcGJ1ZiAsIHN0cmxlbih0bXBidWYpKTsKKwkJCQkJCXBBZC0+TUNfRmlsZU5hbWVbc3RybGVuKHRtcGJ1ZildID0gJ1wwJzsKKwkJCQkJCWZsZ19tYXRjaF9vayA9IFRSVUU7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkJCQkoIkNhcmQgUHJvZmlsZSBOYW1lID0gJXNcbiIsIHBBZC0+TUNfRmlsZU5hbWUpKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCQkJCQkoIkNhcmQgUHJvZmlsZSBOYW1lIGxlbmd0aCB0b28gbGFyZ2UhXG4iKSk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCisJCQkJCQkJKCJDYW4gbm90IGZpbmQgc2VhcmNoIGtleSB3b3JkIGluIGNhcmQuZGF0IVxuIikpOworCQkJCX0KKworCQkJCWlmICgoZmxnX21hdGNoX29rICE9IFRSVUUpICYmCisJCQkJCShjYXJkX21hdGNoX2lkIDwgTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEKSkKKwkJCQl7CisJCQkJCU1DX0NhcmRVc2VkW2NhcmRfbWF0Y2hfaWRdID0gMDsKKwkJCQkJbWVtc2V0KE1DX0NhcmRNYWNbY2FyZF9tYXRjaF9pZF0sIDAsIHNpemVvZihtYWMpKTsKKwkJCQl9CisJCQl9IC8vIGlmIChjYXJkX21hdGNoX2lkID49IDApCisJCX0KKwl9CisKKwkvLyBjbG9zZSBmaWxlCisJcmV0dmFsID0gZmlscF9jbG9zZShzcmNmLCBOVUxMKTsKKwlzZXRfZnMob3JnZnMpOworCWN1cnJlbnQtPmZzdWlkID0gb3JnZnN1aWQ7CisJY3VycmVudC0+ZnNnaWQgPSBvcmdmc2dpZDsKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKHRtcGJ1Zik7CisJcmV0dXJuIGZsZ19tYXRjaF9vazsKK30KKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIFByb2JlIFJUMjhYWCBjaGlwc2V0LgorCitBcmd1bWVudHM6CisgICAgX2Rldl9wCQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCV9kZXZfaWRfcAkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZSBJRAorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJUHJvYmUgT0sKKwktRU5PREVWCQkJCVByb2JlIEZhaWwKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBfX2RldmluaXQgICBydDI4eHhfcHJvYmUoCisgICAgSU4gIHZvaWQgKl9kZXZfcCwKKyAgICBJTiAgdm9pZCAqX2Rldl9pZF9wLAorCUlOICBVSU5UIGFyZ2MsCisJT1VUIFBSVE1QX0FEQVBURVIgKnBwQWQpCit7CisgICAgc3RydWN0ICBuZXRfZGV2aWNlCSpuZXRfZGV2OworICAgIFBSVE1QX0FEQVBURVIgICAgICAgcEFkID0gKFBSVE1QX0FEQVBURVIpIE5VTEw7CisgICAgSU5UICAgICAgICAgICAgICAgICBzdGF0dXM7CisJUFZPSUQJCQkJaGFuZGxlOworI2lmZGVmIFJUMjg3MAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKV9kZXZfcDsKKyNlbHNlCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKilfZGV2X3A7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCWRldl9wID0gdXNiX2dldF9kZXYoZGV2X3ApOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTVEEgRHJpdmVyIHZlcnNpb24tJXNcbiIsIFNUQV9EUklWRVJfVkVSU0lPTikpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gQ2hlY2sgY2hpcHNldCB2ZW5kb3IvcHJvZHVjdCBJRAorLy8JaWYgKFJUMjhYWENoaXBzZXRDaGVjayhfZGV2X3ApID09IEZBTFNFKQorLy8JCWdvdG8gZXJyX291dDsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyICAgICAgIC8vIFJlZCBIYXQgNy4xCisgICAgbmV0X2RldiA9IGFsbG9jX25ldGRldihzaXplb2YoUFJUTVBfQURBUFRFUiksICJldGglZCIsIGV0aGVyX3NldHVwKTsKKyNlbHNlCisgICAgbmV0X2RldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihQUlRNUF9BREFQVEVSKSk7CisjZW5kaWYKKyAgICBpZiAobmV0X2RldiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJhbGxvY19uZXRkZXYgZmFpbGVkXG4iKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworI2VuZGlmIC8vTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorI2Vsc2UKKwkJTU9EX0RFQ19VU0VfQ09VTlQ7CisjZW5kaWYKKyAgICAgICAgZ290byBlcnJfb3V0OworICAgIH0KKworLy8gc2FtcGxlCisvLwlpZiAocnRfaWVlZTgwMjExX2lmX3NldHVwKG5ldF9kZXYpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisvLwkJZ290byBlcnJfb3V0OworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQorICAgIFNFVF9NT0RVTEVfT1dORVIobmV0X2Rldik7CisjZW5kaWYKKworCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKy8qIGZvciBzdXBwb3J0aW5nIE5ldHdvcmsgTWFuYWdlciAqLworLyogU2V0IHRoZSBzeXNmcyBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGZvciB0aGUgbmV0d29yayBsb2dpY2FsIGRldmljZQorICogaWYgc2V0IHByaW9yIHRvIHJlZ2lzdHJhdGlvbiB3aWxsIGNhdXNlIGEgc3ltbGluayBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyAgICBTRVRfTkVUREVWX0RFVihuZXRfZGV2LCAmKGRldl9wLT5kZXYpKTsKKyNlbmRpZgorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwkvLyBBbGxvY2F0ZSBSVE1QX0FEQVBURVIgbWluaXBvcnQgYWRhcHRlciBzdHJ1Y3R1cmUKKwloYW5kbGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3NfY29va2llKSwgR0ZQX0tFUk5FTCk7CisJUlQyOFhYX0hBTkRMRV9ERVZfQVNTSUdOKGhhbmRsZSwgZGV2X3ApOworCisJc3RhdHVzID0gUlRNUEFsbG9jQWRhcHRlckJsb2NrKGhhbmRsZSwgJnBBZCk7CisJaWYgKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CisKKwluZXRfZGV2LT5tbF9wcml2ID0gKFBWT0lEKXBBZDsKKyAgICBwQWQtPm5ldF9kZXYgPSBuZXRfZGV2OyAvLyBtdXN0IGJlIGJlZm9yZSBSVDI4WFhOZXREZXZJbml0KCkKKworCVJUMjhYWE5ldERldkluaXQoX2Rldl9wLCBuZXRfZGV2LCBwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgcEFkLT5TdGFDZmcuT3JpRGV2VHlwZSA9IG5ldF9kZXYtPnR5cGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBGaW5kIGFuZCBhc3NpZ24gYSBmcmVlIGludGVyZmFjZSBuYW1lLCByYXh4CisvLwlSVDI4WFhBdmFpbFJBTmFtZUFzc2lnbihuZXRfZGV2LT5uYW1lKTsKKworCS8vIFBvc3QgY29uZmlnCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisJaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgYXJnYykgPT0gRkFMU0UpCisJCWdvdG8gZXJyX291dF91bm1hcDsKKyNlbHNlCisJaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgMCkgPT0gRkFMU0UpCisJCWdvdG8gZXJyX291dF91bm1hcDsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCXBBZC0+T3BNb2RlID0gT1BNT0RFX1NUQTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJLy8gZmluZCBpdHMgcHJvZmlsZSBwYXRoCisJcEFkLT5NQ19Sb3dJRCA9IC0xOyAvLyB1c2UgZGVmYXVsdCBwcm9maWxlIHBhdGgKKwlSVE1QX0NhcmRJbmZvUmVhZChwQWQpOworCisJaWYgKHBBZC0+TUNfUm93SUQgPT0gLTEpCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCXN0cmNweShwQWQtPk1DX0ZpbGVOYW1lLCBTVEFfUFJPRklMRV9QQVRIKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJKCJNQz4gUk9XID0gJWQsIFBBVEggPSAlc1xuIiwgcEFkLT5NQ19Sb3dJRCwgcEFkLT5NQ19GaWxlTmFtZSkpOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisJLy8gc2FtcGxlIG1vdmUKKwlpZiAocnRfaWVlZTgwMjExX2lmX3NldHVwKG5ldF9kZXYsIHBBZCkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJZ290byBlcnJfb3V0X3VubWFwOworCisgICAgLy8gUmVnaXN0ZXIgdGhpcyBkZXZpY2UKKyAgICBzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgZ290byBlcnJfb3V0X3VubWFwOworCisgICAgLy8gU2V0IGRyaXZlciBkYXRhCisJUlQyOFhYX0RSVkRBVEFfU0VUKF9kZXZfcCk7CisKKworCisJKnBwQWQgPSBwQWQ7CisgICAgcmV0dXJuIDA7IC8vIHByb2JlIG9rCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFUlJPUiBIQU5ETEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitlcnJfb3V0X3VubWFwOgorCVJUTVBGcmVlQWRhcHRlcihwQWQpOworCVJUMjhYWF9VTk1BUCgpOworCitlcnJfb3V0X2ZyZWVfbmV0ZGV2OgorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyAgICBmcmVlX25ldGRldihuZXRfZGV2KTsKKyNlbHNlCisJa2ZyZWUobmV0X2Rldik7CisjZW5kaWYKKworZXJyX291dDoKKwlSVDI4WFhfUFVUX0RFVklDRShkZXZfcCk7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlyZXR1cm4gKExPTkcpTlVMTDsKKyNlbHNlCisgICAgcmV0dXJuIC1FTk9ERVY7IC8qIHByb2JlIGZhaWwgKi8KKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KK30gLyogRW5kIG9mIHJ0Mjh4eF9wcm9iZSAqLworCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgVGhlIGVudHJ5IHBvaW50IGZvciBMaW51eCBrZXJuZWwgc2VudCBwYWNrZXQgdG8gb3VyIGRyaXZlci4KKworQXJndW1lbnRzOgorICAgIHNrX2J1ZmYgKnNrYgkJdGhlIHBvaW50ZXIgcmVmZXIgdG8gYSBza19idWZmZXIuCisKK1JldHVybiBWYWx1ZToKKyAgICAwCisKK05vdGU6CisJVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgb2YgVHggUGF0aCBmb3IgT3MgZGVsaXZlcnkgcGFja2V0IHRvCisJb3VyIGRyaXZlci4gWW91IG9ubHkgY2FuIHB1dCBPUy1kZXBlbmVkICYgU1RBL0FQIGNvbW1vbiBoYW5kbGUgcHJvY2VkdXJlcworCWluIGhlcmUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitpbnQgcnQyOHh4X3BhY2tldF94bWl0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBza2ItPmRldjsKKwlQUlRNUF9BREFQVEVSIHBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJaW50IHN0YXR1cyA9IDA7CisJUE5ESVNfUEFDS0VUIHBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUKSBza2I7CisKKwkvKiBSVDI4NzBTVEEgZG9lcyB0aGlzIGluIFJUTVBTZW5kUGFja2V0cygpICovCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19SRVNPVVJDRVMpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIERyb3Agc2VuZCByZXF1ZXN0IHNpbmNlIHdlIGFyZSBpbiBtb25pdG9yIG1vZGUKKwkJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJeworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJZ290byBkb25lOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisgICAgICAgIC8vIEVhcG9sU3RhcnQgc2l6ZSBpcyAxOAorCWlmIChza2ItPmxlbiA8IDE0KQorCXsKKwkJLy9wcmludGsoImJhZCBwYWNrZXQgc2l6ZTogJWRcbiIsIHBrdC0+bGVuKTsKKwkJaGV4X2R1bXAoImJhZCBwYWNrZXQiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlnb3RvIGRvbmU7CisJfQorCisJUlRNUF9TRVRfUEFDS0VUXzVWVChwUGFja2V0LCAwKTsKKy8vCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgcGt0LT5kYXRhLCBwa3QtPmxlbik7CisjaWZkZWYgQ09ORklHXzVWVF9FTkhBTkNFCisgICAgaWYgKCooaW50Kikoc2tiLT5jYikgPT0gQlJJREdFX1RBRykgeworCQlSVE1QX1NFVF9QQUNLRVRfNVZUKHBQYWNrZXQsIDEpOworICAgIH0KKyNlbmRpZgorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCisJCVNUQVNlbmRQYWNrZXRzKChORElTX0hBTkRMRSlwQWQsIChQUE5ESVNfUEFDS0VUKSAmcFBhY2tldCwgMSk7CisJfQorCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlzdGF0dXMgPSAwOworZG9uZToKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBTZW5kIGEgcGFja2V0IHRvIFdMQU4uCisKK0FyZ3VtZW50czoKKyAgICBza2JfcCAgICAgICAgICAgcG9pbnRzIHRvIG91ciBhZGFwdGVyCisgICAgZGV2X3AgICAgICAgICAgIHdoaWNoIFdMQU4gbmV0d29yayBpbnRlcmZhY2UKKworUmV0dXJuIFZhbHVlOgorICAgIDA6IHRyYW5zbWl0IHN1Y2Nlc3NmdWxseQorICAgIG90aGVyd2lzZTogdHJhbnNtaXQgZmFpbAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIHJ0Mjh4eF9zZW5kX3BhY2tldHMoCisJSU4gc3RydWN0IHNrX2J1ZmYgCQkqc2tiX3AsCisJSU4gc3RydWN0IG5ldF9kZXZpY2UgCSpuZXRfZGV2KQoreworICAgIFJUTVBfQURBUFRFUiAqcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKworCWlmICghKG5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCAoUE5ESVNfUEFDS0VUKXNrYl9wLCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuIDA7CisJfQorCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikmc2tiX3AtPmNiW0NCX09GRl0sIDE1KTsKKwlSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoc2tiX3AsIE1BSU5fTUJTU0lEKTsKKworCXJldHVybiBydDI4eHhfcGFja2V0X3htaXQoc2tiX3ApOworfSAvKiBFbmQgb2YgTUJTU19WaXJ0dWFsSUZfUGFja2V0U2VuZCAqLworCisKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IDB4MjA0MDIJLy8gUmVkIEhhdCA3LjEKKy8vc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXYoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICptYXNrLCB2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKSAvL3NhbXBsZQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldigKKwlpbnQgc2l6ZW9mX3ByaXYsCisJY29uc3QgY2hhciAqbWFzaywKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKQoreworICAgIHN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisgICAgSU5UCQkJCQlhbGxvY19zaXplOworCisKKyAgICAvKiBlbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIHByaXZhdGUgYXJlYSAqLworICAgIGFsbG9jX3NpemUgPSBzaXplb2YgKCpkZXYpICsgc2l6ZW9mX3ByaXYgKyAzMTsKKworICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworICAgIGlmIChkZXYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCSgiYWxsb2NfbmV0ZGV2OiBVbmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlIG1lbW9yeS5cbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtc2V0KGRldiwgMCwgYWxsb2Nfc2l6ZSk7CisKKyAgICBpZiAoc2l6ZW9mX3ByaXYpCisgICAgICAgIGRldi0+bWxfcHJpdiA9ICh2b2lkICopICgoKGxvbmcpKGRldiArIDEpICsgMzEpICYgfjMxKTsKKworICAgIHNldHVwKGRldik7CisgICAgc3RyY3B5KGRldi0+bmFtZSwgbWFzayk7CisKKyAgICByZXR1cm4gZGV2OworfQorI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisKK3ZvaWQgQ2ZnSW5pdEhvb2soUFJUTVBfQURBUFRFUiBwQWQpCit7CisJcEFkLT5iQnJvYWRDb21IVCA9IFRSVUU7Cit9IC8qIEVuZCBvZiBDZmdJbml0SG9vayAqLworCisKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTIKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBxdWVyeSAvcHJvYworc3RydWN0IGl3X3N0YXRpc3RpY3MgKnJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMoCisgICAgSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzIC0tLT5cbiIpKTsKKworCXBBZC0+aXdfc3RhdHMuc3RhdHVzID0gMDsgLy8gU3RhdHVzIC0gZGV2aWNlIGRlcGVuZGVudCBmb3Igbm93CisKKwkvLyBsaW5rIHF1YWxpdHkKKwlwQWQtPml3X3N0YXRzLnF1YWwucXVhbCA9ICgocEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ICogMTIpLzEwICsgMTApOworCWlmKHBBZC0+aXdfc3RhdHMucXVhbC5xdWFsID4gMTAwKQorCQlwQWQtPml3X3N0YXRzLnF1YWwucXVhbCA9IDEwMDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCQlwQWQtPml3X3N0YXRzLnF1YWwubGV2ZWwgPSBSVE1QTWF4UnNzaShwQWQsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMSwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEFkLT5pd19zdGF0cy5xdWFsLm5vaXNlID0gcEFkLT5CYnBXcml0ZUxhdGNoWzY2XTsgLy8gbm9pc2UgbGV2ZWwgKGRCbSkKKworCXBBZC0+aXdfc3RhdHMucXVhbC5ub2lzZSArPSAyNTYgLSAxNDM7CisJcEFkLT5pd19zdGF0cy5xdWFsLnVwZGF0ZWQgPSAxOyAgICAgLy8gRmxhZ3MgdG8ga25vdyBpZiB1cGRhdGVkCisjaWZkZWYgSVdfUVVBTF9EQk0KKwlwQWQtPml3X3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsJLy8gTGV2ZWwgKyBOb2lzZSBhcmUgZEJtCisjZW5kaWYgLy8gSVdfUVVBTF9EQk0gLy8KKworCXBBZC0+aXdfc3RhdHMuZGlzY2FyZC5ud2lkID0gMDsgICAgIC8vIFJ4IDogV3JvbmcgbndpZC9lc3NpZAorCXBBZC0+aXdfc3RhdHMubWlzcy5iZWFjb24gPSAwOyAgICAgIC8vIE1pc3NlZCBiZWFjb25zL3N1cGVyZnJhbWUKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gcnQyOHh4X2dldF93aXJlbGVzc19zdGF0c1xuIikpOworCXJldHVybiAmcEFkLT5pd19zdGF0czsKK30gLyogRW5kIG9mIHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMgKi8KKyNlbmRpZiAvLyBXSVJFTEVTU19FWFQgLy8KKworCisKK3ZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKyNkZWZpbmUgTUFYX1RYX0lOX1RCVFQJCSgxNikKKworfQorCitJTlQgcnQyOHh4X2lvY3RsKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOCU9VVAlzdHJ1Y3QgaWZyZXEJKnJxLAorCUlOCUlOVAkJCQkJY21kKQoreworCVZJUlRVQUxfQURBUFRFUgkqcFZpcnR1YWxBZCA9IE5VTEw7CisJUlRNUF9BREFQVEVSCSpwQWQgPSBOVUxMOworCUlOVAkJCQlyZXQgPSAwOworCisJaWYgKG5ldF9kZXYtPnByaXZfZmxhZ3MgPT0gSU5UX01BSU4pCisJeworCQlwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCX0KKwllbHNlCisJeworCQlwVmlydHVhbEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwkJcEFkID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisKKwlpZiAocEFkID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlyZXQgPSBydDI4eHhfc3RhX2lvY3RsKG5ldF9kZXYsIHJxLCBjbWQpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICByZXR1cm4gZXRoZXJuZXQgc3RhdGlzdGljcyBjb3VudGVyCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIG5ldF9kZXYgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG5ldF9kZXZpY2UKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgbmV0X2RldmljZV9zdGF0cyoKKworICAgIE5vdGU6CisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqUlQyOHh4X2dldF9ldGhlcl9zdGF0cygKKyAgICBJTiAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSBOVUxMOworCisJaWYgKG5ldF9kZXYpCisJCXBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisKKwlpZiAocEFkKQorCXsKKworCQlwQWQtPnN0YXRzLnJ4X3BhY2tldHMgPSBwQWQtPldsYW5Db3VudGVycy5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQ7CisJCXBBZC0+c3RhdHMudHhfcGFja2V0cyA9IHBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydDsKKworCQlwQWQtPnN0YXRzLnJ4X2J5dGVzID0gcEFkLT5SYWxpbmtDb3VudGVycy5SZWNlaXZlZEJ5dGVDb3VudDsKKwkJcEFkLT5zdGF0cy50eF9ieXRlcyA9IHBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CisKKwkJcEFkLT5zdGF0cy5yeF9lcnJvcnMgPSBwQWQtPkNvdW50ZXJzODAyMy5SeEVycm9yczsKKwkJcEFkLT5zdGF0cy50eF9lcnJvcnMgPSBwQWQtPkNvdW50ZXJzODAyMy5UeEVycm9yczsKKworCQlwQWQtPnN0YXRzLnJ4X2Ryb3BwZWQgPSAwOworCQlwQWQtPnN0YXRzLnR4X2Ryb3BwZWQgPSAwOworCisJICAgIHBBZC0+c3RhdHMubXVsdGljYXN0ID0gcEFkLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50LlF1YWRQYXJ0OyAgIC8vIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCisJICAgIHBBZC0+c3RhdHMuY29sbGlzaW9ucyA9IHBBZC0+Q291bnRlcnM4MDIzLk9uZUNvbGxpc2lvbiArIHBBZC0+Q291bnRlcnM4MDIzLk1vcmVDb2xsaXNpb25zOyAgLy8gQ29sbGlzaW9uIHBhY2tldHMKKworCSAgICBwQWQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcjsgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZXIgcmluZyBidWZmIG92ZXJmbG93CisJICAgIHBBZC0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IDA7Ly9wQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50OyAgICAgLy8gcmVjdmVkIHBrdCB3aXRoIGNyYyBlcnJvcgorCSAgICBwQWQtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlJjdkFsaWdubWVudEVycm9yczsgICAgICAgICAgLy8gcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvcgorCSAgICBwQWQtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcjsgICAgICAgICAgICAgICAgICAgLy8gcmVjdidyIGZpZm8gb3ZlcnJ1bgorCSAgICBwQWQtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZXIgbWlzc2VkIHBhY2tldAorCisJICAgIC8vIGRldGFpbGVkIHR4X2Vycm9ycworCSAgICBwQWQtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKKwkgICAgcEFkLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyA9IDA7CisJICAgIHBBZC0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgPSAwOworCisJICAgIC8vIGZvciBjc2xpcCBldGMKKwkgICAgcEFkLT5zdGF0cy5yeF9jb21wcmVzc2VkID0gMDsKKwkgICAgcEFkLT5zdGF0cy50eF9jb21wcmVzc2VkID0gMDsKKworCQlyZXR1cm4gJnBBZC0+c3RhdHM7CisJfQorCWVsc2UKKyAgICAJcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfcHJvZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9wcm9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkYTI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfcHJvZmlsZS5jCkBAIC0wLDAgKzEsMjA0MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitzdGF0aWMgdm9pZCBIVFBhcmFtZXRlcnNIb29rKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCUNIQVIJCSAgKnBWYWx1ZVN0ciwKKwlJTglDSEFSCQkgICpwSW5wdXQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjZGVmaW5lIEVUSF9NQUNfQUREUl9TVFJfTEVOIDE3ICAvLyBpbiBmb3JtYXQgb2YgeHg6eHg6eHg6eHg6eHg6eHgKKworLy8gV2UgYXNzdW1lIHRoZSBzMSBpcyBhIHN0aW5nLCBzMiBpcyBhIG1lbW9yeSBzcGFjZSB3aXRoIDYgYnl0ZXMuIGFuZCBjb250ZW50IG9mIHMxIHdpbGwgYmUgY2hhbmdlZC4KK0JPT0xFQU4gcnRzdHJtYWN0b2hleChjaGFyICpzMSwgY2hhciAqczIpCit7CisJaW50IGkgPSAwOworCWNoYXIgKnB0b2tTID0gczEsICpwdG9rRSA9IHMxOworCisJaWYgKHN0cmxlbihzMSkgIT0gRVRIX01BQ19BRERSX1NUUl9MRU4pCisJCXJldHVybiBGQUxTRTsKKworCXdoaWxlKCgqcHRva1MpICE9ICdcMCcpCisJeworCQlpZigocHRva0UgPSBzdHJjaHIocHRva1MsICc6JykpICE9IE5VTEwpCisJCQkqcHRva0UrKyA9ICdcMCc7CisJCWlmICgoc3RybGVuKHB0b2tTKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCpwdG9rUykpIHx8ICghaXN4ZGlnaXQoKihwdG9rUysxKSkpKQorCQkJYnJlYWs7IC8vIGZhaWwKKwkJQXRvSChwdG9rUywgJnMyW2krK10sIDEpOworCQlwdG9rUyA9IHB0b2tFOworCQlpZiAoaSA9PSA2KQorCQkJYnJlYWs7IC8vIHBhcnNpbmcgZmluaXNoZWQKKwl9CisKKwlyZXR1cm4gKCBpID09IDYgPyBUUlVFIDogRkFMU0UpOworCit9CisKKworLy8gd2UgYXNzdW1lIHRoZSBzMSBhbmQgczIgYm90aCBhcmUgc3RyaW5ncy4KK0JPT0xFQU4gcnRzdHJjYXNlY21wKGNoYXIgKnMxLCBjaGFyICpzMikKK3sKKwljaGFyICpwMSA9IHMxLCAqcDIgPSBzMjsKKworCWlmIChzdHJsZW4oczEpICE9IHN0cmxlbihzMikpCisJCXJldHVybiBGQUxTRTsKKworCXdoaWxlKCpwMSAhPSAnXDAnKQorCXsKKwkJaWYoKCpwMSAhPSAqcDIpICYmICgoKnAxIF4gKnAyKSAhPSAweDIwKSkKKwkJCXJldHVybiBGQUxTRTsKKwkJcDErKzsKKwkJcDIrKzsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gd2UgYXNzdW1lIHRoZSBzMSAoYnVmZmVyKSBhbmQgczIgKGtleSkgYm90aCBhcmUgc3RyaW5ncy4KK2NoYXIgKiBydHN0cnN0cnVuY2FzZWNtcChjaGFyICogczEsIGNoYXIgKiBzMikKK3sKKwlJTlQgbDEsIGwyLCBpOworCWNoYXIgdGVtcDEsIHRlbXAyOworCisJbDIgPSBzdHJsZW4oczIpOworCWlmICghbDIpCisJCXJldHVybiAoY2hhciAqKSBzMTsKKworCWwxID0gc3RybGVuKHMxKTsKKworCXdoaWxlIChsMSA+PSBsMikKKwl7CisJCWwxLS07CisKKwkJZm9yKGk9MDsgaTxsMjsgaSsrKQorCQl7CisJCQl0ZW1wMSA9ICooczEraSk7CisJCQl0ZW1wMiA9ICooczIraSk7CisKKwkJCWlmICgoJ2EnIDw9IHRlbXAxKSAmJiAodGVtcDEgPD0gJ3onKSkKKwkJCQl0ZW1wMSA9ICdBJysodGVtcDEtJ2EnKTsKKwkJCWlmICgoJ2EnIDw9IHRlbXAyKSAmJiAodGVtcDIgPD0gJ3onKSkKKwkJCQl0ZW1wMiA9ICdBJysodGVtcDItJ2EnKTsKKworCQkJaWYgKHRlbXAxICE9IHRlbXAyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPT0gbDIpCisJCQlyZXR1cm4gKGNoYXIgKikgczE7CisKKwkJczErKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsgLy8gbm90IGZvdW5kCit9CisKKy8vYWRkIGJ5IGthdGh5CisKKyAvKioKKyAgKiBzdHJzdHIgLSBGaW5kIHRoZSBmaXJzdCBzdWJzdHJpbmcgaW4gYSAlTlVMIHRlcm1pbmF0ZWQgc3RyaW5nCisgICogQHMxOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkCisgICogQHMyOiBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IKKyAgKi8KK2NoYXIgKiBydHN0cnN0cihjb25zdCBjaGFyICogczEsY29uc3QgY2hhciAqIHMyKQoreworCUlOVCBsMSwgbDI7CisKKwlsMiA9IHN0cmxlbihzMik7CisJaWYgKCFsMikKKwkJcmV0dXJuIChjaGFyICopIHMxOworCisJbDEgPSBzdHJsZW4oczEpOworCisJd2hpbGUgKGwxID49IGwyKQorCXsKKwkJbDEtLTsKKwkJaWYgKCFtZW1jbXAoczEsczIsbDIpKQorCQkJcmV0dXJuIChjaGFyICopIHMxOworCQlzMSsrOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHJzdHJ0b2sgLSBTcGxpdCBhIHN0cmluZyBpbnRvIHRva2VucworICogQHM6IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWQKKyAqIEBjdDogVGhlIGNoYXJhY3RlcnMgdG8gc2VhcmNoIGZvcgorICogKiBXQVJOSU5HOiBzdHJ0b2sgaXMgZGVwcmVjYXRlZCwgdXNlIHN0cnNlcCBpbnN0ZWFkLiBIb3dldmVyIHN0cnNlcCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9sZCBhcmNoaXRlY3R1cmUuCisgKi8KK2NoYXIgKiBfX3JzdHJ0b2s7CitjaGFyICogcnN0cnRvayhjaGFyICogcyxjb25zdCBjaGFyICogY3QpCit7CisJY2hhciAqc2JlZ2luLCAqc2VuZDsKKworCXNiZWdpbiAgPSBzID8gcyA6IF9fcnN0cnRvazsKKwlpZiAoIXNiZWdpbikKKwl7CisJCXJldHVybiBOVUxMOworCX0KKworCXNiZWdpbiArPSBzdHJzcG4oc2JlZ2luLGN0KTsKKwlpZiAoKnNiZWdpbiA9PSAnXDAnKQorCXsKKwkJX19yc3RydG9rID0gTlVMTDsKKwkJcmV0dXJuKCBOVUxMICk7CisJfQorCisJc2VuZCA9IHN0cnBicmsoIHNiZWdpbiwgY3QpOworCWlmIChzZW5kICYmICpzZW5kICE9ICdcMCcpCisJCSpzZW5kKysgPSAnXDAnOworCisJX19yc3RydG9rID0gc2VuZDsKKworCXJldHVybiAoc2JlZ2luKTsKK30KKworLyoqCisgKiBkZWxpbWl0Y250IC0gcmV0dXJuIHRoZSBjb3VudCBvZiBhIGdpdmVuIGRlbGltaXRlciBpbiBhIGdpdmVuIHN0cmluZy4KKyAqIEBzOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLgorICogQGN0OiBUaGUgZGVsaW1pdGVyIHRvIHNlYXJjaCBmb3IuCisgKiBOb3RpY2UgOiBXZSBzdXBwb3NlIHRoZSBkZWxpbWl0ZXIgaXMgYSBzaW5nbGUtY2hhciBzdHJpbmcoZm9yIGV4YW1wbGUgOiAiOyIpLgorICovCitJTlQgZGVsaW1pdGNudChjaGFyICogcyxjb25zdCBjaGFyICogY3QpCit7CisJSU5UIGNvdW50ID0gMDsKKwkvKiBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisJY29uc3QgY2hhciAqdG9rZW4gPSBzOworCisJZm9yICggOzsgKQorCXsKKwkJdG9rZW4gPSBzdHJwYnJrKHRva2VuLCBjdCk7IC8qIHNlYXJjaCBmb3IgZGVsaW1pdGVycyAqLworCisgICAgICAgIGlmICggdG9rZW4gPT0gTlVMTCApCisJCXsKKwkJCS8qIGFkdmFuY2VkIHRvIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlciAqLworCQkJYnJlYWs7CisJCX0KKwkJLyogc2tpcCB0aGUgZGVsaW1pdGVyICovCisJICAgICsrdG9rZW47CisKKwkJLyoKKwkJICogUHJpbnQgdGhlIGZvdW5kIHRleHQ6IHVzZSBsZW4gd2l0aCAlLipzIHRvIHNwZWNpZnkgZmllbGQgd2lkdGguCisJCSAqLworCisJCS8qIGFjY3VtdWxhdGUgZGVsaW1pdGVyIGNvdW50ICovCisJICAgICsrY291bnQ7CisJfQorICAgIHJldHVybiBjb3VudDsKK30KKworLyoKKyAgKiBjb252ZXJ0cyB0aGUgSW50ZXJuZXQgaG9zdCBhZGRyZXNzIGZyb20gdGhlIHN0YW5kYXJkIG51bWJlcnMtYW5kLWRvdHMgbm90YXRpb24KKyAgKiBpbnRvIGJpbmFyeSBkYXRhLgorICAqIHJldHVybnMgbm9uemVybyBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCwgemVybyBpZiBub3QuCisgICovCitpbnQgcnRpbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgCXZhbDsKKwlpbnQgICAgICAgICAJYmFzZSwgbjsKKwljaGFyICAgICAgICAJYzsKKwl1bnNpZ25lZCBpbnQgICAgcGFydHNbNF07CisJdW5zaWduZWQgaW50ICAgICpwcCA9IHBhcnRzOworCisJZm9yICg7OykKKyAgICB7CisgICAgICAgICAvKgorICAgICAgICAgICogQ29sbGVjdCBudW1iZXIgdXAgdG8gYGAuJycuCisgICAgICAgICAgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKKyAgICAgICAgICAqCTB4PWhleCwgMD1vY3RhbCwgb3RoZXI9ZGVjaW1hbC4KKyAgICAgICAgICAqLworICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgIGlmICgqY3AgPT0gJzAnKQorICAgICAgICAgeworICAgICAgICAgICAgIGlmICgqKytjcCA9PSAneCcgfHwgKmNwID09ICdYJykKKyAgICAgICAgICAgICAgICAgYmFzZSA9IDE2LCBjcCsrOworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgYmFzZSA9IDg7CisgICAgICAgICB9CisgICAgICAgICB3aGlsZSAoKGMgPSAqY3ApICE9ICdcMCcpCisgICAgICAgICB7CisgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGMpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gKHZhbCAqIGJhc2UpICsgKGMgLSAnMCcpOworICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKGJhc2UgPT0gMTYgJiYgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGMpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gKHZhbCA8PCA0KSArCisgICAgICAgICAgICAgICAgICAgICAoYyArIDEwIC0gKGlzbG93ZXIoKHVuc2lnbmVkIGNoYXIpIGMpID8gJ2EnIDogJ0EnKSk7CisgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgqY3AgPT0gJy4nKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICogSW50ZXJuZXQgZm9ybWF0OiBhLmIuYy5kIGEuYi5jICAgKHdpdGggYyB0cmVhdGVkIGFzIDE2LWJpdHMpCisgICAgICAgICAgICAgICogYS5iICAgICAod2l0aCBiIHRyZWF0ZWQgYXMgMjQgYml0cykKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICBpZiAocHAgPj0gcGFydHMgKyAzIHx8IHZhbCA+IDB4ZmYpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICpwcCsrID0gdmFsLCBjcCsrOworICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGJyZWFrOworICAgICB9CisKKyAgICAgLyoKKyAgICAgICogQ2hlY2sgZm9yIHRyYWlsaW5nIGp1bmsuCisgICAgICAqLworICAgICB3aGlsZSAoKmNwKQorICAgICAgICAgaWYgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqY3ArKykpCisgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgLyoKKyAgICAgICogQ29uY29jdCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCisgICAgICAqLworICAgICBuID0gcHAgLSBwYXJ0cyArIDE7CisgICAgIHN3aXRjaCAobikKKyAgICAgeworCisgICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogYSAtLSAzMiBiaXRzICovCisgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMjogICAgICAgICAvKiBhLmIgLS0gOC4yNCBiaXRzICovCisgICAgICAgICAgICAgaWYgKHZhbCA+IDB4ZmZmZmZmKQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB2YWwgfD0gcGFydHNbMF0gPDwgMjQ7CisgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMzogICAgICAgICAvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLworICAgICAgICAgICAgIGlmICh2YWwgPiAweGZmZmYpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIHZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KTsKKyAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGEuYi5jLmQgLS0gOC44LjguOCBiaXRzICovCisgICAgICAgICAgICAgaWYgKHZhbCA+IDB4ZmYpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIHZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgfQorCisgICAgICphZGRyID0gaHRvbmwodmFsKTsKKyAgICAgcmV0dXJuIDE7CisKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIEZpbmQga2V5IHNlY3Rpb24gZm9yIEdldCBrZXkgcGFyYW1ldGVyLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0YXJ0IGZpbmQgdGhlIGtleSBzZWN0aW9uCisgICAgICAgIHNlY3Rpb24gICAgICAgICAgICAgICAgICAgICB0aGUga2V5IG9mIHRoZSBzZWNpb24gdG8gYmUgZmluZAorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgRmFpbAorICAgICAgICBPdGhlcnMgICAgICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1BVQ0hBUiAgUlRNUEZpbmRTZWN0aW9uKAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlcikKK3sKKyAgICBDSEFSIHRlbXBfYnVmWzMyXTsKKyAgICBQVUNIQVIgIHB0cjsKKworICAgIHN0cmNweSh0ZW1wX2J1ZiwgIkRlZmF1bHQiKTsKKworICAgIGlmKChwdHIgPSBydHN0cnN0cihidWZmZXIsIHRlbXBfYnVmKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAocHRyK3N0cmxlbigiXG4iKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IGtleSBwYXJhbWV0ZXIuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGtleSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGtleSBzdHJpbmcKKyAgICAgICAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24KKyAgICAgICAgZGVzdHNpemUgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdGFydCBmaW5kIHRoZSBrZXkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgIEZhaWwKKworICAgIE5vdGU6CisgICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHZhbHVlIHdpdGggdGhlIG1hdGNoZWQga2V5IChjYXNlIGNhc2Utc2Vuc2l0aXZlKQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBSVE1QR2V0S2V5UGFyYW1ldGVyKAorICAgIElOICBQQ0hBUiAgIGtleSwKKyAgICBPVVQgUENIQVIgICBkZXN0LAorICAgIElOICBJTlQgICAgIGRlc3RzaXplLAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlcikKK3sKKyAgICBVQ0hBUiAqdGVtcF9idWYxID0gTlVMTDsKKyAgICBVQ0hBUiAqdGVtcF9idWYyID0gTlVMTDsKKyAgICBDSEFSICpzdGFydF9wdHI7CisgICAgQ0hBUiAqZW5kX3B0cjsKKyAgICBDSEFSICpwdHI7CisgICAgQ0hBUiAqb2Zmc2V0ID0gMDsKKyAgICBJTlQgIGxlbjsKKworCS8vdGVtcF9idWYxID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKworCWlmKHRlbXBfYnVmMSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKEZBTFNFKTsKKworCS8vdGVtcF9idWYyID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMiwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKwlpZih0ZW1wX2J1ZjIgPT0gTlVMTCkKKwl7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworCX0KKworICAgIC8vZmluZCBzZWN0aW9uCisgICAgaWYoKG9mZnNldCA9IFJUTVBGaW5kU2VjdGlvbihidWZmZXIpKSA9PSBOVUxMKQorICAgIHsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RyY3B5KHRlbXBfYnVmMSwgIlxuIik7CisgICAgc3RyY2F0KHRlbXBfYnVmMSwga2V5KTsKKyAgICBzdHJjYXQodGVtcF9idWYxLCAiPSIpOworCisgICAgLy9zZWFyY2gga2V5CisgICAgaWYoKHN0YXJ0X3B0cj1ydHN0cnN0cihvZmZzZXQsIHRlbXBfYnVmMSkpPT1OVUxMKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RhcnRfcHRyKz1zdHJsZW4oIlxuIik7CisgICAgaWYoKGVuZF9wdHI9cnRzdHJzdHIoc3RhcnRfcHRyLCAiXG4iKSk9PU5VTEwpCisgICAgICAgZW5kX3B0cj1zdGFydF9wdHIrc3RybGVuKHN0YXJ0X3B0cik7CisKKyAgICBpZiAoZW5kX3B0cjxzdGFydF9wdHIpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBOZGlzTW92ZU1lbW9yeSh0ZW1wX2J1ZjIsIHN0YXJ0X3B0ciwgZW5kX3B0ci1zdGFydF9wdHIpOworICAgIHRlbXBfYnVmMltlbmRfcHRyLXN0YXJ0X3B0cl09J1wwJzsKKyAgICBsZW4gPSBzdHJsZW4odGVtcF9idWYyKTsKKyAgICBzdHJjcHkodGVtcF9idWYxLCB0ZW1wX2J1ZjIpOworICAgIGlmKChzdGFydF9wdHI9cnRzdHJzdHIodGVtcF9idWYxLCAiPSIpKSA9PSBOVUxMKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RyY3B5KHRlbXBfYnVmMiwgc3RhcnRfcHRyKzEpOworICAgIHB0ciA9IHRlbXBfYnVmMjsKKyAgICAvL3RyaW0gc3BhY2Ugb3IgdGFiCisgICAgd2hpbGUoKnB0ciAhPSAweDAwKQorICAgIHsKKyAgICAgICAgaWYoICgqcHRyID09ICcgJykgfHwgKCpwdHIgPT0gJ1x0JykgKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbGVuID0gc3RybGVuKHB0cik7CisgICAgbWVtc2V0KGRlc3QsIDB4MDAsIGRlc3RzaXplKTsKKyAgICBzdHJuY3B5KGRlc3QsIHB0ciwgbGVuID49IGRlc3RzaXplID8gIGRlc3RzaXplOiBsZW4pOworCisJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICBvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IGtleSBwYXJhbWV0ZXIuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGtleSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGtleSBzdHJpbmcKKyAgICAgICAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24KKyAgICAgICAgZGVzdHNpemUgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdGFydCBmaW5kIHRoZSBrZXkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgIEZhaWwKKworICAgIE5vdGU6CisgICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHZhbHVlIHdpdGggdGhlIG1hdGNoZWQga2V5IChjYXNlIGNhc2Utc2Vuc2l0aXZlKS4KKyAgICAgICAgSXQgaXMgY2FsbGVkIGZvciBwYXJzaW5nIFNTSUQgYW5kIGFueSBrZXkgc3RyaW5nLgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBSVE1QR2V0Q3JpdGljYWxQYXJhbWV0ZXIoCisgICAgSU4gIFBDSEFSICAga2V5LAorICAgIE9VVCBQQ0hBUiAgIGRlc3QsCisgICAgSU4gIElOVCAgICAgZGVzdHNpemUsCisgICAgSU4gIFBDSEFSICAgYnVmZmVyKQoreworICAgIFVDSEFSICp0ZW1wX2J1ZjEgPSBOVUxMOworICAgIFVDSEFSICp0ZW1wX2J1ZjIgPSBOVUxMOworICAgIENIQVIgKnN0YXJ0X3B0cjsKKyAgICBDSEFSICplbmRfcHRyOworICAgIENIQVIgKnB0cjsKKyAgICBDSEFSICpvZmZzZXQgPSAwOworICAgIElOVCAgbGVuOworCisJLy90ZW1wX2J1ZjEgPSBrbWFsbG9jKE1BWF9QQVJBTV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYxLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCisJaWYodGVtcF9idWYxID09IE5VTEwpCisgICAgICAgIHJldHVybiAoRkFMU0UpOworCisJLy90ZW1wX2J1ZjIgPSBrbWFsbG9jKE1BWF9QQVJBTV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYyLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCWlmKHRlbXBfYnVmMiA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisJfQorCisgICAgLy9maW5kIHNlY3Rpb24KKyAgICBpZigob2Zmc2V0ID0gUlRNUEZpbmRTZWN0aW9uKGJ1ZmZlcikpID09IE5VTEwpCisgICAgeworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdHJjcHkodGVtcF9idWYxLCAiXG4iKTsKKyAgICBzdHJjYXQodGVtcF9idWYxLCBrZXkpOworICAgIHN0cmNhdCh0ZW1wX2J1ZjEsICI9Iik7CisKKyAgICAvL3NlYXJjaCBrZXkKKyAgICBpZigoc3RhcnRfcHRyPXJ0c3Ryc3RyKG9mZnNldCwgdGVtcF9idWYxKSk9PU5VTEwpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdGFydF9wdHIrPXN0cmxlbigiXG4iKTsKKyAgICBpZigoZW5kX3B0cj1ydHN0cnN0cihzdGFydF9wdHIsICJcbiIpKT09TlVMTCkKKyAgICAgICBlbmRfcHRyPXN0YXJ0X3B0citzdHJsZW4oc3RhcnRfcHRyKTsKKworICAgIGlmIChlbmRfcHRyPHN0YXJ0X3B0cikKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIE5kaXNNb3ZlTWVtb3J5KHRlbXBfYnVmMiwgc3RhcnRfcHRyLCBlbmRfcHRyLXN0YXJ0X3B0cik7CisgICAgdGVtcF9idWYyW2VuZF9wdHItc3RhcnRfcHRyXT0nXDAnOworICAgIGxlbiA9IHN0cmxlbih0ZW1wX2J1ZjIpOworICAgIHN0cmNweSh0ZW1wX2J1ZjEsIHRlbXBfYnVmMik7CisgICAgaWYoKHN0YXJ0X3B0cj1ydHN0cnN0cih0ZW1wX2J1ZjEsICI9IikpID09IE5VTEwpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdHJjcHkodGVtcF9idWYyLCBzdGFydF9wdHIrMSk7CisgICAgcHRyID0gdGVtcF9idWYyOworCisgICAgLy90cmltIHRhYgorICAgIC8qIFdlIGNhbm5vdCB0cmltIHNwYWNlKCcgJykgZm9yIFNTSUQgYW5kIGtleSBzdHJpbmcuICovCisgICAgd2hpbGUoKnB0ciAhPSAweDAwKQorICAgIHsKKyAgICAgICAgLy9pZiggKCpwdHIgPT0gJyAnKSB8fCAoKnB0ciA9PSAnXHQnKSApCisgICAgICAgIGlmKCAoKnB0ciA9PSAnXHQnKSApCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsZW4gPSBzdHJsZW4ocHRyKTsKKyAgICBtZW1zZXQoZGVzdCwgMHgwMCwgZGVzdHNpemUpOworICAgIHN0cm5jcHkoZGVzdCwgcHRyLCBsZW4gPj0gZGVzdHNpemUgPyAgZGVzdHNpemU6IGxlbik7CisKKwlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIG9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBHZXQgbXVsdGlwbGUga2V5IHBhcmFtZXRlci4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAga2V5ICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8ga2V5IHN0cmluZworICAgICAgICBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBkZXN0aW5hdGlvbgorICAgICAgICBkZXN0c2l6ZSAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGFzaXplIG9mIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0YXJ0IGZpbmQgdGhlIGtleQorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgICAgICAgRmFpbAorCisgICAgTm90ZToKKyAgICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgdmFsdWUgd2l0aCB0aGUgbWF0Y2hlZCBrZXkgKGNhc2UgY2FzZS1zZW5zaXRpdmUpCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFJUTVBHZXRLZXlQYXJhbWV0ZXJXaXRoT2Zmc2V0KAorICAgIElOICBQQ0hBUiAgIGtleSwKKyAgICBPVVQgUENIQVIgICBkZXN0LAorICAgIE9VVAlVU0hPUlQJKmVuZF9vZmZzZXQsCisgICAgSU4gIElOVCAgICAgZGVzdHNpemUsCisgICAgSU4gIFBDSEFSICAgYnVmZmVyLAorICAgIElOCUJPT0xFQU4JYlRyaW1TcGFjZSkKK3sKKyAgICBVQ0hBUiAqdGVtcF9idWYxID0gTlVMTDsKKyAgICBVQ0hBUiAqdGVtcF9idWYyID0gTlVMTDsKKyAgICBDSEFSICpzdGFydF9wdHI7CisgICAgQ0hBUiAqZW5kX3B0cjsKKyAgICBDSEFSICpwdHI7CisgICAgQ0hBUiAqb2Zmc2V0ID0gMDsKKyAgICBJTlQgIGxlbjsKKworCWlmICgqZW5kX29mZnNldCA+PSBNQVhfSU5JX0JVRkZFUl9TSVpFKQorCQlyZXR1cm4gKEZBTFNFKTsKKworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYxLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCisJaWYodGVtcF9idWYxID09IE5VTEwpCisgICAgICAgIHJldHVybiAoRkFMU0UpOworCisJb3NfYWxsb2NfbWVtKE5VTEwsICZ0ZW1wX2J1ZjIsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisJaWYodGVtcF9idWYyID09IE5VTEwpCisJeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKwl9CisKKyAgICAvL2ZpbmQgc2VjdGlvbgorCWlmKCplbmRfb2Zmc2V0ID09IDApCisgICAgeworCQlpZiAoKG9mZnNldCA9IFJUTVBGaW5kU2VjdGlvbihidWZmZXIpKSA9PSBOVUxMKQorCQl7CisJCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworCSAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAJICAgIHJldHVybiAoRkFMU0UpOworCQl9CisgICAgfQorCWVsc2UKKwkJb2Zmc2V0ID0gYnVmZmVyICsgKCplbmRfb2Zmc2V0KTsKKworICAgIHN0cmNweSh0ZW1wX2J1ZjEsICJcbiIpOworICAgIHN0cmNhdCh0ZW1wX2J1ZjEsIGtleSk7CisgICAgc3RyY2F0KHRlbXBfYnVmMSwgIj0iKTsKKworICAgIC8vc2VhcmNoIGtleQorICAgIGlmKChzdGFydF9wdHI9cnRzdHJzdHIob2Zmc2V0LCB0ZW1wX2J1ZjEpKT09TlVMTCkKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0YXJ0X3B0cis9c3RybGVuKCJcbiIpOworICAgIGlmKChlbmRfcHRyPXJ0c3Ryc3RyKHN0YXJ0X3B0ciwgIlxuIikpPT1OVUxMKQorICAgICAgIGVuZF9wdHI9c3RhcnRfcHRyK3N0cmxlbihzdGFydF9wdHIpOworCisgICAgaWYgKGVuZF9wdHI8c3RhcnRfcHRyKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisJKmVuZF9vZmZzZXQgPSBlbmRfcHRyIC0gYnVmZmVyOworCisgICAgTmRpc01vdmVNZW1vcnkodGVtcF9idWYyLCBzdGFydF9wdHIsIGVuZF9wdHItc3RhcnRfcHRyKTsKKyAgICB0ZW1wX2J1ZjJbZW5kX3B0ci1zdGFydF9wdHJdPSdcMCc7CisgICAgbGVuID0gc3RybGVuKHRlbXBfYnVmMik7CisgICAgc3RyY3B5KHRlbXBfYnVmMSwgdGVtcF9idWYyKTsKKyAgICBpZigoc3RhcnRfcHRyPXJ0c3Ryc3RyKHRlbXBfYnVmMSwgIj0iKSkgPT0gTlVMTCkKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0cmNweSh0ZW1wX2J1ZjIsIHN0YXJ0X3B0cisxKTsKKyAgICBwdHIgPSB0ZW1wX2J1ZjI7CisgICAgLy90cmltIHNwYWNlIG9yIHRhYgorICAgIHdoaWxlKCpwdHIgIT0gMHgwMCkKKyAgICB7CisgICAgICAgIGlmKChiVHJpbVNwYWNlICYmICgqcHRyID09ICcgJykpIHx8ICgqcHRyID09ICdcdCcpICkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxlbiA9IHN0cmxlbihwdHIpOworICAgIG1lbXNldChkZXN0LCAweDAwLCBkZXN0c2l6ZSk7CisgICAgc3RybmNweShkZXN0LCBwdHIsIGxlbiA+PSBkZXN0c2l6ZSA/ICBkZXN0c2l6ZTogbGVuKTsKKworCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworCitzdGF0aWMgaW50IHJ0bXBfcGFyc2Vfa2V5X2J1ZmZlcl9mcm9tX2ZpbGUoSU4gIFBSVE1QX0FEQVBURVIgcEFkLElOICBjaGFyICpidWZmZXIsSU4gIFVMT05HIEtleVR5cGUsSU4gIElOVCBCU1NJZHgsSU4gIElOVCBLZXlJZHgpCit7CisJUFVDSEFSCQlrZXlidWZmOworCUlOVAkJCWkgPSBCU1NJZHgsIGlkeCA9IEtleUlkeDsKKwlVTE9ORwkJS2V5TGVuOworCVVDSEFSCQlDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisKKwlrZXlidWZmID0gYnVmZmVyOworCUtleUxlbiA9IHN0cmxlbihrZXlidWZmKTsKKworCWlmIChLZXlUeXBlID09IDEpCisJey8vQXNjaWkKKwkJaWYoIChLZXlMZW4gPT0gNSkgfHwgKEtleUxlbiA9PSAxMykpCisJCXsKKwkJCXBBZC0+U2hhcmVkS2V5W2ldW2lkeF0uS2V5TGVuID0gS2V5TGVuOworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbaV1baWR4XS5LZXksIGtleWJ1ZmYsIEtleUxlbik7CisJCQlpZiAoS2V5TGVuID09IDUpCisJCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJZWxzZQorCQkJCUNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSS9GKHJhJWQpIEtleSVkU3RyPSVzIGFuZCB0eXBlPSVzXG4iLCBpLCBpZHgrMSwga2V5YnVmZiwgKEtleVR5cGUgPT0gMCkgPyAiSGV4IjoiQXNjaWkiKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlCisJCXsvL0ludmFsaWQga2V5IGxlbmd0aAorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiS2V5JWRTdHIgaXMgSW52YWxpZCBrZXkgbGVuZ3RoISBLZXlMZW4gPSAlbGQhXG4iLCBpZHgrMSwgS2V5TGVuKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwllbHNlCisJey8vSGV4IHR5cGUKKwkJaWYoIChLZXlMZW4gPT0gMTApIHx8IChLZXlMZW4gPT0gMjYpKQorCQl7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLktleUxlbiA9IEtleUxlbiAvIDI7CisJCQlBdG9IKGtleWJ1ZmYsIHBBZC0+U2hhcmVkS2V5W2ldW2lkeF0uS2V5LCBLZXlMZW4gLyAyKTsKKwkJCWlmIChLZXlMZW4gPT0gMTApCisJCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJZWxzZQorCQkJCUNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSS9GKHJhJWQpIEtleSVkU3RyPSVzIGFuZCB0eXBlPSVzXG4iLCBpLCBpZHgrMSwga2V5YnVmZiwgKEtleVR5cGUgPT0gMCkgPyAiSGV4IjoiQXNjaWkiKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlCisJCXsvL0ludmFsaWQga2V5IGxlbmd0aAorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiSS9GKHJhJWQpIEtleSVkU3RyIGlzIEludmFsaWQga2V5IGxlbmd0aCEgS2V5TGVuID0gJWxkIVxuIiwgaSwgaWR4KzEsIEtleUxlbikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCBydG1wX3JlYWRfa2V5X3Bhcm1zX2Zyb21fZmlsZShJTiAgUFJUTVBfQURBUFRFUiBwQWQsIGNoYXIgKnRtcGJ1ZiwgY2hhciAqYnVmZmVyKQoreworCWNoYXIJCXRva19zdHJbMTZdOworCVBVQ0hBUgkJbWFjcHRyOworCUlOVAkJCWkgPSAwLCBpZHg7CisJVUxPTkcJCUtleVR5cGVbTUFYX01CU1NJRF9OVU1dOworCVVMT05HCQlLZXlJZHg7CisKKwlOZGlzWmVyb01lbW9yeShLZXlUeXBlLCBNQVhfTUJTU0lEX05VTSk7CisKKwkvL0RlZmF1bHRLZXlJRAorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkRlZmF1bHRLZXlJRCIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCUtleUlkeCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQlpZigoS2V5SWR4ID49IDEgKSAmJiAoS2V5SWR4IDw9IDQpKQorCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgKEtleUlkeCAtIDEpOworCQkJZWxzZQorCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IDA7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRlZmF1bHRLZXlJRCgwfjMpPSVkXG4iLCBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCisJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykKKwl7CisJCXNwcmludGYodG9rX3N0ciwgIktleSVkVHlwZSIsIGlkeCArIDEpOworCQkvL0tleTFUeXBlCisJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKHRva19zdHIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQl7CisJCSAgICBmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCSAgICB7CisJCQkgICAgS2V5VHlwZVtpXSA9IHNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCk7CisJCSAgICB9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQl7CisJCQkJc3ByaW50Zih0b2tfc3RyLCAiS2V5JWRTdHIiLCBpZHggKyAxKTsKKwkJCQlpZiAoUlRNUEdldENyaXRpY2FsUGFyYW1ldGVyKHRva19zdHIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCXsKKwkJCQkJcnRtcF9wYXJzZV9rZXlfYnVmZmVyX2Zyb21fZmlsZShwQWQsIHRtcGJ1ZiwgS2V5VHlwZVtCU1MwXSwgQlNTMCwgaWR4KTsKKwkJCQl9CisJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKwl9Cit9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorc3RhdGljIHZvaWQgcnRtcF9yZWFkX3N0YV93bW1fcGFybXNfZnJvbV9maWxlKElOICBQUlRNUF9BREFQVEVSIHBBZCwgY2hhciAqdG1wYnVmLCBjaGFyICpidWZmZXIpCit7CisJUFVDSEFSCQkJCQltYWNwdHI7CisJSU5UCQkJCQkJaT0wOworCUJPT0xFQU4JCQkJCWJXbW1FbmFibGUgPSBGQUxTRTsKKworCS8vV21tQ2FwYWJsZQorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIldtbUNhcGFibGUiLCB0bXBidWYsIDMyLCBidWZmZXIpKQorCXsKKwkJaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKSAvL0VuYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSA9IFRSVUU7CisJCQliV21tRW5hYmxlID0gVFJVRTsKKwkJfQorCQllbHNlIC8vRGlzYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSA9IEZBTFNFOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV21tQ2FwYWJsZT0lZFxuIiwgcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpKTsKKwl9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkvL0RMU0NhcGFibGUKKwlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJETFNDYXBhYmxlIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwl7CisJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlID0gVFJVRTsKKwkJfQorCQllbHNlIC8vRGlzYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSA9IEZBTFNFOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYkRMU0NhcGFibGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKSk7CisJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJLy9BY2tQb2xpY3kgZm9yIEFDX0JLLCBBQ19CRSwgQUNfVkksIEFDX1ZPCisJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQWNrUG9saWN5IiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwl7CisJCWZvciAoaSA9IDAsIG1hY3B0ciA9IHJzdHJ0b2sodG1wYnVmLCI7Iik7IG1hY3B0cjsgbWFjcHRyID0gcnN0cnRvayhOVUxMLCI7IiksIGkrKykKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQWNrUG9saWN5W2ldID0gKFVDSEFSKXNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCk7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFja1BvbGljeVslZF09JWRcbiIsIGksIHBBZC0+Q29tbW9uQ2ZnLkFja1BvbGljeVtpXSkpOworCQl9CisJfQorCisJaWYgKGJXbW1FbmFibGUpCisJeworCQkvL0FQU0RDYXBhYmxlCisJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkFQU0RDYXBhYmxlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJeworCQkJaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKSAgLy9FbmFibGUKKwkJCQlwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgPSBUUlVFOworCQkJZWxzZQorCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSA9IEZBTFNFOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBUFNEQ2FwYWJsZT0lZFxuIiwgcEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlKSk7CisJCX0KKworCQkvL0FQU0RBQyBmb3IgQUNfQkUsIEFDX0JLLCBBQ19WSSwgQUNfVk8KKwkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQVBTREFDIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwkJeworCQkJQk9PTEVBTiBhcHNkX2FjWzRdOworCisJCQlmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCQl7CisJCQkJYXBzZF9hY1tpXSA9IChCT09MRUFOKXNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCk7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBUFNEQUMlZCAgJWRcbiIsIGksICBhcHNkX2FjW2ldKSk7CisJCQl9CisKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUgPSBhcHNkX2FjWzBdOworCQkJcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSyA9IGFwc2RfYWNbMV07CisJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJID0gYXBzZF9hY1syXTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8gPSBhcHNkX2FjWzNdOworCQl9CisJfQorCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworTkRJU19TVEFUVVMJUlRNUFJlYWRQYXJhbWV0ZXJzSG9vaygKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQVUNIQVIJCQkJCXNyYyA9IE5VTEw7CisJc3RydWN0IGZpbGUJCQkJKnNyY2Y7CisJSU5UIAkJCQkJcmV0dmFsLCBvcmdmc3VpZCwgb3JnZnNnaWQ7CisgICAJbW1fc2VnbWVudF90CQkJb3JnZnM7CisJQ0hBUgkJCQkJKmJ1ZmZlcjsKKwlDSEFSCQkJCQkqdG1wYnVmOworCVVMT05HCQkJCQlSdHNUaHJlc2g7CisJVUxPTkcJCQkJCUZyYWdUaHJlc2g7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVUNIQVIJICAgICAgICAgICAgICAgIGtleU1hdGVyaWFsWzQwXTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJUFVDSEFSCQkJCQltYWNwdHI7CisJSU5UCQkJCQkJaSA9IDA7CisKKwlidWZmZXIgPSBrbWFsbG9jKE1BWF9JTklfQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlpZihidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisKKwl0bXBidWYgPSBrbWFsbG9jKE1BWF9QQVJBTV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCWlmKHRtcGJ1ZiA9PSBOVUxMKQorCXsKKwkJa2ZyZWUoYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJc3JjID0gU1RBX1BST0ZJTEVfUEFUSDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwlzcmMgPSBwQWQtPk1DX0ZpbGVOYW1lOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisJLy8gU2F2ZSB1aWQgYW5kIGdpZCB1c2VkIGZvciBmaWxlc3lzdGVtIGFjY2Vzcy4KKwkvLyBTZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkKKyNpZiAwCisJb3JnZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsKKwlvcmdmc2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCWN1cnJlbnQtPmZzdWlkPWN1cnJlbnQtPmZzZ2lkID0gMDsKKyNlbmRpZgorICAgIG9yZ2ZzID0gZ2V0X2ZzKCk7CisgICAgc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlpZiAoc3JjICYmICpzcmMpCisJeworCQlzcmNmID0gZmlscF9vcGVuKHNyYywgT19SRE9OTFksIDApOworCQlpZiAoSVNfRVJSKHNyY2YpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIC1QVFJfRVJSKHNyY2YpLHNyYykpOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gVGhlIG9iamVjdCBtdXN0IGhhdmUgYSByZWFkIG1ldGhvZAorCQkJaWYgKHNyY2YtPmZfb3AgJiYgc3JjZi0+Zl9vcC0+cmVhZCkKKwkJCXsKKwkJCQltZW1zZXQoYnVmZmVyLCAweDAwLCBNQVhfSU5JX0JVRkZFUl9TSVpFKTsKKwkJCQlyZXR2YWw9c3JjZi0+Zl9vcC0+cmVhZChzcmNmLCBidWZmZXIsIE1BWF9JTklfQlVGRkVSX1NJWkUsICZzcmNmLT5mX3Bvcyk7CisJCQkJaWYgKHJldHZhbCA8IDApCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUmVhZCAlcyBlcnJvciAlZFxuIiwgc3JjLCAtcmV0dmFsKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIHNldCBmaWxlIHBhcmFtZXRlciB0byBwb3J0Y2ZnCisJCQkJCS8vQ291bnRyeVJlZ2lvbgorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDb3VudHJ5UmVnaW9uIiwgdG1wYnVmLCAyNSwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiA9IChVQ0hBUikgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNvdW50cnlSZWdpb249JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24pKTsKKwkJCQkJfQorCQkJCQkvL0NvdW50cnlSZWdpb25BQmFuZAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDb3VudHJ5UmVnaW9uQUJhbmQiLCB0bXBidWYsIDI1LCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQ9IChVQ0hBUikgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNvdW50cnlSZWdpb25BQmFuZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kKSk7CisJCQkJCX0KKwkJCQkJLy9Db3VudHJ5Q29kZQorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDb3VudHJ5Q29kZSIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlLCB0bXBidWYgLCAyKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlN0YU9yaUNvdW50cnlDb2RlLCB0bXBidWYgLCAyKTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCQlpZiAoc3RybGVuKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKSAhPSAwKQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJDb3VudHJ5RmxhZyA9IFRSVUU7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDb3VudHJ5Q29kZT0lc1xuIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGUpKTsKKwkJCQkJfQorCQkJCQkvL0NoYW5uZWxHZW9ncmFwaHkKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ2hhbm5lbEdlb2dyYXBoeSIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCVVDSEFSIEdlb2dyYXBoeSA9IChVQ0hBUikgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWlmIChHZW9ncmFwaHkgPD0gQk9USCkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBHZW9ncmFwaHk7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGVbMl0gPQorCQkJCQkJCQkocEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID09IEJPVEgpID8gJyAnIDogKChwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPT0gSURPUikgPyAnSScgOiAnTycpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQkJcEFkLT5TdGFDZmcuU3RhT3JpR2VvZ3JhcGh5ID0gcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5OworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsR2VvZ3JhcGh5PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IEJPVEg7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZVsyXSA9ICcgJzsKKwkJCQkJfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJLy9TU0lECisJCQkJCQlpZiAoUlRNUEdldENyaXRpY2FsUGFyYW1ldGVyKCJTU0lEIiwgdG1wYnVmLCAyNTYsIGJ1ZmZlcikpCisJCQkJCQl7CisJCQkJCQkJaWYgKHN0cmxlbih0bXBidWYpIDw9IDMyKQorCQkJCQkJCXsKKwkJCSAJCQkJCXBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4gPSAoVUNIQVIpIHN0cmxlbih0bXBidWYpOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Tc2lkLCBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCk7CisJCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHRtcGJ1ZiwgcEFkLT5Db21tb25DZmcuU3NpZExlbik7CisJCQkJCQkJCXBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiA9IHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW47CisJCQkJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHRtcGJ1ZiwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKwkJCQkJCQkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgdG1wYnVmLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjooU1NJRD0lcylcbiIsIF9fRlVOQ1RJT05fXywgdG1wYnVmKSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJLy9OZXR3b3JrVHlwZQorCQkJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIk5ldHdvcmtUeXBlIiwgdG1wYnVmLCAyNSwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKwkJCQkJCQlpZiAoc3RyY21wKHRtcGJ1ZiwgIkFkaG9jIikgPT0gMCkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19BREhPQzsKKwkJCQkJCQllbHNlIC8vRGVmYXVsdCBJbmZyYXN0cnVjdHVyZSBtb2RlCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfSU5GUkE7CisJCQkJCQkJLy8gUmVzZXQgUmFsaW5rIHN1cHBsaWNhbnQgdG8gbm90IHVzZSwgaXQgd2lsbCBiZSBzZXQgdG8gc3RhcnQgd2hlbiBVSSBzZXQgUE1LIGtleQorCQkJCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjooTmV0d29ya1R5cGU9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBBZC0+U3RhQ2ZnLkJzc1R5cGUpKTsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQkvL0NoYW5uZWwKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ2hhbm5lbCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSAoVUNIQVIpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCQkJCX0KKwkJCQkJLy9XaXJlbGVzc01vZGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiV2lyZWxlc3NNb2RlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJaW50IHZhbHVlICA9IDAsIG1heFBoeU1vZGUgPSBQSFlfMTFHOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCQltYXhQaHlNb2RlID0gUEhZXzExTl81RzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJCQkJdmFsdWUgPSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCisJCQkJCQlpZiAodmFsdWUgPD0gbWF4UGh5TW9kZSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gdmFsdWU7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQaHlNb2RlPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKSk7CisJCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgLy9CYXNpY1JhdGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQmFzaWNSYXRlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID0gKFVMT05HKSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmFzaWNSYXRlPSVsZFxuIiwgcEFkLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwKSk7CisJCQkJCX0KKwkJCQkJLy9CZWFjb25QZXJpb2QKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQmVhY29uUGVyaW9kIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gKFVTSE9SVCkgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblBlcmlvZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kKSk7CisJCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgLy9UeFBvd2VyCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlR4UG93ZXIiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IChVTE9ORykgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQgPSBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4UG93ZXI9JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSkpOworCQkJCQl9CisJCQkJCS8vQkdQcm90ZWN0aW9uCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkJHUHJvdGVjdGlvbiIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6IC8vQWx3YXlzIE9uCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDE7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMjogLy9BbHdheXMgT0ZGCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDI7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMDogLy9BVVRPCisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCR1Byb3RlY3Rpb249JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24pKTsKKwkJCQkJfQorCQkJCQkvL09MQkNEZXRlY3Rpb24KKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiRGlzYWJsZU9MQkMiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAxOiAvL2Rpc2FibGUgT0xCQyBEZXRlY3Rpb24KKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGlzYWJsZU9MQkNEZXRlY3QgPSAxOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDA6IC8vZW5hYmxlIE9MQkMgRGV0ZWN0aW9uCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRpc2FibGVPTEJDRGV0ZWN0ID0gMDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGlzYWJsZU9MQkNEZXRlY3Q9IDA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiT0xCQ0RldGVjdGlvbj0lbGRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkRpc2FibGVPTEJDRGV0ZWN0KSk7CisJCQkJCX0KKwkJCQkJLy9UeFByZWFtYmxlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlR4UHJlYW1ibGUiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBSdDgwMl8xMVByZWFtYmxlU2hvcnQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlU2hvcnQ7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZUxvbmc6CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFJ0ODAyXzExUHJlYW1ibGVMb25nOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4UHJlYW1ibGU9JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlKSk7CisJCQkJCX0KKwkJCQkJLy9SVFNUaHJlc2hvbGQKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiUlRTVGhyZXNob2xkIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJUnRzVGhyZXNoID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWlmKCAoUnRzVGhyZXNoID49IDEpICYmIChSdHNUaHJlc2ggPD0gTUFYX1JUU19USFJFU0hPTEQpICkKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgID0gKFVTSE9SVClSdHNUaHJlc2g7CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gTUFYX1JUU19USFJFU0hPTEQ7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUU1RocmVzaG9sZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkKSk7CisJCQkJCX0KKwkJCQkJLy9GcmFnVGhyZXNob2xkCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkZyYWdUaHJlc2hvbGQiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlGcmFnVGhyZXNoID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBGQUxTRTsKKworCQkJCQkJaWYgKEZyYWdUaHJlc2ggPiBNQVhfRlJBR19USFJFU0hPTEQgfHwgRnJhZ1RocmVzaCA8IE1JTl9GUkFHX1RIUkVTSE9MRCkKKwkJCQkJCXsgLy9pbGxlZ2FsIEZyYWdUaHJlc2ggc28gd2Ugc2V0IGl0IHRvIGRlZmF1bHQKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gVFJVRTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKEZyYWdUaHJlc2ggJSAyID09IDEpCisJCQkJCQl7CisJCQkJCQkJLy8gVGhlIGxlbmd0aCBvZiBlYWNoIGZyYWdtZW50IHNoYWxsIGFsd2F5cyBiZSBhbiBldmVuIG51bWJlciBvZiBvY3RldHMsIGV4Y2VwdCBmb3IgdGhlIGxhc3QgZnJhZ21lbnQKKwkJCQkJCQkvLyBvZiBhbiBNU0RVIG9yIE1NUERVLCB3aGljaCBtYXkgYmUgZWl0aGVyIGFuIGV2ZW4gb3IgYW4gb2RkIG51bWJlciBvZiBvY3RldHMuCisJCQkJCQkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKShGcmFnVGhyZXNoIC0gMSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKUZyYWdUaHJlc2g7CisJCQkJCQl9CisJCQkJCQkvL3BBZC0+Q29tbW9uQ2ZnLkFsbG93RnJhZ1NpemUgPSAocEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpIC0gTEVOR1RIXzgwMl8xMSAtIExFTkdUSF9DUkM7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFnVGhyZXNob2xkPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkpOworCQkJCQl9CisJCQkJCS8vVHhCdXJzdAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJUeEJ1cnN0IiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworLy8jaWZkZWYgV0lGSV9URVNUCisvLwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gRkFMU0U7CisvLyNlbHNlCisJCQkJCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gVFJVRTsKKwkJCQkJCWVsc2UgLy9EaXNhYmxlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgPSBGQUxTRTsKKy8vI2VuZGlmCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeEJ1cnN0PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkpOworCQkJCQl9CisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJCQkJCS8vUGt0QWdncmVnYXRlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlBrdEFnZ3JlZ2F0ZSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA9IFRSVUU7CisJCQkJCQllbHNlIC8vRGlzYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBGQUxTRTsKKyNpZmRlZiBQSUdHWUJBQ0tfU1VQUE9SVAorCQkJCQkJcEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUgPSBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlOworI2VuZGlmIC8vIFBJR0dZQkFDS19TVVBQT1JUIC8vCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQa3RBZ2dyZWdhdGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpKTsKKwkJCQkJfQorI2Vsc2UKKwkJCQkJcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA9IEZBTFNFOworCQkJCQlwQWQtPkNvbW1vbkNmZy5iUGlnZ3lCYWNrQ2FwYWJsZSA9IEZBTFNFOworI2VuZGlmIC8vIEFHR1JFR0FUSU9OX1NVUFBPUlQgLy8KKworCQkJCQkvLyBXbW1DYXBhYmxlCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXJ0bXBfcmVhZF9zdGFfd21tX3Bhcm1zX2Zyb21fZmlsZShwQWQsIHRtcGJ1ZiwgYnVmZmVyKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJCQkvL1Nob3J0U2xvdAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJTaG9ydFNsb3QiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gVFJVRTsKKwkJCQkJCWVsc2UgLy9EaXNhYmxlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgPSBGQUxTRTsKKworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2hvcnRTbG90PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSkpOworCQkJCQl9CisJCQkJCS8vSUVFRTgwMjExSAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJJRUVFODAyMTFIIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkgICAgZm9yIChpID0gMCwgbWFjcHRyID0gcnN0cnRvayh0bXBidWYsIjsiKTsgbWFjcHRyOyBtYWNwdHIgPSByc3RydG9rKE5VTEwsIjsiKSwgaSsrKQorCQkJCQkgICAgeworICAgIAkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisgICAgCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID0gVFJVRTsKKyAgICAJCQkJCQllbHNlIC8vRGlzYWJsZQorICAgIAkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9IEZBTFNFOworCisgICAgCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUVFRTgwMjExSD0lZFxuIiwgcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUgpKTsKKwkJCQkJICAgIH0KKwkJCQkJfQorCQkJCQkvL0NTUGVyaW9kCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkNTUGVyaW9kIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkgICAgaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNTUGVyaW9kID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCA9IDA7CisKKyAgIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNTUGVyaW9kPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCkpOworCQkJCQl9CisKKwkJCQkJLy9SRFJlZ2lvbgorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJSRFJlZ2lvbiIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlpZiAoKHN0cm5jbXAodG1wYnVmLCAiSkFQX1c1MyIsIDcpID09IDApIHx8IChzdHJuY21wKHRtcGJ1ZiwgImphcF93NTMiLCA3KSA9PSAwKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IEpBUF9XNTM7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSAxNTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKChzdHJuY21wKHRtcGJ1ZiwgIkpBUF9XNTYiLCA3KSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJqYXBfdzU2IiwgNykgPT0gMCkpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBKQVBfVzU2OworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmICgoc3RybmNtcCh0bXBidWYsICJKQVAiLCAzKSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJqYXAiLCAzKSA9PSAwKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IEpBUDsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSA9IDU7CisJCQkJCQl9CisJCQkJCQllbHNlICBpZiAoKHN0cm5jbXAodG1wYnVmLCAiRkNDIiwgMykgPT0gMCkgfHwgKHN0cm5jbXAodG1wYnVmLCAiZmNjIiwgMykgPT0gMCkpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBGQ0M7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSA1OworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoKHN0cm5jbXAodG1wYnVmLCAiQ0UiLCAyKSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJjZSIsIDIpID09IDApKQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uID0gQ0U7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSAxMzsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IENFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCQl9CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJEUmVnaW9uPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbikpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBDRTsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCX0KKworCQkJCQkvL1dpcmVsZXNzRXZlbnQKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiV2lyZWxlc3NFdmVudCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTUKKwkJCQkJICAgIGlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgPSAwOwkvLyBkaXNhYmxlCisjZWxzZQorCQkJCQkJcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgPSAwOwkvLyBkaXNhYmxlCisjZW5kaWYKKyAgIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldpcmVsZXNzRXZlbnQ9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSk7CisJCQkJCX0KKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiV2lGaVRlc3QiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCSAgICBpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYldpRmlUZXN0PSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJCQkJZWxzZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCA9IDA7CS8vIGRpc2FibGUKKworICAgCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV2lGaVRlc3Q9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCkpOworCQkJCQl9CisJCQkJCS8vQXV0aE1vZGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQXV0aE1vZGUiLCB0bXBidWYsIDEyOCwgYnVmZmVyKSkKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoKHN0cmNtcCh0bXBidWYsICJXRVBBVVRPIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3ZXBhdXRvIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIlNIQVJFRCIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAic2hhcmVkIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkOworCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiV1BBUFNLIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3cGFwc2siKSA9PSAwKSkKKwkJCQkJCQkgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJXUEFOT05FIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3cGFub25lIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIldQQTJQU0siKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIndwYTJwc2siKSA9PSAwKSkKKwkJCQkJCQkgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIldQQSIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid3BhIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOworCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiV1BBMiIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid3BhMiIpID09IDApKQorCQkJCQkJCSAgICBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6KEVuY3J5cFR5cGU9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykpOworCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQl9CisJCQkJCS8vRW5jcnlwVHlwZQorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJFbmNyeXBUeXBlIiwgdG1wYnVmLCAxMjgsIGJ1ZmZlcikpCisJCQkJCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoKHN0cmNtcCh0bXBidWYsICJXRVAiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIndlcCIpID09IDApKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMJPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIlRLSVAiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgInRraXAiKSA9PSAwKSkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuV2VwU3RhdHVzCT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIkFFUyIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAiYWVzIikgPT0gMCkpCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLldlcFN0YXR1cwk9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMJPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisKKwkJCQkJCQkvLyBVcGRhdGUgYWxsIHdlcHN0YXR1cyByZWxhdGVkCisJCQkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlcgkJPSBwQWQtPlN0YUNmZy5XZXBTdGF0dXM7CisJCQkJCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgCT0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQkJCXBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgCT0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQkJCXBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgCQk9IEZBTFNFOworCisJCQkJCQkJLy9SVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgMCk7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OihFbmNyeXBUeXBlPSVkKVxuIiwgX19GVU5DVElPTl9fLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMpKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJfQorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQl7CisJCQkJCQlpZihSVE1QR2V0Q3JpdGljYWxQYXJhbWV0ZXIoIldQQVBTSyIsIHRtcGJ1ZiwgNTEyLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWludCAgICAgZXJyPTA7CisKKwkJCQkJCQl0bXBidWZbc3RybGVuKHRtcGJ1ZildID0gJ1wwJzsgLy8gbWFrZSBTVEEgY2FuIHByb2Nlc3MgLiReJiBmb3IgV1BBUFNLIGlucHV0CisKKwkJCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKwkJCQkJCQkJKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCisJCQkJCQkJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkJCQkJCQkpCisJCQkJCQkJeworCQkJCQkJCQllcnIgPSAxOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmICgoc3RybGVuKHRtcGJ1ZikgPj0gOCkgJiYgKHN0cmxlbih0bXBidWYpIDwgNjQpKQorCQkJCQkJCXsKKwkJCQkJCQkJUGFzc3dvcmRIYXNoKChjaGFyICopdG1wYnVmLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCBrZXlNYXRlcmlhbCk7CisJCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBNSywga2V5TWF0ZXJpYWwsIDMyKTsKKworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmIChzdHJsZW4odG1wYnVmKSA9PSA2NCkKKwkJCQkJCQl7CisJCQkJCQkJCUF0b0godG1wYnVmLCBrZXlNYXRlcmlhbCwgMzIpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QTUssIGtleU1hdGVyaWFsLCAzMik7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWVyciA9IDE7CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOjooV1BBUFNLIGtleS1zdHJpbmcgcmVxdWlyZWQgOCB+IDY0IGNoYXJhY3RlcnMhKVxuIiwgX19GVU5DVElPTl9fKSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKGVyciA9PSAwKQorCSAgICAgICAgICAgICAgICAgICAgICAgIAkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCQkJCQkJCQkocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8vIFN0YXJ0IFNUQSBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJCQkJCQkJeworCS8qCisJCQkJCQkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisJCQkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgcEFkLT5TdGFDZmcuUE1LLCBMRU5fVEtJUF9FSyk7CisJCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sIExFTl9US0lQX1JYTUlDSyk7CisJCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sIExFTl9US0lQX1RYTUlDSyk7CisKKwkJCQkJCQkJCS8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisJCQkJCQkJCQlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCQkJCQkJCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJKi8KKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCQkJCQkJCQl9CisKKwkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OihXUEFQU0s9JXMpXG4iLCBfX0ZVTkNUSU9OX18sIHRtcGJ1ZikpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJCS8vRGVmYXVsdEtleUlELCBLZXlUeXBlLCBLZXlTdHIKKwkJCQkJcnRtcF9yZWFkX2tleV9wYXJtc19mcm9tX2ZpbGUocEFkLCB0bXBidWYsIGJ1ZmZlcik7CisKKworCQkJCQkvL0hTQ291bnRlcgorCQkJCQkvKmlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhTQ291bnRlciIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6IC8vRW5hYmxlCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVIU0NvdW50ZXIgPSBUUlVFOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDA6IC8vRGlzYWJsZQorCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVIU0NvdW50ZXIgPSBGQUxTRTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkhTQ291bnRlcj0lZFxuIiwgcEFkLT5Db21tb25DZmcuYkVuYWJsZUhTQ291bnRlcik7CisJCQkJCX0qLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCUhUUGFyYW1ldGVyc0hvb2socEFkLCB0bXBidWYsIGJ1ZmZlcik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKwkJCQkJCS8vQ2FycmllckRldGVjdAorCQkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ2FycmllckRldGVjdCIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmICgoc3RybmNtcCh0bXBidWYsICIwIiwgMSkgPT0gMCkpCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID0gRkFMU0U7CisJCQkJCQkJZWxzZSBpZiAoKHN0cm5jbXAodG1wYnVmLCAiMSIsIDEpID09IDApKQorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IFRSVUU7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IEZBTFNFOworCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2FycmllckRldGVjdC5FbmFibGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBGQUxTRTsKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJLy9QU01vZGUKKwkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJQU01vZGUiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKKwkJCQkJCQl7CisJCQkJCQkJCWlmICgoc3RyY21wKHRtcGJ1ZiwgIk1BWF9QU1AiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIm1heF9wc3AiKSA9PSAwKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisJCQkJCQkJCQkvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKwkJCQkJCQkJCS8vCSAgIE1sbWVTZXRQc20ocEFkLCBQV1JfU0FWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTUFYX1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSA1OworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiRmFzdF9QU1AiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgImZhc3RfcHNwIikgPT0gMCkKKwkJCQkJCQkJCXx8IChzdHJjbXAodG1wYnVmLCAiRkFTVF9QU1AiKSA9PSAwKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisJCQkJCQkJCQkvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKwkJCQkJCQkJCS8vCSAgIE1sbWVTZXRQc21CaXQocEFkLCBQV1JfU0FWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlRmFzdF9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJMZWdhY3lfUFNQIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJsZWdhY3lfcHNwIikgPT0gMCkKKwkJCQkJCQkJCXx8IChzdHJjbXAodG1wYnVmLCAiTEVHQUNZX1BTUCIpID09IDApKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvLyBkbyBOT1QgdHVybiBvbiBQU00gYml0IGhlcmUsIHdhaXQgdW50aWwgTWxtZUNoZWNrRm9yUHNtQ2hhbmdlKCkKKwkJCQkJCQkJCS8vIHRvIGV4Y2x1ZGUgY2VydGFpbiBzaXR1YXRpb25zLgorCQkJCQkJCQkJLy8JICAgTWxtZVNldFBzbUJpdChwQWQsIFBXUl9TQVZFKTsKKwkJCQkJCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pOworCQkJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPT0gRkFMU0UpCisJCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQOworCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7IC8vRGVmYXVsdCBOZGlzODAyXzExUG93ZXJNb2RlQ0FNCisJCQkJCQkJCQkvLyBjbGVhciBQU00gYml0IGltbWVkaWF0ZWx5CisJCQkJCQkJCQlNbG1lU2V0UHNtQml0KHBBZCwgUFdSX0FDVElWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworCQkJCQkJCQl9CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBTTW9kZT0lbGRcbiIsIHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUpKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkvLyBGYXN0Um9hbWluZworCQkJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkZhc3RSb2FtaW5nIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSA9PSAwKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5iRmFzdFJvYW1pbmcgPSBGQUxTRTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLmJGYXN0Um9hbWluZyA9IFRSVUU7CisKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGYXN0Um9hbWluZz0lZFxuIiwgcEFkLT5TdGFDZmcuYkZhc3RSb2FtaW5nKSk7CisJCQkJCQl9CisJCQkJCQkvLyBSb2FtVGhyZXNob2xkCisJCQkJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiUm9hbVRocmVzaG9sZCIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCisJCQkJCQl7CisJCQkJCQkJbG9uZyBsSW5mbyA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisKKwkJCQkJCQlpZiAobEluZm8gPiA5MCB8fCBsSW5mbyA8IDYwKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5kQm1Ub1JvYW0gPSAtNzA7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5kQm1Ub1JvYW0gPSAoQ0hBUikoLTEpKmxJbmZvOworCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUm9hbVRocmVzaG9sZD0lZCAgZEJtXG4iLCBwQWQtPlN0YUNmZy5kQm1Ub1JvYW0pKTsKKwkJCQkJCX0KKworCQkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiVEduV2lmaVRlc3QiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgPT0gMCkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0ID0gRkFMU0U7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5iVEduV2lmaVRlc3QgPSBUUlVFOworCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUR25XaWZpVGVzdD0lZFxuIiwgcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0KSk7CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgUlQzMHh4CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJeworCQkJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkFudERpdmVyc2l0eSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCQkJeworCQkJCQkJCQlmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCQkJCQkJCXsKKwkJCQkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuYlJ4QW50RGl2ZXJzaXR5ID0gVFJVRTsKKwkJCQkJCQkJCWVsc2UgLy9EaXNhYmxlCisJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuYlJ4QW50RGl2ZXJzaXR5ID0gRkFMU0U7CisKKwkJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFudERpdmVyc2l0eT0lZFxuIiwgcEFkLT5Db21tb25DZmcuYlJ4QW50RGl2ZXJzaXR5KSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiAlcyBkb2VzIG5vdCBoYXZlIGEgd3JpdGUgbWV0aG9kXG4iLCBzcmMpKTsKKwkJCX0KKworCQkJcmV0dmFsPWZpbHBfY2xvc2Uoc3JjZixOVUxMKTsKKworCQkJaWYgKHJldHZhbCkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gRXJyb3IgJWQgY2xvc2luZyAlc1xuIiwgLXJldHZhbCwgc3JjKSk7CisJCQl9CisJCX0KKwl9CisKKwlzZXRfZnMob3JnZnMpOworI2lmIDAKKwljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOworCWN1cnJlbnQtPmZzZ2lkID0gb3JnZnNnaWQ7CisjZW5kaWYKKworCWtmcmVlKGJ1ZmZlcik7CisJa2ZyZWUodG1wYnVmKTsKKworCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3N0YXRpYyB2b2lkCUhUUGFyYW1ldGVyc0hvb2soCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JQ0hBUgkJICAqcFZhbHVlU3RyLAorCUlOCUNIQVIJCSAgKnBJbnB1dCkKK3sKKworCUlOVCBWYWx1ZTsKKworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9QUk9URUNUIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKyAgICB7CisgICAgICAgIFZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKyAgICAgICAgaWYgKFZhbHVlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJIVFByb3RlY3QgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJIVFByb3RlY3QgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBQcm90ZWN0aW9uICA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkRpc2FibGUiIDogIkVuYWJsZSIpKTsKKyAgICB9CisKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfTUlNT1BTRW5hYmxlIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKyAgICB7CisgICAgICAgIFZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKyAgICAgICAgaWYgKFZhbHVlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBNSU1PUFNFbmFibGUgID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworICAgIH0KKworCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01JTU9QU01vZGUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorICAgIHsKKyAgICAgICAgVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworICAgICAgICBpZiAoVmFsdWUgPiBNTVBTX0VOQUJMRSkKKyAgICAgICAgeworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gTU1QU19FTkFCTEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvL1RPRE86IGFkZCBtaW1vIHBvd2VyIHNhdmluZyBtZWNoYW5pc20KKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IE1NUFNfRU5BQkxFOworCQkJLy9wQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTUlNT1BTIE1vZGUgID0gJWRcbiIsIFZhbHVlKSk7CisgICAgfQorCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0JBRGVjbGluZSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisgICAgeworICAgICAgICBWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisgICAgICAgIGlmIChWYWx1ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogQkEgRGVjbGluZSAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfRGlzYWJsZVJlb3JkZXJpbmciLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorICAgIHsKKyAgICAgICAgVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworICAgICAgICBpZiAoVmFsdWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iRGlzYWJsZVJlb3JkZXJpbmcgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBEaXNhYmxlUmVvcmRlcmluZyAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0F1dG9CQSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisgICAgeworICAgICAgICBWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisgICAgICAgIGlmIChWYWx1ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJICAgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBCQV9OT1RVU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gVFJVRTsKKwkgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IElNTUVEX0JBOworICAgICAgICB9CisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBOworCXBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5OworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogQXV0byBCQSAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisJLy8gVHhfK0hUQyBmcmFtZQorICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9IVEMiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCQkJcEFkLT5IVENFbmFibGUgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKyAgICAgICAgICAgIAkJcEFkLT5IVENFbmFibGUgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBUeCArSFRDIGZyYW1lID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworCX0KKworCS8vIEVuYWJsZSBIVCBMaW5rIEFkYXB0YXRpb24gQ29udHJvbAorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9MaW5rQWRhcHQiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCQkJcEFkLT5iTGlua0FkYXB0ID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisJCQlwQWQtPmJMaW5rQWRhcHQgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBMaW5rIEFkYXB0YXRpb24gQ29udHJvbCA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkRpc2FibGUiIDogIkVuYWJsZSgrSFRDKSIpKTsKKwl9CisKKwkvLyBSZXZlcnNlIERpcmVjdGlvbiBNZWNoYW5pc20KKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfUkRHIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJSZGcgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+SFRDRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBSREcgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUoK0hUQykiKSk7CisJfQorCisKKworCisJLy8gVHggQS1NU1VEID8KKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfQU1TRFUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGUgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBUeCBBLU1TRFUgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisJfQorCisJLy8gTVBEVSBEZW5zaXR5CisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01wZHVEZW5zaXR5IiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlIDw9NyAmJiBWYWx1ZSA+PSAwKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSBWYWx1ZTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBNUERVIERlbnNpdHkgPSAlZFxuIiwgVmFsdWUpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSA9IDQ7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTVBEVSBEZW5zaXR5ID0gJWQgKERlZmF1bHQpXG4iLCA0KSk7CisJCX0KKwl9CisKKwkvLyBNYXggUnggQkEgV2luZG93IFNpemUKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfQkFXaW5TaXplIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworCQlpZiAoVmFsdWUgPj0xICYmIFZhbHVlIDw9IDY0KQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gVmFsdWU7CisJCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gVmFsdWU7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogQkEgV2luZHcgU2l6ZSA9ICVkXG4iLCBWYWx1ZSkpOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IEJBIFdpbmR3IFNpemUgPSA2NCAoRGVmdWFsdClcbiIpKTsKKwkJfQorCisJfQorCisJLy8gR3VhcmQgSW50ZXJ2YWwKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfR0kiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSBHSV80MDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJID0gR0lfNDAwOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogR3VhcmQgSW50ZXJ2YWwgPSAlc1xuIiwgKFZhbHVlPT1HSV80MDApID8gIjQwMCIgOiAiODAwIiApKTsKKwl9CisKKwkvLyBIVCBPcGVyYXRpb24gTW9kZSA6IE1peGVkIE1vZGUgLCBHcmVlbiBGaWVsZAorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9PcE1vZGUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSBIVE1PREVfR0YpCisJCXsKKworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSAgPSBIVE1PREVfR0Y7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFICA9IEhUTU9ERV9NTTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBPcGVyYXRlIE1vZGUgPSAlc1xuIiwgKFZhbHVlPT1IVE1PREVfR0YpID8gIkdyZWVuIEZpZWxkIiA6ICJNaXhlZCBNb2RlIiApKTsKKwl9CisKKwkvLyBGaXhlZCBUeCBtb2RlIDogQ0NLLCBPRkRNCisJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkZpeGVkVHhNb2RlIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVVDSEFSCWZpeF90eF9tb2RlOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCisJCQlpZiAoc3RyY21wKHBWYWx1ZVN0ciwgIk9GRE0iKSA9PSAwIHx8IHN0cmNtcChwVmFsdWVTdHIsICJvZmRtIikgPT0gMCkKKwkJCXsKKwkJCQlmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9PRkRNOworCQkJfQorCQkJZWxzZSBpZiAoc3RyY21wKHBWYWx1ZVN0ciwgIkNDSyIpID09IDAgfHwgc3RyY21wKHBWYWx1ZVN0ciwgImNjayIpID09IDApCisJCQl7CisJCSAgICAgICAgZml4X3R4X21vZGUgPSBGSVhFRF9UWE1PREVfQ0NLOworCQkJfQorCQkJZWxzZSBpZiAoc3RyY21wKHBWYWx1ZVN0ciwgIkhUIikgPT0gMCB8fCBzdHJjbXAocFZhbHVlU3RyLCAiaHQiKSA9PSAwKQorCQkJeworCQkgICAgICAgIGZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCQl9CisJCWVsc2UKKwkJeworCQkJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJCQkvLyAxIDogQ0NLCisJCQkJLy8gMiA6IE9GRE0KKwkJCQkvLyBvdGhlcndpc2UgOiBIVAorCQkJCWlmIChWYWx1ZSA9PSBGSVhFRF9UWE1PREVfQ0NLIHx8IFZhbHVlID09IEZJWEVEX1RYTU9ERV9PRkRNKQorCQkJCQlmaXhfdHhfbW9kZSA9IFZhbHVlOworCQkJCWVsc2UKKwkJCQkJZml4X3R4X21vZGUgPSBGSVhFRF9UWE1PREVfSFQ7CisJCX0KKworCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSA9IGZpeF90eF9tb2RlOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRml4ZWQgVHggTW9kZSA9ICVkXG4iLCBmaXhfdHhfbW9kZSkpOworCisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKworCS8vIENoYW5uZWwgV2lkdGgKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfQlciLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSBCV180MCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzQwOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCQl9CisKKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisJCXBBZC0+Q29tbW9uQ2ZnLk1DYXN0UGh5TW9kZS5maWVsZC5CVyA9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVzsKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IENoYW5uZWwgV2lkdGggPSAlc1xuIiwgKFZhbHVlPT1CV180MCkgPyAiNDAgTUh6IiA6ICIyMCBNSHoiICkpOworCX0KKworCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9FWFRDSEEiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSAwKQorCQl7CisKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgID0gRVhUQ0hBX0JFTE9XOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9BQk9WRTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBFeHQgQ2hhbm5lbCA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkJFTE9XIiA6ICJBQk9WRSIgKSk7CisJfQorCisJLy8gTVNDCisJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01DUyIsIHBWYWx1ZVN0ciwgNTAsIHBJbnB1dCkpCisJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworLy8JCQlpZiAoKFZhbHVlID49IDAgJiYgVmFsdWUgPD0gMTUpIHx8IChWYWx1ZSA9PSAzMikpCisJCQlpZiAoKFZhbHVlID49IDAgJiYgVmFsdWUgPD0gMjMpIHx8IChWYWx1ZSA9PSAzMikpIC8vIDMqMworCQl7CisJCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgID0gVmFsdWU7CisJCQkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTUNTID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgID0gTUNTX0FVVE87CisJCQkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBNQ1MgPSBBVVRPXG4iKSk7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJLy8gU1RCQworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9TVEJDIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IFNUQkNfVVNFKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQyA9IFNUQkNfVVNFOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IFNUQkMgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkMpKTsKKwl9CisKKwkvLyA0MF9NaHpfSW50b2xlcmFudAorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF80ME1IWl9JTlRPTEVSQU5UIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJGb3J0eV9NaHpfSW50b2xlcmFudCA9IEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuYkZvcnR5X01oel9JbnRvbGVyYW50ID0gVFJVRTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogNDBNSFogSU5UT0xFUkFOVCA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iRm9ydHlfTWh6X0ludG9sZXJhbnQpKTsKKwl9CisJLy9IVF9UeFN0cmVhbQorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX1R4U3RyZWFtIiwgcFZhbHVlU3RyLCAxMCwgcElucHV0KSkKKwl7CisJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKSkKKwkJeworCQkJY2FzZSAxOgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6IC8vIDMqMworCQkJZGVmYXVsdDoKKwkJCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IDM7CisKKwkJCQlpZiAocEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzI4ODNfVkVSU0lPTikKKwkJCQkJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSAyOyAvLyBvbmx5IDIgdHggc3RyZWFtcyBmb3IgUlQyODYwIHNlcmllcworCQkJCWJyZWFrOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBUeCBTdHJlYW0gPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuVHhTdHJlYW0pKTsKKwl9CisJLy9IVF9SeFN0cmVhbQorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX1J4U3RyZWFtIiwgcFZhbHVlU3RyLCAxMCwgcElucHV0KSkKKwl7CisJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKSkKKwkJeworCQkJY2FzZSAxOgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQlkZWZhdWx0OgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMzsKKworCQkJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPCBSQUxJTktfMjg4M19WRVJTSU9OKQorCQkJCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDI7IC8vIG9ubHkgMiByeCBzdHJlYW1zIGZvciBSVDI4NjAgc2VyaWVzCisJCQkJYnJlYWs7CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IFJ4IFN0cmVhbSA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSkpOworCX0KKworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGQ3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXAuaApAQCAtMCwwICsxLDc3MjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcC5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUGF1bCBMaW4gICAgMjAwMi0wOC0wMSAgICBjcmVhdGVkCisgICAgSmFtZXMgVGFuICAgMjAwMi0wOS0wNiAgICBtb2RpZmllZCAoUmV2aXNlIE5UQ1JlZ1RhYmxlKQorICAgIEpvaG4gQ2hhbmcgIDIwMDQtMDktMDYgICAgbW9kaWZpZWQgZm9yIFJUMjYwMAorKi8KKyNpZm5kZWYgX19SVE1QX0hfXworI2RlZmluZSBfX1JUTVBfSF9fCisKKyNpbmNsdWRlICJsaW5rX2xpc3QuaCIKKyNpbmNsdWRlICJzcGVjdHJ1bV9kZWYuaCIKKworI2lmZGVmIE1MTUVfRVgKKyNpbmNsdWRlICJtbG1lX2V4X2RlZi5oIgorI2VuZGlmIC8vIE1MTUVfRVggLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2luY2x1ZGUgImFpcm9uZXQuaCIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI3VuZGVmIEFQX1dTQ19JTkNMVURFRAorI3VuZGVmIFNUQV9XU0NfSU5DTFVERUQKKyN1bmRlZiBXU0NfSU5DTFVERUQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZiBkZWZpbmVkKEFQX1dTQ19JTkNMVURFRCkgfHwgZGVmaW5lZChTVEFfV1NDX0lOQ0xVREVEKQorI2RlZmluZSBXU0NfSU5DTFVERUQKKyNlbmRpZgorCisKKworCisKKy8vI2RlZmluZSBEQkcJCTEKKworLy8jZGVmaW5lIERCR19ESUFHTk9TRQkJMQorCisjaWYgZGVmaW5lZChDT05GSUdfQVBfU1VQUE9SVCkgJiYgZGVmaW5lZChDT05GSUdfU1RBX1NVUFBPUlQpCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX0FQKF9wQWQpCWlmKF9wQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShfcEFkKQlpZihfcEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKyNlbHNlCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX0FQKF9wQWQpCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShfcEFkKQorI2VuZGlmCisKKyNkZWZpbmUgVklSVFVBTF9JRl9JTkMoX19wQWQpICgoX19wQWQpLT5WaXJ0dWFsSWZDbnQrKykKKyNkZWZpbmUgVklSVFVBTF9JRl9ERUMoX19wQWQpICgoX19wQWQpLT5WaXJ0dWFsSWZDbnQtLSkKKyNkZWZpbmUgVklSVFVBTF9JRl9OVU0oX19wQWQpICgoX19wQWQpLT5WaXJ0dWFsSWZDbnQpCisKKyNpZmRlZiBSVDI4NzAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRoZSBUWF9CVUZGRVIgc3RydWN0dXJlIGZvcm1zIHRoZSB0cmFuc21pdHRlZCBVU0IgcGFja2V0IHRvIHRoZSBkZXZpY2UKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3R5cGVkZWYgc3RydWN0IF9fVFhfQlVGRkVSeworCXVuaW9uCXsKKwkJVUNIQVIJCQlXaXJlbGVzc1BhY2tldFtUWF9CVUZGRVJfTk9STVNJWkVdOworCQlIRUFERVJfODAyXzExCU51bGxGcmFtZTsKKwkJUFNQT0xMX0ZSQU1FCVBzUG9sbFBhY2tldDsKKwkJUlRTX0ZSQU1FCQlSVFNGcmFtZTsKKwl9ZmllbGQ7CisJVUNIQVIJCQlBZ2dyZWdhdGlvbls0XTsgIC8vQnVmZmVyIGZvciBzYXZlIEFnZ3JlZ2F0aW9uIHNpemUuCit9IFRYX0JVRkZFUiwgKlBUWF9CVUZGRVI7CisKK3R5cGVkZWYgc3RydWN0IF9fSFRUWF9CVUZGRVJ7CisJdW5pb24JeworCQlVQ0hBUgkJCVdpcmVsZXNzUGFja2V0W01BWF9UWEJVTEtfU0laRV07CisJCUhFQURFUl84MDJfMTEJTnVsbEZyYW1lOworCQlQU1BPTExfRlJBTUUJUHNQb2xsUGFja2V0OworCQlSVFNfRlJBTUUJCVJUU0ZyYW1lOworCX1maWVsZDsKKwlVQ0hBUgkJCUFnZ3JlZ2F0aW9uWzRdOyAgLy9CdWZmZXIgZm9yIHNhdmUgQWdncmVnYXRpb24gc2l6ZS4KK30gSFRUWF9CVUZGRVIsICpQSFRUWF9CVUZGRVI7CisKKworLy8gdXNlZCB0byB0cmFjayBkcml2ZXItZ2VuZXJhdGVkIHdyaXRlIGlycHMKK3R5cGVkZWYgc3RydWN0IF9UWF9DT05URVhUCit7CisJUFZPSUQJCQlwQWQ7CQkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVBVUkIJCQlwVXJiOwkJCS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJUElSUAkJCXBJcnA7CQkJLy91c2VkIHRvIGNhbmNlbCBwZW5kaW5nIGJ1bGsgb3V0LgorCQkJCQkJCQkJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlQVFhfQlVGRkVSCQlUcmFuc2ZlckJ1ZmZlcjsJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlVTE9ORwkJCUJ1bGtPdXRTaXplOworCVVDSEFSCQkJQnVsa091dFBpcGVJZDsKKwlVQ0hBUgkJCVNlbGZJZHg7CisJQk9PTEVBTgkJCUluVXNlOworCUJPT0xFQU4JCQliV2FpdGluZ0J1bGtPdXQ7IC8vIGF0IGxlYXN0IG9uZSBwYWNrZXQgaXMgaW4gdGhpcyBUeENvbnRleHQsIHJlYWR5IGZvciBtYWtpbmcgSVJQIGFueXRpbWUuCisJQk9PTEVBTgkJCWJGdWxsRm9yQnVsa091dDsgLy8gYWxsIHR4IGJ1ZmZlciBhcmUgZnVsbCAsIHNvIHdhaXRpbmcgZm9yIHR4IGJ1bGtvdXQuCisJQk9PTEVBTgkJCUlSUFBlbmRpbmc7CisJQk9PTEVBTgkJCUxhc3RPbmU7CisJQk9PTEVBTgkJCWJBZ2dyZWdhdGlibGU7CisJVUNIQVIJCQlIZWFkZXJfODAyXzNbTEVOR1RIXzgwMl8zXTsKKwlVQ0hBUgkJCVJzdlsyXTsKKwlVTE9ORwkJCURhdGFPZmZzZXQ7CisJVUlOVAkJCVR4UmF0ZTsKKwlkbWFfYWRkcl90CQlkYXRhX2RtYTsJCS8vIHVyYiBkbWEgb24gbGludXgKKworfQlUWF9DT05URVhULCAqUFRYX0NPTlRFWFQsICoqUFBUWF9DT05URVhUOworCisKKy8vIHVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCB3cml0ZSBpcnBzCit0eXBlZGVmIHN0cnVjdCBfSFRfVFhfQ09OVEVYVAoreworCVBWT0lECQkJcEFkOwkJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlQVVJCCQkJcFVyYjsJCQkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVBJUlAJCQlwSXJwOwkJCS8vdXNlZCB0byBjYW5jZWwgcGVuZGluZyBidWxrIG91dC4KKwkJCQkJCQkJCS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJUEhUVFhfQlVGRkVSCVRyYW5zZmVyQnVmZmVyOwkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVVMT05HCQkJQnVsa091dFNpemU7CS8vIEluZGljYXRlIHRoZSB0b3RhbCBidWxrLW91dCBzaXplIGluIGJ5dGVzIGluIG9uZSBidWxrLXRyYW5zbWlzc2lvbgorCVVDSEFSCQkJQnVsa091dFBpcGVJZDsKKwlCT09MRUFOCQkJSVJQUGVuZGluZzsKKwlCT09MRUFOCQkJTGFzdE9uZTsKKwlCT09MRUFOCQkJYkN1cldyaXRpbmc7CisJQk9PTEVBTgkJCWJSaW5nRW1wdHk7CisJQk9PTEVBTgkJCWJDb3B5U2F2ZVBhZDsKKwlVQ0hBUgkJCVNhdmVkUGFkWzhdOworCVVDSEFSCQkJSGVhZGVyXzgwMl8zW0xFTkdUSF84MDJfM107CisJVUxPTkcJCQlDdXJXcml0ZVBvc2l0aW9uOwkJLy8gSW5kaWNhdGUgdGhlIGJ1ZmZlciBvZmZzZXQgd2hpY2ggcGFja2V0IHdpbGwgYmUgaW5zZXJ0ZWQgc3RhcnQgZnJvbS4KKwlVTE9ORwkJCUN1cldyaXRlUmVhbFBvczsJCS8vIEluZGljYXRlIHRoZSBidWZmZXIgb2Zmc2V0IHdoaWNoIHBhY2tldCBub3cgYXJlIHdyaXRpbmcgdG8uCisJVUxPTkcJCQlOZXh0QnVsa091dFBvc2l0aW9uOwkvLyBJbmRpY2F0ZSB0aGUgYnVmZmVyIHN0YXJ0IG9mZnNldCBvZiBhIGJ1bGstdHJhbnNtaXNzaW9uCisJVUxPTkcJCQlFTmV4dEJ1bGtPdXRQb3NpdGlvbjsJLy8gSW5kaWNhdGUgdGhlIGJ1ZmZlciBlbmQgb2Zmc2V0IG9mIGEgYnVsay10cmFuc21pc3Npb24KKwlVSU5UCQkJVHhSYXRlOworCWRtYV9hZGRyX3QJCWRhdGFfZG1hOwkJLy8gdXJiIGRtYSBvbiBsaW51eAorfQlIVF9UWF9DT05URVhULCAqUEhUX1RYX0NPTlRFWFQsICoqUFBIVF9UWF9DT05URVhUOworCisKKy8vCisvLyBTdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiByZWNlaXZlIHBhY2tldHMgYW5kIGJ1ZmZlcnMgdG8gaW5kaWNhdGUKKy8vIHJlY2VpdmUgZGF0YSB0byB0aGUgcHJvdG9jb2wuCisvLwordHlwZWRlZiBzdHJ1Y3QgX1JYX0NPTlRFWFQKK3sKKwlQVUNIQVIJCQkJVHJhbnNmZXJCdWZmZXI7CisJUFZPSUQJCQkJcEFkOworCVBJUlAJCQkJcElycDsvL3VzZWQgdG8gY2FuY2VsIHBlbmRpbmcgYnVsayBpbi4KKwlQVVJCCQkJCXBVcmI7CisJLy9UaGVzZSAyIEJvb2xlYW4gc2hvdWxkbid0IGJvdGggYmUgMSBhdCB0aGUgc2FtZSB0aW1lLgorCVVMT05HCQkJCUJ1bGtJbk9mZnNldDsJLy8gbnVtYmVyIG9mIHBhY2tldHMgd2FpdGluZyBmb3IgcmVvcmRlcmluZyAuCisvLwlCT09MRUFOCQkJCVJlb3JkZXJJblVzZTsJLy8gQXQgbGVhc3Qgb25lIHBhY2tldCBpbiB0aGlzIGJ1ZmZlciBhcmUgaW4gcmVvcmRlcmluZyBidWZmZXIgYW5kIHdhaXQgZm9yIHJlY2VpdmUgaW5kaWNhdGlvbgorCUJPT0xFQU4JCQkJYlJ4SGFuZGxpbmc7CS8vIE5vdGlmeSB0aGlzIHBhY2tldCBpcyBiZWluZyBwcm9jZXNzIG5vdy4KKwlCT09MRUFOCQkJCUluVXNlOwkJCS8vIFVTQiBIYXJkd2FyZSBPY2N1cGllZC4gV2FpdCBmb3IgVVNCIEhXIHRvIHB1dCBwYWNrZXQuCisJQk9PTEVBTgkJCQlSZWFkYWJsZTsJCS8vIFJlY2VpdmUgQ29tcGxldGUgYmFjay4gT0sgZm9yIGRyaXZlciB0byBpbmRpY2F0ZSByZWNlaXZpbmcgcGFja2V0LgorCUJPT0xFQU4JCQkJSVJQUGVuZGluZzsJCS8vIFRPRE86IFRvIGJlIHJlbW92ZWQKKwlhdG9taWNfdAkJCUlycExvY2s7CisJTkRJU19TUElOX0xPQ0sJCVJ4Q29udGV4dExvY2s7CisJZG1hX2FkZHJfdAkJCWRhdGFfZG1hOwkJLy8gdXJiIGRtYSBvbiBsaW51eAorfQlSWF9DT05URVhULCAqUFJYX0NPTlRFWFQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLy8KKy8vICBORElTIFZlcnNpb24gZGVmaW5pdGlvbnMKKy8vCisjaWZkZWYgIE5ESVM1MF9NSU5JUE9SVAorI2RlZmluZSBSVE1QX05ESVNfTUFKT1JfVkVSU0lPTiAgICAgNQorI2RlZmluZSBSVE1QX05ESVNfTUlOT1JfVkVSU0lPTiAgICAgMAorI2VuZGlmCisKKyNpZmRlZiAgTkRJUzUxX01JTklQT1JUCisjZGVmaW5lIFJUTVBfTkRJU19NQUpPUl9WRVJTSU9OICAgICA1CisjZGVmaW5lIFJUTVBfTkRJU19NSU5PUl9WRVJTSU9OICAgICAxCisjZW5kaWYKKworZXh0ZXJuICBjaGFyICAgIE5JQ19WRU5ET1JfREVTQ1tdOworZXh0ZXJuICBpbnQgICAgIE5JQ19WRU5ET1JfREVTQ19MRU47CisKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIFNOQVBfQUlST05FVFtdOworZXh0ZXJuICB1bnNpZ25lZCBjaGFyICAgQ2lwaGVyU3VpdGVDaXNjb0NDS01bXTsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENpcGhlclN1aXRlQ2lzY29DQ0tNTGVuOworZXh0ZXJuCXVuc2lnbmVkIGNoYXIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNFtdOworZXh0ZXJuCXVuc2lnbmVkIGNoYXIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNExlbjsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENpcGhlclN1aXRlQ0NYVGtpcFtdOworZXh0ZXJuICB1bnNpZ25lZCBjaGFyICAgQ2lwaGVyU3VpdGVDQ1hUa2lwTGVuOworZXh0ZXJuICB1bnNpZ25lZCBjaGFyICAgQ0lTQ09fT1VJW107CitleHRlcm4gIFVDSEFSCUJhU2l6ZUFycmF5WzRdOworCitleHRlcm4gVUNIQVIgQlJPQURDQVNUX0FERFJbTUFDX0FERFJfTEVOXTsKK2V4dGVybiBVQ0hBUiBNVUxUSUNBU1RfQUREUltNQUNfQUREUl9MRU5dOworZXh0ZXJuIFVDSEFSIFpFUk9fTUFDX0FERFJbTUFDX0FERFJfTEVOXTsKK2V4dGVybiBVTE9ORyBCSVQzMlszMl07CitleHRlcm4gVUNIQVIgQklUOFs4XTsKK2V4dGVybiBjaGFyKiBDaXBoZXJOYW1lW107CitleHRlcm4gY2hhciogTUNTVG9NYnBzW107CitleHRlcm4gVUNIQVIJIFJ4d2lNQ1NUb09mZG1SYXRlWzEyXTsKK2V4dGVybiBVQ0hBUiBTTkFQXzgwMl8xSFs2XTsKK2V4dGVybiBVQ0hBUiBTTkFQX0JSSURHRV9UVU5ORUxbNl07CitleHRlcm4gVUNIQVIgU05BUF9BSVJPTkVUWzhdOworZXh0ZXJuIFVDSEFSIENLSVBfTExDX1NOQVBbOF07CitleHRlcm4gVUNIQVIgRUFQT0xfTExDX1NOQVBbOF07CitleHRlcm4gVUNIQVIgRUFQT0xbMl07CitleHRlcm4gVUNIQVIgSVBYWzJdOworZXh0ZXJuIFVDSEFSIEFQUExFX1RBTEtbMl07CitleHRlcm4gVUNIQVIgUmF0ZUlkVG9QbGNwU2lnbmFsWzEyXTsgLy8gc2VlIElFRUU4MDIuMTFhLTE5OTkgcC4xNAorZXh0ZXJuIFVDSEFSCSBPZmRtUmF0ZVRvUnh3aU1DU1tdOworZXh0ZXJuIFVDSEFSIE9mZG1TaWduYWxUb1JhdGVJZFsxNl0gOworZXh0ZXJuIFVDSEFSIGRlZmF1bHRfY3dtaW5bNF07CitleHRlcm4gVUNIQVIgZGVmYXVsdF9jd21heFs0XTsKK2V4dGVybiBVQ0hBUiBkZWZhdWx0X3N0YV9haWZzbls0XTsKK2V4dGVybiBVQ0hBUiBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5WzhdOworCitleHRlcm4gVVNIT1JUIFJhdGVVcFBFUltdOworZXh0ZXJuIFVTSE9SVCBSYXRlRG93blBFUltdOworZXh0ZXJuIFVDSEFSICBQaHkxMUJOZXh0UmF0ZURvd253YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQk5leHRSYXRlVXB3YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQkdOZXh0UmF0ZURvd253YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQkdOZXh0UmF0ZVVwd2FyZFtdOworZXh0ZXJuIFVDSEFSICBQaHkxMUFOZXh0UmF0ZURvd253YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQU5leHRSYXRlVXB3YXJkW107CitleHRlcm4gQ0hBUiAgIFJzc2lTYWZlTGV2ZWxGb3JUeFJhdGVbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZUlkVG9NYnBzW107CitleHRlcm4gVVNIT1JUIFJhdGVJZFRvNTAwS2Jwc1tdOworCitleHRlcm4gVUNIQVIgIENpcGhlclN1aXRlV3BhTm9uZVRraXBbXTsKK2V4dGVybiBVQ0hBUiAgQ2lwaGVyU3VpdGVXcGFOb25lVGtpcExlbjsKKworZXh0ZXJuIFVDSEFSICBDaXBoZXJTdWl0ZVdwYU5vbmVBZXNbXTsKK2V4dGVybiBVQ0hBUiAgQ2lwaGVyU3VpdGVXcGFOb25lQWVzTGVuOworCitleHRlcm4gVUNIQVIgIFNzaWRJZTsKK2V4dGVybiBVQ0hBUiAgU3VwUmF0ZUllOworZXh0ZXJuIFVDSEFSICBFeHRSYXRlSWU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK2V4dGVybiBVQ0hBUiAgSHRDYXBJZTsKK2V4dGVybiBVQ0hBUiAgQWRkSHRJbmZvSWU7CitleHRlcm4gVUNIQVIgIE5ld0V4dENoYW5JZTsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitleHRlcm4gVUNIQVIgIEV4dEh0Q2FwSWU7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitleHRlcm4gVUNIQVIgIEVycEllOworZXh0ZXJuIFVDSEFSICBEc0llOworZXh0ZXJuIFVDSEFSICBUaW1JZTsKK2V4dGVybiBVQ0hBUiAgV3BhSWU7CitleHRlcm4gVUNIQVIgIFdwYTJJZTsKK2V4dGVybiBVQ0hBUiAgSWJzc0llOworZXh0ZXJuIFVDSEFSICBDY3gySWU7CitleHRlcm4gVUNIQVIgIFdhcGlJZTsKKworZXh0ZXJuIFVDSEFSICBXUEFfT1VJW107CitleHRlcm4gVUNIQVIgIFJTTl9PVUlbXTsKK2V4dGVybiBVQ0hBUiAgV0FQSV9PVUlbXTsKK2V4dGVybiBVQ0hBUiAgV01FX0lORk9fRUxFTVtdOworZXh0ZXJuIFVDSEFSICBXTUVfUEFSTV9FTEVNW107CitleHRlcm4gVUNIQVIgIENjeDJRb3NJbmZvW107CitleHRlcm4gVUNIQVIgIENjeDJJZUluZm9bXTsKK2V4dGVybiBVQ0hBUiAgUkFMSU5LX09VSVtdOworZXh0ZXJuIFVDSEFSICBQb3dlckNvbnN0cmFpbnRJRVtdOworCisKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExQltdOworZXh0ZXJuIFVDSEFSICBSYXRlU3dpdGNoVGFibGUxMUdbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFCR1tdOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU1tdOworZXh0ZXJuIFVDSEFSICBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmRbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFOMVNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFOMlNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFtdOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitleHRlcm4gVUNIQVIgIFBSRV9OX0hUX09VSVtdOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjZGVmaW5lCU1BWFNFUQkJKDB4RkZGKQorCisjaWZkZWYgUkFMSU5LX0FURQordHlwZWRlZglzdHJ1Y3QgX0FURV9JTkZPIHsKKwlVQ0hBUglNb2RlOworCUNIQVIJVHhQb3dlcjA7CisJQ0hBUglUeFBvd2VyMTsKKwlDSEFSICAgIFR4QW50ZW5uYVNlbDsKKwlDSEFSICAgIFJ4QW50ZW5uYVNlbDsKKwlUWFdJX1NUUlVDICBUeFdJOyAJICAvLyBUWFdJCisJVVNIT1JUCVFJRDsKKwlVQ0hBUglBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSCUFkZHIyW01BQ19BRERSX0xFTl07CisJVUNIQVIJQWRkcjNbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUglDaGFubmVsOworCVVJTlQzMglUeExlbmd0aDsKKwlVSU5UMzIJVHhDb3VudDsKKwlVSU5UMzIJVHhEb25lQ291bnQ7IC8vIFR4IERNQSBEb25lCisJVUlOVDMyCVJGRnJlcU9mZnNldDsKKwlCT09MRUFOCWJSeEZlcjsKKwlCT09MRUFOCWJRQVR4U3RhcnQ7IC8vIEhhdmUgY29tcGlsZWQgUUEgaW4gYW5kIHVzZSBpdCB0byBBVEUgdHguCisJQk9PTEVBTgliUUFSeFN0YXJ0OwkvLyBIYXZlIGNvbXBpbGVkIFFBIGluIGFuZCB1c2UgaXQgdG8gQVRFIHJ4LgorCVVJTlQzMglSeFRvdGFsQ250OworCVVJTlQzMglSeENudFBlclNlYzsKKworCUNIQVIJTGFzdFNOUjA7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgU05SCisJQ0hBUiAgICBMYXN0U05SMTsgICAgICAgICAgICAgLy8gbGFzdCByZWNlaXZlZCBTTlIgZm9yIDJuZCAgYW50ZW5uYQorCUNIQVIgICAgTGFzdFJzc2kwOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIgICAgTGFzdFJzc2kxOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSSBmb3IgMm5kICBhbnRlbm5hCisJQ0hBUiAgICBMYXN0UnNzaTI7ICAgICAgICAgICAgLy8gbGFzdCByZWNlaXZlZCBSU1NJIGZvciAzcmQgIGFudGVubmEKKwlDSEFSICAgIEF2Z1Jzc2kwOyAgICAgICAgICAgICAvLyBsYXN0IDggZnJhbWVzJyBhdmVyYWdlIFJTU0kKKwlDSEFSICAgIEF2Z1Jzc2kxOyAgICAgICAgICAgICAvLyBsYXN0IDggZnJhbWVzJyBhdmVyYWdlIFJTU0kKKwlDSEFSICAgIEF2Z1Jzc2kyOyAgICAgICAgICAgICAvLyBsYXN0IDggZnJhbWVzJyBhdmVyYWdlIFJTU0kKKwlTSE9SVCAgIEF2Z1Jzc2kwWDg7ICAgICAgICAgICAvLyBzdW0gb2YgbGFzdCA4IGZyYW1lcycgUlNTSQorCVNIT1JUICAgQXZnUnNzaTFYODsgICAgICAgICAgIC8vIHN1bSBvZiBsYXN0IDggZnJhbWVzJyBSU1NJCisJU0hPUlQgICBBdmdSc3NpMlg4OyAgICAgICAgICAgLy8gc3VtIG9mIGxhc3QgOCBmcmFtZXMnIFJTU0kKKworCVVJTlQzMglOdW1PZkF2Z1Jzc2lTYW1wbGU7CisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCS8vIFR4IGZyYW1lCisjaWZkZWYgUlQyODcwCisJLyogbm90IHVzZWQgaW4gUlQyODYwICovCisJVFhJTkZPX1NUUlVDCQlUeEluZm87IC8vIFR4SW5mbworI2VuZGlmIC8vIFJUMjg3MCAvLworCVVTSE9SVAkJSExlbjsgLy8gSGVhZGVyIExlbmd0aAorCVVTSE9SVAkJUExlbjsgLy8gUGF0dGVybiBMZW5ndGgKKwlVQ0hBUiAJCUhlYWRlclszMl07IC8vIEhlYWRlciBidWZmZXIKKwlVQ0hBUgkJUGF0dGVyblszMl07IC8vIFBhdHRlcm4gYnVmZmVyCisJVVNIT1JUCQlETGVuOyAvLyBEYXRhIExlbmd0aAorCVVTSE9SVAkJc2VxOworCVVJTlQzMgkJQ0lEOworCXBpZF90IAkJQXRlUGlkOworCS8vIGNvdW50ZXJzCisJVUlOVDMyCQlVMk07CisJVUlOVDMyCQlPdGhlckRhdGE7CisJVUlOVDMyCQlCZWFjb247CisJVUlOVDMyCQlPdGhlckNvdW50OworCVVJTlQzMgkJVHhBYzA7CisJVUlOVDMyCQlUeEFjMTsKKwlVSU5UMzIJCVR4QWMyOworCVVJTlQzMgkJVHhBYzM7CisJVUlOVDMyCQlUeEhDQ0E7CisJVUlOVDMyCQlUeE1nbXQ7CisJVUlOVDMyCQlSU1NJMDsKKwlVSU5UMzIJCVJTU0kxOworCVVJTlQzMgkJUlNTSTI7CisJVUlOVDMyCQlTTlIwOworCVVJTlQzMgkJU05SMTsKKwkvLyBjb250cm9sCisJLy9VSU5UMzIJCVJlcGVhdDsgLy8gVHggQ3B1IGNvdW50CisJVUNIQVIJCVR4U3RhdHVzOyAvLyB0YXNrIFR4IHN0YXR1cyAvLyAwIC0tPiB0YXNrIGlzIGlkbGUsIDEgLS0+IHRhc2sgaXMgcnVubmluZworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCit9CUFURV9JTkZPLCAqUEFURV9JTkZPOworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKK3N0cnVjdCBhdGVfcmFjZmdoZHIgeworIAlVSU5UMzIJCW1hZ2ljX25vOworCVVTSE9SVAkJY29tbWFuZF90eXBlOworCVVTSE9SVAkJY29tbWFuZF9pZDsKKwlVU0hPUlQJCWxlbmd0aDsKKwlVU0hPUlQJCXNlcXVlbmNlOworCVVTSE9SVAkJc3RhdHVzOworCVVDSEFSCQlkYXRhWzIwNDZdOworfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3N0cnVjdCByZW9yZGVyaW5nX21wZHUKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1CSpuZXh0OworCVBORElTX1BBQ0tFVAkJCXBQYWNrZXQ7CQkvKiBjb3ZlcnRlZCB0byA4MDIuMyBmcmFtZSAqLworCWludAkJCQkJCVNlcXVlbmNlOwkJLyogc2VxdWVuY2UgbnVtYmVyIG9mIE1QRFUgKi8KKwlCT09MRUFOCQkJCQliQU1TRFU7Cit9OworCitzdHJ1Y3QgcmVvcmRlcmluZ19saXN0Cit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbmV4dDsKKwlpbnQgCXFsZW47Cit9OworCitzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1X3Bvb2wKK3sKKwlQVk9JRAkJCQkJbWVtOworCU5ESVNfU1BJTl9MT0NLCQkJbG9jazsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19saXN0IAlmcmVlbGlzdDsKK307CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK3R5cGVkZWYgc3RydWN0IAlfUlNTSV9TQU1QTEUgeworCUNIQVIJCQlMYXN0UnNzaTA7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIJCQlMYXN0UnNzaTE7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIJCQlMYXN0UnNzaTI7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIJCQlBdmdSc3NpMDsKKwlDSEFSCQkJQXZnUnNzaTE7CisJQ0hBUgkJCUF2Z1Jzc2kyOworCVNIT1JUCQkJQXZnUnNzaTBYODsKKwlTSE9SVAkJCUF2Z1Jzc2kxWDg7CisJU0hPUlQJCQlBdmdSc3NpMlg4OworfSBSU1NJX1NBTVBMRTsKKworLy8KKy8vICBRdWV1ZSBzdHJ1Y3R1cmUgYW5kIG1hY3JvcworLy8KK3R5cGVkZWYgc3RydWN0ICBfUVVFVUVfRU5UUlkgICAgeworCXN0cnVjdCBfUVVFVUVfRU5UUlkgICAgICpOZXh0OworfSAgIFFVRVVFX0VOVFJZLCAqUFFVRVVFX0VOVFJZOworCisvLyBRdWV1ZSBzdHJ1Y3R1cmUKK3R5cGVkZWYgc3RydWN0ICBfUVVFVUVfSEVBREVSICAgeworCVBRVUVVRV9FTlRSWSAgICBIZWFkOworCVBRVUVVRV9FTlRSWSAgICBUYWlsOworCVVMT05HICAgICAgICAgICBOdW1iZXI7Cit9ICAgUVVFVUVfSEVBREVSLCAqUFFVRVVFX0hFQURFUjsKKworI2RlZmluZSBJbml0aWFsaXplUXVldWVIZWFkZXIoUXVldWVIZWFkZXIpICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoUXVldWVIZWFkZXIpLT5IZWFkID0gKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IE5VTEw7ICAgXAorCShRdWV1ZUhlYWRlciktPk51bWJlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUmVtb3ZlSGVhZFF1ZXVlKFF1ZXVlSGVhZGVyKSAgICAgICAgICAgICAgICBcCisoUXVldWVIZWFkZXIpLT5IZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlQUVVFVUVfRU5UUlkgcE5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKChRdWV1ZUhlYWRlciktPkhlYWQgIT0gTlVMTCkJCQkJXAorCXsJCQkJCQkJCQkJCQlcCisJCXBOZXh0ID0gKFF1ZXVlSGVhZGVyKS0+SGVhZC0+TmV4dDsgICAgICAgICAgXAorCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gcE5leHQ7ICAgICAgICAgICAgICAgIFwKKwkJaWYgKHBOZXh0ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkoUXVldWVIZWFkZXIpLT5UYWlsID0gTlVMTDsgICAgICAgICAgICAgXAorCQkoUXVldWVIZWFkZXIpLT5OdW1iZXItLTsgICAgICAgICAgICAgICAgICAgIFwKKwl9CQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIEluc2VydEhlYWRRdWV1ZShRdWV1ZUhlYWRlciwgUXVldWVFbnRyeSkgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSgoUFFVRVVFX0VOVFJZKVF1ZXVlRW50cnkpLT5OZXh0ID0gKFF1ZXVlSGVhZGVyKS0+SGVhZDsgXAorCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgICAgIFwKKwkJaWYgKChRdWV1ZUhlYWRlciktPlRhaWwgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkoUXVldWVIZWFkZXIpLT5UYWlsID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgXAorCQkoUXVldWVIZWFkZXIpLT5OdW1iZXIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBJbnNlcnRUYWlsUXVldWUoUXVldWVIZWFkZXIsIFF1ZXVlRW50cnkpICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKChQUVVFVUVfRU5UUlkpUXVldWVFbnRyeSktPk5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgXAorCWlmICgoUXVldWVIZWFkZXIpLT5UYWlsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKFF1ZXVlSGVhZGVyKS0+VGFpbC0+TmV4dCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyBcCisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgICAgIFwKKwkoUXVldWVIZWFkZXIpLT5UYWlsID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgICAgICAgICBcCisJKFF1ZXVlSGVhZGVyKS0+TnVtYmVyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLworLy8gIE1hY3JvcyBmb3IgZmxhZyBhbmQgcmVmIGNvdW50IG9wZXJhdGlvbnMKKy8vCisjZGVmaW5lIFJUTVBfU0VUX0ZMQUcoX00sIF9GKSAgICAgICAoKF9NKS0+RmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgUlRNUF9DTEVBUl9GTEFHKF9NLCBfRikgICAgICgoX00pLT5GbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgUlRNUF9DTEVBUl9GTEFHUyhfTSkgICAgICAgICgoX00pLT5GbGFncyA9IDApCisjZGVmaW5lIFJUTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgIT0gMCkKKyNkZWZpbmUgUlRNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQorCisjZGVmaW5lIE9QU1RBVFVTX1NFVF9GTEFHKF9wQWQsIF9GKSAgICAgKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgT1BTVEFUVVNfQ0xFQVJfRkxBRyhfcEFkLCBfRikgICAoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgT1BTVEFUVVNfVEVTVF9GTEFHKF9wQWQsIF9GKSAgICAoKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgJiAoX0YpKSAhPSAwKQorCisjZGVmaW5lIENMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoX3BFbnRyeSxfRikgICAgICAoKF9wRW50cnkpLT5DbGllbnRTdGF0dXNGbGFncyB8PSAoX0YpKQorI2RlZmluZSBDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcoX3BFbnRyeSxfRikgICAgKChfcEVudHJ5KS0+Q2xpZW50U3RhdHVzRmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKF9wRW50cnksX0YpICAgICAoKChfcEVudHJ5KS0+Q2xpZW50U3RhdHVzRmxhZ3MgJiAoX0YpKSAhPSAwKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9TRVRfRkxBRyhfcEFkLCBfRikgICAgKChfcEFkKS0+Q29tbW9uQ2ZnLlBhY2tldEZpbHRlciB8PSAoX0YpKQorI2RlZmluZSBSWF9GSUxURVJfQ0xFQVJfRkxBRyhfcEFkLCBfRikgICgoX3BBZCktPkNvbW1vbkNmZy5QYWNrZXRGaWx0ZXIgJj0gfihfRikpCisjZGVmaW5lIFJYX0ZJTFRFUl9URVNUX0ZMQUcoX3BBZCwgX0YpICAgKCgoX3BBZCktPkNvbW1vbkNmZy5QYWNrZXRGaWx0ZXIgJiAoX0YpKSAhPSAwKQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIFNUQV9OT19TRUNVUklUWV9PTihfcCkgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCisjZGVmaW5lIFNUQV9XRVBfT04oX3ApICAgICAgICAgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCisjZGVmaW5lIFNUQV9US0lQX09OKF9wKSAgICAgICAgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisjZGVmaW5lIFNUQV9BRVNfT04oX3ApICAgICAgICAgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisKKyNkZWZpbmUgU1RBX1RHTl9XSUZJX09OKF9wKSAgICAgICAgICAgICAoX3AtPlN0YUNmZy5iVEduV2lmaVRlc3QgPT0gVFJVRSkKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2RlZmluZSBDS0lQX0tQX09OKF9wKQkJCQkoKCgoX3ApLT5TdGFDZmcuQ2tpcEZsYWcpICYgMHgxMCkgJiYgKChfcCktPlN0YUNmZy5iQ2tpcENtaWNPbiA9PSBUUlVFKSkKKyNkZWZpbmUgQ0tJUF9DTUlDX09OKF9wKQkJCSgoKChfcCktPlN0YUNmZy5Da2lwRmxhZykgJiAweDA4KSAmJiAoKF9wKS0+U3RhQ2ZnLmJDa2lwQ21pY09uID09IFRSVUUpKQorCisKKyNkZWZpbmUgSU5DX1JJTkdfSU5ERVgoX2lkeCwgX1JpbmdTaXplKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfaWR4KSA9IChfaWR4KzEpICUgKF9SaW5nU2l6ZSk7ICAgICAgIFwKK30KKworLy8gV2Ugd2lsbCBoYXZlIGEgY29zdCBkb3duIHZlcnNpb24gd2hpY2ggbWFjIHZlcnNpb24gaXMgMHgzMDkweHh4eAorI2RlZmluZSBJU19SVDMwOTAoX3BBZCkJCQkJKCgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDcxMDAwMCkgfHwgKCgoX3BBZCktPk1BQ1ZlcnNpb24gJiAweGZmZmYwMDAwKSA9PSAweDMwOTAwMDAwKSkKKworI2RlZmluZSBJU19SVDMwNzAoX3BBZCkJCQkJKCgoX3BBZCktPk1BQ1ZlcnNpb24gJiAweGZmZmYwMDAwKSA9PSAweDMwNzAwMDAwKQorI2RlZmluZSBJU19SVDMwNzEoX3BBZCkJCQkJKCgoX3BBZCktPk1BQ1ZlcnNpb24gJiAweGZmZmYwMDAwKSA9PSAweDMwNzEwMDAwKQorI2RlZmluZSBJU19SVDIwNzAoX3BBZCkJCQkJKCgoX3BBZCktPlJmSWNUeXBlID09IFJGSUNfMjAyMCkgfHwgKChfcEFkKS0+RUZ1c2VUYWcgPT0gMHgyNykpCisKKyNkZWZpbmUgSVNfUlQzMHh4KF9wQWQpCQkJCSgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmYwMDAwMCkgPT0gMHgzMDcwMDAwMCkKKworI2RlZmluZSBSSU5HX1BBQ0tFVF9JTklUKF9UeFJpbmcsIF9pZHgpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1R4UmluZy0+Q2VsbFtfaWR4XS5wTmRpc1BhY2tldCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9UeFJpbmctPkNlbGxbX2lkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVFhEVF9JTklUKF9UeEQpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJTmRpc1plcm9NZW1vcnkoX1R4RCwgVFhEX1NJWkUpOwlcCisJX1R4RC0+RE1BRE9ORSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvL1NldCBsYXN0IGRhdGEgc2VnbWVudAorI2RlZmluZSBSSU5HX1NFVF9MQVNURFMoX1R4RCwgX0lzU0QwKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChfSXNTRDApIHtfVHhELT5MYXN0U2VjMCA9IDE7fSAgICAgXAorICAgIGVsc2Uge19UeEQtPkxhc3RTZWMxID0gMTt9ICAgICBcCit9CisKKy8vIEluY3JlYXNlIFR4VHNjIHZhbHVlIGZvciBuZXh0IHRyYW5zbWlzc2lvbgorLy8gVE9ETzoKKy8vIFdoZW4gaT09NiwgbWVhbnMgVFNDIGhhcyBkb25lIG9uZSBmdWxsIGN5Y2xlLCBkbyByZS1rZXlpbmcgc3R1ZmYgZm9sbG93IHNwZWNzCisvLyBTaG91bGQgc2VuZCBhIHNwZWNpYWwgZXZlbnQgbWljcm9zb2Z0IGRlZmluZWQgdG8gcmVxdWVzdCByZS1rZXkKKyNkZWZpbmUgSU5DX1RYX1RTQyhfdHNjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50IGk9MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSAoKytfdHNjW2ldID09IDB4MCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGkgPT0gNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gU3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1DU1NldCBpcyBjb3BpZWQgZnJvbSBBUCBiZWFjb24uICBEb24ndCBuZWVkIHRvIHVwZGF0ZSBoZXJlLgorI2RlZmluZSBDT1BZX0hUU0VUVElOR1NfRlJPTV9NTE1FX0FVWF9UT19BQ1RJVkVfQ0ZHKF9wQWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aDsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1pbW9QcyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHM7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5HRiA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRjsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlNob3J0R0lmb3IyMCA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjA7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwOyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuVHhTVEJDID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQzsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlJ4U1RCQyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkM7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5FeHRDaGFuT2Zmc2V0ID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQ7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5SZWNvbVdpZHRoID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGg7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5PcGVyYWlvbk1vZGUgPSBfcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZTsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk5vbkdmUHJlc2VudCA9IF9wQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50OyAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUQ2FwYWJpbGl0eS5NQ1NTZXQsIChfcEFkKS0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0LCBzaXplb2YoVUNIQVIpICogMTYpO1wKK30KKworI2RlZmluZSBDT1BZX0FQX0hUU0VUVElOR1NfRlJPTV9CRUFDT04oX3BBZCwgX3BIdENhcGFiaWxpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUgPSAoVUNIQVIpKF9wSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQU1zZHVTaXplKTsJXAorCV9wQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1tcHNNb2RlPSAoVUNIQVIpKF9wSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uTWltb1BzKTsJXAorCV9wQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1heFJBbXBkdUZhY3RvciA9IChVQ0hBUikoX3BIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IpOwlcCit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKy8vCisvLyBNQUNSTyBmb3IgMzItYml0IFBDSSByZWdpc3RlciByZWFkIC8gd3JpdGUKKy8vCisvLyBVc2FnZSA6IFJUTVBfSU9fUkVBRDMyKAorLy8gICAgICAgICAgICAgIFBSVE1QX0FEQVBURVIgcEFkLAorLy8gICAgICAgICAgICAgIFVMT05HIFJlZ2lzdGVyX09mZnNldCwKKy8vICAgICAgICAgICAgICBQVUxPTkcgIHBWYWx1ZSkKKy8vCisvLyAgICAgICAgIFJUTVBfSU9fV1JJVEUzMigKKy8vICAgICAgICAgICAgICBQUlRNUF9BREFQVEVSIHBBZCwKKy8vICAgICAgICAgICAgICBVTE9ORyBSZWdpc3Rlcl9PZmZzZXQsCisvLyAgICAgICAgICAgICAgVUxPTkcgVmFsdWUpCisvLworCisvLworLy8gQkJQICYgUkYgYXJlIHVzaW5nIGluZGlyZWN0IGFjY2Vzcy4gQmVmb3JlIHdyaXRlIGFueSB2YWx1ZSBpbnRvIGl0LgorLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgY29tbWFuZCBwZW5kaW5nIHZpYSBjaGVja2luZyBidXN5IGJpdC4KKy8vCisjZGVmaW5lIE1BWF9CVVNZX0NPVU5UICAxMDAgICAgICAgICAvLyBOdW1iZXIgb2YgcmV0cnkgYmVmb3JlIGZhaWxpbmcgYWNjZXNzIEJCUCAmIFJGIGluZGlyZWN0IHJlZ2lzdGVyCisvLworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFJUTVBfUkZfSU9fV1JJVEUzMihfQSwgX1YpICAgICAgICAgICAgICAgICBSVFVTQldyaXRlUkZSZWdpc3RlcihfQSwgX1YpCisjZGVmaW5lIFJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikgICBSVFVTQlJlYWRCQlBSZWdpc3RlcihfQSwgX0ksIF9wVikKKyNkZWZpbmUgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKSAgIFJUVVNCV3JpdGVCQlBSZWdpc3RlcihfQSwgX0ksIF9WKQorCisjZGVmaW5lIEJCUF9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpCQkJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKF9BLCBfSSwgX1YpCisjZGVmaW5lIEJCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgCQlSVFVTQlJlYWRCQlBSZWdpc3RlcihfQSwgX0ksIF9wVikKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIFJUMzB4eAorI2RlZmluZSBSVE1QX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikgICAgUlQzMHh4UmVhZFJGUmVnaXN0ZXIoX0EsIF9JLCBfcFYpCisjZGVmaW5lIFJUTVBfUkZfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKSAgICBSVDMweHhXcml0ZVJGUmVnaXN0ZXIoX0EsIF9JLCBfVikKKyNlbmRpZiAvLyBSVDMweHggLy8KKworI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKGNoLCBraHopICB7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICBraHogPSAyNDEyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICBraHogPSAyNDE3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICBraHogPSAyNDIyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICBraHogPSAyNDI3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgICBraHogPSAyNDMyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDY6ICAgICBraHogPSAyNDM3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDc6ICAgICBraHogPSAyNDQyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDg6ICAgICBraHogPSAyNDQ3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAgICBraHogPSAyNDUyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAgICBraHogPSAyNDU3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDExOiAgICBraHogPSAyNDYyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiAgICBraHogPSAyNDY3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAgICBraHogPSAyNDcyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OiAgICBraHogPSAyNDg0MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDM2OiAgLyogVU5JSSAqLyAga2h6ID0gNTE4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDogIC8qIFVOSUkgKi8gIGtoeiA9IDUyMDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDQ6ICAvKiBVTklJICovICBraHogPSA1MjIwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ4OiAgLyogVU5JSSAqLyAga2h6ID0gNTI0MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MjogIC8qIFVOSUkgKi8gIGtoeiA9IDUyNjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY6ICAvKiBVTklJICovICBraHogPSA1MjgwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDYwOiAgLyogVU5JSSAqLyAga2h6ID0gNTMwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2NDogIC8qIFVOSUkgKi8gIGtoeiA9IDUzMjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ5OiAvKiBVTklJICovICBraHogPSA1NzQ1MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE1MzogLyogVU5JSSAqLyAga2h6ID0gNTc2NTAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTc6IC8qIFVOSUkgKi8gIGtoeiA9IDU3ODUwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTYxOiAvKiBVTklJICovICBraHogPSA1ODA1MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE2NTogLyogVU5JSSAqLyAga2h6ID0gNTgyNTAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTUwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDQ6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTUyMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDg6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTU0MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTI6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTU2MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTY6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTU4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjA6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTYwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjQ6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTYyMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjg6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTY0MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzI6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTY2MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzY6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTY4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDA6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTcwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzNDogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MTcwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzODogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MTkwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MjEwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0NjogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MjMwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxODQ6IC8qIEphcGFuICovICAga2h6ID0gNDkyMDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg4OiAvKiBKYXBhbiAqLyAgIGtoeiA9IDQ5NDAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE5MjogLyogSmFwYW4gKi8gICBraHogPSA0OTYwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTY6IC8qIEphcGFuICovICAga2h6ID0gNDk4MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjA4OiAvKiBKYXBhbiwgbWVhbnMgSjA4ICovICAga2h6ID0gNTA0MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjEyOiAvKiBKYXBhbiwgbWVhbnMgSjEyICovICAga2h6ID0gNTA2MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE2OiAvKiBKYXBhbiwgbWVhbnMgSjE2ICovICAga2h6ID0gNTA4MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgIGtoeiA9IDI0MTIwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9CisKKyNkZWZpbmUgICAgIE1BUF9LSFpfVE9fQ0hBTk5FTF9JRChraHosIGNoKSAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtoeikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDEyMDAwOiAgICBjaCA9IDE7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDE3MDAwOiAgICBjaCA9IDI7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDIyMDAwOiAgICBjaCA9IDM7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDI3MDAwOiAgICBjaCA9IDQ7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDMyMDAwOiAgICBjaCA9IDU7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDM3MDAwOiAgICBjaCA9IDY7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDQyMDAwOiAgICBjaCA9IDc7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDQ3MDAwOiAgICBjaCA9IDg7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDUyMDAwOiAgICBjaCA9IDk7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDU3MDAwOiAgICBjaCA9IDEwOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDYyMDAwOiAgICBjaCA9IDExOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDY3MDAwOiAgICBjaCA9IDEyOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDcyMDAwOiAgICBjaCA9IDEzOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDg0MDAwOiAgICBjaCA9IDE0OyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MTgwMDAwOiAgICBjaCA9IDM2OyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTIwMDAwMDogICAgY2ggPSA0MDsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyMjAwMDA6ICAgIGNoID0gNDQ7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MjQwMDAwOiAgICBjaCA9IDQ4OyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTI2MDAwMDogICAgY2ggPSA1MjsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyODAwMDA6ICAgIGNoID0gNTY7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MzAwMDAwOiAgICBjaCA9IDYwOyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTMyMDAwMDogICAgY2ggPSA2NDsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU3NDUwMDA6ICAgIGNoID0gMTQ5OyAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1NzY1MDAwOiAgICBjaCA9IDE1MzsgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTc4NTAwMDogICAgY2ggPSAxNTc7IC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU4MDUwMDA6ICAgIGNoID0gMTYxOyAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1ODI1MDAwOiAgICBjaCA9IDE2NTsgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTUwMDAwMDogICAgY2ggPSAxMDA7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTUyMDAwMDogICAgY2ggPSAxMDQ7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTU0MDAwMDogICAgY2ggPSAxMDg7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTU2MDAwMDogICAgY2ggPSAxMTI7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTU4MDAwMDogICAgY2ggPSAxMTY7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTYwMDAwMDogICAgY2ggPSAxMjA7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTYyMDAwMDogICAgY2ggPSAxMjQ7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY0MDAwMDogICAgY2ggPSAxMjg7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY2MDAwMDogICAgY2ggPSAxMzI7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY4MDAwMDogICAgY2ggPSAxMzY7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTcwMDAwMDogICAgY2ggPSAxNDA7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTE3MDAwMDogICAgY2ggPSAzNDsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTE5MDAwMDogICAgY2ggPSAzODsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTIxMDAwMDogICAgY2ggPSA0MjsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTIzMDAwMDogICAgY2ggPSA0NjsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDkyMDAwMDogICAgY2ggPSAxODQ7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk0MDAwMDogICAgY2ggPSAxODg7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk2MDAwMDogICAgY2ggPSAxOTI7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk4MDAwMDogICAgY2ggPSAxOTY7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTA0MDAwMDogICAgY2ggPSAyMDg7IC8qIEphcGFuLCBtZWFucyBKMDggKi8gIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDYwMDAwOiAgICBjaCA9IDIxMjsgLyogSmFwYW4sIG1lYW5zIEoxMiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUwODAwMDA6ICAgIGNoID0gMjE2OyAvKiBKYXBhbiwgbWVhbnMgSjE2ICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgY2ggPSAxOyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9CisKKy8vCisvLyBDb21tb24gZnJhZ21lbnQgbGlzdCBzdHJ1Y3R1cmUgLSAgSWRlbnRpY2FsIHRvIHRoZSBzY2F0dGVyIGdhdGhlciBmcmFnIGxpc3Qgc3RydWN0dXJlCisvLworLy8jZGVmaW5lIFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAgICAgICAgIFNDQVRURVJfR0FUSEVSX0VMRU1FTlQKKy8vI2RlZmluZSBQUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICAgICAgICBQU0NBVFRFUl9HQVRIRVJfRUxFTUVOVAorI2RlZmluZSBOSUNfTUFYX1BIWVNfQlVGX0NPVU5UICAgICAgICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IF9SVE1QX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgeworICAgIFBWT0lECQlBZGRyZXNzOworICAgIFVMT05HCQlMZW5ndGg7CisgICAgUFVMT05HCQlSZXNlcnZlZDsKK30gUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5ULCAqUFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVDsKKworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUIHsKKyAgICBVTE9ORyAgTnVtYmVyT2ZFbGVtZW50czsKKyAgICBQVUxPTkcgUmVzZXJ2ZWQ7CisgICAgUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIEVsZW1lbnRzW05JQ19NQVhfUEhZU19CVUZfQ09VTlRdOworfSBSVE1QX1NDQVRURVJfR0FUSEVSX0xJU1QsICpQUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUOworCisvLworLy8gIFNvbWUgdXRpbGl0eSBtYWNyb3MKKy8vCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oX2EsIF9iKSAgICAgKCgoX2EpIDwgKF9iKSkgPyAoX2EpIDogKF9iKSkKKyNlbmRpZgorCisjaWZuZGVmIG1heAorI2RlZmluZSBtYXgoX2EsIF9iKSAgICAgKCgoX2EpID4gKF9iKSkgPyAoX2EpIDogKF9iKSkKKyNlbmRpZgorCisjZGVmaW5lIEdFVF9MTkFfR0FJTihfcEFkKQkoKF9wQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpID8gKF9wQWQtPkJMTkFHYWluKSA6ICgoX3BBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSA2NCkgPyAoX3BBZC0+QUxOQUdhaW4wKSA6ICgoX3BBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxMjgpID8gKF9wQWQtPkFMTkFHYWluMSkgOiAoX3BBZC0+QUxOQUdhaW4yKSkpKQorCisjZGVmaW5lIElOQ19DT1VOVEVSNjQoVmFsKSAgICAgICAgICAoVmFsLlF1YWRQYXJ0KyspCisKKyNkZWZpbmUgSU5GUkFfT04oX3ApICAgICAgICAgICAgICAgIChPUFNUQVRVU19URVNUX0ZMQUcoX3AsIGZPUF9TVEFUVVNfSU5GUkFfT04pKQorI2RlZmluZSBBREhPQ19PTihfcCkgICAgICAgICAgICAgICAgKE9QU1RBVFVTX1RFU1RfRkxBRyhfcCwgZk9QX1NUQVRVU19BREhPQ19PTikpCisjZGVmaW5lIE1PTklUT1JfT04oX3ApICAgICAgICAgICAgICAoKChfcCktPlN0YUNmZy5Cc3NUeXBlKSA9PSBCU1NfTU9OSVRPUikKKyNkZWZpbmUgSURMRV9PTihfcCkgICAgICAgICAgICAgICAgICghSU5GUkFfT04oX3ApICYmICFBREhPQ19PTihfcCkpCisKKy8vIENoZWNrIExFQVAgJiBDQ0tNIGZsYWdzCisjZGVmaW5lIExFQVBfT04oX3ApICAgICAgICAgICAgICAgICAoKChfcCktPlN0YUNmZy5MZWFwQXV0aE1vZGUpID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNkZWZpbmUgTEVBUF9DQ0tNX09OKF9wKSAgICAgICAgICAgICgoKChfcCktPlN0YUNmZy5MZWFwQXV0aE1vZGUpID09IENJU0NPX0F1dGhNb2RlTEVBUCkgJiYgKChfcCktPlN0YUNmZy5MZWFwQXV0aEluZm8uQ0NLTSA9PSBUUlVFKSkKKworLy8gaWYgb3JnaW5hbCBFdGhlcm5ldCBmcmFtZSBjb250YWlucyBubyBMTEMvU05BUCwgdGhlbiBhbiBleHRyYSBMTEMvU05BUCBlbmNhcCBpcyByZXF1aXJlZAorI2RlZmluZSBFWFRSQV9MTENTTkFQX0VOQ0FQX0ZST01fUEtUX1NUQVJUKF9wQnVmVkEsIF9wRXh0cmFMbGNTbmFwRW5jYXApCQlcCit7CQkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoKCgqKF9wQnVmVkEgKyAxMikgPDwgOCkgKyAqKF9wQnVmVkEgKyAxMykpID4gMTUwMCkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gU05BUF84MDJfMUg7CQkJCQkJXAorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KElQWCwgX3BCdWZWQSArIDEyLCAyKSB8fCAJCQlcCisJCQlOZGlzRXF1YWxNZW1vcnkoQVBQTEVfVEFMSywgX3BCdWZWQSArIDEyLCAyKSkJCVwKKwkJewkJCQkJCQkJCQkJCQkJXAorCQkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IFNOQVBfQlJJREdFX1RVTk5FTDsJCQlcCisJCX0JCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gTlVMTDsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorfQorCisvLyBOZXcgRGVmaW5lIGZvciBuZXcgVHggUGF0aC4KKyNkZWZpbmUgRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQoX3BCdWZWQSwgX3BFeHRyYUxsY1NuYXBFbmNhcCkJXAorewkJCQkJCQkJCQkJCQkJCQlcCisJaWYgKCgoKihfcEJ1ZlZBKSA8PCA4KSArICooX3BCdWZWQSArIDEpKSA+IDE1MDApCQkJXAorCXsJCQkJCQkJCQkJCQkJCQlcCisJCV9wRXh0cmFMbGNTbmFwRW5jYXAgPSBTTkFQXzgwMl8xSDsJCQkJCQlcCisJCWlmIChOZGlzRXF1YWxNZW1vcnkoSVBYLCBfcEJ1ZlZBLCAyKSB8fCAJCQkJXAorCQkJTmRpc0VxdWFsTWVtb3J5KEFQUExFX1RBTEssIF9wQnVmVkEsIDIpKQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJXAorCQkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IFNOQVBfQlJJREdFX1RVTk5FTDsJCQlcCisJCX0JCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gTlVMTDsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgTUFLRV84MDJfM19IRUFERVIoX3AsIF9wTWFjMSwgX3BNYWMyLCBfcFR5cGUpICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOZGlzTW92ZU1lbW9yeShfcCwgX3BNYWMxLCBNQUNfQUREUl9MRU4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOZGlzTW92ZU1lbW9yeSgoX3AgKyBNQUNfQUREUl9MRU4pLCBfcE1hYzIsIE1BQ19BRERSX0xFTik7ICAgICAgICAgIFwKKyAgICBOZGlzTW92ZU1lbW9yeSgoX3AgKyBNQUNfQUREUl9MRU4gKiAyKSwgX3BUeXBlLCBMRU5HVEhfODAyXzNfVFlQRSk7IFwKK30KKworLy8gaWYgcERhdGEgaGFzIG5vIExMQy9TTkFQIChuZWl0aGVyIFJGQzEwNDIgbm9yIEJyaWRnZSB0dW5uZWwpLCBrZWVwIGl0IHRoYXQgd2F5LgorLy8gZWxzZSBpZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgTExDL1NOQVAtZW5jYXBlZCBJUFggb3IgQVBQTEVUQUxLLCBwcmVzZXJ2ZSB0aGUgTExDL1NOQVAgZmllbGQKKy8vIGVsc2UgcmVtb3ZlIHRoZSBMTEMvU05BUCBmaWVsZCBmcm9tIHRoZSByZXN1bHQgRXRoZXJuZXQgZnJhbWUKKy8vIFBhdGNoIGZvciBXSFFMIG9ubHksIHdoaWNoIGRpZCBub3QgdHVybiBvbiBOZXRiaW9zIGJ1dCB1c2UgSVBYIHdpdGhpbiBpdHMgcGF5bG9hZAorLy8gTm90ZToKKy8vICAgICBfcERhdGEgJiBfRGF0YVNpemUgbWF5IGJlIGFsdGVyZWQgKHJlbW92ZSA4LWJ5dGUgTExDL1NOQVApIGJ5IHRoaXMgTUFDUk8KKy8vICAgICBfcFJlbW92ZWRMTENTTkFQOiBwb2ludGVyIHRvIHJlbW92ZWQgTExDL1NOQVA7IE5VTEwgaXMgbm90IHJlbW92ZWQKKyNkZWZpbmUgQ09OVkVSVF9UT184MDJfMyhfcDgwMjNoZHIsIF9wREEsIF9wU0EsIF9wRGF0YSwgX0RhdGFTaXplLCBfcFJlbW92ZWRMTENTTkFQKSAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjaGFyIExMQ19MZW5bMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcFJlbW92ZWRMTENTTkFQID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KFNOQVBfODAyXzFILCBfcERhdGEsIDYpICB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTmRpc0VxdWFsTWVtb3J5KFNOQVBfQlJJREdFX1RVTk5FTCwgX3BEYXRhLCA2KSkgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUFVDSEFSIHBQcm90byA9IF9wRGF0YSArIDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKChOZGlzRXF1YWxNZW1vcnkoSVBYLCBwUHJvdG8sIDIpIHx8IE5kaXNFcXVhbE1lbW9yeShBUFBMRV9UQUxLLCBwUHJvdG8sIDIpKSAmJiAgXAorICAgICAgICAgICAgTmRpc0VxdWFsTWVtb3J5KFNOQVBfODAyXzFILCBfcERhdGEsIDYpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTExDX0xlblswXSA9IChVQ0hBUikoX0RhdGFTaXplIC8gMjU2KTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTExDX0xlblsxXSA9IChVQ0hBUikoX0RhdGFTaXplICUgMjU2KTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBMTENfTGVuKTsgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBwUHJvdG8pOyAgICAgICAgICAgXAorICAgICAgICAgICAgX3BSZW1vdmVkTExDU05BUCA9IF9wRGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX0RhdGFTaXplIC09IExFTkdUSF84MDJfMV9IOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX3BEYXRhICs9IExFTkdUSF84MDJfMV9IOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTENfTGVuWzBdID0gKFVDSEFSKShfRGF0YVNpemUgLyAyNTYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTENfTGVuWzFdID0gKFVDSEFSKShfRGF0YVNpemUgJSAyNTYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBNQUtFXzgwMl8zX0hFQURFUihfcDgwMjNoZHIsIF9wREEsIF9wU0EsIExMQ19MZW4pOyAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNXSVRDSF9BQiggX3BBQSwgX3BCQikgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQVk9JRCBwQ0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwQ0MgPSBfcEJCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3BCQiA9IF9wQUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcEFBID0gcENDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8vIEVucXVldWUgdGhpcyBmcmFtZSB0byBNTE1FIGVuZ2luZQorLy8gV2UgbmVlZCB0byBlbnF1ZXVlIHRoZSB3aG9sZSBmcmFtZSBiZWNhdXNlIE1MTUUgbmVlZCB0byBwYXNzIGRhdGEgdHlwZQorLy8gaW5mb3JtYXRpb24gZnJvbSA4MDIuMTEgaGVhZGVyCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFJFUE9SVF9NR01UX0ZSQU1FX1RPX01MTUUoX3BBZCwgV2NpZCwgX3BGcmFtZSwgX0ZyYW1lU2l6ZSwgX1Jzc2kwLCBfUnNzaTEsIF9Sc3NpMiwgX1BsY3BTaWduYWwpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVJTlQzMiBIaWdoMzJUU0Y9MCwgTG93MzJUU0Y9MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1sbWVFbnF1ZXVlRm9yUmVjdihfcEFkLCBXY2lkLCBIaWdoMzJUU0YsIExvdzMyVFNGLCAoVUNIQVIpX1Jzc2kwLCAoVUNIQVIpX1Jzc2kxLChVQ0hBUilfUnNzaTIsX0ZyYW1lU2l6ZSwgX3BGcmFtZSwgKFVDSEFSKV9QbGNwU2lnbmFsKTsgICBcCit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDMweHgKKy8vTmVlZCB0byBjb2xsZWN0IGVhY2ggYW50J3MgcnNzaSBjb25jdXJyZW50bHkKKy8vcnNzaTEgaXMgcmVwb3J0IHRvIHBhaXIyIEFudCBhbmQgcnNzMiBpcyByZXByb3QgdG8gcGFpcjEgQW50IHdoZW4gNCBBbnQKKyNkZWZpbmUgQ09MTEVDVF9SWF9BTlRFTk5BX0FWRVJBR0VfUlNTSShfcEFkLCBfcnNzaTEsIF9yc3NpMikJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwlTSE9SVAlBdmdSc3NpOwkJCQkJCQkJCQkJCQkJCVwKKwlVQ0hBUglVc2VkQW50OwkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoX3BBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPT0gMCkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJVXNlZEFudCA9IF9wQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50OwkJCQkJCQlcCisJCUF2Z1Jzc2kgPSBfcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbVXNlZEFudF07CQkJCQkJXAorCQlpZiAoQXZnUnNzaSA8IDApCQkJCQkJCQkJCQkJCVwKKwkJCUF2Z1Jzc2kgPSBBdmdSc3NpIC0gKEF2Z1Jzc2kgPj4gMykgKyBfcnNzaTE7CQkJCQlcCisJCWVsc2UJCQkJCQkJCQkJCQkJCQkJXAorCQkJQXZnUnNzaSA9IF9yc3NpMSA8PCAzOwkJCQkJCQkJCQkJXAorCQlfcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbVXNlZEFudF0gPSBBdmdSc3NpOwkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQkJXAorCQlVc2VkQW50ID0gX3BBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudDsJCQkJCQkJXAorCQlBdmdSc3NpID0gX3BBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW1VzZWRBbnRdOwkJCQkJCVwKKwkJaWYgKChBdmdSc3NpIDwgMCkgJiYgKF9wQWQtPlJ4QW50LkZpcnN0UGt0QXJyaXZlZFdoZW5FdmFsdWF0ZSkpCQlcCisJCQlBdmdSc3NpID0gQXZnUnNzaSAtIChBdmdSc3NpID4+IDMpICsgX3Jzc2kxOwkJCQkJXAorCQllbHNlCQkJCQkJCQkJCQkJCQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJCQkJXAorCQkJX3BBZC0+UnhBbnQuRmlyc3RQa3RBcnJpdmVkV2hlbkV2YWx1YXRlID0gVFJVRTsJCQkJCVwKKwkJCUF2Z1Jzc2kgPSBfcnNzaTEgPDwgMzsJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQkJXAorCQlfcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbVXNlZEFudF0gPSBBdmdSc3NpOwkJCQkJCVwKKwkJX3BBZC0+UnhBbnQuUmN2UGt0TnVtV2hlbkV2YWx1YXRlKys7CQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCVwKK30KKyNlbmRpZiAvLyBSVDMweHggLy8KKworCisjZGVmaW5lIE5ESVNfUVVFUllfQlVGRkVSKF9OZGlzQnVmLCBfcHBWQSwgX3BCdWZMZW4pICAgICAgICAgICAgICAgICAgICBcCisgICAgTmRpc1F1ZXJ5QnVmZmVyKF9OZGlzQnVmLCBfcHBWQSwgX3BCdWZMZW4pCisKKyNkZWZpbmUgTUFDX0FERFJfRVFVQUwocEFkZHIxLHBBZGRyMikgICAgICAgICAgIFJUTVBFcXVhbE1lbW9yeSgoUFZPSUQpKHBBZGRyMSksIChQVk9JRCkocEFkZHIyKSwgTUFDX0FERFJfTEVOKQorI2RlZmluZSBTU0lEX0VRVUFMKHNzaWQxLCBsZW4xLCBzc2lkMiwgbGVuMikgICAgKChsZW4xPT1sZW4yKSAmJiAoUlRNUEVxdWFsTWVtb3J5KHNzaWQxLCBzc2lkMiwgbGVuMSkpKQorCisvLworLy8gQ2hlY2sgaWYgaXQgaXMgSmFwYW4gVzUzKGNoNTIsNTYsNjAsNjQpIGNoYW5uZWwuCisvLworI2RlZmluZSBKYXBhbkNoYW5uZWxDaGVjayhjaGFubmVsKSAgKChjaGFubmVsID09IDUyKSB8fCAoY2hhbm5lbCA9PSA1NikgfHwgKGNoYW5uZWwgPT0gNjApIHx8IChjaGFubmVsID09IDY0KSkKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBTVEFfUE9SVF9TRUNVUkVEKF9wQWQpIFwKK3sgXAorCV9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyBcCisJTmRpc0FjcXVpcmVTcGluTG9jaygmX3BBZC0+TWFjVGFiTG9jayk7IFwKKwlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IF9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZDsgXAorCU5kaXNSZWxlYXNlU3BpbkxvY2soJl9wQWQtPk1hY1RhYkxvY2spOyBcCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworLy8KKy8vIFJlZ2lzdGVyIHNldCBwYWlyIGZvciBpbml0aWFsemF0aW9uIHJlZ2lzdGVyIHNldCBkZWZpbml0aW9uCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9SVE1QX1JFR19QQUlSCit7CisJVUxPTkcgICBSZWdpc3RlcjsKKwlVTE9ORyAgIFZhbHVlOworfSBSVE1QX1JFR19QQUlSLCAqUFJUTVBfUkVHX1BBSVI7CisKK3R5cGVkZWYgc3RydWN0ICBfUkVHX1BBSVIKK3sKKwlVQ0hBUiAgIFJlZ2lzdGVyOworCVVDSEFSICAgVmFsdWU7Cit9IFJFR19QQUlSLCAqUFJFR19QQUlSOworCisvLworLy8gUmVnaXN0ZXIgc2V0IHBhaXIgZm9yIGluaXRpYWx6YXRpb24gcmVnaXN0ZXIgc2V0IGRlZmluaXRpb24KKy8vCit0eXBlZGVmIHN0cnVjdCAgX1JUTVBfUkZfUkVHUworeworCVVDSEFSICAgQ2hhbm5lbDsKKwlVTE9ORyAgIFIxOworCVVMT05HICAgUjI7CisJVUxPTkcgICBSMzsKKwlVTE9ORyAgIFI0OworfSBSVE1QX1JGX1JFR1MsICpQUlRNUF9SRl9SRUdTOworCit0eXBlZGVmIHN0cnVjdCBfRlJFUVVFTkNZX0lURU0geworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJTjsKKwlVQ0hBUglSOworCVVDSEFSCUs7Cit9IEZSRVFVRU5DWV9JVEVNLCAqUEZSRVFVRU5DWV9JVEVNOworCisvLworLy8gIERhdGEgYnVmZmVyIGZvciBETUEgb3BlcmF0aW9uLCB0aGUgYnVmZmVyIG11c3QgYmUgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkKKy8vICBCb3RoIERNQSB0byAvIGZyb20gQ1BVIHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUuCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9SVE1QX0RNQUJVRgoreworCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsKKwlQVk9JRCAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAgICAgICAgIC8vIFR4QnVmIHZpcnR1YWwgYWRkcmVzcworCU5ESVNfUEhZU0lDQUxfQUREUkVTUyAgIEFsbG9jUGE7ICAgICAgICAgICAgLy8gVHhCdWYgcGh5c2ljYWwgYWRkcmVzcworfSBSVE1QX0RNQUJVRiwgKlBSVE1QX0RNQUJVRjsKKworCit0eXBlZGVmCXVuaW9uCV9IRUFERVJfODAyXzExX1NFUXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgc3RydWN0IHsKKyAgIAlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKwlVU0hPUlQJCQlGcmFnOjQ7CisgICAgfSAgIGZpZWxkOworI2Vsc2UKKyAgICBzdHJ1Y3QgeworCVVTSE9SVAkJCUZyYWc6NDsKKwlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKyAgICB9ICAgZmllbGQ7CisjZW5kaWYKKyAgICBVU0hPUlQgICAgICAgICAgIHZhbHVlOworfQlIRUFERVJfODAyXzExX1NFUSwgKlBIRUFERVJfODAyXzExX1NFUTsKKworLy8KKy8vICBEYXRhIGJ1ZmZlciBmb3IgRE1BIG9wZXJhdGlvbiwgdGhlIGJ1ZmZlciBtdXN0IGJlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5CisvLyAgQm90aCBETUEgdG8gLyBmcm9tIENQVSB1c2UgdGhlIHNhbWUgc3RydWN0dXJlLgorLy8KK3R5cGVkZWYgc3RydWN0ICBfUlRNUF9SRU9SREVSQlVGCit7CisJQk9PTEVBTgkJCUlzRnVsbDsKKwlQVk9JRCAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAgICAgICAgIC8vIFR4QnVmIHZpcnR1YWwgYWRkcmVzcworCVVDSEFSCQkJSGVhZGVyODAyXzNbMTRdOworCUhFQURFUl84MDJfMTFfU0VRCQkJU2VxdWVuY2U7CS8vc3VwcG9ydCBjb21wcmVzc2VkIGJpdG1hcCBCQSwgc28gbm8gY29uc2lkZXIgZnJhZ21lbnQgaW4gQkEKKwlVQ0hBUiAJCURhdGFPZmZzZXQ7CisJVVNIT1JUIAkJRGF0YXNpemU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQWxsb2NTaXplOworI2lmZGVmIFJUMjg3MAorCVBVQ0hBUgkJCQkJQWxsb2NQYTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KK30gICBSVE1QX1JFT1JERVJCVUYsICpQUlRNUF9SRU9SREVSQlVGOworCisvLworLy8gQ29udHJvbCBibG9jayAoRGVzY3JpcHRvcikgZm9yIGFsbCByaW5nIGRlc2NyaXB0b3IgRE1BIG9wZXJhdGlvbiwgYnVmZmVyIG11c3QgYmUKKy8vIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LiBORElTX1BBQ0tFVCBzdG9yZWQgdGhlIGJpbmRpbmcgUnggcGFja2V0IGRlc2NyaXB0b3IKKy8vIHdoaWNoIHdvbid0IGJlIHJlbGVhc2VkLCBkcml2ZXIgaGFzIHRvIHdhaXQgdW50aWwgdXBwZXIgbGF5ZXIgcmV0dXJuIHRoZSBwYWNrZXQKKy8vIGJlZm9yZSBnaXZlaW5nIHVwIHRoaXMgcnggcmluZyBkZXNjcmlwdG9yIHRvIEFTSUMuIE5ESVNfQlVGRkVSIGlzIGFzc29jYWl0ZWQgcGFpcgorLy8gdG8gZGVzY3JpYmUgdGhlIHBhY2tldCBidWZmZXIuIEZvciBUeCwgTkRJU19QQUNLRVQgc3RvcmVkIHRoZSB0eCBwYWNrZXQgZGVzY3JpcHRvcgorLy8gd2hpY2ggZHJpdmVyIHNob3VsZCBBQ0sgdXBwZXIgbGF5ZXIgd2hlbiB0aGUgdHggaXMgcGh5c2ljYWxseSBkb25lIG9yIGZhaWxlZC4KKy8vCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9ETUFDQgoreworCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsgICAgICAgICAgLy8gQ29udHJvbCBibG9jayBzaXplCisJUFZPSUQgICAgICAgICAgICAgICAgICAgQWxsb2NWYTsgICAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHZpcnR1YWwgYWRkcmVzcworCU5ESVNfUEhZU0lDQUxfQUREUkVTUyAgIEFsbG9jUGE7ICAgICAgICAgICAgLy8gQ29udHJvbCBibG9jayBwaHlzaWNhbCBhZGRyZXNzCisJUE5ESVNfUEFDS0VUIHBOZGlzUGFja2V0OworCVBORElTX1BBQ0tFVCBwTmV4dE5kaXNQYWNrZXQ7CisKKwlSVE1QX0RNQUJVRiAgICAgICAgICAgICBEbWFCdWY7ICAgICAgICAgICAgIC8vIEFzc29jaWF0ZWQgRE1BIGJ1ZmZlciBzdHJ1Y3R1cmUKK30gUlRNUF9ETUFDQiwgKlBSVE1QX0RNQUNCOworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9UWF9CVUYKK3sKKwlQUVVFVUVfRU5UUlkgICAgTmV4dDsKKwlVQ0hBUiAgICAgICAgICAgSW5kZXg7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQWxsb2NTaXplOyAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHNpemUKKwlQVk9JRCAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAgICAgICAgIC8vIENvbnRyb2wgYmxvY2sgdmlydHVhbCBhZGRyZXNzCisJTkRJU19QSFlTSUNBTF9BRERSRVNTICAgQWxsb2NQYTsgICAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHBoeXNpY2FsIGFkZHJlc3MKK30gUlRNUF9UWEJVRiwgKlBSVE1QX1RYQlVGOworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9SWF9CVUYKK3sKKwlCT09MRUFOICAgICAgICAgICBJblVzZTsKKwlVTE9ORyAgICAgICAgICAgCUJ5QmFSZWNJbmRleDsKKwlSVE1QX1JFT1JERVJCVUYJTUFQX1JYQnVmW01BWF9SWF9SRU9SREVSQlVGXTsKK30gUlRNUF9SWEJVRiwgKlBSVE1QX1JYQlVGOwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfVFhfUklORworeworCVJUTVBfRE1BQ0IgIENlbGxbVFhfUklOR19TSVpFXTsKKwlVSU5UMzIJCVR4Q3B1SWR4OworCVVJTlQzMgkJVHhEbWFJZHg7CisJVUlOVDMyCQlUeFN3RnJlZUlkeDsgCS8vIHNvZnR3YXJlIG5leHQgZnJlZSB0eCBpbmRleAorfSBSVE1QX1RYX1JJTkcsICpQUlRNUF9UWF9SSU5HOworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9SWF9SSU5HCit7CisJUlRNUF9ETUFDQiAgQ2VsbFtSWF9SSU5HX1NJWkVdOworCVVJTlQzMgkJUnhDcHVJZHg7CisJVUlOVDMyCQlSeERtYUlkeDsKKwlJTlQzMgkJUnhTd1JlYWRJZHg7IAkvLyBzb2Z0d2FyZSBuZXh0IHJlYWQgaW5kZXgKK30gUlRNUF9SWF9SSU5HLCAqUFJUTVBfUlhfUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfTUdNVF9SSU5HCit7CisJUlRNUF9ETUFDQiAgQ2VsbFtNR01UX1JJTkdfU0laRV07CisJVUlOVDMyCQlUeENwdUlkeDsKKwlVSU5UMzIJCVR4RG1hSWR4OworCVVJTlQzMgkJVHhTd0ZyZWVJZHg7IC8vIHNvZnR3YXJlIG5leHQgZnJlZSB0eCBpbmRleAorfSBSVE1QX01HTVRfUklORywgKlBSVE1QX01HTVRfUklORzsKKworLy8KKy8vICBTdGF0aXN0aWMgY291bnRlciBzdHJ1Y3R1cmUKKy8vCit0eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl84MDJfMworeworCS8vIEdlbmVyYWwgU3RhdHMKKwlVTE9ORyAgICAgICBHb29kVHJhbnNtaXRzOworCVVMT05HICAgICAgIEdvb2RSZWNlaXZlczsKKwlVTE9ORyAgICAgICBUeEVycm9yczsKKwlVTE9ORyAgICAgICBSeEVycm9yczsKKwlVTE9ORyAgICAgICBSeE5vQnVmZmVyOworCisJLy8gRXRoZXJuZXQgU3RhdHMKKwlVTE9ORyAgICAgICBSY3ZBbGlnbm1lbnRFcnJvcnM7CisJVUxPTkcgICAgICAgT25lQ29sbGlzaW9uOworCVVMT05HICAgICAgIE1vcmVDb2xsaXNpb25zOworCit9IENPVU5URVJfODAyXzMsICpQQ09VTlRFUl84MDJfMzsKKwordHlwZWRlZiBzdHJ1Y3QgX0NPVU5URVJfODAyXzExIHsKKwlVTE9ORyAgICAgICAgICAgTGVuZ3RoOworCUxBUkdFX0lOVEVHRVIgICBMYXN0VHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OworCUxBUkdFX0lOVEVHRVIgICBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CisJTEFSR0VfSU5URUdFUiAgIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgRmFpbGVkQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIFJldHJ5Q291bnQ7CisJTEFSR0VfSU5URUdFUiAgIE11bHRpcGxlUmV0cnlDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgUlRTU3VjY2Vzc0NvdW50OworCUxBUkdFX0lOVEVHRVIgICBSVFNGYWlsdXJlQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIEFDS0ZhaWx1cmVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgRnJhbWVEdXBsaWNhdGVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgUmVjZWl2ZWRGcmFnbWVudENvdW50OworCUxBUkdFX0lOVEVHRVIgICBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIEZDU0Vycm9yQ291bnQ7Cit9IENPVU5URVJfODAyXzExLCAqUENPVU5URVJfODAyXzExOworCit0eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl9SQUxJTksgeworCVVMT05HICAgICAgICAgICBUcmFuc21pdHRlZEJ5dGVDb3VudDsgICAvLyBib3RoIHN1Y2Nlc3NmdWwgYW5kIGZhaWx1cmUsIHVzZWQgdG8gY2FsY3VsYXRlIFRYIHRocm91Z2hwdXQKKwlVTE9ORyAgICAgICAgICAgUmVjZWl2ZWRCeXRlQ291bnQ7ICAgICAgLy8gYm90aCBDUkMgb2theSBhbmQgQ1JDIGVycm9yLCB1c2VkIHRvIGNhbGN1bGF0ZSBSWCB0aHJvdWdocHV0CisJVUxPTkcgICAgICAgICAgIEJlZW5EaXNhc3NvY2lhdGVkQ291bnQ7CisJVUxPTkcgICAgICAgICAgIEJhZENRSUF1dG9SZWNvdmVyeUNvdW50OworCVVMT05HICAgICAgICAgICBQb29yQ1FJUm9hbWluZ0NvdW50OworCVVMT05HICAgICAgICAgICBNZ210UmluZ0Z1bGxDb3VudDsKKwlVTE9ORyAgICAgICAgICAgUnhDb3VudFNpbmNlTGFzdE5VTEw7CisJVUxPTkcgICAgICAgICAgIFJ4Q291bnQ7CisJVUxPTkcgICAgICAgICAgIFJ4UmluZ0VyckNvdW50OworCVVMT05HICAgICAgICAgICBLaWNrVHhDb3VudDsKKwlVTE9ORyAgICAgICAgICAgVHhSaW5nRXJyQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIFJlYWxGY3NFcnJDb3VudDsKKwlVTE9ORyAgICAgICAgICAgUGVuZGluZ05kaXNQYWNrZXRDb3VudDsKKworCVVMT05HICAgICAgICAgICBPbmVTZWNPc1R4Q291bnRbTlVNX09GX1RYX1JJTkddOworCVVMT05HICAgICAgICAgICBPbmVTZWNEbWFEb25lQ291bnRbTlVNX09GX1RYX1JJTkddOworCVVJTlQzMiAgICAgICAgICBPbmVTZWNUeERvbmVDb3VudDsKKwlVTE9ORyAgICAgICAgICAgT25lU2VjUnhDb3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhBZ2dyZWdhdGlvbkNvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQ7CisKKwlVSU5UMzIgICAJCU9uZVNlY0ZyYW1lRHVwbGljYXRlQ291bnQ7CisKKyNpZmRlZiBSVDI4NzAKKwlVTE9ORyAgICAgICAgICAgT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQ7ICAgLy8gYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsdXJlLCB1c2VkIHRvIGNhbGN1bGF0ZSBUWCB0aHJvdWdocHV0CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhOb1JldHJ5T2tDb3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhSZXRyeU9rQ291bnQ7CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4RmFpbENvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNGYWxzZUNDQUNudDsgICAgICAvLyBDQ0EgZXJyb3IgY291bnQsIGZvciBkZWJ1ZyBwdXJwb3NlLCBtaWdodCBtb3ZlIHRvIGdsb2JhbCBjb3VudGVyCisJVUlOVDMyICAgICAgICAgIE9uZVNlY1J4T2tDbnQ7ICAgICAgICAgIC8vIFJYIHdpdGhvdXQgZXJyb3IKKwlVSU5UMzIgICAgICAgICAgT25lU2VjUnhPa0RhdGFDbnQ7ICAgICAgLy8gdW5pY2FzdC10by1tZSBEQVRBIGZyYW1lIGNvdW50CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1J4RmNzRXJyQ250OyAgICAgIC8vIENSQyBlcnJvcgorCVVJTlQzMiAgICAgICAgICBPbmVTZWNCZWFjb25TZW50Q250OworCVVJTlQzMiAgICAgICAgICBMYXN0T25lU2VjVG90YWxUeENvdW50OyAvLyBPbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgT25lU2VjVHhSZXRyeU9rQ291bnQgKyBPbmVTZWNUeEZhaWxDb3VudAorCVVJTlQzMiAgICAgICAgICBMYXN0T25lU2VjUnhPa0RhdGFDbnQ7ICAvLyBPbmVTZWNSeE9rRGF0YUNudAorCVVMT05HCQlEdXBsaWNhdGVSY3Y7CisJVUxPTkcJCVR4QWdnQ291bnQ7CisJVUxPTkcJCVR4Tm9uQWdnQ291bnQ7CisJVUxPTkcJCVR4QWdnMU1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2cyTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzNNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnNE1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2c1TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzZNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnN01QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2c4TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzlNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTBNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTFNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTJNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTNNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTRNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTVNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTZNUERVQ291bnQ7CisKKwlMQVJHRV9JTlRFR0VSICAgICAgIFRyYW5zbWl0dGVkT2N0ZXRzSW5BTVNEVTsKKwlMQVJHRV9JTlRFR0VSICAgICAgIFRyYW5zbWl0dGVkQU1TRFVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgICAgIFJlY2VpdmVkT2N0ZXNJbkFNU0RVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBSZWNlaXZlZEFNU0RVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBUcmFuc21pdHRlZEFNUERVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBUcmFuc21pdHRlZE1QRFVzSW5BTVBEVUNvdW50OworCUxBUkdFX0lOVEVHRVIgICAgICAgVHJhbnNtaXR0ZWRPY3RldHNJbkFNUERVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBNUERVSW5SZWNlaXZlZEFNUERVQ291bnQ7Cit9IENPVU5URVJfUkFMSU5LLCAqUENPVU5URVJfUkFMSU5LOworCit0eXBlZGVmIHN0cnVjdCBfUElEX0NPVU5URVIgeworCVVMT05HICAgICAgICAgICBUeEFja1JlcXVpcmVkQ291bnQ7ICAgICAgLy8gQ1JDIGVycm9yCisJVUxPTkcgICAgICAgICAgIFR4QWdncmVDb3VudDsKKwlVTE9ORyAgICAgICAgICAgVHhTdWNjZXNzQ291bnQ7IC8vIE9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKyBPbmVTZWNUeFJldHJ5T2tDb3VudCArIE9uZVNlY1R4RmFpbENvdW50CisJVUxPTkcJCUxhc3RTdWNjZXNzUmF0ZTsKK30gUElEX0NPVU5URVIsICpQUElEX0NPVU5URVI7CisKK3R5cGVkZWYgc3RydWN0IF9DT1VOVEVSX0RSUyB7CisJLy8gdG8gcmVjb3JkIHRoZSBlYWNoIFRYIHJhdGUncyBxdWFsaXR5LiAwIGlzIGJlc3QsIHRoZSBiaWdnZXIgdGhlIHdvcnNlLgorCVVTSE9SVCAgICAgICAgICBUeFF1YWxpdHlbTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0hdOworCVVDSEFSICAgICAgICAgICBQRVJbTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0hdOworCVVDSEFSICAgICAgICAgICBUeFJhdGVVcFBlbmFsdHk7ICAgICAgLy8gZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFzdCB1bnN0YWJsZSBjb25kaXRpb24KKwlVTE9ORyAgICAgICAgICAgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQorCUJPT0xFQU4gICAgICAgICBmTm9pc3lFbnZpcm9ubWVudDsKKwlCT09MRUFOICAgICAgICAgZkxhc3RTZWNBY2NvcmRpbmdSU1NJOworCVVDSEFSICAgICAgICAgICBMYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uOyAvLyAwOiBubyBjaGFuZ2UsIDE6cmF0ZSBVUCwgMjpyYXRlIGRvd24KKwlVQ0hBUgkJCUxhc3RUaW1lVHhSYXRlQ2hhbmdlQWN0aW9uOyAvL0tlZXAgbGFzdCB0aW1lIHZhbHVlIG9mIExhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24KKwlVTE9ORwkJCUxhc3RUeE9rQ291bnQ7Cit9IENPVU5URVJfRFJTLCAqUENPVU5URVJfRFJTOworCisvLworLy8gIEFyY2ZvdXIgU3RydWN0dXJlIEFkZGVkIGJ5IFBhdWxXdQorLy8KK3R5cGVkZWYgc3RydWN0ICBfQVJDRk9VUgoreworCVVJTlQgICAgICAgICAgICBYOworCVVJTlQgICAgICAgICAgICBZOworCVVDSEFSICAgICAgICAgICBTVEFURVsyNTZdOworfSBBUkNGT1VSQ09OVEVYVCwgKlBBUkNGT1VSQ09OVEVYVDsKKworLy8gTUlNTyBUeCBwYXJhbWV0ZXIsIFNob3J0R0ksIE1DUywgU1RCQywgZXRjLiAgdGhlc2UgYXJlIGZpZWxkcyBpbiBUWFdJIHRvby4ganVzdCBjb3B5IHRvIFRYV0kuCit0eXBlZGVmIHN0cnVjdCAgX1JFQ0VJVkVfU0VUVElORyB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVTSE9SVAkJTUlNTzoxOworCVVTSE9SVAkJT0ZETToxOworCVVTSE9SVAkJcnN2OjM7CisJVVNIT1JUCQlTVEJDOjI7CS8vU1BBQ0UKKwlVU0hPUlQJCVNob3J0R0k6MTsKKwlVU0hPUlQJCU1vZGU6MjsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVU0hPUlQgICAJTnVtT2ZSWDoyOyAgICAgICAgICAgICAgICAgLy8gTUlNTy4gV0UgSEFWRSAzUgorI2Vsc2UKKwlVU0hPUlQgICAJTnVtT2ZSWDoyOyAgICAgICAgICAgICAgICAgLy8gTUlNTy4gV0UgSEFWRSAzUgorCVVTSE9SVAkJTW9kZToyOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVAkJU2hvcnRHSToxOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisJVVNIT1JUCQlyc3Y6MzsKKwlVU0hPUlQJCU9GRE06MTsKKwlVU0hPUlQJCU1JTU86MTsKKyNlbmRpZgorIH0gUkVDRUlWRV9TRVRUSU5HLCAqUFJFQ0VJVkVfU0VUVElORzsKKworLy8gU2hhcmVkIGtleSBkYXRhIHN0cnVjdHVyZQordHlwZWRlZiBzdHJ1Y3QgIF9XRVBfS0VZIHsKKwlVQ0hBUiAgIEtleUxlbjsgICAgICAgICAgICAgICAgICAgICAvLyBLZXkgbGVuZ3RoIGZvciBlYWNoIGtleSwgMDogZW50cnkgaXMgaW52YWxpZAorCVVDSEFSICAgS2V5W01BWF9MRU5fT0ZfS0VZXTsgICAgICAgIC8vIHJpZ2h0IG5vdyB3ZSBpbXBsZW1lbnQgNCBrZXlzLCAxMjggYml0cyBtYXgKK30gV0VQX0tFWSwgKlBXRVBfS0VZOworCit0eXBlZGVmIHN0cnVjdCBfQ0lQSEVSX0tFWSB7CisJVUNIQVIgICBLZXlbMTZdOyAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyB3ZSBpbXBsZW1lbnQgNCBrZXlzLCAxMjggYml0cyBtYXgKKwlVQ0hBUiAgIFJ4TWljWzhdOwkJCS8vIG1ha2UgYWxpZ25tZW50CisJVUNIQVIgICBUeE1pY1s4XTsKKwlVQ0hBUiAgIFR4VHNjWzZdOyAgICAgICAgICAgLy8gNDhiaXQgVFNDIHZhbHVlCisJVUNIQVIgICBSeFRzY1s2XTsgICAgICAgICAgIC8vIDQ4Yml0IFRTQyB2YWx1ZQorCVVDSEFSICAgQ2lwaGVyQWxnOyAgICAgICAgICAvLyAwLW5vbmUsIDE6V0VQNjQsIDI6V0VQMTI4LCAzOlRLSVAsIDQ6QUVTLCA1OkNLSVA2NCwgNjpDS0lQMTI4CisJVUNIQVIgICBLZXlMZW47CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVUNIQVIgICBCc3NJZFs2XTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIC8vIEtleSBsZW5ndGggZm9yIGVhY2gga2V5LCAwOiBlbnRyeSBpcyBpbnZhbGlkCisJVUNIQVIgICBUeXBlOyAgICAgICAgICAgICAgIC8vIEluZGljYXRlIFBhaXJ3aXNlL0dyb3VwIHdoZW4gcmVwb3J0aW5nIE1JQyBlcnJvcgorfSBDSVBIRVJfS0VZLCAqUENJUEhFUl9LRVk7CisKK3R5cGVkZWYgc3RydWN0IF9CQlBfVFVOSU5HX1NUUlVDVCB7CisJQk9PTEVBTiAgICAgRW5hYmxlOworCVVDSEFSICAgICAgIEZhbHNlQ2NhQ291bnRVcHBlckJvdW5kOyAgLy8gMTAwIHBlciBzZWMKKwlVQ0hBUiAgICAgICBGYWxzZUNjYUNvdW50TG93ZXJCb3VuZDsgIC8vIDEwIHBlciBzZWMKKwlVQ0hBUiAgICAgICBSMTdMb3dlckJvdW5kOyAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFMlBST00KKwlVQ0hBUiAgICAgICBSMTdVcHBlckJvdW5kOyAgICAgICAgICAgIC8vIDB4NjggYWNjb3JkaW5nIHRvIERhdmlkIFR1bmcKKwlVQ0hBUiAgICAgICBDdXJyZW50UjE3VmFsdWU7Cit9IEJCUF9UVU5JTkcsICpQQkJQX1RVTklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1NPRlRfUlhfQU5UX0RJVkVSU0lUWV9TVFJVQ1QgeworCVVDSEFSICAgICBFdmFsdWF0ZVBlcmlvZDsJCSAvLyAwOm5vdCBldmFsdXRlIHN0YXR1cywgMTogZXZhbHVhdGUgc3RhdHVzLCAyOiBzd2l0Y2hpbmcgc3RhdHVzCisJVUNIQVIgICAgIEV2YWx1YXRlU3RhYmxlQ250OworCVVDSEFSICAgICBQYWlyMVByaW1hcnlSeEFudDsgICAgIC8vIDA6QW50LUUxLCAxOkFudC1FMgorCVVDSEFSICAgICBQYWlyMVNlY29uZGFyeVJ4QW50OyAgIC8vIDA6QW50LUUxLCAxOkFudC1FMgorCVVDSEFSICAgICBQYWlyMlByaW1hcnlSeEFudDsgICAgIC8vIDA6QW50LUUzLCAxOkFudC1FNAorCVVDSEFSICAgICBQYWlyMlNlY29uZGFyeVJ4QW50OyAgIC8vIDA6QW50LUUzLCAxOkFudC1FNAorCVNIT1JUICAgICBQYWlyMUF2Z1Jzc2lbMl07ICAgICAgIC8vIEF2Z1Jzc2lbMF06RTEsIEF2Z1Jzc2lbMV06RTIKKwlTSE9SVCAgICAgUGFpcjJBdmdSc3NpWzJdOyAgICAgICAvLyBBdmdSc3NpWzBdOkUzLCBBdmdSc3NpWzFdOkU0CisJU0hPUlQgICAgIFBhaXIxTGFzdEF2Z1Jzc2k7ICAgICAgLy8KKwlTSE9SVCAgICAgUGFpcjJMYXN0QXZnUnNzaTsgICAgICAvLworCVVMT05HICAgICBSY3ZQa3ROdW1XaGVuRXZhbHVhdGU7CisJQk9PTEVBTiAgIEZpcnN0UGt0QXJyaXZlZFdoZW5FdmFsdWF0ZTsKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgIFJ4QW50RGl2ZXJzaXR5VGltZXI7Cit9IFNPRlRfUlhfQU5UX0RJVkVSU0lUWSwgKlBTT0ZUX1JYX0FOVF9ESVZFUlNJVFk7CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0FVVEhfSU5GTyB7CisJQk9PTEVBTiAgICAgICAgIEVuYWJsZWQ7ICAgICAgICAvL1R1cmU6IEVuYWJsZSBMRUFQIEF1dGhlbnRpY2F0aW9uCisJQk9PTEVBTiAgICAgICAgIENDS007ICAgICAgICAgICAvL1R1cmU6IFVzZSBGYXN0IFJlYXV0aGVudGljYXRpb24gd2l0aCBDQ0tNCisJVUNIQVIgICAgICAgICAgIFJlc2VydmVbMl07CisJVUNIQVIgICAgICAgICAgIFVzZXJOYW1lWzI1Nl07ICAvL0xFQVAsIFVzZXIgbmFtZQorCVVMT05HICAgICAgICAgICBVc2VyTmFtZUxlbjsKKwlVQ0hBUiAgICAgICAgICAgUGFzc3dvcmRbMjU2XTsgIC8vTEVBUCwgVXNlciBQYXNzd29yZAorCVVMT05HICAgICAgICAgICBQYXNzd29yZExlbjsKK30gTEVBUF9BVVRIX0lORk8sICpQTEVBUF9BVVRIX0lORk87CisKK3R5cGVkZWYgc3RydWN0IHsKKwlVQ0hBUiAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICBFcnJvckNvZGVbMl07ICAvLzAwIDAxLUludmFsaWQgYXV0aGVudGljYXRpb24gdHlwZQorCQkJCQkJCQkvLzAwIDAyLUF1dGhlbnRpY2F0aW9uIHRpbWVvdXQKKwkJCQkJCQkJLy8wMCAwMy1DaGFsbGVuZ2UgZnJvbSBBUCBmYWlsZWQKKwkJCQkJCQkJLy8wMCAwNC1DaGFsbGVuZ2UgdG8gQVAgZmFpbGVkCisJQk9PTEVBTiAgICAgIFJlcG9ydGVkOworfSBST0dVRUFQX0VOVFJZLCAqUFJPR1VFQVBfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlVQ0hBUiAgICAgICAgICAgICAgIFJvZ3VlQXBOcjsKKwlST0dVRUFQX0VOVFJZICAgICAgIFJvZ3VlQXBFbnRyeVtNQVhfTEVOX09GX0JTU19UQUJMRV07Cit9IFJPR1VFQVBfVEFCTEUsICpQUk9HVUVBUF9UQUJMRTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUJPT0xFQU4gICAgIEVuYWJsZTsKKwlVQ0hBUiAgICAgICBEZWx0YTsKKwlCT09MRUFOICAgICBQbHVzU2lnbjsKK30gQ0NLX1RYX1BPV0VSX0NBTElCUkFURSwgKlBDQ0tfVFhfUE9XRVJfQ0FMSUJSQVRFOworCisvLworLy8gUmVjZWl2ZSBUdXBsZSBDYWNoZSBGb3JtYXQKKy8vCit0eXBlZGVmIHN0cnVjdCAgX1RVUExFX0NBQ0hFICAgIHsKKwlCT09MRUFOICAgICAgICAgVmFsaWQ7CisJVUNIQVIgICAgICAgICAgIE1hY0FkZHJlc3NbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICAgICAgU2VxdWVuY2U7CisJVVNIT1JUICAgICAgICAgIEZyYWc7Cit9IFRVUExFX0NBQ0hFLCAqUFRVUExFX0NBQ0hFOworCisvLworLy8gRnJhZ21lbnQgRnJhbWUgc3RydWN0dXJlCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9GUkFHTUVOVF9GUkFNRSB7CisJUE5ESVNfUEFDS0VUICAgIHBGcmFnUGFja2V0OworCVVMT05HICAgICAgIFJ4U2l6ZTsKKwlVU0hPUlQgICAgICBTZXF1ZW5jZTsKKwlVU0hPUlQgICAgICBMYXN0RnJhZzsKKwlVTE9ORyAgICAgICBGbGFnczsgICAgICAgICAgLy8gU29tZSBleHRyYSBmcmFtZSBpbmZvcm1hdGlvbi4gYml0IDA6IExMQyBwcmVzZW50ZWQKK30gRlJBR01FTlRfRlJBTUUsICpQRlJBR01FTlRfRlJBTUU7CisKKworLy8KKy8vIFBhY2tldCBpbmZvcm1hdGlvbiBmb3IgTmRpc1F1ZXJ5UGFja2V0CisvLwordHlwZWRlZiBzdHJ1Y3QgIF9QQUNLRVRfSU5GTyAgICB7CisJVUlOVCAgICAgICAgICAgIFBoeXNpY2FsQnVmZmVyQ291bnQ7ICAgIC8vIFBoeXNpY2FsIGJyZWFrcyBvZiBidWZmZXIgZGVzY3JpcG9yIGNoYWluZWQKKwlVSU5UICAgICAgICAgICAgQnVmZmVyQ291bnQgOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIEJ1ZmZlciBkZXNjcmlwdG9yIGNoYWluZWQKKwlVSU5UICAgICAgICAgICAgVG90YWxQYWNrZXRMZW5ndGggOyAgICAgLy8gU2VsZiBleHBsYWluZWQKKwlQTkRJU19CVUZGRVIgICAgcEZpcnN0QnVmZmVyOyAgICAgICAgICAgLy8gUG9pbnRlciB0byBmaXJzdCBidWZmZXIgZGVzY3JpcHRvcgorfSBQQUNLRVRfSU5GTywgKlBQQUNLRVRfSU5GTzsKKworLy8KKy8vIFRraXAgS2V5IHN0cnVjdHVyZSB3aGljaCBSQzQga2V5ICYgTUlDIGNhbGN1bGF0aW9uCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9US0lQX0tFWV9JTkZPICB7CisJVUlOVCAgICAgICAgbkJ5dGVzSW5NOyAgLy8gIyBieXRlcyBpbiBNIGZvciBNSUNLRVkKKwlVTE9ORyAgICAgICBJVjE2OworCVVMT05HICAgICAgIElWMzI7CisJVUxPTkcgICAgICAgSzA7ICAgICAgICAgLy8gZm9yIE1JQ0tFWSBMb3cKKwlVTE9ORyAgICAgICBLMTsgICAgICAgICAvLyBmb3IgTUlDS0VZIEhpZworCVVMT05HICAgICAgIEw7ICAgICAgICAgIC8vIEN1cnJlbnQgc3RhdGUgZm9yIE1JQ0tFWQorCVVMT05HICAgICAgIFI7ICAgICAgICAgIC8vIEN1cnJlbnQgc3RhdGUgZm9yIE1JQ0tFWQorCVVMT05HICAgICAgIE07ICAgICAgICAgIC8vIE1lc3NhZ2UgYWNjdW11bGF0b3IgZm9yIE1JQ0tFWQorCVVDSEFSICAgICAgIFJDNEtFWVsxNl07CisJVUNIQVIgICAgICAgTUlDWzhdOworfSBUS0lQX0tFWV9JTkZPLCAqUFRLSVBfS0VZX0lORk87CisKKy8vCisvLyBQcml2YXRlIC8gTWlzYyBkYXRhLCBjb3VudGVycyBmb3IgZHJpdmVyIGludGVybmFsIHVzZQorLy8KK3R5cGVkZWYgc3RydWN0ICBfX1BSSVZBVEVfU1RSVUMgeworCVVJTlQgICAgICAgU3lzdGVtUmVzZXRDbnQ7ICAgICAgICAgLy8gU3lzdGVtIHJlc2V0IGNvdW50ZXIKKwlVSU5UICAgICAgIFR4UmluZ0Z1bGxDbnQ7ICAgICAgICAgIC8vIFR4IHJpbmcgZnVsbCBvY2N1cnJhbmNlIG51bWJlcgorCVVJTlQgICAgICAgUGh5UnhFcnJDbnQ7ICAgICAgICAgICAgLy8gUEhZIFJ4IGVycm9yIGNvdW50LCBmb3IgZGVidWcgcHVycG9zZSwgbWlnaHQgbW92ZSB0byBnbG9iYWwgY291bnRlcgorCS8vIFZhcmlhYmxlcyBmb3IgV0VQIGVuY3J5cHRpb24gLyBkZWNyeXB0aW9uIGluIHJ0bXBfd2VwLmMKKwlVSU5UICAgICAgIEZDU0NSQzMyOworCUFSQ0ZPVVJDT05URVhUICBXRVBDT05URVhUOworCS8vIFRraXAgc3R1ZmYKKwlUS0lQX0tFWV9JTkZPICAgVHg7CisJVEtJUF9LRVlfSU5GTyAgIFJ4OworfSBQUklWQVRFX1NUUlVDLCAqUFBSSVZBVEVfU1RSVUM7CisKKy8vIHN0cnVjdHVyZSB0byB0dW5lIEJCUCBSNjYgKEJCUCBUVU5JTkcpCit0eXBlZGVmIHN0cnVjdCBfQkJQX1I2Nl9UVU5JTkcgeworCUJPT0xFQU4gICAgIGJFbmFibGU7CisJVVNIT1JUICAgICAgRmFsc2VDY2FMb3dlclRocmVzaG9sZDsgIC8vIGRlZmF1bHQgMTAwCisJVVNIT1JUICAgICAgRmFsc2VDY2FVcHBlclRocmVzaG9sZDsgIC8vIGRlZmF1bHQgNTEyCisJVUNIQVIgICAgICAgUjY2RGVsdGE7CisJVUNIQVIgICAgICAgUjY2Q3VycmVudFZhbHVlOworCUJPT0xFQU4JCVI2Nkxvd2VyVXBwZXJTZWxlY3Q7IC8vQmVmb3JlIExpbmtVcCwgVXNlZCBMb3dlckJvdW5kIG9yIFVwcGVyQm91bmQgYXMgUjY2IHZhbHVlLgorfSBCQlBfUjY2X1RVTklORywgKlBCQlBfUjY2X1RVTklORzsKKworLy8gc3RydWN0dXJlIHRvIHN0b3JlIGNoYW5uZWwgVFggcG93ZXIKK3R5cGVkZWYgc3RydWN0IF9DSEFOTkVMX1RYX1BPV0VSIHsKKwlVU0hPUlQgICAgIFJlbWFpbmluZ1RpbWVGb3JVc2U7CQkvL3VuaXQ6IHNlYworCVVDSEFSICAgICAgQ2hhbm5lbDsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJQk9PTEVBTiAgICAgICBiRWZmZWN0ZWRDaGFubmVsOwkvLyBGb3IgQlcgNDAgb3BlcmF0aW5nIGluIDIuNEdIeiAsIHRoZSAiZWZmZWN0ZWQgY2hhbm5lbCIgaXMgdGhlIGNoYW5uZWwgdGhhdCBpcyBjb3ZlcmVkIGluIDQwTWh6LgorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKwlDSEFSICAgICAgIFBvd2VyOworCUNIQVIgICAgICAgUG93ZXIyOworCVVDSEFSICAgICAgTWF4VHhQd3I7CisJVUNIQVIgICAgICBEZnNSZXE7Cit9IENIQU5ORUxfVFhfUE9XRVIsICpQQ0hBTk5FTF9UWF9QT1dFUjsKKworLy8gc3RydWN0dXJlIHRvIHN0b3JlIDgwMi4xMWogY2hhbm5lbCBUWCBwb3dlcgordHlwZWRlZiBzdHJ1Y3QgX0NIQU5ORUxfMTFKX1RYX1BPV0VSIHsKKwlVQ0hBUiAgICAgIENoYW5uZWw7CisJVUNIQVIgICAgICBCVzsJLy8gQldfMTAgb3IgQldfMjAKKwlDSEFSICAgICAgIFBvd2VyOworCUNIQVIgICAgICAgUG93ZXIyOworCVVTSE9SVCAgICAgUmVtYWluaW5nVGltZUZvclVzZTsJCS8vdW5pdDogc2VjCit9IENIQU5ORUxfMTFKX1RYX1BPV0VSLCAqUENIQU5ORUxfMTFKX1RYX1BPV0VSOworCit0eXBlZGVmIGVudW0gX0FCR0JBTkRfU1RBVEVfIHsKKwlVTktOT1dOX0JBTkQsCisJQkdfQkFORCwKKwlBX0JBTkQsCit9IEFCR0JBTkRfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX1NUUlVDVCB7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJLy8gU1RBIHN0YXRlIG1hY2hpbmVzCisJU1RBVEVfTUFDSElORSAgICAgICAgICAgQ250bE1hY2hpbmU7CisJU1RBVEVfTUFDSElORSAgICAgICAgICAgQXNzb2NNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEF1dGhNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEF1dGhSc3BNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIFN5bmNNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIFdwYVBza01hY2hpbmU7CisJU1RBVEVfTUFDSElORSAgICAgICAgICAgTGVhcE1hY2hpbmU7CisJU1RBVEVfTUFDSElORSAgICAgICAgICAgQWlyb25ldE1hY2hpbmU7CisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgQXNzb2NGdW5jW0FTU09DX0ZVTkNfU0laRV07CisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgQXV0aEZ1bmNbQVVUSF9GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEF1dGhSc3BGdW5jW0FVVEhfUlNQX0ZVTkNfU0laRV07CisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgU3luY0Z1bmNbU1lOQ19GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIFdwYVBza0Z1bmNbV1BBX1BTS19GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEFpcm9uZXRGdW5jW0FJUk9ORVRfRlVOQ19TSVpFXTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlTVEFURV9NQUNISU5FX0ZVTkMgICAgICBBY3RGdW5jW0FDVF9GVU5DX1NJWkVdOworCS8vIEFjdGlvbgorCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEFjdE1hY2hpbmU7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCVNUQVRFX01BQ0hJTkUJCQlEbHNNYWNoaW5lOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIERsc0Z1bmNbRExTX0ZVTkNfU0laRV07CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKworCisKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBDaGFubmVsUXVhbGl0eTsgIC8vIDAuLjEwMCwgQ2hhbm5lbCBRdWFsaXR5IEluZGljYXRpb24gZm9yIFJvYW1pbmcKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBOb3czMjsgICAgICAgICAgIC8vIGxhdGNoIHRoZSB2YWx1ZSBvZiBOZGlzR2V0U3lzdGVtVXBUaW1lKCkKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBMYXN0U2VuZE5VTExwc21UaW1lOworCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgYlJ1bm5pbmc7CisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgVGFza0xvY2s7CisJTUxNRV9RVUVVRSAgICAgICAgICAgICAgUXVldWU7CisKKwlVSU5UICAgICAgICAgICAgICAgICAgICBTaGlmdFJlZzsKKworCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIFBlcmlvZGljVGltZXI7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgQVBTRFBlcmlvZGljVGltZXI7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgTGlua0Rvd25UaW1lcjsKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgICBMaW5rVXBUaW1lcjsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1JvdW5kOworCVVMT05HICAgICAgICAgICAgICAgICAgIE9uZVNlY1BlcmlvZGljUm91bmQ7CisKKwlVQ0hBUgkJCQkJUmVhbFJ4UGF0aDsKKwlCT09MRUFOCQkJCQliTG93VGhyb3VnaHB1dDsKKwlCT09MRUFOCQkJCQliRW5hYmxlQXV0b0FudGVubmFDaGVjazsKKwlSQUxJTktfVElNRVJfU1RSVUNUCQlSeEFudEV2YWxUaW1lcjsKKworI2lmZGVmIFJUMzB4eAorCVVDSEFSIENhbGlCVzQwUmZSMjQ7CisJVUNIQVIgQ2FsaUJXMjBSZlIyNDsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworfSBNTE1FX1NUUlVDVCwgKlBNTE1FX1NUUlVDVDsKKworLy8gc3RydWN0dXJlIGZvciByYWRhciBkZXRlY3Rpb24gYW5kIGNoYW5uZWwgc3dpdGNoCit0eXBlZGVmIHN0cnVjdCBfUkFEQVJfREVURUNUX1NUUlVDVCB7CisgICAgLy9CT09MRUFOCQlJRUVFODAyMTFIOwkJCS8vIDA6IGRpc2FibGUsIDE6IGVuYWJsZSBJRUVFODAyLjExaAorCVVDSEFSCQlDU0NvdW50OwkJCS8vQ2hhbm5lbCBzd2l0Y2ggY291bnRlcgorCVVDSEFSCQlDU1BlcmlvZDsJCQkvL0NoYW5uZWwgc3dpdGNoIHBlcmlvZCAoYmVhY29uIGNvdW50KQorCVVDSEFSCQlSRENvdW50OwkJCS8vUmFkYXIgZGV0ZWN0aW9uIGNvdW50ZXIKKwlVQ0hBUgkJUkRNb2RlOwkJCQkvL1JhZGFyIERldGVjdGlvbiBtb2RlCisJVUNIQVIJCVJERHVyUmVnaW9uOwkJLy9SYWRhciBkZXRlY3Rpb24gZHVyYXRpb24gcmVnaW9uCisJVUNIQVIJCUJCUFIxNjsKKwlVQ0hBUgkJQkJQUjE3OworCVVDSEFSCQlCQlBSMTg7CisJVUNIQVIJCUJCUFIyMTsKKwlVQ0hBUgkJQkJQUjIyOworCVVDSEFSCQlCQlBSNjQ7CisJVUxPTkcJCUluU2VydmljZU1vbml0b3JDb3VudDsgLy8gdW5pdDogc2VjCisJVUlOVDgJCURmc1Nlc3Npb25UaW1lOworCUJPT0xFQU4JCWJGYXN0RGZzOworCVVJTlQ4CQlDaE1vdmluZ1RpbWU7CisJVUlOVDgJCUxvbmdQdWxzZVJhZGFyVGg7Cit9IFJBREFSX0RFVEVDVF9TVFJVQ1QsICpQUkFEQVJfREVURUNUX1NUUlVDVDsKKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKK3R5cGVkZWYgZW51bSBDRF9TVEFURV9uCit7CisJQ0RfTk9STUFMLAorCUNEX1NJTEVOQ0UsCisJQ0RfTUFYX1NUQVRFCit9IENEX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBDQVJSSUVSX0RFVEVDVElPTl9zCit7CisJQk9PTEVBTgkJCQkJRW5hYmxlOworCVVJTlQ4CQkJCQlDRFNlc3Npb25UaW1lOworCVVJTlQ4CQkJCQlDRFBlcmlvZDsKKwlDRF9TVEFURQkJCQlDRF9TdGF0ZTsKK30gQ0FSUklFUl9ERVRFQ1RJT04sICpQQ0FSUklFUl9ERVRFQ1RJT047CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCit0eXBlZGVmIGVudW0gX1JFQ19CTE9DS0FDS19TVEFUVVMKK3sKKyAgICBSZWNpcGllbnRfTk9ORT0wLAorCVJlY2lwaWVudF9VU0VELAorCVJlY2lwaWVudF9IYW5kbGVSZXMsCisgICAgUmVjaXBpZW50X0FjY2VwdAorfSBSRUNfQkxPQ0tBQ0tfU1RBVFVTLCAqUFJFQ19CTE9DS0FDS19TVEFUVVM7CisKK3R5cGVkZWYgZW51bSBfT1JJX0JMT0NLQUNLX1NUQVRVUworeworICAgIE9yaWdpbmF0b3JfTk9ORT0wLAorCU9yaWdpbmF0b3JfVVNFRCwKKyAgICBPcmlnaW5hdG9yX1dhaXRSZXMsCisgICAgT3JpZ2luYXRvcl9Eb25lCit9IE9SSV9CTE9DS0FDS19TVEFUVVMsICpQT1JJX0JMT0NLQUNLX1NUQVRVUzsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QgX0JBX09SSV9FTlRSWXsKKwlVQ0hBUiAgIFdjaWQ7CisJVUNIQVIgICBUSUQ7CisJVUNIQVIgICBCQVdpblNpemU7CisJVUNIQVIgICBUb2tlbjsKKy8vIFNlcXVlbmNlIGlzIHRvIGZpbGwgZXZlcnkgb3V0Z29pbmcgUW9TIERBVEEgZnJhbWUncyBzZXF1ZW5jZSBmaWVsZCBpbiA4MDIuMTEgaGVhZGVyLgorCVVTSE9SVAlTZXF1ZW5jZTsKKwlVU0hPUlQJVGltZU91dFZhbHVlOworCU9SSV9CTE9DS0FDS19TVEFUVVMgIE9SSV9CQV9TdGF0dXM7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCBPUklCQVRpbWVyOworCVBWT0lECXBBZGFwdGVyOworfSBCQV9PUklfRU5UUlksICpQQkFfT1JJX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfQkFfUkVDX0VOVFJZIHsKKwlVQ0hBUiAgIFdjaWQ7CisJVUNIQVIgICBUSUQ7CisJVUNIQVIgICBCQVdpblNpemU7CS8vIDcuMy4xLjE0LiBlYWNoIGJ1ZmZlciBpcyBjYXBhYmxlIG9mIGhvbGRpbmcgYSBtYXggQU1TRFUgb3IgTVNEVS4KKwkvL1VDSEFSCU51bU9mUnhQa3Q7CisJLy9VQ0hBUiAgICBDdXJpbmRpZHg7IC8vIHRoZSBoZWFkIGluIHRoZSBSWCByZW9yZGVyaW5nIGJ1ZmZlcgorCVVTSE9SVAkJTGFzdEluZFNlcTsKKy8vCVVTSE9SVAkJTGFzdEluZFNlcUF0VGltZXI7CisJVVNIT1JUCQlUaW1lT3V0VmFsdWU7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCBSRUNCQVRpbWVyOworCVVMT05HCQlMYXN0SW5kU2VxQXRUaW1lcjsKKwlVTE9ORwkJbkRyb3BQYWNrZXQ7CisJVUxPTkcJCXJjdlNlcTsKKwlSRUNfQkxPQ0tBQ0tfU1RBVFVTICBSRUNfQkFfU3RhdHVzOworLy8JVUNIQVIJUnhCdWZJZHhVc2VkOworCS8vIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBhZGRyZXNzIGZvciBSWCByZW9yZGVyaW5nIHBhY2tldCBzdG9yYWdlLgorCS8vUlRNUF9SRU9SREVSRE1BQlVGIE1BUF9SWEJ1ZltNQVhfUlhfUkVPUkRFUkJVRl07CisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgUnhSZVJpbmdMb2NrOyAgICAgICAgICAgICAgICAgLy8gUnggUmluZyBzcGlubG9jaworLy8Jc3RydWN0IF9CQV9SRUNfRU5UUlkgKnBOZXh0OworCVBWT0lECXBBZGFwdGVyOworCXN0cnVjdCByZW9yZGVyaW5nX2xpc3QJbGlzdDsKK30gQkFfUkVDX0VOVFJZLCAqUEJBX1JFQ19FTlRSWTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJVUxPTkcJCW51bUFzUmVjaXBpZW50OwkJLy8gSSBhbSByZWNpcGllbnQgb2YgbnVtQXNSZWNpcGllbnQgY2xpZW50cy4gVGhlc2UgY2xpZW50IGFyZSBpbiB0aGUgQkFSZWNFbnRyeVtdCisJVUxPTkcJCW51bUFzT3JpZ2luYXRvcjsJLy8gSSBhbSBvcmlnaW5hdG9yIG9mIAludW1Bc09yaWdpbmF0b3IgY2xpZW50cy4gVGhlc2UgY2xpZW50cyBhcmUgaW4gdGhlIEJBT3JpRW50cnlbXQorCUJBX09SSV9FTlRSWSAgICAgICBCQU9yaUVudHJ5W01BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFXTsKKwlCQV9SRUNfRU5UUlkgICAgICAgQkFSZWNFbnRyeVtNQVhfTEVOX09GX0JBX1JFQ19UQUJMRV07Cit9IEJBX1RBQkxFLCAqUEJBX1RBQkxFOworCisvL0ZvciBRdXJleUJBVGFibGVPSUQgdXNlOwordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRCBfT0lEX0JBX1JFQ19FTlRSWXsKKwlVQ0hBUiAgIE1BQ0FkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgIEJhQml0bWFwOyAgIC8vIGlmIChCYUJpdG1hcCYoMTw8VElEKSksIHRoaXMgc2Vzc2lvbiB3aXRoe01BQ0FkZHIsIFRJRH1leGlzdHMsIHNvIHJlYWQgQnVmU2l6ZVtUSURdIGZvciBCdWZmZXJTaXplCisJVUNIQVIgICByc3Y7CisJVUNIQVIgICBCdWZTaXplWzhdOworCVJFQ19CTE9DS0FDS19TVEFUVVMJUkVDX0JBX1N0YXR1c1s4XTsKK30gT0lEX0JBX1JFQ19FTlRSWSwgKlBPSURfQkFfUkVDX0VOVFJZOworCisvL0ZvciBRdXJleUJBVGFibGVPSUQgdXNlOwordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRCBfT0lEX0JBX09SSV9FTlRSWXsKKwlVQ0hBUiAgIE1BQ0FkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgIEJhQml0bWFwOyAgLy8gaWYgKEJhQml0bWFwJigxPDxUSUQpKSwgdGhpcyBzZXNzaW9uIHdpdGh7TUFDQWRkciwgVElEfWV4aXN0cywgc28gcmVhZCBCdWZTaXplW1RJRF0gZm9yIEJ1ZmZlclNpemUsIHJlYWQgT1JJX0JBX1N0YXR1c1tUSURdIGZvciBzdGF0dXMKKwlVQ0hBUiAgIHJzdjsKKwlVQ0hBUiAgIEJ1ZlNpemVbOF07CisJT1JJX0JMT0NLQUNLX1NUQVRVUyAgT1JJX0JBX1N0YXR1c1s4XTsKK30gT0lEX0JBX09SSV9FTlRSWSwgKlBPSURfQkFfT1JJX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUVVFUllCQV9UQUJMRXsKKwlPSURfQkFfT1JJX0VOVFJZICAgICAgIEJBT3JpRW50cnlbMzJdOworCU9JRF9CQV9SRUNfRU5UUlkgICAgICAgQkFSZWNFbnRyeVszMl07CisJVUNIQVIgICBPcmlOdW07Ly8gTnVtYmVyIG9mIGJlbG93IEJBT3JpRW50cnkKKwlVQ0hBUiAgIFJlY051bTsvLyBOdW1iZXIgb2YgYmVsb3cgQkFSZWNFbnRyeQorfSBRVUVSWUJBX1RBQkxFLCAqUFFVRVJZQkFfVEFCTEU7CisKK3R5cGVkZWYJdW5pb24JX0JBQ0FQX1NUUlVDCXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJc3RydWN0CXsKKwkJVUlOVDMyICAgICA6NDsKKwkJVUlOVDMyICAgICBiMjA0MENvZXhpc3RTY2FuU3VwOjE7CQkvL0FzIFN0YSwgc3VwcG9ydCBkbyAyMDQwIGNvZXhpc3RlbmNlIHNjYW4gZm9yIEFQLiBBcyBBcCwgc3VwcG9ydCBtb25pdG9yIHRyaWdnZXIgZXZlbnQgdG8gY2hlY2sgaWYgY2FuIHVzZSBCVyA0ME1Iei4KKwkJVUlOVDMyICAgICBiSHRBZGhvYzoxOwkJCS8vIGFkaG9jIGNhbiB1c2UgaHQgcmF0ZS4KKwkJVUlOVDMyICAgICBNTVBTbW9kZToyOwkvLyBNSU1PIHBvd2VyIHNhdmUgbW9yZSwgMDpzdGF0aWMsIDE6ZHluYW1pYywgMjpyc3YsIDM6bWltbyBlbmFibGUKKwkJVUlOVDMyICAgICBBbXNkdVNpemU6MTsJLy8gMDozODM5LCAxOjc5MzUgYnl0ZXMuIFVJTlQgIE1TRFVTaXplVG9CeXRlc1tdCT0geyAzODM5LCA3OTM1fTsKKwkJVUlOVDMyICAgICBBbXNkdUVuYWJsZToxOwkvL0VuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uCisJCVVJTlQzMgkJTXBkdURlbnNpdHk6MzsKKwkJVUlOVDMyCQlQb2xpY3k6MjsJLy8gMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZQorCQlVSU5UMzIJCUF1dG9CQToxOwkvLyBhdXRvbWF0aWNhbGx5IEJBCisJCVVJTlQzMgkJVHhCQVdpbkxpbWl0Ojg7CisJCVVJTlQzMgkJUnhCQVdpbkxpbWl0Ojg7CisJfQlmaWVsZDsKKyNlbHNlCisJc3RydWN0CXsKKwkJVUlOVDMyCQlSeEJBV2luTGltaXQ6ODsKKwkJVUlOVDMyCQlUeEJBV2luTGltaXQ6ODsKKwkJVUlOVDMyCQlBdXRvQkE6MTsJLy8gYXV0b21hdGljYWxseSBCQQorCQlVSU5UMzIJCVBvbGljeToyOwkvLyAwOiBERUxBWV9CQSAxOklNTUVEX0JBICAoLy9CQSBQb2xpY3kgc3ViZmlsZWQgdmFsdWUgaW4gQUREQkEgZnJhbWUpICAgMjpCQS1ub3QgdXNlCisJCVVJTlQzMgkJTXBkdURlbnNpdHk6MzsKKwkJVUlOVDMyICAgICAgIAlBbXNkdUVuYWJsZToxOwkvL0VuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uCisJCVVJTlQzMiAgICAgICAJQW1zZHVTaXplOjE7CS8vIDA6MzgzOSwgMTo3OTM1IGJ5dGVzLiBVSU5UICBNU0RVU2l6ZVRvQnl0ZXNbXQk9IHsgMzgzOSwgNzkzNX07CisJCVVJTlQzMiAgICAgICAJTU1QU21vZGU6MjsJLy8gTUlNTyBwb3dlciBzYXZlIG1vcmUsIDA6c3RhdGljLCAxOmR5bmFtaWMsIDI6cnN2LCAzOm1pbW8gZW5hYmxlCisJCVVJTlQzMiAgICAgICAJYkh0QWRob2M6MTsJCQkvLyBhZGhvYyBjYW4gdXNlIGh0IHJhdGUuCisJCVVJTlQzMiAgICAgICAJYjIwNDBDb2V4aXN0U2NhblN1cDoxOwkJLy9BcyBTdGEsIHN1cHBvcnQgZG8gMjA0MCBjb2V4aXN0ZW5jZSBzY2FuIGZvciBBUC4gQXMgQXAsIHN1cHBvcnQgbW9uaXRvciB0cmlnZ2VyIGV2ZW50IHRvIGNoZWNrIGlmIGNhbiB1c2UgQlcgNDBNSHouCisJCVVJTlQzMiAgICAgICAJOjQ7CisJfQlmaWVsZDsKKyNlbmRpZgorCVVJTlQzMgkJCXdvcmQ7Cit9IEJBQ0FQX1NUUlVDLCAqUEJBQ0FQX1NUUlVDOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvL1RoaXMgc3RydWN0dXJlIGlzIGZvciBhbGwgODAyLjExbiBjYXJkIEludGVyT3B0aWJpbGl0eVRlc3QgYWN0aW9uLiBSZXNldCBhbGwgTnVtIGV2ZXJ5IG4gc2Vjb25kLiAgKERldGFpbHMgc2VlIE1MTUVQZXJpb2RpYykKK3R5cGVkZWYJc3RydWN0CV9JT1RfU1RSVUMJeworCVVDSEFSCQkJVGhyZXNob2xkWzJdOworCVVDSEFSCQkJUmVvcmRlclRpbWVPdXROdW1bTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEVdOwkvLyBjb21wYXJlIHdpdGggdGhyZXNob2xkWzBdCisJVUNIQVIJCQlSZWZyZXNoTnVtW01BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFXTsJLy8gY29tcGFyZSB3aXRoIHRocmVzaG9sZFsxXQorCVVMT05HCQkJT25lU2VjSW5XaW5kb3dDb3VudDsKKwlVTE9ORwkJCU9uZVNlY0ZyYW1lRHVwbGljYXRlQ291bnQ7CisJVUxPTkcJCQlPbmVTZWNPdXRXaW5kb3dDb3VudDsKKwlVQ0hBUgkJCURlbE9yaUFjdDsKKwlVQ0hBUgkJCURlbFJlY0FjdDsKKwlVQ0hBUgkJCVJUU1Nob3J0UHJvdDsKKwlVQ0hBUgkJCVJUU0xvbmdQcm90OworCUJPT0xFQU4JCQliUlRTTG9uZ1Byb3RPbjsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlCT09MRUFOCQkJYkxhc3RBdGhlcm9zOworICAgIEJPT0xFQU4JCQliQ3VycmVudEF0aGVyb3M7CisgICAgQk9PTEVBTiAgICAgICAgIGJOb3dBdGhlcm9zQnVyc3RPbjsKKwlCT09MRUFOCQkJYk5leHREaXNhYmxlUnhCQTsKKyAgICBCT09MRUFOCQkJYlRvZ2dsZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KK30gSU9UX1NUUlVDLCAqUElPVF9TVFJVQzsKKworLy8gVGhpcyBpcyB0aGUgcmVnaXN0cnkgc2V0dGluZyBmb3IgODAyLjExbiB0cmFuc21pdCBzZXR0aW5nLiAgVXNlZCBpbiBhZHZhbmNlZCBwYWdlLgordHlwZWRlZiB1bmlvbiBfUkVHX1RSQU5TTUlUX1NFVFRJTkcgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyBzdHJ1Y3QgeworICAgICAgICAgVUlOVDMyICByc3Y6MTM7CisJCSBVSU5UMzIgIEVYVENIQToyOworCQkgVUlOVDMyICBIVE1PREU6MTsKKwkJIFVJTlQzMiAgVFJBTlNOTzoyOworCQkgVUlOVDMyICBTVEJDOjE7IC8vU1BBQ0UKKwkJIFVJTlQzMiAgU2hvcnRHSToxOworCQkgVUlOVDMyICBCVzoxOyAvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCQkgVUlOVDMyICBUeEJGOjE7IC8vIDMqMworCQkgVUlOVDMyICByc3YwOjEwOworCQkgLy9VSU5UMzIgIE1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisgICAgICAgICAvL1VJTlQzMiAgUGh5TW9kZTo0OworICAgIH0gZmllbGQ7CisjZWxzZQorIHN0cnVjdCB7CisgICAgICAgICAvL1VJTlQzMiAgUGh5TW9kZTo0OworICAgICAgICAgLy9VSU5UMzIgIE1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisJCSBVSU5UMzIgIHJzdjA6MTA7CisJCSBVSU5UMzIgIFR4QkY6MTsKKyAgICAgICAgIFVJTlQzMiAgQlc6MTsgLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKyAgICAgICAgIFVJTlQzMiAgU2hvcnRHSToxOworICAgICAgICAgVUlOVDMyICBTVEJDOjE7IC8vU1BBQ0UKKyAgICAgICAgIFVJTlQzMiAgVFJBTlNOTzoyOworICAgICAgICAgVUlOVDMyICBIVE1PREU6MTsKKyAgICAgICAgIFVJTlQzMiAgRVhUQ0hBOjI7CisgICAgICAgICBVSU5UMzIgIHJzdjoxMzsKKyAgICB9IGZpZWxkOworI2VuZGlmCisgVUlOVDMyICAgd29yZDsKK30gUkVHX1RSQU5TTUlUX1NFVFRJTkcsICpQUkVHX1RSQU5TTUlUX1NFVFRJTkc7CisKK3R5cGVkZWYgdW5pb24gIF9ERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlzdHJ1Y3QJeworCQkJVVNIT1JUCQlyc3Y6MzsKKwkJCVVTSE9SVAkJRml4ZWRUeE1vZGU6MjsJCQkvLyBJZiBNQ1MgaXNuJ3QgQVVUTywgZml4IHJhdGUgaW4gQ0NLLCBPRkRNIG9yIEhUIG1vZGUuCisJCQlVU0hPUlQJCVBoeU1vZGU6NDsKKwkJCVVTSE9SVCAgIAlNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworCX0JZmllbGQ7CisjZWxzZQorCXN0cnVjdAl7CisJCQlVU0hPUlQgICAJTUNTOjc7ICAgICAgICAgICAgICAgICAJLy8gTUNTCisJCQlVU0hPUlQJCVBoeU1vZGU6NDsKKwkJCVVTSE9SVAkgCUZpeGVkVHhNb2RlOjI7CQkJLy8gSWYgTUNTIGlzbid0IEFVVE8sIGZpeCByYXRlIGluIENDSywgT0ZETSBvciBIVCBtb2RlLgorCQkJVVNIT1JUCQlyc3Y6MzsKKwl9CWZpZWxkOworI2VuZGlmCisJVVNIT1JUCQl3b3JkOworIH0gREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HLCAqUERFU0lSRURfVFJBTlNNSVRfU0VUVElORzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUJPT0xFQU4JCUlzUmVjaXBpZW50OworCVVDSEFSICAgTUFDQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgVElEOworCVVDSEFSICAgbk1TRFU7CisJVVNIT1JUICAgVGltZU91dDsKKwlCT09MRUFOIGJBbGxUaWQ7ICAvLyBJZiBUcnVlLCBkZWxldGUgYWxsIFRJRCBmb3IgQkEgc2Vzc2lvbnMgd2l0aCB0aGlzIE1BQ2FkZHIuCit9IE9JRF9BRERfQkFfRU5UUlksICpQT0lEX0FERF9CQV9FTlRSWTsKKworLy8KKy8vIE11bHRpcGxlIFNTSUQgc3RydWN0dXJlCisvLworI2RlZmluZSBXTEFOX01BWF9OVU1fT0ZfVElNCQkJKChNQVhfTEVOX09GX01BQ19UQUJMRSA+PiAzKSArIDEpIC8qIC84ICsgMSAqLworI2RlZmluZSBXTEFOX0NUX1RJTV9CQ01DX09GRlNFVAkJMCAvKiB1bml0OiAzMkIgKi8KKworLyogY2xlYXIgYmNtYyBUSU0gYml0ICovCisjZGVmaW5lIFdMQU5fTVJfVElNX0JDTUNfQ0xFQVIoYXBpZHgpIFwKKwlwQWQtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1tXTEFOX0NUX1RJTV9CQ01DX09GRlNFVF0gJj0gfkJJVDhbMF07CisKKy8qIHNldCBiY21jIFRJTSBiaXQgKi8KKyNkZWZpbmUgV0xBTl9NUl9USU1fQkNNQ19TRVQoYXBpZHgpIFwKKwlwQWQtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1tXTEFOX0NUX1RJTV9CQ01DX09GRlNFVF0gfD0gQklUOFswXTsKKworLyogY2xlYXIgYSBzdGF0aW9uIFBTIFRJTSBiaXQgKi8KKyNkZWZpbmUgV0xBTl9NUl9USU1fQklUX0NMRUFSKGFkX3AsIGFwaWR4LCB3Y2lkKSBcCisJewlVQ0hBUiB0aW1fb2Zmc2V0ID0gd2NpZCA+PiAzOyBcCisJCVVDSEFSIGJpdF9vZmZzZXQgPSB3Y2lkICYgMHg3OyBcCisJCWFkX3AtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1t0aW1fb2Zmc2V0XSAmPSAofkJJVDhbYml0X29mZnNldF0pOyB9CisKKy8qIHNldCBhIHN0YXRpb24gUFMgVElNIGJpdCAqLworI2RlZmluZSBXTEFOX01SX1RJTV9CSVRfU0VUKGFkX3AsIGFwaWR4LCB3Y2lkKSBcCisJewlVQ0hBUiB0aW1fb2Zmc2V0ID0gd2NpZCA+PiAzOyBcCisJCVVDSEFSIGJpdF9vZmZzZXQgPSB3Y2lkICYgMHg3OyBcCisJCWFkX3AtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1t0aW1fb2Zmc2V0XSB8PSBCSVQ4W2JpdF9vZmZzZXRdOyB9CisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgQkVBQ09OX0JJVE1BUF9NQVNLCQkweGZmCit0eXBlZGVmIHN0cnVjdCBfQkVBQ09OX1NZTkNfU1RSVUNUXworeworCVVDSEFSICAgICAgICAJCQlCZWFjb25CdWZbSFdfQkVBQ09OX01BWF9DT1VOVF1bSFdfQkVBQ09OX09GRlNFVF07CisJVUNIQVIJCQkJCUJlYWNvblR4V0lbSFdfQkVBQ09OX01BWF9DT1VOVF1bVFhXSV9TSVpFXTsKKwlVTE9ORyAJCQkJCVRpbUlFTG9jYXRpb25JbkJlYWNvbltIV19CRUFDT05fTUFYX0NPVU5UXTsKKwlVTE9ORwkJCQkJQ2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW0hXX0JFQUNPTl9NQVhfQ09VTlRdOworCUJPT0xFQU4JCQkJCUVuYWJsZUJlYWNvbjsJCS8vIHRyaWdnZXIgdG8gZW5hYmxlIGJlYWNvbiB0cmFuc21pc3Npb24uCisJVUNIQVIJCQkJCUJlYWNvbkJpdE1hcDsJCS8vIE5PVEU6IElmIHRoZSBNQVhfTUJTU0lEX05VTSBpcyBsYXJnZXIgdGhhbiA4LCB0aGlzIHBhcmFtZXRlciBuZWVkIHRvIGNoYW5nZS4KKwlVQ0hBUgkJCQkJRHRpbUJpdE9uOwkJCS8vIE5PVEU6IElmIHRoZSBNQVhfTUJTU0lEX05VTSBpcyBsYXJnZXIgdGhhbiA4LCB0aGlzIHBhcmFtZXRlciBuZWVkIHRvIGNoYW5nZS4KK31CRUFDT05fU1lOQ19TVFJVQ1Q7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKK3R5cGVkZWYgc3RydWN0IF9NVUxUSVNTSURfU1RSVUNUIHsKKwlVQ0hBUgkJCQkJCQkJQnNzaWRbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTc2lkTGVuOworICAgIENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBhYmlsaXR5SW5mbzsKKworICAgIFBORVRfREVWICAgICAgICAgICAgICAgICAgIAkJCU1TU0lERGV2OworCisJTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGU7CisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMJCQkJR3JvdXBLZXlXZXBTdGF0dXM7CisJV1BBX01JWF9QQUlSX0NJUEhFUgkJCQkJV3BhTWl4UGFpckNpcGhlcjsKKworCVVMT05HCQkJCQkJCQlUeENvdW50OworCVVMT05HCQkJCQkJCQlSeENvdW50OworCVVMT05HCQkJCQkJCQlSZWNlaXZlZEJ5dGVDb3VudDsKKwlVTE9ORwkJCQkJCQkJVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CisJVUxPTkcJCQkJCQkJCVJ4RXJyb3JDb3VudDsKKwlVTE9ORwkJCQkJCQkJUnhEcm9wQ291bnQ7CisKKwlIVFRSQU5TTUlUX1NFVFRJTkcJCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7Ly8gRm9yIHRyYW5zbWl0IHBoeSBzZXR0aW5nIGluIFRYV0kuCisJUlRfSFRfUEhZX0lORk8JCQkJCQlEZXNpcmVkSHRQaHlJbmZvOworCURFU0lSRURfVFJBTlNNSVRfU0VUVElORyAgICAgICAgCURlc2lyZWRUcmFuc21pdFNldHRpbmc7IC8vIERlc2lyZWQgdHJhbnNtaXQgc2V0dGluZy4gdGhpcyBpcyBmb3IgcmVhZGluZyByZWdpc3RyeSBzZXR0aW5nIG9ubHkuIG5vdCB1c2VmdWwuCisJQk9PTEVBTgkJCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CisKKwkvL0NJUEhFUl9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZEtleVtTSEFSRV9LRVlfTlVNXTsgLy8gcmVmIHBBZC0+U2hhcmVkS2V5W0JTU11bNF0KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0S2V5SWQ7CisKKwlVQ0hBUgkJCQkJCQkJVHhSYXRlOyAgICAgICAvLyBSQVRFXzEsIFJBVEVfMiwgUkFURV81XzUsIFJBVEVfMTEsIC4uLgorCVVDSEFSICAgICAJCQkJCQkJRGVzaXJlZFJhdGVzW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsvLyBPSURfODAyXzExX0RFU0lSRURfUkFURVMKKwlVQ0hBUgkJCQkJCQkJRGVzaXJlZFJhdGVzSW5kZXg7CisJVUNIQVIgICAgIAkJCQkJCQlNYXhUeFJhdGU7ICAgICAgICAgICAgLy8gUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExCisKKy8vCVVMT05HICAgICAgICAgICAJCQkJCVRpbUJpdG1hcDsgICAgICAvLyBiaXQwIGZvciBicm9hZGNhc3QsIDEgZm9yIEFJRDEsIDIgZm9yIEFJRDIsIC4uLnNvIG9uCisvLyAgICBVTE9ORyAgICAgICAgICAgCQkJCQlUaW1CaXRtYXAyOyAgICAgLy8gYjAgZm9yIEFJRDMyLCBiMSBmb3IgQUlEMzMsIC4uLiBhbmQgc28gb24KKwlVQ0hBUgkJCQkJCQkJVGltQml0bWFwc1tXTEFOX01BWF9OVU1fT0ZfVElNXTsKKworICAgIC8vIFdQQQorICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdNS1szMl07CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1LWzMyXTsKKwlVQ0hBUgkJCQkJCQkJR1RLWzMyXTsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMVg7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlQXV0aDsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTm9uY2VbMzJdOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRTZWN1cmVkOworICAgIE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSICAgICAgICAgIFByaXZhY3lGaWx0ZXI7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFOQ2xhc3MzRGF0YTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc29sYXRlSW50ZXJTdGFUcmFmZmljOworCisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNOSUVfTGVuWzJdOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTTl9JRVsyXVtNQVhfTEVOX09GX1JTTklFXTsKKworCisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgCQkJVGltSUVMb2NhdGlvbkluQmVhY29uOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgIAkJCUNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbjsKKyAgICAvLyBvdXRnb2luZyBCRUFDT04gZnJhbWUgYnVmZmVyIGFuZCBjb3JyZXNwb25kaW5nIFRYV0kKKwkvLyBQVFhXSV9TVFJVQyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlYWNvblR4V0k7IC8vCisgICAgQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVhY29uQnVmW01BWF9CRUFDT05fU0laRV07IC8vIE5PVEU6IEJlYWNvbkJ1ZiBzaG91bGQgYmUgNC1ieXRlIGFsaWduZWQKKworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJIaWRlU3NpZDsKKwlVSU5UMTYJCQkJCQkJCVN0YXRpb25LZWVwQWxpdmVUaW1lOyAvLyB1bml0OiBzZWNvbmQKKworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZMQU5fVklEOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZMQU5fUHJpb3JpdHk7CisKKyAgICBSVF84MDJfMTFfQUNMCQkJCQkJQWNjZXNzQ29udHJvbExpc3Q7CisKKwkvLyBFRENBIFFvcworICAgIEJPT0xFQU4JCQkJCQkJCWJXbW1DYXBhYmxlOwkvLyAwOmRpc2FibGUgV01NLCAxOmVuYWJsZSBXTU0KKyAgICBCT09MRUFOCQkJCQkJCQliRExTQ2FwYWJsZTsJLy8gMDpkaXNhYmxlIERMUywgMTplbmFibGUgRExTCisKKwlVQ0hBUiAgICAgICAgICAgCQkJCQlEbHNQVEtbNjRdOwkJLy8gRHVlIHRvIHdpbmRvd3MgZGlydmVyIGNvdW50IG9uIG1lZXRpbmdob3VzZSB0byBoYW5kbGUgNC13YXkgc2hha2UKKworCS8vIEZvciA4MDIuMXggZGFlbW9uIHNldHRpbmcgcGVyIEJTUworCVVDSEFSCQkJCQkJCQlyYWRpdXNfc3J2X251bTsKKwlSQURJVVNfU1JWX0lORk8JCQkJCQlyYWRpdXNfc3J2X2luZm9bTUFYX1JBRElVU19TUlZfTlVNXTsKKworI2lmZGVmIFJUTDg2NVhfU09DCisJdW5zaWduZWQgaW50CQkJCQkJbXlsaW5raWQ7CisjZW5kaWYKKworCisJVUlOVDMyCQkJCQlSY3ZkQ29uZmxpY3RTc2lkQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZEFzc29jUmVzcENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRSZWFzc29jUmVzcENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRQcm9iZVJlc3BDb3VudDsKKwlVSU5UMzIJCQkJCVJjdmRTcG9vZmVkQmVhY29uQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZERpc2Fzc29jQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZEF1dGhDb3VudDsKKwlVSU5UMzIJCQkJCVJjdmRTcG9vZmVkRGVhdXRoQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZFVua25vd25NZ210Q291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkUmVwbGF5QXR0YWNrQ291bnQ7CisKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkQ29uZmxpY3RTc2lkOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkQXNzb2NSZXNwOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkUmVhc3NvY1Jlc3A7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRQcm9iZVJlc3A7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRCZWFjb247CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWREaXNhc3NvYzsKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkU3Bvb2ZlZEF1dGg7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWREZWF1dGg7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRVbmtub3duTWdtdDsKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkUmVwbGF5QXR0YWNrOworCisJQk9PTEVBTgkJCQkJYkJjblNudFJlcTsKKwlVQ0hBUgkJCQkJQmNuQnVmSWR4OworfSBNVUxUSVNTSURfU1RSVUNULCAqUE1VTFRJU1NJRF9TVFJVQ1Q7CisKKworCisjaWZkZWYgRE9UMTFOX0RSQUZUMwordHlwZWRlZiBlbnVtIF9CU1MyMDQwQ09FWElTVF9GTEFHeworCUJTU18yMDQwX0NPRVhJU1RfRElTQUJMRSA9IDAsCisJQlNTXzIwNDBfQ09FWElTVF9USU1FUl9GSVJFRCAgPSAxLAorCUJTU18yMDQwX0NPRVhJU1RfSU5GT19TWU5DID0gMiwKKwlCU1NfMjA0MF9DT0VYSVNUX0lORk9fTk9USUZZID0gNCwKK31CU1MyMDQwQ09FWElTVF9GTEFHOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworLy8gY29uZmlndXJhdGlvbiBjb21tb24gdG8gT1BNT0RFX0FQIGFzIHdlbGwgYXMgT1BNT0RFX1NUQQordHlwZWRlZiBzdHJ1Y3QgX0NPTU1PTl9DT05GSUcgeworCisJQk9PTEVBTgkJYkNvdW50cnlGbGFnOworCVVDSEFSCQlDb3VudHJ5Q29kZVszXTsKKwlVQ0hBUgkJR2VvZ3JhcGh5OworCVVDSEFSICAgICAgIENvdW50cnlSZWdpb247ICAgICAgLy8gRW51bSBvZiBjb3VudHJ5IHJlZ2lvbiwgMDpGQ0MsIDE6SUMsIDI6RVRTSSwgMzpTUEFJTiwgNDpGcmFuY2UsIDU6TUtLLCA2Ok1LSzEsIDc6SXNyYWVsCisJVUNIQVIgICAgICAgQ291bnRyeVJlZ2lvbkZvckFCYW5kOwkvLyBFbnVtIG9mIGNvdW50cnkgcmVnaW9uIGZvciBBIGJhbmQKKwlVQ0hBUiAgICAgICBQaHlNb2RlOyAgICAgICAgICAgIC8vIFBIWV8xMUEsIFBIWV8xMUIsIFBIWV8xMUJHX01JWEVELCBQSFlfQUJHX01JWEVECisJVVNIT1JUICAgICAgRHNpZnM7ICAgICAgICAgICAgICAvLyBpbiB1bml0cyBvZiB1c2VjCisJVUxPTkcgICAgICAgUGFja2V0RmlsdGVyOyAgICAgICAvLyBQYWNrZXQgZmlsdGVyIGZvciByZWNlaXZpbmcKKworCUNIQVIgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsgLy8gTk9UIE5VTEwtdGVybWluYXRlZAorCVVDSEFSICAgICAgIFNzaWRMZW47ICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCBzc2lkIGxlbmd0aCBpbiB1c2VkCisJVUNIQVIgICAgICAgTGFzdFNzaWRMZW47ICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCBzc2lkIGxlbmd0aCBpbiB1c2VkCisJQ0hBUiAgICAgICAgTGFzdFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsgLy8gTk9UIE5VTEwtdGVybWluYXRlZAorCVVDSEFSCQlMYXN0QnNzaWRbTUFDX0FERFJfTEVOXTsKKworCVVDSEFSICAgICAgIEJzc2lkW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICAgQmVhY29uUGVyaW9kOworCVVDSEFSICAgICAgIENoYW5uZWw7CisJVUNIQVIgICAgICAgQ2VudHJhbENoYW5uZWw7ICAgIAkvLyBDZW50cmFsIENoYW5uZWwgd2hlbiB1c2luZyA0ME1IeiBpcyBpbmRpY2F0aW5nLiBub3QgcmVhbCBjaGFubmVsLgorCisJVUNIQVIgICAgICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIgICAgICAgU3VwUmF0ZUxlbjsKKwlVQ0hBUiAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICBFeHRSYXRlTGVuOworCVVDSEFSICAgICAgIERlc2lyZVJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOyAgICAgIC8vIE9JRF84MDJfMTFfREVTSVJFRF9SQVRFUworCVVDSEFSICAgICAgIE1heERlc2lyZWRSYXRlOworCVVDSEFSICAgICAgIEV4cGVjdGVkQUNLUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisKKwlVTE9ORyAgICAgICBCYXNpY1JhdGVCaXRtYXA7ICAgICAgICAvLyBiYWNrdXAgYmFzaWMgcmF0ZWJpdG1hcAorCisJQk9PTEVBTgkJYkFQU0RDYXBhYmxlOworCUJPT0xFQU4JCWJJblNlcnZpY2VQZXJpb2Q7CisJQk9PTEVBTgkJYkFQU0RBQ19CRTsKKwlCT09MRUFOCQliQVBTREFDX0JLOworCUJPT0xFQU4JCWJBUFNEQUNfVkk7CisJQk9PTEVBTgkJYkFQU0RBQ19WTzsKKwlCT09MRUFOCQliTmVlZFNlbmRUcmlnZ2VyRnJhbWU7CisJQk9PTEVBTgkJYkFQU0RGb3JjZVBvd2VyU2F2ZTsJLy8gRm9yY2UgcG93ZXIgc2F2ZSBtb2RlLCBzaG91bGQgb25seSB1c2UgaW4gQVBTRC1TVEFVVAorCVVMT05HCQlUcmlnZ2VyVGltZXJDb3VudDsKKwlVQ0hBUgkJTWF4U1BMZW5ndGg7CisJVUNIQVIJCUJCUEN1cnJlbnRCVzsJLy8gQldfMTAsIAlCV18yMCwgQldfNDAKKwkvLyBtb3ZlIHRvIE1VTFRJU1NJRF9TVFJVQ1QgZm9yIE1CU1MKKwkvL0hUVFJBTlNNSVRfU0VUVElORwlIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOy8vIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLgorCVJFR19UUkFOU01JVF9TRVRUSU5HICAgICAgICBSZWdUcmFuc21pdFNldHRpbmc7IC8vcmVnaXN0cnkgdHJhbnNtaXQgc2V0dGluZy4gdGhpcyBpcyBmb3IgcmVhZGluZyByZWdpc3RyeSBzZXR0aW5nIG9ubHkuIG5vdCB1c2VmdWwuCisJLy9VQ0hBUiAgICAgICBGaXhlZFR4TW9kZTsgICAgICAgICAgICAgIC8vIEZpeGVkIFR4IE1vZGUgKENDSywgT0ZETSksIGZvciBIVCBmaXhlZCB0eCBtb2RlIChHRiwgTUlYKSAsIHJlZmVyIHRvIFJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1vZGUKKwlVQ0hBUiAgICAgICBUeFJhdGU7ICAgICAgICAgICAgICAgICAvLyBTYW1lIHZhbHVlIHRvIGZpbGwgaW4gVFhELiBUeFJhdGUgaXMgNi1iaXQKKwlVQ0hBUiAgICAgICBNYXhUeFJhdGU7ICAgICAgICAgICAgICAvLyBSQVRFXzEsIFJBVEVfMiwgUkFURV81XzUsIFJBVEVfMTEKKwlVQ0hBUiAgICAgICBUeFJhdGVJbmRleDsgICAgICAgICAgICAvLyBUeCByYXRlIGluZGV4IGluIFJhdGVTd2l0Y2hUYWJsZQorCVVDSEFSICAgICAgIFR4UmF0ZVRhYmxlU2l6ZTsgICAgICAgIC8vIFZhbGlkIFR4IHJhdGUgdGFibGUgc2l6ZSBpbiBSYXRlU3dpdGNoVGFibGUKKwkvL0JPT0xFQU4JCWJBdXRvVHhSYXRlU3dpdGNoOworCVVDSEFSICAgICAgIE1pblR4UmF0ZTsgICAgICAgICAgICAgIC8vIFJBVEVfMSwgUkFURV8yLCBSQVRFXzVfNSwgUkFURV8xMQorCVVDSEFSICAgICAgIFJ0c1JhdGU7ICAgICAgICAgICAgICAgIC8vIFJBVEVfeHh4CisJSFRUUkFOU01JVF9TRVRUSU5HCU1sbWVUcmFuc21pdDsgICAvLyBNR01UIGZyYW1lIFBIWSByYXRlIHNldHRpbmcgd2hlbiBvcGVyYXRpbiBhdCBIdCByYXRlLgorCVVDSEFSICAgICAgIE1sbWVSYXRlOyAgICAgICAgICAgICAgIC8vIFJBVEVfeHh4LCB1c2VkIHRvIHNlbmQgTUxNRSBmcmFtZXMKKwlVQ0hBUiAgICAgICBCYXNpY01sbWVSYXRlOyAgICAgICAgICAvLyBEZWZhdWx0IFJhdGUgZm9yIHNlbmRpbmcgTUxNRSBmcmFtZXMKKworCVVTSE9SVCAgICAgIFJ0c1RocmVzaG9sZDsgICAgICAgICAgIC8vIGluIHVuaXQgb2YgQllURQorCVVTSE9SVCAgICAgIEZyYWdtZW50VGhyZXNob2xkOyAgICAgIC8vIGluIHVuaXQgb2YgQllURQorCisJVUNIQVIgICAgICAgVHhQb3dlcjsgICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiBtVworCVVMT05HICAgICAgIFR4UG93ZXJQZXJjZW50YWdlOyAgICAgIC8vIDB+MTAwICUKKwlVTE9ORyAgICAgICBUeFBvd2VyRGVmYXVsdDsgICAgICAgICAvLyBrZWVwIGZvciBUeFBvd2VyUGVyY2VudGFnZQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJQkFDQVBfU1RSVUMgICAgICAgIEJBQ2FwYWJpbGl0eTsgLy8gICBOTyBVU0UgPSAwWEZGICA7ICBJTU1FRF9CQSA9MSAgOyAgREVMQVlfQkE9MAorCUJBQ0FQX1NUUlVDICAgICAgICBSRUdCQUNhcGFiaWxpdHk7IC8vICAgTk8gVVNFID0gMFhGRiAgOyAgSU1NRURfQkEgPTEgIDsgIERFTEFZX0JBPTAKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlJT1RfU1RSVUMJCUlPVGVzdFBhcm07CS8vIDgwMi4xMW4gSW50ZXJPcGJpbGl0eSBUZXN0IFBhcmFtZXRlcjsKKwlVTE9ORyAgICAgICBUeFByZWFtYmxlOyAgICAgICAgICAgICAvLyBSdDgwMl8xMVByZWFtYmxlTG9uZywgUnQ4MDJfMTFQcmVhbWJsZVNob3J0LCBSdDgwMl8xMVByZWFtYmxlQXV0bworCUJPT0xFQU4gICAgIGJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQ7ICAgICAvLyBNaWNyb3NvZnQgdXNlIDAgYXMgZGlzYWJsZQorCVVMT05HICAgICAgIFVzZUJHUHJvdGVjdGlvbjsgICAgICAgIC8vIDA6IGF1dG8sIDE6IGFsd2F5cyB1c2UsIDI6IGFsd2F5cyBub3QgdXNlCisJQk9PTEVBTiAgICAgYlVzZVNob3J0U2xvdFRpbWU7ICAgICAgLy8gMDogZGlzYWJsZSwgMSAtIHVzZSBzaG9ydCBzbG90ICg5dXMpCisJQk9PTEVBTiAgICAgYkVuYWJsZVR4QnVyc3Q7ICAgICAgICAgLy8gMTogZW5ibGUgVFggUEFDS0VUIEJVUlNULCAwOiBkaXNhYmxlIFRYIFBBQ0tFVCBCVVJTVAorCUJPT0xFQU4gICAgIGJBZ2dyZWdhdGlvbkNhcGFibGU7ICAgICAgLy8gMTogZW5hYmxlIFRYIGFnZ3JlZ2F0aW9uIHdoZW4gdGhlIHBlZXIgc3VwcG9ydHMgaXQKKwlCT09MRUFOICAgICBiUGlnZ3lCYWNrQ2FwYWJsZTsJCS8vIDE6IGVuYWJsZSBUWCBwaWdneS1iYWNrIGFjY29yZGluZyBNQUMncyB2ZXJzaW9uCisJQk9PTEVBTiAgICAgYklFRUU4MDIxMUg7CQkJLy8gMTogZW5hYmxlIElFRUU4MDIuMTFoIHNwZWMuCisJVUxPTkcJCURpc2FibGVPTEJDRGV0ZWN0OwkJLy8gMDogZW5hYmxlIE9MQkMgZGV0ZWN0OyAxIGRpc2FibGUgT0xCQyBkZXRlY3QKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJPT0xFQU4JCQkJYlJkZzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlCT09MRUFOICAgICAgICAgICAgIGJXbW1DYXBhYmxlOyAgICAgICAgLy8gMDpkaXNhYmxlIFdNTSwgMTplbmFibGUgV01NCisJUU9TX0NBUEFCSUxJVFlfUEFSTSBBUFFvc0NhcGFiaWxpdHk7ICAgIC8vIFFPUyBjYXBhYmlsaXR5IG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKwlFRENBX1BBUk0gICAgICAgICAgIEFQRWRjYVBhcm07ICAgICAgICAgLy8gRURDQSBwYXJhbWV0ZXJzIG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKwlRQlNTX0xPQURfUEFSTSAgICAgIEFQUWJzc0xvYWQ7ICAgICAgICAgLy8gUUJTUyBsb2FkIG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKwlVQ0hBUiAgICAgICAgICAgICAgIEFja1BvbGljeVs0XTsgICAgICAgLy8gQUNLIHBvbGljeSBvZiB0aGUgc3BlY2lmaWVkIEFDLiBzZWUgQUNLX3h4eAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUJPT0xFQU4JCQkJYkRMU0NhcGFibGU7CQkvLyAwOmRpc2FibGUgRExTLCAxOmVuYWJsZSBETFMKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkvLyBhIGJpdG1hcCBvZiBCT09MRUFOIGZsYWdzLiBlYWNoIGJpdCByZXByZXNlbnQgYW4gb3BlcmF0aW9uIHN0YXR1cyBvZiBhIHBhcnRpY3VsYXIKKwkvLyBCT09MRUFOIGNvbnRyb2wsIGVpdGhlciBPTiBvciBPRkYuIFRoZXNlIGZsYWdzIHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWQgdmlhCisJLy8gT1BTVEFUVVNfVEVTVF9GTEFHKCksIE9QU1RBVFVTX1NFVF9GTEFHKCksIE9QX1NUQVRVU19DTEVBUl9GTEFHKCkgbWFjcm9zLgorCS8vIHNlZSBmT1BfU1RBVFVTX3h4eCBpbiBSVE1QX0RFRi5DIGZvciBkZXRhaWwgYml0IGRlZmluaXRpb24KKwlVTE9ORyAgICAgICAgICAgICAgIE9wU3RhdHVzRmxhZ3M7CisKKwlCT09MRUFOCQkJCU5kaXNSYWRpb1N0YXRlT2ZmOyAvL0ZvciBIQ1QgMTIuMCwgc2V0IHRoaXMgZmxhZyB0byBUUlVFIGluc3RlYWQgb2YgY2FsbGVkIE1sbWVSYWRpb09mZi4KKwlBQkdCQU5EX1NUQVRFCQlCYW5kU3RhdGU7CQkvLyBGb3Igc2V0dGluZyBCQlAgdXNlZCBvbiBCL0cgb3IgQSBtb2RlLgorCUJPT0xFQU4JCQkJYlJ4QW50RGl2ZXJzaXR5OyAvLyAwOmRpc2FibGUsIDE6ZW5hYmxlIFNvZnR3YXJlIFJ4IEFudGVubmEgRGl2ZXJzaXR5LgorCisJLy8gSUVFRTgwMi4xMUgtLURGUy4KKwlSQURBUl9ERVRFQ1RfU1RSVUNUCVJhZGFyRGV0ZWN0OworCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVAorCUNBUlJJRVJfREVURUNUSU9OCQlDYXJyaWVyRGV0ZWN0OworI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIEhUCisJVUNIQVIJCQlCQVNpemU7CQkvLyBVU2VyIGRlc2lyZWQgQkFXaW5kb3dTaXplLiBTaG91bGQgbm90IGV4Y2VlZCBvdXIgbWF4IGNhcGFiaWxpdHkKKwkvL1JUX0hUX0NBUEFCSUxJVFkJU3VwcG9ydGVkSHRQaHk7CisJUlRfSFRfQ0FQQUJJTElUWQlEZXNpcmVkSHRQaHk7CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIVEluZm87CS8vIFVzZWZ1bCBhcyBBUC4KKwkvL1RoaXMgSUUgaXMgdXNlZCB3aXRoIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBlbGVtZW50IHdoZW4gY2hhbmdpbmcgdG8gYSBuZXcgNDBNSHouCisJLy9UaGlzIElFIGlzIGluY2x1ZGVkIGluIGNoYW5uZWwgc3dpdGNoIGFtbW91bmNlbWVudCBmcmFtZXMgNy40LjEuNSwgYmVhY29ucywgcHJvYmUgUnNwLgorCU5FV19FWFRfQ0hBTl9JRQlOZXdFeHRDaGFuT2Zmc2V0OwkvLzcuMy4yLjIwQSwgMSBpZiBleHRlbnNpb24gY2hhbm5lbCBpcyBhYm92ZSB0aGUgY29udHJvbCBjaGFubmVsLCAzIGlmIGJlbG93LCAwIGlmIG5vdCBwcmVzZW50CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJVUNIQVIJCQkJCUJzczIwNDBDb2V4aXN0RmxhZzsJCS8vIGJpdCAwOiBiQnNzQ29leGlzdFRpbWVyUnVubmluZywgYml0IDE6IE5lZWRTeW5jQWRkSHRJbmZvLgorCVJBTElOS19USU1FUl9TVFJVQ1QJQnNzMjA0MENvZXhpc3RUaW1lcjsKKworCS8vVGhpcyBJRSBpcyB1c2VkIGZvciAyMC80MCBCU1MgQ29leGlzdGVuY2UuCisJQlNTXzIwNDBfQ09FWElTVF9JRQkJQlNTMjA0MENvZXhpc3RJbmZvOworCS8vID09PT09PSAxMW4gRDMuMCA9PT09PT09PT09PT09PT09PT09PT09PT4KKwlVU0hPUlQJCQkJCURvdDExT0Jzc1NjYW5QYXNzaXZlRHdlbGw7CQkJCS8vIFVuaXQgOiBUVS4gNX4xMDAwCisJVVNIT1JUCQkJCQlEb3QxMU9Cc3NTY2FuQWN0aXZlRHdlbGw7CQkJCS8vIFVuaXQgOiBUVS4gMTB+MTAwMAorCVVTSE9SVAkJCQkJRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50OwkJCS8vIFVuaXQgOiBTZWNvbmQKKwlVU0hPUlQJCQkJCURvdDExT0Jzc1NjYW5QYXNzaXZlVG90YWxQZXJDaGFubmVsOwkvLyBVbml0IDogVFUuIDIwMH4xMDAwMAorCVVTSE9SVAkJCQkJRG90MTFPQnNzU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbDsJLy8gVW5pdCA6IFRVLiAyMH4xMDAwMAorCVVTSE9SVAkJCQkJRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3I7CisJVVNIT1JUCQkJCQlEb3QxMU9Cc3NTY2FuQWN0aXZpdHlUaHJlOwkJCQkvLyBVbml0IDogcGVyY2VudGFnZQorCisJVUxPTkcJCQkJCURvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5OwkJCS8vIG11bHRpcGxlIG9mIChEb3QxMUJzc1dpZHRoVHJpZ2dlclNjYW5JbnQgKiBEb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheUZhY3RvcikKKwlVTE9ORwkJCQkJQ291bnREb3duQ3RyOwkvLyBDb3VudERvd24gQ291bnRlciBmcm9tIChEb3QxMUJzc1dpZHRoVHJpZ2dlclNjYW5JbnQgKiBEb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheUZhY3RvcikKKworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIFRyaWdnZXJFdmVudFRhYkxvY2s7CisJQlNTXzIwNDBfQ09FWElTVF9JRQkJTGFzdEJTU0NvZXhpc3QyMDQwOworCUJTU18yMDQwX0NPRVhJU1RfSUUJCUJTU0NvZXhpc3QyMDQwOworCVRSSUdHRVJfRVZFTlRfVEFCCQlUcmlnZ2VyRXZlbnRUYWI7CisJVUNIQVIJCQkJCUNoYW5uZWxMaXN0SWR4OworCS8vIDw9PT09PT0gMTFuIEQzLjAgPT09PT09PT09PT09PT09PT09PT09PT0KKwlCT09MRUFOCQkJCQliT3ZlcmxhcFNjYW5uaW5nOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIGJIVFByb3RlY3Q7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgYk1JTU9QU0VuYWJsZTsKKyAgICBCT09MRUFOCQkJCQliQkFEZWNsaW5lOworCUJPT0xFQU4JCQkJCWJEaXNhYmxlUmVvcmRlcmluZzsKKwlCT09MRUFOCQkJCQliRm9ydHlfTWh6X0ludG9sZXJhbnQ7CisJQk9PTEVBTgkJCQkJYkV4dENoYW5uZWxTd2l0Y2hBbm5vdW5jZW1lbnQ7CisJQk9PTEVBTgkJCQkJYlJjdkJTU1dpZHRoVHJpZ2dlckV2ZW50czsKKwlVTE9ORwkJCQkJTGFzdFJjdkJTU1dpZHRoVHJpZ2dlckV2ZW50c1RpbWU7CisKKwlVQ0hBUgkJCQkJVHhCQVNpemU7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBFbmFibGUgd2lyZWxlc3MgZXZlbnQKKwlCT09MRUFOCQkJCWJXaXJlbGVzc0V2ZW50OworCUJPT0xFQU4JCQkJYldpRmlUZXN0OwkJCQkvLyBFbmFibGUgdGhpcyBwYXJhbWV0ZXIgZm9yIFdpRmkgdGVzdAorCisJLy8gVHggJiBSeCBTdHJlYW0gbnVtYmVyIHNlbGVjdGlvbgorCVVDSEFSCQkJCVR4U3RyZWFtOworCVVDSEFSCQkJCVJ4U3RyZWFtOworCisJLy8gdHJhbnNtaXQgcGh5IG1vZGUsIHRyYXNtaXQgcmF0ZSBmb3IgTXVsdGljYXN0LgorI2lmZGVmIE1DQVNUX1JBVEVfU1BFQ0lGSUMKKwlVQ0hBUgkJCQlNY2FzdFRyYW5zbWl0TWNzOworCVVDSEFSCQkJCU1jYXN0VHJhbnNtaXRQaHlNb2RlOworI2VuZGlmIC8vIE1DQVNUX1JBVEVfU1BFQ0lGSUMgLy8KKworCUJPT0xFQU4gICAgIAkJYkhhcmR3YXJlUmFkaW87ICAgICAvLyBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIGVuYWJsZWQKKworI2lmZGVmIFJUMjg3MAorCUJPT0xFQU4gICAgIAkJYk11bHRpcGxlSVJQOyAgICAgICAvLyBNdWx0aXBsZSBCdWxrIElOIGZsYWcKKwlVQ0hBUiAgICAgICAJCU51bU9mQnVsa0luSVJQOyAgICAgLy8gaWYgYk11bHRpcGxlSVJQID09IFRSVUUsIE51bU9mQnVsa0luSVJQIHdpbGwgYmUgNCBvdGhlcndpc2UgYmUgMQorIAlSVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworCVVMT05HCQkJCU1heFBrdE9uZVR4QnVsazsKKwlVQ0hBUgkJCQlUeEJ1bGtGYWN0b3I7CisJVUNIQVIJCQkJUnhCdWxrRmFjdG9yOworCisJQkVBQ09OX1NZTkNfU1RSVUNUCSpwQmVhY29uU3luYzsKKwlSQUxJTktfVElNRVJfU1RSVUNUCUJlYWNvblVwZGF0ZVRpbWVyOworCVVJTlQzMgkJCQlCZWFjb25BZGp1c3Q7CisJVUlOVDMyCQkJCUJlYWNvbkZhY3RvcjsKKwlVSU5UMzIJCQkJQmVhY29uUmVtYWluOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyAJTkRJU19TUElOX0xPQ0sJCQlNZWFzdXJlUmVxVGFiTG9jazsKKwlQTUVBU1VSRV9SRVFfVEFCCQlwTWVhc3VyZVJlcVRhYjsKKworCU5ESVNfU1BJTl9MT0NLCQkJVHBjUmVxVGFiTG9jazsKKwlQVFBDX1JFUV9UQUIJCQlwVHBjUmVxVGFiOworCisJLy8gdHJhbnNtaXQgcGh5IG1vZGUsIHRyYXNtaXQgcmF0ZSBmb3IgTXVsdGljYXN0LgorI2lmZGVmIE1DQVNUX1JBVEVfU1BFQ0lGSUMKKwlIVFRSQU5TTUlUX1NFVFRJTkcJCU1DYXN0UGh5TW9kZTsKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisKKyNpZmRlZiBTSU5HTEVfU0tVCisJVUlOVDE2CQkJCQlEZWZpbmVNYXhUeFB3cjsKKyNlbmRpZiAvLyBTSU5HTEVfU0tVIC8vCisKKworfSBDT01NT05fQ09ORklHLCAqUENPTU1PTl9DT05GSUc7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyogTW9kaWZpZWQgYnkgV3UgWGktS3VuIDQvMjEvMjAwNiAqLworLy8gU1RBIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cwordHlwZWRlZiBzdHJ1Y3QgX1NUQV9BRE1JTl9DT05GSUcgeworCS8vIEdST1VQIDEgLQorCS8vICAgVXNlciBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIFJlZ2lzdHJ5LCBFMlBST00gb3IgT0lEX3h4eC4gVGhlc2Ugc2V0dGluZ3MgZGVzY3JpYmUKKwkvLyAgIHRoZSB1c2VyIGludGVuZGVkIGNvbmZpZ3VyYXRpb24sIGJ1dCBub3QgbmVjZXNzYXJ5IGZ1bGx5IGVxdWFsIHRvIHRoZSBmaW5hbAorCS8vICAgc2V0dGluZ3MgaW4gQUNUSVZFIEJTUyBhZnRlciBuZWdvdGlhdGlvbi9jb21wcm9taXplIHdpdGggdGhlIEJTUyBob2xkZXIgKGVpdGhlcgorCS8vICAgQVAgb3IgSUJTUyBob2xkZXIpLgorCS8vICAgT25jZSBpbml0aWFsaXplZCwgdXNlciBjb25maWd1cmF0aW9uIGNhbiBvbmx5IGJlIGNoYW5nZWQgdmlhIE9JRF94eHgKKwlVQ0hBUiAgICAgICBCc3NUeXBlOyAgICAgICAgICAgICAgLy8gQlNTX0lORlJBIG9yIEJTU19BREhPQworCVVTSE9SVCAgICAgIEF0aW1XaW47ICAgICAgICAgIC8vIHVzZWQgd2hlbiBzdGFydGluZyBhIG5ldyBJQlNTCisKKwkvLyBHUk9VUCAyIC0KKwkvLyAgIFVzZXIgY29uZmlndXJhdGlvbiBsb2FkZWQgZnJvbSBSZWdpc3RyeSwgRTJQUk9NIG9yIE9JRF94eHguIFRoZXNlIHNldHRpbmdzIGRlc2NyaWJlCisJLy8gICB0aGUgdXNlciBpbnRlbmRlZCBjb25maWd1cmF0aW9uLCBhbmQgc2hvdWxkIGJlIGFsd2F5cyBhcHBsaWVkIHRvIHRoZSBmaW5hbAorCS8vICAgc2V0dGluZ3MgaW4gQUNUSVZFIEJTUyB3aXRob3V0IGNvbXByb21pc2luZyB3aXRoIHRoZSBCU1MgaG9sZGVyLgorCS8vICAgT25jZSBpbml0aWFsaXplZCwgdXNlciBjb25maWd1cmF0aW9uIGNhbiBvbmx5IGJlIGNoYW5nZWQgdmlhIE9JRF94eHgKKwlVQ0hBUiAgICAgICBSc3NpVHJpZ2dlcjsKKwlVQ0hBUiAgICAgICBSc3NpVHJpZ2dlck1vZGU7ICAgICAgLy8gUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQgb3IgUlNTSV9UUklHR0VSRURfVVBPTl9FWENDRUVEX1RIUkVTSE9MRAorCVVTSE9SVCAgICAgIERlZmF1bHRMaXN0ZW5Db3VudDsgICAvLyBkZWZhdWx0IGxpc3RlbiBjb3VudDsKKwlVTE9ORyAgICAgICBXaW5kb3dzUG93ZXJNb2RlOyAgICAgICAgICAgLy8gUG93ZXIgbW9kZSBmb3IgQUMgcG93ZXIKKwlVTE9ORyAgICAgICBXaW5kb3dzQmF0dGVyeVBvd2VyTW9kZTsgICAgLy8gUG93ZXIgbW9kZSBmb3IgYmF0dGVyeSBpZiBleGlzdHMKKwlCT09MRUFOICAgICBiV2luZG93c0FDQ0FNRW5hYmxlOyAgICAgICAgLy8gRW5hYmxlIENBTSBwb3dlciBtb2RlIHdoZW4gQUMgb24KKwlCT09MRUFOICAgICBiQXV0b1JlY29ubmVjdDsgICAgICAgICAvLyBTZXQgdG8gVFJVRSB3aGVuIHNldHRpbmcgT0lEXzgwMl8xMV9TU0lEIHdpdGggbm8gbWF0Y2hpbmcgQlNTSUQKKwlVTE9ORyAgICAgICBXaW5kb3dzUG93ZXJQcm9maWxlOyAgICAvLyBXaW5kb3dzIHBvd2VyIHByb2ZpbGUsIGZvciBORElTNS4xIFBuUAorCisJLy8gTUlCOmllZWU4MDJkb3QxMS5kb3QxMXNtdCgxKS5kb3QxMVN0YXRpb25Db25maWdUYWJsZSgxKQorCVVTSE9SVCAgICAgIFBzbTsgICAgICAgICAgICAgICAgICAvLyBwb3dlciBtYW5hZ2VtZW50IG1vZGUgICAoUFdSX0FDVElWRXxQV1JfU0FWRSkKKwlVU0hPUlQgICAgICBEaXNhc3NvY1JlYXNvbjsKKwlVQ0hBUiAgICAgICBEaXNhc3NvY1N0YVtNQUNfQUREUl9MRU5dOworCVVTSE9SVCAgICAgIERlYXV0aFJlYXNvbjsKKwlVQ0hBUiAgICAgICBEZWF1dGhTdGFbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICBBdXRoRmFpbFJlYXNvbjsKKwlVQ0hBUiAgICAgICBBdXRoRmFpbFN0YVtNQUNfQUREUl9MRU5dOworCisJTkRJU184MDJfMTFfUFJJVkFDWV9GSUxURVIgICAgICAgICAgUHJpdmFjeUZpbHRlcjsgIC8vIFByaXZhY3lGaWx0ZXIgZW51bSBmb3IgODAyLjFYCisJTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGU7ICAgICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkCisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMJCQkJT3JpZ1dlcFN0YXR1czsJLy8gT3JpZ2luYWwgd2VwIHN0YXR1cyBzZXQgZnJvbSBPSUQKKworCS8vIEFkZCB0byBzdXBwb3J0IGRpZmZlcmVudCBjaXBoZXIgc3VpdGUgZm9yIFdQQTIvV1BBIG1vZGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJR3JvdXBDaXBoZXI7CQkvLyBNdWx0aWNhc3QgY2lwaGVyIHN1aXRlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCVBhaXJDaXBoZXI7CQkJLy8gVW5pY2FzdCBjaXBoZXIgc3VpdGUKKwlCT09MRUFOCQkJCQkJCQliTWl4Q2lwaGVyOwkJCS8vIEluZGljYXRlIGN1cnJlbnQgUGFpciAmIEdyb3VwIHVzZSBkaWZmZXJlbnQgY2lwaGVyIHN1aXRlcworCVVTSE9SVAkJCQkJCQkJUnNuQ2FwYWJpbGl0eTsKKworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIEdyb3VwS2V5V2VwU3RhdHVzOworCisJVUNIQVIJCVBNS1szMl07ICAgICAgICAgICAgICAgIC8vIFdQQSBQU0sgbW9kZSBQTUsKKwlVQ0hBUiAgICAgICBQVEtbNjRdOyAgICAgICAgICAgICAgICAvLyBXUEEgUFNLIG1vZGUgUFRLCisJVUNIQVIJCUdUS1szMl07CQkJCS8vIEdUSyBmcm9tIGF1dGhlbnRpY2F0b3IKKwlCU1NJRF9JTkZPCVNhdmVkUE1LW1BNS0lEX05PXTsKKwlVSU5UCQlTYXZlZFBNS051bTsJCQkvLyBTYXZlZCBQTUtJRCBudW1iZXIKKworCVVDSEFSCQlEZWZhdWx0S2V5SWQ7CisKKworCS8vIFdQQSA4MDIuMXggcG9ydCBjb250cm9sLCBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCwgV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVECisJVUNIQVIgICAgICAgUG9ydFNlY3VyZWQ7CisKKwkvLyBGb3IgV1BBIGNvdW50ZXJtZWFzdXJlcworCVVMT05HICAgICAgIExhc3RNaWNFcnJvclRpbWU7ICAgLy8gcmVjb3JkIGxhc3QgTUlDIGVycm9yIHRpbWUKKwlVTE9ORyAgICAgICBNaWNFcnJDbnQ7ICAgICAgICAgIC8vIFNob3VsZCBiZSAwLCAxLCAyLCB0aGVuIHJlc2V0IHRvIHplcm8gKGFmdGVyIGRpc2Fzc29pY2lhdGlvbikuCisJQk9PTEVBTiAgICAgYkJsb2NrQXNzb2M7ICAgICAgICAvLyBCbG9jayBhc3NvY2lhdGUgYXR0ZW1wdCBmb3IgNjAgc2Vjb25kcyBhZnRlciBjb3VudGVyIG1lYXN1cmUgb2NjdXJyZWQuCisJLy8gRm9yIFdQQS1QU0sgc3VwcGxpY2FudCBzdGF0ZQorCVdQQV9TVEFURSAgIFdwYVN0YXRlOyAgICAgICAgICAgLy8gRGVmYXVsdCBpcyBTU19OT1RVU0UgYW5kIGhhbmRsZWQgYnkgbWljcm9zb2Z0IDgwMi4xeAorCVVDSEFSICAgICAgIFJlcGxheUNvdW50ZXJbOF07CisJVUNIQVIgICAgICAgQU5vbmNlWzMyXTsgICAgICAgICAvLyBBTm9uY2UgZm9yIFdQQS1QU0sgZnJvbSBhdXJoZW50aWNhdG9yCisJVUNIQVIgICAgICAgU05vbmNlWzMyXTsgICAgICAgICAvLyBTTm9uY2UgZm9yIFdQQS1QU0sKKworCVVDSEFSICAgICAgIExhc3RTTlIwOyAgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIEJFQUNPTidzIFNOUgorCVVDSEFSICAgICAgIExhc3RTTlIxOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgQkVBQ09OJ3MgU05SIGZvciAybmQgIGFudGVubmEKKwlSU1NJX1NBTVBMRSBSc3NpU2FtcGxlOworCVVMT05HICAgICAgIE51bU9mQXZnUnNzaVNhbXBsZTsKKworCVVMT05HICAgICAgIExhc3RCZWFjb25SeFRpbWU7ICAgICAvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBCRUFDT04gUlggdGltZQorCVVMT05HICAgICAgIExhc3QxMWJCZWFjb25SeFRpbWU7ICAvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCAxMUIgQkVBQ09OIFJYIHRpbWUKKwlVTE9ORwkJTGFzdDExZ0JlYWNvblJ4VGltZTsJLy8gT1MncyB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgMTFHIEJFQUNPTiBSWCB0aW1lCisJVUxPTkcJCUxhc3QyME5CZWFjb25SeFRpbWU7CS8vIE9TJ3MgdGltZXN0YW1wIG9mIHRoZSBsYXN0IDIwTUh6IE4gQkVBQ09OIFJYIHRpbWUKKworCVVMT05HICAgICAgIExhc3RTY2FuVGltZTsgICAgICAgLy8gUmVjb3JkIGxhc3Qgc2NhbiB0aW1lIGZvciBpc3N1ZSBCU1NJRF9TQ0FOX0xJU1QKKwlVTE9ORyAgICAgICBTY2FuQ250OyAgICAgICAgICAgIC8vIFNjYW4gY291bnRzIHNpbmNlIG1vc3QgcmVjZW50IFNTSUQsIEJTU0lELCBTQ0FOIE9JRCByZXF1ZXN0CisJQk9PTEVBTiAgICAgYlN3UmFkaW87ICAgICAgICAgICAvLyBTb2Z0d2FyZSBjb250cm9sbGVkIFJhZGlvIE9uL09mZiwgVFJVRTogT24KKwlCT09MRUFOICAgICBiSHdSYWRpbzsgICAgICAgICAgIC8vIEhhcmR3YXJlIGNvbnRyb2xsZWQgUmFkaW8gT24vT2ZmLCBUUlVFOiBPbgorCUJPT0xFQU4gICAgIGJSYWRpbzsgICAgICAgICAgICAgLy8gUmFkaW8gc3RhdGUsIEFuZCBvZiBTdyAmIEh3IHJhZGlvIHN0YXRlCisJQk9PTEVBTiAgICAgYkhhcmR3YXJlUmFkaW87ICAgICAvLyBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIGVuYWJsZWQKKwlCT09MRUFOICAgICBiU2hvd0hpZGRlblNTSUQ7ICAgIC8vIFNob3cgYWxsIGtub3duIFNTSUQgaW4gU1NJRCBsaXN0IGdldCBvcGVyYXRpb24KKworICAgIC8vQk9PTEVBTgkJQWRob2NCT25seUpvaW5lZDsJLy8gSW5kaWNhdGUgQWRob2MgQiBKb2luLgorICAgIC8vQk9PTEVBTgkJQWRob2NCR0pvaW5lZDsJCS8vIEluZGljYXRlIEFkaG9jIEIvRyBKb2luLgorICAgIC8vQk9PTEVBTgkJQWRob2MyME5Kb2luZWQ7CQkvLyBJbmRpY2F0ZSBBZGhvYyAyME1IeiBOIEpvaW4uCisKKwkvLyBOZXcgZm9yIFdQQSwgd2luZG93cyB3YW50IHVzIHRvIHRvIGtlZXAgYXNzb2NpYXRpb24gaW5mb3JtYXRpb24gYW5kCisJLy8gRml4ZWQgSUVzIGZyb20gbGFzdCBhc3NvY2lhdGlvbiByZXNwb25zZQorCU5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OICAgICBBc3NvY0luZm87CisJVVNIT1JUICAgICAgIFJlcVZhcklFTGVuOyAgICAgICAgICAgICAgICAvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKKwlVQ0hBUiAgICAgICBSZXFWYXJJRXNbTUFYX1ZJRV9MRU5dOwkJLy8gVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJVVNIT1JUICAgICAgIFJlc1ZhcklFTGVuOyAgICAgICAgICAgICAgICAvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKKwlVQ0hBUiAgICAgICBSZXNWYXJJRXNbTUFYX1ZJRV9MRU5dOworCisJVUNIQVIgICAgICAgUlNOSUVfTGVuOworCVVDSEFSICAgICAgIFJTTl9JRVtNQVhfTEVOX09GX1JTTklFXTsJLy8gVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisKKwkvLyBOZXcgdmFyaWFibGVzIHVzZWQgZm9yIENDWCAxLjAKKwlCT09MRUFOICAgICAgICAgICAgIGJDa2lwT247CisJQk9PTEVBTiAgICAgICAgICAgICBiQ2tpcENtaWNPbjsKKwlVQ0hBUiAgICAgICAgICAgICAgIENraXBGbGFnOworCVVDSEFSICAgICAgICAgICAgICAgR0lWWzNdOyAgLy9mb3IgQ0NYIGl2CisJVUNIQVIgICAgICAgICAgICAgICBSeFNFUVs0XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIFR4U0VRWzRdOworCVVDSEFSICAgICAgICAgICAgICAgQ0tJUE1JQ1s0XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIExlYXBBdXRoTW9kZTsKKwlMRUFQX0FVVEhfSU5GTyAgICAgIExlYXBBdXRoSW5mbzsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhhc2hQd2RbMTZdOworCVVDSEFSICAgICAgICAgICAgICAgTmV0d29ya0NoYWxsZW5nZVs4XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIE5ldHdvcmtDaGFsbGVuZ2VSZXNwb25zZVsyNF07CisJVUNIQVIgICAgICAgICAgICAgICBQZWVyQ2hhbGxlbmdlWzhdOworCisJVUNIQVIgICAgICAgICAgICAgICBQZWVyQ2hhbGxlbmdlUmVzcG9uc2VbMjRdOworCVVDSEFSICAgICAgICAgICAgICAgU2Vzc2lvbktleVsxNl07IC8vTmV0d29yayBzZXNzaW9uIGtleXMgKE5TSykKKwlSQUxJTktfVElNRVJfU1RSVUNUIExlYXBBdXRoVGltZXI7CisJUk9HVUVBUF9UQUJMRSAgICAgICBSb2d1ZUFwVGFiOyAgIC8vQ2lzY28gQ0NYMSBSb2d1ZSBBUCBEZXRlY3Rpb24KKworCS8vIE5ldyBjb250cm9sIGZsYWdzIGZvciBDQ1gKKwlDQ1hfQ09OVFJPTCAgICAgICAgIENDWENvbnRyb2w7ICAgICAgICAgICAgICAgICAvLyBNYXN0ZXIgYWRtaW5pc3RyYXRpb24gc3RhdGUKKwlCT09MRUFOICAgICAgICAgICAgIENDWEVuYWJsZTsgICAgICAgICAgICAgICAgICAvLyBBY3R1YWwgQ0NYIHN0YXRlCisJVUNIQVIgICAgICAgICAgICAgICBDQ1hTY2FuQ2hhbm5lbDsgICAgICAgICAgICAgLy8gU2VsZWN0ZWQgY2hhbm5lbCBmb3IgQ0NYIGJlYWNvbiByZXF1ZXN0CisJVVNIT1JUICAgICAgICAgICAgICBDQ1hTY2FuVGltZTsgICAgICAgICAgICAgICAgLy8gVGltZSBvdXQgdG8gd2FpdCBmb3IgYmVhY29uIGFuZCBwcm9iZSByZXNwb25zZQorCVVDSEFSICAgICAgICAgICAgICAgQ0NYUmVxVHlwZTsgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQgcHJvY2Vzc2luZyBDQ1ggcmVxdWVzdCB0eXBlCisJQlNTX1RBQkxFICAgICAgICAgICBDQ1hCc3NUYWI7ICAgICAgICAgICAgICAgICAgLy8gQlNTIFRhYmxlCisJVUNIQVIgICAgICAgICAgICAgICBGcmFtZVJlcG9ydEJ1ZlsyMDQ4XTsgICAgICAgLy8gQnVmZmVyIGZvciBjcmVhdGluZyBmcmFtZSByZXBvcnQKKwlVU0hPUlQgICAgICAgICAgICAgIEZyYW1lUmVwb3J0TGVuOyAgICAgICAgICAgICAvLyBDdXJyZW50IEZyYW1lIHJlcG9ydCBsZW5ndGgKKwlVTE9ORyAgICAgICAgICAgICAgIENMQnVzeUJ5dGVzOyAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSB0b3RhbCBieXRlcyByZWNlaXZlZCBkdXJuaW5nIGNoYW5uZWwgbG9hZCBzY2FuIHRpbWUKKwlVU0hPUlQgICAgICAgICAgICAgIFJQSURlbnNpdHlbOF07ICAgICAgICAgICAgICAvLyBBcnJheSBmb3IgUlBJIGRlbnNpdHkgY29sbGVjdGlvbgorCS8vIFN0YXJ0IGFkZHJlc3Mgb2YgZWFjaCBCU1MgdGFibGUgd2l0aGluIEZyYW1lUmVwb3J0QnVmCisJLy8gSXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIHRoZSBSeFBvd2VyIG9mIHRoZSBjb3JyZXNwb25kaW5nIEJzcworCVVTSE9SVCAgICAgICAgICAgICAgQnNzUmVwb3J0T2Zmc2V0W01BWF9MRU5fT0ZfQlNTX1RBQkxFXTsKKwlVU0hPUlQgICAgICAgICAgICAgIEJlYWNvblRva2VuOyAgICAgICAgICAgICAgICAvLyBUb2tlbiBmb3IgYmVhY29uIHJlcG9ydAorCVVMT05HICAgICAgICAgICAgICAgTGFzdEJzc0luZGV4OyAgICAgICAgICAgICAgIC8vIE1vc3QgY3VycmVudCByZXBvcnRlZCBCc3MgaW5kZXgKKwlSTV9SRVFVRVNUX0FDVElPTiAgIE1lYXN1cmVtZW50UmVxdWVzdFsxNl07ICAgICAvLyBTYXZlZCBtZWFzdXJlbWVudCByZXF1ZXN0CisJVUNIQVIgICAgICAgICAgICAgICBSTVJlcUNudDsgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIG1lYXN1cmVtZW50IHJlcXVlc3Qgc2F2ZWQuCisJVUNIQVIgICAgICAgICAgICAgICBDdXJyZW50Uk1SZXFJZHg7ICAgICAgICAgICAgLy8gTnVtYmVyIG9mIG1lYXN1cmVtZW50IHJlcXVlc3Qgc2F2ZWQuCisJQk9PTEVBTiAgICAgICAgICAgICBQYXJhbGxlbFJlcTsgICAgICAgICAgICAgICAgLy8gUGFyYWxsZWwgbWVhc3VyZW1lbnQsIG9ubHkgb25lIHJlcXVlc3QgcGVyZm9ybWVkLAorCQkJCQkJCQkJCQkJCS8vIEl0IG11c3QgYmUgdGhlIHNhbWUgY2hhbm5lbCB3aXRoIG1heGltdW0gZHVyYXRpb24KKwlVU0hPUlQgICAgICAgICAgICAgIFBhcmFsbGVsRHVyYXRpb247ICAgICAgICAgICAvLyBNYXhpbXVtIGR1cmF0aW9uIGZvciBwYXJhbGxlbCBtZWFzdXJlbWVudAorCVVDSEFSICAgICAgICAgICAgICAgUGFyYWxsZWxDaGFubmVsOyAgICAgICAgICAgIC8vIE9ubHkgb25lIGNoYW5uZWwgd2l0aCBwYXJhbGxlbCBtZWFzdXJlbWVudAorCVVTSE9SVCAgICAgICAgICAgICAgSUFQUFRva2VuOyAgICAgICAgICAgICAgICAgIC8vIElBUFAgZGlhbG9nIHRva2VuCisJVUNIQVIgICAgICAgICAgICAgICBDQ1hRb3NFQ1dNaW47ICAgICAgICAgICAgICAgLy8gQ2lzY28gUU9TIEVDV01pbiBmb3IgQUMgMAorCVVDSEFSICAgICAgICAgICAgICAgQ0NYUW9zRUNXTWF4OyAgICAgICAgICAgICAgIC8vIENpc2NvIFFPUyBFQ1dNYXggZm9yIEFDIDAKKwkvLyBIYWNrIGZvciBjaGFubmVsIGxvYWQgYW5kIG5vaXNlIGhpc3RvZ3JhbSBwYXJhbWV0ZXJzCisJVUNIQVIgICAgICAgICAgICAgICBOSEZhY3RvcjsgICAgICAgICAgICAgICAgICAgLy8gUGFyYW1ldGVyIGZvciBOb2lzZSBoaXN0b2dyYW0KKwlVQ0hBUiAgICAgICAgICAgICAgIENMRmFjdG9yOyAgICAgICAgICAgICAgICAgICAvLyBQYXJhbWV0ZXIgZm9yIGNoYW5uZWwgbG9hZAorCisJVUNIQVIgICAgICAgICAgICAgICBLUktbMTZdOyAgICAgICAgLy9LZXkgUmVmcmVzaCBLZXkuCisJVUNIQVIgICAgICAgICAgICAgICBCVEtbMzJdOyAgICAgICAgLy9CYXNlIFRyYW5zaWVudCBLZXkKKwlCT09MRUFOICAgICAgICAgICAgIENDS01MaW5rVXBGbGFnOworCVVMT05HICAgICAgICAgICAgICAgQ0NLTVJOOyAgICAvLyhSZSlBc3NvY2lhdGlvbiByZXF1ZXN0IG51bWJlci4KKwlMQVJHRV9JTlRFR0VSICAgICAgIENDS01CZWFjb25BdEpvaW5UaW1lU3RhbXA7ICAvL1RTRiB0aW1lciBmb3IgUmUtYXNzb2NhaXRlIHRvIHRoZSBuZXcgQVAKKwlVQ0hBUiAgICAgICAgICAgICAgIEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsgICAgICAvL2luIGRCbQorCVVDSEFSICAgICAgICAgICAgICAgQWlyb25ldElQQWRkcmVzc1s0XTsgICAgICAgIC8vZWcuIDE5Mi4xNjguMS4xCisJQk9PTEVBTiAgICAgICAgICAgICBDQ1hBZGphY2VudEFQUmVwb3J0RmxhZzsgICAgLy9mbGFnIGZvciBkZXRlcm1pbmluZyByZXBvcnQgQXNzb2MgTG9zdCB0aW1lCisJQ0hBUiAgICAgICAgICAgICAgICBDQ1hBZGphY2VudEFQU3NpZFtNQVhfTEVOX09GX1NTSURdOyAvL0FkamFjZW50IEFQJ3MgU1NJRCByZXBvcnQKKwlVQ0hBUiAgICAgICAgICAgICAgIENDWEFkamFjZW50QVBTc2lkTGVuOyAgICAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgc3NpZCBsZW5ndGggaW4gdXNlZAorCVVDSEFSICAgICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUEJzc2lkW01BQ19BRERSX0xFTl07ICAgICAgICAgLy9BZGphY2VudCBBUCdzIEJTU0lEIHJlcG9ydAorCVVTSE9SVCAgICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUENoYW5uZWw7CisJVUxPTkcgICAgICAgICAgICAgICBDQ1hBZGphY2VudEFQTGlua0Rvd25UaW1lOyAgLy9mb3IgU3BlYyBTMzIuCisKKwlSQUxJTktfVElNRVJfU1RSVUNUCVN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyOworCUJPT0xFQU4JCQkJU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nOworCisJVUNIQVIgICAgICAgICAgIAlEdGltQ291bnQ7ICAgICAgLy8gMC4uIER0aW1QZXJpb2QtMQorCVVDSEFSICAgICAgICAgICAJRHRpbVBlcmlvZDsgICAgIC8vIGRlZmF1bHQgPSAzCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlSVF84MDJfMTFfRExTCQlETFNFbnRyeVtNQVhfTlVNX09GX0RMU19FTlRSWV07CisJVUNIQVIJCQkJRGxzUmVwbGF5Q291bnRlcls4XTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJLy8gVGhpcyBpcyBvbmx5IGZvciBXSFFMIHRlc3QuCisJQk9PTEVBTgkJCQlXaHFsVGVzdDsKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBSQUxJTktfVElNRVJfU1RSVUNUIFdwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyOworICAgIC8vIEZhc3QgUm9hbWluZworCUJPT0xFQU4JCSAgICAgICAgYkZhc3RSb2FtaW5nOyAgICAgICAvLyAwOmRpc2FibGUgZmFzdCByb2FtaW5nLCAxOmVuYWJsZSBmYXN0IHJvYW1pbmcKKwlDSEFSCQkgICAgICAgIGRCbVRvUm9hbTsgICAgICAgICAgLy8gdGhlIGNvbmRpdGlvbiB0byByb2FtIHdoZW4gcmVjZWl2aW5nIFJzc2kgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIEl0J3MgbmVnYXRpdmUgdmFsdWUuCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgQk9PTEVBTiAgICAgICAgICAgICBJRUVFODAyMVg7CisgICAgQk9PTEVBTiAgICAgICAgICAgICBJRUVFODAyMXhfcmVxdWlyZWRfa2V5czsKKyAgICBDSVBIRVJfS0VZCSAgICAgICAgRGVzaXJlU2hhcmVkS2V5WzRdOwkvLyBSZWNvcmQgdXNlciBkZXNpcmVkIFdFUCBrZXlzCisgICAgVUNIQVIgICAgICAgICAgICAgICBEZXNpcmVTaGFyZWRLZXlJZDsKKworICAgIC8vIDA6IGRyaXZlciBpZ25vcmVzIHdwYV9zdXBwbGljYW50CisgICAgLy8gMTogd3BhX3N1cHBsaWNhbnQgaW5pdGlhdGVzIHNjYW5uaW5nIGFuZCBBUCBzZWxlY3Rpb24KKyAgICAvLyAyOiBkcml2ZXIgdGFrZXMgY2FyZSBvZiBzY2FubmluZywgQVAgc2VsZWN0aW9uLCBhbmQgSUVFRSA4MDIuMTEgYXNzb2NpYXRpb24gcGFyYW1ldGVycworICAgIFVDSEFSICAgICAgICAgICAgICAgV3BhU3VwcGxpY2FudFVQOworCVVDSEFSCQkJCVdwYVN1cHBsaWNhbnRTY2FuQ291bnQ7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisgICAgQ0hBUiAgICAgICAgICAgICAgICBkZXZfbmFtZVsxNl07CisgICAgVVNIT1JUICAgICAgICAgICAgICBPcmlEZXZUeXBlOworCisgICAgQk9PTEVBTiAgICAgICAgICAgICBiVEduV2lmaVRlc3Q7CisJQk9PTEVBTgkJCSAgICBiU2NhblJlcUlzRnJvbVdlYlVJOworCisJSFRUUkFOU01JVF9TRVRUSU5HCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7Ly8gRm9yIHRyYW5zbWl0IHBoeSBzZXR0aW5nIGluIFRYV0kuCisJREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HICAgICAgIAlEZXNpcmVkVHJhbnNtaXRTZXR0aW5nOworCVJUX0hUX1BIWV9JTkZPCQkJCQlEZXNpcmVkSHRQaHlJbmZvOworCUJPT0xFQU4JCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CisKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlVQ0hBUgkJCQlJRUVFODAyMTFkQ2xpZW50TW9kZTsKKwlVQ0hBUgkJCQlTdGFPcmlDb3VudHJ5Q29kZVszXTsKKwlVQ0hBUgkJCQlTdGFPcmlHZW9ncmFwaHk7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworfSBTVEFfQURNSU5fQ09ORklHLCAqUFNUQV9BRE1JTl9DT05GSUc7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUga2VlcCB0aGUgY3VycmVudCBhY3RpdmUgQlNTL0lCU1MncyBjb25maWd1cmF0aW9uIHRoYXQgdGhpcyBTVEEKKy8vIGhhZCBhZ3JlZWQgdXBvbiBqb2luaW5nIHRoZSBuZXR3b3JrLiBXaGljaCBtZWFucyB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c3VhbGx5IGRlY2lkZWQKKy8vIGJ5IHRoZSBCU1MvSUJTUyBjcmVhdG9yIGluc3RlYWQgb2YgdXNlciBjb25maWd1cmF0aW9uLiBEYXRhIGluIHRoaXMgZGF0YSBzdHJ1Y3R1cnJlCisvLyBpcyB2YWxpZCBvbmx5IHdoZW4gZWl0aGVyIEFESE9DX09OKHBBZCkgb3IgSU5GUkFfT04ocEFkKSBpcyBUUlVFLgorLy8gTm9ybWFsbHksIGFmdGVyIFNDQU4gb3IgZmFpbGVkIHJvYW1pbmcgYXR0ZW1wdHMsIHdlIG5lZWQgdG8gcmVjb3ZlciBiYWNrIHRvCisvLyB0aGUgY3VycmVudCBhY3RpdmUgc2V0dGluZ3MuCit0eXBlZGVmIHN0cnVjdCBfU1RBX0FDVElWRV9DT05GSUcgeworCVVTSE9SVCAgICAgIEFpZDsKKwlVU0hPUlQgICAgICBBdGltV2luOyAgICAgICAgICAgICAgICAvLyBpbiBrdXNlYzsgSUJTUyBwYXJhbWV0ZXIgc2V0IGVsZW1lbnQKKwlVU0hPUlQgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlVU0hPUlQgICAgICBDZnBNYXhEdXJhdGlvbjsKKwlVU0hPUlQgICAgICBDZnBQZXJpb2Q7CisKKwkvLyBDb3B5IHN1cHBvcnRlZCByYXRlIGZyb20gZGVzaXJlZCBBUCdzIGJlYWNvbi4gV2UgYXJlIHRyeWluZyB0byBtYXRjaAorCS8vIEFQJ3Mgc3VwcG9ydGVkIGFuZCBleHRlbmRlZCByYXRlIHNldHRpbmdzLgorCVVDSEFSICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgIFN1cFJhdGVMZW47CisJVUNIQVIgICAgICAgRXh0UmF0ZUxlbjsKKwkvLyBDb3B5IHN1cHBvcnRlZCBodCBmcm9tIGRlc2lyZWQgQVAncyBiZWFjb24uIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2gKKwlSVF9IVF9QSFlfSU5GTwkJU3VwcG9ydGVkUGh5SW5mbzsKKwlSVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworfSBTVEFfQUNUSVZFX0NPTkZJRywgKlBTVEFfQUNUSVZFX0NPTkZJRzsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIFJUMjg3MAordHlwZWRlZiBzdHJ1Y3QgICBSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZIHsKKyAgICAgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgICAgICAgICBNYWNBZGRyOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY1RhYk1hdGNoV0NJRDsgICAgICAgIC8vIEFTSUMKKyAgICAgICAgQ0lQSEVSX0tFWSAgICAgIENpcGhlcktleTsKK30gUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSwqUFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKy8vIC0tLS0tLS0tLS0tIHN0YXJ0IG9mIEFQIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBVVRILVJTUCBTdGF0ZSBNYWNoaW5lIEF1eCBkYXRhIHN0cnVjdHVyZQordHlwZWRlZiBzdHJ1Y3QgX0FQX01MTUVfQVVYIHsKKwlVQ0hBUiAgICAgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICAgICAgICAgIEFsZzsKKwlDSEFSICAgICAgICAgICAgICAgIENoYWxsZW5nZVtDSVBIRVJfVEVYVF9MRU5dOworfSBBUF9NTE1FX0FVWCwgKlBBUF9NTE1FX0FVWDsKKworLy8gc3RydWN0dXJlIHRvIGRlZmluZSBXUEEgR3JvdXAgS2V5IFJla2V5IEludGVydmFsCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JUXzgwMl8xMV9XUEFfUkVLRVkgeworCVVMT05HIFJlS2V5TWV0aG9kOyAgICAgICAgICAvLyBtZWNoYW5pc20gZm9yIHJla2V5aW5nOiAwOmRpc2FibGUsIDE6IHRpbWUtYmFzZWQsIDI6IHBhY2tldC1iYXNlZAorCVVMT05HIFJlS2V5SW50ZXJ2YWw7ICAgICAgICAvLyB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cworfSBSVF9XUEFfUkVLRVksKlBSVF9XUEFfUkVLRVksIFJUXzgwMl8xMV9XUEFfUkVLRVksICpQUlRfODAyXzExX1dQQV9SRUtFWTsKKwordHlwZWRlZiBzdHJ1Y3QgX01BQ19UQUJMRV9FTlRSWSB7CisJLy9DaG9vc2UgMSBmcm9tIFZhbGlkQXNXRFMgYW5kIFZhbGlkQXNDTEkgIHRvIHZhbGlkaXplLgorCUJPT0xFQU4JCVZhbGlkQXNDTEk7CQkvLyBTdGEgbW9kZSwgc2V0IHRoaXMgVFJVRSBhZnRlciBMaW5rdXAsdG9vLgorCUJPT0xFQU4JCVZhbGlkQXNXRFM7CS8vIFRoaXMgaXMgV0RTIEVudHJ5LiBvbmx5IGZvciBBUCBtb2RlLgorCUJPT0xFQU4JCVZhbGlkQXNBcENsaTsgICAvL1RoaXMgaXMgYSBBUC1DbGllbnQgZW50cnksIG9ubHkgZm9yIEFQIG1vZGUgd2hpY2ggZW5hYmxlIEFQLUNsaWVudCBmdW5jdGlvbnMuCisJQk9PTEVBTgkJVmFsaWRBc01lc2g7CisJQk9PTEVBTgkJVmFsaWRBc0RsczsJLy8gVGhpcyBpcyBETFMgRW50cnkuIG9ubHkgZm9yIFNUQSBtb2RlLgorCUJPT0xFQU4JCWlzQ2FjaGVkOworCUJPT0xFQU4JCWJJQW1CYWRBdGhlcm9zOworCisJVUNIQVIgICAgICAgICAJRW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmc7ICAvLyBFbnF1ZXVlIEVBUG9MLVN0YXJ0IGZvciB0cmlnZ2VyaW5nIEVBUCBTTQorCS8vamFuIGZvciB3cGEKKwkvLyByZWNvcmQgd2hpY2ggZW50cnkgcmV2b2tlIE1JQyBGYWlsdXJlICwgaWYgaXQgbGVhdmVzIHRoZSBCU1MgaXRzZWxmLCBBUCB3b24ndCB1cGRhdGUgYU1JQ0ZhaWxUaW1lIE1JQgorCVVDSEFSICAgICAgICAgICBDTVRpbWVyUnVubmluZzsKKwlVQ0hBUiAgICAgICAgICAgYXBpZHg7CQkJLy8gTUJTUyBudW1iZXIKKwlVQ0hBUiAgICAgICAgICAgUlNOSUVfTGVuOworCVVDSEFSICAgICAgICAgICBSU05fSUVbTUFYX0xFTl9PRl9SU05JRV07CisJVUNIQVIgICAgICAgICAgIEFOb25jZVtMRU5fS0VZX0RFU0NfTk9OQ0VdOworCVVDSEFSICAgICAgICAgICBSX0NvdW50ZXJbTEVOX0tFWV9ERVNDX1JFUExBWV07CisJVUNIQVIgICAgICAgICAgIFBUS1s2NF07CisJVUNIQVIgICAgICAgICAgIFJlVHJ5Q291bnRlcjsKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgICAgICAgICAgICAgICBSZXRyeVRpbWVyOworCVJBTElOS19USU1FUl9TVFJVQ1QJCQkJCUVucXVldWVTdGFydEZvclBTS1RpbWVyOwkvLyBBIHRpbWVyIHdoaWNoIGVucXVldWUgRUFQb0wtU3RhcnQgZm9yIHRyaWdnZXJpbmcgUFNLIFNNCisJTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGU7ICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggdG8gd2hhdGV2ZXIgbWljcm9zb2Z0IGRlZmluZWQKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTICAgICAgICAgICAgICBXZXBTdGF0dXM7CisJQVBfV1BBX1NUQVRFICAgIFdwYVN0YXRlOworCUdUS19TVEFURSAgICAgICBHVEtTdGF0ZTsKKwlVU0hPUlQgICAgICAgICAgUG9ydFNlY3VyZWQ7CisJTkRJU184MDJfMTFfUFJJVkFDWV9GSUxURVIgIFByaXZhY3lGaWx0ZXI7ICAgICAgLy8gUHJpdmFjeUZpbHRlciBlbnVtIGZvciA4MDIuMVgKKwlDSVBIRVJfS0VZICAgICAgUGFpcndpc2VLZXk7CisJUFZPSUQgICAgICAgICAgIHBBZDsKKyAgICBJTlQJCQkJUE1LSURfQ2FjaGVJZHg7CisgICAgVUNIQVIJCQlQTUtJRFtMRU5fUE1LSURdOworCisKKwlVQ0hBUiAgICAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBQc01vZGU7CisJU1NUICAgICAgICAgICAgIFNzdDsKKwlBVVRIX1NUQVRFICAgICAgQXV0aFN0YXRlOyAvLyBmb3IgU0hBUkVEIEtFWSBhdXRoZW50aWNhdGlvbiBzdGF0ZSBtYWNoaW5lIHVzZWQgb25seQorCUJPT0xFQU4JCQlJc1JlYXNzb2NTdGE7CS8vIEluZGljYXRlIHdoZXRoZXIgdGhpcyBpcyBhIHJlYXNzb2NpYXRpb24gcHJvY2VkdXJlCisJVVNIT1JUICAgICAgICAgIEFpZDsKKwlVU0hPUlQgICAgICAgICAgQ2FwYWJpbGl0eUluZm87CisJVUNIQVIgICAgICAgICAgIExhc3RSc3NpOworCVVMT05HICAgICAgICAgICBOb0RhdGFJZGxlQ291bnQ7CisJVUlOVDE2CQkJU3RhdGlvbktlZXBBbGl2ZUNvdW50OyAvLyB1bml0OiBzZWNvbmQKKwlVTE9ORyAgICAgICAgICAgUHNRSWRsZUNvdW50OworCVFVRVVFX0hFQURFUiAgICBQc1F1ZXVlOworCisJVUlOVDMyCQkJU3RhQ29ubmVjdFRpbWU7CQkvLyB0aGUgbGl2ZSB0aW1lIG9mIHRoaXMgc3RhdGlvbiBzaW5jZSBhc3NvY2lhdGVkIHdpdGggQVAKKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJQk9PTEVBTgkJCWJTZW5kQkFSOworCVVTSE9SVAkJCU5vQkFEYXRhQ291bnREb3duOworCisJVUlOVDMyICAgCQlDYWNoZWRCdWZbMTZdOwkJLy8gVUlOVCAoNCBieXRlcykgZm9yIGFsaWdubWVudAorCVVJTlQJCQlUeEJGQ291bnQ7IC8vIDMqMworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCVVJTlQJCQlGSUZPQ291bnQ7CisJVUlOVAkJCURlYnVnRklGT0NvdW50OworCVVJTlQJCQlEZWJ1Z1R4Q291bnQ7CisgICAgQk9PTEVBTgkJCWJEbHNJbml0OworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy9XRFMgZW50cnkgbmVlZHMgdGhlc2UKKy8vIHJ0Mjg2MCBhZGQgdGhpcy4gaWYgVmFsaWRBc1dEUz09VFJVRSwgTWF0Y2hXRFNUYWJJZHggaXMgdGhlIGluZGV4IGluIFdkc1RhYi5NYWNUYWIKKwlVSU5UCQkJTWF0Y2hXRFNUYWJJZHg7CisJVUNIQVIgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGU7CisJVUNIQVIgICAgICAgICAgIEN1cnJUeFJhdGU7CisJVUNIQVIgICAgICAgICAgIEN1cnJUeFJhdGVJbmRleDsKKwkvLyB0byByZWNvcmQgdGhlIGVhY2ggVFggcmF0ZSdzIHF1YWxpdHkuIDAgaXMgYmVzdCwgdGhlIGJpZ2dlciB0aGUgd29yc2UuCisJVVNIT1JUICAgICAgICAgIFR4UXVhbGl0eVtNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSF07CisvLwlVU0hPUlQgICAgICAgICAgT25lU2VjVHhPa0NvdW50OworCVVJTlQzMgkJCU9uZVNlY1R4Tm9SZXRyeU9rQ291bnQ7CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4UmV0cnlPa0NvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNUeEZhaWxDb3VudDsKKwlVSU5UMzIJCQlDb250aW51ZVR4RmFpbENudDsKKwlVSU5UMzIgICAgICAgICAgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQorCVVDSEFSICAgICAgICAgICBUeFJhdGVVcFBlbmFsdHk7ICAgICAgLy8gZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFzdCB1bnN0YWJsZSBjb25kaXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCVVJTlQJCQlNYXRjaERsc0VudHJ5SWR4OyAvLyBpbmRpY2F0ZSB0aGUgaW5kZXggaW4gcEFkLT5TdGFDZmcuRExTRW50cnkKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUJPT0xFQU4gICAgICAgICBmTm9pc3lFbnZpcm9ubWVudDsKKwlCT09MRUFOCQkJZkxhc3RTZWNBY2NvcmRpbmdSU1NJOworCVVDSEFSICAgICAgICAgICBMYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uOyAvLyAwOiBubyBjaGFuZ2UsIDE6cmF0ZSBVUCwgMjpyYXRlIGRvd24KKwlDSEFSCQkJTGFzdFRpbWVUeFJhdGVDaGFuZ2VBY3Rpb247IC8vS2VlcCBsYXN0IHRpbWUgdmFsdWUgb2YgTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbgorCVVMT05HCQkJTGFzdFR4T2tDb3VudDsKKwlVQ0hBUiAgICAgICAgICAgUEVSW01BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIXTsKKworCS8vIGEgYml0bWFwIG9mIEJPT0xFQU4gZmxhZ3MuIGVhY2ggYml0IHJlcHJlc2VudCBhbiBvcGVyYXRpb24gc3RhdHVzIG9mIGEgcGFydGljdWxhcgorCS8vIEJPT0xFQU4gY29udHJvbCwgZWl0aGVyIE9OIG9yIE9GRi4gVGhlc2UgZmxhZ3Mgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZCB2aWEKKwkvLyBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRygpLCBDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCksIENMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRygpIG1hY3Jvcy4KKwkvLyBzZWUgZk9QX1NUQVRVU194eHggaW4gUlRNUF9ERUYuQyBmb3IgZGV0YWlsIGJpdCBkZWZpbml0aW9uLiBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQKKwlVTE9ORyAgICAgICAgICAgQ2xpZW50U3RhdHVzRmxhZ3M7CisKKwkvLyBUT0RPOiBTaGFsbCB3ZSBtb3ZlIHRoYXQgdG8gRE9UMTFfTl9TVVBQT1JUPz8/CisJSFRUUkFOU01JVF9TRVRUSU5HCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7Ly8gRm9yIHRyYW5zbWl0IHBoeSBzZXR0aW5nIGluIFRYV0kuCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBIVCBFV0MgTUlNTy1OIHVzZWQgcGFyYW1ldGVycworCVVTSE9SVAkJUlhCQWJpdG1hcDsJLy8gZmlsbCB0byBvbi1jaGlwICBSWFdJX0JBX0JJVE1BU0sgaW4gOC4xLjNSWCBhdHRyaWJ1dGUgZW50cnkgZm9ybWF0CisJVVNIT1JUCQlUWEJBYml0bWFwOwkvLyBUaGlzIGJpdG1hcCBhcyBvcmlnaW5hdG9yLCBvbmx5IGtlZXAgaW4gc29mdHdhcmUgdXNlZCB0byBtYXJrIEFNUERVIGJpdCBpbiBUWFdJCisJVVNIT1JUCQlUWEF1dG9CQWJpdG1hcDsKKwlVU0hPUlQJCUJBRGVjbGluZUJpdG1hcDsKKwlVU0hPUlQJCUJBUmVjV2NpZEFycmF5W05VTV9PRl9USURdOwkvLyBUaGUgbWFwcGluZyB3Y2lkIG9mIHJlY2lwaWVudCBzZXNzaW9uLiBpZiBSWEJBYml0bWFwIGJpdCBpcyBtYXNrZWQKKwlVU0hPUlQJCUJBT3JpV2NpZEFycmF5W05VTV9PRl9USURdOyAvLyBUaGUgbWFwcGluZyB3Y2lkIG9mIG9yaWdpbmF0b3Igc2Vzc2lvbi4gaWYgVFhCQWJpdG1hcCBiaXQgaXMgbWFza2VkCisJVVNIT1JUCQlCQU9yaVNlcXVlbmNlW05VTV9PRl9USURdOyAvLyBUaGUgbWFwcGluZyB3Y2lkIG9mIG9yaWdpbmF0b3Igc2Vzc2lvbi4gaWYgVFhCQWJpdG1hcCBiaXQgaXMgbWFza2VkCisKKwkvLyA4MDIuMTFuIGZlYXR1cmVzLgorCVVDSEFSCQlNcGR1RGVuc2l0eTsKKwlVQ0hBUgkJTWF4UkFtcGR1RmFjdG9yOworCVVDSEFSCQlBTXNkdVNpemU7CisJVUNIQVIJCU1tcHNNb2RlOwkvLyBNSU1PIHBvd2VyIHNhdmUgbW9yZS4KKworCUhUX0NBUEFCSUxJVFlfSUUJCUhUQ2FwYWJpbGl0eTsKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlVQ0hBUgkJQlNTMjA0MENvZXhpc3RlbmNlTWdtdFN1cHBvcnQ7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJQk9PTEVBTgkJYkF1dG9UeFJhdGVTd2l0Y2g7CisKKwlVQ0hBUiAgICAgICBSYXRlTGVuOworCXN0cnVjdCBfTUFDX1RBQkxFX0VOVFJZICpwTmV4dDsKKyAgICBVU0hPUlQgICAgICBUeFNlcVtOVU1fT0ZfVElEXTsKKwlVU0hPUlQJCU5vblFvc0RhdGFTZXE7CisKKwlSU1NJX1NBTVBMRQlSc3NpU2FtcGxlOworCisJVUlOVDMyCQkJVFhNQ1NFeHBlY3RlZFsxNl07CisJVUlOVDMyCQkJVFhNQ1NTdWNjZXNzZnVsWzE2XTsKKwlVSU5UMzIJCQlUWE1DU0ZhaWxlZFsxNl07CisJVUlOVDMyCQkJVFhNQ1NBdXRvRmFsbEJhY2tbMTZdWzE2XTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBMYXN0QmVhY29uUnhUaW1lOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfSBNQUNfVEFCTEVfRU5UUlksICpQTUFDX1RBQkxFX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfTUFDX1RBQkxFIHsKKwlVU0hPUlQJCQlTaXplOworCU1BQ19UQUJMRV9FTlRSWSAqSGFzaFtIQVNIX1RBQkxFX1NJWkVdOworCU1BQ19UQUJMRV9FTlRSWSBDb250ZW50W01BWF9MRU5fT0ZfTUFDX1RBQkxFXTsKKwlRVUVVRV9IRUFERVIgICAgTWNhc3RQc1F1ZXVlOworCVVMT05HICAgICAgICAgICBQc1FJZGxlQ291bnQ7CisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uSW5Qc207CisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uQmFkQXRoZXJvczsJLy8gQ2hlY2sgaWYgYW55IFN0YXRpb24gaXMgYXRoZXJvcyA4MDIuMTFuIENoaXAuICBXZSBuZWVkIHRvIHVzZSBSVFMvQ1RTIHdpdGggQXRoZXJvcyA4MDIsLjExbiBjaGlwLgorCUJPT0xFQU4JCQlmQW55VHhPUEZvcmNlRGlzYWJsZTsJLy8gQ2hlY2sgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGRpc2FibGUgQkUgVHhPUAorCUJPT0xFQU4JCQlmQWxsU3RhdGlvbkFzUmFsaW5rOyAJLy8gQ2hlY2sgaWYgYWxsIHN0YXRpb25zIGFyZSByYWxpbmstY2hpcHNldAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJPT0xFQU4gICAgICAgICBmQW55U3RhdGlvbklzTGVnYWN5OwkvLyBDaGVjayBpZiBJIHVzZSBsZWdhY3kgcmF0ZSB0byB0cmFuc21pdCB0byBteSBCU1MgU3RhdGlvbi8KKwlCT09MRUFOICAgICAgICAgZkFueVN0YXRpb25Ob25HRjsJCS8vIENoZWNrIGlmIGFueSBTdGF0aW9uIGNhbid0IHN1cHBvcnQgR0YuCisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uMjBPbmx5OwkJLy8gQ2hlY2sgaWYgYW55IFN0YXRpb24gY2FuJ3Qgc3VwcG9ydCBHRi4KKwlCT09MRUFOCQkJZkFueVN0YXRpb25NSU1PUFNEeW5hbWljOyAvLyBDaGVjayBpZiBhbnkgU3RhdGlvbiBpcyBNSU1PIER5bmFtaWMKKwlCT09MRUFOICAgICAgICAgZkFueUJBU2Vzc2lvbjsgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBCQSBzZXNzaW9uLiAgRm9yY2UgdHVybiBvbiBSVFMvQ1RTCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9IE1BQ19UQUJMRSwgKlBNQUNfVEFCTEU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNkZWZpbmUgSVNfSFRfU1RBKF9wTWFjRW50cnkpCVwKKwkoX3BNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKworI2RlZmluZSBJU19IVF9SQVRFKF9wTWFjRW50cnkpCVwKKwkoX3BNYWNFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKworI2RlZmluZSBQRUVSX0lTX0hUX1JBVEUoX3BNYWNFbnRyeSkJXAorCShfcE1hY0VudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCit0eXBlZGVmIHN0cnVjdCBfV0RTX0VOVFJZIHsKKwlCT09MRUFOICAgICAgICAgVmFsaWQ7CisJVUNIQVIgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKwlVTE9ORyAgICAgICAgICAgTm9EYXRhSWRsZUNvdW50OworCXN0cnVjdCBfV0RTX0VOVFJZICpwTmV4dDsKK30gV0RTX0VOVFJZLCAqUFdEU19FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgIF9XRFNfVEFCTEVfRU5UUlkgeworCVVTSE9SVAkJCVNpemU7CisJVUNIQVIgICAgICAgICAgIFdkc0FkZHJbTUFDX0FERFJfTEVOXTsKKwlXRFNfRU5UUlkgICAgICAgKkhhc2hbSEFTSF9UQUJMRV9TSVpFXTsKKwlXRFNfRU5UUlkgICAgICAgQ29udGVudFtNQVhfTEVOX09GX01BQ19UQUJMRV07CisJVUNIQVIgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGU7CisJVUNIQVIgICAgICAgICAgIEN1cnJUeFJhdGU7CisJVVNIT1JUICAgICAgICAgIFR4UXVhbGl0eVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVVNIT1JUICAgICAgICAgIE9uZVNlY1R4T2tDb3VudDsKKwlVU0hPUlQgICAgICAgICAgT25lU2VjVHhSZXRyeU9rQ291bnQ7CisJVVNIT1JUICAgICAgICAgIE9uZVNlY1R4RmFpbENvdW50OworCVVMT05HICAgICAgICAgICBDdXJyVHhSYXRlU3RhYmxlVGltZTsgLy8gIyBvZiBzZWNvbmQgaW4gY3VycmVudCBUWCByYXRlCisJVUNIQVIgICAgICAgICAgIFR4UmF0ZVVwUGVuYWx0eTsgICAgICAvLyBleHRyYSAjIG9mIHNlY29uZCBwZW5hbHR5IGR1ZSB0byBsYXN0IHVuc3RhYmxlIGNvbmRpdGlvbgorfSBXRFNfVEFCTEVfRU5UUlksICpQV0RTX1RBQkxFX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX1dEU19FTlRSWSB7CisJUE5FVF9ERVYJCQlkZXY7CisJVUNIQVIJCQkJVmFsaWQ7CisJVUNIQVIJCQkJUGh5TW9kZTsKKwlVQ0hBUgkJCQlQZWVyV2RzQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJCU1hY1RhYk1hdGNoV0NJRDsJLy8gQVNJQworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgIFdlcFN0YXR1czsKKwlVQ0hBUgkJCQkJS2V5SWR4OworCUNJUEhFUl9LRVkgICAgICAgICAgCVdkc0tleTsKKwlIVFRSQU5TTUlUX1NFVFRJTkcJCQkJSFRQaHlNb2RlLCBNYXhIVFBoeU1vZGUsIE1pbkhUUGh5TW9kZTsKKwlSVF9IVF9QSFlfSU5GTwkJCQkJRGVzaXJlZEh0UGh5SW5mbzsKKwlCT09MRUFOCQkJCQkJCWJBdXRvVHhSYXRlU3dpdGNoOworCURFU0lSRURfVFJBTlNNSVRfU0VUVElORyAgICAgICAJRGVzaXJlZFRyYW5zbWl0U2V0dGluZzsgLy8gRGVzaXJlZCB0cmFuc21pdCBzZXR0aW5nLgorfSBSVF84MDJfMTFfV0RTX0VOVFJZLCAqUFJUXzgwMl8xMV9XRFNfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IF9XRFNfVEFCTEUgeworCVVDSEFSICAgICAgICAgICAgICAgTW9kZTsKKwlVTE9ORyAgICAgICAgICAgICAgIFNpemU7CisJUlRfODAyXzExX1dEU19FTlRSWQlXZHNFbnRyeVtNQVhfV0RTX0VOVFJZXTsKK30gV0RTX1RBQkxFLCAqUFdEU19UQUJMRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FQQ0xJX1NUUlVDVCB7CisJUE5FVF9ERVYJCQkJZGV2OworI2lmZGVmIFJUTDg2NVhfU09DCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgbXlsaW5raWQ7CisjZW5kaWYKKwlCT09MRUFOICAgICAgICAgICAgICAgICBFbmFibGU7CS8vIFNldCBpdCBhcyAxIGlmIHRoZSBhcGNsaSBpbnRlcmZhY2Ugd2FzIGNvbmZpZ3VyZWQgdG8gIjEiICBvciBieSBpd3ByaXYgY21kICJBcENsaUVuYWJsZSIKKwlCT09MRUFOICAgICAgICAgICAgICAgICBWYWxpZDsJLy8gU2V0IGl0IGFzIDEgaWYgdGhlIGFwY2xpIGludGVyZmFjZSBhc3NvY2lhdGVkIHN1Y2Nlc3MgdG8gcmVtb3RlIEFQLgorCVVDSEFSCQkJCQlNYWNUYWJXQ0lEOwkvL1dDSUQgdmFsdWUsIHdoaWNoIHBvaW50IHRvIHRoZSBlbnRyeSBvZiBBU0lDIE1hYyB0YWJsZS4KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBTc2lkTGVuOworCUNIQVIgICAgICAgICAgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKworCVVDSEFSICAgICAgICAgICAgICAgICAgIENmZ1NzaWRMZW47CisJQ0hBUiAgICAgICAgICAgICAgICAgICAgQ2ZnU3NpZFtNQVhfTEVOX09GX1NTSURdOworCVVDSEFSICAgICAgICAgICAgICAgICAgIENmZ0FwQ2xpQnNzaWRbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDdXJyZW50QWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdOworCisJVUxPTkcgICAgICAgICAgICAgICAgICAgQXBDbGlSY3ZCZWFjb25UaW1lOworCisJVUxPTkcgICAgICAgICAgICAgICAgICAgQ3RybEN1cnJTdGF0ZTsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBTeW5jQ3VyclN0YXRlOworCVVMT05HICAgICAgICAgICAgICAgICAgIEF1dGhDdXJyU3RhdGU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQXNzb2NDdXJyU3RhdGU7CisJVUxPTkcJCQkJCVdwYVBza0N1cnJTdGF0ZTsKKworCVVTSE9SVCAgICAgICAgICAgICAgICAgIEF1dGhSZXFDbnQ7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgQXNzb2NSZXFDbnQ7CisKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBDbGllbnRTdGF0dXNGbGFnczsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBNcGR1RGVuc2l0eTsKKworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOyAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkCisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCisJLy8gQWRkIHRvIHN1cHBvcnQgZGlmZmVyZW50IGNpcGhlciBzdWl0ZSBmb3IgV1BBMi9XUEEgbW9kZQorCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCQlHcm91cENpcGhlcjsJCS8vIE11bHRpY2FzdCBjaXBoZXIgc3VpdGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJUGFpckNpcGhlcjsJCQkvLyBVbmljYXN0IGNpcGhlciBzdWl0ZQorCUJPT0xFQU4JCQkJCQkJCWJNaXhDaXBoZXI7CQkJLy8gSW5kaWNhdGUgY3VycmVudCBQYWlyICYgR3JvdXAgdXNlIGRpZmZlcmVudCBjaXBoZXIgc3VpdGVzCisJVVNIT1JUCQkJCQkJCQlSc25DYXBhYmlsaXR5OworCisJVUNIQVIJCVBTS1sxMDBdOwkJCQkvLyByZXNlcnZlIFBTSyBrZXkgbWF0ZXJpYWwKKwlVQ0hBUiAgICAgICBQU0tMZW47CisJVUNIQVIgICAgICAgUE1LWzMyXTsgICAgICAgICAgICAgICAgLy8gV1BBIFBTSyBtb2RlIFBNSworCS8vVUNIQVIgICAgICAgUFRLWzY0XTsgICAgICAgICAgICAgICAgLy8gV1BBIFBTSyBtb2RlIFBUSworCVVDSEFSCQlHVEtbMzJdOwkJCQkvLyBHVEsgZnJvbSBhdXRoZW50aWNhdG9yCisKKwkvL0NJUEhFUl9LRVkJCVBhaXJ3aXNlS2V5OworCUNJUEhFUl9LRVkgICAgICBTaGFyZWRLZXlbU0hBUkVfS0VZX05VTV07CisJVUNIQVIgICAgICAgICAgIERlZmF1bHRLZXlJZDsKKworCS8vIFdQQSA4MDIuMXggcG9ydCBjb250cm9sLCBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCwgV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVECisJLy9VQ0hBUiAgICAgICBQb3J0U2VjdXJlZDsKKworCS8vIHN0b3JlIFJTTl9JRSBidWlsdCBieSBkcml2ZXIKKwlVQ0hBUgkJUlNOX0lFW01BWF9MRU5fT0ZfUlNOSUVdOyAgLy8gVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgY29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwlVQ0hBUgkJUlNOSUVfTGVuOworCisJLy8gRm9yIFdQQSBjb3VudGVybWVhc3VyZXMKKwlVTE9ORyAgICAgICBMYXN0TWljRXJyb3JUaW1lOyAgIC8vIHJlY29yZCBsYXN0IE1JQyBlcnJvciB0aW1lCisJLy9VTE9ORyAgICAgICBNaWNFcnJDbnQ7ICAgICAgICAgIC8vIFNob3VsZCBiZSAwLCAxLCAyLCB0aGVuIHJlc2V0IHRvIHplcm8gKGFmdGVyIGRpc2Fzc29pY2lhdGlvbikuCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgYkJsb2NrQXNzb2M7IC8vIEJsb2NrIGFzc29jaWF0ZSBhdHRlbXB0IGZvciA2MCBzZWNvbmRzIGFmdGVyIGNvdW50ZXIgbWVhc3VyZSBvY2N1cnJlZC4KKworCS8vIEZvciBXUEEtUFNLIHN1cHBsaWNhbnQgc3RhdGUKKwkvL1dQQV9TVEFURSAgIAlXcGFTdGF0ZTsgICAgICAgICAgIC8vIERlZmF1bHQgaXMgU1NfTk9UVVNFCisJLy9VQ0hBUiAgICAgICAJUmVwbGF5Q291bnRlcls4XTsKKwkvL1VDSEFSICAgICAgIAlBTm9uY2VbMzJdOyAgICAgICAgIC8vIEFOb25jZSBmb3IgV1BBLVBTSyBmcm9tIGF1dGhlbnRpY2F0b3IKKwlVQ0hBUiAgICAgICAJU05vbmNlWzMyXTsgICAgICAgICAvLyBTTm9uY2UgZm9yIFdQQS1QU0sKKwlVQ0hBUgkJCUdOb25jZVszMl07CQkJLy8gR05vbmNlIGZvciBXUEEtUFNLIGZyb20gYXV0aGVudGljYXRvcgorCisJSFRUUkFOU01JVF9TRVRUSU5HCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7CisJUlRfSFRfUEhZX0lORk8JCQkJCURlc2lyZWRIdFBoeUluZm87CisJQk9PTEVBTgkJCQkJCQliQXV0b1R4UmF0ZVN3aXRjaDsKKwlERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgICAgICAgCURlc2lyZWRUcmFuc21pdFNldHRpbmc7IC8vIERlc2lyZWQgdHJhbnNtaXQgc2V0dGluZy4KK30gQVBDTElfU1RSVUNULCAqUEFQQ0xJX1NUUlVDVDsKKworLy8gLS0tLS0tLS0tLS0gZW5kIG9mIEFQIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmZGVmIEJMT0NLX05FVF9JRgordHlwZWRlZiBzdHJ1Y3QgX0JMT0NLX1FVRVVFX0VOVFJZCit7CisJQk9PTEVBTiBTd1R4UXVldWVCbG9ja0ZsYWc7CisJTElTVF9IRUFERVIgTmV0SWZMaXN0OworfSBCTE9DS19RVUVVRV9FTlRSWSwgKlBCTE9DS19RVUVVRV9FTlRSWTsKKyNlbmRpZiAvLyBCTE9DS19ORVRfSUYgLy8KKworCitzdHJ1Y3Qgd2lmaWNvbmYKK3sKKwlCT09MRUFOCWJTaG9ydEdJOworCUJPT0xFQU4gYkdyZWVuRmllbGQ7Cit9OworCisKKworCit0eXBlZGVmIHN0cnVjdCBfSU5GX1BDSV9DT05GSUcKK3sKKwlQVUNIQVIgICAgICAgICAgICAgICAgICBDU1JCYXNlQWRkcmVzczsgICAgIC8vIFBDSSBNTUlPIEJhc2UgQWRkcmVzcywgYWxsIGFjY2VzcyB3aWxsIHVzZQorfUlORl9QQ0lfQ09ORklHOworCit0eXBlZGVmIHN0cnVjdCBfSU5GX1VTQl9DT05GSUcKK3sKKwlVSU5UICAgICAgICAgICAgICAgIEJ1bGtJbkVwQWRkcjsJCS8vIGJ1bGstaW4gZW5kcG9pbnQgYWRkcmVzcworCVVJTlQgICAgICAgICAgICAgICAgQnVsa091dEVwQWRkcls2XTsJLy8gYnVsay1vdXQgZW5kcG9pbnQgYWRkcmVzcworCit9SU5GX1VTQl9DT05GSUc7CisKKyNpZmRlZiBJS0FOT1NfVlhfMVgwCisJdHlwZWRlZiB2b2lkICgqSWthbm9zV2xhblR4Q2JGdW5jUCkodm9pZCAqLCB2b2lkICopOworCisJc3RydWN0IElLQU5PU19UWF9JTkZPCisJeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCQlJa2Fub3NXbGFuVHhDYkZ1bmNQICpmcDsKKwl9OworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworI2lmZGVmIE5JTlRFTkRPX0FQCit0eXBlZGVmIHN0cnVjdCBfTklORE9fQ1RSTF9CTE9DSyB7CisKKwlSVF9OSU5URU5ET19UQUJMRQlEU19UQUJMRTsKKworI2lmZGVmIENISVAyNVhYCisJc3BpbmxvY2tfdAkJCU5JTlRFTkRPX1RBQkxFX0xvY2s7CisjZWxzZQorCU5ESVNfU1BJTl9MT0NLCQlOSU5URU5ET19UQUJMRV9Mb2NrOworI2VuZGlmIC8vIENISVAyNVhYIC8vCisKKwlVQ0hBUgkJCQlOSU5URU5ET19VUF9CVUZGRVJbNTEyXTsKKwlVQ0hBUgkJCQlMb2NhbF9LZXlJZHg7CisJQ0lQSEVSX0tFWQkJCUxvY2FsX1NoYXJlZEtleTsKKwlVQ0hBUgkJCQlMb2NhbF9iSGlkZVNzaWQ7CisJVUNIQVIJCQkJTG9jYWxfQXV0aE1vZGU7CisJVUNIQVIJCQkJTG9jYWxfV2VwU3RhdHVzOworCVVTSE9SVAkJCQlMb2NhbF9DYXBhYmlsaXR5SW5mbzsKK30gTklORE9fQ1RSTF9CTE9DSzsKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKyNkZWZpbmUgRElBR05PU0VfVElNRQkxMCAgIC8vIDEwIHNlYwordHlwZWRlZiBzdHJ1Y3QgX1J0bXBEaWFnU3RyY3V0XworewkvLyBEaWFnbm9zaXMgUmVsYXRlZCBlbGVtZW50CisJdW5zaWduZWQgY2hhcgkJaW5pdGVkOworCXVuc2lnbmVkIGNoYXIgCXFJZHg7CisJdW5zaWduZWQgY2hhciAJQXJyYXlTdGFydElkeDsKKwl1bnNpZ25lZCBjaGFyCQlBcnJheUN1cklkeDsKKwkvLyBUeCBSZWxhdGVkIENvdW50CisJVVNIT1JUCQkJVHhEYXRhQ250W0RJQUdOT1NFX1RJTUVdOworCVVTSE9SVAkJCVR4RmFpbENudFtESUFHTk9TRV9USU1FXTsKKy8vCVVTSE9SVAkJCVR4RGVzY0NudFtESUFHTk9TRV9USU1FXVsxNl07CQkvLyBUeERlc2MgcXVldWUgbGVuZ3RoIGluIHNjYWxlIG9mIDB+MTQsID49MTUKKwlVU0hPUlQJCQlUeERlc2NDbnRbRElBR05PU0VfVElNRV1bMjRdOyAvLyAzKjMJLy8gVHhEZXNjIHF1ZXVlIGxlbmd0aCBpbiBzY2FsZSBvZiAwfjE0LCA+PTE1CisvLwlVU0hPUlQJCQlUeE1jc0NudFtESUFHTk9TRV9USU1FXVsxNl07CQkJLy8gVHhEYXRlIE1DUyBDb3VudCBpbiByYW5nZSBmcm9tIDAgdG8gMTUsIHN0ZXAgaW4gMS4KKwlVU0hPUlQJCQlUeE1jc0NudFtESUFHTk9TRV9USU1FXVsyNF07IC8vIDMqMworCVVTSE9SVAkJCVR4U1dRdWVDbnRbRElBR05PU0VfVElNRV1bOV07CQkvLyBUeFN3UXVldWUgbGVuZ3RoIGluIHNjYWxlIG9mIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsID49OAorCisJVVNIT1JUCQkJVHhBZ2dDbnRbRElBR05PU0VfVElNRV07CisJVVNIT1JUCQkJVHhOb25BZ2dDbnRbRElBR05PU0VfVElNRV07CisvLwlVU0hPUlQJCQlUeEFNUERVQ250W0RJQUdOT1NFX1RJTUVdWzE2XTsJCS8vIDEwIHNlYywgVHhETUEgQVBNRFUgQWdncmVnYXRpb24gY291bnQgaW4gcmFuZ2UgZnJvbSAwIHRvIDE1LCBpbiBzZXRwIG9mIDEuCisJVVNIT1JUCQkJVHhBTVBEVUNudFtESUFHTk9TRV9USU1FXVsyNF07IC8vIDMqMyAvLyAxMCBzZWMsIFR4RE1BIEFQTURVIEFnZ3JlZ2F0aW9uIGNvdW50IGluIHJhbmdlIGZyb20gMCB0byAxNSwgaW4gc2V0cCBvZiAxLgorCVVTSE9SVAkJCVR4UmFsaW5rQ250W0RJQUdOT1NFX1RJTUVdOwkJCS8vIFR4UmFsaW5rIEFnZ3JlZ2F0aW9uIENvdW50IGluIDEgc2VjIHNjYWxlLgorCVVTSE9SVAkJCVR4QU1TRFVDbnRbRElBR05PU0VfVElNRV07CQkJLy8gVHhBTVNVRCBBZ2dyZWdhdGlvbiBDb3VudCBpbiAxIHNlYyBzY2FsZS4KKworCS8vIFJ4IFJlbGF0ZWQgQ291bnQKKwlVU0hPUlQJCQlSeERhdGFDbnRbRElBR05PU0VfVElNRV07CQkJLy8gUnggVG90YWwgRGF0YSBjb3VudC4KKwlVU0hPUlQJCQlSeENyY0VyckNudFtESUFHTk9TRV9USU1FXTsKKy8vCVVTSE9SVAkJCVJ4TWNzQ250W0RJQUdOT1NFX1RJTUVdWzE2XTsJCS8vIFJ4IE1DUyBDb3VudCBpbiByYW5nZSBmcm9tIDAgdG8gMTUsIHN0ZXAgaW4gMS4KKwlVU0hPUlQJCQlSeE1jc0NudFtESUFHTk9TRV9USU1FXVsyNF07IC8vIDMqMworfVJ0bXBEaWFnU3RydWN0OworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisKKy8vCisvLyAgVGhlIG1pbmlwb3J0IGFkYXB0ZXIgc3RydWN0dXJlCisvLwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfQURBUFRFUgoreworCVBWT0lECQkJCQlPU19Db29raWU7CS8vIHNhdmUgc3BlY2lmaWMgc3RydWN0dXJlIHJlbGF0aXZlIHRvIE9TCisJUE5FVF9ERVYJCQkJbmV0X2RldjsKKwlVTE9ORwkJCQkJVmlydHVhbElmQ250OworCisKKworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIGlycV9sb2NrOworCVVDSEFSICAgICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZDsKKworI2lmZGVmIFJUMjg3MAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBVU0IgcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJCSpjb25maWc7CisJVUlOVAkJCQkJCQkJQnVsa0luRXBBZGRyOwkJLy8gYnVsay1pbiBlbmRwb2ludCBhZGRyZXNzCisJVUlOVAkJCQkJCQkJQnVsa091dEVwQWRkcls2XTsJLy8gYnVsay1vdXQgZW5kcG9pbnQgYWRkcmVzcworCisJVUlOVAkJCQkJCQkJTnVtYmVyT2ZQaXBlczsKKwlVU0hPUlQJCQkJCQkJCUJ1bGtPdXRNYXhQYWNrZXRTaXplOworCVVTSE9SVAkJCQkJCQkJQnVsa0luTWF4UGFja2V0U2l6ZTsKKworCS8vPT09PT09Q29udHJvbCBGbGFncworCUxPTkcgICAgICAgICAgICAgICAgICAgIAlQZW5kaW5nSW9Db3VudDsKKwlVTE9ORwkJCQkJCUJ1bGtGbGFnczsKKwlCT09MRUFOICAgICAgICAgICAgICAgICAgICAgYlVzYlR4QnVsa0FnZ3JlOwkvLyBGbGFncyBmb3IgYnVsayBvdXQgZGF0YSBwcmlvcml0eQorCisKKwkvLz09PT09PVRpbWVyIFRocmVhZAorCVJUMjg3MF9USU1FUl9RVUVVRQkJVGltZXJROworCU5ESVNfU1BJTl9MT0NLCQkJVGltZXJRTG9jazsKKworCisJLy89PT09PT1DbWQgVGhyZWFkCisJQ21kUQkJCQkJQ21kUTsKKwlORElTX1NQSU5fTE9DSwkJCUNtZFFMb2NrOwkJCQkvLyBDbWRRTG9jayBzcGlubG9jaworCisJQk9PTEVBTgkJCQkJVGltZXJGdW5jX2tpbGw7CisJQk9PTEVBTgkJCQkJbWxtZV9raWxsOworCisKKwkvLz09PT09PVNlbWFwaG9yZXMgKGV2ZW50KQorCXN0cnVjdCBzZW1hcGhvcmUJCQltbG1lX3NlbWFwaG9yZTsJCQkvKiB0byBzbGVlcCB0aHJlYWQgb24JKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCQkJUlRVU0JDbWRfc2VtYXBob3JlOwkJLyogdG8gc2xlZXAgdGhyZWFkIG9uCSovCisJc3RydWN0IHNlbWFwaG9yZQkJCVJUVVNCVGltZXJfc2VtYXBob3JlOworI2lmZGVmIElORl9BTUFaT05fU0UKKwlzdHJ1Y3Qgc2VtYXBob3JlCQkJVXNiVmVuZG9yUmVxX3NlbWFwaG9yZTsKKwlQVk9JRAkJCQkJCVVzYlZlbmRvclJlcUJ1ZjsKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJc3RydWN0IGNvbXBsZXRpb24JCQlUaW1lclFDb21wbGV0ZTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJCW1sbWVDb21wbGV0ZTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJCUNtZFFDb21wbGV0ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJCSp3YWl0OworCisJLy89PT09PT1Mb2NrIGZvciAyODcwIEFURQorI2lmZGVmIFJBTElOS19BVEUKKwlORElTX1NQSU5fTE9DSwkJCUdlbmVyaWNMb2NrOwkJLy8gQVRFIFR4L1J4IGdlbmVyaWMgc3BpbmxvY2sKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogICAgICBCb3RoIFBDSS9VU0IgcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgVHggcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCUJPT0xFQU4gICAgICAgICAgICAgICAgIERlUXVldWVSdW5uaW5nW05VTV9PRl9UWF9SSU5HXTsgIC8vIGZvciBlbnN1cmluZyBSVFVTQkRlUXVldWVQYWNrZXQgZ2V0IGNhbGwgb25jZQorCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIERlUXVldWVMb2NrW05VTV9PRl9UWF9SSU5HXTsKKworI2lmZGVmIFJUMjg3MAorCS8vIERhdGEgcmVsYXRlZCBjb250ZXh0IGFuZCBBQyBzcGVjaWZpZWQsIDQgQUMgc3VwcG9ydGVkCisJTkRJU19TUElOX0xPQ0sJCQlCdWxrT3V0TG9ja1s2XTsJCQkvLyBCdWxrT3V0IHNwaW5sb2NrIGZvciA0IEFDcworCU5ESVNfU1BJTl9MT0NLCQkJTUxNRUJ1bGtPdXRMb2NrOwkvLyBNTE1FIEJ1bGtPdXQgbG9jaworCisJSFRfVFhfQ09OVEVYVAkJCVR4Q29udGV4dFtOVU1fT0ZfVFhfUklOR107CisJTkRJU19TUElOX0xPQ0sJCQlUeENvbnRleHRRdWV1ZUxvY2tbTlVNX09GX1RYX1JJTkddOwkJLy8gVHhDb250ZXh0UXVldWUgc3BpbmxvY2sKKworCS8vIDQgc2V0cyBvZiBCdWxrIE91dCBpbmRleCBhbmQgcGVuZGluZyBmbGFnCisJVUNIQVIJCQkJCU5leHRCdWxrT3V0SW5kZXhbNF07CS8vIG9ubHkgdXNlZCBmb3IgNCBFRENBIGJ1bGtvdXQgcGlwZQorCisJQk9PTEVBTgkJCQkJQnVsa091dFBlbmRpbmdbNl07CS8vIHVzZWQgZm9yIHRvdGFsIDYgYnVsa291dCBwaXBlCisJVUNIQVIJCQkJCWJ1bGtSZXNldFBpcGVpZDsKKwlCT09MRUFOCQkJCQlNZ210QnVsa1BlbmRpbmc7CisJVUxPTkcJCQkJCWJ1bGtSZXNldFJlcVs2XTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIHJlc291cmNlIGZvciBzb2Z0d2FyZSBiYWNrbG9nIHF1ZXVlcworCVFVRVVFX0hFQURFUiAgICAgICAgICAgIFR4U3dRdWV1ZVtOVU1fT0ZfVFhfUklOR107ICAvLyA0IEFDICsgMSBIQ0NBCisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgVHhTd1F1ZXVlTG9ja1tOVU1fT0ZfVFhfUklOR107CS8vIFR4U3dRdWV1ZSBzcGlubG9jaworCisJUlRNUF9ETUFCVUYgICAgICAgICAgICAgTWdtdERlc2NSaW5nOyAgICAgICAgICAgICAgIAkvLyBTaGFyZWQgbWVtb3J5IGZvciBNR01UIGRlc2NyaXB0b3JzCisJUlRNUF9NR01UX1JJTkcgICAgICAgICAgTWdtdFJpbmc7CisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgTWdtdFJpbmdMb2NrOyAgICAgICAgICAgICAgIAkvLyBQcmlvIFJpbmcgc3BpbmxvY2sKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgIFJ4IHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZkZWYgUlQyODcwCisJUlhfQ09OVEVYVAkJCQlSeENvbnRleHRbUlhfUklOR19TSVpFXTsgIC8vIDEgZm9yIHJlZHVuZGFudCBtdWx0aXBsZSBJUlAgYnVsayBpbi4KKwlORElTX1NQSU5fTE9DSwkJCUJ1bGtJbkxvY2s7CQkJCS8vIEJ1bGtJbiBzcGlubG9jayBmb3IgNCBBQ3MKKwlVQ0hBUgkJCQkJUGVuZGluZ1J4OwkJCQkvLyBUaGUgTWF4aW1hIHBlbmRpbmcgUnggdmFsdWUgc2hvdWxkIGJlIAlSWF9SSU5HX1NJWkUuCisJVUNIQVIJCQkJCU5leHRSeEJ1bGtJbkluZGV4OwkJLy8gSW5kaWNhdGUgdGhlIGN1cnJlbnQgUnhDb250ZXh0IEluZGV4IHdoaWNoIGhvbGQgYnkgSG9zdCBjb250cm9sbGVyLgorCVVDSEFSCQkJCQlOZXh0UnhCdWxrSW5SZWFkSW5kZXg7CS8vIEluZGljYXRlIHRoZSBjdXJyZW50IFJ4Q29udGV4dCBJbmRleCB3aGljaCBkcml2ZXIgY2FuIHJlYWQgJiBwcm9jZXNzIGl0LgorCVVMT05HCQkJCQlOZXh0UnhCdWxrSW5Qb3NpdGlvbjsgICAvLyBXYW50IHRvIGNvbnRhdGVuYXRlIDIgVVJCIGJ1ZmZlciB3aGlsZSAxc3QgaXMgYnVsa2luIGZhaWxlZCBVUkIuIFRoaXMgUG9zaXRpb24gaXMgMXN0IFVSQiBUcmFuc2Zlckxlbmd0aC4KKwlVTE9ORwkJCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGg7CS8vIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgYnVmZmVyCisJVUxPTkcJCQkJCVJlYWRQb3NpdGlvbjsJCQkvLyBjdXJyZW50IHJlYWQgcG9zaXRpb24gaW4gYSBwYWNrZXQgYnVmZmVyCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBBU0lDIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCVVJTlQzMiAgICAgICAgICAgICAgIAlNQUNWZXJzaW9uOyAgICAgIAkvLyBNQUMgdmVyc2lvbi4gUmVjb3JkIHJ0Mjg2MEMoMHgyODYwMDEwMCkgb3IgcnQyODYwRCAoMHgyODYwMDEwMSkuLgorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gRTJQUk9NCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVUxPTkcgICAgICAgICAgICAgICAgICAgRWVwcm9tVmVyc2lvbjsgICAgICAgICAgLy8gYnl0ZSAwOiB2ZXJzaW9uLCBieXRlIDE6IHJldmlzaW9uLCBieXRlIDJ+MzogdW51c2VkCisJVUNIQVIgICAgICAgICAgICAgICAgICAgRUVQUk9NQWRkcmVzc051bTsgICAgICAgLy8gOTNjNDY9NiAgOTNjNjY9OAorCVVTSE9SVCAgICAgICAgICAgICAgICAgIEVFUFJPTURlZmF1bHRWYWx1ZVtOVU1fRUVQUk9NX0JCUF9QQVJNU107CisJQk9PTEVBTiAgICAgICAgICAgICAgICAgRWVwcm9tQWNjZXNzOworCVVDSEFSICAgICAgICAgICAgICAgICAgIEVGdXNlVGFnOworCVVMT05HICAgICAgICAgICAgICAgICAgIEZpcm13YXJlVmVyc2lvbjsgICAgICAgIC8vIGJ5dGUgMDogTWlub3IgdmVyc2lvbiwgYnl0ZSAxOiBNYWpvciB2ZXJzaW9uLCBvdGhlcndpc2UgdW51c2VkLgorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gQkJQIENvbnRyb2wKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBCYnBXcml0ZUxhdGNoWzE0MF07ICAgICAvLyByZWNvcmQgbGFzdCBCQlAgcmVnaXN0ZXIgdmFsdWUgd3JpdHRlbiB2aWEgQkJQX0lPX1dSSVRFL0JCUF9JT19XUklURV9WWV9SRUdfSUQKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBCYnBSc3NpVG9EYm1EZWx0YTsKKwlCQlBfUjY2X1RVTklORyAgICAgICAgICBCYnBUdW5pbmc7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gUkZJQyBjb250cm9sCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVDSEFSICAgICAgICAgICAgICAgICAgIFJmSWNUeXBlOyAgICAgICAvLyBSRklDX3h4eAorCVVMT05HICAgICAgICAgICAgICAgICAgIFJmRnJlcU9mZnNldDsgICAvLyBGcmVxdWVuY3kgb2Zmc2V0IGZvciBjaGFubmVsIHN3aXRjaGluZworCVJUTVBfUkZfUkVHUyAgICAgICAgICAgIExhdGNoUmZSZWdzOyAgICAvLyBsYXRjaCB0aCBsYXRlc3QgUkYgcHJvZ3JhbW1pbmcgdmFsdWUgc2luY2UgUkYgSUMgZG9lc24ndCBzdXBwb3J0IFJFQUQKKworCUVFUFJPTV9BTlRFTk5BX1NUUlVDICAgIEFudGVubmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIEFOdGVubmEgZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQgZm9yIGEgJiBnLiBXZSBuZWVkIHRvIHNhdmUgaXQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisJRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDICAgIE5pY0NvbmZpZzI7CisKKwkvLyBUaGlzIHNvZnQgUnggQW50ZW5uYSBEaXZlcnNpdHkgbWVjaGFuaXNtIGlzIHVzZWQgb25seSB3aGVuIHVzZXIgc2V0CisJLy8gUlggQW50ZW5uYSA9IERJVkVSU0lUWSBPTgorCVNPRlRfUlhfQU5UX0RJVkVSU0lUWSAgIFJ4QW50OworCisJVUNIQVIgICAgICAgICAgICAgICAgICAgUkZQcm9nU2VxOworCUNIQU5ORUxfVFhfUE9XRVIgICAgICAgIFR4UG93ZXJbTUFYX05VTV9PRl9DSEFOTkVMU107ICAgICAgIC8vIFN0b3JlIFR4IHBvd2VyIHZhbHVlIGZvciBhbGwgY2hhbm5lbHMuCisJQ0hBTk5FTF9UWF9QT1dFUiAgICAgICAgQ2hhbm5lbExpc3RbTUFYX05VTV9PRl9DSEFOTkVMU107ICAgLy8gbGlzdCBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzIGZvciBzaXRlIHN1cnZleQorCUNIQU5ORUxfMTFKX1RYX1BPV0VSICAgIFR4UG93ZXIxMUpbTUFYX05VTV9PRl8xMUpDSEFOTkVMU107ICAgICAgIC8vIDgwMi4xMWogY2hhbm5lbCBhbmQgYncKKwlDSEFOTkVMXzExSl9UWF9QT1dFUiAgICBDaGFubmVsTGlzdDExSltNQVhfTlVNX09GXzExSkNIQU5ORUxTXTsgICAvLyBsaXN0IGFsbCBzdXBwb3J0ZWQgY2hhbm5lbHMgZm9yIHNpdGUgc3VydmV5CisKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDaGFubmVsTGlzdE51bTsgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgY2hhbm5lbCBpbiBDaGFubmVsTGlzdFtdCisJVUNIQVIJCQkJCUJicDk0OworCUJPT0xFQU4JCQkJCUJicEZvckNDSzsKKwlVTE9ORwkJVHgyME1Qd3JDZmdBQmFuZFs1XTsKKwlVTE9ORwkJVHgyME1Qd3JDZmdHQmFuZFs1XTsKKwlVTE9ORwkJVHg0ME1Qd3JDZmdBQmFuZFs1XTsKKwlVTE9ORwkJVHg0ME1Qd3JDZmdHQmFuZFs1XTsKKworCUJPT0xFQU4gICAgIGJBdXRvVHhBZ2NBOyAgICAgICAgICAgICAgICAvLyBFbmFibGUgZHJpdmVyIGF1dG8gVHggQWdjIGNvbnRyb2wKKwlVQ0hBUgkgICAgVHNzaVJlZkE7CQkJCQkvLyBTdG9yZSBUc3NpIHJlZmVyZW5jZSB2YWx1ZSBhcyAyNSB0ZW1wZXJhdHVyZS4KKwlVQ0hBUgkgICAgVHNzaVBsdXNCb3VuZGFyeUFbNV07CQkvLyBUc3NpIGJvdW5kYXJ5IGZvciBpbmNyZWFzZSBUeCBwb3dlciB0byBjb21wZW5zYXRlLgorCVVDSEFSCSAgICBUc3NpTWludXNCb3VuZGFyeUFbNV07CQkvLyBUc3NpIGJvdW5kYXJ5IGZvciBkZWNyZWFzZSBUeCBwb3dlciB0byBjb21wZW5zYXRlLgorCVVDSEFSCSAgICBUeEFnY1N0ZXBBOwkJCQkJLy8gU3RvcmUgVHggVFNTSSBkZWx0YSBpbmNyZW1lbnQgLyBkZWNyZW1lbnQgdmFsdWUKKwlDSEFSCQlUeEFnY0NvbXBlbnNhdGVBOwkJCS8vIFN0b3JlIHRoZSBjb21wZW5zYXRpb24gKFR4QWdjU3RlcCAqIChpZHgtMSkpCisKKwlCT09MRUFOICAgICBiQXV0b1R4QWdjRzsgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGRyaXZlciBhdXRvIFR4IEFnYyBjb250cm9sCisJVUNIQVIJICAgIFRzc2lSZWZHOwkJCQkJLy8gU3RvcmUgVHNzaSByZWZlcmVuY2UgdmFsdWUgYXMgMjUgdGVtcGVyYXR1cmUuCisJVUNIQVIJICAgIFRzc2lQbHVzQm91bmRhcnlHWzVdOwkJLy8gVHNzaSBib3VuZGFyeSBmb3IgaW5jcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4KKwlVQ0hBUgkgICAgVHNzaU1pbnVzQm91bmRhcnlHWzVdOwkJLy8gVHNzaSBib3VuZGFyeSBmb3IgZGVjcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4KKwlVQ0hBUgkgICAgVHhBZ2NTdGVwRzsJCQkJCS8vIFN0b3JlIFR4IFRTU0kgZGVsdGEgaW5jcmVtZW50IC8gZGVjcmVtZW50IHZhbHVlCisJQ0hBUgkJVHhBZ2NDb21wZW5zYXRlRzsJCQkvLyBTdG9yZSB0aGUgY29tcGVuc2F0aW9uIChUeEFnY1N0ZXAgKiAoaWR4LTEpKQorCisJLy8rKytGb3IgUlQyODcwLCB0aGUgcGFyYW1ldGVyZXMgaXMgc3RhcnQgZnJvbSBCR1Jzc2lPZmZzZXQxIH4gQkdSc3NpT2Zmc2V0MworCUNIQVIJCUJHUnNzaU9mZnNldDA7CQkJCS8vIFN0b3JlIEIvRyBSU1NJIzAgT2Zmc2V0IHZhbHVlIG9uIEVFUFJPTSAweDQ2aAorCUNIQVIJCUJHUnNzaU9mZnNldDE7CQkJCS8vIFN0b3JlIEIvRyBSU1NJIzEgT2Zmc2V0IHZhbHVlCisJQ0hBUgkJQkdSc3NpT2Zmc2V0MjsJCQkJLy8gU3RvcmUgQi9HIFJTU0kjMiBPZmZzZXQgdmFsdWUKKwkvLy0tLQorCisJLy8rKytGb3IgUlQyODcwLCB0aGUgcGFyYW1ldGVyZXMgaXMgc3RhcnQgZnJvbSBBUnNzaU9mZnNldDEgfiBBUnNzaU9mZnNldDMKKwlDSEFSCQlBUnNzaU9mZnNldDA7CQkJCS8vIFN0b3JlIEEgUlNTSSMwIE9mZnNldCB2YWx1ZSBvbiBFRVBST00gMHg0QWgKKwlDSEFSCQlBUnNzaU9mZnNldDE7CQkJCS8vIFN0b3JlIEEgUlNTSSMxIE9mZnNldCB2YWx1ZQorCUNIQVIJCUFSc3NpT2Zmc2V0MjsJCQkJLy8gU3RvcmUgQSBSU1NJIzIgT2Zmc2V0IHZhbHVlCisJLy8tLS0KKworCUNIQVIJCUJMTkFHYWluOwkJCQkJLy8gU3RvcmUgQi9HIGV4dGVybmFsIExOQSMwIHZhbHVlIG9uIEVFUFJPTSAweDQ0aAorCUNIQVIJCUFMTkFHYWluMDsJCQkJCS8vIFN0b3JlIEEgZXh0ZXJuYWwgTE5BIzAgdmFsdWUgZm9yIGNoMzZ+NjQKKwlDSEFSCQlBTE5BR2FpbjE7CQkJCQkvLyBTdG9yZSBBIGV4dGVybmFsIExOQSMxIHZhbHVlIGZvciBjaDEwMH4xMjgKKwlDSEFSCQlBTE5BR2FpbjI7CQkJCQkvLyBTdG9yZSBBIGV4dGVybmFsIExOQSMyIHZhbHVlIGZvciBjaDEzMn4xNjUKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBMRUQgY29udHJvbAorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlNQ1VfTEVEQ1NfU1RSVUMJCUxlZENudGw7CisJVVNIT1JUCQkJCUxlZDE7CS8vIHJlYWQgZnJvbSBFRVBST00gMHgzYworCVVTSE9SVAkJCQlMZWQyOwkvLyBFRVBST00gMHgzZQorCVVTSE9SVAkJCQlMZWQzOwkvLyBFRVBST00gMHg0MAorCVVDSEFSCQkJCUxlZEluZGljYXRvclN0cmVndGg7CisJVUNIQVIJCQkJUnNzaVNpbmdhbHN0cmVuZ3RoT2ZmZXQ7CisgICAgQk9PTEVBTgkJCQliTGVkT25TY2FubmluZzsKKwlVQ0hBUgkJCQlMZWRTdGF0dXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgODAyLjExIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvLyBvdXRnb2luZyBCRUFDT04gZnJhbWUgYnVmZmVyIGFuZCBjb3JyZXNwb25kaW5nIFRYRAorCVRYV0lfU1RSVUMgICAgICAgICAgICAgIAlCZWFjb25UeFdJOworCVBVQ0hBUgkJCQkJCUJlYWNvbkJ1ZjsKKwlVU0hPUlQJCQkJCQlCZWFjb25PZmZzZXRbSFdfQkVBQ09OX01BWF9DT1VOVF07CisKKwkvLyBwcmUtYnVpbGQgUFMtUE9MTCBhbmQgTlVMTCBmcmFtZSB1cG9uIGxpbmsgdXAuIGZvciBlZmZpY2llbmN5IHB1cnBvc2UuCisJUFNQT0xMX0ZSQU1FICAgICAgICAgICAgCVBzUG9sbEZyYW1lOworCUhFQURFUl84MDJfMTEgICAgICAgICAgIAlOdWxsRnJhbWU7CisKKyNpZmRlZiBSVDI4NzAKKwlUWF9DT05URVhUCQkJCUJlYWNvbkNvbnRleHRbQkVBQ09OX1JJTkdfU0laRV07CisJVFhfQ09OVEVYVAkJCQlOdWxsQ29udGV4dDsKKwlUWF9DT05URVhUCQkJCVBzUG9sbENvbnRleHQ7CisJVFhfQ09OVEVYVAkJCQlSVFNDb250ZXh0OworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKworLy89PT09PT09PT1BUD09PT09PT09PT09CisKKworLy89PT09PT09U1RBPT09PT09PT09PT0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8qIE1vZGlmaWVkIGJ5IFd1IFhpLUt1biA0LzIxLzIwMDYgKi8KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNUQSBzcGVjaWZpYyBjb25maWd1cmF0aW9uICYgb3BlcmF0aW9uIHN0YXR1cworCS8vIHVzZWQgb25seSB3aGVuIHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNUQV9BRE1JTl9DT05GSUcgICAgICAgIFN0YUNmZzsgICAgICAgICAgIC8vIHVzZXIgZGVzaXJlZCBzZXR0aW5ncworCVNUQV9BQ1RJVkVfQ09ORklHICAgICAgIFN0YUFjdGl2ZTsgICAgICAgICAvLyB2YWxpZCBvbmx5IHdoZW4gQURIT0NfT04ocEFkKSB8fCBJTkZSQV9PTihwQWQpCisJQ0hBUiAgICAgICAgICAgICAgICAgICAgbmlja25hbWVbSVdfRVNTSURfTUFYX1NJWkUrMV07IC8vIG5pY2tuYW1lLCBvbmx5IHVzZWQgaW4gdGhlIGl3Y29uZmlnIGkvZgorCU5ESVNfTUVESUFfU1RBVEUgICAgICAgIFByZU1lZGlhU3RhdGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8vPT09PT09PUNvbW1vbj09PT09PT09PT09CisJLy8gT1AgbW9kZTogZWl0aGVyIEFQIG9yIFNUQQorCVVDSEFSICAgICAgICAgICAgICAgICAgIE9wTW9kZTsgICAgICAgICAgICAgICAgICAgICAvLyBPUE1PREVfU1RBLCBPUE1PREVfQVAKKworCU5ESVNfTUVESUFfU1RBVEUgICAgICAgIEluZGljYXRlTWVkaWFTdGF0ZTsJCQkvLyBCYXNlIG9uIEluZGljYXRpb24gc3RhdGUsIGRlZmF1bHQgaXMgTmRpc01lZGlhU3RhdGVEaXNDb25uZWN0ZWQKKworCisJLy8gTUFUIHJlbGF0ZWQgcGFyYW1ldGVycworCisJLy8gY29uZmlndXJhdGlvbjogcmVhZCBmcm9tIFJlZ2lzdHJ5ICYgRTJQUk9NCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgYkxvY2FsQWRtaW5NQUM7ICAgICAgICAgICAgIC8vIFVzZSB1c2VyIGNoYW5nZWQgTUFDCisJVUNIQVIgICAgICAgICAgICAgICAgICAgUGVybWFuZW50QWRkcmVzc1tNQUNfQUREUl9MRU5dOyAgICAvLyBGYWN0b3J5IGRlZmF1bHQgTUFDIGFkZHJlc3MKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDdXJyZW50QWRkcmVzc1tNQUNfQUREUl9MRU5dOyAgICAgIC8vIFVzZXIgY2hhbmdlZCBNQUMgYWRkcmVzcworCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gY29tbW9uIGNvbmZpZ3VyYXRpb24gdG8gYm90aCBPUE1PREVfU1RBIGFuZCBPUE1PREVfQVAKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlDT01NT05fQ09ORklHICAgICAgICAgICBDb21tb25DZmc7CisJTUxNRV9TVFJVQ1QgICAgICAgICAgICAgTWxtZTsKKworCS8vIEFQIG5lZWRzIHRob3NlIHZhaWFibGVzIGZvciBzaXRlIHN1cnZleSBmZWF0dXJlLgorCU1MTUVfQVVYICAgICAgICAgICAgICAgIE1sbWVBdXg7ICAgICAgICAgICAvLyB0ZW1wb3Jhcnkgc2V0dGluZ3MgdXNlZCBkdXJpbmcgTUxNRSBzdGF0ZSBtYWNoaW5lCisJQlNTX1RBQkxFICAgICAgICAgICAgICAgU2NhblRhYjsgICAgICAgICAgIC8vIHN0b3JlIHRoZSBsYXRlc3QgU0NBTiByZXN1bHQKKworCS8vQWJvdXQgTWFjVGFiLCB0aGUgc3RhIGRyaXZlciB3aWxsIHVzZSAjMCBhbmQgIzEgZm9yIG11bHRpY2FzdCBhbmQgQVAuCisJTUFDX1RBQkxFICAgICAgICAgICAgICAgICBNYWNUYWI7ICAgICAvLyBBU0lDIG9uLWNoaXAgV0NJRCBlbnRyeSB0YWJsZS4gIEF0IFRYLCBBU0lDIGFsd2F5cyB1c2Uga2V5IGFjY29yZGluZyB0byB0aGlzIG9uLWNoaXAgdGFibGUuCisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgTWFjVGFiTG9jazsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJBX1RBQkxFCQkJQkFUYWJsZTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlORElTX1NQSU5fTE9DSyAgICAgICAgICBCQVRhYkxvY2s7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCBSRUNCQVRpbWVyOworCisJLy8gZW5jcnlwdGlvbi9kZWNyeXB0aW9uIEtFWSB0YWJsZXMKKwlDSVBIRVJfS0VZICAgICAgICAgICAgICBTaGFyZWRLZXlbTUFYX01CU1NJRF9OVU1dWzRdOyAvLyBTVEEgYWx3YXlzIHVzZSBTaGFyZWRLZXlbQlNTMF1bMC4uM10KKworCQkvLyBSWCByZS1hc3NlbWJseSBidWZmZXIgZm9yIGZyYWdtZW50YXRpb24KKwlGUkFHTUVOVF9GUkFNRSAgICAgICAgICBGcmFnRnJhbWU7ICAgICAgICAgICAgICAgICAgLy8gRnJhbWUgc3RvcmFnZSBmb3IgZnJhZ21lbnQgZnJhbWUKKworCS8vIHZhcmlvdXMgQ291bnRlcnMKKwlDT1VOVEVSXzgwMl8zICAgICAgICAgICBDb3VudGVyczgwMjM7ICAgICAgICAgICAgICAgLy8gODAyLjMgY291bnRlcnMKKwlDT1VOVEVSXzgwMl8xMSAgICAgICAgICBXbGFuQ291bnRlcnM7ICAgICAgICAgICAgICAgLy8gODAyLjExIE1JQiBjb3VudGVycworCUNPVU5URVJfUkFMSU5LICAgICAgICAgIFJhbGlua0NvdW50ZXJzOyAgICAgICAgICAgICAvLyBSYWxpbmsgcHJvcHJpZXR5IGNvdW50ZXJzCisJQ09VTlRFUl9EUlMgICAgICAgICAgICAgRHJzQ291bnRlcnM7ICAgICAgICAgICAgICAgIC8vIGNvdW50ZXJzIGZvciBEeW5hbWljIFRYIFJhdGUgU3dpdGNoaW5nCisJUFJJVkFURV9TVFJVQyAgICAgICAgICAgUHJpdmF0ZUluZm87ICAgICAgICAgICAgICAgIC8vIFByaXZhdGUgaW5mb3JtYXRpb24gJiBjb3VudGVycworCisJLy8gZmxhZ3MsIHNlZSBmUlRNUF9BREFQVEVSX3h4eCBmbGFncworCVVMT05HICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvLyBSZXByZXNlbnQgY3VycmVudCBkZXZpY2Ugc3RhdHVzCisKKwkvLyBjdXJyZW50IFRYIHNlcXVlbmNlICMKKwlVU0hPUlQgICAgICAgICAgICAgICAgICBTZXF1ZW5jZTsKKworI2lmZGVmIFVOREVSX0NFCisJTkRJU19IQU5ETEUgICAgICAgICAgICAgaEdpSVNSOworI2VuZGlmCisKKworCS8vIENvbnRyb2wgZGlzY29ubmVjdCAvIGNvbm5lY3QgZXZlbnQgZ2VuZXJhdGlvbgorCS8vKysrRGlkbid0IHVzZWQgYW55bW9yZQorCVVMT05HICAgICAgICAgICAgICAgICAgIExpbmtEb3duVGltZTsKKwkvLy0tLQorCVVMT05HICAgICAgICAgICAgICAgICAgIExhc3RSeFJhdGU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgTGFzdFR4UmF0ZTsKKwkvLysrK1VzZWQgb25seSBmb3IgU3RhdGlvbgorCUJPT0xFQU4gICAgICAgICAgICAgICAgIGJDb25maWdDaGFuZ2VkOyAgICAgICAgIC8vIENvbmZpZyBDaGFuZ2UgZmxhZyBmb3IgdGhlIHNhbWUgU1NJRCBzZXR0aW5nCisJLy8tLS0KKworCVVMT05HICAgICAgICAgICAgICAgICAgIEV4dHJhSW5mbzsgICAgICAgICAgICAgIC8vIEV4dHJhIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5aW5nIHN0YXR1cworCVVMT05HICAgICAgICAgICAgICAgICAgIFN5c3RlbUVycm9yQml0bWFwOyAgICAgIC8vIGIwOiBFMlBST00gdmVyc2lvbiBlcnJvcgorCisJLy8rKytEaWRuJ3QgdXNlZCBhbnltb3JlCisJVUxPTkcgICAgICAgICAgICAgICAgICAgTWFjSWNWZXJzaW9uOyAgICAgICAgICAgLy8gTUFDL0JCUCBzZXJpYWwgaW50ZXJmYWNlIGlzc3VlIHNvbHZlZCBhZnRlciB2ZXIuRAorCS8vLS0tCisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTeXN0ZW0gZXZlbnQgbG9nCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUlRfODAyXzExX0VWRU5UX1RBQkxFICAgRXZlbnRUYWI7CisKKworCUJPT0xFQU4JCUhUQ0VuYWJsZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAgICAgIFN0YXRpc3RpYyByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFJUMjg3MAorCVVMT05HCQkJCQkJQnVsa091dERhdGFPbmVTZWNDb3VudDsKKwlVTE9ORwkJCQkJCUJ1bGtJbkRhdGFPbmVTZWNDb3VudDsKKwlVTE9ORwkJCQkJCUJ1bGtMYXN0T25lU2VjQ291bnQ7IC8vIEJ1bGtPdXREYXRhT25lU2VjQ291bnQgKyBCdWxrSW5EYXRhT25lU2VjQ291bnQKKwlVTE9ORwkJCQkJCXdhdGNoRG9nUnhDbnQ7CisJVUxPTkcJCQkJCQl3YXRjaERvZ1J4T3ZlckZsb3dDbnQ7CisJVUxPTkcJCQkJCQl3YXRjaERvZ1R4UGVuZGluZ0NudFtOVU1fT0ZfVFhfUklOR107CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlCT09MRUFOCQkJCQkJYlVwZGF0ZUJjbkNudERvbmU7CisJVUxPTkcJCQkJCQl3YXRjaERvZ01hY0RlYWRsb2NrOwkvLyBwcmV2ZW50IE1BQy9CQlAgaW50byBkZWFkbG9jayBjb25kaXRpb24KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gREVCVUcgcGFyYW1lcnRzCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vVUxPTkcJCURlYnVnU2V0dGluZ1s0XTsKKwlCT09MRUFOCQliQmFuQWxsQmFTZXR1cDsKKwlCT09MRUFOCQliUHJvbWlzY3VvdXM7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gcnQyODYwYyBlbXVsYXRpb24tdXNlIFBhcmFtZXRlcnMKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVUxPTkcJCXJ0c2FjY3VbMzBdOworCVVMT05HCQljdHNhY2N1WzMwXTsKKwlVTE9ORwkJY2ZlbmRhY2N1WzMwXTsKKwlVTE9ORwkJYmFjb250ZW50WzE2XTsKKwlVTE9ORwkJcnhpbnRbUlhfUklOR19TSVpFKzFdOworCVVDSEFSCQlyY3ZiYVs2MF07CisJQk9PTEVBTgkJYkxpbmtBZGFwdDsKKwlCT09MRUFOCQliRm9yY2VQcmludFRYOworCUJPT0xFQU4JCWJGb3JjZVByaW50Ulg7CisJQk9PTEVBTgkJYkRpc2FibGVzY2FubmluZzsJCS8vZGVmaW5lZCBpbiBSVDI4NzAgVVNCCisJQk9PTEVBTgkJYlN0YUZpZm9UZXN0OworCUJPT0xFQU4JCWJQcm90ZWN0aW9uVGVzdDsKKwlCT09MRUFOCQliSENDQVRlc3Q7CisJQk9PTEVBTgkJYkdlbk9uZUhDQ0E7CisJQk9PTEVBTgkJYkJyb2FkQ29tSFQ7CisJLy8rKytGb2xsb3dpbmcgYWRkIGZyb20gUlQyODcwIFVTQi4KKwlVTE9ORwkJQnVsa091dFJlcTsKKwlVTE9ORwkJQnVsa091dENvbXBsZXRlOworCVVMT05HCQlCdWxrT3V0Q29tcGxldGVPdGhlcjsKKwlVTE9ORwkJQnVsa091dENvbXBsZXRlQ2FuY2VsOwkvLyBzZWVtcyBub3QgdXNlIG5vdz8KKwlVTE9ORwkJQnVsa0luUmVxOworCVVMT05HCQlCdWxrSW5Db21wbGV0ZTsKKwlVTE9ORwkJQnVsa0luQ29tcGxldGVGYWlsOworCS8vLS0tCisKKyAgICBzdHJ1Y3Qgd2lmaWNvbmYJCQlXSUZJdGVzdGJlZDsKKworI2lmZGVmIFJBTElOS19BVEUKKwlBVEVfSU5GTwkJCQlhdGU7CisjaWZkZWYgUlQyODcwCisJQk9PTEVBTgkJCQkJQ29udGluQnVsa091dDsJCS8vQVRFIGJ1bGsgb3V0IGNvbnRyb2wKKwlCT09MRUFOCQkJCQlDb250aW5CdWxrSW47CQkvL0FURSBidWxrIGluIGNvbnRyb2wKKwlhdG9taWNfdAkJCQlCdWxrT3V0UmVtYWluZWQ7CisJYXRvbWljX3QJCQkJQnVsa0luUmVtYWluZWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdV9wb29sIG1wZHVfYmxrX3Bvb2w7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlVTE9ORwkJCQkJT25lU2Vjb25kbm9uQkVwYWNrZXRzOwkJLy8gcmVjb3JkIG5vbiBCRSBwYWNrZXRzIHBlciBzZWNvbmQKKworI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgorICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzICAgIGl3X3N0YXRzOworI2VuZGlmCisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKworI2lmZGVmIEJMT0NLX05FVF9JRgorCUJMT0NLX1FVRVVFX0VOVFJZCQlibG9ja1F1ZXVlVGFiW05VTV9PRl9UWF9SSU5HXTsKKyNlbmRpZiAvLyBCTE9DS19ORVRfSUYgLy8KKworCisKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwlJTlQzMgkJCQkJTUNfUm93SUQ7CisJVUNIQVIJCQkJCU1DX0ZpbGVOYW1lWzI1Nl07CisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisKKwlVTE9ORwkJCQkJVGJ0dFRpY2tDb3VudDsKKyNpZmRlZiBQQ0lfTVNJX1NVUFBPUlQKKwlCT09MRUFOCQkJCQlIYXZlTXNpOworI2VuZGlmIC8vIFBDSV9NU0lfU1VQUE9SVCAvLworCisKKwlVQ0hBUgkJCQkJaXNfb247CisKKyNkZWZpbmUgVElNRV9CQVNFCQkJKDEwMDAwMDAvT1NfSFopCisjZGVmaW5lIFRJTUVfT05FX1NFQ09ORAkJKDEwMDAwMDAvVElNRV9CQVNFKQorCVVDSEFSCQkJCQlmbGdfYmVfYWRqdXN0OworCVVMT05HCQkJCQliZV9hZGp1c3RfbGFzdF90aW1lOworCisjaWZkZWYgTklOVEVORE9fQVAKKwlOSU5ET19DVFJMX0JMT0NLCQluaW5kb19jdHJsX2Jsb2NrOworI2VuZGlmIC8vIE5JTlRFTkRPX0FQIC8vCisKKworI2lmZGVmIElLQU5PU19WWF8xWDAKKwlzdHJ1Y3QgSUtBTk9TX1RYX0lORk8JSWthbm9zVHhJbmZvOworCXN0cnVjdCBJS0FOT1NfVFhfSU5GTwlJa2Fub3NSeEluZm9bTUFYX01CU1NJRF9OVU0gKyBNQVhfV0RTX0VOVFJZICsgTUFYX0FQQ0xJX05VTSArIE1BWF9NRVNIX05VTV07CisjZW5kaWYgLy8gSUtBTk9TX1ZYXzFYMCAvLworCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwlSdG1wRGlhZ1N0cnVjdAlEaWFnU3RydWN0OworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisKKwlVSU5UOAkJCQkJUE1fRmxnU3VzcGVuZDsKKworI2lmZGVmIFJUMzB4eAorLy89PT09PT1lZnVzZQorCUJPT0xFQU4JCWJVc2VFZnVzZTsKKwlCT09MRUFOCQliRUVQUk9NRmlsZTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworfSBSVE1QX0FEQVBURVIsICpQUlRNUF9BREFQVEVSOworCisvLworLy8gQ2lzY28gSUFQUCBmb3JtYXQKKy8vCit0eXBlZGVmIHN0cnVjdCAgX0NJU0NPX0lBUFBfQ09OVEVOVF8KK3sKKwlVU0hPUlQgICAgIExlbmd0aDsgICAgICAgIC8vSUFQUCBMZW5ndGgKKwlVQ0hBUiAgICAgIE1lc3NhZ2VUeXBlOyAgICAgIC8vSUFQUCB0eXBlCisJVUNIQVIgICAgICBGdW5jdGlvbkNvZGU7ICAgICAvL0lBUFAgZnVuY3Rpb24gdHlwZQorCVVDSEFSICAgICAgRGVzdGluYWlvbk1BQ1tNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgU291cmNlTUFDW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICBUYWc7ICAgICAgICAgICAvL1RhZyhlbGVtZW50IElFKSAtIEFkamFjZW50IEFQIHJlcG9ydAorCVVTSE9SVCAgICAgVGFnTGVuZ3RoOyAgICAgLy9MZW5ndGggb2YgZWxlbWVudCBub3QgaW5jbHVkaW5nIDQgYnl0ZSBoZWFkZXIKKwlVQ0hBUiAgICAgIE9VSVs0XTsgICAgICAgICAgIC8vMHgwMCwgMHg0MCwgMHg5NiwgMHgwMAorCVVDSEFSICAgICAgUHJldmlvdXNBUFtNQUNfQUREUl9MRU5dOyAgICAgICAvL01BQyBBZGRyZXNzIG9mIGFjY2VzcyBwb2ludAorCVVTSE9SVCAgICAgQ2hhbm5lbDsKKwlVU0hPUlQgICAgIFNzaWRMZW47CisJVUNIQVIgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisJVVNIT1JUICAgICBTZWNvbmRzOyAgICAgICAgICAvL1NlY29uZHMgdGhhdCB0aGUgY2xpZW50IGhhcyBiZWVuIGRpc2Fzc29jaWF0ZWQuCit9IENJU0NPX0lBUFBfQ09OVEVOVCwgKlBDSVNDT19JQVBQX0NPTlRFTlQ7CisKKyNkZWZpbmUgREVMQVlJTlRNQVNLCQkweDAwMDNmZmZiCisjZGVmaW5lIElOVE1BU0sJCQkJMHgwMDAzZmZmYgorI2RlZmluZSBJbmRNYXNrCQkJCTB4MDAwM2ZmZmMKKyNkZWZpbmUgUnhJTlQJCQkJMHgwMDAwMDAwNQkvLyBEZWxheWVkIFJ4IG9yIGluZGl2aSByeAorI2RlZmluZSBUeERhdGFJbnQJCQkweDAwMDAwMGZhCS8vIERlbGF5ZWQgVHggb3IgaW5kaXZpIHR4CisjZGVmaW5lIFR4TWdtdEludAkJCTB4MDAwMDAxMDIJLy8gRGVsYXllZCBUeCBvciBpbmRpdmkgdHgKKyNkZWZpbmUgVHhDb2hlcmVudAkJCTB4MDAwMjAwMDAJLy8gdHggY29oZXJlbnQKKyNkZWZpbmUgUnhDb2hlcmVudAkJCTB4MDAwMTAwMDAJLy8gcnggY29oZXJlbnQKKyNkZWZpbmUgTWN1Q29tbWFuZAkJCTB4MDAwMDAyMDAJLy8gbWN1CisjZGVmaW5lIFByZVRCVFRJbnQJCQkweDAwMDAxMDAwCS8vIFByZS1UQlRUIGludGVycnVwdAorI2RlZmluZSBUQlRUSW50CQkJCTB4MDAwMDA4MDAJCS8vIFRCVFQgaW50ZXJydXB0CisjZGVmaW5lIEdQVGltZU91dEludAkJCTB4MDAwMDgwMDAJCS8vIEdQdGltZW91dCBpbnRlcnJ1cHQKKyNkZWZpbmUgQXV0b1dha2V1cEludAkJMHgwMDAwNDAwMAkJLy8gQXV0b1dha2V1cEludCBpbnRlcnJ1cHQKKyNkZWZpbmUgRmlmb1N0YUZ1bGxJbnQJCQkweDAwMDAyMDAwCS8vICBmaWZvIHN0YXRpc3RpY3MgZnVsbCBpbnRlcnJ1cHQKKworCit0eXBlZGVmIHN0cnVjdCBfUlhfQkxLXworeworLy8JUlhEX1NUUlVDCQlSeEQ7IC8vIHNhbXBsZQorCVJUMjhYWF9SWERfU1RSVUMJUnhEOworCVBSWFdJX1NUUlVDCQkJcFJ4V0k7CisJUEhFQURFUl84MDJfMTEJCXBIZWFkZXI7CisJUE5ESVNfUEFDS0VUCQlwUnhQYWNrZXQ7CisJVUNIQVIJCQkJKnBEYXRhOworCVVTSE9SVAkJCQlEYXRhU2l6ZTsKKwlVU0hPUlQJCQkJRmxhZ3M7CisJVUNIQVIJCQkJVXNlclByaW9yaXR5OwkvLyBmb3IgY2FsY3VsYXRlIFRLSVAgTUlDIHVzaW5nCit9IFJYX0JMSzsKKworCisjZGVmaW5lIFJYX0JMS19TRVRfRkxBRyhfcFJ4QmxrLCBfZmxhZykJCShfcFJ4QmxrLT5GbGFncyB8PSBfZmxhZykKKyNkZWZpbmUgUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBfZmxhZykJKF9wUnhCbGstPkZsYWdzICYgX2ZsYWcpCisjZGVmaW5lIFJYX0JMS19DTEVBUl9GTEFHKF9wUnhCbGssIF9mbGFnKQkoX3BSeEJsay0+RmxhZ3MgJj0gfihfZmxhZykpCisKKworI2RlZmluZSBmUlhfV0RTCQkJMHgwMDAxCisjZGVmaW5lIGZSWF9BTVNEVSAgICAgICAweDAwMDIKKyNkZWZpbmUgZlJYX0FSQUxJTksgICAgIDB4MDAwNAorI2RlZmluZSBmUlhfSFRDICAgICAgICAgMHgwMDA4CisjZGVmaW5lIGZSWF9QQUQgICAgICAgICAweDAwMTAKKyNkZWZpbmUgZlJYX0FNUERVICAgICAgIDB4MDAyMAorI2RlZmluZSBmUlhfUU9TCQkJMHgwMDQwCisjZGVmaW5lIGZSWF9JTkZSQQkJMHgwMDgwCisjZGVmaW5lIGZSWF9FQVAJCQkweDAxMDAKKyNkZWZpbmUgZlJYX01FU0gJCTB4MDIwMAorI2RlZmluZSBmUlhfQVBDTEkJCTB4MDQwMAorI2RlZmluZSBmUlhfRExTCQkJMHgwODAwCisjZGVmaW5lIGZSWF9XUEkJCQkweDEwMDAKKworI2RlZmluZSBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFECTE0CisjZGVmaW5lIExFTkdUSF9BUkFMSU5LX1NVQkZSQU1FSEVBRAkxNAorI2RlZmluZSBMRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQJIDIKKworI2RlZmluZSBUWF9VTktPV05fRlJBTUUJCQkweDAwCisjZGVmaW5lIFRYX01DQVNUX0ZSQU1FCQkJMHgwMQorI2RlZmluZSBUWF9MRUdBQ1lfRlJBTUUJCQkweDAyCisjZGVmaW5lIFRYX0FNUERVX0ZSQU1FCQkJMHgwNAorI2RlZmluZSBUWF9BTVNEVV9GUkFNRQkJCTB4MDgKKyNkZWZpbmUgVFhfUkFMSU5LX0ZSQU1FCQkJMHgxMAorI2RlZmluZSBUWF9GUkFHX0ZSQU1FCQkJMHgyMAorCisKKy8vCUN1cnJlbnRseSB0aGUgc2l6ZW9mKFRYX0JMSykgaXMgMTQ4IGJ5dGVzLgordHlwZWRlZiBzdHJ1Y3QgX1RYX0JMS18KK3sKKwlVQ0hBUgkJCQlRdWVJZHg7CisJVUNIQVIJCQkJVHhGcmFtZVR5cGU7CQkJCS8vIEluZGljYXRlIHRoZSBUcmFuc21pc3Npb24gdHlwZSBvZiB0aGUgYWxsIGZyYW1lcyBpbiBvbmUgYmF0Y2gKKwlVQ0hBUgkJCQlUb3RhbEZyYW1lTnVtOwkJCQkvLyBUb3RhbCBmcmFtZSBudW1iZXIgd2FudCB0byBzZW5kLW91dCBpbiBvbmUgYmF0Y2gKKwlVU0hPUlQJCQkJVG90YWxGcmFnTnVtOwkJCQkvLyBUb3RhbCBmcmFtZSBmcmFnbWVudHMgcmVxdWlyZWQgaW4gb25lIGJhdGNoCisJVVNIT1JUCQkJCVRvdGFsRnJhbWVMZW47CQkJCS8vIFRvdGFsIGxlbmd0aCBvZiBhbGwgZnJhbWVzIHdhbnQgdG8gc2VuZC1vdXQgaW4gb25lIGJhdGNoCisKKwlRVUVVRV9IRUFERVIJCVR4UGFja2V0TGlzdDsKKwlNQUNfVEFCTEVfRU5UUlkJCSpwTWFjRW50cnk7CQkJCQkvLyBOVUxMOiBwYWNrZXQgd2l0aCA4MDIuMTEgUkEgZmllbGQgaXMgbXVsdGljYXN0L2Jyb2FkY2FzdCBhZGRyZXNzCisJSFRUUkFOU01JVF9TRVRUSU5HCSpwVHJhbnNtaXQ7CisKKwkvLyBGb2xsb3dpbmcgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzcGVjaWZpYyBwYWNrZXQuCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0OworCVBVQ0hBUgkJCQlwU3JjQnVmSGVhZGVyOwkJCQkvLyBSZWZlcmVuY2UgdG8gdGhlIGhlYWQgb2Ygc2tfYnVmZi0+ZGF0YQorCVBVQ0hBUgkJCQlwU3JjQnVmRGF0YTsJCQkJLy8gUmVmZXJlbmNlIHRvIHRoZSBza19idWZmLT5kYXRhLCB3aWxsIGNoYW5nZWQgZGVwZW5kcyBvbiBoYW5sZGluZyBwcm9ncmVzc3MKKwlVSU5UCQkJCVNyY0J1ZkxlbjsJCQkJCS8vIExlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZCB3aGljaCBub3QgaW5jbHVkaW5nIExheWVyIDIgaGVhZGVyCisJUFVDSEFSCQkJCXBFeHRyYUxsY1NuYXBFbmNhcDsJCQkvLyBOVUxMIG1lYW5zIG5vIGV4dHJhIExMQy9TTkFQIGlzIHJlcXVpcmVkCisJVUNIQVIJCQkJSGVhZGVyQnVmWzgwXTsJCQkJLy8gVGVtcEJ1ZmZlciBmb3IgVFhfSU5GTyArIFRYX1dJICsgODAyLjExIEhlYWRlciArIHBhZGRpbmcgKyBBTVNEVSBTdWJIZWFkZXIgKyBMTEMvU05BUAorCVVDSEFSCQkJCU1wZHVIZWFkZXJMZW47CQkJCS8vIDgwMi4xMSBoZWFkZXIgbGVuZ3RoIE5PVCBpbmNsdWRpbmcgdGhlIHBhZGRpbmcKKwlVQ0hBUgkJCQlIZHJQYWRMZW47CQkJCQkvLyByZWNvcmRpbmcgSGVhZGVyIFBhZGRpbmcgTGVuZ3RoOworCVVDSEFSCQkJCWFwaWR4OwkJCQkJCS8vIFRoZSBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byB0aGlzIHBhY2tldAorCVVDSEFSCQkJCVdjaWQ7CQkJCQkJLy8gVGhlIE1BQyBlbnRyeSBhc3NvY2lhdGVkIHRvIHRoaXMgcGFja2V0CisJVUNIQVIJCQkJVXNlclByaW9yaXR5OwkJCQkvLyBwcmlvcml0eSBjbGFzcyBvZiBwYWNrZXQKKwlVQ0hBUgkJCQlGcmFtZUdhcDsJCQkJCS8vIHdoYXQga2luZCBvZiBJRlMgdGhpcyBwYWNrZXQgdXNlCisJVUNIQVIJCQkJTXBkdVJlcU51bTsJCQkJCS8vIG51bWJlciBvZiBmcmFnbWVudHMgb2YgdGhpcyBmcmFtZQorCVVDSEFSCQkJCVR4UmF0ZTsJCQkJCQkvLyBUT0RPOiBPYnNvbGV0ZWQ/IFNob3VsZCBjaGFuZ2UgdG8gTUNTPworCVVDSEFSCQkJCUNpcGhlckFsZzsJCQkJCS8vIGNpcGhlciBhbG9ncml0aG0KKwlQQ0lQSEVSX0tFWQkJCXBLZXk7CisKKworCisJVVNIT1JUCQkJCUZsYWdzOwkJCQkJCS8vU2VlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgZGV0YWlsLgorCisJLy9ZT1UgU0hPVUxEIE5PVCBUT1VDSCBJVCEgRm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgZm9yIGhhcmR3YXJlLWRlcGVuZGVkIGxheWVyLgorCVVMT05HCQkJCVByaXY7CQkJCQkJLy8gSGFyZHdhcmUgc3BlY2lmaWMgdmFsdWUgc2F2ZWQgaW4gaGVyZS4KK30gVFhfQkxLLCAqUFRYX0JMSzsKKworCisjZGVmaW5lIGZUWF9iUnRzUmVxdWlyZWQJCTB4MDAwMQkvLyBJbmRpY2F0ZSBpZiBuZWVkIHNlbmQgUlRTIGZyYW1lIGZvciBwcm90ZWN0aW9uLiBOb3QgdXNlZCBpbiBSVDI4NjAvUlQyODcwLgorI2RlZmluZSBmVFhfYkFja1JlcXVpcmVkICAgICAgIAkweDAwMDIJLy8gdGhlIHBhY2tldCBuZWVkIGFjayByZXNwb25zZQorI2RlZmluZSBmVFhfYlBpZ2d5QmFjayAgICAgCQkweDAwMDQJLy8gTGVnYWN5IGRldmljZSB1c2UgUGlnZ2JhY2sgb3Igbm90CisjZGVmaW5lIGZUWF9iSFRSYXRlICAgICAgICAgCTB4MDAwOAkvLyBhbGxvdyB0byB1c2UgSFQgcmF0ZQorLy8jZGVmaW5lIGZUWF9iRm9yY2VMb3dSYXRlICAgICAgIDB4MDAxMAkvLyBmb3JjZSB0byB1c2UgTG93IFJhdGUKKyNkZWZpbmUgZlRYX2JGb3JjZU5vblFvUyAgICAgICAJMHgwMDEwCS8vIGZvcmNlIHRvIHRyYW5zbWl0IGZyYW1lIHdpdGhvdXQgV01NLVFvUyBpbiBIVCBtb2RlCisjZGVmaW5lIGZUWF9iQWxsb3dGcmFnICAgICAgIAkweDAwMjAJLy8gYWxsb3cgdG8gZnJhZ21lbnQgdGhlIHBhY2tldCwgQS1NUERVLCBBLU1TRFUsIEEtUmFsaW5rIGlzIG5vdCBhbGxvd2VkIHRvIGZyYWdtZW50CisjZGVmaW5lIGZUWF9iTW9yZURhdGEJCQkweDAwNDAJLy8gdGhlcmUgYXJlIG1vcmUgZGF0YSBwYWNrZXRzIGluIFBvd2VyU2F2ZSBRdWV1ZQorI2RlZmluZSBmVFhfYldNTQkJCQkweDAwODAJLy8gUU9TIERhdGEKKworI2RlZmluZSBmVFhfYkNsZWFyRUFQRnJhbWUJCTB4MDEwMAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKyNkZWZpbmUgVFhfQkxLX0FTU0lHTl9GTEFHKF9wVHhCbGssIF9mbGFnLCB2YWx1ZSkJXAorCQlkbyB7CQkJCQkJCQkJCVwKKwkJCWlmICh2YWx1ZSkgCQkJCQkJCQlcCisJCQkJKF9wVHhCbGstPkZsYWdzIHw9IF9mbGFnKSAJCQlcCisJCQllbHNlIAkJCQkJCQkJCVwKKwkJCQkoX3BUeEJsay0+RmxhZ3MgJj0gfihfZmxhZykpCQlcCisJCX13aGlsZSgwKQorCisjZGVmaW5lIFRYX0JMS19TRVRfRkxBRyhfcFR4QmxrLCBfZmxhZykJCShfcFR4QmxrLT5GbGFncyB8PSBfZmxhZykKKyNkZWZpbmUgVFhfQkxLX1RFU1RfRkxBRyhfcFR4QmxrLCBfZmxhZykJKCgoX3BUeEJsay0+RmxhZ3MgJiBfZmxhZykgPT0gX2ZsYWcpID8gMSA6IDApCisjZGVmaW5lIFRYX0JMS19DTEVBUl9GTEFHKF9wVHhCbGssIF9mbGFnKQkoX3BUeEJsay0+RmxhZ3MgJj0gfihfZmxhZykpCisKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCitzdGF0aWMgaW5saW5lIFZPSUQJV3JpdGVCYWNrVG9EZXNjcmlwdG9yKAorCUlOICBQVUNIQVIJCQlEZXN0LAorIAlJTglQVUNIQVIJCQlTcmMsCisgICAgSU4gIEJPT0xFQU4JCQlEb0VuY3J5cHQsCisJSU4gIFVMT05HICAgICAgICAgICBEZXNjcmlwdG9yVHlwZSkKK3sKKwlVSU5UMzIgKnAxLCAqcDI7CisKKwlwMSA9ICgoVUlOVDMyICopRGVzdCk7CisJcDIgPSAoKFVJTlQzMiAqKVNyYyk7CisKKwkqcDEgPSAqcDI7CisJKihwMSsyKSA9ICoocDIrMik7CisJKihwMSszKSA9ICoocDIrMyk7CisJKihwMSsxKSA9ICoocDIrMSk7IC8vIFdvcmQgMTsgdGhpcyBtdXN0IGJlIHdyaXR0ZW4gYmFjayBsYXN0Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlFbmRpYW4gY29udmVyc2lvbiBvZiBUeC9SeCBkZXNjcmlwdG9yIC4KKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQkJUG9pbnRlciB0byBUeC9SeCBkZXNjcmlwdG9yCisJCURlc2NyaXB0b3JUeXBlCURpcmVjdGlvbiBvZiB0aGUgZnJhbWUKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKwkJQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gcmVhZCBvciB1cGRhdGUgZGVzY3JpcHRvcgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbmxpbmUgVk9JRAlSVE1QV0lFbmRpYW5DaGFuZ2UoCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEZXNjcmlwdG9yVHlwZSkKK3sKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCXNpemUgPSAoKERlc2NyaXB0b3JUeXBlID09IFRZUEVfVFhXSSkgPyBUWFdJX1NJWkUgOiBSWFdJX1NJWkUpOworCisJaWYoRGVzY3JpcHRvclR5cGUgPT0gVFlQRV9UWFdJKQorCXsKKwkJKigoVUlOVDMyICopKHBEYXRhKSkgPSBTV0FQMzIoKigoVUlOVDMyICopKHBEYXRhKSkpOwkJLy8gQnl0ZSAwfjMKKwkJKigoVUlOVDMyICopKHBEYXRhICsgNCkpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSs0KSkpOwkvLyBCeXRlIDR+NworCX0KKwllbHNlCisJeworCQlmb3IoaT0wOyBpIDwgc2l6ZS80IDsgaSsrKQorCQkJKigoKFVJTlQzMiAqKXBEYXRhKSAraSkgPSBTV0FQMzIoKigoKFVJTlQzMiAqKXBEYXRhKStpKSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRW5kaWFuIGNvbnZlcnNpb24gb2YgVHgvUnggZGVzY3JpcHRvciAuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJCVBvaW50ZXIgdG8gVHgvUnggZGVzY3JpcHRvcgorCQlEZXNjcmlwdG9yVHlwZQlEaXJlY3Rpb24gb2YgdGhlIGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCUNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHJlYWQgb3IgdXBkYXRlIGRlc2NyaXB0b3IKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKyNpZmRlZiBSVDI4NzAKK3N0YXRpYyBpbmxpbmUgVk9JRAlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURlc2NyaXB0b3JUeXBlKQoreworCSooKFVJTlQzMiAqKShwRGF0YSkpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSkpKTsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlFbmRpYW4gY29udmVyc2lvbiBvZiBhbGwga2luZHMgb2YgODAyLjExIGZyYW1lcyAuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJCVBvaW50ZXIgdG8gdGhlIDgwMi4xMSBmcmFtZSBzdHJ1Y3R1cmUKKwkJRGlyIAkJCURpcmVjdGlvbiBvZiB0aGUgZnJhbWUKKwkJRnJvbVJ4RG9uZUludAlDYWxsZXIgaXMgZnJvbSBSeERvbmUgaW50ZXJydXB0CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCUNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHJlYWQgb3IgdXBkYXRlIGJ1ZmZlciBkYXRhCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlubGluZSBWT0lECVJUTVBGcmFtZUVuZGlhbkNoYW5nZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURpciwKKwlJTglCT09MRUFOIAkJRnJvbVJ4RG9uZUludCkKK3sKKwlQSEVBREVSXzgwMl8xMSBwRnJhbWU7CisJUFVDSEFSCXBNYWNIZHI7CisKKwkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBGcmFtZSBDb250cm9sIGZpZWxkCisJaWYoRGlyID09IERJUl9SRUFEKQorCXsKKwkJKihVU0hPUlQgKilwRGF0YSA9IFNXQVAxNigqKFVTSE9SVCAqKXBEYXRhKTsKKwl9CisKKwlwRnJhbWUgPSAoUEhFQURFUl84MDJfMTEpIHBEYXRhOworCXBNYWNIZHIgPSAoUFVDSEFSKSBwRnJhbWU7CisKKwkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBEdXJhdGlvbi9JRCBmaWVsZAorCSooVVNIT1JUICopKHBNYWNIZHIgKyAyKSA9IFNXQVAxNigqKFVTSE9SVCAqKShwTWFjSGRyICsgMikpOworCisJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gU2VxdWVuY2UgQ29udHJvbCBmaWVsZAorCSooVVNIT1JUICopKHBNYWNIZHIgKyAyMikgPSBTV0FQMTYoKihVU0hPUlQgKikocE1hY0hkciArIDIyKSk7CisKKwlpZihwRnJhbWUtPkZDLlR5cGUgPT0gQlRZUEVfTUdNVCkKKwl7CisJCXN3aXRjaChwRnJhbWUtPkZDLlN1YlR5cGUpCisJCXsKKwkJCWNhc2UgU1VCVFlQRV9BU1NPQ19SRVE6CisJCQljYXNlIFNVQlRZUEVfUkVBU1NPQ19SRVE6CisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQ2FwYWJpbGl0eUluZm8gZmllbGQKKwkJCQlwTWFjSGRyICs9IHNpemVvZihIRUFERVJfODAyXzExKTsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKworCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIExpc3RlbiBJbnRlcnZhbCBmaWVsZAorCQkJCXBNYWNIZHIgKz0gMjsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTVUJUWVBFX0FTU09DX1JTUDoKKwkJCWNhc2UgU1VCVFlQRV9SRUFTU09DX1JTUDoKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBDYXBhYmlsaXR5SW5mbyBmaWVsZAorCQkJCXBNYWNIZHIgKz0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gU3RhdHVzIENvZGUgZmllbGQKKwkJCQlwTWFjSGRyICs9IDI7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBBSUQgZmllbGQKKwkJCQlwTWFjSGRyICs9IDI7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1VCVFlQRV9BVVRIOgorCQkJCS8vIElmIGZyb20gQVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQgcm91dGluZSwgaXQgaXMgc3RpbGwgYSBlbmNyeXB0IGZvcm1hdC4KKwkJCQkvLyBUaGUgY29udmVydGlvbiBpcyBkZWxheWVkIHRvIFJUTVBIYW5kbGVEZWNyeXB0aW9uRG9uZUludGVycnVwdC4KKwkJCQlpZighRnJvbVJ4RG9uZUludCAmJiBwRnJhbWUtPkZDLldlcCA9PSAxKQorCQkJCQlicmVhazsKKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBBdXRoIEFsZyBOby4gZmllbGQKKwkJCQkJcE1hY0hkciArPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisJCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIEF1dGggU2VxIE5vLiBmaWVsZAorCQkJCQlwTWFjSGRyICs9IDI7CisJCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIFN0YXR1cyBDb2RlIGZpZWxkCisJCQkJCXBNYWNIZHIgKz0gMjsKKwkJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFNVQlRZUEVfQkVBQ09OOgorCQkJY2FzZSBTVUJUWVBFX1BST0JFX1JTUDoKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBCZWFjb25JbnRlcnZhbCBmaWVsZAorCQkJCXBNYWNIZHIgKz0gKHNpemVvZihIRUFERVJfODAyXzExKSArIFRJTUVTVEFNUF9MRU4pOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQ2FwYWJpbGl0eUluZm8gZmllbGQKKwkJCQlwTWFjSGRyICs9IHNpemVvZihVU0hPUlQpOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCQkJCWJyZWFrOworCisJCQljYXNlIFNVQlRZUEVfREVBVVRIOgorCQkJY2FzZSBTVUJUWVBFX0RJU0FTU09DOgorCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIFJlYXNvbiBjb2RlIGZpZWxkCisJCQkJcE1hY0hkciArPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiggcEZyYW1lLT5GQy5UeXBlID09IEJUWVBFX0RBVEEgKQorCXsKKwl9CisJZWxzZSBpZihwRnJhbWUtPkZDLlR5cGUgPT0gQlRZUEVfQ05UTCkKKwl7CisJCXN3aXRjaChwRnJhbWUtPkZDLlN1YlR5cGUpCisJCXsKKwkJCWNhc2UgU1VCVFlQRV9CTE9DS19BQ0tfUkVROgorCQkJCXsKKwkJCQkJUEZSQU1FX0JBX1JFUSBwQkFSZXEgPSAoUEZSQU1FX0JBX1JFUSlwRnJhbWU7CisJCQkJCSooVVNIT1JUICopKCZwQkFSZXEtPkJBUkNvbnRyb2wpID0gU1dBUDE2KCooVVNIT1JUICopKCZwQkFSZXEtPkJBUkNvbnRyb2wpKTsKKwkJCQkJcEJBUmVxLT5CQVN0YXJ0aW5nU2VxLndvcmQgPSBTV0FQMTYocEJBUmVxLT5CQVN0YXJ0aW5nU2VxLndvcmQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1VCVFlQRV9CTE9DS19BQ0s6CisJCQkJLy8gRm9yIEJsb2NrIEFjayBwYWNrZXQsIHRoZSBIVF9DT05UUk9MIGZpZWxkIGlzIGluIHRoZSBzYW1lIG9mZnNldCB3aXRoIEFkZHIzCisJCQkJKihVSU5UMzIgKikoJnBGcmFtZS0+QWRkcjNbMF0pID0gU1dBUDMyKCooVUlOVDMyICopKCZwRnJhbWUtPkFkZHIzWzBdKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1VCVFlQRV9BQ0s6CisJCQkJLy9Gb3IgQUNLIHBhY2tldCwgdGhlIEhUX0NPTlRST0wgZmllbGQgaXMgaW4gdGhlIHNhbWUgb2Zmc2V0IHdpdGggQWRkcjIKKwkJCQkqKFVJTlQzMiAqKSgmcEZyYW1lLT5BZGRyMlswXSk9CVNXQVAzMigqKFVJTlQzMiAqKSgmcEZyYW1lLT5BZGRyMlswXSkpOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiSW52YWxpZCBGcmFtZSBUeXBlISEhXG4iKSk7CisJfQorCisJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gRnJhbWUgQ29udHJvbAorCWlmKERpciA9PSBESVJfV1JJVEUpCisJeworCQkqKFVTSE9SVCAqKXBEYXRhID0gU1dBUDE2KCooVVNIT1JUICopcERhdGEpOworCX0KK30KKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKworc3RhdGljIGlubGluZSBWT0lEIENvbnZlcnRNdWx0aWNhc3RJUDJNQUMoCisJSU4gUFVDSEFSIHBJcEFkZHIsCisJSU4gUFVDSEFSICpwcE1hY0FkZHIsCisJSU4gVUlOVDE2IFByb3RvVHlwZSkKK3sKKwlpZiAocElwQWRkciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAocHBNYWNBZGRyID09IE5VTEwgfHwgKnBwTWFjQWRkciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKFByb3RvVHlwZSkKKwl7CisJCWNhc2UgRVRIX1BfSVBWNjoKKy8vCQkJbWVtc2V0KCpwcE1hY0FkZHIsIDAsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJCQkqKCpwcE1hY0FkZHIpID0gMHgzMzsKKwkJCSooKnBwTWFjQWRkciArIDEpID0gMHgzMzsKKwkJCSooKnBwTWFjQWRkciArIDIpID0gcElwQWRkclsxMl07CisJCQkqKCpwcE1hY0FkZHIgKyAzKSA9IHBJcEFkZHJbMTNdOworCQkJKigqcHBNYWNBZGRyICsgNCkgPSBwSXBBZGRyWzE0XTsKKwkJCSooKnBwTWFjQWRkciArIDUpID0gcElwQWRkclsxNV07CisJCQlicmVhazsKKworCQljYXNlIEVUSF9QX0lQOgorCQlkZWZhdWx0OgorLy8JCQltZW1zZXQoKnBwTWFjQWRkciwgMCwgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwkJCSooKnBwTWFjQWRkcikgPSAweDAxOworCQkJKigqcHBNYWNBZGRyICsgMSkgPSAweDAwOworCQkJKigqcHBNYWNBZGRyICsgMikgPSAweDVlOworCQkJKigqcHBNYWNBZGRyICsgMykgPSBwSXBBZGRyWzFdICYgMHg3ZjsKKwkJCSooKnBwTWFjQWRkciArIDQpID0gcElwQWRkclsyXTsKKwkJCSooKnBwTWFjQWRkciArIDUpID0gcElwQWRkclszXTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworQk9PTEVBTiBSVE1QQ2hlY2tGb3JIYW5nKAorCUlOICBORElTX0hBTkRMRSBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0CisJKTsKKworVk9JRCAgUlRNUEhhbHQoCisJSU4gIE5ESVNfSEFORExFIE1pbmlwb3J0QWRhcHRlckNvbnRleHQKKwkpOworCisvLworLy8gIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF9pbml0LmMKKy8vCitORElTX1NUQVRVUyBSVE1QQWxsb2NBZGFwdGVyQmxvY2soCisJSU4gUFZPSUQJCQloYW5kbGUsCisJT1VUIFBSVE1QX0FEQVBURVIgICAqcHBBZGFwdGVyCisJKTsKKworTkRJU19TVEFUVVMgUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQKKwkpOworCitORElTX1NUQVRVUyBSVE1QRmluZEFkYXB0ZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE5ESVNfSEFORExFICAgICBXcmFwcGVyQ29uZmlndXJhdGlvbkNvbnRleHQKKwkpOworCitORElTX1NUQVRVUwlSVE1QUmVhZFBhcmFtZXRlcnNIb29rKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkCisJKTsKKworVk9JRCBSVE1QRnJlZUFkYXB0ZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQKKwkpOworCitORElTX1NUQVRVUyBOSUNSZWFkUmVnUGFyYW1ldGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4gIE5ESVNfSEFORExFICAgICAgICAgV3JhcHBlckNvbmZpZ3VyYXRpb25Db250ZXh0CisJKTsKKworI2lmZGVmIFJUMzB4eAorVk9JRCBOSUNJbml0UlQzMHh4UkZSZWdpc3RlcnMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIFJUMzB4eCAvLworCitWT0lEIE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKwlJTglQVUNIQVIJCQkJbWFjX2FkZHIpOworCitWT0lEIE5JQ0luaXRBc2ljRnJvbUVFUFJPTSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQpOworCitWT0lEIE5JQ0luaXRUeFJ4UmluZ0FuZEJhY2tsb2dRdWV1ZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK05ESVNfU1RBVFVTIE5JQ0luaXRpYWxpemVBZGFwdGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICAgQk9PTEVBTiAgICBiSGFyZFJlc2V0KTsKKworTkRJU19TVEFUVVMgTklDSW5pdGlhbGl6ZUFzaWMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIEJPT0xFQU4JCWJIYXJkUmVzZXQpOworCitWT0lEIE5JQ0lzc3VlUmVzZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFJUTVBSaW5nQ2xlYW5VcCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFJpbmdUeXBlKTsKKworVk9JRCBSeFRlc3QoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitORElTX1NUQVRVUyBEYmdTZW5kUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK1ZPSUQgVXNlckNmZ0luaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE5JQ1Jlc2V0RnJvbUVycm9yKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBOSUNFcmFzZUZpcm13YXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworTkRJU19TVEFUVVMgTklDTG9hZEZpcm13YXJlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgTklDTG9hZFJhdGVTd2l0Y2hpbmdQYXJhbXMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitCT09MRUFOIE5JQ0NoZWNrRm9ySGFuZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBOSUNVcGRhdGVSYXdDb3VudGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1VMT05HCVJUTVBOb3RBbGxaZXJvKAorCUlOCVBWT0lECXBTcmMxLAorCUlOCVVMT05HCUxlbmd0aCk7CisKK1ZPSUQgUlRNUFplcm9NZW1vcnkoCisJSU4gIFBWT0lEICAgcFNyYywKKwlJTiAgVUxPTkcgICBMZW5ndGgpOworCitVTE9ORyBSVE1QQ29tcGFyZU1lbW9yeSgKKwlJTiAgUFZPSUQgICBwU3JjMSwKKwlJTiAgUFZPSUQgICBwU3JjMiwKKwlJTiAgVUxPTkcgICBMZW5ndGgpOworCitWT0lEIFJUTVBNb3ZlTWVtb3J5KAorCU9VVCBQVk9JRCAgIHBEZXN0LAorCUlOICBQVk9JRCAgIHBTcmMsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCBBdG9IKAorCWNoYXIJKnNyYywKKwlVQ0hBUgkqZGVzdCwKKwlpbnQJCWRlc3RsZW4pOworCitVQ0hBUiBCdG9IKAorCWNoYXIgY2gpOworCitWT0lEIFJUTVBQYXRjaE1hY0JicEJ1ZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUFBhdGNoQ2FyZEJ1cygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyKTsKKworVk9JRCBSVE1QUGF0Y2hSYWxpbmtDYXJkQnVzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JVUxPTkcJCQlCdXMpOworCitVTE9ORyBSVE1QUmVhZENCQ29uZmlnKAorCUlOCVVMT05HCUJ1cywKKwlJTglVTE9ORwlTbG90LAorCUlOCVVMT05HCUZ1bmMsCisJSU4JVUxPTkcJT2Zmc2V0KTsKKworVk9JRCBSVE1QV3JpdGVDQkNvbmZpZygKKwlJTglVTE9ORwlCdXMsCisJSU4JVUxPTkcJU2xvdCwKKwlJTglVTE9ORwlGdW5jLAorCUlOCVVMT05HCU9mZnNldCwKKwlJTglVTE9ORwlWYWx1ZSk7CisKK1ZPSUQgUlRNUEluaXRUaW1lcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICAgICAgcEFkLAorCUlOICBQUkFMSU5LX1RJTUVSX1NUUlVDVCAgICBwVGltZXIsCisJSU4gIFBWT0lEICAgICAgICAgICAgICAgICAgIHBUaW1lckZ1bmMsCisJSU4JUFZPSUQJCQkJCXBEYXRhLAorCUlOICBCT09MRUFOICAgICAgICAgICAgICAgICBSZXBlYXQpOworCitWT0lEIFJUTVBTZXRUaW1lcigKKwlJTiAgUFJBTElOS19USU1FUl9TVFJVQ1QgICAgcFRpbWVyLAorCUlOICBVTE9ORyAgICAgICAgICAgICAgICAgICBWYWx1ZSk7CisKKworVk9JRCBSVE1QTW9kVGltZXIoCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCUlOCVVMT05HCQkJCQlWYWx1ZSk7CisKK1ZPSUQgUlRNUENhbmNlbFRpbWVyKAorCUlOICBQUkFMSU5LX1RJTUVSX1NUUlVDVCAgICBwVGltZXIsCisJT1VUIEJPT0xFQU4gICAgICAgICAgICAgICAgICpwQ2FuY2VsbGVkKTsKKworVk9JRCBSVE1QU2V0TEVEKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBVQ0hBUgkJCVN0YXR1cyk7CisKK1ZPSUQgUlRNUFNldFNpZ25hbExFRCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gTkRJU184MDJfMTFfUlNTSSBEYm0pOworCitWT0lEIFJUTVBFbmFibGVSeFR4KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworLy8KKy8vIHByb3RvdHlwZSBpbiBhY3Rpb24uYworLy8KK1ZPSUQgQWN0aW9uU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgU1RBVEVfTUFDSElORSAqUywKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIE1sbWVBRERCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVERUxCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVETFNBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lSW52YWxpZEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVRT1NBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBQZWVyQWRkQkFSZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQWRkQkFSc3BBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyRGVsQkFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQkFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBTZW5kUFNNUEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCVdjaWQsCisJSU4gVUNIQVIJCQlQc21wKTsKKworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworVk9JRCBTZW5kQlNTMjA0MENvZXhpc3RNZ210QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCVdjaWQsCisJSU4JVUNIQVIJYXBpZHgsCisJSU4JVUNIQVIJSW5mb1JlcSk7CisKK1ZPSUQgU2VuZE5vdGlmeUJXQWN0aW9uRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgIFdjaWQsCisJSU4gVUNIQVIgYXBpZHgpOworCitCT09MRUFOIENoYW5uZWxTd2l0Y2hTYW5pdHlDaGVjaygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTiAgICBVQ0hBUiAgTmV3Q2hhbm5lbCwKKwlJTiAgICBVQ0hBUiAgU2Vjb25kYXJ5KTsKKworVk9JRCBDaGFubmVsU3dpdGNoQWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOICAgIFVDSEFSICBDaGFubmVsLAorCUlOICAgIFVDSEFSICBTZWNvbmRhcnkpOworCitVTE9ORyBCdWlsZEludG9sZXJhbnRDaGFubmVsUmVwKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFBVQ0hBUiAgcERlc3QpOworCitWT0lEIFVwZGF0ZTIwNDBDb2V4aXN0RnJhbWVBbmROb3RpZnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgIFdjaWQsCisJSU4JQk9PTEVBTgliQWRkSW50b2xlcmFudENoYSk7CisKK1ZPSUQgU2VuZDIwNDBDb2V4aXN0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOCUJPT0xFQU4JYkFkZEludG9sZXJhbnRDaGEpOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworVk9JRCBQZWVyUk1BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUHVibGljQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgU3RhUHVibGljQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIEJzczIwNDBDb2V4aXN0KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitWT0lEIFBlZXJCU1NUcmFuQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgUGVlckhUQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgUGVlclFPU0FjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitWT0lEIFBlZXJETFNBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorVk9JRCBEbHNQYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9ETFNfUkVRX1NUUlVDVCAqcERsc1JlcSwKKwlJTiBQUlRfODAyXzExX0RMUyBwRGxzLAorCUlOIFVTSE9SVCByZWFzb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIFJFQ0JBVGltZXJUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgT1JJQkFUaW1lclRpbWVvdXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFNlbmRSZWZyZXNoQkFSKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5KTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBBY3RIZWFkZXJJbml0KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gUFVDSEFSIEFkZHIxLAorICAgIElOIFBVQ0hBUiBBZGRyMiwKKyAgICBJTiBQVUNIQVIgQWRkcjMpOworCitWT0lEIEJhckhlYWRlckluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUIFBGUkFNRV9CQVIgcENudGxCYXIsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcFNBKTsKKworVk9JRCBJbnNlcnRBY3RGaWVsZCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBDYXRlZ29yeSwKKwlJTiBVSU5UOCBBY3RDb2RlKTsKKworQk9PTEVBTiBRb3NCQURhdGFQYXJzZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBCT09MRUFOIGJBTVNEVSwKKwlJTiBQVUNIQVIgcDgwMjNIZWFkZXIsCisJSU4gVUNIQVIJV0NJRCwKKwlJTiBVQ0hBUglUSUQsCisJSU4gVVNIT1JUIFNlcXVlbmNlLAorCUlOIFVDSEFSIERhdGFPZmZzZXQsCisJSU4gVVNIT1JUIERhdGFzaXplLAorCUlOIFVJTlQgICBDdXJSeEluZGV4KTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorQk9PTEVBTiBDbnRsRW5xdWV1ZUZvclJlY3YoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUxPTkcgV2NpZCwKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisJSU4gUEZSQU1FX0JBX1JFUSBwTXNnKTsKKworVk9JRCBCYUF1dG9NYW5Td2l0Y2goCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIEhUSU9UQ2hlY2soCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgICAgIEJhdFJlY0lkeCk7CisKKy8vCisvLyBQcml2YXRlIHJvdXRpbmVzIGluIHJ0bXBfZGF0YS5jCisvLworQk9PTEVBTiBSVE1QSGFuZGxlUnhEb25lSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QSGFuZGxlVHhEb25lSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiBSVE1QSGFuZGxlVHhSaW5nRG1hRG9uZUludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgSU5UX1NPVVJDRV9DU1JfU1RSVUMgVHhSaW5nQml0bWFwKTsKKworVk9JRCBSVE1QSGFuZGxlTWdtdFJpbmdEbWFEb25lSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QSGFuZGxlVEJUVEludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUEhhbmRsZVByZVRCVFRJbnRlcnJ1cHQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCit2b2lkIFJUTVBIYW5kbGVUd2FrZXVwSW50ZXJydXB0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRAlSVE1QSGFuZGxlUnhDb2hlcmVudEludGVycnVwdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK0JPT0xFQU4gVHhGcmFtZUlzQWdncmVnYXRpYmxlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFByZXZBZGRyMSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHA4MDIzaGRyKTsKKworQk9PTEVBTiBQZWVySXNBZ2dyZU9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBVTE9ORyAgICAgICAgICBUeFJhdGUsCisgICAgSU4gIFBNQUNfVEFCTEVfRU5UUlkgcE1hY0VudHJ5KTsKKworTkRJU19TVEFUVVMgU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcigKKwlJTiAgUE5ESVNfQlVGRkVSICAgIHBGaXJzdEJ1ZmZlciwKKwlJTiAgVUNIQVIgICAgICAgICAgIERlc2lyZWRPZmZzZXQsCisJT1VUIFBVQ0hBUiAgICAgICAgICBwQnl0ZTAsCisJT1VUIFBVQ0hBUiAgICAgICAgICBwQnl0ZTEpOworCitORElTX1NUQVRVUyBTVEFTZW5kUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK1ZPSUQgU1RBU2VuZFBhY2tldHMoCisJSU4gIE5ESVNfSEFORExFICAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorCUlOICBQUE5ESVNfUEFDS0VUICAgcHBQYWNrZXRBcnJheSwKKwlJTiAgVUlOVCAgICAgICAgICAgIE51bWJlck9mUGFja2V0cyk7CisKK1ZPSUQgUlRNUERlUXVldWVQYWNrZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAJSU4JQk9PTEVBTgkJCWJJbnRDb250ZXh0LAorCUlOICBVQ0hBUgkJCVF1ZUlkeCwKKwlJTglVQ0hBUgkJCU1heF9UeF9QYWNrZXRzKTsKKworTkRJU19TVEFUVVMJUlRNUEhhcmRUcmFuc21pdCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBQTkRJU19QQUNLRVQJCXBQYWNrZXQsCisJSU4gIFVDSEFSCQkJUXVlSWR4LAorCU9VVAlQVUxPTkcJCQlwRnJlZVRYRExlZnQpOworCitORElTX1NUQVRVUwlTVEFIYXJkVHJhbnNtaXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVFhfQkxLCQkJKnBUeEJsaywKKwlJTiAgVUNIQVIJCQlRdWVJZHgpOworCitWT0lEIFNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK05ESVNfU1RBVFVTIFJUTVBGcmVlVFhEUmVxdWVzdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFJpbmdUeXBlLAorCUlOICBVQ0hBUiAgICAgICAgICAgTnVtYmVyUmVxdWlyZWQsCisJSU4gCVBVQ0hBUiAgICAgICAgICBGcmVlTnVtYmVySXMpOworCitORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUglRdWVJZHgsCisJSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUglRdWVJZHgsCisJSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdFR4UmluZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIJUXVlSWR4LAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK1VTSE9SVCAgUlRNUENhbGNEdXJhdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFJhdGUsCisJSU4gIFVMT05HICAgICAgICAgICBTaXplKTsKKworVk9JRCBSVE1QV3JpdGVUeFdJKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWFdJX1NUUlVDCQlwVHhXSSwKKwlJTiAgQk9PTEVBTiAgICAJCUZSQUcsCisJSU4gIEJPT0xFQU4gICAgCQlDRkFDSywKKwlJTiAgQk9PTEVBTiAgICAJCUluc1RpbWVzdGFtcCwKKwlJTglCT09MRUFOCQkJQU1QRFUsCisJSU4JQk9PTEVBTgkJCUFjaywKKwlJTglCT09MRUFOCQkJTlNlcSwJCS8vIEhXIG5ldyBhIHNlcXVlbmNlLgorCUlOCVVDSEFSCQkJQkFTaXplLAorCUlOCVVDSEFSCQkJV0NJRCwKKwlJTglVTE9ORwkJCUxlbmd0aCwKKwlJTiAgVUNIQVIgICAgICAJCVBJRCwKKwlJTglVQ0hBUgkJCVRJRCwKKwlJTglVQ0hBUgkJCVR4UmF0ZSwKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJKnBUcmFuc21pdCk7CisKKworVk9JRCBSVE1QV3JpdGVUeFdJX0RhdGEoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCU9VVCBQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4JVFhfQkxLCQkJCSpwVHhCbGspOworCisKK1ZPSUQgUlRNUFdyaXRlVHhXSV9DYWNoZSgKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JT1VUIFBUWFdJX1NUUlVDCQlwVHhXSSwKKwlJTglUWF9CTEsJCQkJKnBUeEJsayk7CisKK1ZPSUQgUlRNUFdyaXRlVHhEZXNjcmlwdG9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWERfU1RSVUMJCXBUeEQsCisJSU4JQk9PTEVBTgkJCWJXSVYsCisJSU4JVUNIQVIJCQlRU0VMKTsKKworVk9JRCBSVE1QU3VzcGVuZE1zZHVUcmFuc21pc3Npb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgTWluaXBvcnRNTVJlcXVlc3QoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlRdWVJZHgsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4gIFVJTlQgICAgICAgICAgICBMZW5ndGgpOworCitORElTX1NUQVRVUyBNaW5pcG9ydERhdGFNTVJlcXVlc3QoCisJIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCSBJTiAgVUNIQVIgICAgICAgICAgIFF1ZUlkeCwKKwkgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwkgSU4gIFVJTlQgICAgICAgICAgICBMZW5ndGgpOworCitWT0lEIFJUTVBTZW5kTnVsbEZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgVHhSYXRlLAorCUlOCUJPT0xFQU4JCQliUW9zTnVsbCk7CisKK1ZPSUQgUlRNUFNlbmREaXNhc3NvY2lhdGlvbkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVE1QU2VuZFJUU0ZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOCXVuc2lnbmVkIGludAlOZXh0TXBkdVNpemUsCisJSU4gIFVDSEFSICAgICAgICAgICBUeFJhdGUsCisJSU4gIFVDSEFSICAgICAgICAgICBSVFNSYXRlLAorCUlOICBVU0hPUlQgICAgICAgICAgQWNrRHVyYXRpb24sCisJSU4gIFVDSEFSICAgICAgICAgICBRdWVJZHgsCisJSU4gIFVDSEFSCQkJRnJhbWVHYXApOworCisKK05ESVNfU1RBVFVTIFJUTVBBcHBseVBhY2tldEZpbHRlcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFJUMjhYWF9SWERfU1RSVUMgICAgICBwUnhELAorCUlOICBQSEVBREVSXzgwMl8xMSAgcEhlYWRlcik7CisKK1BRVUVVRV9IRUFERVIgICBSVE1QQ2hlY2tUeFN3UXVldWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFVDSEFSICAgICAgICAgICAqUXVlSWR4KTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCBSVE1QUmVwb3J0TWljRXJyb3IoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBDSVBIRVJfS0VZICAgICBwV3BhS2V5KTsKKworVk9JRAlXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKAorICAgIElOICBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiAgUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOICBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitORElTX1NUQVRVUyBSVE1QQ2xvbmVOZGlzUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCUJPT0xFQU4gICAgcEluc0FNU0RVSGRyLAorCUlOICBQTkRJU19QQUNLRVQgICAgcEluUGFja2V0LAorCU9VVCBQTkRJU19QQUNLRVQgICAqcHBPdXRQYWNrZXQpOworCitORElTX1NUQVRVUyBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgKnBQYWNrZXQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwSGVhZGVyLAorCUlOICBVSU5UICAgICAgICAgICAgSGVhZGVyTGVuLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVJTlQgICAgICAgICAgICBEYXRhTGVuKTsKKworVk9JRCBSVE1QRnJlZU5kaXNQYWNrZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworQk9PTEVBTiBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUoCisJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gVUNIQVIgICAgICAgICAgICBRdWVJZHgpOworCitCT09MRUFOIFJUTVBDaGVja0RIQ1BGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCk7CisKKworQk9PTEVBTiBSVE1QQ2hlY2tFdGhlclR5cGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisKK1ZPSUQgUlRNUENja0JicFR1bmluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVSU5UCQkJVHhSYXRlKTsKKworLy8KKy8vIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF93ZXAuYworLy8KK1ZPSUQgUlRNUEluaXRXZXBFbmdpbmUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5LAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5SWQsCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlMZW4sCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCk7CisKK1ZPSUQgUlRNUEVuY3J5cHREYXRhKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEZXN0LAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworQk9PTEVBTglSVE1QRGVjcnlwdERhdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4sCisJSU4JVUlOVAkJCWlkeCk7CisKK0JPT0xFQU4JUlRNUFNvZnREZWNyeXB0V0VQKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBQVUNIQVIJCQlwRGF0YSwKKwlJTiBVTE9ORwkJCURhdGFCeXRlQ250LAorCUlOIFBDSVBIRVJfS0VZCQlwR3JvdXBLZXkpOworCitWT0lEIFJUTVBTZXRJQ1YoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCk7CisKK1ZPSUQgQVJDRk9VUl9JTklUKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgQ3R4LAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleSwKKwlJTiAgVUlOVCAgICAgICAgICAgIEtleUxlbik7CisKK1VDSEFSICAgQVJDRk9VUl9CWVRFKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgICAgIEN0eCk7CisKK1ZPSUQgQVJDRk9VUl9ERUNSWVBUKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgQ3R4LAorCUlOICBQVUNIQVIgICAgICAgICAgcERlc3QsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworVk9JRCBBUkNGT1VSX0VOQ1JZUFQoCisJSU4gIFBBUkNGT1VSQ09OVEVYVCBDdHgsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFVJTlQgICAgICAgICAgICBMZW4pOworCitWT0lEIFdQQUFSQ0ZPVVJfRU5DUllQVCgKKwlJTiAgUEFSQ0ZPVVJDT05URVhUIEN0eCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEZXN0LAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK1VJTlQgUlRNUF9DQUxDX0ZDUzMyKAorCUlOICBVSU5UICAgRmNzLAorCUlOICBQVUNIQVIgIENwLAorCUlOICBJTlQgICAgIExlbik7CisKKy8vCisvLyBNTE1FIHJvdXRpbmVzCisvLworCisvLyBBc2ljL1JGL0JCUCByZWxhdGVkIGZ1bmN0aW9ucworCitWT0lEIEFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCAJQXNpY1VwZGF0ZVByb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIAkJVVNIT1JUCQkJT3BlcmFpb25Nb2RlLAorCUlOIAkJVUNIQVIJCQlTZXRNYXNrLAorCUlOCQlCT09MRUFOCQkJYkRpc2FibGVCR1Byb3RlY3QsCisJSU4JCUJPT0xFQU4JCQliTm9uR0ZFeGlzdCk7CisKK1ZPSUQgQXNpY1N3aXRjaENoYW5uZWwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlDaGFubmVsLAorCUlOCUJPT0xFQU4JCQliU2Nhbik7CisKK1ZPSUQgQXNpY0xvY2tDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIENoYW5uZWwpIDsKKworVk9JRCBBc2ljQW50ZW5uYVNlbGVjdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIENoYW5uZWwpOworCitWT0lEIEFzaWNBbnRlbm5hU2V0dGluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglBQkdCQU5EX1NUQVRFCUJhbmRTdGF0ZSk7CisKK1ZPSUQgQXNpY1JmVHVuaW5nRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVU0hPUlQgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisKK1ZPSUQgQXNpY0ZvcmNlU2xlZXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNGb3JjZVdha2V1cCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOICAgIGJGcm9tVHgpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitWT0lEIEFzaWNTZXRCc3NpZCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSIHBCc3NpZCk7CisKK1ZPSUQgQXNpY1NldE1jYXN0V0MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNEZWxXY2lkVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCVdjaWQpOworCitWT0lEIEFzaWNFbmFibGVSREcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNEaXNhYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljRGlzYWJsZVN5bmMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFzaWNFbmFibGVCc3NTeW5jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBc2ljRW5hYmxlSWJzc1N5bmMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFzaWNTZXRFZGNhUGFybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRURDQV9QQVJNICAgIHBFZGNhUGFybSk7CisKK1ZPSUQgQXNpY1NldFNsb3RUaW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gYlVzZVNob3J0U2xvdFRpbWUpOworCitWT0lEIEFzaWNBZGRTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIEJzc0luZGV4LAorCUlOIFVDSEFSICAgICAgICAgS2V5SWR4LAorCUlOIFVDSEFSICAgICAgICAgQ2lwaGVyQWxnLAorCUlOIFBVQ0hBUiAgICAgICAgcEtleSwKKwlJTiBQVUNIQVIgICAgICAgIHBUeE1pYywKKwlJTiBQVUNIQVIgICAgICAgIHBSeE1pYyk7CisKK1ZPSUQgQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSICAgICAgICAgQnNzSW5kZXgsCisJSU4gVUNIQVIgICAgICAgICBLZXlJZHgpOworCitWT0lEIEFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIgICAgICAgIENpcGhlckFsZywKKwlJTiBCT09MRUFOCQliVXNlUGFpcmV3aXNlS2V5VGFibGUpOworCitWT0lEIEFzaWNVcGRhdGVXQ0lESVZFSVYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFVMT05HICAgICAgICB1SVYsCisJSU4gVUxPTkcgICAgICAgIHVFSVYpOworCitWT0lEIEFzaWNVcGRhdGVSeFdDSURUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQJCVdDSUQsCisJSU4gUFVDSEFSICAgICAgICBwQWRkcik7CisKK1ZPSUQgQXNpY0FkZEtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIJCUtleUlkeCwKKwlJTiBQQ0lQSEVSX0tFWQlwQ2lwaGVyS2V5LAorCUlOIEJPT0xFQU4JCWJVc2VQYWlyZXdpc2VLZXlUYWJsZSwKKwlJTiBCT09MRUFOCQliVHhLZXkpOworCitWT0lEIEFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIsCisJSU4gVUNIQVIJCVdDSUQsCisJSU4gQ0lQSEVSX0tFWQkJICpwQ2lwaGVyS2V5KTsKKworVk9JRCBBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSICBwQWQsCisJSU4gVUNIQVIJCSBCc3NJZHgsCisJSU4gVUNIQVIJCSBXY2lkKTsKKworQk9PTEVBTiBBc2ljU2VuZENvbW1hbmRUb01jdSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIENvbW1hbmQsCisJSU4gVUNIQVIgICAgICAgICBUb2tlbiwKKwlJTiBVQ0hBUiAgICAgICAgIEFyZzAsCisJSU4gVUNIQVIgICAgICAgICBBcmcxKTsKKworCitWT0lEIE1hY0FkZHJSYW5kb21Cc3NpZCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlPVVQgUFVDSEFSIHBBZGRyKTsKKworVk9JRCBNZ3RNYWNIZWFkZXJJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgICBwQWQsCisJSU4gT1VUIFBIRUFERVJfODAyXzExIHBIZHI4MDIxMSwKKwlJTiBVQ0hBUiBTdWJUeXBlLAorCUlOIFVDSEFSIFRvRHMsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcEJzc2lkKTsKKworVk9JRCBNbG1lUmFkaW9PZmYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIE1sbWVSYWRpb09uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworCitWT0lEIEJzc1RhYmxlSW5pdCgKKwlJTiBCU1NfVEFCTEUgKlRhYik7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQkFUYWJsZUluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gQkFfVEFCTEUgKlRhYik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1VMT05HIEJzc1RhYmxlU2VhcmNoKAorCUlOIEJTU19UQUJMRSAqVGFiLAorCUlOIFBVQ0hBUiBwQnNzaWQsCisJSU4gVUNIQVIgQ2hhbm5lbCk7CisKK1VMT05HIEJzc1NzaWRUYWJsZVNlYXJjaCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIgICAgcEJzc2lkLAorCUlOIFBVQ0hBUiAgICBwU3NpZCwKKwlJTiBVQ0hBUiAgICAgU3NpZExlbiwKKwlJTiBVQ0hBUiAgICAgQ2hhbm5lbCk7CisKK1VMT05HIEJzc1RhYmxlU2VhcmNoV2l0aFNTSUQoCisJSU4gQlNTX1RBQkxFICpUYWIsCisJSU4gUFVDSEFSICAgIEJzc2lkLAorCUlOIFBVQ0hBUiAgICBwU3NpZCwKKwlJTiBVQ0hBUiAgICAgU3NpZExlbiwKKwlJTiBVQ0hBUiAgICAgQ2hhbm5lbCk7CisKK1ZPSUQgQnNzVGFibGVEZWxldGVFbnRyeSgKKwlJTiBPVVQgIFBCU1NfVEFCTEUgcFRhYiwKKwlJTiAgICAgIFBVQ0hBUiBwQnNzaWQsCisJSU4gICAgICBVQ0hBUiBDaGFubmVsKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBCQVRhYmxlRGVsZXRlT1JJRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlCQV9PUklfRU5UUlkJKnBCQU9SSUVudHJ5KTsKKworVk9JRCBCQVRhYmxlRGVsZXRlUkVDRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlCQV9SRUNfRU5UUlkJKnBCQVJFQ0VudHJ5KTsKKworVk9JRCBCQVRhYmxlVGVhck9SSUVudHJ5KAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJVUNIQVIgVElELAorCUlOCQlVQ0hBUiBXY2lkLAorCUlOCQlCT09MRUFOIGJGb3JjZURlbGV0ZSwKKwlJTgkJQk9PTEVBTiBBTEwpOworCitWT0lEIEJBVGFibGVUZWFyUkVDRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlVQ0hBUiBUSUQsCisJSU4JCVVDSEFSIFdDSUQsCisJSU4JCUJPT0xFQU4gQUxMKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCAgQnNzRW50cnlTZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFBCU1NfRU5UUlkgcEJzcywKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQnNzVHlwZSwKKwlJTiBVU0hPUlQgQmVhY29uUGVyaW9kLAorCUlOIFBDRl9QQVJNIENmUGFybSwKKwlJTiBVU0hPUlQgQXRpbVdpbiwKKwlJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlJTiBBRERfSFRfSU5GT19JRSAqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlBZGRIdEluZm9MZW4sCisJSU4gVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0LAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gQ0hBUiBSc3NpLAorCUlOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAorCUlOIFVDSEFSIENraXBGbGFnLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCUlOIFBRQlNTX0xPQURfUEFSTSBwUWJzc0xvYWQsCisJSU4gVVNIT1JUIExlbmd0aFZJRSwKKwlJTiBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpOworCitVTE9ORyAgQnNzVGFibGVTZXRFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlPVVQgUEJTU19UQUJMRSBwVGFiLAorCUlOIFBVQ0hBUiBwQnNzaWQsCisJSU4gQ0hBUiBTc2lkW10sCisJSU4gVUNIQVIgU3NpZExlbiwKKwlJTiBVQ0hBUiBCc3NUeXBlLAorCUlOIFVTSE9SVCBCZWFjb25QZXJpb2QsCisJSU4gQ0ZfUEFSTSAqQ2ZQYXJtLAorCUlOIFVTSE9SVCBBdGltV2luLAorCUlOIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiBVQ0hBUiBTdXBSYXRlW10sCisJSU4gVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiBVQ0hBUiBFeHRSYXRlW10sCisJSU4gVUNIQVIgRXh0UmF0ZUxlbiwKKwlJTiBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCUlOIEFERF9IVF9JTkZPX0lFICpwQWRkSHRJbmZvLAkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlJTiBVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiBVQ0hBUgkJCUFkZEh0SW5mb0xlbiwKKwlJTiBVQ0hBUgkJCU5ld0V4dENoYW5PZmZzZXQsCisJSU4gVUNIQVIgQ2hhbm5lbCwKKwlJTiBDSEFSIFJzc2ksCisJSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCisJSU4gVUNIQVIgQ2tpcEZsYWcsCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisJSU4gUFFCU1NfTE9BRF9QQVJNIHBRYnNzTG9hZCwKKwlJTiBVU0hPUlQgTGVuZ3RoVklFLAorCUlOIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQkFUYWJsZUluc2VydEVudHJ5KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVTSE9SVCBBaWQsCisgICAgSU4gVVNIT1JUCQlUaW1lT3V0VmFsdWUsCisJSU4gVVNIT1JUCQlTdGFydGluZ1NlcSwKKyAgICBJTiBVQ0hBUiBUSUQsCisJSU4gVUNIQVIgQkFXaW5TaXplLAorCUlOIFVDSEFSIE9yaWdpbmF0b3JTdGF0dXMsCisgICAgSU4gQk9PTEVBTiBJc1JlY2lwaWVudCk7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEIEJzczIwNDBDb2V4aXN0VGltZU91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCisKK1ZPSUQgIFRyaUV2ZW50SW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1VMT05HIFRyaUV2ZW50VGFibGVTZXRFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgVFJJR0dFUl9FVkVOVF9UQUIgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlSZWdDbGFzcywKKwlJTiBVQ0hBUiBDaGFubmVsTm8pOworCitWT0lEIFRyaUV2ZW50Q291bnRlck1haW50ZW5hbmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgQnNzVGFibGVTc2lkU29ydCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlPVVQgQlNTX1RBQkxFICpPdXRUYWIsCisJSU4gIENIQVIgU3NpZFtdLAorCUlOICBVQ0hBUiBTc2lkTGVuKTsKKworVk9JRCAgQnNzVGFibGVTb3J0QnlSc3NpKAorCUlOIE9VVCBCU1NfVEFCTEUgKk91dFRhYik7CisKK1ZPSUQgQnNzQ2lwaGVyUGFyc2UoCisJSU4gT1VUICBQQlNTX0VOVFJZICBwQnNzKTsKKworTkRJU19TVEFUVVMgIE1sbWVRdWV1ZUluaXQoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpOworCitWT0lEICBNbG1lUXVldWVEZXN0cm95KAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKKworQk9PTEVBTiBNbG1lRW5xdWV1ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBNYWNoaW5lLAorCUlOIFVMT05HIE1zZ1R5cGUsCisJSU4gVUxPTkcgTXNnTGVuLAorCUlOIFZPSUQgKk1zZyk7CisKK0JPT0xFQU4gTWxtZUVucXVldWVGb3JSZWN2KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIFVMT05HIFdjaWQsCisJSU4gVUxPTkcgVGltZVN0YW1wSGlnaCwKKwlJTiBVTE9ORyBUaW1lU3RhbXBMb3csCisJSU4gVUNIQVIgUnNzaTAsCisJSU4gVUNIQVIgUnNzaTEsCisJSU4gVUNIQVIgUnNzaTIsCisJSU4gVUxPTkcgTXNnTGVuLAorCUlOIFBWT0lEIE1zZywKKwlJTiBVQ0hBUiBTaWduYWwpOworCisKK0JPT0xFQU4gTWxtZURlcXVldWUoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUsCisJT1VUIE1MTUVfUVVFVUVfRUxFTSAqKkVsZW0pOworCitWT0lEICAgIE1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiAgTWxtZVF1ZXVlRW1wdHkoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpOworCitCT09MRUFOICBNbG1lUXVldWVGdWxsKAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKKworQk9PTEVBTiAgTXNnVHlwZVN1YnN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBGUkFNRV84MDJfMTEgcEZyYW1lLAorCU9VVCBJTlQgKk1hY2hpbmUsCisJT1VUIElOVCAqTXNnVHlwZSk7CisKK1ZPSUQgU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiBTVEFURV9NQUNISU5FICpTbSwKKwlJTiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSwKKwlJTiBVTE9ORyBTdE5yLAorCUlOIFVMT05HIE1zZ05yLAorCUlOIFNUQVRFX01BQ0hJTkVfRlVOQyBEZWZGdW5jLAorCUlOIFVMT05HIEluaXRTdGF0ZSwKKwlJTiBVTE9ORyBCYXNlKTsKKworVk9JRCBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBVTE9ORyBTdCwKKwlVTE9ORyBNc2csCisJSU4gU1RBVEVfTUFDSElORV9GVU5DIEYpOworCitWT0lEIFN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIERyb3AoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBc3NvY1N0YXRlTWFjaGluZUluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlNtLAorCU9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgUmVhc3NvY1RpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBc3NvY1RpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBEaXNhc3NvY1RpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWT0lEIE1sbWVEaXNhc3NvY1JlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lQXNzb2NSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZVJlYXNzb2NSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZURpc2Fzc29jUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJBc3NvY1JzcEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUmVhc3NvY1JzcEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyRGlzYXNzb2NBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgRGlzYXNzb2NUaW1lb3V0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFzc29jVGltZW91dEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgUmVhc3NvY1RpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIENsczNlcnJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiBwQWRkcik7CisKK1ZPSUQgU3dpdGNoQmV0d2VlbldlcEFuZENraXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEICBJbnZhbGlkU3RhdGVXaGVuQXNzb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUoCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisjaWZkZWYgUlQyODcwCitWT0lEIE1sbWVDbnRsQ29uZmlybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBNc2dUeXBlLAorCUlOIFVTSE9SVCBNc2cpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCitWT0lEICBDb21wb3NlUHNQb2xsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCAgQ29tcG9zZU51bGxGcmFtZSgKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEICBBc3NvY1Bvc3RQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgcEFkZHIyLAorCUlOICBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gIFVTSE9SVCBBaWQsCisJSU4gIFVDSEFSIFN1cFJhdGVbXSwKKwlJTiAgVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiAgVUNIQVIgRXh0UmF0ZVtdLAorCUlOICBVQ0hBUiBFeHRSYXRlTGVuLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorCUlOICBVQ0hBUiBIdENhcGFiaWxpdHlMZW4sCisJSU4gQUREX0hUX0lORk9fSUUJCSpwQWRkSHRJbmZvKTsKKworVk9JRCBBdXRoU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBQU1RBVEVfTUFDSElORSBzbSwKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIEF1dGhUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgTWxtZUF1dGhSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQXV0aFRpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ2xzMmVyckFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSIHBBZGRyKTsKKworVk9JRCBNbG1lRGVhdXRoUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEludmFsaWRTdGF0ZVdoZW5BdXRoKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitWT0lEIEF1dGhSc3BTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQU1RBVEVfTUFDSElORSBTbSwKKwlJTiAgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIFBlZXJEZWF1dGhBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQXV0aFNpbXBsZVJzcEdlbkFuZFNlbmQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBIRUFERVJfODAyXzExICBwSGRyODAyMTEsCisJSU4gIFVTSE9SVCBBbGcsCisJSU4gIFVTSE9SVCBTZXEsCisJSU4gIFVTSE9SVCBSZWFzb24sCisJSU4gIFVTSE9SVCBTdGF0dXMpOworCisvLworLy8gUHJpdmF0ZSByb3V0aW5lcyBpbiBkbHMuYworLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAordm9pZCBEbHNTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFNUQVRFX01BQ0hJTkUgKlNtLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgTWxtZURsc1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJEbHNSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNCSpFbGVtKTsKKworVk9JRCBQZWVyRGxzUnNwQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTQkqRWxlbSk7CisKK1ZPSUQgTWxtZURsc1RlYXJEb3duQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckRsc1RlYXJEb3duQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTQkqRWxlbSk7CisKK1ZPSUQgUlRNUENoZWNrRExTVGltZU91dCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK0JPT0xFQU4gUlRNUFJjdkZyYW1lRExTQ2hlY2soCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUEhFQURFUl84MDJfMTEJcEhlYWRlciwKKwlJTiBVTE9ORwkJCUxlbiwKKwlJTiBQUlQyOFhYX1JYRF9TVFJVQwlwUnhEKTsKKworSU5UCVJUTVBDaGVja0RMU0ZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBKTsKKworVk9JRCBSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwREEpOworCitORElTX1NUQVRVUyBSVE1QU2VuZFNUQUtleVJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKTsKKworTkRJU19TVEFUVVMgUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKTsKKworVk9JRCBEbHNUaW1lb3V0QWN0aW9uKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK0JPT0xFQU4gTWxtZURsc1JlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQUlRfODAyXzExX0RMUyAqcERMUywKKyAgICBPVVQgUFVTSE9SVCBwUmVhc29uKTsKKworSU5UIFNldF9EbHNFbnRyeUluZm9fRGlzcGxheV9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpOworCitNQUNfVEFCTEVfRU5UUlkgKk1hY1RhYmxlSW5zZXJ0RGxzRW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUglwQWRkciwKKwlJTiAgVUlOVAlEbHNFbnRyeUlkeCk7CisKK0JPT0xFQU4gTWFjVGFibGVEZWxldGVEbHNFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgd2NpZCwKKwlJTiBQVUNIQVIgcEFkZHIpOworCitNQUNfVEFCTEVfRU5UUlkgKkRsc0VudHJ5VGFibGVMb29rdXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KTsKKworTUFDX1RBQkxFX0VOVFJZICpEbHNFbnRyeVRhYmxlTG9va3VwQnlXY2lkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCXdjaWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KTsKKworSU5UCVNldF9EbHNBZGRFbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfRGxzVGVhckRvd25FbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK0JPT0xFQU4gUGVlckRsc1JlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcERBLAorICAgIE9VVCBQVUNIQVIgcFNBLAorICAgIE9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKyAgICBPVVQgVVNIT1JUICpwRGxzVGltZW91dCwKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpOworCitCT09MRUFOIFBlZXJEbHNSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpOworCitCT09MRUFOIFBlZXJEbHNUZWFyRG93blNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcERBLAorICAgIE9VVCBQVUNIQVIgcFNBLAorICAgIE9VVCBVU0hPUlQgKnBSZWFzb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVk9JRCBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAqU20sCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBCZWFjb25UaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgU2NhblRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBNbG1lU2NhblJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuU2NhbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuSm9pbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuU3RhcnQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckJlYWNvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBFbnF1ZXVlUHJvYmVSZXF1ZXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBTY2FuUnVubmluZygKKwkJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitWT0lEIE1sbWVDbnRsSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIE1sbWVDbnRsTWFjaGluZVBlcmZvcm1BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bElkbGVQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxPaWRTY2FuUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bE9pZFNzaWRQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKiBFbGVtKTsKKworVk9JRCBDbnRsT2lkUlRCc3NpZFByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqIEVsZW0pOworCitWT0lEIENudGxNbG1lUm9hbWluZ1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqIEVsZW0pOworCitWT0lEIENudGxXYWl0RGlzYXNzb2NQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxXYWl0Sm9pblByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bFdhaXRSZWFzc29jUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdFN0YXJ0UHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdEF1dGhQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxXYWl0QXV0aFByb2MyKAorCUlOICBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdEFzc29jUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorVk9JRCBDbnRsT2lkRExTU2V0dXBQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKK1ZPSUQgTGlua1VwKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiBCc3NUeXBlKTsKKworVk9JRCBMaW5rRG93bigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgQk9PTEVBTiAgICAgICAgIElzUmVxRnJvbUFQKTsKKworVk9JRCBJdGVyYXRlT25Cc3NUYWIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEl0ZXJhdGVPbkJzc1RhYjIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOzsKKworVk9JRCBKb2luUGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX0pPSU5fUkVRX1NUUlVDVCAqSm9pblJlcSwKKwlJTiAgVUxPTkcgQnNzSWR4KTsKKworVk9JRCBBc3NvY1Bhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIE9VVCBNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKkFzc29jUmVxLAorCUlOICBQVUNIQVIgcEFkZHIsCisJSU4gIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiAgVUxPTkcgVGltZW91dCwKKwlJTiAgVVNIT1JUIExpc3RlbkludHYpOworCitWT0lEIFNjYW5QYXJtRmlsbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgT1VUIE1MTUVfU0NBTl9SRVFfU1RSVUNUICpTY2FuUmVxLAorCUlOICBDSEFSIFNzaWRbXSwKKwlJTiAgVUNIQVIgU3NpZExlbiwKKwlJTiAgVUNIQVIgQnNzVHlwZSwKKwlJTiAgVUNIQVIgU2NhblR5cGUpOworCitWT0lEIERpc2Fzc29jUGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgKkRpc2Fzc29jUmVxLAorCUlOICBQVUNIQVIgcEFkZHIsCisJSU4gIFVTSE9SVCBSZWFzb24pOworCitWT0lEIFN0YXJ0UGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKlN0YXJ0UmVxLAorCUlOICBDSEFSIFNzaWRbXSwKKwlJTiAgVUNIQVIgU3NpZExlbik7CisKK1ZPSUQgQXV0aFBhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBPVVQgTUxNRV9BVVRIX1JFUV9TVFJVQ1QgKkF1dGhSZXEsCisJSU4gIFBVQ0hBUiBwQWRkciwKKwlJTiAgVVNIT1JUIEFsZyk7CisKK1ZPSUQgRW5xdWV1ZVBzUG9sbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgRW5xdWV1ZUJlYWNvbkZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBNbG1lSm9pblJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lU2NhblJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lU3RhcnRSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgU2NhblRpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJCZWFjb25BdEpvaW5BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckJlYWNvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUHJvYmVSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFNjYW5OZXh0Q2hhbm5lbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1VMT05HIE1ha2VJYnNzQmVhY29uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBDQ1hBZGphY2VudEFQUmVwb3J0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiBNbG1lU2NhblJlcVNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFVDSEFSICpCc3NUeXBlLAorCU9VVCBDSEFSIHNzaWRbXSwKKwlPVVQgVUNIQVIgKlNzaWRMZW4sCisJT1VUIFVDSEFSICpTY2FuVHlwZSk7CisKK0JPT0xFQU4gUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlJTiAgVUNIQVIgTXNnQ2hhbm5lbCwKKwlPVVQgUFVDSEFSIHBBZGRyMiwKKwlPVVQgUFVDSEFSIHBCc3NpZCwKKwlPVVQgQ0hBUiBTc2lkW10sCisJT1VUIFVDSEFSICpwU3NpZExlbiwKKwlPVVQgVUNIQVIgKnBCc3NUeXBlLAorCU9VVCBVU0hPUlQgKnBCZWFjb25QZXJpb2QsCisJT1VUIFVDSEFSICpwQ2hhbm5lbCwKKwlPVVQgVUNIQVIgKnBOZXdDaGFubmVsLAorCU9VVCBMQVJHRV9JTlRFR0VSICpwVGltZXN0YW1wLAorCU9VVCBDRl9QQVJNICpwQ2ZQYXJtLAorCU9VVCBVU0hPUlQgKnBBdGltV2luLAorCU9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKwlPVVQgVUNIQVIgKnBFcnAsCisJT1VUIFVDSEFSICpwRHRpbUNvdW50LAorCU9VVCBVQ0hBUiAqcER0aW1QZXJpb2QsCisJT1VUIFVDSEFSICpwQmNhc3RGbGFnLAorCU9VVCBVQ0hBUiAqcE1lc3NhZ2VUb01lLAorCU9VVCBVQ0hBUiBTdXBSYXRlW10sCisJT1VUIFVDSEFSICpwU3VwUmF0ZUxlbiwKKwlPVVQgVUNIQVIgRXh0UmF0ZVtdLAorCU9VVCBVQ0hBUiAqcEV4dFJhdGVMZW4sCisJT1VUCVVDSEFSICpwQ2tpcEZsYWcsCisJT1VUCVVDSEFSICpwQWlyb25ldENlbGxQb3dlckxpbWl0LAorCU9VVCBQRURDQV9QQVJNICAgICAgIHBFZGNhUGFybSwKKwlPVVQgUFFCU1NfTE9BRF9QQVJNICBwUWJzc0xvYWQsCisJT1VUIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCU9VVCBVTE9ORyAqcFJhbGlua0llLAorCU9VVCBVQ0hBUgkJICpwSHRDYXBhYmlsaXR5TGVuLAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCU9VVCBVQ0hBUgkJICpwUHJlTkh0Q2FwYWJpbGl0eUxlbiwKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlPVVQgSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlPVVQgVUNIQVIJCSAqQWRkSHRJbmZvTGVuLAorCU9VVCBBRERfSFRfSU5GT19JRSAqQWRkSHRJbmZvLAorCU9VVCBVQ0hBUiAqTmV3RXh0Q2hhbm5lbCwKKwlPVVQgVVNIT1JUICpMZW5ndGhWSUUsCisJT1VUIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSk7CisKK0JPT0xFQU4gUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyKTsKKworQk9PTEVBTiBQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pOworCitCT09MRUFOIFBlZXJEZWxCQUFjdGlvblNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBVQ0hBUiBXY2lkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuKTsKKworQk9PTEVBTiBNbG1lQXNzb2NSZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFwQWRkciwKKwlPVVQgVVNIT1JUICpDYXBhYmlsaXR5SW5mbywKKwlPVVQgVUxPTkcgKlRpbWVvdXQsCisJT1VUIFVTSE9SVCAqTGlzdGVuSW50dik7CisKK0JPT0xFQU4gTWxtZUF1dGhSZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIsCisJT1VUIFVMT05HICpUaW1lb3V0LAorCU9VVCBVU0hPUlQgKkFsZyk7CisKK0JPT0xFQU4gTWxtZVN0YXJ0UmVxU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgQ0hBUiBTc2lkW10sCisJT1VUIFVDSEFSICpTc2lkbGVuKTsKKworQk9PTEVBTiBQZWVyQXV0aFNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkciwKKwlPVVQgVVNIT1JUICpBbGcsCisJT1VUIFVTSE9SVCAqU2VxLAorCU9VVCBVU0hPUlQgKlN0YXR1cywKKwlPVVQgQ0hBUiBDaGxnVGV4dFtdKTsKKworQk9PTEVBTiBQZWVyQXNzb2NSc3BTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyLAorCU9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKwlPVVQgVVNIT1JUICpwU3RhdHVzLAorCU9VVCBVU0hPUlQgKnBBaWQsCisJT1VUIFVDSEFSIFN1cFJhdGVbXSwKKwlPVVQgVUNIQVIgKnBTdXBSYXRlTGVuLAorCU9VVCBVQ0hBUiBFeHRSYXRlW10sCisJT1VUIFVDSEFSICpwRXh0UmF0ZUxlbiwKKyAgICBPVVQgSFRfQ0FQQUJJTElUWV9JRQkJKnBIdENhcGFiaWxpdHksCisgICAgT1VUIEFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisgICAgT1VUIFVDSEFSCQkJKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIFVDSEFSCQkJKnBBZGRIdEluZm9MZW4sCisgICAgT1VUIFVDSEFSCQkJKnBOZXdFeHRDaGFubmVsT2Zmc2V0LAorCU9VVCBQRURDQV9QQVJNIHBFZGNhUGFybSwKKwlPVVQgVUNIQVIgKnBDa2lwRmxhZyk7CisKK0JPT0xFQU4gUGVlckRpc2Fzc29jU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyMiwKKwlPVVQgVVNIT1JUICpSZWFzb24pOworCitCT09MRUFOIFBlZXJXcGFNZXNzYWdlU2FuaXR5KAorICAgIElOIAlQUlRNUF9BREFQVEVSIAkJcEFkLAorICAgIElOIAlQRUFQT0xfUEFDS0VUIAkJcE1zZywKKyAgICBJTiAJVUxPTkcgCQkJCU1zZ0xlbiwKKyAgICBJTiAJVUNIQVIJCQkJTXNnVHlwZSwKKyAgICBJTiAJTUFDX1RBQkxFX0VOVFJZICAJKnBFbnRyeSk7CisKK0JPT0xFQU4gUGVlckRlYXV0aFNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkcjIsCisJT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBQZWVyUHJvYmVSZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyLAorCU9VVCBDSEFSIFNzaWRbXSwKKwlPVVQgVUNIQVIgKnBTc2lkTGVuKTsKKworQk9PTEVBTiBHZXRUaW1CaXQoCisJSU4gIENIQVIgKlB0ciwKKwlJTiAgVVNIT1JUIEFpZCwKKwlPVVQgVUNIQVIgKlRpbUxlbiwKKwlPVVQgVUNIQVIgKkJjYXN0RmxhZywKKwlPVVQgVUNIQVIgKkR0aW1Db3VudCwKKwlPVVQgVUNIQVIgKkR0aW1QZXJpb2QsCisJT1VUIFVDSEFSICpNZXNzYWdlVG9NZSk7CisKK1VDSEFSIENoYW5uZWxTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgY2hhbm5lbCk7CisKK05ESVNfODAyXzExX05FVFdPUktfVFlQRSBOZXR3b3JrVHlwZUluVXNlU2FuaXR5KAorCUlOIFBCU1NfRU5UUlkgcEJzcyk7CisKK0JPT0xFQU4gTWxtZURlbEJBUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pOworCitCT09MRUFOIE1sbWVBZGRCQVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyKTsKKworVUxPTkcgTWFrZU91dGdvaW5nRnJhbWUoCisJT1VUIENIQVIgKkJ1ZmZlciwKKwlPVVQgVUxPTkcgKkxlbmd0aCwgLi4uKTsKKworVk9JRCAgTGZzckluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVMT05HIFNlZWQpOworCitVQ0hBUiBSYW5kb21CeXRlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBc2ljVXBkYXRlQXV0b0ZhbGxCYWNrVGFibGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcFR4UmF0ZSk7CisKK1ZPSUQgIE1sbWVQZXJpb2RpY0V4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBMaW5rRG93bkV4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBMaW5rVXBFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgU1RBTWxtZVBlcmlvZGljRXhlYygKKwlQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTWxtZUF1dG9TY2FuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBNbG1lVmFsaWRhdGVTU0lEKAorCUlOIFBVQ0hBUiBwU3NpZCwKKwlJTiBVQ0hBUiAgU3NpZExlbik7CisKK1ZPSUQgTWxtZUNoZWNrRm9yUm9hbWluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyAgICBOb3czMik7CisKK1ZPSUQgTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmcoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVMT05HICAgICAgICAgICBOb3cpOworCitWT0lEIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNbG1lU2V0VHhSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFJUTVBfVFhfUkFURV9TV0lUQ0gJcFR4UmF0ZSk7CisKK1ZPSUQgTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFVDSEFSCQkJCSpwcFRhYmxlLAorCUlOIFBVQ0hBUgkJCQlwVGFibGVTaXplLAorCUlOIFBVQ0hBUgkJCQlwSW5pdFR4UmF0ZUlkeCk7CisKK1ZPSUQgTWxtZUNhbGN1bGF0ZUNoYW5uZWxRdWFsaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIE5vdyk7CisKK1ZPSUQgTWxtZUNoZWNrUHNtQ2hhbmdlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HICAgIE5vdzMyKTsKKworVk9JRCBNbG1lU2V0UHNtQml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBwc20pOworCitWT0lEIE1sbWVTZXRUeFByZWFtYmxlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBUeFByZWFtYmxlKTsKKworVk9JRCBVcGRhdGVCYXNpY1JhdGVCaXRtYXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIE1sbWVVcGRhdGVUeFJhdGVzKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiAJQk9PTEVBTgkJIAliTGlua1VwLAorCUlOCVVDSEFSCQkJYXBpZHgpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIE1sbWVVcGRhdGVIdFR4UmF0ZXMoCisJSU4gUFJUTVBfQURBUFRFUiAJCXBBZCwKKwlJTglVQ0hBUgkJCQlhcGlkeCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgICAgUlRNUENoZWNrUmF0ZXMoCisJSU4gICAgICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIE9VVCAgVUNIQVIgICAgICAgICAgIFN1cFJhdGVbXSwKKwlJTiBPVVQgIFVDSEFSICAgICAgICAgICAqU3VwUmF0ZUxlbik7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0JPT0xFQU4gUlRNUENoZWNrQ2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJQ2VudHJhbENoYW5uZWwsCisJSU4gVUNIQVIJCUNoYW5uZWwpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitCT09MRUFOIAlSVE1QQ2hlY2tIdCgKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCVdjaWQsCisJSU4gT1VUCUhUX0NBUEFCSUxJVFlfSUUJCQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiBPVVQJQUREX0hUX0lORk9fSUUJCQkqcEFkZEh0SW5mbyk7CisKK1ZPSUQgU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIEFzaWNCYnBUdW5pbmcxKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljQmJwVHVuaW5nMigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgUlRNUFVwZGF0ZU1sbWVSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworQ0hBUiBSVE1QTWF4UnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBDSEFSCQkJCVJzc2kwLAorCUlOIENIQVIJCQkJUnNzaTEsCisJSU4gQ0hBUgkJCQlSc3NpMik7CisKK1ZPSUQgQXNpY1NldFJ4QW50KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQW50KTsKKworVk9JRCBBc2ljRXZhbHVhdGVSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBUFNEUGVyaW9kaWNFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK0JPT0xFQU4gUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaCgKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSk7CisKK1VDSEFSIFJUTVBTdGFGaXhlZFR4TW9kZSgKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSk7CisKK1ZPSUQgUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygKKwkJVUNIQVIJCQkJZml4ZWRfdHhfbW9kZSwKKwkJUE1BQ19UQUJMRV9FTlRSWQlwRW50cnkpOworCitCT09MRUFOIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkKTsKKworTkRJU19TVEFUVVMgTWxtZUluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE1sbWVIYW5kbGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBNbG1lSGFsdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTWxtZVJlc2V0UmFsaW5rQ291bnRlcnMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEJ1aWxkQ2hhbm5lbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitVQ0hBUiBGaXJzdENoYW5uZWwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitVQ0hBUiBOZXh0Q2hhbm5lbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgY2hhbm5lbCk7CisKK1ZPSUQgQ2hhbmdlVG9DZWxsUG93ZXJMaW1pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCk7CisKK1ZPSUQgUmFpc2VDbG9jaygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUlOVDMyICp4KTsKKworVk9JRCBMb3dlckNsb2NrKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVSU5UMzIgKngpOworCitVU0hPUlQgU2hpZnRJbkJpdHMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFNoaWZ0T3V0Qml0cygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVVNIT1JUIGRhdGEsCisJSU4gIFVTSE9SVCBjb3VudCk7CisKK1ZPSUQgRUVwcm9tQ2xlYW51cCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgRVdEUygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgRVdFTigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1VTSE9SVCBSVE1QX0VFUFJPTV9SRUFEMTYoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCBPZmZzZXQpOworCitWT0lEIFJUTVBfRUVQUk9NX1dSSVRFMTYoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCBPZmZzZXQsCisJSU4gIFVTSE9SVCBEYXRhKTsKKworLy8KKy8vIFByb3RvdHlwZXMgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBydG1wX3RraXAuYworLy8KK1ZPSUQgICAgUlRNUEluaXRUa2lwRW5naW5lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFRLZXksCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlJZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBUQSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBNSUNLZXksCisJSU4gIFBVQ0hBUiAgICAgICAgICBwVFNDLAorCU9VVCBQVUxPTkcgICAgICAgICAgcElWMTYsCisJT1VUIFBVTE9ORyAgICAgICAgICBwSVYzMik7CisKK1ZPSUQgICAgUlRNUEluaXRNSUNFbmdpbmUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5LAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNBLAorCUlOICBVQ0hBUiAgICAgICAgICAgVXNlclByaW9yaXR5LAorCUlOICBQVUNIQVIgICAgICAgICAgcE1JQ0tleSk7CisKK0JPT0xFQU4gUlRNUFRraXBDb21wYXJlTUlDVmFsdWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNBLAorCUlOICBQVUNIQVIgICAgICAgICAgcE1JQ0tleSwKKwlJTglVQ0hBUgkJCVVzZXJQcmlvcml0eSwKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK1ZPSUQgICAgUlRNUENhbGN1bGF0ZU1JQ1ZhbHVlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBFbmNhcCwKKwlJTiAgUENJUEhFUl9LRVkgICAgIHBLZXksCisJSU4JVUNIQVIJCQlhcGlkeCk7CisKK0JPT0xFQU4gUlRNUFRraXBDb21wYXJlTUlDVmFsdWVXaXRoTExDKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcExMQywKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwREEsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU0EsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwTUlDS2V5LAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworVk9JRCAgICBSVE1QVGtpcEFwcGVuZEJ5dGUoCisJSU4gIFBUS0lQX0tFWV9JTkZPICBwVGtpcCwKKwlJTiAgVUNIQVIgICAgICAgICAgIHVDaGFyKTsKKworVk9JRCAgICBSVE1QVGtpcEFwcGVuZCgKKwlJTiAgUFRLSVBfS0VZX0lORk8gIHBUa2lwLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgVUlOVCAgICAgICAgICAgIG5CeXRlcyk7CisKK1ZPSUQgICAgUlRNUFRraXBHZXRNSUMoCisJSU4gIFBUS0lQX0tFWV9JTkZPICBwVGtpcCk7CisKK0JPT0xFQU4gUlRNUFNvZnREZWNyeXB0VEtJUCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJcERhdGEsCisJSU4gVUxPTkcJRGF0YUJ5dGVDbnQsCisJSU4gVUNIQVIgICAgVXNlclByaW9yaXR5LAorCUlOIFBDSVBIRVJfS0VZCXBXcGFLZXkpOworCitCT09MRUFOIFJUTVBTb2Z0RGVjcnlwdEFFUygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJcERhdGEsCisJSU4gVUxPTkcJRGF0YUJ5dGVDbnQsCisJSU4gUENJUEhFUl9LRVkJcFdwYUtleSk7CisKKy8vCisvLyBQcm90b3R5cGVzIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gY21tX2luZm8uYworLy8KK05ESVNfU1RBVFVTIFJUTVBXUEFSZW1vdmVLZXlQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVk9JRCAgICAgICAgICAgcEJ1Zik7CisKK1ZPSUQgICAgUlRNUFdQQVJlbW92ZUFsbEtleXMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitCT09MRUFOIFJUTVBDaGVja1N0clByaW50QWJsZSgKKyAgICBJTiAgQ0hBUiAqcEluUHV0U3RyLAorICAgIElOICBVQ0hBUiBzdHJMZW4pOworCitWT0lEICAgIFJUTVBTZXRQaHlNb2RlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVTE9ORyBwaHltb2RlKTsKKworVk9JRAlSVE1QVXBkYXRlSFRJRSgKKwlJTglSVF9IVF9DQVBBQklMSVRZCSpwUnRIdCwKKwlJTgkJVUNIQVIJCQkJKnBNY3NTZXQsCisJT1VUCQlIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCU9VVAkJQUREX0hUX0lORk9fSUUJCSpwQWRkSHRJbmZvKTsKKworVk9JRAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnNzSWR4LAorCUlOIAlVQ0hBUgkJIAlLZXlJZHgsCisJSU4gCVVDSEFSCQkgCUNpcGhlckFsZywKKwlJTiAJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkpOworCitDSEFSICpHZXRFbmNyeXB0VHlwZSgKKwlDSEFSIGVuYyk7CisKK0NIQVIgKkdldEF1dGhNb2RlKAorCUNIQVIgYXV0aCk7CisKK1ZPSUQgUlRNUElvY3RsR2V0U2l0ZVN1cnZleSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRCBSVE1QSW9jdGxHZXRNYWNUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBzdHJ1Y3QgaXdyZXEgKndycSk7CisKK1ZPSUQgUlRNUEluZGljYXRlV1BBMlN0YXR1cygKKwlJTiAgUFJUTVBfQURBUFRFUiAgcEFkYXB0ZXIpOworCitWT0lECVJUTVBPUE1vZGVTd2l0Y2hpbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEICAgIFJUTVBBZGRCU1NJRENpcGhlcigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglVQ0hBUglBaWQsCisgICAgSU4gIFBORElTXzgwMl8xMV9LRVkgICAgcEtleSwKKyAgICBJTiAgVUNIQVIgICBDaXBoZXJBbGcpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lECVJUTVBTZXRIVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglPSURfU0VUX0hUX1BIWU1PREUgKnBIVFBoeU1vZGUpOworCitWT0lECVJUTVBTZXRJbmRpdmlkdWFsSFQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVDSEFSCQkJCWFwaWR4KTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBSVE1QU2VuZFdpcmVsZXNzRXZlbnQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJRXZlbnRfZmxhZywKKwlJTglQVUNIQVIgCQkJcEFkZHIsCisJSU4gIFVDSEFSCQkJQnNzSWR4LAorCUlOCUNIQVIJCQlSc3NpKTsKKworVk9JRAlOSUNVcGRhdGVDbnRsQ291bnRlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlciwKKwlJTiAgICBVQ0hBUgkJCVN1YlR5cGUsCisJSU4JUFJYV0lfU1RSVUMgCXBSeFdJKTsKKy8vCisvLyBwcm90b3R5cGUgaW4gd3BhLmMKKy8vCitCT09MRUFOIFdwYU1zZ1R5cGVTdWJzdCgKKwlJTiAgVUNIQVIgICBFQVBUeXBlLAorCU9VVCBJTlQJCSpNc2dUeXBlKTsKKworVk9JRCBXcGFQc2tTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAgICAgICAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIFdwYUVBUE9MS2V5QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYVBhaXJNc2cxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYVBhaXJNc2czQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYUdyb3VwTXNnMUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGFNYWNIZWFkZXJJbml0KAorCUlOICAgICAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBPVVQgIFBIRUFERVJfODAyXzExICBwSGRyODAyMTEsCisJSU4gICAgICBVQ0hBUiAgICAgICAgICAgd2VwLAorCUlOICAgICAgUFVDSEFSICAgICAgICAgIHBBZGRyMSk7CisKK1ZPSUQgICAgV3BhMlBhaXJNc2cxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYTJQYWlyTXNnM0FjdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworQk9PTEVBTiBQYXJzZUtleURhdGEoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5RGF0YSwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIEtleURhdGFMZW4sCisJSU4JVUNIQVIJCQliUGFpcmV3aXNlKTsKKworVk9JRCAgICBSVE1QVG9XaXJlbGVzc1N0YSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorICAgIElOICBVSU5UICAgICAgICAgICAgRGF0YUxlbiwKKyAgICBJTglCT09MRUFOCQkJaXM0d2F5RnJhbWUpOworCitWT0lEICAgIEhNQUNfU0hBMSgKKwlJTiAgVUNIQVIgICAqdGV4dCwKKwlJTiAgVUlOVCAgICB0ZXh0X2xlbiwKKwlJTiAgVUNIQVIgICAqa2V5LAorCUlOICBVSU5UICAgIGtleV9sZW4sCisJSU4gIFVDSEFSICAgKmRpZ2VzdCk7CisKK1ZPSUQgICAgUFJGKAorCUlOICBVQ0hBUiAgICprZXksCisJSU4gIElOVCAgICAga2V5X2xlbiwKKwlJTiAgVUNIQVIgICAqcHJlZml4LAorCUlOICBJTlQgICAgIHByZWZpeF9sZW4sCisJSU4gIFVDSEFSICAgKmRhdGEsCisJSU4gIElOVCAgICAgZGF0YV9sZW4sCisJT1VUIFVDSEFSICAgKm91dHB1dCwKKwlJTiAgSU5UICAgICBsZW4pOworCitWT0lEICAgIENDS01QUkYoCisJSU4gIFVDSEFSICAgKmtleSwKKwlJTiAgSU5UICAgICBrZXlfbGVuLAorCUlOICBVQ0hBUiAgICpkYXRhLAorCUlOICBJTlQgICAgIGRhdGFfbGVuLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIElOVCAgICAgbGVuKTsKKworVk9JRCBXcGFDb3VudFBUSygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAqUE1LLAorCUlOICBVQ0hBUiAgICpBTm9uY2UsCisJSU4gIFVDSEFSICAgKkFBLAorCUlOICBVQ0hBUiAgICpTTm9uY2UsCisJSU4gIFVDSEFSICAgKlNBLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIFVJTlQgICAgbGVuKTsKKworVk9JRCAgICBHZW5SYW5kb20oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQkqbWFjQWRkciwKKwlPVVQJVUNIQVIJCQkqcmFuZG9tKTsKKworLy8KKy8vIHByb3RvdHlwZSBpbiBhaXJvbmV0LmMKKy8vCitWT0lEICAgIEFpcm9uZXRTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAgICAgICAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DICBUcmFuc1tdKTsKKworVk9JRCAgICBBaXJvbmV0TXNnQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIEFpcm9uZXRSZXF1ZXN0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIENoYW5uZWxMb2FkUmVxdWVzdEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIEluZGV4KTsKKworVk9JRCAgICBOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgSW5kZXgpOworCitWT0lEICAgIEJlYWNvblJlcXVlc3RBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgQWlyb25ldFJlcG9ydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBDaGFubmVsTG9hZFJlcG9ydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIEluZGV4KTsKKworVk9JRCAgICBOb2lzZUhpc3RSZXBvcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgQWlyb25ldEZpbmFsUmVwb3J0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCAgICBCZWFjb25SZXBvcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgQWlyb25ldEFkZEJlYWNvblJlcG9ydCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4gIFVMT05HICAgICAgICAgICAgICAgSW5kZXgsCisJSU4gIFBNTE1FX1FVRVVFX0VMRU0gICAgcEVsZW0pOworCitWT0lEICAgIEFpcm9uZXRDcmVhdGVCZWFjb25SZXBvcnRGcm9tQnNzVGFibGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgICAgcEFkKTsKKworVk9JRCAgICBEQkdQUklOVF9UWF9SSU5HKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgICBRdWVJZHgpOworCitWT0lEIERCR1BSSU5UX1JYX1JJTkcoCisJSU4gUFJUTVBfQURBUFRFUiAgcEFkKTsKKworQ0hBUiAgICBDb252ZXJ0VG9Sc3NpKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBDSEFSCQkJCVJzc2ksCisJSU4gVUNIQVIgICAgUnNzaU51bWJlcik7CisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgQnVpbGRFZmZlY3RlZENoYW5uZWxMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKworVk9JRCBBUEFzaWNFdmFsdWF0ZVJ4QW50KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworCitWT0lEIEFQQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCisvLworLy8gZnVuY3Rpb24gcHJvdG90eXBlIGluIGNtbV93cGEuYworLy8KK0JPT0xFQU4gUlRNUENoZWNrV1BBZnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQlwRW50cnksCisJSU4gUFVDSEFSIAkJCXBEYXRhLAorCUlOIFVMT05HIAkJCURhdGFCeXRlQ291bnQsCisJSU4gVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgQUVTX0dUS19LRVlfVU5XUkFQKAorCUlOICBVQ0hBUiAgICprZXksCisJT1VUIFVDSEFSICAgKnBsYWludGV4dCwKKwlJTglVQ0hBUgljX2xlbiwKKwlJTiAgVUNIQVIgICAqY2lwaGVydGV4dCk7CisKK0JPT0xFQU4gUlRNUENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCU9VVAlVQ0hBUgkJCSpPZmZzZXQpOworCitCT09MRUFOIFJUTVBQYXJzZUVhcG9sS2V5RGF0YSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBLZXlEYXRhLAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5RGF0YUxlbiwKKwlJTglVQ0hBUgkJCUdyb3VwS2V5SW5kZXgsCisJSU4JVUNIQVIJCQlNc2dUeXBlLAorCUlOCUJPT0xFQU4JCQliV1BBMiwKKwlJTiAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnkpOworCitWT0lECUNvbnN0cnVjdEVhcG9sTXNnKAorCUlOIAlQUlRNUF9BREFQVEVSICAgIAlwQWQsCisgICAgSU4gCVVDSEFSCQkJCVBlZXJBdXRoTW9kZSwKKyAgICBJTiAJVUNIQVIJCQkJUGVlcldlcFN0YXR1cywKKyAgICBJTiAJVUNIQVIJCQkJTXlHcm91cEtleVdlcFN0YXR1cywKKyAgICBJTiAJVUNIQVIJCQkJTXNnVHlwZSwKKyAgICBJTglVQ0hBUgkJCQlEZWZhdWx0S2V5SWR4LAorICAgIElOIAlVQ0hBUgkJCQkqUmVwbGF5Q291bnRlciwKKwlJTiAJVUNIQVIJCQkJKktleU5vbmNlLAorCUlOCVVDSEFSCQkJCSpUeFJTQywKKwlJTglVQ0hBUgkJCQkqUFRLLAorCUlOCVVDSEFSCQkJCSpHVEssCisJSU4JVUNIQVIJCQkJKlJTTklFLAorCUlOCVVDSEFSCQkJCVJTTklFX0xlbiwKKyAgICBPVVQgUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnKTsKKworVk9JRAlDYWxjdWxhdGVNSUMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlQZWVyV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJKlBUSywKKwlPVVQgUEVBUE9MX1BBQ0tFVCAgIHBNc2cpOworCitORElTX1NUQVRVUwlSVE1QU29mdERlY3J5cHRCcm9hZENhc3REYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJCQkJCXBBZCwKKwlJTglSWF9CTEsJCQkJCQkJKnBSeEJsaywKKwlJTiAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgCUdyb3VwQ2lwaGVyLAorCUlOICBQQ0lQSEVSX0tFWQkJCQkJCXBTaGFyZF9rZXkpOworCitWT0lECUNvbnN0cnVjdEVhcG9sS2V5RGF0YSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVBlZXJBdXRoTW9kZSwKKwlJTglVQ0hBUgkJCVBlZXJXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQlHcm91cEtleVdlcFN0YXR1cywKKwlJTiAJVUNIQVIJCQlNc2dUeXBlLAorCUlOCVVDSEFSCQkJRGVmYXVsdEtleUlkeCwKKwlJTglCT09MRUFOCQkJYldQQTJDYXBhYmxlLAorCUlOCVVDSEFSCQkJKlBUSywKKwlJTglVQ0hBUgkJCSpHVEssCisJSU4JVUNIQVIJCQkqUlNOSUUsCisJSU4JVUNIQVIJCQlSU05JRV9MRU4sCisJT1VUIFBFQVBPTF9QQUNLRVQgICBwTXNnKTsKKworVk9JRCBSVE1QTWFrZVJTTklFKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVSU5UICAgICAgICAgICAgQXV0aE1vZGUsCisJSU4gIFVJTlQgICAgICAgICAgICBXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQlhcGlkeCk7CisKKy8vCisvLyBmdW5jdGlvbiBwcm90b3R5cGUgaW4gYXBfd3BhLmMKKy8vCisKK0JPT0xFQU4gQVBXcGFNc2dUeXBlU3Vic3QoCisJSU4gVUNIQVIgICAgRUFQVHlwZSwKKwlPVVQgSU5UICpNc2dUeXBlKSA7CisKK01BQ19UQUJMRV9FTlRSWSAqUEFDSW5xdWlyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUxPTkcgICAgICAgICAgIFdjaWQpOworCitCT09MRUFOIFJUTVBDaGVja01jYXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBFSURfU1RSVUNUICAgICAgZWlkX3B0ciwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnkpOworCitCT09MRUFOIFJUTVBDaGVja1VjYXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBFSURfU1RSVUNUICAgICAgZWlkX3B0ciwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnkpOworCitCT09MRUFOIFJUTVBDaGVja0FVVEgoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUEVJRF9TVFJVQ1QgICAgICBlaWRfcHRyLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSk7CisKK1ZPSUQgV1BBU3RhcnQ0V2F5SFMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCUlOCVVMT05HCQkJVGltZUludGVydmFsKTsKKworVk9JRCBXUEFTdGFydDJXYXlHcm91cEhTKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSk7CisKK1ZPSUQgQVBXcGFFQVBQYWNrZXRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFdwYUVBUE9MU3RhcnRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFdwYUVBUE9MTG9nb2ZmQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBXcGFFQVBPTEtleUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQV3BhRUFQT0xBU0ZBbGVydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIEhhbmRsZUNvdW50ZXJNZWFzdXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSk7CisKK1ZPSUQgUGVlclBhaXJNc2cyQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJQYWlyTXNnNEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnksCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDTVRpbWVyRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIFdQQVJldHJ5RXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIEVucXVldWVTdGFydEZvclBTS0V4ZWMoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBSVE1QSGFuZGxlU1RBS2V5KAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkYXB0ZXIsCisgICAgSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5LAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIFBlZXJHcm91cE1zZzJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOICBQTUFDX1RBQkxFX0VOVFJZIHBFbnRyeSwKKwlJTiAgVk9JRCAgICAgICAgICAgICAqTXNnLAorCUlOICBVSU5UICAgICAgICAgICAgIE1zZ0xlbik7CisKK1ZPSUQgUGFpckRpc0Fzc29jQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnksCisJSU4gIFVTSE9SVCAgICAgICAgICAgUmVhc29uKTsKKworVk9JRCBNbG1lRGVBdXRoQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnksCisJSU4gIFVTSE9SVCAgICAgICAgICAgUmVhc29uKTsKKworVk9JRCBHUkVLRVlQZXJpb2RpY0V4ZWMoCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMxLAorCUlOICBQVk9JRCAgIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiAgUFZPSUQgICBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBDb3VudEdUSygKKwlJTiAgVUNIQVIgICAqUE1LLAorCUlOICBVQ0hBUiAgICpHTm9uY2UsCisJSU4gIFVDSEFSICAgKkFBLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIFVJTlQgICAgbGVuKTsKKworVk9JRCAgICBHZXRTbWFsbCgKKwlJTiAgUFZPSUQgICBwU3JjMSwKKwlJTiAgUFZPSUQgICBwU3JjMiwKKwlPVVQgUFVDSEFSICBvdXQsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCAgICBHZXRMYXJnZSgKKwlJTiAgUFZPSUQgICBwU3JjMSwKKwlJTiAgUFZPSUQgICBwU3JjMiwKKwlPVVQgUFVDSEFSICBvdXQsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCBBUEdlblJhbmRvbSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgVUNIQVIgICAgICAgKnJhbmRvbSk7CisKK1ZPSUQgQUVTX0dUS19LRVlfV1JBUCgKKwlJTiBVQ0hBUiAqa2V5LAorCUlOIFVDSEFSICpwbGFpbnRleHQsCisJSU4gVUNIQVIgcF9sZW4sCisJT1VUIFVDSEFSICpjaXBoZXJ0ZXh0KTsKKworVk9JRCAgICBXcGFTZW5kKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwUGFja2V0LAorICAgIElOICBVTE9ORyAgICAgICAgICAgTGVuKTsKKworVk9JRCAgICBBUFRvV2lyZWxlc3NTdGEoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCUlOICBQVUNIQVIgICAgICAgICAgcEhlYWRlcjgwMl8zLAorCUlOICBVSU5UICAgICAgICAgICAgSGRyTGVuLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVJTlQgICAgICAgICAgICBEYXRhTGVuLAorICAgIElOCUJPT0xFQU4JCQliQ2xlYXJGcmFtZSk7CisKK1ZPSUQgUlRNUEFkZFBNS0lEQ2FjaGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAJCXBBZCwKKwlJTglJTlQJCQkJCQlhcGlkeCwKKwlJTglQVUNIQVIJCQkJcEFkZHIsCisJSU4JVUNIQVIJCQkJCSpQTUtJRCwKKwlJTglVQ0hBUgkJCQkJKlBNSyk7CisKK0lOVCBSVE1QU2VhcmNoUE1LSURDYWNoZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglJTlQJCQkJYXBpZHgsCisJSU4JUFVDSEFSCQlwQWRkcik7CisKK1ZPSUQgUlRNUERlbGV0ZVBNS0lEQ2FjaGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JSU5UCQkJCWFwaWR4LAorCUlOICBJTlQJCQkJaWR4KTsKKworVk9JRCBSVE1QTWFpbnRhaW5QTUtJRENhY2hlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRAlSVE1QU2VuZFRyaWdnZXJGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVk9JRAkJCXBCdWZmZXIsCisJSU4JVUxPTkcJCQlMZW5ndGgsCisJSU4gIFVDSEFSICAgICAgICAgICBUeFJhdGUsCisJSU4JQk9PTEVBTgkJCWJRb3NOdWxsKTsKKworI2lmZGVmIFJUMzB4eAorVk9JRCBSVE1QRmlsdGVyQ2FsaWJyYXRpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisKKy8vdHlwZWRlZiB2b2lkICgqVElNRVJfRlVOQ1RJT04pKHVuc2lnbmVkIGxvbmcpOworCisKKy8qIHRpbWVvdXQgLS0gbXMgKi8KK1ZPSUQgUlRNUF9TZXRQZXJpb2RpY1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIgKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworCitWT0lEIFJUTVBfT1NfSW5pdF9UaW1lcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglORElTX01JTklQT1JUX1RJTUVSICpwVGltZXIsCisJSU4JVElNRVJfRlVOQ1RJT04gZnVuY3Rpb24sCisJSU4JUFZPSUQgZGF0YSk7CisKK1ZPSUQgUlRNUF9PU19BZGRfVGltZXIoCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUgkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKK1ZPSUQgUlRNUF9PU19Nb2RfVGltZXIoCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUgkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKKworVk9JRCBSVE1QX09TX0RlbF9UaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSCSpwVGltZXIsCisJT1VUCUJPT0xFQU4JCQkJICpwQ2FuY2VsbGVkKTsKKworCitWT0lEIFJUTVBfT1NfUmVsZWFzZV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JUFFVRVVFX0VOVFJZICBwRW50cnkpOworCitWT0lEIFJUTVB1c2VjRGVsYXkoCisJSU4JVUxPTkcJdXNlYyk7CisKK05ESVNfU1RBVFVTIG9zX2FsbG9jX21lbSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQJUFVDSEFSICptZW0sCisJSU4JVUxPTkcgIHNpemUpOworCitORElTX1NUQVRVUyBvc19mcmVlX21lbSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglQVUNIQVIgbWVtKTsKKworCit2b2lkIFJUTVBfQWxsb2NhdGVTaGFyZWRNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKworVk9JRCBSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgQWRhcHRlckJsb2NrQWxsb2NhdGVNZW1vcnkoCisJSU4gUFZPSUQJaGFuZGxlLAorCU9VVAlQVk9JRAkqcHBBZCk7CisKK3ZvaWQgUlRNUF9BbGxvY2F0ZVR4RGVzY01lbW9yeSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVSU5UCUluZGV4LAorCUlOCVVMT05HCUxlbmd0aCwKKwlJTglCT09MRUFOCUNhY2hlZCwKKwlPVVQJUFZPSUQJKlZpcnR1YWxBZGRyZXNzLAorCU9VVAlQTkRJU19QSFlTSUNBTF9BRERSRVNTIFBoeXNpY2FsQWRkcmVzcyk7CisKK3ZvaWQgUlRNUF9BbGxvY2F0ZUZpcnN0VHhCdWZmZXIoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUlOVAlJbmRleCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCit2b2lkIFJUTVBfQWxsb2NhdGVNZ210RGVzY01lbW9yeSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCit2b2lkIFJUTVBfQWxsb2NhdGVSeERlc2NNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVSeFBhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCitQTkRJU19QQUNLRVQgUlRNUF9BbGxvY2F0ZVR4UGFja2V0QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCwKKwlJTglCT09MRUFOCUNhY2hlZCwKKwlPVVQJUFZPSUQJKlZpcnR1YWxBZGRyZXNzKTsKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCk7CisKK3ZvaWQgUlRNUF9RdWVyeVBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCBwUGFja2V0LAorCU9VVCBQQUNLRVRfSU5GTyAgKnBQYWNrZXRJbmZvLAorCU9VVCBQVUNIQVIJCSAqcFNyY0J1ZlZBLAorCU9VVAlVSU5UCQkgKnBTcmNCdWZMZW4pOworCit2b2lkIFJUTVBfUXVlcnlOZXh0UGFja2V0SW5mbygKKwlJTiAgUE5ESVNfUEFDS0VUICpwcFBhY2tldCwKKwlPVVQgUEFDS0VUX0lORk8gICpwUGFja2V0SW5mbywKKwlPVVQgUFVDSEFSCQkgKnBTcmNCdWZWQSwKKwlPVVQJVUlOVAkJICpwU3JjQnVmTGVuKTsKKworCitCT09MRUFOIFJUTVBfRmlsbFR4QmxrSW5mbygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBUWF9CTEsgKnBUeEJsayk7CisKKworUFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVAorcnRfZ2V0X3NnX2xpc3RfZnJvbV9wYWNrZXQoUE5ESVNfUEFDS0VUIHBQYWNrZXQsIFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVCAqc2cpOworCisKKyB2b2lkIGFubm91bmNlXzgwMl8zX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCk7CisKKworVUlOVCBCQV9SZW9yZGVyX0FNU0RVX0Fubm5vdW5jZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCk7CisKKworVUlOVCBIYW5kbGVfQU1TRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUsCisJSU4gIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKK3ZvaWQgY29udmVydF84MDJfMTFfdG9fODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXA4MDIzaGRyLAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUsCisJSU4gIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKK1BORVRfREVWIGdldF9uZXRkZXZfZnJvbV9ic3NpZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwT2xkUGt0KTsKKworUE5ESVNfUEFDS0VUIGR1cGxpY2F0ZV9wa3Rfd2l0aF9WTEFOKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdF93aXRoX1dQSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglVSU5UMzIJCQlleHRfaGVhZF9sZW4sCisJSU4JVUlOVDMyCQkJZXh0X3RhaWxfbGVuKTsKKworVUNIQVIgVkxBTl84MDIzX0hlYWRlcl9Db3B5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKwlJTglVSU5UICAgICAgICAgICAgSGRyTGVuLAorCU9VVCBQVUNIQVIJCQlwRGF0YSwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAordm9pZCBiYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUEJBX1JFQ19FTlRSWQlwQkFFbnRyeSwKKwlJTiBVTE9ORwkJCU5vdzMyKTsKKworCitWT0lEIEJBT3JpU2Vzc2lvblNldFVwKAorCQkJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQlJTiBNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwkJCUlOIFVDSEFSCQkJVElELAorCQkJSU4gVVNIT1JUCQkJVGltZU91dCwKKwkJCUlOIFVMT05HCQkJRGVsYXlUaW1lLAorCQkJSU4gQk9PTEVBTgkJaXNGb3JjZWQpOworCitWT0lEIEJBU2Vzc2lvblRlYXJEb3duQUxMKAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJVUNIQVIgV2NpZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0JPT0xFQU4gT1NfTmVlZF9DbG9uZV9QYWNrZXQodm9pZCk7CisKKworVk9JRCBidWlsZF90eF9wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JUFVDSEFSCXBGcmFtZSwKKwlJTglVTE9ORwlGcmFtZUxlbik7CisKKworVk9JRCBCQU9yaVNlc3Npb25UZWFyRG93bigKKwlJTiBPVVQJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCQkJV2NpZCwKKwlJTgkJVUNIQVIJCQlUSUQsCisJSU4JCUJPT0xFQU4JCQliUGFzc2l2ZSwKKwlJTgkJQk9PTEVBTgkJCWJGb3JjZVNlbmQpOworCitWT0lEIEJBUmVjU2Vzc2lvblRlYXJEb3duKAorCUlOIE9VVAlQUlRNUF9BREFQVEVSCXBBZCwKKwlJTgkJVUNIQVIJCQlXY2lkLAorCUlOCQlVQ0hBUgkJCVRJRCwKKwlJTgkJQk9PTEVBTgkJCWJQYXNzaXZlKTsKKworQk9PTEVBTiBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX2luaXQoUFJUTVBfQURBUFRFUiBwQWQsIGludCBudW0pOwordm9pZCBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoUFJUTVBfQURBUFRFUiBwQWQpOworCitVTE9ORyBBdXRvQ2hCc3NJbnNlcnRFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQ2hhbm5lbE5vLAorCUlOIENIQVIgUnNzaSk7CisKK3ZvaWQgQXV0b0NoQnNzVGFibGVJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwordm9pZCBDaGFubmVsSW5mb0luaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCit2b2lkIEF1dG9DaEJzc1RhYmxlRGVzdHJveSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgQ2hhbm5lbEluZm9EZXN0cm95KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUNIQVIgTmV3X0FwQXV0b1NlbGVjdENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCisKKyNpZmRlZiBOSU5URU5ET19BUAorVk9JRAlJbml0TklOVEVORE9fVEFCTEUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitVQ0hBUglDaGVja05JTlRFTkRPX1RBQkxFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCVBDSEFSIHBEU19Tc2lkLAorCVVDSEFSIERTX1NzaWRMZW4sCisJUFVDSEFSIHBEU19BZGRyKTsKKworVUNIQVIJRGVsTklOVEVORE9fRU5UUlkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJVUNIQVIgKiBwRFNfQWRkcik7CisKK1ZPSUQJUlRNUElvY3RsTmludGVuZG9DYXBhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRAlSVE1QSW9jdGxOaW50ZW5kb0dldFRhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRAlSVE1QSW9jdGxOaW50ZW5kb1NldFRhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworI2VuZGlmIC8vIE5JTlRFTkRPX0FQIC8vCisKK0JPT0xFQU4gcnRzdHJtYWN0b2hleCgKKwlJTiBjaGFyICpzMSwKKwlJTiBjaGFyICpzMik7CisKK0JPT0xFQU4gcnRzdHJjYXNlY21wKAorCUlOIGNoYXIgKnMxLAorCUlOIGNoYXIgKnMyKTsKKworY2hhciAqcnRzdHJzdHJ1bmNhc2VjbXAoCisJSU4gY2hhciAqczEsCisJSU4gY2hhciAqczIpOworCitjaGFyICAgICpydHN0cnN0cigKKwlJTgljb25zdCBjaGFyICogczEsCisJSU4JY29uc3QgY2hhciAqIHMyKTsKKworY2hhciAqcnN0cnRvaygKKwlJTiBjaGFyICogcywKKwlJTiBjb25zdCBjaGFyICogY3QpOworCitpbnQgcnRpbmV0X2F0b24oCisJY29uc3QgY2hhciAqY3AsCisJdW5zaWduZWQgaW50ICphZGRyKTsKKworLy8vLy8vLy8vLyBjb21tb24gaW9jdGwgZnVuY3Rpb25zIC8vLy8vLy8vLy8KK0lOVCBTZXRfRHJpdmVyVmVyc2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQ291bnRyeVJlZ2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9XaXJlbGVzc01vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0NoYW5uZWxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X1Nob3J0U2xvdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQkdQcm90ZWN0aW9uX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9UeFByZWFtYmxlX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9SVFNUaHJlc2hvbGRfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X1R4QnVyc3RfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworCisjaWZkZWYgQUdHUkVHQVRJT05fU1VQUE9SVAorSU5UCVNldF9Qa3RBZ2dyZWdhdGVfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworI2VuZGlmCisKK0lOVAlTZXRfSUVFRTgwMjExSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKyNpZmRlZiBEQkcKK0lOVAlTZXRfRGVidWdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmCisKK0lOVAlTaG93X0Rlc2NJbmZvX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9SZXNldFN0YXRDb3VudGVyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorSU5UCVNldF9CQVNldHVwX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9CQURlY2xpbmVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0JBT3JpVGVhckRvd25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0JBUmVjVGVhckRvd25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QndfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TWNzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEdpX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdE9wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRTdGJjX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEh0Y19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TXBkdURlbnNpdHlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRMaW5rQWRhcHRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QW1zZHVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QXV0b0JhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdFByb3RlY3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TWltb1BzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworCitJTlQJU2V0X0ZvcmNlU2hvcnRHSV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfRm9yY2VHRl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRDb21tb25IVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK0lOVAlTZXRfU2VuZFBTTVBBY3Rpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TUlNT1BTbW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKworSU5UCVNldF9IdFR4QkFTaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vRGxzICwJa2F0aHkKK1ZPSUQgUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vQmxvY2sgQUNLCitWT0lEIFF1ZXJ5QkFUQUJMRSgKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBRVUVSWUJBX1RBQkxFIHBCQVQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorSU5UCSAgICBXcGFDaGVja0VhcENvZGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAJcEFkLAorCUlOICBQVUNIQVIJCQkJcEZyYW1lLAorCUlOICBVU0hPUlQJCQkJRnJhbWVMZW4sCisJSU4gIFVTSE9SVAkJCQlPZmZTZXQpOworCitWT0lEICAgIFdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICAgICBiVW5pY2FzdCk7CisKK1ZPSUQgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCk7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKK2ludCB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYygKKwlJTiAgUlRNUF9BREFQVEVSICpwQWQpOworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgSGFuZGxlX0JTU19XaWR0aF9UcmlnZ2VyX0V2ZW50cygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgYnVpbGRfZXh0X2NoYW5uZWxfc3dpdGNoX2llKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEhUX0VYVF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlRfSUUgKnBJRSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworQk9PTEVBTiBBUFJ4RG9uZUludGVycnVwdEhhbmRsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK0JPT0xFQU4gU1RBUnhEb25lSW50ZXJydXB0SGFuZGxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCUJPT0xFQU4JCQlhcmdjKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gQU1QRFUgcGFja2V0IGluZGljYXRpb24KK1ZPSUQgSW5kaWNhdGVfQU1QRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKKy8vIEFNU0RVIHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0FNU0RVX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBOb3JtYWwgbGVnYWN5IFJ4IHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0xlZ2FjeV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworVk9JRCBJbmRpY2F0ZV9FQVBPTF9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKwordm9pZCAgdXBkYXRlX29zX3BhY2tldF9pbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK3ZvaWQgd2xhbl84MDJfMTFfdG9fODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JUFVDSEFSCQkJcEhlYWRlcjgwMl8zLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworVUlOVCBkZWFnZ3JlZ2F0ZV9BTVNEVV9hbm5vdW5jZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlQTkRJU19QQUNLRVQJCXBQYWNrZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLy8gcmVtb3ZlIExMQyBhbmQgZ2V0IDgwMl8zIEhlYWRlcgorI2RlZmluZSAgUlRNUF84MDJfMTFfUkVNT1ZFX0xMQ19BTkRfQ09OVkVSVF9UT184MDJfMyhfcFJ4QmxrLCBfcEhlYWRlcjgwMl8zKQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJUFVDSEFSIF9wUmVtb3ZlZExMQ1NOQVAgPSBOVUxMLCBfcERBLCBfcFNBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9NRVNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX3BEQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlfcFNBID0gKFBVQ0hBUilfcFJ4QmxrLT5wSGVhZGVyICsgc2l6ZW9mKEhFQURFUl84MDJfMTEpOyAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9JTkZSQSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwkJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX3BEQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9ETFMpKQkJCQkJCQkJCVwKKwkJCV9wU0EgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMjsJCQkJCQkJCQkJXAorCQllbHNlCQkJCQkJCQkJCQkJCQkJCQlcCisJCQlfcFNBID0gX3BSeEJsay0+cEhlYWRlci0+QWRkcjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9wREEgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX3BTQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJQ09OVkVSVF9UT184MDJfMyhfcEhlYWRlcjgwMl8zLCBfcERBLCBfcFNBLCBfcFJ4QmxrLT5wRGF0YSwgCQkJCVwKKwkJX3BSeEJsay0+RGF0YVNpemUsIF9wUmVtb3ZlZExMQ1NOQVApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK0JPT0xFQU4gQVBGb3dhcmRXaXJlbGVzc1N0YVRvV2lyZWxlc3NTdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUxPTkcJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgQW5ub3VuY2Vfb3JfRm9yd2FyZF84MDJfM19QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgU3RhX0Fubm91bmNlX29yX0ZvcndhcmRfODAyXzNfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQoX3BBZCwgX3BQYWNrZXQsIF9Gcm9tV2hpY2hCU1MpXAorCQkJU3RhX0Fubm91bmNlX29yX0ZvcndhcmRfODAyXzNfUGFja2V0KF9wQWQsIF9wUGFja2V0LCBfRnJvbVdoaWNoQlNTKTsKKwkJCS8vYW5ub3VuY2VfODAyXzNfcGFja2V0KF9wQWQsIF9wUGFja2V0KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitQTkRJU19QQUNLRVQgRHVwbGljYXRlUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKK1BORElTX1BBQ0tFVCBDbG9uZVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplKTsKKworCisvLyBOb3JtYWwsIEFNUERVIG9yIEFNU0RVCitWT0lEIENtbVJ4bm9uUmFsaW5rRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIENtbVJ4UmFsaW5rRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIFVwZGF0ZV9Sc3NpX1NhbXBsZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBSU1NJX1NBTVBMRQkJKnBSc3NpLAorCUlOIFBSWFdJX1NUUlVDCQlwUnhXSSk7CisKK1BORElTX1BBQ0tFVCBHZXRQYWNrZXRGcm9tUnhSaW5nKAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJCVBSVDI4WFhfUlhEX1NUUlVDCQlwU2F2ZVJ4RCwKKwlPVVQJCUJPT0xFQU4JCQkqcGJSZXNjaGVkdWxlLAorCUlOIE9VVAlVSU5UMzIJCQkqcFJ4UGVuZGluZyk7CisKK1BORElTX1BBQ0tFVCBSVE1QRGVGcmFnbWVudERhdGFGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKworCisKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKy8vZm9yIHNubXAgLCBrYXRoeQordHlwZWRlZiBzdHJ1Y3QgX0RlZmF1bHRLZXlJZHhWYWx1ZQoreworCVVDSEFSCUtleUlkeDsKKwlVQ0hBUglWYWx1ZVsxNl07Cit9IERlZmF1bHRLZXlJZHhWYWx1ZSwgKlBEZWZhdWx0S2V5SWR4VmFsdWU7CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitlbnVtIHsKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtCQk9IDB4MDAwMDAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ob3N0dGltZQk9IDB4MDAwMTAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lCT0gMHgwMDAyMDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWwJPSAweDAwMDMwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcnNzaQkJPSAweDAwMDQwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3EJCT0gMHgwMDA1MDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NpZ25hbAk9IDB4MDAwNjAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ub2lzZQkJPSAweDAwMDcwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZQkJPSAweDAwMDgwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eAkJPSAweDAwMDkwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fZnJtbGVuCT0gMHgwMDBBMDA0NAorfTsKK2VudW0geworCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWUJPSAweDAwCit9OworZW51bSB7CisJUDgwMjExRU5VTV90cnV0aF9mYWxzZQkJCT0gMHgwMCwKKwlQODAyMTFFTlVNX3RydXRoX3RydWUJCQk9IDB4MDEKK307CisKKy8qIERlZmluaXRpb24gZnJvbSBtYWR3aWZpICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFVJTlQzMiBkaWQ7CisgICAgICAgIFVJTlQxNiBzdGF0dXM7CisgICAgICAgIFVJTlQxNiBsZW47CisgICAgICAgIFVJTlQzMiBkYXRhOworfSBwODAyMTFpdGVtX3VpbnQzMl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFVJTlQzMiBtc2djb2RlOworICAgICAgICBVSU5UMzIgbXNnbGVuOworI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYIDE2CisgICAgICAgIFVJTlQ4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgaG9zdHRpbWU7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgbWFjdGltZTsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCBjaGFubmVsOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IHJzc2k7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3Qgc3E7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3Qgc2lnbmFsOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IG5vaXNlOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IHJhdGU7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgaXN0eDsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCBmcm1sZW47Cit9IHdsYW5fbmdfcHJpc20yX2hlYWRlcjsKKworLyogVGhlIHJhZGlvIGNhcHR1cmUgaGVhZGVyIHByZWNlZGVzIHRoZSA4MDIuMTEgaGVhZGVyLiAqLwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9pZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHsKKyAgICBVSU5UOAlpdF92ZXJzaW9uOwkvKiBWZXJzaW9uIDAuIE9ubHkgaW5jcmVhc2VzCisJCQkJICogZm9yIGRyYXN0aWMgY2hhbmdlcywKKwkJCQkgKiBpbnRyb2R1Y3Rpb24gb2YgY29tcGF0aWJsZQorCQkJCSAqIG5ldyBmaWVsZHMgZG9lcyBub3QgY291bnQuCisJCQkJICovCisgICAgVUlOVDgJaXRfcGFkOworICAgIFVJTlQxNiAgICAgaXRfbGVuOyAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgd2hvbGUKKwkJCQkgKiBoZWFkZXIgaW4gYnl0ZXMsIGluY2x1ZGluZworCQkJCSAqIGl0X3ZlcnNpb24sIGl0X3BhZCwKKwkJCQkgKiBpdF9sZW4sIGFuZCBkYXRhIGZpZWxkcy4KKwkJCQkgKi8KKyAgICBVSU5UMzIgICBpdF9wcmVzZW50OwkvKiBBIGJpdG1hcCB0ZWxsaW5nIHdoaWNoCisJCQkJCSAqIGZpZWxkcyBhcmUgcHJlc2VudC4gU2V0IGJpdCAzMQorCQkJCQkgKiAoMHg4MDAwMDAwMCkgdG8gZXh0ZW5kIHRoZQorCQkJCQkgKiBiaXRtYXAgYnkgYW5vdGhlciAzMiBiaXRzLgorCQkJCQkgKiBBZGRpdGlvbmFsIGV4dGVuc2lvbnMgYXJlIG1hZGUKKwkJCQkJICogYnkgc2V0dGluZyBiaXQgMzEuCisJCQkJCSAqLworfWllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgOworCitlbnVtIGllZWU4MDIxMV9yYWRpb3RhcF90eXBlIHsKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCA9IDAsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTID0gMSwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfUkFURSA9IDIsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwgPSAzLAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9GSFNTID0gNCwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCA9IDUsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSA9IDYsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWSA9IDcsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OID0gOCwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT04gPSA5LAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVIgPSAxMCwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSA9IDExLAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgPSAxMiwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgPSAxMworfTsKKworI2RlZmluZSBXTEFOX1JBRElPVEFQX1BSRVNFTlQgKAkJCVwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkJfAlcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CVwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgIHwgCVwKKwkgMCkKKwordHlwZWRlZiBzdHJ1Y3QgX3dsYW5fcmFkaW90YXBfaGVhZGVyIHsKKwlpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHd0X2loZHI7CisJSU5UNjQgd3RfdHNmdDsKKwlVSU5UOCB3dF9mbGFnczsKKwlVSU5UOCB3dF9yYXRlOworfSB3bGFuX3JhZGlvdGFwX2hlYWRlcjsKKy8qIERlZmluaXRpb24gZnJvbSBtYWR3aWZpICovCisKK3ZvaWQgc2VuZF9tb25pdG9yX3BhY2tldHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsayk7CisKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTIKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBxdWVyeSAvcHJvYworc3RydWN0IGl3X3N0YXRpc3RpY3MgKnJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMoCisgICAgSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworI2VuZGlmCisKK1ZPSUQgICAgUlRNUFNldERlc2lyZWRSYXRlcygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBMT05HICAgICAgICAgICAgUmF0ZXMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitJTlQJU2V0X0ZpeGVkVHhNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitJTlQJU2V0X09wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworc3RhdGljIGlubGluZSBjaGFyKiBHZXRQaHlNb2RlKAorCWludCBNb2RlKQoreworCXN3aXRjaChNb2RlKQorCXsKKwkJY2FzZSBNT0RFX0NDSzoKKwkJCXJldHVybiAiQ0NLIjsKKworCQljYXNlIE1PREVfT0ZETToKKwkJCXJldHVybiAiT0ZETSI7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgTU9ERV9IVE1JWDoKKwkJCXJldHVybiAiSFRNSVgiOworCisJCWNhc2UgTU9ERV9IVEdSRUVORklFTEQ6CisJCQlyZXR1cm4gIkdSRUVOIjsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAiTi9BIjsKKwl9Cit9CisKKworc3RhdGljIGlubGluZSBjaGFyKiBHZXRCVygKKwlpbnQgQlcpCit7CisJc3dpdGNoKEJXKQorCXsKKwkJY2FzZSBCV18xMDoKKwkJCXJldHVybiAiMTBNIjsKKworCQljYXNlIEJXXzIwOgorCQkJcmV0dXJuICIyME0iOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIEJXXzQwOgorCQkJcmV0dXJuICI0ME0iOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlkZWZhdWx0OgorCQkJcmV0dXJuICJOL0EiOworCX0KK30KKworCitWT0lEIFJUMjh4eFRocmVhZFRlcm1pbmF0ZSgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK0JPT0xFQU4gUlQyOFhYQ2hpcHNldENoZWNrKAorCUlOIHZvaWQgKl9kZXZfcCk7CisKK0JPT0xFQU4gUlQyOFhYTmV0RGV2SW5pdCgKKwlJTiB2b2lkIAkJCQkqX2Rldl9wLAorCUlOIHN0cnVjdCAgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkKTsKKworQk9PTEVBTiBSVDI4WFhQcm9iZVBvc3RDb25maWcoCisJSU4gdm9pZCAJCQkJKl9kZXZfcCwKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkLAorCUlOIElOVDMyCQkJCWFyZ2MpOworCitWT0lEIFJUMjhYWERNQURpc2FibGUoCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCk7CisKK1ZPSUQgUlQyOFhYRE1BRW5hYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpOworCitWT0lEIFJUMjh4eF9VcGRhdGVCZWFjb25Ub0FzaWMoCisJSU4gUlRNUF9BREFQVEVSICogcEFkLAorCUlOIElOVCBhcGlkeCwKKwlJTiBVTE9ORyBCZWFjb25MZW4sCisJSU4gVUxPTkcgVXBkYXRlUG9zKTsKKworSU5UIHJ0Mjh4eF9pb2N0bCgKKwlJTglzdHJ1Y3QgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTglPVVQJc3RydWN0IGlmcmVxCSpycSwKKwlJTglJTlQJCQljbWQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0lOVCBydDI4eHhfc3RhX2lvY3RsKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOCU9VVAlzdHJ1Y3QgaWZyZXEJKnJxLAorCUlOCUlOVAkJCWNtZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK0JPT0xFQU4gUlQyOFhYU2VjdXJpdHlLZXlBZGQoCisJSU4JCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTgkJVUxPTkcJCQkJYXBpZHgsCisJSU4JCVVMT05HCQkJCUtleUlkeCwKKwlJTgkJTUFDX1RBQkxFX0VOVFJZIAkqcEVudHJ5KTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworUE5ESVNfUEFDS0VUIEdldFBhY2tldEZyb21SeFJpbmcoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAkJUFJUMjhYWF9SWERfU1RSVUMJcFNhdmVSeEQsCisJT1VUCQlCT09MRUFOCQkJKnBiUmVzY2hlZHVsZSwKKwlJTiBPVVQJVUlOVDMyCQkJKnBSeFBlbmRpbmcpOworCisKK3ZvaWQga2lsbF90aHJlYWRfdGFzayhQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKworVk9JRCBBc2ljVHVybk9mZlJGQ2xrKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOCVVDSEFSICAgICAgICAgICBDaGFubmVsKTsKKworVk9JRCBBc2ljVHVybk9uUkZDbGsoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkLAorCUlOCVVDSEFSCQkJQ2hhbm5lbCk7CisKKyNpZmRlZiBSVDMweHgKK05UU1RBVFVTIFJUMzB4eFdyaXRlUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJlZ0lELAorCUlOCVVDSEFSCQkJVmFsdWUpOworCitOVFNUQVRVUyBSVDMweHhSZWFkUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJlZ0lELAorCUlOCVBVQ0hBUgkJCXBWYWx1ZSk7CisKKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLQorVUNIQVIgZUZ1c2VSZWFkUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSk7CisKK1ZPSUQgZUZ1c2VSZWFkUGh5c2ljYWwoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisgIAlJTglQVVNIT1JUIGxwSW5CdWZmZXIsCisgIAlJTglVTE9ORyBuSW5CdWZmZXJTaXplLAorICAJT1VUCVBVU0hPUlQgbHBPdXRCdWZmZXIsCisgIAlJTglVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKTsKKworTlRTVEFUVVMgZUZ1c2VSZWFkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJTGVuZ3RoKTsKKworVk9JRCBlRnVzZVBoeXNpY2FsV3JpdGVSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCU9VVAlVU0hPUlQqIHBEYXRhKTsKKworTlRTVEFUVVMgZUZ1c2VXcml0ZVJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJSU4JVVNIT1JUKiBwRGF0YSk7CisKK1ZPSUQgZUZ1c2VXcml0ZVBoeXNpY2FsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorICAJUFVTSE9SVCBscEluQnVmZmVyLAorCVVMT05HIG5JbkJ1ZmZlclNpemUsCisgIAlQVUNIQVIgbHBPdXRCdWZmZXIsCisgIAlVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKTsKKworTlRTVEFUVVMgZUZ1c2VXcml0ZSgKKyAgIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworSU5UIHNldF9lRnVzZUdldEZyZWVCbG9ja0NvdW50X1Byb2MoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIHNldF9lRnVzZWR1bXBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgc2V0X2VGdXNlTG9hZEZyb21CaW5fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitOVFNUQVRVUyBlRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJSU4JVVNIT1JUKiBwRGF0YSk7CisKK1ZPSUQgZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCU9VVAlVU0hPUlQqIHBEYXRhKTsKKworTkRJU19TVEFUVVMgTklDTG9hZEVFUFJPTSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gYk5lZWRMb2FkRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgUlQzMHh4CisvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cAorVk9JRCBSVDMweHhMb2FkUkZOb3JtYWxNb2RlU2V0dXAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkKTsKKworVk9JRCBSVDMweHhMb2FkUkZTbGVlcE1vZGVTZXR1cCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQpOworCitWT0lEIFJUMzB4eFJldmVyc2VSRlNsZWVwTW9kZVNldHVwKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCk7CisvLyBlbmQgam9obmxpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNpZmRlZiBSVDI4NzAKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gcnR1c2JfYnVsay5jCisvLworVk9JRAlSVFVTQkluaXRUeERlc2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYX0NPTlRFWFQJCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCXVzYl9jb21wbGV0ZV90CUZ1bmMpOworCitWT0lECVJUVVNCSW5pdEhUVHhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIVF9UWF9DT05URVhUCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVMT05HCQkJQnVsa091dFNpemUsCisJSU4JdXNiX2NvbXBsZXRlX3QJRnVuYyk7CisKK1ZPSUQJUlRVU0JJbml0UnhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBSWF9DT05URVhUCQlwUnhDb250ZXh0KTsKKworVk9JRCBSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkJ1bGtPdXREYXRhUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVQ0hBUgkJCUluZGV4KTsKKworVk9JRCBSVFVTQkJ1bGtPdXROdWxsRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCQnVsa091dFJUU0ZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCQnVsa091dE1MTUVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCk7CisKK1ZPSUQgUlRVU0JCdWxrT3V0UHNQb2xsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQktpY2tCdWxrT3V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRAlSVFVTQkJ1bGtSZWNlaXZlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBEb0J1bGtJbigKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlRVU0JJbml0UnhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dCk7CisKK1ZPSUQgUlRVU0JCdWxrUnhIYW5kbGUoCisJSU4gdW5zaWduZWQgbG9uZyBkYXRhKTsKKworLy8KKy8vIEZ1bmN0aW9uIFByb3RvdHlwZSBpbiBydHVzYl9pby5jCisvLworTlRTVEFUVVMgUlRVU0JNdWx0aVJlYWQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCU9VVAlQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlsZW5ndGgpOworCitOVFNUQVRVUyBSVFVTQk11bHRpV3JpdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCk7CisKK05UU1RBVFVTIFJUVVNCTXVsdGlXcml0ZV9PbmVCeXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglQVUNIQVIJCQlwRGF0YSk7CisKK05UU1RBVFVTIFJUVVNCUmVhZEJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JUFVDSEFSCQkJcFZhbHVlKTsKKworTlRTVEFUVVMgUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JVUNIQVIJCQlWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCV3JpdGVSRlJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVJTlQzMgkJCVZhbHVlKTsKKworTlRTVEFUVVMgUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVSU5UMzIJCQlUcmFuc2ZlckZsYWdzLAorCUlOCVVDSEFSCQkJUmVzZXJ2ZWRCaXRzLAorCUlOCVVDSEFSCQkJUmVxdWVzdCwKKwlJTglVU0hPUlQJCQlWYWx1ZSwKKwlJTglVU0hPUlQJCQlJbmRleCwKKwlJTglQVk9JRAkJCVRyYW5zZmVyQnVmZmVyLAorCUlOCVVJTlQzMgkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKKworTlRTVEFUVVMgUlRVU0JSZWFkRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworTlRTVEFUVVMgUlRVU0JXcml0ZUVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworVk9JRCBSVFVTQlB1dFRvU2xlZXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitOVFNUQVRVUyBSVFVTQldha2VVcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JJbml0aWFsaXplQ21kUSgKKwlJTglQQ21kUQljbWRxKTsKKworTkRJU19TVEFUVVMJUlRVU0JFbnF1ZXVlQ21kRnJvbU5kaXMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTkRJU19PSUQJCU9pZCwKKwlJTglCT09MRUFOCQkJU2V0SW5mb3JtYXRpb24sCisJSU4JUFZPSUQJCQlwSW5mb3JtYXRpb25CdWZmZXIsCisJSU4JVUlOVDMyCQkJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCitORElTX1NUQVRVUyBSVFVTQkVucXVldWVJbnRlcm5hbENtZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBORElTX09JRAkJCU9pZCwKKwlJTiBQVk9JRAkJCXBJbmZvcm1hdGlvbkJ1ZmZlciwKKwlJTiBVSU5UMzIJCQlJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCk7CisKK1ZPSUQgUlRVU0JEZXF1ZXVlQ21kKAorCUlOCVBDbWRRCQljbWRxLAorCU9VVAlQQ21kUUVsbXQJKnBjbWRxZWxtdCk7CisKK0lOVCBSVFVTQkNtZFRocmVhZCgKKwlJTiBPVVQgUFZPSUQgQ29udGV4dCk7CisKK0lOVCBUaW1lclFUaHJlYWQoCisJSU4gT1VUIFBWT0lEIENvbnRleHQpOworCitSVDI4NzBfVElNRVJfRU5UUlkgKlJUMjg3MF9UaW1lclFfSW5zZXJ0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcik7CisKK0JPT0xFQU4gUlQyODcwX1RpbWVyUV9SZW1vdmUoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gUkFMSU5LX1RJTUVSX1NUUlVDVCAqcFRpbWVyKTsKKwordm9pZCBSVDI4NzBfVGltZXJRX0V4aXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCit2b2lkIFJUMjg3MF9UaW1lclFfSW5pdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlQyODcwX0Jzc0JlYWNvbkV4aXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25TdG9wKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uU3RhcnQoCisJSU4gUlRNUF9BREFQVEVSICogcEFkKTsKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uSW5pdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlQyODcwX1dhdGNoRG9nKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKworTlRTVEFUVVMgUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglVSU5UMzIJCQlWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCU2luZ2xlV3JpdGUoCisJSU4gCVJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVVNIT1JUCQkJVmFsdWUpOworCitOVFNUQVRVUyBSVFVTQkZpcm13YXJlUnVuKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworTlRTVEFUVVMgUlRVU0JGaXJtd2FyZVdyaXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUgkJcEZ3SW1hZ2UsCisJSU4gVUxPTkcJCUZ3TGVuKTsKKworTlRTVEFUVVMJUlRVU0JGaXJtd2FyZU9wbW9kZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSk7CisKK05UU1RBVFVTCVJUVVNCVmVuZGVyUmVzZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitORElTX1NUQVRVUyBSVFVTQlNldEhhcmRXYXJlUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVk9JRAkJCXBCdWYpOworCitORElTX1NUQVRVUyBSVFVTQlF1ZXJ5SGFyZFdhcmVSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCVBWT0lECQkJcEJ1Zik7CisKK1ZPSUQgQ01ESGFuZGxlcigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKKworTkRJU19TVEFUVVMJIENyZWF0ZVRocmVhZHMoCisJSU4Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgKTsKKworCitWT0lEIE1hY1RhYmxlSW5pdGlhbGl6ZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTWxtZVNldFBzbSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgcHNtKTsKKworTkRJU19TVEFUVVMgUlRNUFdQQUFkZEtleVByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBWT0lEICAgICAgICAgICBwQnVmKTsKKworVk9JRCBBc2ljUnhBbnRFdmFsQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwordm9pZCBhcHBlbmRfcGt0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCU9VVCAgUE5ESVNfUEFDS0VUCSpwcFBhY2tldCk7CisKK1VJTlQgZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUpOworCitORElTX1NUQVRVUwlSVE1QQ2hlY2tSeEVycm9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIRUFERVJfODAyXzExCXBIZWFkZXIsCisJSU4JUFJYV0lfU1RSVUMJcFJ4V0ksCisJSU4JUFJUMjhYWF9SWERfU1RSVUMJcFJ4SU5GTyk7CisKKworVk9JRCBSVFVTQk1sbWVIYXJkVHJhbnNtaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE1HTVRfU1RSVUMJCXBNZ210KTsKKworSU5UIE1sbWVUaHJlYWQoCisJSU4gUFZPSUQgQ29udGV4dCk7CisKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gcnR1c2JfZGF0YS5jCisvLworTkRJU19TVEFUVVMJUlRVU0JGcmVlRGVzY3JpcHRvclJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVJTlQzMgkJCU51bWJlclJlcXVpcmVkKTsKKworCitCT09MRUFOCVJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJQnVsa091dFBpcGVJZCk7CisKKworVk9JRCBSVE1QV3JpdGVUeEluZm8oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYSU5GT19TVFJVQyAJcFR4SW5mbywKKwlJTgkgIFVTSE9SVAkJVVNCRE1BcGt0TGVuLAorCUlOCSAgQk9PTEVBTgkJYldpdiwKKwlJTgkgIFVDSEFSCQkJUXVldWVTZWwsCisJSU4JICBVQ0hBUgkJCU5leHRWYWxpZCwKKwlJTgkgIFVDSEFSCQkJVHhCdXJzdCk7CisKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gY21tX2RhdGFfMjg3MC5jCisvLworVVNIT1JUIFJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JQk9PTEVBTgkJCWJJc0xhc3QsCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVVNIT1JUIFJ0bXBVU0JfV3JpdGVTaW5nbGVUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JQk9PTEVBTgkJCWJJc0xhc3QsCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVVNIT1JUCVJ0bXBVU0JfV3JpdGVGcmFnVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhZ051bSwKKwlPVVQJVVNIT1JUCQkJKkZyZWVOdW1iZXIpOworCitVU0hPUlQgUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhbWVOdW0sCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVk9JRCBSdG1wVVNCX0ZpbmFsV3JpdGVUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JVVNIT1JUCQkJdG90YWxNUERVU2l6ZSwKKwlJTglVU0hPUlQJCQlUeElkeCk7CisKK1ZPSUQgUnRtcFVTQkRhdGFMYXN0VHhJZHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlRdWVJZHgsCisJSU4JVVNIT1JUCQkJVHhJZHgpOworCitWT0lEIFJ0bXBVU0JEYXRhS2lja091dCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJUXVlSWR4KTsKKworCitpbnQgUnRtcFVTQk1nbXRLaWNrT3V0KAorCUlOIFJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTiBVQ0hBUiAJCQlRdWVJZHgsCisJSU4gUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOIFBVQ0hBUgkJCXBTcmNCdWZWQSwKKwlJTiBVSU5UIAkJCVNyY0J1Zkxlbik7CisKK1ZPSUQgUnRtcFVTQk51bGxGcmFtZUtpY2tPdXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVUNIQVIJCVF1ZUlkeCwKKwlJTiBVQ0hBUgkJKnBOdWxsRnJhbWUsCisJSU4gVUlOVDMyCQlmcmFtZUxlbik7CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY0ZvcmNlV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gICAgICAgYkZyb21UeCk7CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApOworCitWT0lEIFJUMjh4eFVzYk1sbWVSYWRpb09uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBSVDI4eHhVc2JNbG1lUmFkaW9PRkYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1ZPSUQgUUJTU19Mb2FkSW5pdCgKKyAJSU4JCVJUTVBfQURBUFRFUgkqcEFkKTsKKworVUlOVDMyIFFCU1NfTG9hZEVsZW1lbnRBcHBlbmQoCisgCUlOCQlSVE1QX0FEQVBURVIJKnBBZCwKKwlPVVQJCVVJTlQ4CQkJKmJ1Zl9wKTsKKworVk9JRCBRQlNTX0xvYWRVcGRhdGUoCisgCUlOCQlSVE1QX0FEQVBURVIJKnBBZCk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworSU5UIFJUTVBTaG93Q2ZnVmFsdWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcE5hbWUsCisJSU4JUFVDSEFSCQkJcEJ1Zik7CisKK1BDSEFSICAgUlRNUEdldFJhbGlua0F1dGhNb2RlU3RyKAorICAgIElOICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFIGF1dGhNb2RlKTsKKworUENIQVIgICBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKAorICAgIElOICBVU0hPUlQgZW5jcnlNb2RlKTsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgQXNpY1N0YUJicFR1bmluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gU3RhQWRkTWFjVGFibGVFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSwKKwlJTiAgVUNIQVIJCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcywKKwlJTiAgSFRfQ0FQQUJJTElUWV9JRQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiAgVUNIQVIJCQkJSHRDYXBhYmlsaXR5TGVuLAorCUlOICBVU0hPUlQgICAgICAgIAkJQ2FwYWJpbGl0eUluZm8pOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit2b2lkIFJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSZVN5bmNCZWFjb25UaW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QU2V0QUdDSW5pdFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQmFuZFdpZHRoKTsKKworaW50IHJ0Mjh4eF9jbG9zZShJTiBQTkVUX0RFViBkZXYpOworaW50IHJ0Mjh4eF9vcGVuKElOIFBORVRfREVWIGRldik7CisKK19faW5saW5lIElOVCBWSVJUVUFMX0lGX1VQKFBSVE1QX0FEQVBURVIgcEFkKQoreworZXh0ZXJuIFZPSUQgTWVzaE1ha2VCZWFjb24oSU4gUFJUTVBfQURBUFRFUiBwQWQsIElOIFVDSEFSIGlkeCk7CitleHRlcm4gVk9JRCBNZXNoVXBkYXRlQmVhY29uRnJhbWUoSU4gUFJUTVBfQURBUFRFUiBwQWQsIElOIFVDSEFSIGlkeCk7CisKKwlpZiAoVklSVFVBTF9JRl9OVU0ocEFkKSA9PSAwKQorCXsKKwkJaWYgKHJ0Mjh4eF9vcGVuKHBBZC0+bmV0X2RldikgIT0gMCkKKwkJCXJldHVybiAtMTsKKwl9CisJZWxzZQorCXsKKwl9CisJVklSVFVBTF9JRl9JTkMocEFkKTsKKwlyZXR1cm4gMDsKK30KKworX19pbmxpbmUgVk9JRCBWSVJUVUFMX0lGX0RPV04oUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVklSVFVBTF9JRl9ERUMocEFkKTsKKwlpZiAoVklSVFVBTF9JRl9OVU0ocEFkKSA9PSAwKQorCQlydDI4eHhfY2xvc2UocEFkLT5uZXRfZGV2KTsKKwlyZXR1cm47Cit9CisKKworI2VuZGlmICAvLyBfX1JUTVBfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9ja2lwbWljLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfY2tpcG1pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDk0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfY2tpcG1pYy5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfY2tpcG1pYy5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisqLworI2lmbmRlZglfX1JUTVBfQ0tJUE1JQ19IX18KKyNkZWZpbmUJX19SVE1QX0NLSVBNSUNfSF9fCisKK3R5cGVkZWYJc3RydWN0CV9NSUNfQ09OVEVYVAl7CisJLyogLS0tIE1NSCBjb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJVUNIQVIJCUNLWzE2XTsJCQkJLyogdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJVUNIQVIJCWNvZWZmaWNpZW50WzE2XTsJLyogY3VycmVudCBhZXMgY291bnRlciBtb2RlIGNvZWZmaWNpZW50cyAgICAgICovCisJVUxPTkdMT05HCWFjY3VtOwkJCQkvKiBhY2N1bXVsYXRlZCBtaWMsIHJlZHVjZWQgdG8gdTMyIGluIGZpbmFsKCkgKi8KKwlVSU5UCQlwb3NpdGlvbjsJCQkvKiBjdXJyZW50IHBvc2l0aW9uIChieXRlIG9mZnNldCkgaW4gbWVzc2FnZSAgKi8KKwlVQ0hBUgkJcGFydFs0XTsJCQkvKiBmb3IgY29udmVyc2lvbiBvZiBtZXNzYWdlIHRvIHUzMiBmb3IgbW1oICAgKi8KK30JTUlDX0NPTlRFWFQsICpQTUlDX0NPTlRFWFQ7CisKK1ZPSUQJQ0tJUF9rZXlfcGVybXV0ZSgKKwlPVVQJVUNIQVIJKlBLLAkJCS8qIG91dHB1dCBwZXJtdXRlZCBrZXkgKi8KKwlJTglVQ0hBUgkqQ0ssCQkJLyogaW5wdXQgQ0tJUCBrZXkgKi8KKwlJTglVQ0hBUgl0b0RzRnJvbURzLAkJLyogaW5wdXQgdG9Ecy9Gcm9tRHMgYml0cyAqLworCUlOCVVDSEFSCSpwaXYpOwkJCS8qIGlucHV0IHBvaW50ZXIgdG8gSVYgKi8KKworVk9JRAlSVE1QQ2tpcE1pY0luaXQoCisJSU4JUE1JQ19DT05URVhUCQlwQ29udGV4dCwKKwlJTglQVUNIQVIJCQkJQ0spOworCitWT0lEIFJUTVBNaWNVcGRhdGUoCisgICAgSU4gIFBNSUNfQ09OVEVYVCAgICAgICAgcENvbnRleHQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgcE9jdGV0cywKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICBsZW4pOworCitVTE9ORyBSVE1QTWljR2V0Q29lZmZpY2llbnQoCisgICAgSU4gIFBNSUNfQ09OVEVYVCAgICAgICAgIHBDb250ZXh0KTsKKworVk9JRCB4b3JfMTI4KAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGEsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYiwKKyAgICBPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitVQ0hBUiBSVE1QQ2tpcFNib3goCisgICAgSU4gIFVDSEFSICAgICAgICAgICAgICAgYSk7CisKK1ZPSUQgeG9yXzMyKAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGEsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYiwKKyAgICBPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitWT0lEIG5leHRfa2V5KAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGtleSwKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICByb3VuZCk7CisKK1ZPSUQgYnl0ZV9zdWIoCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgaW4sCisgICAgT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBzaGlmdF9yb3coCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgaW4sCisgICAgT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBtaXhfY29sdW1uKAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorICAgIE9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgUlRNUEFlc0VuY3J5cHQoCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAga2V5LAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGRhdGEsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgY2lwaGVydGV4dCk7CisKK1ZPSUQgUlRNUE1pY0ZpbmFsKAorICAgIElOICBQTUlDX0NPTlRFWFQgICAgICAgIHBDb250ZXh0LAorICAgIE9VVCBVQ0hBUiAgICAgICAgICAgICAgIGRpZ2VzdFs0XSk7CisKK1ZPSUQgUlRNUENraXBJbnNlcnRDTUlDKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIE9VVCBQVUNIQVIgICAgICAgICAgcE1JQywKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHA4MDIxMWhkciwKKyAgICBJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQsCisgICAgSU4gIFBDSVBIRVJfS0VZICAgICBwS2V5LAorICAgIElOICBQVUNIQVIgICAgICAgICAgbWljX3NuYXApOworCisjZW5kaWYgLy9fX1JUTVBfQ0tJUE1JQ19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk5ZjdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wX2RlZi5oCkBAIC0wLDAgKzEsMTU1OSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBydG1wX2RlZi5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBNaW5pcG9ydCByZWxhdGVkIGRlZmluaXRpb24gaGVhZGVyCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFBhdWwgTGluICAgIDA4LTAxLTIwMDIgICAgY3JlYXRlZAorICAgIEpvaG4gQ2hhbmcgIDA4LTA1LTIwMDMgICAgYWRkIGRlZmluaXRpb24gZm9yIDExZyAmIG90aGVyIGRyYWZ0cworKi8KKyNpZm5kZWYgX19SVE1QX0RFRl9IX18KKyNkZWZpbmUgX19SVE1QX0RFRl9IX18KKworI2luY2x1ZGUgIm9pZC5oIgorCisjdW5kZWYgQVBfV1NDX0lOQ0xVREVECisjdW5kZWYgU1RBX1dTQ19JTkNMVURFRAorI3VuZGVmIFdTQ19JTkNMVURFRAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmIGRlZmluZWQoQVBfV1NDX0lOQ0xVREVEKSB8fCBkZWZpbmVkKFNUQV9XU0NfSU5DTFVERUQpCisjZGVmaW5lIFdTQ19JTkNMVURFRAorI2VuZGlmCisvLworLy8gIERlYnVnIGluZm9ybWF0aW9uIHZlcmJvc2l0eTogbG93ZXIgdmFsdWVzIGluZGljYXRlIGhpZ2hlciB1cmdlbmN5CisvLworI2RlZmluZSBSVF9ERUJVR19PRkYgICAgICAgIDAKKyNkZWZpbmUgUlRfREVCVUdfRVJST1IgICAgICAxCisjZGVmaW5lIFJUX0RFQlVHX1dBUk4gICAgICAgMgorI2RlZmluZSBSVF9ERUJVR19UUkFDRSAgICAgIDMKKyNkZWZpbmUgUlRfREVCVUdfSU5GTyAgICAgICA0CisjZGVmaW5lIFJUX0RFQlVHX0xPVUQgICAgICAgNQorCisjZGVmaW5lIE5JQ19UQUcgICAgICAgICAgICAgKChVTE9ORyknMDY4MicpCisjZGVmaW5lIE5JQ19EQkdfU1RSSU5HICAgICAgKCIqKlJUMjh4eCoqIikKKworI2lmZGVmIFNOTVBfU1VQUE9SVAorLy8gZm9yIHNubXAKKy8vIHRvIGdldCBtYW51ZmFjdHVyZXIgT1VJLCBrYXRoeSwgMjAwOF8wMjIwCisjZGVmaW5lIE1hbnVmYWN0dXJlck9VSV9MRU4JCQkzCisjZGVmaW5lIE1hbnVmYWN0dXJlck5BTUUJCQkoIlJhbGluayBUZWNobm9sb2d5IENvbXBhbnkuIikKKyNkZWZpbmUJUmVzb3VyY2VUeXBlSWROYW1lCQkJKCJSYWxpbmtfSUQiKQorI2VuZGlmCisKKworLy8jZGVmaW5lIFBBQ0tFRAorCisjZGVmaW5lIFJBTElOS18yODgzX1ZFUlNJT04JCSgoVUlOVDMyKTB4Mjg4MzAzMDApCisjZGVmaW5lIFJBTElOS18yODgwRV9WRVJTSU9OCSgoVUlOVDMyKTB4Mjg3MjAyMDApCisjZGVmaW5lIFJBTElOS18zMDcwX1ZFUlNJT04JCSgoVUlOVDMyKTB4MzA3MDAyMDApCisKKy8vCisvLyBORElTIHZlcnNpb24gaW4gdXNlIGJ5IHRoZSBOSUMgZHJpdmVyLgorLy8gVGhlIGhpZ2ggYnl0ZSBpcyB0aGUgbWFqb3IgdmVyc2lvbi4gVGhlIGxvdyBieXRlIGlzIHRoZSBtaW5vciB2ZXJzaW9uLgorLy8KKyNpZmRlZiAgTkRJUzUxX01JTklQT1JUCisjZGVmaW5lIE5JQ19EUklWRVJfVkVSU0lPTiAgICAgIDB4MDUwMQorI2Vsc2UKKyNkZWZpbmUgTklDX0RSSVZFUl9WRVJTSU9OICAgICAgMHgwNTAwCisjZW5kaWYKKworLy8KKy8vIE5ESVMgbWVkaWEgdHlwZSwgY3VycmVudCBpcyBldGhlcm5ldCwgY2hhbmdlIGlmIG5hdGl2ZSB3aXJlbGVzcyBzdXBwb3J0ZWQKKy8vCisjZGVmaW5lIE5JQ19NRURJQV9UWVBFICAgICAgICAgIE5kaXNNZWRpdW04MDJfMworI2RlZmluZSBOSUNfUENJX0hEUl9MRU5HVEggICAgICAweGUyCisjZGVmaW5lIE5JQ19NQVhfUEFDS0VUX1NJWkUgICAgIDIzMDQKKyNkZWZpbmUgTklDX0hFQURFUl9TSVpFICAgICAgICAgMTQKKyNkZWZpbmUgTUFYX01BUF9SRUdJU1RFUlNfTkVFREVEIDMyCisjZGVmaW5lIE1JTl9NQVBfUkVHSVNURVJTX05FRURFRCAyICAgLy9Ub2RvOiBzaG91bGQgY29uc2lkZXIgZnJhZ21lbnQgaXNzdWUuCisKKy8vCisvLyBpbnRlcmZhY2UgdHlwZSwgd2UgdXNlIFBDSQorLy8KKyNkZWZpbmUgTklDX0lOVEVSRkFDRV9UWVBFICAgICAgTmRpc0ludGVyZmFjZVBjaQorI2RlZmluZSBOSUNfSU5URVJSVVBUX01PREUgICAgICBOZGlzSW50ZXJydXB0TGV2ZWxTZW5zaXRpdmUKKworLy8KKy8vIGJ1ZmZlciBzaXplIHBhc3NlZCBpbiBOZGlzTVF1ZXJ5QWRhcHRlclJlc291cmNlcworLy8gV2Ugc2hvdWxkIG9ubHkgbmVlZCB0aHJlZSBhZGFwdGVyIHJlc291cmNlcyAoSU8sIGludGVycnVwdCBhbmQgbWVtb3J5KSwKKy8vIFNvbWUgZGV2aWNlcyBnZXQgZXh0cmEgcmVzb3VyY2VzLCBzbyBoYXZlIHJvb20gZm9yIDEwIHJlc291cmNlcworLy8gICAgICAgICAgICAgICAgICAgIFVGX1NJWkUgICAoc2l6ZW9mKE5ESVNfUkVTT1VSQ0VfTElTVCkgKyAoMTAqc2l6ZW9mKENNX1BBUlRJQUxfUkVTT1VSQ0VfREVTQ1JJUFRPUikpKQorCisKKyNkZWZpbmUgTklDX1JFU09VUkNFX0IvLworLy8gSU8gc3BhY2UgbGVuZ3RoCisvLworI2RlZmluZSBOSUNfTUFQX0lPU1BBQ0VfTEVOR1RIICBzaXplb2YoQ1NSX1NUUlVDKQorCisjZGVmaW5lIE1BWF9SWF9QS1RfTEVOCTE1MjAKKworLy8KKy8vIEVudHJ5IG51bWJlciBmb3IgZWFjaCBETUEgZGVzY3JpcHRvciByaW5nCisvLworCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgVFhfUklOR19TSVpFICAgICAgICAgICAgOCAvLyAxCisjZGVmaW5lIFBSSU9fUklOR19TSVpFICAgICAgICAgIDgKKyNkZWZpbmUgTUdNVF9SSU5HX1NJWkUgICAgICAgMzIgLy8gUFJJT19SSU5HX1NJWkUKKyNkZWZpbmUgUlhfUklOR19TSVpFICAgICAgICAgICAgOAorI2RlZmluZSBNQVhfVFhfUFJPQ0VTUyAgICAgICAgICA0CisjZGVmaW5lIExPQ0FMX1RYQlVGX1NJWkUgICAgICAgIDIwNDgKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorLy8gTUM6IE11bHRwbGUgQ2FyZHMKKyNkZWZpbmUgTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJECQkzMgorI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisjZGVmaW5lIE1BWF9SWF9QUk9DRVNTICAgICAgICAgIDEyOCAvLzY0IC8vMzIKKyNkZWZpbmUgTlVNX09GX0xPQ0FMX1RYQlVGICAgICAgMgorI2RlZmluZSBUWERfU0laRSAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBUWFdJX1NJWkUgICAgICAgICAgICAgICAxNgorI2RlZmluZSBSWERfU0laRSAgICAgICAgICAgICAgIAkxNgorI2RlZmluZSBSWFdJX1NJWkUgICAgICAgICAgICAgCTE2CisvLyBUWElORk9fU0laRSArIFRYV0lfU0laRSArIDgwMi4xMSBIZWFkZXIgU2l6ZSArIEFNU0RVIHN1YiBmcmFtZSBoZWFkZXIKKyNkZWZpbmUgVFhfRE1BXzFTVF9CVUZGRVJfU0laRSAgOTYgICAgLy8gb25seSB0aGUgMXN0IHBoeXNpY2FsIGJ1ZmZlciBpcyBwcmUtYWxsb2NhdGVkCisjZGVmaW5lIE1HTVRfRE1BX0JVRkZFUl9TSVpFICAgIDE1MzYgLy8yMDQ4CisjZGVmaW5lIFJYX0JVRkZFUl9BR0dSRVNJWkUgICAgIDM4NDAgLy8zOTA0IC8vMzk2OCAvLzQwOTYgLy8yMDQ4IC8vNDA5NgorI2RlZmluZSBSWF9CVUZGRVJfTk9STVNJWkUgICAgICAzODQwIC8vMzkwNCAvLzM5NjggLy80MDk2IC8vMjA0OCAvLzQwOTYKKyNkZWZpbmUgVFhfQlVGRkVSX05PUk1TSVpFCQlSWF9CVUZGRVJfTk9STVNJWkUKKyNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUgICAgICAgICAgMjM0NiAgICAgICAgICAgICAgICAgICAgLy8gTWF4aW11bSA4MDIuMTEgZnJhbWUgc2l6ZQorI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fU0laRSAgICAzODQwIC8vMzkwNCAvLzM5NjggLy80MDk2CisjZGVmaW5lIE1BWF9OVU1fT0ZfVFVQTEVfQ0FDSEUgIDIKKyNkZWZpbmUgTUFYX01DQVNUX0xJU1RfU0laRSAgICAgMzIKKyNkZWZpbmUgTUFYX0xFTl9PRl9WRU5ET1JfREVTQyAgNjQKKy8vI2RlZmluZSBNQVhfU0laRV9PRl9NQ0FTVF9QU1EgICAoTlVNX09GX0xPQ0FMX1RYQlVGID4+IDIpIC8vIEFQIHdvbid0IHNwZW5kIG1vcmUgdGhhbiAxLzQgb2YgdG90YWwgYnVmZmVycyBvbiBNL0JDQVNUIFBTUQorI2RlZmluZSBNQVhfU0laRV9PRl9NQ0FTVF9QU1EgICAgICAgICAgICAgICAzMgorCisjZGVmaW5lIE1BWF9SWF9QUk9DRVNTX0NOVAkoUlhfUklOR19TSVpFKQorCisKKyNkZWZpbmUgTUFYX1BBQ0tFVFNfSU5fUVVFVUUJCQkJKDUxMikgLy8oNTEyKSAgICAvLyB0byBwYXNzIFdNTSBBNS1XUEFQU0sKKyNkZWZpbmUgTUFYX1BBQ0tFVFNfSU5fTUNBU1RfUFNfUVVFVUUJCTMyCisjZGVmaW5lIE1BWF9QQUNLRVRTX0lOX1BTX1FVRVVFCQkJCTEyOAkvLzMyCisjZGVmaW5lIFdNTV9OVU1fT0ZfQUMgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFDMCwgQUMxLCBBQzIsIGFuZCBBQzMgKi8KKworCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2U8LS0KKyNkZWZpbmUgTUFYX0VFUFJPTV9CSU5fRklMRV9TSVpFCQkJCQkxMDI0CisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KKworLy8gUnhGaWx0ZXIKKyNkZWZpbmUgU1RBTk9STUFMCSAweDE3Zjk3CisjZGVmaW5lIEFQTk9STUFMCSAweDE1Zjk3CisvLworLy8gIFJUTVBfQURBUFRFUiBmbGFncworLy8KKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9NQVBfUkVHSVNURVIgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfSEFSRFdBUkVfRVJST1IgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9TQ0FUVEVSX0dBVEhFUiAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBmUlRNUF9BREFQVEVSX1NFTkRfUEFDS0VUX0VSUk9SICAgICAweDAwMDAwMDEwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfTUxNRV9SRVNFVF9JTl9QUk9HUkVTUyAweDAwMDAwMDIwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfVFhfUklOR19BTExPQ0FURUQgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MgICAgMHgwMDAwMDQwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX01JTU9SQVRFX0lOVVNFRCAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfUlhfUklOR19BTExPQ0FURUQgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTICAweDAwMDA0MDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfUkVBU1NPQ19JTl9QUk9HUkVTUwkweDAwMDA4MDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfUEVORElORwkweDAwMDEwMDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfUkFESU9fT0ZGCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUCQkJMHgwMDA0MDAwMAorI2RlZmluZQlmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVAkJCTB4MDAwODAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SREdfQUNUSVZFCQkJMHgwMDEwMDAwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX0RZTkFNSUNfQkVfVFhPUF9BQ1RJVkUgMHgwMDIwMDAwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX1NDQU5fMjA0MCAJCQkweDA0MDAwMDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQJCTB4MDgwMDAwMDAKKworI2RlZmluZSBmUlRNUF9BREFQVEVSX1NUQVJUX1VQICAgICAgICAgCQkweDEwMDAwMDAwCS8vRGV2aXZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIGVuYWJsZWQgVHgvUnguCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfQ0hBTkdFICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRiAgICAgICAgMHg0MDAwMDAwMAorCisvLyBMb2NrIGJpdCBmb3IgYWNjZXNzaW5nIGRpZmZlcmVudCByaW5nIGJ1ZmZlcnMKKy8vI2RlZmluZSBmUlRNUF9BREFQVEVSX1RYX1JJTkdfQlVTWSAgICAgICAgMHg4MDAwMDAwMAorLy8jZGVmaW5lIGZSVE1QX0FEQVBURVJfTUdNVF9SSU5HX0JVU1kgICAgICAweDQwMDAwMDAwCisvLyNkZWZpbmUgZlJUTVBfQURBUFRFUl9BVElNX1JJTkdfQlVTWSAgICAgIDB4MjAwMDAwMDAKKy8vI2RlZmluZSBmUlRNUF9BREFQVEVSX1JYX1JJTkdfQlVTWSAgICAgICAgMHgxMDAwMDAwMAorCisvLyBMb2NrIGJpdCBmb3IgYWNjZXNzaW5nIGRpZmZlcmVudCBxdWV1ZQorLy8jZGVmaW5lICAgZlJUTVBfQURBUFRFUl9UWF9RVUVVRV9CVVNZICAgICAweDA4MDAwMDAwCisvLyNkZWZpbmUgICBmUlRNUF9BREFQVEVSX01HTVRfUVVFVUVfQlVTWSAgIDB4MDQwMDAwMDAKKworLy8KKy8vICBTVEEgb3BlcmF0aW9uIHN0YXR1cyBmbGFncworLy8KKyNkZWZpbmUgZk9QX1NUQVRVU19JTkZSQV9PTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBmT1BfU1RBVFVTX0FESE9DX09OICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgZk9QX1NUQVRVU19TSE9SVF9TTE9UX0lOVVNFRCAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCAgICAweDAwMDAwMDEwCisjZGVmaW5lIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNICAgICAgICAgICAgIDB4MDAwMDAwMjAKKy8vI2RlZmluZSBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQgICAweDAwMDAwMDQwCisjZGVmaW5lIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgZk9QX1NUQVRVU19XTU1fSU5VU0VEICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIGZPUF9TVEFUVVNfRE9aRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAgIC8vIGRlYnVnIHB1cnBvc2UKKyNkZWZpbmUgZk9QX1NUQVRVU19QSUdHWUJBQ0tfSU5VU0VEICAgICAgICAgMHgwMDAwMDgwMCAgLy8gcGlnZ3ktYmFjaywgYW5kIGFnZ3JlZ2F0aW9uCisjZGVmaW5lIGZPUF9TVEFUVVNfQVBTRF9JTlVTRUQJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBmT1BfU1RBVFVTX1RYX0FNU0RVX0lOVVNFRAkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgZk9QX1NUQVRVU19NQVhfUkVUUllfRU5BQkxFRAkJMHgwMDAwNDAwMAorI2RlZmluZSBmT1BfU1RBVFVTX1dBS0VVUF9OT1cgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFICAgICAgIDB4MDAwMjAwMDAKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKyNkZWZpbmUgZk9QX1NUQVRVU19TQ0FOXzIwNDAgICAgICAgICAgICAgICAJICAgIDB4MDAwNDAwMDAKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKyNkZWZpbmUgQ0NLU0VUUFJPVEVDVAkJMHgxCisjZGVmaW5lIE9GRE1TRVRQUk9URUNUCQkweDIKKyNkZWZpbmUgTU0yMFNFVFBST1RFQ1QJCTB4NAorI2RlZmluZSBNTTQwU0VUUFJPVEVDVAkJMHg4CisjZGVmaW5lIEdGMjBTRVRQUk9URUNUCQkweDEwCisjZGVmaW5lIEdSNDBTRVRQUk9URUNUCQkweDIwCisjZGVmaW5lIEFMTE5fU0VUUFJPVEVDVAkJKEdSNDBTRVRQUk9URUNUIHwgR0YyMFNFVFBST1RFQ1QgfCBNTTQwU0VUUFJPVEVDVCB8IE1NMjBTRVRQUk9URUNUKQorCisvLworLy8gIEFQJ3MgY2xpZW50IHRhYmxlIG9wZXJhdGlvbiBzdGF0dXMgZmxhZ3MKKy8vCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIENMSUVOVCBjYW4gcGFyc2UgUU9TIERBVEEgZnJhbWUKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSAgMHgwMDAwMDAwMiAgLy8gQ0xJRU5UIGNhbiByZWNlaXZlIFJhbGluaydzIHByb3ByaWV0YXJ5IFRYIGFnZ3JlZ2F0aW9uIGZyYW1lCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFICAgIDB4MDAwMDAwMDQgIC8vIENMSUVOVCBzdXBwb3J0IHBpZ2d5LWJhY2sKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VECQkJMHgwMDAwMDAwOAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19TR0kyMF9DQVBBQkxFCQkweDAwMDAwMDEwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUJCTB4MDAwMDAwMjAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfUnhTVEJDX0NBUEFCTEUJCTB4MDAwMDAwODAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfSFRDX0NBUEFCTEUJCQkweDAwMDAwMTAwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFCQkJMHgwMDAwMDIwMAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19NQ1NGRUVEQkFDS19DQVBBQkxFICAweDAwMDAwNDAwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX0FQU0RfQ0FQQUJMRSAgICAgICAgIDB4MDAwMDA4MDAgIC8qIFVBUFNEIFNUQVRJT04gKi8KKworI2lmZGVmIERPVDExTl9EUkFGVDMKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQlNTQ09FWElTVF9DQVBBQkxFCTB4MDAwMDEwMDAKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQJCTB4MDAxMDAwMDAKKy8vCisvLyAgU1RBIGNvbmZpZ3VyYXRpb24gZmxhZ3MKKy8vCisvLyNkZWZpbmUgZlNUQV9DRkdfRU5BQkxFX1RYX0JVUlNUICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8gODAyLjExbiBPcGVyYXRpbmcgTW9kZSBEZWZpbml0aW9uLiAwLTMgYWxzbyB1c2VkIGluIEFTSUNVUGRhdGVQcm90ZWN0IHN3aXRjaCBjYXNlCisjZGVmaW5lIEhUX05PX1BST1RFQ1QJMAorI2RlZmluZSBIVF9MRUdBQ1lfUFJPVEVDVAkxCisjZGVmaW5lIEhUXzQwX1BST1RFQ1QJMgorI2RlZmluZSBIVF8yMDQwX1BST1RFQ1QJMworI2RlZmluZSBIVF9SVFNDVFNfNk0JNworLy9mb2xsb3dpbmcgaXMgb3VyIG93biBkZWZpbml0aW9uIGluIG9yZGVyIHRvIHR1cm4gb24gb3VyIEFTSUMgcHJvdGVjdGlvbiByZWdpc3RlciBpbiBJTkZSQVNUUlVDVFVSRS4KKyNkZWZpbmUgSFRfQVRIRVJPUwk4CisjZGVmaW5lIEhUX0ZPUkNFUlRTQ1RTCTkJLy8gRm9yY2UgdHVybiBvbiBSVFMvQ1RTIGZpcnN0LiB0aGVuIGdvIHRvIGV2YWx1YXRlIGlmIHRoaXMgZm9yY2UgUlRTIGlzIG5lY2Vzc2FyeS4KKworLy8KKy8vIFJYIFBhY2tldCBGaWx0ZXIgY29udHJvbCBmbGFncy4gQXBwbHkgb24gcEFkLT5QYWNrZXRGaWx0ZXIKKy8vCisjZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX0RJUkVDVCAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQKKyNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfTVVMVElDQVNUICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QKKyNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfQlJPQURDQVNUICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QKKyNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfQUxMX01VTFRJQ0FTVCAgICAgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCisKKy8vCisvLyBFcnJvciBjb2RlIHNlY3Rpb24KKy8vCisvLyBORElTX0VSUk9SX0NPREVfQURBUFRFUl9OT1RfRk9VTkQKKyNkZWZpbmUgRVJSTE9HX1JFQURfUENJX1NMT1RfRkFJTEVEICAgICAweDAwMDAwMTAxTAorI2RlZmluZSBFUlJMT0dfV1JJVEVfUENJX1NMT1RfRkFJTEVEICAgIDB4MDAwMDAxMDJMCisjZGVmaW5lIEVSUkxPR19WRU5ET1JfREVWSUNFX05PTUFUQ0ggICAgMHgwMDAwMDEwM0wKKworLy8gTkRJU19FUlJPUl9DT0RFX0FEQVBURVJfRElTQUJMRUQKKyNkZWZpbmUgRVJSTE9HX0JVU19NQVNURVJfRElTQUJMRUQgICAgICAweDAwMDAwMjAxTAorCisvLyBORElTX0VSUk9SX0NPREVfVU5TVVBQT1JURURfQ09ORklHVVJBVElPTgorI2RlZmluZSBFUlJMT0dfSU5WQUxJRF9TUEVFRF9EVVBMRVggICAgIDB4MDAwMDAzMDFMCisjZGVmaW5lIEVSUkxPR19TRVRfU0VDT05EQVJZX0ZBSUxFRCAgICAgMHgwMDAwMDMwMkwKKworLy8gTkRJU19FUlJPUl9DT0RFX09VVF9PRl9SRVNPVVJDRVMKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAweDAwMDAwNDAxTAorI2RlZmluZSBFUlJMT0dfT1VUX09GX1NIQVJFRF9NRU1PUlkgICAgIDB4MDAwMDA0MDJMCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfTUFQX1JFR0lTVEVSUyAgICAgMHgwMDAwMDQwM0wKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9CVUZGRVJfUE9PTCAgICAgICAweDAwMDAwNDA0TAorI2RlZmluZSBFUlJMT0dfT1VUX09GX05ESVNfQlVGRkVSICAgICAgIDB4MDAwMDA0MDVMCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfUEFDS0VUX1BPT0wgICAgICAgMHgwMDAwMDQwNkwKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9ORElTX1BBQ0tFVCAgICAgICAweDAwMDAwNDA3TAorI2RlZmluZSBFUlJMT0dfT1VUX09GX0xPT0tBU0lERV9NRU1PUlkgIDB4MDAwMDA0MDhMCisKKy8vIE5ESVNfRVJST1JfQ09ERV9IQVJEV0FSRV9GQUlMVVJFCisjZGVmaW5lIEVSUkxPR19TRUxGVEVTVF9GQUlMRUQgICAgICAgICAgMHgwMDAwMDUwMUwKKyNkZWZpbmUgRVJSTE9HX0lOSVRJQUxJWkVfQURBUFRFUiAgICAgICAweDAwMDAwNTAyTAorI2RlZmluZSBFUlJMT0dfUkVNT1ZFX01JTklQT1JUICAgICAgICAgIDB4MDAwMDA1MDNMCisKKy8vIE5ESVNfRVJST1JfQ09ERV9SRVNPVVJDRV9DT05GTElDVAorI2RlZmluZSBFUlJMT0dfTUFQX0lPX1NQQUNFICAgICAgICAgICAgIDB4MDAwMDA2MDFMCisjZGVmaW5lIEVSUkxPR19RVUVSWV9BREFQVEVSX1JFU09VUkNFUyAgMHgwMDAwMDYwMkwKKyNkZWZpbmUgRVJSTE9HX05PX0lPX1JFU09VUkNFICAgICAgICAgICAweDAwMDAwNjAzTAorI2RlZmluZSBFUlJMT0dfTk9fSU5URVJSVVBUX1JFU09VUkNFICAgIDB4MDAwMDA2MDRMCisjZGVmaW5lIEVSUkxPR19OT19NRU1PUllfUkVTT1VSQ0UgICAgICAgMHgwMDAwMDYwNUwKKworCisvLyBXRFMgZGVmaW5pdGlvbgorI2RlZmluZQlNQVhfV0RTX0VOVFJZICAgICAgICAgICAgICAgNAorI2RlZmluZSBXRFNfUEFJUldJU0VfS0VZX09GRlNFVCAgICAgNjAgICAgLy8gV0RTIGxpbmtzIHVzZXMgcGFpcndpc2Uga2V5IzYwIH4gNjMgaW4gQVNJQyBwYWlyd2lzZSBrZXkgdGFibGUKKworI2RlZmluZQlXRFNfRElTQUJMRV9NT0RFICAgICAgICAgICAgMAorI2RlZmluZQlXRFNfUkVTVFJJQ1RfTU9ERSAgICAgICAgICAgMQorI2RlZmluZQlXRFNfQlJJREdFX01PREUgICAgICAgICAgICAgMgorI2RlZmluZQlXRFNfUkVQRUFURVJfTU9ERSAgICAgICAgICAgMworI2RlZmluZQlXRFNfTEFaWV9NT0RFICAgICAgICAgICAgICAgNAorCisKKyNkZWZpbmUgTUFYX01FU0hfTlVNCQkJCTAKKworI2RlZmluZSBNQVhfQVBDTElfTlVNCQkJCTAKKworI2RlZmluZSBNQVhfTUJTU0lEX05VTQkJCQkxCisjaWZkZWYgTUJTU19TVVBQT1JUCisjdW5kZWYJTUFYX01CU1NJRF9OVU0KKyNkZWZpbmUgTUFYX01CU1NJRF9OVU0JCQkJKDggLSBNQVhfTUVTSF9OVU0gLSBNQVhfQVBDTElfTlVNKQorI2VuZGlmIC8vIE1CU1NfU1VQUE9SVCAvLworCisvKiBzYW5pdHkgY2hlY2sgZm9yIGFwaWR4ICovCisjZGVmaW5lIE1CU1NfTVJfQVBJRFhfU0FOSVRZX0NIRUNLKGFwaWR4KSBcCisgICAgeyBpZiAoYXBpZHggPiBNQVhfTUJTU0lEX05VTSkgeyBcCisgICAgICAgICAgcHJpbnRrKCIlcz4gRXJyb3IhIGFwaWR4ID0gJWQgPiBNQVhfTUJTU0lEX05VTSFcbiIsIF9fRlVOQ1RJT05fXywgYXBpZHgpOyBcCisJICBhcGlkeCA9IE1BSU5fTUJTU0lEOyB9IH0KKworI2RlZmluZSBWQUxJRF9XQ0lEKF93Y2lkKQkoKF93Y2lkKSA+IDAgJiYgKF93Y2lkKSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFICkKKworI2RlZmluZSBNQUlOX01CU1NJRCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGSVJTVF9NQlNTSUQgICAgICAgICAgICAgICAgMQorCisKKyNkZWZpbmUgTUFYX0JFQUNPTl9TSVpFCQkJCTUxMgorLy8gSWYgdGhlIE1BWF9NQlNTSURfTlVNIGlzIGxhcmdlciB0aGFuIDYsCisvLyBpdCBzaGFsbCByZXNlcnZlIHNvbWUgV0NJRCBzcGFjZSh3Y2lkIDIyMn4yNTMpIGZvciBiZWFjb24gZnJhbWVzLgorLy8gLQl0aGVzZSB3Y2lkIDIzOH4yNTMgYXJlIHJlc2VydmVkIGZvciBiZWFjb24jNihyYTYpLgorLy8gLQl0aGVzZSB3Y2lkIDIyMn4yMzcgYXJlIHJlc2VydmVkIGZvciBiZWFjb24jNyhyYTcpLgorI2lmIGRlZmluZWQoTUFYX01CU1NJRF9OVU0pICYmIChNQVhfTUJTU0lEX05VTSA9PSA4KQorI2RlZmluZSBIV19SRVNFUlZFRF9XQ0lECTIyMgorI2VsaWYgZGVmaW5lZChNQVhfTUJTU0lEX05VTSkgJiYgKE1BWF9NQlNTSURfTlVNID09IDcpCisjZGVmaW5lIEhXX1JFU0VSVkVEX1dDSUQJMjM4CisjZWxzZQorI2RlZmluZSBIV19SRVNFUlZFRF9XQ0lECTI1NQorI2VuZGlmCisKKy8vIFRoZW4gZGVkaWNhdGUgd2NpZCBvZiBERlMgYW5kIENhcnJpZXItU2Vuc2UuCisjZGVmaW5lIERGU19DVFNfV0NJRCAJCShIV19SRVNFUlZFRF9XQ0lEIC0gMSkKKyNkZWZpbmUgQ1NfQ1RTX1dDSUQgCQkoSFdfUkVTRVJWRURfV0NJRCAtIDIpCisjZGVmaW5lIExBU1RfU1BFQ0lGSUNfV0NJRAkoSFdfUkVTRVJWRURfV0NJRCAtIDIpCisKKy8vIElmIE1BWF9NQlNTSURfTlVNIGlzIDgsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSB3Y2lkIGZvciB0aGUgYXNzb2NpYXRlZCBTVEEgaXMgMjExLgorLy8gSWYgTUFYX01CU1NJRF9OVU0gaXMgNywgdGhlIG1heGltdW0gYXZhaWxhYmxlIHdjaWQgZm9yIHRoZSBhc3NvY2lhdGVkIFNUQSBpcyAyMjguCisjZGVmaW5lIE1BWF9BVkFJTEFCTEVfQ0xJRU5UX1dDSUQJKExBU1RfU1BFQ0lGSUNfV0NJRCAtIE1BWF9NQlNTSURfTlVNIC0gMSkKKworLy8gVFggbmVlZCBXQ0lEIHRvIGZpbmQgQ2lwaGVyIEtleQorLy8gdGhlc2Ugd2NpZCAyMTIgfiAyMTkgYXJlIHJlc2VydmVkIGZvciBiYy9tYyBwYWNrZXRzIGlmIE1BWF9NQlNTSURfTlVNIGlzIDguCisjZGVmaW5lIEdFVF9Hcm91cEtleV9XQ0lEKF9fd2NpZCwgX19ic3NpZHgpIFwKKwl7CQkJCQkJCQkJCVwKKwkJX193Y2lkID0gTEFTVF9TUEVDSUZJQ19XQ0lEIC0gKE1BWF9NQlNTSURfTlVNKSArIF9fYnNzaWR4OwlcCisJfQorCisjZGVmaW5lIElzR3JvdXBLZXlXQ0lEKF9fd2NpZCkgKCgoX193Y2lkKSA8IExBU1RfU1BFQ0lGSUNfV0NJRCkgJiYgKChfX3djaWQpID49IChMQVNUX1NQRUNJRklDX1dDSUQgLSAoTUFYX01CU1NJRF9OVU0pKSkpCisKKworLy8gZGVmaW5pdGlvbiB0byBzdXBwb3J0IG11bHRpcGxlIEJTU0lECisjZGVmaW5lIEJTUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBCU1MxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQlNTMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEJTUzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBCU1M0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQlNTNSAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEJTUzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBCU1M3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTGVuZ3RoIGRlZmluaXRpb25zCisjZGVmaW5lIFBFRVJfS0VZX05PICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQUNfQUREUl9MRU4gICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVElNRVNUQU1QX0xFTiAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTICAgICAgTUFYX0xFTkdUSF9PRl9TVVBQT1JUX1JBVEVTIC8vIDEsIDIsIDUuNSwgMTEsIDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQKKyNkZWZpbmUgTUFYX0xFTl9PRl9LRVkgICAgICAgICAgICAgICAgICAzMiAgICAgIC8vIDMyIG9jdGV0cyA9PSAyNTYgYml0cywgUmVkZWZpbmUgZm9yIFdQQQorI2RlZmluZSBNQVhfTlVNX09GX0NIQU5ORUxTICAgICAgICAgICAgIE1BWF9OVU1fT0ZfQ0hTICAgICAgLy8gMTQgY2hhbm5lbHMgQDIuNEcgKyAgMTJAVU5JSSArIDQgQE1NQUMgKyAxMSBASGlwZXJMQU4yICsgNyBASmFwYW4gKyAxIGFzIE5VTEwgdGVybWluYXRpb24KKyNkZWZpbmUgTUFYX05VTV9PRl8xMUpDSEFOTkVMUyAgICAgICAgICAgICAyMCAgICAgIC8vIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkgKyA0IEBNTUFDICsgMTEgQEhpcGVyTEFOMiArIDcgQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uCisjZGVmaW5lIE1BWF9MRU5fT0ZfU1NJRCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ0lQSEVSX1RFWFRfTEVOICAgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgSEFTSF9UQUJMRV9TSVpFICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgTUFYX1ZJRV9MRU4gICAgICAgICAgICAgICAgICAgICAxMDI0ICAgLy8gTmV3IGZvciBXUEEgY2lwaGVyIHN1aXRlIHZhcmlhYmxlIElFIHNpemVzLgorI2RlZmluZSBNQVhfU1VQUE9SVF9NQ1MgICAgICAgICAgICAgMzIKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEFTSUMgV0NJRCBUYWJsZSBkZWZpbml0aW9uLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgQlNTSURfV0NJRAkJMQkvLyBpbiBpbmZyYSBtb2RlLCBhbHdheXMgcHV0IGJzc2lkIHdpdGggdGhpcyBXQ0lECisjZGVmaW5lIE1DQVNUX1dDSUQJMHgwCisjZGVmaW5lIEJTUzBNY2FzdF9XQ0lECTB4MAorI2RlZmluZSBCU1MxTWNhc3RfV0NJRAkweGY4CisjZGVmaW5lIEJTUzJNY2FzdF9XQ0lECTB4ZjkKKyNkZWZpbmUgQlNTM01jYXN0X1dDSUQJMHhmYQorI2RlZmluZSBCU1M0TWNhc3RfV0NJRAkweGZiCisjZGVmaW5lIEJTUzVNY2FzdF9XQ0lECTB4ZmMKKyNkZWZpbmUgQlNTNk1jYXN0X1dDSUQJMHhmZAorI2RlZmluZSBCU1M3TWNhc3RfV0NJRAkweGZlCisjZGVmaW5lIFJFU0VSVkVEX1dDSUQJCTB4ZmYKKworI2RlZmluZSBNQVhfTlVNX09GX0FDTF9MSVNUCQkJCU1BWF9OVU1CRVJfT0ZfQUNMCisKKyNkZWZpbmUgTUFYX0xFTl9PRl9NQUNfVEFCTEUgICAgICAgICAgICBNQVhfTlVNQkVSX09GX01BQyAvLyBpZiBNQVhfTUJTU0lEX05VTSBpcyA4LCB0aGlzIHZhbHVlIGNhbid0IGJlIGxhcmdlciB0aGFuIDIxMQorCisjaWYgTUFYX0xFTl9PRl9NQUNfVEFCTEU+TUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRAorI2Vycm9yIE1BWF9MRU5fT0ZfTUFDX1RBQkxFIGNhbiBub3QgYmUgbGFyZ2VyIHRoYW4gTUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRCEhISEKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9OVU1fT0ZfV0RTX0xJTktfUEVSQlNTSUQJICAgICAgICAgICAgMworI2RlZmluZSBNQVhfTlVNX09GX1dEU19MSU5LCSAgICAgICAgICAgIChNQVhfTlVNX09GX1dEU19MSU5LX1BFUkJTU0lEKk1BWF9NQlNTSURfTlVNKQorI2RlZmluZSBNQVhfTlVNX09GX0VWRU5UICAgICAgICAgICAgICAgIE1BWF9OVU1CRVJfT0ZfRVZFTlQKKyNkZWZpbmUgV0RTX0xJTktfU1RBUlRfV0NJRAkJCQkoTUFYX0xFTl9PRl9NQUNfVEFCTEUtMSkKKworI2RlZmluZSBOVU1fT0ZfVElECQkJOAorI2RlZmluZSBNQVhfQUlEX0JBICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFICAgICAgICAgICgoTlVNX09GX1RJRCAqIE1BWF9MRU5fT0ZfTUFDX1RBQkxFKS8yKS8vICAgKE5VTV9PRl9USUQqTUFYX0FJRF9CQSArIDMyKQkgLy9CbG9jayBBQ0sgcmVjaXBpZW50CisjZGVmaW5lIE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFICAgICAgICAgICgoTlVNX09GX1RJRCAqIE1BWF9MRU5fT0ZfTUFDX1RBQkxFKS8yKS8vICAgKE5VTV9PRl9USUQqTUFYX0FJRF9CQSArIDMyKSAgIC8vIEJsb2NrIEFDSyBvcmlnaW5hdG9yCisjZGVmaW5lIE1BWF9MRU5fT0ZfQlNTX1RBQkxFICAgICAgICAgICAgIDY0CisjZGVmaW5lIE1BWF9SRU9SREVSSU5HX01QRFVfTlVNCQkJIDUxMgorCisvLyBrZXkgcmVsYXRlZCBkZWZpbml0aW9ucworI2RlZmluZSBTSEFSRV9LRVlfTlVNICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX0xFTl9PRl9TSEFSRV9LRVkgICAgICAgICAgICAxNiAgICAvLyBieXRlIGNvdW50CisjZGVmaW5lIE1BWF9MRU5fT0ZfUEVFUl9LRVkgICAgICAgICAgICAgMTYgICAgLy8gYnl0ZSBjb3VudAorI2RlZmluZSBQQUlSV0lTRV9LRVlfTlVNICAgICAgICAgICAgICAgIDY0ICAgIC8vIGluIE1BQyBBU0lDIHBhaXJ3aXNlIGtleSB0YWJsZQorI2RlZmluZSBHUk9VUF9LRVlfTlVNICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUE1LX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBXRFNfUEFJUldJU0VfS0VZX09GRlNFVCAgICAgICAgIDYwICAgIC8vIFdEUyBsaW5rcyB1c2VzIHBhaXJ3aXNlIGtleSM2MCB+IDYzIGluIEFTSUMgcGFpcndpc2Uga2V5IHRhYmxlCisjZGVmaW5lCVBNS0lEX05PICAgICAgICAgICAgICAgICAgICAgICAgNCAgICAgLy8gTnVtYmVyIG9mIFBNS0lEIHNhdmVkIHN1cHBvcnRlZAorI2RlZmluZSBNQVhfTEVOX09GX01MTUVfQlVGRkVSICAgICAgICAgIDIwNDgKKworLy8gcG93ZXIgc3RhdHVzIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgUFdSX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBXUl9TQVZFICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQV1JfTU1QUyAgICAgICAgICAgICAgICAgICAgICAgIDIJCQkvL01JTU8gcG93ZXIgc2F2ZQorLy8jZGVmaW5lIFBXUl9VTktOT1dOICAgICAgICAgICAgICAgICAgIDIKKworLy8gQXV0aCBhbmQgQXNzb2MgbW9kZSByZWxhdGVkIGRlZmluaXRpb25zCisjZGVmaW5lIEFVVEhfTU9ERV9PUEVOICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVVRIX01PREVfS0VZICAgICAgICAgICAgICAgICAgIDB4MDEKKy8vI2RlZmluZSBBVVRIX01PREVfQVVUT19TV0lUQ0ggICAgICAgICAweDAzCisvLyNkZWZpbmUgQVVUSF9NT0RFX0RFQVVUSCAgICAgICAgICAgICAgMHgwNAorLy8jZGVmaW5lIEFVVEhfTU9ERV9VUExBWUVSICAgICAgICAgICAgIDB4MDUgLy8gcmVzZXJ2ZWQgZm9yIDgwMi4xMWkgdXNlCisKKy8vIEJTUyBUeXBlIGRlZmluaXRpb25zCisjZGVmaW5lIEJTU19BREhPQyAgICAgICAgICAgICAgICAgICAgICAgMCAgLy8gPSBOZGlzODAyXzExSUJTUworI2RlZmluZSBCU1NfSU5GUkEgICAgICAgICAgICAgICAgICAgICAgIDEgIC8vID0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlCisjZGVmaW5lIEJTU19BTlkgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLy8gPSBOZGlzODAyXzExQXV0b1Vua25vd24KKyNkZWZpbmUgQlNTX01PTklUT1IJCQkgICAgICAgICAgICAzICAvLyA9IE5kaXM4MDJfMTFNb25pdG9yCisKKworLy8gUmVhc29uIGNvZGUgZGVmaW5pdGlvbnMKKyNkZWZpbmUgUkVBU09OX1JFU0VSVkVEICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRlkgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRUFTT05fTk9fTE9OR0VSX1ZBTElEICAgICAgICAgIDIKKyNkZWZpbmUgUkVBU09OX0RFQVVUSF9TVEFfTEVBVklORyAgICAgICAzCisjZGVmaW5lIFJFQVNPTl9ESVNBU1NPQ19JTkFDVElWRSAgICAgICAgNAorI2RlZmluZSBSRUFTT05fRElTQVNTUENfQVBfVU5BQkxFICAgICAgIDUKKyNkZWZpbmUgUkVBU09OX0NMUzJFUlIgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJFQVNPTl9DTFMzRVJSICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcgICAgIDgKKyNkZWZpbmUgUkVBU09OX1NUQV9SRVFfQVNTT0NfTk9UX0FVVEggICA5CisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX0lFICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUkVBU09OX01JQ19GQUlMVVJFICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRUFTT05fNF9XQVlfVElNRU9VVCAgICAgICAgICAgIDE1CisjZGVmaW5lIFJFQVNPTl9HUk9VUF9LRVlfSFNfVElNRU9VVCAgICAgMTYKKyNkZWZpbmUgUkVBU09OX0lFX0RJRkZFUkVOVCAgICAgICAgICAgICAxNworI2RlZmluZSBSRUFTT05fTUNJUEhFUl9OT1RfVkFMSUQgICAgICAgIDE4CisjZGVmaW5lIFJFQVNPTl9VQ0lQSEVSX05PVF9WQUxJRCAgICAgICAgMTkKKyNkZWZpbmUgUkVBU09OX0FLTVBfTk9UX1ZBTElEICAgICAgICAgICAyMAorI2RlZmluZSBSRUFTT05fVU5TVVBQT1JUX1JTTkVfVkVSICAgICAgIDIxCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX1JTTkVfQ0FQICAgICAgICAgMjIKKyNkZWZpbmUgUkVBU09OXzgwMjFYX0FVVEhfRkFJTCAgICAgICAgICAyMworI2RlZmluZSBSRUFTT05fQ0lQSEVSX1NVSVRFX1JFSkVDVEVEICAgIDI0CisjZGVmaW5lIFJFQVNPTl9ERUNMSU5FRCAgICAgICAgICAgICAgICAgMzcKKworI2RlZmluZSBSRUFTT05fUU9TX1VOU1BFQ0lGWSAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkVBU09OX1FPU19MQUNLX0JBTkRXSURUSCAgICAgICAgIDMzCisjZGVmaW5lIFJFQVNPTl9QT09SX0NIQU5ORUxfQ09ORElUSU9OICAgICAzNAorI2RlZmluZSBSRUFTT05fUU9TX09VVFNJREVfVFhPUF9MSU1JVElPTiAgMzUKKyNkZWZpbmUgUkVBU09OX1FPU19RU1RBX0xFQVZJTkdfUUJTUyAgICAgIDM2CisjZGVmaW5lIFJFQVNPTl9RT1NfVU5XQU5URURfTUVDSEFOSVNNICAgICAzNworI2RlZmluZSBSRUFTT05fUU9TX01FQ0hfU0VUVVBfUkVRVUlSRUQgICAgMzgKKyNkZWZpbmUgUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQgICAgICAgIDM5CisjZGVmaW5lIFJFQVNPTl9RT1NfQ0lQSEVSX05PVF9TVVBQT1JUICAgICA0NQorCisvLyBTdGF0dXMgY29kZSBkZWZpbml0aW9ucworI2RlZmluZSBNTE1FX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUxNRV9VTlNQRUNJRllfRkFJTCAgICAgICAgICAgICAxCisjZGVmaW5lIE1MTUVfQ0FOTk9UX1NVUFBPUlRfQ0FQICAgICAgICAgMTAKKyNkZWZpbmUgTUxNRV9SRUFTU09DX0RFTllfQVNTT0NfRVhJU1QgICAxMQorI2RlZmluZSBNTE1FX0FTU09DX0RFTllfT1VUX1NDT1BFICAgICAgIDEyCisjZGVmaW5lIE1MTUVfQUxHX05PVF9TVVBQT1JUICAgICAgICAgICAgMTMKKyNkZWZpbmUgTUxNRV9TRVFfTlJfT1VUX09GX1NFUVVFTkNFICAgICAxNAorI2RlZmluZSBNTE1FX1JFSl9DSEFMTEVOR0VfRkFJTFVSRSAgICAgIDE1CisjZGVmaW5lIE1MTUVfUkVKX1RJTUVPVVQgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNTE1FX0FTU09DX1JFSl9VTkFCTEVfSEFORExFX1NUQSAgMTcKKyNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfREFUQV9SQVRFICAgICAgICAgIDE4CisKKyNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfTk9fRVhUX1JBVEUgICAgICAgIDIyCisjZGVmaW5lIE1MTUVfQVNTT0NfUkVKX05PX0VYVF9SQVRFX1BCQ0MgICAyMworI2RlZmluZSBNTE1FX0FTU09DX1JFSl9OT19DQ0tfT0ZETSAgICAgICAgMjQKKworI2RlZmluZSBNTE1FX1FPU19VTlNQRUNJRlkgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTUxNRV9SRVFVRVNUX0RFQ0xJTkVEICAgICAgICAgICAgIDM3CisjZGVmaW5lIE1MTUVfUkVRVUVTVF9XSVRIX0lOVkFMSURfUEFSQU0gICAzOAorI2RlZmluZSBNTE1FX0RMU19OT1RfQUxMT1dfSU5fUUJTUyAgICAgICAgNDgKKyNkZWZpbmUgTUxNRV9ERVNUX1NUQV9OT1RfSU5fUUJTUyAgICAgICAgIDQ5CisjZGVmaW5lIE1MTUVfREVTVF9TVEFfSVNfTk9UX0FfUVNUQSAgICAgICA1MAorCisjZGVmaW5lIE1MTUVfSU5WQUxJRF9GT1JNQVQgICAgICAgICAgICAgMHg1MQorI2RlZmluZSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0UgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCAgICAgICAweDUzCisjZGVmaW5lIE1MTUVfTUFDX1RBQkxFX0ZBSUwgICAgICAgICAgICAgMHg1NAorCisvLyBJRSBjb2RlCisjZGVmaW5lIElFX1NTSUQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJRV9TVVBQX1JBVEVTICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUVfRkhfUEFSTSAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElFX0RTX1BBUk0gICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJRV9DRl9QQVJNICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSUVfVElNICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIElFX0lCU1NfUEFSTSAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJRV9DT1VOVFJZICAgICAgICAgICAgICAgICAgICAgIDcgICAgIC8vIDgwMi4xMWQKKyNkZWZpbmUgSUVfODAyXzExRF9SRVFVRVNUICAgICAgICAgICAgICAxMCAgICAvLyA4MDIuMTFkCisjZGVmaW5lIElFX1FCU1NfTE9BRCAgICAgICAgICAgICAgICAgICAgMTEgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9FRENBX1BBUkFNRVRFUiAgICAgICAgICAgICAgIDEyICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfVFNQRUMgICAgICAgICAgICAgICAgICAgICAgICAxMyAgICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIElFX1RDTEFTICAgICAgICAgICAgICAgICAgICAgICAgMTQgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9TQ0hFRFVMRSAgICAgICAgICAgICAgICAgICAgIDE1ICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfQ0hBTExFTkdFX1RFWFQgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJRV9QT1dFUl9DT05TVFJBSU5UICAgICAgICAgICAgIDMyICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9QT1dFUl9DQVBBQklMSVRZICAgICAgICAgICAgIDMzICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9UUENfUkVRVUVTVCAgICAgICAgICAgICAgICAgIDM0ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9UUENfUkVQT1JUICAgICAgICAgICAgICAgICAgIDM1ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9TVVBQX0NIQU5ORUxTICAgICAgICAgICAgICAgIDM2ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlQgIDM3ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9NRUFTVVJFTUVOVF9SRVFVRVNUICAgICAgICAgIDM4ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9NRUFTVVJFTUVOVF9SRVBPUlQgICAgICAgICAgIDM5ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9RVUlFVCAgICAgICAgICAgICAgICAgICAgICAgIDQwICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9JQlNTX0RGUyAgICAgICAgICAgICAgICAgICAgIDQxICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9FUlAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyICAgIC8vIDgwMi4xMWcKKyNkZWZpbmUgSUVfVFNfREVMQVkgICAgICAgICAgICAgICAgICAgICA0MyAgICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIElFX1RDTEFTX1BST0NFU1NJTkcgICAgICAgICAgICAgNDQgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9RT1NfQ0FQQUJJTElUWSAgICAgICAgICAgICAgIDQ2ICAgIC8vIDgwMi4xMWUgZDYKKyNkZWZpbmUgSUVfSFRfQ0FQICAgICAgICAgICAgICAgICAgICAgICA0NSAgICAvLyA4MDIuMTFuIGQxLiBIVCBDQVBBQklMSVRZLiBFTEVNRU5UIElEIFRCRAorI2RlZmluZSBJRV9BUF9DSEFOTkVMX1JFUE9SVAkJCTUxICAgIC8vIDgwMi4xMWsgZDYKKyNkZWZpbmUgSUVfSFRfQ0FQMiAgICAgICAgICAgICAgICAgICAgICAgICA1MiAgICAvLyA4MDIuMTFuIGQxLiBIVCBDQVBBQklMSVRZLiBFTEVNRU5UIElEIFRCRAorI2RlZmluZSBJRV9SU04gICAgICAgICAgICAgICAgICAgICAgICAgIDQ4ICAgIC8vIDgwMi4xMWkgZDMuMAorI2RlZmluZSBJRV9XUEEyICAgICAgICAgICAgICAgICAgICAgICAgIDQ4ICAgIC8vIFdQQTIKKyNkZWZpbmUgSUVfRVhUX1NVUFBfUkFURVMgICAgICAgICAgICAgICA1MCAgICAvLyA4MDIuMTFnCisjZGVmaW5lIElFX1NVUFBfUkVHX0NMQVNTICAgICAgICAgICAgICAgNTkgICAgLy8gODAyLjExeS4gU3VwcG9ydGVkIHJlZ3VsYXRvcnkgY2xhc3Nlcy4KKyNkZWZpbmUgSUVfRVhUX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVAk2MAkvLyA4MDIuMTFuCisjZGVmaW5lIElFX0FERF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA2MSAgICAvLyA4MDIuMTFuIGQxLiBBRERJVElPTkFMIEhUIENBUEFCSUxJVFkuIEVMRU1FTlQgSUQgVEJECisjZGVmaW5lIElFX0FERF9IVDIgICAgICAgICAgICAgICAgICAgICAgICA1MyAgICAvLyA4MDIuMTFuIGQxLiBBRERJVElPTkFMIEhUIENBUEFCSUxJVFkuIEVMRU1FTlQgSUQgVEJECisKKworLy8gRm9yIDgwMi4xMW4gRDMuMDMKKy8vI2RlZmluZSBJRV9ORVdfRVhUX0NIQV9PRkZTRVQgICAgICAgICAgICAgNjIgICAgLy8gODAyLjExbiBkMS4gTmV3IGV4dGVuc2lvbiBjaGFubmVsIG9mZnNldCBlbGVtZXQKKyNkZWZpbmUgSUVfU0VDT05EQVJZX0NIX09GRlNFVAkJNjIJLy8gODAyLjExbiBEMy4wMwlTZWNvbmRhcnkgQ2hhbm5lbCBPZmZzZXQgZWxlbWVudAorI2RlZmluZSBJRV9XQVBJCQkJCQkJCTY4CQkvLyBXQVBJIGluZm9ybWF0aW9uIGVsZW1lbnQKKyNkZWZpbmUgSUVfMjA0MF9CU1NfQ09FWElTVCAgICAgICAgICAgICAgIDcyICAgIC8vIDgwMi4xMW4gRDMuMC4zCisjZGVmaW5lIElFXzIwNDBfQlNTX0lOVE9MRVJBTlRfUkVQT1JUICAgICA3MyAgICAvLyA4MDIuMTFuIEQzLjAzCisjZGVmaW5lIElFX09WRVJMQVBCU1NfU0NBTl9QQVJNICAgICAgICAgICA3NCAgICAvLyA4MDIuMTFuIEQzLjAzCisjZGVmaW5lIElFX0VYVF9DQVBBQklMSVRZICAgICAgICAgICAgICAgIDEyNyAgIC8vIDgwMi4xMW4gRDMuMDMKKworCisjZGVmaW5lIElFX1dQQSAgICAgICAgICAgICAgICAgICAgICAgICAgMjIxICAgLy8gV1BBCisjZGVmaW5lIElFX1ZFTkRPUl9TUEVDSUZJQyAgICAgICAgICAgICAgMjIxICAgLy8gV2lmaSBXTU0gKFdNRSkKKworI2RlZmluZSBPVUlfQlJPQURDT01fSFQgICAgICAgICAgICAgIDUxICAgLy8KKyNkZWZpbmUgT1VJX0JST0FEQ09NX0hUQUREICAgICAgICAgICAgICA1MiAgIC8vCisjZGVmaW5lIE9VSV9QUkVOX0hUX0NBUCAgICAgICAgICAgICAgNTEgICAvLworI2RlZmluZSBPVUlfUFJFTl9BRERfSFQgICAgICAgICAgICAgIDUyICAgLy8KKworLy8gQ0NYIGluZm9ybWF0aW9uCisjZGVmaW5lIElFX0FJUk9ORVRfQ0tJUCAgICAgICAgICAgICAgICAgMTMzICAgLy8gQ0NYMS4wIElEIDg1SCBmb3IgQ0tJUAorI2RlZmluZSBJRV9BUF9UWF9QT1dFUiAgICAgICAgICAgICAgICAgIDE1MCAgIC8vIENDWCAyLjAgZm9yIEFQIHRyYW5zbWl0IHBvd2VyCisjZGVmaW5lIElFX01FQVNVUkVNRU5UX0NBUEFCSUxJVFkgICAgICAgMjIxICAgLy8gQ0NYIDIuMAorI2RlZmluZSBJRV9DQ1hfVjIgICAgICAgICAgICAgICAgICAgICAgIDIyMQorI2RlZmluZSBJRV9BSVJPTkVUX0lQQUREUkVTUyAgICAgICAgICAgIDE0OSAgIC8vIENDWCBJRCA5NUggZm9yIElQIEFkZHJlc3MKKyNkZWZpbmUgSUVfQUlST05FVF9DQ0tNUkVBU1NPQyAgICAgICAgICAxNTYgICAvLyBDQ1ggSUQgOUNIIGZvciBDQ0tNIFJlYXNzb2NpYXRpb24gUmVxdWVzdCBlbGVtZW50CisjZGVmaW5lIENLSVBfTkVHT1RJQVRJT05fTEVOR1RIICAgICAgICAgMzAKKyNkZWZpbmUgQUlST05FVF9JUEFERFJFU1NfTEVOR1RIICAgICAgICAxMAorI2RlZmluZSBBSVJPTkVUX0NDS01SRUFTU09DX0xFTkdUSCAgICAgIDI0CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FIHN0YXRlIG1hY2hpbmUgZGVmaW5pdGlvbgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gU1RBIE1MTUUgc3RhdGUgbWFoY2luZXMKKyNkZWZpbmUgQVNTT0NfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAxCisjZGVmaW5lIEFVVEhfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVRIX1JTUF9TVEFURV9NQUNISU5FICAgICAgICAgIDMKKyNkZWZpbmUgU1lOQ19TVEFURV9NQUNISU5FICAgICAgICAgICAgICA0CisjZGVmaW5lIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FICAgICAgICAgNQorI2RlZmluZSBXUEFfUFNLX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDYKKyNkZWZpbmUgTEVBUF9TVEFURV9NQUNISU5FICAgICAgICAgICAgICA3CisjZGVmaW5lIEFJUk9ORVRfU1RBVEVfTUFDSElORSAgICAgICAgICAgOAorI2RlZmluZSBBQ1RJT05fU1RBVEVfTUFDSElORSAgICAgICAgICAgOQorCisvLyBBUCBNTE1FIHN0YXRlIG1hY2hpbmVzCisjZGVmaW5lIEFQX0FTU09DX1NUQVRFX01BQ0hJTkUgICAgICAgICAgMTEKKyNkZWZpbmUgQVBfQVVUSF9TVEFURV9NQUNISU5FICAgICAgICAgICAxMgorI2RlZmluZSBBUF9BVVRIX1JTUF9TVEFURV9NQUNISU5FICAgICAgIDEzCisjZGVmaW5lIEFQX1NZTkNfU1RBVEVfTUFDSElORSAgICAgICAgICAgMTQKKyNkZWZpbmUgQVBfQ05UTF9TVEFURV9NQUNISU5FICAgICAgICAgICAxNQorI2RlZmluZSBBUF9XUEFfU1RBVEVfTUFDSElORSAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgV1NDX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAxNworI2RlZmluZSBXU0NfVVBOUF9TVEFURV9NQUNISU5FCQkgICAgMTgKKworCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKyNkZWZpbmUgRExTX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgICAyNgorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvLworLy8gU1RBJ3MgQ09OVFJPTC9DT05ORUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBDTlRMX0lETEUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ05UTF9XQUlUX0RJU0FTU09DICAgICAgICAgICAgICAxCisjZGVmaW5lIENOVExfV0FJVF9KT0lOICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDTlRMX1dBSVRfUkVBU1NPQyAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ05UTF9XQUlUX1NUQVJUICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENOVExfV0FJVF9BVVRIICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDTlRMX1dBSVRfQVNTT0MgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ05UTF9XQUlUX0FVVEgyICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENOVExfV0FJVF9PSURfTElTVF9TQ0FOICAgICAgICAgOAorI2RlZmluZSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DICAgICAgICAgIDkKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgQ05UTF9XQUlUX1NDQU5fRk9SX0NPTk5FQ1QgICAgICAxMAorI2VuZGlmIC8vIFJUMjg3MCAvLworCisjZGVmaW5lIE1UMl9BU1NPQ19DT05GICAgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgTVQyX0FVVEhfQ09ORiAgICAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBNVDJfREVBVVRIX0NPTkYgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIE1UMl9ESVNBU1NPQ19DT05GICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgTVQyX1JFQVNTT0NfQ09ORiAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBNVDJfUFdSX01HTVRfQ09ORiAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIE1UMl9KT0lOX0NPTkYgICAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgTVQyX1NDQU5fQ09ORiAgICAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBNVDJfU1RBUlRfQ09ORiAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIE1UMl9HRVRfQ09ORiAgICAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgTVQyX1NFVF9DT05GICAgICAgICAgICAgICAgICAgICA0NAorI2RlZmluZSBNVDJfUkVTRVRfQ09ORiAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIE1UMl9NTE1FX1JPQU1JTkdfUkVRICAgICAgICAgICAgNTIKKworI2RlZmluZSBDTlRMX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAgIDEKKworLy8KKy8vIFNUQSdzIEFTU09DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBU1NPQ19JRExFICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVNTT0NfV0FJVF9SU1AgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJFQVNTT0NfV0FJVF9SU1AgICAgICAgICAgICAgICAgMgorI2RlZmluZSBESVNBU1NPQ19XQUlUX1JTUCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUFYX0FTU09DX1NUQVRFICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgQVNTT0NfTUFDSElORV9CQVNFICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9NTE1FX0FTU09DX1JFUSAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9SRUFTU09DX1JFUSAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX01MTUVfRElTQVNTT0NfUkVRICAgICAgICAgICAyCisjZGVmaW5lIE1UMl9QRUVSX0RJU0FTU09DX1JFUSAgICAgICAgICAgMworI2RlZmluZSBNVDJfUEVFUl9BU1NPQ19SRVEgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTVQyX1BFRVJfQVNTT0NfUlNQICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UMl9QRUVSX1JFQVNTT0NfUkVRICAgICAgICAgICAgNgorI2RlZmluZSBNVDJfUEVFUl9SRUFTU09DX1JTUCAgICAgICAgICAgIDcKKyNkZWZpbmUgTVQyX0RJU0FTU09DX1RJTUVPVVQgICAgICAgICAgICA4CisjZGVmaW5lIE1UMl9BU1NPQ19USU1FT1VUICAgICAgICAgICAgICAgOQorI2RlZmluZSBNVDJfUkVBU1NPQ19USU1FT1VUICAgICAgICAgICAgIDEwCisjZGVmaW5lIE1BWF9BU1NPQ19NU0cgICAgICAgICAgICAgICAgICAgMTEKKworI2RlZmluZSBBU1NPQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAgIChNQVhfQVNTT0NfU1RBVEUgKiBNQVhfQVNTT0NfTVNHKQorCisvLworLy8gQUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBQ1RfSURMRSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1BWF9BQ1RfU1RBVEUgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBQ1RfTUFDSElORV9CQVNFICAgICAgICAgICAgICAwCisKKy8vVGhvc2UgUEVFUl94eF9DQVRFIG51bWJlciBpcyBiYXNlZCBvbiByZWFsIENhdGVnYXJ5IHZhbHVlIGluIElFRUUgc3BlYy4gUGxlYXNlIGRvbidlcyBtb2RpZnkgaXQgYnkgeW91ciBzZWxmLgorLy9DYXRlZ29yeQorI2RlZmluZSBNVDJfUEVFUl9TUEVDVFJVTV9DQVRFICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9QRUVSX1FPU19DQVRFICAgICAgICAgICAgICAxCisjZGVmaW5lIE1UMl9QRUVSX0RMU19DQVRFICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVQyX1BFRVJfQkFfQ0FURSAgICAgICAgICAgICAzCisjZGVmaW5lIE1UMl9QRUVSX1BVQkxJQ19DQVRFICAgICAgICAgICAgIDQKKyNkZWZpbmUgTVQyX1BFRVJfUk1fQ0FURSAgICAgICAgICAgICA1CisjZGVmaW5lIE1UMl9QRUVSX0hUX0NBVEUgICAgICAgICAgICAgNwkvLwk3LjQuNworI2RlZmluZSBNQVhfUEVFUl9DQVRFX01TRyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE1UMl9NTE1FX0FERF9CQV9DQVRFICAgICAgICAgICAgIDgKKyNkZWZpbmUgTVQyX01MTUVfT1JJX0RFTEJBX0NBVEUgICAgICAgICAgICAgOQorI2RlZmluZSBNVDJfTUxNRV9SRUNfREVMQkFfQ0FURSAgICAgICAgICAgICAxMAorI2RlZmluZSBNVDJfTUxNRV9RT1NfQ0FURSAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgTVQyX01MTUVfRExTX0NBVEUgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTVQyX0FDVF9JTlZBTElEICAgICAgICAgICAgIDEzCisjZGVmaW5lIE1BWF9BQ1RfTVNHICAgICAgICAgICAgICAgICAgIDE0CisKKy8vQ2F0ZWdvcnkgZmllbGQKKyNkZWZpbmUgQ0FURUdPUllfU1BFQ1RSVU0JCTAKKyNkZWZpbmUgQ0FURUdPUllfUU9TCQkJMQorI2RlZmluZSBDQVRFR09SWV9ETFMJCQkyCisjZGVmaW5lIENBVEVHT1JZX0JBCQkJMworI2RlZmluZSBDQVRFR09SWV9QVUJMSUMJCTQKKyNkZWZpbmUgQ0FURUdPUllfUk0JCQk1CisjZGVmaW5lIENBVEVHT1JZX0hUCQkJNworCisKKy8vIERMUyBBY3Rpb24gZnJhbWUgZGVmaW5pdGlvbgorI2RlZmluZSBBQ1RJT05fRExTX1JFUVVFU1QJCQkwCisjZGVmaW5lIEFDVElPTl9ETFNfUkVTUE9OU0UJCQkxCisjZGVmaW5lIEFDVElPTl9ETFNfVEVBUkRPV04JCQkyCisKKy8vU3BlY3RydW0gIEFjdGlvbiBmaWVsZCB2YWx1ZSA4MDIuMTFoIDcuNC4xCisjZGVmaW5lIFNQRUNfTVJRCTAJLy8gUmVxdWVzdAorI2RlZmluZSBTUEVDX01SUAkxCS8vUmVwb3J0CisjZGVmaW5lIFNQRUNfVFBDUlEJMgorI2RlZmluZSBTUEVDX1RQQ1JQCTMKKyNkZWZpbmUgU1BFQ19DSEFOTkVMX1NXSVRDSAk0CisKKworLy9CQSAgQWN0aW9uIGZpZWxkIHZhbHVlCisjZGVmaW5lIEFEREJBX1JFUQkwCisjZGVmaW5lIEFEREJBX1JFU1AJMQorI2RlZmluZSBERUxCQSAgIDIKKworLy9QdWJsaWMncyAgQWN0aW9uIGZpZWxkIHZhbHVlIGluIFB1YmxpYyBDYXRlZ29yeS4gIFNvbWUgaW4gODAyLjExeSBhbmQgc29tZSBpbiAxMW4KKyNkZWZpbmUgQUNUSU9OX0JTU18yMDQwX0NPRVhJU1QJCQkJMAkvLyAxMW4KKyNkZWZpbmUgQUNUSU9OX0RTRV9FTkFCTEVNRU5UCQkJCQkxCS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9EU0VfREVFTkFCTEVNRU5UCQkJCTIJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX0RTRV9SRUdfTE9DQVRJT05fQU5OT1VOQ0UJMwkvLyAxMXkgRDkuMAorI2RlZmluZSBBQ1RJT05fRVhUX0NIX1NXSVRDSF9BTk5PVU5DRQkJNAkvLyAxMXkgRDkuMAorI2RlZmluZSBBQ1RJT05fRFNFX01FQVNVUkVNRU5UX1JFUQkJCTUJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX0RTRV9NRUFTVVJFTUVOVF9SRVBPUlQJCTYJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX01FQVNVUkVNRU5UX1BJTE9UX0FDVElPTgkJNyAgCS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9EU0VfUE9XRVJfQ09OU1RSQUlOVAkJCTgJLy8gMTF5IEQ5LjAKKworCisvL0hUICBBY3Rpb24gZmllbGQgdmFsdWUKKyNkZWZpbmUgTk9USUZZX0JXX0FDVElPTgkJCQkwCisjZGVmaW5lIFNNUFNfQUNUSU9OCQkJCQkJMQorI2RlZmluZSBQU01QX0FDVElPTiAgIAkJCQkJMgorI2RlZmluZSBTRVRQQ09fQUNUSU9OCQkJCQkzCisjZGVmaW5lIE1JTU9fQ0hBX01FQVNVUkVfQUNUSU9OCQkJNAorI2RlZmluZSBNSU1PX05fQkVBQ09ORk9STQkJCQk1CisjZGVmaW5lIE1JTU9fQkVBQ09ORk9STQkJCQkJNgorI2RlZmluZSBBTlRFTk5BX1NFTEVDVAkJCQkJNworI2RlZmluZSBIVF9JTkZPX0VYQ0hBTkdFCQkJCTgKKworI2RlZmluZSBBQ1RfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAoTUFYX0FDVF9TVEFURSAqIE1BWF9BQ1RfTVNHKQorLy8KKy8vIFNUQSdzIEFVVEhFTlRJQ0FUSU9OIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZ2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVVUSF9SRVFfSURMRSAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVVEhfV0FJVF9TRVEyICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVRIX1dBSVRfU0VRNCAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX0FVVEhfU1RBVEUgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgQVVUSF9NQUNISU5FX0JBU0UgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9NTE1FX0FVVEhfUkVRICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfUEVFUl9BVVRIX0VWRU4gICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX0FVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9BVVRIX01TRyAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFVVEhfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAgKE1BWF9BVVRIX1NUQVRFICogTUFYX0FVVEhfTVNHKQorCisvLworLy8gU1RBJ3MgQVVUSF9SU1Agc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFVVEhfUlNQX0lETEUgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVRIX1JTUF9XQUlUX0NIQUwgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUFYX0FVVEhfUlNQX1NUQVRFICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgQVVUSF9SU1BfTUFDSElORV9CQVNFICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9BVVRIX0NIQUxMRU5HRV9USU1FT1VUICAgICAgMAorI2RlZmluZSBNVDJfUEVFUl9BVVRIX09ERCAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX1BFRVJfREVBVVRIICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9BVVRIX1JTUF9NU0cgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFVVEhfUlNQX0ZVTkNfU0laRSAgICAgICAgICAgICAgKE1BWF9BVVRIX1JTUF9TVEFURSAqIE1BWF9BVVRIX1JTUF9NU0cpCisKKy8vCisvLyBTVEEncyBTWU5DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBTWU5DX0lETEUgICAgICAgICAgICAgICAgICAgICAgIDAgIC8vIG1lcmdlIE5PX0JTUyxJQlNTX0lETEUsSUJTU19BQ1RJVkUgYW5kIEJTUyBpbiB0byAxIHN0YXRlCisjZGVmaW5lIEpPSU5fV0FJVF9CRUFDT04gICAgICAgICAgICAgICAgMQorI2RlZmluZSBTQ0FOX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX1NZTkNfU1RBVEUgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgU1lOQ19NQUNISU5FX0JBU0UgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9NTE1FX1NDQU5fUkVRICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9KT0lOX1JFUSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX01MTUVfU1RBUlRfUkVRICAgICAgICAgICAgICAyCisjZGVmaW5lIE1UMl9QRUVSX0JFQUNPTiAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNVDJfUEVFUl9QUk9CRV9SU1AgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTVQyX1BFRVJfQVRJTSAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UMl9TQ0FOX1RJTUVPVVQgICAgICAgICAgICAgICAgNgorI2RlZmluZSBNVDJfQkVBQ09OX1RJTUVPVVQgICAgICAgICAgICAgIDcKKyNkZWZpbmUgTVQyX0FUSU1fVElNRU9VVCAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1UMl9QRUVSX1BST0JFX1JFUSAgICAgICAgICAgICAgOQorI2RlZmluZSBNQVhfU1lOQ19NU0cgICAgICAgICAgICAgICAgICAgIDEwCisKKyNkZWZpbmUgU1lOQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAgICAoTUFYX1NZTkNfU1RBVEUgKiBNQVhfU1lOQ19NU0cpCisKKy8vTWVzc2FnZXMgZm9yIHRoZSBETFMgc3RhdGUgbWFjaGluZQorI2RlZmluZSBETFNfSURMRQkJCQkJCTAKKyNkZWZpbmUgTUFYX0RMU19TVEFURQkJCQkJMQorCisjZGVmaW5lIERMU19NQUNISU5FX0JBU0UJCQkJMAorI2RlZmluZSBNVDJfTUxNRV9ETFNfUkVRCQkJICAgIDAKKyNkZWZpbmUgTVQyX1BFRVJfRExTX1JFUQkJCSAgICAxCisjZGVmaW5lIE1UMl9QRUVSX0RMU19SU1AJCQkgICAgMgorI2RlZmluZSBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOCQkgICAgMworI2RlZmluZSBNVDJfUEVFUl9ETFNfVEVBUl9ET1dOCQkgICAgNAorI2RlZmluZSBNQVhfRExTX01TRwkJCQkgICAgICAgIDUKKworI2RlZmluZSBETFNfRlVOQ19TSVpFCQkJCQkoTUFYX0RMU19TVEFURSAqIE1BWF9ETFNfTVNHKQorCisvLworLy8gU1RBJ3MgV1BBLVBTSyBTdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgV1BBX1BTS19JRExFCQkJCQkwCisjZGVmaW5lIE1BWF9XUEFfUFNLX1NUQVRFCQkJCTEKKworI2RlZmluZSBXUEFfTUFDSElORV9CQVNFICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTVQyX0VBUFBhY2tldCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9FQVBPTFN0YXJ0ICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNVDJfRUFQT0xMb2dvZmYgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVQyX0VBUE9MS2V5ICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1UMl9FQVBPTEFTRkFsZXJ0ICAgICAgICAgICAgICAgNAorI2RlZmluZSBNQVhfV1BBX1BTS19NU0cgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZQlXUEFfUFNLX0ZVTkNfU0laRQkJCQkoTUFYX1dQQV9QU0tfU1RBVEUgKiBNQVhfV1BBX1BTS19NU0cpCisKKy8vCisvLyBTVEEncyBDSVNDTy1BSVJPTkVUIFN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBSVJPTkVUX0lETEUJCQkJCTAKKyNkZWZpbmUJQUlST05FVF9TQ0FOTklORwkJCQkxCisjZGVmaW5lIE1BWF9BSVJPTkVUX1NUQVRFCQkJCTIKKworI2RlZmluZSBBSVJPTkVUX01BQ0hJTkVfQkFTRQkJICAgIDAKKyNkZWZpbmUgTVQyX0FJUk9ORVRfTVNHCQkJCSAgICAwCisjZGVmaW5lIE1UMl9BSVJPTkVUX1NDQU5fUkVRCQkgICAgMQorI2RlZmluZSBNVDJfQUlST05FVF9TQ0FOX0RPTkUJCSAgICAyCisjZGVmaW5lIE1BWF9BSVJPTkVUX01TRwkJCQkgICAgMworCisjZGVmaW5lCUFJUk9ORVRfRlVOQ19TSVpFCQkJCShNQVhfQUlST05FVF9TVEFURSAqIE1BWF9BSVJPTkVUX01TRykKKworLy8KKy8vIFdTQyBTdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKworLy8KKy8vIEFQJ3MgQ09OVFJPTC9DT05ORUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBUF9DTlRMX0ZVTkNfU0laRSAgICAgICAgICAgICAgIDEKKworLy8KKy8vIEFQJ3MgQVNTT0Mgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFQX0FTU09DX0lETEUgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUF9NQVhfQVNTT0NfU1RBVEUgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBUF9BU1NPQ19NQUNISU5FX0JBU0UgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX1BFRVJfRElTQVNTT0NfUkVRICAgICAgICAgMQorI2RlZmluZSBBUE1UMl9QRUVSX0FTU09DX1JFUSAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBNVDJfUEVFUl9SRUFTU09DX1JFUSAgICAgICAgICAzCisjZGVmaW5lIEFQTVQyX0NMUzNFUlIgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUF9NQVhfQVNTT0NfTVNHICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBBUF9BU1NPQ19GVU5DX1NJWkUgICAgICAgICAgICAgIChBUF9NQVhfQVNTT0NfU1RBVEUgKiBBUF9NQVhfQVNTT0NfTVNHKQorCisvLworLy8gQVAncyBBVVRIRU5USUNBVElPTiBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfQVVUSF9SRVFfSURMRSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX01BWF9BVVRIX1NUQVRFICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIEFQX0FVVEhfTUFDSElORV9CQVNFICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9NTE1FX0RFQVVUSF9SRVEgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfQ0xTMkVSUiAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQX01BWF9BVVRIX01TRyAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEFQX0FVVEhfRlVOQ19TSVpFICAgICAgICAgICAgICAgKEFQX01BWF9BVVRIX1NUQVRFICogQVBfTUFYX0FVVEhfTVNHKQorCisvLworLy8gQVAncyBBVVRILVJTUCBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfQVVUSF9SU1BfSURMRSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX01BWF9BVVRIX1JTUF9TVEFURSAgICAgICAgICAgMQorCisjZGVmaW5lIEFQX0FVVEhfUlNQX01BQ0hJTkVfQkFTRSAgICAgICAgMAorI2RlZmluZSBBUE1UMl9BVVRIX0NIQUxMRU5HRV9USU1FT1VUICAgIDAKKyNkZWZpbmUgQVBNVDJfUEVFUl9BVVRIX09ERCAgICAgICAgICAgICAxCisjZGVmaW5lIEFQTVQyX1BFRVJfREVBVVRIICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUF9NQVhfQVVUSF9SU1BfTVNHICAgICAgICAgICAgIDMKKworI2RlZmluZSBBUF9BVVRIX1JTUF9GVU5DX1NJWkUgICAgICAgICAgIChBUF9NQVhfQVVUSF9SU1BfU1RBVEUgKiBBUF9NQVhfQVVUSF9SU1BfTVNHKQorCisvLworLy8gQVAncyBTWU5DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBUF9TWU5DX0lETEUgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBfU0NBTl9MSVNURU4JCQkJCTEKKyNkZWZpbmUgQVBfTUFYX1NZTkNfU1RBVEUgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgQVBfU1lOQ19NQUNISU5FX0JBU0UgICAgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX1BFRVJfUFJPQkVfUkVRICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9QRUVSX0JFQUNPTiAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBNVDJfTUxNRV9TQ0FOX1JFUQkJCQkyCisjZGVmaW5lIEFQTVQyX1BFRVJfUFJPQkVfUlNQCQkJMworI2RlZmluZSBBUE1UMl9TQ0FOX1RJTUVPVVQJCQkJNAorI2RlZmluZSBBUE1UMl9NTE1FX1NDQU5fQ05DTAkJCTUKKyNkZWZpbmUgQVBfTUFYX1NZTkNfTVNHICAgICAgICAgICAgICAgICA2CisKKyNkZWZpbmUgQVBfU1lOQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAoQVBfTUFYX1NZTkNfU1RBVEUgKiBBUF9NQVhfU1lOQ19NU0cpCisKKy8vCisvLyBBUCdzIFdQQSBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfV1BBX1BUSyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX01BWF9XUEFfUFRLX1NUQVRFICAgICAgICAgICAgMQorCisjZGVmaW5lIEFQX1dQQV9NQUNISU5FX0JBU0UgICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9FQVBQYWNrZXQgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfRUFQT0xTdGFydCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQTVQyX0VBUE9MTG9nb2ZmICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUE1UMl9FQVBPTEtleSAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVBNVDJfRUFQT0xBU0ZBbGVydCAgICAgICAgICAgICA0CisjZGVmaW5lIEFQX01BWF9XUEFfTVNHICAgICAgICAgICAgICAgICAgNQorCisjZGVmaW5lIEFQX1dQQV9GVU5DX1NJWkUgICAgICAgICAgICAgICAgKEFQX01BWF9XUEFfUFRLX1NUQVRFICogQVBfTUFYX1dQQV9NU0cpCisKKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyB2YWx1ZSBkb21haW4gb2YgODAyLjExIGhlYWRlciBGQy5UeXRlLCB3aGljaCBpcyBiMy4uYjIgb2YgdGhlIDFzdC1ieXRlIG9mIE1BQyBoZWFkZXIKKyNkZWZpbmUgQlRZUEVfTUdNVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQlRZUEVfQ05UTCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQlRZUEVfREFUQSAgICAgICAgICAgICAgICAgIDIKKworLy8gdmFsdWUgZG9tYWluIG9mIDgwMi4xMSBNR01UIGZyYW1lJ3MgRkMuc3VidHlwZSwgd2hpY2ggaXMgYjcuLjQgb2YgdGhlIDFzdC1ieXRlIG9mIE1BQyBoZWFkZXIKKyNkZWZpbmUgU1VCVFlQRV9BU1NPQ19SRVEgICAgICAgICAgIDAKKyNkZWZpbmUgU1VCVFlQRV9BU1NPQ19SU1AgICAgICAgICAgIDEKKyNkZWZpbmUgU1VCVFlQRV9SRUFTU09DX1JFUSAgICAgICAgIDIKKyNkZWZpbmUgU1VCVFlQRV9SRUFTU09DX1JTUCAgICAgICAgIDMKKyNkZWZpbmUgU1VCVFlQRV9QUk9CRV9SRVEgICAgICAgICAgIDQKKyNkZWZpbmUgU1VCVFlQRV9QUk9CRV9SU1AgICAgICAgICAgIDUKKyNkZWZpbmUgU1VCVFlQRV9CRUFDT04gICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1VCVFlQRV9BVElNICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1VCVFlQRV9ESVNBU1NPQyAgICAgICAgICAgIDEwCisjZGVmaW5lIFNVQlRZUEVfQVVUSCAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBTVUJUWVBFX0RFQVVUSCAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1VCVFlQRV9BQ1RJT04gICAgICAgICAgICAgIDEzCisjZGVmaW5lIFNVQlRZUEVfQUNUSU9OX05PX0FDSyAgICAgICAgICAgICAgMTQKKworLy8gdmFsdWUgZG9tYWluIG9mIDgwMi4xMSBDTlRMIGZyYW1lJ3MgRkMuc3VidHlwZSwgd2hpY2ggaXMgYjcuLjQgb2YgdGhlIDFzdC1ieXRlIG9mIE1BQyBoZWFkZXIKKyNkZWZpbmUgU1VCVFlQRV9XUkFQUEVSICAgICAgIAk3CisjZGVmaW5lIFNVQlRZUEVfQkxPQ0tfQUNLX1JFUSAgICAgICA4CisjZGVmaW5lIFNVQlRZUEVfQkxPQ0tfQUNLICAgICAgICAgICA5CisjZGVmaW5lIFNVQlRZUEVfUFNfUE9MTCAgICAgICAgICAgICAxMAorI2RlZmluZSBTVUJUWVBFX1JUUyAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1VCVFlQRV9DVFMgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFNVQlRZUEVfQUNLICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBTVUJUWVBFX0NGRU5EICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgU1VCVFlQRV9DRkVORF9DRkFDSyAgICAgICAgIDE1CisKKy8vIHZhbHVlIGRvbWFpbiBvZiA4MDIuMTEgREFUQSBmcmFtZSdzIEZDLnN1YnR5cGUsIHdoaWNoIGlzIGI3Li40IG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyCisjZGVmaW5lIFNVQlRZUEVfREFUQSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNVQlRZUEVfREFUQV9DRkFDSyAgICAgICAgICAxCisjZGVmaW5lIFNVQlRZUEVfREFUQV9DRlBPTEwgICAgICAgICAyCisjZGVmaW5lIFNVQlRZUEVfREFUQV9DRkFDS19DRlBPTEwgICAzCisjZGVmaW5lIFNVQlRZUEVfTlVMTF9GVU5DICAgICAgICAgICA0CisjZGVmaW5lIFNVQlRZUEVfQ0ZBQ0sgICAgICAgICAgICAgICA1CisjZGVmaW5lIFNVQlRZUEVfQ0ZQT0xMICAgICAgICAgICAgICA2CisjZGVmaW5lIFNVQlRZUEVfQ0ZBQ0tfQ0ZQT0xMICAgICAgICA3CisjZGVmaW5lIFNVQlRZUEVfUURBVEEgICAgICAgICAgICAgICA4CisjZGVmaW5lIFNVQlRZUEVfUURBVEFfQ0ZBQ0sgICAgICAgICA5CisjZGVmaW5lIFNVQlRZUEVfUURBVEFfQ0ZQT0xMICAgICAgICAxMAorI2RlZmluZSBTVUJUWVBFX1FEQVRBX0NGQUNLX0NGUE9MTCAgMTEKKyNkZWZpbmUgU1VCVFlQRV9RT1NfTlVMTCAgICAgICAgICAgIDEyCisjZGVmaW5lIFNVQlRZUEVfUU9TX0NGQUNLICAgICAgICAgICAxMworI2RlZmluZSBTVUJUWVBFX1FPU19DRlBPTEwgICAgICAgICAgMTQKKyNkZWZpbmUgU1VCVFlQRV9RT1NfQ0ZBQ0tfQ0ZQT0xMICAgIDE1CisKKy8vIEFDSyBwb2xpY3kgb2YgUU9TIENvbnRyb2wgZmllbGQgYml0IDY6NQorI2RlZmluZSBOT1JNQUxfQUNLICAgICAgICAgICAgICAgICAgMHgwMCAgLy8gYjY6NSA9IDAwCisjZGVmaW5lIE5PX0FDSyAgICAgICAgICAgICAgICAgICAgICAweDIwICAvLyBiNjo1ID0gMDEKKyNkZWZpbmUgTk9fRVhQTElDSVRfQUNLICAgICAgICAgICAgIDB4NDAgIC8vIGI2OjUgPSAxMAorI2RlZmluZSBCTE9DS19BQ0sgICAgICAgICAgICAgICAgICAgMHg2MCAgLy8gYjY6NSA9IDExCisKKy8vCisvLyBydG1wX2RhdGEuYyB1c2UgdGhlc2UgZGVmaW5pdGlvbgorLy8KKyNkZWZpbmUgTEVOR1RIXzgwMl8xMSAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIExFTkdUSF84MDJfMTFfQU5EX0ggICAgICAgICAzMAorI2RlZmluZSBMRU5HVEhfODAyXzExX0NSQ19IICAgICAgICAgMzQKKyNkZWZpbmUgTEVOR1RIXzgwMl8xMV9DUkMgICAgICAgICAgIDI4CisjZGVmaW5lIExFTkdUSF84MDJfMTFfV0lUSF9BRERSNCAgICAzMAorI2RlZmluZSBMRU5HVEhfODAyXzMgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTEVOR1RIXzgwMl8zX1RZUEUgICAgICAgICAgIDIKKyNkZWZpbmUgTEVOR1RIXzgwMl8xX0ggICAgICAgICAgICAgIDgKKyNkZWZpbmUgTEVOR1RIX0VBUE9MX0ggICAgICAgICAgICAgIDQKKyNkZWZpbmUgTEVOR1RIX1dNTVFPU19ICQkJCTIKKyNkZWZpbmUgTEVOR1RIX0NSQyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX1NFUV9OVU1CRVIgICAgICAgICAgICAgIDB4MGZmZgorI2RlZmluZSBMRU5HVEhfODAyXzNfTk9fVFlQRQkJMTIKKyNkZWZpbmUgTEVOR1RIXzgwMl8xUQkJCQk0IC8qIFZMQU4gcmVsYXRlZCAqLworCisvLyBTVEFfQ1NSNC5maWVsZC5UeFJlc3VsdAorI2RlZmluZSBUWF9SRVNVTFRfU1VDQ0VTUyAgICAgICAgICAgMAorI2RlZmluZSBUWF9SRVNVTFRfWkVST19MRU5HVEggICAgICAgMQorI2RlZmluZSBUWF9SRVNVTFRfVU5ERVJfUlVOICAgICAgICAgMgorI2RlZmluZSBUWF9SRVNVTFRfT0hZX0VSUk9SICAgICAgICAgNAorI2RlZmluZSBUWF9SRVNVTFRfUkVUUllfRkFJTCAgICAgICAgNgorCisvLyBBbGwgUEhZIHJhdGUgc3VtbWFyeSBpbiBUWEQKKy8vIFByZWFtYmxlIE1PREUgaW4gVHhECisjZGVmaW5lIE1PREVfQ0NLCTAKKyNkZWZpbmUgTU9ERV9PRkRNICAgMQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2RlZmluZSBNT0RFX0hUTUlYCTIKKyNkZWZpbmUgTU9ERV9IVEdSRUVORklFTEQJMworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworLy8gTUNTIGZvciBDQ0suICBCVy5TR0kuU1RCQyBhcmUgcmVzZXJ2ZWQKKyNkZWZpbmUgTUNTX0xPTkdQX1JBVEVfMSAgICAgICAgICAgICAgICAgICAgICAwCSAvLyBsb25nIHByZWFtYmxlIENDSyAxTWJwcworI2RlZmluZSBNQ1NfTE9OR1BfUkFURV8yICAgICAgICAgICAgICAgICAgICAgIDEJLy8gbG9uZyBwcmVhbWJsZSBDQ0sgMU1icHMKKyNkZWZpbmUgTUNTX0xPTkdQX1JBVEVfNV81ICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1DU19MT05HUF9SQVRFXzExICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNQ1NfU0hPUlRQX1JBVEVfMSAgICAgICAgICAgICAgICAgICAgICA0CSAvLyBsb25nIHByZWFtYmxlIENDSyAxTWJwcy4gc2hvcnQgaXMgZm9yYmlkZGVuIGluIDFNYnBzCisjZGVmaW5lIE1DU19TSE9SVFBfUkFURV8yICAgICAgICAgICAgICAgICAgICAgIDUJLy8gc2hvcnQgcHJlYW1ibGUgQ0NLIDJNYnBzCisjZGVmaW5lIE1DU19TSE9SVFBfUkFURV81XzUgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTUNTX1NIT1JUUF9SQVRFXzExICAgICAgICAgICAgICAgICAgICAgNworLy8gVG8gc2VuZCBkdXBsaWNhdGUgbGVnYWN5IE9GRE0uIHNldCBCVz1CV180MC4gIFNHSS5TVEJDIGFyZSByZXNlcnZlZAorI2RlZmluZSBNQ1NfUkFURV82ICAgICAgICAgICAgICAgICAgICAgIDAgICAvLyBsZWdhY3kgT0ZETQorI2RlZmluZSBNQ1NfUkFURV85ICAgICAgICAgICAgICAgICAgICAgIDEgICAvLyBPRkRNCisjZGVmaW5lIE1DU19SQVRFXzEyICAgICAgICAgICAgICAgICAgICAgMiAgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfMTggICAgICAgICAgICAgICAgICAgICAzICAgLy8gT0ZETQorI2RlZmluZSBNQ1NfUkFURV8yNCAgICAgICAgICAgICAgICAgICAgIDQgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfMzYgICAgICAgICAgICAgICAgICAgICA1ICAgLy8gT0ZETQorI2RlZmluZSBNQ1NfUkFURV80OCAgICAgICAgICAgICAgICAgICAgIDYgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfNTQgICAgICAgICAgICAgICAgICAgICA3IC8vIE9GRE0KKy8vIEhUCisjZGVmaW5lIE1DU18wCQkwCS8vIDFTCisjZGVmaW5lIE1DU18xCQkxCisjZGVmaW5lIE1DU18yCQkyCisjZGVmaW5lIE1DU18zCQkzCisjZGVmaW5lIE1DU180CQk0CisjZGVmaW5lIE1DU181CQk1CisjZGVmaW5lIE1DU182CQk2CisjZGVmaW5lIE1DU183CQk3CisjZGVmaW5lIE1DU184CQk4CS8vIDJTCisjZGVmaW5lIE1DU185CQk5CisjZGVmaW5lIE1DU18xMAkJMTAKKyNkZWZpbmUgTUNTXzExCQkxMQorI2RlZmluZSBNQ1NfMTIJCTEyCisjZGVmaW5lIE1DU18xMwkJMTMKKyNkZWZpbmUgTUNTXzE0CQkxNAorI2RlZmluZSBNQ1NfMTUJCTE1CisjZGVmaW5lIE1DU18xNgkJMTYJLy8gMyozCisjZGVmaW5lIE1DU18xNwkJMTcKKyNkZWZpbmUgTUNTXzE4CQkxOAorI2RlZmluZSBNQ1NfMTkJCTE5CisjZGVmaW5lIE1DU18yMAkJMjAKKyNkZWZpbmUgTUNTXzIxCQkyMQorI2RlZmluZSBNQ1NfMjIJCTIyCisjZGVmaW5lIE1DU18yMwkJMjMKKyNkZWZpbmUgTUNTXzMyCQkzMgorI2RlZmluZSBNQ1NfQVVUTwkJMzMKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gT0lEX0hUUEhZTU9ERQorLy8gTU9ERQorI2RlZmluZSBIVE1PREVfTU0JMAorI2RlZmluZSBIVE1PREVfR0YJMQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBGaXhlZCBUeCBNT0RFIC0gSFQsIENDSyBvciBPRkRNCisjZGVmaW5lIEZJWEVEX1RYTU9ERV9IVAkJMAorI2RlZmluZSBGSVhFRF9UWE1PREVfQ0NLCTEKKyNkZWZpbmUgRklYRURfVFhNT0RFX09GRE0gCTIKKy8vIEJXCisjZGVmaW5lIEJXXzIwCQlCQU5EX1dJRFRIXzIwCisjZGVmaW5lIEJXXzQwCQlCQU5EX1dJRFRIXzQwCisjZGVmaW5lIEJXX0JPVEgJCUJBTkRfV0lEVEhfQk9USAorI2RlZmluZSBCV18xMAkJQkFORF9XSURUSF8xMAkvLyA4MDIuMTFqIGhhcyAxME1Iei4gVGhpcyBkZWZpbml0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2FnZS4gZG9lc24ndCBmaWxsIGluIHRoZSBJRSBvciBvdGhlciBmaWVsZC4KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gU0hPUlRHSQorI2RlZmluZSBHSV80MDAJCUdBUF9JTlRFUlZBTF80MDAJLy8gb25seSBzdXBwb3J0IGluIEhUIG1vZGUKKyNkZWZpbmUgR0lfQk9USAkJR0FQX0lOVEVSVkFMX0JPVEgKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNkZWZpbmUgR0lfODAwCQlHQVBfSU5URVJWQUxfODAwCisvLyBTVEJDCisjZGVmaW5lIFNUQkNfTk9ORQkwCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjZGVmaW5lIFNUQkNfVVNFCTEJLy8gbGltaXRlZCB1c2UgaW4gcnQyODYwYiBwaHkKKyNkZWZpbmUgUlhTVEJDX09ORQkxCS8vIHJ4IHN1cHBvcnQgb2Ygb25lIHNwYXRpYWwgc3RyZWFtCisjZGVmaW5lIFJYU1RCQ19UV08JMgkvLyByeCBzdXBwb3J0IG9mIDEgYW5kIDIgc3BhdGlhbCBzdHJlYW0KKyNkZWZpbmUgUlhTVEJDX1RIUgkzCS8vIHJ4IHN1cHBvcnQgb2YgMX4zIHNwYXRpYWwgc3RyZWFtCisvLyBNQ1MgRkVFREJBQ0sKKyNkZWZpbmUgTUNTRkJLX05PTkUJMCAgLy8gbm90IHN1cHBvcnQgbWNzIGZlZWRiYWNrIC8KKyNkZWZpbmUgTUNTRkJLX1JTVgkxCS8vIHJlc2VydmVkCisjZGVmaW5lIE1DU0ZCS19VTlNPTElDSVQJMgkvLyBvbmx5IHN1cHBvcnQgdW5zb2xpY3QgbWNzIGZlZWRiYWNrCisjZGVmaW5lIE1DU0ZCS19NUlEJMwkvLyByZXNwb25zZSB0byBib3RoIE1SUSBhbmQgdW5zb2xpY3QgbWNzIGZlZWRiYWNrCisKKy8vIE1JTU8gcG93ZXIgc2FmZQorI2RlZmluZQlNTVBTX1NUQVRJQwkwCisjZGVmaW5lCU1NUFNfRFlOQU1JQwkJMQorI2RlZmluZSAgIE1NUFNfUlNWCQkyCisjZGVmaW5lIE1NUFNfRU5BQkxFCQkzCisKKworLy8gQS1NU0RVIHNpemUKKyNkZWZpbmUJQU1TRFVfMAkwCisjZGVmaW5lCUFNU0RVXzEJCTEKKworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBNQ1MgdXNlIDcgYml0cworI2RlZmluZSBUWFJBVEVNSU1PCQkweDgwCisjZGVmaW5lIFRYUkFURU1DUwkJMHg3RgorI2RlZmluZSBUWFJBVEVPRkRNCQkweDdGCisjZGVmaW5lIFJBVEVfMSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJBVEVfMiAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJBVEVfNV81ICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJBVEVfMTEgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJBVEVfNiAgICAgICAgICAgICAgICAgICAgICA0ICAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzkgICAgICAgICAgICAgICAgICAgICAgNSAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV8xMiAgICAgICAgICAgICAgICAgICAgIDYgICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfMTggICAgICAgICAgICAgICAgICAgICA3ICAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzI0ICAgICAgICAgICAgICAgICAgICAgOCAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV8zNiAgICAgICAgICAgICAgICAgICAgIDkgICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfNDggICAgICAgICAgICAgICAgICAgICAxMCAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzU0ICAgICAgICAgICAgICAgICAgICAgMTEgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV9GSVJTVF9PRkRNX1JBVEUgICAgICAgIFJBVEVfNgorI2RlZmluZSBSQVRFX0xBU1RfT0ZETV9SQVRFICAgICAgICAJUkFURV81NAorI2RlZmluZSBSQVRFXzZfNSAgICAgICAgICAgICAgICAgICAgMTIgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzEzICAgICAgICAgICAgICAgICAgICAgMTMgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzE5XzUgICAgICAgICAgICAgICAgICAgMTQgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzI2ICAgICAgICAgICAgICAgICAgICAgMTUgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzM5ICAgICAgICAgICAgICAgICAgICAgMTYgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzUyICAgICAgICAgICAgICAgICAgICAgMTcgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzU4XzUgICAgICAgICAgICAgICAgICAgMTggIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzY1ICAgICAgICAgICAgICAgICAgICAgMTkgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzc4ICAgICAgICAgICAgICAgICAgICAgMjAgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzEwNCAgICAgICAgICAgICAgICAgICAgMjEgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzExNyAgICAgICAgICAgICAgICAgICAgMjIgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzEzMCAgICAgICAgICAgICAgICAgICAgMjMgIC8vIEhUIG1peAorLy8jZGVmaW5lIFJBVEVfQVVUT19TV0lUQ0ggICAgICAgICAgICAyNTUgLy8gZm9yIFN0YUNmZy5GaXhlZFR4UmF0ZSBvbmx5CisjZGVmaW5lIEhUUkFURV8wICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFJBVEVfRklSU1RfTU1fUkFURSAgICAgICAgSFRSQVRFXzAKKyNkZWZpbmUgUkFURV9GSVJTVF9IVF9SQVRFICAgICAgICBIVFJBVEVfMAorI2RlZmluZSBSQVRFX0xBU1RfSFRfUkFURSAgICAgICAgSFRSQVRFXzAKKworLy8gcFR4V0ktPnR4b3AKKyNkZWZpbmUgSUZTX0hUVFhPUCAgICAgICAgICAgICAgICAgMAkvLyBUaGUgdHhvcCB3aWxsIGJlIGhhbmRsZXMgYnkgQVNJQy4KKyNkZWZpbmUgSUZTX1BJRlMgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUZTX1NJRlMgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUZTX0JBQ0tPRkYgICAgICAgICAgICAgICAgIDMKKworLy8gcFR4RC0+UmV0cnlNb2RlCisjZGVmaW5lIExPTkdfUkVUUlkgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNIT1JUX1JFVFJZICAgICAgICAgICAgICAgICAwCisKKy8vIENvdW50cnkgUmVnaW9uIGRlZmluaXRpb24KKyNkZWZpbmUgUkVHSU9OX01JTklNVU1fQkdfQkFORCAgICAgICAgICAgIDAKKyNkZWZpbmUgUkVHSU9OXzBfQkdfQkFORCAgICAgICAgICAgICAgICAgIDAgICAgICAgLy8gMS0xMQorI2RlZmluZSBSRUdJT05fMV9CR19CQU5EICAgICAgICAgICAgICAgICAgMSAgICAgICAvLyAxLTEzCisjZGVmaW5lIFJFR0lPTl8yX0JHX0JBTkQgICAgICAgICAgICAgICAgICAyICAgICAgIC8vIDEwLTExCisjZGVmaW5lIFJFR0lPTl8zX0JHX0JBTkQgICAgICAgICAgICAgICAgICAzICAgICAgIC8vIDEwLTEzCisjZGVmaW5lIFJFR0lPTl80X0JHX0JBTkQgICAgICAgICAgICAgICAgICA0ICAgICAgIC8vIDE0CisjZGVmaW5lIFJFR0lPTl81X0JHX0JBTkQgICAgICAgICAgICAgICAgICA1ICAgICAgIC8vIDEtMTQKKyNkZWZpbmUgUkVHSU9OXzZfQkdfQkFORCAgICAgICAgICAgICAgICAgIDYgICAgICAgLy8gMy05CisjZGVmaW5lIFJFR0lPTl83X0JHX0JBTkQgICAgICAgICAgICAgICAgICA3ICAgICAgIC8vIDUtMTMKKyNkZWZpbmUgUkVHSU9OXzMxX0JHX0JBTkQgICAgICAgICAgICAgICAgIDMxICAgICAgIC8vIDUtMTMKKyNkZWZpbmUgUkVHSU9OX01BWElNVU1fQkdfQkFORCAgICAgICAgICAgIDcKKworI2RlZmluZSBSRUdJT05fTUlOSU1VTV9BX0JBTkQgICAgICAgICAgICAgMAorI2RlZmluZSBSRUdJT05fMF9BX0JBTkQgICAgICAgICAgICAgICAgICAgMCAgICAgICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl8xX0FfQkFORCAgICAgICAgICAgICAgICAgICAxICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKKyNkZWZpbmUgUkVHSU9OXzJfQV9CQU5EICAgICAgICAgICAgICAgICAgIDIgICAgICAgLy8gMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0CisjZGVmaW5lIFJFR0lPTl8zX0FfQkFORCAgICAgICAgICAgICAgICAgICAzICAgICAgIC8vIDUyLCA1NiwgNjAsIDY0LCAxNDksIDE1MywgMTU3LCAxNjEKKyNkZWZpbmUgUkVHSU9OXzRfQV9CQU5EICAgICAgICAgICAgICAgICAgIDQgICAgICAgLy8gMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUKKyNkZWZpbmUgUkVHSU9OXzVfQV9CQU5EICAgICAgICAgICAgICAgICAgIDUgICAgICAgLy8gMTQ5LCAxNTMsIDE1NywgMTYxCisjZGVmaW5lIFJFR0lPTl82X0FfQkFORCAgICAgICAgICAgICAgICAgICA2ICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4CisjZGVmaW5lIFJFR0lPTl83X0FfQkFORCAgICAgICAgICAgICAgICAgICA3ICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl84X0FfQkFORCAgICAgICAgICAgICAgICAgICA4ICAgICAgIC8vIDUyLCA1NiwgNjAsIDY0CisjZGVmaW5lIFJFR0lPTl85X0FfQkFORCAgICAgICAgICAgICAgICAgICA5ICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl8xMF9BX0JBTkQgICAgICAgICAgICAgICAgICAxMAkgIC8vIDM2LCA0MCwgNDQsIDQ4LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQorI2RlZmluZSBSRUdJT05fMTFfQV9CQU5EICAgICAgICAgICAgICAgICAgMTEJICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDE0OSwgMTUzLCAxNTcsIDE2MQorI2RlZmluZSBSRUdJT05fTUFYSU1VTV9BX0JBTkQgICAgICAgICAgICAgMTEKKworLy8gcFR4RC0+Q2lwaGVyQWxnCisjZGVmaW5lIENJUEhFUl9OT05FICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENJUEhFUl9XRVA2NCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENJUEhFUl9XRVAxMjggICAgICAgICAgICAgICAyCisjZGVmaW5lIENJUEhFUl9US0lQICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENJUEhFUl9BRVMgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENJUEhFUl9DS0lQNjQgICAgICAgICAgICAgICA1CisjZGVmaW5lIENJUEhFUl9DS0lQMTI4ICAgICAgICAgICAgICA2CisjZGVmaW5lIENJUEhFUl9US0lQX05PX01JQyAgICAgICAgICA3ICAgICAgIC8vIE1JQyBhcHBlbmRlZCBieSBkcml2ZXI6IG5vdCBhIHZhbGlkIHZhbHVlIGluIGhhcmR3YXJlIGtleSB0YWJsZQorI2RlZmluZSBDSVBIRVJfU01TNAkJCQkJOAorCisvLyB2YWx1ZSBkb21haW4gb2YgcEFkLT5SZkljVHlwZQorI2RlZmluZSBSRklDXzI4MjAgICAgICAgICAgICAgICAgICAgMSAgICAgICAvLyAyLjRHIDJUM1IKKyNkZWZpbmUgUkZJQ18yODUwICAgICAgICAgICAgICAgICAgIDIgICAgICAgLy8gMi40Ry81RyAyVDNSCisjZGVmaW5lIFJGSUNfMjcyMCAgICAgICAgICAgICAgICAgICAzICAgICAgIC8vIDIuNEcgMVQyUgorI2RlZmluZSBSRklDXzI3NTAgICAgICAgICAgICAgICAgICAgNCAgICAgICAvLyAyLjRHLzVHIDFUMlIKKyNkZWZpbmUgUkZJQ18zMDIwICAgICAgICAgICAgICAgICAgIDUgICAgICAgLy8gMi40RyAxVDFSCisjZGVmaW5lIFJGSUNfMjAyMCAgICAgICAgICAgICAgICAgICA2ICAgICAgIC8vIDIuNEcgQi9HCisjZGVmaW5lIFJGSUNfMzAyMSAgICAgICAgICAgICAgICAgICA3ICAgICAgIC8vIDIuNEcgMVQyUgorI2RlZmluZSBSRklDXzMwMjIgICAgICAgICAgICAgICAgICAgOCAgICAgICAvLyAyLjRHIDJUMlIKKworLy8gTEVEIFN0YXR1cy4KKyNkZWZpbmUgTEVEX0xJTktfRE9XTiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTEVEX0xJTktfVVAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTEVEX1JBRElPX09GRiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTEVEX1JBRElPX09OICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTEVEX0hBTFQgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTEVEX1dQUyAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTEVEX09OX1NJVEVfU1VSVkVZICAgICAgICAgIDYKKyNkZWZpbmUgTEVEX1BPV0VSX1VQICAgICAgICAgICAgICAgIDcKKworLy8gdmFsdWUgZG9tYWluIG9mIHBBZC0+TGVkQ250bC5MZWRNb2RlIGFuZCBFMlBST00KKyNkZWZpbmUgTEVEX01PREVfREVGQVVMVCAgICAgICAgICAgIDAKKyNkZWZpbmUgTEVEX01PREVfVFdPX0xFRAkJCTEKKyNkZWZpbmUgTEVEX01PREVfU0lHTkFMX1NUUkVHVEgJCTggIC8vIEVFUFJPTSBkZWZpbmUgPTgKKworLy8gUkM0IGluaXQgdmFsdWUsIHVzZWQgZnJvIFdFUCAmIFRLSVAKKyNkZWZpbmUgUFBQSU5JVEZDUzMyICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYgICAvKiBJbml0aWFsIEZDUyB2YWx1ZSAqLworCisvLyB2YWx1ZSBkb21haW4gb2YgcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQuIDgwMi4xWCBjb250cm9sbGVkIHBvcnQgZGVmaW5pdGlvbgorI2RlZmluZSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCAgICAgMQorI2RlZmluZSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQgMgorCisjZGVmaW5lIFBBSVJXSVNFX0tFWSAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdST1VQX0tFWSAgICAgICAgICAgICAgICAgICAyCisKKy8vZGVmaW5pdGlvbiBvZiBEUlMKKyNkZWZpbmUgTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gJMzIKKworCisvLyBwcmUtYWxsb2NhdGVkIGZyZWUgTkRJUyBQQUNLRVQvQlVGRkVSIHBvbGwgZm9yIGludGVybmFsIHVzYWdlCisjZGVmaW5lIE1BWF9OVU1fT0ZfRlJFRV9ORElTX1BBQ0tFVCAxMjgKKworLy9CbG9jayBBQ0sKKyNkZWZpbmUgTUFYX1RYX1JFT1JERVJCVUYgICA2NAorI2RlZmluZSBNQVhfUlhfUkVPUkRFUkJVRiAgIDY0CisjZGVmaW5lIERFRkFVTFRfVFhfVElNRU9VVCAgIDMwCisjZGVmaW5lIERFRkFVTFRfUlhfVElNRU9VVCAgIDMwCisKKy8vIGRlZmluaXRpb24gb2YgUmVjaXBpZW50IG9yIE9yaWdpbmF0b3IKKyNkZWZpbmUgSV9SRUNJUElFTlQgICAgICAgICAgICAgICAgICBUUlVFCisjZGVmaW5lIElfT1JJR0lOQVRPUiAgICAgICAgICAgICAgICAgICBGQUxTRQorCisjZGVmaW5lIERFRkFVTFRfQkJQX1RYX1BPV0VSICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfUkZfVFhfUE9XRVIgICAgICAgICA1CisKKyNkZWZpbmUgTUFYX0lOSV9CVUZGRVJfU0laRQkJCTQwOTYKKyNkZWZpbmUgTUFYX1BBUkFNX0JVRkZFUl9TSVpFCQkoMjA0OCkgLy8gZW5vdWdoIGZvciBBQ0wgKDE4KjY0KQorCQkJCQkJCQkJCQkvLzE4IDogdGhlIGxlbmd0aCBvZiBNYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAiMDE6MDI6MDM6MDQ6MDU6MDY7IikKKwkJCQkJCQkJCQkJLy82NCA6IE1BWF9OVU1fT0ZfQUNMX0xJU1QKKy8vIGRlZmluaXRpb24gb2YgcEFkLT5PcE1vZGUKKyNkZWZpbmUgT1BNT0RFX1NUQSAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1BNT0RFX0FQICAgICAgICAgICAgICAgICAgIDEKKy8vI2RlZmluZSBPUE1PREVfTDNfQlJHICAgICAgICAgICAgICAgMiAgICAgICAvLyBhcyBBUCBhbmQgU1RBIGF0IHRoZSBzYW1lIHRpbWUKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyNkZWZpbmUgRElSX1JFQUQgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRElSX1dSSVRFICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFlQRV9UWEQgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFlQRV9SWEQgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFlQRV9UWElORk8JCQkJCTAKKyNkZWZpbmUgVFlQRV9SWElORk8JCQkJCTEKKyNkZWZpbmUgVFlQRV9UWFdJCQkJCQkwCisjZGVmaW5lIFRZUEVfUlhXSQkJCQkJMQorI2VuZGlmCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT0gQVAgcnRtcF9kZWYuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHZhbHVlIGRvbWFpbiBmb3IgcEFkLT5FdmVudFRhYi5Mb2dbXS5FdmVudAorI2RlZmluZSBFVkVOVF9SRVNFVF9BQ0NFU1NfUE9JTlQgICAgMCAvLyBMb2cgPSAiaGg6bW06c3MgICBSZXN0YXJ0IEFjY2VzcyBQb2ludCIKKyNkZWZpbmUgRVZFTlRfQVNTT0NJQVRFRCAgICAgICAgICAgIDEgLy8gTG9nID0gImhoOm1tOnNzICAgU1RBIDAwOjAxOjAyOjAzOjA0OjA1IGFzc29jaWF0ZWQiCisjZGVmaW5lIEVWRU5UX0RJU0FTU09DSUFURUQgICAgICAgICAyIC8vIExvZyA9ICJoaDptbTpzcyAgIFNUQSAwMDowMTowMjowMzowNDowNSBsZWZ0IHRoaXMgQlNTIgorI2RlZmluZSBFVkVOVF9BR0VEX09VVCAgICAgICAgICAgICAgMyAvLyBMb2cgPSAiaGg6bW06c3MgICBTVEEgMDA6MDE6MDI6MDM6MDQ6MDUgd2FzIGFnZWQtb3V0IGFuZCByZW1vdmVkIGZyb20gdGhpcyBCU1MiCisjZGVmaW5lIEVWRU5UX0NPVU5URVJfTSAgICAgICAgICAgICA0CisjZGVmaW5lIEVWRU5UX0lOVkFMSURfUFNLICAgICAgICAgICA1CisjZGVmaW5lIEVWRU5UX01BWF9FVkVOVF9UWVBFICAgICAgICA2CisvLyA9PT09IGVuZCBvZiBBUCBydG1wX2RlZi5oID09PT09PT09PT09PQorCisvLyBkZWZpbml0aW9uIFJTU0kgTnVtYmVyCisjZGVmaW5lIFJTU0lfMAkJCQkJMAorI2RlZmluZSBSU1NJXzEJCQkJCTEKKyNkZWZpbmUgUlNTSV8yCQkJCQkyCisKKy8vIGRlZmluaXRpb24gb2YgcmFkYXIgZGV0ZWN0aW9uCisjZGVmaW5lIFJEX05PUk1BTF9NT0RFCQkJCTAJLy8gTm90IGZvdW5kIHJhZGFyIHNpZ25hbAorI2RlZmluZSBSRF9TV0lUQ0hJTkdfTU9ERQkJCTEJLy8gRm91bmQgcmFkYXIgc2lnbmFsLCBhbmQgZG9pbmcgY2hhbm5lbCBzd2l0Y2gKKyNkZWZpbmUgUkRfU0lMRU5DRV9NT0RFCQkJCTIJLy8gQWZ0ZXIgY2hhbm5lbCBzd2l0Y2gsIG5lZWQgdG8gYmUgc2lsZW5jZSBhIHdoaWxlIHRvIGVuc3VyZSByYWRhciBub3QgZm91bmQKKworLy9Ecml2ZXIgZGVmaW5lZCBjaWQgZm9yIG1hcHBpbmcgc3RhdHVzIGFuZCBjb21tYW5kLgorI2RlZmluZSAgU0xFRVBDSUQJMHgxMQorI2RlZmluZSAgV0FLRUNJRAkweDIyCisjZGVmaW5lICBRVUVSWVBPV0VSQ0lECTB4MzMKKyNkZWZpbmUgIE9XTkVSTUNVCTB4MQorI2RlZmluZSAgT1dORVJDUFUJMHgwCisKKy8vIE1CU1NJRCBkZWZpbml0aW9uCisjZGVmaW5lIEVOVFJZX05PVF9GT1VORCAgICAgICAgICAgICAweEZGCisKKworLyogQWZ0ZXIgTGludXggMi42LjksCisgKiBWTEFOIG1vZHVsZSB1c2UgUHJpdmF0ZSAoZnJvbSB1c2VyKSBpbnRlcmZhY2UgZmxhZ3MgKG5ldGRldmljZS0+cHJpdl9mbGFncykuCisgKiAjZGVmaW5lIElGRl84MDJfMVFfVkxBTiAweDEgICAgICAgICAtLSAgICA4MDIuMVEgVkxBTiBkZXZpY2UuICBpbiBpZi5oCisgKiByZWYgdG8gaXBfc2Fib3RhZ2Vfb3V0KCkgWyBvdXQtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4gXSBpbiBicl9uZXRmaWx0ZXIuYworICoKKyAqIEZvciB0aGlzIHJlYXNvbiwgd2UgTVVTVCB1c2UgRVZFTiB2YWx1ZSBpbiBwcml2X2ZsYWdzCisgKi8KKyNkZWZpbmUgSU5UX01BSU4gICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBJTlRfTUJTU0lEICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIElOVF9XRFMgICAgICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgSU5UX0FQQ0xJICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBJTlRfTUVTSCAgICAgICAgICAgICAgICAgICAJMHgwNTAwCisKKy8vIFVzZSBiaXRtYXAgdG8gYWxsb3cgY29leGlzdCBvZiBBVEVfVFhGUkFNRSBhbmQgQVRFX1JYRlJBTUUoaS5lLix0byBzdXBwb3J0IExvb3BCYWNrIG1vZGUpCisjaWZkZWYgUkFMSU5LX0FURQorI2RlZmluZQlBVEVfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwMCAgIC8vIFN0YXJ0IEFURQorI2RlZmluZQlBVEVfU1RPUCAgICAgICAgICAgICAgICAgICAgMHg4MCAgIC8vIFN0b3AgQVRFCisjZGVmaW5lCUFURV9UWENPTlQgICAgICAgICAgICAgICAgICAweDA1ICAgLy8gQ29udGludW91cyBUcmFuc21pdAorI2RlZmluZQlBVEVfVFhDQVJSICAgICAgICAgICAgICAgICAgMHgwOSAgIC8vIFRyYW5zbWl0IENhcnJpZXIKKyNkZWZpbmUJQVRFX1RYQ0FSUlNVUFAgICAgICAgICAgICAgIDB4MTEgICAvLyBUcmFuc21pdCBDYXJyaWVyIFN1cHByZXNzaW9uCisjZGVmaW5lCUFURV9UWEZSQU1FICAgICAgICAgICAgICAgICAweDAxICAgLy8gVHJhbnNtaXQgRnJhbWVzCisjZGVmaW5lCUFURV9SWEZSQU1FICAgICAgICAgICAgICAgICAweDAyICAgLy8gUmVjZWl2ZSBGcmFtZXMKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorI2RlZmluZSBBVEVfVFhTVE9QICAgICAgICAgICAgICAgICAgMHhlMiAgIC8vIFN0b3AgVHJhbnNtaXRpb24oaS5lLiwgVFhDT05ULCBUWENBUlIsIFRYQ0FSUlNVUFAsIGFuZCBUWEZSQU1FKQorI2RlZmluZSBBVEVfUlhTVE9QCQkJCQkweGZkICAgLy8gU3RvcCByZWNlaXZpbmcgRnJhbWVzCisjZGVmaW5lCUJCUDIyX1RYRlJBTUUgICAgIAkJCTB4MDAgICAvLyBUcmFuc21pdCBGcmFtZXMKKyNkZWZpbmUJQkJQMjJfVFhDT05UX09SX0NBUlJTVVBQICAgIDB4ODAgICAvLyBDb250aW51b3VzIFRyYW5zbWl0IG9yIENhcnJpZXIgU3VwcHJlc3Npb24KKyNkZWZpbmUJQkJQMjJfVFhDQVJSICAgICAgICAgICAgICAgIDB4YzEgICAvLyBUcmFuc21pdCBDYXJyaWVyCisjZGVmaW5lCUJCUDI0X1RYQ09OVCAgICAgICAgICAgICAgICAweDAwICAgLy8gQ29udGludW91cyBUcmFuc21pdAorI2RlZmluZQlCQlAyNF9DQVJSU1VQUCAgICAgICAgICAgICAgMHgwMSAgIC8vIENhcnJpZXIgU3VwcHJlc3Npb24KKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworLy8gV0VQIEtleSBUWVBFCisjZGVmaW5lIFdFUF9IRVhBREVDSU1BTF9UWVBFICAgIDAKKyNkZWZpbmUgV0VQX0FTQ0lJX1RZUEUgICAgICAgICAgMQorCisKKworLy8gV0lSRUxFU1MgRVZFTlRTIGRlZmluaXRpb24KKy8qIE1heCBudW1iZXIgb2YgY2hhciBpbiBjdXN0b20gZXZlbnQsIHJlZmVyIHRvIHdpcmVsZXNzX3Rvb2xzLjI4L3dpcmVsZXNzLjIwLmggKi8KKyNkZWZpbmUgSVdfQ1VTVE9NX01BWF9MRU4JCQkJICAJCQkyNTUJLyogSW4gYnl0ZXMgKi8KKworLy8gRm9yIHN5c3RlbSBldmVudCAtIHN0YXJ0CisjZGVmaW5lCUlXX1NZU19FVkVOVF9GTEFHX1NUQVJUICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lCUlXX0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lCUlXX0RJU0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgMHgwMjAxCisjZGVmaW5lCUlXX0RFQVVUSF9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgIAkweDAyMDIKKyNkZWZpbmUJSVdfQUdFT1VUX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgCTB4MDIwMworI2RlZmluZQlJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmluZQlJV19SRVBMQVlfQ09VTlRFUl9ESUZGX0VWRU5UX0ZMQUcgICAgICAgICAgIDB4MDIwNQorI2RlZmluZQlJV19SU05JRV9ESUZGX0VWRU5UX0ZMQUcgICAgICAgICAgIAkJCTB4MDIwNgorI2RlZmluZQlJV19NSUNfRElGRl9FVkVOVF9GTEFHICAgICAgICAgICAJCQkweDAyMDcKKyNkZWZpbmUgSVdfSUNWX0VSUk9SX0VWRU5UX0ZMQUcJCQkJCQkweDAyMDgKKyNkZWZpbmUgSVdfTUlDX0VSUk9SX0VWRU5UX0ZMQUcJCQkJCQkweDAyMDkKKyNkZWZpbmUgSVdfR1JPVVBfSFNfVElNRU9VVF9FVkVOVF9GTEFHCQkJCTB4MDIwQQorI2RlZmluZQlJV19QQUlSV0lTRV9IU19USU1FT1VUX0VWRU5UX0ZMQUcJCQkweDAyMEIKKyNkZWZpbmUgSVdfUlNOSUVfU0FOSVRZX0ZBSUxfRVZFTlRfRkxBRwkJCQkweDAyMEMKKyNkZWZpbmUgSVdfU0VUX0tFWV9ET05FX1dQQTFfRVZFTlRfRkxBRwkJCQkweDAyMEQKKyNkZWZpbmUgSVdfU0VUX0tFWV9ET05FX1dQQTJfRVZFTlRfRkxBRwkJCQkweDAyMEUKKyNkZWZpbmUgSVdfU1RBX0xJTktVUF9FVkVOVF9GTEFHCQkJCQkweDAyMEYKKyNkZWZpbmUgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcJCQkJCTB4MDIxMAorI2RlZmluZSBJV19TQ0FOX0NPTVBMRVRFRF9FVkVOVF9GTEFHCQkJCTB4MDIxMQorI2RlZmluZSBJV19TQ0FOX0VOUVVFVUVfRkFJTF9FVkVOVF9GTEFHCQkJCTB4MDIxMgorLy8gaWYgYWRkIG5ldyBzeXN0ZW0gZXZlbnQgZmxhZywgcGxlYXNlIHVwYWR0ZSB0aGUgSVdfU1lTX0VWRU5UX0ZMQUdfRU5ECisjZGVmaW5lCUlXX1NZU19FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjEyCisjZGVmaW5lCUlXX1NZU19FVkVOVF9UWVBFX05VTQkJCQkJCShJV19TWVNfRVZFTlRfRkxBR19FTkQgLSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVCArIDEpCisvLyBGb3Igc3lzdGVtIGV2ZW50IC0gZW5kCisKKy8vIEZvciBzcG9vZiBhdHRhY2sgZXZlbnQgLSBzdGFydAorI2RlZmluZQlJV19TUE9PRl9FVkVOVF9GTEFHX1NUQVJUICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBJV19DT05GTElDVF9TU0lEX0VWRU5UX0ZMQUcJCQkJCTB4MDMwMAorI2RlZmluZSBJV19TUE9PRl9BU1NPQ19SRVNQX0VWRU5UX0ZMQUcJCQkJMHgwMzAxCisjZGVmaW5lIElXX1NQT09GX1JFQVNTT0NfUkVTUF9FVkVOVF9GTEFHCQkJMHgwMzAyCisjZGVmaW5lIElXX1NQT09GX1BST0JFX1JFU1BfRVZFTlRfRkxBRwkJCQkweDAzMDMKKyNkZWZpbmUgSVdfU1BPT0ZfQkVBQ09OX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNAorI2RlZmluZSBJV19TUE9PRl9ESVNBU1NPQ19FVkVOVF9GTEFHCQkJCTB4MDMwNQorI2RlZmluZSBJV19TUE9PRl9BVVRIX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNgorI2RlZmluZSBJV19TUE9PRl9ERUFVVEhfRVZFTlRfRkxBRwkJCQkJMHgwMzA3CisjZGVmaW5lIElXX1NQT09GX1VOS05PV05fTUdNVF9FVkVOVF9GTEFHCQkJMHgwMzA4CisjZGVmaW5lIElXX1JFUExBWV9BVFRBQ0tfRVZFTlRfRkxBRwkJCQkJMHgwMzA5CisvLyBpZiBhZGQgbmV3IHNwb29mIGF0dGFjayBldmVudCBmbGFnLCBwbGVhc2UgdXBhZHRlIHRoZSBJV19TUE9PRl9FVkVOVF9GTEFHX0VORAorI2RlZmluZQlJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDMwOQorI2RlZmluZQlJV19TUE9PRl9FVkVOVF9UWVBFX05VTQkJCQkJCShJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAtIElXX1NQT09GX0VWRU5UX0ZMQUdfU1RBUlQgKyAxKQorLy8gRm9yIHNwb29mIGF0dGFjayBldmVudCAtIGVuZAorCisvLyBGb3IgZmxvb2RpbmcgYXR0YWNrIGV2ZW50IC0gc3RhcnQKKyNkZWZpbmUJSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVCAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgSVdfRkxPT0RfQVVUSF9FVkVOVF9GTEFHCQkJCQkweDA0MDAKKyNkZWZpbmUgSVdfRkxPT0RfQVNTT0NfUkVRX0VWRU5UX0ZMQUcJCQkJMHgwNDAxCisjZGVmaW5lIElXX0ZMT09EX1JFQVNTT0NfUkVRX0VWRU5UX0ZMQUcJCQkJMHgwNDAyCisjZGVmaW5lIElXX0ZMT09EX1BST0JFX1JFUV9FVkVOVF9GTEFHCQkJCTB4MDQwMworI2RlZmluZSBJV19GTE9PRF9ESVNBU1NPQ19FVkVOVF9GTEFHCQkJCTB4MDQwNAorI2RlZmluZSBJV19GTE9PRF9ERUFVVEhfRVZFTlRfRkxBRwkJCQkJMHgwNDA1CisjZGVmaW5lIElXX0ZMT09EX0VBUF9SRVFfRVZFTlRfRkxBRwkJCQkJMHgwNDA2CisvLyBpZiBhZGQgbmV3IGZsb29kaW5nIGF0dGFjayBldmVudCBmbGFnLCBwbGVhc2UgdXBhZHRlIHRoZSBJV19GTE9PRF9FVkVOVF9GTEFHX0VORAorI2RlZmluZQlJV19GTE9PRF9FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAJMHgwNDA2CisjZGVmaW5lCUlXX0ZMT09EX0VWRU5UX1RZUEVfTlVNCQkJCQkJKElXX0ZMT09EX0VWRU5UX0ZMQUdfRU5EIC0gSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVCArIDEpCisvLyBGb3IgZmxvb2RpbmcgYXR0YWNrIC0gZW5kCisKKy8vIEVuZCAtIFdJUkVMRVNTIEVWRU5UUyBkZWZpbml0aW9uCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vIGRlZmluaXRpb24gZm9yIERMUywga2F0aHkKKyNkZWZpbmUJTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWSAgIDEKKyNkZWZpbmUJTUFYX05VTV9PRl9ETFNfRU5UUlkgICAgICAgIE1BWF9OVU1CRVJfT0ZfRExTX0VOVFJZCisKKy8vQmxvY2sgQUNLICwgcnQyODYwLCBrYXRoeQorI2RlZmluZSBNQVhfVFhfUkVPUkRFUkJVRgkJNjQKKyNkZWZpbmUgTUFYX1JYX1JFT1JERVJCVUYJCTY0CisjZGVmaW5lIERFRkFVTFRfVFhfVElNRU9VVAkJMzAKKyNkZWZpbmUgREVGQVVMVF9SWF9USU1FT1VUCQkzMAorI2lmbmRlZiBDT05GSUdfQVBfU1VQUE9SVAorI2RlZmluZSBNQVhfQkFSRUNJX1NFU1NJT04JCTgKKyNlbmRpZgorCisjaWZuZGVmIElXX0VTU0lEX01BWF9TSVpFCisvKiBNYXhpbXVtIHNpemUgb2YgdGhlIEVTU0lEIGFuZCBwQWQtPm5pY2tuYW1lIHN0cmluZ3MgKi8KKyNkZWZpbmUgSVdfRVNTSURfTUFYX1NJWkUgICAJCTMyCisjZW5kaWYKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIE1DQVNUX1JBVEVfU1BFQ0lGSUMKKyNkZWZpbmUgTUNBU1RfRElTQUJMRQkwCisjZGVmaW5lIE1DQVNUX0NDSwkJMQorI2RlZmluZSBNQ0FTVF9PRkRNCQkyCisjZGVmaW5lIE1DQVNUX0hUTUlYCQkzCisjZW5kaWYgLy8gTUNBU1RfUkFURV9TUEVDSUZJQyAvLworCisvLyBGb3IgQXNpY1JhZGlvT2ZmL0FzaWNSYWRpb09uIGZ1bmN0aW9uCisjZGVmaW5lIERPVDExUE9XRVJTQVZFCQkwCisjZGVmaW5lIEdVSVJBRElPX09GRgkJMQorI2RlZmluZSBSVE1QX0hBTFQJCSAgICAyCisjZGVmaW5lIEdVSV9JRExFX1BPV0VSX1NBVkUJCTMKKy8vIC0tCisKKworLy8gZGVmaW5pdGlvbiBmb3IgV3BhU3VwcG9ydCBmbGFnCisjZGVmaW5lIFdQQV9TVVBQTElDQU5UX0RJU0FCTEUJCQkJMAorI2RlZmluZSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUJCQkJMQorI2RlZmluZQlXUEFfU1VQUExJQ0FOVF9FTkFCTEVfV0lUSF9XRUJfVUkJMgorCisvLyBFbmRpYW4gYnl0ZSBzd2FwcGluZyBjb2RlcworI2RlZmluZSBTV0FQMTYoeCkgXAorICAgICgoVUlOVDE2KSggXAorICAgICgoKFVJTlQxNikoeCkgJiAoVUlOVDE2KSAweDAwZmZVKSA8PCA4KSB8IFwKKyAgICAoKChVSU5UMTYpKHgpICYgKFVJTlQxNikgMHhmZjAwVSkgPj4gOCkgKSkKKworI2RlZmluZSBTV0FQMzIoeCkgXAorICAgICgoVUlOVDMyKSggXAorICAgICgoKFVJTlQzMikoeCkgJiAoVUlOVDMyKSAweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKKyAgICAoKChVSU5UMzIpKHgpICYgKFVJTlQzMikgMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCisgICAgKCgoVUlOVDMyKSh4KSAmIChVSU5UMzIpIDB4MDBmZjAwMDBVTCkgPj4gIDgpIHwgXAorICAgICgoKFVJTlQzMikoeCkgJiAoVUlOVDMyKSAweGZmMDAwMDAwVUwpID4+IDI0KSApKQorCisjZGVmaW5lIFNXQVA2NCh4KSBcCisgICAgKChVSU5UNjQpKCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCAgOCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKworI2RlZmluZSBjcHUybGU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBsZTJjcHU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBjcHUybGUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBsZTJjcHUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBjcHUybGUxNih4KSBTV0FQMTYoKHgpKQorI2RlZmluZSBsZTJjcHUxNih4KSBTV0FQMTYoKHgpKQorI2RlZmluZSBjcHUyYmU2NCh4KSAoKFVJTlQ2NCkoeCkpCisjZGVmaW5lIGJlMmNwdTY0KHgpICgoVUlOVDY0KSh4KSkKKyNkZWZpbmUgY3B1MmJlMzIoeCkgKChVSU5UMzIpKHgpKQorI2RlZmluZSBiZTJjcHUzMih4KSAoKFVJTlQzMikoeCkpCisjZGVmaW5lIGNwdTJiZTE2KHgpICgoVUlOVDE2KSh4KSkKKyNkZWZpbmUgYmUyY3B1MTYoeCkgKChVSU5UMTYpKHgpKQorCisjZWxzZSAgIC8vIExpdHRsZV9FbmRpYW4KKworI2RlZmluZSBjcHUybGU2NCh4KSAoKFVJTlQ2NCkoeCkpCisjZGVmaW5lIGxlMmNwdTY0KHgpICgoVUlOVDY0KSh4KSkKKyNkZWZpbmUgY3B1MmxlMzIoeCkgKChVSU5UMzIpKHgpKQorI2RlZmluZSBsZTJjcHUzMih4KSAoKFVJTlQzMikoeCkpCisjZGVmaW5lIGNwdTJsZTE2KHgpICgoVUlOVDE2KSh4KSkKKyNkZWZpbmUgbGUyY3B1MTYoeCkgKChVSU5UMTYpKHgpKQorI2RlZmluZSBjcHUyYmU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBiZTJjcHU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBjcHUyYmUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBiZTJjcHUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBjcHUyYmUxNih4KSBTV0FQMTYoKHgpKQorI2RlZmluZSBiZTJjcHUxNih4KSBTV0FQMTYoKHgpKQorCisjZW5kaWYgIC8vIFJUX0JJR19FTkRJQU4KKworI2VuZGlmICAvLyBfX1JUTVBfREVGX0hfXworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF90eXBlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNGIxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfdHlwZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcF90eXBlLmgKKworICAgIEFic3RyYWN0OgorCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgTmFtZSAgICAgICAgRGF0ZSAgICAgICAgICAgIE1vZGlmaWNhdGlvbiBsb2dzCisgICAgUGF1bCBMaW4gICAgMS0yLTIwMDQKKyovCisjaWZuZGVmIF9fUlRNUF9UWVBFX0hfXworI2RlZmluZSBfX1JUTVBfVFlQRV9IX18KKworCisjZGVmaW5lIFBBQ0tFRCAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKy8vIFB1dCBwbGF0Zm9ybSBkZXBlbmRlbnQgZGVjbGFyYXRpb24gaGVyZQorLy8gRm9yIGV4YW1wbGUsIGxpbnV4IHR5cGUgZGVmaW5pdGlvbgordHlwZWRlZiB1bnNpZ25lZCBjaGFyCQlVSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCVVJTlQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQlVSU5UMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlVSU5UNjQ7Cit0eXBlZGVmIGludAkJCQkJSU5UMzI7Cit0eXBlZGVmIGxvbmcgbG9uZyAJCQlJTlQ2NDsKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICoJCQlQVUlOVDg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICoJCVBVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAqCQkJUFVJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICoJUFVJTlQ2NDsKK3R5cGVkZWYgaW50CSoJCQkJCVBJTlQzMjsKK3R5cGVkZWYgbG9uZyBsb25nICogCQkJUElOVDY0OworCit0eXBlZGVmIHNpZ25lZCBjaGFyCQkJQ0hBUjsKK3R5cGVkZWYgc2lnbmVkIHNob3J0CQlTSE9SVDsKK3R5cGVkZWYgc2lnbmVkIGludAkJCUlOVDsKK3R5cGVkZWYgc2lnbmVkIGxvbmcJCQlMT05HOwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nCUxPTkdMT05HOworCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJVUNIQVI7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlVU0hPUlQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJVUlOVDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJVUxPTkc7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlVTE9OR0xPTkc7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJQk9PTEVBTjsKK3R5cGVkZWYgdm9pZAkJCQlWT0lEOworCit0eXBlZGVmIFZPSUQgKgkJCQlQVk9JRDsKK3R5cGVkZWYgQ0hBUiAqCQkJCVBDSEFSOwordHlwZWRlZiBVQ0hBUiAqIAkJCVBVQ0hBUjsKK3R5cGVkZWYgVVNIT1JUICoJCQlQVVNIT1JUOwordHlwZWRlZiBMT05HICoJCQkJUExPTkc7Cit0eXBlZGVmIFVMT05HICoJCQkJUFVMT05HOwordHlwZWRlZiBVSU5UICoJCQkJUFVJTlQ7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50CU5ESVNfTUVESUFfU1RBVEU7CisKK3R5cGVkZWYgdW5pb24gX0xBUkdFX0lOVEVHRVIgeworICAgIHN0cnVjdCB7CisgICAgICAgIFVJTlQgTG93UGFydDsKKyAgICAgICAgSU5UMzIgSGlnaFBhcnQ7CisgICAgfSB1OworICAgIElOVDY0IFF1YWRQYXJ0OworfSBMQVJHRV9JTlRFR0VSOworCisjZW5kaWYgIC8vIF9fUlRNUF9UWVBFX0hfXworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjZmE1YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW0uaApAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX1NQRUNUUlVNX0hfXworI2RlZmluZSBfX1NQRUNUUlVNX0hfXworCisjaW5jbHVkZSAicnRtcF90eXBlLmgiCisjaW5jbHVkZSAic3BlY3RydW1fZGVmLmgiCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfVFBDX1JFUE9SVF9JTkZPCit7CisJVUlOVDggVHhQd3I7CisJVUlOVDggTGlua01hcmdpbjsKK30gVFBDX1JFUE9SVF9JTkZPLCAqUFRQQ19SRVBPUlRfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9DSF9TV19BTk5fSU5GTworeworCVVJTlQ4IENoU3dNb2RlOworCVVJTlQ4IENoYW5uZWw7CisJVUlOVDggQ2hTd0NudDsKK30gQ0hfU1dfQU5OX0lORk8sICpQQ0hfU1dfQU5OX0lORk87CisKK3R5cGVkZWYgdW5pb24gUEFDS0VEIF9NRUFTVVJFX1JFUV9NT0RFCit7CisjaWZkZWYgUlRfQklHX0VORElBTgorCXN0cnVjdCBQQUNLRUQKKwl7CisJCVVJTlQ4IFJldjE6NDsKKwkJVUlOVDggUmVwb3J0OjE7CisJCVVJTlQ4IFJlcXVlc3Q6MTsKKwkJVUlOVDggRW5hYmxlOjE7CisJCVVJTlQ4IFJldjA6MTsKKwl9IGZpZWxkOworI2Vsc2UKKwlzdHJ1Y3QgUEFDS0VECisJeworCQlVSU5UOCBSZXYwOjE7CisJCVVJTlQ4IEVuYWJsZToxOworCQlVSU5UOCBSZXF1ZXN0OjE7CisJCVVJTlQ4IFJlcG9ydDoxOworCQlVSU5UOCBSZXYxOjQ7CisJfSBmaWVsZDsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJVUlOVDggd29yZDsKK30gTUVBU1VSRV9SRVFfTU9ERSwgKlBNRUFTVVJFX1JFUV9NT0RFOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfUkVRCit7CisJVUlOVDggQ2hOdW07CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKK30gTUVBU1VSRV9SRVEsICpQTUVBU1VSRV9SRVE7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUVBU1VSRV9SRVFfSU5GTworeworCVVJTlQ4IFRva2VuOworCU1FQVNVUkVfUkVRX01PREUgUmVxTW9kZTsKKwlVSU5UOCBSZXFUeXBlOworCU1FQVNVUkVfUkVRIE1lYXN1cmVSZXE7Cit9IE1FQVNVUkVfUkVRX0lORk8sICpQTUVBU1VSRV9SRVFfSU5GTzsKKwordHlwZWRlZiB1bmlvbiBQQUNLRUQgX01FQVNVUkVfQkFTSUNfUkVQT1JUX01BUAoreworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlzdHJ1Y3QgUEFDS0VECisJeworCQlVSU5UOCBSZXY6MzsKKwkJVUlOVDggVW5tZWFzdXJlOjE7CisJCVVJTlQ4IFJhZGFyOjE7CisJCVVJTlQ4IFVuaWRlbnRpZmllZFNpZ25hbDoxOworCQlVSU5UOCBPZmRtUHJlYW1ibGU6MTsKKwkJVUlOVDggQlNTOjE7CisJfSBmaWVsZDsKKyNlbHNlCisJc3RydWN0IFBBQ0tFRAorCXsKKwkJVUlOVDggQlNTOjE7CisJCVVJTlQ4IE9mZG1QcmVhbWJsZToxOworCQlVSU5UOCBVbmlkZW50aWZpZWRTaWduYWw6MTsKKwkJVUlOVDggUmFkYXI6MTsKKwkJVUlOVDggVW5tZWFzdXJlOjE7CisJCVVJTlQ4IFJldjozOworCX0gZmllbGQ7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCVVJTlQ4IHdvcmQ7Cit9IE1FQVNVUkVfQkFTSUNfUkVQT1JUX01BUCwgKlBNRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVA7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUVBU1VSRV9CQVNJQ19SRVBPUlQKK3sKKwlVSU5UOCBDaE51bTsKKwlVSU5UNjQgTWVhc3VyZVN0YXJ0VGltZTsKKwlVSU5UMTYgTWVhc3VyZUR1cmF0aW9uOworCU1FQVNVUkVfQkFTSUNfUkVQT1JUX01BUCBNYXA7Cit9IE1FQVNVUkVfQkFTSUNfUkVQT1JULCAqUE1FQVNVUkVfQkFTSUNfUkVQT1JUOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfQ0NBX1JFUE9SVAoreworCVVJTlQ4IENoTnVtOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lOworCVVJTlQxNiBNZWFzdXJlRHVyYXRpb247CisJVUlOVDggQ0NBX0J1c3lfRnJhY3Rpb247Cit9IE1FQVNVUkVfQ0NBX1JFUE9SVCwgKlBNRUFTVVJFX0NDQV9SRVBPUlQ7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUVBU1VSRV9SUElfUkVQT1JUCit7CisJVUlOVDggQ2hOdW07CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKKwlVSU5UOCBSUElfRGVuc2l0eVs4XTsKK30gTUVBU1VSRV9SUElfUkVQT1JULCAqUE1FQVNVUkVfUlBJX1JFUE9SVDsKKwordHlwZWRlZiB1bmlvbiBQQUNLRUQgX01FQVNVUkVfUkVQT1JUX01PREUKK3sKKwlzdHJ1Y3QgUEFDS0VECisJeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJVUlOVDggUmV2OjU7CisJCVVJTlQ4IFJlZnVzZWQ6MTsKKwkJVUlOVDggSW5jYXBhYmxlOjE7CisJCVVJTlQ4IExhdGU6MTsKKyNlbHNlCisJCVVJTlQ4IExhdGU6MTsKKwkJVUlOVDggSW5jYXBhYmxlOjE7CisJCVVJTlQ4IFJlZnVzZWQ6MTsKKwkJVUlOVDggUmV2OjU7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCX0gZmllbGQ7CisJVUlOVDggd29yZDsKK30gTUVBU1VSRV9SRVBPUlRfTU9ERSwgKlBNRUFTVVJFX1JFUE9SVF9NT0RFOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfUkVQT1JUX0lORk8KK3sKKwlVSU5UOCBUb2tlbjsKKwlNRUFTVVJFX1JFUE9SVF9NT0RFIFJlcG9ydE1vZGU7CisJVUlOVDggUmVwb3J0VHlwZTsKKwlVSU5UOCBPY3RlY3RbMF07Cit9IE1FQVNVUkVfUkVQT1JUX0lORk8sICpQTUVBU1VSRV9SRVBPUlRfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9RVUlFVF9JTkZPCit7CisJVUlOVDggUXVpZXRDbnQ7CisJVUlOVDggUXVpZXRQZXJpb2Q7CisJVUlOVDggUXVpZXREdXJhdGlvbjsKKwlVSU5UOCBRdWlldE9mZnNldDsKK30gUVVJRVRfSU5GTywgKlBRVUlFVF9JTkZPOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVNZWFzdXJlbWVudFJlcSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IE1lYXN1cmVUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxTW9kZSwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxVHlwZSwKKwlJTiBVSU5UOCBNZWFzdXJlQ2gsCisJSU4gVUlOVDE2IE1lYXN1cmVEdXJhdGlvbik7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBNZWFzdXJlbWVudCByZXBvcnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlTWVhc3VyZW1lbnRSZXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBEaWFsb2dUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVJlcU1vZGUsCisJSU4gVUlOVDggTWVhc3VyZVJlcVR5cGUsCisJSU4gVUlOVDggUmVwb3J0SW5mb0xlbiwKKwlJTiBQVUlOVDggcFJlcG9ydEluZm8pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgVFBDIFJlcXVlc3QgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlVFBDUmVxKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUNIQVIgRGlhbG9nVG9rZW4pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVUUENSZXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBEaWFsb2dUb2tlbiwKKwlJTiBVSU5UOCBUeFB3ciwKKwlJTiBVSU5UOCBMaW5rTWFyZ2luKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCQkyLiBDaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgbW9kZS4KKwkJMi4gYSBOZXcgc2VsZWN0ZWQgY2hhbm5lbC4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlQ2hTd0FubigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IENoU3dNb2RlLAorCUlOIFVJTlQ4IE5ld0NoKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTcGVjdHJ1biBhY3Rpb24gZnJhbWVzIEhhbmRsZXIgc3VjaCBhcyBjaGFubmVsIHN3aXRjaCBhbm5vdWNlbWVudCwKKwkJbWVhc3VyZW1lbnQgcmVwb3J0LCBtZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbnMgZnJhbWVzLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlclNwZWN0cnVtQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCVBhcmFtZXRyczoKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworSU5UIFNldF9NZWFzdXJlUmVxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9UcGNSZXFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitWT0lEIE1lYXN1cmVSZXFUYWJJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNZWFzdXJlUmVxVGFiRXhpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgVHBjUmVxVGFiSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgVHBjUmVxVGFiRXhpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTm90aWZ5Q2hTd0FublRvUGVlckFQcygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcFJBLAorCUlOIFBVQ0hBUiBwVEEsCisJSU4gVUlOVDggQ2hTd01vZGUsCisJSU4gVUlOVDggQ2hhbm5lbCk7CisjZW5kaWYgLy8gX19TUEVDVFJVTV9IX18gLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zcGVjdHJ1bV9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW1fZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhNDgxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW1fZGVmLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKwlzcGVjdHJ1bV9kZWYuaAorCisgICAgQWJzdHJhY3Q6CisgICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlGb25jaGkgV3UgICAgMjAwOAkgIAkgICBjcmVhdGVkIGZvciA4MDIuMTFoCisgKi8KKworI2lmbmRlZiBfX1NQRUNUUlVNX0RFRl9IX18KKyNkZWZpbmUgX19TUEVDVFJVTV9ERUZfSF9fCisKKyNkZWZpbmUgTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFCQkzCisjZGVmaW5lIE1BWF9IQVNIX01FQVNVUkVfUkVRX1RBQl9TSVpFCU1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRQorCisjZGVmaW5lIE1BWF9UUENfUkVRX1RBQl9TSVpFCQkJMworI2RlZmluZSBNQVhfSEFTSF9UUENfUkVRX1RBQl9TSVpFCQlNQVhfVFBDX1JFUV9UQUJfU0laRQorCisjZGVmaW5lIE1JTl9SQ1ZfUFdSCQkJCTEwMAkJLyogTmVnYXRpdmUgdmFsdWUgKChkQm0pICovCisKKyNkZWZpbmUgUk1fVFBDX1JFUQkJCQkwCisjZGVmaW5lIFJNX01FQVNVUkVfUkVRCQkJMQorCisjZGVmaW5lIFJNX0JBU0lDCQkJCTAKKyNkZWZpbmUgUk1fQ0NBCQkJCQkxCisjZGVmaW5lIFJNX1JQSV9ISVNUT0dSQU0JCTIKKworI2RlZmluZSBUUENfUkVRX0FHRV9PVVQJCQk1MDAJCS8qIG1zICovCisjZGVmaW5lIE1RX1JFUV9BR0VfT1VUCQkJNTAwCQkvKiBtcyAqLworCisjZGVmaW5lIFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKF9EaWFsb2dUb2tlbikJKChfRGlhbG9nVG9rZW4pICUgTUFYX0hBU0hfVFBDX1JFUV9UQUJfU0laRSkKKyNkZWZpbmUgTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChfRGlhbG9nVG9rZW4pCQkoKF9EaWFsb2dUb2tlbikgJSBNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkUpCisKK3R5cGVkZWYgc3RydWN0IF9NRUFTVVJFX1JFUV9FTlRSWQoreworCXN0cnVjdCBfTUVBU1VSRV9SRVFfRU5UUlkgKnBOZXh0OworCVVMT05HIGxhc3RUaW1lOworCUJPT0xFQU4JVmFsaWQ7CisJVUlOVDggRGlhbG9nVG9rZW47CisJVUlOVDggTWVhc3VyZURpYWxvZ1Rva2VuWzNdOwkvLyAwOmJhc2ljIG1lYXN1cmUsIDE6IENDQSBtZWFzdXJlLCAyOiBSUElfSGlzdG9ncmFtIG1lYXN1cmUuCit9IE1FQVNVUkVfUkVRX0VOVFJZLCAqUE1FQVNVUkVfUkVRX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfTUVBU1VSRV9SRVFfVEFCCit7CisJVUNIQVIgU2l6ZTsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgSGFzaFtNQVhfSEFTSF9NRUFTVVJFX1JFUV9UQUJfU0laRV07CisJTUVBU1VSRV9SRVFfRU5UUlkgQ29udGVudFtNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkVdOworfSBNRUFTVVJFX1JFUV9UQUIsICpQTUVBU1VSRV9SRVFfVEFCOworCit0eXBlZGVmIHN0cnVjdCBfVFBDX1JFUV9FTlRSWQoreworCXN0cnVjdCBfVFBDX1JFUV9FTlRSWSAqcE5leHQ7CisJVUxPTkcgbGFzdFRpbWU7CisJQk9PTEVBTiBWYWxpZDsKKwlVSU5UOCBEaWFsb2dUb2tlbjsKK30gVFBDX1JFUV9FTlRSWSwgKlBUUENfUkVRX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfVFBDX1JFUV9UQUIKK3sKKwlVQ0hBUiBTaXplOworCVBUUENfUkVRX0VOVFJZIEhhc2hbTUFYX0hBU0hfVFBDX1JFUV9UQUJfU0laRV07CisJVFBDX1JFUV9FTlRSWSBDb250ZW50W01BWF9UUENfUkVRX1RBQl9TSVpFXTsKK30gVFBDX1JFUV9UQUIsICpQVFBDX1JFUV9UQUI7CisKKyNlbmRpZiAvLyBfX1NQRUNUUlVNX0RFRl9IX18gLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYWlyb25ldC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYWlyb25ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjRhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9haXJvbmV0LmMKQEAgLTAsMCArMSwxMzEyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWFpcm9uZXQuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVBhdWwgTGluCTA0LTA2LTE1CQlJbml0aWFsCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWFzc29jaWF0aW9uCXN0YXRlIG1hY2hpbmUgaW5pdCwJaW5jbHVkaW5nIHN0YXRlCXRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKwlQYXJhbWV0ZXJzOgorCQlTIC0JcG9pbnRlcgl0byB0aGUgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQJQWlyb25ldFN0YXRlTWFjaGluZUluaXQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVNUQVRFX01BQ0hJTkUJCSpTLAorCU9VVAlTVEFURV9NQUNISU5FX0ZVTkMJVHJhbnNbXSkKK3sKKwlTdGF0ZU1hY2hpbmVJbml0KFMsCVRyYW5zLCBNQVhfQUlST05FVF9TVEFURSwgTUFYX0FJUk9ORVRfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIEFJUk9ORVRfSURMRSwgQUlST05FVF9NQUNISU5FX0JBU0UpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBSVJPTkVUX0lETEUsIE1UMl9BSVJPTkVUX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylBaXJvbmV0TXNnQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUlST05FVF9JRExFLCBNVDJfQUlST05FVF9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylBaXJvbmV0UmVxdWVzdEFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFJUk9ORVRfU0NBTk5JTkcsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgKFNUQVRFX01BQ0hJTkVfRlVOQylBaXJvbmV0UmVwb3J0QWN0aW9uKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIGlzCXN0YXRlIG1hY2hpbmUgZnVuY3Rpb24uCisJCVdoZW4gcmVjZWl2aW5nIEVBUE9MIHBhY2tldHMgd2hpY2ggaXMgIGZvciA4MDIuMXgga2V5IG1hbmFnZW1lbnQuCisJCVVzZQlib3RoIGluCVdQQSwgYW5kIFdQQVBTSwljYXNlLgorCQlJbiB0aGlzCWZ1bmN0aW9uLCBmdXJ0aGVyIGRpc3BhdGNoIHRvIGRpZmZlcmVudAlmdW5jdGlvbnMgYWNjb3JkaW5nCXRvIHRoZSByZWNlaXZlZAlwYWNrZXQuCSAzIGNhdGVnb3JpZXMgYXJlIDoKKwkJICAxLiAgbm9ybWFsIDQtd2F5IHBhaXJ3aXNla2V5IGFuZCAyLXdheSBncm91cGtleSBoYW5kc2hha2UKKwkJICAyLiAgTUlDIGVycm9yCShDb3VudGVybWVhc3VyZXMgYXR0YWNrKSAgcmVwb3J0IHBhY2tldAlmcm9tIFNUQS4KKwkJICAzLiAgUmVxdWVzdCBmb3IgcGFpcndpc2UvZ3JvdXAga2V5IHVwZGF0ZQlmcm9tIFNUQQorCVJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQWlyb25ldE1zZ0FjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNTE1FX1FVRVVFX0VMRU0JKkVsZW0pCit7CisJVVNIT1JUCQkJCQkJCUxlbmd0aDsKKwlVQ0hBUgkJCQkJCQlJbmRleCwgaTsKKwlQVUNIQVIJCQkJCQkJcERhdGE7CisJUEFJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRQkJcFJNUmVxOworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxRWxlbTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLS0tPiBBaXJvbmV0TXNnQWN0aW9uXG4iKSk7CisKKwkvLyAwLiBHZXQgQWlyb25ldCBJQVBQIGhlYWRlciBmaXJzdAorCXBSTVJlcSA9IChQQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTFdOworCXBEYXRhICA9IChQVUNIQVIpICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMV07CisKKwkvLyAxLiBDaGFuZ2UgZW5kaWFuIGZvcm1hdCBmb3JtIG5ldHdvcmsgdG8gbGl0dGxlIGVuZGlhbgorCUxlbmd0aCA9IGJlMmNwdTE2KHBSTVJlcS0+SUFQUC5MZW5ndGgpOworCisJLy8gMi4wIFNhbml0eSBjaGVjaywgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gd2hlbiBDQ1ggMi4wIHN1cHBvcnQgaXMgZW5hYmxlZAorCWlmIChwQWQtPlN0YUNmZy5DQ1hFbmFibGUgIT0gVFJVRSkKKwkJcmV0dXJuOworCisJLy8gMi4xIFJhZGlvIG1lYXN1cmVtZW50IG11c3QgYmUgb24KKwlpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5STUVuYWJsZSAhPSAxKQorCQlyZXR1cm47CisKKwkvLyAyLjIuIERlYnVnIHByaW50IGFsbCBiaXQgaW5mb3JtYXRpb24KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIElEICYgTGVuZ3RoICVkXG4iLCBMZW5ndGgpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIFR5cGUgJXhcbiIsIHBSTVJlcS0+SUFQUC5UeXBlKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUFQUCBTdWJUeXBlICV4XG4iLCBwUk1SZXEtPklBUFAuU3ViVHlwZSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklBUFAgRGlhbG9nIFRva2VuICV4XG4iLCBwUk1SZXEtPklBUFAuVG9rZW4pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIEFjdGl2YXRpb24gRGVsYXkgJXhcbiIsIHBSTVJlcS0+RGVsYXkpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIE1lYXN1cmVtZW50IE9mZnNldCAleFxuIiwgcFJNUmVxLT5PZmZzZXQpKTsKKworCS8vIDMuIENoZWNrIElBUFAgZnJhbWUgdHlwZSwgaXQgbXVzdCBiZSAweDMyIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbgorCWlmIChwUk1SZXEtPklBUFAuVHlwZSAhPSBBSVJPTkVUX0lBUFBfVFlQRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyb25nIElBUFAgdHlwZSBmb3IgQ2lzY28gQWlyb25ldCBleHRlbnNpb25cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vIDQuIENoZWNrIElBUFAgZnJhbWUgc3VidHlwZSwgaXQgbXVzdCBiZSAweDAxIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbiByZXF1ZXN0LgorCS8vICAgIFNpbmNlIHdlIGFyZSBhY3RpbmcgYXMgY2xpZW50IG9ubHksIHdlIHdpbGwgZGlzcmVnYXJkcyByZXBseSBzdWJ0eXBlLgorCWlmIChwUk1SZXEtPklBUFAuU3ViVHlwZSAhPSBBSVJPTkVUX0lBUFBfU1VCVFlQRV9SRVFVRVNUKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiV3JvbmcgSUFQUCBzdWJ0eXBlIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvblxuIikpOworCQlyZXR1cm47CisJfQorCisJLy8gNS4gVmVyaWZ5IERlc3RpbmF0aW9uIE1BQyBhbmQgU291cmNlIE1BQywgYm90aCBzaG91bGQgYmUgYWxsIHplcm9zLgorCWlmICghIE1BQ19BRERSX0VRVUFMKHBSTVJlcS0+SUFQUC5EQSwgWkVST19NQUNfQUREUikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcm9uZyBJQVBQIERBIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbiwgaXQncyBub3QgWmVyb1xuIikpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEgTUFDX0FERFJfRVFVQUwocFJNUmVxLT5JQVBQLlNBLCBaRVJPX01BQ19BRERSKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyb25nIElBUFAgU0EgZm9yIENpc2NvIEFpcm9uZXQgZXh0ZW5zaW9uLCBpdCdzIG5vdCBaZXJvXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyA2LiBSZWluaXQgYWxsIHJlcG9ydCByZWxhdGVkIGZpZWxkcworCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmLCAyMDQ4KTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5Cc3NSZXBvcnRPZmZzZXQsIHNpemVvZihVU0hPUlQpICogTUFYX0xFTl9PRl9CU1NfVEFCTEUpOworCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdCwgc2l6ZW9mKFJNX1JFUVVFU1RfQUNUSU9OKSAqIDQpOworCisJLy8gNy4gUG9pbnQgdG8gdGhlIHN0YXJ0IG9mIGZpcnN0IGVsZW1lbnQgcmVwb3J0IGVsZW1lbnQKKwlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiAgID0gTEVOR1RIXzgwMl8xMSArIHNpemVvZihBSVJPTkVUX0lBUFBfSEVBREVSKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGUiBsZW4gPSAlZFxuIiwgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4pKTsKKwlwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggICAgID0gMHhmZjsKKwlwQWQtPlN0YUNmZy5STVJlcUNudCAgICAgICAgID0gMDsKKwlwQWQtPlN0YUNmZy5QYXJhbGxlbFJlcSAgICAgID0gRkFMU0U7CisJcEFkLT5TdGFDZmcuUGFyYWxsZWxEdXJhdGlvbiA9IDA7CisJcEFkLT5TdGFDZmcuUGFyYWxsZWxDaGFubmVsICA9IDA7CisJcEFkLT5TdGFDZmcuSUFQUFRva2VuICAgICAgICA9IHBSTVJlcS0+SUFQUC5Ub2tlbjsKKwlwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHggID0gMDsKKwlwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyAgICAgID0gMDsKKwkvLyBSZXNldCB0aGUgc3RhdGlzdGljcworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gPSAwOworCisJSW5kZXggPSAwOworCisJLy8gOC4gU2F2ZSBkaWFsb2cgdG9rZW4gZm9yIHJlcG9ydAorCXBBZC0+U3RhQ2ZnLklBUFBUb2tlbiA9IHBSTVJlcS0+SUFQUC5Ub2tlbjsKKworCS8vIFNhdmUgQWN0aXZhdGlvbiBkZWxheSAmIG1lYXN1cmVtZW50IG9mZnNldCwgTm90IHJlYWxseSBuZWVkZWQKKworCS8vIDkuIFBvaW50IHRvIHRoZSBmaXJzdCByZXF1ZXN0IGVsZW1lbnQKKwlwRGF0YSArPSBzaXplb2YoQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FKTsKKwkvLyAgICBMZW5ndGggc2hvdWxkIGV4Y2x1ZGUgdGhlIENJU0NPIEFpcm9uZXQgU05BUCBoZWFkZXIKKwlMZW5ndGggLT0gKHNpemVvZihBSVJPTkVUX1JNX1JFUVVFU1RfRlJBTUUpIC0gTEVOR1RIXzgwMl8xX0gpOworCisJLy8gMTAuIFN0YXJ0IFBhcnNpbmcgdGhlIE1lYXN1cmVtZW50IGVsZW1lbnRzLgorCS8vICAgIEJlIGNhcmVmdWwgYWJvdXQgbXVsdGlwbGUgTVIgZWxlbWVudHMgd2l0aGluIG9uZSBmcmFtZXMuCisJd2hpbGUgKExlbmd0aCA+IDApCisJeworCQlwUmVxRWxlbSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pIHBEYXRhOworCQlzd2l0Y2ggKHBSZXFFbGVtLT5SZXFFbGVtLkVpZCkKKwkJeworCQkJY2FzZSBJRV9NRUFTVVJFTUVOVF9SRVFVRVNUOgorCQkJCS8vIEZyb20gdGhlIGV4YW1wbGUsIGl0IHNlZW1zIHdlIG9ubHkgbmVlZCB0byBzdXBwb3J0IG9uZSByZXF1ZXN0IGluIG9uZSBmcmFtZQorCQkJCS8vIFRoZXJlIGlzIG5vIG11bHRpcGxlIHJlcXVlc3QgaW4gb25lIGZyYW1lLgorCQkJCS8vIEJlc2lkZXMsIGxvb2tzIGxpa2Ugd2UgbmVlZCB0byB0YWtlIGNhcmUgdGhlIG1lYXN1cmVtZW50IHJlcXVlc3Qgb25seS4KKwkJCQkvLyBUaGUgbWVhc3VyZW1lbnQgcmVxdWVzdCBpcyBhbHdheXMgNCBieXRlcy4KKworCQkJCS8vIFN0YXJ0IHBhcnNpbmcgdGhpcyB0eXBlIG9mIHJlcXVlc3QuCisJCQkJLy8gMC4gRWlkIGlzIElFX01FQVNVUkVNRU5UX1JFUVVFU1QKKwkJCQkvLyAxLiBMZW5ndGggZGlkbid0IGluY2x1ZGUgRWlkIGFuZCBMZW5ndGggZmllbGQsIGl0IGFsd2F5cyBiZSA4LgorCQkJCS8vIDIuIE1lYXN1cmVtZW50IFRva2VuLCB3ZSBubmVkIHRvIHNhdmUgaXQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHJlcG9ydC4KKwkJCQkvLyAzLiBNZWFzdXJlbWVudCBNb2RlLCBBbHRob3VnaCB0aGVyZSBhcmUgZGVmaW5pdGlvbnMsIGJ1dCB3ZSBkaW4ndCBzZWUgdmFsdWUgb3RoZXIgdGhhbgorCQkJCS8vICAgIDAgZnJvbSB0ZXN0IHNwZWNzIGV4YW1wbGVzLgorCQkJCS8vIDQuIE1lYXN1cmVtZW50IFR5cGUsIHRoaXMgaXMgd2hhdCB3ZSBuZWVkIHRvIGRvLgorCQkJCXN3aXRjaCAocFJlcUVsZW0tPlJlcUVsZW0uVHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVE6CisJCQkJCWNhc2UgTVNSTl9UWVBFX05PSVNFX0hJU1RfUkVROgorCQkJCQljYXNlIE1TUk5fVFlQRV9CRUFDT05fUkVROgorCQkJCQkJLy8gQ2hlY2sgdGhlIEVuYWJsZSBub24tc2VydmluZyBjaGFubmVsIG1lYXN1cmVtZW50IGNvbnRyb2wKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5DQ1hDb250cm9sLmZpZWxkLkRDUk1FbmFibGUgPT0gMCkKKwkJCQkJCXsKKwkJCQkJCQkvLyBDaGVjayBjaGFubmVsIGJlZm9yZSBlbnF1ZXVlIHRoZSBhY3Rpb24KKwkJCQkJCQlpZiAocFJlcUVsZW0tPk1lYXN1cmVtZW50LkNoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLy8gSWYgb2ZmIGNoYW5uZWwgbWVhc3VyZW1lbnQsIGNoZWNrIHRoZSBUVSBkdXJhdGlvbiBsaW1pdAorCQkJCQkJCWlmIChwUmVxRWxlbS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCQkJCQlpZiAocFJlcUVsZW0tPk1lYXN1cmVtZW50LkR1cmF0aW9uID4gcEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5UdUxpbWl0KQorCQkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCS8vIFNhdmUgcmVxdWVzdHMgYW5kIGV4ZWN1dGUgYWN0aW9ucyBsYXRlcgorCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0sIHBSZXFFbGVtLCBzaXplb2YoUk1fUkVRVUVTVF9BQ1RJT04pKTsKKwkJCQkJCUluZGV4ICs9IDE7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIE1TUk5fVFlQRV9GUkFNRV9SRVE6CisJCQkJCQkvLyBTaW5jZSBpdCdzIG9wdGlvbiwgd2Ugd2lsbCBzdXBwb3J0IGxhdGVyCisJCQkJCQkvLyBGcmFtZVJlcXVlc3RBY3Rpb24ocEFkLCBwRGF0YSk7CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLy8gUG9pbnQgdG8gbmV4dCBNZWFzdXJlbWVudCByZXF1ZXN0CisJCQkJcERhdGEgICs9IHNpemVvZihSTV9SRVFVRVNUX0FDVElPTik7CisJCQkJTGVuZ3RoIC09IHNpemVvZihSTV9SRVFVRVNUX0FDVElPTik7CisJCQkJYnJlYWs7CisKKwkJCS8vIFdlIGFjY2VwdCByZXF1ZXN0IG9ubHksIGFsbCBvdGhlcnMgYXJlIGRyb3BwZWQKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfUkVQT1JUOgorCQkJY2FzZSBJRV9BUF9UWF9QT1dFUjoKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfQ0FQQUJJTElUWToKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuOworCQl9CisJfQorCisJLy8gMTEuIFVwZGF0ZSBzb21lIGZsYWdzIGFuZCBpbmRleAorCXBBZC0+U3RhQ2ZnLlJNUmVxQ250ID0gSW5kZXg7CisKKwlpZiAoSW5kZXgpCisJeworCQlNbG1lRW5xdWV1ZShwQWQsIEFJUk9ORVRfU1RBVEVfTUFDSElORSwgTVQyX0FJUk9ORVRfU0NBTl9SRVEsIDAsIE5VTEwpOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLS0tIEFpcm9uZXRNc2dBY3Rpb25cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRSZXF1ZXN0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1MTUVfUVVFVUVfRUxFTQkqRWxlbSkKK3sKKwlQUk1fUkVRVUVTVF9BQ1RJT04JcFJlcTsKKworCS8vIDEuIFBvaW50IHRvIG5leHQgcmVxdWVzdCBlbGVtZW50CisJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4XTsKKworCS8vIDIuIFBhcnNlIG1lYXN1cmVtZW50IHR5cGUgYW5kIGNhbGwgYXBwcm9wcmlhdGUgZnVuY3Rpb25zCisJaWYgKHBSZXEtPlJlcUVsZW0uVHlwZSA9PSBNU1JOX1RZUEVfQ0hBTk5FTF9MT0FEX1JFUSkKKwkJLy8gQ2hhbm5lbCBMb2FkIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX05PSVNFX0hJU1RfUkVRKQorCQkvLyBOb2lzZSBIaXN0b2dyYW0gbWVhc3VyZW1lbnQgcmVxdWVzdAorCQlOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0JFQUNPTl9SRVEpCisJCS8vIEJlYWNvbiBtZWFzdXJlbWVudCByZXF1ZXN0CisJCUJlYWNvblJlcXVlc3RBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCWVsc2UKKwkJLy8gVW5rbm93bi4gRG8gbm90aGluZyBhbmQgcmV0dXJuLCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJcmV0dXJuOworCisJLy8gMy4gUGVlayBpbnRvIHRoZSBuZXh0IHJlcXVlc3QsIGlmIGl0J3MgcGFyYWxsZWwsIHdlIHdpbGwgdXBkYXRlIHRoZSBzY2FuIHRpbWUgdG8gdGhlIGxhcmdlc3Qgb25lCisJaWYgKChwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHggKyAxKSA8IHBBZC0+U3RhQ2ZnLlJNUmVxQ250KQorCXsKKwkJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4ICsgMV07CisJCS8vIENoZWNrIGZvciBwYXJhbGxlbCBiaXQKKwkJaWYgKChwUmVxLT5SZXFFbGVtLk1vZGUgJiAweDAxKSAmJiAocFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCA9PSBwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCkpCisJCXsKKwkJCS8vIFVwZGF0ZSBwYXJhbGxlbCBtb2RlIHJlcXVlc3QgaW5mb3JtYXRpb24KKwkJCXBBZC0+U3RhQ2ZnLlBhcmFsbGVsUmVxID0gVFJVRTsKKwkJCXBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lID0gKChwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbiA+IHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lKSA/CisJCQkocFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb24pIDogKHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lKSk7CisJCX0KKwl9CisKKwkvLyA0LiBDYWxsIFJUMjhYWF9NTE1FX0hBTkRMRVIgdG8gZXhlY3V0ZSB0aGUgcmVxdWVzdCBtbG1lIGNvbW1hbmRzLCBTY2FuIHJlcXVlc3QgaXMgdGhlIG9ubHkgb25lIHVzZWQKKwlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBjaGFubmVsIGxvYWQgcmVwb3J0IGFjdGlvbiwgc3BlY2lhbCBzY2FuIG9wZXJhdGlvbiBhZGRlZAorCQl0byBzdXBwb3J0CisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlTdGFydCBmcm9tIGVsZW1lbnQgSUQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSW5kZXgpCit7CisJUFJNX1JFUVVFU1RfQUNUSU9OCQkJCXBSZXE7CisJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJCQlTY2FuUmVxOworCVVDSEFSCQkJCQkJCVplcm9Tc2lkWzMyXTsKKwlORElTX1NUQVRVUwkJCQkJCU5TdGF0dXM7CisJUFVDSEFSCQkJCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBIRUFERVJfODAyXzExCQkJCQlwTnVsbEZyYW1lOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uIC0tLS0tPlxuIikpOworCisJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdOworCU5kaXNaZXJvTWVtb3J5KFplcm9Tc2lkLCAzMik7CisKKwkvLyBQcmVwYXJlIGZvciBzcGVjaWFsIHNjYW4gcmVxdWVzdAorCS8vIFRoZSBzY2FuIGRlZmluaXRpb24gaXMgZGlmZmVyZW50IHdpdGggb3VyIEFjdGl2ZSwgUGFzc2l2ZSBzY2FuIGRlZmluaXRpb24uCisJLy8gRm9yIENDWDIsIEFjdGl2ZSBtZWFucyBzZW5kIG91dCBwcm9iZSByZXF1ZXN0IHdpdGggYnJvYWRjYXN0IEJTU0lELgorCS8vIFBhc3NpdmUgbWVhbnMgbm8gcHJvYmUgcmVxdWVzdCBzZW50LCBvbmx5IGxpc3RlbiB0byB0aGUgYmVhY29ucy4KKwkvLyBUaGUgY2hhbm5lbCBzY2FubmVkIGlzIGZpeGVkIGFzIHNwZWNpZmllZCwgbm8gbmVlZCB0byBzY2FuIGFsbCBjaGFubmVscy4KKwkvLyBUaGUgc2NhbiB3YWl0IHRpbWUgaXMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHRvby4KKwkvLyBQYXNzaXZlIHNjYW4gTW9kZQorCisJLy8gQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGlzIG5vdCBpZGxlLCByZWplY3QgdGhlIHJlcXVlc3QKKwlpZiAoKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKSAmJiAoSW5kZXggPT0gMCkpCisJCXJldHVybjsKKworCS8vIEZpbGwgb3V0IHN0dWZmIGZvciBzY2FuIHJlcXVlc3QKKwlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgWmVyb1NzaWQsIDAsIEJTU19BTlksIFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKTsKKwlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47CisKKwkvLyBSZXNldCBzb21lIGludGVybmFsIGNvbnRyb2wgZmxhZ3MgdG8gbWFrZSBzdXJlIHRoaXMgc2NhbiB3b3Jrcy4KKwlCc3NUYWJsZUluaXQoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYik7CisJcEFkLT5TdGFDZmcuU2NhbkNudCAgICAgICAgPSAwOworCXBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsID0gcFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbDsKKwlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAgICA9IHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRHVyYXRpb24gJWQsIENoYW5uZWwgJWQhXG4iLCBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbiwgcFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCkpOworCisJLy8gSWYgaXQncyBub24gc2VydmluZyBjaGFubmVsIHNjYW4sIHNlbmQgb3V0IGEgbnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24uCisJaWYgKHBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJeworCQkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKFBWT0lEKSZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCXJldHVybjsKKworCQlwTnVsbEZyYW1lID0gKFBIRUFERVJfODAyXzExKSBwT3V0QnVmZmVyOzsKKwkJLy8gTWFrZSB0aGUgcG93ZXIgc2F2ZSBOdWxsIGZyYW1lIHdpdGggUFNNIGJpdCBvbgorCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcE51bGxGcmFtZSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCXBOdWxsRnJhbWUtPkZDLlR5cGUgCT0gQlRZUEVfREFUQTsKKwkJcE51bGxGcmFtZS0+RkMuUHdyTWdtdAk9IFBXUl9TQVZFOworCisJCS8vIFNlbmQgdXNpbmcgcHJpb3JpdHkgcXVldWUKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZW5kIFBTTSBEYXRhIGZyYW1lIGZvciBvZmYgY2hhbm5lbCBSTVxuIikpOworCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCX0KKworCXBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgICAgID0gTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVE7CisJcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgICAgPSAwOworCS8vIEVuYWJsZSBSeCB3aXRoIHByb21pc2N1b3VzIHJlY2VwdGlvbgorCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgMHgxMDEwKTsKKworCS8vIFNldCBjaGFubmVsIGxvYWQgbWVhc3VyZW1lbnQgZmxhZworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX01FQVNVUkVNRU5UKTsKKworCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX1NDQU5OSU5HOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBub2lzZSBoaXN0b2dyYW0gcmVwb3J0IGFjdGlvbiwgc3BlY2lhbCBzY2FuIG9wZXJhdGlvbiBhZGRlZAorCQl0byBzdXBwb3J0CisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlTdGFydCBmcm9tIGVsZW1lbnQgSUQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJTm9pc2VIaXN0UmVxdWVzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxOworCU1MTUVfU0NBTl9SRVFfU1RSVUNUCQkJU2NhblJlcTsKKwlVQ0hBUgkJCQkJCQlaZXJvU3NpZFszMl0sIGk7CisJTkRJU19TVEFUVVMJCQkJCQlOU3RhdHVzOworCVBVQ0hBUgkJCQkJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlQSEVBREVSXzgwMl8xMQkJCQkJcE51bGxGcmFtZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vaXNlSGlzdFJlcXVlc3RBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF07CisJTmRpc1plcm9NZW1vcnkoWmVyb1NzaWQsIDMyKTsKKworCS8vIFByZXBhcmUgZm9yIHNwZWNpYWwgc2NhbiByZXF1ZXN0CisJLy8gVGhlIHNjYW4gZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCBvdXIgQWN0aXZlLCBQYXNzaXZlIHNjYW4gZGVmaW5pdGlvbi4KKwkvLyBGb3IgQ0NYMiwgQWN0aXZlIG1lYW5zIHNlbmQgb3V0IHByb2JlIHJlcXVlc3Qgd2l0aCBicm9hZGNhc3QgQlNTSUQuCisJLy8gUGFzc2l2ZSBtZWFucyBubyBwcm9iZSByZXF1ZXN0IHNlbnQsIG9ubHkgbGlzdGVuIHRvIHRoZSBiZWFjb25zLgorCS8vIFRoZSBjaGFubmVsIHNjYW5uZWQgaXMgZml4ZWQgYXMgc3BlY2lmaWVkLCBubyBuZWVkIHRvIHNjYW4gYWxsIGNoYW5uZWxzLgorCS8vIFRoZSBzY2FuIHdhaXQgdGltZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QgdG9vLgorCS8vIFBhc3NpdmUgc2NhbiBNb2RlCisKKwkvLyBDb250cm9sIHN0YXRlIG1hY2hpbmUgaXMgbm90IGlkbGUsIHJlamVjdCB0aGUgcmVxdWVzdAorCWlmICgocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpICYmIChJbmRleCA9PSAwKSkKKwkJcmV0dXJuOworCisJLy8gRmlsbCBvdXQgc3R1ZmYgZm9yIHNjYW4gcmVxdWVzdAorCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl9DSVNDT19OT0lTRSk7CisJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJLy8gUmVzZXQgc29tZSBpbnRlcm5hbCBjb250cm9sIGZsYWdzIHRvIG1ha2Ugc3VyZSB0aGlzIHNjYW4gd29ya3MuCisJQnNzVGFibGVJbml0KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIpOworCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwlwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCA9IHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWw7CisJcEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgICAgPSBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkR1cmF0aW9uICVkLCBDaGFubmVsICVkIVxuIiwgcFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb24sIHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWwpKTsKKworCS8vIElmIGl0J3Mgbm9uIHNlcnZpbmcgY2hhbm5lbCBzY2FuLCBzZW5kIG91dCBhIG51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uLgorCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCXsKKwkJLy8gVXNlIE1MTUUgZW5xdWV1ZSBtZXRob2QKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmIChOU3RhdHVzCSE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlyZXR1cm47CisKKwkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJLy8gTWFrZSB0aGUgcG93ZXIgc2F2ZSBOdWxsIGZyYW1lIHdpdGggUFNNIGJpdCBvbgorCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcE51bGxGcmFtZSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCXBOdWxsRnJhbWUtPkZDLlR5cGUgIAk9IEJUWVBFX0RBVEE7CisJCXBOdWxsRnJhbWUtPkZDLlB3ck1nbXQJPSBQV1JfU0FWRTsKKworCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwl9CisKKwkvLyBSZXNldCB0aGUgc3RhdGlzdGljcworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gPSAwOworCisJLy8gRW5hYmxlIFJ4IHdpdGggcHJvbWlzY3VvdXMgcmVjZXB0aW9uCisJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCAweDEwMTApOworCisJLy8gU2V0IGNoYW5uZWwgbG9hZCBtZWFzdXJlbWVudCBmbGFnCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQpOworCisJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfU0NBTk5JTkc7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBCZWFjb24gcmVwb3J0IGFjdGlvbiwgc3BlY2lhbCBzY2FuIG9wZXJhdGlvbiBhZGRlZAorCQl0byBzdXBwb3J0CisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlTdGFydCBmcm9tIGVsZW1lbnQgSUQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQmVhY29uUmVxdWVzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxOworCU5ESVNfU1RBVFVTCQkJCQkJTlN0YXR1czsKKwlQVUNIQVIJCQkJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUEhFQURFUl84MDJfMTEJCQkJCXBOdWxsRnJhbWU7CisJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJCQlTY2FuUmVxOworCVVDSEFSCQkJCQkJCVplcm9Tc2lkWzMyXTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblJlcXVlc3RBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF07CisJTmRpc1plcm9NZW1vcnkoWmVyb1NzaWQsIDMyKTsKKworCS8vIFByZXBhcmUgZm9yIHNwZWNpYWwgc2NhbiByZXF1ZXN0CisJLy8gVGhlIHNjYW4gZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCBvdXIgQWN0aXZlLCBQYXNzaXZlIHNjYW4gZGVmaW5pdGlvbi4KKwkvLyBGb3IgQ0NYMiwgQWN0aXZlIG1lYW5zIHNlbmQgb3V0IHByb2JlIHJlcXVlc3Qgd2l0aCBicm9hZGNhc3QgQlNTSUQuCisJLy8gUGFzc2l2ZSBtZWFucyBubyBwcm9iZSByZXF1ZXN0IHNlbnQsIG9ubHkgbGlzdGVuIHRvIHRoZSBiZWFjb25zLgorCS8vIFRoZSBjaGFubmVsIHNjYW5uZWQgaXMgZml4ZWQgYXMgc3BlY2lmaWVkLCBubyBuZWVkIHRvIHNjYW4gYWxsIGNoYW5uZWxzLgorCS8vIFRoZSBzY2FuIHdhaXQgdGltZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QgdG9vLgorCWlmIChwUmVxLT5NZWFzdXJlbWVudC5TY2FuTW9kZSA9PSBNU1JOX1NDQU5fTU9ERV9QQVNTSVZFKQorCXsKKwkJLy8gUGFzc2l2ZSBzY2FuIE1vZGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGFzc2l2ZSBTY2FuIE1vZGUhXG4iKSk7CisKKwkJLy8gQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGlzIG5vdCBpZGxlLCByZWplY3QgdGhlIHJlcXVlc3QKKwkJaWYgKChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkgJiYgKEluZGV4ID09IDApKQorCQkJcmV0dXJuOworCisJCS8vIEZpbGwgb3V0IHN0dWZmIGZvciBzY2FuIHJlcXVlc3QKKwkJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsIFplcm9Tc2lkLCAwLCBCU1NfQU5ZLCBTQ0FOX0NJU0NPX1BBU1NJVkUpOworCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJCS8vIFJlc2V0IHNvbWUgaW50ZXJuYWwgY29udHJvbCBmbGFncyB0byBtYWtlIHN1cmUgdGhpcyBzY2FuIHdvcmtzLgorCQlCc3NUYWJsZUluaXQoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYik7CisJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwkJcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgPSBwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsOworCQlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAgICA9IHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uOworCQlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEdXJhdGlvbiAlZCFcbiIsIHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uKSk7CisKKwkJLy8gSWYgaXQncyBub24gc2VydmluZyBjaGFubmVsIHNjYW4sIHNlbmQgb3V0IGEgbnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24uCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQl7CisJCQkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXJldHVybjsKKworCQkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCS8vIE1ha2UgdGhlIHBvd2VyIHNhdmUgTnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24KKwkJCU1ndE1hY0hlYWRlckluaXQocEFkLCBwTnVsbEZyYW1lLCBTVUJUWVBFX05VTExfRlVOQywgMSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCQlwTnVsbEZyYW1lLT5GQy5UeXBlICAgICA9IEJUWVBFX0RBVEE7CisJCQlwTnVsbEZyYW1lLT5GQy5Qd3JNZ210ICA9IFBXUl9TQVZFOworCisJCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCX0KKworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9TQ0FOTklORzsKKwl9CisJZWxzZSBpZiAocFJlcS0+TWVhc3VyZW1lbnQuU2Nhbk1vZGUgPT0gTVNSTl9TQ0FOX01PREVfQUNUSVZFKQorCXsKKwkJLy8gQWN0aXZlIHNjYW4gTW9kZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBY3RpdmUgU2NhbiBNb2RlIVxuIikpOworCisJCS8vIENvbnRyb2wgc3RhdGUgbWFjaGluZSBpcyBub3QgaWRsZSwgcmVqZWN0IHRoZSByZXF1ZXN0CisJCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkKKwkJCXJldHVybjsKKworCQkvLyBGaWxsIG91dCBzdHVmZiBmb3Igc2NhbiByZXF1ZXN0CisJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl9DSVNDT19BQ1RJVkUpOworCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJCS8vIFJlc2V0IHNvbWUgaW50ZXJuYWwgY29udHJvbCBmbGFncyB0byBtYWtlIHN1cmUgdGhpcyBzY2FuIHdvcmtzLgorCQlCc3NUYWJsZUluaXQoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYik7CisJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwkJcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgPSBwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsOworCQlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAgICA9IHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uOworCQlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEdXJhdGlvbiAlZCFcbiIsIHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uKSk7CisKKwkJLy8gSWYgaXQncyBub24gc2VydmluZyBjaGFubmVsIHNjYW4sIHNlbmQgb3V0IGEgbnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24uCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQl7CisJCQkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXJldHVybjsKKworCQkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCS8vIE1ha2UgdGhlIHBvd2VyIHNhdmUgTnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24KKwkJCU1ndE1hY0hlYWRlckluaXQocEFkLCBwTnVsbEZyYW1lLCBTVUJUWVBFX05VTExfRlVOQywgMSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCQlwTnVsbEZyYW1lLT5GQy5UeXBlICAgICA9IEJUWVBFX0RBVEE7CisJCQlwTnVsbEZyYW1lLT5GQy5Qd3JNZ210ICA9IFBXUl9TQVZFOworCisJCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCX0KKworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9TQ0FOTklORzsKKwl9CisJZWxzZSBpZiAocFJlcS0+TWVhc3VyZW1lbnQuU2Nhbk1vZGUgPT0gTVNSTl9TQ0FOX01PREVfQkVBQ09OX1RBQkxFKQorCXsKKwkJLy8gQmVhY29uIHJlcG9ydCBNb2RlLCByZXBvcnQgYWxsIHRoZSBBUFMgaW4gY3VycmVudCBic3MgdGFibGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmVhY29uIFJlcG9ydCBNb2RlIVxuIikpOworCisJCS8vIENvcHkgY3VycmVudCBCU1MgdGFibGUgdG8gQ0NYIHRhYmxlLCB3ZSBjYW4gb21pdCB0aGlzIHN0ZXAgbGF0ZXIgb24uCisJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIsICZwQWQtPlNjYW5UYWIsIHNpemVvZihCU1NfVEFCTEUpKTsKKworCQkvLyBDcmVhdGUgYmVhY29uIHJlcG9ydCBmcm9tIEJzcyB0YWJsZQorCQlBaXJvbmV0Q3JlYXRlQmVhY29uUmVwb3J0RnJvbUJzc1RhYmxlKHBBZCk7CisKKwkJLy8gU2V0IHN0YXRlIHRvIHNjYW5uaW5nCisJCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX1NDQU5OSU5HOworCisJCS8vIEVucXVldWUgcmVwb3J0IHJlcXVlc3QKKwkJLy8gQ2lzY28gc2NhbiByZXF1ZXN0IGlzIGZpbmlzaGVkLCBwcmVwYXJlIGJlYWNvbiByZXBvcnQKKwkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgMCwgTlVMTCk7CisJfQorCWVsc2UKKwl7CisJCS8vIFdyb25nIHNjYW4gTW9kZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcm9uZyBTY2FuIE1vZGUhXG4iKSk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmVhY29uUmVxdWVzdEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQoreworCVBSTV9SRVFVRVNUX0FDVElPTglwUmVxOworCVVMT05HCQkJCU5vdzMyOworCisgICAgTmRpc0dldFN5c3RlbVVwVGltZSgmTm93MzIpOworCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3czMjsKKworCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W3BBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeF07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBaXJvbmV0UmVwb3J0QWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gMS4gUGFyc2UgbWVhc3VyZW1lbnQgdHlwZSBhbmQgY2FsbCBhcHByb3ByaWF0ZSBmdW5jdGlvbnMKKwlpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVRKQorCQkvLyBDaGFubmVsIExvYWQgbWVhc3VyZW1lbnQgcmVxdWVzdAorCQlDaGFubmVsTG9hZFJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZSBpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUSkKKwkJLy8gTm9pc2UgSGlzdG9ncmFtIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJTm9pc2VIaXN0UmVwb3J0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0JFQUNPTl9SRVEpCisJCS8vIEJlYWNvbiBtZWFzdXJlbWVudCByZXF1ZXN0CisJCUJlYWNvblJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZQorCQkvLyBVbmtub3duLiBEbyBub3RoaW5nIGFuZCByZXR1cm4KKwkJOworCisJLy8gMi4gUG9pbnQgdG8gdGhlIGNvcnJlY3QgaW5kZXggb2YgYWN0aW9uIGVsZW1lbnQsIHN0YXJ0IGZyb20gMAorCXBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCsrOworCisJLy8gMy4gQ2hlY2sgZm9yIHBhcmFsbGVsIGFjdGlvbnMKKwlpZiAocEFkLT5TdGFDZmcuUGFyYWxsZWxSZXEgPT0gVFJVRSkKKwl7CisJCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W3BBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeF07CisKKwkJLy8gUHJvY2VzcyBuZXh0IGFjdGlvbiByaWdodCBhd2F5CisJCWlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVEpCisJCQkvLyBDaGFubmVsIExvYWQgbWVhc3VyZW1lbnQgcmVxdWVzdAorCQkJQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCQllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX05PSVNFX0hJU1RfUkVRKQorCQkJLy8gTm9pc2UgSGlzdG9ncmFtIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJCU5vaXNlSGlzdFJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisKKwkJcEFkLT5TdGFDZmcuUGFyYWxsZWxSZXEgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4Kys7CisJfQorCisJaWYgKHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCA+PSBwQWQtPlN0YUNmZy5STVJlcUNudCkKKwl7CisJCS8vIDQuIFRoZXJlIGlzIG5vIG1vcmUgdW5wcm9jZXNzZWQgbWVhc3VyZW1lbnQgcmVxdWVzdCwgZ28gZm9yIHRyYW5zbWl0IHRoaXMgcmVwb3J0CisJCUFpcm9uZXRGaW5hbFJlcG9ydEFjdGlvbihwQWQpOworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9JRExFOworCX0KKwllbHNlCisJeworCQlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHhdOworCisJCWlmIChwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCXsKKwkJCVJUTVB1c2VjRGVsYXkoMTAwMDAwKTsKKwkJfQorCisJCS8vIDUuIFRoZXJlIGFyZSBtb3JlIHJlcXVlc3RzIHRvIGJlIG1lYXN1cmUKKwkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fUkVRLCAwLCBOVUxMKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFpcm9uZXRSZXBvcnRBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBaXJvbmV0RmluYWxSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFVDSEFSCQkJCQlwRGVzdDsKKwlQQUlST05FVF9JQVBQX0hFQURFUglwSUFQUDsKKwlQSEVBREVSXzgwMl8xMQkJCXBIZWFkZXI7CisJVUNIQVIJCQkJCUFja1JhdGUgPSBSQVRFXzI7CisJVVNIT1JUCQkJCQlBY2tEdXJhdGlvbiA9IDA7CisJTkRJU19TVEFUVVMJCQkJTlN0YXR1czsKKwlQVUNIQVIJCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVVMT05HCQkJCQlGcmFtZUxlbiA9IDA7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBaXJvbmV0RmluYWxSZXBvcnRBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyAwLiBTZXQgdXAgdGhlIGZyYW1lIHBvaW50ZXIsIEZyYW1lIHdhcyBpbml0ZWQgYXQgdGhlIGVuZCBvZiBtZXNzYWdlIGFjdGlvbgorCXBEZXN0ID0gJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW0xFTkdUSF84MDJfMTFdOworCisJLy8gMS4gVXBkYXRlIHJlcG9ydCBJQVBQIGZpZWxkcworCXBJQVBQID0gKFBBSVJPTkVUX0lBUFBfSEVBREVSKSBwRGVzdDsKKworCS8vIDIuIENvcHkgQ2lzY28gU05BUCBoZWFkZXIKKwlOZGlzTW92ZU1lbW9yeShwSUFQUC0+Q2lzY29TbmFwSGVhZGVyLCBTTkFQX0FJUk9ORVQsIExFTkdUSF84MDJfMV9IKTsKKworCS8vIDMuIG5ldHdvcmsgb3JkZXIgZm9yIHRoaXMgMTZiaXQgbGVuZ3RoCisJcElBUFAtPkxlbmd0aCAgPSBjcHUyYmUxNihwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfODAyXzFfSCk7CisKKwkvLyAzLjEgc2FuaXR5IGNoZWNrIHRoZSByZXBvcnQgbGVuZ3RoLCBpZ25vcmUgaXQgaWYgdGhlcmUgaXMgbm90aGluZyB0byByZXBvcnQKKwlpZiAoYmUyY3B1MTYocElBUFAtPkxlbmd0aCkgPD0gMTgpCisJCXJldHVybjsKKworCS8vIDQuIFR5cGUgbXVzdCBiZSAweDMyCisJcElBUFAtPlR5cGUgICAgPSBBSVJPTkVUX0lBUFBfVFlQRTsKKworCS8vIDUuIFN1YlR5cGUgZm9yIHJlcG9ydCBtdXN0IGJlIDB4ODEKKwlwSUFQUC0+U3ViVHlwZSA9IEFJUk9ORVRfSUFQUF9TVUJUWVBFX1JFUE9SVDsKKworCS8vIDYuIERBIGlzIG5vdCB1c2VkIGFuZCBtdXN0IGJlIHplcm8sIGFsdGhvdWdoIHRoZSB3aG9sZSBmcmFtZSB3YXMgY2xlYXJlZCBhdCB0aGUgc3RhcnQgb2YgZnVuY3Rpb24KKwkvLyAgICBXZSB3aWxsIGRvIGl0IGFnYWluIGhlcmUuIFdlIGNhbiB1c2UgQlNTSUQgaW5zdGVhZAorCUNPUFlfTUFDX0FERFIocElBUFAtPkRBLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkvLyA3LiBTQSBpcyB0aGUgY2xpZW50IHJlcG9ydGluZyB3aGljaCBtdXN0IGJlIG91ciBNQUMKKwlDT1BZX01BQ19BRERSKHBJQVBQLT5TQSwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisKKwkvLyA4LiBDb3B5IHRoZSBzYXZlZCBkaWFsb2cgdG9rZW4KKwlwSUFQUC0+VG9rZW4gPSBwQWQtPlN0YUNmZy5JQVBQVG9rZW47CisKKwkvLyA5LiBNYWtlIHRoZSBSZXBvcnQgZnJhbWUgODAyLjExIGhlYWRlcgorCS8vICAgIFJldXNlIGZ1bmN0aW9uIGluIHdwYS5jCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWY7CisJcEFkLT5TZXF1ZW5jZSArKzsKKwlXcGFNYWNIZWFkZXJJbml0KHBBZCwgcEhlYWRlciwgMCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gQUNLIHNpemUJaXMgMTQgaW5jbHVkZSBDUkMsIGFuZCBpdHMgcmF0ZQlpcyBiYXNlZCBvbiByZWFsIHRpbWUgaW5mb3JtYXRpb24KKwlBY2tSYXRlICAgICA9IHBBZC0+Q29tbW9uQ2ZnLkV4cGVjdGVkQUNLUmF0ZVtwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJQWNrRHVyYXRpb24gPSBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgQWNrUmF0ZSwgMTQpOworCXBIZWFkZXItPkR1cmF0aW9uID0gcEFkLT5Db21tb25DZmcuRHNpZnMgKyBBY2tEdXJhdGlvbjsKKworCS8vIFVzZSBNTE1FIGVucXVldWUgbWV0aG9kCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm47CisKKwkvLyAxMC4gUHJlcGFyZSByZXBvcnQgZnJhbWUgd2l0aCBkeW5hbWljIG91dGJ1ZmZlci4gSnVzdCBzaW1wbHkgY29weSBldmVyeXRoaW5nLgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4sIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmLAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCS8vIDExLiBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgPSBNU1JOX1RZUEVfVU5VU0VEOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWlyb25ldEZpbmFsUmVwb3J0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJcFJlcG9ydDsKKwlQQ0hBTk5FTF9MT0FEX1JFUE9SVAkJcExvYWQ7CisJUFVDSEFSCQkJCQkJcERlc3Q7CisJVUNIQVIJCQkJCQlDQ0FCdXN5RnJhY3Rpb247CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsTG9hZFJlcG9ydEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIERpc2FibGUgUnggd2l0aCBwcm9taXNjdW91cyByZWNlcHRpb24sIG1ha2UgaXQgYmFjayB0byBub3JtYWwKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIFNUQU5PUk1BTCk7IC8vIFN0YWlvbiBub3QgZHJvcCBjb250cm9sIGZyYW1lIHdpbGwgZmFpbCBXaUZpIENlcnRpZmljYXRpb24uCisKKwkvLyAwLiBTZXR1cCBwb2ludGVyIGZvciBwcm9jZXNzaW5nIGJlYWNvbiAmIHByb2JlIHJlc3BvbnNlCisJcERlc3QgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW5dOworCXBSZXBvcnQgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKworCS8vIDEuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGVsZW1lbnQgZmllbGQuCisJcFJlcG9ydC0+RWlkICAgID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOworCS8vIEZpeGVkIExlbmd0aCBhdCA5LCBub3QgaW5jbHVkZSBFaWQgYW5kIGxlbmd0aCBmaWVsZHMKKwlwUmVwb3J0LT5MZW5ndGggPSA5OworCXBSZXBvcnQtPlRva2VuICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uUmVxRWxlbS5Ub2tlbjsKKwlwUmVwb3J0LT5Nb2RlICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLlJlcUVsZW0uTW9kZTsKKwlwUmVwb3J0LT5UeXBlICAgPSBNU1JOX1RZUEVfQ0hBTk5FTF9MT0FEX1JFUTsKKworCS8vIDIuIEZpbGwgY2hhbm5lbCByZXBvcnQgbWVhc3VyZW1lbnQgZGF0YQorCXBEZXN0ICs9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisJcExvYWQgID0gKFBDSEFOTkVMX0xPQURfUkVQT1JUKSBwRGVzdDsKKwlwTG9hZC0+Q2hhbm5lbCAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLk1lYXN1cmVtZW50LkNoYW5uZWw7CisJcExvYWQtPlNwYXJlICAgID0gMDsKKwlwTG9hZC0+RHVyYXRpb24gPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLk1lYXN1cmVtZW50LkR1cmF0aW9uOworCisJLy8gMy4gQ2FsY3VsYXRlIHRoZSBDQ0EgQnVzeSBGcmFjdGlvbgorCS8vICAgIChCeXRlcyArIEFDSyBzaXplKSAqIDggLyBUeCBzcGVlZCAqIDI1NSAvIDEwMDAgLyBtZWFzdXJlbWVudCBkdXJhdGlvbiwgdXNlIDI0IHVzIFR4IHNwZWVkCisJLy8gICAgID0gIChCeXRlcyArIEFDSykgLyAxMiAvIGR1cmF0aW9uCisJLy8gICAgIDkgaXMgdGhlIGdvb2QgdmFsdWUgZm9yIHBBZC0+U3RhQ2ZnLkNMRmFjdG9yCisJLy8gQ0NBQnVzeUZyYWN0aW9uID0gKFVDSEFSKSAocEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgLyA5IC8gcExvYWQtPkR1cmF0aW9uKTsKKwlDQ0FCdXN5RnJhY3Rpb24gPSAoVUNIQVIpIChwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyAvIHBBZC0+U3RhQ2ZnLkNMRmFjdG9yIC8gcExvYWQtPkR1cmF0aW9uKTsKKwlpZiAoQ0NBQnVzeUZyYWN0aW9uIDwgMTApCisJCQlDQ0FCdXN5RnJhY3Rpb24gPSAoVUNIQVIpIChwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyAvIDMgLyBwTG9hZC0+RHVyYXRpb24pICsgMTsKKworCXBMb2FkLT5DQ0FCdXN5ID0gQ0NBQnVzeUZyYWN0aW9uOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNMQnVzeUJ5dGUgJWxkLCBEdXJhdGlvbiAlZCwgUmVzdWx0LCAlZFxuIiwgcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMsIHBMb2FkLT5EdXJhdGlvbiwgQ0NBQnVzeUZyYWN0aW9uKSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFtZVJlcG9ydExlbiAlZFxuIiwgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4pKTsKKwlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiArPSAoc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSArIHNpemVvZihDSEFOTkVMX0xPQURfUkVQT1JUKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRnJhbWVSZXBvcnRMZW4gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7CisKKwkvLyA0LiBDbGVhciBjaGFubmVsIGxvYWQgbWVhc3VyZW1lbnQgZmxhZworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQpOworCisJLy8gNS4gcmVzZXQgdG8gaWRsZSBzdGF0ZQorCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX0lETEU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsTG9hZFJlcG9ydEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5vaXNlSGlzdFJlcG9ydEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVAlwUmVwb3J0OworCVBOT0lTRV9ISVNUX1JFUE9SVAkJCXBOb2lzZTsKKwlQVUNIQVIJCQkJCQlwRGVzdDsKKwlVQ0hBUgkJCQkJCWksTm9pc2VDbnQ7CisJVVNIT1JUCQkJCQkJVG90YWxSUElDbnQsIFRvdGFsUlBJU3VtOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTm9pc2VIaXN0UmVwb3J0QWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gMC4gRGlzYWJsZSBSeCB3aXRoIHByb21pc2N1b3VzIHJlY2VwdGlvbiwgbWFrZSBpdCBiYWNrIHRvIG5vcm1hbAorCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsgLy8gU3RhaW9uIG5vdCBkcm9wIGNvbnRyb2wgZnJhbWUgd2lsbCBmYWlsIFdpRmkgQ2VydGlmaWNhdGlvbi4KKwkvLyAxLiBTZXR1cCBwb2ludGVyIGZvciBwcm9jZXNzaW5nIGJlYWNvbiAmIHByb2JlIHJlc3BvbnNlCisJcERlc3QgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW5dOworCXBSZXBvcnQgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKworCS8vIDIuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGVsZW1lbnQgZmllbGQuCisJcFJlcG9ydC0+RWlkICAgID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOworCS8vIEZpeGVkIExlbmd0aCBhdCAxNiwgbm90IGluY2x1ZGUgRWlkIGFuZCBsZW5ndGggZmllbGRzCisJcFJlcG9ydC0+TGVuZ3RoID0gMTY7CisJcFJlcG9ydC0+VG9rZW4gID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5SZXFFbGVtLlRva2VuOworCXBSZXBvcnQtPk1vZGUgICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uUmVxRWxlbS5Nb2RlOworCXBSZXBvcnQtPlR5cGUgICA9IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUTsKKworCS8vIDMuIEZpbGwgbm9pc2UgaGlzdG9ncmFtIHJlcG9ydCBtZWFzdXJlbWVudCBkYXRhCisJcERlc3QgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKwlwTm9pc2UgID0gKFBOT0lTRV9ISVNUX1JFUE9SVCkgcERlc3Q7CisJcE5vaXNlLT5DaGFubmVsICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uTWVhc3VyZW1lbnQuQ2hhbm5lbDsKKwlwTm9pc2UtPlNwYXJlICAgID0gMDsKKwlwTm9pc2UtPkR1cmF0aW9uID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwkvLyA0LiBGaWxsIE5vaXNlIGhpc3RvZ3JhbSwgdGhlIHRvdGFsIFJQSSBjb3VudHMgc2hvdWxkIGJlIDAuNCAqIFRVCisJLy8gICAgV2UgZXN0aW1hdGUgNDAwMCBub3JtYWwgcGFja2V0cyByZWNlaXZlZCBkdXJuaW5nIDEwIHNlY29uZHMgdGVzdC4KKwkvLyAgICBBZGp1c3QgaXQgaWYgcmVxdWlyZWQuCisJLy8gMyBpcyBhIGdvb2QgdmFsdWUgZm9yIHBBZC0+U3RhQ2ZnLk5IRmFjdG9yCisJLy8gVG90YWxSUElDbnQgPSBwTm9pc2UtPkR1cmF0aW9uICogMyAvIDEwOworCVRvdGFsUlBJQ250ID0gcE5vaXNlLT5EdXJhdGlvbiAqIHBBZC0+U3RhQ2ZnLk5IRmFjdG9yIC8gMTA7CisJVG90YWxSUElTdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwl7CisJCVRvdGFsUlBJU3VtICs9IHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV07CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJQSSAlZCBDb251dHMgJWRcbiIsIGksIHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0pKTsKKwl9CisKKwkvLyBEb3VibGUgY2hlY2sgaWYgdGhlIGNvdW50ZXIgaXMgbGFyZ2VyIHRoYW4gb3VyIGV4cGVjdGF0aW9uLgorCS8vIFdlIHdpbGwgcmVwbGFjZSBpdCB3aXRoIHRoZSB0b3RhbCBudW1iZXIgcGx1cyBhIGZyYWN0aW9uLgorCWlmIChUb3RhbFJQSVN1bSA+IFRvdGFsUlBJQ250KQorCQlUb3RhbFJQSUNudCA9IFRvdGFsUlBJU3VtICsgcE5vaXNlLT5EdXJhdGlvbiAvIDIwOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVG90YWwgUlBJIENvbnV0cyAlZFxuIiwgVG90YWxSUElDbnQpKTsKKworCS8vIDUuIEluaXRpYWxpemUgbm9pc2UgY291bnQgZm9yIHRoZSB0b3RhbCBzdW1tYXRpb24gb2YgMHhmZgorCU5vaXNlQ250ID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKQorCXsKKwkJcE5vaXNlLT5EZW5zaXR5W2ldID0gKFVDSEFSKSAocEFkLT5TdGFDZmcuUlBJRGVuc2l0eVtpXSAqIDI1NSAvIFRvdGFsUlBJQ250KTsKKwkJaWYgKChwTm9pc2UtPkRlbnNpdHlbaV0gPT0gMCkgJiYgKHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gIT0gMCkpCisJCQlwTm9pc2UtPkRlbnNpdHlbaV0rKzsKKwkJTm9pc2VDbnQgKz0gcE5vaXNlLT5EZW5zaXR5W2ldOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZXBvcnRlZCBSUElbJWRdICA9IDB4JTAyeFxuIiwgaSwgcE5vaXNlLT5EZW5zaXR5W2ldKSk7CisJfQorCisJLy8gNi4gUlBJWzBdIHJlcHJlc2VudHMgdGhlIHJlc3Qgb2YgY291bnRzCisJcE5vaXNlLT5EZW5zaXR5WzBdID0gMHhmZiAtIE5vaXNlQ250OworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlcG9ydGVkIFJQSVswXSAgPSAweCUwMnhcbiIsIHBOb2lzZS0+RGVuc2l0eVswXSkpOworCisJcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4gKz0gKHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCkgKyBzaXplb2YoTk9JU0VfSElTVF9SRVBPUlQpKTsKKworCS8vIDcuIENsZWFyIGNoYW5uZWwgbG9hZCBtZWFzdXJlbWVudCBmbGFnCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19NRUFTVVJFTUVOVCk7CisKKwkvLyA4LiByZXNldCB0byBpZGxlIHN0YXRlCisJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfSURMRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vaXNlSGlzdFJlcG9ydEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByZXBhcmUgQmVhY29uIHJlcG9ydCBhY3Rpb24sCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUJlYWNvblJlcG9ydEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblJlcG9ydEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIExvb2tzIGxpa2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0aGluZyBuZWVkIHRvIGRvIGhlcmUuCisJLy8gQWxsIG1lYXN1cmVtZW50IHJlcG9ydCBhbHJlYWR5IGZpbmlzaGVkIGluIEFkZEJlYWNvblJlcG9ydAorCS8vIFRoZSBsZW5ndGggaXMgaW4gdGhlIEZyYW1lUmVwb3J0TGVuCisKKwkvLyByZXNldCBCZWFjb24gaW5kZXggZm9yIG5leHQgYmVhY29uIHJlcXVlc3QKKwlwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggPSAweGZmOworCisJLy8gcmVzZXQgdG8gaWRsZSBzdGF0ZQorCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX0lETEU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCZWFjb25SZXBvcnRBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCQlJbmRleAkJQ3VycmVudCBCU1NJRCBpbiBDQ1hCc3N0YWIgZW50cnkgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRBZGRCZWFjb25SZXBvcnQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVMT05HCQkJCUluZGV4LAorCUlOCVBNTE1FX1FVRVVFX0VMRU0JcEVsZW0pCit7CisJUFZPSUQJCQkJCQlwTXNnOworCVBVQ0hBUgkJCQkJCXBTcmMsIHBEZXN0OworCVVDSEFSCQkJCQkJUmVxSWR4OworCVVMT05HCQkJCQkJTXNnTGVuOworCVVTSE9SVAkJCQkJCUxlbmd0aDsKKwlQRlJBTUVfODAyXzExCQkJCXBGcmFtZTsKKwlQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJcFJlcG9ydDsKKwlQRUlEX1NUUlVDVAkJCSAgICAgICAgcEVpZDsKKwlQQkVBQ09OX1JFUE9SVAkJCQlwQmVhY29uUmVwb3J0OworCVBCU1NfRU5UUlkJCQkJCXBCc3M7CisKKwkvLyAwLiBTZXR1cCBwb2ludGVyIGZvciBwcm9jZXNzaW5nIGJlYWNvbiAmIHByb2JlIHJlc3BvbnNlCisJcE1zZyAgID0gcEVsZW0tPk1zZzsKKwlNc2dMZW4gPSBwRWxlbS0+TXNnTGVuOworCXBGcmFtZSA9IChQRlJBTUVfODAyXzExKSBwTXNnOworCXBTcmMgICA9IHBGcmFtZS0+T2N0ZXQ7CQkJCS8vIFN0YXJ0IGZyb20gQVAgVFNGCisJcEJzcyAgID0gKFBCU1NfRU5UUlkpICZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSW5kZXhdOworCVJlcUlkeCA9IHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeDsKKworCS8vIDEgQ2hlY2sgdGhlIEluZGV4LCBpZiB3ZSBhbHJlYWR5IGNyZWF0ZSB0aGlzIGVudHJ5LCBvbmx5IHVwZGF0ZSB0aGUgYXZlcmFnZSBSU1NJCisJaWYgKChJbmRleCA8PSBwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXgpICYmIChwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggIT0gMHhmZikpCisJeworCQlwRGVzdCAgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuQnNzUmVwb3J0T2Zmc2V0W0luZGV4XV07CisJCS8vIFBvaW50IHRvIGJzcyByZXBvcnQgaW5mb3JtYXRpb24KKwkJcERlc3QgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKwkJcEJlYWNvblJlcG9ydCA9IChQQkVBQ09OX1JFUE9SVCkgcERlc3Q7CisKKwkJLy8gVXBkYXRlIFJ4IHBvd2VyLCBpbiBkQm0KKwkJLy8gR2V0IHRoZSBvcmlnaW5hbCBSU1NJIHJlYWRiYWNrIGZyb20gQkJQCisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgKz0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKwkJLy8gQXZlcmFnZSB0aGUgUnNzaSByZWFkaW5nCisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgID0gKHBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgKyBwQnNzLT5Sc3NpKSAvIDI7CisJCS8vIEdldCB0byBkQm0gZm9ybWF0CisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgLT0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCc3NpZCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiLAorCQkJcEJzcy0+QnNzaWRbMF0sIHBCc3MtPkJzc2lkWzFdLCBwQnNzLT5Cc3NpZFsyXSwKKwkJCXBCc3MtPkJzc2lkWzNdLCBwQnNzLT5Cc3NpZFs0XSwgcEJzcy0+QnNzaWRbNV0pKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUnhQb3dlclslbGRdIFJzc2kgJWQsIEF2ZyBSc3NpICVkXG4iLCBJbmRleCwgKHBCc3MtPlJzc2kgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSwgcEJlYWNvblJlcG9ydC0+UnhQb3dlciAtIDI1NikpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFtZVJlcG9ydExlbiA9ICVkXG4iLCBwQWQtPlN0YUNmZy5Cc3NSZXBvcnRPZmZzZXRbSW5kZXhdKSk7CisKKwkJLy8gVXBkYXRlIG90aGVyIGluZm9ybWF0aW9uIGhlcmUKKworCQkvLyBEb25lCisJCXJldHVybjsKKwl9CisKKwkvLyAyLiBVcGRhdGUgcmVwb3J0ZWQgSW5kZXgKKwlwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggPSBJbmRleDsKKworCS8vIDMuIFNldHVwIHRoZSBidWZmZXIgYWRkcmVzcyBmb3IgY29weWluZyB0aGlzIEJTU0lEIGludG8gcmVwb3J0aW5nIGZyYW1lCisJLy8gICAgVGhlIG9mZnNldCBzaG91bGQgc3RhcnQgYWZ0ZXIgODAyLjExIGhlYWRlciBhbmQgcmVwb3J0IGZyYW1lIGhlYWRlci4KKwlwRGVzdCA9IChQVUNIQVIpICZwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydEJ1ZltwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbl07CisKKwkvLyA0LiBTYXZlIHRoZSBzdGFydCBvZmZzZXQgb2YgZWFjaCBCc3MgaW4gcmVwb3J0IGZyYW1lCisJcEFkLT5TdGFDZmcuQnNzUmVwb3J0T2Zmc2V0W0luZGV4XSA9IHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuOworCisJLy8gNS4gRmlsbCBNZWFzdXJlbWVudCByZXBvcnQgZmllbGRzCisJcFJlcG9ydCA9IChQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpIHBEZXN0OworCXBSZXBvcnQtPkVpZCA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKwlwUmVwb3J0LT5MZW5ndGggPSAwOworCXBSZXBvcnQtPlRva2VuICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtSZXFJZHhdLlJlcUVsZW0uVG9rZW47CisJcFJlcG9ydC0+TW9kZSAgID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W1JlcUlkeF0uUmVxRWxlbS5Nb2RlOworCXBSZXBvcnQtPlR5cGUgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCUxlbmd0aCAgICAgICAgICA9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisJcERlc3QgICAgICAgICAgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKworCS8vIDYuIFN0YXJ0IHRoZWJlYWNvbiByZXBvcnQgZm9ybWF0CisJcEJlYWNvblJlcG9ydCA9IChQQkVBQ09OX1JFUE9SVCkgcERlc3Q7CisJcERlc3QgICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKwlMZW5ndGggICAgICAgKz0gc2l6ZW9mKEJFQUNPTl9SRVBPUlQpOworCisJLy8gNy4gQ29weSBDaGFubmVsIG51bWJlcgorCXBCZWFjb25SZXBvcnQtPkNoYW5uZWwgICAgICAgID0gcEJzcy0+Q2hhbm5lbDsKKwlwQmVhY29uUmVwb3J0LT5TcGFyZSAgICAgICAgICA9IDA7CisJcEJlYWNvblJlcG9ydC0+RHVyYXRpb24gICAgICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwlwQmVhY29uUmVwb3J0LT5QaHlUeXBlICAgICAgICA9ICgocEJzcy0+U3VwUmF0ZUxlbitwQnNzLT5FeHRSYXRlTGVuID4gNCkgPyBQSFlfRVJQIDogUEhZX0RTUyk7CisJLy8gOC4gUnggcG93ZXIsIGluIGRCbQorCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgICAgICAgID0gcEJzcy0+UnNzaSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCc3NpZCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiLAorCQlwQnNzLT5Cc3NpZFswXSwgcEJzcy0+QnNzaWRbMV0sIHBCc3MtPkJzc2lkWzJdLAorCQlwQnNzLT5Cc3NpZFszXSwgcEJzcy0+QnNzaWRbNF0sIHBCc3MtPkJzc2lkWzVdKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUnhQb3dlclslbGRdLCBSc3NpICVkXG4iLCBJbmRleCwgcEJlYWNvblJlcG9ydC0+UnhQb3dlciAtIDI1NikpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkZyYW1lUmVwb3J0TGVuID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7CisKKwlwQmVhY29uUmVwb3J0LT5CZWFjb25JbnRlcnZhbCA9IHBCc3MtPkJlYWNvblBlcmlvZDsKKwlDT1BZX01BQ19BRERSKHBCZWFjb25SZXBvcnQtPkJTU0lELCBwRnJhbWUtPkhkci5BZGRyMyk7CisJTmRpc01vdmVNZW1vcnkocEJlYWNvblJlcG9ydC0+UGFyZW50VFNGLCBwU3JjLCA0KTsKKwlOZGlzTW92ZU1lbW9yeShwQmVhY29uUmVwb3J0LT5UYXJnZXRUU0YsICZwRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisJTmRpc01vdmVNZW1vcnkoJnBCZWFjb25SZXBvcnQtPlRhcmdldFRTRls0XSwgJnBFbGVtLT5UaW1lU3RhbXAudS5IaWdoUGFydCwgNCk7CisKKwkvLyA5LiBTa2lwIHRoZSBiZWFjb24gZnJhbWUgYW5kIG9mZnNldCB0byBzdGFydCBvZiBjYXBhYmlsaXR5aW5mbyBzaW5jZSB3ZSBhbHJlYWR5IHByb2Nlc3NlZCBjYXBhYmlsaXR5aW5mbworCXBTcmMgKz0gKFRJTUVTVEFNUF9MRU4gKyAyKTsKKwlwQmVhY29uUmVwb3J0LT5DYXBhYmlsaXR5SW5mbyA9ICooVVNIT1JUICopcFNyYzsKKworCS8vIDEwLiBQb2ludCB0byBzdGFydCBvZiBlbGVtZW50IElECisJcFNyYyArPSAyOworCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBTcmM7CisKKwkvLyAxMS4gU3RhcnQgcHJvY2VzcyBhbGwgdmFyaWFibGUgRWlkIG9heWxvYWQgYW5kIGFkZCB0aGUgYXBwcm9wcmlhdGUgdG8gdGhlIGZyYW1lIHJlcG9ydAorCXdoaWxlICgoKFBVQ0hBUikgcEVpZCArIHBFaWQtPkxlbiArIDEpIDwgKChQVUNIQVIpIHBGcmFtZSArIE1zZ0xlbikpCisJeworCQkvLyBPbmx5IGxpbWl0ZWQgRUlEIGFyZSByZXF1aXJlZCB0byByZXBvcnQgZm9yIENDWCAyLiBJdCBpbmNsdWRlcyBTU0lELCBTdXBwb3J0ZWQgcmF0ZSwKKwkJLy8gRkggcGFyYW1lbnRlciBzZXQsIERTIHBhcmFtZXRlciBzZXQsIENGIHBhcmFtZXRlciBzZXQsIElCU1MgcGFyYW1ldGVyIHNldCwKKwkJLy8gVElNIChyZXBvcnQgZmlyc3QgNCBieXRlcyBvbmx5LCByYWRpbyBtZWFzdXJlbWVudCBjYXBhYmlsaXR5CisJCXN3aXRjaCAocEVpZC0+RWlkKQorCQl7CisJCQljYXNlIElFX1NTSUQ6CisJCQljYXNlIElFX1NVUFBfUkFURVM6CisJCQljYXNlIElFX0ZIX1BBUk06CisJCQljYXNlIElFX0RTX1BBUk06CisJCQljYXNlIElFX0NGX1BBUk06CisJCQljYXNlIElFX0lCU1NfUEFSTToKKwkJCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEVpZCwgcEVpZC0+TGVuICsgMik7CisJCQkJcERlc3QgICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQlMZW5ndGggKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCWJyZWFrOworCisJCQljYXNlIElFX01FQVNVUkVNRU5UX0NBUEFCSUxJVFk6CisJCQkJLy8gU2luY2UgdGhpcyBJRSBpcyBkdXBsaWNhdGVkIHdpdGggV1BBIHNlY3VyaXR5IElFLCB3ZSBoYXMgdG8gZG8gc2FuaXR5IGNoZWNrIGJlZm9yZQorCQkJCS8vIHJlY29nbml6ZSBpdC4KKwkJCQkvLyAxLiBJdCBhbHNvIGhhcyBmaXhlZCA2IGJ5dGVzIElFIGxlbmd0aC4KKwkJCQlpZiAocEVpZC0+TGVuICE9IDYpCisJCQkJCWJyZWFrOworCQkJCS8vIDIuIENoZWNrIHRoZSBDaXNjbyBBaXJvbmV0IE9VSQorCQkJCWlmIChOZGlzRXF1YWxNZW1vcnkoQ0lTQ09fT1VJLCAocFNyYyArIDIpLCAzKSkKKwkJCQl7CisJCQkJCS8vIE1hdGNoZWQsIHRoaXMgaXMgd2hhdCB3ZSB3YW50CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwRWlkLCBwRWlkLT5MZW4gKyAyKTsKKwkJCQkJcERlc3QgICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJTGVuZ3RoICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfVElNOgorCQkJCWlmIChwRWlkLT5MZW4gPiA0KQorCQkJCXsKKwkJCQkJLy8gTWF5IHRydW5jYXRlIGFuZCByZXBvcnQgdGhlIGZpcnN0IDQgYnl0ZXMgb25seSwgd2l0aCB0aGUgZWlkICYgbGVuLCB0b3RhbCBzaG91bGQgYmUgNgorCQkJCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEVpZCwgNik7CisJCQkJCXBEZXN0ICArPSA2OworCQkJCQlMZW5ndGggKz0gNjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTmRpc01vdmVNZW1vcnkocERlc3QsIHBFaWQsIHBFaWQtPkxlbiArIDIpOworCQkJCQlwRGVzdCAgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCQlMZW5ndGggKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQkvLyAxMi4gTW92ZSB0byBuZXh0IGVsZW1lbnQgSUQKKwkJcFNyYyArPSAoMiArIHBFaWQtPkxlbik7CisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBTcmM7CisJfQorCisJLy8gMTMuIFVwZGF0ZSB0aGUgbGVuZ3RoIGluIHRoZSBoZWFkZXIsIG5vdCBpbmNsdWRlIEVJRCBhbmQgbGVuZ3RoCisJcFJlcG9ydC0+TGVuZ3RoID0gTGVuZ3RoIC0gNDsKKworCS8vIDE0LiBVcGRhdGUgdGhlIGZyYW1lIHJlcG9ydCBidWZmZXIgZGF0YSBsZW5ndGgKKwlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiArPSBMZW5ndGg7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRlIgbGVuID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCQlJbmRleAkJQ3VycmVudCBCU1NJRCBpbiBDQ1hCc3N0YWIgZW50cnkgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRDcmVhdGVCZWFjb25SZXBvcnRGcm9tQnNzVGFibGUoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkKQoreworCVBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVAlwUmVwb3J0OworCVBCRUFDT05fUkVQT1JUCQkJCXBCZWFjb25SZXBvcnQ7CisJVUNIQVIJCQkJCQlJbmRleCwgUmVxSWR4OworCVVTSE9SVAkJCQkJCUxlbmd0aDsKKwlQVUNIQVIJCQkJCQlwRGVzdDsKKwlQQlNTX0VOVFJZCQkJCQlwQnNzOworCisJLy8gMC4gc2V0dXAgYmFzZSBwb2ludGVyCisJUmVxSWR4ID0gcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4OworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc05yOyBJbmRleCsrKQorCXsKKwkJLy8gMS4gU2V0dXAgdGhlIGJ1ZmZlciBhZGRyZXNzIGZvciBjb3B5aW5nIHRoaXMgQlNTSUQgaW50byByZXBvcnRpbmcgZnJhbWUKKwkJLy8gICAgVGhlIG9mZnNldCBzaG91bGQgc3RhcnQgYWZ0ZXIgODAyLjExIGhlYWRlciBhbmQgcmVwb3J0IGZyYW1lIGhlYWRlci4KKwkJcERlc3QgID0gKFBVQ0hBUikgJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW3BBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuXTsKKwkJcEJzcyAgID0gKFBCU1NfRU5UUlkpICZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSW5kZXhdOworCQlMZW5ndGggPSAwOworCisJCS8vIDIuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGZpZWxkcworCQlwUmVwb3J0ICAgICAgICAgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKwkJcFJlcG9ydC0+RWlkICAgID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOworCQlwUmVwb3J0LT5MZW5ndGggPSAwOworCQlwUmVwb3J0LT5Ub2tlbiAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5SZXFFbGVtLlRva2VuOworCQlwUmVwb3J0LT5Nb2RlICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5SZXFFbGVtLk1vZGU7CisJCXBSZXBvcnQtPlR5cGUgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCQlMZW5ndGggICAgICAgICAgPSBzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpOworCQlwRGVzdCAgICAgICAgICArPSBzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpOworCisJCS8vIDMuIFN0YXJ0IHRoZSBiZWFjb24gcmVwb3J0IGZvcm1hdAorCQlwQmVhY29uUmVwb3J0ID0gKFBCRUFDT05fUkVQT1JUKSBwRGVzdDsKKwkJcERlc3QgICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKwkJTGVuZ3RoICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKworCQkvLyA0LiBDb3B5IENoYW5uZWwgbnVtYmVyCisJCXBCZWFjb25SZXBvcnQtPkNoYW5uZWwgICAgICAgID0gcEJzcy0+Q2hhbm5lbDsKKwkJcEJlYWNvblJlcG9ydC0+U3BhcmUgICAgICAgICAgPSAwOworCQlwQmVhY29uUmVwb3J0LT5EdXJhdGlvbiAgICAgICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtSZXFJZHhdLk1lYXN1cmVtZW50LkR1cmF0aW9uOworCQlwQmVhY29uUmVwb3J0LT5QaHlUeXBlICAgICAgICA9ICgocEJzcy0+U3VwUmF0ZUxlbitwQnNzLT5FeHRSYXRlTGVuID4gNCkgPyBQSFlfRVJQIDogUEhZX0RTUyk7CisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgICAgICAgID0gcEJzcy0+UnNzaSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisJCXBCZWFjb25SZXBvcnQtPkJlYWNvbkludGVydmFsID0gcEJzcy0+QmVhY29uUGVyaW9kOworCQlwQmVhY29uUmVwb3J0LT5DYXBhYmlsaXR5SW5mbyA9IHBCc3MtPkNhcGFiaWxpdHlJbmZvOworCQlDT1BZX01BQ19BRERSKHBCZWFjb25SZXBvcnQtPkJTU0lELCBwQnNzLT5Cc3NpZCk7CisJCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25SZXBvcnQtPlBhcmVudFRTRiwgcEJzcy0+UFRTRiwgNCk7CisJCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25SZXBvcnQtPlRhcmdldFRTRiwgcEJzcy0+VFRTRiwgOCk7CisKKwkJLy8gNS4gQ3JlYXRlIFNTSUQKKwkJKnBEZXN0KysgPSAweDAwOworCQkqcERlc3QrKyA9IHBCc3MtPlNzaWRMZW47CisJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwQnNzLT5Tc2lkLCBwQnNzLT5Tc2lkTGVuKTsKKwkJcERlc3QgICs9IHBCc3MtPlNzaWRMZW47CisJCUxlbmd0aCArPSAoMiArIHBCc3MtPlNzaWRMZW4pOworCisJCS8vIDYuIENyZWF0ZSBTdXBwb3J0UmF0ZXMKKwkJKnBEZXN0KysgPSAweDAxOworCQkqcERlc3QrKyA9IHBCc3MtPlN1cFJhdGVMZW47CisJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwQnNzLT5TdXBSYXRlLCBwQnNzLT5TdXBSYXRlTGVuKTsKKwkJcERlc3QgICs9IHBCc3MtPlN1cFJhdGVMZW47CisJCUxlbmd0aCArPSAoMiArIHBCc3MtPlN1cFJhdGVMZW4pOworCisJCS8vIDcuIERTIFBhcmFtZXRlcgorCQkqcERlc3QrKyA9IDB4MDM7CisJCSpwRGVzdCsrID0gMTsKKwkJKnBEZXN0KysgPSBwQnNzLT5DaGFubmVsOworCQlMZW5ndGggICs9IDM7CisKKwkJLy8gOC4gSUJTUyBwYXJhbWV0ZXIgaWYgcHJlc2VudHMKKwkJaWYgKHBCc3MtPkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCQl7CisJCQkqcERlc3QrKyA9IDB4MDY7CisJCQkqcERlc3QrKyA9IDI7CisJCQkqKFBVU0hPUlQpIHBEZXN0ID0gcEJzcy0+QXRpbVdpbjsKKwkJCXBEZXN0ICAgKz0gMjsKKwkJCUxlbmd0aCAgKz0gNDsKKwkJfQorCisJCS8vIDkuIFVwZGF0ZSBsZW5ndGggZmllbGQsIG5vdCBpbmNsdWRlIEVJRCBhbmQgbGVuZ3RoCisJCXBSZXBvcnQtPkxlbmd0aCA9IExlbmd0aCAtIDQ7CisKKwkJLy8gMTAuIFVwZGF0ZSB0b3RhbCBmcmFtZSBzaXplCisJCXBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuICs9IExlbmd0aDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9hc3NvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXNzb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMzYTg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXNzb2MuYwpAQCAtMCwwICsxLDIwNjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYXNzb2MuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4JCTIwMDQtOS0zCQlwb3J0aW5nIGZyb20gUlQyNTAwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCitVQ0hBUglDaXBoZXJXcGFUZW1wbGF0ZVtdID0geworCQkweGRkLCAJCQkJCS8vIFdQQSBJRQorCQkweDE2LAkJCQkJLy8gTGVuZ3RoCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMQkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworCitVQ0hBUglDaXBoZXJXcGEyVGVtcGxhdGVbXSA9IHsKKwkJMHgzMCwJCQkJCS8vIFJTTiBJRQorCQkweDE0LAkJCQkJLy8gTGVuZ3RoCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLy8gZ3JvdXAgY2lwaGVyLCBUS0lQCisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBwYWlyd2lzZQorCQkweDAwLCAweDBmLCAweGFjLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLy8gYXV0aGVudGljYXRpb24KKwkJMHgwMCwgMHgwMCwJCQkJLy8gUlNOIGNhcGFiaWxpdHkKKwkJfTsKKworVUNIQVIJQ2N4MkllSW5mb1tdID0geyAweDAwLCAweDQwLCAweDk2LCAweDAzLCAweDAyfTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lIGluaXQsIGluY2x1ZGluZyBzdGF0ZSB0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisJUGFyYW1ldGVyczoKKwkJUyAtIHBvaW50ZXIgdG8gdGhlIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzc29jU3RhdGVNYWNoaW5lSW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJU3RhdGVNYWNoaW5lSW5pdChTLCBUcmFucywgTUFYX0FTU09DX1NUQVRFLCBNQVhfQVNTT0NfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIEFTU09DX0lETEUsIEFTU09DX01BQ0hJTkVfQkFTRSk7CisKKwkvLyBmaXJzdCBjb2x1bW4KKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfSURMRSwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVBc3NvY1JlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9NTE1FX1JFQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVSZWFzc29jUmVxQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfSURMRSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVEaXNhc3NvY1JlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGlzYXNzb2NBY3Rpb24pOworCisJLy8gc2Vjb25kIGNvbHVtbgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRpc2Fzc29jQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0FTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQXNzb2NSc3BBY3Rpb24pOworCS8vCisJLy8gUGF0Y2ggM0NvbSBBUCBNT2RlOjNDUldFNDU0RzcyCisJLy8gV2Ugc2VuZCBBc3NvYyByZXF1ZXN0IGZyYW1lIHRvIHRoaXMgQVAsIGl0IGFsd2F5cyBzZW5kIFJlYXNzb2MgUnNwIG5vdCBBc3NvY2lhdGUgUnNwLgorCS8vCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9SRUFTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQXNzb2NSc3BBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX0FTU09DX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXNzb2NUaW1lb3V0QWN0aW9uKTsKKworCS8vIHRoaXJkIGNvbHVtbgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9BU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkFzc29jKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfUkVBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblJlYXNzb2MpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGlzYXNzb2NBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9SRUFTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUmVhc3NvY1JzcEFjdGlvbik7CisJLy8KKwkvLyBQYXRjaCwgQVAgZG9lc24ndCBzZW5kIFJlYXNzb2NpYXRlIFJzcCBmcmFtZSB0byBTdGF0aW9uLgorCS8vCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0FTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUmVhc3NvY1JzcEFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9SRUFTU09DX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpUmVhc3NvY1RpbWVvdXRBY3Rpb24pOworCisJLy8gZm91cnRoIGNvbHVtbgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRpc2Fzc29jQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKURpc2Fzc29jVGltZW91dEFjdGlvbik7CisKKwkvLyBpbml0aWFsaXplIHRoZSB0aW1lcgorCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKwlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihSZWFzc29jVGltZW91dCksIHBBZCwgRkFMU0UpOworCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihEaXNhc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlBc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgYXNzb2NpYXRpb24gdGltZW91dCwgdGhpcyBmdW5jdGlvbgorCQl3aWxsIGJlIGNhbGxlZCBhbmQgaXQgd2lsbCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKKwlQYXJhbWV0ZXJzOgorCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNzb2NUaW1lb3V0KElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwkJCQkgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCQkJCSBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJCQkJIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm47CisKKwlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19USU1FT1VULCAwLCBOVUxMKTsKKwlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUmVhc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgcmVhc3NvY2lhdGlvbiB0aW1lb3V0LCB0aGlzCisJCWZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKKwlQYXJhbWV0ZXJzOgorCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUmVhc3NvY1RpbWVvdXQoSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCQkJCQlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJCQkJCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwkJCQkJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUiAqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybjsKKworCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfVElNRU9VVCwgMCwgTlVMTCk7CisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCURpc2Fzc29jaWF0aW9uIHRpbWVvdXQgcHJvY2VkdXJlLiBBZnRlciBkaXNhc3NvY2lhdGlvbiB0aW1lb3V0LCB0aGlzCisJCWZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKKwlQYXJhbWV0ZXJzOgorCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRGlzYXNzb2NUaW1lb3V0KElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwkJCQkJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCQkJCQlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJCQkJCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm47CisKKwlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAwLCBOVUxMKTsKKwlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJbWxtZSBhc3NvYyByZXEgaGFuZGxpbmcgcHJvY2VkdXJlCisJUGFyYW1ldGVyczoKKwkJQWRhcHRlciAtIEFkYXB0ZXIgcG9pbnRlcgorCQlFbGVtIC0gTUxNRSBRdWV1ZSBFbGVtZW50CisJUHJlOgorCQl0aGUgc3RhdGlvbiBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIGFuZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgY29uZmlnCisJCQktIyBTU0lECisJCQktIyBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHRoZWlyIGxlbmd0aAorCQkJLSMgbGlzdGVuIGludGVydmFsIChBZGFwdGVyLT5TdGFDZmcuZGVmYXVsdF9saXN0ZW5fY291bnQpCisJCQktIyBUcmFuc21pdCBwb3dlciAgKEFkYXB0ZXItPlN0YUNmZy50eF9wb3dlcikKKwlQb3N0ICA6CisJCS0jIEFuIGFzc29jaWF0aW9uIHJlcXVlc3QgZnJhbWUgaXMgZ2VuZXJhdGVkIGFuZCBzZW50IHRvIHRoZSBhaXIKKwkJLSMgQXNzb2NpYXRpb24gdGltZXIgc3RhcnRzCisJCS0jIEFzc29jaWF0aW9uIHN0YXRlIC0+IEFTU09DX1dBSVRfUlNQCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUFzc29jUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUgkJCUFwQWRkcls2XTsKKwlIRUFERVJfODAyXzExCUFzc29jSGRyOworCVVDSEFSCQkJQ2N4MkxlbiA9IDU7CisJVUNIQVIJCQlXbWVJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDB4MDcsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDB9OworCVVTSE9SVAkJCUxpc3RlbkludHY7CisJVUxPTkcJCQlUaW1lb3V0OworCVVTSE9SVAkJCUNhcGFiaWxpdHlJbmZvOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUwkJTlN0YXR1czsKKwlVTE9ORwkJCUZyYW1lTGVuID0gMDsKKwlVTE9ORwkJCXRtcDsKKwlVU0hPUlQJCQlWYXJJZXNPZmZzZXQ7CisJVUNIQVIJCQlDa2lwRmxhZzsKKwlVQ0hBUgkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlcltDS0lQX05FR09USUFUSU9OX0xFTkdUSF07CisJVUNIQVIJCQlBaXJvbmV0Q2tpcEllID0gSUVfQUlST05FVF9DS0lQOworCVVDSEFSCQkJQWlyb25ldENraXBMZW4gPSBDS0lQX05FR09USUFUSU9OX0xFTkdUSDsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NJRSA9IElFX0FJUk9ORVRfSVBBRERSRVNTOworCVVDSEFSCQkJQWlyb25ldElQQWRkcmVzc0xlbiA9IEFJUk9ORVRfSVBBRERSRVNTX0xFTkdUSDsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NCdWZmZXJbQUlST05FVF9JUEFERFJFU1NfTEVOR1RIXSA9IHsweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwfTsKKwlVU0hPUlQJCQlTdGF0dXM7CisKKwkvLyBCbG9jayBhbGwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QKKwlpZiAocEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPT0gVFJVRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQmxvY2sgQXNzb2MgcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QhXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKwkvLyBjaGVjayBzYW5pdHkgZmlyc3QKKwllbHNlIGlmIChNbG1lQXNzb2NSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQXBBZGRyLCAmQ2FwYWJpbGl0eUluZm8sICZUaW1lb3V0LCAmTGlzdGVuSW50dikpCisJeworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQXBBZGRyKTsKKworCQkvLyBHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOworCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFTU09DIC0gTWxtZUFzc29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIEFkZCBieSBKYW1lcyAwMy8wNi8yNworCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKwkJLy8gQXNzb2NpYXRpb24gZG9uJ3QgbmVlZCB0byByZXBvcnQgTUFDIGFkZHJlc3MKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLkF2YWlsYWJsZVJlcXVlc3RGaXhlZElFcyA9CisJCQlORElTXzgwMl8xMV9BSV9SRVFGSV9DQVBBQklMSVRJRVMgfCBORElTXzgwMl8xMV9BSV9SRVFGSV9MSVNURU5JTlRFUlZBTDsKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5DYXBhYmlsaXRpZXMgPSBDYXBhYmlsaXR5SW5mbzsKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5MaXN0ZW5JbnRlcnZhbCA9IExpc3RlbkludHY7CisJCS8vIE9ubHkgcmVhc3NvY2lhdGUgbmVlZCB0aGlzCisJCS8vQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5Bc3NvY0luZm8uUmVxdWVzdEZpeGVkSUVzLkN1cnJlbnRBUEFkZHJlc3MsIEFwQWRkcik7CisJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5PZmZzZXRSZXF1ZXN0SUVzID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMsIE1BWF9WSUVfTEVOKTsKKwkJLy8gRmlyc3QgYWRkIFNTSUQKKwkJVmFySWVzT2Zmc2V0ID0gMDsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmU3NpZEllLCAxKTsKKwkJVmFySWVzT2Zmc2V0ICs9IDE7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJnBBZC0+TWxtZUF1eC5Tc2lkTGVuLCAxKTsKKwkJVmFySWVzT2Zmc2V0ICs9IDE7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+TWxtZUF1eC5Tc2lkTGVuOworCisJCS8vIFNlY29uZCBhZGQgU3VwcG9ydGVkIHJhdGVzCisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJlN1cFJhdGVJZSwgMSk7CisJCVZhckllc09mZnNldCArPSAxOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwgMSk7CisJCVZhckllc09mZnNldCArPSAxOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7CisJCVZhckllc09mZnNldCArPSBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbjsKKwkJLy8gRW5kIEFkZCBieSBKYW1lcworCisgICAgICAgIGlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAmJgorICAgICAgICAgICAgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IFRSVUUpKQorICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm8gfD0gMHgwMTAwOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gU2VuZCBBU1NPQyByZXF1ZXN0Li4uXG4iKSk7CisJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmQXNzb2NIZHIsIFNVQlRZUEVfQVNTT0NfUkVRLCAwLCBBcEFkZHIsIEFwQWRkcik7CisKKwkJLy8gQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksCSZBc3NvY0hkciwKKwkJCQkJCSAgMiwJCQkJCQkmQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkgIDIsCQkJCQkJJkxpc3RlbkludHYsCisJCQkJCQkgIDEsCQkJCQkJJlNzaWRJZSwKKwkJCQkJCSAgMSwJCQkJCQkmcEFkLT5NbG1lQXV4LlNzaWRMZW4sCisJCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCAJcEFkLT5NbG1lQXV4LlNzaWQsCisJCQkJCQkgIDEsCQkJCQkJJlN1cFJhdGVJZSwKKwkJCQkJCSAgMSwJCQkJCQkmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCisJCQkJCQkgIHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCAgcEFkLT5NbG1lQXV4LlN1cFJhdGUsCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkKKwkJeworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAmdG1wLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwgIHBBZC0+TWxtZUF1eC5FeHRSYXRlLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJLy8gSFQKKwkJaWYgKChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID4gMCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJCXsKKwkJCVVMT05HIFRtcExlbjsKKwkJCVVDSEFSIEh0TGVuOworCQkJVUNIQVIgQlJPQURDT01bNF0gPSB7MHgwLCAweDkwLCAweDRjLCAweDMzfTsKKwkJCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJQcmVOSHQgPT0gVFJVRSkKKwkJCXsKKwkJCQlIdExlbiA9IFNJWkVfSFRfQ0FQX0lFICsgNDsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmV3BhSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCSAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCUk9BRENPTVswXSwKKwkJCQkJCQkgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwgICAgICAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQl9CisJCQllbHNlCisJCQl7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkgICAgICAgIEhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5VG1wOworI2VuZGlmCisKKyNpZm5kZWYgUlRfQklHX0VORElBTgorCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eVRtcCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbik7CisgICAgICAgIAkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisgICAgICAgIAkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSk7CisKKyAgICAgICAgCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgJlRtcExlbiwKKyAgICAgICAgCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0Q2FwSWUsCisgICAgICAgIAkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAorICAgICAgICAJCQkJCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwmSHRDYXBhYmlsaXR5VG1wLAorICAgICAgICAJCQkJCQkJRU5EX09GX0FSR1MpOworI2VuZGlmCisJCQl9CisJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLyBhZGQgUmFsaW5rIHByb3ByaWV0YXJ5IElFIHRvIGluZm9ybSBBUCB0aGlzIFNUQSBpcyBnb2luZyB0byB1c2UgQUdHUkVHQVRJT04gb3IgUElHR1ktQkFDSytBR0dSRUdBVElPTgorCQkvLyBDYXNlIEk6IChBZ2dyZWdhdGlvbiArIFBpZ2d5LUJhY2spCisJCS8vIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQKKwkJLy8gMi4gTWFjIHN1cHBvcnQgcGlnZ3ktYmFjaworCQkvLyAzLiBBUCBhbm5vdWNlcyBpdCdzIFBJR0dZLUJBQ0srQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04KKwkJLy8gQ2FzZSBJSTogKEFnZ3JlZ2F0aW9uKQorCQkvLyAxLiB1c2VyIGVuYWJsZSBhZ2dyZWdhdGlvbiwgQU5ECisJCS8vIDIuIEFQIGFubm91Y2VzIGl0J3MgQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpCisJCXsKKwkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpICYmICgocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAzKSA9PSAzKSkKKwkJCXsKKwkJCQlVTE9ORyBUbXBMZW47CisJCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLCAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFsaW5rSWUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICYgMHgwMDAwMDAwMSkKKwkJCXsKKwkJCQlVTE9ORyBUbXBMZW47CisJCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfTsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLCAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFsaW5rSWUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVVMT05HIFRtcExlbjsKKwkJCVVDSEFSIFJhbGlua0llWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLAkJICZUbXBMZW4sCisJCQkJCQkJICA5LAkJCQkJCSBSYWxpbmtJZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJfQorCisJCWlmIChwQWQtPk1sbWVBdXguQVBFZGNhUGFybS5iVmFsaWQpCisJCXsKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKQorCQkJeworCQkJCVFCU1NfU1RBX0lORk9fUEFSTSBRb3NJbmZvOworCisJCQkJTmRpc1plcm9NZW1vcnkoJlFvc0luZm8sIHNpemVvZihRQlNTX1NUQV9JTkZPX1BBUk0pKTsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX0JFID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CRTsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX0JLID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSzsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX1ZJID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSTsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX1ZPID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WTzsKKwkJCQlRb3NJbmZvLk1heFNQTGVuZ3RoID0gcEFkLT5Db21tb25DZmcuTWF4U1BMZW5ndGg7CisJCQkJV21lSWVbOF0gfD0gKihQVUNIQVIpJlFvc0luZm87CisJCQl9CisJCQllbHNlCisJCQl7CisgICAgICAgICAgICAgICAgLy8gVGhlIFBhcmFtZXRlciBTZXQgQ291bnQgaXMgc2V0IHRvIKGnMKGoIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IGZyYW1lcworICAgICAgICAgICAgICAgIC8vIFdtZUllWzhdIHw9IChwQWQtPk1sbWVBdXguQVBFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQgJiAweDBmKTsKKwkJCX0KKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAmdG1wLAorCQkJCQkJCSAgOSwgICAgICAgICAgICAgICAgICAgICAgICAmV21lSWVbMF0sCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworCQkvLworCQkvLyBMZXQgV1BBKCMyMjEpIEVsZW1lbnQgSUQgb24gdGhlIGVuZCBvZiB0aGlzIGFzc29jaWF0aW9uIGZyYW1lLgorCQkvLyBPdGhlcndpc2Ugc29tZSBBUCB3aWxsIGZhaWwgb24gcGFyc2luZyBFbGVtZW50IElEIGFuZCBzZXQgc3RhdHVzIGZhaWwgb24gQXNzb2MgUnNwLgorCQkvLyBGb3IgZXhhbXBsZTogUHV0IFZlbmRvciBTcGVjaWZpYyBJRSBvbiB0aGUgZnJvbnQgb2YgV1BBIElFLgorCQkvLyBUaGlzIGhhcHBlbnMgb24gQVAgKE1vZGVsIE5vOkxpbmtzeXMgV1JLNTRHKQorCQkvLworCQlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgfHwKKyAgICAgICAgICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKKwkJCSkKKyAgICAgICAgICAgICkKKwkJeworCQkJVUNIQVIgUlNOSWUgPSBJRV9XUEE7CisKKwkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgfHwKKyAgICAgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikpCisJCQl7CisJCQkJUlNOSWUgPSBJRV9XUEEyOworCQkJfQorCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZmRlZiBTSU9DU0lXR0VOSUUKKwkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKKyNlbmRpZiAvLyBTSU9DU0lXR0VOSUUgLy8KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBCU1MwKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFdQQSBQTUsgY2FjaGUgbGlzdAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCisJCQl7CisJCQkgICAgSU5UICAgICBpZHg7CisgICAgICAgICAgICAgICAgQk9PTEVBTiBGb3VuZFBNSyA9IEZBTFNFOworCQkJCS8vIFNlYXJjaCBjaGNoZWQgUE1LSUQsIGFwcGVuZCBpdCBpZiBleGlzdGVkCisJCQkJZm9yIChpZHggPSAwOyBpZHggPCBQTUtJRF9OTzsgaWR4KyspCisJCQkJeworCQkJCQlpZiAoTmRpc0VxdWFsTWVtb3J5KEFwQWRkciwgJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uQlNTSUQsIDYpKQorCQkJCQl7CisJCQkJCQlGb3VuZFBNSyA9IFRSVUU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChGb3VuZFBNSykKKwkJCQl7CisJCQkJCS8vIFNldCBQTUsgbnVtYmVyCisJCQkJCSooUFVTSE9SVCkgJnBBZC0+U3RhQ2ZnLlJTTl9JRVtwQWQtPlN0YUNmZy5SU05JRV9MZW5dID0gMTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlJTTl9JRVtwQWQtPlN0YUNmZy5SU05JRV9MZW4gKyAyXSwgJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uUE1LSUQsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuICs9IDE4OworCQkJCX0KKwkJCX0KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZkZWYgU0lPQ1NJV0dFTklFCisJCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IDEpCisJCQl7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAJCSZ0bXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIAlwQWQtPlN0YUNmZy5SU05JRV9MZW4sCQkJcEFkLT5TdGFDZmcuUlNOX0lFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJRU5EX09GX0FSR1MpOworCQkJfQorCQkJZWxzZQorI2VuZGlmCisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgIAkJJnRtcCwKKwkJCQkgICAgICAgICAgICAgIAkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUlNOSWUsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIAkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUNmZy5SU05JRV9MZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgIAlwQWQtPlN0YUNmZy5SU05JRV9MZW4sCQkJcEFkLT5TdGFDZmcuUlNOX0lFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJRU5EX09GX0FSR1MpOworCQkJfQorCisJCQlGcmFtZUxlbiArPSB0bXA7CisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmZGVmIFNJT0NTSVdHRU5JRQorCQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSAxKQorI2VuZGlmCisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJCXsKKwkgICAgICAgICAgICAvLyBBcHBlbmQgVmFyaWFibGUgSUUKKwkgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZSU05JZSwgMSk7CisJICAgICAgICAgICAgVmFySWVzT2Zmc2V0ICs9IDE7CisJICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmcEFkLT5TdGFDZmcuUlNOSUVfTGVuLCAxKTsKKwkgICAgICAgICAgICBWYXJJZXNPZmZzZXQgKz0gMTsKKwkJCX0KKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgcEFkLT5TdGFDZmcuUlNOX0lFLCBwQWQtPlN0YUNmZy5SU05JRV9MZW4pOworCQkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKworCQkJLy8gU2V0IFZhcmlhYmxlIElFcyBMZW5ndGgKKwkJCXBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuID0gVmFySWVzT2Zmc2V0OworCQl9CisKKwkJLy8gV2UgaGF2ZSB1cGRhdGUgdGhhdCBhdCBQZWVyQmVhY29uQXRKb2luUmVxdWVzdCgpCisJCUNraXBGbGFnID0gcEFkLT5TdGFDZmcuQ2tpcEZsYWc7CisJCWlmIChDa2lwRmxhZyAhPSAwKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShDa2lwTmVnb3RpYXRpb25CdWZmZXIsIENLSVBfTkVHT1RJQVRJT05fTEVOR1RIKTsKKwkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlclsyXSA9IDB4NjY7CisJCQkvLyBNYWtlIGl0IHRyeSBLUCAmIE1JQywgc2luY2Ugd2UgaGF2ZSB0byBmb2xsb3cgdGhlIHJlc3VsdCBmcm9tIEFzc29jUnNwCisJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbOF0gPSAweDE4OworCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyW0NLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMV0gPSAweDIyOworCQkJQ2tpcEZsYWcgPSAweDE4OworCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sIAkmdG1wLAorCQkJCQkJMSwJCQkJCQkgIAkJJkFpcm9uZXRDa2lwSWUsCisJCQkJCQkxLAkJCQkJCSAgCQkmQWlyb25ldENraXBMZW4sCisJCQkJCQlBaXJvbmV0Q2tpcExlbiwgCQkgIAkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKwkJLy8gQWRkIENDWCB2MiByZXF1ZXN0IGlmIENDWDIgYWRtaW4gc3RhdGUgaXMgb24KKwkJaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuRW5hYmxlID09IDEpCisJCXsKKworCQkJLy8KKwkJCS8vIEFkZCBBaXJvbmV0SVBBZGRyZXNzSUUgZm9yIENpc2NvIENDWCAyLlgKKwkJCS8vIEFkZCBDQ1ggVmVyc2lvbgorCQkJLy8KKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCTEsCQkJCQkJCSZBaXJvbmV0SVBBZGRyZXNzSUUsCisJCQkJCQkxLAkJCQkJCQkmQWlyb25ldElQQWRkcmVzc0xlbiwKKwkJCQkJCUFpcm9uZXRJUEFkZHJlc3NMZW4sCQlBaXJvbmV0SVBBZGRyZXNzQnVmZmVyLAorCQkJCQkJMSwJCQkJCQkJJkNjeDJJZSwKKwkJCQkJCTEsCQkJCQkJCSZDY3gyTGVuLAorCQkJCQkJQ2N4MkxlbiwJCQkJICAgIENjeDJJZUluZm8sCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCS8vCisJCQkvLyBBZGQgQ2lwaGVyU3VpdGUgQ0NLTSBvciBMZWFwVGtpcCBpZiBzZXR0aW5nLgorCQkJLy8KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSkKKwkJCXsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQlDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbiwJCUNpcGhlclN1aXRlQ2lzY29DQ0tNLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKworCQkJCS8vIFRoaXJkIGFkZCBSU04KKwkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsIENpcGhlclN1aXRlQ2lzY29DQ0tNLCBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbik7IC8vU2F2ZSBDaXBoZXJTdWl0ZQorCQkJCVZhckllc09mZnNldCArPSBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKSAmJiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpKQorCQkJeworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCUNpcGhlclN1aXRlQ0NYVGtpcExlbiwJICAgIENpcGhlclN1aXRlQ0NYVGtpcCwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCQkvLyBUaGlyZCBhZGQgUlNOCisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCBDaXBoZXJTdWl0ZUNDWFRraXAsIENpcGhlclN1aXRlQ0NYVGtpcExlbik7CisJCQkJVmFySWVzT2Zmc2V0ICs9IENpcGhlclN1aXRlQ0NYVGtpcExlbjsKKwkJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKworCQkJLy8gQWRkIGJ5IEphbWVzIDAzLzA2LzI3CisJCQkvLyBTZXQgVmFyaWFibGUgSUVzIExlbmd0aAorCQkJcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPSBWYXJJZXNPZmZzZXQ7CisJCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uUmVxdWVzdElFTGVuZ3RoID0gVmFySWVzT2Zmc2V0OworCisJCQkvLyBPZmZzZXRSZXNwb25zZUlFcyBmb2xsb3cgUmVxVmFySUUKKwkJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5PZmZzZXRSZXNwb25zZUlFcyA9IHNpemVvZihORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTikgKyBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbjsKKwkJCS8vIEVuZCBBZGQgYnkgSmFtZXMKKwkJfQorCisKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwgVGltZW91dCk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfV0FJVF9SU1A7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVNTT0MgLSBNbG1lQXNzb2NSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkLiBCVUchISEhISEgXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCW1sbWUgcmVhc3NvYyByZXEgaGFuZGxpbmcgcHJvY2VkdXJlCisJUGFyYW1ldGVyczoKKwkJRWxlbSAtCisJUHJlOgorCQktIyBTU0lEICAoQWRhcHRlci0+U3RhQ2ZnLnNzaWRbXSkKKwkJLSMgQlNTSUQgKEFQIGFkZHJlc3MsIEFkYXB0ZXItPlN0YUNmZy5ic3NpZCkKKwkJLSMgU3VwcG9ydGVkIHJhdGVzIChBZGFwdGVyLT5TdGFDZmcuc3VwcG9ydGVkX3JhdGVzW10pCisJCS0jIFN1cHBvcnRlZCByYXRlcyBsZW5ndGggKEFkYXB0ZXItPlN0YUNmZy5zdXBwb3J0ZWRfcmF0ZXNfbGVuKQorCQktIyBUeCBwb3dlciAoQWRhcHRlci0+U3RhQ2ZnLnR4X3Bvd2VyKQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVSZWFzc29jUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUgkJCUFwQWRkcls2XTsKKwlIRUFERVJfODAyXzExCVJlYXNzb2NIZHI7CisJVUNIQVIJCQlDY3gyTGVuID0gNTsKKwlVQ0hBUgkJCVdtZUllWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgMHgwNywgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMH07CisJVVNIT1JUCQkJQ2FwYWJpbGl0eUluZm8sIExpc3RlbkludHY7CisJVUxPTkcJCQlUaW1lb3V0OworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlORElTX1NUQVRVUwkJTlN0YXR1czsKKwlVTE9ORwkJCXRtcDsKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKy8vQ0NYIDIuWAorI2lmZGVmIExFQVBfU1VQUE9SVAorCVVDSEFSCQkJQ2tpcEZsYWc7CisJVUNIQVIJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbQ0tJUF9ORUdPVElBVElPTl9MRU5HVEhdOworCVVDSEFSCQkJQWlyb25ldENraXBJZSA9IElFX0FJUk9ORVRfQ0tJUDsKKwlVQ0hBUgkJCUFpcm9uZXRDa2lwTGVuID0gQ0tJUF9ORUdPVElBVElPTl9MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzSUUgPSBJRV9BSVJPTkVUX0lQQUREUkVTUzsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NMZW4gPSBBSVJPTkVUX0lQQUREUkVTU19MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzQnVmZmVyW0FJUk9ORVRfSVBBRERSRVNTX0xFTkdUSF0gPSB7MHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMH07CisJVUNIQVIJCQlBaXJvbmV0Q0NLTVJlYXNzb2NJRSA9IElFX0FJUk9ORVRfQ0NLTVJFQVNTT0M7CisJVUNIQVIJCQlBaXJvbmV0Q0NLTVJlYXNzb2NMZW4gPSBBSVJPTkVUX0NDS01SRUFTU09DX0xFTkdUSDsKKwlVQ0hBUgkJCUFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlcltBSVJPTkVUX0NDS01SRUFTU09DX0xFTkdUSF07CisJVUNIQVIJCQlBaXJvbmV0T1VJW10gPSB7MHgwMCwgMHg0MCwgMHg5NiwgMHgwMH07CisJVUNIQVIJCQlNSUNNTlsxNl07CisJVUNIQVIJCQlDYWxjTWljQnVmZmVyWzgwXTsKKwlVTE9ORwkJCUNhbGNNaWNCdWZmZXJMZW4gPSAwOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCVVTSE9SVAkJCVN0YXR1czsKKworCS8vIEJsb2NrIGFsbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlvZAorCWlmIChwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9PSBUUlVFKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBCbG9jayBSZUFzc29jIHJlcXVlc3QgZHVybmluZyBXUEEgYmxvY2sgcGVyaW9kIVxuIikpOworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKwkvLyB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGFzc29jaWF0aW9uCisJZWxzZSBpZihNbG1lQXNzb2NSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQXBBZGRyLCAmQ2FwYWJpbGl0eUluZm8sICZUaW1lb3V0LCAmTGlzdGVuSW50dikpCisJeworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFTU09DIC0gTWxtZVJlYXNzb2NSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQkJU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJCQlyZXR1cm47CisJCX0KKworCQlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQXBBZGRyKTsKKworCQkvLyBtYWtlIGZyYW1lLCB1c2UgYnNzaWQgYXMgdGhlIEFQIGFkZHJlc3M/PworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFNlbmQgUkUtQVNTT0MgcmVxdWVzdC4uLlxuIikpOworCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJlJlYXNzb2NIZHIsIFNVQlRZUEVfUkVBU1NPQ19SRVEsIDAsIEFwQWRkciwgQXBBZGRyKTsKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgJlJlYXNzb2NIZHIsCisJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICZMaXN0ZW5JbnR2LAorCQkJCQkJICBNQUNfQUREUl9MRU4sICAgICAgICAgICAgIEFwQWRkciwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguU3NpZExlbiwKKwkJCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWRMZW4sICAgICBwQWQtPk1sbWVBdXguU3NpZCwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJICAxLAkJCQkJCSZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKKwkJCQkJCSAgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sICBwQWQtPk1sbWVBdXguU3VwUmF0ZSwKKwkJCQkJCSAgRU5EX09GX0FSR1MpOworCisJCWlmIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiAhPSAwKQorCQl7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAmdG1wLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwKKwkJCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAkgICAgcEFkLT5NbG1lQXV4LkV4dFJhdGUsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworCQlpZiAocEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYlZhbGlkKQorCQl7CisJCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSkKKwkJCXsKKwkJCQlRQlNTX1NUQV9JTkZPX1BBUk0gUW9zSW5mbzsKKworCQkJCU5kaXNaZXJvTWVtb3J5KCZRb3NJbmZvLCBzaXplb2YoUUJTU19TVEFfSU5GT19QQVJNKSk7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19CRSA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkU7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19CSyA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQks7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19WSSA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkk7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19WTyA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk87CisJCQkJUW9zSW5mby5NYXhTUExlbmd0aCA9IHBBZC0+Q29tbW9uQ2ZnLk1heFNQTGVuZ3RoOworCQkJCVdtZUllWzhdIHw9ICooUFVDSEFSKSZRb3NJbmZvOworCQkJfQorCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICZ0bXAsCisJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICZXbWVJZVswXSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IHRtcDsKKwkJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCS8vIEhUCisJCWlmICgocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA+IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQl7CisJCQlVTE9ORyBUbXBMZW47CisJCQlVQ0hBUiBIdExlbjsKKwkJCVVDSEFSIEJST0FEQ09NWzRdID0gezB4MCwgMHg5MCwgMHg0YywgMHgzM307CisJCQlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iUHJlTkh0ID09IFRSVUUpCisJCQl7CisJCQkJSHRMZW4gPSBTSVpFX0hUX0NBUF9JRSArIDQ7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdExlbiwKKwkJCQkJCQkgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4sICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCX0KKwkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCS8vIGFkZCBSYWxpbmsgcHJvcHJpZXRhcnkgSUUgdG8gaW5mb3JtIEFQIHRoaXMgU1RBIGlzIGdvaW5nIHRvIHVzZSBBR0dSRUdBVElPTiBvciBQSUdHWS1CQUNLK0FHR1JFR0FUSU9OCisJCS8vIENhc2UgSTogKEFnZ3JlZ2F0aW9uICsgUGlnZ3ktQmFjaykKKwkJLy8gMS4gdXNlciBlbmFibGUgYWdncmVnYXRpb24sIEFORAorCQkvLyAyLiBNYWMgc3VwcG9ydCBwaWdneS1iYWNrCisJCS8vIDMuIEFQIGFubm91Y2VzIGl0J3MgUElHR1ktQkFDSytBR0dSRUdBVElPTi1jYXBhYmxlIGluIEJFQUNPTgorCQkvLyBDYXNlIElJOiAoQWdncmVnYXRpb24pCisJCS8vIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQKKwkJLy8gMi4gQVAgYW5ub3VjZXMgaXQncyBBR0dSRUdBVElPTi1jYXBhYmxlIGluIEJFQUNPTgorCQlpZiAocEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSkKKwkJeworCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iUGlnZ3lCYWNrQ2FwYWJsZSkgJiYgKChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpKQorCQkJeworCQkJCVVMT05HIFRtcExlbjsKKwkJCQlVQ0hBUiBSYWxpbmtJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDcsIDB4MDAsIDB4MGMsIDB4NDMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIrRnJhbWVMZW4sICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCQkgIDksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWxpbmtJZSwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAxKQorCQkJeworCQkJCVVMT05HIFRtcExlbjsKKwkJCQlVQ0hBUiBSYWxpbmtJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDcsIDB4MDAsIDB4MGMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9OworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIrRnJhbWVMZW4sICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCQkgIDksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWxpbmtJZSwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJVUxPTkcgVG1wTGVuOworCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDA0LCAweDAwLCAweDAwLCAweDAwfTsKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIrRnJhbWVMZW4sCQkgJlRtcExlbiwKKwkJCQkJCQkgIDksCQkJCQkJIFJhbGlua0llLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQl9CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCXsKKwkJCUNraXBGbGFnID0gcEFkLT5TdGFDZmcuQ2tpcEZsYWc7CS8vIFdlIGhhdmUgdXBkYXRlIHRoYXQgYXQgUGVlckJlYWNvbkF0Sm9pblJlcXVlc3QoKQorCQkJaWYgKENraXBGbGFnICE9IDApCisJCQl7CisJCQkJTmRpc1plcm9NZW1vcnkoQ2tpcE5lZ290aWF0aW9uQnVmZmVyLCBDS0lQX05FR09USUFUSU9OX0xFTkdUSCk7CisJCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyWzJdID0gMHg2NjsKKwkJCQkvLyBNYWtlIGl0IHRyeSBLUCAmIE1JQywgc2luY2Ugd2UgaGF2ZSB0byBmb2xsb3cgdGhlIHJlc3VsdCBmcm9tIEFzc29jUnNwCisJCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyWzhdID0gMHgxODsKKwkJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbQ0tJUF9ORUdPVElBVElPTl9MRU5HVEggLSAxXSA9IDB4MjI7CisKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJnRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFpcm9uZXRDa2lwSWUsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0Q2tpcExlbiwKKwkJCQkJCQkJCUFpcm9uZXRDa2lwTGVuLCAgICAgICAgICAgICAgICAgQ2tpcE5lZ290aWF0aW9uQnVmZmVyLAorCQkJCQkJCQkJRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKwkJCX0KKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAorCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFpcm9uZXRJUEFkZHJlc3NJRSwKKwkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0SVBBZGRyZXNzTGVuLAorCQkJCQkJCUFpcm9uZXRJUEFkZHJlc3NMZW4sICAgICAgICAgICAgQWlyb25ldElQQWRkcmVzc0J1ZmZlciwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCS8vCisJCQkvLyBUaGUgUk4gaXMgaW5jcmVtZW50ZWQgYmVmb3JlIGVhY2ggcmVhc3NvY2lhdGlvbiByZXF1ZXN0LgorCQkJLy8KKwkJCXBBZC0+U3RhQ2ZnLkNDS01STisrOworCQkJLy8KKwkJCS8vIENhbGN1bGF0ZSBNSUMgPSBobWFjLW1kNShrcmssIFNUQS1JRHxCU1NJRHxSU05JRXxUU0Z8Uk4pOworCQkJLy8KKwkJCUNPUFlfTUFDX0FERFIoQ2FsY01pY0J1ZmZlciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJCQlDYWxjTWljQnVmZmVyTGVuID0gTUFDX0FERFJfTEVOOworCQkJQ09QWV9NQUNfQUREUihDYWxjTWljQnVmZmVyICsgQ2FsY01pY0J1ZmZlckxlbiwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKwkJCUNhbGNNaWNCdWZmZXJMZW4gKz0gTUFDX0FERFJfTEVOOworCQkJTmRpc01vdmVNZW1vcnkoQ2FsY01pY0J1ZmZlciArIENhbGNNaWNCdWZmZXJMZW4sIENpcGhlclN1aXRlQ2lzY29DQ0tNLCBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbik7CisJCQlDYWxjTWljQnVmZmVyTGVuICs9IENpcGhlclN1aXRlQ2lzY29DQ0tNTGVuOworCQkJTmRpc01vdmVNZW1vcnkoQ2FsY01pY0J1ZmZlciArIENhbGNNaWNCdWZmZXJMZW4sIChQVUNIQVIpICZwQWQtPlN0YUNmZy5DQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wLCBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCkpOworCQkJQ2FsY01pY0J1ZmZlckxlbiArPSBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCk7CisJCQlOZGlzTW92ZU1lbW9yeShDYWxjTWljQnVmZmVyICsgQ2FsY01pY0J1ZmZlckxlbiwgKFBVQ0hBUikmcEFkLT5TdGFDZmcuQ0NLTVJOLCBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTVJOKSk7CisJCQlDYWxjTWljQnVmZmVyTGVuICs9IHNpemVvZihwQWQtPlN0YUNmZy5DQ0tNUk4pOworCQkJaG1hY19tZDUocEFkLT5TdGFDZmcuS1JLLCBMRU5fRUFQX01JQ0ssIENhbGNNaWNCdWZmZXIsIENhbGNNaWNCdWZmZXJMZW4sIE1JQ01OKTsKKworCQkJLy8KKwkJCS8vIGZpbGwgdXAgQ0NLTSByZWFzc29jaWF0aW9uIHJlcXVlc3QgZWxlbWVudAorCQkJLy8KKwkJCU5kaXNNb3ZlTWVtb3J5KEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciwgQWlyb25ldE9VSSwgNCk7CisJCQlOZGlzTW92ZU1lbW9yeShBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXIgKyA0LCAoUFVDSEFSKSZwQWQtPlN0YUNmZy5DQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wLCA4KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciArIDEyLCAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuQ0NLTVJOLCA0KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciArMTYsIE1JQ01OLCA4KTsKKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAorCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0Q0NLTVJlYXNzb2NJRSwKKwkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAmQWlyb25ldENDS01SZWFzc29jTGVuLAorCQkJCQkJCUFpcm9uZXRDQ0tNUmVhc3NvY0xlbiwgIEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCQlDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbixDaXBoZXJTdWl0ZUNpc2NvQ0NLTSwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKworCQkvLyBBZGQgQ0NYIHYyIHJlcXVlc3QgaWYgQ0NYMiBhZG1pbiBzdGF0ZSBpcyBvbgorCQlpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5FbmFibGUgPT0gMSkKKwkJeworCQkJLy8KKwkJCS8vIEFkZCBDQ1ggVmVyc2lvbgorCQkJLy8KKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCTEsCQkJCQkJCSZDY3gySWUsCisJCQkJCQkxLAkJCQkJCQkmQ2N4MkxlbiwKKwkJCQkJCUNjeDJMZW4sCQkJCSAgICBDY3gySWVJbmZvLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCBUaW1lb3V0KTsgLyogaW4gbVNlYyAqLworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IFJFQVNTT0NfV0FJVF9SU1A7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVNTT0MgLSBNbG1lUmVhc3NvY1JlcUFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsZWQuIEJVRyEhISEgXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVVwcGVyIGxheWVyIGlzc3VlcyBkaXNhc3NvYyByZXF1ZXN0CisJUGFyYW1ldGVyczoKKwkJRWxlbSAtCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lRGlzYXNzb2NSZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgcERpc2Fzc29jUmVxOworCUhFQURFUl84MDJfMTEgICAgICAgICBEaXNhc3NvY0hkcjsKKwlQSEVBREVSXzgwMl8xMSAgICAgICAgcERpc2Fzc29jSGRyOworCVBVQ0hBUiAgICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlVTE9ORyAgICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCU5ESVNfU1RBVFVTICAgICAgICAgICBOU3RhdHVzOworCUJPT0xFQU4gICAgICAgICAgICAgICBUaW1lckNhbmNlbGxlZDsKKwlVTE9ORyAgICAgICAgICAgICAgICAgVGltZW91dCA9IDA7CisJVVNIT1JUICAgICAgICAgICAgICAgIFN0YXR1czsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCS8vIHNlbmQgRExTLVRFQVJfRE9XTiBtZXNzYWdlLAorCWlmIChwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwl7CisJCVVDSEFSIGk7CisKKwkJLy8gdGVhciBkb3duIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJeworCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQl9CisJCX0KKworCQkvLyB0ZWFyIGRvd24gcGVlciBkbHMgdGFibGUgZW50cnkKKwkJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCQl7CisJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCS8vIHNraXAgc2FuaXR5IGNoZWNrCisJcERpc2Fzc29jUmVxID0gKFBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpKEVsZW0tPk1zZyk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIE1sbWVEaXNhc3NvY1JlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWRcbiIpKTsKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQlTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCisKKwlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBTZW5kIERJU0FTU09DIHJlcXVlc3RbQlNTSUQ6OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IChSZWFzb249JWQpXG4iLAorCQkJCXBEaXNhc3NvY1JlcS0+QWRkclswXSwgcERpc2Fzc29jUmVxLT5BZGRyWzFdLCBwRGlzYXNzb2NSZXEtPkFkZHJbMl0sCisJCQkJcERpc2Fzc29jUmVxLT5BZGRyWzNdLCBwRGlzYXNzb2NSZXEtPkFkZHJbNF0sIHBEaXNhc3NvY1JlcS0+QWRkcls1XSwgcERpc2Fzc29jUmVxLT5SZWFzb24pKTsKKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRpc2Fzc29jSGRyLCBTVUJUWVBFX0RJU0FTU09DLCAwLCBwRGlzYXNzb2NSZXEtPkFkZHIsIHBEaXNhc3NvY1JlcS0+QWRkcik7CS8vIHBhdGNoIHBlYXAgdHRscyBzd2l0Y2hpbmcgaXNzdWUKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwmRGlzYXNzb2NIZHIsCisJCQkJCSAgMiwgICAgICAgICAgICAgICAgICAgICZwRGlzYXNzb2NSZXEtPlJlYXNvbiwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisKKwkvLyBUbyBwYXRjaCBJbnN0YW5jZSBhbmQgQnVmZmFsbyhOKSBBUAorCS8vIERyaXZlciBoYXMgdG8gc2VuZCBkZWF1dGggdG8gSW5zdGFuY2UgQVAsIGJ1dCBCdWZmYWxvKE4pIG5lZWRzIHRvIHNlbmQgZGlzYXNzb2MgdG8gcmVzZXQgQXV0aGVudGljYXRvcidzIHN0YXRlIG1hY2hpbmUKKwkvLyBUaGVyZWZvcmUsIHdlIHNlbmQgYm90aCBvZiB0aGVtLgorCXBEaXNhc3NvY0hkciA9IChQSEVBREVSXzgwMl8xMSlwT3V0QnVmZmVyOworCXBEaXNhc3NvY0hkci0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfREVBVVRIOworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXBBZC0+U3RhQ2ZnLkRpc2Fzc29jUmVhc29uID0gUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HOworCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuRGlzYXNzb2NTdGEsIHBEaXNhc3NvY1JlcS0+QWRkcik7CisKKwlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCBUaW1lb3V0KTsgLyogaW4gbVNlYyAqLworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gRElTQVNTT0NfV0FJVF9SU1A7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorCXsKKyAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisgICAgICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfRElTQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIHsKKyAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXBlZXIgc2VuZHMgYXNzb2MgcnNwIGJhY2sKKwlQYXJhbWV0ZXJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckFzc29jUnNwQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICAgIENhcGFiaWxpdHlJbmZvLCBTdGF0dXMsIEFpZDsKKwlVQ0hBUiAgICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBTdXBSYXRlTGVuOworCVVDSEFSICAgICAgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIEV4dFJhdGVMZW47CisJVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIgICAgICAgICBDa2lwRmxhZzsKKwlFRENBX1BBUk0gICAgIEVkY2FQYXJtOworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbjsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisJaWYgKFBlZXJBc3NvY1JzcFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJkNhcGFiaWxpdHlJbmZvLCAmU3RhdHVzLCAmQWlkLCBTdXBSYXRlLCAmU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgJkV4dFJhdGVMZW4sCisJCSZIdENhcGFiaWxpdHksJkFkZEh0SW5mbywgJkh0Q2FwYWJpbGl0eUxlbiwmQWRkSHRJbmZvTGVuLCZOZXdFeHRDaGFubmVsT2Zmc2V0LCAmRWRjYVBhcm0sICZDa2lwRmxhZykpCisJeworCQkvLyBUaGUgZnJhbWUgaXMgZm9yIG1lID8KKwkJaWYoTUFDX0FERFJfRVFVQUwoQWRkcjIsIHBBZC0+TWxtZUF1eC5Cc3NpZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBc3NvY1JzcEFjdGlvbigpOkFTU09DIC0gcmVjZWl2ZSBBU1NPQ19SU1AgdG8gbWUgKHN0YXR1cz0lZClcbiIsIFN0YXR1cykpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckFzc29jUnNwQWN0aW9uKCk6TWFjVGFibGUgWyVkXS5BTXNkdVNpemUgPSAlZC4gQ2xpZW50U3RhdHVzRmxhZ3MgPSAweCVseCBcbiIsRWxlbS0+V2NpZCwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQlpZihTdGF0dXMgPT0gTUxNRV9TVUNDRVNTKQorCQkJeworCQkJCVVDSEFSCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7CisJCQkJVUNIQVIJCQlpZHg7CisKKwkJCQkvLyBzdXBwb3J0ZWQgcmF0ZXMgYXJyYXkgbWF5IG5vdCBiZSBzb3J0ZWQuIHNvcnQgaXQgYW5kIGZpbmQgdGhlIG1heGltdW0gcmF0ZQorCQkJICAgIGZvciAoaWR4PTA7IGlkeDxTdXBSYXRlTGVuOyBpZHgrKykKKyAgICAgICAgICAgICAgICB7CisJCQkgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cFJhdGVbaWR4XSAmIDB4N2YpKQorCQkJICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IFN1cFJhdGVbaWR4XSAmIDB4N2Y7CisgICAgICAgICAgICAgICAgfQorCisJCQkJZm9yIChpZHg9MDsgaWR4PEV4dFJhdGVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHsKKwkJCSAgICAgICAgaWYgKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPCAoRXh0UmF0ZVtpZHhdICYgMHg3ZikpCisJCQkgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gRXh0UmF0ZVtpZHhdICYgMHg3ZjsKKyAgICAgICAgICAgICAgICB9CisJCQkJLy8gZ28gdG8gcHJvY2VkdXJlIGxpc3RlZCBvbiBwYWdlIDM3NgorCQkJCUFzc29jUG9zdFByb2MocEFkLCBBZGRyMiwgQ2FwYWJpbGl0eUluZm8sIEFpZCwgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwKKwkJCQkJJkVkY2FQYXJtLCAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sICZBZGRIdEluZm8pOworCisJCQkJU3RhQWRkTWFjVGFibGVFbnRyeShwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLCAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sIENhcGFiaWxpdHlJbmZvKTsKKworCQkJCXBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gQ2tpcEZsYWc7CisJCQkJaWYgKENraXBGbGFnICYgMHgxOCkKKwkJCQl7CisJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlR4U0VRLCA0KTsKKwkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUnhTRVEsIDQpOworCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5DS0lQTUlDLCA0KTsKKwkJCQkJcEFkLT5TdGFDZmcuR0lWWzBdID0gUmFuZG9tQnl0ZShwQWQpOworCQkJCQlwQWQtPlN0YUNmZy5HSVZbMV0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkdJVlsyXSA9IFJhbmRvbUJ5dGUocEFkKTsKKwkJCQkJcEFkLT5TdGFDZmcuYkNraXBPbiA9IFRSVUU7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjxDQ1g+IHBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gMHglMDJ4XG4iLCBwQWQtPlN0YUNmZy5Da2lwRmxhZykpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBGYWlsZSBvbiBBc3NvY2lhdGlvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIGNvZGUKKwkJCQkvLyBJcyB0aGF0IGEgUm9ndWUgQVA/CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJaWYgKChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKSAmJiAoU3RhdHVzID09IE1MTUVfQUxHX05PVF9TVVBQT1JUKSkKKwkJCQl7IC8vUG9zc2libHkgUm9ndWUgQVAKKwkJCQkJUm9ndWVBcFRhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TdGFDZmcuUm9ndWVBcFRhYiwgcEFkLT5NbG1lQXV4LkJzc2lkLCBMRUFQX1JFQVNPTl9JTlZBTElEX0FVVEgpOworCQkJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCX0KKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJBc3NvY1JzcEFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXBlZXIgc2VuZHMgcmVhc3NvYyByc3AKKwlQYXJhbWV0cnM6CisJCUVsZW0gLSBNTE1FIG1lc3NhZ2UgY250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJSZWFzc29jUnNwQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlVU0hPUlQgICAgICBTdGF0dXM7CisJVVNIT1JUICAgICAgQWlkOworCVVDSEFSICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBTdXBSYXRlTGVuOworCVVDSEFSICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBFeHRSYXRlTGVuOworCVVDSEFSICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgQ2tpcEZsYWc7CisJQk9PTEVBTiAgICAgVGltZXJDYW5jZWxsZWQ7CisJRURDQV9QQVJNICAgRWRjYVBhcm07CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIdEluZm87CS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCVVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuOworCVVDSEFSCQkJQWRkSHRJbmZvTGVuOworCVVDSEFSCQkJTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7CisKKwlpZihQZWVyQXNzb2NSc3BTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZDYXBhYmlsaXR5SW5mbywgJlN0YXR1cywgJkFpZCwgU3VwUmF0ZSwgJlN1cFJhdGVMZW4sIEV4dFJhdGUsICZFeHRSYXRlTGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAkmQWRkSHRJbmZvLCAmSHRDYXBhYmlsaXR5TGVuLCAmQWRkSHRJbmZvTGVuLCZOZXdFeHRDaGFubmVsT2Zmc2V0LCAmRWRjYVBhcm0sICZDa2lwRmxhZykpCisJeworCQlpZihNQUNfQUREUl9FUVVBTChBZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKSkgLy8gVGhlIGZyYW1lIGlzIGZvciBtZSA/CisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gcmVjZWl2ZSBSRUFTU09DX1JTUCB0byBtZSAoc3RhdHVzPSVkKVxuIiwgU3RhdHVzKSk7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCWlmKFN0YXR1cyA9PSBNTE1FX1NVQ0NFU1MpCisJCQl7CisJCQkJLy8gZ28gdG8gcHJvY2VkdXJlIGxpc3RlZCBvbiBwYWdlIDM3NgorCQkJCUFzc29jUG9zdFByb2MocEFkLCBBZGRyMiwgQ2FwYWJpbGl0eUluZm8sIEFpZCwgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwKKwkJCQkJICZFZGNhUGFybSwgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCAmQWRkSHRJbmZvKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisKKyAgICAgICAgICAgICAgICAgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KHBBZCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgICAgICAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgICAgICB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYyhwQWQpOworCisgICAgICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJCQl9CisKKwkJCS8vCisJCQkvLyBDaXNjbyBMZWFwIENDS00gc3VwcG9ydGVkIFJlLWFzc29jaWF0aW9uLgorCQkJLy8KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCQl7CisJCQkJaWYgKENDS01Bc3NvY1JzcFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKSA9PSBUUlVFKQorCQkJCXsKKwkJCQkJcEFkLT5TdGFDZmcuQ2tpcEZsYWcgPSBDa2lwRmxhZzsKKwkJCQkJaWYgKENraXBGbGFnICYgMHgxOCkKKwkJCQkJeworCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuVHhTRVEsIDQpOworCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUnhTRVEsIDQpOworCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuQ0tJUE1JQywgNCk7CisJCQkJCQlwQWQtPlN0YUNmZy5HSVZbMF0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5HSVZbMV0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5HSVZbMl0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5iQ2tpcE9uID0gVFJVRTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjxDQ1g+IHBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gMHglMDJ4XG4iLCBwQWQtPlN0YUNmZy5Da2lwRmxhZykpOworCQkJCQl9CisKKwkJCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQkJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBDQ0tNQXNzb2NSc3BTYW5pdHkoKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQkvLyBDa2lwRmxhZyBpcyBubyB1c2UgZm9yIHJlYXNzb2NpYXRlCisJCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gUGVlclJlYXNzb2NSc3BBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXByb2NlZHVyZXMgb24gSUVFRSA4MDIuMTEvMTk5OSBwLjM3NgorCVBhcmFtZXRyczoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc3NvY1Bvc3RQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwQWRkcjIsCisJSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLAorCUlOIFVTSE9SVCBBaWQsCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gSFRfQ0FQQUJJTElUWV9JRQkJKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIgSHRDYXBhYmlsaXR5TGVuLAorCUlOIEFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbykJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCit7CisJVUxPTkcgSWR4OworCisJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCU1NfSU5GUkE7CisJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIHBBZGRyMik7CisJcEFkLT5NbG1lQXV4LkFpZCA9IEFpZDsKKwlwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbyAmIFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gU29tZSBIVCBBUCBtaWdodCBsb3N0IFdNTSBJRS4gV2UgYWRkIFdNTSBvdXJzZWx2ZXMuIGJlYWN1YXNlIEhUIHJlcXVpcmVzIFFvUyBvbi4KKwlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA+IDApICYmIChwRWRjYVBhcm0tPmJWYWxpZCA9PSBGQUxTRSkpCisJeworCQlwRWRjYVBhcm0tPmJWYWxpZCA9IFRSVUU7CisJCXBFZGNhUGFybS0+QWlmc25bMF0gPSAzOworCQlwRWRjYVBhcm0tPkFpZnNuWzFdID0gNzsKKwkJcEVkY2FQYXJtLT5BaWZzblsyXSA9IDI7CisJCXBFZGNhUGFybS0+QWlmc25bM10gPSAyOworCisJCXBFZGNhUGFybS0+Q3dtaW5bMF0gPSA0OworCQlwRWRjYVBhcm0tPkN3bWluWzFdID0gNDsKKwkJcEVkY2FQYXJtLT5Dd21pblsyXSA9IDM7CisJCXBFZGNhUGFybS0+Q3dtaW5bM10gPSAyOworCisJCXBFZGNhUGFybS0+Q3dtYXhbMF0gPSAxMDsKKwkJcEVkY2FQYXJtLT5Dd21heFsxXSA9IDEwOworCQlwRWRjYVBhcm0tPkN3bWF4WzJdID0gNDsKKwkJcEVkY2FQYXJtLT5Dd21heFszXSA9IDM7CisKKwkJcEVkY2FQYXJtLT5UeG9wWzBdICA9IDA7CisJCXBFZGNhUGFybS0+VHhvcFsxXSAgPSAwOworCQlwRWRjYVBhcm0tPlR4b3BbMl0gID0gOTY7CisJCXBFZGNhUGFybS0+VHhvcFszXSAgPSA0ODsKKworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgcEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7CisKKwkvLyBmaWx0ZXIgb3V0IHVuLXN1cHBvcnRlZCByYXRlcworCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3VwUmF0ZSwgU3VwUmF0ZSwgU3VwUmF0ZUxlbik7CisJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwgJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuKTsKKworCS8vIGZpbHRlciBvdXQgdW4tc3VwcG9ydGVkIHJhdGVzCisJcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gPSBFeHRSYXRlTGVuOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKKwlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKEh0Q2FwYWJpbGl0eUxlbiA+IDApCisJeworCQlSVE1QQ2hlY2tIdChwQWQsIEJTU0lEX1dDSUQsIHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8pOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc3NvY1Bvc3RQcm9jPT09PiAgQVAuQU1zZHVTaXplID0gJWQuIENsaWVudFN0YXR1c0ZsYWdzID0gMHglbHggXG4iLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFNc2R1U2l6ZSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5DbGllbnRTdGF0dXNGbGFncykpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gICAgKE1tcHM9JWQsIEFtc2R1U2l6ZT0lZCwgKVxuIiwKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NbXBzTW9kZSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFNldCBOZXcgV1BBIGluZm9ybWF0aW9uCisJSWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEFkZHIyLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7CisJaWYgKElkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQVNTT0MgLSBDYW4ndCBmaW5kIEJTUyBhZnRlciByZWNlaXZpbmcgQXNzb2MgcmVzcG9uc2VcbiIpKTsKKwl9CisJZWxzZQorCXsKKwkJLy8gSW5pdCB2YXJpYWJsZQorCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBNQVhfTEVOX09GX1JTTklFKTsKKworCQkvLyBTdG9yZSBhcHByb3ByaWF0ZSBSU05fSUUgZm9yIFdQQSBTTSBuZWdvdGlhdGlvbiBsYXRlcgorCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgJiYgKHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlZhcklFTGVuICE9IDApKQorCQl7CisJCQlQVUNIQVIgICAgICAgICAgICAgIHBWSUU7CisJCQlVU0hPUlQgICAgICAgICAgICAgIGxlbjsKKwkJCVBFSURfU1RSVUNUICAgICAgICAgcEVpZDsKKworCQkJcFZJRSA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlZhcklFczsKKwkJCWxlbgkgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5WYXJJRUxlbjsKKworCQkJd2hpbGUgKGxlbiA+IDApCisJCQl7CisJCQkJcEVpZCA9IChQRUlEX1NUUlVDVCkgcFZJRTsKKwkJCQkvLyBGb3IgV1BBL1dQQVBTSworCQkJCWlmICgocEVpZC0+RWlkID09IElFX1dQQSkgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkpCisJCQkJCSYmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwVklFLCAocEVpZC0+TGVuICsgMikpOworCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gU3RvcmUgUlNOX0lFIGZvciBXUEEgU00gbmVnb3RpYXRpb24gXG4iKSk7CisJCQkJfQorCQkJCS8vIEZvciBXUEEyL1dQQTJQU0sKKwkJCQllbHNlIGlmICgocEVpZC0+RWlkID09IElFX1JTTikgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKQorCQkJCQkmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMiB8fCBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwVklFLCAocEVpZC0+TGVuICsgMikpOworCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gU3RvcmUgUlNOX0lFIGZvciBXUEEyIFNNIG5lZ290aWF0aW9uIFxuIikpOworCQkJCX0KKworCQkJCXBWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCWxlbiAgLT0gKHBFaWQtPkxlbiArIDIpOworCQkJfQorCQl9CisKKwkJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuID09IDApCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzc29jUG9zdFByb2M9PT0+IG5vIFJTTl9JRSBcbiIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWhleF9kdW1wKCJSU05fSUUiLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWxlZnQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHAuMzc0CisJUGFyYW1ldGVyczoKKwkJRWxlbSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJEaXNhc3NvY0FjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCVVTSE9SVCAgICAgICAgUmVhc29uOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBQZWVyRGlzYXNzb2NBY3Rpb24oKVxuIikpOworCWlmKFBlZXJEaXNhc3NvY1Nhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJlJlYXNvbikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJEaXNhc3NvY0FjdGlvbigpIFJlYXNvbiA9ICVkXG4iLCBSZWFzb24pKTsKKwkJaWYgKElORlJBX09OKHBBZCkgJiYgTUFDX0FERFJfRVFVQUwocEFkLT5Db21tb25DZmcuQnNzaWQsIEFkZHIyKSkKKwkJeworCisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQl7CisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfRElTQVNTT0NfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJCX0KKworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQlpZiAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKwkJCXsKKwkJCQkvLyBDaXNjb19MRUFQIGhhcyBzdGFydCBhIHRpbWVyCisJCQkJLy8gV2Ugc2hvdWxkIGNhbmNlbCBpdCBpZiB1c2luZyBMRUFQCisJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5MZWFwQXV0aFRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJCS8vQ2hlY2sgaXMgaXQgbWFjaCB0aGUgTEVBUCBBdXRoZW50aWNhdGlvbiBmYWlsZWQgYXMgcG9zc2libGUgYSBSb2d1ZSBBUAorCQkJCS8vb24gaXQncyBQb3J0U2VjdXJlZCBub3QgZXF1YWwgdG8gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQgd2hpbGUgcHJvY2VzcyB0aGUgQXNzb2NpYXRpb24uCisJCQkJaWYgKChwQWQtPk1sbWUuTGVhcE1hY2hpbmUuQ3VyclN0YXRlICE9IExFQVBfSURMRSkgJiYgKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkICE9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKSkKKwkJCQl7CisJCQkJCVJvZ3VlQXBUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLlJvZ3VlQXBUYWIsIEFkZHIyLCBMRUFQX1JFQVNPTl9BVVRIX1RJTUVPVVQpOworCQkJCX0KKwkJCX0KKyNlbmRpZgkvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCS8vCisJCQkvLyBHZXQgQ3VycmVudCBTeXN0ZW0gdGltZSBhbmQgVHVybiBvbiBBZGphY2VudEFQUmVwb3J0CisJCQkvLworCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUExpbmtEb3duVGltZSk7CisJCQlwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQUmVwb3J0RmxhZyA9IFRSVUU7CisJCQlMaW5rRG93bihwQWQsIFRSVUUpOworCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorCQkJeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICAvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisgICAgICAgICAgICAgICAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworICAgICAgICAgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0RJU0FTU09DX0VWRU5UX0ZMQUc7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJEaXNhc3NvY0FjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisJfQorCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJd2hhdCB0aGUgc3RhdGUgbWFjaGluZSB3aWxsIGRvIGFmdGVyIGFzc29jIHRpbWVvdXQKKwlQYXJhbWV0ZXJzOgorCQlFbG1lIC0KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc3NvY1RpbWVvdXRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQXNzb2NUaW1lb3V0QWN0aW9uXG4iKSk7CisJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCVN0YXR1cyA9IE1MTUVfUkVKX1RJTUVPVVQ7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciByZWFzc29jIHRpbWVvdXQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBSZWFzc29jVGltZW91dEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBSZWFzc29jVGltZW91dEFjdGlvblxuIikpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1JFSl9USU1FT1VUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciBkaXNhc3NvYyB0aW1lb3V0CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRGlzYXNzb2NUaW1lb3V0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIERpc2Fzc29jVGltZW91dEFjdGlvblxuIikpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0RJU0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCitWT0lEIEludmFsaWRTdGF0ZVdoZW5Bc3NvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuQXNzb2Moc3RhdGU9JWxkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKK1ZPSUQgSW52YWxpZFN0YXRlV2hlblJlYXNzb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyhzdGF0ZT0lbGQpLCByZXNldCBBU1NPQyBzdGF0ZSBtYWNoaW5lXG4iLAorCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSkpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCitWT0lEIEludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2Moc3RhdGU9JWxkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfRElTQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcmlnaHQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHBhZ2UgMzc0CisJTm90ZToKKwkJVGhpcyBldmVudCBzaG91bGQgbmV2ZXIgY2F1c2UgQVNTT0Mgc3RhdGUgbWFjaGluZSBwZXJmb3JtIHN0YXRlCisJCXRyYW5zaXRpb24sIGFuZCBoYXMgbm8gcmVsYXRpb25zaGlwIHdpdGggQ05UTCBtYWNoaW5lLiBTbyB3ZSBzZXBhcmF0ZQorCQl0aGlzIHJvdXRpbmUgYXMgYSBzZXJ2aWNlIG91dHNpZGUgb2YgQVNTT0Mgc3RhdGUgdHJhbnNpdGlvbiB0YWJsZS4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBDbHMzZXJyQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIpCit7CisJSEVBREVSXzgwMl8xMSAgICAgICAgIERpc2Fzc29jSGRyOworCVBIRUFERVJfODAyXzExICAgICAgICBwRGlzYXNzb2NIZHI7CisJUFVDSEFSICAgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVMT05HICAgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJTkRJU19TVEFUVVMgICAgICAgICAgIE5TdGF0dXM7CisJVVNIT1JUICAgICAgICAgICAgICAgIFJlYXNvbiA9IFJFQVNPTl9DTFMzRVJSOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIENsYXNzIDMgRXJyb3IsIFNlbmQgRElTQVNTT0MgZnJhbWVcbiIpKTsKKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRpc2Fzc29jSGRyLCBTVUJUWVBFX0RJU0FTU09DLCAwLCBwQWRkciwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwkvLyBwYXRjaCBwZWFwIHR0bHMgc3dpdGNoaW5nIGlzc3VlCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksJkRpc2Fzc29jSGRyLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAmUmVhc29uLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKworCS8vIFRvIHBhdGNoIEluc3RhbmNlIGFuZCBCdWZmYWxvKE4pIEFQCisJLy8gRHJpdmVyIGhhcyB0byBzZW5kIGRlYXV0aCB0byBJbnN0YW5jZSBBUCwgYnV0IEJ1ZmZhbG8oTikgbmVlZHMgdG8gc2VuZCBkaXNhc3NvYyB0byByZXNldCBBdXRoZW50aWNhdG9yJ3Mgc3RhdGUgbWFjaGluZQorCS8vIFRoZXJlZm9yZSwgd2Ugc2VuZCBib3RoIG9mIHRoZW0uCisJcERpc2Fzc29jSGRyID0gKFBIRUFERVJfODAyXzExKXBPdXRCdWZmZXI7CisJcERpc2Fzc29jSGRyLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9ERUFVVEg7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcEFkLT5TdGFDZmcuRGlzYXNzb2NSZWFzb24gPSBSRUFTT05fQ0xTM0VSUjsKKwlDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkRpc2Fzc29jU3RhLCBwQWRkcik7Cit9CisKKyAvKgorCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSBEZXNjcmlwdGlvbjoKKwkJIFN3aXRjaCBiZXR3ZWVuIFdFUCBhbmQgQ0tJUCB1cG9uIG5ldyBhc3NvY2lhdGlvbiB1cC4KKwkgUGFyYW1ldGVyczoKKworCSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAqLworVk9JRCBTd2l0Y2hCZXR3ZWVuV2VwQW5kQ2tpcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlpbnQgICAgICAgICAgICBpOworCVNIQVJFREtFWV9NT0RFX1NUUlVDICBjc3IxOworCisJLy8gaWYgS1AgaXMgcmVxdWlyZWQuIGNoYW5nZSB0aGUgQ2lwaGVyQWxnIGluIGhhcmR3YXJlIHNoYXJkIGtleSB0YWJsZSBmcm9tIFdFUAorCS8vIHRvIENLSVAuIGVsc2UgcmVtYWluIGFzIFdFUAorCWlmIChwQWQtPlN0YUNmZy5iQ2tpcE9uICYmIChwQWQtPlN0YUNmZy5Da2lwRmxhZyAmIDB4MTApKQorCXsKKwkJLy8gbW9kaWZ5IGhhcmR3YXJlIGtleSB0YWJsZSBzbyB0aGF0IE1BQyB1c2UgY29ycmVjdCBhbGdvcml0aG0gdG8gZGVjcnlwdCBSWAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFLCAmY3NyMS53b3JkKTsKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IENJUEhFUl9DS0lQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDEyODsKKworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9PSBDSVBIRVJfV0VQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9PSBDSVBIRVJfV0VQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IENJUEhFUl9DS0lQMTI4OworCisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID09IENJUEhFUl9XRVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID09IENJUEhFUl9XRVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVAxMjg7CisKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENJUEhFUl9DS0lQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDEyODsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UsIGNzcjEud29yZCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN3aXRjaEJldHdlZW5XZXBBbmRDa2lwOiBtb2RpZnkgQlNTMCBjaXBoZXIgdG8gJXNcbiIsIENpcGhlck5hbWVbY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZ10pKTsKKworCQkvLyBtb2RpZnkgc29mdHdhcmUga2V5IHRhYmxlIHNvIHRoYXQgZHJpdmVyIGNhbiBzcGVjaWZ5IGNvcnJlY3QgYWxnb3JpdGhtIGluIFRYRCB1cG9uIFRYCisJCWZvciAoaT0wOyBpPFNIQVJFX0tFWV9OVU07IGkrKykKKwkJeworCQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQNjQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVA2NDsKKwkJCWVsc2UgaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQMTI4KQorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9DS0lQMTI4OworCQl9CisJfQorCisJLy8gZWxzZSBpZiBLUCBOT1QgaW51c2VkLiBjaGFuZ2UgdGhlIENpcGhlckFsZyBpbiBoYXJkd2FyZSBzaGFyZCBrZXkgdGFibGUgZnJvbSBDS0lQCisJLy8gdG8gV0VQLgorCWVsc2UKKwl7CisJCS8vIG1vZGlmeSBoYXJkd2FyZSBrZXkgdGFibGUgc28gdGhhdCBNQUMgdXNlIGNvcnJlY3QgYWxnb3JpdGhtIHRvIGRlY3J5cHQgUlgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSwgJmNzcjEud29yZCk7CisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJLy8gbW9kaWZ5IHNvZnR3YXJlIGtleSB0YWJsZSBzbyB0aGF0IGRyaXZlciBjYW4gc3BlY2lmeSBjb3JyZWN0IGFsZ29yaXRobSBpbiBUWEQgdXBvbiBUWAorCQlmb3IgKGk9MDsgaTxTSEFSRV9LRVlfTlVNOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVA2NCkKKwkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCQllbHNlIGlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVAxMjgpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKwkJfQorCisJCS8vCisJCS8vIE9uIFdQQS1OT05FLCBtdXN0IHVwZGF0ZSBDaXBoZXJBbGcuCisJCS8vIEJlY2F1c2UgdGhlIE9JRF84MDJfMTFfV0VQX1NUQVRVUyB3YXMgYmVlbiBzZXQgYWZ0ZXIgT0lEXzgwMl8xMV9BRERfS0VZCisJCS8vIGFuZCBDaXBoZXJBbGcgd2lsbCBiZSBDSVBIRVJfTk9ORSBieSBXaW5kb3dzIFplcm9Db25maWcuCisJCS8vIFNvIHdlIG5lZWQgdG8gdXBkYXRlIENpcGhlckFsZyBhZnRlciBjb25uZWN0LgorCQkvLworCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJeworCQkJZm9yIChpID0gMDsgaSA8IFNIQVJFX0tFWV9OVU07IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uS2V5TGVuICE9IDApCisJCQkJeworCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCQkJCXsKKwkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJCQl7CisJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQkJCX0KKwkJCX0KKworCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZzsKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVsxXS5DaXBoZXJBbGc7CisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMl0uQ2lwaGVyQWxnOworCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzNdLkNpcGhlckFsZzsKKwkJfQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSwgY3NyMS53b3JkKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQmV0d2VlbldlcEFuZENraXA6IG1vZGlmeSBCU1MwIGNpcGhlciB0byAlc1xuIiwgQ2lwaGVyTmFtZVtjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnXSkpOworCX0KK30KKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKK1ZPSUQgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgdW5zaWduZWQgY2hhciBjdXN0b21bSVdfQ1VTVE9NX01BWF0gPSB7MH07CisKKyAgICBpZiAoKHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuICsgMTcpIDw9IElXX0NVU1RPTV9NQVgpCisgICAgeworICAgICAgICBzcHJpbnRmKGN1c3RvbSwgIkFTU09DSU5GT19SZXFJRXM9Iik7CisJICAgIE5kaXNNb3ZlTWVtb3J5KGN1c3RvbSsxNywgcEFkLT5TdGFDZmcuUmVxVmFySUVzLCBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbik7CisJICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgd3JxdS5kYXRhLmxlbmd0aCA9IHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuICsgMTc7CisgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX1JFUUlFX0VWRU5UX0ZMQUc7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgY3VzdG9tKTsKKworICAgICAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0FTU09DSU5GT19FVkVOVF9GTEFHOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuICsgMTcgPiBNQVhfQ1VTVE9NX0xFTlxuIikpOworCisgICAgcmV0dXJuOworfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKK2ludCB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYygKKwlJTiAgUlRNUF9BREFQVEVSICpwQWQpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgIGNoYXIgY3VzdG9tW0lXX0NVU1RPTV9NQVhdID0gezB9OworCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKKyAgICBpZiAocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPD0gSVdfQ1VTVE9NX01BWCkKKyAgICB7CisgICAgICAgIHdycXUuZGF0YS5sZW5ndGggPSBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbjsKKyAgICAgICAgbWVtY3B5KGN1c3RvbSwgcEFkLT5TdGFDZmcuUmVxVmFySUVzLCBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbik7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQVNTT0NSRVFJRSwgJndycXUsIGN1c3RvbSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPiBNQVhfQ1VTVE9NX0xFTlxuIikpOworI2Vsc2UKKyAgICBpZiAoKChwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbioyKSArIDE3KSA8PSBJV19DVVNUT01fTUFYKQorICAgIHsKKyAgICAgICAgVUNIQVIgICBpZHg7CisgICAgICAgIHdycXUuZGF0YS5sZW5ndGggPSAocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4qMikgKyAxNzsKKyAgICAgICAgc3ByaW50ZihjdXN0b20sICJBU1NPQ0lORk8oUmVxSUVzPSIpOworICAgICAgICBmb3IgKGlkeD0wOyBpZHg8cEFkLT5TdGFDZmcuUmVxVmFySUVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHNwcmludGYoY3VzdG9tLCAiJXMlMDJ4IiwgY3VzdG9tLCBwQWQtPlN0YUNmZy5SZXFWYXJJRXNbaWR4XSk7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgY3VzdG9tKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4qMikgKyAxNyA+IE1BWF9DVVNUT01fTEVOXG4iKSk7CisjZW5kaWYKKworCXJldHVybiAwOworCit9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCitCT09MRUFOIFN0YUFkZE1hY1RhYmxlRW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWQlwRW50cnksCisJSU4gIFVDSEFSCQkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMsCisJSU4gIEhUX0NBUEFCSUxJVFlfSUUJKnBIdENhcGFiaWxpdHksCisJSU4gIFVDSEFSCQkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiAgVVNIT1JUICAgICAgICAJCUNhcGFiaWxpdHlJbmZvKQoreworCVVDSEFSICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisKKwlpZiAoQURIT0NfT04ocEFkKSkKKwkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCisJc3dpdGNoIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzKQorICAgIHsKKyAgICAgICAgY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworICAgICAgICBjYXNlIDk2OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNDg7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8zNjsgICBicmVhazsKKyAgICAgICAgY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworICAgICAgICBjYXNlIDM2OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTg7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMjsgICBicmVhazsKKyAgICAgICAgY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKyAgICAgICAgY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworICAgICAgICBjYXNlIDQ6ICAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xOyAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworICAgIH0KKworICAgIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSAmJiAoTWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gMTFuIG9ubHkKKwlpZiAoKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fMl80RykgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpJiYgKEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSkKKwkJcmV0dXJuIEZBTFNFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJaWYgKCFwRW50cnkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisJaWYgKHBFbnRyeSkKKwl7CisJCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJaWYgKChNYXhTdXBwb3J0ZWRSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpIHx8CisJCQkocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKSkKKwkJeworCQkJcEVudHJ5LT5SYXRlTGVuID0gNDsKKwkJCWlmIChNYXhTdXBwb3J0ZWRSYXRlID49IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOworCQl9CisJCWVsc2UKKwkJCXBFbnRyeS0+UmF0ZUxlbiA9IDEyOworCisJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQgPSAwOworCQlwRW50cnktPk1pbkhUUGh5TW9kZS53b3JkID0gMDsKKwkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IDA7CisJCXBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA9IE1heFN1cHBvcnRlZFJhdGU7CisJCWlmIChwRW50cnktPk1heFN1cHBvcnRlZFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkKKwkJeworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQl9CisJCWVsc2UKKwkJeworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQl9CisJCXBFbnRyeS0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsKKwkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSk7CisJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFKTsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBJZiB0aGlzIEVudHJ5IHN1cHBvcnRzIDgwMi4xMW4sIHVwZ3JhZGUgdG8gSFQgcmF0ZS4KKwlpZiAoKEh0Q2FwYWJpbGl0eUxlbiAhPSAwKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwl7CisJCVVDSEFSCWosIGJpdG1hc2s7IC8vayxiaXRtYXNrOworCQlDSEFSICAgIGk7CisKKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCQlpZiAoKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb25Ob25HRiA9IFRSVUU7CisJCQlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSAxOworCQl9CisKKwkJaWYgKChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkpCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXPSBCV180MDsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCkmKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uMjBPbmx5ID0gVFJVRTsKKwkJfQorCisJCS8vIDMqMworCQlpZiAocEFkLT5NQUNWZXJzaW9uID49IFJBTElOS18yODgzX1ZFUlNJT04gJiYgcEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzMwNzBfVkVSU0lPTikKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlR4QkYgPSBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuVHhCRjsKKworCQkvLyBmaW5kIG1heCBmaXhlZCByYXRlCisJCWZvciAoaT0yMzsgaT49MDsgaS0tKSAvLyAzKjMKKwkJeworCQkJaiA9IGkvODsKKwkJCWJpdG1hc2sgPSAoMTw8KGktKGoqOCkpKTsKKwkJCWlmICgocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0gJiBiaXRtYXNrKSAmJiAocEh0Q2FwYWJpbGl0eS0+TUNTU2V0W2pdICYgYml0bWFzaykpCisJCQl7CisJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpPT0wKQorCQkJCWJyZWFrOworCQl9CisKKworCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9PSAzMikKKwkJCXsKKwkJCQkvLyBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZQorCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gMDsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA+IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MpCisJCQl7CisJCQkJLy8gU1RBIHN1cHBvcnRzIGZpeGVkIE1DUworCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQl9CisJCX0KKworCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5SeFNUQkMgJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykpOworCQlwRW50cnktPk1wZHVEZW5zaXR5ID0gcEh0Q2FwYWJpbGl0eS0+SHRDYXBQYXJtLk1wZHVEZW5zaXR5OworCQlwRW50cnktPk1heFJBbXBkdUZhY3RvciA9IHBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3I7CisJCXBFbnRyeS0+TW1wc01vZGUgPSAoVUNIQVIpcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLk1pbW9QczsKKwkJcEVudHJ5LT5BTXNkdVNpemUgPSAoVUNIQVIpcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkFNc2R1U2l6ZTsKKwkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSAmJiAocEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9PSBGQUxTRSkpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VEKTsKKwkJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlR4U1RCQykKKwkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJaWYgKHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5QbHVzSFRDKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFKTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgJiYgcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlJER1N1cHBvcnQpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOworCQlpZiAocEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID09IDB4MDMpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uSXNMZWdhY3kgPSBUUlVFOworCX0KKworCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgcEh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKworCS8vIFNldCBhc2ljIGF1dG8gZmFsbCBiYWNrCisJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpCisJeworCQlQVUNIQVIJCQkJCXBUYWJsZTsKKwkJVUNIQVIJCQkJCVRhYmxlU2l6ZSA9IDA7CisKKwkJTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKHBBZCwgcEVudHJ5LCAmcFRhYmxlLCAmVGFibGVTaXplLCAmcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgpOworCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisKKwkJLy8gSWYgdGhlIGxlZ2FjeSBtb2RlIGlzIHNldCwgb3ZlcndyaXRlIHRoZSB0cmFuc21pdCBzZXR0aW5nIG9mIHRoaXMgZW50cnkuCisJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJfQorCisJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCXBFbnRyeS0+U3N0ID0gU1NUX0FTU09DOworCXBFbnRyeS0+QXV0aFN0YXRlID0gQVNfQVVUSF9PUEVOOworCXBFbnRyeS0+QXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKKwlwRW50cnktPldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkKKyAgICB7CisgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKworICAgICAgICBTZW5kQXNzb2NJRXNUb1dwYVN1cHBsaWNhbnQocEFkKTsKKyAgICAgICAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworICAgICAgICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9BU1NPQ19FVkVOVF9GTEFHOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgeworICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgICAgIHdleHRfbm90aWZ5X2V2ZW50X2Fzc29jKHBBZCk7CisKKyAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICBtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJcmV0dXJuIFRSVUU7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmI1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9hdXRoLmMKQEAgLTAsMCArMSw0NzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYXV0aC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obgkJMjAwNC05LTMJCXBvcnRpbmcgZnJvbSBSVDI1MDAKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgYXV0aGVudGljYXRlIHN0YXRlIG1hY2hpbmUgaW5pdCwgaW5jbHVkaW5nIHN0YXRlIHRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBTbSAtIHBvaW50ZXIgdG8gdGhlIGF1dGggc3RhdGUgbWFjaGluZQorICAgIE5vdGU6CisgICAgICAgIFRoZSBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UgdGhpcworCisgICAgICAgICAgICAgICAgICAgICAgICBBVVRIX1JFUV9JRExFICAgICAgICAgICBBVVRIX1dBSVRfU0VRMiAgICAgICAgICAgICAgICAgICBBVVRIX1dBSVRfU0VRNAorICAgIE1UMl9NTE1FX0FVVEhfUkVRICAgbWxtZV9hdXRoX3JlcV9hY3Rpb24gICAgaW52YWxpZF9zdGF0ZV93aGVuX2F1dGggICAgICAgICAgaW52YWxpZF9zdGF0ZV93aGVuX2F1dGgKKyAgICBNVDJfUEVFUl9BVVRIX0VWRU4gIGRyb3AgICAgICAgICAgICAgICAgICAgIHBlZXJfYXV0aF9ldmVuX2F0X3NlcTJfYWN0aW9uICAgIHBlZXJfYXV0aF9ldmVuX2F0X3NlcTRfYWN0aW9uCisgICAgTVQyX0FVVEhfVElNRU9VVCAgICBEcm9wICAgICAgICAgICAgICAgICAgICBhdXRoX3RpbWVvdXRfYWN0aW9uICAgICAgICAgICAgICBhdXRoX3RpbWVvdXRfYWN0aW9uCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCit2b2lkIEF1dGhTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFNUQVRFX01BQ0hJTkUgKlNtLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKyAgICBTdGF0ZU1hY2hpbmVJbml0KFNtLCBUcmFucywgTUFYX0FVVEhfU1RBVEUsIE1BWF9BVVRIX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBVVRIX1JFUV9JRExFLCBBVVRIX01BQ0hJTkVfQkFTRSk7CisKKyAgICAvLyB0aGUgZmlyc3QgY29sdW1uCisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1JFUV9JRExFLCBNVDJfTUxNRV9BVVRIX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lQXV0aFJlcUFjdGlvbik7CisKKyAgICAvLyB0aGUgc2Vjb25kIGNvbHVtbgorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTIsIE1UMl9NTE1FX0FVVEhfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5BdXRoKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVEyLCBNVDJfUEVFUl9BVVRIX0VWRU4sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTIsIE1UMl9BVVRIX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXV0aFRpbWVvdXRBY3Rpb24pOworCisgICAgLy8gdGhlIHRoaXJkIGNvbHVtbgorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTQsIE1UMl9NTE1FX0FVVEhfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5BdXRoKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVE0LCBNVDJfUEVFUl9BVVRIX0VWRU4sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTQsIE1UMl9BVVRIX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXV0aFRpbWVvdXRBY3Rpb24pOworCisJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQXV0aFRpbWVvdXQpLCBwQWQsIEZBTFNFKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhdCB0aW1lciB0aHJlYWQgd2hlbiBhdXRoIHRpbWVyIGV4cGlyZXMKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBdXRoVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBVVRIIC0gQXV0aFRpbWVvdXRcbiIpKTsKKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybjsKKworCS8vIHNlbmQgYSBkZS1hdXRoIHRvIHJlc2V0IEFQJ3Mgc3RhdGUgbWFjaGluZSAoUGF0Y2ggQVAtRGlyNjM1KQorCWlmIChwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID09IEFVVEhfV0FJVF9TRVEyKQorCQlDbHMyZXJyQWN0aW9uKHBBZCwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKworCisgICAgTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX1RJTUVPVVQsIDAsIE5VTEwpOworICAgIFJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUF1dGhSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworICAgIFVDSEFSICAgICAgICAgICAgICBBZGRyWzZdOworICAgIFVTSE9SVCAgICAgICAgICAgICBBbGcsIFNlcSwgU3RhdHVzOworICAgIFVMT05HICAgICAgICAgICAgICBUaW1lb3V0OworICAgIEhFQURFUl84MDJfMTEgICAgICBBdXRoSGRyOworICAgIEJPT0xFQU4gICAgICAgICAgICBUaW1lckNhbmNlbGxlZDsKKyAgICBORElTX1NUQVRVUyAgICAgICAgTlN0YXR1czsKKyAgICBQVUNIQVIgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisgICAgVUxPTkcgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKworCS8vIEJsb2NrIGFsbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlvZAorCWlmIChwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9PSBUUlVFKQorCXsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIEJsb2NrIEF1dGggcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QhXG4iKSk7CisgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICBTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKwl9CisgICAgZWxzZSBpZihNbG1lQXV0aFJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyLCAmVGltZW91dCwgJkFsZykpCisgICAgeworICAgICAgICAvLyByZXNldCB0aW1lcgorICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisgICAgICAgIENPUFlfTUFDX0FERFIocEFkLT5NbG1lQXV4LkJzc2lkLCBBZGRyKTsKKyAgICAgICAgcEFkLT5NbG1lQXV4LkFsZyAgPSBBbGc7CisgICAgICAgIFNlcSA9IDE7CisgICAgICAgIFN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKworICAgICAgICBOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorICAgICAgICBpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBNbG1lQXV0aFJlcUFjdGlvbihBbGc6JWQpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWRcbiIsIEFsZykpOworICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICBTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7CisgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBTZW5kIEFVVEggcmVxdWVzdCBzZXEjMSAoQWxnPSVkKS4uLlxuIiwgQWxnKSk7CisgICAgICAgIE1ndE1hY0hlYWRlckluaXQocEFkLCAmQXV0aEhkciwgU1VCVFlQRV9BVVRILCAwLCBBZGRyLCBwQWQtPk1sbWVBdXguQnNzaWQpOworICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSEVBREVSXzgwMl8xMSksJkF1dGhIZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAmQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgJlNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICAgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisgICAgCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKyAgICAgICAgUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCBUaW1lb3V0KTsKKyAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfV0FJVF9TRVEyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEQkdQUklOVF9FUlIoKCJBVVRIIC0gTWxtZUF1dGhSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkXG4iKSk7CisgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICBTdGF0dXMgPSBNTE1FX0lOVkFMSURfRk9STUFUOworICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyQXV0aFJzcEF0U2VxMkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICAgU2VxLCBTdGF0dXMsIFJlbW90ZVN0YXR1cywgQWxnOworICAgIFVDSEFSICAgICAgICAgQ2hsZ1RleHRbQ0lQSEVSX1RFWFRfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgIEN5cGVyQ2hsZ1RleHRbQ0lQSEVSX1RFWFRfTEVOICsgOCArIDhdOworICAgIFVDSEFSICAgICAgICAgRWxlbWVudFsyXTsKKyAgICBIRUFERVJfODAyXzExIEF1dGhIZHI7CisgICAgQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKyAgICBQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworICAgIE5ESVNfU1RBVFVTICAgTlN0YXR1czsKKyAgICBVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKyAgICBVU0hPUlQgICAgICAgIFN0YXR1czI7CisKKyAgICBpZiAoUGVlckF1dGhTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZBbGcsICZTZXEsICZTdGF0dXMsIENobGdUZXh0KSkKKyAgICB7CisgICAgICAgIGlmIChNQUNfQUREUl9FUVVBTChwQWQtPk1sbWVBdXguQnNzaWQsIEFkZHIyKSAmJiBTZXEgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFJlY2VpdmUgQVVUSF9SU1Agc2VxIzIgdG8gbWUgKEFsZz0lZCwgU3RhdHVzPSVkKVxuIiwgQWxnLCBTdGF0dXMpKTsKKyAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworICAgICAgICAgICAgaWYgKFN0YXR1cyA9PSBNTE1FX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gTW9kZSAiTEVBUCIgaGFzIGFsbG93IGZvciBDQ1ggMS5YCisgICAgICAgICAgICAgICAgaWYgKChwQWQtPk1sbWVBdXguQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJCXx8IChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJCSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBwQWQtPk1sbWUuTGVhcE1hY2hpbmUuQ3VyclN0YXRlID0gTEVBUF9JRExFOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworICAgICAgICAgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMi4gc2hhcmVkIGtleSwgbmVlZCB0byBiZSBjaGFsbGVuZ2VkCisgICAgICAgICAgICAgICAgICAgIFNlcSsrOworICAgICAgICAgICAgICAgICAgICBSZW1vdGVTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisKKwkJCQkJLy8gR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbFxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMyID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworICAgICAgICAgICAgICAgICAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1czIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFNlbmQgQVVUSCByZXF1ZXN0IHNlcSMzLi4uXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIE1ndE1hY0hlYWRlckluaXQocEFkLCAmQXV0aEhkciwgU1VCVFlQRV9BVVRILCAwLCBBZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICAgICAgICAgICAgICAgICAgQXV0aEhkci5GQy5XZXAgPSAxOworICAgICAgICAgICAgICAgICAgICAvLyBFbmNyeXB0IGNoYWxsZW5nZSB0ZXh0ICYgYXV0aCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBSVE1QSW5pdFdlcEVuZ2luZSgKKyAgICAgICAgICAgICAgICAgICAgCXBBZCwKKyAgICAgICAgICAgICAgICAgICAgCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LAorICAgICAgICAgICAgICAgICAgICAJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorICAgICAgICAgICAgICAgICAgICAJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4sCisgICAgICAgICAgICAgICAgICAgIAlDeXBlckNobGdUZXh0KTsKKworCQkJCQlBbGcgPSBjcHUybGUxNigqKFVTSE9SVCAqKSZBbGcpOworCQkJCQlTZXEgPSBjcHUybGUxNigqKFVTSE9SVCAqKSZTZXEpOworCQkJCQlSZW1vdGVTdGF0dXM9IGNwdTJsZTE2KCooVVNIT1JUICopJlJlbW90ZVN0YXR1cyk7CisKKwkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgKFBVQ0hBUikgJkFsZywgQ3lwZXJDaGxnVGV4dCArIDQsIDIpOworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCAoUFVDSEFSKSAmU2VxLCBDeXBlckNobGdUZXh0ICsgNiwgMik7CisJCQkJCVJUTVBFbmNyeXB0RGF0YShwQWQsIChQVUNIQVIpICZSZW1vdGVTdGF0dXMsIEN5cGVyQ2hsZ1RleHQgKyA4LCAyKTsKKwkJCQkJRWxlbWVudFswXSA9IDE2OworCQkJCQlFbGVtZW50WzFdID0gMTI4OworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCBFbGVtZW50LCBDeXBlckNobGdUZXh0ICsgMTAsIDIpOworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCBDaGxnVGV4dCwgQ3lwZXJDaGxnVGV4dCArIDEyLCAxMjgpOworCQkJCQlSVE1QU2V0SUNWKHBBZCwgQ3lwZXJDaGxnVGV4dCArIDE0MCk7CisgICAgICAgICAgICAgICAgICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICZBdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSVBIRVJfVEVYVF9MRU4gKyAxNiwgICAgIEN5cGVyQ2hsZ1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICAgICAgICAgICAgICAgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisgICAgICAgICAgICAgICAgCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICAgICAgUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCBBVVRIX1RJTUVPVVQpOworICAgICAgICAgICAgICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9XQUlUX1NFUTQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIEF1dGhlbnRpY2F0aW9uIHBvc3NpYmxlIHJvZ3VlIEFQCisgICAgICAgICAgICAgICAgICAgIC8vQWRkIHRoaXMgQXAgdG8gUm9ndWUgQVAuCisgICAgICAgICAgICAgICAgICAgIFJvZ3VlQXBUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLlJvZ3VlQXBUYWIsIEFkZHIyLCBMRUFQX1JFQVNPTl9JTlZBTElEX0FVVEgpOworCQkJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBwQWQtPlN0YUNmZy5BdXRoRmFpbFJlYXNvbiA9IFN0YXR1czsKKyAgICAgICAgICAgICAgICBDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkF1dGhGYWlsU3RhLCBBZGRyMik7CisgICAgICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFBlZXJBdXRoU2FuaXR5KCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyQXV0aFJzcEF0U2VxNEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICAgQWxnLCBTZXEsIFN0YXR1czsKKyAgICBDSEFSICAgICAgICAgIENobGdUZXh0W0NJUEhFUl9URVhUX0xFTl07CisgICAgQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKworICAgIGlmKFBlZXJBdXRoU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCAmQWxnLCAmU2VxLCAmU3RhdHVzLCBDaGxnVGV4dCkpCisgICAgeworICAgICAgICBpZihNQUNfQUREUl9FUVVBTChwQWQtPk1sbWVBdXguQnNzaWQsIEFkZHIyKSAmJiBTZXEgPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFJlY2VpdmUgQVVUSF9SU1Agc2VxIzQgdG8gbWVcbiIpKTsKKyAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworICAgICAgICAgICAgaWYgKFN0YXR1cyAhPSBNTE1FX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQXV0aEZhaWxSZWFzb24gPSBTdGF0dXM7CisgICAgICAgICAgICAgICAgQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5BdXRoRmFpbFN0YSwgQWRkcjIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICAgICAgICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsICZTdGF0dXMpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBQZWVyQXV0aFJzcEF0U2VxNEFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisgICAgfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZURlYXV0aFJlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCAqcEluZm87CisgICAgSEVBREVSXzgwMl8xMSBEZWF1dGhIZHI7CisgICAgUFVDSEFSICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKyAgICBORElTX1NUQVRVUyAgIE5TdGF0dXM7CisgICAgVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisgICAgVVNIT1JUICAgICAgICBTdGF0dXM7CisKKyAgICBwSW5mbyA9IChNTE1FX0RFQVVUSF9SRVFfU1RSVUNUICopRWxlbS0+TXNnOworCisgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICBpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIE1sbWVEZWF1dGhSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbFxuIikpOworICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICAgICAgU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfREVBVVRIX0NPTkYsIDIsICZTdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gU2VuZCBERS1BVVRIIHJlcXVlc3QgKFJlYXNvbj0lZCkuLi5cbiIsIHBJbmZvLT5SZWFzb24pKTsKKyAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRlYXV0aEhkciwgU1VCVFlQRV9ERUFVVEgsIDAsIHBJbmZvLT5BZGRyLCBwQWQtPk1sbWVBdXguQnNzaWQpOworICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCZEZWF1dGhIZHIsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZwSW5mby0+UmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisgICAgcEFkLT5TdGFDZmcuRGVhdXRoUmVhc29uID0gcEluZm8tPlJlYXNvbjsKKyAgICBDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkRlYXV0aFN0YSwgcEluZm8tPkFkZHIpOworICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgIFN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKyAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfREVBVVRIX0NPTkYsIDIsICZTdGF0dXMpOworCisJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBkZWF1dGhlbnRpY2F0aW9uCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19ERUFVVEhfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEF1dGhUaW1lb3V0QWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKyAgICBVU0hPUlQgU3RhdHVzOworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBBdXRoVGltZW91dEFjdGlvblxuIikpOworICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgIFN0YXR1cyA9IE1MTUVfUkVKX1RJTUVPVVQ7CisgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBJbnZhbGlkU3RhdGVXaGVuQXV0aCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVVNIT1JUIFN0YXR1czsKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gSW52YWxpZFN0YXRlV2hlbkF1dGggKHN0YXRlPSVsZCksIHJlc2V0IEFVVEggc3RhdGUgbWFjaGluZVxuIiwgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSkpOworICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgIFN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU29tZSBTVEEvQVAKKyAgICBOb3RlOgorICAgICAgICBUaGlzIGFjdGlvbiBzaG91bGQgbmV2ZXIgdHJpZ2dlciBBVVRIIHN0YXRlIHRyYW5zaXRpb24sIHRoZXJlZm9yZSB3ZQorICAgICAgICBzZXBhcmF0ZSBpdCBmcm9tIEFVVEggc3RhdGUgbWFjaGluZSwgYW5kIG1ha2UgaXQgYXMgYSBzdGFuZGFsb25lIHNlcnZpY2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBDbHMyZXJyQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBVQ0hBUiBwQWRkcikKK3sKKyAgICBIRUFERVJfODAyXzExIERlYXV0aEhkcjsKKyAgICBQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworICAgIE5ESVNfU1RBVFVTICAgTlN0YXR1czsKKyAgICBVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKyAgICBVU0hPUlQgICAgICAgIFJlYXNvbiA9IFJFQVNPTl9DTFMyRVJSOworCisgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICBpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gQ2xhc3MgMiBlcnJvciwgU2VuZCBERUFVVEggZnJhbWUuLi5cbiIpKTsKKyAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRlYXV0aEhkciwgU1VCVFlQRV9ERUFVVEgsIDAsIHBBZGRyLCBwQWQtPk1sbWVBdXguQnNzaWQpOworICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCZEZWF1dGhIZHIsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZSZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworICAgIE1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKyAgICBwQWQtPlN0YUNmZy5EZWF1dGhSZWFzb24gPSBSZWFzb247CisgICAgQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5EZWF1dGhTdGEsIHBBZGRyKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9hdXRoX3JzcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aF9yc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FhNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aF9yc3AuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlhdXRoX3JzcC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obgkJMjAwNC0xMC0xCQljb3B5IGZyb20gUlQyNTYwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIGF1dGhlbnRpY2F0aW9uIHN0YXRlIG1hY2hpbmUgaW5pdCBwcm9jZWR1cmUKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBTbSAtIHRoZSBzdGF0ZSBtYWNoaW5lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBQU1RBVEVfTUFDSElORSBTbSwKKyAgICBJTiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKyAgICBTdGF0ZU1hY2hpbmVJbml0KFNtLCBUcmFucywgTUFYX0FVVEhfUlNQX1NUQVRFLCBNQVhfQVVUSF9SU1BfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIEFVVEhfUlNQX0lETEUsIEFVVEhfUlNQX01BQ0hJTkVfQkFTRSk7CisKKyAgICAvLyBjb2x1bW4gMQorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9SU1BfSURMRSwgTVQyX1BFRVJfREVBVVRILCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEZWF1dGhBY3Rpb24pOworCisgICAgLy8gY29sdW1uIDIKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfUlNQX1dBSVRfQ0hBTCwgTVQyX1BFRVJfREVBVVRILCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEZWF1dGhBY3Rpb24pOworCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFBlZXJBdXRoU2ltcGxlUnNwR2VuQW5kU2VuZCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gVVNIT1JUIEFsZywKKyAgICBJTiBVU0hPUlQgU2VxLAorICAgIElOIFVTSE9SVCBSZWFzb24sCisgICAgSU4gVVNIT1JUIFN0YXR1cykKK3sKKyAgICBIRUFERVJfODAyXzExICAgICBBdXRoSGRyOworICAgIFVMT05HICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKyAgICBQVUNIQVIgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKyAgICBORElTX1NUQVRVUyAgICAgICBOU3RhdHVzOworCisgICAgaWYgKFJlYXNvbiAhPSBNTE1FX1NVQ0NFU1MpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyIEFVVEggZmFpbC4uLlxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisJLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorICAgIE5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisgICAgaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBBVVRIIHJlc3BvbnNlIChzZXEjMikuLi5cbiIpKTsKKyAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkF1dGhIZHIsIFNVQlRZUEVfQVVUSCwgMCwgcEhkcjgwMjExLT5BZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICZBdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgJkFsZywKKyAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICZTZXEsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAmUmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBQZWVyRGVhdXRoQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBNTE1FX1FVRVVFX0VMRU0gRWxlbSkKK3sKKyAgICBVQ0hBUiAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgIFJlYXNvbjsKKworICAgIGlmIChQZWVyRGVhdXRoU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCAmUmVhc29uKSkKKyAgICB7CisgICAgICAgIGlmIChJTkZSQV9PTihwQWQpICYmIE1BQ19BRERSX0VRVUFMKEFkZHIyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVVUSF9SU1AgLSByZWNlaXZlIERFLUFVVEggZnJvbSBvdXIgQVAgKFJlYXNvbj0lZClcbiIsIFJlYXNvbikpOworCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBkZWF1dGhlbnRpY2F0aW9uCisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfREVBVVRIX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisKKyAgICAgICAgICAgIExpbmtEb3duKHBBZCwgVFJVRSk7CisKKyAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIE1vZGUgQ2lzY29fTEVBUCBoYXMgc3RhcnQgYSB0aW1lcgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGNhbmNlbCBpdCBpZiB1c2luZyBMRUFQCisjaWZkZWYgTEVBUF9TVVBQT1JUCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkxlYXBBdXRoVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisgICAgICAgICAgICAgICAgLy9DaGVjayBpcyBpdCBtYWNoIHRoZSBMRUFQIEF1dGhlbnRpY2F0aW9uIGZhaWxlZCBhcyBwb3NzaWJsZSBhIFJvZ3VlIEFQCisgICAgICAgICAgICAgICAgLy9vbiBpdCdzIFBvcnRTZWN1cmVkIG5vdCBlcXVhbCB0byBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCB3aGlsZSBwcm9jZXNzIHRoZSBBdXRoZW50aWNhdG9uLgorICAgICAgICAgICAgICAgIGlmICgocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgIT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpICYmIChwQWQtPk1sbWUuTGVhcE1hY2hpbmUuQ3VyclN0YXRlICE9IExFQVBfSURMRSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSb2d1ZUFwVGFibGVTZXRFbnRyeShwQWQsICZwQWQtPlN0YUNmZy5Sb2d1ZUFwVGFiLCBBZGRyMiwgTEVBUF9SRUFTT05fQVVUSF9USU1FT1VUKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBVVRIX1JTUCAtIFBlZXJEZWF1dGhBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvY29ubmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvY29ubmVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmMwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9jb25uZWN0LmMKQEAgLTAsMCArMSwyODU3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWNvbm5lY3QuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4JCQkyMDA0LTA4LTA4CQkJTWFqb3IgbW9kaWZpY2F0aW9uIGZyb20gUlQyNTYwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCitVQ0hBUglDaXBoZXJTdWl0ZVdwYU5vbmVUa2lwW10gPSB7CisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMAkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lVGtpcExlbiA9IChzaXplb2YoQ2lwaGVyU3VpdGVXcGFOb25lVGtpcCkgLyBzaXplb2YoVUNIQVIpKTsKKworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lQWVzW10gPSB7CisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMAkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lQWVzTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZVdwYU5vbmVBZXMpIC8gc2l6ZW9mKFVDSEFSKSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgTUFDUk8gaXMgY2FsbGVkIGFmdGVyIDEuIHN0YXJ0aW5nIGFuIG5ldyBJQlNTLCAyLiBzdWNjZXNmdWxseSBKT0lOIGFuIElCU1MsCisvLyBvciAzLiBzdWNjZXNmdWxseSBBU1NPQ0lBVEUgdG8gYSBCU1MsIDQuIHN1Y2Nlc3NmdWxseSBSRV9BU1NPQ0lBVEUgdG8gYSBCU1MKKy8vIEFsbCBzZXR0aW5ncyBzdWNjZXNzZnVseSBuZWdvdGlhdGVkIGZ1cmluZyBNTE1FIHN0YXRlIG1hY2hpbmVzIGJlY29tZSBmaW5hbCBzZXR0aW5ncworLy8gYW5kIGFyZSBjb3BpZWQgdG8gcEFkLT5TdGFBY3RpdmUKKyNkZWZpbmUgQ09QWV9TRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcoX3BBZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+Q29tbW9uQ2ZnLlNzaWRMZW4gPSAoX3BBZCktPk1sbWVBdXguU3NpZExlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPkNvbW1vbkNmZy5Tc2lkLCAoX3BBZCktPk1sbWVBdXguU3NpZCwgKF9wQWQpLT5NbG1lQXV4LlNzaWRMZW4pOyBcCisJQ09QWV9NQUNfQUREUigoX3BBZCktPkNvbW1vbkNmZy5Cc3NpZCwgKF9wQWQpLT5NbG1lQXV4LkJzc2lkKTsgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSAoX3BBZCktPk1sbWVBdXguQ2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IChfcEFkKS0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbDsgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5TdGFBY3RpdmUuQWlkID0gKF9wQWQpLT5NbG1lQXV4LkFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+U3RhQWN0aXZlLkF0aW1XaW4gPSAoX3BBZCktPk1sbWVBdXguQXRpbVdpbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPlN0YUFjdGl2ZS5DYXBhYmlsaXR5SW5mbyA9IChfcEFkKS0+TWxtZUF1eC5DYXBhYmlsaXR5SW5mbzsgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gKF9wQWQpLT5NbG1lQXV4LkJlYWNvblBlcmlvZDsgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+U3RhQWN0aXZlLkNmcE1heER1cmF0aW9uID0gKF9wQWQpLT5NbG1lQXV4LkNmcE1heER1cmF0aW9uOyAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPlN0YUFjdGl2ZS5DZnBQZXJpb2QgPSAoX3BBZCktPk1sbWVBdXguQ2ZwUGVyaW9kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiA9IChfcEFkKS0+TWxtZUF1eC5TdXBSYXRlTGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCU5kaXNNb3ZlTWVtb3J5KChfcEFkKS0+U3RhQWN0aXZlLlN1cFJhdGUsIChfcEFkKS0+TWxtZUF1eC5TdXBSYXRlLCAoX3BBZCktPk1sbWVBdXguU3VwUmF0ZUxlbik7XAorCShfcEFkKS0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPSAoX3BBZCktPk1sbWVBdXguRXh0UmF0ZUxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPlN0YUFjdGl2ZS5FeHRSYXRlLCAoX3BBZCktPk1sbWVBdXguRXh0UmF0ZSwgKF9wQWQpLT5NbG1lQXV4LkV4dFJhdGVMZW4pO1wKKwlOZGlzTW92ZU1lbW9yeSgmKF9wQWQpLT5Db21tb25DZmcuQVBFZGNhUGFybSwgJihfcEFkKS0+TWxtZUF1eC5BUEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7XAorCU5kaXNNb3ZlTWVtb3J5KCYoX3BBZCktPkNvbW1vbkNmZy5BUFFvc0NhcGFiaWxpdHksICYoX3BBZCktPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpO1wKKwlOZGlzTW92ZU1lbW9yeSgmKF9wQWQpLT5Db21tb25DZmcuQVBRYnNzTG9hZCwgJihfcEFkKS0+TWxtZUF1eC5BUFFic3NMb2FkLCBzaXplb2YoUUJTU19MT0FEX1BBUk0pKTtcCisJQ09QWV9NQUNfQUREUigoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIChfcEFkKS0+TWxtZUF1eC5Cc3NpZCk7ICAgICAgXAorCShfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWlkID0gKF9wQWQpLT5NbG1lQXV4LkFpZDsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IChfcEFkKS0+U3RhQ2ZnLlBhaXJDaXBoZXI7XAorCUNPUFlfTUFDX0FERFIoKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5Cc3NJZCwgKF9wQWQpLT5NbG1lQXV4LkJzc2lkKTtcCisJKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SYXRlTGVuID0gKF9wQWQpLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIChfcEFkKS0+U3RhQWN0aXZlLkV4dFJhdGVMZW47XAorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIE1sbWVDbnRsSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTLAorCU9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKwkvLyBDb250cm9sIHN0YXRlIG1hY2hpbmUgZGlmZmVycyBmcm9tIG90aGVyIHN0YXRlIG1hY2hpbmVzLCB0aGUgaW50ZXJmYWNlCisJLy8gZm9sbG93cyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlCisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgTWxtZUNudGxNYWNoaW5lUGVyZm9ybUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlzd2l0Y2gocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSkKKwl7CisJCWNhc2UgQ05UTF9JRExFOgorCQkJeworCQkJCUNudGxJZGxlUHJvYyhwQWQsIEVsZW0pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ05UTF9XQUlUX0RJU0FTU09DOgorCQkJQ250bFdhaXREaXNhc3NvY1Byb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCQljYXNlIENOVExfV0FJVF9KT0lOOgorCQkJQ250bFdhaXRKb2luUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJLy8gQ05UTF9XQUlUX1JFQVNTT0MgaXMgdGhlIG9ubHkgc3RhdGUgaW4gQ05UTCBtYWNoaW5lIHRoYXQgZG9lcworCQkvLyBub3QgdHJpZ2dlcmVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgIlJUTVBTZXRJbmZvcm1hdGlvbihPSURfeHh4KSIuCisJCS8vIFRoZXJlZm9yZSBub3QgcHJvdGVjdGVkIGJ5IE5ESVMncyAib25seSBvbmUgb3V0c3RhbmRpbmcgT0lEIHJlcXVlc3QiCisJCS8vIHJ1bGUuIFdoaWNoIG1lYW5zIE5ESVMgbWF5IFNFVCBPSUQgaW4gdGhlIG1pZGRsZSBvZiBST0FNaW5nIGF0dGVtcHRzLgorCQkvLyBDdXJyZW50IGFwcHJvYWNoIGlzIHRvIGJsb2NrIG5ldyBTRVQgcmVxdWVzdCBhdCBSVE1QU2V0SW5mb3JtYXRpb24oKQorCQkvLyB3aGVuIENudGxNYWNoaW5lLkN1cnJTdGF0ZSBpcyBub3QgQ05UTF9JRExFCisJCWNhc2UgQ05UTF9XQUlUX1JFQVNTT0M6CisJCQlDbnRsV2FpdFJlYXNzb2NQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKworCQljYXNlIENOVExfV0FJVF9TVEFSVDoKKwkJCUNudGxXYWl0U3RhcnRQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBDTlRMX1dBSVRfQVVUSDoKKwkJCUNudGxXYWl0QXV0aFByb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCQljYXNlIENOVExfV0FJVF9BVVRIMjoKKwkJCUNudGxXYWl0QXV0aFByb2MyKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBDTlRMX1dBSVRfQVNTT0M6CisJCQlDbnRsV2FpdEFzc29jUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjoKKwkJCWlmKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1NDQU5fQ09ORikKKwkJCXsKKwkJCQkvLyBSZXN1bWUgVHhSaW5nIGFmdGVyIFNDQU5JTkcgY29tcGxldGUuIFdlIGhvcGUgdGhlIG91dC1vZi1zZXJ2aWNlIHRpbWUKKwkJCQkvLyB3b24ndCBiZSB0b28gbG9uZyB0byBsZXQgdXBwZXIgbGF5ZXIgdGltZS1vdXQgdGhlIHdhaXRpbmcgZnJhbWVzCisJCQkJUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24ocEFkKTsKKwkJCQlpZiAocEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSAhPSBNU1JOX1RZUEVfVU5VU0VEKQorCQkJCXsKKwkJCQkJLy8gQ2lzY28gc2NhbiByZXF1ZXN0IGlzIGZpbmlzaGVkLCBwcmVwYXJlIGJlYWNvbiByZXBvcnQKKwkJCQkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgMCwgTlVMTCk7CisJCQkJfQorCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisKKyAgICAgICAgICAgICAgICAvLworCQkJCS8vIFNldCBMRUQgc3RhdHVzIHRvIHByZXZpb3VzIHN0YXR1cy4KKwkJCQkvLworCQkJCWlmIChwQWQtPmJMZWRPblNjYW5uaW5nKQorCQkJCXsKKwkJCQkJcEFkLT5iTGVkT25TY2FubmluZyA9IEZBTFNFOworCQkJCQlSVE1QU2V0TEVEKHBBZCwgcEFkLT5MZWRTdGF0dXMpOworCQkJCX0KKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJCQkJLy8gQVAgc2VudCBhIDIwNDBDb2V4aXN0ZW5jZSBtZ210IGZyYW1lLCB0aGVuIHN0YXRpb24gcGVyZm9ybSBhIHNjYW4sIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgcmVzcG9uZS4KKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAuZmllbGQuSW5mb1JlcSA9PSAxKQorCQkJCXsKKwkJCQkJVXBkYXRlMjA0MENvZXhpc3RGcmFtZUFuZE5vdGlmeShwQWQsIEJTU0lEX1dDSUQsIFRSVUUpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJCQl9CisJCQlicmVhazsKKworCQljYXNlIENOVExfV0FJVF9PSURfRElTQVNTT0M6CisJCQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfRElTQVNTT0NfQ09ORikKKwkJCXsKKwkJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJfQorCQkJYnJlYWs7CisjaWZkZWYgUlQyODcwCisJCS8vCisJCS8vIFRoaXMgc3RhdGUgaXMgZm9yIHRoYXQgd2Ugd2FudCB0byBjb25uZWN0IHRvIGFuIEFQIGJ1dAorCQkvLyBpdCBkaWRuJ3QgZmluZCBvbiBCU1MgTGlzdCB0YWJsZS4gU28gd2UgbmVlZCB0byBzY2FuIHRoZSBhaXIgZmlyc3QsCisJCS8vIGFmdGVyIHRoYXQgd2UgY2FuIHRyeSB0byBjb25uZWN0IHRvIHRoZSBkZXNpcmVkIEFQIGlmIGF2YWlsYWJsZS4KKwkJLy8KKwkJY2FzZSBDTlRMX1dBSVRfU0NBTl9GT1JfQ09OTkVDVDoKKwkJCWlmKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1NDQU5fQ09ORikKKwkJCXsKKwkJCQkvLyBSZXN1bWUgVHhSaW5nIGFmdGVyIFNDQU5JTkcgY29tcGxldGUuIFdlIGhvcGUgdGhlIG91dC1vZi1zZXJ2aWNlIHRpbWUKKwkJCQkvLyB3b24ndCBiZSB0b28gbG9uZyB0byBsZXQgdXBwZXIgbGF5ZXIgdGltZS1vdXQgdGhlIHdhaXRpbmcgZnJhbWVzCisJCQkJUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24ocEFkKTsKKyNpZmRlZiBDQ1hfU1VQUE9SVAorCQkJCWlmIChwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICE9IE1TUk5fVFlQRV9VTlVTRUQpCisJCQkJeworCQkJCQkvLyBDaXNjbyBzY2FuIHJlcXVlc3QgaXMgZmluaXNoZWQsIHByZXBhcmUgYmVhY29uIHJlcG9ydAorCQkJCQlNbG1lRW5xdWV1ZShwQWQsIEFJUk9ORVRfU1RBVEVfTUFDSElORSwgTVQyX0FJUk9ORVRfU0NBTl9ET05FLCAwLCBOVUxMKTsKKwkJCQl9CisjZW5kaWYgLy8gQ0NYX1NVUFBPUlQgLy8KKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCisJCQkJLy8KKwkJCQkvLyBDaGVjayBpZiB3ZSBjYW4gY29ubmVjdCB0by4KKwkJCQkvLworCQkJCUJzc1RhYmxlU3NpZFNvcnQocEFkLCAmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKwkJCQlpZiAocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPiAwKQorCQkJCXsKKwkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFJUMjg3MCAvLworCQlkZWZhdWx0OgorCQkJREJHUFJJTlRfRVJSKCgiIUVSUk9SISBDTlRMIC0gSWxsZWdhbCBtZXNzYWdlIHR5cGUoPSVsZCkiLCBFbGVtLT5Nc2dUeXBlKSk7CisJCQlicmVhazsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bElkbGVQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgICBEaXNhc3NvY1JlcTsKKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkKKwkJcmV0dXJuOworCisJc3dpdGNoKEVsZW0tPk1zZ1R5cGUpCisJeworCQljYXNlIE9JRF84MDJfMTFfU1NJRDoKKwkJCUNudGxPaWRTc2lkUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0JTU0lEOgorCQkJQ250bE9pZFJUQnNzaWRQcm9jKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU46CisJCQlDbnRsT2lkU2NhblByb2MocEFkLEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0RJU0FTU09DSUFURToKKyNpZmRlZiBSQUxJTktfQVRFCisJCQlpZihBVEVfT04ocEFkKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOworCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9FTkFCTEVfV0lUSF9XRUJfVUkpCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgeworICAgIAkJCS8vIFNldCB0aGUgQXV0b1JlY29ubmVjdFNzaWQgdG8gcHJldmVudCBpdCByZWNvbm5lY3QgdG8gb2xkIFNTSUQKKyAgICAJCQkvLyBTaW5jZSBjYWxsaW5nIHRoaXMgaW5kaWNhdGUgdXNlciBkb24ndCB3YW50IHRvIGNvbm5lY3QgdG8gdGhhdCBTU0lEIGFueW1vcmUuCisgICAgCQkJcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKyAgICAJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisgICAgICAgICAgICB9CisJCQlicmVhazsKKworCQljYXNlIE1UMl9NTE1FX1JPQU1JTkdfUkVROgorCQkJQ250bE1sbWVSb2FtaW5nUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfODAyXzExX01JQ19GQUlMVVJFX1JFUE9SVF9GUkFNRToKKyAgICAgICAgICAgIFdwYU1pY0ZhaWx1cmVSZXBvcnRGcmFtZShwQWQsIEVsZW0pOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU06CisJCQlDbnRsT2lkRExTU2V0dXBQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIElsbGVnYWwgbWVzc2FnZSBpbiBDbnRsSWRsZVByb2MoTXNnVHlwZT0lbGQpXG4iLEVsZW0tPk1zZ1R5cGUpKTsKKwkJCWJyZWFrOworCX0KK30KKworVk9JRCBDbnRsT2lkU2NhblByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCU1MTUVfU0NBTl9SRVFfU1RSVUNUICAgICAgIFNjYW5SZXE7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgICAgQnNzSWR4ID0gQlNTX05PVF9GT1VORDsKKwlCU1NfRU5UUlkgICAgICAgICAgICAgICAgICBDdXJyQnNzOworCisjaWZkZWYgUkFMSU5LX0FURQorLyogRGlzYWJsZSBzY2FubmluZyB3aGVuIEFURSBpcyBydW5uaW5nLiAqLworCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCisJLy8gcmVjb3JkIGN1cnJlbnQgQlNTIGlmIG5ldHdvcmsgaXMgY29ubmVjdGVkLgorCS8vIDIwMDMtMi0xMyBkbyBub3QgaW5jbHVkZSBjdXJyZW50IElCU1MgaWYgdGhpcyBpcyB0aGUgb25seSBTVEEgaW4gdGhpcyBJQlNTLgorCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJeworCQlCc3NJZHggPSBCc3NTc2lkVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQlpZiAoQnNzSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZDdXJyQnNzLCAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJfQorCX0KKworCS8vIGNsZWFuIHVwIHByZXZpb3VzIFNDQU4gcmVzdWx0LCBhZGQgY3VycmVudCBCU1MgYmFjayB0byB0YWJsZSBpZiBhbnkKKwlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisJaWYgKEJzc0lkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJLy8gRERLIE5vdGU6IElmIHRoZSBOSUMgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBCU1NJRCBhbmQgU1NJRAorCQkvLyAgICB0aGF0IGFyZSBub3QgY29udGFpbmVkIGluIHRoZSBsaXN0IG9mIEJTU0lEcyBnZW5lcmF0ZWQgYnkgdGhpcyBzY2FuLCB0aGUKKwkJLy8gICAgQlNTSUQgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnRseSBhc3NvY2lhdGVkIEJTU0lEIGFuZCBTU0lEIHNob3VsZCBiZQorCQkvLyAgICBhcHBlbmRlZCB0byB0aGUgbGlzdCBvZiBCU1NJRHMgaW4gdGhlIE5JQydzIGRhdGFiYXNlLgorCQkvLyBUbyBlbnN1cmUgdGhpcywgd2UgYXBwZW5kIHRoaXMgQlNTIGFzIHRoZSBmaXJzdCBlbnRyeSBpbiBTQ0FOIHJlc3VsdAorCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5WzBdLCAmQ3VyckJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCQlwQWQtPlNjYW5UYWIuQnNzTnIgPSAxOworCX0KKworCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCAiIiwgMCwgQlNTX0FOWSwgU0NBTl9BQ1RJVkUpOworCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwKKwkJc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNjYW5SZXEpOworCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlCZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUsIHVzZXIgZGVzaXJlZCBTU0lEIHNob3VsZCBhbHJlYWR5IGJlZW4KKwkJcmVjb3JkZWQgaW4gQ29tbW9uQ2ZnLlNzaWRbXQorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxPaWRTc2lkUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKiBFbGVtKQoreworCVBORElTXzgwMl8xMV9TU0lEICAgICAgICAgIHBPaWRTc2lkID0gKE5ESVNfODAyXzExX1NTSUQgKilFbGVtLT5Nc2c7CisJTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgRGlzYXNzb2NSZXE7CisJVUxPTkcJCQkJCSAgIE5vdzsKKworCS8vIFN0ZXAgMS4gcmVjb3JkIHRoZSBkZXNpcmVkIHVzZXIgc2V0dGluZ3MgdG8gTWxtZUF1eAorCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBwT2lkU3NpZC0+U3NpZCwgcE9pZFNzaWQtPlNzaWRMZW5ndGgpOworCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gKFVDSEFSKXBPaWRTc2lkLT5Tc2lkTGVuZ3RoOworCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKwlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IHBBZC0+U3RhQ2ZnLkJzc1R5cGU7CisKKworCS8vCisJLy8gVXBkYXRlIFJlY29ubmVjdCBTc2lkLCB0aGF0IHVzZXIgZGVzaXJlZCB0byBjb25uZWN0LgorCS8vCisJTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSBwQWQtPk1sbWVBdXguU3NpZExlbjsKKworCS8vIHN0ZXAgMi4gZmluZCBhbGwgbWF0Y2hpbmcgQlNTIGluIHRoZSBsYXN0ZXN0IFNDQU4gcmVzdWx0IChpbkJzc1RhYikKKwkvLyAgICAmIGxvZyB0aGVtIGludG8gTWxtZUF1eC5Tc2lkQnNzVGFiIGZvciBsYXRlci1vbiBpdGVyYXRpb24uIFNvcnQgYnkgUlNTSSBvcmRlcgorCUJzc1RhYmxlU3NpZFNvcnQocEFkLCAmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gJWQgQlNTIG9mICVkIEJTUyBtYXRjaCB0aGUgZGVzaXJlICglZClTU0lEIC0gJXNcbiIsCisJCQlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciwgcEFkLT5TY2FuVGFiLkJzc05yLCBwQWQtPk1sbWVBdXguU3NpZExlbiwgcEFkLT5NbG1lQXV4LlNzaWQpKTsKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCisJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJgorCQkocEFkLT5Db21tb25DZmcuU3NpZExlbiA9PSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVswXS5Tc2lkTGVuKSAmJgorCQlOZGlzRXF1YWxNZW1vcnkocEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbMF0uU3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZExlbikgJiYKKwkJTUFDX0FERFJfRVFVQUwocEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLkJzc2lkKSkKKwl7CisJCS8vIENhc2UgMS4gYWxyZWFkeSBjb25uZWN0ZWQgd2l0aCBhbiBBUCB3aG8gaGFzIHRoZSBkZXNpcmVkIFNTSUQKKwkJLy8gICAgICAgICB3aXRoIGhpZ2hlc3QgUlNTSQorCisJCS8vIEFkZCBjaGVja2luZyBNb2RlICJMRUFQIiBmb3IgQ0NYIDEuMAorCQlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisJCQkgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKwkJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwKKwkJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCSB8fCAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCSApICYmCisJCQkocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkJeworCQkJLy8gY2FzZSAxLjEgRm9yIFdQQSwgV1BBLVBTSywgaWYgdGhlIDF4IHBvcnQgaXMgbm90IHNlY3VyZWQsIHdlIGhhdmUgdG8gcmVkbworCQkJLy8gICAgICAgICAgY29ubmVjdGlvbiBwcm9jZXNzCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIikpOworCQkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORyk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKKwkJCQkJCXNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwkJfQorCQllbHNlIGlmIChwQWQtPmJDb25maWdDaGFuZ2VkID09IFRSVUUpCisJCXsKKwkJCS8vIGNhc2UgMS4yIEltcG9ydGFudCBDb25maWcgaGFzIGNoYW5nZWQsIHdlIGhhdmUgdG8gcmVjb25uZWN0IHRvIHRoZSBzYW1lIEFQCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCBCZWNhdXNlIGNvbmZpZyBjaGFuZ2VkLi4uXG4iKSk7CisJCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLAorCQkJCQkJc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCksICZEaXNhc3NvY1JlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gY2FzZSAxLjMuIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBTU0lEIHdpdGggaGlnaGVzdCBSU1NJLgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGFscmVhZHkgd2l0aCB0aGlzIEJTU0lELiBpZ25vcmUgdGhpcyBTRVRfU1NJRCByZXF1ZXN0XG4iKSk7CisJCQkvLworCQkJLy8gKEhDVCAxMi4xKSAxY193bGFuX21lZGlhZXZlbnRzIHJlcXVpcmVkCisJCQkvLyBtZWRpYSBjb25uZWN0IGV2ZW50cyBhcmUgaW5kaWNhdGVkIHdoZW4gYXNzb2NpYXRpbmcgd2l0aCB0aGUgc2FtZSBBUAorCQkJLy8KKwkJCWlmIChJTkZSQV9PTihwQWQpKQorCQkJeworCQkJCS8vCisJCQkJLy8gU2luY2UgTWVkaWFTdGF0ZSBhbHJlYWR5IGlzIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkCisJCQkJLy8gV2UganVzdCBpbmRpY2F0ZSB0aGUgY29ubmVjdCBldmVudCBhZ2FpbiB0byBtZWV0IHRoZSBXSFFMIHJlcXVpcmVkLgorCQkJCS8vCisJCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOyAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbiB0byBsaW5rIGlzIHVwCisJCQl9CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJfQorCX0KKwllbHNlIGlmIChJTkZSQV9PTihwQWQpKQorCXsKKwkJLy8KKwkJLy8gRm9yIFJUNjEKKwkJLy8gWzg4ODg4XSBPSURfODAyXzExX1NTSUQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgTkRURVNUX1dFUF9BUDIoUmV0dXJuZWQ6ICkKKwkJLy8gUlQ2MSBtYXkgbG9zdCBTU0lELCBhbmQgbm90IGNvbm5lY3QgdG8gTkRURVNUX1dFUF9BUDIgYW5kIHdpbGwgY29ubmVjdCB0byBORFRFU1RfV0VQX0FQMiBieSBBdXRvcmVjb25uZWN0CisJCS8vIEJ1dCBtZWRpYSBzdGF0dXMgaXMgY29ubmVjdGVkLCBzbyB0aGUgU1NJRCBub3QgcmVwb3J0IGNvcnJlY3RseS4KKwkJLy8KKwkJaWYgKCFTU0lEX0VRVUFMKHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbikpCisJCXsKKwkJCS8vCisJCQkvLyBEaWZmZXJlbnQgU1NJRCBtZWFucyBub3QgUm9hbWluZyBjYXNlLCBzbyB3ZSBsZXQgTGlua0Rvd24oKSB0byBJbmRpY2F0ZSBhIGRpc2Nvbm5lY3QgZXZlbnQuCisJCQkvLworCQkJcEFkLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gVFJVRTsKKwkJfQorCQkvLyBjYXNlIDIuIGFjdGl2ZSBJTkZSQSBhc3NvY2lhdGlvbiBleGlzdGVudAorCQkvLyAgICByb2FtaW5nIGlzIGRvbmUgd2l0aGluIG1pbmlwb3J0IGRyaXZlciwgbm90aGluZyB0byBkbyB3aXRoIGNvbmZpZ3VyYXRpb24KKwkJLy8gICAgdXRpbGl0eS4gc28gdXBvbiBhIG5ldyBTRVQoT0lEXzgwMl8xMV9TU0lEKSBpcyByZWNlaXZlZCwgd2UganVzdAorCQkvLyAgICBkaXNhc3NvY2lhdGUgd2l0aCB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQLAorCQkvLyAgICB0aGVuIHBlcmZvcm0gYSBuZXcgYXNzb2NpYXRpb24gd2l0aCB0aGlzIG5ldyBTU0lELCBubyBtYXR0ZXIgdGhlCisJCS8vICAgIG5ldy9vbGQgU1NJRCBhcmUgdGhlIHNhbWUgb3Igbm90LgorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIikpOworCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKKwkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCisJCQkJCXNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOworCX0KKwllbHNlCisJeworCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRyb3AgY3VycmVudCBBREhPQ1xuIikpOworCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6TkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBDIVxuIikpOworCQl9CisKKwkJaWYgKChwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9PSAwKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID09IFRSVUUpICYmCisJCQkocEFkLT5NbG1lQXV4LkJzc1R5cGUgPT0gQlNTX0lORlJBKSAmJgorCQkJKE1sbWVWYWxpZGF0ZVNTSUQocEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKSA9PSBUUlVFKQorCQkJKQorCQl7CisJCQlNTE1FX1NDQU5fUkVRX1NUUlVDVCAgICAgICBTY2FuUmVxOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gTm8gbWF0Y2hpbmcgQlNTLCBzdGFydCBhIG5ldyBzY2FuXG4iKSk7CisJCQlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCBCU1NfQU5ZLCBTQ0FOX0FDVElWRSk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKwkJCS8vIFJlc2V0IE1pc3NlZCBzY2FuIG51bWJlcgorCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7CisJCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKKwkJfQorCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsT2lkUlRCc3NpZFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICogRWxlbSkKK3sKKwlVTE9ORyAgICAgICBCc3NJZHg7CisJUFVDSEFSICAgICAgcE9pZEJzc2lkID0gKFBVQ0hBUilFbGVtLT5Nc2c7CisJTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgIERpc2Fzc29jUmVxOworCU1MTUVfSk9JTl9SRVFfU1RSVUNUICAgICAgICBKb2luUmVxOworCisjaWZkZWYgUkFMSU5LX0FURQorLyogTm8gbmVlZCB0byBwZXJmb3JtIHRoaXMgcm91dGluZSB3aGVuIEFURSBpcyBydW5uaW5nLiAqLworCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCS8vIHJlY29yZCB1c2VyIGRlc2lyZWQgc2V0dGluZ3MKKwlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgcE9pZEJzc2lkKTsKKwlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IHBBZC0+U3RhQ2ZnLkJzc1R5cGU7CisKKwkvLworCS8vIFVwZGF0ZSBSZWNvbm5lY3QgU3NpZCwgdGhhdCB1c2VyIGRlc2lyZWQgdG8gY29ubmVjdC4KKwkvLworCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSBwQWQtPk1sbWVBdXguU3NpZExlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisKKwkvLyBmaW5kIHRoZSBkZXNpcmVkIEJTUyBpbiB0aGUgbGF0ZXN0IFNDQU4gcmVzdWx0IHRhYmxlCisJQnNzSWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcE9pZEJzc2lkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7CisJaWYgKEJzc0lkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEJTU0lEIG5vdCBmb3VuZC4gcmVwbHkgTkRJU19TVEFUVVNfTk9UX0FDQ0VQVEVEXG4iKSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCXJldHVybjsKKwl9CisKKwkvLyBjb3B5IHRoZSBtYXRjaGVkIEJTUyBlbnRyeSBmcm9tIFNjYW5UYWIgdG8gTWxtZUF1eC5Tc2lkQnNzVGFiLiBXaHk/CisJLy8gQmVjYXVzZSB3ZSBuZWVkIHRoaXMgZW50cnkgdG8gYmVjb21lIHRoZSBKT0lOIHRhcmdldCBpbiBsYXRlciBvbiBTWU5DIHN0YXRlIG1hY2hpbmUKKwlwQWQtPk1sbWVBdXguQnNzSWR4ID0gMDsKKwlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9IDE7CisJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLCAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0sIHNpemVvZihCU1NfRU5UUlkpKTsKKworCS8vcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZExlbjsKKwkvL05kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZCwgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZExlbik7CisKKwkvLyBBZGQgU1NJRCBpbnRvIE1sbWVBdXggZm9yIHNpdGUgc3VyZXkgam9pbmluZyBoaWRkZW4gU1NJRAorCS8vcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5Tc2lkTGVuOworCS8vTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKworCS8vIDIwMDItMTEtMjYgc2tpcCB0aGUgZm9sbG93aW5nIGNoZWNraW5nLiBpLmUuIGlmIHVzZXIgd2FudHMgdG8gcmUtY29ubmVjdCB0byBzYW1lIEFQCisJLy8gICB3ZSBqdXN0IGZvbGxvdyBub3JtYWwgcHJvY2VkdXJlLiBUaGUgcmVhc29uIG9mIHVzZXIgZG9pbmcgdGhpcyBtYXkgYmVjYXVzZSBoZS9zaGUgY2hhbmdlZAorCS8vICAgQVAgdG8gYW5vdGhlciBjaGFubmVsLCBidXQgd2Ugc3RpbGwgcmVjZWl2ZWQgQkVBQ09OIGZyb20gaXQgdGh1cyBkb24ndCBjbGFpbSBMaW5rIERvd24uCisJLy8gICBTaW5jZSB1c2VyIGtub3dzIGhlJ3MgY2hhbmdlZCBBUCBjaGFubmVsLCBoZSdsbCByZS1jb25uZWN0IGFnYWluLiBCeSBza2lwcGluZyB0aGUgZm9sbG93aW5nCisJLy8gICBjaGVja2luZywgd2UnbGwgZGlzYXNzb2NpYXRlIHRoZW4gcmUtZG8gbm9ybWFsIGFzc29jaWF0aW9uIHdpdGggdGhpcyBBUCBhdCB0aGUgbmV3IGNoYW5uZWwuCisJLy8gMjAwMy0xLTYgUmUtZW5hYmxlIHRoaXMgZmVhdHVyZSBiYXNlZCBvbiBtaWNyb3NvZnQgcmVxdWlyZW1lbnQgd2hpY2ggcHJlZmVyIG5vdCB0byByZS1kbworCS8vICAgY29ubmVjdGlvbiB3aGVuIHNldHRpbmcgdGhlIHNhbWUgQlNTSUQuCisJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJgorCQlNQUNfQUREUl9FUVVBTChwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcE9pZEJzc2lkKSkKKwl7CisJCS8vIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBzYW1lIEJTU0lELCBnbyBiYWNrIHRvIGlkbGUgc3RhdGUgZGlyZWN0bHkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGFscmVhZHkgaW4gdGhpcyBCU1NJRC4gaWdub3JlIHRoaXMgU0VUX0JTU0lEIHJlcXVlc3RcbiIpKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKworICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCX0KKwllbHNlCisJeworCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJeworCQkJLy8gZGlzYXNzb2MgZnJvbSBjdXJyZW50IEFQIGZpcnN0CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCAuLi5cbiIpKTsKKwkJCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOworCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCisJCQkJCQlzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChBREhPQ19PTihwQWQpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBkcm9wIGN1cnJlbnQgQURIT0NcbiIpKTsKKwkJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKyAgICAgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQyFcbiIpKTsKKwkJCX0KKworCQkJLy8gQ2hhbmdlIHRoZSB3ZXBzdGF0dXMgdG8gb3JpZ2luYWwgd2Vwc3RhdHVzCisJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMgICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisKKwkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKKwkJCS8vIFNldCB0aGUgUGFpcndpc2UgYW5kIEdyb3VwIGNpcGhlciB0byBtYXRjaCB0aGUgaW50ZW5kZWQgQVAgc2V0dGluZworCQkJLy8gV2UgY2FuIG9ubHkgY29ubmVjdCB0byBBUCB3aXRoIGxlc3Mgc2VjdXJlZCBjaXBoZXIgc2V0dGluZworCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKQorCQkJeworCQkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLkdyb3VwQ2lwaGVyOworCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlcikKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyOworCQkJCWVsc2UgaWYgKHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyQXV4OworCQkJCWVsc2UJLy8gVGhlcmUgaXMgbm8gUGFpckNpcGhlciBBdXgsIGRvd25ncmFkZSBvdXIgY2FwYWJpbGl0eSB0byBUS0lQCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJfQorCQkJZWxzZSBpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKKwkJCXsKKwkJCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuR3JvdXBDaXBoZXI7CisKKwkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcikKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcjsKKwkJCQllbHNlIGlmIChwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXJBdXggIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorCQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyQXV4OworCQkJCWVsc2UJLy8gVGhlcmUgaXMgbm8gUGFpckNpcGhlciBBdXgsIGRvd25ncmFkZSBvdXIgY2FwYWJpbGl0eSB0byBUS0lQCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCisJCQkJLy8gUlNOIGNhcGFiaWxpdHkKKwkJCQlwQWQtPlN0YUNmZy5Sc25DYXBhYmlsaXR5ID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5Sc25DYXBhYmlsaXR5OworCQkJfQorCisJCQkvLyBTZXQgTWl4IGNpcGhlciBmbGFnCisJCQlwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyID0gKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIpID8gRkFMU0UgOiBUUlVFOworCQkJaWYgKHBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgPT0gVFJVRSkKKwkJCXsKKwkJCQkvLyBJZiBtaXggY2lwaGVyLCByZS1idWlsZCBSU05JRQorCQkJCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCAwKTsKKwkJCX0KKwkJCS8vIE5vIGFjdGl2ZSBhc3NvY2lhdGlvbiwgam9pbiB0aGUgQlNTIGltbWVkaWF0ZWx5CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gam9pbmluZyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAuLi5cbiIsCisJCQkJcE9pZEJzc2lkWzBdLHBPaWRCc3NpZFsxXSxwT2lkQnNzaWRbMl0scE9pZEJzc2lkWzNdLHBPaWRCc3NpZFs0XSxwT2lkQnNzaWRbNV0pKTsKKworCQkJSm9pblBhcm1GaWxsKHBBZCwgJkpvaW5SZXEsIHBBZC0+TWxtZUF1eC5Cc3NJZHgpOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0pPSU5fUkVRLCBzaXplb2YoTUxNRV9KT0lOX1JFUV9TVFJVQ1QpLCAmSm9pblJlcSk7CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfSk9JTjsKKwkJfQorCX0KK30KKworLy8gUm9hbWluZyBpcyB0aGUgb25seSBleHRlcm5hbCByZXF1ZXN0IHRyaWdnZXJpbmcgQ05UTCBzdGF0ZSBtYWNoaW5lCisvLyBkZXNwaXRlIG9mIG90aGVyICJTRVQgT0lEIiBvcGVyYXRpb24uIEFsbCAiU0VUIE9JRCIgcmVsYXRlZCBvZXJhdGlvbnMKKy8vIGhhcHBlbiBpbiBzZXF1ZW5jZSwgYmVjYXVzZSBubyBvdGhlciBTRVQgT0lEIHdpbGwgYmUgc2VudCB0byB0aGlzIGRldmljZQorLy8gdW50aWwgdGhlIHRoZSBwcmV2aW91cyBTRVQgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIChzdWNjZXNzZnVsIG8gZmFpbGVkKS4KKy8vIFNvLCBob3cgZG8gd2UgcXVhcmFudGVlIHRoaXMgUk9BTUlORyByZXF1ZXN0IHdvbid0IGNvcnJ1cHQgb3RoZXIgIlNFVCBPSUQiPworLy8gb3IgYmVlbiBjb3JydXB0ZWQgYnkgb3RoZXIgIlNFVCBPSUQiPworLy8KKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBDbnRsTWxtZVJvYW1pbmdQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwkvLyBUT0RPOgorCS8vIEFQIGluIGRpZmZlcmVudCBjaGFubmVsIG1heSBzaG93IGxvd2VyIFJTU0kgdGhhbiBhY3R1YWwgdmFsdWU/PworCS8vIHNob3VsZCB3ZSBhZGQgYSB3ZWlnaHRpbmcgZmFjdG9yIHRvIGNvbXBlbnNhdGUgaXQ/CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gUm9hbWluZyBpbiBNbG1lQXV4LlJvYW1UYWIuLi5cbiIpKTsKKworCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYiwgJnBBZC0+TWxtZUF1eC5Sb2FtVGFiLCBzaXplb2YocEFkLT5NbG1lQXV4LlJvYW1UYWIpKTsKKwlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9IHBBZC0+TWxtZUF1eC5Sb2FtVGFiLkJzc05yOworCisJQnNzVGFibGVTb3J0QnlSc3NpKCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYik7CisJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7CisJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7Cit9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxPaWRETFNTZXR1cFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBSVF84MDJfMTFfRExTCQlwRExTID0gKFBSVF84MDJfMTFfRExTKUVsZW0tPk1zZzsKKwlNTE1FX0RMU19SRVFfU1RSVUNUCU1sbWVEbHNSZXE7CisJSU5UCQkJCQlpOworCVVTSE9SVAkJCQlyZWFzb24gPSBSRUFTT05fVU5TUEVDSUZZOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gKE9JRCBzZXQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggd2l0aCBWYWxpZD0lZCwgU3RhdHVzPSVkLCBUaW1lT3V0PSVkLCBDb3VudERvd25UaW1lcj0lZClcbiIsCisJCXBETFMtPk1hY0FkZHJbMF0sIHBETFMtPk1hY0FkZHJbMV0sIHBETFMtPk1hY0FkZHJbMl0sIHBETFMtPk1hY0FkZHJbM10sIHBETFMtPk1hY0FkZHJbNF0sIHBETFMtPk1hY0FkZHJbNV0sCisJCXBETFMtPlZhbGlkLCBwRExTLT5TdGF0dXMsIHBETFMtPlRpbWVPdXQsIHBETFMtPkNvdW50RG93blRpbWVyKSk7CisKKwlpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQlyZXR1cm47CisKKwkvLyBETFMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIHdoZW4gQWRob2MgbW9kZQorCWlmIChJTkZSQV9PTihwQWQpKQorCXsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwRExTLT5WYWxpZCAmJiBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJKHBETFMtPlRpbWVPdXQgPT0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCkgJiYgTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJLy8gMS4gU2FtZSBzZXR0aW5nLCBqdXN0IGRyb3AgaXQKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBzZXR0aW5nIHVuY2hhbmdlZFxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoIXBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkgJiYKKwkJCQlNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQkvLyAyLiBEaXNhYmxlIERMUyBsaW5rIGNhc2UsIGp1c3QgdGVhciBkb3duIERMUyBsaW5rCisJCQkJcmVhc29uID0gUkVBU09OX1FPU19VTldBTlRFRF9NRUNIQU5JU007CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gc3RhcnQgdGVhciBkb3duIHByb2NlZHVyZVxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoKGkgPCBNQVhfTlVNX09GX0RMU19FTlRSWSkgJiYgcERMUy0+VmFsaWQgJiYgIXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkKQorCQkJeworCQkJCS8vIDMuIEVuYWJsZSBjYXNlLCBzdGFydCBETFMgc2V0dXAgcHJvY2VkdXJlCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCBwRExTLCBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpOworCisJCQkJLy9VcGRhdGUgY291bnRkb3duIHRpbWVyCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgPSBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0OworCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfUkVRLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBETFMgc2V0dXAgY2FzZVxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoKGkgPCBNQVhfTlVNX09GX0RMU19FTlRSWSkgJiYgcERMUy0+VmFsaWQgJiYgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYKKwkJCQkocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmICFNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQkvLyA0LiB1cGRhdGUgbWFjIGNhc2UsIHRlYXIgZG93biBvbGQgRExTIGFuZCBzZXR1cCBuZXcgRExTCisJCQkJcmVhc29uID0gUkVBU09OX1FPU19VTldBTlRFRF9NRUNIQU5JU007CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCBwRExTLCBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpOworCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfUkVRLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBETFMgdGVhciBkb3duIGFuZCByZXN0YXJ0IGNhc2VcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKHBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgIT0gcERMUy0+VGltZU91dCkpCisJCQl7CisJCQkJLy8gNS4gdXBkYXRlIHRpbWVvdXQgY2FzZSwgc3RhcnQgRExTIHNldHVwIHByb2NlZHVyZSAobm8gdGVhciBkb3duKQorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQJPSBwRExTLT5UaW1lT3V0OworCQkJCS8vVXBkYXRlIGNvdW50ZG93biB0aW1lcgorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dDsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1JFUSwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gRExTIHVwZGF0ZSB0aW1lb3V0IGNhc2VcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKHBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmCisJCQkJKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyAhPSBETFNfRklOSVNIKSAmJiBNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQkvLyA2LiByZS1zZXR1cCBjYXNlLCBzdGFydCBETFMgc2V0dXAgcHJvY2VkdXJlIChubyB0ZWFyIGRvd24pCisJCQkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCByZWFzb24pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19SRVEsIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQ05UTCAtIERMUyByZXRyeSBzZXR1cCBwcm9jZWR1cmVcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCgiQ05UTCAtIERMUyBub3QgY2hhbmdlZCBpbiBlbnRyeSAtICVkIC0gVmFsaWQ9JWQsIFN0YXR1cz0lZCwgVGltZU91dD0lZFxuIiwKKwkJCQkJaSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cywgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCkpOworCQkJfQorCQl9CisJfQorfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdERpc2Fzc29jUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJTUxNRV9TVEFSVF9SRVFfU1RSVUNUICAgICBTdGFydFJlcTsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9ESVNBU1NPQ19DT05GKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIERpcy1hc3NvY2lhdGUgc3VjY2Vzc2Z1bFxuIikpOworCisJICAgIGlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJeworCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfRElTQVNTT0NfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJfQorCisJCUxpbmtEb3duKHBBZCwgRkFMU0UpOworCisJCS8vIGNhc2UgMS4gbm8gbWF0Y2hpbmcgQlNTLCBhbmQgdXNlciB3YW50cyBBREhPQywgc28gd2UganVzdCBzdGFydCBhIG5ldyBvbmUKKwkJaWYgKChwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOcj09MCkgJiYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIE5vIG1hdGNoaW5nIEJTUywgc3RhcnQgYSBuZXcgQURIT0MgKFNzaWQ9JXMpLi4uXG4iLHBBZC0+TWxtZUF1eC5Tc2lkKSk7CisJCQlTdGFydFBhcm1GaWxsKHBBZCwgJlN0YXJ0UmVxLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgc2l6ZW9mKE1MTUVfU1RBUlRfUkVRX1NUUlVDVCksICZTdGFydFJlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX1NUQVJUOworCQl9CisJCS8vIGNhc2UgMi4gdHJ5IGVhY2ggbWF0Y2hlZCBCU1MKKwkJZWxzZQorCQl7CisJCQlwQWQtPk1sbWVBdXguQnNzSWR4ID0gMDsKKworCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxXYWl0Sm9pblByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgICAgICAgICAgICAgICAgICBSZWFzb247CisJTUxNRV9BVVRIX1JFUV9TVFJVQ1QgICAgICAgIEF1dGhSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfSk9JTl9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQkvLyAxLiBqb2luZWQgYW4gSUJTUywgd2UgYXJlIHByZXR0eSBtdWNoIGRvbmUgaGVyZQorCQkJaWYgKHBBZC0+TWxtZUF1eC5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCXsKKwkJCSAgICAvLworCQkJCS8vIDVHIGJhbmRzIHJ1bGVzIG9mIEphcGFuOgorCQkJCS8vIEFkIGhvYyBtdXN0IGJlIGRpc2FibGVkIGluIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVscy4KKwkJCQkvLworCQkJCWlmICggKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmCisgICAgICAgICAgICAgICAgICAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCSAgICkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBDaGFubmVsPSVkLCBKb2luIGFkaG9jIG9uIFc1Myg1Miw1Niw2MCw2NCkgQ2hhbm5lbHMgYXJlIG5vdCBhY2NlcHRlZFxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJTGlua1VwKHBBZCwgQlNTX0FESE9DKTsKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBqb2luIHRoZSBJQlNTID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLi4uXG4iLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzBdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzFdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzJdLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzNdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzRdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzVdKSk7CisKKyAgICAgICAgICAgICAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOworCQkJfQorCQkJLy8gMi4gam9pbmVkIGEgbmV3IElORlJBIG5ldHdvcmssIHN0YXJ0IGZyb20gYXV0aGVudGljYXRpb24KKwkJCWVsc2UKKwkJCXsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCQkvLyBBZGQgQXV0aE1vZGUgIkxFQVAiIGZvciBDQ1ggMS5YCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisJCQkJeworCQkJCQlBdXRoUGFybUZpbGwocEFkLCAmQXV0aFJlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBDSVNDT19BdXRoTW9kZUxFQVApOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQkJeworCQkJCQkvLyBlaXRoZXIgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkIG9yIE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gsIHRyeSBzaGFyZWQga2V5IGZpcnN0CisJCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSB8fAorCQkJCQkJKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpKQorCQkJCQl7CisJCQkJCQlBdXRoUGFybUZpbGwocEFkLCAmQXV0aFJlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlT3Blbik7CisJCQkJCX0KKwkJCQl9CisJCQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FVVEhfUkVRX1NUUlVDVCksICZBdXRoUmVxKTsKKworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfQVVUSDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIDMuIGZhaWxlZCwgdHJ5IG5leHQgQlNTCisJCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7CisJCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKKwkJfQorCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdFN0YXJ0UHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgUmVzdWx0OworCisJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1NUQVJUX0NPTkYpCisJeworCQlOZGlzTW92ZU1lbW9yeSgmUmVzdWx0LCBFbGVtLT5Nc2csIHNpemVvZihVU0hPUlQpKTsKKwkJaWYgKFJlc3VsdCA9PSBNTE1FX1NVQ0NFU1MpCisJCXsKKwkJICAgIC8vCisJCQkvLyA1RyBiYW5kcyBydWxlcyBvZiBKYXBhbjoKKwkJCS8vIEFkIGhvYyBtdXN0IGJlIGRpc2FibGVkIGluIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVscy4KKwkJCS8vCisJCQlpZiAoIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJgorICAgICAgICAgICAgICAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJICAgKQorCQkJeworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIENoYW5uZWw9JWQsIFN0YXJ0IGFkaG9jIG9uIFc1Myg1Miw1Niw2MCw2NCkgQ2hhbm5lbHMgYXJlIG5vdCBhY2NlcHRlZFxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCXJldHVybjsKKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJTl9DaGFubmVsQ2hlY2socEFkKTsKKwkJCQlTZXRDb21tb25IVChwQWQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLCAmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKwkJCQlSVE1QQ2hlY2tIdChwQWQsIEJTU0lEX1dDSUQsICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksICZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8pOworCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gVFJVRTsKKwkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0sIDE2KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0sICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdLCAxNik7CisJCQkJQ09QWV9IVFNFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhwQWQpOworCisJCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCAgPT0gQldfNDApICYmCisJCQkJCShwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0FCT1ZFKSkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggID09IEJXXzQwKSAmJgorCQkJCQkJIChwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0JFTE9XKSkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgLSAyOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOworCQkJfQorCQkJTGlua1VwKHBBZCwgQlNTX0FESE9DKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkvLyBCZWZvcmUgc2VuZCBiZWFjb24sIGRyaXZlciBuZWVkIGRvIHJhZGFyIGRldGVjdGlvbgorCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQgKQorCQkJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkJCSYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfU0lMRU5DRV9NT0RFOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJEQ291bnQgPSAwOworI2lmZGVmIERGU19TVVBQT1JUCisJCQkJQmJwUmFkYXJEZXRlY3Rpb25TdGFydChwQWQpOworI2VuZGlmIC8vIERGU19TVVBQT1JUIC8vCisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBzdGFydCBhIG5ldyBJQlNTID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLi4uXG4iLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzBdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzFdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzJdLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzNdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzRdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzVdKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gU3RhcnQgSUJTUyBmYWlsLiBCVUchISEhIVxuIikpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJfQorCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXRBdXRoUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICBSZWFzb247CisJTUxNRV9BU1NPQ19SRVFfU1RSVUNUICAgICAgICBBc3NvY1JlcTsKKwlNTE1FX0FVVEhfUkVRX1NUUlVDVCAgICAgICAgIEF1dGhSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVVUSF9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQVVUSCBPS1xuIikpOworCQkJQXNzb2NQYXJtRmlsbChwQWQsICZBc3NvY1JlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkgIEFTU09DX1RJTUVPVVQsIHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7CisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCS8vCisJCQkvLyBDaXNjbyBMZWFwIENDS00gc3VwcG9ydGVkIFJlLWFzc29jaWF0aW9uLgorCQkJLy8KKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCQl7CisJCQkJLy9pZiBDQ0tNIGlzIHR1cm4gb24gLCB0aGF0J3MgbWVhbiBGYXN0IFJlYXV0aGVudGljYXRpb24KKwkJCQkvL1VzZSBDQ0tNIFJlYXNzb2NpYXRpb24gaW5zdGVhZCBvZiBub3JtYWwgYXNzb2NpYXRpb24gZm9yIEZhc3QgUm9hbWluZy4KKwkJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1JFQVNTT0NfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FTU09DX1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOworCisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9SRUFTU09DOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJeworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfQVNTT0NfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FTU09DX1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOworCisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9BU1NPQzsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFRoaXMgZmFpbCBtYXkgYmVjYXVzZSBvZiB0aGUgQVAgYWxyZWFkeSBrZWVwIHVzIGluIGl0cyBNQUMgdGFibGUgd2l0aG91dAorCQkJLy8gYWdlaW5nLW91dC4gVGhlIHByZXZpb3VzIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQgbXVzdCBoYXZlIGxldCBpdCByZW1vdmUgdXMuCisJCQkvLyBzbyB0cnkgQXV0aGVudGljYXRpb24gYWdhaW4gbWF5IGhlbHAuIEZvciBELUxpbmsgRFdMLTkwMEFQKyBjb21wYXRpYmlsaXR5LgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggRkFJTCwgdHJ5IGFnYWluLi4uXG4iKSk7CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkvL0FkZCBBdXRoTW9kZSAiTEVBUCIgZm9yIENDWCAxLlgKKwkJCWlmIChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorCQkJeworCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCBwQWQtPk1sbWVBdXguQnNzaWQsIENJU0NPX0F1dGhNb2RlTEVBUCk7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQl7CisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpIHx8CisJCQkJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKSkKKwkJCQl7CisJCQkJCS8vIGVpdGhlciBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQgb3IgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwgdHJ5IHNoYXJlZCBrZXkgZmlyc3QKKwkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlT3Blbik7CisJCQkJfQorCQkJfQorCQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLAorCQkJCQkJc2l6ZW9mKE1MTUVfQVVUSF9SRVFfU1RSVUNUKSwgJkF1dGhSZXEpOworCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FVVEgyOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdEF1dGhQcm9jMigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICBSZWFzb247CisJTUxNRV9BU1NPQ19SRVFfU1RSVUNUICAgICAgICBBc3NvY1JlcTsKKwlNTE1FX0FVVEhfUkVRX1NUUlVDVCAgICAgICAgIEF1dGhSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVVUSF9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQVVUSCBPS1xuIikpOworCQkJQXNzb2NQYXJtRmlsbChwQWQsICZBc3NvY1JlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkgIEFTU09DX1RJTUVPVVQsIHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FTU09DX1JFUSwKKwkJCQkJCXNpemVvZihNTE1FX0FTU09DX1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOworCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FTU09DOworCQl9CisJCWVsc2UKKwkJeworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJLy8gUHJvY2VzcyBMRUFQIGZpcnN0LCBzaW5jZSBpdCB1c2UgZGlmZmVyZW50IGNvbnRyb2wgdmFyaWFibGUKKwkJCS8vIFdlIGRvbid0IHdhbnQgdG8gYWZmZWN0IG90aGVyIHBvdmVuIG9wZXJhdGlvbgorCQkJaWYgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisJCQl7CisJCQkJLy8gTEVBUCBBdXRoIG5vdCBzdWNjZXNzLCB0cnkgbmV4dCBCU1MKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gKkxFQVAqIEFVVEggRkFJTCwgZ2l2ZSB1cDsgdHJ5IG5leHQgQlNTXG4iKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVG90YWwgbWF0Y2ggQlNTSUQgWz0lZF1cbiIsIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc05yKSk7CisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7CisJCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpICYmCisJCQkJIChwQWQtPk1sbWVBdXguQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggRkFJTCwgdHJ5IE9QRU4gc3lzdGVtLi4uXG4iKSk7CisJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlT3Blbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FVVEhfUkVRX1NUUlVDVCksICZBdXRoUmVxKTsKKworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfQVVUSDI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gbm90IHN1Y2Nlc3MsIHRyeSBuZXh0IEJTUworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBVVRIIEZBSUwsIGdpdmUgdXA7IHRyeSBuZXh0IEJTU1xuIikpOworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7IC8vPz8/Pz8/PworCQkJCXBBZC0+TWxtZUF1eC5Cc3NJZHgrKzsKKwkJCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXRBc3NvY1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgIFJlYXNvbjsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9BU1NPQ19DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQlMaW5rVXAocEFkLCBCU1NfSU5GUkEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBc3NvY2lhdGlvbiBzdWNjZXNzZnVsIG9uIEJTUyAjJWxkXG4iLHBBZC0+TWxtZUF1eC5Cc3NJZHgpKTsKKworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJeworCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0FTU09DX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBub3Qgc3VjY2VzcywgdHJ5IG5leHQgQlNTCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQXNzb2NpYXRpb24gZmFpbHMgb24gQlNTICMlbGRcbiIscEFkLT5NbG1lQXV4LkJzc0lkeCkpOworCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCsrOworCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxXYWl0UmVhc3NvY1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgIFJlc3VsdDsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9SRUFTU09DX0NPTkYpCisJeworCQlOZGlzTW92ZU1lbW9yeSgmUmVzdWx0LCBFbGVtLT5Nc2csIHNpemVvZihVU0hPUlQpKTsKKwkJaWYgKFJlc3VsdCA9PSBNTE1FX1NVQ0NFU1MpCisJCXsKKwkJCS8vCisJCQkvLyBORElTIHJlcXVpcmVzIGEgbmV3IExpbmsgVVAgaW5kaWNhdGlvbiBidXQgbm8gTGluayBEb3duIGZvciBSRS1BU1NPQworCQkJLy8KKwkJCUxpbmtVcChwQWQsIEJTU19JTkZSQSk7CisKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgYXNzb2NpYXRpb24KKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19BU1NPQ19FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSkKKwkJCXsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19GSU5JU0g7CisJCQl9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIFJlLWFzc29jaXRpb24gc3VjY2Vzc2Z1bCBvbiBCU1MgIyVsZFxuIiwgcEFkLT5NbG1lQXV4LlJvYW1JZHgpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHJlYXNzb2MgZmFpbGVkLCB0cnkgdG8gcGljayBuZXh0IEJTUyBpbiB0aGUgQlNTIFRhYmxlCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gUmUtYXNzb2NpdGlvbiBmYWlscyBvbiBCU1MgIyVsZFxuIiwgcEFkLT5NbG1lQXV4LlJvYW1JZHgpKTsKKwkJCXBBZC0+TWxtZUF1eC5Sb2FtSWR4Kys7CisJCQlJdGVyYXRlT25Cc3NUYWIyKHBBZCk7CisJCX0KKwl9Cit9CisKKworVk9JRAlBZGhvY1R1cm5PblFvcygKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQpCit7CisjZGVmaW5lIEFDMF9ERUZfVFhPUAkJMAorI2RlZmluZSBBQzFfREVGX1RYT1AJCTAKKyNkZWZpbmUgQUMyX0RFRl9UWE9QCQk5NAorI2RlZmluZSBBQzNfREVGX1RYT1AJCTQ3CisKKwkvLyBUdXJuIG9uIFFPcyBpZiB1c2UgSFQgcmF0ZS4KKwlpZiAocEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iVmFsaWQgPT0gRkFMU0UpCisJeworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJWYWxpZCA9IFRSVUU7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMF0gPSAzOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzFdID0gNzsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblsyXSA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bM10gPSAxOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMF0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzFdID0gNDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblsyXSA9IDM7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bM10gPSAyOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMF0gPSAxMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFsxXSA9IDY7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMl0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzNdID0gMzsKKworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbMF0gID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzFdICA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFsyXSAgPSBBQzJfREVGX1RYT1A7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFszXSAgPSBBQzNfREVGX1RYT1A7CisJfQorCUFzaWNTZXRFZGNhUGFybShwQWQsICZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgTGlua1VwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIEJzc1R5cGUpCit7CisJVUxPTkcJTm93OworCVVJTlQzMglEYXRhOworCUJPT0xFQU4JQ2FuY2VsbGVkOworCVVDSEFSCVZhbHVlID0gMCwgaWR4OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gTlVMTCwgKnBDdXJyRW50cnk7CisKKwlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKworCS8vCisJLy8gQVNTT0MgLSBEaXNhc3NvY1RpbWVvdXRBY3Rpb24KKwkvLyBDTlRMIC0gRGlzLWFzc29jaWF0ZSBzdWNjZXNzZnVsCisJLy8gISEhIExJTksgRE9XTiAhISEKKwkvLyBbODg4ODhdIE9JRF84MDJfMTFfU1NJRCBzaG91bGQgaGF2ZSByZXR1cm5lZCBORFRFU1RfV0VQX0FQMihSZXR1cm5lZDogKQorCS8vCisJLy8gVG8gcHJldmVudCBEaXNhc3NvY1RpbWVvdXRBY3Rpb24gdG8gY2FsbCBMaW5rIGRvd24gYWZ0ZXIgd2UgbGluayB1cCwKKwkvLyBjYW5jZWwgdGhlIERpc2Fzc29jVGltZXIgbm8gbWF0dGVyIHdoYXQgaXQgc3RhcnQgb3Igbm90LgorCS8vCisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgICZDYW5jZWxsZWQpOworCisJQ09QWV9TRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcocEFkKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUNPUFlfSFRTRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkvLyBJdCdzIHF1aXRlIGRpZmZpY3VsdCB0byB0ZWxsIGlmIGEgbmV3bHkgYWRkZWQgS0VZIGlzIFdFUCBvciBDS0lQIHVudGlsIGEgbmV3IEJTUworCS8vIGlzIGZvcm1lZCAoZWl0aGVyIEFTU09DL1JFLUFTU09DIGRvbmUgb3IgSUJTUyBzdGFydGVkLiBMaW5rVVAgc2hvdWxkIGJlIGEgc2FmZSBwbGFjZQorCS8vIHRvIGV4YW1pbmUgaWYgY2lwaGVyIGFsZ29yaXRobSBzd2l0Y2hpbmcgaXMgcmVxdWlyZWQuCisJLy9ydDI4NjBiLiBEb24ndCBrbm93IHdoeSBuZWVkIHRoaXMKKwlTd2l0Y2hCZXR3ZWVuV2VwQW5kQ2tpcChwQWQpOworCisKKwlpZiAoQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJeworCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19JTkZSQV9PTik7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCAgPT0gQldfNDApICYmCisJCQkocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9BQk9WRSkpCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCArIDI7CisJCX0KKwkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAyKSAmJgorCQkJCSAocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggID09IEJXXzQwKSAmJgorCQkJCSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9CRUxPVykpCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDI7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8gUm9nZXIgc3luYyBDYXJyaWVyCisJCS8vIE5vIGNhcnJpZXIgZGV0ZWN0aW9uIHdoZW4gYWRob2MKKwkJLy8gQ2FycmllckRldGVjdGlvblN0b3AocEFkKTsKKwkJcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5DRF9TdGF0ZSA9IENEX05PUk1BTDsKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKKwkJCUFkaG9jVHVybk9uUW9zKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhQWRob2MgTElOSyBVUCAhISEgXG4iICkpOworCX0KKwllbHNlCisJeworCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19BREhPQ19PTik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhSW5mcmEgTElOSyBVUCAhISEgXG4iICkpOworCX0KKworCS8vIDMqMworCS8vIHJlc2V0IFR4IGJlYW1mb3JtaW5nIGJpdAorCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwlWYWx1ZSAmPSAofjB4MDEpOworCVZhbHVlIHw9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5UeEJGOworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIENoYW5nZSB0byBBUCBjaGFubmVsCisgICAgaWYgKChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCXsKKwkJLy8gTXVzdCB1c2luZyA0ME1Iei4KKwkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJVmFsdWUgfD0gMHgxMDsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCS8vICBSWCA6IGNvbnRyb2wgY2hhbm5lbCBhdCBsb3dlcgorCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgyMCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKKworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmRGF0YSk7CisJCURhdGEgJj0gMHhmZmZmZmZmZTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MUEpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MEEpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTYpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhNDBNSHogTG93ZXIgTElOSyBVUCAhISEgQ29udHJvbCBDaGFubmVsIGF0IEJlbG93LiBDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwl9CisJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisgICAgeworCSAgICAvLyBNdXN0IHVzaW5nIDQwTUh6LgorCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCSAgICBBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4MTgpOworCQlWYWx1ZSB8PSAweDEwOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQlEYXRhIHw9IDB4MTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKKwkgICAgVmFsdWUgfD0gKDB4MjApOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisKKwkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQl7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwQSk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxNik7CisJCQkgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQl9CisKKwkgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIDQwTUh6IFVwcGVyIExJTksgVVAgISEhIENvbnRyb2wgQ2hhbm5lbCBhdCBVcHBlckNlbnRyYWwgPSAlZCBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICkpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgeworCSAgICBwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4MTgpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQlEYXRhICY9IDB4ZmZmZmZmZmU7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBEYXRhKTsKKworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgyMCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKKworCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDA4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDExKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJfQorCisJICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISAyME1IeiBMSU5LIFVQICEhISBcbiIgKSk7CisgICAgfQorCisJUlRNUFNldEFHQ0luaXRWYWx1ZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyk7CisJLy8KKwkvLyBTYXZlIEJCUF9SNjYgdmFsdWUsIGl0IHdpbGwgYmUgdXNlZCBpbiBSVFVTQlJlc3VtZU1zZHVUcmFuc21pc3Npb24KKwkvLworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgVVAgISEhIChCc3NUeXBlPSVkLCBBSUQ9JWQsIHNzaWQ9JXMsIENoYW5uZWw9JWQsIENlbnRyYWxDaGFubmVsID0gJWQpXG4iLAorCQlCc3NUeXBlLCBwQWQtPlN0YUFjdGl2ZS5BaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTElOSyBVUCAhISEgKERlbnNpdHkgPSVkLCApXG4iLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1wZHVEZW5zaXR5KSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJQXNpY1NldEJzc2lkKHBBZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJQXNpY1NldFNsb3RUaW1lKHBBZCwgVFJVRSk7CisJQXNpY1NldEVkY2FQYXJtKHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0pOworCisJLy8gQ2FsbCB0aGlzIGZvciBSVFMgcHJvdGVjdGlvbmZvciBsZWdhY3kgcmF0ZSwgd2Ugd2lsbCBhbHdheXMgZW5hYmxlIFJUUyB0aHJlc2hvbGQsIGJ1dCBub3JtYWxseSBpdCB3aWxsIG5vdCBoaXQKKwlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIDAsIChPRkRNU0VUUFJPVEVDVCB8IENDS1NFVFBST1RFQ1QpLCBUUlVFLCBGQUxTRSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IFRSVUUpKQorCXsKKwkJLy8gVXBkYXRlIEhUIHByb3RlY3Rpb25mb3IgYmFzZWQgb24gQVAncyBvcGVyYXRpbmcgbW9kZS4KKyAgICAJaWYgKHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPT0gMSkKKyAgICAJeworICAgIAkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgVFJVRSk7CisgICAgCX0KKyAgICAJZWxzZQorICAgCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgRkFMU0UpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkRyc0NvdW50ZXJzLCBzaXplb2YoQ09VTlRFUl9EUlMpKTsKKworCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJcEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSA9IE5vdzsgICAvLyBsYXN0IFJYIHRpbWVzdGFtcAorCisJaWYgKChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlICE9IFJ0ODAyXzExUHJlYW1ibGVMb25nKSAmJgorCQlDQVBfSVNfU0hPUlRfUFJFQU1CTEVfT04ocEFkLT5TdGFBY3RpdmUuQ2FwYWJpbGl0eUluZm8pKQorCXsKKwkJTWxtZVNldFR4UHJlYW1ibGUocEFkLCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOworCX0KKworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7CisKKwlpZiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID09IFJEX1NJTEVOQ0VfTU9ERSkKKwl7CisjaWZkZWYgREZTX1NVUFBPUlQKKwkJUmFkYXJEZXRlY3Rpb25TdG9wKHBBZCk7CisjZW5kaWYgLy8gREZTX1NVUFBPUlQgLy8KKwl9CisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfTk9STUFMX01PREU7CisKKwlpZiAoQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJeworCQlNYWtlSWJzc0JlYWNvbihwQWQpOworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkJJiYgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSkKKwkJeworCQkJOyAvL0RvIG5vdGhpbmcKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzaWNFbmFibGVJYnNzU3luYyhwQWQpOworCQl9CisKKwkJLy8gSW4gYWQgaG9jIG1vZGUsIHVzZSBNQUMgdGFibGUgZnJvbSBpbmRleCAxLgorCQkvLyBwLnMgQVNJQyB1c2UgYWxsIDB4ZmYgYXMgdGVybWluYXRpb24gb2YgV0NJRCB0YWJsZSBzZWFyY2guVG8gcHJldmVudCBpdCdzIDB4ZmYtZmYtZmYtZmYtZmYtZmYsIFdyaXRlIDAgaGVyZS4KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1dDSURfQkFTRSwgMHgwMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTgwOCwgMHgwMCk7CisKKwkJLy8gSWYgV0VQIGlzIGVuYWJsZWQsIGFkZCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyBpbnRvIEFzaWMKKwkJLy8gRmlsbCBpbiBTaGFyZWQgS2V5IFRhYmxlKG9mZnNldDogMHg2YzAwKSBhbmQgU2hhcmVkIEtleSBNb2RlKG9mZnNldDogMHg3MDAwKQorCisJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpCisJCXsKKwkJCVBVQ0hBUglLZXk7CisJCQlVQ0hBUiAJQ2lwaGVyQWxnOworCisJCQlmb3IgKGlkeD0wOyBpZHggPCBTSEFSRV9LRVlfTlVNOyBpZHgrKykKKyAgICAgICAgCXsKKwkJCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLkNpcGhlckFsZzsKKyAgICAJCQlLZXkgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleTsKKworCQkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA+IDApCisJCQkJeworCQkJCQkvLyBTZXQga2V5IG1hdGVyaWFsIGFuZCBjaXBoZXJBbGcgdG8gQXNpYworICAgIAkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCBpZHgsIENpcGhlckFsZywgS2V5LCBOVUxMLCBOVUxMKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkKKwkJCQkJeworCQkJCQkJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCBpZHgsIENpcGhlckFsZywgTlVMTCk7CisJCQkJCX0KKwkJCQl9CisKKworCQkJfQorCQl9CisJCS8vIElmIFdQQU5vbmUgaXMgZW5hYmxlZCwgYWRkIGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIGludG8gQXNpYworCQkvLyBGaWxsIGluIFNoYXJlZCBLZXkgVGFibGUob2Zmc2V0OiAweDZjMDApIGFuZCBTaGFyZWQgS2V5IE1vZGUob2Zmc2V0OiAweDcwMDApCisJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IDA7CS8vIGFsd2F5cyBiZSB6ZXJvCisKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgcEFkLT5TdGFDZmcuUE1LLCBMRU5fVEtJUF9FSyk7CisKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsICZwQWQtPlN0YUNmZy5QTUtbMTZdLCBMRU5fVEtJUF9SWE1JQ0spOworICAgIAkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCAmcEFkLT5TdGFDZmcuUE1LWzE2XSwgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgICAgIH0KKworCQkJLy8gRGVjaWRlIGl0cyBDaGlwZXJBbGcKKwkJCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CisJCQllbHNlIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwkJCWVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJVbmtub3cgQ2lwaGVyICg9JWQpLCBzZXQgQ2lwaGVyIHRvIEFFU1xuIiwgcEFkLT5TdGFDZmcuUGFpckNpcGhlcikpOworCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisgICAgICAgICAgICB9CisKKwkJCS8vIFNldCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyB0byBBc2ljCisJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJCQkgIEJTUzAsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorCQkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAorCQkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCAwLCBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsIE5VTEwpOworCisJCX0KKworCX0KKwllbHNlIC8vIEJTU19JTkZSQQorCXsKKwkJLy8gQ2hlY2sgdGhlIG5ldyBTU0lEIHdpdGggbGFzdCBTU0lECisJCXdoaWxlIChDYW5jZWxsZWQgPT0gVFJVRSkKKwkJeworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkTGVuID09IHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pCisJCQl7CisJCQkJaWYgKFJUTVBDb21wYXJlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZExlbikgPT0gMCkKKwkJCQl7CisJCQkJCS8vIExpbmsgdG8gdGhlIG9sZCBvbmUgbm8gbGlua2Rvd24gaXMgcmVxdWlyZWQuCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8vIFNlbmQgbGluayBkb3duIGV2ZW50IGJlZm9yZSBzZXQgdG8gbGluayB1cAorCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBBQSFcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8KKwkJLy8gT24gV1BBIG1vZGUsIFJlbW92ZSBBbGwgS2V5cyBpZiBub3QgY29ubmVjdCB0byB0aGUgbGFzdCBCU1NJRAorCQkvLyBLZXkgd2lsbCBiZSBzZXQgYWZ0ZXIgNC13YXkgaGFuZHNoYWtlLgorCQkvLworCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkpCisJCXsKKwkJCVVMT05HIAkJSVY7CisKKwkJCS8vIFJlbW92ZSBhbGwgV1BBIGtleXMKKwkJCVJUTVBXUEFSZW1vdmVBbGxLZXlzKHBBZCk7CisJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQOworCisJCQkvLyBGaXhlZCBjb25uZWN0aW9uIGZhaWxlZCB3aXRoIFJhbmdlIE1heGltaXplciAtIDUxNSBBUCAoTWFydmVsbCBDaGlwKSB3aGVuIHNlY3VyaXR5IGlzIFdQQVBTSy9US0lQCisJCQkvLyBJZiBJViByZWxhdGVkIHZhbHVlcyBhcmUgdG9vIGxhcmdlIGluIEdyb3VwTXNnMiwgQVAgd291bGQgaWdub3JlIHRoaXMgbWVzc2FnZS4KKwkJCUlWID0gMDsKKwkJCUlWIHw9IChwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPDwgMzApOworCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIEJTU0lEX1dDSUQsIElWLCAwKTsKKwkJfQorCQkvLyBOT1RFOgorCQkvLyB0aGUgZGVjaXNpb24gb2YgdXNpbmcgInNob3J0IHNsb3QgdGltZSIgb3Igbm90IG1heSBjaGFuZ2UgZHluYW1pY2FsbHkgZHVlIHRvCisJCS8vIG5ldyBTVEEgYXNzb2NpYXRpb24gdG8gdGhlIEFQLiBzbyB3ZSBoYXZlIHRvIGRlY2lkZSB0aGF0IHVwb24gcGFyc2luZyBCRUFDT04sIG5vdCBoZXJlCisKKwkJLy8gTk9URToKKwkJLy8gdGhlIGRlY2lzaW9uIHRvIHVzZSAiUlRDL0NUUyIgb3IgIkNUUy10by1zZWxmIiBwcm90ZWN0aW9uIG9yIG5vdCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5CisJCS8vIGR1ZSB0byBuZXcgU1RBIGFzc29jaWF0aW9uIHRvIHRoZSBBUC4gc28gd2UgaGF2ZSB0byBkZWNpZGUgdGhhdCB1cG9uIHBhcnNpbmcgQkVBQ09OLCBub3QgaGVyZQorCisJCUNvbXBvc2VQc1BvbGwocEFkKTsKKwkJQ29tcG9zZU51bGxGcmFtZShwQWQpOworCisJCQlBc2ljRW5hYmxlQnNzU3luYyhwQWQpOworCisJCS8vIEFkZCBCU1NJRCB0byBXQ0lEIHNlYXJjaCB0YWJsZQorCQlBc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCBCU1NJRF9XQ0lELCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwkJLy8gYWRkIHRoaXMgQlNTSUQgZW50cnkgaW50byBIQVNIIHRhYmxlCisJCXsKKwkJCVVDSEFSIEhhc2hJZHg7CisKKwkJCS8vcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCQlIYXNoSWR4ID0gTUFDX0FERFJfSEFTSF9JTkRFWChwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlpZiAocEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XSA9PSBOVUxMKQorCQkJeworCQkJCXBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPSBwRW50cnk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEN1cnJFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisJCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCisJCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKKwkJCQlwQ3VyckVudHJ5LT5wTmV4dCA9IHBFbnRyeTsKKwkJCX0KKwkJfQorCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisKKwkJLy8gSWYgV0VQIGlzIGVuYWJsZWQsIGFkZCBwYWlld2lzZSBhbmQgc2hhcmVkIGtleQorI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgaWYgKCgocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSYmCisgICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkmJgorICAgICAgICAgICAgIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkpIHx8CisgICAgICAgICAgICAoKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKSYmCisgICAgICAgICAgICAgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpKSkKKyNlbHNlCisJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQl7CisJCQlQVUNIQVIJS2V5OworCQkJVUNIQVIgCUNpcGhlckFsZzsKKworCQkJZm9yIChpZHg9MDsgaWR4IDwgU0hBUkVfS0VZX05VTTsgaWR4KyspCisgICAgICAgIAl7CisJCQkJQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5DaXBoZXJBbGc7CisgICAgCQkJS2V5ID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXk7CisKKwkJCQlpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPiAwKQorCQkJCXsKKwkJCQkJLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKKyAgICAJCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKwkJCQkJaWYgKGlkeCA9PSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQpCisJCQkJCXsKKwkJCQkJCS8vIEFzc2lnbiBncm91cCBrZXkgaW5mbworCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsIEJTUzAsIGlkeCwgQ2lwaGVyQWxnLCBOVUxMKTsKKworCQkJCQkJLy8gQXNzaWduIHBhaXJ3aXNlIGtleSBpbmZvCisJCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgaWR4LCBDaXBoZXJBbGcsIHBFbnRyeSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBvbmx5IElORlJBU1RSVUNUVVJFIG1vZGUgbmVlZCB0byBpbmRpY2F0ZSBjb25uZWN0aXZpdHkgaW1tZWRpYXRlbHk7IEFESE9DIG1vZGUKKwkJLy8gc2hvdWxkIHdhaXQgdW50aWwgYXQgbGVhc3QgMiBhY3RpdmUgbm9kZXMgaW4gdGhpcyBCU1NJRC4KKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisKKyAgICAgICAgLy8gRm9yIEdVSSArKworCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCXsKKwkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKKwkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisJCX0KKyAgICAgICAgLy8gLS0KKworCQkvLyBBZGQgQlNTSUQgaW4gbXkgTUFDIFRhYmxlLgorICAgICAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCQlSVE1QTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBNQUNfQUREUl9MRU4pOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFpZCA9IEJTU0lEX1dDSUQ7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0ucEFkID0gcEFkOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlZhbGlkQXNDTEkgPSBUUlVFOwkvL0FsdGhvdWdoIHRoaXMgaXMgYnNzaWQuLnN0aWxsIHNldCBWYWxpZEFzQ2wKKwkJcEFkLT5NYWNUYWIuU2l6ZSA9IDE7CS8vIGluZnJhIG1vZGUgYWx3YXlzIHNldCBNQUN0YWIgc2l6ZSA9MS4KKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Tc3QgPSBTU1RfQVNTT0M7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQXV0aFN0YXRlID0gU1NUX0FTU09DOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uV2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIFVQICEhISAgQ2xpZW50U3RhdHVzRmxhZ3M9JWx4KVxuIiwKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKworCQlNbG1lVXBkYXRlVHhSYXRlcyhwQWQsIFRSVUUsIEJTUzApOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlNbG1lVXBkYXRlSHRUeFJhdGVzKHBBZCwgQlNTMCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIFVQICEhIChTdGFBY3RpdmUuYkh0RW5hYmxlID0lZCwgKVxuIiwgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLworCQkvLyBSZXBvcnQgQWRqYWNlbnQgQVAgcmVwb3J0LgorCQkvLworI2lmZGVmIExFQVBfU1VQUE9SVAorCQlDQ1hBZGphY2VudEFQUmVwb3J0KHBBZCk7CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpCisJCXsKKwkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpICYmIChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpCisJCQl7CisKKwkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUElHR1lCQUNLX0lOVVNFRCk7CisJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7CisgICAgICAgICAgICAgICAgUlRNUFNldFBpZ2d5QmFjayhwQWQsIFRSVUUpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR1cm4gb24gUGlnZ3ktQmFja1xuIikpOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAxKQorCQkJeworCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOworCQkJfQorCQl9CisKKwkJaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICE9IDB4MCkKKwkJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSkpCisJCQl7CisJCQkJQXNpY0VuYWJsZVJERyhwQWQpOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7CisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOworCQkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7CisJCX0KKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9DT05ORUNUIEV2ZW50IEIhLkJBQ2FwYWJpbGl0eSA9ICV4LiBDbGllbnRTdGF0dXNGbGFncyA9ICVseFxuIiwgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LndvcmQsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFNldCBMRUQKKwlSVE1QU2V0TEVEKHBBZCwgTEVEX0xJTktfVVApOworCisJcEFkLT5NbG1lLlBlcmlvZGljUm91bmQgPSAwOworCXBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kID0gMDsKKwlwQWQtPmJDb25maWdDaGFuZ2VkID0gRkFMU0U7ICAgICAgICAvLyBSZXNldCBjb25maWcgZmxhZworCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOyAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbiB0byBsaW5rIGlzIHVwCisKKwkvLyBTZXQgYXNpYyBhdXRvIGZhbGwgYmFjaworCXsKKwkJUFVDSEFSCQkJCQlwVGFibGU7CisJCVVDSEFSCQkJCQlUYWJsZVNpemUgPSAwOworCisJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCAmcFRhYmxlLCAmVGFibGVTaXplLCAmcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXgpOworCQlBc2ljVXBkYXRlQXV0b0ZhbGxCYWNrVGFibGUocEFkLCBwVGFibGUpOworCX0KKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisgICAgcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS53b3JkOworICAgIHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUud29yZDsKKwlpZiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gRkFMU0UpCisJeworCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMzIpCisJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCisJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID4gTUNTXzcpIHx8IChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMzIpKQorCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJLy8gSWYgdGhlIGxlZ2FjeSBtb2RlIGlzIHNldCwgb3ZlcndyaXRlIHRoZSB0cmFuc21pdCBzZXR0aW5nIG9mIHRoaXMgZW50cnkuCisJCWlmIChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkKKwkJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJfQorCWVsc2UKKwkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IFRSVUU7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCS8vICBMZXQgTGluayBTdGF0dXMgUGFnZSBkaXNwbGF5IGZpcnN0IGluaXRpYWwgcmF0ZS4KKwlwQWQtPkxhc3RUeFJhdGUgPSAoVVNIT1JUKShwRW50cnktPkhUUGh5TW9kZS53b3JkKTsKKwkvLyBTZWxlY3QgREFDIGFjY29yZGluZyB0byBIVCBvciBMZWdhY3kKKwlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gIT0gMHgwMCkKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikKKwkJeworCQkgICAgVmFsdWUgfD0gMHgxMDsKKwkJfQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBWYWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgVmFsdWUpOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBGQUxTRSkKKwl7CisJfQorCWVsc2UgaWYgKHBFbnRyeS0+TWF4UkFtcGR1RmFjdG9yID09IDApCisJeworCSAgICAvLyBJZiBIVCBBUCBkb2Vzbid0IHN1cHBvcnQgTWF4UkFtcGR1RmFjdG9yID0gMSwgd2UgbmVlZCB0byBzZXQgbWF4IFBTRFUgdG8gMC4KKwkgICAgLy8gQmVjYXVzZSBvdXIgSW5pdCB2YWx1ZSBpcyAxIGF0IE1BQ1JlZ1RhYmxlLgorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQVhfTEVOX0NGRywgMHgwZmZmKTsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBQYXRjaCBmb3IgTWFydmVsIEFQIHRvIGdhaW4gaGlnaCB0aHJvdWdocHV0CisJLy8gTmVlZCB0byBzZXQgYXMgZm9sbG93aW5nLAorCS8vIDEuIFNldCB0eG9wIGluIHJlZ2lzdGVyLUVEQ0FfQUMwX0NGRyBhcyAweDYwCisJLy8gMi4gU2V0IEVuVFhXcml0ZUJhY2tERE9ORSBpbiByZWdpc3Rlci1XUERNQV9HTE9fQ0ZHIGFzIHplcm8KKwkvLyAzLiBQQkZfTUFYX1BDTlQgYXMgMHgxRjNGQkY5RgorCS8vIDQuIGtpY2sgcGVyIHR3byBwYWNrZXRzIHdoZW4gZGVxdWV1ZQorCS8vCisJLy8gVHhvcCBjYW4gb25seSBiZSBtb2RpZmllZCB3aGVuIFJERyBpcyBvZmYsIFdNTSBpcyBkaXNhYmxlIGFuZCBUeEJ1cnN0IGlzIGVuYWJsZQorCS8vCisJLy8gaWYgMS4gTGVnYWN5IEFQIFdNTSBvbiwgIG9yIDIuIDExbiBBUCwgQU1QRFUgZGlzYWJsZS4gIEZvcmNlIHR1cm4gb2ZmIGJ1cnN0IG5vIG1hdHRlciB3aGF0IGJFbmFibGVUeEJ1cnN0IGlzLgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8JaWYgKCghSVNfUlQzMHh4KHBBZCkpICYmCisJaWYgKCEoKHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID09IDEpJiYocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkpICYmCisJCSgoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpKQorCQl8fCAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IFRSVUUpICYmIChwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID09IEJBX05PVFVTRSkpKSkKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7CisJCURhdGEgICY9IDB4RkZGRkZGMDA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgRGF0YSk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0Y3RjlGKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAxXG4iKSk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlpZiAocEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QpCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJkRhdGEpOworCQlEYXRhICAmPSAweEZGRkZGRjAwOworCQlEYXRhICB8PSAweDYwOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOworCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOb3dBdGhlcm9zQnVyc3RPbiA9IFRSVUU7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0ZCRjlGKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAyXG4iKSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7CisJCURhdGEgICY9IDB4RkZGRkZGMDA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgRGF0YSk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0Y3RjlGKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAzXG4iKSk7CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gUmUtY2hlY2sgdG8gdHVybiBvbiBUWCBidXJzdCBvciBub3QuCisJaWYgKChwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJMYXN0QXRoZXJvcyA9PSBUUlVFKSAmJiAoKFNUQV9XRVBfT04ocEFkKSl8fChTVEFfVEtJUF9PTihwQWQpKSkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOZXh0RGlzYWJsZVJ4QkEgPSBUUlVFOworCQlpZiAocEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QpCisJCXsKKwkJICAgIFVJTlQzMiBNQUNWYWx1ZSA9IDA7CisJCQkvLyBGb3JjZSBkaXNhYmxlICBUWE9QIHZhbHVlIGluIHRoaXMgY2FzZS4gVGhlIHNhbWUgYWN0aW9uIGluIE1MTUVVcGRhdGVQcm90ZWN0IHRvby4KKwkJCS8vIEkgZGlkbid0IGNoYW5nZSBQQkZfTUFYX1BDTlQgc2V0dGluZy4KKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmTUFDVmFsdWUpOworCQkJTUFDVmFsdWUgICY9IDB4RkZGRkZGMDA7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIE1BQ1ZhbHVlKTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5vd0F0aGVyb3NCdXJzdE9uID0gRkFMU0U7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTmV4dERpc2FibGVSeEJBID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTGFzdEF0aGVyb3MgPSBGQUxTRTsKKwlDT1BZX01BQ19BRERSKHBBZC0+Q29tbW9uQ2ZnLkxhc3RCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXBBZC0+Yk5leHREaXNhYmxlUnhCQT0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOZXh0RGlzYWJsZVJ4QkEpKTsKKwkvLyBCU1NJRCBhZGQgaW4gb25lIE1BQyBlbnRyeSB0b28uICBCZWNhdXNlIGluIFR4LCBBU0lDIG5lZWQgdG8gY2hlY2sgQ2lwaGVyIGFuZCBJVi9FSVYsIEJBYml0bWFwCisJLy8gUHRoZXIgaW5mb3JtYXRpb24gaW4gTUFDVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0gaXMgbm90IG5lY2Vzc2FyeSBmb3IgZHJpdmVyLgorCS8vIE5vdGU6IEFzIFNUQSwgVGhlIE1BQ1RhYi5Db250ZW50W0JTU0lEX1dDSURdLiBQYWlyd2lzZUtleSBhbmQgU2hhcmVkIEtleSBmb3IgQlNTMCBhcmUgdGhlIHNhbWUuCisKKyAgICBpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDw9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKKwl9CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZDsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisgICAgLy8KKwkvLyBQYXRjaCBBdGhlcm9zIEFQIFRYIHdpbGwgYnJlYWtkb3duIGlzc3VlLgorCS8vIEFQIE1vZGVsOiBETGluayBEV0wtODIwMEFQCisJLy8KKwlpZiAoSU5GUkFfT04ocEFkKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIFNUQV9US0lQX09OKHBBZCkpCisJeworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9QQVJTRVJfQ0ZHLCAweDAxKTsKKwl9CisJZWxzZQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfUEFSU0VSX0NGRywgMHgwMCk7CisJfQorCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJaWYgKChwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuYjIwNDBDb2V4aXN0U2NhblN1cCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTEpKQorCXsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NDQU5fMjA0MCk7CisJCUJ1aWxkRWZmZWN0ZWRDaGFubmVsTGlzdChwQWQpOworCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCURpc2Nvbm5lY3QgY3VycmVudCBCU1NJRAorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCUlzUmVxRnJvbUFQCQktIFJlcXVlc3QgZnJvbSBBUAorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCVdlIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBrbm93IGl0J3MgdGhpcyByZXF1c3QgZnJvbSBBUC4KKwkJSWYgeWVzISB3ZSBuZWVkIHRvIGRvIGV4dHJhIGhhbmRsaW5nLCBmb3IgZXhhbXBsZSwgcmVtb3ZlIHRoZSBXUEEga2V5LgorCQlPdGhlcndpc2Ugb24gNC13YXkgaGFuZHNoYWtpbmcgd2lsbCBmYWllZCwgc2luY2UgdGhlIFdQQSBrZXkgZGlkbid0IGJlCisJCXJlbW92ZSB3aGlsZSBhdXRvIHJlY29ubmVjdC4KKwkJRGlzY29ubmVjdCByZXF1ZXN0IGZyb20gQVAsIGl0IG1lYW5zIHdlIHdpbGwgc3RhcnQgYWZyZXNoIDQtd2F5IGhhbmRzaGFraW5nCisJCW9uIFdQQSBtb2RlLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIExpbmtEb3duKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBCT09MRUFOICAgICAgSXNSZXFGcm9tQVApCit7CisJVUNIQVIJCQkgICAgaSwgQnl0ZVZhbHVlID0gMDsKKworCS8vIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uCisJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJcmV0dXJuOworCisjaWZkZWYgUkFMSU5LX0FURQorCS8vIE5vdGhpbmcgdG8gZG8gaW4gQVRFIG1vZGUuCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCXsKKwkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgRE9XTiAhISFcbiIpKTsKKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOworCisJaWYgKEFESE9DX09OKHBBZCkpCQkvLyBBZGhvYyBtb2RlIGxpbmsgZG93bgorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgRE9XTiAxISEhXG4iKSk7CisKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQlCc3NUYWJsZURlbGV0ZUVudHJ5KCZwQWQtPlNjYW5UYWIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1hY1RhYi5TaXplPSVkICEhIVxuIiwgcEFkLT5NYWNUYWIuU2l6ZSkpOworCX0KKwllbHNlCQkJCQkvLyBJbmZyYSBzdHJ1Y3R1cmUgbW9kZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgRE9XTiAyISEhXG4iKSk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy8gRExTIHRlYXIgZG93biBmcmFtZSBtdXN0IGJlIHNlbnQgYmVmb3JlIGxpbmsgZG93bgorCQkvLyBzZW5kIERMUy1URUFSX0RPV04gbWVzc2FnZQorCQlpZiAocEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXsKKwkJCS8vIHRlYXIgZG93biBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwkJCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSkKKwkJCQl7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCQlSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIHRlYXIgZG93biBwZWVyIGRscyB0YWJsZSBlbnRyeQorCQkJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSAgRExTX0ZJTklTSCkpCisJCQkJeworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCisJCS8vIFNhdmVkIGxhc3QgU1NJRCBmb3IgbGlua3VwIGNvbXBhcmlzb24KKwkJcEFkLT5Db21tb25DZmcuTGFzdFNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuTGFzdFNzaWRMZW4pOworCQlDT1BZX01BQ19BRERSKHBBZC0+Q29tbW9uQ2ZnLkxhc3RCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQlpZiAocEFkLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID09IFRSVUUpCisJCXsKKwkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICAgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQSFcbiIpKTsKKwkJCXBBZC0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgLy8KKwkJCS8vIElmIGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgaXMgZnJvbSBORElTLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gZGVsZXRlIEJTU0lEIGZyb20gZW50cnkuCisJCQkvLyBPdGhlcndpc2UgbG9zdCBiZWFjb24gb3IgcmVjZWl2ZSBEZS1BdXRoZW50aWNhdGlvbiBmcm9tIEFQLAorCQkJLy8gdGhlbiB3ZSBzaG91bGQgZGVsZXRlIEJTU0lEIGZyb20gQnNzVGFibGUuCisJCQkvLyBJZiB3ZSBkb24ndCBkZWxldGUgZnJvbSBlbnRyeSwgcm9hbWluZyB3aWxsIGZhaWwuCisJCQkvLworCQkJQnNzVGFibGVEZWxldGVFbnRyeSgmcEFkLT5TY2FuVGFiLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCX0KKworCQkvLyByZXN0b3JlIGJhY2sgdG8gLQorCQkvLyAgICAgIDEuIGxvbmcgc2xvdCAoMjAgdXMpIG9yIHNob3J0IHNsb3QgKDkgdXMpIHRpbWUKKwkJLy8gICAgICAyLiB0dXJuIG9uL29mZiBSVFMvQ1RTIGFuZC9vciBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uCisJCS8vICAgICAgMy4gc2hvcnQgcHJlYW1ibGUKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpOworCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQUmVwb3J0RmxhZyA9PSBUUlVFKQorCQl7CisJCQkvLworCQkJLy8gUmVjb3JkIGN1cnJlbnQgQVAncyBpbmZvcm1hdGlvbi4KKwkJCS8vIGZvciBsYXRlciB1c2VkIHJlcG9ydGluZyBBZGphY2VudCBBUCByZXBvcnQuCisJCQkvLworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBTc2lkTGVuKTsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUEJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCX0KKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJLy8gQ291bnRyeSBJRSBvZiB0aGUgQVAgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHdpbGwgYmUgdXNlZC4KKwkJaWYgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlICE9IFJ0ODAyXzExX0RfTm9uZSkKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlWzBdLCAmcEFkLT5TdGFDZmcuU3RhT3JpQ291bnRyeUNvZGVbMF0sIDIpOworCQkJcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID0gcEFkLT5TdGFDZmcuU3RhT3JpR2VvZ3JhcGh5OworCQkJQnVpbGRDaGFubmVsTGlzdEV4KHBBZCk7CisJCX0KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKwl9CisKKwlmb3IgKGk9MTsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0NMSSA9PSBUUlVFKQorCQkJTWFjVGFibGVEZWxldGVFbnRyeShwQWQsIHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uQWlkLCBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIpOworCX0KKworCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01pbgk9IDQ7CisJcEFkLT5TdGFDZmcuQ0NYUW9zRUNXTWF4CT0gMTA7CisKKwlBc2ljU2V0U2xvdFRpbWUocEFkLCBUUlVFKTsgLy9GQUxTRSk7CisJQXNpY1NldEVkY2FQYXJtKHBBZCwgTlVMTCk7CisKKwkvLyBTZXQgTEVECisJUlRNUFNldExFRChwQWQsIExFRF9MSU5LX0RPV04pOworICAgIHBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCA9IDB4RjA7CisgICAgUlRNUFNldFNpZ25hbExFRChwQWQsIC0xMDApOwkvLyBGb3JjZSBzaWduYWwgc3RyZW5ndGggTGVkIHRvIGJlIHR1cm5lZCBvZmYsIGZpcm13YXJlIGlzIG5vdCBkb25lIGl0LgorCisJCUFzaWNEaXNhYmxlU3luYyhwQWQpOworCisJcEFkLT5NbG1lLlBlcmlvZGljUm91bmQgPSAwOworCXBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kID0gMDsKKworCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKKwl7CisJLy8gUmVtb3ZlIFN0YUNmZyBJbmZvcm1hdGlvbiBhZnRlciBsaW5rIGRvd24KKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCQlwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuID0gMDsKKwl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSAwOworCXBBZC0+TWxtZUF1eC5OZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFJlc2V0IFdQQS1QU0sgc3RhdGUuIE9ubHkgcmVzZXQgd2hlbiBzdXBwbGljYW50IGVuYWJsZWQKKwlpZiAocEFkLT5TdGFDZmcuV3BhU3RhdGUgIT0gU1NfTk9UVVNFKQorCXsKKwkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19TVEFSVDsKKwkJLy8gQ2xlYXIgUmVwbGF5IGNvdW50ZXIKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuRGxzUmVwbGF5Q291bnRlciwgOCk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJfQorCisKKwkvLworCS8vIGlmIGxpbmsgZG93biBjb21lIGZyb20gQVAsIHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCBXUEEga2V5cyBvbiBXUEEgbW9kZS4KKwkvLyBvdGhlcndpc2Ugd2lsbCBjYXVzZSA0LXdheSBoYW5kc2hha2luZyBmYWlsZWQsIHNpbmNlIHRoZSBXUEEga2V5IG5vdCBlbXB0eS4KKwkvLworCWlmICgoSXNSZXFGcm9tQVApICYmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCXsKKwkJLy8gUmVtb3ZlIGFsbCBXUEEga2V5cworCQlSVE1QV1BBUmVtb3ZlQWxsS2V5cyhwQWQpOworCX0KKworCS8vIDgwMi4xeCBwb3J0IGNvbnRyb2wKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJLy8gUHJldmVudCBjbGVhciBQb3J0U2VjdXJlZCBoZXJlIHdpdGggc3RhdGljIFdFUAorCS8vIE5ldHdvcmtNYW5nZXIgc2V0IHNlY3VyaXR5IHBvbGljeSBmaXJzdCB0aGVuIHNldCBTU0lEIHRvIGNvbm5lY3QgQVAuCisJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAmJgorCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKSAmJgorCQkocEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IEZBTFNFKSkKKwl7CisJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJeworCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJcEFkLT5TdGFDZmcuUHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyODAyMXhXRVA7CisJfQorCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBvcnRTZWN1cmVkID0gcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQ7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCA9IDA7CisKKwkvLyBUdXJuIG9mZiBDa2lwIGNvbnRyb2wgZmxhZworCXBBZC0+U3RhQ2ZnLmJDa2lwT24gPSBGQUxTRTsKKwlwQWQtPlN0YUNmZy5DQ1hFbmFibGUgPSBGQUxTRTsKKworICAgIHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJLy8gVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uIHRvIGxpbmsgaXMgdXAKKwlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCisgICAgLy9wQWQtPlN0YUNmZy5BZGhvY0JPbmx5Sm9pbmVkID0gRkFMU0U7CisJLy9wQWQtPlN0YUNmZy5BZGhvY0JHSm9pbmVkID0gRkFMU0U7CisJLy9wQWQtPlN0YUNmZy5BZGhvYzIwTkpvaW5lZCA9IEZBTFNFOworICAgIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gRkFMU0U7CisKKwkvLyBSZXNldCB0aGUgQ3VycmVudCBBUCdzIElQIGFkZHJlc3MKKwlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5BaXJvbmV0SVBBZGRyZXNzLCA0KTsKKyNpZmRlZiBSVDI4NzAKKwlwQWQtPmJVc2JUeEJ1bGtBZ2dyZSA9IEZBTFNFOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJLy8gQ2xlYW4gYXNzb2NpYXRpb24gaW5mb3JtYXRpb24KKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5TdGFDZmcuQXNzb2NJbmZvLCBzaXplb2YoTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04pKTsKKwlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKwlwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiA9IDA7CisJcEFkLT5TdGFDZmcuUmVzVmFySUVMZW4gPSAwOworCisJLy8KKwkvLyBSZXNldCBSU1NJIHZhbHVlIGFmdGVyIGxpbmsgZG93bgorCS8vCisJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCA9IDA7CisJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMFg4ID0gMDsKKwlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxID0gMDsKKwlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxWDggPSAwOworCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIgPSAwOworCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTJYOCA9IDA7CisKKwkvLyBSZXN0b3JlIE1sbWVSYXRlCisJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5CYXNpY01sbWVSYXRlOworCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBwQWQtPkNvbW1vbkNmZy5CYXNpY01sbWVSYXRlOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8KKwkvLyBBZnRlciBMaW5rIGRvd24sIHJlc2V0IHBpZ2d5LWJhY2sgc2V0dGluZyBpbiBBU0lDLiBEaXNhYmxlIFJERy4KKwkvLworCWlmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQnl0ZVZhbHVlKTsKKwkJQnl0ZVZhbHVlICY9ICh+MHgxOCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJ5dGVWYWx1ZSk7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCS8vIFJlc2V0IERBQworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJkJ5dGVWYWx1ZSk7CisJQnl0ZVZhbHVlICY9ICh+MHgxOCk7CisJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikKKwl7CisJCUJ5dGVWYWx1ZSB8PSAweDEwOworCX0KKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCeXRlVmFsdWUpOworCisJUlRNUFNldFBpZ2d5QmFjayhwQWQsRkFMU0UpOworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BJR0dZQkFDS19JTlVTRUQpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LndvcmQgPSBwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkud29yZDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFJlc3RvcmUgYWxsIHNldHRpbmdzIGluIHRoZSBmb2xsb3dpbmcuCisJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwLCAoQUxMTl9TRVRQUk9URUNUfENDS1NFVFBST1RFQ1R8T0ZETVNFVFBST1RFQ1QpLCBUUlVFLCBGQUxTRSk7CisJQXNpY0Rpc2FibGVSREcocEFkKTsKKwlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJDdXJyZW50QXRoZXJvcyA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5vd0F0aGVyb3NCdXJzdE9uID0gRkFMU0U7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0NBTl8yMDQwKTsKKwlwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkID0gMDsKKwlUcmlFdmVudEluaXQocEFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgKHBBZC0+Q2hhbm5lbExpc3ROdW0gLSAxKTsgaSsrKQorCXsKKwkJcEFkLT5DaGFubmVsTGlzdFtpXS5iRWZmZWN0ZWRDaGFubmVsID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BWF9MRU5fQ0ZHLCAweDFmZmYpOworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApIHsKKwkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQkvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJd3JxdS5kYXRhLmZsYWdzID0gUlRfRElTQVNTT0NfRVZFTlRfRkxBRzsKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKwl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCXsKKwkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIFJUMzB4eAorCWlmIChJU19SVDMwOTAocEFkKSkKKwl7CisJCVVJTlQzMgkJCQltYWNkYXRhOworCQkvLyBkaXNhYmxlIE1NUFMgQkJQIGNvbnRyb2wgcmVnaXN0ZXIKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQnl0ZVZhbHVlKTsKKwkJQnl0ZVZhbHVlICY9IH4oMHgwNCk7CS8vYml0IDIKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQnl0ZVZhbHVlKTsKKworCQkvLyBkaXNhYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJUlRNUF9JT19SRUFEMzIocEFkLCAweDEyMTAsICZtYWNkYXRhKTsKKwkJbWFjZGF0YSAmPSB+KDB4MDkpOwkvL2JpdCAwLCAzCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEl0ZXJhdGVPbkJzc1RhYigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgICBTdGFydFJlcTsKKwlNTE1FX0pPSU5fUkVRX1NUUlVDVCAgICBKb2luUmVxOworCVVMT05HICAgICAgICAgICAgICAgICAgIEJzc0lkeDsKKworCS8vIENoYW5nZSB0aGUgd2Vwc3RhdHVzIHRvIG9yaWdpbmFsIHdlcHN0YXR1cworCXBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgID0gcEFkLT5TdGFDZmcuT3JpZ1dlcFN0YXR1czsKKwlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOworCisJQnNzSWR4ID0gcEFkLT5NbG1lQXV4LkJzc0lkeDsKKwlpZiAoQnNzSWR4IDwgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIpCisJeworCQkvLyBDaGVjayBjaXBoZXIgc3VpdGUsIEFQIG11c3QgaGF2ZSBtb3JlIHNlY3VyZWQgY2lwaGVyIHRoYW4gc3RhdGlvbiBzZXR0aW5nCisJCS8vIFNldCB0aGUgUGFpcndpc2UgYW5kIEdyb3VwIGNpcGhlciB0byBtYXRjaCB0aGUgaW50ZW5kZWQgQVAgc2V0dGluZworCQkvLyBXZSBjYW4gb25seSBjb25uZWN0IHRvIEFQIHdpdGggbGVzcyBzZWN1cmVkIGNpcGhlciBzZXR0aW5nCisJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKwkJeworCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5Hcm91cENpcGhlcjsKKworCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyKQorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyOworCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlckF1eCAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLlBhaXJDaXBoZXJBdXg7CisJCQllbHNlCS8vIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUAorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQl9CisJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLkdyb3VwQ2lwaGVyOworCisJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyKQorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcjsKKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXJBdXg7CisJCQllbHNlCS8vIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUAorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCisJCQkvLyBSU04gY2FwYWJpbGl0eQorCQkJcEFkLT5TdGFDZmcuUnNuQ2FwYWJpbGl0eSA9IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5Sc25DYXBhYmlsaXR5OworCQl9CisKKwkJLy8gU2V0IE1peCBjaXBoZXIgZmxhZworCQlwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyID0gKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIpID8gRkFMU0UgOiBUUlVFOworCQlpZiAocEFkLT5TdGFDZmcuYk1peENpcGhlciA9PSBUUlVFKQorCQl7CisJCQkvLyBJZiBtaXggY2lwaGVyLCByZS1idWlsZCBSU05JRQorCQkJUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIDApOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGl0ZXJhdGUgQlNTICVsZCBvZiAlZFxuIiwgQnNzSWR4LCBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOcikpOworCQlKb2luUGFybUZpbGwocEFkLCAmSm9pblJlcSwgQnNzSWR4KTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0pPSU5fUkVRLCBzaXplb2YoTUxNRV9KT0lOX1JFUV9TVFJVQ1QpLAorCQkJCQkmSm9pblJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfSk9JTjsKKwl9CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQWxsIEJTUyBmYWlsOyBzdGFydCBhIG5ldyBBREhPQyAoU3NpZD0lcykuLi5cbiIscEFkLT5NbG1lQXV4LlNzaWQpKTsKKwkJU3RhcnRQYXJtRmlsbChwQWQsICZTdGFydFJlcSwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgc2l6ZW9mKE1MTUVfU1RBUlRfUkVRX1NUUlVDVCksICZTdGFydFJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfU1RBUlQ7CisJfQorCWVsc2UgLy8gbm8gbW9yZSBCU1MKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBbGwgcm9hbWluZyBmYWlsZWQsIHN0YXkgQCBjaCAjJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCX0KK30KKworLy8gZm9yIHJlLWFzc29jaWF0aW9uIG9ubHkKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBJdGVyYXRlT25Cc3NUYWIyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU1MTUVfUkVBU1NPQ19SRVFfU1RSVUNUIFJlYXNzb2NSZXE7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQnNzSWR4OworCUJTU19FTlRSWSAgICAgICAgICAgICAgICpwQnNzOworCisJQnNzSWR4ID0gcEFkLT5NbG1lQXV4LlJvYW1JZHg7CisJcEJzcyA9ICZwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NFbnRyeVtCc3NJZHhdOworCisJaWYgKEJzc0lkeCA8IHBBZC0+TWxtZUF1eC5Sb2FtVGFiLkJzc05yKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGl0ZXJhdGUgQlNTICVsZCBvZiAlZFxuIiwgQnNzSWR4LCBwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NOcikpOworCisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEJzcy0+Q2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQnNzLT5DaGFubmVsKTsKKworCQkvLyByZWFzc29jaWF0ZSBtZXNzYWdlIGhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgYXNzb2NpYXRlIG1lc3NhZ2UKKwkJQXNzb2NQYXJtRmlsbChwQWQsICZSZWFzc29jUmVxLCBwQnNzLT5Cc3NpZCwgcEJzcy0+Q2FwYWJpbGl0eUluZm8sCisJCQkJCSAgQVNTT0NfVElNRU9VVCwgcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50KTsKKwkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKKwkJCQkJc2l6ZW9mKE1MTUVfUkVBU1NPQ19SRVFfU1RSVUNUKSwgJlJlYXNzb2NSZXEpOworCisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfUkVBU1NPQzsKKwl9CisJZWxzZSAvLyBubyBtb3JlIEJTUworCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFsbCBmYXN0IHJvYW1pbmcgZmFpbGVkLCBiYWNrIHRvIGNoICMlZFxuIixwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEpvaW5QYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9KT0lOX1JFUV9TVFJVQ1QgKkpvaW5SZXEsCisJSU4gVUxPTkcgQnNzSWR4KQoreworCUpvaW5SZXEtPkJzc0lkeCA9IEJzc0lkeDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgU2NhblBhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX1NDQU5fUkVRX1NUUlVDVCAqU2NhblJlcSwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIEJzc1R5cGUsCisJSU4gVUNIQVIgU2NhblR5cGUpCit7CisgICAgTmRpc1plcm9NZW1vcnkoU2NhblJlcS0+U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwlTY2FuUmVxLT5Tc2lkTGVuID0gU3NpZExlbjsKKwlOZGlzTW92ZU1lbW9yeShTY2FuUmVxLT5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKKwlTY2FuUmVxLT5Cc3NUeXBlID0gQnNzVHlwZTsKKwlTY2FuUmVxLT5TY2FuVHlwZSA9IFNjYW5UeXBlOworfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBEbHNQYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9ETFNfUkVRX1NUUlVDVCAqcERsc1JlcSwKKwlJTiBQUlRfODAyXzExX0RMUyBwRGxzLAorCUlOIFVTSE9SVCByZWFzb24pCit7CisJcERsc1JlcS0+cERMUyA9IHBEbHM7CisJcERsc1JlcS0+UmVhc29uID0gcmVhc29uOworfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBTdGFydFBhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKlN0YXJ0UmVxLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4pCit7CisJQVNTRVJUKFNzaWRMZW4gPD0gTUFYX0xFTl9PRl9TU0lEKTsKKwlOZGlzTW92ZU1lbW9yeShTdGFydFJlcS0+U3NpZCwgU3NpZCwgU3NpZExlbik7CisJU3RhcnRSZXEtPlNzaWRMZW4gPSBTc2lkTGVuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBdXRoUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfQVVUSF9SRVFfU1RSVUNUICpBdXRoUmVxLAorCUlOIFBVQ0hBUiBwQWRkciwKKwlJTiBVU0hPUlQgQWxnKQoreworCUNPUFlfTUFDX0FERFIoQXV0aFJlcS0+QWRkciwgcEFkZHIpOworCUF1dGhSZXEtPkFsZyA9IEFsZzsKKwlBdXRoUmVxLT5UaW1lb3V0ID0gQVVUSF9USU1FT1VUOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworCisjaWZkZWYgUlQyODcwCisKK1ZPSUQgTWxtZUNudGxDb25maXJtKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIE1zZ1R5cGUsCisJSU4gVVNIT1JUIE1zZykKK3sKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNc2dUeXBlLCBzaXplb2YoVVNIT1JUKSwgJk1zZyk7Cit9CisKK1ZPSUQgQ29tcG9zZVBzUG9sbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQVFhJTkZPX1NUUlVDCQlwVHhJbmZvOworCVBUWFdJX1NUUlVDCQlwVHhXSTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNvbXBvc2VQc1BvbGxcbiIpKTsKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Qc1BvbGxGcmFtZSwgc2l6ZW9mKFBTUE9MTF9GUkFNRSkpOworCisJcEFkLT5Qc1BvbGxGcmFtZS5GQy5Qd3JNZ210ID0gMDsKKwlwQWQtPlBzUG9sbEZyYW1lLkZDLlR5cGUgPSBCVFlQRV9DTlRMOworCXBBZC0+UHNQb2xsRnJhbWUuRkMuU3ViVHlwZSA9IFNVQlRZUEVfUFNfUE9MTDsKKwlwQWQtPlBzUG9sbEZyYW1lLkFpZCA9IHBBZC0+U3RhQWN0aXZlLkFpZCB8IDB4QzAwMDsKKwlDT1BZX01BQ19BRERSKHBBZC0+UHNQb2xsRnJhbWUuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlDT1BZX01BQ19BRERSKHBBZC0+UHNQb2xsRnJhbWUuVGEsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJUlRNUFplcm9NZW1vcnkoJnBBZC0+UHNQb2xsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF0sIDEwMCk7CisJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHNpemVvZihQU1BPTExfRlJBTUUpK1RYV0lfU0laRSksIFRSVUUsIEVwVG9RdWV1ZVtNR01UUElQRUlEWF0sIEZBTFNFLCAgRkFMU0UpOworCXBUeFdJID0gKFBUWFdJX1NUUlVDKSZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYSU5GT19TSVpFXTsKKwlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgKHNpemVvZihQU1BPTExfRlJBTUUpKSwKKwkJMCwgIDAsIChVQ0hBUilwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTLCBJRlNfQkFDS09GRiwgRkFMU0UsICZwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQpOworCVJUTVBNb3ZlTWVtb3J5KCZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYV0lfU0laRStUWElORk9fU0laRV0sICZwQWQtPlBzUG9sbEZyYW1lLCBzaXplb2YoUFNQT0xMX0ZSQU1FKSk7CisJLy8gQXBwZW5kIDQgZXh0cmEgemVybyBieXRlcy4KKwlwQWQtPlBzUG9sbENvbnRleHQuQnVsa091dFNpemUgPSAgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBzaXplb2YoUFNQT0xMX0ZSQU1FKSArIDQ7Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBDb21wb3NlTnVsbEZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVBUWElORk9fU1RSVUMJCXBUeEluZm87CisJUFRYV0lfU1RSVUMJCXBUeFdJOworCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+TnVsbEZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCXBBZC0+TnVsbEZyYW1lLkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCXBBZC0+TnVsbEZyYW1lLkZDLlN1YlR5cGUgPSBTVUJUWVBFX05VTExfRlVOQzsKKwlwQWQtPk51bGxGcmFtZS5GQy5Ub0RzID0gMTsKKwlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXSwgMTAwKTsKKwlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHNpemVvZihIRUFERVJfODAyXzExKStUWFdJX1NJWkUpLCBUUlVFLCBFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgIEZBTFNFKTsKKwlwVHhXSSA9IChQVFhXSV9TVFJVQykmcEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbVFhJTkZPX1NJWkVdOworCVJUTVBXcml0ZVR4V0kocEFkLCBwVHhXSSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIFRSVUUsIEZBTFNFLCAwLCBCU1NJRF9XQ0lELCAoc2l6ZW9mKEhFQURFUl84MDJfMTEpKSwKKwkJMCwgMCwgKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MsIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7CisJUlRNUE1vdmVNZW1vcnkoJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYV0lfU0laRStUWElORk9fU0laRV0sICZwQWQtPk51bGxGcmFtZSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwlwQWQtPk51bGxDb250ZXh0LkJ1bGtPdXRTaXplID0gIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKHBBZC0+TnVsbEZyYW1lKSArIDQ7Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmUtYnVpbGQgYSBCRUFDT04gZnJhbWUgaW4gdGhlIHNoYXJlZCBtZW1vcnkKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VMT05HIE1ha2VJYnNzQmVhY29uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSICAgICAgICAgRHNMZW4gPSAxLCBJYnNzTGVuID0gMjsKKwlVQ0hBUiAgICAgICAgIExvY2FsRXJwSWVbM10gPSB7SUVfRVJQLCAxLCAweDA0fTsKKwlIRUFERVJfODAyXzExIEJjbkhkcjsKKwlVU0hPUlQgICAgICAgIENhcGFiaWxpdHlJbmZvOworCUxBUkdFX0lOVEVHRVIgRmFrZVRpbWVzdGFtcDsKKwlVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlQVFhXSV9TVFJVQwkgIHBUeFdJID0gJnBBZC0+QmVhY29uVHhXSTsKKwlDSEFSICAgICAgICAgKnBCZWFjb25GcmFtZSA9IHBBZC0+QmVhY29uQnVmOworCUJPT0xFQU4gICAgICAgUHJpdmFjeTsKKwlVQ0hBUiAgICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgICAgU3VwUmF0ZUxlbiA9IDA7CisJVUNIQVIgICAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICAgIEV4dFJhdGVMZW4gPSAwOworCVVDSEFSICAgICAgICAgUlNOSWUgPSBJRV9XUEE7CisKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpKQorCXsKKwkJU3VwUmF0ZVswXSA9IDB4ODI7IC8vIDEgbWJwcworCQlTdXBSYXRlWzFdID0gMHg4NDsgLy8gMiBtYnBzCisJCVN1cFJhdGVbMl0gPSAweDhiOyAvLyA1LjUgbWJwcworCQlTdXBSYXRlWzNdID0gMHg5NjsgLy8gMTEgbWJwcworCQlTdXBSYXRlTGVuID0gNDsKKwkJRXh0UmF0ZUxlbiA9IDA7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwl7CisJCVN1cFJhdGVbMF0gID0gMHg4QzsgICAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQlTdXBSYXRlWzFdICA9IDB4MTI7ICAgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJU3VwUmF0ZVsyXSAgPSAweDk4OyAgICAvLyAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQlTdXBSYXRlWzNdICA9IDB4MjQ7ICAgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCVN1cFJhdGVbNF0gID0gMHhiMDsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJU3VwUmF0ZVs1XSAgPSAweDQ4OyAgICAvLyAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlTdXBSYXRlWzZdICA9IDB4NjA7ICAgIC8vIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCVN1cFJhdGVbN10gID0gMHg2YzsgICAgLy8gNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJU3VwUmF0ZUxlbiAgPSA4OworCQlFeHRSYXRlTGVuICA9IDA7CisKKwkJLy8KKwkJLy8gQWxzbyBVcGRhdGUgTWxtZVJhdGUgJiBSdHNSYXRlIGZvciBHIG9ubHkgJiBBIG9ubHkKKwkJLy8KKwkJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzY7CisJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzY7CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTUzBNY2FzdF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKKwl9CisJZWxzZQorCXsKKwkJU3VwUmF0ZVswXSA9IDB4ODI7IC8vIDEgbWJwcworCQlTdXBSYXRlWzFdID0gMHg4NDsgLy8gMiBtYnBzCisJCVN1cFJhdGVbMl0gPSAweDhiOyAvLyA1LjUgbWJwcworCQlTdXBSYXRlWzNdID0gMHg5NjsgLy8gMTEgbWJwcworCQlTdXBSYXRlTGVuID0gNDsKKworCQlFeHRSYXRlWzBdICA9IDB4MEM7ICAgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsCisJCUV4dFJhdGVbMV0gID0gMHgxMjsgICAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlFeHRSYXRlWzJdICA9IDB4MTg7ICAgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLAorCQlFeHRSYXRlWzNdICA9IDB4MjQ7ICAgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCUV4dFJhdGVbNF0gID0gMHgzMDsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsCisJCUV4dFJhdGVbNV0gID0gMHg0ODsgICAgLy8gMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJRXh0UmF0ZVs2XSAgPSAweDYwOyAgICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlFeHRSYXRlWzddICA9IDB4NmM7ICAgIC8vIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCUV4dFJhdGVMZW4gID0gODsKKwl9CisKKwlwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKKwlwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID0gRXh0UmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKKworCS8vIGNvbXBvc2UgSUJTUyBiZWFjb24gZnJhbWUKKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkJjbkhkciwgU1VCVFlQRV9CRUFDT04sIDAsIEJST0FEQ0FTVF9BRERSLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJUHJpdmFjeSA9IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgfHwKKwkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAorCQkJICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOworCUNhcGFiaWxpdHlJbmZvID0gQ0FQX0dFTkVSQVRFKDAsIDEsIFByaXZhY3ksIChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID09IFJ0ODAyXzExUHJlYW1ibGVTaG9ydCksIDAsIDApOworCisJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lLCAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAgICAgICAgJkJjbkhkciwKKwkJCQkJICBUSU1FU1RBTVBfTEVOLCAgICAgICAgICAgICAgICAgICAmRmFrZVRpbWVzdGFtcCwKKwkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAorCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUxlbiwKKwkJCQkJICBTdXBSYXRlTGVuLCAgICAgICAgICAgICAgICAgICAgICBTdXBSYXRlLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEc0llLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEc0xlbiwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0llLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJYnNzTGVuLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUFjdGl2ZS5BdGltV2luLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCS8vIGFkZCBFUlBfSUUgYW5kIEVYVF9SQUUgSUUgb2YgaW4gODAyLjExZworCWlmIChFeHRSYXRlTGVuKQorCXsKKwkJVUxPTkcJdG1wOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBCZWFjb25GcmFtZSArIEZyYW1lTGVuLCAgICAgICAgICZ0bXAsCisJCQkJCQkgIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsRXJwSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlTGVuLAorCQkJCQkJICBFeHRSYXRlTGVuLCAgICAgICAgICAgICAgICAgICAgICBFeHRSYXRlLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCUZyYW1lTGVuICs9IHRtcDsKKwl9CisKKwkvLyBJZiBhZGhvYyBzZWNydWl0eSBpcyBzZXQgZm9yIFdQQS1Ob25lLCBhcHBlbmQgdGhlIGNpcGhlciBzdWl0ZSBJRQorCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCXsKKwkJVUxPTkcgdG1wOworICAgICAgICBSVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgQlNTMCk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4sICAgICAgICAJJnRtcCwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJJlJTTkllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAJJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwKKwkJCQkJCSAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuLCAgICAgIAkJcEFkLT5TdGFDZmcuUlNOX0lFLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCUZyYW1lTGVuICs9IHRtcDsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJeworCQlVTE9ORyBUbXBMZW47CisJCVVDSEFSIEh0TGVuLCBIdExlbjE7CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCUhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5VG1wOworCQlBRERfSFRfSU5GT19JRQlhZGRIVEluZm9UbXA7CisJCVVTSE9SVAliMmxUbXAsIGIybFRtcDI7CisjZW5kaWYKKworCQkvLyBhZGQgSFQgQ2FwYWJpbGl0eSBJRQorCQlIdExlbiA9IHNpemVvZihwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkpOworCQlIdExlbjEgPSBzaXplb2YocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKTsKKyNpZm5kZWYgUlRfQklHX0VORElBTgorCQlNYWtlT3V0Z29pbmdGcmFtZShwQmVhY29uRnJhbWUrRnJhbWVMZW4sCSZUbXBMZW4sCisJCQkJCQkgIDEsCQkJCQkJJkh0Q2FwSWUsCisJCQkJCQkgIDEsCQkJCQkJJkh0TGVuLAorCQkJCQkJICBIdExlbiwJCQkJCSZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkgIDEsCQkJCQkJJkFkZEh0SW5mb0llLAorCQkJCQkJICAxLAkJCQkJCSZIdExlbjEsCisJCQkJCQkgIEh0TGVuMSwJCQkJCSZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKyNlbHNlCisJCU5kaXNNb3ZlTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksIEh0TGVuKTsKKwkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykpOworCisJCU5kaXNNb3ZlTWVtb3J5KCZhZGRIVEluZm9UbXAsICZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sIEh0TGVuMSk7CisJCSooVVNIT1JUICopKCZhZGRIVEluZm9UbXAuQWRkSHRJbmZvMikgPSBTV0FQMTYoKihVU0hPUlQgKikoJmFkZEhUSW5mb1RtcC5BZGRIdEluZm8yKSk7CisJCSooVVNIT1JUICopKCZhZGRIVEluZm9UbXAuQWRkSHRJbmZvMykgPSBTV0FQMTYoKihVU0hPUlQgKikoJmFkZEhUSW5mb1RtcC5BZGRIdEluZm8zKSk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lK0ZyYW1lTGVuLAkmVG1wTGVuLAorCQkJCQkJICAxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJICAxLAkJCQkJCSZIdExlbiwKKwkJCQkJCSAgSHRMZW4sCQkJCQkmSHRDYXBhYmlsaXR5VG1wLAorCQkJCQkJICAxLAkJCQkJCSZBZGRIdEluZm9JZSwKKwkJCQkJCSAgMSwJCQkJCQkmSHRMZW4xLAorCQkJCQkJICBIdExlbjEsCQkJCQkmYWRkSFRJbmZvVG1wLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisjZW5kaWYKKwkJRnJhbWVMZW4gKz0gVG1wTGVuOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vYmVhY29uIHVzZSByZXNlcnZlZCBXQ0lEIDB4ZmYKKyAgICBpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorICAgIHsKKwlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgIFRSVUUsIEZBTFNFLCBGQUxTRSwgVFJVRSwgMCwgMHhmZiwgRnJhbWVMZW4sCisJCVBJRF9NR01ULCBQSURfQkVBQ09OLCBSQVRFXzEsIElGU19IVFRYT1AsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRvIHVzZSAxTWJwcyBmb3IgQWRob2MgYmVhY29uLgorCQlIVFRSQU5TTUlUX1NFVFRJTkcgVHJhbnNtaXQ7CisgICAgICAgIFRyYW5zbWl0LndvcmQgPSAwOworICAgICAgICBSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgIFRSVUUsIEZBTFNFLCBGQUxTRSwgVFJVRSwgMCwgMHhmZiwgRnJhbWVMZW4sCisgICAgCQlQSURfTUdNVCwgUElEX0JFQUNPTiwgUkFURV8xLCBJRlNfSFRUWE9QLCBGQUxTRSwgJlRyYW5zbWl0KTsKKyAgICB9CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgcEJlYWNvbkZyYW1lLCBESVJfV1JJVEUsIEZBTFNFKTsKKwlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhXSSwgVFlQRV9UWFdJKTsKKyNlbmRpZgorCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFrZUlic3NCZWFjb24gKGxlbj0lbGQpLCBTdXBSYXRlTGVuPSVkLCBFeHRSYXRlTGVuPSVkLCBDaGFubmVsPSVkLCBQaHlNb2RlPSVkXG4iLAorCQkJCQlGcmFtZUxlbiwgU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSkpOworCXJldHVybiBGcmFtZUxlbjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9kbHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Rscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2Q0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9kbHMuYwpAQCAtMCwwICsxLDIxNzAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgZGxzLmMKKworICAgIEFic3RyYWN0OgorICAgIEhhbmRsZSBXTU0tRExTIHN0YXRlIG1hY2hpbmUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUm9yeSBDaGVuICAgMDItMTQtMjAwNgorCUFydmluIFRhaQkwNi0wMy0yMDA4CSAgTW9kaWZpZWQgZm9yIFJUMjh4eAorICovCisKKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBkbHMgc3RhdGUgbWFjaGluZSBpbml0LCBpbmNsdWRpbmcgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGltZXIgaW5pdAorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIFNtIC0gcG9pbnRlciB0byB0aGUgZGxzIHN0YXRlIG1hY2hpbmUKKyAgICBOb3RlOgorICAgICAgICBUaGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoaXMKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERMU19JRExFCisgICAgTVQyX01MTUVfRExTX1JFUVVFU1QgICBNbG1lRGxzUmVxQWN0aW9uCisgICAgTVQyX1BFRVJfRExTX1JFUVVFU1QgICBQZWVyRGxzUmVxQWN0aW9uCisgICAgTVQyX1BFRVJfRExTX1JFU1BPTlNFICBQZWVyRGxzUnNwQWN0aW9uCisgICAgTVQyX01MTUVfRExTX1RFQVJET1dOICBNbG1lVGVhckRvd25BY3Rpb24KKyAgICBNVDJfUEVFUl9ETFNfVEVBUkRPV04gIFBlZXJUZWFyRG93bkFjdGlvbgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3ZvaWQgRGxzU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJVUNIQVIJaTsKKworICAgIFN0YXRlTWFjaGluZUluaXQoU20sIChTVEFURV9NQUNISU5FX0ZVTkMqKVRyYW5zLCBNQVhfRExTX1NUQVRFLCBNQVhfRExTX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBETFNfSURMRSwgRExTX01BQ0hJTkVfQkFTRSk7CisKKyAgICAvLyB0aGUgZmlyc3QgY29sdW1uCisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBETFNfSURMRSwgTVQyX01MTUVfRExTX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lRGxzUmVxQWN0aW9uKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIERMU19JRExFLCBNVDJfUEVFUl9ETFNfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEbHNSZXFBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgRExTX0lETEUsIE1UMl9QRUVSX0RMU19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRsc1JzcEFjdGlvbik7CisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBETFNfSURMRSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lRGxzVGVhckRvd25BY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgRExTX0lETEUsIE1UMl9QRUVSX0RMU19URUFSX0RPV04sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRsc1RlYXJEb3duQWN0aW9uKTsKKworCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5wQWQgPSBwQWQ7CisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihEbHNUaW1lb3V0QWN0aW9uKSwgcEFkLCBGQUxTRSk7CisJfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZURsc1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJSEVBREVSXzgwMl8xMQlEbHNSZXFIZHI7CisJUFJUXzgwMl8xMV9ETFMJcERMUyA9IE5VTEw7CisJVUNIQVIJCQlDYXRlZ29yeSA9IENBVEVHT1JZX0RMUzsKKwlVQ0hBUgkJCUFjdGlvbiA9IEFDVElPTl9ETFNfUkVRVUVTVDsKKwlVTE9ORwkJCXRtcDsKKwlVU0hPUlQJCQlyZWFzb247CisJVUxPTkcJCQlUaW1lb3V0OworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKworCWlmKCFNbG1lRGxzUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZwRExTLCAmcmVhc29uKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBNbG1lRGxzUmVxQWN0aW9uKCkgXG4iKSk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIE1sbWVEbHNSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNSZXFIZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkvLyBCdWlsZCBiYXNpYyBmcmFtZSBmaXJzdAorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkJc2l6ZW9mKEhFQURFUl84MDJfMTEpLAkJJkRsc1JlcUhkciwKKwkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQk2LAkJCQkJCQkmcERMUy0+TWFjQWRkciwKKwkJCQkJNiwJCQkJCQkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJCQkJMiwJCQkJCQkJJnBBZC0+U3RhQWN0aXZlLkNhcGFiaWxpdHlJbmZvLAorCQkJCQkyLAkJCQkJCQkmcERMUy0+VGltZU91dCwKKwkJCQkJMSwJCQkJCQkJJlN1cFJhdGVJZSwKKwkJCQkJMSwJCQkJCQkJJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLAorCQkJCQlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwJcEFkLT5NbG1lQXV4LlN1cFJhdGUsCisJCQkJCUVORF9PRl9BUkdTKTsKKworCWlmIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiAhPSAwKQorCXsKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJICAxLAkJCQkJCSZFeHRSYXRlSWUsCisJCQkJCQkgIDEsCQkJCQkJJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAorCQkJCQkJICBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwJcEFkLT5NbG1lQXV4LkV4dFJhdGUsCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJRnJhbWVMZW4gKz0gdG1wOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwl7CisJCVVDSEFSIEh0TGVuOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCQlIVF9DQVBBQklMSVRZX0lFIEh0Q2FwYWJpbGl0eVRtcDsKKyNlbmRpZgorCisJCS8vIGFkZCBIVCBDYXBhYmlsaXR5IElFCisJCUh0TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworI2lmbmRlZiBSVF9CSUdfRU5ESUFOCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwJJnRtcCwKKwkJCQkJCQkxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJCTEsCQkJCQkJJkh0TGVuLAorCQkJCQkJCUh0TGVuLAkJCQkJJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZWxzZQorCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBIdExlbik7CisJCQkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisJCQkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJCTEsCQkJCQkJJkh0Q2FwSWUsCisJCQkJCQkJMSwJCQkJCQkmSHRMZW4sCisJCQkJCQkJSHRMZW4sCQkJCQkmSHRDYXBhYmlsaXR5VG1wLAorCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZgorCQlGcmFtZUxlbiA9IEZyYW1lTGVuICsgdG1wOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVJUTVBDYW5jZWxUaW1lcigmcERMUy0+VGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJVGltZW91dCA9IERMU19USU1FT1VUOworCVJUTVBTZXRUaW1lcigmcERMUy0+VGltZXIsIFRpbWVvdXQpOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckRsc1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVVNIT1JUCQkJU3RhdHVzQ29kZSA9IE1MTUVfU1VDQ0VTUzsKKwlIRUFERVJfODAyXzExCURsc1JzcEhkcjsKKwlVQ0hBUgkJCUNhdGVnb3J5ID0gQ0FURUdPUllfRExTOworCVVDSEFSCQkJQWN0aW9uID0gQUNUSU9OX0RMU19SRVNQT05TRTsKKwlVTE9ORwkJCXRtcDsKKwlVU0hPUlQJCQlDYXBhYmlsaXR5SW5mbzsKKwlVQ0hBUgkJCURBW01BQ19BRERSX0xFTl0sIFNBW01BQ19BRERSX0xFTl07CisJVVNIT1JUCQkJRExTVGltZU91dDsKKwlTSE9SVAkJCWk7CisJVUxPTkcJCQlUaW1lb3V0OworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlQUlRfODAyXzExX0RMUwlwRExTID0gTlVMTDsKKwlVQ0hBUgkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSAwOworICAgIFVDSEFSCQkJU3VwcG9ydGVkUmF0ZXNMZW47CisgICAgVUNIQVIJCQlTdXBwb3J0ZWRSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCQlIdENhcGFiaWxpdHlMZW47CisJSFRfQ0FQQUJJTElUWV9JRQlIdENhcGFiaWxpdHk7CisKKwlpZiAoIVBlZXJEbHNSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgREEsIFNBLCAmQ2FwYWJpbGl0eUluZm8sICZETFNUaW1lT3V0LAorCQkJCQkJCSZTdXBwb3J0ZWRSYXRlc0xlbiwgJlN1cHBvcnRlZFJhdGVzWzBdLCAmSHRDYXBhYmlsaXR5TGVuLCAmSHRDYXBhYmlsaXR5KSkKKwkJcmV0dXJuOworCisgICAgLy8gc3VwcG9ydGVkIHJhdGVzIGFycmF5IG1heSBub3QgYmUgc29ydGVkLiBzb3J0IGl0IGFuZCBmaW5kIHRoZSBtYXhpbXVtIHJhdGUKKyAgICBmb3IgKGkgPSAwOyBpIDwgU3VwcG9ydGVkUmF0ZXNMZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cHBvcnRlZFJhdGVzW2ldICYgMHg3ZikpCisgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gU3VwcG9ydGVkUmF0ZXNbaV0gJiAweDdmOworICAgIH0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0pKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIUlORlJBX09OKHBBZCkpCisJeworCQlTdGF0dXNDb2RlID0gTUxNRV9SRVFVRVNUX0RFQ0xJTkVEOworCX0KKwllbHNlIGlmICghcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpCisJeworCQlTdGF0dXNDb2RlID0gTUxNRV9ERVNUX1NUQV9JU19OT1RfQV9RU1RBOworCX0KKwllbHNlIGlmICghcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJeworCQlTdGF0dXNDb2RlID0gTUxNRV9SRVFVRVNUX0RFQ0xJTkVEOworCX0KKwllbHNlCisJeworCQkvLyBmaW5kIHRhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzCisJCWZvciAoaSA9IChNQVhfTlVNX09GX0RMU19FTlRSWS0xKTsgaSA+PSAwOyBpLS0pCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJfQorCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU2VxdWVuY2UgPSAwOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgPSBETFNUaW1lT3V0OworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gRExTVGltZU91dDsKKwkJCQlpZiAoSHRDYXBhYmlsaXR5TGVuICE9IDApCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJZWxzZQorCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBGQUxTRTsKKwkJCQlwRExTID0gJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLy8gY2FuIG5vdCBmaW5kIGluIHRhYmxlLCBjcmVhdGUgYSBuZXcgb25lCisJCWlmIChpIDwgMCkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBQZWVyRGxzUmVxQWN0aW9uKCkgY2FuIG5vdCBmaW5kIHNhbWUgZW50cnkgXG4iKSk7CisJCQlmb3IgKGk9KE1BWF9OVU1fT0ZfRExTX0VOVFJZIC0gMSk7IGkgPj0gTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaS0tKQorCQkJeworCQkJCWlmICghcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpCisJCQkJeworCQkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQkJVUNIQVIgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCQkJeworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJCX0KKworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TZXF1ZW5jZSA9IDA7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkID0gVFJVRTsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCA9IERMU1RpbWVPdXQ7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gRExTVGltZU91dDsKKwkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgU0EsIE1BQ19BRERSX0xFTik7CisJCQkJCWlmIChIdENhcGFiaWxpdHlMZW4gIT0gMCkKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJCWVsc2UKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IEZBTFNFOworCQkJCQlwRExTID0gJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldOworCQkJCQlwRW50cnkgPSBNYWNUYWJsZUluc2VydERsc0VudHJ5KHBBZCwgU0EsIGkpOworCisJCQkJCXN3aXRjaCAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcykKKwkJCQkJeworCQkJCQkJY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworCQkJCQkJY2FzZSA5NjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzQ4OyAgIGJyZWFrOworCQkJCQkJY2FzZSA3MjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzM2OyAgIGJyZWFrOworCQkJCQkJY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworCQkJCQkJY2FzZSAzNjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE4OyAgIGJyZWFrOworCQkJCQkJY2FzZSAyNDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzEyOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAxMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzY7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworCQkJCQkJY2FzZSA0OiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyOiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE7ICAgIGJyZWFrOworCQkJCQkJZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gbWluKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSwgTWF4U3VwcG9ydGVkUmF0ZSk7CisKKwkJCQkJaWYgKHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQkJCX0KKworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDA7CisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDA7CisKKwkJCQkJLy8gSWYgdGhpcyBFbnRyeSBzdXBwb3J0cyA4MDIuMTFuLCB1cGdyYWRlIHRvIEhUIHJhdGUuCisJCQkJCWlmICgoSHRDYXBhYmlsaXR5TGVuICE9IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJCQl7CisJCQkJCQlVQ0hBUglqLCBiaXRtYXNrOyAvL2ssYml0bWFzazsKKwkJCQkJCUNIQVIgICAgaWk7CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YgPSBUUlVFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IDE7CisJCQkJCQl9CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGgpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoKSkKKwkJCQkJCXsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVz0gQldfNDA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCkmKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwKSYoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbjIwT25seSA9IFRSVUU7CisJCQkJCQl9CisKKwkJCQkJCS8vIGZpbmQgbWF4IGZpeGVkIHJhdGUKKwkJCQkJCWZvciAoaWk9MTU7IGlpPj0wOyBpaS0tKQorCQkJCQkJeworCQkJCQkJCWogPSBpaS84OworCQkJCQkJCWJpdG1hc2sgPSAoMTw8KGlpLShqKjgpKSk7CisJCQkJCQkJaWYgKCAocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0mYml0bWFzaykgJiYgKEh0Q2FwYWJpbGl0eS5NQ1NTZXRbal0mYml0bWFzaykpCisJCQkJCQkJeworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBpaTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCWlmIChpaT09MCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKworCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICE9IE1DU19BVVRPKQorCQkJCQkJeworCisJCQkJCQkJcHJpbnRrKCJAQEAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9ICVkXG4iLAorCQkJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyk7CisJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID09IDMyKQorCQkJCQkJCXsKKwkJCQkJCQkJLy8gRml4IE1DUyBhcyBIVCBEdXBsaWNhdGVkIE1vZGUKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSAxOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAwOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpZiAocEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID4gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUykKKwkJCQkJCQl7CisJCQkJCQkJCS8vIFNUQSBzdXBwb3J0cyBmaXhlZCBNQ1MKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMgPSAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMgJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykpOworCQkJCQkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJCQkJCQlwRW50cnktPk1heFJBbXBkdUZhY3RvciA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yOworCQkJCQkJcEVudHJ5LT5NbXBzTW9kZSA9IChVQ0hBUilIdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QczsKKwkJCQkJCXBFbnRyeS0+QU1zZHVTaXplID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnICYmIEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uTUNTRmVlZGJhY2sgPT0gMHgwMykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwkJCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCQkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSk7CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpCisJCQkJCXsKKwkJCQkJCVBVQ0hBUiBwVGFibGU7CisJCQkJCQlVQ0hBUiBUYWJsZVNpemUgPSAwOworCisJCQkJCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZwRW50cnktPkN1cnJUeFJhdGVJbmRleCk7CisJCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisKKwkJCQkJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJCQkJCX0KKwkJCQkJcEVudHJ5LT5SYXRlTGVuID0gU3VwcG9ydGVkUmF0ZXNMZW47CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCVN0YXR1c0NvZGUgPSBNTE1FX1NVQ0NFU1M7CisKKwkJLy8gY2FuIG5vdCBmaW5kIGluIHRhYmxlLCBjcmVhdGUgYSBuZXcgb25lCisJCWlmIChpIDwgMCkKKwkJeworCQkJU3RhdHVzQ29kZSA9IE1MTUVfUU9TX1VOU1BFQ0lGWTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIERMU0VudHJ5IHRhYmxlIGZ1bGwob25seSBjYW4gc3VwcG9ydCAlZCBETFMgc2Vzc2lvbikgXG4iLCBNQVhfTlVNX09GX0RMU19FTlRSWSAtIE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlkpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIHVzZSBlbnRyeSglZCkgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJaSwgU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSkpOworCQl9CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNSc3BIZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkvLyBCdWlsZCBiYXNpYyBmcmFtZSBmaXJzdAorCWlmIChTdGF0dXNDb2RlID09IE1MTUVfU1VDQ0VTUykKKwl7CisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNSc3BIZHIsCisJCQkJCQkxLAkJCQkJCQkmQ2F0ZWdvcnksCisJCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQkJMiwJCQkJCQkJJlN0YXR1c0NvZGUsCisJCQkJCQk2LAkJCQkJCQlTQSwKKwkJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCQkyLAkJCQkJCQkmcEFkLT5TdGFBY3RpdmUuQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkxLAkJCQkJCQkmU3VwUmF0ZUllLAorCQkJCQkJMSwJCQkJCQkJJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLAorCQkJCQkJcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCXBBZC0+TWxtZUF1eC5TdXBSYXRlLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJCWlmIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiAhPSAwKQorCQl7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQkJICAxLAkJCQkJCSZFeHRSYXRlSWUsCisJCQkJCQkJICAxLAkJCQkJCSZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwKKwkJCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLCAJcEFkLT5NbG1lQXV4LkV4dFJhdGUsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJCXsKKwkJCVVDSEFSIEh0TGVuOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJSFRfQ0FQQUJJTElUWV9JRSBIdENhcGFiaWxpdHlUbXA7CisjZW5kaWYKKworCQkJLy8gYWRkIEhUIENhcGFiaWxpdHkgSUUKKwkJCUh0TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworI2lmbmRlZiBSVF9CSUdfRU5ESUFOCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQkJCTEsCQkJCQkJJkh0Q2FwSWUsCisJCQkJCQkJCTEsCQkJCQkJJkh0TGVuLAorCQkJCQkJCQlIdExlbiwJCQkJCSZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbHNlCisJCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBIdExlbik7CisJCQkJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkJCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pKTsKKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJCQkxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJCQkxLAkJCQkJCSZIdExlbiwKKwkJCQkJCQkJSHRMZW4sCQkJCQkmSHRDYXBhYmlsaXR5VG1wLAorCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZW5kaWYKKwkJCUZyYW1lTGVuID0gRnJhbWVMZW4gKyB0bXA7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQlpZiAocERMUyAmJiAocERMUy0+U3RhdHVzICE9IERMU19GSU5JU0gpKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBETFMtPlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJVGltZW91dCA9IERMU19USU1FT1VUOworCQkJUlRNUFNldFRpbWVyKCZwRExTLT5UaW1lciwgVGltZW91dCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQkJc2l6ZW9mKEhFQURFUl84MDJfMTEpLAkJJkRsc1JzcEhkciwKKwkJCQkJCTEsCQkJCQkJCSZDYXRlZ29yeSwKKwkJCQkJCTEsCQkJCQkJCSZBY3Rpb24sCisJCQkJCQkyLAkJCQkJCQkmU3RhdHVzQ29kZSwKKwkJCQkJCTYsCQkJCQkJCVNBLAorCQkJCQkJNiwJCQkJCQkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwl9CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyRGxzUnNwQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQJCUNhcGFiaWxpdHlJbmZvOworCVVDSEFSCQlEQVtNQUNfQUREUl9MRU5dLCBTQVtNQUNfQUREUl9MRU5dOworCVVTSE9SVAkJU3RhdHVzQ29kZTsKKwlTSE9SVAkJaTsKKwlCT09MRUFOCQlUaW1lckNhbmNlbGxlZDsKKwlVQ0hBUgkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7CisgICAgVUNIQVIJCVN1cHBvcnRlZFJhdGVzTGVuOworICAgIFVDSEFSCQlTdXBwb3J0ZWRSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCUh0Q2FwYWJpbGl0eUxlbjsKKwlIVF9DQVBBQklMSVRZX0lFCUh0Q2FwYWJpbGl0eTsKKworCWlmICghcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXJldHVybjsKKworCWlmICghSU5GUkFfT04ocEFkKSkKKwkJcmV0dXJuOworCisJaWYgKCFQZWVyRGxzUnNwU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIERBLCBTQSwgJkNhcGFiaWxpdHlJbmZvLCAmU3RhdHVzQ29kZSwKKwkJCQkJCQkmU3VwcG9ydGVkUmF0ZXNMZW4sICZTdXBwb3J0ZWRSYXRlc1swXSwgJkh0Q2FwYWJpbGl0eUxlbiwgJkh0Q2FwYWJpbGl0eSkpCisJCXJldHVybjsKKworICAgIC8vIHN1cHBvcnRlZCByYXRlcyBhcnJheSBtYXkgbm90IGJlIHNvcnRlZC4gc29ydCBpdCBhbmQgZmluZCB0aGUgbWF4aW11bSByYXRlCisgICAgZm9yIChpPTA7IGk8U3VwcG9ydGVkUmF0ZXNMZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cHBvcnRlZFJhdGVzW2ldICYgMHg3ZikpCisgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gU3VwcG9ydGVkUmF0ZXNbaV0gJiAweDdmOworICAgIH0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbigpIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggd2l0aCBTdGF0dXNDb2RlPSVkLCBDYXBhYmlsaXR5SW5mbz0weCV4XG4iLAorCQlTQVswXSwgU0FbMV0sIFNBWzJdLCBTQVszXSwgU0FbNF0sIFNBWzVdLCBTdGF0dXNDb2RlLCBDYXBhYmlsaXR5SW5mbykpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCWlmIChTdGF0dXNDb2RlID09IE1MTUVfU1VDQ0VTUykKKwkJCXsKKwkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQlVQ0hBUiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKworCQkJCXBFbnRyeSA9IE1hY1RhYmxlSW5zZXJ0RGxzRW50cnkocEFkLCBTQSwgaSk7CisKKwkJCQlzd2l0Y2ggKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMpCisJCQkJeworCQkJCQljYXNlIDEwODogTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNTQ7ICAgYnJlYWs7CisJCQkJCWNhc2UgOTY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV80ODsgICBicmVhazsKKwkJCQkJY2FzZSA3MjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzM2OyAgIGJyZWFrOworCQkJCQljYXNlIDQ4OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMjQ7ICAgYnJlYWs7CisJCQkJCWNhc2UgMzY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xODsgICBicmVhazsKKwkJCQkJY2FzZSAyNDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzEyOyAgIGJyZWFrOworCQkJCQljYXNlIDE4OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfOTsgICAgYnJlYWs7CisJCQkJCWNhc2UgMTI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV82OyAgICBicmVhazsKKwkJCQkJY2FzZSAyMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQljYXNlIDExOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNV81OyAgYnJlYWs7CisJCQkJCWNhc2UgNDogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yOyAgICBicmVhazsKKwkJCQkJY2FzZSAyOiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE7ICAgIGJyZWFrOworCQkJCQlkZWZhdWx0OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7ICAgYnJlYWs7CisJCQkJfQorCisJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gbWluKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSwgTWF4U3VwcG9ydGVkUmF0ZSk7CisKKwkJCQlpZiAocEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpCisJCQkJeworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCX0KKworCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDA7CisJCQkJcEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMDsKKworCQkJCS8vIElmIHRoaXMgRW50cnkgc3VwcG9ydHMgODAyLjExbiwgdXBncmFkZSB0byBIVCByYXRlLgorCQkJCWlmICgoSHRDYXBhYmlsaXR5TGVuICE9IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJCXsKKwkJCQkJVUNIQVIJaiwgYml0bWFzazsgLy9rLGJpdG1hc2s7CisJCQkJCUNIQVIgICAgaWk7CisKKwkJCQkJaWYgKChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkdGKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGKSkKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRNSVg7CisJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbk5vbkdGID0gVFJVRTsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IDE7CisJCQkJCX0KKworCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkpCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXPSBCV180MDsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApJihIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjApJihIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCkpOworCQkJCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb24yME9ubHkgPSBUUlVFOworCQkJCQl9CisKKwkJCQkJLy8gZmluZCBtYXggZml4ZWQgcmF0ZQorCQkJCQlmb3IgKGlpPTE1OyBpaT49MDsgaWktLSkKKwkJCQkJeworCQkJCQkJaiA9IGlpLzg7CisJCQkJCQliaXRtYXNrID0gKDE8PChpaS0oaio4KSkpOworCQkJCQkJaWYgKCAocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0mYml0bWFzaykgJiYgKEh0Q2FwYWJpbGl0eS5NQ1NTZXRbal0mYml0bWFzaykpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gaWk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAoaWk9PTApCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pCisJCQkJCXsKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9PSAzMikKKwkJCQkJCXsKKwkJCQkJCQkvLyBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZQorCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKHBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA+IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MpCisJCQkJCQl7CisJCQkJCQkJLy8gU1RBIHN1cHBvcnRzIGZpeGVkIE1DUworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDICYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpKTsKKwkJCQkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJCQkJCXBFbnRyeS0+TWF4UkFtcGR1RmFjdG9yID0gSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3I7CisJCQkJCXBFbnRyeS0+TW1wc01vZGUgPSAoVUNIQVIpSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHM7CisJCQkJCXBFbnRyeS0+QU1zZHVTaXplID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKworCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKTsKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDKQorCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1R4U1RCQ19DQVBBQkxFKTsKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDKQorCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQykKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19IVENfQ0FQQUJMRSk7CisJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnICYmIEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID09IDB4MDMpCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+SFRDYXBhYmlsaXR5LCAmSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKwkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKworCQkJCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBUUlVFKQorCQkJCXsKKwkJCQkJUFVDSEFSIHBUYWJsZTsKKwkJCQkJVUNIQVIgVGFibGVTaXplID0gMDsKKworCQkJCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZwRW50cnktPkN1cnJUeFJhdGVJbmRleCk7CisJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREU7CisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKworCQkJCQlSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKChVQ0hBUilwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlLCBwRW50cnkpOworCQkJCX0KKwkJCQlwRW50cnktPlJhdGVMZW4gPSBTdXBwb3J0ZWRSYXRlc0xlbjsKKworCQkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQkJeworCQkJCQkvLyBJZiBzdXBwb3J0IFdQQSBvciBXUEEyLCBzdGFydCBTVEFLZXkgaGFuZCBzaGFrZSwKKwkJCQkJLy8gSWYgZmFpbGVkIGhhbmQgc2hha2UsIGp1c3QgdGVhciBkb3duIHBlZXIgRExTCisJCQkJCWlmIChSVE1QU2VuZFNUQUtleVJlcXVlc3QocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCQl7CisJCQkJCQlNTE1FX0RMU19SRVFfU1RSVUNUCU1sbWVEbHNSZXE7CisJCQkJCQlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1FPU19DSVBIRVJfTk9UX1NVUFBPUlQ7CisKKwkJCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJETFMgLSBQZWVyRGxzUnNwQWN0aW9uIGZhaWxlZCB3aGVuIGNhbGwgUlRNUFNlbmRTVEFLZXlSZXF1ZXN0IFxuIikpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSB3YWl0aW5nIGZvciBTVEFLZXkgaGFuZHNoYWtlIHByb2NlZHVyZVxuIikpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbigpIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggU3VjY2VlZCB3aXRoIFdFUCBvciBubyBzZWN1cml0eVxuIiwgU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSkpOworCQkJCX0KKworCQkJCS8vaW5pdGlhbGl6ZSBzZXEgbm8gZm9yIERMUyBmcmFtZXMuCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU2VxdWVuY2UgPSAwOworCQkJCWlmIChIdENhcGFiaWxpdHlMZW4gIT0gMCkKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uYkhUQ2FwID0gVFJVRTsKKwkJCQllbHNlCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIERMUyBzZXR1cCBwcm9jZWR1cmUgZmFpbGVkLgorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24gZmFpbGVkIHdpdGggU3RhdHVzQ29kZT0lZCBcbiIsIFN0YXR1c0NvZGUpKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChpID49IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24oKSB1cGRhdGUgdGltZW91dCB2YWx1ZSBcbiIpKTsKKwkJZm9yIChpPShNQVhfTlVNX09GX0RMU19FTlRSWS0xKTsgaT49TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaS0tKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwoU0EsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQkJeworCQkJCWlmIChTdGF0dXNDb2RlID09IE1MTUVfU1VDQ0VTUykKKwkJCQl7CisJCQkJCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCQkJCQlVQ0hBUiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKworCQkJCQlwRW50cnkgPSBNYWNUYWJsZUluc2VydERsc0VudHJ5KHBBZCwgU0EsIGkpOworCisJCQkJCXN3aXRjaCAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcykKKwkJCQkJeworCQkJCQkJY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworCQkJCQkJY2FzZSA5NjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzQ4OyAgIGJyZWFrOworCQkJCQkJY2FzZSA3MjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzM2OyAgIGJyZWFrOworCQkJCQkJY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworCQkJCQkJY2FzZSAzNjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE4OyAgIGJyZWFrOworCQkJCQkJY2FzZSAyNDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzEyOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAxMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzY7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworCQkJCQkJY2FzZSA0OiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyOiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE7ICAgIGJyZWFrOworCQkJCQkJZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gbWluKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSwgTWF4U3VwcG9ydGVkUmF0ZSk7CisKKwkJCQkJaWYgKHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQkJCX0KKworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDA7CisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDA7CisKKwkJCQkJLy8gSWYgdGhpcyBFbnRyeSBzdXBwb3J0cyA4MDIuMTFuLCB1cGdyYWRlIHRvIEhUIHJhdGUuCisJCQkJCWlmICgoSHRDYXBhYmlsaXR5TGVuICE9IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJCQl7CisJCQkJCQlVQ0hBUglqLCBiaXRtYXNrOyAvL2ssYml0bWFzazsKKwkJCQkJCUNIQVIgICAgaWk7CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YgPSBUUlVFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IDE7CisJCQkJCQl9CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGgpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoKSkKKwkJCQkJCXsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVz0gQldfNDA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCkmKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwKSYoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbjIwT25seSA9IFRSVUU7CisJCQkJCQl9CisKKwkJCQkJCS8vIGZpbmQgbWF4IGZpeGVkIHJhdGUKKwkJCQkJCWZvciAoaWk9MTU7IGlpPj0wOyBpaS0tKQorCQkJCQkJeworCQkJCQkJCWogPSBpaS84OworCQkJCQkJCWJpdG1hc2sgPSAoMTw8KGlpLShqKjgpKSk7CisJCQkJCQkJaWYgKCAocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0mYml0bWFzaykgJiYgKEh0Q2FwYWJpbGl0eS5NQ1NTZXRbal0mYml0bWFzaykpCisJCQkJCQkJeworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBpaTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCWlmIChpaT09MCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyAhPSBNQ1NfQVVUTykKKwkJCQkJCXsKKwkJCQkJCQlwcmludGsoIkBAQCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gJWRcbiIsCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKTsKKwkJCQkJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPT0gMzIpCisJCQkJCQkJeworCQkJCQkJCQkvLyBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZQorCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IDE7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IDA7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IDMyOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmIChwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPiBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTKQorCQkJCQkJCXsKKwkJCQkJCQkJLy8gU1RBIHN1cHBvcnRzIGZpeGVkIE1DUworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQyAmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSk7CisJCQkJCQlwRW50cnktPk1wZHVEZW5zaXR5ID0gSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBFbnRyeS0+TWF4UkFtcGR1RmFjdG9yID0gSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3I7CisJCQkJCQlwRW50cnktPk1tcHNNb2RlID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzOworCQkJCQkJcEVudHJ5LT5BTXNkdVNpemUgPSAoVUNIQVIpSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0kyMF9DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJNDBfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1R4U1RCQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUnhTVEJDX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfSFRDX0NBUEFCTEUpOworCQkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgJiYgSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0KQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5NQ1NGZWVkYmFjayA9PSAweDAzKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19NQ1NGRUVEQkFDS19DQVBBQkxFKTsKKworCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+SFRDYXBhYmlsaXR5LCAmSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCQkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisJCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKworCQkJCQlpZiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gVFJVRSkKKwkJCQkJeworCQkJCQkJUFVDSEFSIHBUYWJsZTsKKwkJCQkJCVVDSEFSIFRhYmxlU2l6ZSA9IDA7CisKKwkJCQkJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJnBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4KTsKKwkJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKworCQkJCQkJUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygoVUNIQVIpcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSwgcEVudHJ5KTsKKwkJCQkJfQorCQkJCQlwRW50cnktPlJhdGVMZW4gPSBTdXBwb3J0ZWRSYXRlc0xlbjsKKworCQkJCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQkJCQl7CisJCQkJCQkvLyBJZiBzdXBwb3J0IFdQQSBvciBXUEEyLCBzdGFydCBTVEFLZXkgaGFuZCBzaGFrZSwKKwkJCQkJCS8vIElmIGZhaWxlZCBoYW5kIHNoYWtlLCBqdXN0IHRlYXIgZG93biBwZWVyIERMUworCQkJCQkJaWYgKFJUTVBTZW5kU1RBS2V5UmVxdWVzdChwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJCQl7CisJCQkJCQkJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCQkJCQkJCVVTSE9SVAkJCQlyZWFzb24gPSBSRUFTT05fUU9TX0NJUEhFUl9OT1RfU1VQUE9SVDsKKworCQkJCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbiBmYWlsZWQgd2hlbiBjYWxsIFJUTVBTZW5kU1RBS2V5UmVxdWVzdCBcbiIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfV0FJVF9LRVk7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSB3YWl0aW5nIGZvciBTVEFLZXkgaGFuZHNoYWtlIHByb2NlZHVyZVxuIikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFN1Y2NlZWQgd2l0aCBXRVAgb3Igbm8gc2VjdXJpdHlcbiIsIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0pKTsKKwkJCQkJfQorCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TZXF1ZW5jZSA9IDA7CisJCQkJCWlmIChIdENhcGFiaWxpdHlMZW4gIT0gMCkKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJCWVsc2UKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IEZBTFNFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBETFMgc2V0dXAgcHJvY2VkdXJlIGZhaWxlZC4KKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbiBmYWlsZWQgd2l0aCBTdGF0dXNDb2RlPSVkIFxuIiwgU3RhdHVzQ29kZSkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVEbHNUZWFyRG93bkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVUNIQVIJCQlDYXRlZ29yeSA9IENBVEVHT1JZX0RMUzsKKwlVQ0hBUgkJCUFjdGlvbiA9IEFDVElPTl9ETFNfVEVBUkRPV047CisJVVNIT1JUCQkJUmVhc29uQ29kZSA9IFJFQVNPTl9RT1NfVU5TUEVDSUZZOworCUhFQURFUl84MDJfMTEJRGxzVGVhckRvd25IZHI7CisJUFJUXzgwMl8xMV9ETFMJcERMUzsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIJCQlpOworCisJaWYoIU1sbWVEbHNSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJnBETFMsICZSZWFzb25Db2RlKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBNbG1lRGxzVGVhckRvd25BY3Rpb24oKSB3aXRoIFJlYXNvbkNvZGU9JWQgXG4iLCBSZWFzb25Db2RlKSk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIE1sbWVEbHNUZWFyRG93bkFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlBY3RIZWFkZXJJbml0KHBBZCwgJkRsc1RlYXJEb3duSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNUZWFyRG93bkhkciwKKwkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQk2LAkJCQkJCQkmcERMUy0+TWFjQWRkciwKKwkJCQkJNiwJCQkJCQkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJCQkJMiwJCQkJCQkJJlJlYXNvbkNvZGUsCisJCQkJCUVORF9PRl9BUkdTKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwlSVE1QQ2FuY2VsVGltZXIoJnBETFMtPlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJLy8gUmVtb3ZlIGtleSBpbiBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBETFMtPk1hY0FkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KKworCS8vIGNsZWFyIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpID0gTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSA8IE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAoTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJEbHNUZWFyRG93bkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJCQlEQVtNQUNfQUREUl9MRU5dLCBTQVtNQUNfQUREUl9MRU5dOworCVVTSE9SVAkJCVJlYXNvbkNvZGU7CisJVUlOVAkJCWk7CisJQk9PTEVBTgkJCVRpbWVyQ2FuY2VsbGVkOworCisJaWYgKCFwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJcmV0dXJuOworCisJaWYgKCFJTkZSQV9PTihwQWQpKQorCQlyZXR1cm47CisKKwlpZiAoIVBlZXJEbHNUZWFyRG93blNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBEQSwgU0EsICZSZWFzb25Db2RlKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBQZWVyRGxzVGVhckRvd25BY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IHdpdGggUmVhc29uQ29kZT0lZFxuIiwgU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSwgUmVhc29uQ29kZSkpOworCisJLy8gY2xlYXIgbG9jYWwgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIE1BQ19BRERSX0VRVUFMKFNBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJeworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCS8vQXNpY0RlbFdjaWRUYWIocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQpOworCQkJLy9Bc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIEJTUzAsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCk7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KKworCS8vIGNsZWFyIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkvL0FzaWNEZWxXY2lkVGFiKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lEKTsKKwkJCS8vQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkocEFkLCBCU1MwLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQpOworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBSVE1QQ2hlY2tETFNUaW1lT3V0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCVVMT05HCQkJCWk7CisJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCVVTSE9SVAkJCQlyZWFzb24gPSBSRUFTT05fUU9TX1VOU1BFQ0lGWTsKKworCWlmICghIHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQlyZXR1cm47CisKKwlpZiAoISBJTkZSQV9PTihwQWQpKQorCQlyZXR1cm47CisKKwkvLyBJZiB0aW1lb3V0IHZhbHVlIGlzIGVxdWFsZWQgdG8gemVybywgaXQgbWVhbnMgYWx3YXlzIG5vdCBiZSB0aW1lb3V0LgorCisJLy8gdXBkYXRlIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCSYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0ICE9IDApKQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciAtLTsKKworCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID09IDApCisJCQl7CisJCQkJcmVhc29uID0gUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQ7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQl9CisJCX0KKwl9CisKKwkvLyB1cGRhdGUgcGVlciBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCkgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgIT0gMCkpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyIC0tOworCisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgPT0gMCkKKwkJCXsKKwkJCQlyZWFzb24gPSBSRUFTT05fUU9TX1JFUVVFU1RfVElNRU9VVDsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFJUTVBSY3ZGcmFtZURMU0NoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFBIRUFERVJfODAyXzExCXBIZWFkZXIsCisJSU4gVUxPTkcJCQlMZW4sCisJSU4gUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCkKK3sKKwlVTE9ORwkJCWk7CisJQk9PTEVBTgkJCWJGaW5kRW50cnkgPSBGQUxTRTsKKwlCT09MRUFOCQkJYlNUQUtleUZyYW1lID0gRkFMU0U7CisJUEVBUE9MX1BBQ0tFVAlwRWFwOworCVBVQ0hBUgkJCXBQcm90bywgcEFkZHIgPSBOVUxMOworCVBVQ0hBUgkJCXBTVEFLZXkgPSBOVUxMOworCVVDSEFSCQkJWmVyb1JlcGxheVtMRU5fS0VZX0RFU0NfUkVQTEFZXTsKKwlVQ0hBUgkJCU1pY1sxNl0sIE9sZE1pY1sxNl07CisJVUNIQVIJCQlkaWdlc3RbODBdOworCVVDSEFSCQkJRGxzUFRLWzgwXTsKKwlVQ0hBUgkJCXRlbXBbNjRdOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlDSVBIRVJfS0VZCQlQYWlyd2lzZUtleTsKKworCisJaWYgKCEgcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXJldHVybiBiU1RBS2V5RnJhbWU7CisKKwlpZiAoISBJTkZSQV9PTihwQWQpKQorCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJaWYgKCEgKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KSkKKwkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCWlmIChMZW4gPCBMRU5HVEhfODAyXzExICsgNiArIDIgKyAyKQorCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJcFByb3RvCT0gKFBVQ0hBUilwSGVhZGVyICsgTEVOR1RIXzgwMl8xMSArIDIgKyA2OwkvLyBRT1MgQ29udHJvbCBmaWVsZCAsIDB4QUEgMHhBQSAweEFBIDB4MDAgMHgwMCAweDAwCisJcEFkZHIJPSBwSGVhZGVyLT5BZGRyMjsKKworCS8vIEwyUEFEIGJpdCBvbiB3aWxsIHBhZCAyIGJ5dGVzIGF0IExMQworCWlmIChwUnhELT5MMlBBRCkKKwl7CisJCXBQcm90byArPSAyOworCX0KKworCWlmIChSVE1QRXF1YWxNZW1vcnkoRUFQT0wsIHBQcm90bywgMikgJiYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49ICBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCXsKKwkJcEVhcCA9IChQRUFQT0xfUEFDS0VUKSAocFByb3RvICsgMik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBTbmlmZiBMZW49JWxkLCBEYXRhTGVuPSVkLCBLZXlNaWM9JWQsIEluc3RhbGw9JWQsIEtleUFjaz0lZCwgU2VjdXJlPSVkLCBFS0RfREw9JWQsIEVycm9yPSVkLCBSZXF1ZXN0PSVkXG4iLCBMZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExFTkdUSF84MDJfMTEgKyA2ICsgMiArIDIgKyBzaXplb2YoRUFQT0xfUEFDS0VUKSAtIE1BWF9MRU5fT0ZfUlNOSUUgKyAxNiksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleU1pYywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uSW5zdGFsbCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uS2V5QWNrLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBFYXAtPktleURlc2MuS2V5SW5mby5TZWN1cmUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkVLRF9ETCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uRXJyb3IsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLlJlcXVlc3QpKTsKKworCQlpZiAoKExlbiA+PSAoTEVOR1RIXzgwMl8xMSArIDYgKyAyICsgMiArIHNpemVvZihFQVBPTF9QQUNLRVQpIC0gTUFYX0xFTl9PRl9SU05JRSArIDE2KSkgJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleU1pYworCQkJJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkluc3RhbGwgJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleUFjayAmJiBwRWFwLT5LZXlEZXNjLktleUluZm8uU2VjdXJlCisJCQkmJiBwRWFwLT5LZXlEZXNjLktleUluZm8uRUtEX0RMICYmICFwRWFwLT5LZXlEZXNjLktleUluZm8uRXJyb3IgJiYgIXBFYXAtPktleURlc2MuS2V5SW5mby5SZXF1ZXN0KQorCQl7CisJCQkvLyBGaXJzdCB2YWxpZGF0ZSByZXBsYXkgY291bnRlciwgb25seSBhY2NlcHQgbWVzc2FnZSB3aXRoIGxhcmdlciByZXBsYXkgY291bnRlcgorCQkJLy8gTGV0IGVxdWFsIHBhc3MsIHNvbWUgQVAgc3RhcnQgd2l0aCBhbGwgemVybyByZXBsYXkgY291bnRlcgorCQkJTmRpc1plcm9NZW1vcnkoWmVyb1JlcGxheSwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisJCQlpZiAoKFJUTVBDb21wYXJlTWVtb3J5KHBFYXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkgJiYKKwkJCQkoUlRNUENvbXBhcmVNZW1vcnkocEVhcC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAwKSkKKwkJCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJCQkvL1JUTVBNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIHBFYXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisJCQlSVE1QTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5EbHNSZXBsYXlDb3VudGVyLCBwRWFwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBTbmlmZiByZXBsYXkgY291bnRlciAoJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4KSBMZW49JWxkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMF0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMV0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMl0sCisJCQkJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclszXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls0XSwJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls1XSwKKwkJCQlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzZdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzddLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCQkvLyBwdXQgdGhlc2UgY29kZSBzZWdtZW50IHRvIGdldCB0aGUgcmVwbGF5IGNvdW50ZXIKKwkJCWlmIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpCisJCQkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCQkJLy8gQ2hlY2sgTUlDIHZhbHVlCisJCQkvLyBTYXZlIHRoZSBNSUMgYW5kIHJlcGxhY2Ugd2l0aCB6ZXJvCisJCQkvLyB1c2UgcHJvcHJpZXRhcnkgUFRLCisJCQlOZGlzWmVyb01lbW9yeSh0ZW1wLCA2NCk7CisJCQlOZGlzTW92ZU1lbW9yeSh0ZW1wLCAiSUVFRTgwMi4xMSBXSVJFTEVTUyBBQ0NFU1MgUE9JTlQiLCAzMik7CisJCQlXcGFDb3VudFBUSyhwQWQsIHRlbXAsIHRlbXAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCB0ZW1wLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBEbHNQVEssIExFTl9QVEspOworCisJCQlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBFYXAtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwkJCU5kaXNaZXJvTWVtb3J5KHBFYXAtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCXsKKwkJCQkvLyBBRVMKKwkJCQlITUFDX1NIQTEoKFBVQ0hBUikgcEVhcCwgcEVhcC0+Qm9keV9MZW5bMV0gKyA0LCBEbHNQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeShNaWMsCWRpZ2VzdCwJTEVOX0tFWV9ERVNDX01JQyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaG1hY19tZDUoRGxzUFRLLCBMRU5fRUFQX01JQ0ssIChQVUNIQVIpIHBFYXAsIHBFYXAtPkJvZHlfTGVuWzFdICsgNCwgTWljKTsKKwkJCX0KKworCQkJaWYgKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1JQyBEaWZmZXJlbnQgaW4gTXNnMSBvZiBTVEFLZXkgaGFuZHNoYWtlISBcbiIpKTsKKwkJCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCQkJfQorCQkJZWxzZQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1JQyBWQUxJRCBpbiBNc2cxIG9mIFNUQUtleSBoYW5kc2hha2UhIFxuIikpOworI2lmIDEKKwkJCWlmICgocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzBdID09IDB4REQpICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbMl0gPT0gMHgwMCkgJiYgKHBFYXAtPktleURlc2MuS2V5RGF0YVszXSA9PSAweDBDKQorCQkJCSYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbNF0gPT0gMHg0MykgJiYgKHBFYXAtPktleURlc2MuS2V5RGF0YVs1XSA9PSAweDAyKSkKKwkJCXsKKwkJCQlwQWRkcgkJCT0gcEVhcC0+S2V5RGVzYy5LZXlEYXRhICsgODsJCS8vIFRwZSgxKSwgTGVuKDEpLCBPVUkoMyksIERhdGFUeXBlKDEpLCBSZXNlcnZlZCgyKQorCQkJCXBTVEFLZXkJCQk9IHBFYXAtPktleURlc2MuS2V5RGF0YSArIDE0OwkvLyBUcGUoMSksIExlbigxKSwgT1VJKDMpLCBEYXRhVHlwZSgxKSwgUmVzZXJ2ZWQoMiksIFNUQUtleV9NYWNfQWRkcig2KQorCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBSZWNlaXZlIFNUQUtleSBNZXNzYWdlLTEgZnJvbSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBMZW49JWxkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCQlwQWRkclswXSwgcEFkZHJbMV0sIHBBZGRyWzJdLCBwQWRkclszXSwgcEFkZHJbNF0sIHBBZGRyWzVdLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCQkJYlNUQUtleUZyYW1lID0gVFJVRTsKKwkJCX0KKyNlbHNlCisJCQlpZiAoKHBFYXAtPktleURlc2MuS2V5RGF0YVswXSA9PSAweEREKSAmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzJdID09IDB4MDApICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbM10gPT0gMHgwRikKKwkJCQkmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzRdID09IDB4QUMpICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbNV0gPT0gMHgwMikpCisJCQl7CisJCQkJcEFkZHIJCQk9IHBFYXAtPktleURlc2MuS2V5RGF0YSArIDg7CQkvLyBUcGUoMSksIExlbigxKSwgT1VJKDMpLCBEYXRhVHlwZSgxKSwgUmVzZXJ2ZWQoMikKKwkJCQlwU1RBS2V5CQkJPSBwRWFwLT5LZXlEZXNjLktleURhdGEgKyAxNDsJLy8gVHBlKDEpLCBMZW4oMSksIE9VSSgzKSwgRGF0YVR5cGUoMSksIFJlc2VydmVkKDIpLCBTVEFLZXlfTWFjX0FkZHIoNikKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggTGVuPSVkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCQlwQWRkclswXSwgcEFkZHJbMV0sIHBBZGRyWzJdLCBwQWRkclszXSwgcEFkZHJbNF0sIHBBZGRyWzVdLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCQkJYlNUQUtleUZyYW1lID0gVFJVRTsKKwkJCX0KKyNlbmRpZgorCisJCX0KKwkJZWxzZSBpZiAoTGVuID49IChMRU5HVEhfODAyXzExICsgNiArIDIgKyAyICsgc2l6ZW9mKEVBUE9MX1BBQ0tFVCkgLSBNQVhfTEVOX09GX1JTTklFKSkKKwkJeworCQkJUlRNUE1vdmVNZW1vcnkocEFkLT5TdGFDZmcuRGxzUmVwbGF5Q291bnRlciwgcEVhcC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gU25pZmYgcmVwbGF5IGNvdW50ZXIgMiglMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngpIExlbj0lbGQsIEtleURhdGFMZW49JWRcbiIsCisJCQkJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclswXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclsxXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclsyXSwKKwkJCQlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzNdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzRdLAlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzVdLAorCQkJCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbNl0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbN10sIExlbiwgcEVhcC0+S2V5RGVzYy5LZXlEYXRhWzFdKSk7CisKKwkJfQorCX0KKworCS8vIElmIHRpbWVvdXQgdmFsdWUgaXMgZXF1YWxlZCB0byB6ZXJvLCBpdCBtZWFucyBhbHdheXMgbm90IGJlIHRpbWVvdXQuCisJLy8gdXBkYXRlIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT0gMDsgaSA8IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChwQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCWlmIChiU1RBS2V5RnJhbWUpCisJCQl7CisJCQkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnk7CisKKwkJCQkvLyBTVEFLZXkgZnJhbWUsIGFkZCBwYWlyd2lzZSBrZXkgdGFibGUKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCQlQYWlyd2lzZUtleS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5LZXksICZwU1RBS2V5WzBdLCBMRU5fVEtJUF9FSyk7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuVHhNaWMsICZwU1RBS2V5WzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5SeE1pYywgJnBTVEFLZXlbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJCQkJUGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGc7CisKKwkJCQlwRW50cnkgPSBEbHNFbnRyeVRhYmxlTG9va3VwKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgVFJVRSk7CisJCQkJLy9Bc2ljQWRkS2V5RW50cnkocEFkLCAoVVNIT1JUKShpICsgMiksIEJTUzAsIDAsICZQYWlyd2lzZUtleSwgVFJVRSwgVFJVRSk7CS8vIHJlc2VydmUgMCBmb3IgbXVsdGljYXN0LCAxIGZvciB1bmljYXN0CisJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKKwkJCQkvLyBBZGQgUGFpci13aXNlIGtleSB0byBBc2ljCisjaWZkZWYgUlQyODcwCisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkgS2V5SW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1BZX01BQ19BRERSKEtleUluZm8uTWFjQWRkcixwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlJbmZvLk1hY1RhYk1hdGNoV0NJRD1wQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJktleUluZm8uQ2lwaGVyS2V5LCAgJlBhaXJ3aXNlS2V5LHNpemVvZihDSVBIRVJfS0VZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX0tFWV9UQUJMRSwgJktleUluZm8sIHNpemVvZihSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQUNfVEFCTEVfRU5UUlkgcERMU0VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBETFNFbnRyeSA9IERsc0VudHJ5VGFibGVMb29rdXAocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRExTRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZz1QYWlyd2lzZUtleS5DaXBoZXJBbGc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX1JYX1dDSURfVEFCTEUsIHBETFNFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCA8LS0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleSwgJlBhaXJ3aXNlS2V5LCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIChQZWVyIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpIFxuIikpOworCisJCQkJUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gRmluaXNoIFNUQUtleSBoYW5kc2hha2UgcHJvY2VkdXJlIChJbml0aWF0b3Igc2lkZSlcbiIpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBEYXRhIGZyYW1lLCB1cGRhdGUgdGltZW91dCB2YWx1ZQorCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCQl7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dDsKKwkJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKKwkJCQl9CisJCQl9CisKKwkJCWJGaW5kRW50cnkgPSBUUlVFOworCQl9CisJfQorCisJLy8gdXBkYXRlIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChwQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCWlmIChiU1RBS2V5RnJhbWUpCisJCQl7CisJCQkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJCQkJLy8gU1RBS2V5IGZyYW1lLCBhZGQgcGFpcndpc2Uga2V5IHRhYmxlLCBhbmQgc2VuZCBTVEFrZXkgTXNnLTIKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCQlQYWlyd2lzZUtleS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5LZXksICZwU1RBS2V5WzBdLCBMRU5fVEtJUF9FSyk7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuVHhNaWMsICZwU1RBS2V5WzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5SeE1pYywgJnBTVEFLZXlbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJCQkJUGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGc7CisKKwkJCQlwRW50cnkgPSBEbHNFbnRyeVRhYmxlTG9va3VwKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgVFJVRSk7CisJCQkJLy9Bc2ljQWRkS2V5RW50cnkocEFkLCAoVVNIT1JUKShpICsgMiksIEJTUzAsIDAsICZQYWlyd2lzZUtleSwgVFJVRSwgVFJVRSk7CS8vIHJlc2VydmUgMCBmb3IgbXVsdGljYXN0LCAxIGZvciB1bmljYXN0CisJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKKwkJCQkvLyBBZGQgUGFpci13aXNlIGtleSB0byBBc2ljCisjaWZkZWYgUlQyODcwCisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkgS2V5SW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1BZX01BQ19BRERSKEtleUluZm8uTWFjQWRkcixwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlJbmZvLk1hY1RhYk1hdGNoV0NJRD1wQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJktleUluZm8uQ2lwaGVyS2V5LCAgJlBhaXJ3aXNlS2V5LHNpemVvZihDSVBIRVJfS0VZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX0tFWV9UQUJMRSwgJktleUluZm8sIHNpemVvZihSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQUNfVEFCTEVfRU5UUlkgcERMU0VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBETFNFbnRyeSA9IERsc0VudHJ5VGFibGVMb29rdXAocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRExTRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZz1QYWlyd2lzZUtleS5DaXBoZXJBbGc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX1JYX1dDSURfVEFCTEUsIHBETFNFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCA8LS0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleSwgJlBhaXJ3aXNlS2V5LCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIChJbml0aWF0b3IgU1RBIE1BQyBBZGRyZXNzIFNUQUtleSlcbiIpKTsKKworCQkJCS8vIElmIHN1cHBvcnQgV1BBIG9yIFdQQTIsIHN0YXJ0IFNUQUtleSBoYW5kIHNoYWtlLAorCQkJCS8vIElmIGZhaWxlZCBoYW5kIHNoYWtlLCBqdXN0IHRlYXIgZG93biBwZWVyIERMUworCQkJCWlmIChSVE1QU2VuZFNUQUtleUhhbmRTaGFrZShwQWQsIHBBZGRyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXsKKwkJCQkJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCQkJCQlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1FPU19DSVBIRVJfTk9UX1NVUFBPUlQ7CisKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gRmluaXNoIFNUQUtleSBoYW5kc2hha2UgcHJvY2VkdXJlIChQZWVyIHNpZGUpXG4iKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIERhdGEgZnJhbWUsIHVwZGF0ZSB0aW1lb3V0IHZhbHVlCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJCXsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgPSBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0OworCQkJCX0KKwkJCX0KKworCQkJYkZpbmRFbnRyeSA9IFRSVUU7CisJCX0KKwl9CisKKworCXJldHVybiBiU1RBS2V5RnJhbWU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDaGVjayBpZiB0aGUgZnJhbWUgY2FuIGJlIHNlbnQgdGhyb3VnaCBETFMgZGlyZWN0IGxpbmsgaW50ZXJmYWNlCisKKwlBcmd1bWVudHM6CisJCXBBZAkJUG9pbnRlcgl0byBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCURMUyBlbnRyeSBpbmRleAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlSVE1QQ2hlY2tETFNGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSkKK3sKKwlJTlQgcnZhbCA9IC0xOworCUlOVAlpOworCisJaWYgKCFwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJcmV0dXJuIHJ2YWw7CisKKwlpZiAoIUlORlJBX09OKHBBZCkpCisJCXJldHVybiBydmFsOworCisJZG97CisJCS8vIGNoZWNrIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQlydmFsID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8vIGNoZWNrIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQlydmFsID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKEZBTFNFKTsKKworCXJldHVybiBydmFsOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCUhFQURFUl84MDJfMTEJRGxzVGVhckRvd25IZHI7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVVNIT1JUCQkJUmVhc29uID0gUkVBU09OX1FPU19RU1RBX0xFQVZJTkdfUUJTUzsKKwlVQ0hBUgkJCUNhdGVnb3J5ID0gQ0FURUdPUllfRExTOworCVVDSEFSCQkJQWN0aW9uID0gQUNUSU9OX0RMU19URUFSRE9XTjsKKwlVQ0hBUgkJCWkgPSAwOworCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZW5kIERMUyBUZWFyRG93biBGcmFtZSBcbiIpKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQVNTT0MgLSBSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNUZWFyRG93bkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNUZWFyRG93bkhkciwKKwkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQk2LAkJCQkJCQlwREEsCisJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCTIsCQkJCQkJCSZSZWFzb24sCisJCQkJCUVORF9PRl9BUkdTKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkvLyBSZW1vdmUga2V5IGluIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJJiYgTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJeworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9CisKKwkvLyBSZW1vdmUga2V5IGluIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpCisJCQkmJiBNQUNfQUREUl9FUVVBTChwREEsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgRExTIFRlYXJEb3duIEZyYW1lIGFuZCByZW1vdmUga2V5IGluIChpPSVkKSBcbiIsIGkpKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitORElTX1NUQVRVUyBSVE1QU2VuZFNUQUtleVJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKQoreworCVVDSEFSCQkJCUhlYWRlcjgwMl8zWzE0XTsKKwlORElTX1NUQVRVUwkJCU5TdGF0dXM7CisJVUxPTkcJCQkJRnJhbWVMZW4gPSAwOworCUVBUE9MX1BBQ0tFVAkJUGFja2V0OworCVVDSEFSCQkJCU1pY1sxNl07CisJVUNIQVIJCQkJZGlnZXN0WzgwXTsKKwlQVUNIQVIJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUE5ESVNfUEFDS0VUCQlwTmRpc1BhY2tldDsKKwlVQ0hBUgkJCQl0ZW1wWzY0XTsKKwlVQ0hBUgkJCQlEbHNQVEtbODBdOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBSVE1QU2VuZFNUQUtleVJlcXVlc3QoKSB0byAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgcERBWzBdLCBwREFbMV0sIHBEQVsyXSwgcERBWzNdLCBwREFbNF0sIHBEQVs1XSkpOworCisJcEFkLT5TZXF1ZW5jZSArKzsKKwlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKKworCS8vIFplcm8gbWVzc2FnZSBib2R5CisJTmRpc1plcm9NZW1vcnkoJlBhY2tldCwgc2l6ZW9mKFBhY2tldCkpOworCVBhY2tldC5Qcm9WZXIgPSBFQVBPTF9WRVI7CisJUGFja2V0LlByb1R5cGUgICAgPSBFQVBPTEtleTsKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUUgKyA2ICsgTUFDX0FERFJfTEVOOwkJLy8gZGF0YSBmaWVsZCBjb250YWluIEtERSBhbmRQZWVyIE1BQyBhZGRyZXNzCisKKwkvLyBTVEFLZXkgTWVzc2FnZSBpcyBhcyBFQVBPTC1LZXkoMSwxLDAsMCxHLzAsMCwwLCBNSUMsIDAsUGVlciBNQUMgS0RFKQorCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKyAgICB7CisgICAgICAgIFBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworICAgIH0KKyAgICBlbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorICAgIHsKKyAgICAgICAgUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisgICAgfQorCisJLy8gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbgorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9CisJCSgoKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgfHwgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSA/IChERVNDX1RZUEVfQUVTKSA6IChERVNDX1RZUEVfVEtJUCkpOworCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMJPSAxOworCVBhY2tldC5LZXlEZXNjLktleUluZm8uU2VjdXJlCT0gMTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLlJlcXVlc3QJPSAxOworCisJUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXQk9IDEyOworCisJLy8gdXNlIG91ciBvd24gT1VJIHRvIGRpc3Rpbmd1aXNoIHByb3ByaWV0YXJ5IHdpdGggc3RhbmRhcmQuCisJUGFja2V0LktleURlc2MuS2V5RGF0YVswXQkJPSAweEREOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbMV0JCT0gMHgwQTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdCQk9IDB4MDA7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVszXQkJPSAweDBDOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbNF0JCT0gMHg0MzsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzVdCQk9IDB4MDM7CisJTmRpc01vdmVNZW1vcnkoJlBhY2tldC5LZXlEZXNjLktleURhdGFbNl0sIHBEQSwgTUFDX0FERFJfTEVOKTsKKworCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLkRsc1JlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gQWxsb2NhdGUgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgbWVzc2FnZQorCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIE5TdGF0dXM7CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwkvLyB1c2UgcHJvcHJpZXRhcnkgUFRLCisJTmRpc1plcm9NZW1vcnkodGVtcCwgNjQpOworCU5kaXNNb3ZlTWVtb3J5KHRlbXAsICJJRUVFODAyLjExIFdJUkVMRVNTIEFDQ0VTUyBQT0lOVCIsIDMyKTsKKwlXcGFDb3VudFBUSyhwQWQsIHRlbXAsIHRlbXAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCB0ZW1wLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBEbHNQVEssIExFTl9QVEspOworCisJLy8gY2FsY3VsYXRlIE1JQworCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIEFFUworCQlOZGlzWmVyb01lbW9yeShkaWdlc3QsCXNpemVvZihkaWdlc3QpKTsKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBEbHNQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlOZGlzWmVyb01lbW9yeShNaWMsCXNpemVvZihNaWMpKTsKKwkJaG1hY19tZDUoRGxzUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCQlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkgICAgICAgICAgICAgICAgICBzaXplb2YoSGVhZGVyODAyXzMpLAlIZWFkZXI4MDJfMywKKwkJICAgICAgICAgICAgICBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LAkmUGFja2V0LAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCU5TdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBOZGlzUGFja2V0LCBOVUxMLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBOZGlzUGFja2V0LCBCU1NJRF9XQ0lEKTsKKwkJU1RBU2VuZFBhY2tldChwQWQsIHBOZGlzUGFja2V0KTsKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNlbmRTVEFLZXlSZXF1ZXN0LSBTZW5kIFNUQUtleSByZXF1ZXN0IChOU3RhdHVzPSV4LCBGcmFtZUxlbj0lbGQpXG4iLCBOU3RhdHVzLCBGcmFtZUxlbikpOworCisJcmV0dXJuIE5TdGF0dXM7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworTkRJU19TVEFUVVMgUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKQoreworCVVDSEFSCQkJCUhlYWRlcjgwMl8zWzE0XTsKKwlORElTX1NUQVRVUwkJCU5TdGF0dXM7CisJVUxPTkcJCQkJRnJhbWVMZW4gPSAwOworCUVBUE9MX1BBQ0tFVAkJUGFja2V0OworCVVDSEFSCQkJCU1pY1sxNl07CisJVUNIQVIJCQkJZGlnZXN0WzgwXTsKKwlQVUNIQVIJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUE5ESVNfUEFDS0VUCQlwTmRpc1BhY2tldDsKKwlVQ0hBUgkJCQl0ZW1wWzY0XTsKKwlVQ0hBUgkJCQlEbHNQVEtbODBdOwkJCS8vIER1ZSB0byBkaXJ2ZXIgY2FuIG5vdCBnZXQgUFRLLCB1c2UgcHJvcHJpZXRhcnkgUFRLCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJUTVBTZW5kU1RBS2V5SGFuZFNoYWtlKCkgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIHBEQVswXSwgcERBWzFdLCBwREFbMl0sIHBEQVszXSwgcERBWzRdLCBwREFbNV0pKTsKKworCXBBZC0+U2VxdWVuY2UgKys7CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwkvLyBaZXJvIG1lc3NhZ2UgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyID0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlICAgID0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFICsgNiArIE1BQ19BRERSX0xFTjsJCS8vIGRhdGEgZmllbGQgY29udGFpbiBLREUgYW5kIFBlZXIgTUFDIGFkZHJlc3MKKworCS8vIFNUQUtleSBNZXNzYWdlIGlzIGFzIEVBUE9MLUtleSgxLDEsMCwwLEcvMCwwLDAsIE1JQywgMCxQZWVyIE1BQyBLREUpCisJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKQorICAgIHsKKyAgICAgICAgUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisgICAgfQorICAgIGVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisgICAgeworICAgICAgICBQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMl9LRVlfREVTQzsKKyAgICB9CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0KKwkJKCgocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB8fCAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpID8gKERFU0NfVFlQRV9BRVMpIDogKERFU0NfVFlQRV9US0lQKSk7CisKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYwk9IDE7CisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmUJPSAxOworCisJUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXQk9IDEyOworCisJLy8gdXNlIG91ciBvd24gT1VJIHRvIGRpc3Rpbmd1aXNoIHByb3ByaWV0YXJ5IHdpdGggc3RhbmRhcmQuCisJUGFja2V0LktleURlc2MuS2V5RGF0YVswXQkJPSAweEREOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbMV0JCT0gMHgwQTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdCQk9IDB4MDA7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVszXQkJPSAweDBDOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbNF0JCT0gMHg0MzsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzVdCQk9IDB4MDM7CisJTmRpc01vdmVNZW1vcnkoJlBhY2tldC5LZXlEZXNjLktleURhdGFbNl0sIHBEQSwgTUFDX0FERFJfTEVOKTsKKworCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLkRsc1JlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gQWxsb2NhdGUgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgbWVzc2FnZQorCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIE5TdGF0dXM7CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwkvLyB1c2UgcHJvcHJpZXRhcnkgUFRLCisJTmRpc1plcm9NZW1vcnkodGVtcCwgNjQpOworCU5kaXNNb3ZlTWVtb3J5KHRlbXAsICJJRUVFODAyLjExIFdJUkVMRVNTIEFDQ0VTUyBQT0lOVCIsIDMyKTsKKwlXcGFDb3VudFBUSyhwQWQsIHRlbXAsIHRlbXAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCB0ZW1wLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBEbHNQVEssIExFTl9QVEspOworCisJLy8gY2FsY3VsYXRlIE1JQworCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIEFFUworCQlOZGlzWmVyb01lbW9yeShkaWdlc3QsCXNpemVvZihkaWdlc3QpKTsKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBEbHNQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlOZGlzWmVyb01lbW9yeShNaWMsCXNpemVvZihNaWMpKTsKKwkJaG1hY19tZDUoRGxzUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCQlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkgICAgICAgICAgICAgICAgICBzaXplb2YoSGVhZGVyODAyXzMpLAlIZWFkZXI4MDJfMywKKwkJICAgICAgICAgICAgICBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LAkmUGFja2V0LAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCU5TdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBOZGlzUGFja2V0LCBOVUxMLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBOZGlzUGFja2V0LCBCU1NJRF9XQ0lEKTsKKwkJU1RBU2VuZFBhY2tldChwQWQsIHBOZGlzUGFja2V0KTsKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UtIFNlbmQgU1RBS2V5IE1lc3NhZ2UtMiAoTlN0YXR1cz0leCwgRnJhbWVMZW49JWxkKVxuIiwgTlN0YXR1cywgRnJhbWVMZW4pKTsKKworCXJldHVybiBOU3RhdHVzOworfQorCitWT0lEIERsc1RpbWVvdXRBY3Rpb24oCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCU1MTUVfRExTX1JFUV9TVFJVQ1QJCU1sbWVEbHNSZXE7CisJVVNIT1JUCQkJCQlyZWFzb247CisJUFJUXzgwMl8xMV9ETFMJCQlwRExTID0gKFBSVF84MDJfMTFfRExTKUZ1bmN0aW9uQ29udGV4dDsKKwlQUlRNUF9BREFQVEVSCQkJcEFkID0gcERMUy0+cEFkOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRGxzVGltZW91dCAtIFRlYXIgZG93biBETFMgbGlua3MgKCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwKKwkJcERMUy0+TWFjQWRkclswXSwgcERMUy0+TWFjQWRkclsxXSwgcERMUy0+TWFjQWRkclsyXSwgcERMUy0+TWFjQWRkclszXSwgcERMUy0+TWFjQWRkcls0XSwgcERMUy0+TWFjQWRkcls1XSkpOworCisJaWYgKChwRExTKSAmJiAocERMUy0+VmFsaWQpKQorCXsKKwkJcmVhc29uCQkJPSBSRUFTT05fUU9TX1JFUVVFU1RfVElNRU9VVDsKKwkJcERMUy0+VmFsaWQJCT0gRkFMU0U7CisJCXBETFMtPlN0YXR1cwk9IERMU19OT05FOworCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCBwRExTLCByZWFzb24pOworCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Rlc2NyaXB0aW9uIDogYmVjYXVzZSBETFMgYW5kIENMSSBzaGFyZSB0aGUgc2FtZSBXQ0lEIHRhYmxlIGluIEFTSUMuCitNZXNoIGVudHJ5IGFsc28gaW5zZXJ0IHRvIHBBZC0+TWFjVGFiLmNvbnRlbnRbXS4gIFN1Y2ggaXMgbWFya2VkIGFzIFZhbGlkQXNEbHMgPSBUUlVFLgorQWxzbyBmaWxscyB0aGUgcGFpcndpc2Uga2V5LgorQmVjYXVzZSBmcm9udCBNQVhfQUlEX0JBIGVudHJpZXMgaGF2ZSBkaXJlY3QgbWFwcGluZyB0byBCQUVudHJ5LCB3aGljaCBpcyBvbmx5IHVzZWQgYXMgQ0xJLiBTbyB3ZSBpbnNlcnQgRGxzCitmcm9tIGluZGV4IE1BWF9BSURfQkEuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTUFDX1RBQkxFX0VOVFJZICpNYWNUYWJsZUluc2VydERsc0VudHJ5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIJcEFkZHIsCisJSU4gIFVJTlQJRGxzRW50cnlJZHgpCit7CisJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gTWFjVGFibGVJbnNlcnREbHNFbnRyeVxuIikpOworCS8vIGlmIEZVTEwsIHJldHVybgorCWlmIChwQWQtPk1hY1RhYi5TaXplID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm4gTlVMTDsKKworCWRvCisJeworCQlpZigocEVudHJ5ID0gRGxzRW50cnlUYWJsZUxvb2t1cChwQWQsIHBBZGRyLCBUUlVFKSkgIT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8vIGFsbG9jYXRlIG9uZSBNQUMgZW50cnkKKwkJcEVudHJ5ID0gTWFjVGFibGVJbnNlcnRFbnRyeShwQWQsIHBBZGRyLCBEbHNFbnRyeUlkeCArIE1JTl9ORVRfREVWSUNFX0ZPUl9ETFMsIFRSVUUpOworCQlpZiAocEVudHJ5KQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUlkeF0uTWFjVGFiTWF0Y2hXQ0lEID0gcEVudHJ5LT5BaWQ7CisJCQlwRW50cnktPk1hdGNoRGxzRW50cnlJZHggPSBEbHNFbnRyeUlkeDsKKwkJCXBFbnRyeS0+QXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKKwkJCXBFbnRyeS0+V2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZUluc2VydERsc0VudHJ5IC0gYWxsb2NhdGUgZW50cnkgIyVkLCBUb3RhbD0gJWRcbiIscEVudHJ5LT5BaWQsIHBBZC0+TWFjVGFiLlNpemUpKTsKKworCQkJLy8gSWYgbGVnYWN5IFdFUCBpcyB1c2VkLCBzZXQgcGFpci13aXNlIGNpcGhlckFsZyBpbnRvIFdDSUQgYXR0cmlidXRlIHRhYmxlIGZvciB0aGlzIGVudHJ5CisJCQlpZiAoKHBFbnRyeS0+VmFsaWRBc0RscykgJiYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKSkKKwkJCXsKKwkJCQlVQ0hBUiBLZXlJZHggPSAwOworCQkJCVVDSEFSIENpcGhlckFsZyA9IDA7CisKKwkJCQlLZXlJZHgJPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7CisKKwkJCQlDaXBoZXJBbGcgCT0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGc7CisKKwkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKwkJCQkJCQkJCQkJQlNTMCwKKwkJCQkJCQkJCQkJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCQkJCQkJcEVudHJ5KTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlKEZBTFNFKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT09IE1hY1RhYmxlSW5zZXJ0RGxzRW50cnlcbiIpKTsKKworCXJldHVybiBwRW50cnk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlEZWxldGUgYWxsIE1lc2ggRW50cnkgaW4gcEFkLT5NYWNUYWIKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1hY1RhYmxlRGVsZXRlRGxzRW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIHdjaWQsCisJSU4gUFVDSEFSIHBBZGRyKQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT0+IE1hY1RhYmxlRGVsZXRlRGxzRW50cnlcbiIpKTsKKworCWlmICghVkFMSURfV0NJRCh3Y2lkKSkKKwkJcmV0dXJuIEZBTFNFOworCisJTWFjVGFibGVEZWxldGVFbnRyeShwQWQsIHdjaWQsIHBBZGRyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT09IE1hY1RhYmxlRGVsZXRlRGxzRW50cnlcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorCitNQUNfVEFCTEVfRU5UUlkgKkRsc0VudHJ5VGFibGVMb29rdXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KQoreworCVVMT05HIEhhc2hJZHg7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCisJUlRNUF9TRU1fTE9DSygmcEFkLT5NYWNUYWJMb2NrKTsKKwlIYXNoSWR4ID0gTUFDX0FERFJfSEFTSF9JTkRFWChwQWRkcik7CisJcEVudHJ5ID0gcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XTsKKworCXdoaWxlIChwRW50cnkpCisJeworCQlpZiAoKHBFbnRyeS0+VmFsaWRBc0RscyA9PSBUUlVFKQorCQkJJiYgTUFDX0FERFJfRVFVQUwocEVudHJ5LT5BZGRyLCBwQWRkcikpCisJCXsKKwkJCWlmKGJSZXNldElkZWxDb3VudCkKKwkJCQlwRW50cnktPk5vRGF0YUlkbGVDb3VudCA9IDA7CisJCQlicmVhazsKKwkJfQorCQllbHNlCisJCQlwRW50cnkgPSBwRW50cnktPnBOZXh0OworCX0KKworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NYWNUYWJMb2NrKTsKKwlyZXR1cm4gcEVudHJ5OworfQorCitNQUNfVEFCTEVfRU5UUlkgKkRsc0VudHJ5VGFibGVMb29rdXBCeVdjaWQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJd2NpZCwKKwlJTiBQVUNIQVIJcEFkZHIsCisJSU4gQk9PTEVBTgliUmVzZXRJZGVsQ291bnQpCit7CisJVUxPTkcgRExzSW5kZXg7CisJUE1BQ19UQUJMRV9FTlRSWSBwQ3VyRW50cnkgPSBOVUxMOworCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCWlmICghVkFMSURfV0NJRCh3Y2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlSVE1QX1NFTV9MT0NLKCZwQWQtPk1hY1RhYkxvY2spOworCisJZG8KKwl7CisJCXBDdXJFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3djaWRdOworCisJCURMc0luZGV4ID0gMHhmZjsKKwkJaWYgKChwQ3VyRW50cnkpICYmIChwQ3VyRW50cnktPlZhbGlkQXNEbHM9PSBUUlVFKSkKKwkJeworCQkJRExzSW5kZXggPSBwQ3VyRW50cnktPk1hdGNoRGxzRW50cnlJZHg7CisJCX0KKworCQlpZiAoRExzSW5kZXggPT0gMHhmZikKKwkJCWJyZWFrOworCisJCWlmIChNQUNfQUREUl9FUVVBTChwQ3VyRW50cnktPkFkZHIsIHBBZGRyKSkKKwkJeworCQkJaWYoYlJlc2V0SWRlbENvdW50KQorCQkJCXBDdXJFbnRyeS0+Tm9EYXRhSWRsZUNvdW50ID0gMDsKKwkJCXBFbnRyeSA9IHBDdXJFbnRyeTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZShGQUxTRSk7CisKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+TWFjVGFiTG9jayk7CisKKwlyZXR1cm4gcEVudHJ5OworfQorCitJTlQgU2V0X0Rsc0VudHJ5SW5mb19EaXNwbGF5X1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZykKK3sKKwlJTlQgaTsKKworCXByaW50aygiXG4lLTE5cyUtOHNcbiIsICJNQUMiLCAiVElNRU9VVFxuIik7CisJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCXsKKwkJCXByaW50aygiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggICIsCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclswXSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclsxXSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclsyXSwKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyWzNdLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyWzRdLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyWzVdKTsKKwkJCXByaW50aygiJS04ZFxuIiwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCk7CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9EbHNBZGRFbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUgltYWNbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQJVGltZW91dDsKKwljaGFyICp0b2tlbiwgc2VwVmFsdWVbXSA9ICI6IiwgREFTSCA9ICctJzsKKwlJTlQgaTsKKyAgICBSVF84MDJfMTFfRExTCURsczsKKworICAgIGlmKHN0cmxlbihhcmcpIDwgMTkpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNyBwbHVzIHRoZSAiLSIgYW5kIHRpbWVvdXQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCVRpbWVvdXQgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkgICAgcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSVkIiwgbWFjWzBdLCBtYWNbMV0sCisJICAgICAgICAgICBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIChpbnQpVGltZW91dCk7CisKKwkJTmRpc1plcm9NZW1vcnkoJkRscywgc2l6ZW9mKFJUXzgwMl8xMV9ETFMpKTsKKwkJRGxzLlRpbWVPdXQgPSBUaW1lb3V0OworCQlDT1BZX01BQ19BRERSKERscy5NYWNBZGRyLCBtYWMpOworCQlEbHMuVmFsaWQgPSAxOworCisJCU1sbWVFbnF1ZXVlKHBBZCwKKwkJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSwKKwkJCQkJc2l6ZW9mKFJUXzgwMl8xMV9ETFMpLAorCQkJCQkmRGxzKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisKK30KKworSU5UCVNldF9EbHNUZWFyRG93bkVudHJ5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSCQkJbWFjQWRkcltNQUNfQUREUl9MRU5dOworCUNIQVIJCQkqdmFsdWU7CisJSU5UCQkJCWk7CisJUlRfODAyXzExX0RMUwlEbHM7CisKKwlpZihzdHJsZW4oYXJnKSAhPSAxNykgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3CisJCXJldHVybiBGQUxTRTsKKworCWZvciAoaT0wLCB2YWx1ZSA9IHJzdHJ0b2soYXJnLCI6Iik7IHZhbHVlOyB2YWx1ZSA9IHJzdHJ0b2soTlVMTCwiOiIpKQorCXsKKwkJaWYoKHN0cmxlbih2YWx1ZSkgIT0gMikgfHwgKCFpc3hkaWdpdCgqdmFsdWUpKSB8fCAoIWlzeGRpZ2l0KCoodmFsdWUrMSkpKSApCisJCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCQlBdG9IKHZhbHVlLCAmbWFjQWRkcltpKytdLCAyKTsKKwl9CisKKwlwcmludGsoIlxuJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCBtYWNBZGRyWzBdLCBtYWNBZGRyWzFdLAorCSAgICAgICAgICAgbWFjQWRkclsyXSwgbWFjQWRkclszXSwgbWFjQWRkcls0XSwgbWFjQWRkcls1XSk7CisKKwlOZGlzWmVyb01lbW9yeSgmRGxzLCBzaXplb2YoUlRfODAyXzExX0RMUykpOworCUNPUFlfTUFDX0FERFIoRGxzLk1hY0FkZHIsIG1hY0FkZHIpOworCURscy5WYWxpZCA9IDA7CisKKwlNbG1lRW5xdWV1ZShwQWQsCisJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJUlRfT0lEXzgwMl8xMV9TRVRfRExTX1BBUkFNLAorCQkJCXNpemVvZihSVF84MDJfMTFfRExTKSwKKwkJCQkmRGxzKTsKKworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9ydG1wX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3J0bXBfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjI1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9ydG1wX2RhdGEuYwpAQCAtMCwwICsxLDI2MzcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJcnRtcF9kYXRhLmMKKworCUFic3RyYWN0OgorCURhdGEgcGF0aCBzdWJyb3V0aW5lcworCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8gCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huCQkgICAgICBBdWcvMTcvMDQJCW1ham9yIG1vZGlmaWNhdGlvbiBmb3IgUlQyNTYxLzI2NjEKKwlKYW4gTGVlCSAgICAgIE1hci8xNy8wNgkJbWFqb3IgbW9kaWZpY2F0aW9uIGZvciBSVDI4NjAgTmV3IFJpbmcgRGVzaWduCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisKKworVk9JRCBTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCA9ICYocFJ4QmxrLT5SeEQpOworCVBSWFdJX1NUUlVDCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisJVUNIQVIJCQkqcFRtcEJ1ZjsKKworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisJeworCQkvLyBBbGwgRUFQb0wgZnJhbWVzIGhhdmUgdG8gcGFzcyB0byB1cHBlciBsYXllciAoZXguIFdQQV9TVVBQTElDQU5UIGRhZW1vbikKKwkJLy8gVEJEIDogcHJvY2VzcyBmcmFnbWVudGVkIEVBUG9sIGZyYW1lcworCQl7CisJCQkvLyBJbiA4MDIuMXggbW9kZSwgaWYgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIEVBUC1TVUNDRVNTIHBhY2tldCwgdHVybiBvbiB0aGUgUG9ydFNlY3VyZWQgdmFyaWFibGUKKwkJCWlmICggcEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IFRSVUUgJiYKKwkJCQkgKEVBUF9DT0RFX1NVQ0NFU1MgPT0gV3BhQ2hlY2tFYXBDb2RlKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4QmxrLT5EYXRhU2l6ZSwgTEVOR1RIXzgwMl8xX0gpKSkKKwkJCXsKKwkJCQlQVUNIQVIJS2V5OworCQkJCVVDSEFSIAlDaXBoZXJBbGc7CisJCQkJaW50ICAgICBpZHggPSAwOworCisJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQLVNVQ0NFU1MgUGFja2V0XG4iKSk7CisJCQkJLy9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKKworICAgICAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5JRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleUlkOworICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGcgPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5DaXBoZXJBbGc7CisJCQkJCUtleSA9IHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuID4gMCkKKyAgICAJCQkJeworI2lmZGVmIFJUMjg3MAorCQkJCQkJdW5pb24KKwkJCQkJCXsKKwkJCQkJCQljaGFyIGJ1ZltzaXplb2YoTkRJU184MDJfMTFfV0VQKStNQVhfTEVOX09GX0tFWS0gMV07CisJCQkJCQkJTkRJU184MDJfMTFfV0VQIGtleWluZm87CisJCQkJCQl9ICBXZXBLZXk7CisJCQkJCQlpbnQgbGVuOworCisKKwkJCQkJCU5kaXNaZXJvTWVtb3J5KCZXZXBLZXksIHNpemVvZihXZXBLZXkpKTsKKwkJCQkJCWxlbiA9cEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuOworCisJCQkJCQlOZGlzTW92ZU1lbW9yeShXZXBLZXkua2V5aW5mby5LZXlNYXRlcmlhbCwKKwkJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5LZXksCisJCQkJCQkJcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuKTsKKworCQkJCQkJV2VwS2V5LmtleWluZm8uS2V5SW5kZXggPSAweDgwMDAwMDAwICsgaWR4OworCQkJCQkJV2VwS2V5LmtleWluZm8uS2V5TGVuZ3RoID0gbGVuOworCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPShVQ0hBUikgKGxlbiA8PSA1ID8gNSA6IDEzKTsKKworCQkJCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQkJCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOworCQkJCQkJLy8gbmVlZCB0byBlbnF1ZXVlIGNtZCB0byB0aHJlYWQKKwkJCQkJCVJUVVNCRW5xdWV1ZUNtZEZyb21OZGlzKHBBZCwgT0lEXzgwMl8xMV9BRERfV0VQLCBUUlVFLCAmV2VwS2V5LCBzaXplb2YoV2VwS2V5LmtleWluZm8pICsgbGVuIC0gMSk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJCQkJCQkvLyBGb3IgUHJldmVudGluZyBTaGFyZEtleSBUYWJsZSBpcyBjbGVhcmVkIGJ5IHJlbW92ZSBrZXkgcHJvY2VkdXJlLgorICAgIAkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA9IHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbjsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5LAorCQkJCQkJCQkJICAgcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5LAorCQkJCQkJCQkJICAgcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuKTsKKyAgICAJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQkJcmV0dXJuOworCQl9CisJfQorCWVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJeworCQkvLyBTcGVjaWFsIERBVEEgZnJhbWUgdGhhdCBoYXMgdG8gcGFzcyB0byBNTE1FCisJCS8vCSAxLiBDaXNjbyBBaXJvbmV0IGZyYW1lcyBmb3IgQ0NYMi4gV2UgbmVlZCBwYXNzIGl0IHRvIE1MTUUgZm9yIHNwZWNpYWwgcHJvY2VzcworCQkvLwkgMi4gRUFQT0wgaGFuZHNoYWtpbmcgZnJhbWVzIHdoZW4gZHJpdmVyIHN1cHBsaWNhbnQgZW5hYmxlZCwgcGFzcyB0byBNTE1FIGZvciBzcGVjaWFsIHByb2Nlc3MKKwkJeworCQkJcFRtcEJ1ZiA9IHBSeEJsay0+cERhdGEgLSBMRU5HVEhfODAyXzExOworCQkJTmRpc01vdmVNZW1vcnkocFRtcEJ1ZiwgcFJ4QmxrLT5wSGVhZGVyLCBMRU5HVEhfODAyXzExKTsKKwkJCVJFUE9SVF9NR01UX0ZSQU1FX1RPX01MTUUocEFkLCBwUnhXSS0+V2lyZWxlc3NDbGlJRCwgcFRtcEJ1ZiwgcFJ4QmxrLT5EYXRhU2l6ZSArIExFTkdUSF84MDJfMTEsIHBSeFdJLT5SU1NJMCwgcFJ4V0ktPlJTU0kxLCBwUnhXSS0+UlNTSTIsIHBSeEQtPlBsY3BTaWduYWwpOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiEhISByZXBvcnQgRUFQT0wvQUlST05FVCBEQVRBIHRvIE1MTUUgKGxlbj0lZCkgISEhXG4iLCBwUnhCbGstPkRhdGFTaXplKSk7CisJCX0KKwl9CisKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCXJldHVybjsKKworfQorCitWT0lEIFNUQVJ4RGF0YUZyYW1lQW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCisJLy8gbm9uLUVBUCBmcmFtZQorCWlmICghUlRNUENoZWNrV1BBZnJhbWUocEFkLCBwRW50cnksIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUsIEZyb21XaGljaEJTU0lEKSkKKwl7CisKKwkJeworCQkJLy8gZHJvcCBhbGwgbm9uLUVBUCBEQVRBIGZyYW1lIGJlZm9yZQorCQkJLy8gdGhpcyBjbGllbnQncyBQb3J0LUFjY2Vzcy1Db250cm9sIGlzIHNlY3VyZWQKKwkJCWlmIChwUnhCbGstPnBIZWFkZXItPkZDLldlcCkKKwkJCXsKKwkJCQkvLyB1bnN1cHBvcnRlZCBjaXBoZXIgc3VpdGUKKwkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCisJCQkJeworCQkJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGVuY3J5cHRpb24gaW4tdXNlIGJ1dCByZWNlaXZlIGEgbm9uLUVBUE9MIGNsZWFyIHRleHQgZnJhbWUsIGRyb3AgaXQKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKSAmJgorCQkJCQkocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkJCQl7CisJCQkJCS8vIHJlbGVhc2UgcGFja2V0CisJCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKwkJUlhfQkxLX0NMRUFSX0ZMQUcocFJ4QmxrLCBmUlhfRUFQKTsKKwkJaWYgKCFSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FSQUxJTkspKQorCQl7CisJCQkvLyBOb3JtYWwgbGVnYWN5LCBBTVBEVSBvciBBTVNEVQorCQkJQ21tUnhub25SYWxpbmtGcmFtZUluZGljYXRlKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIEFSQUxJTksKKwkJCUNtbVJ4UmFsaW5rRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJUlhfQkxLX0NMRUFSX0ZMQUcocFJ4QmxrLCBmUlhfRExTKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl9CisJZWxzZQorCXsKKwkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0VBUCk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNUERVKSAmJiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApKQorCQl7CisJCQlJbmRpY2F0ZV9BTVBEVV9QYWNrZXQocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCXsKKwkJCS8vIERldGVybWluIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgRUFQIGZyYW1lCisJCQkvLyAgdG8gV1BBIHN0YXRlIG1hY2hpbmUgb3IgdXBwZXIgbGF5ZXIKKwkJCVNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKHBBZCwgcEVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJfQorCX0KK30KKworCisvLyBGb3IgVEtJUCBmcmFtZSwgY2FsY3VsYXRlIHRoZSBNSUMgdmFsdWUKK0JPT0xFQU4gU1RBQ2hlY2tUa2lwTUlDVmFsdWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaykKK3sKKwlQSEVBREVSXzgwMl8xMQlwSGVhZGVyID0gcFJ4QmxrLT5wSGVhZGVyOworCVVDSEFSCQkJKnBEYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlVU0hPUlQJCQlEYXRhU2l6ZSA9IHBSeEJsay0+RGF0YVNpemU7CisJVUNIQVIJCQlVc2VyUHJpb3JpdHkgPSBwUnhCbGstPlVzZXJQcmlvcml0eTsKKwlQQ0lQSEVSX0tFWQkJcFdwYUtleTsKKwlVQ0hBUgkJCSpwREEsICpwU0E7CisKKwlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeEJsay0+cFJ4V0ktPktleUluZGV4XTsKKworCXBEQSA9IHBIZWFkZXItPkFkZHIxOworCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0lORlJBKSkKKwl7CisJCXBTQSA9IHBIZWFkZXItPkFkZHIzOworCX0KKwllbHNlCisJeworCQlwU0EgPSBwSGVhZGVyLT5BZGRyMjsKKwl9CisKKwlpZiAoUlRNUFRraXBDb21wYXJlTUlDVmFsdWUocEFkLAorCQkJCQkJCQlwRGF0YSwKKwkJCQkJCQkJcERBLAorCQkJCQkJCQlwU0EsCisJCQkJCQkJCXBXcGFLZXktPlJ4TWljLAorCQkJCQkJCQlVc2VyUHJpb3JpdHksCisJCQkJCQkJCURhdGFTaXplKSA9PSBGQUxTRSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIlJ4IE1JQyBWYWx1ZSBlcnJvciAyXG4iKSk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisJCXsKKwkJCVdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KHBBZCwgKHBXcGFLZXktPlR5cGUgPT0gUEFJUldJU0VLRVkpID8gVFJVRSA6IEZBTFNFKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQl7CisJCQlSVE1QUmVwb3J0TWljRXJyb3IocEFkLCBwV3BhS2V5KTsKKwkJfQorCisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCisvLworLy8gQWxsIFJ4IHJvdXRpbmVzIHVzZSBSWF9CTEsgc3RydWN0dXJlIHRvIGhhbmRlIHJ4IGV2ZW50cworLy8gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gYnVpbGQgcFJ4QmxrIGF0dHJpYnV0ZXMKKy8vICAxLiBwSGVhZGVyIHBvaW50ZXIgdG8gODAyLjExIEhlYWRlcgorLy8gIDIuIHBEYXRhIHBvaW50ZXIgdG8gcGF5bG9hZCBpbmNsdWRpbmcgTExDIChqdXN0IHNraXAgSGVhZGVyKQorLy8gIDMuIHNldCBwYXlsb2FkIHNpemUgaW5jbHVkaW5nIExMQyB0byBEYXRhU2l6ZQorLy8gIDQuIHNldCBzb21lIGZsYWdzIHdpdGggUlhfQkxLX1NFVF9GTEFHKCkKKy8vCitWT0lEIFNUQUhhbmRsZVJ4RGF0YUZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGspCit7CisJUFJUMjhYWF9SWERfU1RSVUMJCQkJcFJ4RCA9ICYocFJ4QmxrLT5SeEQpOworCVBSWFdJX1NUUlVDCQkJCQkJcFJ4V0kgPSBwUnhCbGstPnBSeFdJOworCVBIRUFERVJfODAyXzExCQkJCQlwSGVhZGVyID0gcFJ4QmxrLT5wSGVhZGVyOworCVBORElTX1BBQ0tFVAkJCQkJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisJQk9PTEVBTiAJCQkJCQliRnJhZ21lbnQgPSBGQUxTRTsKKwlNQUNfVEFCTEVfRU5UUlkJICAgIAkJCSpwRW50cnkgPSBOVUxMOworCVVDSEFSCQkJCQkJCUZyb21XaGljaEJTU0lEID0gQlNTMDsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcmlvcml0eSA9IDA7CisKKwl7CisJCS8vIGJlZm9yZSBMSU5LIFVQLCBhbGwgREFUQSBmcmFtZXMgYXJlIHJlamVjdGVkCisJCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQl7CisJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkvL2lmICgocEhlYWRlci0+RkMuRnJEcyA9PSAwKSAmJiAocEhlYWRlci0+RkMuVG9EcyA9PSAwKSkKKwkJaWYgKFJUTVBSY3ZGcmFtZURMU0NoZWNrKHBBZCwgcEhlYWRlciwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwgcFJ4RCkpCisJCXsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCS8vIERyb3Agbm90IG15IEJTUyBmcmFtZXMKKwkJaWYgKHBSeEQtPk15QnNzID09IDApCisJCXsKKwkJCXsKKwkJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwrKzsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSAmJiAocEhlYWRlci0+RkMuU3ViVHlwZSAmIDB4MDgpKQorCQl7CisJCQlVQ0hBUiAqcERhdGE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoImJBUFNEQ2FwYWJsZVxuIikpOworCisJCQkvLyBRb3MgYml0IDQKKwkJCXBEYXRhID0gKFBVQ0hBUilwSGVhZGVyICsgTEVOR1RIXzgwMl8xMTsKKwkJCWlmICgoKnBEYXRhID4+IDQpICYgMHgwMSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJ4RG9uZS0gUmN2IEVPU1AgZnJhbWUsIGRyaXZlciBtYXkgZmFsbCBpbnRvIHNsZWVwXG4iKSk7CisJCQkJcEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCA9IEZBTFNFOworCisJCQkJLy8gRm9yY2UgZHJpdmVyIHRvIGZhbGwgaW50byBzbGVlcCBtb2RlIHdoZW4gcmN2IEVPU1AgZnJhbWUKKwkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCQkJeworCQkJCQlVU0hPUlQgIFRidHROdW1Ub05leHRXYWtlVXA7CisJCQkJCVVTSE9SVCAgTmV4dER0aW0gPSBwQWQtPlN0YUNmZy5EdGltUGVyaW9kOworCQkJCQlVTE9ORyAgIE5vdzsKKworCQkJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJCQlOZXh0RHRpbSAtPSAoVVNIT1JUKShOb3cgLSBwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lKS9wQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2Q7CisKKwkJCQkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudDsKKwkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKSAmJiAoVGJ0dE51bVRvTmV4dFdha2VVcCA+IE5leHREdGltKSkKKwkJCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPSBOZXh0RHRpbTsKKworCQkJCQlNbG1lU2V0UHNtQml0KHBBZCwgUFdSX1NBVkUpOworCQkJCQkvLyBpZiBXTU0tQVBTRCBpcyBmYWlsZWQsIHRyeSB0byBkaXNhYmxlIGZvbGxvd2luZyBsaW5lCisJCQkJCUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKHBIZWFkZXItPkZDLk1vcmVEYXRhKSAmJiAocEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZW5kaW5nIGFub3RoZXIgdHJpZ2dlciBmcmFtZSB3aGVuIE1vcmUgRGF0YSBiaXQgaXMgc2V0IHRvIDFcbiIpKTsKKwkJCX0KKwkJfQorCisJCS8vIERyb3AgTlVMTCwgQ0YtQUNLKG5vIGRhdGEpLCBDRi1QT0xMKG5vIGRhdGEpLCBhbmQgQ0YtQUNLK0NGLVBPTEwobm8gZGF0YSkgZGF0YSBmcmFtZQorCQlpZiAoKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA0KSkgLy8gYml0IDIgOiBubyBEQVRBCisJCXsKKwkJCS8vIHJlbGVhc2UgcGFja2V0CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybjsKKwkJfQorCisJICAgIC8vIERyb3Agbm90IG15IEJTUyBmcmFtZSAod2UgY2FuIG5vdCBvbmx5IGNoZWNrIHRoZSBNeUJzcyBiaXQgaW4gUnhEKQorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCSAgICBpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCSAgICB7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCWlmIChJTkZSQV9PTihwQWQpKQorCQl7CisJCQkvLyBJbmZyYXN0cnVjdHVyZSBtb2RlLCBjaGVjayBhZGRyZXNzIDIgZm9yIEJTU0lECisJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeSgmcEhlYWRlci0+QWRkcjIsICZwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgNikpCisJCQl7CisJCQkJLy8gUmVjZWl2ZSBmcmFtZSBub3QgbXkgQlNTSUQKKwkgICAgICAgICAgICAvLyByZWxlYXNlIHBhY2tldAorCSAgICAgICAgICAgIFJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQllbHNlCS8vIEFkLUhvYyBtb2RlIG9yIE5vdCBhc3NvY2lhdGVkCisJCXsKKwkJCS8vIEFkLUhvYyBtb2RlLCBjaGVjayBhZGRyZXNzIDMgZm9yIEJTU0lECisJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeSgmcEhlYWRlci0+QWRkcjMsICZwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgNikpCisJCQl7CisJCQkJLy8gUmVjZWl2ZSBmcmFtZSBub3QgbXkgQlNTSUQKKwkgICAgICAgICAgICAvLyByZWxlYXNlIHBhY2tldAorCSAgICAgICAgICAgIFJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCSAgICB9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJLy8KKwkJLy8gZmluZCBwRW50cnkKKwkJLy8KKwkJaWYgKHBSeFdJLT5XaXJlbGVzc0NsaUlEIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BSeFdJLT5XaXJlbGVzc0NsaUlEXTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIDEuIHJlbGVhc2UgcGFja2V0IGlmIGluZnJhIG1vZGUKKwkJCS8vIDIuIG5ldyBhIHBFbnRyeSBpZiBhZC1ob2MgbW9kZQorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBpbmZyYSBvciBhZC1ob2MKKwkJaWYgKElORlJBX09OKHBBZCkpCisJCXsKKwkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9JTkZSQSk7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlpZiAoKHBIZWFkZXItPkZDLkZyRHMgPT0gMCkgJiYgKHBIZWFkZXItPkZDLlRvRHMgPT0gMCkpCisJCQkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0RMUyk7CisJCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCQlBU1NFUlQocFJ4V0ktPldpcmVsZXNzQ2xpSUQgPT0gQlNTSURfV0NJRCk7CisJCX0KKworCQkvLyBjaGVjayBBdGhlcm9zIENsaWVudAorCQlpZiAoKHBFbnRyeS0+YklBbUJhZEF0aGVyb3MgPT0gRkFMU0UpICYmICAocFJ4RC0+QU1QRFUgPT0gMSkgJiYgKHBIZWFkZXItPkZDLlJldHJ5ICkpCisJCXsKKwkJCXBFbnRyeS0+YklBbUJhZEF0aGVyb3MgPSBUUlVFOworCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iQ3VycmVudEF0aGVyb3MgPSBUUlVFOworCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTGFzdEF0aGVyb3MgPSBUUlVFOworCQkJaWYgKCFTVEFfQUVTX09OKHBBZCkpCisJCQl7CisJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCA4LCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIEZBTFNFKTsKKwkJCX0KKwkJfQorCX0KKworCXBSeEJsay0+cERhdGEgPSAoVUNIQVIgKilwSGVhZGVyOworCisJLy8KKwkvLyB1cGRhdGUgUnhCbGstPnBEYXRhLCBEYXRhU2l6ZQorCS8vIDgwMi4xMSBIZWFkZXIsIFFPUywgSFRDLCBIdyBQYWRkaW5nCisJLy8KKworCS8vIDEuIHNraXAgODAyLjExIEhFQURFUgorCXsKKwkJcFJ4QmxrLT5wRGF0YSArPSBMRU5HVEhfODAyXzExOworCQlwUnhCbGstPkRhdGFTaXplIC09IExFTkdUSF84MDJfMTE7CisJfQorCisJLy8gMi4gUU9TCisJaWYgKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KQorCXsKKwkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX1FPUyk7CisJCVVzZXJQcmlvcml0eSA9ICoocFJ4QmxrLT5wRGF0YSkgJiAweDBmOworCQkvLyBiaXQgNyBpbiBRb1MgQ29udHJvbCBmaWVsZCBzaWduYWxzIHRoZSBIVCBBLU1TRFUgZm9ybWF0CisJCWlmICgoKnBSeEJsay0+cERhdGEpICYgMHg4MCkKKwkJeworCQkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKTsKKwkJfQorCisJCS8vIHNraXAgUU9TIGNvbnRvcmwgZmllbGQKKwkJcFJ4QmxrLT5wRGF0YSArPSAyOworCQlwUnhCbGstPkRhdGFTaXplIC09MjsKKwl9CisJcFJ4QmxrLT5Vc2VyUHJpb3JpdHkgPSBVc2VyUHJpb3JpdHk7CisKKwkvLyAzLiBPcmRlciBiaXQ6IEEtUmFsaW5rIG9yIEhUQysKKwlpZiAocEhlYWRlci0+RkMuT3JkZXIpCisJeworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKKwkJaWYgKChwUnhXSS0+UEhZTU9ERSA8PSBNT0RFX09GRE0pICYmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCkpKQorCQl7CisJCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfQVJBTElOSyk7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9IVEMpOworCQkJLy8gc2tpcCBIVEMgY29udG9ybCBmaWVsZAorCQkJcFJ4QmxrLT5wRGF0YSArPSA0OworCQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSA0OworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl9CisJfQorCisJLy8gNC4gc2tpcCBIVyBwYWRkaW5nCisJaWYgKHBSeEQtPkwyUEFEKQorCXsKKwkJLy8ganVzdCBtb3ZlIHBEYXRhIHBvaW50ZXIKKwkJLy8gYmVjYXVzZSBEYXRhU2l6ZSBleGNsdWRpbmcgSFcgcGFkZGluZworCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfUEFEKTsKKwkJcFJ4QmxrLT5wRGF0YSArPSAyOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChwUnhELT5CQSkKKwl7CisJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9BTVBEVSk7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKwkvLworCS8vIENhc2UgSSAgUHJvY2VzcyBCcm9hZGNhc3QgJiBNdWx0aWNhc3QgZGF0YSBmcmFtZQorCS8vCisJaWYgKHBSeEQtPkJjYXN0IHx8IHBSeEQtPk1jYXN0KQorCXsKKwkJSU5DX0NPVU5URVI2NChwQWQtPldsYW5Db3VudGVycy5NdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOworCisJCS8vIERyb3AgTWNhc3QvQmNhc3QgZnJhbWUgd2l0aCBmcmFnbWVudCBiaXQgb24KKwkJaWYgKHBIZWFkZXItPkZDLk1vcmVGcmFnKQorCQl7CisJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBGaWx0ZXIgb3V0IEJjYXN0IGZyYW1lIHdoaWNoIEFQIHJlbGF5ZWQgZm9yIHVzCisJCWlmIChwSGVhZGVyLT5GQy5GckRzICYmIE1BQ19BRERSX0VRVUFMKHBIZWFkZXItPkFkZHIzLCBwQWQtPkN1cnJlbnRBZGRyZXNzKSkKKwkJeworCQkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJcmV0dXJuOworCQl9CisKKwkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQlyZXR1cm47CisJfQorCWVsc2UgaWYgKHBSeEQtPlUyTSkKKwl7CisJCXBBZC0+TGFzdFJ4UmF0ZSA9IChVU0hPUlQpKChwUnhXSS0+TUNTKSArIChwUnhXSS0+QlcgPDw3KSArIChwUnhXSS0+U2hvcnRHSSA8PDgpKyAocFJ4V0ktPlBIWU1PREUgPDwxNCkpIDsKKworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisgICAgICAgIGlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0RMUykpCisJCXsKKwkJCU1BQ19UQUJMRV9FTlRSWSAqcERsc0VudHJ5ID0gTlVMTDsKKworCQkJcERsc0VudHJ5ID0gRGxzRW50cnlUYWJsZUxvb2t1cEJ5V2NpZChwQWQsIHBSeFdJLT5XaXJlbGVzc0NsaUlELCBwSGVhZGVyLT5BZGRyMiwgVFJVRSk7CisJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgaWYocERsc0VudHJ5KQorCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBEbHNFbnRyeS0+UnNzaVNhbXBsZSwgcFJ4V0kpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCXsKKwkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgcEhlYWRlci0+QWRkcjIpOworCQkJaWYgKHBFbnRyeSkKKwkJCQlVcGRhdGVfUnNzaV9TYW1wbGUocEFkLCAmcEVudHJ5LT5Sc3NpU2FtcGxlLCBwUnhXSSk7CisJCX0KKworCisJCVVwZGF0ZV9Sc3NpX1NhbXBsZShwQWQsICZwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLCBwUnhXSSk7CisKKwkJcEFkLT5TdGFDZmcuTGFzdFNOUjAgPSAoVUNIQVIpKHBSeFdJLT5TTlIwKTsKKwkJcEFkLT5TdGFDZmcuTGFzdFNOUjEgPSAoVUNIQVIpKHBSeFdJLT5TTlIxKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250Kys7CisKKworICAgIAlpZiAoISgocEhlYWRlci0+RnJhZyA9PSAwKSAmJiAocEhlYWRlci0+RkMuTW9yZUZyYWcgPT0gMCkpKQorICAgIAl7CisgICAgCQkvLyByZS1hc3NlbWJsZSB0aGUgZnJhZ21lbnRlZCBwYWNrZXRzCisgICAgCQkvLyByZXR1cm4gY29tcGxldGUgZnJhbWUgKHBSeFBhY2tldCkgb3IgTlVMTAorICAgIAkJYkZyYWdtZW50ID0gVFJVRTsKKyAgICAJCXBSeFBhY2tldCA9IFJUTVBEZUZyYWdtZW50RGF0YUZyYW1lKHBBZCwgcFJ4QmxrKTsKKyAgICAJfQorCisgICAgCWlmIChwUnhQYWNrZXQpCisgICAgCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BSeFdJLT5XaXJlbGVzc0NsaUlEXTsKKworICAgIAkJLy8gcHJvY2VzcyBjb21wbGV0ZSBmcmFtZQorICAgIAkJaWYgKGJGcmFnbWVudCAmJiAocFJ4RC0+RGVjcnlwdGVkKSAmJiAocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkpCisgICAgCQl7CisJCQkJLy8gTWludXMgTUlDIGxlbmd0aAorCQkJCXBSeEJsay0+RGF0YVNpemUgLT0gODsKKworICAgIAkJCS8vIEZvciBUS0lQIGZyYW1lLCBjYWxjdWxhdGUgdGhlIE1JQyB2YWx1ZQorICAgIAkJCWlmIChTVEFDaGVja1RraXBNSUNWYWx1ZShwQWQsIHBFbnRyeSwgcFJ4QmxrKSA9PSBGQUxTRSkKKyAgICAJCQl7CisgICAgCQkJCXJldHVybjsKKyAgICAJCQl9CisgICAgCQl9CisKKyAgICAJCVNUQVJ4RGF0YUZyYW1lQW5ub3VuY2UocEFkLCBwRW50cnksIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQkJcmV0dXJuOworICAgIAl9CisgICAgCWVsc2UKKyAgICAJeworICAgIAkJLy8ganVzdCByZXR1cm4KKyAgICAJCS8vIGJlY2F1c2UgUlRNUERlRnJhZ21lbnREYXRhRnJhbWUoKSB3aWxsIHJlbGVhc2UgcnggcGFja2V0LAorICAgIAkJLy8gaWYgcGFja2V0IGlzIGZyYWdtZW50ZWQKKyAgICAJCXJldHVybjsKKyAgICAJfQorCX0KKworCUFTU0VSVCgwKTsKKwkvLyByZWxlYXNlIHBhY2tldAorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworfQorCitWT0lEIFNUQUhhbmRsZVJ4TWdtdEZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGspCit7CisJUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCA9ICYocFJ4QmxrLT5SeEQpOworCVBSWFdJX1NUUlVDCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKKwlQTkRJU19QQUNLRVQJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisKKwlkbworCXsKKworCQkvLyBXZSBzaG91bGQgY29sbGVjdCBSU1NJIG5vdCBvbmx5IFUyTSBkYXRhIGJ1dCBhbHNvIG15IGJlYWNvbgorCQlpZiAoKHBIZWFkZXItPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9CRUFDT04pICYmIChNQUNfQUREUl9FUVVBTCgmcEFkLT5Db21tb25DZmcuQnNzaWQsICZwSGVhZGVyLT5BZGRyMikpCisJCQkmJiAocEFkLT5SeEFudC5FdmFsdWF0ZVBlcmlvZCA9PSAwKSkKKwkJeworCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUsIHBSeFdJKTsKKworCQkJcEFkLT5TdGFDZmcuTGFzdFNOUjAgPSAoVUNIQVIpKHBSeFdJLT5TTlIwKTsKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RTTlIxID0gKFVDSEFSKShwUnhXSS0+U05SMSk7CisJCX0KKworI2lmZGVmIFJUMzB4eAorCQkvLyBjb2xsZWN0IHJzc2kgaW5mb3JtYXRpb24gZm9yIGFudGVubmEgZGl2ZXJzaXR5CisJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KQorCQl7CisJCQlpZiAoKHBSeEQtPlUyTSkgfHwgKChwSGVhZGVyLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKSAmJiAoTUFDX0FERFJfRVFVQUwoJnBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCAmcEhlYWRlci0+QWRkcjIpKSkpCisJCQl7CisJCQkJCUNPTExFQ1RfUlhfQU5URU5OQV9BVkVSQUdFX1JTU0kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgKFVDSEFSKXBSeFdJLT5SU1NJMCwgUlNTSV8wKSwgMCk7IC8vTm90ZTogUlNTSTIgbm90IHVzZWQgb24gUlQ3MworCQkJCQlwQWQtPlN0YUNmZy5OdW1PZkF2Z1Jzc2lTYW1wbGUgKys7CisJCQl9CisJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKworCQkvLyBGaXJzdCBjaGVjayB0aGUgc2l6ZSwgaXQgTVVTVCBub3QgZXhjZWVkIHRoZSBtbG1lIHF1ZXVlIHNpemUKKwkJaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPiBNR01UX0RNQV9CVUZGRVJfU0laRSkKKwkJeworCQkJREJHUFJJTlRfRVJSKCgiU1RBSGFuZGxlUnhNZ210RnJhbWU6IGZyYW1lIHRvbyBsYXJnZSwgc2l6ZSA9ICVkIFxuIiwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCkpOworCQkJYnJlYWs7CisJCX0KKworCQlSRVBPUlRfTUdNVF9GUkFNRV9UT19NTE1FKHBBZCwgcFJ4V0ktPldpcmVsZXNzQ2xpSUQsIHBIZWFkZXIsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQsCisJCQkJCQkJCQlwUnhXSS0+UlNTSTAsIHBSeFdJLT5SU1NJMSwgcFJ4V0ktPlJTU0kyLCBwUnhELT5QbGNwU2lnbmFsKTsKKwl9IHdoaWxlIChGQUxTRSk7CisKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKK30KKworVk9JRCBTVEFIYW5kbGVSeENvbnRyb2xGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKQoreworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVBSWFdJX1NUUlVDCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJUEhFQURFUl84MDJfMTEJcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKKwlQTkRJU19QQUNLRVQJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisKKwlzd2l0Y2ggKHBIZWFkZXItPkZDLlN1YlR5cGUpCisJeworCQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLX1JFUToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCXsKKwkJCQlDbnRsRW5xdWV1ZUZvclJlY3YocEFkLCBwUnhXSS0+V2lyZWxlc3NDbGlJRCwgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQpLCAoUEZSQU1FX0JBX1JFUSlwSGVhZGVyKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLOgorCQljYXNlIFNVQlRZUEVfQUNLOgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgUnhEb25lIGludGVycnVwdCwgcnVubmluZyBpbiBEUEMgbGV2ZWwKKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQlUaGlzIHJvdXRpbmUgaGFzIHRvIG1haW50YWluIFJ4IHJpbmcgcmVhZCBwb2ludGVyLgorCQlOZWVkIHRvIGNvbnNpZGVyIFFPUyBEQVRBIGZvcm1hdCB3aGVuIGNvbnZlcnRpbmcgdG8gODAyLjMKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFNUQVJ4RG9uZUludGVycnVwdEhhbmRsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglCT09MRUFOCQkJYXJnYykKK3sKKwlORElTX1NUQVRVUwkJCVN0YXR1czsKKwlVSU5UMzIJCQlSeFByb2Nlc3NlZCwgUnhQZW5kaW5nOworCUJPT0xFQU4JCQliUmVzY2hlZHVsZSA9IEZBTFNFOworCVJUMjhYWF9SWERfU1RSVUMJKnBSeEQ7CisJVUNIQVIJCQkqcERhdGE7CisJUFJYV0lfU1RSVUMJCXBSeFdJOworCVBORElTX1BBQ0tFVAlwUnhQYWNrZXQ7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlcjsKKwlSWF9CTEsJCQlSeENlbGw7CisKKwlSeFByb2Nlc3NlZCA9IFJ4UGVuZGluZyA9IDA7CisKKwkvLyBwcm9jZXNzIHdob2xlIHJ4IHJpbmcKKwl3aGlsZSAoMSkKKwl7CisKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSB8fAorCQkJIVJUTVBfVEVTVF9GTEFHKHBBZCxmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKworCisJCVJ4UHJvY2Vzc2VkICsrOyAvLyB0ZXN0CisKKwkJLy8gMS4gYWxsb2NhdGUgYSBuZXcgZGF0YSBwYWNrZXQgaW50byByeCByaW5nIHRvIHJlcGxhY2UgcmVjZWl2ZWQgcGFja2V0CisJCS8vICAgIHRoZW4gcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZWQgcGFja2V0CisJCS8vIDIuIHRoZSBjYWxsZWUgbXVzdCB0YWtlIGNoYXJnZSBvZiByZWxlYXNlIG9mIHBhY2tldAorCQkvLyAzLiBBcyBmYXIgYXMgZHJpdmVyIGlzIGNvbmNlcm5lZCAsCisJCS8vICAgIHRoZSByeCBwYWNrZXQgbXVzdAorCQkvLyAgICAgIGEuIGJlIGluZGljYXRlZCB0byB1cHBlciBsYXllciBvcgorCQkvLyAgICAgIGIuIGJlIHJlbGVhc2VkIGlmIGl0IGlzIGRpc2NhcmRlZAorCQlwUnhQYWNrZXQgPSBHZXRQYWNrZXRGcm9tUnhSaW5nKHBBZCwgJihSeENlbGwuUnhEKSwgJmJSZXNjaGVkdWxlLCAmUnhQZW5kaW5nKTsKKwkJaWYgKHBSeFBhY2tldCA9PSBOVUxMKQorCQl7CisJCQkvLyBubyBtb3JlIHBhY2tldCB0byBwcm9jZXNzCisJCQlicmVhazsKKwkJfQorCisJCS8vIGdldCByeCByaW5nIGRlc2NyaXB0b3IKKwkJcFJ4RCA9ICYoUnhDZWxsLlJ4RCk7CisJCS8vIGdldCByeCBkYXRhIGJ1ZmZlcgorCQlwRGF0YQk9IEdFVF9PU19QS1RfREFUQVBUUihwUnhQYWNrZXQpOworCQlwUnhXSQk9IChQUlhXSV9TVFJVQykgcERhdGE7CisJCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIChwRGF0YStSWFdJX1NJWkUpIDsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkgICAgUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUilwSGVhZGVyLCBESVJfUkVBRCwgVFJVRSk7CisJCVJUTVBXSUVuZGlhbkNoYW5nZSgoUFVDSEFSKXBSeFdJLCBUWVBFX1JYV0kpOworI2VuZGlmCisKKwkJLy8gYnVpbGQgUnhDZWxsCisJCVJ4Q2VsbC5wUnhXSSA9IHBSeFdJOworCQlSeENlbGwucEhlYWRlciA9IHBIZWFkZXI7CisJCVJ4Q2VsbC5wUnhQYWNrZXQgPSBwUnhQYWNrZXQ7CisJCVJ4Q2VsbC5wRGF0YSA9IChVQ0hBUiAqKSBwSGVhZGVyOworCQlSeENlbGwuRGF0YVNpemUgPSBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OworCQlSeENlbGwuRmxhZ3MgPSAwOworCisJCS8vIEluY3JlYXNlIFRvdGFsIHJlY2VpdmUgYnl0ZSBjb3VudGVyIGFmdGVyIHJlYWwgZGF0YSByZWNlaXZlZCBubyBtYXRlciBhbnkgZXJyb3Igb3Igbm90CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUmVjZWl2ZWRCeXRlQ291bnQgKz0gIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudCArKzsKKworCQlJTkNfQ09VTlRFUjY0KHBBZC0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudCk7CisKKwkJaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPCAxNCkKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisKKyAgICAgICAgaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJeworICAgICAgICAgICAgc2VuZF9tb25pdG9yX3BhY2tldHMocEFkLCAmUnhDZWxsKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFJUMjg3MCBpbnZva2VzIFNUQVJ4RG9uZUludGVycnVwdEhhbmRsZSgpIGluIHJ0dXNiX2J1bGsuYyAqLworI2lmZGVmIFJBTElOS19BVEUKKwkJaWYgKEFURV9PTihwQWQpKQorCQl7CisJCQlwQWQtPmF0ZS5SeENudFBlclNlYysrOworCQkJQVRFU2FtcGxlUnNzaShwQWQsIHBSeFdJKTsKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQkJaWYgKHBBZC0+YXRlLmJRQVJ4U3RhcnQgPT0gVFJVRSkKKwkJCXsKKwkJCQkvKiAoKnBSeEQpIGhhcyBiZWVuIHN3YXBwZWQgaW4gR2V0UGFja2V0RnJvbVJ4UmluZygpICovCisJCQkJQVRFX1FBX1N0YXRpc3RpY3MocEFkLCBwUnhXSSwgcFJ4RCwJcEhlYWRlcik7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwkJLy8gQ2hlY2sgZm9yIGFsbCBSeEQgZXJyb3JzCisJCVN0YXR1cyA9IFJUTVBDaGVja1J4RXJyb3IocEFkLCBwSGVhZGVyLCBwUnhXSSwgcFJ4RCk7CisKKwkJLy8gSGFuZGxlIHRoZSByZWNlaXZlZCBmcmFtZQorCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCXN3aXRjaCAocEhlYWRlci0+RkMuVHlwZSkKKwkJCXsKKwkJCQkvLyBDQVNFIEksIHJlY2VpdmUgYSBEQVRBIGZyYW1lCisJCQkJY2FzZSBCVFlQRV9EQVRBOgorCQkJCXsKKwkJCQkJLy8gcHJvY2VzcyBEQVRBIGZyYW1lCisJCQkJCVNUQUhhbmRsZVJ4RGF0YUZyYW1lKHBBZCwgJlJ4Q2VsbCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCS8vIENBU0UgSUksIHJlY2VpdmUgYSBNR01UIGZyYW1lCisJCQkJY2FzZSBCVFlQRV9NR01UOgorCQkJCXsKKwkJCQkJU1RBSGFuZGxlUnhNZ210RnJhbWUocEFkLCAmUnhDZWxsKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkJLy8gQ0FTRSBJSUkuIHJlY2VpdmUgYSBDTlRMIGZyYW1lCisJCQkJY2FzZSBCVFlQRV9DTlRMOgorCQkJCXsKKwkJCQkJU1RBSGFuZGxlUnhDb250cm9sRnJhbWUocEFkLCAmUnhDZWxsKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkJLy8gZGlzY2FyZCBvdGhlciB0eXBlCisJCQkJZGVmYXVsdDoKKwkJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db3VudGVyczgwMjMuUnhFcnJvcnMrKzsKKwkJCS8vIGRpc2NhcmQgdGhpcyBmcmFtZQorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCX0KKwl9CisKKwlyZXR1cm4gYlJlc2NoZWR1bGU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEhhbmRsZVR3YWtldXBJbnRlcnJ1cHQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRkFMU0UpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEVhcmx5IGNoZWNraW5nIGFuZCBPUy1kZXBlbmVkIHBhcnNpbmcgZm9yIFR4IHBhY2tldCBzZW5kIHRvIG91ciBTVEEgZHJpdmVyLgorCitBcmd1bWVudHM6CisgICAgTkRJU19IQU5ETEUgCU1pbmlwb3J0QWRhcHRlckNvbnRleHQJUG9pbnRlciByZWZlciB0byB0aGUgZGV2aWNlIGhhbmRsZSwgaS5lLiwgdGhlIHBBZC4KKwlQUE5ESVNfUEFDS0VUCXBwUGFja2V0QXJyYXkJCQlUaGUgcGFja2V0IGFycmF5IG5lZWQgdG8gZG8gdHJhbnNtaXNzaW9uLgorCVVJTlQJCQlOdW1iZXJPZlBhY2tldHMJCQlOdW1iZXIgb2YgcGFja2V0IGluIHBhY2tldCBhcnJheS4KKworUmV0dXJuIFZhbHVlOgorCU5PTkUKKworTm90ZToKKwlUaGlzIGZ1bmN0aW9uIGRvIGVhcmx5IGNoZWNraW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmb3Igc2VuZC1vdXQgcGFja2V0LgorCVlvdSBvbmx5IGNhbiBwdXQgT1MtZGVwZW5lZCAmIFNUQSByZWxhdGVkIGNvZGUgaW4gaGVyZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgU1RBU2VuZFBhY2tldHMoCisJSU4JTkRJU19IQU5ETEUJCU1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisJSU4JUFBORElTX1BBQ0tFVAlwcFBhY2tldEFycmF5LAorCUlOCVVJTlQJCQlOdW1iZXJPZlBhY2tldHMpCit7CisJVUlOVAkJCUluZGV4OworCVBSVE1QX0FEQVBURVIJcEFkID0gKFBSVE1QX0FEQVBURVIpIE1pbmlwb3J0QWRhcHRlckNvbnRleHQ7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJQk9PTEVBTgkJCWFsbG93VG9TZW5kID0gRkFMU0U7CisKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mUGFja2V0czsgSW5kZXgrKykKKwl7CisJCXBQYWNrZXQgPSBwcFBhY2tldEFycmF5W0luZGV4XTsKKworCQlkbworCQl7CisKKwkJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CisJCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpIHx8CisJCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCQl7CisJCQkJLy8gRHJvcCBzZW5kIHJlcXVlc3Qgc2luY2UgaGFyZHdhcmUgaXMgaW4gcmVzZXQgc3RhdGUKKwkJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmICghSU5GUkFfT04ocEFkKSAmJiAhQURIT0NfT04ocEFkKSkKKwkJCXsKKwkJCQkvLyBEcm9wIHNlbmQgcmVxdWVzdCBzaW5jZSB0aGVyZSBhcmUgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiB5ZXQKKwkJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gUmVjb3JkIHRoYXQgb3JpZ25hbCBwYWNrZXQgc291cmNlIGlzIGZyb20gTkRJUyBsYXllcixzbyB0aGF0CisJCQkJLy8gbGF0ZXIgb24gZHJpdmVyIGtub3dzIGhvdyB0byByZWxlYXNlIHRoaXMgTkRJUyBQQUNLRVQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQlQVUNIQVIgcFNyY0J1ZlZBID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwU3JjQnVmVkEpOworCQkJCWlmIChwRW50cnkgJiYgKHBFbnRyeS0+VmFsaWRBc0RscyA9PSBUUlVFKSkKKwkJCQl7CisJCQkJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIHBFbnRyeS0+QWlkKTsKKwkJCQl9CisJCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIDApOyAvLyB0aGlzIGZpZWxkIGlzIHVzZWxlc3Mgd2hlbiBpbiBTVEEgbW9kZQorCQkJCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UocFBhY2tldCwgUEtUU1JDX05ESVMpOworCQkJCU5ESVNfU0VUX1BBQ0tFVF9TVEFUVVMocFBhY2tldCwgTkRJU19TVEFUVVNfUEVORElORyk7CisJCQkJcEFkLT5SYWxpbmtDb3VudGVycy5QZW5kaW5nTmRpc1BhY2tldENvdW50Kys7CisKKwkJCQlhbGxvd1RvU2VuZCA9IFRSVUU7CisJCQl9CisJCX0gd2hpbGUoRkFMU0UpOworCisJCWlmIChhbGxvd1RvU2VuZCA9PSBUUlVFKQorCQkJU1RBU2VuZFBhY2tldChwQWQsIHBQYWNrZXQpOworCQllbHNlCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisJLy8gRGVxdWV1ZSBvdXRnb2luZyBmcmFtZXMgZnJvbSBUeFN3UXVldWVbXSBhbmQgcHJvY2VzcyBpdAorCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIE5VTV9PRl9UWF9SSU5HLCBNQVhfVFhfUFJPQ0VTUyk7CisKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorCVRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGRvIHBhY2tldCBwYXJzaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmb3IgVHggcGFja2V0CisJdG8gU1RBIGRldmljZSwgYW5kIGl0IHdpbGwgZW4tcXVldWUgcGFja2V0cyB0byBvdXIgVHhTd1F1ZXVlIGRlcGVuZHMgb24gQUMKKwljbGFzcy4KKworQXJndW1lbnRzOgorCXBBZCAgICAJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwlwUGFja2V0IAlQb2ludGVyIHRvIHNlbmQgcGFja2V0CisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCQkJSWYgc3VjY2VzIHRvIHF1ZXVlIHRoZSBwYWNrZXQgaW50byBUeFN3UXVldWUuCisJTkRJU19TVEFUVVNfRkFJTFVSRQkJCUlmIGZhaWxlZCB0byBkbyBlbi1xdWV1ZS4KKworTm90ZToKKwlZb3Ugb25seSBjYW4gcHV0IE9TLWluZGVwZW5lZCAmIFNUQSByZWxhdGVkIGNvZGUgaW4gaGVyZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFNUQVNlbmRQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJUEFDS0VUX0lORk8gCVBhY2tldEluZm87CisJUFVDSEFSCQkJcFNyY0J1ZlZBOworCVVJTlQJCQlTcmNCdWZMZW47CisJVUlOVAkJCUFsbG93RnJhZ1NpemU7CisJVUNIQVIJCQlOdW1iZXJPZkZyYWc7CisvLwlVQ0hBUgkJCVJUU1JlcXVpcmVkOworCVVDSEFSCQkJUXVlSWR4LCBVc2VyUHJpb3JpdHk7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCXVuc2lnbmVkIGludCAJSXJxRmxhZ3M7CisJVUNIQVIJCQlGbGdJc0lQID0gMDsKKwlVQ0hBUgkJCVJhdGU7CisKKwkvLyBQcmVwYXJlIHBhY2tldCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgZm9yIGJ1ZmZlciBkZXNjcmlwdG9yCisJLy8gY2hhaW5lZCB3aXRoaW4gYSBzaW5nbGUgTkRJUyBwYWNrZXQuCisJUlRNUF9RdWVyeVBhY2tldEluZm8ocFBhY2tldCwgJlBhY2tldEluZm8sICZwU3JjQnVmVkEsICZTcmNCdWZMZW4pOworCisJaWYgKHBTcmNCdWZWQSA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJTVEFTZW5kUGFja2V0IC0tPiBwU3JjQnVmVkEgPT0gTlVMTCAhISFTcmNCdWZMZW49JXhcbiIsU3JjQnVmTGVuKSk7CisJCS8vIFJlc291cmVjZSBpcyBsb3csIHN5c3RlbSBkaWQgbm90IGFsbG9jYXRlIHZpcnR1YWwgYWRkcmVzcworCQkvLyByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllcgorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCisJaWYgKFNyY0J1ZkxlbiA8IDE0KQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJTVEFTZW5kUGFja2V0IC0tPiBOZGlzIFBhY2tldCBidWZmZXIgZXJyb3IgISEhXG4iKSk7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisKKwkvLyBJbiBIVCByYXRlIGFkaG9jIG1vZGUsIEEtTVBEVSBpcyBvZnRlbiB1c2VkLiBTbyBuZWVkIHRvIGxvb2t1cCBCQSBUYWJsZSBhbmQgTUFDIEVudHJ5LgorCS8vIE5vdGUgbXVsdGljYXN0IHBhY2tldHMgaW4gYWRob2MgYWxzbyB1c2UgQlNTSURfV0NJRCBpbmRleC4KKwl7CisJCWlmKElORlJBX09OKHBBZCkpCisJCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCVVTSE9SVAl0bXBXY2lkOworCisJCQl0bXBXY2lkID0gUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCk7CisJCQlpZiAoVkFMSURfV0NJRCh0bXBXY2lkKSAmJgorCQkJCShwQWQtPk1hY1RhYi5Db250ZW50W3RtcFdjaWRdLlZhbGlkQXNEbHM9PSBUUlVFKSkKKwkJCXsKKwkJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt0bXBXY2lkXTsKKwkJCQlSYXRlID0gcEFkLT5NYWNUYWIuQ29udGVudFt0bXBXY2lkXS5DdXJyVHhSYXRlOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJeworCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCBCU1NJRF9XQ0lEKTsKKwkJCVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGU7CisJCX0KKwkJfQorCQllbHNlIGlmIChBREhPQ19PTihwQWQpKQorCQl7CisJCQlpZiAoKnBTcmNCdWZWQSAmIDB4MDEpCisJCQl7CisJCQkJUlRNUF9TRVRfUEFDS0VUX1dDSUQocFBhY2tldCwgTUNBU1RfV0NJRCk7CisJCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF07CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwU3JjQnVmVkEpOworCQkJfQorCQkJUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZTsKKwkJfQorCX0KKworCWlmICghcEVudHJ5KQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJTVEFTZW5kUGFja2V0LT5DYW5ub3QgZmluZCBwRW50cnkoJTJ4OiUyeDolMng6JTJ4OiUyeDolMngpIGluIE1hY1RhYiFcbiIsIFBSSU5UX01BQyhwU3JjQnVmVkEpKSk7CisJCS8vIFJlc291cmVjZSBpcyBsb3csIHN5c3RlbSBkaWQgbm90IGFsbG9jYXRlIHZpcnR1YWwgYWRkcmVzcworCQkvLyByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllcgorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCWlmIChBREhPQ19PTihwQWQpCisJCSkKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIChVQ0hBUilwRW50cnktPkFpZCk7CisJfQorCisJLy8KKwkvLyBDaGVjayB0aGUgRXRoZXJuZXQgRnJhbWUgdHlwZSBvZiB0aGlzIHBhY2tldCwgYW5kIHNldCB0aGUgUlRNUF9TRVRfUEFDS0VUX1NQRUNJRklDIGZsYWdzLgorCS8vCQlIZXJlIHdlIHNldCB0aGUgUEFDS0VUX1NQRUNJRklDIGZsYWdzKExMQywgVkxBTiwgREhDUC9BUlAsIEVBUE9MKS4KKwlSVE1QQ2hlY2tFdGhlclR5cGUocEFkLCBwUGFja2V0KTsKKworCisKKwkvLworCS8vIFdQQSA4MDIuMXggc2VjdXJlZCBwb3J0IGNvbnRyb2wgLSBkcm9wIGFsbCBub24tODAyLjF4IGZyYW1lIGJlZm9yZSBwb3J0IHNlY3VyZWQKKwkvLworCWlmICgoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwKKwkJIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJICB8fCAocEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IFRSVUUpCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkgIHx8IChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkgICkKKwkJICAmJiAoKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkgfHwgKHBBZC0+U3RhQ2ZnLk1pY0VyckNudCA+PSAyKSkKKwkJICAmJiAoUlRNUF9HRVRfUEFDS0VUX0VBUE9MKHBQYWNrZXQpPT0gRkFMU0UpCisJCSAgKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFTZW5kUGFja2V0IC0tPiBEcm9wIHBhY2tldCBiZWZvcmUgcG9ydCBzZWN1cmVkICEhIVxuIikpOworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisKKworCS8vIFNURVAgMS4gRGVjaWRlIG51bWJlciBvZiBmcmFnbWVudHMgcmVxdWlyZWQgdG8gZGVsaXZlciB0aGlzIE1TRFUuCisJLy8JICAgVGhlIGVzdGltYXRpb24gaGVyZSBpcyBub3QgdmVyeSBhY2N1cmF0ZSBiZWNhdXNlIGRpZmZpY3VsdCB0bworCS8vCSAgIHRha2UgZW5jcnlwdGlvbiBvdmVyaGVhZCBpbnRvIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlIHJlc3VsdAorCS8vCSAgICJOdW1iZXJPZkZyYWciIGlzIHRoZW4ganVzdCB1c2VkIHRvIHByZS1jaGVjayBpZiBlbm91Z2ggZnJlZQorCS8vCSAgIFRYRCBhcmUgYXZhaWxhYmxlIHRvIGhvbGQgdGhpcyBNU0RVLgorCisKKwlpZiAoKnBTcmNCdWZWQSAmIDB4MDEpCS8vIGZyYWdtZW50YXRpb24gbm90IGFsbG93ZWQgb24gbXVsdGljYXN0ICYgYnJvYWRjYXN0CisJCU51bWJlck9mRnJhZyA9IDE7CisJZWxzZSBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpKQorCQlOdW1iZXJPZkZyYWcgPSAxOwkvLyBBZ2dyZWdhdGlvbiBvdmVyd2hlbG1zIGZyYWdtZW50YXRpb24KKwllbHNlIGlmIChDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCkpCisJCU51bWJlck9mRnJhZyA9IDE7CS8vIEFnZ3JlZ2F0aW9uIG92ZXJ3aGVsbXMgZnJhZ21lbnRhdGlvbgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9PSBNT0RFX0hUTUlYKSB8fCAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVEdSRUVORklFTEQpKQorCQlOdW1iZXJPZkZyYWcgPSAxOwkvLyBNSU1PIFJBVEUgb3ZlcndoZWxtcyBmcmFnbWVudGF0aW9uCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJZWxzZQorCXsKKwkJLy8gVGhlIGNhbGN1bGF0ZWQgIk51bWJlck9mRnJhZyIgaXMgYSByb3VnaCBlc3RpbWF0aW9uIGJlY2F1c2Ugb2YgdmFyaW91cworCQkvLyBlbmNyeXB0aW9uL2VuY2Fwc3VsYXRpb24gb3ZlcmhlYWQgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhpcyBudW1iZXIgaXMganVzdAorCQkvLyB1c2VkIHRvIG1ha2Ugc3VyZSBlbm91Z2ggZnJlZSBUWEQgYXJlIGF2YWlsYWJsZSBiZWZvcmUgZnJhZ21lbnRhdGlvbiB0YWtlcyBwbGFjZS4KKwkJLy8gSW4gY2FzZSB0aGUgYWN0dWFsIHJlcXVpcmVkIG51bWJlciBvZiBmcmFnbWVudHMgb2YgYW4gTkRJUyBwYWNrZXQKKwkJLy8gZXhjY2VlZHMgIk51bWJlck9mRnJhZyJjYWN1bGF0ZWQgaGVyZSBhbmQgbm90IGVub3VnaCBmcmVlIFRYRCBhdmFpbGFibGUsIHRoZQorCQkvLyBsYXN0IGZyYWdtZW50IChpLmUuIGxhc3QgTVBEVSkgd2lsbCBiZSBkcm9wcGVkIGluIFJUTVBIYXJkVHJhbnNtaXQoKSBkdWUgdG8gb3V0IG9mCisJCS8vIHJlc291cmNlLCBhbmQgdGhlIE5ESVMgcGFja2V0IHdpbGwgYmUgaW5kaWNhdGVkIE5ESVNfU1RBVFVTX0ZBSUxVUkUuIFRoaXMgc2hvdWxkCisJCS8vIHJhcmVseSBoYXBwZW4gYW5kIHRoZSBwZW5hbHR5IGlzIGp1c3QgbGlrZSBhIFRYIFJFVFJZIGZhaWwuIEFmZm9yZGFibGUuCisKKwkJQWxsb3dGcmFnU2l6ZSA9IChwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkgLSBMRU5HVEhfODAyXzExIC0gTEVOR1RIX0NSQzsKKwkJTnVtYmVyT2ZGcmFnID0gKChQYWNrZXRJbmZvLlRvdGFsUGFja2V0TGVuZ3RoIC0gTEVOR1RIXzgwMl8zICsgTEVOR1RIXzgwMl8xX0gpIC8gQWxsb3dGcmFnU2l6ZSkgKyAxOworCQkvLyBUbyBnZXQgYWNjdXJhdGUgbnVtYmVyIG9mIGZyYWdtZW50YXRpb24sIE1pbnVzIDEgaWYgdGhlIHNpemUganVzdCBtYXRjaCB0byBhbGxvd2FibGUgZnJhZ21lbnQgc2l6ZQorCQlpZiAoKChQYWNrZXRJbmZvLlRvdGFsUGFja2V0TGVuZ3RoIC0gTEVOR1RIXzgwMl8zICsgTEVOR1RIXzgwMl8xX0gpICUgQWxsb3dGcmFnU2l6ZSkgPT0gMCkKKwkJeworCQkJTnVtYmVyT2ZGcmFnLS07CisJCX0KKwl9CisKKwkvLyBTYXZlIGZyYWdtZW50IG51bWJlciB0byBOZGlzIHBhY2tldCByZXNlcnZlZCBmaWVsZAorCVJUTVBfU0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCwgTnVtYmVyT2ZGcmFnKTsKKworCisJLy8gU1RFUCAyLiBDaGVjayB0aGUgcmVxdWlyZW1lbnQgb2YgUlRTOgorCS8vCSAgIElmIG11bHRpcGxlIGZyYWdtZW50IHJlcXVpcmVkLCBSVFMgaXMgcmVxdWlyZWQgb25seSBmb3IgdGhlIGZpcnN0IGZyYWdtZW50CisJLy8JICAgaWYgdGhlIGZyYWdtZW50IHNpemUgbGFyZ2UgdGhhbiBSVFMgdGhyZXNob2xkCisJLy8gICAgIEZvciBSVDI4eHgsIExldCBBU0lDIHNlbmQgUlRTL0NUUworCVJUTVBfU0VUX1BBQ0tFVF9SVFMocFBhY2tldCwgMCk7CisJUlRNUF9TRVRfUEFDS0VUX1RYUkFURShwUGFja2V0LCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUpOworCisJLy8KKwkvLyBTVEVQIDMuIFRyYWZmaWMgY2xhc3NpZmljYXRpb24uIG91dGNvbWUgPSA8VXNlclByaW9yaXR5LCBRdWVJZHg+CisJLy8KKwlVc2VyUHJpb3JpdHkgPSAwOworCVF1ZUlkeAkJID0gUUlEX0FDX0JFOworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmCisJCUNMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKQorCXsKKwkJVVNIT1JUIFByb3RvY29sOworCQlVQ0hBUiAgTGxjU25hcExlbiA9IDAsIEJ5dGUwLCBCeXRlMTsKKwkJZG8KKwkJeworCQkJLy8gZ2V0IEV0aGVybmV0IHByb3RvY29sIGZpZWxkCisJCQlQcm90b2NvbCA9IChVU0hPUlQpKChwU3JjQnVmVkFbMTJdIDw8IDgpICsgcFNyY0J1ZlZBWzEzXSk7CisJCQlpZiAoUHJvdG9jb2wgPD0gMTUwMCkKKwkJCXsKKwkJCQkvLyBnZXQgRXRoZXJuZXQgcHJvdG9jb2wgZmllbGQgZnJvbSBMTEMvU05BUAorCQkJCWlmIChTbmlmZjJCeXRlc0Zyb21OZGlzQnVmZmVyKFBhY2tldEluZm8ucEZpcnN0QnVmZmVyLCBMRU5HVEhfODAyXzMgKyA2LCAmQnl0ZTAsICZCeXRlMSkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQkJYnJlYWs7CisKKwkJCQlQcm90b2NvbCA9IChVU0hPUlQpKChCeXRlMCA8PCA4KSArIEJ5dGUxKTsKKwkJCQlMbGNTbmFwTGVuID0gODsKKwkJCX0KKworCQkJLy8gYWx3YXlzIEFDX0JFIGZvciBub24tSVAgcGFja2V0CisJCQlpZiAoUHJvdG9jb2wgIT0gMHgwODAwKQorCQkJCWJyZWFrOworCisJCQkvLyBnZXQgSVAgaGVhZGVyCisJCQlpZiAoU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcihQYWNrZXRJbmZvLnBGaXJzdEJ1ZmZlciwgTEVOR1RIXzgwMl8zICsgTGxjU25hcExlbiwgJkJ5dGUwLCAmQnl0ZTEpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisKKwkJCS8vIHJldHVybiBBQ19CRSBpZiBwYWNrZXQgaXMgbm90IElQdjQKKwkJCWlmICgoQnl0ZTAgJiAweGYwKSAhPSAweDQwKQorCQkJCWJyZWFrOworCisJCQlGbGdJc0lQID0gMTsKKwkJCVVzZXJQcmlvcml0eSA9IChCeXRlMSAmIDB4ZTApID4+IDU7CisJCQlRdWVJZHggPSBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5W1VzZXJQcmlvcml0eV07CisKKwkJCS8vIFRPRE86IGhhdmUgdG8gY2hlY2sgQUNNIGJpdC4gYXBwbHkgVFNQRUMgaWYgQUNNIGlzIE9OCisJCQkvLyBUT0RPOiBkb3duZ3JhZGUgVVAgJiBRdWVJZHggYmVmb3JlIHBhc3NpbmcgQUNNCisJCQlpZiAocEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQUNNW1F1ZUlkeF0pCisJCQl7CisJCQkJVXNlclByaW9yaXR5ID0gMDsKKwkJCQlRdWVJZHgJCSA9IFFJRF9BQ19CRTsKKwkJCX0KKwkJfSB3aGlsZSAoRkFMU0UpOworCX0KKworCVJUTVBfU0VUX1BBQ0tFVF9VUChwUGFja2V0LCBVc2VyUHJpb3JpdHkpOworCisKKworCS8vIE1ha2Ugc3VyZSBTZW5kVHhXYWl0IHF1ZXVlIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgdGhyZWFkcworCVJUTVBfSVJRX0xPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKKwlpZiAocEFkLT5UeFN3UXVldWVbUXVlSWR4XS5OdW1iZXIgPj0gTUFYX1BBQ0tFVFNfSU5fUVVFVUUpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKKyNpZmRlZiBCTE9DS19ORVRfSUYKKwkJU3RvcE5ldElmUXVldWUocEFkLCBRdWVJZHgsIHBQYWNrZXQpOworI2VuZGlmIC8vIEJMT0NLX05FVF9JRiAvLworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCWVsc2UKKwl7CisJCUluc2VydFRhaWxRdWV1ZSgmcEFkLT5UeFN3UXVldWVbUXVlSWR4XSwgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKKwl9CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPT0gVFJVRSkmJgorICAgICAgICBJU19IVF9TVEEocEVudHJ5KSkKKwl7CisJICAgIC8vUE1BQ19UQUJMRV9FTlRSWSBwTWFjRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKwkJaWYgKCgocEVudHJ5LT5UWEJBYml0bWFwICYgKDE8PFVzZXJQcmlvcml0eSkpID09IDApICYmCisgICAgICAgICAgICAoKHBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICYgKDE8PFVzZXJQcmlvcml0eSkpID09IDApICYmCisgICAgICAgICAgICAocEVudHJ5LT5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkKKwkJCSAvLyBGb3IgSU9UIGNvbXBhdGliaWxpdHksIGlmCisJCQkgLy8gMS4gSXQgaXMgUmFsaW5rIGNoaXAgb3IKKwkJCSAvLyAyLiBJdCBpcyBPUEVOIG9yIEFFUyBtb2RlLAorCQkJIC8vIHRoZW4gQkEgc2Vzc2lvbiBjYW4gYmUgYnVsaXQuCisJCQkgJiYgKChwRW50cnktPlZhbGlkQXNDTEkgJiYgcEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgIT0gMHgwKSB8fAorCQkJIAkgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCB8fCBwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkKKwkJCSkKKwkJeworCQkJQkFPcmlTZXNzaW9uU2V0VXAocEFkLCBwRW50cnksIDAsIDAsIDEwLCBGQUxTRSk7CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY09zVHhDb3VudFtRdWVJZHhdKys7IC8vIFRPRE86IGZvciBkZWJ1ZyBvbmx5LiB0byBiZSByZW1vdmVkCisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRoaXMgc3Vicm91dGluZSB3aWxsIHNjYW4gdGhyb3VnaCByZWxlYXRpdmUgcmluZyBkZXNjcmlwdG9yIHRvIGZpbmQKKwkJb3V0IGF2YWxpYWJsZSBmcmVlIHJpbmcgZGVzY3JpcHRvciBhbmQgY29tcGFyZSB3aXRoIHJlcXVlc3Qgc2l6ZS4KKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJUXVlSWR4CQlTZWxlY3RlZCBUWCBSaW5nCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUgCU5vdCBlbm91Z2ggZnJlZSBkZXNjcmlwdG9yCisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MgCUVub3VnaCBmcmVlIGRlc2NyaXB0b3IKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisjaWZkZWYgUlQyODcwCisvKgorCUFjdHVhbGx5LCB0aGlzIGZ1bmN0aW9uIHVzZWQgdG8gY2hlY2sgaWYgdGhlIFR4SGFyZHdhcmUgUXVldWUgc3RpbGwgaGFzIGZyYW1lIG5lZWQgdG8gc2VuZC4KKwlJZiBubyBmcmFtZSBuZWVkIHRvIHNlbmQsIGdvIHRvIHNsZWVwLCBlbHNlLCBzdGlsbCB3YWtlIHVwLgorKi8KK05ESVNfU1RBVFVTIFJUTVBGcmVlVFhEUmVxdWVzdCgKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCQkJUXVlSWR4LAorCUlOCQlVQ0hBUgkJCU51bWJlclJlcXVpcmVkLAorCUlOCQlQVUNIQVIJCQlGcmVlTnVtYmVySXMpCit7CisJLy9VTE9ORwkJRnJlZU51bWJlciA9IDA7CisJTkRJU19TVEFUVVMgCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJdW5zaWduZWQgbG9uZyAgIElycUZsYWdzOworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKworCXN3aXRjaCAoUXVlSWR4KQorCXsKKwkJY2FzZSBRSURfQUNfQks6CisJCWNhc2UgUUlEX0FDX0JFOgorCQljYXNlIFFJRF9BQ19WSToKKwkJY2FzZSBRSURfQUNfVk86CisJCWNhc2UgUUlEX0hDQ0E6CisJCQl7CisJCQkJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisJCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCQkJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICE9IHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24pIHx8CisJCQkJCShwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkpCisJCQkJeworCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJCX0KKwkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUUlEX01HTVQ6CisJCQlpZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCAhPSBNR01UX1JJTkdfU0laRSkKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJZWxzZQorCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJSVE1QRnJlZVRYRFJlcXVlc3Q6OkludmFsaWQgUXVlSWR4KD0lZClcbiIsIFF1ZUlkeCkpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChTdGF0dXMpOworCit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworVk9JRCBSVE1QU2VuZERpc2Fzc29jaWF0aW9uRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7Cit9CisKK1ZPSUQJUlRNUFNlbmROdWxsRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlUeFJhdGUsCisJSU4JQk9PTEVBTiAJCWJRb3NOdWxsKQoreworCVVDSEFSCU51bGxGcmFtZVs0OF07CisJVUxPTkcJTGVuZ3RoOworCVBIRUFERVJfODAyXzExCXBIZWFkZXJfODAyXzExOworCisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYoQVRFX09OKHBBZCkpCisJeworCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworICAgIC8vIFdQQSA4MDIuMXggc2VjdXJlZCBwb3J0IGNvbnRyb2wKKyAgICBpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAorICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8CisgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCQkgIHx8IChwQWQtPlN0YUNmZy5JRUVFODAyMVggPT0gVFJVRSkKKyNlbmRpZgorICAgICAgICApICYmCisgICAgICAgKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisJeworCQlyZXR1cm47CisJfQorCisJTmRpc1plcm9NZW1vcnkoTnVsbEZyYW1lLCA0OCk7CisJTGVuZ3RoID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJcEhlYWRlcl84MDJfMTEgPSAoUEhFQURFUl84MDJfMTEpIE51bGxGcmFtZTsKKworCXBIZWFkZXJfODAyXzExLT5GQy5UeXBlID0gQlRZUEVfREFUQTsKKwlwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfTlVMTF9GVU5DOworCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMTsKKwlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMSwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpCisJeworCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCX0KKwllbHNlCisJeworCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpID8gMTogMDsKKwl9CisJcEhlYWRlcl84MDJfMTEtPkR1cmF0aW9uID0gcEFkLT5Db21tb25DZmcuRHNpZnMgKyBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgVHhSYXRlLCAxNCk7CisKKwlwQWQtPlNlcXVlbmNlKys7CisJcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZTsKKworCS8vIFByZXBhcmUgUW9zTnVsbCBmdW5jdGlvbiBmcmFtZQorCWlmIChiUW9zTnVsbCkKKwl7CisJCXBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9RT1NfTlVMTDsKKworCQkvLyBjb3B5IFFPUyBjb250cm9sIGJ5dGVzCisJCU51bGxGcmFtZVtMZW5ndGhdCT0gIDA7CisJCU51bGxGcmFtZVtMZW5ndGgrMV0gPSAgMDsKKwkJTGVuZ3RoICs9IDI7Ly8gaWYgcGFkIHdpdGggMiBieXRlcyBmb3IgYWxpZ25tZW50LCBBUFNEIHdpbGwgZmFpbAorCX0KKworCUhBTF9LaWNrT3V0TnVsbEZyYW1lVHgocEFkLCAwLCBOdWxsRnJhbWUsIExlbmd0aCk7CisKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lECVJUTVBTZW5kUlRTRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBLAorCUlOCXVuc2lnbmVkIGludAlOZXh0TXBkdVNpemUsCisJSU4JVUNIQVIJCQlUeFJhdGUsCisJSU4JVUNIQVIJCQlSVFNSYXRlLAorCUlOCVVTSE9SVAkJCUFja0R1cmF0aW9uLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVVDSEFSCQkJRnJhbWVHYXApCit7Cit9CisKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZJTkQgRU5DUllQVCBLRVkgQU5EIERFQ0lERSBDSVBIRVIgQUxHT1JJVEhNCisvLwkJRmluZCB0aGUgV1BBIGtleSwgZWl0aGVyIEdyb3VwIG9yIFBhaXJ3aXNlIEtleQorLy8JCUxFQVAgKyBUS0lQIGFsc28gdXNlIFdQQSBrZXkuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVjaWRlIFdFUCBiaXQgYW5kIGNpcGhlciBzdWl0ZSB0byBiZSB1c2VkLiBTYW1lIGNpcGhlciBzdWl0ZSBzaG91bGQgYmUgdXNlZCBmb3Igd2hvbGUgZnJhZ21lbnQgYnVyc3QKKy8vIEluIENpc2NvIENDWCAyLjAgTGVhcCBBdXRoZW50aWNhdGlvbgorLy8JCSAgIFdlcFN0YXR1cyBpcyBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkIGJ1dCB0aGUga2V5IHdpbGwgdXNlIFBhaXJ3aXNlS2V5CisvLwkJICAgSW5zdGVhZCBvZiB0aGUgU2hhcmVkS2V5LCBTaGFyZWRLZXkgTGVuZ3RoIG1heSBiZSBaZXJvLgorVk9JRCBTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGspCit7CisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJQ2lwaGVyOwkJCQkvLyBUbyBpbmRpY2F0ZSBjaXBoZXIgdXNlZCBmb3IgdGhpcyBwYWNrZXQKKwlVQ0hBUgkJCQkJCQlDaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsJCS8vIGNpcGhlciBhbG9ncml0aG0KKwlVQ0hBUgkJCQkJCQlLZXlJZHggPSAweGZmOworCVBVQ0hBUgkJCQkJCQlwU3JjQnVmVkE7CisJUENJUEhFUl9LRVkJCQkJCQlwS2V5ID0gTlVMTDsKKworCXBTcmNCdWZWQSA9IEdFVF9PU19QS1RfREFUQVBUUihwVHhCbGstPnBQYWNrZXQpOworCisJeworCSAgICAvLyBTZWxlY3QgQ2lwaGVyCisJICAgIGlmICgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkKKwkgICAgICAgIENpcGhlciA9IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyOyAvLyBDaXBoZXIgZm9yIE11bHRpY2FzdCBvciBCcm9hZGNhc3QKKwkgICAgZWxzZQorCSAgICAgICAgQ2lwaGVyID0gcEFkLT5TdGFDZmcuUGFpckNpcGhlcjsgLy8gQ2lwaGVyIGZvciBVbmljYXN0CisKKwkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwVHhCbGstPnBQYWNrZXQpKQorCQl7CisJCQlBU1NFUlQocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnIDw9IENJUEhFUl9DS0lQMTI4KTsKKworCQkJLy8gNC13YXkgaGFuZHNoYWtpbmcgZnJhbWUgbXVzdCBiZSBjbGVhcgorCQkJaWYgKCEoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iQ2xlYXJFQVBGcmFtZSkpICYmIChwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcpICYmCisJCQkJKHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbikpCisJCQl7CisJCQkJQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnOworCQkJCUtleUlkeCA9IDA7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCisJCXsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChwQWQtPlN0YUNmZy5Da2lwRmxhZyAmIDB4MTApIC8vIENpc2NvIENLSVAgS1AgaXMgb24KKwkJCXsKKwkJCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkpCisJCQkJeworCQkJCQlpZiAoKCgqcFNyY0J1ZlZBICYgMHgwMSkgJiYgKEFESE9DX09OKHBBZCkpKSkKKwkJCQkJCUtleUlkeCA9IDE7CisJCQkJCWVsc2UKKwkJCQkJCUtleUlkeCA9IDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJS2V5SWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuQ2tpcEZsYWcgJiAweDA4KSAvLyBvbmx5IENLSVAgQ01JQworCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJCWVsc2UgaWYgKExFQVBfQ0NLTV9PTihwQWQpKQorCQkJeworCQkJCWlmICgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkKKwkJCQkJS2V5SWR4ID0gMTsKKwkJCQllbHNlCisJCQkJCUtleUlkeCA9IDA7CisJCQl9CisJCQllbHNlCS8vIHN0YW5kYXJkIFdFUDY0IG9yIFdFUDEyOAorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJfQorCQllbHNlIGlmICgoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHx8CisJCQkJIChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpCisJCXsKKwkJCWlmICgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkgLy8gbXVsdGljYXN0CisJCQkJS2V5SWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQkJZWxzZSBpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuKQorCQkJCUtleUlkeCA9IDA7CisJCQllbHNlCisJCQkJS2V5SWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQl9CisKKwkJaWYgKEtleUlkeCA9PSAweGZmKQorCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCWVsc2UgaWYgKChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkgfHwgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID09IDApKQorCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCSAgICBlbHNlIGlmICggcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICYmCisJICAgICAgICAgICAgIChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgJiYKKwkgICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBUUlVFKSAmJgorCSAgICAgICAgICAgICAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9OT05FOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJZWxzZQorCQl7CisJCQkvL0hlYWRlcl84MDJfMTEuRkMuV2VwID0gMTsKKwkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworCQkJcEtleSA9ICZwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdOworCQl9CisJfQorCisJcFR4QmxrLT5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJcFR4QmxrLT5wS2V5ID0gcEtleTsKK30KKworCitWT0lEIFNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBUWF9CTEsgICAgICAgICAgKnBUeEJsaykKK3sKKworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCUJPT0xFQU4JYkRMU0ZyYW1lID0gRkFMU0U7CisJSU5UCURsc0VudHJ5SW5kZXggPSAwOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJLy8KKwkvLyBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIKKwkvLworCisJLy8gbm9ybWFsIHdsYW4gaGVhZGVyIHNpemUgOiAyNCBvY3RldHMKKwlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisKKwlOZGlzWmVyb01lbW9yeShwSGVhZGVyXzgwMl8xMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCXBIZWFkZXJfODAyXzExLT5GQy5GckRzID0gMDsKKwlwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9IEJUWVBFX0RBVEE7CisJcEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPSAoKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYldNTSkpID8gU1VCVFlQRV9RREFUQSA6IFNVQlRZUEVfREFUQSk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlpZiAoSU5GUkFfT04ocEFkKSkKKwl7CisJCS8vIENoZWNrIGlmIHRoZSBmcmFtZSBjYW4gYmUgc2VudCB0aHJvdWdoIERMUyBkaXJlY3QgbGluayBpbnRlcmZhY2UKKwkJLy8gSWYgcGFja2V0IGNhbiBiZSBzZW50IHRocm91Z2ggRExTLCB0aGVuIGZvcmNlIGFnZ3JlZ2F0aW9uIGRpc2FibGUuIChIYXJkIHRvIGRldGVybWluZSBwZWVyIFNUQSdzIGNhcGFiaWxpdHkpCisJCURsc0VudHJ5SW5kZXggPSBSVE1QQ2hlY2tETFNGcmFtZShwQWQsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCWlmIChEbHNFbnRyeUluZGV4ID49IDApCisJCQliRExTRnJhbWUgPSBUUlVFOworCQllbHNlCisJCQliRExTRnJhbWUgPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyAgICBpZiAocFR4QmxrLT5wTWFjRW50cnkpCisJeworCQlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpKQorCQl7CisJCQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwVHhCbGstPnBNYWNFbnRyeS0+Tm9uUW9zRGF0YVNlcTsKKwkJCXBUeEJsay0+cE1hY0VudHJ5LT5Ob25Rb3NEYXRhU2VxID0gKHBUeEJsay0+cE1hY0VudHJ5LT5Ob25Rb3NEYXRhU2VxKzEpICYgTUFYU0VROworCQl9CisJCWVsc2UKKwkJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJaWYgKGJETFNGcmFtZSkKKwkJCXsKKwkJCQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUluZGV4XS5TZXF1ZW5jZTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUluZGV4XS5TZXF1ZW5jZSA9IChwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUluZGV4XS5TZXF1ZW5jZSsxKSAmIE1BWFNFUTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCXsKKyAgICAJICAgIHBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9IHBUeEJsay0+cE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV07CisgICAgCSAgICBwVHhCbGstPnBNYWNFbnRyeS0+VHhTZXFbcFR4QmxrLT5Vc2VyUHJpb3JpdHldID0gKHBUeEJsay0+cE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV0rMSkgJiBNQVhTRVE7CisgICAgCX0KKwl9CisJfQorCWVsc2UKKwl7CisJCXBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9IHBBZC0+U2VxdWVuY2U7CisJCXBBZC0+U2VxdWVuY2UgPSAocEFkLT5TZXF1ZW5jZSsxKSAmIE1BWFNFUTsgLy8gbmV4dCBzZXF1ZW5jZQorCX0KKworCXBIZWFkZXJfODAyXzExLT5GcmFnID0gMDsKKworCXBIZWFkZXJfODAyXzExLT5GQy5Nb3JlRGF0YSA9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYk1vcmVEYXRhKTsKKworCXsKKwkJaWYgKElORlJBX09OKHBBZCkpCisJCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCWlmIChiRExTRnJhbWUpCisJCQl7CisJCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCQkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAwOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJeworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIzLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAxOworCQl9CisJCX0KKwkJZWxzZSBpZiAoQURIT0NfT04ocEFkKSkKKwkJeworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAwOworCQl9CisJfQorCisJaWYgKHBUeEJsay0+Q2lwaGVyQWxnICE9IENJUEhFUl9OT05FKQorCQlwSGVhZGVyXzgwMl8xMS0+RkMuV2VwID0gMTsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gU1RFUCAyLiBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIgU0hBUkVEIEJZIEVOVElSRSBGUkFHTUVOVCBCVVJTVC4gRmlsbCBzZXF1ZW5jZSBsYXRlci4KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKQorICAgIAlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCWVsc2UKKyAgICAJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBTVEFCdWlsZENhY2hlODAyXzExSGVhZGVyKAorCUlOIFJUTVBfQURBUFRFUgkJKnBBZCwKKwlJTiBUWF9CTEsJCQkqcFR4QmxrLAorCUlOIFVDSEFSCQkJKnBIZWFkZXIpCit7CisJTUFDX1RBQkxFX0VOVFJZCSpwTWFjRW50cnk7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlcjgwMjExOworCisJcEhlYWRlcjgwMjExID0gKFBIRUFERVJfODAyXzExKXBIZWFkZXI7CisJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisKKwkvLworCS8vIFVwZGF0ZSB0aGUgY2FjaGVkIDgwMi4xMSBIRUFERVIKKwkvLworCisJLy8gbm9ybWFsIHdsYW4gaGVhZGVyIHNpemUgOiAyNCBvY3RldHMKKwlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwkvLyBNb3JlIEJpdAorCXBIZWFkZXI4MDIxMS0+RkMuTW9yZURhdGEgPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisKKwkvLyBTZXF1ZW5jZQorCXBIZWFkZXI4MDIxMS0+U2VxdWVuY2UgPSBwTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XTsKKyAgICBwTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XSA9IChwTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XSsxKSAmIE1BWFNFUTsKKworCXsKKwkJLy8gQ2hlY2sgaWYgdGhlIGZyYW1lIGNhbiBiZSBzZW50IHRocm91Z2ggRExTIGRpcmVjdCBsaW5rIGludGVyZmFjZQorCQkvLyBJZiBwYWNrZXQgY2FuIGJlIHNlbnQgdGhyb3VnaCBETFMsIHRoZW4gZm9yY2UgYWdncmVnYXRpb24gZGlzYWJsZS4gKEhhcmQgdG8gZGV0ZXJtaW5lIHBlZXIgU1RBJ3MgY2FwYWJpbGl0eSkKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJQk9PTEVBTgliRExTRnJhbWUgPSBGQUxTRTsKKwkJSU5UCURsc0VudHJ5SW5kZXggPSAwOworCisJCURsc0VudHJ5SW5kZXggPSBSVE1QQ2hlY2tETFNGcmFtZShwQWQsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCWlmIChEbHNFbnRyeUluZGV4ID49IDApCisJCQliRExTRnJhbWUgPSBUUlVFOworCQllbHNlCisJCQliRExTRnJhbWUgPSBGQUxTRTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQkvLyBUaGUgYWRkcjMgb2Ygbm9ybWFsIHBhY2tldCBzZW5kIGZyb20gRFMgaXMgRGVzdCBNYWMgYWRkcmVzcy4KKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJaWYgKGJETFNGcmFtZSkKKwkJeworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIxLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlwSGVhZGVyODAyMTEtPkZDLlRvRHMgPSAwOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXI4MDIxMS0+QWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJZWxzZQorCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIzLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCX0KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gU1RFUCAyLiBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIgU0hBUkVEIEJZIEVOVElSRSBGUkFHTUVOVCBCVVJTVC4gRmlsbCBzZXF1ZW5jZSBsYXRlci4KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKQorICAgIAlwSGVhZGVyODAyMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwllbHNlCisgICAgCXBIZWFkZXI4MDIxMS0+RkMuUHdyTWdtdCA9IChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitzdGF0aWMgaW5saW5lIFBVQ0hBUiBTVEFfQnVpbGRfQVJhbGlua19GcmFtZV9IZWFkZXIoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLCQkqcFR4QmxrKQoreworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJSEVBREVSXzgwMl8xMQkqcEhlYWRlcl84MDJfMTE7CisJUE5ESVNfUEFDS0VUCXBOZXh0UGFja2V0OworCVVJTlQzMgkJCW5leHRCdWZMZW47CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKwlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKKwlTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcihwQWQsIHBUeEJsayk7CisKKworCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKikgcEhlYWRlckJ1ZlB0cjsKKworCS8vIHN0ZWFsICJvcmRlciIgYml0IHRvIG1hcmsgImFnZ3JlZ2F0aW9uIgorCXBIZWFkZXJfODAyXzExLT5GQy5PcmRlciA9IDE7CisKKwkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKQorCXsKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKworCQkqKHBIZWFkZXJCdWZQdHIrMSkgPSAwOworCQlwSGVhZGVyQnVmUHRyICs9MjsKKwkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisJfQorCisJLy8gcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyLiBMTEMgaGVhZGVyIHNob3VsZCBhdCA0LWJ5dGVzIGFsaWdtZW50LgorCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUilST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCS8vIEZvciBSQSBBZ2dyZWdhdGlvbiwKKwkvLyBwdXQgdGhlIDJuZCBNU0RVIGxlbmd0aChleHRyYSAyLWJ5dGUgZmllbGQpIGFmdGVyIFFPU19DT05UUk9MIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0CisJcFFFbnRyeSA9IHBUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQ7CisJcE5leHRQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QS1QocFFFbnRyeSk7CisJbmV4dEJ1ZkxlbiA9IEdFVF9PU19QS1RfTEVOKHBOZXh0UGFja2V0KTsKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocE5leHRQYWNrZXQpKQorCQluZXh0QnVmTGVuIC09IExFTkdUSF84MDJfMVE7CisKKwkqcEhlYWRlckJ1ZlB0ciA9IChVQ0hBUiluZXh0QnVmTGVuICYgMHhmZjsKKwkqKHBIZWFkZXJCdWZQdHIrMSkgPSAoVUNIQVIpKG5leHRCdWZMZW4gPj4gOCk7CisKKwlwSGVhZGVyQnVmUHRyICs9IDI7CisJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisKKwlyZXR1cm4gcEhlYWRlckJ1ZlB0cjsKKworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitzdGF0aWMgaW5saW5lIFBVQ0hBUiBTVEFfQnVpbGRfQU1TRFVfRnJhbWVfSGVhZGVyKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFRYX0JMSwkJKnBUeEJsaykKK3sKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOy8vLCBwU2F2ZUJ1ZlB0cjsKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKworCisJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOworCisJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisJcEhlYWRlcl84MDJfMTEgPSAoSEVBREVSXzgwMl8xMSAqKSBwSGVhZGVyQnVmUHRyOworCisJLy8gc2tpcCBjb21tb24gaGVhZGVyCisJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwkvLworCS8vIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzCisJLy8KKwkqcEhlYWRlckJ1ZlB0ciA9IChwVHhCbGstPlVzZXJQcmlvcml0eSAmIDB4MEYpOworCisJLy8KKwkvLyBBLU1TRFUgcGFja2V0CisJLy8KKwkqcEhlYWRlckJ1ZlB0ciB8PSAweDgwOworCisJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwlwSGVhZGVyQnVmUHRyICs9MjsKKwlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKKworCS8vcFNhdmVCdWZQdHIgPSBwSGVhZGVyQnVmUHRyOworCisJLy8KKwkvLyBwYWRkaW5nIGF0IGZyb250IG9mIExMQyBoZWFkZXIKKwkvLyBMTEMgaGVhZGVyIHNob3VsZCBsb2NhdGUgYXQgNC1vY3RldHMgYWxpZ21lbnQKKwkvLworCS8vIEBAQCBNcGR1SGVhZGVyTGVuIGV4Y2x1ZGluZyBwYWRkaW5nIEBAQAorCS8vCisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpcEhlYWRlckJ1ZlB0cjsKKwlwSGVhZGVyQnVmUHRyID0gKFBDSEFSKSBST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCXJldHVybiBwSGVhZGVyQnVmUHRyOworCit9CisKKworVk9JRCBTVEFfQU1QRFVfRnJhbWVfVHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaykKK3sKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCVVTSE9SVAkJCUZyZWVOdW1iZXI7CisJTUFDX1RBQkxFX0VOVFJZCSpwTWFjRW50cnk7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisJQVNTRVJUKHBUeEJsayk7CisKKwl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQorCXsKKwkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJCWlmICggUlRNUF9GaWxsVHhCbGtJbmZvKHBBZCwgcFR4QmxrKSAhPSBUUlVFKQorCQl7CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYlZMQU5Qa3QgPSAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocFR4QmxrLT5wUGFja2V0KSA/IFRSVUUgOiBGQUxTRSk7CisKKwkJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisJCWlmIChwTWFjRW50cnktPmlzQ2FjaGVkKQorCQl7CisJCQkvLyBOT1RFOiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBzaXplIG9mIHBNYWNFbnRyeS0+Q2FjaGVkQnVmW10gaXMgc21hbGxlciB0aGFuIHBUeEJsay0+SGVhZGVyQnVmW10hISEhCisJCQlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0sIChQVUNIQVIpJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdLCBUWFdJX1NJWkUgKyBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQkJcEhlYWRlckJ1ZlB0ciA9IChQVUNIQVIpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV0pOworCQkJU1RBQnVpbGRDYWNoZTgwMl8xMUhlYWRlcihwQWQsIHBUeEJsaywgcEhlYWRlckJ1ZlB0cik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKKwkJCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKKworCQkJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisJCX0KKworCisJCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKikgcEhlYWRlckJ1ZlB0cjsKKworCQkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwkJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKwkJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwkJcEhlYWRlckJ1ZlB0ciArPTI7CisJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCisJCS8vCisJCS8vIGJ1aWxkIEhUQysKKwkJLy8gSFRDIGNvbnRyb2wgZmlsZWQgZm9sbG93aW5nIFFvUyBmaWVsZAorCQkvLworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPT0gVFJVRSkgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocFR4QmxrLT5wTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKSkKKwkJeworCQkJaWYgKHBNYWNFbnRyeS0+aXNDYWNoZWQgPT0gRkFMU0UpCisJCQl7CisJCQkJLy8gbWFyayBIVEMgYml0CisJCQkJcEhlYWRlcl84MDJfMTEtPkZDLk9yZGVyID0gMTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHBIZWFkZXJCdWZQdHIsIDQpOworCQkJCSoocEhlYWRlckJ1ZlB0ciszKSB8PSAweDgwOworCQkJfQorCQkJcEhlYWRlckJ1ZlB0ciArPSA0OworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDQ7CisJCX0KKworCQkvL3BUeEJsay0+TXBkdUhlYWRlckxlbiA9IHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhlYWRlckJ1ZiAtIFRYV0lfU0laRSAtIFRYSU5GT19TSVpFOworCQlBU1NFUlQocFR4QmxrLT5NcGR1SGVhZGVyTGVuID49IDI0KTsKKworCQkvLyBza2lwIDgwMi4zIGhlYWRlcgorCQlwVHhCbGstPnBTcmNCdWZEYXRhID0gcFR4QmxrLT5wU3JjQnVmSGVhZGVyICsgTEVOR1RIXzgwMl8zOworCQlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJCS8vIHNraXAgdmxhbiB0YWcKKwkJaWYgKGJWTEFOUGt0KQorCQl7CisJCQlwVHhCbGstPnBTcmNCdWZEYXRhCSs9IExFTkdUSF84MDJfMVE7CisJCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCQl9CisKKwkJLy8KKwkJLy8gcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyCisJCS8vIExMQyBoZWFkZXIgc2hvdWxkIGxvY2F0ZSBhdCA0LW9jdGV0cyBhbGlnbWVudAorCQkvLworCQkvLyBAQEAgTXBkdUhlYWRlckxlbiBleGNsdWRpbmcgcGFkZGluZyBAQEAKKwkJLy8KKwkJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpcEhlYWRlckJ1ZlB0cjsKKwkJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUikgUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKShwSGVhZGVyQnVmUHRyIC0gcFR4QmxrLT5IZHJQYWRMZW4pOworCisJCXsKKworCQkJLy8KKwkJCS8vIEluc2VydCBMTEMtU05BUCBlbmNhcHN1bGF0aW9uIC0gOCBvY3RldHMKKwkJCS8vCisJCQlFWFRSQV9MTENTTkFQX0VOQ0FQX0ZST01fUEtUX09GRlNFVChwVHhCbGstPnBTcmNCdWZEYXRhLTIsIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKTsKKwkJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgMik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKKwkJCX0KKworCQl9CisKKwkJaWYgKHBNYWNFbnRyeS0+aXNDYWNoZWQpCisJCXsKKyAgICAgICAgICAgIFJUTVBXcml0ZVR4V0lfQ2FjaGUocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUFdyaXRlVHhXSV9EYXRhKHBBZCwgKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgcFR4QmxrKTsKKworCQkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikoJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdKSwgc2l6ZW9mKHBNYWNFbnRyeS0+Q2FjaGVkQnVmKSk7CisJCQlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSgmcE1hY0VudHJ5LT5DYWNoZWRCdWZbMF0pLCAoUFVDSEFSKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgKHBIZWFkZXJCdWZQdHIgLSAoUFVDSEFSKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSkpOworCQkJcE1hY0VudHJ5LT5pc0NhY2hlZCA9IFRSVUU7CisJCX0KKworCQkvLyBjYWxjdWxhdGUgVHJhbnNtaXR0ZWQgQU1QRFUgY291bnQgYW5kIEJ5dGVDb3VudAorCQl7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkTVBEVXNJbkFNUERVQ291bnQudS5Mb3dQYXJ0ICsrOworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE9jdGV0c0luQU1QRFVDb3VudC5RdWFkUGFydCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwkJfQorCisJCS8vRnJlZU51bWJlciA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsKKworCQlIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBUUlVFLCAmRnJlZU51bWJlcik7CisKKwkJLy8KKwkJLy8gS2ljayBvdXQgVHgKKwkJLy8KKwkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCX0KKworfQorCisKK1ZPSUQgU1RBX0FNU0RVX0ZyYW1lX1R4KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGspCit7CisJUFVDSEFSCQkJcEhlYWRlckJ1ZlB0cjsKKwlVU0hPUlQJCQlGcmVlTnVtYmVyOworCVVTSE9SVAkJCXN1YkZyYW1lUGF5bG9hZExlbiA9IDA7CS8vIEFNU0RVIFN1YmZyYW1lIGxlbmd0aCB3aXRob3V0IEFNU0RVLUhlYWRlciAvIFBhZGRpbmcuCisJVVNIT1JUCQkJdG90YWxNUERVU2l6ZT0wOworCVVDSEFSCQkJKnN1YkZyYW1lSGVhZGVyOworCVVDSEFSCQkJcGFkZGluZyA9IDA7CisJVVNIT1JUCQkJRmlyc3RUeCA9IDAsIExhc3RUeElkeCA9IDA7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCWludCAJCQlmcmFtZU51bSA9IDA7CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKworCUFTU0VSVChwVHhCbGspOworCisJQVNTRVJUKChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIgPiAxKSk7CisKKwl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQorCXsKKwkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJCWlmIChSVE1QX0ZpbGxUeEJsa0luZm8ocEFkLCBwVHhCbGspICE9IFRSVUUpCisJCXsKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJY29udGludWU7CisJCX0KKworCQliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKKworCQkvLyBza2lwIDgwMi4zIGhlYWRlcgorCQlwVHhCbGstPnBTcmNCdWZEYXRhID0gcFR4QmxrLT5wU3JjQnVmSGVhZGVyICsgTEVOR1RIXzgwMl8zOworCQlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJCS8vIHNraXAgdmxhbiB0YWcKKwkJaWYgKGJWTEFOUGt0KQorCQl7CisJCQlwVHhCbGstPnBTcmNCdWZEYXRhCSs9IExFTkdUSF84MDJfMVE7CisJCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCQl9CisKKwkJaWYgKGZyYW1lTnVtID09IDApCisJCXsKKwkJCXBIZWFkZXJCdWZQdHIgPSBTVEFfQnVpbGRfQU1TRFVfRnJhbWVfSGVhZGVyKHBBZCwgcFR4QmxrKTsKKworCQkJLy8gTk9URTogVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IHdpbGwgYmUgdXBkYXRlZCBhZnRlciBmaW5hbCBmcmFtZSB3YXMgaGFuZGxlZC4KKwkJCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsIChQVFhXSV9TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksIHBUeEJsayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwSGVhZGVyQnVmUHRyID0gJnBUeEJsay0+SGVhZGVyQnVmWzBdOworCQkJcGFkZGluZyA9IFJPVU5EX1VQKExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKyBzdWJGcmFtZVBheWxvYWRMZW4sIDQpIC0gKExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKyBzdWJGcmFtZVBheWxvYWRMZW4pOworCQkJTmRpc1plcm9NZW1vcnkocEhlYWRlckJ1ZlB0ciwgcGFkZGluZyArIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQpOworCQkJcEhlYWRlckJ1ZlB0ciArPSBwYWRkaW5nOworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gcGFkZGluZzsKKwkJfQorCisJCS8vCisJCS8vIEEtTVNEVSBzdWJmcmFtZQorCQkvLyAgIERBKDYpK1NBKDYpK0xlbmd0aCgyKSArIExMQy9TTkFQIEVuY2FwCisJCS8vCisJCXN1YkZyYW1lSGVhZGVyID0gcEhlYWRlckJ1ZlB0cjsKKwkJc3ViRnJhbWVQYXlsb2FkTGVuID0gcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJTmRpc01vdmVNZW1vcnkoc3ViRnJhbWVIZWFkZXIsIHBUeEJsay0+cFNyY0J1ZkhlYWRlciwgMTIpOworCisKKwkJcEhlYWRlckJ1ZlB0ciArPSBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOworCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsKKworCisJCS8vCisJCS8vIEluc2VydCBMTEMtU05BUCBlbmNhcHN1bGF0aW9uIC0gOCBvY3RldHMKKwkJLy8KKwkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT5wU3JjQnVmRGF0YS0yLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisKKwkJc3ViRnJhbWVQYXlsb2FkTGVuID0gcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJaWYgKHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKQorCQl7CisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDY7CisJCQkvLyBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikKKwkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgMik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDI7CisJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCQlzdWJGcmFtZVBheWxvYWRMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCX0KKworCQkvLyB1cGRhdGUgc3ViRnJhbWUgTGVuZ3RoIGZpZWxkCisJCXN1YkZyYW1lSGVhZGVyWzEyXSA9IChzdWJGcmFtZVBheWxvYWRMZW4gJiAweEZGMDApID4+IDg7CisJCXN1YkZyYW1lSGVhZGVyWzEzXSA9IHN1YkZyYW1lUGF5bG9hZExlbiAmIDB4RkY7CisKKwkJdG90YWxNUERVU2l6ZSArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKworCQlpZiAoZnJhbWVOdW0gPT0wKQorCQkJRmlyc3RUeCA9IEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sICZGcmVlTnVtYmVyKTsKKwkJZWxzZQorCQkJTGFzdFR4SWR4ID0gSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgJkZyZWVOdW1iZXIpOworCisJCWZyYW1lTnVtKys7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7CisKKwkJLy8gY2FsY3VsYXRlIFRyYW5zbWl0dGVkIEFNU0RVIENvdW50IGFuZCBCeXRlQ291bnQKKwkJeworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNU0RVQ291bnQudS5Mb3dQYXJ0ICsrOworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE9jdGV0c0luQU1TRFUuUXVhZFBhcnQgKz0gdG90YWxNUERVU2l6ZTsKKwkJfQorCisJfQorCisJSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBGaXJzdFR4KTsKKwlIQUxfTGFzdFR4SWR4KHBBZCwgcFR4QmxrLT5RdWVJZHgsIExhc3RUeElkeCk7CisKKwkvLworCS8vIEtpY2sgb3V0IFR4CisJLy8KKwlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgU1RBX0xlZ2FjeV9GcmFtZV9UeCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrKQoreworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJVVNIT1JUCQkJRnJlZU51bWJlcjsKKwlCT09MRUFOCQkJYlZMQU5Qa3Q7CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKwlBU1NFUlQocFR4QmxrKTsKKworCisJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCXBUeEJsay0+cFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKKwlpZiAoUlRNUF9GaWxsVHhCbGtJbmZvKHBBZCwgcFR4QmxrKSAhPSBUUlVFKQorCXsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9NQ0FTVF9GUkFNRSkKKwl7CisJCUlOQ19DT1VOVEVSNjQocEFkLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKKwl9CisKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX1JUUyhwVHhCbGstPnBQYWNrZXQpKQorCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYlJ0c1JlcXVpcmVkKTsKKwllbHNlCisJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JSdHNSZXF1aXJlZCk7CisKKwliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKKworCWlmIChwVHhCbGstPlR4UmF0ZSA8IHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSkKKwkJcFR4QmxrLT5UeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGU7CisKKwlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKKwlTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcihwQWQsIHBUeEJsayk7CisKKworCS8vIHNraXAgODAyLjMgaGVhZGVyCisJcFR4QmxrLT5wU3JjQnVmRGF0YSA9IHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIExFTkdUSF84MDJfMzsKKwlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJLy8gc2tpcCB2bGFuIHRhZworCWlmIChiVkxBTlBrdCkKKwl7CisJCXBUeEJsay0+cFNyY0J1ZkRhdGEJKz0gTEVOR1RIXzgwMl8xUTsKKwkJcFR4QmxrLT5TcmNCdWZMZW4JLT0gTEVOR1RIXzgwMl8xUTsKKwl9CisKKwlwSGVhZGVyQnVmUHRyID0gJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsKKwlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7CisKKwkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKQorCXsKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKwkJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwkJcEhlYWRlckJ1ZlB0ciArPTI7CisJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCX0KKworCS8vIFRoZSByZW1haW5pbmcgY29udGVudCBvZiBNUERVIGhlYWRlciBzaG91bGQgbG9jYXRlIGF0IDQtb2N0ZXRzIGFsaWdtZW50CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpcEhlYWRlckJ1ZlB0cjsKKwlwSGVhZGVyQnVmUHRyID0gKFBDSEFSKSBST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCXsKKworCQkvLworCQkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJCS8vCisJCS8vCisgICAJCS8vIGlmIG9yaWdpbmFsIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIG5vIExMQy9TTkFQLAorCQkvLyB0aGVuIGFuIGV4dHJhIExMQy9TTkFQIGVuY2FwIGlzIHJlcXVpcmVkCisJCS8vCisJCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfU1RBUlQocFR4QmxrLT5wU3JjQnVmSGVhZGVyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJeworCQkJVUNIQVIgdmxhbl9zaXplOworCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDY7CisJCQkvLyBza2lwIHZsYW4gdGFnCisJCQl2bGFuX3NpemUgPSAgKGJWTEFOUGt0KSA/IExFTkdUSF84MDJfMVEgOiAwOworCQkJLy8gZ2V0IDIgb2N0ZXRzIChUeXBlb2ZMZW4pCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIrMTIrdmxhbl9zaXplLCAyKTsKKwkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKKwkJfQorCisJfQorCisJLy8KKwkvLyBwcmVwYXJlIGZvciBUWFdJCisJLy8gdXNlIFdjaWQgYXMgS2V5IEluZGV4CisJLy8KKworCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsIChQVFhXSV9TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksIHBUeEJsayk7CisKKwkvL0ZyZWVOdW1iZXIgPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisKKwlIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBUUlVFLCAmRnJlZU51bWJlcik7CisKKwlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCisJLy8KKwkvLyBLaWNrIG91dCBUeAorCS8vCisJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworfQorCisKK1ZPSUQgU1RBX0FSYWxpbmtfRnJhbWVfVHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaykKK3sKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCVVTSE9SVAkJCUZyZWVOdW1iZXI7CisJVVNIT1JUCQkJdG90YWxNUERVU2l6ZT0wOworCVVTSE9SVAkJCUZpcnN0VHgsIExhc3RUeElkeDsKKwlpbnQgCQkJZnJhbWVOdW0gPSAwOworCUJPT0xFQU4JCQliVkxBTlBrdDsKKwlQUVVFVUVfRU5UUlkJcFFFbnRyeTsKKworCisJQVNTRVJUKHBUeEJsayk7CisKKwlBU1NFUlQoKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcj09IDIpKTsKKworCisJRmlyc3RUeCA9IExhc3RUeElkeCA9IDA7ICAvLyBJcyBpdCBvayBpbml0IHRoZXkgYXMgMD8KKwl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQorCXsKKwkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisKKwkJaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkKKwkJeworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWJWTEFOUGt0ID0gKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOworCisJCS8vIHNraXAgODAyLjMgaGVhZGVyCisJCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7CisJCXBUeEJsay0+U3JjQnVmTGVuICAtPSBMRU5HVEhfODAyXzM7CisKKwkJLy8gc2tpcCB2bGFuIHRhZworCQlpZiAoYlZMQU5Qa3QpCisJCXsKKwkJCXBUeEJsay0+cFNyY0J1ZkRhdGEJKz0gTEVOR1RIXzgwMl8xUTsKKwkJCXBUeEJsay0+U3JjQnVmTGVuCS09IExFTkdUSF84MDJfMVE7CisJCX0KKworCQlpZiAoZnJhbWVOdW0gPT0gMCkKKwkJewkvLyBGb3IgZmlyc3QgZnJhbWUsIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSA4MDIuMTEgaGVhZGVyICsgcGFkZGluZyhvcHRpb25hbCkgKyBSQS1BR0ctTEVOICsgU05BUCBIZWFkZXIKKworCQkJcEhlYWRlckJ1ZlB0ciA9IFNUQV9CdWlsZF9BUmFsaW5rX0ZyYW1lX0hlYWRlcihwQWQsIHBUeEJsayk7CisKKwkJCS8vIEl0J3Mgb2sgd3JpdGUgdGhlIFR4V0kgaGVyZSwgYmVjYXVzZSB0aGUgVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50CisJCQkvLwl3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgZmluYWwgZnJhbWUgd2FzIGhhbmRsZWQuCisJCQlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCisKKwkJCS8vCisJCQkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJCQkvLworCQkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT5wU3JjQnVmRGF0YS0yLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisKKwkJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgMik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsJLy8gRm9yIHNlY29uZCBhZ2dyZWdhdGVkIGZyYW1lLCB3ZSBuZWVkIGNyZWF0ZSB0aGUgODAyLjMgaGVhZGVyIHRvIGhlYWRlckJ1ZiwgYmVjYXVzZSBQQ0kgd2lsbCBjb3B5IGl0IHRvIFNEUHRyMC4KKworCQkJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZlswXTsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiA9IDA7CisKKwkJCS8vIEEtUmFsaW5rIHN1Yi1zZXF1ZW50IGZyYW1lIGhlYWRlciBpcyB0aGUgc2FtZSBhcyA4MDIuMyBoZWFkZXIuCisJCQkvLyAgIERBKDYpK1NBKDYpK0ZyYW1lVHlwZSgyKQorCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAxMik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDEyOworCQkJLy8gZ2V0IDIgb2N0ZXRzIChUeXBlb2ZMZW4pCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZEYXRhLTIsIDIpOworCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gTEVOR1RIX0FSQUxJTktfU1VCRlJBTUVIRUFEOworCQl9CisKKwkJdG90YWxNUERVU2l6ZSArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKworCQkvL0ZyZWVOdW1iZXIgPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisJCWlmIChmcmFtZU51bSA9PTApCisJCQlGaXJzdFR4ID0gSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgJkZyZWVOdW1iZXIpOworCQllbHNlCisJCQlMYXN0VHhJZHggPSBIQUxfV3JpdGVNdWx0aVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYW1lTnVtLCAmRnJlZU51bWJlcik7CisKKwkJZnJhbWVOdW0rKzsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4QWdncmVnYXRpb25Db3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKKworCX0KKworCUhBTF9GaW5hbFdyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgdG90YWxNUERVU2l6ZSwgRmlyc3RUeCk7CisJSEFMX0xhc3RUeElkeChwQWQsIHBUeEJsay0+UXVlSWR4LCBMYXN0VHhJZHgpOworCisJLy8KKwkvLyBLaWNrIG91dCBUeAorCS8vCisJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCit9CisKKworVk9JRCBTVEFfRnJhZ21lbnRfRnJhbWVfVHgoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLCQkqcFR4QmxrKQoreworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJVVNIT1JUCQkJRnJlZU51bWJlcjsKKwlVQ0hBUiAJCQlmcmFnTnVtID0gMDsKKwlQQUNLRVRfSU5GTwkJUGFja2V0SW5mbzsKKwlVU0hPUlQJCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAwOworCVVJTlQzMgkJCUZyZWVNcGR1U2l6ZSwgU3JjUmVtYWluaW5nQnl0ZXM7CisJVVNIT1JUCQkJQWNrRHVyYXRpb247CisJVUlOVCAJCQlOZXh0TXBkdVNpemU7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisKKwlBU1NFUlQocFR4QmxrKTsKKworCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJQVNTRVJUKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZykpOworCWJWTEFOUGt0ID0gKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOworCisJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOworCisJaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKQorCXsKKwkJcFR4QmxrLT5wUGFja2V0ID0gZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKHBBZCwgcFR4QmxrLT5wUGFja2V0KTsKKwkJaWYgKHBUeEJsay0+cFBhY2tldCA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwVHhCbGstPnBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAmcFR4QmxrLT5TcmNCdWZMZW4pOworCX0KKworCS8vIHNraXAgODAyLjMgaGVhZGVyCisJcFR4QmxrLT5wU3JjQnVmRGF0YSA9IHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIExFTkdUSF84MDJfMzsKKwlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisKKwkvLyBza2lwIHZsYW4gdGFnCisJaWYgKGJWTEFOUGt0KQorCXsKKwkJcFR4QmxrLT5wU3JjQnVmRGF0YQkrPSBMRU5HVEhfODAyXzFROworCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCX0KKworCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKilwSGVhZGVyQnVmUHRyOworCisKKwkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKQorCXsKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKworCQkqKHBIZWFkZXJCdWZQdHIrMSkgPSAwOworCQlwSGVhZGVyQnVmUHRyICs9MjsKKwkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisJfQorCisJLy8KKwkvLyBwYWRkaW5nIGF0IGZyb250IG9mIExMQyBoZWFkZXIKKwkvLyBMTEMgaGVhZGVyIHNob3VsZCBsb2NhdGUgYXQgNC1vY3RldHMgYWxpZ21lbnQKKwkvLworCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUikgUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7CisKKworCisJLy8KKwkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJLy8KKwkvLworICAgCS8vIGlmIG9yaWdpbmFsIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIG5vIExMQy9TTkFQLAorCS8vIHRoZW4gYW4gZXh0cmEgTExDL1NOQVAgZW5jYXAgaXMgcmVxdWlyZWQKKwkvLworCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfU1RBUlQocFR4QmxrLT5wU3JjQnVmSGVhZGVyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisJaWYgKHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKQorCXsKKwkJVUNIQVIgdmxhbl9zaXplOworCisJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwLCA2KTsKKwkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkvLyBza2lwIHZsYW4gdGFnCisJCXZsYW5fc2l6ZSA9ICAoYlZMQU5Qa3QpID8gTEVOR1RIXzgwMl8xUSA6IDA7CisJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIrMTIrdmxhbl9zaXplLCAyKTsKKwkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJfQorCisKKwkvLyBJZiBUS0lQIGlzIHVzZWQgYW5kIGZyYWdtZW50YXRpb24gaXMgcmVxdWlyZWQuIERyaXZlciBoYXMgdG8KKwkvLwlhcHBlbmQgVEtJUCBNSUMgYXQgdGFpbCBvZiB0aGUgc2NhdHRlciBidWZmZXIKKwkvLwlNQUMgQVNJQyB3aWxsIG9ubHkgcGVyZm9ybSBJVi9FSVYvSUNWIGluc2VydGlvbiBidXQgbm8gVEtJUCBNSUMKKwlpZiAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApCisJeworCisJCS8vIE5PVEU6IERPTidUIHJlZmVyIHRoZSBza2ItPmxlbiBkaXJlY3RseSBhZnRlciBmb2xsb3dpbmcgY29weS4gQmVjYXN1ZSB0aGUgbGVuZ3RoIGlzIG5vdCBhZGp1c3QKKwkJLy8JCQl0byBjb3JyZWN0IGxlbmdodCwgcmVmZXIgdG8gcFR4QmxrLT5TcmNCdWZMZW4gZm9yIHRoZSBwYWNrZXQgbGVuZ3RoIGluIGZvbGxvd2luZyBwcm9ncmVzcy4KKwkJTmRpc01vdmVNZW1vcnkocFR4QmxrLT5wU3JjQnVmRGF0YSArIHBUeEJsay0+U3JjQnVmTGVuLCAmcEFkLT5Qcml2YXRlSW5mby5UeC5NSUNbMF0sIDgpOworCQkvL3NrYl9wdXQoKFJUUEtUX1RPX09TUEtUKHBUeEJsay0+cFBhY2tldCkpLT50YWlsLCA4KTsKKwkJcFR4QmxrLT5TcmNCdWZMZW4gKz0gODsKKwkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IDg7CisJCXBUeEJsay0+Q2lwaGVyQWxnID0gQ0lQSEVSX1RLSVBfTk9fTUlDOworCX0KKworCS8vCisJLy8gY2FsY3VhdGUgdGhlIG92ZXJoZWFkIGJ5dGVzIHRoYXQgZW5jcnlwdGlvbiBhbGdvcml0aG0gbWF5IGFkZC4gVGhpcworCS8vIGFmZmVjdHMgdGhlIGNhbGN1bGF0ZSBvZiAiZHVyYXRpb24iIGZpZWxkCisJLy8KKwlpZiAoKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9XRVA2NCkgfHwgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9XRVAxMjgpKQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSA4OyAvL1dFUDogSVZbNF0gKyBJQ1ZbNF07CisJZWxzZSBpZiAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAxMjsvL1RLSVA6IElWWzRdICsgRUlWWzRdICsgSUNWWzRdLCBNSUMgd2lsbCBiZSBhZGRlZCB0byBUb3RhbFBhY2tldExlbmd0aAorCWVsc2UgaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAyMDsvL1RLSVA6IElWWzRdICsgRUlWWzRdICsgSUNWWzRdICsgTUlDWzhdCisJZWxzZSBpZiAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykKKwkJRW5jcnlwdGlvbk92ZXJoZWFkID0gMTY7CS8vIEFFUzogSVZbNF0gKyBFSVZbNF0gKyBNSUNbOF0KKwllbHNlCisJCUVuY3J5cHRpb25PdmVyaGVhZCA9IDA7CisKKwkvLyBkZWNpZGUgaG93IG11Y2ggdGltZSBhbiBBQ0svQ1RTIGZyYW1lIHdpbGwgY29uc3VtZSBpbiB0aGUgYWlyCisJQWNrRHVyYXRpb24gPSBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgcEFkLT5Db21tb25DZmcuRXhwZWN0ZWRBQ0tSYXRlW3BUeEJsay0+VHhSYXRlXSwgMTQpOworCisJLy8gSW5pdCB0aGUgdG90YWwgcGF5bG9hZCBsZW5ndGggb2YgdGhpcyBmcmFtZS4KKwlTcmNSZW1haW5pbmdCeXRlcyA9IHBUeEJsay0+U3JjQnVmTGVuOworCisJcFR4QmxrLT5Ub3RhbEZyYWdOdW0gPSAweGZmOworCisJZG8geworCisJCUZyZWVNcGR1U2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkIC0gTEVOR1RIX0NSQzsKKworCQlGcmVlTXBkdVNpemUgLT0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOworCisJCWlmIChTcmNSZW1haW5pbmdCeXRlcyA8PSBGcmVlTXBkdVNpemUpCisJCXsJLy8gdGhpcyBpcyB0aGUgbGFzdCBvciBvbmx5IGZyYWdtZW50CisKKwkJCXBUeEJsay0+U3JjQnVmTGVuID0gU3JjUmVtYWluaW5nQnl0ZXM7CisKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Nb3JlRnJhZyA9IDA7CisJCQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPSBwQWQtPkNvbW1vbkNmZy5Ec2lmcyArIEFja0R1cmF0aW9uOworCisJCQkvLyBJbmRpY2F0ZSB0aGUgbG93ZXIgbGF5ZXIgdGhhdCB0aGlzJ3MgdGhlIGxhc3QgZnJhZ21lbnQuCisJCQlwVHhCbGstPlRvdGFsRnJhZ051bSA9IGZyYWdOdW07CisJCX0KKwkJZWxzZQorCQl7CS8vIG1vcmUgZnJhZ21lbnQgaXMgcmVxdWlyZWQKKworCQkJcFR4QmxrLT5TcmNCdWZMZW4gPSBGcmVlTXBkdVNpemU7CisKKwkJCU5leHRNcGR1U2l6ZSA9IG1pbigoKFVJTlQpU3JjUmVtYWluaW5nQnl0ZXMgLSBwVHhCbGstPlNyY0J1ZkxlbiksICgoVUlOVClwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkpOworCQkJcEhlYWRlcl84MDJfMTEtPkZDLk1vcmVGcmFnID0gMTsKKwkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9ICgzICogcEFkLT5Db21tb25DZmcuRHNpZnMpICsgKDIgKiBBY2tEdXJhdGlvbikgKyBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgcFR4QmxrLT5UeFJhdGUsIE5leHRNcGR1U2l6ZSArIEVuY3J5cHRpb25PdmVyaGVhZCk7CisJCX0KKworCQlpZiAoZnJhZ051bSA9PSAwKQorCQkJcFR4QmxrLT5GcmFtZUdhcCA9IElGU19IVFRYT1A7CisJCWVsc2UKKwkJCXBUeEJsay0+RnJhbWVHYXAgPSBJRlNfU0lGUzsKKworCQlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCisJCUhBTF9Xcml0ZUZyYWdUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFnTnVtLCAmRnJlZU51bWJlcik7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7CisKKwkJLy8gVXBkYXRlIHRoZSBmcmFtZSBudW1iZXIsIHJlbWFpbmluZyBzaXplIG9mIHRoZSBORElTIHBhY2tldCBwYXlsb2FkLgorCisJCS8vIHNwYWNlIGZvciA4MDIuMTEgaGVhZGVyLgorCQlpZiAoZnJhZ051bSA9PSAwICYmIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKQorCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuIC09IExFTkdUSF84MDJfMV9IOworCisJCWZyYWdOdW0rKzsKKwkJU3JjUmVtYWluaW5nQnl0ZXMgLT0gcFR4QmxrLT5TcmNCdWZMZW47CisJCXBUeEJsay0+cFNyY0J1ZkRhdGEgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJcEhlYWRlcl84MDJfMTEtPkZyYWcrKzsJIC8vIGluY3JlYXNlIEZyYWcgIworCisJfXdoaWxlKFNyY1JlbWFpbmluZ0J5dGVzID4gMCk7CisKKwkvLworCS8vIEtpY2sgb3V0IFR4CisJLy8KKwlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Cit9CisKKworI2RlZmluZSBSRUxFQVNFX0ZSQU1FU19PRl9UWEJMSyhfcEFkLCBfcFR4QmxrLCBfcFFFbnRyeSwgX1N0YXR1cykgCQkJCQkJCQkJCVwKKwkJd2hpbGUoX3BUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQpCQkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJX3BRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJl9wVHhCbGstPlR4UGFja2V0TGlzdCk7CQkJCQkJCQkJXAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChfcEFkLCBRVUVVRV9FTlRSWV9UT19QQUNLRVQoX3BRRW50cnkpLCBfU3RhdHVzKTsJXAorCQl9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSBlbmNyeXB0aW9uIGJlZm9yZSByZWFsbHkKKwlzZW50IG91dCB0byBhaXIuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlQTkRJU19QQUNLRVQJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCisJCU51bWJlck9mRnJhZwlOdW1iZXIgb2YgZnJhZ21lbnQgcmVxdWlyZWQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgU1RBSGFyZFRyYW5zbWl0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFRYX0JMSyAJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJUXVlSWR4KQoreworCU5ESVNfUEFDS0VUCQkqcFBhY2tldDsKKwlQUVVFVUVfRU5UUlkJcFFFbnRyeTsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNURVAgMC4gRE8gU0FOSVRZIENIRUNLIEFORCBTT01FIEVBUkxZIFBSRVBBUkFUSU9OLgorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vCisJQVNTRVJUKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcik7CisJaWYgKHBUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInBUeEJsay0+VG90YWxGcmFtZU51bSA9PSAlbGQhXG4iLCBwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIpKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKTsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNURVAgMS4gV0FLRSBVUCBQSFkKKwkvLwkJb3V0Z29pbmcgZnJhbWUgYWx3YXlzIHdha2V1cCBQSFkgdG8gcHJldmVudCBmcmFtZSBsb3N0IGFuZAorCS8vCQl0dXJuIG9mZiBQU00gYml0IHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBub3QgdG8gY2hhbmdlIFBTTSBiaXQsIGp1c3Qgc2VuZCB0aGlzIGZyYW1lIG91dD8KKwlpZiAoKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwl7CisJICAgIERCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJBc2ljRm9yY2VXYWtldXAgQXQgSGFyZFR4XG4iKSk7CisJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCX0KKworCS8vIEl0IHNob3VsZCBub3QgY2hhbmdlIFBTTSBiaXQsIHdoZW4gQVBTRCB0dXJuIG9uLgorCWlmICgoIShwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpICYmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlID09IEZBTFNFKSkKKwkJfHwgKFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwVHhCbGstPnBQYWNrZXQpKQorCQl8fCAoUlRNUF9HRVRfUEFDS0VUX1dBSShwVHhCbGstPnBQYWNrZXQpKSkKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJgorICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQKSkKKwkJCU1sbWVTZXRQc21CaXQocEFkLCBQV1JfQUNUSVZFKTsKKwl9CisKKwlzd2l0Y2ggKHBUeEJsay0+VHhGcmFtZVR5cGUpCisJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIFRYX0FNUERVX0ZSQU1FOgorCQkJCVNUQV9BTVBEVV9GcmFtZV9UeChwQWQsIHBUeEJsayk7CisJCQlicmVhazsKKwkJY2FzZSBUWF9BTVNEVV9GUkFNRToKKwkJCQlTVEFfQU1TRFVfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWNhc2UgVFhfTEVHQUNZX0ZSQU1FOgorCQkJCVNUQV9MZWdhY3lfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWNhc2UgVFhfTUNBU1RfRlJBTUU6CisJCQkJU1RBX0xlZ2FjeV9GcmFtZV9UeChwQWQsIHBUeEJsayk7CisJCQlicmVhazsKKwkJY2FzZSBUWF9SQUxJTktfRlJBTUU6CisJCQkJU1RBX0FSYWxpbmtfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWNhc2UgVFhfRlJBR19GUkFNRToKKwkJCQlTVEFfRnJhZ21lbnRfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJLy8gSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCEKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZW5kIGEgcGFjZWt0IHdhcyBub3QgY2xhc3NpZmllZCEhIEl0IHNob3VsZCBub3QgaGFwcGVuIVxuIikpOworCQkJCXdoaWxlKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcikKKwkJCQl7CisJCQkJCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwkJCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKKwkJCQkJaWYgKHBQYWNrZXQpCisJCQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKKworfQorCitVTE9ORyAgSGFzaEJ5dGVzUG9seW5vbWlhbChVQ0hBUiAqdmFsdWUsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICB1bnNpZ25lZCBjaGFyICp3b3JkID0gdmFsdWU7CisgICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKyAgIHVuc2lnbmVkIGludCBpOworCisgICBmb3IoaT0wOyBpIDwgbGVuOyBpKyspCisgICB7CisJICBpbnQgbW9kID0gaSAlIDMyOworCSAgcmV0IF49KHVuc2lnbmVkIGludCkgKHdvcmRbaV0pIDw8IG1vZDsKKwkgIHJldCBePSh1bnNpZ25lZCBpbnQpICh3b3JkW2ldKSA+PiAoMzIgLSBtb2QpOworICAgfQorICAgcmV0dXJuIHJldDsKK30KKworVk9JRCBTdGFfQW5ub3VuY2Vfb3JfRm9yd2FyZF84MDJfM19QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlpZiAoVFJVRQorCQkpCisJeworCQlhbm5vdW5jZV84MDJfM19wYWNrZXQocEFkLCBwUGFja2V0KTsKKwl9CisJZWxzZQorCXsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc2FuaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zYW5pdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk4NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc2FuaXR5LmMKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc2FuaXR5LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nICAyMDA0LTA5LTAxICAgICAgYWRkIFdNTSBzdXBwb3J0CisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCitleHRlcm4gVUNIQVIJQ0lTQ09fT1VJW107CisKK2V4dGVybiBVQ0hBUglXUEFfT1VJW107CitleHRlcm4gVUNIQVIJUlNOX09VSVtdOworZXh0ZXJuIFVDSEFSCVdNRV9JTkZPX0VMRU1bXTsKK2V4dGVybiBVQ0hBUglXTUVfUEFSTV9FTEVNW107CitleHRlcm4gVUNIQVIJQ2N4MlFvc0luZm9bXTsKK2V4dGVybiBVQ0hBUglSQUxJTktfT1VJW107CitleHRlcm4gVUNIQVIJQlJPQURDT01fT1VJW107CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZVN0YXJ0UmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqcFNzaWRMZW4pCit7CisgICAgTUxNRV9TVEFSVF9SRVFfU1RSVUNUICpJbmZvOworCisgICAgSW5mbyA9IChNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKikoTXNnKTsKKworICAgIGlmIChJbmZvLT5Tc2lkTGVuID4gTUFYX0xFTl9PRl9TU0lEKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVN0YXJ0UmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTU0lEIGxlbmd0aFxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgKnBTc2lkTGVuID0gSW5mby0+U3NpZExlbjsKKyAgICBOZGlzTW92ZU1lbW9yeShTc2lkLCBJbmZvLT5Tc2lkLCAqcFNzaWRMZW4pOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisgICAgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJBc3NvY1JzcFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBPVVQgVVNIT1JUICpwQWlkLAorICAgIE9VVCBVQ0hBUiBTdXBSYXRlW10sCisgICAgT1VUIFVDSEFSICpwU3VwUmF0ZUxlbiwKKyAgICBPVVQgVUNIQVIgRXh0UmF0ZVtdLAorICAgIE9VVCBVQ0hBUiAqcEV4dFJhdGVMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorICAgIE9VVCBBRERfSFRfSU5GT19JRQkJKnBBZGRIdEluZm8sCS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorICAgIE9VVCBVQ0hBUgkJCSpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBVQ0hBUgkJCSpwQWRkSHRJbmZvTGVuLAorICAgIE9VVCBVQ0hBUgkJCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCwKKyAgICBPVVQgUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisgICAgT1VUIFVDSEFSICpwQ2tpcEZsYWcpCit7CisgICAgQ0hBUiAgICAgICAgICBJZVR5cGUsICpQdHI7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworICAgIFBFSURfU1RSVUNUICAgcEVpZDsKKyAgICBVTE9ORyAgICAgICAgIExlbmd0aCA9IDA7CisKKwkqcE5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCSpwSHRDYXBhYmlsaXR5TGVuID0gMDsKKwkqcEFkZEh0SW5mb0xlbiA9IDA7CisgICAgQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKKyAgICBQdHIgPSBwRnJhbWUtPk9jdGV0OworICAgIExlbmd0aCArPSBMRU5HVEhfODAyXzExOworCisgICAgTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCAmcEZyYW1lLT5PY3RldFswXSwgMik7CisgICAgTGVuZ3RoICs9IDI7CisgICAgTmRpc01vdmVNZW1vcnkocFN0YXR1cywgICAgICAgICAmcEZyYW1lLT5PY3RldFsyXSwgMik7CisgICAgTGVuZ3RoICs9IDI7CisgICAgKnBDa2lwRmxhZyA9IDA7CisgICAgKnBFeHRSYXRlTGVuID0gMDsKKyAgICBwRWRjYVBhcm0tPmJWYWxpZCA9IEZBTFNFOworCisgICAgaWYgKCpwU3RhdHVzICE9IE1MTUVfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBOZGlzTW92ZU1lbW9yeShwQWlkLCAmcEZyYW1lLT5PY3RldFs0XSwgMik7CisgICAgTGVuZ3RoICs9IDI7CisKKyAgICAvLyBBaWQgYWxyZWFkeSBzd2FwZWQgYnl0ZSBvcmRlciBpbiBSVE1QRnJhbWVFbmRpYW5DaGFuZ2UoKSBmb3IgYmlnIGVuZGlhbiBwbGF0Zm9ybQorICAgICpwQWlkID0gKCpwQWlkKSAmIDB4M2ZmZjsgLy8gQUlEIGlzIGxvdyAxNC1iaXQKKworICAgIC8vIC0tIGdldCBzdXBwb3J0ZWQgcmF0ZXMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgSWVUeXBlID0gcEZyYW1lLT5PY3RldFs2XTsKKyAgICAqcFN1cFJhdGVMZW4gPSBwRnJhbWUtPk9jdGV0WzddOworICAgIGlmICgoSWVUeXBlICE9IElFX1NVUFBfUkFURVMpIHx8ICgqcFN1cFJhdGVMZW4gPiBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgZmFpbCAtIHdyb25nIFN1cHBvcnRlZFJhdGVzIElFXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCAmcEZyYW1lLT5PY3RldFs4XSwgKnBTdXBSYXRlTGVuKTsKKworICAgIExlbmd0aCA9IExlbmd0aCArIDIgKyAqcFN1cFJhdGVMZW47CisKKyAgICAvLyBtYW55IEFQIGltcGxlbWVudCBwcm9wcmlldGFyeSBJRXMgaW4gbm9uLXN0YW5kYXJkIG9yZGVyLCB3ZSdkIGJldHRlcgorICAgIC8vIHRvbGVyYXRlIG1pcy1vcmRlcmVkIElFcyB0byBnZXQgYmVzdCBjb21wYXRpYmlsaXR5CisgICAgcEVpZCA9IChQRUlEX1NUUlVDVCkgJnBGcmFtZS0+T2N0ZXRbOCArICgqcFN1cFJhdGVMZW4pXTsKKworICAgIC8vIGdldCB2YXJpYWJsZSBmaWVsZHMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgd2hpbGUgKChMZW5ndGggKyAyICsgcEVpZC0+TGVuKSA8PSBNc2dMZW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKHBFaWQtPkVpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBJRV9FWFRfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoRXh0UmF0ZSwgcEVpZC0+T2N0ZXQsIHBFaWQtPkxlbik7CisgICAgICAgICAgICAgICAgICAgICpwRXh0UmF0ZUxlbiA9IHBFaWQtPkxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICBjYXNlIElFX0hUX0NBUDoKKyAgICAgICAgICAgIGNhc2UgSUVfSFRfQ0FQMjoKKwkJCWlmIChwRWlkLT5MZW4gPj0gU0laRV9IVF9DQVBfSUUpICAvL05vdGU6IGFsbG93IGV4dGVuc2lvbi4hIQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KHBIdENhcGFiaWxpdHksIHBFaWQtPk9jdGV0LCBTSVpFX0hUX0NBUF9JRSk7CisKKwkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pKTsKKwkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pKTsKKworCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuIFxuIikpOworCQkJfQorCisJCWJyZWFrOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICAgICAgY2FzZSBJRV9BRERfSFQ6CisgICAgICAgICAgICBjYXNlIElFX0FERF9IVDI6CisJCQlpZiAocEVpZC0+TGVuID49IHNpemVvZihBRERfSFRfSU5GT19JRSkpCisJCQl7CisJCQkJLy8gVGhpcyBJRSBhbGxvd3MgZXh0ZW5zaW9uLCBidXQgd2UgY2FuIGlnbm9yZSBleHRyYSBieXRlcyBiZXlvbmQgb3VyIGtub3dsZWRnZSAsIHNvIG9ubHkKKwkJCQkvLyBjb3B5IGZpcnN0IHNpemVvZihBRERfSFRfSU5GT19JRSkKKwkJCQlOZGlzTW92ZU1lbW9yeShwQWRkSHRJbmZvLCBwRWlkLT5PY3RldCwgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisKKwkJCQkqKFVTSE9SVCAqKSgmcEFkZEh0SW5mby0+QWRkSHRJbmZvMikgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEFkZEh0SW5mby0+QWRkSHRJbmZvMikpOworCQkJCSooVVNIT1JUICopKCZwQWRkSHRJbmZvLT5BZGRIdEluZm8zKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwQWRkSHRJbmZvLT5BZGRIdEluZm8zKSk7CisKKwkJCQkqcEFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgLSB3cm9uZyBJRV9BRERfSFQuIFxuIikpOworCQkJfQorCisJCWJyZWFrOworICAgICAgICAgICAgY2FzZSBJRV9TRUNPTkRBUllfQ0hfT0ZGU0VUOgorCQkJaWYgKHBFaWQtPkxlbiA9PSAxKQorCQkJeworCQkJCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCA9IHBFaWQtPk9jdGV0WzBdOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckFzc29jUnNwU2FuaXR5IC0gd3JvbmcgSUVfU0VDT05EQVJZX0NIX09GRlNFVC4gXG4iKSk7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWJyZWFrOworICAgICAgICAgICAgY2FzZSBJRV9BSVJPTkVUX0NLSVA6CisgICAgICAgICAgICAgICAgLy8gMC4gQ2hlY2sgQWlyb25ldCBJRSBsZW5ndGgsIGl0IG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRvIDI4CisgICAgICAgICAgICAgICAgLy8gICAgQ2lzY28ncyBBUCBWeFdvcmsgdmVyc2lvbih3aWxsIG5vdCBiZSBzdXBwb3J0ZWQpIHVzZWQgdGhpcyBJRSBsZW5ndGggYXMgMjgKKyAgICAgICAgICAgICAgICAvLyAgICBDaXNjbydzIEFQIElPUyB2ZXJzaW9uIHVzZWQgdGhpcyBJRSBsZW5ndGggYXMgMzAKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDwgKENLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyAxLiBDb3B5IENLSVAgZmxhZyBieXRlIHRvIGJ1ZmZlciBmb3IgcHJvY2VzcworICAgICAgICAgICAgICAgICpwQ2tpcEZsYWcgPSAqKHBFaWQtPk9jdGV0ICsgOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfQUlST05FVF9JUEFERFJFU1M6CisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiAhPSAweDBBKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IENpc2NvIEFpcm9uZXQgSVAgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBDSVNDT19PVUksIDMpID09IDEpCisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkFpcm9uZXRJUEFkZHJlc3MsIHBFaWQtPk9jdGV0ICsgNCwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIENDWDIsIFdNTSB1c2UgdGhlIHNhbWUgSUUgdmFsdWUKKyAgICAgICAgICAgIC8vIGNhc2UgSUVfQ0NYX1YyOgorICAgICAgICAgICAgY2FzZSBJRV9WRU5ET1JfU1BFQ0lGSUM6CisgICAgICAgICAgICAgICAgLy8gaGFuZGxlIFdNRSBQQVJBTVRFUiBFTEVNRU5UCisgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV01FX1BBUk1fRUxFTSwgNikgJiYgKHBFaWQtPkxlbiA9PSAyNCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBQVUNIQVIgcHRyOworICAgICAgICAgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgICAgICAgICAvLyBwYXJzaW5nIEVEQ0EgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJWYWxpZCAgICAgICAgICA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlFBY2sgICAgICAgICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHgxMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iUXVldWVSZXF1ZXN0ICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDIwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJUeG9wUmVxdWVzdCAgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4NDA7CisgICAgICAgICAgICAgICAgICAgIC8vcEVkY2FQYXJtLT5iTW9yZURhdGFBY2sgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDgwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCA9IHBFaWQtPk9jdGV0WzZdICYgMHgwZjsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQVBTRENhcGFibGUgICAgPSAocEVpZC0+T2N0ZXRbNl0gJiAweDgwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcEVpZC0+T2N0ZXRbOF07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVIgYWNpID0gKCpwdHIgJiAweDYwKSA+PiA1OyAvLyBiNX42IGlzIEFDIElOREVYCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bYWNpXSAgPSAoKCgqcHRyKSAmIDB4MTApID09IDB4MTApOyAgIC8vIGI1IGlzIEFDTQorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzblthY2ldID0gKCpwdHIpICYgMHgwZjsgICAgICAgICAgICAgICAvLyBiMH4zIGlzIEFJRlNOCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW2FjaV0gPSAqKHB0cisxKSAmIDB4MGY7ICAgICAgICAgICAgIC8vIGIwfjQgaXMgQ3dtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbYWNpXSA9ICoocHRyKzEpID4+IDQ7ICAgICAgICAgICAgICAgLy8gYjV+OCBpcyBDd21heAorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW2FjaV0gID0gKihwdHIrMikgKyAyNTYgKiAoKihwdHIrMykpOyAvLyBpbiB1bml0IG9mIDMyLXVzCisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKz0gNDsgLy8gcG9pbnQgdG8gbmV4dCBBQworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlIENDWCBJRQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDAuIENoZWNrIHRoZSBzaXplIGFuZCBDQ1ggYWRtaW4gY29udHJvbAorICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5FbmFibGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuICE9IDUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIENDWDIgaWYgbWF0Y2hlZAorICAgICAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBDY3gySWVJbmZvLCA1KSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQ0NYRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBc3NvY1JzcFNhbml0eSAtIGlnbm9yZSB1bnJlY29nbml6ZWQgRUlEID0gJWRcbiIsIHBFaWQtPkVpZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTGVuZ3RoID0gTGVuZ3RoICsgMiArIHBFaWQtPkxlbjsKKyAgICAgICAgcEVpZCA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKilwRWlkICsgMiArIHBFaWQtPkxlbik7CisgICAgfQorCisgICAgLy8gRm9yY2UgQ0NYMiBlbmFibGUgdG8gVFJVRSBmb3IgdGhvc2UgQVAgZGlkbid0IHJlcGxheSBDQ1ggdjIgSUUsIHdlIHN0aWxsIGZvcmNlIGl0IHRvIGJlIG9uCisgICAgaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuRW5hYmxlID09IDEpCisgICAgICAgIHBBZC0+U3RhQ2ZnLkNDWEVuYWJsZSA9IFRSVUU7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlclByb2JlUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqcFNzaWRMZW4pCit7CisgICAgVUNIQVIgICAgICAgICBJZHg7CisgICAgVUNIQVIJICAgICAgUmF0ZUxlbjsKKyAgICBDSEFSICAgICAgICAgIEllVHlwZTsKKyAgICBQRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKU1zZzsKKworICAgIENPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7CisKKyAgICBpZiAoKHBGcmFtZS0+T2N0ZXRbMF0gIT0gSUVfU1NJRCkgfHwgKHBGcmFtZS0+T2N0ZXRbMV0gPiBNQVhfTEVOX09GX1NTSUQpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlclByb2JlUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTU0lEIElFKFR5cGU9JWQsTGVuPSVkKVxuIixwRnJhbWUtPk9jdGV0WzBdLHBGcmFtZS0+T2N0ZXRbMV0pKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgICpwU3NpZExlbiA9IHBGcmFtZS0+T2N0ZXRbMV07CisgICAgTmRpc01vdmVNZW1vcnkoU3NpZCwgJnBGcmFtZS0+T2N0ZXRbMl0sICpwU3NpZExlbik7CisKKyAgICBJZHggPSAqcFNzaWRMZW4gKyAyOworCisgICAgLy8gLS0gZ2V0IHN1cHBvcnRlZCByYXRlcyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBJZVR5cGUgPSBwRnJhbWUtPk9jdGV0W0lkeF07CisgICAgUmF0ZUxlbiA9IHBGcmFtZS0+T2N0ZXRbSWR4ICsgMV07CisgICAgaWYgKEllVHlwZSAhPSBJRV9TVVBQX1JBVEVTKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlclByb2JlUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTdXBwb3J0UmF0ZXMgSUUoVHlwZT0lZCxMZW49JWQpXG4iLHBGcmFtZS0+T2N0ZXRbSWR4XSxwRnJhbWUtPk9jdGV0W0lkeCsxXSkpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSAmJiAoUmF0ZUxlbiA8IDgpKQorICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBHZXRUaW1CaXQoCisgICAgSU4gQ0hBUiAqUHRyLAorICAgIElOIFVTSE9SVCBBaWQsCisgICAgT1VUIFVDSEFSICpUaW1MZW4sCisgICAgT1VUIFVDSEFSICpCY2FzdEZsYWcsCisgICAgT1VUIFVDSEFSICpEdGltQ291bnQsCisgICAgT1VUIFVDSEFSICpEdGltUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqTWVzc2FnZVRvTWUpCit7CisgICAgVUNIQVIgICAgICAgICAgQml0Q250bCwgTjEsIE4yLCBNeUJ5dGUsIE15Qml0OworICAgIENIQVIgICAgICAgICAgKklkeFB0cjsKKworICAgIElkeFB0ciA9IFB0cjsKKworICAgIElkeFB0ciArKzsKKyAgICAqVGltTGVuID0gKklkeFB0cjsKKworICAgIC8vIGdldCBEVElNIENvdW50IGZyb20gVElNIGVsZW1lbnQKKyAgICBJZHhQdHIgKys7CisgICAgKkR0aW1Db3VudCA9ICpJZHhQdHI7CisKKyAgICAvLyBnZXQgRFRJTSBQZXJpb2QgZnJvbSBUSU0gZWxlbWVudAorICAgIElkeFB0cisrOworICAgICpEdGltUGVyaW9kID0gKklkeFB0cjsKKworICAgIC8vIGdldCBCaXRtYXAgQ29udHJvbCBmcm9tIFRJTSBlbGVtZW50CisgICAgSWR4UHRyKys7CisgICAgQml0Q250bCA9ICpJZHhQdHI7CisKKyAgICBpZiAoKCpEdGltQ291bnQgPT0gMCkgJiYgKEJpdENudGwgJiAweDAxKSkKKyAgICAgICAgKkJjYXN0RmxhZyA9IFRSVUU7CisgICAgZWxzZQorICAgICAgICAqQmNhc3RGbGFnID0gRkFMU0U7CisKKyAgICAvLyBQYXJzZSBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwIGZyb20gVElNIGVsZW1lbnQKKyAgICBOMSA9IEJpdENudGwgJiAweGZlOyAgICAvLyBOMSBpcyB0aGUgZmlyc3QgYml0bWFwIGJ5dGUjCisgICAgTjIgPSAqVGltTGVuIC0gNCArIE4xOyAgLy8gTjIgaXMgdGhlIGxhc3QgYml0bWFwIGJ5dGUjCisKKyAgICBpZiAoKEFpZCA8IChOMSA8PCAzKSkgfHwgKEFpZCA+PSAoKE4yICsgMSkgPDwgMykpKQorICAgICAgICAqTWVzc2FnZVRvTWUgPSBGQUxTRTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBNeUJ5dGUgPSAoQWlkID4+IDMpIC0gTjE7ICAgICAgICAgICAgICAgICAgICAgICAvLyBteSBieXRlIHBvc2l0aW9uIGluIHRoZSBiaXRtYXAgYnl0ZS1zdHJlYW0KKyAgICAgICAgTXlCaXQgPSBBaWQgJSAxNiAtICgoTXlCeXRlICYgMHgwMSk/IDg6MCk7CisKKyAgICAgICAgSWR4UHRyICs9IChNeUJ5dGUgKyAxKTsKKworICAgICAgICAvL2lmICgqSWR4UHRyKQorICAgICAgICAvLyAgICBEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlRJTSBiaXRtYXAgPSAweCUwMnhcbiIsICpJZHhQdHIpKTsKKworICAgICAgICBpZiAoKklkeFB0ciAmICgweDAxIDw8IE15Qml0KSkKKyAgICAgICAgICAgICpNZXNzYWdlVG9NZSA9IFRSVUU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpNZXNzYWdlVG9NZSA9IEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1YjNiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3N5bmMuYwpAQCAtMCwwICsxLDE3NTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc3luYy5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZwkyMDA0LTA5LTAxICAgICAgbW9kaWZpZWQgZm9yIHJ0MjU2MS8yNjYxCisJSmFuIExlZQkJMjAwNi0wOC0wMSAgICAgIG1vZGlmaWVkIGZvciBydDI4NjAgZm9yIDgwMi4xMW4KKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKyNkZWZpbmUgQURIT0NfRU5UUllfQkVBQ09OX0xPU1RfVElNRQkoMipPU19IWikJLy8gMiBzZWMKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGUgc3luYyBzdGF0ZSBtYWNoaW5lLAorCVBhcmFtZXRlcnM6CisJCVNtIC0gcG9pbnRlciB0byB0aGUgc3RhdGUgbWFjaGluZQorCU5vdGU6CisJCXRoZSBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZworCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTbSwKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJU3RhdGVNYWNoaW5lSW5pdChTbSwgVHJhbnMsIE1BWF9TWU5DX1NUQVRFLCBNQVhfU1lOQ19NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpRHJvcCwgU1lOQ19JRExFLCBTWU5DX01BQ0hJTkVfQkFTRSk7CisKKwkvLyBjb2x1bW4gMQorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfTUxNRV9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lU2NhblJlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9NTE1FX0pPSU5fUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVKb2luUmVxQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX01MTUVfU1RBUlRfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVTdGFydFJlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9QRUVSX0JFQUNPTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX1BFRVJfUFJPQkVfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJQcm9iZVJlcUFjdGlvbik7CisKKwkvL2NvbHVtbiAyCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuU2Nhbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9KT0lOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuSm9pbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9TVEFSVF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblN0YXJ0KTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9CRUFDT04sIE1UMl9QRUVSX0JFQUNPTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uQXRKb2luQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9CRUFDT04sIE1UMl9CRUFDT05fVElNRU9VVCwgKFNUQVRFX01BQ0hJTkVfRlVOQylCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKTsKKworCS8vIGNvbHVtbiAzCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfU0NBTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblNjYW4pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9NTE1FX0pPSU5fUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Kb2luKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfTUxNRV9TVEFSVF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblN0YXJ0KTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfUEVFUl9CRUFDT04sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJlYWNvbkF0U2NhbkFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX1BFRVJfUFJPQkVfUlNQLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJCZWFjb25BdFNjYW5BY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9TQ0FOX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpU2NhblRpbWVvdXRBY3Rpb24pOworCisJLy8gdGltZXIgaW5pdAorCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCksIHBBZCwgRkFMU0UpOworCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKFNjYW5UaW1lb3V0KSwgcEFkLCBGQUxTRSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQmVhY29uIHRpbWVvdXQgaGFuZGxlciwgZXhlY3V0ZWQgaW4gdGltZXIgdGhyZWFkCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQmVhY29uVGltZW91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTWU5DIC0gQmVhY29uVGltZW91dFxuIikpOworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCisJCSkKKwl7CisJCVVDSEFSICAgICAgICBCQlBWYWx1ZSA9IDA7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCUJCUFZhbHVlIHw9IDB4MTA7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEVuZCBvZiBTQ0FOLCByZXN0b3JlIHRvIDQwTUh6IGNoYW5uZWwgJWQsIFRvdGFsIEJTU1slMDJkXVxuIixwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgcEFkLT5TY2FuVGFiLkJzc05yKSk7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9CRUFDT05fVElNRU9VVCwgMCwgTlVMTCk7CisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNjYW4gdGltZW91dCBoYW5kbGVyLCBleGVjdXRlZCBpbiB0aW1lciB0aHJlYWQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTY2FuVGltZW91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQorCQlyZXR1cm47CisKKwlpZiAoTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX1RJTUVPVVQsIDAsIE5VTEwpKQorCXsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KKwllbHNlCisJeworCQkvLyBUbyBwcmV2ZW50IFN5bmNNYWNoaW5lLkN1cnJTdGF0ZSBpcyBTQ0FOX0xJU1RFTiBmb3JldmVyLgorCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IDA7CisJCVNjYW5OZXh0Q2hhbm5lbChwQWQpOworCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCXsKKwkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NDQU5fRU5RVUVVRV9GQUlMX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTUxNRSBTQ0FOIHJlcSBzdGF0ZSBtYWNoaW5lIHByb2NlZHVyZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZVNjYW5SZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXSwgU3NpZExlbiwgU2NhblR5cGUsIEJzc1R5cGUsIEJCUFZhbHVlID0gMDsKKwlCT09MRUFOICAgICAgICBUaW1lckNhbmNlbGxlZDsKKwlVTE9ORwkJICAgTm93OworCVVTSE9SVCAgICAgICAgIFN0YXR1czsKKwlQSEVBREVSXzgwMl8xMSBwSGRyODAyMTE7CisJUFVDSEFSICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgTlN0YXR1czsKKworCS8vIENoZWNrIHRoZSB0b3RhbCBzY2FuIHRyaWVzIGZvciBvbmUgc2luZ2xlIE9JRCBjb21tYW5kCisJLy8gSWYgdGhpcyBpcyB0aGUgQ0NYIDIuMCBDYXNlLCBza2lwIHRoYXQhCisJaWYgKCAhUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvbiBiZWZvcmUgU3RhcnR1cFxuIikpOworCQlyZXR1cm47CisJfQorCisJLy8gSW5jcmVhc2UgdGhlIHNjYW4gcmV0cnkgY291bnRlcnMuCisJcEFkLT5TdGFDZmcuU2NhbkNudCsrOworCisKKwkvLyBmaXJzdCBjaGVjayB0aGUgcGFyYW1ldGVyIHNhbml0eQorCWlmIChNbG1lU2NhblJlcVNhbml0eShwQWQsCisJCQkJCQkgIEVsZW0tPk1zZywKKwkJCQkJCSAgRWxlbS0+TXNnTGVuLAorCQkJCQkJICAmQnNzVHlwZSwKKwkJCQkJCSAgU3NpZCwKKwkJCQkJCSAgJlNzaWRMZW4sCisJCQkJCQkgICZTY2FuVHlwZSkpCisJeworCisJCS8vIENoZWNrIGZvciBjaGFubmVsIGxvYWQgYW5kIG5vaXNlIGhpc3QgcmVxdWVzdAorCQkvLyBTdXNwZW5kIE1TRFUgb25seSBhdCBzY2FuIHJlcXVlc3QsIG5vdCB0aGUgbGFzdCB0d28gbWVudGlvbmVkCisJCWlmICgoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19OT0lTRSkgfHwgKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSkKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCQkJUlRNUFN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKHBBZCk7CQkJLy8gU3VzcGVuZCBNU0RVIHRyYW5zbWlzc2lvbiBoZXJlCisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBTdXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uIGhlcmUKKwkJCVJUTVBTdXNwZW5kTXNkdVRyYW5zbWlzc2lvbihwQWQpOworCQl9CisKKwkJLy8KKwkJLy8gVG8gcHJldmVudCBkYXRhIGxvc3QuCisJCS8vIFNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb24gdG8gY3VycmVudCBhc3NvY2lhdGVkIEFQIGJlZm9yZSBTQ0FOIHByb2dyZXNzLgorCQkvLyBBbmQgc2hvdWxkIHNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb2ZmIHRvIEFQLCB3aGVuIHNjYW4gcHJvZ3Jlc3MgZG9uZQorCQkvLworCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpICYmIChJTkZSQV9PTihwQWQpKSkKKwkJeworCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7CisJCQlpZiAoTlN0YXR1cwk9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJeworCQkJCXBIZHI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcEhkcjgwMjExLCBTVUJUWVBFX05VTExfRlVOQywgMSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCQlwSGRyODAyMTEtPkR1cmF0aW9uID0gMDsKKwkJCQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCQkJCXBIZHI4MDIxMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCisJCQkJLy8gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2NhblJlcUFjdGlvbiAtLSBTZW5kIFBTTSBEYXRhIGZyYW1lIGZvciBvZmYgY2hhbm5lbCBSTVxuIikpOworCQkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCX0KKwkJfQorCisJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJCXBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsKKwkJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCQkvLyByZWNvcmQgZGVzaXJlZCBCU1MgcGFyYW1ldGVycworCQlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IEJzc1R5cGU7CisJCXBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9IFNjYW5UeXBlOworCQlwQWQtPk1sbWVBdXguU3NpZExlbiA9IFNzaWRMZW47CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgU3NpZCwgU3NpZExlbik7CisKKwkJLy8gc3RhcnQgZnJvbSB0aGUgZmlyc3QgY2hhbm5lbAorCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IEZpcnN0Q2hhbm5lbChwQWQpOworCisJCS8vIENoYW5nZSB0aGUgc2NhbiBjaGFubmVsIHdoZW4gZGVhbGluZyB3aXRoIENDWCBiZWFjb24gcmVwb3J0CisJCWlmICgoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19QQVNTSVZFKSB8fCAoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19BQ1RJVkUpIHx8CisJCQkoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19DSEFOTkVMX0xPQUQpIHx8IChTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFKSkKKwkJCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWw7CisKKwkJLy8gTGV0IEJCUCByZWdpc3RlciBhdCAyME1IeiB0byBkbyBzY2FuCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJQkJQVmFsdWUgJj0gKH4weDE4KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gQkJQIFI0IHRvIDIwTUh6LmxcbiIpKTsKKwkJU2Nhbk5leHRDaGFubmVsKHBBZCk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfSU5WQUxJRF9GT1JNQVQ7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNTE1FIEpPSU4gcmVxIHN0YXRlIG1hY2hpbmUgcHJvY2VkdXJlCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lSm9pblJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgIEJCUFZhbHVlID0gMDsKKwlCU1NfRU5UUlkgICAgKnBCc3M7CisJQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKwlIRUFERVJfODAyXzExIEhkcjgwMjExOworCU5ESVNfU1RBVFVTICAgTlN0YXR1czsKKwlVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVBVQ0hBUiAgICAgICAgcFN1cFJhdGUgPSBOVUxMOworCVVDSEFSICAgICAgICAgU3VwUmF0ZUxlbjsKKwlQVUNIQVIgICAgICAgIHBFeHRSYXRlID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgIEV4dFJhdGVMZW47CisJVUNIQVIgICAgICAgICBBU3VwUmF0ZVtdID0gezB4OEMsIDB4MTIsIDB4OTgsIDB4MjQsIDB4YjAsIDB4NDgsIDB4NjAsIDB4NkN9OworCVVDSEFSICAgICAgICAgQVN1cFJhdGVMZW4gPSBzaXplb2YoQVN1cFJhdGUpL3NpemVvZihVQ0hBUik7CisJTUxNRV9KT0lOX1JFUV9TVFJVQ1QgKnBJbmZvID0gKE1MTUVfSk9JTl9SRVFfU1RSVUNUICopKEVsZW0tPk1zZyk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gTWxtZUpvaW5SZXFBY3Rpb24oQlNTICMlbGQpXG4iLCBwSW5mby0+QnNzSWR4KSk7CisKKworCS8vIHJlc2V0IGFsbCB0aGUgdGltZXJzCisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJcEJzcyA9ICZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtwSW5mby0+QnNzSWR4XTsKKworCS8vIHJlY29yZCB0aGUgZGVzaXJlZCBTU0lEICYgQlNTSUQgd2UncmUgd2FpdGluZyBmb3IKKwlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgcEJzcy0+QnNzaWQpOworCisJLy8gSWYgQVAncyBTU0lEIGlzIG5vdCBoaWRkZW4sIGl0IGlzIE9LIGZvciB1cGRhdGluZyBzc2lkIHRvIE1sbWVBdXggYWdhaW4uCisJaWYgKHBCc3MtPkhpZGRlbiA9PSAwKQorCXsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBCc3MtPlNzaWQsIHBCc3MtPlNzaWRMZW4pOworCQlwQWQtPk1sbWVBdXguU3NpZExlbiA9IHBCc3MtPlNzaWRMZW47CisJfQorCisJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBwQnNzLT5Cc3NUeXBlOworCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gcEJzcy0+Q2hhbm5lbDsKKwlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPSBwQnNzLT5DZW50cmFsQ2hhbm5lbDsKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkvLyBDb3VudHJ5IElFIG9mIHRoZSBBUCB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgd2lsbCBiZSB1c2VkLgorCWlmICgocEFkLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgIT0gUnQ4MDJfMTFfRF9Ob25lKSAmJgorCQkocEJzcy0+Ykhhc0NvdW50cnlJRSA9PSBUUlVFKSkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZVswXSwgJnBCc3MtPkNvdW50cnlTdHJpbmdbMF0sIDIpOworCQlpZiAocEJzcy0+Q291bnRyeVN0cmluZ1syXSA9PSAnSScpCisJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBJRE9SOworCQllbHNlIGlmIChwQnNzLT5Db3VudHJ5U3RyaW5nWzJdID09ICdPJykKKwkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IE9ET1I7CisJCWVsc2UKKwkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IEJPVEg7CisJCUJ1aWxkQ2hhbm5lbExpc3RFeChwQWQpOworCX0KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKwkvLyBMZXQgQkJQIHJlZ2lzdGVyIGF0IDIwTUh6IHRvIGRvIHNjYW4KKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJQkJQVmFsdWUgJj0gKH4weDE4KTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEJCUCBSNCB0byAyME1Iei5sXG4iKSk7CisKKwkvLyBzd2l0Y2ggY2hhbm5lbCBhbmQgd2FpdGluZyBmb3IgYmVhY29uIHRpbWVyCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCwgRkFMU0UpOworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKKwlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgSk9JTl9USU1FT1VUKTsKKworICAgIGRvCisJeworCQlpZiAoKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJgorICAgICAgICAgICAgKHBBZC0+TWxtZUF1eC5DaGFubmVsID4gMTQpICYmCisgICAgICAgICAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCkpCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLyBSb2dlciBzeW5jIENhcnJpZXIKKyAgICAgICAgICAgICB8fCAocEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPT0gVFJVRSkKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisgICAgICAgICAgICApCisJCXsKKwkJCS8vCisJCQkvLyBXZSBjYW4ndCBzZW5kIGFueSBQcm9iZSByZXF1ZXN0IGZyYW1lIHRvIG1lZXQgODAyLjExaC4KKwkJCS8vCisJCQlpZiAocEJzcy0+SGlkZGVuID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQkvLworCQkvLyBzZW5kIHByb2JlIHJlcXVlc3QKKwkJLy8KKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsKKwkJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCXBTdXBSYXRlID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZTsKKwkJCQlTdXBSYXRlTGVuID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbjsKKwkJCQlwRXh0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGU7CisJCQkJRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8KKwkJCQkvLyBPdmVyd3JpdGUgU3VwcG9ydCBSYXRlLCBDQ0sgcmF0ZSBhcmUgbm90IGFsbG93ZWQKKwkJCQkvLworCQkJCXBTdXBSYXRlID0gQVN1cFJhdGU7CisJCQkJU3VwUmF0ZUxlbiA9IEFTdXBSYXRlTGVuOworCQkJCUV4dFJhdGVMZW4gPSAwOworCQkJfQorCisJCQlpZiAocEFkLT5NbG1lQXV4LkJzc1R5cGUgPT0gQlNTX0lORlJBKQorCQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsIFNVQlRZUEVfUFJPQkVfUkVRLCAwLCBwQWQtPk1sbWVBdXguQnNzaWQsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7CisJCQllbHNlCisJCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZIZHI4MDIxMSwgU1VCVFlQRV9QUk9CRV9SRVEsIDAsIEJST0FEQ0FTVF9BRERSLCBCUk9BRENBU1RfQUREUik7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAmSGRyODAyMTEsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguU3NpZExlbiwKKwkJCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLAkgICAgcEFkLT5NbG1lQXV4LlNzaWQsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTdXBSYXRlSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTdXBSYXRlTGVuLAorCQkJCQkJCSAgU3VwUmF0ZUxlbiwgICAgICAgICAgICAgICBwU3VwUmF0ZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQkJaWYgKEV4dFJhdGVMZW4pCisJCQl7CisJCQkJVUxPTkcgVG1wOworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUxlbiwKKwkJCQkJCQkJICBFeHRSYXRlTGVuLCAgICAgICAgICAgICAgICAgICAgICAgcEV4dFJhdGUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcDsKKwkJCX0KKworCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCX0KKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gU3dpdGNoIHRvIGNoICVkLCBXYWl0IEJFQUNPTiBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQlwQnNzLT5DaGFubmVsLCBwQnNzLT5Cc3NpZFswXSwgcEJzcy0+QnNzaWRbMV0sIHBCc3MtPkJzc2lkWzJdLCBwQnNzLT5Cc3NpZFszXSwgcEJzcy0+QnNzaWRbNF0sIHBCc3MtPkJzc2lkWzVdKSk7CisKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gSk9JTl9XQUlUX0JFQUNPTjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNTE1FIFNUQVJUIFJlcXVlc3Qgc3RhdGUgbWFjaGluZSBwcm9jZWR1cmUsIHN0YXJ0aW5nIGFuIElCU1MKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVTdGFydFJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW47CisJQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKworCS8vIE5ldyBmb3IgV1BBIHNlY3VyaXR5IHN1aXRlcworCVVDSEFSCQkJCQkJVmFySUVbTUFYX1ZJRV9MRU5dOyAJLy8gVG90YWwgVklFIGxlbmd0aCA9IE1BWF9WSUVfTEVOIC0gLTUKKwlORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMJKnBWSUUgPSBOVUxMOworCUxBUkdFX0lOVEVHRVIJCQkJVGltZVN0YW1wOworCUJPT0xFQU4gUHJpdmFjeTsKKwlVU0hPUlQgU3RhdHVzOworCisJLy8gSW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUKKwlwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOworCXBWSUUtPkxlbmd0aCA9IDA7CisJVGltZVN0YW1wLnUuTG93UGFydCAgPSAwOworCVRpbWVTdGFtcC51LkhpZ2hQYXJ0ID0gMDsKKworCWlmIChNbG1lU3RhcnRSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgU3NpZCwgJlNzaWRMZW4pKQorCXsKKwkJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCQkvLworCQkvLyBTdGFydCBhIG5ldyBJQlNTLiBBbGwgSUJTUyBwYXJhbWV0ZXJzIGFyZSBkZWNpZGVkIG5vdy4uLi4KKwkJLy8KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVN0YXJ0UmVxQWN0aW9uIC0gU3RhcnQgYSBuZXcgSUJTUy4gQWxsIElCU1MgcGFyYW1ldGVycyBhcmUgZGVjaWRlZCBub3cuLi4uIFxuIikpOworCQlwQWQtPk1sbWVBdXguQnNzVHlwZSAgICAgICAgICAgPSBCU1NfQURIT0M7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKKwkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gICAgICAgICAgID0gU3NpZExlbjsKKworCQkvLyBnZW5lcmF0ZSBhIHJhZG9tIG51bWJlciBhcyBCU1NJRAorCQlNYWNBZGRyUmFuZG9tQnNzaWQocEFkLCBwQWQtPk1sbWVBdXguQnNzaWQpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU3RhcnRSZXFBY3Rpb24gLSBnZW5lcmF0ZSBhIHJhZG9tIG51bWJlciBhcyBCU1NJRCBcbiIpKTsKKworCQlQcml2YWN5ID0gKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB8fAorCQkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAorCQkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKTsKKwkJcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvICAgID0gQ0FQX0dFTkVSQVRFKDAsMSxQcml2YWN5LCAocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQpLCAxLCAwKTsKKwkJcEFkLT5NbG1lQXV4LkJlYWNvblBlcmlvZCAgICAgID0gcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kOworCQlwQWQtPk1sbWVBdXguQXRpbVdpbiAgICAgICAgICAgPSBwQWQtPlN0YUNmZy5BdGltV2luOworCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCAgICAgICAgICAgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCisJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCAgICA9IHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsOworCisJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuPSBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3VwUmF0ZSwgcEFkLT5Db21tb25DZmcuU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4pOworCQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LkV4dFJhdGUsICZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbik7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCXsKKwkJCVJUTVBVcGRhdGVIVElFKCZwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHksICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvLk1DU1NldFswXSwgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksICZwQWQtPk1sbWVBdXguQWRkSHRJbmZvKTsKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSk7CisJCQkvLyBOb3QgdHVybiBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5iSHRFbmFibGUgPSBUUlVFIGhlcmUuCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC1wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5iSHRFbmFibGUgPSBUUlVFXG4iKSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID0gMDsKKwkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gRkFMU0U7CisJCX0KKwkJLy8gdGVtcG9yYXJpbHkgbm90IHN1cHBvcnQgUU9TIGluIElCU1MKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7CisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBNbG1lU3RhcnRSZXFBY3Rpb24oY2g9ICVkLHN1cCByYXRlcz0gJWQsIGV4dCByYXRlcz0lZClcbiIsCisJCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCwgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuKSk7CisKKwkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9TVUNDRVNTOworCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU1RBUlRfQ09ORiwgMiwgJlN0YXR1cyk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlNZTkMgLSBNbG1lU3RhcnRSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbC5cbiIpKTsKKwkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NUQVJUX0NPTkYsIDIsICZTdGF0dXMpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlwZWVyIHNlbmRzIGJlYWNvbiBiYWNrIHdoZW4gc2Nhbm5pbmcKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJCZWFjb25BdFNjYW5BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIEJzc1R5cGUsIENoYW5uZWwsIE5ld0NoYW5uZWwsCisJCQkJCVNzaWRMZW4sIER0aW1Db3VudCwgRHRpbVBlcmlvZCwgQmNhc3RGbGFnLCBNZXNzYWdlVG9NZTsKKwlDRl9QQVJNICAgICAgICAgQ2ZQYXJtOworCVVTSE9SVCAgICAgICAgICBCZWFjb25QZXJpb2QsIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvOworCVBGUkFNRV84MDJfMTEgICBwRnJhbWU7CisJTEFSR0VfSU5URUdFUiAgIFRpbWVTdGFtcDsKKwlVQ0hBUiAgICAgICAgICAgRXJwOworCVVDSEFSICAgICAgICAgCVN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUgkJICAJU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKKwlVU0hPUlQgCQkJTGVuVklFOworCVVDSEFSCQkJQ2tpcEZsYWc7CisJVUNIQVIJCQlBaXJvbmV0Q2VsbFBvd2VyTGltaXQ7CisJRURDQV9QQVJNICAgICAgIEVkY2FQYXJtOworCVFCU1NfTE9BRF9QQVJNICBRYnNzTG9hZDsKKwlRT1NfQ0FQQUJJTElUWV9QQVJNIFFvc0NhcGFiaWxpdHk7CisJVUxPTkcJCQkJCQlSYWxpbmtJZTsKKwlVQ0hBUgkJCQkJCVZhcklFW01BWF9WSUVfTEVOXTsJCS8vIFRvdGFsIFZJRSBsZW5ndGggPSBNQVhfVklFX0xFTiAtIC01CisJTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCSpwVklFID0gTlVMTDsKKwlIVF9DQVBBQklMSVRZX0lFCQlIdENhcGFiaWxpdHk7CisJQUREX0hUX0lORk9fSUUJCUFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4gPSAwLCBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisKKwkvLyBOZGlzRmlsbE1lbW9yeShTc2lkLCBNQVhfTEVOX09GX1NTSUQsIDB4MDApOworCXBGcmFtZSA9IChQRlJBTUVfODAyXzExKSBFbGVtLT5Nc2c7CisJLy8gSW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUKKwlwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOworCXBWSUUtPkxlbmd0aCA9IDA7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgUlRNUFplcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEh0Q2FwYWJpbGl0eSkpOworCVJUTVBaZXJvTWVtb3J5KCZBZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCisJCQkJCQkJCUVsZW0tPk1zZywKKwkJCQkJCQkJRWxlbS0+TXNnTGVuLAorCQkJCQkJCQlFbGVtLT5DaGFubmVsLAorCQkJCQkJCQlBZGRyMiwKKwkJCQkJCQkJQnNzaWQsCisJCQkJCQkJCVNzaWQsCisJCQkJCQkJCSZTc2lkTGVuLAorCQkJCQkJCQkmQnNzVHlwZSwKKwkJCQkJCQkJJkJlYWNvblBlcmlvZCwKKwkJCQkJCQkJJkNoYW5uZWwsCisJCQkJCQkJCSZOZXdDaGFubmVsLAorCQkJCQkJCQkmVGltZVN0YW1wLAorCQkJCQkJCQkmQ2ZQYXJtLAorCQkJCQkJCQkmQXRpbVdpbiwKKwkJCQkJCQkJJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJCQkmRXJwLAorCQkJCQkJCQkmRHRpbUNvdW50LAorCQkJCQkJCQkmRHRpbVBlcmlvZCwKKwkJCQkJCQkJJkJjYXN0RmxhZywKKwkJCQkJCQkJJk1lc3NhZ2VUb01lLAorCQkJCQkJCQlTdXBSYXRlLAorCQkJCQkJCQkmU3VwUmF0ZUxlbiwKKwkJCQkJCQkJRXh0UmF0ZSwKKwkJCQkJCQkJJkV4dFJhdGVMZW4sCisJCQkJCQkJCSZDa2lwRmxhZywKKwkJCQkJCQkJJkFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKwkJCQkJCQkJJkVkY2FQYXJtLAorCQkJCQkJCQkmUWJzc0xvYWQsCisJCQkJCQkJCSZRb3NDYXBhYmlsaXR5LAorCQkJCQkJCQkmUmFsaW5rSWUsCisJCQkJCQkJCSZIdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZQcmVOSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkmQWRkSHRJbmZvTGVuLAorCQkJCQkJCQkmQWRkSHRJbmZvLAorCQkJCQkJCQkmTmV3RXh0Q2hhbm5lbE9mZnNldCwKKwkJCQkJCQkJJkxlblZJRSwKKwkJCQkJCQkJcFZJRSkpCisJeworCQlVTE9ORyBJZHg7CisJCUNIQVIgUnNzaSA9IDA7CisKKwkJSWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgQnNzaWQsIENoYW5uZWwpOworCQlpZiAoSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCQlSc3NpID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uUnNzaTsKKworCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmICgoSHRDYXBhYmlsaXR5TGVuID4gMCkgfHwgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKSkKKwkJCUh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlpZiAoKHBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgIT0gTVNSTl9UWVBFX1VOVVNFRCkgJiYgKENoYW5uZWwgPT0gcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwpKQorCQl7CisJCQlJZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYiwgQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKKwkJCQkJCSAmQ2ZQYXJtLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbixFeHRSYXRlLCBFeHRSYXRlTGVuLCAmSHRDYXBhYmlsaXR5LAorCQkJCQkJICZBZGRIdEluZm8sIEh0Q2FwYWJpbGl0eUxlbiwgQWRkSHRJbmZvTGVuLCBOZXdFeHRDaGFubmVsT2Zmc2V0LCBDaGFubmVsLCBSc3NpLCBUaW1lU3RhbXAsIENraXBGbGFnLAorCQkJCQkJICZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksICZRYnNzTG9hZCwgTGVuVklFLCBwVklFKTsKKwkJCWlmIChJZHggIT0gQlNTX05PVF9GT1VORCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSWR4XS5QVFNGLCAmRWxlbS0+TXNnWzI0XSwgNCk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYi5Cc3NFbnRyeVtJZHhdLlRUU0ZbMF0sICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc0VudHJ5W0lkeF0uVFRTRls0XSwgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCQkJCWlmIChwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlID09IE1TUk5fVFlQRV9CRUFDT05fUkVRKQorCQkJCQlBaXJvbmV0QWRkQmVhY29uUmVwb3J0KHBBZCwgSWR4LCBFbGVtKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCUlkeCA9IEJzc1RhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TY2FuVGFiLCBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLAorCQkJCQkJICAmQ2ZQYXJtLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwgICZIdENhcGFiaWxpdHksCisJCQkJCQkgJkFkZEh0SW5mbywgSHRDYXBhYmlsaXR5TGVuLCBBZGRIdEluZm9MZW4sIE5ld0V4dENoYW5uZWxPZmZzZXQsIENoYW5uZWwsIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsCisJCQkJCQkgJkVkY2FQYXJtLCAmUW9zQ2FwYWJpbGl0eSwgJlFic3NMb2FkLCBMZW5WSUUsIHBWSUUpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKKwkJCWlmIChwQWQtPkNoYW5uZWxMaXN0W3BBZC0+Q29tbW9uQ2ZnLkNoYW5uZWxMaXN0SWR4XS5iRWZmZWN0ZWRDaGFubmVsID09IFRSVUUpCisJCQl7CisJCQkJVUNIQVIJCVJlZ0NsYXNzOworCQkJCVBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eTIocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJlJlZ0NsYXNzKTsKKwkJCQlUcmlFdmVudFRhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLCBCc3NpZCwgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCBSZWdDbGFzcywgQ2hhbm5lbCk7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJaWYgKElkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlBUU0YsICZFbGVtLT5Nc2dbMjRdLCA0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVFRTRlswXSwgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5UVFNGWzRdLCAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisJCQl9CisJCX0KKwl9CisJLy8gc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZWQKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlXaGVuIHdhaXRpbmcgam9pbmluZyB0aGUgKEkpQlNTLCBiZWFjb24gcmVjZWl2ZWQgZnJvbSBleHRlcm5hbAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckJlYWNvbkF0Sm9pbkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdLCBTc2lkTGVuLCBCc3NUeXBlLCBDaGFubmVsLCBNZXNzYWdlVG9NZSwKKwkJCQkgIER0aW1Db3VudCwgRHRpbVBlcmlvZCwgQmNhc3RGbGFnLCBOZXdDaGFubmVsOworCUxBUkdFX0lOVEVHRVIgVGltZVN0YW1wOworCVVTSE9SVCAgICAgICAgQmVhY29uUGVyaW9kLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbzsKKwlDRl9QQVJNICAgICAgIENmOworCUJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIgICAgICAgICBFcnA7CisJVUNIQVIgICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCSAgU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKKwlVQ0hBUiAgICAgICAgIENraXBGbGFnOworCVVTSE9SVCAJCSAgTGVuVklFOworCVVDSEFSCQkgIEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsKKwlFRENBX1BBUk0gICAgICAgRWRjYVBhcm07CisJUUJTU19MT0FEX1BBUk0gIFFic3NMb2FkOworCVFPU19DQVBBQklMSVRZX1BBUk0gUW9zQ2FwYWJpbGl0eTsKKwlVU0hPUlQgICAgICAgIFN0YXR1czsKKwlVQ0hBUgkJCQkJCVZhcklFW01BWF9WSUVfTEVOXTsJCS8vIFRvdGFsIFZJRSBsZW5ndGggPSBNQVhfVklFX0xFTiAtIC01CisJTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCSpwVklFID0gTlVMTDsKKwlVTE9ORyAgICAgICAgICAgUmFsaW5rSWU7CisJVUxPTkcgICAgICAgICBJZHg7CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIdEluZm87CS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCVVDSEFSCQkJCUh0Q2FwYWJpbGl0eUxlbiA9IDAsIFByZU5IdENhcGFiaWxpdHlMZW4gPSAwOworCVVDSEFSCQkJQWRkSHRJbmZvTGVuOworCVVDSEFSCQkJTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJVUNIQVIJCQlDZW50cmFsQ2hhbm5lbDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlCisJcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzKSBWYXJJRTsKKwlwVklFLT5MZW5ndGggPSAwOworICAgIFJUTVBaZXJvTWVtb3J5KCZIdENhcGFiaWxpdHksIHNpemVvZihIdENhcGFiaWxpdHkpKTsKKwlSVE1QWmVyb01lbW9yeSgmQWRkSHRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKworCisJaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCisJCQkJCQkJCUVsZW0tPk1zZywKKwkJCQkJCQkJRWxlbS0+TXNnTGVuLAorCQkJCQkJCQlFbGVtLT5DaGFubmVsLAorCQkJCQkJCQlBZGRyMiwKKwkJCQkJCQkJQnNzaWQsCisJCQkJCQkJCVNzaWQsCisJCQkJCQkJCSZTc2lkTGVuLAorCQkJCQkJCQkmQnNzVHlwZSwKKwkJCQkJCQkJJkJlYWNvblBlcmlvZCwKKwkJCQkJCQkJJkNoYW5uZWwsCisJCQkJCQkJCSZOZXdDaGFubmVsLAorCQkJCQkJCQkmVGltZVN0YW1wLAorCQkJCQkJCQkmQ2YsCisJCQkJCQkJCSZBdGltV2luLAorCQkJCQkJCQkmQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkJCSZFcnAsCisJCQkJCQkJCSZEdGltQ291bnQsCisJCQkJCQkJCSZEdGltUGVyaW9kLAorCQkJCQkJCQkmQmNhc3RGbGFnLAorCQkJCQkJCQkmTWVzc2FnZVRvTWUsCisJCQkJCQkJCVN1cFJhdGUsCisJCQkJCQkJCSZTdXBSYXRlTGVuLAorCQkJCQkJCQlFeHRSYXRlLAorCQkJCQkJCQkmRXh0UmF0ZUxlbiwKKwkJCQkJCQkJJkNraXBGbGFnLAorCQkJCQkJCQkmQWlyb25ldENlbGxQb3dlckxpbWl0LAorCQkJCQkJCQkmRWRjYVBhcm0sCisJCQkJCQkJCSZRYnNzTG9hZCwKKwkJCQkJCQkJJlFvc0NhcGFiaWxpdHksCisJCQkJCQkJCSZSYWxpbmtJZSwKKwkJCQkJCQkJJkh0Q2FwYWJpbGl0eUxlbiwKKwkJCQkJCQkJJlByZU5IdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZIdENhcGFiaWxpdHksCisJCQkJCQkJCSZBZGRIdEluZm9MZW4sCisJCQkJCQkJCSZBZGRIdEluZm8sCisJCQkJCQkJCSZOZXdFeHRDaGFubmVsT2Zmc2V0LAorCQkJCQkJCQkmTGVuVklFLAorCQkJCQkJCQlwVklFKSkKKwl7CisJCS8vIERpc3F1YWxpZnkgMTFiIG9ubHkgYWRob2Mgd2hlbiB3ZSBhcmUgaW4gMTFnIG9ubHkgYWRob2MgbW9kZQorCQlpZiAoKEJzc1R5cGUgPT0gQlNTX0FESE9DKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSAmJiAoKFN1cFJhdGVMZW4rRXh0UmF0ZUxlbik8IDEyKSkKKwkJCXJldHVybjsKKworCQkvLyBCRUFDT04gZnJvbSBkZXNpcmVkIEJTUy9JQlNTIGZvdW5kLiBXZSBzaG91bGQgYmUgYWJsZSB0byBkZWNpZGUgbW9zdAorCQkvLyBCU1MgcGFyYW1ldGVycyBoZXJlLgorCQkvLyBRLiBCdXQgd2hhdCBoYXBwZW4gaWYgdGhpcyBKT0lOIGRvZXNuJ3QgY29uY2x1ZGUgYSBzdWNjZXNzZnVsIEFTU09DSUFURUlPTj8KKwkJLy8gICAgRG8gd2UgbmVlZCB0byByZWNlb3ZlciBiYWNrIGFsbCBwYXJhbWV0ZXJzIGJlbG9uZ2luZyB0byBwcmV2aW91cyBCU1M/CisJCS8vIEEuIFNob3VsZCBiZSBub3QuIFRoZXJlJ3Mgbm8gYmFjay1kb29yIHJlY292ZXIgdG8gcHJldmlvdXMgQVAuIEl0IHN0aWxsIG5lZWQKKwkJLy8gICAgYSBuZXcgSk9JTi1BVVRILUFTU09DIHNlcXVlbmNlLgorCQlpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBCc3NpZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSByZWNlaXZlIGRlc2lyZWQgQkVBQ09OIGF0IEpvaW5XYWl0QmVhY29uLi4uIENoYW5uZWwgPSAlZFxuIiwgQ2hhbm5lbCkpOworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCS8vIFVwZGF0ZSBSU1NJIHRvIHByZXZlbnQgTm8gc2lnbmFsIGRpc3BsYXkgd2hlbiBjYXJkcyBmaXJzdCBpbml0aWFsaXplZAorCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAJPSBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCk7CisJCQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMQk9IENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKTsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyCT0gQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMAk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMFg4CT0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCA8PCAzOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMQk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMVg4CT0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSA8PCAzOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMgk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMlg4CT0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMiA8PCAzOworCisJCQkvLworCQkJLy8gV2UgbmVlZCB0byBjaGVjayBpZiBTU0lEIG9ubHkgc2V0IHRvIGFueSwgdGhlbiB3ZSBjYW4gcmVjb3JkIHRoZSBjdXJyZW50IFNTSUQuCisJCQkvLyBPdGhlcndpc2Ugd2lsbCBjYXVzZSBoaWRkZW4gU1NJRCBhc3NvY2lhdGlvbiBmYWlsZWQuCisJCQkvLworCQkJaWYgKHBBZC0+TWxtZUF1eC5Tc2lkTGVuID09IDApCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIFNzaWQsIFNzaWRMZW4pOworCQkJCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gU3NpZExlbjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlJZHggPSBCc3NTc2lkVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgQnNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbiwgQ2hhbm5lbCk7CisKKwkJCQlpZiAoSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBNdWx0aXBsZSBTU0lEIGNhc2UsIHVzZWQgY29ycmVjdCBDYXBhYmlsaXR5SW5mbworCQkJCQkvLworCQkJCQlDYXBhYmlsaXR5SW5mbyA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLkNhcGFiaWxpdHlJbmZvOworCQkJCX0KKwkJCX0KKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Cc3NpZCwgQnNzaWQsIE1BQ19BRERSX0xFTik7CisJCQlwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbyAmIFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87CisJCQlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IEJzc1R5cGU7CisJCQlwQWQtPk1sbWVBdXguQmVhY29uUGVyaW9kID0gQmVhY29uUGVyaW9kOworCQkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBDaGFubmVsOworCQkJcEFkLT5NbG1lQXV4LkF0aW1XaW4gPSBBdGltV2luOworCQkJcEFkLT5NbG1lQXV4LkNmcFBlcmlvZCA9IENmLkNmcFBlcmlvZDsKKwkJCXBBZC0+TWxtZUF1eC5DZnBNYXhEdXJhdGlvbiA9IENmLkNmcE1heER1cmF0aW9uOworCQkJcEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgPSBSYWxpbmtJZTsKKworCQkJLy8gQ29weSBBUCdzIHN1cHBvcnRlZCByYXRlIHRvIE1sbWVBdXggZm9yIGNyZWF0aW5nIGFzc29pY2F0aW9uIHJlcXVlc3QKKwkJCS8vIEFsc28gZmlsdGVyIG91dCBub3Qgc3VwcG9ydGVkIHJhdGUKKwkJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKKwkJCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LlN1cFJhdGUsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7CisJCQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47CisJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguRXh0UmF0ZSwgRXh0UmF0ZSwgRXh0UmF0ZUxlbik7CisJCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOworCisgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldCwgMTYpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJcEFkLT5NbG1lQXV4Lk5ld0V4dENoYW5uZWxPZmZzZXQgPSBOZXdFeHRDaGFubmVsT2Zmc2V0OworCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IEh0Q2FwYWJpbGl0eUxlbjsKKworCQkJLy8gZmlsdGVyIG91dCB1bi1zdXBwb3J0ZWQgaHQgcmF0ZXMKKwkJCWlmICgoKEh0Q2FwYWJpbGl0eUxlbiA+IDApIHx8IChQcmVOSHRDYXBhYmlsaXR5TGVuID4gMCkpICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJeworCQkJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisgICAJCQkJUlRNUE1vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sICZBZGRIdEluZm8sIFNJWkVfQUREX0hUX0lORk9fSUUpOworCisJCQkJLy8gU3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1DU1NldCBzdG9yZXMgUGVlciBBUCdzIDExbiBSeCBjYXBhYmlsaXR5CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXQsIEh0Q2FwYWJpbGl0eS5NQ1NTZXQsIDE2KTsKKwkJCQlwQWQtPk1sbWVBdXguTmV3RXh0Q2hhbm5lbE9mZnNldCA9IE5ld0V4dENoYW5uZWxPZmZzZXQ7CisJCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gVFJVRTsKKwkJCQlpZiAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA+IDApCisJCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYlByZU5IdCA9IFRSVUU7CisJCQkJUlRNUENoZWNrSHQocEFkLCBCU1NJRF9XQ0lELCAmSHRDYXBhYmlsaXR5LCAmQWRkSHRJbmZvKTsKKwkJCQkvLyBDb3B5IEFQIFBhcmFtZXRlciB0byBTdGFBY3RpdmUuICBUaGlzIGlzIGFsc28gaW4gTGlua1VwLgorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BdEpvaW5BY3Rpb24hIChNcGR1RGVuc2l0eT0lZCwgTWF4UkFtcGR1RmFjdG9yPSVkLCBCVz0lZClcbiIsCisJCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1wZHVEZW5zaXR5LCBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5NYXhSQW1wZHVGYWN0b3IsIEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSk7CisKKwkJCQlpZiAoQWRkSHRJbmZvTGVuID4gMCkKKwkJCQl7CisJCQkJCUNlbnRyYWxDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuOworCQkgCQkJLy8gQ2hlY2sgYWdhaW4gdGhlIEJhbmR3aWR0aCBjYXBhYmlsaXR5IG9mIHRoaXMgQVAuCisJCSAJCQlpZiAoKEFkZEh0SW5mby5Db250cm9sQ2hhbiA+IDIpJiYgKEFkZEh0SW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQkVMT1cpICYmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCSAJCQl7CisJCSAJCQkJQ2VudHJhbENoYW5uZWwgPSBBZGRIdEluZm8uQ29udHJvbENoYW4gLSAyOworCQkgCQkJfQorCQkgCQkJZWxzZSBpZiAoKEFkZEh0SW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQUJPVkUpICYmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCSAJCQl7CisJCSAJCQkJQ2VudHJhbENoYW5uZWwgPSBBZGRIdEluZm8uQ29udHJvbENoYW4gKyAyOworCQkgCQkJfQorCisJCQkJCS8vIENoZWNrIEVycm9yIC4KKwkJCQkJaWYgKHBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCAhPSBDZW50cmFsQ2hhbm5lbCkKKwkJIAkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJQZWVyQmVhY29uQXRKb2luQWN0aW9uIEhUPT09PkJlYWNvbiBDZW50cmFsIENoYW5uZWwgPSAlZCwgQ29udHJvbCBDaGFubmVsID0gJWQuIE1sbWVhdXggQ2VudHJhbENoYW5uZWwgPSAlZFxuIiwgQ2VudHJhbENoYW5uZWwsIEFkZEh0SW5mby5Db250cm9sQ2hhbiwgcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsKSk7CisKKwkJIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BdEpvaW5BY3Rpb24gSFQ9PT0+Q2VudHJhbCBDaGFubmVsID0gJWQsIENvbnRyb2wgQ2hhbm5lbCA9ICVkLCAgLlxuIiwgQ2VudHJhbENoYW5uZWwsIEFkZEh0SW5mby5Db250cm9sQ2hhbikpOworCisJCQkJfQorCisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7CisgICAJCQkJLy8gVG8gcHJldmVudCBlcnJvciwgbGV0IGxlZ2FjeSBBUCBtdXN0IGhhdmUgc2FtZSBDZW50cmFsQ2hhbm5lbCBhbmQgQ2hhbm5lbC4KKwkJCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJiAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSkKKwkJCQkJcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsID0gcEFkLT5NbG1lQXV4LkNoYW5uZWw7CisKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOworCQkJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisJCQkJUlRNUFplcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sIFNJWkVfQUREX0hUX0lORk9fSUUpOworCQkJfQorCisJCQlSVE1QVXBkYXRlTWxtZVJhdGUocEFkKTsKKworCQkJLy8gY29weSBRT1MgcmVsYXRlZCBpbmZvcm1hdGlvbgorCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQkpCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLCAmRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LkFQUWJzc0xvYWQsICZRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksICZRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksIHNpemVvZihRT1NfQ0FQQUJJTElUWV9QQVJNKSk7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBhZnRlciBKT0lOLCBTdXBSYXRlTGVuPSVkLCBFeHRSYXRlTGVuPSVkXG4iLAorCQkJCQkJCQkJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbikpOworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkvLyBVcGRhdGUgQ2tpcEZsYWcKKwkJCXBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gQ2tpcEZsYWc7CisKKwkJCS8vIEtlZXAgVGltZVN0YW1wIGZvciBSZS1Bc3NvY2lhdGlvbiB1c2VkLgorCQkJaWYgKExFQVBfQ0NLTV9PTihwQWQpICYmIChwQWQtPlN0YUNmZy5DQ0tNTGlua1VwRmxhZyA9PSBUUlVFKSkKKwkJCQlwQWQtPlN0YUNmZy5DQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wID0gVGltZVN0YW1wOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCisJCQlpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0ICE9IDB4RkYpCisJCQl7CisJCQkJLy9XZSBuZWVkIHRvIGNoYW5nZSBvdXIgVHhQb3dlciBmb3IgQ0NYIDIuMCBBUCBDb250cm9sIG9mIENsaWVudCBUcmFuc21pdCBQb3dlcgorCQkJCUNoYW5nZVRvQ2VsbFBvd2VyTGltaXQocEFkLCBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpOworCQkJfQorCQkJZWxzZSAgLy9Vc2VkIHRoZSBkZWZhdWx0IFRYIFBvd2VyIFBlcmNlbnRhZ2UuCisJCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdDsKKworCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9KT0lOX0NPTkYsIDIsICZTdGF0dXMpOworCQl9CisJCS8vIG5vdCB0byBtZSBCRUFDT04sIGlnbm9yZWQKKwl9CisJLy8gc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZSB0aGlzIGZyYW1lCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcmVjZWl2ZSBCRUFDT04gZnJvbSBwZWVyCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckJlYWNvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOworCUNIQVIgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworCUNGX1BBUk0gICAgICAgQ2ZQYXJtOworCVVDSEFSICAgICAgICAgU3NpZExlbiwgTWVzc2FnZVRvTWU9MCwgQnNzVHlwZSwgQ2hhbm5lbCwgTmV3Q2hhbm5lbCwgaW5kZXg9MDsKKwlVQ0hBUiAgICAgICAgIER0aW1Db3VudD0wLCBEdGltUGVyaW9kPTAsIEJjYXN0RmxhZz0wOworCVVTSE9SVCAgICAgICAgQ2FwYWJpbGl0eUluZm8sIEF0aW1XaW4sIEJlYWNvblBlcmlvZDsKKwlMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcDsKKwlVU0hPUlQgICAgICAgIFRidHROdW1Ub05leHRXYWtlVXA7CisJVUNIQVIgICAgICAgICBFcnA7CisJVUNIQVIgICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCSAgU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKKwlVQ0hBUgkJICBDa2lwRmxhZzsKKwlVU0hPUlQgICAgICAgIExlblZJRTsKKwlVQ0hBUgkJICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQ7CisJRURDQV9QQVJNICAgICAgIEVkY2FQYXJtOworCVFCU1NfTE9BRF9QQVJNICBRYnNzTG9hZDsKKwlRT1NfQ0FQQUJJTElUWV9QQVJNIFFvc0NhcGFiaWxpdHk7CisJVUxPTkcgICAgICAgICAgIFJhbGlua0llOworCS8vIE5ldyBmb3IgV1BBIHNlY3VyaXR5IHN1aXRlcworCVVDSEFSCQkJCQkJVmFySUVbTUFYX1ZJRV9MRU5dOwkJLy8gVG90YWwgVklFIGxlbmd0aCA9IE1BWF9WSUVfTEVOIC0gLTUKKwlORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMJKnBWSUUgPSBOVUxMOworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbiwgUHJlTkh0Q2FwYWJpbGl0eUxlbjsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisKKyNpZmRlZiBSQUxJTktfQVRFCisgICAgaWYgKEFURV9PTihwQWQpKQorICAgIHsKKwkJcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAoIShJTkZSQV9PTihwQWQpIHx8IEFESE9DX09OKHBBZCkKKwkJKSkKKwkJcmV0dXJuOworCisJLy8gSW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUKKwlwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOworCXBWSUUtPkxlbmd0aCA9IDA7CisgICAgUlRNUFplcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEh0Q2FwYWJpbGl0eSkpOworCVJUTVBaZXJvTWVtb3J5KCZBZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCisJaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCisJCQkJCQkJCUVsZW0tPk1zZywKKwkJCQkJCQkJRWxlbS0+TXNnTGVuLAorCQkJCQkJCQlFbGVtLT5DaGFubmVsLAorCQkJCQkJCQlBZGRyMiwKKwkJCQkJCQkJQnNzaWQsCisJCQkJCQkJCVNzaWQsCisJCQkJCQkJCSZTc2lkTGVuLAorCQkJCQkJCQkmQnNzVHlwZSwKKwkJCQkJCQkJJkJlYWNvblBlcmlvZCwKKwkJCQkJCQkJJkNoYW5uZWwsCisJCQkJCQkJCSZOZXdDaGFubmVsLAorCQkJCQkJCQkmVGltZVN0YW1wLAorCQkJCQkJCQkmQ2ZQYXJtLAorCQkJCQkJCQkmQXRpbVdpbiwKKwkJCQkJCQkJJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJCQkmRXJwLAorCQkJCQkJCQkmRHRpbUNvdW50LAorCQkJCQkJCQkmRHRpbVBlcmlvZCwKKwkJCQkJCQkJJkJjYXN0RmxhZywKKwkJCQkJCQkJJk1lc3NhZ2VUb01lLAorCQkJCQkJCQlTdXBSYXRlLAorCQkJCQkJCQkmU3VwUmF0ZUxlbiwKKwkJCQkJCQkJRXh0UmF0ZSwKKwkJCQkJCQkJJkV4dFJhdGVMZW4sCisJCQkJCQkJCSZDa2lwRmxhZywKKwkJCQkJCQkJJkFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKwkJCQkJCQkJJkVkY2FQYXJtLAorCQkJCQkJCQkmUWJzc0xvYWQsCisJCQkJCQkJCSZRb3NDYXBhYmlsaXR5LAorCQkJCQkJCQkmUmFsaW5rSWUsCisJCQkJCQkJCSZIdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZQcmVOSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkmQWRkSHRJbmZvTGVuLAorCQkJCQkJCQkmQWRkSHRJbmZvLAorCQkJCQkJCQkmTmV3RXh0Q2hhbm5lbE9mZnNldCwKKwkJCQkJCQkJJkxlblZJRSwKKwkJCQkJCQkJcFZJRSkpCisJeworCQlCT09MRUFOIGlzX215X2Jzc2lkLCBpc19teV9zc2lkOworCQlVTE9ORyAgIEJzc2lkeCwgTm93OworCQlCU1NfRU5UUlkgKnBCc3M7CisJCUNIQVIJCVJlYWxSc3NpID0gUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKKworCQlpc19teV9ic3NpZCA9IE1BQ19BRERSX0VRVUFMKEJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk/IFRSVUUgOiBGQUxTRTsKKwkJaXNfbXlfc3NpZCA9IFNTSURfRVFVQUwoU3NpZCwgU3NpZExlbiwgcEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZExlbik/IFRSVUU6RkFMU0U7CisKKworCQkvLyBpZ25vcmUgQkVBQ09OIG5vdCBmb3IgbXkgU1NJRAorCQlpZiAoKCEgaXNfbXlfc3NpZCkgJiYgKCEgaXNfbXlfYnNzaWQpKQorCQkJcmV0dXJuOworCisJCS8vIEl0IG1lYW5zIFNUQSB3YWl0cyBkaXNhc3NvYyBjb21wbGV0ZWx5IGZyb20gdGhpcyBBUCwgaWdub3JlcyB0aGlzIGJlYWNvbi4KKwkJaWYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9XQUlUX0RJU0FTU09DKQorCQkJcmV0dXJuOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCS8vIENvcHkgQ29udHJvbCBjaGFubmVsIGZvciB0aGlzIEJTU0lELgorCQlpZiAoQWRkSHRJbmZvTGVuICE9IDApCisJCQlDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuOworCisJCWlmICgoSHRDYXBhYmlsaXR5TGVuID4gMCkgfHwgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKSkKKwkJCUh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCS8vCisJCS8vIEhvdXNla2VlcGluZyAiU3NpZEJzc1RhYiIgdGFibGUgZm9yIGxhdGVyLW9uIFJPQU1pbmcgdXNhZ2UuCisJCS8vCisJCUJzc2lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIEJzc2lkLCBDaGFubmVsKTsKKwkJaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCQl7CisJCQkvLyBkaXNjb3ZlciBuZXcgQVAgb2YgdGhpcyBuZXR3b3JrLCBjcmVhdGUgQlNTIGVudHJ5CisJCQlCc3NpZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U2NhblRhYiwgQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKKwkJCQkJCSAmQ2ZQYXJtLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwKKwkJCQkJCSZIdENhcGFiaWxpdHksICZBZGRIdEluZm8sSHRDYXBhYmlsaXR5TGVuLEFkZEh0SW5mb0xlbixOZXdFeHRDaGFubmVsT2Zmc2V0LCBDaGFubmVsLAorCQkJCQkJUmVhbFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsICZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksCisJCQkJCQkmUWJzc0xvYWQsIExlblZJRSwgcFZJRSk7CisJCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpIC8vIHJldHVybiBpZiBCU1MgdGFibGUgZnVsbAorCQkJCXJldHVybjsKKworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uUFRTRiwgJkVsZW0tPk1zZ1syNF0sIDQpOworCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLlRUU0ZbMF0sICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5UVFNGWzRdLCAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisKKworCisJCX0KKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmIChOZXdDaGFubmVsICE9IDApICYmIChDaGFubmVsICE9IE5ld0NoYW5uZWwpKQorCQl7CisJCQkvLyBTd2l0Y2hpbmcgdG8gY2hhbm5lbCAxIGNhbiBwcmV2ZW50IGZyb20gcmVzY2FubmluZyB0aGUgY3VycmVudCBjaGFubmVsIGltbWVkaWF0ZWx5IChieSBhdXRvIHJlY29ubmVjdGlvbikuCisJCQkvLyBJbiBhZGRpdGlvbiwgY2xlYXIgdGhlIE1MTUUgcXVldWUgYW5kIHRoZSBzY2FuIHRhYmxlIHRvIGRpc2NhcmQgdGhlIFJYIHBhY2tldHMgYW5kIHByZXZpb3VzIHNjYW5uaW5nIHJlc3VsdHMuCisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIDEsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIDEpOworCQkgICAgTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQlNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVldWUpOworCQkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCQkgICAgUlRNUHVzZWNEZWxheSgxMDAwMDAwKTsJCS8vIHVzZSBkZWxheSB0byBwcmV2ZW50IFNUQSBkbyByZWFzc29jCisKKwkJCS8vIGNoYW5uZWwgc2FuaXR5IGNoZWNrCisJCQlmb3IgKGluZGV4ID0gMCA7IGluZGV4IDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpbmRleF0uQ2hhbm5lbCA9PSBOZXdDaGFubmVsKQorCQkJCXsKKwkJCQkJcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBOZXdDaGFubmVsOworCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb24gLSBTVEEgcmVjZWl2ZSBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgSUUgKE5ldyBDaGFubmVsID0lZClcbiIsIE5ld0NoYW5uZWwpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaW5kZXggPj0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwkJCXsKKwkJCQlEQkdQUklOVF9FUlIoKCJQZWVyQmVhY29uKGNhbiBub3QgZmluZCBOZXcgQ2hhbm5lbD0lZCBpbiBDaGFubmVsTGlzdFslZF1cbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+Q2hhbm5lbExpc3ROdW0pKTsKKwkJCX0KKwkJfQorCisJCS8vIGlmIHRoZSBzc2lkIG1hdGNoZWQgJiBic3NpZCB1bm1hdGNoZWQsIHdlIHNob3VsZCBzZWxlY3QgdGhlIGJzc2lkIHdpdGggbGFyZ2UgdmFsdWUuCisJCS8vIFRoaXMgbWlnaHQgaGFwcGVuZWQgd2hlbiB0d28gU1RBIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUKKwkJaWYgKCghIGlzX215X2Jzc2lkKSAmJiBBREhPQ19PTihwQWQpKQorCQl7CisJCQlJTlQJaTsKKworCQkJLy8gQWRkIHRoZSBzYWZlZ3VhcmQgYWdhaW5zdCB0aGUgbWlzbWF0Y2ggb2YgYWRob2Mgd2VwIHN0YXR1cworCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5XZXBTdGF0dXMpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIE5vdCBtYXRjaGVkIHdlcCBzdGF0dXMgJWQgJWRcbiIsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uV2VwU3RhdHVzKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYnNzaWQ9JXNcbiIsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLkJzc2lkKSk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBjb2xsYXBzZSBpbnRvIHRoZSBBREhPQyBuZXR3b3JrIHdoaWNoIGhhcyBiaWdnZXIgQlNTSUQgdmFsdWUuCisJCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJeworCQkJCWlmIChCc3NpZFtpXSA+IHBBZC0+Q29tbW9uQ2ZnLkJzc2lkW2ldKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIG1lcmdlIHRvIHRoZSBJQlNTIHdpdGggYmlnZ2VyIEJTU0lEPSUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCQkJQnNzaWRbMF0sIEJzc2lkWzFdLCBCc3NpZFsyXSwgQnNzaWRbM10sIEJzc2lkWzRdLCBCc3NpZFs1XSkpOworCQkJCQlBc2ljRGlzYWJsZVN5bmMocEFkKTsKKwkJCQkJQ09QWV9NQUNfQUREUihwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgQnNzaWQpOworCQkJCQlBc2ljU2V0QnNzaWQocEFkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJCU1ha2VJYnNzQmVhY29uKHBBZCk7ICAgICAgICAvLyByZS1idWlsZCBCRUFDT04gZnJhbWUKKwkJCQkJQXNpY0VuYWJsZUlic3NTeW5jKHBBZCk7ICAgIC8vIGNvcHkgQkVBQ09OIGZyYW1lIHRvIG9uLWNoaXAgbWVtb3J5CisJCQkJCWlzX215X2Jzc2lkID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYgKEJzc2lkW2ldIDwgcEFkLT5Db21tb25DZmcuQnNzaWRbaV0pCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKworCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQlwQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdOworCQlwQnNzLT5Sc3NpID0gUmVhbFJzc2k7ICAgICAgIC8vIGxhc3Rlc3QgUlNTSQorCQlwQnNzLT5MYXN0QmVhY29uUnhUaW1lID0gTm93OyAgIC8vIGxhc3QgUlggdGltZXN0YW1wCisKKwkJLy8KKwkJLy8gQkVBQ09OIGZyb20gbXkgQlNTSUQgLSBlaXRoZXIgSUJTUyBvciBJTkZSQSBuZXR3b3JrCisJCS8vCisJCWlmIChpc19teV9ic3NpZCkKKwkJeworCQkJUlhXSV9TVFJVQwlSeFdJOworCisJCQlwQWQtPlN0YUNmZy5EdGltQ291bnQgPSBEdGltQ291bnQ7CisJCQlwQWQtPlN0YUNmZy5EdGltUGVyaW9kID0gRHRpbVBlcmlvZDsKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7CisKKworCQkJUnhXSS5SU1NJMCA9IEVsZW0tPlJzc2kwOworCQkJUnhXSS5SU1NJMSA9IEVsZW0tPlJzc2kxOworCQkJUnhXSS5SU1NJMiA9IEVsZW0tPlJzc2kyOworCisJCQlVcGRhdGVfUnNzaV9TYW1wbGUocEFkLCAmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZSwgJlJ4V0kpOworCQkJaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCAhPSAweEZGKQorCQkJeworCQkJCS8vCisJCQkJLy8gV2UgZ2V0IHRoZSBDaXNjbyAoY2N4KSAiVHhQb3dlciBMaW1pdCIgcmVxdWlyZWQKKwkJCQkvLyBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIFR4UG93ZXIgTGltaXQgZm9yIENpc28gQ29tcGF0aWJsZSBFeHRlbnNpb25zCisJCQkJLy8KKwkJCQlDaGFuZ2VUb0NlbGxQb3dlckxpbWl0KHBBZCwgQWlyb25ldENlbGxQb3dlckxpbWl0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLworCQkJCS8vIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCBlcXVhbCB0byAweEZGIG1lYW5zIHRoZSBDaXNjbyAoY2N4KSAiVHhQb3dlciBMaW1pdCIgbm90IGV4aXN0LgorCQkJCS8vIFVzZWQgdGhlIGRlZmF1bHQgVFggUG93ZXIgUGVyY2VudGFnZSwgdGhhdCBzZXQgZnJvbSBVSS4KKwkJCQkvLworCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQ7CisJCQl9CisKKwkJCWlmIChBREhPQ19PTihwQWQpICYmIChDQVBfSVNfSUJTU19PTihDYXBhYmlsaXR5SW5mbykpKQorCQkJeworCQkJCVVDSEFSCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7CisJCQkJVUNIQVIJCQlpZHg7CisJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKwkJCQkvLyBzdXBwb3J0ZWQgcmF0ZXMgYXJyYXkgbWF5IG5vdCBiZSBzb3J0ZWQuIHNvcnQgaXQgYW5kIGZpbmQgdGhlIG1heGltdW0gcmF0ZQorCQkJICAgIGZvciAoaWR4PTA7IGlkeDxTdXBSYXRlTGVuOyBpZHgrKykKKwkJCQkJCXsKKwkJCSAgICAgICAgaWYgKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPCAoU3VwUmF0ZVtpZHhdICYgMHg3ZikpCisJCQkgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gU3VwUmF0ZVtpZHhdICYgMHg3ZjsKKwkJCQkJCX0KKworCQkJCWZvciAoaWR4PTA7IGlkeDxFeHRSYXRlTGVuOyBpZHgrKykKKwkJCSAgICB7CisJCQkgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKEV4dFJhdGVbaWR4XSAmIDB4N2YpKQorCQkJICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IEV4dFJhdGVbaWR4XSAmIDB4N2Y7CisJCQkJCX0KKworCQkJCS8vIGxvb2sgdXAgdGhlIGV4aXN0aW5nIHRhYmxlCisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBBZGRyMik7CisKKwkJCQkvLyBBZC1ob2MgbW9kZSBpcyB1c2luZyBNQUMgYWRkcmVzcyBhcyBCQSBzZXNzaW9uLiBTbyB3ZSBuZWVkIHRvIGNvbnRpbnVvdXNseSBmaW5kIG5ld2x5IGpvaW5lZCBhZGhvYyBzdGF0aW9uIGJ5IHJlY2VpdmluZyBiZWFjb24uCisJCQkJLy8gVG8gcHJldmVudCBhbHdheXMgY2hlY2sgdGhpcywgd2UgdXNlIHdjaWQgPT0gUkVTRVJWRURfV0NJRCB0byByZWNvZ25pemUgaXQgYXMgbmV3bHkgam9pbmVkIGFkaG9jIHN0YXRpb24uCisJCQkJaWYgKChBREhPQ19PTihwQWQpICYmIChFbGVtLT5XY2lkID09IFJFU0VSVkVEX1dDSUQpKSB8fAorCQkJCQkocEVudHJ5ICYmICgocEVudHJ5LT5MYXN0QmVhY29uUnhUaW1lICsgQURIT0NfRU5UUllfQkVBQ09OX0xPU1RfVElNRSkgPCBOb3cpKSkKKwkJCQkJCXsKKwkJCQkJaWYgKHBFbnRyeSA9PSBOVUxMKQorCQkJCQkJLy8gQW5vdGhlciBhZGhvYyBqb2luaW5nLCBhZGQgdG8gb3VyIE1BQyB0YWJsZS4KKwkJCQkJCXBFbnRyeSA9IE1hY1RhYmxlSW5zZXJ0RW50cnkocEFkLCBBZGRyMiwgQlNTMCwgRkFMU0UpOworCisJCQkJCWlmIChTdGFBZGRNYWNUYWJsZUVudHJ5KHBBZCwgcEVudHJ5LCBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLCAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sIENhcGFiaWxpdHlJbmZvKSA9PSBGQUxTRSkKKwkJCQkJeworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQURIT0MgLSBBZGQgRW50cnkgZmFpbGVkLlxuIikpOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisKKwkJCQkJaWYgKHBFbnRyeSAmJgorCQkJCQkJKEVsZW0tPldjaWQgPT0gUkVTRVJWRURfV0NJRCkpCisJCQkJeworCQkJCQkJaWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQkJCQkJUlQyOFhYX1NUQV9TRUNVUklUWV9JTkZPX0FERChwQWQsIEJTUzAsIGlkeCwgcEVudHJ5KTsKKwkJCQl9CisJCQkJfQorCisJCQkJaWYgKHBFbnRyeSAmJiBwRW50cnktPlZhbGlkQXNDTEkpCisJCQkJCXBFbnRyeS0+TGFzdEJlYWNvblJ4VGltZSA9IE5vdzsKKworCQkJCS8vIEF0IGxlYXN0IGFub3RoZXIgcGVlciBpbiB0aGlzIElCU1MsIGRlY2xhcmUgTWVkaWFTdGF0ZSBhcyBDT05ORUNURUQKKwkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQl7CisJCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCisJCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisJICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOworCQkJCQlBc2ljU2V0QnNzaWQocEFkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkJCQkJLy8gMjAwMy8wMy8xMiAtIGpvaG4KKwkJCQkJLy8gTWFrZSBzdXJlIHRoaXMgZW50cnkgaW4gIlNjYW5UYWIiIHRhYmxlLCB0aHVzIGNvbXBsaWVzIHRvIE1pY3Jvc29mdCdzIHBvbGljeSB0aGF0CisJCQkJCS8vICJzaXRlIHN1cnZleSIgcmVzdWx0IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0aGUgY3VycmVudCBjb25uZWN0ZWQgbmV0d29yay4KKwkJCQkJLy8KKwkJCQkJQnNzaWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgQnNzaWQsIENoYW5uZWwpOworCQkJCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpCisJCQkJCXsKKwkJCQkJCUJzc2lkeCA9IEJzc1RhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TY2FuVGFiLCBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLAorCQkJCQkJCQkJJkNmUGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sICZIdENhcGFiaWxpdHksCisJCQkJCQkJCQkmQWRkSHRJbmZvLCBIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwgTmV3RXh0Q2hhbm5lbE9mZnNldCwgQ2hhbm5lbCwgUmVhbFJzc2ksIFRpbWVTdGFtcCwgMCwKKwkJCQkJCQkJCSZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksICZRYnNzTG9hZCwgTGVuVklFLCBwVklFKTsKKwkJCQkJfQorCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBREhPQyAgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQuXG4iKSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCXsKKwkJCQlCT09MRUFOIGJVc2VTaG9ydFNsb3QsIGJVc2VCR1Byb3RlY3Rpb247CisKKwkJCQkvLyBkZWNpZGUgdG8gdXNlL2NoYW5nZSB0byAtCisJCQkJLy8gICAgICAxLiBsb25nIHNsb3QgKDIwIHVzKSBvciBzaG9ydCBzbG90ICg5IHVzKSB0aW1lCisJCQkJLy8gICAgICAyLiB0dXJuIG9uL29mZiBSVFMvQ1RTIGFuZC9vciBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uCisJCQkJLy8gICAgICAzLiBzaG9ydCBwcmVhbWJsZQorCisJCQkJLy9iVXNlU2hvcnRTbG90ID0gcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgJiYgQ0FQX0lTX1NIT1JUX1NMT1QoQ2FwYWJpbGl0eUluZm8pOworCQkJCWJVc2VTaG9ydFNsb3QgPSBDQVBfSVNfU0hPUlRfU0xPVChDYXBhYmlsaXR5SW5mbyk7CisJCQkJaWYgKGJVc2VTaG9ydFNsb3QgIT0gT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9TTE9UX0lOVVNFRCkpCisJCQkJCUFzaWNTZXRTbG90VGltZShwQWQsIGJVc2VTaG9ydFNsb3QpOworCisJCQkJYlVzZUJHUHJvdGVjdGlvbiA9IChwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPT0gMSkgfHwgICAgLy8gYWx3YXlzIHVzZQorCQkJCQkJCQkgICAoKHBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9PSAwKSAmJiBFUlBfSVNfVVNFX1BST1RFQ1RJT04oRXJwKSk7CisKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAvLyBhbHdheXMgbm8gQkcgcHJvdGVjdGlvbiBpbiBBLWJhbmQuIGZhbHNlbHkgaGFwcGVuZWQgd2hlbiBzd2l0Y2hpbmcgQS9HIGJhbmQgdG8gYSBkdWFsLWJhbmQgQVAKKwkJCQkJYlVzZUJHUHJvdGVjdGlvbiA9IEZBTFNFOworCisJCQkJaWYgKGJVc2VCR1Byb3RlY3Rpb24gIT0gT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCkpCisJCQkJeworCQkJCQlpZiAoYlVzZUJHUHJvdGVjdGlvbikKKwkJCQkJeworCQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEKTsKKwkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgKE9GRE1TRVRQUk9URUNUfENDS1NFVFBST1RFQ1R8QUxMTl9TRVRQUk9URUNUKSxGQUxTRSwocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9PSAxKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCk7CisJCQkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIChPRkRNU0VUUFJPVEVDVHxDQ0tTRVRQUk9URUNUfEFMTE5fU0VUUFJPVEVDVCksVFJVRSwocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9PSAxKSk7CisJCQkJCX0KKworCQkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlNZTkMgLSBBUCBjaGFuZ2VkIEIvRyBwcm90ZWN0aW9uIHRvICVkXG4iLCBiVXNlQkdQcm90ZWN0aW9uKSk7CisJCQkJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJLy8gY2hlY2sgSHQgcHJvdGVjdGlvbiBtb2RlLiBhbmQgYWRoZXJlIHRvIHRoZSBOb24tR0YgZGV2aWNlIGluZGljYXRpb24gYnkgQVAuCisJCQkJaWYgKChBZGRIdEluZm9MZW4gIT0gMCkgJiYKKwkJCQkJKChBZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUgIT0gcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSkgfHwKKwkJCQkJKEFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCAhPSBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KSkpCisJCQkJeworCQkJCQlwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID0gQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50OworCQkJCQlwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlID0gQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlOworCQkJCQlpZiAocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9PSAxKQorCQkJCXsKKwkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgVFJVRSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCBBTExOX1NFVFBST1RFQ1QsIEZBTFNFLCBGQUxTRSk7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEFQIGNoYW5nZWQgTiBPcGVyYWlvbk1vZGUgdG8gJWRcbiIsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUpKTsKKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpICYmCisJCQkJCUVSUF9JU19VU0VfQkFSS0VSX1BSRUFNQkxFKEVycCkpCisJCQkJeworCQkJCQlNbG1lU2V0VHhQcmVhbWJsZShwQWQsIFJ0ODAyXzExUHJlYW1ibGVMb25nKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEFQIGZvcmNlZCB0byB1c2UgTE9ORyBwcmVhbWJsZVxuIikpOworCQkJCX0KKworCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICAgICYmCisJCQkJCShFZGNhUGFybS5iVmFsaWQgPT0gVFJVRSkgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisJCQkJCShFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQgIT0gcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQpKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEFQIGNoYW5nZSBFRENBIHBhcmFtZXRlcnMoZnJvbSAlZCB0byAlZClcbiIsCisJCQkJCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkVkY2FVcGRhdGVDb3VudCwKKwkJCQkJCUVkY2FQYXJtLkVkY2FVcGRhdGVDb3VudCkpOworCQkJCQlBc2ljU2V0RWRjYVBhcm0ocEFkLCAmRWRjYVBhcm0pOworCQkJCX0KKworCQkJCS8vIGNvcHkgUU9TIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBRYnNzTG9hZCwgJlFic3NMb2FkLCBzaXplb2YoUUJTU19MT0FEX1BBUk0pKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBRb3NDYXBhYmlsaXR5LCAmUW9zQ2FwYWJpbGl0eSwgc2l6ZW9mKFFPU19DQVBBQklMSVRZX1BBUk0pKTsKKwkJCX0KKworCQkJLy8gb25seSBJTkZSQVNUUlVDVFVSRSBtb2RlIHN1cHBvcnQgcG93ZXItc2F2aW5nIGZlYXR1cmUKKwkJCWlmICgoSU5GUkFfT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSkgfHwgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpKQorCQkJeworCQkJCVVDSEFSIEZyZWVOdW1iZXI7CisJCQkJLy8gIDEuIEFQIGhhcyBiYWNrbG9nZ2VkIHVuaWNhc3QtdG8tbWUgZnJhbWUsIHN0YXkgQVdBS0UsIHNlbmQgUFNQT0xMCisJCQkJLy8gIDIuIEFQIGhhcyBiYWNrbG9nZ2VkIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUgYW5kIHdlIHdhbnQgdGhvc2UgZnJhbWVzLCBzdGF5IEFXQUtFCisJCQkJLy8gIDMuIHdlIGhhdmUgb3V0Z29pbmcgZnJhbWVzIGluIFR4UmluZyBvciBNZ210UmluZywgYmV0dGVyIHN0YXkgQVdBS0UKKwkJCQkvLyAgNC4gUHNtIGNoYW5nZSB0byBQV1JfU0FWRSwgYnV0IEFQIG5vdCBiZWVuIGluZm9ybWVkIHlldCwgd2UgYmV0dGVyIHN0YXkgQVdBS0UKKwkJCQkvLyAgNS4gb3RoZXJ3aXNlLCBwdXQgUEhZIGJhY2sgdG8gc2xlZXAgdG8gc2F2ZSBiYXR0ZXJ5LgorCQkJCWlmIChNZXNzYWdlVG9NZSkKKwkJCQl7CisJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUgJiYKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSyAmJiBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJICYmIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8pCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJOZWVkU2VuZFRyaWdnZXJGcmFtZSA9IFRSVUU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJUlQyOFhYX1BTX1BPTExfRU5RVUVVRShwQWQpOworCQkJCX0KKwkJCQllbHNlIGlmIChCY2FzdEZsYWcgJiYgKER0aW1Db3VudCA9PSAwKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSkpCisJCQkJeworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVk9dLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QocEFkLCBRSURfQUNfQkssIFRYX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQl8fAorCQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgVFhfUklOR19TSVpFIC0gMSwgJkZyZWVOdW1iZXIpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCXx8CisJCQkJCQkoUlRNUEZyZWVUWERSZXF1ZXN0KHBBZCwgUUlEX0FDX1ZJLCBUWF9SSU5HX1NJWkUgLSAxLCAmRnJlZU51bWJlcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykJfHwKKwkJCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QocEFkLCBRSURfQUNfVk8sIFRYX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQl8fAorCQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdChwQWQsIFFJRF9NR01ULCBNR01UX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKSkKKwkJCQl7CisJCQkJCS8vIFRPRE86IGNvbnNpZGVyIHNjaGVkdWxlZCBIQ0NBLiBtaWdodCBub3QgYmUgcHJvcGVyIHRvIHVzZSB0cmFkaXRpb25hbCBEVElNLWJhc2VkIHBvd2VyLXNhdmluZyBzY2hlbWUKKwkJCQkJLy8gY2FuIHdlIGNoZWF0IGhlcmUgKGkuZS4ganVzdCBjaGVjayBNR01UICYgQUNfQkUpIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U/CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVVTSE9SVCBOZXh0RHRpbSA9IER0aW1Db3VudDsKKworCQkJCQlpZiAoTmV4dER0aW0gPT0gMCkKKwkJCQkJCU5leHREdGltID0gRHRpbVBlcmlvZDsKKworCQkJCQlUYnR0TnVtVG9OZXh0V2FrZVVwID0gcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50OworCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pICYmIChUYnR0TnVtVG9OZXh0V2FrZVVwID4gTmV4dER0aW0pKQorCQkJCQkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IE5leHREdGltOworCisJCQkJCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJCQkJeworCQkJCQkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkvLyBub3QgbXkgQlNTSUQsIGlnbm9yZSBpdAorCX0KKwkvLyBzYW5pdHkgY2hlY2sgZmFpbCwgaWdub3JlIHRoaXMgZnJhbWUKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlSZWNlaXZlIFBST0JFIFJFUSBmcm9tIHJlbW90ZSBwZWVyIHdoZW4gb3BlcmF0aW5nIGluIElCU1MgbW9kZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlclByb2JlUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUiAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJQ0hBUiAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisJVUNIQVIgICAgICAgICBTc2lkTGVuOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVVDSEFSCQkgIEh0TGVuLCBBZGRIdExlbiwgTmV3RXh0TGVuOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCUhFQURFUl84MDJfMTEgUHJvYmVSc3BIZHI7CisJTkRJU19TVEFUVVMgICBOU3RhdHVzOworCVBVQ0hBUiAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisJTEFSR0VfSU5URUdFUiBGYWtlVGltZXN0YW1wOworCVVDSEFSICAgICAgICAgRHNMZW4gPSAxLCBJYnNzTGVuID0gMjsKKwlVQ0hBUiAgICAgICAgIExvY2FsRXJwSWVbM10gPSB7SUVfRVJQLCAxLCAwfTsKKwlCT09MRUFOICAgICAgIFByaXZhY3k7CisJVVNIT1JUICAgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlVQ0hBUgkJICBSU05JZSA9IElFX1dQQTsKKworCWlmICghIEFESE9DX09OKHBBZCkpCisJCXJldHVybjsKKworCWlmIChQZWVyUHJvYmVSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsIFNzaWQsICZTc2lkTGVuKSkKKwl7CisJCWlmICgoU3NpZExlbiA9PSAwKSB8fCBTU0lEX0VRVUFMKFNzaWQsIFNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pKQorCQl7CisJCQkvLyBhbGxvY2F0ZSBhbmQgc2VuZCBvdXQgUHJvYmVSc3AgZnJhbWUKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXJldHVybjsKKworCQkJLy9wQWQtPlN0YUNmZy5BdGltV2luID0gMDsgIC8vID8/Pz8/PworCisJCQlQcml2YWN5ID0gKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB8fAorCQkJCQkgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgfHwKKwkJCQkJICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOworCQkJQ2FwYWJpbGl0eUluZm8gPSBDQVBfR0VORVJBVEUoMCwgMSwgUHJpdmFjeSwgKHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KSwgMCwgMCk7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgICAgICZQcm9iZVJzcEhkciwKKwkJCQkJCQkgIFRJTUVTVEFNUF9MRU4sICAgICAgICAgICAgICAgICZGYWtlVGltZXN0YW1wLAorCQkJCQkJCSAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCwKKwkJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuU3NpZExlbiwKKwkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLCAgICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRzSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHNMZW4sCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJYnNzSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0xlbiwKKwkJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUFjdGl2ZS5BdGltV2luLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCisJCQlpZiAocEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbikKKwkJCXsKKwkJCQlVTE9ORyB0bXA7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgJnRtcCwKKwkJCQkJCQkJICAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbEVycEllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4sCisJCQkJCQkJCSAgcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiwgICAgJnBBZC0+U3RhQWN0aXZlLkV4dFJhdGUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKwkJCX0KKworCQkJLy8gSWYgYWRob2Mgc2VjcnVpdHkgaXMgc2V0IGZvciBXUEEtTm9uZSwgYXBwZW5kIHRoZSBjaXBoZXIgc3VpdGUgSUUKKwkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkJeworCQkJCVVMT05HIHRtcDsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAJJnRtcCwKKwkJCQkJCSAgCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUlNOSWUsCisJCQkJCQkgIAkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkmcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAorCQkJCQkJICAJCQlwQWQtPlN0YUNmZy5SU05JRV9MZW4sICAgICAgCXBBZC0+U3RhQ2ZnLlJTTl9JRSwKKwkJCQkJCSAgCQkJRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJVUxPTkcgVG1wTGVuOworCQkJCVVDSEFSCUJST0FEQ09NWzRdID0gezB4MCwgMHg5MCwgMHg0YywgMHgzM307CisJCQkJSHRMZW4gPSBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KTsKKwkJCQlBZGRIdExlbiA9IHNpemVvZihwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8pOworCQkJCU5ld0V4dExlbiA9IDE7CisJCQkJLy9OZXcgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IElFIGlzIGluY2x1ZGVkIGluIEJlYWNvbiwgUHJvYmUgUnNwIG9yIGNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBGcmFtZQorCQkJCWlmIChwQWQtPmJCcm9hZENvbUhUID09IFRSVUUpCisJCQkJeworCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCQkgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSksICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBZGRIdEluZm9JZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFkZEh0TGVuLAorCQkJCQkJCQkgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSwgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5ld0V4dENoYW5JZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5ld0V4dExlbiwKKwkJCQkJCQkJIHNpemVvZihORVdfRVhUX0NIQU5fSUUpLCAgICAgICAgICAmcEFkLT5Db21tb25DZmcuTmV3RXh0Q2hhbk9mZnNldCwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJfQorCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJfQorCX0KK30KKworVk9JRCBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uXG4iKSk7CisJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1JFSl9USU1FT1VUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9KT0lOX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNjYW4gdGltZW91dCBwcm9jZWR1cmUuIGJhc2ljYWxseSBhZGQgY2hhbm5lbCBpbmRleCBieSAxIGFuZCByZXNjYW4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFNjYW5UaW1lb3V0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IE5leHRDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOworCisJLy8gT25seSBvbmUgY2hhbm5lbCBzY2FubmVkIGZvciBDSVNDTyBiZWFjb24gcmVxdWVzdAorCWlmICgocEFkLT5NbG1lQXV4LlNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFKSB8fAorCQkocEFkLT5NbG1lQXV4LlNjYW5UeXBlID09IFNDQU5fQ0lTQ09fUEFTU0lWRSkgfHwKKwkJKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFKSB8fAorCQkocEFkLT5NbG1lQXV4LlNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSkKKwkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSAwOworCisJLy8gdGhpcyByb3V0aW5lIHdpbGwgc3RvcCBpZiBwQWQtPk1sbWVBdXguQ2hhbm5lbCA9PSAwCisJU2Nhbk5leHRDaGFubmVsKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEludmFsaWRTdGF0ZVdoZW5TY2FuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFZTkMgLSBJbnZhbGlkU3RhdGVXaGVuU2NhbihzdGF0ZT0lbGQpLiBSZXNldCBTWU5DIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NDQU5fQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEludmFsaWRTdGF0ZVdoZW5Kb2luKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkludmFsaWRTdGF0ZVdoZW5Kb2luKHN0YXRlPSVsZCkuIFJlc2V0IFNZTkMgbWFjaGluZVxuIiwgcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSkpOworCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfSk9JTl9DT05GLCAyLCAmU3RhdHVzKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgSW52YWxpZFN0YXRlV2hlblN0YXJ0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkludmFsaWRTdGF0ZVdoZW5TdGFydChzdGF0ZT0lbGQpLiBSZXNldCBTWU5DIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NUQVJUX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZVBzUG9sbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyNpZmRlZiBSQUxJTktfQVRFCisgICAgaWYgKEFURV9PTihwQWQpKQorICAgIHsKKwkJcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKworCWlmIChwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID09IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQKQorICAgIAlwQWQtPlBzUG9sbEZyYW1lLkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIChQVUNIQVIpJnBBZC0+UHNQb2xsRnJhbWUsIHNpemVvZihQU1BPTExfRlJBTUUpKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlUHJvYmVSZXF1ZXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5ESVNfU1RBVFVTICAgICBOU3RhdGU7CisJUFVDSEFSICAgICAgICAgIHBPdXRCdWZmZXI7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlIRUFERVJfODAyXzExICAgSGRyODAyMTE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJmb3JjZSBvdXQgYSBQcm9iZVJlcXVlc3QgLi4uXG4iKSk7CisKKwlOU3RhdGUgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0ZSA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZIZHI4MDIxMSwgU1VCVFlQRV9QUk9CRV9SRVEsIDAsIEJST0FEQ0FTVF9BRERSLCBCUk9BRENBU1RfQUREUik7CisKKwkJLy8gdGhpcyBQcm9iZVJlcXVlc3QgZXhwbGljaXRseSBzcGVjaWZ5IFNTSUQgdG8gcmVkdWNlIHVud2FudGVkIFByb2JlUmVzcG9uc2UKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgICAgICAgJkhkcjgwMjExLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sCisJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwKKwkJCQkJCSAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwgICAgICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCX0KKworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjaWZkZWYgRE9UMTFOX0RSQUZUMworVk9JRCBCdWlsZEVmZmVjdGVkQ2hhbm5lbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUNIQVIJCUVDaGFubmVsWzExXTsKKwlVQ0hBUgkJaSwgaiwgazsKKwlVQ0hBUgkJVXBwZXJDaGFubmVsID0gMCwgTG93ZXJDaGFubmVsID0gMDsKKworCVJUTVBaZXJvTWVtb3J5KEVDaGFubmVsLCAxMSk7CisJaSA9IDA7CisJLy8gRmluZCB1cHBlciBjaGFubmVsIGFuZCBsb3dlciBjaGFubmVsLgorCWlmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA8IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJeworCQlVcHBlckNoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlMb3dlckNoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbDsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPiBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCXsKKwkJVXBwZXJDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWw7CisJCUxvd2VyQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJfQorCWVsc2UKKwl7CisJCXJldHVybjsKKwl9CisKKwkvLyBSZWNvcmQgY2hhbm5lbHMgdGhhdCBpcyBiZWxvdyBsb3dlciBjaGFubmVsLi4KKwlpZiAoTG93ZXJDaGFubmVsID4gMSkKKwl7CisJCUVDaGFubmVsWzBdID0gTG93ZXJDaGFubmVsIC0gMTsKKwkJaSA9IDE7CisJCWlmIChMb3dlckNoYW5uZWwgPiAyKQorCQl7CisJCQlFQ2hhbm5lbFsxXSA9IExvd2VyQ2hhbm5lbCAtIDI7CisJCQlpID0gMjsKKwkJCWlmIChMb3dlckNoYW5uZWwgPiAzKQorCQkJeworCQkJCUVDaGFubmVsWzJdID0gTG93ZXJDaGFubmVsIC0gMzsKKwkJCQlpID0gMzsKKwkJCX0KKwkJfQorCX0KKwkvLyBSZWNvcmQgY2hhbm5lbHMgdGhhdCBpcyBiZXR3ZWVuICBsb3dlciBjaGFubmVsIGFuZCB1cHBlciBjaGFubmVsLgorCWZvciAoayA9IExvd2VyQ2hhbm5lbDtrIDwgVXBwZXJDaGFubmVsO2srKykKKwl7CisJCUVDaGFubmVsW2ldID0gazsKKwkJaSsrOworCX0KKwkvLyBSZWNvcmQgY2hhbm5lbHMgdGhhdCBpcyBhYm92ZSB1cHBlciBjaGFubmVsLi4KKwlpZiAoTG93ZXJDaGFubmVsIDwgMTEpCisJeworCQlFQ2hhbm5lbFtpXSA9IFVwcGVyQ2hhbm5lbCArIDE7CisJCWkrKzsKKwkJaWYgKExvd2VyQ2hhbm5lbCA8IDEwKQorCQl7CisJCQlFQ2hhbm5lbFtpXSA9IExvd2VyQ2hhbm5lbCArIDI7CisJCQlpKys7CisJCQlpZiAoTG93ZXJDaGFubmVsIDwgOSkKKwkJCXsKKwkJCQlFQ2hhbm5lbFtpXSA9IExvd2VyQ2hhbm5lbCArIDM7CisJCQkJaSsrOworCQkJfQorCQl9CisJfQorCS8vCisJZm9yIChqID0gMDtqIDwgaTtqKyspCisJeworCQlmb3IgKGsgPSAwO2sgPCBwQWQtPkNoYW5uZWxMaXN0TnVtO2srKykKKwkJeworCQkJaWYgKHBBZC0+Q2hhbm5lbExpc3Rba10uQ2hhbm5lbCA9PSBFQ2hhbm5lbFtqXSkKKwkJCXsKKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2tdLmJFZmZlY3RlZENoYW5uZWwgPSBUUlVFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiIEVmZmVjdGVkQ2hhbm5lbCggPSVkKVxuIiwgRUNoYW5uZWxbal0pKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0JPT0xFQU4gU2NhblJ1bm5pbmcoCisJCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCXJldHVybiAocEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9PSBTQ0FOX0xJU1RFTikgPyBUUlVFIDogRkFMU0U7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvd3BhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkMDgzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3dwYS5jCkBAIC0wLDAgKzEsMjA5OSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwl3cGEuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUphbglMZWUJCTAzLTA3LTIyCQlJbml0aWFsCisJUGF1bCBMaW4JMDMtMTEtMjgJCU1vZGlmeSBmb3Igc3VwcGxpY2FudAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworI2RlZmluZQkJV1BBUlNOSUUJMHhkZAorI2RlZmluZQkJV1BBMlJTTklFCTB4MzAKKworLy9leHRlcm4gVUNIQVIgQklUOFtdOworVUNIQVIJQ2lwaGVyV3BhUHNrVGtpcFtdID0geworCQkweERELCAweDE2LAkJCQkvLyBSU04gSUUKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwJLy8gb3VpCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwJLy8gTXVsdGljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIE51bWJlciBvZiB1bmljYXN0CisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIHVuaWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyCS8vIGF1dGhlbnRpY2F0aW9uCisJCX07CitVQ0hBUglDaXBoZXJXcGFQc2tUa2lwTGVuID0gKHNpemVvZihDaXBoZXJXcGFQc2tUa2lwKSAvIHNpemVvZihVQ0hBUikpOworCitVQ0hBUglDaXBoZXJXcGFQc2tBZXNbXSA9IHsKKwkJMHhERCwgMHgxNiwgCQkJLy8gUlNOIElFCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMgkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyV3BhUHNrQWVzTGVuID0gKHNpemVvZihDaXBoZXJXcGFQc2tBZXMpIC8gc2l6ZW9mKFVDSEFSKSk7CisKK1VDSEFSCUNpcGhlclN1aXRlQ2lzY29DQ0tNW10gPSB7CisJCTB4REQsIDB4MTYsCQkJCS8vIFJTTiBJRQorCQkweDAwLCAweDUwLCAweGYyLCAweDAxLCAvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDQwLCAweDk2LCAweDAxLCAvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVpY2FzdAorCQkweDAwLCAweDQwLCAweDk2LCAweDAxLCAvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCAgLy8gQXV0aGVudGljYXRpb24KKwkJfTsKK1VDSEFSCUNpcGhlclN1aXRlQ2lzY29DQ0tNTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZUNpc2NvQ0NLTSkgLyBzaXplb2YoVUNIQVIpKTsKKworVUNIQVIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNFtdID0geworCQkweERELCAweDE4LAkJCQkvLyBSU04gSUUKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwgLy8gb3VpCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMSwgLy8gTXVsdGljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIE51bWJlciBvZiB1aWNhc3QKKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMSwgLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsCisJCTB4MjgsIDB4MDAvLyBBdXRoZW50aWNhdGlvbgorCQl9OworCitVQ0hBUglDaXBoZXJTdWl0ZUNpc2NvQ0NLTTI0TGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZUNpc2NvQ0NLTTI0KSAvIHNpemVvZihVQ0hBUikpOworCitVQ0hBUglDaXBoZXJTdWl0ZUNDWFRraXBbXSA9IHsKKwkJMHhERCwgMHgxNiwJCQkJLy8gUlNOIElFCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMQkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyU3VpdGVDQ1hUa2lwTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZUNDWFRraXApIC8gc2l6ZW9mKFVDSEFSKSk7CisKK1VDSEFSCUNDWF9MTENfSERSW10gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMn07CitVQ0hBUglMTENfTk9STUFMW10gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CisKK1VDSEFSCUVBUE9MX0ZSQU1FW10gPSB7MHg4OCwgMHg4RX07CisKK0JPT0xFQU4gQ2hlY2tSU05JRSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorCUlOICBVQ0hBUiAgICAgICAgICAgRGF0YUxlbiwKKwlPVVQJVUNIQVIJCQkqT2Zmc2V0KTsKKwordm9pZCBpbmNfYnl0ZV9hcnJheShVQ0hBUiAqY291bnRlciwgaW50IGxlbik7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDbGFzc2lmeSBXUEEgRUFQIG1lc3NhZ2UgdHlwZQorCisJQXJndW1lbnRzOgorCQlFQVBUeXBlCQlWYWx1ZSBvZiBFQVAgbWVzc2FnZSB0eXBlCisJCU1zZ1R5cGUJCUludGVybmFsIE1lc3NhZ2UgZGVmaW5pdGlvbiBmb3IgTUxNRSBzdGF0ZSBtYWNoaW5lCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJCUZvdW5kIGFwcHJvcHJpYXRlIG1lc3NhZ2UgdHlwZQorCQlGQUxTRQkJTm8gYXBwcm9wcmlhdGUgbWVzc2FnZSB0eXBlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCUFsbCB0aGVzZSBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gd3BhLmgKKwkJRm9yIHN1cHBsaWNhbnQsIHRoZXJlIGlzIG9ubHkgRUFQT0wgS2V5IG1lc3NhZ2UgYXZhbGlhYmxlCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOCVdwYU1zZ1R5cGVTdWJzdCgKKwlJTglVQ0hBUglFQVBUeXBlLAorCU9VVAlJTlQJCSpNc2dUeXBlKQoreworCXN3aXRjaCAoRUFQVHlwZSkKKwl7CisJCWNhc2UgRUFQUGFja2V0OgorCQkJKk1zZ1R5cGUgPSBNVDJfRUFQUGFja2V0OworCQkJYnJlYWs7CisJCWNhc2UgRUFQT0xTdGFydDoKKwkJCSpNc2dUeXBlID0gTVQyX0VBUE9MU3RhcnQ7CisJCQlicmVhazsKKwkJY2FzZSBFQVBPTExvZ29mZjoKKwkJCSpNc2dUeXBlID0gTVQyX0VBUE9MTG9nb2ZmOworCQkJYnJlYWs7CisJCWNhc2UgRUFQT0xLZXk6CisJCQkqTXNnVHlwZSA9IE1UMl9FQVBPTEtleTsKKwkJCWJyZWFrOworCQljYXNlIEVBUE9MQVNGQWxlcnQ6CisJCQkqTXNnVHlwZSA9IE1UMl9FQVBPTEFTRkFsZXJ0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRkFMU0U7CisJfQorCXJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWFzc29jaWF0aW9uCXN0YXRlIG1hY2hpbmUgaW5pdCwJaW5jbHVkaW5nIHN0YXRlCXRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKwlQYXJhbWV0ZXJzOgorCQlTIC0JcG9pbnRlcgl0byB0aGUgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgV3BhUHNrU3RhdGVNYWNoaW5lSW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglTVEFURV9NQUNISU5FICpTLAorCU9VVAlTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKwlTdGF0ZU1hY2hpbmVJbml0KFMsCVRyYW5zLCBNQVhfV1BBX1BTS19TVEFURSwgTUFYX1dQQV9QU0tfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIFdQQV9QU0tfSURMRSwgV1BBX01BQ0hJTkVfQkFTRSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFdQQV9QU0tfSURMRSwgTVQyX0VBUE9MS2V5LCAoU1RBVEVfTUFDSElORV9GVU5DKVdwYUVBUE9MS2V5QWN0aW9uKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIGlzCXN0YXRlIG1hY2hpbmUgZnVuY3Rpb24uCisJCVdoZW4gcmVjZWl2aW5nIEVBUE9MIHBhY2tldHMgd2hpY2ggaXMgIGZvciA4MDIuMXgga2V5IG1hbmFnZW1lbnQuCisJCVVzZQlib3RoIGluCVdQQSwgYW5kIFdQQVBTSwljYXNlLgorCQlJbiB0aGlzCWZ1bmN0aW9uLCBmdXJ0aGVyIGRpc3BhdGNoIHRvIGRpZmZlcmVudAlmdW5jdGlvbnMgYWNjb3JkaW5nCXRvIHRoZSByZWNlaXZlZAlwYWNrZXQuCSAzIGNhdGVnb3JpZXMgYXJlIDoKKwkJICAxLiAgbm9ybWFsIDQtd2F5IHBhaXJ3aXNla2V5IGFuZCAyLXdheSBncm91cGtleSBoYW5kc2hha2UKKwkJICAyLiAgTUlDIGVycm9yCShDb3VudGVybWVhc3VyZXMgYXR0YWNrKSAgcmVwb3J0IHBhY2tldAlmcm9tIFNUQS4KKwkJICAzLiAgUmVxdWVzdCBmb3IgcGFpcndpc2UvZ3JvdXAga2V5IHVwZGF0ZQlmcm9tIFNUQQorCVJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgV3BhRUFQT0xLZXlBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQorCit7CisJSU5UICAgICAgICAgICAgIE1zZ1R5cGUgPSBFQVBPTF9NU0dfSU5WQUxJRDsKKwlQS0VZX0RFU0NSSVBURVIgcEtleURlc2M7CisJUEhFQURFUl84MDJfMTEgIHBIZWFkZXI7IC8vcmVkCisJVUNIQVIgICAgICAgICAgIFplcm9SZXBsYXlbTEVOX0tFWV9ERVNDX1JFUExBWV07CisJVUNIQVIgRWFwb2xWcjsKKwlLRVlfSU5GTwkJcGVlcktleUluZm87CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0tLT4gV3BhRUFQT0xLZXlBY3Rpb25cbiIpKTsKKworCS8vIEdldCA4MDIuMTEgaGVhZGVyIGZpcnN0CisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCisJLy8gR2V0IEVBUG9MLUtleSBEZXNjcmlwdG9yCisJcEtleURlc2MgPSAoUEtFWV9ERVNDUklQVEVSKSAmRWxlbS0+TXNnWyhMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0ggKyBMRU5HVEhfRUFQT0xfSCldOworCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIHNpemVvZihwZWVyS2V5SW5mbykpOworCU5kaXNNb3ZlTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCAoUFVDSEFSKSZwS2V5RGVzYy0+S2V5SW5mbywgc2l6ZW9mKEtFWV9JTkZPKSk7CisKKwkqKChVU0hPUlQgKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJnBlZXJLZXlJbmZvKSk7CisKKworCS8vIDEuIENoZWNrIEVBUE9MIGZyYW1lIHZlcnNpb24gYW5kIHR5cGUKKwlFYXBvbFZyCT0gKFVDSEFSKSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMStMRU5HVEhfODAyXzFfSF07CisKKyAgICBpZiAoKChFYXBvbFZyICE9IEVBUE9MX1ZFUikgJiYgKEVhcG9sVnIgIT0gRUFQT0xfVkVSMikpIHx8ICgocEtleURlc2MtPlR5cGUgIT0gV1BBMV9LRVlfREVTQykgJiYgKHBLZXlEZXNjLT5UeXBlICE9IFdQQTJfS0VZX0RFU0MpKSkKKwl7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIktleSBkZXNjcmlwdGVyIGRvZXMgbm90IG1hdGNoIHdpdGggV1BBIHJ1bGVcbiIpKTsKKwkJCXJldHVybjsKKwl9CisKKwkvLyBGaXJzdCB2YWxpZGF0ZSByZXBsYXkgY291bnRlciwgb25seSBhY2NlcHQgbWVzc2FnZSB3aXRoIGxhcmdlciByZXBsYXkgY291bnRlcgorCS8vIExldCBlcXVhbCBwYXNzLCBzb21lIEFQIHN0YXJ0IHdpdGggYWxsIHplcm8gcmVwbGF5IGNvdW50ZXIKKwlOZGlzWmVyb01lbW9yeShaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCWlmKChSVE1QQ29tcGFyZU1lbW9yeShwS2V5RGVzYy0+UmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkgJiYKKwkJKFJUTVBDb21wYXJlTWVtb3J5KHBLZXlEZXNjLT5SZXBsYXlDb3VudGVyLCBaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAwKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiAgIFJlcGxheUNvdW50ZXIgbm90IG1hdGNoICAgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyBQcm9jZXNzIFdQQTJQU0sgZnJhbWUKKwlpZihwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorCXsKKwkJaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gUEFJUldJU0VLRVkpICYmCisJCQkocGVlcktleUluZm8uRUtEX0RMID09IDApICYmCisJCQkocGVlcktleUluZm8uS2V5QWNrID09IDEpICYmCisJCQkocGVlcktleUluZm8uS2V5TWljID09IDApICYmCisJCQkocGVlcktleUluZm8uU2VjdXJlID09IDApICYmCisJCQkocGVlcktleUluZm8uRXJyb3IgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5SZXF1ZXN0ID09IDApKQorCQl7CisJCQlNc2dUeXBlID0gRUFQT0xfUEFJUl9NU0dfMTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IFBhaXJ3aXNlIE1lc3NhZ2UgMVxuIikpOworCQl9IGVsc2UgaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gUEFJUldJU0VLRVkpICYmCisJCQkocGVlcktleUluZm8uRUtEX0RMICA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX1BBSVJfTVNHXzM7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBQYWlyd2lzZSBNZXNzYWdlIDNcbiIpKTsKKwkJfSBlbHNlIGlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IEdST1VQS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVLRF9ETCA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX0dST1VQX01TR18xOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVjZWl2ZSBFQVBPTCBLZXkgR3JvdXAgTWVzc2FnZSAxXG4iKSk7CisJCX0KKworCQkvLyBXZSB3aWxsIGFzc3VtZSBsaW5rIGlzIHVwIChhc3NvYyBzdWNlZXNzIGFuZCBwb3J0IG5vdCBzZWN1cmVkKS4KKwkJLy8gQWxsIHN0YXRlIGhhcyB0byBiZSBhYmxlIHRvIHByb2Nlc3MgbWVzc2FnZSBmcm9tIHByZXZpb3VzIHN0YXRlCisJCXN3aXRjaChwQWQtPlN0YUNmZy5XcGFTdGF0ZSkKKwkJeworCQljYXNlIFNTX1NUQVJUOgorCQkJaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xKQorCQkJeworCQkJCVdwYTJQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1NfV0FJVF9NU0dfMzoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGEyUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQl9CisJCQllbHNlIGlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKwkJCXsKKwkJCQlXcGEyUGFpck1zZzNBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfR1JPVVA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNTX1dBSVRfR1JPVVA6CQkvLyBXaGVuIGRvaW5nIGdyb3VwIGtleSBleGNoYW5nZQorCQljYXNlIFNTX0ZJTklTSDoJCQkvLyBUaGlzIGhhcHBlbmVkIHdoZW4gdXBkYXRlIGdyb3VwIGtleQorCQkJaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xKQorCQkJeworCQkJICAgIC8vIFJlc2V0IHBvcnQgc2VjdXJlZCB2YXJpYWJsZQorCQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJCVdwYTJQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJICAgIC8vIFJlc2V0IHBvcnQgc2VjdXJlZCB2YXJpYWJsZQorCQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJCVdwYTJQYWlyTXNnM0FjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9HUk9VUDsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkKKwkJCXsKKwkJCQlXcGFHcm91cE1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX0ZJTklTSDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwkvLyBQcm9jZXNzIFdQQVBTSyBGcmFtZQorCS8vIENsYXNzaWZ5IG1lc3NhZ2UgVHlwZSwgZWl0aGVyIHBhaXJ3aXNlIG1lc3NhZ2UgMSwgMywgb3IgZ3JvdXAgbWVzc2FnZSAxIGZvciBzdXBwbGljYW50CisJZWxzZSBpZihwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCisJeworCQlpZigocGVlcktleUluZm8uS2V5VHlwZSA9PSBQQUlSV0lTRUtFWSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlJbmRleCA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX1BBSVJfTVNHXzE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBQYWlyd2lzZSBNZXNzYWdlIDFcbiIpKTsKKwkJfQorCQllbHNlIGlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IFBBSVJXSVNFS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUluZGV4ID09IDApICYmCisJCQkocGVlcktleUluZm8uS2V5QWNrID09IDEpICYmCisJCQkocGVlcktleUluZm8uS2V5TWljID09IDEpICYmCisJCQkocGVlcktleUluZm8uU2VjdXJlID09IDApICYmCisJCQkocGVlcktleUluZm8uRXJyb3IgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5SZXF1ZXN0ID09IDApKQorCQl7CisJCQlNc2dUeXBlID0gRUFQT0xfUEFJUl9NU0dfMzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IFBhaXJ3aXNlIE1lc3NhZ2UgM1xuIikpOworCQl9CisJCWVsc2UgaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gR1JPVVBLRVkpICYmCisJCQkocGVlcktleUluZm8uS2V5SW5kZXggIT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlBY2sgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlNaWMgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5TZWN1cmUgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5FcnJvciA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkpCisJCXsKKwkJCU1zZ1R5cGUgPSBFQVBPTF9HUk9VUF9NU0dfMTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IEdyb3VwIE1lc3NhZ2UgMVxuIikpOworCQl9CisKKwkJLy8gV2Ugd2lsbCBhc3N1bWUgbGluayBpcyB1cCAoYXNzb2Mgc3VjZWVzcyBhbmQgcG9ydCBub3Qgc2VjdXJlZCkuCisJCS8vIEFsbCBzdGF0ZSBoYXMgdG8gYmUgYWJsZSB0byBwcm9jZXNzIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBzdGF0ZQorCQlzd2l0Y2gocEFkLT5TdGFDZmcuV3BhU3RhdGUpCisJCXsKKwkJY2FzZSBTU19TVEFSVDoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGFQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1NfV0FJVF9NU0dfMzoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGFQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJCVdwYVBhaXJNc2czQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19XQUlUX0dST1VQOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTU19XQUlUX0dST1VQOgkJLy8gV2hlbiBkb2luZyBncm91cCBrZXkgZXhjaGFuZ2UKKwkJY2FzZSBTU19GSU5JU0g6CQkJLy8gVGhpcyBoYXBwZW5lZCB3aGVuIHVwZGF0ZSBncm91cCBrZXkKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGFQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCQkvLyBSZXNldCBwb3J0IHNlY3VyZWQgdmFyaWFibGUKKwkJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJCVdwYVBhaXJNc2czQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19XQUlUX0dST1VQOworCQkJCS8vIFJlc2V0IHBvcnQgc2VjdXJlZCB2YXJpYWJsZQorCQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJfQorCQkJZWxzZSBpZihNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKQorCQkJeworCQkJCVdwYUdyb3VwTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfRklOSVNIOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLS0tIFdwYUVBUE9MS2V5QWN0aW9uXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcm9jZXNzIFBhaXJ3aXNlIGtleSA0LXdheSBoYW5kc2hha2luZworCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlFbGVtCQlNZXNzYWdlIGJvZHkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJV3BhUGFpck1zZzFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQSEVBREVSXzgwMl8xMSAgICAgIHBIZWFkZXI7CisJVUNIQVIJCQkJKm1wb29sLCAqUFRLLCAqZGlnZXN0OworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnMTsKKwlFQVBPTF9QQUNLRVQgICAgICAgIFBhY2tldDsKKwlVQ0hBUiAgICAgICAgICAgICAgIE1pY1sxNl07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFQYWlyTXNnMUFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIGFsbG9jYXRlIG1lbW9yeSBwb29sCisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtcG9vbCwgMjU2KTsKKworCWlmIChtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBQVEsgTGVuID0gODAuCisJUFRLID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvLyBkaWdlc3QgTGVuID0gODAuCisJZGlnZXN0ID0gKFVDSEFSICopIFJPVU5EX1VQKFBUSyArIDgwLCA0KTsKKworCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIEVsZW0tPk1zZzsKKworCS8vIFByb2Nlc3MgbWVzc2FnZSAxIGZyb20gYXV0aGVudGljYXRvcgorCXBNc2cxID0gKFBFQVBPTF9QQUNLRVQpICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCS8vIDEuIFNhdmUgUmVwbGF5IGNvdW50ZXIsIGl0IHdpbGwgdXNlIHRvIHZlcmlmeSBtZXNzYWdlIDMgYW5kIGNvbnN0cnVjdCBtZXNzYWdlIDIKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwTXNnMS0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDIuIFNhdmUgQU5vbmNlCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQU5vbmNlLCBwTXNnMS0+S2V5RGVzYy5LZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIEdlbmVyYXRlIHJhbmRvbSBTTm9uY2UKKwlHZW5SYW5kb20ocEFkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPlN0YUNmZy5TTm9uY2UpOworCisJLy8gQ2FsYyBQVEsoQU5vbmNlLCBTTm9uY2UpCisJV3BhQ291bnRQVEsocEFkLAorCQlwQWQtPlN0YUNmZy5QTUssCisJCXBBZC0+U3RhQ2ZnLkFOb25jZSwKKwkJcEFkLT5Db21tb25DZmcuQnNzaWQsCisJCXBBZC0+U3RhQ2ZnLlNOb25jZSwKKwkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJUFRLLAorCQlMRU5fUFRLKTsKKworCS8vIFNhdmUga2V5IHRvIFBUSyBlbnRyeQorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBUSywgUFRLLCBMRU5fUFRLKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBNZXNzYWdlIDIgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJLy8KKwkvLyBNZXNzYWdlIDIgYXMgIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLFNOb25jZSxNSUMsUlNOIElFKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisJLy8gMS4gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbiBhbmQgYXBwcm9wcmlhdGUgUlNOIElFCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gMjsKKwl9CisJZWxzZQkgIC8vIFRLSVAKKwl7CisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDE7CisJfQorCisJLy8gZmlsbCBpbiBEYXRhIE1hdGVyaWFsIGFuZCBpdHMgbGVuZ3RoCisJUGFja2V0LktleURlc2MuS2V5RGF0YVswXSA9IElFX1dQQTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzFdID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCVBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW4gKyAyOworCU5kaXNNb3ZlTWVtb3J5KCZQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdLCBwQWQtPlN0YUNmZy5SU05fSUUsIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisKKwkvLyBVcGRhdGUgcGFja2V0IGxlbmd0aCBhZnRlciBkZWNpZGUgS2V5IGRhdGEgcGF5bG9hZAorCVBhY2tldC5Cb2R5X0xlblsxXSAgPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRSArIFBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV07CisKKwkvLyBVcGRhdGUgS2V5IGxlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFswXSA9IHBNc2cxLT5LZXlEZXNjLktleUxlbmd0aFswXTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMV0gPSBwTXNnMS0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisJLy8gMi4gS2V5IFR5cGUgUGVlcktleQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gMy4gS2V5TWljIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljICA9IDE7CisKKwkvL0NvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCisJLy8gNC4gRmlsbCBTTm9uY2UKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlOb25jZSwgcEFkLT5TdGFDZmcuU05vbmNlLCBMRU5fS0VZX0RFU0NfTk9OQ0UpOworCisJLy8gNS4gS2V5IFJlcGxheSBDb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gU2VuZCBFQVBPTCgwLCAxLCAwLCAwLCAwLCBQLCAwLCBTTm9uY2UsIE1JQywgUlNOX0lFKQorCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBtZXNzYWdlIDIKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisJCXJldHVybjsKKwl9CisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyA2LiBQcmVwYXJlIGFuZCBGaWxsIE1JQyB2YWx1ZQorCU5kaXNaZXJvTWVtb3J5KE1pYywgc2l6ZW9mKE1pYykpOworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CS8vIEFFUworCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsJLy8gVEtJUAorCQlobWFjX21kNShQVEssICBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKwkvL2hleF9kdW1wKCJNSUMiLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCQkmSGVhZGVyODAyXzMsCisJCQkJCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQkJCQkJRU5EX09GX0FSR1MpOworCisKKwkvLyA1LiBDb3B5IGZyYW1lIHRvIFR4IHJpbmcgYW5kIHNlbmQgTXNnIDIgdG8gYXV0aGVudGljYXRvcgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKwlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhUGFpck1zZzFBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKK1ZPSUQgV3BhMlBhaXJNc2cxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUEhFQURFUl84MDJfMTEgICAgICBwSGVhZGVyOworCVVDSEFSCQkJCSptcG9vbCwgKlBUSywgKmRpZ2VzdDsKKwlQVUNIQVIgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVDSEFSICAgICAgICAgICAgICAgSGVhZGVyODAyXzNbMTRdOworCVVMT05HICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCVBFQVBPTF9QQUNLRVQgICAgICAgcE1zZzE7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhMlBhaXJNc2cxQWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gYWxsb2NhdGUgbWVtb3J5IHBvb2wKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1wb29sLCAyNTYpOworCisJaWYgKG1wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCS8vIFBUSyBMZW4gPSA4MC4KKwlQVEsgPSAoVUNIQVIgKikgUk9VTkRfVVAobXBvb2wsIDQpOworCS8vIGRpZ2VzdCBMZW4gPSA4MC4KKwlkaWdlc3QgPSAoVUNIQVIgKikgUk9VTkRfVVAoUFRLICsgODAsIDQpOworCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCisJLy8gUHJvY2VzcyBtZXNzYWdlIDEgZnJvbSBhdXRoZW50aWNhdG9yCisJCXBNc2cxID0gKFBFQVBPTF9QQUNLRVQpCSZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCS8vIDEuIFNhdmUgUmVwbGF5IGNvdW50ZXIsIGl0IHdpbGwgdXNlIHRvIHZlcmlmeSBtZXNzYWdlIDMgYW5kIGNvbnN0cnVjdCBtZXNzYWdlIDIKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwTXNnMS0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDIuIFNhdmUgQU5vbmNlCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQU5vbmNlLCBwTXNnMS0+S2V5RGVzYy5LZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIEdlbmVyYXRlIHJhbmRvbSBTTm9uY2UKKwlHZW5SYW5kb20ocEFkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPlN0YUNmZy5TTm9uY2UpOworCisJaWYocE1zZzEtPktleURlc2MuS2V5RGF0YUxlblsxXSA+IDAgKQorCXsKKwkJLy8gY2FjaGVkIFBNS0lECisJfQorCisJLy8gQ2FsYyBQVEsoQU5vbmNlLCBTTm9uY2UpCisJV3BhQ291bnRQVEsocEFkLAorCQlwQWQtPlN0YUNmZy5QTUssCisJCXBBZC0+U3RhQ2ZnLkFOb25jZSwKKwkJcEFkLT5Db21tb25DZmcuQnNzaWQsCisJCXBBZC0+U3RhQ2ZnLlNOb25jZSwKKwkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJUFRLLAorCQlMRU5fUFRLKTsKKworCS8vIFNhdmUga2V5IHRvIFBUSyBlbnRyeQorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBUSywgUFRLLCBMRU5fUFRLKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBtZXNzYWdlIDIgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJLy8KKwkvLyBNZXNzYWdlIDIgYXMgIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLFNOb25jZSxNSUMsUlNOIElFKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisKKwkvLyAxLiBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDI7CisJfQorCWVsc2UJICAvLyBUS0lQCisJeworCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAxOworCX0KKworCS8vIGZpbGwgaW4gRGF0YSBNYXRlcmlhbCBhbmQgaXRzIGxlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleURhdGFbMF0gPSBJRV9XUEEyOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW47CisJUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXSA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArIDI7CisJTmRpc01vdmVNZW1vcnkoJlBhY2tldC5LZXlEZXNjLktleURhdGFbMl0sIHBBZC0+U3RhQ2ZnLlJTTl9JRSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKworCS8vIFVwZGF0ZSBwYWNrZXQgbGVuZ3RoIGFmdGVyIGRlY2lkZSBLZXkgZGF0YSBwYXlsb2FkCisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFICsgUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXTsKKworCS8vIDIuIEtleSBUeXBlIFBlZXJLZXkKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSBQQUlSV0lTRUtFWTsKKworCS8vIDMuIEtleU1pYyBmaWVsZCBwcmVzZW50ZWQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYyAgPSAxOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSAwOworCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFsxXSA9IHBNc2cxLT5LZXlEZXNjLktleUxlbmd0aFsxXTsKKworCS8vIDQuIEZpbGwgU05vbmNlCisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5Tm9uY2UsIHBBZC0+U3RhQ2ZnLlNOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIDUuIEtleSBSZXBsYXkgQ291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIENvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCS8vIFNlbmQgRUFQT0wtS2V5KDAsMSwwLDAsMCxQLDAsU05vbmNlLE1JQyxSU04gSUUpCisJLy8gT3V0IGJ1ZmZlciBmb3IgdHJhbnNtaXR0aW5nIG1lc3NhZ2UgMgorCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAmRnJhbWVMZW4sCisJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCUVORF9PRl9BUkdTKTsKKworCS8vIDYuIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlCisJTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShQVEssICBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKworCS8vIE1ha2UgIFRyYW5zbWl0dGluZyBmcmFtZQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIDUuIENvcHkgZnJhbWUgdG8gVHggcmluZworCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGEyUGFpck1zZzFBY3Rpb24gPC0tLS0tXG4iKSk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgUGFpcndpc2Uga2V5IDQtd2F5IGhhbmRzaGFraW5nCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCUVsZW0JCU1lc3NhZ2UgYm9keQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlXcGFQYWlyTXNnM0FjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNTE1FX1FVRVVFX0VMRU0JKkVsZW0pCisKK3sKKwlQSEVBREVSXzgwMl8xMSAgICAgIHBIZWFkZXI7CisJUFVDSEFSICAgICAgICAgIAlwT3V0QnVmZmVyID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhlYWRlcjgwMl8zWzE0XTsKKwlVTE9ORyAgICAgICAgICAgCUZyYW1lTGVuID0gMDsKKwlFQVBPTF9QQUNLRVQgICAgICAgIFBhY2tldDsKKwlQRUFQT0xfUEFDS0VUICAgICAgIHBNc2czOworCVVDSEFSICAgICAgICAgICAJTWljWzE2XSwgT2xkTWljWzE2XTsKKwlNQUNfVEFCTEVfRU5UUlkgCSpwRW50cnkgPSBOVUxMOworCVVDSEFSCQkJCXNraXBfb2Zmc2V0OworCUtFWV9JTkZPCQkJcGVlcktleUluZm87CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFQYWlyTXNnM0FjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIFJlY29yZCA4MDIuMTEgaGVhZGVyICYgdGhlIHJlY2VpdmVkIEVBUE9MIHBhY2tldCBNc2czCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCXBNc2czID0gKFBFQVBPTF9QQUNLRVQpCSZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCBzaXplb2YocGVlcktleUluZm8pKTsKKwlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgKFBVQ0hBUikmcE1zZzMtPktleURlc2MuS2V5SW5mbywgc2l6ZW9mKEtFWV9JTkZPKSk7CisKKwkqKChVU0hPUlQqKSZwZWVyS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQqKSZwZWVyS2V5SW5mbykpOworCisKKwkvLyAxLiBWZXJpZnkgY2lwaGVyIHR5cGUgbWF0Y2gKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDIpKQorCXsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDEpKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vIFZlcmlmeSBSU04gSUUKKwkvL2lmICghUlRNUEVxdWFsTWVtb3J5KHBNc2czLT5LZXlEZXNjLktleURhdGEsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbikpCisJaWYgKCFDaGVja1JTTklFKHBBZCwgcE1zZzMtPktleURlc2MuS2V5RGF0YSwgcE1zZzMtPktleURlc2MuS2V5RGF0YUxlblsxXSwgJnNraXBfb2Zmc2V0KSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJTTl9JRSBEaWZmZXJlbnQgaW4gTXNnIDMgb2YgV1BBMSA0LXdheSBoYW5kc2hha2UhISBcbiIpKTsKKwkJaGV4X2R1bXAoIlRoZSBvcmlnaW5hbCBSU05fSUUiLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pOworCQloZXhfZHVtcCgiVGhlIHJlY2VpdmVkIFJTTl9JRSIsIHBNc2czLT5LZXlEZXNjLktleURhdGEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0pOworCQlyZXR1cm47CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlNOX0lFIFZBTElEIGluIE1zZyAzIG9mIFdQQTEgNC13YXkgaGFuZHNoYWtlISEgXG4iKSk7CisKKworCS8vIDIuIENoZWNrIE1JQyB2YWx1ZQorCS8vIFNhdmUgdGhlIE1JQyBhbmQgcmVwbGFjZSB3aXRoIHplcm8KKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBNc2czLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJTmRpc1plcm9NZW1vcnkocE1zZzMtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJVUNIQVIgZGlnZXN0WzgwXTsKKworCQlITUFDX1NIQTEoKFBVQ0hBUikgcE1zZzMsIHBNc2czLT5Cb2R5X0xlblsxXSArIDQsIHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworCQlOZGlzTW92ZU1lbW9yeShNaWMsIGRpZ2VzdCwgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCWVsc2UJLy8gVEtJUAorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIChQVUNIQVIpIHBNc2czLCBwTXNnMy0+Qm9keV9MZW5bMV0gKyA0LCBNaWMpOworCX0KKworCWlmKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiIE1JQyBEaWZmZXJlbnQgaW4gbXNnIDMgb2YgNC13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNSUMgVkFMSUQgaW4gbXNnIDMgb2YgNC13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKworCS8vIDMuIENoZWNrIFJlcGxheSBDb3VudGVyLCBpdCBoYXMgdG8gYmUgbGFyZ2VyIHRoYW4gbGFzdCBvbmUuIE5vIG5lZWQgdG8gYmUgZXhhY3Qgb25lIGxhcmdlcgorCWlmKFJUTVBDb21wYXJlTWVtb3J5KHBNc2czLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpCisJCXJldHVybjsKKworCS8vIFVwZGF0ZSBuZXcgcmVwbGF5IGNvdW50ZXIKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwTXNnMy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDQuIERvdWJsZSBjaGVjayBBTm9uY2UKKwlpZighTmRpc0VxdWFsTWVtb3J5KHBBZC0+U3RhQ2ZnLkFOb25jZSwgcE1zZzMtPktleURlc2MuS2V5Tm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSkpCisJCXJldHVybjsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBNZXNzYWdlIDQgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFOwkJLy8gTm8gZGF0YSBmaWVsZAorCisJLy8KKwkvLyBNZXNzYWdlIDQgYXMgIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLDAsTUlDLDApCisJLy8KKwlQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKKworCS8vIEtleSBkZXNjcmlwdG9yIHZlcnNpb24gYW5kIGFwcHJvcHJpYXRlIFJTTiBJRQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IHBlZXJLZXlJbmZvLktleURlc2NWZXI7CisKKwkvLyBVcGRhdGUgS2V5IExlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFswXSA9IHBNc2czLT5LZXlEZXNjLktleUxlbmd0aFswXTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMV0gPSBwTXNnMy0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisKKwkvLyBLZXkgVHlwZSBQZWVyS2V5CisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gUEFJUldJU0VLRVk7CisKKwkvLyBLZXlNaWMgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgID0gMTsKKworCS8vIEluIE1zZzMsICBLZXlJbmZvLnNlY3VyZSA9MCBpZiBHcm91cCBLZXkgSFMgdG8gY29tZS4gMSBpZiBubyBncm91cCBrZXkgSFMKKwkvLyBTdGF0aW9uIHNlbmRzIE1zZzQgIEtleUluZm8uc2VjdXJlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGF0IGluIE1zZy4zCisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmU9IHBlZXJLZXlJbmZvLlNlY3VyZTsKKworCS8vIENvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCS8vIEtleSBSZXBsYXkgY291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwTXNnMy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBtZXNzYWdlIDQKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICAgICZQYWNrZXQsCisJCUVORF9PRl9BUkdTKTsKKworCS8vIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlCisJTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCVVDSEFSIGRpZ2VzdFs4MF07CisKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sIE1pYyk7CisJfQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCS8vIFVwZGF0ZSBQVEsKKwkvLyBQcmVwYXJlIHBhaXItd2lzZSBrZXkgaW5mb3JtYXRpb24gaW50byBzaGFyZWQga2V5IHRhYmxlCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbiA9IExFTl9US0lQX0VLOworICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sIExFTl9US0lQX0VLKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OF0sIExFTl9US0lQX1JYTUlDSyk7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDgrTEVOX1RLSVBfUlhNSUNLXSwgTEVOX1RLSVBfVFhNSUNLKTsKKworCS8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisJaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCWVsc2UKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisKKwkvLyBVcGRhdGUgdGhlc2UgcmVsYXRlZCBpbmZvcm1hdGlvbiB0byBNQUNfVEFCTEVfRU5UUlkKKwlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKwlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sIExFTl9US0lQX0VLKTsKKwlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlR4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4K0xFTl9US0lQX1JYTUlDS10sIExFTl9US0lQX1RYTUlDSyk7CisJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGc7CisKKwkvLyBVcGRhdGUgcGFpcndpc2Uga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsCisJCQkJCQkgIEJTUzAsCisJCQkJCQkgIDAsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMpOworCisJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisJCQkJCQkJICBCU1MwLAorCQkJCQkJCSAgMCwKKwkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKKwkJCQkJCQkgIHBFbnRyeSk7CisKKwkvLyBNYWtlIHRyYW5zbWl0dGluZyBmcmFtZQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIENvcHkgZnJhbWUgdG8gVHggcmluZyBhbmQgU2VuZCBNZXNzYWdlIDQgdG8gYXV0aGVudGljYXRvcgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYVBhaXJNc2czQWN0aW9uIDwtLS0tLVxuIikpOworfQorCitWT0lEICAgIFdwYTJQYWlyTXNnM0FjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKQorCit7CisJUEhFQURFUl84MDJfMTEgICAgICBwSGVhZGVyOworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnMzsKKwlVQ0hBUiAgICAgICAgICAgICAgIE1pY1sxNl0sIE9sZE1pY1sxNl07CisJVUNIQVIgICAgICAgICAgICAgICAqbXBvb2wsICpLRVlEQVRBLCAqZGlnZXN0OworCVVDSEFSICAgICAgICAgICAgICAgS2V5WzMyXTsKKwlNQUNfVEFCTEVfRU5UUlkgCSpwRW50cnkgPSBOVUxMOworCUtFWV9JTkZPCQkJcGVlcktleUluZm87CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1wb29sLCAxMDI0KTsKKworCWlmKG1wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCS8vIEtFWURBVEEgTGVuID0gNTEyLgorCUtFWURBVEEgPSAoVUNIQVIgKikgUk9VTkRfVVAobXBvb2wsIDQpOworCS8vIGRpZ2VzdCBMZW4gPSA4MC4KKwlkaWdlc3QgPSAoVUNIQVIgKikgUk9VTkRfVVAoS0VZREFUQSArIDUxMiwgNCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGEyUGFpck1zZzNBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwlwSGVhZGVyID0gKFBIRUFERVJfODAyXzExKSBFbGVtLT5Nc2c7CisKKwkvLyBQcm9jZXNzIG1lc3NhZ2UgMyBmcmFtZS4KKwlwTXNnMyA9IChQRUFQT0xfUEFDS0VUKQkmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07CisKKwlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgc2l6ZW9mKHBlZXJLZXlJbmZvKSk7CisJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIChQVUNIQVIpJnBNc2czLT5LZXlEZXNjLktleUluZm8sIHNpemVvZihLRVlfSU5GTykpOworCisJKigoVVNIT1JUKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUKikmcGVlcktleUluZm8pKTsKKworCS8vIDEuIFZlcmlmeSBjaXBoZXIgdHlwZSBtYXRjaAorCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciE9IDIpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDEpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIDIuIENoZWNrIE1JQyB2YWx1ZQorCS8vIFNhdmUgdGhlIE1JQyBhbmQgcmVwbGFjZSB3aXRoIHplcm8KKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBNc2czLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJTmRpc1plcm9NZW1vcnkocE1zZzMtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJSE1BQ19TSEExKChQVUNIQVIpIHBNc2czLCBwTXNnMy0+Qm9keV9MZW5bMV0gKyA0LCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgKFBVQ0hBUikgcE1zZzMsIHBNc2czLT5Cb2R5X0xlblsxXSArIDQsIE1pYyk7CisJfQorCisJaWYoIU5kaXNFcXVhbE1lbW9yeShPbGRNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQykpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIgTUlDIERpZmZlcmVudCBpbiBtc2cgMyBvZiA0LXdheSBoYW5kc2hha2UhISEhISEhISEhIFxuIikpOworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1JQyBWQUxJRCBpbiBtc2cgMyBvZiA0LXdheSBoYW5kc2hha2UhISEhISEhISEhIFxuIikpOworCisJLy8gMy4gQ2hlY2sgUmVwbGF5IENvdW50ZXIsIGl0IGhhcyB0byBiZSBsYXJnZXIgdGhhbiBsYXN0IG9uZS4gTm8gbmVlZCB0byBiZSBleGFjdCBvbmUgbGFyZ2VyCisJaWYoUlRNUENvbXBhcmVNZW1vcnkocE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBVcGRhdGUgbmV3IHJlcGxheSBjb3VudGVyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyA0LiBEb3VibGUgY2hlY2sgQU5vbmNlCisJaWYoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlN0YUNmZy5BTm9uY2UsIHBNc2czLT5LZXlEZXNjLktleU5vbmNlLCBMRU5fS0VZX0RFU0NfTk9OQ0UpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIE9idGFpbiBHVEsKKwkvLyA1LiBEZWNyeXB0IEdUSyBmcm9tIEtleSBEYXRhCisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkVLRCA9ICVkXG4iLCBwZWVyS2V5SW5mby5FS0RfREwpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIERlY3J5cHQgQUVTIEdUSworCQlBRVNfR1RLX0tFWV9VTldSQVAoJnBBZC0+U3RhQ2ZnLlBUS1sxNl0sIEtFWURBVEEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0scE1zZzMtPktleURlc2MuS2V5RGF0YSk7CisJfQorCWVsc2UJICAvLyBUS0lQCisJeworCQlJTlQgaTsKKwkJLy8gRGVjcnlwdCBUS0lQIEdUSworCQkvLyBDb25zdHJ1Y3QgMzIgYnl0ZXMgUkM0IEtleQorCQlOZGlzTW92ZU1lbW9yeShLZXksIHBNc2czLT5LZXlEZXNjLktleUl2LCAxNik7CisJCU5kaXNNb3ZlTWVtb3J5KCZLZXlbMTZdLCAmcEFkLT5TdGFDZmcuUFRLWzE2XSwgMTYpOworCQlBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgS2V5LCAzMik7CisJCS8vZGlzY2FyZCBmaXJzdCAyNTYgYnl0ZXMKKwkJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCQlBUkNGT1VSX0JZVEUoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCk7CisJCS8vIERlY3J5cHQgR1RLLiBCZWNhcmVmdWwsIHRoZXJlIGlzIG5vIElDViB0byBjaGVjayB0aGUgcmVzdWx0IGlzIGNvcnJlY3Qgb3Igbm90CisJCUFSQ0ZPVVJfREVDUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLRVlEQVRBLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdKTsKKwl9CisKKwlpZiAoIVBhcnNlS2V5RGF0YShwQWQsIEtFWURBVEEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIDEpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIFVwZGF0ZSBHVEsgdG8gQVNJQworCS8vIFVwZGF0ZSBncm91cCBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKwkJCQkJCSAgQlNTMCwKKwkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMpOworCisJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisJCQkJCQkJICBCU1MwLAorCQkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisJCQkJCQkJICBOVUxMKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBtZXNzYWdlIDQgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICAJPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRTsJCS8vIE5vIGRhdGEgZmllbGQKKworCS8vCisJLy8gTWVzc2FnZSA0IGFzICBFQVBPTC1LZXkoMCwxLDAsMCwwLFAsMCwwLE1JQywwKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSBwZWVyS2V5SW5mby5LZXlEZXNjVmVyOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSBwTXNnMy0+S2V5RGVzYy5LZXlMZW5ndGhbMF07CisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzFdID0gcE1zZzMtPktleURlc2MuS2V5TGVuZ3RoWzFdOworCisJLy8gS2V5IFR5cGUgUGVlcktleQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gS2V5TWljIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljICA9IDE7CisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmUgPSAxOworCisJLy8gQ29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwkqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykpOworCisJLy8gS2V5IFJlcGxheSBjb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBNc2czLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gT3V0IGJ1ZmZlciBmb3IgdHJhbnNtaXR0aW5nIG1lc3NhZ2UgNAorCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVUNIQVIgKikmcE91dEJ1ZmZlcik7ICAvLyBhbGxvY2F0ZSBtZW1vcnkKKwlpZihwT3V0QnVmZmVyID09IE5VTEwpCisJeworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyBQcmVwYXJlIGFuZCBGaWxsIE1JQyB2YWx1ZQorCU5kaXNaZXJvTWVtb3J5KE1pYywgc2l6ZW9mKE1pYykpOworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKwkvLyBVcGRhdGUgUFRLCisJLy8gUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZQorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksICZwQWQtPlN0YUNmZy5QVEtbMzJdLCBMRU5fVEtJUF9FSyk7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDhdLCBMRU5fVEtJUF9SWE1JQ0spOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4K0xFTl9US0lQX1JYTUlDS10sIExFTl9US0lQX1RYTUlDSyk7CisKKwkvLyBEZWNpZGUgaXRzIENoaXBlckFsZworCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwllbHNlCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCisJLy8gVXBkYXRlIHRoZXNlIHJlbGF0ZWQgaW5mb3JtYXRpb24gdG8gTUFDX1RBQkxFX0VOVFJZCisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXkuS2V5LCAmcEFkLT5TdGFDZmcuUFRLWzMyXSwgTEVOX1RLSVBfRUspOworCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OCtMRU5fVEtJUF9SWE1JQ0tdLCBMRU5fVEtJUF9UWE1JQ0spOworCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnOworCisJLy8gVXBkYXRlIHBhaXJ3aXNlIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUKKwlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJICBCU1MwLAorCQkJCQkJICAwLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAorCQkJCQkJCSAgQlNTMCwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkJICBwRW50cnkpOworCisJLy8gTWFrZSAgVHJhbnNtaXR0aW5nIGZyYW1lCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgIAkmRnJhbWVMZW4sCisJCQkgIAkJCUxFTkdUSF84MDJfMywgICAgIAkJJkhlYWRlcjgwMl8zLAorCQkJCQkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgJlBhY2tldCwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCisJLy8gQ29weSBmcmFtZSB0byBUeCByaW5nIGFuZCBTZW5kIE1lc3NhZ2UgNCB0byBhdXRoZW50aWNhdG9yCisJUlRNUFRvV2lyZWxlc3NTdGEocEFkLCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zLCAoUFVDSEFSKSZQYWNrZXQsIFBhY2tldC5Cb2R5X0xlblsxXSArIDQsIFRSVUUpOworCisJLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkvL3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCisJTWxtZUZyZWVNZW1vcnkocEFkLCAoUFVDSEFSKXBPdXRCdWZmZXIpOworCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisKKworCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3Igc2V0IGtleSBkb25lIFdQQTIKKwlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcsIHBFbnRyeS0+QWRkciwgQlNTMCwgMCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcGEyUGFpck1zZzNBY3Rpb24gPC0tLS0tXG4iKSk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgR3JvdXAga2V5IDItd2F5IGhhbmRzaGFraW5nCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCUVsZW0JCU1lc3NhZ2UgYm9keQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlXcGFHcm91cE1zZzFBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQorCit7CisJUFVDSEFSICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhlYWRlcjgwMl8zWzE0XTsKKwlVTE9ORyAgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlFQVBPTF9QQUNLRVQgICAgICAgIFBhY2tldDsKKwlQRUFQT0xfUEFDS0VUICAgICAgIHBHcm91cDsKKwlVQ0hBUiAgICAgICAgICAgICAgICptcG9vbCwgKmRpZ2VzdCwgKktFWURBVEE7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdLCBPbGRNaWNbMTZdOworCVVDSEFSICAgICAgICAgICAgICAgR1RLWzMyXSwgS2V5WzMyXTsKKwlLRVlfSU5GTwkJCXBlZXJLZXlJbmZvOworCisJLy8gYWxsb2NhdGUgbWVtb3J5CisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtcG9vbCwgMTAyNCk7CisKKwlpZihtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBkaWdlc3QgTGVuID0gODAuCisJZGlnZXN0ID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvLyBLRVlEQVRBIExlbiA9IDUxMi4KKwlLRVlEQVRBID0gKFVDSEFSICopIFJPVU5EX1VQKGRpZ2VzdCArIDgwLCA0KTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYUdyb3VwTXNnMUFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIFByb2Nlc3MgR3JvdXAgTWVzc2FnZSAxIGZyYW1lLiBza2lwIDgwMi4xMSBoZWFkZXIoMjQpICYgTExDX1NOQVAgaGVhZGVyKDgpCisJcEdyb3VwID0gKFBFQVBPTF9QQUNLRVQpICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCBzaXplb2YocGVlcktleUluZm8pKTsKKwlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgKFBVQ0hBUikmcEdyb3VwLT5LZXlEZXNjLktleUluZm8sIHNpemVvZihLRVlfSU5GTykpOworCisJKigoVVNIT1JUKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUKikmcGVlcktleUluZm8pKTsKKworCS8vIDAuIENoZWNrIGNpcGhlciB0eXBlIG1hdGNoCisJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDIpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciAhPSAxKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyAxLiBWZXJpZnkgUmVwbGF5IGNvdW50ZXIKKwkvLyAgICBDaGVjayBSZXBsYXkgQ291bnRlciwgaXQgaGFzIHRvIGJlIGxhcmdlciB0aGFuIGxhc3Qgb25lLiBObyBuZWVkIHRvIGJlIGV4YWN0IG9uZSBsYXJnZXIKKwlpZihSVE1QQ29tcGFyZU1lbW9yeShwR3JvdXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBVcGRhdGUgbmV3IHJlcGxheSBjb3VudGVyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcEdyb3VwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gMi4gVmVyaWZ5IE1JQyBpcyB2YWxpZAorCS8vIFNhdmUgdGhlIE1JQyBhbmQgcmVwbGFjZSB3aXRoIHplcm8KKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBHcm91cC0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCU5kaXNaZXJvTWVtb3J5KHBHcm91cC0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsJLy8gQUVTCisJCUhNQUNfU0hBMSgoUFVDSEFSKSBwR3JvdXAsIHBHcm91cC0+Qm9keV9MZW5bMV0gKyA0LCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJewkvLyBUS0lQCisJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCAoUFVDSEFSKSBwR3JvdXAsIHBHcm91cC0+Qm9keV9MZW5bMV0gKyA0LCBNaWMpOworCX0KKworCWlmKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiIE1JQyBEaWZmZXJlbnQgaW4gZ3JvdXAgbXNnIDEgb2YgMi13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNSUMgVkFMSUQgaW4gZ3JvdXAgbXNnIDEgb2YgMi13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKworCisJLy8gMy4gRGVjcnlwdCBHVEsgZnJvbSBLZXkgRGF0YQorCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIERlY3J5cHQgQUVTIEdUSworCQlBRVNfR1RLX0tFWV9VTldSQVAoJnBBZC0+U3RhQ2ZnLlBUS1sxNl0sIEtFWURBVEEsICBwR3JvdXAtPktleURlc2MuS2V5RGF0YUxlblsxXSwgcEdyb3VwLT5LZXlEZXNjLktleURhdGEpOworCX0KKwllbHNlCS8vIFRLSVAKKwl7CisJCUlOVCBpOworCisJCS8vIERlY3J5cHQgVEtJUCBHVEsKKwkJLy8gQ29uc3RydWN0IDMyIGJ5dGVzIFJDNCBLZXkKKwkJTmRpc01vdmVNZW1vcnkoS2V5LCBwR3JvdXAtPktleURlc2MuS2V5SXYsIDE2KTsKKwkJTmRpc01vdmVNZW1vcnkoJktleVsxNl0sICZwQWQtPlN0YUNmZy5QVEtbMTZdLCAxNik7CisJCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLZXksIDMyKTsKKwkJLy9kaXNjYXJkIGZpcnN0IDI1NiBieXRlcworCQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJCUFSQ0ZPVVJfQllURSgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhUKTsKKwkJLy8gRGVjcnlwdCBHVEsuIEJlY2FyZWZ1bCwgdGhlcmUgaXMgbm8gSUNWIHRvIGNoZWNrIHRoZSByZXN1bHQgaXMgY29ycmVjdCBvciBub3QKKwkJQVJDRk9VUl9ERUNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtFWURBVEEsIHBHcm91cC0+S2V5RGVzYy5LZXlEYXRhLCBwR3JvdXAtPktleURlc2MuS2V5RGF0YUxlblsxXSk7CisJfQorCisJLy8gUHJvY2VzcyBkZWNyeXB0ZWQga2V5IGRhdGEgbWF0ZXJpYWwKKwkvLyBQYXJzZSBrZXlEYXRhIHRvIGhhbmRsZSBLREUgZm9ybWF0IGZvciBXUEEyUFNLCisJaWYgKHBlZXJLZXlJbmZvLkVLRF9ETCkKKwl7CisJCWlmICghUGFyc2VLZXlEYXRhKHBBZCwgS0VZREFUQSwgcEdyb3VwLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIDApKQorCQl7CisJCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQkJcmV0dXJuOworCQl9CisJfQorCWVsc2UJLy8gV1BBUFNLCisJeworCQkvLyBzZXQga2V5IG1hdGVyaWFsLCBUeE1pYyBhbmQgUnhNaWMgZm9yIFdQQVBTSworCQlOZGlzTW92ZU1lbW9yeShHVEssIEtFWURBVEEsIDMyKTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuR1RLLCBHVEssIDMyKTsKKwkJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gcGVlcktleUluZm8uS2V5SW5kZXg7CisKKwkJLy8gUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZQorCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksIEdUSywgTEVOX1RLSVBfRUspOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljLCAmR1RLWzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywgJkdUS1syNF0sIExFTl9US0lQX1RYTUlDSyk7CisKKwkJLy8gVXBkYXRlIFNoYXJlZCBLZXkgQ2lwaGVyQWxnCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCWlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKworICAgIAkvL2hleF9kdW1wKCJHcm91cCBLZXkgOiIsIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCBMRU5fVEtJUF9FSyk7CisJfQorCisJLy8gVXBkYXRlIGdyb3VwIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUKKwlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJICBCU1MwLAorCQkJCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5SeE1pYyk7CisKKwkvLyBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUKKwlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKwkJCQkJCQkgIEJTUzAsCisJCQkJCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCisJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCQkgIE5VTEwpOworCisJLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkvL3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCisJLy8gaW5pdCBoZWFkZXIgYW5kIEZpbGwgUGFja2V0CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwkvLyBaZXJvIEdyb3VwIG1lc3NhZ2UgMSBib2R5CisJTmRpc1plcm9NZW1vcnkoJlBhY2tldCwgc2l6ZW9mKFBhY2tldCkpOworCVBhY2tldC5Qcm9WZXIJPSBFQVBPTF9WRVI7CisJUGFja2V0LlByb1R5cGUJPSBFQVBPTEtleTsKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUU7CQkvLyBObyBkYXRhIGZpZWxkCisKKwkvLworCS8vIEdyb3VwIE1lc3NhZ2UgMiBhcyAgRUFQT0wtS2V5KDEsMCwwLDAsRywwLDAsTUlDLDApCisJLy8KKwlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKwl7CisJCVBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEEyX0tFWV9ERVNDOworCX0KKwllbHNlCisJeworCQlQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKKwl9CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSBwZWVyS2V5SW5mby5LZXlEZXNjVmVyOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSBwR3JvdXAtPktleURlc2MuS2V5TGVuZ3RoWzBdOworCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFsxXSA9IHBHcm91cC0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisKKwkvLyBLZXkgSW5kZXggYXMgRy1Nc2cgMQorCWlmKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlJbmRleCA9IHBlZXJLZXlJbmZvLktleUluZGV4OworCisJLy8gS2V5IFR5cGUgR3JvdXAga2V5CisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gR1JPVVBLRVk7CisKKwkvLyBLZXlNaWMgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgID0gMTsKKworCS8vIFNlY3VyZSBiaXQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLlNlY3VyZSAgPSAxOworCisJLy8gQ29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwkqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykpOworCisJLy8gS2V5IFJlcGxheSBjb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBHcm91cC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBncm91cCBtZXNzYWdlIDIKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIFByZXBhcmUgRUFQT0wgZnJhbWUgZm9yIE1JQyBjYWxjdWxhdGlvbgorCS8vIEJlIGNhcmVmdWwsIG9ubHkgRUFQT0wgZnJhbWUgaXMgY291bnRlZCBmb3IgTUlDIGNhbGN1bGF0aW9uCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJRU5EX09GX0FSR1MpOworCisJLy8gUHJlcGFyZSBhbmQgRmlsbCBNSUMgdmFsdWUKKwlOZGlzWmVyb01lbW9yeShNaWMsIHNpemVvZihNaWMpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sIE1pYyk7CisJfQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgCQkmRnJhbWVMZW4sCisJCQkJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIDUuIENvcHkgZnJhbWUgdG8gVHggcmluZyBhbmQgcHJlcGFyZSBmb3IgZW5jcnlwdGlvbgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBGQUxTRSk7CisKKwkvLyA2IEZyZWUgYWxsb2NhdGVkIG1lbW9yeQorCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKwlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCisJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBzZXQga2V5IGRvbmUgV1BBMgorCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU0VUX0tFWV9ET05FX1dQQTJfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYUdyb3VwTXNnMUFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUluaXQgV1BBIE1BQyBoZWFkZXIKKworCUFyZ3VtZW50czoKKwkJcEFkCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJV3BhTWFjSGVhZGVySW5pdCgKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUCVBIRUFERVJfODAyXzExCXBIZHI4MDIxMSwKKwlJTgkJVUNIQVIJCQl3ZXAsCisJSU4JCVBVQ0hBUgkJICAgIHBBZGRyMSkKK3sKKwlOZGlzWmVyb01lbW9yeShwSGRyODAyMTEsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJcEhkcjgwMjExLT5GQy5UeXBlCT0gQlRZUEVfREFUQTsKKwlwSGRyODAyMTEtPkZDLlRvRHMJPSAxOworCWlmICh3ZXAJPT0gMSkKKwkJcEhkcjgwMjExLT5GQy5XZXAgPSAxOworCisJIC8vCUFkZHIxOiBCU1NJRCwgQWRkcjI6IFNBLCBBZGRyMzoJREEKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIHBBZGRyMSk7CisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlwSGRyODAyMTEtPlNlcXVlbmNlID0JcEFkLT5TZXF1ZW5jZTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSBlbmNyeXB0aW9uIGJlZm9yZSByZWFsbHkKKwlzZW50IG91dCB0byBhaXIuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlQTkRJU19QQUNLRVQJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCisJCU51bWJlck9mRnJhZwlOdW1iZXIgb2YgZnJhZ21lbnQgcmVxdWlyZWQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgICAgUlRNUFRvV2lyZWxlc3NTdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIERhdGFMZW4sCisgICAgSU4JQk9PTEVBTgkJCWlzNHdheUZyYW1lKQorCit7CisJTkRJU19TVEFUVVMgICAgIFN0YXR1czsKKwlQTkRJU19QQUNLRVQgICAgcFBhY2tldDsKKwlVQ0hBUiAgIEluZGV4OworCisJZG8KKwl7CisJCS8vIDEuIGJ1aWxkIGEgTkRJUyBwYWNrZXQgYW5kIGNhbGwgUlRNUFNlbmRQYWNrZXQoKTsKKwkJLy8gICAgYmUgY2FyZWZ1bCBhYm91dCBob3cvd2hlbiB0byByZWxlYXNlIHRoaXMgaW50ZXJuYWwgYWxsb2NhdGVkIE5ESVMgUEFDS0VUIGJ1ZmZlcgorCQlTdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBQYWNrZXQsIHBIZWFkZXI4MDJfMywgSGRyTGVuLCBwRGF0YSwgRGF0YUxlbik7CisJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCWlmIChpczR3YXlGcmFtZSkKKwkJCVJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFBhY2tldCwgMSk7CisJCWVsc2UKKwkJCVJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFBhY2tldCwgMCk7CisKKwkJLy8gMi4gc2VuZCBvdXQgdGhlIHBhY2tldAorCQlTdGF0dXMgPSBTVEFTZW5kUGFja2V0KHBBZCwgcFBhY2tldCk7CisJCWlmKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQkvLyBEZXF1ZXVlIG9uZSBmcmFtZSBmcm9tIFR4U3dRdWV1ZTAuLjMgcXVldWUgYW5kIHByb2Nlc3MgaXQKKwkJCS8vIFRoZXJlIGFyZSB0aHJlZSBwbGFjZSBjYWxsaW5nIGRlcXVldWUgZm9yIFRYIHJpbmcuCisJCQkvLyAxLiBIZXJlLCByaWdodCBhZnRlciBxdWV1ZWluZyB0aGUgZnJhbWUuCisJCQkvLyAyLiBBdCB0aGUgZW5kIG9mIFR4UmluZ1R4RG9uZSBzZXJ2aWNlIHJvdXRpbmUuCisJCQkvLyAzLiBVcG9uIE5ESVMgY2FsbCBSVE1QU2VuZFBhY2tldHMKKwkJCWlmKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgJiYKKwkJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpKQorCQkJeworCQkJCWZvcihJbmRleCA9IDA7IEluZGV4IDwgNTsgSW5kZXggKyspCisJCQkJCWlmKHBBZC0+VHhTd1F1ZXVlW0luZGV4XS5OdW1iZXIgPiAwKQorCQkJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgSW5kZXgsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCX0KKwkJfQorCX0gd2hpbGUoRkFMU0UpOworCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENoZWNrIFNhbml0eSBSU04gSUUgZm9ybSBBUAorCisgICAgQXJndW1lbnRzOgorCisgICAgUmV0dXJuIFZhbHVlOgorCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJT1VUCVVDSEFSCQkJKk9mZnNldCkKK3sKKwlQVUNIQVIgICAgICAgICAgICAgIHBWSUU7CisJVUNIQVIgICAgICAgICAgICAgICBsZW47CisJUEVJRF9TVFJVQ1QgICAgICAgICBwRWlkOworCUJPT0xFQU4JCQkJcmVzdWx0ID0gRkFMU0U7CisKKwlwVklFID0gcERhdGE7CisJbGVuCSA9IERhdGFMZW47CisJKk9mZnNldCA9IDA7CisKKwl3aGlsZSAobGVuID4gc2l6ZW9mKFJTTklFMikpCisJeworCQlwRWlkID0gKFBFSURfU1RSVUNUKSBwVklFOworCQkvLyBXUEEgUlNOIElFCisJCWlmICgocEVpZC0+RWlkID09IElFX1dQQSkgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkpKQorCQl7CisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSB8fCBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spICYmCisJCQkJKE5kaXNFcXVhbE1lbW9yeShwVklFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pKSAmJgorCQkJCShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpKQorCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGVja1JTTklFID09PiBXUEEvV1BBUFNLIFJTTiBJRSBtYXRjaGVkIGluIE1zZyAzLCBMZW5ndGgoJWQpIFxuIiwgKHBFaWQtPkxlbiArIDIpKSk7CisJCQkJCXJlc3VsdCA9IFRSVUU7CisJCQl9CisKKwkJCSpPZmZzZXQgKz0gKHBFaWQtPkxlbiArIDIpOworCQl9CisJCS8vIFdQQTIgUlNOIElFCisJCWVsc2UgaWYgKChwRWlkLT5FaWQgPT0gSUVfUlNOKSAmJiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0ICsgMiwgUlNOX09VSSwgMykpKQorCQl7CisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgJiYKKwkJCQkoTmRpc0VxdWFsTWVtb3J5KHBWSUUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbikpICYmCisJCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuID09IChwRWlkLT5MZW4gKyAyKSkpCisJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoZWNrUlNOSUUgPT0+IFdQQTIvV1BBMlBTSyBSU04gSUUgbWF0Y2hlZCBpbiBNc2cgMywgTGVuZ3RoKCVkKSBcbiIsIChwRWlkLT5MZW4gKyAyKSkpOworCQkJCQlyZXN1bHQgPSBUUlVFOworCQkJfQorCisJCQkqT2Zmc2V0ICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJcFZJRSArPSAocEVpZC0+TGVuICsgMik7CisJCWxlbiAgLT0gKHBFaWQtPkxlbiArIDIpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoZWNrUlNOSUUgPT0+IHNraXBfb2Zmc2V0KCVkKSBcbiIsICpPZmZzZXQpKTsKKworCXJldHVybiByZXN1bHQ7CisKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBQYXJzZSBLRVlEQVRBIGZpZWxkLiAgS0VZREFUQVtdIE1heSBjb250YWluIDIgUlNOIElFIGFuZCBvcHRpb25hbGx5IEdUSy4KKyAgICBHVEsgIGlzIGVuY2FwdHVsYXRlZCBpbiBLREUgZm9ybWF0IGF0ICBwLjgzIDgwMi4xMWkgRDEwCisKKyAgICBBcmd1bWVudHM6CisKKyAgICBSZXR1cm4gVmFsdWU6CisKKyAgICBOb3RlOgorICAgICAgICA4MDIuMTFpIEQxMAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBQYXJzZUtleURhdGEoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5RGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIEtleURhdGFMZW4sCisJSU4JVUNIQVIJCQliUGFpcmV3aXNlKQoreworICAgIFBLREVfRU5DQVAgICAgICAgICAgcEtERSA9IE5VTEw7CisgICAgUFVDSEFSICAgICAgICAgICAgICBwTXlLZXlEYXRhID0gcEtleURhdGE7CisgICAgVUNIQVIgICAgICAgICAgICAgICBLZXlEYXRhTGVuZ3RoID0gS2V5RGF0YUxlbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEdUS0xFTjsKKwlVQ0hBUgkJCQlza2lwX29mZnNldDsKKworCS8vIFZlcmlmeSBUaGUgUlNOIElFIGNvbnRhaW5lZCBpbiBQYWlyZXdpc2UtTXNnIDMgYW5kIHNraXAgaXQKKwlpZiAoYlBhaXJld2lzZSkKKyAgICB7CisJCS8vIENoZWNrIFJTTiBJRSB3aGV0aGVyIGl0IGlzIFdQQTIvV1BBMlBTSworCQlpZiAoIUNoZWNrUlNOSUUocEFkLCBwS2V5RGF0YSwgS2V5RGF0YUxlbiwgJnNraXBfb2Zmc2V0KSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUGFyc2VLZXlEYXRhID09PiBXUEEyL1dQQTJQU0sgUlNOIElFIG1pc21hdGNoZWQgXG4iKSk7CisJCQloZXhfZHVtcCgiR2V0IEtFWURBVEEgOiIsIHBLZXlEYXRhLCBLZXlEYXRhTGVuKTsKKwkJCXJldHVybiBGQUxTRTsKKyAgICAJfQorICAgIAllbHNlCisJCXsKKwkJCS8vIHNraXAgUlNOIElFCisJCQlwTXlLZXlEYXRhICs9IHNraXBfb2Zmc2V0OworCQkJS2V5RGF0YUxlbmd0aCAtPSBza2lwX29mZnNldDsKKworCQkJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQYXJzZUtleURhdGEgPT0+IFdQQTIvV1BBMlBTSyBSU04gSUUgbWF0Y2hlZCBpbiBNc2cgMywgTGVuZ3RoKCVkKSBcbiIsIHNraXBfb2Zmc2V0KSk7CisJCX0KKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlBhcnNlS2V5RGF0YSA9PT4gS2V5RGF0YUxlbmd0aCAlZCB3aXRob3V0IFJTTl9JRSBcbiIsIEtleURhdGFMZW5ndGgpKTsKKworCS8vIFBhcnNlIEVLRCBmb3JtYXQKKwlpZiAoS2V5RGF0YUxlbmd0aCA+PSA4KQorICAgIHsKKyAgICAgICAgcEtERSA9IChQS0RFX0VOQ0FQKSBwTXlLZXlEYXRhOworICAgIH0KKwllbHNlCisgICAgeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogS2V5RGF0YUxlbmd0aCBpcyB0b28gc2hvcnQgXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKworCS8vIFNhbml0eSBjaGVjayAtIHNoYXJlZCBrZXkgaW5kZXggc2hvdWxkIG5vdCBiZSAwCisJaWYgKHBLREUtPkdUS0VuY2FwLktpZCA9PSAwKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1I6IEdUSyBLZXkgaW5kZXggemVybyBcbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCS8vIFNhbml0eSBjaGVjayAtIEtFRCBsZW5ndGgKKwlpZiAoS2V5RGF0YUxlbmd0aCA8IChwS0RFLT5MZW4gKyAyKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBUaGUgbGVuIGZyb20gS0RFIGlzIHRvbyBzaG9ydCBcbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCS8vIEdldCBHVEsgbGVuZ3RoIC0gcmVmZXIgdG8gSUVFRSA4MDIuMTFpLTIwMDQgcC44MgorCUdUS0xFTiA9IHBLREUtPkxlbiAtNjsKKworCWlmIChHVEtMRU4gPCBMRU5fQUVTX0tFWSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsIEdUS0xFTikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiR1RLIEtleSB3aXRoIEtERSBmb3JtZXQgZ290IGluZGV4PSVkLCBsZW49JWQgXG4iLCBwS0RFLT5HVEtFbmNhcC5LaWQsIEdUS0xFTikpOworCisJLy8gVXBkYXRlIEdUSworCS8vIHNldCBrZXkgbWF0ZXJpYWwsIFR4TWljIGFuZCBSeE1pYyBmb3IgV1BBUFNLCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuR1RLLCBwS0RFLT5HVEtFbmNhcC5HVEssIDMyKTsKKwlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSBwS0RFLT5HVEtFbmNhcC5LaWQ7CisKKwkvLyBVcGRhdGUgc2hhcmVkIGtleSB0YWJsZQorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksIHBLREUtPkdUS0VuY2FwLkdUSywgTEVOX1RLSVBfRUspOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMsICZwS0RFLT5HVEtFbmNhcC5HVEtbMTZdLCBMRU5fVEtJUF9SWE1JQ0spOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsICZwS0RFLT5HVEtFbmNhcC5HVEtbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJLy8gVXBkYXRlIFNoYXJlZCBLZXkgQ2lwaGVyQWxnCisJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisKKwlyZXR1cm4gVFJVRTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2lzY28gQ0NLTSBQUkYgZnVuY3Rpb24KKworCUFyZ3VtZW50czoKKwkJa2V5CQkJCUNpc2NvIEJhc2UgVHJhbnNpZW50IEtleSAoQlRLKQorCQlrZXlfbGVuCQkJVGhlIGtleSBsZW5ndGggb2YgdGhlIEJUSworCQlkYXRhCQkJUnVxdWVzdCBOdW1iZXIoUk4pICsgQlNTSUQKKwkJZGF0YV9sZW4JCVRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKwkJb3V0cHV0CQkJU3RvcmUgZm9yIFBUSyhQYWlyd2lzZSB0cmFuc2llbnQga2V5cykKKwkJbGVuCQkJCVRoZSBsZW5ndGggb2YgdGhlIG91dHB1dAorCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKwkJODAyLjFpCUFubmV4IEYuOQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDQ0tNUFJGKAorCUlOCVVDSEFSCSprZXksCisJSU4JSU5UCQlrZXlfbGVuLAorCUlOCVVDSEFSCSpkYXRhLAorCUlOCUlOVAkJZGF0YV9sZW4sCisJT1VUCVVDSEFSCSpvdXRwdXQsCisJSU4JSU5UCQlsZW4pCit7CisJSU5UCQlpOworCVVDSEFSCWlucHV0WzEwMjRdOworCUlOVAkJY3VycmVudGluZGV4ID0gMDsKKwlJTlQJCXRvdGFsX2xlbjsKKworCU5kaXNNb3ZlTWVtb3J5KGlucHV0LCBkYXRhLCBkYXRhX2xlbik7CisJdG90YWxfbGVuID0gZGF0YV9sZW47CisJaW5wdXRbdG90YWxfbGVuXSA9IDA7CisJdG90YWxfbGVuKys7CisJZm9yCShpID0gMDsJaSA8CShsZW4gKyAxOSkgLyAyMDsgaSsrKQorCXsKKwkJSE1BQ19TSEExKGlucHV0LCB0b3RhbF9sZW4sCWtleSwga2V5X2xlbiwgJm91dHB1dFtjdXJyZW50aW5kZXhdKTsKKwkJY3VycmVudGluZGV4ICs9CTIwOworCQlpbnB1dFt0b3RhbF9sZW4gLSAxXSsrOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgTUlDIGVycm9yIGluZGljYXRpb24gYW5kIHJlY29yZCBNSUMgZXJyb3IgdGltZXIuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwV3BhS2V5IAkJUG9pbnRlciB0byB0aGUgV1BBIGtleSBzdHJ1Y3R1cmUKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QUmVwb3J0TWljRXJyb3IoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUENJUEhFUl9LRVkgCXBXcGFLZXkpCit7CisJVUxPTkcJTm93OworICAgIFVDSEFSICAgdW5pY2FzdEtleSA9IChwV3BhS2V5LT5UeXBlID09IFBBSVJXSVNFX0tFWSA/IDE6MCk7CisKKwkvLyBSZWNvcmQgTGFzdCBNSUMgZXJyb3IgdGltZSBhbmQgY291bnQKKwlOb3cgPSBqaWZmaWVzOworCWlmIChwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPT0gMCkKKwl7CisJCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCsrOworCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gTm93OworICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCA4KTsKKwl9CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuTWljRXJyQ250ID09IDEpCisJeworCQlpZiAoKHBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgKyAoNjAgKiBPU19IWikpIDwgTm93KQorCQl7CisJCQkvLyBVcGRhdGUgTGFzdCBNSUMgZXJyb3IgdGltZSwgdGhpcyBkaWQgbm90IHZpb2xhdGUgdHdvIE1JQyBlcnJvcnMgd2l0aGluIDYwIHNlY29uZHMKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSBOb3c7CisJCX0KKwkJZWxzZQorCQl7CisKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSBOb3c7CisJCQkvLyBWaW9sYXRlIE1JQyBlcnJvciBjb3VudHMsIE1JQyBjb3VudGVybWVhc3VyZXMga2lja3MgaW4KKwkJCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCsrOworCQkJLy8gV2Ugc2hhbGwgYmxvY2sgYWxsIHJlY2VwdGlvbgorCQkJLy8gV2Ugc2hhbGwgY2xlYW4gYWxsIFR4IHJpbmcgYW5kIGRpc2Fzc29pY2F0ZSBmcm9tIEFQIGFmdGVyIG5leHQgRUFQT0wgZnJhbWUKKwkJCS8vCisJCQkvLyBObyBuZWNlc3NhcnkgdG8gY2xlYW4gYWxsIFR4IHJpbmcsIG9uIFJUTVBIYXJkVHJhbnNtaXQgd2lsbCBzdG9wIHNlbmRpbmcgbm9uLTgwMi4xWCBFQVBPTCBwYWNrZXRzCisJCQkvLyBpZiBwQWQtPlN0YUNmZy5NaWNFcnJDbnQgZ3JlYXRlciB0aGFuIDIuCisJCQkvLworCQkJLy8gUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKKwkJCS8vIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7CisJCQkvLyBSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOworCQkJLy8gUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKKwkJCS8vIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsKKwkJfQorCX0KKwllbHNlCisJeworCQkvLyBNSUMgZXJyb3IgY291bnQgPj0gMgorCQkvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuCisJCTsKKwl9CisgICAgTWxtZUVucXVldWUocEFkLAorCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCU9JRF84MDJfMTFfTUlDX0ZBSUxVUkVfUkVQT1JUX0ZSQU1FLAorCQkJCTEsCisJCQkJJnVuaWNhc3RLZXkpOworCisgICAgaWYgKHBBZC0+U3RhQ2ZnLk1pY0VyckNudCA9PSAyKQorICAgIHsKKyAgICAgICAgUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy5XcGFEaXNhc3NvY0FuZEJsb2NrQXNzb2NUaW1lciwgMTAwKTsKKyAgICB9Cit9CisKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNkZWZpbmUJTEVOR1RIX0VBUF9IICAgIDQKKy8vIElmIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBFQVAtUGFja2V0ICxmaW5kIG91dCBpdHMgRUFQLUNvZGUgKFJlcXVlc3QoMHgwMSksIFJlc3BvbnNlKDB4MDIpLCBTdWNjZXNzKDB4MDMpLCBGYWlsdXJlKDB4MDQpKS4KK0lOVAkgICAgV3BhQ2hlY2tFYXBDb2RlKAorCUlOICBQUlRNUF9BREFQVEVSICAgCQlwQWQsCisJSU4gIFBVQ0hBUgkJCQlwRnJhbWUsCisJSU4gIFVTSE9SVAkJCQlGcmFtZUxlbiwKKwlJTiAgVVNIT1JUCQkJCU9mZlNldCkKK3sKKworCVBVQ0hBUglwRGF0YTsKKwlJTlQJcmVzdWx0ID0gMDsKKworCWlmKCBGcmFtZUxlbiA8IE9mZlNldCArIExFTkdUSF9FQVBPTF9IICsgTEVOR1RIX0VBUF9IICkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXBEYXRhID0gcEZyYW1lICsgT2ZmU2V0OyAvLyBza2lwIG9mZnNldCBieXRlcworCisJaWYoKihwRGF0YSsxKSA9PSBFQVBQYWNrZXQpIAkvLyA4MDIuMXggaGVhZGVyIC0gUGFja2V0IFR5cGUKKwl7CisJCSByZXN1bHQgPSAqKHBEYXRhKzQpOwkJLy8gRUFQIGhlYWRlciAtIENvZGUKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitWT0lEICAgIFdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICBiVW5pY2FzdCkKK3sKKyAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgY2hhciBjdXN0b21bSVdfQ1VTVE9NX01BWF0gPSB7MH07CisKKyAgICBzcHJpbnRmKGN1c3RvbSwgIk1MTUUtTUlDSEFFTE1JQ0ZBSUxVUkUuaW5kaWNhdGlvbiIpOworICAgIGlmIChiVW5pY2FzdCkKKyAgICAgICAgc3ByaW50ZihjdXN0b20sICIlcyB1bmljYXN0IiwgY3VzdG9tKTsKKyAgICB3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKGN1c3RvbSk7CisgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBjdXN0b20pOworCisgICAgcmV0dXJuOworfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworVk9JRAlXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdOworICAgIEJPT0xFQU4gICAgICAgICAgICAgYlVuaWNhc3Q7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUgLS0tLS0+XG4iKSk7CisKKyAgICBiVW5pY2FzdCA9IChFbGVtLT5Nc2dbMF0gPT0gMSA/IFRSVUU6RkFMU0UpOworCXBBZC0+U2VxdWVuY2UgPSAoKHBBZC0+U2VxdWVuY2UpICsgMSkgJiAoTUFYX1NFUV9OVU1CRVIpOworCisJLy8gaW5pdCA4MDIuMyBoZWFkZXIgYW5kIEZpbGwgUGFja2V0CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1Zlcgk9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZQk9IEVBUE9MS2V5OworCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisKKyAgICAvLyBSZXF1ZXN0IGZpZWxkIHByZXNlbnRlZAorICAgIFBhY2tldC5LZXlEZXNjLktleUluZm8uUmVxdWVzdCA9IDE7CisKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAyOworCX0KKwllbHNlCSAgLy8gVEtJUAorCXsKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gMTsKKwl9CisKKyAgICBQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSAoYlVuaWNhc3QgPyBQQUlSV0lTRUtFWSA6IEdST1VQS0VZKTsKKworCS8vIEtleU1pYyBmaWVsZCBwcmVzZW50ZWQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYyAgPSAxOworCisgICAgLy8gRXJyb3IgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5FcnJvciAgPSAxOworCisJLy8gVXBkYXRlIHBhY2tldCBsZW5ndGggYWZ0ZXIgZGVjaWRlIEtleSBkYXRhIHBheWxvYWQKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUU7CisKKwkvLyBLZXkgUmVwbGF5IENvdW50CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisgICAgaW5jX2J5dGVfYXJyYXkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7CisKKwkvLyBDb252ZXJ0IHRvIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCSooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSk7CisKKworCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVUNIQVIgKikmcE91dEJ1ZmZlcik7ICAvLyBhbGxvY2F0ZSBtZW1vcnkKKwlpZihwT3V0QnVmZmVyID09IE5VTEwpCisJeworCQlyZXR1cm47CisJfQorCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJICAgICAgICAgICAgICBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICZQYWNrZXQsCisJCSAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCisJLy8gUHJlcGFyZSBhbmQgRmlsbCBNSUMgdmFsdWUKKwlOZGlzWmVyb01lbW9yeShNaWMsIHNpemVvZihNaWMpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJewkvLyBBRVMKKyAgICAgICAgVUNIQVIgZGlnZXN0WzIwXSA9IHswfTsKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJewkvLyBUS0lQCisJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLlBUSywgIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sIE1pYyk7CisJfQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorICAgIAkgIAkJCUxFTkdUSF84MDJfMywgICAgIAkJCSZIZWFkZXI4MDJfMywKKyAgICAJCQkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgICZQYWNrZXQsCisgICAgCQkJCUVORF9PRl9BUkdTKTsKKworCS8vIG9weSBmcmFtZSB0byBUeCByaW5nIGFuZCBzZW5kIE1JQyBmYWlsdXJlIHJlcG9ydCBmcmFtZSB0byBhdXRoZW50aWNhdG9yCisJUlRNUFRvV2lyZWxlc3NTdGEocEFkLCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zLCAoUFVDSEFSKSZQYWNrZXQsIFBhY2tldC5Cb2R5X0xlblsxXSArIDQsIEZBTFNFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYU1pY0ZhaWx1cmVSZXBvcnRGcmFtZSA8LS0tLS1cbiIpKTsKK30KKworLyoqIGZyb20gd3BhX3N1cHBsaWNhbnQKKyAqIGluY19ieXRlX2FycmF5IC0gSW5jcmVtZW50IGFyYml0cmFyeSBsZW5ndGggYnl0ZSBhcnJheSBieSBvbmUKKyAqIEBjb3VudGVyOiBQb2ludGVyIHRvIGJ5dGUgYXJyYXkKKyAqIEBsZW46IExlbmd0aCBvZiB0aGUgY291bnRlciBpbiBieXRlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5jcmVtZW50cyB0aGUgbGFzdCBieXRlIG9mIHRoZSBjb3VudGVyIGJ5IG9uZSBhbmQgY29udGludWVzCisgKiByb2xsaW5nIG92ZXIgdG8gbW9yZSBzaWduaWZpY2FudCBieXRlcyBpZiB0aGUgYnl0ZSB3YXMgaW5jcmVtZW50ZWQgZnJvbQorICogMHhmZiB0byAweDAwLgorICovCit2b2lkIGluY19ieXRlX2FycmF5KFVDSEFSICpjb3VudGVyLCBpbnQgbGVuKQoreworCWludCBwb3MgPSBsZW4gLSAxOworCXdoaWxlIChwb3MgPj0gMCkgeworCQljb3VudGVyW3Bvc10rKzsKKwkJaWYgKGNvdW50ZXJbcG9zXSAhPSAwKQorCQkJYnJlYWs7CisJCXBvcy0tOworCX0KK30KKworVk9JRCBXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYygKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisgICAgUlRNUF9BREFQVEVSICAgICAgICAgICAgICAgICpwQWQgPSAoUFJUTVBfQURBUFRFUilGdW5jdGlvbkNvbnRleHQ7CisgICAgTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgIERpc2Fzc29jUmVxOworCisJLy8gZGlzYXNzb2MgZnJvbSBjdXJyZW50IEFQIGZpcnN0CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFJlcG9ydE1pY0Vycm9yIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCBhZnRlciBzZW5kaW5nIHNlY29uZCBjb250aW51b3VzIEVBUE9MIGZyYW1lXG4iKSk7CisJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIFJFQVNPTl9NSUNfRkFJTFVSRSk7CisJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwlwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9IFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YV9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTQ1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YV9pb2N0bC5jCkBAIC0wLDAgKzEsNzIwMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBzdGFfaW9jdGwuYworCisgICAgQWJzdHJhY3Q6CisgICAgSU9DVEwgcmVsYXRlZCBzdWJyb3V0aW5lcworCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBSb3J5IENoZW4gICAwMS0wMy0yMDAzICAgIGNyZWF0ZWQKKwlSb3J5IENoZW4gICAwMi0xNC0yMDA1ICAgIG1vZGlmeSB0byBzdXBwb3J0IFJUNjEKKyovCisKKyNpbmNsdWRlCSJydF9jb25maWcuaCIKKworI2lmZGVmIERCRworZXh0ZXJuIFVMT05HICAgIFJURGVidWdMZXZlbDsKKyNlbmRpZgorCisjZGVmaW5lIE5SX1dFUF9LRVlTIAkJCQk0CisjZGVmaW5lIFdFUF9TTUFMTF9LRVlfTEVOIAkJCSg0MC84KQorI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTiAJCQkoMTA0LzgpCisKKyNkZWZpbmUgR1JPVVBfS0VZX05PICAgICAgICAgICAgICAgIDQKKworZXh0ZXJuIFVDSEFSICAgIENpcGhlcldwYTJUZW1wbGF0ZVtdOworZXh0ZXJuIFVDSEFSICAgIENpcGhlcldwYVBza1RraXBbXTsKK2V4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGFQc2tUa2lwTGVuOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JUX1ZFUlNJT05fSU5GT3sKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uVzsKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uWDsKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uWTsKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uWjsKKyAgICBVSU5UICAgICAgICBEcml2ZXJCdWlsZFllYXI7CisgICAgVUlOVCAgICAgICAgRHJpdmVyQnVpbGRNb250aDsKKyAgICBVSU5UICAgICAgICBEcml2ZXJCdWlsZERheTsKK30gUlRfVkVSU0lPTl9JTkZPLCAqUFJUX1ZFUlNJT05fSU5GTzsKKworc3RydWN0IGl3X3ByaXZfYXJncyBwcml2dGFiW10gPSB7Cit7IFJUUFJJVl9JT0NUTF9TRVQsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgMCwKKyAgInNldCJ9LAorCit7IFJUUFJJVl9JT0NUTF9TSE9XLCAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAiIn0sCit7IFJUUFJJVl9JT0NUTF9TSE9XLCBJV19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssCisgICIifSwKKy8qIC0tLSBzdWItaW9jdGxzIGRlZmluaXRpb25zIC0tLSAqLworICAgIHsgU0hPV19DT05OX1NUQVRVUywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJjb25uU3RhdHVzIiB9LAorCXsgU0hPV19EUlZJRVJfVkVSSU9OLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgImRyaXZlclZlciIgfSwKKyAgICB7IFNIT1dfQkFfSU5GTywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJiYWluZm8iIH0sCisJeyBTSE9XX0RFU0NfSU5GTywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJkZXNjaW5mbyIgfSwKKyAgICB7IFJBSU9fT0ZGLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgInJhZGlvX29mZiIgfSwKKwl7IFJBSU9fT04sCisJICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAicmFkaW9fb24iIH0sCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJeyBTSE9XX0RMU19FTlRSWV9JTkZPLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgImRsc2VudHJ5aW5mbyIgfSwKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl7IFNIT1dfQ0ZHX1ZBTFVFLAorCSAgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAic2hvdyIgfSwKKy8qIC0tLSBzdWItaW9jdGxzIHJlbGF0aW9ucyAtLS0gKi8KKworI2lmZGVmIERCRworeyBSVFBSSVZfSU9DVExfQkJQLAorICBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAiYmJwIn0sCit7IFJUUFJJVl9JT0NUTF9NQUMsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LAorICAibWFjIn0sCisjaWZkZWYgUlQzMHh4Cit7IFJUUFJJVl9JT0NUTF9SRiwKKyAgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywKKyAgInJmIn0sCisjZW5kaWYgLy8gUlQzMHh4IC8vCit7IFJUUFJJVl9JT0NUTF9FMlAsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LAorICAiZTJwIn0sCisjZW5kaWYgIC8qIERCRyAqLworCit7IFJUUFJJVl9JT0NUTF9TVEFUSVNUSUNTLAorICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAic3RhdCJ9LAoreyBSVFBSSVZfSU9DVExfR1NJVEVTVVJWRVksCisgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwKKyAgImdldF9zaXRlX3N1cnZleSJ9LAorCisKK307CisKK0lOVCBTZXRfU1NJRF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCisjaWZkZWYgV01NX1NVUFBPUlQKK0lOVAlTZXRfV21tQ2FwYWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYKKworSU5UIFNldF9OZXR3b3JrVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0F1dGhNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKK0lOVCBTZXRfRW5jcnlwVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0RlZmF1bHRLZXlJRF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0tleTFfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9LZXkyX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKK0lOVCBTZXRfS2V5M19Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0tleTRfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9XUEFQU0tfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworCitJTlQgU2V0X1BTTW9kZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorSU5UIFNldF9XcGFfU3VwcG9ydCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIERCRworCitWT0lEIFJUTVBJb2N0bE1BQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRCBSVE1QSW9jdGxFMlBST00oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgc3RydWN0IGl3cmVxICAgICp3cnEpOworCisjaWZkZWYgUlQzMHh4CitWT0lEIFJUTVBJb2N0bFJGKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIHN0cnVjdCBpd3JlcSAgICAqd3JxKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNlbmRpZiAvLyBEQkcgLy8KKworCitORElTX1NUQVRVUyBSVE1QV1BBTm9uZUFkZEtleVByb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4JUFZPSUQJCQlwQnVmKTsKKworSU5UIFNldF9GcmFnVGVzdF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQgU2V0X1RHbldpZmlUZXN0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitJTlQgU2V0X0xvbmdSZXRyeUxpbWl0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X1Nob3J0UmV0cnlMaW1pdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKK0lOVCBTZXRfSWVlZTgwMjExZENsaWVudE1vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCitJTlQgU2V0X0NhcnJpZXJEZXRlY3RfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCitzdGF0aWMgc3RydWN0IHsKKwlDSEFSICpuYW1lOworCUlOVCAoKnNldF9wcm9jKShQUlRNUF9BREFQVEVSIHBBZGFwdGVyLCBQVUNIQVIgYXJnKTsKK30gKlBSVE1QX1BSSVZBVEVfU0VUX1BST0MsIFJUTVBfUFJJVkFURV9TVVBQT1JUX1BST0NbXSA9IHsKKwl7IkRyaXZlclZlcnNpb24iLAkJCQlTZXRfRHJpdmVyVmVyc2lvbl9Qcm9jfSwKKwl7IkNvdW50cnlSZWdpb24iLAkJCQlTZXRfQ291bnRyeVJlZ2lvbl9Qcm9jfSwKKwl7IkNvdW50cnlSZWdpb25BQmFuZCIsCQkJU2V0X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jfSwKKwl7IlNTSUQiLAkJCQkJCVNldF9TU0lEX1Byb2N9LAorCXsiV2lyZWxlc3NNb2RlIiwJCQkJU2V0X1dpcmVsZXNzTW9kZV9Qcm9jfSwKKwl7IlR4QnVyc3QiLAkJCQkJU2V0X1R4QnVyc3RfUHJvY30sCisJeyJUeFByZWFtYmxlIiwJCQkJU2V0X1R4UHJlYW1ibGVfUHJvY30sCisJeyJUeFBvd2VyIiwJCQkJCVNldF9UeFBvd2VyX1Byb2N9LAorCXsiQ2hhbm5lbCIsCQkJCQlTZXRfQ2hhbm5lbF9Qcm9jfSwKKwl7IkJHUHJvdGVjdGlvbiIsCQkJCVNldF9CR1Byb3RlY3Rpb25fUHJvY30sCisJeyJSVFNUaHJlc2hvbGQiLAkJCQlTZXRfUlRTVGhyZXNob2xkX1Byb2N9LAorCXsiRnJhZ1RocmVzaG9sZCIsCQkJCVNldF9GcmFnVGhyZXNob2xkX1Byb2N9LAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXsiSHRCdyIsCQkgICAgICAgICAgICAgICAgU2V0X0h0QndfUHJvY30sCisJeyJIdE1jcyIsCQkgICAgICAgICAgICAgICAgU2V0X0h0TWNzX1Byb2N9LAorCXsiSHRHaSIsCQkgICAgICAgICAgICAgICAgU2V0X0h0R2lfUHJvY30sCisJeyJIdE9wTW9kZSIsCQkgICAgICAgICAgICBTZXRfSHRPcE1vZGVfUHJvY30sCisJeyJIdEV4dGNoYSIsCQkgICAgICAgICAgICBTZXRfSHRFeHRjaGFfUHJvY30sCisJeyJIdE1wZHVEZW5zaXR5IiwJCSAgICAgICAgU2V0X0h0TXBkdURlbnNpdHlfUHJvY30sCisJeyJIdEJhV2luU2l6ZSIsCQkgICAgICAgIAlTZXRfSHRCYVdpblNpemVfUHJvY30sCisJeyJIdFJkZyIsCQkgICAgICAgIAkJU2V0X0h0UmRnX1Byb2N9LAorCXsiSHRBbXNkdSIsCQkgICAgICAgIAkJU2V0X0h0QW1zZHVfUHJvY30sCisJeyJIdEF1dG9CYSIsCQkgICAgICAgIAlTZXRfSHRBdXRvQmFfUHJvY30sCisJeyJIdEJhRGVjbGluZSIsCQkJCQlTZXRfQkFEZWNsaW5lX1Byb2N9LAorCXsiSHRQcm90ZWN0IiwJCSAgICAgICAgCVNldF9IdFByb3RlY3RfUHJvY30sCisJeyJIdE1pbW9QcyIsCQkgICAgICAgIAlTZXRfSHRNaW1vUHNfUHJvY30sCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJeyJQa3RBZ2dyZWdhdGUiLAkJCQlTZXRfUGt0QWdncmVnYXRlX1Byb2N9LAorI2VuZGlmCisKKyNpZmRlZiBXTU1fU1VQUE9SVAorCXsiV21tQ2FwYWJsZSIsCQkJCQlTZXRfV21tQ2FwYWJsZV9Qcm9jfSwKKyNlbmRpZgorCXsiSUVFRTgwMjExSCIsCQkJCQlTZXRfSUVFRTgwMjExSF9Qcm9jfSwKKyAgICB7Ik5ldHdvcmtUeXBlIiwgICAgICAgICAgICAgICAgIFNldF9OZXR3b3JrVHlwZV9Qcm9jfSwKKwl7IkF1dGhNb2RlIiwJCQkJCVNldF9BdXRoTW9kZV9Qcm9jfSwKKwl7IkVuY3J5cFR5cGUiLAkJCQkJU2V0X0VuY3J5cFR5cGVfUHJvY30sCisJeyJEZWZhdWx0S2V5SUQiLAkJCQlTZXRfRGVmYXVsdEtleUlEX1Byb2N9LAorCXsiS2V5MSIsCQkJCQkJU2V0X0tleTFfUHJvY30sCisJeyJLZXkyIiwJCQkJCQlTZXRfS2V5Ml9Qcm9jfSwKKwl7IktleTMiLAkJCQkJCVNldF9LZXkzX1Byb2N9LAorCXsiS2V5NCIsCQkJCQkJU2V0X0tleTRfUHJvY30sCisJeyJXUEFQU0siLAkJCQkJCVNldF9XUEFQU0tfUHJvY30sCisJeyJSZXNldENvdW50ZXIiLAkJCQlTZXRfUmVzZXRTdGF0Q291bnRlcl9Qcm9jfSwKKwl7IlBTTW9kZSIsICAgICAgICAgICAgICAgICAgICAgIFNldF9QU01vZGVfUHJvY30sCisjaWZkZWYgREJHCisJeyJEZWJ1ZyIsCQkJCQkJU2V0X0RlYnVnX1Byb2N9LAorI2VuZGlmCisKKyNpZmRlZiBSQUxJTktfQVRFCisJeyJBVEUiLAkJCQkJCQlTZXRfQVRFX1Byb2N9LAorCXsiQVRFREEiLAkJCQkJCVNldF9BVEVfREFfUHJvY30sCisJeyJBVEVTQSIsCQkJCQkJU2V0X0FURV9TQV9Qcm9jfSwKKwl7IkFURUJTU0lEIiwJCQkJCVNldF9BVEVfQlNTSURfUHJvY30sCisJeyJBVEVDSEFOTkVMIiwJCQkJCVNldF9BVEVfQ0hBTk5FTF9Qcm9jfSwKKwl7IkFURVRYUE9XMCIsCQkJCQlTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jfSwKKwl7IkFURVRYUE9XMSIsCQkJCQlTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jfSwKKwl7IkFURVRYQU5UIiwJCQkJCVNldF9BVEVfVFhfQW50ZW5uYV9Qcm9jfSwKKwl7IkFURVJYQU5UIiwJCQkJCVNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jfSwKKwl7IkFURVRYRlJFUU9GRlNFVCIsCQkJCVNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jfSwKKwl7IkFURVRYQlciLAkJCQkJCVNldF9BVEVfVFhfQldfUHJvY30sCisJeyJBVEVUWExFTiIsCQkJCQlTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jfSwKKwl7IkFURVRYQ05UIiwJCQkJCVNldF9BVEVfVFhfQ09VTlRfUHJvY30sCisJeyJBVEVUWE1DUyIsCQkJCQlTZXRfQVRFX1RYX01DU19Qcm9jfSwKKwl7IkFURVRYTU9ERSIsCQkJCQlTZXRfQVRFX1RYX01PREVfUHJvY30sCisJeyJBVEVUWEdJIiwJCQkJCQlTZXRfQVRFX1RYX0dJX1Byb2N9LAorCXsiQVRFUlhGRVIiLAkJCQkJU2V0X0FURV9SWF9GRVJfUHJvY30sCisJeyJBVEVSUkYiLAkJCQkJCVNldF9BVEVfUmVhZF9SRl9Qcm9jfSwKKwl7IkFURVdSRjEiLAkJCQkJCVNldF9BVEVfV3JpdGVfUkYxX1Byb2N9LAorCXsiQVRFV1JGMiIsCQkJCQkJU2V0X0FURV9Xcml0ZV9SRjJfUHJvY30sCisJeyJBVEVXUkYzIiwJCQkJCQlTZXRfQVRFX1dyaXRlX1JGM19Qcm9jfSwKKwl7IkFURVdSRjQiLAkJCQkJCVNldF9BVEVfV3JpdGVfUkY0X1Byb2N9LAorCXsiQVRFTERFMlAiLAkJCQkgICAgU2V0X0FURV9Mb2FkX0UyUF9Qcm9jfSwKKwl7IkFURVJFMlAiLAkJCQkJCVNldF9BVEVfUmVhZF9FMlBfUHJvY30sCisJeyJBVEVTSE9XIiwJCQkJCQlTZXRfQVRFX1Nob3dfUHJvY30sCisJeyJBVEVIRUxQIiwJCQkJCQlTZXRfQVRFX0hlbHBfUHJvY30sCisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCXsiVHhTdG9wIiwJCQkJCQlTZXRfVHhTdG9wX1Byb2N9LAorCXsiUnhTdG9wIiwJCQkJCQlTZXRfUnhTdG9wX1Byb2N9LAorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIHsiV3BhU3VwcG9ydCIsICAgICAgICAgICAgICAgICAgU2V0X1dwYV9TdXBwb3J0fSwKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKworCisJeyJGaXhlZFR4TW9kZSIsICAgICAgICAgICAgICAgICBTZXRfRml4ZWRUeE1vZGVfUHJvY30sCisjaWZkZWYgQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQKKwl7Ik9wTW9kZSIsCQkJCQkJU2V0X09wTW9kZV9Qcm9jfSwKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIHsiVEduV2lmaVRlc3QiLCAgICAgICAgICAgICAgICAgU2V0X1RHbldpZmlUZXN0X1Byb2N9LAorICAgIHsiRm9yY2VHRiIsCQkgICAgICAgIAkJU2V0X0ZvcmNlR0ZfUHJvY30sCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJeyJEbHNBZGRFbnRyeSIsCQkJCQlTZXRfRGxzQWRkRW50cnlfUHJvY30sCisJeyJEbHNUZWFyRG93bkVudHJ5IiwJCQlTZXRfRGxzVGVhckRvd25FbnRyeV9Qcm9jfSwKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl7IkxvbmdSZXRyeSIsCSAgICAgICAgCQlTZXRfTG9uZ1JldHJ5TGltaXRfUHJvY30sCisJeyJTaG9ydFJldHJ5IiwJICAgICAgICAJCVNldF9TaG9ydFJldHJ5TGltaXRfUHJvY30sCisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCXsiMTFkQ2xpZW50TW9kZSIsCQkJCVNldF9JZWVlODAyMTFkQ2xpZW50TW9kZV9Qcm9jfSwKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVAorCXsiQ2FycmllckRldGVjdCIsCQkJCVNldF9DYXJyaWVyRGV0ZWN0X1Byb2N9LAorI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLQorI2lmZGVmIFJUMzB4eAorCXsiZWZ1c2VGcmVlTnVtYmVyIiwJCQkJc2V0X2VGdXNlR2V0RnJlZUJsb2NrQ291bnRfUHJvY30sCisJeyJlZnVzZUR1bXAiLAkJCQkJc2V0X2VGdXNlZHVtcF9Qcm9jfSwKKwl7ImVmdXNlTG9hZEZyb21CaW4iLAkJCQlzZXRfZUZ1c2VMb2FkRnJvbUJpbl9Qcm9jfSwKKyNlbmRpZiAvLyBSVDMweHggLy8KKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZS0tPgorCXtOVUxMLH0KK307CisKKworVk9JRCBSVE1QQWRkS2V5KAorCUlOCVBSVE1QX0FEQVBURVIJICAgIHBBZCwKKwlJTglQTkRJU184MDJfMTFfS0VZICAgIHBLZXkpCit7CisJVUxPTkcJCQkJS2V5SWR4OworCU1BQ19UQUJMRV9FTlRSWSAgCSpwRW50cnk7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QQWRkS2V5IC0tLS0tLT5cbiIpKTsKKworCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJeworCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQorCQl7CisJCSAgICBpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5QTUssIDMyKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QTUssIHBLZXktPktleU1hdGVyaWFsLCBwS2V5LT5LZXlMZW5ndGgpOworICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgfQorCQkgICAgLy8gVXBkYXRlIFBUSworCQkgICAgTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworICAgICAgICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIHBLZXktPktleU1hdGVyaWFsLCBMRU5fVEtJUF9FSyk7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSyArIExFTl9US0lQX1RYTUlDSywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUsgKyBMRU5fVEtJUF9UWE1JQ0ssIExFTl9US0lQX1JYTUlDSyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisgICAgICAgIAlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgICAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworICAgICAgICAJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorICAgICAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisgICAgICAgIAllbHNlCisgICAgICAgIAkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGVzZSByZWxhdGVkIGluZm9ybWF0aW9uIHRvIE1BQ19UQUJMRV9FTlRSWQorICAgICAgICAJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBMRU5fVEtJUF9FSyk7CisgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuVHhNaWMsIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCBMRU5fVEtJUF9UWE1JQ0spOworICAgICAgICAJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGc7CisKKyAgICAgICAgCS8vIFVwZGF0ZSBwYWlyd2lzZSBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisgICAgICAgIAlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorICAgICAgICAJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCSAgMCwKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworICAgICAgICAJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisgICAgICAgIAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKyAgICAgICAgCQkJCQkJCSAgQlNTMCwKKyAgICAgICAgCQkJCQkJCSAgMCwKKyAgICAgICAgCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorICAgICAgICAJCQkJCQkJICBwRW50cnkpOworCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBzZXQgODAyLjF4IHBvcnQgY29udHJvbAorCSAgICAgICAgICAgIC8vcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSBDb25uZWN0ZWQgZm9yIEdVSQorICAgICAgICAgICAgICAgIHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisgICAgICAgICAgICB9CisJCX0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGUgR1RLCisgICAgICAgICAgICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAocEtleS0+S2V5SW5kZXggJiAweEZGKTsKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworICAgICAgICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCBwS2V5LT5LZXlNYXRlcmlhbCwgTEVOX1RLSVBfRUspOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSyArIExFTl9US0lQX1RYTUlDSywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljLCBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLICsgTEVOX1RLSVBfVFhNSUNLLCBMRU5fVEtJUF9SWE1JQ0spOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBVcGRhdGUgU2hhcmVkIEtleSBDaXBoZXJBbGcKKyAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisgICAgCQlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworICAgIAkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKyAgICAJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBncm91cCBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisgICAgICAgIAlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorICAgICAgICAJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5SeE1pYyk7CisKKyAgICAgICAgCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorICAgICAgICAJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisgICAgICAgIAkJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCQkgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKyAgICAgICAgCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisgICAgICAgIAkJCQkJCQkgIE5VTEwpOworCisgICAgICAgICAgICAvLyBzZXQgODAyLjF4IHBvcnQgY29udHJvbAorCSAgICAgICAgLy9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgICAgICAgICAvLyBJbmRpY2F0ZSBDb25uZWN0ZWQgZm9yIEdVSQorICAgICAgICAgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgfQorCX0KKwllbHNlCS8vIGR5bmFtaWMgV0VQIGZyb20gd3BhX3N1cHBsaWNhbnQKKwl7CisJCVVDSEFSCUNpcGhlckFsZzsKKyAgICAJUFVDSEFSCUtleTsKKworCQlpZihwS2V5LT5LZXlMZW5ndGggPT0gMzIpCisJCQlnb3RvIGVuZDsKKworCQlLZXlJZHggPSBwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7CisKKwkJaWYgKEtleUlkeCA8IDQpCisJCXsKKwkJCS8vIGl0IGlzIGEgZGVmYXVsdCBzaGFyZWQga2V5LCBmb3IgUGFpcndpc2Uga2V5IHNldHRpbmcKKwkJCWlmIChwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApCisJCQl7CisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwS2V5LT5CU1NJRCk7CisKKwkJCQlpZiAocEVudHJ5KQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEFkZEtleTogU2V0IFBhaXItd2lzZSBLZXlcbiIpKTsKKworCQkJCQkvLyBzZXQga2V5IG1hdGVyaWFsIGFuZCBrZXkgbGVuZ3RoCisgCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LktleUxlbiA9IChVQ0hBUilwS2V5LT5LZXlMZW5ndGg7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuS2V5LCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisKKwkJCQkJLy8gc2V0IENpcGhlciB0eXBlCisJCQkJCWlmIChwS2V5LT5LZXlMZW5ndGggPT0gNSkKKwkJCQkJCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJCQllbHNlCisJCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJCQkJLy8gQWRkIFBhaXItd2lzZSBrZXkgdG8gQXNpYworCQkJCQlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeSgKKwkJCQkJCXBBZCwKKwkJCQkJCXBFbnRyeS0+QWRkciwKKwkJCQkJCShVQ0hBUilwRW50cnktPkFpZCwKKyAgICAgICAgICAgICAgICAJCSZwRW50cnktPlBhaXJ3aXNlS2V5KTsKKworCQkJCQkvLyB1cGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGVudHJ5CisJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkoCisJCQkJCQlwQWQsCisJCQkJCQlCU1MwLAorCQkJCQkJS2V5SWR4LCAvLyBUaGUgdmFsdWUgbWF5IGJlIG5vdCB6ZXJvCisJCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZywKKwkJCQkJCXBFbnRyeSk7CisKKwkJCQl9CisJCQl9CisJCQllbHNlCisgICAgICAgICAgICB7CisJCQkJLy8gRGVmYXVsdCBrZXkgZm9yIHR4IChzaGFyZWQga2V5KQorCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworCisJCQkJLy8gc2V0IGtleSBtYXRlcmlhbCBhbmQga2V5IGxlbmd0aAorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gKFVDSEFSKSBwS2V5LT5LZXlMZW5ndGg7CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXksICZwS2V5LT5LZXlNYXRlcmlhbCwgcEtleS0+S2V5TGVuZ3RoKTsKKworCQkJCS8vIFNldCBDaXBlciB0eXBlCisJCQkJaWYgKHBLZXktPktleUxlbmd0aCA9PSA1KQorCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCQllbHNlCisJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKworICAgIAkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworICAgIAkJCUtleSA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5OworCisJCQkJLy8gU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljCisgICAgCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKwkJCQkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZQorCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCBLZXlJZHgsIENpcGhlckFsZywgTlVMTCk7CisKKwkJCX0KKwkJfQorCX0KK2VuZDoKKwlyZXR1cm47Cit9CisKK2NoYXIgKiBydHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCit7CisgICAgZm9yKDsgKnMgIT0gKGNoYXIpIGM7ICsrcykKKyAgICAgICAgaWYgKCpzID09ICdcMCcpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gKGNoYXIgKikgczsKK30KKworLyoKK1RoaXMgaXMgcmVxdWlyZWQgZm9yIExpbkVYMjAwNC9rZXJuZWwyLjYuNyB0byBwcm92aWRlIGl3bGlzdCBzY2FubmluZyBmdW5jdGlvbgorKi8KKworaW50CitydF9pb2N0bF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworLy8JUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworI2lmZGVmIFJUMjg3MAorCXN0cm5jcHkobmFtZSwgIlJUMjg3MCBXaXJlbGVzcyIsIElGTkFNU0laKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlpbnQgCWNoYW4gPSAtMTsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICByZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCisJaWYgKGZyZXEtPmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmKChmcmVxLT5lID09IDApICYmIChmcmVxLT5tIDw9IDEwMDApKQorCQljaGFuID0gZnJlcS0+bTsJLy8gU2V0dGluZyBieSBjaGFubmVsIG51bWJlcgorCWVsc2UKKwkJTUFQX0tIWl9UT19DSEFOTkVMX0lEKCAoZnJlcS0+bSAvMTAwKSAsIGNoYW4pOyAvLyBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAtIHNlYXJjaCB0aGUgdGFibGUgLCBsaWtlIDIuNDEyRywgMi40MjJHLAorCisgICAgaWYgKENoYW5uZWxTYW5pdHkocEFkYXB0ZXIsIGNoYW4pID09IFRSVUUpCisgICAgeworCXBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCA9IGNoYW47CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPT0+cnRfaW9jdGxfc2l3ZnJlcTo6U0lPQ1NJV0ZSRVFbY21kPTB4JXhdIChDaGFubmVsPSVkKVxuIiwgU0lPQ1NJV0ZSRVEsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CitpbnQgcnRfaW9jdGxfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisgICAgVklSVFVBTF9BREFQVEVSICpwVmlydHVhbEFkID0gTlVMTDsKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyOworCVVDSEFSIGNoOworCVVMT05HCW07CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJfQorCWVsc2UKKwl7CisJCXBWaXJ0dWFsQWQgPSBkZXYtPm1sX3ByaXY7CisJCXBBZGFwdGVyID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisKKwlpZiAocEFkYXB0ZXIgPT0gTlVMTCkKKwl7CisJCS8qIGlmIDFzdCBvcGVuIGZhaWwsIHBBZCB3aWxsIGJlIGZyZWU7CisJCSAgIFNvIHRoZSBuZXRfZGV2LT5tbF9wcml2IHdpbGwgYmUgTlVMTCBpbiAycmQgb3BlbiAqLworCQlyZXR1cm4gLUVORVRET1dOOworCX0KKworCQljaCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiPT0+cnRfaW9jdGxfZ2l3ZnJlcSAgJWRcbiIsIGNoKSk7CisKKyAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFooY2gsIG0pOworCWZyZXEtPm0gPSBtICogMTAwOworCWZyZXEtPmUgPSAxOworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfc2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCXN3aXRjaCAoKm1vZGUpCisJeworCQljYXNlIElXX01PREVfQURIT0M6CisJCQlTZXRfTmV0d29ya1R5cGVfUHJvYyhwQWRhcHRlciwgIkFkaG9jIik7CisJCQlicmVhazsKKwkJY2FzZSBJV19NT0RFX0lORlJBOgorCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJJbmZyYSIpOworCQkJYnJlYWs7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpCisgICAgICAgIGNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJNb25pdG9yIik7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PnJ0X2lvY3RsX3Npd21vZGU6OlNJT0NTSVdNT0RFICh1bmtub3duICVkKVxuIiwgKm1vZGUpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIFJlc2V0IFJhbGluayBzdXBwbGljYW50IHRvIG5vdCB1c2UsIGl0IHdpbGwgYmUgc2V0IHRvIHN0YXJ0IHdoZW4gVUkgc2V0IFBNSyBrZXkKKwlwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJaWYgKEFESE9DX09OKHBBZGFwdGVyKSkKKwkJKm1vZGUgPSBJV19NT0RFX0FESE9DOworICAgIGVsc2UgaWYgKElORlJBX09OKHBBZGFwdGVyKSkKKwkJKm1vZGUgPSBJV19NT0RFX0lORlJBOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjApKQorICAgIGVsc2UgaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKQorICAgIHsKKyAgICAgICAgKm1vZGUgPSBJV19NT0RFX01PTklUT1I7CisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgICAgICAqbW9kZSA9IElXX01PREVfQVVUTzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PnJ0X2lvY3RsX2dpd21vZGUobW9kZT0lZClcbiIsICptb2RlKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAgCXJldHVybiAtRU5FVERPV047CisgICAgCX0KKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCXUxNiB2YWw7CisJaW50IGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT0+cnRfaW9jdGxfZ2l3cmFuZ2VcbiIpKTsKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CisKKwlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpfHxBREhPQ19PTihwQWRhcHRlcikpCisJeworCQlyYW5nZS0+bWluX3BtcCA9IDEgKiAxMDI0OworCQlyYW5nZS0+bWF4X3BtcCA9IDY1NTM1ICogMTAyNDsKKwkJcmFuZ2UtPm1pbl9wbXQgPSAxICogMTAyNDsKKwkJcmFuZ2UtPm1heF9wbXQgPSAxMDAwICogMTAyNDsKKwkJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwkJcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CisJCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8CisJCQlJV19QT1dFUl9VTklDQVNUX1IgfCBJV19QT1dFUl9BTExfUjsKKwl9CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxNDsKKworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAgcEFkYXB0ZXItPkNoYW5uZWxMaXN0TnVtOworCisJdmFsID0gMDsKKwlmb3IgKGkgPSAxOyBpIDw9IHJhbmdlLT5udW1fY2hhbm5lbHM7IGkrKykKKwl7CisJCXUzMiBtOworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBwQWRhcHRlci0+Q2hhbm5lbExpc3RbaS0xXS5DaGFubmVsOworCQlNQVBfQ0hBTk5FTF9JRF9UT19LSFoocEFkYXB0ZXItPkNoYW5uZWxMaXN0W2ktMV0uQ2hhbm5lbCwgbSk7CisJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IG0gKiAxMDA7IC8qIEhaICovCisKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKKwkJdmFsKys7CisJCWlmICh2YWwgPT0gSVdfTUFYX0ZSRVFVRU5DSUVTKQorCQkJYnJlYWs7CisJfQorCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOworCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7IC8qIHdoYXQgaXMgY29ycmVjdCBtYXg/IFRoaXMgd2FzIG5vdAorCQkJCQkqIGRvY3VtZW50ZWQgZXhhY3RseS4gQXQgbGVhc3QKKwkJCQkJKiA2OSBoYXMgYmVlbiBvYnNlcnZlZC4gKi8KKwlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOyAvKiBkQiAqLworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7IC8qIGRCICovCisKKwkvKiBXaGF0IHdvdWxkIGJlIHN1aXRhYmxlIHZhbHVlcyBmb3IgImF2ZXJhZ2UvdHlwaWNhbCIgcXVhbD8gKi8KKwlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDIwOworCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IC02MDsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAtOTU7CisJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsKKworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gTlJfV0VQX0tFWVM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKKwkvKiBJV19FTkNfQ0FQQV8qIGJpdCBmaWVsZCAqLworCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAorCQkJCQlJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCc3NpZDsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCWlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKQorICAgIHsKKyAgICAgICAgUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKyAgICB9CisKKyAgICAvLyB0ZWxsIENOVEwgc3RhdGUgbWFjaGluZSB0byBjYWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgpIGFmdGVyIGNvbXBsZXRpbmcKKyAgICAvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGluaXRpYXRlZCBieSBORElTLgorICAgIHBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7CisJLy8gUHJldmVudCB0byBjb25uZWN0IEFQIGFnYWluIGluIFNUQU1sbWVQZXJpb2RpY0V4ZWMKKwlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisKKyAgICBtZW1zZXQoQnNzaWQsIDAsIE1BQ19BRERSX0xFTik7CisgICAgbWVtY3B5KEJzc2lkLCBhcF9hZGRyLT5zYV9kYXRhLCBNQUNfQUREUl9MRU4pOworICAgIE1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorICAgICAgICAgICAgICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorICAgICAgICAgICAgICAgIE9JRF84MDJfMTFfQlNTSUQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKE5ESVNfODAyXzExX01BQ19BRERSRVNTKSwKKyAgICAgICAgICAgICAgICAoVk9JRCAqKSZCc3NpZCk7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJT0NUTDo6U0lPQ1NJV0FQICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorICAgICAgICBCc3NpZFswXSwgQnNzaWRbMV0sIEJzc2lkWzJdLCBCc3NpZFszXSwgQnNzaWRbNF0sIEJzc2lkWzVdKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCWlmIChJTkZSQV9PTihwQWRhcHRlcikgfHwgQURIT0NfT04ocEFkYXB0ZXIpKQorCXsKKwkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgJnBBZGFwdGVyLT5Db21tb25DZmcuQnNzaWQsIEVUSF9BTEVOKTsKKwl9CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIC8vIEFkZCBmb3IgUlQyODcwCisgICAgZWxzZSBpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKyAgICB7CisgICAgICAgIGFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKyAgICAgICAgbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsICZwQWRhcHRlci0+TWxtZUF1eC5Cc3NpZCwgRVRIX0FMRU4pOworICAgIH0KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU9DVEw6OlNJT0NHSVdBUCg9RU1QVFkpXG4iKSk7CisJCXJldHVybiAtRU5PVENPTk47CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbml0cyBhcmUgaW4gZGIgYWJvdmUgdGhlIG5vaXNlIGZsb29yLiBUaGF0IG1lYW5zIHRoZQorICogcnNzaSB2YWx1ZXMgcmVwb3J0ZWQgaW4gdGhlIHR4L3J4IGRlc2NyaXB0b3JzIGluIHRoZQorICogZHJpdmVyIGFyZSB0aGUgU05SIGV4cHJlc3NlZCBpbiBkYi4KKyAqCisgKiBJZiB5b3UgYXNzdW1lIHRoYXQgdGhlIG5vaXNlIGZsb29yIGlzIC05NSwgd2hpY2ggaXMgYW4KKyAqIGV4Y2VsbGVudCBhc3N1bXB0aW9uIDk5LjUgJSBvZiB0aGUgdGltZSwgdGhlbiB5b3UgY2FuCisgKiBkZXJpdmUgdGhlIGFic29sdXRlIHNpZ25hbCBsZXZlbCAoaS5lLiAtOTUgKyByc3NpKS4KKyAqIFRoZXJlIGFyZSBzb21lIG90aGVyIHNsaWdodCBmYWN0b3JzIHRvIHRha2UgaW50byBhY2NvdW50CisgKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgcnNzaSBtZWFzdXJlbWVudCBpcyBmcm9tIDExYiwKKyAqIDExZywgb3IgMTFhLiAgIFRoZXNlIGRpZmZlcmVuY2VzIGFyZSBhdCBtb3N0IDJkYiBhbmQKKyAqIGNhbiBiZSBkb2N1bWVudGVkLgorICoKKyAqIE5COiB2YXJpb3VzIGNhbGN1bGF0aW9ucyBhcmUgYmFzZWQgb24gdGhlIG9yaW5vY28vd2F2ZWxhbgorICogICAgIGRyaXZlcnMgZm9yIGNvbXBhdGliaWxpdHkKKyAqLworc3RhdGljIHZvaWQgc2V0X3F1YWxpdHkoUFJUTVBfQURBUFRFUiBwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19xdWFsaXR5ICppcSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyIHJzc2kpCit7CisJX191OCBDaGFubmVsUXVhbGl0eTsKKworCS8vIE5vcm1hbGl6ZSBSc3NpCisJaWYgKHJzc2kgPj0gLTUwKQorCQlDaGFubmVsUXVhbGl0eSA9IDEwMDsKKwllbHNlIGlmIChyc3NpID49IC04MCkgLy8gYmV0d2VlbiAtNTAgfiAtODBkYm0KKwkJQ2hhbm5lbFF1YWxpdHkgPSAoX191OCkoMjQgKyAoKHJzc2kgKyA4MCkgKiAyNikvMTApOworCWVsc2UgaWYgKHJzc2kgPj0gLTkwKSAgIC8vIGJldHdlZW4gLTgwIH4gLTkwZGJtCisgICAgICAgIENoYW5uZWxRdWFsaXR5ID0gKF9fdTgpKChyc3NpICsgOTApICogMjYpLzEwOworCWVsc2UKKwkJQ2hhbm5lbFF1YWxpdHkgPSAwOworCisgICAgaXEtPnF1YWwgPSAoX191OClDaGFubmVsUXVhbGl0eTsKKworICAgIGlxLT5sZXZlbCA9IChfX3U4KShyc3NpKTsKKyAgICBpcS0+bm9pc2UgPSAocEFkYXB0ZXItPkJicFdyaXRlTGF0Y2hbNjZdID4gcEFkYXB0ZXItPkJicFR1bmluZy5GYWxzZUNjYVVwcGVyVGhyZXNob2xkKSA/ICgoX191OClwQWRhcHRlci0+QmJwVHVuaW5nLkZhbHNlQ2NhVXBwZXJUaHJlc2hvbGQpIDogKChfX3U4KSBwQWRhcHRlci0+QmJwV3JpdGVMYXRjaFs2Nl0pOyAJLy8gbm9pc2UgbGV2ZWwgKGRCbSkKKyAgICBpcS0+bm9pc2UgKz0gMjU2IC0gMTQzOworICAgIGlxLT51cGRhdGVkID0gcEFkYXB0ZXItPml3X3N0YXRzLnF1YWwudXBkYXRlZDsKK30KKworaW50IHJ0X2lvY3RsX2l3YXBsaXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKyAJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCXN0cnVjdCBzb2NrYWRkciBhZGRyW0lXX01BWF9BUF07CisJc3RydWN0IGl3X3F1YWxpdHkgcXVhbFtJV19NQVhfQVBdOworCWludCBpOworCisgICAJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICBpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisJCWRhdGEtPmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworICAgICAgICAvL3JldHVybiAtRU5FVERPV047CisJfQorCisJZm9yIChpID0gMDsgaSA8SVdfTUFYX0FQIDsgaSsrKQorCXsKKwkJaWYgKGkgPj0gIHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yKQorCQkJYnJlYWs7CisJCWFkZHJbaV0uc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJbWVtY3B5KGFkZHJbaV0uc2FfZGF0YSwgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkLCBNQUNfQUREUl9MRU4pOworCQlzZXRfcXVhbGl0eShwQWRhcHRlciwgJnF1YWxbaV0sIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzc2kpOworCX0KKwlkYXRhLT5sZW5ndGggPSBpOworCW1lbWNweShleHRyYSwgJmFkZHIsIGkqc2l6ZW9mKGFkZHJbMF0pKTsKKwlkYXRhLT5mbGFncyA9IDE7CQkvKiBzaWduYWwgcXVhbGl0eSBwcmVzZW50IChzb3J0IG9mKSAqLworCW1lbWNweShleHRyYSArIGkqc2l6ZW9mKGFkZHJbMF0pLCAmcXVhbCwgaSpzaXplb2YocXVhbFtpXSkpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBTSU9DR0lXU0NBTgoraW50IHJ0X2lvY3RsX3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlVTE9ORwkJCQkJCQkJTm93OworCWludCBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisJCXJldHVybiAtRU5FVERPV047CisJfQorCisJaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIERyaXZlciBpcyBpbiBNb25pdG9yIE1vZGUgbm93ICEhIVxuIikpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwlpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQorCXsKKwkJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50U2NhbkNvdW50Kys7CisJfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworICAgIHBBZGFwdGVyLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IFRSVUU7CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuIDA7CisJZG97CisJCU5vdyA9IGppZmZpZXM7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCWlmICgocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKSAmJgorCQkJKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFNjYW5Db3VudCA+IDMpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgV3BhU3VwcGxpY2FudFNjYW5Db3VudCA+IDNcbiIpKTsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCQlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKSAmJgorCQkJKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJCShwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpICYmCisJCQkocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTGluayBVUCwgUG9ydCBOb3QgU2VjdXJlZCEgaWdub3JlIHRoaXMgc2V0OjpPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTlxuIikpOworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisJCXsKKwkJCVJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworCQl9CisKKwkJLy8gdGVsbCBDTlRMIHN0YXRlIG1hY2hpbmUgdG8gY2FsbCBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKSBhZnRlciBjb21wbGV0aW5nCisJCS8vIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuCisJCXBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7CisJCS8vIFJlc2V0IGFsbG93ZWQgc2NhbiByZXRyaWVzCisJCXBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDA7CisJCXBBZGFwdGVyLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OworCisJCU1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQlPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwKKwkJCTAsCisJCQlOVUxMKTsKKworCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZGFwdGVyKTsKKwl9d2hpbGUoMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJaW50IGk9MDsKKwljaGFyICpjdXJyZW50X2V2ID0gZXh0cmEsICpwcmV2aW91c19ldiA9IGV4dHJhOworCWNoYXIgKmVuZF9idWY7CisJY2hhciAqY3VycmVudF92YWwsIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl0gPSB7MH07CisjaWZuZGVmIElXRVZHRU5JRQorCWNoYXIgaWR4OworI2VuZGlmIC8vIElXRVZHRU5JRSAvLworCXN0cnVjdCBpd19ldmVudCBpd2U7CisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorICAgIHsKKwkJLyoKKwkJICogU3RpbGwgc2Nhbm5pbmcsIGluZGljYXRlIHRoZSBjYWxsZXIgc2hvdWxkIHRyeSBhZ2Fpbi4KKwkJICovCisJCXJldHVybiAtRUFHQUlOOworCX0KKworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpCisJeworCQlwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRTY2FuQ291bnQgPSAwOworCX0KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzTnIgPT0gMCkKKwl7CisJCWRhdGEtPmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworCX0KKworI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgIGlmIChkYXRhLT5sZW5ndGggPiAwKQorICAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBkYXRhLT5sZW5ndGg7CisgICAgZWxzZQorICAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworI2Vsc2UKKyAgICBlbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnI7IGkrKykKKwl7CisJCWlmIChjdXJyZW50X2V2ID49IGVuZF9idWYpCisgICAgICAgIHsKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisJCS8vTUFDIGFkZHJlc3MKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV0FQOworCQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCAmcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWQsIEVUSF9BTEVOKTsKKworICAgICAgICBwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvKgorCQlQcm90b2NvbDoKKwkJCWl0IHdpbGwgc2hvdyBzY2FubmVkIEFQJ3MgV2lyZWxlc3NNb2RlIC4KKwkJCWl0IG1pZ2h0IGJlCisJCQkJCTgwMi4xMWEKKwkJCQkJODAyLjExYS9uCisJCQkJCTgwMi4xMWcvbgorCQkJCQk4MDIuMTFiL2cvbgorCQkJCQk4MDIuMTFnCisJCQkJCTgwMi4xMWIvZworCQkqLworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV05BTUU7CisKKworCXsKKwkJUEJTU19FTlRSWSBwQnNzRW50cnk9JnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldOworCQlCT09MRUFOIGlzR29ubHk9RkFMU0U7CisJCWludCByYXRlQ250PTA7CisKKwkJaWYgKHBCc3NFbnRyeS0+Q2hhbm5lbD4xNCkKKwkJeworCQkJaWYgKHBCc3NFbnRyeS0+SHRDYXBhYmlsaXR5TGVuIT0wKQorCQkJCXN0cmNweShpd2UudS5uYW1lLCI4MDIuMTFhL24iKTsKKwkJCWVsc2UKKwkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYSIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCQlpZiBvbmUgb2Ygbm9uIEIgbW9kZSByYXRlIGlzIHNldCBzdXBwb3J0ZWQgcmF0ZSAuIGl0IG1lYW4gRyBvbmx5LgorCQkJKi8KKwkJCWZvciAocmF0ZUNudD0wO3JhdGVDbnQ8cEJzc0VudHJ5LT5TdXBSYXRlTGVuO3JhdGVDbnQrKykKKwkJCXsKKwkJCQkvKgorCQkJCQk2TWJwcygxNDApIDlNYnBzKDE0NikgYW5kID49MTJNYnBzKDE1MikgYXJlIHN1cHBvcnRlZCByYXRlICwgaXQgbWVhbiBHIG9ubHkuCisJCQkJKi8KKwkJCQlpZiAocEJzc0VudHJ5LT5TdXBSYXRlW3JhdGVDbnRdPT0xNDAgfHwgcEJzc0VudHJ5LT5TdXBSYXRlW3JhdGVDbnRdPT0xNDYgfHwgcEJzc0VudHJ5LT5TdXBSYXRlW3JhdGVDbnRdPj0xNTIpCisJCQkJCWlzR29ubHk9VFJVRTsKKwkJCX0KKworCQkJZm9yIChyYXRlQ250PTA7cmF0ZUNudDxwQnNzRW50cnktPkV4dFJhdGVMZW47cmF0ZUNudCsrKQorCQkJeworCQkJCWlmIChwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF09PTE0MCB8fCBwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF09PTE0NiB8fCBwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF0+PTE1MikKKwkJCQkJaXNHb25seT1UUlVFOworCQkJfQorCisKKwkJCWlmIChwQnNzRW50cnktPkh0Q2FwYWJpbGl0eUxlbiE9MCkKKwkJCXsKKwkJCQlpZiAoaXNHb25seT09VFJVRSkKKwkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWcvbiIpOworCQkJCWVsc2UKKwkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWIvZy9uIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGlzR29ubHk9PVRSVUUpCisJCQkJCXN0cmNweShpd2UudS5uYW1lLCI4MDIuMTFnIik7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKHBCc3NFbnRyeS0+U3VwUmF0ZUxlbj09NCAmJiBwQnNzRW50cnktPkV4dFJhdGVMZW49PTApCisJCQkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYiIpOworCQkJCQllbHNlCisJCQkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYi9nIik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJCXByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldgkgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisJCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworCSAgIAkJcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQlicmVhazsKKyNlbmRpZgorCisJCS8vRVNTSUQKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW47CisJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCisgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWQpOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvL05ldHdvcmsgVHlwZQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc1R5cGUgPT0gTmRpczgwMl8xMUlCU1MpCisJCXsKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQl9CisJCWVsc2UgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc1R5cGUgPT0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlKQorCQl7CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FVVE87CisJCX0KKwkJaXdlLmxlbiA9IElXX0VWX1VJTlRfTEVOOworCisgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICBJV19FVl9VSU5UX0xFTik7CisgICAgICAgIGlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQlicmVhazsKKyNlbmRpZgorCisJCS8vQ2hhbm5lbCBhbmQgRnJlcXVlbmN5CisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpIHx8IEFESE9DX09OKHBBZGFwdGVyKSkKKwkJCWl3ZS51LmZyZXEubSA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNoYW5uZWw7CisJCWVsc2UKKwkJCWl3ZS51LmZyZXEubSA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNoYW5uZWw7CisJCWl3ZS51LmZyZXEuZSA9IDA7CisJCWl3ZS51LmZyZXEuaSA9IDA7CisKKwkJcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworICAgICAgICAvL0FkZCBxdWFsaXR5IHN0YXRpc3RpY3MKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworICAgIAlpd2UuY21kID0gSVdFVlFVQUw7CisgICAgCWl3ZS51LnF1YWwubGV2ZWwgPSAwOworICAgIAlpd2UudS5xdWFsLm5vaXNlID0gMDsKKyAgICAgICAgc2V0X3F1YWxpdHkocEFkYXB0ZXIsICZpd2UudS5xdWFsLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc3NpKTsKKyAgICAJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJLy9FbmN5cHRpb24ga2V5CisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJCWlmIChDQVBfSVNfUFJJVkFDWV9PTiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQ2FwYWJpbGl0eUluZm8gKSkKKwkJCWl3ZS51LmRhdGEuZmxhZ3MgPUlXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCQllbHNlCisJCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKyAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsJml3ZSwgKGNoYXIgKilwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWyhpd2UudS5kYXRhLmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKS0xXS5LZXkpOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvL0JpdCBSYXRlCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVMZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIFVDSEFSIHRtcFJhdGUgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5TdXBSYXRlW3BBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVMZW4tMV07CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworICAgIAkJY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKKyAgICAgICAgICAgIGlmICh0bXBSYXRlID09IDB4ODIpCisgICAgICAgICAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICAxICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRtcFJhdGUgPT0gMHg4NCkKKyAgICAgICAgICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gIDIgKiAxMDAwMDAwOworICAgICAgICAgICAgZWxzZSBpZiAodG1wUmF0ZSA9PSAweDhCKQorICAgICAgICAgICAgICAgIGl3ZS51LmJpdHJhdGUudmFsdWUgPSAgNS41ICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRtcFJhdGUgPT0gMHg5NikKKyAgICAgICAgICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gIDExICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAJCSAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gICh0bXBSYXRlLzIpICogMTAwMDAwMDsKKworCQkJaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCisJCQkJY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsCisgICAgCQkJSVdfRVZfUEFSQU1fTEVOKTsKKworICAgICAgICAJaWYoKGN1cnJlbnRfdmFsLWN1cnJlbnRfZXYpPklXX0VWX0xDUF9MRU4pCisgICAgICAgICAgICAJY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOworICAgICAgICAJZWxzZQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKworI2lmZGVmIElXRVZHRU5JRQorCQkvL1dQQSBJRQorCQlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW4gPiAwKQorCQl7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJbWVtc2V0KCZjdXN0b21bMF0sIDAsIE1BWF9DVVNUT01fTEVOKTsKKwkJCW1lbWNweShjdXN0b20sICYocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVbMF0pLAorCQkJCQkJICAgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW4pOworCQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW47CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgY3VzdG9tKTsKKwkJCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisJCX0KKworCQkvL1dQQTIgSUUKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuID4gMCkKKyAgICAgICAgeworICAgICAgICAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCW1lbXNldCgmY3VzdG9tWzBdLCAwLCBNQVhfQ1VTVE9NX0xFTik7CisJCQltZW1jcHkoY3VzdG9tLCAmKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFWzBdKSwKKwkJCQkJCSAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuKTsKKwkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGN1c3RvbSk7CisJCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCSAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisjZWxzZQorICAgICAgICAvL1dQQSBJRQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIGlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbiA+IDApCisgICAgICAgIHsKKyAgICAJCU5kaXNaZXJvTWVtb3J5KCZpd2UsIHNpemVvZihpd2UpKTsKKwkJCW1lbXNldCgmY3VzdG9tWzBdLCAwLCBNQVhfQ1VTVE9NX0xFTik7CisgICAgCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKyAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFTGVuICogMikgKyA3OworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoY3VzdG9tLCAid3BhX2llPSIsIDcpOworICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbjsgaWR4KyspCisgICAgICAgICAgICAgICAgc3ByaW50ZihjdXN0b20sICIlcyUwMngiLCBjdXN0b20sIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFW2lkeF0pOworICAgICAgICAgICAgcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OworICAgIAkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICBjdXN0b20pOworICAgICAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQkgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIC8vV1BBMiBJRQorICAgICAgICBpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVMZW4gPiAwKQorICAgICAgICB7CisgICAgCQlOZGlzWmVyb01lbW9yeSgmaXdlLCBzaXplb2YoaXdlKSk7CisJCQltZW1zZXQoJmN1c3RvbVswXSwgMCwgTUFYX0NVU1RPTV9MRU4pOworICAgIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CisgICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRUxlbiAqIDIpICsgNzsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KGN1c3RvbSwgInJzbl9pZT0iLCA3KTsKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHNwcmludGYoY3VzdG9tLCAiJXMlMDJ4IiwgY3VzdG9tLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRVtpZHhdKTsKKyAgICAgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKyAgICAJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAgY3VzdG9tKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyNlbmRpZiAvLyBJV0VWR0VOSUUgLy8KKwl9CisKKwlkYXRhLT5sZW5ndGggPSBjdXJyZW50X2V2IC0gZXh0cmE7CisgICAgcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gRkFMU0U7CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IgLCgiPT09PnJ0X2lvY3RsX2dpd3NjYW4uICVkKCVkKSBCU1MgcmV0dXJuZWQsIGRhdGEtPmxlbmd0aCA9ICVkXG4iLGkgLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NOciwgZGF0YS0+bGVuZ3RoKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IHJ0X2lvY3RsX3Npd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKwlpZiAoZGF0YS0+ZmxhZ3MpCisJeworCQlQQ0hBUglwU3NpZFN0cmluZyA9IE5VTEw7CisKKwkJLy8gSW5jbHVkZXMgbnVsbCBjaGFyYWN0ZXIuCisJCWlmIChkYXRhLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUgKyAxKSkKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJcFNzaWRTdHJpbmcgPSAoQ0hBUiAqKSBrbWFsbG9jKE1BWF9MRU5fT0ZfU1NJRCsxLCBNRU1fQUxMT0NfRkxBRyk7CisJCWlmIChwU3NpZFN0cmluZykKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocFNzaWRTdHJpbmcsIE1BWF9MRU5fT0ZfU1NJRCsxKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBTc2lkU3RyaW5nLCBlc3NpZCwgZGF0YS0+bGVuZ3RoKTsKKwkJCWlmIChTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCBwU3NpZFN0cmluZykgPT0gRkFMU0UpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCWVsc2UKKwl7CisJCS8vIEFOWSBzc2lkCisJCWlmIChTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCAiIikgPT0gRkFMU0UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKyAgICB9CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJZGF0YS0+ZmxhZ3MgPSAxOworICAgIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICB7CisgICAgICAgIGRhdGEtPmxlbmd0aCAgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCJNZWRpYVN0YXRlIGlzIGNvbm5lY3RlZFxuIikpOworCQlkYXRhLT5sZW5ndGggPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWRMZW47CisJCW1lbWNweShlc3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWRMZW4pOworCX0KKyNpZmRlZiBSVDI4NzAKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgLy8gQWRkIGZvciBSVDI4NzAKKyAgICBlbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorICAgIHsKKyAgICAgICAgZGF0YS0+bGVuZ3RoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuOworCQltZW1jcHkoZXNzaWQsIHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuKTsKKwl9CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCWVsc2UKKwl7Ly90aGUgQU5ZIHNzaWQgd2FzIHNwZWNpZmllZAorCQlkYXRhLT5sZW5ndGggID0gMDsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiTWVkaWFTdGF0ZSBpcyBub3QgY29ubmVjdGVkLCBlc3NcbiIpKTsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgcnRfaW9jdGxfc2l3bmlja24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICByZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCWlmIChkYXRhLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQocEFkYXB0ZXItPm5pY2tuYW1lLCAwLCBJV19FU1NJRF9NQVhfU0laRSArIDEpOworCW1lbWNweShwQWRhcHRlci0+bmlja25hbWUsIG5pY2tuYW1lLCBkYXRhLT5sZW5ndGgpOworCisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKm5pY2tuYW1lKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlpZiAoZGF0YS0+bGVuZ3RoID4gc3RybGVuKHBBZGFwdGVyLT5uaWNrbmFtZSkgKyAxKQorCQlkYXRhLT5sZW5ndGggPSBzdHJsZW4ocEFkYXB0ZXItPm5pY2tuYW1lKSArIDE7CisJaWYgKGRhdGEtPmxlbmd0aCA+IDApIHsKKwkJbWVtY3B5KG5pY2tuYW1lLCBwQWRhcHRlci0+bmlja25hbWUsIGRhdGEtPmxlbmd0aC0xKTsKKwkJbmlja25hbWVbZGF0YS0+bGVuZ3RoLTFdID0gJ1wwJzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwl1MTYgdmFsOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICBpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIHJldHVybiAtRU5FVERPV047CisgICAgfQorCisJaWYgKHJ0cy0+ZGlzYWJsZWQpCisJCXZhbCA9IE1BWF9SVFNfVEhSRVNIT0xEOworCWVsc2UgaWYgKHJ0cy0+dmFsdWUgPCAwIHx8IHJ0cy0+dmFsdWUgPiBNQVhfUlRTX1RIUkVTSE9MRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAocnRzLT52YWx1ZSA9PSAwKQorCSAgICB2YWwgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKwllbHNlCisJCXZhbCA9IHJ0cy0+dmFsdWU7CisKKwlpZiAodmFsICE9IHBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkKQorCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA9IHZhbDsKKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJcnRzLT52YWx1ZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkOworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSBNQVhfUlRTX1RIUkVTSE9MRCk7CisJcnRzLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJdTE2IHZhbDsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICAJeworICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlpZiAoZnJhZy0+ZGlzYWJsZWQpCisJCXZhbCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwllbHNlIGlmIChmcmFnLT52YWx1ZSA+PSBNSU5fRlJBR19USFJFU0hPTEQgfHwgZnJhZy0+dmFsdWUgPD0gTUFYX0ZSQUdfVEhSRVNIT0xEKQorICAgICAgICB2YWwgPSBfX2NwdV90b19sZTE2KGZyYWctPnZhbHVlICYgfjB4MSk7IC8qIGV2ZW4gbnVtYmVycyBvbmx5ICovCisJZWxzZSBpZiAoZnJhZy0+dmFsdWUgPT0gMCkKKwkgICAgdmFsID0gTUFYX0ZSQUdfVEhSRVNIT0xEOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gdmFsOworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICAJeworICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlmcmFnLT52YWx1ZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQ7CisJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPT0gTUFYX0ZSQUdfVEhSRVNIT0xEKTsKKwlmcmFnLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfV0VQX0tFWV9TSVpFIDEzCisjZGVmaW5lIE1JTl9XRVBfS0VZX1NJWkUgNQoraW50IHJ0X2lvY3RsX3Npd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICAJeworICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlpZiAoKGVycS0+bGVuZ3RoID09IDApICYmCisgICAgICAgIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSkKKwl7CisJCXBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKyAgICAgICAgZ290byBkb25lOworCX0KKwllbHNlIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQgfHwgZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCXsKKwkgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworCQlwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworCQlwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKwkJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKKwkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ7CisgICAgCWVsc2UKKwkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCX0KKworICAgIGlmIChlcnEtPmxlbmd0aCA+IDApCisJeworCQlpbnQga2V5SWR4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIGtleSAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBNQVhfV0VQX0tFWV9TSVpFKQorCQl7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBDaGVjayBrZXkgaW5kZXggKi8KKwkJaWYgKChrZXlJZHggPCAwKSB8fCAoa2V5SWR4ID49IE5SX1dFUF9LRVlTKSkKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiPT0+cnRfaW9jdGxfc2l3ZW5jb2RlOjpXcm9uZyBrZXlJZHg9JWQhIFVzaW5nIGRlZmF1bHQga2V5IGluc3RlYWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlJZHgsIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisKKyAgICAgICAgICAgIC8vVXNpbmcgZGVmYXVsdCBrZXkKKwkJCWtleUlkeCA9IHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkOworICAgICAgICB9CisJCWVsc2UKKwkJeworCQkJcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQ9a2V5SWR4OworCQl9CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgIDE2KTsKKworCQlpZiAoZXJxLT5sZW5ndGggPT0gTUFYX1dFUF9LRVlfU0laRSkKKyAgICAgICAgeworCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IE1BWF9XRVBfS0VZX1NJWkU7CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKwkJfQorCQllbHNlIGlmIChlcnEtPmxlbmd0aCA9PSBNSU5fV0VQX0tFWV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTUlOX1dFUF9LRVlfU0laRTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCX0KKwkJZWxzZQorCQkJLyogRGlzYWJsZSB0aGUga2V5ICovCisJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gMDsKKworCQkvKiBDaGVjayBpZiB0aGUga2V5IGlzIG5vdCBtYXJrZWQgYXMgaW52YWxpZCAqLworCQlpZighKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpKQorCQl7CisJCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLworCQkJTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0cmEsIGVycS0+bGVuZ3RoKTsKKyAgICAgICAgfQorCX0KKyAgICBlbHNlCisJCQl7CisJCS8qIERvIHdlIHdhbnQgdG8ganVzdCBzZXQgdGhlIHRyYW5zbWl0IGtleSBpbmRleCA/ICovCisJCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJCWlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgNCkpCisgICAgICAgIHsKKwkJCXBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIGVsc2UKKwkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCisJCWlmKCFlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpCisJCXsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworZG9uZToKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT5ydF9pb2N0bF9zaXdlbmNvZGU6OmVycS0+ZmxhZ3M9JXhcbiIsZXJxLT5mbGFncykpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6QXV0aE1vZGU9JXhcbiIscEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6RGVmYXVsdEtleUlkPSV4LCBLZXlMZW4gPSAlZFxuIixwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCAsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbikpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6V2VwU3RhdHVzPSV4XG4iLHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludAorcnRfaW9jdGxfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlpbnQga2lkOworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKwlraWQgPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5ydF9pb2N0bF9naXdlbmNvZGUgJWRcbiIsIGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpKTsKKworCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJeworCQllcnEtPmxlbmd0aCA9IDA7CisJCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJfQorCWVsc2UgaWYgKChraWQgPiAwKSAmJiAoa2lkIDw9NCkpCisJeworCQkvLyBjb3B5IHdlcCBrZXkKKwkJZXJxLT5mbGFncyA9IGtpZCA7CQkJLyogTkI6IGJhc2UgMSAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tpZC0xXS5LZXlMZW4pCisJCQllcnEtPmxlbmd0aCA9IHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2lkLTFdLktleUxlbjsKKwkJbWVtY3B5KGtleSwgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtraWQtMV0uS2V5LCBlcnEtPmxlbmd0aCk7CisJCS8vaWYgKChraWQgPT0gcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVsdEtleUlkKSkKKwkJLy9lcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwkvKiBYWFggKi8KKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsJCS8qIFhYWCAqLworCQllbHNlCisJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwkJLyogWFhYICovCisKKwl9CisJZWxzZSBpZiAoa2lkID09IDApCisJeworCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpCisJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOwkJLyogWFhYICovCisJCWVsc2UKKwkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CQkvKiBYWFggKi8KKwkJZXJxLT5sZW5ndGggPSBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW47CisJCW1lbWNweShrZXksIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwgZXJxLT5sZW5ndGgpOworCQkvLyBjb3B5IGRlZmF1bHQga2V5IElECisJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKKwkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CQkvKiBYWFggKi8KKwkJZWxzZQorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsJCS8qIFhYWCAqLworCQllcnEtPmZsYWdzID0gcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgKyAxOwkJCS8qIE5COiBiYXNlIDEgKi8KKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsJLyogWFhYICovCisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludAorcnRfaW9jdGxfc2V0cGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSB2b2lkICp3LCBjaGFyICpleHRyYSkKK3sKKyAgICBWSVJUVUFMX0FEQVBURVIJKnBWaXJ0dWFsQWQgPSBOVUxMOworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXI7CisJUE9TX0NPT0tJRSBwT2JqOworCWNoYXIgKnRoaXNfY2hhciA9IGV4dHJhOworCWNoYXIgKnZhbHVlOworCWludCAgU3RhdHVzPTA7CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJfQorCWVsc2UKKwl7CisJCXBWaXJ0dWFsQWQgPSBkZXYtPm1sX3ByaXY7CisJCXBBZGFwdGVyID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWRhcHRlci0+T1NfQ29va2llOworCisJaWYgKHBBZGFwdGVyID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKwl7CisJCXBPYmotPmlvY3RsX2lmX3R5cGUgPSBJTlRfTUFJTjsKKyAgICAgICAgcE9iai0+aW9jdGxfaWYgPSBNQUlOX01CU1NJRDsKKwl9CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworCQkJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJaWYgKCEqdGhpc19jaGFyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodmFsdWUgPSBydHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJICAgICp2YWx1ZSsrID0gMDsKKworCWlmICghdmFsdWUpCisJICAgIHJldHVybiAtRUlOVkFMOworCisJLy8gcmVqZWN0IHNldHRpbmcgbm90aGluZyBiZXNpZGVzIEFOWSBzc2lkKHNzaWRMZW49MCkKKyAgICBpZiAoISp2YWx1ZSAmJiAoc3RyY21wKHRoaXNfY2hhciwgIlNTSUQiKSAhPSAwKSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKFBSVE1QX1BSSVZBVEVfU0VUX1BST0MgPSBSVE1QX1BSSVZBVEVfU1VQUE9SVF9QUk9DOyBQUlRNUF9QUklWQVRFX1NFVF9QUk9DLT5uYW1lOyBQUlRNUF9QUklWQVRFX1NFVF9QUk9DKyspCisJeworCSAgICBpZiAoc3RyY21wKHRoaXNfY2hhciwgUFJUTVBfUFJJVkFURV9TRVRfUFJPQy0+bmFtZSkgPT0gMCkKKwkgICAgeworCSAgICAgICAgaWYoIVBSVE1QX1BSSVZBVEVfU0VUX1BST0MtPnNldF9wcm9jKHBBZGFwdGVyLCB2YWx1ZSkpCisJICAgICAgICB7CS8vRkFMU0U6U2V0IHByaXZhdGUgZmFpbGVkIHRoZW4gcmV0dXJuIEludmFsaWQgYXJndW1lbnQKKwkJCSAgICBTdGF0dXMgPSAtRUlOVkFMOworCSAgICAgICAgfQorCQkgICAgYnJlYWs7CS8vRXhpdCBmb3IgbG9vcC4KKwkgICAgfQorCX0KKworCWlmKFBSVE1QX1BSSVZBVEVfU0VUX1BST0MtPm5hbWUgPT0gTlVMTCkKKwl7ICAvL05vdCBmb3VuZCBhcmd1bWVudAorCSAgICBTdGF0dXMgPSAtRUlOVkFMOworCSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+cnRfaW9jdGxfc2V0cGFyYW06OiAoaXdwcml2KSBOb3QgU3VwcG9ydCBTZXQgQ29tbWFuZCBbJXM9JXNdXG4iLCB0aGlzX2NoYXIsIHZhbHVlKSk7CisJfQorCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworCitzdGF0aWMgaW50CitydF9wcml2YXRlX2dldF9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqd3JxLCBjaGFyICpleHRyYSkKK3sKKwlJTlQJCQkJU3RhdHVzID0gMDsKKyAgICBQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworCisgICAgaWYgKGV4dHJhID09IE5VTEwpCisgICAgeworICAgICAgICB3cnEtPmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtRUlPOworICAgIH0KKworICAgIG1lbXNldChleHRyYSwgMHgwMCwgSVdfUFJJVl9TSVpFX01BU0spOworICAgIHNwcmludGYoZXh0cmEsICJcblxuIik7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+YXRlLlR4RG9uZUNvdW50KTsKKwkgICAgLy9zcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzIHdpdGhvdXQgcmV0cnkgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5hdGUuVHhEb25lQ291bnQpOworCX0KKwllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCXsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzIHdpdGhvdXQgcmV0cnkgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0IC0gKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQpOworCX0KKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzIGFmdGVyIHJldHJ5ICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC5RdWFkUGFydCk7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggZmFpbCB0byBSY3YgQUNLIGFmdGVyIHJldHJ5ICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSVFMgU3VjY2VzcyBSY3YgQ1RTICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUlRTU3VjY2Vzc0NvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSVFMgRmFpbCBSY3YgQ1RTICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUlRTRmFpbHVyZUNvdW50LlF1YWRQYXJ0KTsKKworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJ4IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQpOworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJ4IHdpdGggQ1JDICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSeCBkcm9wIGR1ZSB0byBvdXQgb2YgcmVzb3VyY2UgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcik7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUnggZHVwbGljYXRlIGZyYW1lICAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQuUXVhZFBhcnQpOworCisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiRmFsc2UgQ0NBIChvbmUgc2Vjb25kKSAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRmFsc2VDQ0FDbnQpOworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlpZiAocEFkLT5hdGUuUnhBbnRlbm5hU2VsID09IDApCisJCXsKKyAgICAJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0ktQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChMT05HKShwQWQtPmF0ZS5MYXN0UnNzaTAgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSk7CisJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSU1NJLUIgKGlmIGF2YWlsYWJsZSkgICAgICAgICAgID0gJWxkXG4iLCAoTE9ORykocEFkLT5hdGUuTGFzdFJzc2kxIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSS1DIChpZiBhdmFpbGFibGUpICAgICAgICAgICA9ICVsZFxuXG4iLCAoTE9ORykocEFkLT5hdGUuTGFzdFJzc2kyIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCQl9CisJCWVsc2UKKwkJeworICAgIAkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKExPTkcpKHBBZC0+YXRlLkxhc3RSc3NpMCAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEpKTsKKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCXsKKyAgICAJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSS1BICAgICAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKExPTkcpKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworICAgICAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSU1NJLUIgKGlmIGF2YWlsYWJsZSkgICAgICAgICAgID0gJWxkXG4iLCAoTE9ORykocEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSk7CisgICAgICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0ktQyAoaWYgYXZhaWxhYmxlKSAgICAgICAgICAgPSAlbGRcblxuIiwgKExPTkcpKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCX0KKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiV3BhU3VwcGxpY2FudFVQICAgICAgICAgICAgICAgICA9ICVkXG5cbiIsIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCk7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisKKyAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gcnRfcHJpdmF0ZV9nZXRfc3RhdGlzdGljcywgd3JxLT5sZW5ndGggPSAlZFxuIiwgd3JxLT5sZW5ndGgpKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3ZvaWQJZ2V0QmFJbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBPdXRCdWYpCit7CisJSU5UIGksIGo7CisJQkFfT1JJX0VOVFJZICpwT3JpQkFFbnRyeTsKKwlCQV9SRUNfRU5UUlkgKnBSZWNCQUVudHJ5OworCisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07CisJCWlmICgoKHBFbnRyeS0+VmFsaWRBc0NMSSB8fCBwRW50cnktPlZhbGlkQXNBcENsaSkgJiYgKHBFbnRyeS0+U3N0ID09IFNTVF9BU1NPQykpCisJCQl8fCAocEVudHJ5LT5WYWxpZEFzV0RTKSB8fCAocEVudHJ5LT5WYWxpZEFzTWVzaCkpCisJCXsKKwkJCXNwcmludGYocE91dEJ1ZiwgIiVzXG4lMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCAoQWlkID0gJWQpIChBUCkgLVxuIiwKKyAgICAgICAgICAgICAgICBwT3V0QnVmLAorCQkJCXBFbnRyeS0+QWRkclswXSwgcEVudHJ5LT5BZGRyWzFdLCBwRW50cnktPkFkZHJbMl0sCisJCQkJcEVudHJ5LT5BZGRyWzNdLCBwRW50cnktPkFkZHJbNF0sIHBFbnRyeS0+QWRkcls1XSwgcEVudHJ5LT5BaWQpOworCisJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1tSZWNpcGllbnRdXG4iLCBwT3V0QnVmKTsKKwkJCWZvciAoaj0wOyBqIDwgTlVNX09GX1RJRDsgaisrKQorCQkJeworCQkJCWlmIChwRW50cnktPkJBUmVjV2NpZEFycmF5W2pdICE9IDApCisJCQkJeworCQkJCQlwUmVjQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W3BFbnRyeS0+QkFSZWNXY2lkQXJyYXlbal1dOworCQkJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1RJRD0lZCwgQkFXaW5TaXplPSVkLCBMYXN0SW5kU2VxPSVkLCBSZW9yZGVyaW5nUGt0cz0lZFxuIiwgcE91dEJ1ZiwgaiwgcFJlY0JBRW50cnktPkJBV2luU2l6ZSwgcFJlY0JBRW50cnktPkxhc3RJbmRTZXEsIHBSZWNCQUVudHJ5LT5saXN0LnFsZW4pOworCQkJCX0KKwkJCX0KKwkJCXNwcmludGYocE91dEJ1ZiwgIiVzXG4iLCBwT3V0QnVmKTsKKworCQkJc3ByaW50ZihwT3V0QnVmLCAiJXNbT3JpZ2luYXRvcl1cbiIsIHBPdXRCdWYpOworCQkJZm9yIChqPTA7IGogPCBOVU1fT0ZfVElEOyBqKyspCisJCQl7CisJCQkJaWYgKHBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbal0gIT0gMCkKKwkJCQl7CisJCQkJCXBPcmlCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtqXV07CisJCQkJCXNwcmludGYocE91dEJ1ZiwgIiVzVElEPSVkLCBCQVdpblNpemU9JWQsIFN0YXJ0U2VxPSVkLCBDdXJUeFNlcT0lZFxuIiwgcE91dEJ1ZiwgaiwgcE9yaUJBRW50cnktPkJBV2luU2l6ZSwgcE9yaUJBRW50cnktPlNlcXVlbmNlLCBwRW50cnktPlR4U2VxW2pdKTsKKwkJCQl9CisJCQl9CisJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1xuXG4iLCBwT3V0QnVmKTsKKwkJfQorICAgICAgICBpZiAoc3RybGVuKHBPdXRCdWYpID4gKElXX1BSSVZfU0laRV9NQVNLIC0gMzApKQorICAgICAgICAgICAgICAgIGJyZWFrOworCX0KKworCXJldHVybjsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworc3RhdGljIGludAorcnRfcHJpdmF0ZV9zaG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqd3JxLCBjaGFyICpleHRyYSkKK3sKKyAgICBJTlQJCQkJU3RhdHVzID0gMDsKKyAgICBWSVJUVUFMX0FEQVBURVIJKnBWaXJ0dWFsQWQgPSBOVUxMOworICAgIFBSVE1QX0FEQVBURVIgICBwQWQ7CisJUE9TX0NPT0tJRQkJcE9iajsKKyAgICB1MzIgICAgICAgICAgICAgc3ViY21kID0gd3JxLT5mbGFnczsKKworCWlmIChkZXYtPnByaXZfZmxhZ3MgPT0gSU5UX01BSU4pCisJCXBBZCA9IGRldi0+bWxfcHJpdjsKKwllbHNlCisJeworCQlwVmlydHVhbEFkID0gZGV2LT5tbF9wcml2OworCQlwQWQgPSBwVmlydHVhbEFkLT5SdG1wRGV2LT5tbF9wcml2OworCX0KKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJaWYgKHBBZCA9PSBOVUxMKQorCXsKKwkJLyogaWYgMXN0IG9wZW4gZmFpbCwgcEFkIHdpbGwgYmUgZnJlZTsKKwkJICAgU28gdGhlIG5ldF9kZXYtPm1sX3ByaXYgd2lsbCBiZSBOVUxMIGluIDJyZCBvcGVuICovCisJCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgaWYgKGV4dHJhID09IE5VTEwpCisgICAgeworICAgICAgICB3cnEtPmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtRUlPOworICAgIH0KKyAgICBtZW1zZXQoZXh0cmEsIDB4MDAsIElXX1BSSVZfU0laRV9NQVNLKTsKKworCXsKKwkJcE9iai0+aW9jdGxfaWZfdHlwZSA9IElOVF9NQUlOOworICAgICAgICBwT2JqLT5pb2N0bF9pZiA9IE1BSU5fTUJTU0lEOworCX0KKworICAgIHN3aXRjaChzdWJjbWQpCisgICAgeworCisgICAgICAgIGNhc2UgU0hPV19DT05OX1NUQVRVUzoKKyAgICAgICAgICAgIGlmIChNT05JVE9SX09OKHBBZCkpCisgICAgICAgICAgICB7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgICAgICAgICAgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCAmJgorICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcpCisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJNb25pdG9yIE1vZGUoQ2VudHJhbENoYW5uZWwgJWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiTW9uaXRvciBNb2RlKENoYW5uZWwgJWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCSAgICBpZiAoSU5GUkFfT04ocEFkKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiQ29ubmVjdGVkKEFQOiAlc1slMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWF0pXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuU3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZFsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWRbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZFs1XSk7CisgICAgICAgICAgICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIlNzaWQ9JXMgLFNzaWRsZW4gPSAlZFxuIixwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKSk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBREhPQ19PTihwQWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIkNvbm5lY3RlZFxuIik7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCWVsc2UKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJICAgIHNwcmludGYoZXh0cmEsICJEaXNjb25uZWN0ZWRcbiIpOworICAgICAgICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCJDb25uU3RhdHVzIGlzIG5vdCBjb25uZWN0ZWRcbiIpKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIT1dfRFJWSUVSX1ZFUklPTjoKKyAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJEcml2ZXIgdmVyc2lvbi0lcywgJXMgJXNcbiIsIFNUQV9EUklWRVJfVkVSU0lPTiwgX19EQVRFX18sIF9fVElNRV9fICk7CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICBjYXNlIFNIT1dfQkFfSU5GTzoKKyAgICAgICAgICAgIGdldEJhSW5mbyhwQWQsIGV4dHJhKTsKKyAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWNhc2UgU0hPV19ERVNDX0lORk86CisJCQl7CisJCQkJU2hvd19EZXNjSW5mb19Qcm9jKHBBZCwgTlVMTCk7CisJCQkJd3JxLT5sZW5ndGggPSAwOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCX0KKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJBSU9fT0ZGOgorICAgICAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlNjYW5uaW5nXG4iKTsKKyAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvID0gRkFMU0U7CisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuYlJhZGlvICE9IChwQWQtPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWQtPlN0YUNmZy5iU3dSYWRpbykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuYlJhZGlvID0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKTsKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTWxtZVJhZGlvT2ZmKHBBZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQlwQWQtPkV4dHJhSW5mbyA9IFNXX1JBRElPX09GRjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiUmFkaW8gT2ZmXG4iKTsKKyAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkFJT19PTjoKKyAgICAgICAgICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJTY2FubmluZ1xuIik7CisgICAgICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWQtPlN0YUNmZy5iU3dSYWRpbyA9IFRSVUU7CisgICAgICAgICAgICAvL2lmIChwQWQtPlN0YUNmZy5iUmFkaW8gIT0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWQtPlN0YUNmZy5iUmFkaW8gPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pOworICAgICAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1sbWVSYWRpb09uKHBBZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQlwQWQtPkV4dHJhSW5mbyA9IEVYVFJBX0lORk9fQ0xFQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlJhZGlvIE9uXG4iKTsKKyAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgYnJlYWs7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQljYXNlIFNIT1dfRExTX0VOVFJZX0lORk86CisJCQl7CisJCQkJU2V0X0Rsc0VudHJ5SW5mb19EaXNwbGF5X1Byb2MocEFkLCBOVUxMKTsKKwkJCQl3cnEtPmxlbmd0aCA9IDA7IC8vIDE6IHNpemUgb2YgJ1wwJworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJY2FzZSBTSE9XX0NGR19WQUxVRToKKwkJCXsKKwkJCQlTdGF0dXMgPSBSVE1QU2hvd0NmZ1ZhbHVlKHBBZCwgd3JxLT5wb2ludGVyLCBleHRyYSk7CisJCQkJaWYgKFN0YXR1cyA9PSAwKQorCQkJCQl3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCX0KKwkJCWJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgLSB1bmtub3cgc3ViY21kID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgc3ViY21kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCisjaWZkZWYgU0lPQ1NJV01MTUUKK2ludCBydF9pb2N0bF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgICBwQWQgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGl3X21sbWUgKnBNbG1lID0gKHN0cnVjdCBpd19tbG1lICopd3JxdS0+ZGF0YS5wb2ludGVyOworCU1MTUVfUVVFVUVfRUxFTQkJCQlNc2dFbGVtOworCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVAlEaXNBc3NvY1JlcTsKKwlNTE1FX0RFQVVUSF9SRVFfU1RSVUNUICAgICAgRGVBdXRoUmVxOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gJXNcbiIsIF9fRlVOQ1RJT05fXykpOworCisJaWYgKHBNbG1lID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoKHBNbG1lLT5jbWQpCisJeworI2lmZGVmIElXX01MTUVfREVBVVRICisJCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiAlcyAtIElXX01MTUVfREVBVVRIXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCUNPUFlfTUFDX0FERFIoRGVBdXRoUmVxLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCURlQXV0aFJlcS5SZWFzb24gPSBwTWxtZS0+cmVhc29uX2NvZGU7CisJCQlNc2dFbGVtLk1zZ0xlbiA9IHNpemVvZihNTE1FX0RFQVVUSF9SRVFfU1RSVUNUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0uTXNnLCAmRGVBdXRoUmVxLCBzaXplb2YoTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCkpOworCQkJTWxtZURlYXV0aFJlcUFjdGlvbihwQWQsICZNc2dFbGVtKTsKKwkJCWlmIChJTkZSQV9PTihwQWQpKQorCQkJeworCQkJICAgIExpbmtEb3duKHBBZCwgRkFMU0UpOworCQkJICAgIHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIElXX01MTUVfREVBVVRIIC8vCisjaWZkZWYgSVdfTUxNRV9ESVNBU1NPQworCQljYXNlIElXX01MTUVfRElTQVNTT0M6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiAlcyAtIElXX01MTUVfRElTQVNTT0NcbiIsIF9fRlVOQ1RJT05fXykpOworCQkJQ09QWV9NQUNfQUREUihEaXNBc3NvY1JlcS5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlEaXNBc3NvY1JlcS5SZWFzb24gPSAgcE1sbWUtPnJlYXNvbl9jb2RlOworCisJCQlNc2dFbGVtLk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJTXNnRWxlbS5Nc2dUeXBlID0gTVQyX01MTUVfRElTQVNTT0NfUkVROworCQkJTXNnRWxlbS5Nc2dMZW4gPSBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0uTXNnLCAmRGlzQXNzb2NSZXEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7CisJCQlNbG1lRGlzYXNzb2NSZXFBY3Rpb24ocEFkLCAmTXNnRWxlbSk7CisJCQlicmVhazsKKyNlbmRpZiAvLyBJV19NTE1FX0RJU0FTU09DIC8vCisJCWRlZmF1bHQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiAlcyAtIFVua25vdyBDb21tYW5kXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmIC8vIFNJT0NTSVdNTE1FIC8vCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxNworaW50IHJ0X2lvY3RsX3Npd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKwl7CisgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgIAlyZXR1cm4gLUVORVRET1dOOworCX0KKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKyAgICAJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorICAgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOworCQkJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIpCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7CisKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX1dQQV9WRVJTSU9OIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisgICAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1dFUDQwIHx8CisgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfV0VQMTA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjFYID0gRkFMU0U7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1RLSVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfQ0NNUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX0NJUEhFUl9QQUlSV0lTRSAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorICAgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfV0VQNDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9XRVAxMDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1RLSVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfQ0NNUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX0NJUEhFUl9HUk9VUCAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisgICAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfS0VZX01HTVRfODAyXzFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEE7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IEZBTFNFOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IEZBTFNFOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gV0VQIDF4CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjFYID0gVFJVRTsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3BBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX0tFWV9NR01UIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorICAgICAgICAgICAgLyppZiAocGFyYW0tPnZhbHVlID09IDApCisJCQl7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAJICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICB9Ki8KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRCAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAJCWJyZWFrOworICAgIAljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKyAgICAgICAgICAgIGlmIChwYXJhbS0+dmFsdWUgIT0gMCkKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworCQkJfQorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0FVVEhfV1BBX1ZFUlNJT04gLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgCQlicmVhazsKKyAgICAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQkJaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisgICAgICAgICAgICB7CisJCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKKwkJCX0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQorICAgICAgICAgICAgeworCQkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCQkJfQorICAgICAgICAgICAgZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0FVVEhfODAyMTFfQVVUSF9BTEcgLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisJCQlicmVhazsKKyAgICAJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0FVVEhfV1BBX0VOQUJMRUQgLSBEcml2ZXIgc3VwcG9ydHMgV1BBIShwYXJhbS0+dmFsdWUgPSAlZClcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgCQlicmVhazsKKyAgICAJZGVmYXVsdDoKKyAgICAJCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorICAgICAgICBwYXJhbS0+dmFsdWUgPSAocEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKSA/IDAgOiAxOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKyAgICAgICAgcGFyYW0tPnZhbHVlID0gKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSA/IElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgOiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXBhcmFtLT52YWx1ZSA9IChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgPyAxIDogMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInJ0X2lvY3RsX2dpd2F1dGg6OnBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgcGFyYW0tPnZhbHVlKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZm5TZXRDaXBoZXJLZXkoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgSU5UICAgICAgICAgICAgIGtleUlkeCwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIENpcGhlckFsZywKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgIGJHVEssCisgICAgSU4gIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQpCit7CisgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKyAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0LT5rZXksIExFTl9US0lQX0VLKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uVHhNaWMsIGV4dC0+a2V5ICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLlJ4TWljLCBleHQtPmtleSArIExFTl9US0lQX0VLICsgTEVOX1RLSVBfVFhNSUNLLCBMRU5fVEtJUF9SWE1JQ0spOworICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwKKwkJCQkJCSAgQlNTMCwKKwkJCQkJCSAga2V5SWR4LAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uVHhNaWMsCisJCQkJCQkgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5SeE1pYyk7CisKKyAgICBpZiAoYkdUSykKKyAgICAgICAgLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisgICAgCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkYXB0ZXIsCisgICAgCQkJCQkJCSAgQlNTMCwKKyAgICAJCQkJCQkJICBrZXlJZHgsCisgICAgCQkJCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZywKKyAgICAJCQkJCQkJICBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIC8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorICAgIAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLAorICAgIAkJCQkJCQkgIEJTUzAsCisgICAgCQkJCQkJCSAga2V5SWR4LAorICAgIAkJCQkJCQkgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcsCisgICAgCQkJCQkJCSAgJnBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSk7Cit9CisKK2ludCBydF9pb2N0bF9zaXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgY2hhciAqZXh0cmEpCisJCQl7CisgICAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworICAgIGludCBrZXlJZHgsIGFsZyA9IGV4dC0+YWxnOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKyAgICBpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCXsKKyAgICAgICAga2V5SWR4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworICAgICAgICAvLyBzZXQgQlNTSUQgd2NpZCBlbnRyeSBvZiB0aGUgUGFpci13aXNlIEtleSB0YWJsZSBhcyBuby1zZWN1cml0eSBtb2RlCisJICAgIEFzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBCU1NJRF9XQ0lEKTsKKyAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IDA7CisJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLCAwLCAoVUNIQVIpa2V5SWR4KTsKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OlJlbW92ZSBhbGwga2V5cyEoZW5jb2RpbmctPmZsYWdzID0gJXgpXG4iLCBfX0ZVTkNUSU9OX18sIGVuY29kaW5nLT5mbGFncykpOworICAgIH0KKwkJCQkJZWxzZQorICAgIHsKKyAgICAgICAgLy8gR2V0IEtleSBJbmRleCBhbmQgY29udmV0IHRvIG91ciBvd24gZGVmaW5lZCBrZXkgaW5kZXgKKyAgICAJa2V5SWR4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworICAgIAlpZigoa2V5SWR4IDwgMCkgfHwgKGtleUlkeCA+PSBOUl9XRVBfS0VZUykpCisgICAgCQlyZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkID0ga2V5SWR4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OkRlZmF1bHRLZXlJZCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGFsZykgeworICAgIAkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0VOQ09ERV9BTEdfTk9ORVxuIiwgX19GVU5DVElPTl9fKSk7CisgICAgCQkJYnJlYWs7CisgICAgCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19FTkNPREVfQUxHX1dFUCAtIGV4dC0+a2V5X2xlbiA9ICVkLCBrZXlJZHggPSAlZFxuIiwgX19GVU5DVElPTl9fLCBleHQtPmtleV9sZW4sIGtleUlkeCkpOworICAgIAkJCWlmIChleHQtPmtleV9sZW4gPT0gTUFYX1dFUF9LRVlfU0laRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgIAkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSBNQVhfV0VQX0tFWV9TSVpFOworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKwkJCQl9CisgICAgICAgIAkJZWxzZSBpZiAoZXh0LT5rZXlfbGVuID09IE1JTl9XRVBfS0VZX1NJWkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTUlOX1dFUF9LRVlfU0laRTsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCX0KKyAgICAgICAgCQllbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgIDE2KTsKKwkJCSAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKyAgICAJCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19FTkNPREVfQUxHX1RLSVAgLSBrZXlJZHggPSAlZCwgZXh0LT5rZXlfbGVuID0gJWRcbiIsIF9fRlVOQ1RJT05fXywga2V5SWR4LCBleHQtPmtleV9sZW4pKTsKKyAgICAgICAgICAgICAgICBpZiAoZXh0LT5rZXlfbGVuID09IDMyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LCBDSVBIRVJfVEtJUCwgRkFMU0UsIGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQl9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9US0lQLCBUUlVFLCBleHQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgODAyLjF4IHBvcnQgY29udHJvbAorICAgICAgICAgICAgCSAgICAgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisgICAgICAgICAgICAJICAgICAgICBTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CisgICAgICAgICAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQorCQl7CisgICAgICAgICAgICAgICAgICAgIGZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9BRVMsIEZBTFNFLCBleHQpOworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQorICAgICAgICAgICAgICAgICAgICAJLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisgICAgICAgICAgICAgICAgICAgIAlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9BRVMsIFRSVUUsIGV4dCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKyAgICAgICAgCSAgICAgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisgICAgICAgIAkgICAgICAgIFNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAJCWRlZmF1bHQ6CisgICAgCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CitydF9pb2N0bF9naXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBkZXYtPm1sX3ByaXY7CisJUENIQVIgcEtleSA9IE5VTEw7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgbWF4X2tleV9sZW47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT0+IHJ0X2lvY3RsX2dpd2VuY29kZWV4dFxuIikpOworCisJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmIChtYXhfa2V5X2xlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHgpCisJeworCQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlkeC0tOworCisJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHx8CisJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKQorCQl7CisJCQlpZiAoaWR4ICE9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkKKwkJCXsKKwkJCQlleHQtPmtleV9sZW4gPSAwOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCWVsc2UKKwkJaWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCisJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKKwltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOworCisJZXh0LT5rZXlfbGVuID0gMDsKKwlzd2l0Y2gocEFkLT5TdGFDZmcuV2VwU3RhdHVzKSB7CisJCWNhc2UgTmRpczgwMl8xMVdFUERpc2FibGVkOgorCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisJCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCWNhc2UgTmRpczgwMl8xMVdFUEVuYWJsZWQ6CisJCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOworCQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuID4gbWF4X2tleV9sZW4pCisJCQkJcmV0dXJuIC1FMkJJRzsKKwkJCWVsc2UKKwkJCXsKKwkJCQlleHQtPmtleV9sZW4gPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbjsKKwkJCQlwS2V5ID0gJihwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleVswXSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgorCQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ6CisJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1RLSVA7CisJCQllbHNlCisJCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX0NDTVA7CisKKwkJCWlmIChtYXhfa2V5X2xlbiA8IDMyKQorCQkJCXJldHVybiAtRTJCSUc7CisJCQllbHNlCisJCQl7CisJCQkJZXh0LT5rZXlfbGVuID0gMzI7CisJCQkJcEtleSA9ICZwQWQtPlN0YUNmZy5QTUtbMF07CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChleHQtPmtleV9sZW4gJiYgcEtleSkKKwl7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKwkJbWVtY3B5KGV4dC0+a2V5LCBwS2V5LCBleHQtPmtleV9sZW4pOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgU0lPQ1NJV0dFTklFCitpbnQgcnRfaW9jdGxfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA+IE1BWF9MRU5fT0ZfUlNOSUUgfHwKKwkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIGV4dHJhID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkKKwl7CisJCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOworCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuUlNOX0lFWzBdLCBleHRyYSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5TdGFDZmcuUlNOSUVfTGVuID0gMDsKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQ2ZnLlJTTl9JRVswXSwgTUFYX0xFTl9PRl9SU05JRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gU0lPQ1NJV0dFTklFIC8vCisKK2ludCBydF9pb2N0bF9naXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKworCWlmICgocEFkLT5TdGFDZmcuUlNOSUVfTGVuID09IDApIHx8CisJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkpCisJeworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZkZWYgU0lPQ1NJV0dFTklFCisJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpCisJeworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbikKKwkJcmV0dXJuIC1FMkJJRzsKKworCXdycXUtPmRhdGEubGVuZ3RoID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCW1lbWNweShleHRyYSwgJnBBZC0+U3RhQ2ZnLlJTTl9JRVswXSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFNJT0NTSVdHRU5JRSAvLworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJeworCQlVQ0hBUiBSU05JZSA9IElFX1dQQTsKKworCQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCAocEFkLT5TdGFDZmcuUlNOSUVfTGVuICsgMikpIC8vIElELCBMZW4KKwkJCXJldHVybiAtRTJCSUc7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuICsgMjsKKworCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikpCisJCQlSU05JZSA9IElFX1JTTjsKKworCQlleHRyYVswXSA9IChjaGFyKVJTTkllOworCQlleHRyYVsxXSA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKwkJbWVtY3B5KGV4dHJhKzIsICZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdwbWtzYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgICBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wbWtzYSAqcFBta3NhID0gKHN0cnVjdCBpd19wbWtzYSAqKXdycXUtPmRhdGEucG9pbnRlcjsKKwlJTlQJQ2FjaGVkSWR4ID0gMCwgaWR4ID0gMDsKKworCWlmIChwUG1rc2EgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT0+IHJ0X2lvY3RsX3Npd3Bta3NhXG4iKSk7CisJc3dpdGNoKHBQbWtzYS0+Y21kKQorCXsKKwkJY2FzZSBJV19QTUtTQV9GTFVTSDoKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LLCBzaXplb2YoQlNTSURfSU5GTykqUE1LSURfTk8pOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBJV19QTUtTQV9GTFVTSFxuIikpOworCQkJYnJlYWs7CisJCWNhc2UgSVdfUE1LU0FfUkVNT1ZFOgorCQkJZm9yIChDYWNoZWRJZHggPSAwOyBDYWNoZWRJZHggPCBwQWQtPlN0YUNmZy5TYXZlZFBNS051bTsgQ2FjaGVkSWR4KyspCisJCQl7CisJCSAgICAgICAgLy8gY29tcGFyZSB0aGUgQlNTSUQKKwkJICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBQbWtzYS0+YnNzaWQuc2FfZGF0YSwgcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5CU1NJRCwgTUFDX0FERFJfTEVOKSkKKwkJICAgICAgICB7CisJCSAgICAgICAgCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIE1BQ19BRERSX0xFTik7CisJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uUE1LSUQsIDE2KTsKKwkJCQkJZm9yIChpZHggPSBDYWNoZWRJZHg7IGlkeCA8IChwQWQtPlN0YUNmZy5TYXZlZFBNS051bSAtIDEpOyBpZHgrKykKKwkJCQkJeworCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uQlNTSURbMF0sICZwQWQtPlN0YUNmZy5TYXZlZFBNS1tpZHgrMV0uQlNTSURbMF0sIE1BQ19BRERSX0xFTik7CisJCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbaWR4XS5QTUtJRFswXSwgJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeCsxXS5QTUtJRFswXSwgMTYpOworCQkJCQl9CisJCQkJCXBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtLS07CisJCQkgICAgICAgIGJyZWFrOworCQkgICAgICAgIH0KKwkgICAgICAgIH0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBJV19QTUtTQV9SRU1PVkVcbiIpKTsKKwkJCWJyZWFrOworCQljYXNlIElXX1BNS1NBX0FERDoKKwkJCWZvciAoQ2FjaGVkSWR4ID0gMDsgQ2FjaGVkSWR4IDwgcEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW07IENhY2hlZElkeCsrKQorCQkJeworCQkgICAgICAgIC8vIGNvbXBhcmUgdGhlIEJTU0lECisJCSAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwUG1rc2EtPmJzc2lkLnNhX2RhdGEsIHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIE1BQ19BRERSX0xFTikpCisJCQkgICAgICAgIGJyZWFrOworCSAgICAgICAgfQorCisJICAgICAgICAvLyBGb3VuZCwgcmVwbGFjZSBpdAorCSAgICAgICAgaWYgKENhY2hlZElkeCA8IFBNS0lEX05PKQorCSAgICAgICAgeworCQkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX09GRiwgKCJVcGRhdGUgUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5CU1NJRFswXSwgcFBta3NhLT5ic3NpZC5zYV9kYXRhLCBNQUNfQUREUl9MRU4pOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLlBNS0lEWzBdLCBwUG1rc2EtPnBta2lkLCAxNik7CisJCSAgICAgICAgcEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW0rKzsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIE5vdCBmb3VuZCwgcmVwbGFjZSB0aGUgbGFzdCBvbmUKKwkgICAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAgICAgICAvLyBSYW5kb21seSByZXBsYWNlIG9uZQorCQkgICAgICAgIENhY2hlZElkeCA9IChwUG1rc2EtPmJzc2lkLnNhX2RhdGFbNV0gJSBQTUtJRF9OTyk7CisJCSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIlVwZGF0ZSBQTUtJRCwgaWR4ID0gJWRcbiIsIENhY2hlZElkeCkpOworCQkgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLkJTU0lEWzBdLCBwUG1rc2EtPmJzc2lkLnNhX2RhdGEsIE1BQ19BRERSX0xFTik7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uUE1LSURbMF0sIHBQbWtzYS0+cG1raWQsIDE2KTsKKwkgICAgICAgIH0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBJV19QTUtTQV9BRERcbiIpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBVbmtub3cgQ29tbWFuZCEhXG4iKSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyAjaWYgV0lSRUxFU1NfRVhUID4gMTcKKworI2lmZGVmIERCRworc3RhdGljIGludAorcnRfcHJpdmF0ZV9pb2N0bF9iYnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICp3cnEsIGNoYXIgKmV4dHJhKQorCQkJeworCUNIQVIJCQkJKnRoaXNfY2hhcjsKKwlDSEFSCQkJCSp2YWx1ZSA9IE5VTEw7CisJVUNIQVIJCQkJcmVnQkJQID0gMDsKKy8vCUNIQVIJCQkJYXJnWzI1NV09ezB9OworCVVJTlQzMgkJCQliYnBJZDsKKwlVSU5UMzIJCQkJYmJwVmFsdWU7CisJQk9PTEVBTgkJCQliSXNQcmludEFsbEJCUCA9IEZBTFNFOworCUlOVAkJCQkJU3RhdHVzID0gMDsKKyAgICBQUlRNUF9BREFQVEVSICAgICAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisKKwltZW1zZXQoZXh0cmEsIDB4MDAsIElXX1BSSVZfU0laRV9NQVNLKTsKKworCWlmICh3cnEtPmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwkJCQl7CisJCXNwcmludGYoZXh0cmEsICJcbiIpOworCisJCS8vUGFyc2luZyBSZWFkIG9yIFdyaXRlCisJCXRoaXNfY2hhciA9IHdycS0+cG9pbnRlcjsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgidGhpc19jaGFyPSVzXG4iLCB0aGlzX2NoYXIpKTsKKwkJaWYgKCEqdGhpc19jaGFyKQorCQkJZ290byBuZXh0OworCisJCWlmICgodmFsdWUgPSBydHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisKKwkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKQorCQl7IC8vUmVhZAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgidGhpc19jaGFyPSVzLCB2YWx1ZT0lc1xuIiwgdGhpc19jaGFyLCB2YWx1ZSkpOworCQkJaWYgKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYoYmJwSWQpKSA9PSAxKQorCQkJeworI2lmbmRlZiBSVDMweHgKKwkJCQlpZiAoYmJwSWQgPD0gMTM2KQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJUMzB4eAorCQkJCWlmIChiYnBJZCA8PSAxMzgpICAvLyBlZGl0IGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAsIGFkZCBCQlAgUjEzOCBmb3IgQURDIGR5bmFtaWMgb24vb2ZmIGNvbnRyb2wKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCQl7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQkJeworCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQl7CisJCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQl9CisJCQkJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlIlMDJkWzB4JTAyWF06JTAyWFxuIiwgYmJwSWQsIGJicElkKjIsIHJlZ0JCUCk7CisgICAgICAgICAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJtc2c9JXNcbiIsIGV4dHJhKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7Ly9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIGJicAorCQkJCQliSXNQcmludEFsbEJCUCA9IFRSVUU7CisJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7IC8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQliSXNQcmludEFsbEJCUCA9IFRSVUU7CisJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQlpZiAoKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYoYmJwSWQpKSA9PSAxKSAmJiAoc3NjYW5mKHZhbHVlLCAiJXgiLCAmKGJicFZhbHVlKSkgPT0gMSkpCisJCQl7CisjaWZuZGVmIFJUMzB4eAorCQkJCWlmIChiYnBJZCA8PSAxMzYpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisjaWZkZWYgUlQzMHh4CisJCQkJaWYgKGJicElkIDw9IDEzOCkgIC8vIGVkaXQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgYWRkIEJCUCBSMTM4IGZvciBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbAorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCXsKKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCQl7CisJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCBiYnBWYWx1ZSk7CisJCQkJCQkvL1JlYWQgaXQgYmFjayBmb3Igc2hvd2luZworCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQl7CisJCQkJCSAgICBSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgYmJwVmFsdWUpOworICAgIAkJCQkJLy9SZWFkIGl0IGJhY2sgZm9yIHNob3dpbmcKKyAgICAJCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJfQorCQkJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSJTAyZFsweCUwMlhdOiUwMlhcbiIsIGJicElkLCBiYnBJZCoyLCByZWdCQlApOworICAgICAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgibXNnPSVzXG4iLCBleHRyYSkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgYmJwCisJCQkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCQl9CisJZWxzZQorCQliSXNQcmludEFsbEJCUCA9IFRSVUU7CisKK25leHQ6CisJaWYgKGJJc1ByaW50QWxsQkJQKQorCXsKKwkJbWVtc2V0KGV4dHJhLCAweDAwLCBJV19QUklWX1NJWkVfTUFTSyk7CisJCXNwcmludGYoZXh0cmEsICJcbiIpOworI2lmbmRlZiBSVDMweHgKKwkJZm9yIChiYnBJZCA9IDA7IGJicElkIDw9IDEzNjsgYmJwSWQrKykKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNpZmRlZiBSVDMweHgKKwkJZm9yIChiYnBJZCA9IDA7IGJicElkIDw9IDEzODsgYmJwSWQrKykgIC8vIGVkaXQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgYWRkIEJCUCBSMTM4IGZvciBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbAorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl7CisJCSAgICBpZiAoc3RybGVuKGV4dHJhKSA+PSAoSVdfUFJJVl9TSVpFX01BU0sgLSAxMCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQl7CisJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKy8qCisJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSJTAyZFsweCUwMlhdOiUwMlggICAgIiwgYmJwSWQsIGJicElkKjIsIHJlZ0JCUCk7CisJCQlpZiAoYmJwSWQlNSA9PSA0KQorCQkJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlxuIik7CisqLworCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiJTAzZCA9ICUwMlhcbiIsIGJicElkLCByZWdCQlApOyAgLy8gZWRpdCBieSBqb2hubGksIGNoYW5nZSBkaXNwbGF5IGZvcm1hdAorCQl9CisKKyAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+bGVuZ3RoID0gJWRcbiIsIHdycS0+bGVuZ3RoKSk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09cnRfcHJpdmF0ZV9pb2N0bF9iYnBcblxuIikpOworCisgICAgcmV0dXJuIFN0YXR1czsKK30KKyNlbmRpZiAvLyBEQkcgLy8KKworaW50IHJ0X2lvY3RsX3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKyAgICBQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworICAgIFVJTlQzMiAgICAgICAgICByYXRlID0gd3JxdS0+Yml0cmF0ZS52YWx1ZSwgZml4ZWQgPSB3cnF1LT5iaXRyYXRlLmZpeGVkOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydF9pb2N0bF9zaXdyYXRlOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicnRfaW9jdGxfc2l3cmF0ZTo6KHJhdGUgPSAlZCwgZml4ZWQgPSAlZClcbiIsIHJhdGUsIGZpeGVkKSk7CisgICAgLyogcmF0ZSA9IC0xID0+IGF1dG8gcmF0ZQorICAgICAgIHJhdGUgPSBYLCBmaXhlZCA9IDEgPT4gKGZpeGVkIHJhdGUgWCkKKyAgICAqLworICAgIGlmIChyYXRlID09IC0xKQorICAgIHsKKwkJLy9BdXRvIFJhdGUKKwkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKwkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPD0gUEhZXzExRykgfHwKKwkJICAgIChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkpCisJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgLTEpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCVNldENvbW1vbkhUKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChmaXhlZCkKKyAgICAgICAgeworICAgICAgICAJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKyAgICAgICAgICAgIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA8PSBQSFlfMTFHKSB8fAorICAgICAgICAgICAgICAgIChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkpCisgICAgICAgICAgICAgICAgUlRNUFNldERlc2lyZWRSYXRlcyhwQWQsIHJhdGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTX0FVVE87CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgICAgICAgICAgICAgU2V0Q29tbW9uSFQocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInJ0X2lvY3RsX3Npd3JhdGU6OihIdE1jcz0lZClcbiIscEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE86IHJhdGUgPSBYLCBmaXhlZCA9IDAgPT4gKHJhdGVzIDw9IFgpCisgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICAgIFBSVE1QX0FEQVBURVIgICBwQWQgPSBkZXYtPm1sX3ByaXY7CisgICAgaW50IHJhdGVfaW5kZXggPSAwLCByYXRlX2NvdW50ID0gMDsKKyAgICBIVFRSQU5TTUlUX1NFVFRJTkcgaHRfc2V0dGluZzsKKyAgICBfX3MzMiByYWxpbmtyYXRlW10gPQorCXsyLCAgNCwgICAxMSwgIDIyLCAvLyBDQ0sKKwkxMiwgMTgsICAgMjQsICAzNiwgNDgsIDcyLCA5NiwgMTA4LCAvLyBPRkRNCisJMTMsIDI2LCAgIDM5LCAgNTIsICA3OCwgMTA0LCAxMTcsIDEzMCwgMjYsICA1MiwgIDc4LCAxMDQsIDE1NiwgMjA4LCAyMzQsIDI2MCwgLy8gMjBNSHosIDgwMG5zIEdJLCBNQ1M6IDAgfiAxNQorCTM5LCA3OCwgIDExNywgMTU2LCAyMzQsIDMxMiwgMzUxLCAzOTAsCQkJCQkJCQkJCSAgLy8gMjBNSHosIDgwMG5zIEdJLCBNQ1M6IDE2IH4gMjMKKwkyNywgNTQsICAgODEsIDEwOCwgMTYyLCAyMTYsIDI0MywgMjcwLCA1NCwgMTA4LCAxNjIsIDIxNiwgMzI0LCA0MzIsIDQ4NiwgNTQwLCAvLyA0ME1IeiwgODAwbnMgR0ksIE1DUzogMCB+IDE1CisJODEsIDE2MiwgMjQzLCAzMjQsIDQ4NiwgNjQ4LCA3MjksIDgxMCwJCQkJCQkJCQkJICAvLyA0ME1IeiwgODAwbnMgR0ksIE1DUzogMTYgfiAyMworCTE0LCAyOSwgICA0MywgIDU3LCAgODcsIDExNSwgMTMwLCAxNDQsIDI5LCA1OSwgICA4NywgMTE1LCAxNzMsIDIzMCwgMjYwLCAyODgsIC8vIDIwTUh6LCA0MDBucyBHSSwgTUNTOiAwIH4gMTUKKwk0MywgODcsICAxMzAsIDE3MywgMjYwLCAzMTcsIDM5MCwgNDMzLAkJCQkJCQkJCQkgIC8vIDIwTUh6LCA0MDBucyBHSSwgTUNTOiAxNiB+IDIzCisJMzAsIDYwLCAgIDkwLCAxMjAsIDE4MCwgMjQwLCAyNzAsIDMwMCwgNjAsIDEyMCwgMTgwLCAyNDAsIDM2MCwgNDgwLCA1NDAsIDYwMCwgLy8gNDBNSHosIDQwMG5zIEdJLCBNQ1M6IDAgfiAxNQorCTkwLCAxODAsIDI3MCwgMzYwLCA1NDAsIDcyMCwgODEwLCA5MDB9OwkJCQkJCQkJCQkgIC8vIDQwTUh6LCA0MDBucyBHSSwgTUNTOiAxNiB+IDIzCisKKyAgICByYXRlX2NvdW50ID0gc2l6ZW9mKHJhbGlua3JhdGUpL3NpemVvZihfX3MzMik7CisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgaWYgKChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBGQUxTRSkgJiYKKyAgICAgICAgKElORlJBX09OKHBBZCkpICYmCisgICAgICAgICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA8PSBQSFlfMTFHKSB8fCAocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pKSkKKyAgICAgICAgaHRfc2V0dGluZy53b3JkID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLndvcmQ7CisgICAgZWxzZQorICAgICAgICBodF9zZXR0aW5nLndvcmQgPSBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgaWYgKGh0X3NldHRpbmcuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKQorICAgIHsKKy8vICAgIAlyYXRlX2luZGV4ID0gMTIgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuQlcgKjE2KSArICgoVUNIQVIpaHRfc2V0dGluZy5maWVsZC5TaG9ydEdJICozMikgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuTUNTKTsKKyAgICAJcmF0ZV9pbmRleCA9IDEyICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLkJXICoyNCkgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuU2hvcnRHSSAqNDgpICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLk1DUyk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICBpZiAoaHRfc2V0dGluZy5maWVsZC5NT0RFID09IE1PREVfT0ZETSkKKyAgICAJcmF0ZV9pbmRleCA9IChVQ0hBUikoaHRfc2V0dGluZy5maWVsZC5NQ1MpICsgNDsKKyAgICBlbHNlIGlmIChodF9zZXR0aW5nLmZpZWxkLk1PREUgPT0gTU9ERV9DQ0spCisgICAgCXJhdGVfaW5kZXggPSAoVUNIQVIpKGh0X3NldHRpbmcuZmllbGQuTUNTKTsKKworICAgIGlmIChyYXRlX2luZGV4IDwgMCkKKyAgICAgICAgcmF0ZV9pbmRleCA9IDA7CisKKyAgICBpZiAocmF0ZV9pbmRleCA+IHJhdGVfY291bnQpCisgICAgICAgIHJhdGVfaW5kZXggPSByYXRlX2NvdW50OworCisgICAgd3JxdS0+Yml0cmF0ZS52YWx1ZSA9IHJhbGlua3JhdGVbcmF0ZV9pbmRleF0gKiA1MDAwMDA7CisgICAgd3JxdS0+Yml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcnRfaGFuZGxlcltdID0KK3sKKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgICAgICAvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd25hbWUsCQkJLyogU0lPQ0dJV05BTUUgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCSAgICAgICAgICAgIC8qIFNJT0NTSVdOV0lEICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgICAgICAvKiBTSU9DR0lXTldJRCAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2ZyZXEsCQkgICAgLyogU0lPQ1NJV0ZSRVEgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdmcmVxLAkJICAgIC8qIFNJT0NHSVdGUkVRICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3bW9kZSwJCSAgICAvKiBTSU9DU0lXTU9ERSAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd21vZGUsCQkgICAgLyogU0lPQ0dJV01PREUgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdTRU5TICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU0VOUyAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUkFOR0UgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3JhbmdlLAkJICAgIC8qIFNJT0NHSVdSQU5HRSAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLywgICAgLyogU0lPQ0dJV1BSSVYgICAqLworCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICAqLworCShpd19oYW5kbGVyKSBydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzIC8qIGtlcm5lbCBjb2RlICovLCAgICAvKiBTSU9DR0lXU1RBVFMgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NQWSAgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdTUFkgICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiBTSU9DU0lXVEhSU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ0dJV1RIUlNQWSAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdhcCwgICAgICAgICAgICAvKiBTSU9DU0lXQVAgICAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2FwLAkJICAgIC8qIFNJT0NHSVdBUCAgICAgKi8KKyNpZmRlZiBTSU9DU0lXTUxNRQorCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdtbG1lLAkgICAgICAgIC8qIFNJT0NTSVdNTE1FICAgKi8KKyNlbHNlCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ1NJV01MTUUgKi8KKyNlbmRpZiAvLyBTSU9DU0lXTUxNRSAvLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9pd2FwbGlzdCwJCSAgICAvKiBTSU9DR0lXQVBMSVNUICovCisjaWZkZWYgU0lPQ0dJV1NDQU4KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3c2NhbiwJCSAgICAvKiBTSU9DU0lXU0NBTiAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3NjYW4sCQkgICAgLyogU0lPQ0dJV1NDQU4gICAqLworI2Vsc2UKKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiBTSU9DU0lXU0NBTiAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ0dJV1NDQU4gICAqLworI2VuZGlmIC8qIFNJT0NHSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2Vzc2lkLAkJICAgIC8qIFNJT0NTSVdFU1NJRCAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZXNzaWQsCQkgICAgLyogU0lPQ0dJV0VTU0lEICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXduaWNrbiwJCSAgICAvKiBTSU9DU0lXTklDS04gICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd25pY2tuLAkJICAgIC8qIFNJT0NHSVdOSUNLTiAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiAtLSBob2xlIC0tICAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogLS0gaG9sZSAtLSAgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdyYXRlLCAgICAgICAgICAvKiBTSU9DU0lXUkFURSAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3JhdGUsICAgICAgICAgIC8qIFNJT0NHSVdSQVRFICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3cnRzLAkJICAgIC8qIFNJT0NTSVdSVFMgICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3cnRzLAkJICAgIC8qIFNJT0NHSVdSVFMgICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZnJhZywJCSAgICAvKiBTSU9DU0lXRlJBRyAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2ZyYWcsCQkgICAgLyogU0lPQ0dJV0ZSQUcgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdUWFBPVyAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXVFhQT1cgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1JFVFJZICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdSRVRSWSAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZW5jb2RlLAkJLyogU0lPQ1NJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdlbmNvZGUsCQkvKiBTSU9DR0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1BPV0VSICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdQT1dFUiAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCQkJLyogLS0gaG9sZSAtLSAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisgICAgKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2dlbmllLCAgICAgICAgIC8qIFNJT0NTSVdHRU5JRSAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3Z2VuaWUsICAgICAgICAgLyogU0lPQ0dJV0dFTklFICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdhdXRoLAkJICAgIC8qIFNJT0NTSVdBVVRIICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3YXV0aCwJCSAgICAvKiBTSU9DR0lXQVVUSCAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2VuY29kZWV4dCwJICAgIC8qIFNJT0NTSVdFTkNPREVFWFQgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZW5jb2RlZXh0LAkJLyogU0lPQ0dJV0VOQ09ERUVYVCAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdwbWtzYSwgICAgICAgICAvKiBTSU9DU0lXUE1LU0EgICovCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJ0X3ByaXZfaGFuZGxlcnNbXSA9IHsKKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDAwICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwMSAqLworI2lmbmRlZiBDT05GSUdfQVBfU1VQUE9SVAorCShpd19oYW5kbGVyKSBydF9pb2N0bF9zZXRwYXJhbSwgLyogKyAweDAyICovCisjZWxzZQorCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDIgKi8KKyNlbmRpZiAvLyBDT05GSUdfQVBfU1VQUE9SVCAvLworI2lmZGVmIERCRworCShpd19oYW5kbGVyKSBydF9wcml2YXRlX2lvY3RsX2JicCwgLyogKyAweDAzICovCisjZWxzZQorCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDMgKi8KKyNlbmRpZgorCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDA1ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwNiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDcgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDA4ICovCisJKGl3X2hhbmRsZXIpIHJ0X3ByaXZhdGVfZ2V0X3N0YXRpc3RpY3MsIC8qICsgMHgwOSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MEEgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDBCICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwQyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MEQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDBFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwRiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MTAgKi8KKwkoaXdfaGFuZGxlcikgcnRfcHJpdmF0ZV9zaG93LCAvKiArIDB4MTEgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDEyICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgxMyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MTUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDE3ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgxOCAqLworfTsKKworY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJ0Mjh4eF9pd19oYW5kbGVyX2RlZiA9Cit7CisjZGVmaW5lCU4oYSkJKHNpemVvZiAoYSkgLyBzaXplb2YgKGFbMF0pKQorCS5zdGFuZGFyZAk9IChpd19oYW5kbGVyICopIHJ0X2hhbmRsZXIsCisJLm51bV9zdGFuZGFyZAk9IHNpemVvZihydF9oYW5kbGVyKSAvIHNpemVvZihpd19oYW5kbGVyKSwKKwkucHJpdmF0ZQk9IChpd19oYW5kbGVyICopIHJ0X3ByaXZfaGFuZGxlcnMsCisJLm51bV9wcml2YXRlCQk9IE4ocnRfcHJpdl9oYW5kbGVycyksCisJLnByaXZhdGVfYXJncwk9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopIHByaXZ0YWIsCisJLm51bV9wcml2YXRlX2FyZ3MJPSBOKHByaXZ0YWIpLAorI2lmIElXX0hBTkRMRVJfVkVSU0lPTiA+PSA3CisgICAgLmdldF93aXJlbGVzc19zdGF0cyA9IHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMsCisjZW5kaWYKK307CisKK0lOVCBSVE1QU2V0SW5mb3JtYXRpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgcEFkYXB0ZXIsCisgICAgSU4gIE9VVCBzdHJ1Y3QgaWZyZXEgICAgKnJxLAorICAgIElOICBJTlQgICAgICAgICAgICAgICAgIGNtZCkKK3sKKyAgICBzdHJ1Y3QgaXdyZXEgICAgICAgICAgICAgICAgICAgICAgICAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKSBycTsKKyAgICBORElTXzgwMl8xMV9TU0lEICAgICAgICAgICAgICAgICAgICBTc2lkOworICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTICAgICAgICAgICAgIEJzc2lkOworICAgIFJUXzgwMl8xMV9QSFlfTU9ERSAgICAgICAgICAgICAgICAgIFBoeU1vZGU7CisgICAgUlRfODAyXzExX1NUQV9DT05GSUcgICAgICAgICAgICAgICAgU3RhQ29uZmlnOworICAgIE5ESVNfODAyXzExX1JBVEVTICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzOworICAgIFJUXzgwMl8xMV9QUkVBTUJMRSAgICAgICAgICAgICAgICAgIFByZWFtYmxlOworICAgIE5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKyAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFICAgICBBdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU1heDsKKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBCc3NUeXBlOworICAgIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQgICAgICAgICAgIFJ0c1RocmVzaDsKKyAgICBORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCBGcmFnVGhyZXNoOworICAgIE5ESVNfODAyXzExX1BPV0VSX01PREUgICAgICAgICAgICAgIFBvd2VyTW9kZTsKKyAgICBQTkRJU184MDJfMTFfS0VZICAgICAgICAgICAgICAgICAgICBwS2V5ID0gTlVMTDsKKyAgICBQTkRJU184MDJfMTFfV0VQCQkJICAgICAgICBwV2VwS2V5ID1OVUxMOworICAgIFBORElTXzgwMl8xMV9SRU1PVkVfS0VZICAgICAgICAgICAgIHBSZW1vdmVLZXkgPSBOVUxMOworICAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gICAgICAgICAgIENvbmZpZywgKnBDb25maWcgPSBOVUxMOworICAgIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICAgICAgICAgIE5ldFR5cGU7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm93OworICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUlkeCA9IDA7CisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUywgTWF4UGh5TW9kZSA9IFBIWV8xMUc7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXJUZW1wOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvU3RhdGU7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IEZBTFNFOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU9JRF9TRVRfSFRfUEhZTU9ERQkJCQkJSFRfUGh5TW9kZTsJLy8xMW4gLGthdGh5CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIFBORElTXzgwMl8xMV9QTUtJRCAgICAgICAgICAgICAgICAgIHBQbWtJZCA9IE5VTEw7CisgICAgQk9PTEVBTgkJCQkgICAgICAgICAgICAgICAgSUVFRTgwMjF4U3RhdGUgPSBGQUxTRTsKKyAgICBCT09MRUFOCQkJCSAgICAgICAgICAgICAgICBJRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9IEZBTFNFOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwYV9zdXBwbGljYW50X2VuYWJsZSA9IDA7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgU05NUF9TVVBQT1JUCisJVFhfUlRZX0NGR19TVFJVQwkJCXR4X3J0eV9jZmc7CisJVUxPTkcJCQkJCQlTaG9ydFJldHJ5TGltaXQsIExvbmdSZXRyeUxpbWl0OworCVVDSEFSCQkJCQkJY3RtcDsKKyNlbmRpZiAvLyBTTk1QX1NVUFBPUlQgLy8KKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJTWF4UGh5TW9kZSA9IFBIWV8xMU5fNUc7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPlJUTVBTZXRJbmZvcm1hdGlvbigpLAkweCUwOHhcbiIsIGNtZCYweDdGRkYpKTsKKyAgICBzd2l0Y2goY21kICYgMHg3RkZGKSB7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9DT1VOVFJZX1JFR0lPTjoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggPCBzaXplb2YoVUNIQVIpKQorICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FSU5WQUw7CisJCQkvLyBPbmx5IGF2YWxpYWJsZSB3aGVuIEVFUFJPTSBub3QgcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uICYgMHg4MCkgJiYgIShwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCAmIDB4ODApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVMT05HICAgQ291bnRyeTsKKyAgICAgICAgICAgICAgICBVQ0hBUglUbXBQaHk7CisKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQ291bnRyeSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoVUNIQVIpKENvdW50cnkgJiAweDAwMDAwMEZGKTsKKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9IChVQ0hBUikoKENvdW50cnkgPj4gOCkgJiAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICBUbXBQaHkgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsKKwkJCQkvLyBCdWlsZCBhbGwgY29ycmVzcG9uZGluZyBjaGFubmVsIGluZm9ybWF0aW9uCisJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFRtcFBoeSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJU2V0Q29tbW9uSFQocEFkYXB0ZXIpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9DT1VOVFJZX1JFR0lPTiAoQTolZCAgQi9HOiVkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQsCisJCQkJICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU46CisgI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93XG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICAgICAgTm93ID0gamlmZmllczsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sIFR4Q250ID0gJWQgXG4iLCBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCkpOworCisgICAgICAgICAgICBpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIERyaXZlciBpcyBpbiBNb25pdG9yIE1vZGUgbm93ICEhIVxuIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisJCQkvL0JlbnNvbiBhZGQgMjAwODA1MjcsIHdoZW4gcmFkaW8gb2ZmLCBzdGEgZG9uJ3QgbmVlZCB0byBzY2FuCisJCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkKKwkJCQlicmVhazsKKworCQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJCXsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgRHJpdmVyIGlzIHNjYW5uaW5nIG5vdyAhISFcbiIpKTsKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBUUlVFOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKwkJCWlmIChwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCA+IDEwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTGluayBVUCwgaWdub3JlIHRoaXMgc2V0OjpPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTlxuIikpOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQkJcEFkYXB0ZXItPlN0YUNmZy5TY2FuQ250ID0gOTk7CQkvLyBQcmV2ZW50IGF1dG8gc2NhbiB0cmlnZ2VyZWQgYnkgdGhpcyBPSUQKKwkJCQlicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgJiYKKwkJCQkoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAorCQkJCShwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKwkJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fAorCQkJCShwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKSAmJgorICAgICAgICAgICAgICAgIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExpbmsgVVAsIFBvcnQgTm90IFNlY3VyZWQhIGlnbm9yZSB0aGlzIHNldDo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU5cbiIpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJCXBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDk5OwkJLy8gUHJldmVudCBhdXRvIHNjYW4gdHJpZ2dlcmVkIGJ5IHRoaXMgT0lECisJCQkJYnJlYWs7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0ZWxsIENOVEwgc3RhdGUgbWFjaGluZSB0byBjYWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgpIGFmdGVyIGNvbXBsZXRpbmcKKyAgICAgICAgICAgIC8vIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuCisgICAgICAgICAgICBwQWRhcHRlci0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOworICAgICAgICAgICAgLy8gUmVzZXQgYWxsb3dlZCBzY2FuIHJldHJpZXMKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDA7CisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsKKworCQkJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gVFJVRTsKKyAgICAgICAgICAgIFJUTVBfU0VUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworICAgICAgICAgICAgTWxtZUVucXVldWUocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1NTSUQ6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9TU0lEKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgCVBDSEFSIHBTc2lkU3RyaW5nID0gTlVMTDsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmU3NpZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9TU0lEIChMZW49JWQsU3NpZD0lcylcbiIsIFNzaWQuU3NpZExlbmd0aCwgU3NpZC5Tc2lkKSk7CisgICAgICAgICAgICAgICAgaWYgKFNzaWQuU3NpZExlbmd0aCA+IE1BWF9MRU5fT0ZfU1NJRCkKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIAlpZiAoU3NpZC5Tc2lkTGVuZ3RoID09IDApCisgICAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgICAJCVNldF9TU0lEX1Byb2MocEFkYXB0ZXIsICIiKTsKKyAgICAgICAgICAgICAgICAJfQorCQkJCQllbHNlCisgICAgICAgICAgICAgICAgCXsKKwkgICAgICAgICAgICAgICAgCXBTc2lkU3RyaW5nID0gKENIQVIgKikga21hbGxvYyhNQVhfTEVOX09GX1NTSUQrMSwgTUVNX0FMTE9DX0ZMQUcpOworCQkJCQkJaWYgKHBTc2lkU3RyaW5nKQorCQkJCQkJeworCQkJCQkJCU5kaXNaZXJvTWVtb3J5KHBTc2lkU3RyaW5nLCBNQVhfTEVOX09GX1NTSUQrMSk7CisJCQkJCQkJTmRpc01vdmVNZW1vcnkocFNzaWRTdHJpbmcsIFNzaWQuU3NpZCwgU3NpZC5Tc2lkTGVuZ3RoKTsKKwkgICAgICAgICAgICAgICAgCQlTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCBwU3NpZFN0cmluZyk7CisJCQkJCQkJa2ZyZWUocFNzaWRTdHJpbmcpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJCVN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0JTU0lEOgorI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93XG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZCc3NpZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIC8vIHRlbGwgQ05UTCBzdGF0ZSBtYWNoaW5lIHRvIGNhbGwgTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKCkgYWZ0ZXIgY29tcGxldGluZworICAgICAgICAgICAgICAgIC8vIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsKKworCQkJCS8vIFByZXZlbnQgdG8gY29ubmVjdCBBUCBhZ2FpbiBpbiBTVEFNbG1lUGVyaW9kaWNFeGVjCisJCQkJcEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW49IDMyOworCisgICAgICAgICAgICAgICAgLy8gUmVzZXQgYWxsb3dlZCBzY2FuIHJldHJpZXMKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLlNjYW5DbnQgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSVDI4WFhfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfODAyXzExX0JTU0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKikmQnNzaWQpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IFRSVUU7CisKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQlNTSUQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnNzaWRbMF0sIEJzc2lkWzFdLCBCc3NpZFsyXSwgQnNzaWRbM10sIEJzc2lkWzRdLCBCc3NpZFs1XSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9SQURJTzoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKEJPT0xFQU4pKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZSYWRpb1N0YXRlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9SQURJTyAoPSVkKVxuIiwgUmFkaW9TdGF0ZSkpOworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvICE9IFJhZGlvU3RhdGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvID0gUmFkaW9TdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuYlJhZGlvICE9IChwQWRhcHRlci0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZGFwdGVyLT5TdGFDZmcuYlN3UmFkaW8pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJSYWRpbyA9IChwQWRhcHRlci0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZGFwdGVyLT5TdGFDZmcuYlN3UmFkaW8pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWxtZVJhZGlvT24ocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQkJCXBBZGFwdGVyLT5FeHRyYUluZm8gPSBFWFRSQV9JTkZPX0NMRUFSOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1sbWVSYWRpb09mZihwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uCisJCQkJCQkJcEFkYXB0ZXItPkV4dHJhSW5mbyA9IFNXX1JBRElPX09GRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUEhZX01PREU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihSVF84MDJfMTFfUEhZX01PREUpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQaHlNb2RlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChQaHlNb2RlIDw9IE1heFBoeU1vZGUpCisJCQkJeworICAgICAgICAgICAgICAgIAlSVE1QU2V0UGh5TW9kZShwQWRhcHRlciwgUGh5TW9kZSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCVNldENvbW1vbkhUKHBBZGFwdGVyKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQl9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1BIWV9NT0RFICg9JWQpXG4iLCBQaHlNb2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1NUQV9DT05GSUc6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihSVF84MDJfMTFfU1RBX0NPTkZJRykpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJlN0YUNvbmZpZywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gU3RhQ29uZmlnLkVuYWJsZVR4QnVyc3Q7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPSBTdGFDb25maWcuVXNlQkdQcm90ZWN0aW9uOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgPSAxOyAvLyAyMDAzLTEwLTMwIGFsd2F5cyBTSE9SVCBTTE9UIGNhcGFibGUKKyAgICAgICAgICAgICAgICBpZiAoKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSAhPSBTdGFDb25maWcuQWRob2NNb2RlKSAmJgorCQkJCQkoU3RhQ29uZmlnLkFkaG9jTW9kZSA8PSBNYXhQaHlNb2RlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGFsbG93IGR5bmFtaWMgY2hhbmdlIG9mICJVU0UgT0ZETSByYXRlIG9yIG5vdCIgaW4gQURIT0MgbW9kZQorICAgICAgICAgICAgICAgICAgICAvLyBpZiBzZXR0aW5nIGNoYW5nZWQsIG5lZWQgdG8gcmVzZXQgY3VycmVudCBUWCByYXRlIGFzIHdlbGwgYXMgQkVBQ09OIGZyYW1lIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSBTdGFDb25maWcuQWRob2NNb2RlOworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBoeU1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgTWxtZVVwZGF0ZVR4UmF0ZXMocEFkYXB0ZXIsIEZBTFNFLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VJYnNzQmVhY29uKHBBZGFwdGVyKTsgICAgICAgICAgIC8vIHJlLWJ1aWxkIEJFQUNPTiBmcmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgQXNpY0VuYWJsZUlic3NTeW5jKHBBZGFwdGVyKTsgICAvLyBjb3B5IHRvIG9uLWNoaXAgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1NFVF9TVEFfQ09ORklHIChCdXJzdD0lZCwgUHJvdGVjdGlvbj0lbGQsU2hvcnRTbG90PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfUkFURVMpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZhcnlSYXRlcywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsICZhcnlSYXRlcywgc2l6ZW9mKE5ESVNfODAyXzExX1JBVEVTKSk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0RFU0lSRURfUkFURVMgKCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeClcbiIsCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0sCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10sCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs0XSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNV0sCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs2XSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbN10gKSk7CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgRGVzaXJlZFJhdGUgbWF5IGFmZmVjdCB0aGUgTUFYIFRYIHJhdGUgd2UgdXNlZCB0byBUWCBmcmFtZXMgb3V0CisgICAgICAgICAgICAgICAgTWxtZVVwZGF0ZVR4UmF0ZXMocEFkYXB0ZXIsIEZBTFNFLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUFJFQU1CTEU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihSVF84MDJfMTFfUFJFQU1CTEUpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQcmVhbWJsZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFByZWFtYmxlID0gUHJlYW1ibGU7CisgICAgICAgICAgICAgICAgICAgIE1sbWVTZXRUeFByZWFtYmxlKHBBZGFwdGVyLCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoUHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZUxvbmcpIHx8IChQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlQXV0bykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBpZiB1c2VyIHdhbnRzIEFVVE8sIGluaXRpYWxpemUgdG8gTE9ORyBoZXJlLCB0aGVuIGNoYW5nZSBhY2NvcmRpbmcgdG8gQVAncworICAgICAgICAgICAgICAgICAgICAvLyBjYXBhYmlsaXR5IHVwb24gYXNzb2NpYXRpb24uCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFByZWFtYmxlOworICAgICAgICAgICAgICAgICAgICBNbG1lU2V0VHhQcmVhbWJsZShwQWRhcHRlciwgUnQ4MDJfMTFQcmVhbWJsZUxvbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1BSRUFNQkxFICg9JWQpXG4iLCBQcmVhbWJsZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9XRVBfU1RBVFVTOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfV0VQX1NUQVRVUykpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJldlcFN0YXR1cywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSBUS0lQLCBBRVMsIFdFUCBhcmUgYWxsIHN1cHBvcnRlZC4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBpbnZhbGlkIHNldHRpbmcKKyAgICAgICAgICAgICAgICBpZiAoV2VwU3RhdHVzIDw9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0tleUFic2VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBXZXBTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmZpZyBoYXMgY2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBXZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IFdlcFN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyICAgID0gV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIAlwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICAgPSBXZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1dFUF9TVEFUVVMgKD0lZClcbiIsV2VwU3RhdHVzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQXV0aE1vZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKEF1dGhNb2RlID4gTmRpczgwMl8xMUF1dGhNb2RlTWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBBdXRoTW9kZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIGhhcyBjaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+YkNvbmZpZ0NoYW5nZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBBdXRoTW9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAoPSVkKSBcbiIscEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkJzc1R5cGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJCQlpZiAoQnNzVHlwZSA9PSBOZGlzODAyXzExSUJTUykKKwkJCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJBZGhvYyIpOworCQkJCWVsc2UgaWYgKEJzc1R5cGUgPT0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlKQorCQkJCQlTZXRfTmV0d29ya1R5cGVfUHJvYyhwQWRhcHRlciwgIkluZnJhIik7CisJCQkJZWxzZSBpZiAoQnNzVHlwZSA9PSBOZGlzODAyXzExTW9uaXRvcikKKwkJCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJNb25pdG9yIik7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJU3RhdHVzICA9IC1FSU5WQUw7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFICh1bmtub3duKVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCSBjYXNlIE9JRF84MDJfMTFfUkVNT1ZFX1dFUDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SRU1PVkVfV0VQXG4iKSk7CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9LRVlfSU5ERVgpKQorICAgICAgICAgICAgeworCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisJCQkJS2V5SWR4ID0gKihORElTXzgwMl8xMV9LRVlfSU5ERVggKikgd3JxLT51LmRhdGEucG9pbnRlcjsKKworCQkJCWlmIChLZXlJZHggJiAweDgwMDAwMDAwKQorCQkJCXsKKwkJCQkJLy8gU2hvdWxkIG5ldmVyIHNldCBkZWZhdWx0IGJpdCB3aGVuIHJlbW92ZSBrZXkKKwkJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJS2V5SWR4ID0gS2V5SWR4ICYgMHgwZmZmZmZmZjsKKwkJCQkJaWYgKEtleUlkeCA+PSA0KXsKKwkJCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gMDsKKwkJCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJCQkJCUFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgMCwgKFVDSEFSKUtleUlkeCk7CisJCQkJCX0KKwkJCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1JFU0VUX0NPVU5URVJTOgorICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMsIHNpemVvZihDT1VOVEVSXzgwMl8xMSkpOworICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5Db3VudGVyczgwMjMsIHNpemVvZihDT1VOVEVSXzgwMl8zKSk7CisgICAgICAgICAgICBOZGlzWmVyb01lbW9yeSgmcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLCBzaXplb2YoQ09VTlRFUl9SQUxJTkspKTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlciAgID0gMDsKKwkJCXBBZGFwdGVyLT5Db3VudGVyczgwMjMuR29vZFJlY2VpdmVzID0gMDsKKwkJCXBBZGFwdGVyLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlciAgID0gMDsKKyNpZmRlZiBSVDI4NzAKKwkJCXBBZGFwdGVyLT5CdWxrT3V0Q29tcGxldGUJPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtPdXRDb21wbGV0ZU90aGVyPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtPdXRDb21wbGV0ZUNhbmNlbCA9IDA7CisJCQlwQWRhcHRlci0+QnVsa091dFJlcSA9IDA7CisJCQlwQWRhcHRlci0+QnVsa0luUmVxPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtJbkNvbXBsZXRlID0gMDsKKwkJCXBBZGFwdGVyLT5CdWxrSW5Db21wbGV0ZUZhaWwgPSAwOworI2VuZGlmIC8vIFJUMjg3MCAvLworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1JFU0VUX0NPVU5URVJTIFxuIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfUlRTX1RIUkVTSE9MRCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJlJ0c1RocmVzaCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoUnRzVGhyZXNoID4gTUFYX1JUU19USFJFU0hPTEQpCisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPSAoVVNIT1JUKVJ0c1RocmVzaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEICg9JWxkKVxuIixSdHNUaHJlc2gpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQ6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkZyYWdUaHJlc2gsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgaWYgKEZyYWdUaHJlc2ggPiBNQVhfRlJBR19USFJFU0hPTEQgfHwgRnJhZ1RocmVzaCA8IE1JTl9GUkFHX1RIUkVTSE9MRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChGcmFnVGhyZXNoID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKUZyYWdUaHJlc2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQgKD0lbGQpIFxuIixGcmFnVGhyZXNoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1BPV0VSX01PREU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9QT1dFUl9NT0RFKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQb3dlck1vZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKFBvd2VyTW9kZSA9PSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKQorICAgICAgICAgICAgICAgIAlTZXRfUFNNb2RlX1Byb2MocEFkYXB0ZXIsICJDQU0iKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1ApCisgICAgICAgICAgICAgICAgCVNldF9QU01vZGVfUHJvYyhwQWRhcHRlciwgIk1heF9QU1AiKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQKQorCQkJCQlTZXRfUFNNb2RlX1Byb2MocEFkYXB0ZXIsICJGYXN0X1BTUCIpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFBvd2VyTW9kZSA9PSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUCkKKwkJCQkJU2V0X1BTTW9kZV9Qcm9jKHBBZGFwdGVyLCAiTGVnYWN5X1BTUCIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9QT1dFUl9NT0RFICg9JWQpXG4iLFBvd2VyTW9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIDwgc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQb3dlclRlbXAsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJaWYgKFBvd2VyVGVtcCA+IDEwMCkKKwkJCQkJUG93ZXJUZW1wID0gMHhmZmZmZmZmZjsgIC8vIEFVVE8KKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0ID0gUG93ZXJUZW1wOyAvL2tlZXAgY3VycmVudCBzZXR0aW5nLgorCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMSAoPSVsZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UpKTsKKwkJCX0KKwkgICAgICAgIGJyZWFrOworCQljYXNlIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX05FVFdPUktfVFlQRSkpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmTmV0VHlwZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQkJCWlmIChOZXRUeXBlID09IE5kaXM4MDJfMTFEUykKKwkJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBIWV8xMUIpOworCQkJCWVsc2UgaWYgKE5ldFR5cGUgPT0gTmRpczgwMl8xMU9GRE0yNCkKKwkJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBIWV8xMUJHX01JWEVEKTsKKwkJCQllbHNlIGlmIChOZXRUeXBlID09IE5kaXM4MDJfMTFPRkRNNSkKKwkJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBIWV8xMUEpOworCQkJCWVsc2UKKwkJCQkJU3RhdHVzID0gLUVJTlZBTDsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJCVNldENvbW1vbkhUKHBBZGFwdGVyKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRSAoPSVkKVxuIixOZXRUeXBlKSk7CisJCSAgICB9CisJCQlicmVhazsKKyAgICAgICAgLy8gRm9yIFdQQSBQU0sgUE1LIGtleQorICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfQUREX1dQQToKKyAgICAgICAgICAgIHBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocEtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBLZXksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAocEtleS0+TGVuZ3RoICE9IHdycS0+dS5kYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfQUREX1dQQSwgRmFpbGVkISFcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorCQkJCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSAmJgorCQkJCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX0FERF9XUEEsIEZhaWxlZCEhIFtBdXRoTW9kZSAhPSBXUEFQU0svV1BBMlBTSy9XUEFOT05FXVxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCQkJCQkgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgfHwKKwkJCQkJCSAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKSApICAgICAvLyBPbmx5IGZvciBXUEEgUFNLIG1vZGUKKwkJCQl7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuUE1LLCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBSYUNvbmZpZyBhcyBQU0sgYWdlbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IFNUQSBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19TVEFSVDsKKworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfQUREX1dQQSAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpXG4iLCBwS2V5LT5LZXlJbmRleCwgcEtleS0+S2V5TGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19OT1RVU0U7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9BRERfV1BBIChpZD0weCV4LCBMZW49JWQtYnl0ZSlcbiIsIHBLZXktPktleUluZGV4LCBwS2V5LT5LZXlMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZnJlZShwS2V5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUkVNT1ZFX0tFWToKKyAgICAgICAgICAgIHBSZW1vdmVLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocFJlbW92ZUtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBSZW1vdmVLZXksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAocFJlbW92ZUtleS0+TGVuZ3RoICE9IHdycS0+dS5kYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSwgRmFpbGVkISFcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSVE1QV1BBUmVtb3ZlS2V5UHJvYyhwQWRhcHRlciwgcFJlbW92ZUtleSk7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SRU1PVkVfS0VZLCBSZW1vdmUgV1BBIEtleSEhXG4iKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEtleUlkeCA9IHBSZW1vdmVLZXktPktleUluZGV4OworCisgICAgICAgICAgICAgICAgICAgIGlmIChLZXlJZHggJiAweDgwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgbmV2ZXIgc2V0IGRlZmF1bHQgYml0IHdoZW4gcmVtb3ZlIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSwgRmFpbGVkISEoU2hvdWxkIG5ldmVyIHNldCBkZWZhdWx0IGJpdCB3aGVuIHJlbW92ZSBrZXkpXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBLZXlJZHggPSBLZXlJZHggJiAweDBmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEtleUlkeCA+IDMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1JFTU9WRV9LRVksIEZhaWxlZCEhKEtleUlkWyVkXSBvdXQgb2YgcmFuZ2UpXG4iLCBLZXlJZHgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLCAwLCAoVUNIQVIpS2V5SWR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpXG4iLCBwUmVtb3ZlS2V5LT5LZXlJbmRleCwgcFJlbW92ZUtleS0+TGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZnJlZShwUmVtb3ZlS2V5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBOZXcgZm9yIFdQQQorICAgICAgICBjYXNlIE9JRF84MDJfMTFfQUREX0tFWToKKyAgICAgICAgICAgIHBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocEtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgaWYgKHBLZXktPkxlbmd0aCAhPSB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FERF9LRVksIEZhaWxlZCEhXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlRNUEFkZEtleShwQWRhcHRlciwgcEtleSk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FERF9LRVkgKGlkPTB4JXgsIExlbj0lZC1ieXRlKVxuIiwgcEtleS0+S2V5SW5kZXgsIHBLZXktPktleUxlbmd0aCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAga2ZyZWUocEtleSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQ29uZmlnLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIHBDb25maWcgPSAmQ29uZmlnOworCisgICAgICAgICAgICAgICAgaWYgKChwQ29uZmlnLT5CZWFjb25QZXJpb2QgPj0gMjApICYmIChwQ29uZmlnLT5CZWFjb25QZXJpb2QgPD00MDApKQorICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPSAoVVNIT1JUKSBwQ29uZmlnLT5CZWFjb25QZXJpb2Q7CisKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQWN0aXZlLkF0aW1XaW4gPSAoVVNIT1JUKSBwQ29uZmlnLT5BVElNV2luZG93OworICAgICAgICAgICAgICAgIE1BUF9LSFpfVE9fQ0hBTk5FTF9JRChwQ29uZmlnLT5EU0NvbmZpZywgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKTsKKyAgICAgICAgICAgICAgICAvLworCQkJCS8vIFNhdmUgdGhlIGNoYW5uZWwgb24gTWxtZUF1eCBmb3IgQ250bE9pZFJUQnNzaWRQcm9jIHVzZWQuCisJCQkJLy8KKwkJCQlwQWRhcHRlci0+TWxtZUF1eC5DaGFubmVsID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsOworCisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0NPTkZJR1VSQVRJT04gKEJlYWNuUGVyaW9kPSVsZCxBdGltVz0lbGQsQ2g9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBwQ29uZmlnLT5CZWFjb25QZXJpb2QsIHBDb25maWctPkFUSU1XaW5kb3csIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworICAgICAgICAgICAgICAgIC8vIENvbmZpZyBoYXMgY2hhbmdlZAorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9IVF9QSFlNT0RFOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aAkhPSBzaXplb2YoT0lEX1NFVF9IVF9QSFlNT0RFKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJICAgIFBPSURfU0VUX0hUX1BIWU1PREUJcEhUUGh5TW9kZSA9ICZIVF9QaHlNb2RlOworCisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkhUX1BoeU1vZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpwSFRQaHlNb2RlCShQaHlNb2RlID0gJWQsVHJhbnNtaXRObyA9ICVkLCBIdE1vZGUgPQklZCwJRXh0T2Zmc2V0ID0JJWQgLCBNQ1MgPSAlZCwgQlcgPQklZCwJU1RCQyA9ICVkLCBTSE9SVEdJID0gJWQpIFxuIiwKKwkJCQlwSFRQaHlNb2RlLT5QaHlNb2RlLCBwSFRQaHlNb2RlLT5UcmFuc21pdE5vLHBIVFBoeU1vZGUtPkh0TW9kZSxwSFRQaHlNb2RlLT5FeHRPZmZzZXQsCisJCQkJcEhUUGh5TW9kZS0+TUNTLCBwSFRQaHlNb2RlLT5CVywgcEhUUGh5TW9kZS0+U1RCQywJcEhUUGh5TW9kZS0+U0hPUlRHSSkpOworCQkJCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUJPj0gUEhZXzExQUJHTl9NSVhFRCkKKwkJCQkJUlRNUFNldEhUKHBBZGFwdGVyLAlwSFRQaHlNb2RlKTsKKwkJCX0KKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfSFRfUEhZTU9ERShNQ1M9JWQsQlc9JWQsU0dJPSVkLFNUQkM9JWQpXG4iLAorCQkJCXBBZGFwdGVyLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUywgcEFkYXB0ZXItPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuQlcsIHBBZGFwdGVyLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0ksCisJCQkJcEFkYXB0ZXItPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU1RCQykpOworCQkJYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9TRVRUSU5HOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUxPTkcpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJVUxPTkcgYXBzZCA7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmFwc2QsIHdycS0+dS5kYXRhLnBvaW50ZXIsCXdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQl8QjMxfkI3CXwJQjZ+QjUJIHwJIEI0CSB8CSBCMwkgfAlCMgkgfAlCMQkgfAkgICBCMAkJfAorCQkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCXwgUnN2ZAl8IE1heCBTUCBMZW4gfCBBQ19WTyB8IEFDX1ZJIHwgQUNfQksgfCBBQ19CRSB8IEFQU0QJQ2FwYWJsZQl8CisJCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSA9IChhcHNkICYgMHgwMDAwMDAwMSkgPyBUUlVFIDoJRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JFID0gKChhcHNkCSYgMHgwMDAwMDAwMikgPj4gMSkJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JLID0gKChhcHNkCSYgMHgwMDAwMDAwNCkgPj4gMikJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZJID0gKChhcHNkCSYgMHgwMDAwMDAwOCkgPj4gMykJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZPID0gKChhcHNkCSYgMHgwMDAwMDAxMCkgPj4gNCkJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aAk9IChVQ0hBUikoKGFwc2QJJiAweDAwMDAwMDYwKSA+PiA1KTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9TRVRUSU5HIChhcHNkPTB4JWx4LCBBUFNEQ2FwPSVkLCBbQkUsQkssVkksVk9dPVslZC8lZC8lZC8lZF0sCU1heFNQTGVuPSVkKVxuIiwgYXBzZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTRENhcGFibGUsCisJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CRSwJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JLLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkksCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WTywJcEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aCkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9BUFNEX1BTTToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGgJIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCS8vIERyaXZlciBuZWVkcwl0byBub3RpZnkgQVAgd2hlbiBQU00gY2hhbmdlcworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZQkhPSBwQWRhcHRlci0+U3RhQ2ZnLlBzbSkKKwkJCQl7CisJCQkJCU1sbWVTZXRQc21CaXQocEFkYXB0ZXIsCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSk7CisJCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZGFwdGVyLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UmF0ZSwJVFJVRSk7CisJCQkJfQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9QU00gKGJBUFNERm9yY2VQb3dlclNhdmU6JWQpXG4iLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpKTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQljYXNlIFJUX09JRF84MDJfMTFfU0VUX0RMUzoKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCUJPT0xFQU4Jb2xkdmFsdWUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlOworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChvbGR2YWx1ZSAmJgkhcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJCQl7CisJCQkJCWludAlpOworCQkJCQkvLyB0ZWFyCWRvd24gbG9jYWwgZGxzIHRhYmxlIGVudHJ5CisJCQkJCWZvcgkoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwkJCQkJeworCQkJCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCQkJeworCQkJCQkJCXBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJCQkJcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWRhcHRlciwgcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCS8vIHRlYXIJZG93biBwZWVyIGRscyB0YWJsZQllbnRyeQorCQkJCQlmb3IJKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQkJCQl7CisJCQkJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCQkJCQl7CisJCQkJCQkJcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZGFwdGVyLCBwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0RMUyAoPSVkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU06CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoCSE9IHNpemVvZihSVF84MDJfMTFfRExTX1VJKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVJUXzgwMl8xMV9ETFMJRGxzOworCisJCQkJTmRpc1plcm9NZW1vcnkoJkRscywgc2l6ZW9mKFJUXzgwMl8xMV9ETFMpKTsKKwkJCQlSVE1QTW92ZU1lbW9yeSgmRGxzLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpOworCQkJCU1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorCQkJCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCQkJCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSwKKwkJCQkJCQlzaXplb2YoUlRfODAyXzExX0RMUyksCisJCQkJCQkJJkRscyk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSBcbiIpKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQljYXNlIFJUX09JRF84MDJfMTFfU0VUX1dNTToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGgJIT0gc2l6ZW9mKEJPT0xFQU4pKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJnBBZGFwdGVyLT5Db21tb25DZmcuYldtbUNhcGFibGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1NFVF9XTU0gKD0lZCkJXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFOgorI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93XG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJLy8KKwkJCS8vIFNldCBOZGlzUmFkaW9TdGF0ZU9mZiB0bwlUUlVFLCBpbnN0ZWFkIG9mIGNhbGxlZAlNbG1lUmFkaW9PZmYuCisJCQkvLyBMYXRlciBvbiwgTkRJU184MDJfMTFfQlNTSURfTElTVF9FWC0+TnVtYmVyT2ZJdGVtcyBzaG91bGQgYmUJMAorCQkJLy8gd2hlbglxdWVyeSBPSURfODAyXzExX0JTU0lEX0xJU1QuCisJCQkvLworCQkJLy8gVFJVRTogIE51bWJlck9mSXRlbXMJd2lsbCBzZXQgdG8JMC4KKwkJCS8vIEZBTFNFOiBOdW1iZXJPZkl0ZW1zCW5vIGNoYW5nZS4KKwkJCS8vCisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLk5kaXNSYWRpb1N0YXRlT2ZmID0JVFJVRTsKKwkJCS8vIFNldCB0byBpbW1lZGlhdGVseSBzZW5kIHRoZSBtZWRpYSBkaXNjb25uZWN0CWV2ZW50CisJCQlwQWRhcHRlci0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcwk9IFRSVUU7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfRElTQVNTT0NJQVRFCVxuIikpOworCisJCQlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCWlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0JQ05UTF9JRExFKQorCQkJCXsKKwkJCQkJUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FCWJ1c3ksIHJlc2V0CU1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKwkJCQl9CisKKwkJCQlNbG1lRW5xdWV1ZShwQWRhcHRlciwKKwkJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJCU9JRF84MDJfMTFfRElTQVNTT0NJQVRFLAorCQkJCQkwLAorCQkJCQlOVUxMKTsKKworCQkJCVN0YXRlTWFjaGluZVRvdWNoZWQJPSBUUlVFOworCQkJfQorCQkJYnJlYWs7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9JTU1FX0JBX0NBUDoKKwkJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihPSURfQkFDQVBfU1RSVUMpKQorCQkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCU9JRF9CQUNBUF9TVFJVQyBPcmRlIDsKKwkJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJk9yZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJCWlmIChPcmRlLlBvbGljeSA+IEJBX05PVFVTRSkKKwkJCQkJeworCQkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKE9yZGUuUG9saWN5ID09IEJBX05PVFVTRSkKKwkJCQkJeworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gQkFfTk9UVVNFOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSBPcmRlLk1wZHVEZW5zaXR5OworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkgPSBPcmRlLk1wZHVEZW5zaXR5OworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUgPSBPcmRlLkFtc2R1RW5hYmxlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplPSBPcmRlLkFtc2R1U2l6ZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9Qcz0gT3JkZS5NTVBTbW9kZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gT3JkZS5NTVBTbW9kZTsKKwkJCQkJCS8vIFVQZGF0YSB0byBIVCBJRQorCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9IE9yZGUuTU1QU21vZGU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplID0gT3JkZS5BbXNkdVNpemU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSBPcmRlLk1wZHVEZW5zaXR5OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gT3JkZS5BdXRvQkE7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBJTU1FRF9CQTsgLy8gd2Ugb25seSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4KKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlID0gT3JkZS5BbXNkdUVuYWJsZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZT0gT3JkZS5BbXNkdVNpemU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHMgPSBPcmRlLk1NUFNtb2RlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBPcmRlLk1NUFNtb2RlOworCisJCQkJCQkvLyBVUGRhdGEgdG8gSFQgSUUKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHMgPSBPcmRlLk1NUFNtb2RlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9IE9yZGUuQW1zZHVTaXplOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKworCQkJCQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA+IE1BWF9SWF9SRU9SREVSQlVGKQorCQkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IE1BWF9SWF9SRU9SREVSQlVGOworCisJCQkJCX0KKworCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS53b3JkID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkud29yZDsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjooT3JkZS5BdXRvQkEgPSAlZCkgKFBvbGljeT0lZCkoUmVCQVdpbkxpbWl0PSVkKShUeEJBV2luTGltaXQ9JWQpKEF1dG9Nb2RlPSVkKVxuIixPcmRlLkF1dG9CQSwgcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5LAorCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0LHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlR4QkFXaW5MaW1pdCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBKSk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6KE1pbW9QcyA9ICVkKShBbXNkdUVuYWJsZSA9ICVkKSAoQW1zZHVTaXplPSVkKShNcGR1RGVuc2l0eT0lZClcbiIscEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSwKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZSwgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkpKTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX0FERF9JTU1FX0JBOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIFNldCA6OiBSVF9PSURfODAyXzExX0FERF9JTU1FX0JBIFxuIikpOworCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoT0lEX0FERF9CQV9FTlRSWSkpCisJCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJVUNIQVIJCSAgICAgICAgaW5kZXg7CisJCQkJT0lEX0FERF9CQV9FTlRSWSAgICBCQTsKKwkJCQlNQUNfVEFCTEVfRU5UUlkgICAgICpwRW50cnk7CisKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQkEsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJaWYgKEJBLlRJRCA+IDE1KQorCQkJCXsKKwkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy9CQVRhYmxlSW5zZXJ0RW50cnkKKwkJCQkJLy9BcyBhZC1ob2MgbW9kZSwgQkEgcGFpciBpcyBub3QgbGltaXRlZCB0byBvbmx5IEJTU0lELiBzbyBhZGQgdmlhIE9JRC4KKwkJCQkJaW5kZXggPSBCQS5USUQ7CisJCQkJCS8vIGluIGFkIGhvYyBtb2RlLCB3aGVuIGFkZGluZyBCQSBwYWlyLCB3ZSBzaG91bGQgaW5zZXJ0IHRoaXMgZW50cnkgaW50byBNQUNFbnRyeSB0b28KKwkJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkYXB0ZXIsIEJBLk1BQ0FkZHIpOworCQkJCQlpZiAoIXBFbnRyeSkKKwkJCQkJeworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQS4gYnJlYWsgb24gbm8gY29ubmVjdGlvbi4tLS0tOiV4OiV4XG4iLCBCQS5NQUNBZGRyWzRdLCBCQS5NQUNBZGRyWzVdKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoQkEuSXNSZWNpcGllbnQgPT0gRkFMU0UpCisJCQkJCXsKKwkJCQkJICAgIGlmIChwRW50cnktPmJJQW1CYWRBdGhlcm9zID09IFRSVUUpCisJCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gMHgxMDsKKworCQkJCQkJQkFPcmlTZXNzaW9uU2V0VXAocEFkYXB0ZXIsIHBFbnRyeSwgaW5kZXgsIDAsIDEwMCwgVFJVRSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvL0JBVGFibGVJbnNlcnRFbnRyeShwQWRhcHRlciwgcEVudHJ5LT5BaWQsIEJBLk1BQ0FkZHIsIDAsIDB4ZmZmZiwgQkEuVElELCBCQS5uTVNEVSwgQkEuSXNSZWNpcGllbnQpOworCQkJCQl9CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX0FERF9JTU1FX0JBLiBSZWMgPSAlZC4gTWFjID0gJXg6JXg6JXg6JXg6JXg6JXggLiBcbiIsCisJCQkJCQlCQS5Jc1JlY2lwaWVudCwgQkEuTUFDQWRkclswXSwgQkEuTUFDQWRkclsxXSwgQkEuTUFDQWRkclsyXSwgQkEuTUFDQWRkclsyXQorCQkJCQkJLCBCQS5NQUNBZGRyWzRdLCBCQS5NQUNBZGRyWzVdKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1RFQVJfSU1NRV9CQToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldCA6OiBSVF9PSURfODAyXzExX1RFQVJfSU1NRV9CQSBcbiIpKTsKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE9JRF9BRERfQkFfRU5UUlkpKQorCQkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVBPSURfQUREX0JBX0VOVFJZCXBCQTsKKwkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCQkJCXBCQSA9IGttYWxsb2Mod3JxLT51LmRhdGEubGVuZ3RoLCBNRU1fQUxMT0NfRkxBRyk7CisKKwkJCQlpZiAocEJBID09IE5VTEwpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogUlRfT0lEXzgwMl8xMV9URUFSX0lNTUVfQkEga21hbGxvYygpIGNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnlcbiIpKTsKKwkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIocEJBLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogUlRfT0lEXzgwMl8xMV9URUFSX0lNTUVfQkEoVElEPSVkLCBiQWxsVGlkPSVkKVxuIiwgcEJBLT5USUQsIHBCQS0+YkFsbFRpZCkpOworCisJCQkJCWlmICghcEJBLT5iQWxsVGlkICYmIChwQkEtPlRJRCA+IE5VTV9PRl9USUQpKQorCQkJCQl7CisJCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19JTlZBTElEX0RBVEE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWlmIChwQkEtPklzUmVjaXBpZW50ID09IEZBTFNFKQorCQkJCQl7CisJCQkJCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWRhcHRlciwgcEJBLT5NQUNBZGRyKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBwQkEtPklzUmVjaXBpZW50ID09IEZBTFNFXG4iKSk7CisJCQkJCQlpZiAocEVudHJ5KQorCQkJCQkJeworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBwQkEtPnBFbnRyeVxuIikpOworCQkJCQkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZGFwdGVyLCBwRW50cnktPkFpZCwgcEJBLT5USUQsIEZBTFNFLCBUUlVFKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogTm90IGZvdW5kIHBFbnRyeSBcbiIpKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZGFwdGVyLCBwQkEtPk1BQ0FkZHIpOworCQkJCQkJaWYgKHBFbnRyeSkKKwkJCQkJCXsKKwkJCQkJCQlCQVJlY1Nlc3Npb25UZWFyRG93biggcEFkYXB0ZXIsIChVQ0hBUilwRW50cnktPkFpZCwgcEJBLT5USUQsIFRSVUUpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldCA6OiBOb3QgZm91bmQgcEVudHJ5IFxuIikpOworCQkJCQl9CisJCQkJCWtmcmVlKHBCQSk7CisJCQkJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyAgICAgICAgLy8gRm9yIFdQQV9TVVBQTElDQU5UIHRvIHNldCBzdGF0aWMgd2VwIGtleQorICAgIAljYXNlIE9JRF84MDJfMTFfQUREX1dFUDoKKyAgICAJICAgIHBXZXBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworCisgICAgCSAgICBpZihwV2VwS2V5ID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVOT01FTTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCwgRmFpbGVkISFcbiIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBXZXBLZXksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAoU3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfV0VQLCBGYWlsZWQgKGxlbmd0aCBtaXNtYXRjaCkhIVxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworCQkgICAgICAgIEtleUlkeCA9IHBXZXBLZXktPktleUluZGV4ICYgMHgwZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAvLyBLZXlJZHggbXVzdCBiZSAwIH4gMworICAgICAgICAgICAgICAgIGlmIChLZXlJZHggPiA0KQorICAgIAkJCXsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfV0VQLCBGYWlsZWQgKEtleUlkeCBtdXN0IGJlIHNtYWxsZXIgdGhhbiA0KSEhXG4iKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVDSEFSIENpcGhlckFsZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIFBVQ0hBUiBLZXk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGtleSBtYXRlcmlhbCBhbmQga2V5IGxlbmd0aAorICAgICAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5LCAxNik7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPSAoVUNIQVIpIHBXZXBLZXktPktleUxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleSwgJnBXZXBLZXktPktleU1hdGVyaWFsLCBwV2VwS2V5LT5LZXlMZW5ndGgpOworCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChwV2VwS2V5LT5LZXlMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfV0VQLCBvbmx5IHN1cHBvcnQgQ0lQSEVSX1dFUDY0KGxlbjo1KSAmIENJUEhFUl9XRVAxMjgobGVuOjEzKSEhXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQga2V5IGZvciB0eCAoc2hhcmVkIGtleSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBXZXBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgeworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBrZXkgbWF0ZXJpYWwgYW5kIGtleSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W0tleUlkeF0uS2V5LCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtLZXlJZHhdLktleUxlbiA9IChVQ0hBUikgcFdlcEtleS0+S2V5TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbS2V5SWR4XS5LZXksICZwV2VwS2V5LT5LZXlNYXRlcmlhbCwgcFdlcEtleS0+S2V5TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5SWQgPSBLZXlJZHg7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtLZXlJZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworICAgICAgICAgICAgICAgICAgICB9CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgS2V5ID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKKyAgICAgICAgCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwV2VwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSAmcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBncm91cCBrZXkgaW5mbworICAgIAkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkYXB0ZXIsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBOVUxMKTsKKyAgICAJCQkJCQkvLyBBc3NpZ24gcGFpcndpc2Uga2V5IGluZm8KKyAgICAJCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBLZXlJZHgsIENpcGhlckFsZywgcEVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpLCAlc1xuIiwgcFdlcEtleS0+S2V5SW5kZXgsIHBXZXBLZXktPktleUxlbmd0aCwgKHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpID8gIlBvcnQgU2VjdXJlZCI6IlBvcnQgTk9UIFNlY3VyZWQiKSk7CisJCQkJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAga2ZyZWUocFdlcEtleSk7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJICAgIGNhc2UgT0lEX1NFVF9DT1VOVEVSTUVBU1VSRVM6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihpbnQpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBlbmFibGVkID0gMDsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmZW5hYmxlZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJCbG9ja0Fzc29jID0gVFJVRTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIFdQQSBNSUMgZXJyb3Igc2hvdWxkIGJsb2NrIGFzc29jaWF0aW9uIGF0dGVtcHQgZm9yIDYwIHNlY29uZHMKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQmxvY2tBc3NvYyA9IEZBTFNFOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEX1NFVF9DT1VOVEVSTUVBU1VSRVMgYkJsb2NrQXNzb2M9JXNcbiIsIHBBZGFwdGVyLT5TdGFDZmcuYkJsb2NrQXNzb2MgPyAiVFJVRSI6IkZBTFNFIikpOworICAgICAgICAgICAgfQorCSAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQ6CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihVQ0hBUikpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJndwYV9zdXBwbGljYW50X2VuYWJsZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAJCQlwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IHdwYV9zdXBwbGljYW50X2VuYWJsZTsKKyAgICAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUICg9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkpOworCQkJfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9ERUFVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCAgICAgICpwSW5mbzsKKwkJCQlNTE1FX1FVRVVFX0VMRU0gKk1zZ0VsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKworICAgICAgICAgICAgICAgIHBJbmZvID0gKE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QgKikgTXNnRWxlbS0+TXNnOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBJbmZvLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIE1sbWVEZWF1dGhSZXFBY3Rpb24ocEFkYXB0ZXIsIE1zZ0VsZW0pOworCQkJCWtmcmVlKE1zZ0VsZW0pOworCisgICAgICAgICAgICAgICAgaWYgKElORlJBX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfREVBVVRIRU5USUNBVElPTiAoUmVhc29uPSVkKVxuIiwgcEluZm8tPlJlYXNvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9EUk9QX1VORU5DUllQVEVEOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoaW50KSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZCA9IDA7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmVuYWJsZWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWRhcHRlci0+TWFjVGFiTG9jayk7CisJCQkJcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBvcnRTZWN1cmVkID0gcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZDsKKwkJCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWRhcHRlci0+TWFjVGFiTG9jayk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0RST1BfVU5FTkNSWVBURUQgKD0lZClcbiIsIGVuYWJsZWQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfU0VUX0lFRUU4MDIxWDoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKEJPT0xFQU4pKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJRUVFODAyMXhTdGF0ZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IElFRUU4MDIxeFN0YXRlOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYICg9JWQpXG4iLCBJRUVFODAyMXhTdGF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYX1JFUVVJUkVfS0VZOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoQk9PTEVBTikpCisJCQkJIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJRUVFODAyMXhfcmVxdWlyZWRfa2V5cywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxeF9yZXF1aXJlZF9rZXlzID0gSUVFRTgwMjF4X3JlcXVpcmVkX2tleXM7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1NFVF9JRUVFODAyMVhfUkVRVUlSRV9LRVkgKCVkKVxuIiwgSUVFRTgwMjF4X3JlcXVpcmVkX2tleXMpKTsKKwkJCX0KKwkJCWJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUE1LSUQ6CisJICAgICAgICBwUG1rSWQgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworCisJICAgICAgICBpZihwUG1rSWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwUG1rSWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkgICAgICAgIC8vIGNoZWNrIHRoZSBQTUtJRCBpbmZvcm1hdGlvbgorCSAgICAgICAgaWYgKHBQbWtJZC0+QlNTSURJbmZvQ291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LLCBzaXplb2YoQlNTSURfSU5GTykqUE1LSURfTk8pOworCSAgICAgICAgZWxzZQorCSAgICAgICAgeworCQkgICAgICAgIFBCU1NJRF9JTkZPCXBCc3NJZEluZm87CisJCSAgICAgICAgVUlOVAkJQnNzSWR4OworCQkgICAgICAgIFVJTlQJCUNhY2hlZElkeDsKKworCQkgICAgICAgIGZvciAoQnNzSWR4ID0gMDsgQnNzSWR4IDwgcFBta0lkLT5CU1NJREluZm9Db3VudDsgQnNzSWR4KyspCisJCSAgICAgICAgeworCQkJICAgICAgICAvLyBwb2ludCB0byB0aGUgaW5kZXhlZCBCU1NJRF9JTkZPIHN0cnVjdHVyZQorCQkJICAgICAgICBwQnNzSWRJbmZvID0gKFBCU1NJRF9JTkZPKSAoKFBVQ0hBUikgcFBta0lkICsgMiAqIHNpemVvZihVSU5UKSArIEJzc0lkeCAqIHNpemVvZihCU1NJRF9JTkZPKSk7CisJCQkgICAgICAgIC8vIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBzYXZlZCBkYXRhIGJhc2UuCisJCQkgICAgICAgIGZvciAoQ2FjaGVkSWR4ID0gMDsgQ2FjaGVkSWR4IDwgcEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNS051bTsgQ2FjaGVkSWR4KyspCisJCQkgICAgICAgIHsKKwkJCQkgICAgICAgIC8vIGNvbXBhcmUgdGhlIEJTU0lECisJCQkJICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBCc3NJZEluZm8tPkJTU0lELCBwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUykpKQorCQkJCQkgICAgICAgIGJyZWFrOworCQkJICAgICAgICB9CisKKwkJCSAgICAgICAgLy8gRm91bmQsIHJlcGxhY2UgaXQKKwkJCSAgICAgICAgaWYgKENhY2hlZElkeCA8IFBNS0lEX05PKQorCQkJICAgICAgICB7CisJCQkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19PRkYsICgiVXBkYXRlIE9JRF84MDJfMTFfUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJCQkgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0sIHBCc3NJZEluZm8sIHNpemVvZihCU1NJRF9JTkZPKSk7CisJCQkJICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LTnVtKys7CisJCQkgICAgICAgIH0KKwkJCSAgICAgICAgLy8gTm90IGZvdW5kLCByZXBsYWNlIHRoZSBsYXN0IG9uZQorCQkJICAgICAgICBlbHNlCisJCQkgICAgICAgIHsKKwkJCQkgICAgICAgIC8vIFJhbmRvbWx5IHJlcGxhY2Ugb25lCisJCQkJICAgICAgICBDYWNoZWRJZHggPSAocEJzc0lkSW5mby0+QlNTSURbNV0gJSBQTUtJRF9OTyk7CisJCQkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19PRkYsICgiVXBkYXRlIE9JRF84MDJfMTFfUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJCQkgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0sIHBCc3NJZEluZm8sIHNpemVvZihCU1NJRF9JTkZPKSk7CisJCQkgICAgICAgIH0KKwkJICAgICAgICB9CisJCQl9CisJCQlpZihwUG1rSWQpCisJCQkJa2ZyZWUocFBta0lkKTsKKwkgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCisKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKwkJY2FzZSBPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVDoKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZTaG9ydFJldHJ5TGltaXQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCQkJCXR4X3J0eV9jZmcuZmllbGQuU2hvcnRSdHlMaW1pdCA9IFNob3J0UmV0cnlMaW1pdDsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsIHR4X3J0eV9jZmcud29yZCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVCAodHhfcnR5X2NmZy5maWVsZC5TaG9ydFJldHJ5TGltaXQ9JWQsIFNob3J0UmV0cnlMaW1pdD0lbGQpXG4iLCB0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQsIFNob3J0UmV0cnlMaW1pdCkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUIFxuIikpOworCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUxPTkcpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkxvbmdSZXRyeUxpbWl0LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCAmdHhfcnR5X2NmZy53b3JkKTsKKwkJCQl0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSdHlMaW1pdCA9IExvbmdSZXRyeUxpbWl0OworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgdHhfcnR5X2NmZy53b3JkKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfTE9OR1JFVFJZTElNSVQgKHR4X3J0eV9jZmcuZmllbGQuTG9uZ1JldHJ5TGltaXQ9ICVkLExvbmdSZXRyeUxpbWl0PSVsZClcbiIsIHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0LCBMb25nUmV0cnlMaW1pdCkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUVcbiIpKTsKKwkJCXBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJLy9wS2V5ID0gJldlcEtleTsKKworCQkJaWYgKCBwS2V5LT5MZW5ndGggIT0gd3JxLT51LmRhdGEubGVuZ3RoKQorCQkJeworCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRSwgRmFpbGVkISFcbiIpKTsKKwkJCX0KKwkJCUtleUlkeCA9IHBLZXktPktleUluZGV4ICYgMHgwZmZmZmZmZjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgicEtleS0+S2V5SW5kZXggPSVkLCBwS2V5LT5LZXlMZW5ndGg9JWRcbiIsIHBLZXktPktleUluZGV4LCBwS2V5LT5LZXlMZW5ndGgpKTsKKworCQkJLy8gaXQgaXMgYSBzaGFyZWQga2V5CisJCQlpZiAoS2V5SWR4ID4gNCkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbiA9IChVQ0hBUikgcEtleS0+S2V5TGVuZ3RoOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksICZwS2V5LT5LZXlNYXRlcmlhbCwgcEtleS0+S2V5TGVuZ3RoKTsKKwkJCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQorCQkJCXsKKwkJCQkJLy8gRGVmYXVsdCBrZXkgZm9yIHR4IChzaGFyZWQga2V5KQorCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworCQkJCX0KKwkJCQkvL1Jlc3RhcnRBUElzUmVxdWlyZWQgPSBUUlVFOworCQkJfQorCQkJYnJlYWs7CisKKworCQljYXNlIE9JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlEOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1dFUERFRkFVTFRLRVlJRCBcbiIpKTsKKworCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUNIQVIpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJnBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJCQlicmVhazsKKworCisJCWNhc2UgT0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTCBcbiIpKTsKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVDSEFSKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZjdG1wLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCXNwcmludGYoJmN0bXAsIiVkIiwgY3RtcCk7CisJCQkJU2V0X0NoYW5uZWxfUHJvYyhwQWRhcHRlciwgJmN0bXApOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKworCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6dW5rbm93biBJT0NUTCdzIHN1YmNtZCA9IDB4JTA4eFxuIiwgY21kKSk7CisgICAgICAgICAgICBTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworSU5UIFJUTVBRdWVyeUluZm9ybWF0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZGFwdGVyLAorICAgIElOICBPVVQgc3RydWN0IGlmcmVxICAgICpycSwKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICBjbWQpCit7CisgICAgc3RydWN0IGl3cmVxICAgICAgICAgICAgICAgICAgICAgICAgKndycSA9IChzdHJ1Y3QgaXdyZXEgKikgcnE7CisgICAgTkRJU184MDJfMTFfQlNTSURfTElTVF9FWCAgICAgICAgICAgKnBCc3NpZExpc3QgPSBOVUxMOworICAgIFBORElTX1dMQU5fQlNTSURfRVggICAgICAgICAgICAgICAgIHBCc3M7CisgICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsKKyAgICBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OICAgICAgICAgICAqcENvbmZpZ3VyYXRpb24gPSBOVUxMOworICAgIFJUXzgwMl8xMV9MSU5LX1NUQVRVUyAgICAgICAgICAgICAgICpwTGlua1N0YXR1cyA9IE5VTEw7CisgICAgUlRfODAyXzExX1NUQV9DT05GSUcgICAgICAgICAgICAgICAgKnBTdGFDb25maWcgPSBOVUxMOworICAgIE5ESVNfODAyXzExX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICpwU3RhdGlzdGljcyA9IE5VTEw7CisgICAgTkRJU184MDJfMTFfUlRTX1RIUkVTSE9MRCAgICAgICAgICAgUnRzVGhyZXNoOworICAgIE5ESVNfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEIEZyYWdUaHJlc2g7CisgICAgTkRJU184MDJfMTFfUE9XRVJfTU9ERSAgICAgICAgICAgICAgUG93ZXJNb2RlOworICAgIE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgIEJzc1R5cGU7CisgICAgUlRfODAyXzExX1BSRUFNQkxFICAgICAgICAgICAgICAgICAgUHJlYW1UeXBlOworICAgIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOworICAgIE5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKyAgICBORElTX01FRElBX1NUQVRFICAgICAgICAgICAgICAgICAgICBNZWRpYVN0YXRlOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzc0J1ZlNpemUsIHVsSW5mbz0wLCBOZXR3b3JrVHlwZUxpc3RbNF0sIGFwc2QgPSAwOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzc0xlbiA9IDA7CisgICAgUFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1ZiA9IE5VTEwsIHBQdHI7CisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZV92ZXJzaW9uX2NvbXBpbGVkOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIFBhZGRpbmcgPSAwOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvU3RhdGU7CisJVUNIQVIJZHJpdmVyVmVyc2lvbls4XTsKKyAgICBPSURfU0VUX0hUX1BIWU1PREUJCQkgICAgICAgICpwSFRQaHlNb2RlID0gTlVMTDsKKworCisjaWZkZWYgU05NUF9TVVBQT1JUCisJLy9mb3Igc25tcCwga2F0aHkKKwlEZWZhdWx0S2V5SWR4VmFsdWUJCQkqcEtleUlkeFZhbHVlOworCUlOVAkJCQkJCQl2YWx1ZUxlbjsKKwlUWF9SVFlfQ0ZHX1NUUlVDCQkJdHhfcnR5X2NmZzsKKwlVTE9ORwkJCQkJCVNob3J0UmV0cnlMaW1pdCwgTG9uZ1JldHJ5TGltaXQ7CisJVUNIQVIJCQkJCQl0bXBbNjRdOworI2VuZGlmIC8vU05NUAorCisgICAgc3dpdGNoKGNtZCkKKyAgICB7CisgICAgICAgIGNhc2UgUlRfT0lEX0RFVklDRV9OQU1FOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFNUQV9OSUNfREVWSUNFX05BTUUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIFNUQV9OSUNfREVWSUNFX05BTUUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfVkVSU0lPTl9JTkZPOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF9WRVJTSU9OX0lORk8gXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSA4KnNpemVvZihVQ0hBUik7CisJCQlzcHJpbnRmKCZkcml2ZXJWZXJzaW9uWzBdLCAiJXMiLCBTVEFfRFJJVkVSX1ZFUlNJT04pOworCQkJZHJpdmVyVmVyc2lvbls3XSA9ICdcMCc7CisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZkcml2ZXJWZXJzaW9uLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBSQUxJTktfQVRFCisJCWNhc2UgUlRfUVVFUllfQVRFX1RYRE9ORV9DT1VOVDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9RVUVSWV9BVEVfVFhET05FX0NPVU5UIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVJTlQzMik7CisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+YXRlLlR4RG9uZUNvdW50LCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCQkJeworCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUOgorICAgICAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAkvKgorICAgICAgICAgICAgCSAqIFN0aWxsIHNjYW5uaW5nLCBpbmRpY2F0ZSB0aGUgY2FsbGVyIHNob3VsZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAJICovCisgICAgICAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQlNTSURfTElTVCAoU3RpbGwgc2Nhbm5pbmcpXG4iKSk7CisJCQkJcmV0dXJuIC1FQUdBSU47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUICglZCBCU1MgcmV0dXJuZWQpXG4iLHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yKSk7CisJCQlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKyAgICAgICAgICAgIC8vIENsYWN1bGF0ZSB0b3RhbCBidWZmZXIgc2l6ZSByZXF1aXJlZAorICAgICAgICAgICAgQnNzQnVmU2l6ZSA9IHNpemVvZihVTE9ORyk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwQWRhcHRlci0+U2NhblRhYi5Cc3NOcjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFsaWduIHBvaW50ZXIgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAgICAgICAgICAgICAgICAvL1BhZGRpbmcgPSA0IC0gKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlZhcklFTGVuICYgMHgwMDAzKTsKKyAgICAgICAgICAgICAgICAvL2lmIChQYWRkaW5nID09IDQpCisgICAgICAgICAgICAgICAgLy8gICAgUGFkZGluZyA9IDA7CisgICAgICAgICAgICAgICAgQnNzQnVmU2l6ZSArPSAoc2l6ZW9mKE5ESVNfV0xBTl9CU1NJRF9FWCkgLSAxICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbiArIFBhZGRpbmcpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3Igc2FmZXR5IGlzc3VlLCB3ZSBhZGQgMjU2IGJ5dGVzIGp1c3QgaW4gY2FzZQorICAgICAgICAgICAgQnNzQnVmU2l6ZSArPSAyNTY7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgc2FtZSBzaXplIGFzIHBhc3NlZCBmcm9tIGhpZ2hlciBsYXllcgorICAgICAgICAgICAgcEJ1ZiA9IGttYWxsb2MoQnNzQnVmU2l6ZSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocEJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJbml0IDgwMl8xMV9CU1NJRF9MSVNUX0VYIHN0cnVjdHVyZQorICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEJ1ZiwgQnNzQnVmU2l6ZSk7CisgICAgICAgICAgICBwQnNzaWRMaXN0ID0gKFBORElTXzgwMl8xMV9CU1NJRF9MSVNUX0VYKSBwQnVmOworICAgICAgICAgICAgcEJzc2lkTGlzdC0+TnVtYmVyT2ZJdGVtcyA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgYnVmZmVyIGxlbmd0aAorICAgICAgICAgICAgQnNzTGVuID0gNDsgLy8gQ29uc2lzdCBvZiBOdW1iZXJPZkl0ZW1zCisgICAgICAgICAgICAvLyBQb2ludCB0byBzdGFydCBvZiBORElTX1dMQU5fQlNTSURfRVgKKyAgICAgICAgICAgIC8vIHBQdHIgPSBwQnVmICsgc2l6ZW9mKFVMT05HKTsKKyAgICAgICAgICAgIHBQdHIgPSAoUFVDSEFSKSAmcEJzc2lkTGlzdC0+QnNzaWRbMF07CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnI7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQnNzID0gKFBORElTX1dMQU5fQlNTSURfRVgpIHBQdHI7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJnBCc3MtPk1hY0FkZHJlc3MsICZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICBpZiAoKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkhpZGRlbiA9PSAxKSAmJiAocEFkYXB0ZXItPlN0YUNmZy5iU2hvd0hpZGRlblNTSUQgPT0gRkFMU0UpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8KKwkJCQkJLy8gV2UgbXVzdCByZXR1cm4gdGhpcyBTU0lEIGR1cmluZyA0d2F5IGhhbmRzaGFraW5nLCBvdGhlcndpc2UgQWVnaXMgd2lsbCBmYWlsZWQgdG8gcGFyc2UgV1BBIGluZm9tYXRpb24KKwkJCQkJLy8gYW5kIHRoZW4gZmFpbGVkIHRvIHNlbmQgRUFQT2wgZmFyYW1lLgorCQkJCQkvLworCQkJCQlpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSAmJiAocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCAhPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkpCisJCQkJCXsKKwkJCQkJCXBCc3MtPlNzaWQuU3NpZExlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW47CisJCQkJCQlOZGlzTW92ZU1lbW9yeShwQnNzLT5Tc2lkLlNzaWQsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWQsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW4pOworCQkJCQl9CisJCQkJCWVsc2UKKyAgICAgICAgICAgICAgICAgICAgCXBCc3MtPlNzaWQuU3NpZExlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBCc3MtPlNzaWQuU3NpZExlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW47CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPlNzaWQuU3NpZCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZExlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBCc3MtPlByaXZhY3kgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Qcml2YWN5OworICAgICAgICAgICAgICAgIHBCc3MtPlJzc2kgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc3NpIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhOworICAgICAgICAgICAgICAgIHBCc3MtPk5ldHdvcmtUeXBlSW5Vc2UgPSBOZXR3b3JrVHlwZUluVXNlU2FuaXR5KCZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXSk7CisgICAgICAgICAgICAgICAgcEJzcy0+Q29uZmlndXJhdGlvbi5MZW5ndGggPSBzaXplb2YoTkRJU184MDJfMTFfQ09ORklHVVJBVElPTik7CisgICAgICAgICAgICAgICAgcEJzcy0+Q29uZmlndXJhdGlvbi5CZWFjb25QZXJpb2QgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5CZWFjb25QZXJpb2Q7CisgICAgICAgICAgICAgICAgcEJzcy0+Q29uZmlndXJhdGlvbi5BVElNV2luZG93ID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQXRpbVdpbjsKKworICAgICAgICAgICAgICAgIE1BUF9DSEFOTkVMX0lEX1RPX0tIWihwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsLCBwQnNzLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnKTsKKworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NUeXBlID09IEJTU19JTkZSQSkKKyAgICAgICAgICAgICAgICAgICAgcEJzcy0+SW5mcmFzdHJ1Y3R1cmVNb2RlID0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcEJzcy0+SW5mcmFzdHJ1Y3R1cmVNb2RlID0gTmRpczgwMl8xMUlCU1M7CisKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5TdXBwb3J0ZWRSYXRlcywgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3VwUmF0ZSwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3VwUmF0ZUxlbik7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEJzcy0+U3VwcG9ydGVkUmF0ZXMgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5TdXBSYXRlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkV4dFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uRXh0UmF0ZUxlbik7CisKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW4gPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBCc3MtPklFTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcyk7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPklFcywgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkZpeElFcywgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykpOworICAgICAgICAgICAgICAgICAgICBwUHRyID0gcFB0ciArIHNpemVvZihORElTX1dMQU5fQlNTSURfRVgpIC0gMSArIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzLT5JRUxlbmd0aCA9IChVTE9ORykoc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbik7CisgICAgICAgICAgICAgICAgICAgIHBQdHIgPSBwUHRyICsgc2l6ZW9mKE5ESVNfV0xBTl9CU1NJRF9FWCkgLSAxICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcyk7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPklFcywgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkZpeElFcywgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykpOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5JRXMgKyBzaXplb2YoTkRJU184MDJfMTFfRklYRURfSUVzKSwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVzLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbik7CisgICAgICAgICAgICAgICAgICAgIHBQdHIgKz0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBCc3MtPkxlbmd0aCA9IChVTE9ORykoc2l6ZW9mKE5ESVNfV0xBTl9CU1NJRF9FWCkgLSAxICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbiArIFBhZGRpbmcpOworCisjaWYgV0lSRUxFU1NfRVhUIDwgMTcKKyAgICAgICAgICAgICAgICBpZiAoKEJzc0xlbiArIHBCc3MtPkxlbmd0aCkgPCB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICAgICAgQnNzTGVuICs9IHBCc3MtPkxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzaWRMaXN0LT5OdW1iZXJPZkl0ZW1zID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBCc3NMZW4gKz0gcEJzcy0+TGVuZ3RoOworI2VuZGlmCisgICAgICAgICAgICB9CisKKyNpZiBXSVJFTEVTU19FWFQgPCAxNworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gQnNzTGVuOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChCc3NMZW4gPiB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2ZyZWUocEJzc2lkTGlzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBCc3NMZW47CisjZW5kaWYKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwQnNzaWRMaXN0LCBCc3NMZW4pOworICAgICAgICAgICAga2ZyZWUocEJzc2lkTGlzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gTUFDX0FERFJfTEVOOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTOgorICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCisgICAgICAgICAgICAgICAgTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIE1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE5ESVNfTUVESUFfU1RBVEUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZNZWRpYVN0YXRlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRDoKKyNpZmRlZiBSQUxJTktfQVRFCisJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisgICAgICAgICAgICBpZiAoSU5GUkFfT04ocEFkYXB0ZXIpIHx8IEFESE9DX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuQnNzaWQsIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUykpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQlNTSUQoPUVNUFRZKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9UQ09OTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfU1NJRDoKKwkJCU5kaXNaZXJvTWVtb3J5KCZTc2lkLCBzaXplb2YoTkRJU184MDJfMTFfU1NJRCkpOworCQkJTmRpc1plcm9NZW1vcnkoU3NpZC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworICAgICAgICAgICAgU3NpZC5Tc2lkTGVuZ3RoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJbWVtY3B5KFNzaWQuU3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkLAlTc2lkLlNzaWRMZW5ndGgpOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZTc2lkLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfU1NJRCAoTGVuPSVkLCBzc2lkPSVzKVxuIiwgU3NpZC5Tc2lkTGVuZ3RoLFNzaWQuU3NpZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9MSU5LX1NUQVRVUzoKKyAgICAgICAgICAgIHBMaW5rU3RhdHVzID0gKFJUXzgwMl8xMV9MSU5LX1NUQVRVUyAqKSBrbWFsbG9jKHNpemVvZihSVF84MDJfMTFfTElOS19TVEFUVVMpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocExpbmtTdGF0dXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcExpbmtTdGF0dXMtPkN1cnJUeFJhdGUgPSBSYXRlSWRUbzUwMEticHNbcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFJhdGVdOyAgIC8vIHVuaXQgOiA1MDAga2JwcworICAgICAgICAgICAgICAgIHBMaW5rU3RhdHVzLT5DaGFubmVsUXVhbGl0eSA9IHBBZGFwdGVyLT5NbG1lLkNoYW5uZWxRdWFsaXR5OworICAgICAgICAgICAgICAgIHBMaW5rU3RhdHVzLT5SeEJ5dGVDb3VudCA9IHBBZGFwdGVyLT5SYWxpbmtDb3VudGVycy5SZWNlaXZlZEJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICBwTGlua1N0YXR1cy0+VHhCeXRlQ291bnQgPSBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CisgICAgICAgIAkJcExpbmtTdGF0dXMtPkNlbnRyYWxDaGFubmVsID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbDsKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoUlRfODAyXzExX0xJTktfU1RBVFVTKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcExpbmtTdGF0dXMsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAga2ZyZWUocExpbmtTdGF0dXMpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0xJTktfU1RBVFVTXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTElOS19TVEFUVVMoa21hbGxvYyBmYWlsZWQpXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTjoKKyAgICAgICAgICAgIHBDb25maWd1cmF0aW9uID0gKE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gKikga21hbGxvYyhzaXplb2YoTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiksIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmIChwQ29uZmlndXJhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQ29uZmlndXJhdGlvbi0+TGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04pOworICAgICAgICAgICAgICAgIHBDb25maWd1cmF0aW9uLT5CZWFjb25QZXJpb2QgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZDsKKyAgICAgICAgICAgICAgICBwQ29uZmlndXJhdGlvbi0+QVRJTVdpbmRvdyA9IHBBZGFwdGVyLT5TdGFBY3RpdmUuQXRpbVdpbjsKKyAgICAgICAgICAgICAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFoocEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLCBwQ29uZmlndXJhdGlvbi0+RFNDb25maWcpOworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcENvbmZpZ3VyYXRpb24sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQ09ORklHVVJBVElPTihCZWFjb25QZXJpb2Q9JWxkLEF0aW1XPSVsZCxDaGFubmVsPSVkKSBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENvbmZpZ3VyYXRpb24tPkJlYWNvblBlcmlvZCwgcENvbmZpZ3VyYXRpb24tPkFUSU1XaW5kb3csIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCWtmcmVlKHBDb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OKGttYWxsb2MgZmFpbGVkKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1NOUl8wOgorCQkJaWYgKChwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTTlIwID4gMCkpCisJCQl7CisJCQkJdWxJbmZvID0gKCgweGViCS0gcEFkYXB0ZXItPlN0YUNmZy5MYXN0U05SMCkgKiAzKSAvCTE2IDsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywJd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TTlJfMCgweD0lbHgpXG4iLCB1bEluZm8pKTsKKwkJCX0KKyAgICAgICAgICAgIGVsc2UKKwkJCSAgICBTdGF0dXMgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TTlJfMToKKwkJCWlmICgocEFkYXB0ZXItPkFudGVubmEuZmllbGQuUnhQYXRoCT4gMSkgJiYKKyAgICAgICAgICAgICAgICAocEFkYXB0ZXItPlN0YUNmZy5MYXN0U05SMSA+IDApKQorCQkJeworCQkJCXVsSW5mbyA9ICgoMHhlYgktIHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjEpICogMykgLwkxNiA7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TTlJfMSgweD0lbHgpXG4iLHVsSW5mbykpOworCQkJfQorCQkJZWxzZQorCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1NOUl8xKHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjE9JWQpXG4iLHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjEpKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCAtIHBBZGFwdGVyLT5CYnBSc3NpVG9EYm1EZWx0YTsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIoPSVsZClcbiIsIHVsSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgT0lEXzgwMl8xMV9SU1NJOgorICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUlNTSToKKwkJCXVsSW5mbyA9IHBBZGFwdGVyLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTA7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLAl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9SU1NJXzE6CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywJd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUlNTSV8yOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMjsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1NUQVRJU1RJQ1M6CisgICAgICAgICAgICBwU3RhdGlzdGljcyA9IChORElTXzgwMl8xMV9TVEFUSVNUSUNTICopIGttYWxsb2Moc2l6ZW9mKE5ESVNfODAyXzExX1NUQVRJU1RJQ1MpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocFN0YXRpc3RpY3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfU1RBVElTVElDUyBcbiIpKTsKKyAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG1vc3QgdXAtdG8tZGF0ZSBoL3cgcmF3IGNvdW50ZXJzIGludG8gc29mdHdhcmUgY291bnRlcnMKKwkJCSAgICBOSUNVcGRhdGVSYXdDb3VudGVycyhwQWRhcHRlcik7CisKKyAgICAgICAgICAgICAgICAvLyBTYW5pdHkgY2hlY2sgZm9yIGNhbGN1bGF0aW9uIG9mIHN1Y2Vzc2Z1bCBjb3VudAorICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydCA8IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC5RdWFkUGFydCkKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQ7CisKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+VHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPk11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5GYWlsZWRDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRmFpbGVkQ291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPlJldHJ5Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPk11bHRpcGxlUmV0cnlDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGlwbGVSZXRyeUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5SVFNTdWNjZXNzQ291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJUU1N1Y2Nlc3NDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+UlRTRmFpbHVyZUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5SVFNGYWlsdXJlQ291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPkFDS0ZhaWx1cmVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuQUNLRmFpbHVyZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5GcmFtZUR1cGxpY2F0ZUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5GcmFtZUR1cGxpY2F0ZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+TXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5NdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQuUXVhZFBhcnQ7CisjaWZkZWYgREJHCisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPkZDU0Vycm9yQ291bnQgPSBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuUmVhbEZjc0VyckNvdW50OworI2Vsc2UKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+RkNTRXJyb3JDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+RnJhbWVEdXBsaWNhdGVDb3VudC51Lkxvd1BhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQudS5Mb3dQYXJ0IC8gMTAwOworI2VuZGlmCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX1NUQVRJU1RJQ1MpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwU3RhdGlzdGljcywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBrZnJlZShwU3RhdGlzdGljcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfU1RBVElTVElDUyhrbWFsbG9jIGZhaWxlZClcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEX0dFTl9SQ1ZfT0s6CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+Q291bnRlcnM4MDIzLkdvb2RSZWNlaXZlczsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfR0VOX1JDVl9OT19CVUZGRVI6CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXI7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9QSFlfTU9ERToKKyAgICAgICAgICAgIHVsSW5mbyA9IChVTE9ORylwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUEhZX01PREUgKD0lbGQpXG4iLCB1bEluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfU1RBX0NPTkZJRzoKKyAgICAgICAgICAgIHBTdGFDb25maWcgPSAoUlRfODAyXzExX1NUQV9DT05GSUcgKikga21hbGxvYyhzaXplb2YoUlRfODAyXzExX1NUQV9DT05GSUcpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocFN0YUNvbmZpZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHXG4iKSk7CisgICAgICAgICAgICAgICAgcFN0YUNvbmZpZy0+RW5hYmxlVHhCdXJzdCA9IHBBZGFwdGVyLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3Q7CisgICAgICAgICAgICAgICAgcFN0YUNvbmZpZy0+RW5hYmxlVHVyYm9SYXRlID0gMDsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5Vc2VCR1Byb3RlY3Rpb24gPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbjsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5Vc2VTaG9ydFNsb3RUaW1lID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZTsKKyAgICAgICAgICAgICAgICAvL3BTdGFDb25maWctPkFkaG9jTW9kZSA9IHBBZGFwdGVyLT5TdGFDZmcuQWRob2NNb2RlOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPkh3UmFkaW9TdGF0dXMgPSAocEFkYXB0ZXItPlN0YUNmZy5iSHdSYWRpbyA9PSBUUlVFKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPlJzdjEgPSAwOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPlN5c3RlbUVycm9yQml0bWFwID0gcEFkYXB0ZXItPlN5c3RlbUVycm9yQml0bWFwOworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihSVF84MDJfMTFfU1RBX0NPTkZJRyk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBTdGFDb25maWcsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAga2ZyZWUocFN0YUNvbmZpZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfU1RBX0NPTkZJRyhrbWFsbG9jIGZhaWxlZClcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEOgorICAgICAgICAgICAgUnRzVGhyZXNoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQ7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoUnRzVGhyZXNoKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmUnRzVGhyZXNoLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRCg9JWxkKVxuIiwgUnRzVGhyZXNoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEOgorICAgICAgICAgICAgRnJhZ1RocmVzaCA9IHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQ7CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID09IFRSVUUpCisgICAgICAgICAgICAgICAgRnJhZ1RocmVzaCA9IDA7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoRnJhZ1RocmVzaCk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJkZyYWdUaHJlc2gsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCg9JWxkKVxuIiwgRnJhZ1RocmVzaCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9QT1dFUl9NT0RFOgorICAgICAgICAgICAgUG93ZXJNb2RlID0gcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFBvd2VyTW9kZSk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJlBvd2VyTW9kZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1BPV0VSX01PREUoPSVkKVxuIiwgUG93ZXJNb2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1JBRElPOgorICAgICAgICAgICAgUmFkaW9TdGF0ZSA9IChCT09MRUFOKSBwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJhZGlvU3RhdGUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZSYWRpb1N0YXRlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfUkFESU8gKD0lZClcbiIsIFJhZGlvU3RhdGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERToKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQorICAgICAgICAgICAgICAgIEJzc1R5cGUgPSBOZGlzODAyXzExSUJTUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpCisgICAgICAgICAgICAgICAgQnNzVHlwZSA9IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfTU9OSVRPUikKKyAgICAgICAgICAgICAgICBCc3NUeXBlID0gTmRpczgwMl8xMU1vbml0b3I7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQnNzVHlwZSA9IE5kaXM4MDJfMTFBdXRvVW5rbm93bjsKKworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEJzc1R5cGUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZCc3NUeXBlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERSg9JWQpXG4iLCBCc3NUeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1BSRUFNQkxFOgorICAgICAgICAgICAgUHJlYW1UeXBlID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFByZWFtYmxlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFByZWFtVHlwZSk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJlByZWFtVHlwZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BSRUFNQkxFKD0lZClcbiIsIFByZWFtVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFOgorICAgICAgICAgICAgQXV0aE1vZGUgPSBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEF1dGhNb2RlKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmQXV0aE1vZGUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKD0lZClcbiIsIEF1dGhNb2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1dFUF9TVEFUVVM6CisgICAgICAgICAgICBXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihXZXBTdGF0dXMpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZXZXBTdGF0dXMsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9XRVBfU1RBVFVTKD0lZClcbiIsIFdlcFN0YXR1cykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTDoKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMICV4XG4iLHBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlcikpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTF8xOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMXzEgKD0lbGQpXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlKSk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVEOgorCQkJaWYgKChwQWRhcHRlci0+UmZJY1R5cGUJPT0gUkZJQ18yODUwKSB8fCAocEFkYXB0ZXItPlJmSWNUeXBlID09CVJGSUNfMjc1MCkpCisJCQl7CisJCQkJTmV0d29ya1R5cGVMaXN0WzBdID0gMzsgICAgICAgICAgICAgICAgIC8vIE51bWJlck9mSXRlbXMgPSAzCisJCQkJTmV0d29ya1R5cGVMaXN0WzFdID0gTmRpczgwMl8xMURTOyAgICAgIC8vIE5ldHdvcmtUeXBlWzFdID0gMTFiCisJCQkJTmV0d29ya1R5cGVMaXN0WzJdID0gTmRpczgwMl8xMU9GRE0yNDsgIC8vIE5ldHdvcmtUeXBlWzJdID0gMTFnCisJCQkJTmV0d29ya1R5cGVMaXN0WzNdID0gTmRpczgwMl8xMU9GRE01OyAgIC8vIE5ldHdvcmtUeXBlWzNdID0gMTFhCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gMTY7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZOZXR3b3JrVHlwZUxpc3RbMF0sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJTmV0d29ya1R5cGVMaXN0WzBdID0gMjsgICAgICAgICAgICAgICAgIC8vIE51bWJlck9mSXRlbXMgPSAyCisJCQkJTmV0d29ya1R5cGVMaXN0WzFdID0gTmRpczgwMl8xMURTOyAgICAgIC8vIE5ldHdvcmtUeXBlWzFdID0gMTFiCisJCQkJTmV0d29ya1R5cGVMaXN0WzJdID0gTmRpczgwMl8xMU9GRE0yNDsgIC8vIE5ldHdvcmtUeXBlWzJdID0gMTFnCisJCQkgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gMTI7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZOZXR3b3JrVHlwZUxpc3RbMF0sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQl9CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRFxuIikpOworCQkJCWJyZWFrOworCSAgICBjYXNlIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRToKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUEpCisJCQkJdWxJbmZvID0gTmRpczgwMl8xMU9GRE01OworCQkJZWxzZSBpZiAoKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCR19NSVhFRCkgfHwgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSkKKwkJCQl1bEluZm8gPSBOZGlzODAyXzExT0ZETTI0OworCQkJZWxzZQorCQkJCXVsSW5mbyA9IE5kaXM4MDJfMTFEUzsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1JYX1JBVEU6CisgICAgICAgICAgICB1bEluZm8gPSAoVUxPTkcpcEFkYXB0ZXItPkxhc3RSeFJhdGU7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9SWF9SQVRFICg9JWxkKVxuIiwgdWxJbmZvKSk7CisJCQlicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0xBU1RfVFhfUkFURToKKwkJCS8vdWxJbmZvID0gKFVMT05HKXBBZGFwdGVyLT5MYXN0VHhSYXRlOworCQkJdWxJbmZvID0gKFVMT05HKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZDsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1RYX1JBVEUgKD0lbHgpXG4iLCB1bEluZm8pKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRUVQUk9NX1ZFUlNJT046CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+RWVwcm9tVmVyc2lvbiwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRklSTVdBUkVfVkVSU0lPTjoKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5GaXJtd2FyZVZlcnNpb24sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKwkgICAgY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX05PSVNFX0xFVkVMOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkJicFdyaXRlTGF0Y2hbNjZdLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTk9JU0VfTEVWRUwgKD0lZClcbiIsIHBBZGFwdGVyLT5CYnBXcml0ZUxhdGNoWzY2XSkpOworCQkJYnJlYWs7CisJICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9FWFRSQV9JTkZPOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkV4dHJhSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX0VYVFJBX0lORk8gKD0lbGQpXG4iLCBwQWRhcHRlci0+RXh0cmFJbmZvKSk7CisJICAgICAgICBicmVhazsKKwkgICAgY2FzZSBSVF9PSURfV0VfVkVSU0lPTl9DT01QSUxFRDoKKwkgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVSU5UKTsKKwkgICAgICAgIHdlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJndlX3ZlcnNpb25fY29tcGlsZWQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJICAgICAgICBicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0FQU0RfU0VUVElORzoKKwkJCWFwc2QgPSAocEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgfCAocEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JFIDw8IDEpIHwgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CSyA8PCAyKQorCQkJCXwgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WSSA8PCAzKQl8IChwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8gPDwgNCkJfCAocEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aCA8PCA1KSk7CisKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmFwc2QsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9BUFNEX1NFVFRJTkcgKD0weCVseCxBUFNEQ2FwPSVkLEFDX0JFPSVkLEFDX0JLPSVkLEFDX1ZJPSVkLEFDX1ZPPSVkLE1BWFNQTGVuPSVkKVxuIiwKKwkJCQlhcHNkLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CRSxwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksscEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZJLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WTyxwQWRhcHRlci0+Q29tbW9uQ2ZnLk1heFNQTGVuZ3RoKSk7CisJCQlicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0FQU0RfUFNNOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfQVBTRF9QU00gKD0lZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkpOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9XTU06CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuYldtbUNhcGFibGUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9XTU0gKD0lZClcbiIsCXBBZGFwdGVyLT5Db21tb25DZmcuYldtbUNhcGFibGUpKTsKKwkJCWJyZWFrOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgY2FzZSBSVF9PSURfTkVXX0RSSVZFUjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVQ0hBUiBlbmFibGVkID0gMTsKKyAgICAJICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUNIQVIpOworICAgIAkgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmZW5hYmxlZCwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEX05FV19EUklWRVIgKD0lZClcbiIsIGVuYWJsZWQpKTsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUOgorCSAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgKD0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSk7CisJICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyAgICAgICAgY2FzZSBSVF9PSURfRFJJVkVSX0RFVklDRV9OQU1FOgorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF9EUklWRVJfREVWSUNFX05BTUUgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxNjsKKwkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcEFkYXB0ZXItPlN0YUNmZy5kZXZfbmFtZSwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwkJCXsKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworCQkJfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9IVF9QSFlNT0RFOgorICAgICAgICAgICAgcEhUUGh5TW9kZSA9IChPSURfU0VUX0hUX1BIWU1PREUgKikga21hbGxvYyhzaXplb2YoT0lEX1NFVF9IVF9QSFlNT0RFKSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYgKHBIVFBoeU1vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEhUUGh5TW9kZS0+UGh5TW9kZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZTsKKyAgICAJCQlwSFRQaHlNb2RlLT5IdE1vZGUgPSAoVUNIQVIpcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFOworICAgIAkJCXBIVFBoeU1vZGUtPkJXID0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuQlc7CisgICAgCQkJcEhUUGh5TW9kZS0+TUNTPSAoVUNIQVIpcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisgICAgCQkJcEhUUGh5TW9kZS0+U0hPUlRHST0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSTsKKyAgICAJCQlwSFRQaHlNb2RlLT5TVEJDPSAoVUNIQVIpcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5TVEJDOworCisgICAgCQkJcEhUUGh5TW9kZS0+RXh0T2Zmc2V0ID0gKChwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKSA/IChFWFRDSEFfQkVMT1cpIDogKEVYVENIQV9BQk9WRSkpOworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihPSURfU0VUX0hUX1BIWU1PREUpOworICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcEhUUGh5TW9kZSwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAJCQl7CisgICAgCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgCQkJfQorICAgIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0hUX1BIWU1PREUgKFBoeU1vZGUgPSAlZCwgTUNTID0lZCwgQlcgPSAlZCwgU1RCQyA9ICVkLCBFeHRPZmZzZXQ9JWQpXG4iLAorICAgIAkJCQlwSFRQaHlNb2RlLT5IdE1vZGUsIHBIVFBoeU1vZGUtPk1DUywgcEhUUGh5TW9kZS0+QlcsIHBIVFBoeU1vZGUtPlNUQkMsIHBIVFBoeU1vZGUtPkV4dE9mZnNldCkpOworICAgIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNbG1lVXBkYXRlVHhSYXRlcyAoLndvcmQgPSAleCApXG4iLCBwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLndvcmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHKGttYWxsb2MgZmFpbGVkKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX0NPVU5UUllfUkVHSU9OOgorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfQ09VTlRSWV9SRUdJT04gXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIHVsSW5mbyA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kOworICAgICAgICAgICAgdWxJbmZvID0gKHVsSW5mbyA8PCA4KXwocEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9EQVRfSFRfUEhZTU9ERToKKyAgICAgICAgICAgIHBIVFBoeU1vZGUgPSAoT0lEX1NFVF9IVF9QSFlNT0RFICopIGttYWxsb2Moc2l6ZW9mKE9JRF9TRVRfSFRfUEhZTU9ERSksIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmIChwSFRQaHlNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBIVFBoeU1vZGUtPlBoeU1vZGUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisgICAgCQkJcEhUUGh5TW9kZS0+SHRNb2RlID0gKFVDSEFSKXBBZGFwdGVyLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERTsKKyAgICAJCQlwSFRQaHlNb2RlLT5CVyA9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVzsKKyAgICAJCQlwSFRQaHlNb2RlLT5NQ1M9IChVQ0hBUilwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOworICAgIAkJCXBIVFBoeU1vZGUtPlNIT1JUR0k9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJOworICAgIAkJCXBIVFBoeU1vZGUtPlNUQkM9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDOworCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE9JRF9TRVRfSFRfUEhZTU9ERSk7CisgICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwSFRQaHlNb2RlLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgIAkJCXsKKyAgICAJCQkJU3RhdHVzID0gLUVGQVVMVDsKKyAgICAJCQl9CisgICAgCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfSFRfUEhZTU9ERSAoUGh5TW9kZSA9ICVkLCBNQ1MgPSVkLCBCVyA9ICVkLCBTVEJDID0gJWQsIEV4dE9mZnNldD0lZClcbiIsCisgICAgCQkJCXBIVFBoeU1vZGUtPkh0TW9kZSwgcEhUUGh5TW9kZS0+TUNTLCBwSFRQaHlNb2RlLT5CVywgcEhUUGh5TW9kZS0+U1RCQywgcEhUUGh5TW9kZS0+RXh0T2Zmc2V0KSk7CisgICAgCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1sbWVVcGRhdGVUeFJhdGVzICgud29yZCA9ICV4IClcbiIsIHBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1NUQV9DT05GSUcoa21hbGxvYyBmYWlsZWQpXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF9RVUVSWV9NVUxUSVBMRV9DQVJEX1NVUFBPUlQ6CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUNIQVIpOworICAgICAgICAgICAgaSA9IDA7CisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisgICAgICAgICAgICBpID0gMTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKwkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmksIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisJCQkJU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfUVVFUllfTVVMVElQTEVfQ0FSRF9TVVBQT1JUKD0lZCkgXG4iLCBpKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX01BQ19BRERSRVNTOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gTUFDX0FERFJfTEVOOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVST1VJOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVST1VJIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gTWFudWZhY3R1cmVyT1VJX0xFTjsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFUk5BTUU6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9NQU5VRkFDVFVSRVJOQU1FIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKE1hbnVmYWN0dXJlck5BTUUpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIE1hbnVmYWN0dXJlck5BTUUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfUkVTT1VSQ0VUWVBFSUROQU1FOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUkVTT1VSQ0VUWVBFSUROQU1FIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKFJlc291cmNlVHlwZUlkTmFtZSk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgUmVzb3VyY2VUeXBlSWROYW1lLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1BSSVZBQ1lPUFRJT05JTVBMRU1FTlRFRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BSSVZBQ1lPUFRJT05JTVBMRU1FTlRFRCBcbiIpKTsKKwkJCXVsSW5mbyA9IDE7IC8vIDEgaXMgc3VwcG9ydCB3ZXAgZWxzZSAyIGlzIG5vdCBzdXBwb3J0LgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9QT1dFUk1BTkFHRU1FTlRNT0RFOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUE9XRVJNQU5BR0VNRU5UTU9ERSBcbiIpKTsKKwkJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLlBzbSA9PSBQU01QX0FDVElPTikKKwkJCQl1bEluZm8gPSAxOyAvLyAxIGlzIHBvd2VyIGFjdGl2ZSBlbHNlIDIgaXMgcG93ZXIgc2F2ZS4KKwkJCWVsc2UKKwkJCQl1bEluZm8gPSAyOworCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRSBcbiIpKTsKKwkJCS8vS2V5SWR4VmFsdWUuS2V5SWR4ID0gcEFkLT5Qb3J0Q2ZnLk1CU1NJRFtwQWQtPklvY3RsSUZdLkRlZmF1bHRLZXlJZDsKKwkJCXBLZXlJZHhWYWx1ZSA9IHdycS0+dS5kYXRhLnBvaW50ZXI7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIktleUlkeFZhbHVlLktleUlkeCA9ICVkLCBcbiIscEtleUlkeFZhbHVlLT5LZXlJZHgpKTsKKwkJCXZhbHVlTGVuID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuOworCQkJTmRpc01vdmVNZW1vcnkocEtleUlkeFZhbHVlLT5WYWx1ZSwKKwkJCQkJCSAgICZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksCisJCQkJCQkgICB2YWx1ZUxlbik7CisJCQlwS2V5SWR4VmFsdWUtPlZhbHVlW3ZhbHVlTGVuXT0nXDAnOworCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoRGVmYXVsdEtleUlkeFZhbHVlKTsKKworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBLZXlJZHhWYWx1ZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRGVmYXVsdEtleUlkID0gJWQsIHRvdGFsIGxlbiA9ICVkLCBzdHIgbGVuPSVkLCBLZXlWYWx1ZT0gJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkLCB3cnEtPnUuZGF0YS5sZW5ndGgsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbiwKKwkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5WzBdLAorCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlbMF0sCisJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleVswXSwKKwkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5WzBdKSk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlEOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlEIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEZWZhdWx0S2V5SWQgPSVkIFxuIiwgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9XRVBLRVlNQVBQSU5HTEVOR1RIOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfV0VQS0VZTUFQUElOR0xFTkdUSCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKKwkJCQkJCQkJCSZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4sCisJCQkJCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgJnR4X3J0eV9jZmcud29yZCk7CisJCQlTaG9ydFJldHJ5TGltaXQgPSB0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQ7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTaG9ydFJldHJ5TGltaXQgPSVsZCwgIHR4X3J0eV9jZmcuZmllbGQuU2hvcnRSZXRyeUxpbWl0PSVkXG4iLCBTaG9ydFJldHJ5TGltaXQsIHR4X3J0eV9jZmcuZmllbGQuU2hvcnRSdHlMaW1pdCkpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZTaG9ydFJldHJ5TGltaXQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfTE9OR1JFVFJZTElNSVQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9MT05HUkVUUllMSU1JVCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgJnR4X3J0eV9jZmcud29yZCk7CisJCQlMb25nUmV0cnlMaW1pdCA9IHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0OworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTG9uZ1JldHJ5TGltaXQgPSVsZCwgIHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0PSVkXG4iLCBMb25nUmV0cnlMaW1pdCwgdHhfcnR5X2NmZy5maWVsZC5Mb25nUnR5TGltaXQpKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmTG9uZ1JldHJ5TGltaXQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfUFJPRFVDVElEOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUFJPRFVDVElEIFxuIikpOworCisjaWZkZWYgUlQyODcwCisJCQlzcHJpbnRmKHRtcCwgIiUwNHggJTA0eFxuIiwgKChQT1NfQ09PS0lFKXBBZGFwdGVyLT5PU19Db29raWUpLT5wVXNiX0Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciAsKChQT1NfQ09PS0lFKXBBZGFwdGVyLT5PU19Db29raWUpLT5wVXNiX0Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisjZW5kaWYgLy8gUlQyODcwIC8vCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4odG1wKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCB0bXAsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVJRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX01BTlVGQUNUVVJFSUQgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oTWFudWZhY3R1cmVyTkFNRSk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgTWFudWZhY3R1cmVyTkFNRSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0NVUlJFTlRDSEFOTkVMIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInNpemVvZiBVQ0hBUj0lZCwgY2hhbm5lbD0lZCBcbiIsIHNpemVvZihVQ0hBUiksIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTdGF0dXM9JWRcbiIsIFN0YXR1cykpOworCQkJYnJlYWs7CisjZW5kaWYgLy9TTk1QX1NVUFBPUlQKKworCQljYXNlIE9JRF84MDJfMTFfQlVJTERfQ0hBTk5FTF9FWDoKKwkJCXsKKwkJCQlVQ0hBUiB2YWx1ZTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9CVUlMRF9DSEFOTkVMX0VYIFxuIikpOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN1cHBvcnQgRVhUX0JVSUxEX0NIQU5ORUxfTElTVC5cbiIpKTsKKwkJCQl2YWx1ZSA9IDE7CisjZWxzZQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRvZXNuJ3Qgc3VwcG9ydCBFWFRfQlVJTERfQ0hBTk5FTF9MSVNULlxuIikpOworCQkJCXZhbHVlID0gMDsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ2YWx1ZSwgMSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9HRVRfQ0hfTElTVDoKKwkJCXsKKwkJCQlQUlRfQ0hBTk5FTF9MSVNUX0lORk8gcENoTGlzdEJ1ZjsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0dFVF9DSF9MSVNUIFxuIikpOworCQkJCWlmIChwQWRhcHRlci0+Q2hhbm5lbExpc3ROdW0gPT0gMCkKKwkJCQl7CisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXBDaExpc3RCdWYgPSAoUlRfQ0hBTk5FTF9MSVNUX0lORk8gKikga21hbGxvYyhzaXplb2YoUlRfQ0hBTk5FTF9MSVNUX0lORk8pLCBNRU1fQUxMT0NfRkxBRyk7CisJCQkJaWYgKHBDaExpc3RCdWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXBDaExpc3RCdWYtPkNoYW5uZWxMaXN0TnVtID0gcEFkYXB0ZXItPkNoYW5uZWxMaXN0TnVtOworCQkJCWZvciAoaSA9IDA7IGkgPCBwQ2hMaXN0QnVmLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCQkJCQlwQ2hMaXN0QnVmLT5DaGFubmVsTGlzdFtpXSA9IHBBZGFwdGVyLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUX0NIQU5ORUxfTElTVF9JTkZPKTsKKwkJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcENoTGlzdEJ1Ziwgc2l6ZW9mKFJUX0NIQU5ORUxfTElTVF9JTkZPKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKworCQkJCWlmIChwQ2hMaXN0QnVmKQorCQkJCQlrZnJlZShwQ2hMaXN0QnVmKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9HRVRfQ09VTlRSWV9DT0RFOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfR0VUX0NPVU5UUllfQ09ERSBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDI7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeUNvZGUsIDIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9HRVRfQ0hBTk5FTF9HRU9HUkFQSFk6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9HRVRfQ0hBTk5FTF9HRU9HUkFQSFkgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSwgMSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTdGF0dXM9JWRcbiIsIFN0YXR1cykpOworCQkJYnJlYWs7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQljYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRExTOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfRExTKD0lZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuYkRMU0NhcGFibGUpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9ETFNfUEFSQU06CisJCQl7CisJCQkJUFJUXzgwMl8xMV9ETFNfSU5GTwlwRGxzSW5mbyA9IGttYWxsb2Moc2l6ZW9mKFJUXzgwMl8xMV9ETFNfSU5GTyksIEdGUF9BVE9NSUMpOworCQkJCWlmIChwRGxzSW5mbyA9PSBOVUxMKQorCQkJCQlicmVhazsKKworCQkJCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCQkJeworCQkJCQlSVE1QTW92ZU1lbW9yeSgmcERsc0luZm8tPkVudHJ5W2ldLCAmcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXSwgc2l6ZW9mKFJUXzgwMl8xMV9ETFNfVUkpKTsKKwkJCQl9CisKKwkJCQlwRGxzSW5mby0+bnVtID0gTUFYX05VTV9PRl9ETFNfRU5UUlk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUXzgwMl8xMV9ETFNfSU5GTyk7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBEbHNJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0RMU19QQVJBTVxuIikpOworCisJCQkJaWYgKHBEbHNJbmZvKQorCQkJCQlrZnJlZShwRGxzSW5mbyk7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5Ojp1bmtub3duIElPQ1RMJ3Mgc3ViY21kID0gMHglMDh4XG4iLCBjbWQpKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IC1FT1BOT1RTVVBQOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTdGF0dXM7Cit9CisKK0lOVCBydDI4eHhfc3RhX2lvY3RsKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOCU9VVAlzdHJ1Y3QgaWZyZXEJKnJxLAorCUlOCUlOVAkJCQkJY21kKQoreworCVBPU19DT09LSUUJCQlwT2JqOworCVZJUlRVQUxfQURBUFRFUgkJKnBWaXJ0dWFsQWQgPSBOVUxMOworCVJUTVBfQURBUFRFUiAgICAgICAgKnBBZCA9IE5VTEw7CisJc3RydWN0IGl3cmVxICAgICAgICAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKSBycTsKKwlCT09MRUFOCQkJCVN0YXRlTWFjaGluZVRvdWNoZWQgPSBGQUxTRTsKKwlJTlQJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJVVNIT1JUCQkJCXN1YmNtZDsKKworCWlmIChuZXRfZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwl9CisJZWxzZQorCXsKKwkJcFZpcnR1YWxBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJCXBBZCA9IHBWaXJ0dWFsQWQtPlJ0bXBEZXYtPm1sX3ByaXY7CisJfQorCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisKKwlpZiAocEFkID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisJICAgIGlmICh3cnEtPnUuZGF0YS5wb2ludGVyID09IE5VTEwpCisJICAgIHsKKwkJICAgIHJldHVybiBTdGF0dXM7CisJICAgIH0KKworCSAgICBpZiAoc3Ryc3RyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJPcE1vZGUiKSA9PSBOVUxMKQorI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKwkJICAgIHJldHVybiAtRU5FVERPV047CisgICAgICAgIH0KKyAgICB9CisKKwl7CS8vIGRldGVybWluZSB0aGlzIGlvY3RsIGNvbW1hbmQgaXMgY29tbWluZyBmcm9tIHdoaWNoIGludGVyZmFjZS4KKwkJcE9iai0+aW9jdGxfaWZfdHlwZSA9IElOVF9NQUlOOworCQlwT2JqLT5pb2N0bF9pZiA9IE1BSU5fTUJTU0lEOworCX0KKworCXN3aXRjaChjbWQpCisJeworI2lmZGVmIFJBTElOS19BVEUKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQljYXNlIFJUUFJJVl9JT0NUTF9BVEU6CisJCQl7CisJCQkJUnRtcERvQXRlKHBBZCwgd3JxKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICBjYXNlIFNJT0NHSUZIV0FERFI6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJT0NUTDo6U0lPQ0dJRkhXQUREUlxuIikpOworCQkJbWVtY3B5KHdycS0+dS5uYW1lLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTik7CisJCQlicmVhazsKKwkJY2FzZSBTSU9DR0lXTkFNRToKKyAgICAgICAgeworICAgICAgICAJY2hhciAqbmFtZT0md3JxLT51Lm5hbWVbMF07CisgICAgICAgIAlydF9pb2N0bF9naXduYW1lKG5ldF9kZXYsIE5VTEwsIG5hbWUsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXRVNTSUQ6ICAvL0dldCBFU1NJRAorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkPSZ3cnEtPnUuZXNzaWQ7CisgICAgICAgIAlydF9pb2N0bF9naXdlc3NpZChuZXRfZGV2LCBOVUxMLCBlc3NpZCwgZXNzaWQtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DU0lXRVNTSUQ6ICAvL1NldCBFU1NJRAorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQJKmVzc2lkPSZ3cnEtPnUuZXNzaWQ7CisgICAgICAgIAlydF9pb2N0bF9zaXdlc3NpZChuZXRfZGV2LCBOVUxMLCBlc3NpZCwgZXNzaWQtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DU0lXTldJRDogICAvLyBzZXQgbmV0d29yayBpZCAodGhlIGNlbGwpCisJCWNhc2UgU0lPQ0dJV05XSUQ6ICAgLy8gZ2V0IG5ldHdvcmsgaWQKKwkJCVN0YXR1cyA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWNhc2UgU0lPQ1NJV0ZSRVE6ICAgLy9zZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfZnJlcSAqZnJlcT0md3JxLT51LmZyZXE7CisgICAgICAgIAlydF9pb2N0bF9zaXdmcmVxKG5ldF9kZXYsIE5VTEwsIGZyZXEsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXRlJFUTogICAvLyBnZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfZnJlcSAqZnJlcT0md3JxLT51LmZyZXE7CisgICAgICAgIAlydF9pb2N0bF9naXdmcmVxKG5ldF9kZXYsIE5VTEwsIGZyZXEsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DU0lXTklDS046IC8vc2V0IG5vZGUgbmFtZS9uaWNrbmFtZQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGE9JndycS0+dS5kYXRhOworICAgICAgICAJcnRfaW9jdGxfc2l3bmlja24obmV0X2RldiwgTlVMTCwgZGF0YSwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNJT0NHSVdOSUNLTjogLy9nZXQgbm9kZSBuYW1lL25pY2tuYW1lCisgICAgICAgIHsKKyAgICAgICAgCXN0cnVjdCBpd19wb2ludCAqZGF0YT0md3JxLT51LmRhdGE7CisgICAgICAgIAlydF9pb2N0bF9naXduaWNrbihuZXRfZGV2LCBOVUxMLCBkYXRhLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV1JBVEU6ICAgLy9nZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKQorCQkgICAgcnRfaW9jdGxfZ2l3cmF0ZShuZXRfZGV2LCBOVUxMLCAmd3JxLT51LCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFNJT0NTSVdSQVRFOiAgLy9zZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKQorCSAgICAgICAgcnRfaW9jdGxfc2l3cmF0ZShuZXRfZGV2LCBOVUxMLCAmd3JxLT51LCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJT0NHSVdSVFM6ICAvLyBnZXQgUlRTL0NUUyB0aHJlc2hvbGQgKGJ5dGVzKQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cz0md3JxLT51LnJ0czsKKyAgICAgICAgCXJ0X2lvY3RsX2dpd3J0cyhuZXRfZGV2LCBOVUxMLCBydHMsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKyAgICAgICAgY2FzZSBTSU9DU0lXUlRTOiAgLy9zZXQgUlRTL0NUUyB0aHJlc2hvbGQgKGJ5dGVzKQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cz0md3JxLT51LnJ0czsKKyAgICAgICAgCXJ0X2lvY3RsX3Npd3J0cyhuZXRfZGV2LCBOVUxMLCBydHMsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKyAgICAgICAgY2FzZSBTSU9DR0lXRlJBRzogIC8vZ2V0IGZyYWdtZW50YXRpb24gdGhyIChieXRlcykKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BhcmFtICpmcmFnPSZ3cnEtPnUuZnJhZzsKKyAgICAgICAgCXJ0X2lvY3RsX2dpd2ZyYWcobmV0X2RldiwgTlVMTCwgZnJhZywgTlVMTCk7CisJCQlicmVhazsKKwkJfQorICAgICAgICBjYXNlIFNJT0NTSVdGUkFHOiAgLy9zZXQgZnJhZ21lbnRhdGlvbiB0aHIgKGJ5dGVzKQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWc9JndycS0+dS5mcmFnOworICAgICAgICAJcnRfaW9jdGxfc2l3ZnJhZyhuZXRfZGV2LCBOVUxMLCBmcmFnLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisgICAgICAgIGNhc2UgU0lPQ0dJV0VOQ09ERTogIC8vZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmVycT0md3JxLT51LmVuY29kaW5nOworICAgICAgICAJaWYoZXJxLT5wb2ludGVyKQorICAgICAgICAJCXJ0X2lvY3RsX2dpd2VuY29kZShuZXRfZGV2LCBOVUxMLCBlcnEsIGVycS0+cG9pbnRlcik7CisJCQlicmVhazsKKwkJfQorICAgICAgICBjYXNlIFNJT0NTSVdFTkNPREU6ICAvL3NldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BvaW50ICplcnE9JndycS0+dS5lbmNvZGluZzsKKyAgICAgICAgCWlmKGVycS0+cG9pbnRlcikKKyAgICAgICAgCQlydF9pb2N0bF9zaXdlbmNvZGUobmV0X2RldiwgTlVMTCwgZXJxLCBlcnEtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXQVA6ICAgICAvL2dldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcworICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHI9JndycS0+dS5hcF9hZGRyOworICAgICAgICAJcnRfaW9jdGxfZ2l3YXAobmV0X2RldiwgTlVMTCwgYXBfYWRkciwgYXBfYWRkci0+c2FfZGF0YSk7CisJCQlicmVhazsKKwkJfQorCSAgICBjYXNlIFNJT0NTSVdBUDogIC8vc2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzCisgICAgICAgIHsKKyAgICAgICAgCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkcj0md3JxLT51LmFwX2FkZHI7CisgICAgICAgIAlydF9pb2N0bF9zaXdhcChuZXRfZGV2LCBOVUxMLCBhcF9hZGRyLCBhcF9hZGRyLT5zYV9kYXRhKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV01PREU6ICAgLy9nZXQgb3BlcmF0aW9uIG1vZGUKKyAgICAgICAgeworICAgICAgICAJX191MzIgKm1vZGU9JndycS0+dS5tb2RlOworICAgICAgICAJcnRfaW9jdGxfZ2l3bW9kZShuZXRfZGV2LCBOVUxMLCBtb2RlLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ1NJV01PREU6ICAgLy9zZXQgb3BlcmF0aW9uIG1vZGUKKyAgICAgICAgeworICAgICAgICAJX191MzIgKm1vZGU9JndycS0+dS5tb2RlOworICAgICAgICAJcnRfaW9jdGxfc2l3bW9kZShuZXRfZGV2LCBOVUxMLCBtb2RlLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV1NFTlM6ICAgLy9nZXQgc2Vuc2l0aXZpdHkgKGRCbSkKKwkJY2FzZSBTSU9DU0lXU0VOUzoJLy9zZXQgc2Vuc2l0aXZpdHkgKGRCbSkKKwkJY2FzZSBTSU9DR0lXUE9XRVI6ICAvL2dldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzCisJCWNhc2UgU0lPQ1NJV1BPV0VSOiAgLy9zZXQgUG93ZXIgTWFuYWdlbWVudCBzZXR0aW5ncworCQljYXNlIFNJT0NHSVdUWFBPVzogIC8vZ2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pCisJCWNhc2UgU0lPQ1NJV1RYUE9XOiAgLy9zZXQgdHJhbnNtaXQgcG93ZXIgKGRCbSkKKwkJY2FzZSBTSU9DR0lXUkFOR0U6CS8vR2V0IHJhbmdlIG9mIHBhcmFtZXRlcnMKKwkJY2FzZSBTSU9DR0lXUkVUUlk6CS8vZ2V0IHJldHJ5IGxpbWl0cyBhbmQgbGlmZXRpbWUKKwkJY2FzZSBTSU9DU0lXUkVUUlk6CS8vc2V0IHJldHJ5IGxpbWl0cyBhbmQgbGlmZXRpbWUKKwkJCVN0YXR1cyA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWNhc2UgUlRfUFJJVl9JT0NUTDoKKyAgICAgICAgY2FzZSBSVF9QUklWX0lPQ1RMX0VYVDoKKwkJCXN1YmNtZCA9IHdycS0+dS5kYXRhLmZsYWdzOworCQkJaWYoIHN1YmNtZCAmIE9JRF9HRVRfU0VUX1RPR0dMRSkKKwkJCQlTdGF0dXMgPSBSVE1QU2V0SW5mb3JtYXRpb24ocEFkLCBycSwgc3ViY21kKTsKKwkJCWVsc2UKKwkJCQlTdGF0dXMgPSBSVE1QUXVlcnlJbmZvcm1hdGlvbihwQWQsIHJxLCBzdWJjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0lPQ0dJV1BSSVY6CisJCQlpZiAod3JxLT51LmRhdGEucG9pbnRlcikKKwkJCXsKKwkJCQlpZiAoIGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHNpemVvZihwcml2dGFiKSkgIT0gVFJVRSkKKwkJCQkJYnJlYWs7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHByaXZ0YWIpIC8gc2l6ZW9mKHByaXZ0YWJbMF0pOworCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcHJpdnRhYiwgc2l6ZW9mKHByaXZ0YWIpKSkKKwkJCQkJU3RhdHVzID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJUUFJJVl9JT0NUTF9TRVQ6CisJCQlpZihhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCkgIT0gVFJVRSkKKwkJCQlicmVhazsKKwkJCXJ0X2lvY3RsX3NldHBhcmFtKG5ldF9kZXYsIE5VTEwsIE5VTEwsIHdycS0+dS5kYXRhLnBvaW50ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgUlRQUklWX0lPQ1RMX0dTSVRFU1VSVkVZOgorCQkJUlRNUElvY3RsR2V0U2l0ZVN1cnZleShwQWQsIHdycSk7CisJCSAgICBicmVhazsKKyNpZmRlZiBEQkcKKwkJY2FzZSBSVFBSSVZfSU9DVExfTUFDOgorCQkJUlRNUElvY3RsTUFDKHBBZCwgd3JxKTsKKwkJCWJyZWFrOworCQljYXNlIFJUUFJJVl9JT0NUTF9FMlA6CisJCQlSVE1QSW9jdGxFMlBST00ocEFkLCB3cnEpOworCQkJYnJlYWs7CisjaWZkZWYgUlQzMHh4CisJCWNhc2UgUlRQUklWX0lPQ1RMX1JGOgorCQkJUlRNUElvY3RsUkYocEFkLCB3cnEpOworCQkJYnJlYWs7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisjZW5kaWYgLy8gREJHIC8vCisgICAgICAgIGNhc2UgU0lPQ0VUSFRPT0w6CisgICAgICAgICAgICAgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJJT0NUTDo6dW5rbm93biBJT0NUTCdzIGNtZCA9IDB4JTA4eFxuIiwgY21kKSk7CisJCQlTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCX0KKworICAgIGlmKFN0YXRlTWFjaGluZVRvdWNoZWQpIC8vIFVwcGVyIGxheWVyIHNlbnQgYSBNTE1FLXJlbGF0ZWQgb3BlcmF0aW9ucworICAgIAlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBTU0lECisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X1NTSURfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIE5ESVNfODAyXzExX1NTSUQgICAgICAgICAgICAgICAgICAgIFNzaWQsICpwU3NpZD1OVUxMOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlTWFjaGluZVRvdWNoZWQgPSBGQUxTRTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gVFJVRTsKKworICAgIGlmKCBzdHJsZW4oYXJnKSA8PSBNQVhfTEVOX09GX1NTSUQpCisgICAgeworICAgICAgICBOZGlzWmVyb01lbW9yeSgmU3NpZCwgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpKTsKKyAgICAgICAgaWYgKHN0cmxlbihhcmcpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFNzaWQuU3NpZCwgYXJnLCBzdHJsZW4oYXJnKSk7CisgICAgICAgICAgICBTc2lkLlNzaWRMZW5ndGggPSBzdHJsZW4oYXJnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy9BTlkgc3NpZAorICAgICAgICB7CisgICAgICAgICAgICBTc2lkLlNzaWRMZW5ndGggPSAwOworCQkgICAgbWVtY3B5KFNzaWQuU3NpZCwgIiIsIDApOworCQkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisJICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOworCQl9CisgICAgICAgIHBTc2lkID0gJlNzaWQ7CisKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworICAgICAgICB9CisKKyAgICAgICAgcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBUUlVFOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKwkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKworICAgICAgICBNbG1lRW5xdWV1ZShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgIE9JRF84MDJfMTFfU1NJRCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpLAorICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKXBTc2lkKTsKKworICAgICAgICBTdGF0ZU1hY2hpbmVUb3VjaGVkID0gVFJVRTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1NTSURfUHJvYzo6KExlbj0lZCxTc2lkPSVzKVxuIiwgU3NpZC5Tc2lkTGVuZ3RoLCBTc2lkLlNzaWQpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisKKyAgICBpZiAoU3RhdGVNYWNoaW5lVG91Y2hlZCkgLy8gVXBwZXIgbGF5ZXIgc2VudCBhIE1MTUUtcmVsYXRlZCBvcGVyYXRpb25zCisgICAgCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkYXB0ZXIpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKyNpZmRlZiBXTU1fU1VQUE9SVAorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV21tQ2FwYWJsZSBFbmFibGUgb3IgRGlzYWJsZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9XbW1DYXBhYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUJPT0xFQU4JYldtbUNhcGFibGU7CisKKwliV21tQ2FwYWJsZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoKGJXbW1DYXBhYmxlID09IDEpCisjaWZkZWYgUlQyODcwCisJCSYmIChwQWQtPk51bWJlck9mUGlwZXMgPj0gNSkKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJKQorCQlwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSA9IFRSVUU7CisJZWxzZSBpZiAoYldtbUNhcGFibGUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1dtbUNhcGFibGVfUHJvYzo6KGJXbW1DYXBhYmxlPSVkKVxuIiwKKwkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFdNTV9TVVBQT1JUIC8vCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IE5ldHdvcmsgVHlwZShJbmZyYXN0cnVjdHVyZS9BZGhvYyBtb2RlKQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9OZXR3b3JrVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgVUlOVDMyCVZhbHVlID0gMDsKKworICAgIGlmIChzdHJjbXAoYXJnLCAiQWRob2MiKSA9PSAwKQorCXsKKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSAhPSBCU1NfQURIT0MpCisJCXsKKwkJCS8vIENvbmZpZyBoYXMgY2hhbmdlZAorCQkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQkJCVZhbHVlICY9ICh+MHg4MCk7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKyAgICAgICAgICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKwkJCWlmIChJTkZSQV9PTihwQWRhcHRlcikpCisJCQl7CisJCQkJLy9CT09MRUFOIENhbmNlbGxlZDsKKwkJCQkvLyBTZXQgdGhlIEF1dG9SZWNvbm5lY3RTc2lkIHRvIHByZXZlbnQgaXQgcmVjb25uZWN0IHRvIG9sZCBTU0lECisJCQkJLy8gU2luY2UgY2FsbGluZyB0aGlzIGluZGljYXRlIHVzZXIgZG9uJ3Qgd2FudCB0byBjb25uZWN0IHRvIHRoYXQgU1NJRCBhbnltb3JlLgorCQkJCXBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKwkJCQlOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pOworCisJCQkJTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQkIhXG4iKSk7CisJCQl9CisJCX0KKwkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0FESE9DOworICAgICAgICBwQWRhcHRlci0+bmV0X2Rldi0+dHlwZSA9IHBBZGFwdGVyLT5TdGFDZmcuT3JpRGV2VHlwZTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PlNldF9OZXR3b3JrVHlwZV9Qcm9jOjooQUQtSE9DKVxuIikpOworCX0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiSW5mcmEiKSA9PSAwKQorCXsKKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSAhPSBCU1NfSU5GUkEpCisJCXsKKwkJCS8vIENvbmZpZyBoYXMgY2hhbmdlZAorCQkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQkJCVZhbHVlICY9ICh+MHg4MCk7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKyAgICAgICAgICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKwkJCWlmIChBREhPQ19PTihwQWRhcHRlcikpCisJCQl7CisJCQkJLy8gU2V0IHRoZSBBdXRvUmVjb25uZWN0U3NpZCB0byBwcmV2ZW50IGl0IHJlY29ubmVjdCB0byBvbGQgU1NJRAorCQkJCS8vIFNpbmNlIGNhbGxpbmcgdGhpcyBpbmRpY2F0ZSB1c2VyIGRvbid0IHdhbnQgdG8gY29ubmVjdCB0byB0aGF0IFNTSUQgYW55bW9yZS4KKwkJCQlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisJCQkJTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQkJCUxpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisJCQl9CisJCX0KKwkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworICAgICAgICBwQWRhcHRlci0+bmV0X2Rldi0+dHlwZSA9IHBBZGFwdGVyLT5TdGFDZmcuT3JpRGV2VHlwZTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PlNldF9OZXR3b3JrVHlwZV9Qcm9jOjooSU5GUkEpXG4iKSk7CisKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworCX0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiTW9uaXRvciIpID09IDApCisgICAgeworCQlVQ0hBUgliYnBWYWx1ZSA9IDA7CisJCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKwkJLy8gZGlzYWJsZSBhbGwgcGVyaW9kaWMgc3RhdGUgbWFjaGluZQorCQlwQWRhcHRlci0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID0gRkFMU0U7CisJCS8vIHJlc2V0IGFsbCBtbG1lIHN0YXRlIG1hY2hpbmUKKwkJUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEIFxuIikpOworICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9PSAwKQorICAgICAgICB7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAzNjsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gNjsKKyAgICAgICAgfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICBlbHNlCisgICAgICAgICAgICBOX0NoYW5uZWxDaGVjayhwQWRhcHRlcik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQgJiYKKyAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID09IEJXXzQwICYmCisgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPT0gRVhUQ0hBX0FCT1ZFKQorCQl7CisJCQkvLyA0ME1IeiAsY29udHJvbCBjaGFubmVsIGF0IGxvd2VyCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgxOCk7CisJCQliYnBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LCBiYnBWYWx1ZSk7CisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQkJLy8gIFJYIDogY29udHJvbCBjaGFubmVsIGF0IGxvd2VyCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsIGJicFZhbHVlKTsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQkJVmFsdWUgJj0gMHhmZmZmZmZmZTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKwkJCXBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworICAgICAgICAgICAgQXNpY1N3aXRjaENoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJICAgIEFzaWNMb2NrQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCV180MCAsY29udHJvbF9jaGFubmVsKCVkKSwgQ2VudHJhbENoYW5uZWwoJWQpIFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKKwkJfQorCQllbHNlIGlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCAmJgorICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCAmJgorICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPT0gRVhUQ0hBX0JFTE9XKQorCQl7CisJCQkvLyA0ME1IeiAsY29udHJvbCBjaGFubmVsIGF0IHVwcGVyCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgxOCk7CisJCQliYnBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LCBiYnBWYWx1ZSk7CisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQkJVmFsdWUgfD0gMHgxOworCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlIHw9ICgweDIwKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywgYmJwVmFsdWUpOworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCAtIDI7CisgICAgICAgICAgICBBc2ljU3dpdGNoQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkgICAgQXNpY0xvY2tDaGFubmVsKHBBZGFwdGVyLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzQwICxjb250cm9sX2NoYW5uZWwoJWQpLCBDZW50cmFsQ2hhbm5lbCglZCkgXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJLy8gMjBNSHoKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LCAmYmJwVmFsdWUpOworCQkJYmJwVmFsdWUgJj0gKH4weDE4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgYmJwVmFsdWUpOworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZGFwdGVyLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzIwLCBDaGFubmVsKCVkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCX0KKwkJLy8gRW5hYmxlIFJ4IHdpdGggcHJvbWlzY3VvdXMgcmVjZXB0aW9uCisJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgUlhfRklMVFJfQ0ZHLCAweDMpOworCQkvLyBBU0lDIHN1cHBvcnN0cyBzbmlmZmVyIGZ1bmN0aW9uIHdpdGggcmVwbGFjaW5nIFJTU0kgd2l0aCB0aW1lc3RhbXAuCisJCS8vUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJLy9WYWx1ZSB8PSAoMHg4MCk7CisJCS8vUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKwkJLy8gZGlzYWJsZSBzeW5jCisJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7CisJCWNzci5maWVsZC5iQmVhY29uR2VuID0gMDsKKwkJY3NyLmZpZWxkLmJUQlRURW5hYmxlID0gMDsKKwkJY3NyLmZpZWxkLlRzZlN5bmNNb2RlID0gMDsKKwkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBCQ05fVElNRV9DRkcsIGNzci53b3JkKTsKKworCQlwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfTU9OSVRPUjsKKyAgICAgICAgcEFkYXB0ZXItPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNOyAvL0FSUEhSRF9JRUVFODAyMTE7IC8vIElFRUU4MDIxMQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+U2V0X05ldHdvcmtUeXBlX1Byb2M6OihNT05JVE9SKVxuIikpOworICAgIH0KKworICAgIC8vIFJlc2V0IFJhbGluayBzdXBwbGljYW50IHRvIG5vdCB1c2UsIGl0IHdpbGwgYmUgc2V0IHRvIHN0YXJ0IHdoZW4gVUkgc2V0IFBNSyBrZXkKKyAgICBwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X05ldHdvcmtUeXBlX1Byb2M6OihOZXR3b3JrVHlwZT0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEF1dGhlbnRpY2F0aW9uIG1vZGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfQXV0aE1vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGlmICgoc3RyY21wKGFyZywgIldFUEFVVE8iKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndlcGF1dG8iKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2g7CisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJPUEVOIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJvcGVuIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiU0hBUkVEIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJzaGFyZWQiKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIldQQVBTSyIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3BhcHNrIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJXUEFOT05FIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJ3cGFub25lIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiV1BBMlBTSyIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3BhMnBzayIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJXUEEiKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndwYSIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiV1BBMiIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3BhMiIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMjsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0F1dGhNb2RlX1Byb2M6OihBdXRoTW9kZT0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBFbmNyeXB0aW9uIFR5cGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfRW5jcnlwVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaWYgKChzdHJjbXAoYXJnLCAiTk9ORSIpID09IDApIHx8IChzdHJjbXAoYXJnLCAibm9uZSIpID09IDApKQorICAgIHsKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciAgICA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciAgID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgIH0KKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIldFUCIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid2VwIikgPT0gMCkpCisgICAgeworICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzICAgICA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciAgID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiVEtJUCIpID09IDApIHx8IChzdHJjbXAoYXJnLCAidGtpcCIpID09IDApKQorICAgIHsKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzICAgICA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciAgICA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgICA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiQUVTIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJhZXMiKSA9PSAwKSkKKyAgICB7CisgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCSAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0VuY3J5cFR5cGVfUHJvYzo6KEVuY3J5cFR5cGU9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cykpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IERlZmF1bHQgS2V5IElECisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0RlZmF1bHRLZXlJRF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5SWR4OworCisgICAgS2V5SWR4ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKyAgICBpZigoS2V5SWR4ID49IDEgKSAmJiAoS2V5SWR4IDw9IDQpKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgKEtleUlkeCAtIDEgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0RlZmF1bHRLZXlJRF9Qcm9jOjooRGVmYXVsdEtleUlEPSVkKVxuIiwgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXRVAgS0VZMQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9LZXkxX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlMZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGc9Q0lQSEVSX1dFUDY0OworCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgS2V5TGVuID0gc3RybGVuKGFyZyk7CisKKyAgICBzd2l0Y2ggKEtleUxlbikKKyAgICB7CisgICAgICAgIGNhc2UgNTogLy93ZXAgNDAgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OihLZXkxPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiQXNjaWkiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDogLy93ZXAgNDAgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTFfUHJvYzo6KEtleTE9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJIZXgiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMzogLy93ZXAgMTA0IEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTFfUHJvYzo6KEtleTE9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJBc2NpaSIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI2OiAvL3dlcCAxMDQgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OihLZXkxPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiSGV4IikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTFfUHJvYzo6SW52YWxpZCBhcmd1bWVudCAoPSVzKVxuIiwgYXJnKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBTZXQga2V5cyAoaW50byBBU0lDKQorICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgOyAgIC8vIG5vdCBzdXBwb3J0CisgICAgZWxzZSAgICAvLyBPbGQgV0VQIHN0dWZmCisgICAgeworICAgICAgICBBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFdFUCBLRVkyCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0tleTJfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpcGhlckFsZz1DSVBIRVJfV0VQNjQ7CisKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICBLZXlMZW4gPSBzdHJsZW4oYXJnKTsKKworICAgIHN3aXRjaCAoS2V5TGVuKQorICAgIHsKKyAgICAgICAgY2FzZSA1OiAvL3dlcCA0MCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6KEtleTI9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJBc2NpaSIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEwOiAvL3dlcCA0MCBIZXggdHlwZQorICAgICAgICAgICAgZm9yKGk9MDsgaSA8IEtleUxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAhaXN4ZGlnaXQoKihhcmcraSkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAgLy9Ob3QgSGV4IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW4gLyAyIDsKKyAgICAgICAgICAgIEF0b0goYXJnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleSwgS2V5TGVuIC8gMik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5Ml9Qcm9jOjooS2V5Mj0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkhleCIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEzOiAvL3dlcCAxMDQgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5Ml9Qcm9jOjooS2V5Mj0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkFzY2lpIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjY6IC8vd2VwIDEwNCBIZXggdHlwZQorICAgICAgICAgICAgZm9yKGk9MDsgaSA8IEtleUxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAhaXN4ZGlnaXQoKihhcmcraSkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAgLy9Ob3QgSGV4IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW4gLyAyIDsKKyAgICAgICAgICAgIEF0b0goYXJnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleSwgS2V5TGVuIC8gMik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6KEtleTI9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJIZXgiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy9JbnZhbGlkIGFyZ3VtZW50CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5Ml9Qcm9jOjpJbnZhbGlkIGFyZ3VtZW50ICg9JXMpXG4iLCBhcmcpKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBTZXQga2V5cyAoaW50byBBU0lDKQorICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgOyAgIC8vIG5vdCBzdXBwb3J0CisgICAgZWxzZSAgICAvLyBPbGQgV0VQIHN0dWZmCisgICAgeworICAgICAgICBBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uQ2lwaGVyQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXRVAgS0VZMworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9LZXkzX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlMZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGc9Q0lQSEVSX1dFUDY0OworCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgS2V5TGVuID0gc3RybGVuKGFyZyk7CisKKyAgICBzd2l0Y2ggKEtleUxlbikKKyAgICB7CisgICAgICAgIGNhc2UgNTogLy93ZXAgNDAgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OihLZXkzPSVzIGFuZCB0eXBlPUFzY2lpKVxuIiwgYXJnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDogLy93ZXAgNDAgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTNfUHJvYzo6KEtleTM9JXMgYW5kIHR5cGU9SGV4KVxuIiwgYXJnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMzogLy93ZXAgMTA0IEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTNfUHJvYzo6KEtleTM9JXMgYW5kIHR5cGU9QXNjaWkpXG4iLCBhcmcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI2OiAvL3dlcCAxMDQgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OihLZXkzPSVzIGFuZCB0eXBlPUhleClcbiIsIGFyZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTNfUHJvYzo6SW52YWxpZCBhcmd1bWVudCAoPSVzKVxuIiwgYXJnKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgLy8gU2V0IGtleXMgKGludG8gQVNJQykKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIDsgICAvLyBub3Qgc3VwcG9ydAorICAgIGVsc2UgICAgLy8gT2xkIFdFUCBzdHVmZgorICAgIHsKKyAgICAgICAgQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLkNpcGhlckFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV0VQIEtFWTQKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfS2V5NF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5TGVuOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2lwaGVyQWxnPUNJUEhFUl9XRVA2NDsKKworICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgIEtleUxlbiA9IHN0cmxlbihhcmcpOworCisgICAgc3dpdGNoIChLZXlMZW4pCisgICAgeworICAgICAgICBjYXNlIDU6IC8vd2VwIDQwIEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjooS2V5ND0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkFzY2lpIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6IC8vd2VwIDQwIEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXk0X1Byb2M6OihLZXk0PSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiSGV4IikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTM6IC8vd2VwIDEwNCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXk0X1Byb2M6OihLZXk0PSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiQXNjaWkiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNjogLy93ZXAgMTA0IEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjooS2V5ND0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkhleCIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvL0ludmFsaWQgYXJndW1lbnQKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXk0X1Byb2M6OkludmFsaWQgYXJndW1lbnQgKD0lcylcbiIsIGFyZykpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworICAgIC8vIFNldCBrZXlzIChpbnRvIEFTSUMpCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICA7ICAgLy8gbm90IHN1cHBvcnQKKyAgICBlbHNlICAgIC8vIE9sZCBXRVAgc3R1ZmYKKyAgICB7CisgICAgICAgIEFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5DaXBoZXJBbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV1BBIFBTSyBrZXkKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfV1BBUFNLX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICBrZXlNYXRlcmlhbFs0MF07CisKKyAgICBpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorICAgICAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSAmJgorCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkpCisgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfV1BBUFNLX1Byb2M6OihXUEFQU0s9JXMpXG4iLCBhcmcpKTsKKworICAgIE5kaXNaZXJvTWVtb3J5KGtleU1hdGVyaWFsLCA0MCk7CisKKyAgICBpZiAoKHN0cmxlbihhcmcpIDwgOCkgfHwgKHN0cmxlbihhcmcpID4gNjQpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IGZhaWxlZCEhKFdQQVBTSz0lcyksIFdQQVBTSyBrZXktc3RyaW5nIHJlcXVpcmVkIDggfiA2NCBjaGFyYWN0ZXJzIFxuIiwgYXJnKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoc3RybGVuKGFyZykgPT0gNjQpCisgICAgeworICAgICAgICBBdG9IKGFyZywga2V5TWF0ZXJpYWwsIDMyKTsKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5QTUssIGtleU1hdGVyaWFsLCAzMik7CisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUGFzc3dvcmRIYXNoKChjaGFyICopYXJnLCBwQWRhcHRlci0+TWxtZUF1eC5Tc2lkLCBwQWRhcHRlci0+TWxtZUF1eC5Tc2lkTGVuLCBrZXlNYXRlcmlhbCk7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuUE1LLCBrZXlNYXRlcmlhbCwgMzIpOworICAgIH0KKworCisKKyAgICBpZihwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DICYmCisgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorICAgIHsKKyAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19OT1RVU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFN0YXJ0IFNUQSBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1NUQVJUOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBQb3dlciBTYXZpbmcgbW9kZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9QU01vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKQorICAgIHsKKyAgICAgICAgaWYgKChzdHJjbXAoYXJnLCAiTWF4X1BTUCIpID09IDApIHx8CisJCQkoc3RyY21wKGFyZywgIm1heF9wc3AiKSA9PSAwKSB8fAorCQkJKHN0cmNtcChhcmcsICJNQVhfUFNQIikgPT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRvIE5PVCB0dXJuIG9uIFBTTSBiaXQgaGVyZSwgd2FpdCB1bnRpbCBNbG1lQ2hlY2tGb3JQc21DaGFuZ2UoKQorICAgICAgICAgICAgLy8gdG8gZXhjbHVkZSBjZXJ0YWluIHNpdHVhdGlvbnMuCisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQOworICAgICAgICAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50ID0gNTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiRmFzdF9QU1AiKSA9PSAwKSB8fAorCQkJCSAoc3RyY21wKGFyZywgImZhc3RfcHNwIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChhcmcsICJGQVNUX1BTUCIpID09IDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkbyBOT1QgdHVybiBvbiBQU00gYml0IGhlcmUsIHdhaXQgdW50aWwgTWxtZUNoZWNrRm9yUHNtQ2hhbmdlKCkKKyAgICAgICAgICAgIC8vIHRvIGV4Y2x1ZGUgY2VydGFpbiBzaXR1YXRpb25zLgorICAgICAgICAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUDsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50ID0gMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIkxlZ2FjeV9QU1AiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGFyZywgImxlZ2FjeV9wc3AiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGFyZywgIkxFR0FDWV9QU1AiKSA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisgICAgICAgICAgICAvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKyAgICAgICAgICAgIE9QU1RBVFVTX1NFVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSAzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy9EZWZhdWx0IE5kaXM4MDJfMTFQb3dlck1vZGVDQU0KKyAgICAgICAgICAgIC8vIGNsZWFyIFBTTSBiaXQgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgIE1sbWVTZXRQc21CaXQocEFkYXB0ZXIsIFBXUl9BQ1RJVkUpOworICAgICAgICAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworICAgICAgICB9CisKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1BTTW9kZV9Qcm9jOjooUFNNb2RlPSVsZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXcGFTdXBwb3J0IGZsYWcuCisgICAgVmFsdWU6CisgICAgICAgIDA6IERyaXZlciBpZ25vcmUgd3BhX3N1cHBsaWNhbnQuCisgICAgICAgIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uLgorICAgICAgICAyOiBkcml2ZXIgdGFrZXMgY2FyZSBvZiBzY2FubmluZywgQVAgc2VsZWN0aW9uLCBhbmQgSUVFRSA4MDIuMTEgYXNzb2NpYXRpb24gcGFyYW1ldGVycy4KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfV3BhX1N1cHBvcnQoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisgICAgaWYgKCBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDApCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEU7CisgICAgZWxzZSBpZiAoIHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMSkKKyAgICAgICAgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFOworICAgIGVsc2UgaWYgKCBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDIpCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0VOQUJMRV9XSVRIX1dFQl9VSTsKKyAgICBlbHNlCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEU7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfV3BhX1N1cHBvcnQ6OihXcGFTdXBwbGljYW50VVA9JWQpXG4iLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApKTsKKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIERCRworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBSZWFkIC8gV3JpdGUgTUFDCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICAgICAxLikgaXdwcml2IHJhMCBtYWMgMCAgICAgICAgPT0+IHJlYWQgTUFDIHdoZXJlIEFkZHI9MHgwCisgICAgICAgICAgICAgICAyLikgaXdwcml2IHJhMCBtYWMgMD0xMiAgICAgPT0+IHdyaXRlIE1BQyB3aGVyZSBBZGRyPTB4MCwgdmFsdWU9MTIKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUElvY3RsTUFDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpCit7CisJQ0hBUgkJCQkqdGhpc19jaGFyOworCUNIQVIJCQkJKnZhbHVlOworCUlOVAkJCQkJaiA9IDAsIGsgPSAwOworCUNIQVIJCQkJbXNnWzEwMjRdOworCUNIQVIJCQkJYXJnWzI1NV07CisJVUxPTkcJCQkJbWFjQWRkciA9IDA7CisJVUNIQVIJCQkJdGVtcFsxNl0sIHRlbXAyWzE2XTsKKwlVSU5UMzIJCQkJbWFjVmFsdWUgPSAwOworCUlOVAkJCQkJU3RhdHVzOworCUJPT0xFQU4JCQkJYklzUHJpbnRBbGxNQUMgPSBGQUxTRTsKKworCisJbWVtc2V0KG1zZywgMHgwMCwgMTAyNCk7CisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwl7CisJICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKGFyZywgd3JxLT51LmRhdGEucG9pbnRlciwgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDI1NSkgPyAyNTUgOiB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisKKwkJLy9QYXJzaW5nIFJlYWQgb3IgV3JpdGUKKwkgICAgdGhpc19jaGFyID0gYXJnOworCQlpZiAoISp0aGlzX2NoYXIpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCh2YWx1ZSA9IHJ0c3RyY2hyKHRoaXNfY2hhciwgJz0nKSkgIT0gTlVMTCkKKwkJCSp2YWx1ZSsrID0gMDsKKworCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpCisJCXsgLy9SZWFkCisJCQkvLyBTYW5pdHkgY2hlY2sKKwkJCWlmKHN0cmxlbih0aGlzX2NoYXIpID4gNCkKKwkJCQlnb3RvIG5leHQ7CisKKwkJCWogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJaWYodGhpc19jaGFyW2pdID4gJ2YnIHx8IHRoaXNfY2hhcltqXSA8ICcwJykKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBNYWMgQWRkcgorCQkJayA9IGogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJdGhpc19jaGFyWzQtaytqXSA9IHRoaXNfY2hhcltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDQpCisJCQkJdGhpc19jaGFyWzMtaysrXT0nMCc7CisJCQl0aGlzX2NoYXJbNF09J1wwJzsKKworCQkJaWYoc3RybGVuKHRoaXNfY2hhcikgPT0gNCkKKwkJCXsKKwkJCQlBdG9IKHRoaXNfY2hhciwgdGVtcCwgMik7CisJCQkJbWFjQWRkciA9ICp0ZW1wKjI1NiArIHRlbXBbMV07CisJCQkJaWYgKG1hY0FkZHIgPCAweEZGRkYpCisJCQkJeworCQkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgbWFjQWRkciwgJm1hY1ZhbHVlKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjQWRkcj0lbHgsIE1hY1ZhbHVlPSV4XG4iLCBtYWNBZGRyLCBtYWNWYWx1ZSkpOworCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlsweCUwOGxYXTolMDhYICAiLCBtYWNBZGRyICwgbWFjVmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBtYWMKKwkJCQkJYklzUHJpbnRBbGxNQUMgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQltZW1jcHkoJnRlbXAyLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CisJCQl0ZW1wMltzdHJsZW4odmFsdWUpXSA9ICdcMCc7CisKKwkJCS8vIFNhbml0eSBjaGVjaworCQkJaWYoKHN0cmxlbih0aGlzX2NoYXIpID4gNCkgfHwgc3RybGVuKHRlbXAyKSA+IDgpCisJCQkJZ290byBuZXh0OworCisJCQlqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRoaXNfY2hhcltqXSA+ICdmJyB8fCB0aGlzX2NoYXJbal0gPCAnMCcpCisJCQkJCXJldHVybjsKKwkJCX0KKworCQkJaiA9IHN0cmxlbih0ZW1wMik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRlbXAyW2pdID4gJ2YnIHx8IHRlbXAyW2pdIDwgJzAnKQorCQkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vTUFDIEFkZHIKKwkJCWsgPSBqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCXRoaXNfY2hhcls0LWsral0gPSB0aGlzX2NoYXJbal07CisJCQl9CisKKwkJCXdoaWxlKGsgPCA0KQorCQkJCXRoaXNfY2hhclszLWsrK109JzAnOworCQkJdGhpc19jaGFyWzRdPSdcMCc7CisKKwkJCS8vTUFDIHZhbHVlCisJCQlrID0gaiA9IHN0cmxlbih0ZW1wMik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCXRlbXAyWzgtaytqXSA9IHRlbXAyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgOCkKKwkJCQl0ZW1wMls3LWsrK109JzAnOworCQkJdGVtcDJbOF09J1wwJzsKKworCQkJeworCQkJCUF0b0godGhpc19jaGFyLCB0ZW1wLCAyKTsKKwkJCQltYWNBZGRyID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKworCQkJCUF0b0godGVtcDIsIHRlbXAsIDQpOworCQkJCW1hY1ZhbHVlID0gKnRlbXAqMjU2KjI1NioyNTYgKyB0ZW1wWzFdKjI1NioyNTYgKyB0ZW1wWzJdKjI1NiArIHRlbXBbM107CisKKwkJCQkvLyBkZWJ1ZyBtb2RlCisJCQkJaWYgKG1hY0FkZHIgPT0gKEhXX0RFQlVHX1NFVFRJTkdfQkFTRSArIDQpKQorCQkJCXsKKwkJCQkJLy8gMHgyYmY0OiBieXRlMCBub24temVybzogZW5hYmxlIFIxNyB0dW5pbmcsIDA6IGRpc2FibGUgUjE3IHR1bmluZworICAgICAgICAgICAgICAgICAgICBpZiAobWFjVmFsdWUgJiAweDAwMDAwMGZmKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+QmJwVHVuaW5nLmJFbmFibGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJ0dXJuIG9uIFIxNyB0dW5pbmdcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSIFI2NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5CYnBUdW5pbmcuYkVuYWJsZSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgUjY2ID0gMHgyNiArIEdFVF9MTkFfR0FJTihwQWRhcHRlcik7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJCQl7CisJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjY2LCAoMHgyNiArIEdFVF9MTkFfR0FJTihwQWRhcHRlcikpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjY2LCAoMHgyNiArIEdFVF9MTkFfR0FJTihwQWRhcHRlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgidHVybiBvZmYgUjE3IHR1bmluZywgcmVzdG9yZSB0byAweCUwMnhcbiIsIFI2NikpOworICAgICAgICAgICAgICAgICAgICB9CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNBZGRyPSUwMmx4LCBNYWNWYWx1ZT0weCV4XG4iLCBtYWNBZGRyLCBtYWNWYWx1ZSkpOworCisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBtYWNBZGRyLCBtYWNWYWx1ZSk7CisJCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJbMHglMDhsWF06JTA4WCAgIiwgbWFjQWRkciwgbWFjVmFsdWUpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwkJYklzUHJpbnRBbGxNQUMgPSBUUlVFOworbmV4dDoKKwlpZiAoYklzUHJpbnRBbGxNQUMpCisJeworCQlzdHJ1Y3QgZmlsZQkJKmZpbGVfdzsKKwkJUENIQVIJCQlmaWxlTmFtZSA9ICJNYWNEdW1wLnR4dCI7CisJCW1tX3NlZ21lbnRfdAlvcmlnX2ZzOworCisJCW9yaWdfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJLy8gb3BlbiBmaWxlCisJCWZpbGVfdyA9IGZpbHBfb3BlbihmaWxlTmFtZSwgT19XUk9OTFl8T19DUkVBVCwgMCk7CisJCWlmIChJU19FUlIoZmlsZV93KSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+MikgJXM6IEVycm9yICVsZCBvcGVuaW5nICVzXG4iLCBfX0ZVTkNUSU9OX18sIC1QVFJfRVJSKGZpbGVfdyksIGZpbGVOYW1lKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoZmlsZV93LT5mX29wICYmIGZpbGVfdy0+Zl9vcC0+d3JpdGUpCisJCQl7CisJCQkJZmlsZV93LT5mX3BvcyA9IDA7CisJCQkJbWFjQWRkciA9IDB4MTAwMDsKKworCQkJCXdoaWxlIChtYWNBZGRyIDw9IDB4MTgwMCkKKwkJCQl7CisJCQkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBtYWNBZGRyLCAmbWFjVmFsdWUpOworCQkJCQlzcHJpbnRmKG1zZywgIiUwOGx4ID0gJTA4WFxuIiwgbWFjQWRkciwgbWFjVmFsdWUpOworCisJCQkJCS8vIHdyaXRlIGRhdGEgdG8gZmlsZQorCQkJCQlmaWxlX3ctPmZfb3AtPndyaXRlKGZpbGVfdywgbXNnLCBzdHJsZW4obXNnKSwgJmZpbGVfdy0+Zl9wb3MpOworCisJCQkJCXByaW50aygiJXMiLCBtc2cpOworCQkJCQltYWNBZGRyICs9IDQ7CisJCQkJfQorCQkJCXNwcmludGYobXNnLCAiXG5EdW1wIGFsbCBNQUMgdmFsdWVzIHRvICVzXG4iLCBmaWxlTmFtZSk7CisJCQl9CisJCQlmaWxwX2Nsb3NlKGZpbGVfdywgTlVMTCk7CisJCX0KKwkJc2V0X2ZzKG9yaWdfZnMpOworCX0KKwlpZihzdHJsZW4obXNnKSA9PSAxKQorCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIj09PT5FcnJvciBjb21tYW5kIGZvcm1hdCEiKTsKKworCS8vIENvcHkgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIHVzZXIgYnVmZmVyCisJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIG1zZywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PVJUTVBJb2N0bE1BQ1xuXG4iKSk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVhZCAvIFdyaXRlIEUyUFJPTQorICAgIEFyZ3VtZW50czoKKyAgICAgICAgcEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgICAgMS4pIGl3cHJpdiByYTAgZTJwIDAgICAgIAk9PT4gcmVhZCBFMlBST00gd2hlcmUgQWRkcj0weDAKKyAgICAgICAgICAgICAgIDIuKSBpd3ByaXYgcmEwIGUycCAwPTEyMzQgICAgPT0+IHdyaXRlIEUyUFJPTSB3aGVyZSBBZGRyPTB4MCwgdmFsdWU9MTIzNAorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QSW9jdGxFMlBST00oCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwlDSEFSCQkJCSp0aGlzX2NoYXI7CisJQ0hBUgkJCQkqdmFsdWU7CisJSU5UCQkJCQlqID0gMCwgayA9IDA7CisJQ0hBUgkJCQltc2dbMTAyNF07CisJQ0hBUgkJCQlhcmdbMjU1XTsKKwlVU0hPUlQJCQkJZWVwQWRkciA9IDA7CisJVUNIQVIJCQkJdGVtcFsxNl0sIHRlbXAyWzE2XTsKKwlVU0hPUlQJCQkJZWVwVmFsdWU7CisJaW50CQkJCQlTdGF0dXM7CisJQk9PTEVBTgkJCQliSXNQcmludEFsbEUyUCA9IEZBTFNFOworCisKKwltZW1zZXQobXNnLCAweDAwLCAxMDI0KTsKKwlpZiAod3JxLT51LmRhdGEubGVuZ3RoID4gMSkgLy9ObyBwYXJhbWV0ZXJzLgorCXsKKwkgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoYXJnLCB3cnEtPnUuZGF0YS5wb2ludGVyLCAod3JxLT51LmRhdGEubGVuZ3RoID4gMjU1KSA/IDI1NSA6IHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCXNwcmludGYobXNnLCAiXG4iKTsKKworCSAgICAvL1BhcnNpbmcgUmVhZCBvciBXcml0ZQorCQl0aGlzX2NoYXIgPSBhcmc7CisKKworCQlpZiAoISp0aGlzX2NoYXIpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCh2YWx1ZSA9IHJ0c3RyY2hyKHRoaXNfY2hhciwgJz0nKSkgIT0gTlVMTCkKKwkJCSp2YWx1ZSsrID0gMDsKKworCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpCisJCXsgLy9SZWFkCisKKwkJCS8vIFNhbml0eSBjaGVjaworCQkJaWYoc3RybGVuKHRoaXNfY2hhcikgPiA0KQorCQkJCWdvdG8gbmV4dDsKKworCQkJaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0aGlzX2NoYXJbal0gPiAnZicgfHwgdGhpc19jaGFyW2pdIDwgJzAnKQorCQkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIEUyUFJPTSBhZGRyCisJCQlrID0gaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0aGlzX2NoYXJbNC1rK2pdID0gdGhpc19jaGFyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgNCkKKwkJCQl0aGlzX2NoYXJbMy1rKytdPScwJzsKKwkJCXRoaXNfY2hhcls0XT0nXDAnOworCisJCQlpZihzdHJsZW4odGhpc19jaGFyKSA9PSA0KQorCQkJeworCQkJCUF0b0godGhpc19jaGFyLCB0ZW1wLCAyKTsKKwkJCQllZXBBZGRyID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKwkJCQlpZiAoZWVwQWRkciA8IDB4RkZGRikKKwkJCQl7CisJCQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZGFwdGVyLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCQkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiWzB4JTA0WF06MHglMDRYICAiLCBlZXBBZGRyICwgZWVwVmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQkJYklzUHJpbnRBbGxFMlAgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQltZW1jcHkoJnRlbXAyLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CisJCQl0ZW1wMltzdHJsZW4odmFsdWUpXSA9ICdcMCc7CisKKwkJCS8vIFNhbml0eSBjaGVjaworCQkJaWYoKHN0cmxlbih0aGlzX2NoYXIpID4gNCkgfHwgc3RybGVuKHRlbXAyKSA+IDgpCisJCQkJZ290byBuZXh0OworCisJCQlqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRoaXNfY2hhcltqXSA+ICdmJyB8fCB0aGlzX2NoYXJbal0gPCAnMCcpCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCWogPSBzdHJsZW4odGVtcDIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0ZW1wMltqXSA+ICdmJyB8fCB0ZW1wMltqXSA8ICcwJykKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQkvL01BQyBBZGRyCisJCQlrID0gaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0aGlzX2NoYXJbNC1rK2pdID0gdGhpc19jaGFyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgNCkKKwkJCQl0aGlzX2NoYXJbMy1rKytdPScwJzsKKwkJCXRoaXNfY2hhcls0XT0nXDAnOworCisJCQkvL01BQyB2YWx1ZQorCQkJayA9IGogPSBzdHJsZW4odGVtcDIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0ZW1wMls0LWsral0gPSB0ZW1wMltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDQpCisJCQkJdGVtcDJbMy1rKytdPScwJzsKKwkJCXRlbXAyWzRdPSdcMCc7CisKKwkJCUF0b0godGhpc19jaGFyLCB0ZW1wLCAyKTsKKwkJCWVlcEFkZHIgPSAqdGVtcCoyNTYgKyB0ZW1wWzFdOworCisJCQlBdG9IKHRlbXAyLCB0ZW1wLCAyKTsKKwkJCWVlcFZhbHVlID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKworCQkJUlQyOHh4X0VFUFJPTV9XUklURTE2KHBBZGFwdGVyLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlsweCUwMlhdOiUwMlggICIsIGVlcEFkZHIsIGVlcFZhbHVlKTsKKwkJfQorCX0KKwllbHNlCisJCWJJc1ByaW50QWxsRTJQID0gVFJVRTsKK25leHQ6CisJaWYgKGJJc1ByaW50QWxsRTJQKQorCXsKKwkJc3RydWN0IGZpbGUJCSpmaWxlX3c7CisJCVBDSEFSCQkJZmlsZU5hbWUgPSAiRUVQUk9NRHVtcC50eHQiOworCQltbV9zZWdtZW50X3QJb3JpZ19mczsKKworCQlvcmlnX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCS8vIG9wZW4gZmlsZQorCQlmaWxlX3cgPSBmaWxwX29wZW4oZmlsZU5hbWUsIE9fV1JPTkxZfE9fQ1JFQVQsIDApOworCQlpZiAoSVNfRVJSKGZpbGVfdykpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPjIpICVzOiBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwgX19GVU5DVElPTl9fLCAtUFRSX0VSUihmaWxlX3cpLCBmaWxlTmFtZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGZpbGVfdy0+Zl9vcCAmJiBmaWxlX3ctPmZfb3AtPndyaXRlKQorCQkJeworCQkJCWZpbGVfdy0+Zl9wb3MgPSAwOworCQkJCWVlcEFkZHIgPSAweDAwOworCisJCQkJd2hpbGUgKGVlcEFkZHIgPD0gMHhGRSkKKwkJCQl7CisJCQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZGFwdGVyLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCQkJCXNwcmludGYobXNnLCAiJTA4eCA9ICUwNHhcbiIsIGVlcEFkZHIgLCBlZXBWYWx1ZSk7CisKKwkJCQkJLy8gd3JpdGUgZGF0YSB0byBmaWxlCisJCQkJCWZpbGVfdy0+Zl9vcC0+d3JpdGUoZmlsZV93LCBtc2csIHN0cmxlbihtc2cpLCAmZmlsZV93LT5mX3Bvcyk7CisKKwkJCQkJcHJpbnRrKCIlcyIsIG1zZyk7CisJCQkJCWVlcEFkZHIgKz0gMjsKKwkJCQl9CisJCQkJc3ByaW50Zihtc2csICJcbkR1bXAgYWxsIEVFUFJPTSB2YWx1ZXMgdG8gJXNcbiIsIGZpbGVOYW1lKTsKKwkJCX0KKwkJCWZpbHBfY2xvc2UoZmlsZV93LCBOVUxMKTsKKwkJfQorCQlzZXRfZnMob3JpZ19mcyk7CisJfQorCWlmKHN0cmxlbihtc2cpID09IDEpCisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiPT09PkVycm9yIGNvbW1hbmQgZm9ybWF0ISIpOworCisKKwkvLyBDb3B5IHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSB1c2VyIGJ1ZmZlcgorCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOworCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT1SVE1QSW9jdGxFMlBST01cbiIpKTsKK30KKyNpZmRlZiBSVDMweHgKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVhZCAvIFdyaXRlIFJGIHJlZ2lzdGVyCitBcmd1bWVudHM6CisgICAgcEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICAgICAxLikgaXdwcml2IHJhMCByZiAgICAgICAgICAgICAgICA9PT4gcmVhZCBhbGwgUkYgcmVnaXN0ZXJzCisgICAgICAgICAgICAgICAyLikgaXdwcml2IHJhMCByZiAxICAgICAgICAgICAgICA9PT4gcmVhZCBSRiB3aGVyZSBSZWdJRD0xCisgICAgICAgICAgICAgICAzLikgaXdwcml2IHJhMCByZiAxPTEwCQkgICAgPT0+IHdyaXRlIFJGIFIxPTB4MTAKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUElvY3RsUkYoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwlDSEFSCQkJCSp0aGlzX2NoYXI7CisJQ0hBUgkJCQkqdmFsdWU7CisJVUNIQVIJCQkJcmVnUkYgPSAwOworCUNIQVIJCQkJbXNnWzIwNDhdOworCUNIQVIJCQkJYXJnWzI1NV07CisJSU5UCQkJCQlyZklkOworCUxPTkcJCQkJcmZWYWx1ZTsKKwlpbnQJCQkJCVN0YXR1czsKKwlCT09MRUFOCQkJCWJJc1ByaW50QWxsUkYgPSBGQUxTRTsKKworCisJbWVtc2V0KG1zZywgMHgwMCwgMjA0OCk7CisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwl7CisJICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKGFyZywgd3JxLT51LmRhdGEucG9pbnRlciwgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDI1NSkgPyAyNTUgOiB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisKKwkgICAgLy9QYXJzaW5nIFJlYWQgb3IgV3JpdGUKKwkJdGhpc19jaGFyID0gYXJnOworCQlpZiAoISp0aGlzX2NoYXIpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCh2YWx1ZSA9IHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisKKwkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKQorCQl7IC8vUmVhZAorCQkJaWYgKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYocmZJZCkpID09IDEpCisJCQl7CisJCQkJaWYgKHJmSWQgPD0gMzEpCisJCQkJeworCQkJCQkvLyBJbiBSVDI4NjAgQVRFIG1vZGUsIHdlIGRvIG5vdCBsb2FkIDgwNTEgZmlybXdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vV2UgbXVzdCBhY2Nlc3MgUkYgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBSVDI4NzAgQVRFIG1vZGUsIEFURV9SRl9JT19XUklURTgoL1JFQUQ4KV9CWV9SRUdfSUQgYXJlIHJlZGVmaW5lZC4KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCQl7CisJCQkJCQlBVEVfUkZfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQl9CisJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQkJCS8vIGFjY29yZGluZyB0byBBbmR5LCBHYXJ5LCBEYXZpZCByZXF1aXJlLgorCQkJCQkvLyB0aGUgY29tbWFuZCByZiBzaGFsbCByZWFkIHJmIHJlZ2lzdGVyIGRpcmVjdGx5IGZvciBkdWJ1Zy4KKwkJCQkJLy8gQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKworCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlIlMDJkWzB4JTAyeF06JTAyWCAgIiwgcmZJZCwgcmZJZCoyLCByZWdSRik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7Ly9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIFJGCisJCQkJCWJJc1ByaW50QWxsUkYgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgUkYKKwkJCQliSXNQcmludEFsbFJGID0gVFJVRTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7IC8vV3JpdGUKKwkJCWlmICgoc3NjYW5mKHRoaXNfY2hhciwgIiVkIiwgJihyZklkKSkgPT0gMSkgJiYgKHNzY2FuZih2YWx1ZSwgIiVseCIsICYocmZWYWx1ZSkpID09IDEpKQorCQkJeworCQkJCWlmIChyZklkIDw9IDMxKQorCQkJCXsKKwkJCQkJLy8gSW4gUlQyODYwIEFURSBtb2RlLCB3ZSBkbyBub3QgbG9hZCA4MDUxIGZpcm13YXJlLgorCQkJCQkvLyBXZSBzaG91bGQgYWNjZXNzIFJGIHJlZ2lzdGVycyBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIFJUMjg3MCBBVEUgbW9kZSwgQVRFX1JGX0lPX1dSSVRFOC9SRUFEOF9CWV9SRUdfSUQgYXJlIHJlZGVmaW5lZC4KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQkJCXsKKwkJCQkJCQlBVEVfUkZfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQkJCUFURV9SRl9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCAoVUNIQVIpcmZJZCwoVUNIQVIpIHJmVmFsdWUpOworCQkJCQkJCS8vUmVhZCBpdCBiYWNrIGZvciBzaG93aW5nCisJCQkJCQkJQVRFX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlIlMDJkWzB4JTAyWF06JTAyWFxuIiwgcmZJZCwgcmZJZCoyLCByZWdSRik7CisJCQkJCQl9CisJCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQkJeworCQkJCQkJCS8vIGFjY29yZGluZyB0byBBbmR5LCBHYXJ5LCBEYXZpZCByZXF1aXJlLgorCQkJCQkJCS8vIHRoZSBjb21tYW5kIFJGIHNoYWxsIHJlYWQvd3JpdGUgUkYgcmVnaXN0ZXIgZGlyZWN0bHkgZm9yIGR1YnVnLgorCQkJCQkJCS8vQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQkgICAgICAgICAgICAgICAgLy9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgKFVDSEFSKWJicElkLChVQ0hBUikgYmJwVmFsdWUpOworCQkJCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWRhcHRlciwgKFVDSEFSKXJmSWQsKFVDSEFSKSByZlZhbHVlKTsKKwkJCQkJICAgICAgICAgICAgICAgIC8vUmVhZCBpdCBiYWNrIGZvciBzaG93aW5nCisJCQkJCQkJLy9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgJnJlZ0JCUCk7CisJCQkJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisJCQkJCSAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlIlMDJkWzB4JTAyWF06JTAyWFxuIiwgcmZJZCwgcmZJZCoyLCByZWdSRik7CisJCQkJICAgICAgICAgICAgICAgIH0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgUkYKKwkJCQkJYklzUHJpbnRBbGxSRiA9IFRSVUU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgUkYKKwkJCQliSXNQcmludEFsbFJGID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJCWJJc1ByaW50QWxsUkYgPSBUUlVFOworbmV4dDoKKwlpZiAoYklzUHJpbnRBbGxSRikKKwl7CisJCW1lbXNldChtc2csIDB4MDAsIDIwNDgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisJCWZvciAocmZJZCA9IDA7IHJmSWQgPD0gMzE7IHJmSWQrKykKKwkJeworCQkJLy8gSW4gUlQyODYwIEFURSBtb2RlLCB3ZSBkbyBub3QgbG9hZCA4MDUxIGZpcm13YXJlLgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFjY2VzcyBSRiByZWdpc3RlcnMgZGlyZWN0bHkuCisgICAgICAgICAgICAvLyBGb3IgUlQyODcwIEFURSBtb2RlLCBBVEVfUkZfSU9fV1JJVEU4L1JFQUQ4X0JZX1JFR19JRCBhcmUgcmVkZWZpbmVkLgorI2lmZGVmIFJBTElOS19BVEUKKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCUFURV9SRl9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisJCQkJfQorCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwkJCS8vIGFjY29yZGluZyB0byBBbmR5LCBHYXJ5LCBEYXZpZCByZXF1aXJlLgorCQkJLy8gdGhlIGNvbW1hbmQgUkYgc2hhbGwgcmVhZC93cml0ZSBSRiByZWdpc3RlciBkaXJlY3RseSBmb3IgZHVidWcuCisJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiJTAzZCA9ICUwMlhcbiIsIHJmSWQsIHJlZ1JGKTsKKwkJfQorCQkvLyBDb3B5IHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSB1c2VyIGJ1ZmZlcgorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJzdHJsZW4obXNnKT0lZFxuIiwgKFVJTlQzMilzdHJsZW4obXNnKSkpOworCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOiBjb3B5X3RvX3VzZXIoKSBmYWlsXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZihzdHJsZW4obXNnKSA9PSAxKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICI9PT0+RXJyb3IgY29tbWFuZCBmb3JtYXQhIik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiY29weSB0byB1c2VyIFttc2c9JXNdXG4iLCBtc2cpKTsKKwkJLy8gQ29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgdXNlciBidWZmZXIKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgic3RybGVuKG1zZykgPSVkXG4iLCAoVUlOVDMyKXN0cmxlbihtc2cpKSk7CisKKwkJLy8gQ29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgdXNlciBidWZmZXIKKwkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09UlRNUElvY3RsUkZcblxuIikpOworfQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2VuZGlmIC8vIERCRyAvLworCisKKworCitJTlQgU2V0X1RHbldpZmlUZXN0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMCkKKyAgICAgICAgcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0ID0gRkFMU0U7CisgICAgZWxzZQorICAgICAgICBwQWQtPlN0YUNmZy5iVEduV2lmaVRlc3QgPSBUUlVFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUYgU2V0X1RHbldpZmlUZXN0X1Byb2M6OihiVEduV2lmaVRlc3Q9JWQpXG4iLCBwQWQtPlN0YUNmZy5iVEduV2lmaVRlc3QpKTsKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UIFNldF9Mb25nUmV0cnlMaW1pdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVRYX1JUWV9DRkdfU1RSVUMJdHhfcnR5X2NmZzsKKwlVQ0hBUgkJCQlMb25nUmV0cnlMaW1pdCA9IChVQ0hBUilzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCXR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0ID0gTG9uZ1JldHJ5TGltaXQ7CisJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCB0eF9ydHlfY2ZnLndvcmQpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklGIFNldF9Mb25nUmV0cnlMaW1pdF9Qcm9jOjoodHhfcnR5X2NmZz0weCV4KVxuIiwgdHhfcnR5X2NmZy53b3JkKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfU2hvcnRSZXRyeUxpbWl0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVFhfUlRZX0NGR19TVFJVQwl0eF9ydHlfY2ZnOworCVVDSEFSCQkJCVNob3J0UmV0cnlMaW1pdCA9IChVQ0hBUilzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCXR4X3J0eV9jZmcuZmllbGQuU2hvcnRSdHlMaW1pdCA9IFNob3J0UmV0cnlMaW1pdDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsIHR4X3J0eV9jZmcud29yZCk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUYgU2V0X1Nob3J0UmV0cnlMaW1pdF9Qcm9jOjoodHhfcnR5X2NmZz0weCV4KVxuIiwgdHhfcnR5X2NmZy53b3JkKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCitJTlQgU2V0X0llZWU4MDIxMWRDbGllbnRNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpZiAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAwKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlID0gUnQ4MDJfMTFfRF9Ob25lOworICAgIGVsc2UgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSA9IFJ0ODAyXzExX0RfRmxleGlibGU7CisgICAgZWxzZSBpZiAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAyKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlID0gUnQ4MDJfMTFfRF9TdHJpY3Q7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSWVlZTgwMmRNb2RlX1Byb2M6OihJRUVFRTAyMTFkTW9kZT0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCitJTlQgU2V0X0NhcnJpZXJEZXRlY3RfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpZiAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAwKQorICAgICAgICBwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IEZBTFNFOworICAgIGVsc2UKKyAgICAgICAgcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBUUlVFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUYgU2V0X0NhcnJpZXJEZXRlY3RfUHJvYzo6KENhcnJpZXJEZXRlY3QuRW5hYmxlPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUpKTsKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvd3BhLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3dwYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzdjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3dwYS5oCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXdwYS5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisqLworCisjaWZuZGVmCV9fV1BBX0hfXworI2RlZmluZQlfX1dQQV9IX18KKworLy8gRUFQT0wgS2V5IGRlc2NyaXB0ZXIgZnJhbWUgZm9ybWF0IHJlbGF0ZWQgbGVuZ3RoCisjZGVmaW5lIExFTl9LRVlfREVTQ19OT05DRQkJCTMyCisjZGVmaW5lIExFTl9LRVlfREVTQ19JVgkJCQkxNgorI2RlZmluZSBMRU5fS0VZX0RFU0NfUlNDCQkJOAorI2RlZmluZSBMRU5fS0VZX0RFU0NfSUQJCQkJOAorI2RlZmluZSBMRU5fS0VZX0RFU0NfUkVQTEFZCQkJOAorI2RlZmluZSBMRU5fS0VZX0RFU0NfTUlDCQkJMTYKKworLy8gVGhlIGxlbmd0aCBpcyB0aGUgRUFQb0wtS2V5IGZyYW1lIGV4Y2VwdCBrZXkgZGF0YSBmaWVsZC4KKy8vIFBsZWFzZSByZWZlciB0byA4MDIuMTFpLTIwMDQgLEZpZ3VyZSA0M3UgaW4gcC43OAorI2RlZmluZSBMRU5fRUFQT0xfS0VZX01TRwkJCShzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRSkKKworLy8gRUFQIENvZGUgVHlwZS4KKyNkZWZpbmUgRUFQX0NPREVfUkVRVUVTVAkxCisjZGVmaW5lIEVBUF9DT0RFX1JFU1BPTlNFCTIKKyNkZWZpbmUgRUFQX0NPREVfU1VDQ0VTUyAgICAzCisjZGVmaW5lIEVBUF9DT0RFX0ZBSUxVUkUgICAgNAorCisvLyBFQVBPTCBmcmFtZSBQcm90b2NvbCBWZXJzaW9uCisjZGVmaW5lCUVBUE9MX1ZFUgkJCQkJMQorI2RlZmluZQlFQVBPTF9WRVIyCQkJCQkyCisKKy8vIEVBUE9MLUtFWSBEZXNjcmlwdG9yIFR5cGUKKyNkZWZpbmUJV1BBMV9LRVlfREVTQwkJCQkweGZlCisjZGVmaW5lIFdQQTJfS0VZX0RFU0MgICAgICAgICAgICAgICAweDAyCisKKy8vIEtleSBEZXNjcmlwdG9yIFZlcnNpb24gb2YgS2V5IEluZm9ybWF0aW9uCisjZGVmaW5lCURFU0NfVFlQRV9US0lQCQkJCTEKKyNkZWZpbmUJREVTQ19UWVBFX0FFUwkJCQkyCisjZGVmaW5lIERFU0NfVFlQRV9NRVNICQkJCTMKKworI2RlZmluZSBMRU5fTVNHMV8yV0FZICAgICAgICAgICAgICAgMHg3ZgorI2RlZmluZSBNQVhfTEVOX09GX0VBUF9IUyAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgTEVOX01BU1RFUl9LRVkJCQkJMzIKKworLy8gRUFQT0wgRUssIE1LCisjZGVmaW5lIExFTl9FQVBfRUsJCQkJCTE2CisjZGVmaW5lIExFTl9FQVBfTUlDSwkJCQkxNgorI2RlZmluZSBMRU5fRUFQX0tFWQkJCQkJKChMRU5fRUFQX0VLKSsoTEVOX0VBUF9NSUNLKSkKKy8vIFRLSVAga2V5IHJlbGF0ZWQKKyNkZWZpbmUgTEVOX1BNS0lECQkJCQkxNgorI2RlZmluZSBMRU5fVEtJUF9FSwkJCQkJMTYKKyNkZWZpbmUgTEVOX1RLSVBfUlhNSUNLCQkJCTgKKyNkZWZpbmUgTEVOX1RLSVBfVFhNSUNLCQkJCTgKKyNkZWZpbmUgTEVOX0FFU19FSwkJCQkJMTYKKyNkZWZpbmUgTEVOX0FFU19LRVkJCQkJCUxFTl9BRVNfRUsKKyNkZWZpbmUgTEVOX1RLSVBfS0VZCQkJCSgoTEVOX1RLSVBfRUspKyhMRU5fVEtJUF9SWE1JQ0spKyhMRU5fVEtJUF9UWE1JQ0spKQorI2RlZmluZSBUS0lQX0FQX1RYTUlDS19PRkZTRVQJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9FSykpCisjZGVmaW5lIFRLSVBfQVBfUlhNSUNLX09GRlNFVAkJKFRLSVBfQVBfVFhNSUNLX09GRlNFVCtMRU5fVEtJUF9UWE1JQ0spCisjZGVmaW5lIFRLSVBfR1RLX0xFTkdUSAkJCQkoKExFTl9US0lQX0VLKSsoTEVOX1RLSVBfUlhNSUNLKSsoTEVOX1RLSVBfVFhNSUNLKSkKKyNkZWZpbmUgTEVOX1BUSwkJCQkJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9LRVkpKQorCisvLyBSU04gSUUgTGVuZ3RoIGRlZmluaXRpb24KKyNkZWZpbmUgTUFYX0xFTl9PRl9SU05JRSAgICAgICAgIAk5MAorI2RlZmluZSBNSU5fTEVOX09GX1JTTklFICAgICAgICAgCTgKKworLy9FQVAgUGFja2V0IFR5cGUKKyNkZWZpbmUJRUFQUGFja2V0CQkwCisjZGVmaW5lCUVBUE9MU3RhcnQJCTEKKyNkZWZpbmUJRUFQT0xMb2dvZmYJCTIKKyNkZWZpbmUJRUFQT0xLZXkJCTMKKyNkZWZpbmUJRUFQT0xBU0ZBbGVydAk0CisjZGVmaW5lCUVBUFR0eXBlTWF4CQk1CisKKyNkZWZpbmUJRUFQT0xfTVNHX0lOVkFMSUQJMAorI2RlZmluZQlFQVBPTF9QQUlSX01TR18xCTEKKyNkZWZpbmUJRUFQT0xfUEFJUl9NU0dfMgkyCisjZGVmaW5lCUVBUE9MX1BBSVJfTVNHXzMJMworI2RlZmluZQlFQVBPTF9QQUlSX01TR180CTQKKyNkZWZpbmUJRUFQT0xfR1JPVVBfTVNHXzEJNQorI2RlZmluZQlFQVBPTF9HUk9VUF9NU0dfMgk2CisKKyNkZWZpbmUgUEFJUldJU0VLRVkJCQkJCTEKKyNkZWZpbmUgR1JPVVBLRVkJCQkJCTAKKworLy8gUmV0cnkgdGltZXIgY291bnRlciBpbml0aWFsIHZhbHVlCisjZGVmaW5lIFBFRVJfTVNHMV9SRVRSWV9USU1FUl9DVFIgICAgICAgICAgIDAKKyNkZWZpbmUgUEVFUl9NU0czX1JFVFJZX1RJTUVSX0NUUiAgICAgICAgICAgMTAKKyNkZWZpbmUgR1JPVVBfTVNHMV9SRVRSWV9USU1FUl9DVFIgICAgICAgICAgMjAKKworCisjZGVmaW5lIEVBUE9MX1NUQVJUX0RJU0FCTEUJCQkJCTAKKyNkZWZpbmUgRUFQT0xfU1RBUlRfUFNLCQkJCQkJMQorI2RlZmluZSBFQVBPTF9TVEFSVF8xWAkJCQkJCTIKKworI2RlZmluZSBNSVhfQ0lQSEVSX1dQQV9US0lQX09OKHgpICAgICAgICgoKHgpICYgMHgwOCkgIT0gMCkKKyNkZWZpbmUgTUlYX0NJUEhFUl9XUEFfQUVTX09OKHgpICAgICAgICAoKCh4KSAmIDB4MDQpICE9IDApCisjZGVmaW5lIE1JWF9DSVBIRVJfV1BBMl9US0lQX09OKHgpICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKQorI2RlZmluZSBNSVhfQ0lQSEVSX1dQQTJfQUVTX09OKHgpICAgICAgICgoKHgpICYgMHgwMSkgIT0gMCkKKworI2RlZmluZSBST1VORF9VUChfX3gsIF9feSkgXAorCSgoKFVMT05HKSgoX194KSsoKF9feSktMSkpKSAmICgoVUxPTkcpfigoX195KS0xKSkpCisKKyNkZWZpbmUJQUREX09ORV9Ub182NEJJVF9WQVIoX1YpCQlcCit7CQkJCQkJCQkJCVwKKwlVQ0hBUgljbnQgPSBMRU5fS0VZX0RFU0NfUkVQTEFZOwlcCisJZG8JCQkJCQkJCQlcCisJewkJCQkJCQkJCVwKKwkJY250LS07CQkJCQkJCVwKKwkJX1ZbY250XSsrOwkJCQkJCVwKKwkJaWYgKGNudCA9PSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCX13aGlsZSAoX1ZbY250XSA9PSAwKTsJCQkJXAorfQorCisjZGVmaW5lIElTX1dQQV9DQVBBQklMSVRZKGEpICAgICAgICgoKGEpID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgJiYgKChhKSA8PSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSykpCisKKy8vIEVBUE9MIEtleSBJbmZvcm1hdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBLZXkgZGVzY3JpcHRvciBmb3JtYXQKK3R5cGVkZWYJc3RydWN0IFBBQ0tFRCBfS0VZX0lORk8KK3sKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJS2V5QWNrOjE7CisgICAgVUNIQVIJSW5zdGFsbDoxOworICAgIFVDSEFSCUtleUluZGV4OjI7CisgICAgVUNIQVIJS2V5VHlwZToxOworICAgIFVDSEFSCUtleURlc2NWZXI6MzsKKyAgICBVQ0hBUglSc3ZkOjM7CisgICAgVUNIQVIJRUtEX0RMOjE7CQkvLyBFS0QgZm9yIEFQOyBETCBmb3IgU1RBCisgICAgVUNIQVIJUmVxdWVzdDoxOworICAgIFVDSEFSCUVycm9yOjE7CisgICAgVUNIQVIJU2VjdXJlOjE7CisgICAgVUNIQVIJS2V5TWljOjE7CisjZWxzZQorCVVDSEFSCUtleU1pYzoxOworCVVDSEFSCVNlY3VyZToxOworCVVDSEFSCUVycm9yOjE7CisJVUNIQVIJUmVxdWVzdDoxOworCVVDSEFSCUVLRF9ETDoxOyAgICAgICAvLyBFS0QgZm9yIEFQOyBETCBmb3IgU1RBCisJVUNIQVIJUnN2ZDozOworCVVDSEFSCUtleURlc2NWZXI6MzsKKwlVQ0hBUglLZXlUeXBlOjE7CisJVUNIQVIJS2V5SW5kZXg6MjsKKwlVQ0hBUglJbnN0YWxsOjE7CisJVUNIQVIJS2V5QWNrOjE7CisjZW5kaWYKK30JS0VZX0lORk8sICpQS0VZX0lORk87CisKKy8vIEVBUE9MIEtleSBkZXNjcmlwdG9yIGZvcm1hdAordHlwZWRlZglzdHJ1Y3QgUEFDS0VEIF9LRVlfREVTQ1JJUFRFUgoreworCVVDSEFSCQlUeXBlOworCUtFWV9JTkZPCUtleUluZm87CisJVUNIQVIJCUtleUxlbmd0aFsyXTsKKwlVQ0hBUgkJUmVwbGF5Q291bnRlcltMRU5fS0VZX0RFU0NfUkVQTEFZXTsKKwlVQ0hBUgkJS2V5Tm9uY2VbTEVOX0tFWV9ERVNDX05PTkNFXTsKKwlVQ0hBUgkJS2V5SXZbTEVOX0tFWV9ERVNDX0lWXTsKKwlVQ0hBUgkJS2V5UnNjW0xFTl9LRVlfREVTQ19SU0NdOworCVVDSEFSCQlLZXlJZFtMRU5fS0VZX0RFU0NfSURdOworCVVDSEFSCQlLZXlNaWNbTEVOX0tFWV9ERVNDX01JQ107CisJVUNIQVIJCUtleURhdGFMZW5bMl07CisJVUNIQVIJCUtleURhdGFbTUFYX0xFTl9PRl9SU05JRV07Cit9CUtFWV9ERVNDUklQVEVSLCAqUEtFWV9ERVNDUklQVEVSOworCit0eXBlZGVmCXN0cnVjdCBQQUNLRUQgX0VBUE9MX1BBQ0tFVAoreworCVVDSEFSCSAJCQlQcm9WZXI7CisJVUNIQVIJIAkJCVByb1R5cGU7CisJVUNIQVIJIAkJCUJvZHlfTGVuWzJdOworCUtFWV9ERVNDUklQVEVSCQlLZXlEZXNjOworfQlFQVBPTF9QQUNLRVQsICpQRUFQT0xfUEFDS0VUOworCisvLzgwMi4xMWkgRDEwIHBhZ2UgODMKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfR1RLX0VOQ0FQCit7CisjaWZuZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEtpZDoyOworICAgIFVDSEFSICAgICAgICAgICAgICAgdHg6MTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHJzdjo1OworICAgIFVDSEFSICAgICAgICAgICAgICAgcnN2MTsKKyNlbHNlCisgICAgVUNIQVIgICAgICAgICAgICAgICByc3Y6NTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHR4OjE7CisgICAgVUNIQVIgICAgICAgICAgICAgICBLaWQ6MjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHJzdjE7CisjZW5kaWYKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEdUS1tUS0lQX0dUS19MRU5HVEhdOworfSAgIEdUS19FTkNBUCwgKlBHVEtfRU5DQVA7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfS0RFX0VOQ0FQCit7CisgICAgVUNIQVIgICAgICAgICAgICAgICBUeXBlOworICAgIFVDSEFSICAgICAgICAgICAgICAgTGVuOworICAgIFVDSEFSICAgICAgICAgICAgICAgT1VJWzNdOworICAgIFVDSEFSICAgICAgICAgICAgICAgRGF0YVR5cGU7CisgICAgR1RLX0VOQ0FQICAgICAgR1RLRW5jYXA7Cit9ICAgS0RFX0VOQ0FQLCAqUEtERV9FTkNBUDsKKworLy8gRm9yIFdQQTEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUlNOSUUgeworICAgIFVDSEFSICAgb3VpWzRdOworICAgIFVTSE9SVCAgdmVyc2lvbjsKKyAgICBVQ0hBUiAgIG1jYXN0WzRdOworICAgIFVTSE9SVCAgdWNvdW50OworICAgIHN0cnVjdCBQQUNLRUQgeworICAgICAgICBVQ0hBUiBvdWlbNF07CisgICAgfXVjYXN0WzFdOworfSBSU05JRSwgKlBSU05JRTsKKworLy8gRm9yIFdQQTIKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUlNOSUUyIHsKKyAgICBVU0hPUlQgIHZlcnNpb247CisgICAgVUNIQVIgICBtY2FzdFs0XTsKKyAgICBVU0hPUlQgIHVjb3VudDsKKyAgICBzdHJ1Y3QgUEFDS0VEIHsKKyAgICAgICAgVUNIQVIgb3VpWzRdOworICAgIH11Y2FzdFsxXTsKK30gUlNOSUUyLCAqUFJTTklFMjsKKworLy8gQUtNIFN1aXRlCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JTTklFX0FVVEggeworICAgIFVTSE9SVCBhY291bnQ7CisgICAgc3RydWN0IFBBQ0tFRCB7CisgICAgICAgIFVDSEFSIG91aVs0XTsKKyAgICB9YXV0aFsxXTsKK30gUlNOSUVfQVVUSCwqUFJTTklFX0FVVEg7CisKK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9SU05fQ0FQQUJJTElUSUVTCXsKKwlzdHJ1Y3QJUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgICAgIFVTSE9SVAkJUnN2ZDoxMDsKKyAgICAgICAgVVNIT1JUCQlHVEtTQV9SX0NvdW50ZXI6MjsKKyAgICAgICAgVVNIT1JUCQlQVEtTQV9SX0NvdW50ZXI6MjsKKyAgICAgICAgVVNIT1JUCQlOb19QYWlyd2lzZToxOworCQlVU0hPUlQJCVByZUF1dGg6MTsKKyNlbHNlCisgICAgICAgIFVTSE9SVAkJUHJlQXV0aDoxOworCQlVU0hPUlQJCU5vX1BhaXJ3aXNlOjE7CisJCVVTSE9SVAkJUFRLU0FfUl9Db3VudGVyOjI7CisJCVVTSE9SVAkJR1RLU0FfUl9Db3VudGVyOjI7CisJCVVTSE9SVAkJUnN2ZDoxMDsKKyNlbmRpZgorCX0JZmllbGQ7CisJVVNIT1JUCQkJd29yZDsKK30JUlNOX0NBUEFCSUxJVElFUywgKlBSU05fQ0FQQUJJTElUSUVTOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0VBUF9IRFIgeworICAgIFVDSEFSICAgUHJvVmVyOworICAgIFVDSEFSICAgUHJvVHlwZTsKKyAgICBVQ0hBUiAgIEJvZHlfTGVuWzJdOworICAgIFVDSEFSICAgY29kZTsKKyAgICBVQ0hBUiAgIGlkZW50aWZpZXI7CisgICAgVUNIQVIgICBsZW5ndGhbMl07IC8vIGluY2x1ZGluZyBjb2RlIGFuZCBpZGVudGlmaWVyLCBmb2xsb3dlZCBieSBsZW5ndGgtMiBvY3RldHMgb2YgZGF0YQorfSBFQVBfSERSLCAqUEVBUF9IRFI7CisKKy8vIEZvciBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUgc3RhdGVzLiA4MDIuMTFpIERyYWZ0IDQuMSwgcC4gOTcKKy8vIFdlIHNpbXBsaWZpZWQgaXQKK3R5cGVkZWYJZW51bQlfV3BhU3RhdGUKK3sKKwlTU19OT1RVU0UsCQkJCS8vIDAKKwlTU19TVEFSVCwJCQkJLy8gMQorCVNTX1dBSVRfTVNHXzMsCQkJLy8gMgorCVNTX1dBSVRfR1JPVVAsCQkJLy8gMworCVNTX0ZJTklTSCwgIAkJCS8vIDQKKwlTU19LRVlVUERBVEUsCQkJLy8gNQorfQlXUEFfU1RBVEU7CisKKy8vCisvLwlUaGUgZGVmaW5pdGlvbiBvZiB0aGUgY2lwaGVyIGNvbWJpbmF0aW9uCisvLworLy8gCSBiaXQzCWJpdDIgIGJpdDEgICBiaXQwCisvLwkrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKy8vIAl8CSAgV1BBCSB8CSAgIFdQQTIgICB8CisvLwkrLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLSsKKy8vCXwgVEtJUCB8IEFFUyB8IFRLSVAgfCBBRVMgfAorLy8JfAkwICB8ICAxICB8ICAgMSAgfCAgMCAgfCAtPiAweDA2CisvLwl8CTAgIHwgIDEgIHwgICAxICB8ICAxICB8IC0+IDB4MDcKKy8vCXwJMSAgfCAgMCAgfCAgIDAgIHwgIDEgIHwgLT4gMHgwOQorLy8JfAkxICB8ICAwICB8ICAgMSAgfCAgMSAgfCAtPiAweDBCCisvLwl8CTEgIHwgIDEgIHwgICAwICB8ICAxICB8IC0+IDB4MEQKKy8vCXwJMSAgfCAgMSAgfCAgIDEgIHwgIDAgIHwgLT4gMHgwRQorLy8JfAkxICB8ICAxICB8ICAgMSAgfCAgMSAgfAktPiAweDBGCisvLwkrLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLSsKKy8vCit0eXBlZGVmCWVudW0JX1dwYU1peFBhaXJDaXBoZXIKK3sKKwlNSVhfQ0lQSEVSX05PVFVTRSAJCQk9IDB4MDAsCisJV1BBX05PTkVfV1BBMl9US0lQQUVTCQk9IDB4MDMsCQkvLyBXUEEyLVRLSVBBRVMKKwlXUEFfQUVTX1dQQTJfVEtJUCAJCQk9IDB4MDYsCisJV1BBX0FFU19XUEEyX1RLSVBBRVMJCT0gMHgwNywKKwlXUEFfVEtJUF9XUEEyX0FFUwkJCT0gMHgwOSwKKwlXUEFfVEtJUF9XUEEyX1RLSVBBRVMJCT0gMHgwQiwKKwlXUEFfVEtJUEFFU19XUEEyX05PTkUJCT0gMHgwQywJCS8vIFdQQS1US0lQQUVTCisJV1BBX1RLSVBBRVNfV1BBMl9BRVMJCT0gMHgwRCwKKwlXUEFfVEtJUEFFU19XUEEyX1RLSVAJCT0gMHgwRSwKKwlXUEFfVEtJUEFFU19XUEEyX1RLSVBBRVMJPSAweDBGLAorfQlXUEFfTUlYX1BBSVJfQ0lQSEVSOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JTTl9JRV9IRUFERVJfU1RSVUNUCXsKKwlVQ0hBUgkJRWlkOworCVVDSEFSCQlMZW5ndGg7CisJVVNIT1JUCQlWZXJzaW9uOwkvLyBMaXR0bGUgZW5kaWFuIGZvcm1hdAorfQlSU05fSUVfSEVBREVSX1NUUlVDVCwgKlBSU05fSUVfSEVBREVSX1NUUlVDVDsKKworLy8gQ2lwaGVyIHN1aXRlIHNlbGVjdG9yIHR5cGVzCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0NJUEhFUl9TVUlURV9TVFJVQ1QJeworCVVDSEFSCQlPdWlbM107CisJVUNIQVIJCVR5cGU7Cit9CUNJUEhFUl9TVUlURV9TVFJVQ1QsICpQQ0lQSEVSX1NVSVRFX1NUUlVDVDsKKworLy8gQXV0aGVudGljYXRpb24gYW5kIEtleSBNYW5hZ2VtZW50IHN1aXRlIHNlbGVjdG9yCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0FLTV9TVUlURV9TVFJVQ1QJeworCVVDSEFSCQlPdWlbM107CisJVUNIQVIJCVR5cGU7Cit9CUFLTV9TVUlURV9TVFJVQ1QsICpQQUtNX1NVSVRFX1NUUlVDVDsKKworLy8gUlNOIGNhcGFiaWxpdHkKK3R5cGVkZWYgc3RydWN0CVBBQ0tFRCBfUlNOX0NBUEFCSUxJVFkJeworCVVTSE9SVAkJUnN2OjEwOworCVVTSE9SVAkJR1RLU0FSZXBsYXlDbnQ6MjsKKwlVU0hPUlQJCVBUS1NBUmVwbGF5Q250OjI7CisJVVNIT1JUCQlOb1BhaXJ3aXNlOjE7CisJVVNIT1JUCQlQcmVBdXRoOjE7Cit9CVJTTl9DQVBBQklMSVRZLCAqUFJTTl9DQVBBQklMSVRZOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvZG90MTFkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2RvdDExZC5oCmluZGV4IDQ5ZjUzZmUuLjI0MTdkYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvZG90MTFkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9kb3QxMWQuaApAQCAtMSwxMDEgKzEsMTAxIEBACi0jaWZuZGVmIF9fSU5DX0RPVDExRF9IDQotI2RlZmluZSBfX0lOQ19ET1QxMURfSA0KLQ0KLSNpbmNsdWRlICJpZWVlODAyMTEuaCINCi0NCi0vLyNkZWZpbmUgRU5BQkxFX0RPVDExRA0KLQ0KLS8vI2RlZmluZSBET1QxMURfTUFYX0NITkxfTlVNIDgzDQotDQotdHlwZWRlZiBzdHJ1Y3QgX0NITkxfVFhQT1dFUl9UUklQTEUgew0KLQl1OCBGaXJzdENobmw7DQotCXU4ICBOdW1DaG5sczsNCi0JdTggIE1heFR4UG93ZXJJbkRibTsNCi19Q0hOTF9UWFBPV0VSX1RSSVBMRSwgKlBDSE5MX1RYUE9XRVJfVFJJUExFOw0KLQ0KLXR5cGVkZWYgZW51bSBfRE9UMTFEX1NUQVRFIHsNCi0JRE9UMTFEX1NUQVRFX05PTkUgPSAwLA0KLQlET1QxMURfU1RBVEVfTEVBUk5FRCwNCi0JRE9UMTFEX1NUQVRFX0RPTkUsDQotfURPVDExRF9TVEFURTsNCi0NCi10eXBlZGVmIHN0cnVjdCBfUlRfRE9UMTFEX0lORk8gew0KLQkvL0RFQ0xBUkVfUlRfT0JKRUNUKFJUX0RPVDExRF9JTkZPKTsNCi0NCi0JYm9vbCBiRW5hYmxlZDsgLy8gZG90MTFNdWx0aURvbWFpbkNhcGFiaWxpdHlFbmFibGVkDQotDQotCXUxNiBDb3VudHJ5SWVMZW47IC8vID4gMCBpZiBDb3VudHJ5SWVCdWZbXSBjb250YWlucyB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuDQotCXU4ICBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07DQotCXU4ICBDb3VudHJ5SWVTcmNBZGRyWzZdOyAvLyBTb3VyY2UgQVAgb2YgdGhlIGNvdW50cnkgSUUuDQotCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsgDQotDQotCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pDQotCS8vdTggIENobmxMaXN0TGVuOyAvLyAjQnl0ZXMgdmFsaWQgaW4gQ2hubExpc3RbXS4NCi0JLy91OCAgQ2hubExpc3RbRE9UMTFEX01BWF9DSE5MX05VTV07DQotCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOw0KLQ0KLQlET1QxMURfU1RBVEUgU3RhdGU7DQotfVJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOw0KLSNkZWZpbmUgZXFNYWNBZGRyKGEsYikJCSggKChhKVswXT09KGIpWzBdICYmIChhKVsxXT09KGIpWzFdICYmIChhKVsyXT09KGIpWzJdICYmIChhKVszXT09KGIpWzNdICYmIChhKVs0XT09KGIpWzRdICYmIChhKVs1XT09KGIpWzVdKSA/IDE6MCApDQotI2RlZmluZSBjcE1hY0FkZHIoZGVzLHNyYykJICAgICAgKChkZXMpWzBdPShzcmMpWzBdLChkZXMpWzFdPShzcmMpWzFdLChkZXMpWzJdPShzcmMpWzJdLChkZXMpWzNdPShzcmMpWzNdLChkZXMpWzRdPShzcmMpWzRdLChkZXMpWzVdPShzcmMpWzVdKQ0KLSNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSgoX19wSWVlZURldiktPnBEb3QxMWRJbmZvKSkNCi0NCi0jZGVmaW5lIElTX0RPVDExRF9FTkFCTEUoX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5iRW5hYmxlZA0KLSNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQ0KLQ0KLSNkZWZpbmUgSVNfRVFVQUxfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgZXFNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpIA0KLSNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQ0KLQ0KLSNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwNCi0JKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbikgPyBcDQotCUZBTFNFIDogXA0KLQkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpDQotDQotI2RlZmluZSBDSUVfV0FUQ0hET0dfVEggMQ0KLSNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nDQotI2RlZmluZSBSRVNFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSA9IDAgDQotI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQ0KLQ0KLSNkZWZpbmUgSVNfRE9UMTFEX1NUQVRFX0RPTkUoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+U3RhdGUgPT0gRE9UMTFEX1NUQVRFX0RPTkUpDQotDQotDQotdm9pZA0KLURvdDExZF9Jbml0KA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2DQotCSk7DQotDQotdm9pZA0KLURvdDExZF9SZXNldCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldg0KLQkpOw0KLQ0KLXZvaWQNCi1Eb3QxMWRfVXBkYXRlQ291bnRyeUllKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCAqCQlwVGFkZHIsDQotCXUxNglDb3V0cnlJZUxlbiwNCi0JdTggKiBwQ291dHJ5SWUJIA0KLQkpOw0KLQ0KLXU4DQotRE9UMTFEX0dldE1heFR4UHdySW5EYm0oDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsDQotCXU4IENoYW5uZWwNCi0JKTsNCi0NCi12b2lkDQotRE9UMTFEX1NjYW5Db21wbGV0ZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYNCi0JKTsNCi0NCi1pbnQgSXNMZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKTsNCi0NCi1pbnQgVG9MZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKTsNCi0NCi0jZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19ET1QxMURfSA0KKyNpZm5kZWYgX19JTkNfRE9UMTFEX0gKKyNkZWZpbmUgX19JTkNfRE9UMTFEX0gKKworI2luY2x1ZGUgImllZWU4MDIxMS5oIgorCisvLyNkZWZpbmUgRU5BQkxFX0RPVDExRAorCisvLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4MworCit0eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7CisJdTggRmlyc3RDaG5sOworCXU4ICBOdW1DaG5sczsKKwl1OCAgTWF4VHhQb3dlckluRGJtOworfUNITkxfVFhQT1dFUl9UUklQTEUsICpQQ0hOTF9UWFBPV0VSX1RSSVBMRTsKKwordHlwZWRlZiBlbnVtIF9ET1QxMURfU1RBVEUgeworCURPVDExRF9TVEFURV9OT05FID0gMCwKKwlET1QxMURfU1RBVEVfTEVBUk5FRCwKKwlET1QxMURfU1RBVEVfRE9ORSwKK31ET1QxMURfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7CisJLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7CisKKwlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQKKworCXUxNiBDb3VudHJ5SWVMZW47IC8vID4gMCBpZiBDb3VudHJ5SWVCdWZbXSBjb250YWlucyB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuCisJdTggIENvdW50cnlJZUJ1ZltNQVhfSUVfTEVOXTsKKwl1OCAgQ291bnRyeUllU3JjQWRkcls2XTsgLy8gU291cmNlIEFQIG9mIHRoZSBjb3VudHJ5IElFLgorCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsKKworCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pCisJLy91OCAgQ2hubExpc3RMZW47IC8vICNCeXRlcyB2YWxpZCBpbiBDaG5sTGlzdFtdLgorCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOworCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOworCisJRE9UMTFEX1NUQVRFIFN0YXRlOworfVJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOworI2RlZmluZSBlcU1hY0FkZHIoYSxiKQkJKCAoKGEpWzBdPT0oYilbMF0gJiYgKGEpWzFdPT0oYilbMV0gJiYgKGEpWzJdPT0oYilbMl0gJiYgKGEpWzNdPT0oYilbM10gJiYgKGEpWzRdPT0oYilbNF0gJiYgKGEpWzVdPT0oYilbNV0pID8gMTowICkKKyNkZWZpbmUgY3BNYWNBZGRyKGRlcyxzcmMpCSAgICAgICgoZGVzKVswXT0oc3JjKVswXSwoZGVzKVsxXT0oc3JjKVsxXSwoZGVzKVsyXT0oc3JjKVsyXSwoZGVzKVszXT0oc3JjKVszXSwoZGVzKVs0XT0oc3JjKVs0XSwoZGVzKVs1XT0oc3JjKVs1XSkKKyNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSgoX19wSWVlZURldiktPnBEb3QxMWRJbmZvKSkKKworI2RlZmluZSBJU19ET1QxMURfRU5BQkxFKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+YkVuYWJsZWQKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQorCisjZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorI2RlZmluZSBVUERBVEVfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgY3BNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCisKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwKKwkoKChfX0llKS5MZW5ndGggPT0gMCB8fCAoX19JZSkuTGVuZ3RoICE9IEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuKSA/IFwKKwlGQUxTRSA6IFwKKwkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpCisKKyNkZWZpbmUgQ0lFX1dBVENIRE9HX1RIIDEKKyNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nCisjZGVmaW5lIFJFU0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpID0gMAorI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQorCisjZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQorCisKK3ZvaWQKK0RvdDExZF9Jbml0KAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKKwkpOworCit2b2lkCitEb3QxMWRfUmVzZXQoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldgorCSk7CisKK3ZvaWQKK0RvdDExZF9VcGRhdGVDb3VudHJ5SWUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKKwl1OCAqCQlwVGFkZHIsCisJdTE2CUNvdXRyeUllTGVuLAorCXU4ICogcENvdXRyeUllCisJKTsKKwordTgKK0RPVDExRF9HZXRNYXhUeFB3ckluRGJtKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggQ2hhbm5lbAorCSk7CisKK3ZvaWQKK0RPVDExRF9TY2FuQ29tcGxldGUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYKKwkpOworCitpbnQgSXNMZWdhbENoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCisJdTggY2hhbm5lbAorKTsKKworaW50IFRvTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKyk7CisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fSU5DX0RPVDExRF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5jCmluZGV4IDVkOGI3NTJmLi41NGJjZGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuYwpAQCAtMSwyNDYgKzEsMjQ2IEBACi0jaWZkZWYgRU5BQkxFX0RPVDExRA0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLwlGaWxlOg0KLS8vCQlEb3QxMWQuYw0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCUltcGxlbWVudCA4MDIuMTFkLiANCi0vLw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jaW5jbHVkZSAiZG90MTFkLmgiDQotDQotdm9pZA0KLURvdDExZF9Jbml0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQ0KLXsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGllZWUpOw0KLQ0KLQlwRG90MTFkSW5mby0+YkVuYWJsZWQgPSAwOw0KLQ0KLQlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfTk9ORTsNCi0JcERvdDExZEluZm8tPkNvdW50cnlJZUxlbiA9IDA7DQotCW1lbXNldChwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXAsIDAsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsgIA0KLQltZW1zZXQocERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdCwgMHhGRiwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOw0KLQlSRVNFVF9DSUVfV0FUQ0hET0coaWVlZSk7DQotDQotCXByaW50aygiRG90MTFkX0luaXQoKVxuIik7DQotfQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVJlc2V0IHRvIHRoZSBzdGF0ZSBhcyB3ZSBhcmUganVzdCBlbnRlcmluZyBhIHJlZ3VsYXRvcnkgZG9tYWluLg0KLS8vDQotdm9pZA0KLURvdDExZF9SZXNldChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkNCi17DQotCXUzMiBpOw0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oaWVlZSk7DQotDQotCS8vIENsZWFyIG9sZCBjaGFubmVsIG1hcA0KLQltZW1zZXQocERvdDExZEluZm8tPmNoYW5uZWxfbWFwLCAwLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7DQotCW1lbXNldChwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0LCAweEZGLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7DQotCS8vIFNldCBuZXcgY2hhbm5lbCBtYXANCi0JZm9yIChpPTE7IGk8PTExOyBpKyspIHsNCi0JCShwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXApW2ldID0gMTsNCi0JfQ0KLQlmb3IgKGk9MTI7IGk8PTE0OyBpKyspIHsNCi0JCShwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXApW2ldID0gMjsNCi0JfQ0KLQ0KLQlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfTk9ORTsNCi0JcERvdDExZEluZm8tPkNvdW50cnlJZUxlbiA9IDA7DQotCVJFU0VUX0NJRV9XQVRDSERPRyhpZWVlKTsNCi0NCi0JLy9wcmludGsoIkRvdDExZF9SZXNldCgpXG4iKTsNCi19DQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJVXBkYXRlIGNvdW50cnkgSUUgZnJvbSBCZWFjb24gb3IgUHJvYmUgUmVzb3Buc2UgDQotLy8JCWFuZCBjb25maWd1cmUgUEhZIGZvciBvcGVyYXRpb24gaW4gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLg0KLS8vDQotLy8JVE9ETzogDQotLy8JCUNvbmZpZ3VyZSBUeCBwb3dlci4NCi0vLw0KLS8vCUFzc3VtcHRpb246DQotLy8JCTEuIElTX0RPVDExRF9FTkFCTEUoKSBpcyBUUlVFLg0KLS8vCQkyLiBJbnB1dCBJRSBpcyBhbiB2YWxpZCBvbmUuDQotLy8NCi12b2lkDQotRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwNCi0JdTggKgkJcFRhZGRyLA0KLQl1MTYJQ291dHJ5SWVMZW4sDQotCXU4ICogcENvdXRyeUllCSANCi0JKQ0KLXsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7DQotCXU4IGksIGosIE51bVRyaXBsZXMsIE1heENobmxOdW07DQotCVBDSE5MX1RYUE9XRVJfVFJJUExFIHBUcmlwbGU7DQotDQotCWlmKChDb3V0cnlJZUxlbiAtIDMpJTMgIT0gMCkNCi0Jew0KLQkJcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IEludmFsaWQgY291bnRyeSBJRSwgc2tpcCBpdC4uLi4uLi4uMVxuIik7DQotCQlEb3QxMWRfUmVzZXQoZGV2KTsNCi0JCXJldHVybjsNCi0JfQ0KLQ0KLQltZW1zZXQocERvdDExZEluZm8tPmNoYW5uZWxfbWFwLCAwLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7DQotCW1lbXNldChwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0LCAweEZGLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7DQotCU1heENobmxOdW0gPSAwOw0KLQlOdW1UcmlwbGVzID0gKENvdXRyeUllTGVuIC0gMykgLyAzOyAvLyBza2lwIDMtYnl0ZSBjb3VudHJ5IHN0cmluZy4NCi0JcFRyaXBsZSA9IChQQ0hOTF9UWFBPV0VSX1RSSVBMRSkocENvdXRyeUllICsgMyk7DQotCWZvcihpID0gMDsgaSA8IE51bVRyaXBsZXM7IGkrKykNCi0Jew0KLQkJaWYoTWF4Q2hubE51bSA+PSBwVHJpcGxlLT5GaXJzdENobmwpDQotCQl7IC8vIEl0IGlzIG5vdCBpbiBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvcmRlciwgc28gc3RvcCBwcm9jZXNzaW5nLg0KLQkJCXByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBJbnZhbGlkIGNvdW50cnkgSUUsIHNraXAgaXQuLi4uLi4uLjFcbiIpOw0KLQkJCURvdDExZF9SZXNldChkZXYpOw0KLQkJCXJldHVybjsgDQotCQl9DQotCQlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCAocFRyaXBsZS0+Rmlyc3RDaG5sICsgcFRyaXBsZS0+TnVtQ2hubHMpKQ0KLQkJeyAvLyBJdCBpcyBub3QgYSB2YWxpZCBzZXQgb2YgY2hhbm5lbCBpZCwgc28gc3RvcCBwcm9jZXNzaW5nLg0KLQkJCXByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBJbnZhbGlkIGNvdW50cnkgSUUsIHNraXAgaXQuLi4uLi4uLjJcbiIpOw0KLQkJCURvdDExZF9SZXNldChkZXYpOw0KLQkJCXJldHVybjsgDQotCQl9DQotDQotCQlmb3IoaiA9IDAgOyBqIDwgcFRyaXBsZS0+TnVtQ2hubHM7IGorKykNCi0JCXsNCi0JCQlwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbcFRyaXBsZS0+Rmlyc3RDaG5sICsgal0gPSAxOw0KLQkJCXBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3RbcFRyaXBsZS0+Rmlyc3RDaG5sICsgal0gPSBwVHJpcGxlLT5NYXhUeFBvd2VySW5EYm07DQotCQkJTWF4Q2hubE51bSA9IHBUcmlwbGUtPkZpcnN0Q2hubCArIGo7DQotCQl9CQ0KLQ0KLQkJcFRyaXBsZSA9IChQQ0hOTF9UWFBPV0VSX1RSSVBMRSkoKHU4KilwVHJpcGxlICsgMyk7DQotCX0NCi0jaWYgMQ0KLQkvL3ByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBDaGFubmVsIExpc3Q6XG4iKTsNCi0JcHJpbnRrKCJDaGFubmVsIExpc3Q6Iik7DQotCWZvcihpPTE7IGk8PSBNQVhfQ0hBTk5FTF9OVU1CRVI7IGkrKykNCi0JCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtpXSA+IDApDQotCQkJcHJpbnRrKCIgJWQiLCBpKTsNCi0JcHJpbnRrKCJcbiIpOw0KLSNlbmRpZg0KLQ0KLQlVUERBVEVfQ0lFX1NSQyhkZXYsIHBUYWRkcik7DQotDQotCXBEb3QxMWRJbmZvLT5Db3VudHJ5SWVMZW4gPSBDb3V0cnlJZUxlbjsNCi0JbWVtY3B5KHBEb3QxMWRJbmZvLT5Db3VudHJ5SWVCdWYsIHBDb3V0cnlJZSxDb3V0cnlJZUxlbik7DQotCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9MRUFSTkVEOw0KLX0NCi0NCi12b2lkIGR1bXBfY2hubF9tYXAodTggKiBjaGFubmVsX21hcCkNCi17DQotCWludCBpOw0KLQlwcmludGsoIkNoYW5uZWwgTGlzdDoiKTsNCi0JZm9yKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQ0KLQkJaWYoY2hhbm5lbF9tYXBbaV0gPiAwKQ0KLQkJCXByaW50aygiICVkKCVkKSIsIGksIGNoYW5uZWxfbWFwW2ldKTsNCi0JcHJpbnRrKCJcbiIpOw0KLX0NCi0NCi11OA0KLURPVDExRF9HZXRNYXhUeFB3ckluRGJtKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCBDaGFubmVsDQotCSkNCi17DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOw0KLQl1OCBNYXhUeFB3ckluRGJtID0gMjU1Ow0KLQ0KLQlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCBDaGFubmVsKQ0KLQl7IA0KLQkJcHJpbnRrKCJET1QxMURfR2V0TWF4VHhQd3JJbkRibSgpOiBJbnZhbGlkIENoYW5uZWxcbiIpOw0KLQkJcmV0dXJuIE1heFR4UHdySW5EYm07IA0KLQl9DQotCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtDaGFubmVsXSkNCi0Jew0KLQkJTWF4VHhQd3JJbkRibSA9IHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3RbQ2hhbm5lbF07CQ0KLQl9DQotDQotCXJldHVybiBNYXhUeFB3ckluRGJtOw0KLX0NCi0NCi0NCi12b2lkDQotRE9UMTFEX1NjYW5Db21wbGV0ZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYNCi0JKQ0KLXsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7DQotDQotCXN3aXRjaChwRG90MTFkSW5mby0+U3RhdGUpDQotCXsNCi0JY2FzZSBET1QxMURfU1RBVEVfTEVBUk5FRDoNCi0JCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9ET05FOw0KLQkJYnJlYWs7DQotDQotCWNhc2UgRE9UMTFEX1NUQVRFX0RPTkU6DQotCQlpZiggR0VUX0NJRV9XQVRDSERPRyhkZXYpID09IDAgKQ0KLQkJeyAvLyBSZXNldCBjb3VudHJ5IElFIGlmIHByZXZpb3VzIG9uZSBpcyBnb25lLiANCi0JCQlEb3QxMWRfUmVzZXQoZGV2KTsgDQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBET1QxMURfU1RBVEVfTk9ORToNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLWludCBJc0xlZ2FsQ2hhbm5lbCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsDQotCXU4IGNoYW5uZWwNCi0pDQotew0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsNCi0NCi0JaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgY2hhbm5lbCkNCi0JeyANCi0JCXByaW50aygiSXNMZWdhbENoYW5uZWwoKTogSW52YWxpZCBDaGFubmVsXG4iKTsNCi0JCXJldHVybiAwOyANCi0JfQ0KLQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbY2hhbm5lbF0gPiAwKQ0KLQkJcmV0dXJuIDE7DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgVG9MZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKQ0KLXsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7DQotCXU4IGRlZmF1bHRfY2huID0gMDsNCi0JdTMyIGkgPSAwOw0KLQ0KLQlmb3IgKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQ0KLQl7DQotCQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbaV0gPiAwKQ0KLQkJew0KLQkJCWRlZmF1bHRfY2huID0gaTsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLQ0KLQlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCBjaGFubmVsKQ0KLQl7IA0KLQkJcHJpbnRrKCJJc0xlZ2FsQ2hhbm5lbCgpOiBJbnZhbGlkIENoYW5uZWxcbiIpOw0KLQkJcmV0dXJuIGRlZmF1bHRfY2huOyANCi0JfQ0KLQkNCi0JaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2NoYW5uZWxdID4gMCkNCi0JCXJldHVybiBjaGFubmVsOw0KLQkNCi0JcmV0dXJuIGRlZmF1bHRfY2huOw0KLX0NCi0NCi0jaWYgMA0KLUVYUE9SVF9TWU1CT0woRG90MTFkX0luaXQpOw0KLUVYUE9SVF9TWU1CT0woRG90MTFkX1Jlc2V0KTsNCi1FWFBPUlRfU1lNQk9MKERvdDExZF9VcGRhdGVDb3VudHJ5SWUpOw0KLUVYUE9SVF9TWU1CT0woRE9UMTFEX0dldE1heFR4UHdySW5EYm0pOw0KLUVYUE9SVF9TWU1CT0woRE9UMTFEX1NjYW5Db21wbGV0ZSk7DQotRVhQT1JUX1NZTUJPTChJc0xlZ2FsQ2hhbm5lbCk7DQotRVhQT1JUX1NZTUJPTChUb0xlZ2FsQ2hhbm5lbCk7DQotI2VuZGlmDQotI2VuZGlmDQorI2lmZGVmIEVOQUJMRV9ET1QxMUQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCUZpbGU6CisvLwkJRG90MTFkLmMKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlJbXBsZW1lbnQgODAyLjExZC4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpbmNsdWRlICJkb3QxMWQuaCIKKwordm9pZAorRG90MTFkX0luaXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGllZWUpOworCisJcERvdDExZEluZm8tPmJFbmFibGVkID0gMDsKKworCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9OT05FOworCXBEb3QxMWRJbmZvLT5Db3VudHJ5SWVMZW4gPSAwOworCW1lbXNldChwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXAsIDAsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsKKwltZW1zZXQocERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdCwgMHhGRiwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOworCVJFU0VUX0NJRV9XQVRDSERPRyhpZWVlKTsKKworCXByaW50aygiRG90MTFkX0luaXQoKVxuIik7Cit9CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlSZXNldCB0byB0aGUgc3RhdGUgYXMgd2UgYXJlIGp1c3QgZW50ZXJpbmcgYSByZWd1bGF0b3J5IGRvbWFpbi4KKy8vCit2b2lkCitEb3QxMWRfUmVzZXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit7CisJdTMyIGk7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGllZWUpOworCisJLy8gQ2xlYXIgb2xkIGNoYW5uZWwgbWFwCisJbWVtc2V0KHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcCwgMCwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOworCW1lbXNldChwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0LCAweEZGLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7CisJLy8gU2V0IG5ldyBjaGFubmVsIG1hcAorCWZvciAoaT0xOyBpPD0xMTsgaSsrKSB7CisJCShwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXApW2ldID0gMTsKKwl9CisJZm9yIChpPTEyOyBpPD0xNDsgaSsrKSB7CisJCShwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXApW2ldID0gMjsKKwl9CisKKwlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfTk9ORTsKKwlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gMDsKKwlSRVNFVF9DSUVfV0FUQ0hET0coaWVlZSk7CisKKwkvL3ByaW50aygiRG90MTFkX1Jlc2V0KClcbiIpOworfQorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJVXBkYXRlIGNvdW50cnkgSUUgZnJvbSBCZWFjb24gb3IgUHJvYmUgUmVzb3Buc2UKKy8vCQlhbmQgY29uZmlndXJlIFBIWSBmb3Igb3BlcmF0aW9uIGluIHRoZSByZWd1bGF0b3J5IGRvbWFpbi4KKy8vCisvLwlUT0RPOgorLy8JCUNvbmZpZ3VyZSBUeCBwb3dlci4KKy8vCisvLwlBc3N1bXB0aW9uOgorLy8JCTEuIElTX0RPVDExRF9FTkFCTEUoKSBpcyBUUlVFLgorLy8JCTIuIElucHV0IElFIGlzIGFuIHZhbGlkIG9uZS4KKy8vCit2b2lkCitEb3QxMWRfVXBkYXRlQ291bnRyeUllKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggKgkJcFRhZGRyLAorCXUxNglDb3V0cnlJZUxlbiwKKwl1OCAqIHBDb3V0cnlJZQorCSkKK3sKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsKKwl1OCBpLCBqLCBOdW1UcmlwbGVzLCBNYXhDaG5sTnVtOworCVBDSE5MX1RYUE9XRVJfVFJJUExFIHBUcmlwbGU7CisKKwlpZigoQ291dHJ5SWVMZW4gLSAzKSUzICE9IDApCisJeworCQlwcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogSW52YWxpZCBjb3VudHJ5IElFLCBza2lwIGl0Li4uLi4uLi4xXG4iKTsKKwkJRG90MTFkX1Jlc2V0KGRldik7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQocERvdDExZEluZm8tPmNoYW5uZWxfbWFwLCAwLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7CisJbWVtc2V0KHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3QsIDB4RkYsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsKKwlNYXhDaG5sTnVtID0gMDsKKwlOdW1UcmlwbGVzID0gKENvdXRyeUllTGVuIC0gMykgLyAzOyAvLyBza2lwIDMtYnl0ZSBjb3VudHJ5IHN0cmluZy4KKwlwVHJpcGxlID0gKFBDSE5MX1RYUE9XRVJfVFJJUExFKShwQ291dHJ5SWUgKyAzKTsKKwlmb3IoaSA9IDA7IGkgPCBOdW1UcmlwbGVzOyBpKyspCisJeworCQlpZihNYXhDaG5sTnVtID49IHBUcmlwbGUtPkZpcnN0Q2hubCkKKwkJeyAvLyBJdCBpcyBub3QgaW4gYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb3JkZXIsIHNvIHN0b3AgcHJvY2Vzc2luZy4KKwkJCXByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBJbnZhbGlkIGNvdW50cnkgSUUsIHNraXAgaXQuLi4uLi4uLjFcbiIpOworCQkJRG90MTFkX1Jlc2V0KGRldik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgKHBUcmlwbGUtPkZpcnN0Q2hubCArIHBUcmlwbGUtPk51bUNobmxzKSkKKwkJeyAvLyBJdCBpcyBub3QgYSB2YWxpZCBzZXQgb2YgY2hhbm5lbCBpZCwgc28gc3RvcCBwcm9jZXNzaW5nLgorCQkJcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IEludmFsaWQgY291bnRyeSBJRSwgc2tpcCBpdC4uLi4uLi4uMlxuIik7CisJCQlEb3QxMWRfUmVzZXQoZGV2KTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvcihqID0gMCA7IGogPCBwVHJpcGxlLT5OdW1DaG5sczsgaisrKQorCQl7CisJCQlwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbcFRyaXBsZS0+Rmlyc3RDaG5sICsgal0gPSAxOworCQkJcERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdFtwVHJpcGxlLT5GaXJzdENobmwgKyBqXSA9IHBUcmlwbGUtPk1heFR4UG93ZXJJbkRibTsKKwkJCU1heENobmxOdW0gPSBwVHJpcGxlLT5GaXJzdENobmwgKyBqOworCQl9CisKKwkJcFRyaXBsZSA9IChQQ0hOTF9UWFBPV0VSX1RSSVBMRSkoKHU4KilwVHJpcGxlICsgMyk7CisJfQorI2lmIDEKKwkvL3ByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBDaGFubmVsIExpc3Q6XG4iKTsKKwlwcmludGsoIkNoYW5uZWwgTGlzdDoiKTsKKwlmb3IoaT0xOyBpPD0gTUFYX0NIQU5ORUxfTlVNQkVSOyBpKyspCisJCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtpXSA+IDApCisJCQlwcmludGsoIiAlZCIsIGkpOworCXByaW50aygiXG4iKTsKKyNlbmRpZgorCisJVVBEQVRFX0NJRV9TUkMoZGV2LCBwVGFkZHIpOworCisJcERvdDExZEluZm8tPkNvdW50cnlJZUxlbiA9IENvdXRyeUllTGVuOworCW1lbWNweShwRG90MTFkSW5mby0+Q291bnRyeUllQnVmLCBwQ291dHJ5SWUsQ291dHJ5SWVMZW4pOworCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9MRUFSTkVEOworfQorCit2b2lkIGR1bXBfY2hubF9tYXAodTggKiBjaGFubmVsX21hcCkKK3sKKwlpbnQgaTsKKwlwcmludGsoIkNoYW5uZWwgTGlzdDoiKTsKKwlmb3IoaT0xOyBpPD0gTUFYX0NIQU5ORUxfTlVNQkVSOyBpKyspCisJCWlmKGNoYW5uZWxfbWFwW2ldID4gMCkKKwkJCXByaW50aygiICVkKCVkKSIsIGksIGNoYW5uZWxfbWFwW2ldKTsKKwlwcmludGsoIlxuIik7Cit9CisKK3U4CitET1QxMURfR2V0TWF4VHhQd3JJbkRibSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAorCXU4IENoYW5uZWwKKwkpCit7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7CisJdTggTWF4VHhQd3JJbkRibSA9IDI1NTsKKworCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IENoYW5uZWwpCisJeworCQlwcmludGsoIkRPVDExRF9HZXRNYXhUeFB3ckluRGJtKCk6IEludmFsaWQgQ2hhbm5lbFxuIik7CisJCXJldHVybiBNYXhUeFB3ckluRGJtOworCX0KKwlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbQ2hhbm5lbF0pCisJeworCQlNYXhUeFB3ckluRGJtID0gcERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdFtDaGFubmVsXTsKKwl9CisKKwlyZXR1cm4gTWF4VHhQd3JJbkRibTsKK30KKworCit2b2lkCitET1QxMURfU2NhbkNvbXBsZXRlKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2CisJKQoreworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOworCisJc3dpdGNoKHBEb3QxMWRJbmZvLT5TdGF0ZSkKKwl7CisJY2FzZSBET1QxMURfU1RBVEVfTEVBUk5FRDoKKwkJcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX0RPTkU7CisJCWJyZWFrOworCisJY2FzZSBET1QxMURfU1RBVEVfRE9ORToKKwkJaWYoIEdFVF9DSUVfV0FUQ0hET0coZGV2KSA9PSAwICkKKwkJeyAvLyBSZXNldCBjb3VudHJ5IElFIGlmIHByZXZpb3VzIG9uZSBpcyBnb25lLgorCQkJRG90MTFkX1Jlc2V0KGRldik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBET1QxMURfU1RBVEVfTk9ORToKKwkJYnJlYWs7CisJfQorfQorCitpbnQgSXNMZWdhbENoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCisJdTggY2hhbm5lbAorKQoreworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOworCisJaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgY2hhbm5lbCkKKwl7CisJCXByaW50aygiSXNMZWdhbENoYW5uZWwoKTogSW52YWxpZCBDaGFubmVsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtjaGFubmVsXSA+IDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgVG9MZWdhbENoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCisJdTggY2hhbm5lbAorKQoreworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOworCXU4IGRlZmF1bHRfY2huID0gMDsKKwl1MzIgaSA9IDA7CisKKwlmb3IgKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQorCXsKKwkJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2ldID4gMCkKKwkJeworCQkJZGVmYXVsdF9jaG4gPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCBjaGFubmVsKQorCXsKKwkJcHJpbnRrKCJJc0xlZ2FsQ2hhbm5lbCgpOiBJbnZhbGlkIENoYW5uZWxcbiIpOworCQlyZXR1cm4gZGVmYXVsdF9jaG47CisJfQorCisJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2NoYW5uZWxdID4gMCkKKwkJcmV0dXJuIGNoYW5uZWw7CisKKwlyZXR1cm4gZGVmYXVsdF9jaG47Cit9CisKKyNpZiAwCitFWFBPUlRfU1lNQk9MKERvdDExZF9Jbml0KTsKK0VYUE9SVF9TWU1CT0woRG90MTFkX1Jlc2V0KTsKK0VYUE9SVF9TWU1CT0woRG90MTFkX1VwZGF0ZUNvdW50cnlJZSk7CitFWFBPUlRfU1lNQk9MKERPVDExRF9HZXRNYXhUeFB3ckluRGJtKTsKK0VYUE9SVF9TWU1CT0woRE9UMTFEX1NjYW5Db21wbGV0ZSk7CitFWFBPUlRfU1lNQk9MKElzTGVnYWxDaGFubmVsKTsKK0VYUE9SVF9TWU1CT0woVG9MZWdhbENoYW5uZWwpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmgKaW5kZXggNjRiY2YxNS4uODI1NzZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmgKQEAgLTEsMTAyICsxLDEwMiBAQAotI2lmbmRlZiBfX0lOQ19ET1QxMURfSA0KLSNkZWZpbmUgX19JTkNfRE9UMTFEX0gNCi0NCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiDQotDQotLy8jZGVmaW5lIEVOQUJMRV9ET1QxMUQNCi0NCi0vLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4Mw0KLQ0KLXR5cGVkZWYgc3RydWN0IF9DSE5MX1RYUE9XRVJfVFJJUExFIHsNCi0JdTggRmlyc3RDaG5sOw0KLQl1OCAgTnVtQ2hubHM7DQotCXU4ICBNYXhUeFBvd2VySW5EYm07DQotfUNITkxfVFhQT1dFUl9UUklQTEUsICpQQ0hOTF9UWFBPV0VSX1RSSVBMRTsNCi0NCi10eXBlZGVmIGVudW0gX0RPVDExRF9TVEFURSB7DQotCURPVDExRF9TVEFURV9OT05FID0gMCwNCi0JRE9UMTFEX1NUQVRFX0xFQVJORUQsDQotCURPVDExRF9TVEFURV9ET05FLA0KLX1ET1QxMURfU1RBVEU7DQotDQotdHlwZWRlZiBzdHJ1Y3QgX1JUX0RPVDExRF9JTkZPIHsNCi0JLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7DQotDQotCWJvb2wgYkVuYWJsZWQ7IC8vIGRvdDExTXVsdGlEb21haW5DYXBhYmlsaXR5RW5hYmxlZA0KLQ0KLQl1MTYgQ291bnRyeUllTGVuOyAvLyA+IDAgaWYgQ291bnRyeUllQnVmW10gY29udGFpbnMgdmFsaWQgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50Lg0KLQl1OCAgQ291bnRyeUllQnVmW01BWF9JRV9MRU5dOw0KLQl1OCAgQ291bnRyeUllU3JjQWRkcls2XTsgLy8gU291cmNlIEFQIG9mIHRoZSBjb3VudHJ5IElFLg0KLQl1OCAgQ291bnRyeUllV2F0Y2hkb2c7IA0KLQ0KLQl1OCAgY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOyAgLy8hISFWYWx1ZSAwOiBJbnZhbGlkLCAxOiBWYWxpZCAoYWN0aXZlIHNjYW4pLCAyOiBWYWxpZCAocGFzc2l2ZSBzY2FuKQ0KLQkvL3U4ICBDaG5sTGlzdExlbjsgLy8gI0J5dGVzIHZhbGlkIGluIENobmxMaXN0W10uDQotCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOw0KLQl1OCAgTWF4VHhQd3JEYm1MaXN0W01BWF9DSEFOTkVMX05VTUJFUisxXTsNCi0NCi0JRE9UMTFEX1NUQVRFIFN0YXRlOw0KLX1SVF9ET1QxMURfSU5GTywgKlBSVF9ET1QxMURfSU5GTzsNCi0jZGVmaW5lIGVxTWFjQWRkcihhLGIpCQkoICgoYSlbMF09PShiKVswXSAmJiAoYSlbMV09PShiKVsxXSAmJiAoYSlbMl09PShiKVsyXSAmJiAoYSlbM109PShiKVszXSAmJiAoYSlbNF09PShiKVs0XSAmJiAoYSlbNV09PShiKVs1XSkgPyAxOjAgKQ0KLSNkZWZpbmUgY3BNYWNBZGRyKGRlcyxzcmMpCSAgICAgICgoZGVzKVswXT0oc3JjKVswXSwoZGVzKVsxXT0oc3JjKVsxXSwoZGVzKVsyXT0oc3JjKVsyXSwoZGVzKVszXT0oc3JjKVszXSwoZGVzKVs0XT0oc3JjKVs0XSwoZGVzKVs1XT0oc3JjKVs1XSkNCi0jZGVmaW5lIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KSAoKFBSVF9ET1QxMURfSU5GTykoKF9fcEllZWVEZXYpLT5wRG90MTFkSW5mbykpDQotDQotI2RlZmluZSBJU19ET1QxMURfRU5BQkxFKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+YkVuYWJsZWQNCi0jZGVmaW5lIElTX0NPVU5UUllfSUVfVkFMSUQoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuID4gMCkNCi0NCi0jZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKSANCi0jZGVmaW5lIFVQREFURV9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBjcE1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkNCi0NCi0jZGVmaW5lIElTX0NPVU5UUllfSUVfQ0hBTkdFRChfX3BJZWVlRGV2LCBfX0llKSBcDQotCSgoKF9fSWUpLkxlbmd0aCA9PSAwIHx8IChfX0llKS5MZW5ndGggIT0gR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4pID8gXA0KLQlGQUxTRSA6IFwNCi0JKCFtZW1jbXAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVCdWYsIChfX0llKS5PY3RldCwgKF9fSWUpLkxlbmd0aCkpKQ0KLQ0KLSNkZWZpbmUgQ0lFX1dBVENIRE9HX1RIIDENCi0jZGVmaW5lIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVXYXRjaGRvZw0KLSNkZWZpbmUgUkVTRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgPSAwIA0KLSNkZWZpbmUgVVBEQVRFX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSArK0dFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikNCi0NCi0jZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQ0KLQ0KLQ0KLXZvaWQNCi1Eb3QxMWRfSW5pdCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldg0KLQkpOw0KLQ0KLXZvaWQNCi1Eb3QxMWRfUmVzZXQoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYNCi0JKTsNCi0NCi12b2lkDQotRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwNCi0JdTggKgkJcFRhZGRyLA0KLQl1MTYJQ291dHJ5SWVMZW4sDQotCXU4ICogcENvdXRyeUllCSANCi0JKTsNCi0NCi11OA0KLURPVDExRF9HZXRNYXhUeFB3ckluRGJtKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCBDaGFubmVsDQotCSk7DQotDQotdm9pZA0KLURPVDExRF9TY2FuQ29tcGxldGUoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2DQotCSk7DQotDQotaW50IElzTGVnYWxDaGFubmVsKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwNCi0JdTggY2hhbm5lbA0KLSk7DQotDQotaW50IFRvTGVnYWxDaGFubmVsKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwNCi0JdTggY2hhbm5lbA0KLSk7DQotDQotdm9pZCBkdW1wX2NobmxfbWFwKHU4ICogY2hhbm5lbF9tYXApOw0KLSNlbmRpZiAvLyAjaWZuZGVmIF9fSU5DX0RPVDExRF9IDQorI2lmbmRlZiBfX0lOQ19ET1QxMURfSAorI2RlZmluZSBfX0lOQ19ET1QxMURfSAorCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKKy8vI2RlZmluZSBFTkFCTEVfRE9UMTFECisKKy8vI2RlZmluZSBET1QxMURfTUFYX0NITkxfTlVNIDgzCisKK3R5cGVkZWYgc3RydWN0IF9DSE5MX1RYUE9XRVJfVFJJUExFIHsKKwl1OCBGaXJzdENobmw7CisJdTggIE51bUNobmxzOworCXU4ICBNYXhUeFBvd2VySW5EYm07Cit9Q0hOTF9UWFBPV0VSX1RSSVBMRSwgKlBDSE5MX1RYUE9XRVJfVFJJUExFOworCit0eXBlZGVmIGVudW0gX0RPVDExRF9TVEFURSB7CisJRE9UMTFEX1NUQVRFX05PTkUgPSAwLAorCURPVDExRF9TVEFURV9MRUFSTkVELAorCURPVDExRF9TVEFURV9ET05FLAorfURPVDExRF9TVEFURTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUX0RPVDExRF9JTkZPIHsKKwkvL0RFQ0xBUkVfUlRfT0JKRUNUKFJUX0RPVDExRF9JTkZPKTsKKworCWJvb2wgYkVuYWJsZWQ7IC8vIGRvdDExTXVsdGlEb21haW5DYXBhYmlsaXR5RW5hYmxlZAorCisJdTE2IENvdW50cnlJZUxlbjsgLy8gPiAwIGlmIENvdW50cnlJZUJ1ZltdIGNvbnRhaW5zIHZhbGlkIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudC4KKwl1OCAgQ291bnRyeUllQnVmW01BWF9JRV9MRU5dOworCXU4ICBDb3VudHJ5SWVTcmNBZGRyWzZdOyAvLyBTb3VyY2UgQVAgb2YgdGhlIGNvdW50cnkgSUUuCisJdTggIENvdW50cnlJZVdhdGNoZG9nOworCisJdTggIGNoYW5uZWxfbWFwW01BWF9DSEFOTkVMX05VTUJFUisxXTsgIC8vISEhVmFsdWUgMDogSW52YWxpZCwgMTogVmFsaWQgKGFjdGl2ZSBzY2FuKSwgMjogVmFsaWQgKHBhc3NpdmUgc2NhbikKKwkvL3U4ICBDaG5sTGlzdExlbjsgLy8gI0J5dGVzIHZhbGlkIGluIENobmxMaXN0W10uCisJLy91OCAgQ2hubExpc3RbRE9UMTFEX01BWF9DSE5MX05VTV07CisJdTggIE1heFR4UHdyRGJtTGlzdFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07CisKKwlET1QxMURfU1RBVEUgU3RhdGU7Cit9UlRfRE9UMTFEX0lORk8sICpQUlRfRE9UMTFEX0lORk87CisjZGVmaW5lIGVxTWFjQWRkcihhLGIpCQkoICgoYSlbMF09PShiKVswXSAmJiAoYSlbMV09PShiKVsxXSAmJiAoYSlbMl09PShiKVsyXSAmJiAoYSlbM109PShiKVszXSAmJiAoYSlbNF09PShiKVs0XSAmJiAoYSlbNV09PShiKVs1XSkgPyAxOjAgKQorI2RlZmluZSBjcE1hY0FkZHIoZGVzLHNyYykJICAgICAgKChkZXMpWzBdPShzcmMpWzBdLChkZXMpWzFdPShzcmMpWzFdLChkZXMpWzJdPShzcmMpWzJdLChkZXMpWzNdPShzcmMpWzNdLChkZXMpWzRdPShzcmMpWzRdLChkZXMpWzVdPShzcmMpWzVdKQorI2RlZmluZSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldikgKChQUlRfRE9UMTFEX0lORk8pKChfX3BJZWVlRGV2KS0+cERvdDExZEluZm8pKQorCisjZGVmaW5lIElTX0RPVDExRF9FTkFCTEUoX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5iRW5hYmxlZAorI2RlZmluZSBJU19DT1VOVFJZX0lFX1ZBTElEKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbiA+IDApCisKKyNkZWZpbmUgSVNfRVFVQUxfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgZXFNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCisjZGVmaW5lIFVQREFURV9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBjcE1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkKKworI2RlZmluZSBJU19DT1VOVFJZX0lFX0NIQU5HRUQoX19wSWVlZURldiwgX19JZSkgXAorCSgoKF9fSWUpLkxlbmd0aCA9PSAwIHx8IChfX0llKS5MZW5ndGggIT0gR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4pID8gXAorCUZBTFNFIDogXAorCSghbWVtY21wKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllQnVmLCAoX19JZSkuT2N0ZXQsIChfX0llKS5MZW5ndGgpKSkKKworI2RlZmluZSBDSUVfV0FUQ0hET0dfVEggMQorI2RlZmluZSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllV2F0Y2hkb2cKKyNkZWZpbmUgUkVTRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgPSAwCisjZGVmaW5lIFVQREFURV9DSUVfV0FUQ0hET0coX19wSWVlZURldikgKytHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpCisKKyNkZWZpbmUgSVNfRE9UMTFEX1NUQVRFX0RPTkUoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+U3RhdGUgPT0gRE9UMTFEX1NUQVRFX0RPTkUpCisKKwordm9pZAorRG90MTFkX0luaXQoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldgorCSk7CisKK3ZvaWQKK0RvdDExZF9SZXNldCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2CisJKTsKKwordm9pZAorRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAorCXU4ICoJCXBUYWRkciwKKwl1MTYJQ291dHJ5SWVMZW4sCisJdTggKiBwQ291dHJ5SWUKKwkpOworCit1OAorRE9UMTFEX0dldE1heFR4UHdySW5EYm0oCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKKwl1OCBDaGFubmVsCisJKTsKKwordm9pZAorRE9UMTFEX1NjYW5Db21wbGV0ZSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldgorCSk7CisKK2ludCBJc0xlZ2FsQ2hhbm5lbCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKKwl1OCBjaGFubmVsCispOworCitpbnQgVG9MZWdhbENoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCisJdTggY2hhbm5lbAorKTsKKwordm9pZCBkdW1wX2NobmxfbWFwKHU4ICogY2hhbm5lbF9tYXApOworI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfRE9UMTFEX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggNmFhZDYxZS4uZDEyOTVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTg0MiwxNCArODQyLDE0IEBACiAKIAlpZiAobGVuPk1BWF9XUEFfSUVfTEVOIHx8IChsZW4gJiYgaWUgPT0gTlVMTCkpCiAJewotCQlwcmludGsoInJldHVybiBlcnJvciBvdXQsIGxlbjolZFxuIiwgbGVuKTsKKwkJcHJpbnRrKCJyZXR1cm4gZXJyb3Igb3V0LCBsZW46JXp1XG4iLCBsZW4pOwogCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChsZW4pCiAJewogCQlpZiAobGVuICE9IGllWzFdKzIpewotCQkJcHJpbnRrKCJsZW46JWQsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKKwkJCXByaW50aygibGVuOiV6dSwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwppbmRleCBmZjFmMjNmLi42ZWNkMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwpAQCAtMzE2MSw3ICszMTYxLDcgQEAKIAkJcmV0dXJuIDsKIAogCX0KLQkvL3doaWxlKCEgKnRhaWwgJiAoMTw8MzEpKXsKKwkvL3doaWxlKCEgKCp0YWlsICYgKDE8PDMxKSkpewogCQkqdGFpbD0gMDsgLy8gemVyb2VzIGhlYWRlcgogCiAJCSp0YWlsID0gKnRhaWx8ICgxPDwyOSkgOyAvL2Zpc3Qgc2VnbWVudCBvZiB0aGUgcGFja2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKaW5kZXggNzQyZGMxMS4uOTNiNWE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwpAQCAtMSwxNzI1ICsxLDE3MjUgQEAKLS8vI2luY2x1ZGUgInI4MTgwLmgiDQotI2luY2x1ZGUgInI4MTgwX2RtLmgiDQotI2luY2x1ZGUgInI4MTgwX2h3LmgiDQotI2luY2x1ZGUgInI4MTgwXzkzY3g2LmgiDQotLy97YnkgYW15IDA4MDMxMg0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gSGlnaCBQb3dlciBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4JDQotLy8NCi0vLytieSBhbXkgMDgwMzEyDQotI2RlZmluZSBSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRCAgICAgIDMwMA0KLQ0KLWJvb2wgQ2hlY2tIaWdoUG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7DQotDQotCWlmKCFwcml2LT5iUmVnSGlnaFBvd2VyTWVjaGFuaXNtKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0JCQ0KLQlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEX1NDQU5OSU5HKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIHRydWU7DQotfQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVVwZGF0ZSBUeCBwb3dlciBsZXZlbCBpZiBuZWNlc3NhcnkuDQotLy8JCVNlZSBhbHNvIERvUnhIaWdoUG93ZXIoKSBhbmQgU2V0VHhQb3dlckxldmVsODE4NSgpIGZvciByZWZlcmVuY2UuDQotLy8NCi0vLwlOb3RlOg0KLS8vCQlUaGUgcmVhc29uIHdoeSB3ZSB1ZHBhdGUgVHggcG93ZXIgbGV2ZWwgaGVyZSBpbnN0ZWFkIG9mIERvUnhIaWdoUG93ZXIoKSANCi0vLwkJaXMgdGhlIG51bWJlciBvZiBJTyB0byBjaGFuZ2UgVHggcG93ZXIgaXMgbXVjaCBtb3JlIHRoYW4gY2hhbmUgVFIgc3dpdGNoIA0KLS8vCQlhbmQgdGhleSBhcmUgcmVsYXRlZCB0byBPRkRNIGFuZCBNQUMgcmVnaXN0ZXJzLiANCi0vLwkJU28sIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIGl0IHNvIGZyZXF1ZW50bHkgaW4gcGVyLVJ4IHBhY2tldCBiYXNlLiANCi0vLw0KLXZvaWQNCi1Eb1R4SGlnaFBvd2VyKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdTE2CQkJSGlQd3JVcHBlclRoID0gMDsNCi0JdTE2CQkJSGlQd3JMb3dlclRoID0gMDsNCi0JdTgJCQlSU1NJSGlQd3JVcHBlclRoOw0KLQl1OAkJCVJTU0lIaVB3ckxvd2VyVGg7DQotCXU4CQkJdTFiVG1wOw0KLQljaGFyCQkJT2ZkbVR4UHdySWR4LCBDY2tUeFB3cklkeDsNCi0NCi0JLy9wcmludGsoIi0tLS0+IERvVHhIaWdoUG93ZXIoKVxuIik7DQotDQotCUhpUHdyVXBwZXJUaCA9IHByaXYtPlJlZ0hpUHdyVXBwZXJUaDsNCi0JSGlQd3JMb3dlclRoID0gcHJpdi0+UmVnSGlQd3JMb3dlclRoOwkJCQkJCQ0KLQkNCi0JSGlQd3JVcHBlclRoID0gSGlQd3JVcHBlclRoICogMTA7DQotCUhpUHdyTG93ZXJUaCA9IEhpUHdyTG93ZXJUaCAqIDEwOw0KLQlSU1NJSGlQd3JVcHBlclRoID0gcHJpdi0+UmVnUlNTSUhpUHdyVXBwZXJUaDsNCi0JUlNTSUhpUHdyTG93ZXJUaCA9IHByaXYtPlJlZ1JTU0lIaVB3ckxvd2VyVGg7DQotDQotCS8vbHptIGFkZCAwODA4MjYNCi0JT2ZkbVR4UHdySWR4ICA9IHByaXYtPmNodHhwd3Jfb2ZkbVtwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsgDQotCUNja1R4UHdySWR4ICA9IHByaXYtPmNodHhwd3JbcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbF07IA0KLQ0KLQkvLwlwcmludGsoIkRvVHhIaWdoUG93ZXIoKSAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgQ3VyQ0NLUlNTSSA9ICVkICwgYkN1ckNDS1BrdD0gJWQgXG4iLCBwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MsIHByaXYtPkN1ckNDS1JTU0ksIHByaXYtPmJDdXJDQ0tQa3QgKTsNCi0JDQotCWlmKChwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MgPiBIaVB3clVwcGVyVGgpIHx8DQotCQkocHJpdi0+YkN1ckNDS1BrdCAmJiAocHJpdi0+Q3VyQ0NLUlNTSSA+IFJTU0lIaVB3clVwcGVyVGgpKSkNCi0Jew0KLQkJLy8gU3RldmVubCBzdWdnZXN0ZWQgdGhhdCBkZWdyYWRlIDhkYm0gaW4gaGlnaCBwb3dlciBzYXRlLiAyMDA3LTEyLTA0IElzYWlhaCANCi0JCQ0KLQkvLwlwcmludGsoIj09PT09PkRvVHhIaWdoUG93ZXIoKSAtIEhpZ2ggUG93ZXIgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsICBIaVB3clVwcGVyVGggPSAlZCBcbiIsIHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUywgSGlQd3JVcHBlclRoICk7DQotCQlwcml2LT5iVG9VcGRhdGVUeFB3ciA9IHRydWU7DQotCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOw0KLQ0KLQkJLy8gSWYgaXQgbmV2ZXIgZW50ZXIgSGlnaCBQb3dlci4NCi0JCWlmKCBDY2tUeFB3cklkeCA9PSB1MWJUbXApDQotCQl7DQotCQl1MWJUbXAgPSAodTFiVG1wID4gMTYpID8gKHUxYlRtcCAtMTYpOiAwOyAgLy8gOGRibQ0KLQkJd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7DQotDQotCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsNCi0JCXUxYlRtcCA9ICh1MWJUbXAgPiAxNikgPyAodTFiVG1wIC0xNik6IDA7ICAvLyA4ZGJtDQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYlRtcCk7DQotCQl9DQotCQkNCi0JfQ0KLQllbHNlIGlmKChwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MgPCBIaVB3ckxvd2VyVGgpICYmDQotCQkoIXByaXYtPmJDdXJDQ0tQa3QgfHwgcHJpdi0+Q3VyQ0NLUlNTSSA8IFJTU0lIaVB3ckxvd2VyVGgpKQ0KLQl7DQotCS8vCSBwcmludGsoIkRvVHhIaWdoUG93ZXIoKSAtIGxvd2VyIFBvd2VyIC0gVW5kZWNvcmF0ZWRTbW9vdGhlZFNTOiVkLCAgSGlQd3JVcHBlclRoID0gJWQgXG4iLCBwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MsIEhpUHdyTG93ZXJUaCApOw0KLQkJaWYocHJpdi0+YlRvVXBkYXRlVHhQd3IpDQotCQl7DQotCQkJcHJpdi0+YlRvVXBkYXRlVHhQd3IgPSBmYWxzZTsNCi0JCQkvL1NEMyByZXF1aXJlZC4NCi0JCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOwkJCQ0KLQkJCWlmKHUxYlRtcCA8IENja1R4UHdySWR4KQ0KLQkJCXsNCi0JCQkvL3UxYlRtcCA9ICgodTFiVG1wKzE2KSA+IDM1KSA/IDM1OiAodTFiVG1wKzE2KTsgIC8vIDhkYm0NCi0JCQkvL3dyaXRlX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDLCB1MWJUbXApOw0KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDLCBDY2tUeFB3cklkeCk7DQotCQkJfQ0KLQ0KLQkJCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOw0KLQkJCWlmKHUxYlRtcCA8IE9mZG1UeFB3cklkeCkNCi0JCQl7DQotCQkJLy91MWJUbXAgPSAoKHUxYlRtcCsxNikgPiAzNSkgPyAzNTogKHUxYlRtcCsxNik7ICAvLyA4ZGJtDQotCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYlRtcCk7DQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCBPZmRtVHhQd3JJZHgpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQkvL3ByaW50aygiPC0tLS0gRG9UeEhpZ2hQb3dlcigpXG4iKTsNCi19DQotDQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJQ2FsbGJhY2sgZnVuY3Rpb24gb2YgVXBkYXRlVHhQb3dlcldvcmtJdGVtLg0KLS8vCQlCZWNhdXNlIG9mIHNvbWUgZXZlbnQgaGFwcGVuZCwgZS5nLiBDQ1ggVFBDLCBIaWdoIFBvd2VyIE1lY2hhbmlzbSwgDQotLy8JCVdlIHVwZGF0ZSBUeCBwb3dlciBvZiBjdXJyZW50IGNoYW5uZWwgYWdhaW4uIA0KLS8vDQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCi17DQotLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsNCi0vLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7DQotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7DQotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSx0eF9wd193cSk7DQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2Ow0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3R4X3B3X3dxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQotew0KLQkvLyBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotI2VuZGlmDQotDQotLy8JcHJpbnRrKCItLS0tPiBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsNCi0JDQotCURvVHhIaWdoUG93ZXIoZGV2KTsJDQotCQ0KLS8vCXByaW50aygiPC0tLS0gVXBkYXRlVHhQb3dlcldvcmtJdGVtQ2FsbGJhY2soKVxuIik7DQotfQ0KLQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gRElHIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgkNCi0vLw0KLWJvb2wNCi1DaGVja0RpZygNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldg0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOw0KLQ0KLQlpZighcHJpdi0+YkRpZ01lY2hhbmlzbSkNCi0JCXJldHVybiBmYWxzZTsNCi0NCi0JaWYoaWVlZS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkNCi0JCXJldHVybiBmYWxzZTsNCi0NCi0JLy9pZihwcml2LT5DdXJyZW50T3BlcmFSYXRlIDwgMzYpIC8vIFNjaGVkdWxlIERpZyB1bmRlciBhbGwgT0ZETSByYXRlcy4gQnkgQnJ1Y2UsIDIwMDctMDYtMDEuDQotCWlmKChwcml2LT5pZWVlODAyMTEtPnJhdGUvNSkgPCAzNikgLy8gU2NoZWR1bGUgRGlnIHVuZGVyIGFsbCBPRkRNIHJhdGVzLiBCeSBCcnVjZSwgMjAwNy0wNi0wMS4NCi0JCXJldHVybiBmYWxzZTsNCi0JcmV0dXJuIHRydWU7DQotfQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCUltcGxlbWVudGF0aW9uIG9mIERJRyBmb3IgWmVicmEgYW5kIFplYnJhMi4JDQotLy8NCi12b2lkDQotRElHX1plYnJhKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdTE2CQkJQ0NLRmFsc2VBbGFybSwgT0ZETUZhbHNlQWxhcm07DQotCXUxNgkJCU9mZG1GQTEsIE9mZG1GQTI7DQotCWludAkJCUluaXRpYWxHYWluU3RlcCA9IDc7IC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0YWdlcy4NCi0JaW50CQkJTG93ZXN0R2FpblN0YWdlID0gNDsgLy8gVGhlIGNhcGFibGUgbG93ZXN0IHN0YWdlIG9mIHBlcmZvcm1pbmcgZGlnIHdvcmtpdGVtLg0KLQl1MzIgCQkJQXdha2VQZXJpb2RJbjJTZWM9MDsNCi0NCi0JLy9wcmludGsoIi0tLS0tLS0tLT4gRElHX1plYnJhKClcbiIpOw0KLQ0KLQlDQ0tGYWxzZUFsYXJtID0gKHUxNikocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlICYgMHgwMDAwZmZmZik7DQotCU9GRE1GYWxzZUFsYXJtID0gKHUxNikoKHByaXYtPkZhbHNlQWxhcm1SZWdWYWx1ZSA+PiAxNikgJiAweDAwMDBmZmZmKTsNCi0JT2ZkbUZBMSA9ICAweDE1Ow0KLQlPZmRtRkEyID0gKCh1MTYpKHByaXYtPlJlZ0RpZ09mZG1GYVVwVGgpKSA8PCA4Ow0KLQ0KLS8vCXByaW50aygiRElHKioqKioqKioqKkNDSyBGYWxzZSBBbGFybTogJSNYIFxuIixDQ0tGYWxzZUFsYXJtKTsNCi0vLwlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1ggXG4iLE9GRE1GYWxzZUFsYXJtKTsNCi0NCi0gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0ZXBzIGlzIGRpZmZlcmVudCwgYnkgQnJ1Y2UsIDIwMDctMDQtMTMuDQotCWlmIChwcml2LT5Jbml0aWFsR2FpbiA9PSAwICkgLy9hdXRvRElHDQotCXsgLy8gQWR2aXNlZCBmcm9tIFNEMyBEWg0KLQkJcHJpdi0+SW5pdGlhbEdhaW4gPSA0OyAvLyBJbiA4N0IsIG03NGRCbSBtZWFucyBTdGF0ZSA0IChtODJkQm0pDQotCX0NCi0JLy9pZihwSGFsRGF0YS0+VmVyc2lvbklEICE9IFZFUlNJT05fODE4N0JfQikNCi0JeyAvLyBBZHZpc2VkIGZyb20gU0QzIERaDQotCQlPZmRtRkExID0gIDB4MjA7DQotCX0NCi0JDQotI2lmIDEgLy9sem0gcmVzZXJ2ZWQgMDgwODI2DQotCUF3YWtlUGVyaW9kSW4yU2VjID0gKDIwMDAtcHJpdiAtPkRvemVQZXJpb2RJblBhc3QyU2VjKTsNCi0JLy9wcmludGsoIiYmJiBEb3plUGVyaW9kPSVkIEF3YWtlUGVyaW9kPSVkXG4iLCBwcml2LT5Eb3plUGVyaW9kSW5QYXN0MlNlYywgQXdha2VQZXJpb2RJbjJTZWMpOw0KLQlwcml2IC0+RG96ZVBlcmlvZEluUGFzdDJTZWM9MDsNCi0JDQotCWlmKEF3YWtlUGVyaW9kSW4yU2VjKQ0KLQl7CQ0KLQkJLy9SVF9UUkFDRShDT01QX0RJRywgREJHX1RSQUNFLCAoIkRJRzogQXdha2VQZXJpb2RJbjJTZWMoJWQpIC0gRkFUaCgweCVYICwgMHglWCkgLT4iLEF3YWtlUGVyaW9kSW4yU2VjLCBPZmRtRkExLCBPZmRtRkEyKSk7DQotCQkvLyBhZGp1ZXN0IERJRyB0aHJlc2hvbGQuDQotCQlPZmRtRkExID0gICh1MTYpKChPZmRtRkExKkF3YWtlUGVyaW9kSW4yU2VjKSAgLyAyMDAwKSA7ICAJDQotCQlPZmRtRkEyID0gICh1MTYpKChPZmRtRkEyKkF3YWtlUGVyaW9kSW4yU2VjKSAgLyAyMDAwKSA7DQotCQkvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfVFJBQ0UsICgiKCAweCVYICwgMHglWClcbiIsIE9mZG1GQTEsIE9mZG1GQTIpKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCTsvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfV0FSTklORywgKCJFUlJPUiEhICBBd2FrZVBlcmlvZEluMlNlYyBzaG91bGQgbm90IGJlIFpFUk8hIVxuIikpOw0KLQl9DQotI2VuZGlmDQotDQotCUluaXRpYWxHYWluU3RlcCA9IDg7DQotCUxvd2VzdEdhaW5TdGFnZSA9IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlOyAvLyBMb3dlc3QgZ2FpbiBzdGFnZS4NCi0NCi0JaWYgKE9GRE1GYWxzZUFsYXJtID4gT2ZkbUZBMSkNCi0Jew0KLQkJaWYgKE9GRE1GYWxzZUFsYXJtID4gT2ZkbUZBMikNCi0JCXsNCi0JCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlKys7DQotCQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUgPjEpDQotCQkJew0KLQkJCQkvL3NlcmlvdXMgT0ZETSAgRmFsc2UgQWxhcm0sIG5lZWQgZmFsbGJhY2sNCi0JCQkJaWYgKHByaXYtPkluaXRpYWxHYWluIDwgSW5pdGlhbEdhaW5TdGVwKQ0KLQkJCQl7DQotCQkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47DQotDQotCQkJCQlwcml2LT5Jbml0aWFsR2FpbiA9IChwcml2LT5Jbml0aWFsR2FpbiArIDEpOw0KLS8vCQkJCQlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1gsICBPZmRtRkExOiAlI1gsIE9mZG1GQTI6ICUjWFxuIiwgT0ZETUZhbHNlQWxhcm0sIE9mZG1GQTEsIE9mZG1GQTIpOw0KLS8vCQkJCQlwcmludGsoIkRJRysrKysrKysgZmFsbGJhY2sgT0ZETTolZCBcbiIsIHByaXYtPkluaXRpYWxHYWluKTsNCi0JCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7IA0KLQkJCQl9DQotCQkJCXByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUgPSAwOw0KLQkJCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUpDQotCQkJCXByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUtLTsNCi0JCX0NCi0JCXByaXYtPkRJR19OdW1iZXJVcGdyYWRlVm90ZT0wOwkJDQotCX0NCi0JZWxzZQkNCi0Jew0KLQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUpDQotCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZS0tOw0KLQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlKys7DQotDQotCQlpZiAocHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPjkpDQotCQl7DQotCQkJaWYgKHByaXYtPkluaXRpYWxHYWluID4gTG93ZXN0R2FpblN0YWdlKSAvLyBJbiA4N0IsIG03OGRCbSBtZWFucyBTdGF0ZSA0IChtODY0ZEJtKQ0KLQkJCXsNCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOw0KLQ0KLQkJCQlwcml2LT5Jbml0aWFsR2FpbiA9IChwcml2LT5Jbml0aWFsR2FpbiAtIDEpOw0KLS8vCQkJCXByaW50aygiRElHKioqKioqKioqKk9GRE0gRmFsc2UgQWxhcm06ICUjWCwgIE9mZG1GQTE6ICUjWCwgT2ZkbUZBMjogJSNYXG4iLCBPRkRNRmFsc2VBbGFybSwgT2ZkbUZBMSwgT2ZkbUZBMik7DQotLy8JCQkJcHJpbnRrKCJESUctLS0tLS0tLS0gVXBncmFkZSBPRkRNOiVkIFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOw0KLQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOyANCi0JCQl9DQotCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7DQotCQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7DQotCQl9DQotCX0NCi0NCi0vLwlwcmludGsoIkRJRysrKysrKysgT0ZETTolZFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOwkNCi0JLy9wcmludGsoIjwtLS0tLS0tLS0gRElHX1plYnJhKClcbiIpOw0KLX0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlEaXNwYXRjaCBESUcgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIFJGLiAJDQotLy8NCi12b2lkDQotRHluYW1pY0luaXRHYWluKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0NCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApDQotCXsNCi0JCWNhc2UgUkZfWkVCUkEyOiAgLy8gW0FubmllV29ya2Fyb3VuZF0gRm9yIFplYnJhMiwgMjAwNS0wOC0wMS4NCi0JCWNhc2UgUkZfWkVCUkE0Og0KLQkJCURJR19aZWJyYSggZGV2ICk7DQotCQkJYnJlYWs7DQotCQkNCi0JCWRlZmF1bHQ6DQotCQkJcHJpbnRrKCJEeW5hbWljSW5pdEdhaW4oKTogdW5rbm93biBSRkNoaXBJRCglZCkgISEhXG4iLCBwcml2LT5yZl9jaGlwKTsNCi0JCQlicmVhazsNCi0JfQ0KLX0NCi0NCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQ0KLXZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCi17DQotLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsNCi0vLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7DQotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7DQotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19kaWdfd3EpOw0KLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF9od19kaWdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCQ0KLSNlbmRpZg0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotDQotCS8vIFJlYWQgQ0NLIGFuZCBPRkRNIEZhbHNlIEFsYXJtLg0KLQlwcml2LT5GYWxzZUFsYXJtUmVnVmFsdWUgPSByZWFkX25pY19kd29yZChkZXYsIENDS19GQUxTRV9BTEFSTSk7DQotCQ0KLQ0KLQkvLyBBZGp1c3QgSW5pdGlhbCBHYWluIGR5bmFtaWNhbGx5Lg0KLQlEeW5hbWljSW5pdEdhaW4oZGV2KTsNCi0JDQotfQ0KLQ0KLWludA0KLUluY2x1ZGVkSW5TdXBwb3J0ZWRSYXRlcygNCi0gICAgICAgIHN0cnVjdCByODE4MF9wcml2ICAgICAgICpwcml2LA0KLSAgICAgICAgdTggICAgICAgICAgICAgIFR4UmF0ZSAgKQ0KLXsNCi0gICAgdTggcmF0ZV9sZW47DQotICAgICAgICB1OCByYXRlX2V4X2xlbjsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIFJhdGVNYXNrID0gMHg3RjsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIGlkeDsNCi0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIEZvdW5kID0gMDsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIE5haXZlVHhSYXRlID0gVHhSYXRlJlJhdGVNYXNrOw0KLQ0KLSAgICByYXRlX2xlbiA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2xlbjsNCi0gICAgICAgIHJhdGVfZXhfbGVuID0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfZXhfbGVuOw0KLSAgICAgICAgZm9yKCBpZHg9MDsgaWR4PCByYXRlX2xlbjsgaWR4KysgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgICAgICBpZiggKHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzW2lkeF0gJiBSYXRlTWFzaykgPT0gTmFpdmVUeFJhdGUgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRm91bmQgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfcmF0ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBmb3IoIGlkeD0wOyBpZHg8IHJhdGVfZXhfbGVuOyBpZHgrKyApDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfZXhbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3VuZCA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRm91bmQ7DQotICAgICAgICBmb3VuZF9yYXRlOg0KLSAgICAgICAgcmV0dXJuIEZvdW5kOw0KLX0NCi0NCi0vLw0KLS8vICAgICAgRGVzY3JpcHRpb246DQotLy8gICAgICAgICAgICAgIEdldCB0aGUgVHggcmF0ZSBvbmUgZGVncmVlIHVwIGZvcm0gdGhlIGlucHV0IHJhdGUgaW4gdGhlIHN1cHBvcnRlZCByYXRlcy4NCi0vLyAgICAgICAgICAgICAgUmV0dXJuIHRoZSB1cGdyYWRlIHJhdGUgaWYgaXQgaXMgc3VjY2Vzc2VkLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBpbnB1dCByYXRlLg0KLS8vICAgICAgQnkgQnJ1Y2UsIDIwMDctMDYtMDUuDQotLy8gDQotdTgNCi1HZXRVcGdyYWRlVHhSYXRlKA0KLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZQ0KLSAgICAgICAgKQ0KLXsNCi0gICAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIFVwUmF0ZTsNCi0NCi0gICAgICAgIC8vIFVwZ3JhZGUgMSBkZWdyZWUuDQotICAgICAgICBzd2l0Y2gocmF0ZSkNCi0gICAgICAgIHsNCi0gICAgICAgIGNhc2UgMTA4OiAvLyBVcCB0byA1NE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDEwODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDk2OiAvLyBVcCB0byA1NE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDEwODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDcyOiAvLyBVcCB0byA0OE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDk2Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgNDg6IC8vIFVwIHRvIDM2TWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gNzI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAzNjogLy8gVXAgdG8gMjRNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSA0ODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDIyOiAvLyBVcCB0byAxOE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDM2Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMTE6IC8vIFVwIHRvIDExTWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gMjI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA0OiAvLyBVcCB0byA1LjVNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSAxMTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDI6IC8vIFVwIHRvIDJNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSA0Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHByaW50aygiR2V0VXBncmFkZVR4UmF0ZSgpOiBJbnB1dCBUeCBSYXRlKCVkKSBpcyB1bmRlZmluZWQhXG4iLCByYXRlKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7DQotICAgICAgICB9DQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmF0ZSBpcyB2YWxpZC4NCi0gICAgICAgIGlmKEluY2x1ZGVkSW5TdXBwb3J0ZWRSYXRlcyhwcml2LCBVcFJhdGUpKQ0KLSAgICAgICAgew0KLS8vICAgICAgICAgICAgICBwcmludGsoIkdldFVwZ3JhZGVUeFJhdGUoKTogR2V0VXBncmFkZSBUeCByYXRlKCVkKSBmcm9tICVkICFcbiIsIFVwUmF0ZSwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiBVcFJhdGU7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBVcFJhdGUpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmF0ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiByYXRlOw0KLX0NCi0vLw0KLS8vICAgICAgRGVzY3JpcHRpb246DQotLy8gICAgICAgICAgICAgIEdldCB0aGUgVHggcmF0ZSBvbmUgZGVncmVlIGRvd24gZm9ybSB0aGUgaW5wdXQgcmF0ZSBpbiB0aGUgc3VwcG9ydGVkIHJhdGVzLg0KLS8vICAgICAgICAgICAgICBSZXR1cm4gdGhlIGRlZ3JhZGUgcmF0ZSBpZiBpdCBpcyBzdWNjZXNzZWQsIG90aGVyd2lzZSByZXR1cm4gdGhlIGlucHV0IHJhdGUuDQotLy8gICAgICBCeSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0vLyANCi11OA0KLUdldERlZ3JhZGVUeFJhdGUoDQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KLSAgICAgICAgdTggICAgICAgICByYXRlDQotICAgICAgICApDQotew0KLSAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgRG93blJhdGU7DQotDQotICAgICAgICAvLyBVcGdyYWRlIDEgZGVncmVlLg0KLSAgICAgICAgc3dpdGNoKHJhdGUpDQotICAgICAgICB7DQotICAgICAgICBjYXNlIDEwODogLy8gRG93biB0byA0OE1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gOTY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA5NjogLy8gRG93biB0byAzNk1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gNzI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA3MjogLy8gRG93biB0byAyNE1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gNDg7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA0ODogLy8gRG93biB0byAxOE1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMzY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAzNjogLy8gRG93biB0byAxMU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAyMjogLy8gRG93biB0byA1LjVNYnBzLg0KLSAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDExOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMTE6IC8vIERvd24gdG8gMk1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gNDsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDQ6IC8vIERvd24gdG8gMU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDI6IC8vIERvd24gdG8gMU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgICAgICBwcmludGsoIkdldERlZ3JhZGVUeFJhdGUoKTogSW5wdXQgVHggUmF0ZSglZCkgaXMgdW5kZWZpbmVkIVxuIiwgcmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiByYXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJhdGUgaXMgdmFsaWQuDQotICAgICAgICBpZihJbmNsdWRlZEluU3VwcG9ydGVkUmF0ZXMocHJpdiwgRG93blJhdGUpKQ0KLSAgICAgICAgew0KLS8vICAgICAgICAgICAgICBwcmludGsoIkdldERlZ3JhZGVUeFJhdGUoKTogR2V0RGVncmFkZSBUeCByYXRlKCVkKSBmcm9tICVkIVxuIiwgRG93blJhdGUsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gRG93blJhdGU7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXREZWdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBEb3duUmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiByYXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJhdGU7DQotfQ0KLS8vDQotLy8gICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBkYXRhIHJhdGUgaXMgDQotLy8gICAgICBDQ0sgcmF0ZS4NCi0vLyAgICAgIDIwMDUuMDEuMjUsIGJ5IHJjbmprby4NCi0vLw0KLWJvb2wNCi1NZ250SXNDY2tSYXRlKA0KLSAgICAgICAgdTE2ICAgICByYXRlDQotICAgICAgICApDQotew0KLSAgICAgICAgYm9vbCBiUmV0dXJuID0gZmFsc2U7DQotDQotICAgICAgICBpZigocmF0ZSA8PSAyMikgJiYgKHJhdGUgIT0gMTIpICYmIChyYXRlICE9IDE4KSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAgICAgYlJldHVybiA9IHRydWU7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4gYlJldHVybjsNCi19DQotI2lmZGVmIENPTkZJR19SVEw4MThYX1MNCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlUeCBQb3dlciB0cmFja2luZyBtZWNoYW5pc20gcm91dGluZSBvbiA4N1NFLg0KLS8vIAlDcmVhdGVkIGJ5IFJvZ2VyLCAyMDA3LjEyLjExLg0KLS8vDQotdm9pZA0KLVR4UHdyVHJhY2tpbmc4N1NFKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotKQ0KLXsJCQ0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotCXU4CXRtcHUxQnl0ZSwgQ3VycmVudFRoZXJtYWwsIElkeDsJDQotCWNoYXIJQ2NrVHhQd3JJZHgsIE9mZG1UeFB3cklkeDsJDQotCS8vdTMyCXU0YlJmUmVnOw0KLQkNCi0JdG1wdTFCeXRlID0gcmVhZF9uaWNfYnl0ZShkZXYsIEVOX0xQRl9DQUwpOw0KLQlDdXJyZW50VGhlcm1hbCA9ICh0bXB1MUJ5dGUgJiAweGYwKT4+NDsgLy9bIDc6NF06IHRoZXJtYWwgbWV0ZXIgaW5kaWNhdGlvbi4NCi0JQ3VycmVudFRoZXJtYWwgPSAoQ3VycmVudFRoZXJtYWw+MHgwYyk/IDB4MGM6Q3VycmVudFRoZXJtYWw7Ly9sem0gYWRkIDA4MDgyNg0KLQ0KLQkvL3ByaW50aygiVHhQd3JUcmFja2luZzg3U0UoKTogQ3VycmVudFRoZXJtYWwoJWQpXG4iLCBDdXJyZW50VGhlcm1hbCk7DQotCQ0KLQlpZiggQ3VycmVudFRoZXJtYWwgIT0gcHJpdi0+VGhlcm1hbE1ldGVyKQ0KLQl7CQ0KLS8vCQlwcmludGsoIlR4UHdyVHJhY2tpbmc4N1NFKCk6IFRoZXJtYWwgbWV0ZXIgY2hhbmdlZCEhIVxuIik7DQotDQotCQkvLyBVcGRhdGUgVHggUG93ZXIgbGV2ZWwgb24gZWFjaCBjaGFubmVsLg0KLQkJZm9yKElkeCA9IDE7IElkeDwxNTsgSWR4KyspDQotCQl7CQkJDQotCQkJQ2NrVHhQd3JJZHggPSBwcml2LT5jaHR4cHdyW0lkeF07DQotCQkJT2ZkbVR4UHdySWR4ID0gcHJpdi0+Y2h0eHB3cl9vZmRtW0lkeF07CQkJDQotCQkJDQotCQkJaWYoIEN1cnJlbnRUaGVybWFsID4gcHJpdi0+VGhlcm1hbE1ldGVyICkNCi0JCQl7IC8vIGhpZ2hlciB0aGVybWFsIG1ldGVyLgkJDQotCQkJCUNja1R4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsNCi0JCQkJT2ZkbVR4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsNCi0JCQkNCi0JCQkJaWYoQ2NrVHhQd3JJZHggPjM1KQ0KLQkJCQkJQ2NrVHhQd3JJZHggPSAzNTsgLy8gRm9yY2UgVHhQb3dlciB0byBtYXhpbWFsIGluZGV4Lg0KLQkJCQlpZihPZmRtVHhQd3JJZHggPjM1KQ0KLQkJCQkJT2ZkbVR4UHdySWR4ID0gMzU7CQkJCQ0KLQkJCX0NCi0JCQllbHNlDQotCQkJeyAvLyBsb3dlciB0aGVybWFsIG1ldGVyLgkJCQkNCi0JCQkJQ2NrVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOw0KLQkJCQlPZmRtVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOw0KLQ0KLQkJCQlpZihDY2tUeFB3cklkeCA8MCkNCi0JCQkJCUNja1R4UHdySWR4ID0gMDsJCQ0KLQkJCQlpZihPZmRtVHhQd3JJZHggPDApDQotCQkJCQlPZmRtVHhQd3JJZHggPSAwOwkJCQkNCi0JCQl9CQkJCQkNCi0JCQkNCi0JCQkvLyBVcGRhdGUgVHhQb3dlciBsZXZlbCBvbiBDQ0sgYW5kIE9GRE0gcmVzcC4NCi0JCQlwcml2LT5jaHR4cHdyW0lkeF0gPSBDY2tUeFB3cklkeDsNCi0JCQlwcml2LT5jaHR4cHdyX29mZG1bSWR4XSA9IE9mZG1UeFB3cklkeDsJCQkJDQotCQl9CQ0KLQ0KLQkJLy8gVXBkYXRlIFR4UG93ZXIgbGV2ZWwgaW1tZWRpYXRlbHkuDQotCQlydGw4MjI1ejJfU2V0VFhQb3dlckxldmVsKGRldiwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7DQotCX0JDQotCXByaXYtPlRoZXJtYWxNZXRlciA9IEN1cnJlbnRUaGVybWFsOwkJCQkJDQotfQ0KLXZvaWQNCi1TdGFSYXRlQWRhcHRpdmU4N1NFKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdW5zaWduZWQgbG9uZyAJCQlDdXJyVHhva0NudDsNCi0JdTE2CQkJQ3VyclJldHJ5Q250Ow0KLQl1MTYJCQlDdXJyUmV0cnlSYXRlOw0KLQkvL3UxNgkJCWksaWR4Ow0KLQl1bnNpZ25lZCBsb25nICAgICAgIAlDdXJyUnhva0NudDsNCi0JYm9vbAkJCWJUcnlVcCA9IGZhbHNlOw0KLQlib29sCQkJYlRyeURvd24gPSBmYWxzZTsNCi0JdTgJCQlUcnlVcFRoID0gMTsNCi0JdTgJCQlUcnlEb3duVGggPSAyOw0KLQl1MzIJCQlUeFRocm91Z2hwdXQ7DQotCWxvbmcJCUN1cnJTaWduYWxTdHJlbmd0aDsNCi0JYm9vbAkJYlVwZGF0ZUluaXRpYWxHYWluID0gZmFsc2U7DQotICAgIAl1OAkJCXUxYk9mZG09MCwgdTFiQ2NrID0gMDsNCi0JY2hhcgkJT2ZkbVR4UHdySWR4LCBDY2tUeFB3cklkeDsJDQotDQotCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZD0gUkFURV9BREFQVElWRV9USU1FUl9QRVJJT0Q7DQotDQotDQotCUN1cnJSZXRyeUNudAk9IHByaXYtPkN1cnJSZXRyeUNudDsNCi0JQ3VyclR4b2tDbnQJPSBwcml2LT5OdW1UeE9rVG90YWwgLSBwcml2LT5MYXN0VHhva0NudDsNCi0JQ3VyclJ4b2tDbnQJPSBwcml2LT5pZWVlODAyMTEtPk51bVJ4T2tUb3RhbCAtIHByaXYtPkxhc3RSeG9rQ250Ow0KLQlDdXJyU2lnbmFsU3RyZW5ndGggPSBwcml2LT5TdGF0c19SZWN2U2lnbmFsUG93ZXI7DQotCVR4VGhyb3VnaHB1dCA9ICh1MzIpKHByaXYtPk51bVR4T2tCeXRlc1RvdGFsIC0gcHJpdi0+TGFzdFR4T0tCeXRlcyk7DQotCXByaXYtPkxhc3RUeE9LQnl0ZXMgPSBwcml2LT5OdW1UeE9rQnl0ZXNUb3RhbDsNCi0JcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IHByaXYtPmllZWU4MDIxMS0+cmF0ZS81Ow0KLQkvL3ByaW50aygicHJpdi0+Q3VycmVudE9wZXJhUmF0ZSBpcyAlZFxuIixwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0JLy8yIENvbXB1dGUgcmV0cnkgcmF0aW8uDQotCWlmIChDdXJyVHhva0NudD4wKQ0KLQl7DQotCQlDdXJyUmV0cnlSYXRlID0gKHUxNikoQ3VyclJldHJ5Q250KjEwMC9DdXJyVHhva0NudCk7DQotCX0NCi0JZWxzZQ0KLQl7IC8vIEl0IG1heSBiZSBzZXJpb3VzIHJldHJ5LiBUbyBkaXN0aW5ndWlzaCBzZXJpb3VzIHJldHJ5IG9yIG5vIHBhY2tldHMgbW9kaWZpZWQgYnkgQnJ1Y2UNCi0JCUN1cnJSZXRyeVJhdGUgPSAodTE2KShDdXJyUmV0cnlDbnQqMTAwLzEpOw0KLQl9DQotDQotDQotCS8vDQotCS8vIEFkZGVkIGJ5IFJvZ2VyLCAyMDA3LjAxLjAyLg0KLQkvLyBGb3IgZGVidWcgaW5mb3JtYXRpb24uDQotCS8vDQotCS8vcHJpbnRrKCJcbigxKSBwSGFsRGF0YS0+TGFzdFJldHJ5UmF0ZTogJWQgXG4iLHByaXYtPkxhc3RSZXRyeVJhdGUpOw0KLQkvL3ByaW50aygiKDIpIFJldHJ5Q250ID0gJWQgIFxuIiwgQ3VyclJldHJ5Q250KTsJDQotCS8vcHJpbnRrKCIoMykgVHhva0NudCA9ICVkIFxuIiwgQ3VyclR4b2tDbnQpOw0KLQkvL3ByaW50aygiKDQpIEN1cnJSZXRyeVJhdGUgPSAlZCBcbiIsIEN1cnJSZXRyeVJhdGUpOwkNCi0JLy9wcmludGsoIig1KSBDdXJyU2lnbmFsU3RyZW5ndGggPSAlZCBcbiIsQ3VyclNpZ25hbFN0cmVuZ3RoKTsNCi0JLy9wcmludGsoIig2KSBUeFRocm91Z2hwdXQgaXMgJWRcbiIsVHhUaHJvdWdocHV0KTsNCi0JLy9wcmludGsoInByaXYtPk51bVR4T2tCeXRlc1RvdGFsIGlzICVkXG4iLHByaXYtPk51bVR4T2tCeXRlc1RvdGFsKTsJCQ0KLQ0KLQlwcml2LT5MYXN0UmV0cnlDbnQgPSBwcml2LT5DdXJyUmV0cnlDbnQ7DQotCXByaXYtPkxhc3RUeG9rQ250ID0gcHJpdi0+TnVtVHhPa1RvdGFsOw0KLQlwcml2LT5MYXN0Unhva0NudCA9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsOw0KLQlwcml2LT5DdXJyUmV0cnlDbnQgPSAwOw0KLQ0KLQkvLzJObyBUeCBwYWNrZXRzLCByZXR1cm4gdG8gaW5pdF9yYXRlIG9yIG5vdD8NCi0JaWYgKEN1cnJSZXRyeVJhdGU9PTAgJiYgQ3VyclR4b2tDbnQgPT0gMCkNCi0JewkNCi0JCS8vDQotCQkvL0FmdGVyIDkgKDMwKjMwMG1zKSBzZWNvbmRzIGluIHRoaXMgY29uZGl0aW9uLCB3ZSB0cnkgdG8gcmFpc2UgcmF0ZS4NCi0JCS8vDQotCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhKys7DQotCQkNCi0vLwkJcHJpbnRrKCJObyBUeCBwYWNrZXRzLCBUcnl1cGluZ0NvdW50Tm9EYXRhKCVkKVxuIiwgcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSk7DQotCQkvL1tUUkMgRGVsbCBMYWJdIEV4dGVuZCByYWlzZWQgcGVyaW9kIGZyb20gNC41c2VjIHRvIDlzZWMsIElzYWlhaCAyMDA4LTAyLTE1IDE4OjAwIA0KLQkJaWYgKHByaXYtPlRyeXVwaW5nQ291bnROb0RhdGE+MzApDQotCQl7DQotCQkJcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSA9IDA7DQotCQkgCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBHZXRVcGdyYWRlVHhSYXRlKGRldiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CQkNCi0JCQkvLyBSZXNldCBGYWlsIFJlY29yZA0KLQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gMDsNCi0JCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gLTIwMDsNCi0JCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAwOw0KLQkJfQ0KLQkJZ290byBTZXRJbml0aWFsR2FpbjsNCi0JfQ0KLSAgICAgICAgZWxzZQ0KLQl7DQotCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhPTA7IC8vUmVzZXQgdHJ5aW5nIHVwIHRpbWVzLg0KLQl9DQotDQotDQotCS8vDQotCS8vIEZvciBOZXRnZWFyIGNhc2UsIEkgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyBzaWduYWwgc3RyZW5ndGggZXN0aW1hdGlvbiwNCi0JLy8gd2hpY2ggY2FuIHJlc3VsdHMgaW4gbG93ZXIgcmF0ZSB0byB0cmFuc21pdCB3aGVuIHNhbXBsZSBpcyBOT1QgZW5vdWdoIChlLmcuIFBJTkcgcmVxdWVzdCkuICANCi0JLy8gMjAwNy4wNC4wOSwgYnkgUm9nZXIuCQ0KLQkvLwkNCi0NCi0JLy8NCi0JLy8gUmVzdHJ1Y3R1cmUgcmF0ZSBhZGFwdGl2ZSBhcyB0aGUgZm9sbG93aW5nIG1haW4gc3RhZ2VzOg0KLQkvLyAoMSkgQWRkIHJldHJ5IHRocmVzaG9sZCBpbiA1NE0gdXBncmFkaW5nIGNvbmRpdGlvbiB3aXRoIHNpZ25hbCBzdHJlbmd0aC4NCi0JLy8gKDIpIEFkZCB0aGUgbWVjaGFuaXNtIHRvIGRlZ3JhZGUgdG8gQ0NLIHJhdGUgYWNjb3JkaW5nIHRvIHNpZ25hbCBzdHJlbmd0aCANCi0JLy8JCWFuZCByZXRyeSByYXRlLg0KLQkvLyAoMykgUmVtb3ZlIGFsbCBJbml0aWFsIEdhaW4gVXBkYXRlcyBvdmVyIE9GRE0gcmF0ZS4gVG8gYXZvaWQgdGhlIGNvbXBsaWNhdGVkIA0KLQkvLwkJc2l0dWF0aW9uLCBJbml0aWFsIEdhaW4gVXBkYXRlIGlzIHVwb24gb24gRElHIG1lY2hhbmlzbSBleGNlcHQgQ0NLIHJhdGUuDQotCS8vICg0KSBBZGQgdGhlIG1laGFuaXNtIG9mIHRyeWluZyB0byB1cGdyYWRlIHR4IHJhdGUuDQotCS8vICg1KSBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIG9mIHVwcGluZyB0eCByYXRlIHRvIGF2b2lkIHRyeWluZyB1cHBpbmcgdHggcmF0ZSBjb25zdGFudGx5Lg0KLQkvLyBCeSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0JLy8JDQotCS8vDQotDQotCS8vIDExTWJwcyBvciAzNk1icHMNCi0JLy8gQ2hlY2sgbW9yZSB0aW1lcyBpbiB0aGVzZSByYXRlKGtleSByYXRlcykuDQotCS8vDQotCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIgfHwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA3MikNCi0JeyANCi0JCVRyeVVwVGggKz0gOTsNCi0JfQ0KLQkvLw0KLQkvLyBMZXQgdGhlc2UgcmF0ZXMgZG93biBtb3JlIGRpZmZpY3VsdC4NCi0JLy8NCi0JaWYoTWdudElzQ2NrUmF0ZShwcml2LT5DdXJyZW50T3BlcmFSYXRlKSB8fCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDM2KQ0KLQl7DQotCQkJVHJ5RG93blRoICs9IDE7DQotCX0NCi0NCi0JLy8xIEFkanVzdCBSYXRlLg0KLQlpZiAocHJpdi0+YlRyeXVwaW5nID09IHRydWUpDQotCXsJDQotCQkvLzIgRm9yIFRlc3QgVXBncmFkaW5nIG1lY2hhbmlzbQ0KLQkJLy8gTm90ZToNCi0JCS8vIAlTb21ldGltZXMgdGhlIHRocm91Z2hwdXQgaXMgdXBvbiBvbiB0aGUgY2FwYWJpbGl0eSBid3R3ZWVuIHRoZSBBUCBhbmQgTklDLA0KLQkJLy8gCXRodXMgdGhlIGxvdyBkYXRhIHJhdGUgZG9lcyBub3QgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UuDQotCQkvLyAJV2UgcmFuZG9tbHkgdXBncmFkZSB0aGUgZGF0YSByYXRlIGFuZCBjaGVjayBpZiB0aGUgcmV0cnkgcmF0ZSBpcyBpbXByb3ZlZC4NCi0JCQ0KLQkJLy8gVXBncmFkaW5nIHJhdGUgZGlkIG5vdCBpbXByb3ZlIHRoZSByZXRyeSByYXRlLCBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgcmF0ZS4NCi0JCWlmICggKEN1cnJSZXRyeVJhdGUgPiAyNSkgJiYgVHhUaHJvdWdocHV0IDwgcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCkNCi0JCXsNCi0JCQkvL05vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJLy9wcmludGsoImNhc2UxLTE6IE5vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4uLi5cbiIpOw0KLQkJCS8vcHJpbnRrKCJjYXNlMS0xOiBwTWdudEluZm8tPkN1cnJlbnRPcGVyYVJhdGUgPSVkLCBUeFRocm91Z2hwdXQgPSAlZCwgTGFzdFRocm91Z2hwdXQgPSAlZFxuIiwNCi0JCQkvLwkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSwgVHhUaHJvdWdocHV0LCBwcml2LT5MYXN0VHhUaHJvdWdocHV0KTsJCQkNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlwcml2LT5iVHJ5dXBpbmcgPSBmYWxzZTsNCi0JCX0NCi0JfQkNCi0JZWxzZSBpZiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTQ3ICYmIChDdXJyUmV0cnlSYXRlIDwgNTApKQ0KLQl7DQotCQkvLzJGb3IgSGlnaCBQb3dlcg0KLQkJLy8NCi0JCS8vIEFkZGVkIGJ5IFJvZ2VyLCAyMDA3LjA0LjA5Lg0KLQkJLy8gUmV0dXJuIHRvIGhpZ2hlc3QgZGF0YSByYXRlLCBpZiBzaWduYWwgc3RyZW5ndGggaXMgZ29vZCBlbm91Z2guDQotCQkvLyBTaWduYWxTdHJlbmd0aCB0aHJlc2hvbGQoLTUwZGJtKSBpcyBmb3IgUlRMODE4Ni4NCi0JCS8vIFJldmlzZSBTaWduYWxTdHJlbmd0aCB0aHJlc2hvbGQgdG8gLTUxZGJtLgkNCi0JCS8vDQotCQkvLyBBbHNvIG5lZWQgdG8gY2hlY2sgcmV0cnkgcmF0ZSBmb3Igc2FmZXR5LCBieSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0JCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgIT0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuSGlnaGVzdE9wZXJhUmF0ZSApDQotCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsNCi0JCQkvLyBVcGdyYWRlIFR4IFJhdGUgZGlyZWN0bHkuDQotCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCArPSBUcnlVcFRoOw0KLQkJfQ0KLS8vCQlwcmludGsoImNhc2UyOiBTdGFSYXRlQWRhcHRpdmU4N1NFOiBQb3dlciglZCkgaXMgaGlnaCBlbm91Z2ghIS4gXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOwkJCQ0KLQkJCQkJDQotCX0NCi0JZWxzZSBpZihDdXJyVHhva0NudCA+IDkgJiYgQ3VyclR4b2tDbnQ8IDEwMCAmJiBDdXJyUmV0cnlSYXRlID49IDYwMCkgDQotCXsNCi0JCS8vMiBGb3IgU2VyaW91cyBSZXRyeQ0KLQkJLy8NCi0JCS8vIFRyYWZmaWMgaXMgbm90IGJ1c3kgYnV0IG91ciBUeCByZXRyeSBpcyBzZXJpb3VzLiANCi0JCS8vDQotCQliVHJ5RG93biA9IHRydWU7DQotCQkvLyBMZXQgUmF0ZSBNZWNoYW5pc20gdG8gZGVncmFkZSB0eCByYXRlIGRpcmVjdGx5Lg0KLQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotLy8JCXByaW50aygiY2FzZTM6IFJBOiBUeCBSZXRyeSBpcyBzZXJpb3VzLiBEZWdyYWRlIFR4IFJhdGUgdG8gJWQgZGlyZWN0bHkuLi5cbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAxMDggKQ0KLQl7DQotCQkvLzJGb3IgNTRNYnBzDQotCQkvLyBBaXIgTGluaw0KLQkJaWYgKCAoQ3VyclJldHJ5UmF0ZT4yNikmJihwcml2LT5MYXN0UmV0cnlSYXRlPjI1KSkNCi0vLwkJaWYgKCAoQ3VyclJldHJ5UmF0ZT40MCkmJihwcml2LT5MYXN0UmV0cnlSYXRlPjM5KSkNCi0JCXsNCi0JCQkvL0Rvd24gdG8gcmF0ZSA0OE1icHMuDQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJfQ0KLQkJLy8gQ2FibGUgTGluaw0KLQkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPjE3KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MTYpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNzIpKSANCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPjE3KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MTYpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNzIpKQ0KLQkJew0KLQkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotDQotCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTc1KSkgLy9jYWJsZSBsaW5rDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTQtLS01NE0gXG4iKTsJDQotDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gOTYgKQ0KLQl7DQotCQkvLzJGb3IgNDhNYnBzDQotCQkvL0FpciBMaW5rDQotCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT40OCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NDcpKSkNCi0vLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjY0KSkpDQotDQotCQl7CQ0KLQkJCS8vRG93biB0byByYXRlIDM2TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQkvL0NhYmxlIExpbmsNCi0JCWVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+MjEpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjIwKSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC03NCkpDQotCQl7DQotCQkJLy9Eb3duIHRvIHJhdGUgMzZNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0vLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQ0KLQkJew0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyOCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8OCkgKSANCi0JCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJfQ0KLQ0KLQkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC03NSkpDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTUtLS00OE0gXG4iKTsJDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIgKQ0KLQl7DQotCQkvLzJGb3IgMzZNYnBzDQotCQlpZiAoIChDdXJyUmV0cnlSYXRlPjQzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT40MSkpIA0KLS8vCQlpZiAoIChDdXJyUmV0cnlSYXRlPjYwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT41OSkpDQotCQl7CQ0KLQkJCS8vRG93biB0byByYXRlIDI0TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MTUpICYmICAocHJpdi0+TGFzdFJldHJ5UmF0ZTwxNikpIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwzNSkgJiYgIChwcml2LT5MYXN0UmV0cnlSYXRlPDM2KSkNCi0JCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJfQ0KLQ0KLQkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MCkpDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTYtLS0zNk0gXG4iKTsJDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNDggKQ0KLQl7DQotCQkvLzJGb3IgMjRNYnBzDQotCQkvLyBBaXIgTGluaw0KLQkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjYyKSkpDQotLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjgzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT44MikpKQ0KLQkJewkNCi0JCQkvL0Rvd24gdG8gcmF0ZSAxOE1icHMuDQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJfQ0KLQkJLy9DYWJsZSBMaW5rDQotCQllbHNlIGlmICggKChDdXJyUmV0cnlSYXRlPjMzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT4zMikpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtODIpICkNCi0vLwkJIGVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+NTApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjQ5KSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC04MikgKQ0KLQkJew0KLQkJCS8vRG93biB0byByYXRlIDE4TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0NCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotICAJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyMCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8MjEpKSAvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NDApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDQxKSkNCi0JCXsJDQotCQkJYlRyeVVwID0gdHJ1ZTsJDQotCQl9DQotDQotCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgyKSkNCi0JCXsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlNy0tLTI0TSBcbiIpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNiApDQotCXsNCi0JCS8vMkZvciAxOE1icHMNCi0JCS8vIG9yaWdpbmFsICgxMDksIDEwOSkgDQotCQkvL1tUUkMgRGVsbCBMYWJdICg5MCwgOTEpLCBJc2FpYWggMjAwOC0wMi0xOCAyMzoyNA0KLQkJLy8JCQkgICAgICg4NSwgODYpLCBJc2FpYWggMjAwOC0wMi0xOCAyNDowMA0KLQkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+ODUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjg2KSkpDQotLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjExNSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MTE2KSkpDQotCQl7DQotCQkJLy9Eb3duIHRvIHJhdGUgMTFNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCS8vW1RSQyBEZWxsIExhYl0gIElzYWlhaCAyMDA4LTAyLTE4IDIzOjI0DQotCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjIpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDIzKSkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkNCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQyKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw0MykpDQotCQl7CQ0KLQkJCWJUcnlVcCA9IHRydWU7CQ0KLQkJfQ0KLQkJLy9wcmludGsoImNhc2U4LS0tMThNIFxuIik7CQ0KLQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyICkNCi0Jew0KLQkJLy8yRm9yIDExTWJwcw0KLQkJaWYgKEN1cnJSZXRyeVJhdGU+OTUpDQotLy8JCWlmIChDdXJyUmV0cnlSYXRlPjE1NSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwzMCkgKS8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPDUwKSApDQotCQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQkJfQ0KLQkJLy9wcmludGsoImNhc2U5LS0tMTFNIFxuIik7CQ0KLQkJfQkNCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMTEgKQ0KLQl7DQotCQkvLzJGb3IgNS41TWJwcw0KLQkJaWYgKEN1cnJSZXRyeVJhdGU+MTQ5KSANCi0vLwkJaWYgKEN1cnJSZXRyeVJhdGU+MTg5KQ0KLQkJewkNCi0JCQliVHJ5RG93biA9IHRydWU7CQkJDQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgNjUpKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8ODApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgODUpKQ0KLQ0KLQkJCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJCX0JCQ0KLQkJLy9wcmludGsoImNhc2UxMC0tLTUuNU0gXG4iKTsJDQotCQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQgKQ0KLQl7DQotCQkvLzJGb3IgMiBNYnBzDQotCQlpZigoQ3VyclJldHJ5UmF0ZT45OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+OTkpKQ0KLS8vCQlpZigoQ3VyclJldHJ5UmF0ZT4xOTkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjE5OSkpDQotCQl7DQotCQkJYlRyeURvd24gPSB0cnVlOwkJCQ0KLQkJfQ0KLQkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlIDwgNjUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgNzApKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGUgPCA4NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA5MCkpDQotCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlMTEtLS0yTSBcbiIpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyICkNCi0Jew0KLQkJLy8yRm9yIDEgTWJwcw0KLQkJaWYoIChDdXJyUmV0cnlSYXRlPDcwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw3NSkpDQotLy8JCWlmKCAoQ3VyclJldHJ5UmF0ZTw5MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8OTUpKQ0KLQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTEyLS0tMU0gXG4iKTsJDQotCX0NCi0NCi0JaWYoYlRyeVVwICYmIGJUcnlEb3duKQ0KLSAgICAJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N0IoKTogVHggUmF0ZSB0cmllZCB1cHBpbmcgYW5kIGRvd25pbmcgc2ltdWx0YW5lb3VzbHkhXG4iKTsNCi0JCQkJDQotCS8vMSBUZXN0IFVwZ3JhZGluZyBUeCBSYXRlDQotCS8vIFNvbWV0aW1lcyB0aGUgY2F1c2Ugb2YgdGhlIGxvdyB0aHJvdWdocHV0IChoaWdoIHJldHJ5IHJhdGUpIGlzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIEFQIGFuZCBOSUMuDQotCS8vIFRvIHRlc3QgaWYgdGhlIHVwcGVyIHJhdGUgbWF5IGNhdXNlIGxvd2VyIHJldHJ5IHJhdGUsIHRoaXMgbWVjaGFuaXNtIHJhbmRvbWx5IG9jY3VycyB0byB0ZXN0IHVwZ3JhZGluZyB0eCByYXRlLg0KLQlpZighYlRyeVVwICYmICFiVHJ5RG93biAmJiAocHJpdi0+VHJ5dXBpbmdDb3VudCA9PSAwKSAmJiAocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9PSAwKQ0KLQkJJiYgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSAhPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5IaWdoZXN0T3BlcmFSYXRlICYmIHByaXYtPkZhaWxUeFJhdGVDb3VudCA8IDIpDQotCXsNCi0JCWlmKGppZmZpZXMlIChDdXJyUmV0cnlSYXRlICsgMTAxKSA9PSAwKQ0KLQkJew0KLQkJCWJUcnlVcCA9IHRydWU7CQ0KLQkJCXByaXYtPmJUcnl1cGluZyA9IHRydWU7DQotCQkJLy9wcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogUmFuZG9tbHkgdHJ5IHVwZ3JhZGluZy4uLlxuIik7DQotCQl9DQotCX0NCi0NCi0JLy8xIFJhdGUgTWVjaGFuaXNtDQotCWlmKGJUcnlVcCkNCi0Jew0KLQkJcHJpdi0+VHJ5dXBpbmdDb3VudCsrOw0KLQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7DQotCQkJDQotCQl7DQotLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+VHJ5dXBpbmdDb3VudCA9ICVkXG4iLCBwcml2LT5Ucnl1cGluZ0NvdW50KTsNCi0vLwkJCXByaW50aygiVVA6IFRyeVVwVGgoJWQpKyAoRmFpbFR4UmF0ZUNvdW50KCVkKSleMiA9JWRcbiIsIA0KLS8vCQkJCVRyeVVwVGgsIHByaXYtPkZhaWxUeFJhdGVDb3VudCwgKFRyeVVwVGggKyBwcml2LT5GYWlsVHhSYXRlQ291bnQgKiBwcml2LT5GYWlsVHhSYXRlQ291bnQpICk7DQotLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+YlRyeXVwaW5nPSVkXG4iLCAgcHJpdi0+YlRyeXVwaW5nKTsNCi0NCi0JCX0NCi0JCQ0KLQkJLy8NCi0JCS8vIENoZWNrIG1vcmUgdGltZXMgaWYgd2UgbmVlZCB0byB1cGdyYWRlIGluZGVlZC4NCi0JCS8vIEJlY2F1c2UgdGhlIGxhcmdlc3QgdmFsdWUgb2YgcEhhbERhdGEtPlRyeXVwaW5nQ291bnQgaXMgMHhGRkZGIGFuZCANCi0JCS8vIHRoZSBsYXJnZXN0IHZhbHVlIG9mIHBIYWxEYXRhLT5GYWlsVHhSYXRlQ291bnQgaXMgMHgxNCwNCi0JCS8vIHRoaXMgY29uZGl0aW9uIHdpbGwgYmUgc2F0aXNmaWVkIGF0IG1vc3QgZXZlcnkgMiBtaW4uDQotCQkvLw0KLQ0KLQkJaWYoKHByaXYtPlRyeXVwaW5nQ291bnQgPiAoVHJ5VXBUaCArIHByaXYtPkZhaWxUeFJhdGVDb3VudCAqIHByaXYtPkZhaWxUeFJhdGVDb3VudCkpIHx8DQotCQkJKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpIHx8IHByaXYtPmJUcnl1cGluZykNCi0JCXsNCi0JCQlwcml2LT5Ucnl1cGluZ0NvdW50ID0gMDsNCi0JCQkvLyANCi0JCQkvLyBXaGVuIHRyYW5zZmVyaW5nIGZyb20gQ0NLIHRvIE9GRE0sIERJRyBpcyBhbiBpbXBvcnRhbnQgaXNzdWUuDQotCQkJLy8NCi0JCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyKQ0KLQkJCQliVXBkYXRlSW5pdGlhbEdhaW4gPSB0cnVlOw0KLQ0KLQkJCS8vIFRoZSBkaWZmZXJlbmNlIGluIHRocm91Z2hwdXQgYmV0d2VlbiA0OE1icHMgYW5kIDM2TWJwcyBpcyA4TS4NCi0JCQkvLyBTbywgd2UgbXVzdCBiZSBjYXJlZnVsbHkgaW4gdGhpcyByYXRlIHNjYWxlLiBJc2FpYWggMjAwOC0wMi0xNS4NCi0JCQkvLw0KLQkJCWlmKCAgKChwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDcyKSB8fCAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA0OCkgfHwgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMzYpKSAmJg0KLQkJCQkocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4gMikgKQ0KLQkJCQlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IChSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRC8yKTsNCi0JCQkNCi0JCQkvLyAoMSlUbyBhdm9pZCB1cGdyYWRlIGZyZXF1ZW50bHkgdG8gdGhlIGZhaWwgdHggcmF0ZSwgYWRkIHRoZSBGYWlsVHhSYXRlQ291bnQgaW50byB0aGUgdGhyZXNob2xkLg0KLQkJCS8vICgyKUlmIHRoZSBzaWduYWwgc3RyZW5ndGggaXMgaW5jcmVhc2VkLCBpdCBtYXkgYmUgYWJsZSB0byB1cGdyYWRlLg0KLQ0KLQkJCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBHZXRVcGdyYWRlVHhSYXRlKGRldiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7DQotLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogVXBncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0NCi0JCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwIA0KLQkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0zNikNCi0JCQl7DQotCQkJCXByaXYtPmJVcGRhdGVBUkZSPXRydWU7DQotCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRjhGKTsgLy9ieXBhc3MgMTIvOS82DQotLy8JCQkJcHJpbnRrKCJVUDogQVJGUj0weEY4RlxuIik7DQotCQkJfQ0KLQkJCWVsc2UgaWYocHJpdi0+YlVwZGF0ZUFSRlIpDQotCQkJew0KLQkJCQlwcml2LT5iVXBkYXRlQVJGUj1mYWxzZTsNCi0JCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGRkYpOyAvL3NldCAxTSB+IDU0TWJwcy4NCi0vLwkJCQlwcmludGsoIlVQOiBBUkZSPTB4RkZGXG4iKTsNCi0JCQl9DQotCQkJCQ0KLQkJCS8vIFVwZGF0ZSBGYWlsIFR4IHJhdGUgYW5kIGNvdW50Lg0KLQkJCWlmKHByaXYtPkxhc3RGYWlsVHhSYXRlICE9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpDQotCQkJew0KLQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGU7DQotCQkJCXByaXYtPkZhaWxUeFJhdGVDb3VudCA9IDA7DQotCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAtMjAwOyAvLyBTZXQgbG93ZXN0IHBvd2VyLg0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsJDQotCQlpZihwcml2LT5Ucnl1cGluZ0NvdW50ID4gMCkNCi0JCQlwcml2LT5Ucnl1cGluZ0NvdW50IC0tOw0KLQl9DQotCQ0KLQlpZihiVHJ5RG93bikNCi0Jew0KLQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSsrOw0KLQkJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7DQotCQl7DQotLy8JCQlwcmludGsoIkROOiBwSGFsRGF0YS0+VHJ5RG93bkNvdW50TG93RGF0YSA9ICVkXG4iLHByaXYtPlRyeURvd25Db3VudExvd0RhdGEpOw0KLS8vCQkJcHJpbnRrKCJETjogVHJ5RG93blRoID0lZFxuIiwgVHJ5RG93blRoKTsNCi0vLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5iVHJ5dXBpbmc9JWRcbiIsICBwcml2LT5iVHJ5dXBpbmcpOw0KLQkJfQ0KLQkJCQkJCQ0KLQkJLy9DaGVjayBpZiBUeCByYXRlIGNhbiBiZSBkZWdyYWRlZCBvciBUZXN0IHRyeWluZyB1cGdyYWRpbmcgc2hvdWxkIGZhbGxiYWNrLg0KLQkJaWYocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA+IFRyeURvd25UaCB8fCBwcml2LT5iVHJ5dXBpbmcpDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7DQotCQkJcHJpdi0+YlRyeXVwaW5nID0gZmFsc2U7DQotCQkJLy8gVXBkYXRlIGZhaWwgaW5mb3JtYXRpb24uDQotCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgPT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkNCi0JCQl7DQotCQkJCXByaXYtPkZhaWxUeFJhdGVDb3VudCArKzsNCi0JCQkJLy8gUmVjb3JkIHRoZSBUeCBmYWlsIHJhdGUgc2lnbmFsIHN0cmVuZ3RoLg0KLQkJCQlpZihDdXJyU2lnbmFsU3RyZW5ndGggPiBwcml2LT5MYXN0RmFpbFR4UmF0ZVNTKQ0KLQkJCQl7DQotCQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOw0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZTsNCi0JCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMTsNCi0JCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGVTUyA9IEN1cnJTaWduYWxTdHJlbmd0aDsNCi0JCQl9DQotCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IEdldERlZ3JhZGVUeFJhdGUoZGV2LCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0NCi0JCQkvLyBSZWR1Y2UgY2hhcmlvdCB0cmFpbmluZyB0aW1lIGF0IHdlYWsgc2lnbmFsIHN0cmVuZ3RoIHNpdHVhdGlvbi4gU0QzIEVEIGRlbWFuZC4gDQotCQkJLy9bVFJDIERlbGwgTGFiXSBSZXZpc2UgU2lnbmFsIFRocmVzaG9sZCBmcm9tIC03NSB0byAtODAgLCBJc2FpYWggMjAwOC0wMi0xOCAyMDowMCANCi0JCQlpZiggKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MCkgJiYgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPiA3MiApKQ0KLQkJCXsNCi0JCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IDcyOw0KLS8vCQkJCXByaW50aygiRE46IHdlYWsgc2lnbmFsIHN0cmVuZ3RoICglZCksIGRlZ3JhZGUgdG8gMzZNYnBzXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOw0KLQkJCX0NCi0NCi0JCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwIA0KLQkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0zNikNCi0JCQl7DQotCQkJCXByaXYtPmJVcGRhdGVBUkZSPXRydWU7DQotCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRjhGKTsgLy9ieXBhc3MgMTIvOS82DQotLy8JCQkJcHJpbnRrKCJETjogQVJGUj0weEY4RlxuIik7DQotCQkJfQ0KLQkJCWVsc2UgaWYocHJpdi0+YlVwZGF0ZUFSRlIpDQotCQkJew0KLQkJCQlwcml2LT5iVXBkYXRlQVJGUj1mYWxzZTsNCi0JCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGRkYpOyAvL3NldCAxTSB+IDU0TWJwcy4NCi0vLwkJCQlwcmludGsoIkROOiBBUkZSPTB4RkZGXG4iKTsNCi0JCQl9DQotCQkJCQ0KLQkJCS8vDQotCQkJLy8gV2hlbiBpdCBpcyBDQ0sgcmF0ZSwgaXQgbWF5IG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgZ2FpbiB0byByZWNlaXZlIGxvd2VyIHBvd2VyIHBhY2tldHMuDQotCQkJLy8NCi0JCQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpKQ0KLQkJCXsNCi0JCQkJYlVwZGF0ZUluaXRpYWxHYWluID0gdHJ1ZTsNCi0JCQl9DQotLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogRGVncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmKHByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPiAwKQ0KLQkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgLS07DQotCX0NCi0JCQkNCi0JLy8gS2VlcCB0aGUgVHggZmFpbCByYXRlIGNvdW50IHRvIGVxdWFsIHRvIDB4MTUgYXQgbW9zdC4NCi0JLy8gUmVkdWNlIHRoZSBmYWlsIGNvdW50IGF0IGxlYXN0IHRvIDEwIHNlYyBpZiB0eCByYXRlIGlzIHRlbmRpbmcgc3RhYmxlLg0KLQlpZihwcml2LT5GYWlsVHhSYXRlQ291bnQgPj0gMHgxNSB8fCANCi0JCSghYlRyeVVwICYmICFiVHJ5RG93biAmJiBwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDAgJiYgcHJpdi0+VHJ5dXBpbmdDb3VudCAmJiBwcml2LT5GYWlsVHhSYXRlQ291bnQgPiAweDYpKQ0KLQl7DQotCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgLS07DQotCX0JCQ0KLQ0KLQ0KLQlPZmRtVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cl9vZmRtW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOyANCi0JQ2NrVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cltwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsgDQotCQ0KLQkvL1tUUkMgRGVsbCBMYWJdIE1hYzB4OWUgaW5jcmVhc2UgMiBsZXZlbCBpbiAzNk1+MThNIHNpdHVhdGlvbiwgSXNhaWFoIDIwMDgtMDItMTggMjQ6MDAgDQotCWlmKChwcml2LT5DdXJyZW50T3BlcmFSYXRlIDwgOTYpICYmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPiAyMikpDQotCXsNCi0JCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOw0KLQkJdTFiT2ZkbSA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsNCi0NCi0JCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcg0KLQkJaWYodTFiQ2NrID09IENja1R4UHdySWR4ICkNCi0JCXsNCi0JCQlpZih1MWJPZmRtICE9IChPZmRtVHhQd3JJZHgrMikgKQ0KLQkJCXsNCi0JCQlwcml2LT5iRW5oYW5jZVR4UHdyPSB0cnVlOw0KLQkJCXUxYk9mZG0gPSAoKHUxYk9mZG0rMikgPiAzNSkgPyAzNTogKHUxYk9mZG0rMik7DQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsNCi0vLwkJCXByaW50aygiRW5oYW5jZSBPRkRNX1RYQUdDIDogKysrKysgdTFiT2ZkbT0gMHgleFxuIiwgdTFiT2ZkbSk7DQotCQkJfQ0KLQkJfQ0KLQkJLy8gY2FzZSAyOiBlbnRlciBoaWdoIHBvd2VyDQotCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQ0KLQkJew0KLQkJCWlmKCFwcml2LT5iRW5oYW5jZVR4UHdyKQ0KLQkJCXsNCi0JCQkJcHJpdi0+YkVuaGFuY2VUeFB3cj0gdHJ1ZTsNCi0JCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbSsyKSA+IDM1KSA/IDM1OiAodTFiT2ZkbSsyKTsNCi0JCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsNCi0JCQkJLy9SVF9UUkFDRShDT01QX1JBVEUsIERCR19UUkFDRSwgKCJFbmhhbmNlIE9GRE1fVFhBR0MoMikgOiArKysrKyB1MWJPZmRtPSAweCV4XG4iLCB1MWJPZmRtKSk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotCWVsc2UgaWYocHJpdi0+YkVuaGFuY2VUeFB3cikgIC8vNTQvNDgvMTEvNS41LzIvMQ0KLQl7DQotCQl1MWJDY2sgPSByZWFkX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDKTsNCi0JCXUxYk9mZG0gPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7DQotDQotCQkvLyBjYXNlIDE6IE5ldmVyIGVudGVyIEhpZ2ggcG93ZXINCi0JCWlmKHUxYkNjayA9PSBDY2tUeFB3cklkeCApDQotCQl7DQotCQlwcml2LT5iRW5oYW5jZVR4UHdyPSBmYWxzZTsNCi0JCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgT2ZkbVR4UHdySWR4KTsNCi0JCS8vcHJpbnRrKCJSZWNvdmVyIE9GRE1fVFhBR0MgOiA9PT09PSB1MWJPZmRtPSAweCV4XG4iLCBPZmRtVHhQd3JJZHgpOw0KLQkJfQ0KLQkJLy8gY2FzZSAyOiBlbnRlciBoaWdoIHBvd2VyDQotCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQ0KLQkJew0KLQkJCXByaXYtPmJFbmhhbmNlVHhQd3I9IGZhbHNlOw0KLQkJCXUxYk9mZG0gPSAoKHUxYk9mZG0tMikgPiAwKSA/ICh1MWJPZmRtLTIpOiAwOw0KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiT2ZkbSk7DQotCQkJLy9SVF9UUkFDRShDT01QX1JBVEUsIERCR19UUkFDRSwgKCJSZWNvdmVyIE9GRE1fVFhBR0MoMik6ID09PT09IHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pKTsNCi0NCi0JCX0NCi0JfQ0KLQ0KLQkvLw0KLQkvLyBXZSBuZWVkIHVwZGF0ZSBpbml0aWFsIGdhaW4gd2hlbiB3ZSBzZXQgdHggcmF0ZSAiZnJvbSBPRkRNIHRvIENDSyIgb3INCi0JLy8gImZyb20gQ0NLIHRvIE9GRE0iLiANCi0JLy8NCi1TZXRJbml0aWFsR2FpbjoNCi0JaWYoYlVwZGF0ZUluaXRpYWxHYWluKQ0KLQl7DQotCQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpKSAvLyBDQ0sNCi0JCXsNCi0JCQlpZihwcml2LT5Jbml0aWFsR2FpbiA+IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlKQ0KLQkJCXsNCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOw0KLQ0KLQkJCQlpZihDdXJyU2lnbmFsU3RyZW5ndGggPCAtODUpIC8vIExvdyBwb3dlciwgT0ZETSBbMHgxN10gPSAyNi4NCi0JCQkJew0KLQkJCQkJLy9TRDMgU1lzIHN1Z2dlc3QgdGhhdCBDdXJyU2lnbmFsU3RyZW5ndGggPCAtNjUsIG9mZG0gMHgxNz0yNi4NCi0JCQkJCXByaXYtPkluaXRpYWxHYWluID0gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2U7DQotCQkJCX0NCi0JCQkJZWxzZSBpZihwcml2LT5Jbml0aWFsR2FpbiA+IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlICsgMSkNCi0JCQkJew0KLQkJCQkJcHJpdi0+SW5pdGlhbEdhaW4gLT0gMjsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCXByaXYtPkluaXRpYWxHYWluIC0tOw0KLQkJCQl9DQotCQkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiB1cGRhdGUgaW5pdF9nYWluIHRvIGluZGV4ICVkIGZvciBkYXRlIHJhdGUgJWRcbiIscHJpdi0+SW5pdGlhbEdhaW4sIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOwkJCQ0KLQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgLy8gT0ZETQ0KLQkJewkJCQ0KLQkJCWlmKHByaXYtPkluaXRpYWxHYWluIDwgNCkNCi0JCQl7DQotCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsNCi0NCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW4gKys7DQotCQkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiB1cGRhdGUgaW5pdF9nYWluIHRvIGluZGV4ICVkIGZvciBkYXRlIHJhdGUgJWRcbiIscHJpdi0+SW5pdGlhbEdhaW4sIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOwkJCQ0KLQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOw0KLQkJCX0JCQkJCQ0KLQkJfQ0KLQl9DQotDQotCS8vUmVjb3JkIHRoZSByZWxhdGVkIGluZm8NCi0JcHJpdi0+TGFzdFJldHJ5UmF0ZSA9IEN1cnJSZXRyeVJhdGU7DQotCXByaXYtPkxhc3RUeFRocm91Z2hwdXQgPSBUeFRocm91Z2hwdXQ7DQotCXByaXYtPmllZWU4MDIxMS0+cmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgKiA1Ow0KLX0NCi0NCi0jZW5kaWYNCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQ0KLXZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICogd29yaykNCi17DQotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsNCi0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLHJhdGVfYWRhcHRlcl93cSk7DQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2Ow0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KLXsNCi0NCi0jZW5kaWYNCi0gICAgICAgIC8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLS8vICAgIERNRVNHKCItLS0tPnJ0bDgxODBfcmF0ZV9hZGFwdGVyIik7DQotICAgICAgICBTdGFSYXRlQWRhcHRpdmU4N1NFKGRldik7DQotLy8gICBETUVTRygiPC0tLS1ydGw4MTgwX3JhdGVfYWRhcHRlciIpOw0KLX0NCi12b2lkIHRpbWVyX3JhdGVfYWRhcHRpdmUodW5zaWduZWQgbG9uZyBkYXRhKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdigoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKTsNCi0JLy9ETUVTRygiLS0tLT50aW1lcl9yYXRlX2FkYXB0aXZlKClcbiIpOw0KLQlpZighcHJpdi0+dXApDQotCXsNCi0vLwkJRE1FU0coIjwtLS0tdGltZXJfcmF0ZV9hZGFwdGl2ZSgpOmRyaXZlciBpcyBub3QgdXAhXG4iKTsNCi0JCXJldHVybjsNCi0JfQ0KLQlpZigocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSKQ0KLQkJCSYmIChwcml2LT5pZWVlODAyMTEtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpICYmDQotCQkJKHByaXYtPkZvcmNlZERhdGFSYXRlID09IDApICkNCi0Jew0KLS8vCURNRVNHKCJ0aW1lcl9yYXRlX2FkYXB0aXZlKCk6c2NoZWR1bGUgcmF0ZV9hZGFwdGVyX3dxXG4iKTsNCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPnJhdGVfYWRhcHRlcl93cSk7DQotLy8JCVN0YVJhdGVBZGFwdGl2ZTg3U0UoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSk7DQotI2VuZGlmDQotCX0NCi0JcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNU0VDUyhwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2QpOw0KLQlhZGRfdGltZXIoJnByaXYtPnJhdGVhZGFwdGVyX3RpbWVyKTsNCi0JLy9ETUVTRygiPC0tLS10aW1lcl9yYXRlX2FkYXB0aXZlKClcbiIpOw0KLX0NCi0vL2J5IGFteSAwODAzMTJ9DQotdm9pZA0KLVN3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1KA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCANCi0JdTggU2lnbmFsU3RyZW5ndGgNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQ0KLS8vCXByaW50aygiK1N3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1OiBSeFNzOiAlZFxuIiwgU2lnbmFsU3RyZW5ndGgpOw0KLQ0KLQlwcml2LT5BZFJ4T2tDbnQrKzsNCi0NCi0JaWYoIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCAhPSAtMSkNCi0Jew0KLQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID0gKChwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgqNykgKyAoU2lnbmFsU3RyZW5ndGgqMykpIC8gMTA7DQotCX0NCi0JZWxzZQ0KLQl7IC8vIEluaXRpYWxpemF0aW9uIGNhc2UuDQotCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPSBTaWduYWxTdHJlbmd0aDsNCi0JfQ0KLS8veytieSBhbXkgMDgwMzEyDQotCWlmKCBwcml2LT5MYXN0UnhQa3RBbnRlbm5hICkgLy9NYWluIGFudGVubmEuCQ0KLQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQrKzsJDQotCWVsc2UJIC8vIEF1eCBhbnRlbm5hLg0KLQkJcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCsrOw0KLS8vK2J5IGFteSAwODAzMTINCi0vLwlwcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHlSeE9rODE4NTogQWRSeE9rQ250OiAlZCBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVkXG4iLCBwcml2LT5BZFJ4T2tDbnQsIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCk7DQotfQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCUNoYW5nZSBBbnRlbm5hIFN3aXRjaC4NCi0vLw0KLWJvb2wNCi1TZXRBbnRlbm5hODE4NSgNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCi0JdTgJCXUxYkFudGVubmFJbmRleA0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotCWJvb2wgYkFudGVubmFTd2l0Y2hlZCA9IGZhbHNlOw0KLQ0KLS8vCXByaW50aygiK1NldEFudGVubmE4MTg1KCk6IEFudGVubmEgaXMgc3dpdGNoaW5nIHRvOiAlZCBcbiIsIHUxYkFudGVubmFJbmRleCk7DQotDQotCXN3aXRjaCh1MWJBbnRlbm5hSW5kZXgpDQotCXsNCi0JY2FzZSAwOg0KLQkJc3dpdGNoKHByaXYtPnJmX2NoaXApDQotCQl7DQotCQljYXNlIFJGX1pFQlJBMjoNCi0JCWNhc2UgUkZfWkVCUkE0Og0KLSNpZmRlZiBDT05GSUdfUlRMODE4NUINCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJCS8vIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LDB4MTEsIDB4OWIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuDQotCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDVjKTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4NCi0NCi0jZWxzZQ0KLQkJCS8vIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLg0KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1Yyk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuDQotI2VuZGlmDQotI2VuZGlmDQotDQotCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7DQotCQkJYnJlYWs7DQotDQotCQlkZWZhdWx0Og0KLQkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biBSRkNoaXBJRCglZClcbiIsIHByaXYtPnJmX2NoaXApOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotDQotCWNhc2UgMToNCi0JCXN3aXRjaChwcml2LT5yZl9jaGlwKQ0KLQkJew0KLQkJY2FzZSBSRl9aRUJSQTI6DQotCQljYXNlIFJGX1pFQlJBNDoNCi0jaWZkZWYgQ09ORklHX1JUTDgxODVCDQotI2lmZGVmIENPTkZJR19SVEw4MThYX1MNCi0JCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLg0KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuDQotI2Vsc2UNCi0JCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLg0KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuDQotI2VuZGlmDQotI2VuZGlmDQotDQotCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7DQotCQkJYnJlYWs7DQotDQotCQlkZWZhdWx0Og0KLQkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biBSRkNoaXBJRCglZClcbiIsIHByaXYtPnJmX2NoaXApOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotDQotCWRlZmF1bHQ6DQotCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtvd24gdTFiQW50ZW5uYUluZGV4KCVkKVxuIiwgdTFiQW50ZW5uYUluZGV4KTsNCi0JCWJyZWFrOw0KLQl9DQotDQotCWlmKGJBbnRlbm5hU3dpdGNoZWQpDQotCXsNCi0JCXByaXYtPkN1cnJBbnRlbm5hSW5kZXggPSB1MWJBbnRlbm5hSW5kZXg7DQotCX0NCi0NCi0vLwlwcmludGsoIi1TZXRBbnRlbm5hODE4NSgpOiByZXR1cm4gKCUjWClcbiIsIGJBbnRlbm5hU3dpdGNoZWQpOw0KLQ0KLQlyZXR1cm4gYkFudGVubmFTd2l0Y2hlZDsNCi19DQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJVG9nZ2xlIEFudGVubmEgc3dpdGNoLg0KLS8vDQotYm9vbA0KLVN3aXRjaEFudGVubmEoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQ0KLQlib29sCQliUmVzdWx0Ow0KLQ0KLQlpZihwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDApDQotCXsNCi0jaWYgMC8vbHptIGRlbCAwODA4MjYNCi0vL2J5IGFteSAwODAzMTINCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJaWYocHJpdi0+YlN3QW50ZW5uYURpdmVyaXR5KQ0KLQkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hQ29uZmlnODdTRShkZXYsIDEsIHRydWUpOw0KLQkJZWxzZQkJCQ0KLSNlbmRpZg0KLSNlbmRpZg0KLQkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDEpOw0KLS8vYnkgYW15IDA4MDMxMg0KLS8vCQlwcmludGsoIlN3aXRjaEFudGVubmEoKTogc3dpdGNoaW5nIHRvIGFudGVubmEgMSAuLi4uLi5cbiIpOw0KLS8vCQliUmVzdWx0ID0gU2V0QW50ZW5uYTgxODUoZGV2LCAxKTsvLy1ieSBhbXkgMDgwMzEyDQotCX0NCi0JZWxzZQ0KLQl7DQotI2lmIDAvL2x6bSBkZWwgMDgwODI2DQotLy9ieSBhbXkgMDgwMzEyDQotI2lmZGVmIENPTkZJR19SVEw4MThYX1MNCi0JCWlmKHByaXYtPmJTd0FudGVubmFEaXZlcml0eSkNCi0JCQliUmVzdWx0ID0gU2V0QW50ZW5uYUNvbmZpZzg3U0UoZGV2LCAwLCB0cnVlKTsNCi0JCWVsc2UJDQotI2VuZGlmDQotI2VuZGlmDQotCQkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMCk7DQotLy9ieSBhbXkgMDgwMzEyDQotLy8JCXByaW50aygiU3dpdGNoQW50ZW5uYSgpOiBzd2l0Y2hpbmcgdG8gYW50ZW5uYSAwIC4uLi4uLlxuIik7DQotLy8JCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDApOy8vLWJ5IGFteSAwODAzMTINCi0JfQ0KLQ0KLQlyZXR1cm4gYlJlc3VsdDsNCi19DQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJRW5naW5lIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5IG1lY2hhbmlzbS4NCi0vLwkJU2luY2UgODE4NyBoYXMgbm8gVHggcGFydCBpbmZvcm1hdGlvbiwgDQotLy8JCXRoaXMgaW1wbGVtZW50YXRpb24gaXMgb25seSBkZXBlbmRlbmQgb24gUnggcGFydCBpbmZvcm1hdGlvbi4gDQotLy8NCi0vLwkyMDA2LjA0LjE3LCBieSByY25qa28uDQotLy8NCi12b2lkDQotU3dBbnRlbm5hRGl2ZXJzaXR5KA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JYm9vbCAgIGJTd0NoZWNrU1M9ZmFsc2U7DQotLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEN1cnJBbnRlbm5hSW5kZXg6ICVkXG4iLCBwcml2LT5DdXJyQW50ZW5uYUluZGV4KTsNCi0vLwlwcmludGsoIkFkVGlja0NvdW50IGlzICVkXG4iLHByaXYtPkFkVGlja0NvdW50KTsNCi0vL2J5IGFteSAwODAzMTINCi0JaWYoYlN3Q2hlY2tTUykNCi0Jew0KLQkJcHJpdi0+QWRUaWNrQ291bnQrKzsNCi0JDQotCQlwcmludGsoIigxKSBBZFRpY2tDb3VudDogJWQsIEFkQ2hlY2tQZXJpb2Q6ICVkXG4iLCANCi0JCQlwcml2LT5BZFRpY2tDb3VudCwgcHJpdi0+QWRDaGVja1BlcmlvZCk7DQotCQlwcmludGsoIigyKSBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVsZCwgQWRSeFNzVGhyZXNob2xkOiAlbGRcbiIsIA0KLQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsNCi0JfQ0KLS8vCXByaXYtPkFkVGlja0NvdW50Kys7Ly8tYnkgYW15IDA4MDMxMg0KLQkNCi0JLy8gQ2FzZSAxLiBObyBMaW5rLg0KLQlpZihwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpDQotCXsNCi0JLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAxLiBObyBMaW5rLlxuIik7DQotDQotCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotCQkvLyBJIHN3aXRjaCBhbnRlbm5hIGhlcmUgdG8gcHJldmVudCBhbnkgb25lIG9mIGFudGVubmEgaXMgYnJva2VuIGJlZm9yZSBsaW5rIGVzdGFibGlzaGVkLCAyMDA2LjA0LjE4LCBieSByY25qa28uLg0KLQkJU3dpdGNoQW50ZW5uYShkZXYpOw0KLQl9DQotCS8vIENhc2UgMi4gTGlua2VkIGJ1dCBubyBwYWNrZXQgcmVjZWl2ZWQuDQotCWVsc2UgaWYocHJpdi0+QWRSeE9rQ250ID09IDApDQotCXsNCi0JLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAyLiBMaW5rZWQgYnV0IG5vIHBhY2tldCByZWNlaXZlZC5cbiIpOw0KLQ0KLQkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOw0KLQkJU3dpdGNoQW50ZW5uYShkZXYpOw0KLQl9DQotCS8vIENhc2UgMy4gRXZhbHVhdGUgbGFzdCBhbnRlbm5hIHN3aXRjaCBhY3Rpb24gYW5kIHVuZG8gaXQgaWYgbmVjZXNzYXJ5Lg0KLQllbHNlIGlmKHByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPT0gdHJ1ZSkNCi0Jew0KLQkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDMuIEV2YWx1YXRlIGxhc3QgYW50ZW5uYSBzd2l0Y2ggYWN0aW9uLlxuIik7DQotDQotCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotDQotCQkvLyBBZGp1c3QgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQuDQotCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoICsgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpIC8gMjsNCi0NCi0JCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPiBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpID8JDQotCQkJCQlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQ6IHByaXYtPkFkUnhTc1RocmVzaG9sZDsNCi0JCWlmKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA8IHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKQ0KLQkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgbm90IGltcHJvdmVkIGFmdGVyIHdlIHN3dGljaGVkIGFudGVubmEuID0+IFN3aWNoIGJhY2suDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgbm90IGltcHJvdmVkLCBDdXJyUnhTczogJWQsIExhc3RSeFNzOiAlZFxuIiwgDQotLy8JCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NCZWZvcmVTd2l0Y2hlZCk7DQotLy9ieSBhbXkgMDgwMzEyDQotCQkJLy8gSW5jcmVhc2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kIGR1ZSB0byBiYWQgZGVjaXNpb24uDQotCQkJcHJpdi0+QWRDaGVja1BlcmlvZCAqPSAyOw0KLS8vYnkgYW15IDA4MDMxMg0KLQkJCS8vIEluY3JlYXNlIEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZC4NCi0JCQlpZihwcml2LT5BZENoZWNrUGVyaW9kID4gcHJpdi0+QWRNYXhDaGVja1BlcmlvZCkNCi0JCQkJcHJpdi0+QWRDaGVja1BlcmlvZCA9IHByaXYtPkFkTWF4Q2hlY2tQZXJpb2Q7DQotCQ0KLQkJCS8vIFdyb25nIGRlY2Vpc2lvbiA9PiBzd2l0Y2ggYmFjay4NCi0JCQlTd2l0Y2hBbnRlbm5hKGRldik7DQotCQl9DQotCQllbHNlDQotCQl7IC8vIFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBpbXByb3ZlZC4gDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgaW1wcm92ZWQsIEN1cnJSeFNzOiAlZCwgTGFzdFJ4U3M6ICVkXG4iLCANCi0vLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKTsNCi0NCi0JCQkvLyBSZXNldCBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgdG8gaXRzIG1pbiB2YWx1ZS4NCi0JCQlwcml2LT5BZENoZWNrUGVyaW9kID0gcHJpdi0+QWRNaW5DaGVja1BlcmlvZDsNCi0JCX0NCi0NCi0vLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQWRSeFNzVGhyZXNob2xkOiAlZCwgQWRDaGVja1BlcmlvZDogJWRcbiIsDQotLy8JCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQsIHByaXYtPkFkQ2hlY2tQZXJpb2QpOw0KLQl9DQotCS8vIENhc2UgNC4gRXZhbHVhdGUgaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93Lg0KLQkvLyBDYXVzZSBUYWJsZSBTcGVlZCBpcyB2ZXJ5IGZhc3QgaW4gVFJDIERlbGwgTGFiLCB3ZSBjaGVjayBpdCBldmVyeSB0aW1lLiANCi0JZWxzZS8vIGlmKHByaXYtPkFkVGlja0NvdW50ID49IHByaXYtPkFkQ2hlY2tQZXJpb2QpLy8tYnkgYW15IDA4MDMxMg0KLQl7DQotLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IENhc2UgNC4gRXZhbHVhdGUgaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93LlxuIik7DQotDQotCQlwcml2LT5BZFRpY2tDb3VudCA9IDA7DQotDQotCQkvLw0KLQkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeE9rIGNvdW50cyBmb3IgZWFjaCBhbnRlbm5hIGZpcnN0IGFuZCB0aGFuIA0KLQkJLy8gZXZhbHVhdGUgc2lnbmFsIHN0cmVuZ3RoLiANCi0JCS8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIGNhbiBvdmVyY29tZSB0aGUgZGlzYWJpbGl0eSBvZiBDQ0Egb24gYm90aCB0d28gYW50ZW5uYXMNCi0JCS8vIFdoZW4gc2lnbmFsIHN0cmVuZ3RoIHdhcyBleHRyZW1lbHkgbG93IG9yIGhpZ2guDQotCQkvLyAyMDA4LjAxLjMwLg0KLQkJLy8gDQotCQkNCi0JCS8vDQotCQkvLyBFdmFsdWF0ZSBSeE9rIGNvdW50IGZyb20gZWFjaCBhbnRlbm5hIGlmIHdlIHNoYWxsIHN3aXRjaCBkZWZhdWx0IGFudGVubmEgbm93Lg0KLQkJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDguMDIuMjEuDQotLy97YnkgYW15IDA4MDMxMg0KLQkJaWYoKHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250IDwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCkgDQotCQkJJiYgKHByaXYtPkN1cnJBbnRlbm5hSW5kZXggPT0gMCkpDQotCQl7IC8vIFdlIHNldCBNYWluIGFudGVubmEgYXMgZGVmYXVsdCBidXQgUnhPayBjb3VudCB3YXMgbGVzcyB0aGFuIEF1eCBvbmVzLg0KLQ0KLQkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogTWFpbiBhbnRlbm5hIFJ4T0sgaXMgcG9vciwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwgDQotCS8vCQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQsIHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQpOw0KLQkJCQ0KLQkJCS8vIFN3aXRjaCB0byBBdXggYW50ZW5uYS4NCi0JCQlTd2l0Y2hBbnRlbm5hKGRldik7CQ0KLQkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOw0KLQkJfQ0KLQkJZWxzZSBpZigocHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCA8IHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250KSANCi0JCQkmJiAocHJpdi0+Q3VyckFudGVubmFJbmRleCA9PSAxKSkNCi0JCXsgLy8gV2Ugc2V0IEF1eCBhbnRlbm5hIGFzIGRlZmF1bHQgYnV0IFJ4T2sgY291bnQgd2FzIGxlc3MgdGhhbiBNYWluIG9uZXMuDQotDQotCS8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBBdXggYW50ZW5uYSBSeE9LIGlzIHBvb3IsIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsIA0KLQkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsNCi0JCQkNCi0JCQkvLyBTd2l0Y2ggdG8gTWFpbiBhbnRlbm5hLg0KLQkJCVN3aXRjaEFudGVubmEoZGV2KTsNCi0JCQlwcml2LT5iSFdBZFN3aXRjaGVkID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsvLyBEZWZhdWx0IGFudGVubmEgaXMgYmV0dGVyLg0KLQ0KLQkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogRGVmYXVsdCBhbnRlbm5hIGlzIGJldHRlci4sIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsIA0KLQkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsNCi0NCi0JCQkvLyBTdGlsbCBuZWVkIHRvIGNoZWNrIGN1cnJlbnQgc2lnbmFsIHN0cmVuZ3RoLg0KLQkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSBmYWxzZTsJDQotCQl9DQotCQkvLw0KLQkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeCBzaWduYWwgc3RyZW5ndGggT05MWSB3aGVuIGRlZmF1bHQgYW50ZW5uYSANCi0JCS8vIGRpZG4ndCBjaGFuZ2VkIGJ5IEhXIGV2YWx1YXRpb24uIA0KLQkJLy8gMjAwOC4wMi4yNy4NCi0JCS8vDQotCQkvLyBbVFJDIERlbGwgTGFiXSBTaWduYWxTdHJlbmd0aCBpcyBpbmFjY3VyYWN5LiBJc2FpYWggMjAwOC0wMy0wNSANCi0JCS8vIEZvciBleGFtcGxlLCBUaHJvdWdocHV0IG9mIGF1eCBpcyBiZXR0ZXIgdGhhbiBtYWluIGFudGVubmEoYWJvdXQgMTBNIHYucyAyTSksIA0KLQkJLy8gYnV0IEFkUnhTaWduYWxTdHJlbmd0aCBpcyBsZXNzIHRoYW4gbWFpbi4gDQotCQkvLyBPdXIgZ3Vlc3MgaXMgdGhhdCBtYWluIGFudGVubmEgaGF2ZSBsb3dlciB0aHJvdWdocHV0IGFuZCBnZXQgbWFueSBjaGFuZ2UgDQotCQkvLyB0byByZWNlaXZlIG1vcmUgQ0NLIHBhY2tldHMoZXguQmVhY29uKSB3aGljaCBoYXZlIHN0cm9uZ2VyIFNpZ25hbFN0cmVuZ3RoLg0KLQkJLy8NCi0JCWlmKCAoIXByaXYtPmJIV0FkU3dpdGNoZWQpICYmIChiU3dDaGVja1NTKSkNCi0JCXsNCi0vL2J5IGFteSAwODAzMTJ9DQotCQkvLyBFdmFsdWF0ZSBSeCBzaWduYWwgc3RyZW5ndGggaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93Lg0KLQkJaWYocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoIDwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKQ0KLQkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgd2VhayA9PiBTd2l0Y2ggQW50ZW5uYS4NCi0vLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyB3ZWFrLCBDdXJyUnhTczogJWQsIFJ4U3NUaHJlc2hvbGQ6ICVkXG4iLCANCi0vLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CQ0KLQ0KLQkJCXByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkID0gcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoOyANCi0JCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gdHJ1ZTsNCi0NCi0JCQlTd2l0Y2hBbnRlbm5hKGRldik7DQotCQl9DQotCQllbHNlDQotCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyBPSy4gDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgT0ssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsIA0KLS8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsNCi0NCi0JCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotCQkJLy8gSW5jcmVhc2UgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQgaWYgbmVjZXNzYXJ5Lg0KLQkJCWlmKAkocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID4gKHByaXYtPkFkUnhTc1RocmVzaG9sZCArIDEwKSkgJiYgLy8gU2lnbmFsIGlzIG11Y2ggc3Ryb25nZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZA0KLQkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPD0gcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkKSAvLyBDdXJyZW50IHRocmVob2xkIGlzIG5vdCB5ZXQgcmVhY2ggdXBwZXIgbGltaXQuDQotCQkJew0KLQkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNzVGhyZXNob2xkICsgcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKSAvIDI7DQotCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPiBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpID8NCi0JCQkJCQkJCQkJCQlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQ6IHByaXYtPkFkUnhTc1RocmVzaG9sZDsvLytieSBhbXkgMDgwMzEyDQotCQkJfQ0KLQ0KLQkJCS8vIFJlZHVjZSBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgaWYgcG9zc2libGUuIA0KLQkJCWlmKCBwcml2LT5BZENoZWNrUGVyaW9kID4gcHJpdi0+QWRNaW5DaGVja1BlcmlvZCApDQotCQkJew0KLQkJCQlwcml2LT5BZENoZWNrUGVyaW9kIC89IDI7IA0KLQkJCX0NCi0JCX0NCi0JCX0NCi0JfQ0KLS8vYnkgYW15IDA4MDMxMg0KLQkvLyBSZXNldCBhbnRlbm5hIGRpdmVyc2l0eSBSeCByZWxhdGVkIHN0YXRpc3RpY3MuDQotCXByaXYtPkFkUnhPa0NudCA9IDA7DQotCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250ID0gMDsNCi0JcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCA9IDA7DQotLy9ieSBhbXkgMDgwMzEyDQotDQotLy8JcHJpdi0+QWRSeE9rQ250ID0gMDsvLy1ieSBhbXkgMDgwMzEyDQotDQotLy8JcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5KClcbiIpOw0KLX0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlSZXR1cm4gVFJVRSBpZiB3ZSBzaGFsbCBwZXJmb3JtIFR4IFBvd2VyIFRyYWNraW5nIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgkNCi0vLw0KLWJvb2wNCi1DaGVja1R4UHdyVHJhY2tpbmcoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotDQotCWlmKCFwcml2LT5iVHhQb3dlclRyYWNrKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0vL2x6bSByZXNlcnZlZCAwODA4MjYNCi0JLy9pZihwcml2LT5iU2NhbkluUHJvZ3Jlc3MpDQotCS8vew0KLQkvLwlyZXR1cm4gZmFsc2U7DQotCS8vfQ0KLQ0KLQkvL2lmIDg3U0UgaXMgaW4gSGlnaCBQb3dlciAsIGRvbid0IGRvIFR4IFBvd2VyIFRyYWNraW5nLiBhc2tlZCBieSBTRDMgRUQuIDIwMDgtMDgtMDggSXNhaWFoIA0KLQlpZihwcml2LT5iVG9VcGRhdGVUeFB3cikNCi0Jew0KLQkJcmV0dXJuIGZhbHNlOw0KLQl9DQotCQkNCi0JcmV0dXJuIHRydWU7DQotfQ0KLQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5Lg0KLS8vDQotdm9pZA0KLVN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQlSVF9SRl9QT1dFUl9TVEFURSBydFN0YXRlOw0KLQkNCi0JLy9wcmludGsoIitTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKClcbiIpOw0KLQ0KLQkvLw0KLQkvLyBXZSBkbyBOT1QgbmVlZCB0byBzd2l0Y2ggYW50ZW5uYSB3aGlsZSBSRiBpcyBvZmYuDQotCS8vIDIwMDcuMDUuMDksIGFkZGVkIGJ5IFJvZ2VyLg0KLQkvLw0KLQlydFN0YXRlID0gcHJpdi0+ZVJGUG93ZXJTdGF0ZTsNCi0JZG97DQotCQlpZiAocnRTdGF0ZSA9PSBlUmZPZmYpDQotCQl7CQ0KLS8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHlUaW1lciAtIFJGIGlzIE9GRi5cbiIpOw0KLQkJCWJyZWFrOw0KLQkJfSAgCQ0KLQkJZWxzZSBpZiAocnRTdGF0ZSA9PSBlUmZTbGVlcCkNCi0JCXsJDQotCQkJLy8gRG9uJ3QgYWNjZXNzIEJCL1JGIHVuZGVyIERpc2FibGUgUExMIHNpdHVhdGlvbi4NCi0JCQkvL1JUX1RSQUNFKChDT01QX1JGfENPTVBfQU5URU5OQSksIERCR19MT1VELCAoIlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soKTogUkYgaXMgU2xlZXAgPT4gc2tpcCBpdFxuIikpOw0KLQkJCWJyZWFrOw0KLQkJfSAgDQotCQlTd0FudGVubmFEaXZlcnNpdHkoZGV2KTsNCi0NCi0JfXdoaWxlKGZhbHNlKTsNCi0NCi0JaWYocHJpdi0+dXApDQotCXsNCi0JCXByaXYtPlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTVNFQ1MoQU5URU5OQV9ESVZFUlNJVFlfVElNRVJfUEVSSU9EKTsNCi0JCWFkZF90aW1lcigmcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIpOw0KLQl9DQotDQotCS8vcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygpXG4iKTsNCi19DQotDQorLy8jaW5jbHVkZSAicjgxODAuaCIKKyNpbmNsdWRlICJyODE4MF9kbS5oIgorI2luY2x1ZGUgInI4MTgwX2h3LmgiCisjaW5jbHVkZSAicjgxODBfOTNjeDYuaCIKKy8ve2J5IGFteSAwODAzMTIKKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gSGlnaCBQb3dlciBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4KKy8vCisvLytieSBhbXkgMDgwMzEyCisjZGVmaW5lIFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EICAgICAgMzAwCisKK2Jvb2wgQ2hlY2tIaWdoUG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CisKKwlpZighcHJpdi0+YlJlZ0hpZ2hQb3dlck1lY2hhbmlzbSkKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEX1NDQU5OSU5HKQorCXsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJVXBkYXRlIFR4IHBvd2VyIGxldmVsIGlmIG5lY2Vzc2FyeS4KKy8vCQlTZWUgYWxzbyBEb1J4SGlnaFBvd2VyKCkgYW5kIFNldFR4UG93ZXJMZXZlbDgxODUoKSBmb3IgcmVmZXJlbmNlLgorLy8KKy8vCU5vdGU6CisvLwkJVGhlIHJlYXNvbiB3aHkgd2UgdWRwYXRlIFR4IHBvd2VyIGxldmVsIGhlcmUgaW5zdGVhZCBvZiBEb1J4SGlnaFBvd2VyKCkKKy8vCQlpcyB0aGUgbnVtYmVyIG9mIElPIHRvIGNoYW5nZSBUeCBwb3dlciBpcyBtdWNoIG1vcmUgdGhhbiBjaGFuZSBUUiBzd2l0Y2gKKy8vCQlhbmQgdGhleSBhcmUgcmVsYXRlZCB0byBPRkRNIGFuZCBNQUMgcmVnaXN0ZXJzLgorLy8JCVNvLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBpdCBzbyBmcmVxdWVudGx5IGluIHBlci1SeCBwYWNrZXQgYmFzZS4KKy8vCit2b2lkCitEb1R4SGlnaFBvd2VyKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXUxNgkJCUhpUHdyVXBwZXJUaCA9IDA7CisJdTE2CQkJSGlQd3JMb3dlclRoID0gMDsKKwl1OAkJCVJTU0lIaVB3clVwcGVyVGg7CisJdTgJCQlSU1NJSGlQd3JMb3dlclRoOworCXU4CQkJdTFiVG1wOworCWNoYXIJCQlPZmRtVHhQd3JJZHgsIENja1R4UHdySWR4OworCisJLy9wcmludGsoIi0tLS0+IERvVHhIaWdoUG93ZXIoKVxuIik7CisKKwlIaVB3clVwcGVyVGggPSBwcml2LT5SZWdIaVB3clVwcGVyVGg7CisJSGlQd3JMb3dlclRoID0gcHJpdi0+UmVnSGlQd3JMb3dlclRoOworCisJSGlQd3JVcHBlclRoID0gSGlQd3JVcHBlclRoICogMTA7CisJSGlQd3JMb3dlclRoID0gSGlQd3JMb3dlclRoICogMTA7CisJUlNTSUhpUHdyVXBwZXJUaCA9IHByaXYtPlJlZ1JTU0lIaVB3clVwcGVyVGg7CisJUlNTSUhpUHdyTG93ZXJUaCA9IHByaXYtPlJlZ1JTU0lIaVB3ckxvd2VyVGg7CisKKwkvL2x6bSBhZGQgMDgwODI2CisJT2ZkbVR4UHdySWR4ICA9IHByaXYtPmNodHhwd3Jfb2ZkbVtwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsKKwlDY2tUeFB3cklkeCAgPSBwcml2LT5jaHR4cHdyW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOworCisJLy8JcHJpbnRrKCJEb1R4SGlnaFBvd2VyKCkgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsIEN1ckNDS1JTU0kgPSAlZCAsIGJDdXJDQ0tQa3Q9ICVkIFxuIiwgcHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTLCBwcml2LT5DdXJDQ0tSU1NJLCBwcml2LT5iQ3VyQ0NLUGt0ICk7CisKKwlpZigocHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTID4gSGlQd3JVcHBlclRoKSB8fAorCQkocHJpdi0+YkN1ckNDS1BrdCAmJiAocHJpdi0+Q3VyQ0NLUlNTSSA+IFJTU0lIaVB3clVwcGVyVGgpKSkKKwl7CisJCS8vIFN0ZXZlbmwgc3VnZ2VzdGVkIHRoYXQgZGVncmFkZSA4ZGJtIGluIGhpZ2ggcG93ZXIgc2F0ZS4gMjAwNy0xMi0wNCBJc2FpYWgKKworCS8vCXByaW50aygiPT09PT0+RG9UeEhpZ2hQb3dlcigpIC0gSGlnaCBQb3dlciAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgIEhpUHdyVXBwZXJUaCA9ICVkIFxuIiwgcHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTLCBIaVB3clVwcGVyVGggKTsKKwkJcHJpdi0+YlRvVXBkYXRlVHhQd3IgPSB0cnVlOworCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCisJCS8vIElmIGl0IG5ldmVyIGVudGVyIEhpZ2ggUG93ZXIuCisJCWlmKCBDY2tUeFB3cklkeCA9PSB1MWJUbXApCisJCXsKKwkJdTFiVG1wID0gKHUxYlRtcCA+IDE2KSA/ICh1MWJUbXAgLTE2KTogMDsgIC8vIDhkYm0KKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7CisKKwkJdTFiVG1wPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7CisJCXUxYlRtcCA9ICh1MWJUbXAgPiAxNikgPyAodTFiVG1wIC0xNik6IDA7ICAvLyA4ZGJtCisJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiVG1wKTsKKwkJfQorCisJfQorCWVsc2UgaWYoKHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUyA8IEhpUHdyTG93ZXJUaCkgJiYKKwkJKCFwcml2LT5iQ3VyQ0NLUGt0IHx8IHByaXYtPkN1ckNDS1JTU0kgPCBSU1NJSGlQd3JMb3dlclRoKSkKKwl7CisJLy8JIHByaW50aygiRG9UeEhpZ2hQb3dlcigpIC0gbG93ZXIgUG93ZXIgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsICBIaVB3clVwcGVyVGggPSAlZCBcbiIsIHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUywgSGlQd3JMb3dlclRoICk7CisJCWlmKHByaXYtPmJUb1VwZGF0ZVR4UHdyKQorCQl7CisJCQlwcml2LT5iVG9VcGRhdGVUeFB3ciA9IGZhbHNlOworCQkJLy9TRDMgcmVxdWlyZWQuCisJCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCQkJaWYodTFiVG1wIDwgQ2NrVHhQd3JJZHgpCisJCQl7CisJCQkvL3UxYlRtcCA9ICgodTFiVG1wKzE2KSA+IDM1KSA/IDM1OiAodTFiVG1wKzE2KTsgIC8vIDhkYm0KKwkJCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENDS19UWEFHQywgQ2NrVHhQd3JJZHgpOworCQkJfQorCisJCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsKKwkJCWlmKHUxYlRtcCA8IE9mZG1UeFB3cklkeCkKKwkJCXsKKwkJCS8vdTFiVG1wID0gKCh1MWJUbXArMTYpID4gMzUpID8gMzU6ICh1MWJUbXArMTYpOyAgLy8gOGRibQorCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYlRtcCk7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIE9mZG1UeFB3cklkeCk7CisJCQl9CisJCX0KKwl9CisKKwkvL3ByaW50aygiPC0tLS0gRG9UeEhpZ2hQb3dlcigpXG4iKTsKK30KKworCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJQ2FsbGJhY2sgZnVuY3Rpb24gb2YgVXBkYXRlVHhQb3dlcldvcmtJdGVtLgorLy8JCUJlY2F1c2Ugb2Ygc29tZSBldmVudCBoYXBwZW5kLCBlLmcuIENDWCBUUEMsIEhpZ2ggUG93ZXIgTWVjaGFuaXNtLAorLy8JCVdlIHVwZGF0ZSBUeCBwb3dlciBvZiBjdXJyZW50IGNoYW5uZWwgYWdhaW4uCisvLworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsKKy8vICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOworICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CisgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLHR4X3B3X3dxKTsKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKKyNlbHNlCit2b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvLyBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisjZW5kaWYKKworLy8JcHJpbnRrKCItLS0tPiBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsKKworCURvVHhIaWdoUG93ZXIoZGV2KTsKKworLy8JcHJpbnRrKCI8LS0tLSBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsKK30KKworCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBESUcgTWVjYWhuaXNtLCBGQUxTRSBvdGhlcndpc2UuCisvLworYm9vbAorQ2hlY2tEaWcoCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CisKKwlpZighcHJpdi0+YkRpZ01lY2hhbmlzbSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYoaWVlZS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkKKwkJcmV0dXJuIGZhbHNlOworCisJLy9pZihwcml2LT5DdXJyZW50T3BlcmFSYXRlIDwgMzYpIC8vIFNjaGVkdWxlIERpZyB1bmRlciBhbGwgT0ZETSByYXRlcy4gQnkgQnJ1Y2UsIDIwMDctMDYtMDEuCisJaWYoKHByaXYtPmllZWU4MDIxMS0+cmF0ZS81KSA8IDM2KSAvLyBTY2hlZHVsZSBEaWcgdW5kZXIgYWxsIE9GRE0gcmF0ZXMuIEJ5IEJydWNlLCAyMDA3LTA2LTAxLgorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJSW1wbGVtZW50YXRpb24gb2YgRElHIGZvciBaZWJyYSBhbmQgWmVicmEyLgorLy8KK3ZvaWQKK0RJR19aZWJyYSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1MTYJCQlDQ0tGYWxzZUFsYXJtLCBPRkRNRmFsc2VBbGFybTsKKwl1MTYJCQlPZmRtRkExLCBPZmRtRkEyOworCWludAkJCUluaXRpYWxHYWluU3RlcCA9IDc7IC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0YWdlcy4KKwlpbnQJCQlMb3dlc3RHYWluU3RhZ2UgPSA0OyAvLyBUaGUgY2FwYWJsZSBsb3dlc3Qgc3RhZ2Ugb2YgcGVyZm9ybWluZyBkaWcgd29ya2l0ZW0uCisJdTMyIAkJCUF3YWtlUGVyaW9kSW4yU2VjPTA7CisKKwkvL3ByaW50aygiLS0tLS0tLS0tPiBESUdfWmVicmEoKVxuIik7CisKKwlDQ0tGYWxzZUFsYXJtID0gKHUxNikocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlICYgMHgwMDAwZmZmZik7CisJT0ZETUZhbHNlQWxhcm0gPSAodTE2KSgocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlID4+IDE2KSAmIDB4MDAwMGZmZmYpOworCU9mZG1GQTEgPSAgMHgxNTsKKwlPZmRtRkEyID0gKCh1MTYpKHByaXYtPlJlZ0RpZ09mZG1GYVVwVGgpKSA8PCA4OworCisvLwlwcmludGsoIkRJRyoqKioqKioqKipDQ0sgRmFsc2UgQWxhcm06ICUjWCBcbiIsQ0NLRmFsc2VBbGFybSk7CisvLwlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1ggXG4iLE9GRE1GYWxzZUFsYXJtKTsKKworICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGluaXRpYWwgZ2FpbiBzdGVwcyBpcyBkaWZmZXJlbnQsIGJ5IEJydWNlLCAyMDA3LTA0LTEzLgorCWlmIChwcml2LT5Jbml0aWFsR2FpbiA9PSAwICkgLy9hdXRvRElHCisJeyAvLyBBZHZpc2VkIGZyb20gU0QzIERaCisJCXByaXYtPkluaXRpYWxHYWluID0gNDsgLy8gSW4gODdCLCBtNzRkQm0gbWVhbnMgU3RhdGUgNCAobTgyZEJtKQorCX0KKwkvL2lmKHBIYWxEYXRhLT5WZXJzaW9uSUQgIT0gVkVSU0lPTl84MTg3Ql9CKQorCXsgLy8gQWR2aXNlZCBmcm9tIFNEMyBEWgorCQlPZmRtRkExID0gIDB4MjA7CisJfQorCisjaWYgMSAvL2x6bSByZXNlcnZlZCAwODA4MjYKKwlBd2FrZVBlcmlvZEluMlNlYyA9ICgyMDAwLXByaXYgLT5Eb3plUGVyaW9kSW5QYXN0MlNlYyk7CisJLy9wcmludGsoIiYmJiBEb3plUGVyaW9kPSVkIEF3YWtlUGVyaW9kPSVkXG4iLCBwcml2LT5Eb3plUGVyaW9kSW5QYXN0MlNlYywgQXdha2VQZXJpb2RJbjJTZWMpOworCXByaXYgLT5Eb3plUGVyaW9kSW5QYXN0MlNlYz0wOworCisJaWYoQXdha2VQZXJpb2RJbjJTZWMpCisJeworCQkvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfVFJBQ0UsICgiRElHOiBBd2FrZVBlcmlvZEluMlNlYyglZCkgLSBGQVRoKDB4JVggLCAweCVYKSAtPiIsQXdha2VQZXJpb2RJbjJTZWMsIE9mZG1GQTEsIE9mZG1GQTIpKTsKKwkJLy8gYWRqdWVzdCBESUcgdGhyZXNob2xkLgorCQlPZmRtRkExID0gICh1MTYpKChPZmRtRkExKkF3YWtlUGVyaW9kSW4yU2VjKSAgLyAyMDAwKSA7CisJCU9mZG1GQTIgPSAgKHUxNikoKE9mZG1GQTIqQXdha2VQZXJpb2RJbjJTZWMpICAvIDIwMDApIDsKKwkJLy9SVF9UUkFDRShDT01QX0RJRywgREJHX1RSQUNFLCAoIiggMHglWCAsIDB4JVgpXG4iLCBPZmRtRkExLCBPZmRtRkEyKSk7CisJfQorCWVsc2UKKwl7CisJCTsvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfV0FSTklORywgKCJFUlJPUiEhICBBd2FrZVBlcmlvZEluMlNlYyBzaG91bGQgbm90IGJlIFpFUk8hIVxuIikpOworCX0KKyNlbmRpZgorCisJSW5pdGlhbEdhaW5TdGVwID0gODsKKwlMb3dlc3RHYWluU3RhZ2UgPSBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZTsgLy8gTG93ZXN0IGdhaW4gc3RhZ2UuCisKKwlpZiAoT0ZETUZhbHNlQWxhcm0gPiBPZmRtRkExKQorCXsKKwkJaWYgKE9GRE1GYWxzZUFsYXJtID4gT2ZkbUZBMikKKwkJeworCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSsrOworCQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUgPjEpCisJCQl7CisJCQkJLy9zZXJpb3VzIE9GRE0gIEZhbHNlIEFsYXJtLCBuZWVkIGZhbGxiYWNrCisJCQkJaWYgKHByaXYtPkluaXRpYWxHYWluIDwgSW5pdGlhbEdhaW5TdGVwKQorCQkJCXsKKwkJCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOworCisJCQkJCXByaXYtPkluaXRpYWxHYWluID0gKHByaXYtPkluaXRpYWxHYWluICsgMSk7CisvLwkJCQkJcHJpbnRrKCJESUcqKioqKioqKioqT0ZETSBGYWxzZSBBbGFybTogJSNYLCAgT2ZkbUZBMTogJSNYLCBPZmRtRkEyOiAlI1hcbiIsIE9GRE1GYWxzZUFsYXJtLCBPZmRtRkExLCBPZmRtRkEyKTsKKy8vCQkJCQlwcmludGsoIkRJRysrKysrKysgZmFsbGJhY2sgT0ZETTolZCBcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKKwkJCQkJVXBkYXRlSW5pdGlhbEdhaW4oZGV2KTsKKwkJCQl9CisJCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7CisJCQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSkKKwkJCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlLS07CisJCX0KKwkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7CisJfQorCWVsc2UKKwl7CisJCWlmIChwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlKQorCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZS0tOworCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGUrKzsKKworCQlpZiAocHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPjkpCisJCXsKKwkJCWlmIChwcml2LT5Jbml0aWFsR2FpbiA+IExvd2VzdEdhaW5TdGFnZSkgLy8gSW4gODdCLCBtNzhkQm0gbWVhbnMgU3RhdGUgNCAobTg2NGRCbSkKKwkJCXsKKwkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47CisKKwkJCQlwcml2LT5Jbml0aWFsR2FpbiA9IChwcml2LT5Jbml0aWFsR2FpbiAtIDEpOworLy8JCQkJcHJpbnRrKCJESUcqKioqKioqKioqT0ZETSBGYWxzZSBBbGFybTogJSNYLCAgT2ZkbUZBMTogJSNYLCBPZmRtRkEyOiAlI1hcbiIsIE9GRE1GYWxzZUFsYXJtLCBPZmRtRkExLCBPZmRtRkEyKTsKKy8vCQkJCXByaW50aygiRElHLS0tLS0tLS0tIFVwZ3JhZGUgT0ZETTolZCBcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKKwkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOworCQkJfQorCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7CisJCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsKKwkJfQorCX0KKworLy8JcHJpbnRrKCJESUcrKysrKysrIE9GRE06JWRcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKKwkvL3ByaW50aygiPC0tLS0tLS0tLSBESUdfWmVicmEoKVxuIik7Cit9CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlEaXNwYXRjaCBESUcgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIFJGLgorLy8KK3ZvaWQKK0R5bmFtaWNJbml0R2FpbigKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCXN3aXRjaChwcml2LT5yZl9jaGlwKQorCXsKKwkJY2FzZSBSRl9aRUJSQTI6ICAvLyBbQW5uaWVXb3JrYXJvdW5kXSBGb3IgWmVicmEyLCAyMDA1LTA4LTAxLgorCQljYXNlIFJGX1pFQlJBNDoKKwkJCURJR19aZWJyYSggZGV2ICk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJEeW5hbWljSW5pdEdhaW4oKTogdW5rbm93biBSRkNoaXBJRCglZCkgISEhXG4iLCBwcml2LT5yZl9jaGlwKTsKKwkJCWJyZWFrOworCX0KK30KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKy8vICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CisvLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKKyAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19kaWdfd3EpOworICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OworI2Vsc2UKK3ZvaWQgcnRsODE4MF9od19kaWdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKworI2VuZGlmCisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJLy8gUmVhZCBDQ0sgYW5kIE9GRE0gRmFsc2UgQWxhcm0uCisJcHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBDQ0tfRkFMU0VfQUxBUk0pOworCisKKwkvLyBBZGp1c3QgSW5pdGlhbCBHYWluIGR5bmFtaWNhbGx5LgorCUR5bmFtaWNJbml0R2FpbihkZXYpOworCit9CisKK2ludAorSW5jbHVkZWRJblN1cHBvcnRlZFJhdGVzKAorICAgICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAgICAgICAqcHJpdiwKKyAgICAgICAgdTggICAgICAgICAgICAgIFR4UmF0ZSAgKQoreworICAgIHU4IHJhdGVfbGVuOworICAgICAgICB1OCByYXRlX2V4X2xlbjsKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgUmF0ZU1hc2sgPSAweDdGOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBpZHg7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIEZvdW5kID0gMDsKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgTmFpdmVUeFJhdGUgPSBUeFJhdGUmUmF0ZU1hc2s7CisKKyAgICByYXRlX2xlbiA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2xlbjsKKyAgICAgICAgcmF0ZV9leF9sZW4gPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5yYXRlc19leF9sZW47CisgICAgICAgIGZvciggaWR4PTA7IGlkeDwgcmF0ZV9sZW47IGlkeCsrICkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGZvciggaWR4PTA7IGlkeDwgcmF0ZV9leF9sZW47IGlkeCsrICkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfZXhbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRm91bmQ7CisgICAgICAgIGZvdW5kX3JhdGU6CisgICAgICAgIHJldHVybiBGb3VuZDsKK30KKworLy8KKy8vICAgICAgRGVzY3JpcHRpb246CisvLyAgICAgICAgICAgICAgR2V0IHRoZSBUeCByYXRlIG9uZSBkZWdyZWUgdXAgZm9ybSB0aGUgaW5wdXQgcmF0ZSBpbiB0aGUgc3VwcG9ydGVkIHJhdGVzLgorLy8gICAgICAgICAgICAgIFJldHVybiB0aGUgdXBncmFkZSByYXRlIGlmIGl0IGlzIHN1Y2Nlc3NlZCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgaW5wdXQgcmF0ZS4KKy8vICAgICAgQnkgQnJ1Y2UsIDIwMDctMDYtMDUuCisvLwordTgKK0dldFVwZ3JhZGVUeFJhdGUoCisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZQorICAgICAgICApCit7CisgICAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgVXBSYXRlOworCisgICAgICAgIC8vIFVwZ3JhZGUgMSBkZWdyZWUuCisgICAgICAgIHN3aXRjaChyYXRlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMTA4OiAvLyBVcCB0byA1NE1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gMTA4OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgOTY6IC8vIFVwIHRvIDU0TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSAxMDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA3MjogLy8gVXAgdG8gNDhNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDk2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDg6IC8vIFVwIHRvIDM2TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSA3MjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM2OiAvLyBVcCB0byAyNE1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gNDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyMjogLy8gVXAgdG8gMThNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDM2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTE6IC8vIFVwIHRvIDExTWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSAyMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6IC8vIFVwIHRvIDUuNU1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gMTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOiAvLyBVcCB0byAyTWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IElucHV0IFR4IFJhdGUoJWQpIGlzIHVuZGVmaW5lZCFcbiIsIHJhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiByYXRlOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSByYXRlIGlzIHZhbGlkLgorICAgICAgICBpZihJbmNsdWRlZEluU3VwcG9ydGVkUmF0ZXMocHJpdiwgVXBSYXRlKSkKKyAgICAgICAgeworLy8gICAgICAgICAgICAgIHByaW50aygiR2V0VXBncmFkZVR4UmF0ZSgpOiBHZXRVcGdyYWRlIFR4IHJhdGUoJWQpIGZyb20gJWQgIVxuIiwgVXBSYXRlLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVXBSYXRlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBVcFJhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiByYXRlOworICAgICAgICB9CisgICAgICAgIHJldHVybiByYXRlOworfQorLy8KKy8vICAgICAgRGVzY3JpcHRpb246CisvLyAgICAgICAgICAgICAgR2V0IHRoZSBUeCByYXRlIG9uZSBkZWdyZWUgZG93biBmb3JtIHRoZSBpbnB1dCByYXRlIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZXMuCisvLyAgICAgICAgICAgICAgUmV0dXJuIHRoZSBkZWdyYWRlIHJhdGUgaWYgaXQgaXMgc3VjY2Vzc2VkLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBpbnB1dCByYXRlLgorLy8gICAgICBCeSBCcnVjZSwgMjAwNy0wNi0wNS4KKy8vCit1OAorR2V0RGVncmFkZVR4UmF0ZSgKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgdTggICAgICAgICByYXRlCisgICAgICAgICkKK3sKKyAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBEb3duUmF0ZTsKKworICAgICAgICAvLyBVcGdyYWRlIDEgZGVncmVlLgorICAgICAgICBzd2l0Y2gocmF0ZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDEwODogLy8gRG93biB0byA0OE1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSA5NjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDk2OiAvLyBEb3duIHRvIDM2TWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDcyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNzI6IC8vIERvd24gdG8gMjRNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gNDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA0ODogLy8gRG93biB0byAxOE1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSAzNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM2OiAvLyBEb3duIHRvIDExTWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDIyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjI6IC8vIERvd24gdG8gNS41TWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDExOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTE6IC8vIERvd24gdG8gMk1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDogLy8gRG93biB0byAxTWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOiAvLyBEb3duIHRvIDFNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHByaW50aygiR2V0RGVncmFkZVR4UmF0ZSgpOiBJbnB1dCBUeCBSYXRlKCVkKSBpcyB1bmRlZmluZWQhXG4iLCByYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmF0ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmF0ZSBpcyB2YWxpZC4KKyAgICAgICAgaWYoSW5jbHVkZWRJblN1cHBvcnRlZFJhdGVzKHByaXYsIERvd25SYXRlKSkKKyAgICAgICAgeworLy8gICAgICAgICAgICAgIHByaW50aygiR2V0RGVncmFkZVR4UmF0ZSgpOiBHZXREZWdyYWRlIFR4IHJhdGUoJWQpIGZyb20gJWQhXG4iLCBEb3duUmF0ZSwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIERvd25SYXRlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXREZWdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBEb3duUmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhdGU7Cit9CisvLworLy8gICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBkYXRhIHJhdGUgaXMKKy8vICAgICAgQ0NLIHJhdGUuCisvLyAgICAgIDIwMDUuMDEuMjUsIGJ5IHJjbmprby4KKy8vCitib29sCitNZ250SXNDY2tSYXRlKAorICAgICAgICB1MTYgICAgIHJhdGUKKyAgICAgICAgKQoreworICAgICAgICBib29sIGJSZXR1cm4gPSBmYWxzZTsKKworICAgICAgICBpZigocmF0ZSA8PSAyMikgJiYgKHJhdGUgIT0gMTIpICYmIChyYXRlICE9IDE4KSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGJSZXR1cm4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJSZXR1cm47Cit9CisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVR4IFBvd2VyIHRyYWNraW5nIG1lY2hhbmlzbSByb3V0aW5lIG9uIDg3U0UuCisvLyAJQ3JlYXRlZCBieSBSb2dlciwgMjAwNy4xMi4xMS4KKy8vCit2b2lkCitUeFB3clRyYWNraW5nODdTRSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CispCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCXU4CXRtcHUxQnl0ZSwgQ3VycmVudFRoZXJtYWwsIElkeDsKKwljaGFyCUNja1R4UHdySWR4LCBPZmRtVHhQd3JJZHg7CisJLy91MzIJdTRiUmZSZWc7CisKKwl0bXB1MUJ5dGUgPSByZWFkX25pY19ieXRlKGRldiwgRU5fTFBGX0NBTCk7CisJQ3VycmVudFRoZXJtYWwgPSAodG1wdTFCeXRlICYgMHhmMCk+PjQ7IC8vWyA3OjRdOiB0aGVybWFsIG1ldGVyIGluZGljYXRpb24uCisJQ3VycmVudFRoZXJtYWwgPSAoQ3VycmVudFRoZXJtYWw+MHgwYyk/IDB4MGM6Q3VycmVudFRoZXJtYWw7Ly9sem0gYWRkIDA4MDgyNgorCisJLy9wcmludGsoIlR4UHdyVHJhY2tpbmc4N1NFKCk6IEN1cnJlbnRUaGVybWFsKCVkKVxuIiwgQ3VycmVudFRoZXJtYWwpOworCisJaWYoIEN1cnJlbnRUaGVybWFsICE9IHByaXYtPlRoZXJtYWxNZXRlcikKKwl7CisvLwkJcHJpbnRrKCJUeFB3clRyYWNraW5nODdTRSgpOiBUaGVybWFsIG1ldGVyIGNoYW5nZWQhISFcbiIpOworCisJCS8vIFVwZGF0ZSBUeCBQb3dlciBsZXZlbCBvbiBlYWNoIGNoYW5uZWwuCisJCWZvcihJZHggPSAxOyBJZHg8MTU7IElkeCsrKQorCQl7CisJCQlDY2tUeFB3cklkeCA9IHByaXYtPmNodHhwd3JbSWR4XTsKKwkJCU9mZG1UeFB3cklkeCA9IHByaXYtPmNodHhwd3Jfb2ZkbVtJZHhdOworCisJCQlpZiggQ3VycmVudFRoZXJtYWwgPiBwcml2LT5UaGVybWFsTWV0ZXIgKQorCQkJeyAvLyBoaWdoZXIgdGhlcm1hbCBtZXRlci4KKwkJCQlDY2tUeFB3cklkeCArPSAoQ3VycmVudFRoZXJtYWwgLSBwcml2LT5UaGVybWFsTWV0ZXIpKjI7CisJCQkJT2ZkbVR4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsKKworCQkJCWlmKENja1R4UHdySWR4ID4zNSkKKwkJCQkJQ2NrVHhQd3JJZHggPSAzNTsgLy8gRm9yY2UgVHhQb3dlciB0byBtYXhpbWFsIGluZGV4LgorCQkJCWlmKE9mZG1UeFB3cklkeCA+MzUpCisJCQkJCU9mZG1UeFB3cklkeCA9IDM1OworCQkJfQorCQkJZWxzZQorCQkJeyAvLyBsb3dlciB0aGVybWFsIG1ldGVyLgorCQkJCUNja1R4UHdySWR4IC09IChwcml2LT5UaGVybWFsTWV0ZXIgLSBDdXJyZW50VGhlcm1hbCkqMjsKKwkJCQlPZmRtVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOworCisJCQkJaWYoQ2NrVHhQd3JJZHggPDApCisJCQkJCUNja1R4UHdySWR4ID0gMDsKKwkJCQlpZihPZmRtVHhQd3JJZHggPDApCisJCQkJCU9mZG1UeFB3cklkeCA9IDA7CisJCQl9CisKKwkJCS8vIFVwZGF0ZSBUeFBvd2VyIGxldmVsIG9uIENDSyBhbmQgT0ZETSByZXNwLgorCQkJcHJpdi0+Y2h0eHB3cltJZHhdID0gQ2NrVHhQd3JJZHg7CisJCQlwcml2LT5jaHR4cHdyX29mZG1bSWR4XSA9IE9mZG1UeFB3cklkeDsKKwkJfQorCisJCS8vIFVwZGF0ZSBUeFBvd2VyIGxldmVsIGltbWVkaWF0ZWx5LgorCQlydGw4MjI1ejJfU2V0VFhQb3dlckxldmVsKGRldiwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7CisJfQorCXByaXYtPlRoZXJtYWxNZXRlciA9IEN1cnJlbnRUaGVybWFsOworfQordm9pZAorU3RhUmF0ZUFkYXB0aXZlODdTRSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIAkJCUN1cnJUeG9rQ250OworCXUxNgkJCUN1cnJSZXRyeUNudDsKKwl1MTYJCQlDdXJyUmV0cnlSYXRlOworCS8vdTE2CQkJaSxpZHg7CisJdW5zaWduZWQgbG9uZyAgICAgICAJQ3VyclJ4b2tDbnQ7CisJYm9vbAkJCWJUcnlVcCA9IGZhbHNlOworCWJvb2wJCQliVHJ5RG93biA9IGZhbHNlOworCXU4CQkJVHJ5VXBUaCA9IDE7CisJdTgJCQlUcnlEb3duVGggPSAyOworCXUzMgkJCVR4VGhyb3VnaHB1dDsKKwlsb25nCQlDdXJyU2lnbmFsU3RyZW5ndGg7CisJYm9vbAkJYlVwZGF0ZUluaXRpYWxHYWluID0gZmFsc2U7CisgICAgCXU4CQkJdTFiT2ZkbT0wLCB1MWJDY2sgPSAwOworCWNoYXIJCU9mZG1UeFB3cklkeCwgQ2NrVHhQd3JJZHg7CisKKwlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EOworCisKKwlDdXJyUmV0cnlDbnQJPSBwcml2LT5DdXJyUmV0cnlDbnQ7CisJQ3VyclR4b2tDbnQJPSBwcml2LT5OdW1UeE9rVG90YWwgLSBwcml2LT5MYXN0VHhva0NudDsKKwlDdXJyUnhva0NudAk9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsIC0gcHJpdi0+TGFzdFJ4b2tDbnQ7CisJQ3VyclNpZ25hbFN0cmVuZ3RoID0gcHJpdi0+U3RhdHNfUmVjdlNpZ25hbFBvd2VyOworCVR4VGhyb3VnaHB1dCA9ICh1MzIpKHByaXYtPk51bVR4T2tCeXRlc1RvdGFsIC0gcHJpdi0+TGFzdFR4T0tCeXRlcyk7CisJcHJpdi0+TGFzdFR4T0tCeXRlcyA9IHByaXYtPk51bVR4T2tCeXRlc1RvdGFsOworCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBwcml2LT5pZWVlODAyMTEtPnJhdGUvNTsKKwkvL3ByaW50aygicHJpdi0+Q3VycmVudE9wZXJhUmF0ZSBpcyAlZFxuIixwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKwkvLzIgQ29tcHV0ZSByZXRyeSByYXRpby4KKwlpZiAoQ3VyclR4b2tDbnQ+MCkKKwl7CisJCUN1cnJSZXRyeVJhdGUgPSAodTE2KShDdXJyUmV0cnlDbnQqMTAwL0N1cnJUeG9rQ250KTsKKwl9CisJZWxzZQorCXsgLy8gSXQgbWF5IGJlIHNlcmlvdXMgcmV0cnkuIFRvIGRpc3Rpbmd1aXNoIHNlcmlvdXMgcmV0cnkgb3Igbm8gcGFja2V0cyBtb2RpZmllZCBieSBCcnVjZQorCQlDdXJyUmV0cnlSYXRlID0gKHUxNikoQ3VyclJldHJ5Q250KjEwMC8xKTsKKwl9CisKKworCS8vCisJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMDEuMDIuCisJLy8gRm9yIGRlYnVnIGluZm9ybWF0aW9uLgorCS8vCisJLy9wcmludGsoIlxuKDEpIHBIYWxEYXRhLT5MYXN0UmV0cnlSYXRlOiAlZCBcbiIscHJpdi0+TGFzdFJldHJ5UmF0ZSk7CisJLy9wcmludGsoIigyKSBSZXRyeUNudCA9ICVkICBcbiIsIEN1cnJSZXRyeUNudCk7CisJLy9wcmludGsoIigzKSBUeG9rQ250ID0gJWQgXG4iLCBDdXJyVHhva0NudCk7CisJLy9wcmludGsoIig0KSBDdXJyUmV0cnlSYXRlID0gJWQgXG4iLCBDdXJyUmV0cnlSYXRlKTsKKwkvL3ByaW50aygiKDUpIEN1cnJTaWduYWxTdHJlbmd0aCA9ICVkIFxuIixDdXJyU2lnbmFsU3RyZW5ndGgpOworCS8vcHJpbnRrKCIoNikgVHhUaHJvdWdocHV0IGlzICVkXG4iLFR4VGhyb3VnaHB1dCk7CisJLy9wcmludGsoInByaXYtPk51bVR4T2tCeXRlc1RvdGFsIGlzICVkXG4iLHByaXYtPk51bVR4T2tCeXRlc1RvdGFsKTsKKworCXByaXYtPkxhc3RSZXRyeUNudCA9IHByaXYtPkN1cnJSZXRyeUNudDsKKwlwcml2LT5MYXN0VHhva0NudCA9IHByaXYtPk51bVR4T2tUb3RhbDsKKwlwcml2LT5MYXN0Unhva0NudCA9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsOworCXByaXYtPkN1cnJSZXRyeUNudCA9IDA7CisKKwkvLzJObyBUeCBwYWNrZXRzLCByZXR1cm4gdG8gaW5pdF9yYXRlIG9yIG5vdD8KKwlpZiAoQ3VyclJldHJ5UmF0ZT09MCAmJiBDdXJyVHhva0NudCA9PSAwKQorCXsKKwkJLy8KKwkJLy9BZnRlciA5ICgzMCozMDBtcykgc2Vjb25kcyBpbiB0aGlzIGNvbmRpdGlvbiwgd2UgdHJ5IHRvIHJhaXNlIHJhdGUuCisJCS8vCisJCXByaXYtPlRyeXVwaW5nQ291bnROb0RhdGErKzsKKworLy8JCXByaW50aygiTm8gVHggcGFja2V0cywgVHJ5dXBpbmdDb3VudE5vRGF0YSglZClcbiIsIHByaXYtPlRyeXVwaW5nQ291bnROb0RhdGEpOworCQkvL1tUUkMgRGVsbCBMYWJdIEV4dGVuZCByYWlzZWQgcGVyaW9kIGZyb20gNC41c2VjIHRvIDlzZWMsIElzYWlhaCAyMDA4LTAyLTE1IDE4OjAwCisJCWlmIChwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhPjMwKQorCQl7CisJCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhID0gMDsKKwkJIAlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gR2V0VXBncmFkZVR4UmF0ZShkZXYsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCQkJLy8gUmVzZXQgRmFpbCBSZWNvcmQKKwkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gMDsKKwkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAtMjAwOworCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMDsKKwkJfQorCQlnb3RvIFNldEluaXRpYWxHYWluOworCX0KKyAgICAgICAgZWxzZQorCXsKKwkJcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YT0wOyAvL1Jlc2V0IHRyeWluZyB1cCB0aW1lcy4KKwl9CisKKworCS8vCisJLy8gRm9yIE5ldGdlYXIgY2FzZSwgSSBjb21tZW50IG91dCB0aGUgZm9sbG93aW5nIHNpZ25hbCBzdHJlbmd0aCBlc3RpbWF0aW9uLAorCS8vIHdoaWNoIGNhbiByZXN1bHRzIGluIGxvd2VyIHJhdGUgdG8gdHJhbnNtaXQgd2hlbiBzYW1wbGUgaXMgTk9UIGVub3VnaCAoZS5nLiBQSU5HIHJlcXVlc3QpLgorCS8vIDIwMDcuMDQuMDksIGJ5IFJvZ2VyLgorCS8vCisKKwkvLworCS8vIFJlc3RydWN0dXJlIHJhdGUgYWRhcHRpdmUgYXMgdGhlIGZvbGxvd2luZyBtYWluIHN0YWdlczoKKwkvLyAoMSkgQWRkIHJldHJ5IHRocmVzaG9sZCBpbiA1NE0gdXBncmFkaW5nIGNvbmRpdGlvbiB3aXRoIHNpZ25hbCBzdHJlbmd0aC4KKwkvLyAoMikgQWRkIHRoZSBtZWNoYW5pc20gdG8gZGVncmFkZSB0byBDQ0sgcmF0ZSBhY2NvcmRpbmcgdG8gc2lnbmFsIHN0cmVuZ3RoCisJLy8JCWFuZCByZXRyeSByYXRlLgorCS8vICgzKSBSZW1vdmUgYWxsIEluaXRpYWwgR2FpbiBVcGRhdGVzIG92ZXIgT0ZETSByYXRlLiBUbyBhdm9pZCB0aGUgY29tcGxpY2F0ZWQKKwkvLwkJc2l0dWF0aW9uLCBJbml0aWFsIEdhaW4gVXBkYXRlIGlzIHVwb24gb24gRElHIG1lY2hhbmlzbSBleGNlcHQgQ0NLIHJhdGUuCisJLy8gKDQpIEFkZCB0aGUgbWVoYW5pc20gb2YgdHJ5aW5nIHRvIHVwZ3JhZGUgdHggcmF0ZS4KKwkvLyAoNSkgUmVjb3JkIHRoZSBpbmZvcm1hdGlvbiBvZiB1cHBpbmcgdHggcmF0ZSB0byBhdm9pZCB0cnlpbmcgdXBwaW5nIHR4IHJhdGUgY29uc3RhbnRseS4KKwkvLyBCeSBCcnVjZSwgMjAwNy0wNi0wNS4KKwkvLworCS8vCisKKwkvLyAxMU1icHMgb3IgMzZNYnBzCisJLy8gQ2hlY2sgbW9yZSB0aW1lcyBpbiB0aGVzZSByYXRlKGtleSByYXRlcykuCisJLy8KKwlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyIHx8IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIpCisJeworCQlUcnlVcFRoICs9IDk7CisJfQorCS8vCisJLy8gTGV0IHRoZXNlIHJhdGVzIGRvd24gbW9yZSBkaWZmaWN1bHQuCisJLy8KKwlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpIHx8IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMzYpCisJeworCQkJVHJ5RG93blRoICs9IDE7CisJfQorCisJLy8xIEFkanVzdCBSYXRlLgorCWlmIChwcml2LT5iVHJ5dXBpbmcgPT0gdHJ1ZSkKKwl7CisJCS8vMiBGb3IgVGVzdCBVcGdyYWRpbmcgbWVjaGFuaXNtCisJCS8vIE5vdGU6CisJCS8vIAlTb21ldGltZXMgdGhlIHRocm91Z2hwdXQgaXMgdXBvbiBvbiB0aGUgY2FwYWJpbGl0eSBid3R3ZWVuIHRoZSBBUCBhbmQgTklDLAorCQkvLyAJdGh1cyB0aGUgbG93IGRhdGEgcmF0ZSBkb2VzIG5vdCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZS4KKwkJLy8gCVdlIHJhbmRvbWx5IHVwZ3JhZGUgdGhlIGRhdGEgcmF0ZSBhbmQgY2hlY2sgaWYgdGhlIHJldHJ5IHJhdGUgaXMgaW1wcm92ZWQuCisKKwkJLy8gVXBncmFkaW5nIHJhdGUgZGlkIG5vdCBpbXByb3ZlIHRoZSByZXRyeSByYXRlLCBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgcmF0ZS4KKwkJaWYgKCAoQ3VyclJldHJ5UmF0ZSA+IDI1KSAmJiBUeFRocm91Z2hwdXQgPCBwcml2LT5MYXN0VHhUaHJvdWdocHV0KQorCQl7CisJCQkvL05vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCS8vcHJpbnRrKCJjYXNlMS0xOiBOb3QgbmVjZXNzYXJ5IHJhaXNpbmcgcmF0ZSwgZmFsbCBiYWNrIHJhdGUuLi4uXG4iKTsKKwkJCS8vcHJpbnRrKCJjYXNlMS0xOiBwTWdudEluZm8tPkN1cnJlbnRPcGVyYVJhdGUgPSVkLCBUeFRocm91Z2hwdXQgPSAlZCwgTGFzdFRocm91Z2hwdXQgPSAlZFxuIiwKKwkJCS8vCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlLCBUeFRocm91Z2hwdXQsIHByaXYtPkxhc3RUeFRocm91Z2hwdXQpOworCQl9CisJCWVsc2UKKwkJeworCQkJcHJpdi0+YlRyeXVwaW5nID0gZmFsc2U7CisJCX0KKwl9CisJZWxzZSBpZiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTQ3ICYmIChDdXJyUmV0cnlSYXRlIDwgNTApKQorCXsKKwkJLy8yRm9yIEhpZ2ggUG93ZXIKKwkJLy8KKwkJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMDQuMDkuCisJCS8vIFJldHVybiB0byBoaWdoZXN0IGRhdGEgcmF0ZSwgaWYgc2lnbmFsIHN0cmVuZ3RoIGlzIGdvb2QgZW5vdWdoLgorCQkvLyBTaWduYWxTdHJlbmd0aCB0aHJlc2hvbGQoLTUwZGJtKSBpcyBmb3IgUlRMODE4Ni4KKwkJLy8gUmV2aXNlIFNpZ25hbFN0cmVuZ3RoIHRocmVzaG9sZCB0byAtNTFkYm0uCisJCS8vCisJCS8vIEFsc28gbmVlZCB0byBjaGVjayByZXRyeSByYXRlIGZvciBzYWZldHksIGJ5IEJydWNlLCAyMDA3LTA2LTA1LgorCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlICE9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLkhpZ2hlc3RPcGVyYVJhdGUgKQorCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQkJLy8gVXBncmFkZSBUeCBSYXRlIGRpcmVjdGx5LgorCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCArPSBUcnlVcFRoOworCQl9CisvLwkJcHJpbnRrKCJjYXNlMjogU3RhUmF0ZUFkYXB0aXZlODdTRTogUG93ZXIoJWQpIGlzIGhpZ2ggZW5vdWdoISEuIFxuIiwgQ3VyclNpZ25hbFN0cmVuZ3RoKTsKKworCX0KKwllbHNlIGlmKEN1cnJUeG9rQ250ID4gOSAmJiBDdXJyVHhva0NudDwgMTAwICYmIEN1cnJSZXRyeVJhdGUgPj0gNjAwKQorCXsKKwkJLy8yIEZvciBTZXJpb3VzIFJldHJ5CisJCS8vCisJCS8vIFRyYWZmaWMgaXMgbm90IGJ1c3kgYnV0IG91ciBUeCByZXRyeSBpcyBzZXJpb3VzLgorCQkvLworCQliVHJ5RG93biA9IHRydWU7CisJCS8vIExldCBSYXRlIE1lY2hhbmlzbSB0byBkZWdyYWRlIHR4IHJhdGUgZGlyZWN0bHkuCisJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworLy8JCXByaW50aygiY2FzZTM6IFJBOiBUeCBSZXRyeSBpcyBzZXJpb3VzLiBEZWdyYWRlIFR4IFJhdGUgdG8gJWQgZGlyZWN0bHkuLi5cbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAxMDggKQorCXsKKwkJLy8yRm9yIDU0TWJwcworCQkvLyBBaXIgTGluaworCQlpZiAoIChDdXJyUmV0cnlSYXRlPjI2KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MjUpKQorLy8JCWlmICggKEN1cnJSZXRyeVJhdGU+NDApJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4zOSkpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvLyBDYWJsZSBMaW5rCisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZT4xNykmJihwcml2LT5MYXN0UmV0cnlSYXRlPjE2KSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTcyKSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU+MTcpJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4xNikgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC03MikpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCisJCWlmKGJUcnlEb3duICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPCAtNzUpKSAvL2NhYmxlIGxpbmsKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U0LS0tNTRNIFxuIik7CisKKwl9CisJZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gOTYgKQorCXsKKwkJLy8yRm9yIDQ4TWJwcworCQkvL0FpciBMaW5rCisJCWlmICggKChDdXJyUmV0cnlSYXRlPjQ4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT40NykpKQorLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjY1KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT42NCkpKQorCisJCXsKKwkJCS8vRG93biB0byByYXRlIDM2TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvL0NhYmxlIExpbmsKKwkJZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT4yMSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MjApKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTc0KSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgMzZNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKy8vCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA3MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDI4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKworCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTc1KSkKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U1LS0tNDhNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDcyICkKKwl7CisJCS8vMkZvciAzNk1icHMKKwkJaWYgKCAoQ3VyclJldHJ5UmF0ZT40MykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NDEpKQorLy8JCWlmICggKEN1cnJSZXRyeVJhdGU+NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjU5KSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgMjRNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKy8vCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA3MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwxNSkgJiYgIChwcml2LT5MYXN0UmV0cnlSYXRlPDE2KSkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MzUpICYmICAocHJpdi0+TGFzdFJldHJ5UmF0ZTwzNikpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKworCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgwKSkKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U2LS0tMzZNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQ4ICkKKwl7CisJCS8vMkZvciAyNE1icHMKKwkJLy8gQWlyIExpbmsKKwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjYyKSkpCisvLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+ODMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjgyKSkpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDE4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvL0NhYmxlIExpbmsKKwkJZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT4zMykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MzIpKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTgyKSApCisvLwkJIGVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+NTApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjQ5KSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC04MikgKQorCQl7CisJCQkvL0Rvd24gdG8gcmF0ZSAxOE1icHMuCisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKworCQl7CisJCQliVHJ5RG93biA9IHRydWU7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsKKwkJfQorICAJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyMCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8MjEpKSAvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8NDEpKQorCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQl9CisKKwkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MikpCisJCXsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisJCS8vcHJpbnRrKCJjYXNlNy0tLTI0TSBcbiIpOworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNiApCisJeworCQkvLzJGb3IgMThNYnBzCisJCS8vIG9yaWdpbmFsICgxMDksIDEwOSkKKwkJLy9bVFJDIERlbGwgTGFiXSAoOTAsIDkxKSwgSXNhaWFoIDIwMDgtMDItMTggMjM6MjQKKwkJLy8JCQkgICAgICg4NSwgODYpLCBJc2FpYWggMjAwOC0wMi0xOCAyNDowMAorCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT44NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+ODYpKSkKKy8vCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT4xMTUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjExNikpKQorCQl7CisJCQkvL0Rvd24gdG8gcmF0ZSAxMU1icHMuCisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJLy9bVFJDIERlbGwgTGFiXSAgSXNhaWFoIDIwMDgtMDItMTggMjM6MjQKKwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKwkJeworCQkJYlRyeURvd24gPSB0cnVlOworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDIyKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTwyMykpIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQyKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw0MykpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKwkJLy9wcmludGsoImNhc2U4LS0tMThNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyICkKKwl7CisJCS8vMkZvciAxMU1icHMKKwkJaWYgKEN1cnJSZXRyeVJhdGU+OTUpCisvLwkJaWYgKEN1cnJSZXRyeVJhdGU+MTU1KQorCQl7CisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDI5KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8MzApICkvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPDUwKSApCisJCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQkJfQorCQkvL3ByaW50aygiY2FzZTktLS0xMU0gXG4iKTsKKwkJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDExICkKKwl7CisJCS8vMkZvciA1LjVNYnBzCisJCWlmIChDdXJyUmV0cnlSYXRlPjE0OSkKKy8vCQlpZiAoQ3VyclJldHJ5UmF0ZT4xODkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgNjUpKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA4NSkpCisKKwkJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCQl9CisJCS8vcHJpbnRrKCJjYXNlMTAtLS01LjVNIFxuIik7CisJCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA0ICkKKwl7CisJCS8vMkZvciAyIE1icHMKKwkJaWYoKEN1cnJSZXRyeVJhdGU+OTkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjk5KSkKKy8vCQlpZigoQ3VyclJldHJ5UmF0ZT4xOTkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjE5OSkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGUgPCA2NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA3MCkpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlIDwgODUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgOTApKQorCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQl9CisJCS8vcHJpbnRrKCJjYXNlMTEtLS0yTSBcbiIpOworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyICkKKwl7CisJCS8vMkZvciAxIE1icHMKKwkJaWYoIChDdXJyUmV0cnlSYXRlPDcwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw3NSkpCisvLwkJaWYoIChDdXJyUmV0cnlSYXRlPDkwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw5NSkpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKwkJLy9wcmludGsoImNhc2UxMi0tLTFNIFxuIik7CisJfQorCisJaWYoYlRyeVVwICYmIGJUcnlEb3duKQorICAgIAlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3QigpOiBUeCBSYXRlIHRyaWVkIHVwcGluZyBhbmQgZG93bmluZyBzaW11bHRhbmVvdXNseSFcbiIpOworCisJLy8xIFRlc3QgVXBncmFkaW5nIFR4IFJhdGUKKwkvLyBTb21ldGltZXMgdGhlIGNhdXNlIG9mIHRoZSBsb3cgdGhyb3VnaHB1dCAoaGlnaCByZXRyeSByYXRlKSBpcyB0aGUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBBUCBhbmQgTklDLgorCS8vIFRvIHRlc3QgaWYgdGhlIHVwcGVyIHJhdGUgbWF5IGNhdXNlIGxvd2VyIHJldHJ5IHJhdGUsIHRoaXMgbWVjaGFuaXNtIHJhbmRvbWx5IG9jY3VycyB0byB0ZXN0IHVwZ3JhZGluZyB0eCByYXRlLgorCWlmKCFiVHJ5VXAgJiYgIWJUcnlEb3duICYmIChwcml2LT5Ucnl1cGluZ0NvdW50ID09IDApICYmIChwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDApCisJCSYmIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgIT0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuSGlnaGVzdE9wZXJhUmF0ZSAmJiBwcml2LT5GYWlsVHhSYXRlQ291bnQgPCAyKQorCXsKKwkJaWYoamlmZmllcyUgKEN1cnJSZXRyeVJhdGUgKyAxMDEpID09IDApCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCQlwcml2LT5iVHJ5dXBpbmcgPSB0cnVlOworCQkJLy9wcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogUmFuZG9tbHkgdHJ5IHVwZ3JhZGluZy4uLlxuIik7CisJCX0KKwl9CisKKwkvLzEgUmF0ZSBNZWNoYW5pc20KKwlpZihiVHJ5VXApCisJeworCQlwcml2LT5Ucnl1cGluZ0NvdW50Kys7CisJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPSAwOworCisJCXsKKy8vCQkJcHJpbnRrKCJVUDogcEhhbERhdGEtPlRyeXVwaW5nQ291bnQgPSAlZFxuIiwgcHJpdi0+VHJ5dXBpbmdDb3VudCk7CisvLwkJCXByaW50aygiVVA6IFRyeVVwVGgoJWQpKyAoRmFpbFR4UmF0ZUNvdW50KCVkKSleMiA9JWRcbiIsCisvLwkJCQlUcnlVcFRoLCBwcml2LT5GYWlsVHhSYXRlQ291bnQsIChUcnlVcFRoICsgcHJpdi0+RmFpbFR4UmF0ZUNvdW50ICogcHJpdi0+RmFpbFR4UmF0ZUNvdW50KSApOworLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+YlRyeXVwaW5nPSVkXG4iLCAgcHJpdi0+YlRyeXVwaW5nKTsKKworCQl9CisKKwkJLy8KKwkJLy8gQ2hlY2sgbW9yZSB0aW1lcyBpZiB3ZSBuZWVkIHRvIHVwZ3JhZGUgaW5kZWVkLgorCQkvLyBCZWNhdXNlIHRoZSBsYXJnZXN0IHZhbHVlIG9mIHBIYWxEYXRhLT5Ucnl1cGluZ0NvdW50IGlzIDB4RkZGRiBhbmQKKwkJLy8gdGhlIGxhcmdlc3QgdmFsdWUgb2YgcEhhbERhdGEtPkZhaWxUeFJhdGVDb3VudCBpcyAweDE0LAorCQkvLyB0aGlzIGNvbmRpdGlvbiB3aWxsIGJlIHNhdGlzZmllZCBhdCBtb3N0IGV2ZXJ5IDIgbWluLgorCQkvLworCisJCWlmKChwcml2LT5Ucnl1cGluZ0NvdW50ID4gKFRyeVVwVGggKyBwcml2LT5GYWlsVHhSYXRlQ291bnQgKiBwcml2LT5GYWlsVHhSYXRlQ291bnQpKSB8fAorCQkJKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpIHx8IHByaXYtPmJUcnl1cGluZykKKwkJeworCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7CisJCQkvLworCQkJLy8gV2hlbiB0cmFuc2ZlcmluZyBmcm9tIENDSyB0byBPRkRNLCBESUcgaXMgYW4gaW1wb3J0YW50IGlzc3VlLgorCQkJLy8KKwkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIpCisJCQkJYlVwZGF0ZUluaXRpYWxHYWluID0gdHJ1ZTsKKworCQkJLy8gVGhlIGRpZmZlcmVuY2UgaW4gdGhyb3VnaHB1dCBiZXR3ZWVuIDQ4TWJwcyBhbmQgMzZNYnBzIGlzIDhNLgorCQkJLy8gU28sIHdlIG11c3QgYmUgY2FyZWZ1bGx5IGluIHRoaXMgcmF0ZSBzY2FsZS4gSXNhaWFoIDIwMDgtMDItMTUuCisJCQkvLworCQkJaWYoICAoKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIpIHx8IChwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQ4KSB8fCAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNikpICYmCisJCQkJKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+IDIpICkKKwkJCQlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IChSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRC8yKTsKKworCQkJLy8gKDEpVG8gYXZvaWQgdXBncmFkZSBmcmVxdWVudGx5IHRvIHRoZSBmYWlsIHR4IHJhdGUsIGFkZCB0aGUgRmFpbFR4UmF0ZUNvdW50IGludG8gdGhlIHRocmVzaG9sZC4KKwkJCS8vICgyKUlmIHRoZSBzaWduYWwgc3RyZW5ndGggaXMgaW5jcmVhc2VkLCBpdCBtYXkgYmUgYWJsZSB0byB1cGdyYWRlLgorCisJCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gR2V0VXBncmFkZVR4UmF0ZShkZXYsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogVXBncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKworCQkJLy9bVFJDIERlbGwgTGFiXSBCeXBhc3MgMTIvOS82LCBJc2FpYWggMjAwOC0wMi0xOCAyMDowMAorCQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PTM2KQorCQkJeworCQkJCXByaXYtPmJVcGRhdGVBUkZSPXRydWU7CisJCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGOEYpOyAvL2J5cGFzcyAxMi85LzYKKy8vCQkJCXByaW50aygiVVA6IEFSRlI9MHhGOEZcbiIpOworCQkJfQorCQkJZWxzZSBpZihwcml2LT5iVXBkYXRlQVJGUikKKwkJCXsKKwkJCQlwcml2LT5iVXBkYXRlQVJGUj1mYWxzZTsKKwkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEZGRik7IC8vc2V0IDFNIH4gNTRNYnBzLgorLy8JCQkJcHJpbnRrKCJVUDogQVJGUj0weEZGRlxuIik7CisJCQl9CisKKwkJCS8vIFVwZGF0ZSBGYWlsIFR4IHJhdGUgYW5kIGNvdW50LgorCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgIT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkKKwkJCXsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGU7CisJCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMDsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gLTIwMDsgLy8gU2V0IGxvd2VzdCBwb3dlci4KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlpZihwcml2LT5Ucnl1cGluZ0NvdW50ID4gMCkKKwkJCXByaXYtPlRyeXVwaW5nQ291bnQgLS07CisJfQorCisJaWYoYlRyeURvd24pCisJeworCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhKys7CisJCXByaXYtPlRyeXVwaW5nQ291bnQgPSAwOworCQl7CisvLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5UcnlEb3duQ291bnRMb3dEYXRhID0gJWRcbiIscHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSk7CisvLwkJCXByaW50aygiRE46IFRyeURvd25UaCA9JWRcbiIsIFRyeURvd25UaCk7CisvLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5iVHJ5dXBpbmc9JWRcbiIsICBwcml2LT5iVHJ5dXBpbmcpOworCQl9CisKKwkJLy9DaGVjayBpZiBUeCByYXRlIGNhbiBiZSBkZWdyYWRlZCBvciBUZXN0IHRyeWluZyB1cGdyYWRpbmcgc2hvdWxkIGZhbGxiYWNrLgorCQlpZihwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID4gVHJ5RG93blRoIHx8IHByaXYtPmJUcnl1cGluZykKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7CisJCQlwcml2LT5iVHJ5dXBpbmcgPSBmYWxzZTsKKwkJCS8vIFVwZGF0ZSBmYWlsIGluZm9ybWF0aW9uLgorCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgPT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkKKwkJCXsKKwkJCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgKys7CisJCQkJLy8gUmVjb3JkIHRoZSBUeCBmYWlsIHJhdGUgc2lnbmFsIHN0cmVuZ3RoLgorCQkJCWlmKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpCisJCQkJeworCQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGU7CisJCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMTsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOworCQkJfQorCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IEdldERlZ3JhZGVUeFJhdGUoZGV2LCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKworCQkJLy8gUmVkdWNlIGNoYXJpb3QgdHJhaW5pbmcgdGltZSBhdCB3ZWFrIHNpZ25hbCBzdHJlbmd0aCBzaXR1YXRpb24uIFNEMyBFRCBkZW1hbmQuCisJCQkvL1tUUkMgRGVsbCBMYWJdIFJldmlzZSBTaWduYWwgVGhyZXNob2xkIGZyb20gLTc1IHRvIC04MCAsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwCisJCQlpZiggKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MCkgJiYgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPiA3MiApKQorCQkJeworCQkJCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSA3MjsKKy8vCQkJCXByaW50aygiRE46IHdlYWsgc2lnbmFsIHN0cmVuZ3RoICglZCksIGRlZ3JhZGUgdG8gMzZNYnBzXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOworCQkJfQorCisJCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwCisJCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09MzYpCisJCQl7CisJCQkJcHJpdi0+YlVwZGF0ZUFSRlI9dHJ1ZTsKKwkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEY4Rik7IC8vYnlwYXNzIDEyLzkvNgorLy8JCQkJcHJpbnRrKCJETjogQVJGUj0weEY4RlxuIik7CisJCQl9CisJCQllbHNlIGlmKHByaXYtPmJVcGRhdGVBUkZSKQorCQkJeworCQkJCXByaXYtPmJVcGRhdGVBUkZSPWZhbHNlOworCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRkZGKTsgLy9zZXQgMU0gfiA1NE1icHMuCisvLwkJCQlwcmludGsoIkROOiBBUkZSPTB4RkZGXG4iKTsKKwkJCX0KKworCQkJLy8KKwkJCS8vIFdoZW4gaXQgaXMgQ0NLIHJhdGUsIGl0IG1heSBuZWVkIHRvIHVwZGF0ZSBpbml0aWFsIGdhaW4gdG8gcmVjZWl2ZSBsb3dlciBwb3dlciBwYWNrZXRzLgorCQkJLy8KKwkJCWlmKE1nbnRJc0Nja1JhdGUocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkpCisJCQl7CisJCQkJYlVwZGF0ZUluaXRpYWxHYWluID0gdHJ1ZTsKKwkJCX0KKy8vCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IERlZ3JhZGUgVHggUmF0ZSB0byAlZFxuIiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA+IDApCisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhIC0tOworCX0KKworCS8vIEtlZXAgdGhlIFR4IGZhaWwgcmF0ZSBjb3VudCB0byBlcXVhbCB0byAweDE1IGF0IG1vc3QuCisJLy8gUmVkdWNlIHRoZSBmYWlsIGNvdW50IGF0IGxlYXN0IHRvIDEwIHNlYyBpZiB0eCByYXRlIGlzIHRlbmRpbmcgc3RhYmxlLgorCWlmKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+PSAweDE1IHx8CisJCSghYlRyeVVwICYmICFiVHJ5RG93biAmJiBwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDAgJiYgcHJpdi0+VHJ5dXBpbmdDb3VudCAmJiBwcml2LT5GYWlsVHhSYXRlQ291bnQgPiAweDYpKQorCXsKKwkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50IC0tOworCX0KKworCisJT2ZkbVR4UHdySWR4ICA9IHByaXYtPmNodHhwd3Jfb2ZkbVtwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsKKwlDY2tUeFB3cklkeCAgPSBwcml2LT5jaHR4cHdyW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOworCisJLy9bVFJDIERlbGwgTGFiXSBNYWMweDllIGluY3JlYXNlIDIgbGV2ZWwgaW4gMzZNfjE4TSBzaXR1YXRpb24sIElzYWlhaCAyMDA4LTAyLTE4IDI0OjAwCisJaWYoKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPCA5NikgJiYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA+IDIyKSkKKwl7CisJCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCQl1MWJPZmRtID0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOworCisJCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcgorCQlpZih1MWJDY2sgPT0gQ2NrVHhQd3JJZHggKQorCQl7CisJCQlpZih1MWJPZmRtICE9IChPZmRtVHhQd3JJZHgrMikgKQorCQkJeworCQkJcHJpdi0+YkVuaGFuY2VUeFB3cj0gdHJ1ZTsKKwkJCXUxYk9mZG0gPSAoKHUxYk9mZG0rMikgPiAzNSkgPyAzNTogKHUxYk9mZG0rMik7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYk9mZG0pOworLy8JCQlwcmludGsoIkVuaGFuY2UgT0ZETV9UWEFHQyA6ICsrKysrIHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pOworCQkJfQorCQl9CisJCS8vIGNhc2UgMjogZW50ZXIgaGlnaCBwb3dlcgorCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQorCQl7CisJCQlpZighcHJpdi0+YkVuaGFuY2VUeFB3cikKKwkJCXsKKwkJCQlwcml2LT5iRW5oYW5jZVR4UHdyPSB0cnVlOworCQkJCXUxYk9mZG0gPSAoKHUxYk9mZG0rMikgPiAzNSkgPyAzNTogKHUxYk9mZG0rMik7CisJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsKKwkJCQkvL1JUX1RSQUNFKENPTVBfUkFURSwgREJHX1RSQUNFLCAoIkVuaGFuY2UgT0ZETV9UWEFHQygyKSA6ICsrKysrIHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmKHByaXYtPmJFbmhhbmNlVHhQd3IpICAvLzU0LzQ4LzExLzUuNS8yLzEKKwl7CisJCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCQl1MWJPZmRtID0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOworCisJCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcgorCQlpZih1MWJDY2sgPT0gQ2NrVHhQd3JJZHggKQorCQl7CisJCXByaXYtPmJFbmhhbmNlVHhQd3I9IGZhbHNlOworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIE9mZG1UeFB3cklkeCk7CisJCS8vcHJpbnRrKCJSZWNvdmVyIE9GRE1fVFhBR0MgOiA9PT09PSB1MWJPZmRtPSAweCV4XG4iLCBPZmRtVHhQd3JJZHgpOworCQl9CisJCS8vIGNhc2UgMjogZW50ZXIgaGlnaCBwb3dlcgorCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQorCQl7CisJCQlwcml2LT5iRW5oYW5jZVR4UHdyPSBmYWxzZTsKKwkJCXUxYk9mZG0gPSAoKHUxYk9mZG0tMikgPiAwKSA/ICh1MWJPZmRtLTIpOiAwOworCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsKKwkJCS8vUlRfVFJBQ0UoQ09NUF9SQVRFLCBEQkdfVFJBQ0UsICgiUmVjb3ZlciBPRkRNX1RYQUdDKDIpOiA9PT09PSB1MWJPZmRtPSAweCV4XG4iLCB1MWJPZmRtKSk7CisKKwkJfQorCX0KKworCS8vCisJLy8gV2UgbmVlZCB1cGRhdGUgaW5pdGlhbCBnYWluIHdoZW4gd2Ugc2V0IHR4IHJhdGUgImZyb20gT0ZETSB0byBDQ0siIG9yCisJLy8gImZyb20gQ0NLIHRvIE9GRE0iLgorCS8vCitTZXRJbml0aWFsR2FpbjoKKwlpZihiVXBkYXRlSW5pdGlhbEdhaW4pCisJeworCQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpKSAvLyBDQ0sKKwkJeworCQkJaWYocHJpdi0+SW5pdGlhbEdhaW4gPiBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZSkKKwkJCXsKKwkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47CisKKwkJCQlpZihDdXJyU2lnbmFsU3RyZW5ndGggPCAtODUpIC8vIExvdyBwb3dlciwgT0ZETSBbMHgxN10gPSAyNi4KKwkJCQl7CisJCQkJCS8vU0QzIFNZcyBzdWdnZXN0IHRoYXQgQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTY1LCBvZmRtIDB4MTc9MjYuCisJCQkJCXByaXYtPkluaXRpYWxHYWluID0gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2U7CisJCQkJfQorCQkJCWVsc2UgaWYocHJpdi0+SW5pdGlhbEdhaW4gPiBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZSArIDEpCisJCQkJeworCQkJCQlwcml2LT5Jbml0aWFsR2FpbiAtPSAyOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwcml2LT5Jbml0aWFsR2FpbiAtLTsKKwkJCQl9CisJCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IHVwZGF0ZSBpbml0X2dhaW4gdG8gaW5kZXggJWQgZm9yIGRhdGUgcmF0ZSAlZFxuIixwcml2LT5Jbml0aWFsR2FpbiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJCQkJVXBkYXRlSW5pdGlhbEdhaW4oZGV2KTsKKwkJCX0KKwkJfQorCQllbHNlIC8vIE9GRE0KKwkJeworCQkJaWYocHJpdi0+SW5pdGlhbEdhaW4gPCA0KQorCQkJeworCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsKKworCQkJCXByaXYtPkluaXRpYWxHYWluICsrOworCQkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiB1cGRhdGUgaW5pdF9nYWluIHRvIGluZGV4ICVkIGZvciBkYXRlIHJhdGUgJWRcbiIscHJpdi0+SW5pdGlhbEdhaW4sIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7CisJCQl9CisJCX0KKwl9CisKKwkvL1JlY29yZCB0aGUgcmVsYXRlZCBpbmZvCisJcHJpdi0+TGFzdFJldHJ5UmF0ZSA9IEN1cnJSZXRyeVJhdGU7CisJcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCA9IFR4VGhyb3VnaHB1dDsKKwlwcml2LT5pZWVlODAyMTEtPnJhdGUgPSBwcml2LT5DdXJyZW50T3BlcmFSYXRlICogNTsKK30KKworI2VuZGlmCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQordm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsKKyAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IGllZWU4MDIxMV9kZXZpY2UscmF0ZV9hZGFwdGVyX3dxKTsKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKKyNlbHNlCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKyNlbmRpZgorICAgICAgICAvL3N0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKy8vICAgIERNRVNHKCItLS0tPnJ0bDgxODBfcmF0ZV9hZGFwdGVyIik7CisgICAgICAgIFN0YVJhdGVBZGFwdGl2ZTg3U0UoZGV2KTsKKy8vICAgRE1FU0coIjwtLS0tcnRsODE4MF9yYXRlX2FkYXB0ZXIiKTsKK30KK3ZvaWQgdGltZXJfcmF0ZV9hZGFwdGl2ZSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHI4MTgwX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdigoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKTsKKwkvL0RNRVNHKCItLS0tPnRpbWVyX3JhdGVfYWRhcHRpdmUoKVxuIik7CisJaWYoIXByaXYtPnVwKQorCXsKKy8vCQlETUVTRygiPC0tLS10aW1lcl9yYXRlX2FkYXB0aXZlKCk6ZHJpdmVyIGlzIG5vdCB1cCFcbiIpOworCQlyZXR1cm47CisJfQorCWlmKChwcml2LT5pZWVlODAyMTEtPml3X21vZGUgIT0gSVdfTU9ERV9NQVNURVIpCisJCQkmJiAocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSAmJgorCQkJKHByaXYtPkZvcmNlZERhdGFSYXRlID09IDApICkKKwl7CisvLwlETUVTRygidGltZXJfcmF0ZV9hZGFwdGl2ZSgpOnNjaGVkdWxlIHJhdGVfYWRhcHRlcl93cVxuIik7CisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworCQlxdWV1ZV93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsICh2b2lkICopJnByaXYtPmllZWU4MDIxMS0+cmF0ZV9hZGFwdGVyX3dxKTsKKy8vCQlTdGFSYXRlQWRhcHRpdmU4N1NFKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOworI2VuZGlmCisJfQorCXByaXYtPnJhdGVhZGFwdGVyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTVNFQ1MocHJpdi0+UmF0ZUFkYXB0aXZlUGVyaW9kKTsKKwlhZGRfdGltZXIoJnByaXYtPnJhdGVhZGFwdGVyX3RpbWVyKTsKKwkvL0RNRVNHKCI8LS0tLXRpbWVyX3JhdGVfYWRhcHRpdmUoKVxuIik7Cit9CisvL2J5IGFteSAwODAzMTJ9Cit2b2lkCitTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXU4IFNpZ25hbFN0cmVuZ3RoCisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKworLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODU6IFJ4U3M6ICVkXG4iLCBTaWduYWxTdHJlbmd0aCk7CisKKwlwcml2LT5BZFJ4T2tDbnQrKzsKKworCWlmKCBwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggIT0gLTEpCisJeworCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPSAoKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCo3KSArIChTaWduYWxTdHJlbmd0aCozKSkgLyAxMDsKKwl9CisJZWxzZQorCXsgLy8gSW5pdGlhbGl6YXRpb24gY2FzZS4KKwkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID0gU2lnbmFsU3RyZW5ndGg7CisJfQorLy97K2J5IGFteSAwODAzMTIKKwlpZiggcHJpdi0+TGFzdFJ4UGt0QW50ZW5uYSApIC8vTWFpbiBhbnRlbm5hLgorCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCsrOworCWVsc2UJIC8vIEF1eCBhbnRlbm5hLgorCQlwcml2LT5BZEF1eEFudGVubmFSeE9rQ250Kys7CisvLytieSBhbXkgMDgwMzEyCisvLwlwcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHlSeE9rODE4NTogQWRSeE9rQ250OiAlZCBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVkXG4iLCBwcml2LT5BZFJ4T2tDbnQsIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCk7Cit9CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJQ2hhbmdlIEFudGVubmEgU3dpdGNoLgorLy8KK2Jvb2wKK1NldEFudGVubmE4MTg1KAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJdTgJCXUxYkFudGVubmFJbmRleAorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJYm9vbCBiQW50ZW5uYVN3aXRjaGVkID0gZmFsc2U7CisKKy8vCXByaW50aygiK1NldEFudGVubmE4MTg1KCk6IEFudGVubmEgaXMgc3dpdGNoaW5nIHRvOiAlZCBcbiIsIHUxYkFudGVubmFJbmRleCk7CisKKwlzd2l0Y2godTFiQW50ZW5uYUluZGV4KQorCXsKKwljYXNlIDA6CisJCXN3aXRjaChwcml2LT5yZl9jaGlwKQorCQl7CisJCWNhc2UgUkZfWkVCUkEyOgorCQljYXNlIFJGX1pFQlJBNDoKKyNpZmRlZiBDT05GSUdfUlRMODE4NUIKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCQkvLyBNYWMgcmVnaXN0ZXIsIG1haW4gYW50ZW5uYQorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOworCQkJLy9iYXNlIGJhbmQKKwkJCXdyaXRlX3BoeV9jY2soZGV2LDB4MTEsIDB4OWIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuCisJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NWMpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLgorCisjZWxzZQorCQkJLy8gTWFjIHJlZ2lzdGVyLCBtYWluIGFudGVubmEKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgQU5UU0VMLCAweDAzKTsKKwkJCS8vYmFzZSBiYW5kCisJCQl3cml0ZV9waHlfY2NrKGRldiwgMHgxMCwgMHg5Yik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4KKwkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1Yyk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuCisjZW5kaWYKKyNlbmRpZgorCisJCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtvd24gUkZDaGlwSUQoJWQpXG4iLCBwcml2LT5yZl9jaGlwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKKwkJeworCQljYXNlIFJGX1pFQlJBMjoKKwkJY2FzZSBSRl9aRUJSQTQ6CisjaWZkZWYgQ09ORklHX1JUTDgxODVCCisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworCQkJLy8gTWFjIHJlZ2lzdGVyLCBhdXggYW50ZW5uYQorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOworCQkJLy9iYXNlIGJhbmQKKwkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLgorCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDU0KTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4KKyNlbHNlCisJCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMCk7CisJCQkvL2Jhc2UgYmFuZAorCQkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4YmIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuCisJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NTQpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLgorI2VuZGlmCisjZW5kaWYKKworCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJTZXRBbnRlbm5hODE4NTogdW5rb3duIFJGQ2hpcElEKCVkKVxuIiwgcHJpdi0+cmZfY2hpcCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biB1MWJBbnRlbm5hSW5kZXgoJWQpXG4iLCB1MWJBbnRlbm5hSW5kZXgpOworCQlicmVhazsKKwl9CisKKwlpZihiQW50ZW5uYVN3aXRjaGVkKQorCXsKKwkJcHJpdi0+Q3VyckFudGVubmFJbmRleCA9IHUxYkFudGVubmFJbmRleDsKKwl9CisKKy8vCXByaW50aygiLVNldEFudGVubmE4MTg1KCk6IHJldHVybiAoJSNYKVxuIiwgYkFudGVubmFTd2l0Y2hlZCk7CisKKwlyZXR1cm4gYkFudGVubmFTd2l0Y2hlZDsKK30KKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlUb2dnbGUgQW50ZW5uYSBzd2l0Y2guCisvLworYm9vbAorU3dpdGNoQW50ZW5uYSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCWJvb2wJCWJSZXN1bHQ7CisKKwlpZihwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDApCisJeworI2lmIDAvL2x6bSBkZWwgMDgwODI2CisvL2J5IGFteSAwODAzMTIKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCWlmKHByaXYtPmJTd0FudGVubmFEaXZlcml0eSkKKwkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hQ29uZmlnODdTRShkZXYsIDEsIHRydWUpOworCQllbHNlCisjZW5kaWYKKyNlbmRpZgorCQkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMSk7CisvL2J5IGFteSAwODAzMTIKKy8vCQlwcmludGsoIlN3aXRjaEFudGVubmEoKTogc3dpdGNoaW5nIHRvIGFudGVubmEgMSAuLi4uLi5cbiIpOworLy8JCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDEpOy8vLWJ5IGFteSAwODAzMTIKKwl9CisJZWxzZQorCXsKKyNpZiAwLy9sem0gZGVsIDA4MDgyNgorLy9ieSBhbXkgMDgwMzEyCisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworCQlpZihwcml2LT5iU3dBbnRlbm5hRGl2ZXJpdHkpCisJCQliUmVzdWx0ID0gU2V0QW50ZW5uYUNvbmZpZzg3U0UoZGV2LCAwLCB0cnVlKTsKKwkJZWxzZQorI2VuZGlmCisjZW5kaWYKKwkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDApOworLy9ieSBhbXkgMDgwMzEyCisvLwkJcHJpbnRrKCJTd2l0Y2hBbnRlbm5hKCk6IHN3aXRjaGluZyB0byBhbnRlbm5hIDAgLi4uLi4uXG4iKTsKKy8vCQliUmVzdWx0ID0gU2V0QW50ZW5uYTgxODUoZGV2LCAwKTsvLy1ieSBhbXkgMDgwMzEyCisJfQorCisJcmV0dXJuIGJSZXN1bHQ7Cit9CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJRW5naW5lIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5IG1lY2hhbmlzbS4KKy8vCQlTaW5jZSA4MTg3IGhhcyBubyBUeCBwYXJ0IGluZm9ybWF0aW9uLAorLy8JCXRoaXMgaW1wbGVtZW50YXRpb24gaXMgb25seSBkZXBlbmRlbmQgb24gUnggcGFydCBpbmZvcm1hdGlvbi4KKy8vCisvLwkyMDA2LjA0LjE3LCBieSByY25qa28uCisvLwordm9pZAorU3dBbnRlbm5hRGl2ZXJzaXR5KAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCWJvb2wgICBiU3dDaGVja1NTPWZhbHNlOworLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEN1cnJBbnRlbm5hSW5kZXg6ICVkXG4iLCBwcml2LT5DdXJyQW50ZW5uYUluZGV4KTsKKy8vCXByaW50aygiQWRUaWNrQ291bnQgaXMgJWRcbiIscHJpdi0+QWRUaWNrQ291bnQpOworLy9ieSBhbXkgMDgwMzEyCisJaWYoYlN3Q2hlY2tTUykKKwl7CisJCXByaXYtPkFkVGlja0NvdW50Kys7CisKKwkJcHJpbnRrKCIoMSkgQWRUaWNrQ291bnQ6ICVkLCBBZENoZWNrUGVyaW9kOiAlZFxuIiwKKwkJCXByaXYtPkFkVGlja0NvdW50LCBwcml2LT5BZENoZWNrUGVyaW9kKTsKKwkJcHJpbnRrKCIoMikgQWRSeFNpZ25hbFN0cmVuZ3RoOiAlbGQsIEFkUnhTc1RocmVzaG9sZDogJWxkXG4iLAorCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NUaHJlc2hvbGQpOworCX0KKy8vCXByaXYtPkFkVGlja0NvdW50Kys7Ly8tYnkgYW15IDA4MDMxMgorCisJLy8gQ2FzZSAxLiBObyBMaW5rLgorCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkKKwl7CisJLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAxLiBObyBMaW5rLlxuIik7CisKKwkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOworCQkvLyBJIHN3aXRjaCBhbnRlbm5hIGhlcmUgdG8gcHJldmVudCBhbnkgb25lIG9mIGFudGVubmEgaXMgYnJva2VuIGJlZm9yZSBsaW5rIGVzdGFibGlzaGVkLCAyMDA2LjA0LjE4LCBieSByY25qa28uLgorCQlTd2l0Y2hBbnRlbm5hKGRldik7CisJfQorCS8vIENhc2UgMi4gTGlua2VkIGJ1dCBubyBwYWNrZXQgcmVjZWl2ZWQuCisJZWxzZSBpZihwcml2LT5BZFJ4T2tDbnQgPT0gMCkKKwl7CisJLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAyLiBMaW5rZWQgYnV0IG5vIHBhY2tldCByZWNlaXZlZC5cbiIpOworCisJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsKKwkJU3dpdGNoQW50ZW5uYShkZXYpOworCX0KKwkvLyBDYXNlIDMuIEV2YWx1YXRlIGxhc3QgYW50ZW5uYSBzd2l0Y2ggYWN0aW9uIGFuZCB1bmRvIGl0IGlmIG5lY2Vzc2FyeS4KKwllbHNlIGlmKHByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPT0gdHJ1ZSkKKwl7CisJLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAzLiBFdmFsdWF0ZSBsYXN0IGFudGVubmEgc3dpdGNoIGFjdGlvbi5cbiIpOworCisJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsKKworCQkvLyBBZGp1c3QgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQuCisJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggKyBwcml2LT5BZFJ4U3NCZWZvcmVTd2l0Y2hlZCkgLyAyOworCisJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPiBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpID8KKwkJCQkJcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkOiBwcml2LT5BZFJ4U3NUaHJlc2hvbGQ7CisJCWlmKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA8IHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKQorCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyBub3QgaW1wcm92ZWQgYWZ0ZXIgd2Ugc3d0aWNoZWQgYW50ZW5uYS4gPT4gU3dpY2ggYmFjay4KKy8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIG5vdCBpbXByb3ZlZCwgQ3VyclJ4U3M6ICVkLCBMYXN0UnhTczogJWRcbiIsCisvLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKTsKKy8vYnkgYW15IDA4MDMxMgorCQkJLy8gSW5jcmVhc2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kIGR1ZSB0byBiYWQgZGVjaXNpb24uCisJCQlwcml2LT5BZENoZWNrUGVyaW9kICo9IDI7CisvL2J5IGFteSAwODAzMTIKKwkJCS8vIEluY3JlYXNlIEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZC4KKwkJCWlmKHByaXYtPkFkQ2hlY2tQZXJpb2QgPiBwcml2LT5BZE1heENoZWNrUGVyaW9kKQorCQkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgPSBwcml2LT5BZE1heENoZWNrUGVyaW9kOworCisJCQkvLyBXcm9uZyBkZWNlaXNpb24gPT4gc3dpdGNoIGJhY2suCisJCQlTd2l0Y2hBbnRlbm5hKGRldik7CisJCX0KKwkJZWxzZQorCQl7IC8vIFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBpbXByb3ZlZC4KKy8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIGltcHJvdmVkLCBDdXJyUnhTczogJWQsIExhc3RSeFNzOiAlZFxuIiwKKy8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpOworCisJCQkvLyBSZXNldCBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgdG8gaXRzIG1pbiB2YWx1ZS4KKwkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgPSBwcml2LT5BZE1pbkNoZWNrUGVyaW9kOworCQl9CisKKy8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBBZFJ4U3NUaHJlc2hvbGQ6ICVkLCBBZENoZWNrUGVyaW9kOiAlZFxuIiwKKy8vCQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkLCBwcml2LT5BZENoZWNrUGVyaW9kKTsKKwl9CisJLy8gQ2FzZSA0LiBFdmFsdWF0ZSBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuCisJLy8gQ2F1c2UgVGFibGUgU3BlZWQgaXMgdmVyeSBmYXN0IGluIFRSQyBEZWxsIExhYiwgd2UgY2hlY2sgaXQgZXZlcnkgdGltZS4KKwllbHNlLy8gaWYocHJpdi0+QWRUaWNrQ291bnQgPj0gcHJpdi0+QWRDaGVja1BlcmlvZCkvLy1ieSBhbXkgMDgwMzEyCisJeworLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IENhc2UgNC4gRXZhbHVhdGUgaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93LlxuIik7CisKKwkJcHJpdi0+QWRUaWNrQ291bnQgPSAwOworCisJCS8vCisJCS8vIDxSb2dlcl9Ob3Rlcz4gV2UgZXZhbHVhdGUgUnhPayBjb3VudHMgZm9yIGVhY2ggYW50ZW5uYSBmaXJzdCBhbmQgdGhhbgorCQkvLyBldmFsdWF0ZSBzaWduYWwgc3RyZW5ndGguCisJCS8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIGNhbiBvdmVyY29tZSB0aGUgZGlzYWJpbGl0eSBvZiBDQ0Egb24gYm90aCB0d28gYW50ZW5uYXMKKwkJLy8gV2hlbiBzaWduYWwgc3RyZW5ndGggd2FzIGV4dHJlbWVseSBsb3cgb3IgaGlnaC4KKwkJLy8gMjAwOC4wMS4zMC4KKwkJLy8KKworCQkvLworCQkvLyBFdmFsdWF0ZSBSeE9rIGNvdW50IGZyb20gZWFjaCBhbnRlbm5hIGlmIHdlIHNoYWxsIHN3aXRjaCBkZWZhdWx0IGFudGVubmEgbm93LgorCQkvLyBBZGRlZCBieSBSb2dlciwgMjAwOC4wMi4yMS4KKy8ve2J5IGFteSAwODAzMTIKKwkJaWYoKHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250IDwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCkKKwkJCSYmIChwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDApKQorCQl7IC8vIFdlIHNldCBNYWluIGFudGVubmEgYXMgZGVmYXVsdCBidXQgUnhPayBjb3VudCB3YXMgbGVzcyB0aGFuIEF1eCBvbmVzLgorCisJLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IE1haW4gYW50ZW5uYSBSeE9LIGlzIHBvb3IsIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsCisJLy8JCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCk7CisKKwkJCS8vIFN3aXRjaCB0byBBdXggYW50ZW5uYS4KKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYoKHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQgPCBwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCkKKwkJCSYmIChwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDEpKQorCQl7IC8vIFdlIHNldCBBdXggYW50ZW5uYSBhcyBkZWZhdWx0IGJ1dCBSeE9rIGNvdW50IHdhcyBsZXNzIHRoYW4gTWFpbiBvbmVzLgorCisJLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEF1eCBhbnRlbm5hIFJ4T0sgaXMgcG9vciwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwKKwkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsKKworCQkJLy8gU3dpdGNoIHRvIE1haW4gYW50ZW5uYS4KKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJey8vIERlZmF1bHQgYW50ZW5uYSBpcyBiZXR0ZXIuCisKKwkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogRGVmYXVsdCBhbnRlbm5hIGlzIGJldHRlci4sIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsCisJLy8JCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCk7CisKKwkJCS8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgY3VycmVudCBzaWduYWwgc3RyZW5ndGguCisJCQlwcml2LT5iSFdBZFN3aXRjaGVkID0gZmFsc2U7CisJCX0KKwkJLy8KKwkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeCBzaWduYWwgc3RyZW5ndGggT05MWSB3aGVuIGRlZmF1bHQgYW50ZW5uYQorCQkvLyBkaWRuJ3QgY2hhbmdlZCBieSBIVyBldmFsdWF0aW9uLgorCQkvLyAyMDA4LjAyLjI3LgorCQkvLworCQkvLyBbVFJDIERlbGwgTGFiXSBTaWduYWxTdHJlbmd0aCBpcyBpbmFjY3VyYWN5LiBJc2FpYWggMjAwOC0wMy0wNQorCQkvLyBGb3IgZXhhbXBsZSwgVGhyb3VnaHB1dCBvZiBhdXggaXMgYmV0dGVyIHRoYW4gbWFpbiBhbnRlbm5hKGFib3V0IDEwTSB2LnMgMk0pLAorCQkvLyBidXQgQWRSeFNpZ25hbFN0cmVuZ3RoIGlzIGxlc3MgdGhhbiBtYWluLgorCQkvLyBPdXIgZ3Vlc3MgaXMgdGhhdCBtYWluIGFudGVubmEgaGF2ZSBsb3dlciB0aHJvdWdocHV0IGFuZCBnZXQgbWFueSBjaGFuZ2UKKwkJLy8gdG8gcmVjZWl2ZSBtb3JlIENDSyBwYWNrZXRzKGV4LkJlYWNvbikgd2hpY2ggaGF2ZSBzdHJvbmdlciBTaWduYWxTdHJlbmd0aC4KKwkJLy8KKwkJaWYoICghcHJpdi0+YkhXQWRTd2l0Y2hlZCkgJiYgKGJTd0NoZWNrU1MpKQorCQl7CisvL2J5IGFteSAwODAzMTJ9CisJCS8vIEV2YWx1YXRlIFJ4IHNpZ25hbCBzdHJlbmd0aCBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuCisJCWlmKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA8IHByaXYtPkFkUnhTc1RocmVzaG9sZCkKKwkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgd2VhayA9PiBTd2l0Y2ggQW50ZW5uYS4KKy8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIHdlYWssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsCisvLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CisKKwkJCXByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkID0gcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoOworCQkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IHRydWU7CisKKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJfQorCQllbHNlCisJCXsgLy8gUnggc2lnbmFsIHN0cmVuZ3RoIGlzIE9LLgorLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgT0ssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsCisvLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CisKKwkJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsKKwkJCS8vIEluY3JlYXNlIFJ4IHNpZ25hbCBzdHJlbmd0aCB0aHJlYXNob2xkIGlmIG5lY2Vzc2FyeS4KKwkJCWlmKAkocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID4gKHByaXYtPkFkUnhTc1RocmVzaG9sZCArIDEwKSkgJiYgLy8gU2lnbmFsIGlzIG11Y2ggc3Ryb25nZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZAorCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA8PSBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpIC8vIEN1cnJlbnQgdGhyZWhvbGQgaXMgbm90IHlldCByZWFjaCB1cHBlciBsaW1pdC4KKwkJCXsKKwkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNzVGhyZXNob2xkICsgcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKSAvIDI7CisJCQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkID0gKHByaXYtPkFkUnhTc1RocmVzaG9sZCA+IHByaXYtPkFkTWF4UnhTc1RocmVzaG9sZCkgPworCQkJCQkJCQkJCQkJcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkOiBwcml2LT5BZFJ4U3NUaHJlc2hvbGQ7Ly8rYnkgYW15IDA4MDMxMgorCQkJfQorCisJCQkvLyBSZWR1Y2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kIGlmIHBvc3NpYmxlLgorCQkJaWYoIHByaXYtPkFkQ2hlY2tQZXJpb2QgPiBwcml2LT5BZE1pbkNoZWNrUGVyaW9kICkKKwkJCXsKKwkJCQlwcml2LT5BZENoZWNrUGVyaW9kIC89IDI7CisJCQl9CisJCX0KKwkJfQorCX0KKy8vYnkgYW15IDA4MDMxMgorCS8vIFJlc2V0IGFudGVubmEgZGl2ZXJzaXR5IFJ4IHJlbGF0ZWQgc3RhdGlzdGljcy4KKwlwcml2LT5BZFJ4T2tDbnQgPSAwOworCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250ID0gMDsKKwlwcml2LT5BZEF1eEFudGVubmFSeE9rQ250ID0gMDsKKy8vYnkgYW15IDA4MDMxMgorCisvLwlwcml2LT5BZFJ4T2tDbnQgPSAwOy8vLWJ5IGFteSAwODAzMTIKKworLy8JcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5KClcbiIpOworfQorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBUeCBQb3dlciBUcmFja2luZyBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4KKy8vCitib29sCitDaGVja1R4UHdyVHJhY2tpbmcoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYoIXByaXYtPmJUeFBvd2VyVHJhY2spCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisvL2x6bSByZXNlcnZlZCAwODA4MjYKKwkvL2lmKHByaXYtPmJTY2FuSW5Qcm9ncmVzcykKKwkvL3sKKwkvLwlyZXR1cm4gZmFsc2U7CisJLy99CisKKwkvL2lmIDg3U0UgaXMgaW4gSGlnaCBQb3dlciAsIGRvbid0IGRvIFR4IFBvd2VyIFRyYWNraW5nLiBhc2tlZCBieSBTRDMgRUQuIDIwMDgtMDgtMDggSXNhaWFoCisJaWYocHJpdi0+YlRvVXBkYXRlVHhQd3IpCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5LgorLy8KK3ZvaWQKK1N3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJUlRfUkZfUE9XRVJfU1RBVEUgcnRTdGF0ZTsKKworCS8vcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygpXG4iKTsKKworCS8vCisJLy8gV2UgZG8gTk9UIG5lZWQgdG8gc3dpdGNoIGFudGVubmEgd2hpbGUgUkYgaXMgb2ZmLgorCS8vIDIwMDcuMDUuMDksIGFkZGVkIGJ5IFJvZ2VyLgorCS8vCisJcnRTdGF0ZSA9IHByaXYtPmVSRlBvd2VyU3RhdGU7CisJZG97CisJCWlmIChydFN0YXRlID09IGVSZk9mZikKKwkJeworLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyIC0gUkYgaXMgT0ZGLlxuIik7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChydFN0YXRlID09IGVSZlNsZWVwKQorCQl7CisJCQkvLyBEb24ndCBhY2Nlc3MgQkIvUkYgdW5kZXIgRGlzYWJsZSBQTEwgc2l0dWF0aW9uLgorCQkJLy9SVF9UUkFDRSgoQ09NUF9SRnxDT01QX0FOVEVOTkEpLCBEQkdfTE9VRCwgKCJTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKCk6IFJGIGlzIFNsZWVwID0+IHNraXAgaXRcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJCVN3QW50ZW5uYURpdmVyc2l0eShkZXYpOworCisJfXdoaWxlKGZhbHNlKTsKKworCWlmKHByaXYtPnVwKQorCXsKKwkJcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNU0VDUyhBTlRFTk5BX0RJVkVSU0lUWV9USU1FUl9QRVJJT0QpOworCQlhZGRfdGltZXIoJnByaXYtPlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyKTsKKwl9CisKKwkvL3ByaW50aygiLVN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soKVxuIik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uaAppbmRleCAzZGU5MmYwLi5iMjczNmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5oCkBAIC0xLDQxICsxLDQxIEBACi0jaWZuZGVmIFI4MTgwX0RNX0ggDQotI2RlZmluZSBSODE4MF9ETV9IDQotDQotI2luY2x1ZGUgInI4MTgwLmgiDQotLy8jaW5jbHVkZSAicjgxODBfaHcuaCINCi0vLyNpbmNsdWRlICJyODE4MF85M2N4Ni5oIg0KLXZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggU2lnbmFsU3RyZW5ndGgpOw0KLWJvb2wgU2V0QW50ZW5uYTgxODUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwJdTggdTFiQW50ZW5uYUluZGV4KTsNCi1ib29sIFN3aXRjaEFudGVubmEoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLXZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYJKTsNCi12b2lkIFN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotYm9vbCBDaGVja0RpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi1ib29sIENoZWNrSGlnaFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpDQotdm9pZCBydGw4MTgwX2h3X2RpZ193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF9od19kaWdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2VuZGlmDQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQotI2Vsc2UNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2VuZGlmDQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PUtFUk5FTF9WRVJTSU9OKDIsNiwyMCkNCi12b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspOw0KLQ0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi0NCi0jZW5kaWYNCi12b2lkIFR4UHdyVHJhY2tpbmc4N1NFKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLWJvb2wgQ2hlY2tUeFB3clRyYWNraW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKTsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2VuZGlmDQotdm9pZCB0aW1lcl9yYXRlX2FkYXB0aXZlKHVuc2lnbmVkIGxvbmcgZGF0YSk7DQotDQotDQotI2VuZGlmDQorI2lmbmRlZiBSODE4MF9ETV9ICisjZGVmaW5lIFI4MTgwX0RNX0gKKworI2luY2x1ZGUgInI4MTgwLmgiCisvLyNpbmNsdWRlICJyODE4MF9ody5oIgorLy8jaW5jbHVkZSAicjgxODBfOTNjeDYuaCIKK3ZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggU2lnbmFsU3RyZW5ndGgpOworYm9vbCBTZXRBbnRlbm5hODE4NShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAl1OCB1MWJBbnRlbm5hSW5kZXgpOworYm9vbCBTd2l0Y2hBbnRlbm5hKAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYJKTsKK3ZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2Jvb2wgQ2hlY2tEaWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Citib29sIENoZWNrSGlnaFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisjZWxzZQordm9pZCBydGw4MTgwX2h3X2RpZ193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKyNlbHNlCit2b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspOworCisjZWxzZQordm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworI2VuZGlmCit2b2lkIFR4UHdyVHJhY2tpbmc4N1NFKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworYm9vbCBDaGVja1R4UHdyVHJhY2tpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQordm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKTsKKyNlbHNlCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCit2b2lkIHRpbWVyX3JhdGVfYWRhcHRpdmUodW5zaWduZWQgbG9uZyBkYXRhKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYwppbmRleCA4YjM5MDFkLi45NzliYTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCkBAIC0xMjc0LDggKzEyNzQsOCBAQAogCiB9CiBzdGF0aWMgaW50IHI4MTgwX3d4X3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkvL3ByaW50aygiPT09PT4lcygpXG4iLCBfX2Z1bmNfXyk7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwotCXJldCA9IGllZWU4MDIxMV93eF9zZXRfYXV0aChwcml2LT5pZWVlODAyMTEsIGluZm8sIGRhdGEsIGV4dHJhKTsKKwlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2F1dGgocHJpdi0+aWVlZTgwMjExLCBpbmZvLCAmd3JxdS0+cGFyYW0sIGV4dHJhKTsKIAl1cCgmcHJpdi0+d3hfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMxMiw4ICsxMzEyLDggQEAKIAlyZXR1cm4gcmV0OwogfQogc3RhdGljIGludCByODE4MF93eF9zZXRfZ2VuX2llKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAvLwlwcmludGsoIj09PT0+JXMoKSwgbGVuOiVkXG4iLCBfX2Z1bmNfXywgZGF0YS0+bGVuZ3RoKTsKIAlpbnQgcmV0PTA7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQAogCiAgICAgICAgIGRvd24oJnByaXYtPnd4X3NlbSk7CiAjaWYgMQotICAgICAgICByZXQgPSBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShwcml2LT5pZWVlODAyMTEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOworICAgICAgICByZXQgPSBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShwcml2LT5pZWVlODAyMTEsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgdXAoJnByaXYtPnd4X3NlbSk7CiAJLy9wcmludGsoIjw9PT09PT0lcygpLCByZXQ6JWRcbiIsIF9fZnVuY19fLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWFmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgVVNCX1NFUklBTF9RVUFURUNIX0VTVTEwMAorCXRyaXN0YXRlICJVU0IgUXVhdGVjaCBFU1UtMTAwIDggUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBRdWF0ZWNoIEVTVS0xMDAgOCBwb3J0IHVzYiB0bworCSAgc2VyaWFsIGFkYXB0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNlcnF0X3VzYi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDFkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0hfRVNVMTAwKQkJKz0gc2VycXRfdXNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGVjY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9UT0RPCkBAIC0wLDAgKzEsOCBAQAorVGhpbmdzIHRvIGRvIGZvciB0aGlzIGRyaXZlciB0byBnZXQgbWVyZ2VkIGludG8gdGhlIG1haW4gcG9ydGlvbiBvZiB0aGUKK2tlcm5lbDoKKwktIGNoZWNrcGF0Y2ggY2xlYW51cHMKKwktIHNwYXJzZSBjbGVhbgorCS0gcG9ydCB0byB0aGUgdXNiLXNlcmlhbCBsYXllciBpbnN0ZWFkIG9mIGRvaW5nIGl0IGFsbCBvbiBpdHMKKwkgIG93bi4KKworU2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL3NlcnF0X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9zZXJxdF91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzgxNTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9zZXJxdF91c2IuYwpAQCAtMCwwICsxLDI3NzkgQEAKKy8qCisgKiBUaGlzIGNvZGUgd2FzIGRldmVsb3BlZCBmb3IgdGhlIFF1YXRlY2ggVVNCIGxpbmUgZm9yIGxpbnV4LCBpdCB1c2VkCisgKiBtdWNoIG9mIHRoZSBjb2RlIGRldmVsb3BlZCBieSBHcmVnIEtyb2FoLUhhcnRtYW4gZm9yIFVTQiBzZXJpYWwgZGV2aWNlcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKy8qICNkZWZpbmUgREVCVUdfT04gKi8KKy8qICN1bmRlZiBkYmcgKi8KKyNpZmRlZiBERUJVR19PTgorI2RlZmluZSAgbXlkYmcoY29uc3QuLi4pICAgIHByaW50ayhjb25zdCkKKyNlbHNlCisjZGVmaW5lICBteWRiZyhjb25zdC4uLikKKyNlbmRpZgorCisvKiBwYXJpdHkgY2hlY2sgZmxhZyAqLworI2RlZmluZSBSRUxFVkFOVF9JRkxBRyhpZmxhZykJKGlmbGFnICYgKElHTkJSS3xCUktJTlR8SUdOUEFSfFBBUk1SS3xJTlBDSykpCisKKyNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkgICAgICAgIDAJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCisjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCSAgICAgICAgMjU1CS8qIGxvYWRzIG9mIGRldmljZXMgOikgKi8KKyNkZWZpbmUgTUFYX05VTV9QT1JUUwkJICAgICAgICA4CS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3J0cyBvbmUgZGV2aWNlIGNhbiBncmFiIGF0IG9uY2UgKi8KKyNkZWZpbmUgUFJFRlVGRl9MRVZFTF9DT05TRVJWQVRJVkUgIDEyOAorI2RlZmluZSBBVENfRElTQUJMRUQgICAgICAgICAgICAgICAgMHgwMAorCisjZGVmaW5lIFJSX0JJVFMgICAgICAgICAgICAgMHgwMwkvKiBmb3IgY2xlYXJpbmcgY2xvY2sgYml0cyAqLworI2RlZmluZSBEVVBNT0RFX0JJVFMgICAgICAgIDB4YzAKKworI2RlZmluZSBSUzIzMl9NT0RFICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUlRTQ1RTX1RPX0NPTk5FQ1RPUiAweDQwCisjZGVmaW5lIENMS1NfWDQgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExPT1BNT0RFX0JJVFMgICAgICAgMHg0MQkvKiBMT09QMSA9IGI2LCBMT09QMCA9IGIwIChQT1JUIEIpICovCisjZGVmaW5lIEFMTF9MT09QQkFDSyAgICAgICAgMHgwMQorI2RlZmluZSBNT0RFTV9DVFJMICAgICAgICAgIDB4NDAKKworI2RlZmluZSBUSElTQ0hBUiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXQorI2RlZmluZSBORVhUQ0hBUiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMV0KKyNkZWZpbmUgVEhJUkRDSEFSICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0KKyNkZWZpbmUgRk9VUlRIQ0hBUiAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDNdCisKKy8qCisgKiBVc2VmdWwgZGVmaW50aW9ucyBmb3IgcG9ydCBBLCBQb3J0IEIgYW5kIFBvcnQgQworICovCisjZGVmaW5lIEZVTExQV1JCSVQgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBORVhUX0JPQVJEX1BPV0VSX0JJVCAgICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIFNFUklBTF9MU1JfT0UgICAgICAgMHgwMgorI2RlZmluZSBTRVJJQUxfTFNSX1BFICAgICAgIDB4MDQKKyNkZWZpbmUgU0VSSUFMX0xTUl9GRSAgICAgICAweDA4CisjZGVmaW5lIFNFUklBTF9MU1JfQkkgICAgICAgMHgxMAorCisjZGVmaW5lIFNFUklBTF9MU1JfVEVNVCAgICAgMHg0MAorCisjZGVmaW5lICBESVZfTEFUQ0hfTFMgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lICBYTVRfSE9MRF9SRUdJU1RFUiAgICAgICAgICAweDAwCisjZGVmaW5lICBYVlJfQlVGRkVSX1JFR0lTVEVSICAgICAgICAweDAwCisjZGVmaW5lICBESVZfTEFUQ0hfTVMgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lICBGSUZPX0NPTlRST0xfUkVHSVNURVIgICAgICAweDAyCisjZGVmaW5lICBMSU5FX0NPTlRST0xfUkVHSVNURVIgICAgICAweDAzCisjZGVmaW5lICBNT0RFTV9DT05UUk9MX1JFR0lTVEVSICAgICAweDA0CisjZGVmaW5lICBMSU5FX1NUQVRVU19SRUdJU1RFUiAgICAgICAweDA1CisjZGVmaW5lICBNT0RFTV9TVEFUVVNfUkVHSVNURVIgICAgICAweDA2CisKKyNkZWZpbmUgIFNFUklBTF9NQ1JfRFRSICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgIFNFUklBTF9NQ1JfUlRTICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgIFNFUklBTF9NQ1JfTE9PUCAgICAgICAgICAgIDB4MTAKKworI2RlZmluZSAgU0VSSUFMX01TUl9DVFMgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgU0VSSUFMX01TUl9DRCAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSAgU0VSSUFMX01TUl9SSSAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSAgU0VSSUFMX01TUl9EU1IgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgU0VSSUFMX01TUl9NQVNLICAgICAgICAgICAgMHhmMAorCisjZGVmaW5lICBTRVJJQUxfOF9EQVRBICAgICAgICAgICAgICAweDAzCisjZGVmaW5lICBTRVJJQUxfN19EQVRBICAgICAgICAgICAgICAweDAyCisjZGVmaW5lICBTRVJJQUxfNl9EQVRBICAgICAgICAgICAgICAweDAxCisjZGVmaW5lICBTRVJJQUxfNV9EQVRBICAgICAgICAgICAgICAweDAwCisKKyNkZWZpbmUgIFNFUklBTF9PRERfUEFSSVRZICAgICAgICAgIDBYMDgKKyNkZWZpbmUgIFNFUklBTF9FVkVOX1BBUklUWSAgICAgICAgIDBYMTgKKyNkZWZpbmUgIFNFUklBTF9UV09fU1RPUEIgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgIFNFUklBTF9PTkVfU1RPUEIgICAgICAgICAgIDB4MDAKKworI2RlZmluZSAgTUFYX0JBVURfUkFURSAgICAgICAgICAgICAgNDYwODAwCisjZGVmaW5lICBNQVhfQkFVRF9SRU1BSU5ERVIgICAgICAgICA0NjA4CisKKyNkZWZpbmUgUVRfU0VUX0dFVF9ERVZJQ0UgICAgICAgICAgIDB4YzIKKyNkZWZpbmUgUVRfT1BFTl9DTE9TRV9DSEFOTkVMICAgICAgIDB4Y2EKKyNkZWZpbmUgUVRfR0VUX1NFVF9QUkVCVUZfVFJJR19MVkwgIDB4Y2MKKyNkZWZpbmUgUVRfU0VUX0FURiAgICAgICAgICAgICAgICAgIDB4Y2QKKyNkZWZpbmUgUVRfR0VUX1NFVF9SRUdJU1RFUiAgICAgICAgIDB4YzAKKyNkZWZpbmUgUVRfR0VUX1NFVF9VQVJUICAgICAgICAgICAgIDB4YzEKKyNkZWZpbmUgUVRfSFdfRkxPV19DT05UUk9MX01BU0sgICAgIDB4YzUKKyNkZWZpbmUgUVRfU1dfRkxPV19DT05UUk9MX01BU0sgICAgIDB4YzYKKyNkZWZpbmUgUVRfU1dfRkxPV19DT05UUk9MX0RJU0FCTEUgIDB4YzcKKyNkZWZpbmUgUVRfQlJFQUtfQ09OVFJPTCAgICAgICAgICAgIDB4YzgKKworI2RlZmluZSBTRVJJQUxRVF9QQ0lfSU9DX01BR0lDICdrJworI2RlZmluZSBTRVJJQUxRVF9XUklURV9RT1BSIF9JT1coU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgMCwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9XUklURV9RTUNSIF9JT1coU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgMSwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9HRVRfTlVNT0ZfVU5JVFMgX0lPUihTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCAyLCB2b2lkICopCisjZGVmaW5lIFNFUklBTFFUX0dFVF9USElTX1VOSVQgX0lPUihTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCAzLCB2b2lkICopCisjZGVmaW5lIFNFUklBTFFUX1JFQURfUU9QUiBfSU9SKFNFUklBTFFUX1BDSV9JT0NfTUFHSUMsIDQsIGludCkKKyNkZWZpbmUgU0VSSUFMUVRfUkVBRF9RTUNSIF9JT1IoU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgNSwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRCBfSU9SKFNFUklBTFFUX1BDSV9JT0NfTUFHSUMsIDYsIGludCkJLyogcmV0dXJucyBzdWNjZXNzZnVsIGlmIDQyMiBleHRlbmRlZCAqLworCisjZGVmaW5lIFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOICAgIDB4YzAKKyNkZWZpbmUgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VUICAgMHg0MAorCisjZGVmaW5lIEFUQ19ESVNBQkxFRCAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUQ19SVFNfRU5BQkxFRCAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBVENfRFRSX0VOQUJMRUQgICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBSUl9CSVRTICAgICAgICAgICAgIDB4MDMJLyogZm9yIGNsZWFyaW5nIGNsb2NrIGJpdHMgKi8KKyNkZWZpbmUgRFVQTU9ERV9CSVRTICAgICAgICAweGMwCisKKyNkZWZpbmUgRlVMTF9EVVBMRVggICAgICAgICAweDAwCisjZGVmaW5lIEhBTEZfRFVQTEVYX1JUUyAgICAgMHg0MAorI2RlZmluZSBIQUxGX0RVUExFWF9EVFIgICAgIDB4ODAKKworI2RlZmluZSBRTUNSX0ZVTExfRFVQTEVYICAweDAwCisjZGVmaW5lIFFNQ1JfSEFMRl9EVVBMRVhfUlRTIDB4MDIKKyNkZWZpbmUgUU1DUl9IQUxGX0RVUExFWF9EVFIgMHgwMQorI2RlZmluZSBRTUNSX0hBTEZfRFVQTEVYX01BU0sgMHgwMworI2RlZmluZSBRTUNSX0NPTk5FQ1RPUl9NQVNLIDB4MUMKKworI2RlZmluZSBRTUNSX1JYX0VOX01BU0sgMHgyMAorCisjZGVmaW5lIFFNQ1JfQUxMX0xPT1BCQUNLICAgIDB4MTAKKyNkZWZpbmUgUU1DUl9NT0RFTV9DT05UUk9MICAgMFgwMAorCisjZGVmaW5lIFNFUklBTFFUX0lPQ19NQVhOUiA2CisKK3N0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgeworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CS8qIHBvaW50ZXIgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBwb3J0ICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsJLyogdGhlIGNvcmVzcG9uZGluZyB0dHkgZm9yIHRoaXMgcG9ydCAqLworCXVuc2lnbmVkIGNoYXIgbnVtYmVyOworCWNoYXIgYWN0aXZlOwkJLyogc29tZW9uZSBoYXMgdGhpcyBkZXZpY2Ugb3BlbiAqLworCisJdW5zaWduZWQgY2hhciAqaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICppbnRlcnJ1cHRfaW5fdXJiOworCV9fdTggaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKKworCXVuc2lnbmVkIGNoYXIgKmJ1bGtfaW5fYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKnhmZXJfdG9fdHR5X2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICpyZWFkX3VyYjsKKwlfX3U4IGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCisJdW5zaWduZWQgY2hhciAqYnVsa19vdXRfYnVmZmVyOworCWludCBidWxrX291dF9zaXplOworCXN0cnVjdCB1cmIgKndyaXRlX3VyYjsKKwlfX3U4IGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKKworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCWludCBvcGVuX2NvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKworCV9fdTggc2hhZG93TENSOwkJLyogbGFzdCBMQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4IHNoYWRvd01DUjsJCS8qIGxhc3QgTUNSIHZhbHVlIHJlY2VpdmVkICovCisJX191OCBzaGFkb3dNU1I7CQkvKiBsYXN0IE1TUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTggc2hhZG93TFNSOwkJLyogbGFzdCBMU1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlpbnQgUnhIb2xkaW5nOworCWNoYXIgY2xvc2VQZW5kaW5nOworCWludCBSZWFkQnVsa1N0b3BwZWQ7CisKKwl2b2lkICpwcml2YXRlOwkJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBzcGVjaWZpYyBwb3J0ICovCit9OworCitzdHJ1Y3QgaWRlbnRpdHkgeworCWludCBpbmRleDsKKwlpbnQgbl9pZGVudGl0eTsKK307CisKK3N0cnVjdCB1c2Jfc2VyaWFsIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHR0eV9kcml2ZXIgKnR0eV9kcml2ZXI7CS8qIHRoZSB0dHlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgbWlub3I7CS8qIHRoZSBzdGFydGluZyBtaW5vciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciBudW1fcG9ydHM7CS8qIHRoZSBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgaGFzICovCisJY2hhciBudW1faW50ZXJydXB0X2luOwkvKiBudW1iZXIgb2YgaW50ZXJydXB0IGluIGVuZHBvaW50cyB3ZSBoYXZlICovCisJY2hhciBudW1fYnVsa19pbjsJLyogbnVtYmVyIG9mIGJ1bGsgaW4gZW5kcG9pbnRzIHdlIGhhdmUgKi8KKwljaGFyIG51bV9idWxrX291dDsJLyogbnVtYmVyIG9mIGJ1bGsgb3V0IGVuZHBvaW50cyB3ZSBoYXZlICovCisJdW5zaWduZWQgY2hhciBudW1fT3BlbkNvdW50OwkvKiB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoaXMgZGV2aWNlIGhhcyAqLworCisJX191MTYgdmVuZG9yOwkJLyogdmVuZG9yIGlkIG9mIHRoaXMgZGV2aWNlICovCisJX191MTYgcHJvZHVjdDsJCS8qIHByb2R1Y3QgaWQgb2YgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IHBvcnRbTUFYX05VTV9QT1JUU107CisKKwl2b2lkICpwcml2YXRlOwkJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBzcGVjaWZpYyBkcml2ZXIgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfcGFyYW5vaWFfY2hlY2soc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlpZiAoIXBvcnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgPT0gTlVMTCIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIXBvcnQtPnNlcmlhbCkgeworCQlkYmcoIiVzIC0gcG9ydC0+c2VyaWFsID09IE5VTExcbiIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIXBvcnQtPnR0eSkgeworCQlkYmcoIiVzIC0gcG9ydC0+dHR5ID09IE5VTExcbiIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKiBJbmxpbmUgZnVuY3Rpb25zIHRvIGNoZWNrIHRoZSBzYW5pdHkgb2YgYSBwb2ludGVyIHRoYXQgaXMgcGFzc2VkIHRvIHVzICovCitzdGF0aWMgaW5saW5lIGludCBzZXJpYWxfcGFyYW5vaWFfY2hlY2soc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyAtIHNlcmlhbCA9PSBOVUxMXG4iLCBmdW5jdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX3NlcmlhbCAqZ2V0X3VzYl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJCWNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCS8qIGlmIG5vIHBvcnQgd2FzIHNwZWNpZmllZCwgb3IgaXQgZmFpbHMgYSBwYXJhbm9pYSBjaGVjayAqLworCWlmICghcG9ydCB8fAorCSAgICBwb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIGZ1bmN0aW9uKSB8fAorCSAgICBzZXJpYWxfcGFyYW5vaWFfY2hlY2socG9ydC0+c2VyaWFsLCBmdW5jdGlvbikpIHsKKwkJLyogdGhlbiBzYXkgdGhhdCB3ZSBkb250IGhhdmUgYSB2YWxpZCB1c2Jfc2VyaWFsIHRoaW5nLCB3aGljaCB3aWxsCisJCSAqIGVuZCB1cCBnZW5yYXRpbmcgLUVOT0RFViByZXR1cm4gdmFsdWVzICovCisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwb3J0LT5zZXJpYWw7Cit9CisKK3N0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgeworCV9fdTggcG9ydGE7CisJX191OCBwb3J0YjsKKwlfX3U4IHBvcnRjOworfTsKKworc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhIHsKKwlfX3U4IGxpbmVfc3RhdHVzOworCV9fdTggbW9kZW1fc3RhdHVzOworfTsKKworc3RhdGljIHZvaWQgUHJvY2Vzc0xpbmVTdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbGluZV9zdGF0dXMpOworc3RhdGljIHZvaWQgUHJvY2Vzc01vZGVtU3RhdHVzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBtb2RlbV9zdGF0dXMpOworc3RhdGljIHZvaWQgUHJvY2Vzc1J4Q2hhcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIERhdGEpOworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfZnJlZV9zZXJpYWwoaW50IG51bV9wb3J0cywgaW50ICptaW5vcik7CisKK3N0YXRpYyBpbnQgc2VycXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKK3N0YXRpYyB2b2lkIHNlcnF0X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBib3hfc2V0X2RldmljZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJICBzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhICpwRGV2aWNlRGF0YSk7CitzdGF0aWMgaW50IGJveF9nZXRfZGV2aWNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkgIHN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgKnBEZXZpY2VEYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgc2VyaWFsX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IHNlcmlhbF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHNlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CitzdGF0aWMgaW50IHNlcmlhbF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQlpbnQgY291bnQpOworCitzdGF0aWMgdm9pZCBzZXJpYWxfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBzZXJpYWxfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgc2VyaWFsX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50IHNlcmlhbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisKK3N0YXRpYyBpbnQgcXRfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IEJveFNldFByZWJ1ZmZlckxldmVsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgaW50IEJveFNldEFUQyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBuX01vZGUpOworc3RhdGljIGludCBCb3hTZXRVYXJ0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0X2Rpdmlzb3IsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9MQ1IpOworCitzdGF0aWMgaW50IEJveE9QZW5DbG9zZUNoYW5uZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydF9OdW1iZXIsCisJCQkgICAgICAgX191MTYgT3BlbkNsb3NlLAorCQkJICAgICAgIHN0cnVjdCBxdF9vcGVuX2NoYW5uZWxfZGF0YSAqcERldmljZURhdGEpOworc3RhdGljIHZvaWQgcXRfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBCb3hHZXRSZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBzaG9ydCBVYXJ0X051bWJlciwKKwkJCSAgdW5zaWduZWQgc2hvcnQgUmVnaXN0ZXJfTnVtLCBfX3U4ICpwVmFsdWUpOworc3RhdGljIGludCBCb3hTZXRSZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBzaG9ydCBVYXJ0X051bWJlciwKKwkJCSAgdW5zaWduZWQgc2hvcnQgUmVnaXN0ZXJfTnVtLCB1bnNpZ25lZCBzaG9ydCBWYWx1ZSk7CitzdGF0aWMgdm9pZCBxdF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IHF0X3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBmcm9tX3VzZXIsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBwb3J0X3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgcXRfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgcXRfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBxdF9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHF0X3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyBpbnQgQm94U2V0SFdfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgaW50IFVhcnROdW1iZXIsCisJCQkgICAgIGludCBiU2V0KTsKK3N0YXRpYyBpbnQgQm94RGlzYWJsZV9TV19GbG93Q3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBVYXJ0TnVtYmVyKTsKK3N0YXRpYyBpbnQgRW11bGF0ZVdyaXRlUU1DUl9SZWcoaW50IGluZGV4LCB1bnNpZ25lZCB1Y192YWx1ZSk7CitzdGF0aWMgaW50IEVtdWxhdGVSZWFkUU1DUl9SZWcoaW50IGluZGV4LCB1bnNpZ25lZCAqdWNfdmFsdWUpOworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpmaW5kX3RoZV9ib3godW5zaWduZWQgaW50IGluZGV4KTsKK3N0YXRpYyBpbnQgaW9jdGxfc2VyaWFsX3VzYihzdHJ1Y3QgaW5vZGUgKmlubm9kLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisKK3N0YXRpYyBpbnQgQm94U2V0U1dfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydCwKKwkJCSAgICAgdW5zaWduZWQgY2hhciBzdG9wX2NoYXIsIHVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhcik7CitzdGF0aWMgdm9pZCBxdF9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKKworc3RhdGljIHZvaWQgcG9ydF9zb2ZyaW50KHZvaWQgKnByaXZhdGUpOworCitzdGF0aWMgdm9pZCByZXR1cm5fc2VyaWFsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgaW50IHNlcmlhbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50IHNlcmlhbF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3N0YXRpYyBpbnQgcXRfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitzdGF0aWMgaW50IHF0X3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMTQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRpbSBHb2JlbGksIFF1YXRlY2gsIEluYyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlF1YXRlY2ggVVNCIHRvIFNlcmlhbCBEcml2ZXIiCisKKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9RVUFURUNICQkJMHgwNjFkCS8qIFF1YXRlY2ggVklEICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX1NJTkdMRV9QT1JUCTB4QzAyMAkvKiBTU1UxMDAgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfU0lOR0xFX1BPUlQJMHhDMDMwCS8qIFNTVTIwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9EVUFMX1BPUlQJMHhDMDQwCS8qIERTVTEwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9EVUFMX1BPUlQJMHhDMDUwCS8qIERTVTIwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9GT1VSX1BPUlQJMHhDMDYwCS8qIFFTVTEwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9GT1VSX1BPUlQJMHhDMDcwCS8qIFFTVTIwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0EJMHhDMDgwCS8qIEVTVTEwMEEgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRUlHSFRfUE9SVF9CCTB4QzA4MQkvKiBFU1UxMDBCICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQQkweEMwQTAJLyogRVNVMjAwQSAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0IJMHhDMEExCS8qIEVTVTIwMEIgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9BCTB4QzA5MAkvKiBIU1UxMDBBICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfQgkweEMwOTEJLyogSFNVMTAwQiAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0MJMHhDMDkyCS8qIEhTVTEwMEMgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9ECTB4QzA5MwkvKiBIU1UxMDBEICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQQkweEMwQjAJLyogSFNVMjAwQSAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0IJMHhDMEIxCS8qIEhTVTIwMEIgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9DCTB4QzBCMgkvKiBIU1UyMDBDICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfRAkweEMwQjMJLyogSFNVMjAwRCAqLworCisvKiB0YWJsZSBvZiBRdWF0ZWNoIGRldmljZXMgICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2VycXRfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9TSU5HTEVfUE9SVCl9LAorCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX1NJTkdMRV9QT1JUKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9EVUFMX1BPUlQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRk9VUl9QT1JUKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9GT1VSX1BPUlQpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0EpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0EpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfQSl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9CKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0MpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfRCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9BKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQyl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9EKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNlcnF0X3RhYmxlKTsKKworc3RhdGljIGludCBtYWpvcl9udW1iZXI7CitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbF90YWJsZVtTRVJJQUxfVFRZX01JTk9SU107CS8qIGluaXRpYWxseSBhbGwgTlVMTCAqLworCisvKiB0YWJsZSBvZiBRdWF0ZWNoIDQyMmRldmljZXMgICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcnF0XzQyMl90YWJsZVtdID0geworCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX1NJTkdMRV9QT1JULAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVCwKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9GT1VSX1BPUlQsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRUlHSFRfUE9SVF9BLAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQiwKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0EsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9CLAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQywKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0QsCisJMAkJCS8qIHRlcm1pbmF0ZSB3aXRoIHplcm8gKi8KK307CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXJxdF91c2JfZHJpdmVyID0geworCS5uYW1lID0gInF1YXRlY2gtdXNiLXNlcmlhbCIsCisJLnByb2JlID0gc2VycXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBzZXJxdF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBzZXJxdF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga3Rlcm1pb3MgKnNlcmlhbF90ZXJtaW9zW1NFUklBTF9UVFlfTUlOT1JTXTsKK3N0YXRpYyBzdHJ1Y3Qga3Rlcm1pb3MgKnNlcmlhbF90ZXJtaW9zX2xvY2tlZFtTRVJJQUxfVFRZX01JTk9SU107CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKKwkub3BlbiA9IHNlcmlhbF9vcGVuLAorCS5jbG9zZSA9IHNlcmlhbF9jbG9zZSwKKwkud3JpdGUgPSBzZXJpYWxfd3JpdGUsCisJLndyaXRlX3Jvb20gPSBzZXJpYWxfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPSBzZXJpYWxfaW9jdGwsCisJLnNldF90ZXJtaW9zID0gc2VyaWFsX3NldF90ZXJtaW9zLAorCS50aHJvdHRsZSA9IHNlcmlhbF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9IHNlcmlhbF91bnRocm90dGxlLAorCS5icmVha19jdGwgPSBzZXJpYWxfYnJlYWssCisJLmNoYXJzX2luX2J1ZmZlciA9IHNlcmlhbF9jaGFyc19pbl9idWZmZXIsCisJLnRpb2Ntc2V0ID0gc2VyaWFsX3Rpb2Ntc2V0LAorCS50aW9jbWdldCA9IHNlcmlhbF90aW9jbWdldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciBzZXJpYWxfdHR5X2RyaXZlciA9IHsKKwkubWFnaWMgPSBUVFlfRFJJVkVSX01BR0lDLAorCS5kcml2ZXJfbmFtZSA9ICJRdWF0ZWNoIHVzYi1zZXJpYWwiLAorCS5uYW1lID0gInR0eVFUX1VTQiIsCisJLm1ham9yID0gU0VSSUFMX1RUWV9NQUpPUiwKKwkubWlub3Jfc3RhcnQgPSAwLAorCS5udW0gPSBTRVJJQUxfVFRZX01JTk9SUywKKwkudHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUwsCisJLnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUwsCisJLmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVYsCisKKwkudGVybWlvcyA9IHNlcmlhbF90ZXJtaW9zLAorCS50ZXJtaW9zX2xvY2tlZCA9IHNlcmlhbF90ZXJtaW9zX2xvY2tlZCwKKwkuaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUwsCisKKwkuaW5pdF90ZXJtaW9zLmNfaWZsYWcgPSBJQ1JOTCB8IElYT04sCisJLmluaXRfdGVybWlvcy5jX29mbGFnID0gT1BPU1QsCisKKwkuaW5pdF90ZXJtaW9zLmNfbGZsYWcgPQorCSAgICBJU0lHIHwgSUNBTk9OIHwgRUNITyB8IEVDSE9FIHwgRUNIT0sgfCBFQ0hPQ1RMIHwgRUNIT0tFIHwgSUVYVEVOLAorfTsKKworLyogZm9wcyBmb3IgcGFyZW50IGRldmljZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VyaWFscXRfdXNiX2ZvcHMgPSB7CisJLmlvY3RsID0gaW9jdGxfc2VyaWFsX3VzYiwKK307CisKKyAvKioKKyAqCSAgc2VycXRfcHJvYmUKKyAqCisgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcworICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2VycXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBOVUxMOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfaW5fZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX291dF9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlpbnQgbWlub3I7CisJaW50IGJ1ZmZlcl9zaXplOworCWludCBpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJaW50IG51bV9pbnRlcnJ1cHRfaW4gPSAwOworCWludCBudW1fYnVsa19pbiA9IDA7CisJaW50IG51bV9idWxrX291dCA9IDA7CisJaW50IG51bV9wb3J0czsKKwlzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhIERldmljZURhdGE7CisJaW50IHN0YXR1czsKKworCW15ZGJnKCJJbiAlc1xuIiwgX19mdW5jX18pOworCisJLyogbGV0J3MgZmluZCB0aGUgZW5kcG9pbnRzIG5lZWRlZCAqLworCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7OworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQkJbXlkYmcoImZvdW5kIGJ1bGsgaW4iKTsKKwkJCWJ1bGtfaW5fZW5kcG9pbnRbbnVtX2J1bGtfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX2luOworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCW15ZGJnKCJmb3VuZCBidWxrIG91dFxuIik7CisJCQlidWxrX291dF9lbmRwb2ludFtudW1fYnVsa19vdXRdID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX291dDsKKwkJfQorCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQlteWRiZygiZm91bmQgaW50ZXJydXB0IGluXG4iKTsKKwkJCWludGVycnVwdF9pbl9lbmRwb2ludFtudW1faW50ZXJydXB0X2luXSA9IGVuZHBvaW50OworCQkJKytudW1faW50ZXJydXB0X2luOworCQl9CisJfQorCisJLyogZm91bmQgYWxsIHRoYXQgd2UgbmVlZCAqLworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlF1YXRlY2ggY29udmVydGVyIGRldGVjdGVkXG4iKTsKKwludW1fcG9ydHMgPSBudW1fYnVsa19vdXQ7CisJaWYgKG51bV9wb3J0cyA9PSAwKSB7CisJCWVycigiUXVhdGVjaCBkZXZpY2Ugd2l0aCBubyBidWxrIG91dCwgbm90IGFsbG93ZWQuIik7CisJCXJldHVybiAtRU5PREVWOworCisJfQorCisJc2VyaWFsID0gZ2V0X2ZyZWVfc2VyaWFsKG51bV9wb3J0cywgJm1pbm9yKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpIHsKKwkJZXJyKCJObyBtb3JlIGZyZWUgc2VyaWFsIGRldmljZXMiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc2VyaWFsLT5kZXYgPSBkZXY7CisJc2VyaWFsLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJc2VyaWFsLT5taW5vciA9IG1pbm9yOworCXNlcmlhbC0+bnVtX3BvcnRzID0gbnVtX3BvcnRzOworCXNlcmlhbC0+bnVtX2J1bGtfaW4gPSBudW1fYnVsa19pbjsKKwlzZXJpYWwtPm51bV9idWxrX291dCA9IG51bV9idWxrX291dDsKKwlzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW4gPSBudW1faW50ZXJydXB0X2luOworCXNlcmlhbC0+dmVuZG9yID0gZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yOworCXNlcmlhbC0+cHJvZHVjdCA9IGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3Q7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJZW5kcG9pbnQgPSBidWxrX2luX2VuZHBvaW50W2ldOworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7CisJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJYnVmZmVyX3NpemUgPSBlbmRwb2ludC0+d01heFBhY2tldFNpemU7CisJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXBvcnQtPnhmZXJfdG9fdHR5X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LAorCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJICBwb3J0LT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJICBxdF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgeworCQllbmRwb2ludCA9IGJ1bGtfb3V0X2VuZHBvaW50W2ldOworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsKKwkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQlidWZmZXJfc2l6ZSA9IGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZTsKKwkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+YnVsa19vdXRfYnVmZmVyKSB7CisJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfb3V0X2J1ZmZlciIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIGRldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZShkZXYsCisJCQkJCQkgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJICBxdF93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCX0KKworCS8qIEZvciB1cyBudW1iIG9mIGJ1bGtpbiAgb3Igb3V0ID0gbnVtYmVyIG9mIHBvcnRzICovCisJbXlkYmcoIiVzIC0gc2V0dGluZyB1cCAlZCBwb3J0IHN0cnVjdHVyZXMgZm9yIHRoaXMgZGV2aWNlXG4iLAorCSAgICAgIF9fZnVuY19fLCBudW1fYnVsa19pbik7CisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPm51bWJlciA9IGkgKyBzZXJpYWwtPm1pbm9yOworCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CisKKwkJSU5JVF9XT1JLKCZwb3J0LT53b3JrLCBwb3J0X3NvZnRpbnQpOworCisJCWluaXRfTVVURVgoJnBvcnQtPnNlbSk7CisKKwl9CisJc3RhdHVzID0gYm94X2dldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZCIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKworCW15ZGJnKF9fRklMRV9fICJEZXZpY2VEYXRhLnBvcnRiID0gMHgleCIsIERldmljZURhdGEucG9ydGIpOworCisJRGV2aWNlRGF0YS5wb3J0YiAmPSB+RlVMTFBXUkJJVDsKKwlteWRiZyhfX0ZJTEVfXyAiQ2hhbmdpbmcgRGV2aWNlRGF0YS5wb3J0YiB0byAweCV4IiwgRGV2aWNlRGF0YS5wb3J0Yik7CisKKwlzdGF0dXMgPSBib3hfc2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X3NldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisKKwkvKiBpbml0aWFsaXplIHRoZSBkZXZmcyBub2RlcyBmb3IgdGhpcyBkZXZpY2UgYW5kIGxldCB0aGUgdXNlciBrbm93IHdoYXQgcG9ydHMgd2UgYXJlIGJvdW5kIHRvICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAorCQkJICJDb252ZXJ0ZXIgbm93IGF0dGFjaGVkIHRvIHR0eVVTQiVkIChvciB1c2IvdHRzLyVkIGZvciBkZXZmcykiLAorCQkJIHNlcmlhbC0+cG9ydFtpXS5udW1iZXIsIHNlcmlhbC0+cG9ydFtpXS5udW1iZXIpOworCX0KKworCS8qIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChkZWJ1ZywgbWlub3IpOyAqLworCisJLyoqKioqKioqKioqVEFHIGFkZCBzdGFydCBuZXh0IGJvYXJkIGhlcmUgKioqKi8KKwlzdGF0dXMgPSBib3hfZ2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X2dldF9kZXZpY2UgZmFpbGVkIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCS8qCisJICogYW5kIGJlZm9yZSB3ZSBwb3dlciB1cCBsZXRzIGluaXRpYWxpYXplIHBhcm5lbnQgZGV2aWNlIHN0dWZmIGhlcmUgYmVmb3JlCisJICogd2Ugc2V0IHRobWVtIHZpYSBhbnkgb3RoZXIgbWV0aG9kIHN1Y2ggYXMgdGhlIHByb3BlcnR5IHBhZ2VzCisJICovCisJc3dpdGNoIChzZXJpYWwtPnByb2R1Y3QpIHsKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX1NJTkdMRV9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRFVBTF9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRk9VUl9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRUlHSFRfUE9SVF9BOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRUlHSFRfUE9SVF9COgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9BOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9COgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9DOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9EOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH4oUlJfQklUUyB8IERVUE1PREVfQklUUyk7CisJCURldmljZURhdGEucG9ydGEgfD0gQ0xLU19YNDsKKwkJRGV2aWNlRGF0YS5wb3J0YiAmPSB+KExPT1BNT0RFX0JJVFMpOworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IFJTMjMyX01PREU7CisJCWJyZWFrOworCisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9TSU5HTEVfUE9SVDoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVDoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0ZPVVJfUE9SVDoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQToKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQjoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQToKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQjoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQzoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfRDoKKwkJRGV2aWNlRGF0YS5wb3J0YSAmPSB+KFJSX0JJVFMgfCBEVVBNT0RFX0JJVFMpOworCQlEZXZpY2VEYXRhLnBvcnRhIHw9IENMS1NfWDQ7CisJCURldmljZURhdGEucG9ydGIgJj0gfihMT09QTU9ERV9CSVRTKTsKKwkJRGV2aWNlRGF0YS5wb3J0YiB8PSBBTExfTE9PUEJBQ0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURldmljZURhdGEucG9ydGEgJj0gfihSUl9CSVRTIHwgRFVQTU9ERV9CSVRTKTsKKwkJRGV2aWNlRGF0YS5wb3J0YSB8PSBDTEtTX1g0OworCQlEZXZpY2VEYXRhLnBvcnRiICY9IH4oTE9PUE1PREVfQklUUyk7CisJCURldmljZURhdGEucG9ydGIgfD0gUlMyMzJfTU9ERTsKKwkJYnJlYWs7CisKKwl9CisJc3RhdHVzID0gQm94U2V0UHJlYnVmZmVyTGV2ZWwoc2VyaWFsKTsJLyogc2V0cyB0byBkZWZhdWx0IHZhdWUgKi8KKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0UHJlYnVmZmVyTGV2ZWwgZmFpbGVkXG4iKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBCb3hTZXRBVEMoc2VyaWFsLCBBVENfRElTQUJMRUQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRBVEMgZmFpbGVkXG4iKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJbXlkYmcoX19GSUxFX18gIkRldmljZURhdGEucG9ydGIgPSAweCV4IiwgRGV2aWNlRGF0YS5wb3J0Yik7CisKKwlEZXZpY2VEYXRhLnBvcnRiIHw9IE5FWFRfQk9BUkRfUE9XRVJfQklUOworCW15ZGJnKF9fRklMRV9fICJDaGFuZ2luZyBEZXZpY2VEYXRhLnBvcnRiIHRvIDB4JXgiLCBEZXZpY2VEYXRhLnBvcnRiKTsKKworCXN0YXR1cyA9IGJveF9zZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfc2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKworCW15ZGJnKCJFeGl0IFN1Y2Nlc3MgJXNcbiIsIF9fZnVuY19fKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBzZXJpYWwpOworCXJldHVybiAwOworCitwcm9iZV9lcnJvcjoKKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19pbjsgKytpKSB7CisJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOworCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgeworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJCWtmcmVlKHBvcnQtPnhmZXJfdG9fdHR5X2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X2luOyArK2kpIHsKKwkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisJfQorCisJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKKwlteWRiZygiRXhpdCBmYWlsICVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwlrZnJlZShzZXJpYWwpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogcmV0dXJucyB0aGUgc2VyaWFsX3RhYmxlIGFycmF5IHBvaW50ZXJzIHRoYXQgYXJlIHRha2VuCisgKiB1cCBpbiBjb25zZWN1dGl2ZSBwb3NpdGlvbnMgZm9yIGVhY2ggcG9ydCB0byBhIGNvbW1vbiB1c2Jfc2VyaWFsIHN0cnVjdHVyZQorICogYmFjayB0byBOVUxMCisgKi8KK3N0YXRpYyB2b2lkIHJldHVybl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCW15ZGJnKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJc2VyaWFsX3RhYmxlW3NlcmlhbC0+bWlub3IgKyBpXSA9IE5VTEw7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBGaW5kcyB0aGUgZmlyc3QgbG9jYXRpbyBpbnQgdGhlIHNlcmlhbF90YWJsZSBhcnJheSB3aGVyZSBpdCBjYW4gZml0CisgKiBudW1fcG9ydHMgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHBvaW50cyB0byBhIGNvbW1vbiB1c2Jfc2VyaWFsCisgKiBzdHJ1Y3R1cmUsYWxsb2NhdGVzIGEgc3R1Y3R1cmUgcG9pbnRzIHRvIGl0IGluIGFsbCB0aGUgc3RydWN0dXJlcywgYW5kCisgKiByZXR1cm5zIHRoZSBpbmRleCB0byB0aGUgZmlyc3QgbG9jYXRpb24gaW4gdGhlIGFycmF5IGluIHRoZSAibWlub3IiCisgKiB2YXJpYWJsZS4KKyAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfZnJlZV9zZXJpYWwoaW50IG51bV9wb3J0cywgaW50ICptaW5vcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlpbnQgaSwgajsKKwlpbnQgZ29vZF9zcG90OworCisJbXlkYmcoIiVzICVkXG4iLCBfX2Z1bmNfXywgbnVtX3BvcnRzKTsKKworCSptaW5vciA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpXSkKKwkJCWNvbnRpbnVlOworCisJCWdvb2Rfc3BvdCA9IDE7CisJCS8qCisJCSAqIGZpbmQgYSBzcG90IGluIHRoZSBhcnJheSB3aGVyZSB5b3UgY2FuIGZpdCBjb25zZWN1dGl2ZQorCQkgKiBwb3NpdGlvbnMgdG8gcHV0IHRoZSBwb2ludGVycyB0byB0aGUgdXNiX3NlcmFpbCBhbGxvY2F0ZWQKKwkJICogc3RydWN0dXJlIGZvciBhbGwgdGhlIG1pbm9yIG51bWJlcnMgKGllLiBwb3J0cykKKwkJICovCisJCWZvciAoaiA9IDE7IGogPD0gbnVtX3BvcnRzIC0gMTsgKytqKQorCQkJaWYgKHNlcmlhbF90YWJsZVtpICsgal0pCisJCQkJZ29vZF9zcG90ID0gMDsKKwkJaWYgKGdvb2Rfc3BvdCA9PSAwKQorCQkJY29udGludWU7CisKKwkJc2VyaWFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZXJpYWwpIHsKKwkJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJbWVtc2V0KHNlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsKSk7CisJCXNlcmlhbF90YWJsZVtpXSA9IHNlcmlhbDsKKwkJKm1pbm9yID0gaTsKKwkJbXlkYmcoIiVzIC0gbWlub3IgYmFzZSA9ICVkXG4iLCBfX2Z1bmNfXywgKm1pbm9yKTsKKworCQkvKgorCQkgKiBjb3B5IGluIHRoZSBwb2ludGVyIGludG8gdGhlIGFycmF5IHN0YXJ0aW5nIGEgdGhlICptaW5vcgorCQkgKiBwb3NpdGlvbiBtaW5vciBpcyB0aGUgaW5kZXggaW50byB0aGUgYXJyYXkuCisJCSAqLworCQlmb3IgKGkgPSAqbWlub3IgKyAxOworCQkgICAgIChpIDwgKCptaW5vciArIG51bV9wb3J0cykpICYmIChpIDwgU0VSSUFMX1RUWV9NSU5PUlMpOyArK2kpCisJCQlzZXJpYWxfdGFibGVbaV0gPSBzZXJpYWw7CisJCXJldHVybiBzZXJpYWw7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGZsaXBfdGhhdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBfX3UxNiBVYXJ0TnVtYmVyLAorCQkgICAgIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOworCXJldHVybiAwOworfQorCisvKiBIYW5kbGVzIHByb2Nlc3NpbmcgYW5kIG1vdmluZyBkYXRhIHRvIHRoZSB0dHkgbGF5ZXIgKi8KK3N0YXRpYyB2b2lkIHBvcnRfc29mcmludCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXByaXZhdGU7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOworCXVuc2lnbmVkIGludCBSeENvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBpLCByZXN1bHQ7CisJaW50IGZsYWcsIGZsYWdfZGF0YTsKKworCS8qIFVhcnROdW1iZXIgPSBNSU5PUihwb3J0LT50dHktPmRldmljZSkgLSBzZXJpYWwtPm1pbm9yOyAqLworCVVhcnROdW1iZXIgPSB0dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmIChwb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIF9fZnVuY19fKSAhPSAwKSB7CisJCW15ZGJnKCIlcyAtIHBvcnRfcGFyYW5vaWFfY2hlY2ssIGV4aXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmICghc2VyaWFsKSB7CisJCW15ZGJnKCIlcyAtIGJhZCBzZXJpYWwgcG9pbnRlciwgZXhpdGluZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWlmIChwb3J0LT5jbG9zZVBlbmRpbmcgPT0gMSkgeworCQkvKiBXZXJlIGNsb3NpbmcgLCBzdG9wIHJlYWRpbmcgKi8KKwkJbXlkYmcoIiVzIC0gKHBvcnQtPmNsb3NlcGVuZGluZyA9PSAxXG4iLCBfX2Z1bmNfXyk7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJ4SG9sZGluZyBpcyBhc3NlcnRlZCBieSB0aHJvdHRsZSwgaWYgd2UgYXNzZXJ0IGl0LCB3ZSdyZSBub3QKKwkgKiByZWNlaXZpbmcgYW55IG1vcmUgY2hhcmFjdGVycyBhbmQgbGV0IHRoZSBib3ggaGFuZGxlIHRoZSBmbG93CisJICogY29udHJvbAorCSAqLworCWlmIChwb3J0LT5SeEhvbGRpbmcgPT0gMSkgeworCQlwb3J0LT5SZWFkQnVsa1N0b3BwZWQgPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisKKwkJbXlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXR0eSA9IHBvcnQtPnR0eTsKKwlteWRiZygiJXMgLSBwb3J0ICVkLCB0dHkgPTB4JXBcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHR0eSk7CisKKwlpZiAodHR5ICYmIFJ4Q291bnQpIHsKKwkJZmxhZ19kYXRhID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IFJ4Q291bnQ7ICsraSkgeworCQkJLyogTG9vayBhaGVhZCBjb2RlIGhlcmUgKi8KKwkJCWlmICgoaSA8PSAoUnhDb3VudCAtIDMpKSAmJiAoVEhJU0NIQVIgPT0gMHgxYikKKwkJCSAgICAmJiAoTkVYVENIQVIgPT0gMHgxYikpIHsKKwkJCQlmbGFnID0gMDsKKwkJCQlzd2l0Y2ggKFRISVJEQ0hBUikgeworCQkJCWNhc2UgMHgwMDoKKwkJCQkJLyogTGluZSBzdGF0dXMgY2hhbmdlIDR0aCBieXRlIG11c3QgZm9sbG93ICovCisJCQkJCWlmIChpID4gKFJ4Q291bnQgLSA0KSkgeworCQkJCQkJbXlkYmcoIklsbGVnYWwgZXNjYXBlIHNlcXVlbmNlcyBpbiByZWNlaXZlZCBkYXRhXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCVByb2Nlc3NMaW5lU3RhdHVzKHBvcnQsIEZPVVJUSENIQVIpOworCQkJCQlpICs9IDM7CisJCQkJCWZsYWcgPSAxOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHgwMToKKwkJCQkJLyogTW9kZW0gc3RhdHVzIHN0YXR1cyBjaGFuZ2UgNHRoIGJ5dGUgbXVzdCBmb2xsb3cgKi8KKwkJCQkJbXlkYmcoIk1vZGVtIHN0YXR1cyBzdGF0dXMuIFxuIik7CisJCQkJCWlmIChpID4gKFJ4Q291bnQgLSA0KSkgeworCQkJCQkJbXlkYmcKKwkJCQkJCSAgICAoIklsbGVnYWwgZXNjYXBlIHNlcXVlbmNlcyBpbiByZWNlaXZlZCBkYXRhXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCVByb2Nlc3NNb2RlbVN0YXR1cyhwb3J0LCBGT1VSVEhDSEFSKTsKKwkJCQkJaSArPSAzOworCQkJCQlmbGFnID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweGZmOgorCQkJCQlteWRiZygiTm8gc3RhdHVzIHNlcXVlbmNlLiBcbiIpOworCisJCQkJCVByb2Nlc3NSeENoYXIocG9ydCwgVEhJU0NIQVIpOworCQkJCQlQcm9jZXNzUnhDaGFyKHBvcnQsIE5FWFRDSEFSKTsKKwkJCQkJaSArPSAyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGZsYWcgPT0gMSkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKTsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgKGRhdGEgKyBpKSwgMSk7CisJCQl9CisKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICBxdF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlteWRiZygiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCSAgICAgIF9fZnVuY19fLCByZXN1bHQpOworCWVsc2UgeworCQlpZiAodHR5ICYmIFJ4Q291bnQpCisJCQlmbGlwX3RoYXQodHR5LCBVYXJ0TnVtYmVyLCBzZXJpYWwpOworCX0KKworCXJldHVybjsKKworfQorCitzdGF0aWMgdm9pZCBxdF9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisJCW15ZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJcG9ydF9zb2ZyaW50KCh2b2lkICopcG9ydCk7CisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIFByb2Nlc3NSeENoYXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdW5zaWduZWQgY2hhciBEYXRhKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJdHR5ID0gcG9ydC0+dHR5OworCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIDEpOworCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJkRhdGEsIDEpOworCQkvKiB0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOyAqLworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgUHJvY2Vzc0xpbmVTdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbGluZV9zdGF0dXMpCit7CisKKwlwb3J0LT5zaGFkb3dMU1IgPQorCSAgICBsaW5lX3N0YXR1cyAmIChTRVJJQUxfTFNSX09FIHwgU0VSSUFMX0xTUl9QRSB8IFNFUklBTF9MU1JfRkUgfAorCQkJICAgU0VSSUFMX0xTUl9CSSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBQcm9jZXNzTW9kZW1TdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG1vZGVtX3N0YXR1cykKK3sKKworCXBvcnQtPnNoYWRvd01TUiA9IG1vZGVtX3N0YXR1czsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPndhaXQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2VycXRfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCS8qIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCBpOworCisJbXlkYmcoIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHNlcmlhbCkgeworCisJCXNlcmlhbC0+ZGV2ID0gTlVMTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJCXNlcmlhbC0+cG9ydFtpXS5vcGVuX2NvdW50ID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fYnVsa19pbjsgKytpKSB7CisJCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJCXVzYl91bmxpbmtfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX2J1bGtfb3V0OyArK2kpIHsKKwkJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQkJdXNiX3VubGlua191cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOworCQkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1faW50ZXJydXB0X2luOyArK2kpIHsKKwkJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQkJdXNiX3VubGlua191cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwl9CisKKwkJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCQlyZXR1cm5fc2VyaWFsKHNlcmlhbCk7CisKKwkJLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCisJCWtmcmVlKHNlcmlhbCk7CisKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJkZXZpY2UgZGlzY29ubmVjdGVkIik7CisJfQorCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqZ2V0X3NlcmlhbF9ieV9taW5vcih1bnNpZ25lZCBpbnQgbWlub3IpCit7CisJcmV0dXJuIHNlcmlhbF90YWJsZVttaW5vcl07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlcmlhbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgcG9ydE51bWJlcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCW15ZGJnKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogaW5pdGlhbGl6ZSB0aGUgcG9pbnRlciBpbmNhc2Ugc29tZXRoaW5nIGZhaWxzICovCisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwkvKiBnZXQgdGhlIHNlcmlhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KKwkvKiBzZXJpYWwgPSBnZXRfc2VyaWFsX2J5X21pbm9yIChNSU5PUih0dHktPmRldmljZSkpOyAqLworCisJLyogZ2V0IHRoZSBzZXJpYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHR0eSBwb2ludGVyICovCisJc2VyaWFsID0gZ2V0X3NlcmlhbF9ieV9taW5vcih0dHktPmluZGV4KTsKKworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soc2VyaWFsLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRU5PREVWOworCisJLyogc2V0IHVwIG91ciBwb3J0IHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIgcmVtZW1iZXIgb3VyIHBvcnQgb2JqZWN0LCBhbmQgdXMgaXQgKi8KKwlwb3J0TnVtYmVyID0gdHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisJcG9ydCA9ICZzZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07CisJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCXBvcnQtPnR0eSA9IHR0eTsKKworCSsrcG9ydC0+b3Blbl9jb3VudDsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAxKSB7CisJCXBvcnQtPmNsb3NlUGVuZGluZyA9IDA7CisJCW15ZGJnKCIlcyBwb3J0LT5jbG9zZXBlbmRpbmcgPSAwXG4iLCBfX2Z1bmNfXyk7CisKKwkJcG9ydC0+UnhIb2xkaW5nID0gMDsKKwkJbXlkYmcoIiVzIHBvcnQtPlJ4SG9sZGluZyA9IDBcbiIsIF9fZnVuY19fKTsKKworCQlyZXR2YWwgPSBxdF9vcGVuKHBvcnQsIGZpbHApOworCX0KKworCWlmIChyZXR2YWwpCisJCXBvcnQtPm9wZW5fY291bnQgPSAwOworCW15ZGJnKCIlcyByZXR1cm5pbmcgcG9ydC0+Y2xvc2VQZW5kaW5nICA9ICVkXG4iLCBfX2Z1bmNfXywKKwkgICAgICBwb3J0LT5jbG9zZVBlbmRpbmcpOworCisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKmRldmljZSdzIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcXRfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgRGV2aWNlRGF0YTsKKwlzdHJ1Y3QgcXRfb3Blbl9jaGFubmVsX2RhdGEgQ2hhbm5lbERhdGE7CisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9kaXZpc29yID0gMHgzMDsJCS8qIGdpdmVzIDk2MDAgYmF1ZCByYXRlICovCisJdW5zaWduZWQgY2hhciBkZWZhdWx0X0xDUiA9IFNFUklBTF84X0RBVEE7CS8qIDgsIG5vbmUgLCAxICovCisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAocG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX2Z1bmNfXykpCisJCXJldHVybiAtRU5PREVWOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwKKwkgICBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhCisJICAgY2FuIGdldCBsb3N0LiAqLworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAwOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJc3RhdHVzID0gYm94X2dldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXNlcmlhbC0+bnVtX09wZW5Db3VudCsrOworCW15ZGJnKCIlcyBzZXJpYWwtPm51bV9PcGVuQ291bnQgID0gJWRcbiIsIF9fZnVuY19fLAorCSAgICAgIHNlcmlhbC0+bnVtX09wZW5Db3VudCk7CisJLyogT3BlbiB1YXJ0IGNoYW5uZWwgKi8KKworCS8qIFBvcnQgc3BlY2lmaWMgc2V0dXBzICovCisJc3RhdHVzID0gQm94T1BlbkNsb3NlQ2hhbm5lbChzZXJpYWwsIFVhcnROdW1iZXIsIDEsICZDaGFubmVsRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gIkJveE9QZW5DbG9zZUNoYW5uZWwgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJbXlkYmcoX19GSUxFX18gIkJveE9QZW5DbG9zZUNoYW5uZWwgY29tcGxldGVkLlxuIik7CisKKwlwb3J0LT5zaGFkb3dMU1IgPSBDaGFubmVsRGF0YS5saW5lX3N0YXR1cyAmCisJICAgIChTRVJJQUxfTFNSX09FIHwgU0VSSUFMX0xTUl9QRSB8IFNFUklBTF9MU1JfRkUgfCBTRVJJQUxfTFNSX0JJKTsKKworCXBvcnQtPnNoYWRvd01TUiA9IENoYW5uZWxEYXRhLm1vZGVtX3N0YXR1cyAmCisJICAgIChTRVJJQUxfTVNSX0NUUyB8IFNFUklBTF9NU1JfRFNSIHwgU0VSSUFMX01TUl9SSSB8IFNFUklBTF9NU1JfQ0QpOworCisJLyogU2V0IEJhdWQgcmF0ZSB0byBkZWZhdWx0IGFuZCB0dXJuIG9mZiAoZGVmYXVsdClmbG93IGNvbnRyb2wgaGVyZSAqLworCXN0YXR1cyA9IEJveFNldFVhcnQoc2VyaWFsLCBVYXJ0TnVtYmVyLCBkZWZhdWx0X2Rpdmlzb3IsIGRlZmF1bHRfTENSKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0VWFydCBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlteWRiZyhfX0ZJTEVfXyAiQm94U2V0VWFydCBjb21wbGV0ZWQuXG4iKTsKKworCS8qIFB1dCB0aGlzIGhlcmUgdG8gbWFrZSBpdCByZXNwb25zaXZlIHRvIHN0dHkgYW5kIGRlZmF1bHMgc2V0IGJ5IHRoZSB0dHkgbGF5ZXIgKi8KKwlxdF9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHdhaXQgcXVlIGhlYWQgKi8KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYocG9ydC0+d2FpdCkpOworCisJLyogaWYgd2UgaGF2ZSBhIGJ1bGsgZW5kcG9pbnQsIHN0YXJ0IHJlYWRpbmcgZnJvbSBpdCAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX2luKSB7CisJCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCSAgcG9ydC0+CisJCQkJCQkgIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIHF0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMDsKKworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJICAgIF9fZnVuY19fLCByZXN1bHQpOworCQkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKwkJfQorCisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBpZiBkaXNjb25uZWN0IGJlYXQgdXMgdG8gdGhlIHB1bmNoIGhlcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBkbyAqLworCWlmICh0dHktPmRyaXZlcl9kYXRhKSB7CisJCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkXG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQktLXBvcnQtPm9wZW5fY291bnQ7CisJCWlmIChwb3J0LT5vcGVuX2NvdW50IDw9IDApIHsKKwkJCXBvcnQtPmNsb3NlUGVuZGluZyA9IDE7CisJCQlteWRiZygiJXMgLSBwb3J0LT5jbG9zZVBlbmRpbmcgPSAxXG4iLCBfX2Z1bmNfXyk7CisKKwkJCWlmIChzZXJpYWwtPmRldikgeworCQkJCXF0X2Nsb3NlKHBvcnQsIGZpbHApOworCQkJCXBvcnQtPm9wZW5fY291bnQgPSAwOworCQkJfQorCQl9CisKKwl9CisKK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSAlZCByZXR1cm5cbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCit9CisKK3N0YXRpYyB2b2lkIHF0X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXVuc2lnbmVkIGxvbmcgamlmdCA9IGppZmZpZXMgKyAxMCAqIEhaOworCV9fdTggTFNSX1ZhbHVlLCBNQ1JfVmFsdWU7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCisJc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhIENoYW5uZWxEYXRhOworCXN0YXR1cyA9IDA7CisJTFNSX1ZhbHVlID0gMDsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCisJCXVzYl91bmxpbmtfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pCisJCXVzYl91bmxpbmtfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKworCS8qIHdhaXQgdXAgdG8gMzAgc2Vjb25kcyBmb3IgdHJhbnNtaXR0ZXIgdG8gZW1wdHkgKi8KKwlkbyB7CisJCXN0YXR1cyA9IEJveEdldFJlZ2lzdGVyKHNlcmlhbCwgVWFydE51bWJlciwgTElORV9TVEFUVVNfUkVHSVNURVIsICZMU1JfVmFsdWUpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoTFNSX1ZhbHVlICYgU0VSSUFMX0xTUl9URU1UKQorCQkgICAgJiYgKHBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9PSAxKSkKKwkJCWJyZWFrOworCQlzY2hlZHVsZSgpOworCisJfQorCXdoaWxlIChqaWZmaWVzIDw9IGppZnQpCisJCTsKKworCWlmIChqaWZmaWVzID4gamlmdCkKKwkJbXlkYmcoIiVzIC0gcG9ydCAlZCB0aW1vdXQgb2YgY2hlY2tpbmcgdHJhbnNtaXR0ZXIgZW1wdHlcbiIsCisJCSAgICAgIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWVsc2UKKwkJbXlkYmcoIiVzIC0gcG9ydCAlZCBjaGVja2luZyB0cmFuc21pdHRlciBlbXB0eSBzdWNjZWRlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzdGF0dXMgPQorCSAgICBCb3hHZXRSZWdpc3RlcihzZXJpYWwsIFVhcnROdW1iZXIsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkgICAmTUNSX1ZhbHVlKTsKKwlteWRiZyhfX0ZJTEVfXyAiQm94R2V0UmVnaXN0ZXIgTUNSID0gMHgleC5cbiIsIE1DUl9WYWx1ZSk7CisKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJTUNSX1ZhbHVlICY9IH4oU0VSSUFMX01DUl9EVFIgfCBTRVJJQUxfTUNSX1JUUyk7CisJCS8qIHN0YXR1cyA9IEJveFNldFJlZ2lzdGVyKHNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgTUNSX1ZhbHVlKTsgKi8KKwl9CisKKwkvKiBDbG9zZSB1YXJ0IGNoYW5uZWwgKi8KKwlzdGF0dXMgPSBCb3hPUGVuQ2xvc2VDaGFubmVsKHNlcmlhbCwgVWFydE51bWJlciwgMCwgJkNoYW5uZWxEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbXlkYmcoIiVzIC0gcG9ydCAlZCBCb3hPUGVuQ2xvc2VDaGFubmVsIGZhaWxlZC5cbiIsCisJCSAgICAgIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc2VyaWFsLT5udW1fT3BlbkNvdW50LS07CisKK30KKworc3RhdGljIGludCBzZXJpYWxfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlpbnQgZnJvbV91c2VyID0gMDsKKworCXNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBnZXQgZGlzY29ubmVjdGVkIGEgKi8KKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHF0X3dyaXRlKHBvcnQsIGZyb21fdXNlciwgYnVmLCBjb3VudCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBxdF93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgZnJvbV91c2VyLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJbXlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJbXlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNvdW50ID0KKwkJICAgIChjb3VudCA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8gcG9ydC0+YnVsa19vdXRfc2l6ZSA6IGNvdW50OworCisJCWlmIChmcm9tX3VzZXIpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkJICAgIChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBjb3VudCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgY291bnQpOworCQl9CisKKwkJLyogdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKF9fRklMRV9fLCBfX2Z1bmNfXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsgKi8KKworCQkvKiBzZXQgdXAgb3VyIHVyYiAqLworCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQkgIHBvcnQtPgorCQkJCQkJICBidWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LAorCQkJCSAgcXRfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJbXlkYmcoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXN1bHQpOworCQllbHNlCisJCQlyZXN1bHQgPSBjb3VudDsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIG5vIGJ1bGsgb3V0LCBzbyByZXR1cm4gMCBieXRlcyB3cml0dGVuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF0X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXNlcmlhbCkgeworCQlteWRiZygiJXMgLSBiYWQgc2VyaWFsIHBvaW50ZXIsIGV4aXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlteWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlwb3J0X3NvZnRpbnQoJnBvcnQtPndvcmspOworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwb3J0X3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCwgd29yayk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KQorCQlyZXR1cm47CisjaWYgMAorCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKQorCSAgICAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgeworCQlteWRiZygiJXMgLSB3cml0ZSB3YWtldXAgY2FsbC5cbiIsIF9fZnVuY19fKTsKKwkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSAodHR5KTsKKwl9CisjZW5kaWYKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKK30KK3N0YXRpYyBpbnQgc2VyaWFsX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gcXRfd3JpdGVfcm9vbShwb3J0KTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGludCBxdF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcm9vbSA9IDA7CisJaWYgKHBvcnQtPmNsb3NlUGVuZGluZyA9PSAxKSB7CisJCW15ZGJnKCIlcyAtIHBvcnQtPmNsb3NlUGVuZGluZyA9PSAxXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7CisJCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsKKwl9CisKKwlteWRiZygiJXMgLSByZXR1cm5zICVkXG4iLCBfX2Z1bmNfXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CitzdGF0aWMgaW50IHNlcmlhbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzID0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gcXRfY2hhcnNfaW5fYnVmZmVyKHBvcnQpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcXRfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgY2hhcnMgPSAwOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCWNoYXJzID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0KKworCW15ZGJnKCIlcyAtIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCitzdGF0aWMgaW50IHNlcmlhbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlteWRiZygiSW4gJXMgXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZCBcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBxdF90aW9jbXNldChwb3J0LCBmaWxlLCBzZXQpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcXRfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisKKwlfX3U4IE1DUl9WYWx1ZTsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqICBUSU9DTUdFVAorICAgICAqLworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwlzdGF0dXMgPQorCSAgICBCb3hHZXRSZWdpc3Rlcihwb3J0LT5zZXJpYWwsIFVhcnROdW1iZXIsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkgICAmTUNSX1ZhbHVlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwkvKgorCSAqIFR1cm4gb2ZmIHRoZSBSVFMgYW5kIERUUiBhbmQgbG9vcGJjY2sgYW5kIHRoZW4gb25seSB0dXJuIG9uIHdoYXQgd2FzCisJICogYXNrZWQgZm9yCisJICovCisJTUNSX1ZhbHVlICY9IH4oU0VSSUFMX01DUl9SVFMgfCBTRVJJQUxfTUNSX0RUUiB8IFNFUklBTF9NQ1JfTE9PUCk7CisJaWYgKHZhbHVlICYgVElPQ01fUlRTKQorCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9SVFM7CisJaWYgKHZhbHVlICYgVElPQ01fRFRSKQorCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9EVFI7CisJaWYgKHZhbHVlICYgVElPQ01fTE9PUCkKKwkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfTE9PUDsKKworCXN0YXR1cyA9CisJICAgIEJveFNldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgIE1DUl9WYWx1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiAtRVNQSVBFOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJbXlkYmcoIkluICVzIFxuIiwgX19mdW5jX18pOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRU5PREVWOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBxdF90aW9jbWdldChwb3J0LCBmaWxlKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHF0X3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCisJX191OCBNQ1JfVmFsdWU7CisJX191OCBNU1JfVmFsdWU7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXR0eSA9IHBvcnQtPnR0eTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWQsIHR0eSA9MHglcFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgdHR5KTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiogIFRJT0NNR0VUCisgICAgICovCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCXN0YXR1cyA9CisJICAgIEJveEdldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgICZNQ1JfVmFsdWUpOworCWlmIChzdGF0dXMgPj0gMCkgeworCQlzdGF0dXMgPQorCQkgICAgQm94R2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLAorCQkJCSAgIE1PREVNX1NUQVRVU19SRUdJU1RFUiwgJk1TUl9WYWx1ZSk7CisKKwl9CisKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJcmVzdWx0ID0gKChNQ1JfVmFsdWUgJiBTRVJJQUxfTUNSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQorCQkgICAgLyogRFRSIElTIFNFVCAqLworCQkgICAgfCAoKE1DUl9WYWx1ZSAmIFNFUklBTF9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCSAgICAvKiBSVFMgSVMgU0VUICovCisJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkJICAgIC8qIENUUyBpcyBzZXQgKi8KKwkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NEKSA/IFRJT0NNX0NBUiA6IDApCisJCSAgICAvKiBDYXJyaWVyIGRldGVjdCBpcyBzZXQgKi8KKwkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkJICAgIC8qIFJpbmcgaW5kaWNhdG9yIHNldCAqLworCQkgICAgfCAoKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOworCQkvKiBEU1IgaXMgc2V0ICovCisJCXJldHVybiByZXN1bHQ7CisKKwl9IGVsc2UKKwkJcmV0dXJuIC1FU1BJUEU7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJbXlkYmcoIkluICVzIFxuIiwgX19mdW5jX18pOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRU5PREVWOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHhcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5SeEhvbGRpbmcpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHF0X2lvY3RsKHBvcnQsIGZpbGUsIGNtZCwgYXJnKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGludCBxdF9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCV9fdTggTUNSX1ZhbHVlOworCV9fdTggTVNSX1ZhbHVlOworCXVuc2lnbmVkIHNob3J0IFByZXZfTVNSX1ZhbHVlOworCXVuc2lnbmVkIGludCB2YWx1ZSwgcmVzdWx0ID0gMDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdHR5ID0gcG9ydC0+dHR5OworCisJbXlkYmcoIiVzIC0gcG9ydCAlZCwgdHR5ID0weCVwXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCB0dHkpOworCisJLyogVElPQ01HRVQgKi8KKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlpZiAoY21kID09IFRJT0NNR0VUKSB7CisJCU1DUl9WYWx1ZSA9IHBvcnQtPnNoYWRvd01DUjsKKwkJTVNSX1ZhbHVlID0gcG9ydC0+c2hhZG93TVNSOworCisJCXsKKwkJCXJlc3VsdCA9ICgoTUNSX1ZhbHVlICYgU0VSSUFMX01DUl9EVFIpID8gVElPQ01fRFRSIDogMCkKKwkJCSAgICAvKiBEVFIgSVMgU0VUICovCisJCQkgICAgfCAoKE1DUl9WYWx1ZSAmIFNFUklBTF9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCQkgICAgLyogUlRTIElTIFNFVCAqLworCQkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQorCQkJICAgIC8qIENUUyBpcyBzZXQgKi8KKwkJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQorCQkJICAgIC8qIENhcnJpZXIgZGV0ZWN0IGlzIHNldCAqLworCQkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkJCSAgICAvKiBSaW5nIGluZGljYXRvciBzZXQgKi8KKwkJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9EU1IpID8gVElPQ01fRFNSIDogMCk7CisJCQkvKiBEU1IgaXMgc2V0ICovCisJCQlpZiAoY29weV90b191c2VyCisJCQkgICAgKCh1bnNpZ25lZCBpbnQgKilhcmcsICZyZXN1bHQsCisJCQkgICAgIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCisJCX0KKwl9CisKKwkvKiBUSU9DTUJJUywgVElPQ01CSUMsIEFORCBUSU9DTVNFVCAqLworCWlmIChjbWQgPT0gVElPQ01CSVMgfHwgY21kID09IFRJT0NNQklDIHx8IGNtZCA9PSBUSU9DTVNFVCkgeworCQlzdGF0dXMgPQorCQkgICAgQm94R2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLAorCQkJCSAgIE1PREVNX0NPTlRST0xfUkVHSVNURVIsICZNQ1JfVmFsdWUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiAtRVNQSVBFOworCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmdmFsdWUsICh1bnNpZ25lZCBpbnQgKilhcmcsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ01CSVM6CisJCQlpZiAodmFsdWUgJiBUSU9DTV9SVFMpCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfUlRTOworCQkJaWYgKHZhbHVlICYgVElPQ01fRFRSKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX0RUUjsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0xPT1ApCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfTE9PUDsKKwkJCWJyZWFrOworCQljYXNlIFRJT0NNQklDOgorCQkJaWYgKHZhbHVlICYgVElPQ01fUlRTKQorCQkJCU1DUl9WYWx1ZSAmPSB+U0VSSUFMX01DUl9SVFM7CisJCQlpZiAodmFsdWUgJiBUSU9DTV9EVFIpCisJCQkJTUNSX1ZhbHVlICY9IH5TRVJJQUxfTUNSX0RUUjsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0xPT1ApCisJCQkJTUNSX1ZhbHVlICY9IH5TRVJJQUxfTUNSX0xPT1A7CisJCQlicmVhazsKKwkJY2FzZSBUSU9DTVNFVDoKKwkJCS8qCisJCQkgKiBUdXJuIG9mZiB0aGUgUlRTIGFuZCBEVFIgYW5kIGxvb3BiY2NrIGFuZCB0aGVuIG9ubHkKKwkJCSAqIHR1cm4gb24gd2hhdCB3YXMgYXNrZWQgZm9yCisJCQkgKi8KKwkJCU1DUl9WYWx1ZSAmPQorCQkJICAgIH4oU0VSSUFMX01DUl9SVFMgfCBTRVJJQUxfTUNSX0RUUiB8CisJCQkgICAgICBTRVJJQUxfTUNSX0xPT1ApOworCQkJaWYgKHZhbHVlICYgVElPQ01fUlRTKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX1JUUzsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0RUUikKKwkJCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9EVFI7CisJCQlpZiAodmFsdWUgJiBUSU9DTV9MT09QKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX0xPT1A7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCisJCX0KKwkJc3RhdHVzID0KKwkJICAgIEJveFNldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwKKwkJCQkgICBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBNQ1JfVmFsdWUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiAtRVNQSVBFOworCQllbHNlIHsKKwkJCXBvcnQtPnNoYWRvd01DUiA9IE1DUl9WYWx1ZTsKKwkJCXJldHVybiAwOworCQl9CisKKwl9CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLyoqICAgVElPQ01CSVMsIFRJT0NNQklDLCBBTkQgVElPQ01TRVQgICAgZW5kCisgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChjbWQgPT0gVElPQ01JV0FJVCkgeworCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwkJUHJldl9NU1JfVmFsdWUgPSBwb3J0LT5zaGFkb3dNU1IgJiBTRVJJQUxfTVNSX01BU0s7CisJCXdoaWxlICgxKSB7CisJCQlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+d2FpdCwgJndhaXQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlKCk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+d2FpdCwgJndhaXQpOworCQkJLyogc2VlIGlmIGEgc2lnbmFsIHdva2UgdXMgdXAgKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJTVNSX1ZhbHVlID0gcG9ydC0+c2hhZG93TVNSICYgU0VSSUFMX01TUl9NQVNLOworCQkJaWYgKE1TUl9WYWx1ZSA9PSBQcmV2X01TUl9WYWx1ZSkKKwkJCQlyZXR1cm4gLUVJTzsJLyogbm8gY2hhbmdlIGVycm9yICovCisKKwkJCWlmICgoYXJnICYgVElPQ01fUk5HCisJCQkgICAgICYmICgoUHJldl9NU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSA9PQorCQkJCSAoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9SSSkpKQorCQkJICAgIHx8IChhcmcgJiBUSU9DTV9EU1IKKwkJCQkmJiAoKFByZXZfTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9EU1IpID09CisJCQkJICAgIChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0RTUikpKQorCQkJICAgIHx8IChhcmcgJiBUSU9DTV9DRAorCQkJCSYmICgoUHJldl9NU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NEKSA9PQorCQkJCSAgICAoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DRCkpKQorCQkJICAgIHx8IChhcmcgJiBUSU9DTV9DVFMKKwkJCQkmJiAoKFByZXZfTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DVFMpID09CisJCQkJICAgIChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NUUykpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCisJCX0KKworCX0KKwlteWRiZygiJXMgLU5vIGlvY3RsIGZvciB0aGF0IG9uZS4gIHBvcnQgPSAlZFxuIiwgX19mdW5jX18sCisJICAgICAgcG9ydC0+bnVtYmVyKTsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJcXRfc2V0X3Rlcm1pb3MocG9ydCwgb2xkKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKK30KKworc3RhdGljIHZvaWQgcXRfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJdW5zaWduZWQgaW50IGNmbGFnOworCWludCBiYXVkLCBkaXZpc29yLCByZW1haW5kZXI7CisJdW5zaWduZWQgY2hhciBMQ1JfY2hhbmdlX3RvID0gMDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlfX3UxNiBVYXJ0TnVtYmVyOworCV9fdTE2IHRtcCwgdG1wMjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJdG1wID0gcG9ydC0+dHR5LT5pbmRleDsKKwlteWRiZygiJXMgLSBNSU5PUihwb3J0LT50dHktPmluZGV4KSA9ICAlZFxuIiwgX19mdW5jX18sIHRtcCk7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdG1wMiA9IHNlcmlhbC0+bWlub3I7CisJbXlkYmcoIiVzIC0gc2VyaWFsLT5taW5vciA9ICAlZFxuIiwgX19mdW5jX18sIHRtcDIpOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJdHR5ID0gcG9ydC0+dHR5OworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykKKwkJICAgICYmIChSRUxFVkFOVF9JRkxBRyh0dHktPnRlcm1pb3MtPmNfaWZsYWcpID09CisJCQlSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlteWRiZygiJXMgLSBOb3RoaW5nIHRvIGNoYW5nZVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisKKwl9CisKKwlteWRiZygiJXMgLSAzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGNmbGFnKSB7CisJY2FzZSBDUzU6CisJCUxDUl9jaGFuZ2VfdG8gfD0gU0VSSUFMXzVfREFUQTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCUxDUl9jaGFuZ2VfdG8gfD0gU0VSSUFMXzZfREFUQTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCUxDUl9jaGFuZ2VfdG8gfD0gU0VSSUFMXzdfREFUQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfOF9EQVRBOworCQlicmVhazsKKwl9CisKKwkvKiBQYXJpdHkgc3R1ZmYgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfT0REX1BBUklUWTsKKwkJZWxzZQorCQkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfRVZFTl9QQVJJVFk7CisJfQorCWlmIChjZmxhZyAmIENTVE9QQikKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfVFdPX1NUT1BCOworCWVsc2UKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfVFdPX1NUT1BCOworCisJbXlkYmcoIiVzIC0gNFxuIiwgX19mdW5jX18pOworCS8qIFRoYXRzIHRoZSBMQ1Igc3R1ZmYsIGdvIGFoZWFkIGFuZCBzZXQgaXQgKi8KKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwlpZiAoIWJhdWQpIHsKKwkJLyogcGljayBhIGRlZmF1bHQsIGFueSBkZWZhdWx0Li4uICovCisJCWJhdWQgPSA5NjAwOworCX0KKworCW15ZGJnKCIlcyAtIGdvdCBiYXVkID0gJWRcbiIsIF9fZnVuY19fLCBiYXVkKTsKKworCWRpdmlzb3IgPSBNQVhfQkFVRF9SQVRFIC8gYmF1ZDsKKwlyZW1haW5kZXIgPSBNQVhfQkFVRF9SQVRFICUgYmF1ZDsKKwkvKiBSb3VuZCB0byBuZWFyZXN0IGRpdmlzb3IgKi8KKwlpZiAoKChyZW1haW5kZXIgKiAyKSA+PSBiYXVkKSAmJiAoYmF1ZCAhPSAxMTApKQorCQlkaXZpc29yKys7CisKKwkvKgorCSAqIFNldCBCYXVkIHJhdGUgdG8gZGVmYXVsdCBhbmQgdHVybiBvZmYgKGRlZmF1bHQpZmxvdyBjb250cm9sIGhlcmUKKwkgKi8KKwlzdGF0dXMgPQorCSAgICBCb3hTZXRVYXJ0KHNlcmlhbCwgVWFydE51bWJlciwgKHVuc2lnbmVkIHNob3J0KWRpdmlzb3IsCisJCSAgICAgICBMQ1JfY2hhbmdlX3RvKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0VWFydCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTm93IGRldGVybWluZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCW15ZGJnKCIlcyAtIEVuYWJsaW5nIEhXIGZsb3cgY29udHJvbCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgcG9ydC0+bnVtYmVyKTsKKworCQkvKiBFbmFibGUgUlRTL0NUUyBmbG93IGNvbnRyb2wgKi8KKwkJc3RhdHVzID0gQm94U2V0SFdfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyLCAxKTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gIkJveFNldEhXX0Zsb3dDdHJsIGZhaWxlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIFJUUy9DVFMgZmxvdyBjb250cm9sICovCisJCW15ZGJnKCIlcyAtIGRpc2FibGluZyBIVyBmbG93IGNvbnRyb2wgcG9ydCAlZFxuIiwgX19mdW5jX18sCisJCSAgICAgIHBvcnQtPm51bWJlcik7CisKKwkJc3RhdHVzID0gQm94U2V0SFdfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyLCAwKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRIV19GbG93Q3RybCBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIGNoYXJhY3RlciBpbgorCSAqIHRoZSBkZXZpY2UgKi8KKwlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0KKwkJICAgIEJveFNldFNXX0Zsb3dDdHJsKHNlcmlhbCwgVWFydE51bWJlciwgc3RvcF9jaGFyLAorCQkJCSAgICAgIHN0YXJ0X2NoYXIpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRTV19GbG93Q3RybCAoZW5hYmxlZCkgZmFpbGVkXG4iKTsKKworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgU1cgZmxvdyBjb250cm9sICovCisJCXN0YXR1cyA9IEJveERpc2FibGVfU1dfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0U1dfRmxvd0N0cmwgKGRpYWJsaW5nKSBmYWlsZWRcbiIpOworCisJfQorCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEJveEdldFJlZ2lzdGVyCisqCWlzc3VzZSBhIEdFVF9SRUdJU1RFUiB2ZW5kb3Itc3BjaWZpYyByZXF1ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbnRyb2wgcGlwZQorKglJZiBzdWNjZXNzZnVsLCBmaWxscyBpbiB0aGUgIHBWYWx1ZSB3aXRoIHRoZSByZWdpc3RlciB2YWx1ZSBhc2tlZCBmb3IKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEJveEdldFJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkJICB1bnNpZ25lZCBzaG9ydCBSZWdpc3Rlcl9OdW0sIF9fdTggKnBWYWx1ZSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOworCisJY3VycmVudF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSk7CisKKwlyZXN1bHQgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfR0VUX1NFVF9SRUdJU1RFUiwgMHhDMCwgUmVnaXN0ZXJfTnVtLAorCQkJICAgIFVhcnRfTnVtYmVyLCAodm9pZCAqKXBWYWx1ZSwgc2l6ZW9mKCpwVmFsdWUpLCAzMDApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQm94U2V0UmVnaXN0ZXIKKyoJaXNzdXNlIGEgR0VUX1JFR0lTVEVSIHZlbmRvci1zcGNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlCisqCUlmIHN1Y2Nlc3NmdWwsIGZpbGxzIGluIHRoZSAgcFZhbHVlIHdpdGggdGhlIHJlZ2lzdGVyIHZhbHVlIGFza2VkIGZvcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgQm94U2V0UmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgc2hvcnQgVWFydF9OdW1iZXIsCisJCQkgIHVuc2lnbmVkIHNob3J0IFJlZ2lzdGVyX051bSwgdW5zaWduZWQgc2hvcnQgVmFsdWUpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBzaG9ydCBSZWdBbmRCeXRlOworCisJUmVnQW5kQnl0ZSA9IFZhbHVlOworCVJlZ0FuZEJ5dGUgPSBSZWdBbmRCeXRlIDw8IDg7CisJUmVnQW5kQnl0ZSA9IFJlZ0FuZEJ5dGUgKyBSZWdpc3Rlcl9OdW07CisKKy8qCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSBRVF9HRVRfU0VUX1JFR0lTVEVSLCAweEMwLCBSZWdpc3Rlcl9OdW0sCisJCQkJIFVhcnRfTnVtYmVyLCBOVUxMLCAwLCAzMDApOworKi8KKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9HRVRfU0VUX1JFR0lTVEVSLCAweDQwLCBSZWdBbmRCeXRlLCBVYXJ0X051bWJlciwKKwkJCSAgICBOVUxMLCAwLCAzMDApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBib3hfZ2V0X2RldmljZQorICogICBJc3N1ZSBhIEdFVF9ERVZJQ0UgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlIElmCisgKiAgIHN1Y2Nlc3NmdWwsIGZpbGxzIGluIHRoZSBxdF9nZXRfZGV2aWNlX2RhdGEgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkKKyAqICAgZGV2aWNlX2RhdGEsIG90aGVyd2lzZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKi8KK3N0YXRpYyBpbnQgYm94X2dldF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSAgc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSAqZGV2aWNlX2RhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBjdXJyZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKwljdXJyZW50X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhKTsKKwl0cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGN1cnJlbnRfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJIFFUX1NFVF9HRVRfREVWSUNFLCAweGMwLCAwLCAwLAorCQkJCSB0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoLCAzMDApOworCWlmIChyZXN1bHQgPiAwKQorCQltZW1jcHkoZGV2aWNlX2RhdGEsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgpOworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGJveF9zZXRfZGV2aWNlCisgKiAgIElzc3VlIGEgU0VUX0RFVklDRSB2ZW5kb3Itc3BlY2lmaWMgcmVxdWVzdCBvbiB0aGUgZGVmYXVsdCBjb250cm9sIHBpcGUgSWYKKyAqICAgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYQorICogICBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKi8KK3N0YXRpYyBpbnQgYm94X3NldF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSAgc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSAqZGV2aWNlX2RhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBsZW5ndGg7CisJX191MTYgUG9ydFNldHRpbmdzOworCisJUG9ydFNldHRpbmdzID0gKChfX3UxNikgKGRldmljZV9kYXRhLT5wb3J0YikpOworCVBvcnRTZXR0aW5ncyA9IChQb3J0U2V0dGluZ3MgPDwgOCk7CisJUG9ydFNldHRpbmdzICs9ICgoX191MTYpIChkZXZpY2VfZGF0YS0+cG9ydGEpKTsKKworCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhKTsKKwlteWRiZygiJXMgLSBQb3J0U2V0dGluZ3MgPSAweCV4XG4iLCBfX2Z1bmNfXywgUG9ydFNldHRpbmdzKTsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgUVRfU0VUX0dFVF9ERVZJQ0UsIDB4NDAsIFBvcnRTZXR0aW5ncywKKwkJCQkgMCwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQm94T1BlbkNsb3NlQ2hhbm5lbAorICogVGhpcyBmdW5jaW90biBub3RpZmllcyB0aGUgZGV2aWNlIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgd2lzaGVzIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIFVBUlQgY2hhbm5lbC4gaXRzCisgKiBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBkZXZpY2UgZHJpdmVyIGFuZCB0aGUgZGV2aWNlIHRvIHN5bmNocm9uaXplIHN0YXRlIGluZm9ybWF0aW9uLgorICogT3BlbkNsb3NlID0gMSBmb3Igb3BlbiAsIDAgZm9yIGNsb3NlCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEJveE9QZW5DbG9zZUNoYW5uZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydF9OdW1iZXIsCisJCQkgICAgICAgX191MTYgT3BlbkNsb3NlLAorCQkJICAgICAgIHN0cnVjdCBxdF9vcGVuX2NoYW5uZWxfZGF0YSAqcERldmljZURhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBsZW5ndGg7CisJX191OCBEaXJlY2lvbjsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlsZW5ndGggPSBzaXplb2Yoc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhKTsKKworCS8qIGlmIG9wZW5pbmcuLi4gKi8KKwlpZiAoT3BlbkNsb3NlID09IDEpIHsKKwkJRGlyZWNpb24gPSBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTjsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCk7CisJCXJlc3VsdCA9CisJCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHBpcGUsIFFUX09QRU5fQ0xPU0VfQ0hBTk5FTCwKKwkJCQkgICAgRGlyZWNpb24sIE9wZW5DbG9zZSwgVWFydF9OdW1iZXIsCisJCQkJICAgIHBEZXZpY2VEYXRhLCBsZW5ndGgsIDMwMCk7CisKKwl9IGVsc2UgeworCQlEaXJlY2lvbiA9IFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVDsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCk7CisJCXJlc3VsdCA9CisJCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHBpcGUsIFFUX09QRU5fQ0xPU0VfQ0hBTk5FTCwKKwkJCQkgICAgRGlyZWNpb24sIE9wZW5DbG9zZSwgVWFydF9OdW1iZXIsIE5VTEwsIDAsCisJCQkJICAgIDMwMCk7CisKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEJveFNldFByZWJ1ZmZlckxldmVsCisgICBURUxMUyBCT1ggV0hFTiBUTyBBU1NFUlQgRkxPVyBDT05UUk9MCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgQm94U2V0UHJlYnVmZmVyTGV2ZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGJ1ZmZlcl9sZW5ndGg7CisKKwlidWZmZXJfbGVuZ3RoID0gUFJFRlVGRl9MRVZFTF9DT05TRVJWQVRJVkU7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSBRVF9HRVRfU0VUX1BSRUJVRl9UUklHX0xWTCwgMHg0MCwKKwkJCQkgYnVmZmVyX2xlbmd0aCwgMCwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEJveFNldEFUQworICAgVEVMTFMgQk9YIFdIRU4gVE8gQVNTRVJUIGF1dG9tYXRpYyB0cmFuc21pdHRlciBjb250cm9sCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBCb3hTZXRBVEMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgbl9Nb2RlKQoreworCWludCByZXN1bHQ7CisJX191MTYgYnVmZmVyX2xlbmd0aDsKKworCWJ1ZmZlcl9sZW5ndGggPSBQUkVGVUZGX0xFVkVMX0NPTlNFUlZBVElWRTsKKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9TRVRfQVRGLCAweDQwLCBuX01vZGUsIDAsIE5VTEwsIDAsIDMwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBCb3hTZXRVYXJ0CisqCWlzc3VzZSBhIFNFVF9VQVJUIHZlbmRvci1zcGNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlCisqCUlmIHN1Y2Nlc3NmdWwgc2V0cyBiYXVkIHJhdGUgZGl2aXNvciBhbmQgTENSIHZhbHVlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBCb3hTZXRVYXJ0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0X2Rpdmlzb3IsIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9MQ1IpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBzaG9ydCBVYXJ0TnVtYW5kTENSOworCisJVWFydE51bWFuZExDUiA9IChkZWZhdWx0X0xDUiA8PCA4KSArIFVhcnRfTnVtYmVyOworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX0dFVF9TRVRfVUFSVCwgMHg0MCwgZGVmYXVsdF9kaXZpc29yLAorCQkJICAgIFVhcnROdW1hbmRMQ1IsIE5VTEwsIDAsIDMwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IEJveFNldEhXX0Zsb3dDdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGludCBVYXJ0TnVtYmVyLAorCQkJICAgICBpbnQgYlNldCkKK3sKKwlfX3U4IE1DUl9WYWx1ZSA9IDA7CisJX191OCBNU1JfVmFsdWUgPSAwLCBNT1VUX1ZhbHVlID0gMDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlwb3J0ID0gc2VyaWFsLT5wb3J0OworCisJaWYgKGJTZXQgPT0gMSkgeworCQkvKiBmbG93IGNvbnRyb2wsIGJveCB3aWxsIGNsZWFyIFJUUyBsaW5lIHRvIHByZXZlbnQgcmVtb3RlICovCisJCU1DUl9WYWx1ZSA9IFNFUklBTF9NQ1JfUlRTOworCX0JCQkvKiBkZXZpY2UgZnJvbSB4bWl0dGluZyBtb3JlIGNoYXJzICovCisJZWxzZSB7CisJCS8qIG5vIGZsb3cgY29udHJvbCB0byByZW1vdGUgZGV2aWNlICovCisJCU1DUl9WYWx1ZSA9IDA7CisKKwl9CisJTU9VVF9WYWx1ZSA9IE1DUl9WYWx1ZSA8PCA4OworCisJaWYgKGJTZXQgPT0gMSkgeworCQkvKiBmbG93IGNvbnRyb2wsIGJveCB3aWxsIGluaGliaXQgeG1pdCBkYXRhIGlmIENUUyBsaW5lIGlzCisJCSAqIGFzc2VydGVkICovCisJCU1TUl9WYWx1ZSA9IFNFUklBTF9NU1JfQ1RTOworCX0gZWxzZSB7CisJCS8qIEJveCB3aWxsIG5vdCBpbmhpbWJlIHhtaXQgZGF0YSBkdWUgdG8gQ1RTIGxpbmUgKi8KKwkJTVNSX1ZhbHVlID0gMDsKKwl9CisJTU9VVF9WYWx1ZSB8PSBNU1JfVmFsdWU7CisKKwlzdGF0dXMgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfSFdfRkxPV19DT05UUk9MX01BU0ssIDB4NDAsIE1PVVRfVmFsdWUsCisJCQkgICAgVWFydE51bWJlciwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gc3RhdHVzOworCit9CisKK3N0YXRpYyBpbnQgQm94U2V0U1dfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydE51bWJlciwKKwkJCSAgICAgdW5zaWduZWQgY2hhciBzdG9wX2NoYXIsIHVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhcikKK3sKKwlfX3UxNiBuU1dmbG93b3V0OworCWludCByZXN1bHQ7CisKKwluU1dmbG93b3V0ID0gc3RhcnRfY2hhciA8PCA4OworCW5TV2Zsb3dvdXQgPSAodW5zaWduZWQgc2hvcnQpc3RvcF9jaGFyOworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX1NXX0ZMT1dfQ09OVFJPTF9NQVNLLCAweDQwLCBuU1dmbG93b3V0LAorCQkJICAgIFVhcnROdW1iZXIsIE5VTEwsIDAsIDMwMCk7CisJcmV0dXJuIHJlc3VsdDsKKworfQorc3RhdGljIGludCBCb3hEaXNhYmxlX1NXX0Zsb3dDdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IFVhcnROdW1iZXIpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9TV19GTE9XX0NPTlRST0xfRElTQUJMRSwgMHg0MCwgMCwgVWFydE51bWJlciwKKwkJCSAgICBOVUxMLCAwLCAzMDApOworCXJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybjsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCS8qIHNodXQgZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1heSBiZSBnb2luZyBvbiAqLworLyoJdXNiX3VubGlua191cmIgKHBvcnQtPnJlYWRfdXJiKTsgKi8KKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJcG9ydC0+UnhIb2xkaW5nID0gMTsKKwlteWRiZygiJXMgLSBwb3J0LT5SeEhvbGRpbmcgPSAxXG4iLCBfX2Z1bmNfXyk7CisKK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybjsKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPlJ4SG9sZGluZyA9PSAxKSB7CisJCW15ZGJnKCIlcyAtcG9ydC0+UnhIb2xkaW5nID09IDFcbiIsIF9fZnVuY19fKTsKKworCQlwb3J0LT5SeEhvbGRpbmcgPSAwOworCQlteWRiZygiJXMgLSBwb3J0LT5SeEhvbGRpbmcgPSAwXG4iLCBfX2Z1bmNfXyk7CisKKwkJLyogaWYgd2UgaGF2ZSBhIGJ1bGsgZW5kcG9pbnQsIHN0YXJ0IGl0IHVwICovCisJCWlmICgoc2VyaWFsLT5udW1fYnVsa19pbikgJiYgKHBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9PSAxKSkgeworCQkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkJICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQkJICBwb3J0LT4KKwkJCQkJCQkgIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIHBvcnQtPnJlYWRfdXJiLT4KKwkJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQkgIHF0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAocmVzdWx0KQorCQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdGFydGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJfQorCX0KK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuOworCit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJX191MTYgVWFydE51bWJlciwgQnJlYWtfVmFsdWU7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCisJCUJyZWFrX1ZhbHVlID0gMTsKKwllbHNlCisJCUJyZWFrX1ZhbHVlID0gMDsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXN1bHQgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfQlJFQUtfQ09OVFJPTCwgMHg0MCwgQnJlYWtfVmFsdWUsIFVhcnROdW1iZXIsCisJCQkgICAgTlVMTCwgMCwgMzAwKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb2N0bF9zZXJpYWxfdXNiKHN0cnVjdCBpbm9kZSAqaW5ub2QsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCisJdW5zaWduZWQgZXJyOworCXVuc2lnbmVkIHVjT1BSX05ld1ZhbHVlLCB1Y19WYWx1ZTsKKwlpbnQgKnBfTnVtX29mX2FkYXB0ZXJzLCBjb3VudHMsIGluZGV4LCAqcF9RTUNSX1ZhbHVlOworCXN0cnVjdCBpZGVudGl0eSAqcF9JZGVudGl0eV9vZjsKKwlzdHJ1Y3QgaWRlbnRpdHkgSWRlbnRpdHlfb2Y7CisJc3RydWN0IHVzYl9zZXJpYWwgKmxhc3RzZXJpYWwsICpzZXJpYWw7CisKKwlteWRiZyhLRVJOX0RFQlVHICJpb2N0bF9zZXJpYWxfdXNiICBjbWQgPVxuIik7CisJaWYgKF9JT0NfVFlQRShjbWQpICE9IFNFUklBTFFUX1BDSV9JT0NfTUFHSUMpCisJCXJldHVybiAtRU5PVFRZOworCWlmIChfSU9DX05SKGNtZCkgPiBTRVJJQUxRVF9JT0NfTUFYTlIpCisJCXJldHVybiAtRU5PVFRZOworCW15ZGJnKEtFUk5fREVCVUcgImlvY3RsX3NlcmlhbF91c2IgIGNtZCA9IDB4JXhcbiIsIGNtZCk7CisJZXJyID0gMDsKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBTRVJJQUxRVF9XUklURV9RTUNSOgorCQllcnIgPSAtRU5PVFRZOworCQlpbmRleCA9IGFyZyA+PiAxNjsKKwkJY291bnRzID0gMDsKKworCQl1Y09QUl9OZXdWYWx1ZSA9IGFyZzsKKworCQllcnIgPSBFbXVsYXRlV3JpdGVRTUNSX1JlZyhpbmRleCwgdWNPUFJfTmV3VmFsdWUpOworCQlicmVhazsKKworCWNhc2UgU0VSSUFMUVRfUkVBRF9RTUNSOgorCQllcnIgPSAtRU5PVFRZOworCQlwX1FNQ1JfVmFsdWUgPSAoaW50ICopYXJnOworCQlpbmRleCA9IGFyZyA+PiAxNjsKKwkJY291bnRzID0gMDsKKworCQllcnIgPSBFbXVsYXRlUmVhZFFNQ1JfUmVnKGluZGV4LCAmdWNfVmFsdWUpOworCQlpZiAoZXJyID09IDApCisJCQllcnIgPSBwdXRfdXNlcih1Y19WYWx1ZSwgcF9RTUNSX1ZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIFNFUklBTFFUX0dFVF9OVU1PRl9VTklUUzoKKwkJcF9OdW1fb2ZfYWRhcHRlcnMgPSAoaW50ICopYXJnOworCQljb3VudHMgPSAwOwkvKiBJbml0aWFsaXplIGNvdW50cyB0byB6ZXJvICovCisJCS8qIHN0cnVjdCB1c2Jfc2VyaWFsICpsYXN0c2VyaWFsID0gc2VyaWFsX3RhYmxlWzBdLCAqc2VyaWFsOyAqLworCQlsYXN0c2VyaWFsID0gc2VyaWFsX3RhYmxlWzBdOworCisJCW15ZGJnKEtFUk5fREVCVUcgIlNFUklBTFFUX0dFVF9OVU1PRl9VTklUUyBcbiIpOworCQkvKiBpZiBmaXJzdCBwb2ludGVyIGlzIG5vbnVsbCwgd2UgYXQgbGVhc3QgaGF2ZSBvbmUgYm94ICovCisJCWlmIChsYXN0c2VyaWFsKQorCQkJY291bnRzID0gMTsJLyogd2UgYXQgbGVhc3QgaGF2ZSBvbmUgYm94ICovCisKKwkJZm9yIChpbmRleCA9IDE7IGluZGV4IDwgU0VSSUFMX1RUWV9NSU5PUlM7IGluZGV4KyspIHsKKwkJCXNlcmlhbCA9IHNlcmlhbF90YWJsZVtpbmRleF07CisJCQlpZiAoc2VyaWFsKSB7CisJCQkJaWYgKHNlcmlhbCAhPSBsYXN0c2VyaWFsKSB7CisJCQkJCS8qIHdlIGhhZCBhIGNoYW5nZSBpbiB0aGUgYXJyYXksIGhlbmNlCisJCQkJCSAqIGFub3RoZXIgYm94IGlzIHRoZXJlICovCisJCQkJCWxhc3RzZXJpYWwgPSBzZXJpYWw7CisJCQkJCWNvdW50cysrOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9CisKKwkJbXlkYmcoS0VSTl9ERUJVRyAiaW9jdGxfc2VyaWFsX3VzYiB3cml0dGluZyBjb3VudHMgPSAlZCIsCisJCSAgICAgIGNvdW50cyk7CisKKwkJZXJyID0gcHV0X3VzZXIoY291bnRzLCBwX051bV9vZl9hZGFwdGVycyk7CisKKwkJYnJlYWs7CisJY2FzZSBTRVJJQUxRVF9HRVRfVEhJU19VTklUOgorCQljb3VudHMgPSAwOworCQlwX0lkZW50aXR5X29mID0gKHN0cnVjdCBpZGVudGl0eSAqKWFyZzsKKwkJLyogY29weSB1c2VyIHN0cnVjdHVyZSB0byBsb2NhbCB2YXJpYWJsZSAqLworCQlnZXRfdXNlcihJZGVudGl0eV9vZi5pbmRleCwgJnBfSWRlbnRpdHlfb2YtPmluZGV4KTsKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU0VSSUFMUVRfR0VUX1RISVNfVU5JVCBJZGVudGl0eV9vZi5pbmRleFxuIik7CisJCW15ZGJnKEtFUk5fREVCVUcKKwkJICAgICAgIlNFUklBTFFUX0dFVF9USElTX1VOSVQgSWRlbnRpdHlfb2YuaW5kZXg9IDB4JXhcbiIsCisJCSAgICAgIElkZW50aXR5X29mLmluZGV4KTsKKworCQllcnIgPSAtRU5PVFRZOworCQlzZXJpYWwgPSBmaW5kX3RoZV9ib3goSWRlbnRpdHlfb2YuaW5kZXgpOworCQlpZiAoc2VyaWFsKSB7CisJCQllcnIgPQorCQkJICAgIHB1dF91c2VyKHNlcmlhbC0+cHJvZHVjdCwKKwkJCQkgICAgICZwX0lkZW50aXR5X29mLT5uX2lkZW50aXR5KTsKKworCQl9CisJCWJyZWFrOworCisJY2FzZSBTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRDoKKwkJZXJyID0gLUVOT1RUWTsKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU0VSSUFMUVRfSVM0MjJfRVhURU5ERUQgXG4iKTsKKwkJaW5kZXggPSBhcmcgPj4gMTY7CisKKwkJY291bnRzID0gMDsKKworCQlteWRiZyhLRVJOX0RFQlVHCisJCSAgICAgICJTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRCwgbG9va2luZyBJZGVudGl0eV9vZi5pbmRleHQgPSAweCV4XG4iLAorCQkgICAgICBpbmRleCk7CisJCXNlcmlhbCA9IGZpbmRfdGhlX2JveChpbmRleCk7CisJCWlmIChzZXJpYWwpIHsKKwkJCW15ZGJnKCIlcyBpbmRleCA9IDB4JXgsIHNlcmlhbCA9IDB4JXBcbiIsIF9fZnVuY19fLAorCQkJICAgICAgaW5kZXgsIHNlcmlhbCk7CisJCQlmb3IgKGNvdW50cyA9IDA7IHNlcnF0XzQyMl90YWJsZVtjb3VudHNdICE9IDA7IGNvdW50cysrKSB7CisKKwkJCQlteWRiZworCQkJCSAgICAoIiVzIHNlcmlhbC0+cHJvZHVjdCA9ID0gMHgleCwgc2VycXRfNDIyX3RhYmxlW2NvdW50c10gPSAweCV4XG4iLAorCQkJCSAgICAgX19mdW5jX18sIHNlcmlhbC0+cHJvZHVjdCwKKwkJCQkgICAgIHNlcnF0XzQyMl90YWJsZVtjb3VudHNdKTsKKwkJCQlpZiAoc2VyaWFsLT5wcm9kdWN0ID09IHNlcnF0XzQyMl90YWJsZVtjb3VudHNdKSB7CisJCQkJCWVyciA9IDA7CisKKwkJCQkJbXlkYmcKKwkJCQkJICAgICgiJXMgZm91bmQgbWF0Y2ggZm9yIDQyMmV4dGVuZGVkXG4iLAorCQkJCQkgICAgIF9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1RUWTsKKwl9CisKKwlteWRiZygiJXMgcmV0dXJuaW5nIGVyciA9IDB4JXhcbiIsIF9fZnVuY19fLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqZmluZF90aGVfYm94KHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqbGFzdHNlcmlhbCwgKmZvdW5kc2VyaWFsLCAqc2VyaWFsOworCWludCBjb3VudHMgPSAwLCBpbmRleDI7CisJbGFzdHNlcmlhbCA9IHNlcmlhbF90YWJsZVswXTsKKwlmb3VuZHNlcmlhbCA9IE5VTEw7CisJZm9yIChpbmRleDIgPSAwOyBpbmRleDIgPCBTRVJJQUxfVFRZX01JTk9SUzsgaW5kZXgyKyspIHsKKwkJc2VyaWFsID0gc2VyaWFsX3RhYmxlW2luZGV4Ml07CisKKwkJbXlkYmcoIiVzIGluZGV4ID0gMHgleCwgaW5kZXgyID0gMHgleCwgc2VyaWFsID0gMHglcFxuIiwKKwkJICAgICAgX19mdW5jX18sIGluZGV4LCBpbmRleDIsIHNlcmlhbCk7CisKKwkJaWYgKHNlcmlhbCkgeworCQkJLyogZmlyc3Qgc2VlIGlmIHRoaXMgaXMgdGhlIHVuaXQgd2UnZXIgbG9va2luZyBmb3IgKi8KKwkJCW15ZGJnCisJCQkgICAgKCIlcyBpbnNpZGUgaWYoc2VyaWFsKSBjb3VudHMgPSAweCV4ICwgaW5kZXggPSAweCV4XG4iLAorCQkJICAgICBfX2Z1bmNfXywgY291bnRzLCBpbmRleCk7CisJCQlpZiAoY291bnRzID09IGluZGV4KSB7CisJCQkJLyogd2UgZm91bmQgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvciwgY29weXRoZQorCQkJCSAqIHByb2R1Y3QgSWQgdG8gdXNlciAqLworCQkJCW15ZGJnKCIlcyB3ZSBmb3VuZCB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yIHNlcmlhbCA9IDB4JXBcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgc2VyaWFsKTsKKwkJCQlmb3VuZHNlcmlhbCA9IHNlcmlhbDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHNlcmlhbCAhPSBsYXN0c2VyaWFsKSB7CisJCQkJLyogd2hlbiB3ZSBoYXZlIGEgY2hhbmdlIGluIHRoZSBwb2ludGVyICovCisJCQkJbGFzdHNlcmlhbCA9IHNlcmlhbDsKKwkJCQljb3VudHMrKzsKKwkJCX0KKwkJfSBlbHNlCisJCQlicmVhazsJLyogbm8gbWF0Y2hlcyAqLworCX0KKworCW15ZGJnKCIlcyByZXR1cm5pbmcgZm91bmRzZXJpYWwgPSAweCVwXG4iLCBfX2Z1bmNfXywgZm91bmRzZXJpYWwpOworCXJldHVybiBmb3VuZHNlcmlhbDsKK30KKworc3RhdGljIGludCBFbXVsYXRlV3JpdGVRTUNSX1JlZyhpbnQgaW5kZXgsIHVuc2lnbmVkIHVjX3ZhbHVlKQoreworCisJX191MTYgQVRDX01vZGUgPSAwOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhIERldmljZURhdGE7CisJdW5zaWduZWQgdWNfdGVtcCA9IDA7CisJbXlkYmcoIkluc2lkZSAlcywgdWNfdmFsdWUgPSAweCV4XG4iLCBfX2Z1bmNfXywgdWNfdmFsdWUpOworCisJRGV2aWNlRGF0YS5wb3J0YSA9IDA7CisJRGV2aWNlRGF0YS5wb3J0YiA9IDA7CisJc2VyaWFsID0gZmluZF90aGVfYm94KGluZGV4KTsKKwkvKiBEZXRlcm1pbmUgRHVwbGV4IG1vZGUgKi8KKwlpZiAoIShzZXJpYWwpKQorCQlyZXR1cm4gLUVOT1RUWTsKKwlzdGF0dXMgPSBib3hfZ2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X3NldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl1Y190ZW1wID0gdWNfdmFsdWUgJiBRTUNSX0hBTEZfRFVQTEVYX01BU0s7CisJc3dpdGNoICh1Y190ZW1wKSB7CisJY2FzZSBRTUNSX0ZVTExfRFVQTEVYOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH5EVVBNT0RFX0JJVFM7CisJCURldmljZURhdGEucG9ydGEgfD0gRlVMTF9EVVBMRVg7CisJCUFUQ19Nb2RlID0gQVRDX0RJU0FCTEVEOworCQlicmVhazsKKwljYXNlIFFNQ1JfSEFMRl9EVVBMRVhfUlRTOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH5EVVBNT0RFX0JJVFM7CisJCURldmljZURhdGEucG9ydGEgfD0gSEFMRl9EVVBMRVhfUlRTOworCQlBVENfTW9kZSA9IEFUQ19SVFNfRU5BQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBRTUNSX0hBTEZfRFVQTEVYX0RUUjoKKwkJRGV2aWNlRGF0YS5wb3J0YSAmPSB+RFVQTU9ERV9CSVRTOworCQlEZXZpY2VEYXRhLnBvcnRhIHw9IEhBTEZfRFVQTEVYX0RUUjsKKwkJQVRDX01vZGUgPSBBVENfRFRSX0VOQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXVjX3RlbXAgPSB1Y192YWx1ZSAmIFFNQ1JfQ09OTkVDVE9SX01BU0s7CisJc3dpdGNoICh1Y190ZW1wKSB7CisJY2FzZSBRTUNSX01PREVNX0NPTlRST0w6CisJCURldmljZURhdGEucG9ydGIgJj0gfkxPT1BNT0RFX0JJVFM7CS8qIHJlc2V0IGNvbm5lY3Rpb24gYml0cyAqLworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IE1PREVNX0NUUkw7CisJCWJyZWFrOworCWNhc2UgUU1DUl9BTExfTE9PUEJBQ0s6CisJCURldmljZURhdGEucG9ydGIgJj0gfkxPT1BNT0RFX0JJVFM7CS8qIHJlc2V0IGNvbm5lY3Rpb24gYml0cyAqLworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IEFMTF9MT09QQkFDSzsKKwkJYnJlYWs7CisJfQorCisJbXlkYmcoX19GSUxFX18gIkNhbGxpbmcgYm94X3NldF9kZXZpY2Ugd2l0aCBmYWlsZWRcbiIpOworCXN0YXR1cyA9IGJveF9zZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfc2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIFRoaXMgYml0IChvdGhlcndpc2UgdW51c2VkKSBpJ2xsIHVzZWQgIHRvIGRldGVjdCB3aGV0aGVyIEFUQyBpcworCSAqIHNlbGVjdGVkICovCisJaWYgKHVjX3ZhbHVlICYgUU1DUl9SWF9FTl9NQVNLKSB7CisKKwkJbXlkYmcoX19GSUxFX18KKwkJICAgICAgImNhbGxpbmcgQm94c2V0QVRDIHdpdGggRGV2aWNlRGF0YS5wb3J0YSA9IDB4JXggYW5kIERldmljZURhdGEucG9ydGIgPSAweCV4XG4iLAorCQkgICAgICBEZXZpY2VEYXRhLnBvcnRhLCBEZXZpY2VEYXRhLnBvcnRiKTsKKwkJc3RhdHVzID0gQm94U2V0QVRDKHNlcmlhbCwgQVRDX01vZGUpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gIkJveFNldEFUQyBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSB7CisKKwkJbXlkYmcoX19GSUxFX18KKwkJICAgICAgImNhbGxpbmcgQm94c2V0QVRDIHdpdGggRGV2aWNlRGF0YS5wb3J0YSA9IDB4JXggYW5kIERldmljZURhdGEucG9ydGIgPSAweCV4XG4iLAorCQkgICAgICBEZXZpY2VEYXRhLnBvcnRhLCBEZXZpY2VEYXRhLnBvcnRiKTsKKwkJc3RhdHVzID0gQm94U2V0QVRDKHNlcmlhbCwgQVRDX0RJU0FCTEVEKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRBVEMgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IEVtdWxhdGVSZWFkUU1DUl9SZWcoaW50IGluZGV4LCB1bnNpZ25lZCAqdWNfdmFsdWUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgRGV2aWNlRGF0YTsKKwlfX3U4IHVjX3RlbXA7CisKKwkqdWNfdmFsdWUgPSAwOworCisJc2VyaWFsID0gZmluZF90aGVfYm94KGluZGV4KTsKKwlpZiAoIShzZXJpYWwpKQorCQlyZXR1cm4gLUVOT1RUWTsKKworCXN0YXR1cyA9IGJveF9nZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfZ2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwl1Y190ZW1wID0gRGV2aWNlRGF0YS5wb3J0YSAmIERVUE1PREVfQklUUzsKKwlzd2l0Y2ggKHVjX3RlbXApIHsKKwljYXNlIEZVTExfRFVQTEVYOgorCQkqdWNfdmFsdWUgfD0gUU1DUl9GVUxMX0RVUExFWDsKKwkJYnJlYWs7CisJY2FzZSBIQUxGX0RVUExFWF9SVFM6CisJCSp1Y192YWx1ZSB8PSBRTUNSX0hBTEZfRFVQTEVYX1JUUzsKKwkJYnJlYWs7CisJY2FzZSBIQUxGX0RVUExFWF9EVFI6CisJCSp1Y192YWx1ZSB8PSBRTUNSX0hBTEZfRFVQTEVYX0RUUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSSB1c2UgdGhpcyBmb3IgQVRDIGNvbnRyb2wgc2UgKi8KKwl1Y190ZW1wID0gRGV2aWNlRGF0YS5wb3J0YiAmIExPT1BNT0RFX0JJVFM7CisKKwlzd2l0Y2ggKHVjX3RlbXApIHsKKwljYXNlIEFMTF9MT09QQkFDSzoKKwkJKnVjX3ZhbHVlIHw9IFFNQ1JfQUxMX0xPT1BCQUNLOworCQlicmVhazsKKwljYXNlIE1PREVNX0NUUkw6CisJCSp1Y192YWx1ZSB8PSBRTUNSX01PREVNX0NPTlRST0w7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCisJfQorCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNlcnF0X3VzYl9pbml0KHZvaWQpCit7CisJaW50IGksIHJlc3VsdDsKKwlpbnQgc3RhdHVzID0gMDsKKworCW15ZGJnKCIlc1xuIiwgX19mdW5jX18pOworCXR0eV9zZXRfb3BlcmF0aW9ucygmc2VyaWFsX3R0eV9kcml2ZXIsICZzZXJpYWxfb3BzKTsKKwlyZXN1bHQgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfdHR5X2RyaXZlcik7CisJaWYgKHJlc3VsdCkgeworCQlteWRiZygidHR5X3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQgZXJyb3IgPSAweCV4IiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBJbml0YWxpemUgb3VyIGdsb2JhbCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpCisJCXNlcmlhbF90YWJsZVtpXSA9IE5VTEw7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZzZXJxdF91c2JfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiIF9fRklMRV9fCisJCSAgICAiIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJc3RhdHVzID0gMDsJCS8qIER5bmFtaWMgYXNzaWdubWVudCBvZiBtYWpvciBudW1iZXIgKi8KKwltYWpvcl9udW1iZXIgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYoc3RhdHVzLCAiU2VyaWFsUVRfVVNCIiwgJnNlcmlhbHF0X3VzYl9mb3BzKTsKKwlpZiAobWFqb3JfbnVtYmVyIDwgMCkgeworCQlteWRiZyhLRVJOX0RFQlVHICJObyBkZXZpY2VzIGZvdW5kIFxuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9IGVsc2UKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU2VyUVRfVVNCIG1ham9yIG51bWJlciBhc3NpZ25tZW50ID0gJWQgXG5cbiIsCisJCSAgICAgIG1ham9yX251bWJlcik7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZXJxdF91c2JfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZzZXJxdF91c2JfZHJpdmVyKTsKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF90dHlfZHJpdmVyKTsKKwl1bnJlZ2lzdGVyX2NocmRldihtYWpvcl9udW1iZXIsICJTZXJpYWxRVF9VU0IiKTsKK30KKworbW9kdWxlX2luaXQoc2VycXRfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoc2VycXRfdXNiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0NDMyYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYmRvd25sb2FkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MjE1ICswLDAgQEAKLSNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCi0jZGVmaW5lIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoyMiIKLSNkZWZpbmUgTU9KQVZFX1VDT0RFX0hPU1RJRl9JRCAgCTMKLQotc3RhdGljIHMzMiBNTnVtU2VjdGlvbnMgPSAweDI7Ci1zdGF0aWMgdTMyIE1TZWN0aW9uU2l6ZVtdID0KLXsKLQkweDAwMDA4MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBNU2VjdGlvblN0YXJ0W10gPQotewotCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCi19OwotCi1zdGF0aWMgdTggTW9qYXZlVUNvZGVbMl1bNjU1MzZdID0KLXsKLQl7Ci0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDAwLCAweGEyLCAweDQ5LCAweGRkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDFmLCAweGU5LCAweDE4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU5LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4NDAsIDB4ZTksIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDBlLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxNCwgMHhiYywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4YjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhkOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGI2LCAweGQzLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDIyLCAweDUwLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhhNSwgMHhhNSwgMHgwMCwgMHhhNiwgMHhiNCwgMHhhNywgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHhhMiwgMHg1MCwKLQkweGI1LCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDdmLCAweDAwLCAweDAwLCAweDIwLCAweGY1LCAweGNmLCAweDAxLCAweDAwLCAweDFjLCAweDAxLCAweDAwLCAweGZhLAotCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4ZGEsIDB4YjUsIDB4YWIsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHgwMCwgMHhhMiwgMHg1MCwgMHhiNSwgMHg2MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQ0LCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlZCwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDAwLCAweDAwLCAweDQ2LCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwgMHhlZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGUzLCAweDhmLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQ4LCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhkNywgMHg4ZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhmMSwgMHhkYiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGU5LCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZTksIDB4ZTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDRjLCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsIDB4ZWIsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLAotCTB4YjUsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhhNywKLQkweGI0LCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhiNSwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDAwLCAweDI2LCAweDRjLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGRhLAotCTB4YjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNSwgMHgwMCwgMHgwMCwgMHg1MiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDRiLCAweDg5LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGRmLCAweGY3LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ZGYsIDB4OGIsIDB4MDEsIDB4MDAsIDB4NjksIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhkZiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhlNSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGIzLCAweDhiLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHhkNSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHhkYSwgMHg3YiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGRkLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVkLCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsIDB4ZTcsIDB4OGIsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGU3LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZTcsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGU1LCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHg4ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGI1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlNSwgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweGRkLCAweDliLCAweDAxLCAweDAwLAotCTB4OTYsIDB4MDAsIDB4MjIsIDB4ZjUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweGViLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY1LAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNywgMHhlMywgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweGVlLCAweGRkLCAweGNiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhlOSwgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDAwLCAweDAwLCAweDRhLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLAotCTB4ZGQsIDB4ODksIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4YTYsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweGE2LAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE2LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NGIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwgMHhkZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgxMywgMHhiYywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4OTUsIDB4ZTgsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGM4LCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDFmLCAweGZkLAotCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwMCwgMHhhMiwgMHhmZiwKLQkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAwLCAweDA2LCAweGZlLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YjMsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4YjMsIDB4YzMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAotCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHhlYiwgMHgwMSwgMHgwMCwgMHhlNCwgMHgwMCwgMHg4NCwgMHg5NiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU1LCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDAxLCAweDAwLCAweDQxLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDAsIDB4YTIsIDB4NDEsIDB4OGQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwgMHhiNSwgMHhiZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiOCwgMHhlMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHhiOSwgMHhlYiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGI4LCAweDk3LCAweDAxLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweGRjLAotCTB4YjksIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMSwgMHgwMCwgMHg0MiwKLQkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDJkLCAweDExLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDJkLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODEsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHg5NiwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHhhMCwgMHhkYywKLQkweGI5LCAweDZiLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHhkYSwgMHg4YiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDExLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHg0NCwgMHg4OSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDksIDB4MDAsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwgMHgwYywgMHgwMSwgMHhhMCwgMHhkYSwgMHg4YiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDhhLCAweGY0LCAweDAxLCAweDAwLCAweDEyLCAweDAxLCAweDkwLCAweDQ0LCAweDhhLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsCi0JMHg4YSwgMHhhOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MCwgMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQwLCAweGY5LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTksIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMSwgMHg0MCwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhkYSwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLAotCTB4MTYsIDB4MDEsIDB4OWYsIDB4ZGEsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAxLCAweDlmLCAweDk0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGI0LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGIzLCAweGMzLCAweDAxLCAweDAwLAotCTB4MWQsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQ5LAotCTB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGExLCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MjAsIDB4NDgsIDB4YTEsIDB4NTEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHgyMiwgMHg0YiwKLQkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHg3ZSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MSwgMHgwMSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRlLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDgwLCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDVmLCAweDAxLCAweDIyLCAweGNjLCAweDg1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKLQkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLAotCTB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGE0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKLQkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhkLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQyLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgxYSwgMHgwMCwKLQkweDVhLCAweDAxLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDVhLCAweDAxLCAweDUyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg5MSwgMHg4MSwKLQkweDgwLCAweDMwLCAweDFhLCAweDAwLCAweDVhLCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4OTEsIDB4ODIsIDB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDk0LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MjIsIDB4NDAsCi0JMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQxLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI3LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQyLCAweGZmLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGFjLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDEsIDB4YTIsIDB4NGMsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDIyLCAweDQxLCAweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGEyLCAweGUwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDQsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiMywgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDAwLCAweDViLCAweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweGEwLAotCTB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGJhLCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YzMsIDB4MDEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHgwMSwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywKLQkweDZmLCAweDkzLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MDEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4MDEsIDB4NTUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg2ZiwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGYzLCAweDlmLCAweDAwLCAweDUzLCAweDZmLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMSwgMHgyMiwgMHhkZSwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDEsIDB4YTIsIDB4NDQsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MywgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY4LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRkLAotCTB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlZCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweGRlLCAweGExLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjcsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDEsIDB4ODQsIDB4NDEsCi0JMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweGYxLCAweDAxLCAweDAwLCAweDQxLAotCTB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwKLQkweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweGEyLCAweGJhLCAweDgwLCAweDA0LCAweDAwLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4YTgsIDB4YjEsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4MDIsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGU1LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDIsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHhjNywKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4NWQsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDIsIDB4YjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAyLCAweGJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMSwgMHgwMiwgMHhiYywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzMsIDB4MDIsIDB4YmQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM3LCAweDAyLCAweGJmLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHgwMiwgMHhjOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNiLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDIsIDB4Y2EsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAyLCAweGNiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MywgMHgwMiwgMHhjZCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDUsIDB4MDIsIDB4Y2UsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNywgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDYzLCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDQ5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY1LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4NWMsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCi0JMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKLQkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCi0JMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAotCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCi0JMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAotCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4MSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4NDIsCi0JMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMiwgMHgyMiwgMHg0NCwKLQkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDkxLCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4NTQsCi0JMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTksIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4MDIsIDB4MDAsIDB4NDYsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAotCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCi0JMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwMiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKLQkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAotCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4ODAsIDB4YTUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweGNkLCAweDAyLCAweDgwLCAweGE1LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhkNiwgMHgwMiwgMHgyMCwgMHg0ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGQ2LCAweDAyLCAweDIwLCAweDRiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NDcsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDAzLCAweDkwLCAweDAwLCAweDQxLAotCTB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGRhLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDIsIDB4YTIsIDB4YTUsCi0JMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUwLCAweDAyLCAweDFmLCAweDkxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlMywgMHgwMiwgMHgxZiwgMHg5MSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweGE5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4MDIsIDB4MWYsIDB4OTEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDAyLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDY4LCAweDAwLCAweDkwLAotCTB4MjAsIDB4YTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDA2LCAweDA1LCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDcsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDQwLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMiwgMHhhMiwgMHhmOCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMiwgMHhmMCwKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweDkxLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MGMsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDRlLCAweDg1LCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDRmLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NGYsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHgwMywgMHgwMCwgMHgwYywgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MywKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAotCTB4MzksIDB4MDMsIDB4MDAsIDB4NGQsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDIsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMywgMHgyMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKLQkweDM5LCAweDAzLCAweDAwLCAweDRlLCAweDg1LCAweDEwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDMsIDB4YTIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDIwLCAweDk1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MjEsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDE3LCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDU4LAotCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTksIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyMCwgMHg0ZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1YSwKLQkweDg1LCAweDEwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDE3LCAweDg1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCi0JMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDE0LCAweDIwLCAweDQxLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDIzLCAweDAzLCAweDIyLCAweGYwLAotCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NTksIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMywgMHhhMiwgMHhmMCwKLQkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAzLCAweGEyLCAweDQyLCAweDIxLCAweDdkLCAweDAwLCAweDAwLCAweGE1LCAweGE1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMywgMHgwMCwgMHg0NCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDMsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDg3LCAweGI0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDg3LCAweGI0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDAzLCAweGEyLCAweDQxLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGYyLAotCTB4ODYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHgwMywgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4ZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ5LCAweDAzLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OWYsIDB4MDAsIDB4NDcsIDB4OTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMywgMHgwMCwgMHg1YywKLQkweDhmLCAweDgwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAotCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDgyLCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MjIsIDB4NWYsCi0JMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDUzLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywKLQkweDg2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJmLCAweDQ2LCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDhiLCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDMsIDB4YTAsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MiwgMHhlOCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDhlLCAweGMwLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDQxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEzLCAweDU1LCAweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4MDMsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDFhLCAweDE1LCAweDAwLCAweGE2LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsCi0JMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDAzLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDMsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4MywgMHgwMywgMHhhMiwgMHg0MSwKLQkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNywgMHgwZiwgMHgwMCwgMHhiYywKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQl9LAotCXsKLQkweDMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM0LCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4MCwgMHg4MSwgMHg4MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQwLCAweDkxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDk1LCAweDJhLCAweGM4LCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgxMSwgMHg4MSwKLQkweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MTEsIDB4ODIsIDB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4OSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDgwLCAweGEyLCAweDQyLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MCwgMHgxMSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHg1MSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDExLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyNywgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDgwLCAweGEyLCAweDUzLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg4MCwgMHhhMiwgMHg1MiwgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwgMHg1MiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDUsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGUxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZGUsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDliLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDM2LCAweGIxLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdiLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NzAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg3MSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5NywKLQkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJlLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg5MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDgxLCAweDAwLCAweDQwLCAweGFmLCAweDMzLCAweDAxLCAweDAwLCAweDYxLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAwLCAweDAwLAotCTB4NzEsIDB4ODAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODAsIDB4NTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MywgMHg4MCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDgwLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDksCi0JMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0YSwgMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAotCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAotCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDhlLCAweDgwLCAweGEyLCAweDQxLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCi0JMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDIsIDB4MDAsIDB4MjAsCi0JMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAotCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAotCTB4YTMsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCi0JMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDdmLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCi0JMHg3ZiwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MywgMHgxZCwgMHhjNiwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQzLCAweDgxLCAweGYwLCAweDAxLCAweDAwLAotCTB4YTksIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDgxLCAweDAwLCAweGNhLCAweDYzLCAweGIzLCAweDAwLCAweDAwLCAweDJkLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg5YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4NTUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MywgMHgwMCwgMHhiYiwKLQkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4MSwgMHgwMCwgMHg0ZSwKLQkweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGUyLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAotCTB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4ZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCi0JMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDc1LCAweDgwLCAweDAwLCAweGNhLCAweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0YywKLQkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGU4LCAweDgwLCAweDIyLCAweDQyLAotCTB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODAsIDB4MjIsIDB4NDEsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg4MCwgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MCwgMHgxZiwgMHhjYSwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDIsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAotCTB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4MSwgMHgwMCwgMHg0MCwgMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAwLCAweDJmLCAweDliLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLAotCTB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDMzLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsIDB4NDcsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLAotCTB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKLQkweDA1LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MSwgMHhhMiwgMHg0MCwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDYwLCAweDQwLCAweDk1LCAweDgzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODEsIDB4MzYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjUsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQxLAotCTB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MSwgMHhhMiwgMHg0MiwKLQkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweGNhLCAweDY5LCAweDk3LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMCwgMHg0MywKLQkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MjIsIDB4NDAsIDB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NmYsCi0JMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDk1LCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MSwgMHgyMiwgMHg1YiwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHhmNSwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweGZkLCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4N2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4Y2EsCi0JMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM1LCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDZmLCAweDAwLCAweGNhLAotCTB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg1ZiwKLQkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCi0JMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGNiLCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAotCTB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDYwLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MiwgMHg4MSwgMHg5ZiwgMHg4NSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHhhMiwgMHg0ZiwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4NzUsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4N2EsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDdmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODEsIDB4MjIsIDB4NDMsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDg0LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4ODksIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg4ZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDA4LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4OTIsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGIwLCAweDgxLCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg4MSwgMHgyMiwgMHg0YSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDljLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4ODEsIDB4MjIsIDB4NGYsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDgxLCAweDIyLCAweDRlLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4MjIsIDB4NDIsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4MSwgMHgyMiwgMHg0NCwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODEsIDB4MjIsIDB4NDMsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDgxLCAweDIyLCAweDRiLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGFmLCAweGIzLCAweDAxLCAweDAwLCAweGM1LCAweDgxLCAweDIyLCAweDQwLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4YzUsIDB4ODEsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGM0LCAweDgxLCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGM1LCAweDgxLCAweDAwLCAweDBiLAotCTB4N2QsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4N2QsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGNhLCAweGE3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDgxLCAweDlmLCAweDg1LAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg4MSwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4MSwgMHhhMiwgMHg0OSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4ODEsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ODEsIDB4YTIsIDB4NGEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDgxLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MSwgMHg0MiwgMHg0MCwKLQkweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDQwLCAweDY4LCAweDk3LCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4YmIsCi0JMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGEyLAotCTB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQzLAotCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweGY4LCAweDgxLCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODEsIDB4YTIsIDB4NTAsCi0JMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGJiLAotCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4ODEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODEsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGIzLCAweDczLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweGI1LCAweGYzLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4ZjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHhiMywgMHhmYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhhNiwgMHhiOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGYyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQyLAotCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDksIDB4ODIsIDB4MTAsIDB4ZGEsIDB4YjUsIDB4NmIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MDAsIDB4NDEsCi0JMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAotCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwKLQkweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4MiwgMHgwNCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDExLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNSwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGI5LCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDI5LCAweDgyLCAweGEyLCAweDU0LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MiwgMHhhMiwgMHgwNiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweDNhLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsCi0JMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweGIyLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDgyLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDIyLCAweDQ1LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmQsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4MjAsCi0JMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcyLCAweDgyLCAweDIyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDQ2LCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLCAweDg1LCAweDgyLCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODIsIDB4MjIsIDB4NDUsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTYsIDB4ODIsIDB4YTgsIDB4YmIsIDB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDk4LCAweDgyLCAweGEyLCAweGYyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweGUxLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWYsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNywgMHg4MiwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLAotCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4MiwgMHgyMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGI4LCAweDgyLCAweGEyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGZjLCAweDE1LCAweDIwLCAweDIwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgyMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDgyLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzIsIDB4ODIsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAotCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4ODIsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODIsIDB4MDAsIDB4NTAsCi0JMHhiNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgzMSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgzMywgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM0LCAweDM1LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4MzcsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4MzksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MSwgMHg0MiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQzLCAweDQ0LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ1LCAweDQ2LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDcsIDB4NDgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg0YSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY3LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTcsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKLQkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAotCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCi0JMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAotCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAotCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDgzLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDgzLCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAotCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg4MywgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDgzLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDRjLCAweDgzLCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAotCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODMsIDB4YWEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDgzLCAweGEzLCAweDUzLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4NTgsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDgzLCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAotCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKLQkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODMsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4MywgMHhhMiwgMHg0YiwgMHhiNywgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDlkLCAweDgzLCAweGEyLCAweDQxLCAweDJmLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5YywgMHg4MywgMHgyMiwgMHg0MCwKLQkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5YywgMHg4MywgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDdjLCAweDE2LCAweDIwLCAweGY2LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDgyLCAweDgzLCAweDIyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ODYsIDB4ODMsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODMsIDB4MjIsIDB4NDIsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDg2LCAweDgzLCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODMsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0OCwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDRiLAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk5LCAweDgzLCAweDIyLCAweDQwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODMsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDQxLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweGE4LCAweDgzLCAweDIyLCAweDQ0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ODMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg4MywgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHg4MywgMHgyMiwgMHg1MCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI1LCAweDgzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjcsIDB4ODMsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODMsIDB4MjIsIDB4NWMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHhhZSwgMHg4MywgMHhhMiwgMHg0MiwKLQkweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDUsCi0JMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMSwgMHgwMCwgMHhiYywgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKLQkweGIxLCAweGIzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4YTIsIDB4NDAsCi0JMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDgzLCAweGE4LCAweGIxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweGI4LCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4YmYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGNhLCAweDgzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg4MywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MywgMHg1NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4MywgMHhhMiwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODMsIDB4OTEsIDB4ODEsCi0JMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODMsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsCi0JMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODMsIDB4MjIsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4ODMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODMsIDB4YTIsIDB4NDEsCi0JMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OWYsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUwLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmIsIDB4ODMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweGZlLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDUwLCAweGQzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODQsIDB4MjIsIDB4YTcsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0OSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk0LCAweDJlLCAweDQzLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLCAweGEzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0MSwKLQkweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODQsIDB4MDAsIDB4NTAsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODQsIDB4YTIsIDB4NDEsCi0JMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NCwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDc4LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDFjLCAweDg0LCAweGE4LCAweGIxLAotCTB4OWMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NCwgMHgzMywgMHhjNCwKLQkweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg0LCAweGExLCAweGFkLCAweDlkLCAweDIwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MTMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsCi0JMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDg0LCAweDIyLCAweGFiLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDJhLCAweDg0LCAweGEyLCAweDQwLAotCTB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODQsIDB4MjIsIDB4NWYsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZSwKLQkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDg0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzEsIDB4ODQsIDB4MjIsIDB4NTQsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHg4NCwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGZhLCAweDg1LCAweGEyLCAweDVmLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODQsIDB4YTIsIDB4NWYsIDB4NTksIDB4MjcsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHg4NCwgMHhhMiwgMHg1YywgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4NCwgMHhhMiwgMHg1ZSwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDQ2LCAweDg0LCAweDIyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4NDcsIDB4ODQsIDB4MzcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHhhOCwgMHhiMSwgMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDg0LCAweGE4LCAweGIxLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHg4NiwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NywgMHg4NCwgMHgzNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4M2QsIDB4ODQsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4NTIsIDB4MjEsCi0JMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MSwgMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDNmLCAweDAwLCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODQsIDB4MDAsIDB4MzQsIDB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgzZiwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhlNSwgMHg4NCwgMHgwMCwgMHg0MywKLQkweDAxLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NDcsIDB4ODQsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MTMsIDB4NGUsCi0JMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4OSwgMHhhMiwgMHg0OCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDRlLCAweDg0LCAweDIyLCAweDU5LCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDc5LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODQsIDB4MjgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHg0YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NCwgMHgyMSwgMHhhYywKLQkweDljLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDFmLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTAsIDB4NWYsIDB4OWQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg1OCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NCwgMHgyMiwgMHg1YSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDdhLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGE4LCAweGIxLAotCTB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgyMiwgMHg0NCwKLQkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDg0LCAweDQyLCAweGE1LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4NWIsIDB4ODQsIDB4YTIsIDB4NDAsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODQsIDB4MWEsIDB4NDAsCi0JMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDlhLCAweDgwLCAweGEyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDliLCAweDg5LCAweDIyLCAweDQ0LAotCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4OTIsIDB4ODksIDB4MjIsIDB4NDAsIDB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHg4OSwgMHhhMiwgMHg1YiwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwKLQkweDMzLCAweDdkLCAweDAwLCAweDAwLCAweDY2LCAweDg0LCAweDIyLCAweDQ4LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDY5LCAweDg0LCAweDIyLCAweDQwLAotCTB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhlZiwgMHg4OSwgMHgxZiwgMHhhNSwgMHg4MiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDZjLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDMzLCAweDQwLAotCTB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg3MywgMHg4NCwgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg4NCwgMHhhMCwgMHhjZCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDljLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODQsIDB4MjIsIDB4YjUsCi0JMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDc3LCAweDg0LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGI0LAotCTB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsIDB4NjksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweGE4LCAweGExLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODQsIDB4MDAsIDB4ODgsIDB4OWUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4NCwgMHhhMiwgMHg0MSwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg2ZiwKLQkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NWMsIDB4ODQsIDB4MWEsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDksCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDg0LCAweGE2LCAweDQyLCAweDEzLCAweDYwLCAweDAwLCAweDAwLCAweDNmLCAweDk3LCAweDAwLCAweDk1LAotCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODQsIDB4NDUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YywgMHg4NCwgMHhhOCwgMHhiMSwKLQkweDBjLCAweDMwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweDFkLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAotCTB4OTEsIDB4ODQsIDB4MDAsIDB4NTgsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTcsIDB4MDAsIDB4OTUsCi0JMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweGYwLAotCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHg4NCwgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4NCwgMHgyMiwgMHg0YiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODQsIDB4ODMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDlkLCAweDg0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4MjIsIDB4NTUsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4YTMsIDB4ODQsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODQsIDB4YTIsIDB4ZjgsCi0JMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NCwgMHgyMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGFiLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODQsIDB4YTIsIDB4ZjgsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmMCwKLQkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg0LCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4NDcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4NCwgMHhhMiwgMHhmMywgMHg3NCwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLCAweGJkLCAweDg0LCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHgwMCwgMHgxZiwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4YmIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4NDcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHg4NCwgMHgxZiwgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwKLQkweGMzLCAweDg0LCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMywgMHg4NCwgMHg0NywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVjLCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNiLCAweDg0LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4NCwgMHgyMiwgMHg0MCwKLQkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGRiLCAweDg0LCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHg4NCwgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkOCwgMHg4NCwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTgsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDk5LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODQsIDB4ODIsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHgwMCwgMHg0NSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGUyLCAweDg0LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAotCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NywgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGU3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODQsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsIDB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODQsIDB4MjIsIDB4MTcsCi0JMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg4NCwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDg0LCAweDIzLCAweGEyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDg1LCAweDAwLCAweDVjLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDExLCAweDg1LCAweDIyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg4NSwgMHgyMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNiwgMHg4NSwgMHg0NSwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDBlLCAweDg1LCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTEsIDB4ODUsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFjLCAweDg1LCAweDIyLCAweDRhLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4NSwgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGY3LCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxYywgMHg4NSwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODUsIDB4MjIsIDB4YTEsIDB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4NSwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDViLCAweDg1LCAweGEzLCAweDkyLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgxNSwgMHg4YSwgMHgyMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4NSwgMHgyMiwgMHg1YywKLQkweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDI5LCAweDg1LCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4NSwgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAotCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHg4NSwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NSwgMHgwMCwgMHg1ZSwKLQkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4NDgsIDB4ODUsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDg1LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHg0YiwgMHg4NSwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4NGUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRmLCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NSwgMHgyMiwgMHg0MywKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1OSwgMHg4NSwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1ZCwgMHg4NSwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NSwgMHgwMCwgMHg0MSwKLQkweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4MzUsIDB4MDEsCi0JMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY2LCAweDg1LCAweDI4LCAweGIxLCAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDYwLCAweDg1LCAweDIyLCAweDRkLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHhmMywgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODUsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODUsIDB4YTIsIDB4NDAsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHg4NSwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDg1LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDM5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDg1LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLAotCTB4ODQsIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4NSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDhiLCAweDg1LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4NSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWIsIDB4OTUsIDB4MDAsIDB4NDMsIDB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWUsIDB4ODUsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NSwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyZCwgMHg0YywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDM3LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4ODQsIDB4ODUsIDB4MDAsIDB4NDUsIDB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODUsIDB4YTMsIDB4MTIsCi0JMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4NSwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE0LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4Y2EsIDB4ODUsIDB4MjIsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJkLCAweDE0LCAweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGMzLCAweDg1LCAweGEyLCAweDE0LAotCTB4MzYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODUsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGI5LCAweDg1LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODUsIDB4MjIsIDB4MWIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YzAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODUsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDg1LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDg0LCAweDg1LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNkLCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkNywgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweGRhLCAweDg1LCAweDIyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxNiwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg4NSwgMHhhMywgMHg0MCwKLQkweDI3LCAweDZjLCAweDAwLCAweDAwLCAweGRlLCAweDg1LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODQsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsCi0JMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDE1LCAweDhhLCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiOSwgMHg5NCwgMHgwMCwgMHgwMSwgMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODUsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVhLCAweDg1LCAweDAwLCAweDQxLAotCTB4ODMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKLQkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg2LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODYsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NiwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDg2LCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg4NiwgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NiwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTgsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDk5LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg4NiwgMHgyMiwgMHgzYSwgMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NiwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4NiwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDk3LCAweDAwLCAweDRiLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDRjLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODYsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4NiwgMHg4NSwgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGU3LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmUsIDB4ODYsIDB4NDYsIDB4NDcsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDg2LCAweGE4LCAweDFiLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDFlLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NiwgMHgwMSwgMHhmYiwKLQkweDA4LCAweDMwLCAweDAwLCAweDAwLCAweGE3LCAweDg2LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDk2LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDRhLCAweDg2LCAweDIyLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2UsIDB4ODYsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NiwgMHgyMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4NDIsIDB4ODYsIDB4YTYsIDB4NWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODYsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDRmLCAweDg2LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU2LCAweDg2LCAweDIxLCAweDA0LCAweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDU3LCAweDg2LCAweDAwLCAweDQwLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4NiwgMHgwMCwgMHg0MywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg4NiwgMHgwMCwgMHhmYiwKLQkweDIyLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NGUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODYsIDB4MDAsIDB4NWEsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NiwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE4LCAweDhhLCAweDAwLCAweDUzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDU2LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4NiwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDY0LCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4NiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDY4LCAweDg2LCAweGEyLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDVkLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NiwgMHhhMCwgMHg5MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MCwgMHg4NiwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY2LCAweDhiLCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHhhMCwgMHgwYSwKLQkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDhhLCAweGEwLCAweDQyLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDU0LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAotCTB4ODMsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODYsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHg4NiwgMHhhMiwgMHg1NCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4NiwgMHgyMiwgMHg1NSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODYsIDB4MjIsIDB4NTMsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg4NiwgMHgyMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDgwLCAweDg2LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLAotCTB4N2MsIDB4OTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODYsIDB4NDMsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4NiwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDg2LCAweDg2LCAweDFiLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4MzEsIDB4YzMsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLAotCTB4ZTAsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHgzMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTEsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAotCTB4YWQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweDIyLCAweDQyLAotCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHg4NiwgMHg0NywgMHgxYiwgMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLAotCTB4ZTAsIDB4ODYsIDB4MjMsIDB4OTIsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4YTIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NiwgMHgyMiwgMHgwOCwKLQkweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4MTIsIDB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODYsIDB4YWEsIDB4NDEsCi0JMHgyNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGRhLCAweDg2LCAweDI2LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDg2LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4ODYsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGNjLCAweDg2LCAweGEyLCAweDQ0LAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODYsIDB4YTgsIDB4NDIsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODYsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4NiwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODYsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODYsIDB4MjIsIDB4MDgsCi0JMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDgwLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVjLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODcsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjYsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTMsIDB4MDcsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDg2LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwKLQkweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGU3LCAweDg4LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLAotCTB4MTIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDg3LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGQxLCAweDg3LCAweGEyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg1NCwgMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODcsIDB4MjAsIDB4OTQsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDg3LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDJhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MmIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4NywgMHgyMiwgMHg0MCwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDVmLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0MywgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDg3LCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHgxZSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4NTAsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NywgMHgyMiwgMHg0MiwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDVmLCAweDg3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4NywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4MjIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODcsIDB4YTIsIDB4MGQsCi0JMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NywgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHg4NywgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHg0YywKLQkweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NzksIDB4ODcsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODcsIDB4MDAsIDB4MDMsCi0JMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwZCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKLQkweDMxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4ZjYsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDg5LCAweDg3LCAweDIyLCAweDBiLAotCTB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODcsIDB4MjIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDkxLCAweDg3LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKLQkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDk4LCAweDg3LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDg3LCAweGEwLCAweDQxLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NywgMHhhMCwgMHg0MywKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4YTAsIDB4ODcsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDg3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGE5LCAweDg3LCAweDIyLCAweDQ4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNywgMHg4NywgMHg5MCwgMHg0OCwKLQkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDE0LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODcsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDg3LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4NywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YmMsIDB4ODcsIDB4ODcsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NSwgMHgwMCwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDg3LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUyLCAweDg5LCAweDAwLCAweDE3LAotCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHg4NywgMHhhMCwgMHgwNywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODcsIDB4OTAsIDB4ZjIsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE3LAotCTB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNSwgMHg4NywgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDUsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDBhLCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LAotCTB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4OCwgMHgyMiwgMHgwMSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4YTQsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4NywgMHhhMywgMHgwNywgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGViLCAweDg3LCAweDY4LCAweDAxLCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA3LAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4ODcsIDB4MjIsIDB4NDAsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4NywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg4OCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYyLCAweDNhLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4M2IsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4OCwgMHgyMywgMHgxYSwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDAzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MWQsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzMCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDMxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4OCwgMHgyMiwgMHgxYSwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTQsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4OCwgMHgwMCwgMHgxYSwKLQkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4OCwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIxLCAweDg4LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODgsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI4LCAweDg4LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODgsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgyNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDJmLCAweDg4LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDg4LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTMsIDB4ODgsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDg4LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODgsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4NywgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKLQkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGU0LCAweDg3LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg4LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg4OCwgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxOCwKLQkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDZlLCAweDg4LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODgsIDB4YTIsIDB4NDEsCi0JMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4NzYsIDB4ODgsIDB4NDIsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDgwLCAweDg4LCAweGEwLCAweDQxLCAweDgwLCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwgMHg4MSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDg4LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4OTMsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgxOSwKLQkweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4OGEsIDB4ODgsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwgMHgzMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDg4LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDhlLCAweDg4LCAweGEwLCAweDFjLAotCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLCAweDk4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDFhLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4OCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWQsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFhLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweGI2LCAweDg4LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4OCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweGRlLCAweDg4LCAweDIyLCAweDQwLAotCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODgsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4OCwgMHgyMiwgMHg5ZiwKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLAotCTB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgzZiwgMHhjMywgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDg4LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAotCTB4M2UsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4OCwgMHgyMCwgMHgxZSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDFlLCAweDI0LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4ODgsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDg4LCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg4OCwgMHhhMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgxZiwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDg4LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODgsIDB4MDAsIDB4MWUsIDB4M2UsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGVmLCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDg4LCAweDIyLCAweDA3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODgsIDB4MjAsIDB4OTQsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHgwMCwgMHg5NCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDg4LCAweDIyLCAweDQwLAotCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDg5LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHg4OSwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OSwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4OSwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OSwgMHgyMiwgMHgwZCwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDFhLCAweDg5LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODksIDB4MDAsIDB4MGQsCi0JMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIwLAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg4OSwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyNywgMHg4OSwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODksIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQzLAotCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OSwgMHhhMiwgMHgwZCwKLQkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDMzLCAweDg5LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4ODksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM4LCAweDg5LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDRjLAotCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4OSwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg4OSwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg4OSwgMHgwMCwgMHgwMywKLQkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAotCTB4NGUsIDB4ODksIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDRlLCAweDg5LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4OSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDg5LCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4OSwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NGUsIDB4OTksIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODksIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODksIDB4MjIsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDY1LCAweDg5LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ODksIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4OSwgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDZiLCAweDg5LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDk5LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDIyLCAweDQ4LAotCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4OSwgMHgxZiwgMHhmMCwKLQkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDg5LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTgsIDB4OGEsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDgsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDgyLCAweDg5LCAweDIyLCAweDBhLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OTksIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg4YSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDg5LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4OSwgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4YSwgMHgyMCwgMHg0YywKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAotCTB4YTgsIDB4OGEsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MjIsIDB4MGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQ5LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg4OSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDk3LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDg5LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDlkLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODQsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4OSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4NDksIDB4ODQsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4OSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGM5LCAweDg5LCAweDFkLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDg5LCAweDIyLCAweDQwLAotCTB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NWIsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE2LCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFiLCAweDg5LCAweDQzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI5LCAweDg5LCAweDIyLCAweDU3LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg4OSwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGFmLCAweDg5LCAweGE4LCAweGIxLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4OSwgMHhhOCwgMHg0YSwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMCwKLQkweGI3LCAweDg5LCAweDIyLCAweDVmLCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODksIDB4YTgsIDB4NGIsIDB4YWMsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHhhNSwgMHg4MiwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4OSwgMHgwMCwgMHhiZSwKLQkweDgzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg4OSwgMHhhMiwgMHg0MCwgMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLAotCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjMywgMHg4OSwgMHg1MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDgsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHgwNSwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4OSwgMHgyMiwgMHg1NCwKLQkweDgxLCAweDdjLCAweDAwLCAweDAwLCAweGNiLCAweDg5LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsIDB4NjksIDB4ZGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg5LCAweDBmLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGQ2LCAweDg5LCAweDk5LCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODksIDB4OWIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDg5LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1OCwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyNiwgMHgwNSwgMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZTksIDB4ODksIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MDAsIDB4NmYsCi0JMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDliLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweDIyLCAweDU5LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlNiwgMHg4OSwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYywgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGMwLCAweDk1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODksIDB4MjIsIDB4NWQsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGYyLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4N2YsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4YzUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY3LCAweDg5LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjksIDB4ODksIDB4NDMsIDB4NWYsIDB4N2YsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4YmYsCi0JMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDdmLCAweDkzLCAweDAxLCAweDAwLCAweDc1LCAweDk4LCAweDAwLCAweGJmLAotCTB4YzUsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNiwgMHg4YSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDk1LCAweDIyLCAweDAyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NSwgMHgxYSwgMHgwMiwKLQkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDExLCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBlLCAweDhhLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHg5NSwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4NmMsIDB4OTUsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGEsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWQsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAotCTB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2ZCwgMHg4YSwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4YSwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDhhLCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAotCTB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MzksIDB4OGEsIDB4MDUsIDB4YzIsIDB4MjQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDFjLCAweGYwLCAweDE4LCAweDMwLCAweDAxLCAweDAwLAotCTB4NTEsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4YSwgMHhhMCwgMHg0OCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDFhLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDIsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNmLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQzLCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDEwLAotCTB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDhhLCAweGE4LCAweDA5LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4YSwgMHgyMiwgMHg0MSwKLQkweDBkLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAotCTB4NTksIDB4OGEsIDB4YTAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OGEsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHg4MywgMHg0MSwKLQkweDE3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4OGEsIDB4MDAsIDB4NDEsIDB4MWIsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OGEsIDB4MjMsIDB4NDAsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDhhLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg4YSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDhhLCAweGEwLCAweGFhLAotCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg5NCwgMHgyMCwgMHgwNywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCi0JMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4YSwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDc2LCAweDhhLCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4YSwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdiLCAweDhhLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwKLQkweDc3LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDhhLCAweDIyLCAweDQ5LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwKLQkweDc3LCAweDdkLCAweDAxLCAweDAwLCAweDdiLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDJmLCAweDU1LAotCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHhlNSwgMHg1MSwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDhhLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4OGEsIDB4YTIsIDB4OTMsIDB4NTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg1NywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHhhYiwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDIyLCAweDUxLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4YTIsIDB4NDEsIDB4MWQsIDB4NTMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweDQxLCAweGI1LCAweDUzLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLCAweDYwLCAweDE2LCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKLQkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OGEsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZDEsIDB4OGQsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGUsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmYsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg4ZiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGUxLCAweDhmLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGYyLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDhmLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmQsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4ZiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDczLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4OTEsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDhiLCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGJlLCAweDkwLCAweDAwLCAweDQ5LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBiLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNywgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MSwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDkyLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMSwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2QsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMSwgMHg5MiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ1LCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ1LCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVmLCAweDkyLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE4LCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg5MiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjIsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDk0LCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NCwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk0LCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5MSwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDk0LCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZiLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDk0LCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YjYsIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGJhLCAweDhkLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg4ZCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2EsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjYiwgMHg4ZCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmUsIDB4NGIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4YSwgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDA2LCAweDA3LCAweDQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MmUsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0YiwKLQkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk1LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MzQsCi0JMHg5NywgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlNCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAxLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZSwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4ZCwgMHgyMCwgMHg0YiwKLQkweDk0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjksIDB4OGQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhlLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OGUsIDB4YTIsIDB4NGMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHg4ZSwgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwZCwgMHg4ZSwgMHgyMCwgMHhmMCwKLQkweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDU2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZSwgMHhhOCwgMHg0NCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxYiwgMHg4ZSwgMHhhOCwgMHg0NCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MzgsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4ZSwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDI2LCAweDhlLCAweDIyLCAweDQ0LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMCwgMHhhMiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MmEsIDB4OGUsIDB4MjMsIDB4MGIsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDJmLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQxLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzYSwgMHg4ZSwgMHhhMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MmYsIDB4NDksIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDQxLCAweDhlLCAweGEyLCAweDQ2LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDQ1LCAweDhlLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDE0LCAweGY0LCAweDAxLCAweDAwLAotCTB4NzAsIDB4OGUsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OGUsIDB4MjIsIDB4MGEsCi0JMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLAotCTB4NTcsIDB4OGUsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg4ZSwgMHgwMCwgMHg0MSwgMHgxNSwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDcwLCAweDhlLCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAotCTB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDhlLCAweGEwLCAweDQzLAotCTB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2YywgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NTEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGUsIDB4MjIsIDB4NDUsCi0JMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4ZSwgMHgyMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDhlLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHg5OSwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4ZSwgMHhhMiwgMHg0NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4OTYsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDhlLCAweGEyLCAweDA4LAotCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc4LCAweDhlLCAweDIyLCAweDRhLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNlLCAweDQzLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4NjAsIDB4MDAsCi0JMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHg4NSwgMHgxMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDhlLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4YjQsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDJkLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgyMCwgMHg5NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI1LCAweDk3LCAweDAwLCAweDk0LCAweGU1LCAweDMxLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDhlLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OGUsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4ZSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQzLAotCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGUsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweGUxLCAweDhlLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGUsIDB4MjAsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4ZSwgMHgwMCwgMHgwMiwKLQkweGYwLCAweGIxLCAweDAwLCAweDAwLCAweGU2LCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OGUsIDB4NjgsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4ZSwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDExLCAweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgxZiwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYiwgMHg4ZSwgMHhhOCwgMHgxMywKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIyLCAweDhmLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OGYsIDB4YTIsIDB4MDIsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGY4LCAweDhlLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4ZSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNiwgMHg4ZiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDUsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg4ZiwgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGYsIDB4MjIsIDB4MDYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDhmLCAweGEyLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDhmLCAweDBkLAotCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDhlLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4MDIsCi0JMHgzNiwgMHhkMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHg4ZiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwKLQkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MjYsIDB4OGYsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4ZiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmIsIDB4OTUsIDB4MDAsIDB4MTAsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MzksIDB4OGYsIDB4OTAsIDB4ZjIsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LAotCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg4ZiwgMHgyMiwgMHg0OSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4MTgsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NGMsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ5LCAweDhmLCAweDIyLCAweDQwLCAweGFmLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDFlLAotCTB4OTQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZiwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDViLCAweDhmLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4NTIsIDB4OGYsIDB4MDAsIDB4MDAsIDB4OTIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGYsIDB4NDMsIDB4NDgsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDhmLCAweDIyLCAweDQ4LAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4ZiwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OGYsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweGY4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU0LCAweDhmLCAweGEyLCAweDQxLAotCTB4M2IsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDViLCAweDhmLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OGYsIDB4MjIsIDB4NWYsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDhhLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg2NSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NjIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4ZiwgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZiLCAweDhmLCAweDg1LCAweGNhLAotCTB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwgMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHg3MiwgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcyLCAweDhmLCAweGEyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwgMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGYsIDB4OTAsIDB4NGMsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdhLCAweDhmLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4ODEsIDB4OGYsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4ZiwgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDkyLCAweDhmLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDk0LCAweDhmLCAweDQzLCAweDQ4LAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5YSwgMHg4ZiwgMHgyOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZiwgMHgyMiwgMHg0OCwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDFiLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWIsIDB4NDcsCi0JMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhmLCAweGEwLCAweDQzLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4YWEsIDB4OGYsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDQsCi0JMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDFmLCAweGYwLAotCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4YSwgMHgyMywgMHg0MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0NywKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDk3LCAweDAwLCAweDQ3LCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OGUsIDB4YTIsIDB4NDAsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiOCwgMHg4ZiwgMHgyMiwgMHg0NywgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDdlLCAweDhlLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDI3LCAweDkwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsIDB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLAotCTB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4ZiwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OGYsIDB4YTAsIDB4NDMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDAwLCAweDIwLCAweDQ3LCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4ZiwgMHgyMiwgMHg0NywKLQkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4OGYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGQ3LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ3LCAweDhmLCAweDQyLCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZiwgMHgyMywgMHg0MSwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGI5LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGEsIDB4MDAsIDB4NDgsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweGVkLCAweDhmLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTMsIDB4NDAsCi0JMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDhmLCAweDIwLCAweDRjLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDYsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmNSwgMHg5NywgMHgwMCwgMHg0NiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCi0JMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ3LAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDkwLCAweDkwLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwKLQkweGU1LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MjMsIDB4OTAsIDB4ODAsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTAsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MzIsIDB4OTAsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMywgMHg5MCwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM1LCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsCi0JMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTAsIDB4YTAsIDB4MTQsCi0JMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTAsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDZlLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDNiLCAweDk4LCAweDAwLCAweDMwLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OTAsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg5MCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDYxLCAweDkwLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsCi0JMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAotCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OTAsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MCwgMHgyMiwgMHg0MywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNlLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZmLCAweDkwLCAweDI0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHg5MCwgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwKLQkweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3NiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTAsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsCi0JMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDkwLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5MCwgMHg0MywgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDgxLCAweDkwLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MWIsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4NywgMHg5MCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDkwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE1LCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgyMiwgMHg0YSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE1LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDIyLCAweDA2LAotCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTAsIDB4YTAsIDB4NDMsCi0JMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk0LCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OTAsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgxYSwgMHg1ZCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGFlLCAweDkwLCAweGEwLCAweDQzLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweGIxLCAweDkwLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NCwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDkwLCAweDQyLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4YTMsIDB4OGYsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGFkLCAweDhmLCAweDAwLCAweGYwLAotCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg5MCwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGM0LCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTAsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg0NiwgMHg5NywgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGNkLCAweDkwLCAweDAwLCAweDUwLAotCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAotCTB4ZTYsIDB4OTAsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlZiwgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGVkLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGY1LCAweDkwLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmIsIDB4OTAsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDIsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQyLAotCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDkxLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5NywgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDkxLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDE5LCAweDk4LCAweDAwLCAweDQzLAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIwLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDkxLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDg3LCAweDkxLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDNiLCAweDkxLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlMywgMHg4OSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHg5MSwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4MTUsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTEsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDkxLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKLQkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDVjLCAweDkxLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDAwLAotCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5MSwgMHgyMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5MSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDk0LCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5MSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4N2YsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDg1LCAweDkxLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0YSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKLQkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNiLCAweDkxLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlkLCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM0LCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4YjIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDkxLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTEsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJiLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZSwgMHg5MSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHg5MSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGM4LCAweDkxLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTEsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDcsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MDMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5MSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlMSwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDkxLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTEsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDhkLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDkxLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDkyLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHg5MiwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA5LCAweDkyLCAweGE4LCAweDAwLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCi0JMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDhlLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhkYywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTIsIDB4YTgsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDkyLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDg3LCAweDQyLAotCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNkLCAweDkyLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4MDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNkLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHhmMiwKLQkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQzLCAweDkyLCAweGEyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg0NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNlLCAweDkyLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MiwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDkyLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5MiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjUsIDB4OTIsIDB4NDcsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5MiwgMHgyMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDFmLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTIsIDB4YTgsIDB4NDAsCi0JMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDc2LCAweDkyLCAweDQ3LCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdlLCAweDkyLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NiwgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTIsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDkyLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTIsIDB4MzAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg5OSwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFhLCAweDkyLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4YTgsIDB4OTIsIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCi0JMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJiLCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGI0LCAweDkyLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHgyMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTIsIDB4YTIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg5NiwgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5MiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQ3LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAotCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5MywgMHgyNiwgMHg0NywKLQkweDk3LCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4OTMsIDB4MjMsIDB4NGIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsCi0JMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwgMHgwNCwgMHg1MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4OTMsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTMsIDB4ODQsIDB4NDgsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDkzLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA5LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDkzLCAweDIyLCAweDA2LCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDkzLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MWMsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDkzLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTMsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MywgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzEsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTMsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDkzLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsCi0JMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTMsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTMsIDB4MjAsIDB4MTYsCi0JMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg5MywgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg5MywgMHgwMCwgMHgwYSwKLQkweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NWIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5MywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDczLCAweDkzLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5MywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDc0LCAweDkzLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDkzLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4NSwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4OGIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MywgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDkzLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTMsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4OWQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCi0JMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGExLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAotCTB4YTcsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDkzLCAweDIyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTMsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTMsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDJkLCAweDAwLAotCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg5MSwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MSwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGJiLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjksIDB4OTMsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4Y2IsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg5MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDkzLCAweDIzLCAweDBkLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMywgMHg5MywgMHgyMiwgMHg0MCwKLQkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLAotCTB4ZGIsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDksIDB4OTMsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OTMsIDB4MDAsIDB4NWUsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MywgMHgyMiwgMHg0MCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZWIsIDB4OTMsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGYyLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDExLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAxLCAweDk0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NCwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDE1LCAweDk0LCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5OCwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg5NCwgMHgyMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJiLCAweDkzLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTQsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDI3LCAweDk0LCAweDI2LCAweDQ3LAotCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHg5NCwgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKLQkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDI4LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4MDYsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5NywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDk0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5NCwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDgsIDB4OTQsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg5NCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHg1OSwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NCwgMHhhMiwgMHgxNiwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDk0LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwKLQkweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTMsIDB4YTIsIDB4MTYsCi0JMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0NSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmUsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAotCTB4NzMsIDB4OTQsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YjYsIDB4OTYsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJmLCAweDk1LCAweDAwLCAweDQ3LCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDhjLCAweDk0LCAweGEyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4NzQsIDB4OTYsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTUsIDB4MDAsIDB4MTAsIDB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDljLCAweDk0LCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg5NCwgMHgzNywgMHg1YywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4OTksIDB4OTQsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDE3LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMywgMHg5NCwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NGEsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLCAweGMxLCAweDk0LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwKLQkweDEwLCAweGMxLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTQsIDB4MDAsIDB4NTAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgyMywgMHhkMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGQxLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDk1LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLAotCTB4ZTEsIDB4OTQsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweDhkLCAweDk4LCAweDAwLCAweDQ3LAotCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5OCwgMHgwMCwgMHhmMCwKLQkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTUsIDB4YTIsIDB4NGMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGZiLCAweDk0LCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMywgMHg5NCwgMHgyMiwgMHhmMCwKLQkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDQ4LCAweDk1LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDk1LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGY3LCAweDk0LCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDA4LCAweDk1LCAweDIzLCAweGYwLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OTUsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0YSwgMHg5NSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NSwgMHhhMiwgMHg0MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHgxZiwgMHgxMiwgMHg4NCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDRhLCAweDk1LCAweGEwLCAweDAxLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMywgMHg5NSwgMHhhMiwgMHg0NiwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDIyLCAweGYwLCAweDE0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MTEsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTUsIDB4MDMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTUsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxOSwgMHg5NSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg5NSwgMHgyMCwgMHg5MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHg5NSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MjcsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI0LCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJlLCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MmIsIDB4OTUsIDB4YTIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTUsIDB4YTIsIDB4ZjIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMCwgMHg5MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI5LCAweDk1LCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLAotCTB4MzIsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweGEyLCAweGYwLAotCTB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5NSwgMHhhMiwgMHhmMiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MmIsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjAsIDB4OTEsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDk1LCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDNmLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg5NSwgMHgyMiwgMHgwYSwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4NDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ3LCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0ZCwgMHg5NSwgMHgwMCwgMHg0MywgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0MSwKLQkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQyLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NGQsIDB4OTUsIDB4MDAsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NGMsCi0JMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDk1LCAweGEyLCAweGYzLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmEsIDB4NDEsCi0JMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLCAweDViLCAweDk1LCAweDIyLCAweDVhLAotCTB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg1YywgMHg5NSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweGYwLAotCTB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTUsIDB4MjIsIDB4NDAsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NSwgMHhhMiwgMHg0YiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDY3LCAweDk1LCAweDIyLCAweGYwLCAweDE4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsCi0JMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZiLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDk2LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDk2LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTUsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3NywgMHg5NSwgMHhhMSwgMHhhZCwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg5NSwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRhLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg1ZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAotCTB4NDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NGEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg1OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDRlLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDg2LCAweDAwLCAweDQwLCAweDVkLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTUsIDB4NDQsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhjMiwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDk1LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4OTUsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsCi0JMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5OCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgzMSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDkxLCAweDk1LCAweDIyLCAweDEyLCAweDQ4LCAweDdmLCAweDAwLCAweDAwLAotCTB4NTEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NSwgMHgwYiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDliLCAweDk1LCAweDIyLCAweDUwLAotCTB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1MSwgMHg5NywgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5OSwgMHgwMCwgMHgxMiwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCi0JMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgxMCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDNmLCAweDQzLCAweDExLCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LAotCTB4OGEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTUsIDB4MzAsIDB4YTEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhNCwgMHg5NSwgMHgyMiwgMHg0NSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweDQ1LCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHg4NSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDUxLCAweDk3LCAweDAwLCAweGYyLAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFmLCAweDk1LCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiMywgMHg5NSwgMHhhOCwgMHgwNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDRiLCAweDk2LCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDk1LCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJkLCAweDk1LCAweDAwLCAweDQyLAotCTB4NjgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiZCwgMHg5NSwgMHgzMSwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKLQkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGJmLCAweDk1LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTUsIDB4MjgsIDB4YjEsCi0JMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5NSwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTUsIDB4YTgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGNiLCAweDk1LCAweDI4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAotCTB4YzcsIDB4OTUsIDB4OWYsIDB4YmEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyNCwgMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDk1LCAweDMyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OTUsIDB4MjIsIDB4ZjgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCi0JMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDkyLCAweDQ4LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHg5NSwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgyMiwgMHg0YywKLQkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OTUsIDB4YTgsIDB4YjEsCi0JMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDkwLCAweGQwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHg0OSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDgyLCAweDhjLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwgMHhlOCwgMHg5NSwgMHgyMiwgMHgxYSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDAwLCAweDM0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LCAweDgyLCAweDhjLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwgMHhmMSwgMHg5NSwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDAwLCAweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5NSwgMHg4MywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MmQsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTEsIDB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZjUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHhlNSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MjIsIDB4MTEsIDB4MWUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg5NiwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweGEwLCAweGY0LCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHgyMywgMHhkMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg0MywgMHhkMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDk2LCAweDMwLCAweDQ3LAotCTB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDEzLCAweDk2LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDk2LCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweGRiLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTYsIDB4YTIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDMxLCAweDk2LCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAwLCAweDAwLCAweDFlLCAweDk2LCAweDMwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHg5NiwgMHhhMiwgMHgwYiwKLQkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjEsIDB4YTIsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwgMHg0NCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZSwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAotCTB4OTIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0MywKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAotCTB4MzUsIDB4OTYsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5NiwgMHgyMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDNkLCAweDk2LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTYsIDB4MzEsIDB4NWYsIDB4OTcsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHg0YiwgMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDZhLCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDk2LCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5NiwgMHhhMiwgMHgzYiwKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OTYsIDB4MTgsIDB4NGEsCi0JMHg0NCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDIyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4MGYsIDB4OTgsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg1ZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NiwgMHgwMCwgMHgwNSwKLQkweDRhLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweGE3LCAweDVlLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OSwgMHg5NiwgMHgyMiwgMHg0NSwKLQkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZDksIDB4OTksIDB4MDAsIDB4NGEsIDB4NDQsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCi0JMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NjEsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTYsIDB4YTIsIDB4M2IsCi0JMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGU2LCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJmLCAweDRmLCAweDk1LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4NGIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGUzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJkLCAweDQ0LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHgxMCwKLQkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NGMsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk2LCAweDIyLCAweDQxLCAweDAzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDA2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NiwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDQsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5NiwgMHgyNiwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YWQsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlmLCAweDk2LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4YWMsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTYsIDB4YTIsIDB4NDEsCi0JMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4OTYsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTYsIDB4MjIsIDB4NDAsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg1YywKLQkweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDAwLCAweDQxLCAweDNiLCAweGQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWYsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiYiwgMHg5NiwgMHg4YywgMHhmOCwgMHg4ZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LCAweDE0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZSwgMHhmOCwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJhLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg5NiwgMHgyMCwgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIzLCAweDk2LCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NiwgMHhhMiwgMHhhNSwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDEsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhkNiwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDgwLCAweDAwLAotCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4OWYsIDB4NDEsCi0JMHg4NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAwLCAweGEwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDAwLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTcsIDB4NTIsIDB4NDMsIDB4ODEsIDB4NjAsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MSwKLQkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA1LCAweDk3LCAweDllLCAweGJiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBhLCAweDk3LCAweGEyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNhLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDk3LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTcsIDB4YTIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgxZSwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDEzLCAweDk3LCAweGEyLCAweDQ4LCAweDk5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4OGEsCi0JMHhmMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDNlLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGY0LAotCTB4MjgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHg5NywgMHgyMCwgMHhmMCwgMHgzZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjMsCi0JMHgzYSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDYsIDB4MTQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTcsIDB4MjIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgyYSwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHg0YywgMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTcsIDB4NDUsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDk3LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQyLCAweDk3LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTcsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTcsIDB4NDYsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDllLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHg5NywgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NywgMHgyMiwgMHhmMywKLQkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU3LCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5NywgMHg4MiwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDVmLCAweDk3LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OTcsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDMsCi0JMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDk3LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDZkLCAweDk3LCAweDAwLCAweDA2LAotCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg5NywgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4NzQsIDB4OTcsIDB4MjYsIDB4NDcsIDB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NywgMHgyMywgMHg0YiwgMHgwNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NywgMHhhMiwgMHgwMiwgMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg5NywgMHhhMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDdhLCAweDk3LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTcsIDB4MDAsIDB4MDIsIDB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4OTcsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDgyLCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3ZSwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjQsIDB4OTcsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTcsIDB4MjIsIDB4MTUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDlkLCAweDk3LCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OGIsIDB4OTcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NWMsIDB4OTcsIDB4MjAsIDB4MTUsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NywgMHhhOCwgMHg0NiwKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDk3LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4NWMsIDB4OTcsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OTcsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGE3LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MSwKLQkweGEzLCAweDQxLCAweDAxLCAweDAwLCAweGFiLCAweDk3LCAweDAwLCAweDQxLCAweDI3LCAweGQwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwKLQkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NywgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTcsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NywgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDk3LCAweGEyLCAweDA2LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGNkLCAweDk3LCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTcsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweGEwLCAweDQ4LAotCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywKLQkweGZjLCAweGM5LCAweDAxLCAweDAwLCAweDNiLCAweDk4LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OTcsIDB4MjIsIDB4NGEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5NywgMHg2NCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAwLCAweDAwLCAweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGYsIDB4OTcsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LAotCTB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhmMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLCAweDk1LCAweDYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGZkLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5OCwgMHgyMiwgMHg0MywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsCi0JMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDRjLAotCTB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg5OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDk4LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDk4LCAweDkwLCAweDRjLAotCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDFkLCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmEsIDB4OTgsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg5OCwgMHhhMiwgMHg0MCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDk4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHg5OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywKLQkweDE5LCAweDdjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKLQkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDM4LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5OCwgMHgyMCwgMHg0YywKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NDEsIDB4OTgsIDB4MjAsIDB4ZjIsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LAotCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OTgsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDQ5LCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZlLCAweGYzLCAweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLAotCTB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwKLQkweDgyLCAweGVjLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTIsIDB4OTgsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDRiLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDViLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDZiLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDdhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5OCwgMHg0MywgMHg1NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5OCwgMHhhMiwgMHg1NywKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDQwLCAweDgxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3NiwgMHg5OCwgMHhhOCwgMHg0YSwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMCwKLQkweDdiLCAweDk4LCAweDIyLCAweDVmLCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzksIDB4OTgsIDB4YTgsIDB4NGIsIDB4YWMsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHhhNSwgMHg4MiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZSwKLQkweDgzLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTgsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5OCwgMHgyMiwgMHg1NywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDliLCAweDIwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAxLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwKLQkweDhhLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDhiLCAweGVjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDk4LCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDJmLCAweGFiLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTgsIDB4MDAsIDB4MTQsIDB4ODIsIDB4NTAsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5YywgMHg5OCwgMHgyMiwgMHhmMiwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDhjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4OWMsIDB4OTgsIDB4OWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweDMwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5NCwgMHgwMCwgMHgyZCwgMHhmMiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5OCwgMHgyMywgMHhmMCwKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQyLCAweDg4LCAweGY0LCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MjAsIDB4NTAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTgsIDB4YTMsIDB4OTIsCi0JMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5OCwgMHgwMCwgMHg0NCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBhLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA5LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDgsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwNywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNywKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTgsIDB4MDAsIDB4NDQsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwZiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBlLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBkLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5OCwgMHgyMywgMHg0MCwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OTgsIDB4YTIsIDB4ZjAsIDB4MzgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ2LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweGQ1LCAweDk4LCAweDIzLCAweDQxLAotCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsIDB4MjQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MiwgMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwKLQkweGRmLCAweDk4LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTgsIDB4YTMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCi0JMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWUsIDB4OTgsIDB4OWYsIDB4NDEsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDk4LCAweDAwLCAweDQxLCAweDI0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGY4LCAweDk4LCAweGEyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0MSwKLQkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGY4LCAweDNlLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsIDB4ZTAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHhhMCwgMHgxZiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDk5LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxNSwgMHg5OSwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5OSwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDBhLCAweDk5LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTksIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDFmLCAweDQ0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxOCwgMHg5OSwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTksIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDljLCAweDAwLCAweDJkLCAweGYwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5OSwgMHhhMiwgMHgxMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHhmMiwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk5LCAweGEwLCAweGYyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyZCwgMHgxMiwgMHg4NiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDk5LCAweGEzLCAweDQxLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweDJmLCAweDk5LCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5OSwgMHg5ZiwgMHg0MiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTksIDB4YTMsIDB4NDIsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTksIDB4MDAsIDB4MGEsCi0JMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDk5LCAweGEwLCAweDE3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDE3LAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4MjIsIDB4NDAsIDB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwgMHgwYywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDNjLCAweDk5LCAweGEwLCAweDQxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHg0OCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTksIDB4MjIsIDB4NDksCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGFhLCAweDk3LCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTksIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHgwOCwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDU3LCAweDk5LCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4YWEsIDB4OTcsIDB4MDAsIDB4NDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5OSwgMHg0MywgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDk5LCAweDI4LCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTksIDB4OTksIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg5NywgMHgxYiwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5OSwgMHgyMiwgMHg1ZiwKLQkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLAotCTB4NWUsIDB4OTksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHg5OSwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLCAweDA2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDY1LCAweDk5LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDZlLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgyZSwgMHgwOCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDc0LCAweDk5LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NywgMHgyZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MmUsIDB4MDUsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI4LCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDg2LCAweDk5LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2ZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDY4LCAweGIxLCAweDAxLCAweDAwLCAweDhhLCAweDk5LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MzMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDI5LCAweDliLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLCAweDI1LCAweDliLCAweDAxLCAweDAwLAotCTB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LCAweDNjLCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsCi0JMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1OSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhhNywgMHg5OSwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhhNywgMHg5OSwgMHhhMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE4LCAweDk5LCAweDAwLCAweDQwLCAweDFkLCAweGIzLCAweDAwLCAweDAwLAotCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsCi0JMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwgMHgzYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDQwLAotCTB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4YSwKLQkweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsIDB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDQzLCAweDAwLCAweDRiLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDEwLAotCTB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MjAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgyZSwgMHgwYSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI3LCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJiLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5OSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDkwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTksIDB4ODUsIDB4NDEsCi0JMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGNlLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAotCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4OWMsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDgwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDljLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLAotCTB4OTIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg4MCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKLQkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDk5LCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTksIDB4ODAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5OSwgMHgyMCwgMHg0ZiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OTksIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5OSwgMHgyMCwgMHg0NywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZWUsIDB4OTksIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4YTUsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5OSwgMHhhMiwgMHhhNSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGY3LCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZjLCAweDk5LCAweDFmLCAweDkxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAzLCAweDAwLCAweDQwLCAweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDA2LCAweDA1LCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDcsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OWEsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5YSwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDlhLCAweDAwLCAweDA1LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMSwgMHg5YSwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgzMywgMHg5YSwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCi0JMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGIxLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MjIsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg5YSwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDAwLCAweGMyLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHg5YSwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAotCTB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDlmLCAweDQxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI5LCAweDlmLCAweDIyLCAweDQwLAotCTB4N2IsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweGM2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5ZiwgMHgwMCwgMHg0ZCwgMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGMyLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OWYsIDB4YTIsIDB4NDEsIDB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4YzksIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGM5LCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDksIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywKLQkweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsCi0JMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDlhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OWEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JfSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYTVhNGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2JyY3Z1Y29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgR0JfUkNWVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKLSNkZWZpbmUgR0JfUkNWVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTI6MTUiCi0KLXN0YXRpYyB1MzIgR0JSY3ZVQ29kZUxlbiA9IDUxMjsKLQotc3RhdGljIHU4IEdCUmN2VUNvZGVbMjU2MF0gPQotewotMHg0NywgMHg3NSwgMHgwMSwgMHgwMCwgMHgwNCwgMHhhMCwgMHgxMywgMHgwMSwgMHgwMCwgMHgxYywgMHhiNywgMHg1YiwgMHgwOSwKLTB4MzAsIDB4MDAsIDB4YjYsIDB4NWYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4M2IsCi0weDc4LCAweDNhLCAweDAwLCAweDFjLCAweGEyLCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDcwLAotMHgxOCwgMHhiMywgMHg3YiwgMHhhOSwgMHhhYSwgMHgxZSwgMHhiNCwgMHg3YiwgMHgwMSwgMHgwYywgMHgxYywgMHhiNSwgMHg3YiwKLTB4MWQsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjQsIDB4MDgsIDB4MGMsIDB4MzEsIDB4NTYsIDB4NzAsIDB4MDQsCi0weDBjLCAweDMxLCAweDU2LCAweDgwLCAweDA0LCAweDBjLCAweDMxLCAweDRhLCAweDkwLCAweDA0LCAweDBjLCAweDMxLCAweDQ2LAotMHhhMCwgMHgwMCwgMHgwOSwgMHgyNSwgMHg1MSwgMHhjMCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0ZSwgMHhiMCwgMHgwMCwgMHhlOSwKLTB4MjQsIDB4NTEsIDB4YzAsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4MDAsIDB4MWMsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsCi0weDFjLCAweDA2LCAweDU2LCAweDQyLCAweGQ0LCAweDA4LCAweDA3LCAweDlkLCAweDAwLCAweDAwLCAweDFjLCAweDdiLCAweGI3LAotMHgwMiwgMHgwMCwgMHgxMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHgwNiwgMHg1NiwgMHg1YSwgMHhjMCwgMHgwNCwKLTB4YTAsIDB4MzAsIDB4NmMsIDB4MDMsIDB4MDAsIDB4YWMsIDB4MzAsIDB4NmQsIDB4MDMsIDB4MDAsIDB4Y2QsIDB4MDMsIDB4M2EsCi0weDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweDYwLCAweDhlLCAweDQxLCAweDU0LCAweDA5LCAweDI5LAotMHgyNSwgMHg2ZCwgMHgwMywgMHgwMCwgMHg4MCwgMHg4ZSwgMHg0MSwgMHg1NCwgMHgwOSwgMHg4YywgMHgzMCwgMHg4ZCwgMHgwMCwKLTB4MDQsIDB4NDcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsCi0weDYwLCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDYxLCAweGMwLCAweDA0LCAweDQ3LCAweDFjLCAweDZkLCAweDAzLCAweDAwLAotMHg2YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg0ZCwgMHgzNCwgMHgwMiwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwKLTB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YzgsIDB4ODMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ODAsCi0weDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDA0LCAweGEwLCAweDBmLCAweDQwLCAweDU0LAotMHgwOSwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHg3YiwgMHhmYiwgMHhmMiwgMHgwMCwgMHgxYywgMHhjYywgMHgzMywKLTB4MGQsIDB4MDAsIDB4MWMsIDB4YjQsIDB4N2IsIDB4ZmQsIDB4MDMsIDB4MWMsIDB4ODAsIDB4MGUsIDB4NDAsIDB4NTQsIDB4MDksCi0weGUwLCAweGZiLCAweDA1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweGIzLCAweDBmLCAweDQxLAotMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhlOCwgMHg3MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlOCwgMHg4MCwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4YTAsIDB4OTMsIDB4MDAsIDB4NjEsIDB4NzYsIDB4YTEsIDB4YzMsIDB4MDQsIDB4YzAsIDB4OGQsIDB4NDEsIDB4NTQsCi0weDA5LCAweGUwLCAweDdiLCAweDAwLCAweGMwLCAweDFmLCAweGEwLCAweGZkLCAweGMxLCAweDAxLCAweDAwLCAweGNjLCAweDMzLAotMHgwNSwgMHgwMCwgMHgxYywgMHhkNCwgMHgwMywgMHgwMCwgMHgzYywgMHgxYywgMHhkNCwgMHhkMywgMHgxYiwgMHgwMCwgMHgxYywKLTB4YzAsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MTMsIDB4MDQsIDB4OGUsIDB4OGUsIDB4NDIsCi0weDU0LCAweDA5LCAweDViLCAweDgwLCAweDc2LCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLAotMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwKLTB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4N2YsIDB4MWMsIDB4YTAsIDB4MDEsIDB4OWMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGEwLCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDAzLCAweDFjLAotMHhmNSwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHhmNiwgMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwKLTB4NTQsIDB4MDksIDB4YjMsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsCi0weDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLCAweDFjLCAweGI1LCAweDAyLCAweDAyLCAweDAwLAotMHgxYywgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwKLTB4NDIsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MWMsCi0weGEwLCAweDNkLCAweGE2LCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweGE4LCAweDExLCAweDA0LCAweGQ0LCAweGQzLCAweDUyLAotMHgwMCwgMHgxYywgMHhiNSwgMHgzZSwgMHhhZSwgMHgwMSwgMHgwMCwgMHgyMCwgMHhmYiwgMHhmZCwgMHhmZiwgMHgxZiwgMHg4MCwKLTB4MmMsIDB4ODQsIDB4MDMsIDB4MDAsIDB4YjksIDB4M2EsIDB4OWEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsCi0weDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGRiLCAweDgzLCAweDE2LCAweDAwLCAweDFjLCAweGM3LCAweDFkLAotMHgxZCwgMHhjMSwgMHgwNCwgMHhiOSwgMHgzYiwgMHg4OSwgMHhjMSwgMHgwNCwgMHg4YiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywKLTB4NmIsIDB4MmMsIDB4MzEsIDB4YzEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MTEsIDB4MDAsIDB4Y2IsIDB4MmMsIDB4NzUsCi0weGMxLCAweDA0LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDU0LAotMHhkMCwgMHgwMiwgMHgwMCwgMHgxYywgMHg0OSwgMHgyNSwgMHhhZCwgMHgwMSwgMHgwMCwgMHhhYiwgMHgyYywgMHg3ZCwgMHhjMSwKLTB4MDQsIDB4YTcsIDB4MWQsIDB4NmQsIDB4MDMsIDB4MDAsIDB4Y2MsIDB4MzMsIDB4MDksIDB4MDAsIDB4MWMsIDB4ZWIsIDB4MmQsCi0weDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LAotMHhhZSwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhkNCwgMHgwNywgMHhmYywKLTB4MDMsIDB4MWMsIDB4OTksIDB4M2EsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YmIsIDB4MzgsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDM4LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweDA0LCAweGRiLCAweDNiLCAweDdlLCAweDAwLAotMHgxYywgMHhjNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHgwYSwgMHgwNiwgMHgxYywgMHgyNywgMHgxZCwKLTB4MDEsIDB4MDAsIDB4MWMsIDB4YjMsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksCi0weDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLAotMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHhhMCwKLTB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsCi0weDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLAotMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwKLTB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsCi0weDU0LCAweDA5LCAweDAwLCAweDNkLCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDU0LCAweDEyLCAweDAwLCAweGNiLAotMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwKLTB4MTAsIDB4YTYsIDB4N2IsIDB4ZjEsIDB4MDUsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4YzIsIDB4MDQsIDB4YTYsIDB4N2IsCi0weGYxLCAweDA1LCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDA0LCAweGNiLCAweDJmLCAweDA1LCAweDAwLCAweDFjLAotMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNywgMHgxYywgMHhlMSwgMHgwMiwgMHgwMCwgMHg1MywgMHgwZiwgMHg0MiwKLTB4NTQsIDB4MDksIDB4YzAsIDB4ODMsIDB4ZjEsIDB4MzIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4MDQsIDB4NDYsCi0weDdhLCAweGRhLCAweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweGMwLCAweDgzLCAweGYxLCAweDMyLAotMHgxYywgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHg0MCwgMHhmYSwgMHgxNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwKLTB4YTAsIDB4MDIsIDB4MDQsIDB4NDYsIDB4N2EsIDB4ZGEsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksCi0weGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLAotMHg1NCwgMHgwOSwgMHhiMywgMHg3YiwgMHgwMSwgMHhjMCwgMHgxZiwgMHg3NCwgMHgwZSwgMHg0MCwgMHg1NCwgMHgwOSwgMHhjMCwKLTB4MDMsIDB4OWMsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDIsCi0weDA0LCAweDAwLCAweDAwLCAweGM0LCAweDEyLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGQ0LCAweGQzLAotMHgyYiwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHg4MCwgMHg3NiwgMHg5NSwgMHgxMywgMHgwNCwKLTB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4YTYsIDB4N2IsIDB4YTksIDB4MDMsIDB4MTAsIDB4YzcsIDB4OWMsIDB4MDAsCi0weDAwLCAweDFjLCAweDgwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDA0LCAweDAwLAotMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHhhYiwgMHgyZCwgMHhmMSwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHhjZCwgMHhjMiwKLTB4MDQsIDB4OGIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjksIDB4MjUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsCi0weGE5LCAweDAzLCAweDEwLCAweGNiLCAweDJmLCAweDA5LCAweDAwLCAweDFjLCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLAotMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg0NiwgMHg3YSwgMHhkYSwKLTB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDI4LCAweDAzLCAweDA0LCAweDQ2LCAweDdhLCAweGRhLCAweDA1LCAweDFjLCAweGI1LCAweDBmLCAweDQxLCAweDU0LAotMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3MywgMHhlYywgMHg0MiwgMHgwMywgMHgwNCwgMHg2MCwgMHgyYywKLTB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4YzcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsCi0weDAwLCAweDAwLCAweDQwLCAweDEzLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGMwLCAweGQ3LCAweDIyLAotMHgwMCwgMHgxYywgMHg3NSwgMHg1NiwgMHg5NiwgMHgxMywgMHgwNCwgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHhlNywKLTB4MWMsIDB4NWQsIDB4MDMsIDB4MDQsIDB4ZTcsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsIDB4YTksIDB4MDMsCi0weDEwLCAweDgwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDA0LCAweDAwLCAweDAwLAotMHg2YywgMHhjMywgMHgwNCwgMHhiOSwgMHg3YiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywgMHgwNCwKLTB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsCi0weDAzLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLAotMHgyZiwgMHgwZCwgMHgwNCwgMHgxYywgMHhjNywgMHg5ZiwgMHg4MCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywKLTB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDAsIDB4MWQsIDB4MDAsIDB4MDAsCi0weGEwLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGEwLCAweDEzLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLAotMHhjMCwgMHgxZCwgMHhmMCwgMHhkMywgMHgwOCwgMHgyNywgMHg5ZCwgMHhmOCwgMHgwMywgMHgwMCwgMHhhMCwgMHhlZSwgMHg1NiwKLTB4ZDQsIDB4MDAsIDB4ZmIsIDB4NzUsIDB4MTksIDB4MTQsIDB4MDQsIDB4MjAsIDB4N2IsIDB4MDYsIDB4MDAsIDB4MWMsIDB4YzAsCi0weDFjLCAweDJjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweGQzLCAweDA4LCAweDAwLCAweDAwLCAweDEwLCAweGY0LAotMHgwMCwgMHhjMCwgMHhlZiwgMHhmMiwgMHgwMCwgMHgxYywgMHgyMCwgMHgyNSwgMHg2YywgMHgxNCwgMHgwNCwgMHg2MCwgMHhiNywKLTB4ZTYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTUsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsCi0weGNjLCAweDMzLCAweDA1LCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGM1LCAweDA0LCAweDYwLCAweGI3LCAweDFlLAotMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjNCwgMHgwNCwgMHhjMCwKLTB4MWQsIDB4YWMsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzQsIDB4MDQsIDB4MDcsIDB4OWQsIDB4MDAsIDB4MDAsCi0weDFjLCAweDFiLCAweDc0LCAweDBkLCAweGY0LCAweDA0LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGUwLCAweDdiLAotMHgwMCwgMHhmYywgMHgxZiwgMHgzOSwgMHg3ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHhiMSwgMHhjMywgMHgwNCwKLTB4YTYsIDB4N2IsIDB4YzEsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzQsIDB4MDQsIDB4ZTAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDFjLCAweDAwLCAweDAwLCAweGI4LCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLAotMHgyZiwgMHgwMSwgMHgxMCwgMHgxZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMywKLTB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTgsIDB4MWQsIDB4YzcsIDB4OWYsCi0weDAwLCAweDBiLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLAotMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwKLTB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4YTAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTAsCi0weGVlLCAweGI2LCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDA5LCAweDA0LAotMHgxYywgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhjYywgMHhiMywKLTB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzUsIDB4MDQsCi0weDAwLCAweDAwLCAweDg4LCAweDM0LCAweDA1LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE1LAotMHgwMiwgMHgxYywgMHg0NywgMHg5ZCwgMHg2NCwgMHhjNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0NCwgMHgwMCwgMHg4MCwKLTB4MWQsIDB4OGMsIDB4NTQsIDB4MDQsIDB4ODcsIDB4MWQsIDB4OWQsIDB4MDQsIDB4MDAsIDB4Y2UsIDB4NzYsIDB4MDEsIDB4MDAsCi0weDFjLCAweGVmLCAweDc2LCAweGFkLCAweGM0LCAweDA0LCAweGE0LCAweDc3LCAweDlkLCAweDI0LCAweDA5LCAweGU0LCAweDc2LAotMHgwMSwgMHgwMCwgMHgxYywgMHhjNCwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhOCwgMHg1NCwgMHgwNCwKLTB4ZDcsIDB4NzYsIDB4MDEsIDB4NTAsIDB4MTgsIDB4ZjYsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDMwLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGNjLCAweDMwLCAweDUxLCAweGM1LCAweDA0LCAweGViLAotMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHg1OSwgMHgwMSwgMHgwMCwKLTB4MWMsIDB4ZjUsIDB4NzcsIDB4MzksIDB4YzUsIDB4MDQsIDB4ZTAsIDB4MzAsIDB4ZWMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGMsCi0weGMwLCAweDA0LCAweDAwLCAweDIwLCAweDRjLCAweDA0LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweDAwLAotMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhjNSwKLTB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTksIDB4MDIsIDB4MWMsIDB4ZWIsCi0weDJkLCAweGM1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDBkLCAweDAyLAotMHgxYywgMHhlYiwgMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywKLTB4MTEsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ODAsIDB4MWMsCi0weGFlLCAweDc3LCAweDUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGQzLCAweDhiLCAweDAwLAotMHhmYywgMHgxZiwgMHg2MCwgMHg3YSwgMHgzYywgMHgwMCwgMHgxYywgMHg2MCwgMHg0YywgMHhkMCwgMHgwNCwgMHgwMCwgMHhjMCwKLTB4MmYsIDB4MjAsIDB4MDUsIDB4MWYsIDB4ZTAsIDB4MzAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjUsIDB4YzAsIDB4MDQsCi0weDAwLCAweGI1LCAweDViLCAweGMxLCAweDA0LCAweDA0LCAweDY5LCAweDI2LCAweDAxLCAweDAwLCAweDFjLCAweDZhLCAweDJiLAotMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgxZCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOSwgMHgyNSwgMHg1MSwgMHgwNSwgMHgwMCwKLTB4ZWUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWYsIDB4NzcsIDB4MTEsIDB4MDUsIDB4MDAsIDB4YjQsIDB4NWYsIDB4MDEsCi0weDQwLCAweDE4LCAweDA3LCAweDlkLCAweDU0LCAweDU1LCAweDA0LCAweGI3LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDk2LAotMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg0NywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzMywgMHgwMSwgMHg2MCwKLTB4MTgsIDB4YTQsIDB4MmYsIDB4MDEsIDB4NjAsIDB4MTgsIDB4NjQsIDB4NzcsIDB4MDEsIDB4NjAsIDB4MTgsIDB4MjQsIDB4NzcsCi0weDAxLCAweDYwLCAweDE4LCAweDQ0LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDY0LCAweDg4LCAweDAzLCAweDAwLCAweDFjLAotMHhhNCwgMHgzZiwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzYiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1MywgMHg3NywgMHgwMSwKLTB4MDAsIDB4MWMsIDB4ZDMsIDB4Y2YsIDB4M2IsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NGYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4ZDMsCi0weGNmLCAweDAwLCAweDAwLCAweDFmLCAweGRhLCAweGNmLCAweDBiLCAweDAwLCAweDFjLCAweGQ1LCAweDU3LCAweDBmLCAweDAwLAotMHgxYywgMHhkMywgMHhkMywgMHgzNywgMHgwMCwgMHgxYywgMHhkNCwgMHg1MywgMHgwZiwgMHgwMCwgMHgxYywgMHhlMCwgMHgyOSwKLTB4MDAsIDB4MDAsIDB4MWMsIDB4ZjUsIDB4ZDUsIDB4YzAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NTUsIDB4MDQsCi0weDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLAotMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhmNSwgMHg1NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4YzQsIDB4NTUsIDB4MDQsIDB4NzcsIDB4NTYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsIDB4MDEsIDB4MDAsCi0weDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDE4LCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGNiLCAweDJmLAotMHgwMSwgMHgxOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwKLTB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MjAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsCi0weDAwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDI4LCAweDEwLCAweDg5LCAweDI1LCAweDZkLCAweGMyLCAweDA0LCAweDAwLAotMHgwMCwgMHgwNCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywKLTB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDA0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LAotMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHg0MCwgMHgxYywgMHg2OCwgMHhjMCwgMHgwNCwgMHg0MCwgMHgxYywgMHg5OCwKLTB4YzAsIDB4MDQsIDB4YTcsIDB4NzcsIDB4NmQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MDQsIDB4MjcsCi0weDFkLCAweGVkLCAweGMwLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTllMDA3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4NTAgKzAsMCBAQAotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMToyMiIKLSNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPQotewotCTB4MDAwMDQwMDAsIDB4MDAwMTAwMDAsCi19OwotCi1zdGF0aWMgdTMyIE9TZWN0aW9uU3RhcnRbXSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KLXN0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Ci17Ci0JewotCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKLQkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCi0JMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAotCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCi0JMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAotCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAotCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCi0JMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCi0JMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKLQkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCi0JMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKLQkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCi0JMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAotCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCi0JMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAotCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKLQkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAotCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKLQkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCi0JMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAotCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAotCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAotCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAotCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAotCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKLQkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLQkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAotCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKLQkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCi0JMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCi0JMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKLQkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAotCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKLQkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKLQkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAotCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAotCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKLQkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKLQkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAotCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAotCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCi0JMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKLQkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKLQkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAotCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKLQkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAotCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAotCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAotCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCi0JMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAotCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCi0JMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAotCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAotCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAotCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKLQkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAotCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAotCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCi0JMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAotCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKLQkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAotCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKLQkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCi0JMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCi0JMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKLQkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCi0JMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKLQkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAotCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCi0JMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCi0JMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAotCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCi0JMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKLQkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAotCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAotCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKLQkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAotCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCi0JMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAotCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAotCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKLQkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCi0JMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCi0JMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCi0JMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCi0JMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAotCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCi0JMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAotCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKLQkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCi0JMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKLQkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKLQkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCi0JMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAotCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKLQkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAotCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAotCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKLQkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCi0JMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKLQkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JfSwKLQl7Ci0JMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCi0JMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAotCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDA1LCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDk5LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDJmLCAweDgxLCAweDAxLCAweDAwLAotCTB4YTIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKLQkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAotCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg5MSwgMHg2ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MCwgMHhhMiwgMHg0MiwKLQkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAotCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGQzLCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCi0JMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZGEsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4MDAsIDB4MjAsCi0JMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAotCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUyLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCi0JMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4MiwgMHgxZSwgMHhjNiwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweDIyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4ZjIsIDB4ODAsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4MjIsIDB4NDgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGYyLCAweDgwLCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4YzYsIDB4OGYsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHgxZSwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywKLQkweDgxLCAweGYwLCAweDAxLCAweDAwLCAweGY2LCAweDgwLCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4NDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MiwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDc1LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDgxLCAweDAwLCAweDRkLAotCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MSwgMHgwMCwgMHg0YywKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDAzLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDliLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4OWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDlmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDlmLCAweDgxLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg4MiwgMHgwMCwgMHhiYiwgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MiwgMHgwMCwgMHhjYSwKLQkweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAotCTB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHgwMCwgMHhiYiwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAotCTB4NGMsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDRkLCAweGIzLCAweDAwLCAweDAwLCAweDcwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg4MSwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4MSwgMHgyMiwgMHg0MSwKLQkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDJhLCAweDgxLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MmMsIDB4ODEsIDB4MWYsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQxLAotCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDJmLCAweDljLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAotCTB4MzksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmYsIDB4OTksIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHgzMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwKLQkweGUxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4NjMsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYwLCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTIsIDB4NDAsCi0JMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDIyLCAweDVjLCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4YzQsIDB4ODAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDE3LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDYwLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQxLCAweDc2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDgzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDY1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjIsIDB4NDAsCi0JMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg2MCwgMHg0MCwgMHg5NSwgMHg4MywgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweDIyLCAweDQwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ODUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHhhMiwgMHg0ZSwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4MSwgMHgzNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg4MSwgMHgyMiwgMHg0MSwgMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwKLQkweDk1LCAweGNiLCAweDAxLCAweDAwLCAweDY4LCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODEsIDB4YTIsIDB4NDIsCi0JMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDc3LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwgMHg2OSwgMHg5NywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjAsIDB4NDMsCi0JMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg4MCwgMHhjYSwgMHg2NywgMHgzMywgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDIyLCAweDQwLCAweDY1LCAweDZmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQ4LAotCTB4ZGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4MSwgMHgyMiwgMHg1YiwKLQkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCi0JMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAotCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAotCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4MSwgMHg5ZiwgMHg4NSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAotCTB4ZGQsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODEsIDB4YTIsIDB4NGYsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGJkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMyLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAotCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNkLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDIyLCAweDQzLAotCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhkNSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGVjLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKLQkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGY2LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4ODIsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4MjIsIDB4NDQsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDRhLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4MiwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODIsIDB4MjIsIDB4NGUsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDgyLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4MiwgMHgyMiwgMHg0MywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDMzLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAotCTB4MzMsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDgyLCAweGEyLCAweDU0LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4MiwgMHhhMiwgMHgwNiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAotCTB4NzgsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MjIsIDB4NDgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MiwgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDg1LCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDg2LCAweDgyLCAweDIyLCAweDU0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDdlLCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMCwgMHg0MywKLQkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDgsCi0JMHhkYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHhhMiwgMHg0MCwKLQkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4OGEsIDB4ODIsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4OWIsIDB4ODIsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDgyLCAweDU2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweGEyLCAweDQxLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MiwgMHg5MSwgMHg4MSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YTksIDB4ODIsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhYiwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDgyLCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDgyLCAweGEwLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDgyLCAweDAwLCAweDUwLAotCTB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4MiwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDFlLCAweGE0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4Y2YsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkMiwgMHg4MiwgMHhhMSwgMHhhZCwgMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweGFiLAotCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4YTIsIDB4NDAsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4MiwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OCwgMHgwMCwgMHg1ZiwKLQkweDFmLCAweGI0LCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweDVlLCAweDU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4N2QsIDB4ODgsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODIsIDB4MjIsIDB4NTQsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5MiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MiwgMHhhMiwgMHg1ZiwKLQkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGU3LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODIsIDB4MjIsIDB4NWMsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGU4LCAweDgyLCAweGE4LCAweGIxLAotCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlYSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweDM0LCAweDg1LCAweDE3LCAweDVmLCAweDFmLCAweGI0LCAweDAwLCAweDAwLAotCTB4ZmIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlZiwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGY3LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAotCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDgzLCAweDAwLCAweDM0LCAweDEzLCAweDg0LCAweDAwLCAweDAwLAotCTB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZiLCAweDgyLCAweDMzLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGUsIDB4NWEsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAotCTB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4YTIsIDB4NDgsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MywgMHgwMiwgMHhlNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA2LCAweDgzLCAweDgzLCAweGU1LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDhlLCAweDgyLCAweDAwLCAweDQyLAotCTB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODIsIDB4MDAsIDB4NDIsIDB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg4MywgMHgyMiwgMHg0NiwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MywgMHhhMiwgMHg0MSwKLQkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODMsIDB4MjIsIDB4NDQsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODMsIDB4YTIsIDB4NDEsCi0JMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGFjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDExLCAweDgzLCAweDIyLCAweDVhLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHg4MywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwKLQkweDExLCAweGM5LCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLAotCTB4MTcsIDB4ODMsIDB4MjIsIDB4NDQsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODMsIDB4NDIsIDB4YTUsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MywgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDM4LCAweDgzLCAweDFhLCAweDQwLCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhkZiwgMHg4NywgMHgyMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg4NywgMHgyMiwgMHg0MCwKLQkweDY1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MjIsIDB4NDgsCi0JMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLAotCTB4MzMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4YzYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4ODMsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZSwgMHg1YSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsCi0JMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MywgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDRkLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAotCTB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0ZCwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsCi0JMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ODMsIDB4YTgsIDB4YTEsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDE3LCAweDgzLCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweDAwLCAweDZmLAotCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHg4MywgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDVjLCAweDgzLCAweGE2LCAweDQyLAotCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OTYsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4MDAsIDB4NTgsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHgxNywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRhLCAweGMxLCAweDAwLCAweDE3LCAweDk2LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MywgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY4LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDZkLCAweDgzLCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODMsIDB4MjIsIDB4NTUsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NzMsIDB4ODMsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LAotCTB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3ZiwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg4MywgMHgyMiwgMHg0MSwKLQkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4N2IsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODMsIDB4YTIsIDB4ZjgsCi0JMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg4MywgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdjLCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDhkLCAweDgzLCAweDIyLCAweDU4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MywgMHhhMiwgMHhmMywKLQkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLAotCTB4OGQsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4MywgMHg3NywgMHg0MSwKLQkweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDkzLCAweDgzLCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDkzLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQzLCAweDgzLCAweDc3LCAweDQxLAotCTB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MywgMHgyMiwgMHg0MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDliLCAweDgzLCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODMsIDB4MjIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweGExLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDgzLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQ1LAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4NTUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NiwgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGE5LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTAsCi0JMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4Y2UsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsCi0JMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDgzLCAweDIzLCAweGEyLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwKLQkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDg0LCAweDAwLCAweDVjLAotCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg4MywgMHgyMiwgMHg1ZiwKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDgzLCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHg3MiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAotCTB4ZjUsIDB4ODMsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MDAsIDB4ZjIsCi0JMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4MjIsIDB4NGEsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4NCwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg0LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLCAweGYxLCAweDg0LCAweGEyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDUsIDB4ODQsIDB4NjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsCi0JMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEwLCAweGExLCAweDA5LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDg0LCAweDIyLCAweGExLAotCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4NCwgMHhhMywgMHg5MiwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDg0LCAweDIyLCAweDVjLCAweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDAwLAotCTB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhMiwgMHg0MywKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzQsIDB4ODQsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4NCwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDg0LCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzMsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM0LCAweDg0LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLAotCTB4MzAsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LAotCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4M2EsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQxLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4NCwgMHhhMiwgMHg1ZiwKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDg0LCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NCwgMHgzNSwgMHgwMSwKLQkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NTQsIDB4ODQsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4MjIsIDB4NGQsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDg0LCAweGE3LCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWUsIDB4ODQsIDB4YTcsIDB4NDAsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHg4NCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDg0LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLCAweDM5LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgxNiwgMHgzMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDcwLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweDgyLCAweDQxLAotCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NzksIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NCwgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCi0JMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDAwLCAweDQ1LAotCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDE0LAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGI3LCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAotCTB4YTcsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MCwgMHgyYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGFkLCAweDg0LCAweDIzLCAweDAxLAotCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg4NCwgMHgyMiwgMHgxYiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MTMsCi0JMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM2LCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjMywgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQwLAotCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4Y2QsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKLQkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDg0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NCwgMHgyMiwgMHgxMywKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg1LCAweDIyLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NSwgMHgyMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg1LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODUsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDg1LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDg1LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDg1LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRiLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHg4NSwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDJmLCAweDg1LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDQxLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NSwgMHg2NCwgMHg0NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDNhLCAweDg1LCAweGE4LCAweDFiLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4NzQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwNSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDA5LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODUsIDB4MDEsIDB4ZmIsCi0JMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHgyMiwgMHg0MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDg1LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODUsIDB4MjIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDUxLCAweDg1LCAweGE2LCAweDVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAotCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjksIDB4ODUsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NSwgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4NSwgMHgyMSwgMHgwNCwKLQkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDZlLCAweDg1LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODUsIDB4MDAsIDB4NDMsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGExLCAweDg4LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRlLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4NSwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1MywKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwKLQkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjksIDB4ODksIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODUsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg4NSwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDY5LCAweDg5LCAweDAwLCAweDUzLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDU0LAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg4NSwgMHhhMiwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4YTAsIDB4OTEsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg2OSwgMHg4OSwgMHgwMCwgMHg1NCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweGEwLCAweDQyLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMywgMHg0MCwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDksIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAotCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4ODUsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NSwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGJiLCAweDg1LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGIzLCAweDg1LCAweDIyLCAweDU1LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MywKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGJiLCAweDg1LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODUsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYywgMHg4NSwgMHg0NiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDg1LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAotCTB4YjEsIDB4ODUsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCi0JMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGUwLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDg1LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDA5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDg1LCAweDY2LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4NDEsCi0JMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEzLCAweDg2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDI0LCAweGM4LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTEsIDB4ODYsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGVhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ5LAotCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHg4NiwgMHgyNiwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDg2LCAweDAwLCAweDQxLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NSwgMHhhMiwgMHg0NCwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDg2LCAweGE4LCAweDQyLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGY2LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MGIsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MTcsCi0JMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDkyLAotCTB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjQsIDB4ODYsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDc4LCAweDk4LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5ZiwKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDIzLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJkLCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MmQsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODYsIDB4YTMsIDB4MDcsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDg2LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODcsIDB4MjIsIDB4MGYsCi0JMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQzLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODYsIDB4MjIsIDB4MDcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAotCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMiwKLQkweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NzksIDB4ODYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCi0JMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDY2LCAweDg2LCAweGEzLCAweDA3LAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ODYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDczLCAweDg2LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDczLCAweDg2LCAweDIyLCAweDQyLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk5LCAweDg2LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDg2LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODYsIDB4YTMsIDB4MTIsCi0JMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZiwgMHg4NiwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAotCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg5OSwgMHgwMCwgMHgwOCwgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKLQkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg3LCAweDg2LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODYsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4NiwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDg2LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDg2LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGI4LCAweDg2LCAweGEyLCAweDBkLAotCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGEzLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ODYsIDB4YTIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweDIzLCAweDA3LAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHgwZCwKLQkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhNCwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4YzUsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKLQkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODYsIDB4MjIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGQxLCAweDg2LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKLQkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweGQ4LCAweDg2LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGRiLCAweDg2LCAweGEwLCAweDQxLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMCwgMHg0MywKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGUwLCAweDg2LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4ODYsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDg2LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDIyLCAweDQ4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4NiwgMHg5MCwgMHg0OCwKLQkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAotCTB4NDIsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg5OSwgMHgwMCwgMHgxNywKLQkweDk4LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE3LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODcsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCi0JMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4ODcsIDB4YTAsIDB4MDcsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4MGQsIDB4ODcsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDA3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4NywgMHgyMiwgMHg0MCwgMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LAotCTB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUyLAotCTB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDAwLCAweDA4LCAweDk4LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDc5LCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4NGQsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTksIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4NywgMHhhMiwgMHgwZCwKLQkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDY1LCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweGEyLCAweDVmLAotCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NywgMHgyMywgMHgwNywKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc1LCAweDg3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MzksIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDgzLCAweDg3LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAotCTB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4OGMsIDB4ODcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDk4LCAweDAwLCAweDQxLCAweDNmLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDg3LCAweDIyLCAweDUwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywKLQkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGEzLCAweDg3LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4OWUsIDB4ODcsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDBlLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4NywgMHhhMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4ODcsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhZCwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDkxLCAweDZjLCAweDAwLCAweDAwLCAweGMxLCAweDg3LCAweDIyLCAweDQ4LAotCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4NywgMHgxZiwgMHhmMCwKLQkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDg3LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDgsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDg3LCAweDIyLCAweDBhLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQyLCAweDg3LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHgyMCwgMHg0YywKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4MGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQ5LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweGRiLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODcsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODMsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4NywgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDEsIDB4ODMsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsIDB4MjIsIDB4NDYsCi0JMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywgMHhhMiwgMHg0MSwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYywgMHg4NywgMHgyMiwgMHg0MCwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGUwLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODcsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDk0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjUsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyZSwgMHg5NCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2UsIDB4OTQsIDB4MjIsIDB4MDIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDFhLCAweDAyLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4OCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDJmLCAweDgzLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBiLCAweDg4LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGMsIDB4NTUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDEyLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQzLCAweDg4LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODgsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4OCwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDQzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODgsIDB4YTAsIDB4NDgsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDg4LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4OCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4OCwgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg0ZiwgMHg4OCwgMHgyMiwgMHg0MSwgMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLAotCTB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4OCwgMHg4MywgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLAotCTB4NWEsIDB4ODgsIDB4MjMsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODgsIDB4YTIsIDB4NDEsCi0JMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCi0JMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDZjLCAweDg4LCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGMsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDZjLCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjgsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDJhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBjLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODgsIDB4MjIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NzksIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCi0JMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDgzLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODEsIDB4ODgsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4NCwgMHg4OCwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MywgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4OCwgMHgyMiwgMHg0MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAotCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4OCwgMHgyMiwgMHg1MCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCi0JMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0OCwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDU3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg4OCwgMHgwMCwgMHg0YiwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGUxLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDhjLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4YywgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4YywgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5NSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjEsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzZSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4ZSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhkLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5MywgMHg4ZCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQyLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDhlLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NGIsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTgsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYyLAotCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCi0JMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0ZSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDJhLCAweDAwLCAweDAwLCAweDQ3LCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODksIDB4MDAsIDB4NGIsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDhmLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRkLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDUsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgxLCAweDkwLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDgxLCAweDkwLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OTAsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQxLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJiLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5MSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFiLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDhlLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NWEsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVhLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDk2LCAweDkyLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJmLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTIsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YmYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MiwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjcsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4OTAsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg5MywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDkzLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NTMsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE2LCAweDkzLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4OTMsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ3LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDY3LCAweDkzLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjcsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg4YiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODUsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkOSwgMHg4YiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4MWEsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA1LCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LAotCTB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4MDYsCi0JMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCi0JMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAotCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OGMsIDB4MjAsIDB4NGIsCi0JMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDhjLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4OGMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MWIsIDB4OGMsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OGMsIDB4YTIsIDB4NGMsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4YywgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDhjLCAweDIwLCAweGYwLCAweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDMsCi0JMHg4MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJiLCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDhjLCAweDIyLCAweDQzLAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg4YywgMHgyMiwgMHg0NCwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4YywgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OGMsIDB4YTIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU5LCAweDhjLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDJmLCAweDQ5LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NTksIDB4OGMsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDVjLCAweDhjLCAweGEyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGMsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDhjLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4YywgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc2LCAweDhjLCAweDIyLCAweDBhLCAweDE2LCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4YywgMHhhMCwgMHg0MywKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NmIsIDB4OGMsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4MGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwOCwgMHgxMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4NDEsCi0JMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDgzLCAweDhjLCAweGEwLCAweDQzLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDYsIDB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDJiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDhjLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDlkLCAweDhjLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHg4YywgMHgyMiwgMHg0NSwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsCi0JMHg4YywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYzLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4YywgMHgyMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGI5LCAweDhjLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4YywgMHhhMiwgMHg0NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVhLCAweDhjLCAweGEyLCAweDA4LAotCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDk1LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhjLCAweDIyLCAweDRhLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLCAweDhjLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGRjLCAweDhjLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweGUxLCAweDhjLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlNSwgMHg4YywgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDJkLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NywgMHgwMCwgMHg0MCwgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY2LCAweDhjLCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4ZCwgMHg4MiwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGZlLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MGMsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OGQsIDB4YTMsIDB4MDEsCi0JMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDIwLCAweDAyLAotCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg4ZCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4ZCwgMHhhMywgMHgwMSwKLQkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDhkLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsCi0JMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4ZCwgMHhhOCwgMHgxMywKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDUxLCAweDhkLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OGQsIDB4YTIsIDB4MDIsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4ZCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDhkLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGQsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZCwgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJjLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM5LCAweDhkLCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4M2UsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDhkLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OGQsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwKLQkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWMsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGMsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4YywgMHgwMCwgMHgwMiwKLQkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDhkLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDU3LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OGQsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg4ZCwgMHgyOCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZlLCAweDhkLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NzUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4ZCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDcyLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAotCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OCwKLQkweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OGQsIDB4YTIsIDB4NDEsCi0JMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4ZCwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZCwgMHgyMiwgMHg1ZiwKLQkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDg3LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YTcsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4OGQsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDhiLCAweDhkLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTEsIDB4OGQsIDB4ODUsIDB4Y2EsCi0JMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5OCwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGI0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OGQsIDB4YTIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZCwgMHg5MCwgMHg0YywKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OGQsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZCwgMHg0NSwgMHg0OCwKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OGQsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGQsIDB4MjIsIDB4NDgsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgxZCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDFkLCAweDQ3LAotCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDg3LCAweDk4LCAweDAwLCAweDQ4LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGE3LCAweDg4LCAweDIzLCAweDQxLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwKLQkweGU2LCAweDZkLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweGJlLCAweDA2LCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGE1LCAweDhjLCAweGEyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGRiLCAweDhkLCAweDIyLCAweDQ3LAotCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhNSwgMHg4YywgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NiwKLQkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDVkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsCi0JMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDkzLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlZiwgMHg4ZCwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgyMiwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDksIDB4OGUsIDB4MjIsIDB4NDcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4ZSwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OGUsIDB4NDIsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDIzLCAweDQxLAotCTB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg5OCwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhNywgMHg4OCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDhlLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OGUsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4ZSwgMHgyMCwgMHg0YywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLAotCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCi0JMHg5NiwgMHhjYywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ2LAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0NywgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDQ2LCAweDhlLCAweDkwLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0MCwKLQkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGUsIDB4ODAsIDB4ZjMsCi0JMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDhlLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAotCTB4NjYsIDB4OGUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDhlLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg4ZSwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAotCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKLQkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4ZSwgMHhhMCwgMHgxNCwKLQkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDhlLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZSwgMHhhNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YywgMHg4ZSwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkzLCAweDhlLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDhlLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTksIDB4OGUsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKLQkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCi0JMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZSwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGEwLCAweDhlLCAweDIyLCAweDQzLAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFmLCAweDhlLCAweGE4LCAweDQwLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4ZSwgMHhhMCwgMHg0MywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsCi0JMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5NywgMHg4YywgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDIyLCAweDA2LAotCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsCi0JMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTMsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg4ZSwgMHg0MiwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4YzgsIDB4OGMsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGU3LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg5MywgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVhLCAweDhlLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiZiwgMHg4ZCwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGQsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY3LCAweDhlLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OGUsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyNywgMHg4MywgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg4ZSwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDk2LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhmLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGYsIDB4MDAsIDB4NTAsCi0JMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDhmLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHg4ZiwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MmQsIDB4OGYsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHhmMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDhmLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweGEyLCAweDE2LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OGYsIDB4ODMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OGYsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYxLCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg4ZiwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCi0JMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYywgMHg4ZiwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDg0LCAweDhmLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweGEyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKLQkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDhmLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OGYsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDhmLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg4ZiwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4ZiwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDBiLAotCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDIyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsCi0JMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAotCTB4OTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgxMSwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OGYsIDB4MjMsIDB4MGIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhiZSwgMHg4ZiwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweGU0LCAweGNkLCAweDAxLCAweDAwLAotCTB4YzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLAotCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGYsIDB4MjIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4Y2UsIDB4OGYsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQzLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkYywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKLQkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGYsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGZhLCAweDhmLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4ZiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFmLCAweDkwLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFhLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDkwLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFiLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDkwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNSwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4M2EsIDB4OTAsIDB4MDMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDQzLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0YiwgMHg5MCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjZCwgMHg4YiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDkwLCAweGEyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCi0JMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5MCwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NmQsIDB4OTAsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKLQkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZTYsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MCwgMHhhOCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDkwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg5MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDIyLCAweDQ3LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgyMiwgMHgwMCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweGYyLAotCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjIsIDB4OTAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGIyLCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTEsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGJhLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDUxLCAweDkxLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHg5MCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MCwgMHhhMiwgMHgxNiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkMiwgMHg5MCwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQzLCAweDkwLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNywgMHg5MCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGRjLCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MjcsIDB4ODMsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDc1LCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5MCwgMHhhOCwgMHg0MCwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OTAsIDB4NjUsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGQsIDB4OTEsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4MDAsIDB4NWYsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTAsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHgzMSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAotCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGQsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTksIDB4OTEsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjcsIDB4OTEsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTEsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgzMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAotCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5MSwgMHgzNywgMHg1YywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzcsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDksIDB4OTEsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDkxLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHhhMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywKLQkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAotCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwKLQkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDhhLCAweDkxLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ODgsIDB4OTEsIDB4ODQsIDB4NDgsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLAotCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MSwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDgzLCAweDkxLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MSwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDllLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGE4LCAweDkxLCAweDIyLCAweDQ0LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MSwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjcsIDB4OTEsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5MSwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTEsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YmQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywKLQkweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAotCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MjAsIDB4MTYsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQ5LCAweDkxLCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4ODQsIDB4NDUsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhlNywgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmMCwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDkyLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDUsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTIsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHgxYiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwKLQkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDk4LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHg5MiwgMHgyMywgMHgwZCwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDEzLCAweDkyLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDkyLCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDkyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5MiwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTIsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHg5MiwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5MiwgMHhhMiwgMHgxNiwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDJkLCAweDkyLCAweGEyLCAweGYzLAotCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKLQkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDMxLCAweDkyLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MTEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwKLQkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDNiLCAweDkyLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDkyLCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHg5MiwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgyZCwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDAsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQxLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MiwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OTIsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MiwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDkyLCAweDIyLCAweDQwLCAweDFiLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTIsIDB4YTgsIDB4MTEsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDhhLCAweDkyLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDdlLCAweDkyLCAweDIzLCAweDBkLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MiwgMHgyMiwgMHg0MCwKLQkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4OGEsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDkyLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MiwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAotCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MGMsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YTQsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDkyLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTIsIDB4MjcsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MiwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg5MiwgMHgwMCwgMHg0YSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY5LCAweDk0LCAweDAwLCAweDAwLCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQzLCAweDkyLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGM1LCAweDkyLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YzUsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTIsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDkyLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDkyLCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OTIsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LAotCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDkxLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg5MywgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBiLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDkzLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLAotCTB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4OTMsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg5MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDFmLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDNkLCAweDkzLCAweGEyLCAweDE2LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzksIDB4OTMsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCi0JMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk0LCAweDAwLCAweDEwLAotCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MywgMHhhMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDUyLCAweDkzLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDRhLCAweDkzLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NGYsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcyLCAweDkzLCAweGEyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3NywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAotCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MywgMHg4NSwgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLAotCTB4ODgsIDB4OTMsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsCi0JMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4YTUsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweGYwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGEzLCAweDkzLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5MywgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQ3LAotCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwKLQkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTMsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTQsIDB4YTIsIDB4NGMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYSwgMHg5MywgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGJkLCAweDkzLCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTMsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MywgMHgyMiwgMHhmMCwKLQkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDk0LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDk0LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI5LCAweDkzLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MywgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDkzLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDIzLCAweGYwLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5MywgMHhhMiwgMHhmMCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBlLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MGUsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTMsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDk0LCAweDFmLCAweDEyLAotCTB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTQsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhiYSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY3LCAweDkzLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTMsIDB4MjIsIDB4ZjAsCi0JMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MywgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGU2LCAweDkzLCAweDAzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDkzLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MywgMHgyMiwgMHgwYSwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDkzLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZDksIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGRjLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweGUzLCAweDkzLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTMsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MywgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGVmLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OTMsIDB4YTAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTMsIDB4MjIsIDB4NDMsCi0JMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHhhMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZkLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGVkLCAweDkzLCAweDIwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDksIDB4OTQsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTMsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTEsIDB4OTQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDIsCi0JMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDExLCAweDk0LCAweDAwLCAweDRjLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDMwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NGEsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NCwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDFjLCAweDk0LCAweGEyLCAweGYzLAotCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwKLQkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTQsIDB4MjIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMywgMHg5NCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAotCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsCi0JMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzYiwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAotCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzOSwgMHg5NCwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCi0JMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LAotCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDk0LCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTcsIDB4OTQsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTQsIDB4MTMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAotCTB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwgMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKLQkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODUsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDE1LCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTQsIDB4NjAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhjMiwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk0LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4OTQsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MjIsIDB4MTIsCi0JMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg1ZiwKLQkweDhiLCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4NzksIDB4OTQsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE3LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MTIsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OSwgMHg5NCwgMHgwYiwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLAotCTB4ODYsIDB4OTQsIDB4MjIsIDB4NTAsIDB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDkzLCAweDA0LCAweDAwLCAweDEyLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDEwLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NCwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDkwLCAweDk0LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDk0LCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsCi0JMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDk0LCAweGE4LCAweDA1LAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKLQkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFiLCAweDk0LCAweDAwLCAweDQyLCAweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0MiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKLQkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDk0LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTQsIDB4MjgsIDB4YjEsCi0JMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk1LCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg5NCwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NCwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk0LCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YywKLQkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDExLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsCi0JMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAwLAotCTB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0OSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5NCwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDIyLCAweDRjLCAweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLAotCTB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5NCwgMHhhOCwgMHhiMSwgMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDQ5LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwKLQkweGVhLCAweDk0LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDAwLAotCTB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAotCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5NCwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwMCwKLQkweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NCwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDJkLCAweDAxLAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwKLQkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweDBkLCAweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTUsIDB4MzAsIDB4NDcsIDB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHgxYSwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MWUsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDFmLCAweDk1LCAweDQwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHg5NSwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCi0JMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweDAwLCAweDNiLAotCTB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDJmLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwKLQkweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgyMiwgMHg0NSwKLQkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTUsIDB4MzEsIDB4NWYsCi0JMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCi0JMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4YTIsIDB4M2IsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDQ0LCAweDdmLCAweDAwLCAweDAwLAotCTB4NWMsIDB4OTUsIDB4MTgsIDB4NGEsIDB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDRiLAotCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwKLQkweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDJmLCAweDdlLCAweGQ5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDZhLCAweDk1LCAweDAwLCAweDA1LAotCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA4LCAweDRlLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDcsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5NSwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDk1LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsCi0JMHg0NCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKLQkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NSwgMHhhMiwgMHgzYiwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0YSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg5NSwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLCAweGU2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsCi0JMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5NSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDk1LCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5NSwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKLQkweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDNhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NSwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDgsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgyNiwgMHg0NiwKLQkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLCAweDEyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGMsCi0JMHg0MiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDQxLAotCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDk1LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGRlLCAweDk1LCAweDIyLCAweDQxLAotCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4OTUsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MjIsIDB4NDAsCi0JMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQxLAotCTB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKLQkweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsIDB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTUsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NiwgMHhhMiwgMHhhNSwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDk2LCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLAotCTB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODIsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAotCTB4M2QsIDB4OTYsIDB4OWYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsCi0JMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweGE1LCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLAotCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHg0NCwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKLQkweDk5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDk5LCAweDgwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIxLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1MSwgMHg5NiwgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NiwgMHhhMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5NiwgMHg5YywgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDYwLCAweDk2LCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NiwgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDVmLCAweDk2LCAweGEyLCAweDhhLAotCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKLQkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OTYsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAotCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKLQkweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NiwgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDk1LAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5NiwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4OTUsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDk2LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwKLQkweDBkLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDk2LCAweDYzLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLAotCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhmMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDk3LCAweGYwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjcsIDB4OTYsIDB4MjIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLAotCTB4YzcsIDB4OTYsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OTYsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMyLCAweDk2LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGUxLCAweDk0LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTYsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjYSwgMHg5NiwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk2LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTcsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDk2LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweGY3LCAweDk2LCAweGEyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4OTYsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NiwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZGEsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3MywgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgxNSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjYsIDB4OTYsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTYsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGU3LCAweDk2LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDJmLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgxYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NiwgMHgyMCwgMHgxNSwKLQkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg5NiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NiwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NywgMHgwMCwgMHg0MSwKLQkweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDM2LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgxNCwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4MDYsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhjNCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDI4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjEsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsCi0JMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDIxLCAweDk3LCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTcsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyZiwgMHg5NywgMHhhMiwgMHgwNiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5NywgMHgyMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI2LCAweDk3LCAweGEwLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJkLCAweDQ4LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDJmLCAweDk3LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDk3LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MzksIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NywgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDk3LCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwKLQkweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1MiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLAotCTB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwKLQkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDVkLCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsCi0JMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDk3LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NywgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDc4LCAweDk3LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLAotCTB4NzgsIDB4OTcsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLAotCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4N2QsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MjAsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDhmLCAweDk3LCAweDIyLCAweDVmLCAweDgxLCAweDdjLCAweDAwLCAweDAwLCAweDhjLCAweDk3LCAweGEyLCAweDQwLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk3LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTcsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHg5MiwgMHg5NywgMHhhMiwgMHg1ZiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4OTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDk3LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDAyLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKLQkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGE1LCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTcsIDB4MjAsIDB4NGMsCi0JMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDk3LCAweDIwLCAweGYyLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGI2LCAweDk3LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MzAsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDk3LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKLQkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAotCTB4YzAsIDB4OTcsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwNSwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywKLQkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDhhLCAweGQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGQ5LCAweDk3LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5OCwgMHgwMCwgMHgxNCwKLQkweDgyLCAweDUwLCAweDAxLCAweDAwLCAweGRlLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGUsIDB4OTcsIDB4MjIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NywgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGJlLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjIsIDB4OTcsIDB4MjMsIDB4ZjAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTcsIDB4MjMsIDB4OTIsCi0JMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHg5NywgMHg2OCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweGJkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NywgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGY3LCAweDk3LCAweDIzLCAweDQwLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNywgMHg5NywgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAotCTB4ZjcsIDB4OTcsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZiLCAweDk3LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5OCwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQxLCAweDI0LCAweGVjLCAweDAwLCAweDAwLAotCTB4MGQsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsCi0JMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwgMHgwZCwgMHg5OCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDBmLCAweDk4LCAweGEzLCAweGYwLAotCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEzLCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCi0JMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MiwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDk4LCAweDlmLCAweDQxLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0MSwgMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmMsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwKLQkweDNlLCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDEyLCAweGUwLCAweGVkLCAweDAwLCAweDAwLAotCTB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDM4LCAweDk4LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0YywgMHg5OCwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5OCwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDk4LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTgsIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDk4LCAweDFmLCAweDQ0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0ZiwgMHg5OCwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTgsIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLAotCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk4LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTAsIDB4ZjIsCi0JMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLAotCTB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OTgsIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg2OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAotCTB4NmIsIDB4OTgsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5OCwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDZlLCAweDk4LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTgsIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5OCwgMHgyMiwgMHg0MCwKLQkweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4YTAsIDB4NDEsCi0JMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsCi0JMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4M2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5OCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDk4LCAweDI4LCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTgsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgxZCwgMHg0NiwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDk4LCAweDk4LCAweDIyLCAweDVmLCAweDExLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDk4LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAotCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4YTIsIDB4OTgsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGEyLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDJlLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg5OCwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM5LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKLQkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKLQkweGU0LCAweDk4LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDk4LCAweGEyLCAweDUxLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKLQkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAotCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwKLQkweDU3LCAweGI1LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDYsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsCi0JMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LAotCTB4MjEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5OCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5OCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg5OSwgMHg2YSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5OSwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDk5LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweDExLCAweDk5LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5OSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDk5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAotCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKLQkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCi0JMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAotCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDg3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDM4YzIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZG93bmxvYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4NDggKzAsMCBAQAotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMDozNyIKLSNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPSB7Ci0JMHgwMDAwNDAwMCwgMHgwMDAxMDAwMCwKLX07Ci0KLXN0YXRpYyB1MzIgT1NlY3Rpb25TdGFydFtdID0gewotCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCi19OwotCi1zdGF0aWMgdTggT2FzaXNVQ29kZVsyXVs2NTUzNl0gPQotewotCXsKLQkweDE1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweDk4LCAweDE4LCAweDMxLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTgsCi0JMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDk4LCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDQwLCAweDk4LAotCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHgwMCwgMHgxNCwgMHhiYywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZlLCAweDAwLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLAotCTB4OTksIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGUwLCAweGIzLCAweDAxLCAweDAwLCAweDM5LCAweDAwLCAweDk4LCAweGVlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHgwMCwgMHg4MCwgMHhmMywgMHhkZSwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDgzLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAotCTB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MTgsIDB4ZWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHgwMCwgMHg5NSwgMHhlOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHhlYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZWUsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY3LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGYwLCAweGQ2LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGYwLAotCTB4ZjAsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAyLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGY4LCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MjIsIDB4ZmEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGRlLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGZhLAotCTB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhmYiwKLQkweDdhLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGRjLCAweGIxLCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4OTUsIDB4ZTgsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhjLCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDFmLCAweGZkLAotCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMCwgMHhhMiwgMHhmZiwKLQkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGJiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGZkLCAweDdmLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDlhLCAweDEzLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDI5LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg2NywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweDI1LCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDg4LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0NiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDhkLCAweGYwLCAweDAxLCAweDAwLAotCTB4YzksIDB4MDAsIDB4ODIsIDB4NDEsIDB4ODksIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDA4LCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDk0LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4NCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTYsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAotCTB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODksIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwKLQkweDhhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwKLQkweGVjLCAweDAwLCAweDA4LCAweDQxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDAwLCAweDAwLCAweDk0LAotCTB4MjQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MjQsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHhhMCwgMHg0NCwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4MDAsIDB4MjAsIDB4NDQsCi0JMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLAotCTB4ODksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4YTAsIDB4ZmEsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHgwMCwgMHhhMywgMHg0MiwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4OTAsIDB4NDQsCi0JMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLAotCTB4OGIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDE0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHhmOSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweDk0LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmOSwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDJiLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAxLCAweDlmLCAweDk0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTEsCi0JMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDczLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ3LCAweDAxLCAweDIyLCAweDRiLAotCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKLQkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweGFhLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDIyLCAweGNjLAotCTB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYzLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAotCTB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywKLQkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDg2LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgyLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKLQkweGQ1LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsCi0JMHg3MiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgyOCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwKLQkweGZkLCAweDkzLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDJhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NTUsIDB4NDksIDB4ZmQsIDB4ODMsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsCi0JMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLAotCTB4ODAsIDB4MzAsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAotCTB4YjMsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkyLCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MDEsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MSwKLQkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGJmLCAweGIzLCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGI1LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmZiwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ZmYsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGFhLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4YTIsIDB4NGMsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgyMiwgMHg0MSwKLQkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGUwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDQsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgwMCwgMHg1YiwKLQkweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGE4LCAweDlmLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDAxLCAweDIyLCAweGRlLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiOSwgMHgwMSwgMHhhMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGQxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDAxLCAweDAwLCAweGRlLAotCTB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlNSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMSwgMHg4NCwgMHg0MSwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweGRkLCAweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGE3LCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGJhLAotCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHgwMSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAotCTB4NmIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NGQsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4MDEsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAyLCAweDAwLCAweGM3LCAweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVkLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDIsIDB4YjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMiwgMHhiYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAyLCAweGJkLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDFhLCAweDAyLCAweGJmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDIsIDB4YzgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDIsIDB4Y2EsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMiwgMHhjYiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMiwgMHhjZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI4LCAweDAyLCAweGNlLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyYSwgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGYwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDIsIDB4ZjEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAyLCAweGYyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZjMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhmNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDIsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMiwgMHhmNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNhLCAweDAyLCAweGY3LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMiwgMHhmOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNlLCAweDAyLCAweGY5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ZmEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDAyLCAweGZiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4ZmMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NiwgMHgwMiwgMHhmZCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDIsIDB4ZmUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0YSwgMHgwMiwgMHhmZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY2LCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYzLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDQ5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4NWYsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCi0JMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKLQkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCi0JMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAotCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCi0JMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAotCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg5YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NDIsCi0JMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMiwgMHgyMiwgMHg0NCwKLQkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDk0LCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NTQsCi0JMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDYsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAotCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNiLCAweDAyLCAweDAwLCAweDA1LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCi0JMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGRhLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MjIsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweGMyLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHgwMiwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUyLCAweDAyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCi0JMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhjYywKLQkweDg1LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MSwKLQkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDBhLCAweDAzLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTIsIDB4MDMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MjIsIDB4NGMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMywgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDE3LCAweDAzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDAzLCAweDIyLCAweDU4LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMywgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweGNhLAotCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDUsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHg4MCwgMHhjYSwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCi0JMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHgwMywgMHhhOCwgMHhiMSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDFhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJkLCAweDAzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAzLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHgwMywgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4M2IsIDB4MDMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2QsIDB4MDMsIDB4NTUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAotCTB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYyLCAweDg4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDUzLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MWYsIDB4OTEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDhmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NWEsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDcsCi0JMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHg1YywgMHg4ZiwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg2NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MywgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywgMHg4NiwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLCAweDcwLCAweDAzLCAweDAwLCAweDQxLAotCTB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZiwgMHg0NiwKLQkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMywgMHhhMCwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDk1LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk3LCAweDAzLCAweDIyLCAweDVhLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDkwLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDQ4LCAweDkwLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAzLCAweDIyLCAweDQwLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDhkLCAweGMwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDIyLCAweDVmLCAweDhkLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTcsIDB4MDMsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHg0NywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDlmLCAweDAwLCAweDQ3LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDcsIDB4OGUsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDUwLCAweGIzLCAweDAxLCAweDAwLCAweGJiLCAweDAzLCAweDIwLCAweDE4LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDUwLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDRmLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NGUsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwMywgMHgwMCwgMHg0MiwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM3LCAweDAzLCAweDIyLCAweGE3LAotCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGNhLAotCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMywgMHgyMiwgMHg0MiwKLQkweDc1LCAweDZmLCAweDAwLCAweDAwLCAweGQ4LCAweDAzLCAweDIyLCAweDQxLCAweDc1LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4MDMsIDB4MWUsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDMsIDB4MWYsIDB4Y2EsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweDQyLCAweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDEsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0YywKLQkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweGVjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU0LCAweDk1LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4YTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQzLAotCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweDBiLCAweDA0LCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAotCTB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MDMsIDB4YTIsIDB4NTAsCi0JMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAotCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDQsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDQsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg5NCwgMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LAotCTB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NCwKLQkweGI0LCAweGIzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDI3LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweGMwLCAweDAwLCAweDQwLCAweDJkLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHhjNCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODIsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwNCwgMHg4MCwgMHg5NCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDMxLCAweDA0LCAweDAwLCAweDEyLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0YiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDU2LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg1YiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDY1LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDc1LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg3YSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU5LCAweDA0LCAweDAwLCAweDEyLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDg2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg4LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDlhLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGFhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGFjLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiMCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGJjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJlLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwNCwgMHg4NSwgMHg0MSwKLQkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDg3LCAweDA0LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NjAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweGYwLCAweDRiLCAweDgyLCAweDg5LCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDYwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHhmMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NiwgMHgwNCwgMHg2MCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0YiwgMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweGE2LAotCTB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHhjYSwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGIwLCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDQsIDB4MjIsIDB4NGIsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDA0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNiwgMHgwNCwgMHgyMiwgMHg0YiwKLQkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDQsIDB4YTIsIDB4NDEsCi0JMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0YywKLQkweDg4LCAweDk0LCAweDAwLCAweDAwLCAweGQ2LCAweDA0LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4MDQsIDB4MjIsIDB4MjAsIDB4ODcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHg4MCwgMHg4NiwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMSwgMHgwNCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGU4LCAweDA0LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweGU2LCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwNCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDIwLCAweDg3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjEsIDB4MDQsIDB4YTgsIDB4YjEsIDB4NTIsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDQsIDB4MjIsIDB4NGEsCi0JMHg1MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDA0LCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGYxLCAweDA0LCAweGEyLCAweDQxLAotCTB4OTksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NGYsIDB4NzcsIDB4ZmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHgxZCwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDUsIDB4YTIsIDB4NDAsCi0JMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5ZiwgMHg5YywgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDUwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwNSwgMHg1MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4MDUsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQxLAotCTB4ZTEsIDB4YzEsIDB4MWEsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MWIsIDB4MDAsCi0JMHgxOSwgMHgwNSwgMHgyMiwgMHg1NCwgMHg4MSwgMHg3YywgMHgxYSwgMHgwMCwgMHgxNCwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDFhLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGIzLCAweDY3LCAweGRmLCAweDFiLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MWIsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgxYiwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDA1LCAweDBmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAotCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHgxZiwgMHgwNSwgMHg5OSwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg5LCAweGQwLCAweDAxLCAweDAwLAotCTB4MjEsIDB4MDUsIDB4OWIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg1OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDg2LCAweGY0LCAweDAxLCAweDAwLAotCTB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MjYsIDB4MDUsCi0JMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQ0LCAweGYwLCAweDQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMSwgMHgwMCwgMHgwNywKLQkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDk3LCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4NDUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAotCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAotCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDUwLCAweDA1LCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4N2EsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHgwNSwgMHgyMiwgMHgyMCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDFmLCAweDAwLAotCTB4N2QsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MWUsIDB4MDAsIDB4N2EsIDB4MDUsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgxZiwgMHgwMCwKLQkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDFlLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MWYsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAotCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDA1LCAweDIyLCAweDQ1LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNywgMHgwNSwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGFhLCAweDA1LCAweGEyLCAweDQxLAotCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDUsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4YjEsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDA1LCAweGEyLCAweGZhLAotCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwNSwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwKLQkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGJiLCAweDA1LCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDUsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg2NywgMHg5MywgMHgyMSwgMHgwMCwgMHhkZiwgMHg5ZiwgMHgwMCwgMHg1OCwgMHg2NywgMHg5MywgMHgyMCwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MjEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MjEsIDB4MDAsCi0JMHg1YywgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwKLQkweDhlLCAweGIwLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzksIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhmYywgMHgxNSwgMHgyMCwgMHgyMCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDI0LCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDI1LCAweDAwLAotCTB4Y2UsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MjQsIDB4MDAsIDB4Y2IsIDB4MDUsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgyNSwgMHgwMCwKLQkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDI0LCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MjUsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNSwgMHgyMiwgMHg1MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDRhLCAweGI0LCAweDhiLCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlOSwgMHgwNSwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGVhLCAweDA1LCAweDAwLCAweDUwLCAweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDA2LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDYsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKLQkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAotCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCi0JMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAotCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAotCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDA2LCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDA2LCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAotCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHgwNiwgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDA2LCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDY0LCAweDA2LCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAotCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDYsIDB4YWEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDA2LCAweGEzLCAweDUzLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDA2LCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAotCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKLQkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAotCTB4MmIsIDB4MDYsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4MDYsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg5ZCwgMHgwNiwgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDA2LCAweDIyLCAweDQwLAotCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhhMSwgMHgwNiwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGEzLCAweDA2LCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDYsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjIsIDB4MDYsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0OCwKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YjYsIDB4MDYsIDB4MjIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDYsIDB4MDAsIDB4NTQsCi0JMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDAwLCAweGZlLCAweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweGJhLCAweDA2LCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM0LCAweDA2LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlOSwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDA3LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGQ5LCAweDA2LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4MDYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlYywgMHgwNiwgMHgyMiwgMHg0MCwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGU2LCAweDA2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDA3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDA2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDA2LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweGZhLCAweDA2LCAweDIzLCAweDFhLAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDAyLCAweDA3LCAweDIyLCAweDFhLAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDFhLAotCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDBmLCAweDA3LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDcsIDB4NjAsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDE2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDcsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHgwNywgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MWYsIDB4MDcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDA3LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDJlLCAweDA3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDA3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4MDYsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsCi0JMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNiwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwNywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweGQzLCAweDA2LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDA2LCAweDAwLCAweDBkLAotCTB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDA5LCAweDAwLCAweDAwLCAweGYzLCAweDM4LCAweDg4LCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDIwLCAweDUwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4NDAsIDB4M2YsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MWQsCi0JMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDA3LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDE4LCAweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDA3LCAweGEwLCAweGZjLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MCwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgyZCwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4NDgsIDB4YzEsIDB4MmQsIDB4MDAsIDB4NjQsIDB4MDcsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MmMsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4NSwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKLQkweDNkLCAweGMzLCAweDJkLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDJkLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsCi0JMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDZlLCAweDA3LCAweGEwLCAweDQxLAotCTB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwKLQkweDgxLCAweDg0LCAweDAxLCAweDAwLCAweDcyLCAweDA3LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDE5LCAweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDcsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwKLQkweDMyLCAweGMwLCAweDAxLCAweDAwLCAweDdkLCAweDA3LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDcsIDB4YTAsIDB4MWMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwNywgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODksIDB4MDcsIDB4MjIsIDB4ZjIsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg2LCAweDA3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5MSwgMHgwNywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDcsIDB4MjIsIDB4ZjIsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDA3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4MDcsIDB4OTAsIDB4ZjIsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDcsIDB4MjIsIDB4ZjIsIDB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGE5LCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwNywgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4YjMsIDB4MDcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHhlNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAxLCAweDAwLCAweGU2LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDcsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDA3LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OWYsIDB4MDAsIDB4MWUsCi0JMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHgwNywgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDA3LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGU4LCAweDlmLCAweDAwLCAweDFmLAotCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4MDcsIDB4YTIsIDB4NDEsCi0JMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDA3LCAweDAwLCAweGJjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLAotCX0sCi0JewotCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAotCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAotCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwNSwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZWUsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDgwLCAweGEyLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgxMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDA5LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEyLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyZiwgMHg4MSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDAwLCAweDAwLAotCTB4NmMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsCi0JMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdkLCAweDgwLCAweDIyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OTYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NiwgMHg4MCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDkzLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGQwLCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcyLCAweDAxLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTEsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg1MiwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwKLQkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU2LCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4OTEsIDB4ODEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4YjQsIDB4ODAsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweGJmLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwgMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweGYzLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZDEsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsCi0JMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNiLAotCTB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MCwgMHhhOCwgMHhiMSwKLQkweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZTAsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODAsIDB4MTQsIDB4YzYsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLCAweGMyLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MCwgMHgxZiwgMHg1YywKLQkweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDU4LCAweDgyLCAweDFlLCAweGM2LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI0LCAweDgyLCAweDAwLCAweGNhLAotCTB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NjEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0OCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgwMCwgMHg0ZSwKLQkweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDgsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwKLQkweDliLCAweGIzLCAweDAwLCAweDAwLCAweDdiLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4N2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg5LCAweDgxLCAweDAwLCAweDQwLAotCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk3LCAweDgyLCAweDAwLCAweGJiLCAweGFiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MjUsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0ZCwKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLAotCTB4NDEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4MDAsIDB4NGMsCi0JMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI0LCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDIyLCAweDQyLCAweDhmLCAweDZmLCAweDAwLCAweDAwLAotCTB4MWUsIDB4ODEsIDB4MjIsIDB4NDEsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MWUsIDB4Y2EsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MSwgMHgxZiwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQyLAotCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHg0MSwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZiwgMHg5YiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDMzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGFlLAotCTB4NDcsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsCi0JMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LCAweDY5LCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhhMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDUzLCAweDgxLCAweDAwLCAweGJiLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHg2MCwgMHg0MCwKLQkweDk1LCAweDgzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4NTYsIDB4ODEsIDB4MzYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU5LCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDQxLCAweDQzLCAweDUxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg4MSwgMHhhMiwgMHg0MiwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLCAweDYzLCAweDgxLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwKLQkweDY5LCAweDk3LCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NjgsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MWEsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDQwLAotCTB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg3NywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4MSwgMHgyMiwgMHg1YiwKLQkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCi0JMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAotCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAotCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4MSwgMHg5ZiwgMHg4NSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAotCTB4YzgsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTIsIDB4ODEsIDB4YTIsIDB4NGYsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4YmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGFkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGJhLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAotCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGMzLCAweDgxLCAweDIyLCAweDQzLAotCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGM1LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGQ3LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKLQkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGUxLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjMsIDB4ODEsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MjIsIDB4NDQsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDgyLCAweDIyLCAweDRhLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHg4MSwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGYwLCAweDgxLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4ODEsIDB4MjIsIDB4NGUsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZkLCAweDgxLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MiwgMHgyMiwgMHg0MywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDFlLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAotCTB4MWUsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweGEyLCAweDU0LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg4MiwgMHhhMiwgMHgwNiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MiwKLQkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDYyLCAweDgyLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODIsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODIsIDB4MjIsIDB4NGMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4MiwgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDZmLCAweDgyLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDcxLCAweDgyLCAweDIyLCAweDU4LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODIsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MiwgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweGNhLAotCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDYsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHg4MCwgMHhjYSwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCi0JMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MywgMHg4MiwgMHhhOCwgMHhiMSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDcyLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDc5LCAweDgyLCAweGEyLCAweDQxLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MiwgMHg5MSwgMHg4MiwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODIsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MiwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODIsIDB4OTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDkyLCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OTQsIDB4ODIsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgxNCwgMHgyZiwgMHg0MCwKLQkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAotCTB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk0LCAweDJlLCAweDQzLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLCAweGEzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg0MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLCAweDgxLCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ODIsIDB4YTAsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MiwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDgyLCAweGEyLCAweDQxLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGI1LCAweDgyLCAweDIyLCAweDU4LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHg4MiwgMHhhOCwgMHhiMSwgMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4YjUsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODIsIDB4YTEsIDB4YWQsCi0JMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHhiZSwgMHg4MiwgMHhhMiwgMHg0MCwgMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZiwKLQkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDM2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzAsIDB4ODIsIDB4MjIsIDB4NWUsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTksIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHg4MiwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDgyLCAweGE4LCAweGIxLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjYSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg4MiwgMHhhMiwgMHg1ZiwKLQkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGM5LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZDAsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODIsIDB4MjIsIDB4NWMsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGNhLCAweDgyLCAweGE4LCAweGIxLAotCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweGI5LCAweDg0LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAotCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4MywgMHgwMCwgMHgzNCwKLQkweDEzLCAweDg0LCAweDAwLCAweDAwLCAweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODMsIDB4MDAsIDB4NDMsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweGEyLCAweDQ4LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YWMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg4MiwgMHgyMiwgMHg1YSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUwLCAweDgyLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4YTIsIDB4NDAsCi0JMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgyMiwgMHg0NCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGU1LCAweDgyLCAweDQyLCAweGE1LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU4LCAweDgyLCAweGEyLCAweDQwLAotCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODIsIDB4MWEsIDB4NDAsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MCwgMHhhMiwgMHg0MCwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA5LCAweDg3LCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODcsIDB4MjIsIDB4NDAsIDB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4YTIsIDB4NWIsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwgMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGYzLCAweDgyLCAweDIyLCAweDQ4LCAweDMzLCAweDdkLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweDk5LAotCTB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY2LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhmZCwgMHg4MiwgMHhhMCwgMHhjZSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDBmLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKLQkweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODMsIDB4YTgsIDB4YTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhlOSwgMHg4MiwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MSwKLQkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDAwLCAweDZmLCAweGRiLCAweDkxLCAweDAwLCAweDAwLAotCTB4MGYsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MWEsIDB4NDAsCi0JMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDFhLCAweDgzLCAweGE2LCAweDQyLAotCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxNSwgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWYsIDB4OTQsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODMsIDB4MDAsIDB4NTgsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMywgMHg0YiwKLQkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDI3LCAweDgzLCAweDg1LCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHg4MywgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4ODMsIDB4MDAsIDB4NGIsCi0JMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDQ5LCAweDgzLCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg4MywgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHg4MywgMHhhMiwgMHhmOCwKLQkweDEwLCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAotCTB4NDcsIDB4ODMsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCi0JMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQyLCAweDgzLCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywKLQkweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRmLCAweDgzLCAweDc3LCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDIyLCAweDU4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4MywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDgzLCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDgzLCAweDIyLCAweDQyLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4MywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDViLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4ODMsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NSwgMHg4MywgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDYyLCAweDgzLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2OCwgMHg4MywgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0NSwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmMsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NGIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDkzLCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGI0LCAweDkxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwKLQkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3NywgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGM5LCAweDAxLCAweDAwLCAweDc5LCAweDgzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg0MSwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgyZSwgMHg0NywKLQkweDk3LCAweDkwLCAweDAxLCAweDAwLCAweDhmLCAweDgzLCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAotCTB4OGQsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODMsIDB4MjMsIDB4YTIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDAwLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4ODMsIDB4MDAsIDB4NWMsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDlhLCAweDgzLCAweDIyLCAweDVmLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4OTYsIDB4ODMsIDB4NjIsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDcyLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MGYsIDB4MDAsIDB4ZjYsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg5ZSwgMHg4MywgMHhhMiwgMHhhNiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MywgMHgwMCwgMHhmMiwKLQkweDNhLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDg0LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4MywgMHgyMiwgMHg0YSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFjLCAweDgzLCAweDIyLCAweDQ4LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDNkLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4YWMsIDB4ODMsIDB4YTIsIDB4NDIsIDB4ZTAsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDY5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwgMHhiMiwgMHg4MywgMHgyMiwgMHhhMSwKLQkweDA5LCAweDZjLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ODMsIDB4YTMsIDB4OTIsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweDJhLCAweDg3LCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MjIsIDB4NWMsIDB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg4MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4YmQsIDB4ODMsIDB4YTIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLAotCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM2LCAweDgzLCAweGE4LCAweDU0LAotCTB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODMsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MywgMHgyMiwgMHg0MywKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDksIDB4ODMsIDB4MjgsIDB4NTQsCi0JMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGRiLCAweDgzLCAweDIyLCAweDUwLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgxNywgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MywgMHhhMiwgMHg0MSwKLQkweDk5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxNiwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4ZTksIDB4ODMsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCi0JMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDgzLCAweGEyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODQsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweGVmLCAweDgzLCAweDM1LCAweDAxLCAweDg2LCAweDMwLCAweDAwLCAweDAwLAotCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODMsIDB4MjgsIDB4YjEsCi0JMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MywgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDg0LCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHhhOCwgMHhiMSwKLQkweDEyLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDgzLCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDA3LCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweGFhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgzZSwgMHg0MywgMHgyNywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YTMsIDB4MGIsCi0JMHg4NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MmQsIDB4NDAsIDB4MzksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4NCwgMHhhMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MGYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHgyMywgMHgwMSwKLQkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODQsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5MiwgMHgwMCwgMHg0MywKLQkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDg0LCAweDIyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjUsIDB4ODQsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDI1LCAweGQwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDRjLAotCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHgwMCwgMHg0NSwKLQkweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDMwLCAweDg0LCAweGEzLCAweDEyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzEsIDB4ODQsIDB4NjgsIDB4MWIsIDB4MjgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCi0JMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4NCwgMHgyMiwgMHgxNCwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsCi0JMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4NCwgMHhhMiwgMHgxNCwgMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDQ0LCAweDg0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNmLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MmIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweDIyLCAweDFiLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg4NCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDU0LCAweDg0LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODQsIDB4YTIsIDB4NDAsCi0JMHgyNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDM5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDYwLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQwLAotCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4NjcsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg2ZSwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKLQkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTIsIDB4NWYsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDkxLCAweDAwLCAweDAxLAotCTB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NzYsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDg0LCAweDIyLCAweDEzLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdlLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5MywgMHg4NCwgMHgyMiwgMHg0MiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4OTQsIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4NCwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDlkLCAweDg0LCAweDIyLCAweDIwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODQsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDNhLAotCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTcsIDB4ODQsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LAotCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NGIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGIyLCAweDg0LCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGExLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGJlLCAweDg0LCAweDY0LCAweDQ3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODQsIDB4YTgsIDB4MWIsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHg3NCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGUwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODQsIDB4MDEsIDB4ZmIsIDB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNlLCAweDg0LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4NCwgMHhhNiwgMHg1ZiwKLQkweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDkyLCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGUyLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZiwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODQsIDB4MjEsIDB4MDQsCi0JMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKLQkweGJkLCAweDg3LCAweDAwLCAweDRiLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA2LCAweDg1LCAweDAwLCAweDQzLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODUsIDB4MDAsIDB4ZmIsIDB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiZCwgMHg4NywgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0ZSwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAyLCAweDg1LCAweDAwLCAweDVhLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWYsIDB4ODQsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MDAsIDB4NTMsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1NiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweGEwLCAweDBhLAotCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1MywKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmUsIDB4ODQsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODQsIDB4YTIsIDB4MGEsCi0JMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1ZCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODQsIDB4YTAsIDB4OTEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YiwgMHg4OCwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTAsIDB4NDIsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NSwgMHgyMiwgMHgwYiwKLQkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDg1LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGEyLCAweDU0LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODUsIDB4MjIsIDB4NTUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg4MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDg1LCAweDIyLCAweDUzLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweGJjLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDIwLCAweDg1LCAweDIyLCAweDQzLAotCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4NSwgMHhhMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDg1LCAweDQ2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjQsIDB4ODUsIDB4YTAsIDB4ZjAsIDB4MzAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODUsIDB4MWUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg0MSwgMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDVkLCAweDkyLCAweDAwLCAweDQwLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDI5LCAweDg1LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5MywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg4NSwgMHgyMiwgMHg0NiwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHgzZCwgMHg4NSwgMHgyMiwgMHg0MCwKLQkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4ODUsIDB4MjIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4NSwgMHgyMiwgMHg0MiwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDY2LCAweDFiLAotCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHg0MSwgMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3MCwgMHg4NSwgMHgyMywgMHg5MiwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDg1LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NzQsIDB4ODUsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDBhLCAweDI0LCAweGM4LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAotCTB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODUsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwKLQkweDI0LCAweGNjLCAweDAxLCAweDAwLCAweDRhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjYsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg2MywgMHg4NSwgMHgwMCwgMHg0MSwKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHhhMiwgMHg0NCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVmLCAweDg1LCAweGE4LCAweDQyLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZhLCAweDg1LCAweDIyLCAweDQwLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4NSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDdkLCAweDg1LCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweDdlLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg5MiwgMHgwMCwgMHg5MiwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDMxLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDg1LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4N2QsIDB4ODUsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDk1LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg4NSwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDkxLCAweDg1LCAweDJhLCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHg4NSwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg4NSwgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEzLCAweDA3LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODUsIDB4YTMsIDB4NDAsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDg1LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4NSwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg4NiwgMHgyMiwgMHgwZiwgMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NSwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhMiwgMHg4NSwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LAotCTB4MjksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAzLCAweDBhLCAweGM4LCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4Y2IsIDB4ODUsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCi0JMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGI4LCAweDg1LCAweGEzLCAweDA3LAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODUsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDg1LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGM1LCAweDg1LCAweDIyLCAweDQyLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU5LCAweDg1LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YzIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGM3LCAweDg1LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlOSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODUsIDB4YTMsIDB4MTIsCi0JMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg4NSwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAotCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDg2LCAweDIyLCAweDBkLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NSwgMHgwMCwgMHgwZCwKLQkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDg1LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGU5LCAweDg1LCAweDAwLCAweDQxLAotCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4NSwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDg1LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg4NSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4NSwgMHgxZiwgMHhmMCwKLQkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MjMsIDB4MDcsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODYsIDB4YTgsIDB4NDYsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4NSwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGIyLCAweDg1LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LAotCTB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDg2LCAweDIyLCAweDQwLCAweDMxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDExLCAweDg2LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDFiLCAweDg2LCAweGEwLCAweDQ2LAotCTB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLCAweDQyLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4ODYsIDB4YTAsIDB4NDEsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NiwgMHgyMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJhLCAweDg2LCAweGEwLCAweDQzLCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MmEsIDB4ODYsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDEsCi0JMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLCAweDIyLCAweDg2LCAweGEyLCAweDQxLAotCTB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwKLQkweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDMxLCAweDg2LCAweDkwLCAweDQ4LCAweDkyLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDE0LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQwLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDg2LCAweDAwLCAweDE3LAotCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NiwgMHhhMCwgMHgwNywKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4NiwgMHg5MCwgMHhmMiwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAotCTB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NTksIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDU2LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NiwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2OCwgMHg4NiwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDZkLCAweDg2LCAweDIyLCAweDQwLAotCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcyLCAweDg2LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg4NiwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MSwgMHg4NiwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsCi0JMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHg4NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NiwgMHgyMiwgMHgwZCwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDhjLCAweDg2LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODYsIDB4MDAsIDB4MGQsCi0JMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIwLAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg5MiwgMHg4NiwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg4NiwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTMsIDB4ODYsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBkLAotCTB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODYsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHg4NiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4YTEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDllLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODYsIDB4MWYsIDB4ZjAsCi0JMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDg2LCAweDIzLCAweDA3LAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YiwgMHg4NiwgMHgwMCwgMHgwZCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg4NiwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmIsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OTUsIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmEsIDB4ODcsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LAotCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkMiwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODYsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGRjLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ5LCAweDg2LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5MywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDVmLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDhlLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAotCTB4ZWIsIDB4ODYsIDB4MjIsIDB4NDgsIDB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweGViLCAweDg2LCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGVhLCAweDg2LCAweDIzLCAweDQxLAotCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiZCwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4ODYsIDB4MjIsIDB4MGEsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJkLCAweDQ1LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDg2LCAweDIyLCAweGYwLAotCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHg0MSwKLQkweDJjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwKLQkweGJkLCAweDg3LCAweDIwLCAweDRjLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLAotCTB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YmQsIDB4ODcsIDB4MDAsIDB4NDksIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDgwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDA1LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4NywgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGIsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODIsIDB4MjIsIDB4NDAsCi0JMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4MSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4NywgMHgyMiwgMHg0MCwKLQkweGYyLCAweDdmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweDAwLCAweDZmLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODcsIDB4MjIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODAsIDB4MDAsIDB4NDEsCi0JMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MjIsIDB4MDIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDJmLCAweDkyLCAweDFhLCAweDAyLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MjYsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM5LCAweDkyLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDg3LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5MiwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgzMSwgMHg4NywgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDgyLCAweDg3LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY2LCAweDg3LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4NDcsIDB4ODcsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg4NywgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDVkLCAweDg3LCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1NywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAotCTB4NTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCi0JMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NjEsIDB4ODcsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDcyLCAweDg3LCAweDIyLCAweDQxLAotCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg2ZSwgMHg4NywgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4NywgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDgzLCAweDQxLAotCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg4NywgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg4NywgMHgyMywgMHg0MCwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODcsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc3LCAweDg3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgwMCwgMHhmOCwKLQkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg3LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTAsIDB4YWEsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDk1LCAweDg3LCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4OGIsIDB4ODcsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDg3LCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDg3LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODcsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAotCTB4OGMsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAotCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCi0JMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDgyLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODcsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHg4NywgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg4NywgMHgyMiwgMHg0MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAotCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg4NywgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlNiwgMHg4YSwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4YiwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4YiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4YiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDczLCAweDhjLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhjLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4YywgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OGMsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWEsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmNSwgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhjLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA3LCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBlLCAweDhkLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4N2IsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDgzLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4ZCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OGIsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3ZiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4ODMsIDB4ODgsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDksCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4ZCwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGViLCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVjLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhlLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDhlLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDksIDB4OGYsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4OWQsIDB4OGYsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFmLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmEsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDhmLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHg4ZSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4OGYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGRmLCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkZiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZGMsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4NCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDhhLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHhhMywgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDFmLCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAotCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKLQkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDksIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDhiLCAweDIwLCAweDRiLAotCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHg4YiwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDE4LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGIsIDB4NDQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4YiwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDhiLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDIyLCAweDhiLCAweDIwLCAweGYwLAotCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI4LCAweDhiLCAweGE4LCAweDQ0LAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDhiLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDhiLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OGIsIDB4MjIsIDB4NDQsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg4YiwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRmLCAweDhiLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGIsIDB4YTIsIDB4NDYsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDhiLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OGIsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAotCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg4NSwgMHg4YiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4YiwgMHgyMiwgMHgwYSwKLQkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg2YywgMHg4YiwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDYyLCAweDhiLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAotCTB4ODUsIDB4OGIsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDg1LCAweDhiLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzksIDB4OGIsIDB4YTAsIDB4NDMsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0NywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmMsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDgxLCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4OGIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1MSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YiwgMHgyMiwgMHg0NSwKLQkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDk3LCAweDhiLCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAotCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGIsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDk1LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGFlLCAweDhiLCAweGEyLCAweDQ0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MywgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKLQkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGFlLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OGIsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OGIsIDB4MjIsIDB4NGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDkzLCAweDAwLCAweGYzLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKLQkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4OGIsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg1NywgMHg5MywgMHgwMCwgMHg0MCwKLQkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweDg5LCAweDk0LCAweDAwLCAweDQwLAotCTB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHg4YiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4OGIsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4YiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGYwLCAweDhiLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweGYxLCAweDhiLCAweDAwLCAweDA2LAotCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg4YiwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGY3LCAweDhiLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZjYsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDYsCi0JMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4M2UsIDB4OTYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4OGIsIDB4YTgsIDB4MTMsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OGMsIDB4MjIsIDB4MDIsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDhjLCAweGEyLCAweDAyLCAweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDBhLCAweDhjLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDUsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLAotCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4YywgMHgyMiwgMHgwMSwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDE3LCAweDhjLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDRhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjAsIDB4OGMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OGMsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDhjLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwgMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OGIsIDB4MDAsIDB4YTEsCi0JMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDhiLCAweDAwLCAweDAyLCAweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDhjLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MmQsIDB4NDYsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgzZSwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4M2IsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ1LCAweDhjLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjAsIDB4MDEsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDRhLCAweDhjLCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDRkLCAweDhjLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4MWUsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MjgsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4YywgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OGMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1MiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMCwKLQkweDkyLCAweGIwLCAweDAxLCAweDAwLCAweDViLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4ZjgsCi0JMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4YywgMHhhMiwgMHg0MSwgMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDFlLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1ZiwgMHg4YywgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDYyLCAweDhjLCAweDIyLCAweDVmLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODcsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4YywgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjksIDB4OGMsIDB4NDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4YywgMHg4NSwgMHhjYSwgMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk1LCAweDE4LCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NywKLQkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YywgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDk0LCAweDAwLCAweDQwLAotCTB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwKLQkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDdjLCAweDhjLCAweDkwLCAweDRjLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OGMsIDB4MjIsIDB4NDMsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwgMHg3ZSwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDhjLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGMsIDB4MjgsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4YywgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDFkLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWQsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDk3LCAweDhjLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLCAweGEyLCAweDhjLCAweGEyLCAweDQxLAotCTB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDQsIDB4ODMsIDB4NzAsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKLQkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTUsIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODcsIDB4MjMsIDB4NDEsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0NywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTMsIDB4OGIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiMCwgMHg4YywgMHgyMiwgMHg0NywgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg4YiwgMHgwMCwgMHg0OCwKLQkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDFmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsIDB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDliLCAweDkxLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YmUsIDB4OGMsIDB4YTIsIDB4NTAsCi0JMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDIyLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4YywgMHgyMiwgMHg0NywgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDFmLCAweGYwLAotCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhjLCAweDQyLCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4YywgMHgyMywgMHg0MSwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg4YywgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGQ0LCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDhjLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4YywgMHgyMCwgMHg0YywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKLQkweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDYsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM5LCAweDk0LCAweDAwLCAweDQ3LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZCwgMHg5MCwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwgMHhlNSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDhkLCAweDgwLCAweGYzLAotCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDhkLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAotCTB4MjgsIDB4OGQsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDhkLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg4ZCwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAotCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDk0LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGQsIDB4YTAsIDB4MTQsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGY4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLAotCTB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGQsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDBmLCAweDk1LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4NGMsIDB4OGQsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4ZCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHg4ZCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsCi0JMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU5LCAweDhkLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDIwLCAweGYyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwKLQkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NWUsIDB4OGQsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4ZCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAotCTB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwKLQkweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmUsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDAwLCAweDFkLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGQsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4ZCwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OGIsIDB4MjIsIDB4NGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgyMiwgMHgwNiwKLQkweDkwLCAweDZjLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyYSwgMHg1MCwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDhmLCAweDhkLCAweGEwLCAweDQzLAotCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg5MSwgMHgwMCwgMHgxMCwgMHg4NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkxLCAweDhkLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGIsIDB4MWEsIDB4NWQsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5YywgMHg4ZCwgMHhhMCwgMHg0MywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4ZCwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4ZCwgMHg0MiwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDliLCAweDhjLCAweDIyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4YywgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWQsIDB4OGQsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCi0JMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZCwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGFjLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGI0LCAweDhkLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWYsIDB4OTQsIDB4MDAsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGMwLCAweGE4LCAweDNkLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmUsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMiwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg4ZCwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGNhLCAweDhkLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4NGIsIDB4MTIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDk0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDRhLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHgwMSwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDA5LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhkLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGQ4LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk3LCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk2LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGQsIDB4MjAsIDB4MDksIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg4ZCwgMHgxZiwgMHgwOSwgMHg5NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGRlLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGU5LCAweDhkLCAweDIyLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQyLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MiwKLQkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk2LCAweDkzLCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDIyLCAweDQwLAotCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGQsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4ZSwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDA4LCAweDAwLCAweDBiLCAweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHg4ZSwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZSwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTIsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg4ZSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAotCTB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZSwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc1LCAweDhlLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGUsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg4ZSwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwKLQkweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMxLCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDVkLCAweDhlLCAweGEwLCAweDBiLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg4ZSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MGIsCi0JMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg1MCwgMHg5OSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDYyLCAweDAxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDIzLCAweDgwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNmLCAweDQxLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsCi0JMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4ZSwgMHgyMywgMHgwYiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweGU1LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGUsIDB4MjYsIDB4MTEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0YywgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDYyLCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmYsIDB4MDgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhmNCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGU0LCAweGNkLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OGUsIDB4MjIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4OGUsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzAsIDB4OGUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZkLCAweDhlLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg3MywgMHg4ZSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NGEsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDJkLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCi0JMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDk0LCAweDAwLCAweDQwLAotCTB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiOSwgMHg4ZSwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDhmLCAweDhlLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4ZSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg4ZSwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhlLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5ZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGEzLCAweDhlLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhOSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OGUsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjUsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4ZSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYywgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGM1LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNhLCAweDhlLCAweDAzLCAweDFlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4OGUsIDB4MDAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4ZSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGQ4LCAweDhlLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGVjLCAweDhlLCAweGEyLCAweDQwLAotCTB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OGEsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LCAweDk4LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZmEsIDB4OGUsIDB4MjAsIDB4MDEsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNywgMHg4ZSwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLAotCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDdjLCAweDhlLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgyYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4YTksIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDgsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg4ZiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg4ZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHg4NywgMHg0MiwKLQkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDAwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OGYsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM3LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OGYsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDRkLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGIsIDB4OGYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDUzLCAweDhmLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OGYsIDB4MjIsIDB4NDcsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDUyLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzUsIDB4MDksIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDhmLCAweGE4LCAweDQwLAotCTB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg4ZiwgMHg2NSwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg2YywgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwYiwKLQkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ODQsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTMsIDB4MDAsIDB4NWYsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc2LCAweDhmLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg2ZSwgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4ZiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDE3LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0YywgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDhlLCAweDhmLCAweDMwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDBmLCAweDk0LCAweGY0LCAweDAxLCAweDAwLAotCTB4OTMsIDB4MDQsIDB4MDAsIDB4NWYsIDB4OTUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5OCwgMHg4ZiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDhmLCAweDQ2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAotCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDkyLCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhMiwgMHg4ZiwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDIyLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg5NCwgMHgwMCwgMHg0YSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDQwLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MjIsIDB4NDcsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGI1LCAweDhmLCAweGEyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDEsIDB4OTMsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDk0LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGYsIDB4ODcsIDB4NDIsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGJhLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkMywgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0NywKLQkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDcsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4NDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwYSwKLQkweDJjLCAweDUwLCAweDAwLCAweDAwLCAweDA3LCAweDk1LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OGYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OGYsIDB4ODQsIDB4NDgsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDhmLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGY4LCAweDhmLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGYxLCAweDkzLCAweDAwLCAweDQ1LAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGYsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhmLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OGYsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OTAsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTAsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5MCwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTMsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTAsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDI5LCAweDkwLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsCi0JMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDA4LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTAsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTAsIDB4MjAsIDB4MTYsCi0JMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg5MCwgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MCwgMHgwMCwgMHgwYSwKLQkweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDkwLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAotCTB4NTYsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDkwLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OTAsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHg5MCwgMHhhOCwgMHg0NiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2NywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg3MSwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg4NiwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDc3LCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDgyLCAweDkwLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OTAsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4N2YsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCi0JMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgzLCAweDkwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAotCTB4ODksIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDk2LCAweDkwLCAweDIyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4ZSwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDJkLCAweDAwLAotCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg4ZSwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MSwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTAsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4YWQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHg5MCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGIwLCAweDkwLCAweDIzLCAweDBkLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MCwgMHgyMiwgMHg0MCwKLQkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLAotCTB4YmQsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YmIsIDB4OTAsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTAsIDB4MDAsIDB4NWUsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MCwgMHgyMiwgMHg0MCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4Y2QsIDB4OTAsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDExLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUzLCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg5MCwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGY3LCAweDkwLCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MCwgMHgyMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTAsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4YzEsIDB4OTIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDk1LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDkxLCAweGEyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA3LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDkxLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTAsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDkxLCAweGE4LCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE5LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg5MSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDMwLCAweDkxLCAweDIyLCAweDRhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTEsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk2LCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgxNiwKLQkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDE3LCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGMxLCAweDkyLCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDJiLCAweDkwLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzYSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDkxLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4ZSwgMHgwMCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDUxLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5MSwgMHgzNywgMHg1YywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NGUsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0NywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDkxLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MiwgMHgwMCwgMHgxMCwKLQkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweDJiLCAweDkwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAotCTB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTEsIDB4YTIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDgyLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3ZSwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MmQsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDkwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzMywgMHhjMywgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OTYsIDB4OTEsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsCi0JMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDlmLCAweDRjLCAweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLAotCTB4MzQsIDB4YzMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YTQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDkxLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDcsCi0JMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHg5MSwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxOCwgMHg5MiwgMHhhMiwgMHg0YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGM1LCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAotCTB4YzgsIDB4OTEsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg5MSwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDkxLCAweDIyLCAweGYwLAotCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTYsIDB4OTIsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTEsIDB4MjMsIDB4ZjAsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhkMiwgMHg5MSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDkyLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDE3LCAweDkyLCAweGEyLCAweDQxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDE3LCAweDkyLCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAotCTB4MTcsIDB4OTIsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDkyLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkZSwgMHg5MSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MSwgMHgwMywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGU2LCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDkxLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweGVjLCAweDkxLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGViLCAweDkxLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmOCwgMHg5MSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MSwgMHhhMiwgMHhmMiwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGEwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTIsIDB4ZjAsCi0JMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA2LCAweDkyLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5MSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMCwgMHg5MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MGQsIDB4OTIsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTIsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkyLCAweDIyLCAweDBhLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4OTIsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDkyLCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDQxLAotCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxYSwgMHg5MiwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0YywKLQkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGM5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWQsIDB4OTIsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTIsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKLQkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTIsIDB4MjIsIDB4NWEsCi0JMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDkyLCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4ZjAsCi0JMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MiwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkyLCAweGEyLCAweDRiLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTIsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywKLQkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzgsIDB4OTIsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQ0LCAweDkyLCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDUyLCAweDkyLCAweDEzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAotCTB4NGYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg5MiwgMHg2MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweGMyLAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTIsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MiwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwKLQkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDA0LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDkyLCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkyLCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTIsIDB4MjIsIDB4NTAsCi0JMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDk0LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDAwLCAweDEyLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKLQkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5MiwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDkyLCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAotCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDkyLCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4ODksIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTIsIDB4MDAsIDB4NDIsCi0JMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhhLCAweDkyLCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAotCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg5MiwgMHgyOCwgMHhiMSwKLQkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDkyLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg5MiwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg5MiwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDlhLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTIsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhNCwgMHg5MiwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDkyLCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGE0LCAweDkyLCAweDIyLCAweDRjLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5MiwgMHhhOCwgMHhiMSwKLQkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGI1LCAweDkyLCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGJlLCAweDkyLCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGMzLCAweDkyLCAweDgzLCAweDFlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTIsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDksIDB4OTIsIDB4MzAsIDB4NDcsCi0JMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTIsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZTEsIDB4OTIsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlYiwgMHg5MiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4OTIsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTIsIDB4MzAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGYxLCAweDkyLCAweGEyLCAweDBiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAotCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5MywgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDkzLCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAotCTB4MGEsIDB4OTMsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MywgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OTMsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDE2LCAweDkzLCAweGEyLCAweDNiLAotCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNywgMHg5MywgMHgxOCwgMHg0YSwKLQkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTMsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDAwLCAweDA1LAotCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg5MywgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDlkLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweDIyLCAweDQ1LAotCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyZSwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg5MywgMHhhMiwgMHgzYiwKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDEwLAotCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTMsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg1YywKLQkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKLQkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDVhLCAweDkzLCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDdiLCAweDkzLCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAotCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3YSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg3OSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHhhMiwgMHg0MSwKLQkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MywgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NywgMHg5MywgMHgwMCwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5MywgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDVjLAotCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTMsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDkzLCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk1LCAweDkzLCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDkzLCAweGEyLCAweGE1LAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5ZSwgMHg5MywgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGEzLCAweDkzLCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCi0JMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5MywgMHg5ZiwgMHg0MSwKLQkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGQxLCAweDkzLCAweDAwLCAweDQxLAotCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDIsIDB4OTMsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OTMsIDB4YTIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTMsIDB4OWMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMSwgMHg5MywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAotCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTMsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg4YSwKLQkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGViLCAweDkzLCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKLQkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5NCwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5NCwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg5NCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg5NCwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFhLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTQsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4NjMsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5NCwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5NCwgMHgyMiwgMHhmMywKLQkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NCwgMHg4MiwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDM4LCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDMsIDB4OTQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTIsIDB4MDAsIDB4NDMsCi0JMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDk0LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDQ2LCAweDk0LCAweDAwLCAweDA2LAotCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHg5NCwgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4NzIsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTQsIDB4YTIsIDB4MDIsCi0JMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg5NCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDRlLCAweDk0LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk0LCAweDAwLCAweDAyLAotCTB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGYxLCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTQsIDB4MjIsIDB4MTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3MSwgMHg5NCwgMHhhMiwgMHgwMiwKLQkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg2MywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MmYsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDM1LCAweDk0LCAweDIwLCAweDE1LAotCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweGUwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NCwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDM1LCAweDk0LCAweDAwLCAweDAyLAotCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwKLQkweDdmLCAweDk0LCAweDAwLCAweDQxLCAweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLCAweDhlLCAweDk0LCAweGEwLCAweGYwLAotCTB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwKLQkweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4MjIsIDB4NGEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLCAweDk3LCAweDk0LCAweGE0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg5NCwgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NCwgMHhhMiwgMHgwNiwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk0LCAweDIyLCAweDQ4LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4OWMsIDB4OTQsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDQ4LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGE0LCAweDk0LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDk1LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTQsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OTQsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NCwgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4NDYsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAotCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OTQsIDB4YTAsIDB4ZjAsCi0JMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGU0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE2LCAweDRjLCAweDk1LCAweDYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRhLAotCTB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGQxLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHg1ZiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4ZjYsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAotCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsIDB4ODIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDRjLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTQsIDB4NDMsIDB4MzAsCi0JMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5NCwgMHgyNiwgMHgzMCwKLQkweDkzLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweDk0LCAweDkwLCAweDRjLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NDksCi0JMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGYxLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmUsIDB4OTQsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTQsIDB4YTIsIDB4NDAsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTcsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NCwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTUsIDB4YTIsIDB4NWYsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywgMHgxOSwgMHg3YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDBjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxNSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweGYyLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LCAweDk4LCAweGQwLCAweDAxLCAweDAwLAotCTB4MWEsIDB4OTUsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDFkLCAweDk1LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKLQkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAotCTB4MjMsIDB4OTUsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAotCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4MzcsIDB4OTUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5NSwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNjLCAweDk1LCAweDIyLCAweGYyLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzYywgMHg5NSwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk1LCAweDIzLCAweGYwLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4MjMsIDB4OTIsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OTUsIDB4NjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDAwLCAweDJkLCAweDQyLCAweGIyLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLAotCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OTUsIDB4ZDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3OCwgMHhkYSwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NSwgMHgyMywgMHg0MCwKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDk1LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHg5NSwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAotCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OTUsIDB4MjMsIDB4NDEsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsCi0JMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg2OCwgMHg5NSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg5NSwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NmUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDk1LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDIwLCAweDFkLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzcsIDB4OTUsIDB4OWYsIDB4NDEsCi0JMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDc4LCAweDk1LCAweDAwLCAweDQxLAotCTB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDgxLCAweDk1LCAweGEyLCAweDQwLAotCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsCi0JMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDhhLCAweDk1LCAweGEzLCAweDVmLAotCTB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NSwgMHgyMiwgMHhmMiwKLQkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsCi0JMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkyLCAweDk1LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDkzLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5NywgMHg5NSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLAotCTB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTUsIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMSwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg5NSwgMHg2MiwgMHg0MSwKLQkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsCi0JMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDJlLCAweDQzLAotCTB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhNywgMHg5NSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweGYwLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5NSwgMHhhMiwgMHgxMiwKLQkweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLCAweDk4LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OTUsIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLCAweGI3LCAweDk1LCAweGEzLCAweDQxLAotCTB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweGJiLCAweDk1LCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OTUsIDB4YTMsIDB4NDIsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZSwgMHg5NSwgMHgwMCwgMHgwYSwgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDk1LCAweGEwLCAweDE3LAotCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwKLQkweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAotCTB4YzUsIDB4OTUsIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKLQkweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNywgMHg5NSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRjLCAweDk1LCAweDI4LCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTUsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg3ZSwgMHg5NCwgMHgxZCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHg5NSwgMHgyMiwgMHg1ZiwKLQkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NiwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDQ5LCAweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLAotCTB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkzLCAweGMwLCAweDAxLCAweDAwLCAweGU5LCAweDk1LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGYyLCAweDk1LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjOCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjksIDB4OTUsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLAotCTB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJkLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LAotCTB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDU5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg1MywgMHhiMywgMHgwMSwgMHgwMCwgMHgyYiwgMHg5NiwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDJiLCAweDk2LCAweGEyLCAweDUxLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDJjLCAweDk2LCAweDAwLCAweDQwLAotCTB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwKLQkweDNhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLAotCTB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAxLCAweDAwLCAweDhhLCAweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAotCTB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsIDB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDQzLCAweDAwLCAweDRiLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NywgMHgyMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDk2LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAotCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4NDEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5ZiwgMHgyMiwgMHg0MCwgMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhjNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGM2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEyLCAweGM4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4NGQsCi0JMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYiwgMHg5ZiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDlmLCAweGEyLCAweDQxLAotCTB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OWYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQyLCAweGNkLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhjMiwgMHg5ZiwgMHgwMCwgMHg0MywgMHhjYiwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQyLCAweDlmLCAweDAwLCAweDQwLAotCTB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDRkLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4Y2EsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwKLQkweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDdiLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAotCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVkLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQwLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQl9LAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzNTMxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc3JjdnVjb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotI2RlZmluZSBPQVNJU19SQ1ZVQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBPQVNJU19SQ1ZVQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMDoyOCIKLQotc3RhdGljIHUzMiBPYXNpc1JjdlVDb2RlTGVuID0gNTEyOwotCi1zdGF0aWMgdTggT2FzaXNSY3ZVQ29kZVsyNTYwXSA9Ci17Ci0weDQ3LCAweDc1LCAweDAxLCAweDAwLCAweDA0LCAweGEwLCAweDEzLCAweDAxLCAweDAwLCAweDFjLCAweGI3LCAweDViLCAweDA5LAotMHgzMCwgMHgwMCwgMHhiNiwgMHg1ZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgzYiwKLTB4NzgsIDB4M2EsIDB4MDAsIDB4MWMsIDB4YTIsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4NzAsCi0weDE4LCAweGFkLCAweDdiLCAweGYxLCAweGZmLCAweDFjLCAweGIzLCAweDdiLCAweGE5LCAweGFhLCAweDFlLCAweGI0LCAweDdiLAotMHgwMSwgMHgwYywgMHgxYywgMHhiNSwgMHg3YiwgMHgwZCwgMHgwNiwgMHgxYywgMHgwMCwgMHgwMCwgMHgzMCwgMHg2NCwgMHgwOCwKLTB4MGMsIDB4MzEsIDB4NWEsIDB4NzAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NWEsIDB4ODAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGUsCi0weDkwLCAweDA0LCAweDBjLCAweDMxLCAweDRhLCAweGEwLCAweDAwLCAweDA5LCAweDI1LCAweDU1LCAweGMwLCAweDA0LCAweDBjLAotMHgzMSwgMHg1MiwgMHhiMCwgMHgwMCwgMHhlOSwgMHgyNCwgMHg1NSwgMHhjMCwgMHgwNCwgMHhjYywgMHhiMywgMHgwMCwgMHgxYywKLTB4MWMsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDYsIDB4NTYsIDB4MzIsIDB4ZDQsIDB4MDgsIDB4MDcsIDB4OWQsCi0weDAwLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDEwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAotMHgwNiwgMHg1NiwgMHg1ZSwgMHhjMCwgMHgwNCwgMHhhMCwgMHgzMCwgMHg1NCwgMHgwMywgMHgwMCwgMHhhYywgMHgzMCwgMHg1NSwKLTB4MDMsIDB4MDAsIDB4Y2QsIDB4MDMsIDB4M2EsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NjAsCi0weDhlLCAweDMxLCAweDU0LCAweDA5LCAweDI5LCAweDI1LCAweDU1LCAweDAzLCAweDAwLCAweDgwLCAweDhlLCAweDMxLCAweDU0LAotMHgwOSwgMHg4YywgMHgzMCwgMHg5MSwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwKLTB4MzEsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4NjUsIDB4YzAsIDB4MDQsCi0weDQ3LCAweDFjLCAweDU1LCAweDAzLCAweDAwLCAweDZjLCAweDMwLCAweDAxLCAweDAwLCAweDFjLCAweDRkLCAweDM0LCAweDAyLAotMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhjOCwKLTB4ODMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsCi0weDA0LCAweGEwLCAweDBmLCAweDMwLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDdiLCAweGZiLAotMHhmMiwgMHgwMCwgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMCwgMHgxYywgMHhiNCwgMHg3YiwgMHhmZCwgMHgwMywgMHgxYywKLTB4ODAsIDB4MGUsIDB4MzAsIDB4NTQsIDB4MDksIDB4ZTAsIDB4ZmIsIDB4MDUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsCi0weDAzLCAweDAwLCAweGIzLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweGVjLCAweDcwLCAweDA0LCAweDAwLAotMHgwMCwgMHhlYywgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MywgMHgwMCwgMHg2MSwgMHg3NiwgMHg4ZCwgMHhjMywKLTB4MDQsIDB4YzAsIDB4OGQsIDB4MzEsIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4YzAsIDB4MWYsIDB4YTAsIDB4ZmQsCi0weGM1LCAweDAxLCAweDAwLCAweGNjLCAweDMzLCAweDA1LCAweDAwLCAweDFjLCAweGQ0LCAweDAzLCAweDAwLCAweDNjLCAweDFjLAotMHhkNCwgMHhkMywgMHgxYiwgMHgwMCwgMHgxYywgMHhjMCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg1YywKLTB4MTMsIDB4MDQsIDB4OGUsIDB4OGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NWIsIDB4ODAsIDB4NWUsIDB4MTMsIDB4MDQsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDk0LCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LAotMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHg3ZiwgMHgxYywgMHhhMCwgMHgwMSwKLTB4YTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCi0weGMwLCAweDAzLCAweGZjLCAweDAzLCAweDFjLCAweGY1LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLCAweGU2LAotMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiNSwKLTB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4N2EsIDB4N2UsIDB4MDIsIDB4MDAsCi0weDFjLCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLAotMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywKLTB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4M2QsIDB4YWEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YWMsCi0weDExLCAweDA0LCAweGQ0LCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweGI1LCAweDNlLCAweGIyLCAweDAxLCAweDAwLCAweDIwLAotMHhmYiwgMHhmZCwgMHhmZiwgMHgxZiwgMHg4MCwgMHgyYywgMHg2YywgMHgwMywgMHgwMCwgMHhiOSwgMHgzYSwgMHg5ZSwgMHgwMSwKLTB4MDAsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ZGIsIDB4ODMsCi0weDE2LCAweDAwLCAweDFjLCAweGM3LCAweDFkLCAweDIxLCAweGMxLCAweDA0LCAweGI5LCAweDNiLCAweDhkLCAweGMxLCAweDA0LAotMHg4YiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg2YiwgMHgyYywgMHgzNSwgMHhjMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwKLTB4MTEsIDB4MDAsIDB4Y2IsIDB4MmMsIDB4NzksIDB4YzEsIDB4MDQsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsCi0weDBmLCAweDMxLCAweDU0LCAweDA5LCAweDU0LCAweGQwLCAweDAyLCAweDAwLCAweDFjLCAweDQ5LCAweDI1LCAweGIxLCAweDAxLAotMHgwMCwgMHhhYiwgMHgyYywgMHg4MSwgMHhjMSwgMHgwNCwgMHhhNywgMHgxZCwgMHg1NSwgMHgwMywgMHgwMCwgMHhjYywgMHgzMywKLTB4MDksIDB4MDAsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsCi0weGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGFlLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLAotMHg1NCwgMHgwOSwgMHhkNCwgMHgwNywgMHhmYywgMHgwMywgMHgxYywgMHg5OSwgMHgzYSwgMHgwMiwgMHgwMCwgMHgxYywgMHhiYiwKLTB4MzgsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsCi0weDA0LCAweGRiLCAweDNiLCAweDdlLCAweDAwLCAweDFjLCAweGM3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLAotMHhmYSwgMHgwNSwgMHgxYywgMHgyNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKLTB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsCi0weDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLAotMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwKLTB4MWMsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsCi0weDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LAotMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwKLTB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4MDAsIDB4M2QsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDU4LCAweDEyLCAweDAwLCAweGNiLCAweDJjLCAweDAxLCAweDAwLCAweDFjLCAweDc1LCAweDNiLCAweDAyLCAweDAwLAotMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwNSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywKLTB4MDAsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWMsIDB4YzksIDB4MDIsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCi0weDUzLCAweDA3LCAweDAyLCAweDAwLCAweDFjLCAweDQ2LCAweDdhLCAweGNhLCAweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDMyLAotMHg1NCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgxOSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwNCwgMHg0NiwKLTB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsCi0weDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGIzLCAweDdiLAotMHgwMSwgMHhjMCwgMHgxZiwgMHg3NCwgMHgwZSwgMHgzMCwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHg5YywgMHgwMCwgMHgxYywKLTB4ODAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YWMsCi0weDEyLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGQ0LCAweGQzLCAweDJiLCAweDAwLCAweDFjLCAweGQ0LAotMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHg4MCwgMHg3NiwgMHg3ZCwgMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMiwKLTB4MDAsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MTAsIDB4YzcsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MmMsCi0weDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDZjLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LAotMHhhYiwgMHgyZCwgMHhkOSwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHhiNSwgMHhjMiwgMHgwNCwgMHg4YiwgMHgyZCwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4NjksIDB4MjUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MTAsIDB4Y2IsCi0weDJmLCAweDA5LCAweDAwLCAweDFjLCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLAotMHgwMCwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwKLTB4MzIsIDB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTksIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDQsCi0weDQ2LCAweDdhLCAweGNhLCAweDA1LCAweDFjLCAweGI1LCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLAotMHg1NCwgMHgwOSwgMHg3MywgMHhlYywgMHgyYSwgMHgwMywgMHgwNCwgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4MjgsIDB4MDMsIDB4MDAsIDB4YzcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTMsCi0weDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGMwLCAweGQ3LCAweDIyLCAweDAwLCAweDFjLCAweDc1LCAweDU2LAotMHg3ZSwgMHgxMywgMHgwNCwgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHhlNywgMHgxYywgMHg0NSwgMHgwMywgMHgwNCwKLTB4ZTcsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MTAsIDB4ODAsIDB4MmMsIDB4MDAsCi0weDAwLCAweDFjLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweGI5LAotMHg3YiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywKLTB4MWMsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsCi0weDhjLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDBkLCAweDA0LCAweDFjLAotMHhjNywgMHg5ZiwgMHg4MCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwKLTB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDAsIDB4MWQsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MWMsIDB4YzcsCi0weDljLCAweDhjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDhjLCAweDEzLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLAotMHgxYywgMHhjMCwgMHgxZCwgMHhkYywgMHhkMywgMHgwOCwgMHgyNywgMHg5ZCwgMHhlNCwgMHgwMywgMHgwMCwgMHhhMCwgMHhlZSwKLTB4NDYsIDB4ZDQsIDB4MDAsIDB4ZmIsIDB4NzUsIDB4MDksIDB4MTQsIDB4MDQsIDB4MjAsIDB4N2IsIDB4MDYsIDB4MDAsIDB4MWMsCi0weGMwLCAweDFjLCAweDFjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGQzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAotMHhmNCwgMHgwMCwgMHhjMCwgMHhlZiwgMHhmMiwgMHgwMCwgMHgxYywgMHgyMCwgMHgyNSwgMHg1YywgMHgxNCwgMHgwNCwgMHg2MCwKLTB4YjcsIDB4ZDIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MTUsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsCi0weDFjLCAweGNjLCAweDMzLCAweDA1LCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDBjLCAweGM1LCAweDA0LCAweDYwLCAweGI3LAotMHgwZSwgMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgxNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1YywgMHhjNCwgMHgwNCwKLTB4YzAsIDB4MWQsIDB4OTgsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YzQsIDB4MDQsIDB4MDcsIDB4OWQsIDB4MDAsCi0weDAwLCAweDFjLCAweDFiLCAweDc0LCAweGZkLCAweGYzLCAweDA0LCAweGE2LCAweDdiLCAweGYxLCAweDAzLCAweDFjLCAweGEwLAotMHgwZiwgMHg2OSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhmYywgMHgxZiwgMHgzOSwgMHg3ZiwgMHgwMiwgMHgwMCwKLTB4MWMsIDB4MDcsIDB4MWQsIDB4OWQsIDB4YzMsIDB4MDQsIDB4YTYsIDB4N2IsIDB4YWQsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsCi0weDY4LCAweGM0LCAweDA0LCAweGUwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LAotMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxMCwgMHgxZCwgMHgwMCwgMHgwMCwgMHhhYywKLTB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsCi0weDJmLCAweDAxLCAweDE4LCAweDFkLCAweGM3LCAweDlmLCAweDAwLCAweDBiLCAweDFjLCAweDAwLCAweDAwLCAweGFjLCAweGMzLAotMHgwNCwgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjYywgMHhiMywKLTB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4YzMsIDB4MDQsCi0weGEwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGEwLCAweGVlLCAweGEyLCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLAotMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwOSwgMHgwNCwgMHgxYywgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4YWMsIDB4YzMsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsIDB4MDIsCi0weDFjLCAweDAwLCAweDAwLCAweDBjLCAweGM1LCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweDM0LCAweDA1LCAweGNjLCAweGIzLAotMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxNSwgMHgwMiwgMHgxYywgMHg0NywgMHg5ZCwgMHg1NCwgMHhjNCwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4NzgsIDB4NDQsIDB4MDAsIDB4ODAsIDB4MWQsIDB4N2MsIDB4NTQsIDB4MDQsIDB4ODcsIDB4MWQsIDB4OGQsCi0weDA0LCAweDAwLCAweGNlLCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweGVmLCAweDc2LCAweDlkLCAweGM0LCAweDA0LCAweGE0LAotMHg3NywgMHg4ZCwgMHgyNCwgMHgwOSwgMHhlNCwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHhjNCwgMHg3NiwgMHgwMSwgMHgwMCwKLTB4MWMsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NTQsIDB4MDQsIDB4ZDcsIDB4NzYsIDB4MDEsIDB4NTAsIDB4MTgsIDB4ZjYsIDB4NzYsCi0weDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotMHhjYywgMHgzMCwgMHg0NSwgMHhjNSwgMHgwNCwgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4YzAsIDB4NTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZjUsIDB4NzcsIDB4MjksIDB4YzUsIDB4MDQsIDB4ZTAsCi0weDMwLCAweGRjLCAweDA0LCAweDAwLCAweDAwLCAweDRjLCAweGIwLCAweDA0LCAweDAwLCAweDIwLCAweDRjLCAweGY0LCAweDA0LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwNCwgMHgwMCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywKLTB4MDksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsCi0weGNjLCAweDMzLCAweDE5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLAotMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywKLTB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTEsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsCi0weDA0LCAweDAwLCAweDdiLCAweDAwLCAweDgwLCAweDFjLCAweGFlLCAweDc3LCAweDQ1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLAotMHgwNCwgMHhjMCwgMHgwNCwgMHhkMywgMHg4YiwgMHgwMCwgMHhmYywgMHgxZiwgMHg2MCwgMHg3YSwgMHgzYywgMHgwMCwgMHgxYywKLTB4NjAsIDB4NGMsIDB4YzAsIDB4MDQsIDB4MDAsIDB4YzAsIDB4MmYsIDB4MjAsIDB4MDUsIDB4MWYsIDB4ZTAsIDB4MzAsIDB4YjAsCi0weDA0LCAweDAwLCAweDgwLCAweDI1LCAweGIwLCAweDA0LCAweDAwLCAweGI1LCAweDViLCAweGIxLCAweDA0LCAweDA0LCAweDY5LAotMHgyNiwgMHgwMSwgMHgwMCwgMHgxYywgMHg2YSwgMHgyYiwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgxZCwgMHgwMCwgMHgwMCwKLTB4MWMsIDB4YTksIDB4MjUsIDB4NDUsIDB4MDUsIDB4MDAsIDB4ZWUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWYsIDB4NzcsCi0weDAxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDI0LCAweDA0LCAweGI0LCAweDVmLCAweDAxLCAweDQwLCAweDE4LAotMHgwNywgMHg5ZCwgMHg0OCwgMHg1NSwgMHgwNCwgMHhiNywgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NiwgMHg3NiwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4NDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4MzMsIDB4MDEsIDB4NjAsIDB4MTgsIDB4YTQsCi0weDJmLCAweDAxLCAweDYwLCAweDE4LCAweDY0LCAweDc3LCAweDAxLCAweDYwLCAweDE4LCAweDI0LCAweDc3LCAweDAxLCAweDYwLAotMHgxOCwgMHg0NCwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHg2NCwgMHg4OCwgMHgwMywgMHgwMCwgMHgxYywgMHhhNCwgMHgzZiwKLTB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTMsIDB4N2IsIDB4MDAsIDB4YzAsIDB4MWMsCi0weGQzLCAweGNmLCAweDFiLCAweDAwLCAweDFjLCAweDUzLCAweDRmLCAweDAyLCAweDAwLCAweDFjLCAweGRhLCAweGNmLCAweDAwLAotMHhjMCwgMHgxZiwgMHhkNSwgMHg1NywgMHgwZiwgMHgwMCwgMHgxYywgMHhkMywgMHhkMywgMHgzNywgMHgwMCwgMHgxYywgMHhkNCwKLTB4NTMsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4MjksIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZjUsIDB4ZDUsIDB4YjAsIDB4MDUsCi0weDAwLCAweDAwLCAweDAwLCAweDljLCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLAotMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwKLTB4ZjUsIDB4NTUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YjQsIDB4NTUsIDB4MDQsIDB4NzcsIDB4NTYsIDB4MDEsCi0weDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDE4LCAweDAwLAotMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxMCwKLTB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsIDB4Y2IsIDB4MmYsCi0weDAxLCAweDIwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDI4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDEwLAotMHg4OSwgMHgyNSwgMHg2MSwgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwKLTB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsCi0weDAwLCAweDYwLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHg0MCwgMHgxYywKLTB4NmMsIDB4YzAsIDB4MDQsIDB4NDAsIDB4MWMsIDB4OWMsIDB4YzAsIDB4MDQsIDB4YTcsIDB4NzcsIDB4NTUsIDB4YzMsIDB4MDQsCi0weDAwLCAweDAwLCAweGM0LCAweGMwLCAweDA0LCAweDI3LCAweDFkLCAweGYxLCAweGMwLCAweDA0LCAweDAwLCAweDAwLCAweDU0LAotMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKaW5kZXggYThlYTU5ZC4uY2NmNzYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaApAQCAtNDYsMzAgKzQ2LDEwIEBACiAjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjM3IgogI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCiAKLXN0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOwotc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9IHsKLQkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPSB7Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KICNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCiAjZGVmaW5lIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoyMiIKICNkZWZpbmUgTU9KQVZFX1VDT0RFX0hPU1RJRl9JRCAgCTMKIAotc3RhdGljIHMzMiBNTnVtU2VjdGlvbnMgPSAweDI7Ci1zdGF0aWMgdTMyIE1TZWN0aW9uU2l6ZVtdID0KLXsKLQkweDAwMDA4MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBNU2VjdGlvblN0YXJ0W10gPQotewotCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCi19OwotCiAjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCiAjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjE1Igogc3RhdGljIHUzMiBPYXNpc1JjdlVDb2RlTGVuID0gNTEyOwpAQCAtMjAxLDE3ICsxODEsNiBAQAogCiAjZGVmaW5lIFNMSUNfTUFYX0NBUkRTICAgICAgICAgICAgICAzMgogI2RlZmluZSBTTElDX01BWF9QT1JUUyAgICAgICAgICAgICAgNCAgICAgICAgLyogTWF4ICMgb2YgcG9ydHMgcGVyIGNhcmQgICAqLwotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0vKgotRHVtcCBidWZmZXIgc2l6ZQotCi1UaGlzIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgbWF4IERNQSBzaXplIHRoZSBjYXJkIHN1cHBvcnRzLAotZ2l2ZW4gdGhlIGN1cnJlbnQgY29kZSBzdHJ1Y3R1cmUgaW4gdGhlIGhvc3QgYW5kIHVjb2RlLgotTW9qYXZlIHN1cHBvcnRzIDE2SywgT2FzaXMgc3VwcG9ydHMgMTZLLTEsIHNvCi1qdXN0IHNldCB0aGlzIGF0IDE1Sywgc2hvdWxkbnQgbWFrZSB0aGF0IG11Y2ggb2YgYSBkaWZmLgotKi8KLSNkZWZpbmUgRFVNUF9CVUZfU0laRSAgICAgICAgICAgICAgIDB4M0MwMAotI2VuZGlmCiAKIAogc3RydWN0IG1jYXN0X2FkZHJlc3MgewpAQCAtMzY3LDMwICszMzYsNiBAQAogICAgIHUzMiAgICAgICAgICAgICBtYXhfaXNyX3htaXRzOwogICAgIHUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0X3lpZWxkczsKICAgICB1MzIgICAgICAgICAgICAgdHhfcGFja2V0czsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotICAgIHUzMiAgICAgICAgICAgICBkdW1wc3RhdHVzOyAgICAgICAgICAgLyogUmVzdWx0IG9mIGR1bXAgVVBSICovCi0gICAgdm9pZCAqY21kYnVmZmVyOwotCi0gICAgdWxvbmcgICAgICAgICAgICAgICBjbWRidWZmZXJfcGh5czsKLSAgICB1MzIgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXNsOwotICAgIHUzMiAgICAgICAgICAgICBjbWRidWZmZXJfcGh5c2g7Ci0KLSAgICB1MzIgICAgICAgICAgICAgZHVtcF9jb3VudDsKLSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1bXBfdGFza19pZDsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcF93YWl0X2NvdW50OwotICAgIHVpbnQgICAgICAgICAgICAgICAgZHVtcHRocmVhZF9ydW5uaW5nOyAvKiBoYXMgYSBkdW1wIHRocmVhZCBiZWVuIGluaXQnZCAgKi8KLSAgICB1aW50ICAgICAgICAgICAgICAgIGR1bXBfcmVxdWVzdGVkOyAgICAgLyogMCBubywgMSA9IHJlcXN0ZCAyPWN1cnIgMz1kb25lICovCi0gICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX3N0YXJ0OwotICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9jb21wbGV0ZTsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfZGVsdGE7Ci0gICAgdm9pZCAqZHVtcGJ1ZmZlcjsKLSAgICB1bG9uZyAgICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5czsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcGJ1ZmZlcl9waHlzbDsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcGJ1ZmZlcl9waHlzaDsKLSAgICB3YWl0X3F1ZXVlX2hlYWRfdCAgIGR1bXBfd3E7Ci0gICAgc3RydWN0IGZpbGUgICAgICAgICpkdW1waGFuZGxlOwotICAgIG1tX3NlZ21lbnRfdCAgICAgICAgZHVtcGZpbGVfZnM7Ci0jZW5kaWYKICAgICB1MzIgICAgICAgICAgICAgZGVidWdfaXg7CiAgICAgdXNob3J0ICAgICAgICAgICAgICByZWdfdHlwZVszMl07CiAgICAgdXNob3J0ICAgICAgICAgICAgICByZWdfb2Zmc2V0WzMyXTsKQEAgLTUxNiw4ICs0NjEsNiBAQAogICAgIHVpbnQgICAgICAgICAgICAgICAgdXByX2J1c3k7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICBwaW5ndGltZXI7CiAgICAgdTMyICAgICAgICAgICAgIHBpbmd0aW1lcnNldDsKLSAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgIHN0YXRzdGltZXI7Ci0gICAgdTMyICAgICAgICAgICAgIHN0YXRzdGltZXJzZXQ7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICBsb2FkdGltZXI7CiAgICAgdTMyICAgICAgICAgICAgIGxvYWR0aW1lcnNldDsKICAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfZW50cnk7CkBAIC01NzAsMjUgKzUxMyw2IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiB9OwogCi0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19EVU1QX1JFUVVFU1RFRCAgICAgIDEKLSNkZWZpbmUgU0xJQ19EVU1QX0lOX1BST0dSRVNTICAgIDIKLSNkZWZpbmUgU0xJQ19EVU1QX0RPTkUgICAgICAgICAgIDMKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBNaWNyb2NvZGUgY3Jhc2ggaW5mb3JtYXRpb24gc3RydWN0dXJlLiAgVGhpcwotICogc3RydWN0dXJlIGlzIHdyaXR0ZW4gb3V0IHRvIHRoZSBjYXJkJ3MgU1JBTSB3aGVuIHRoZSBtaWNyb2NvZGUgcGFuaWMncy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBzbGljX2NyYXNoX2luZm8gewotICAgIHVzaG9ydCAgY3B1X2lkOwotICAgIHVzaG9ydCAgY3Jhc2hfcGM7Ci19OwotCi0jZGVmaW5lIENSQVNIX0lORk9fT0ZGU0VUICAgMHgxNTVDCi0KLSNlbmRpZgogCiAjZGVmaW5lIFVQREFURV9TVEFUUyhsYXJnZXN0YXQsIG5ld3N0YXQsIG9sZHN0YXQpICAgICAgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTYwNSwxMSArNTI5LDExIEBACiAKICNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKLQlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKQEAgLTYyMiw4ICs1NDYsOCBAQAogI2RlZmluZSAgIFNMSUNfR0VUX0FERFJfSElHSChfYWRkcikgICh1MzIpMAogI2VuZGlmCiAKLSNkZWZpbmUgRkxVU0ggICAgICAgVFJVRQotI2RlZmluZSBET05UX0ZMVVNIICBGQUxTRQorI2RlZmluZSBGTFVTSAkJdHJ1ZQorI2RlZmluZSBET05UX0ZMVVNICWZhbHNlCiAKICNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIChTSU9DREVWUFJJVkFURSs5KQogI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgKFNJT0NERVZQUklWQVRFKzEwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmM2Nzg0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNfb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEZJTEVOQU1FOiBzbGljX29zLmgKLSAqCi0gKiBUaGVzZSBhcmUgdGhlIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zIHJlcXVpcmVkIGZvciB0aGUgU0xJQ09TUwotICogZHJpdmVyLCB3aGljaCBzaG91bGQgYWxsb3cgZm9yIGdyZWF0ZXIgcG9ydGFiaWxpdHkgdG8gb3RoZXIgT1Nlcy4KLSAqLwotI2lmbmRlZiBfU0xJQ19PU19TUEVDSUZJQ19IXwotI2RlZmluZSBfU0xJQ19PU19TUEVDSUZJQ19IXwotCi0jZGVmaW5lIEZBTFNFICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFRSVUUgICAgICAgICAgICAgICAgKDEpCi0KLSNkZWZpbmUgU0xJQ19TRUNTX1RPX0pJRkZTKHgpICAoKHgpICogSFopCi0jZGVmaW5lIFNMSUNfTVNfVE9fSklGRklFUyh4KSAgKFNMSUNfU0VDU19UT19KSUZGUygoeCkpIC8gMTAwMCkKLQotI2lmZGVmIERFQlVHX1JFR0lTVEVSX1RSQUNFCi0jZGVmaW5lIFdSSVRFX1JFRyhyZWcsIHZhbHVlLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ190eXBlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IDA7ICAgXAotCQlhZGFwdGVyLT5jYXJkLT5yZWdfb2Zmc2V0W2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IFwKLQkJKCh1bnNpZ25lZCBjaGFyICopKCZyZWcpKSAtIFwKLQkJKCh1bnNpZ25lZCBjaGFyICopYWRhcHRlci0+c2xpY19yZWdzKTsgXAotCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXgrK10gPSB2YWx1ZTsgIFwKLQkJaWYgKGFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID09IDMyKSBcCi0JCQlhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkJc2xpY19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpOyAgICAgICAgICAgIFwKLQl9Ci0jZGVmaW5lIFdSSVRFX1JFRzY0KGEsIHJlZywgdmFsdWUsIHJlZ2gsIHZhbGgsIGZsdXNoKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ190eXBlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IDE7ICAgICAgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ19vZmZzZXRbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gXAotCQkoKHVuc2lnbmVkIGNoYXIgKikoJnJlZykpIC0gXAotCQkoKHVuc2lnbmVkIGNoYXIgKilhZGFwdGVyLT5zbGljX3JlZ3MpOyBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ192YWx1ZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSB2YWx1ZTsgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ192YWx1ZWhbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXgrK10gPSB2YWxoOyAgXAotCQlpZiAoYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPT0gMzIpIFwKLQkJCWFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgXAotCQlzbGljX3JlZzY0X3dyaXRlKChhKSwgKCZyZWcpLCAodmFsdWUpLCAoJnJlZ2gpLCAodmFsaCksIFwKLQkJCQkoZmx1c2gpKTtcCi0JfQotI2Vsc2UKLSNkZWZpbmUgV1JJVEVfUkVHKHJlZywgdmFsdWUsIGZsdXNoKSBcCi0Jc2xpY19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpCi0jZGVmaW5lIFdSSVRFX1JFRzY0KGEsIHJlZywgdmFsdWUsIHJlZ2gsIHZhbGgsIGZsdXNoKSBcCi0Jc2xpY19yZWc2NF93cml0ZSgoYSksICgmcmVnKSwgKHZhbHVlKSwgKCZyZWdoKSwgKHZhbGgpLCAoZmx1c2gpKQotI2VuZGlmCi0KLSNlbmRpZiAgLyogX1NMSUNfT1NfU1BFQ0lGSUNfSF8gICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNidWlsZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDVlMDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCi0gKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCi0gKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRklMRU5BTUU6IHNsaWNidWlsZC5oCi0gKgotICogVGhlIGZvbGxvd2luZyBjb250YWlucyB0aGUgY29tcGlsZXIgZGlyZWN0aXZlIHN3aXRjaGVzIHVzZWQgZm9yCi0gKiBkaWZmZXJlbnQgU0xJQyBidWlsZCBvcHRpb25zLiAgVGhleSBjYW4gYWxsIGJlIHNldCBpbiB0aGUgTWFrZWZpbGUKLSAqIGJ1dCB0aGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgaGVyZS4KLSAqLwotI2lmbmRlZiBfU0xJQ19CVUlMRF9IXwotI2RlZmluZSBfU0xJQ19CVUlMRF9IXwotCi0jaWZuZGVmIFNMSUNfUFJPRFVDVElPTl9CVUlMRAotI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19GQUlMVVJFX1JFU0VUCi0jZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkJCTEKLSNlbmRpZgotI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2lmbmRlZiBTTElDX0FTU0VSVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19NQ0FTVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfTUNBU1RfRU5BQkxFRAkJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECi0jZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAotI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECQkwCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAotI2RlZmluZSBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAkJMQotI2VuZGlmCi0jaWZuZGVmIEFUS19ERUJVRwotI2RlZmluZSBBVEtfREVCVUcJCQkJMQotI2VuZGlmCi0jaWZuZGVmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECQkwCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAotI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCQkxCi0jZW5kaWYKLSNpZm5kZWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKLSNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0KLSNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJCTAKLSNlbmRpZgotI2lmbmRlZiBTVEFUU19USU1FUl9JTlRFUlZBTAotI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKLSNlbmRpZgotI2lmbmRlZiBQSU5HX1RJTUVSX0lOVEVSVkFMCi0jZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkxCi0jZW5kaWYKLQotI2VuZGlmICAgLyogX1NMSUNfQlVJTERfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NGU0NGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2RiZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KLSAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKLSAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBGSUxFTkFNRTogc2xpY2RiZy5oCi0gKgotICogQWxsIGRlYnVnIGFuZCBhc3NlcnRpb24tYmFzZWQgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaW5jbHVkZWQKLSAqIGluIHRoaXMgZmlsZSBmb3IgdGhlIFNMSUNPU1MgZHJpdmVyLgotICovCi0jaWZuZGVmIF9TTElDX0RFQlVHX0hfCi0jZGVmaW5lIF9TTElDX0RFQlVHX0hfCi0KLSNpZmRlZiBTTElDX0RFRkFVTFRfTE9HX0xFVkVMCi0jZWxzZQotI2RlZmluZSBTTElDTEVWRUwgICBLRVJOX0RFQlVHCi0jZW5kaWYKLSNkZWZpbmUgU0xJQ19ESVNQTEFZICAgICAgICAgICAgICBwcmludGsKLSNkZWZpbmUgREJHX0VSUk9SKG4sIGFyZ3MuLi4pICAgU0xJQ19ESVNQTEFZKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQotCi0jZGVmaW5lIFNMSUNfREVCVUdfTUVTU0FHRSAxCi0jaWYgU0xJQ19ERUJVR19NRVNTQUdFCi0vKiNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKSAgICAgIFNMSUNfRElTUExBWShTTElDTEVWRUwgbiwgIyNhcmdzKSovCi0jZGVmaW5lIERCR19NU0cobiwgYXJncy4uLikKLSNlbHNlCi0jZGVmaW5lIERCR19NU0cobiwgYXJncy4uLikKLSNlbmRpZgotCi0jaWZkZWYgQVNTRVJUCi0jdW5kZWYgQVNTRVJUCi0jZW5kaWYKLQotI2lmIFNMSUNfQVNTRVJUX0VOQUJMRUQKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFZBTElEX0FERFJFU1MocCkgICgxKQotI2Vsc2UKLSNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKCgodTMyKShwKSAmIDB4ODAwMDAwMDApIHx8ICgodTMyKShwKSA9PSAwKSkKLSNlbmRpZgotI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzICBsaW5lICVkXG4iLFwKLQkJX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSNlbmRpZgotI2lmbmRlZiBBU1NFUlRNU0cKLSNkZWZpbmUgQVNTRVJUTVNHKGEsbXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzIlwKLQkJCSJsaW5lICVkOiAlc1xuIixcCi0JCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fLCAobXNnKSk7ICAgICAgICAgICAgXAotCQlzbGljX2Fzc2VydF9mYWlsKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotI2VuZGlmCi0jZWxzZQotI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKGEpCi0jZW5kaWYKLSNpZm5kZWYgQVNTRVJUTVNHCi0jZGVmaW5lIEFTU0VSVE1TRyhhLCBtc2cpCi0jZW5kaWYKLSNlbmRpZiAvKiBTTElDX0FTU0VSVF9FTkFCTEVEICAqLwotCi0jZW5kaWYgIC8qICBfU0xJQ19ERUJVR19IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZHVtcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmE5YjQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiBOTyBMSUNFTlNFIFRPIEFOWSBBTEFDUklURUNIIFBBVEVOVCBDTEFJTSBJUyBHUkFOVEVEIEJZIEFOWSBDT1BZUklHSFQKLSAqIExJQ0VOU0UgVE8gVEhJUyBPUiBPVEhFUiBTT0ZUV0FSRS4gVEhJUyBTT0ZUV0FSRSBNQVkgQkUgQ09WRVJFRCBCWQotICogQUxBQ1JJVEVDSCBQQVRFTlRTIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVS5TLiBQQVRFTlQgTk9TLiA2LDIyNiw2ODAsCi0gKiA2LDI0NywwNjAsIDYsMzM0LDE1MywgNiwzODksNDc5LCA2LDM5Myw0ODcsIDYsNDI3LDE3MSwgNiw0MjcsMTczCi0gKiBhbmQgNiw0MzQsNjIwLgotICogVEhJUyBTT0ZUV0FSRSBJUyBOT1QgU1VCSkVDVCBUTyBUSEUgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgKEdQTCkuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZAotICogZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUKLSAqIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyCi0gKiBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICovCi0jaWZuZGVmIF9TTElDX0RVTVBfSF8KLSNkZWZpbmUgX1NMSUNfRFVNUF9IXwotCi0jZGVmaW5lIERFQlVHX1NVQ0NFU1MgICAwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFV0aWxpdHkgcHJvY2Vzc29yIHJlZ2lzdGVyIGxvY2F0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBVVElMSVRZX1JFU0VUICAgICAgIDB4MAotI2RlZmluZSBVVElMSVRZX0lTUF9BRERSICAgIDB4NCAgICAgLyogSW50ZXJydXB0IHN0YXR1cyBQb2ludGVyICovCi0jZGVmaW5lIFVUSUxJVFlfSVNSX0FERFIgICAgMHg4ICAgICAvKiBJbnRlcnJ1cHQgc3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVUSUxJVFlfSUNSX0FERFIgICAgMHhjICAgICAvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBVVElMSVRZX0NQUl9BRERSICAgIDB4MTAgICAgLyogQ29tbWFuZCBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVUSUxJVFlfRFBSX0FERFIgICAgMHgxNCAgICAvKiBEYXRhIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVRJTElUWV9ETVBfVFJRICAgICAweDE4ICAgIC8qIER1bXAgcXVldWUgb250byBBTFUgZm9yIGFuYWx5c2VyICovCi0jZGVmaW5lIFVUSUxJVFlfVVBQX0FERFIgICAgMHgxYyAgICAvKiBCaXRzIDYzLTMyIG9mIGNtZC9kYXRhIHBvaW50ZXIgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogSU5JQyBzdGF0dXMgcmVnaXN0ZXIgYml0cwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0xJQ19JU1JfQ0MgICAgICAgICAweDEwMDAwMDAwICAvKiBDb21tYW5kIGNvbXBsZXRlIC0gc3luY2hyb25vdXMgKi8KLSNkZWZpbmUgU0xJQ19JU1JfRVJSICAgICAgICAweDAxMDAwMDAwICAvKiBDb21tYW5kIEVycm9yIC0gc3luY2hyb25vdXMgKi8KLSNkZWZpbmUgU0xJQ19JU1JfQ01EX01BU0sgICAweDExMDAwMDAwICAvKiBDb21tYW5kIHN0YXR1cyBtYXNrICovCi0jZGVmaW5lIFNMSUNfSVNSX1RQSCAgICAgICAgMHgwMDA4MDAwMCAgLyogVHJhbnNtaXQgcHJvY2Vzc29yIGhhbHRlZCAtIGFzeW5jICovCi0jZGVmaW5lIFNMSUNfSVNSX1JQSCAgICAgICAgMHgwMDA0MDAwMCAgLyogUmVjZWl2ZSBwcm9jZXNzb3IgaGFsdGVkIC0gYXN5bmMgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogSU5JQyBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0xJQ19JQ1JfT0ZGICAgICAgICAwICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGRpc2FibGVkICovCi0jZGVmaW5lIFNMSUNfSUNSX09OICAgICAgICAgMSAgICAgICAgICAgLyogSW50ZXJydXB0cyBlbmFibGVkICovCi0jZGVmaW5lIFNMSUNfSUNSX01BU0sgICAgICAgMiAgICAgICAgICAgLyogSW50ZXJydXB0cyBtYXNrZWQgKi8KLQotI2RlZmluZSBXUklURV9EUkVHKHJlZywgdmFsdWUsIGZsdXNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd3JpdGVsKCh2YWx1ZSksIChyZWcpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoZmx1c2gpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JbWIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29tbWFuZCBGb3JtYXQKLSAqCi0gKiBFYWNoIGNvbW1hbmQgY29udGFpbnMgYSBjb21tYW5kIGJ5dGUgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotICoKLSAqICBiaXRzOiAgIDctMyAgICAgMiAgICAgICAxLTAKLSAqICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICBjb21tYW5kICAgICBBbHQuIFByb2MgICBQcm9jZXNzb3IKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTWFjcm8gdG8gY3JlYXRlIHRoZSBjb21tYW5kIGJ5dGUgZ2l2ZW4gdGhlIGNvbW1hbmQsIEFsdC4gUHJvYywgYW5kCi0gKiBQcm9jZXNzb3IgdmFsdWVzLiAgTm90ZSB0aGF0IHRoZSBtYWNybyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlcyBhcmUKLSAqIHByZXNoaWZ0ZWQuICBUaGF0IGlzLCB0aGUgdmFsdWVzIGZvciBhbHQuIHByb2MgYXJlIDAgZm9yIHRyYW5zbWl0IGFuZAotICogNCBmb3IgcmVjZWl2ZS4KLSAqLwotI2RlZmluZSBDT01NQU5EX0JZVEUoY29tbWFuZCwgYWx0X3Byb2MsIHByb2MpICgoY29tbWFuZCkgfCAoYWx0X3Byb2MpIHwgKHByb2MpKQotCi0vKgotICogQ29tbWFuZCB2YWx1ZXMKLSAqLwotI2RlZmluZSBDTURfSEFMVCAgICAgICAgMHgwICAgICAvKiBTZW5kIGEgaGFsdCB0byB0aGUgSU5JQyAqLwotI2RlZmluZSBDTURfUlVOICAgICAgICAgMHg4ICAgICAvKiBTdGFydCB0aGUgaGFsdGVkIElOSUMgKi8KLSNkZWZpbmUgQ01EX1NURVAgICAgICAgIDB4MTAgICAgLyogU2luZ2xlIHN0ZXAgdGhlIGluaWMgKi8KLSNkZWZpbmUgQ01EX0JSRUFLICAgICAgIDB4MTggICAgLyogU2V0IGEgYnJlYWtwb2ludCAtIDggYnl0ZSBjb21tYW5kICovCi0jZGVmaW5lIENNRF9SRVNFVF9CUkVBSyAweDIwICAgIC8qIFJlc2V0IGEgYnJlYWtwb2ludCAtIDggYnl0ZSBjbWQgKi8KLSNkZWZpbmUgQ01EX0RVTVAgICAgICAgIDB4MjggICAgLyogRHVtcCBJTklDIG1lbW9yeSAtIDggYnl0ZSBjb21tYW5kICovCi0jZGVmaW5lIENNRF9MT0FEICAgICAgICAweDMwICAgIC8qIExvYWQgSU5JQyBtZW1vcnkgLSA4IGJ5dGUgY29tbWFuZCAqLwotI2RlZmluZSBDTURfTUFQICAgICAgICAgMHgzOCAgICAvKiBNYXAgb3V0IGEgUk9NIGluc3RydWN0aW9uIC0gOCBCQyAqLwotI2RlZmluZSBDTURfQ0FNX09QUyAgICAgMHgzOCAgICAvKiBwZXJmb3JtIG9wcyBvbiBzcGVjaWZpYyBDQU0gKi8KLSNkZWZpbmUgQ01EX1hNVCAgICAgICAgIDB4NDAgICAgLyogVHJhbnNtaXQgZnJhbWUgKi8KLSNkZWZpbmUgQ01EX1JDViAgICAgICAgIDB4NDggICAgLyogUmVjZWl2ZSBmcmFtZSAqLwotCi0vKgotICogQWx0LiBQcm9jIHZhbHVlcwotICoKLSAqIFdoZW4gdGhlIHByb2MgdmFsdWUgaXMgc2V0IHRvIHRoZSB1dGlsaXR5IHByb2Nlc3NvciwgdGhlIEFsdC4gUHJvYwotICogc3BlY2lmaWVzIHdoaWNoIHByb2Nlc3NvciBoYW5kbGVzIHRoZSBkZWJ1Z2dpbmcuCi0gKi8KLSNkZWZpbmUgQUxUX1BST0NfVFJBTlNNSVQgICAweDAKLSNkZWZpbmUgQUxUX1BST0NfUkVDRUlWRSAgICAweDQKLQotLyoKLSAqIFByb2MgdmFsdWVzCi0gKi8KLSNkZWZpbmUgUFJPQ19JTlZBTElEICAgICAgICAweDAKLSNkZWZpbmUgUFJPQ19OT05FICAgICAgICAgICAweDAgIC8qIEdpZ2FiaXQgdXNlICovCi0jZGVmaW5lIFBST0NfVFJBTlNNSVQgICAgICAgMHgxCi0jZGVmaW5lIFBST0NfUkVDRUlWRSAgICAgICAgMHgyCi0jZGVmaW5lIFBST0NfVVRJTElUWSAgICAgICAgMHgzCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiA4IGJ5dGUgY29tbWFuZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogQnJlYWsgYW5kIFJlc2V0IEJyZWFrIGNvbW1hbmQgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBCUkVBSyB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgICByZXN2ZDsKLSAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogTnVtYmVyIG9mIGV4ZWN1dGlvbnMgYmVmb3JlIGJyZWFrICovCi0gICAgdTMyICAgYWRkcjsgICAgICAgLyogQWRkcmVzcyBvZiBicmVhayBwb2ludCAqLwotfTsKLQotLyoKLSAqIER1bXAgYW5kIExvYWQgY29tbWFuZCBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IGR1bXBfY21kIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBjbWQ7ICAgICAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgICAgIGRlc2M7ICAgICAgIC8qIERlc2NyaXB0b3IgdmFsdWVzIC0gZGVmaW5lZCBiZWxvdyAqLwotICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBudW1iZXIgb2YgNCBieXRlIHdvcmRzIHRvIGJlIHRyYW5zZmVycmVkICovCi0gICAgdTMyICAgYWRkcjsgICAgICAgLyogc3RhcnQgYWRkcmVzcyBvZiBkdW1wIG9yIGxvYWQgKi8KLX07Ci0KLS8qCi0gKiBSZWNlaXZlIG9yIFRyYW5zbWl0IGEgZnJhbWUuCi0gKi8KLXN0cnVjdCBSQ1ZfT1JfWE1UX0ZSQU1FIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBjb21tYW5kOyAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgICAgIE1hY0lkOyAgICAgIC8qIE1hYyBJRCBvZiBpbnRlcmZhY2UgLSB0cmFuc21pdCBvbmx5ICovCi0gICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIExlbmd0aCBvZiBmcmFtZSBpbiBieXRlcyAqLwotICAgIHUzMiAgIHBhZDsgICAgICAgIC8qIG5vdCB1c2VkICovCi19OwotCi0vKgotICogVmFsdWVzIG9mIGRlc2MgZmllbGQgaW4gRFVNUF9PUl9MT0FEIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIERFU0NfUkZJTEUgICAgICAgICAgMHgwICAgICAvKiBSZWdpc3RlciBmaWxlICovCi0jZGVmaW5lIERFU0NfU1JBTSAgICAgICAgICAgMHgxICAgICAvKiBTUkFNICovCi0jZGVmaW5lIERFU0NfRFJBTSAgICAgICAgICAgMHgyICAgICAvKiBEUkFNICovCi0jZGVmaW5lIERFU0NfUVVFVUUgICAgICAgICAgMHgzICAgICAvKiBxdWV1ZXMgKi8KLSNkZWZpbmUgREVTQ19SRUcgICAgICAgICAgICAweDQgICAgIC8qIEdlbmVyYWwgcmVnaXN0ZXJzIChwYywgc3RhdHVzLCBldGMpICovCi0jZGVmaW5lIERFU0NfU0VOU0UgICAgICAgICAgMHg1ICAgICAvKiBTZW5zZSByZWdpc3RlciAqLwotCi0vKiBEZXNjcmlwdG9yIGZpZWxkIGRlZmluaXRpb25zIGZvciBDTURfRFVNUF9DQU0gKi8KLSNkZWZpbmUgRFVNUF9DQU1fQSAgICAgICAgICAgICAgMAotI2RlZmluZSBEVU1QX0NBTV9CICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgLyogdW51c2VkIGF0IHByZXNlbnQgKi8KLSNkZWZpbmUgRFVNUF9DQU1fQyAgICAgICAgICAgICAgMgotI2RlZmluZSBEVU1QX0NBTV9EICAgICAgICAgICAgICAzCi0jZGVmaW5lIFNFQVJDSF9DQU1fQSAgICAgICAgICAgIDQKLSNkZWZpbmUgU0VBUkNIX0NBTV9DICAgICAgICAgICAgNQotCi0vKgotICogTWFwIGNvbW1hbmQgdG8gcmVwbGFjZSBhIGNvbW1hbmQgaW4gUk9NIHdpdGggYSBjb21tYW5kIGluIFdDUwotICovCi1zdHJ1Y3QgTUFQIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgbm90X3VzZWRbM107Ci0gICAgdXNob3J0ICBtYXBfdG87ICAgICAvKiBJbnN0cnVjdGlvbiBhZGRyZXNzIGluIFdDUyAqLwotICAgIHVzaG9ydCAgbWFwX291dDsgICAgLyogSW5zdHJ1Y3Rpb24gYWRkcmVzcyBpbiBST00gKi8KLX07Ci0KLS8qCi0gKiBNaXNjIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgU0xJQ19NQVhfUVVFVUUgICAgICAgMzIgLyogVG90YWwgIyBvZiBxdWV1ZXMgb24gdGhlIElOSUMgKDAtMzEpKi8KLSNkZWZpbmUgU0xJQ180TUFYX1JFRyAgICAgICA1MTIgLyogVG90YWwgIyBvZiA0LXBvcnQgZmlsZS1yZWdpc3RlcnMgICAgKi8KLSNkZWZpbmUgU0xJQ18xTUFYX1JFRyAgICAgICAzODQgLyogVG90YWwgIyBvZiBmaWxlLXJlZ2lzdGVycyAgICAgICAgICAgKi8KLSNkZWZpbmUgU0xJQ19HQk1BWF9SRUcgICAgIDEwMjQgLyogVG90YWwgIyBvZiBHYml0IGZpbGUtcmVnaXN0ZXJzICAgICAgKi8KLSNkZWZpbmUgU0xJQ19OVU1fUkVHICAgICAgICAgMzIgLyogbm9uLWZpbGUtcmVnaXN0ZXJzID0gTlVNX1JFRyBpbiB0bS1zaW1iYS5oICovCi0jZGVmaW5lIFNMSUNfR0JfQ0FNQV9TWkUgICAgIDMyCi0jZGVmaW5lIFNMSUNfR0JfQ0FNQl9TWkUgICAgIDE2Ci0jZGVmaW5lIFNMSUNfR0JfQ0FNQUJfU1pFICAgIDMyCi0jZGVmaW5lIFNMSUNfR0JfQ0FNQ19TWkUgICAgIDE2Ci0jZGVmaW5lIFNMSUNfR0JfQ0FNRF9TWkUgICAgIDE2Ci0jZGVmaW5lIFNMSUNfR0JfQ0FNQ0RfU1pFICAgIDMyCi0KLS8qCi0gKiBDb3JlZHVtcCBoZWFkZXIgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBDT1JFX1EgewotICAgIHUzMiAgIHF1ZXVlT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIHF1ZXVlICovCi0gICAgdTMyICAgcXVldWVzaXplOyAgICAgICAgICAvKiBzaXplIG9mIHF1ZXVlICovCi19OwotCi0jZGVmaW5lIERSSVZFUl9OQU1FX1NJWkUgICAgMzIKLQotc3RydWN0IHNsaWNjb3JlX2hkciB7Ci0gICAgdW5zaWduZWQgY2hhciBkcml2ZXJfdmVyc2lvbltEUklWRVJfTkFNRV9TSVpFXTsgLyogRHJpdmVyIHZlcnNpb24gc3RyaW5nICovCi0gICAgdTMyICAgUmN2UmVnT2ZmOyAgICAgICAgICAvKiBPZmZzZXQgb2YgcmVjZWl2ZSByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBSY3ZSZWdzaXplOyAgICAgICAgIC8qIHNpemUgb2YgcmVjZWl2ZSByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBYbXRSZWdPZmY7ICAgICAgICAgIC8qIE9mZnNldCBvZiB0cmFuc21pdCByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBYbXRSZWdzaXplOyAgICAgICAgIC8qIHNpemUgb2YgdHJhbnNtaXQgcmVnaXN0ZXJzICovCi0gICAgdTMyICAgRmlsZVJlZ09mZjsgICAgICAgICAvKiBPZmZzZXQgb2YgcmVnaXN0ZXIgZmlsZSAqLwotICAgIHUzMiAgIEZpbGVSZWdzaXplOyAgICAgICAgLyogc2l6ZSBvZiByZWdpc3RlciBmaWxlICovCi0gICAgdTMyICAgU3JhbU9mZjsgICAgICAgICAgICAvKiBPZmZzZXQgb2YgU3JhbSAqLwotICAgIHUzMiAgIFNyYW1zaXplOyAgICAgICAgICAgLyogc2l6ZSBvZiBTcmFtICovCi0gICAgdTMyICAgRHJhbU9mZjsgICAgICAgICAgICAvKiBPZmZzZXQgb2YgRHJhbSAqLwotICAgIHUzMiAgIERyYW1zaXplOyAgICAgICAgICAgLyogc2l6ZSBvZiBEcmFtICovCi0gICAgQ09SRV9RICAgIHF1ZXVlc1tTTElDX01BWF9RVUVVRV07IC8qIHNpemUgYW5kIG9mZnNldHMgb2YgcXVldWVzICovCi0gICAgdTMyICAgQ2FtQU1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEEgY29udGVudHMgKi8KLSAgICB1MzIgICBDYW1BU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEEgKi8KLSAgICB1MzIgICBDYW1CTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQiBjb250ZW50cyAqLwotICAgIHUzMiAgIENhbUJTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQiAqLwotICAgIHUzMiAgIENhbUNNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBDIGNvbnRlbnRzICovCi0gICAgdTMyICAgQ2FtQ1NpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBDICovCi0gICAgdTMyICAgQ2FtRE1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEQgY29udGVudHMgKi8KLSAgICB1MzIgICBDYW1EU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEQgKi8KLX07Ci0KLS8qCi0gKiBkZWZpbml0aW9ucyBuZWVkZWQgZm9yIG91ciBrZXJuZWwtbW9kZSBnZGIgc3R1Yi4KLSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRGVmaW5pdGlvbnMgJiBUeXBlZGVmcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBCVUZNQVggICAgICAweDIwMDAwIC8qIDEyOGsgLSBzaXplIG9mIGlucHV0L291dHB1dCBidWZmZXIgKi8KLSNkZWZpbmUgQlVGTUFYUDIgICAgNSAgICAgICAvKiAyKio1ICgzMikgNEsgcGFnZXMgKi8KLQotI2RlZmluZSBJT0NUTF9TSU1CQV9CUkVBSyAgICAgICAgICAgX0lPVygncycsIDAsIHVuc2lnbmVkIGxvbmcpCi0vKiAjZGVmaW5lIElPQ1RMX1NJTUJBX0lOSVQgICAgICAgICAgICBfSU9XKCdzJywgMSwgdW5zaWduZWQgbG9uZykgKi8KLSNkZWZpbmUgSU9DVExfU0lNQkFfS0lMTF9UR1RfUFJPQyAgIF9JT1coJ3MnLCAyLCB1bnNpZ25lZCBsb25nKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHbG9iYWwgdmFyaWFibGVzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFRIUkVBRFJFQ0VJVkUgICAxICAgLyogYml0IDAgb2YgU3RvcHBlZFRocmVhZHMgKi8KLSNkZWZpbmUgVEhSRUFEVFJBTlNNSVQgIDIgICAvKiBiaXQgMSBvZiBTdG9wcGVkVGhyZWFkcyAqLwotI2RlZmluZSBUSFJFQURCT1RIICAgICAgMyAgIC8qIGJpdCAwIGFuZCAxLi4gKi8KLQotI2VuZGlmICAvKiAgX1NMSUNfRFVNUF9IICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaAppbmRleCBkMDNlOTBiLi42Mjc1ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaApAQCAtNDEsMzAwICs0MSwyODYgQEAKICNpZm5kZWYgX19TTElDSFdfSF9fCiAjZGVmaW5lIF9fU0xJQ0hXX0hfXwogCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCAgICAweDEzOUEKLSNkZWZpbmUgU0xJQ18xR0JfREVWSUNFX0lEICAgICAgICAgIDB4MDAwNQotI2RlZmluZSBTTElDXzJHQl9ERVZJQ0VfSUQgICAgICAgICAgMHgwMDA3ICAvKk9hc2lzIERldmljZSBJRCAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0gJMHgxMzlBCisjZGVmaW5lIFNMSUNfMUdCX0RFVklDRV9JRAkJMHgwMDA1CisjZGVmaW5lIFNMSUNfMkdCX0RFVklDRV9JRAkJMHgwMDA3CS8qIE9hc2lzIERldmljZSBJRCAqLwogCi0jZGVmaW5lIFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQgICAweDAwMDgKKyNkZWZpbmUgU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRAkweDAwMDgKIAotI2RlZmluZSBTTElDX05CUl9NQUNTICAgICAgNAorI2RlZmluZSBTTElDX05CUl9NQUNTCQk0CiAKLSNkZWZpbmUgU0xJQ19SQ1ZCVUZfU0laRSAgICAgICAgMjA0OAotI2RlZmluZSBTTElDX1JDVkJVRl9IRUFEU0laRSAgICAzNAotI2RlZmluZSBTTElDX1JDVkJVRl9UQUlMU0laRSAgICAwCi0jZGVmaW5lIFNMSUNfUkNWQlVGX0RBVEFTSVpFICAgIChTTElDX1JDVkJVRl9TSVpFIC0gKFNMSUNfUkNWQlVGX0hFQURTSVpFICtcCi0JCQkJCVNMSUNfUkNWQlVGX1RBSUxTSVpFKSkKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfU0laRQkyMDQ4CisjZGVmaW5lIFNMSUNfUkNWQlVGX0hFQURTSVpFCTM0CisjZGVmaW5lIFNMSUNfUkNWQlVGX1RBSUxTSVpFCTAKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfREFUQVNJWkUJKFNMSUNfUkNWQlVGX1NJWkUgLQkJXAorCQkJCSAoU0xJQ19SQ1ZCVUZfSEVBRFNJWkUgKwlcCisJCQkJICBTTElDX1JDVkJVRl9UQUlMU0laRSkpCiAKLSNkZWZpbmUgVkdCU1RBVF9YUEVSUiAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBWR0JTVEFUX1hFUlJTSEZUICAgICAgICAyNQotI2RlZmluZSBWR0JTVEFUX1hDU0VSUiAgICAgICAgICAweDIzCi0jZGVmaW5lIFZHQlNUQVRfWFVGTE9XICAgICAgICAgIDB4MjIKLSNkZWZpbmUgVkdCU1RBVF9YSExFTiAgICAgICAgICAgMHgyMAotI2RlZmluZSBWR0JTVEFUX05FVEVSUiAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFZHQlNUQVRfTkVSUlNIRlQgICAgICAgIDE2Ci0jZGVmaW5lIFZHQlNUQVRfTkVSUk1TSyAgICAgICAgIDB4MWZmCi0jZGVmaW5lIFZHQlNUQVRfTkNTRVJSICAgICAgICAgIDB4MTAzCi0jZGVmaW5lIFZHQlNUQVRfTlVGTE9XICAgICAgICAgIDB4MTAyCi0jZGVmaW5lIFZHQlNUQVRfTkhMRU4gICAgICAgICAgIDB4MTAwCi0jZGVmaW5lIFZHQlNUQVRfTE5LRVJSICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgVkdCU1RBVF9MRVJSTVNLICAgICAgICAgMHhmZgotI2RlZmluZSBWR0JTVEFUX0xERUFSTFkgICAgICAgICAweDg2Ci0jZGVmaW5lIFZHQlNUQVRfTEJPRkxPICAgICAgICAgIDB4ODUKLSNkZWZpbmUgVkdCU1RBVF9MQ09ERVJSICAgICAgICAgMHg4NAotI2RlZmluZSBWR0JTVEFUX0xEQkxOQkwgICAgICAgICAweDgzCi0jZGVmaW5lIFZHQlNUQVRfTENSQ0VSUiAgICAgICAgIDB4ODIKLSNkZWZpbmUgVkdCU1RBVF9MT0ZMTyAgICAgICAgICAgMHg4MQotI2RlZmluZSBWR0JTVEFUX0xVRkxPICAgICAgICAgICAweDgwCi0jZGVmaW5lIElSSEREUl9GTEVOX01TSyAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgSVJIRERSX1NWQUxJRCAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBJUkhERFJfRVJSICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRfODAyT0UgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVF9UUE9GTE8gICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl84MDJVRSAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX1JDVkUgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfQlVGRiAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9DQVJSRSAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0xPTkdFICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfUFJFQSAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9DUkMgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0RSQkwgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfQ09ERSAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9UUENTVU0gICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX1RQSExFTiAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfSVBDU1VNICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBWUkhTVEFUQl9JUExFUlIgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0lQSEVSUiAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgU0xJQ19NQVg2NF9CQ05UICAgICAgICAgMjMKLSNkZWZpbmUgU0xJQ19NQVgzMl9CQ05UICAgICAgICAgMjYKLSNkZWZpbmUgSUhDTURfWE1UX1JFUSAgICAgICAgICAgMHgwMQotI2RlZmluZSBJSEZMR19JRlNIRlQgICAgICAgICAgICAyCi0jZGVmaW5lIFNMSUNfUlNQQlVGX1NJWkUgICAgICAgIDMyCisjZGVmaW5lIFZHQlNUQVRfWFBFUlIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9YRVJSU0hGVAkyNQorI2RlZmluZSBWR0JTVEFUX1hDU0VSUgkJMHgyMworI2RlZmluZSBWR0JTVEFUX1hVRkxPVwkJMHgyMgorI2RlZmluZSBWR0JTVEFUX1hITEVOCQkweDIwCisjZGVmaW5lIFZHQlNUQVRfTkVURVJSCQkweDAxMDAwMDAwCisjZGVmaW5lIFZHQlNUQVRfTkVSUlNIRlQJMTYKKyNkZWZpbmUgVkdCU1RBVF9ORVJSTVNLCQkweDFmZgorI2RlZmluZSBWR0JTVEFUX05DU0VSUgkJMHgxMDMKKyNkZWZpbmUgVkdCU1RBVF9OVUZMT1cJCTB4MTAyCisjZGVmaW5lIFZHQlNUQVRfTkhMRU4JCTB4MTAwCisjZGVmaW5lIFZHQlNUQVRfTE5LRVJSCQkweDAwMDAwMDgwCisjZGVmaW5lIFZHQlNUQVRfTEVSUk1TSwkJMHhmZgorI2RlZmluZSBWR0JTVEFUX0xERUFSTFkJCTB4ODYKKyNkZWZpbmUgVkdCU1RBVF9MQk9GTE8JCTB4ODUKKyNkZWZpbmUgVkdCU1RBVF9MQ09ERVJSCQkweDg0CisjZGVmaW5lIFZHQlNUQVRfTERCTE5CTAkJMHg4MworI2RlZmluZSBWR0JTVEFUX0xDUkNFUlIJCTB4ODIKKyNkZWZpbmUgVkdCU1RBVF9MT0ZMTwkJMHg4MQorI2RlZmluZSBWR0JTVEFUX0xVRkxPCQkweDgwCisjZGVmaW5lIElSSEREUl9GTEVOX01TSwkJMHgwMDAwZmZmZgorI2RlZmluZSBJUkhERFJfU1ZBTElECQkweDgwMDAwMDAwCisjZGVmaW5lIElSSEREUl9FUlIJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVF84MDJPRQkJMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUX1RQT0ZMTwkJMHgxMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl84MDJVRQkJMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9SQ1ZFCQkweDQwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0JVRkYJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ0FSUkUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfTE9OR0UJCTB4MDIwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfUFJFQQkJMHgwMTAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9DUkMJCTB4MDA4MDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfRFJCTAkJMHgwMDQwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9DT0RFCQkweDAwMjAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1RQQ1NVTQkJMHgwMDEwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9UUEhMRU4JCTB4MDAwODAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBDU1VNCQkweDAwMDQwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQTEVSUgkJMHgwMDAyMDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUEhFUlIJCTB4MDAwMTAwMDAKKyNkZWZpbmUgU0xJQ19NQVg2NF9CQ05UCQkyMworI2RlZmluZSBTTElDX01BWDMyX0JDTlQJCTI2CisjZGVmaW5lIElIQ01EX1hNVF9SRVEJCTB4MDEKKyNkZWZpbmUgSUhGTEdfSUZTSEZUCQkyCisjZGVmaW5lIFNMSUNfUlNQQlVGX1NJWkUJMzIKIAotI2RlZmluZSBTTElDX1JFU0VUX01BR0lDICAgICAgICAweERFQUQKLSNkZWZpbmUgSUNSX0lOVF9PRkYgICAgICAgICAgICAgMAotI2RlZmluZSBJQ1JfSU5UX09OICAgICAgICAgICAgICAxCi0jZGVmaW5lIElDUl9JTlRfTUFTSyAgICAgICAgICAgIDIKKyNkZWZpbmUgU0xJQ19SRVNFVF9NQUdJQwkweERFQUQKKyNkZWZpbmUgSUNSX0lOVF9PRkYJCTAKKyNkZWZpbmUgSUNSX0lOVF9PTgkJMQorI2RlZmluZSBJQ1JfSU5UX01BU0sJCTIKIAotI2RlZmluZSBJU1JfRVJSICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIElTUl9SQ1YgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgSVNSX0NNRCAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBJU1JfSU8gICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCi0jZGVmaW5lIElTUl9VUEMgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgSVNSX0xFVkVOVCAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBJU1JfUk1JU1MgICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIElTUl9VUENFUlIgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgSVNSX1hEUk9QICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBJU1JfVVBDQlNZICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIElTUl9FVk1TSyAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgSVNSX1BJTkdNQVNLICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBJU1JfUElOR0RTTUFTSyAgICAgICAgICAweDAwNzEwMDAwCi0jZGVmaW5lIElTUl9VUENNQVNLICAgICAgICAgICAgIDB4MTEwMDAwMDAKLSNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTTElDX1dDU19DT01QQVJFICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNIICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTTElDX1BNX01BWFBBVFRFUk5TICAgICA2Ci0jZGVmaW5lIFNMSUNfUE1fUEFUVEVSTlNJWkUgICAgIDEyOAotI2RlZmluZSBTTElDX1BNQ0FQU19XQUtFT05MQU4gICAweDAwMDAwMDAxCi0jZGVmaW5lIE1JSUNSX1JFR19QQ1IgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTUlJQ1JfUkVHXzQgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBNSUlDUl9SRUdfOSAgICAgICAgICAgICAweDAwMDkwMDAwCi0jZGVmaW5lIE1JSUNSX1JFR18xNiAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUENSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIFBDUl9QT1dFUkRPV04gICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBQQ1JfU1BFRURfMTAwICAgICAgICAgICAweDIwMDAKLSNkZWZpbmUgUENSX1NQRUVEXzEwMDAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIFBDUl9BVVRPTkVHICAgICAgICAgICAgIDB4MTAwMAotI2RlZmluZSBQQ1JfQVVUT05FR19SU1QgICAgICAgICAweDAyMDAKLSNkZWZpbmUgUENSX0RVUExFWF9GVUxMICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIFBTUl9MSU5LVVAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJU1JfRVJSCQkJMHg4MDAwMDAwMAorI2RlZmluZSBJU1JfUkNWCQkJMHg0MDAwMDAwMAorI2RlZmluZSBJU1JfQ01ECQkJMHgyMDAwMDAwMAorI2RlZmluZSBJU1JfSU8JCQkweDYwMDAwMDAwCisjZGVmaW5lIElTUl9VUEMJCQkweDEwMDAwMDAwCisjZGVmaW5lIElTUl9MRVZFTlQJCTB4MDgwMDAwMDAKKyNkZWZpbmUgSVNSX1JNSVNTCQkweDAyMDAwMDAwCisjZGVmaW5lIElTUl9VUENFUlIJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSVNSX1hEUk9QCQkweDAwODAwMDAwCisjZGVmaW5lIElTUl9VUENCU1kJCTB4MDAwMjAwMDAKKyNkZWZpbmUgSVNSX0VWTVNLCQkweGZmZmYwMDAwCisjZGVmaW5lIElTUl9QSU5HTUFTSwkJMHgwMDcwMDAwMAorI2RlZmluZSBJU1JfUElOR0RTTUFTSwkJMHgwMDcxMDAwMAorI2RlZmluZSBJU1JfVVBDTUFTSwkJMHgxMTAwMDAwMAorI2RlZmluZSBTTElDX1dDU19TVEFSVAkJMHg4MDAwMDAwMAorI2RlZmluZSBTTElDX1dDU19DT01QQVJFCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfQkVHSU4JMHg0MDAwMDAwMAorI2RlZmluZSBTTElDX1JDVldDU19GSU5JU0gJMHg4MDAwMDAwMAorI2RlZmluZSBTTElDX1BNX01BWFBBVFRFUk5TCTYKKyNkZWZpbmUgU0xJQ19QTV9QQVRURVJOU0laRQkxMjgKKyNkZWZpbmUgU0xJQ19QTUNBUFNfV0FLRU9OTEFOCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJQ1JfUkVHX1BDUgkJMHgwMDAwMDAwMAorI2RlZmluZSBNSUlDUl9SRUdfNAkJMHgwMDA0MDAwMAorI2RlZmluZSBNSUlDUl9SRUdfOQkJMHgwMDA5MDAwMAorI2RlZmluZSBNSUlDUl9SRUdfMTYJCTB4MDAxMDAwMDAKKyNkZWZpbmUgUENSX1JFU0VUCQkweDgwMDAKKyNkZWZpbmUgUENSX1BPV0VSRE9XTgkJMHgwODAwCisjZGVmaW5lIFBDUl9TUEVFRF8xMDAJCTB4MjAwMAorI2RlZmluZSBQQ1JfU1BFRURfMTAwMAkJMHgwMDQwCisjZGVmaW5lIFBDUl9BVVRPTkVHCQkweDEwMDAKKyNkZWZpbmUgUENSX0FVVE9ORUdfUlNUCQkweDAyMDAKKyNkZWZpbmUgUENSX0RVUExFWF9GVUxMCQkweDAxMDAKKyNkZWZpbmUgUFNSX0xJTktVUAkJMHgwMDA0CiAKLSNkZWZpbmUgUEFSX0FEVjEwMEZEICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIFBBUl9BRFYxMDBIRCAgICAgICAgICAgIDB4MDA4MAotI2RlZmluZSBQQVJfQURWMTBGRCAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgUEFSX0FEVjEwSEQgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFBBUl9BU1lNUEFVU0UgICAgICAgICAgIDB4MEMwMAotI2RlZmluZSBQQVJfODAyXzMgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgUEFSX0FEVjEwMEZECQkweDAxMDAKKyNkZWZpbmUgUEFSX0FEVjEwMEhECQkweDAwODAKKyNkZWZpbmUgUEFSX0FEVjEwRkQJCTB4MDA0MAorI2RlZmluZSBQQVJfQURWMTBIRAkJMHgwMDIwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0UJCTB4MEMwMAorI2RlZmluZSBQQVJfODAyXzMJCTB4MDAwMQogCi0jZGVmaW5lIFBBUl9BRFYxMDAwWEZEICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBQQVJfQURWMTAwMFhIRCAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgUEFSX0FTWU1QQVVTRV9GSUJFUiAgICAgMHgwMTgwCisjZGVmaW5lIFBBUl9BRFYxMDAwWEZECQkweDAwMjAKKyNkZWZpbmUgUEFSX0FEVjEwMDBYSEQJCTB4MDA0MAorI2RlZmluZSBQQVJfQVNZTVBBVVNFX0ZJQkVSCTB4MDE4MAogCi0jZGVmaW5lIFBHQ19BRFYxMDAwRkQgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBQR0NfQURWMTAwMEhEICAgICAgICAgICAweDAxMDAKLSNkZWZpbmUgU0VFUV9MSU5LRkFJTCAgICAgICAgICAgMHg0MDAwCi0jZGVmaW5lIFNFRVFfU1BFRUQgICAgICAgICAgICAgIDB4MDA4MAotI2RlZmluZSBTRUVRX0RVUExFWCAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgVERLX0RVUExFWCAgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIFRES19TUEVFRCAgICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPTiAgICAgICAweDAwNjgKLSNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST0ZGICAgICAgMHgwMDA4Ci0jZGVmaW5lIE1SVl9TUEVFRF8xMDAwICAgICAgICAgIDB4ODAwMAotI2RlZmluZSBNUlZfU1BFRURfMTAwICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgTVJWX1NQRUVEXzEwICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIE1SVl9GVUxMRFVQTEVYICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBNUlZfTElOS1VQICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgUEdDX0FEVjEwMDBGRAkJMHgwMjAwCisjZGVmaW5lIFBHQ19BRFYxMDAwSEQJCTB4MDEwMAorI2RlZmluZSBTRUVRX0xJTktGQUlMCQkweDQwMDAKKyNkZWZpbmUgU0VFUV9TUEVFRAkJMHgwMDgwCisjZGVmaW5lIFNFRVFfRFVQTEVYCQkweDAwNDAKKyNkZWZpbmUgVERLX0RVUExFWAkJMHgwODAwCisjZGVmaW5lIFRES19TUEVFRAkJMHgwNDAwCisjZGVmaW5lIE1SVl9SRUcxNl9YT1ZFUk9OCTB4MDA2OAorI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPRkYJMHgwMDA4CisjZGVmaW5lIE1SVl9TUEVFRF8xMDAwCQkweDgwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwMAkJMHg0MDAwCisjZGVmaW5lIE1SVl9TUEVFRF8xMAkJMHgwMDAwCisjZGVmaW5lIE1SVl9GVUxMRFVQTEVYCQkweDIwMDAKKyNkZWZpbmUgTVJWX0xJTktVUAkJMHgwNDAwCiAKLSNkZWZpbmUgR0lHX0xJTktVUCAgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEdJR19GVUxMRFVQTEVYICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBHSUdfU1BFRURfTUFTSyAgICAgICAgICAweDAwMEMKLSNkZWZpbmUgR0lHX1NQRUVEXzEwMDAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIEdJR19TUEVFRF8xMDAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHSUdfU1BFRURfMTAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgR0lHX0xJTktVUAkJMHgwMDAxCisjZGVmaW5lIEdJR19GVUxMRFVQTEVYCQkweDAwMDIKKyNkZWZpbmUgR0lHX1NQRUVEX01BU0sJCTB4MDAwQworI2RlZmluZSBHSUdfU1BFRURfMTAwMAkJMHgwMDA4CisjZGVmaW5lIEdJR19TUEVFRF8xMDAJCTB4MDAwNAorI2RlZmluZSBHSUdfU1BFRURfMTAJCTB4MDAwMAogCi0jZGVmaW5lIE1DUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTUNSX0NSQ0VOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBNQ1JfRlVMTEQgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIE1DUl9QQUQgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgTUNSX1JFVFJZTEFURSAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBNQ1JfQk9MX1NISUZUICAgICAgICAgICAyMQotI2RlZmluZSBNQ1JfSVBHMV9TSElGVCAgICAgICAgICAxNAotI2RlZmluZSBNQ1JfSVBHMl9TSElGVCAgICAgICAgICA3Ci0jZGVmaW5lIE1DUl9JUEczX1NISUZUICAgICAgICAgIDAKLSNkZWZpbmUgR01DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBHTUNSX0dCSVQgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIEdNQ1JfRlVMTEQgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgR01DUl9HQVBCQl9TSElGVCAgICAgICAgMTQKLSNkZWZpbmUgR01DUl9HQVBSMV9TSElGVCAgICAgICAgNwotI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUICAgICAgICAwCi0jZGVmaW5lIEdNQ1JfR0FQQkJfMTAwMCAgICAgICAgIDB4NjAKLSNkZWZpbmUgR01DUl9HQVBSMV8xMDAwICAgICAgICAgMHgyQwotI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAgICAgICAgICAweDQwCi0jZGVmaW5lIEdNQ1JfR0FQQkJfMTAwICAgICAgICAgIDB4NzAKLSNkZWZpbmUgR01DUl9HQVBSMV8xMDAgICAgICAgICAgMHgyQwotI2RlZmluZSBHTUNSX0dBUFIyXzEwMCAgICAgICAgICAweDQwCi0jZGVmaW5lIFhDUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgWENSX1hNVEVOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBYQ1JfUEFVU0VFTiAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFhDUl9MT0FEUk5HICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUkNSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBSQ1JfUkNWRU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFJDUl9SQ1ZBTEwgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUkNSX1JDVkJBRCAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBSQ1JfQ1RMRU4gICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFJDUl9BRERSQUVOICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgR1hDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBHWENSX1hNVEVOICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEdYQ1JfUEFVU0VFTiAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgR1JDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBHUkNSX1JDVkVOICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEdSQ1JfUkNWQUxMICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgR1JDUl9SQ1ZCQUQgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBHUkNSX0NUTEVOICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEdSQ1JfQUREUkFFTiAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVCAgICAgMTcKLSNkZWZpbmUgR1JDUl9IQVNIU0laRSAgICAgICAgICAgMTQKKyNkZWZpbmUgTUNSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIE1DUl9DUkNFTgkJMHg0MDAwMDAwMAorI2RlZmluZSBNQ1JfRlVMTEQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTUNSX1BBRAkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgTUNSX1JFVFJZTEFURQkJMHgwMTAwMDAwMAorI2RlZmluZSBNQ1JfQk9MX1NISUZUCQkyMQorI2RlZmluZSBNQ1JfSVBHMV9TSElGVAkJMTQKKyNkZWZpbmUgTUNSX0lQRzJfU0hJRlQJCTcKKyNkZWZpbmUgTUNSX0lQRzNfU0hJRlQJCTAKKyNkZWZpbmUgR01DUl9SRVNFVAkJMHg4MDAwMDAwMAorI2RlZmluZSBHTUNSX0dCSVQJCTB4MjAwMDAwMDAKKyNkZWZpbmUgR01DUl9GVUxMRAkJMHgxMDAwMDAwMAorI2RlZmluZSBHTUNSX0dBUEJCX1NISUZUCTE0CisjZGVmaW5lIEdNQ1JfR0FQUjFfU0hJRlQJNworI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUCTAKKyNkZWZpbmUgR01DUl9HQVBCQl8xMDAwCQkweDYwCisjZGVmaW5lIEdNQ1JfR0FQUjFfMTAwMAkJMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAJCTB4NDAKKyNkZWZpbmUgR01DUl9HQVBCQl8xMDAJCTB4NzAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAJCTB4MkMKKyNkZWZpbmUgR01DUl9HQVBSMl8xMDAJCTB4NDAKKyNkZWZpbmUgWENSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIFhDUl9YTVRFTgkJMHg0MDAwMDAwMAorI2RlZmluZSBYQ1JfUEFVU0VFTgkJMHgyMDAwMDAwMAorI2RlZmluZSBYQ1JfTE9BRFJORwkJMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkVOCQkweDQwMDAwMDAwCisjZGVmaW5lIFJDUl9SQ1ZBTEwJCTB4MjAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkJBRAkJMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfQ1RMRU4JCTB4MDgwMDAwMDAKKyNkZWZpbmUgUkNSX0FERFJBRU4JCTB4MDIwMDAwMDAKKyNkZWZpbmUgR1hDUl9SRVNFVAkJMHg4MDAwMDAwMAorI2RlZmluZSBHWENSX1hNVEVOCQkweDQwMDAwMDAwCisjZGVmaW5lIEdYQ1JfUEFVU0VFTgkJMHgyMDAwMDAwMAorI2RlZmluZSBHUkNSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkNWRU4JCTB4NDAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZBTEwJCTB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZCQUQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgR1JDUl9DVExFTgkJMHgwODAwMDAwMAorI2RlZmluZSBHUkNSX0FERFJBRU4JCTB4MDIwMDAwMDAKKyNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVAkxNworI2RlZmluZSBHUkNSX0hBU0hTSVpFCQkxNAogCi0jZGVmaW5lIFNMSUNfRUVQUk9NX0lEICAgICAgICAweEE1QTUKLSNkZWZpbmUgU0xJQ19TUkFNX1NJWkUyR0IgICAgICg2NCAqIDEwMjQpCi0jZGVmaW5lIFNMSUNfU1JBTV9TSVpFMUdCICAgICAoMzIgKiAxMDI0KQotI2RlZmluZSBTTElDX0hPU1RJRF9ERUZBVUxUICAgMHhGRkZGICAgICAgLyogdW5pbml0aWFsaXplZCBob3N0aWQgKi8KLSNkZWZpbmUgU0xJQ19OQlJfTUFDUyAgICAgICAgIDQKLQotI2lmbmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAgMAotI2Vsc2UKLSN1bmRlZiAgRkFMU0UKLSNkZWZpbmUgRkFMU0UgIDAKLSNlbmRpZgotCi0jaWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAgIDEKLSNlbHNlCi0jdW5kZWYgIFRSVUUKLSNkZWZpbmUgVFJVRSAgIDEKLSNlbmRpZgorI2RlZmluZSBTTElDX0VFUFJPTV9JRAkJMHhBNUE1CisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMkdCCSg2NCAqIDEwMjQpCisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMUdCCSgzMiAqIDEwMjQpCisjZGVmaW5lIFNMSUNfSE9TVElEX0RFRkFVTFQJMHhGRkZGCQkvKiB1bmluaXRpYWxpemVkIGhvc3RpZCAqLworI2RlZmluZSBTTElDX05CUl9NQUNTCQk0CiAKIHN0cnVjdCBzbGljX3JjdmJ1ZiB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgcGFkMVs2XTsKLSAgICB1c2hvcnQgICAgcGFkMjsKLSAgICB1MzIgICBwYWQzOwotICAgIHUzMiAgIHBhZDQ7Ci0gICAgdTMyICAgYnVmZmVyOwotICAgIHUzMiAgIGxlbmd0aDsKLSAgICB1MzIgICBzdGF0dXM7Ci0gICAgdTMyICAgcGFkNTsKLSAgICB1c2hvcnQgICAgcGFkNjsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBkYXRhW1NMSUNfUkNWQlVGX0RBVEFTSVpFXTsKKwl1OCBwYWQxWzZdOworCXUxNiBwYWQyOworCXUzMiBwYWQzOworCXUzMiBwYWQ0OworCXUzMiBidWZmZXI7CisJdTMyIGxlbmd0aDsKKwl1MzIgc3RhdHVzOworCXUzMiBwYWQ1OworCXUxNiBwYWQ2OworCXU4IGRhdGFbU0xJQ19SQ1ZCVUZfREFUQVNJWkVdOwogfTsKIAotIHN0cnVjdCBzbGljX2hkZHJfd2RzIHsKLSAgdW5pb24gewotICAgIHN0cnVjdCB7Ci0JdTMyICAgIGZyYW1lX3N0YXR1czsKLQl1MzIgICAgZnJhbWVfc3RhdHVzX2I7Ci0JdTMyICAgIHRpbWVfc3RhbXA7Ci0JdTMyICAgIGNoZWNrc3VtOwotICAgIH0gaGRyc18xNHBvcnQ7Ci0gICAgc3RydWN0IHsKLQl1MzIgICAgZnJhbWVfc3RhdHVzOwotCXVzaG9ydCAgICAgQnl0ZUNudDsKLQl1c2hvcnQgICAgIFRwQ2hrc3VtOwotCXVzaG9ydCAgICAgQ3R4SGFzaDsKLQl1c2hvcnQgICAgIE1hY0hhc2g7Ci0JdTMyICAgIEJ1ZkxuazsKLSAgICB9IGhkcnNfZ2JpdDsKLSAgfSB1MDsKK3N0cnVjdCBzbGljX2hkZHJfd2RzIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgZnJhbWVfc3RhdHVzOworCQkJdTMyIGZyYW1lX3N0YXR1c19iOworCQkJdTMyIHRpbWVfc3RhbXA7CisJCQl1MzIgY2hlY2tzdW07CisJCX0gaGRyc18xNHBvcnQ7CisJCXN0cnVjdCB7CisJCQl1MzIgZnJhbWVfc3RhdHVzOworCQkJdTE2IEJ5dGVDbnQ7CisJCQl1MTYgVHBDaGtzdW07CisJCQl1MTYgQ3R4SGFzaDsKKwkJCXUxNiBNYWNIYXNoOworCQkJdTMyIEJ1ZkxuazsKKwkJfSBoZHJzX2diaXQ7CisJfSB1MDsKIH07CiAKLSNkZWZpbmUgZnJhbWVfc3RhdHVzMTQgICAgICAgIHUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cwotI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0ICAgICAgdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzX2IKLSNkZWZpbmUgZnJhbWVfc3RhdHVzR0IgICAgICAgIHUwLmhkcnNfZ2JpdC5mcmFtZV9zdGF0dXMKKyNkZWZpbmUgZnJhbWVfc3RhdHVzMTQJCXUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cworI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0CXUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1c19iCisjZGVmaW5lIGZyYW1lX3N0YXR1c0dCCQl1MC5oZHJzX2diaXQuZnJhbWVfc3RhdHVzCiAKIHN0cnVjdCBzbGljX2hvc3Q2NHNnIHsKLQl1MzIgICAgICAgIHBhZGRybDsKLQl1MzIgICAgICAgIHBhZGRyaDsKLQl1MzIgICAgICAgIGxlbmd0aDsKKwl1MzIgcGFkZHJsOworCXUzMiBwYWRkcmg7CisJdTMyIGxlbmd0aDsKIH07CiAKIHN0cnVjdCBzbGljX2hvc3Q2NF9jbWQgewotICAgIHUzMiAgICAgICBob3N0aGFuZGxlOwotICAgIHUzMiAgICAgICBSU1ZEOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBjb21tYW5kOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBmbGFnczsKLSAgICB1bmlvbiB7Ci0JdXNob3J0ICAgICAgICAgIHJzdjE7Ci0JdXNob3J0ICAgICAgICAgIHJzdjI7Ci0gICAgfSB1MDsKLSAgICB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJdTMyICAgICAgICAgICAgdG90bGVuOwotCQlzdHJ1Y3Qgc2xpY19ob3N0NjRzZyAgICBidWZzW1NMSUNfTUFYNjRfQkNOVF07Ci0JfSBzbGljX2J1ZmZlcnM7Ci0gICAgfSB1OworCXUzMiBob3N0aGFuZGxlOworCXUzMiBSU1ZEOworCXU4IGNvbW1hbmQ7CisJdTggZmxhZ3M7CisJdW5pb24geworCQl1MTYgcnN2MTsKKwkJdTE2IHJzdjI7CisJfSB1MDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgdG90bGVuOworCQkJc3RydWN0IHNsaWNfaG9zdDY0c2cgYnVmc1tTTElDX01BWDY0X0JDTlRdOworCQl9IHNsaWNfYnVmZmVyczsKKwl9IHU7CiB9OwogCiBzdHJ1Y3Qgc2xpY19yc3BidWYgewotICAgIHUzMiAgIGhvc3RoYW5kbGU7Ci0gICAgdTMyICAgcGFkMDsKLSAgICB1MzIgICBwYWQxOwotICAgIHUzMiAgIHN0YXR1czsKLSAgICB1MzIgICBwYWQyWzRdOwotCisJdTMyIGhvc3RoYW5kbGU7CisJdTMyIHBhZDA7CisJdTMyIHBhZDE7CisJdTMyIHN0YXR1czsKKwl1MzIgcGFkMls0XTsKIH07CiAKIHN0cnVjdCBzbGljX3JlZ3MgewotCXUzMglzbGljX3Jlc2V0OwkJLyogUmVzZXQgUmVnaXN0ZXIgKi8KKwl1MzIJc2xpY19yZXNldDsJLyogUmVzZXQgUmVnaXN0ZXIgKi8KIAl1MzIJcGFkMDsKIAotCXUzMglzbGljX2ljcjsJCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCXNsaWNfaWNyOwkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLwogCXUzMglwYWQyOwogI2RlZmluZSBTTElDX0lDUgkJMHgwMDA4CiAKLQl1MzIJc2xpY19pc3A7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIgKi8KKwl1MzIJc2xpY19pc3A7CS8qIEludGVycnVwdCBzdGF0dXMgcG9pbnRlciAqLwogCXUzMglwYWQxOwogI2RlZmluZSBTTElDX0lTUAkJMHgwMDEwCiAKLSAgICB1MzIJc2xpY19pc3I7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCisJdTMyCXNsaWNfaXNyOwkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCiAJdTMyCXBhZDM7CiAjZGVmaW5lIFNMSUNfSVNSCQkweDAwMTgKIAotICAgIHUzMglzbGljX2hiYXI7CQkvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgcmVnICovCi0JdTMyCQlwYWQ0OworCXUzMglzbGljX2hiYXI7CS8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KKwl1MzIJcGFkNDsKIAkvKiAzMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgaGRyIGJ1ZmZlcnMKIAkgICAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCiAJICAgQnVmZmVycyBhcmUgMjU2IGJ5dGVzIGxvbmcgb24gMjU2LWJ5dGUgYm91bmRhcmllcy4gKi8KICNkZWZpbmUgU0xJQ19IQkFSCQkweDAwMjAKICNkZWZpbmUgU0xJQ19IQkFSX0NOVF9NU0sJMHgwMDAwMDBGRgogCi0gICAgdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KLQl1MzIJCXBhZDU7CisJdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KKwl1MzIJcGFkNTsKIAogCS8qIDQgc2V0cyBvZiByZWdpc3RlcnM7IEJ1ZmZlcnMgYXJlIDJLIGJ5dGVzIGxvbmcgMiBwZXIgNEsgcGFnZS4gKi8KICNkZWZpbmUgU0xJQ19EQkFSCQkweDAwMjgKICNkZWZpbmUgU0xJQ19EQkFSX1NJWkUJCTIwNDgKIAotICAgIHUzMglzbGljX2NiYXI7CQkgCS8qIFhtdCBDbWQgYnVmIGFkZHIgcmVncy4qLworCXUzMglzbGljX2NiYXI7CS8qIFhtdCBDbWQgYnVmIGFkZHIgcmVncy4qLwogCS8qIDEgcGVyIFhNVCBpbnRlcmZhY2UKIAkgICAzMS01IC0gcGh5IGFkZHIgb2YgaG9zdCBjb21tYW5kIGJ1ZmZlcgogCSAgICA0LTAgLSBsZW5ndGggb2YgY21kIGluIG11bHRpcGxlcyBvZiAzMiBieXRlcwpAQCAtMzQzLDEzICszMjksMTMgQEAKICNkZWZpbmUgU0xJQ19DQkFSX0xFTl9NU0sJMHgwMDAwMDAxRgogI2RlZmluZSBTTElDX0NCQVJfQUxJR04JCTB4MDAwMDAwMjAKIAotCXUzMglzbGljX3djczsJCS8qIHdyaXRlIGNvbnRyb2wgc3RvcmUqLworCXUzMglzbGljX3djczsJLyogd3JpdGUgY29udHJvbCBzdG9yZSovCiAjZGVmaW5lCVNMSUNfV0NTCQkweDAwMzQKICNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQJCTB4ODAwMDAwMDAJLypTdGFydCB0aGUgU0xJQyAoSnVtcCB0byBXQ1MpKi8KICNkZWZpbmUgU0xJQ19XQ1NfQ09NUEFSRQkweDQwMDAwMDAwCS8qIENvbXBhcmUgd2l0aCB2YWx1ZSBpbiBXQ1MqLwogCi0gICAgdTMyCXNsaWNfcmJhcjsJCS8qIFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLwotCXUzMgkJcGFkNzsKKwl1MzIJc2xpY19yYmFyOwkvKiBSZXNwb25zZSBidWZmZXIgYWRkcmVzcyByZWcuKi8KKwl1MzIJcGFkNzsKIAkgLyozMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgcmVzcG9uc2UgYnVmZmVycwogCSAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCiAJIEJ1ZmZlcnMgYXJlIDMyIGJ5dGVzIGxvbmcgb24gMzItYnl0ZSBib3VuZGFyaWVzLiovCkBAIC0zNTcsMjE1ICszNDMsMjE0IEBACiAjZGVmaW5lIFNMSUNfUkJBUl9DTlRfTVNLCTB4MDAwMDAwRkYKICNkZWZpbmUgU0xJQ19SQkFSX1NJWkUJCTMyCiAKLQl1MzIJc2xpY19zdGF0czsJCS8qIHJlYWQgc3RhdGlzdGljcyAoVVBSKSAqLwotCXUzMgkJcGFkODsKKwl1MzIJc2xpY19zdGF0czsJLyogcmVhZCBzdGF0aXN0aWNzIChVUFIpICovCisJdTMyCXBhZDg7CiAjZGVmaW5lCVNMSUNfUlNUQVQJCTB4MDA0MAogCi0JdTMyCXNsaWNfcmxzcjsJCQkvKiByZWFkIGxpbmsgc3RhdHVzICovCi0JdTMyCQlwYWQ5OworCXUzMglzbGljX3Jsc3I7CS8qIHJlYWQgbGluayBzdGF0dXMgKi8KKwl1MzIJcGFkOTsKICNkZWZpbmUgU0xJQ19MU1RBVAkJMHgwMDQ4CiAKLQl1MzIJc2xpY193bWNmZzsJCQkvKiBXcml0ZSBNYWMgQ29uZmlnICovCi0JdTMyCQlwYWQxMDsKKwl1MzIJc2xpY193bWNmZzsJLyogV3JpdGUgTWFjIENvbmZpZyAqLworCXUzMglwYWQxMDsKICNkZWZpbmUJU0xJQ19XTUNGRwkJMHgwMDUwCiAKLQl1MzIJc2xpY193cGh5OwkJCS8qIFdyaXRlIHBoeSByZWdpc3RlciAqLwotCXUzMgkJcGFkMTE7CisJdTMyCXNsaWNfd3BoeTsJLyogV3JpdGUgcGh5IHJlZ2lzdGVyICovCisJdTMyCXBhZDExOwogI2RlZmluZSBTTElDX1dQSFkJCTB4MDA1OAogCi0JdTMyCXNsaWNfcmNiYXI7CQkJLypSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCi0JdTMyCQlwYWQxMjsKKwl1MzIJc2xpY19yY2JhcjsJLyogUmN2IENtZCBidWYgYWRkciByZWcgKi8KKwl1MzIJcGFkMTI7CiAjZGVmaW5lCVNMSUNfUkNCQVIJCTB4MDA2MAogCi0JdTMyCXNsaWNfcmNvbmZpZzsJCS8qIFJlYWQgU0xJQyBDb25maWcqLwotCXUzMgkJcGFkMTM7CisJdTMyCXNsaWNfcmNvbmZpZzsJLyogUmVhZCBTTElDIENvbmZpZyovCisJdTMyCXBhZDEzOwogI2RlZmluZSBTTElDX1JDT05GSUcJMHgwMDY4CiAKLQl1MzIJc2xpY19pbnRhZ2c7CQkvKiBJbnRlcnJ1cHQgYWdncmVnYXRpb24gdGltZSovCi0JdTMyCQlwYWQxNDsKKwl1MzIJc2xpY19pbnRhZ2c7CS8qIEludGVycnVwdCBhZ2dyZWdhdGlvbiB0aW1lICovCisJdTMyCXBhZDE0OwogI2RlZmluZSBTTElDX0lOVEFHRwkJMHgwMDcwCiAKLQl1MzIJc2xpY193eGNmZzsJCS8qIFdyaXRlIFhNSVQgY29uZmlnIHJlZyovCi0JdTMyCQlwYWQxNjsKKwl1MzIJc2xpY193eGNmZzsJLyogV3JpdGUgWE1JVCBjb25maWcgcmVnKi8KKwl1MzIJcGFkMTY7CiAjZGVmaW5lCVNMSUNfV1hDRkcJCTB4MDA3OAogCi0JdTMyCXNsaWNfd3JjZmc7CQkvKiBXcml0ZSBSQ1YgY29uZmlnIHJlZyovCi0JdTMyCQlwYWQxNzsKKwl1MzIJc2xpY193cmNmZzsJLyogV3JpdGUgUkNWIGNvbmZpZyByZWcqLworCXUzMglwYWQxNzsKICNkZWZpbmUJU0xJQ19XUkNGRwkJMHgwMDgwCiAKLQl1MzIJc2xpY193cmFkZHJhbDsJCS8qIFdyaXRlIHJjdiBhZGRyIGEgbG93Ki8KLQl1MzIJCXBhZDE4OworCXUzMglzbGljX3dyYWRkcmFsOwkvKiBXcml0ZSByY3YgYWRkciBhIGxvdyovCisJdTMyCXBhZDE4OwogI2RlZmluZQlTTElDX1dSQUREUkFMCTB4MDA4OAogCi0JdTMyCXNsaWNfd3JhZGRyYWg7CQkvKiBXcml0ZSByY3YgYWRkciBhIGhpZ2gqLwotCXUzMgkJcGFkMTk7CisJdTMyCXNsaWNfd3JhZGRyYWg7CS8qIFdyaXRlIHJjdiBhZGRyIGEgaGlnaCovCisJdTMyCXBhZDE5OwogI2RlZmluZQlTTElDX1dSQUREUkFICTB4MDA5MAogCi0JdTMyCXNsaWNfd3JhZGRyYmw7CQkvKiBXcml0ZSByY3YgYWRkciBiIGxvdyovCi0JdTMyCQlwYWQyMDsKKwl1MzIJc2xpY193cmFkZHJibDsJLyogV3JpdGUgcmN2IGFkZHIgYiBsb3cqLworCXUzMglwYWQyMDsKICNkZWZpbmUJU0xJQ19XUkFERFJCTAkweDAwOTgKIAotCXUzMglzbGljX3dyYWRkcmJoOwkJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KKwl1MzIJc2xpY193cmFkZHJiaDsJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KIAl1MzIJCXBhZDIxOwogI2RlZmluZQlTTElDX1dSQUREUkJICTB4MDBhMAogCi0JdTMyCXNsaWNfbWNhc3Rsb3c7CQkvKiBMb3cgYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJc2xpY19tY2FzdGxvdzsJLyogTG93IGJpdHMgb2YgbWNhc3QgbWFzayovCiAJdTMyCQlwYWQyMjsKICNkZWZpbmUJU0xJQ19NQ0FTVExPVwkweDAwYTgKIAotCXUzMglzbGljX21jYXN0aGlnaDsJCS8qIEhpZ2ggYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJc2xpY19tY2FzdGhpZ2g7CS8qIEhpZ2ggYml0cyBvZiBtY2FzdCBtYXNrKi8KIAl1MzIJCXBhZDIzOwogI2RlZmluZQlTTElDX01DQVNUSElHSAkweDAwYjAKIAotCXUzMglzbGljX3Bpbmc7CQkJLyogUGluZyB0aGUgY2FyZCovCi0JdTMyCQlwYWQyNDsKKwl1MzIJc2xpY19waW5nOwkvKiBQaW5nIHRoZSBjYXJkKi8KKwl1MzIJcGFkMjQ7CiAjZGVmaW5lIFNMSUNfUElORwkJMHgwMGI4CiAKLQl1MzIJc2xpY19kdW1wX2NtZDsJCS8qIER1bXAgY29tbWFuZCAqLwotCXUzMgkJcGFkMjU7CisJdTMyCXNsaWNfZHVtcF9jbWQ7CS8qIER1bXAgY29tbWFuZCAqLworCXUzMglwYWQyNTsKICNkZWZpbmUgU0xJQ19EVU1QX0NNRAkweDAwYzAKIAotCXUzMglzbGljX2R1bXBfZGF0YTsJCS8qIER1bXAgZGF0YSBwb2ludGVyICovCi0JdTMyCQlwYWQyNjsKKwl1MzIJc2xpY19kdW1wX2RhdGE7CS8qIER1bXAgZGF0YSBwb2ludGVyICovCisJdTMyCXBhZDI2OwogI2RlZmluZSBTTElDX0RVTVBfREFUQQkweDAwYzgKIAogCXUzMglzbGljX3BjaXN0YXR1czsJLyogUmVhZCBjYXJkJ3MgcGNpX3N0YXR1cyByZWdpc3RlciAqLwotCXUzMgkJcGFkMjc7CisJdTMyCXBhZDI3OwogI2RlZmluZQlTTElDX1BDSVNUQVRVUwkweDAwZDAKIAotCXUzMglzbGljX3dyaG9zdGlkOwkJLyogV3JpdGUgaG9zdGlkIGZpZWxkICovCisJdTMyCXNsaWNfd3Job3N0aWQ7CS8qIFdyaXRlIGhvc3RpZCBmaWVsZCAqLwogCXUzMgkJcGFkMjg7CiAjZGVmaW5lIFNMSUNfV1JIT1NUSUQJCSAweDAwZDgKICNkZWZpbmUgU0xJQ19SREhPU1RJRF8xR0IJIDB4MTU1NAogI2RlZmluZSBTTElDX1JESE9TVElEXzJHQgkgMHgxNTU0CiAKIAl1MzIJc2xpY19sb3dfcG93ZXI7CS8qIFB1dCBjYXJkIGluIGEgbG93IHBvd2VyIHN0YXRlICovCi0JdTMyCQlwYWQyOTsKKwl1MzIJcGFkMjk7CiAjZGVmaW5lIFNMSUNfTE9XX1BPV0VSCTB4MDBlMAogCiAJdTMyCXNsaWNfcXVpZXNjZTsJLyogZm9yY2Ugc2xpYyBpbnRvIHF1aWVzY2VudCBzdGF0ZQotCQkJCQkgYmVmb3JlIHNvZnQgcmVzZXQgKi8KLQl1MzIJCXBhZDMwOworCQkJCSAgIGJlZm9yZSBzb2Z0IHJlc2V0ICovCisJdTMyCXBhZDMwOwogI2RlZmluZSBTTElDX1FVSUVTQ0UJMHgwMGU4CiAKLQl1MzIJc2xpY19yZXNldF9pZmFjZTsJLyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLwotCXUzMgkJcGFkMzE7CisJdTMyCXNsaWNfcmVzZXRfaWZhY2U7LyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLworCXUzMglwYWQzMTsKICNkZWZpbmUgU0xJQ19SRVNFVF9JRkFDRSAweDAwZjAKIAotICAgIHUzMglzbGljX2FkZHJfdXBwZXI7CS8qIEJpdHMgNjMtMzIgZm9yIGhvc3QgaS9mIGFkZHJzICovCi0JdTMyCQlwYWQzMjsKKwl1MzIJc2xpY19hZGRyX3VwcGVyOy8qIEJpdHMgNjMtMzIgZm9yIGhvc3QgaS9mIGFkZHJzICovCisJdTMyCXBhZDMyOwogI2RlZmluZSBTTElDX0FERFJfVVBQRVIJMHgwMGY4IC8qUmVnaXN0ZXIgaXMgb25seSB3cml0dGVuIHdoZW4gaXQgaGFzIGNoYW5nZWQqLwogCi0gICAgdTMyCXNsaWNfaGJhcjY0OwkJLyogNjQgYml0IEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KLQl1MzIJCXBhZDMzOworCXUzMglzbGljX2hiYXI2NDsJLyogNjQgYml0IEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KKwl1MzIJcGFkMzM7CiAjZGVmaW5lIFNMSUNfSEJBUjY0CQkweDAxMDAKIAotICAgIHUzMglzbGljX2RiYXI2NDsJLyogNjQgYml0IERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCi0JdTMyCQlwYWQzNDsKKwl1MzIJc2xpY19kYmFyNjQ7CS8qIDY0IGJpdCBEYXRhIGJ1ZmZlciBoYW5kbGUgJiBhZGRyZXNzIHJlZyAqLworCXUzMglwYWQzNDsKICNkZWZpbmUgU0xJQ19EQkFSNjQJCTB4MDEwOAogCi0gICAgdTMyCXNsaWNfY2JhcjY0OwkgCS8qIDY0IGJpdCBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuICovCi0JdTMyCQlwYWQzNTsKKwl1MzIJc2xpY19jYmFyNjQ7IAkvKiA2NCBiaXQgWG10IENtZCBidWYgYWRkciByZWdzLiAqLworCXUzMglwYWQzNTsKICNkZWZpbmUgU0xJQ19DQkFSNjQJCTB4MDExMAogCi0gICAgdTMyCXNsaWNfcmJhcjY0OwkJLyogNjQgYml0IFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLwotCXUzMgkJcGFkMzY7CisJdTMyCXNsaWNfcmJhcjY0OwkvKiA2NCBiaXQgUmVzcG9uc2UgYnVmZmVyIGFkZHJlc3MgcmVnLiovCisJdTMyCXBhZDM2OwogI2RlZmluZSBTTElDX1JCQVI2NAkJMHgwMTE4CiAKLQl1MzIJc2xpY19yY2JhcjY0OwkJLyogNjQgYml0IFJjdiBDbWQgYnVmIGFkZHIgcmVnKi8KLQl1MzIJCXBhZDM3OworCXUzMglzbGljX3JjYmFyNjQ7CS8qIDY0IGJpdCBSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCisJdTMyCXBhZDM3OwogI2RlZmluZQlTTElDX1JDQkFSNjQJMHgwMTIwCiAKLQl1MzIJc2xpY19zdGF0czY0OwkJLypyZWFkIHN0YXRpc3RpY3MgKDY0IGJpdCBVUFIpKi8KLQl1MzIJCXBhZDM4OworCXUzMglzbGljX3N0YXRzNjQ7CS8qIHJlYWQgc3RhdGlzdGljcyAoNjQgYml0IFVQUikgKi8KKwl1MzIJcGFkMzg7CiAjZGVmaW5lCVNMSUNfUlNUQVQ2NAkweDAxMjgKIAogCXUzMglzbGljX3Jjdl93Y3M7CS8qRG93bmxvYWQgR2lnYWJpdCBSQ1Ygc2VxdWVuY2VyIHVjb2RlKi8KLQl1MzIJCXBhZDM5OworCXUzMglwYWQzOTsKICNkZWZpbmUgU0xJQ19SQ1ZfV0NTCTB4MDEzMAogI2RlZmluZSBTTElDX1JDVldDU19CRUdJTgkweDQwMDAwMDAwCiAjZGVmaW5lIFNMSUNfUkNWV0NTX0ZJTklTSAkweDgwMDAwMDAwCiAKLQl1MzIJc2xpY193cnZsYW5pZDsJCS8qIFdyaXRlIFZsYW5JZCBmaWVsZCAqLwotCXUzMgkJcGFkNDA7CisJdTMyCXNsaWNfd3J2bGFuaWQ7CS8qIFdyaXRlIFZsYW5JZCBmaWVsZCAqLworCXUzMglwYWQ0MDsKICNkZWZpbmUgU0xJQ19XUlZMQU5JRAkweDAxMzgKIAotCXUzMglzbGljX3JlYWRfeGZfaW5mbzsgIC8qIFJlYWQgVHJhbnNmb3JtZXIgaW5mbyAqLwotCXUzMgkJcGFkNDE7CisJdTMyCXNsaWNfcmVhZF94Zl9pbmZvOwkvKiBSZWFkIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJcGFkNDE7CiAjZGVmaW5lIFNMSUNfUkVBRF9YRl9JTkZPIAkweDAxNDAKIAotCXUzMglzbGljX3dyaXRlX3hmX2luZm87IC8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KLQl1MzIJCXBhZDQyOworCXUzMglzbGljX3dyaXRlX3hmX2luZm87CS8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJcGFkNDI7CiAjZGVmaW5lIFNMSUNfV1JJVEVfWEZfSU5GTyAJMHgwMTQ4CiAKLQl1MzIJUlNWRDE7ICAgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDM7CisJdTMyCVJTVkQxOwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDM7CiAKLQl1MzIJUlNWRDI7IAkgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDQ7CisJdTMyCVJTVkQyOwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDQ7CiAKLQl1MzIJUlNWRDM7ICAgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDU7CisJdTMyCVJTVkQzOwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDU7CiAKLQl1MzIJUlNWRDQ7ICAgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDY7CisJdTMyCVJTVkQ0OwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDY7CiAKIAl1MzIJc2xpY190aWNrc19wZXJfc2VjOyAvKiBXcml0ZSBjYXJkIHRpY2tzIHBlciBzZWNvbmQgKi8KLQl1MzIJCXBhZDQ3OworCXUzMglwYWQ0NzsKICNkZWZpbmUgU0xJQ19USUNLU19QRVJfU0VDCTB4MDE3MAotCiB9OwogCiBlbnVtIFVQUl9SRVFVRVNUIHsKLSAgICBTTElDX1VQUl9TVEFUUywKLSAgICBTTElDX1VQUl9STFNSLAotICAgIFNMSUNfVVBSX1dDRkcsCi0gICAgU0xJQ19VUFJfUkNPTkZJRywKLSAgICBTTElDX1VQUl9SUEhZLAotICAgIFNMSUNfVVBSX0VOTEIsCi0gICAgU0xJQ19VUFJfRU5DVCwKLSAgICBTTElDX1VQUl9QRFdOLAotICAgIFNMSUNfVVBSX1BJTkcsCi0gICAgU0xJQ19VUFJfRFVNUCwKKwlTTElDX1VQUl9TVEFUUywKKwlTTElDX1VQUl9STFNSLAorCVNMSUNfVVBSX1dDRkcsCisJU0xJQ19VUFJfUkNPTkZJRywKKwlTTElDX1VQUl9SUEhZLAorCVNMSUNfVVBSX0VOTEIsCisJU0xJQ19VUFJfRU5DVCwKKwlTTElDX1VQUl9QRFdOLAorCVNMSUNfVVBSX1BJTkcsCisJU0xJQ19VUFJfRFVNUCwKIH07CiAKIHN0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4gewotICAgIHUzMiAgICBwYXR0ZXJubGVuZ3RoOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICBwYXR0ZXJuW1NMSUNfUE1fUEFUVEVSTlNJWkVdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICBtYXNrW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworCXUzMiBwYXR0ZXJubGVuZ3RoOworCXU4IHBhdHRlcm5bU0xJQ19QTV9QQVRURVJOU0laRV07CisJdTggbWFza1tTTElDX1BNX1BBVFRFUk5TSVpFXTsKIH07CiAKIHN0cnVjdCBpbmljcG1fc3RhdGUgewotICAgIHUzMiAgICAgICAgICAgICAgICAgcG93ZXJjYXBzOwotICAgIHUzMiAgICAgICAgICAgICAgICAgcG93ZXJzdGF0ZTsKLSAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfbGlua3N0YXR1czsKLSAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfbWFnaWNwYWNrZXQ7Ci0gICAgdTMyICAgICAgICAgICAgICAgICB3YWtlX2ZyYW1lcGF0dGVybjsKLSAgICBzdHJ1Y3QgaW5pY3BtX3dha2VwYXR0ZXJuICAgIHdha2VwYXR0ZXJuW1NMSUNfUE1fTUFYUEFUVEVSTlNdOworCXUzMiBwb3dlcmNhcHM7CisJdTMyIHBvd2Vyc3RhdGU7CisJdTMyIHdha2VfbGlua3N0YXR1czsKKwl1MzIgd2FrZV9tYWdpY3BhY2tldDsKKwl1MzIgd2FrZV9mcmFtZXBhdHRlcm47CisJc3RydWN0IGluaWNwbV93YWtlcGF0dGVybiB3YWtlcGF0dGVybltTTElDX1BNX01BWFBBVFRFUk5TXTsKIH07CiAKIHN0cnVjdCBzbGljcG1fcGFja2V0X3BhdHRlcm4gewotICAgIHUzMiAgICAgcHJpb3JpdHk7Ci0gICAgdTMyICAgICByZXNlcnZlZDsKLSAgICB1MzIgICAgIG1hc2tzaXplOwotICAgIHUzMiAgICAgcGF0dGVybm9mZnNldDsKLSAgICB1MzIgICAgIHBhdHRlcm5zaXplOwotICAgIHUzMiAgICAgcGF0dGVybmZsYWdzOworCXUzMiBwcmlvcml0eTsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIG1hc2tzaXplOworCXUzMiBwYXR0ZXJub2Zmc2V0OworCXUzMiBwYXR0ZXJuc2l6ZTsKKwl1MzIgcGF0dGVybmZsYWdzOwogfTsKIAogZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgewotICAgIHNsaWNwbV9zdGF0ZV91bnNwZWNpZmllZCA9IDAsCi0gICAgc2xpY3BtX3N0YXRlX2QwLAotICAgIHNsaWNwbV9zdGF0ZV9kMSwKLSAgICBzbGljcG1fc3RhdGVfZDIsCi0gICAgc2xpY3BtX3N0YXRlX2QzLAotICAgIHNsaWNwbV9zdGF0ZV9tYXhpbXVtCisJc2xpY3BtX3N0YXRlX3Vuc3BlY2lmaWVkID0gMCwKKwlzbGljcG1fc3RhdGVfZDAsCisJc2xpY3BtX3N0YXRlX2QxLAorCXNsaWNwbV9zdGF0ZV9kMiwKKwlzbGljcG1fc3RhdGVfZDMsCisJc2xpY3BtX3N0YXRlX21heGltdW0KIH07CiAKIHN0cnVjdCBzbGljcG1fd2FrZXVwX2NhcGFiaWxpdGllcyB7Ci0gICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9tYWdpY19wYWNrZXRfd2FrZXVwOwotICAgIGVudW0gc2xpY3BtX3Bvd2VyX3N0YXRlICBtaW5fcGF0dGVybl93YWtldXA7Ci0gICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9saW5rX2NoYW5nZV93YWtldXA7CisJZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgbWluX21hZ2ljX3BhY2tldF93YWtldXA7CisJZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgbWluX3BhdHRlcm5fd2FrZXVwOworCWVudW0gc2xpY3BtX3Bvd2VyX3N0YXRlIG1pbl9saW5rX2NoYW5nZV93YWtldXA7CiB9OwogCiBzdHJ1Y3Qgc2xpY19wbnBfY2FwYWJpbGl0aWVzIHsKQEAgLTYxMiwxMzYgKzU5NywxMzUgQEAKIH07CiAKIHN0cnVjdCBzbGljX3N0YXRzIHsKLSAgICB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHhtdF9zdGF0cyAgeG10MTAwOwotCQlzdHJ1Y3QgcmN2X3N0YXRzICByY3YxMDA7Ci0JfSBzdGF0c18xMDA7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHhtdF9zdGF0c2diICAgICB4bXRHQjsKLQkJc3RydWN0IHJjdl9zdGF0c2diICAgICByY3ZHQjsKLQl9IHN0YXRzX0dCOwotICAgIH0gdTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgeG10X3N0YXRzIHhtdDEwMDsKKwkJCXN0cnVjdCByY3Zfc3RhdHMgcmN2MTAwOworCQl9IHN0YXRzXzEwMDsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCB4bXRfc3RhdHNnYiB4bXRHQjsKKwkJCXN0cnVjdCByY3Zfc3RhdHNnYiByY3ZHQjsKKwkJfSBzdGF0c19HQjsKKwl9IHU7CiB9OwogCi0jZGVmaW5lIHhtaXRfdGNwX3NlZ3MxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3RjcF9zZWdzCi0jZGVmaW5lIHhtaXRfdGNwX2J5dGVzMTAwICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3RjcF9ieXRlcwotI2RlZmluZSB4bWl0X2J5dGVzMTAwICAgICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9ieXRlcwotI2RlZmluZSB4bWl0X2NvbGxpc2lvbnMxMDAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9jb2xsaXNpb25zCi0jZGVmaW5lIHhtaXRfdW5pY2FzdHMxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3VuaWNhc3RzCi0jZGVmaW5lIHhtaXRfb3RoZXJfZXJyb3IxMDAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X290aGVyX2Vycm9yCi0jZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnMxMDAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCi0jZGVmaW5lIHJjdl90Y3Bfc2VnczEwMCAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdGNwX3NlZ3MKLSNkZWZpbmUgcmN2X3RjcF9ieXRlczEwMCAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl90Y3BfYnl0ZXMKLSNkZWZpbmUgcmN2X2J5dGVzMTAwICAgICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl9ieXRlcwotI2RlZmluZSByY3ZfdW5pY2FzdHMxMDAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3VuaWNhc3RzCi0jZGVmaW5lIHJjdl9vdGhlcl9lcnJvcjEwMCAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3Zfb3RoZXJfZXJyb3IKLSNkZWZpbmUgcmN2X2Ryb3BzMTAwICAgICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl9kcm9wcwotI2RlZmluZSB4bWl0X3RjcF9zZWdzX2diICAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX3NlZ3MKLSNkZWZpbmUgeG1pdF90Y3BfYnl0ZXNfZ2IgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9ieXRlcwotI2RlZmluZSB4bWl0X2J5dGVzX2diICAgICAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfYnl0ZXMKLSNkZWZpbmUgeG1pdF9jb2xsaXNpb25zX2diICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X2NvbGxpc2lvbnMKLSNkZWZpbmUgeG1pdF91bmljYXN0c19nYiAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3VuaWNhc3RzCi0jZGVmaW5lIHhtaXRfb3RoZXJfZXJyb3JfZ2IgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9vdGhlcl9lcnJvcgotI2RlZmluZSB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zX2diICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKKyNkZWZpbmUgeG1pdF90Y3Bfc2VnczEwMAkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX3NlZ3MKKyNkZWZpbmUgeG1pdF90Y3BfYnl0ZXMxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3RjcF9ieXRlcworI2RlZmluZSB4bWl0X2J5dGVzMTAwCQkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zMTAwCQl1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9jb2xsaXNpb25zCisjZGVmaW5lIHhtaXRfdW5pY2FzdHMxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3VuaWNhc3RzCisjZGVmaW5lIHhtaXRfb3RoZXJfZXJyb3IxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X290aGVyX2Vycm9yCisjZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnMxMDAJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKKyNkZWZpbmUgcmN2X3RjcF9zZWdzMTAwCQkJdS5zdGF0c18xMDAucmN2MTAwLnJjdl90Y3Bfc2VncworI2RlZmluZSByY3ZfdGNwX2J5dGVzMTAwCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9ieXRlcworI2RlZmluZSByY3ZfYnl0ZXMxMDAJCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0czEwMAkJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdW5pY2FzdHMKKyNkZWZpbmUgcmN2X290aGVyX2Vycm9yMTAwCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wczEwMAkJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfZHJvcHMKKyNkZWZpbmUgeG1pdF90Y3Bfc2Vnc19nYgkJdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9zZWdzCisjZGVmaW5lIHhtaXRfdGNwX2J5dGVzX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX2J5dGVzCisjZGVmaW5lIHhtaXRfYnl0ZXNfZ2IJCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3VuaWNhc3RzX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdW5pY2FzdHMKKyNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcl9nYgkJdS5zdGF0c19HQi54bXRHQi54bWl0X290aGVyX2Vycm9yCisjZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IJdS5zdGF0c19HQi54bXRHQi54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCiAKLSNkZWZpbmUgcmN2X3RjcF9zZWdzX2diICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX3NlZ3MKLSNkZWZpbmUgcmN2X3RjcF9ieXRlc19nYiAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX2J5dGVzCi0jZGVmaW5lIHJjdl9ieXRlc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2J5dGVzCi0jZGVmaW5lIHJjdl91bmljYXN0c19nYiAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3VuaWNhc3RzCi0jZGVmaW5lIHJjdl9vdGhlcl9lcnJvcl9nYiAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCi0jZGVmaW5lIHJjdl9kcm9wc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCisjZGVmaW5lIHJjdl90Y3Bfc2Vnc19nYgkJCXUuc3RhdHNfR0IucmN2R0IucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXNfZ2IJCXUuc3RhdHNfR0IucmN2R0IucmN2X3RjcF9ieXRlcworI2RlZmluZSByY3ZfYnl0ZXNfZ2IJCQl1LnN0YXRzX0dCLnJjdkdCLnJjdl9ieXRlcworI2RlZmluZSByY3ZfdW5pY2FzdHNfZ2IJCQl1LnN0YXRzX0dCLnJjdkdCLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3JfZ2IJCXUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wc19nYgkJCXUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCiAKIHN0cnVjdCBzbGljX2NvbmZpZ19tYWMgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIG1hY2FkZHJBWzZdOworCXU4IG1hY2FkZHJBWzZdOwogfTsKIAotI2RlZmluZSBBVEtfRlJVX0ZPUk1BVCAgICAgICAgMHgwMAotI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQgICAgMHgwMQotI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQgICAgMHgwMgotI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQgICAgMHgwMwotI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQgICAgMHgwNAotI2RlZmluZSBOT19GUlVfRk9STUFUICAgICAgICAgMHhGRgorI2RlZmluZSBBVEtfRlJVX0ZPUk1BVAkJMHgwMAorI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQJMHgwMQorI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQJMHgwMgorI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQJMHgwMworI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQJMHgwNAorI2RlZmluZSBOT19GUlVfRk9STUFUCQkweEZGCiAKIHN0cnVjdCBhdGtfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBhc3NlbWJseVs2XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICByZXZpc2lvblsyXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXJpYWxbMTRdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKKwl1OCBhc3NlbWJseVs2XTsKKwl1OCByZXZpc2lvblsyXTsKKwl1OCBzZXJpYWxbMTRdOworCXU4IHBhZFszXTsKIH07CiAKIHN0cnVjdCB2ZW5kb3IxX2ZydSB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgY29tbW9kaXR5OwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzRdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHN1cHBsaWVyWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGRhdGVbMl07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VxdWVuY2VbM107Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzEzXTsKKwl1OCBjb21tb2RpdHk7CisJdTggYXNzZW1ibHlbNF07CisJdTggcmV2aXNpb25bMl07CisJdTggc3VwcGxpZXJbMl07CisJdTggZGF0ZVsyXTsKKwl1OCBzZXF1ZW5jZVszXTsKKwl1OCBwYWRbMTNdOwogfTsKIAogc3RydWN0IHZlbmRvcjJfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYXJ0WzhdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHN1cHBsaWVyWzVdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGRhdGVbM107Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VxdWVuY2VbNF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzddOworCXU4IHBhcnRbOF07CisJdTggc3VwcGxpZXJbNV07CisJdTggZGF0ZVszXTsKKwl1OCBzZXF1ZW5jZVs0XTsKKwl1OCBwYWRbN107CiB9OwogCiBzdHJ1Y3QgdmVuZG9yM19mcnUgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworCXU4IGFzc2VtYmx5WzZdOworCXU4IHJldmlzaW9uWzJdOworCXU4IHNlcmlhbFsxNF07CisJdTggcGFkWzNdOwogfTsKIAogc3RydWN0IHZlbmRvcjRfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBudW1iZXJbOF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFydFs4XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICB2ZXJzaW9uWzhdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKKwl1OCBudW1iZXJbOF07CisJdTggcGFydFs4XTsKKwl1OCB2ZXJzaW9uWzhdOworCXU4IHBhZFszXTsKIH07CiAKIHVuaW9uIG9lbWZydSB7Ci0gICAgc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7Ci0gICAgc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7Ci0gICAgc3RydWN0IHZlbmRvcjNfZnJ1ICAgdmVuZG9yM19mcnU7Ci0gICAgc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7CisJc3RydWN0IHZlbmRvcjFfZnJ1IHZlbmRvcjFfZnJ1OworCXN0cnVjdCB2ZW5kb3IyX2ZydSB2ZW5kb3IyX2ZydTsKKwlzdHJ1Y3QgdmVuZG9yM19mcnUgdmVuZG9yM19mcnU7CisJc3RydWN0IHZlbmRvcjRfZnJ1IHZlbmRvcjRfZnJ1OwogfTsKIAogLyoKLSAgIFNMSUMgRUVQUk9NIHN0cnVjdHVyZSBmb3IgTW9qYXZlCi0qLworICogU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBNb2phdmUKKyAqLwogc3RydWN0IHNsaWNfZWVwcm9tIHsKLQl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnKi8KLQl1c2hvcnQJCUVlY29kZVNpemU7CS8qIDAxIFNpemUgb2YgRUVQUk9NIENvZGVzIChieXRlcyAqIDQpKi8KLQl1c2hvcnQJCUZsYXNoU2l6ZTsJLyogMDIgRmxhc2ggc2l6ZSAqLwotCXVzaG9ydAkJRWVwcm9tU2l6ZTsJLyogMDMgRUVQUk9NIFNpemUgKi8KLQl1c2hvcnQJCVZlbmRvcklkOwkvKiAwNCBWZW5kb3IgSUQgKi8KLQl1c2hvcnQJCURldmljZUlkOwkvKiAwNSBEZXZpY2UgSUQgKi8KLQl1bnNpZ25lZCBjaGFyCQlSZXZpc2lvbklkOwkvKiAwNiBSZXZpc2lvbiBJRCAqLwotCXVuc2lnbmVkIGNoYXIJCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSAqLwotCXVuc2lnbmVkIGNoYXIJCURiZ0ludFBpbjsJLyogMDggRGVidWcgSW50ZXJydXB0IHBpbiAqLwotCXVuc2lnbmVkIGNoYXIJCU5ldEludFBpbjA7CS8qICAgIE5ldHdvcmsgSW50ZXJydXB0IFBpbiAqLwotCXVuc2lnbmVkIGNoYXIJCU1pbkdyYW50OwkvKiAwOSBNaW5pbXVtIGdyYW50ICovCi0JdW5zaWduZWQgY2hhcgkJTWF4TGF0OwkJLyogICAgTWF4aW11bSBMYXRlbmN5ICovCi0JdXNob3J0CQlQY2lTdGF0dXM7CS8qIDEwIFBDSSBTdGF0dXMgKi8KLQl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTEgU3Vic3lzdGVtIFZlbmRvciBJZCAqLwotCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEyIFN1YnN5c3RlbSBJRCAqLwotCXVzaG9ydAkJRGJnRGV2SWQ7CS8qIDEzIERlYnVnIERldmljZSBJZCAqLwotCXVzaG9ydAkJRHJhbVJvbUZuOwkvKiAxNCBEcmFtL1JvbSBmdW5jdGlvbiAqLwotCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAqIDY0SykgKi8KLQl1c2hvcnQJUlNpemUyUGNpOwkvKiAxNiBST00gZXh0ZW5zaW9uIHNpemUgdG8gUENJIChieXRlcyAqIDRrKSAqLwotCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMTsvKiAxNyBOZXR3b3JrIEludGVyZmFjZSBQaW4gMQorCXUxNiBJZDsJCQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScqLworCXUxNiBFZWNvZGVTaXplOwkJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLworCXUxNiBGbGFzaFNpemU7CQkvKiAwMiBGbGFzaCBzaXplICovCisJdTE2IEVlcHJvbVNpemU7CQkvKiAwMyBFRVBST00gU2l6ZSAqLworCXUxNiBWZW5kb3JJZDsJCS8qIDA0IFZlbmRvciBJRCAqLworCXUxNiBEZXZpY2VJZDsJCS8qIDA1IERldmljZSBJRCAqLworCXU4IFJldmlzaW9uSWQ7CQkvKiAwNiBSZXZpc2lvbiBJRCAqLworCXU4IENsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSAqLworCXU4IERiZ0ludFBpbjsJCS8qIDA4IERlYnVnIEludGVycnVwdCBwaW4gKi8KKwl1OCBOZXRJbnRQaW4wOwkJLyogICAgTmV0d29yayBJbnRlcnJ1cHQgUGluICovCisJdTggTWluR3JhbnQ7CQkvKiAwOSBNaW5pbXVtIGdyYW50ICovCisJdTggTWF4TGF0OwkJLyogICAgTWF4aW11bSBMYXRlbmN5ICovCisJdTE2IFBjaVN0YXR1czsJCS8qIDEwIFBDSSBTdGF0dXMgKi8KKwl1MTYgU3ViU3lzVklkOwkJLyogMTEgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXUxNiBTdWJTeXNJZDsJCS8qIDEyIFN1YnN5c3RlbSBJRCAqLworCXUxNiBEYmdEZXZJZDsJCS8qIDEzIERlYnVnIERldmljZSBJZCAqLworCXUxNiBEcmFtUm9tRm47CQkvKiAxNCBEcmFtL1JvbSBmdW5jdGlvbiAqLworCXUxNiBEU2l6ZTJQY2k7CQkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAqIDY0SykgKi8KKwl1MTYgUlNpemUyUGNpOwkJLyogMTYgUk9NIGV4dGVuc2lvbiBzaXplIHRvIFBDSSAoYnl0ZXMgKiA0aykgKi8KKwl1OCBOZXRJbnRQaW4xOwkJLyogMTcgTmV0d29yayBJbnRlcmZhY2UgUGluIDEKIAkJCQkgICAgKHNpbWJhL2xlb25lIG9ubHkpICovCi0JdW5zaWduZWQgY2hhciBOZXRJbnRQaW4yOyAvKk5ldHdvcmsgSW50ZXJmYWNlIFBpbiAyIChzaW1iYS9sZW9uZSBvbmx5KSovCisJdTggTmV0SW50UGluMjsJCS8qIE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAyIChzaW1iYS9sZW9uZSBvbmx5KSovCiAJdW5pb24gewotCQl1bnNpZ25lZCBjaGFyIE5ldEludFBpbjM7LyoxOCBOZXR3b3JrIEludGVyZmFjZSBQaW4gMwotCQkJCQkgICAoc2ltYmEgb25seSkqLwotCQl1bnNpZ25lZCBjaGFyIEZyZWVUaW1lOy8qRnJlZVRpbWUgc2V0dGluZyAobGVvbmUvbW9qYXZlIG9ubHkpICovCisJCXU4IE5ldEludFBpbjM7CS8qIDE4IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAzIChzaW1iYSBvbmx5KSAqLworCQl1OCBGcmVlVGltZTsJLyogRnJlZVRpbWUgc2V0dGluZyAobGVvbmUvbW9qYXZlIG9ubHkpICovCiAJfSB1MTsKLQl1bnNpZ25lZCBjaGFyCVRCSWN0bDsJLyogICAgMTAtYml0IGludGVyZmFjZSBjb250cm9sIChNb2phdmUgb25seSkgKi8KLQl1c2hvcnQJCURyYW1TaXplOwkvKiAxOSBEUkFNIHNpemUgKGJ5dGVzICogNjRrKSAqLworCXU4IFRCSWN0bDsJCS8qIDEwLWJpdCBpbnRlcmZhY2UgY29udHJvbCAoTW9qYXZlIG9ubHkpICovCisJdTE2IERyYW1TaXplOwkJLyogMTkgRFJBTSBzaXplIChieXRlcyAqIDY0aykgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQkvKiBNYWMgSW50ZXJmYWNlIFNwZWNpZmljIHBvcnRpb25zICovCkBAIC03NTAsNjcgKzczNCw2NCBAQAogCQlzdHJ1Y3QgewogCQkJLyogdXNlIGFib3ZlIHN0cnVjdCBmb3IgTUFDIGFjY2VzcyAqLwogCQkJc3RydWN0IHNsaWNfY29uZmlnX21hYwlwYWRbU0xJQ19OQlJfTUFDUyAtIDFdOwotCQkJdXNob3J0CQlEZXZpY2VJZDI7CS8qIERldmljZSBJRCBmb3IgMm5kCi0JCQkJCQkJCVBDSSBmdW5jdGlvbiAqLwotCQkJdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiBJbnRlcnJ1cHQgcGluIGZvcgotCQkJCQkJCSAgIDJuZCBQQ0kgZnVuY3Rpb24gKi8KLQkJCXVuc2lnbmVkIGNoYXIJQ2xhc3NDb2RlMlszXTsJLyogQ2xhc3MgQ29kZSBmb3IgMm5kCi0JCQkJCQkJCVBDSSBmdW5jdGlvbiAqLworCQkJdTE2IERldmljZUlkMjsJLyogRGV2aWNlIElEIGZvciAybmQgUENJIGZ1bmN0aW9uICovCisJCQl1OCBJbnRQaW4yOwkvKiBJbnRlcnJ1cHQgcGluIGZvciAybmQgUENJIGZ1bmN0aW9uICovCisJCQl1OCBDbGFzc0NvZGUyWzNdOyAvKiBDbGFzcyBDb2RlIGZvciAybmQgUENJIGZ1bmN0aW9uICovCiAJCX0gbW9qYXZlOwkvKiAybmQgZnVuY3Rpb24gYWNjZXNzIGZvciBnaWdhYml0IGJvYXJkICovCiAJfSB1MjsKLQl1c2hvcnQJCUNmZ0J5dGU2OwkvKiBDb25maWcgQnl0ZSA2ICovCi0JdXNob3J0CQlQTUVDYXBhYjsJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLwotCXVzaG9ydAkJTndDbGtDdHJsczsJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KLQl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KLQlzdHJ1Y3QgYXRrX2ZydSAgIEF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwotCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBja3N1bSBieXRlcwotCQkJCSAqKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwl1MTYgQ2ZnQnl0ZTY7CQkvKiBDb25maWcgQnl0ZSA2ICovCisJdTE2IFBNRUNhcGFiOwkJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXUxNiBOd0Nsa0N0cmxzOwkJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KKwl1OCBGcnVGb3JtYXQ7CQkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLworCXN0cnVjdCBhdGtfZnJ1ICBBdGtGcnU7CS8qIEFsYWNyaXRlY2ggRlJVIGluZm9ybWF0aW9uICovCisJdTggT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtZnJ1IE9lbUZydTsJLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXU4CVBhZFs0XTsJCS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNrc3VtIGJ5dGVzCisJCQkJICogKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKIAkJCQkgKiBieXRlcyBhdCB0aGUgZW5kICovCiB9OwogCiAvKiBTTElDIEVFUFJPTSBzdHJ1Y3R1cmUgZm9yIE9hc2lzICovCiBzdHJ1Y3Qgb3NsaWNfZWVwcm9tIHsKLQl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCi0JdXNob3J0CQlFZWNvZGVTaXplOwkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCi0JdXNob3J0CQlGbGFzaENvbmZpZzA7CS8qIDAyIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAwICovCi0JdXNob3J0CQlGbGFzaENvbmZpZzE7CS8qIDAzIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAxICovCi0JdXNob3J0CQlWZW5kb3JJZDsJLyogMDQgVmVuZG9yIElEICovCi0JdXNob3J0CQlEZXZpY2VJZDsJLyogMDUgRGV2aWNlIElEIChmdW5jdGlvbiAwKSAqLwotCXVuc2lnbmVkIGNoYXIJUmV2aXNpb25JZDsJLyogMDYgUmV2aXNpb24gSUQgKi8KLQl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDAgKi8KLQl1bnNpZ25lZCBjaGFyCUludFBpbjE7CS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KLQl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZTJbM107CS8qIDA5IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAxICovCi0JdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCi0JdW5zaWduZWQgY2hhcglJbnRQaW4wOwkvKiAgICBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMCovCi0JdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KLQl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KLQl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLwotCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEzIFN1YnN5c3RlbSBJRCAqLwotCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLwotCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KLQl1c2hvcnQJCVJTaXplMlBjaTsJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8KLQkJCQkJCVBDSSAoYnl0ZXMgLyA0SykgKi8KLQl1c2hvcnQJCURldmljZUlkMTsJLyogMTcgRGV2aWNlIElkIChmdW5jdGlvbiAxKSAqLwotCXVzaG9ydAkJRGV2aWNlSWQyOwkvKiAxOCBEZXZpY2UgSWQgKGZ1bmN0aW9uIDIpICovCi0JdXNob3J0CQlDZmdCeXRlNjsJLyogMTkgRGV2aWNlIFN0YXR1cyBDb25maWcgQnl0ZXMgNi03ICovCi0JdXNob3J0CQlQTUVDYXBhYjsJLyogMjAgUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLwotCXVuc2lnbmVkIGNoYXIJCU1TSUNhcGFiOwkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCi0JdW5zaWduZWQgY2hhcgkJQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCi0JdXNob3J0CQlQY2lTdGF0dXNMb3c7CS8qIDIyIFBDSSBTdGF0dXMgYml0cyAxNTowICovCi0JdXNob3J0CQlQY2lTdGF0dXNIaWdoOwkvKiAyMyBQQ0kgU3RhdHVzIGJpdHMgMzE6MTYgKi8KLQl1c2hvcnQJCURyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KLQl1c2hvcnQJCURyYW1Db25maWdIaWdoOwkvKiAyNSBEUkFNIENvbmZpZ3VyYXRpb24gYml0cyAzMToxNiAqLwotCXVzaG9ydAkJRHJhbVNpemU7CS8qIDI2IERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCi0JdXNob3J0CQlHcGlvVGJpQ3RsOy8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCi0JdXNob3J0CQlFZXByb21TaXplOwkJLyogMjggRUVQUk9NIFNpemUgKi8KKwl1MTYgSWQ7CQkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCisJdTE2IEVlY29kZVNpemU7CQkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCisJdTE2IEZsYXNoQ29uZmlnMDsJLyogMDIgRmxhc2ggQ29uZmlnIGZvciBTUEkgZGV2aWNlIDAgKi8KKwl1MTYgRmxhc2hDb25maWcxOwkvKiAwMyBGbGFzaCBDb25maWcgZm9yIFNQSSBkZXZpY2UgMSAqLworCXUxNiBWZW5kb3JJZDsJCS8qIDA0IFZlbmRvciBJRCAqLworCXUxNiBEZXZpY2VJZDsJCS8qIDA1IERldmljZSBJRCAoZnVuY3Rpb24gMCkgKi8KKwl1OCBSZXZpc2lvbklkOwkJLyogMDYgUmV2aXNpb24gSUQgKi8KKwl1OCBDbGFzc0NvZGVbM107CS8qIDA3IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAwICovCisJdTggSW50UGluMTsJCS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KKwl1OCBDbGFzc0NvZGUyWzNdOwkvKiAwOSBDbGFzcyBDb2RlIGZvciBQQ0kgZnVuY3Rpb24gMSAqLworCXU4IEludFBpbjI7CQkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCisJdTggSW50UGluMDsJCS8qICAgIEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAwKi8KKwl1OCBNaW5HcmFudDsJCS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KKwl1OCBNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1MTYgU3ViU3lzVklkOwkJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXUxNiBTdWJTeXNJZDsJCS8qIDEzIFN1YnN5c3RlbSBJRCAqLworCXUxNiBGbGFzaFNpemU7CQkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLworCXUxNiBEU2l6ZTJQY2k7CQkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KKwl1MTYgUlNpemUyUGNpOwkJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8gUENJCisJCQkJCShieXRlcyAvIDRLKSAqLworCXUxNiBEZXZpY2VJZDE7CQkvKiAxNyBEZXZpY2UgSWQgKGZ1bmN0aW9uIDEpICovCisJdTE2IERldmljZUlkMjsJCS8qIDE4IERldmljZSBJZCAoZnVuY3Rpb24gMikgKi8KKwl1MTYgQ2ZnQnl0ZTY7CQkvKiAxOSBEZXZpY2UgU3RhdHVzIENvbmZpZyBCeXRlcyA2LTcgKi8KKwl1MTYgUE1FQ2FwYWI7CQkvKiAyMCBQb3dlciBNZ21lbnQgY2FwYWJpbGl0aWVzICovCisJdTggTVNJQ2FwYWI7CQkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCisJdTggQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCisJdTE2IFBjaVN0YXR1c0xvdzsJLyogMjIgUENJIFN0YXR1cyBiaXRzIDE1OjAgKi8KKwl1MTYgUGNpU3RhdHVzSGlnaDsJLyogMjMgUENJIFN0YXR1cyBiaXRzIDMxOjE2ICovCisJdTE2IERyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KKwl1MTYgRHJhbUNvbmZpZ0hpZ2g7CS8qIDI1IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDMxOjE2ICovCisJdTE2IERyYW1TaXplOwkJLyogMjYgRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwl1MTYgR3Bpb1RiaUN0bDsJCS8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCisJdTE2IEVlcHJvbVNpemU7CQkvKiAyOCBFRVBST00gU2l6ZSAqLwogCXN0cnVjdCBzbGljX2NvbmZpZ19tYWMgTWFjSW5mb1syXTsJLyogMjkgTUFDIGFkZHJlc3NlcyAoMiBwb3J0cykgKi8KLQl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogMzUgQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1OCBGcnVGb3JtYXQ7CQkvKiAzNSBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLwogCXN0cnVjdCBhdGtfZnJ1CUF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwotCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBjaGVja3N1bSBieXRlcworCXU4IE9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIG9lbWZydSBPZW1GcnU7CS8qIG9wdGlvbmFsIE9FTSBGUlUgaW5mb3JtYXRpb24gKi8KKwl1OCBQYWRbNF07CQkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBjaGVja3N1bSBieXRlcwogCQkJCSAqIChpZiBPRU0gRlJVIGluZm8gZXhpc3RzKSBhbmQgdHdvIHVudXNhYmxlCiAJCQkJICogYnl0ZXMgYXQgdGhlIGVuZAogCQkJCSAqLwpAQCAtODE5LDI0ICs4MDAsMjUgQEAKICNkZWZpbmUJTUFYX0VFQ09ERV9TSVpFCXNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pCiAjZGVmaW5lIE1JTl9FRUNPREVfU0laRQkweDYyCS8qIGNvZGUgc2l6ZSB3aXRob3V0IG9wdGlvbmFsIE9FTSBGUlUgc3R1ZmYgKi8KIAotLyogU0xJQyBDT05GSUcgc3RydWN0dXJlCi0KLSBUaGlzIHN0cnVjdHVyZSBsaXZlcyBpbiB0aGUgQ0FSRCBzdHJ1Y3R1cmUgYW5kIGlzIHZhbGlkIGZvciBhbGwKLSBib2FyZCB0eXBlcy4gIEl0IGlzIGZpbGxlZCBpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBFRVBST00gc3RydWN0dXJlCi0gYnkgU2xpY0dldENvbmZpZ0RhdGEoKS4KLSovCisvKgorICogU0xJQyBDT05GSUcgc3RydWN0dXJlCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdGhlIENBUkQgc3RydWN0dXJlIGFuZCBpcyB2YWxpZCBmb3IgYWxsIGJvYXJkIHR5cGVzLgorICogSXQgaXMgZmlsbGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIEVFUFJPTSBzdHJ1Y3R1cmUgYnkKKyAqIFNsaWNHZXRDb25maWdEYXRhKCkKKyAqLwogc3RydWN0IHNsaWNfY29uZmlnIHsKIAlib29sIEVlcHJvbVZhbGlkOwkvKiBWYWxpZCBFRVBST00gZmxhZyAoY2hlY2tzdW0gZ29vZD8pICovCi0JdXNob3J0CQlEcmFtU2l6ZTsJLyogRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwl1MTYgRHJhbVNpemU7CQkvKiBEUkFNIHNpemUgKGJ5dGVzIC8gNjRLKSAqLwogCXN0cnVjdCBzbGljX2NvbmZpZ19tYWMgTWFjSW5mb1tTTElDX05CUl9NQUNTXTsgLyogTUFDIGFkZHJlc3NlcyAqLwotCXVuc2lnbmVkIGNoYXIJCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1OCBGcnVGb3JtYXQ7CQkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLwogCXN0cnVjdCBhdGtfZnJ1CUF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXU4IE9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwogCXVuaW9uIHsKLQkJc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7Ci0JCXN0cnVjdCB2ZW5kb3IyX2ZydSAgIHZlbmRvcjJfZnJ1OwotCQlzdHJ1Y3QgdmVuZG9yM19mcnUgICB2ZW5kb3IzX2ZydTsKLQkJc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7CisJCXN0cnVjdCB2ZW5kb3IxX2ZydSB2ZW5kb3IxX2ZydTsKKwkJc3RydWN0IHZlbmRvcjJfZnJ1IHZlbmRvcjJfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yM19mcnUgdmVuZG9yM19mcnU7CisJCXN0cnVjdCB2ZW5kb3I0X2ZydSB2ZW5kb3I0X2ZydTsKIAl9IE9lbUZydTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyODhjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEZJTEVOQU1FOiBzbGljaW5jLmgKLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG90aGVyIGluY2x1ZGUgZmlsZXMgYW5kIHByb3RvdHlwZSBkZWZpbml0aW9ucwotICogZm9yIHRoZSBTTElDT1NTIGRyaXZlci4KLSAqLwotI2lmbmRlZiBfU0xJQ19JTkNMVURFX0hfCi0jZGVmaW5lIF9TTElDX0lOQ0xVREVfSF8KLQotI2luY2x1ZGUgInNsaWNfb3MuaCIKLSNpbmNsdWRlICJzbGljZGJnLmgiCi0jaW5jbHVkZSAic2xpY2h3LmgiCi0jaW5jbHVkZSAic2xpYy5oIgotCi1zdGF0aWMgaW50IHNsaWNfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAgICpwY2lkZXYsCi0JCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAgKmVudCk7Ci1zdGF0aWMgdm9pZCBzbGljX2VudHJ5X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKLQotc3RhdGljIHZvaWQgc2xpY19pbml0X2RyaXZlcih2b2lkKTsKLXN0YXRpYyBpbnQgIHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIHNsaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgaW50ICBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAgICAqYWRhcHRlciwKLQkJCXN0cnVjdCBza19idWZmICAgKnNrYiwKLQkJCXZvaWQgKmNtZCwKLQkJCXUzMiAgICAgICAgICAgc2tidHlwZSwKLQkJCXUzMiAgICAgICAgICAgc3RhdHVzKTsKLXN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgdWludCBmbHVzaCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpyZWcsCi0JdTMyIHZhbHVlLCB2b2lkIF9faW9tZW0gKnJlZ2gsIHUzMiBwYWRkcmgsIHVpbnQgZmx1c2gpOwotCi0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7Ci1zdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbGlua19ldmVudF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKTsKLXN0YXRpYyBpbnQgICBzbGljX3JzcHF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcnNwcXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfcnNwcXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgc3RydWN0IHNsaWNfcnNwYnVmICpzbGljX3JzcHF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcW1lbV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkICBzbGljX2NtZHFtZW1fZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdTMyICpzbGljX2NtZHFtZW1fYWRkcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50ICAgc2xpY19jbWRxX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkICBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9nZXRkb25lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkICBzbGljX2NtZHFfcHV0ZG9uZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCQlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQpOwotc3RhdGljIHN0cnVjdCBzbGljX2hvc3RjbWQgKnNsaWNfY21kcV9nZXRmcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcmN2cXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcmN2cXVldWVfZmlsbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdTMyIHNsaWNfcmN2cXVldWVfcmVpbnNlcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgIHNsaWNfcmN2cXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVfZXJyb3Ioc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmKTsKLXN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19jYXJkX2luaXQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2ludGFnZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2YWx1ZSk7Ci1zdGF0aWMgaW50ICBzbGljX2NhcmRfZG93bmxvYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHUzMiBzbGljX2NhcmRfbG9jYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLQotc3RhdGljIHZvaWQgc2xpY19pZl9zdG9wX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfaWZfc3RhcnRfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgIHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbGlua3NwZWVkLAotCQkJdTMyIGxpbmtkdXBsZXgpOwotc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfY2FyZF9jbGVhbnVwKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBzbGljX2luaXRfY2xlYW51cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3NvZnRfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGJvb2wgc2xpY19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJc3RydWN0IGV0aGVyX2hlYWRlciAqZXRoZXJfZnJhbWUpOwotc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19tYWNfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X21hc2soc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX21jYXN0X2FkZF9saXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsaWNfbWNhc3RfZ2V0X21hY19oYXNoKGNoYXIgKm1hY2FkZHIpOwotc3RhdGljIHZvaWQgIHNsaWNfbWNhc3Rfc2V0X2JpdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcyk7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua2NoYW5nZSk7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCi0JCQl1MzIgY29uZmlnaCk7Ci1zdGF0aWMgdm9pZCBzbGljX3RpbWVyX2xvYWRfY2hlY2sodWxvbmcgY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBzbGljX3RpbWVyX3BpbmcodWxvbmcgZGV2KTsKLXN0YXRpYyB2b2lkIHNsaWNfYXNzZXJ0X2ZhaWwodm9pZCk7Ci1zdGF0aWMgdXNob3J0IHNsaWNfZWVwcm9tX2Nrc3VtKGNoYXIgKm0sIGludCBsZW4pOwotLyogdXByICovCi1zdGF0aWMgdm9pZCBzbGljX3Vwcl9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfdXByX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgSXNyKTsKLXN0YXRpYyBpbnQgIHNsaWNfdXByX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgICAgKmFkYXB0ZXIsCi0JCQl1MzIgICAgICAgICAgICB1cHJfcmVxdWVzdCwKLQkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhLAotCQkJdTMyICAgICAgICAgICAgdXByX2RhdGFfaCwKLQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXIsCi0JCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2gpOwotc3RhdGljIGludCAgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAgICAgICphZGFwdGVyLAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0LAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhLAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhX2gsCi0JCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlciwKLQkJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2gpOwotc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3RfaW5pdF9jcmMzMih2b2lkKTsKLQotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi1zdGF0aWMgaW50ICAgc2xpY19kdW1wX3RocmVhZCh2b2lkICpjb250ZXh0KTsKLXN0YXRpYyB1aW50ICBzbGljX2luaXRfZHVtcF90aHJlYWQoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsaWNfZ2V0X2R1bXBfaW5kZXgoY2hhciAqcGF0aCk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9jYXJkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgYm9vbCByZXN1bWUpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfaGFsdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9yZWcoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfZGF0YShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBhZGRyLAotCQkJdXNob3J0IGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYnVmX3BoeXMsCi0JCQl1MzIgYnVmX3BoeXNoLCB1MzIgcXVldWUpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfbG9hZF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBkYXRhLAotCQkJCXUzMiBxdWV1ZSk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9jYW0oc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYWRkciwKLQkJCXUzMiBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKTsKLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcmVzdW1lKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKLXN0YXRpYyB1MzIgc2xpY19kdW1wX3NlbmRfY21kKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGNtZF9waHlzLAotCQkJCXUzMiBjbWRfcGh5c2gsIHUzMiBidWZfcGh5cywKLQkJCQl1MzIgYnVmX3BoeXNoKTsKLQotI2RlZmluZSBjcmVhdGVfZmlsZSh4KSAgICAgICAgIFNUQVRVU19TVUNDRVNTCi0jZGVmaW5lIHdyaXRlX2ZpbGUodywgeCwgeSwgeikgU1RBVFVTX1NVQ0NFU1MKLSNkZWZpbmUgY2xvc2VfZmlsZSh4KSAgICAgICAgICBTVEFUVVNfU1VDQ0VTUwotI2RlZmluZSByZWFkX2ZpbGUodywgeCwgeSwgeikgIFNUQVRVU19TVUNDRVNTCi0jZGVmaW5lIG9wZW5fZmlsZSh4KSAgICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKLQotLyogUEFHRV9TSVpFICogMTYgKi8KLSNkZWZpbmUgRFVNUF9QQUdFX1NJWkUgICAgICAgICAweEZGRkYKLSNkZWZpbmUgRFVNUF9QQUdFX1NJWkVfSEFMRiAgICAweDdGRkUKLSNlbmRpZgotCi0jZW5kaWYgLyogX1NMSUNfSU5DTFVERV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCmluZGV4IGJmN2RhOGYuLjk1MzY4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKQEAgLTU1LDE5ICs1NSwxMCBAQAogICovCiAKIAotI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRCAgICAgICAgICAgICAgIDAKICNkZWZpbmUgS0xVREdFX0ZPUl80R0JfQk9VTkRBUlkgICAgICAgICAxCiAjZGVmaW5lIERFQlVHX01JQ1JPQ09ERSAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJICAgICAgICAxCi0jZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkgICAgICAgICAgICAxCiAjZGVmaW5lIERCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTTElDX0FTU0VSVF9FTkFCTEVECQkgICAgICAgIDEKLSNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAkJCTEKLSNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAkwCi0jZGVmaW5lIFNMSUNfUElOR19USU1FUl9FTkFCTEVECQkgICAgMQotI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCiAjZGVmaW5lIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQJMQotI2RlZmluZSBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwkxCiAjZGVmaW5lIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQkJMQogI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKICNkZWZpbmUgUElOR19USU1FUl9JTlRFUlZBTAkJCSAgICAxCkBAIC0xMDIsMjAgKzkzLDczIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2RlZmluZSBTTElDX0VUSFRPT0xfU1VQUE9SVCAgICAgMQotCiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgInNsaWNpbmMuaCIKKyNpbmNsdWRlICJzbGljaHcuaCIKKyNpbmNsdWRlICJzbGljLmgiCiAKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotI2luY2x1ZGUgInNsaWNkdW1wLmgiCi0jZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIHZvaWQgKmNtZCwgdTMyIHNrYnR5cGUsIHUzMiBzdGF0dXMpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzbGljX3JjdnF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcik7CitzdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBzbGljX3JzcGJ1ZiAqc2xpY19yc3BxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19jbWRxX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX2dldGRvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpzbGljX2NtZHFfZ2V0ZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfcmN2cXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfcmN2cXVldWVfZmlsbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdTMyIHNsaWNfcmN2cXVldWVfcmVpbnNlcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19jYXJkX2luaXQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2ludGFnZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2YWx1ZSk7CitzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2lmX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGxpbmtzcGVlZCwKKwkJCSAgICAgdTMyIGxpbmtkdXBsZXgpOworc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY2FyZF9jbGVhbnVwKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdm9pZCBzbGljX3NvZnRfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGJvb2wgc2xpY19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJICAgIHN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBsaW5rY2hhbmdlKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKKwkJCSAgICB1MzIgY29uZmlnaCk7CitzdGF0aWMgdm9pZCBzbGljX3RpbWVyX2xvYWRfY2hlY2sodWxvbmcgY29udGV4dCk7CitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpOworc3RhdGljIHVzaG9ydCBzbGljX2VlcHJvbV9ja3N1bShjaGFyICptLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIHNsaWNfdXByX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBJc3IpOworc3RhdGljIGludCAgc2xpY191cHJfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHVwcl9yZXF1ZXN0LAorCQkJICAgICB1MzIgdXByX2RhdGEsIHUzMiB1cHJfZGF0YV9oLCB1MzIgdXByX2J1ZmZlciwKKwkJCSAgICAgdTMyIHVwcl9idWZmZXJfaCk7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0jZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVCAgMAogCiBzdGF0aWMgdWludCBzbGljX2ZpcnN0X2luaXQgPSAxOwogc3RhdGljIGNoYXIgKnNsaWNfYmFubmVyID0gIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKLQkJImFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworCQkiYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZCkiOwogCiBzdGF0aWMgY2hhciAqc2xpY19wcm9jX3ZlcnNpb24gPSAiMi4wLjM1MSAgMjAwNi8wNy8xNCAxMjoyNjowMCI7CiBzdGF0aWMgY2hhciAqc2xpY19wcm9kdWN0X25hbWUgPSAiU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKQEAgLTEyOSw4ICsxNzMsNiBAQAogc3RhdGljIHN0cnVjdCBiYXNlX2RyaXZlciBzbGljX2dsb2JhbCA9IHsge30sIDAsIDAsIDAsIDEsIE5VTEwsIE5VTEwgfTsKIHN0YXRpYyBpbnQgaW50YWdnX2RlbGF5ID0gMTAwOwogc3RhdGljIHUzMiBkeW5hbWljX2ludGFnZzsKLXN0YXRpYyBpbnQgZXJyb3Jtc2c7Ci1zdGF0aWMgaW50IGdvb2Rtc2c7CiBzdGF0aWMgdW5zaWduZWQgaW50IHJjdl9jb3VudDsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzbGljX2RlYnVnZnM7CiAKQEAgLTE2NCw2ICsyMDYsMjEgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNsaWNfcGNpX3RibCk7CiAKKyNpZmRlZiBBU1NFUlQKKyN1bmRlZiBBU1NFUlQKKyNlbmRpZgorCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkgZG8gewkJCQkJCQlcCisJaWYgKCEoYSkpIHsJCQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgInNsaWNvc3MgQVNTRVJUKCkgRmFpbHVyZTogZnVuY3Rpb24gJXMiCVwKKwkJCSJsaW5lICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwkJXAorCQlzbGljX2Fzc2VydF9mYWlsKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKICNkZWZpbmUgU0xJQ19HRVRfU0xJQ19IQU5ETEUoX2FkYXB0ZXIsIF9wc2xpY19oYW5kbGUpICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE5NSwxNyArMjUyLDE2IEBACiBzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfY3JlYXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CiBzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfZGVzdHJveShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCB1aW50IGZsdXNoKQorc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKIHsKIAl3cml0ZWwodmFsdWUsIHJlZyk7CiAJaWYgKGZsdXNoKQogCQltYigpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZywKLQkJCSAgICAgICB1MzIgdmFsdWUsCi0JCQkgICAgICAgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLCB1aW50IGZsdXNoKQorc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCQkJCSAgICB1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqcmVnaCwgdTMyIHBhZGRyaCwKKwkJCQkgICAgYm9vbCBmbHVzaCkKIHsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCiAJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKQEAgLTIyMyw0MyArMjc5LDEyIEBACiBzdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpCiB7CiAJaWYgKHNsaWNfZmlyc3RfaW5pdCkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzbGljX2ZpcnN0X2luaXQgc2V0IGppZmZpZXNbJWx4XVxuIiwKLQkJCV9fZnVuY19fLCBqaWZmaWVzKTsKIAkJc2xpY19maXJzdF9pbml0ID0gMDsKIAkJc3Bpbl9sb2NrX2luaXQoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2spOwogCQlzbGljX2RlYnVnX2luaXQoKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfZGJnX21hY2FkZHJzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCURCR19NU0coIiAgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOwotCURCR19NU0coIiAgKCVzKSBtYWMgICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPm1hY2FkZHJbMV0sIGFkYXB0ZXItPm1hY2FkZHJbMl0sCi0JCWFkYXB0ZXItPm1hY2FkZHJbM10sIGFkYXB0ZXItPm1hY2FkZHJbNF0sIGFkYXB0ZXItPm1hY2FkZHJbNV0pOwotCXJldHVybjsKLX0KLQotI2lmZGVmIERFQlVHX1JFR0lTVEVSX1RSQUNFCi1zdGF0aWMgdm9pZCBzbGljX2RiZ19yZWdpc3Rlcl90cmFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCXVpbnQgaTsKLQotCURCR19FUlJPUigiRHVtcCBSZWdpc3RlciBXcml0ZSBUcmFjZTogY3Vycl9peCA9PSAlZFxuIiwgY2FyZC0+ZGVidWdfaXgpOwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCURCR19FUlJPUigiJTJkICVkICU0eCAleCAleFxuIiwKLQkJCSAgaSwgY2FyZC0+cmVnX3R5cGVbaV0sIGNhcmQtPnJlZ19vZmZzZXRbaV0sCi0JCQkgIGNhcmQtPnJlZ192YWx1ZVtpXSwgY2FyZC0+cmVnX3ZhbHVlaFtpXSk7Ci0JfQotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHNsaWNfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAogCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnksCkBAIC0yNjgsOSArMjkzLDcgQEAKIAl1c2hvcnQgaW5kZXg7CiAJc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpOwotLyoKLSAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICAgbmV0ZGV2IFslcF1cbiAgICBhZGFwdGVyWyVwXVxuICAgICIKLQkgICAgInBjaWRldiBbJXBdXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCBuZXRkZXYsIGFkYXB0ZXIsIHBjaWRldik7Ki8KKwogLyoJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OyovCiAJYWRhcHRlci0+dmVuZGlkID0gcGNpX3RibF9lbnRyeS0+dmVuZG9yOwogCWFkYXB0ZXItPmRldmlkID0gcGNpX3RibF9lbnRyeS0+ZGV2aWNlOwpAQCAtMzEwLDE5ICszMzMsMTEgQEAKIAkJcHNsaWNfaGFuZGxlLT5uZXh0ID0gYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOwogCQlhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBwc2xpY19oYW5kbGU7CiAJfQotLyoKLSAgICBEQkdfTVNHKCIuLi4uLi4uLi5cbml4WyVkXSBwaGFuZGxlWyVwXSBwZnJlZVslcF0gbmV4dFslcF1cbiIsCi0JaW5kZXgsIHBzbGljX2hhbmRsZSwgYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzLCBwc2xpY19oYW5kbGUtPm5leHQpOyovCiAJYWRhcHRlci0+cHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopCiAJCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSwKIAkJCQkJJmFkYXB0ZXItPgogCQkJCQlwaHlzX3NobWVtKTsKLS8qCi0gICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICBwc2htZW0gICAgWyVwXVxuICAgcGh5c19zaG1lbVslcF1cbiJcCi0JCSJzbGljX3JlZ3MgWyVwXVxuIiwgX19mdW5jX18sIG5ldGRldi0+bmFtZSwgYWRhcHRlci0+cHNobWVtLAotCQkodm9pZCAqKWFkYXB0ZXItPnBoeXNfc2htZW0sIGFkYXB0ZXItPnNsaWNfcmVncyk7Ci0qLwogCUFTU0VSVChhZGFwdGVyLT5wc2htZW0pOwogCiAJbWVtc2V0KGFkYXB0ZXItPnBzaG1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSk7CkBAIC0zMzUsNyArMzUwLDcgQEAKIHsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gLUVOT0RFVjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwogCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkciA9IE5VTEw7CkBAIC0zNDQsNTQgKzM1OSwzNiBAQAogCXVsb25nIG1taW9fbGVuID0gMDsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBOVUxMOwogCi0JREJHX01TRygic2xpY29zczogJXMgMi42IFZFUlNJT04gRU5URVIgamlmZmllc1slbHhdIGNwdSAlZFxuIiwKLQkJX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KIAlzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZyA9IGR5bmFtaWNfaW50YWdnOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKIAotCURCR19NU0coIkNhbGwgcGNpX2VuYWJsZV9kZXZpY2UoJXApICBzdGF0dXNbJXhdXG4iLCBwY2lkZXYsIGVycik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChzbGljX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKLQkJcHJpbnRrKHNsaWNfYmFubmVyKTsKLQkJcHJpbnRrKHNsaWNfcHJvY192ZXJzaW9uKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX2Jhbm5lcik7CisJCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgc2xpY19wcm9jX3ZlcnNpb24pOwogCX0KIAogCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSyk7Ci0JaWYgKCFlcnIpIHsKLQkJREJHX01TRygicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7Ci0JfSBlbHNlIHsKKwlpZiAoZXJyKSB7CiAJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JCWlmIChlcnIpIHsKLQkJCURCR19NU0cKLQkJCSAgICAoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcgIGVyclsleF1cbiIsCi0JCQkgICAgIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCURCR19NU0coInBjaV9zZXRfZG1hX21hc2soRE1BXzMyQklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwogCX0KIAotCURCR19NU0coIkNhbGwgcGNpX3JlcXVlc3RfcmVnaW9uc1xuIik7Ci0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOwotCWlmIChlcnIpIHsKLQkJREJHX01TRygicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwogCi0JREJHX01TRygiY2FsbCBwY2lfc2V0X21hc3RlclxuIik7CiAJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKIAotCURCR19NU0coImNhbGwgYWxsb2NfZXRoZXJkZXZcbiIpOwogCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYWRhcHRlcikpOwogCWlmICghbmV0ZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9leGl0X3NsaWNfcHJvYmU7CiAJfQotCURCR19NU0coImFsbG9jX2V0aGVyZGV2IGZvciBzbGljIG5ldGRldlslcF1cbiIsIG5ldGRldik7CiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7CiAKQEAgLTQwMywyNCArNDAwLDE1IEBACiAJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwogCi0JREJHX01TRygic2xpY29zczogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCi0JCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAotLyogIG1lbW1hcHBlZF9pb2FkZHIgPSAgKHUzMilpb3JlbWFwX25vY2FjaGUobW1pb19zdGFydCwgbW1pb19sZW4pOyovCisvKgltZW1tYXBwZWRfaW9hZGRyID0gICh1MzIpaW9yZW1hcF9ub2NhY2hlKG1taW9fc3RhcnQsIG1taW9fbGVuKTsqLwogCW1lbW1hcHBlZF9pb2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAotCQltZW1tYXBwZWRfaW9hZGRyKTsKIAlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKLQkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAotCQkJICBfX2Z1bmNfXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU0xJQ09TUyBQQ0ksIE1NSU8gYXQgJXAsICJcCi0JICAgICJzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLAotCSAgICAgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7Ci0KIAlzbGljX2NvbmZpZ19wY2kocGNpZGV2KTsKIAogCXNsaWNfaW5pdF9kcml2ZXIoKTsKQEAgLTQzMCw3ICs0MTgsNyBAQAogCiAJc3RhdHVzID0gc2xpY19jYXJkX2xvY2F0ZShhZGFwdGVyKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCURCR19FUlJPUigiJXMgY2Fubm90IGxvY2F0ZSBjYXJkXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiY2Fubm90IGxvY2F0ZSBjYXJkXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CiAJfQogCkBAIC00NDEsMjIgKzQyOSwxMyBAQAogCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOwogCX0KIAotCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQ6ICAgICAgICAgICAgICVwXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+Y2FyZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlclslZF0gPT0gWyVwXVxuIiwgX19mdW5jX18sCi0JCSh1aW50KSBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQgWyVkXVxuIiwgX19mdW5jX18sCi0JCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkIFslZF1cbiIsIF9fZnVuY19fLAotCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpOwotCiAJc3RhdHVzID0gc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CiAKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAJCWNhcmQtPnN0YXRlID0gQ0FSRF9GQUlMOwogCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CiAJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKLQkJREJHX0VSUk9SKCJzbGljX2NhcmRfaW5pdCBGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKIAl9IGVsc2UgewogCQlzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKIAl9CkBAIC00NjgsOSArNDQ3LDcgQEAKIAluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNsaWNfeG1pdF9zdGFydDsKIAluZXRkZXYtPmRvX2lvY3RsID0gc2xpY19pb2N0bDsKIAluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNsaWNfbWFjX3NldF9hZGRyZXNzOwotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKIAluZXRkZXYtPmdldF9zdGF0cyA9IHNsaWNfZ2V0X3N0YXRzOwotI2VuZGlmCiAJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbGljX21jYXN0X3NldF9saXN0OwogCiAJc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShhZGFwdGVyKTsKQEAgLTQ3OCwzNSArNDU1LDI1IEBACiAJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVycikgewotCQlEQkdfRVJST1IoIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6IGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgIlwKLQkgICAgICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkgICAgIG1taW9fc3RhcnQsIC8qcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCksICovIHBjaWRldi0+aXJxLAotCSAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwKLQkgICAgIG5ldGRldi0+ZGV2X2FkZHJbM10sIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOwotCiAJY2FyZHNfZm91bmQrKzsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIHN0YXR1c1sleF0gamlmZmllc1slbHhdIGNwdSAlZFxuIiwKLQkJX19mdW5jX18sIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCXJldHVybiBzdGF0dXM7CiAKIGVycl9vdXRfdW5tYXA6CiAJaW91bm1hcChtZW1tYXBwZWRfaW9hZGRyKTsKLQogZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci0KK2Vycl9vdXRfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIGVycl9vdXRfZXhpdF9zbGljX3Byb2JlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKLQlEQkdfRVJST1IoIiVzIEVYSVQgamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19mdW5jX18sIGppZmZpZXMsCi0JCSAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCXJldHVybiAtRU5PREVWOworZXJyX291dF9kaXNhYmxlX3BjaToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTE4LDE2ICs0ODUsNiBAQAogCiAJQVNTRVJUKGFkYXB0ZXIpOwogCUFTU0VSVChjYXJkKTsKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgYWRhcHRlci0+YWN0aXZhdGVkWyVkXSBjYXJkLT5hZGFwdGVyc1sleF0gIlwKLQkgICAgICJhbGxvY2RbJXhdXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+YWN0aXZhdGVkLAotCSAgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLAotCSAgICAgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKTsKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgKCVzKTogW2ppZmZpZXNbJWx4XSBjcHUgJWRdIGRldlslcF0gYWRhcHRbJXBdICJcCi0JICAgICAicG9ydFslZF0gY2FyZFslcF1cbiIsCi0JICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCksCi0JICAgICBhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQsIGNhcmQpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogCkBAIC01NTQsMjkgKzUxMSwxNCBAQAogCQl9CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIHNldCBjYXJkLT5tYXN0ZXJbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJY2FyZC0+bWFzdGVyLCBhZGFwdGVyKTsKIAlpZiAoIWNhcmQtPm1hc3RlcikKIAkJY2FyZC0+bWFzdGVyID0gYWRhcHRlcjsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmICghKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZykpCi0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmR1bXBfd3EpOwotI2VuZGlmCiAKIAlpZiAobG9ja2VkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCiAJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKIAkJbG9ja2VkID0gMDsKIAl9Ci0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLQlpZiAoIShjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcpKSB7Ci0JCURCR19NU0coImF0dGVtcHQgdG8gaW5pdGlhbGl6ZSBkdW1wIHRocmVhZFxuIik7Ci0JCXN0YXR1cyA9IHNsaWNfaW5pdF9kdW1wX3RocmVhZChjYXJkKTsKLQkJLyoKLQkJRXZlbiBpZiB0aGUgZHVtcCB0aHJlYWQgZmFpbHMsIHdlIHdpbGwgY29udGludWUgYXQgdGhpcyBwb2ludAotCQkqLwotCX0KLSNlbmRpZgogCiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQpAQCAtNTkxLDIyICs1MzMsMTUgQEAKIAlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7CiAKIAlBU1NFUlQoYWRhcHRlcik7Ci0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgZGV2WyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGRldiwKLQkJYWRhcHRlcik7CiAJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CiAJc2xpY191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOwotCURCR19NU0coInNsaWNvc3M6ICVzIHVucmVnaXN0ZXJfbmV0ZGV2XG4iLCBfX2Z1bmNfXyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKIAltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIHJlbF9yZWdpb24oMCkgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fZnVuY19fLAotCQltbWlvX3N0YXJ0LCBtbWlvX2xlbik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIGlvdW5tYXAgZGV2LT5iYXNlX2FkZHJbJXhdXG4iLCBfX2Z1bmNfXywKLQkJKHVpbnQpIGRldi0+YmFzZV9hZGRyKTsKIAlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcik7CiAJLyogZnJlZSBtdWx0aWNhc3QgYWRkcmVzc2VzICovCiAJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwpAQCAtNjIwLDEwICs1NTUsNiBAQAogCUFTU0VSVChjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOwogCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZC0tOwogCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDA7Ci0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzIGluaXRbJXhdIGFsbG9jWyV4XSBjYXJkWyVwXSBhZGFwdGVyWyVwXVxuIiwKLQkgICAgIF9fZnVuY19fLCBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCwKLQkgICAgIGNhcmQsIGFkYXB0ZXIpOwogCWlmICghY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKSB7CiAJCXN0cnVjdCBzbGljY2FyZCAqY3Vycl9jYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwogCQlpZiAoY3Vycl9jYXJkID09IGNhcmQpIHsKQEAgLTYzOCwxMCArNTY5LDggQEAKIAkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMtLTsKIAkJc2xpY19jYXJkX2NsZWFudXAoY2FyZCk7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJa2ZyZWUoZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7Ci0JREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNjUzLDc1ICs1ODIsMzUgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKIAkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CiAJQVNTRVJUKGNhcmQpOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVJcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgYWN0dnRkWyVkXSBhbGxvY1slZF0gc3RhdGVbJXhdIGFkYXB0WyVwXVxuIiwKLQkJX19mdW5jX18sIGRldi0+bmFtZSwgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLAotCQljYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQsIGNhcmQtPnN0YXRlLCBhZGFwdGVyKTsKLQlzbGljX2lmX3N0b3BfcXVldWUoYWRhcHRlcik7CisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKIAlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CiAJYWRhcHRlci0+dXByX2xpc3QgPSBOVUxMOwogCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKIAlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKLQkJX19mdW5jX18sIGRldi0+bmFtZSwgYWRhcHRlciwgYWRhcHRlci0+c3RhdGUpOwogCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPmNhcmRpbmRleF0gPT0gYWRhcHRlcik7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKIAlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcysrOwogCWFkYXB0ZXItPmljcl9yZWdfd3JpdGVzKys7CiAJc2xpY19jb25maWdfY2xlYXIoYWRhcHRlcik7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBkZXZbJXBdIGFkYXB0WyVwXSBjYXJkWyVwXVxuIiwKLQkJX19mdW5jX18sIGRldi0+bmFtZSwgZGV2LCBhZGFwdGVyLCBjYXJkKTsKIAlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CiAJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOwogCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUtLTsKIAkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKIAl9CiAjaWZkZWYgQVVUT01BVElDX1JFU0VUCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yZXNldF9pZmFjZSwgMCwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yZXNldF9pZmFjZSwgMCwgRkxVU0gpOwogI2VuZGlmCiAJLyoKLQkgKiAgUmVzZXQgdGhlIGFkYXB0ZXIncyByc3AsIGNtZCwgYW5kIHJjdiBxdWV1ZXMKKwkgKiAgUmVzZXQgdGhlIGFkYXB0ZXIncyBjbWQgcXVldWVzCiAJICovCiAJc2xpY19jbWRxX3Jlc2V0KGFkYXB0ZXIpOwotCXNsaWNfcnNwcXVldWVfcmVzZXQoYWRhcHRlcik7Ci0Jc2xpY19yY3ZxdWV1ZV9yZXNldChhZGFwdGVyKTsKIAogI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAotCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKSB7Ci0KLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCQlpZiAoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSB7Ci0JCQl1aW50IHN0YXR1czsKLQkJCURCR19NU0coImF0dGVtcHQgdG8gdGVybWluYXRlIGR1bXAgdGhyZWFkIHBpZFsleF1cbiIsCi0JCQkJY2FyZC0+ZHVtcF90YXNrX2lkKTsKLQkJCXN0YXR1cyA9IGtpbGxfcHJvYyhjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCwgU0lHS0lMTCwgMSk7Ci0KLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJaW50IGNvdW50ID0gMTAgKiAxMDA7Ci0JCQkJd2hpbGUgKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZyAmJiAtLWNvdW50KSB7Ci0JCQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQkJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCQkJCX0KLQotCQkJCWlmICghY291bnQpIHsKLQkJCQkJREJHX01TRwotCQkJCQkgICAgKCJzbGljbW9uIHRocmVhZCBjbGVhbnVwIEZBSUxFRCBcCi0JCQkJCSAgICAgcGlkWyV4XVxuIiwKLQkJCQkJICAgICBjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0jZW5kaWYKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBpbml0aWF0ZSBDQVJEX0hBTFRcbiIsIF9fZnVuY19fLAotCQkJZGV2LT5uYW1lKTsKLQorCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQogCQlzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKLQl9CiAjZW5kaWYKIAotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVFxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7Ci0JREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCiAJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKQEAgLTcyOSw2OSArNjE4LDI3IEBACiAKIHN0YXRpYyBpbnQgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogeworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWRhdGE7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJdTMyIGRhdGFbN107CisJdTMyIGludGFnZzsKKwogCUFTU0VSVChycSk7Ci0vKgotICAgICAgREJHX01TRygic2xpY29zczogJXMgY21kWyV4XSBycVslcF0gZGV2WyVwXVxuIiwgX19mdW5jX18sIGNtZCwgcnEsIGRldik7Ci0qLwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DU0xJQ1NFVElOVEFHRzoKLQkJewotCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKLQkJCQkJCQluZXRkZXZfcHJpdihkZXYpOwotCQkJdTMyIGRhdGFbN107Ci0JCQl1MzIgaW50YWdnOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKLQkJCQlEQkdfRVJST1IKLQkJCQkgICAgKCJjb3B5X2Zyb21fdXNlciBGQUlMRUQgZ2V0dGluZyBpbml0aWFsIFwKLQkJCQkgICAgIHBhcmFtc1xuIik7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQlpbnRhZ2cgPSBkYXRhWzBdOwotCQkJcHJpbnRrKEtFUk5fRU1FUkcKLQkJCSAgICAgICAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIGludGFnZyk7Ci0JCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnKTsKLQkJCXJldHVybiAwOwotCQl9Ci0jaWZkZWYgU0xJQ19VU0VSX1JFUVVFU1RfRFVNUF9FTkFCTEVECi0JY2FzZSBTSU9DU0xJQ0RVTVBDQVJEOgotCQl7Ci0JCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JCQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7Ci0KLQkJCUFTU0VSVChhZGFwdGVyKTsKLQkJCUFTU0VSVChhZGFwdGVyLT5jYXJkKQotCQkJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0KLQkJCURCR19JT0NUTCgic2xpY19pb2N0bCAgU0lPQ1NMSUNfRFVNUF9DQVJEXG4iKTsKLQotCQkJaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9ET05FKSB7Ci0JCQkJcHJpbnRrKFNMSUNMRVZFTAotCQkJCSAgICAgICAiU0xJQyBDYXJkIGR1bXAgdG8gYmUgb3ZlcndyaXR0ZW5cbiIpOwotCQkJCWNhcmQtPmR1bXBfcmVxdWVzdGVkID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKLQkJCX0gZWxzZSBpZiAoKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpCi0JCQkJICAgfHwgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09Ci0JCQkJICAgICAgIFNMSUNfRFVNUF9JTl9QUk9HUkVTUykpIHsKLQkJCQlwcmludGsoU0xJQ0xFVkVMCi0JCQkJICAgICAgICJTTElDIENhcmQgZHVtcCBSZXF1ZXN0ZWQgYnV0IGFscmVhZHkgXAotCQkJCQlpbiBwcm9ncmVzcy4uLiBpZ25vcmVcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoU0xJQ0xFVkVMCi0JCQkJICAgICAgICJTTElDIENhcmQgIyVkIER1bXAgUmVxdWVzdGVkXG4iLAotCQkJCSAgICAgICBjYXJkLT5jYXJkbnVtKTsKLQkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpbnRhZ2cgPSBkYXRhWzBdOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBzZXQgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRvICVkXG4iLAorCQkJX19mdW5jX18sIGludGFnZyk7CisJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOworCQlyZXR1cm4gMDsKIAogI2lmZGVmIFNMSUNfVFJBQ0VfRFVNUF9FTkFCTEVECiAJY2FzZSBTSU9DU0xJQ1RSQUNFRFVNUDoKIAkJewotCQkJdWxvbmcgZGF0YVs3XTsKLQkJCXVsb25nIHZhbHVlOwotCisJCQl1MzIgdmFsdWU7CiAJCQlEQkdfSU9DVEwoInNsaWNfaW9jdGwgIFNJT0NTTElDX1RSQUNFX0RVTVBcbiIpOwogCiAJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKQEAgLTgyNCwxMDQgKzY3MSw3NiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KICNlbmRpZgotI2lmIFNMSUNfRVRIVE9PTF9TVVBQT1JUCiAJY2FzZSBTSU9DRVRIVE9PTDoKLQkJewotCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKLQkJCQkJCQluZXRkZXZfcHJpdihkZXYpOwotCQkJc3RydWN0IGV0aHRvb2xfY21kIGRhdGE7Ci0JCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwkJQVNTRVJUKGFkYXB0ZXIpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGVjbWQpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCi0JCQlBU1NFUlQoYWRhcHRlcik7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBTSU9DRVRIVE9PTFxuIiwgX19mdW5jX18pOyAqLwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZlY21kLCBycS0+aWZyX2RhdGEsIHNpemVvZihlY21kKSkpCisJCWlmIChlY21kLmNtZCA9PSBFVEhUT09MX0dTRVQpIHsKKwkJCWVkYXRhLnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9NSUkpOworCQkJZWRhdGEucG9ydCA9IFBPUlRfTUlJOworCQkJZWRhdGEudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCQkJZWRhdGEucGh5X2FkZHJlc3MgPSAwOworCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJZWxzZQorCQkJCWVkYXRhLnNwZWVkID0gMDsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCWVsc2UKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJZWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJZWRhdGEubWF4dHhwa3QgPSAxOworCQkJZWRhdGEubWF4cnhwa3QgPSAxOworCQkJaWYgKGNvcHlfdG9fdXNlcihycS0+aWZyX2RhdGEsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCWlmIChlY21kLmNtZCA9PSBFVEhUT09MX0dTRVQpIHsKLQkJCQlkYXRhLnN1cHBvcnRlZCA9Ci0JCQkJICAgIChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCSAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJCSAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCSAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfTUlJKTsKLQkJCQlkYXRhLnBvcnQgPSBQT1JUX01JSTsKLQkJCQlkYXRhLnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLQkJCQlkYXRhLnBoeV9hZGRyZXNzID0gMDsKLQkJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCi0JCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKLQkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQl9IGVsc2UgaWYgKGVjbWQuY21kID09IEVUSFRPT0xfU1NFVCkgeworCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJCXJldHVybiAtRVBFUk07CisKKwkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWVsc2UKKwkJCQllZGF0YS5zcGVlZCA9IDA7CisKKwkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCisJCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQllbHNlCisJCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJCWVkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCWVkYXRhLm1heHR4cGt0ID0gMTsKKwkJCWVkYXRhLm1heHJ4cGt0ID0gMTsKKwkJCWlmICgoZWNtZC5zcGVlZCAhPSBlZGF0YS5zcGVlZCkgfHwKKwkJCSAgICAoZWNtZC5kdXBsZXggIT0gZWRhdGEuZHVwbGV4KSkgeworCQkJCXUzMiBzcGVlZDsKKwkJCQl1MzIgZHVwbGV4OworCisJCQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTApCisJCQkJCXNwZWVkID0gMDsKIAkJCQllbHNlCi0JCQkJCWRhdGEuc3BlZWQgPSAwOwotCi0JCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKLQkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQkJc3BlZWQgPSBQQ1JfU1BFRURfMTAwOworCQkJCWlmIChlY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJZHVwbGV4ID0gUENSX0RVUExFWF9GVUxMOwogCQkJCWVsc2UKLQkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQotCQkJCWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCQkJCWRhdGEubWF4dHhwa3QgPSAxOwotCQkJCWRhdGEubWF4cnhwa3QgPSAxOwotCQkJCWlmIChjb3B5X3RvX3VzZXIKLQkJCQkgICAgKHJxLT5pZnJfZGF0YSwgJmRhdGEsIHNpemVvZihkYXRhKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQl9IGVsc2UgaWYgKGVjbWQuY21kID09IEVUSFRPT0xfU1NFVCkgewotCQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQkJcmV0dXJuIC1FUEVSTTsKLQotCQkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKLQkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQotCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTA7Ci0JCQkJZWxzZQotCQkJCQlkYXRhLnNwZWVkID0gMDsKLQotCQkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCi0JCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQkJZWxzZQotCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOwotCi0JCQkJZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQkJZGF0YS5tYXh0eHBrdCA9IDE7Ci0JCQkJZGF0YS5tYXhyeHBrdCA9IDE7Ci0JCQkJaWYgKChlY21kLnNwZWVkICE9IGRhdGEuc3BlZWQpIHx8Ci0JCQkJICAgIChlY21kLmR1cGxleCAhPSBkYXRhLmR1cGxleCkpIHsKLQkJCQkJdTMyIHNwZWVkOwotCQkJCQl1MzIgZHVwbGV4OwotCi0JCQkJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwKSB7Ci0JCQkJCQlzcGVlZCA9IDA7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIiVzOiBzbGljIEVUSFRPT0wgc2V0IFwKLQkJCQkJCSAgICAgbGluayBzcGVlZD09MTBNQiIsCi0JCQkJCQkgICAgIGRldi0+bmFtZSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzcGVlZCA9IFBDUl9TUEVFRF8xMDA7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIiVzOiBzbGljIEVUSFRPT0wgc2V0IFwKLQkJCQkJCSAgICBsaW5rIHNwZWVkPT0xMDBNQiIsCi0JCQkJCQkgICAgIGRldi0+bmFtZSk7Ci0JCQkJCX0KLQkJCQkJaWYgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJCQlkdXBsZXggPSBQQ1JfRFVQTEVYX0ZVTEw7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIjogZHVwbGV4PT1GVUxMXG4iKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWR1cGxleCA9IDA7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIjogZHVwbGV4PT1IQUxGXG4iKTsKLQkJCQkJfQotCQkJCQlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsCi0JCQkJCQkJIHNwZWVkLCBkdXBsZXgpOwotCQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKLQkJCQl9CisJCQkJCWR1cGxleCA9IDA7CisJCQkJc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLCBzcGVlZCwgZHVwbGV4KTsKKwkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKIAkJCX0KLQkJCXJldHVybiAwOwogCQl9Ci0jZW5kaWYKKwkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKLS8qICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBVTlNVUFBPUlRFRFsleF1cbiIsIF9fZnVuY19fLCBjbWQpOyAqLwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogfQpAQCAtOTcwLDExICs3ODksNiBAQAogCiAJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CiAJQVNTRVJUKGNhcmQpOwotLyoKLSAgICBEQkdfRVJST1IoInhtaXRfc3RhcnQgKCVzKSBFTlRFUiBza2JbJXBdIGxlblslZF0gbGlua3N0YXRlWyV4XSBzdGF0ZVsleF1cbiIsCi0JYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+bGVuLCBhZGFwdGVyLT5saW5rc3RhdGUsCi0JIGFkYXB0ZXItPnN0YXRlKTsKLSovCiAJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgfHwKIAkgICAgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB8fCAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9VUCkpIHsKIAkJc3RhdHVzID0gWE1JVF9GQUlMX0xJTktfU1RBVEU7CkBAIC0xMDE1LDE0ICs4MjksMTMgQEAKIAl9CiAjZW5kaWYKIAlpZiAoaGNtZC0+cGFkZHJoID09IDApIHsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyLAotCQkJICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhciwKKwkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLCBET05UX0ZMVVNIKTsKIAl9IGVsc2UgewotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyNjQsCi0JCQkgICAgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJICAgIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyNjQsCisJCQkJIChoY21kLT5wYWRkcmwgfCBoY21kLT5jbWRzaXplKSwKKwkJCQkgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSBoY21kLT5wYWRkcmgsIERPTlRfRkxVU0gpOwogCX0KIHhtaXRfZG9uZToKIAlyZXR1cm4gMDsKQEAgLTEwMzYsMjkgKzg0OSwyOSBAQAogCQkgICAgdm9pZCAqY21kLCB1MzIgc2tidHlwZSwgdTMyIHN0YXR1cykKIHsKIAlpZiAoYWRhcHRlci0+eG1pdHFfZnVsbCkKLQkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAJaWYgKChjbWQgPT0gTlVMTCkgJiYgKHN0YXR1cyA8PSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMKSkgewogCQlzd2l0Y2ggKHN0YXR1cykgewogCQljYXNlIFhNSVRfRkFJTF9MSU5LX1NUQVRFOgotCQkJREJHX0VSUk9SCi0JCQkgICAgKCIoJXMpIHJlamVjdCB4bWl0IHNrYlslcDogJXhdIGxpbmtzdGF0ZVslc10gXAotCQkJICAgICBhZGFwdGVyWyVzOiVkXSBjYXJkWyVzOiVkXVxuIiwKLQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+cGt0X3R5cGUsCi0JCQkgICAgIFNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSksCi0JCQkgICAgIFNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksIGFkYXB0ZXItPnN0YXRlLAotCQkJICAgICBTTElDX0NBUkRfU1RBVEUoYWRhcHRlci0+Y2FyZC0+c3RhdGUpLAotCQkJICAgICBhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkicmVqZWN0IHhtaXQgc2tiWyVwOiAleF0gbGlua3N0YXRlWyVzXSAiCisJCQkJImFkYXB0ZXJbJXM6JWRdIGNhcmRbJXM6JWRdXG4iLAorCQkJCXNrYiwgc2tiLT5wa3RfdHlwZSwKKwkJCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAorCQkJCVNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksCisJCQkJYWRhcHRlci0+c3RhdGUsCisJCQkJU0xJQ19DQVJEX1NUQVRFKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSwKKwkJCQlhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBYTUlUX0ZBSUxfWkVST19MRU5HVEg6Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoInhtaXRfc3RhcnQgc2tiLT5sZW4gPT0gMCBza2JbJXBdIHR5cGVbJXhdISEhISBcbiIsCi0JCQkgICAgIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkieG1pdF9zdGFydCBza2ItPmxlbiA9PSAwIHNrYlslcF0gdHlwZVsleF1cbiIsCisJCQkJc2tiLCBza2ItPnBrdF90eXBlKTsKIAkJCWJyZWFrOwogCQljYXNlIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUw6Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoInhtaXRfc3RhcnQgc2tiWyVwXSB0eXBlWyV4XSBObyBob3N0IGNvbW1hbmRzIFwKLQkJCSAgICAgYXZhaWxhYmxlICEhISEgXG4iLAotCQkJICAgICBza2IsIHNrYi0+cGt0X3R5cGUpOworCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJInhtaXRfc3RhcnQgc2tiWyVwXSB0eXBlWyV4XSBObyBob3N0IGNvbW1hbmRzICIKKwkJCQkiYXZhaWxhYmxlXG4iLCBza2IsIHNrYi0+cGt0X3R5cGUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlBU1NFUlQoMCk7CkBAIC0xMTgzLDExICs5OTYsNiBAQAogCiAJCWlmICghc2xpY19tYWNfZmlsdGVyKGFkYXB0ZXIsIChzdHJ1Y3QgZXRoZXJfaGVhZGVyICopCiAJCQkJCXJjdmJ1Zi0+ZGF0YSkpIHsKLSNpZiAwCi0JCQlEQkdfTVNHCi0JCQkgICAgKCJzbGljb3NzOiAlcyAoJXMpIGRyb3AgZnJhbWUgZHVlIHRvIG1hYyBmaWx0ZXJcbiIsCi0JCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwotI2VuZGlmCiAJCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTI0MiwxMiArMTA1MCw2IEBACiAJCUFTU0VSVChoY21kKTsKIAkJQVNTRVJUKGhjbWQtPnBzbGljX2hhbmRsZSA9PQogCQkgICAgICAgJmFkYXB0ZXItPnNsaWNfaGFuZGxlc1tzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleF0pOwotLyoKLSAgICAgIERCR19FUlJPUigieG1pdF9jb21wbGV0ZSAoJXMpICAgaGNtZFslcF0gIGhvc3RoYW5kbGVbJXhdXG4iLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGhjbWQsIGhjbWQtPmNtZDY0Lmhvc3RoYW5kbGUpOwotICAgICAgREJHX0VSUk9SKCIgICAgc2tiWyVwXSBsZW4gJWQgIGhjbWR0eXBlWyV4XVxuIiwgaGNtZC0+c2tiLAotCQloY21kLT5za2ItPmxlbiwgaGNtZC0+dHlwZSk7Ci0qLwogCQlpZiAoaGNtZC0+dHlwZSA9PSBTTElDX0NNRF9EVU1CKSB7CiAJCQlpZiAoaGNtZC0+c2tiKQogCQkJCWRldl9rZnJlZV9za2JfaXJxKGhjbWQtPnNrYik7CkBAIC0xMjY3LDcgKzEwNjksOCBAQAogCXUzMiBpc3I7CiAKIAlpZiAoKGFkYXB0ZXItPnBzaG1lbSkgJiYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSkgewotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9NQVNLLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pY3IsCisJCQkJIElDUl9JTlRfTUFTSywgRkxVU0gpOwogCQlpc3IgPSBhZGFwdGVyLT5pc3Jjb3B5ID0gYWRhcHRlci0+cHNobWVtLT5pc3I7CiAJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKIAkJYWRhcHRlci0+bnVtX2lzcnMrKzsKQEAgLTEyOTksMjkgKzExMDIsMTggQEAKIAkJCQkJCQlpZiAoIWNvdW50KQogCQkJCQkJCQlicmVhazsKIAkJCQkJCX0KLQkJCQkJCURCR19NU0cKLQkJCQkJCSAgICAoIiglcyk6IFsleF0gSVNSX1JNSVNTIFwKLQkJCQkJCSAgICAgaW5pdGlhbFsleF0gcHJlWyV4XSBcCi0JCQkJCQkgICAgIGVycm9yc1sleF0gXAotCQkJCQkJICAgICBwb3N0X2NvdW50WyV4XVxuIiwKLQkJCQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJCQkJICAgICBpc3IsIHJjdl9jb3VudCwgcHJlX2NvdW50LAotCQkJCQkJICAgICBlcnJvcnMsIHJjdnEtPmNvdW50KTsKIAkJCQkJfSBlbHNlIGlmIChpc3IgJiBJU1JfWERST1ApIHsKLQkJCQkJCURCR19FUlJPUgotCQkJCQkJICAgICgiaXNyICYgSVNSX0VSUiBbJXhdIFwKLQkJCQkJCSAgICAgSVNSX1hEUk9QIFxuIiwKLQkJCQkJCSAgICAgaXNyKTsKKwkJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkJCSJpc3IgJiBJU1JfRVJSIFsleF0gIgorCQkJCQkJCSJJU1JfWERST1AgXG4iLCBpc3IpOwogCQkJCQl9IGVsc2UgewotCQkJCQkJREJHX0VSUk9SCi0JCQkJCQkgICAgKCJpc3IgJiBJU1JfRVJSIFsleF1cbiIsCi0JCQkJCQkgICAgIGlzcik7CisJCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJCQkiaXNyICYgSVNSX0VSUiBbJXhdXG4iLAorCQkJCQkJCWlzcik7CiAJCQkJCX0KIAkJCQl9CiAKIAkJCQlpZiAoaXNyICYgSVNSX0xFVkVOVCkgewotCQkJCQkvKkRCR19NU0coIiVzICglcykgIElTUl9MRVZFTlQgXG4iLAotCQkJCQkgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsqLwogCQkJCQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cysrOwogCQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKIAkJCQl9CkBAIC0xMzU5LDcgKzExNTEsNyBAQAogCQlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKIAkJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMgKz0gMjsKIAkJYWRhcHRlci0+aXNyX3JlZ193cml0ZXMrKzsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPmZhbHNlX2ludGVycnVwdHMrKzsKIAl9CkBAIC0xMzg5LDExICsxMTgxLDYgQEAKIAlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotLyoKLSAgICBEQkdfTVNHKCJzbGljX2V2ZW50X2hhbmRsZXIgIHBzaG1lbS0+bGlua3N0YXR1c1sleF0gIHBzaG1lbVslcF1cbiAgIFwKLQkmbGlua3N0YXR1c1slcF0gJmlzclslcF1cbiIsIGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1cywgcHNobWVtLAotCSZwc2htZW0tPmxpbmtzdGF0dXMsICZwc2htZW0tPmlzcik7Ci0qLwogCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKIAkJCQkgIFNMSUNfVVBSX1JMU1IsCiAJCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKQEAgLTE0MTEsNDYgKzExOTgsMjkgQEAKIAogc3RhdGljIHZvaWQgc2xpY19pbml0X2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF0gIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCWlmIChhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgewotCQlEQkdfTVNHKCJGUkVFX0lSUSAiKTsKIAkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAwOwogCQlmcmVlX2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKIAogCX0KIAlpZiAoYWRhcHRlci0+cHNobWVtKSB7Ci0JCURCR19NU0coIkZSRUVfU0hNRU0gIik7Ci0JCURCR19NU0coImFkYXB0ZXJbJXBdIHBvcnQgJWQgcHNobWVtWyVwXSBGcmVlU2htZW0gIiwKLQkJCWFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQsICh2b2lkICopIGFkYXB0ZXItPnBzaG1lbSk7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pLAogCQkJCSAgICBhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPnBoeXNfc2htZW0pOwogCQlhZGFwdGVyLT5wc2htZW0gPSBOVUxMOwogCQlhZGFwdGVyLT5waHlzX3NobWVtID0gKGRtYV9hZGRyX3QpIE5VTEw7CiAJfQotI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKLQlpZiAoYWRhcHRlci0+c3RhdHN0aW1lcnNldCkgewotCQlEQkdfTVNHKCJzdGF0c3RpbWVyICIpOwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyc2V0ID0gMDsKLQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQl9Ci0jZW5kaWYKLSNpZiAhU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKLS8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVEKi8KKwogCWlmIChhZGFwdGVyLT5waW5ndGltZXJzZXQpIHsKLQkJREJHX01TRygicGluZ3RpbWVyICIpOwogCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAwOwogCQlkZWxfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiAJfQotI2VuZGlmCisKIAlzbGljX3JzcHF1ZXVlX2ZyZWUoYWRhcHRlcik7CiAJc2xpY19jbWRxX2ZyZWUoYWRhcHRlcik7CiAJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOwotCi0JREJHX01TRygiXG4iKTsKIH0KIAotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CkBAIC0xNDcwLDcgKzEyNDAsNiBAQAogCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gMDsKIAlyZXR1cm4gJmFkYXB0ZXItPnN0YXRzOwogfQotI2VuZGlmCiAKIC8qCiAgKiAgQWxsb2NhdGUgYSBtY2FzdF9hZGRyZXNzIHN0cnVjdHVyZSB0byBob2xkIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KQEAgLTE0OTEsNyArMTI2MCw3IEBACiAJfQogCiAJLyogRG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgQWxsb2NhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBpdCAqLwotCW1jYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2FzdF9hZGRyZXNzKSwgR0ZQX0FUT01JQyk7CisJbWNhZGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1jYXN0X2FkZHJlc3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAobWNhZGRyID09IE5VTEwpCiAJCXJldHVybiAxOwogCkBAIC0xNjA4LDggKzEzNzcsNiBAQAogCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAl9CiAKLQlEQkdfTVNHKCIlcyBhLT5kZXZmbGFnc19wcmV2WyV4XSBkZXYtPmZsYWdzWyV4XSBzdGF0dXNbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiwgZGV2LT5mbGFncywgc3RhdHVzKTsKIAlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7CiAJCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CiAJCWlmIChkZXYtPmZsYWdzKSB7CkBAIC0xNjIzLDkgKzEzOTAsNyBAQAogCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOwogCQl9CiAJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwotCQlEQkdfTVNHKCIlcyBjYWxsIHNsaWNfY29uZmlnX3NldCBhZGFwdGVyLT5tYWNvcHRzWyV4XVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLT5tYWNvcHRzKTsKLQkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7CiAJfSBlbHNlIHsKIAkJaWYgKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykKIAkJCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7CkBAIC0xNjM3LDM2ICsxNDAyLDIzIEBACiB7CiAJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CiAKLQlEQkdfTVNHKCIlcyBFTlRFUiAoJXMpIG1hY29wdHNbJXhdIG1hc2tbJWxseF1cbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsICh1aW50KSBhZGFwdGVyLT5tYWNvcHRzLAotCQlhZGFwdGVyLT5tY2FzdG1hc2spOwotCiAJaWYgKGFkYXB0ZXItPm1hY29wdHMgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7CiAJCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IKIAkJICogcHJvbWlzY3VvdXMgbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUKIAkJICogTWljcm9jb2RlIGZyb20gaGF2aW5nIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQwogCQkgKiBjb25maWd1cmF0aW9uLgogCQkgKi8KLS8qICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBtYWNvcHRzID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcblwKLQkJU0xVVCBNT0RFISEhXG4iLF9fZnVuY19fKTsgKi8KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywgMHhGRkZGRkZGRiwgRkxVU0gpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0aGlnaCwgMHhGRkZGRkZGRiwgRkxVU0gpOwotLyogICAgICAgIERCR19NU0coIiVzICglcykgV1JJVEUgdG8gc2xpY19yZWdzIHNsaWNfbWNhc3Rsb3cmaGlnaCAweEZGRkZGRkZGXG4iLAotCQlfZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOyAqLworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3Rsb3csIDB4RkZGRkZGRkYsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX21jYXN0aGlnaCwgMHhGRkZGRkZGRiwKKwkJCQkgRkxVU0gpOwogCX0gZWxzZSB7CiAJCS8qIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUKIAkJICogbXVsdGljYXN0IGFkZHJlc3MgbWFzayByZWdpc3RlcnMKIAkJICovCi0JCURCR19NU0coIiVzICglcykgV1JJVEUgbWNhc3Rsb3dbJXhdIG1jYXN0aGlnaFsleF1cbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJKCh1bG9uZykgKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpKSwKLQkJCSgodWxvbmcpICgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpKSk7Ci0KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywKLQkJCSAgKHUzMikgKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLAotCQkJICAodTMyKSAoKGFkYXB0ZXItPm1jYXN0bWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSwKLQkJCSAgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3Rsb3csCisJCQkodTMyKShhZGFwdGVyLT5tY2FzdG1hc2sgJiAweEZGRkZGRkZGKSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLAorCQkJKHUzMikoKGFkYXB0ZXItPm1jYXN0bWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSwgRkxVU0gpOwogCX0KIH0KIApAQCAtMTY4MCw1MyArMTQzMiwxMSBAQAogCUFTU0VSVChhZGFwdGVyKTsKIAljYXJkID0gYWRhcHRlci0+Y2FyZDsKIAlBU1NFUlQoY2FyZCk7Ci0jaWYgIVNMSUNfRFVNUF9FTkFCTEVECi0vKiNpZiBTTElDX0RVTVBfRU5BQkxFRCovCi0JaWYgKChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgJiYgKGNhcmQtPnN0YXRlID09IENBUkRfVVApKSB7Ci0JCWludCBzdGF0dXM7CiAKLQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7Ci0JCQlpZiAoZXJyb3Jtc2crKyA8IDUpIHsKLQkJCQlEQkdfTVNHCi0JCQkJICAgICgiJXMgKCVzKSBDQVJEIEhBUyBDUkFTSEVEICBQSU5HX3N0YXR1cyA9PSBcCi0JCQkJICAgICAleCBFUlJPUk1TRyMgJWRcbiIsCi0JCQkJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJCSAgICAgY2FyZC0+cGluZ3N0YXR1cywgZXJyb3Jtc2cpOwotCQkJfQotCQkJLyogICBBU1NFUlQoY2FyZC0+cGluZ3N0YXR1cyA9PSBJU1JfUElOR01BU0spOyAqLwotCQl9IGVsc2UgewotCQkJaWYgKGdvb2Rtc2crKyA8IDUpIHsKLQkJCQlEQkdfTVNHCi0JCQkJICAgICgic2xpY29zczogJXMgKCVzKSBQSU5HX3N0YXR1cyA9PSAleCBcCi0JCQkJICAgICBHT09EISEhISEhISEgbXNnIyAlZFxuIiwKLQkJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCi0JCQkJICAgICBjYXJkLT5waW5nc3RhdHVzLCBlcnJvcm1zZyk7Ci0JCQl9Ci0JCX0KLQkJY2FyZC0+cGluZ3N0YXR1cyA9IDA7Ci0JCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUElORywgMCwgMCwgMCwgMCk7Ci0KLQkJQVNTRVJUKHN0YXR1cyA9PSAwKTsKLQl9IGVsc2UgewotCQlEQkdfTVNHKCJzbGljb3NzICVzICglcykgYWRhcHRlclslcF0gTk9UIFVQISEhIVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOwotCX0KLSNlbmRpZgotCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0KLQkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhQSU5HX1RJTUVSX0lOVEVSVkFMKTsKKwlhZGFwdGVyLT5waW5ndGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoUElOR19USU1FUl9JTlRFUlZBTCAqIEhaKTsKIAlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfaWZfc3RvcF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfaWZfc3RhcnRfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKLX0KLQogLyoKICAqICBzbGljX2lmX2luaXQKICAqCkBAIC0xNzQyLDE0ICsxNDUyLDExIEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAlBU1NFUlQoY2FyZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWQ6JWQ6JWRdIGZsYWdzWyV4XVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKLQkJYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkLCBhZGFwdGVyLT5zdGF0ZSwgYWRhcHRlci0+bGlua3N0YXRlLAotCQljYXJkLT5zdGF0ZSwgZGV2LT5mbGFncyk7CiAKIAkvKiBhZGFwdGVyIHNob3VsZCBiZSBkb3duIGF0IHRoaXMgcG9pbnQgKi8KIAlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgewotCQlEQkdfRVJST1IoInNsaWNfaWZfaW5pdCBhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKQEAgLTE3NTcsNTQgKzE0NjQsMzUgQEAKIAlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKIAlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOwogCWlmIChkZXYtPmZsYWdzKSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpCiAJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKLQkJCURCR19NU0coIkJDQVNUICIpOwotCQl9Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7Ci0JCQlEQkdfTVNHKCJQUk9NSVNDICIpOwotCQl9Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7Ci0JCQlEQkdfTVNHKCJBTExfTUNBU1QgIik7Ci0JCX0KLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkKIAkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOwotCQkJREJHX01TRygiTUNBU1QgIik7Ci0JCX0KLQkJREJHX01TRygiXG4iKTsKIAl9CiAJc3RhdHVzID0gc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoInNsaWNfaWZfaW5pdDogc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzIEZBSUxFRCAleFxuIiwKLQkJICAgICBzdGF0dXMpOworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSIlczogc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzIEZBSUxFRCAleFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAlpZiAoIWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfcnNwcXVldWVfaW5pdFxuIiwgX19mdW5jX18pOwogCQlpZiAoc2xpY19yc3BxdWV1ZV9pbml0KGFkYXB0ZXIpKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgY2FsbCBzbGljX2NtZHFfaW5pdCBhZGFwdGVyWyVwXSBwb3J0ICVkIFxuIiwKLQkJICAgICBfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cG9ydCk7CiAJCWlmIChzbGljX2NtZHFfaW5pdChhZGFwdGVyKSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIGNhbGwgc2xpY19yY3ZxdWV1ZV9pbml0IGFkYXB0ZXJbJXBdIFwKLQkJICAgICBwb3J0ICVkIFxuIiwgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOwogCQlpZiAoc2xpY19yY3ZxdWV1ZV9pbml0KGFkYXB0ZXIpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCA9IDE7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIGRpc2FibGUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19mdW5jX18pOwogCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKIAltZGVsYXkoMSk7CiAKIAlpZiAoIWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCkgewpAQCAtMTgxNCwxMyArMTUwMiwxMyBAQAogCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsICh1MzIpIDAsIERPTlRfRkxVU0gpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzcCwgKHUzMikgJnBzaG1lbS0+aXNyLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwgKHUzMikmcHNobWVtLT5pc3IsIEZMVVNIKTsKICNlbHNlCiAJCVN0b3AgQ29tcGlsYXRpb25zCiAjZW5kaWYKQEAgLTE4MzMsNjYgKzE1MjEsNDQgQEAKIAlpZiAoIWNhcmQtPmxvYWR0aW1lcnNldCkgewogCQlpbml0X3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwogCQljYXJkLT5sb2FkdGltZXIuZXhwaXJlcyA9Ci0JCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJCSAgICBqaWZmaWVzICsgKFNMSUNfTE9BRFRJTUVSX1BFUklPRCAqIEhaKTsKIAkJY2FyZC0+bG9hZHRpbWVyLmRhdGEgPSAodWxvbmcpIGNhcmQ7CiAJCWNhcmQtPmxvYWR0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2xvYWRfY2hlY2s7CiAJCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKIAogCQljYXJkLT5sb2FkdGltZXJzZXQgPSAxOwogCX0KLSNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECi0JaWYgKCFhZGFwdGVyLT5zdGF0c3RpbWVyc2V0KSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIHN0YXJ0IGdldHN0YXRzX3RpbWVyKHNsaWMpXG4iLAotCQkJX19mdW5jX18pOwotCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQkJYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0KLQkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyLmRhdGEgPSAodWxvbmcpIGFkYXB0ZXItPm5ldGRldjsKLQkJYWRhcHRlci0+c3RhdHN0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2dldF9zdGF0czsKLQkJYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQkJYWRhcHRlci0+c3RhdHN0aW1lcnNldCA9IDE7Ci0JfQotI2VuZGlmCi0jaWYgIVNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVECi0vKiNpZiBTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRCovCisKIAlpZiAoIWFkYXB0ZXItPnBpbmd0aW1lcnNldCkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzdGFydCBjYXJkX3BpbmdfdGltZXIoc2xpYylcbiIsCi0JCQlfX2Z1bmNfXyk7CiAJCWluaXRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiAJCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0KLQkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoUElOR19USU1FUl9JTlRFUlZBTCk7CisJCSAgICBqaWZmaWVzICsgKFBJTkdfVElNRVJfSU5URVJWQUwgKiBIWik7CiAJCWFkYXB0ZXItPnBpbmd0aW1lci5kYXRhID0gKHVsb25nKSBkZXY7CiAJCWFkYXB0ZXItPnBpbmd0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX3Bpbmc7CiAJCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKIAkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMTsKIAkJYWRhcHRlci0+Y2FyZC0+cGluZ3N0YXR1cyA9IElTUl9QSU5HTUFTSzsKIAl9Ci0jZW5kaWYKIAogCS8qCiAJICogICAgY2xlYXIgYW55IHBlbmRpbmcgZXZlbnRzLCB0aGVuIGVuYWJsZSBpbnRlcnJ1cHRzCiAJICovCi0JREJHX01TRygic2xpY29zczogJXMgRU5BQkxFIGludGVycnVwdHMoc2xpYylcbiIsIF9fZnVuY19fKTsKIAlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKIAlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PTiwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09OLCBGTFVTSCk7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfbGlua19jb25maWcoc2xpYylcbiIsIF9fZnVuY19fKTsKIAlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsIExJTktfQVVUT1NQRUVELCBMSU5LX0FVVE9EKTsKIAlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLSNpZiBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwogCWlmIChhZGFwdGVyLT5zbGljX3JlZ3MpCiAJCWlvdW5tYXAoYWRhcHRlci0+c2xpY19yZWdzKTsKIAlhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQpAQCAtMTkwMCwxMyArMTU2Niw2IEBACiAJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgewogCQlpbnQgcmV0dmFsOwogCi0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIHNobWVtWyVwXSBcCi0JCSAgICAgcGh5c19zaG1lbVslcF0gZGV2LT5pcnFbJXhdICV4XG4iLAotCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCi0JCSAgICAgKHZvaWQgKilhZGFwdGVyLT5waHlzX3NobWVtLCBhZGFwdGVyLT5uZXRkZXYtPmlycSwKLQkJICAgICBOUl9JUlFTKTsKLQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAogCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CiAKQEAgLTE5MTksMTYgKzE1NzgsMTIgQEAKIAkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwogCiAJCWlmIChyZXR2YWwpIHsKLQkJCURCR19FUlJPUigic2xpY29zczogcmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKLQkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0X2lycSAoJXMpIEZBSUxFRCBbJXhdXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KIAkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOwotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBzaG1lbVslcF0gXAotCQkgICAgIHBzaG1lbVslcF0gZGV2LT5pcnFbJXhdXG4iLAotCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCi0JCSAgICAgKHZvaWQgKilhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKIAl9CiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQpAQCAtMTkzOSwyMiArMTU5NCwxNyBAQAogCXUxNiBuZXdfY29tbWFuZDsKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19mdW5jX18sIHBjaV9jb21tYW5kKTsKIAogCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCBQQ0lfQ09NTUFORF9NQVNURVIKIAkgICAgfCBQQ0lfQ09NTUFORF9NRU1PUlkKIAkgICAgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCiAJICAgIHwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX0ZBU1RfQkFDSzsKLQlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKLQkJREJHX01TRygiJXMgLS0gVXBkYXRpbmcgUENJIENPTU1BTkQgcmVnaXN0ZXIgJTQuNHgtPiU0LjR4LlxuIiwKLQkJCV9fZnVuY19fLCBwY2lfY29tbWFuZCwgbmV3X2NvbW1hbmQpOworCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsIG5ld19jb21tYW5kKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CiAJc2xpY19pbml0X2NsZWFudXAoYWRhcHRlcik7CiAJbWVtc2V0KCZhZGFwdGVyLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cyA9IDA7CkBAIC0xOTY3LDcgKzE2MTcsNiBAQAogCWFkYXB0ZXItPnJjdl9icm9hZGNhc3RzID0gMDsKIAlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cyA9IDA7CiAJYWRhcHRlci0+cmN2X3VuaWNhc3RzID0gMDsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIC8qCkBAIC0xOTc5LDIxICsxNjI4LDE1IEBACiBzdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAogCQkgICAgICB1MzIgbGlua3NwZWVkLCB1MzIgbGlua2R1cGxleCkKIHsKKwl1MzIgX19pb21lbSAqd3BoeTsKIAl1MzIgc3BlZWQ7CiAJdTMyIGR1cGxleDsKIAl1MzIgcGh5X2NvbmZpZzsKIAl1MzIgcGh5X2FkdnJlZzsKIAl1MzIgcGh5X2djdGxyZWc7CiAKLQlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHsKLQkJREJHX01TRwotCQkgICAgKCIlcyAoJXMpIEFEQVBUIE5vdCB1cCB5ZXQsIFJldHVybiEgc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCi0JCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgbGlua3NwZWVkLAotCQkgICAgIGxpbmtkdXBsZXgpOworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkKIAkJcmV0dXJuOwotCX0KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNsaWNfbGlua19jb25maWc6IHNwZWVkWyV4XSBkdXBsZXhbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBsaW5rc3BlZWQsIGxpbmtkdXBsZXgpOwogCiAJQVNTRVJUKChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzFHQl9ERVZJQ0VfSUQpCiAJICAgICAgIHx8IChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpKTsKQEAgLTIwMDMsNiArMTY0Niw4IEBACiAJaWYgKGxpbmtkdXBsZXggPiBMSU5LX0FVVE9EKQogCQlsaW5rZHVwbGV4ID0gTElOS19BVVRPRDsKIAorCXdwaHkgPSAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHk7CisKIAlpZiAoKGxpbmtzcGVlZCA9PSBMSU5LX0FVVE9TUEVFRCkgfHwgKGxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikpIHsKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgQURBUFRfRkxBR1NfRklCRVJNRURJQSkgewogCQkJLyogIFdlJ3ZlIGdvdCBhIGZpYmVyIGdpZ2FiaXQgaW50ZXJmYWNlLCBhbmQgcmVnaXN0ZXIKQEAgLTIwMTMsOCArMTY1OCw3IEBACiAJCQlwaHlfYWR2cmVnID0gKE1JSUNSX1JFR180IHwgKFBBUl9BRFYxMDAwWEZEKSk7CiAJCQkvKiBlbmFibGUgUEFVU0UgZnJhbWVzICAgICAgICAqLwogCQkJcGh5X2FkdnJlZyB8PSBQQVJfQVNZTVBBVVNFX0ZJQkVSOwotCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfYWR2cmVnLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfYWR2cmVnLCBGTFVTSCk7CiAKIAkJCWlmIChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHsKIAkJCQkvKiByZXNldCBwaHksIGVuYWJsZSBhdXRvLW5lZyAgKi8KQEAgLTIwMjIsMTQgKzE2NjYsMTIgQEAKIAkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAogCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9BVVRPTkVHIHwKIAkJCQkgICAgICBQQ1JfQVVUT05FR19SU1QpKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJfSBlbHNlIHsJLyogZm9yY2VkIDEwMDAgTWIgRkQqLwogCQkJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsKIAkJCQkgICB0aGlzIG1heSBub3Qgd29yaykgKi8KIAkJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCBQQ1JfUE9XRVJET1dOKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJCS8qIHdhaXQsIE1hcnZlbGwgc2F5cyAxIHNlYywKIAkJCQkgICB0cnkgdG8gZ2V0IGF3YXkgd2l0aCAxMCBtcyAgKi8KIAkJCQltZGVsYXkoMTApOwpAQCAtMjA0MCw4ICsxNjgyLDcgQEAKIAkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAogCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9TUEVFRF8xMDAwIHwKIAkJCQkgICAgICBQQ1JfRFVQTEVYX0ZVTEwpKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJfQogCQl9IGVsc2UgewkvKiBjb3BwZXIgZ2lnYWJpdCAqLwogCkBAIC0yMDY1LDM1ICsxNzA2LDMwIEBACiAJCQlwaHlfYWR2cmVnIHw9IFBBUl9BU1lNUEFVU0U7CiAJCQkvKiByZXF1aXJlZCBieSB0aGUgQ2ljYWRhIFBIWSAgKi8KIAkJCXBoeV9hZHZyZWcgfD0gUEFSXzgwMl8zOwotCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfYWR2cmVnLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfYWR2cmVnLCBGTFVTSCk7CiAJCQkvKiBhZHZlcnRpc2UgRkQgb25seSBAMTAwMCBNYiAgKi8KIAkJCXBoeV9nY3RscmVnID0gKE1JSUNSX1JFR185IHwgKFBHQ19BRFYxMDAwRkQpKTsKLQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2djdGxyZWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9nY3RscmVnLCBGTFVTSCk7CiAKIAkJCWlmIChhZGFwdGVyLT5zdWJzeXNpZCAhPSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lEKSB7CiAJCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQogCQkJCSAgIGVuYWJsZSBhdXRvIGNyb3Nzb3ZlciAqLwogCQkJCXBoeV9jb25maWcgPQogCQkJCSAgICAoTUlJQ1JfUkVHXzE2IHwgKE1SVl9SRUcxNl9YT1ZFUk9OKSk7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAotCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAogCQkJCS8qIHJlc2V0IHBoeSwgZW5hYmxlIGF1dG8tbmVnICAqLwogCQkJCXBoeV9jb25maWcgPQogCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CiAJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX0FVVE9ORUcgfAogCQkJCSAgICAgIFBDUl9BVVRPTkVHX1JTVCkpOwotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKLQkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAJCQl9IGVsc2UgewkvKiBpdCdzIGEgQ2ljYWRhIFBIWSAgKi8KIAkJCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgYXV0by1uZWcgKGRvbid0IHJlc2V0KSAgKi8KIAkJCQlwaHlfY29uZmlnID0KIAkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAogCQkJCSAgICAgKFBDUl9BVVRPTkVHIHwgUENSX0FVVE9ORUdfUlNUKSk7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAotCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CkBAIC0yMTExLDEzICsxNzQ3LDEyIEBACiAJCQkvKiBpZiBhIE1hcnZlbGwgUEhZCiAJCQkgICBkaXNhYmxlIGF1dG8gY3Jvc3NvdmVyICAqLwogCQkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfMTYgfCAoTVJWX1JFRzE2X1hPVkVST0ZGKSk7Ci0JCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJfQogCiAJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsgKHRoaXMgbWF5IG5vdCB3b3JrKSAgKi8KIAkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKFBDUl9QT1dFUkRPV04gfCBzcGVlZCB8IGR1cGxleCkpOwotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAKIAkJLyogd2FpdCwgTWFydmVsbCBzYXlzIDEgc2VjLCB0cnkgdG8gZ2V0IGF3YXkgd2l0aCAxMCBtcyAqLwogCQltZGVsYXkoMTApOwpAQCAtMjEyOCw0MyArMTc2MywxNyBAQAogCQkJICAgc29mdCByZXNldCBwaHksIHBvd2VydXAgKi8KIAkJCXBoeV9jb25maWcgPQogCQkJICAgIChNSUlDUl9SRUdfUENSIHwgKFBDUl9SRVNFVCB8IHNwZWVkIHwgZHVwbGV4KSk7Ci0JCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJfSBlbHNlIHsJLyogaXQncyBhIENpY2FkYSBQSFkgICovCiAJCQkvKiBkaXNhYmxlIGF1dG8tbmVnLCBzZXQgc3BlZWQsIHBvd2VydXAgICovCiAJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoc3BlZWQgfCBkdXBsZXgpKTsKLQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywKLQkJCQkgIEZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQl9CiAJfQotCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzICglcykgRVhJVCBzbGljX2xpbmtfY29uZmlnIDogc3RhdGVbJWRdIFwKLQkgICAgcGh5X2NvbmZpZ1sleF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnN0YXRlLAotCSAgICBwaHlfY29uZmlnKTsKIH0KIAogc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKQogewotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSXG4iLCBfX2Z1bmNfXyk7Ci0KLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmIChjYXJkLT5kdW1wYnVmZmVyKSB7Ci0JCWNhcmQtPmR1bXBidWZmZXJfcGh5cyA9IDA7Ci0JCWNhcmQtPmR1bXBidWZmZXJfcGh5c2wgPSAwOwotCQljYXJkLT5kdW1wYnVmZmVyX3BoeXNoID0gMDsKLQkJa2ZyZWUoY2FyZC0+ZHVtcGJ1ZmZlcik7Ci0JCWNhcmQtPmR1bXBidWZmZXIgPSBOVUxMOwotCX0KLQlpZiAoY2FyZC0+Y21kYnVmZmVyKSB7Ci0JCWNhcmQtPmNtZGJ1ZmZlcl9waHlzID0gMDsKLQkJY2FyZC0+Y21kYnVmZmVyX3BoeXNsID0gMDsKLQkJY2FyZC0+Y21kYnVmZmVyX3BoeXNoID0gMDsKLQkJa2ZyZWUoY2FyZC0+Y21kYnVmZmVyKTsKLQkJY2FyZC0+Y21kYnVmZmVyID0gTlVMTDsKLQl9Ci0jZW5kaWYKLQogCWlmIChjYXJkLT5sb2FkdGltZXJzZXQpIHsKIAkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMDsKIAkJZGVsX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwpAQCAtMjE3Myw3ICsxNzgyLDYgQEAKIAlzbGljX2RlYnVnX2NhcmRfZGVzdHJveShjYXJkKTsKIAogCWtmcmVlKGNhcmQpOwotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGludCBzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3Yoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yMTgzLDE1ICsxNzkxLDE2IEBACiAJaW50IHJldDsKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIAl1MzIgY29kZWFkZHI7Ci0JdW5zaWduZWQgY2hhciAqaW5zdHJ1Y3Rpb24gPSBOVUxMOworCXUzMiBpbnN0cnVjdGlvbjsKKwlpbnQgaW5kZXggPSAwOwogCXUzMiByY3Z1Y29kZWxlbiA9IDA7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CiAJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0JCWZpbGUgPSAib2FzaXNfcmN2LmJpbiI7CisJCWZpbGUgPSAic2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cyI7CiAJCWJyZWFrOwogCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgotCQlmaWxlID0gImdiX3Jjdi5iaW4iOworCQlmaWxlID0gInNsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMiOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CkBAIC0yMjAwLDEyICsxODA5LDEzIEBACiAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0xJQ09TUzogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIGZpbGUpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJTTElDT1NTOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhciAqKWZ3LT5kYXRhOwotCXJjdnVjb2RlbGVuID0gZnctPnNpemU7CisJcmN2dWNvZGVsZW4gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OwogCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKIAljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKIAkJaWYgKHJjdnVjb2RlbGVuICE9IE9hc2lzUmN2VUNvZGVMZW4pCkBAIC0yMjE5LDI5ICsxODI5LDI4IEBACiAJCUFTU0VSVCgwKTsKIAkJYnJlYWs7CiAJfQotCiAJLyogc3RhcnQgZG93bmxvYWQgKi8KLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIFNMSUNfUkNWV0NTX0JFR0lOLCBGTFVTSCk7Ci0KKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfQkVHSU4sIEZMVVNIKTsKIAkvKiBkb3dubG9hZCB0aGUgcmN2IHNlcXVlbmNlciB1Y29kZSAqLwogCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHJjdnVjb2RlbGVuOyBjb2RlYWRkcisrKSB7CiAJCS8qIHdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgY29kZWFkZHIsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIGNvZGVhZGRyLCBGTFVTSCk7CiAKKwkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJaW5kZXggKz0gNDsKIAkJLyogd3JpdGUgb3V0IHRoZSBpbnN0cnVjdGlvbiBkYXRhIGxvdyBhZGRyICovCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywKLQkJCSAgKHUzMikgKih1MzIgKikgaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLQkJaW5zdHJ1Y3Rpb24gKz0gNDsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIGluc3RydWN0aW9uLCBGTFVTSCk7CiAKKwkJaW5zdHJ1Y3Rpb24gPSAqKHU4ICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQlpbmRleCsrOwogCQkvKiB3cml0ZSBvdXQgdGhlIGluc3RydWN0aW9uIGRhdGEgaGlnaCBhZGRyICovCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgKHUzMikgKmluc3RydWN0aW9uLAotCQkJICBGTFVTSCk7Ci0JCWluc3RydWN0aW9uICs9IDE7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCAodTgpaW5zdHJ1Y3Rpb24sCisJCQkJIEZMVVNIKTsKIAl9CiAKIAkvKiBkb3dubG9hZCBmaW5pc2hlZCAqLwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfRklOSVNILCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIFNMSUNfUkNWV0NTX0ZJTklTSCwgRkxVU0gpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjU0LDQxICsxODYzLDIxIEBACiAJaW50IHRoaXNzZWN0aW9uc2l6ZTsKIAlpbnQgY29kZWFkZHI7CiAJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0JdTMyICppbnN0cnVjdGlvbiA9IE5VTEw7Ci0JdTMyICpsYXN0aW5zdHJ1Y3QgPSBOVUxMOwotCXUzMiAqc3RhcnRpbnN0cnVjdCA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciAqbmV4dGluc3RydWN0OworCXUzMiBpbnN0cnVjdGlvbjsKIAl1MzIgYmFzZWFkZHJlc3M7CiAJdTMyIGZhaWx1cmU7CiAJdTMyIGk7CiAJdTMyIG51bXNlY3RzID0gMDsKIAl1MzIgc2VjdHNpemVbM107CiAJdTMyIHNlY3RzdGFydFszXTsKLQotLyogICAgICBEQkdfTVNHICgic2xpY29zczogJXMgKCVzKSBhZGFwdGVyWyVwXSBjYXJkWyVwXSBkZXZpZFsleF0gXAotCWppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsCi0JICAgIGFkYXB0ZXItPmNhcmQsIGFkYXB0ZXItPmRldmlkLGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCisJaW50IHVjb2RlX3N0YXJ0LCBpbmRleCA9IDA7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CiAJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0vKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyBkZXZpZD09U0xJQ18yR0JfREVWSUNFX0lEIHNlY3Rpb25zWyV4XVxuIiwKLQlfX2Z1bmNfXywgKHVpbnQpIE9OdW1TZWN0aW9ucyk7ICovCi0JCWZpbGUgPSAic2xpY19vYXNpcy5iaW4iOwotCQludW1zZWN0cyA9IE9OdW1TZWN0aW9uczsKLQkJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKLQkJCXNlY3RzaXplW2ldID0gT1NlY3Rpb25TaXplW2ldOwotCQkJc2VjdHN0YXJ0W2ldID0gT1NlY3Rpb25TdGFydFtpXTsKLQkJfQorCQlmaWxlID0gInNsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMiOwogCQlicmVhazsKIAljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKLS8qICAgICAgICAgICAgICBEQkdfTVNHICgic2xpY29zczogJXMgZGV2aWQ9PVNMSUNfMUdCX0RFVklDRV9JRCBzZWN0aW9uc1sleF1cbiIsCi0JCV9fZnVuY19fLCAodWludCkgTU51bVNlY3Rpb25zKTsgKi8KLQkJZmlsZSA9ICJzbGljX21vamF2ZS5iaW4iOwotCQludW1zZWN0cyA9IE1OdW1TZWN0aW9uczsKLQkJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKLQkJCXNlY3RzaXplW2ldID0gTVNlY3Rpb25TaXplW2ldOwotCQkJc2VjdHN0YXJ0W2ldID0gTVNlY3Rpb25TdGFydFtpXTsKLQkJfQorCQlmaWxlID0gInNsaWNvc3MvZ2Jkb3dubG9hZC5zeXMiOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CkBAIC0yMjk2LDEzMSArMTg4NSw4NCBAQAogCX0KIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0xJQ09TUzogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIGZpbGUpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJTTElDT1NTOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CiAJCXJldHVybiByZXQ7CiAJfQotCisJbnVtc2VjdHMgPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OwogCUFTU0VSVChudW1zZWN0cyA8PSAzKTsKLQorCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCXNlY3RzaXplW2ldID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCWluZGV4ICs9IDQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCXNlY3RzdGFydFtpXSA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQlpbmRleCArPSA0OworCX0KKwl1Y29kZV9zdGFydCA9IGluZGV4OworCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJaW5kZXggKz0gNDsKIAlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgbnVtc2VjdHM7IHNlY3Rpb24rKykgewotCQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7Ci0JCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopKGZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqCi0JCQkJCQkJCXNlY3Rpb24pKTsKLQkJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOwotCQkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKLQkJCWxhc3RpbnN0cnVjdCA9Ci0JCQkgICAgKHUzMiAqKShmdy0+ZGF0YSArIChTRUNUSU9OX1NJWkUgKiBzZWN0aW9uKSArCi0JCQkJCXNlY3RzaXplW3NlY3Rpb25dIC0gOCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICoKLQkJCQkJCQkJc2VjdGlvbikpOwotCQkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07Ci0JCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOwotCQkJbGFzdGluc3RydWN0ID0KLQkJCSAgICAodTMyICopKGZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqIHNlY3Rpb24pICsKLQkJCQkJc2VjdHNpemVbc2VjdGlvbl0gLSA4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KLQogCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKIAkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKIAogCQlmb3IgKGNvZGVhZGRyID0gMDsgY29kZWFkZHIgPCB0aGlzc2VjdGlvbnNpemU7IGNvZGVhZGRyKyspIHsKLQkJCXN0YXJ0aW5zdHJ1Y3QgPSBpbnN0cnVjdGlvbjsKLQkJCW5leHRpbnN0cnVjdCA9ICgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uKSArIDg7CiAJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsIGJhc2VhZGRyZXNzICsgY29kZWFkZHIsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLAorCQkJCQkgYmFzZWFkZHJlc3MgKyBjb2RlYWRkciwgRkxVU0gpOwogCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGxvdyBhZGRyICovCi0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgKmluc3RydWN0aW9uLCBGTFVTSCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopKCh1bnNpZ25lZCBjaGFyICopaW5zdHJ1Y3Rpb24gKyA0KTsKLSNlbHNlCi0JCQlpbnN0cnVjdGlvbisrOwotI2VuZGlmCisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLCBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7CisKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBoaWdoIGFkZHIgKi8KLQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOwotI2Vsc2UKLQkJCWluc3RydWN0aW9uKys7Ci0jZW5kaWYKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193Y3MsIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJfQogCX0KLQorCWluZGV4ID0gdWNvZGVfc3RhcnQ7CiAJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IG51bXNlY3RzOyBzZWN0aW9uKyspIHsKLQkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgewotCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKWZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqCi0JCQkJCQkJCXNlY3Rpb24pOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICoKLQkJCQkJCQkJc2VjdGlvbik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJCWJyZWFrOwotCQl9Ci0KKwkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKIAkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07CiAJCWlmIChiYXNlYWRkcmVzcyA8IDB4ODAwMCkKIAkJCWNvbnRpbnVlOwogCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOwogCi0vKiAgICAgICAgREJHX01TRyAoInNsaWNvc3M6IENPTVBBUkUgc2VjdG9uWyV4XSBiYXNlYWRkclsleF0gc2VjdG5zaXplWyV4XVxuIiwKLQkJKHVpbnQpc2VjdGlvbixiYXNlYWRkcmVzcyx0aGlzc2VjdGlvbnNpemUpOyovCi0KIAkJZm9yIChjb2RlYWRkciA9IDA7IGNvZGVhZGRyIDwgdGhpc3NlY3Rpb25zaXplOyBjb2RlYWRkcisrKSB7CiAJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsCi0JCQkJICBTTElDX1dDU19DT01QQVJFIHwgKGJhc2VhZGRyZXNzICsgY29kZWFkZHIpLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywKKwkJCQlTTElDX1dDU19DT01QQVJFIHwgKGJhc2VhZGRyZXNzICsgY29kZWFkZHIpLAorCQkJCUZMVVNIKTsKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBsb3cgYWRkciAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7Ci0jZWxzZQotCQkJaW5zdHJ1Y3Rpb24rKzsKLSNlbmRpZgorCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywgaW5zdHJ1Y3Rpb24sCisJCQkJCSBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBoaWdoIGFkZHIgKi8KLQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOwotI2Vsc2UKLQkJCWluc3RydWN0aW9uKys7Ci0jZW5kaWYKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193Y3MsIGluc3RydWN0aW9uLAorCQkJCQkgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7CisKIAkJCS8qIENoZWNrIFNSQU0gbG9jYXRpb24gemVyby4gSWYgaXQgaXMgbm9uLXplcm8uIEFib3J0LiovCi0JCQlmYWlsdXJlID0gcmVhZGwoKHUzMiBfX2lvbWVtICopJnNsaWNfcmVncy0+c2xpY19yZXNldCk7CisvKgkJCWZhaWx1cmUgPSByZWFkbCgodTMyIF9faW9tZW0gKikmc2xpY19yZWdzLT5zbGljX3Jlc2V0KTsKIAkJCWlmIChmYWlsdXJlKSB7Ci0JCQkJREJHX01TRwotCQkJCSAgICAoInNsaWNvc3M6ICVzIEZBSUxVUkUgRVhJVCBjb2RlYWRkclsleF0gXAotCQkJCSAgICB0aGlzc2VjdGlvbnNpemVbJXhdIGZhaWx1cmVbJXhdXG4iLAotCQkJCSAgICAgX19mdW5jX18sIGNvZGVhZGRyLCB0aGlzc2VjdGlvbnNpemUsCi0JCQkJICAgICBmYWlsdXJlKTsKIAkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KKwkJCX0qLwogCQl9CiAJfQotLyogICAgREJHX01TRyAoInNsaWNvc3M6IENvbXBhcmUgZG9uZVxuIik7Ki8KIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkvKiBFdmVyeXRoaW5nIE9LLCBraWNrIG9mZiB0aGUgY2FyZCAqLwogCW1kZWxheSgxMCk7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsIFNMSUNfV0NTX1NUQVJULCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywgU0xJQ19XQ1NfU1RBUlQsIEZMVVNIKTsKIAogCS8qIHN0YWxsIGZvciAyMCBtcywgbG9uZyBlbm91Z2ggZm9yIHVjb2RlIHRvIGluaXQgY2FyZAogCSAgIGFuZCByZWFjaCBtYWlubG9vcCAqLwogCW1kZWxheSgyMCk7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVQgYWRhcHRlclslcF0gY2FyZFslcF1cbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQpOwotCiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCkBAIC0yNDI4LDE5ICsxOTcwLDEwIEBACiB7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKIAotLyogIERCR19NU0cgKCIlcyBFTlRFUiBjYXJkLT5jb25maWdfc2V0WyV4XSBwb3J0WyVkXSBwaHlzcG9ydFslZF0gZnVuY3QjWyVkXVxuIiwKLSAgICBfX2Z1bmNfXywgY2FyZC0+Y29uZmlnX3NldCwgYWRhcHRlci0+cG9ydCwgYWRhcHRlci0+cGh5c3BvcnQsCi0gICAgYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIpOwotCi0gICAgc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCi0KIAlpZiAoKGFkYXB0ZXItPmNhcmQpICYmIChjYXJkLT5jb25maWdfc2V0KSkgewogCQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwKIAkJICAgICAgIGNhcmQtPmNvbmZpZy5NYWNJbmZvW2FkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyXS5tYWNhZGRyQSwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19jb25maWdfbWFjKSk7Ci0vKiAgICAgIERCR19NU0cgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwKLQlfX2Z1bmNfXyk7Ci0Jc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7Ki8KIAkJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0gfHwKIAkJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10gfHwKIAkJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pKSB7CkBAIC0yNDUxLDE1ICsxOTg0LDExIEBACiAJCQkgICAgICAgNik7CiAJCX0KIAl9Ci0vKiAgREJHX01TRyAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQpOwotICAgIHNsaWNfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOyAqLwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2ludGFnZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2YWx1ZSkKIHsKLQlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLQotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaW50YWdnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2csIHZhbHVlLCBGTFVTSCk7CiAJYWRhcHRlci0+Y2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSB2YWx1ZTsKIH0KIApAQCAtMjQ4NSwxMCArMjAxNCw2IEBACiAJc3RydWN0IGF0a19mcnUgKnBhdGtmcnU7CiAJdW5pb24gb2VtZnJ1ICpwb2VtZnJ1OwogCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzIEVOVEVSIGNhcmRbJXBdIGFkYXB0ZXJbJXBdIGNhcmQtPnN0YXRlWyV4XSBcCi0JICAgIHNpemVbJWRdXG4iLCBfX2Z1bmNfXywgY2FyZCwgYWRhcHRlciwgY2FyZC0+c3RhdGUsIGNhcmQtPmNhcmRfc2l6ZSk7Ci0KIAkvKiBSZXNldCBldmVyeXRoaW5nIGV4Y2VwdCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwogCXNsaWNfc29mdF9yZXNldChhZGFwdGVyKTsKIApAQCAtMjQ5Niw5ICsyMDIxLDkgQEAKIAlzdGF0dXMgPSBzbGljX2NhcmRfZG93bmxvYWQoYWRhcHRlcik7CiAKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUigiU0xJQyBkb3dubG9hZCBmYWlsZWQgYnVzICVkIHNsb3QgJWRcbiIsCi0JCQkgICh1aW50KSBhZGFwdGVyLT5idXNudW1iZXIsCi0JCQkgICh1aW50KSBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkiZG93bmxvYWQgZmFpbGVkIGJ1cyAlZCBzbG90ICVkXG4iLAorCQkJYWRhcHRlci0+YnVzbnVtYmVyLCBhZGFwdGVyLT5zbG90bnVtYmVyKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTI1MTAsMzMgKzIwMzUsMjQgQEAKIAkJcGh5c19jb25maWdsID0gU0xJQ19HRVRfQUREUl9MT1cocGh5c19jb25maWcpOwogCQlwaHlzX2NvbmZpZ2ggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19jb25maWcpOwogCi0JCURCR19NU0coInNsaWNvc3M6ICVzIEVlcHJvbSBpbmZvICBhZGFwdGVyIFslcF1cbiAgICAiCi0JCQkic2l6ZSAgICAgICAgWyV4XVxuICAgIHBlZXByb20gICAgIFslcF1cbiAgICAiCi0JCQkicGh5c19jb25maWcgWyVwXVxuICAgIHBoeXNfY29uZmlnbFsleF1cbiAgICAiCi0JCQkicGh5c19jb25maWdoWyV4XVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLAotCQkJKHUzMilzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKLQkJCXBlZXByb20sICh2b2lkICopIHBoeXNfY29uZmlnLCBwaHlzX2NvbmZpZ2wsCi0JCQlwaHlzX2NvbmZpZ2gpOwogCQlpZiAoIXBlZXByb20pIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiU0xJQyBlZXByb20gcmVhZCBmYWlsZWQgdG8gZ2V0IG1lbW9yeSBidXMgJWQgXAotCQkJICAgIHNsb3QgJWRcbiIsCi0JCQkgICAgICh1aW50KSBhZGFwdGVyLT5idXNudW1iZXIsCi0JCQkgICAgICh1aW50KSBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCSJlZXByb20gcmVhZCBmYWlsZWQgdG8gZ2V0IG1lbW9yeSAiCisJCQkJImJ1cyAlZCBzbG90ICVkXG4iLCBhZGFwdGVyLT5idXNudW1iZXIsCisJCQkJYWRhcHRlci0+c2xvdG51bWJlcik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfSBlbHNlIHsKIAkJCW1lbXNldChwZWVwcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSk7CiAJCX0KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CiAJCW1kZWxheSgxKTsKIAkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCiAJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLAotCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKIAkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKIApAQCAtMjU0NCw0MSArMjA2MCwzMyBAQAogCiAJCWZvciAoOzspIHsKIAkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzcikgewotCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKLQkJCQkJX19mdW5jX18sIGFkYXB0ZXItPnBzaG1lbSwKLQkJCQkJYWRhcHRlci0+cHNobWVtLT5pc3IpOwotCiAJCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyICYgSVNSX1VQQykgewogCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwKLQkJCQkJCSAgICAwLAotCQkJCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCQkJICAgIDAsIEZMVVNIKTsKLQkJCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsCi0JCQkJCQkgIEZMVVNIKTsKKwkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkwLCBGTFVTSCk7CisJCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCisJCQkJCQkJIDAsIEZMVVNIKTsKIAogCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIDApOwogCQkJCQlicmVhazsKIAkJCQl9IGVsc2UgewogCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JCQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLAotCQkJCQkJICBGTFVTSCk7CisJCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCisJCQkJCQkJIDAsIEZMVVNIKTsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCW1kZWxheSgxKTsKIAkJCQlpKys7CiAJCQkJaWYgKGkgPiA1MDAwKSB7Ci0JCQkJCURCR19FUlJPUgotCQkJCQkgICAgKCJTTElDOiAlZCBjb25maWcgZGF0YSBmZXRjaCB0aW1lZFwKLQkJCQkJICAgICAgb3V0IVxuIiwgYWRhcHRlci0+cG9ydCk7Ci0JCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKLQkJCQkJCV9fZnVuY19fLCBhZGFwdGVyLT5wc2htZW0sCi0JCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7Ci0JCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKLQkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkJCSAgICAwLCBGTFVTSCk7CisJCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCQkJIiVkIGNvbmZpZyBkYXRhIGZldGNoIHRpbWVkIG91dCFcbiIsCisJCQkJCQlhZGFwdGVyLT5wb3J0KTsKKwkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkwLCBGTFVTSCk7CiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCX0KIAkJCX0KQEAgLTI2MTQsNyArMjEyMiw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IEZBTFNFOworCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBmYWxzZTsKIAogCQkvKiAgc2VlIGlmIHRoZSBFRVBST00gaXMgdmFsaWQgYnkgY2hlY2tpbmcgaXQncyBjaGVja3N1bSAqLwogCQlpZiAoKGVlY29kZXNpemUgPD0gTUFYX0VFQ09ERV9TSVpFKSAmJgpAQCAtMjYzMyw3ICsyMTQxLDcgQEAKIAkJCSAgICB3ZSB3b3VsZG4ndCBuZWVkIHRoaXMgc2hpdAogCQkJKi8KIAkJCWlmIChlZV9jaGtzdW0gPT0gY2FsY19jaGtzdW0pCi0JCQkJY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkID0gVFJVRTsKKwkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSB0cnVlOwogCQl9CiAJCS8qICBjb3B5IGluIHRoZSBEUkFNIHNpemUgKi8KIAkJY2FyZC0+Y29uZmlnLkRyYW1TaXplID0gZHJhbXNpemU7CkBAIC0yNjQzLDggKzIxNTEsNiBAQAogCQkJbWVtY3B5KCZjYXJkLT5jb25maWcuTWFjSW5mb1tpXSwKIAkJCSAgICAgICAmcG1hY1tpXSwgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKIAkJfQotLyogICAgICBEQkdfTVNHICgiJXMgRUVQUk9NIENoZWNrc3VtIEdvb2Q/ICVkICBNYWNBZGRyZXNzXG4iLF9fZnVuY19fLAotCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpOyAqLwogCiAJCS8qICBjb3B5IHRoZSBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLwogCQljYXJkLT5jb25maWcuRnJ1Rm9ybWF0ID0gZnJ1Zm9ybWF0OwpAQCAtMjY1NCwyMCArMjE2MCwxNCBAQAogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCiAJCQkJICAgIHBlZXByb20sIHBoeXNfY29uZmlnKTsKLQkJREJHX01TRwotCQkgICAgKCJzbGljb3NzOiAlcyBhZGFwdGVyJWQgWyVwXSBzaXplWyV4XSBGUkVFIHBlZXByb21bJXBdIFwKLQkJICAgICBwaHlzX2NvbmZpZ1slcF1cbiIsCi0JCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXIsCi0JCSAgICAgKHUzMikgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksIHBlZXByb20sCi0JCSAgICAgKHZvaWQgKikgcGh5c19jb25maWcpOwogCiAJCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKIAkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKLQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkJICAgIDAsIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBGTFVTSCk7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoInVuc3VwcG9ydGVkIENPTkZJR1VSQVRJT04gIEVFUFJPTSBpbnZhbGlkXG4iKTsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCSAwLCBGTFVTSCk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCQkidW5zdXBwb3J0ZWQgQ09ORklHVVJBVElPTiBFRVBST00gaW52YWxpZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yNjc1LDc0ICsyMTc1LDI2IEBACiAJfQogCiAJaWYgKHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihhZGFwdGVyKSkgewotCQlEQkdfRVJST1IoIiVzIHVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIiwKLQkJCSAgX19mdW5jX18pOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gZG93bmxvYWQgR0IgcmVjZWl2ZSBtaWNyb2NvZGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cpIHsKLQkJREJHX01TRwotCQkgICAgKCJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbltFTkFCTEVEXTogc2xpYyVkIFwKLQkJICAgICBTRVQgaW50YWdnIHRvICVkXG4iLAotCQkgICAgIGNhcmQtPmNhcmRudW0sIDApOworCWlmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykKIAkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIDApOwotCX0gZWxzZSB7CisJZWxzZQogCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnX2RlbGF5KTsKLQkJREJHX01TRwotCQkgICAgKCJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbltESVNBQkxFRF06IHNsaWMlZCBcCi0JCSAgICAgU0VUIGludGFnZyB0byAlZFxuIiwKLQkJICAgICBjYXJkLT5jYXJkbnVtLCBpbnRhZ2dfZGVsYXkpOwotCX0KIAogCS8qCiAJICogIEluaXRpYWxpemUgcGluZyBzdGF0dXMgdG8gIm9rIgogCSAqLwogCWNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7CiAKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmICghY2FyZC0+ZHVtcGJ1ZmZlcikgewotCQljYXJkLT5kdW1wYnVmZmVyID0ga21hbGxvYyhEVU1QX1BBR0VfU0laRSwgR0ZQX0FUT01JQyk7Ci0KLQkJQVNTRVJUKGNhcmQtPmR1bXBidWZmZXIpOwotCQlpZiAoY2FyZC0+ZHVtcGJ1ZmZlciA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCS8qCi0JICogIFNtZWFyIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBhbmQgdGhlbiBvYnRhaW4KLQkgKiAgdGhlIFBIWVNJQ0FMIGFkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmUKLQkgKi8KLQltZW1zZXQoY2FyZC0+ZHVtcGJ1ZmZlciwgMCwgRFVNUF9QQUdFX1NJWkUpOwotCWNhcmQtPmR1bXBidWZmZXJfcGh5cyA9IHZpcnRfdG9fYnVzKGNhcmQtPmR1bXBidWZmZXIpOwotCWNhcmQtPmR1bXBidWZmZXJfcGh5c2ggPSBTTElDX0dFVF9BRERSX0hJR0goY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzKTsKLQljYXJkLT5kdW1wYnVmZmVyX3BoeXNsID0gU0xJQ19HRVRfQUREUl9MT1coY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzKTsKLQotCS8qCi0JICogIEFsbG9jYXRlIENPTU1BTkQgQlVGRkVSCi0JICovCi0JaWYgKCFjYXJkLT5jbWRidWZmZXIpIHsKLQkJY2FyZC0+Y21kYnVmZmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGR1bXBfY21kKSwgR0ZQX0FUT01JQyk7Ci0KLQkJQVNTRVJUKGNhcmQtPmNtZGJ1ZmZlcik7Ci0JCWlmIChjYXJkLT5jbWRidWZmZXIgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKgotCSAqICBTbWVhciB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgYW5kIHRoZW4gb2J0YWluCi0JICogIHRoZSBQSFlTSUNBTCBhZGRyZXNzIG9mIHRoaXMgc3RydWN0dXJlCi0JICovCi0JbWVtc2V0KGNhcmQtPmNtZGJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBkdW1wX2NtZCkpOwotCWNhcmQtPmNtZGJ1ZmZlcl9waHlzID0gdmlydF90b19idXMoY2FyZC0+Y21kYnVmZmVyKTsKLQljYXJkLT5jbWRidWZmZXJfcGh5c2ggPSBTTElDX0dFVF9BRERSX0hJR0goY2FyZC0+Y21kYnVmZmVyX3BoeXMpOwotCWNhcmQtPmNtZGJ1ZmZlcl9waHlzbCA9IFNMSUNfR0VUX0FERFJfTE9XKGNhcmQtPmNtZGJ1ZmZlcl9waHlzKTsKLSNlbmRpZgotCiAJLyoKIAkgKiBMYXN0bHksIG1hcmsgb3VyIGNhcmQgc3RhdGUgYXMgdXAgYW5kIHJldHVybiBzdWNjZXNzCiAJICovCiAJY2FyZC0+c3RhdGUgPSBDQVJEX1VQOwogCWNhcmQtPnJlc2V0X2luX3Byb2dyZXNzID0gMDsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGNhcmRbJXBdIGFkYXB0ZXJbJXBdIGNhcmQtPnN0YXRlWyV4XVxuIiwKLQkJX19mdW5jX18sIGNhcmQsIGFkYXB0ZXIsIGNhcmQtPnN0YXRlKTsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KQEAgLTI3NTYsMTAgKzIyMDgsNiBAQAogCXVpbnQgaTsKIAl1aW50IHJkaG9zdGlkX29mZnNldCA9IDA7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBzbG90WyV4XSBidXNbJXhdIHBvcnRbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+c2xvdG51bWJlciwgYWRhcHRlci0+YnVzbnVtYmVyLAotCQlhZGFwdGVyLT5wb3J0KTsKLQogCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKIAljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKIAkJcmRob3N0aWRfb2Zmc2V0ID0gU0xJQ19SREhPU1RJRF8yR0I7CkBAIC0yNzc1LDExICsyMjIzLDkgQEAKIAlob3N0aWRfcmVnID0KIAkgICAgKHUxNiBfX2lvbWVtICopICgoKHU4IF9faW9tZW0gKikgKGFkYXB0ZXItPnNsaWNfcmVncykpICsKIAkgICAgcmRob3N0aWRfb2Zmc2V0KTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAqaG9zdGlkX3JlZ1slcF0gPT0gIiwgX19mdW5jX18sIGhvc3RpZF9yZWcpOwogCiAJLyogcmVhZCB0aGUgMTYgYml0IGhvc3RpZCBmcm9tIFNSQU0gKi8KIAljYXJkX2hvc3RpZCA9ICh1c2hvcnQpIHJlYWR3KGhvc3RpZF9yZWcpOwotCURCR19NU0coIiBjYXJkX2hvc3RpZFsleF1cbiIsIGNhcmRfaG9zdGlkKTsKIAogCS8qIEluaXRpYWxpemUgYSBuZXcgY2FyZCBzdHJ1Y3R1cmUgaWYgbmVlZCBiZSAqLwogCWlmIChjYXJkX2hvc3RpZCA9PSBTTElDX0hPU1RJRF9ERUZBVUxUKSB7CkBAIC0yNzg5LDE3ICsyMjM1LDYgQEAKIAogCQljYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwogCQlzbGljX2dsb2JhbC5zbGljX2NhcmQgPSBjYXJkOwotI2lmIERCRwotCQlpZiAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18yR0JfREVWSUNFX0lEKSB7Ci0JCQlEQkdfTVNHCi0JCQkgICAgKCJTTElDT1NTID09PiBJbml0aWFsaXplIDIgUG9ydCBHaWdhYml0IFNlcnZlciBcCi0JCQkgICAgIGFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yXG4iKTsKLQkJfSBlbHNlIHsKLQkJCURCR19NU0cKLQkJCSAgICAoIlNMSUNPU1MgPT0+IEluaXRpYWxpemUgMSBQb3J0IEdpZ2FiaXQgU2VydmVyIFwKLQkJCSAgICAgYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3JcbiIpOwotCQl9Ci0jZW5kaWYKIAkJY2FyZC0+YnVzbnVtYmVyID0gYWRhcHRlci0+YnVzbnVtYmVyOwogCQljYXJkLT5zbG90bnVtYmVyID0gYWRhcHRlci0+c2xvdG51bWJlcjsKIApAQCAtMjgxMiwyMyArMjI0NywxMSBAQAogCQkJfQogCQl9CiAJCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKys7Ci0JCURCR19NU0coIlxuQ0FSRE5VTSA9PSAlZCAgVG90YWwgJWQgIENhcmRbJXBdXG5cbiIsCi0JCQljYXJkLT5jYXJkbnVtLCBzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcywgY2FyZCk7CiAKIAkJc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShjYXJkKTsKIAl9IGVsc2UgewotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIENBUkQgYWxyZWFkeSBhbGxvY2F0ZWQsIGZpbmQgdGhlIFwKLQkJICAgICBjb3JyZWN0IGNhcmRcbiIsIF9fZnVuY19fKTsKIAkJLyogQ2FyZCBleGlzdHMsIGZpbmQgdGhlIGNhcmQgdGhpcyBhZGFwdGVyIGJlbG9uZ3MgdG8gKi8KIAkJd2hpbGUgKGNhcmQpIHsKLQkJCURCR19NU0cKLQkJCSAgICAoInNsaWNvc3M6ICVzIGNhcmRbJXBdIHNsb3RbJXhdIGJ1c1sleF0gXAotCQkJICAgICAgYWRhcHRwb3J0WyVwXSBob3N0aWRbJXhdIGNhcmRudW1bJXhdXG4iLAotCQkJICAgICBfX2Z1bmNfXywgY2FyZCwgY2FyZC0+c2xvdG51bWJlciwKLQkJCSAgICAgY2FyZC0+YnVzbnVtYmVyLCBjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdLAotCQkJICAgICBjYXJkX2hvc3RpZCwgY2FyZC0+Y2FyZG51bSk7Ci0KIAkJCWlmIChjYXJkLT5jYXJkbnVtID09IGNhcmRfaG9zdGlkKQogCQkJCWJyZWFrOwogCQkJY2FyZCA9IGNhcmQtPm5leHQ7CkBAIC0yODYxLDE0ICsyMjg0LDkgQEAKIAl9CiAJaWYgKCFwaHlzY2FyZCkgewogCQkvKiBubyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciB0aGlzIHBoeXNpY2FsIGNhcmQgeWV0ICovCi0JCXBoeXNjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkKSwgR0ZQX0FUT01JQyk7CisJCXBoeXNjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkKSwgR0ZQX0tFUk5FTCk7CiAJCUFTU0VSVChwaHlzY2FyZCk7CiAKLQkJREJHX01TRwotCQkgICAgKCJcbiVzIEFsbG9jYXRlIGEgUEhZU0lDQUxjYXJkOlxuICAgIFBIWVNJQ0FMX0NhcmRbJXBdXG5cCi0JCSAgICAgTG9naWNhbENhcmQgIFslcF1cbiAgICBhZGFwdGVyICAgICAgWyVwXVxuIiwKLQkJICAgICBfX2Z1bmNfXywgcGh5c2NhcmQsIGNhcmQsIGFkYXB0ZXIpOwotCiAJCXBoeXNjYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwucGh5c19jYXJkOwogCQlzbGljX2dsb2JhbC5waHlzX2NhcmQgPSBwaHlzY2FyZDsKIAkJcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCA9IDE7CkBAIC0yODgxLDggKzIyOTksNiBAQAogCUFTU0VSVChwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPT0gTlVMTCk7CiAJcGh5c2NhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cGh5c3BvcnRdID0gYWRhcHRlcjsKIAlhZGFwdGVyLT5waHlzY2FyZCA9IHBoeXNjYXJkOwotCURCR19NU0coIiAgICBQSFlTSUNBTF9Qb3J0ICVkICAgIExvZ2ljYWxfUG9ydCAgJWRcbiIsIGFkYXB0ZXItPnBoeXNwb3J0LAotCQlhZGFwdGVyLT5wb3J0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjg5MCwxNiArMjMwNiwxMiBAQAogc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIFFVSUVTQ0UgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQsIGFkYXB0ZXItPmRldmlkKTsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19xdWllc2NlLCAwLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19xdWllc2NlLCAwLCBGTFVTSCk7CiAJCW1kZWxheSgxKTsKIAl9Ci0vKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyAoJXMpIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XVxuIiwKLQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5jYXJkLAotCSAgIGFkYXB0ZXItPmRldmlkKTsgKi8KIAotCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmVzZXQsIFNMSUNfUkVTRVRfTUFHSUMsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmVzZXQsIFNMSUNfUkVTRVRfTUFHSUMsCisJCQkgRkxVU0gpOwogCW1kZWxheSgxKTsKIH0KIApAQCAtMjkwOSwxMCArMjMyMSw2IEBACiAJdTMyIFJjclJlc2V0OwogCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwogCi0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBzbGljX2ludGVyZmFjZV9lbmFibGVbJXBdKCVkKVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwKLQkJYWRhcHRlci0+Y2FyZGluZGV4KTsKLQogCWlmIChsaW5rY2hhbmdlKSB7CiAJCS8qIFNldHVwIE1BQyAqLwogCQlzbGljX21hY19jb25maWcoYWRhcHRlcik7CkBAIC0yOTI4LDkgKzIzMzYsNyBAQAogCQkJIEdYQ1JfWE1URU4gfAkvKiBFbmFibGUgdHJhbnNtaXQgICovCiAJCQkgR1hDUl9QQVVTRUVOKTsJLyogRW5hYmxlIHBhdXNlICAgICAqLwogCi0JCURCR19NU0coInNsaWNvc3M6IEZEWCBhZGFwdFslcF0gc2V0IHhtdGNmZyB0byBbJXhdXG4iLCBhZGFwdGVyLAotCQkJdmFsdWUpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KIAkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLwpAQCAtMjk0Myw5ICsyMzQ5LDcgQEAKIAkJdmFsdWUgPSAoR1hDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgKi8KIAkJCSBHWENSX1hNVEVOKTsJLyogRW5hYmxlIHRyYW5zbWl0ICAqLwogCi0JCURCR19NU0coInNsaWNvc3M6IEhEWCBhZGFwdFslcF0gc2V0IHhtdGNmZyB0byBbJXhdXG4iLCBhZGFwdGVyLAotCQkJdmFsdWUpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KIAkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLwpAQCAtMjk2Miw4ICsyMzY2LDcgQEAKIAlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIE1BQ19QUk9NSVNDKQogCQl2YWx1ZSB8PSBHUkNSX1JDVkFMTDsKIAotCURCR19NU0coInNsaWNvc3M6IGFkYXB0WyVwXSBzZXQgcmN2Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsIHZhbHVlKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmNmZywgdmFsdWUsIEZMVVNIKTsKIH0KIAogLyoKQEAgLTI5NzksMTggKzIzODIsMTggQEAKIAl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICovCiAJCSBHWENSX1BBVVNFRU4pOwkvKiBFbmFibGUgcGF1c2UgKi8KIAotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOwogCiAJdmFsdWUgPSAoR1JDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgICovCiAJCSBHUkNSX0NUTEVOIHwJLyogRW5hYmxlIENUTCBmcmFtZXMgKi8KIAkJIEdSQ1JfQUREUkFFTiB8CS8qIEFkZHJlc3MgQSBlbmFibGUgICovCiAJCSAoR1JDUl9IQVNIU0laRSA8PCBHUkNSX0hBU0hTSVpFX1NISUZUKSk7CiAKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmNmZywgdmFsdWUsIEZMVVNIKTsKIAogCS8qIHBvd2VyIGRvd24gcGh5ICovCiAJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKFBDUl9QT1dFUkRPV04pKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCkBAIC0zMDEyLDE4ICsyNDE1LDE0IEBACiAKIAl2YWx1ZSA9ICoodTMyICopICZhZGFwdGVyLT5jdXJybWFjYWRkclsyXTsKIAl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFsLCB2YWx1ZSwgRkxVU0gpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYmwsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmFsLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJibCwgdmFsdWUsIEZMVVNIKTsKIAogCXZhbHVlMiA9ICh1MzIpICgoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gPDwgOCB8CiAJCQkgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdKSAmIDB4RkZGRik7CiAKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFoLCB2YWx1ZTIsIEZMVVNIKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKLQotCURCR19NU0coIiVzIHZhbHVlMVsleF0gdmFsdWUyWyV4XSBDYWxsIHNsaWNfbWNhc3Rfc2V0X21hc2tcbiIsCi0JCV9fZnVuY19fLCB2YWx1ZSwgdmFsdWUyKTsKLQlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWgsIHZhbHVlMiwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJiaCwgdmFsdWUyLCBGTFVTSCk7CiAKIAkvKiBXcml0ZSBvdXIgbXVsdGljYXN0IG1hc2sgb3V0IHRvIHRoZSBjYXJkLiAgVGhpcyBpcyBkb25lICovCiAJLyogaGVyZSBpbiBhZGRpdGlvbiB0byB0aGUgc2xpY19tY2FzdF9hZGRyX3NldCByb3V0aW5lICAgICAqLwpAQCAtMzA1OCw3ICsyNDU3LDcgQEAKIAl9CiAKIAkvKiB3cml0ZSBtYWMgY29uZmlnICovCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193bWNmZywgdmFsdWUsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd21jZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAkvKiBzZXR1cCBtYWMgYWRkcmVzc2VzICovCiAJc2xpY19tYWNfYWRkcmVzc19jb25maWcoYWRhcHRlcik7CkBAIC0zMDcyLDE4ICsyNDcxLDE1IEBACiAJdTE2ICpkaG9zdDIgPSAodTE2ICopJmV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFs0XTsKIAlib29sIGVxdWFsYWRkcjsKIAotCWlmIChvcHRzICYgTUFDX1BST01JU0MpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBQUk9NSVNDVU9VUy4gQWNjZXB0IGZyYW1lXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCXJldHVybiBUUlVFOwotCX0KKwlpZiAob3B0cyAmIE1BQ19QUk9NSVNDKQorCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICgoKmRob3N0NCA9PSAweEZGRkZGRkZGKSAmJiAoKmRob3N0MiA9PSAweEZGRkYpKSB7CiAJCWlmIChvcHRzICYgTUFDX0JDQVNUKSB7CiAJCQlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cysrOwotCQkJcmV0dXJuIFRSVUU7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBlbHNlIHsKLQkJCXJldHVybiBGQUxTRTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIApAQCAtMzA5MSw3ICsyNDg3LDcgQEAKIAkJaWYgKG9wdHMgJiBNQUNfQUxMTUNBU1QpIHsKIAkJCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzKys7CiAJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKLQkJCXJldHVybiBUUlVFOworCQkJcmV0dXJuIHRydWU7CiAJCX0KIAkJaWYgKG9wdHMgJiBNQUNfTUNBU1QpIHsKIAkJCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwpAQCAtMzEwMywyMCArMjQ5OSwyMCBAQAogCQkJCWlmIChlcXVhbGFkZHIpIHsKIAkJCQkJYWRhcHRlci0+cmN2X211bHRpY2FzdHMrKzsKIAkJCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0Kys7Ci0JCQkJCXJldHVybiBUUlVFOworCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQl9CiAJCQkJbWNhZGRyID0gbWNhZGRyLT5uZXh0OwogCQkJfQotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9IGVsc2UgewotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCWlmIChvcHRzICYgTUFDX0RJUkVDVEVEKSB7CiAJCWFkYXB0ZXItPnJjdl91bmljYXN0cysrOwotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHRydWU7CiAJfQotCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gZmFsc2U7CiAKIH0KIApAQCAtMzEyNSw4MCArMjUyMSwyOCBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwdHI7CiAKLQlEQkdfTVNHKCIlcyBFTlRFUiAoJXMpXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKCFhZGFwdGVyKQogCQlyZXR1cm4gLUVCVVNZOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgY3VyciAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIG5ldyAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CiAKLQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIHRydWUpOwogCXJldHVybiAwOwogfQogCi0vKgotICogIHNsaWNfdGltZXJfZ2V0X3N0YXRzCi0gKgotICogVGltZXIgZnVuY3Rpb24gdXNlZCB0byBzdWNrIHRoZSBzdGF0aXN0aWNzIG91dCBvZiB0aGUgY2FyZCBldmVyeQotICogNTAgc2Vjb25kcyBvciB3aGF0ZXZlciBTVEFUU19USU1FUl9JTlRFUlZBTCBpcyBzZXQgdG8uCi0gKgotICovCi0jaWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAotc3RhdGljIHZvaWQgc2xpY190aW1lcl9nZXRfc3RhdHModWxvbmcgZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwotCi0JQVNTRVJUKGRldik7Ci0JYWRhcHRlciA9IG5ldGRldl9wcml2KChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldik7Ci0JQVNTRVJUKGFkYXB0ZXIpOwotCWNhcmQgPSBhZGFwdGVyLT5jYXJkOwotCUFTU0VSVChjYXJkKTsKLQotCWlmICgoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkgJiYKLQkgICAgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJiAoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfVVApKSB7Ci0JCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQlzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsCi0JCQkJIFNMSUNfVVBSX1NUQVRTLAotCQkJCSBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pbmljc3RhdHMpLAotCQkJCSBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+aW5pY3N0YXRzKSwgMCwgMCk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCi0JCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKLQkJCQkgU0xJQ19VUFJfU1RBVFMsCi0JCQkJICh1MzIpICZwc2htZW0tPmluaWNzdGF0cywgMCwgMCwgMCk7Ci0jZWxzZQotCQlTdG9wIGNvbXBpbGF0aW9uOwotI2VuZGlmCi0JfSBlbHNlIHsKLS8qCQlEQkdfTVNHICgic2xpY29zczogJXMgYWRhcHRlclslcF0gbGlua3N0YXRlWyV4XSBOT1QgVVAhXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmxpbmtzdGF0ZSk7ICovCi0JfQotCWFkYXB0ZXItPnN0YXRzdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwotCSAgICBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOwotCWFkZF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7Ci19Ci0jZW5kaWYKIHN0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjYXJkYWRkcikKIHsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY2FyZGFkZHI7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7CisJdTMyIF9faW9tZW0gKmludGFnZzsKIAl1MzIgbG9hZCA9IGNhcmQtPmV2ZW50czsKIAl1MzIgbGV2ZWwgPSAwOwogCisJaW50YWdnID0gJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2c7CisKIAlpZiAoKGFkYXB0ZXIpICYmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgJiYKIAkgICAgKGNhcmQtPnN0YXRlID09IENBUkRfVVApICYmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykpIHsKIAkJaWYgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkgewpAQCAtMzIyMCw4ICsyNTY0LDcgQEAKIAkJCX0KIAkJCWlmIChjYXJkLT5sb2FkbGV2ZWxfY3VycmVudCAhPSBsZXZlbCkgewogCQkJCWNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ID0gbGV2ZWw7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2csCi0JCQkJCSAgbGV2ZWwsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKGludGFnZywgbGV2ZWwsIEZMVVNIKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChsb2FkID4gU0xJQ19MT0FEXzUpCkBAIC0zMjM4LDE0ICsyNTgxLDEyIEBACiAJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18wOwogCQkJaWYgKGNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ICE9IGxldmVsKSB7CiAJCQkJY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSBsZXZlbDsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywKLQkJCQkJICBsZXZlbCwgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUoaW50YWdnLCBsZXZlbCwgRkxVU0gpOwogCQkJfQogCQl9CiAJfQogCWNhcmQtPmV2ZW50cyA9IDA7Ci0JY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPQotCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKFNMSUNfTE9BRFRJTUVSX1BFUklPRCAqIEhaKTsKIAlhZGRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CiB9CiAKQEAgLTMyNTYsNyArMjU5Nyw4IEBACiAJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJY3Vycl9waWQgPSBjdXJyZW50LT5waWQ7CiAKLQlEQkdfRVJST1IoIiVzIENQVSAjICVkIC0tLS0gUElEICMgJWRcbiIsIF9fZnVuY19fLCBjcHVpZCwgY3Vycl9waWQpOworCXByaW50ayhLRVJOX0VSUiAiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwKKwkgICAgICAgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKQEAgLTMyNjksMTEgKzI2MTEsOSBAQAogCXN0cnVjdCBzbGljX3VwciAqdXBycXVldWU7CiAKIAl1cHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xpY191cHIpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXVwcikgewotCQlEQkdfTVNHKCIlcyBDT1VMRCBOT1QgQUxMT0NBVEUgVVBSIE1FTVxuIiwgX19mdW5jX18pOwotCisJaWYgKCF1cHIpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKwogCXVwci0+YWRhcHRlciA9IGFkYXB0ZXItPnBvcnQ7CiAJdXByLT51cHJfcmVxdWVzdCA9IHVwcl9yZXF1ZXN0OwogCXVwci0+dXByX2RhdGEgPSB1cHJfZGF0YTsKQEAgLTMzMjIsMTAgKzI2NjIsNiBAQAogCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CiAJc3RydWN0IHNsaWNfdXByICp1cHI7CiAKLS8qICAgIGlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCkgewotCURCR19NU0coIkVOVEVSIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUgRHVtcCBpbiBwcm9ncmVzcyBJU1JbJXhdXG4iLAotCQlpc3IpOwotICAgICAgfSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLCBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CiAJdXByID0gYWRhcHRlci0+dXByX2xpc3Q7CiAJaWYgKCF1cHIpIHsKQEAgLTMzNDEsMzggKzI2NzcsMTkgQEAKIAlzd2l0Y2ggKHVwci0+dXByX3JlcXVlc3QpIHsKIAljYXNlIFNMSUNfVVBSX1NUQVRTOgogCQl7Ci0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAogCQkJc3RydWN0IHNsaWNfc3RhdHMgKnNsaWNzdGF0cyA9CiAJCQkgICAgKHN0cnVjdCBzbGljX3N0YXRzICopICZhZGFwdGVyLT5wc2htZW0tPmluaWNzdGF0czsKIAkJCXN0cnVjdCBzbGljX3N0YXRzICpuZXdzdGF0cyA9IHNsaWNzdGF0czsKIAkJCXN0cnVjdCBzbGljX3N0YXRzICAqb2xkID0gJmFkYXB0ZXItPmluaWNzdGF0c19wcmV2OwogCQkJc3RydWN0IHNsaWNuZXRfc3RhdHMgKnN0c3QgPSAmYWRhcHRlci0+c2xpY19zdGF0czsKLSNlbmRpZgorCiAJCQlpZiAoaXNyICYgSVNSX1VQQ0VSUikgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIlNMSUNfVVBSX1NUQVRTIGNvbW1hbmQgZmFpbGVkIGlzclsleF1cbiIsCi0JCQkJICAgICBpc3IpOworCQkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCQkiU0xJQ19VUFJfU1RBVFMgY29tbWFuZCBmYWlsZWQgaXNyWyV4XVxuIiwKKwkJCQkJaXNyKTsKIAogCQkJCWJyZWFrOwogCQkJfQotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKLS8qCQkJREJHX01TRyAoInNsaWNvc3M6ICVzIHJjdiAlbHg6JWx4OiVseDolbHg6JWx4ICVseCAlbHggIgotCQkJCSJ4bXQgJWx4OiVseDolbHg6JWx4OiVseCAlbHggJWx4XG4iLAotCQkJCSBfX2Z1bmNfXywKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdW5pY2FzdHMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+cmN2X2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl9ieXRlczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdGNwX2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl90Y3Bfc2VnczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3Zfb3RoZXJfZXJyb3IxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+cmN2X2Ryb3BzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdW5pY2FzdHMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9ieXRlczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX3NlZ3MxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9vdGhlcl9lcnJvcjEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2NvbGxpc2lvbnMxMDApOyovCiAJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnhtaXRfdGNwX3NlZ3MsCiAJCQkJCW5ld3N0YXRzLT54bWl0X3RjcF9zZWdzX2diLAogCQkJCQlvbGQtPnhtaXRfdGNwX3NlZ3NfZ2IpOwpAQCAtMzQzMSw3ICsyNzQ4LDYgQEAKIAkJCQkgICAgIG9sZC0+cmN2X2Ryb3BzX2diKTsKIAkJCX0KIAkJCW1lbWNweShvbGQsIG5ld3N0YXRzLCBzaXplb2Yoc3RydWN0IHNsaWNfc3RhdHMpKTsKLSNlbmRpZgogCQkJYnJlYWs7CiAJCX0KIAljYXNlIFNMSUNfVVBSX1JMU1I6CkBAIC0zNDU0LDExICsyNzcwLDYgQEAKIAljYXNlIFNMSUNfVVBSX1BJTkc6CiAJCWNhcmQtPnBpbmdzdGF0dXMgfD0gKGlzciAmIElTUl9QSU5HRFNNQVNLKTsKIAkJYnJlYWs7Ci0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLQljYXNlIFNMSUNfVVBSX0RVTVA6Ci0JCWNhcmQtPmR1bXBzdGF0dXMgfD0gKGlzciAmIElTUl9VUENNQVNLKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CiAJfQpAQCAtMzQ4Nyw3NCArMjc5OCwyOSBAQAogCXN3aXRjaCAodXByLT51cHJfcmVxdWVzdCkgewogCWNhc2UgU0xJQ19VUFJfU1RBVFM6CiAJCWlmICh1cHItPnVwcl9kYXRhX2ggPT0gMCkgewotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19zdGF0cywgdXByLT51cHJfZGF0YSwgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3N0YXRzLCB1cHItPnVwcl9kYXRhLAorCQkJCQkgRkxVU0gpOwogCQl9IGVsc2UgewotCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX3N0YXRzNjQsCi0JCQkJICAgIHVwci0+dXByX2RhdGEsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCSAgICB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19zdGF0czY0LAorCQkJCQkgdXByLT51cHJfZGF0YSwKKwkJCQkJICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBTTElDX1VQUl9STFNSOgotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19ybHNyLAotCQkJICAgIHVwci0+dXByX2RhdGEsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmxzciwgdXByLT51cHJfZGF0YSwKKwkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsCisJCQkJIEZMVVNIKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNMSUNfVVBSX1JDT05GSUc6Ci0JCURCR19NU0coIiVzIFNMSUNfVVBSX1JDT05GSUchISEhXG4iLCBfX2Z1bmNfXyk7Ci0JCURCR19NU0coIldSSVRFX1JFRzY0IGFkYXB0ZXJbJXBdXG4iCi0JCQkiICAgIGEtPnNsaWNfcmVnc1slcF0gc2xpY19yZWdzWyVwXVxuIgotCQkJIiAgICAmc2xpY19yY29uZmlnWyVwXSAmc2xpY19hZGRyX3VwcGVyWyVwXVxuIgotCQkJIiAgICB1cHJbJXBdXG4iCi0JCQkiICAgIHVwcmRhdGFbJXhdIHVwcmRhdGFoWyV4XVxuIiwKLQkJCWFkYXB0ZXIsIGFkYXB0ZXItPnNsaWNfcmVncywgc2xpY19yZWdzLAotCQkJJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQl1cHIsIHVwci0+dXByX2RhdGEsIHVwci0+dXByX2RhdGFfaCk7Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX3Jjb25maWcsCi0JCQkgICAgdXByLT51cHJfZGF0YSwKLQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLAorCQkJCSB1cHItPnVwcl9kYXRhLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwogCQlicmVhazsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWNhc2UgU0xJQ19VUFJfRFVNUDoKLSNpZiAwCi0JCURCR19NU0coIiVzIFNMSUNfVVBSX0RVTVAhISEhXG4iLCBfX2Z1bmNfXyk7Ci0JCURCR19NU0coIldSSVRFX1JFRzY0IGFkYXB0ZXJbJXBdXG4iCi0JCQkgIiAgICB1cHJfYnVmZmVyWyV4XSAgIHVwcl9idWZmZXJoWyV4XVxuIgotCQkJICIgICAgdXByX2RhdGFbJXhdICAgICB1cHJfZGF0YWhbJXhdXG4iCi0JCQkgIiAgICBjbWRidWZmWyVwXSBjbWRidWZmUFslcF1cbiIKLQkJCSAiICAgIGR1bXBidWZmWyVwXSBkdW1wYnVmZlBbJXBdXG4iLAotCQkJIGFkYXB0ZXIsIHVwci0+dXByX2J1ZmZlciwgdXByLT51cHJfYnVmZmVyX2gsCi0JCQkgdXByLT51cHJfZGF0YSwgdXByLT51cHJfZGF0YV9oLAotCQkJIGFkYXB0ZXItPmNhcmQtPmNtZGJ1ZmZlciwKLQkJCSAodm9pZCAqKWFkYXB0ZXItPmNhcmQtPmNtZGJ1ZmZlcl9waHlzLAotCQkJIGFkYXB0ZXItPmNhcmQtPmR1bXBidWZmZXIsICgKLQkJCSB2b2lkICopYWRhcHRlci0+Y2FyZC0+ZHVtcGJ1ZmZlcl9waHlzKTsKLQotCQlwdHIxID0gKGNoYXIgKilzbGljX3JlZ3M7Ci0JCXB0cjIgPSAoY2hhciAqKSgmc2xpY19yZWdzLT5zbGljX2R1bXBfY21kKTsKLQkJY21kb2Zmc2V0ID0gcHRyMiAtIHB0cjE7Ci0JCURCR19NU0coInNsaWNfZHVtcF9jbWQgcmVnaXN0ZXIgb2Zmc2V0IFsleF1cbiIsIGNtZG9mZnNldCk7Ci0jZW5kaWYKLQkJaWYgKHVwci0+dXByX2J1ZmZlciB8fCB1cHItPnVwcl9idWZmZXJfaCkgewotCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2R1bXBfZGF0YSwKLQkJCQkgICAgdXByLT51cHJfYnVmZmVyLAotCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkgICAgdXByLT51cHJfYnVmZmVyX2gsIEZMVVNIKTsKLQkJfQotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19kdW1wX2NtZCwKLQkJCSAgICB1cHItPnVwcl9kYXRhLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAljYXNlIFNMSUNfVVBSX1BJTkc6Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcGluZywgMSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcGluZywgMSwgRkxVU0gpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CkBAIC0zNTY4LDEwICsyODM0LDYgQEAKIAl1bnNpZ25lZCBjaGFyIGxpbmtzcGVlZDsKIAl1bnNpZ25lZCBjaGFyIGxpbmtkdXBsZXg7CiAKLQlEQkdfTVNHKCIlczogJXMgSVNSWyV4XSBsaW5rc3RhdHVzWyV4XVxuICAgYWRhcHRlclslcF0oJWQpXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpc3IsIGxpbmtzdGF0dXMsIGFkYXB0ZXIsCi0JCWFkYXB0ZXItPmNhcmRpbmRleCk7Ci0KIAlpZiAoKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgewogCQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwogCkBAIC0zNTk5LDUwICsyODYxLDMzIEBACiAJICAgICAgIHx8IChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpKTsKIAogCWxpbmt1cCA9IGxpbmtzdGF0dXMgJiBHSUdfTElOS1VQID8gTElOS19VUCA6IExJTktfRE9XTjsKLQlpZiAobGlua3N0YXR1cyAmIEdJR19TUEVFRF8xMDAwKSB7CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwMCkKIAkJbGlua3NwZWVkID0gTElOS18xMDAwTUI7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTAwME1CICAiLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfSBlbHNlIGlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMCkgeworCWVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKQogCQlsaW5rc3BlZWQgPSBMSU5LXzEwME1COwotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEdJR0FCSVQgU3BlZWQ9PTEwME1CICAiLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWxpbmtzcGVlZCA9IExJTktfMTBNQjsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBHSUdBQklUIFNwZWVkPT0xME1CICAiLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfQotCWlmIChsaW5rc3RhdHVzICYgR0lHX0ZVTExEVVBMRVgpIHsKLQkJbGlua2R1cGxleCA9IExJTktfRlVMTEQ7Ci0JCURCR19NU0coIiBEdXBsZXggPT0gRlVMTFxuIik7Ci0JfSBlbHNlIHsKLQkJbGlua2R1cGxleCA9IExJTktfSEFMRkQ7Ci0JCURCR19NU0coIiBEdXBsZXggPT0gSEFMRlxuIik7Ci0JfQogCi0JaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKSAmJiAobGlua3VwID09IExJTktfRE9XTikpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBwaHlzcG9ydCglZCkgbGluayBzdGlsbCBkb3duXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+cGh5c3BvcnQpOworCWlmIChsaW5rc3RhdHVzICYgR0lHX0ZVTExEVVBMRVgpCisJCWxpbmtkdXBsZXggPSBMSU5LX0ZVTExEOworCWVsc2UKKwkJbGlua2R1cGxleCA9IExJTktfSEFMRkQ7CisKKwlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pICYmIChsaW5rdXAgPT0gTElOS19ET1dOKSkKIAkJcmV0dXJuOwotCX0KIAogCS8qIGxpbmsgdXAgZXZlbnQsIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkICovCiAJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkgJiYKIAkgICAgKGxpbmt1cCA9PSBMSU5LX1VQKSAmJgogCSAgICAoYWRhcHRlci0+bGlua3NwZWVkID09IGxpbmtzcGVlZCkgJiYKLQkgICAgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gbGlua2R1cGxleCkpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBwb3J0KCVkKSBsaW5rIHN0aWxsIHVwXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+cGh5c3BvcnQpOworCSAgICAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBsaW5rZHVwbGV4KSkKIAkJcmV0dXJuOwotCX0KIAogCS8qIGxpbmsgaGFzIGNoYW5nZWQgYXQgdGhpcyBwb2ludCAqLwogCiAJLyogbGluayBoYXMgZ29uZSBmcm9tIHVwIHRvIGRvd24gKi8KIAlpZiAobGlua3VwID09IExJTktfRE9XTikgewogCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICVkIExpbmtEb3duIVxuIiwgX19mdW5jX18sCi0JCQlhZGFwdGVyLT5waHlzcG9ydCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM2NTIsMzAgKzI4OTcsMTAgQEAKIAogCWlmIChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgewogCQkvKiBzZXR1cCB0aGUgbWFjICovCi0JCURCR19NU0coIiVzIGNhbGwgc2xpY19jb25maWdfc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIHRydWUpOwogCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX1VQOwotCQlEQkdfTVNHKCJcbiglcykgTGluayBVUDogQ0FMTCBzbGljX2lmX3N0YXJ0X3F1ZXVlIiwKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCXNsaWNfaWZfc3RhcnRfcXVldWUoYWRhcHRlcik7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAJfQotI2lmIDEKLQlzd2l0Y2ggKGxpbmtzcGVlZCkgewotCWNhc2UgTElOS18xMDAwTUI6Ci0JCURCR19NU0cKLQkJICAgICgiXG4oJXMpIExJTksgVVAhOiBHSUdBQklUIFNQRUVEID09IDEwMDBNQiAgZHVwbGV4WyV4XVxuIiwKLQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOwotCQlicmVhazsKLQljYXNlIExJTktfMTAwTUI6Ci0JCURCR19NU0coIlxuKCVzKSBMSU5LIFVQITogU1BFRUQgPT0gMTAwTUIgIGR1cGxleFsleF1cbiIsCi0JCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkdfTVNHKCJcbiglcykgTElOSyBVUCE6IFNQRUVEID09IDEwTUIgIGR1cGxleFsleF1cbiIsCi0JCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTM3ODcsMjAgKzMwMTIsMTggQEAKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIAl1MzIgcGFkZHJoID0gMDsKIAotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOwogCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKIAltZW1zZXQocnNwcSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3JzcHF1ZXVlKSk7CiAKIAlyc3BxLT5udW1fcGFnZXMgPSBTTElDX1JTUFFfUEFHRVNfR0I7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKLQkJcnNwcS0+dmFkZHJbaV0gPQotCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBQQUdFX1NJWkUsCi0JCQkJCSAmcnNwcS0+cGFkZHJbaV0pOworCQlyc3BxLT52YWRkcltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJCSAgICAgIFBBR0VfU0laRSwKKwkJCQkJCSAgICAgICZyc3BxLT5wYWRkcltpXSk7CiAJCWlmICghcnNwcS0+dmFkZHJbaV0pIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgicnNwcXVldWVfaW5pdF9mYWlsZWQgIHBjaV9hbGxvY19jb25zaXN0ZW50XG4iKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCSJwY2lfYWxsb2NfY29uc2lzdGVudCBmYWlsZWRcbiIpOwogCQkJc2xpY19yc3BxdWV1ZV9mcmVlKGFkYXB0ZXIpOwogCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCQl9CkBAIC0zODExLDQ3ICszMDM0LDIxIEBACiAJCSAgICAgICAodTMyKSByc3BxLT5wYWRkcltpXSk7CiAjZW5kaWYKIAkJbWVtc2V0KHJzcHEtPnZhZGRyW2ldLCAwLCBQQUdFX1NJWkUpOwotLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFVQTE9BRCBSU1BCVUZGIFBhZ2UgcGFnZWl4WyV4XSBwYWRkclslcF0gIgotCQkJInZhZGRyWyVwXVxuIiwKLQkJCV9fZnVuY19fLCBpLCAodm9pZCAqKXJzcHEtPnBhZGRyW2ldLCByc3BxLT52YWRkcltpXSk7ICovCiAKIAkJaWYgKHBhZGRyaCA9PSAwKSB7Ci0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3JiYXIsCi0JCQkJICAocnNwcS0+cGFkZHJbaV0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCi0JCQkJICBET05UX0ZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yYmFyLAorCQkJCShyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQlET05UX0ZMVVNIKTsKIAkJfSBlbHNlIHsKLQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19yYmFyNjQsCi0JCQkJICAgIChyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJICAgIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmJhcjY0LAorCQkJCShyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJcGFkZHJoLCBET05UX0ZMVVNIKTsKIAkJfQogCX0KIAlyc3BxLT5vZmZzZXQgPSAwOwogCXJzcHEtPnBhZ2VpbmRleCA9IDA7CiAJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKXJzcHEtPnZhZGRyWzBdOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7Ci0KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKLQlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7Ci0JQVNTRVJUKHJzcHEpOwotCi0JREJHX01TRygic2xpY29zczogTm90aGluZyB0byBkby4gcnNwcVslcF1cbiIKLQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WyV4XVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlaXhbJXhdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcGJ1ZlslcF1cbiIsCi0JCXJzcHEsIHJzcHEtPm9mZnNldCwgcnNwcS0+cGFnZWluZGV4LCByc3BxLT5yc3BidWYpOwotCi0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKQEAgLTM4NjAsMTQgKzMwNTcsOCBAQAogCWludCBpOwogCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOwogCi0JREJHX01TRygic2xpY29zczogJXMgYWRhcHRlclslcF0gcG9ydCAlZCByc3BxWyVwXSBGcmVlUlNQUVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNwb3J0LCByc3BxKTsKIAlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJaWYgKHJzcHEtPnZhZGRyW2ldKSB7Ci0JCQlEQkdfTVNHCi0JCQkgICAgKCJzbGljb3NzOiAgcGNpX2ZyZWVfY29uc2lzdGVudCByc3BxLT52YWRkclslcF0gXAotCQkJICAgIHBhZGRyWyVwXVxuIiwKLQkJCSAgICAgcnNwcS0+dmFkZHJbaV0sICh2b2lkICopIHJzcHEtPnBhZGRyW2ldKTsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBQQUdFX1NJWkUsCiAJCQkJCSAgICByc3BxLT52YWRkcltpXSwgcnNwcS0+cGFkZHJbaV0pOwogCQl9CkBAIC0zOTAwLDExICszMDkxLDkgQEAKICNlbmRpZgogCX0gZWxzZSB7CiAJCUFTU0VSVChyc3BxLT5vZmZzZXQgPT0gU0xJQ19SU1BRX0JVRlNJTlBBR0UpOwotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19yYmFyNjQsCi0JCQkgICAgKHJzcHEtPgotCQkJICAgICBwYWRkcltyc3BxLT5wYWdlaW5kZXhdIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3JiYXI2NCwKKwkJCShyc3BxLT5wYWRkcltyc3BxLT5wYWdlaW5kZXhdIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKIAkJcnNwcS0+cGFnZWluZGV4ID0gKCsrcnNwcS0+cGFnZWluZGV4KSAlIHJzcHEtPm51bV9wYWdlczsKIAkJcnNwcS0+b2Zmc2V0ID0gMDsKIAkJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKQpAQCAtMzkzMiwxMiArMzEyMSw4IEBACiAJc3RydWN0IHNsaWNfY21kcW1lbSAqY21kcW1lbSA9ICZhZGFwdGVyLT5jbWRxbWVtOwogCWludCBpOwogCi0JREJHX01TRygic2xpY29zczogKCVzKSBhZGFwdGVyWyVwXSBwb3J0ICVkIHJzcHFbJXBdIEZyZWUgQ01EUSBNZW1vcnlcbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCwgY21kcW1lbSk7CiAJZm9yIChpID0gMDsgaSA8IFNMSUNfQ01EUV9NQVhQQUdFUzsgaSsrKSB7CiAJCWlmIChjbWRxbWVtLT5wYWdlc1tpXSkgewotCQkJREJHX01TRygic2xpY29zczogJXMgRGVhbGxvY2F0ZSBwYWdlICBDbWRRUGFnZVslcF1cbiIsCi0JCQkJX19mdW5jX18sICh2b2lkICopIGNtZHFtZW0tPnBhZ2VzW2ldKTsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCQkgICAgUEFHRV9TSVpFLAogCQkJCQkgICAgKHZvaWQgKikgY21kcW1lbS0+cGFnZXNbaV0sCkBAIC0zOTcyLDcgKzMxNTcsNiBAQAogCWludCBpOwogCXUzMiAqcGFnZWFkZHI7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKIAltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKIAltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CkBAIC0zOTk0LDcgKzMxNzgsNiBAQAogCQlzbGljX2NtZHFfYWRkY21kcGFnZShhZGFwdGVyLCBwYWdlYWRkcik7CiAJfQogCWFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4ID0gMTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyByZXNldCBzbGljX2hhbmRsZV9peCB0byBPTkVcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KQEAgLTQwMDMsOCArMzE4Niw2IEBACiB7CiAJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kOwogCi0JREJHX01TRygic2xpY29zczogJXMgYWRhcHRlclslcF0gcG9ydCAlZCBGcmVlQ29tbWFuZHNGcm9tIENNRFFcbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCk7CiAJY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKIAl3aGlsZSAoY21kKSB7CiAJCWlmIChjbWQtPmJ1c3kpIHsKQEAgLTQwMzAsNyArMzIxMSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgb3V0c3RhbmRpbmc7CiAKLQlEQkdfTVNHKCIlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrLAogCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrLApAQCAtNDA0MiwxMSArMzIyMiw4IEBACiAJCWlmIChoY21kLT5idXN5KSB7CiAJCQlza2IgPSBoY21kLT5za2I7CiAJCQlBU1NFUlQoc2tiKTsKLQkJCURCR19NU0coInNsaWNvc3M6ICVzIGhjbWRbJXBdIHNrYlslcF0gIiwgX19mdW5jX18sCi0JCQkJaGNtZCwgc2tiKTsKIAkJCWhjbWQtPmJ1c3kgPSAwOwogCQkJaGNtZC0+c2tiID0gTlVMTDsKLQkJCURCR19NU0coIiBGcmVlIFNLQlxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQl9CiAJCWhjbWQgPSBoY21kLT5uZXh0X2FsbDsKQEAgLTQwNjUsMTQgKzMyNDIsMTQgQEAKIAkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOwogCX0KIAlpZiAoYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50ICE9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KSB7Ci0JCURCR19FUlJPUigiJXMgZnJlZV9jb3VudCAlZCAhPSBhbGwgY291bnQgJWRcbiIsIF9fZnVuY19fLAotCQkJICBhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQsIGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KTsKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiZnJlZV9jb3VudCAlZCAhPSBhbGwgY291bnQgJWRcbiIsCisJCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQsIGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKIAkJCQlhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKIAkJCQlhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5mbGFncyk7Ci0JREJHX01TRygiJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKQpAQCAtNDA5MCw4ICszMjY3LDYgQEAKIAogCWNtZGFkZHIgPSBwYWdlOwogCWNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopY21kYWRkcjsKLS8qICBEQkdfTVNHKCJDTURRIFBhZ2UgYWRkclslcF0gaXhbJWRdIHBmcmVlWyVwXVxuIiwgY21kYWRkciwgc2xpY19oYW5kbGVfaXgsCi0gICAgYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzKTsgKi8KIAljbWRjbnQgPSAwOwogCiAJcGh5c19hZGRyID0gdmlydF90b19idXMoKHZvaWQgKilwYWdlKTsKQEAgLTQxMTcsNyArMzI5Miw3IEBACiAKIAkJY21kLT5wc2xpY19oYW5kbGUgPSBwc2xpY19oYW5kbGU7CiAJCWNtZC0+Y21kNjQuaG9zdGhhbmRsZSA9IHBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX3Rva2VuOwotCQljbWQtPmJ1c3kgPSBGQUxTRTsKKwkJY21kLT5idXN5ID0gZmFsc2U7CiAJCWNtZC0+cGFkZHJsID0gcGh5c19hZGRybDsKIAkJY21kLT5wYWRkcmggPSBwaHlzX2FkZHJoOwogCQljbWQtPm5leHRfYWxsID0gcHJldjsKQEAgLTQxMzMsMTMgKzMzMDgsMTEgQEAKIAljbWRxID0gJmFkYXB0ZXItPmNtZHFfYWxsOwogCWNtZHEtPmNvdW50ICs9IGNtZGNudDsJLyogIFNMSUNfQ01EUV9DTURTSU5QQUdFOyAgIG1vb2t0b2RvICovCiAJdGFpbC0+bmV4dF9hbGwgPSBjbWRxLT5oZWFkOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKIAljbWRxLT5oZWFkID0gcHJldjsKIAljbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKIAljbWRxLT5jb3VudCArPSBjbWRjbnQ7CS8qICBTTElDX0NNRFFfQ01EU0lOUEFHRTsgICBtb29rdG9kbyAqLwogCXRhaWwtPm5leHQgPSBjbWRxLT5oZWFkOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKIAljbWRxLT5oZWFkID0gcHJldjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOwogfQpAQCAtNDE4NCw3ICszMzU3LDYgQEAKIAogCUFTU0VSVChmcmVlX2NtZHEtPmhlYWQgPT0gTlVMTCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKGRvbmVfY21kcS0+aGVhZCkpOwogCiAJZnJlZV9jbWRxLT5oZWFkID0gZG9uZV9jbWRxLT5oZWFkOwogCWZyZWVfY21kcS0+Y291bnQgPSBkb25lX2NtZHEtPmNvdW50OwpAQCAtNDIwMSw5ICszMzczLDcgQEAKIAogCXNwaW5fbG9jaygmY21kcS0+bG9jay5sb2NrKTsKIAljbWQtPmJ1c3kgPSAwOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKGNtZHEtPmhlYWQpKTsKIAljbWQtPm5leHQgPSBjbWRxLT5oZWFkOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKGNtZCkpOwogCWNtZHEtPmhlYWQgPSBjbWQ7CiAJY21kcS0+Y291bnQrKzsKIAlpZiAoKGFkYXB0ZXItPnhtaXRxX2Z1bGwpICYmIChjbWRxLT5jb3VudCA+IDEwKSkKQEAgLTQyMTYsNyArMzM4Niw2IEBACiAJaW50IGksIGNvdW50OwogCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwogCi0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKIAlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CiAJcmN2cS0+dGFpbCA9IE5VTEw7CiAJcmN2cS0+aGVhZCA9IE5VTEw7CkBAIC00MjMzLDI1ICszNDAyLDYgQEAKIAkJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOwogCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKLQotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7Ci0JQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOwotCUFTU0VSVChyY3ZxKTsKLQotCURCR19NU0coInNsaWNvc3M6IE5vdGhpbmcgdG8gZG8uIHJjdnFbJXBdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50WyV4XVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkWyVwXVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsWyVwXVxuIiwKLQkJcmN2cSwgcmN2cS0+Y291bnQsIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwpOwotCi0JREJHX01TRygic2xpY29zczogJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtNDI5MCw4ICszNDQwLDggQEAKIAkJCXNrYiA9IE5VTEw7CiAJCX0KIAl9IGVsc2UgewotCQlEQkdfRVJST1IoIlJjdlEgRW1wdHkhISBhZGFwdGVyWyVwXSByY3ZxWyVwXSBjb3VudFsleF1cbiIsCi0JCQkgIGFkYXB0ZXIsIHJjdnEsIHJjdnEtPmNvdW50KTsKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiUmN2USBFbXB0eSEhIHJjdnFbJXBdIGNvdW50WyV4XVxuIiwgcmN2cSwgcmN2cS0+Y291bnQpOwogCQlza2IgPSBOVUxMOwogCX0KIAl3aGlsZSAocmN2cS0+Y291bnQgPCBTTElDX1JDVlFfRklMTFRIUkVTSCkgewpAQCAtNDMxMSw2ICszNDYxLDcgQEAKIAl1MzIgcGFkZHJoOwogCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwogCWludCBpID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+bmV0ZGV2LT5kZXY7CiAKIAl3aGlsZSAoaSA8IFNMSUNfUkNWUV9GSUxMRU5UUklFUykgewogCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKQEAgLTQzMzMsNDQgKzM0ODQsNDUgQEAKIAkJCXNrYi0+bmV4dCA9IE5VTEw7CiAjaWZkZWYgS0xVREdFX0ZPUl80R0JfQk9VTkRBUlkKIAkJCWlmIChwYWRkcmwgPT0gMCkgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCAiCi0JCQkJICAgICAic2tiWyVwXSAgIFBST0JMRU1cbiIKLQkJCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHNrYmxlblsleF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkclslcF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkcmxbJXhdXG4iCi0JCQkJICAgICAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgX19mdW5jX18sIHNrYiwKLQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIHBhZGRyLCBwYWRkcmwsCi0JCQkJICAgICBwYWRkcmgpOwotCQkJCURCR19FUlJPUigiICAgICAgICAgcmN2cS0+aGVhZFslcF1cbiIKLQkJCQkJICAiICAgICAgICAgcmN2cS0+dGFpbFslcF1cbiIKLQkJCQkJICAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLAotCQkJCQkgIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwsIHJjdnEtPmNvdW50KTsKLQkJCQlEQkdfRVJST1IoIlNLSVAgVEhJUyBTS0IhISEhISEhIVxuIik7CisJCQkJZGV2X2VycihkZXYsICIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDBcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKGRldiwgInNrYlslcF0gUFJPQkxFTVxuIiwgc2tiKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iLCBza2ItPmRhdGEpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgc2tibGVuWyV4XVxuIiwgc2tiLT5sZW4pOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJbJXBdXG4iLCBwYWRkcik7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkcmxbJXhdXG4iLCBwYWRkcmwpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgcGFkZHJoKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iLCByY3ZxLT5oZWFkKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iLCByY3ZxLT50YWlsKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwgcmN2cS0+Y291bnQpOworCQkJCWRldl9lcnIoZGV2LCAiU0tJUCBUSElTIFNLQiEhISEhISEhXG4iKTsKIAkJCQlnb3RvIHJldHJ5X3JjdnFmaWxsOwogCQkJfQogI2Vsc2UKIAkJCWlmIChwYWRkcmwgPT0gMCkgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIlxuXG4lczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDAgIgotCQkJCSAgICAgInNrYlslcF0gIEdJVkUgVE8gQ0FSRCBBTllXQVlcbiIKLQkJCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRyWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRybFsleF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBfX2Z1bmNfXywgc2tiLAotCQkJCSAgICAgc2tiLT5kYXRhLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOworCQkJCWRldl9lcnIoZGV2LCAiJXM6IExPVyAzMmJpdHMgUEhZU0lDQUwgQUREUkVTUyA9PSAwXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJZGV2X2VycihkZXYsICJza2JbJXBdIFBST0JMRU1cbiIsIHNrYik7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBza2JkYXRhWyVwXVxuIiwgc2tiLT5kYXRhKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmxlblsleF1cbiIsIHNrYi0+bGVuKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyWyVwXVxuIiwgcGFkZHIpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJsWyV4XVxuIiwgcGFkZHJsKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIHBhZGRyaCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5oZWFkWyVwXVxuIiwgcmN2cS0+aGVhZCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIiwgcmN2cS0+dGFpbCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsIHJjdnEtPmNvdW50KTsKKwkJCQlkZXZfZXJyKGRldiwgIkdJVkUgVE8gQ0FSRCBBTllXQVlcbiIpOwogCQkJfQogI2VuZGlmCiAJCQlpZiAocGFkZHJoID09IDApIHsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsCi0JCQkJCSAgKHUzMikgcGFkZHJsLCBET05UX0ZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwKKwkJCQkJCSAodTMyKXBhZGRybCwgRE9OVF9GTFVTSCk7CiAJCQl9IGVsc2UgewotCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhcjY0LAotCQkJCQkgICAgKHUzMikgcGFkZHJsLAotCQkJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJCSAgICAodTMyKSBwYWRkcmgsIERPTlRfRkxVU0gpOworCQkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwKKwkJCQkJJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCisJCQkJCXBhZGRybCwKKwkJCQkJJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQlwYWRkcmgsIERPTlRfRkxVU0gpOwogCQkJfQogCQkJaWYgKHJjdnEtPmhlYWQpCiAJCQkJcmN2cS0+dGFpbC0+bmV4dCA9IHNrYjsKQEAgLTQzODAsMTAgKzM1MzIsOSBAQAogCQkJcmN2cS0+Y291bnQrKzsKIAkJCWkrKzsKIAkJfSBlbHNlIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiJXMgc2xpY19yY3ZxdWV1ZV9maWxsIGNvdWxkIG9ubHkgZ2V0IFslZF0gIgotCQkJICAgICAic2tidWZmc1xuIiwKLQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJzbGljX3JjdnF1ZXVlX2ZpbGwgY291bGQgb25seSBnZXQgWyVkXSBza2J1ZmZzXG4iLAorCQkJCWkpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC00Mzk3LDYgKzM1NDgsNyBAQAogCXUzMiBwYWRkcmw7CiAJdTMyIHBhZGRyaDsKIAlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJc3RydWN0IGRldmljZSAqZGV2OwogCiAJQVNTRVJUKHNrYi0+bGVuID09IFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKIApAQCAtNDQwOSwyNiArMzU2MSwyNiBAQAogCXBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwYWRkcik7CiAKIAlpZiAocGFkZHJsID09IDApIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCBza2JbJXBdICAgUFJPQkxFTVxuIgotCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIiAiICAgICAgICAgc2tibGVuWyV4XVxuIgotCQkgICAgICIgICAgICAgICBwYWRkclslcF1cbiIgIiAgICAgICAgIHBhZGRybFsleF1cbiIKLQkJICAgICAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgX19mdW5jX18sIHNrYiwgc2tiLT5kYXRhLAotCQkgICAgIHNrYi0+bGVuLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOwotCQlEQkdfRVJST1IoIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iCi0JCQkgICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIgotCQkJICAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLCByY3ZxLT5oZWFkLCByY3ZxLT50YWlsLAotCQkJICByY3ZxLT5jb3VudCk7CisJCWRldiA9ICZhZGFwdGVyLT5uZXRkZXYtPmRldjsKKwkJZGV2X2VycihkZXYsICIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDBcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoZGV2LCAic2tiWyVwXSBQUk9CTEVNXG4iLCBza2IpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iLCBza2ItPmRhdGEpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmxlblsleF1cbiIsIHNrYi0+bGVuKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkclslcF1cbiIsIHBhZGRyKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkcmxbJXhdXG4iLCBwYWRkcmwpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIHBhZGRyaCk7CisJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcmN2cS0+aGVhZFslcF1cbiIsIHJjdnEtPmhlYWQpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iLCByY3ZxLT50YWlsKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsIHJjdnEtPmNvdW50KTsKIAl9CiAJaWYgKHBhZGRyaCA9PSAwKSB7Ci0JCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwgKHUzMikgcGFkZHJsLAotCQkJICBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsICh1MzIpcGFkZHJsLAorCQkJCSBET05UX0ZMVVNIKTsKIAl9IGVsc2UgewotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCi0JCQkgICAgcGFkZHJsLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJICAgIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCisJCQkJIHBhZGRybCwgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSBwYWRkcmgsIERPTlRfRkxVU0gpOwogCX0KIAlpZiAocmN2cS0+aGVhZCkKIAkJcmN2cS0+dGFpbC0+bmV4dCA9IHNrYjsKQEAgLTQ0NDksNyArMzYwMSw3IEBACiAJdW5zaWduZWQgY2hhciAqb2VtZnJ1ID0gKHVuc2lnbmVkIGNoYXIgKikoJmNhcmQtPmNvbmZpZy5PZW1GcnUpOwogI2VuZGlmCiAKLQlzZXFfcHJpbnRmKHNlcSwgImRyaXZlcl92ZXJzaW9uICAgICAgICAgICA6ICVzIiwgc2xpY19wcm9jX3ZlcnNpb24pOworCXNlcV9wcmludGYoc2VxLCAiZHJpdmVyX3ZlcnNpb24gICAgICAgICAgIDogJXNcbiIsIHNsaWNfcHJvY192ZXJzaW9uKTsKIAlzZXFfcHJpbnRmKHNlcSwgIk1pY3JvY29kZSB2ZXJzaW9uczogICAgICAgICAgIFxuIik7CiAJc2VxX3ByaW50ZihzZXEsICIgICAgR2lnYWJpdCAoZ2IpICAgICAgICAgOiAlcyAlc1xuIiwKIAkJICAgIE1PSkFWRV9VQ09ERV9WRVJTX1NUUklORywgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSk7CkBAIC00ODgyLDEwMzAgKzQwMzQsNiBAQAogCX0KIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gRHVtcCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotdm9pZCAqc2xpY19kdW1wX2hhbmRsZTsJCS8qIHRocmVhZCBoYW5kbGUgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKLSAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KLSAqLwotc3RhdGljIGludCBzbGljX2R1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqU0xJQ2hhbmRsZSwgdTMyIGZpbGVfb2Zmc2V0KQotewotCWlmIChTTElDaGFuZGxlLT5mX3BvcyAhPSBmaWxlX29mZnNldCkgewotCQkvKkRCR19NU0coInNsaWNfZHVtcF9zZWVrICBub3cgbmVlZGVkIFsleCA6ICV4XVxuIiwKLQkJCSh1MzIpU0xJQ2hhbmRsZS0+Zl9wb3MsICh1MzIpZmlsZV9vZmZzZXQpOyAqLwotCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+bGxzZWVrKSB7Ci0JCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+Ci0JCQkgICAgbGxzZWVrKFNMSUNoYW5kbGUsIGZpbGVfb2Zmc2V0LCAwKSAhPSBmaWxlX29mZnNldCkKLQkJCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCVNMSUNoYW5kbGUtPmZfcG9zID0gZmlsZV9vZmZzZXQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19kdW1wX3dyaXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKLQkJCSAgIGNvbnN0IHZvaWQgKmFkZHIsIGludCBzaXplLCB1MzIgZmlsZV9vZmZzZXQpCi17Ci0JaW50IHIgPSAxOwotCXUzMiByZXN1bHQgPSAwOwotCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gY2FyZC0+ZHVtcGhhbmRsZTsKLQotI2lmZGVmIEhJU1RPUklDQUwJCS8qIGxlZ2FjeSAqLwotCWRvd24oJlNMSUNoYW5kbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7Ci0jZW5kaWYKLQlpZiAoc2l6ZSkgewotCQlzbGljX2R1bXBfc2VlayhTTElDaGFuZGxlLCBmaWxlX29mZnNldCk7Ci0KLQkJcmVzdWx0ID0KLQkJICAgIFNMSUNoYW5kbGUtPmZfb3AtPndyaXRlKFNMSUNoYW5kbGUsIGFkZHIsIHNpemUsCi0JCQkJCSAgICAmU0xJQ2hhbmRsZS0+Zl9wb3MpOwotCi0JCXIgPSByZXN1bHQgPT0gc2l6ZTsKLQl9Ci0KLQljYXJkLT5kdW1wdGltZV9jb21wbGV0ZSA9IGppZmZpZXM7Ci0JY2FyZC0+ZHVtcHRpbWVfZGVsdGEgPSBjYXJkLT5kdW1wdGltZV9jb21wbGV0ZSAtIGNhcmQtPmR1bXB0aW1lX3N0YXJ0OwotCWNhcmQtPmR1bXB0aW1lX3N0YXJ0ID0gamlmZmllczsKLQotI2lmZGVmIEhJU1RPUklDQUwKLQl1cCgmU0xJQ2hhbmRsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKLSNlbmRpZgotCWlmICghcikgewotCQlEQkdfRVJST1IoIiVzOiBhZGRyWyVwXSBzaXplWyV4XSByZXN1bHRbJXhdIGZpbGVfb2Zmc2V0WyV4XVxuIiwKLQkJCSAgX19mdW5jX18sIGFkZHIsIHNpemUsIHJlc3VsdCwgZmlsZV9vZmZzZXQpOwotCX0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHVpbnQgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKLXsKLQljYXJkLT5kdW1wX3Rhc2tfaWQgPSBrdGhyZWFkX3J1bihzbGljX2R1bXBfdGhyZWFkLCAodm9pZCAqKWNhcmQsIDApOwotCi0vKiAgREJHX01TRygiY3JlYXRlIHNsaWNfZHVtcF90aHJlYWQgZHVtcF9waWRbJXhdXG4iLCBjYXJkLT5kdW1wX3BpZCk7ICovCi0JaWYgKElTX0VSUihjYXJkLT5kdW1wX3Rhc2tfaWQpKSB7Ci0JCURCR19NU0coImNyZWF0ZSBzbGljX2R1bXBfdGhyZWFkIEZBSUxFRCBcbiIpOwotCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY29udGV4dDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgYWRhcHRlciAqZHVtcF9hZGFwdGVyID0gTlVMTDsKLQl1MzIgZHVtcF9jb21wbGV0ZSA9IDA7Ci0JdTMyIGRlbGF5ID0gU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOwotCXN0cnVjdCBzbGljX3JlZ3MgKnByZWdzOwotCXUzMiBpOwotCXN0cnVjdCBzbGljX3VwciAqdXByLCAqdXBybmV4dDsKLQl1MzIgZHVtcF9jYXJkOwotCi0JQVNTRVJUKGNhcmQpOwotCi0JY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMTsKLQotI2lmZGVmIEhJU1RPUklDQUwKLQlsb2NrX2tlcm5lbCgpOwotCS8qCi0JICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKLQkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzCi0JICovCi0JZXhpdF9maWxlcyhjdXJyZW50KTsJLyogZGFlbW9uaXplIGRvZXNuJ3QgZG8gZXhpdF9maWxlcyAqLwotCWN1cnJlbnQtPmZpbGVzID0gaW5pdF90YXNrLmZpbGVzOwotCWF0b21pY19pbmMoJmN1cnJlbnQtPmZpbGVzLT5jb3VudCk7Ci0jZW5kaWYKLQotCWRhZW1vbml6ZSgiJXMiLCAic2xpY21vbiIpOwotCi0JLyogU2V0dXAgYSBuaWNlIG5hbWUgKi8KLQlzdHJjcHkoY3VycmVudC0+Y29tbSwgInNsaWNtb24iKTsKLQlEQkdfRVJST1IKLQkgICAgKCJzbGljX2R1bXBfdGhyZWFkW3NsaWNtb25dIGRhZW1vbiBpcyBhbGl2ZSBjYXJkWyVwXSBwaWRbJXhdXG4iLAotCSAgICAgY2FyZCwgY2FyZC0+ZHVtcF90YXNrX2lkLT5waWQpOwotCi0JLyoKLQkgKiAgICBTZW5kIG1lIGEgc2lnbmFsIHRvIGdldCBtZSB0byBkaWUgKGZvciBkZWJ1Z2dpbmcpCi0JICovCi0JZG8gewotCQkvKgotCQkgKiBJZiBjYXJkIHN0YXRlIGlzIG5vdCBzZXQgdG8gdXAsIHNraXAKLQkJICovCi0JCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSB7Ci0JCQlpZiAoY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQotCQkJCWdvdG8gd2FpdDsKLQkJCWVsc2UKLQkJCQlnb3RvIGVuZF90aHJlYWQ7Ci0JCX0KLQkJLyoKLQkJICogICAgQ2hlY2sgdGhlIHJlc3VsdHMgb2Ygb3VyIGxhc3QgcGluZy4KLQkJICovCi0JCWR1bXBfY2FyZCA9IDA7Ci0jaWZkZWYgU0xJQ19GQUlMVVJFX0RVTVAKLQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7Ci0JCQlEQkdfTVNHCi0JCQkgICAgKCJcbltzbGljbW9uXSAgQ0FSRCAjJWQgVElNRUQgT1VUIC0gc3RhdHVzICIKLQkJCSAgICAgIiV4OiBEVU1QIFRIRSBDQVJEIVxuIiwKLQkJCSAgICAgY2FyZC0+Y2FyZG51bSwgY2FyZC0+cGluZ3N0YXR1cyk7Ci0JCQlkdW1wX2NhcmQgPSAxOwotCQl9Ci0jZWxzZQotCQkvKgotCQkgKiAgQ2F1c2UgYSBjYXJkIFJFU0VUIGluc3RlYWQ/Ci0JCSAqLwotCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKLQkJCS8qIHRvZG8uIGRvIHdlIHdhbnQgdG8gcmVzZXQgdGhlIGNhcmQgaW4gcHJvZHVjdGlvbiAqLwotCQkJLyogREJHX01TRygiXG5bc2xpY21vbl0gIENBUkQgIyVkIFRJTUVEIE9VVCAtICIKLQkJCSAgIHN0YXR1cyAleDogUkVTRVQgVEhFIENBUkQhXG4iLCBjYXJkLT5jYXJkbnVtLAotCQkJICAgY2FyZC0+cGluZ3N0YXR1cyk7ICovCi0JCQlEQkdfRVJST1IKLQkJCSAgICAoIlxuW3NsaWNtb25dICBDQVJEICMlZCBUSU1FRCBPVVQgLSBzdGF0dXMgJXg6ICIKLQkJCSAgICAgIkRVTVAgVEhFIENBUkQhXG4iLAotCQkJICAgICBjYXJkLT5jYXJkbnVtLCBjYXJkLT5waW5nc3RhdHVzKTsKLQkJCWR1bXBfY2FyZCA9IDE7Ci0JCX0KLSNlbmRpZgotCQlpZiAoKGR1bXBfY2FyZCkKLQkJICAgIHx8IChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSkgewotCQkJaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpIHsKLQkJCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkIFJlcXVlc3RlZDogQ2FyZCAleFxuIiwKLQkJCQkgICAgIGNhcmQtPmNhcmRudW0pOwotCQkJfQotCQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7Ci0JCQkJdXNob3J0IGNwdWlkID0gMDsKLQkJCQl1c2hvcnQgY3Jhc2hwYyA9IDA7Ci0KLQkJCQlpZiAoY2FyZC0+YWRhcHRlclswXSkgewotCQkJCQlpZiAoKGNhcmQtPmFkYXB0ZXJbMF0pLT5tZW1vcnlsZW5ndGggPj0KLQkJCQkJICAgIENSQVNIX0lORk9fT0ZGU0VUICsKLQkJCQkJICAgIHNpemVvZihzbGljX2NyYXNoX2luZm8pKSB7Ci0JCQkJCQljaGFyICpjcmFzaHB0cjsKLQkJCQkJCXBfc2xpY19jcmFzaF9pbmZvIGNyYXNoaW5mbzsKLQotCQkJCQkJY3Jhc2hwdHIgPQotCQkJCQkJICAgICgoY2hhciAqKWNhcmQtPmFkYXB0ZXJbMF0tPgotCQkJCQkJICAgICBzbGljX3JlZ3MpICsKLQkJCQkJCSAgICBDUkFTSF9JTkZPX09GRlNFVDsKLQkJCQkJCWNyYXNoaW5mbyA9Ci0JCQkJCQkgICAgKHBfc2xpY19jcmFzaF9pbmZvKQotCQkJCQkJICAgIGNyYXNocHRyOwotCQkJCQkJY3B1aWQgPSBjcmFzaGluZm8tPmNwdV9pZDsKLQkJCQkJCWNyYXNocGMgPSBjcmFzaGluZm8tPmNyYXNoX3BjOwotCQkJCQl9Ci0JCQkJfQotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkOiBDYXJkICV4IGNyYXNoZWQgIgotCQkJCSAgICAgImFuZCBmYWlsZWQgdG8gYW5zd2VyIFBJTkcuICIKLQkJCQkgICAgICJDUFVJRFsleF0gUENbJXhdXG4gIiwKLQkJCQkgICAgIGNhcmQtPmNhcmRudW0sIGNwdWlkLCBjcmFzaHBjKTsKLQkJCX0KLQotCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfSU5fUFJPR1JFU1M7Ci0KLQkJCS8qCi0JCQkgKiBTZXQgdGhlIGNhcmQgc3RhdGUgdG8gRE9XTiBhbmQgdGhlIGFkYXB0ZXIgc3RhdGVzCi0JCQkgKiB0byBSRVNFVC5UaGV5IHdpbGwgY2hlY2sgdGhpcyBpbiBTaW1iYUNoZWNrRm9ySGFuZwotCQkJICogYW5kIGluaXRpYXRlIGludGVyZmFjZSByZXNldCAod2hpY2ggaW4gdHVybiB3aWxsCi0JCQkgKiByZWluaXRpYWxpemUgdGhlIGNhcmQpLgotCQkJICovCi0JCQljYXJkLT5zdGF0ZSA9IENBUkRfRE9XTjsKLQotCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7Ci0JCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07Ci0JCQkJaWYgKGFkYXB0ZXIpIHsKLQkJCQkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOwotCi0JCQkJCWlmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgewotCQkJCQkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9SRVNFVDsKLQkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKLQkJCQkJCURCR19FUlJPUgotCQkJCQkJICAgICgiW3NsaWNtb25dOiBTTElDIENhcmRbJWRdICIKLQkJCQkJCSAgICAgIlBvcnRbJWRdIGFkYXB0ZXJbJXBdICIKLQkJCQkJCSAgICAgImRvd25cbiIsCi0JCQkJCQkgICAgICh1aW50KSBjYXJkLT5jYXJkbnVtLAotCQkJCQkJICAgICAodWludCkgaSwgYWRhcHRlcik7Ci0JCQkJCX0KLSNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECi0JCQkJCS8qIGZyZWUgc3RhdHMgdGltZXIgKi8KLQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRzdGltZXJzZXQpIHsKLQkJCQkJCWFkYXB0ZXItPnN0YXRzdGltZXJzZXQgPSAwOwotCQkJCQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQkJCQkJfQotI2VuZGlmCi0JCQkJfQotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKLQkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKLQkJCQlpZiAoKGFkYXB0ZXIpICYmIChhZGFwdGVyLT5hY3RpdmF0ZWQpKSB7Ci0JCQkJCXByZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotCQkJCQlkdW1wX2FkYXB0ZXIgPSBhZGFwdGVyOwotCi0JCQkJCS8qCi0JCQkJCSAqIElmIHRoZSBkdW1wIHN0YXR1cyBpcyB6ZXJvLCB0aGVuCi0JCQkJCSAqIHRoZSB1dGlsaXR5IHByb2Nlc3NvciBoYXMgY3Jhc2hlZC4KLQkJCQkJICogSWYgdGhpcyBpcyB0aGUgY2FzZSwgYW55IHBlbmRpbmcKLQkJCQkJICogdXRpbGl0eXByb2Nlc3NvciByZXF1ZXN0cyB3aWxsIG5vdAotCQkJCQkgKiBjb21wbGV0ZSBhbmQgb3VyIGR1bXAgY29tbWFuZHMgd2lsbAotCQkJCQkgKiBub3QgYmUgaXNzdWVkLgotCQkJCQkgKgotCQkJCQkgKiBUbyBhdm9pZCB0aGlzIHdlIHdpbGwgY2xlYXIgYW55Ci0JCQkJCSAqIHBlbmRpbmcgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdHMKLQkJCQkJICogbm93LgotCQkJCQkgKi8KLQkJCQkJaWYgKCFjYXJkLT5waW5nc3RhdHVzKSB7Ci0JCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgKLQkJCQkJCSAgICAmYWRhcHRlci0+dXByX2xvY2subG9jaywKLQkJCQkJCSAgICBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7Ci0JCQkJCQl1cHIgPSBhZGFwdGVyLT51cHJfbGlzdDsKLQkJCQkJCXdoaWxlICh1cHIpIHsKLQkJCQkJCQl1cHJuZXh0ID0gdXByLT5uZXh0OwotCQkJCQkJCWtmcmVlKHVwcik7Ci0JCQkJCQkJdXByID0gdXBybmV4dDsKLQkJCQkJCX0KLQkJCQkJCWFkYXB0ZXItPnVwcl9saXN0ID0gMDsKLQkJCQkJCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKLQkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCi0JCQkJCQkgICAgJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCi0JCQkJCQkgICAgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOwotCQkJCQl9Ci0KLQkJCQkJc2xpY19kdW1wX2NhcmQoY2FyZCwgRkFMU0UpOwotCQkJCQlkdW1wX2NvbXBsZXRlID0gMTsKLQkJCQl9Ci0KLQkJCQlpZiAoZHVtcF9jb21wbGV0ZSkgewotCQkJCQlEQkdfRVJST1IoIlNMSUMgRHVtcCBDb21wbGV0ZVxuIik7Ci0JCQkJCS8qICBPbmx5IGR1bXAgdGhlIGNhcmQgb25lIHRpbWUgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoZHVtcF9hZGFwdGVyKSB7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgic2xpYyBkdW1wIGNvbXBsZXRlZC4gIgotCQkJCSAgICAgIlJlZW5hYmxlIGludGVyZmFjZXNcbiIpOwotCQkJCXNsaWNfY2FyZF9pbml0KGNhcmQsIGR1bXBfYWRhcHRlcik7Ci0KLQkJCQkvKgotCQkJCSAqICBSZWVuYWJsZSB0aGUgYWRhcHRlcnMgdGhhdCB3ZXJlIHJlc2V0Ci0JCQkJICovCi0JCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7Ci0JCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOwotCQkJCQlpZiAoYWRhcHRlcikgewotCQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRlID09Ci0JCQkJCQkgICAgQURBUFRfUkVTRVQpIHsKLQkJCQkJCQlEQkdfRVJST1IKLQkJCQkJCQkgICAgKCJzbGljZHVtcDogU0xJQyAiCi0JCQkJCSAgICJDYXJkWyVkXSBQb3J0WyVkXSBhZGFwdGVyWyVwXSAiCi0JCQkJCSAgICJicmluZyBVUFxuIiwKLQkJCQkJCQkgICAgICh1aW50KSBjYXJkLT4KLQkJCQkJCQkgICAgIGNhcmRudW0sICh1aW50KSBpLAotCQkJCQkJCSAgICAgYWRhcHRlcik7Ci0JCQkJCQkJYWRhcHRlci0+c3RhdGUgPQotCQkJCQkJCSAgICBBREFQVF9ET1dOOwotCQkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9Ci0JCQkJCQkJICAgIExJTktfRE9XTjsKLQkJCQkJCQlzbGljX2VudHJ5X29wZW4KLQkJCQkJCQkgICAgKGFkYXB0ZXItPm5ldGRldik7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9ET05FOwotCQkJfQotCQl9IGVsc2UgewotCQkvKiBpZiBwaW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgfHwgZHVtcF9yZXF1ZXN0ZWQuLi5FTFNFCi0JCSAqICAgIFdlIHJlY2VpdmVkIGEgdmFsaWQgcGluZyByZXNwb25zZS4KLQkJICogICAgQ2xlYXIgdGhlIFBpbmdzdGF0dXMgZmllbGQsIGZpbmQgYSB2YWxpZCBhZGFwdGVyCi0JCSAqICAgIHN0cnVjdHVyZSBhbmQgc2VuZCBhbm90aGVyIHBpbmcuCi0JCSAqLwotCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7Ci0JCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07Ci0JCQkJaWYgKGFkYXB0ZXIgJiYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSkgewotCQkJCQljYXJkLT5waW5nc3RhdHVzID0gMDsKLQkJCQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLAotCQkJCQkJCSAwLCAwLCAwLCAwKTsKLQkJCQkJYnJlYWs7CS8qIE9ubHkgaXNzdWUgb25lIHBlciBjYXJkICovCi0JCQkJfQotCQkJfQotCQl9Ci13YWl0OgotCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLCBkZWxheSk7Ci0JfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKLQotZW5kX3RocmVhZDoKLS8qICBEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX3RocmVhZCBjYXJkWyVwXSBwaWRbJXhdIEVORElOR1xuIiwKLSAgICBjYXJkLCBjYXJkLT5kdW1wX3BpZCk7ICovCi0JY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gb3VyIGR1bXAgaW5kZXggZmlsZS4gIFRoaXMKLSAqIHZhbHVlIGlzIHVzZWQgYXMgb3VyIHN1ZmZpeCBmb3Igb3VyIGR1bXAgcGF0aC4gIFRoZQotICogdmFsdWUgaXMgaW5jcmVtZW50ZWQgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgZmlsZQotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpCi17Ci0JdW5zaWduZWQgY2hhciBpbmRleCA9IDA7Ci0jaWZkZWYgU0xJQ19EVU1QX0lOREVYX1NVUFBPUlQKLQl1MzIgc3RhdHVzOwotCXZvaWQgKkZpbGVIYW5kbGU7Ci0JdTMyIG9mZnNldDsKLQotCW9mZnNldCA9IDA7Ci0KLQkvKgotCSAqIE9wZW4gdGhlIGluZGV4IGZpbGUuICBJZiBvbmUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0Ci0JICovCi0Jc3RhdHVzID0gY3JlYXRlX2ZpbGUoJkZpbGVIYW5kbGUpOwotCi0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSAwOwotCi0Jc3RhdHVzID0gcmVhZF9maWxlKEZpbGVIYW5kbGUsICZpbmRleCwgMSwgJm9mZnNldCk7Ci0KLQlpbmRleCsrOwotCi0Jc3RhdHVzID0gd3JpdGVfZmlsZShGaWxlSGFuZGxlLCAmaW5kZXgsIDEsICZvZmZzZXQpOwotCi0JY2xvc2VfZmlsZShGaWxlSGFuZGxlKTsKLSNlbHNlCi0JaW5kZXggPSAwOwotI2VuZGlmCi0JcmV0dXJuIGluZGV4OwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGUgKnNsaWNfZHVtcF9vcGVuX2ZpbGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBOVUxMOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCWNoYXIgU0xJQ2ZpbGVbNTBdOwotCi0JY2FyZC0+ZHVtcGZpbGVfZnMgPSBnZXRfZnMoKTsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCi0JbWVtc2V0KFNMSUNmaWxlLCAwLCBzaXplb2YoU0xJQ2ZpbGUpKTsKLQlzcHJpbnRmKFNMSUNmaWxlLCAiL3Zhci90bXAvc2xpYyVkLWR1bXAtJWQiLCBjYXJkLT5jYXJkbnVtLAotCQkodWludCkgY2FyZC0+ZHVtcF9jb3VudCk7Ci0JY2FyZC0+ZHVtcF9jb3VudCsrOwotCi0JU0xJQ2hhbmRsZSA9Ci0JICAgIGZpbHBfb3BlbihTTElDZmlsZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fU1lOQyB8IE9fTEFSR0VGSUxFLCAwNjY2KTsKLQotCURCR19NU0coIltzbGljbW9uXTogRHVtcCBDYXJkICMlZCB0byBmaWxlOiAlcyBcbiIsIGNhcmQtPmNhcmRudW0sCi0JCVNMSUNmaWxlKTsKLQotLyogIERCR19NU0coIltzbGljbW9uXSBmaWxwX29wZW4gJXMgU0xJQ2hhbmRsZVslcF1cbiIsIFNMSUNmaWxlLCBTTElDaGFuZGxlKTsqLwotCi0JaWYgKElTX0VSUihTTElDaGFuZGxlKSkKLQkJZ290byBlbmRfc2xpY2R1bXA7Ci0KLQlkZW50cnkgPSBTTElDaGFuZGxlLT5mX2RlbnRyeTsKLQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQotLyogIERCR19NU0coIltzbGljbW9uXSBpbm9kZVslcF0gaV9ubGlua1sleF0gaV9tb2RlWyV4XSBpX29wWyVwXSBpX2ZvcFslcF1cbiIKLQkJImZfb3AtPndyaXRlWyVwXVxuIiwKLQkJaW5vZGUsIGlub2RlLT5pX25saW5rLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9vcCwKLQkJaW5vZGUtPmlfZm9wLCBTTElDaGFuZGxlLT5mX29wLT53cml0ZSk7ICovCi0JaWYgKGlub2RlLT5pX25saW5rID4gMSkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsJLyogbXVsdGlwbGUgbGlua3MgLSBkb24ndCBkdW1wICovCi0jaWZkZWYgSElTVE9SSUNBTAotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsKLSNlbmRpZgotCWlmICghaW5vZGUtPmlfb3AgfHwgIWlub2RlLT5pX2ZvcCkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsKLQotCWlmICghU0xJQ2hhbmRsZS0+Zl9vcC0+d3JpdGUpCi0JCWdvdG8gY2xvc2Vfc2xpY2R1bXA7Ci0KLQkvKgotCSAqICBJZiB3ZSBnb3QgaGVyZSB3ZSBoYXZlIFNVQ0NFU1NGVUxMWSBPUEVORUQgdGhlIGR1bXAgZmlsZQotCSAqLwotLyogIERCR19NU0coIm9wZW5lZCAlcyBTTElDaGFuZGxlWyVwXVxuIiwgU0xJQ2ZpbGUsIFNMSUNoYW5kbGUpOyAqLwotCXJldHVybiBTTElDaGFuZGxlOwotCi1jbG9zZV9zbGljZHVtcDoKLQlEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX29wZW5fZmlsZSBmYWlsZWQgY2xvc2UgU0xJQ2hhbmRsZVslcF1cbiIsCi0JCVNMSUNoYW5kbGUpOwotCWZpbHBfY2xvc2UoU0xJQ2hhbmRsZSwgTlVMTCk7Ci0KLWVuZF9zbGljZHVtcDoKLQlzZXRfZnMoY2FyZC0+ZHVtcGZpbGVfZnMpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfZHVtcF9jbG9zZV9maWxlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKLXsKLQotLyogIERCR19NU0coIltzbGljbW9uXSBzbGljX2R1bXBfQ0xPU0VfZmlsZSBjbG9zZSBTTElDaGFuZGxlWyVwXVxuIiwKLSAgIGNhcmQtPmR1bXBoYW5kbGUpOyAqLwotCi0JZmlscF9jbG9zZShjYXJkLT5kdW1waGFuZGxlLCBOVUxMKTsKLQotCXNldF9mcyhjYXJkLT5kdW1wZmlsZV9mcyk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX2NhcmQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBib29sIHJlc3VtZSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKLQl1MzIgc3RhdHVzOwotCXUzMiBxdWV1ZTsKLQl1MzIgbGVuLCBvZmZzZXQ7Ci0JdTMyIHNyYW1fc2l6ZSwgZHJhbV9zaXplLCByZWdzOwotCXN0cnVjdCBzbGljY29yZV9oZHIgY29yZWhkcjsKLQl1MzIgZmlsZV9vZmZzZXQ7Ci0JY2hhciAqbmFtZXN0cjsKLQl1MzIgaTsKLQl1MzIgbWF4X3F1ZXVlcyA9IDA7Ci0JdTMyIHJlc3VsdDsKLQotCWNhcmQtPmR1bXBoYW5kbGUgPSBzbGljX2R1bXBfb3Blbl9maWxlKGNhcmQpOwotCi0JaWYgKGNhcmQtPmR1bXBoYW5kbGUgPT0gTlVMTCkgewotCQlEQkdfTVNHKCJbc2xpY21vbl0gQ2FudCBjcmVhdGUgRHVtcCBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKCFjYXJkLT5kdW1wYnVmZmVyKSB7Ci0JCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBkdW1wXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWlmICghY2FyZC0+Y21kYnVmZmVyKSB7Ci0JCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgY21kIG1lbW9yeSBmb3IgZHVtcFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogV3JpdGUgdGhlIGZpbGUgdmVyc2lvbiB0byB0aGUgY29yZSBoZWFkZXIuCi0JICovCi0JbmFtZXN0ciA9IHNsaWNfcHJvY192ZXJzaW9uOwotCWZvciAoaSA9IDA7IGkgPCAoRFJJVkVSX05BTUVfU0laRSAtIDEpOyBpKyssIG5hbWVzdHIrKykgewotCQlpZiAoIW5hbWVzdHIpCi0JCQlicmVhazsKLQkJY29yZWhkci5kcml2ZXJfdmVyc2lvbltpXSA9ICpuYW1lc3RyOwotCX0KLQljb3JlaGRyLmRyaXZlcl92ZXJzaW9uW2ldID0gMDsKLQotCWZpbGVfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpOwotCi0JLyoKLQkgKiBJc3N1ZSB0aGUgZm9sbG93aW5nIGRlYnVnIGNvbW1hbmRzIHRvIHRoZSBTTElDOgotCSAqICAgICAgICAtIEhhbHQgYm90aCByZWNlaXZlIGFuZCB0cmFuc21pdAotCSAqICAgICAgICAtIER1bXAgcmVjZWl2ZSByZWdpc3RlcnMKLQkgKiAgICAgICAgLSBEdW1wIHRyYW5zbWl0IHJlZ2lzdGVycwotCSAqICAgICAgICAtIER1bXAgc3JhbQotCSAqICAgICAgICAtIER1bXAgZHJhbQotCSAqICAgICAgICAtIER1bXAgcXVldWVzCi0JICovCi0JREJHX01TRygic2xpY0R1bXAgSEFMVCBSZWNlaXZlIFByb2Nlc3NvclxuIik7Ci0JY2FyZC0+ZHVtcHRpbWVfc3RhcnQgPSBqaWZmaWVzOwotCi0Jc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19SRUNFSVZFKTsKLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJDYW50IGhhbHQgcmVjZWl2ZSBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZCBzdGF0dXNbJXhdXG4iLAotCQkgICAgIHN0YXR1cyk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlEQkdfTVNHKCJzbGljRHVtcCBIQUxUIFRyYW5zbWl0IFByb2Nlc3NvclxuIik7Ci0Jc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19UUkFOU01JVCk7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IoIkNhbnQgaGFsdCB0cmFuc21pdCBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBEdW1wIHJlY2VpdmUgcmVncyAqLwotCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19SRUNFSVZFKTsKLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUigiQ2FudCBkdW1wIHJlY2VpdmUgcmVnaXN0ZXJzIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JREJHX01TRygic2xpY0R1bXAgV3JpdGUgUmVjZWl2ZSBSRUdTIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKLQkJKFNMSUNfTlVNX1JFRyAqIDQpLCBmaWxlX29mZnNldCk7Ci0KLQlyZXN1bHQgPQotCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgU0xJQ19OVU1fUkVHICogNCwKLQkJCSAgICBmaWxlX29mZnNldCk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIkNhbnQgd3JpdGUgcmN2IHJlZ2lzdGVycyB0byBkdW1wIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQljb3JlaGRyLlJjdlJlZ09mZiA9IGZpbGVfb2Zmc2V0OwotCWNvcmVoZHIuUmN2UmVnc2l6ZSA9IFNMSUNfTlVNX1JFRyAqIDQ7Ci0JZmlsZV9vZmZzZXQgKz0gU0xJQ19OVU1fUkVHICogNDsKLQotCS8qIER1bXAgdHJhbnNtaXQgcmVncyAqLwotCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19UUkFOU01JVCk7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IoIkNhbnQgZHVtcCB0cmFuc21pdCByZWdpc3RlcnMgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBYTUlUIFJFR1MgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAotCQkoU0xJQ19OVU1fUkVHICogNCksIGZpbGVfb2Zmc2V0KTsKLQotCXJlc3VsdCA9Ci0JICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBTTElDX05VTV9SRUcgKiA0LAotCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQlpZiAoIXJlc3VsdCkgewotCQlEQkdfRVJST1IKLQkJICAgICgiQ2FudCB3cml0ZSB4bXQgcmVnaXN0ZXJzIHRvIGR1bXAgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWNvcmVoZHIuWG10UmVnT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5YbXRSZWdzaXplID0gU0xJQ19OVU1fUkVHICogNDsKLQlmaWxlX29mZnNldCArPSBTTElDX05VTV9SRUcgKiA0OwotCi0JcmVncyA9IFNMSUNfR0JNQVhfUkVHOwotCi0JY29yZWhkci5GaWxlUmVnT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5GaWxlUmVnc2l6ZSA9IHJlZ3MgKiA0OwotCi0JZm9yIChvZmZzZXQgPSAwOyByZWdzOykgewotCQlsZW4gPSBNSU4ocmVncywgMTYpOwkvKiBDYW4gb25seSB4ZnIgMTYgcmVncyBhdCBhIHRpbWUgKi8KLQotCQlzdGF0dXMgPSBzbGljX2R1bXBfZGF0YShjYXJkLCBvZmZzZXQsICh1c2hvcnQpIGxlbiwgREVTQ19SRklMRSk7Ci0KLQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJREJHX0VSUk9SKCJDYW50IGR1bXAgcmVnaXN0ZXIgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCURCR19NU0coInNsaWNEdW1wIFdyaXRlIFJlZ2lzdGVyRmlsZSBsZW5bJXhdIG9mZnNldFsleF1cbiIsCi0JCQkobGVuICogNCksIGZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiAqIDQsCi0JCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQkJaWYgKCFyZXN1bHQpIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiQ2FudCB3cml0ZSByZWdpc3RlciBmaWxlIHRvIGR1bXAgZmlsZSAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWZpbGVfb2Zmc2V0ICs9IGxlbiAqIDQ7Ci0JCW9mZnNldCArPSBsZW47Ci0JCXJlZ3MgLT0gbGVuOwotCX0KLQotCWRyYW1fc2l6ZSA9IGNhcmQtPmNvbmZpZy5EcmFtU2l6ZSAqIDB4MTAwMDA7Ci0KLQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7Ci0JY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0JCXNyYW1fc2l6ZSA9IFNMSUNfU1JBTV9TSVpFMkdCOwotCQlicmVhazsKLQljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKLQkJc3JhbV9zaXplID0gU0xJQ19TUkFNX1NJWkUxR0I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNyYW1fc2l6ZSA9IDA7Ci0JCUFTU0VSVCgwKTsKLQkJYnJlYWs7Ci0JfQotCi0JY29yZWhkci5TcmFtT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5TcmFtc2l6ZSA9IHNyYW1fc2l6ZTsKLQotCWZvciAob2Zmc2V0ID0gMDsgc3JhbV9zaXplOykgewotCQlsZW4gPSBNSU4oc3JhbV9zaXplLCBEVU1QX0JVRl9TSVpFKTsKLQkJc3RhdHVzID0gc2xpY19kdW1wX2RhdGEoY2FyZCwgb2Zmc2V0LCAodXNob3J0KSBsZW4sIERFU0NfU1JBTSk7Ci0JCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiW3NsaWNtb25dIENhbnQgZHVtcCBTUkFNIGF0IG9mZnNldCAleCAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iLCAodWludCkgb2Zmc2V0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCURCR19NU0coIltzbGljbW9uXSBzbGljRHVtcCBXcml0ZSBTUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsCi0JCQlsZW4sIGZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBTUkFNIHRvIGR1bXAgZmlsZSAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWZpbGVfb2Zmc2V0ICs9IGxlbjsKLQkJb2Zmc2V0ICs9IGxlbjsKLQkJc3JhbV9zaXplIC09IGxlbjsKLQl9Ci0KLQljb3JlaGRyLkRyYW1PZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLkRyYW1zaXplID0gZHJhbV9zaXplOwotCi0JZm9yIChvZmZzZXQgPSAwOyBkcmFtX3NpemU7KSB7Ci0JCWxlbiA9IE1JTihkcmFtX3NpemUsIERVTVBfQlVGX1NJWkUpOwotCi0JCXN0YXR1cyA9IHNsaWNfZHVtcF9kYXRhKGNhcmQsIG9mZnNldCwgKHVzaG9ydCkgbGVuLCBERVNDX0RSQU0pOwotCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXSBDYW50IGR1bXAgZHJhbSBhdCBvZmZzZXQgJXggLSAiCi0JCQkgICAgICJkdW1wIGZhaWxlZFxuIiwgKHVpbnQpIG9mZnNldCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBEUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsIGxlbiwKLQkJCWZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBEUkFNIHRvIGR1bXAgZmlsZSAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWZpbGVfb2Zmc2V0ICs9IGxlbjsKLQkJb2Zmc2V0ICs9IGxlbjsKLQkJZHJhbV9zaXplIC09IGxlbjsKLQl9Ci0KLQltYXhfcXVldWVzID0gU0xJQ19NQVhfUVVFVUU7Ci0KLQlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBtYXhfcXVldWVzOyBxdWV1ZSsrKSB7Ci0JCXUzMiAqcWFycmF5ID0gKHUzMiAqKSBjYXJkLT5kdW1wYnVmZmVyOwotCQl1MzIgcWFycmF5X3BoeXNsID0gY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbDsKLQkJdTMyIHFhcnJheV9waHlzaCA9IGNhcmQtPmR1bXBidWZmZXJfcGh5c2g7Ci0JCXUzMiBxc3RhcnQ7Ci0JCXUzMiBxZGVsdGE7Ci0JCXUzMiBxdG90YWwgPSAwOwotCi0JCURCR19NU0coIltzbGljbW9uXSBTdGFydCBEdW1wIG9mIFFVRVVFICMweCV4XG4iLCAodWludCkgcXVldWUpOwotCi0JCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgKERVTVBfQlVGX1NJWkUgPj4gMik7IG9mZnNldCsrKSB7Ci0JCQlxc3RhcnQgPSBqaWZmaWVzOwotCQkJcWRlbHRhID0gMDsKLQotCQkJc3RhdHVzID0gc2xpY19kdW1wX3F1ZXVlKGNhcmQsCi0JCQkJCQkgcWFycmF5X3BoeXNsLAotCQkJCQkJIHFhcnJheV9waHlzaCwgcXVldWUpOwotCQkJcWFycmF5X3BoeXNsICs9IDQ7Ci0KLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7Ci0JCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKLQkJCQlxdG90YWwgKz0gcWRlbHRhOwotCQkJfQotCQl9Ci0KLQkJaWYgKG9mZnNldCkKLQkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKLQkJZWxzZQotCQkJcWRlbHRhID0gMDsKLQotLyogICAgICAgIERCR19NU0coIiAgIHNsaWNEdW1wIFdyaXRlIFFVRVVFICMweCV4IGxlblsleF0gb2Zmc2V0WyV4XSAiCi0JCSJhdmdqaWZmc1sleF1cbiIsIHF1ZXVlLCAob2Zmc2V0KjQpLCBmaWxlX29mZnNldCwgcWRlbHRhKTsgKi8KLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIG9mZnNldCAqIDQsCi0JCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBRVUVVRVMgdG8gZHVtcCBmaWxlIC0gIgotCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJY29yZWhkci5xdWV1ZXNbcXVldWVdLnF1ZXVlT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JCWNvcmVoZHIucXVldWVzW3F1ZXVlXS5xdWV1ZXNpemUgPSBvZmZzZXQgKiA0OwotCQlmaWxlX29mZnNldCArPSBvZmZzZXQgKiA0OwotCi0vKiAgICAgIERCR19NU0coIiAgICBSZWxvYWQgUVVFVUUgIzB4JXggZWxlbWVudHNbJXhdXG4iLCAodWludClxdWV1ZSwgb2Zmc2V0KTsqLwotCQkvKgotCQkgKiBGaWxsIHRoZSBxdWV1ZSBiYWNrIHVwCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKLQkJCXFzdGFydCA9IGppZmZpZXM7Ci0JCQlxZGVsdGEgPSAwOwotCi0JCQlzdGF0dXMgPSBzbGljX2R1bXBfbG9hZF9xdWV1ZShjYXJkLCBxYXJyYXlbaV0sIHF1ZXVlKTsKLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7Ci0JCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKLQkJCQlxdG90YWwgKz0gcWRlbHRhOwotCQkJfQotCQl9Ci0KLQkJaWYgKG9mZnNldCkKLQkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKLQkJZWxzZQotCQkJcWRlbHRhID0gMDsKLQotLyogICAgICBEQkdfTVNHKCIgICBSZWxvYWQgRE9ORSBhdmdqaWZmc1sleF1cbiIsIHFkZWx0YSk7ICovCi0KLQkJcmVzdW1lID0gMTsKLQl9Ci0KLQlsZW4gPSBTTElDX0dCX0NBTUFCX1NaRSAqIDQ7Ci0Jc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0EpOwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKLQlpZiAocmVzdWx0KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0EgZGF0YSB0byBkdW1wIGZpbGUgLSAiCi0JCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQljb3JlaGRyLkNhbUFNT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5DYW1BU2l6ZSA9IGxlbjsKLQlmaWxlX29mZnNldCArPSBsZW47Ci0KLQlsZW4gPSBTTElDX0dCX0NBTUNEX1NaRSAqIDQ7Ci0Jc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0MpOwotCWlmIChzdGF0dXMpIHsKLQkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQyAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKLQlpZiAocmVzdWx0KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0MgZGF0YSB0byBkdW1wIGZpbGUgLSAiCi0JCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQljb3JlaGRyLkNhbUNNT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5DYW1DU2l6ZSA9IGxlbjsKLQlmaWxlX29mZnNldCArPSBsZW47Ci0KLWRvbmU6Ci0JLyoKLQkgKiBXcml0ZSBvdXQgdGhlIGNvcmUgaGVhZGVyCi0JICovCi0JZmlsZV9vZmZzZXQgPSAwOwotCURCR19NU0coIltzbGljbW9uXSBXcml0ZSBDb3JlSGVhZGVyIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKLQkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSwgZmlsZV9vZmZzZXQpOwotCi0JcmVzdWx0ID0KLQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsICZjb3JlaGRyLCBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkciksCi0JCQkgICAgZmlsZV9vZmZzZXQpOwotCURCR19NU0coIltzbGljbW9uXSBjb3JlaGRyICB4b2ZmWyV4XSB4c3pbJXhdXG4iCi0JCSIgICAgcm9mZlsleF0gcnN6WyV4XSBmaWxlb2ZmWyV4XSBmaWxlc3pbJXhdXG4iCi0JCSIgICAgc3JhbW9mZlsleF0gc3JhbXN6WyV4XSwgZHJhbW9mZlsleF0gZHJhbXN6WyV4XVxuIgotCQkiICAgIGNvcmVoZHJfb2Zmc2V0WyV4XVxuIiwgY29yZWhkci5YbXRSZWdPZmYsCi0JCWNvcmVoZHIuWG10UmVnc2l6ZSwgY29yZWhkci5SY3ZSZWdPZmYsIGNvcmVoZHIuUmN2UmVnc2l6ZSwKLQkJY29yZWhkci5GaWxlUmVnT2ZmLCBjb3JlaGRyLkZpbGVSZWdzaXplLCBjb3JlaGRyLlNyYW1PZmYsCi0JCWNvcmVoZHIuU3JhbXNpemUsIGNvcmVoZHIuRHJhbU9mZiwgY29yZWhkci5EcmFtc2l6ZSwKLQkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSk7Ci0JZm9yIChpID0gMDsgaSA8IG1heF9xdWV1ZXM7IGkrKykgewotCQlEQkdfTVNHKCJbc2xpY21vbl0gIFFVRVVFIDB4JXggIG9mZnNldFsleF0gc2l6ZVsleF1cbiIsCi0JCQkodWludCkgaSwgY29yZWhkci5xdWV1ZXNbaV0ucXVldWVPZmYsCi0JCQljb3JlaGRyLnF1ZXVlc1tpXS5xdWV1ZXNpemUpOwotCi0JfQotCi0Jc2xpY19kdW1wX2Nsb3NlX2ZpbGUoY2FyZCk7Ci0KLQlpZiAocmVzdW1lKSB7Ci0JCURCR19NU0coInNsaWNEdW1wIFJFU1RBUlQgUkVDRUlWRSBhbmQgWE1JVCBQUk9DRVNTT1JTXG5cbiIpOwotCQlzbGljX2R1bXBfcmVzdW1lKGNhcmQsIFBST0NfUkVDRUlWRSk7Ci0JCXNsaWNfZHVtcF9yZXN1bWUoY2FyZCwgUFJPQ19UUkFOU01JVCk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfaGFsdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKLXsKLQl1bnNpZ25lZCBjaGFyICpjbWQgPSBjYXJkLT5jbWRidWZmZXI7Ci0KLQkqY21kID0gQ09NTUFORF9CWVRFKENNRF9IQUxULCAwLCBwcm9jKTsKLQotCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLCAwLCAwKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcmVzdW1lKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKQotewotCXVuc2lnbmVkIGNoYXIgKmNtZCA9IGNhcmQtPmNtZGJ1ZmZlcjsKLQotCSpjbWQgPSBDT01NQU5EX0JZVEUoQ01EX1JVTiwgMCwgcHJvYyk7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX3JlZyhzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOwotCi0JZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBwcm9jKTsKLQlkdW1wLT5kZXNjID0gREVTQ19SRUc7Ci0JZHVtcC0+Y291bnQgPSAwOwotCWR1bXAtPmFkZHIgPSAwOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCi0JCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfZGF0YShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCi0JCSAgICAgICB1MzIgYWRkciwgdXNob3J0IGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCi17Ci0Jc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKLQotCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfRFVNUCwgMCwgUFJPQ19SRUNFSVZFKTsKLQlkdW1wLT5kZXNjID0gZGVzYzsKLQlkdW1wLT5jb3VudCA9IGNvdW50OwotCWR1bXAtPmFkZHIgPSBhZGRyOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCi0JCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLAotCQkJdTMyIGFkZHIsIHUzMiBidWZfcGh5c2gsIHUzMiBxdWV1ZSkKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOwotCi0JZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBQUk9DX1JFQ0VJVkUpOwotCWR1bXAtPmRlc2MgPSBERVNDX1FVRVVFOwotCWR1bXAtPmNvdW50ID0gMTsKLQlkdW1wLT5hZGRyID0gcXVldWU7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKLQkJCQkgICBhZGRyLCBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfbG9hZF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBkYXRhLAotCQkJCXUzMiBxdWV1ZSkKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmxvYWQgPSAoc3RydWN0IGR1bXBfY21kICopIGNhcmQtPmNtZGJ1ZmZlcjsKLQotCWxvYWQtPmNtZCA9IENPTU1BTkRfQllURShDTURfTE9BRCwgMCwgUFJPQ19SRUNFSVZFKTsKLQlsb2FkLT5kZXNjID0gREVTQ19RVUVVRTsKLQlsb2FkLT5jb3VudCA9ICh1c2hvcnQpIHF1ZXVlOwotCWxvYWQtPmFkZHIgPSBkYXRhOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsIDAsIDApOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9jYW0oc3RydWN0IHNsaWNjYXJkICpjYXJkLAotCQkgICAgICB1MzIgYWRkciwgdTMyIGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCi17Ci0Jc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKLQotCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfQ0FNX09QUywgMCwgUFJPQ19OT05FKTsKLQlkdW1wLT5kZXNjID0gZGVzYzsKLQlkdW1wLT5jb3VudCA9IGNvdW50OwotCWR1bXAtPmFkZHIgPSAwOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCi0JCQkJICAgYWRkciwgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX3NlbmRfY21kKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKLQkJCSAgIHUzMiBjbWRfcGh5c2wsCi0JCQkgICB1MzIgY21kX3BoeXNoLAotCQkJICAgdTMyIGJ1Zl9waHlzbCwgdTMyIGJ1Zl9waHlzaCkKLXsKLQl1bG9uZyB0aW1lb3V0ID0gU0xJQ19NU19UT19KSUZGSUVTKDUwMCk7CS8qIDUwMCBtc2VjICovCi0JdTMyIGF0dGVtcHRzID0gNTsKLQl1MzIgZGVsYXkgPSBTTElDX01TX1RPX0pJRkZJRVMoMTApOwkvKiAxMCBtc2VjICovCi0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7Ci0KLQlBU1NFUlQoYWRhcHRlcik7Ci0JZG8gewotCQkvKgotCQkgKiBaZXJvIHRoZSBEdW1wc3RhdHVzIGZpZWxkIG9mIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQotCQkgKi8KLQkJY2FyZC0+ZHVtcHN0YXR1cyA9IDA7Ci0JCS8qCi0JCSAqIElzc3VlIHRoZSBkdW1wIGNvbW1hbmQgdmlhIGEgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdC4KLQkJICoKLQkJICogS2x1ZGdlOiBXZSB1c2UgdGhlIEluZm9ybWF0aW9uYnVmZmVyIHBhcmFtZXRlciB0byBob2xkCi0JCSAqIHRoZSBidWZmZXIgYWRkcmVzcwotCQkgKi8KLQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9EVU1QLCBjbWRfcGh5c2wsIGNtZF9waHlzaCwKLQkJCQkgYnVmX3BoeXNsLCBidWZfcGh5c2gpOwotCi0JCXRpbWVvdXQgKz0gamlmZmllczsKLQkJLyoKLQkJICogU3BpbiB1bnRpbCBjb21wbGV0aW9uIG9yIHRpbWVvdXQuCi0JCSAqLwotCQl3aGlsZSAoIWNhcmQtPmR1bXBzdGF0dXMpIHsKLQkJCWludCBudW1fc2xlZXBzID0gMDsKLQotCQkJaWYgKGppZmZpZXMgPiB0aW1lb3V0KSB7Ci0JCQkJLyoKLQkJCQkgKiAgQ29tcGxldGUgdGhlIHRpbWVkLW91dCBEVU1QIFVQUiByZXF1ZXN0LgotCQkJCSAqLwotCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgiJXM6IFRJTUVEIE9VVCBudW1fc2xlZXBzWyV4XSAiCi0JCQkJICAgICAic3RhdHVzWyV4XVxuIiwKLQkJCQkgICAgIF9fZnVuY19fLCBudW1fc2xlZXBzLCBTVEFUVVNfRkFJTFVSRSk7Ci0KLQkJCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JCQl9Ci0JCQludW1fc2xlZXBzKys7Ci0JCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLAotCQkJCQkJCSAgICBkZWxheSk7Ci0JCX0KLQotCQlpZiAoY2FyZC0+ZHVtcHN0YXR1cyAmIElTUl9VUENFUlIpIHsKLQkJCS8qCi0JCQkgKiBFcnJvciAob3IgcXVldWUgZW1wdHkpCi0JCQkgKi8KLS8qICAgICAgICAgIERCR19FUlJPUigiW3NsaWNtb25dICVzOiBEVU1QX1NUQVRVUyAmIElTUl9VUENFUlIgc3RhdHVzWyV4XVxuIiwKLQkJX19mdW5jX18sIFNUQVRVU19GQUlMVVJFKTsgKi8KLQotCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCQl9IGVsc2UgaWYgKGNhcmQtPmR1bXBzdGF0dXMgJiBJU1JfVVBDQlNZKSB7Ci0JCQkvKgotCQkJICogUmV0cnkKLQkJCSAqLwotCQkJREJHX0VSUk9SKCIlczogSVNSX1VQQ0JVU1kgYXR0ZW1wdFsleF1cbiIsIF9fZnVuY19fLAotCQkJCSAgYXR0ZW1wdHMpOwotCi0JCQlhdHRlbXB0cy0tOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIHN1Y2Nlc3MKLQkJCSAqLwotCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQl9Ci0KLQl9IHdoaWxlIChhdHRlbXB0cyk7Ci0KLQlEQkdfRVJST1IoIiVzOiBHQVZFIFVQIEFGVEVSIFNFVkVSQUwgQVRURU1QVFMgc3RhdHVzWyV4XVxuIiwKLQkJICBfX2Z1bmNfXywgU1RBVFVTX0ZBSUxVUkUpOwotCi0JLyoKLQkgKiBHYXZlIHVwIGFmdGVyIHNldmVyYWwgYXR0ZW1wdHMKLQkgKi8KLQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci19Ci0KLSNlbmRpZgotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqICAgTU9EVUxFIElOSVRJQVRJT04gLyBURVJNSU5BVElPTiBGVU5DVElPTlMgICAqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTkxNSw0NiArNDA0MywyNSBAQAogCS5pZF90YWJsZSA9IHNsaWNfcGNpX3RibCwKIAkucHJvYmUgPSBzbGljX2VudHJ5X3Byb2JlLAogCS5yZW1vdmUgPSBzbGljX2VudHJ5X3JlbW92ZSwKLSNpZiBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAotCS5zdXNwZW5kID0gc2xpY3BtX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHNsaWNwbV9yZXN1bWUsCi0jZW5kaWYKLS8qICAgIC5zaHV0ZG93biAgID0gICAgIHNsaWNfc2h1dGRvd24sICBNT09LX0lOVkVTVElHQVRFICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbGljX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaWRldjsKLQlpbnQgcmV0OwotCi0vKiAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGNwdSAlZFxuIiwgX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCi0KIAlzbGljX2luaXRfZHJpdmVyKCk7CiAKIAlpZiAoZGVidWcgPj0gMCAmJiBzbGljX2RlYnVnICE9IGRlYnVnKQotCQlwcmludGsoU0xJQ0xFVkVMICJzbGljb3NzOiBkZWJ1ZyBsZXZlbCBpcyAlZC5cbiIsIGRlYnVnKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjogZGVidWcgbGV2ZWwgaXMgJWQuXG4iLAorCQkgICAgICAgZGVidWcpOwogCWlmIChkZWJ1ZyA+PSAwKQogCQlzbGljX2RlYnVnID0gZGVidWc7CiAKLQlwY2lkZXYgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKilzbGljX2RyaXZlci5pZF90YWJsZTsKLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdIGNwdSAjJWRcbiIsCi0JX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCi0KLQlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbGljX2RyaXZlcik7Ci0KLS8qICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGFmdGVyIGNhbGwgcGNpX21vZHVsZV9pbml0IGppZmZpZXNbJWx4XSAiCi0JICAgICJjcHUgIyVkIHN0YXR1c1sleF1cbiIsX19mdW5jX18sIGppZmZpZXMsCi0JICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgcmV0KTsgKi8KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNsaWNfbW9kdWxlX2NsZWFudXAodm9pZCkKIHsKLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsgKi8KIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKIAlzbGljX2RlYnVnX2NsZWFudXAoKTsKLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOyAqLwogfQogCiBtb2R1bGVfaW5pdChzbGljX21vZHVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorY29uZmlnIFNUTEM0NVhYCisJdHJpc3RhdGUgInN0bGM0NTUwLzQ1NjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgU1BJX01BU1RFUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHN0bGM0NTUwIGFuZCBzdGxjNDU2MCBjaGlwc2V0cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgc3RsYzQ1eHguICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1NUTEM0NVhYKQkrPSBzdGxjNDV4eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlY2VkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwpAQCAtMCwwICsxLDI2MDYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAic3RsYzQ1eHguaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKKworLyoKKyAqIGdwaW9zIHNob3VsZCBiZSBoYW5kbGVkIGluIGJvYXJkIGZpbGVzIGFuZCBwcm92aWRlZCB2aWEgcGxhdGZvcm0gZGF0YSwKKyAqIGJ1dCBiZWNhdXNlIGl0J3MgY3VycmVudGx5IGltcG9zc2libGUgZm9yIHN0bGM0NXh4IHRvIGhhdmUgYSBoZWFkZXIgZmlsZQorICogaW4gaW5jbHVkZS9saW51eCwgbGV0J3MgdXNlIG1vZHVsZSBwYXJhbWF0ZXJzIGZvciBub3cKKyAqLworc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX3Bvd2VyID0gOTc7Cittb2R1bGVfcGFyYW0oc3RsYzQ1eHhfZ3Bpb19wb3dlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBwb3dlciBsaW5lIik7CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfZ3Bpb19pcnEgPSA4NzsKK21vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX2lycSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBncGlvIG51bWJlciBmb3IgaXJxIGxpbmUiKTsKKworc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfY2FsX2NoYW5uZWxzW10gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDA5LAorCTB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwKKwkweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCisJMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LAorCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAorCTB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwKKwkweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKKwkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsCisJMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LAorCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAorCTB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwKKwkweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKKwkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsCisJMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsCisJMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKKwkweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKwkweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAorCTB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywKKwkweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKKwkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsCisJMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsCisJMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLAorCTB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwKKwkweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwKKwkweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKKwkweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsCisJMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsCisJMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LAorCTB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLAorCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKKwkweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAorCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsCisJMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsCisJMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKKwkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLAorCTB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LAorCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLAorCTB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksCisJMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsCisJMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsCisJMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLAorCTB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLAorCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLAorCTB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwKKwkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwKKwkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsCisJMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLAorCTB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLAorCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKKwkweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLAorCTB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwKKwkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCisJMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKKwkweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAorCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDA5LCAweDAwLCAweDAwLAorCTB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LAorCTB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLAorCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAorCTB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwKKwkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKKwkweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsCisJMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk0LCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLAorCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAorCTB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwKKwkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKKwkweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsCisJMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCisJMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwOSwgMHgwMCwKKwkweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLAorCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKwkweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAorCTB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwKKwkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKKwkweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsCisJMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCisJMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LAorCTB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAorCTB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsCisJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwKKwkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKKwkweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksCisJMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCisJMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LAorCTB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAorCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCB9OworCitzdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfcnNzaVtdID0geworCTB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsCisJMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLAorCTB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NjYW4oc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKTsKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSk7CitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IGxlbjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWxlbiA9IFBBR0VfU0laRTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5jYWxfcnNzaSkKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sIDE2LAorCQkJCSAgIDIsIGJ1ZiwgbGVuLCAwKTsKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCWxlbiA9IHN0cmxlbihidWYpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX3Jzc2koc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKGNvdW50ICE9IFJTU0lfQ0FMX0FSUkFZX0xFTikgeworCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfcnNzaSBsZW5ndGg6ICV6dSIsIGNvdW50KTsKKwkJY291bnQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJa2ZyZWUoc3RsYy0+Y2FsX3Jzc2kpOworCisJc3RsYy0+Y2FsX3Jzc2kgPSBrbWVtZHVwKGJ1ZiwgUlNTSV9DQUxfQVJSQVlfTEVOLCBHRlBfS0VSTkVMKTsKKworCWlmICghc3RsYy0+Y2FsX3Jzc2kpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9yc3NpIik7CisJCWNvdW50ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbGVuID0gUEFHRV9TSVpFOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKHN0bGMtPmNhbF9jaGFubmVscykKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9jaGFubmVscywgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAorCQkJCSAgIDE2LCAyLCBidWYsIGxlbiwgMCk7CisKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCWxlbiA9IHN0cmxlbihidWYpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChjb3VudCAhPSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4pIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImludmFsaWQgY2FsX2NoYW5uZWxzIHNpemU6ICV6dSAiLCBjb3VudCk7CisJCWNvdW50ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWtmcmVlKHN0bGMtPmNhbF9jaGFubmVscyk7CisKKwlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGJ1ZiwgY291bnQsIEdGUF9LRVJORUwpOworCisJaWYgKCFzdGxjLT5jYWxfY2hhbm5lbHMpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9jaGFubmVscyIpOworCQljb3VudCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeTsKKwlzc2l6ZV90IGxlbiA9IDA7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjB4JXg6IDB4JXgtMHgleFxuIiwKKwkJCSAgICAgICBlbnRyeS0+aGFuZGxlLCBlbnRyeS0+c3RhcnQsCisJCQkgICAgICAgZW50cnktPmVuZCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY2FsX3Jzc2ksIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpLAorCQkgICBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaSk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2FsX2NoYW5uZWxzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMsCisJCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9jaGFubmVscyk7CitzdGF0aWMgREVWSUNFX0FUVFIodHhfYnVmLCBTX0lSVUdPLCBzdGxjNDV4eF9zeXNmc19zaG93X3R4X2J1ZiwgTlVMTCk7CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV9yZWFkKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKworCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KKwlhZGRyID0gKGFkZHIgPDwgOCkgfCBBRERSX1JFQURfQklUXzE1OworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gMjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS5yeF9idWYgPSBidWY7CisJdFsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOworfQorCisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV93cml0ZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXUxNiBsYXN0X3dvcmQ7CisKKwkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCisJYWRkciA9IGFkZHIgPDwgODsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSAmYWRkcjsKKwl0WzBdLmxlbiA9IDI7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0udHhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlpZiAobGVuICUgMikgeworCQlsYXN0X3dvcmQgPSAoKHU4ICopYnVmKVtsZW4gLSAxXTsKKworCQl0WzJdLnR4X2J1ZiA9ICZsYXN0X3dvcmQ7CisJCXRbMl0ubGVuID0gMjsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKKwl9CisKKwlzcGlfc3luYyhzdGxjLT5zcGksICZtKTsKK30KKworc3RhdGljIHUxNiBzdGxjNDV4eF9yZWFkMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTE2IHZhbDsKKworCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB1MzIgc3RsYzQ1eHhfcmVhZDMyKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUzMiB2YWw7CisKKwlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF93cml0ZTE2KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgdmFsKQoreworCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiB2YWwpCit7CisJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworc3RydWN0IHN0bGM0NXh4X3NwaV9yZWcgeworCXUxNiBhZGRyZXNzOworCXUxNiBsZW5ndGg7CisJY2hhciAqbmFtZTsKK307CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKKwljaGFyICpidWYsICpwb3M7CisJaW50IGJ1Zl9sZW4sIGwsIGNvdW50OworCisJaWYgKCEoREVCVUdfTEVWRUwgJiBERUJVR19UWEJVRkZFUikpCisJCXJldHVybjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOworCisJYnVmX2xlbiA9IDUwMDsKKwlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOworCWlmICghYnVmKQorCQlyZXR1cm47CisKKwlwb3MgPSBidWY7CisJY291bnQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgeworCQlsID0gc25wcmludGYocG9zLCBidWZfbGVuLCAiMHgleC0weCV4LCIsCisJCQkgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7CisJCS8qIGRyb3AgdGhlIG51bGwgYnl0ZSAqLworCQlwb3MgKz0gbDsKKwkJYnVmX2xlbiAtPSBsOworCQljb3VudCsrOworCX0KKworCWlmIChjb3VudCA9PSAwKQorCQkqcG9zID0gJ1wwJzsKKwllbHNlCisJCSotLXBvcyA9ICdcMCc7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBpbiBidWZmZXIgJWQgcmVnaW9uczogJXMiLAorCQkgICAgICAgY291bnQsIGJ1Zik7CisKKwlrZnJlZShidWYpOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKKwlpbnQgcG9zOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlwb3MgPSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVDsKKworCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiB0aGUgZW50cmllcyBpbiB0eGJ1ZmZlciBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXJlIGluCisJICogdGhlIHJlYWwgYnVmZmVyCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgeworCQlpZiAocG9zICsgbGVuIDwgdHhidWZmZXItPnN0YXJ0KQorCQkJYnJlYWs7CisJCXBvcyA9IEFMSUdOKHR4YnVmZmVyLT5lbmQgKyAxLCA0KTsKKwl9CisKKwlpZiAocG9zICsgbGVuID4gRklSTVdBUkVfVFhCVUZGRVJfRU5EKQorCQkvKiBub3QgZW5vdWdoIHJvb20gKi8KKwkJcG9zID0gLTE7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmaW5kICV6dSBCOiAweCV4IiwgbGVuLCBwb3MpOworCitvdXQ6CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAorCQkJCSBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQoreworCXN0cnVjdCB0eGJ1ZmZlciAqciwgKnByZXYgPSBOVUxMOworCisJaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkgeworCQlsaXN0X2FkZCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhidWZmZXIsIHN0cnVjdCB0eGJ1ZmZlciwgYnVmZmVyX2xpc3QpOworCisJaWYgKHR4YnVmZmVyLT5zdGFydCA8IHItPnN0YXJ0KSB7CisJCS8qIGFkZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0ICovCisJCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7CisJCXJldHVybiAwOworCX0KKworCXByZXYgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgeworCQkvKiBza2lwIGZpcnN0IGVudHJ5LCB3ZSBjaGVja2VkIGZvciB0aGF0IGFib3ZlICovCisJCWlmICghcHJldikgeworCQkJcHJldiA9IHI7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGRvdWJsZS1jaGVjayBvdmVybGFwcyAqLworCQlXQVJOX09OX09OQ0UodHhidWZmZXItPnN0YXJ0ID49IHItPnN0YXJ0ICYmCisJCQkgICAgIHR4YnVmZmVyLT5zdGFydCA8PSByLT5lbmQpOworCQlXQVJOX09OX09OQ0UodHhidWZmZXItPmVuZCA+PSByLT5zdGFydCAmJgorCQkJICAgICB0eGJ1ZmZlci0+ZW5kIDw9IHItPmVuZCk7CisKKwkJaWYgKHByZXYtPmVuZCA8IHR4YnVmZmVyLT5zdGFydCAmJgorCQkgICAgdHhidWZmZXItPmVuZCA8IHItPnN0YXJ0KSB7CisJCQkvKiBpbnNlcnQgYXQgdGhpcyBzcG90ICovCisJCQlsaXN0X2FkZF90YWlsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZyLT5idWZmZXJfbGlzdCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXByZXYgPSByOworCX0KKworCS8qIG5vdCBmb3VuZCAqLworCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKKworCXJldHVybiAwOworCit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHN0cnVjdCB0eGJ1ZmZlciAqc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RydWN0IHN0bGM0NXh4ICpzdGxjLAorCQkJCQkJIHNpemVfdCBmcmFtZV9sZW4pCit7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeSA9IE5VTEw7CisJc2l6ZV90IGxlbjsKKwlpbnQgcG9zOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlsZW4gPSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgKyBmcmFtZV9sZW4gKyBGSVJNV0FSRV9UWEJVRkZFUl9UUkFJTEVSOworCXBvcyA9IHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgbGVuKTsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCVdBUk5fT05fT05DRShwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpOworCVdBUk5fT05fT05DRShwb3MgPCBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCk7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOworCWVudHJ5LT5zdGFydCA9IHBvczsKKwllbnRyeS0+ZnJhbWVfc3RhcnQgPSBwb3MgKyBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVI7CisJZW50cnktPmVuZCA9IGVudHJ5LT5zdGFydCArIGxlbiAtIDE7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBhbGxvY2F0ZWQgMHgleC0weCV4IiwKKwkJICAgICAgIGVudHJ5LT5zdGFydCwgZW50cnktPmVuZCk7CisKKwlzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RsYywgZW50cnkpOworCisJc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdGxjKTsKKworCXJldHVybiBlbnRyeTsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCitzdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywKKwkJCQkgICBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQoreworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogZnJlZWQgMHgleC0weCV4IiwKKwkJICAgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7CisKKwlsaXN0X2RlbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0KTsKKwlrZnJlZSh0eGJ1ZmZlcik7Cit9CisKKworc3RhdGljIGludCBzdGxjNDV4eF93YWl0X2JpdChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHUxNiByZWcsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZXhwZWN0ZWQpCit7CisJaW50IGk7CisJY2hhciBidWZmZXJbNF07CisKKwlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIHJlZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICgoKCoodTMyICopYnVmZmVyKSAmIG1hc2spID09IGV4cGVjdGVkKQorCQkJcmV0dXJuIDE7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisKKwkvKiBGSVhNRTogc2hvdWxkIGRyaXZlciB1c2UgaXQncyBvd24gc3RydWN0IGRldmljZT8gKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgIjM4MjYuYXJtIiwgJnN0bGMtPnNwaS0+ZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJyZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZ3LT5zaXplICUgNCkgeworCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzJiaXQ6ICV6dSIsCisJCQkgICAgICAgZnctPnNpemUpOworCQlyZXR1cm4gLUVJTFNFUTsgLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICAqLzsKKwl9CisKKwlpZiAoZnctPnNpemUgPCAxMDAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBpcyB0b28gc21hbGw6ICV6dSIsIGZ3LT5zaXplKTsKKwkJcmV0dXJuIC1FSUxTRVE7CisJfQorCisJc3RsYy0+ZncgPSBrbWVtZHVwKGZ3LT5kYXRhLCBmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGxjLT5mdykgeworCQlzdGxjNDV4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlybXdhcmUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3RsYy0+ZndfbGVuID0gZnctPnNpemU7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHNfZG1hX3JlZ3MgZG1hX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBmd19sZW4sIGZ3X2FkZHI7CisJbG9uZyBfZndfbGVuOworCWludCByZXQ7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXN0bGMtPmZ3KSB7CisJCXJldCA9IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RsYyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzdG9wIHRoZSBkZXZpY2UgKi8KKwlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCisJCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCisJCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAorCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERQorCQkJIHwgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCWZ3X2FkZHIgPSBGSVJNV0FSRV9BRERSRVNTOworCWZ3X2xlbiA9IHN0bGMtPmZ3X2xlbjsKKworCXdoaWxlIChmd19sZW4gPiAwKSB7CisJCV9md19sZW4gPSAoZndfbGVuID4gU1BJX01BWF9QQUNLRVRfU0laRSkKKwkJCT8gU1BJX01BWF9QQUNLRVRfU0laRSA6IGZ3X2xlbjsKKwkJZG1hX3JlZ3MuY21kID0gU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRTsKKwkJZG1hX3JlZ3MubGVuID0gY3B1X3RvX2xlMTYoX2Z3X2xlbik7CisJCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihmd19hZGRyKTsKKworCQlmd19sZW4gLT0gX2Z3X2xlbjsKKwkJZndfYWRkciArPSBfZndfbGVuOworCisJCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsIGRtYV9yZWdzLmNtZCk7CisKKwkJaWYgKHN0bGM0NXh4X3dhaXRfYml0KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAorCQkJCSAgICAgIEhPU1RfQUxMT1dFRCwgSE9TVF9BTExPV0VEKSA9PSAwKSB7CisJCQlzdGxjNDV4eF9lcnJvcigiZndfdXBsb2FkIG5vdCBhbGxvd2VkIHRvIERNQSB3cml0ZSIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9MRU4sIGRtYV9yZWdzLmxlbik7CisJCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsIGRtYV9yZWdzLmFkZHIpOworCisJCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc3RsYy0+ZncsIF9md19sZW4pOworCisJCS8qIEZJWE1FOiBJIHRoaW5rIHRoaXMgZG9lc24ndCB3b3JrIGlmIGZpcm13YXJlIGlzIGxhcmdlLAorCQkgKiB0aGlzIGxvb3AgZ29lcyB0byBzZWNvbmQgcm91bmQuIGZ3LT5kYXRhIGlzIG5vdAorCQkgKiBpbmNyZWFzZWQgYXQgYWxsISAqLworCX0KKworCUJVR19PTihmd19sZW4gIT0gMCk7CisKKwkvKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCisJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVF9FTiwgU1BJX0hPU1RfSU5UU19ERUZBVUxUKTsKKworCS8qIGJvb3QgdGhlIGRldmljZSAqLworCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKKwkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKKwkJCSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKKwkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKTsKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfY2hlY2tfdHhzZW50KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5LCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbiwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmxpZmV0aW1lKSkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlzdGxjNDV4eF93YXJuaW5nKCJmcmFtZSAweCV4IGxpZmV0aW1lIGV4Y2VlZGVkIiwKKwkJCQkJCSBlbnRyeS0+c3RhcnQpOworCQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKKwkJCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKwkJCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOworCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3Bvd2VyX29mZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKKwlncGlvX3NldF92YWx1ZShzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDEpOworCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKKworCS8qCisJICogbmVlZCB0byB3YWl0IGEgd2hpbGUgYmVmb3JlIGRldmljZSBjYW4gYmUgYWNjZXNzZWQsIHRoZSBsZW5ndGgKKwkgKiBpcyBqdXN0IGEgZ3Vlc3MKKwkgKi8KKwltc2xlZXAoMTApOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKKwkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eF9zZW50LAorCQkJCQkgc3RydWN0IHR4YnVmZmVyLCB0eF9saXN0KTsKKwkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKKwkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKKwkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisJfQorCisJV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgeworCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3BlbmRpbmcsCisJCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOworCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOworCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOworCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKKwl9CisKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwKKwkJCQkJICAgICB3b3JrX3Jlc2V0KTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCkKKwkJZ290byBvdXQ7CisKKwlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7CisKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCS8qIHdhaXQgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgZmluaXNoZWQsIHdlIGNhbid0IGhvbGQKKwkgKiBzdGxjLT5tdXRleCB0byBhdm9pZCBkZWFkbG9jayAqLworCWNhbmNlbF93b3JrX3N5bmMoJnN0bGMtPndvcmspOworCisJLyogRklYTUU6IGZpbmQgb3V0IGdvb2QgdmFsdWUgdG8gd2FpdCBmb3IgY2hpcCBwb3dlciBkb3duICovCisJbXNsZWVwKDEwMCk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIGlmIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZAorCSAqIGFmdGVyIHJlLWFjcXVpcmluZyBtdXRleCAqLworCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVTRVQpOworCisJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKwlzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RsYyk7CisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVFRJTkc7CisKKwlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKKwlzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RsYyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfcmVzZXQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0bGM0NXh4X3dhcm5pbmcoInJlc2V0dGluZyBmaXJtd2FyZSIpOworCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVTRVQ7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0bGMtPmh3KTsKKwlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrX3Jlc2V0KTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya190eF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAorCQkJCQkgICAgIHdvcmtfdHhfdGltZW91dC53b3JrKTsKKworCXN0bGM0NXh4X3dhcm5pbmcoInR4IHRpbWVvdXQiKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKKwkJZ290byBvdXQ7CisKKwlzdGxjNDV4eF9yZXNldChzdGxjKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfYWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIHZhbCkKK3sKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0FDSywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd2FrZXVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHM7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiB3YWtlIHRoZSBjaGlwICovCisJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfV0FLRVVQKTsKKworCS8qIEFuZCB3YWl0IGZvciB0aGUgUkVBRFkgaW50ZXJydXB0ICovCisJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKworCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCQlnb3RvIG91dDsKKwkJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCX0KKworCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfc2xlZXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsIFNQSV9UQVJHRVRfSU5UX1NMRUVQKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfaW50X3JlYWR5KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLAorCQkJIFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKKworCXN3aXRjaCAoc3RsYy0+Zndfc3RhdGUpIHsKKwljYXNlIEZXX1NUQVRFX0JPT1RJTkc6CisJCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisJCWNvbXBsZXRlKCZzdGxjLT5md19jb21wKTsKKwkJYnJlYWs7CisJY2FzZSBGV19TVEFURV9SRVNFVFRJTkc6CisJCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisKKwkJc3RsYzQ1eHhfdHhfc2NhbihzdGxjKTsKKwkJc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7CisJCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7CisKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3J4X3R4YWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qgc19sbW9fdHggKnR4OworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJaW50IGZvdW5kID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7CisJdHggPSAoc3RydWN0IHNfbG1vX3R4ICopIChjb250cm9sICsgMSk7CisKKwlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXN0bGM0NXh4X3dhcm5pbmcoIm5vIGZyYW1lcyB3YWl0aW5nIGZvciAiCisJCQkJCSAiYWNrbm93bGVkZ2VtZW50Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgeworCQlpZiAoY29udHJvbC0+aGFuZGxlID09IGVudHJ5LT5oYW5kbGUpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiY291bGRuJ3QgZmluZCBmcmFtZSBmb3IgdHggYWNrIDB4JXgiLAorCQkJCQkgY29udHJvbC0+aGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAiVFggQUNLIDB4JXgiLCBlbnRyeS0+aGFuZGxlKTsKKworCWlmIChlbnRyeS0+c3RhdHVzX25lZWRlZCkgeworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKworCQlpZiAoISh0eC0+ZmxhZ3MgJiBMTV9UWF9GQUlMRUQpKSB7CisJCQkvKiBmcmFtZSB3YXMgYWNrZWQgKi8KKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJCWluZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gdHgtPnJjcGkgLyAyIC0gMTEwOworCQl9CisKKwkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOworCX0KKworCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7CisKKwlzdGxjNDV4eF9jaGVja190eHNlbnQoc3RsYyk7CisJaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKQorCQkvKiB0aGVyZSBhcmUgbm8gcGVuZGluZyBmcmFtZXMsIHdlIGNhbiBzdG9wIHRoZSB0eCB0aW1lb3V0CisJCSAqIHRpbWVyICovCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnN0bGMtPndvcmtfdHhfdGltZW91dCk7CisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisKKwlpZiAoc3RsYy0+dHhfcXVldWVfc3RvcHBlZCAmJgorCSAgICBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIE1BWF9GUkFNRV9MRU4pICE9IC0xKSB7CisJCXN0bGM0NXh4X2RlYnVnKERFQlVHX1FVRVVFLCAicm9vbSBpbiB0eCBidWZmZXIsIHdha2luZyBxdWV1ZXMiKTsKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKKwkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfY29udHJvbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlpbnQgcmV0ID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7CisKKwlzd2l0Y2ggKGNvbnRyb2wtPm9pZCkgeworCWNhc2UgTE1fT0lEX1RYOgorCQlyZXQgPSBzdGxjNDV4eF9yeF90eGFjayhzdGxjLCBza2IpOworCQlicmVhazsKKwljYXNlIExNX09JRF9TRVRVUDoKKwljYXNlIExNX09JRF9TQ0FOOgorCWNhc2UgTE1fT0lEX1RSQVA6CisJY2FzZSBMTV9PSURfRURDRjoKKwljYXNlIExNX09JRF9LRVlDQUNIRToKKwljYXNlIExNX09JRF9QU006CisJY2FzZSBMTV9PSURfU1RBVFM6CisJY2FzZSBMTV9PSURfTEVEOgorCWRlZmF1bHQ6CisJCXN0bGM0NXh4X3dhcm5pbmcoInVuaGFuZGxlZCByeCBjb250cm9sIG9pZCAlZFxuIiwKKwkJCQkgY29udHJvbC0+b2lkKTsKKwkJYnJlYWs7CisJfQorCisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIHJldDsKK30KKworLyogY29waWVkIGZyb20gbWFjODAyMTEgKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3BhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwKKwkJCQkgc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKnRpbSwKKwkJCQkgc2l6ZV90ICp0aW1fbGVuKQoreworCXNpemVfdCBsZWZ0ID0gbGVuOworCXU4ICpwb3MgPSBzdGFydDsKKworCXdoaWxlIChsZWZ0ID49IDIpIHsKKwkJdTggaWQsIGVsZW47CisKKwkJaWQgPSAqcG9zKys7CisJCWVsZW4gPSAqcG9zKys7CisJCWxlZnQgLT0gMjsKKworCQlpZiAoZWxlbiA+IGxlZnQpCisJCQlyZXR1cm47CisKKwkJc3dpdGNoIChpZCkgeworCQljYXNlIFdMQU5fRUlEX1RJTToKKwkJCSp0aW0gPSAoc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKSBwb3M7CisJCQkqdGltX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJbGVmdCAtPSBlbGVuOworCQlwb3MgKz0gZWxlbjsKKwl9Cit9CisKKy8qCisgKiBtYWM4MDIxMSBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgYXNraW5nIGZyYW1lcyB3aXRoIFBTLVBvbGwsIHNvIGxldCdzCisgKiBpbXBsZW1lbnQgaW4gdGhlIGRyaXZlciBmb3Igbm93LiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExCisgKiBsYXRlci4KKyAqLworc3RhdGljIGludCBzdGxjNDV4eF9jaGVja19tb3JlX2RhdGEoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzaXplX3QgbGVuOworCXUxNiBmYzsKKworCWhkciA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7CisJbGVuID0gc2tiLT5sZW4gLSBzaXplb2YoKmRhdGEpOworCisJLyogbWluaW11bSBmcmFtZSBsZW5ndGggaXMgdGhlIG51bGwgZnJhbWUgbGVuZ3RoIDI0IGJ5dGVzICovCisJaWYgKGxlbiA8IDI0KSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgZnJhbWUgbGVuZ3RoIHdoZW4gY2hlY2tpbmcgZm9yICIKKwkJCQkgIm1vcmUgZGF0YSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQorCQkvKiB0aGlzIGlzIG5vdCBmcm9tIERTICovCisJCXJldHVybiAwOworCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIxLCBzdGxjLT5tYWNfYWRkcikgIT0gMCkKKwkJLyogdGhlIGZyYW1lIHdhcyBub3QgZm9yIHVzICovCisJCXJldHVybiAwOworCisJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkpIHsKKwkJLyogQVAgaGFzIG5vIG1vcmUgZnJhbWVzIGJ1ZmZlcmVkIGZvciB1cyAqLworCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJhbGwgYnVmZmVyZWQgZnJhbWVzIHJldHJpZXZlZCIpOworCQlzdGxjLT5wc3BvbGxpbmcgPSBmYWxzZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTU9SRURBVEEgYml0IGlzIHNldCwgbGV0J3MgYXNrIGZvciBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLworCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBtYWM4MDIxMSBjYW5ub3QgcmVhZCBUSU0gZnJvbSBiZWFjb25zLCBzbyBsZXQncyBhZGQgYSBoYWNrIHRvIHRoZQorICogZHJpdmVyLiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExIGxhdGVyLgorICovCitzdGF0aWMgaW50IHN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc19sbV9kYXRhX2luICpkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfaW4gKikgc2tiLT5kYXRhOworCXNpemVfdCBsZW4gPSBza2ItPmxlbiwgdGltX2xlbiA9IDAsIGJhc2VsZW4sIHB2Ym1hcF9sZW47CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBzdGxjNDV4eF9pZV90aW0gKnRpbSA9IE5VTEw7CisJaW50IGJtYXBfb2Zmc2V0LCBpbmRleCwgYWlkX2JpdDsKKworCW1nbXQgPSAodm9pZCAqKSBza2ItPmRhdGEgKyBzaXplb2YoKmRhdGEpOworCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgYmFzZWxlbiBpbiBiZWFjb24iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RsYzQ1eHhfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZ0aW0sCisJCQkgICAgICZ0aW1fbGVuKTsKKworCWlmICghdGltKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImRpZG4ndCBmaW5kIHRpbSBmcm9tIGEgYmVhY29uIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJtYXBfb2Zmc2V0ID0gdGltLT5ibWFwX2NvbnRyb2wgJiAweGZlOworCWluZGV4ID0gc3RsYy0+YWlkIC8gOCAtIGJtYXBfb2Zmc2V0OworCisJcHZibWFwX2xlbiA9IHRpbV9sZW4gLSAzOworCWlmIChpbmRleCA+IHB2Ym1hcF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJYWlkX2JpdCA9ICEhKHRpbS0+cHZibWFwW2luZGV4XSAmICgxIDw8IHN0bGMtPmFpZCAlIDgpKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImZjIDB4JXggZHVyYXRpb24gJWQgc2VxICVkIGR0aW0gJXUgIgorCQkgICAgICAgImJtYXBfY29udHJvbCAweCV4IGFpZF9iaXQgJWQiLAorCQkgICAgICAgbWdtdC0+ZnJhbWVfY29udHJvbCwgbWdtdC0+ZHVyYXRpb24sIG1nbXQtPnNlcV9jdHJsID4+IDQsCisJCSAgICAgICB0aW0tPmR0aW1fY291bnQsIHRpbS0+Ym1hcF9jb250cm9sLCBhaWRfYml0KTsKKworCWlmICghYWlkX2JpdCkKKwkJcmV0dXJuIDA7CisKKwlzdGxjLT5wc3BvbGxpbmcgPSB0cnVlOworCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7CisJaW50IGFsaWduID0gMDsKKwl1OCAqcCwgYWxpZ25fbGVuOworCXUxNiBsZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3RsYy0+cHNtKSB7CisJCWlmIChkYXRhLT5mbGFncyAmIExNX0lOX0JFQUNPTikKKwkJCXN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0bGMsIHNrYik7CisJCWVsc2UgaWYgKHN0bGMtPnBzcG9sbGluZyAmJiAoZGF0YS0+ZmxhZ3MgJiBMTV9JTl9EQVRBKSkKKwkJCXN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdGxjLCBza2IpOworCX0KKworCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisKKwlzdGF0dXMuZnJlcSA9IGRhdGEtPmZyZXF1ZW5jeTsKKwlzdGF0dXMuc2lnbmFsID0gZGF0YS0+cmNwaSAvIDIgLSAxMTA7CisKKwkvKiBsZXQncyBhc3N1bWUgdGhhdCBtYXhpbXVtIHJjcGkgdmFsdWUgaXMgMTQwICg9IDM1IGRCbSkgKi8KKwlzdGF0dXMucXVhbCA9IGRhdGEtPnJjcGkgKiAxMDAgLyAxNDA7CisKKwlzdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwkvKgorCSAqIEZJWE1FOiB0aGlzIGdpdmVzIHdhcm5pbmcgZnJvbSBfX2llZWU4MDIxMV9yeCgpCisJICoKKwkgKiBzdGF0dXMucmF0ZV9pZHggPSBkYXRhLT5yYXRlOworCSAqLworCisJbGVuID0gZGF0YS0+bGVuZ3RoOworCisJaWYgKGRhdGEtPmZsYWdzICYgTE1fRkxBR19BTElHTikKKwkJYWxpZ24gPSAxOworCisJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmRhdGEpKTsKKworCWlmIChhbGlnbikgeworCQlwID0gc2tiLT5kYXRhOworCQlhbGlnbl9sZW4gPSAqcDsKKwkJc2tiX3B1bGwoc2tiLCBhbGlnbl9sZW4pOworCX0KKworCXNrYl90cmltKHNrYiwgbGVuKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZGF0YSAweCVwICVkIEIiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlzdGxjNDV4eF9kdW1wKERFQlVHX1JYX0NPTlRFTlQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJaWVlZTgwMjExX3J4KHN0bGMtPmh3LCBza2IsICZzdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHN0bGM0NXh4X3J4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKwl1MTYgbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOworCisJLyogZHVtbXkgcmVhZCB0byBmbHVzaCBTUEkgRE1BIGNvbnRyb2xsZXIgYnVnICovCisJc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0dFTl9QVVJQXzEpOworCisJbGVuID0gc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBKTsKKworCWlmIChsZW4gPT0gMCkgeworCQlzdGxjNDV4eF93YXJuaW5nKCJyeCByZXF1ZXN0IG9mIHplcm8gYnl0ZXMiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOworCWlmICghc2tiKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImNvdWxkIG5vdCBhbGxvYyBza2IiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIHNrYl9wdXQoc2tiLCBsZW4pLCBsZW4pOworCisJc3RsYzQ1eHhfc2xlZXAoc3RsYyk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGZyYW1lIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwljb250cm9sID0gKHN0cnVjdCBzX2xtX2NvbnRyb2wgKikgc2tiLT5kYXRhOworCisJaWYgKGNvbnRyb2wtPmZsYWdzICYgTE1fRkxBR19DT05UUk9MKQorCQlyZXQgPSBzdGxjNDV4eF9yeF9jb250cm9sKHN0bGMsIHNrYik7CisJZWxzZQorCQlyZXQgPSBzdGxjNDV4eF9yeF9kYXRhKHN0bGMsIHNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdGxjNDV4eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29uZmlnKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb25maWc7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKKworCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X2ZyYW1lKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIGFkZHJlc3MsCisJCQkgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisJdTMyIGludHM7CisKKwlzdGxjLT50eF9mcmFtZXMrKzsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZnJhbWUgMHglcCAlenUgQiIsIGJ1ZiwgbGVuKTsKKwlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIGJ1ZiwgbGVuKTsKKworCXN0bGM0NXh4X3dha2V1cChzdGxjKTsKKworCWRtYV9yZWdzLmNtZCAgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOworCWRtYV9yZWdzLmxlbiAgPSBjcHVfdG9fbGUxNihsZW4pOworCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyZXNzKTsKKworCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgJmRtYV9yZWdzLAorCQkJICAgc2l6ZW9mKGRtYV9yZWdzKSk7CisKKwlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIGJ1ZiwgbGVuKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOworCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1dSX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJc3RsYzQ1eHhfd2FybmluZygiV1JfUkVBRFkgdGltZW91dCIpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJfQorCisJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfV1JfUkVBRFkpOworCisJc3RsYzQ1eHhfc2xlZXAoc3RsYyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3dxX3R4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfcGVuZGluZykpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHN0bGMtPnR4X3BlbmRpbmcubmV4dCwKKwkJCQkgICBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOworCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT50eF9saXN0KTsKKworCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwkJcmV0ID0gc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPmZyYW1lX3N0YXJ0LAorCQkJCQllbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOworCisJCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCS8qIGZyYW1lIHRyYW5zZmVyIHRvIGZpcm13YXJlIGJ1ZmZlciBmYWlsZWQgKi8KKwkJCS8qIEZJWE1FOiByZXBvcnQgdGhpcyB0byBtYWM4MDIxMSAqLworCQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKKwkJCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnN0bGMtPndvcmtfdHhfdGltZW91dCwKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKFRYX1RJTUVPVVQpKTsKKwl9CisKK291dDoKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwgd29yayk7CisJdTMyIGludHM7CisJaW50IHJldDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9PRkYgJiYKKwkgICAgc3RsYy0+Zndfc3RhdGUgPT0gRldfU1RBVEVfUkVTRVQpCisJCWdvdG8gb3V0OworCisJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JILCAiYmVnaW4gaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOworCisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpIHsKKwkJc3RsYzQ1eHhfaW50X3JlYWR5KHN0bGMpOworCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9SRUFEWSk7CisJfQorCisJaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQorCQlnb3RvIG91dDsKKworCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1VQREFURSkgeworCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9VUERBVEUpOworCQlyZXQgPSBzdGxjNDV4eF9yeChzdGxjKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSB7CisJCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7CisJCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOworCQlpZiAocmV0IDwgMCkgeworCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IHN0bGM0NXh4X3dxX3R4KHN0bGMpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOworCQlnb3RvIG91dDsKKwl9CisKKwlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJlbmQgaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X2VkY2Yoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IHNfbG1vX2VkY2YgKmVkY2Y7CisJc2l6ZV90IGxlbiwgZWRjZl9sZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwllZGNmX2xlbiA9IHNpemVvZigqZWRjZik7CisJbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIGVkY2ZfbGVuOworCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJZWRjZiA9IChzdHJ1Y3Qgc19sbW9fZWRjZiAqKSAoY29udHJvbCArIDEpOworCisJY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOworCWNvbnRyb2wtPmxlbmd0aCA9IGVkY2ZfbGVuOworCWNvbnRyb2wtPm9pZCA9IExNX09JRF9FRENGOworCisJZWRjZi0+c2xvdHRpbWUgPSAweDE0OworCWVkY2YtPnNpZnMgPSAxMDsKKwllZGNmLT5lb2ZwYWQgPSA2OworCWVkY2YtPm1heGJ1cnN0ID0gMTUwMDsKKworCWVkY2YtPnF1ZXVlc1swXS5haWZzID0gMjsKKwllZGNmLT5xdWV1ZXNbMF0ucGFkMCA9IDE7CisJZWRjZi0+cXVldWVzWzBdLmN3bWluID0gMzsKKwllZGNmLT5xdWV1ZXNbMF0uY3dtYXggPSA3OworCWVkY2YtPnF1ZXVlc1swXS50eG9wID0gNDc7CisJZWRjZi0+cXVldWVzWzFdLmFpZnMgPSAyOworCWVkY2YtPnF1ZXVlc1sxXS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbMV0uY3dtaW4gPSA3OworCWVkY2YtPnF1ZXVlc1sxXS5jd21heCA9IDE1OworCWVkY2YtPnF1ZXVlc1sxXS50eG9wID0gOTQ7CisJZWRjZi0+cXVldWVzWzJdLmFpZnMgPSAzOworCWVkY2YtPnF1ZXVlc1syXS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbMl0uY3dtaW4gPSAxNTsKKwllZGNmLT5xdWV1ZXNbMl0uY3dtYXggPSAxMDIzOworCWVkY2YtPnF1ZXVlc1syXS50eG9wID0gMDsKKwllZGNmLT5xdWV1ZXNbM10uYWlmcyA9IDc7CisJZWRjZi0+cXVldWVzWzNdLnBhZDAgPSAwOworCWVkY2YtPnF1ZXVlc1szXS5jd21pbiA9IDE1OworCWVkY2YtPnF1ZXVlc1szXS5jd21heCA9IDEwMjM7CisJZWRjZi0+cXVldWVzWzNdLnR4b3AgPSAwOworCWVkY2YtPnF1ZXVlc1s0XS5haWZzID0gMTM7CisJZWRjZi0+cXVldWVzWzRdLnBhZDAgPSA5OTsKKwllZGNmLT5xdWV1ZXNbNF0uY3dtaW4gPSAzNDM3OworCWVkY2YtPnF1ZXVlc1s0XS5jd21heCA9IDUxMjsKKwllZGNmLT5xdWV1ZXNbNF0udHhvcCA9IDEyOworCWVkY2YtPnF1ZXVlc1s1XS5haWZzID0gMTQyOworCWVkY2YtPnF1ZXVlc1s1XS5wYWQwID0gMTA5OworCWVkY2YtPnF1ZXVlc1s1XS5jd21pbiA9IDg3NTY7CisJZWRjZi0+cXVldWVzWzVdLmN3bWF4ID0gNjsKKwllZGNmLT5xdWV1ZXNbNV0udHhvcCA9IDA7CisJZWRjZi0+cXVldWVzWzZdLmFpZnMgPSA0OworCWVkY2YtPnF1ZXVlc1s2XS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbNl0uY3dtaW4gPSAwOworCWVkY2YtPnF1ZXVlc1s2XS5jd21heCA9IDU4NzA1OworCWVkY2YtPnF1ZXVlc1s2XS50eG9wID0gMjU3MTY7CisJZWRjZi0+cXVldWVzWzddLmFpZnMgPSAwOworCWVkY2YtPnF1ZXVlc1s3XS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbN10uY3dtaW4gPSAwOworCWVkY2YtPnF1ZXVlc1s3XS5jd21heCA9IDA7CisJZWRjZi0+cXVldWVzWzddLnR4b3AgPSAwOworCisJc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOworCisJa2ZyZWUoY29udHJvbCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NldHVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCXN0cnVjdCBzX2xtb19zZXR1cCAqc2V0dXA7CisJc2l6ZV90IGxlbiwgc2V0dXBfbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc2V0dXBfbGVuID0gc2l6ZW9mKCpzZXR1cCk7CisJbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHNldHVwX2xlbjsKKwljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXNldHVwID0gKHN0cnVjdCBzX2xtb19zZXR1cCAqKSAoY29udHJvbCArIDEpOworCisJY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOworCWNvbnRyb2wtPmxlbmd0aCA9IHNldHVwX2xlbjsKKwljb250cm9sLT5vaWQgPSBMTV9PSURfU0VUVVA7CisKKwlzZXR1cC0+ZmxhZ3MgPSBMTV9TRVRVUF9JTkZSQTsKKwlzZXR1cC0+YW50ZW5uYSA9IDI7CisJc2V0dXAtPnJ4X2FsaWduID0gMDsKKwlzZXR1cC0+cnhfYnVmZmVyID0gRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQ7CisJc2V0dXAtPnJ4X210dSA9IEZJUk1XQVJFX01UVTsKKwlzZXR1cC0+ZnJvbnRlbmQgPSA1OworCXNldHVwLT50aW1lb3V0ID0gMDsKKwlzZXR1cC0+dHJ1bmNhdGUgPSA0ODg5NjsKKwlzZXR1cC0+YnJhdGVtYXNrID0gMHhmZmZmZmZmZjsKKwlzZXR1cC0+cmVmX2Nsb2NrID0gNjQ0MjQ1MDk0OworCXNldHVwLT5scGZfYmFuZHdpZHRoID0gNjU1MzU7CisJc2V0dXAtPm9zY19zdGFydF9kZWxheSA9IDY1NTM1OworCisJbWVtY3B5KHNldHVwLT5tYWNhZGRyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShzZXR1cC0+YnNzaWQsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7CisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7CisKKwlrZnJlZShjb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qgc19sbW9fc2NhbiAqc2NhbjsKKwlzaXplX3QgbGVuLCBzY2FuX2xlbjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXNjYW5fbGVuID0gc2l6ZW9mKCpzY2FuKTsKKwlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2Nhbl9sZW47CisJY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlzY2FuID0gKHN0cnVjdCBzX2xtb19zY2FuICopIChjb250cm9sICsgMSk7CisKKwljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7CisJY29udHJvbC0+bGVuZ3RoID0gc2Nhbl9sZW47CisJY29udHJvbC0+b2lkID0gTE1fT0lEX1NDQU47CisKKwlzY2FuLT5mbGFncyA9IExNX1NDQU5fRVhJVDsKKwlzY2FuLT5icmF0ZW1hc2sgPSAweDE1ZjsKKwlzY2FuLT5hbG9mdFswXSA9IDM7CisJc2Nhbi0+YWxvZnRbMV0gPSAzOworCXNjYW4tPmFsb2Z0WzJdID0gMTsKKwlzY2FuLT5hbG9mdFszXSA9IDA7CisJc2Nhbi0+YWxvZnRbNF0gPSAwOworCXNjYW4tPmFsb2Z0WzVdID0gMDsKKwlzY2FuLT5hbG9mdFs2XSA9IDA7CisJc2Nhbi0+YWxvZnRbN10gPSAwOworCisJbWVtY3B5KCZzY2FuLT5yc3NpY2FsLCAmc3RsYy0+Y2FsX3Jzc2lbKHN0bGMtPmNoYW5uZWwgLSAxKSAqCisJCQkJCSAgICAgICBSU1NJX0NBTF9MRU5dLAorCSAgICAgICBSU1NJX0NBTF9MRU4pOworCW1lbWNweSgmc2Nhbi0+Y2hhbm5lbCwgJnN0bGMtPmNhbF9jaGFubmVsc1soc3RsYy0+Y2hhbm5lbCAtIDEpICoKKwkJCQkJCSAgIENIQU5ORUxfQ0FMX0xFTl0sCisJICAgICAgIENIQU5ORUxfQ0FMX0xFTik7CisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7CisKKwlrZnJlZShjb250cm9sKTsKK30KKworLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKKyAqLworc3RhdGljIGludCBzdGxjNDV4eF90eF9wc3BvbGwoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHNwb2xsOworCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKKwlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqcGF5bG9hZDsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDE2KTsKKwlpZiAoIXNrYikgeworCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgcHNwb2xsIGZyYW1lIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDE2KTsKKwltZW1zZXQocHNwb2xsLCAwLCAxNik7CisJZmMgPSBJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDsKKwlpZiAocG93ZXJzYXZlKQorCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKKwlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJcHNwb2xsLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KHN0bGMtPmFpZCk7CisKKwkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KKwlwc3BvbGwtPmR1cmF0aW9uX2lkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUpIHwgY3B1X3RvX2xlMTYoMSA8PCAxNCk7CisKKwltZW1jcHkocHNwb2xsLT5hZGRyMSwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkocHNwb2xsLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgUFMtUG9sbCBmcmFtZSB0byAlcyAocG93ZXJzYXZlICVkLCAiCisJCSAgICAgICAiZmMgMHgleCwgYWlkICVkKSIsIHByaW50X21hYyhtYWMsIHBzcG9sbC0+YWRkcjEpLAorCQkgICAgICAgcG93ZXJzYXZlLCBmYywgc3RsYy0+YWlkKTsKKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCWlmICghZW50cnkpIHsKKwkJLyoKKwkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCisJCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCisJCSAqIHNwYWNlLgorCQkgKgorCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCisJCSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCisJCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJcGF5bG9hZCA9IHNrYi0+ZGF0YTsKKwlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOworCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOworCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7CisKKwllbnRyeS0+c2tiID0gc2tiOworCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7CisJZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKKwllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgorCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAorCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCisJCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7CisJc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7CisKKwlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCWlmIChwYWRkaW5nKQorCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047CisKKwlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKKwlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOworCWRhdGEtPmFpZCA9IDE7CisJZGF0YS0+cnRzX3JldHJpZXMgPSA3OworCWRhdGEtPnJldHJpZXMgPSA3OworCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOworCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OworCWRhdGEtPmtleXR5cGUgPSAwOworCWRhdGEtPmtleWxlbiA9IDA7CisJZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKKwlkYXRhLT5iYWNrbG9nID0gMzI7CisJZGF0YS0+YW50ZW5uYSA9IDI7CisJZGF0YS0+Y3RzID0gMzsKKwlkYXRhLT5wb3dlciA9IDEyNzsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWRhdGEtPmFsb2Z0W2ldID0gMDsKKworCS8qCisJICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCisJICoKKwkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93CisJICovCisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKKyAqCisgKiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBtYWM4MDIxMS9pZWVlODAyMTFfc2VuZF9udWxsZnVuYworICovCitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X251bGxmdW5jKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOworCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKKwlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqcGF5bG9hZDsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKKwlpZiAoIXNrYikgeworCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsIGZyYW1lXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7CisJZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJICAgICBJRUVFODAyMTFfRkNUTF9UT0RTOworCisJaWYgKHBvd2Vyc2F2ZSkKKwkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUE07CisKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTnVsbCBmcmFtZSB0byAlcyAocG93ZXJzYXZlICVkLCAiCisJCSAgICAgICAiZmMgMHgleCkiLAorCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbnVsbGZ1bmMtPmFkZHIxKSwgcG93ZXJzYXZlLCBmYyk7CisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJZW50cnkgPSBzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdGxjLCBza2ItPmxlbik7CisKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlpZiAoIWVudHJ5KSB7CisJCS8qCisJCSAqIFRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgorCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAorCQkgKiBzcGFjZS4KKwkJICoKKwkJICogQnV0IEknbSB0b28gbGF6eSBhbmQgb21pdCBpdCBmb3Igbm93LgorCQkgKi8KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXN0bGM0NXh4X3dhcm5pbmcoImZpcm13YXJlIHR4IGJ1ZmZlciBmdWxsIGlzIGZ1bGwgIgorCQkJCQkgImZvciBudWxsIGZyYW1lIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCXBheWxvYWQgPSBza2ItPmRhdGE7CisJcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKKwlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKKwllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOworCisJZW50cnktPnNrYiA9IHNrYjsKKwllbnRyeS0+c3RhdHVzX25lZWRlZCA9IGZhbHNlOworCWVudHJ5LT5oYW5kbGUgPSAodTMyKSBza2I7CisJZW50cnktPmxpZmV0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFhfRlJBTUVfTElGRVRJTUUpOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBkYXRhIDB4JXggKDB4JXAgcGF5bG9hZCAlZCBCICIKKwkJICAgICAgICJwYWRkaW5nICVkIGhlYWRlcl9sZW4gJWQpIiwKKwkJICAgICAgIGVudHJ5LT5oYW5kbGUsIHBheWxvYWQsIHBheWxvYWRfbGVuLCBwYWRkaW5nLAorCQkgICAgICAgZW50cnktPmhlYWRlcl9sZW4pOworCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOworCisJZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX291dCAqKSBza2JfcHVzaChza2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCW1lbXNldChkYXRhLCAwLCBlbnRyeS0+aGVhZGVyX2xlbik7CisKKwlpZiAocGFkZGluZykKKwkJZGF0YS0+ZmxhZ3MgPSBMTV9GTEFHX0FMSUdOOworCisJZGF0YS0+ZmxhZ3MgPSBMTV9PVVRfQlVSU1Q7CisJZGF0YS0+bGVuZ3RoID0gcGF5bG9hZF9sZW47CisJZGF0YS0+aGFuZGxlID0gZW50cnktPmhhbmRsZTsKKwlkYXRhLT5haWQgPSAxOworCWRhdGEtPnJ0c19yZXRyaWVzID0gNzsKKwlkYXRhLT5yZXRyaWVzID0gNzsKKwlkYXRhLT5hbG9mdF9jdHJsID0gMDsKKwlkYXRhLT5jcnlwdF9vZmZzZXQgPSA1ODsKKwlkYXRhLT5rZXl0eXBlID0gMDsKKwlkYXRhLT5rZXlsZW4gPSAwOworCWRhdGEtPnF1ZXVlID0gTE1fUVVFVUVfREFUQTM7CisJZGF0YS0+YmFja2xvZyA9IDMyOworCWRhdGEtPmFudGVubmEgPSAyOworCWRhdGEtPmN0cyA9IDM7CisJZGF0YS0+cG93ZXIgPSAxMjc7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkYXRhLT5hbG9mdFtpXSA9IDA7CisKKwkvKgorCSAqIGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIGluIHR4IGJ1ZmZlcgorCSAqCisJICogRklYTUU6IGlnbm9yZWQgZm9yIG5vdworCSAqLworCisJc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPnN0YXJ0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXggKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IHNfbG1vX3BzbSAqcHNtOworCXNpemVfdCBsZW4sIHBzbV9sZW47CisKKwlXQVJOX09OKCFzdGxjLT5hc3NvY2lhdGVkKTsKKwlXQVJOX09OKHN0bGMtPmFpZCA8IDEpOworCVdBUk5fT04oc3RsYy0+YWlkID4gMjAwNyk7CisKKwlwc21fbGVuID0gc2l6ZW9mKCpwc20pOworCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBwc21fbGVuOworCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJcHNtID0gKHN0cnVjdCBzX2xtb19wc20gKikgKGNvbnRyb2wgKyAxKTsKKworCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKKwljb250cm9sLT5sZW5ndGggPSBwc21fbGVuOworCWNvbnRyb2wtPm9pZCA9IExNX09JRF9QU007CisKKwlpZiAoZW5hYmxlKQorCQlwc20tPmZsYWdzIHw9IExNX1BTTTsKKworCXBzbS0+YWlkID0gc3RsYy0+YWlkOworCisJcHNtLT5iZWFjb25fcmNwaV9za2lwX21heCA9IDYwOworCisJcHNtLT5pbnRlcnZhbHNbMF0uaW50ZXJ2YWwgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzBdLnBlcmlvZHMgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzFdLmludGVydmFsID0gMTsKKwlwc20tPmludGVydmFsc1sxXS5wZXJpb2RzID0gMTsKKwlwc20tPmludGVydmFsc1syXS5pbnRlcnZhbCA9IDE7CisJcHNtLT5pbnRlcnZhbHNbMl0ucGVyaW9kcyA9IDE7CisJcHNtLT5pbnRlcnZhbHNbM10uaW50ZXJ2YWwgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzNdLnBlcmlvZHMgPSAxOworCisJcHNtLT5uciA9IDA7CisJcHNtLT5leGNsdWRlWzBdID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTE1fT0lEX1BTTSAoYWlkICVkLCBpbnRlcnZhbCAlZCkiLAorCQkgICAgICAgcHNtLT5haWQsIHBzbS0+aW50ZXJ2YWxzWzBdLmludGVydmFsKTsKKworCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKKworCWtmcmVlKGNvbnRyb2wpOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CisJaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOworCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJY2hhciAqcGF5bG9hZDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKKwlpZiAoIWVudHJ5KSB7CisJCS8qIHRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgorCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAorCQkgKiBzcGFjZSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgYnVmZmVyIGZ1bGwiKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCXBheWxvYWQgPSBza2ItPmRhdGE7CisJcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKKwlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKKwllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOworCisJZW50cnktPnNrYiA9IHNrYjsKKwllbnRyeS0+c3RhdHVzX25lZWRlZCA9IHRydWU7CisJZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKKwllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgorCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAorCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCisJCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7CisJc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7CisKKwlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCWlmIChwYWRkaW5nKQorCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047CisKKwlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKKwlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOworCWRhdGEtPmFpZCA9IDE7CisJZGF0YS0+cnRzX3JldHJpZXMgPSA3OworCWRhdGEtPnJldHJpZXMgPSA3OworCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOworCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OworCWRhdGEtPmtleXR5cGUgPSAwOworCWRhdGEtPmtleWxlbiA9IDA7CisJZGF0YS0+cXVldWUgPSAyOworCWRhdGEtPmJhY2tsb2cgPSAzMjsKKwlkYXRhLT5hbnRlbm5hID0gMjsKKwlkYXRhLT5jdHMgPSAzOworCWRhdGEtPnBvd2VyID0gMTI3OworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHN0bGMtPmh3LCBpbmZvKTsKKwkJZGF0YS0+YWxvZnRbaV0gPSByYXRlLT5od192YWx1ZTsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3BlbmRpbmcpOworCisJLyogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyICovCisJaWYgKHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgTUFYX0ZSQU1FX0xFTikgPT0gLTEpIHsKKwkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUVVFVUUsICJ0eCBidWZmZXIgZnVsbCwgc3RvcHBpbmcgcXVldWVzIik7CisJCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAxOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc3RsYy0+aHcpOworCX0KKworCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOworCisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX0JPT1RJTkc7CisJc3RsYy0+Y2hhbm5lbCA9IDE7CisKKwlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKKworCXJldCA9IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdGxjKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMDsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZzdGxjLT5md19jb21wLAorCQkJCQkJCSAgICB0aW1lb3V0KTsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIGJvb3QgZmFpbGVkIik7CisJCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JPT1QsICJmaXJtd2FyZSBib290ZWQiKTsKKworCS8qIEZJWE1FOiBzaG91bGQgd2UgdGFrZSBtdXRleCBqdXN0IGFmdGVyIHdhaXRfZm9yX2NvbXBsZXRpb24oKT8gKi8KKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKKworCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKKworCS8qIEZJWE1FOiBtYWtlIHN1cmUgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgY29tcGxldGVkICovCisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCXN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdGxjKTsKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX09GRjsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCW1lbWNweShzdGxjLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCW1lbWNweShzdGxjLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCXN0bGMtPmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZTsKKwlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOworCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOworCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7CisKKwlpZiAoKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICE9IHN0bGMtPnBzbSkgeworCQlzdGxjLT5wc20gPSBody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTOworCQlpZiAoc3RsYy0+YXNzb2NpYXRlZCkgeworCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7CisJCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgICAgIGludCBtY19jb3VudCwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwkqdG90YWxfZmxhZ3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCQkJCSB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJc3RsYy0+YXNzb2NpYXRlZCA9IGluZm8tPmFzc29jOworCQlpZiAoaW5mby0+YXNzb2MpCisJCQlzdGxjLT5haWQgPSBpbmZvLT5haWQ7CisJCWVsc2UKKwkJCXN0bGMtPmFpZCA9IC0xOworCisJCWlmIChzdGxjLT5wc20pIHsKKwkJCXN0bGM0NXh4X3R4X3BzbShzdGxjLCBzdGxjLT5wc20pOworCQkJc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RsYywgc3RsYy0+cHNtKTsKKwkJfQorCX0KK30KKworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgc3RsYzQ1eHhfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsICAuaHdfdmFsdWUgPSAwLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAwLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgIC5od192YWx1ZSA9IDEsICAgIC5od192YWx1ZV9zaG9ydCA9IDEsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAgLmh3X3ZhbHVlID0gMiwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMiwgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAzLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAzLCB9LAorCXsgLmJpdHJhdGUgPSA2MCwgIC5od192YWx1ZSA9IDQsICAgIC5od192YWx1ZV9zaG9ydCA9IDQsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAgLmh3X3ZhbHVlID0gNSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsICAgIC5od192YWx1ZV9zaG9ydCA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCAgIC5od192YWx1ZV9zaG9ydCA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCAgIC5od192YWx1ZV9zaG9ydCA9IDExLCB9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHN0bGM0NXh4X2NoYW5uZWxzW10gPSB7CisJeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKKwl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAorCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCisJeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKKwl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAorCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCisJeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKKwl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAorCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCisJeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCisJeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCisJeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCisJeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCit9OworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHN0bGM0NXh4X2JhbmRfMmdoeiA9IHsKKwkuY2hhbm5lbHMgPSBzdGxjNDV4eF9jaGFubmVscywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RsYzQ1eHhfY2hhbm5lbHMpLAorCS5iaXRyYXRlcyA9IHN0bGM0NXh4X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShzdGxjNDV4eF9yYXRlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgc3RsYzQ1eHhfb3BzID0geworCS5zdGFydCA9IHN0bGM0NXh4X29wX3N0YXJ0LAorCS5zdG9wID0gc3RsYzQ1eHhfb3Bfc3RvcCwKKwkuYWRkX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcgPSBzdGxjNDV4eF9vcF9jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9jb25maWdfaW50ZXJmYWNlLAorCS5jb25maWd1cmVfZmlsdGVyID0gc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlciwKKwkudHggPSBzdGxjNDV4eF9vcF90eCwKKwkuYnNzX2luZm9fY2hhbmdlZCA9IHN0bGM0NXh4X29wX2Jzc19pbmZvX2NoYW5nZWQsCit9OworCitzdGF0aWMgaW50IHN0bGM0NXh4X3JlZ2lzdGVyX21hYzgwMjExKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwkvKiBGSVhNRTogU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoKSByZXF1aXJlcyBkZWZhdWx0X21hY19hZGRyCisJICAgdG8gYmUgbm9uLWNvbnN0IGZvciBzb21lIHN0cmFuZ2UgcmVhc29uICovCisJc3RhdGljIHU4IGRlZmF1bHRfbWFjX2FkZHJbRVRIX0FMRU5dID0geworCQkweDAwLCAweDAyLCAweGVlLCAweGMwLCAweGZmLCAweGVlCisJfTsKKwlpbnQgcmV0OworCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoc3RsYy0+aHcsIGRlZmF1bHRfbWFjX2FkZHIpOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0bGMtPmh3KTsKKwlpZiAocmV0KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbWFjODAyMTEgaHc6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0bGM0NXh4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic3RsYzQ1eHgiLAorCS5pZAkJPSAtMSwKKworCS8qIGRldmljZSBtb2RlbCBpbnNpc3RzIHRvIGhhdmUgYSByZWxlYXNlIGZ1bmN0aW9uICovCisJLmRldiAgICAgICAgICAgID0geworCQkucmVsZWFzZSA9IHN0bGM0NXh4X2RldmljZV9yZWxlYXNlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzdGxjNDV4eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlpbnQgcmV0OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJLyogbWFjODAyMTEgYWxsb2MgKi8KKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnN0bGMpLCAmc3RsYzQ1eHhfb3BzKTsKKwlpZiAoIWh3KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIG1hYzgwMjExIGNsZWFycyBody0+cHJpdiAqLworCXN0bGMgPSBody0+cHJpdjsKKworCXN0bGMtPmh3ID0gaHc7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgc3RsYyk7CisJc3RsYy0+c3BpID0gc3BpOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpLT5tYXhfc3BlZWRfaHogPSAyNDAwMDAwMDsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlzdGxjNDV4eF9lcnJvcigic3BpX3NldHVwIGZhaWxlZCIpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHN0bGM0NXh4X2dwaW9fcG93ZXIsICJzdGxjNDV4eCBwb3dlciIpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJwb3dlciBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHN0bGM0NXh4X2dwaW9faXJxLCAic3RsYzQ1eHggaXJxIik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImlycSBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChzdGxjNDV4eF9ncGlvX2lycSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksCisJCQkgIHN0bGM0NXh4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInN0bGM0NXh4IiwKKwkJCSAgc3RsYy0+c3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJLyogRklYTUU6IGhhbmRsZSB0aGUgZXJyb3IgKi8KKwkJc3RsYzQ1eHhfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkIik7CisKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLAorCQkgICAgIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN0bGM0NXh4X2RldmljZSk7CisJaWYgKHJldCkgeworCQlzdGxjNDV4eF9lcnJvcigiQ291bGRuJ3QgcmVnaXN0ZXIgd2xhbl9vbWFwIGRldmljZS4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCBzdGxjKTsKKworCUlOSVRfV09SSygmc3RsYy0+d29yaywgc3RsYzQ1eHhfd29yayk7CisJSU5JVF9XT1JLKCZzdGxjLT53b3JrX3Jlc2V0LCBzdGxjNDV4eF93b3JrX3Jlc2V0KTsKKwlJTklUX0RFTEFZRURfV09SSygmc3RsYy0+d29ya190eF90aW1lb3V0LCBzdGxjNDV4eF93b3JrX3R4X3RpbWVvdXQpOworCW11dGV4X2luaXQoJnN0bGMtPm11dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnN0bGMtPmZ3X2NvbXApOworCXNwaW5fbG9ja19pbml0KCZzdGxjLT50eF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhidWZmZXIpOworCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eF9wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhfc2VudCk7CisKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQlJRUVFODAyMTFfSFdfTk9JU0VfREJNOworCS8qIGZvdXIgYnl0ZXMgZm9yIHBhZGRpbmcgKi8KKwlody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHNfbG1fZGF0YV9vdXQpICsgNDsKKworCS8qIHVuaXQgdXMgKi8KKwlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnN0bGM0NXh4X2JhbmRfMmdoejsKKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmc3BpLT5kZXYpOworCisJQlVJTERfQlVHX09OKHNpemVvZihkZWZhdWx0X2NhbF9yc3NpKSAhPSBSU1NJX0NBTF9BUlJBWV9MRU4pOworCUJVSUxEX0JVR19PTihzaXplb2YoZGVmYXVsdF9jYWxfY2hhbm5lbHMpICE9IENIQU5ORUxfQ0FMX0FSUkFZX0xFTik7CisKKwlzdGxjLT5jYWxfcnNzaSA9IGttZW1kdXAoZGVmYXVsdF9jYWxfcnNzaSwgUlNTSV9DQUxfQVJSQVlfTEVOLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGRlZmF1bHRfY2FsX2NoYW5uZWxzLAorCQkJCSAgICAgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl9jYWxfcnNzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBjYWxfcnNzaSIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl9jYWxfY2hhbm5lbHMpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgY2FsX2NoYW5uZWxzIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX3R4X2J1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSB0eF9idWYiKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gc3RsYzQ1eHhfcmVnaXN0ZXJfbWFjODAyMTEoc3RsYyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc3RsYzQ1eHhfaW5mbygidiIgRFJJVkVSX1ZFUlNJT04gIiBsb2FkZWQiKTsKKworCXN0bGM0NXh4X2luZm8oImNvbmZpZyBidWZmZXIgMHgleC0weCV4IiwKKwkJICAgICAgRklSTVdBUkVfQ09ORklHX1NUQVJULCBGSVJNV0FSRV9DT05GSUdfRU5EKTsKKwlzdGxjNDV4eF9pbmZvKCJ0eCAweCV4LTB4JXgsIHJ4IDB4JXgtMHgleCIsCisJCSAgICAgIEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJULCBGSVJNV0FSRV9UWEJVRkZFUl9FTkQsCisJCSAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJULCBGSVJNV0FSRV9SWEJVRkZFUl9FTkQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3RsYzQ1eHhfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmc3RsYzQ1eHhfZGV2aWNlKTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0bGMtPmh3KTsKKworCWZyZWVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwgc3BpKTsKKworCWdwaW9fZnJlZShzdGxjNDV4eF9ncGlvX3Bvd2VyKTsKKwlncGlvX2ZyZWUoc3RsYzQ1eHhfZ3Bpb19pcnEpOworCisJLyogRklYTUU6IGZyZWUgY2FsX2NoYW5uZWxzIGFuZCBjYWxfcnNzaT8gKi8KKworCWtmcmVlKHN0bGMtPmZ3KTsKKworCW11dGV4X2Rlc3Ryb3koJnN0bGMtPm11dGV4KTsKKworCS8qIGZyZWVzIGFsc28gc3RsYyAqLworCWllZWU4MDIxMV9mcmVlX2h3KHN0bGMtPmh3KTsKKwlzdGxjID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzdGxjNDV4eF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS8qIHVzZSBjeDMxMTB4IG5hbWUgYmVjYXVzZSBib2FyZC1uODAwLmMgdXNlcyB0aGF0IGZvciB0aGUKKwkJICogU1BJIHBvcnQgKi8KKwkJLm5hbWUJCT0gImN4MzExMHgiLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlCQk9IHN0bGM0NXh4X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3RsYzQ1eHhfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0bGM0NXh4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc3RsYzQ1eHhfc3BpX2RyaXZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBTUEkgZHJpdmVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGxjNDV4eF9leGl0KHZvaWQpCit7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGxjNDV4eF9zcGlfZHJpdmVyKTsKKworCXN0bGM0NXh4X2luZm8oInVubG9hZGVkIik7Cit9CisKK21vZHVsZV9pbml0KHN0bGM0NXh4X2luaXQpOworbW9kdWxlX2V4aXQoc3RsYzQ1eHhfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmggYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzk2YmJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmgKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJzdGxjNDV4eF9sbWFjLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInN0bGM0NXh4IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xLjMiCisKKyNkZWZpbmUgRFJJVkVSX1BSRUZJWCBEUklWRVJfTkFNRSAiOiAiCisKK2VudW0geworCURFQlVHX05PTkUgPSAwLAorCURFQlVHX0ZVTkMgPSAxIDw8IDAsCisJREVCVUdfSVJRID0gMSA8PCAxLAorCURFQlVHX0JIID0gMSA8PCAyLAorCURFQlVHX1JYID0gMSA8PCAzLAorCURFQlVHX1JYX0NPTlRFTlQgPSAxIDw8IDUsCisJREVCVUdfVFggPSAxIDw8IDYsCisJREVCVUdfVFhfQ09OVEVOVCA9IDEgPDwgOCwKKwlERUJVR19UWEJVRkZFUiA9IDEgPDwgOSwKKwlERUJVR19RVUVVRSA9IDEgPDwgMTAsCisJREVCVUdfQk9PVCA9IDEgPDwgMTEsCisJREVCVUdfUFNNID0gMSA8PCAxMiwKKwlERUJVR19BTEwgPSB+MCwKK307CisKKyNkZWZpbmUgREVCVUdfTEVWRUwgREVCVUdfTk9ORQorLyogI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19BTEwgKi8KKy8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfUlggfCBERUJVR19JUlEpICovCisvKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19UWCB8IERFQlVHX01FTVJFR0lPTiB8IERFQlVHX1FVRVVFKSAqLworLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCisKKyNkZWZpbmUgc3RsYzQ1eHhfZXJyb3IoZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgRFJJVkVSX1BSRUZJWCAiRVJST1IgIiBmbXQgIlxuIiwgIyNhcmcpCisKKyNkZWZpbmUgc3RsYzQ1eHhfd2FybmluZyhmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSBzdGxjNDV4eF9pbmZvKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSBzdGxjNDV4eF9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgc3RsYzQ1eHhfZHVtcChsZXZlbCwgYnVmLCBsZW4pCQlcCisJZG8geyBcCisJCWlmIChsZXZlbCAmIERFQlVHX0xFVkVMKSBcCisJCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBcCisJCQkJICAgICAgIDE2LCAxLCBidWYsIGxlbiwgMSk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQUMyU1RSKGEpICgoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdKQorI2RlZmluZSBNQUNTVFIgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgorCisvKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KKyNkZWZpbmUgQUREUl9SRUFEX0JJVF8xNSAgMHg4MDAwCisKKyNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMgICAgIDB4MDAKKyNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVF9FTgkgICAgMHgwNAorCisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyAgICAweDA4CisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0VOCSAgICAweDBjCisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0FDSwkgICAgMHgxMAorCisjZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzEgICAJICAgIDB4MTQKKyNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMiAgIAkgICAgMHgxOAorCisvKiBoaWdoIHdvcmQgKi8KKyNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCAgICAgIDB4MjYKKworI2RlZmluZSBTUElfQURSU19ETUFfREFUQSAgICAgIAkgICAgMHgyOAorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMICAgICAweDJjCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4gICAgICAweDJlCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFICAgICAweDMwCisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCAgICAgIDB4MzQKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOICAgICAgIDB4MzYKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQkFTRSAgICAgIDB4MzgKKworI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgMHg4MDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEICAweDQwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCAgICAgIDB4MjAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgICAgMHgxMDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9DUFVfRU4gICAweDA4MDAKKworI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFICAgMHgwMDAxCisjZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRSAgICAweDAwMDEKKyNkZWZpbmUgSE9TVF9BTExPV0VEICAgICAgICAgICAgICAgICgxIDw8IDcpCisKKyNkZWZpbmUgRklSTVdBUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAKKworI2RlZmluZSBTUElfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAgICAgLyogbXNlYyAqLworCisjZGVmaW5lIFNQSV9NQVhfVFhfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAzMgorCisjZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAzMjc2NworCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1dBS0VVUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfRFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKworI2RlZmluZSBTUElfSE9TVF9JTlRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorCisvKiBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9DVFMJICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogZGF0YSByZWFkeSAqLworI2RlZmluZSBTUElfSE9TVF9JTlRfRFIJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCBcCisJKFNQSV9IT1NUX0lOVF9SRUFEWSB8IFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKQorCisjZGVmaW5lIFRBUkdFVF9CT09UX1NMRUVQIDUwCisKKy8qIFRoZSBmaXJtd2FyZSBidWZmZXIgaXMgZGl2aWRlZCBpbnRvIHRocmVlIGFyZWFzOgorICoKKyAqIG8gY29uZmlnIGFyZWEgKGZvciBjb250cm9sIGNvbW1hbmRzKQorICogbyB0eCBidWZmZXIKKyAqIG8gcnggYnVmZmVyCisgKi8KKyNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX1NUQVJUIDB4MjAyMDAKKyNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0VORCAweDI3YzYwCisjZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9FTkQgLSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQpCisjZGVmaW5lIEZJUk1XQVJFX01UVSAzMjQwCisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTiAxMDI0CisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19TVEFSVCBGSVJNV0FSRV9CVUZGRVJfU1RBUlQKKyNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0xFTiAoc2l6ZW9mKHN0cnVjdCBzX2xtX2NvbnRyb2wpICsgXAorCQkJICAgICBGSVJNV0FSRV9DT05GSUdfUEFZTE9BRF9MRU4pCisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19FTkQgKEZJUk1XQVJFX0NPTkZJR19TVEFSVCArIEZJUk1XQVJFX0NPTkZJR19MRU4gLSAxKQorI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gKDUgKiBGSVJNV0FSRV9NVFUgKyAxMDI0KQorI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKKyNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfRU5EIChGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCArIFwKKwkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gLSAxKQorI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTikKKyNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfTEVOIChGSVJNV0FSRV9CVUZGRVJfTEVOIC0gRklSTVdBUkVfQ09ORklHX0xFTiAtIFwKKwkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4pCisjZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0VORCAoRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQgKyBcCisJCQkgICAgICAgRklSTVdBUkVfVFhCVUZGRVJfTEVOIC0gMSkKKworI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgMTAwCisjZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVIgNAorCisvKiBGSVhNRTogY29tZSB1cCB3aXRoIGEgcHJvcGVyIHZhbHVlICovCisjZGVmaW5lIE1BWF9GUkFNRV9MRU4gMjUwMAorCisvKiB1bml0IGlzIG1zICovCisjZGVmaW5lIFRYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKKyNkZWZpbmUgVFhfVElNRU9VVCA0MDAwCisKKyNkZWZpbmUgU1VQUE9SVEVEX0NIQU5ORUxTIDEzCisKKy8qIEZJWE1FICovCisvKiAjZGVmaW5lIENIQU5ORUxfQ0FMX0xFTiBvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgYnJhdGVtYXNrKSAtIFwgKi8KKy8qIAlvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgY2hhbm5lbCkgKi8KKyNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIDI5MgorI2RlZmluZSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIENIQU5ORUxfQ0FMX0xFTikKKy8qIEZJWE1FICovCisvKiAjZGVmaW5lIFJTU0lfQ0FMX0xFTiBzaXplb2Yoc3RydWN0IHNfbG1vX3NjYW4pIC0gXCAqLworLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCByc3NpY2FsKSAqLworI2RlZmluZSBSU1NJX0NBTF9MRU4gOAorI2RlZmluZSBSU1NJX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIFJTU0lfQ0FMX0xFTikKKworc3RydWN0IHNfZG1hX3JlZ3MgeworCXVuc2lnbmVkIHNob3J0IGNtZDsKKwl1bnNpZ25lZCBzaG9ydCBsZW47CisJdW5zaWduZWQgbG9uZyBhZGRyOworfTsKKworc3RydWN0IHN0bGM0NXh4X2llX3RpbSB7CisJdTggZHRpbV9jb3VudDsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCBibWFwX2NvbnRyb2w7CisJdTggcHZibWFwWzI1MV07Cit9OworCitzdHJ1Y3QgdHhidWZmZXIgeworCS8qIGNhbiBiZSByZW1vdmVkIHdoZW4gc3dpdGNoZWQgdG8gc2tiIHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OworCisJc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfbGlzdDsKKworCWludCBzdGFydDsKKwlpbnQgZnJhbWVfc3RhcnQ7CisJaW50IGVuZDsKKworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIGhhbmRsZTsKKworCWJvb2wgc3RhdHVzX25lZWRlZDsKKworCWludCBoZWFkZXJfbGVuOworCisJLyogdW5pdCBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZyBsaWZldGltZTsKK307CisKK2VudW0gZndfc3RhdGUgeworCUZXX1NUQVRFX09GRiwKKwlGV19TVEFURV9CT09USU5HLAorCUZXX1NUQVRFX1JFQURZLAorCUZXX1NUQVRFX1JFU0VULAorCUZXX1NUQVRFX1JFU0VUVElORywKK307CisKK3N0cnVjdCBzdGxjNDV4eCB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19yZXNldDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcmtfdHhfdGltZW91dDsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKKworCisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwlpbnQgY2hhbm5lbDsKKworCXU4ICpjYWxfcnNzaTsKKwl1OCAqY2FsX2NoYW5uZWxzOworCisJZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKKworCXNwaW5sb2NrX3QgdHhfbG9jazsKKworCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB0eGJ1ZmZlcjsKKworCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOworCisJLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KKwlpbnQgdHhfcXVldWVfc3RvcHBlZDsKKworCS8qIHByb3RlY3RlZCBieSBtdXRleCAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHhfc2VudDsKKworCWludCB0eF9mcmFtZXM7CisKKwl1OCAqZnc7CisJaW50IGZ3X2xlbjsKKworCWJvb2wgcHNtOworCWJvb2wgYXNzb2NpYXRlZDsKKwlpbnQgYWlkOworCWJvb2wgcHNwb2xsaW5nOworfTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVkYjgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApAQCAtMCwwICsxLDQzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVGhpcyBpcyB0aGUgTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MC4gICAgICAgIAkqCisqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAgICAqCisqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAqCisqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgkqCisqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqCisqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgkqCisqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqCisqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqCisqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fbG1hY19oX18KKyNkZWZpbmUgX19sbWFjX2hfXworCisjZGVmaW5lIExNX1RPUF9WQVJJQU5UICAgICAgMHgwNTA2CisjZGVmaW5lIExNX0JPVFRPTV9WQVJJQU5UICAgMHgwNTA2CisKKy8qCisgKiBMTUFDIC0gVU1BQyBpbnRlcmZhY2UgZGVmaW5pdGlvbjoKKyAqLworCisjZGVmaW5lIExNX0ZMQUdfQ09OVFJPTCAgICAgMHg4MDAwCisjZGVmaW5lIExNX0ZMQUdfQUxJR04gICAgICAgMHg0MDAwCisKKyNkZWZpbmUgTE1fQ1RSTF9PUFNFVCAgICAgICAweDAwMDEKKworI2RlZmluZSBMTV9PVVRfUFJPTUlTQyAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9PVVRfVElNRVNUQU1QICAgIDB4MDAwMgorI2RlZmluZSBMTV9PVVRfU0VRTlIgICAgICAgIDB4MDAwNAorI2RlZmluZSBMTV9PVVRfQlVSU1QgICAgICAgIDB4MDAxMAorI2RlZmluZSBMTV9PVVRfTk9DQU5DRUwgICAgIDB4MDAyMAorI2RlZmluZSBMTV9PVVRfQ0xFQVJUSU0gICAgIDB4MDA0MAorI2RlZmluZSBMTV9PVVRfSElUQ0hISUtFICAgIDB4MDA4MAorI2RlZmluZSBMTV9PVVRfQ09NUFJFU1MgICAgIDB4MDEwMAorI2RlZmluZSBMTV9PVVRfQ09OQ0FUICAgICAgIDB4MDIwMAorI2RlZmluZSBMTV9PVVRfUENTX0FDQ0VQVCAgIDB4MDQwMAorI2RlZmluZSBMTV9PVVRfV0FJVEVPU1AgICAgIDB4MDgwMAorCisKKyNkZWZpbmUgTE1fQUxPRlRfU1AgICAgICAgICAweDEwCisjZGVmaW5lIExNX0FMT0ZUX0NUUyAgICAgICAgMHgyMAorI2RlZmluZSBMTV9BTE9GVF9SVFMgICAgICAgIDB4NDAKKyNkZWZpbmUgTE1fQUxPRlRfTUFTSyAgICAgICAweDFmCisjZGVmaW5lIExNX0FMT0ZUX1JBVEUgICAgICAgMHgwZgorCisjZGVmaW5lIExNX0lOX0ZDU19HT09EICAgICAgMHgwMDAxCisjZGVmaW5lIExNX0lOX01BVENIX01BQyAgICAgMHgwMDAyCisjZGVmaW5lIExNX0lOX01DQkMgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX0lOX0JFQUNPTiAgICAgICAgMHgwMDA4CisjZGVmaW5lIExNX0lOX01BVENIX0JTUyAgICAgMHgwMDEwCisjZGVmaW5lIExNX0lOX0JDQVNUX0JTUyAgICAgMHgwMDIwCisjZGVmaW5lIExNX0lOX0RBVEEgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIExNX0lOX1RSVU5DQVRFRCAgICAgMHgwMDgwCisKKyNkZWZpbmUgTE1fSU5fVFJBTlNQQVJFTlQgICAweDAyMDAKKworI2RlZmluZSBMTV9RVUVVRV9CRUFDT04gICAgIDAKKyNkZWZpbmUgTE1fUVVFVUVfU0NBTiAgICAgICAxCisjZGVmaW5lIExNX1FVRVVFX01HVCAgICAgICAgMgorI2RlZmluZSBMTV9RVUVVRV9NQ0JDICAgICAgIDMKKyNkZWZpbmUgTE1fUVVFVUVfREFUQSAgICAgICA0CisjZGVmaW5lIExNX1FVRVVFX0RBVEEwICAgICAgNAorI2RlZmluZSBMTV9RVUVVRV9EQVRBMSAgICAgIDUKKyNkZWZpbmUgTE1fUVVFVUVfREFUQTIgICAgICA2CisjZGVmaW5lIExNX1FVRVVFX0RBVEEzICAgICAgNworCisjZGVmaW5lIExNX1NFVFVQX0lORlJBICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9TRVRVUF9JQlNTICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTE1fU0VUVVBfVFJBTlNQQVJFTlQgICAgMHgwMDA4CisjZGVmaW5lIExNX1NFVFVQX1BST01JU0NVT1VTICAgIDB4MDAxMAorI2RlZmluZSBMTV9TRVRVUF9ISUJFUk5BVEUgICAgICAweDAwMjAKKyNkZWZpbmUgTE1fU0VUVVBfTk9BQ0sgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIExNX1NFVFVQX1JYX0RJU0FCTEVEICAgIDB4MDA4MAorCisjZGVmaW5lIExNX0FOVEVOTkFfMCAgICAgICAgICAgIDAKKyNkZWZpbmUgTE1fQU5URU5OQV8xICAgICAgICAgICAgMQorI2RlZmluZSBMTV9BTlRFTk5BX0RJVkVSU0lUWSAgICAyCisKKyNkZWZpbmUgTE1fVFhfRkFJTEVEICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIExNX1RYX1BTTSAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBMTV9UWF9QU01fQ0FOQ0VMTEVECTB4MDAwNAorCisjZGVmaW5lIExNX1NDQU5fRVhJVCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9TQ0FOX1RSQVAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTE1fU0NBTl9BQ1RJVkUgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX1NDQU5fRklMVEVSICAgICAgICAgIDB4MDAwOAorCisjZGVmaW5lIExNX1BTTSAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9QU01fRFRJTSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTE1fUFNNX01DQkMgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX1BTTV9DSEVDS1NVTSAgICAgICAgIDB4MDAwOAorI2RlZmluZSBMTV9QU01fU0tJUF9NT1JFX0RBVEEgICAweDAwMTAKKyNkZWZpbmUgTE1fUFNNX0JFQUNPTl9USU1FT1VUICAgMHgwMDIwCisjZGVmaW5lIExNX1BTTV9IRk9TTEVFUCAgICAgICAgIDB4MDA0MAorI2RlZmluZSBMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCAweDAwODAKKyNkZWZpbmUJTE1fUFNNX0xQSVQJCTB4MDEwMAorI2RlZmluZSBMTV9QU01fQkZfVUNBU1RfU0tJUCAgICAweDAyMDAKKyNkZWZpbmUgTE1fUFNNX0JGX01DQVNUX1NLSVAgICAgMHgwNDAwCisKKy8qIGhmb3NsZWVwICovCisjZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fTUFTSyAoTE1fUFNNX0FVVE9TV0lUQ0hfU0xFRVAgfCBMTV9QU01fSEZPU0xFRVApCisjZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fU0hJRlQgICAgICAgNgorLyogaGZvc2xlZXBlbmQgKi8KKyNkZWZpbmUgTE1fUFNNX0JGX09QVElPTl9NQVNLIChMTV9QU01fQkZfTUNBU1RfU0tJUCB8IExNX1BTTV9CRl9VQ0FTVF9TS0lQKQorI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX1NISUZUICA5CisKKworI2RlZmluZSBMTV9QUklWQUNDX1dFUCAgICAgICAgICAweDAxCisjZGVmaW5lIExNX1BSSVZBQ0NfVEtJUCAgICAgICAgIDB4MDIKKyNkZWZpbmUgTE1fUFJJVkFDQ19NSUNIQUVMICAgICAgMHgwNAorI2RlZmluZSBMTV9QUklWQUNDX0NDWF9LUCAgICAgICAweDA4CisjZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX01JQyAgICAgIDB4MTAKKyNkZWZpbmUgTE1fUFJJVkFDQ19BRVNfQ0NNUCAgICAgMHgyMAorCisvKiBzaXplIG9mIHNfbG1fZGVzY3IgaW4gd29yZHMgKi8KKyNkZWZpbmUgTE1fREVTQ1JfU0laRV9XT1JEUyAgICAgMTEKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKK2VudW0geworICAgIExNX01PREVfQ0xJRU5UID0gMCwKKyAgICBMTV9NT0RFX0FQCit9OworCitzdHJ1Y3Qgc19sbV9kZXNjciB7CisgICAgdWludDE2X3QgbW9kZXM7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDMyX3QgYnVmZmVyX3N0YXJ0OworICAgIHVpbnQzMl90IGJ1ZmZlcl9lbmQ7CisgICAgdWludDhfdCBoZWFkZXI7CisgICAgdWludDhfdCB0cmFpbGVyOworICAgIHVpbnQ4X3QgdHhfcXVldWVzOworICAgIHVpbnQ4X3QgdHhfZGVwdGg7CisgICAgdWludDhfdCBwcml2YWN5OworICAgIHVpbnQ4X3Qgcnhfa2V5Y2FjaGU7CisgICAgdWludDhfdCB0aW1fc2l6ZTsKKyAgICB1aW50OF90IHBhZDE7CisgICAgdWludDhfdCByYXRlc1sxNl07CisgICAgdWludDMyX3QgbGluazsKKwl1aW50MTZfdCBtdHU7Cit9OworCisKK3N0cnVjdCBzX2xtX2NvbnRyb2wgeworICAgIHVpbnQxNl90IGZsYWdzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBoYW5kbGU7CisgICAgdWludDE2X3Qgb2lkOworICAgIHVpbnQxNl90IHBhZDsKKyAgICAvKiB1aW50OF90IGRhdGFbXTsgKi8KK307CisKK2VudW0geworICAgIExNX1BSSVZfTk9ORSA9IDAsCisgICAgTE1fUFJJVl9XRVAsCisgICAgTE1fUFJJVl9US0lQLAorICAgIExNX1BSSVZfVEtJUE1JQ0hBRUwsCisgICAgTE1fUFJJVl9DQ1hfV0VQTUlDLAorICAgIExNX1BSSVZfQ0NYX0tQTUlDLAorICAgIExNX1BSSVZfQ0NYX0tQLAorICAgIExNX1BSSVZfQUVTX0NDTVAKK307CisKK2VudW0geworICAgIExNX0RFQ1JZUFRfTk9ORSwKKyAgICBMTV9ERUNSWVBUX09LLAorICAgIExNX0RFQ1JZUFRfTk9LRVksCisgICAgTE1fREVDUllQVF9OT01JQ0hBRUwsCisgICAgTE1fREVDUllQVF9OT0NLSVBNSUMsCisgICAgTE1fREVDUllQVF9GQUlMX1dFUCwKKyAgICBMTV9ERUNSWVBUX0ZBSUxfVEtJUCwKKyAgICBMTV9ERUNSWVBUX0ZBSUxfTUlDSEFFTCwKKyAgICBMTV9ERUNSWVBUX0ZBSUxfQ0tJUEtQLAorICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQTUlDLAorICAgIExNX0RFQ1JZUFRfRkFJTF9BRVNDQ01QCit9OworCitzdHJ1Y3Qgc19sbV9kYXRhX291dCB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGhhbmRsZTsKKyAgICB1aW50MTZfdCBhaWQ7CisgICAgdWludDhfdCBydHNfcmV0cmllczsKKyAgICB1aW50OF90IHJldHJpZXM7CisgICAgdWludDhfdCBhbG9mdFs4XTsKKyAgICB1aW50OF90IGFsb2Z0X2N0cmw7CisgICAgdWludDhfdCBjcnlwdF9vZmZzZXQ7CisgICAgdWludDhfdCBrZXl0eXBlOworICAgIHVpbnQ4X3Qga2V5bGVuOworICAgIHVpbnQ4X3Qga2V5WzE2XTsKKyAgICB1aW50OF90IHF1ZXVlOworICAgIHVpbnQ4X3QgYmFja2xvZzsKKyAgICB1aW50MTZfdCBkdXJhdGlvbnNbNF07CisgICAgdWludDhfdCBhbnRlbm5hOworICAgIHVpbnQ4X3QgY3RzOworICAgIGludDE2X3QgcG93ZXI7CisgICAgdWludDhfdCBwYWRbMl07CisgICAgLyp1aW50OF90IGRhdGFbXTsqLworfTsKKworI2RlZmluZSBMTV9SQ1BJX0lOVkFMSUQgICAgICAgICAoMHhmZikKKworc3RydWN0IHNfbG1fZGF0YV9pbiB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKKyAgICB1aW50OF90IGFudGVubmE7CisgICAgdWludDhfdCByYXRlOworICAgIHVpbnQ4X3QgcmNwaTsKKyAgICB1aW50OF90IHNxOworICAgIHVpbnQ4X3QgZGVjcnlwdDsKKyAgICB1aW50OF90IHJzc2lfcmF3OworICAgIHVpbnQzMl90IGNsb2NrWzJdOworICAgIC8qdWludDhfdCBkYXRhW107Ki8KK307CisKK3VuaW9uIHVfbG1fZGF0YSB7CisgICAgc3RydWN0IHNfbG1fZGF0YV9vdXQgb3V0OworICAgIHN0cnVjdCBzX2xtX2RhdGFfaW4gaW47Cit9OworCitlbnVtIHsKKyAgICBMTV9PSURfU0VUVVAJPSAwLAorICAgIExNX09JRF9TQ0FOCQk9IDEsCisgICAgTE1fT0lEX1RSQVAJCT0gMiwKKyAgICBMTV9PSURfRURDRgkJPSAzLAorICAgIExNX09JRF9LRVlDQUNIRQk9IDQsCisgICAgTE1fT0lEX1BTTQkJPSA2LAorICAgIExNX09JRF9UWENBTkNFTAk9IDcsCisgICAgTE1fT0lEX1RYCQk9IDgsCisgICAgTE1fT0lEX0JVUlNUCT0gOSwKKyAgICBMTV9PSURfU1RBVFMJPSAxMCwKKyAgICBMTV9PSURfTEVECQk9IDEzLAorICAgIExNX09JRF9USU1FUgk9IDE1LAorICAgIExNX09JRF9OQVYJCT0gMjAsCisgICAgTE1fT0lEX1BDUwkJPSAyMiwKKyAgICBMTV9PSURfQlRfQkFMQU5DRVIgID0gMjgsCisgICAgTE1fT0lEX0dST1VQX0FERFJFU1NfVEFCTEUJPSAzMCwKKyAgICBMTV9PSURfQVJQVEFCTEUgICAgID0gMzEsCisgICAgTE1fT0lEX0JUX09QVElPTlMgPSAzNQorfTsKKworZW51bSB7CisgICAgTE1fRlJPTlRFTkRfVU5LTk9XTiA9IDAsCisgICAgTE1fRlJPTlRFTkRfRFVFVFRFMywKKyAgICBMTV9GUk9OVEVORF9EVUVUVEUyLAorICAgIExNX0ZST05URU5EX0ZSSVNCRUUsCisgICAgTE1fRlJPTlRFTkRfQ1JPU1NCT1csCisgICAgTE1fRlJPTlRFTkRfTE9OR0JPVworfTsKKworCisjZGVmaW5lIElOVkFMSURfTFBGX0JBTkRXSURUSCAgIDB4ZmZmZgorI2RlZmluZSBJTlZBTElEX09TQ19TVEFSVF9ERUxBWSAweGZmZmYKKworc3RydWN0IHNfbG1vX3NldHVwIHsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1aW50OF90ICBtYWNhZGRyWzZdOworICAgIHVpbnQ4X3QgIGJzc2lkWzZdOworICAgIHVpbnQ4X3QgIGFudGVubmE7CisgICAgdWludDhfdCAgcnhfYWxpZ247CisgICAgdWludDMyX3QgcnhfYnVmZmVyOworICAgIHVpbnQxNl90IHJ4X210dTsKKyAgICB1aW50MTZfdCBmcm9udGVuZDsKKyAgICB1aW50MTZfdCB0aW1lb3V0OworICAgIHVpbnQxNl90IHRydW5jYXRlOworICAgIHVpbnQzMl90IGJyYXRlbWFzazsKKyAgICB1aW50OF90ICBzYnNzX29mZnNldDsKKyAgICB1aW50OF90ICBtY2FzdF93aW5kb3c7CisgICAgdWludDhfdCAgcnhfcnNzaV90aHJlc2hvbGQ7CisgICAgdWludDhfdCAgcnhfZWRfdGhyZXNob2xkOworICAgIHVpbnQzMl90IHJlZl9jbG9jazsKKyAgICB1aW50MTZfdCBscGZfYmFuZHdpZHRoOworICAgIHVpbnQxNl90IG9zY19zdGFydF9kZWxheTsKK307CisKKworc3RydWN0IHNfbG1vX3NjYW4geworICAgIHVpbnQxNl90IGZsYWdzOworICAgIHVpbnQxNl90IGR3ZWxsOworICAgIHVpbnQ4X3QgY2hhbm5lbFsyOTJdOworICAgIHVpbnQzMl90IGJyYXRlbWFzazsKKyAgICB1aW50OF90ICBhbG9mdFs4XTsKKyAgICB1aW50OF90ICByc3NpY2FsWzhdOworfTsKKworCitlbnVtIHsKKyAgICBMTV9UUkFQX1NDQU4gPSAwLAorICAgIExNX1RSQVBfVElNRVIsCisgICAgTE1fVFJBUF9CRUFDT05fVFgsCisgICAgTE1fVFJBUF9GQUFfUkFESU9fT04sCisgICAgTE1fVFJBUF9GQUFfUkFESU9fT0ZGLAorICAgIExNX1RSQVBfUkFEQVIsCisgICAgTE1fVFJBUF9OT19CRUFDT04sCisgICAgTE1fVFJBUF9UQlRULAorICAgIExNX1RSQVBfU0NPX0VOVEVSLAorICAgIExNX1RSQVBfU0NPX0VYSVQKK307CisKK3N0cnVjdCBzX2xtb190cmFwIHsKKyAgICB1aW50MTZfdCBldmVudDsKKyAgICB1aW50MTZfdCBmcmVxdWVuY3k7Cit9OworCitzdHJ1Y3Qgc19sbW9fdGltZXIgeworICAgIHVpbnQzMl90IGludGVydmFsOworfTsKKworc3RydWN0IHNfbG1vX25hdiB7CisgICAgdWludDMyX3QgcGVyaW9kOworfTsKKworCitzdHJ1Y3Qgc19sbW9fZWRjZl9xdWV1ZTsKKworc3RydWN0IHNfbG1vX2VkY2YgeworICAgIHVpbnQ4X3QgIGZsYWdzOworICAgIHVpbnQ4X3QgIHNsb3R0aW1lOworICAgIHVpbnQ4X3QgIHNpZnM7CisgICAgdWludDhfdCAgZW9mcGFkOworICAgIHN0cnVjdCBzX2xtb19lZGNmX3F1ZXVlIHsKKwkgICAgdWludDhfdCAgYWlmczsKKwkgICAgdWludDhfdCAgcGFkMDsKKwkgICAgdWludDE2X3QgY3dtaW47CisJICAgIHVpbnQxNl90IGN3bWF4OworCSAgICB1aW50MTZfdCB0eG9wOworICAgIH0gcXVldWVzWzhdOworICAgIHVpbnQ4X3QgIG1hcHBpbmdbNF07CisgICAgdWludDE2X3QgbWF4YnVyc3Q7CisgICAgdWludDE2X3Qgcm91bmRfdHJpcF9kZWxheTsKK307CisKK3N0cnVjdCBzX2xtb19rZXljYWNoZSB7CisgICAgdWludDhfdCBlbnRyeTsKKyAgICB1aW50OF90IGtleWlkOworICAgIHVpbnQ4X3QgYWRkcmVzc1s2XTsKKyAgICB1aW50OF90IHBhZFsyXTsKKyAgICB1aW50OF90IGtleXR5cGU7CisgICAgdWludDhfdCBrZXlsZW47CisgICAgdWludDhfdCBrZXlbMjRdOworfTsKKworCitzdHJ1Y3Qgc19sbV9pbnRlcnZhbDsKKworc3RydWN0IHNfbG1vX3BzbSB7CisgICAgdWludDE2X3QgICAgZmxhZ3M7CisgICAgdWludDE2X3QgICAgYWlkOworICAgIHN0cnVjdCBzX2xtX2ludGVydmFsIHsKKwkgICAgdWludDE2X3QgaW50ZXJ2YWw7CisJICAgIHVpbnQxNl90IHBlcmlvZHM7CisgICAgfSBpbnRlcnZhbHNbNF07CisgICAgLyogdWludDE2X3QgICAgcGFkOyAqLworICAgIHVpbnQ4X3QgICAgIGJlYWNvbl9yY3BpX3NraXBfbWF4OworICAgIHVpbnQ4X3QgICAgIHJjcGlfZGVsdGFfdGhyZXNob2xkOworICAgIHVpbnQ4X3QgICAgIG5yOworICAgIHVpbnQ4X3QgICAgIGV4Y2x1ZGVbMV07Cit9OworCisjZGVmaW5lIE1DX0ZJTFRFUl9BRERSRVNTX05VTSAgIDQKKworc3RydWN0IHNfbG1vX2dyb3VwX2FkZHJlc3NfdGFibGUgeworICAgIHVpbnQxNl90ICAgIGZpbHRlcl9lbmFibGU7CisgICAgdWludDE2X3QgICAgbnVtX2FkZHJlc3M7CisgICAgdWludDhfdCAgICAgbWFjYWRkcl9saXN0W01DX0ZJTFRFUl9BRERSRVNTX05VTV1bNl07Cit9OworCitzdHJ1Y3Qgc19sbW9fdHhjYW5jZWwgeworICAgIHVpbnQzMl90IGFkZHJlc3NbMV07Cit9OworCisKK3N0cnVjdCBzX2xtb190eCB7CisgICAgdWludDhfdCAgZmxhZ3M7CisgICAgdWludDhfdCAgcmV0cmllczsKKyAgICB1aW50OF90ICByY3BpOworICAgIHVpbnQ4X3QgIHNxOworICAgIHVpbnQxNl90IHNlcWN0cmw7CisgICAgdWludDhfdCAgYW50ZW5uYTsKKyAgICB1aW50OF90ICBwYWQ7Cit9OworCitzdHJ1Y3Qgc19sbW9fYnVyc3QgeworICAgIHVpbnQ4X3QgIGZsYWdzOworICAgIHVpbnQ4X3QgIHF1ZXVlOworICAgIHVpbnQ4X3QgIGJhY2tsb2c7CisgICAgdWludDhfdCAgcGFkOworICAgIHVpbnQxNl90IGR1cmF0aW9uc1szMl07Cit9OworCitzdHJ1Y3Qgc19sbW9fc3RhdHMgeworICAgIHVpbnQzMl90IHZhbGlkOworICAgIHVpbnQzMl90IGZjczsKKyAgICB1aW50MzJfdCBhYm9ydDsKKyAgICB1aW50MzJfdCBwaHlhYm9ydDsKKyAgICB1aW50MzJfdCBydHNfc3VjY2VzczsKKyAgICB1aW50MzJfdCBydHNfZmFpbDsKKyAgICB1aW50MzJfdCB0aW1lc3RhbXA7CisgICAgdWludDMyX3QgdGltZV90eDsKKyAgICB1aW50MzJfdCBub2lzZWZsb29yOworICAgIHVpbnQzMl90IHNhbXBsZV9ub2lzZVs4XTsKKyAgICB1aW50MzJfdCBzYW1wbGVfY2NhOworICAgIHVpbnQzMl90IHNhbXBsZV90eDsKK307CisKKworc3RydWN0IHNfbG1vX2xlZCB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbWFza1syXTsKKyAgICB1aW50MTZfdCBkZWxheS8qWzJdKi87Cit9OworCisKK3N0cnVjdCBzX2xtb19idF9iYWxhbmNlciB7CisgICAgdWludDE2X3QgcHJpb190aHJlc2g7CisgICAgdWludDE2X3QgYWNsX3RocmVzaDsKK307CisKKworc3RydWN0IHNfbG1vX2FycF90YWJsZSB7CisgICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKKyAgICB1aW50MzJfdCAgICBpcGFkZHI7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYgLyogX19sbWFjX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnCmluZGV4IDZlNmNmMGIuLmM1Y2JkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWcKQEAgLTgsNCArOCw0IEBACiAJICAxMEdiZSBuZXR3b3JrIGNhcmRzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKLQkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeGcuCisJICBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3hnX25pYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL01ha2VmaWxlCmluZGV4IGVjNDhmYWEuLjhlMDUzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpAQCAtMSArMSwzIEBACi1vYmotJChDT05GSUdfU1hHKQkrPSBzeGcubworb2JqLSQoQ09ORklHX1NYRykJKz0gc3hnX25pYy5vCisKK3N4Z19uaWMteSA6PSBzeGcubyBzeGdfZXRodG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODY1YmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDg1NCArMCwwIEBACi0jZGVmaW5lIFNBSEFSQV9VQ09ERV9WRVJTX1NUUklORwkiJFJldmlzaW9uOiAxLjEgJCIKLSNkZWZpbmUgU0FIQVJBX1VDT0RFX1ZFUlNfREFURSAgCSIkRGF0ZTogMjAwOC8wNi8yNyAxMjo1ODoyNyAkIgotI2RlZmluZSBTQUhBUkFfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgdTMyIFNOdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgU1NlY3Rpb25TaXplW10gPQotewotCTB4MDAwMGUyNzQsIDB4MDAwMDAwMGMsCi19OwotCi1zdGF0aWMgdTMyIFNTZWN0aW9uU3RhcnRbXSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgwMDAwMWZmZiwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFNhaGFyYVVDb2RlWzJdWzU3OTcyXSA9Ci17Ci17Ci0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHg0ZCwgMHgyOSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGIyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDQwLCAweDJiLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgxZSwgMHg4MCwgMHhlOSwgMHg5YSwKLQkweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMywgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAzLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHg1ZiwgMHgzZiwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweGZmLCAweGZjLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDhhLCAweDExLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweGZkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhjMCwgMHgwMSwgMHgzMiwKLQkweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDRkLCAweDI4LCAweDFhLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NWYsIDB4MGEsIDB4ZjYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGUsIDB4ODAsIDB4MTgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhjMCwgMHgyMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NSwgMHgyMSwgMHg5MCwKLQkweDAwLCAweDAwLCAweDRiLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAyLCAweGMwLCAweDIyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHg5ZCwKLQkweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg5MCwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAwLCAweGU5LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MWUsIDB4YzAsIDB4ZTcsIDB4OWEsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI4LCAweDAxLCAweDAwLCAweDk0LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDE3LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NjksIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4MTgsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgxLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmIsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHg1NywgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDVhLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGIwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDYwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhmYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHhiZCwKLQkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEzLCAweDQwLCAweDAxLCAweDk5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiZCwKLQkweDAwLCAweDAwLCAweDc2LCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCi0JMHg3NiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDZiLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODUsIDB4ODAsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDYzLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhiOCwgMHhmZiwgMHg4NSwgMHgzMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDIxLCAweGZmLCAweDM4LAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NGQsIDB4ODAsIDB4M2EsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHgwZCwgMHg4MCwgMHgzYSwKLQkweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ4LCAweDQxLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODYsIDB4OTgsIDB4NjcsIDB4YzAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDhiLCAweDgwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHg4MCwgMHg3MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDkwLCAweDk5LCAweDg2LCAweDJjLCAweDI4LCAweGRlLCAweDgyLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MTgsIDB4YzAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHhjNSwgMHg4MiwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGM1LCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg0MCwgMHgwMSwgMHg5OSwKLQkweDA4LCAweDAwLCAweDM4LCAweDAzLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDUsIDB4ODAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDNkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDNhLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4M2EsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHg5MCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg4MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMiwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwZCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCi0JMHg4NywgMHgwMCwgMHg5NSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg3ZCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDlhLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MGYsIDB4OTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODUsIDB4YjAsCi0JMHgxMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNiwgMHhiOCwKLQkweDAxLCAweDAwLCAweGE1LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAotCTB4ODcsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMCwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDk4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4YzEsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweGE4LCAweDQyLCAweDNkLCAweDcyLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTgsIDB4OTksIDB4YjEsIDB4ZjIsIDB4YzAsIDB4N2MsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YzEsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4ODAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4Y2QsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweDMwLAotCTB4ODAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHhhMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweGZjLCAweGI2LAotCTB4ODcsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhiOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHg2MSwgMHgxNiwgMHgzOCwKLQkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YjgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweGUxLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjOCwgMHhjMSwgMHg4MiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDAwLCAweDA0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YTgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNywgMHgzOCwKLQkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwOCwgMHg4OSwgMHg4ZCwgMHg3MiwgMHgzMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE5LCAweGRjLCAweDE3LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4OTAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHg4NiwgMHg4MCwgMHgyMiwgMHgyNCwgMHg3YywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHhkMiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCi0JMHgwMCwgMHgwMCwgMHhkZCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4ZTAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhmNCwgMHgwMCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MjksIDB4YzEsIDB4NzIsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHg5MCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweGMxLCAweDgyLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDAsIDB4ODAsIDB4OTcsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhhMCwgMHgwNCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4ODEsIDB4ODAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQ1LCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4MDAsIDB4MjgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDU5LCAweGMwLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NzgsIDB4MTksIDB4YzAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwNCwgMHgwMSwgMHhlYywgMHgwNiwgMHhiZCwgMHg5NywgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweGY0LCAweDFlLCAweDQwLCAweGVmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4MDksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweGMwLCAweDI5LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4M2QsIDB4OTAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmNCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4MywgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDJiLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4M2QsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHg3MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDI3LCAweDAxLCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4MjgsIDB4MDEsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhjZCwgMHg4NSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweGJkLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg4MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDNkLCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NzIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHgwNCwgMHgzOCwgMHgwMCwgMHg3OCwgMHhkOSwgMHhjNSwgMHg3MiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDk3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgzYywgMHhiOCwgMHgxYywgMHgxNywgMHgzOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDI4LCAweGMwLCAweDgzLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4MDgsIDB4YzAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhiOCwgMHhlMCwgMHg4MywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDI5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg3OCwgMHhhMCwgMHg4MSwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDEsIDB4MDYsIDB4M2EsIDB4MDAsIDB4ODAsIDB4YjIsIDB4NWMsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg4OSwgMHhjMSwgMHg3MiwgMHgzNywKLQkweDA3LCAweDAwLCAweDUwLCAweDAxLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDA0LCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweGQ3LCAweGUwLCAweDcyLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDY0LCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg2MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDcsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDIsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweGEwLCAweDgxLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDcxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDczLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzMsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDEsIDB4MjksIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxMCwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OGMsIDB4ZjcsIDB4ZTAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MjcsIDB4ZTQsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDg3LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHg4MywgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHhmMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDA4LCAweDM4LCAweDgxLCAweDgwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MWUsIDB4NDAsIDB4ZWYsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDNiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MDEsIDB4YjksIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4M2IsIDB4M2EsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgwMCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YmEsIDB4ODMsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhiZCwgMHg5NywgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGY0LCAweGJkLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4OTcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZSwgMHg4MCwgMHg4MywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDdhLCAweGU4LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZTgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHhjMCwgMHgyOSwgMHgzNywKLQkweDYwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBkLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZTgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhlOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgwOCwgMHg4MCwgMHg3MiwgMHgzMiwKLQkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDU0LCAweGE4LCAweDVjLCAweDE2LCAweDM4LAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmMsIDB4YTgsIDB4ZGMsIDB4MTYsIDB4MzgsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4OCwgMHg0ZCwgMHg4NSwgMHgzYSwKLQkweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MTQsIDB4YTksIDB4OWMsIDB4ODcsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDcyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgxOCwgMHg4MCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweGJiLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg3OCwgMHhjMCwgMHgyOSwgMHgzNywKLQkweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGEwLCAweDgxLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGQ4LCAweDYwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGQwLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGRjLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweDQwLCAweDg1LCAweDNhLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyOCwgMHgwMCwgMHg4NCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MTQsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODgsIDB4MGQsIDB4ODQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYxLCAweDg1LCAweDNhLAotCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhkOCwgMHg2MCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKLQkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweGMwLCAweDgyLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YjgsIDB4NjAsIDB4ODUsIDB4M2MsCi0JMHgwNCwgMHgwMCwgMHhmMiwgMHgwMSwgMHg4MSwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDI4LCAweGY4LCAweGEwLCAweDc1LCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzQsIDB4MDgsIDB4ODAsIDB4NzUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOCwgMHhmOCwgMHhhMCwgMHg3NSwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA4LCAweGExLCAweDgyLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjIsIDB4NjAsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDdjLCAweDA4LCAweDgwLCAweDc1LCAweDMyLAotCTB4MDksIDB4MDAsIDB4ZjksIDB4MDEsIDB4MDQsIDB4MWEsIDB4MDAsIDB4NzAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4YjAsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHg4NywgMHhjZCwgMHg3NCwgMHgzMSwKLQkweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDMxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MjgsIDB4NDAsIDB4ODYsIDB4M2EsCi0JMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDgyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGNkLCAweDg1LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTgsIDB4YTEsIDB4ODIsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHhjMCwgMHg4MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweGUxLCAweDgxLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1OCwgMHgwNywgMHg0MCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDhmLCAweDAxLCAweDAwLCAweDc0LCAweDE4LCAweDQwLCAweDg3LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHhmNywgMHhhMCwgMHg4NiwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweGEwLCAweDg2LCAweDNhLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTgsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHg0MCwgMHg4NSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDUwLCAweDA3LCAweDgwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHhjNywgMHhlMSwgMHg3NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDc4LCAweGEwLCAweDg0LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZjksIDB4YTEsIDB4ODYsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDU4LCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTgsIDB4YTEsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDYwLCAweDg1LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDU3LCAweDIxLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4NjEsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjEsIDB4ODAsIDB4M2EsCi0JMHgwNywgMHgwMCwgMHgyNywgMHgwMiwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwMiwgMHhiOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTAsIDB4ODEsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHgzYywKLQkweDAwLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDMyLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDNkLCAweDAyLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweGMwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzEsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDcxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDIsIDB4OTAsIDB4MTksIDB4MDAsIDB4MDQsIDB4ZTksIDB4NWMsIDB4OTAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA3LCAweDgwLCAweDg2LCAweDMyLAotCTB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhjLCAweDA3LCAweDQwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDUsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDViLCAweDAyLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDI3LCAweGU0LCAweDgyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHg1YiwgMHgwMiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhmZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDAxLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQ1LCAweDgxLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg3MiwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4M2EsCi0JMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4NmUsIDB4YmQsCi0JMHg3NywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHgwZCwgMHg5MCwgMHgzYSwKLQkweDJlLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyYiwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDM3LCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MzgsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg0MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA1LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDA0LCAweDAxLCAweDE0LCAweDU5LCAweGMwLCAweDZlLCAweGQ3LAotCTB4MDIsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MDQsIDB4YjgsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MSwgMHgwMiwgMHhiNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDAwLCAweDgwLCAweGEwLCAweDM2LCAweDBiLCAweDZhLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDg1LCAweDJmLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKLQkweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4NmUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAzLCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAotCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKLQkweDFiLCAweDAwLCAweGFmLCAweDAyLCAweDM4LCAweDAxLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDc5LCAweDBiLCAweDE0LCAweDM4LAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4NWIsIDB4OTEsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHhiZSwgMHgwMiwgMHgzOCwgMHgyOCwgMHgwMCwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGI2LCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA4LCAweDY5LCAweDI0LCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGJhLCAweDAyLCAweDAyLCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YjksIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDBhLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MGIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwOCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKLQkweDA0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4MGMsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM5LCAweDAyLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgyMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDIxLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4YTQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDIyLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjZiwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDIwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHhiOSwKLQkweDEwLCAweDAwLCAweGQ0LCAweDAyLCAweGM1LCAweDAxLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweDk4LAotCTB4MDgsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4YjksCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDdlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNSwgMHg4MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ZmEsIDB4ODUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhmYSwgMHg4NSwgMHhiYywKLQkweDAwLCAweDAwLCAweGRmLCAweDAyLCAweDM2LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MGUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHgwMCwgMHhhOSwgMHhkYiwgMHg4NSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4OGMsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg5NCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDk4LCAweDI4LCAweDgwLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MzgsIDB4MjIsIDB4MTQsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwMiwgMHgwNCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDUsIDB4MDAsIDB4ZWUsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4ZTEsIDB4NmUsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTEsIDB4OTcsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgxNCwgMHgxMCwgMHhmNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg3MiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAyLCAweGYyLAotCTB4MGQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwOSwgMHgwMCwgMHg4MCwgMHg1MiwgMHhiZCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweGZiLCAweDAyLCAweDMzLCAweDE1LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCi0JMHgwMSwgMHgwMSwgMHgwOCwgMHgwYSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwZCwgMHg3NCwgMHgzYywKLQkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDBiLCAweDMxLCAweDAwLCAweDdjLCAweDA4LCAweDAwLCAweDc1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhmYywgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4OCwgMHgxOCwgMHgwMCwgMHg3NSwgMHg5YywKLQkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDc0LCAweDM4LCAweGEyLCAweDc1LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4ODMsIDB4MWIsIDB4MDAsIDB4NzgsIDB4MDgsIDB4YzAsIDB4NzQsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGYyLCAweDAyLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4NCwgMHhkMiwKLQkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODcsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHg5ZiwgMHg3OCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDlmLCAweDk5LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDMsIDB4OWYsIDB4NjgsIDB4MDEsIDB4NjQsIDB4ODgsIDB4NWIsIDB4ODYsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4YTQsIDB4YjIsIDB4NWIsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDE3LCAweDAzLCAweDA4LCAweDAxLCAweDAwLCAweDA0LCAweGU4LCAweGE1LCAweDc1LCAweGJjLAotCTB4MGYsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDlmLCAweDk4LCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDYsIDB4YjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzMiwgMHgwMywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAyLCAweGQ0LCAweDAxLCAweDgwLCAweDkyLCAweGZiLCAweDZlLCAweGJjLAotCTB4MTUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDFjLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NzIsIDB4NjEsIDB4ODAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDIxLCAweDAzLCAweDA2LCAweGE4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDgwLCAweGJjLAotCTB4MTMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHg5ZiwgMHhhMCwgMHgwMSwgMHg3OCwgMHgyOSwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NjAsIDB4ODAsIDB4YmMsCi0JMHgwNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKLQkweDAwLCAweGMwLCAweDI5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyOSwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg2MCwgMHg4MCwgMHhiYywKLQkweDA5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmIsIDB4MDMsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwNywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHhiYywKLQkweDFmLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MWUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTIsIDB4ZDIsCi0JMHgwZCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhmMiwKLQkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MTAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4YjgsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDFkLCAweDAwLCAweDQ5LCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGUwLCAweDAwLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgxZCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MTQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOCwgMHgwNSwgMHgyOCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgzNSwgMHgwMCwgMHg1NCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDJiLCAweDAwLCAweDlkLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVhLCAweDAzLCAweDFkLCAweDQxLCAweDAyLCAweDVjLCAweGY4LCAweDAxLCAweDY4LCAweGI0LAotCTB4NDEsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4OTEsCi0JMHgzNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweGMwLCAweDg1LCAweGQ3LAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDIsIDB4MDAsIDB4YTksIDB4ZGIsIDB4ODUsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhlMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDJmLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDMsIDB4MDYsIDB4YTksIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDlmLCAweDg4LCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDQsIDB4ZjksIDB4YmEsIDB4NmUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDE5LCAweDgwLCAweDkwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgzMCwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MTIsIDB4NzAsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgzMSwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwOCwgMHhjMCwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDgxLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MmIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHg0ZCwgMHg4MSwgMHhkNywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgwMywgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MjUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgyNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweGQ4LCAweDFlLCAweDgwLCAweGVkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDMsIDB4YjcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4YzAsIDB4ZWQsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgzYiwgMHhlZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDFlLCAweDAwLCAweGVlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MGUsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MWUsIDB4MDAsIDB4ZWIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NiwgMHhjYywgMHgwMiwgMHg4MCwgMHg2YywgMHgzMiwKLQkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCi0JMHgzNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDk5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGM1LCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgxMiwgMHhjMCwgMHgyYywgMHgzYSwKLQkweDAwLCAweDAwLCAweDk1LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHg5OSwKLQkweDAwLCAweDAwLCAweDlmLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTUsIDB4MDEsIDB4ODAsIDB4YjIsIDB4MWIsIDB4MmIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1NSwgMHgwMSwgMHg4MCwgMHhiMiwgMHgxYiwgMHgyYiwgMHhiYywKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKLQkweGIwLCAweDAzLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHg5OSwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4YWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwMywgMHg4YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNSwgMHgwMywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyYSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDg1LCAweDAxLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDBjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDYsIDB4MzIsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4YjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxNSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDFkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MzIsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDcwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDFjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgxNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE5LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4NjQsIDB4MDIsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhmYiwgMHgwMywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg5MCwgMHhiYSwKLQkweDI1LCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGYzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHg4MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDNmLCAweDgwLCAweGZjLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDAsIDB4MzgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDEzLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweGQwLCAweDEyLCAweDAwLCAweDJkLCAweGJjLAotCTB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgxMiwgMHgwMCwgMHgyZCwgMHgzYSwKLQkweDRjLCAweDAwLCAweDFhLCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDJkLCAweGJjLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YWUsIDB4MGQsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweGNjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODYsIDB4Y2MsIDB4MDcsIDB4ODAsIDB4MDAsIDB4M2EsCi0JMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDQwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjksIDB4NDAsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgyNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDk3LCAweGI2LAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4ZTUsIDB4MDAsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDI0LCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgyLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDJjLCAweDA0LCAweDhlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHgwZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDM2LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4ODAsIDB4OTcsIDB4MzQsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHg4MCwgMHg5NywgMHgzNCwKLQkweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4ZmUsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDNiLCAweDA0LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzYiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDNlLCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMiwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHgyNCwgMHgxNywgMHhiOCwKLQkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4OTcsIDB4YmMsCi0JMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweGZlLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDQ3LCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwNiwgMHgwMCwgMHg1OSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHg2NCwgMHgxNiwgMHg5OCwKLQkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgzMywgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDExLCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MzksIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHg1YSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg5MCwgMHgzYSwKLQkweDBkLCAweDAwLCAweDdjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAotCTB4MGQsIDB4MDAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCi0JMHgwZCwgMHgwMCwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKLQkweDAwLCAweDAwLCAweGEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCi0JMHgwMCwgMHgwMCwgMHhiMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGJkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKLQkweDAwLCAweDAwLCAweGQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHhkOCwgMHgwMCwgMHhmNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGZmLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOSwgMHg0MCwgMHg5MCwgMHg5NywKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA4LCAweDAwLCAweDE1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDI0LCAweDE2LCAweDk4LAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwZCwgMHgwMCwgMHgzMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKLQkweDAwLCAweDAwLCAweDMzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAotCTB4M2YsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MDAsIDB4YjAsCi0JMHgwMiwgMHgwMCwgMHg4MCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDZiLCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHhiMCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCi0JMHhiMCwgMHgwMywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDk5LAotCTB4MDAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4OTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzEsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyYiwgMHhiYywKLQkweGYxLCAweDBmLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMiwgMHgwMCwgMHg5OCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDliLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBiLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGExLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGIyLAotCTB4MWYsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDBhLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MGYsIDB4ODEsIDB4ZmMsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHgwMCwgMHg5MCwgMHgzYywKLQkweDEwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBlLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDBmLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDkwLCAweDMyLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg0MCwgMHg5MCwgMHg5YywKLQkweDAwLCAweDAwLCAweGRiLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHhlNSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgxMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDFmLCAweDQwLCAweDkwLCAweDljLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDkwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4YTQsIDB4OTcsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZSwgMHg4MCwgMHhlZSwgMHg5ZCwKLQkweDAwLCAweDAwLCAweGYyLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgxZSwgMHg0MCwgMHg5MCwgMHg5YywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDkwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODYsIDB4YzAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHgzOCwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZmEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjQsIDB4ZjYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgzZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDQwLCAweDgwLCAweGZjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3OSwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAyLCAweDAwLCAweGZjLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgxZiwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHg5OSwKLQkweGVhLCAweDA1LCAweDA1LCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDAsIDB4MTUsIDB4MzIsCi0JMHgwMCwgMHhmZSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweGYwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4OTgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwYiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHg5NSwKLQkweDM2LCAweDIzLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4ODAsIDB4MTQsIDB4MzIsCi0JMHgwMCwgMHhmOCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweGMwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4OTgsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDhmLCAweDRkLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4NjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg3YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE5LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDZmLCAweDgwLCAweGZjLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4OTAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg1ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4NDAsIDB4OTAsIDB4YjAsCi0JMHg4MCwgMHgwMSwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4ZCwgMHhmYywgMHg5MSwKLQkweDAwLCAweDAwLCAweDE5LCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDkwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4N2YsIDB4ODAsIDB4ZmMsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg3ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDFjLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4ODAsIDB4ZmMsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDIwLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDQwLCAweDkwLCAweGI2LAotCTB4ZjEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxZiwgMHg4MSwgMHhmYywgMHg5NSwKLQkweDBlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MWYsIDB4ODEsIDB4ZmMsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwMiwgMHhmNSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweGY1LCAweGJkLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MjUsIDB4ZjUsIDB4YjUsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgxZiwgMHgyNCwgMHgxNiwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDAwLCAweGY1LCAweDljLAotCTB4ODAsIDB4MDEsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ZmMsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgyYiwgMHgwNSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHhmNSwgMHgzYSwKLQkweDhjLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAzLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwNSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGU0LCAweDZlLCAweDNhLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHg2OSwgMHgwNSwgMHgxNywgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDUsIDB4MDQsIDB4MTksIDB4ODYsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNSwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKLQkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIyLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNiwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKLQkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIxLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4ZGMsCi0JMHgwMCwgMHgwMCwgMHg1MiwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDgxLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgwLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHg4MiwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MGEsIDB4MzIsCi0JMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NjksIDB4MDUsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NiwgMHgwNCwgMHgxOSwgMHg4MCwgMHg2YywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDBjLCAweGY3LCAweDdmLCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4ODYsIDB4ODAsIDB4NzIsIDB4ODIsIDB4NmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhhOCwgMHg0MiwgMHg4MCwgMHg2YywgMHgzNywKLQkweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDEyLCAweDAwLCAweDcwLCAweDM4LCAweDAyLCAweDAwLCAweDdjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzMCwgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDM0LCAweDAyLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODIsIDB4MmEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHgyZiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGEyLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2EsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4MywgMHgwNSwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHg0NiwgMHg4MCwgMHgyYSwgMHg5NiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDQ2LCAweDgwLCAweDJhLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMywgMHgwMCwgMHg4MCwgMHgwNSwgMHgyMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGMwLCAweGQzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2MsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDJmLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHhjMCwgMHhlZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDBlLCAweDgwLCAweDAyLCAweDMyLAotCTB4NDAsIDB4N2UsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwZSwgMHg4MCwgMHgwNywgMHgzMiwKLQkweDY0LCAweDAwLCAweDhmLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAotCTB4NjQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZWQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwZSwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweGEwLCAweDhjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBlLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MGUsIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZSwgMHg4MCwgMHgwMiwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDMzLCAweDdiLCAweGVjLCAweDM5LAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg2ZSwgMHhjMCwgMHhlYywgMHgzNywKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweGMwLCAweGVkLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDFjLCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MmIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgzZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDM1LCAweDAwLCAweDljLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHhjZCwgMHg4MSwgMHgzYywKLQkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDFjLCAweDAxLCAweDE0LCAweDU5LCAweGU0LCAweDZlLCAweGQ5LAotCTB4YTQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTgsIDB4MDEsIDB4ODAsIDB4OTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgyYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4MTQsIDB4NzksIDB4ZTAsIDB4NmUsIDB4ZDksCi0JMHhhNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg4MSwgMHgzYSwKLQkweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhmMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGZjLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MDUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDE3LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgyOSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDMyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4M2IsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg0NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDRkLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NTYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg1ZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NzEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDgzLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OGMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg5NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4YTcsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhiMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGI5LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4YzIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhjYiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGQ0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZGQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhlNiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGVmLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDBhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgxYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDI1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgzNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NDksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg1NywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4NTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg1NywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDVjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NjEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg2NiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDZiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3NSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDdhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4N2YsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDg5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OGUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg5MywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDk4LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDcxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3OSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDg2LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGM5LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGNjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDMxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGU4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBmLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwNywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVmLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDA4LCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAotCTB4MDgsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDA4LCAweDAwLCAweGE3LCAweDA3LCAweDFkLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDBmLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNSwKLQkweDU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHhiNCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGI3LCAweDA3LCAweGI3LCAweDEwLCAweDAyLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiYiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhmZiwgMHg4MCwgMHhmYywgMHg5NCwKLQkweDAwLCAweDAwLCAweGJjLCAweDA3LCAweDlmLCAweDk5LCAweDAwLCAweDgwLCAweDgyLCAweDFiLCAweGVlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MGUsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHg0MCwgMHgwMCwgMHhjMSwgMHgwNywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg5MSwgMHhiYywKLQkweDAwLCAweDQwLCAweGMyLCAweDA3LCAweDAwLCAweDE4LCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDJjLCAweDkyLAotCTB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg4MCwgMHgwMywgMHgzMiwKLQkweDAwLCAweDAwLCAweGM1LCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDgwLCAweDMyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDAsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDI0LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkMywgMHgwNywgMHg4MCwgMHgwZSwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg0MiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyOCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweDAxLCAweDAwLCAweDFjLCAweGQ5LCAweGMxLCAweDkxLCAweDM0LAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDM0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwZCwgMHg5MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweGQ5LCAweDA3LCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDQyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCi0JMHgwNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDksIDB4YzEsIDB4OTEsIDB4MzQsCi0JMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKLQkweDA0LCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAotCTB4MjAsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHhlYywgMHg4NiwgMHhjZCwgMHg5MSwgMHgzYSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAyLCAweGU4LCAweDg2LCAweDI0LCAweDkwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4OTYsIDB4MjQsIDB4MTQsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUzLCAweDA3LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweDgzLCAweDMyLAotCTB4MDEsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhmOSwgMHgwNywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MmMsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDJjLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YzAsIDB4OTIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweDA2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDNiLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwZiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDE3LCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAotCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHhlMSwgMHg2ZSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4NzgsIDB4Y2EsIDB4ZTksIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDUwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGUwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDNmLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgwOCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDQ2LCAweDA4LCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhlMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgxOCwgMHg4MSwgMHg4MywgMHgzNSwKLQkweDAwLCAweDAwLCAweDI4LCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDgsIDB4YTAsIDB4MjgsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDViLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MWQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgwOCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDYyLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDYyLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1ZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGUwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZhLCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDgsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDc0LCAweDA4LCAweDJhLCAweDVkLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDc0LCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKLQkweDEwLCAweDA0LCAweDc3LCAweDA4LCAweDM3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweGIxLAotCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdjLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDMsIDB4YmMsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg2NywgMHhhMSwgMHg3MywgMHgzOSwKLQkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhlMCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDJhLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDA4LCAweDFkLCAweDAwLCAweDAwLCAweDM4LCAweDE4LCAweDgxLCAweDgzLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDgsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGFlLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4YWMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKLQkweDQwLCAweDAwLCAweDljLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAotCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwOCwgMHgwMiwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4YzAsIDB4NmUsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgwMCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGI3LCAweDAxLCAweDc4LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHg0MCwgMHgwMCwgMHhhZSwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4ZmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzYywgMHgxOCwgMHgyMCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDNjLCAweDg4LCAweGRiLCAweDgzLCAweGJlLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDEsIDB4NzgsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNywgMHgyMCwgMHg3OCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDc4LCAweDAxLCAweGUwLCAweGY2LCAweDIwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjgsIDB4NjAsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDJlLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMywgMHhiYywKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDE4LCAweDAwLCAweDgwLCAweDY3LCAweGExLCAweDczLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCi0JMHgzMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGI4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDgsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweGJiLCAweDA4LCAweDA0LCAweGQxLCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MjYsIDB4YzAsIDB4NmUsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMwLCAweDA4LCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgwOCwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDM0LAotCTB4MTAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4OWEsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDk3LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDc3LCAweDEwLCAweDAwLCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDgsIDB4MjMsIDB4MjksIDB4MDIsIDB4MDQsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDA4LCAweDAwLCAweGQ4LCAweDA4LCAweDFkLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwOCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4ODcsIDB4OGQsIDB4ODUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTMsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgxMiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAxLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZGMsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTcsIDB4OTIsCi0JMHgxMiwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDM1LCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGY2LCAweDA4LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDJmLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4MDgsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDYsIDB4MDksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDA4LCAweGM5LCAweDAxLCAweGU4LCAweDA2LCAweGJiLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgzMiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAxLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4MDgsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDMyLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDEsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MTcsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDEzLCAweDA5LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4OTcsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4NzksIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlmLCAweDQxLCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDksIDB4OWYsIDB4OTgsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4MmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHhhYSwgMHgwNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDM0LAotCTB4M2EsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDQ3LCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkNSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwOSwgMHgwNCwgMHhkNCwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4MjUsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDM5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMiwgMHgwMCwgMHgzZiwgMHgwOSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MiwgMHhiZCwgMHg5NywgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDk5LCAweGIxLCAweGYyLCAweGMwLCAweDdjLCAweDMwLAotCTB4MDAsIDB4YzAsIDB4NDgsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhhMiwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4ZTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAyLCAweDAwLCAweDU5LCAweDA5LCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwOSwgMHgxMiwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU1LCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDk0LAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4NGMsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgxMiwgMHgzMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVlLCAweDA5LCAweDEyLCAweDM4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDksIDB4MTIsIDB4NDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgwOSwgMHgxMiwgMHg0OCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDYxLCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDksIDB4MTIsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgwOSwgMHgxMiwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDY0LCAweDA5LCAweDEyLCAweDI4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAzLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHgzZCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NTMsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDZhLCAweDA5LCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweDc0LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgxNCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDEwLCAweDAwLCAweDgyLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MmMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDI5LCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgzYywgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhjLCAweDA5LCAweDM4LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHg4MiwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4YzAsIDB4OTksIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4ZmEsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwOSwgMHgzOCwgMHgwMSwgMHgwMCwgMHgyYywgMHhmOCwgMHgwMSwgMHgwYiwgMHhiNCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA5LCAweDAyLCAweDBkLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzgsIDB4YzEsIDB4ODIsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDksIDB4MjcsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHgwMCwgMHgyYywgMHhlOCwgMHhjMCwgMHg4MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFiLCAweDA5LCAweDIzLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweGIyLAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgwOSwgMHgxZCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGIwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MTAsIDB4MDAsIDB4YjYsIDB4MDksIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg4ZSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OGUsIDB4MzksIDB4MDAsIDB4MDAsIDB4YjcsIDB4YzEsIDB4ODIsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweGJhLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjZSwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxYywgMHg0MCwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweGQyLCAweDAxLCAweDAwLCAweDk0LCAweDFlLCAweDQwLCAweGU5LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1MSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlNCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGUxLCAweDA5LCAweDllLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgyYSwgMHgzMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAotCTB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDBjLCAweDAwLCAweGViLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwYSwgMHgzOCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDI1LCAweDBhLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MGEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MTgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHhhNiwgMHgyMCwgMHgwMCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4ZmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAotCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBmLCAweDBhLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDExLCAweDBhLCAweDlmLCAweDAxLCAweDAwLCAweDA0LCAweDY4LCAweDYwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTgsIDB4MjAsIDB4MDAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDE0LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBkLCAweDBhLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGEwLCAweDBkLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDFmLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGEwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDI3LCAweDBhLCAweDAwLCAweDE4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDNlLCAweDUxLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHg2MCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDdiLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDNhLCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHhjMCwgMHgzZSwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGEsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDRhLCAweDBhLCAweDFmLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0YSwgMHgwYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHhmNiwgMHg2MCwgMHg4MCwgMHg5YywKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYSwgMHgyYSwgMHhhOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4NGYsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg1MiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweGMwLCAweDYxLCAweDBhLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MTgsIDB4MDAsIDB4NWEsIDB4MGEsIDB4MmUsIDB4NDksIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHg1YiwgMHgwYSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHg3NiwgMHgwMCwgMHgwMCwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MjAsIDB4ODAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCi0JMHgxYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDBjLCAweDAwLCAweGExLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDg1LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDllLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDgwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYSwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZlLCAweDBhLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDcyLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MmEsIDB4MDAsIDB4NzgsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NzgsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc4LCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDg1LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHg4MCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDgwLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg4NiwgMHgwYSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGEsIDB4M2YsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweGY4LCAweGYyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGRhLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKLQkweDAwLCAweDAwLCAweGIwLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YWUsIDB4MGEsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGE3LCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGFjLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwYSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGZhLAotCTB4MDAsIDB4MDAsIDB4OTAsIDB4MGEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGJjLCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDQwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhlMCwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMwLCAweDBhLCAweDA0LCAweDIxLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGEsIDB4MmEsIDB4MTEsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4ZTAsIDB4ODYsIDB4YmEsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweGM2LCAweDBhLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwOCwgMHgwMCwgMHhjYSwgMHgwYSwgMHgyMywgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MGEsIDB4MWQsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjZSwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGQzLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHgyMCwgMHg2ZSwgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweGE1LCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4OCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGU0LCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlNSwgMHgwYSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGVhLCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGVjLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGYzLCAweDBhLCAweDNkLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MGEsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY1LAotCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGY4LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhmZCwgMHgwYSwgMHgyOSwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDAxLCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4OWMsCi0JMHgyYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4MDUsIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAotCTB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg2MCwgMHg4MCwgMHhkOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4MTUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg2MCwgMHg4MCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyMSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjAsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgyNiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg2OCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHgxNywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDJlLCAweDBiLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDNjLCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDM0LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOCwgMHg4MCwgMHg4NywgMHhmNSwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGE1LCAweDAyLCAweDIzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgzYywgMHgwMCwgMHhhNSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHg4MiwgMHg0YiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NWMsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYiwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDM5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKLQkweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDZhLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDZlLCAweDBiLCAweDFkLCAweDIxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDcxLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4NzQsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdhLCAweDBiLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweDdjLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4OWYsIDB4ZjgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweGUwLCAweDA2LCAweGMwLCAweDg3LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhkLCAweDBiLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgzYiwgMHgwMCwgMHg4ZCwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MGIsIDB4MjcsIDB4MDksIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4YjIsCi0JMHgwMCwgMHhjMCwgMHg5NSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgyMCwgMHg4MCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg5MiwKLQkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHhjYSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwYiwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGExLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGFlLCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGIsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweGM1LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgwYiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwYiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweGQxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgwYiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHhkYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZTYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGI5LCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGIsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGY2LCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHhjMCwgMHhmNywgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MGIsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGZmLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDA3LCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweGY2LCAweDYwLCAweDgwLCAweDljLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDA2LCAweDBjLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHgwYywgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDA4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgwYywgMHgyMywgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYSwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwYywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDFjLCAweDBjLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MWMsIDB4MGMsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGMsIDB4MjksIDB4MzEsIDB4MDEsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgyYSwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGU0LCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDA5LCAweDQwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg3OCwgMHgwYiwgMHgxNiwgMHgzOCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDc4LCAweDBiLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4OCwgMHgwZCwgMHg4YiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGI0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGMsIDB4MDQsIDB4MzEsIDB4MDEsIDB4OTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAotCTB4MTgsIDB4MDAsIDB4NDMsIDB4MGMsIDB4ODYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweDNmLCAweDc4LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHgzYywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZDgsIDB4NjIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHgxYiwgMHg4OSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKLQkweDE4LCAweDAwLCAweDRlLCAweDBjLCAweDg2LCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHgzZiwgMHg3OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDQ3LCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAotCTB4YjcsIDB4MDAsIDB4NDcsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwYywgMHgyOCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweGQ4LCAweDYyLCAweDgwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1NSwgMHgwYywgMHgwMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgxOCwgMHgyMCwgMHg4OSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHg0NywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDU4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDkwLCAweDE4LCAweDIwLCAweDg5LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NDgsIDB4NjIsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg0OCwgMHg2MiwgMHg4YiwgMHhiYSwKLQkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDA4LCAweDFlLCAweGZmLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjIsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCi0JMHgxOCwgMHgwMCwgMHg4NywgMHgwYywgMHg4NiwgMHg0MCwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweGIwLAotCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MWUsIDB4ZmYsIDB4YjgsCi0JMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg3MiwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MjAsIDB4ODAsIDB4NjQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMSwgMHgwYiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDgxLCAweDBjLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDEsIDB4NzAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDkzLCAweDBjLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDFiLCAweDg5LCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKLQkweGI3LCAweDAwLCAweDVhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjcsIDB4MDAsIDB4OGMsIDB4MGMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGEyLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGMsIDB4MjMsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YjIsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDkwLCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMSwgMHg3MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDgsIDB4MDAsIDB4OTcsIDB4MGMsIDB4MjMsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDk5LCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhhZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDgyLCAweGI2LAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDY2LCAweDAwLCAweDAwLCAweDM0LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4MzksCi0JMHgxYiwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGI2LCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhiZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDFmLCAweDIwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwYywgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDgsIDB4MDgsIDB4ODAsIDB4NmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLCAweDgwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjEsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweDQ4LCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGUxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCi0JMHgwNSwgMHgwMCwgMHhkZSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHg5OCwKLQkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMSwgMHg4MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgxYSwgMHhmZiwgMHhiOCwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYwLCAweDgwLCAweDM5LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4OGMsIDB4ZTYsIDB4YTEsIDB4OTcsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4ZmUsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MGQsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDBlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDA1LCAweDAwLCAweDFkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDk4LAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4YjQsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKLQkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGQsIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgyMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHhhMiwgMHhjZCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NDMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHgwZCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyYiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAyLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGQsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM0LAotCTB4MmQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1NiwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDVjLCAweDBkLCAweDA0LCAweDk4LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgzMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg2YSwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MzYsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NzksIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4N2IsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODIsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgzMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZDUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU4LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDgsIDB4NTksIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4OWMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHgzYSwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4MGQsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDE5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweGMwLCAweGFkLCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDlmLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YjIsIDB4MGQsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiMiwgMHgwZCwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKLQkweDM0LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgyYSwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4YmMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAxLCAweDM4LCAweDg4LCAweDFiLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NDgsIDB4MDEsIDB4MjgsIDB4ODgsIDB4MDQsIDB4NmUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwZCwgMHg4MCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHg3MiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMzLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YzMsIDB4MGQsIDB4ODAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4NjIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhhOSwgMHg4MSwgMHg5MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGM5LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzksIDB4MGQsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MmEsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhkMiwgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgwMSwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHhmMCwgMHhlMSwgMHgwZCwgMHgxZCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhhOCwgMHgwZCwgMHg2OCwgMHhiMSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWUsIDB4NDAsIDB4MDIsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKLQkweDAwLCAweDAwLCAweGRlLCAweDBkLCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4YTIsIDB4MGQsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgwZCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGUxLCAweDBkLCAweGI1LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MzYsIDB4MGIsIDB4NmEsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhlNiwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzksIDB4MGIsIDB4MmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMywgMHg4MSwgMHg5NywgMHgzNCwKLQkweDAwLCAweDAwLCAweGYxLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGE0LCAweDAzLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzMsIDB4MGIsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDI5LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDJjLCAweDMyLAotCTB4ZDksIDB4MDIsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHg0NiwgMHgwMywgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZjEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDgsIDB4YjksIDB4YmYsIDB4NjgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgwZSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHg4MSwgMHg2OCwgMHhiNiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDYxLCAweDgwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMiwgMHg4OCwgMHhlNiwgMHgyMSwgMHg5MSwgMHg3OSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE5LCAweGEwLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ZmYsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYywgMHgwZSwgMHgyYywgMHg0MSwgMHgwMiwgMHg3OCwgMHhmOSwgMHg4MSwgMHg2OCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDgxLCAweDk3LCAweDM0LAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHhjMCwgMHg4NSwgMHhkNywKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDI5LCAweDFhLCAweGZmLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjksIDB4MWIsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4OCwgMHgxNiwgMHhhMCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDI3LCAweDI0LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OGEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg3NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MjMsIDB4MGUsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MzQsIDB4NzksIDB4NjEsIDB4ODAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxZiwgMHg0MCwgMHhmNSwgMHhiYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjksIDB4M2YsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgyNiwgMHgyNCwgMHg2ZSwgMHgzYSwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGE0LCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4OTAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDIxLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4NjEsIDB4OTMsIDB4NzksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4OTAsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4OTAsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwZSwgMHgwNiwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MCwgMHhiYywKLQkweDI2LCAweDAwLCAweDJlLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKLQkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4OTIsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEwLCAweDAxLCAweDc4LCAweDg5LCAweDFiLCAweDkyLCAweDdhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NzgsIDB4ODksIDB4OWIsIDB4OTcsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHhmOSwgMHhiYSwgMHg2ZSwgMHgzNywKLQkweDAwLCAweDAwLCAweDM5LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweDdjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4NzQsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweDMyLAotCTB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4OSwgMHhkMiwKLQkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDA4LCAweDVkLCAweDAxLCAweGVjLCAweDE2LCAweDQwLCAweDg5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4MGIsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHg3OCwgMHg4OSwgMHgxYiwgMHg4NywgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGExLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDlmLCAweGY4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MSwgMHhiYywKLQkweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4OWIsIDB4OTEsIDB4ZDksCi0JMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDg5LCAweDBkLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4ODksIDB4NWIsIDB4OTEsIDB4ZDIsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDJkLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGUsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MzAsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5YiwgMHg5MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDY2LCAweDBlLCAweDFmLCAweDQwLCAweDAyLCAweDI0LCAweDA5LCAweDQwLCAweDY4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWMsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4NDEsIDB4OTIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOSwgMHg3ZiwgMHg5MiwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNjLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTQsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTksIDB4YTQsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHg1YywgMHgwZSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHhhNCwgMHhmZSwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgwZSwgMHgzOCwgMHg1MCwgMHgwMSwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZiLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MjgsIDB4MDEsIDB4NzgsIDB4ZTksIDB4MjUsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg2OSwgMHhhNCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGUsIDB4MzgsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2ZiwgMHgwZSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweDAwLCAweDAwLCAweDc3LCAweDBlLCAweDM4LCAweDUxLCAweDAxLCAweDAwLCAweGE5LCAweDliLCAweDkxLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDcyLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4NTAsIDB4MDEsIDB4ODAsIDB4YTIsIDB4NWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3ZiwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgyNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MjQsIDB4MDAsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODgsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHg4MCwgMHg0MCwgMHgwMiwgMHg4MCwgMHhmMiwgMHhjMSwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDhjLCAweGI2LCAweGMxLCAweDY4LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDBiLCAweDE2LCAweDM4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NzksIDB4MGIsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHhlNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NGQsIDB4OTAsIDB4M2EsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MiwgMHgwZCwgMHg5MSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDEyLCAweGE0LCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OTksIDB4MGUsIDB4ODAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4MDEsIDB4N2MsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHg3OCwgMHhiOSwgMHgzZiwgMHg3YywgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OWIsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MTksIDB4MDAsIDB4OTEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDk0LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGU0LCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4MjQsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHhhNCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxOCwgMHgwMCwgMHhhNSwgMHgwZSwgMHgxZiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHhjZCwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHhmZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MWEsIDB4ZmYsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHhmZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGIzLCAweDBlLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweGI2LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4YTksIDB4NjAsIDB4ODEsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhhMCwgMHg4MSwgMHg3YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMxLCAweDBlLCAweDFiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ZTAsIDB4ODMsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4MzIsCi0JMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHg4NiwgMHg4ZCwgMHgyZiwgMHgzMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGIzLCAweGU0LCAweDM5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4YTUsIDB4MDMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMywgMHgwYiwgMHgyZiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweDc2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGUzLCAweGE1LCAweDAzLCAweDc5LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHgyMCwgMHgwMCwgMHgwMSwgMHgyYywgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQ5LCAweDBlLCAweDAwLCAweDE2LCAweDg2LCAweGNjLCAweDA2LCAweGMwLCAweDkyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODYsIDB4Y2MsIDB4MDYsIDB4YzAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4ZSwgMHg5MiwgMHg1MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkZiwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDk3LCAweGJjLAotCTB4ZGYsIDB4MGUsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAzLCAweDAwLCAweDM4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyNCwgMHhkOCwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweGU0LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDRkLCAweDgyLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHhkZiwgMHgwZSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDBmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDgsIDB4MDUsIDB4MzAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGY3LCAweDBlLCAweDMyLCAweDBmLCAweDAxLCAweGJjLCAweDA4LCAweGMwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGY2LCAweDBlLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDIwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YTAsIDB4ZWEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHhlYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MjYsIDB4MDEsIDB4NmUsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhmYiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBlLCAweDgyLCAweDMyLAotCTB4MDAsIDB4ZTAsIDB4MDMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4YTIsIDB4MGQsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4MDAsIDB4ODIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDYwLCAweDM4LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTQsIDB4MTcsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDBhLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYzLCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDA1LCAweDMwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YTQsIDB4MDMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhjZSwgMHgyYywgMHgzMiwKLQkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDBkLCAweDkwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHgzMiwKLQkweDFkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGE0LCAweDE3LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxMCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgwMSwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDE4LCAweDBmLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MWQsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MjAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4YiwgMHhlYSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweGVhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDMyLAotCTB4ZWUsIDB4ZmYsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweGVlLCAweGZmLCAweDhhLCAweDExLCAweDA0LCAweDExLCAweDAxLCAweDgwLCAweDgyLCAweDBkLCAweDZlLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg0ZCwgMHgwZCwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDJiLCAweDBmLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgwZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweDAyLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzUsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDU4LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgwZiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg1ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NTksIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2NSwgMHgwZiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDY0LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0ZCwgMHgwZiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg2ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NzksIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDg0LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDRkLCAweDBmLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAotCTB4MDAsIDB4MDAsIDB4ODksIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4YSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhkLCAweDBmLCAweDJmLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHgwZiwgMHgyMywgMHgyMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwNCwgMHgyMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OWEsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg5OSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MTksIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHg3NSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGVlLCAweDA1LCAweGFmLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweGY1LCAweGJjLAotCTB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHgwOSwgMHg5MiwKLQkweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4MDksIDB4MzIsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhjMCwgMHg4NywgMHhjZCwgMHgwMCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYwLCAweGMwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHg5NywgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDUyLCAweDgyLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDgsIDB4YjEsIDB4MGYsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODcsIDB4Y2QsIDB4MDAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJhLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKLQkweDAwLCAweDAwLCAweGJiLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweGJjLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZSwgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4OSwgMHg0ZCwgMHg5MiwgMHgzYywKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDRkLCAweDkyLCAweDM2LAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODksIDB4NGQsIDB4OTIsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOCwgMHg5YiwgMHg4MSwgMHhiMiwgMHhlNCwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDliLCAweDhkLCAweGI3LCAweGU0LCAweDc4LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGUsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDU5LCAweDAwLCAweDkwLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MGYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4ZGQsIDB4MGYsIDB4ODYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDksIDB4ODAsIDB4MmYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGYsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhlNywgMHgwZiwgMHhjMywgMHgwNywgMHgwMSwgMHhlYywgMHhiNiwgMHhlNCwgMHg2ZSwgMHg5YSwKLQkweDAwLCAweDAwLCAweGU3LCAweDBmLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweGI2LCAweGU0LCAweDZlLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4OTAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4OTIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhmYSwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGZhLCAweDkyLCAweGJjLAotCTB4NDQsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4ZDIsCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDkyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ZTgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHhjMCwgMHhlOCwgMHgzMiwKLQkweDAyLCAweDAwLCAweGYxLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmNiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHhmOSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGZkLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweGI3LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDY5LCAweDgxLCAweDk3LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MGIsIDB4MDAsIDB4N2MsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTMsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGQsIDB4NDAsIDB4ZDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDFkLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDBkLCAweDQwLCAweGQwLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgxZCwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDI1LCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg2OSwgMHg4MSwgMHg5NywgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBiLCAweDAwLCAweDdjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MSwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg5MiwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDkyLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4OTIsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg5MiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM4LCAweDgwLCAweDg3LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHhlNSwgMHg4MywgMHgzOSwKLQkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQxLCAweDAyLCAweDg0LCAweGU2LCAweGExLCAweDk3LCAweGI5LAotCTB4MDAsIDB4MDAsIDB4NDMsIDB4MTAsIDB4MzYsIDB4NTEsIDB4MDEsIDB4ZTgsIDB4MTYsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MzgsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMxLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NTcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHg5MiwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE5LCAweGEwLCAweDJjLCAweGQ5LAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTAsIDB4OWQsIDB4MTEsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MSwgMHgxMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4MTAsIDB4MmMsIDB4Y2QsIDB4MDEsIDB4MTgsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjOSwgMHhjMSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDY3LCAweDEwLCAweDNiLCAweDI5LCAweDAyLCAweDA0LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhjMCwgMHg2ZSwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGI5LCAweGMxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgxMCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNywgMHhlMCwgMHg5MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg5MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHgxMCwgMHgzOSwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YzksIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDc0LCAweDEwLCAweDNiLCAweDIxLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MDAsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg3OCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3YiwgMHgxMCwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg5YiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDc4LCAweDI5LCAweDAwLCAweDZlLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4N2IsIDB4MTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4YTUsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDc4LCAweDQ5LCAweDIxLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2YsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgxMCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDU4LCAweGI4LCAweDliLCAweDkwLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4YTEsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4OCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHg3YywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweDcyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4NTgsIDB4YjgsIDB4OWIsIDB4OTAsIDB4NzYsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhiLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODksIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4OTIsCi0JMHgxNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHg2NSwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGEyLCAweDEwLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGE0LCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDdhLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHg4MCwgMHhhOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MCwKLQkweDAwLCAweDAwLCAweGI3LCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgxMCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAotCTB4M2IsIDB4MDAsIDB4YmEsIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGJhLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweGJkLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MzQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweDcwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCi0JMHgzYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCi0JMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MSwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgxMCwgMHgwNCwgMHgzOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDEwLCAweDJlLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODEsIDB4OTIsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhkNSwgMHgxMCwgMHgyNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODAsIDB4OTIsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAwLCAweGU3LCAweGEwLCAweDkyLCAweDc5LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDkwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGRmLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgxMCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4MGEsIDB4OTEsIDB4MzksCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzOSwgMHgwYiwgMHg5MSwgMHgzOSwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDU5LCAweDBhLCAweDkxLCAweDM5LAotCTB4MDksIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NjksIDB4MGIsIDB4OTEsIDB4YjksCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NiwgMHhhOCwgMHg4MiwgMHg4ZCwgMHg2YywgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGUwLCAweDA3LCAweDAwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHg4MCwgMHhlYiwgMHgxMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyYSwgMHhiYywKLQkweDAwLCAweDAwLCAweGVjLCAweDEwLCAweGUxLCAweDI0LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MjQsIDB4ODYsIDB4YzgsIDB4ODYsIDB4OGQsIDB4MmEsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MTAsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MTAsIDB4ODAsIDB4MzksIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4ZTAsIDB4ZmQsIDB4MTAsIDB4MDQsIDB4MzgsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4NmUsIDB4YjAsCi0JMHgxMCwgMHgwMCwgMHhmZCwgMHgxMCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhlMiwgMHhhNSwgMHgyZiwgMHhiOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGVlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MDAsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhiYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MTEsIDB4MzMsIDB4Y2QsIDB4MDEsIDB4YmMsIDB4MDgsIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyOSwgMHgyMiwgMHhlZSwgMHhkYywKLQkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4MDQsIDB4YjgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg5ZiwgMHg3MSwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGE5LCAweDI0LCAweGVlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NGUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTksIDB4ODAsIDB4OTIsIDB4ZGYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDI4LCAweDExLCAweDA2LCAweDgwLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTAsIDB4YmMsCi0JMHhlZSwgMHgwNSwgMHgyMCwgMHgxMSwgMHgwNiwgMHgwYywgMHgwMiwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDkwLCAweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4NDAsIDB4M2MsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHg5YSwKLQkweDYwLCAweDg5LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjMsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgyMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTEsIDB4YTgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTksIDB4OGYsIDB4OTAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhhMSwgMHg4OSwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHhjMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweGMwLCAweDg5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTEsIDB4MDQsIDB4NzksIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4NzUsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDNjLCAweDExLCAweGQ1LCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MTEsIDB4M2MsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDhiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHgzZCwgMHgxMSwgMHg5ZiwgMHg0MSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MCwgMHgyZiwgMHg3NCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4NywgMHhkMiwKLQkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGQ4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhlMCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4YjAsIDB4MDEsIDB4ODAsIDB4ZDIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweDAwLCAweDAwLCAweDQ5LCAweDExLCAweDA2LCAweDY4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgxMSwgMHgzNywgMHhiMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4NywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg1YiwgMHgxMSwgMHgwNCwgMHhjMSwgMHgwMSwgMHg4NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGU4LCAweDg2LCAweDhkLCAweDkyLCAweDM3LAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4OGQsIDB4OTIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDJjLCAweDg5LCAweDhkLCAweDZlLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4MmMsIDB4YTksIDB4ZGIsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgyOSwgMHhjMCwgMHg5MiwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDE5LCAweGZiLCAweDkyLCAweDNmLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjksIDB4ODAsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhhOSwgMHhlNCwgMHg5MiwgMHgzZiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweGNjLCAweDAxLCAweGU4LCAweDI2LCAweGZiLCAweDkyLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDI4LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4Y2MsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4Y2QsIDB4MmEsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhiYywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGJjLCAweDg4LCAweGRiLCAweDhiLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4YmMsIDB4ODgsIDB4ZGIsIDB4OGIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4OCwgMHhlMSwgMHg4YiwgMHhiYywKLQkweDAwLCAweDAwLCAweDZhLCAweDExLCAweDA0LCAweDBjLCAweDAyLCAweDQwLCAweGE4LCAweGRiLCAweDhiLCAweGJlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MWIsIDB4ODQsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHg2OSwgMHgxMSwgMHgwNCwgMHhiMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGMyLCAweDgwLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4N2MsCi0JMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDhiLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKLQkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDcxLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhkOSwgMHg0YSwgMHg5MSwgMHgzOSwKLQkweDM5LCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDUsIDB4OTEsIDB4MzAsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHg0ZCwgMHg5MSwgMHgzNiwKLQkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweGNkLCAweDkzLCAweDNjLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4Y2QsIDB4OTMsIDB4MzYsCi0JMHgwNywgMHgwMCwgMHg3OSwgMHgxMSwgMHhmMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4OSwgMHhjZCwgMHg5MywgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE4LCAweDliLCAweDgxLCAweDAyLCAweGU1LCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MTgsIDB4OWIsIDB4OGQsIDB4MDcsIDB4ZTUsIDB4NzgsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZDksIDB4NGEsIDB4OTEsIDB4MzksCi0JMHgzYSwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQ1LCAweDkxLCAweDMwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4NGQsIDB4OTEsIDB4MzYsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHhjZCwgMHg5MywgMHgzYywKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweGNkLCAweDkzLCAweDM2LAotCTB4MDcsIDB4MDAsIDB4ODQsIDB4MTEsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODksIDB4Y2QsIDB4OTMsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOSwgMHg5YiwgMHg4MSwgMHgwMiwgMHhlNSwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDE4LCAweDliLCAweDhkLCAweDA3LCAweGU1LCAweDc4LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBmLCAweDQwLCAweGZiLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MGYsIDB4NDAsIDB4MTgsIDB4MzIsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDVmLCAweGNhLCAweGY5LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDQxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBmLCAweDgwLCAweDJhLCAweDMyLAotCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHg5OCwgMHgxMSwgMHg5NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwZiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDEsIDB4ODQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGZhLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZmIsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHhjZiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4ZiwgMHg0ZCwgMHhmYiwgMHhiMCwKLQkweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGNkLCAweGIwLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NWIsIDB4Y2EsIDB4YjAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHhmZSwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YmUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHgwMCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNmLCAweDUyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgxNiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4YjksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHgwZCwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweDBkLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NmIsIDB4NDEsIDB4OTAsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM1LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHhjOSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM4LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAyLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGJjLCAweDBmLCAweDI0LCAweDE3LCAweGI4LAotCTB4MDYsIDB4MDAsIDB4YzIsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NjQsIDB4MTYsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHhmYiwgMHhiYywKLQkweDIwLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZiLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhkMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHhmOSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGI3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDMyLAotCTB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkZSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUwLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4Y2IsIDB4YzEsIDB4YjAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4YjAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGVmLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDIsIDB4MDAsIDB4ZjIsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGYsIDB4NGQsIDB4ZmIsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MWYsIDB4NDAsIDB4ZmIsIDB4MzUsCi0JMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGIsIDB4YzEsIDB4YjAsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhiYiwgMHgxMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmYSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZhLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4ZjksIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhiNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweGJkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGZmLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBjLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGZhLCAweGIyLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwZSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDFiLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4M2MsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHg4ZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHhiMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4ZiwgMHg0ZCwgMHhmYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDgsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDBlLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwYiwgMHgwMCwgMHgxNCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDI3LCAweDAwLCAweDE4LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDBmLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgyMCwgMHgwMCwgMHgxZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGZhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg1YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHgzYSwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGFjLCAweDhmLCAweGNkLCAweGY5LCAweDUwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4M2EsCi0JMHgwZiwgMHgwMCwgMHgyYiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgyYiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4YzAsIDB4ZjksIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2EsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDJiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTIsIDB4ODQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHhjMCwgMHhmOSwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NzMsIDB4M2UsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDNhLAotCTB4NzAsIDB4MDAsIDB4M2IsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4YzAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4ZmEsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg3MywgMHg3ZSwgMHhmYSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ODUsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwZSwgMHgwMCwgMHg1MywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDRkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDNmLCAweGMwLCAweGY5LCAweDlhLAotCTB4MWMsIDB4MDAsIDB4NGQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZiwgMHhjZCwgMHhmOSwgMHhkYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDBlLCAweDAwLCAweDViLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg5YSwKLQkweDI2LCAweDAwLCAweDU3LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZiwgMHg0MCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg1NiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDI5LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MTgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4NmIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDZiLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4M2UsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHgzZSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKLQkweDcxLCAweDEyLCAweDk3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDBmLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDcsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4MjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxZiwgMHgwMCwgMHhmYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDgwLCAweDJhLCAweDkyLAotCTB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDg0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MWYsIDB4MDAsIDB4N2EsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4MjksIDB4YmMsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZiwgMHhjZCwgMHhmYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDc2LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDgyLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhhLCAweGZhLCAweGJjLAotCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg4MiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGEzLCAweDNlLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YTMsIDB4M2UsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NDAsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJmLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZiwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAyLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2YsIDB4NTIsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmOCwgMHgzMiwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4YzAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDlmLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJiLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDAwLCAweGZiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGIxLCAweDEyLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGI1LCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZiwgMHg0MCwgMHhmYiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjYiwgMHhjMSwgMHhiMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHhiMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweGJlLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGNkLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgxMiwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQwLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MGQsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4YjgsCi0JMHgwMiwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwZiwgMHgyNCwgMHgxNywgMHhiOCwKLQkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDY0LCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4ZmIsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLX0sCi17Ci0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLX0sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKaW5kZXggMWUwY2ZjZC4uMDA1MGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5jCkBAIC0zMCw2ICszMCw4IEBACiAgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCiAgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCiAgKgorICogUGFydHMgZGV2ZWxvcGVkIGJ5IExpblN5c1NvZnQgU2FoYXJhIHRlYW0KKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC00Niw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNjEsMTAxICs2NCwxMjIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KIAotI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRAkJMAogI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkwCiAjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKICNkZWZpbmUgU1hHX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTAKICNkZWZpbmUgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCiAjZGVmaW5lIFZQQ0kJCQkJMAotI2RlZmluZSBEQkcJCQkJMQogI2RlZmluZSBBVEtfREVCVUcJCQkxCisjZGVmaW5lIFNYR19VQ09ERV9ERUJVRwkJMAorCiAKICNpbmNsdWRlICJzeGdfb3MuaCIKICNpbmNsdWRlICJzeGdody5oIgogI2luY2x1ZGUgInN4Z2hpZi5oIgogI2luY2x1ZGUgInN4Zy5oIgogI2luY2x1ZGUgInN4Z2RiZy5oIgotCi0jaW5jbHVkZSAic3hncGh5Y29kZS5oIgotI2luY2x1ZGUgInNhaGFyYWRiZ2Rvd25sb2FkLmgiCisjaW5jbHVkZSAic3hncGh5Y29kZS0xLjIuaCIKIAogc3RhdGljIGludCBzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgU2l6ZSwKLQkJCQkgICAgICBlbnVtIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKTsKLXN0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB2b2lkICpSY3ZCbG9jaywKLQkJCQkJICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCi0JCQkJCSAgIHUzMiBMZW5ndGgpOworCQkJCSAgICAgIGVudW0gc3hnX2J1ZmZlcl90eXBlIEJ1ZmZlclR5cGUpOworc3RhdGljIGludCBzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQkJCXZvaWQgKlJjdkJsb2NrLAorCQkJCQkJZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCQl1MzIgTGVuZ3RoKTsKIHN0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCi0JCQkJCSAgICAgc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiAqU3hnU2dsLAorCQkJCQkgICAgIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKlN4Z1NnbCwKIAkJCQkJICAgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKIAkJCQkJICAgICB1MzIgTGVuZ3RoKTsKIAogc3RhdGljIHZvaWQgc3hnX21jYXN0X2luaXRfY3JjMzIodm9pZCk7Ci0KLXN0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4ocF9uZXRfZGV2aWNlIGRldik7Ci1zdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHBfbmV0X2RldmljZSBkZXYpOwotc3RhdGljIGludCBzeGdfaW9jdGwocF9uZXRfZGV2aWNlIGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgcF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzeGdfc2Vjb25kX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBzeGdfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc3hnX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCBzeGdfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzeGdfdHJhbnNtaXRfcGFja2V0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgc3hnX2R1bWJfc2dsKHN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9MSVNUICpwU2dsLCBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wpOworc3RhdGljIGludCBzeGdfZHVtYl9zZ2woc3RydWN0IHN4Z194NjRfc2dsICpwU2dsLAorCQkJCXN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKlN4Z1NnbCk7CiAKLXN0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50ICp3b3JrX2RvbmUsCisJCQkJCSBpbnQgYnVkZ2V0KTsKK3N0YXRpYyB2b2lkIHN4Z19pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgaW50IHN4Z19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiBzdGF0aWMgaW50IHN4Z19wcm9jZXNzX2lzcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgTWVzc2FnZUlkKTsKLXN0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkKTsKK3N0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkLAorCQkJIGludCAqc3hnX25hcGlfY29udGludWUsIGludCAqd29ya19kb25lLCBpbnQgYnVkZ2V0KTsKIHN0YXRpYyB2b2lkIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7Ci1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgc3RydWN0IFNYR19FVkVOVCAqRXZlbnQpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCQkJCXN0cnVjdCBzeGdfZXZlbnQgKkV2ZW50KTsKIHN0YXRpYyB2b2lkIHN4Z19wcm9jZXNzX3Jjdl9lcnJvcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgRXJyb3JTdGF0dXMpOwogc3RhdGljIGJvb2wgc3hnX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCSAgIHN0cnVjdCBldGhlcl9oZWFkZXIgKkV0aGVySGRyLCB1c2hvcnQgbGVuZ3RoKTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3hnX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Cit2b2lkIHN4Z19mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX2ZyZWVfcmN2YmxvY2tzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfZnJlZV9zZ2xfYnVmZmVycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX3VubWFwX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX2ZyZWVfbWNhc3RfYWRkcnMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7Cit2b2lkIHN4Z19jb2xsZWN0X3N0YXRpc3RpY3Moc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgaW50IHN4Z19yZWdpc3Rlcl9pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfcmVtb3ZlX2lzcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBzeGdfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLSNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN4Z19nZXRfc3RhdHMocF9uZXRfZGV2aWNlIGRldik7Ci0jZW5kaWYKK3N0YXRpYyB2b2lkIHN4Z193YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgc3hnX3VwZGF0ZV9saW5rX3N0YXR1cyAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogI2RlZmluZSBYWFhUT0RPIDAKIAogI2lmIFhYWFRPRE8KLXN0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpOwotc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9saXN0KHBfbmV0X2RldmljZSBkZXYpOworc3RhdGljIGludCBzeGdfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7CiAjZW5kaWYKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKLQotc3RhdGljIHZvaWQgc3hnX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgaW50IHN4Z19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiAKIHN0YXRpYyBpbnQgc3hnX2luaXRpYWxpemVfYWRhcHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIHN4Z19zdG9ja19yY3ZfYnVmZmVycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJCQkgICB1bnNpZ25lZCBjaGFyIEluZGV4KTsKK2ludCBzeGdfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9saW5rKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwogc3RhdGljIGludCBzeGdfcGh5X2luaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiBzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyBlbnVtIFNYR19MSU5LX1NUQVRFIHN4Z19nZXRfbGlua19zdGF0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHN4Z19saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGVudW0gU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKTsKK3N0YXRpYyB2b2lkIHN4Z19saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCQkJZW51bSBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpOwogc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKTsKIHN0YXRpYyBpbnQgc3hnX3JlYWRfbWRpb19yZWcoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCSAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgKnBWYWx1ZSk7CitzdGF0aWMgdm9pZCBzeGdfc2V0X21jYXN0X2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3hnX2ZpcnN0X2luaXQgPSAxOwogc3RhdGljIGNoYXIgKnN4Z19iYW5uZXIgPQotICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIDEwR2JlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIFwKKwkgMTBHYmUgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZClcbiI7CiAKIHN0YXRpYyBpbnQgc3hnX2RlYnVnID0gMTsKIHN0YXRpYyBpbnQgZGVidWcgPSAtMTsKLXN0YXRpYyBwX25ldF9kZXZpY2UgaGVhZF9uZXRkZXZpY2UgPSBOVUxMOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpoZWFkX25ldGRldmljZSA9IE5VTEw7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3hnYmFzZV9kcml2ZXJfdCBzeGdfZ2xvYmFsID0geworc3RhdGljIHN0cnVjdCBzeGdiYXNlX2RyaXZlciBzeGdfZ2xvYmFsID0gewogCS5keW5hbWljX2ludGFnZyA9IDEsCiB9Owogc3RhdGljIGludCBpbnRhZ2dfZGVsYXkgPSAxMDA7CiBzdGF0aWMgdTMyIGR5bmFtaWNfaW50YWdnID0gMDsKIAotI2RlZmluZSBEUlZfTkFNRQkic3hnIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjEiCitjaGFyIHN4Z19kcml2ZXJfbmFtZVtdID0gInN4Z19uaWMiOwogI2RlZmluZSBEUlZfQVVUSE9SCSJBbGFjcml0ZWNoLCBJbmMuIEVuZ2luZWVyaW5nIgotI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIERyaXZlciIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkJCQkJCVwKKwkiQWxhY3JpdGVjaCBTTElDIFRlY2hvbm9sb2d5KHRtKSBOb24tQWNjZWxlcmF0ZWQgMTBHYmUgRHJpdmVyIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkJCQkJCVwKKwkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKIAogTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMTczLDEyICsxOTcsNiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc3hnX3BjaV90YmwpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RhdGljIGlubGluZSB2b2lkIHN4Z19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCBib29sIGZsdXNoKQogewogCXdyaXRlbCh2YWx1ZSwgcmVnKTsKQEAgLTIyNSwxNyArMjQzLDE0MyBAQAogfQogCiAvKiBTWEcgR2xvYmFscyAqLwotc3RhdGljIHN0cnVjdCBTWEdfRFJJVkVSIFN4Z0RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3Qgc3hnX2RyaXZlciBTeGdEcml2ZXI7CiAKICNpZmRlZiAgQVRLREJHCi1zdGF0aWMgc3RydWN0IHN4Z190cmFjZV9idWZmZXJfdCBMU3hnVHJhY2VCdWZmZXI7CitzdGF0aWMgc3RydWN0IHN4Z190cmFjZV9idWZmZXIgTFN4Z1RyYWNlQnVmZmVyOwogI2VuZGlmIC8qIEFUS0RCRyAqLwotc3RhdGljIHN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyX3QgKlN4Z1RyYWNlQnVmZmVyID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlciAqU3hnVHJhY2VCdWZmZXIgPSBOVUxMOworCisvKgorICogTVNJIFJlbGF0ZWQgQVBJJ3MKKyAqLworaW50IHN4Z19yZWdpc3Rlcl9pbnRyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworaW50IHN4Z19lbmFibGVfbXNpX3goc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitpbnQgc3hnX2FkZF9tc2lfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfcmVtb3ZlX21zaXhfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworaW50IHN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CisKK2ludCBzeGdfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHN4Z19lbmFibGVfbXNpX3goYWRhcHRlcik7CisJaWYgKHJldCAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlhZGFwdGVyLT5tc2lfZW5hYmxlZCA9IEZBTFNFOworCQlEQkdfRVJST1IoInN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkgTVNJLVggRGlzYWJsZVxuIik7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+bXNpX2VuYWJsZWQgPSBUUlVFOworCQlEQkdfRVJST1IoInN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkgTVNJLVggRW5hYmxlXG4iKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHN4Z19yZWdpc3Rlcl9pbnRyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYWRhcHRlci0+bXNpX2VuYWJsZWQpIHsKKwkJcmV0ID0gc3hnX2FkZF9tc2lfaXNyKGFkYXB0ZXIpOworCX0KKwllbHNlIHsKKwkJREJHX0VSUk9SKCJNU0ktWCBFbmFibGUgRmFpbGVkLiBVc2luZyBQaW4gSU5UXG4iKTsKKwkJcmV0ID0gc3hnX3JlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwkJaWYgKHJldCAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJREJHX0VSUk9SKCJzeGdfcmVnaXN0ZXJfaW50ZXJydXB0IEZhaWxlZFxuIik7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHN4Z19lbmFibGVfbXNpX3goc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCisJYWRhcHRlci0+bnJfbXNpeF9lbnRyaWVzID0gMTsKKwlhZGFwdGVyLT5tc2lfZW50cmllcyA9ICBrbWFsbG9jKGFkYXB0ZXItPm5yX21zaXhfZW50cmllcyAqCisJCQkJCXNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyLT5tc2lfZW50cmllcykgeworCQlEQkdfRVJST1IoIiVzOk1TSSBFbnRyaWVzIG1lbW9yeSBhbGxvY2F0aW9uIEZhaWxlZFxuIixfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoYWRhcHRlci0+bXNpX2VudHJpZXMsIDAsIGFkYXB0ZXItPm5yX21zaXhfZW50cmllcyAqCisJCXNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCisJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBjaWRldiwgYWRhcHRlci0+bXNpX2VudHJpZXMsCisJCQkJYWRhcHRlci0+bnJfbXNpeF9lbnRyaWVzKTsKKwlpZiAocmV0KSB7CisJCURCR19FUlJPUigiRW5hYmxpbmcgTVNJLVggd2l0aCAlZCB2ZWN0b3JzIGZhaWxlZFxuIiwKKwkJCQlhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXMpOworCQkvKlNob3VsZCB0cnkgd2l0aCBsZXNzIHZlY3RvciByZXR1cm5lZC4qLworCQlrZnJlZShhZGFwdGVyLT5tc2lfZW50cmllcyk7CisJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsgLypNU0ktWCBFbmFibGUgZmFpbGVkLiovCisJfQorCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCitpbnQgc3hnX2FkZF9tc2lfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHJldCxpOworCisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlmb3IgKGk9MDsgaTxhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXM7IGkrKykgeworCQkJcmV0ID0gcmVxdWVzdF9pcnEgKGFkYXB0ZXItPm1zaV9lbnRyaWVzW2ldLnZlY3RvciwKKwkJCQkJc3hnX2lzciwKKwkJCQkJSVJRRl9TSEFSRUQsCisJCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkJYWRhcHRlci0+bmV0ZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogTVNJLVggcmVxdWVzdF9pcnEgKCVzKSAiCisJCQkJCSJGQUlMRUQgWyV4XVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCQkgcmV0KTsKKwkJCQlyZXR1cm4gKHJldCk7CisJCQl9CisJCX0KKwl9CisJYWRhcHRlci0+bXNpX2VuYWJsZWQgPSBUUlVFOworCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMTsKKwlhZGFwdGVyLT5JbnRSZWdpc3RlcmVkID0gVFJVRTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKwordm9pZCBzeGdfcmVtb3ZlX21zaXhfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IGksdmVjdG9yOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlmb3IoaT0wOyBpPCBhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXM7aSsrKQorCXsKKwkJdmVjdG9yID0gYWRhcHRlci0+bXNpX2VudHJpZXNbaV0udmVjdG9yOworCQlEQkdfRVJST1IoIiVzIDogRnJlZWluZyBJUlEgdmVjdG9yIyVkXG4iLF9fRlVOQ1RJT05fXyx2ZWN0b3IpOworCQlmcmVlX2lycSh2ZWN0b3IsbmV0ZGV2KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc3hnX3JlbW92ZV9pc3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWlmIChhZGFwdGVyLT5tc2lfZW5hYmxlZCkKKwkJc3hnX3JlbW92ZV9tc2l4X2lzcihhZGFwdGVyKTsKKwllbHNlCisJCWZyZWVfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLCBuZXRkZXYpOworfQorCit2b2lkIHN4Z19yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5tc2lfZW5hYmxlZCkgeworCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBjaWRldik7CisJCWtmcmVlKGFkYXB0ZXItPm1zaV9lbnRyaWVzKTsKKwkJYWRhcHRlci0+bXNpX2VudHJpZXMgPSBOVUxMOworCX0KKwlyZXR1cm47Cit9CiAKIC8qCiAgKiBzeGdfZG93bmxvYWRfbWljcm9jb2RlCiAgKgotICogRG93bmxvYWQgTWljcm9jb2RlIHRvIFNhaGFyYSBhZGFwdGVyCisgKiBEb3dubG9hZCBNaWNyb2NvZGUgdG8gU2FoYXJhIGFkYXB0ZXIgdXNpbmcgdGhlIExpbnV4CisgKiBGaXJtd2FyZSBtb2R1bGUgdG8gZ2V0IHRoZSB1Y29kZS5zeXMgZmlsZS4KICAqCiAgKiBBcmd1bWVudHMgLQogICoJCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQpAQCAtMjQ0LDk4ICszODgsMTQxIEBACiAgKiBSZXR1cm4KICAqCWludAogICovCi1zdGF0aWMgYm9vbCBzeGdfZG93bmxvYWRfbWljcm9jb2RlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGVudW0gU1hHX1VDT0RFX1NFTCBVY29kZVNlbCkKK3N0YXRpYyBib29sIHN4Z19kb3dubG9hZF9taWNyb2NvZGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQkJCWVudW0gU1hHX1VDT0RFX1NFTCBVY29kZVNlbCkKIHsKLQlzdHJ1Y3QgU1hHX0hXX1JFR1MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZpbGUgPSAiIjsKKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlpbnQgcmV0OworCWludCB1Y29kZV9zdGFydDsKIAl1MzIgU2VjdGlvbjsKIAl1MzIgVGhpc1NlY3Rpb25TaXplOwotCXUzMiAqSW5zdHJ1Y3Rpb24gPSBOVUxMOworCXUzMiBpbnN0cnVjdGlvbiA9IDA7CiAJdTMyIEJhc2VBZGRyZXNzLCBBZGRyZXNzT2Zmc2V0LCBBZGRyZXNzOwotLyogICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgRmFpbHVyZTsgKi8KKwkvKiB1MzIgRmFpbHVyZTsgKi8KIAl1MzIgVmFsdWVSZWFkOwogCXUzMiBpOwotCXUzMiBudW1TZWN0aW9ucyA9IDA7CisJdTMyIGluZGV4ID0gMDsKKwl1MzIgbnVtX3NlY3Rpb25zID0gMDsKIAl1MzIgc2VjdGlvblNpemVbMTZdOwogCXUzMiBzZWN0aW9uU3RhcnRbMTZdOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRG5sZFVjb2QiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwotCURCR19FUlJPUigic3hnOiAlcyBFTlRFUlxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoIChVY29kZVNlbCkgewotCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToJLyogU2FoYXJhIG9wZXJhdGlvbmFsIHVjb2RlICovCi0JCW51bVNlY3Rpb25zID0gU051bVNlY3Rpb25zOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtU2VjdGlvbnM7IGkrKykgewotCQkJc2VjdGlvblNpemVbaV0gPSBTU2VjdGlvblNpemVbaV07Ci0JCQlzZWN0aW9uU3RhcnRbaV0gPSBTU2VjdGlvblN0YXJ0W2ldOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkgICAgICAgIjogV29haCwgYmlnIGVycm9yIHdpdGggdGhlIG1pY3JvY29kZSFcbiIpOwotCQlicmVhazsKKwkvKgorCSAqICBUaGlzIHJvdXRpbmUgaXMgb25seSBpbXBsZW1lbnRlZCB0byBkb3dubG9hZCB0aGUgbWljcm9jb2RlCisJICogIGZvciB0aGUgUmV2aXNpb24gQiBTYWhhcmEgY2hpcC4gIFJldiBBIGFuZCBEaWFnbm9zdGljCisJICogIG1pY3JvY29kZSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4gIElmIFJldiBBIG9yCisJICogIGRpYWdub3N0aWMgdWNvZGUgaXMgcmVxdWlyZWQsIHRoaXMgcm91dGluZSB3aWxsIG9idmlvdXNseQorCSAqICBuZWVkIHRvIGNoYW5nZS4gIEFsc28sIGV2ZW50dWFsbHkgbmVlZCB0byBhZGQgc3VwcG9ydCBmb3IKKwkgKiAgUmV2IEIgY2hlY2tlZCB2ZXJzaW9uIG9mIHVjb2RlLiAgVGhhdCdzIGVhc3kgZW5vdWdoIG9uY2UKKwkgKiAgdGhlIGZyZWUgdmVyc2lvbiBvZiBSZXYgQiB3b3Jrcy4KKwkgKi8KKwlBU1NFUlQoVWNvZGVTZWwgPT0gU1hHX1VDT0RFX1NZU1RFTSk7CisJQVNTRVJUKGFkYXB0ZXItPmFzaWN0eXBlID09IFNBSEFSQV9SRVZfQik7CisjaWYgU1hHX1VDT0RFX0RFQlVHCisJZmlsZSA9ICJzeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cyI7CisjZWxzZQorCWZpbGUgPSAic3hnL3NhaGFyYWRvd25sb2FkQi5zeXMiOworI2VuZGlmCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZhZGFwdGVyLT5wY2lkZXYtPmRldik7CisJaWYgKHJldCkgeworCQlEQkdfRVJST1IoIiVzIFNYR19OSUM6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBfX2Z1bmNfXyxmaWxlKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlEQkdfRVJST1IoInN4ZzogUkVTRVQgVEhFIENBUkRcbiIpOworCS8qCisJICogIFRoZSBtaWNyb2NvZGUgLnN5cyBmaWxlIGNvbnRhaW5zIHN0YXJ0cyB3aXRoIGEgNCBieXRlIHdvcmQgY29udGFpbmluZworCSAqICB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zLiBUaGF0IGlzIGZvbGxvd2VkIGJ5ICJudW1fc2VjdGlvbnMiIDQgYnl0ZQorCSAqICB3b3JkcyBjb250YWluaW5nIGVhY2ggInNlY3Rpb24iIHNpemUuICBUaGF0IGlzIGZvbGxvd2VkIG51bV9zZWN0aW9ucworCSAqICA0IGJ5dGUgd29yZHMgY29udGFpbmluZyBlYWNoIHNlY3Rpb24gInN0YXJ0IiBhZGRyZXNzLgorCSAqCisJICogIEZvbGxvd2luZyB0aGUgYWJvdmUgaGVhZGVyLCB0aGUgLnN5cyBmaWxlIGNvbnRhaW5zIG51bV9zZWN0aW9ucywKKwkgKiAgd2hlcmUgZWFjaCBzZWN0aW9uIHNpemUgaXMgc3BlY2lmaWVkLCBuZXdsaW5lIGRlbGluZWF0ZXRkIDEyIGJ5dGUKKwkgKiAgbWljcm9jb2RlIGluc3RydWN0aW9ucy4KKwkgKi8KKwludW1fc2VjdGlvbnMgPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OworCUFTU0VSVChudW1fc2VjdGlvbnMgPD0gMyk7CisJZm9yIChpID0gMDsgaSA8IG51bV9zZWN0aW9uczsgaSsrKSB7CisJCXNlY3Rpb25TaXplW2ldID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCWluZGV4ICs9IDQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fc2VjdGlvbnM7IGkrKykgeworCQlzZWN0aW9uU3RhcnRbaV0gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJaW5kZXggKz0gNDsKKwl9CisKIAkvKiBGaXJzdCwgcmVzZXQgdGhlIGNhcmQgKi8KIAlXUklURV9SRUcoSHdSZWdzLT5SZXNldCwgMHhERUFELCBGTFVTSCk7CisJdWRlbGF5KDUwKTsKKwlId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CiAKLQkvKiBEb3dubG9hZCBlYWNoIHNlY3Rpb24gb2YgdGhlIG1pY3JvY29kZSBhcyBzcGVjaWZpZWQgaW4gKi8KLQkvKiBpdHMgZG93bmxvYWQgZmlsZS4gIFRoZSAqZG93bmxvYWQuYyBmaWxlIGlzIGdlbmVyYXRlZCB1c2luZyAqLwotCS8qIHRoZSBzYWhhcmFvYmp0b2MgZmFjaWxpdHkgd2hpY2ggY29udmVydHMgdGhlIG1ldGFzdGVwIC5vYmogKi8KLQkvKiBmaWxlIHRvIGEgLmMgZmlsZSB3aGljaCBjb250YWlucyBhIHR3byBkaW1lbnRpb25hbCBhcnJheS4gKi8KLQlmb3IgKFNlY3Rpb24gPSAwOyBTZWN0aW9uIDwgbnVtU2VjdGlvbnM7IFNlY3Rpb24rKykgewotCQlEQkdfRVJST1IoInN4ZzogU0VDVElPTiAjICVkXG4iLCBTZWN0aW9uKTsKLQkJc3dpdGNoIChVY29kZVNlbCkgewotCQljYXNlIFNYR19VQ09ERV9TQUhBUkE6Ci0JCQlJbnN0cnVjdGlvbiA9ICh1MzIgKikgJiBTYWhhcmFVQ29kZVtTZWN0aW9uXVswXTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KKwkvKgorCSAqIERvd25sb2FkIGVhY2ggc2VjdGlvbiBvZiB0aGUgbWljcm9jb2RlIGFzIHNwZWNpZmllZCBpbgorCSAqIHNlY3Rpb25TaXplW2luZGV4XSB0byBzZWN0aW9uU3RhcnRbaW5kZXhdIGFkZHJlc3MuICBBcworCSAqIGRlc2NyaWJlZCBhYm92ZSwgdGhlIC5zeXMgZmlsZSBjb250YWlucyAxMiBieXRlIHdvcmQKKwkgKiBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb25zLiBUaGUgKmRvd25sb2FkLnN5cyBmaWxlIGlzIGdlbmVyYXRlZAorCSAqIHVzaW5nIHRoZSBvYmp0b3N5cy5leGUgdXRpbGl0eSB0aGF0IHdhcyBidWlsdCBmb3IgU2FoYXJhCisJICogbWljcm9jb2RlLgorCSAqLworCS8qIFNlZSB1c2FnZSBvZiB0aGlzIGJlbG93IHdoZW4gd2UgcmVhZCBiYWNrIGZvciBwYXJpdHkgKi8KKwl1Y29kZV9zdGFydCA9IGluZGV4OworCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJaW5kZXggKz0gNDsKKworCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1fc2VjdGlvbnM7IFNlY3Rpb24rKykgewogCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKLQkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsKIAkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKIAkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKKwkJCXUzMiBmaXJzdF9pbnN0ciA9IDA7ICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLworCiAJCQlBZGRyZXNzID0gQmFzZUFkZHJlc3MgKyBBZGRyZXNzT2Zmc2V0OwogCQkJQVNTRVJUKChBZGRyZXNzICYgfk1JQ1JPQ09ERV9BRERSRVNTX01BU0spID09IDApOwotCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyAzMSAtIDAgKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgKkluc3RydWN0aW9uLCBGTFVTSCk7Ci0JCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyICovCi0JCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFNaWRkbGUsICooSW5zdHJ1Y3Rpb24gKyAxKSwKLQkJCQkgIEZMVVNIKTsKLQkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQgKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUhpZ2gsICooSW5zdHJ1Y3Rpb24gKyAyKSwKLQkJCQkgIEZMVVNIKTsKKwkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgMzEgLSAwIChsb3cpICovCisJCQlmaXJzdF9pbnN0ciA9IGluc3RydWN0aW9uOworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7ICAvKiBBZHZhbmNlIHRvIHRoZSAibmV4dCIgaW5zdHJ1Y3Rpb24gKi8KKworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA2My0zMiAobWlkZGxlKSAqLworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7ICAvKiBBZHZhbmNlIHRvIHRoZSAibmV4dCIgaW5zdHJ1Y3Rpb24gKi8KKworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NCAoaGlnaCkgKi8KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUhpZ2gsIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsgIC8qIEFkdmFuY2UgdG8gdGhlICJuZXh0IiBpbnN0cnVjdGlvbiAqLworCiAJCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBhZGRyZXNzIHdpdGggdGhlIFdSSVRFIGJpdCBzZXQgKi8KIAkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwKIAkJCQkgIChBZGRyZXNzIHwgTUlDUk9DT0RFX0FERFJFU1NfV1JJVEUpLCBGTFVTSCk7Ci0JCQkvKiBTYWhhcmEgYnVnIGluIHRoZSB1Y29kZSBkb3dubG9hZCBsb2dpYyAtIHRoZSB3cml0ZSB0byBEYXRhTG93ICovCi0JCQkvKiBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgZ2V0IGNvcnJ1cHRlZC4gIFRvIGF2b2lkIHRoaXMsICovCi0JCQkvKiB3cml0ZSB0byBEYXRhTG93IGFnYWluIGZvciB0aGlzIGluc3RydWN0aW9uICh3aGljaCBtYXkgZ2V0ICovCi0JCQkvKiBjb3JydXB0ZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciksIHRoZW4gaW5jcmVtZW50IHRoZSBhZGRyZXNzICovCi0JCQkvKiBhbmQgd3JpdGUgdGhlIGRhdGEgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIERhdGFMb3cuICBUaGF0ICovCi0JCQkvKiB3cml0ZSBzaG91bGQgc3VjY2VlZC4gKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgKkluc3RydWN0aW9uLCBUUlVFKTsKLQkJCS8qIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24gKi8KLQkJCUluc3RydWN0aW9uICs9IDM7CisJCQkvKgorCQkJICogU2FoYXJhIGJ1ZyBpbiB0aGUgdWNvZGUgZG93bmxvYWQgbG9naWMgLSB0aGUgd3JpdGUgdG8gRGF0YUxvdworCQkJICogZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxkIGdldCBjb3JydXB0ZWQuICBUbyBhdm9pZCB0aGlzLAorCQkJICogd3JpdGUgdG8gRGF0YUxvdyBhZ2FpbiBmb3IgdGhpcyBpbnN0cnVjdGlvbiAod2hpY2ggbWF5IGdldAorCQkJICogY29ycnVwdGVkLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIpLCB0aGVuIGluY3JlbWVudCB0aGUgYWRkcmVzcworCQkJICogYW5kIHdyaXRlIHRoZSBkYXRhIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBEYXRhTG93LiAgVGhhdAorCQkJICogd3JpdGUgc2hvdWxkIHN1Y2NlZWQuCisJCQkgKi8KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgZmlyc3RfaW5zdHIsIEZMVVNIKTsKIAkJfQogCX0KLQkvKiBOb3cgcmVwZWF0IHRoZSBlbnRpcmUgb3BlcmF0aW9uIHJlYWRpbmcgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kICovCi0JLyogY2hlY2tpbmcgZm9yIHBhcml0eSBlcnJvcnMgKi8KLQlmb3IgKFNlY3Rpb24gPSAwOyBTZWN0aW9uIDwgbnVtU2VjdGlvbnM7IFNlY3Rpb24rKykgewotCQlEQkdfRVJST1IoInN4ZzogY2hlY2sgU0VDVElPTiAjICVkXG4iLCBTZWN0aW9uKTsKLQkJc3dpdGNoIChVY29kZVNlbCkgewotCQljYXNlIFNYR19VQ09ERV9TQUhBUkE6Ci0JCQlJbnN0cnVjdGlvbiA9ICh1MzIgKikgJiBTYWhhcmFVQ29kZVtTZWN0aW9uXVswXTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KKwkvKgorCSAqIE5vdyByZXBlYXQgdGhlIGVudGlyZSBvcGVyYXRpb24gcmVhZGluZyB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBhbmQKKwkgKiBjaGVja2luZyBmb3IgcGFyaXR5IGVycm9ycworCSAqLworCWluZGV4ID0gdWNvZGVfc3RhcnQ7CisKKwlmb3IgKFNlY3Rpb24gPSAwOyBTZWN0aW9uIDwgbnVtX3NlY3Rpb25zOyBTZWN0aW9uKyspIHsKIAkJQmFzZUFkZHJlc3MgPSBzZWN0aW9uU3RhcnRbU2VjdGlvbl07Ci0JCVRoaXNTZWN0aW9uU2l6ZSA9IHNlY3Rpb25TaXplW1NlY3Rpb25dIC8gMTI7CS8qIFNpemUgaW4gaW5zdHJ1Y3Rpb25zICovCisJCS8qIFNpemUgaW4gaW5zdHJ1Y3Rpb25zICovCisJCVRoaXNTZWN0aW9uU2l6ZSA9IHNlY3Rpb25TaXplW1NlY3Rpb25dIC8gMTI7CiAJCWZvciAoQWRkcmVzc09mZnNldCA9IDA7IEFkZHJlc3NPZmZzZXQgPCBUaGlzU2VjdGlvblNpemU7CiAJCSAgICAgQWRkcmVzc09mZnNldCsrKSB7CiAJCQlBZGRyZXNzID0gQmFzZUFkZHJlc3MgKyBBZGRyZXNzT2Zmc2V0OwpAQCAtMzQ4LDYyICs1MzUsNzAgQEAKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgUEFSSVRZIEVSUk9SXG4iLAogCQkJCQkgIF9fZnVuY19fKTsKIAotCQkJCXJldHVybiAoRkFMU0UpOwkvKiBQYXJpdHkgZXJyb3IgKi8KKwkJCQlyZXR1cm4gRkFMU0U7CS8qIFBhcml0eSBlcnJvciAqLwogCQkJfQogCQkJQVNTRVJUKChWYWx1ZVJlYWQgJiBNSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSBBZGRyZXNzKTsKIAkJCS8qIFJlYWQgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kIGNvbXBhcmUgKi8KKwkJCS8qIEZpcnN0IGluc3RydWN0aW9uICovCisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBWYWx1ZVJlYWQpOwotCQkJaWYgKFZhbHVlUmVhZCAhPSAqSW5zdHJ1Y3Rpb24pIHsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gaW5zdHJ1Y3Rpb24pIHsKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBMT1dcbiIsCiAJCQkJCSAgX19mdW5jX18pOwotCQkJCXJldHVybiAoRkFMU0UpOwkvKiBNaXNjb21wYXJlICovCisJCQkJcmV0dXJuIEZBTFNFOwkvKiBNaXNjb21wYXJlICovCiAJCQl9CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCBWYWx1ZVJlYWQpOwotCQkJaWYgKFZhbHVlUmVhZCAhPSAqKEluc3RydWN0aW9uICsgMSkpIHsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gaW5zdHJ1Y3Rpb24pIHsKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBNSURETEVcbiIsCiAJCQkJCSAgX19mdW5jX18pOwotCQkJCXJldHVybiAoRkFMU0UpOwkvKiBNaXNjb21wYXJlICovCisJCQkJcmV0dXJuIEZBTFNFOwkvKiBNaXNjb21wYXJlICovCiAJCQl9CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhSGlnaCwgVmFsdWVSZWFkKTsKLQkJCWlmIChWYWx1ZVJlYWQgIT0gKihJbnN0cnVjdGlvbiArIDIpKSB7CisJCQlpZiAoVmFsdWVSZWFkICE9IGluc3RydWN0aW9uKSB7CiAJCQkJREJHX0VSUk9SKCJzeGc6ICVzIE1JU0NPTVBBUkUgSElHSFxuIiwKIAkJCQkJICBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIChGQUxTRSk7CS8qIE1pc2NvbXBhcmUgKi8KKwkJCQlyZXR1cm4gRkFMU0U7CS8qIE1pc2NvbXBhcmUgKi8KIAkJCX0KLQkJCS8qIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24gKi8KLQkJCUluc3RydWN0aW9uICs9IDM7CiAJCX0KIAl9CiAKKwkvKiBkb3dubG9hZCBmaW5pc2hlZCAqLworCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCS8qIEV2ZXJ5dGhpbmcgT0ssIEdvLiAqLwogCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwgTUlDUk9DT0RFX0FERFJFU1NfR08sIEZMVVNIKTsKIAotCS8qIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZSAqLwotCS8qIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4gKi8KKwkvKgorCSAqIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZQorCSAqIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewogCQl1ZGVsYXkoNTApOwogCQlSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ2FyZFVwLCBWYWx1ZVJlYWQpOwogCQlpZiAoVmFsdWVSZWFkID09IDB4Q0FGRSkgewotCQkJREJHX0VSUk9SKCJzeGc6ICVzIEJPTyBZQSAweENBRkVcbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCWlmIChpID09IDEwMDAwKSB7Ci0JCURCR19FUlJPUigic3hnOiAlcyBUSU1FT1VUXG4iLCBfX2Z1bmNfXyk7CisJCURCR19FUlJPUigic3hnOiAlcyBUSU1FT1VUIGJyaW5naW5nIHVwIGNhcmQgLSB2ZXJpZnkgTUlDUk9DT0RFXG4iLCBfX2Z1bmNfXyk7CiAKLQkJcmV0dXJuIChGQUxTRSk7CS8qIFRpbWVvdXQgKi8KKwkJcmV0dXJuIEZBTFNFOwkvKiBUaW1lb3V0ICovCiAJfQotCS8qIE5vdyB3cml0ZSB0aGUgTG9hZFN5bmMgcmVnaXN0ZXIuICBUaGlzIGlzIHVzZWQgdG8gKi8KLQkvKiBzeW5jaHJvbml6ZSB3aXRoIHRoZSBjYXJkIHNvIGl0IGNhbiBzY3JpYmJsZSBvbiB0aGUgbWVtb3J5ICovCi0JLyogdGhhdCBjb250YWluZWQgMHhDQUZFIGZyb20gdGhlICJDYXJkVXAiIHN0ZXAgYWJvdmUgKi8KLQlpZiAoVWNvZGVTZWwgPT0gU1hHX1VDT0RFX1NBSEFSQSkgeworCS8qCisJICogTm93IHdyaXRlIHRoZSBMb2FkU3luYyByZWdpc3Rlci4gIFRoaXMgaXMgdXNlZCB0bworCSAqIHN5bmNocm9uaXplIHdpdGggdGhlIGNhcmQgc28gaXQgY2FuIHNjcmliYmxlIG9uIHRoZSBtZW1vcnkKKwkgKiB0aGF0IGNvbnRhaW5lZCAweENBRkUgZnJvbSB0aGUgIkNhcmRVcCIgc3RlcCBhYm92ZQorCSAqLworCWlmIChVY29kZVNlbCA9PSBTWEdfVUNPREVfU1lTVEVNKSB7CiAJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uTG9hZFN5bmMsIDAsIEZMVVNIKTsKIAl9CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRG5sZFVjZCIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7Ci0JREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKLQogCXJldHVybiAoVFJVRSk7CiB9CiAKQEAgLTQxMSwxOCArNjA2LDE2IEBACiAgKiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzIC0gQWxsb2NhdGUgbWVtb3J5IGFuZCBsb2NrcwogICoKICAqIEFyZ3VtZW50cyAtCi0gKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCWFkYXB0ZXIJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKgotICogUmV0dXJuCi0gKglpbnQKKyAqIFJldHVybiAtIGludAogICovCiBzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlpbnQgc3RhdHVzOwotCXUzMiBpOworCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKIAl1MzIgUnNzSWRzLCBJc3JDb3VudDsKLS8qICAgICAgc3RydWN0IFNYR19YTVRfUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlhtdFJpbmc7ICovCi0vKiAgICAgIHN0cnVjdCBTWEdfUkNWX1JJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSY3ZSaW5nOyAqLworCS8qIHN0cnVjdCBzeGdfeG10X3JpbmcJKlhtdFJpbmc7ICovCisJLyogc3RydWN0IHN4Z19yY3ZfcmluZwkqUmN2UmluZzsgKi8KIAogCURCR19FUlJPUigiJXMgRU5URVJcbiIsIF9fZnVuY19fKTsKIApAQCAtNDMyLDcgKzYyNSw3IEBACiAJLyogV2luZG93cyB0ZWxscyB1cyBob3cgbWFueSBDUFVzIGl0IHBsYW5zIHRvIHVzZSBmb3IgKi8KIAkvKiBSU1MgKi8KIAlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKLQlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOwogCiAJREJHX0VSUk9SKCIlcyBTZXR1cCB0aGUgc3BpbmxvY2tzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQ0Miw2ICs2MzUsNyBAQAogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkJpdDY0UmVnTG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwlhdG9taWNfc2V0KCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zLCAwKTsKIAogCURCR19FUlJPUigiJXMgU2V0dXAgdGhlIGxpc3RzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQ1MSw2MiArNjQ1LDgyIEBACiAJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CiAJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKIAotCS8qIE1hcmsgdGhlc2UgYmFzaWMgYWxsb2NhdGlvbnMgZG9uZS4gIFRoaXMgZmxhZ3MgZXNzZW50aWFsbHkgKi8KLQkvKiB0ZWxscyB0aGUgU3hnRnJlZVJlc291cmNlcyByb3V0aW5lIHRoYXQgaXQgY2FuIGdyYWIgc3BpbmxvY2tzICovCi0JLyogYW5kIHJlZmVyZW5jZSBsaXN0aGVhZHMuICovCisJLyoKKwkgKiBNYXJrIHRoZXNlIGJhc2ljIGFsbG9jYXRpb25zIGRvbmUuICBUaGlzIGZsYWdzIGVzc2VudGlhbGx5CisJICogdGVsbHMgdGhlIFN4Z0ZyZWVSZXNvdXJjZXMgcm91dGluZSB0aGF0IGl0IGNhbiBncmFiIHNwaW5sb2NrcworCSAqIGFuZCByZWZlcmVuY2UgbGlzdGhlYWRzLgorCSAqLwogCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBUUlVFOwotCS8qIE1haW4gYWxsb2NhdGlvbiBsb29wLiAgU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgKi8KLQkvKiB0aGUgbWljcm9jb2RlIGFuZCBiYWNrIG9mZiBpZiBtZW1vcnkgYWxsb2NhdGlvbiAqLwotCS8qIGZhaWxzLiAgSWYgd2UgaGl0IGEgbWluaW11bSwgZmFpbC4gKi8KKwkvKgorCSAqIE1haW4gYWxsb2NhdGlvbiBsb29wLiAgU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkKKwkgKiB0aGUgbWljcm9jb2RlIGFuZCBiYWNrIG9mZiBpZiBtZW1vcnkgYWxsb2NhdGlvbgorCSAqIGZhaWxzLiAgSWYgd2UgaGl0IGEgbWluaW11bSwgZmFpbC4KKwkgKi8KIAogCWZvciAoOzspIHsKIAkJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBYbXRSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCi0JCQkgICh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgU1hHX1hNVF9SSU5HKSAqIDEpKTsKKwkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBzeGdfeG10X3JpbmcpICogMSkpOwogCi0JCS8qIFN0YXJ0IHdpdGggYmlnIGl0ZW1zIGZpcnN0IC0gcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MuICBBdCB0aGUgbW9tZW50ICovCi0JCS8qIEknbSBnb2luZyB0byBrZWVwIHRoZSByaW5nIHNpemUgZml4ZWQgYW5kIGFkanVzdCB0aGUgbnVtYmVyIG9mICovCi0JCS8qIFRDQnMgaWYgd2UgZmFpbC4gIExhdGVyIHdlIG1pZ2h0IGNvbnNpZGVyIHJlZHVjaW5nIHRoZSByaW5nIHNpemUgYXMgd2VsbC4uICovCisJCS8qCisJCSAqIFN0YXJ0IHdpdGggYmlnIGl0ZW1zIGZpcnN0IC0gcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MuCisJCSAqIEF0IHRoZSBtb21lbnQgSSdtIGdvaW5nIHRvIGtlZXAgdGhlIHJpbmcgc2l6ZSBmaXhlZCBhbmQKKwkJICogYWRqdXN0IHRoZSBUQ0JzIGlmIHdlIGZhaWwuICBMYXRlciB3ZSBtaWdodAorCQkgKiBjb25zaWRlciByZWR1Y2luZyB0aGUgcmluZyBzaXplIGFzIHdlbGwuLgorCQkgKi8KIAkJYWRhcHRlci0+WG10UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCQkJIHNpemVvZihzdHJ1Y3QgU1hHX1hNVF9SSU5HKSAqCi0JCQkJCQkJIDEsCi0JCQkJCQkJICZhZGFwdGVyLT5QWG10UmluZ3MpOworCQkJCQkJIHNpemVvZihzdHJ1Y3Qgc3hnX3htdF9yaW5nKSAqCisJCQkJCQkgMSwKKwkJCQkJCSAmYWRhcHRlci0+UFhtdFJpbmdzKTsKIAkJREJHX0VSUk9SKCIlcyBYbXRSaW5nc1slcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5YbXRSaW5ncyk7CiAKIAkJaWYgKCFhZGFwdGVyLT5YbXRSaW5ncykgewogCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOwogCQl9Ci0JCW1lbXNldChhZGFwdGVyLT5YbXRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBTWEdfWE1UX1JJTkcpICogMSk7CisJCW1lbXNldChhZGFwdGVyLT5YbXRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfeG10X3JpbmcpICogMSk7CiAKIAkJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBSY3ZSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCi0JCQkgICh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9SSU5HKSAqIDEpKTsKKwkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSkpOwogCQlhZGFwdGVyLT5SY3ZSaW5ncyA9CiAJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCSBzaXplb2Yoc3RydWN0IFNYR19SQ1ZfUklORykgKiAxLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSwKIAkJCQkJICZhZGFwdGVyLT5QUmN2UmluZ3MpOwogCQlEQkdfRVJST1IoIiVzIFJjdlJpbmdzWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPlJjdlJpbmdzKTsKIAkJaWYgKCFhZGFwdGVyLT5SY3ZSaW5ncykgewogCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOwogCQl9Ci0JCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX1JJTkcpICogMSk7CisJCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSk7CisJCWFkYXB0ZXItPnVjb2RlX3N0YXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9zdGF0cyksIEdGUF9BVE9NSUMpOworCQlhZGFwdGVyLT5wdWNvZGVfc3RhdHMgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQlhZGFwdGVyLT51Y29kZV9zdGF0cywKKwkJCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisvLwkJbWVtc2V0KGFkYXB0ZXItPnVjb2RlX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9zdGF0cykpOwogCQlicmVhazsKIAogCSAgICAgIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ6CiAJCS8qIGFuIGFsbG9jYXRpb24gZmFpbGVkLiAgRnJlZSBhbnkgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9ucy4gKi8KIAkJaWYgKGFkYXB0ZXItPlhtdFJpbmdzKSB7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgU1hHX1hNVF9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHN4Z194bXRfcmluZykgKiAxLAogCQkJCQkgICAgYWRhcHRlci0+WG10UmluZ3MsCiAJCQkJCSAgICBhZGFwdGVyLT5QWG10UmluZ3MpOwogCQkJYWRhcHRlci0+WG10UmluZ3MgPSBOVUxMOwogCQl9CiAJCWlmIChhZGFwdGVyLT5SY3ZSaW5ncykgewogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IFNYR19SQ1ZfUklORykgKiA0MDk2LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSwKIAkJCQkJICAgIGFkYXB0ZXItPlJjdlJpbmdzLAogCQkJCQkgICAgYWRhcHRlci0+UFJjdlJpbmdzKTsKIAkJCWFkYXB0ZXItPlJjdlJpbmdzID0gTlVMTDsKIAkJfQogCQkvKiBMb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLi4uLiAqLworCQlpZiAoYWRhcHRlci0+dWNvZGVfc3RhdHMpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9zdGF0cyksCisJCQkJCWFkYXB0ZXItPnB1Y29kZV9zdGF0cywgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWFkYXB0ZXItPnVjb2RlX3N0YXRzID0gTlVMTDsKKwkJfQorCiAJfQogCiAJREJHX0VSUk9SKCIlcyBJbml0aWFsaXplIFJDViBaRVJPIGFuZCBYTVQgWkVSTyByaW5nc1xuIiwgX19mdW5jX18pOwpAQCAtNTE1LDUzICs3MjksMzcgQEAKIAlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbywgU1hHX1hNVF9SSU5HX1NJWkUpOwogCiAJLyogU2FuaXR5IGNoZWNrIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmUgZm9ybWF0ICovCi0JQVNTRVJUKChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8Ci0JICAgICAgIChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFKSk7Ci0JQVNTRVJUKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSA9PQorCS8qIEFTU0VSVCgoYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPT0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFKSB8fAorCSAgICAgICAoYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPT0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRSkpOyAqLworCUFTU0VSVChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykgPT0KIAkgICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUpOwogCi0JLyogQWxsb2NhdGUgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXZSBhbGxvY2F0ZSBhIGJsb2NrIG9mIGJ1ZmZlcnMgYW5kICovCi0JLyogYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgYmxvY2sgYXQgb25jZS4gIFNlZSBzeGdody5oOlNYR19SQ1ZfQkxPQ0sgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUzsKLQkgICAgIGkgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHsKLQkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKLQkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgotCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKLQkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7Ci0JfQotCS8qIE5CTCByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbiBmYWlsIGluIHRoZSAnQWxsb2NhdGVDb21wbGV0ZScgcm91dGluZSwgd2hpY2ggKi8KLQkvKiBkb2Vzbid0IHJldHVybiBzdGF0dXMuICBNYWtlIHN1cmUgd2UgZ290IHRoZSBudW1iZXIgb2YgYnVmZmVycyB3ZSByZXF1ZXN0ZWQgKi8KLQlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUykgewotCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKLQkJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBTWEdfTUFYX0VOVFJJRVMsCi0JCQkgIDApOwotCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOwotCX0KLQogCURCR19FUlJPUigiJXMgQWxsb2NhdGUgRXZlbnRSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCi0JCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBTWEdfRVZFTlRfUklORykgKiBSc3NJZHMpKTsKKwkJICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqIFJzc0lkcykpOwogCiAJLyogQWxsb2NhdGUgZXZlbnQgcXVldWVzLiAqLwogCWFkYXB0ZXItPkV2ZW50UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCQkgICBzaXplb2Yoc3RydWN0IFNYR19FVkVOVF9SSU5HKSAqCi0JCQkJCQkgICBSc3NJZHMsCi0JCQkJCQkgICAmYWRhcHRlci0+UEV2ZW50UmluZ3MpOworCQkJCQkgICBzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqCisJCQkJCSAgIFJzc0lkcywKKwkJCQkJICAgJmFkYXB0ZXItPlBFdmVudFJpbmdzKTsKIAogCWlmICghYWRhcHRlci0+RXZlbnRSaW5ncykgewotCQkvKiBDYWxsZXIgd2lsbCBjYWxsIFN4Z0ZyZWVBZGFwdGVyIHRvIGNsZWFuIHVwIGFib3ZlIGFsbG9jYXRpb25zICovCisJCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUKKwkJICogYWxsb2NhdGlvbnMgKi8KIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGOCIsCiAJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CiAJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CiAJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKIAl9Ci0JbWVtc2V0KGFkYXB0ZXItPkV2ZW50UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3QgU1hHX0VWRU5UX1JJTkcpICogUnNzSWRzKTsKKwltZW1zZXQoYWRhcHRlci0+RXZlbnRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfZXZlbnRfcmluZykgKiBSc3NJZHMpOwogCiAJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBJU1Igc2l6ZVsleF1cbiIsIF9fZnVuY19fLCBJc3JDb3VudCk7CiAJLyogQWxsb2NhdGUgSVNSICovCiAJYWRhcHRlci0+SXNyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCQkgICAgSXNyQ291bnQsICZhZGFwdGVyLT5QSXNyKTsKIAlpZiAoIWFkYXB0ZXItPklzcikgewotCQkvKiBDYWxsZXIgd2lsbCBjYWxsIFN4Z0ZyZWVBZGFwdGVyIHRvIGNsZWFuIHVwIGFib3ZlIGFsbG9jYXRpb25zICovCisJCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUKKwkJICogYWxsb2NhdGlvbnMgKi8KIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGOSIsCiAJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CiAJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CkBAIC01ODgsOCArNzg2LDcgQEAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxjUmVzUyIsCiAJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKIAotCURCR19FUlJPUigiJXMgRVhJVFxuIiwgX19mdW5jX18pOwotCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC01OTksNyArNzk2LDYgQEAKICAqCiAgKiBBcmd1bWVudHMgLQogICoJCXBjaWRldgkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQotICoKICAqLwogc3RhdGljIHZvaWQgc3hnX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKQEAgLTYwOSwxMiArODA1LDE5IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKIAlEQkdfRVJST1IoInN4ZzogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19mdW5jX18sIHBjaV9jb21tYW5kKTsKIAkvKiBTZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KLQluZXdfY29tbWFuZCA9IHBjaV9jb21tYW5kIHwgKFBDSV9DT01NQU5EX01FTU9SWSB8CS8qIE1lbW9yeSBTcGFjZSBFbmFibGUgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX01BU1RFUiB8CS8qIEJ1cyBtYXN0ZXIgZW5hYmxlICovCi0JCQkJICAgICBQQ0lfQ09NTUFORF9JTlZBTElEQVRFIHwJLyogTWVtb3J5IHdyaXRlIGFuZCBpbnZhbGlkYXRlICovCi0JCQkJICAgICBQQ0lfQ09NTUFORF9QQVJJVFkgfAkvKiBQYXJpdHkgZXJyb3IgcmVzcG9uc2UgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX1NFUlIgfAkvKiBTeXN0ZW0gRVJSICovCi0JCQkJICAgICBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spOwkvKiBGYXN0IGJhY2stdG8tYmFjayAqLworCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCAoCisJCQkJICAgICAvKiBNZW1vcnkgU3BhY2UgRW5hYmxlICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfAorCQkJCSAgICAgLyogQnVzIG1hc3RlciBlbmFibGUgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX01BU1RFUiB8CisJCQkgICAgIAkgICAgIC8qIE1lbW9yeSB3cml0ZSBhbmQgaW52YWxpZGF0ZSAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfSU5WQUxJREFURSB8CisJCQkJICAgICAvKiBQYXJpdHkgZXJyb3IgcmVzcG9uc2UgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX1BBUklUWSB8CisJCQkJICAgICAvKiBTeXN0ZW0gRVJSICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9TRVJSIHwKKwkJCQkgICAgIC8qIEZhc3QgYmFjay10by1iYWNrICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spOwogCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkgewogCQlEQkdfRVJST1IoIiVzIC0tIFVwZGF0aW5nIFBDSSBDT01NQU5EIHJlZ2lzdGVyICU0LjR4LT4lNC40eC5cbiIsCiAJCQkgIF9fZnVuY19fLCBwY2lfY29tbWFuZCwgbmV3X2NvbW1hbmQpOwpAQCAtNjIyLDYgKzgyNSw3NyBAQAogCX0KIH0KIAorLyoKKyAqIHN4Z19yZWFkX2NvbmZpZworICogCUBhZGFwdGVyIDogUG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUgZm9yIHRoZSBjYXJkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gRUVQUk9NL0ZMQVNICisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN4Z19yZWFkX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCS8qIHN0cnVjdCBzeGdfY29uZmlnCWRhdGE7ICovCisgIAlzdHJ1Y3Qgc3hnX2NvbmZpZwkqY29uZmlnOworCXN0cnVjdCBzd19jZmdfZGF0YQkqZGF0YTsKKwlkbWFfYWRkcl90CQlwX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJc3RhdHVzOworCXVuc2lnbmVkIGxvbmcJCWk7CisgCWNvbmZpZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAJCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX2NvbmZpZyksICZwX2FkZHIpOworCisgIAlpZighY29uZmlnKSB7CisJCS8qCisJCSAqIFdlIGNhbnQgZ2V0IGV2ZW4gdGhpcyBtdWNoIG1lbW9yeS4gUmFpc2UgYSBoZWxsCisgCQkgKiBHZXQgb3V0IG9mIGhlcmUKKyAJCSAqLworCQlwcmludGsoS0VSTl9FUlIiJXMgOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZWFkaW5nIFwKKwkJCQkgRUVQUk9NXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYXRhID0gJmNvbmZpZy0+U3dDZmc7CisKKyAgICAvKiBJbml0aWFsaXplIChyZWZsZWN0aXZlIG1lbW9yeSkgc3RhdHVzIHJlZ2lzdGVyICovCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWdTdGF0LCBTWEdfQ0ZHX1RJTUVPVVQsIFRSVUUpOworCisgICAgLyogU2VuZCByZXF1ZXN0IHRvIGZldGNoIGNvbmZpZ3VyYXRpb24gZGF0YSAqLworCVdSSVRFX1JFRzY0KGFkYXB0ZXIsIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWcsIHBfYWRkciwgMCk7CisJZm9yKGk9MDsgaTwxMDAwOyBpKyspIHsKKwkJUkVBRF9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZ1N0YXQsIHN0YXR1cyk7CisJCWlmIChzdGF0dXMgIT0gU1hHX0NGR19USU1FT1VUKQorCQkJYnJlYWs7CisJCW1kZWxheSgxKTsJCQkvKiBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzICovCisJfQorCisJc3dpdGNoKHN0YXR1cykgeworCS8qIENvbmZpZyByZWFkIGZyb20gRUVQUk9NIHN1Y2NlZWRlZCAqLworCWNhc2UgU1hHX0NGR19MT0FEX0VFUFJPTToKKwkvKiBDb25maWcgcmVhZCBmcm9tIEZsYXNoIHN1Y2NlZWRlZCAqLworCWNhc2UgU1hHX0NGR19MT0FEX0ZMQVNIOgorCQkvKgorCQkgKiBDb3B5IHRoZSBNQUMgYWRkcmVzcyB0byBhZGFwdGVyIHN0cnVjdHVyZQorCQkgKiBUT0RPOiBXZSBhcmUgbm90IGRvaW5nIHRoZSByZW1haW5pbmcgcGFydCA6IEZSVSwgZXRjCisJCSAqLworCQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwgZGF0YS0+TWFjQWRkclswXS5NYWNBZGRyLAorCQkJc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnX21hYykpOworCQlicmVhazsKKwljYXNlIFNYR19DRkdfVElNRU9VVDoKKwljYXNlIFNYR19DRkdfTE9BRF9JTlZBTElEOgorCWNhc2UgU1hHX0NGR19MT0FEX0VSUk9SOgorCWRlZmF1bHQ6CS8qIEZpeCBkZWZhdWx0IGhhbmRsZXIgbGF0ZXIgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyAgOiBXZSBjb3VsZCBub3QgcmVhZCB0aGUgY29uZmlnIFwKKwkJCXdvcmQuIFN0YXR1cyA9ICVsZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlicmVhazsKKwl9CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIHNpemVvZihzdHJ1Y3Qgc3dfY2ZnX2RhdGEpLCBkYXRhLAorCQkJCXBfYWRkcik7CisJaWYgKGFkYXB0ZXItPm5ldGRldikgeworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Y3Vycm1hY2FkZHIsIDYpOworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLCA2KTsKKwl9CisJc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQgc3hnX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSkKIHsKQEAgLTYzMyw2ICs5MDcsNyBAQAogCXUzMiBzdGF0dXMgPSAwOwogCXVsb25nIG1taW9fc3RhcnQgPSAwOwogCXVsb25nIG1taW9fbGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uX2lkOwogCiAJREJHX0VSUk9SKCJzeGc6ICVzIDIuNiBWRVJTSU9OIEVOVEVSIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsCiAJCSAgX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CkBAIC02NTQsOSArOTI5LDExIEBACiAKIAlpZiAoc3hnX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHN4Z19iYW5uZXIpOwotCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgRFJWX1ZFUlNJT04pOworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgU1hHX0RSVl9WRVJTSU9OKTsKIAl9CiAKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldmlzaW9uX2lkKTsKKwogCWlmICghKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CiAJCURCR19FUlJPUigicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CiAJfSBlbHNlIHsKQEAgLTY3MSw3ICs5NDgsNyBAQAogCiAJREJHX0VSUk9SKCJDYWxsIHBjaV9yZXF1ZXN0X3JlZ2lvbnNcbiIpOwogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lkZXYsIERSVl9OQU1FKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgc3hnX2RyaXZlcl9uYW1lKTsKIAlpZiAoZXJyKSB7CiAJCURCR19FUlJPUigicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKQEAgLTY5Miw2ICs5NjksMTUgQEAKIAogCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaWYgKHJldmlzaW9uX2lkID09IDEpIHsKKwkJYWRhcHRlci0+YXNpY3R5cGUgPSBTQUhBUkFfUkVWX0E7CisJfSBlbHNlIGlmIChyZXZpc2lvbl9pZCA9PSAyKSB7CisJCWFkYXB0ZXItPmFzaWN0eXBlID0gU0FIQVJBX1JFVl9COworCX0gZWxzZSB7CisJCUFTU0VSVCgwKTsKKwkJREJHX0VSUk9SKCIlcyBVbmV4cGVjdGVkIHJldmlzaW9uIElEICV4XG4iLCBfX0ZVTkNUSU9OX18sIHJldmlzaW9uX2lkKTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOworCX0KIAlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CiAJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OwogCkBAIC03MDcsMTIgKzk5MywxMiBAQAogCWlmICghbWVtbWFwcGVkX2lvYWRkcikgewogCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCiAJCQkgIF9fZnVuY19fLCBtbWlvX2xlbiwgbW1pb19zdGFydCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbl8wOwogCX0KIAotCURCR19FUlJPUgotCSAgICAoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCBzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLAotCSAgICAgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CisJREJHX0VSUk9SKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgc3RhcnRbJWx4XSBcCisJICAgICAgbGVuWyVseF0sIElSUSAlZC5cbiIsIF9fZnVuY19fLCBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LAorCQkJCQkgICAgICBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOwogCiAJYWRhcHRlci0+SHdSZWdzID0gKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyOwogCWFkYXB0ZXItPmJhc2VfYWRkciA9IG1lbW1hcHBlZF9pb2FkZHI7CkBAIC03MjksNyArMTAxNSw3IEBACiAJaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7CiAJCURCR19FUlJPUigiJXMgY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKIAkJCSAgX19mdW5jX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uXzI7CiAJfQogCiAJREJHX0VSUk9SKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgIgpAQCAtNzM5LDggKzEwMjUsMTAgQEAKIAlhZGFwdGVyLT5VY29kZVJlZ3MgPSAodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHI7CiAKIAlhZGFwdGVyLT5TdGF0ZSA9IFNYR19TVEFURV9JTklUSUFMSVpJTkc7Ci0JLyogTWFpbnRhaW4gYSBsaXN0IG9mIGFsbCBhZGFwdGVycyBhbmNob3JlZCBieSAqLwotCS8qIHRoZSBnbG9iYWwgU3hnRHJpdmVyIHN0cnVjdHVyZS4gKi8KKwkvKgorCSAqIE1haW50YWluIGEgbGlzdCBvZiBhbGwgYWRhcHRlcnMgYW5jaG9yZWQgYnkKKwkgKiB0aGUgZ2xvYmFsIFN4Z0RyaXZlciBzdHJ1Y3R1cmUuCisJICovCiAJYWRhcHRlci0+TmV4dCA9IFN4Z0RyaXZlci5BZGFwdGVyczsKIAlTeGdEcml2ZXIuQWRhcHRlcnMgPSBhZGFwdGVyOwogCWFkYXB0ZXItPkFkYXB0ZXJJRCA9ICsrU3hnRHJpdmVyLkFkYXB0ZXJJRDsKQEAgLTc1OCwxMCArMTA0NiwxMiBAQAogCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRTsKIAl9CiAKLS8qICAgIHN0YXR1cyA9IFNYR19SRUFEX0VFUFJPTShhZGFwdGVyKTsgKi8KLS8qICAgIGlmICghc3RhdHVzKSB7ICovCi0vKiAgICAgICAgZ290byBzeGdfaW5pdF9iYWQ7ICovCi0vKiAgICB9ICovCisJLyoKKwkgKiAgICBzdGF0dXMgPSBTWEdfUkVBRF9FRVBST00oYWRhcHRlcik7CisJICogICAgaWYgKCFzdGF0dXMpIHsKKwkgKiAgICAgICAgZ290byBzeGdfaW5pdF9iYWQ7CisJICogICAgfQorCSAqLwogCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19jb25maWdfcGNpXG4iLCBfX2Z1bmNfXyk7CiAJc3hnX2NvbmZpZ19wY2kocGNpZGV2KTsKQEAgLTc3NCwxNiArMTA2NCwxMyBAQAogCWFkYXB0ZXItPnZlbmRpZCA9IHBjaV90YmxfZW50cnktPnZlbmRvcjsKIAlhZGFwdGVyLT5kZXZpZCA9IHBjaV90YmxfZW50cnktPmRldmljZTsKIAlhZGFwdGVyLT5zdWJzeXNpZCA9IHBjaV90YmxfZW50cnktPnN1YmRldmljZTsKLQlhZGFwdGVyLT5idXNudW1iZXIgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOwogCWFkYXB0ZXItPnNsb3RudW1iZXIgPSAoKHBjaWRldi0+ZGV2Zm4gPj4gMykgJiAweDFGKTsKIAlhZGFwdGVyLT5mdW5jdGlvbm51bWJlciA9IChwY2lkZXYtPmRldmZuICYgMHg3KTsKIAlhZGFwdGVyLT5tZW1vcnlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CiAJYWRhcHRlci0+aXJxID0gcGNpZGV2LT5pcnE7CiAJYWRhcHRlci0+bmV4dF9uZXRkZXZpY2UgPSBoZWFkX25ldGRldmljZTsKIAloZWFkX25ldGRldmljZSA9IG5ldGRldjsKLS8qICAgICAgYWRhcHRlci0+Y2hpcGlkID0gY2hpcF9pZHg7ICovCiAJYWRhcHRlci0+cG9ydCA9IDA7CS8qYWRhcHRlci0+ZnVuY3Rpb25udW1iZXI7ICovCi0JYWRhcHRlci0+Y2FyZGluZGV4ID0gYWRhcHRlci0+cG9ydDsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBhbmQgb3RoZXIgcmVzb3VyY2VzICovCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXNcbiIsIF9fZnVuY19fKTsKQEAgLTc5NSwxMCArMTA4MiwxMSBAQAogCX0KIAogCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfZG93bmxvYWRfbWljcm9jb2RlXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKHN4Z19kb3dubG9hZF9taWNyb2NvZGUoYWRhcHRlciwgU1hHX1VDT0RFX1NBSEFSQSkpIHsKKwlpZiAoc3hnX2Rvd25sb2FkX21pY3JvY29kZShhZGFwdGVyLCBTWEdfVUNPREVfU1lTVEVNKSkgewogCQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkclxuIiwKIAkJCSAgX19mdW5jX18pOwotCQlzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOworCQlzeGdfcmVhZF9jb25maWcoYWRhcHRlcik7CisJCXN0YXR1cyA9IHN4Z19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOwogCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CkBAIC04MTEsNDAgKzEwOTksNjMgQEAKIAluZXRkZXYtPnN0b3AgPSBzeGdfZW50cnlfaGFsdDsKIAluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN4Z19zZW5kX3BhY2tldHM7CiAJbmV0ZGV2LT5kb19pb2N0bCA9IHN4Z19pb2N0bDsKKwluZXRkZXYtPmNoYW5nZV9tdHUgPSBzeGdfY2hhbmdlX210dTsKICNpZiBYWFhUT0RPCiAJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzeGdfbWFjX3NldF9hZGRyZXNzOwotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKyNlbmRpZgogCW5ldGRldi0+Z2V0X3N0YXRzID0gc3hnX2dldF9zdGF0czsKLSNlbmRpZgogCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc3hnX21jYXN0X3NldF9saXN0OwotI2VuZGlmCisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJnN4Z19uaWNfZXRodG9vbF9vcHMpOworIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCWVyciA9IHN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWYgKGVyciAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJREJHX0VSUk9SKCJDYW5ub3QgZW5hYmxlIE1TSS1YIGNhcGFiaWxpdHlcbiIpOwogCiAJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7Ci0vKiAgc3RyY3B5KG5ldGRldi0+bmFtZSwgcGNpX25hbWUocGNpZGV2KSk7ICovCisJLyogIHN0cmNweShuZXRkZXYtPm5hbWUsIHBjaV9uYW1lKHBjaWRldikpOyAqLwogCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKSB7CiAJCURCR19FUlJPUigiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLiAlc1xuIiwKIAkJCSAgbmV0ZGV2LT5uYW1lKTsKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIAorCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCisJCXN4Z19wb2xsLCBTWEdfTkVUREVWX1dFSUdIVCk7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKKwlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmc3hnX3dhdGNoZG9nOworCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwlJTklUX1dPUksoJmFkYXB0ZXItPnVwZGF0ZV9saW5rX3N0YXR1cywgc3hnX3VwZGF0ZV9saW5rX3N0YXR1cyk7CisKIAlEQkdfRVJST1IKLQkgICAgKCJzeGc6ICVzIGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJICAgICgic3hnOiAlcyBhZGRyIDB4JWx4LCBpcnEgJWQsIE1BQyBhZGRyIFwKKwkJJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCiAJICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldi0+YmFzZV9hZGRyLCBwY2lkZXYtPmlycSwgbmV0ZGV2LT5kZXZfYWRkclswXSwKIAkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCiAJICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKIAotLypzeGdfaW5pdF9iYWQ6ICovCisJLyogc3hnX2luaXRfYmFkOiAqLwogCUFTU0VSVChzdGF0dXMgPT0gRkFMU0UpOwotLyogICAgICBzeGdfZnJlZV9hZGFwdGVyKGFkYXB0ZXIpOyAqLworCS8qIHN4Z19mcmVlX2FkYXB0ZXIoYWRhcHRlcik7ICovCiAKIAlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzdGF0dXNbJXhdIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLAogCQkgIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlyZXR1cm4gc3RhdHVzOwogCiAgICAgICBlcnJfb3V0X3VubWFwOgotCWlvdW5tYXAoKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyKTsKKwlzeGdfZnJlZV9yZXNvdXJjZXMoYWRhcHRlcik7CiAKLSAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKKyAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbl8yOgorCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpOworICAgICAgICBtbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisgICAgICBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb25fMDoKKworICAgICAgICBtbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisgICAgICAgIG1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAogICAgICAgZXJyX291dF9leGl0X3N4Z19wcm9iZToKQEAgLTg1MiwxMyArMTE2MywxNiBAQAogCURCR19FUlJPUigiJXMgRVhJVCBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKIAkJICBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBkZWFsbG9jYXRlIGRldmljZVxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAga2ZyZWUobmV0ZGV2KTsKKwlwcmludGsoIkV4aXQgJXMsIFN4ZyBkcml2ZXIgbG9hZGluZyBmYWlsZWQuLlxuIiwgX19GVU5DVElPTl9fKTsKKwogCXJldHVybiAtRU5PREVWOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIExJTkUgQkFTRSBJbnRlcnJ1cHQgcm91dGluZXMuLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKKyAqIExJTkUgQkFTRSBJbnRlcnJ1cHQgcm91dGluZXMuLgogICoKICAqIHN4Z19kaXNhYmxlX2ludGVycnVwdAogICoKQEAgLTg3NywxMCArMTE5MSw3IEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOwogCS8qIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cyAqLwogCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKLQlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7Ci0JLyogKi8KIAkvKiBUdXJuIG9mZiBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gdGhlIGljciByZWdpc3Rlci4gKi8KLQkvKiAqLwogCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfRElTQUJMRSksIFRSVUUpOwogCiAJYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQgPSAwOwpAQCAtODkwLDcgKzEyMDEsNiBAQAogfQogCiAvKgotICoKICAqIHN4Z19lbmFibGVfaW50ZXJydXB0CiAgKgogICogRW5hYmxlSW50ZXJydXB0IEhhbmRsZXIKQEAgLTkwOCwxMCArMTIxOCw3IEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOwogCS8qIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cyAqLwogCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKLQlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7Ci0JLyogKi8KIAkvKiBUdXJuIG9uIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLiAqLwotCS8qICovCiAJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9FTkFCTEUpLCBUUlVFKTsKIAogCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMTsKQEAgLTkyMSw1MCArMTIyOCw1MSBAQAogfQogCiAvKgotICoKICAqIHN4Z19pc3IgLSBQcm9jZXNzIGFuIGxpbmUtYmFzZWQgaW50ZXJydXB0CiAgKgogICogQXJndW1lbnRzOgotICogCQlDb250ZXh0CQkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIAkJQ29udGV4dAkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCQlRdWV1ZURlZmF1bHQgCS0gT3V0cHV0IHBhcmFtZXRlciB0byBxdWV1ZSB0byBkZWZhdWx0IENQVQotICoJCVRhcmdldENwdXMJCS0gT3V0cHV0IGJpdG1hcCB0byBzY2hlZHVsZSBEUEMncworICoJCVRhcmdldENwdXMJLSBPdXRwdXQgYml0bWFwIHRvIHNjaGVkdWxlIERQQydzCiAgKgotICogUmV0dXJuIFZhbHVlOgotICogCVRSVUUgaWYgb3VyIGludGVycnVwdAorICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIG91ciBpbnRlcnJ1cHQKICAqLwogc3RhdGljIGlycXJldHVybl90IHN4Z19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXBfbmV0X2RldmljZSBkZXYgPSAocF9uZXRfZGV2aWNlKSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIG5ldGRldl9wcml2KGRldik7Ci0vKiAgICAgIHUzMiAgICAgICAgICAgICAgICAgQ3B1TWFzayA9IDAsIGk7ICovCiAKKwlpZihhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkKKwkJcmV0dXJuIElSUV9OT05FOwogCWFkYXB0ZXItPlN0YXRzLk51bUludHMrKzsKIAlpZiAoYWRhcHRlci0+SXNyWzBdID09IDApIHsKLQkJLyogVGhlIFNMSUMgZHJpdmVyIHVzZWQgdG8gZXhwZXJpZW5jZSBhIG51bWJlciBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzICovCi0JCS8qIGR1ZSB0byB0aGUgZGVsYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXNraW5nIG9mIHRoZSBpbnRlcnJ1cHQgKi8KLQkJLyogKHdlJ2QgYm91bmNlIGJhY2sgaW4gaGVyZSkuICBJZiB3ZSBzZWUgdGhhdCBhZ2FpbiB3aXRoIFNhaGFyYSwgKi8KLQkJLyogYWRkIGEgUkVBRF9SRUcgb2YgdGhlIEljciByZWdpc3RlciBhZnRlciB0aGUgV1JJVEVfUkVHIGJlbG93LiAqLworCQkvKgorCQkgKiBUaGUgU0xJQyBkcml2ZXIgdXNlZCB0byBleHBlcmllbmNlIGEgbnVtYmVyIG9mIHNwdXJpb3VzCisJCSAqIGludGVycnVwdHMgZHVlIHRvIHRoZSBkZWxheSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hc2tpbmcgb2YKKwkJICogdGhlIGludGVycnVwdCAod2UnZCBib3VuY2UgYmFjayBpbiBoZXJlKS4gIElmIHdlIHNlZSB0aGF0CisJCSAqIGFnYWluIHdpdGggU2FoYXJhLGFkZCBhIFJFQURfUkVHIG9mIHRoZSBJY3IgcmVnaXN0ZXIgYWZ0ZXIKKwkJICogdGhlIFdSSVRFX1JFRyBiZWxvdy4KKwkJICovCiAJCWFkYXB0ZXItPlN0YXRzLkZhbHNlSW50cysrOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQotCS8qICovCi0JLyogTW92ZSB0aGUgSXNyIGNvbnRlbnRzIGFuZCBjbGVhciB0aGUgdmFsdWUgaW4gKi8KLQkvKiBzaGFyZWQgbWVtb3J5LCBhbmQgbWFzayBpbnRlcnJ1cHRzICovCi0JLyogKi8KLQlhZGFwdGVyLT5Jc3JDb3B5WzBdID0gYWRhcHRlci0+SXNyWzBdOwotCWFkYXB0ZXItPklzclswXSA9IDA7Ci0JV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9NQVNLKSwgVFJVRSk7Ci0vKiAgICAgIEFTU0VSVChhZGFwdGVyLT5Jc3JEcGNzUGVuZGluZyA9PSAwKTsgKi8KKwkvKgorCSAqIE1vdmUgdGhlIElzciBjb250ZW50cyBhbmQgY2xlYXIgdGhlIHZhbHVlIGluCisJICogc2hhcmVkIG1lbW9yeSwgYW5kIG1hc2sgaW50ZXJydXB0cworCSAqLworCS8qIEFTU0VSVChhZGFwdGVyLT5Jc3JEcGNzUGVuZGluZyA9PSAwKTsgKi8KICNpZiBYWFhUT0RPCQkJLyogUlNTIFN0dWZmICovCi0JLyogSWYgUlNTIGlzIGVuYWJsZWQgYW5kIHRoZSBJU1Igc3BlY2lmaWVzICovCi0JLyogU1hHX0lTUl9FVkVOVCwgdGhlbiBzY2hlZHVsZSBEUEMncyAqLwotCS8qIGJhc2VkIG9uIGV2ZW50IHF1ZXVlcy4gKi8KKwkvKgorCSAqIElmIFJTUyBpcyBlbmFibGVkIGFuZCB0aGUgSVNSIHNwZWNpZmllcyBTWEdfSVNSX0VWRU5ULCB0aGVuCisJICogc2NoZWR1bGUgRFBDJ3MgYmFzZWQgb24gZXZlbnQgcXVldWVzLgorCSAqLwogCWlmIChhZGFwdGVyLT5Sc3NFbmFibGVkICYmIChhZGFwdGVyLT5Jc3JDb3B5WzBdICYgU1hHX0lTUl9FVkVOVCkpIHsKIAkJZm9yIChpID0gMDsKIAkJICAgICBpIDwgYWRhcHRlci0+UnNzU3lzdGVtSW5mby0+UHJvY2Vzc29ySW5mby5Sc3NDcHVDb3VudDsKIAkJICAgICBpKyspIHsKLQkJCXN0cnVjdCBYR19FVkVOVF9SSU5HICpFdmVudFJpbmcgPSAmYWRhcHRlci0+RXZlbnRSaW5nc1tpXTsKLQkJCXN0cnVjdCBTWEdfRVZFTlQgKkV2ZW50ID0KKwkJCXN0cnVjdCBzeGdfZXZlbnRfcmluZyAqRXZlbnRSaW5nID0KKwkJCQkJCSZhZGFwdGVyLT5FdmVudFJpbmdzW2ldOworCQkJc3RydWN0IHN4Z19ldmVudCAqRXZlbnQgPQogCQkJICAgICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W2ldXTsKIAkJCXVuc2lnbmVkIGNoYXIgQ3B1ID0KIAkJCSAgICBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Sc3NJZFRvQ3B1W2ldOwpAQCAtOTc0LDggKzEyODIsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQkvKiBOb3csIGVpdGhlciBzY2hlZHVsZSB0aGUgQ1BVcyBzcGVjaWZpZWQgYnkgdGhlIENwdU1hc2ssICovCi0JLyogb3IgcXVldWUgZGVmYXVsdCAqLworCS8qCisJICogTm93LCBlaXRoZXIgc2NoZWR1bGUgdGhlIENQVXMgc3BlY2lmaWVkIGJ5IHRoZSBDcHVNYXNrLAorCSAqIG9yIHF1ZXVlIGRlZmF1bHQKKwkgKi8KIAlpZiAoQ3B1TWFzaykgewogCQkqUXVldWVEZWZhdWx0ID0gRkFMU0U7CiAJfSBlbHNlIHsKQEAgLTk4NCwzNCArMTI5NCw0MSBAQAogCX0KIAkqVGFyZ2V0Q3B1cyA9IENwdU1hc2s7CiAjZW5kaWYKLQkvKiAqLwotCS8qICBUaGVyZSBhcmUgbm8gRFBDcyBpbiBMaW51eCwgc28gY2FsbCB0aGUgaGFuZGxlciBub3cgKi8KLQkvKiAqLwotCXN4Z19oYW5kbGVfaW50ZXJydXB0KGFkYXB0ZXIpOworCXN4Z19pbnRlcnJ1cHQoYWRhcHRlcik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBzeGdfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0vKiAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBSc3NJZCAgID0gMDsgKi8KLQl1MzIgTmV3SXNyOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfTUFTSyksIFRSVUUpOwogCi0JaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgewotCQlEQkdfRVJST1IoIkVudGVyIHN4Z19oYW5kbGVfaW50ZXJydXB0IElTUlsleF1cbiIsCi0JCQkgIGFkYXB0ZXItPklzckNvcHlbMF0pOworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBzeGdfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgKndvcmtfZG9uZSwKKwkJCQkJIGludCBidWRnZXQpCit7CisJLyogdW5zaWduZWQgY2hhciAgICAgICAgICAgUnNzSWQgICA9IDA7ICovCisJdTMyIE5ld0lzcjsKKwlpbnQgc3hnX25hcGlfY29udGludWUgPSAxOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkhuZGxJbnRyIiwKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5Jc3JDb3B5WzBdLCAwLCAwKTsKIAkvKiBGb3Igbm93LCBSU1MgaXMgZGlzYWJsZWQgd2l0aCBsaW5lIGJhc2VkIGludGVycnVwdHMgKi8KIAlBU1NFUlQoYWRhcHRlci0+UnNzRW5hYmxlZCA9PSBGQUxTRSk7Ci0JQVNTRVJUKGFkYXB0ZXItPk1zaUVuYWJsZWQgPT0gRkFMU0UpOwotCUFTU0VSVChhZGFwdGVyLT5Jc3JDb3B5WzBdKTsKLS8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCisKKwlhZGFwdGVyLT5Jc3JDb3B5WzBdID0gYWRhcHRlci0+SXNyWzBdOworCWFkYXB0ZXItPklzclswXSA9IDA7CiAKIAkvKiBBbHdheXMgcHJvY2VzcyB0aGUgZXZlbnQgcXVldWUuICovCi0Jc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoYWRhcHRlciwKLQkJCQkoYWRhcHRlci0+UnNzRW5hYmxlZCA/IC8qUnNzSWQgKi8gMCA6IDApKTsKKwl3aGlsZSAoc3hnX25hcGlfY29udGludWUpCisJeworCQlzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShhZGFwdGVyLAorCQkJCShhZGFwdGVyLT5Sc3NFbmFibGVkID8gLypSc3NJZCAqLyAwIDogMCksCisJCQkJICZzeGdfbmFwaV9jb250aW51ZSwgd29ya19kb25lLCBidWRnZXQpOworCX0KIAogI2lmIFhYWFRPRE8JCQkvKiBSU1Mgc3R1ZmYgKi8KIAlpZiAoLS1hZGFwdGVyLT5Jc3JEcGNzUGVuZGluZykgewpAQCAtMTAyMiwzMCArMTMzOSwzMSBAQAogCQlyZXR1cm47CiAJfQogI2VuZGlmCi0JLyogKi8KIAkvKiBMYXN0IChvciBvbmx5KSBEUEMgcHJvY2Vzc2VzIHRoZSBJU1IgYW5kIGNsZWFycyB0aGUgaW50ZXJydXB0LiAqLwotCS8qICovCiAJTmV3SXNyID0gc3hnX3Byb2Nlc3NfaXNyKGFkYXB0ZXIsIDApOwotCS8qICovCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyAqLwotCS8qICovCiAJYWRhcHRlci0+SXNyQ29weVswXSA9IDA7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ2xlYXJJc3IiLAogCQkgIGFkYXB0ZXIsIE5ld0lzciwgMCwgMCk7CiAKLQlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJFeGl0IHN4Z19oYW5kbGVfaW50ZXJydXB0MiBhZnRlciBlbmFibGluZyBpbnRlcnJ1cHRcbiIpOwotCX0KLQotCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCBOZXdJc3IsIFRSVUUpOwotCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEhuZGxJbnQiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogfQorc3RhdGljIGludCBzeGdfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYWRhcHRlcl90LCBuYXBpKTsKKwlpbnQgd29ya19kb25lID0gMDsKKworCXN4Z19oYW5kbGVfaW50ZXJydXB0KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCAwLCBUUlVFKTsKKwl9CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KIAogLyoKLSAqCiAgKiBzeGdfcHJvY2Vzc19pc3IgLSBQcm9jZXNzIGFuIGludGVycnVwdC4gIENhbGxlZCBmcm9tIHRoZSBsaW5lLWJhc2VkIGFuZAogICoJCQltZXNzYWdlIGJhc2VkIGludGVycnVwdCBEUEMgcm91dGluZXMKICAqCkBAIC0xMDcyLDI0ICsxMzkwLDI4IEBACiAJCX0KIAkJLyogTm8gaG9zdCBidWZmZXIgKi8KIAkJaWYgKElzciAmIFNYR19JU1JfUk1JU1MpIHsKLQkJCS8qIFRoZXJlIGlzIGEgYnVuY2ggb2YgY29kZSBpbiB0aGUgU0xJQyBkcml2ZXIgd2hpY2ggKi8KLQkJCS8qIGF0dGVtcHRzIHRvIHByb2Nlc3MgbW9yZSByZWNlaXZlIGV2ZW50cyBwZXIgRFBDICovCi0JCQkvKiBpZiB3ZSBzdGFydCB0byBmYWxsIGJlaGluZC4gIFdlJ2xsIHByb2JhYmx5ICovCi0JCQkvKiBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGhlcmUsIGJ1dCBob2xkICovCi0JCQkvKiBvZmYgZm9yIG5vdy4gIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjb2RlIG1vcmUgKi8KLQkJCS8qIGNvbXBsaWNhdGVkIHRoYW4gc3RyaWN0bHkgbmVlZGVkLiAqLwotCQkJYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIrKzsKLQkJCWlmIChhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlciA8IDUpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIGJ1bmNoIG9mIGNvZGUgaW4gdGhlIFNMSUMgZHJpdmVyIHdoaWNoCisJCQkgKiBhdHRlbXB0cyB0byBwcm9jZXNzIG1vcmUgcmVjZWl2ZSBldmVudHMgcGVyIERQQworCQkJICogaWYgd2Ugc3RhcnQgdG8gZmFsbCBiZWhpbmQuICBXZSdsbCBwcm9iYWJseWQKKwkJCSAqIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgaGVyZSwgYnV0IGhvbGQKKwkJCSAqIG9mZiBmb3Igbm93LiAgSSBkb24ndCB3YW50IHRvIG1ha2UgdGhlIGNvZGUgbW9yZQorCQkJICogY29tcGxpY2F0ZWQgdGhhbiBzdHJpY3RseSBuZWVkZWQuCisJCQkgKi8KKwkJCWFkYXB0ZXItPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKyAJCQlpZiAoYWRhcHRlci0+c3RhdHMucnhfbWlzc2VkX2Vycm9yczwgNSkgewogCQkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBSTUlTUyEhXG4iLAogCQkJCQkgIF9fZnVuY19fKTsKIAkJCX0KIAkJfQogCQkvKiBDYXJkIGNyYXNoICovCiAJCWlmIChJc3IgJiBTWEdfSVNSX0RFQUQpIHsKLQkJCS8qIFNldCBhc2lkZSB0aGUgY3Jhc2ggaW5mbyBhbmQgc2V0IHRoZSBhZGFwdGVyIHN0YXRlIHRvIFJFU0VUICovCi0JCQlhZGFwdGVyLT5DcmFzaENwdSA9Ci0JCQkgICAgKHVuc2lnbmVkIGNoYXIpKChJc3IgJiBTWEdfSVNSX0NQVSkgPj4KLQkJCQkJICAgIFNYR19JU1JfQ1BVX1NISUZUKTsKKwkJCS8qCisJCQkgKiBTZXQgYXNpZGUgdGhlIGNyYXNoIGluZm8gYW5kIHNldCB0aGUgYWRhcHRlciBzdGF0ZQorIAkJCSAqIHRvIFJFU0VUCisgCQkJICovCisJCQlhZGFwdGVyLT5DcmFzaENwdSA9ICh1bnNpZ25lZCBjaGFyKQorCQkJCSgoSXNyICYgU1hHX0lTUl9DUFUpID4+IFNYR19JU1JfQ1BVX1NISUZUKTsKIAkJCWFkYXB0ZXItPkNyYXNoTG9jYXRpb24gPSAodXNob3J0KSAoSXNyICYgU1hHX0lTUl9DUkFTSCk7CiAJCQlhZGFwdGVyLT5EZWFkID0gVFJVRTsKIAkJCURCR19FUlJPUigiJXM6IElTUl9ERUFEICV4LCBDUFU6ICVkXG4iLCBfX2Z1bmNfXywKQEAgLTEwOTcsMTggKzE0MTksMTggQEAKIAkJfQogCQkvKiBFdmVudCByaW5nIGZ1bGwgKi8KIAkJaWYgKElzciAmIFNYR19JU1JfRVJGVUxMKSB7Ci0JCQkvKiBTYW1lIGlzc3VlIGFzIFJNSVNTLCByZWFsbHkuICBUaGlzIG1lYW5zIHRoZSAqLwotCQkJLyogaG9zdCBpcyBmYWxsaW5nIGJlaGluZCB0aGUgY2FyZC4gIE5lZWQgdG8gaW5jcmVhc2UgKi8KLQkJCS8qIGV2ZW50IHJpbmcgc2l6ZSwgcHJvY2VzcyBtb3JlIGV2ZW50cyBwZXIgaW50ZXJydXB0LCAqLwotCQkJLyogYW5kL29yIHJlZHVjZS9yZW1vdmUgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uLiAqLworCQkJLyoKKwkJCSAqIFNhbWUgaXNzdWUgYXMgUk1JU1MsIHJlYWxseS4gIFRoaXMgbWVhbnMgdGhlCisJCQkgKiBob3N0IGlzIGZhbGxpbmcgYmVoaW5kIHRoZSBjYXJkLiAgTmVlZCB0byBpbmNyZWFzZQorCQkJICogZXZlbnQgcmluZyBzaXplLCBwcm9jZXNzIG1vcmUgZXZlbnRzIHBlciBpbnRlcnJ1cHQsCisJCQkgKiBhbmQvb3IgcmVkdWNlL3JlbW92ZSBpbnRlcnJ1cHQgYWdncmVnYXRpb24uCisJCQkgKi8KIAkJCWFkYXB0ZXItPlN0YXRzLkV2ZW50UmluZ0Z1bGwrKzsKIAkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBFVkVOVCBSSU5HIEZVTEwhIVxuIiwKIAkJCQkgIF9fZnVuY19fKTsKIAkJfQogCQkvKiBUcmFuc21pdCBkcm9wIC0gbm8gRFJBTSBidWZmZXJzIG9yIFhNVCBlcnJvciAqLwogCQlpZiAoSXNyICYgU1hHX0lTUl9YRFJPUCkgewotCQkJYWRhcHRlci0+U3RhdHMuWG10RHJvcHMrKzsKLQkJCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOwogCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIFhEUk9QISFcbiIsIF9fZnVuY19fKTsKIAkJfQogCX0KQEAgLTExMTgsMTggKzE0NDAsMjQgQEAKIAl9CiAJLyogRHVtcCAqLwogCWlmIChJc3IgJiBTWEdfSVNSX1VQQykgewotCQlBU1NFUlQoYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcpOwkvKiBNYXliZSBjaGFuZ2Ugd2hlbiBkZWJ1ZyBpcyBhZGRlZC4uICovCisJCS8qIE1heWJlIGNoYW5nZSB3aGVuIGRlYnVnIGlzIGFkZGVkLi4gKi8KKy8vCQlBU1NFUlQoYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcpOwogCQlhZGFwdGVyLT5EdW1wQ21kUnVubmluZyA9IEZBTFNFOwogCX0KIAkvKiBMaW5rIGV2ZW50ICovCiAJaWYgKElzciAmIFNYR19JU1JfTElOSykgewotCQlzeGdfbGlua19ldmVudChhZGFwdGVyKTsKKwkJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV04pIHsKKwkJCWFkYXB0ZXItPmxpbmtfc3RhdHVzX2NoYW5nZWQgPSAxOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dXBkYXRlX2xpbmtfc3RhdHVzKTsKKwkJfQogCX0KIAkvKiBEZWJ1ZyAtIGJyZWFrcG9pbnQgaGl0ICovCiAJaWYgKElzciAmIFNYR19JU1JfQlJFQUspIHsKLQkJLyogQXQgdGhlIG1vbWVudCBBR0RCIGlzbid0IHdyaXR0ZW4gdG8gc3VwcG9ydCBpbnRlcmFjdGl2ZSAqLwotCQkvKiBkZWJ1ZyBzZXNzaW9ucy4gIFdoZW4gaXQgaXMsIHRoaXMgaW50ZXJydXB0IHdpbGwgYmUgdXNlZCAqLwotCQkvKiB0byBzaWduYWwgQUdEQiB0aGF0IGl0IGhhcyBoaXQgYSBicmVha3BvaW50LiAgRm9yIG5vdywgQVNTRVJULiAqLworCQkvKgorCQkgKiBBdCB0aGUgbW9tZW50IEFHREIgaXNuJ3Qgd3JpdHRlbiB0byBzdXBwb3J0IGludGVyYWN0aXZlCisJCSAqIGRlYnVnIHNlc3Npb25zLiAgV2hlbiBpdCBpcywgdGhpcyBpbnRlcnJ1cHQgd2lsbCBiZSB1c2VkIHRvCisJCSAqIHNpZ25hbCBBR0RCIHRoYXQgaXQgaGFzIGhpdCBhIGJyZWFrcG9pbnQuICBGb3Igbm93LCBBU1NFUlQuCisJCSAqLwogCQlBU1NFUlQoMCk7CiAJfQogCS8qIEhlYXJ0YmVhdCByZXNwb25zZSAqLwpAQCAtMTE0Myw3ICsxNDcxLDMzIEBACiB9CiAKIC8qCisgKiBzeGdfcmN2X2NoZWNrc3VtIC0gU2V0IHRoZSBjaGVja3N1bSBmb3IgcmVjZWl2ZWQgcGFja2V0CiAgKgorICogQXJndWVtZW50czoKKyAqIAkJQGFkYXB0ZXIgLSBBZGFwdGVyIHN0cnVjdHVyZSBvbiB3aGljaCBwYWNrZXQgaXMgcmVjZWl2ZWQKKyAqIAkJQHNrYiAtIFBhY2tldCB3aGljaCBpcyByZWNlaWV2ZWQKKyAqIAkJQEV2ZW50IC0gRXZlbnQgcmVhZCBmcm9tIGhhcmR3YXJlCisgKi8KKwordm9pZCBzeGdfcmN2X2NoZWNrc3VtKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgc3RydWN0IHN4Z19ldmVudCAqRXZlbnQpCit7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCWlmIChsaWtlbHkoYWRhcHRlci0+ZmxhZ3MgJiBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRCkpIHsKKwkJaWYgKGxpa2VseShhZGFwdGVyLT5mbGFncyAmIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCkKKwkJCSYmIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1RDUElQKSkgeworCQkJaWYoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1RDUEJBRCkpCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaWYoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX0lQQkFEKSkKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0gZWxzZSBpZihFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX0lQT05MWSkgeworCQkJaWYoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX0lQQkFEKSkKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQl9CisJfQorfQorCisvKgogICogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUgLSBQcm9jZXNzIG91ciBldmVudCBxdWV1ZQogICoKICAqIEFyZ3VtZW50czoKQEAgLTExNTMsNDYgKzE1MDcsNTIgQEAKICAqIFJldHVybiBWYWx1ZToKICAqIAlOb25lLgogICovCi1zdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBSc3NJZCkKK3N0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkLAorCQkJIGludCAqc3hnX25hcGlfY29udGludWUsIGludCAqd29ya19kb25lLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBTWEdfRVZFTlRfUklORyAqRXZlbnRSaW5nID0gJmFkYXB0ZXItPkV2ZW50UmluZ3NbUnNzSWRdOwotCXN0cnVjdCBTWEdfRVZFTlQgKkV2ZW50ID0gJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdXTsKKwlzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcgKkV2ZW50UmluZyA9ICZhZGFwdGVyLT5FdmVudFJpbmdzW1Jzc0lkXTsKKwlzdHJ1Y3Qgc3hnX2V2ZW50ICpFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CiAJdTMyIEV2ZW50c1Byb2Nlc3NlZCA9IDAsIEJhdGNoZXMgPSAwOwotCXUzMiBudW1fc2ticyA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKICNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCiAJc3RydWN0IHNrX2J1ZmYgKnByZXZfc2tiID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqSW5kaWNhdGlvbkxpc3RbU1hHX1JDVl9BUlJBWVNJWkVdOwogCXUzMiBJbmRleDsKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKlJjdkRhdGFCdWZmZXJIZHI7CisJc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICpSY3ZEYXRhQnVmZmVySGRyOwogI2VuZGlmCiAJdTMyIFJldHVyblN0YXR1cyA9IDA7CisJaW50IHN4Z19yY3ZfZGF0YV9idWZmZXJzID0gU1hHX1JDVl9EQVRBX0JVRkZFUlM7CiAKIAlBU1NFUlQoKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9SVU5OSU5HKSB8fAogCSAgICAgICAoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1BBVVNJTkcpIHx8CiAJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUEFVU0VEKSB8fAogCSAgICAgICAoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX0hBTFRJTkcpKTsKLQkvKiBXZSBtYXkgc3RpbGwgaGF2ZSB1bnByb2Nlc3NlZCBldmVudHMgb24gdGhlIHF1ZXVlIGlmICovCi0JLyogdGhlIGNhcmQgY3Jhc2hlZC4gIERvbid0IHByb2Nlc3MgdGhlbS4gKi8KKwkvKgorCSAqIFdlIG1heSBzdGlsbCBoYXZlIHVucHJvY2Vzc2VkIGV2ZW50cyBvbiB0aGUgcXVldWUgaWYKKwkgKiB0aGUgY2FyZCBjcmFzaGVkLiAgRG9uJ3QgcHJvY2VzcyB0aGVtLgorCSAqLwogCWlmIChhZGFwdGVyLT5EZWFkKSB7CiAJCXJldHVybiAoMCk7CiAJfQotCS8qIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBwcm9jZXNzb3IgdGhhdCAqLwotCS8qIGFjY2Vzc2VzIHRoaXMgcXVldWUsIGFuZCBvbmx5IGF0IGludGVycnVwdC1EUEMgdGltZS4gIFNvICovCi0JLyogd2Ugc2hvdWxkbid0IG5lZWQgYSBsb2NrIGZvciBhbnkgb2YgdGhpcy4gKi8KKwkvKgorCSAqICBJbiB0aGVvcnkgdGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgcHJvY2Vzc29yIHRoYXQKKwkgKiBhY2Nlc3NlcyB0aGlzIHF1ZXVlLCBhbmQgb25seSBhdCBpbnRlcnJ1cHQtRFBDIHRpbWUuICBTby8KKwkgKiB3ZSBzaG91bGRuJ3QgbmVlZCBhIGxvY2sgZm9yIGFueSBvZiB0aGlzLgorCSAqLwogCXdoaWxlIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1ZBTElEKSB7CisJCSgqc3hnX25hcGlfY29udGludWUpID0gMTsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRXZlbnQiLAogCQkJICBFdmVudCwgRXZlbnQtPkNvZGUsIEV2ZW50LT5TdGF0dXMsCiAJCQkgIGFkYXB0ZXItPk5leHRFdmVudCk7CiAJCXN3aXRjaCAoRXZlbnQtPkNvZGUpIHsKIAkJY2FzZSBFVkVOVF9DT0RFX0JVRkZFUlM6Ci0JCQlBU1NFUlQoIShFdmVudC0+Q29tbWFuZEluZGV4ICYgMHhGRjAwKSk7CS8qIFNYR19SSU5HX0lORk8gSGVhZCAmIFRhaWwgPT0gdW5zaWduZWQgY2hhciAqLwotCQkJLyogKi8KKwkJCS8qIHN0cnVjdCBzeGdfcmluZ19pbmZvIEhlYWQgJiBUYWlsID09IHVuc2lnbmVkIGNoYXIgKi8KKwkJCUFTU0VSVCghKEV2ZW50LT5Db21tYW5kSW5kZXggJiAweEZGMDApKTsKIAkJCXN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyhhZGFwdGVyLAogCQkJCQkJICAgICAgIEV2ZW50LT5Db21tYW5kSW5kZXgpOwotCQkJLyogKi8KIAkJCWJyZWFrOwogCQljYXNlIEVWRU5UX0NPREVfU0xPV1JDVjoKKwkJCSgqd29ya19kb25lKSsrOwogCQkJLS1hZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkOwogCQkJaWYgKChza2IgPSBzeGdfc2xvd19yZWNlaXZlKGFkYXB0ZXIsIEV2ZW50KSkpIHsKIAkJCQl1MzIgcnhfYnl0ZXM7CkBAIC0xMjAwLDUxICsxNTYwLDYxIEBACiAJCQkJLyogQWRkIGl0IHRvIG91ciBpbmRpY2F0aW9uIGxpc3QgKi8KIAkJCQlTWEdfQUREX1JDVl9QQUNLRVQoYWRhcHRlciwgc2tiLCBwcmV2X3NrYiwKIAkJCQkJCSAgIEluZGljYXRpb25MaXN0LCBudW1fc2ticyk7Ci0JCQkJLyogIEluIExpbnV4LCB3ZSBqdXN0IHBhc3MgdXAgZWFjaCBza2IgdG8gdGhlIHByb3RvY29sIGFib3ZlIGF0IHRoaXMgcG9pbnQsICovCi0JCQkJLyogIHRoZXJlIGlzIG5vIGNhcGFiaWxpdHkgb2YgYW4gaW5kaWNhdGlvbiBsaXN0LiAqLworCQkJCS8qCisJCQkJICogTGludXgsIHdlIGp1c3QgcGFzcyB1cCBlYWNoIHNrYiB0byB0aGUKKwkJCQkgKiBwcm90b2NvbCBhYm92ZSBhdCB0aGlzIHBvaW50LCB0aGVyZSBpcyBubworCQkJCSAqIGNhcGFiaWxpdHkgb2YgYW4gaW5kaWNhdGlvbiBsaXN0LgorCQkJCSAqLwogI2Vsc2UKLS8qIENIRUNLICAgICAgICAgICAgc2tiX3B1bGwoc2tiLCBJTklDX1JDVkJVRl9IRUFEU0laRSk7ICovCi0JCQkJcnhfYnl0ZXMgPSBFdmVudC0+TGVuZ3RoOwkvKiAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOyAqLwotCQkJCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7CisJCQkJLyogQ0hFQ0sgc2tiX3B1bGwoc2tiLCBJTklDX1JDVkJVRl9IRUFEU0laRSk7ICovCisJCQkJLyogKHJjdmJ1Zi0+bGVuZ3RoICYgSVJIRERSX0ZMRU5fTVNLKTsgKi8KKwkJCQlyeF9ieXRlcyA9IEV2ZW50LT5MZW5ndGg7CiAJCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJCWFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOwotI2lmIFNYR19PRkZMT0FEX0lQX0NIRUNLU1VNCi0JCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLSNlbmRpZgorCQkJCXN4Z19yY3ZfY2hlY2tzdW0oYWRhcHRlciwgc2tiLCBFdmVudCk7CiAJCQkJc2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwotCQkJCW5ldGlmX3J4KHNrYik7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKICNlbmRpZgogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEQkdfRVJST1IoIiVzOiBFUlJPUiAgSW52YWxpZCBFdmVudENvZGUgJWRcbiIsCiAJCQkJICBfX2Z1bmNfXywgRXZlbnQtPkNvZGUpOwotLyogICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOyAqLworCQkvKiBBU1NFUlQoMCk7ICovCiAJCX0KLQkJLyogU2VlIGlmIHdlIG5lZWQgdG8gcmVzdG9jayBjYXJkIHJlY2VpdmUgYnVmZmVycy4gKi8KLQkJLyogVGhlcmUgYXJlIHR3byB0aGluZ3MgdG8gbm90ZSBoZXJlOiAqLwotCQkvKiAgICAgIEZpcnN0IC0gVGhpcyB0ZXN0IGlzIG5vdCBTTVAgc2FmZS4gIFRoZSAqLwotCQkvKiAgICAgICAgICAgICAgYWRhcHRlci0+QnVmZmVyc09uQ2FyZCBmaWVsZCBpcyBwcm90ZWN0ZWQgdmlhIGF0b21pYyBpbnRlcmxvY2tlZCBjYWxscywgYnV0ICovCi0JCS8qICAgICAgICAgICAgICB3ZSBkbyBub3QgcHJvdGVjdCBpdCB3aXRoIHJlc3BlY3QgdG8gdGhlc2UgdGVzdHMuICBUaGUgb25seSB3YXkgdG8gZG8gdGhhdCAqLwotCQkvKiAgICAgIGlzIHdpdGggYSBsb2NrLCBhbmQgSSBkb24ndCB3YW50IHRvIGdyYWIgYSBsb2NrIGV2ZXJ5IHRpbWUgd2UgYWRqdXN0IHRoZSAqLwotCQkvKiAgICAgIEJ1ZmZlcnNPbkNhcmQgY291bnQuICBJbnN0ZWFkLCB3ZSBhbGxvdyB0aGUgYnVmZmVyIHJlcGxlbmlzaG1lbnQgdG8gYmUgb2ZmICovCi0JCS8qICAgICAgb25jZSBpbiBhIHdoaWxlLiAgVGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGUgY2FyZCBpcyBnaXZlbiBvbmUgKi8KLQkJLyogICAgICBtb3JlLW9yLWxlc3MgZGVzY3JpcHRvciBibG9jayB0aGFuIHRoZSBhcmJpdHJhcnkgdmFsdWUgd2UndmUgY2hvc2VuLiAqLwotCQkvKiAgICAgIE5vIGJpZyBkZWFsICovCi0JCS8qICAgICAgSW4gc2hvcnQgRE8gTk9UIEFERCBBIExPQ0sgSEVSRSwgT1IgV0hFUkUgUmN2QnVmZmVyc09uQ2FyZCBpcyBhZGp1c3RlZC4gKi8KLQkJLyogICAgICBTZWNvbmQgLSBXZSBleHBlY3QgdGhpcyB0ZXN0IHRvIHJhcmVseSBldmFsdWF0ZSB0byB0cnVlLiAgV2UgYXR0ZW1wdCB0byAqLwotCQkvKiAgICAgIHJlZmlsbCBkZXNjcmlwdG9yIGJsb2NrcyBhcyB0aGV5IGFyZSByZXR1cm5lZCB0byB1cyAqLwotCQkvKiAgICAgIChzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MpLCBzbyBUaGUgb25seSB0aW1lIHRoaXMgc2hvdWxkIGV2YWx1YXRlICovCi0JCS8qICAgICAgdG8gdHJ1ZSBpcyB3aGVuIHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyBmYWlsZWQgdG8gYWxsb2NhdGUgKi8KLQkJLyogICAgICAgICAgICAgIHJlY2VpdmUgYnVmZmVycy4gKi8KLQkJaWYgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBTWEdfUkNWX0RBVEFfQlVGRkVSUykgeworCQkvKgorCQkgKiBTZWUgaWYgd2UgbmVlZCB0byByZXN0b2NrIGNhcmQgcmVjZWl2ZSBidWZmZXJzLgorCQkgKiBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0byBub3RlIGhlcmU6CisJCSAqICBGaXJzdCAtIFRoaXMgdGVzdCBpcyBub3QgU01QIHNhZmUuICBUaGUKKwkJICogICAgYWRhcHRlci0+QnVmZmVyc09uQ2FyZCBmaWVsZCBpcyBwcm90ZWN0ZWQgdmlhIGF0b21pYworCQkgKiAgICBpbnRlcmxvY2tlZCBjYWxscywgYnV0IHdlIGRvIG5vdCBwcm90ZWN0IGl0IHdpdGggcmVzcGVjdAorCQkgKiAgICB0byB0aGVzZSB0ZXN0cy4gIFRoZSBvbmx5IHdheSB0byBkbyB0aGF0IGlzIHdpdGggYSBsb2NrLAorCQkgKiAgICBhbmQgSSBkb24ndCB3YW50IHRvIGdyYWIgYSBsb2NrIGV2ZXJ5IHRpbWUgd2UgYWRqdXN0IHRoZQorCQkgKiAgICBCdWZmZXJzT25DYXJkIGNvdW50LiAgSW5zdGVhZCwgd2UgYWxsb3cgdGhlIGJ1ZmZlcgorCQkgKiAgICByZXBsZW5pc2htZW50IHRvIGJlIG9mZiBvbmNlIGluIGEgd2hpbGUuIFRoZSB3b3JzdCB0aGF0CisJCSAqICAgIGNhbiBoYXBwZW4gaXMgdGhlIGNhcmQgaXMgZ2l2ZW4gb24gbW9yZS1vci1sZXNzIGRlc2NyaXB0b3IKKwkJICogICAgYmxvY2sgdGhhbiB0aGUgYXJiaXRyYXJ5IHZhbHVlIHdlJ3ZlIGNob3Nlbi4gTm8gYmlnIGRlYWwKKwkJICogICAgSW4gc2hvcnQgRE8gTk9UIEFERCBBIExPQ0sgSEVSRSwgT1IgV0hFUkUgUmN2QnVmZmVyc09uQ2FyZAorCQkgKiAgICBpcyBhZGp1c3RlZC4KKwkJICogIFNlY29uZCAtIFdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gcmFyZWx5CisJCSAqICAgIGV2YWx1YXRlIHRvIHRydWUuICBXZSBhdHRlbXB0IHRvIHJlZmlsbCBkZXNjcmlwdG9yIGJsb2NrcworCQkgKiAgICBhcyB0aGV5IGFyZSByZXR1cm5lZCB0byB1cyAoc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKQorCQkgKiAgICBzbyBUaGUgb25seSB0aW1lIHRoaXMgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaXMgd2hlbgorCQkgKiAgICBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgZmFpbGVkIHRvIGFsbG9jYXRlCisJCSAqICAgIHJlY2VpdmUgYnVmZmVycy4KKwkJICovCisJCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpCisJCQlzeGdfcmN2X2RhdGFfYnVmZmVycyA9IFNYR19KVU1CT19SQ1ZfREFUQV9CVUZGRVJTOworCisJCWlmIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgc3hnX3Jjdl9kYXRhX2J1ZmZlcnMpIHsKIAkJCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKIAkJfQotCQkvKiBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoaXMgdG8gemVyby4gKi8KLQkJLyogQnV0IGNsZWFyaW5nIHRoZSB0b3AgYml0IHNhdmVzIHBvdGVudGlhbCBkZWJ1ZyBpbmZvLi4uICovCisJCS8qCisJCSAqIEl0J3MgbW9yZSBlZmZpY2llbnQgdG8ganVzdCBzZXQgdGhpcyB0byB6ZXJvLgorCQkgKiBCdXQgY2xlYXJpbmcgdGhlIHRvcCBiaXQgc2F2ZXMgcG90ZW50aWFsIGRlYnVnIGluZm8uLi4KKwkJICovCiAJCUV2ZW50LT5TdGF0dXMgJj0gfkVWRU5UX1NUQVRVU19WQUxJRDsKLQkJLyogQWR2YW5jdCB0byB0aGUgbmV4dCBldmVudCAqLworCQkvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGV2ZW50ICovCiAJCVNYR19BRFZBTkNFX0lOREVYKGFkYXB0ZXItPk5leHRFdmVudFtSc3NJZF0sIEVWRU5UX1JJTkdfU0laRSk7CiAJCUV2ZW50ID0gJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdXTsKIAkJRXZlbnRzUHJvY2Vzc2VkKys7CkBAIC0xMjUzLDkgKzE2MjMsMTEgQEAKIAkJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbUnNzSWRdLkV2ZW50UmVsZWFzZSwKIAkJCQkgIEVWRU5UX1JJTkdfQkFUQ0gsIEZBTFNFKTsKIAkJCUV2ZW50c1Byb2Nlc3NlZCA9IDA7Ci0JCQkvKiBJZiB3ZSd2ZSBwcm9jZXNzZWQgb3VyIGJhdGNoIGxpbWl0LCBicmVhayBvdXQgb2YgdGhlICovCi0JCQkvKiBsb29wIGFuZCByZXR1cm4gU1hHX0lTUl9FVkVOVCB0byBhcnJhbmdlIGZvciB1cyB0byAqLwotCQkJLyogYmUgY2FsbGVkIGFnYWluICovCisJCQkvKgorCQkJICogSWYgd2UndmUgcHJvY2Vzc2VkIG91ciBiYXRjaCBsaW1pdCwgYnJlYWsgb3V0IG9mIHRoZQorCQkJICogbG9vcCBhbmQgcmV0dXJuIFNYR19JU1JfRVZFTlQgdG8gYXJyYW5nZSBmb3IgdXMgdG8KKwkJCSAqIGJlIGNhbGxlZCBhZ2FpbgorCQkJICovCiAJCQlpZiAoQmF0Y2hlcysrID09IEVWRU5UX0JBVENIX0xJTUlUKSB7CiAJCQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsCiAJCQkJCSAgVFJBQ0VfTk9JU1ksICJFdnRMaW1pdCIsIEJhdGNoZXMsCkBAIC0xMjY0LDE2ICsxNjM2LDIyIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJaWYgKCp3b3JrX2RvbmUgPj0gYnVkZ2V0KSB7CisJCQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzW1Jzc0lkXS5FdmVudFJlbGVhc2UsCisJCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKKwkJCUV2ZW50c1Byb2Nlc3NlZCA9IDA7CisJCQkoKnN4Z19uYXBpX2NvbnRpbnVlKSA9IDA7CisJCQlicmVhazsKKwkJfQogCX0KKwlpZiAoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1ZBTElEKSkKKwkJKCpzeGdfbmFwaV9jb250aW51ZSkgPSAwOworCiAjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUwotCS8qICovCiAJLyogSW5kaWNhdGUgYW55IHJlY2VpdmVkIGR1bWItbmljIGZyYW1lcyAqLwotCS8qICovCiAJU1hHX0lORElDQVRFX1BBQ0tFVFMoYWRhcHRlciwgSW5kaWNhdGlvbkxpc3QsIG51bV9za2JzKTsKICNlbmRpZgotCS8qICovCiAJLyogUmVsZWFzZSBldmVudHMgYmFjayB0byB0aGUgY2FyZC4gKi8KLQkvKiAqLwogCWlmIChFdmVudHNQcm9jZXNzZWQpIHsKIAkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAogCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKQEAgLTEyODksMjcgKzE2NjcsMzUgQEAKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCi0KICAqIFJldHVybgogICoJTm9uZQogICovCiBzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IFNYR19YTVRfUklORyAqWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTyAqWG10UmluZ0luZm8gPSAmYWRhcHRlci0+WG10UmluZ1plcm9JbmZvOworCXN0cnVjdCBzeGdfeG10X3JpbmcgKlhtdFJpbmcgPSAmYWRhcHRlci0+WG10UmluZ3NbMF07CisJc3RydWN0IHN4Z19yaW5nX2luZm8gKlhtdFJpbmdJbmZvID0gJmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbzsKIAl1MzIgKkNvbnRleHRUeXBlOwotCXN0cnVjdCBTWEdfQ01EICpYbXRDbWQ7CisJc3RydWN0IHN4Z19jbWQgKlhtdENtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIHNnbF9mbGFncyA9IDA7CisJdW5zaWduZWQgaW50IHByb2Nlc3NlZF9jb3VudCA9IDA7CiAKLQkvKiBOT1RFIC0gVGhpcyBsb2NrIGlzIGRyb3BwZWQgYW5kIHJlZ3JhYmJlZCBpbiB0aGlzIGxvb3AuICovCi0JLyogVGhpcyBtZWFucyB0d28gZGlmZmVyZW50IHByb2Nlc3NvcnMgY2FuIGJvdGggYmUgcnVubmluZyAqLwotCS8qIHRocm91Z2ggdGhpcyBsb29wLiBCZSAqdmVyeSogY2FyZWZ1bC4gKi8KLQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkvKgorCSAqIE5PVEUgLSBUaGlzIGxvY2sgaXMgZHJvcHBlZCBhbmQgcmVncmFiYmVkIGluIHRoaXMgbG9vcC4KKwkgKiBUaGlzIG1lYW5zIHR3byBkaWZmZXJlbnQgcHJvY2Vzc29ycyBjYW4gYm90aCBiZSBydW5uaW5nLworCSAqIHRocm91Z2ggdGhpcyBsb29wLiBCZSAqdmVyeSogY2FyZWZ1bC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZHMiLAogCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CiAKLQl3aGlsZSAoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKLQkJLyogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kICovCi0JCS8qIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbCAqLworCXdoaWxlICgoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpCisJCSYmIHByb2Nlc3NlZF9jb3VudCsrIDwgU1hHX0NPTVBMRVRFX1NMT1dfU0VORF9MSU1JVCkgIHsKKwkJLyoKKwkJICogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kCisJCSAqIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbAorCQkgKi8KIAkJU1hHX1JFVFVSTl9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgQ29udGV4dFR5cGUpOwogCQlBU1NFUlQoQ29udGV4dFR5cGUpOwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLApAQCAtMTMyMSwzMCArMTcwNyw0NSBAQAogCQljYXNlIFNYR19TR0xfRFVNQjoKIAkJCXsKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJCXN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKlN4Z1NnbCA9CisJCQkJCShzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICopQ29udGV4dFR5cGU7CisJCQkJZG1hNjRfYWRkcl90IEZpcnN0U2dlQWRkcmVzczsKKwkJCQl1MzIgRmlyc3RTZ2VMZW5ndGg7CisKIAkJCQkvKiBEdW1iLW5pYyBzZW5kLiAgQ29tbWFuZCBjb250ZXh0IGlzIHRoZSBkdW1iLW5pYyBTR0wgKi8KIAkJCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilDb250ZXh0VHlwZTsKKwkJCQlza2IgPSBTeGdTZ2wtPkR1bWJQYWNrZXQ7CisJCQkJRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzOworCQkJCUZpcnN0U2dlTGVuZ3RoID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VMZW5ndGg7CiAJCQkJLyogQ29tcGxldGUgdGhlIHNlbmQgKi8KIAkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKIAkJCQkJICBUUkFDRV9JTVBPUlRBTlQsICJEbVNuZENtcCIsIHNrYiwgMCwKIAkJCQkJICAwLCAwKTsKIAkJCQlBU1NFUlQoYWRhcHRlci0+U3RhdHMuWG10UUxlbik7Ci0JCQkJYWRhcHRlci0+U3RhdHMuWG10UUxlbi0tOwkvKiB3aXRoaW4gWG10WmVyb0xvY2sgKi8KLQkJCQlhZGFwdGVyLT5TdGF0cy5YbXRPaysrOwotCQkJCS8qIE5vdyBkcm9wIHRoZSBsb2NrIGFuZCBjb21wbGV0ZSB0aGUgc2VuZCBiYWNrIHRvICovCi0JCQkJLyogTWljcm9zb2Z0LiAgV2UgbmVlZCB0byBkcm9wIHRoZSBsb2NrIGJlY2F1c2UgKi8KLQkJCQkvKiBNaWNyb3NvZnQgY2FuIGNvbWUgYmFjayB3aXRoIGEgY2hpbW5leSBzZW5kLCB3aGljaCAqLwotCQkJCS8qIHJlc3VsdHMgaW4gYSBkb3VibGUgdHJpcCBpbiBTeGdUY3BPdXB1dCAqLwotCQkJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7Ci0JCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQkJCS8qCisJCQkJICogTm93IGRyb3AgdGhlIGxvY2sgYW5kIGNvbXBsZXRlIHRoZSBzZW5kCisJCQkJICogYmFjayB0byBNaWNyb3NvZnQuICBXZSBuZWVkIHRvIGRyb3AgdGhlIGxvY2sKKwkJCQkgKiBiZWNhdXNlIE1pY3Jvc29mdCBjYW4gY29tZSBiYWNrIHdpdGggYQorCQkJCSAqIGNoaW1uZXkgc2VuZCwgd2hpY2ggcmVzdWx0cyBpbiBhIGRvdWJsZSB0cmlwCisJCQkJICogaW4gU3hnVGNwT3VwdXQKKwkJCQkgKi8KKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKworCQkJCVN4Z1NnbC0+RHVtYlBhY2tldCA9IE5VTEw7CisJCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IsCisJCQkJCQkJRmlyc3RTZ2VBZGRyZXNzLAorCQkJCQkJCUZpcnN0U2dlTGVuZ3RoKTsKKwkJCQlTWEdfRlJFRV9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCwgTlVMTCk7CiAJCQkJLyogYW5kIHJlYWNxdWlyZS4uICovCi0JCQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUFTU0VSVCgwKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wU25kIiwKIAkJICBhZGFwdGVyLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIDApOwogfQpAQCAtMTM1NiwyMiArMTc1NywyNyBAQAogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKglFdmVudAkJLSBSZWNlaXZlIGV2ZW50CiAgKgotICogUmV0dXJuCi0gKgkgc2tiCisgKiBSZXR1cm4gLSBza2IKICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBTWEdfRVZFTlQgKkV2ZW50KQorc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCQkJCQlzdHJ1Y3Qgc3hnX2V2ZW50ICpFdmVudCkKIHsKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKlJjdkRhdGFCdWZmZXJIZHI7CisJdTMyIEJ1ZmZlclNpemUgPSBhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZTsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKlJjdkRhdGFCdWZmZXJIZHI7CiAJc3RydWN0IHNrX2J1ZmYgKlBhY2tldDsKKwlzdGF0aWMgaW50IHJlYWRfY291bnRlciA9IDA7CiAKLQlSY3ZEYXRhQnVmZmVySGRyID0gKHN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiopIEV2ZW50LT5Ib3N0SGFuZGxlOworCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopIEV2ZW50LT5Ib3N0SGFuZGxlOworCWlmKHJlYWRfY291bnRlcisrICYgMHgxMDApCisJeworCQlzeGdfY29sbGVjdF9zdGF0aXN0aWNzKGFkYXB0ZXIpOworCQlyZWFkX2NvdW50ZXIgPSAwOworCX0KIAlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkcik7CiAJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID09IFNYR19CVUZGRVJfT05DQVJEKTsKLQlBU1NFUlQoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSA9PQotCSAgICAgICBSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIlNsb3dSY3YiLCBFdmVudCwKIAkJICBSY3ZEYXRhQnVmZmVySGRyLCBSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSwKLQkJICBSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyk7CisJCSAgLypSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyovIDApOwogCS8qIERyb3AgcmN2IGZyYW1lcyBpbiBub24tcnVubmluZyBzdGF0ZSAqLwogCXN3aXRjaCAoYWRhcHRlci0+U3RhdGUpIHsKIAljYXNlIFNYR19TVEFURV9SVU5OSU5HOgpAQCAtMTM4NSwxNCArMTc5MSwxNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCisJLyoKKwkgKiBtZW1jcHkoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKKwkgKiAJCVJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzLCBFdmVudC0+TGVuZ3RoKTsKKwkgKi8KKwogCS8qIENoYW5nZSBidWZmZXIgc3RhdGUgdG8gVVBTVFJFQU0gKi8KIAlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CiAJaWYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfUkNWRVJSKSB7CiAJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkVycm9yIiwKIAkJCSAgRXZlbnQsIEV2ZW50LT5TdGF0dXMsIEV2ZW50LT5Ib3N0SGFuZGxlLCAwKTsKLQkJLyogWFhYVE9ETyAtIFJlbW92ZSB0aGlzIHByaW50IGxhdGVyICovCi0JCURCR19FUlJPUigiU1hHOiBSZWNlaXZlIGVycm9yICV4XG4iLCAqKHUzMiAqKQotCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKTsKIAkJc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKGFkYXB0ZXIsICoodTMyICopCiAJCQkJICAgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTgogCQkJCSAgICAgIChSY3ZEYXRhQnVmZmVySGRyKSk7CkBAIC0xNDAwLDggKzE4MDgsOSBAQAogCX0KICNpZiBYWFhUT0RPCQkJLyogVkxBTiBzdHVmZiAqLwogCS8qIElmIHRoZXJlJ3MgYSBWTEFOIHRhZywgZXh0cmFjdCBpdCBhbmQgdmFsaWRhdGUgaXQgKi8KLQlpZiAoKChzdHJ1Y3QgZXRoZXJfaGVhZGVyKikgKFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkcikpKS0+Ci0JICAgIEV0aGVyVHlwZSA9PSBFVEhFUlRZUEVfVkxBTikgeworCWlmICgoKHN0cnVjdCBldGhlcl9oZWFkZXIgKikKKwkJKFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkcikpKS0+RXRoZXJUeXBlCisJCQkJCQkJPT0gRVRIRVJUWVBFX1ZMQU4pIHsKIAkJaWYgKFN4Z0V4dHJhY3RWbGFuSGVhZGVyKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KSAhPQogCQkgICAgU1RBVFVTX1NVQ0NFU1MpIHsKIAkJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwKQEAgLTE0MTIsMzMgKzE4MjEsNDEgQEAKIAkJfQogCX0KICNlbmRpZgotCS8qICovCiAJLyogRHVtYi1uaWMgZnJhbWUuICBTZWUgaWYgaXQgcGFzc2VzIG91ciBtYWMgZmlsdGVyIGFuZCB1cGRhdGUgc3RhdHMgKi8KLQkvKiAqLwotCWlmICghc3hnX21hY19maWx0ZXIoYWRhcHRlciwgKHN0cnVjdCBldGhlcl9oZWFkZXIqKQotCQkJICAgIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCi0JCQkgICAgRXZlbnQtPkxlbmd0aCkpIHsKKworCWlmICghc3hnX21hY19maWx0ZXIoYWRhcHRlciwKKwkgICAgKHN0cnVjdCBldGhlcl9oZWFkZXIgKikoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSksCisJICAgIEV2ZW50LT5MZW5ndGgpKSB7CiAJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkZpbHRyIiwKLQkJCSAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCi0JCQkgIEV2ZW50LT5MZW5ndGgsIDApOwotCQlnb3RvIGRyb3A7CisJCQkgICAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCisJCQkgICAgRXZlbnQtPkxlbmd0aCwgMCk7CisJICBnb3RvIGRyb3A7CiAJfQogCiAJUGFja2V0ID0gUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldDsKKwlTWEdfQURKVVNUX1JDVl9QQUNLRVQoUGFja2V0LCBSY3ZEYXRhQnVmZmVySGRyLCBFdmVudCk7CisJUGFja2V0LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKFBhY2tldCwgYWRhcHRlci0+bmV0ZGV2KTsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1iUmN2IiwKIAkJICBSY3ZEYXRhQnVmZmVySGRyLCBQYWNrZXQsIEV2ZW50LT5MZW5ndGgsIDApOwotCS8qICovCiAJLyogTGFzdGx5IGFkanVzdCB0aGUgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoLiAqLwotCS8qICovCi0JU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKFBhY2tldCwgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQpOwotCisJUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9IE5VTEw7CisJUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzID0gKGRtYV9hZGRyX3QpTlVMTDsKKwlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLCBCdWZmZXJTaXplKTsKKwlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+c2tiKQorCXsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwkJLy8gYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCArKzsKKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwl9CiAJcmV0dXJuIChQYWNrZXQpOwogCiAgICAgICBkcm9wOgogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRyb3BSY3YiLAogCQkgIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50LT5MZW5ndGgsIDAsIDApOwotCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CisJYWRhcHRlci0+c3RhdHMucnhfZHJvcHBlZCsrOworLy8JYWRhcHRlci0+U3RhdHMuUmN2RGlzY2FyZHMrKzsKIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKIAlTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKQEAgLTE0NTMsMTQgKzE4NzAsMTMgQEAKICAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCiAgKgkJRXJyb3JTdGF0dXMJLSA0LWJ5dGUgcmVjZWl2ZSBlcnJvciBzdGF0dXMKICAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKiAJTm9uZQorICogUmV0dXJuIFZhbHVlCQk6IE5vbmUKICAqLwogc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cykKIHsKIAl1MzIgRXJyb3I7CiAKLQlhZGFwdGVyLT5TdGF0cy5SY3ZFcnJvcnMrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUikgewogCQlFcnJvciA9IEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0s7CkBAIC0xNTMyLDEzICsxOTQ4LDEzIEBACiAgKgkJcGV0aGVyCQktIEV0aGVybmV0IGhlYWRlcgogICoJCWxlbmd0aAkJLSBGcmFtZSBsZW5ndGgKICAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKiAJVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAorICogUmV0dXJuIFZhbHVlIDogVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAogICovCi1zdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpFdGhlckhkciwKLQkJCSAgIHVzaG9ydCBsZW5ndGgpCitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAorCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICpFdGhlckhkciwgdXNob3J0IGxlbmd0aCkKIHsKIAlib29sIEVxdWFsQWRkcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJaWYgKFNYR19NVUxUSUNBU1RfUEFDS0VUKEV0aGVySGRyKSkgewogCQlpZiAoU1hHX0JST0FEQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CkBAIC0xNTQ2LDggKzE5NjIsNiBAQAogCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19CQ0FTVCkgewogCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCY2FzdFBrdHMrKzsKIAkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyArPSBsZW5ndGg7Ci0JCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKLQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOwogCQkJCXJldHVybiAoVFJVRSk7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xNTU1LDE1ICsxOTY5LDEyIEBACiAJCQlpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0FMTE1DQVNUKSB7CiAJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0UGt0cysrOwogCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZNY2FzdEJ5dGVzICs9IGxlbmd0aDsKLQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CiAJCQkJcmV0dXJuIChUUlVFKTsKIAkJCX0KIAkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfTUNBU1QpIHsKLQkJCQlzdHJ1Y3QgU1hHX01VTFRJQ0FTVF9BRERSRVNTICpNdWx0aWNhc3RBZGRycyA9Ci0JCQkJICAgIGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzOwotCQkJCXdoaWxlIChNdWx0aWNhc3RBZGRycykgewotCQkJCQlFVEhFUl9FUV9BRERSKE11bHRpY2FzdEFkZHJzLT5BZGRyZXNzLAorCQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gZGV2LT5tY19saXN0OworCQkJCXdoaWxlIChtY2xpc3QpIHsKKwkJCQkJRVRIRVJfRVFfQUREUihtY2xpc3QtPmRhX2FkZHIsCiAJCQkJCQkgICAgICBFdGhlckhkci0+ZXRoZXJfZGhvc3QsCiAJCQkJCQkgICAgICBFcXVhbEFkZHIpOwogCQkJCQlpZiAoRXF1YWxBZGRyKSB7CkBAIC0xNTcxLDMyICsxOTgyLDI2IEBACiAJCQkJCQkgICAgRHVtYlJjdk1jYXN0UGt0cysrOwogCQkJCQkJYWRhcHRlci0+U3RhdHMuCiAJCQkJCQkgICAgRHVtYlJjdk1jYXN0Qnl0ZXMgKz0gbGVuZ3RoOwotCQkJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKLQkJCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPQotCQkJCQkJICAgIGxlbmd0aDsKIAkJCQkJCXJldHVybiAoVFJVRSk7CiAJCQkJCX0KLQkJCQkJTXVsdGljYXN0QWRkcnMgPSBNdWx0aWNhc3RBZGRycy0+TmV4dDsKKwkJCQkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OwogCQkJCX0KIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0RJUkVDVEVEKSB7Ci0JCS8qIE5vdCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0LiAgTXVzdCBiZSBkaXJlY3RlZCBhdCB1cyBvciAqLwotCQkvKiB0aGUgY2FyZCBpcyBpbiBwcm9taXNjdW91cyBtb2RlLiAgRWl0aGVyIHdheSwgY29uc2lkZXIgaXQgKi8KLQkJLyogb3VycyBpZiBNQUNfRElSRUNURUQgaXMgc2V0ICovCisJCS8qCisJCSAqIE5vdCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0LiAgTXVzdCBiZSBkaXJlY3RlZCBhdCB1cyBvcgorCQkgKiB0aGUgY2FyZCBpcyBpbiBwcm9taXNjdW91cyBtb2RlLiAgRWl0aGVyIHdheSwgY29uc2lkZXIgaXQKKwkJICogb3VycyBpZiBNQUNfRElSRUNURUQgaXMgc2V0CisJCSAqLwogCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2VWNhc3RQa3RzKys7CiAJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZVY2FzdEJ5dGVzICs9IGxlbmd0aDsKLQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKLQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKIAkJcmV0dXJuIChUUlVFKTsKIAl9CiAJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19QUk9NSVNDKSB7CiAJCS8qIFdoYXRldmVyIGl0IGlzLCBrZWVwIGl0LiAqLwotCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOwogCQlyZXR1cm4gKFRSVUUpOwogCX0KLQlhZGFwdGVyLT5TdGF0cy5SY3ZEaXNjYXJkcysrOwogCXJldHVybiAoRkFMU0UpOwogfQogCkBAIC0xNjI3LDcgKzIwMzIsNiBAQAogCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7CiAJCWFkYXB0ZXItPkludFJlZ2lzdGVyZWQgPSBUUlVFOwogCQkvKiBEaXNhYmxlIFJTUyB3aXRoIGxpbmUtYmFzZWQgaW50ZXJydXB0cyAqLwotCQlhZGFwdGVyLT5Nc2lFbmFibGVkID0gRkFMU0U7CiAJCWFkYXB0ZXItPlJzc0VuYWJsZWQgPSBGQUxTRTsKIAkJREJHX0VSUk9SKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF1cbiIsCiAJCQkgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5uZXRkZXYtPmlycSk7CkBAIC0xNjYzLDEyICsyMDY3LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgc3hnX2lmX2luaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlwX25ldF9kZXZpY2UgZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWQ6JWRdIGZsYWdzWyV4XVxuIiwKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWRdIGZsYWdzWyV4XVxuIiwKIAkJICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkgIGFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCwgYWRhcHRlci0+c3RhdGUsCisJCSAgYWRhcHRlci0+c3RhdGUsCiAJCSAgYWRhcHRlci0+bGlua3N0YXRlLCBkZXYtPmZsYWdzKTsKIAogCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLwpAQCAtMTY3OSwzMSArMjA4MywzMSBAQAogCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKIAogCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwotCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJYWRhcHRlci0+TWFjRmlsdGVyID0gTUFDX0RJUkVDVEVEOwogCWlmIChkZXYtPmZsYWdzKSB7CiAJCURCR19FUlJPUigic3hnOiAlcyAoJXMpIFNldCBNQUMgb3B0aW9uczogIiwgX19mdW5jX18sCiAJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgewotCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlhZGFwdGVyLT5NYWNGaWx0ZXIgfD0gTUFDX0JDQVNUOwogCQkJREJHX0VSUk9SKCJCQ0FTVCAiKTsKIAkJfQogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19QUk9NSVNDOwogCQkJREJHX0VSUk9SKCJQUk9NSVNDICIpOwogCQl9CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJCWFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfQUxMTUNBU1Q7CiAJCQlEQkdfRVJST1IoIkFMTF9NQ0FTVCAiKTsKIAkJfQogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQkJYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19NQ0FTVDsKIAkJCURCR19FUlJPUigiTUNBU1QgIik7CiAJCX0KIAkJREJHX0VSUk9SKCJcbiIpOwogCX0KLQlzdGF0dXMgPSBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCXN0YXR1cyA9IHN4Z19yZWdpc3Rlcl9pbnRyKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SKCJzeGdfaWZfaW5pdDogc3hnX3JlZ2lzdGVyX2ludGVycnVwdCBGQUlMRUQgJXhcbiIsCisJCURCR19FUlJPUigic3hnX2lmX2luaXQ6IHN4Z19yZWdpc3Rlcl9pbnRyIEZBSUxFRCAleFxuIiwKIAkJCSAgc3RhdHVzKTsKIAkJc3hnX2RlcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOwogCQlyZXR1cm4gKHN0YXR1cyk7CkBAIC0xNzExLDE4ICsyMTE1LDkwIEBACiAKIAlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOwogCi0JLyoKLQkgKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMKLQkgKi8KKwkvKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMgKi8KIAlEQkdfRVJST1IoInN4ZzogJXMgRU5BQkxFIGludGVycnVwdHMoc2xpYylcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOwogfQogCi1zdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHBfbmV0X2RldmljZSBkZXYpCit2b2lkIHN4Z19zZXRfaW50ZXJydXB0X2FnZ3JlZ2F0aW9uKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJLyoKKwkgKiBUb3AgYml0IGRpc2FibGVzIGFnZ3JlZ2F0aW9uIG9uIHhtdCAoU1hHX0FHR19YTVRfRElTQUJMRSkuCisJICogTWFrZSBzdXJlIE1heCBpcyBsZXNzIHRoYW4gMHg4MDAwLgorCSAqLworCWFkYXB0ZXItPm1heF9hZ2dyZWdhdGlvbiA9IFNYR19NQVhfQUdHX0RFRkFVTFQ7CisJYWRhcHRlci0+bWluX2FnZ3JlZ2F0aW9uID0gU1hHX01JTl9BR0dfREVGQVVMVDsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkFnZ3JlZ2F0aW9uLAorCQkoKGFkYXB0ZXItPm1heF9hZ2dyZWdhdGlvbiA8PCBTWEdfTUFYX0FHR19TSElGVCkgfAorCQkJYWRhcHRlci0+bWluX2FnZ3JlZ2F0aW9uKSwKKwkJCVRSVUUpOworfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1czsKKwlzdGF0aWMgaW50IHR1cm47CisJaW50IHN4Z19pbml0aWFsX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfSU5JVElBTF9SQ1ZfREFUQV9CVUZGRVJTOworCWludCBpOworCisJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9PSBUUlVFKSB7CisJCXN4Z19pbml0aWFsX3Jjdl9kYXRhX2J1ZmZlcnMgPQorCQkJCQlTWEdfSU5JVElBTF9KVU1CT19SQ1ZfREFUQV9CVUZGRVJTOworCQlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywKKwkJCQkJU1hHX0pVTUJPX1JDVl9SSU5HX1NJWkUpOworCX0KKworCS8qCisJKiBBbGxvY2F0ZSByZWNlaXZlIGRhdGEgYnVmZmVycy4gIFdlIGFsbG9jYXRlIGEgYmxvY2sgb2YgYnVmZmVycyBhbmQKKwkqIGEgY29ycmVzcG9uZGluZyBkZXNjcmlwdG9yIGJsb2NrIGF0IG9uY2UuICBTZWUgc3hnaHcuaDpTWEdfUkNWX0JMT0NLCisJKi8KKworCWZvciAoaSA9IDA7IGkgPCBzeGdfaW5pdGlhbF9yY3ZfZGF0YV9idWZmZXJzOworCQkJaSArPSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKKwl7CisJCXN0YXR1cyA9IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KGFkYXB0ZXIsCisJCVNYR19SQ1ZfQkxPQ0tfU0laRShTWEdfUkNWX0RBVEFfSERSX1NJWkUpLAorCQkJCQlTWEdfQlVGRkVSX1RZUEVfUkNWKTsKKwkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCS8qCisJICogTkJMIHJlc291cmNlIGFsbG9jYXRpb24gY2FuIGZhaWwgaW4gdGhlICdBbGxvY2F0ZUNvbXBsZXRlJyByb3V0aW5lLAorCSAqIHdoaWNoIGRvZXNuJ3QgcmV0dXJuIHN0YXR1cy4gIE1ha2Ugc3VyZSB3ZSBnb3QgdGhlIG51bWJlciBvZiBidWZmZXJzCisJICogd2UgcmVxdWVzdGVkCisJICovCisKKwlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgc3hnX2luaXRpYWxfcmN2X2RhdGFfYnVmZmVycykgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKKwkJCWFkYXB0ZXIsIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgU1hHX01BWF9FTlRSSUVTLAorCQkJMCk7CisJCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7CisJfQorCS8qCisJICogVGhlIG1pY3JvY29kZSBleHBlY3RzIGl0IHRvIGJlIGRvd25sb2FkZWQgb24gZXZlcnkgb3Blbi4KKwkgKi8KKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2Rvd25sb2FkX21pY3JvY29kZVxuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoc3hnX2Rvd25sb2FkX21pY3JvY29kZShhZGFwdGVyLCBTWEdfVUNPREVfU1lTVEVNKSkgeworCQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkclxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQlzeGdfcmVhZF9jb25maWcoYWRhcHRlcik7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCURCR19FUlJPUigic3hnX2Rvd25sb2FkX21pY3JvY29kZSBGQUlMRUQgc3RhdHVzWyV4XVxuIiwKKwkJCQlzdGF0dXMpOworCX0KKwltc2xlZXAoNSk7CisKKwlpZiAodHVybikgeworCQlzeGdfc2Vjb25kX29wZW4oYWRhcHRlci0+bmV0ZGV2KTsKKworCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisJfQorCisJdHVybisrOwogCiAJQVNTRVJUKGFkYXB0ZXIpOwogCURCR19FUlJPUigic3hnOiAlcyBhZGFwdGVyLT5hY3RpdmF0ZWRbJWRdXG4iLCBfX2Z1bmNfXywKQEAgLTE3NjIsNiArMjIzOCw4IEBACiAJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOQUJMRSBBTEwgSU5URVJSVVBUU1xuIiwgX19mdW5jX18pOworCXN4Z19zZXRfaW50ZXJydXB0X2FnZ3JlZ2F0aW9uKGFkYXB0ZXIpOworCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCiAJU1hHX0VOQUJMRV9BTExfSU5URVJSVVBUUyhhZGFwdGVyKTsKQEAgLTE3NzIsNzEgKzIyNTAsMTYyIEBACiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCitpbnQgc3hnX3NlY29uZF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCopIG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKyAgICAgICAgYWRhcHRlci0+c3RhdGUgPSBBREFQVF9VUDsKKyAgICAgICAgYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19VUDsKKworCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIoYWRhcHRlcik7CisJc3hnX3NldF9pbnRlcnJ1cHRfYWdncmVnYXRpb24oYWRhcHRlcik7CisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworICAgICAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLworICAgICAgICBTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOworCisJc3hnX3JlZ2lzdGVyX2ludHIoYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CisKK30KKwogc3RhdGljIHZvaWQgX19kZXZleGl0IHN4Z19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKLQlwX25ldF9kZXZpY2UgZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7Ci0JdTMyIG1taW9fc3RhcnQgPSAwOwotCXVuc2lnbmVkIGludCBtbWlvX2xlbiA9IDA7CisgICAgICAgIHUzMiBtbWlvX3N0YXJ0ID0gMDsKKyAgICAgICAgdTMyIG1taW9fbGVuID0gMDsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAotCUFTU0VSVChhZGFwdGVyKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgZGV2WyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGRldiwKLQkJICBhZGFwdGVyKTsKLQlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7Ci0Jc3hnX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7Ci0JREJHX0VSUk9SKCJzeGc6ICVzIHVucmVnaXN0ZXJfbmV0ZGV2XG4iLCBfX2Z1bmNfXyk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCS8qIERlYWxsb2NhdGUgUmVzb3VyY2VzICovCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlzeGdfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJc3hnX2ZyZWVfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwotCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCUFTU0VSVChhZGFwdGVyKTsKIAotCURCR19FUlJPUigic3hnOiAlcyByZWxfcmVnaW9uKDApIHN0YXJ0WyV4XSBsZW5bJXhdXG4iLCBfX2Z1bmNfXywKLQkJICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKyAgICAgICAgbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworICAgICAgICBtbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKIAotCURCR19FUlJPUigic3hnOiAlcyBpb3VubWFwIGRldi0+YmFzZV9hZGRyWyV4XVxuIiwgX19mdW5jX18sCi0JCSAgKHVuc2lnbmVkIGludClkZXYtPmJhc2VfYWRkcik7Ci0JaW91bm1hcCgoY2hhciAqKWRldi0+YmFzZV9hZGRyKTsKKyAgICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIHJlbF9yZWdpb24oMCkgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgICAgIG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKyAgICAgICAgcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworICAgICAgICBtbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisgICAgICAgIG1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpOworCisgICAgICAgIERCR19FUlJPUigic3hnOiAlcyByZWxfcmVnaW9uKDIpIHN0YXJ0WyV4XSBsZW5bJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisgICAgICAgIHJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKIAogCURCR19FUlJPUigic3hnOiAlcyBkZWFsbG9jYXRlIGRldmljZVxuIiwgX19mdW5jX18pOwogCWtmcmVlKGRldik7CiAJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIH0KIAotc3RhdGljIGludCBzeGdfZW50cnlfaGFsdChwX25ldF9kZXZpY2UgZGV2KQorc3RhdGljIGludCBzeGdfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCWludCBpOworCXUzMiBSc3NJZHMsIElzckNvdW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPm1zaV9lbmFibGVkID8gUnNzSWRzIDogMTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7Ci0JREJHX0VSUk9SKCJzeGc6ICVzICglcykgRU5URVJcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCVNYR19ESVNBQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOwogCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKIAlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7CisJV1JJVEVfUkVHKEh3UmVncy0+UmVzZXQsIDB4REVBRCwgRkxVU0gpOworCW1kZWxheSg1MDAwKTsKKworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZDbWQsIDAsIHRydWUpOwogCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSAwOwogCURCR19FUlJPUigic3hnOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKIAkJICBfX2Z1bmNfXywgZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5zdGF0ZSk7CiAKLQlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFWElUXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19mdW5jX18pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCS8qIEZyZWUgYWxsIHRoZSBibG9ja3MgYW5kIHRoZSBidWZmZXJzLCBtb3ZlZCBmcm9tIHJlbW92ZSgpIHJvdXRpbmUgKi8KKwlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKSkpIHsKKwkJc3hnX2ZyZWVfcmN2YmxvY2tzKGFkYXB0ZXIpOworCX0KKworCisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFJjdkJsb2Nrcyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKworCWFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA9IDA7CisJYWRhcHRlci0+RnJlZVJjdkJsb2NrQ291bnQgPSAwOworCWFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPSAwOworCWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPSAwOworCWFkYXB0ZXItPlBlbmRpbmdSY3ZDb3VudCA9IDA7CisKKwltZW1zZXQoYWRhcHRlci0+UmN2UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9yaW5nKSAqIDEpOworCW1lbXNldChhZGFwdGVyLT5FdmVudFJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqIFJzc0lkcyk7CisJbWVtc2V0KGFkYXB0ZXItPklzciwgMCwgc2l6ZW9mKHUzMikgKiBJc3JDb3VudCk7CisJZm9yIChpID0gMDsgaSA8IFNYR19NQVhfUklOR19TSVpFOyBpKyspCisJCWFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mby5Db250ZXh0W2ldID0gTlVMTDsKKwlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywgU1hHX1JDVl9SSU5HX1NJWkUpOworCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+WG10UmluZ1plcm9JbmZvLCBTWEdfWE1UX1JJTkdfU0laRSk7CisKKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CisJYWRhcHRlci0+QWxsU2dsQnVmZmVyQ291bnQgPSAwOworCWFkYXB0ZXItPkZyZWVTZ2xCdWZmZXJDb3VudCA9IDA7CisJYWRhcHRlci0+UGVuZGluZ1htdENvdW50ID0gMDsKKwltZW1zZXQoYWRhcHRlci0+WG10UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3htdF9yaW5nKSAqIDEpOworCW1lbXNldChhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4LCAwLCBzaXplb2YodTMyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBTWEdfTUFYX1JTUzsgaSsrKSB7CisJCWFkYXB0ZXItPk5leHRFdmVudFtpXSA9IDA7CisJfQorCWF0b21pY19zZXQoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMsIDApOworCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMDsKKwlzeGdfcmVtb3ZlX2lzcihhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFWElUXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSk7CiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CiAKLXN0YXRpYyBpbnQgc3hnX2lvY3RsKHBfbmV0X2RldmljZSBkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCitzdGF0aWMgaW50IHN4Z19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCUFTU0VSVChycSk7Ci0vKiAgICAgIERCR19FUlJPUigic3hnOiAlcyBjbWRbJXhdIHJxWyVwXSBkZXZbJXBdXG4iLCBfX2Z1bmNfXywgY21kLCBycSwgZGV2KTsgKi8KKy8qICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIGNtZFsleF0gcnFbJXBdIGRldlslcF1cbiIsIF9fZnVuY19fLCBjbWQsIHJxLCBkZXYpOyovCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NTTElDU0VUSU5UQUdHOgogCQl7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsgKi8KKwkJCS8qIHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKQorCQkJICogbmV0ZGV2X3ByaXYoZGV2KTsKKwkJCSAqLwogCQkJdTMyIGRhdGFbN107CiAJCQl1MzIgaW50YWdnOwogCiAJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKLQkJCQlEQkdfRVJST1IKLQkJCQkgICAgKCJjb3B5X2Zyb21fdXNlciBGQUlMRUQgIGdldHRpbmcgaW5pdGlhbCBwYXJhbXNcbiIpOworCQkJCURCR19FUlJPUigiY29weV9mcm9tX3VzZXIgRkFJTEVEICBnZXR0aW5nIFwKKwkJCQkJIGluaXRpYWwgcGFyYW1zXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KIAkJCWludGFnZyA9IGRhdGFbMF07CkBAIC0xODQ3LDcgKzI0MTYsNyBAQAogCQl9CiAKIAlkZWZhdWx0OgotLyogICAgICAgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBVTlNVUFBPUlRFRFsleF1cbiIsIF9fZnVuY19fLCBjbWQpOyAqLworCQkvKiBEQkdfRVJST1IoInN4ZzogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX2Z1bmNfXywgY21kKTsgKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE4NTYsMjMgKzI0MjUsMjUgQEAKICNkZWZpbmUgTk9STUFMX0VUSEZSQU1FICAgICAwCiAKIC8qCi0gKgogICogc3hnX3NlbmRfcGFja2V0cyAtIFNlbmQgYSBza2IgcGFja2V0CiAgKgogICogQXJndW1lbnRzOgotICoJCQlza2IgICAgICAgICAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gc2VuZAotICoJCQlkZXYgICAgICAgICAgICAgICAgICAgICAtIE91ciBsaW51eCBuZXQgZGV2aWNlIHRoYXQgcmVmcyBvdXIgYWRhcHRlcgorICoJCQlza2IgLSBUaGUgcGFja2V0IHRvIHNlbmQKKyAqCQkJZGV2IC0gT3VyIGxpbnV4IG5ldCBkZXZpY2UgdGhhdCByZWZzIG91ciBhZGFwdGVyCiAgKgogICogUmV0dXJuOgogICoJCTAgICByZWdhcmRsZXNzIG9mIG91dGNvbWUgICAgWFhYVE9ETyByZWZlciB0byBlMTAwMCBkcml2ZXIKICAqLwotc3RhdGljIGludCBzeGdfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHBfbmV0X2RldmljZSBkZXYpCitzdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAKLQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX3NlbmRfcGFja2V0cyBza2JbJXBdXG4iLCBfX2Z1bmNfXywKLQkJICBza2IpOworCS8qCisJICogREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19zZW5kX3BhY2tldHMgc2tiWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCSAqCSAgc2tiKTsKKwkgKi8KKwogCS8qIENoZWNrIHRoZSBhZGFwdGVyIHN0YXRlICovCiAJc3dpdGNoIChhZGFwdGVyLT5TdGF0ZSkgewogCWNhc2UgU1hHX1NUQVRFX0lOSVRJQUxJWklORzoKQEAgLTE5MDksMTcgKzI0ODAsMTggQEAKIAkvKiByZWplY3QgJiBjb21wbGV0ZSBhbGwgdGhlIHBhY2tldHMgaWYgdGhleSBjYW50IGJlIHNlbnQgKi8KIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAjaWYgWFhYVE9ETwotLyogICAgICBzeGdfc2VuZF9wYWNrZXRzX2ZhaWwoYWRhcHRlciwgc2tiLCBzdGF0dXMpOyAqLworCS8qIHN4Z19zZW5kX3BhY2tldHNfZmFpbChhZGFwdGVyLCBza2IsIHN0YXR1cyk7ICovCiAjZWxzZQogCQlTWEdfRFJPUF9EVU1CX1NFTkQoYWRhcHRlciwgc2tiKTsKIAkJYWRhcHRlci0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAjZW5kaWYKIAl9CiAJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX3NlbmRfcGFja2V0cyBzdGF0dXNbJXhdXG4iLCBfX2Z1bmNfXywKIAkJICBzdGF0dXMpOwogCiAgICAgICB4bWl0X2RvbmU6Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTE5MzEsMzMgKzI1MDMsMzUgQEAKICAqCQlhZGFwdGVyCQkJLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQogICogICAgICBza2IgICAgICAgICAgICAgLSBUaGUgcGFja2V0IHRvIGJlIHNlbnQKICAqCi0gKiBSZXR1cm4gLQotICogCQlTVEFUVVMgb2Ygc2VuZAorICogUmV0dXJuIC0gU1RBVFVTIG9mIHNlbmQKICAqLwogc3RhdGljIGludCBzeGdfdHJhbnNtaXRfcGFja2V0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgKnBTZ2w7Ci0Jc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiAqU3hnU2dsOwotCXZvaWQgKlNnbEJ1ZmZlcjsKLQl1MzIgU2dsQnVmZmVyTGVuZ3RoOworCXN0cnVjdCBzeGdfeDY0X3NnbCAgICAgICAgICpwU2dsOworCXN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgICpTeGdTZ2w7CisJdW5zaWduZWQgbG9uZyBzZ2xfZmxhZ3M7CisJLyogdm9pZCAqU2dsQnVmZmVyOyAqLworCS8qIHUzMiBTZ2xCdWZmZXJMZW5ndGg7ICovCiAKLQkvKiBUaGUgdmFzdCBtYWpvcml0eSBvZiB3b3JrIGlzIGRvbmUgaW4gdGhlIHNoYXJlZCAqLwotCS8qIHN4Z19kdW1iX3NnbCByb3V0aW5lLiAqLworCS8qCisJICogVGhlIHZhc3QgbWFqb3JpdHkgb2Ygd29yayBpcyBkb25lIGluIHRoZSBzaGFyZWQKKwkgKiBzeGdfZHVtYl9zZ2wgcm91dGluZS4KKwkgKi8KIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iU2VuZCIsCiAJCSAgYWRhcHRlciwgc2tiLCAwLCAwKTsKIAogCS8qIEFsbG9jYXRlIGEgU0dMIGJ1ZmZlciAqLwotCVNYR19HRVRfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wpOworCVNYR19HRVRfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wsIDApOwogCWlmICghU3hnU2dsKSB7CiAJCWFkYXB0ZXItPlN0YXRzLk5vU2dsQnVmKys7Ci0JCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOworCQlhZGFwdGVyLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiU25kUGt0RjEiLAogCQkJICBhZGFwdGVyLCBza2IsIDAsIDApOwogCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOwogCX0KIAlBU1NFUlQoU3hnU2dsLT5hZGFwdGVyID09IGFkYXB0ZXIpOwotCVNnbEJ1ZmZlciA9IFNYR19TR0xfQlVGRkVSKFN4Z1NnbCk7Ci0JU2dsQnVmZmVyTGVuZ3RoID0gU1hHX1NHTF9CVUZfU0laRTsKKwkvKlNnbEJ1ZmZlciA9IFNYR19TR0xfQlVGRkVSKFN4Z1NnbCk7CisJU2dsQnVmZmVyTGVuZ3RoID0gU1hHX1NHTF9CVUZfU0laRTsgKi8KIAlTeGdTZ2wtPlZsYW5UYWcuVmxhblRjaSA9IDA7CiAJU3hnU2dsLT5WbGFuVGFnLlZsYW5UcGlkID0gMDsKIAlTeGdTZ2wtPlR5cGUgPSBTWEdfU0dMX0RVTUI7CkBAIC0xOTY1LDkgKzI1MzksNyBAQAogCXBTZ2wgPSBOVUxMOwogCiAJLyogQ2FsbCB0aGUgY29tbW9uIHN4Z19kdW1iX3NnbCByb3V0aW5lIHRvIGNvbXBsZXRlIHRoZSBzZW5kLiAqLwotCXN4Z19kdW1iX3NnbChwU2dsLCBTeGdTZ2wpOwotCS8qIFJldHVybiBzdWNjZXNzICAgc3hnX2R1bWJfc2dsIChvciBzb21ldGhpbmcgbGF0ZXIpIHdpbGwgY29tcGxldGUgaXQuICovCi0JcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CisJcmV0dXJuIChzeGdfZHVtYl9zZ2wocFNnbCwgU3hnU2dsKSk7CiB9CiAKIC8qCkBAIC0xOTc1LDI0ICsyNTQ3LDI3IEBACiAgKgogICogQXJndW1lbnRzOgogICoJCXBTZ2wgICAgIC0KLSAqCQlTeGdTZ2wgICAtIFNYR19TQ0FUVEVSX0dBVEhFUgorICoJCVN4Z1NnbCAgIC0gc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlcgogICoKICAqIFJldHVybiBWYWx1ZToKLSAqIAlOb25lLgorICogCVN0YXR1cyBvZiBzZW5kIG9wZXJhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgc3hnX2R1bWJfc2dsKHN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9MSVNUICpwU2dsLCBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wpCitzdGF0aWMgaW50IHN4Z19kdW1iX3NnbChzdHJ1Y3Qgc3hnX3g2NF9zZ2wgKnBTZ2wsCisJCQkJc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsKQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBTeGdTZ2wtPmFkYXB0ZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IFN4Z1NnbC0+RHVtYlBhY2tldDsKIAkvKiBGb3Igbm93LCBhbGwgZHVtYi1uaWMgc2VuZHMgZ28gb24gUlNTIHF1ZXVlIHplcm8gKi8KLQlzdHJ1Y3QgU1hHX1hNVF9SSU5HICpYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOwotCXN0cnVjdCBTWEdfUklOR19JTkZPICpYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87Ci0Jc3RydWN0IFNYR19DTUQgKlhtdENtZCA9IE5VTEw7Ci0vKiAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCA9IDA7ICovCisJc3RydWN0IHN4Z194bXRfcmluZyAqWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqWG10UmluZ0luZm8gPSAmYWRhcHRlci0+WG10UmluZ1plcm9JbmZvOworCXN0cnVjdCBzeGdfY21kICpYbXRDbWQgPSBOVUxMOworCS8qIHUzMiBJbmRleCA9IDA7ICovCiAJdTMyIERhdGFMZW5ndGggPSBza2ItPmxlbjsKLS8qICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZkxlbjsgKi8KLS8qICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIFNnbE9mZnNldDsgKi8KKwkvKiB1bnNpZ25lZCBpbnQgQnVmTGVuOyAqLworCS8qIHUzMiBTZ2xPZmZzZXQ7ICovCiAJdTY0IHBoeXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcXVldWVfaWQ9MDsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJTZ2wiLAogCQkgIHBTZ2wsIFN4Z1NnbCwgMCwgMCk7CkBAIC0yMDAxLDI1ICsyNTc2LDY3IEBACiAJU3hnU2dsLT5wU2dsID0gcFNnbDsKIAogCS8qIFNhbml0eSBjaGVjayB0aGF0IG91ciBTR0wgZm9ybWF0IGlzIGFzIHdlIGV4cGVjdC4gKi8KLQlBU1NFUlQoc2l6ZW9mKFNYR19YNjRfU0dFKSA9PSBzaXplb2YoU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCkpOworCUFTU0VSVChzaXplb2Yoc3RydWN0IHN4Z194NjRfc2dlKSA9PSBzaXplb2Yoc3RydWN0IHN4Z194NjRfc2dlKSk7CiAJLyogU2hvdWxkbid0IGJlIGEgdmxhbiB0YWcgb24gdGhpcyBmcmFtZSAqLwogCUFTU0VSVChTeGdTZ2wtPlZsYW5UYWcuVmxhblRjaSA9PSAwKTsKIAlBU1NFUlQoU3hnU2dsLT5WbGFuVGFnLlZsYW5UcGlkID09IDApOwogCi0JLyogRnJvbSBoZXJlIGJlbG93IHdlIHdvcmsgd2l0aCB0aGUgU0dMIHBsYWNlZCBpbiBvdXIgKi8KLQkvKiBidWZmZXIuICovCisJLyoKKwkgKiBGcm9tIGhlcmUgYmVsb3cgd2Ugd29yayB3aXRoIHRoZSBTR0wgcGxhY2VkIGluIG91cgorCSAqIGJ1ZmZlci4KKwkgKi8KIAogCVN4Z1NnbC0+U2dsLk51bWJlck9mRWxlbWVudHMgPSAxOworCS8qCisJICogU2V0IHVjb2RlIFF1ZXVlIElEIGJhc2VkIG9uIGJvdHRvbSBiaXRzIG9mIGRlc3RpbmF0aW9uIFRDUCBwb3J0LgorCSAqIFRoaXMgUXVldWUgSUQgc3BsaXRzIHNsb3dwYXRoL2R1bWItbmljIHBhY2tldCBwcm9jZXNzaW5nIGFjcm9zcworCSAqIG11bHRpcGxlIHRocmVhZHMgb24gdGhlIGNhcmQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gIEl0IGlzIHNwbGl0CisJICogdXNpbmcgdGhlIFRDUCBwb3J0IHRvIGF2b2lkIG91dC1vZi1vcmRlciBwYWNrZXRzIHRoYXQgY2FuIHJlc3VsdAorICAgICAgICAgKiBmcm9tIG11bHRpdGhyZWFkZWQgcHJvY2Vzc2luZy4gIFdlIHVzZSB0aGUgZGVzdGluYXRpb24gcG9ydCBiZWNhdXNlCisgICAgICAgICAqIHdlIGV4cGVjdCB0byBiZSBydW4gb24gYSBzZXJ2ZXIsIHNvIGluIG5lYXJseSBhbGwgY2FzZXMgdGhlIGxvY2FsCisgICAgICAgICAqIHBvcnQgaXMgbGlrZWx5IHRvIGJlIGNvbnN0YW50ICh3ZWxsLWtub3duIHNlcnZlciBwb3J0KSBhbmQgdGhlCisgICAgICAgICAqIHJlbW90ZSBwb3J0IGlzIGxpa2VseSB0byBiZSByYW5kb20uICBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMgaVNDU0ksCisgICAgICAgICAqIGluIHdoaWNoIGNhc2Ugd2UgdXNlIHRoZSBzcG9ydCBpbnN0ZWFkLiAgTm90ZQorICAgICAgICAgKiB0aGF0IG9yaWdpbmFsIGF0dGVtcHQgYXQgWE9SJ2luZyBzb3VyY2UgYW5kIGRlc3QgcG9ydCByZXN1bHRlZCBpbgorICAgICAgICAgKiBwb29yIGJhbGFuY2Ugb24gTlRUVENQL2lvbWV0ZXIgYXBwbGljYXRpb25zIHNpbmNlIHRoZXkgdGVuZCB0bworICAgICAgICAgKiBsaW5lIHVwIChldmVuLWV2ZW4sIG9kZC1vZGQuLikuCisgICAgICAgICAqLworCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGlwaGRyICppcDsKKworICAgICAgICAgICAgICAgIGlwID0gaXBfaGRyKHNrYik7CisJCWlmICgoaXAtPnByb3RvY29sID09IElQUFJPVE9fVENQKSYmKERhdGFMZW5ndGggPj0gc2l6ZW9mKAorCQkJCQkJCXN0cnVjdCB0Y3BoZHIpKSl7CisJCQlxdWV1ZV9pZCA9ICgobnRvaHModGNwX2hkcihza2IpLT5kZXN0KSA9PSBJU0NTSV9QT1JUKSA/CisJCQkJCShudG9ocyAodGNwX2hkcihza2IpLT5zb3VyY2UpICYKKwkJCQkJCVNYR19MQVJHRV9TRU5EX1FVRVVFX01BU0spOgorCQkJCQkJKG50b2hzKHRjcF9oZHIoc2tiKS0+ZGVzdCkgJgorCQkJCQkJU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSykpOworCQl9CisJfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CisJCWlmICgoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkgJiYgKERhdGFMZW5ndGggPj0KKwkJCQkJCSBzaXplb2Yoc3RydWN0IHRjcGhkcikpICkgeworCQkJcXVldWVfaWQgPSAoKG50b2hzKHRjcF9oZHIoc2tiKS0+ZGVzdCkgPT0gSVNDU0lfUE9SVCkgPworCQkJCQkobnRvaHMgKHRjcF9oZHIoc2tiKS0+c291cmNlKSAmCisJCQkJCVNYR19MQVJHRV9TRU5EX1FVRVVFX01BU0spOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudG9ocyh0Y3BfaGRyKHNrYiktPmRlc3QpICYKKwkJCQkJU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSykpOworCQl9CisJfQogCiAJLyogR3JhYiB0aGUgc3BpbmxvY2sgYW5kIGFjcXVpcmUgYSBjb21tYW5kICovCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJU1hHX0dFVF9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgU3hnU2dsKTsKIAlpZiAoWG10Q21kID09IE5VTEwpIHsKLQkJLyogQ2FsbCBzeGdfY29tcGxldGVfc2xvd19zZW5kIHRvIHNlZSBpZiB3ZSBjYW4gKi8KLQkJLyogZnJlZSB1cCBhbnkgWG10UmluZ1plcm8gZW50cmllcyBhbmQgdGhlbiB0cnkgYWdhaW4gKi8KLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJLyoKKwkJICogQ2FsbCBzeGdfY29tcGxldGVfc2xvd19zZW5kIHRvIHNlZSBpZiB3ZSBjYW4KKwkJICogZnJlZSB1cCBhbnkgWG10UmluZ1plcm8gZW50cmllcyBhbmQgdGhlbiB0cnkgYWdhaW4KKwkJICovCisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAkJc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChhZGFwdGVyKTsKLQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOwogCQlTWEdfR0VUX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBTeGdTZ2wpOwogCQlpZiAoWG10Q21kID09IE5VTEwpIHsKIAkJCWFkYXB0ZXItPlN0YXRzLlhtdFplcm9GdWxsKys7CkBAIC0yMDI5LDggKzI2NDYsOCBAQAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJDbWQiLAogCQkgIFhtdENtZCwgWG10UmluZ0luZm8tPkhlYWQsIFhtdFJpbmdJbmZvLT5UYWlsLCAwKTsKIAkvKiBVcGRhdGUgc3RhdHMgKi8KLQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10UGt0cysrOwotCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCeXRlcyArPSBEYXRhTGVuZ3RoOworCWFkYXB0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlhZGFwdGVyLT5zdGF0cy50eF9ieXRlcyArPSBEYXRhTGVuZ3RoOwogI2lmIFhYWFRPRE8JCQkvKiBTdGF0cyBzdHVmZiAqLwogCWlmIChTWEdfTVVMVElDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKIAkJaWYgKFNYR19CUk9BRENBU1RfUEFDS0VUKEV0aGVySGRyKSkgewpAQCAtMjA0NSw3MCArMjY2Miw5MiBAQAogCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10VWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOwogCX0KICNlbmRpZgotCS8qIEZpbGwgaW4gdGhlIGNvbW1hbmQgKi8KLQkvKiBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldCAqLwotCXBoeXNfYWRkciA9Ci0JICAgIHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkvKgorCSAqIEZpbGwgaW4gdGhlIGNvbW1hbmQKKwkgKiBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldAorCSAqLworCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFNYR19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7Ci0JWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzIDw8IDMyOwotCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9Ci0JICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyB8IFNYR19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKLS8qICAgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gU3hnU2dsLT5TZ2wuRWxlbWVudHNbSW5kZXhdLkFkZHJlc3M7ICovCi0vKiAgICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcy5Mb3dQYXJ0ICs9IE1kbE9mZnNldDsgKi8KKworCS8qCisJICogU0FIQVJBIFNHTCBXT1JLQVJPVU5ECisJICogU2VlIGlmIHRoZSBTR0wgc3RyYWRkbGVzIGEgNjRrIGJvdW5kYXJ5LiAgSWYgc28sIHNraXAgdG8KKwkgKiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgNjRrIGJvdW5kYXJ5IGFuZCBjb250aW51ZQorIAkgKi8KKworCWlmICgoYWRhcHRlci0+YXNpY3R5cGUgPT0gU0FIQVJBX1JFVl9BKSAmJgorCQkoU1hHX0lOVkFMSURfU0dMKHBoeXNfYWRkcixza2ItPmRhdGFfbGVuKSkpCisJeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOworCQkvKiBTaWxlbnRseSBkcm9wIHRoaXMgcGFja2V0ICovCisJCXByaW50ayhLRVJOX0VNRVJHIkRyb3BwZWQgYSBwYWNrZXQgZm9yIDY0ayBib3VuZGFyeSBwcm9ibGVtXG4iKTsKKwkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCX0KKwltZW1zZXQoWG10Q21kLCAnXDAnLCBzaXplb2YoKlhtdENtZCkpOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IHBoeXNfYWRkcjsKIAlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUxlbmd0aCA9IERhdGFMZW5ndGg7Ci0JLyogU2V0IGEgcG9pbnRlciB0byB0aGUgcmVtYWluaW5nIFNHTCBlbnRyaWVzICovCi0vKiAgICAgIFhtdENtZC0+U2dsID0gU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3M7ICovCi0JLyogQWR2YW5jZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU3hnU2dsIHN0cnVjdHVyZSB0byAqLwotCS8qIHRoZSBzZWNvbmQgU0dFICovCi0vKiAgICAgIFNnbE9mZnNldCA9ICh1MzIpKCh1MzIgKikoJlN4Z1NnbC0+U2dsLkVsZW1lbnRzW0luZGV4KzFdKSAtICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyICopU3hnU2dsKTsgKi8KLS8qICAgICAgWG10Q21kLT5TZ2wuTG93UGFydCArPSBTZ2xPZmZzZXQ7ICovCiAJWG10Q21kLT5CdWZmZXIuU2dlT2Zmc2V0ID0gMDsKLQkvKiBOb3RlIC0gVG90YWxMZW5ndGggbWlnaHQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBNU1MgYmVsb3cuLiAqLwogCVhtdENtZC0+QnVmZmVyLlRvdGFsTGVuZ3RoID0gRGF0YUxlbmd0aDsKLQlYbXRDbWQtPlNnRW50cmllcyA9IDE7CS8qKHVzaG9ydCkoU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyAtIEluZGV4KTsgKi8KKwlYbXRDbWQtPlNnRW50cmllcyA9IDE7CiAJWG10Q21kLT5GbGFncyA9IDA7Ci0JLyogKi8KLQkvKiBBZHZhbmNlIHRyYW5zbWl0IGNtZCBkZXNjcmlwdGVyIGJ5IDEuICovCi0JLyogTk9URSAtIFNlZSBjb21tZW50cyBpbiBTeGdUY3BPdXRwdXQgd2hlcmUgd2Ugd3JpdGUgKi8KLQkvKiB0byB0aGUgWG10Q21kIHJlZ2lzdGVyIHJlZ2FyZGluZyBDUFUgSUQgdmFsdWVzIGFuZC9vciAqLwotCS8qIG11bHRpcGxlIGNvbW1hbmRzLiAqLwotCS8qICovCi0JLyogKi8KLQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlhtdENtZCwgMSwgVFJVRSk7Ci0JLyogKi8KLQkvKiAqLworCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBzZXQgdGhlIENoZWNrdW0gaW4gSVAgIGhlYWRlciB0byAwLiBUaGlzIGlzCisJCSAqIHJlcXVpcmVkIGJ5IGhhcmR3YXJlLgorCQkgKi8KKwkJaXBfaGRyKHNrYiktPmNoZWNrID0gMHgwOworCQlYbXRDbWQtPkNzdW1GbGFncy5GbGFncyB8PSBTWEdfU0xPV0NNRF9DU1VNX0lQOworCQlYbXRDbWQtPkNzdW1GbGFncy5GbGFncyB8PSBTWEdfU0xPV0NNRF9DU1VNX1RDUDsKKwkJLyogRG9udCBrbm93IGlmIGxlbmd0aCB3aWxsIHJlcXVpcmUgYSBjaGFuZ2UgaW4gY2FzZSBvZiBWTEFOICovCisJCVhtdENtZC0+Q3N1bUZsYWdzLk1hY0xlbiA9IEVUSF9ITEVOOworCQlYbXRDbWQtPkNzdW1GbGFncy5JcEhsID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpID4+CisJCQkJCQkJU1hHX05XX0hEUl9MRU5fU0hJRlQ7CisJfQorCS8qCisJICogQWR2YW5jZSB0cmFuc21pdCBjbWQgZGVzY3JpcHRlciBieSAxLgorCSAqIE5PVEUgLSBTZWUgY29tbWVudHMgaW4gU3hnVGNwT3V0cHV0IHdoZXJlIHdlIHdyaXRlCisJICogdG8gdGhlIFhtdENtZCByZWdpc3RlciByZWdhcmRpbmcgQ1BVIElEIHZhbHVlcyBhbmQvb3IKKwkgKiBtdWx0aXBsZSBjb21tYW5kcy4KKwkgKiBUb3AgMTYgYml0cyBzcGVjaWZ5IHF1ZXVlX2lkLiAgU2VlIGNvbW1lbnRzIGFib3V0IHF1ZXVlX2lkIGFib3ZlCisJICovCisJLyogRm91ciBxdWV1ZXMgYXQgdGhlIG1vbWVudCAqLworCUFTU0VSVCgocXVldWVfaWQgJiB+U1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSykgPT0gMCk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5YbXRDbWQsICgocXVldWVfaWQgPDwgMTYpIHwgMSksIFRSVUUpOwogCWFkYXB0ZXItPlN0YXRzLlhtdFFMZW4rKzsJLyogU3RhdHMgd2l0aGluIGxvY2sgKi8KLQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWER1bVNnbDIiLAogCQkgIFhtdENtZCwgcFNnbCwgU3hnU2dsLCAwKTsKLQlyZXR1cm47CisJcmV0dXJuICBTVEFUVVNfU1VDQ0VTUzsKIAogICAgICAgYWJvcnRjbWQ6Ci0JLyogTk9URSAtIE9ubHkganVtcCB0byB0aGlzIGxhYmVsIEFGVEVSIGdyYWJiaW5nIHRoZSAqLwotCS8qIFhtdFplcm9Mb2NrLCBhbmQgRE8gTk9UIERST1AgSVQgYmV0d2VlbiB0aGUgKi8KLQkvKiBjb21tYW5kIGFsbG9jYXRpb24gYW5kIHRoZSBmb2xsb3dpbmcgYWJvcnQuICovCisJLyoKKwkgKiBOT1RFIC0gT25seSBqdW1wIHRvIHRoaXMgbGFiZWwgQUZURVIgZ3JhYmJpbmcgdGhlCisJICogWG10WmVyb0xvY2ssIGFuZCBETyBOT1QgRFJPUCBJVCBiZXR3ZWVuIHRoZQorCSAqIGNvbW1hbmQgYWxsb2NhdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBhYm9ydC4KKwkgKi8KIAlpZiAoWG10Q21kKSB7CiAJCVNYR19BQk9SVF9DTUQoWG10UmluZ0luZm8pOwogCX0KLQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOwotCi0vKiBmYWlsc2dsOiAqLwotCS8qIEp1bXAgdG8gdGhpcyBsYWJlbCBpZiBmYWlsdXJlIG9jY3VycyBiZWZvcmUgdGhlICovCi0JLyogWG10WmVyb0xvY2sgaXMgZ3JhYmJlZCAqLwotCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOwotCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1TR0ZhbCIsCi0JCSAgcFNnbCwgU3hnU2dsLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwpOwotCi0JU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBTeGdTZ2wtPkR1bWJQYWNrZXQpOwkvKiBTeGdTZ2wtPkR1bWJQYWNrZXQgaXMgdGhlIHNrYiAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBMaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAKIC8qCisgKiBmYWlsc2dsOgorICogCUp1bXAgdG8gdGhpcyBsYWJlbCBpZiBmYWlsdXJlIG9jY3VycyBiZWZvcmUgdGhlCisgKglYbXRaZXJvTG9jayBpcyBncmFiYmVkCisgKi8KKwlhZGFwdGVyLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiRHVtU0dGYWwiLAorCQkgIHBTZ2wsIFN4Z1NnbCwgWG10UmluZ0luZm8tPkhlYWQsIFhtdFJpbmdJbmZvLT5UYWlsKTsKKwkvKiBTeGdTZ2wtPkR1bWJQYWNrZXQgaXMgdGhlIHNrYiAqLworCS8vIFNYR19DT01QTEVURV9EVU1CX1NFTkQoYWRhcHRlciwgU3hnU2dsLT5EdW1iUGFja2V0KTsKKworIAlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Cit9CisKKy8qCisgKiBMaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKgogICogc3hnX2luaXRpYWxpemVfbGluayAtIEluaXRpYWxpemUgdGhlIGxpbmsgc3R1ZmYKICAqCiAgKiBBcmd1bWVudHMgLQpAQCAtMjExOSwxMCArMjc1OCwxMSBAQAogICovCiBzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2xpbmsoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgU1hHX0hXX1JFR1MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKIAl1MzIgVmFsdWU7CiAJdTMyIENvbmZpZ0RhdGE7CiAJdTMyIE1heEZyYW1lOworCXUzMiBBeGdNYWNSZWcxOwogCWludCBzdGF0dXM7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbml0TGluayIsCkBAIC0yMTQwLDE1ICsyNzgwLDE3IEBACiAJLyogUmVzZXQgYWxsIE1BQyBtb2R1bGVzICovCiAJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMCwgQVhHTUFDX0NGRzBfU1VCX1JFU0VULCBUUlVFKTsKIAotCS8qIExpbmsgYWRkcmVzcyAwICovCi0JLyogWFhYVE9ETyAtIFRoaXMgYXNzdW1lcyB0aGUgTUFDIGFkZHJlc3MgKDBhOjBiOjBjOjBkOjBlOjBmKSAqLwotCS8qIGlzIHN0b3JlZCB3aXRoIHRoZSBmaXJzdCBuaWJibGUgKDBhKSBpbiB0aGUgYnl0ZSAwICovCi0JLyogb2YgdGhlIE1hYyBhZGRyZXNzLiAgUG9zc2libHkgcmV2ZXJzZT8gKi8KLQlWYWx1ZSA9ICoodTMyICopIGFkYXB0ZXItPk1hY0FkZHI7CisJLyoKKwkgKiBMaW5rIGFkZHJlc3MgMAorCSAqIFhYWFRPRE8gLSBUaGlzIGFzc3VtZXMgdGhlIE1BQyBhZGRyZXNzICgwYTowYjowYzowZDowZTowZikKKwkgKiBpcyBzdG9yZWQgd2l0aCB0aGUgZmlyc3QgbmliYmxlICgwYSkgaW4gdGhlIGJ5dGUgMAorCSAqIG9mIHRoZSBNYWMgYWRkcmVzcy4gIFBvc3NpYmx5IHJldmVyc2U/CisJICovCisJVmFsdWUgPSAqKHUzMiAqKSBhZGFwdGVyLT5tYWNhZGRyOwogCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMExvdywgVmFsdWUsIFRSVUUpOwogCS8qIGFsc28gd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIHRoZSBNQUMuICBFbmRpYW4gaXMgcmV2ZXJzZWQuICovCiAJV1JJVEVfUkVHKEh3UmVncy0+TWFjQWRkcmVzc0xvdywgbnRvaGwoVmFsdWUpLCBUUlVFKTsKLQlWYWx1ZSA9ICgqKHUxNiAqKSAmIGFkYXB0ZXItPk1hY0FkZHJbNF0gJiAweDAwMDBGRkZGKTsKKwlWYWx1ZSA9ICgqKHUxNiAqKSAmIGFkYXB0ZXItPm1hY2FkZHJbNF0gJiAweDAwMDBGRkZGKTsKIAlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczBIaWdoLCBWYWx1ZSB8IExJTktfQUREUkVTU19FTkFCTEUsIFRSVUUpOwogCS8qIGVuZGlhbiBzd2FwIGZvciB0aGUgTUFDIChwdXQgaGlnaCBieXRlcyBpbiBiaXRzIFszMToxNl0sIHN3YXBwZWQpICovCiAJVmFsdWUgPSBudG9obChWYWx1ZSk7CkBAIC0yMTY3LDQ3ICsyODA5LDc2IEBACiAJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMCwgMCwgVFJVRSk7CiAKIAkvKiBDb25maWd1cmUgTUFDICovCi0JV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMSwgKEFYR01BQ19DRkcxX1hNVF9QQVVTRSB8CS8qIEFsbG93IHNlbmRpbmcgb2YgcGF1c2UgKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfWE1UX0VOIHwJLyogRW5hYmxlIFhNVCAqLwotCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UgfAkvKiBFbmFibGUgZGV0ZWN0aW9uIG9mIHBhdXNlICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9FTiB8CS8qIEVuYWJsZSByZWNlaXZlICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVCB8CS8qIHNob3J0IGZyYW1lIGRldGVjdGlvbiAqLwotCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9DSEVDS19MRU4gfAkvKiBWZXJpZnkgZnJhbWUgbGVuZ3RoICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX0dFTl9GQ1MgfAkvKiBHZW5lcmF0ZSBGQ1MgKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfUEFEXzY0KSwJLyogUGFkIGZyYW1lcyB0byA2NCBieXRlcyAqLwotCQkgIFRSVUUpOworCUF4Z01hY1JlZzEgPSAoICAvKiBFbmFibGUgWE1UICovCisJCQlBWEdNQUNfQ0ZHMV9YTVRfRU4gfAorCQkJLyogRW5hYmxlIHJlY2VpdmUgKi8KKwkJCUFYR01BQ19DRkcxX1JDVl9FTiB8CisJCQkvKiBzaG9ydCBmcmFtZSBkZXRlY3Rpb24gKi8KKwkJCUFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVCB8CisJCQkvKiBWZXJpZnkgZnJhbWUgbGVuZ3RoICovCisJCQlBWEdNQUNfQ0ZHMV9DSEVDS19MRU4gfAorCQkJLyogR2VuZXJhdGUgRkNTICovCisJCQlBWEdNQUNfQ0ZHMV9HRU5fRkNTIHwKKwkJCS8qIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMgKi8KKwkJCUFYR01BQ19DRkcxX1BBRF82NCk7CisKKyAJaWYgKGFkYXB0ZXItPlhtdEZjRW5hYmxlZCkgeworCQlBeGdNYWNSZWcxIHw9ICBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0U7ICAvKiBBbGxvdyBzZW5kaW5nIG9mIHBhdXNlICovCisgCX0KKyAJaWYgKGFkYXB0ZXItPlJjdkZjRW5hYmxlZCkgeworCQlBeGdNYWNSZWcxIHw9ICBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0U7ICAvKiBFbmFibGUgZGV0ZWN0aW9uIG9mIHBhdXNlICovCisgCX0KKworIAlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcxLCBBeGdNYWNSZWcxLCBUUlVFKTsKIAogCS8qIFNldCBBWEdNQUMgbWF4IGZyYW1lIGxlbmd0aCBpZiBqdW1iby4gIE5vdCBuZWVkZWQgZm9yIHN0YW5kYXJkIE1UVSAqLwogCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpIHsKIAkJV1JJVEVfUkVHKEh3UmVncy0+TWFjTWF4RnJhbWVMZW4sIEFYR01BQ19NQVhGUkFNRV9KVU1CTywgVFJVRSk7CiAJfQotCS8qIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLSAqLwotCS8qIFRoZSB2YWx1ZSBwbGFjZWQgaW4gdGhlIEFYR01BQ19BTUlJTV9DRkdfSEFMRl9DTE9DSyBwb3J0aW9uICovCi0JLyogKGJvdHRvbSBiaXRzKSBvZiB0aGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSAqLwotCS8qIE1EQyBmcmVxdWVuY3kgYXMgc3BlY2lmaWVkIGluIHRoZSBBLVhHTUFDIERlc2lnbiBEb2N1bWVudC4gKi8KLQkvKiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIHplcm8uICBUaGUgZm9sbG93aW5nIHZhbHVlICg2MiBvciAweDNFKSAqLwotCS8qIGlzIGJhc2VkIG9uIG91ciBNQUMgdHJhbnNtaXQgY2xvY2sgZnJlcXVlbmN5IChNVENMSykgb2YgMzEyLjUgTUh6LiAqLwotCS8qIEdpdmVuIGEgbWF4aW11bSBNRElPIGNsb2NrIGZyZXF1ZW5jeSBvZiAyLjUgTUh6IChzZWUgdGhlIFBIWSBzcGVjKSwgKi8KLQkvKiB3ZSBnZXQ6ICAzMTIuNS8oMiooWCsxKSkgPCAyLjUgID09PiBYID0gNjIuICovCi0JLyogVGhpcyB2YWx1ZSBoYXBwZW5zIHRvIGJlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHJlZ2lzdGVyLCAqLwotCS8qIHNvIHdlIHJlYWxseSBkb24ndCBoYXZlIHRvIGRvIHRoaXMuICovCi0JV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1Db25maWcsIDB4MDAwMDAwM0UsIFRSVUUpOworCS8qCisJICogQU1JSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtCisJICogVGhlIHZhbHVlIHBsYWNlZCBpbiB0aGUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLIHBvcnRpb24KKwkgKiAoYm90dG9tIGJpdHMpIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIE1EQyBmcmVxdWVuY3kKKwkgKiBhcyBzcGVjaWZpZWQgaW4gdGhlIEEtWEdNQUMgRGVzaWduIERvY3VtZW50LiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlCisJICogemVyby4gIFRoZSBmb2xsb3dpbmcgdmFsdWUgKDYyIG9yIDB4M0UpIGlzIGJhc2VkIG9uIG91ciBNQUMgdHJhbnNtaXQKKwkgKiBjbG9jayBmcmVxdWVuY3kgKE1UQ0xLKSBvZiAzMTIuNSBNSHouIEdpdmVuIGEgbWF4aW11bSBNRElPIGNsb2NrCisJICogZnJlcXVlbmN5IG9mIDIuNSBNSHogKHNlZSB0aGUgUEhZIHNwZWMpLCB3ZSBnZXQ6CisJICogCTMxMi41LygyKihYKzEpKSA8IDIuNSAgPT0+IFggPSA2Mi4KKwkgKiBUaGlzIHZhbHVlIGhhcHBlbnMgdG8gYmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIsIHNvIHdlCisJICogcmVhbGx5IGRvbid0IGhhdmUgdG8gZG8gdGhpcy4KKwkgKi8KKwlpZiAoYWRhcHRlci0+YXNpY3R5cGUgPT0gU0FIQVJBX1JFVl9CKSB7CisJCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ29uZmlnLCAweDAwMDAwMDFGLCBUUlVFKTsKKwl9IGVsc2UgeworCQlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNvbmZpZywgMHgwMDAwMDAzRSwgVFJVRSk7CisJfQogCiAJLyogUG93ZXIgdXAgYW5kIGVuYWJsZSBQSFkgYW5kIFhBVUkvWEdYUy9TZXJkZXMgbG9naWMgKi8KIAlXUklURV9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLAotCQkgIChMU19QSFlfQ0xSX1JFU0VUIHwKLQkJICAgTFNfWEdYU19FTkFCTEUgfAotCQkgICBMU19YR1hTX0NUTCB8IExTX1BIWV9DTEtfRU4gfCBMU19BVFROX0FMQVJNKSwgVFJVRSk7CisJCSAgIChMU19QSFlfQ0xSX1JFU0VUIHwKKwkJICAgIExTX1hHWFNfRU5BQkxFIHwKKwkJICAgIExTX1hHWFNfQ1RMIHwKKwkJICAgIExTX1BIWV9DTEtfRU4gfAorCQkgICAgTFNfQVRUTl9BTEFSTSksCisJCSAgICBUUlVFKTsKIAlEQkdfRVJST1IoIkFmdGVyIFBvd2VyIFVwIGFuZCBlbmFibGUgUEhZIGluIHN4Z19pbml0aWFsaXplX2xpbmtcbiIpOwogCi0JLyogUGVyIGluZm9ybWF0aW9uIGdpdmVuIGJ5IEFlbHVyb3MsIHdhaXQgMTAwIG1zIGFmdGVyIHJlbW92aW5nIHJlc2V0LiAqLwotCS8qIEl0J3Mgbm90IGVub3VnaCB0byB3YWl0IGZvciB0aGUgc2VsZi1jbGVhcmluZyByZXNldCBiaXQgaW4gcmVnIDAgdG8gY2xlYXIuICovCisJLyoKKwkgKiBQZXIgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgQWVsdXJvcywgd2FpdCAxMDAgbXMgYWZ0ZXIgcmVtb3ZpbmcgcmVzZXQuCisJICogSXQncyBub3QgZW5vdWdoIHRvIHdhaXQgZm9yIHRoZSBzZWxmLWNsZWFyaW5nIHJlc2V0IGJpdCBpbiByZWcgMCB0bworCSAqIGNsZWFyLgorCSAqLwogCW1kZWxheSgxMDApOwogCi0JLyogVmVyaWZ5IHRoZSBQSFkgaGFzIGNvbWUgdXAgYnkgY2hlY2tpbmcgdGhhdCB0aGUgUmVzZXQgYml0IGhhcyBjbGVhcmVkLiAqLwotCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLwotCQkJCSAgIFBIWV9QTUFfQ09OVFJPTDEsCS8qIFBNQS9QTUQgY29udHJvbCByZWdpc3RlciAqLwotCQkJCSAgICZWYWx1ZSk7CisJLyogVmVyaWZ5IHRoZSBQSFkgaGFzIGNvbWUgdXAgYnkgY2hlY2tpbmcgdGhhdCB0aGUgUmVzZXQgYml0IGhhcworCSAqIGNsZWFyZWQuCisJICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwKKwkJCQlNSUlNX0RFVl9QSFlfUE1BLCAvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQlQSFlfUE1BX0NPTlRST0wxLCAvKiBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCQkmVmFsdWUpOworCURCR19FUlJPUigiQWZ0ZXIgc3hnX3JlYWRfbWRpb19yZWcgVmFsdWVbJXhdIGZhaWw9JXhcbiIsIFZhbHVlLAorCQkJCQkgKFZhbHVlICYgUE1BX0NPTlRST0wxX1JFU0VUKSk7CiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJaWYgKFZhbHVlICYgUE1BX0NPTlRST0wxX1JFU0VUKQkvKiByZXNldCBjb21wbGV0ZSBpZiBiaXQgaXMgMCAqLwpAQCAtMjIyOCwxNiArMjg5OSwyNiBAQAogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAogCS8qIEVuYWJsZSB0aGUgTGluayBBbGFybSAqLwotCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KLQkJCQkgICAgTEFTSV9DT05UUk9MLAkvKiBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsJLyogZW5hYmxlIGxpbmsgYWxhcm0gYml0ICovCisKKwkvKiBNSUlNX0RFVl9QSFlfUE1BCQktIFBIWSBQTUEvUE1EIG1vZHVsZQorCSAqIExBU0lfQ09OVFJPTAkJCS0gTEFTSSBjb250cm9sIHJlZ2lzdGVyCisJICogTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCS0gZW5hYmxlIGxpbmsgYWxhcm0gYml0CisJICovCisJc3RhdHVzID0gc3hnX3dyaXRlX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCisJCQkJICAgIExBU0lfQ09OVFJPTCwKKwkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAogCS8qIFhYWFRPRE8gLSB0ZW1wb3JhcnkgLSB2ZXJpZnkgYml0IGlzIHNldCAqLwotCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLwotCQkJCSAgIExBU0lfQ09OVFJPTCwJLyogTEFTSSBjb250cm9sIHJlZ2lzdGVyICovCisKKwkvKiBNSUlNX0RFVl9QSFlfUE1BCQktIFBIWSBQTUEvUE1EIG1vZHVsZQorCSAqIExBU0lfQ09OVFJPTAkJCS0gTEFTSSBjb250cm9sIHJlZ2lzdGVyCisJICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkgICBMQVNJX0NPTlRST0wsCiAJCQkJICAgJlZhbHVlKTsKKwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCWlmICghKFZhbHVlICYgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKSkgewpAQCAtMjI1Myw2ICsyOTM0LDExIEBACiAJCSAgICAgIFJDVl9DT05GSUdfVFpJUFY0IHwKIAkJICAgICAgUkNWX0NPTkZJR19IQVNIXzE2IHwKIAkJICAgICAgUkNWX0NPTkZJR19TT0NLRVQgfCBSQ1ZfQ09ORklHX0JVRlNJWkUoTWF4RnJhbWUpKTsKKworCWlmIChhZGFwdGVyLT5hc2ljdHlwZSA9PSBTQUhBUkFfUkVWX0IpIHsKKwkJQ29uZmlnRGF0YSB8PSAoUkNWX0NPTkZJR19ISVBSSUNUTCAgfAorCQkJCVJDVl9DT05GSUdfTkVXU1RBVFVTRk1UKTsKKwl9CiAJV1JJVEVfUkVHKEh3UmVncy0+UmN2Q29uZmlnLCBDb25maWdEYXRhLCBUUlVFKTsKIAogCVdSSVRFX1JFRyhId1JlZ3MtPlhtdENvbmZpZywgWE1UX0NPTkZJR19FTkFCTEUsIFRSVUUpOwpAQCAtMjI3NywyMSArMjk2MywyNSBAQAogc3RhdGljIGludCBzeGdfcGh5X2luaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAl1MzIgVmFsdWU7Ci0Jc3RydWN0IFBIWV9VQ09ERSAqcDsKKwlzdHJ1Y3QgcGh5X3Vjb2RlICpwOwogCWludCBzdGF0dXM7CiAKIAlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBSZWFkIGEgcmVnaXN0ZXIgdG8gaWRlbnRpZnkgdGhlIFBIWSB0eXBlICovCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJICAgMHhDMjA1LAkvKiBQSFkgSUQgcmVnaXN0ZXIgKD8pICovCi0JCQkJICAgJlZhbHVlKTsJLyogICAgWFhYVE9ETyAtIGFkZCBkZWYgKi8KKwkvKiBNSUlNX0RFVl9QSFlfUE1BIC0gUEhZIFBNQS9QTUQgbW9kdWxlCisJICogMHhDMjA1IC0gUEhZIElEIHJlZ2lzdGVyICg/KQorCSAqICZWYWx1ZSAtIFhYWFRPRE8gLSBhZGQgZGVmCisJICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkgICAweEMyMDUsCisJCQkJICAgJlZhbHVlKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAotCWlmIChWYWx1ZSA9PSAweDAwMTIpIHsJLyogMHgwMDEyID09IEFFTDIwMDVDIFBIWSg/KSAtIFhYWFRPRE8gLSBhZGQgZGVmICovCi0JCURCR19FUlJPUgotCQkgICAgKCJBRUwyMDA1QyBQSFkgZGV0ZWN0ZWQuICBEb3dubG9hZGluZyBQSFkgbWljcm9jb2RlLlxuIik7CisJaWYgKFZhbHVlID09IDB4MDAxMikgeworCQkvKiAweDAwMTIgPT0gQUVMMjAwNUMgUEhZKD8pIC0gWFhYVE9ETyAtIGFkZCBkZWYgKi8KKwkJREJHX0VSUk9SKCJBRUwyMDA1QyBQSFkgZGV0ZWN0ZWQuICBEb3dubG9hZGluZyBQSFkgXAorCQkJCSBtaWNyb2NvZGUuXG4iKTsKIAogCQkvKiBJbml0aWFsaXplIEFFTDIwMDVDIFBIWSBhbmQgZG93bmxvYWQgUEhZIG1pY3JvY29kZSAqLwogCQlmb3IgKHAgPSBQaHlVY29kZTsgcC0+QWRkciAhPSAweEZGRkY7IHArKykgewpAQCAtMjI5OSwxMCArMjk4OSwxMyBAQAogCQkJCS8qIGlmIGFkZHJlc3MgPT0gMCwgZGF0YSA9PSBzbGVlcCB0aW1lIGluIG1zICovCiAJCQkJbWRlbGF5KHAtPkRhdGEpOwogCQkJfSBlbHNlIHsKLQkJCQkvKiB3cml0ZSB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgKi8KLQkJCQlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJCQkJICAgIHAtPkFkZHIsCS8qIFBIWSBhZGRyZXNzICovCi0JCQkJCQkJICAgIHAtPkRhdGEpOwkvKiBQSFkgZGF0YSAqLworCQkJLyogd3JpdGUgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzICovCisJCQkJc3RhdHVzID0gc3hnX3dyaXRlX21kaW9fcmVnKGFkYXB0ZXIsCisJCQkJCQkJTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkJCQkvKiBQSFkgYWRkcmVzcyAqLworCQkJCQkJCSAgICBwLT5BZGRyLAorCQkJCQkJCS8qIFBIWSBkYXRhICovCisJCQkJCQkJICAgIHAtPkRhdGEpOwogCQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCQkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCQkJfQpAQCAtMjMyNCwxMSArMzAxNywxNCBAQAogICovCiBzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCXN0cnVjdCBTWEdfSFdfUkVHUyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJZW51bSBTWEdfTElOS19TVEFURSBMaW5rU3RhdGU7CiAJaW50IHN0YXR1czsKIAl1MzIgVmFsdWU7CiAKKwlpZiAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTikKKwkJcmV0dXJuOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkxpbmtFdm50IiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKIAlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMzM2LDM1ICszMDMyLDU3IEBACiAJLyogQ2hlY2sgdGhlIExpbmsgU3RhdHVzIHJlZ2lzdGVyLiAgV2Ugc2hvdWxkIGhhdmUgYSBMaW5rIEFsYXJtLiAqLwogCVJFQURfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgVmFsdWUpOwogCWlmIChWYWx1ZSAmIExTX0xJTktfQUxBUk0pIHsKLQkJLyogV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZSAqLwotCQkvKiBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykgKi8KKwkJLyoKKwkJICogV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZQorCQkgKiBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykKKwkJICovCiAJCW1kZWxheSgxMCk7CiAKIAkJLyogTm93IGNsZWFyIHRoZSBhbGFybSBieSByZWFkaW5nIHRoZSBMQVNJIHN0YXR1cyByZWdpc3Rlci4gKi8KLQkJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJCSAgIExBU0lfU1RBVFVTLAkvKiBMQVNJIHN0YXR1cyByZWdpc3RlciAqLworCQkvKiBNSUlNX0RFVl9QSFlfUE1BIC0gUEhZIFBNQS9QTUQgbW9kdWxlICovCisJCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCisJCQkJCS8qIExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCSAgIExBU0lfU1RBVFVTLAogCQkJCQkgICAmVmFsdWUpOwogCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAJCQlEQkdfRVJST1IoIkVycm9yIHJlYWRpbmcgTEFTSSBTdGF0dXMgTURJTyByZWdpc3RlciFcbiIpOwogCQkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgU1hHX0xJTktfRE9XTik7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7ICovCisJCS8qIEFTU0VSVCgwKTsgKi8KIAkJfQotCQlBU1NFUlQoVmFsdWUgJiBMQVNJX1NUQVRVU19MU19BTEFSTSk7CisJCS8qCisJCSAqIFdlIHVzZWQgdG8gYXNzZXJ0IHRoYXQgdGhlIExBU0lfTFNfQUxBUk0gYml0IHdhcyBzZXQsIGFzCisJCSAqIGl0IHNob3VsZCBiZS4gIEJ1dCB0aGVyZSBhcHBlYXJzIHRvIGJlIGNhc2VzIGR1cmluZworCQkgKiBpbml0aWFsaXphdGlvbiAod2hlbiB0aGUgUEhZIGlzIHJlc2V0IGFuZCByZS1pbml0aWFsaXplZCkKKwkJICogd2hlbiB3ZSBnZXQgYSBsaW5rIGFsYXJtLCBidXQgdGhlIHN0YXR1cyBiaXQgaXMgMCB3aGVuIHdlCisJCSAqIHJlYWQgaXQuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gYXNzdXJlIHRoaXMgbmV2ZXIgaGFwcGVucworCQkgKiAoYW5kIG52ZXIgYmVpbmcgY2VydGFpbiksIGp1c3QgaWdub3JlIGl0LgorCisJCSAqIEFTU0VSVChWYWx1ZSAmIExBU0lfU1RBVFVTX0xTX0FMQVJNKTsKKwkJICovCiAKIAkJLyogTm93IGdldCBhbmQgc2V0IHRoZSBsaW5rIHN0YXRlICovCiAJCUxpbmtTdGF0ZSA9IHN4Z19nZXRfbGlua19zdGF0ZShhZGFwdGVyKTsKIAkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKIAkJREJHX0VSUk9SKCJTWEc6IExpbmsgQWxhcm0gb2NjdXJyZWQuICBMaW5rIGlzICVzXG4iLAogCQkJICAoKExpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgPyAiVVAiIDogIkRPV04iKSk7CisJCWlmIChMaW5rU3RhdGUgPT0gU1hHX0xJTktfVVApIHsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJfQogCX0gZWxzZSB7Ci0JCS8qIFhYWFRPRE8gLSBBc3N1bWluZyBMaW5rIEF0dGVudGlvbiBpcyBvbmx5IGJlaW5nIGdlbmVyYXRlZCBmb3IgdGhlICovCi0JCS8qIExpbmsgQWxhcm0gcGluIChhbmQgbm90IGZvciBhIFhBVUkgTGluayBTdGF0dXMgY2hhbmdlKSwgdGhlbiBpdCdzICovCi0JCS8qIGltcG9zc2libGUgdG8gZ2V0IGhlcmUuICBZZXQgd2UndmUgZ290dGVuIGhlcmUgdHdpY2UgKHVuZGVyIGV4dHJlbWUgKi8KLQkJLyogY29uZGl0aW9ucyAtIGJvdW5jaW5nIHRoZSBsaW5rIHVwIGFuZCBkb3duIG1hbnkgdGltZXMgYSBzZWNvbmQpLiAqLwotCQkvKiBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uICovCisJCS8qCisJIAkgKiBYWFhUT0RPIC0gQXNzdW1pbmcgTGluayBBdHRlbnRpb24gaXMgb25seSBiZWluZyBnZW5lcmF0ZWQKKwkgCSAqIGZvciB0aGUgTGluayBBbGFybSBwaW4gKGFuZCBub3QgZm9yIGEgWEFVSSBMaW5rIFN0YXR1cyBjaGFuZ2UpCisJIAkgKiAsIHRoZW4gaXQncyBpbXBvc3NpYmxlIHRvIGdldCBoZXJlLiAgWWV0IHdlJ3ZlIGdvdHRlbiBoZXJlCisJIAkgKiB0d2ljZSAodW5kZXIgZXh0cmVtZSBjb25kaXRpb25zIC0gYm91bmNpbmcgdGhlIGxpbmsgdXAgYW5kCisJIAkgKiBkb3duIG1hbnkgdGltZXMgYSBzZWNvbmQpLiBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCisJIAkgKi8KIAkJREJHX0VSUk9SKCJTWEc6IHN4Z19saW5rX2V2ZW50OiBDYW4ndCBnZXQgaGVyZSFcbiIpOwogCQlEQkdfRVJST1IoIlNYRzogTGluayBTdGF0dXMgPT0gMHglMDhYLlxuIiwgVmFsdWUpOwotLyogICAgICAgICAgICAgIEFTU0VSVCgwKTsgKi8KKwkJLyogQVNTRVJUKDApOyAqLwogCX0KIAlEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fZnVuY19fKTsKIApAQCAtMjM4OSwxMCArMzEwNywxNSBAQAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkdldExpbmsiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogCi0JLyogUGVyIHRoZSBYZW5wYWsgc3BlYyAoYW5kIHRoZSBJRUVFIDEwR2Igc3BlYz8pLCB0aGUgbGluayBpcyB1cCBpZiAqLwotCS8qIHRoZSBmb2xsb3dpbmcgMyBiaXRzIChmcm9tIDMgZGlmZmVyZW50IE1ESU8gcmVnaXN0ZXJzKSBhcmUgYWxsIHRydWUuICovCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJICAgUEhZX1BNQV9SQ1ZfREVULAkvKiBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdCByZWdpc3RlciAqLworCS8qCisJICogUGVyIHRoZSBYZW5wYWsgc3BlYyAoYW5kIHRoZSBJRUVFIDEwR2Igc3BlYz8pLCB0aGUgbGluayBpcyB1cCBpZgorCSAqIHRoZSBmb2xsb3dpbmcgMyBiaXRzIChmcm9tIDMgZGlmZmVyZW50IE1ESU8gcmVnaXN0ZXJzKSBhcmUgYWxsIHRydWUuCisJICovCisKKwkvKiBNSUlNX0RFVl9QSFlfUE1BIC0gIFBIWSBQTUEvUE1EIG1vZHVsZSAqLworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCisJCQkJLyogUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QgcmVnaXN0ZXIgKi8KKwkJCQkgICBQSFlfUE1BX1JDVl9ERVQsCiAJCQkJICAgJlZhbHVlKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlnb3RvIGJhZDsKQEAgLTI0MDEsOCArMzEyNCwxMCBAQAogCWlmICghKFZhbHVlICYgUE1BX1JDVl9ERVRFQ1QpKQogCQlyZXR1cm4gKFNYR19MSU5LX0RPV04pOwogCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BDUywJLyogUEhZIFBDUyBtb2R1bGUgKi8KLQkJCQkgICBQSFlfUENTXzEwR19TVEFUVVMxLAkvKiBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxIHJlZ2lzdGVyICovCisJLyogTUlJTV9ERVZfUEhZX1BDUyAtIFBIWSBQQ1MgbW9kdWxlICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BDUywKKwkJCQkvKiBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxIHJlZ2lzdGVyICovCisJCQkJICAgUEhZX1BDU18xMEdfU1RBVFVTMSwKIAkJCQkgICAmVmFsdWUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gYmFkOwpAQCAtMjQxMSw4ICszMTM2LDkgQEAKIAlpZiAoIShWYWx1ZSAmIFBDU18xMEJfQkxPQ0tfTE9DSykpCiAJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CiAKLQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfWFMsCS8qIFBIWSBYUyBtb2R1bGUgKi8KLQkJCQkgICBQSFlfWFNfTEFORV9TVEFUVVMsCS8qIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1hTLC8qIFBIWSBYUyBtb2R1bGUgKi8KKwkJCQkvKiBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciAqLworCQkJCSAgIFBIWV9YU19MQU5FX1NUQVRVUywKIAkJCQkgICAmVmFsdWUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gYmFkOwpAQCAtMjQyNyw3ICszMTUzLDcgQEAKIAlyZXR1cm4gKFNYR19MSU5LX1VQKTsKIAogICAgICAgYmFkOgotCS8qIEFuIGVycm9yIG9jY3VycmVkIHJlYWRpbmcgYW4gTURJTyByZWdpc3Rlci4gIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gKi8KKwkvKiBBbiBlcnJvciBvY2N1cnJlZCByZWFkaW5nIGFuIE1ESU8gcmVnaXN0ZXIuIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gKi8KIAlEQkdfRVJST1IoIkVycm9yIHJlYWRpbmcgYW4gTURJTyByZWdpc3RlciFcbiIpOwogCUFTU0VSVCgwKTsKIAlyZXR1cm4gKFNYR19MSU5LX0RPV04pOwpAQCAtMjQ0OCw2ICszMTc0LDM3IEBACiB9CiAKIC8qCisgKiBzeGdfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiAgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworaW50IHN4Z19jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICghKChuZXdfbXR1ID09IFNYR19ERUZBVUxUX01UVSkgfHwgKG5ld19tdHUgPT0gU1hHX0pVTUJPX01UVSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmKG5ld19tdHUgPT0gbmV0ZGV2LT5tdHUpCisJCXJldHVybiAwOworCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJaWYgKG5ld19tdHUgPT0gU1hHX0pVTUJPX01UVSkgeworCQlhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPSBUUlVFOworCQlhZGFwdGVyLT5GcmFtZVNpemUgPSBKVU1CT01BWEZSQU1FOworCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkU7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+SnVtYm9FbmFibGVkID0gRkFMU0U7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEVUSEVSTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFOworCX0KKworCXN4Z19lbnRyeV9oYWx0KG5ldGRldik7CisJc3hnX2VudHJ5X29wZW4obmV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIHN4Z19saW5rX3N0YXRlIC0gU2V0IHRoZSBsaW5rIHN0YXRlIGFuZCBpZiBuZWNlc3NhcnksIGluZGljYXRlLgogICoJVGhpcyByb3V0aW5lIHRoZSBjZW50cmFsIHBvaW50IG9mIHByb2Nlc3NpbmcgZm9yIGFsbCBsaW5rIHN0YXRlIGNoYW5nZXMuCiAgKglOb3RoaW5nIGVsc2UgaW4gdGhlIGRyaXZlciBzaG91bGQgYWx0ZXIgdGhlIGxpbmsgc3RhdGUgb3IgcGVyZm9ybQpAQCAtMjQ2MCwyNyArMzIxNywzMiBAQAogICogUmV0dXJuCiAgKglOb25lCiAgKi8KLXN0YXRpYyB2b2lkIHN4Z19saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGVudW0gU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKQorc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQllbnVtIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZSkKIHsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiTG5rSU5EQ1QiLAogCQkgIGFkYXB0ZXIsIExpbmtTdGF0ZSwgYWRhcHRlci0+TGlua1N0YXRlLCBhZGFwdGVyLT5TdGF0ZSk7CiAKIAlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBIb2xkIHRoZSBhZGFwdGVyIGxvY2sgZHVyaW5nIHRoaXMgcm91dGluZS4gIE1heWJlIG1vdmUgKi8KLQkvKiB0aGUgbG9jayB0byB0aGUgY2FsbGVyLiAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCS8qCisJICogSG9sZCB0aGUgYWRhcHRlciBsb2NrIGR1cmluZyB0aGlzIHJvdXRpbmUuICBNYXliZSBtb3ZlCisJICogdGhlIGxvY2sgdG8gdGhlIGNhbGxlci4KKwkgKi8KKwkvKiBJTVAgVE9ETyA6IENoZWNrIGlmIHdlIGNhbiBzdXJ2aXZlIHdpdGhvdXQgdGFraW5nIHRoaXMgbG9jayAqLworLy8Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CiAJaWYgKExpbmtTdGF0ZSA9PSBhZGFwdGVyLT5MaW5rU3RhdGUpIHsKIAkJLyogTm90aGluZyBjaGFuZ2VkLi4gKi8KLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKLQkJREJHX0VSUk9SKCJFWElUICMwICVzXG4iLCBfX2Z1bmNfXyk7CisvLwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJREJHX0VSUk9SKCJFWElUICMwICVzLiBMaW5rIHN0YXR1cyA9ICVkXG4iLAorCQkJCQkgX19mdW5jX18sIExpbmtTdGF0ZSk7CiAJCXJldHVybjsKIAl9CiAJLyogU2F2ZSB0aGUgYWRhcHRlciBzdGF0ZSAqLwogCWFkYXB0ZXItPkxpbmtTdGF0ZSA9IExpbmtTdGF0ZTsKIAogCS8qIERyb3AgdGhlIGxvY2sgYW5kIGluZGljYXRlIGxpbmsgc3RhdGUgKi8KLQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworLy8Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKIAlEQkdfRVJST1IoIkVYSVQgIzEgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN4Z19pbmRpY2F0ZV9saW5rX3N0YXRlKGFkYXB0ZXIsIExpbmtTdGF0ZSk7CkBAIC0yNTAxLDE0ICszMjYzLDE2IEBACiBzdGF0aWMgaW50IHN4Z193cml0ZV9tZGlvX3JlZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgVmFsdWUpCiB7Ci0Jc3RydWN0IFNYR19IV19SRUdTICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7Ci0JdTMyIEFkZHJPcDsJCS8qIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLwotCXUzMiBXcml0ZU9wOwkJLyogV3JpdGUgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLwotCXUzMiBDbWQ7CQkvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCisJc3RydWN0IHN4Z19od19yZWdzICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJLyogQWRkcmVzcyBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCisJdTMyIEFkZHJPcDsKKwkvKiBXcml0ZSBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCisJdTMyIFdyaXRlT3A7CisJdTMyIENtZDsvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCiAJdTMyIFZhbHVlUmVhZDsKIAl1MzIgVGltZW91dDsKIAotLyogIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KKwkvKiBEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7ICovCiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJXcnRNRElPIiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKQEAgLTI1NzEsNyArMzMzNSw3IEBACiAJCX0KIAl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKIAotLyogIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19mdW5jX18pOyAqLworCS8qIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19mdW5jX18pOyAqLwogCiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CkBAIC0yNTgzLDcgKzMzNDcsNyBAQAogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKiAgRGV2QWRkciAgICAgLSBNRElPIGRldmljZSBudW1iZXIgYmVpbmcgYWRkcmVzc2VkCiAgKiAgUmVnQWRkciAgICAgLSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIE1ESU8gZGV2aWNlCi0gKiAgcFZhbHVlCQktIHBvaW50ZXIgdG8gd2hlcmUgdG8gcHV0IGRhdGEgcmVhZCBmcm9tIHRoZSBNRElPIHJlZ2lzdGVyCisgKiAgcFZhbHVlCS0gcG9pbnRlciB0byB3aGVyZSB0byBwdXQgZGF0YSByZWFkIGZyb20gdGhlIE1ESU8gcmVnaXN0ZXIKICAqCiAgKiBSZXR1cm4KICAqCXN0YXR1cwpAQCAtMjU5MSwxNiArMzM1NSwxNiBAQAogc3RhdGljIGludCBzeGdfcmVhZF9tZGlvX3JlZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiAqcFZhbHVlKQogewotCXN0cnVjdCBTWEdfSFdfUkVHUyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOwotCXUzMiBBZGRyT3A7CQkvKiBBZGRyZXNzIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KLQl1MzIgUmVhZE9wOwkJLyogUmVhZCBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCi0JdTMyIENtZDsJCS8qIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykgKi8KKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgQWRkck9wOwkvKiBBZGRyZXNzIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KKwl1MzIgUmVhZE9wOwkvKiBSZWFkIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KKwl1MzIgQ21kOwkvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCiAJdTMyIFZhbHVlUmVhZDsKIAl1MzIgVGltZW91dDsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwotLyogIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KKwlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJLyogRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGggKi8KIAlEZXZBZGRyICY9IDB4MDAxRjsJLyogNS1iaXQgZmllbGQgKi8KQEAgLTI2MzYsNiArMzQwMCw4IEBACiAJCXVkZWxheSgxMDApOwkvKiBUaW1lb3V0IGluIDEwMHVzIHVuaXRzICovCiAJCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1JbmRpY2F0b3IsIFZhbHVlUmVhZCk7CiAJCWlmICgtLVRpbWVvdXQgPT0gMCkgeworICAgICAgICAgICAgREJHX0VSUk9SKCJFWElUICVzIHdpdGggU1RBVFVTX0ZBSUxVUkUgMVxuIiwgX19GVU5DVElPTl9fKTsKKwogCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJCX0KIAl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKQEAgLTI2NTUsNiArMzQyMSw4IEBACiAJCXVkZWxheSgxMDApOwkvKiBUaW1lb3V0IGluIDEwMHVzIHVuaXRzICovCiAJCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1JbmRpY2F0b3IsIFZhbHVlUmVhZCk7CiAJCWlmICgtLVRpbWVvdXQgPT0gMCkgeworICAgICAgICAgICAgREJHX0VSUk9SKCJFWElUICVzIHdpdGggU1RBVFVTX0ZBSUxVUkUgMlxuIiwgX19GVU5DVElPTl9fKTsKKwogCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJCX0KIAl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKQEAgLTI2NjMsNyArMzQzMSw3IEBACiAJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUZpZWxkLCAqcFZhbHVlKTsKIAkqcFZhbHVlICY9IDB4RkZGRjsJLyogZGF0YSBpcyBpbiB0aGUgbG93ZXIgMTYgYml0cyAqLwogCi0vKiAgREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7ICovCisJREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CkBAIC0yNjcyLDIyICszNDQwLDIxIEBACiAgKiBGdW5jdGlvbnMgdG8gb2J0YWluIHRoZSBDUkMgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3MuCiAgKiBUaGlzIGlzIGEgc3RhbmRhcmQgZXRoZXJuZXQgQ1JDIGluIHRoYXQgaXQgaXMgYSAzMi1iaXQsIHJlZmxlY3RlZCBDUkMgdXNpbmcKICAqIHRoZSBwb2x5bm9taWFsOgotICogICB4XjMyICsgeF4yNiArIHheMjMgKyB4XjIyICsgeF4xNiArIHheMTIgKyB4XjExICsgeF4xMCArIHheOCArIHheNyArIHheNSArIHheNCArIHheMiArIHheMS4KKyAqICAgeF4zMiArIHheMjYgKyB4XjIzICsgeF4yMiArIHheMTYgKyB4XjEyICsgeF4xMSArIHheMTAgKyB4XjggKyB4XjcgKyB4XjUKKyAqICAgICsgeF40ICsgeF4yICsgeF4xLgogICoKLSAqIEFmdGVyIHRoZSBDUkMgZm9yIHRoZSA2IGJ5dGVzIGlzIGdlbmVyYXRlZCAoYnV0IGJlZm9yZSB0aGUgdmFsdWUgaXMgY29tcGxlbWVudGVkKSwKLSAqIHdlIG11c3QgdGhlbiB0cmFuc3Bvc2UgdGhlIHZhbHVlIGFuZCByZXR1cm4gYml0cyAzMC0yMy4KLSAqCisgKiBBZnRlciB0aGUgQ1JDIGZvciB0aGUgNiBieXRlcyBpcyBnZW5lcmF0ZWQgKGJ1dCBiZWZvcmUgdGhlIHZhbHVlIGlzCisgKiBjb21wbGVtZW50ZWQpLCB3ZSBtdXN0IHRoZW4gdHJhbnNwb3NlIHRoZSB2YWx1ZSBhbmQgcmV0dXJuIGJpdHMgMzAtMjMuCiAgKi8KLXN0YXRpYyB1MzIgc3hnX2NyY190YWJsZVsyNTZdOwkvKiBUYWJsZSBvZiBDUkMncyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHN4Z19jcmNfdGFibGVbMjU2XTsvKiBUYWJsZSBvZiBDUkMncyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHN4Z19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgKi8KIAotLyoKLSAqICBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUKLSAqLworLyogQ29udHJ1Y3QgdGhlIENSQzMyIHRhYmxlICovCiBzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKQogewotCXUzMiBjOwkJCS8qICBDUkMgc2hpdCByZWcgICAgICAgICAgICAgICAgICovCi0JdTMyIGUgPSAwOwkJLyogIFBvbHkgWC1vciBwYXR0ZXJuICAgICAgICAgICAgKi8KLQlpbnQgaTsJCQkvKiAgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAqLworCXUzMiBjOwkJCS8qICBDUkMgc2hpdCByZWcgKi8KKwl1MzIgZSA9IDA7CQkvKiAgUG9seSBYLW9yIHBhdHRlcm4gKi8KKwlpbnQgaTsJCQkvKiAgY291bnRlciAqLwogCWludCBrOwkJCS8qICBieXRlIGJlaW5nIHNoaWZ0ZWQgaW50byBjcmMgICovCiAKIAlzdGF0aWMgaW50IHBbXSA9IHsgMCwgMSwgMiwgNCwgNSwgNywgOCwgMTAsIDExLCAxMiwgMTYsIDIyLCAyMywgMjYgfTsKQEAgLTI3MDUsOCArMzQ3Miw2IEBACiAJfQogfQogCi0jaWYgWFhYVE9ETwotc3RhdGljIHUzMiBzeGdfY3JjX2luaXQ7CS8qIElzIHRhYmxlIGluaXRpYWxpemVkICovCiAvKgogICogIFJldHVybiB0aGUgTUFDIGhhc3QgYXMgZGVzY3JpYmVkIGFib3ZlLgogICovCkBAIC0yNzM3LDI1ICszNTAyLDMxIEBACiAKIHN0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCXN0cnVjdCBTWEdfVUNPREVfUkVHUyAqc3hnX3JlZ3MgPSBhZGFwdGVyLT5VY29kZVJlZ3M7CisJc3RydWN0IHN4Z191Y29kZV9yZWdzICpzeGdfcmVncyA9IGFkYXB0ZXItPlVjb2RlUmVnczsKIAotCURCR19FUlJPUigiJXMgRU5URVIgKCVzKSBtYWNvcHRzWyV4XSBtYXNrWyVsbHhdXG4iLCBfX2Z1bmNfXywKKwlEQkdfRVJST1IoIiVzIEVOVEVSICglcykgTWFjRmlsdGVyWyV4XSBtYXNrWyVsbHhdXG4iLCBfX0ZVTkNUSU9OX18sCiAJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCAodW5zaWduZWQgaW50KWFkYXB0ZXItPk1hY0ZpbHRlciwKIAkJICBhZGFwdGVyLT5NdWx0aWNhc3RNYXNrKTsKIAogCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7Ci0JCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IgcHJvbWlzY3VvdXMKLQkJICogbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUgTWljcm9jb2RlIGZyb20gaGF2aW5nCi0JCSAqIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQyBjb25maWd1cmF0aW9uLgorCQkvKgorCQkgKiBUdXJuIG9uIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBXZSBoYXZlIHRvIGRvIHRoaXMgZm9yCisJCSAqIHByb21pc2N1b3VzIG1vZGUgYXMgd2VsbCBhcyBBTExNQ0FTVCBtb2RlLiAgSXQgc2F2ZXMgdGhlCisJCSAqIE1pY3JvY29kZSBmcm9tIGhhdmluZyBrZWVwIHN0YXRlIGFib3V0IHRoZSBNQUMgY29uZmlndXJhdGlvbgogCQkgKi8KLS8qICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgbWFjb3B0cyA9IE1BQ19BTExNQ0FTVCB8IE1BQ19QUk9NSVNDXG4gICAgICBTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOyAqLworCQkvKiBEQkdfRVJST1IoInN4ZzogJXMgTWFjRmlsdGVyID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcbiBcCisJCSAqIAkJCQlTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOworCQkgKi8KIAkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdExvdywgMHhGRkZGRkZGRiwgRkxVU0gpOwogCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0SGlnaCwgMHhGRkZGRkZGRiwgRkxVU0gpOwotLyogICAgICAgIERCR19FUlJPUigiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIDB4RkZGRkZGRkZcbiIsX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7ICovCisJCS8qIERCR19FUlJPUigiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIFwKKwkJICogMHhGRkZGRkZGRlxuIixfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJICovCiAKIAl9IGVsc2UgewotCQkvKiBDb21taXQgb3VyIG11bHRpY2FzdCBtYXN0IHRvIHRoZSBTTElDIGJ5IHdyaXRpbmcgdG8gdGhlIG11bHRpY2FzdAotCQkgKiBhZGRyZXNzIG1hc2sgcmVnaXN0ZXJzCisJCS8qCisJCSAqIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUKKwkJICogbXVsdGljYXN0IGFkZHJlc3MgbWFzayByZWdpc3RlcnMKIAkJICovCiAJCURCR19FUlJPUigiJXMgKCVzKSBXUklURSBtY2FzdGxvd1slbHhdIG1jYXN0aGlnaFslbHhdXG4iLAogCQkJICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLApAQCAtMjc3MSwzOCArMzU0Miw2IEBACiAJfQogfQogCi0vKgotICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCi0gKiAgTGluayBpdCBpbi4KLSAqLwotc3RhdGljIGludCBzeGdfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgY2hhciAqYWRkcmVzcykKLXsKLQlwX21jYXN0X2FkZHJlc3NfdCBtY2FkZHIsIG1saXN0OwotCWJvb2wgZXF1YWxhZGRyOwotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCi0JbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwotCXdoaWxlIChtbGlzdCkgewotCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOwotCQlpZiAoZXF1YWxhZGRyKSB7Ci0JCQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKLQkJfQotCQltbGlzdCA9IG1saXN0LT5uZXh0OwotCX0KLQotCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KLQltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihtY2FzdF9hZGRyZXNzX3QpLCBHRlBfQVRPTUlDKTsKLQlpZiAobWNhZGRyID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7Ci0KLQltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwotCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7Ci0KLQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKLX0KLQogc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgY2hhciAqYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBjaGFyIGNyY3BvbHk7CkBAIC0yODEwLDcgKzM1NDksOCBAQAogCS8qIEdldCB0aGUgQ1JDIHBvbHlub21pYWwgZm9yIHRoZSBtYWMgYWRkcmVzcyAqLwogCWNyY3BvbHkgPSBzeGdfbWNhc3RfZ2V0X21hY19oYXNoKGFkZHJlc3MpOwogCi0JLyogV2Ugb25seSBoYXZlIHNwYWNlIG9uIHRoZSBTTElDIGZvciA2NCBlbnRyaWVzLiAgTG9wCisJLyoKKwkgKiBXZSBvbmx5IGhhdmUgc3BhY2Ugb24gdGhlIFNMSUMgZm9yIDY0IGVudHJpZXMuICBMb3AKIAkgKiBvZmYgdGhlIHRvcCB0d28gYml0cy4gKDJeNiA9IDY0KQogCSAqLwogCWNyY3BvbHkgJj0gMHgzRjsKQEAgLTI4MTksNzYgKzM1NTksMTE5IEBACiAJYWRhcHRlci0+TXVsdGljYXN0TWFzayB8PSAodTY0KSAxIDw8IGNyY3BvbHk7CiB9CiAKLXN0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChwX25ldF9kZXZpY2UgZGV2KQorLyoKKyAqICAgRnVuY3Rpb24gdGFrZXMgTUFDIGFkZHJlc3NlcyBmcm9tIGRldl9tY19saXN0IGFuZCBnZW5lcmF0ZXMgdGhlIE1hc2sKKyAqLworCitzdGF0aWMgdm9pZCBzeGdfc2V0X21jYXN0X2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKyAgICAgICAgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisgICAgICAgIGludCBpOworCisgICAgICAgIGlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX01DQVNUKSkgeworICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN4Z19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsbWNsaXN0LT5kYV9hZGRyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3hnX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7Ci0JaW50IGk7Ci0JY2hhciAqYWRkcmVzc2VzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKLQlpbnQgbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OwogCiAJQVNTRVJUKGFkYXB0ZXIpOworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCWFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfUFJPTUlTQzsKKyAgICAgICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKQorICAgICAgICAgICAgICAgIGFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfTUNBU1Q7CisgICAgICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorICAgICAgICAgICAgICAgIGFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfQUxMTUNBU1Q7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IG1jX2NvdW50OyBpKyspIHsKLQkJYWRkcmVzc2VzID0gKGNoYXIgKikmbWNfbGlzdC0+ZG1pX2FkZHI7Ci0JCWlmIChtY19saXN0LT5kbWlfYWRkcmxlbiA9PSA2KSB7Ci0JCQlzdGF0dXMgPSBzeGdfbWNhc3RfYWRkX2xpc3QoYWRhcHRlciwgYWRkcmVzc2VzKTsKLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlzeGdfbWNhc3Rfc2V0X2JpdChhZGFwdGVyLCBhZGRyZXNzZXMpOwotCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKLQl9Ci0KLQlEQkdfRVJST1IoIiVzIGEtPmRldmZsYWdzX3ByZXZbJXhdIGRldi0+ZmxhZ3NbJXhdIHN0YXR1c1sleF1cbiIsCi0JCSAgX19mdW5jX18sIGFkYXB0ZXItPmRldmZsYWdzX3ByZXYsIGRldi0+ZmxhZ3MsIHN0YXR1cyk7Ci0JaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgewotCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOwotCQlpZiAoZGV2LT5mbGFncykgewotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSB7Ci0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7Ci0JCQl9Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKLQkJCX0KLQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7Ci0JCQl9Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKLQkJCX0KLQkJfQotCQlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKLQkJREJHX0VSUk9SKCIlcyBjYWxsIHN4Z19jb25maWdfc2V0IGFkYXB0ZXItPm1hY29wdHNbJXhdXG4iLAotCQkJICBfX2Z1bmNfXywgYWRhcHRlci0+bWFjb3B0cyk7Ci0JCXN4Z19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOwotCX0gZWxzZSB7Ci0JCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXN4Z19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKLQkJfQotCX0KLQlyZXR1cm47CisJLy9YWFggaGFuZGxlIG90aGVyIGZsYWdzIGFzIHdlbGwKKwlzeGdfc2V0X21jYXN0X2FkZHIoYWRhcHRlcik7CiB9Ci0jZW5kaWYKIAotc3RhdGljIHZvaWQgc3hnX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3ZvaWQgc3hnX2ZyZWVfc2dsX2J1ZmZlcnMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLSNpZiBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwotLyogICAgICBpZiAoYWRhcHRlci0+UmVncykgeyAqLwotLyogICAgICAgICAgICAgIGlvdW5tYXAoYWRhcHRlci0+UmVncyk7ICovCi0vKiAgICAgIH0gKi8KLS8qICAgICAgYWRhcHRlci0+c2xpY19yZWdzID0gTlVMTDsgKi8KLSNlbmRpZgorICAgICAgICBzdHJ1Y3QgbGlzdF9lbnRyeSAgICAgICAgICAgICAgICpwbGU7CisgICAgICAgIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgICAgICAgKlNnbDsKKworICAgICAgICB3aGlsZSghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKSkpIHsKKyAJCXBsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKyAJCVNnbCA9IGNvbnRhaW5lcl9vZihwbGUsIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIsIEFsbExpc3QpOworIAkJa2ZyZWUoU2dsKTsKKyAgICAgICAgICAgICAgICBhZGFwdGVyLT5BbGxTZ2xCdWZmZXJDb3VudC0tOworICAgICAgICB9CiB9CiAKLSNpZiBYWFhUT0RPCit2b2lkIHN4Z19mcmVlX3JjdmJsb2NrcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCXUzMgkJCQlpOworICAgICAgIAl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0ZW1wX1JjdkJsb2NrOworICAgICAgIAlzdHJ1Y3QgbGlzdF9lbnRyeSAgICAgICAgICAgICAgICpwbGU7CisgICAgICAgCXN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciAgICAgICAgKlJjdkJsb2NrSGRyOworCXN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkcgkqUmN2RGF0YUJ1ZmZlckhkcjsKKyAgICAgICAgQVNTRVJUKChhZGFwdGVyLT5zdGF0ZSA9PSBTWEdfU1RBVEVfSU5JVElBTElaSU5HKSB8fAorICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+c3RhdGUgPT0gU1hHX1NUQVRFX0hBTFRJTkcpKTsKKyAgICAgICAgd2hpbGUoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKSkpIHsKKworICAgICAgICAgICAgICAgICBwbGUgPSBSZW1vdmVIZWFkTGlzdCgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKTsKKyAgICAgICAgICAgICAgICAgUmN2QmxvY2tIZHIgPSBjb250YWluZXJfb2YocGxlLCBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIsIEFsbExpc3QpOworCisgICAgICAgICAgICAgICAgaWYoUmN2QmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX1JjdkJsb2NrID0gUmN2QmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrLCB0ZW1wX1JjdkJsb2NrICs9IFNYR19SQ1ZfREFUQV9IRFJfU0laRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSY3ZEYXRhQnVmZmVySGRyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopdGVtcF9SY3ZCbG9jazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1hHX0ZSRUVfUkNWX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1hHX1JDVl9CTE9DS19TSVpFKFNYR19SQ1ZfREFUQV9IRFJfU0laRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJjdkJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmN2QmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudC0tOworCX0KKwlBU1NFUlQoYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCA9PSAwKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRnJSQmxrIiwKKwkJCWFkYXB0ZXIsIDAsIDAsIDApOworfQordm9pZCBzeGdfZnJlZV9tY2FzdF9hZGRycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCXN0cnVjdCBzeGdfbXVsdGljYXN0X2FkZHJlc3MgICAgKmFkZHJlc3M7CisgICAgICAgIHdoaWxlKGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzKSB7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzOworICAgICAgICAgICAgICAgIGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzID0gYWRkcmVzcy0+TmV4dDsKKwkJa2ZyZWUoYWRkcmVzcyk7CisgICAgICAgICB9CisKKyAgICAgICAgYWRhcHRlci0+TXVsdGljYXN0TWFzaz0gMDsKK30KKwordm9pZCBzeGdfdW5tYXBfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaWYoYWRhcHRlci0+SHdSZWdzKSB7CisgICAgICAgIAlpb3VubWFwKCh2b2lkICopYWRhcHRlci0+SHdSZWdzKTsKKyAgICAgICAgIH0KKyAgICAgICAgaWYoYWRhcHRlci0+VWNvZGVSZWdzKSB7CisJCWlvdW5tYXAoKHZvaWQgKilhZGFwdGVyLT5VY29kZVJlZ3MpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPT0gMCk7CisgICAgICAgIFNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGclJCbGsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlciwgMCwgMCwgMCk7Cit9CisKKworCiAvKgotICogU3hnRnJlZVJlc291cmNlcyAtIEZyZWUgZXZlcnl0aGluZyBhbGxvY2F0ZWQgaW4gU3hnQWxsb2NhdGVSZXNvdXJjZXMKKyAqIHN4Z19mcmVlX3Jlc291cmNlcyAtIEZyZWUgZXZlcnl0aGluZyBhbGxvY2F0ZWQgaW4gU3hnQWxsb2NhdGVSZXNvdXJjZXMKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCkBAIC0yODk2LDk0ICszNjc5LDc2IEBACiAgKiBSZXR1cm4KICAqCW5vbmUKICAqLwotdm9pZCBTeGdGcmVlUmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit2b2lkIHN4Z19mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewogCXUzMiBSc3NJZHMsIElzckNvdW50OwotCVBUQ1BfT0JKRUNUIFRjcE9iamVjdDsKLQl1MzIgaTsKLQlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOwotCi0JU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRnJlZVJlcyIsCi0JCSAgYWRhcHRlciwgYWRhcHRlci0+TWF4VGNicywgMCwgMCk7Ci0KIAlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKLQlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOwogCiAJaWYgKGFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPT0gRkFMU0UpIHsKLQkJLyogTm8gYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIG1hZGUsIGluY2x1ZGluZyBzcGlubG9ja3MsICovCi0JCS8qIG9yIGxpc3RoZWFkIGluaXRpYWxpemF0aW9ucy4gIFJldHVybi4gKi8KKwkJLyoKKwkJICogTm8gYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIG1hZGUsIGluY2x1ZGluZyBzcGlubG9ja3MsCisJCSAqIG9yIGxpc3RoZWFkIGluaXRpYWxpemF0aW9ucy4gIFJldHVybi4KKwkJICovCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKSkpIHsKLQkJU3hnRnJlZVJjdkJsb2NrcyhhZGFwdGVyKTsKKwkJc3hnX2ZyZWVfcmN2YmxvY2tzKGFkYXB0ZXIpOwogCX0KIAlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsU2dsQnVmZmVycykpKSB7Ci0JCVN4Z0ZyZWVTZ2xCdWZmZXJzKGFkYXB0ZXIpOworCQlzeGdfZnJlZV9zZ2xfYnVmZmVycyhhZGFwdGVyKTsKIAl9Ci0JLyogRnJlZSBldmVudCBxdWV1ZXMuICovCi0JaWYgKGFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgU1hHX0VWRU5UX1JJTkcpICogUnNzSWRzLAotCQkJCSAgICBhZGFwdGVyLT5FdmVudFJpbmdzLCBhZGFwdGVyLT5QRXZlbnRSaW5ncyk7Ci0JfQotCWlmIChhZGFwdGVyLT5Jc3IpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJICAgIHNpemVvZih1MzIpICogSXNyQ291bnQsCi0JCQkJICAgIGFkYXB0ZXItPklzciwgYWRhcHRlci0+UElzcik7Ci0JfQorCiAJaWYgKGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCiAJCQkJICAgIHNpemVvZih1MzIpLAogCQkJCSAgICBhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4LAogCQkJCSAgICBhZGFwdGVyLT5QWG10UmluZ1plcm9JbmRleCk7CiAJfQotCWlmIChhZGFwdGVyLT5JbmRpcmVjdGlvblRhYmxlKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAotCQkJCSAgICBTWEdfTUFYX1JTU19UQUJMRV9TSVpFLAotCQkJCSAgICBhZGFwdGVyLT5JbmRpcmVjdGlvblRhYmxlLAotCQkJCSAgICBhZGFwdGVyLT5QSW5kaXJlY3Rpb25UYWJsZSk7CisgICAgICAgIGlmIChhZGFwdGVyLT5Jc3IpIHsKKyAgICAgICAgICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1MzIpICogSXNyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5Jc3IsIGFkYXB0ZXItPlBJc3IpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKKyAgICAgICAgICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcpICogUnNzSWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+RXZlbnRSaW5ncywgYWRhcHRlci0+UEV2ZW50UmluZ3MpOworICAgICAgICB9CisgICAgICAgIGlmIChhZGFwdGVyLT5SY3ZSaW5ncykgeworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN4Z19yY3ZfcmluZykgKiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5SY3ZSaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+UFJjdlJpbmdzKTsKKyAgICAgICAgICAgICAgICBhZGFwdGVyLT5SY3ZSaW5ncyA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZihhZGFwdGVyLT5YbXRSaW5ncykgeworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN4Z194bXRfcmluZykgKiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5YbXRSaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+UFhtdFJpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPlhtdFJpbmdzID0gTlVMTDsKKyAgICAgICAgfQorCisJaWYgKGFkYXB0ZXItPnVjb2RlX3N0YXRzKSB7CisJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LAorCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSwKKwkJCQkgYWRhcHRlci0+cHVjb2RlX3N0YXRzLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlhZGFwdGVyLT51Y29kZV9zdGF0cyA9IE5VTEw7CiAJfQogCi0JU1hHX0ZSRUVfUEFDS0VUX1BPT0woYWRhcHRlci0+UGFja2V0UG9vbEhhbmRsZSk7Ci0JU1hHX0ZSRUVfQlVGRkVSX1BPT0woYWRhcHRlci0+QnVmZmVyUG9vbEhhbmRsZSk7CiAKIAkvKiBVbm1hcCByZWdpc3RlciBzcGFjZXMgKi8KLQlTeGdVbm1hcFJlc291cmNlcyhhZGFwdGVyKTsKKwlzeGdfdW5tYXBfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCi0JLyogRGVyZWdpc3RlciBETUEgKi8KLQlpZiAoYWRhcHRlci0+RG1hSGFuZGxlKSB7Ci0JCVNYR19ERVJFR0lTVEVSX0RNQShhZGFwdGVyLT5EbWFIYW5kbGUpOwotCX0KLQkvKiBEZXJlZ2lzdGVyIGludGVycnVwdCAqLwotCVN4Z0RlcmVnaXN0ZXJJbnRlcnJ1cHQoYWRhcHRlcik7Ci0KLQkvKiBQb3NzaWJseSBmcmVlIHN5c3RlbSBpbmZvICg1LjIgb25seSkgKi8KLQlTWEdfUkVMRUFTRV9TWVNURU1fSU5GTyhhZGFwdGVyKTsKLQotCVN4Z0RpYWdGcmVlUmVzb3VyY2VzKGFkYXB0ZXIpOwotCi0JU3hnRnJlZU1DYXN0QWRkcnMoYWRhcHRlcik7Ci0KLQlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5SZXNldFRpbWVyKSkgewotCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJlc2V0VGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKLQkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lcik7Ci0JfQotCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJzc1RpbWVyKSkgewotCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyLCBUaW1lckNhbmNlbGxlZCk7Ci0JCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyKTsKLQl9Ci0JaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+T2ZmbG9hZFRpbWVyKSkgewotCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lciwgVGltZXJDYW5jZWxsZWQpOwotCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5PZmZsb2FkVGltZXIpOwotCX0KKwlzeGdfZnJlZV9tY2FzdF9hZGRycyhhZGFwdGVyKTsKIAogCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBGQUxTRTsKIAotCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGcmVlUmVzIiwKLQkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKIH0KLSNlbmRpZgogCiAvKgogICogc3hnX2FsbG9jYXRlX2NvbXBsZXRlIC0KQEAgLTMwMDAsMzEgKzM3NjUsMzQgQEAKICAqIFJldHVybgogICoJTm9uZS4KICAqLwotc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJCSAgdm9pZCAqVmlydHVhbEFkZHJlc3MsCiAJCQkJICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKLQkJCQkgIHUzMiBMZW5ndGgsIGVudW0gU1hHX0JVRkZFUl9UWVBFIENvbnRleHQpCisJCQkJICB1MzIgTGVuZ3RoLCBlbnVtIHN4Z19idWZmZXJfdHlwZSBDb250ZXh0KQogeworCWludCBzdGF0dXMgPSAwOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsbG9jQ21wIiwKIAkJICBhZGFwdGVyLCBWaXJ0dWFsQWRkcmVzcywgTGVuZ3RoLCBDb250ZXh0KTsKLQlBU1NFUlQoYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nKTsKLQktLWFkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZzsKKwlBU1NFUlQoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMpKTsKKwlhdG9taWNfZGVjKCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zKTsKIAogCXN3aXRjaCAoQ29udGV4dCkgewogCiAJY2FzZSBTWEdfQlVGRkVSX1RZUEVfUkNWOgotCQlzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoYWRhcHRlciwKKwkJc3RhdHVzID0gc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKGFkYXB0ZXIsCiAJCQkJCSAgICAgICBWaXJ0dWFsQWRkcmVzcywKIAkJCQkJICAgICAgIFBoeXNpY2FsQWRkcmVzcywgTGVuZ3RoKTsKIAkJYnJlYWs7CiAJY2FzZSBTWEdfQlVGRkVSX1RZUEVfU0dMOgotCQlzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShhZGFwdGVyLCAoc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiopCisJCXN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKGFkYXB0ZXIsIChzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICopCiAJCQkJCQkgVmlydHVhbEFkZHJlc3MsCiAJCQkJCQkgUGh5c2ljYWxBZGRyZXNzLCBMZW5ndGgpOwogCQlicmVhazsKIAl9CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsb2NDbXAiLAogCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKQEAgLTMwNDAsNyArMzgwOCw3IEBACiAgKglpbnQKICAqLwogc3RhdGljIGludCBzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAotCQkJCSAgICAgIHUzMiBTaXplLCBlbnVtIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKQorCQkJCSAgICAgIHUzMiBTaXplLCBlbnVtIHN4Z19idWZmZXJfdHlwZSBCdWZmZXJUeXBlKQogewogCWludCBzdGF0dXM7CiAJdm9pZCAqQnVmZmVyOwpAQCAtMzA0OCwzOSArMzgxNiw0MCBAQAogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NNZW0iLAogCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOwotCS8qIEdyYWIgdGhlIGFkYXB0ZXIgbG9jayBhbmQgY2hlY2sgdGhlIHN0YXRlLiAqLwotCS8qIElmIHdlJ3JlIGluIGFueXRoaW5nIG90aGVyIHRoYW4gSU5JVElBTElaSU5HIG9yICovCi0JLyogUlVOTklORyBzdGF0ZSwgZmFpbC4gIFRoaXMgaXMgdG8gcHJldmVudCAqLwotCS8qIGFsbG9jYXRpb25zIGluIGFuIGltcHJvcGVyIGRyaXZlciBzdGF0ZSAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCS8qCisJICogR3JhYiB0aGUgYWRhcHRlciBsb2NrIGFuZCBjaGVjayB0aGUgc3RhdGUuIElmIHdlJ3JlIGluIGFueXRoaW5nIG90aGVyCisJICogdGhhbiBJTklUSUFMSVpJTkcgb3IgUlVOTklORyBzdGF0ZSwgZmFpbC4gIFRoaXMgaXMgdG8gcHJldmVudAorCSAqIGFsbG9jYXRpb25zIGluIGFuIGltcHJvcGVyIGRyaXZlciBzdGF0ZQorCSAqLwogCi0JLyogSW5jcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZyAqLwotCS8qIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcyAqLwotCSsrYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisgCWF0b21pY19pbmMoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMpOwogCi0JLyogQXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbGxvY2F0ZSByZXNvdXJjZXMgc3luY2hyb25vdXNseS4gKi8KLQlCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFNpemUsICZwQnVmZmVyKTsKKwlpZihCdWZmZXJUeXBlICE9IFNYR19CVUZGRVJfVFlQRV9TR0wpCisJCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgU2l6ZSwgJnBCdWZmZXIpOworCWVsc2UgeworCQlCdWZmZXIgPSBremFsbG9jKFNpemUsIEdGUF9BVE9NSUMpOworCQlwQnVmZmVyID0gKGRtYV9hZGRyX3QpTlVMTDsKKwl9CiAJaWYgKEJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOwotCQkvKiBEZWNyZW1lbnQgdGhlIEFsbG9jYXRpb25zUGVuZGluZyBjb3VudCB3aGlsZSBob2xkaW5nICovCi0JCS8qIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcyAqLwotCQktLWFkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZzsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJLyoKKwkJICogRGVjcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZworCQkgKiB0aGUgbG9jay4gIFBhdXNlIHByb2Nlc3NpbmcgcmVsaWVzIG9uIHRoaXMKKwkJICovCisgCQlhdG9taWNfZGVjKCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zKTsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxjTWVtRjEiLAogCQkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCAwKTsKIAkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKIAl9Ci0Jc3hnX2FsbG9jYXRlX2NvbXBsZXRlKGFkYXB0ZXIsIEJ1ZmZlciwgcEJ1ZmZlciwgU2l6ZSwgQnVmZmVyVHlwZSk7Ci0Jc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJc3RhdHVzID0gc3hnX2FsbG9jYXRlX2NvbXBsZXRlKGFkYXB0ZXIsIEJ1ZmZlciwgcEJ1ZmZlciwgU2l6ZSwgQnVmZmVyVHlwZSk7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxvY01lbSIsCiAJCSAgYWRhcHRlciwgU2l6ZSwgQnVmZmVyVHlwZSwgc3RhdHVzKTsKLQlyZXR1cm4gKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKLSAqIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZSAtIENvbXBsZXRlIGEgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGFsbG9jYXRpb24KKyAqIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZSAtIENvbXBsZXRlIGEgcmVjZWl2ZSBkZXNjcmlwdG9yCisgKiAJCQkJCWJsb2NrIGFsbG9jYXRpb24KICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKQEAgLTMwODksOSArMzg1OCw4IEBACiAgKglMZW5ndGgJCQkJLSBNZW1vcnkgbGVuZ3RoCiAgKgogICogUmV0dXJuCi0gKgogICovCi1zdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJCSAgIHZvaWQgKlJjdkJsb2NrLAogCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKIAkJCQkJICAgdTMyIExlbmd0aCkKQEAgLTMwOTksMTEgKzM4NjcsMTEgQEAKIAl1MzIgaTsKIAl1MzIgQnVmZmVyU2l6ZSA9IGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplOwogCXU2NCBQYWRkcjsKLQlzdHJ1Y3QgU1hHX1JDVl9CTE9DS19IRFIgKlJjdkJsb2NrSGRyOwotCXVuc2lnbmVkIGNoYXIgKlJjdkRhdGFCdWZmZXI7Ci0Jc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSICpSY3ZEYXRhQnVmZmVySGRyOwotCXN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgKlJjdkRlc2NyaXB0b3JCbG9jazsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCXZvaWQgKnRlbXBfUmN2QmxvY2s7CisJc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICpSY3ZCbG9ja0hkcjsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKlJjdkRhdGFCdWZmZXJIZHI7CisJc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAqUmN2RGVzY3JpcHRvckJsb2NrOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFJjdkJsayIsCiAJCSAgYWRhcHRlciwgUmN2QmxvY2ssIExlbmd0aCwgMCk7CkBAIC0zMTEzLDQyICszODgxLDMzIEBACiAJbWVtc2V0KFJjdkJsb2NrLCAwLCBMZW5ndGgpOwogCUFTU0VSVCgoQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8CiAJICAgICAgIChCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKLQlBU1NFUlQoTGVuZ3RoID09IFNYR19SQ1ZfQkxPQ0tfU0laRShCdWZmZXJTaXplKSk7Ci0JLyogRmlyc3QsIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lZCBwb29sIG9mIHJlY2VpdmUgZGF0YSAqLwotCS8qIGJ1ZmZlcnMuICBUaGlzIGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIE5CTC9OQi9NREwgYWxsb2NhdGlvbnMsICovCi0JLyogSWYgYW55IG9mIHRoZW0gZmFpbCwgZnJlZSB0aGUgYmxvY2sgYW5kIHJldHVybiB3aXRob3V0ICovCi0JLyogcXVldWVpbmcgdGhlIHNoYXJlZCBtZW1vcnkgKi8KLQlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7Ci0jaWYgMAotCWZvciAoaSA9IDAsIFBhZGRyID0gKlBoeXNpY2FsQWRkcmVzczsKLQkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKLQkgICAgIGkrKywgUGFkZHIuTG93UGFydCArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpCi0jZW5kaWYKLQkJZm9yIChpID0gMCwgUGFkZHIgPSBQaHlzaWNhbEFkZHJlc3M7Ci0JCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOwotCQkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7Ci0JCQkvKiAqLwotCQkJUmN2RGF0YUJ1ZmZlckhkciA9Ci0JCQkgICAgKHN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiopIChSY3ZEYXRhQnVmZmVyICsKLQkJCQkJCQlTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKLQkJCQkJCQkoQnVmZmVyU2l6ZSkpOwotCQkJUmN2RGF0YUJ1ZmZlckhkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZEYXRhQnVmZmVyOwotCQkJUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzID0gUGFkZHI7Ci0JCQlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CS8qIEZvciBGUkVFIG1hY3JvIGFzc2VydGlvbiAqLwotCQkJUmN2RGF0YUJ1ZmZlckhkci0+U2l6ZSA9Ci0JCQkgICAgU1hHX1JDVl9CVUZGRVJfREFUQV9TSVpFKEJ1ZmZlclNpemUpOworCUFTU0VSVChMZW5ndGggPT0gU1hHX1JDVl9CTE9DS19TSVpFKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOworCS8qCisJICogRmlyc3QsIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lZCBwb29sIG9mIHJlY2VpdmUgZGF0YSBidWZmZXJzLgorCSAqIFRoaXMgaW5pdGlhbGl6YXRpb24gcmVxdWlyZXMgTkJML05CL01ETCBhbGxvY2F0aW9ucywgaWYgYW55IG9mIHRoZW0KKwkgKiBmYWlsLCBmcmVlIHRoZSBibG9jayBhbmQgcmV0dXJuIHdpdGhvdXQgcXVldWVpbmcgdGhlIHNoYXJlZCBtZW1vcnkKKwkgKi8KKwkvL1JjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwl0ZW1wX1JjdkJsb2NrID0gUmN2QmxvY2s7CisJZm9yIChpID0gMDsgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCQkgaSsrLCB0ZW1wX1JjdkJsb2NrICs9IFNYR19SQ1ZfREFUQV9IRFJfU0laRSkgeworCQlSY3ZEYXRhQnVmZmVySGRyID0gKHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqKQorCQkJCQl0ZW1wX1JjdkJsb2NrOworCQkvKiBGb3IgRlJFRSBtYWNybyBhc3NlcnRpb24gKi8KKwkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX1VQU1RSRUFNOworCQlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLCBCdWZmZXJTaXplKTsKKwkJaWYgKFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQgPT0gTlVMTCkKKwkJCWdvdG8gZmFpbDsKIAotCQkJU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7Ci0JCQlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9PSBOVUxMKQotCQkJCWdvdG8gZmFpbDsKKwl9CiAKLQkJfQorCS8qCisJICogUGxhY2UgdGhpcyBlbnRpcmUgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBBbGxSY3ZCbG9ja3MgcXVldWUgc28gaXQKKwkgKiBjYW4gYmUgZnJlZSBsYXRlcgorCSAqLwogCi0JLyogUGxhY2UgdGhpcyBlbnRpcmUgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBBbGxSY3ZCbG9ja3MgcXVldWUgc28gaXQgY2FuIGJlICovCi0JLyogZnJlZSBsYXRlciAqLwotCVJjdkJsb2NrSGRyID0KLQkgICAgKHN0cnVjdCBTWEdfUkNWX0JMT0NLX0hEUiopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKLQkJCQkgIFNYR19SQ1ZfQkxPQ0tfSERSX09GRlNFVChCdWZmZXJTaXplKSk7CisJUmN2QmxvY2tIZHIgPSAoc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKKwkJCVNYR19SQ1ZfQkxPQ0tfSERSX09GRlNFVChTWEdfUkNWX0RBVEFfSERSX1NJWkUpKTsKIAlSY3ZCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZCbG9jazsKIAlSY3ZCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOwogCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwpAQCAtMzE1NiwxNCArMzkxNSwxNSBAQAogCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MsICZSY3ZCbG9ja0hkci0+QWxsTGlzdCk7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKIAotCS8qIE5vdyBmcmVlIHRoZSBjb250YWluZWQgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgdGhhdCB3ZSBpbml0aWFsaXplZCBhYm92ZSAqLwotCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwkvKiBOb3cgZnJlZSB0aGUgY29udGFpbmVkIHJlY2VpdmUgZGF0YSBidWZmZXJzIHRoYXQgd2UKKwkgKiBpbml0aWFsaXplZCBhYm92ZSAqLworCXRlbXBfUmN2QmxvY2sgPSBSY3ZCbG9jazsKIAlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKIAkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKLQkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7Ci0JCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKikgKFJjdkRhdGFCdWZmZXIgKwotCQkJCQkJCSAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKLQkJCQkJCQkgICAgICAgKEJ1ZmZlclNpemUpKTsKKwkgICAgIGkrKywgUGFkZHIgKz0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFLAorCSAgICAgdGVtcF9SY3ZCbG9jayArPSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpIHsKKwkJUmN2RGF0YUJ1ZmZlckhkciA9CisJCQkoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopdGVtcF9SY3ZCbG9jazsKIAkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CiAJCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKIAkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKQEAgLTMxNzEsMTMgKzM5MzEsMTMgQEAKIAogCS8qIExvY2F0ZSB0aGUgZGVzY3JpcHRvciBibG9jayBhbmQgcHV0IGl0IG9uIGEgc2VwYXJhdGUgZnJlZSBxdWV1ZSAqLwogCVJjdkRlc2NyaXB0b3JCbG9jayA9Ci0JICAgIChzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCSAgICAoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAqKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCiAJCQkJCSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUCi0JCQkJCSAoQnVmZmVyU2l6ZSkpOworCQkJCQkgKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOwogCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9Ci0JICAgIChzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKKwkgICAgKHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKIAkJCQkJICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSX09GRlNFVAotCQkJCQkgICAgIChCdWZmZXJTaXplKSk7CisJCQkJCSAgICAgKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOwogCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZEZXNjcmlwdG9yQmxvY2s7CiAJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQYWRkcjsKIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKQEAgLTMxODUsMTcgKzM5NDUsMTUgQEAKIAlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFJCbGsiLAogCQkgIGFkYXB0ZXIsIFJjdkJsb2NrLCBMZW5ndGgsIDApOwotCXJldHVybjsKLSAgICAgIGZhaWw6CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworZmFpbDoKIAkvKiBGcmVlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCiAJaWYgKFJjdkJsb2NrKSB7Ci0JCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwkJdGVtcF9SY3ZCbG9jayA9IFJjdkJsb2NrOwogCQlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7Ci0JCSAgICAgaSsrLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKKwkJICAgICBpKyssIHRlbXBfUmN2QmxvY2sgKz0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSB7CiAJCQlSY3ZEYXRhQnVmZmVySGRyID0KLQkJCSAgICAoc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKikgKFJjdkRhdGFCdWZmZXIgKwotCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAotCQkJCQkJCShCdWZmZXJTaXplKSk7CisJCQkgICAgKHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqKXRlbXBfUmN2QmxvY2s7CiAJCQlTWEdfRlJFRV9SQ1ZfUEFDS0VUKFJjdkRhdGFCdWZmZXJIZHIpOwogCQl9CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LApAQCAtMzIwNiw2ICszOTY0LDEwIEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LAogCQkgIGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKIAlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworCS8qIEFzIGFsbG9jYXRpb24gZmFpbGVkLCBmcmVlIGFsbCBwcmV2aW91c2x5IGFsbG9jYXRlZCBibG9ja3MuLiovCisJLy9zeGdfZnJlZV9yY3ZibG9ja3MoYWRhcHRlcik7CisKKwlyZXR1cm4gU1RBVFVTX1JFU09VUkNFUzsKIH0KIAogLyoKQEAgLTMyMTMsNDYgKzM5NzUsNjUgQEAKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKLSAqCVN4Z1NnbAkJCQktIFNYR19TQ0FUVEVSX0dBVEhFUiBidWZmZXIKKyAqCVN4Z1NnbAkJCQktIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgYnVmZmVyCiAgKglQaHlzaWNhbEFkZHJlc3MJCS0gUGh5c2ljYWwgYWRkcmVzcwogICoJTGVuZ3RoCQkJCS0gTWVtb3J5IGxlbmd0aAogICoKICAqIFJldHVybgotICoKICAqLwogc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKLQkJCQkJICAgICBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wsCisJCQkJCSAgICAgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsLAogCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAogCQkJCQkgICAgIHUzMiBMZW5ndGgpCiB7CisJdW5zaWduZWQgbG9uZyBzZ2xfZmxhZ3M7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxTZ2xDbXAiLAogCQkgIGFkYXB0ZXIsIFN4Z1NnbCwgTGVuZ3RoLCAwKTsKLQlzcGluX2xvY2soJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CiAJYWRhcHRlci0+QWxsU2dsQnVmZmVyQ291bnQrKzsKLQltZW1zZXQoU3hnU2dsLCAwLCBzaXplb2Yoc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiopKTsKLQlTeGdTZ2wtPlBoeXNpY2FsQWRkcmVzcyA9IFBoeXNpY2FsQWRkcmVzczsJLyogKlBoeXNpY2FsQWRkcmVzczsgKi8KLQlTeGdTZ2wtPmFkYXB0ZXIgPSBhZGFwdGVyOwkvKiBJbml0aWFsaXplIGJhY2twb2ludGVyIG9uY2UgKi8KKwkvKiBQaHlzaWNhbEFkZHJlc3M7ICovCisJU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3MgPSBQaHlzaWNhbEFkZHJlc3M7CisJLyogSW5pdGlhbGl6ZSBiYWNrcG9pbnRlciBvbmNlICovCisJU3hnU2dsLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlJbnNlcnRUYWlsTGlzdCgmYWRhcHRlci0+QWxsU2dsQnVmZmVycywgJlN4Z1NnbC0+QWxsTGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTsKIAlTeGdTZ2wtPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOwogCVNYR19GUkVFX1NHTF9CVUZGRVIoYWRhcHRlciwgU3hnU2dsLCBOVUxMKTsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxTZ2wiLAogCQkgIGFkYXB0ZXIsIFN4Z1NnbCwgTGVuZ3RoLCAwKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgdGVtcF9tYWNfYWRkcmVzc1s2XSA9Ci0gICAgeyAweDAwLCAweGFiLCAweGNkLCAweGVmLCAweDEyLCAweDY5IH07CiAKLXN0YXRpYyB2b2lkIHN4Z19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotLyogIERCR19FUlJPUiAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLCBfX2Z1bmNfXywgKi8KLS8qICAgICAgICAgICAgIGNhcmQtPmNvbmZpZ19zZXQsIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7ICovCi0vKiAqLwotLyogIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisJLyoKKwkgKiAgREJHX0VSUk9SICgiJXMgRU5URVIgY2FyZC0+Y29uZmlnX3NldFsleF0gcG9ydFslZF0gcGh5c3BvcnRbJWRdIFwKKwkgKiAgZnVuY3QjWyVkXVxuIiwgX19mdW5jX18sIGNhcmQtPmNvbmZpZ19zZXQsCisJICogIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7CisJICoKKwkgKiAgc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKwkgKi8KKwkvKiBEQkdfRVJST1IgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwKKwkgKgkgICAJCV9fRlVOQ1RJT05fXyk7CisJICovCiAKLQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwgdGVtcF9tYWNfYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBTWEdfQ09ORklHX01BQykpOwotLyogICAgICBEQkdfRVJST1IgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwgX19mdW5jX18pOyAqLwotLyogICAgICBzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOyAqLworCS8qIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpZighZGV2KQorCXsKKwkJcHJpbnRrKCJzeGc6IERldiBpcyBOdWxsXG4iKTsKKwl9CisKKyAgICAgICAgREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKyAgICAgICAgaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhZGFwdGVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgfQorCiAJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwKIAkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAogCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdIHx8CkBAIC0zMjYyLDE0ICs0MDQzLDE2IEBACiAJfQogCWlmIChhZGFwdGVyLT5uZXRkZXYpIHsKIAkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLCA2KTsKKwkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5jdXJybWFjYWRkciwgNik7CiAJfQotLyogIERCR19FUlJPUiAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQpOyAqLworCS8qIERCR19FUlJPUiAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQpOyAqLwogCXN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7CiAKKwlyZXR1cm4gMDsKIH0KIAogI2lmIFhYWFRPRE8KLXN0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpCitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHB0cjsKQEAgLTMzMDAsMzQgKzQwODMsMzQgQEAKIH0KICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKiAgU1hHIERSSVZFUiBGVU5DVElPTlMgIChiZWxvdykgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIC8qCisgKiBTWEcgRFJJVkVSIEZVTkNUSU9OUyAgKGJlbG93KQorICoKICAqIHN4Z19pbml0aWFsaXplX2FkYXB0ZXIgLSBJbml0aWFsaXplIGFkYXB0ZXIKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKgotICogUmV0dXJuCi0gKglpbnQKKyAqIFJldHVybiAtIGludAogICovCiBzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAl1MzIgUnNzSWRzLCBJc3JDb3VudDsKIAl1MzIgaTsKIAlpbnQgc3RhdHVzOworCWludCBzeGdfcmN2X3Jpbmdfc2l6ZSA9IFNYR19SQ1ZfUklOR19TSVpFOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5pdEFkcHQiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogCiAJUnNzSWRzID0gMTsJCS8qICBYWFhUT0RPICBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsgKi8KLQlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOwogCi0JLyogU2FuaXR5IGNoZWNrIFNYR19VQ09ERV9SRUdTIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvICovCi0JLyogbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgY29ycmVjdCAqLwotCUFTU0VSVChzaXplb2Yoc3RydWN0IFNYR19VQ09ERV9SRUdTKSA9PSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVKTsKKwkvKgorCSAqIFNhbml0eSBjaGVjayBTWEdfVUNPREVfUkVHUyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiB0bworCSAqIG1ha2Ugc3VyZSB0aGUgbGVuZ3RoIGlzIGNvcnJlY3QKKwkgKi8KKwlBU1NFUlQoc2l6ZW9mKHN0cnVjdCBzeGdfdWNvZGVfcmVncykgPT0gU1hHX1JFR0lTVEVSX1NJWkVfUEVSX0NQVSk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlTWEdfRElTQUJMRV9BTExfSU5URVJSVVBUUyhhZGFwdGVyKTsKQEAgLTMzNzAsMTkgKzQxNTMsMjQgQEAKIAkvKiBSZWNlaXZlIHJpbmcgYmFzZSBhbmQgc2l6ZSAqLwogCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCiAJCSAgICBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmN2QmFzZSwgYWRhcHRlci0+UFJjdlJpbmdzLCAwKTsKLQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdlNpemUsIFNYR19SQ1ZfUklOR19TSVpFLCBUUlVFKTsKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkID09IFRSVUUpCisJCXN4Z19yY3ZfcmluZ19zaXplID0gU1hHX0pVTUJPX1JDVl9SSU5HX1NJWkU7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZTaXplLCBzeGdfcmN2X3Jpbmdfc2l6ZSwgVFJVRSk7CiAKIAkvKiBQb3B1bGF0ZSB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycyAqLwogCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKIAotCS8qIEluaXRpYWxpemUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMuICBBdCB0aGUgbW9tZW50ICovCi0JLyogd2UgYWx3YXlzIGVuYWJsZSBJUCBhbmQgVENQIHJlY2VpdmUgY2hlY2tzdW1zIG9uIHRoZSBjYXJkLiAqLwotCS8qIERlcGVuZGluZyBvbiB0aGUgY2hlY2tzdW0gY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlICovCi0JLyogdXNlciwgd2UgY2FuIGNob29zZSB0byByZXBvcnQgb3IgaWdub3JlIHRoZSBjaGVja3N1bSAqLwotCS8qIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLiAqLworCS8qCisJICogSW5pdGlhbGl6ZSBjaGVja3N1bSBvZmZsb2FkIGNhcGFiaWxpdGllcy4gIEF0IHRoZSBtb21lbnQgd2UgYWx3YXlzCisJICogZW5hYmxlIElQIGFuZCBUQ1AgcmVjZWl2ZSBjaGVja3N1bXMgb24gdGhlIGNhcmQuIERlcGVuZGluZyBvbiB0aGUKKwkgKiBjaGVja3N1bSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSB0aGUgdXNlciwgd2UgY2FuIGNob29zZSB0bworCSAqIHJlcG9ydCBvciBpZ25vcmUgdGhlIGNoZWNrc3VtIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLgorCSAqLwogCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmVjZWl2ZUNoZWNrc3VtLAogCQkgIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCB8IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVELCBUUlVFKTsKIAorCWFkYXB0ZXItPmZsYWdzIHw9IChTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQgfCBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRCApOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgTUFDLCBYQVVJICovCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19pbml0aWFsaXplX2xpbmtcbiIsIF9fZnVuY19fKTsKIAlzdGF0dXMgPSBzeGdfaW5pdGlhbGl6ZV9saW5rKGFkYXB0ZXIpOwpAQCAtMzM5MSwxMCArNDE3OSwxNiBAQAogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KLQkvKiBJbml0aWFsaXplIERlYWQgdG8gRkFMU0UuICovCi0JLyogU2xpY0NoZWNrRm9ySGFuZyBvciBTbGljRHVtcFRocmVhZCB3aWxsIHRha2UgaXQgZnJvbSBoZXJlLiAqLworCS8qCisJICogSW5pdGlhbGl6ZSBEZWFkIHRvIEZBTFNFLgorCSAqIFNsaWNDaGVja0Zvckhhbmcgb3IgU2xpY0R1bXBUaHJlYWQgd2lsbCB0YWtlIGl0IGZyb20gaGVyZS4KKwkgKi8KIAlhZGFwdGVyLT5EZWFkID0gRkFMU0U7CiAJYWRhcHRlci0+UGluZ091dHN0YW5kaW5nID0gRkFMU0U7CisJYWRhcHRlci0+WG10RmNFbmFibGVkID0gVFJVRTsKKwlhZGFwdGVyLT5SY3ZGY0VuYWJsZWQgPSBUUlVFOworCisJYWRhcHRlci0+U3RhdGUgPSBTWEdfU1RBVEVfUlVOTklORzsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhJbml0IiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKQEAgLTM0MTMsMTUgKzQyMDcsMTQgQEAKICAqCXN0YXR1cwogICovCiBzdGF0aWMgaW50IHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKLQkJCQkgICAgIHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSCi0JCQkJICAgICAqUmN2RGVzY3JpcHRvckJsb2NrSGRyKQorCSAgICAgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgKlJjdkRlc2NyaXB0b3JCbG9ja0hkcikKIHsKIAl1MzIgaTsKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTyAqUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOwotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqUmN2RGF0YUJ1ZmZlckhkcjsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLICpSY3ZEZXNjcmlwdG9yQmxvY2s7Ci0Jc3RydWN0IFNYR19DTUQgKlJpbmdEZXNjcmlwdG9yQ21kOwotCXN0cnVjdCBTWEdfUkNWX1JJTkcgKlJpbmdaZXJvID0gJmFkYXB0ZXItPlJjdlJpbmdzWzBdOworCXN0cnVjdCBzeGdfcmluZ19pbmZvICpSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICpSY3ZEYXRhQnVmZmVySGRyOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgKlJjdkRlc2NyaXB0b3JCbG9jazsKKwlzdHJ1Y3Qgc3hnX2NtZCAqUmluZ0Rlc2NyaXB0b3JDbWQ7CisJc3RydWN0IHN4Z19yY3ZfcmluZyAqUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGaWxCbGsiLAogCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQsCkBAIC0zNDI5LDggKzQyMjIsMTAgQEAKIAogCUFTU0VSVChSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOwogCi0JLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VzIHRvIGZpbGwgdGhlIGRlc2NyaXB0b3IgYmxvY2ssICovCi0JLyogcmV0dXJuIGZhaWx1cmUgKi8KKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgdGhlIHJlc291cmNlcyB0byBmaWxsIHRoZSBkZXNjcmlwdG9yIGJsb2NrLAorCSAqIHJldHVybiBmYWlsdXJlCisJICovCiAJaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgfHwKIAkgICAgU1hHX1JJTkdfRlVMTChSY3ZSaW5nSW5mbykpIHsKIAkJYWRhcHRlci0+U3RhdHMuTm9NZW0rKzsKQEAgLTM0NDEsMjcgKzQyMzYsNDAgQEAKIAkJICAgIFJjdlJpbmdJbmZvLCBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKIAlBU1NFUlQoUmluZ0Rlc2NyaXB0b3JDbWQpOwogCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKLQlSY3ZEZXNjcmlwdG9yQmxvY2sgPQotCSAgICAoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyopIFJjdkRlc2NyaXB0b3JCbG9ja0hkci0+VmlydHVhbEFkZHJlc3M7CisJUmN2RGVzY3JpcHRvckJsb2NrID0gKHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgKikKKwkJCQkgUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzczsKIAogCS8qIEZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7IGkrKykgewogCQlTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKIAkJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHIpOworLy8JCUFTU0VSVChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KTsKKwkJaWYgKCFSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KSB7CisJCQlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLAorCQkJCQkJYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUpOworCQkJaWYoUmN2RGF0YUJ1ZmZlckhkci0+c2tiKQorCQkJCVJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQgPQorCQkJCQkJUmN2RGF0YUJ1ZmZlckhkci0+c2tiOworCQkJZWxzZQorCQkJCWdvdG8gbm9fbWVtb3J5OworCQl9CiAJCVNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KTsKIAkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKIAkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5WaXJ0dWFsQWRkcmVzcyA9Ci0JCSAgICAodm9pZCAqKVJjdkRhdGFCdWZmZXJIZHI7CisJCQkJCSAgICAodm9pZCAqKVJjdkRhdGFCdWZmZXJIZHI7CisKIAkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5QaHlzaWNhbEFkZHJlc3MgPQogCQkgICAgUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzOwogCX0KIAkvKiBBZGQgdGhlIGRlc2NyaXB0b3IgYmxvY2sgdG8gcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmcgMCAqLwogCVJpbmdEZXNjcmlwdG9yQ21kLT5TZ2wgPSBSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzczsKIAotCS8qIFJjdkJ1ZmZlcnNPbkNhcmQgaXMgbm90IHByb3RlY3RlZCB2aWEgdGhlIHJlY2VpdmUgbG9jayAoc2VlICovCi0JLyogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUpIFdlIGRvbid0IHdhbnQgdG8gZ3JhcCBhIGxvY2sgZXZlcnkgdGltZSBhICovCi0JLyogYnVmZmVyIGlzIHJldHVybmVkIHRvIHVzLCBzbyB3ZSB1c2UgYXRvbWljIGludGVybG9ja2VkIGZ1bmN0aW9ucyAqLwotCS8qIGluc3RlYWQuICovCisJLyoKKwkgKiBSY3ZCdWZmZXJzT25DYXJkIGlzIG5vdCBwcm90ZWN0ZWQgdmlhIHRoZSByZWNlaXZlIGxvY2sgKHNlZQorCSAqIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKSBXZSBkb24ndCB3YW50IHRvIGdyYXAgYSBsb2NrIGV2ZXJ5IHRpbWUgYQorCSAqIGJ1ZmZlciBpcyByZXR1cm5lZCB0byB1cywgc28gd2UgdXNlIGF0b21pYyBpbnRlcmxvY2tlZCBmdW5jdGlvbnMKKwkgKiBpbnN0ZWFkLgorCSAqLwogCWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEc2NCbGsiLApAQCAtMzQ3Myw2ICs0MjgxLDIzIEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKIAkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOwogCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworbm9fbWVtb3J5OgorCWZvciAoOyBpID49IDAgOyBpLS0pIHsKKwkJaWYgKFJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uVmlydHVhbEFkZHJlc3MpIHsKKwkJCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopCisJCQkJCSAgICBSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLgorCQkJCQkJCQlWaXJ0dWFsQWRkcmVzczsKKwkJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uUGh5c2ljYWxBZGRyZXNzID0KKwkJCQkJICAgIChkbWFfYWRkcl90KU5VTEw7CisJCQlSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLlZpcnR1YWxBZGRyZXNzPU5VTEw7CisJCX0KKwkJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCX0KKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOworCVNYR19SRVRVUk5fQ01EKFJpbmdaZXJvLCBSY3ZSaW5nSW5mbywgUmluZ0Rlc2NyaXB0b3JDbWQsCisJCQlSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCisJcmV0dXJuICgtRU5PTUVNKTsKIH0KIAogLyoKQEAgLTM0ODYsMzQgKzQzMTEsNDIgQEAKICAqLwogc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgKlJjdkRlc2NyaXB0b3JCbG9ja0hkcjsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCWludCBzeGdfcmN2X2RhdGFfYnVmZmVycyA9IFNYR19SQ1ZfREFUQV9CVUZGRVJTOworCWludCBzeGdfbWluX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlM7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJTdG9ja0J1ZiIsCiAJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKIAkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOwotCS8qIEZpcnN0LCBzZWUgaWYgd2UndmUgZ290IGxlc3MgdGhhbiBvdXIgbWluaW11bSB0aHJlc2hvbGQgb2YgKi8KLQkvKiByZWNlaXZlIGJ1ZmZlcnMsIHRoZXJlIGlzbid0IGFuIGFsbG9jYXRpb24gaW4gcHJvZ3Jlc3MsIGFuZCAqLwotCS8qIHdlIGhhdmVuJ3QgZXhjZWVkZWQgb3VyIG1heGltdW0uLiBnZXQgYW5vdGhlciBibG9jayBvZiBidWZmZXJzICovCi0JLyogTm9uZSBvZiB0aGlzIG5lZWRzIHRvIGJlIFNNUCBzYWZlLiAgSXQncyByb3VuZCBudW1iZXJzLiAqLwotCWlmICgoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX01JTl9SQ1ZfREFUQV9CVUZGRVJTKSAmJgorCS8qCisJICogRmlyc3QsIHNlZSBpZiB3ZSd2ZSBnb3QgbGVzcyB0aGFuIG91ciBtaW5pbXVtIHRocmVzaG9sZCBvZgorCSAqIHJlY2VpdmUgYnVmZmVycywgdGhlcmUgaXNuJ3QgYW4gYWxsb2NhdGlvbiBpbiBwcm9ncmVzcywgYW5kCisJICogd2UgaGF2ZW4ndCBleGNlZWRlZCBvdXIgbWF4aW11bS4uIGdldCBhbm90aGVyIGJsb2NrIG9mIGJ1ZmZlcnMKKwkgKiBOb25lIG9mIHRoaXMgbmVlZHMgdG8gYmUgU01QIHNhZmUuICBJdCdzIHJvdW5kIG51bWJlcnMuCisJICovCisJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9PSBUUlVFKQorCQlzeGdfbWluX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfTUlOX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlM7CisJaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBzeGdfbWluX3Jjdl9kYXRhX2J1ZmZlcnMpICYmCiAJICAgIChhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50IDwgU1hHX01BWF9SQ1ZfQkxPQ0tTKSAmJgotCSAgICAoYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nID09IDApKSB7CisJICAgIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cGVuZGluZ19hbGxvY2F0aW9ucykgPT0gMCkpIHsKIAkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKLQkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgotCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFCisJCQkJCSAgIChTWEdfUkNWX0RBVEFfSERSX1NJWkUpLAogCQkJCQkgICBTWEdfQlVGRkVSX1RZUEVfUkNWKTsKIAl9CiAJLyogTm93IGdyYWIgdGhlIFJjdlFMb2NrIGxvY2sgYW5kIHByb2NlZWQgKi8KIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKLQl3aGlsZSAoYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCA8IFNYR19SQ1ZfREFUQV9CVUZGRVJTKSB7Ci0JCXN0cnVjdCBMSVNUX0VOVFJZICpfcGxlOworCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpCisJCXN4Z19yY3ZfZGF0YV9idWZmZXJzID0gU1hHX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlM7CisJd2hpbGUgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBzeGdfcmN2X2RhdGFfYnVmZmVycykgeworCQlzdHJ1Y3QgbGlzdF9lbnRyeSAqX3BsZTsKIAogCQkvKiBHZXQgYSBkZXNjcmlwdG9yIGJsb2NrICovCiAJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9IE5VTEw7CiAJCWlmIChhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudCkgewogCQkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKIAkJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9Ci0JCQkgICAgY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSLAorCQkJICAgIGNvbnRhaW5lcl9vZihfcGxlLCBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciwKIAkJCQkJIEZyZWVMaXN0KTsKIAkJCWFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LS07CiAJCQlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOwpAQCAtMzU1MywxMCArNDM4NiwxMCBAQAogc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpCiB7Ci0Jc3RydWN0IFNYR19SQ1ZfUklORyAqUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07Ci0Jc3RydWN0IFNYR19SSU5HX0lORk8gKlJjdlJpbmdJbmZvID0gJmFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbzsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOwotCXN0cnVjdCBTWEdfQ01EICpSaW5nRGVzY3JpcHRvckNtZDsKKwlzdHJ1Y3Qgc3hnX3Jjdl9yaW5nICpSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKKwlzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisJc3RydWN0IHN4Z19jbWQgKlJpbmdEZXNjcmlwdG9yQ21kOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wUkJsa3MiLAogCQkgIGFkYXB0ZXIsIEluZGV4LCBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwpOwpAQCAtMzU2NCwxMiArNDM5NywxMyBAQAogCS8qIE5vdyBncmFiIHRoZSBSY3ZRTG9jayBsb2NrIGFuZCBwcm9jZWVkICovCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CiAJQVNTRVJUKEluZGV4ICE9IFJjdlJpbmdJbmZvLT5UYWlsKTsKLQl3aGlsZSAoUmN2UmluZ0luZm8tPlRhaWwgIT0gSW5kZXgpIHsKLQkJLyogKi8KLQkJLyogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kICovCi0JCS8qIGFzc29jaWF0ZWQgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLCBhbmQgYWR2YW5jZSAqLwotCQkvKiB0aGUgdGFpbCAqLwotCQkvKiAqLworCXdoaWxlIChzeGdfcmluZ19nZXRfZm9yd2FyZF9kaWZmKFJjdlJpbmdJbmZvLCBJbmRleCwKKwkJCQkJUmN2UmluZ0luZm8tPlRhaWwpID4gMykgeworCQkvKgorCQkgKiBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQKKwkJICogYXNzb2NpYXRlZCByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2ssIGFuZCBhZHZhbmNlCisJCSAqIHRoZSB0YWlsCisJCSAqLwogCQlTWEdfUkVUVVJOX0NNRChSaW5nWmVybywKIAkJCSAgICAgICBSY3ZSaW5nSW5mbywKIAkJCSAgICAgICBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKQEAgLTM1NzksMjMgKzQ0MTMsNjYgQEAKIAogCQkvKiBDbGVhciB0aGUgU0dMIGZpZWxkICovCiAJCVJpbmdEZXNjcmlwdG9yQ21kLT5TZ2wgPSAwOwotCQkvKiBBdHRlbXB0IHRvIHJlZmlsbCBpdCBhbmQgaGFuZCBpdCByaWdodCBiYWNrIHRvIHRoZSAqLwotCQkvKiBjYXJkLiAgSWYgd2UgZmFpbCB0byByZWZpbGwgaXQsIGZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KLQkJLyogaGVhZGVyLiAgVGhlIGNhcmQgd2lsbCBiZSByZXN0b2NrZWQgbGF0ZXIgdmlhIHRoZSAqLwotCQkvKiBSY3ZCdWZmZXJzT25DYXJkIHRlc3QgKi8KLQkJaWYgKHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PQotCQkgICAgU1RBVFVTX0ZBSUxVUkUpIHsKKwkJLyoKKwkJICogQXR0ZW1wdCB0byByZWZpbGwgaXQgYW5kIGhhbmQgaXQgcmlnaHQgYmFjayB0byB0aGUKKwkJICogY2FyZC4gIElmIHdlIGZhaWwgdG8gcmVmaWxsIGl0LCBmcmVlIHRoZSBkZXNjcmlwdG9yIGJsb2NrCisJCSAqIGhlYWRlci4gIFRoZSBjYXJkIHdpbGwgYmUgcmVzdG9ja2VkIGxhdGVyIHZpYSB0aGUKKwkJICogUmN2QnVmZmVyc09uQ2FyZCB0ZXN0CisJCSAqLworCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLAorCQkJIFJjdkRlc2NyaXB0b3JCbG9ja0hkcikgPT0gU1RBVFVTX0ZBSUxVUkUpCiAJCQlTWEdfRlJFRV9SQ1ZfREVTQ1JJUFRPUl9CTE9DSyhhZGFwdGVyLAogCQkJCQkJICAgICAgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKLQkJfQogCX0KIAlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhDUkJsa3MiLAogCQkgIGFkYXB0ZXIsIEluZGV4LCBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwpOwogfQogCisvKgorICogUmVhZCB0aGUgc3RhdGlzdGljcyB3aGljaCB0aGUgY2FyZCBoYXMgYmVlbiBtYWludGFpbmluZy4KKyAqLwordm9pZCBzeGdfY29sbGVjdF9zdGF0aXN0aWNzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaWYoYWRhcHRlci0+dWNvZGVfc3RhdHMpCisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5HZXRVY29kZVN0YXRzLAorCQkJCWFkYXB0ZXItPnB1Y29kZV9zdGF0cywgMCk7CisJYWRhcHRlci0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSBhZGFwdGVyLT51Y29kZV9zdGF0cy0+RVJEcm9wczsKKwlhZGFwdGVyLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IGFkYXB0ZXItPnVjb2RlX3N0YXRzLT5OQkRyb3BzOworCWFkYXB0ZXItPnN0YXRzLnR4X2ZpZm9fZXJyb3JzID0gYWRhcHRlci0+dWNvZGVfc3RhdHMtPlhEcm9wczsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzeGdfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3hnX2NvbGxlY3Rfc3RhdGlzdGljcyhhZGFwdGVyKTsKKwlyZXR1cm4gKCZhZGFwdGVyLT5zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z193YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIGRhdGE7CisKKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQlzeGdfbGlua19ldmVudChhZGFwdGVyKTsKKwkJLyogUmVzZXQgdGhlIHRpbWVyICovCisJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOworCX0KK30KKworc3RhdGljIHZvaWQgc3hnX3VwZGF0ZV9saW5rX3N0YXR1cyAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKWNvbnRhaW5lcl9vZgorCQkJCSh3b3JrLCBzdHJ1Y3QgYWRhcHRlcl90LCB1cGRhdGVfbGlua19zdGF0dXMpOworCWlmIChsaWtlbHkoYWRhcHRlci0+bGlua19zdGF0dXNfY2hhbmdlZCkpIHsKKwkJc3hnX2xpbmtfZXZlbnQoYWRhcHRlcik7CisJCWFkYXB0ZXItPmxpbmtfc3RhdHVzX2NoYW5nZWQgPSAwOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN4Z19kcml2ZXIgPSB7Ci0JLm5hbWUgPSBEUlZfTkFNRSwKKwkubmFtZSA9IHN4Z19kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBzeGdfcGNpX3RibCwKIAkucHJvYmUgPSBzeGdfZW50cnlfcHJvYmUsCiAJLnJlbW92ZSA9IHN4Z19lbnRyeV9yZW1vdmUsCkBAIC0zNjAzLDcgKzQ0ODAsNyBAQAogCS5zdXNwZW5kID0gc3hncG1fc3VzcGVuZCwKIAkucmVzdW1lID0gc3hncG1fcmVzdW1lLAogI2VuZGlmCi0vKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworCS8qIC5zaHV0ZG93biAgID0gICAgIHNsaWNfc2h1dGRvd24sICBNT09LX0lOVkVTVElHQVRFICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzeGdfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCmluZGV4IDY1M2NmM2IuLmYwN2FhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApAQCAtNDIsMzU3ICs0MiwzNjkgQEAKICNpZm5kZWYgX19TWEdfRFJJVkVSX0hfXwogI2RlZmluZSBfX1NYR19EUklWRVJfSF9fCiAKLSNkZWZpbmUgcF9uZXRfZGV2aWNlIHN0cnVjdCBuZXRfZGV2aWNlICoKLS8vIFNYR19TVEFUUyAtIFByb2JhYmx5IG1vdmUgdGhlc2UgdG8gc29tZXBsYWNlIHdoZXJlCi0vLyB0aGUgc2xpY3N0YXQgKHN4Z3N0YXQ/KSBwcm9ncmFtIGNhbiBnZXQgdGhlbS4KLXN0cnVjdCBTWEdfU1RBVFMgewotCS8vIFhtdAotCXUzMgkJCQlYbXROQkw7CQkJCS8vIE9mZmxvYWQgc2VuZCBOQkwgY291bnQKLQl1NjQJCQkJRHVtYlhtdEJ5dGVzOwkJLy8gRHVtYm5pYyBzZW5kIGJ5dGVzCi0JdTY0CQkJCVNsb3dYbXRCeXRlczsJCS8vIFNsb3dwYXRoIHNlbmQgYnl0ZXMKLQl1NjQJCQkJRmFzdFhtdEJ5dGVzOwkJLy8gRmFzdHBhdGggc2VuZCBieXRlcwotCXU2NAkJCQlEdW1iWG10UGt0czsJCS8vIER1bWJuaWMgc2VuZCBwYWNrZXRzCi0JdTY0CQkJCVNsb3dYbXRQa3RzOwkJLy8gU2xvd3BhdGggc2VuZCBwYWNrZXRzCi0JdTY0CQkJCUZhc3RYbXRQa3RzOwkJLy8gRmFzdHBhdGggc2VuZCBwYWNrZXRzCi0gICAgdTY0CQkJCUR1bWJYbXRVY2FzdFBrdHM7CS8vIGRpcmVjdGVkIHBhY2tldHMKLSAgICB1NjQJCQkJRHVtYlhtdE1jYXN0UGt0czsJLy8gTXVsdGljYXN0IHBhY2tldHMKLSAgICB1NjQJCQkJRHVtYlhtdEJjYXN0UGt0czsJLy8gT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVgotICAgIHU2NAkJCQlEdW1iWG10VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUCi0gICAgdTY0CQkJCUR1bWJYbXRNY2FzdEJ5dGVzOwkvLyBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUCi0gICAgdTY0CQkJCUR1bWJYbXRCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUCi0gICAgdTY0CQkJCVhtdEVycm9yczsJCQkvLyBPSURfR0VOX1hNSVRfRVJST1IKLSAgICB1NjQJCQkJWG10RGlzY2FyZHM7CQkvLyBPSURfR0VOX1hNSVRfRElTQ0FSRFMKLQl1NjQJCQkJWG10T2s7CQkJCS8vIE9JRF9HRU5fWE1JVF9PSwotCXU2NAkJCQlYbXRRTGVuOwkJCS8vIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RICi0JdTY0CQkJCVhtdFplcm9GdWxsOwkJLy8gVHJhbnNtaXQgcmluZyB6ZXJvIGZ1bGwKLQkvLyBSY3YKLQl1MzIJCQkJUmN2TkJMOwkJCQkvLyBPZmZsb2FkIHJlY2lldmUgTkJMIGNvdW50Ci0JdTY0CQkJCUR1bWJSY3ZCeXRlczsJCS8vIGR1bWJuaWMgcmVjdiBieXRlcwotICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YKLSAgICB1NjQgICAgICAgICAgICAgRHVtYlJjdk1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVgotICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2QmNhc3RCeXRlczsJLy8gT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWCi0JdTY0CQkJCVNsb3dSY3ZCeXRlczsJCS8vIFNsb3dwYXRoIHJlY3YgYnl0ZXMKLQl1NjQJCQkJRmFzdFJjdkJ5dGVzOwkJLy8gRmFzdHBhdGggcmVjdiBieXRlcwotICAgIHU2NAkJCQlEdW1iUmN2UGt0czsJCS8vIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDVgotCXU2NAkJCQlEdW1iUmN2VGNwUGt0czsJCS8vIFNlZSBTeGdDb2xsZWN0U3RhdHMKLSAgICB1NjQJCQkJRHVtYlJjdlVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cwotICAgIHU2NAkJCQlEdW1iUmN2TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cwotICAgIHU2NAkJCQlEdW1iUmN2QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCi0JdTY0CQkJCVNsb3dSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCi0gICAgdTY0CQkJCVJjdkVycm9yczsJCQkvLyBPSURfR0VOX1JDVl9FUlJPUgotICAgIHU2NAkJCQlSY3ZEaXNjYXJkczsJCS8vIE9JRF9HRU5fUkNWX0RJU0NBUkRTCi0JdTY0CQkJCVJjdk5vQnVmZmVyOwkJLy8gT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCi0gICAgdTY0IAkJCVBkcUZ1bGw7CQkJLy8gUHJvY2Vzc2VkIERhdGEgUXVldWUgRnVsbAotCXU2NAkJCQlFdmVudFJpbmdGdWxsOwkJLy8gRXZlbnQgcmluZyBmdWxsCi0JLy8gVmVyYm9zZSBzdGF0cwotCXU2NAkJCQlNYXhTZW5kczsJCQkvLyBNYXggc2VuZHMgb3V0c3RhbmRpbmcKLQl1NjQJCQkJTm9TZ2xCdWY7CQkJLy8gU0dMIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUKLQl1NjQJCQkJU2dsRmFpbDsJCQkvLyBORElTIFNHTCBmYWlsdXJlCi0JdTY0CQkJCVNnbEFzeW5jOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKLQl1NjQJCQkJTm9NZW07CQkJCS8vIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKLQl1NjQJCQkJTnVtSW50czsJCQkvLyBJbnRlcnJ1cHRzCi0JdTY0CQkJCUZhbHNlSW50czsJCQkvLyBJbnRlcnJ1cHQgd2l0aCBJU1IgPT0gMAotCXU2NAkJCQlYbXREcm9wczsJCQkvLyBObyBzYWhhcmEgRFJBTSBidWZmZXIgZm9yIHhtdAotCS8vIFNhaGFyYSByZWNlaXZlIHN0YXR1cwotCXU2NAkJCQlUcmFuc3BvcnRDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0KLQl1NjQJCQkJVHJhbnNwb3J0VWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cKLQl1NjQJCQkJVHJhbnNwb3J0SGRyTGVuOwkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOCi0JdTY0CQkJCU5ldHdvcmtDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNOgotCXU2NAkJCQlOZXR3b3JrVWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgotCXU2NAkJCQlOZXR3b3JrSGRyTGVuOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46Ci0JdTY0CQkJCVBhcml0eTsJCQkJLy8gU1hHX1JDVl9TVEFUVVNfUEFSSVRZCi0JdTY0CQkJCUxpbmtQYXJpdHk7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6Ci0JdTY0CQkJCUxpbmtFYXJseTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgotCXU2NAkJCQlMaW5rQnVmT2Zsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgotCXU2NAkJCQlMaW5rQ29kZTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6Ci0JdTY0CQkJCUxpbmtEcmliYmxlOwkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgotCXU2NAkJCQlMaW5rQ3JjOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgotCXU2NAkJCQlMaW5rT2Zsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKLQl1NjQJCQkJTGlua1VmbG93OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1c6CisjZGVmaW5lIFNMSUNfRFVNUF9FTkFCTEVECQkwCisKKyNkZWZpbmUgU1hHX0RSVl9OQU1FCSJzeGciCQkvKiBUQkQ6IFRoaXMgbWlnaHQgYmUgcmVtb3ZlZCBldmVudHVhbGx5ICovCisjZGVmaW5lIFNYR19EUlZfVkVSU0lPTgkiMS4wLjEiCisKK2V4dGVybiBjaGFyIHN4Z19kcml2ZXJfbmFtZVtdOworCisjZGVmaW5lIFNYR19ORVRERVZfV0VJR0hUIDY0CisKKy8qCisgKiBzdHJ1Y3Qgc3hnX3N0YXRzIC0gUHJvYmFibHkgbW92ZSB0aGVzZSB0byBzb21lcGxhY2Ugd2hlcmUKKyAqIHRoZSBzbGljc3RhdCAoc3hnc3RhdD8pIHByb2dyYW0gY2FuIGdldCB0aGVtLgorICovCitzdHJ1Y3Qgc3hnX3N0YXRzIHsKKwkvKiBYbXQgKi8KKwl1NjQJRHVtYlhtdFVjYXN0UGt0czsJLyogZGlyZWN0ZWQgcGFja2V0cyAqLworCXU2NAlEdW1iWG10TWNhc3RQa3RzOwkvKiBNdWx0aWNhc3QgcGFja2V0cyAqLworCXU2NAlEdW1iWG10QmNhc3RQa3RzOwkvKiBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWICovCisJdTY0CUR1bWJYbXRVY2FzdEJ5dGVzOwkvKiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQgKi8KKwl1NjQJRHVtYlhtdE1jYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQgKi8KKwl1NjQJRHVtYlhtdEJjYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQgKi8KKwl1NjQJWG10UUxlbjsJCS8qIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIICovCisJdTY0CVhtdFplcm9GdWxsOwkJLyogVHJhbnNtaXQgcmluZyB6ZXJvIGZ1bGwgKi8KKwkvKiBSY3YgKi8KKwl1NjQgIAlEdW1iUmN2VWNhc3RCeXRlczsJLyogT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YgKi8KKwl1NjQgICAgCUR1bWJSY3ZNY2FzdEJ5dGVzOwkvKiBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YgKi8KKwl1NjQgICAJRHVtYlJjdkJjYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDViAqLworCXU2NAlEdW1iUmN2VWNhc3RQa3RzOwkvKiBkaXJlY3RlZCBwYWNrZXRzICovCisJdTY0CUR1bWJSY3ZNY2FzdFBrdHM7CS8qIE11bHRpY2FzdCBwYWNrZXRzICovCisJdTY0CUR1bWJSY3ZCY2FzdFBrdHM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgKi8KKwl1NjQgCVBkcUZ1bGw7CQkvKiBQcm9jZXNzZWQgRGF0YSBRdWV1ZSBGdWxsICovCisJdTY0CUV2ZW50UmluZ0Z1bGw7CQkvKiBFdmVudCByaW5nIGZ1bGwgKi8KKwkvKiBWZXJib3NlIHN0YXRzICovCisJdTY0CU5vU2dsQnVmOwkJLyogU0dMIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKwl1NjQJTm9NZW07CQkJLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAqLworCXU2NAlOdW1JbnRzOwkJLyogSW50ZXJydXB0cyAqLworCXU2NAlGYWxzZUludHM7CQkvKiBJbnRlcnJ1cHQgd2l0aCBJU1IgPT0gMCAqLworCS8qIFNhaGFyYSByZWNlaXZlIHN0YXR1cyAqLworCXU2NAlUcmFuc3BvcnRDc3VtOwkJLyogU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0gKi8KKwl1NjQJVHJhbnNwb3J0VWZsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cgKi8KKwl1NjQJVHJhbnNwb3J0SGRyTGVuOwkvKiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOICovCisJdTY0CU5ldHdvcmtDc3VtOwkJLyogU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNOiAqLworCXU2NAlOZXR3b3JrVWZsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOiAqLworCXU2NAlOZXR3b3JrSGRyTGVuOwkJLyogU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46ICovCisJdTY0CVBhcml0eTsJCQkvKiBTWEdfUkNWX1NUQVRVU19QQVJJVFkgKi8KKwl1NjQJTGlua1Bhcml0eTsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZOiAqLworCXU2NAlMaW5rRWFybHk7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOiAqLworCXU2NAlMaW5rQnVmT2Zsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOiAqLworCXU2NAlMaW5rQ29kZTsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERTogKi8KKwl1NjQJTGlua0RyaWJibGU7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEU6ICovCisJdTY0CUxpbmtDcmM7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0NSQzogKi8KKwl1NjQJTGlua09mbG93OwkJLyogU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzogKi8KKwl1NjQJTGlua1VmbG93OwkJLyogU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzogKi8KIH07CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERVTUItTklDIFNlbmQgcGF0aCBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEVU1CLU5JQyBTZW5kIHBhdGggZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBTWEdfQ09NUExFVEVfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAotCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKLSAgICBkZXZfa2ZyZWVfc2tiX2lycShfc2tiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0NPTVBMRVRFX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiLCBfcGh5c19hZGRyLCBfc2l6ZSkgewkJXAorCUFTU0VSVChfc2tiKTsJCQkJCQkJCVwKKwlwY2lfdW5tYXBfc2luZ2xlKF9wQWRhcHQtPnBjaWRldiwgX3NpemUsIF9waHlzX2FkZHIsIFBDSV9ETUFfVE9ERVZJQ0UpOwlcCisJZGV2X2tmcmVlX3NrYl9pcnEoX3NrYik7ICAgICAgICAgICAgICAgICAgICAJCQkJXAogfQogCi0jZGVmaW5lIFNYR19EUk9QX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgCVwKLQlBU1NFUlQoX3NrYik7CQkJCQkJCQkJCQkJCSAgICAJCQlcCi0gICAgZGV2X2tmcmVlX3NrYihfc2tiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNYR19EUk9QX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJQVNTRVJUKF9za2IpOwkJCQkJCQlcCiB9CiAKLS8vIExvY2F0ZSBjdXJyZW50IHJlY2VpdmUgaGVhZGVyIGJ1ZmZlciBsb2NhdGlvbi4gIFVzZSB0aGlzCi0vLyBpbnN0ZWFkIG9mIFJjdkRhdGFIZHItPlZpcnR1YWxBZGRyZXNzIHNpbmNlIHRoZSBkYXRhCi0vLyBtYXkgaGF2ZSBiZWVuIG9mZnNldCBieSBTWEdfQURWQU5DRV9NRExfT0ZGU0VUCisvKgorICogTG9jYXRlIGN1cnJlbnQgcmVjZWl2ZSBoZWFkZXIgYnVmZmVyIGxvY2F0aW9uLiAgVXNlIHRoaXMKKyAqIGluc3RlYWQgb2YgUmN2RGF0YUhkci0+VmlydHVhbEFkZHJlc3Mgc2luY2UgdGhlIGRhdGEKKyAqIG1heSBoYXZlIGJlZW4gb2Zmc2V0IGJ5IFNYR19BRFZBTkNFX01ETF9PRkZTRVQKKyAqLwogI2RlZmluZSBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKF9SY3ZEYXRhSGRyKSAgICAgICAgKF9SY3ZEYXRhSGRyKS0+c2tiLT5kYXRhCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIER1bWItTklDIHJlY2VpdmUgcHJvY2Vzc2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vIERlZmluZSBhbiBTWEdfUEFDS0VUIGFzIGFuIE5ESVNfUEFDS0VUCisvKiBEdW1iLU5JQyByZWNlaXZlIHByb2Nlc3NpbmcgKi8KKy8qIERlZmluZSBhbiBTWEdfUEFDS0VUIGFzIGFuIE5ESVNfUEFDS0VUICovCiAjZGVmaW5lIFBTWEdfUEFDS0VUICAgICAgIHN0cnVjdCBza19idWZmICoKLS8vIEluZGljYXRpb25zIGFycmF5IHNpemUKKy8qIEluZGljYXRpb25zIGFycmF5IHNpemUgKi8KICNkZWZpbmUgU1hHX1JDVl9BUlJBWVNJWkUJNjQKIAotI2RlZmluZSBTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQlcCi0Jc3RydWN0IHNrX2J1ZmYgKiBza2I7CQkJCQkJCQkJCQkJICAgIFwKLSAgICBza2IgPSBhbGxvY19za2IoMjA0OCwgR0ZQX0FUT01JQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHNrYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBza2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc2tiLT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKF9wQWRhcHQsIF9SY3ZEYXRhQnVmZmVySGRyLCBCdWZmZXJTaXplKSB7XAorICAgIHN0cnVjdCBza19idWZmICogc2tiOwkJCQkJCVwKKyAgICBza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKF9wQWRhcHQtPm5ldGRldiwgQnVmZmVyU2l6ZSk7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gc2tiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgc2tiLT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LFwKKwkgICAgX1JjdkRhdGFCdWZmZXJIZHItPnNrYi0+ZGF0YSwgQnVmZmVyU2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsJXAorCWlmIChTWEdfSU5WQUxJRF9TR0woX1JjdkRhdGFCdWZmZXJIZHItPlBoeXNpY2FsQWRkcmVzcyxCdWZmZXJTaXplKSkgIFwKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUOiBSQ1YgcGFja2V0IiBcCisJCQkJCSJub24tNjRrIGJvdW5kYXJ5IGFsaWduZWRcbiIpOwlcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgCShfUmN2RGF0YUJ1ZmZlckhkciktPnNrYiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCiB9CiAKLSNkZWZpbmUgU1hHX0ZSRUVfUkNWX1BBQ0tFVChfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQkJCQlcCi0JaWYoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKSB7CQkJCQkJCQkJCQlcCi0JCWRldl9rZnJlZV9za2IoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKTsJCQkJCQkgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0ZSRUVfUkNWX1BBQ0tFVChfUmN2RGF0YUJ1ZmZlckhkcikgewkJCVwKKwlpZigoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IpIHsJCQkJCVwKKwkJZGV2X2tmcmVlX3NrYigoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IpOwkJXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAogfQogCi0vLyBNYWNybyB0byBhZGQgYSBORElTX1BBQ0tFVCB0byBhbiBpbmRpY2F0aW9uIGFycmF5Ci0vLyBJZiB3ZSBmaWxsIHVwIG91ciBhcnJheSBvZiBwYWNrZXQgcG9pbnRlcnMsIHRoZW4gaW5kaWNhdGUgdGhpcwotLy8gYmxvY2sgdXAgbm93IGFuZCBzdGFydCBvbiBhIG5ldyBvbmUuCi0jZGVmaW5lCVNYR19BRERfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUGFja2V0LCBfUHJldlBhY2tldCwgX0luZGljYXRpb25MaXN0LCBfTnVtUGFja2V0cykgeyBcCi0JKF9JbmRpY2F0aW9uTGlzdClbX051bVBhY2tldHNdID0gKF9QYWNrZXQpOwkJCQkJCQkJCQlcCi0JKF9OdW1QYWNrZXRzKSsrOwkJCQkJCQkJCQkJCQkJCQlcCi0JaWYoKF9OdW1QYWNrZXRzKSA9PSBTWEdfUkNWX0FSUkFZU0laRSkgewkJCQkJCQkJCQlcCi0JCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluZGljUmN2IiwJCQkJXAotCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJCQkJCQkJCQkJXAotICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkoX051bVBhY2tldHMpID0gMDsJCQkJCQkJCQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorLyoKKyAqIE1hY3JvIHRvIGFkZCBhIE5ESVNfUEFDS0VUIHRvIGFuIGluZGljYXRpb24gYXJyYXkKKyAqIElmIHdlIGZpbGwgdXAgb3VyIGFycmF5IG9mIHBhY2tldCBwb2ludGVycywgdGhlbiBpbmRpY2F0ZSB0aGlzCisgKiBibG9jayB1cCBub3cgYW5kIHN0YXJ0IG9uIGEgbmV3IG9uZS4KKyAqLworI2RlZmluZQlTWEdfQUREX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1BhY2tldCwgX1ByZXZQYWNrZXQsIF9JbmRpY2F0aW9uTGlzdCwgXAorCQkJCV9OdW1QYWNrZXRzKSB7IAkJCQlcCisJKF9JbmRpY2F0aW9uTGlzdClbX051bVBhY2tldHNdID0gKF9QYWNrZXQpOwkJCVwKKwkoX051bVBhY2tldHMpKys7CQkJCQkJXAorCWlmKChfTnVtUGFja2V0cykgPT0gU1hHX1JDVl9BUlJBWVNJWkUpIHsJCQlcCisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluZGljUmN2IiwJXAorCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJXAorICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAJXAorCQkoX051bVBhY2tldHMpID0gMDsJCQkJCVwKKwl9CQkJCQkJCQlcCiB9CiAKLSNkZWZpbmUgU1hHX0lORElDQVRFX1BBQ0tFVFMoX3BBZGFwdCwgX0luZGljYXRpb25MaXN0LCBfTnVtUGFja2V0cykgewkJCVwKLQlpZihfTnVtUGFja2V0cykgewkJCQkJCQkJCQkJCQkJCVwKLQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCVwKLQkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCQkJCQkJCQkJXAotICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorI2RlZmluZSBTWEdfSU5ESUNBVEVfUEFDS0VUUyhfcEFkYXB0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7CVwKKwlpZihfTnVtUGFja2V0cykgewkJCQkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAlcCisJCQkJICAgKF9OdW1QYWNrZXRzKSwgMCwgMCwgMCk7CQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgIAlcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJXAorCX0JCQkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfUkVJTklBVElBTElaRV9QQUNLRVQoX1BhY2tldCkJCQkJCQkJCQkJXAotCXt9ICAvKl9OZGlzUmVpbml0aWFsaXplUGFja2V0KF9QYWNrZXQpKi8gIC8qICB0aGlzIGlzIG5vdCBuZWNlc3Nhcnkgd2l0aCBhbiBza2IgKi8KKyNkZWZpbmUgU1hHX1JFSU5JQVRJQUxJWkVfUEFDS0VUKF9QYWNrZXQpCQkJCVwKKwl7fSAgLypfTmRpc1JlaW5pdGlhbGl6ZVBhY2tldChfUGFja2V0KSovCisJCSAvKiAgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdpdGggYW4gc2tiICovCiAKLS8vIERlZmluaXRpb25zIHRvIGluaXRpYWxpemUgRHVtYi1uaWMgUmVjZWl2ZSBOQkxzCi0jZGVmaW5lIFNYR19SQ1ZfUEFDS0VUX0JVRkZFUl9IRFIoX1BhY2tldCkgKCgoUFNYR19SQ1ZfTkJMX1JFU0VSVkVEKSgoX1BhY2tldCktPk1pbmlwb3J0UmVzZXJ2ZWRFeCkpLT5SY3ZEYXRhQnVmZmVySGRyKQorLyogRGVmaW5pdGlvbnMgdG8gaW5pdGlhbGl6ZSBEdW1iLW5pYyBSZWNlaXZlIE5CTHMgKi8KKyNkZWZpbmUgU1hHX1JDVl9QQUNLRVRfQlVGRkVSX0hEUihfUGFja2V0KSAoKChzdHJ1Y3Qgc3hnX3Jjdl9uYmxfcmVzZXJ2ZWQgKilcCisJCQkoKF9QYWNrZXQpLT5NaW5pcG9ydFJlc2VydmVkRXgpKS0+UmN2RGF0YUJ1ZmZlckhkcikKIAotI2RlZmluZSBTWEdfUkNWX1NFVF9DSEVDS1NVTV9JTkZPKF9QYWNrZXQsIF9DcGkpCVwKLQlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIFRjcElwQ2hlY2tzdW1QYWNrZXRJbmZvKSA9IChQVk9JRCkoX0NwaSkKKyNkZWZpbmUgU1hHX1JDVl9TRVRfQ0hFQ0tTVU1fSU5GTyhfUGFja2V0LCBfQ3BpKQkJCQlcCisJTkRJU19QRVJfUEFDS0VUX0lORk9fRlJPTV9QQUNLRVQoKF9QYWNrZXQpLCAJCQkJXAorCQkJVGNwSXBDaGVja3N1bVBhY2tldEluZm8pID0gKFBWT0lEKShfQ3BpKQogCiAjZGVmaW5lIFNYR19SQ1ZfU0VUX1RPRVBMSVRaKF9QYWNrZXQsIF9Ub2VwbGl0eiwgX1R5cGUsIF9GdW5jdGlvbikgewkJXAotCU5ESVNfUEFDS0VUX1NFVF9IQVNIX1ZBTFVFKChfUGFja2V0KSwgKF9Ub2VwbGl0eikpOwkJCQkJCVwKLQlORElTX1BBQ0tFVF9TRVRfSEFTSF9UWVBFKChfUGFja2V0KSwgKF9UeXBlKSk7CQkJCQkJCVwKLQlORElTX1BBQ0tFVF9TRVRfSEFTSF9GVU5DVElPTigoX1BhY2tldCksIChfRnVuY3Rpb24pKTsJCQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9WQUxVRSgoX1BhY2tldCksIChfVG9lcGxpdHopKTsJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfVFlQRSgoX1BhY2tldCksIChfVHlwZSkpOwkJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfRlVOQ1RJT04oKF9QYWNrZXQpLCAoX0Z1bmN0aW9uKSk7CQkJXAogfQogCi0jZGVmaW5lIFNYR19SQ1ZfU0VUX1ZMQU5fSU5GTyhfUGFja2V0LCBfVmxhbklkLCBfUHJpb3JpdHkpIHsJCQkJCVwKLQlORElTX1BBQ0tFVF84MDIxUV9JTkZPCV9QYWNrZXQ4MDIxcUluZm87CQkJCQkJCQkJXAotCV9QYWNrZXQ4MDIxcUluZm8uVGFnSGVhZGVyLlZsYW5JZCA9IChfVmxhbklkKTsJCQkJCQkJCVwKLQlfUGFja2V0ODAyMXFJbmZvLlRhZ0hlYWRlci5Vc2VyUHJpb3JpdHkgPSAoX1ByaW9yaXR5KTsJCQkJCQlcCisjZGVmaW5lIFNYR19SQ1ZfU0VUX1ZMQU5fSU5GTyhfUGFja2V0LCBfVmxhbklkLCBfUHJpb3JpdHkpIHsJCQlcCisJTkRJU19QQUNLRVRfODAyMVFfSU5GTwlfUGFja2V0ODAyMXFJbmZvOwkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVmxhbklkID0gKF9WbGFuSWQpOwkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVXNlclByaW9yaXR5ID0gKF9Qcmlvcml0eSk7CQkJXAogCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgSWVlZTgwMjFRTmV0QnVmZmVyTGlzdEluZm8pID0gCVwKLQkJX1BhY2tldDgwMjFxSW5mby5WYWx1ZTsJCQkJCQkJCQkJCQkJXAorCQlfUGFja2V0ODAyMXFJbmZvLlZhbHVlOwkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfQURKVVNUX1JDVl9QQUNLRVQoX1BhY2tldCwgX1JjdkRhdGFCdWZmZXJIZHIsIF9FdmVudCkgewkJCVwKLQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iUmN2IiwJCQlcCi0JCQkgICAoX1JjdkRhdGFCdWZmZXJIZHIpLCAoX1BhY2tldCksCQkJCQkJCQlcCi0JCQkgICAoX0V2ZW50KS0+U3RhdHVzLCAwKTsJICAgICAgICAgICAgICAgICAgICAJCQkJXAotCUFTU0VSVCgoX0V2ZW50KS0+TGVuZ3RoIDw9IChfUmN2RGF0YUJ1ZmZlckhkciktPlNpemUpOwkJCQkJXAotICAgIFBhY2tldC0+bGVuID0gKF9FdmVudCktPkxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKF9QYWNrZXQsIF9SY3ZEYXRhQnVmZmVySGRyLCBfRXZlbnQpIHsJCVwKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iUmN2IiwJCVwKKwkJCSAgIChfUmN2RGF0YUJ1ZmZlckhkciksIChfUGFja2V0KSwJCQlcCisJCQkgICAoX0V2ZW50KS0+U3RhdHVzLCAwKTsJICAgICAgICAgICAgICAgICAgICAJXAorCS8qIEFTU0VSVCgoX0V2ZW50KS0+TGVuZ3RoIDw9IChfUmN2RGF0YUJ1ZmZlckhkciktPlNpemUpOyAqLwkJXAorCXNrYl9wdXQoUGFja2V0LCAoX0V2ZW50KS0+TGVuZ3RoKTsJCQkJCVwKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gTWFjcm9zIHRvIGZyZWUgYSByZWNlaXZlIGRhdGEgYnVmZmVyIGFuZCByZWNlaXZlIGRhdGEgZGVzY3JpcHRvciBibG9jawotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gTk9URSAtIExvY2sgbXVzdCBiZSBoZWxkIHdpdGggUkNWIG1hY3JvcwotI2RlZmluZSBTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCQlcCi0Jc3RydWN0IExJU1RfRU5UUlkgICAgIAkJCQkqX3BsZTsJCQkJCQkJCQkJXAotCV9IZHIgPSBOVUxMOwkJCQkJCQkJCQkJCQkJCQlcCi0JaWYoKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpIHsJCQkJCQkJCQkJCVwKLQkJQVNTRVJUKCEoSXNMaXN0RW1wdHkoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMpKSk7CQkJCQkJXAotCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMpOwkgICAgCQkJCVwKLQkJKF9IZHIpID0gY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiwgRnJlZUxpc3QpOwkgICAgICAgIFwKLQkJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQtLTsJCQkJCQkJCQkJXAotCQlBU1NFUlQoKF9IZHIpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorLyoKKyAqIE1hY3JvcyB0byBmcmVlIGEgcmVjZWl2ZSBkYXRhIGJ1ZmZlciBhbmQgcmVjZWl2ZSBkYXRhIGRlc2NyaXB0b3IgYmxvY2sKKyAqIE5PVEUgLSBMb2NrIG11c3QgYmUgaGVsZCB3aXRoIFJDViBtYWNyb3MKKyAqLworI2RlZmluZSBTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCVwKKwlzdHJ1Y3QgbGlzdF9lbnRyeSAqX3BsZTsJCQkJCQlcCisJX0hkciA9IE5VTEw7CQkJCQkJCQlcCisJaWYoKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpIHsJCQkJCVwKKwkJQVNTRVJUKCEoSXNMaXN0RW1wdHkoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMpKSk7CQlcCisJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycyk7CSAgICAJXAorCQkoX0hkcikgPSBjb250YWluZXJfb2YoX3BsZSwgc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyLCAJXAorCQkJCQkJRnJlZUxpc3QpOwkgICAgICAgIAlcCisJCShfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LS07CQkJCVwKKwkJQVNTRVJUKChfSGRyKS0+U3RhdGUgPT0gU1hHX0JVRkZFUl9GUkVFKTsJCQlcCisJfQkJCQkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoX3BBZGFwdCwgX0hkcikgewkJCQkJCQlcCi0JU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUnRuREhkciIsCQkJXAotCQkJICAgKF9IZHIpLCAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCwJCQkJCQlcCi0JCQkgICAoX0hkciktPlN0YXRlLCAoX0hkciktPlZpcnR1YWxBZGRyZXNzKTsJCQkJCQlcCi0vKglTWEdfUkVTVE9SRV9NRExfT0ZGU0VUKF9IZHIpOwkqLwkJCQkJCQkJCQlcCi0JKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQrKzsJCQkJCQkJCQkJXAotCUFTU0VSVCgoKF9wQWRhcHQpLT5BbGxSY3ZCbG9ja0NvdW50ICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spID49IChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KTsgXAotCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCi0JKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCQkJCQkJXAotCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzLCAmKChfSGRyKS0+RnJlZUxpc3QpKTsJCVwKKyNkZWZpbmUgU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKF9wQWRhcHQsIF9IZHIpIHsJCQkJXAorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJ0bkRIZHIiLAkJXAorCQkJICAgKF9IZHIpLCAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCwJCVwKKwkJCSAgIChfSGRyKS0+U3RhdGUsIDAvKihfSGRyKS0+VmlydHVhbEFkZHJlc3MqLyk7CQlcCisvKglTWEdfUkVTVE9SRV9NRExfT0ZGU0VUKF9IZHIpOwkqLwkJCQkJXAorCShfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50Kys7CQkJCQlcCisJQVNTRVJUKCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgCVwKKwkJCQk+PSAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCk7IAkJXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzLCAmKChfSGRyKS0+RnJlZUxpc3QpKTsJXAogfQogCi0jZGVmaW5lIFNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQlcCi0JQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKLQkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCi0JKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCsrOwkJCQkJCQkJCQkJXAorI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREVTQ1JJUFRPUl9CTE9DSyhfcEFkYXB0LCBfSGRyKSB7CQkJCVwKKwlBU1NFUlQoKF9IZHIpLT5TdGF0ZSAhPSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQlcCisJKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCVwKKwkoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja0NvdW50Kys7CQkJCQkJXAogCUFTU0VSVCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCk7CVwKLQlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tzLCAmKF9IZHIpLT5GcmVlTGlzdCk7CQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja3MsICYoX0hkciktPkZyZWVMaXN0KTsJCVwKIH0KIAotLy8gU0dMIG1hY3JvcwotI2RlZmluZSBTWEdfRlJFRV9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9OQikgewlcCi0Jc3Bpbl9sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCVwKLQkoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCsrOwkJXAotCUFTU0VSVCgoX3BBZGFwdCktPkFsbFNnbEJ1ZmZlckNvdW50ID49IChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50KTtcCi0JQVNTRVJUKCEoKF9TZ2wpLT5TdGF0ZSAmIFNYR19CVUZGRVJfRlJFRSkpOwlcCi0JKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCVwKLQlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycywgJihfU2dsKS0+RnJlZUxpc3QpOwlcCi0Jc3Bpbl91bmxvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAorLyogU0dMIG1hY3JvcyAqLworI2RlZmluZSBTWEdfRlJFRV9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9OQikgewkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CQkJXAorCShfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50Kys7CQkJCQlcCisJQVNTRVJUKChfcEFkYXB0KS0+QWxsU2dsQnVmZmVyQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpOwlcCisJQVNTRVJUKCEoKF9TZ2wpLT5TdGF0ZSAmIFNYR19CVUZGRVJfRlJFRSkpOwkJCQlcCisJKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCVwKKwlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycywgJihfU2dsKS0+RnJlZUxpc3QpOwkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CQlcCiB9CiAKLS8vIEdldCBhbiBTR0wgYnVmZmVyIGZyb20gdGhlIGZyZWUgcXVldWUuICBUaGUgZmlyc3QgcGFydCBvZiB0aGlzIG1hY3JvCi0vLyBhdHRlbXB0cyB0byBrZWVwIGFoZWFkIG9mIGJ1ZmZlciBkZXBsZXRpb24gYnkgYWxsb2NhdGluZyBtb3JlIHdoZW4KLS8vIHdlIGhpdCBhIG1pbmltdW0gdGhyZXNob2xkLiAgTm90ZSB0aGF0IHdlIGRvbid0IGdyYWIgdGhlIGxvY2sKLS8vIHVudGlsIGFmdGVyIHRoYXQuICBXZSdyZSBkZWFsaW5nIHdpdGggcm91bmQgbnVtYmVycyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvLAotLy8gYW5kIG5vdCBncmFiYmluZyBpdCBhdm9pZHMgYSBwb3NzaWJsZSBkb3VibGUtdHJpcC4KLSNkZWZpbmUgU1hHX0dFVF9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wpIHsJCQkJXAotCXN0cnVjdCBMSVNUX0VOVFJZICpfcGxlOwkJCQkJCVwKKy8qCisgKiBHZXQgYW4gU0dMIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIHF1ZXVlLiAgVGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBtYWNybworICogYXR0ZW1wdHMgdG8ga2VlcCBhaGVhZCBvZiBidWZmZXIgZGVwbGV0aW9uIGJ5IGFsbG9jYXRpbmcgbW9yZSB3aGVuCisgKiB3ZSBoaXQgYSBtaW5pbXVtIHRocmVzaG9sZC4gIE5vdGUgdGhhdCB3ZSBkb24ndCBncmFiIHRoZSBsb2NrCisgKiB1bnRpbCBhZnRlciB0aGF0LiAgV2UncmUgZGVhbGluZyB3aXRoIHJvdW5kIG51bWJlcnMgaGVyZSwgc28gd2UgZG9uJ3QgbmVlZCB0bywKKyAqIGFuZCBub3QgZ3JhYmJpbmcgaXQgYXZvaWRzIGEgcG9zc2libGUgZG91YmxlLXRyaXAuCisgKi8KKyNkZWZpbmUgU1hHX0dFVF9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9pcnEpIHsJCQlcCisJc3RydWN0IGxpc3RfZW50cnkgKl9wbGU7CQkJCQlcCiAJaWYgKChfcEFkYXB0LT5GcmVlU2dsQnVmZmVyQ291bnQgPCBTWEdfTUlOX1NHTF9CVUZGRVJTKSAmJglcCiAJICAgKF9wQWRhcHQtPkFsbFNnbEJ1ZmZlckNvdW50IDwgU1hHX01BWF9TR0xfQlVGRkVSUykgJiYJXAotCSAgIChfcEFkYXB0LT5BbGxvY2F0aW9uc1BlbmRpbmcgPT0gMCkpIHsJCQlcCisJICAgKGF0b21pY19yZWFkKCZfcEFkYXB0LT5wZW5kaW5nX2FsbG9jYXRpb25zKSA9PSAwKSkgewkJXAogCQlzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShfcEFkYXB0LAkJCVwKLQkJCShzaXplb2Yoc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUikgKyBTWEdfU0dMX0JVRl9TSVpFKSxcCisJCQkoc2l6ZW9mKHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIpICsgU1hHX1NHTF9CVUZfU0laRSksXAogCQkJU1hHX0JVRkZFUl9UWVBFX1NHTCk7CQkJCVwKIAl9CQkJCQkJCQlcCiAJX1NnbCA9IE5VTEw7CQkJCQkJCVwKLQlzcGluX2xvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJCQlcCisJaWYoIV9pcnEpCQkJCQkJCVwKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CVwKKwllbHNlCQkJCQkJCQlcCisJCXNwaW5fbG9ja19pcnFzYXZlKCYoX3BBZGFwdCktPlNnbFFMb2NrLCBzZ2xfZmxhZ3MpOwlcCiAJaWYoKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpIHsJCQkJXAogCQlBU1NFUlQoIShJc0xpc3RFbXB0eSgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycykpKTsJXAogCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJihfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlcnMpOwlcCi0JCShfU2dsKSA9IGNvbnRhaW5lcl9vZihfcGxlLCBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSLCBGcmVlTGlzdCk7IFwKKwkJKF9TZ2wpID0gY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIsIAlcCisJCQkJCQlGcmVlTGlzdCk7IAkJXAogICAgICAgICAgICAgKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQtLTsJCQkJXAogCQlBU1NFUlQoKF9TZ2wpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJXAogCQkoX1NnbCktPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOwkJCVwKIAkJKF9TZ2wpLT5wU2dsID0gTlVMTDsJCQkJCVwKIAl9CQkJCQkJCQlcCi0Jc3Bpbl91bmxvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJCQlcCisJaWYoIV9pcnEpCQkJCQkJCVwKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKF9wQWRhcHQpLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTtcCisJZWxzZQkJCQkJCQkJXAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoX3BBZGFwdCktPlNnbFFMb2NrLCBzZ2xfZmxhZ3MpO1wKIH0KIAotLy8KLS8vIFNYR19NVUxUSUNBU1RfQUREUkVTUwotLy8KLS8vIExpbmtlZCBsaXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCi1zdHJ1Y3QgU1hHX01VTFRJQ0FTVF9BRERSRVNTIHsKLQl1bnNpZ25lZCBjaGFyCQkJCQkJCUFkZHJlc3NbNl07Ci0Jc3RydWN0IFNYR19NVUxUSUNBU1RfQUREUkVTUwkqTmV4dDsKKy8qCisgKiBzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzCisgKiBMaW5rZWQgbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICovCitzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzIHsKKwl1bnNpZ25lZCBjaGFyCQkJQWRkcmVzc1s2XTsKKwlzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzCSpOZXh0OwogfTsKIAotLy8gU3RydWN0dXJlIHRvIG1haW50YWluIGNoaW1uZXkgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLgotLy8gVGhpcyBzdHJ1Y3R1cmUgbWFpbnRhaW5zIE5FVF9CVUZGRVJfTElTVCBxdWV1ZXMgdGhhdCBhcmUKLS8vIGdpdmVuIHRvIHVzIHZpYSB0aGUgQ2hpbW5leSBNaW5pcG9ydFRjcE9mZmxvYWRTZW5kIGFuZAotLy8gTWluaXBvcnRUY3BPZmZsb2FkUmVjZWl2ZSByb3V0aW5lcy4gIFRoaXMgc3RydWN0dXJlIERPRVMgTk9UCi0vLyBtYW5hZ2Ugb3VyIGRhdGEgYnVmZmVyIHF1ZXVlCi1zdHJ1Y3QgU1hHX0JVRkZFUl9RVUVVRSB7Ci0JdTMyCQkJCQkJVHlwZTsJCQkvLyBTbG93IG9yIGZhc3QgLSBTZWUgYmVsb3cKLQl1MzIJCQkJCQlEaXJlY3Rpb247CQkvLyBYbXQgb3IgUmN2Ci0JdTMyCQkJCQkJQnl0ZXM7CQkJLy8gQnl0ZSBjb3VudAotCXUzMiAqICAgICAgICAJCQlIZWFkOwkJCS8vIFNlbmQgcXVldWUgaGVhZAotCXUzMiAqICAgICAgICAJCQlUYWlsOwkJCS8vIFNlbmQgcXVldWUgdGFpbAotLy8JUE5FVF9CVUZGRVJfTElTVAkJCU5leHROQkw7CQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CTAotLy8JUE5FVF9CVUZGRVIJCQkJCU5leHROQjsJCQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CCisvKgorICogU3RydWN0dXJlIHRvIG1haW50YWluIGNoaW1uZXkgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLgorICogVGhpcyBzdHJ1Y3R1cmUgbWFpbnRhaW5zIE5FVF9CVUZGRVJfTElTVCBxdWV1ZXMgdGhhdCBhcmUKKyAqIGdpdmVuIHRvIHVzIHZpYSB0aGUgQ2hpbW5leSBNaW5pcG9ydFRjcE9mZmxvYWRTZW5kIGFuZAorICogTWluaXBvcnRUY3BPZmZsb2FkUmVjZWl2ZSByb3V0aW5lcy4gIFRoaXMgc3RydWN0dXJlIERPRVMgTk9UCisgKiBtYW5hZ2Ugb3VyIGRhdGEgYnVmZmVyIHF1ZXVlCisgKi8KK3N0cnVjdCBzeGdfYnVmZmVyX3F1ZXVlIHsKKwl1MzIJVHlwZTsJCQkvKiBTbG93IG9yIGZhc3QgLSBTZWUgYmVsb3cgKi8KKwl1MzIJRGlyZWN0aW9uOwkJLyogWG10IG9yIFJjdiAqLworCXUzMglCeXRlczsJCQkvKiBCeXRlIGNvdW50ICovCisJdTMyICogIAlIZWFkOwkJCS8qIFNlbmQgcXVldWUgaGVhZCAqLworCXUzMiAqICAJVGFpbDsJCQkvKiBTZW5kIHF1ZXVlIHRhaWwgKi8KKy8qCVBORVRfQlVGRkVSX0xJU1QJTmV4dE5CTDsqLwkvKiBTaG9ydCBjdXQgLSBuZXh0IE5CTCAqLworLyoJUE5FVF9CVUZGRVIJCU5leHROQjsJKi8JLyogU2hvcnQgY3V0IC0gbmV4dCBOQiAqLwogfTsKIAogI2RlZmluZQkJU1hHX1NMT1dfU0VORF9CVUZGRVIJMAogI2RlZmluZQkJU1hHX0ZBU1RfU0VORF9CVUZGRVIJMQogI2RlZmluZSAJU1hHX1JFQ0VJVkVfQlVGRkVSCQkyCiAKLSNkZWZpbmUgU1hHX0lOSVRfQlVGRkVSKF9CdWZmZXIsIF9UeXBlKSB7IAkJCQkJCVwKLQkoX0J1ZmZlciktPlR5cGUgPSAoX1R5cGUpOwkJCQkJCQkJCVwKLQlpZigoX1R5cGUpID09IFNYR19SRUNFSVZFX0JVRkZFUikgewkJCQkJCQlcCi0JCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gMDsJCQkJCQkJCVwKLQl9IGVsc2UgewkJCQkJCQkJCQkJCQlcCisjZGVmaW5lIFNYR19JTklUX0JVRkZFUihfQnVmZmVyLCBfVHlwZSkgeyAJCQkJXAorCShfQnVmZmVyKS0+VHlwZSA9IChfVHlwZSk7CQkJCQlcCisJaWYoKF9UeXBlKSA9PSBTWEdfUkVDRUlWRV9CVUZGRVIpIHsJCQkJXAorCQkoX0J1ZmZlciktPkRpcmVjdGlvbiA9IDA7CQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCiAJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gTkRJU19TR19MSVNUX1dSSVRFX1RPX0RFVklDRTsJXAotCX0JCQkJCQkJCQkJCQkJCQlcCi0JKF9CdWZmZXIpLT5CeXRlcyA9IDA7CQkJCQkJCQkJCVwKLQkoX0J1ZmZlciktPkhlYWQgPSBOVUxMOwkJCQkJCQkJCQlcCi0JKF9CdWZmZXIpLT5UYWlsID0gTlVMTDsJCQkJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkoX0J1ZmZlciktPkJ5dGVzID0gMDsJCQkJCQlcCisJKF9CdWZmZXIpLT5IZWFkID0gTlVMTDsJCQkJCQlcCisJKF9CdWZmZXIpLT5UYWlsID0gTlVMTDsJCQkJCQlcCiB9CiAKIAotI2RlZmluZSBTWEdfUlNTX0NQVV9DT1VOVChfcEFkYXB0KSAJCQkJCQkJCVwKKyNkZWZpbmUgU1hHX1JTU19DUFVfQ09VTlQoX3BBZGFwdCkgCQkJCQlcCiAJKChfcEFkYXB0KS0+UnNzRW5hYmxlZCAJPyAgTlJfQ1BVUyA6IDEpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEUklWRVIgYW5kIEFEQVBURVIgc3RydWN0dXJlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEUklWRVIgYW5kIEFEQVBURVIgc3RydWN0dXJlcyAqLwogCi0vLyBBZGFwdGVyIHN0YXRlcyAtIFRoZXNlIHN0YXRlcyBjbG9zZWx5IG1hdGNoIHRoZSBhZGFwdGVyIHN0YXRlcwotLy8gZG9jdW1lbnRlZCBpbiB0aGUgRERLICh3aXRoIGEgZmV3IGV4Y2VwdGlvbnMpLgorLyoKKyAqIEFkYXB0ZXIgc3RhdGVzIC0gVGhlc2Ugc3RhdGVzIGNsb3NlbHkgbWF0Y2ggdGhlIGFkYXB0ZXIgc3RhdGVzCisgKiBkb2N1bWVudGVkIGluIHRoZSBEREsgKHdpdGggYSBmZXcgZXhjZXB0aW9ucykuCisgKi8KIGVudW0gU1hHX1NUQVRFIHsKLQlTWEdfU1RBVEVfSU5JVElBTElaSU5HLAkJCS8vIEluaXRpYWxpemluZwotCVNYR19TVEFURV9CT09URElBRywJCQkJLy8gQm9vdC1EaWFnbm9zdGljIG1vZGUKLQlTWEdfU1RBVEVfUEFVU0lORywJCQkJLy8gUGF1c2luZwotCVNYR19TVEFURV9QQVVTRUQsCQkJCS8vIFBhdXNlZAotCVNYR19TVEFURV9SVU5OSU5HLAkJCQkvLyBSdW5uaW5nCi0JU1hHX1NUQVRFX1JFU0VUVElORywJCQkvLyBSZXNldCBpbiBwcm9ncmVzcwotCVNYR19TVEFURV9TTEVFUCwJCQkJLy8gU2xlZXBpbmcKLQlTWEdfU1RBVEVfRElBRywJCQkJCS8vIERpYWdub3N0aWMgbW9kZQotCVNYR19TVEFURV9IQUxUSU5HLAkJCQkvLyBIYWx0aW5nCi0JU1hHX1NUQVRFX0hBTFRFRCwJCQkJLy8gRG93biBvciBub3QtaW5pdGlhbGl6ZWQKLQlTWEdfU1RBVEVfU0hVVERPV04JCQkJLy8gc2h1dGRvd24KKwlTWEdfU1RBVEVfSU5JVElBTElaSU5HLAkJCS8qIEluaXRpYWxpemluZyAqLworCVNYR19TVEFURV9CT09URElBRywJCQkvKiBCb290LURpYWdub3N0aWMgbW9kZSAqLworCVNYR19TVEFURV9QQVVTSU5HLAkJCS8qIFBhdXNpbmcgKi8KKwlTWEdfU1RBVEVfUEFVU0VELAkJCS8qIFBhdXNlZCAqLworCVNYR19TVEFURV9SVU5OSU5HLAkJCS8qIFJ1bm5pbmcgKi8KKwlTWEdfU1RBVEVfUkVTRVRUSU5HLAkJCS8qIFJlc2V0IGluIHByb2dyZXNzICovCisJU1hHX1NUQVRFX1NMRUVQLAkJCS8qIFNsZWVwaW5nICovCisJU1hHX1NUQVRFX0RJQUcsCQkJCS8qIERpYWdub3N0aWMgbW9kZSAqLworCVNYR19TVEFURV9IQUxUSU5HLAkJCS8qIEhhbHRpbmcgKi8KKwlTWEdfU1RBVEVfSEFMVEVELAkJCS8qIERvd24gb3Igbm90LWluaXRpYWxpemVkICovCisJU1hHX1NUQVRFX1NIVVRET1dOCQkJLyogc2h1dGRvd24gKi8KIH07CiAKLS8vIExpbmsgc3RhdGUKKy8qIExpbmsgc3RhdGUgKi8KIGVudW0gU1hHX0xJTktfU1RBVEUgewogCVNYR19MSU5LX0RPV04sCiAJU1hHX0xJTktfVVAKIH07CiAKLS8vIExpbmsgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpbiAxMDB1cyB1bml0cwotI2RlZmluZSBTWEdfTElOS19USU1FT1VUCTEwMDAwMAkJLy8gMTAgU2Vjb25kcyAtIFJFRFVDRSEKKy8qIExpbmsgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpbiAxMDB1cyB1bml0cyAqLworI2RlZmluZSBTWEdfTElOS19USU1FT1VUCTEwMDAwMAkJLyogMTAgU2Vjb25kcyAtIFJFRFVDRSEgKi8KIAogCi0vLyBNaWNyb2NvZGUgZmlsZSBzZWxlY3Rpb24gY29kZXMKKy8qIE1pY3JvY29kZSBmaWxlIHNlbGVjdGlvbiBjb2RlcyAqLwogZW51bSBTWEdfVUNPREVfU0VMIHsKLQlTWEdfVUNPREVfU0FIQVJBLAkJCQkvLyBTYWhhcmEgdWNvZGUKLQlTWEdfVUNPREVfU0RJQUdDUFUsCQkJCS8vIFNhaGFyYSBDUFUgZGlhZ25vc3RpYyB1Y29kZQotCVNYR19VQ09ERV9TRElBR1NZUwkJCQkvLyBTYWhhcmEgc3lzdGVtIGRpYWdub3N0aWMgdWNvZGUKKwlTWEdfVUNPREVfU1lTVEVNLAkvKiBTeXN0ZW0gKG9wZXJhdGlvbmFsKSB1dWNvZGUgKi8KKwlTWEdfVUNPREVfU0RJQUdDUFUsCS8qIFN5c3RlbSBDUFUgZGlhZ25vc3RpYyB1Y29kZSAqLworCVNYR19VQ09ERV9TRElBR1NZUwkvKiBTeXN0ZW0gZGlhZ25vc3RpYyB1Y29kZSAqLwogfTsKIAogCiAjZGVmaW5lIFNYR19ESVNBQkxFX0FMTF9JTlRFUlJVUFRTKF9wYWRhcHQpIHN4Z19kaXNhYmxlX2ludGVycnVwdChfcGFkYXB0KQogI2RlZmluZSBTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKF9wYWRhcHQpIHN4Z19lbmFibGVfaW50ZXJydXB0KF9wYWRhcHQpCiAKLS8vIFRoaXMgcHJvYmFibHkgbGl2ZXMgaW4gYSBwcm90by5oIGZpbGUuICBNb3ZlIGxhdGVyCisvKiBUaGlzIHByb2JhYmx5IGxpdmVzIGluIGEgcHJvdG8uaCBmaWxlLiAgTW92ZSBsYXRlciAqLwogI2RlZmluZSBTWEdfTVVMVElDQVNUX1BBQ0tFVChfcGV0aGVyKSAoKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFswXSAmIDB4MDEpCi0jZGVmaW5lIFNYR19CUk9BRENBU1RfUEFDS0VUKF9wZXRoZXIpICgoKih1MzIgKikoX3BldGhlciktPmV0aGVyX2Rob3N0ID09IDB4RkZGRkZGRkYpICYmIFwKLQkJCQkoKih1MTYgKikmKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFs0XSA9PSAweEZGRkYpKQorI2RlZmluZSBTWEdfQlJPQURDQVNUX1BBQ0tFVChfcGV0aGVyKSAJCQkJCVwKKwkJKCgqKHUzMiAqKShfcGV0aGVyKS0+ZXRoZXJfZGhvc3QgPT0gMHhGRkZGRkZGRikgJiYgCVwKKwkJKCoodTE2ICopJihfcGV0aGVyKS0+ZXRoZXJfZGhvc3RbNF0gPT0gMHhGRkZGKSkKIAotLy8gRm9yIERiZ1ByaW50cworLyogRm9yIERiZ1ByaW50cyAqLwogI2RlZmluZSBTWEdfSUQgICAgICBEUEZMVFJfSUhWTkVUV09SS19JRAogI2RlZmluZSBTWEdfRVJST1IgICBEUEZMVFJfRVJST1JfTEVWRUwKIAotLy8KLS8vIFNYR19EUklWRVIgc3RydWN0dXJlIC0KLS8vCi0vLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3hnIGRyaXZlci4gIFRoZXJlIGlzIG9ubHkKLS8vIG9uZSBvZiB0aGVzZSwgYW5kIGl0IGlzIGRlZmluZWQgYXMgYSBnbG9iYWwuCi1zdHJ1Y3QgU1hHX0RSSVZFUiB7Ci0Jc3RydWN0IGFkYXB0ZXJfdAkqQWRhcHRlcnM7CQkvLyBMaW5rZWQgbGlzdCBvZiBhZGFwdGVycwotCXVzaG9ydAkJCQlBZGFwdGVySUQ7CQkvLyBNYWludGFpbiB1bmlxdWUgYWRhcHRlciBJRAorLyoKKyAqIHN0cnVjdCBzeGdfZHJpdmVyIHN0cnVjdHVyZSAtCisgKgorICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN4ZyBkcml2ZXIuICBUaGVyZSBpcyBvbmx5CisgKiBvbmUgb2YgdGhlc2UsIGFuZCBpdCBpcyBkZWZpbmVkIGFzIGEgZ2xvYmFsLgorICovCisKK3N0cnVjdCBzeGdfZHJpdmVyIHsKKwlzdHJ1Y3QgYWRhcHRlcl90CSpBZGFwdGVyczsJLyogTGlua2VkIGxpc3Qgb2YgYWRhcHRlcnMgKi8KKwl1c2hvcnQJCQlBZGFwdGVySUQ7CS8qIE1haW50YWluIHVuaXF1ZSBhZGFwdGVyIElEICovCiB9OwogCiAjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKICN1bmRlZiBTVEFUVVNfU1VDQ0VTUwogI2VuZGlmCiAKKy8qIFRPRE86IFdlIG5lZWQgdG8gdHJ5IGFuZCB1c2UgTkVUREVWX1RYXyogYmVmb3JlIHBvc3RpbmcgdGhpcyBvdXQgKi8KICNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKQEAgLTQwNCwzNCArNDE2LDM2IEBACiAjZGVmaW5lIFNMSUNfTUFYX0NBUkRTICAgICAgICAgICAgICAzMgogI2RlZmluZSBTTElDX01BWF9QT1JUUyAgICAgICAgICAgICAgNCAgICAgICAgLyogTWF4ICMgb2YgcG9ydHMgcGVyIGNhcmQgICAqLwogI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0vLyBEdW1wIGJ1ZmZlciBzaXplCi0vLwotLy8gVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKLS8vIGdpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KLS8vIE1vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbwotLy8ganVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KLSNkZWZpbmUgRFVNUF9CVUZfU0laRSAgICAgICAgICAgICAgIDB4M0MwMAorCisvKgorICogRHVtcCBidWZmZXIgc2l6ZQorICogVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKKyAqIGdpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KKyAqIE1vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworICoganVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyAqLworI2RlZmluZSBEVU1QX0JVRl9TSVpFCTB4M0MwMAogI2VuZGlmCiAKICNkZWZpbmUgTUlOKGEsIGIpICgodTMyKShhKSA8ICh1MzIpKGIpID8gKGEpIDogKGIpKQogI2RlZmluZSBNQVgoYSwgYikgKCh1MzIpKGEpID4gKHUzMikoYikgPyAoYSkgOiAoYikpCiAKLXN0cnVjdCBtY2FzdF9hZGRyZXNzX3QgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzWzZdOwotICAgIHN0cnVjdCBtY2FzdF9hZGRyZXNzX3QgICAqbmV4dDsKK3N0cnVjdCBtY2FzdF9hZGRyZXNzIHsKKyAgICB1bnNpZ25lZCBjaGFyCSAgIGFkZHJlc3NbNl07CisgICAgc3RydWN0IG1jYXN0X2FkZHJlc3MgICAqbmV4dDsKIH07CiAKLSNkZWZpbmUgQ0FSRF9ET1dOICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENBUkRfVVAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBDQVJEX0ZBSUwgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0FSRF9ESUFHICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIENBUkRfU0xFRVAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQVJEX0RPV04gICAgICAgIAkJMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIAkJMHgwMDAwMDAwMQorI2RlZmluZSBDQVJEX0ZBSUwJICAgICAgICAJMHgwMDAwMDAwMgorI2RlZmluZSBDQVJEX0RJQUcgICAgICAgCQkweDAwMDAwMDAzCisjZGVmaW5lIENBUkRfU0xFRVAgICAgICAgCQkweDAwMDAwMDA0CiAKLSNkZWZpbmUgQURBUFRfRE9XTiAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIEFEQVBUX1VQICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBBREFQVF9GQUlMICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQURBUFRfUkVTRVQgICAgICAgICAgICAweDAzCi0jZGVmaW5lIEFEQVBUX1NMRUVQICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBREFQVF9ET1dOCSAgICAgICAgICAgICAJMHgwMAorI2RlZmluZSBBREFQVF9VUCAgICAgICAgCSAgICAgICAJMHgwMQorI2RlZmluZSBBREFQVF9GQUlMICAgICAgICAgICAgIAkJMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIAkJMHgwMworI2RlZmluZSBBREFQVF9TTEVFUCAgICAgICAgICAgIAkJMHgwNAogCiAjZGVmaW5lIEFEQVBUX0ZMQUdTX0JPT1RUSU1FICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFEQVBUX0ZMQUdTX0lTNjRCSVQgICAgICAgICAgICAgMHgwMDAyCkBAIC00NDMsMjkgKzQ1NywzMCBAQAogI2RlZmluZSBBREFQVF9GTEFHU19TVEFUU19USU1FUl9TRVQgICAgIDB4MDA4MAogI2RlZmluZSBBREFQVF9GTEFHU19SRVNFVF9USU1FUl9TRVQgICAgIDB4MDEwMAogCi0jZGVmaW5lIExJTktfRE9XTiAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBMSU5LX0NPTkZJRyAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTElOS19VUCAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfRE9XTgkJCTB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgIAkJCTB4MDEKKyNkZWZpbmUgTElOS19VUCAgICAJCQkweDAyCiAKLSNkZWZpbmUgTElOS18xME1CICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIExJTktfMTAwTUIgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBMSU5LX0FVVE9TUEVFRCAgICAgICAgIDB4MDIKLSNkZWZpbmUgTElOS18xMDAwTUIgICAgICAgICAgICAweDAzCi0jZGVmaW5lIExJTktfMTAwMDBNQiAgICAgICAgICAgMHgwNAorI2RlZmluZSBMSU5LXzEwTUIgICAgCQkJMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgCQkweDAxCisjZGVmaW5lIExJTktfQVVUT1NQRUVEICAJCTB4MDIKKyNkZWZpbmUgTElOS18xMDAwTUIgICAgICAgIAkJMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgCQkweDA0CiAKLSNkZWZpbmUgTElOS19IQUxGRCAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIExJTktfRlVMTEQgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBMSU5LX0FVVE9EICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTElOS19IQUxGRCAgICAgICAJCTB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgCQkJMHgwMQorI2RlZmluZSBMSU5LX0FVVE9EIAkJCTB4MDIKIAotI2RlZmluZSBNQUNfRElSRUNURUQgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUFDX0JDQVNUICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19NQ0FTVCAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUFJPTUlTQyAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX0xPT1BCQUNLICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1BQ19BTExNQ0FTVCAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBNQUNfRElSRUNURUQgCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgCQkJMHgwMDAwMDAwMgorI2RlZmluZSBNQUNfTUNBU1QgIAkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFDX1BST01JU0MgIAkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTUFDX0xPT1BCQUNLICAgCQkJMHgwMDAwMDAxMAorI2RlZmluZSBNQUNfQUxMTUNBU1QgIAkJCTB4MDAwMDAwMjAKIAogI2RlZmluZSBTTElDX0RVUExFWCh4KSAgICAoKHg9PUxJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKLSNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4PT1MSU5LXzEwME1CKSA/ICIxMDBNYiIgOiAoKHg9PUxJTktfMTAwME1CKSA/ICIxMDAwTWIiIDogIiAxME1iIikpCisjZGVmaW5lIFNMSUNfU1BFRUQoeCkgICAgICgoeD09TElOS18xMDBNQikgPyAiMTAwTWIiIDogCQkJXAorCQkJCSgoeD09TElOS18xMDAwTUIpID8gIjEwMDBNYiIgOiAiIDEwTWIiKSkKICNkZWZpbmUgU0xJQ19MSU5LU1RBVEUoeCkgKCh4PT1MSU5LX0RPV04pID8gIkRvd24iIDogIlVwICAiKQogI2RlZmluZSBTTElDX0FEQVBURVJfU1RBVEUoeCkgKCh4PT1BREFQVF9VUCkgPyAiVVAiIDogIkRvd24iKQogI2RlZmluZSBTTElDX0NBUkRfU1RBVEUoeCkgICAgKCh4PT1DQVJEX1VQKSA/ICJVUCIgOiAiRG93biIpCkBAIC00ODEsMzIgKzQ5NiwzNiBAQAogI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKICNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAogCi1zdHJ1Y3QgcGh5c2NhcmRfdCB7Ci0gICAgc3RydWN0IGFkYXB0ZXJfdCAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOwotICAgIHN0cnVjdCBwaHlzY2FyZF90ICpuZXh0OworLyoKKyAqIFdlIHNwbGl0IExTUyBzZW5kcyBhY3Jvc3MgZm91ciBtaWNyb2NvZGUgcXVldWVzIGRlcml2ZWQgZnJvbQorICogZGVzdGluYXRpb24gVENQIHBvcnQgKGlmIFRDUC9JUCkuCisgKi8KKyNkZWZpbmUgU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSyAgICAweDMKKyNkZWZpbmUgSVNDU0lfUE9SVCAJICAgICAgICAgICAgIDB4YmMwYyAgICAgICAgICAgICAgICAgIC8qIDMyNjAgKi8KKworc3RydWN0IHBoeXNjYXJkIHsKKyAgICBzdHJ1Y3QgYWRhcHRlcl90CQkqYWRhcHRlcltTTElDX01BWF9QT1JUU107CisgICAgc3RydWN0IHBoeXNjYXJkCQkqbmV4dDsKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NkOwogfTsKIAotc3RydWN0IHN4Z2Jhc2VfZHJpdmVyX3Qgeworc3RydWN0IHN4Z2Jhc2VfZHJpdmVyIHsKIAlzcGlubG9ja190CWRyaXZlcl9sb2NrOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CS8qIGlycXNhdmUgZm9yIHNwaW5sb2NrICovCiAJdTMyCQludW1fc3hnX2NhcmRzOwogCXUzMgkJbnVtX3N4Z19wb3J0czsKIAl1MzIJCW51bV9zeGdfcG9ydHNfYWN0aXZlOwogCXUzMgkJZHluYW1pY19pbnRhZ2c7Ci0Jc3RydWN0IHBoeXNjYXJkX3QJKnBoeXNfY2FyZDsKKwlzdHJ1Y3QgcGh5c2NhcmQJKnBoeXNfY2FyZDsKIH07CiAKIAogc3RydWN0IGFkYXB0ZXJfdCB7CiAJdm9pZCAqICAgICAgICAgICAgICAgaWZwOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBwb3J0OwotCXN0cnVjdCBwaHlzY2FyZF90ICAgICAgICAqcGh5c2NhcmQ7CisJc3RydWN0IG5hcGlfc3RydWN0IAluYXBpOworCXN0cnVjdCBwaHlzY2FyZCAgICAgICAgKnBoeXNjYXJkOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBwaHlzcG9ydDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2FyZGluZGV4OwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjYXJkX3NpemU7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNoaXBpZDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYnVzbnVtYmVyOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBzbG90bnVtYmVyOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBmdW5jdGlvbm51bWJlcjsKIAl1c2hvcnQgICAgICAgICAgICAgIHZlbmRpZDsKQEAgLTUxNCwzMiArNTMzLDIzIEBACiAJdXNob3J0ICAgICAgICAgICAgICBzdWJzeXNpZDsKIAl1MzIgICAgICAgICAgICAgaXJxOwogCi0Jdm9pZCAqICAgICAgICAgICAgICAgc3hnX2FkYXB0ZXI7Ci0JdTMyICAgICAgICAgICAgIG5CdXN5U2VuZDsKLQogCXZvaWQgX19pb21lbSAqCWJhc2VfYWRkcjsKIAl1MzIgICAgICAgICAgICAgbWVtb3J5bGVuZ3RoOwogCXUzMiAgICAgICAgICAgICBkcmFtYmFzZTsKIAl1MzIgICAgICAgICAgICAgZHJhbWxlbmd0aDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhbGxvY2F0ZWQ7CisJZW51bSBhc2ljX3R5cGUJYXNpY3R5cGU7ICAgICAgLyogdHlwZSBvZiBBU0lDIChjaGlwKSAqLwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhY3RpdmF0ZWQ7CiAJdTMyICAgICAgICAgICAgIGludHJyZWdpc3RlcmVkOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBpc3BfaW5pdGlhbGl6ZWQ7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGdlbm51bWJlcjsKLQl1MzIgICAgICAgICAgICAgY3VyYWRkcnVwcGVyOwotCXUzMiAgICAgICAgICAgICBpc3Jjb3B5OwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBzdGF0ZTsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua3N0YXRlOwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3BlZWQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtkdXBsZXg7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBtYWNhZGRyWzZdOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBjdXJybWFjYWRkcls2XTsKIAl1MzIgICAgICAgICAgICAgbWFjb3B0czsKIAl1c2hvcnQgICAgICAgICAgICAgIGRldmZsYWdzX3ByZXY7CiAJdTY0ICAgICAgICAgICAgIG1jYXN0bWFzazsKLQlzdHJ1Y3QgbWNhc3RfYWRkcmVzc190ICAgKm1jYXN0YWRkcnM7CisJc3RydWN0IG1jYXN0X2FkZHJlc3MgICAqbWNhc3RhZGRyczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgIHBpbmd0aW1lcjsKIAl1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OwogCXN0cnVjdCB0aW1lcl9saXN0ICAgc3RhdHN0aW1lcjsKQEAgLTU3NCwxMzUgKzU4NCwxNDAgQEAKIAl1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CiAJdTMyICAgICAgICAgICAgIGludGFnZ19wZXJpb2Q7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0JdTMyICoJCQkJCU1pbmlwb3J0SGFuZGxlOwkJLy8gT3VyIG1pbmlwb3J0IGhhbmRsZQotCWVudW0gU1hHX1NUQVRFCQkJCQlTdGF0ZTsJCQkJLy8gQWRhcHRlciBzdGF0ZQotCWVudW0gU1hHX0xJTktfU1RBVEUJCQkJTGlua1N0YXRlOwkJCS8vIExpbmsgc3RhdGUKLQl1NjQJCQkJCQlMaW5rU3BlZWQ7CQkJLy8gTGluayBTcGVlZAotCXUzMgkJCQkJCVBvd2VyU3RhdGU7CQkJLy8gTkRJUyBwb3dlciBzdGF0ZQotCXN0cnVjdCBhZGFwdGVyX3QgICAJCSpOZXh0OwkJCQkvLyBMaW5rZWQgbGlzdAotCXVzaG9ydAkJCQkJCUFkYXB0ZXJJRDsJCQkvLyAxLi5uCi0JdW5zaWduZWQgY2hhcgkJCQkJCU1hY0FkZHJbNl07CQkJLy8gT3VyIHBlcm1hbmVudCBIVyBtYWMgYWRkcmVzcwotCXVuc2lnbmVkIGNoYXIJCQkJCQlDdXJyTWFjQWRkcls2XTsJCS8vIE91ciBDdXJyZW50IG1hYyBhZGRyZXNzCi0JcF9uZXRfZGV2aWNlICAgICAgICAgICAgICAgIG5ldGRldjsKLQlwX25ldF9kZXZpY2UgICAgICAgICAgICAgICAgbmV4dF9uZXRkZXZpY2U7Ci0Jc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAqIHBjaWRldjsKKwl1MzIgKgkJCU1pbmlwb3J0SGFuZGxlOwkJLyogT3VyIG1pbmlwb3J0IGhhbmRsZSAqLworCWVudW0gU1hHX1NUQVRFIAkJU3RhdGU7CQkJLyogQWRhcHRlciBzdGF0ZSAqLworCWVudW0gU1hHX0xJTktfU1RBVEUgCUxpbmtTdGF0ZTsJCS8qIExpbmsgc3RhdGUgKi8KKwl1NjQJCQlMaW5rU3BlZWQ7CQkvKiBMaW5rIFNwZWVkICovCisJdTMyCQkJUG93ZXJTdGF0ZTsJCS8qIE5ESVMgcG93ZXIgc3RhdGUgKi8KKwlzdHJ1Y3QgYWRhcHRlcl90ICAJKk5leHQ7CQkJLyogTGlua2VkIGxpc3QgKi8KKwl1c2hvcnQJCQlBZGFwdGVySUQ7CQkvKiAxLi5uICovCisJc3RydWN0IG5ldF9kZXZpY2UgKiAgICAgICAgIG5ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqICAgICAgICAgbmV4dF9uZXRkZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAqcGNpZGV2OwogCi0Jc3RydWN0IFNYR19NVUxUSUNBU1RfQUREUkVTUwkJKk11bHRpY2FzdEFkZHJzOwkJLy8gTXVsdGljYXN0IGxpc3QKLQl1NjQgICAgIAkJCQlNdWx0aWNhc3RNYXNrOwkJLy8gTXVsdGljYXN0IG1hc2sKLQl1MzIgKgkJCQkJSW50ZXJydXB0SGFuZGxlOwkvLyBSZWdpc3RlciBJbnRlcnJ1cHQgaGFuZGxlCi0JdTMyCQkJCQkJSW50ZXJydXB0TGV2ZWw7CQkvLyBGcm9tIFJlc291cmNlIGxpc3QKLQl1MzIJCQkJCQlJbnRlcnJ1cHRWZWN0b3I7CS8vIEZyb20gUmVzb3VyY2UgbGlzdAotCXNwaW5sb2NrX3QJQWRhcHRlckxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgYWRhcHRlciByb3V0aW5lcyAqLwotCXNwaW5sb2NrX3QJQml0NjRSZWdMb2NrOwkvKiBGb3Igd3JpdGluZyA2NC1iaXQgYWRkcmVzc2VzICovCi0Jc3RydWN0IFNYR19IV19SRUdTCQkJKkh3UmVnczsJCQkJLy8gU2FoYXJhIEhXIFJlZ2lzdGVyIE1lbW9yeSAoQkFSMC8xKQotCXN0cnVjdCBTWEdfVUNPREVfUkVHUwkJCSpVY29kZVJlZ3M7CQkJLy8gTWljcm9jb2RlIFJlZ2lzdGVyIE1lbW9yeSAoQkFSMi8zKQotCXN0cnVjdCBTWEdfVENCX1JFR1MJCQkqVGNiUmVnczsJCQkvLyBTYW1lIGFzIFVjb2RlIHJlZ3MgLSBTZWUgc3hnaHcuaAotCXVzaG9ydAkJCQkJCVJlc2V0RHBjQ291bnQ7CQkvLyBGb3IgdGltZW91dAotCXVzaG9ydAkJCQkJCVJzc0RwY0NvdW50OwkJLy8gRm9yIHRpbWVvdXQKLQl1c2hvcnQJCQkJCQlWZW5kb3JJRDsJCQkvLyBWZW5kb3IgSUQKLQl1c2hvcnQJCQkJCQlEZXZpY2VJRDsJCQkvLyBEZXZpY2UgSUQKLQl1c2hvcnQJCQkJCQlTdWJTeXN0ZW1JRDsJCS8vIFN1Yi1TeXN0ZW0gSUQKLQl1c2hvcnQJCQkJCQlGcmFtZVNpemU7CQkJLy8gTWF4aW11bSBmcmFtZSBzaXplCi0JdTMyICoJCQkJCURtYUhhbmRsZTsJCQkvLyBORElTIERNQSBoYW5kbGUKLQl1MzIgKgkJCQkJUGFja2V0UG9vbEhhbmRsZTsJLy8gVXNlZCB3aXRoIE5ESVMgNS4yIG9ubHkuICBEb24ndCBpZmRlZiBvdXQKLQl1MzIgKgkJCQkJQnVmZmVyUG9vbEhhbmRsZTsJLy8gVXNlZCB3aXRoIE5ESVMgNS4yIG9ubHkuICBEb24ndCBpZmRlZiBvdXQKLQl1MzIJCQkJCQlNYWNGaWx0ZXI7CQkJLy8gTkRJUyBNQUMgRmlsdGVyCi0JdXNob3J0CQkJCQkJSXBJZDsJCQkJLy8gRm9yIHNsb3dwYXRoCi0Jc3RydWN0IFNYR19FVkVOVF9SSU5HCQkJKkV2ZW50UmluZ3M7CQkJLy8gSG9zdCBldmVudCByaW5ncy4gIDEvQ1BVIHRvIDE2IG1heAotCWRtYV9hZGRyX3QgICAgICAgICAgICAgIAlQRXZlbnRSaW5nczsJCS8vIFBoeXNpY2FsIGFkZHJlc3MKLQl1MzIJCQkJCQlOZXh0RXZlbnRbU1hHX01BWF9SU1NdOwkvLyBDdXJyZW50IGxvY2F0aW9uIGluIHJpbmcKLQlkbWFfYWRkcl90ICAgICAgICAgIAkJUFRjYkJ1ZmZlcnM7CQkvLyBUQ0IgQnVmZmVycyAtIHBoeXNpY2FsIGFkZHJlc3MKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQVGNiQ29tcEJ1ZmZlcnM7CS8vIFRDQiBDb21wb3NpdGUgQnVmZmVycyAtIHBoeXMgYWRkcgotCXN0cnVjdCBTWEdfWE1UX1JJTkcJCQkJKlhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzCi0JZG1hX2FkZHJfdAkJICAgICAgICAgICAgUFhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcwotCXN0cnVjdCBTWEdfUklOR19JTkZPCQkJCVhtdFJpbmdaZXJvSW5mbzsJLy8gVHJhbnNtaXQgcmluZyAwIGluZm8KKwlzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzCSpNdWx0aWNhc3RBZGRyczsgLyogTXVsdGljYXN0IGxpc3QgKi8KKwl1NjQgICAgIAkJTXVsdGljYXN0TWFzazsJCS8qIE11bHRpY2FzdCBtYXNrICovCisJdTMyIAkJCSpJbnRlcnJ1cHRIYW5kbGU7CS8qIFJlZ2lzdGVyIEludGVycnVwdCBoYW5kbGUgKi8KKwl1MzIJCQlJbnRlcnJ1cHRMZXZlbDsJCS8qIEZyb20gUmVzb3VyY2UgbGlzdCAqLworCXUzMgkJCUludGVycnVwdFZlY3RvcjsJLyogRnJvbSBSZXNvdXJjZSBsaXN0ICovCisJc3BpbmxvY2tfdAkJQWRhcHRlckxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgYWRhcHRlciByb3V0aW5lcyAqLworCXNwaW5sb2NrX3QJCUJpdDY0UmVnTG9jazsJLyogRm9yIHdyaXRpbmcgNjQtYml0IGFkZHJlc3NlcyAqLworCXN0cnVjdCBzeGdfaHdfcmVncwkqSHdSZWdzOwkvKiBTYWhhcmEgSFcgUmVnaXN0ZXIgTWVtb3J5IChCQVIwLzEpICovCisJc3RydWN0IHN4Z191Y29kZV9yZWdzCSpVY29kZVJlZ3M7CS8qIE1pY3JvY29kZSBSZWdpc3RlciBNZW1vcnkgKEJBUjIvMykgKi8KKwlzdHJ1Y3Qgc3hnX3RjYl9yZWdzCSpUY2JSZWdzOwkvKiBTYW1lIGFzIFVjb2RlIHJlZ3MgLSBTZWUgc3hnaHcuaCAqLworCXVzaG9ydCAgICAgICAgIAlGcmFtZVNpemU7CS8qIE1heGltdW0gZnJhbWUgc2l6ZSAqLworCXUzMiAqCQlEbWFIYW5kbGU7CS8qIE5ESVMgRE1BIGhhbmRsZSAqLworCXUzMiAqCQlQYWNrZXRQb29sSGFuZGxlOwkvKiBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dCAqLworCXUzMiAqCQlCdWZmZXJQb29sSGFuZGxlOwkvKiBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dCAqLworCXUzMgkJTWFjRmlsdGVyOwkJLyogTkRJUyBNQUMgRmlsdGVyICovCisJc3RydWN0IHN4Z19ldmVudF9yaW5nCSpFdmVudFJpbmdzOwkvKiBIb3N0IGV2ZW50IHJpbmdzLiAgMS9DUFUgdG8gMTYgbWF4ICovCisJZG1hX2FkZHJfdCAgICAgICAgICAgICAJUEV2ZW50UmluZ3M7CS8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MzIJCU5leHRFdmVudFtTWEdfTUFYX1JTU107CS8qIEN1cnJlbnQgbG9jYXRpb24gaW4gcmluZyAqLworCWRtYV9hZGRyX3QgICAgIAlQVGNiQnVmZmVyczsJCS8qIFRDQiBCdWZmZXJzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QJUFRjYkNvbXBCdWZmZXJzOwkvKiBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgLSBwaHlzIGFkZHIgKi8KKwlzdHJ1Y3Qgc3hnX3htdF9yaW5nCSpYbXRSaW5nczsJLyogVHJhbnNtaXQgcmluZ3MgKi8KKwlkbWFfYWRkcl90CQlQWG10UmluZ3M7CS8qIFRyYW5zbWl0IHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCXN0cnVjdCBzeGdfcmluZ19pbmZvCVhtdFJpbmdaZXJvSW5mbzsJLyogVHJhbnNtaXQgcmluZyAwIGluZm8gKi8KKwogCXNwaW5sb2NrX3QJWG10WmVyb0xvY2s7CS8qIFRyYW5zbWl0IHJpbmcgMCBsb2NrICovCi0JdTMyICoJCQkJCVhtdFJpbmdaZXJvSW5kZXg7CS8vIFNoYXJlZCBYTVQgcmluZyAwIGluZGV4Ci0JZG1hX2FkZHJfdCAgICAgICAgICAJCVBYbXRSaW5nWmVyb0luZGV4OwkvLyBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAtIHBoeXNpY2FsCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUZyZWVQcm90b2NvbEhlYWRlcnM7Ly8gRnJlZSBwcm90b2NvbCBoZWFkZXJzCi0JdTMyCQkJCQkJRnJlZVByb3RvSGRyQ291bnQ7CS8vIENvdW50Ci0Jdm9pZCAqCQkJCQkJUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXIKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXJzIC0gcGh5cworCXUzMiAqCQlYbXRSaW5nWmVyb0luZGV4OwkvKiBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAqLworCWRtYV9hZGRyX3QgICAgIAlQWG10UmluZ1plcm9JbmRleDsJLyogU2hhcmVkIFhNVCByaW5nIDAgaW5kZXggLSBwaHlzaWNhbCAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVQcm90b2NvbEhlYWRlcnM7LyogRnJlZSBwcm90b2NvbCBoZWFkZXJzICovCisJdTMyCQlGcmVlUHJvdG9IZHJDb3VudDsJLyogQ291bnQgKi8KKwl2b2lkICoJCVByb3RvY29sSGVhZGVyczsJLyogQmxvY2sgb2YgcHJvdG9jb2wgaGVhZGVyICovCisJZG1hX2FkZHJfdAlQUHJvdG9jb2xIZWFkZXJzOwkvKiBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXJzIC0gcGh5cyAqLwogCi0Jc3RydWN0IFNYR19SQ1ZfUklORwkJKlJjdlJpbmdzOwkJCS8vIFJlY2VpdmUgcmluZ3MKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUmN2UmluZ3M7CQkJLy8gUmVjZWl2ZSByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTwkJCQlSY3ZSaW5nWmVyb0luZm87CS8vIFJlY2VpdmUgcmluZyAwIGluZm8KKwlzdHJ1Y3Qgc3hnX3Jjdl9yaW5nCSpSY3ZSaW5nczsJLyogUmVjZWl2ZSByaW5ncyAqLworCWRtYV9hZGRyX3QJUFJjdlJpbmdzOwkJLyogUmVjZWl2ZSByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzCSp1Y29kZV9zdGF0czsJCS8qIFVjb2RlIFN0YXRzICAqLworCS8qIFVjb2RlIFN0YXRzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QJICAgICAgICBwdWNvZGVfc3RhdHM7CiAKLQl1MzIgKgkJCQkJSXNyOwkJCQkvLyBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCi0JZG1hX2FkZHJfdAkgICAgICAgICAgICAJUElzcjsJCQkJLy8gSVNSIC0gcGh5c2ljYWwgYWRkcmVzcwotCXUzMgkJCQkJCUlzckNvcHlbU1hHX01BWF9SU1NdOwkvLyBDb3B5IG9mIElTUgotCXVzaG9ydAkJCQkJCUludGVycnVwdHNFbmFibGVkOwkvLyBCaXRtYXNrIG9mIGVuYWJsZWQgdmVjdG9ycwotCXVuc2lnbmVkIGNoYXIgKgkJCQkJCUluZGlyZWN0aW9uVGFibGU7CS8vIFJTUyBpbmRpcmVjdGlvbiB0YWJsZQotCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBJbmRpcmVjdGlvblRhYmxlOwkvLyBQaHlzaWNhbCBhZGRyZXNzCi0JdXNob3J0CQkJCQkJUnNzVGFibGVTaXplOwkJLy8gRnJvbSBORElTX1JFQ0VJVkVfU0NBTEVfUEFSQU1FVEVSUwotCXVzaG9ydAkJCQkJCUhhc2hLZXlTaXplOwkJLy8gRnJvbSBORElTX1JFQ0VJVkVfU0NBTEVfUEFSQU1FVEVSUwotCXVuc2lnbmVkIGNoYXIJCQkJCQlIYXNoU2VjcmV0S2V5WzQwXTsJLy8gcnNzIGtleQotCXUzMgkJCQkJCUhhc2hJbmZvcm1hdGlvbjsKLQkvLyBSZWNlaXZlIGJ1ZmZlciBxdWV1ZXMKLQlzcGlubG9ja190CVJjdlFMb2NrOwkvKiBSZWNlaXZlIFF1ZXVlIExvY2sgKi8KLQlzdHJ1Y3QgTElTVF9FTlRSWQkJCQkJRnJlZVJjdkJ1ZmZlcnM7CQkvLyBGcmVlIFNYR19EQVRBX0JVRkZFUiBxdWV1ZQotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlGcmVlUmN2QmxvY2tzOwkJLy8gRnJlZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgUQotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlBbGxSY3ZCbG9ja3M7CQkvLyBBbGwgU1hHX1JDVl9CTE9DS3MKLQl1c2hvcnQJCQkJCQlGcmVlUmN2QnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiBmcmVlIHJjdiBkYXRhIGJ1ZmZlcnMKLQl1c2hvcnQJCQkJCQlGcmVlUmN2QmxvY2tDb3VudDsJLy8gIyBvZiBmcmVlIHJjdiBkZXNjcmlwdG9yIGJsb2NrcwotCXVzaG9ydAkJCQkJCUFsbFJjdkJsb2NrQ291bnQ7CS8vIE51bWJlciBvZiB0b3RhbCByZWNlaXZlIGJsb2NrcwotCXVzaG9ydAkJCQkJCVJlY2VpdmVCdWZmZXJTaXplOwkvLyBTWEdfUkNWX0RBVEEvSlVNQk9fQlVGRkVSX1NJWkUgb25seQotCXUzMgkJCQkJCUFsbG9jYXRpb25zUGVuZGluZzsJLy8gUmVjZWl2ZSBhbGxvY2F0aW9uIHBlbmRpbmcKLQl1MzIJCQkJCQlSY3ZCdWZmZXJzT25DYXJkOwkvLyBTWEdfREFUQV9CVUZGRVJTIG93bmVkIGJ5IGNhcmQKLQkvLyBTR0wgYnVmZmVycworCXN0cnVjdCBzeGdfcmluZ19pbmZvCVJjdlJpbmdaZXJvSW5mbzsJLyogUmVjZWl2ZSByaW5nIDAgaW5mbyAqLworCisJdTMyICoJCUlzcjsJCS8qIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlkbWFfYWRkcl90CVBJc3I7CQkvKiBJU1IgLSBwaHlzaWNhbCBhZGRyZXNzICovCisJdTMyCQlJc3JDb3B5W1NYR19NQVhfUlNTXTsJLyogQ29weSBvZiBJU1IgKi8KKwl1c2hvcnQJCUludGVycnVwdHNFbmFibGVkOwkvKiBCaXRtYXNrIG9mIGVuYWJsZWQgdmVjdG9ycyAqLworCXVuc2lnbmVkIGNoYXIgCSpJbmRpcmVjdGlvblRhYmxlOwkvKiBSU1MgaW5kaXJlY3Rpb24gdGFibGUgKi8KKwlkbWFfYWRkcl90CVBJbmRpcmVjdGlvblRhYmxlOwkvKiBQaHlzaWNhbCBhZGRyZXNzICovCisJdXNob3J0CQlSc3NUYWJsZVNpemU7CQkvKiBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTICovCisJdXNob3J0CQlIYXNoS2V5U2l6ZTsJCS8qIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMgKi8KKwl1bnNpZ25lZCBjaGFyCUhhc2hTZWNyZXRLZXlbNDBdOwkvKiByc3Mga2V5ICovCisJdTMyCQlIYXNoSW5mb3JtYXRpb247CisJLyogUmVjZWl2ZSBidWZmZXIgcXVldWVzICovCisJc3BpbmxvY2tfdCAgICAgIFJjdlFMb2NrOyAgICAgICAJLyogUmVjZWl2ZSBRdWV1ZSBMb2NrICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZVJjdkJ1ZmZlcnM7CQkvKiBGcmVlIFNYR19EQVRBX0JVRkZFUiBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVSY3ZCbG9ja3M7CQkvKiBGcmVlIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBRICovCisJc3RydWN0IGxpc3RfZW50cnkJQWxsUmN2QmxvY2tzOwkJLyogQWxsIFNYR19SQ1ZfQkxPQ0tzICovCisJdXNob3J0CQlGcmVlUmN2QnVmZmVyQ291bnQ7CS8qIE51bWJlciBvZiBmcmVlIHJjdiBkYXRhIGJ1ZmZlcnMgKi8KKwl1c2hvcnQJCUZyZWVSY3ZCbG9ja0NvdW50OwkvKiAjIG9mIGZyZWUgcmN2IGRlc2NyaXB0b3IgYmxvY2tzICovCisJdXNob3J0CQlBbGxSY3ZCbG9ja0NvdW50OwkvKiBOdW1iZXIgb2YgdG90YWwgcmVjZWl2ZSBibG9ja3MgKi8KKwl1c2hvcnQJCVJlY2VpdmVCdWZmZXJTaXplOwkvKiBTWEdfUkNWX0RBVEEvSlVNQk9fQlVGRkVSX1NJWkUgb25seSAqLworCS8qIENvbnZlcnRlZCB0aGlzIHRvIGEgYXRvbWljIHZhcmlhYmxlCisJdTMyCQkJQWxsb2NhdGlvbnNQZW5kaW5nOwkqLworCWF0b21pY190CQlwZW5kaW5nX2FsbG9jYXRpb25zOworCXUzMgkJQWxsb2NhdGlvbnNQZW5kaW5nOwkvKiBSZWNlaXZlIGFsbG9jYXRpb24gcGVuZGluZyAqLworCXUzMgkJUmN2QnVmZmVyc09uQ2FyZDsJLyogU1hHX0RBVEFfQlVGRkVSUyBvd25lZCBieSBjYXJkICovCisJLyogU0dMIGJ1ZmZlcnMgKi8KIAlzcGlubG9ja190CVNnbFFMb2NrOwkvKiBTR0wgUXVldWUgTG9jayAqLwotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlGcmVlU2dsQnVmZmVyczsJCS8vIEZyZWUgU1hHX1NDQVRURVJfR0FUSEVSCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUFsbFNnbEJ1ZmZlcnM7CQkvLyBBbGwgU1hHX1NDQVRURVJfR0FUSEVSCi0JdXNob3J0CQkJCQkJRnJlZVNnbEJ1ZmZlckNvdW50OwkvLyBOdW1iZXIgb2YgZnJlZSBTR0wgYnVmZmVycwotCXVzaG9ydAkJCQkJCUFsbFNnbEJ1ZmZlckNvdW50OwkvLyBOdW1iZXIgb2YgdG90YWwgU0dMIGJ1ZmZlcnMKLQl1MzIJCQkJCQlDdXJyZW50VGltZTsJCS8vIFRpY2sgY291bnQKLQl1MzIJCQkJCQlGYXN0cGF0aENvbm5lY3Rpb25zOy8vICMgb2YgZmFzdHBhdGggY29ubmVjdGlvbnMKLQkvLyBWYXJpb3VzIHNpbmdsZS1iaXQgZmxhZ3M6Ci0JdTMyCQkJCQkJQmFzaWNBbGxvY2F0aW9uczoxOwkvLyBMb2NrcyBhbmQgbGlzdGhlYWRzCi0JdTMyCQkJCQkJSW50UmVnaXN0ZXJlZDoxOwkvLyBJbnRlcnJ1cHQgcmVnaXN0ZXJlZAotCXUzMgkJCQkJCVBpbmdPdXRzdGFuZGluZzoxOwkvLyBQaW5nIG91dHN0YW5kaW5nIHRvIGNhcmQKLQl1MzIJCQkJCQlEZWFkOjE7CQkJCS8vIENhcmQgZGVhZAotCXUzMgkJCQkJCUR1bXBEcml2ZXI6MTsJCS8vIE9JRF9TTElDX0RSSVZFUl9EVU1QIHJlcXVlc3QKLQl1MzIJCQkJCQlEdW1wQ2FyZDoxOwkJCS8vIE9JRF9TTElDX0NBUkRfRFVNUCByZXF1ZXN0Ci0JdTMyCQkJCQkJRHVtcENtZFJ1bm5pbmc6MTsJLy8gRHVtcCBjb21tYW5kIGluIHByb2dyZXNzCi0JdTMyCQkJCQkJRGVidWdSdW5uaW5nOjE7CQkvLyBBR0RCIGRlYnVnIGluIHByb2dyZXNzCi0JdTMyCQkJCQkJSnVtYm9FbmFibGVkOjE7CQkvLyBKdW1ibyBmcmFtZXMgZW5hYmxlZAotCXUzMgkJCQkJCU1zaUVuYWJsZWQ6MTsJCS8vIE1TSSBpbnRlcnJ1cHQgZW5hYmxlZAotCXUzMgkJCQkJCVJzc0VuYWJsZWQ6MTsJCS8vIFJTUyBFbmFibGVkCi0JdTMyCQkJCQkJRmFpbE9uQmFkRWVwcm9tOjE7CS8vIEZhaWwgb24gQmFkIEVlcHJvbQotCXUzMgkJCQkJCURpYWdTdGFydDoxOwkJLy8gSW5pdCBhZGFwdGVyIGZvciBkaWFnbm9zdGljIHN0YXJ0Ci0JLy8gU3RhdHMKLQl1MzIJCQkJCQlQZW5kaW5nUmN2Q291bnQ7CS8vIE91dHN0YW5kaW5nIHJjdiBpbmRpY2F0aW9ucwotCXUzMgkJCQkJCVBlbmRpbmdYbXRDb3VudDsJLy8gT3V0c3RhbmRpbmcgc2VuZCByZXF1ZXN0cwotCXN0cnVjdCBTWEdfU1RBVFMJCQkJU3RhdHM7CQkJCS8vIFN0YXRpc3RpY3MKLQl1MzIJCQkJCQlSZWFzc0J1ZnM7CQkJLy8gTnVtYmVyIG9mIHJlYXNzZW1ibHkgYnVmZmVycwotCS8vIENhcmQgQ3Jhc2ggSW5mbwotCXVzaG9ydAkJCQkJCUNyYXNoTG9jYXRpb247CQkvLyBNaWNyb2NvZGUgY3Jhc2ggbG9jYXRpb24KLQl1bnNpZ25lZCBjaGFyCQkJCQkJQ3Jhc2hDcHU7CQkJLy8gU2FoYXJhIENQVSBJRAotCS8vIERpYWdub3N0aWNzCi0JLy8JUERJQUdfQ01ECQkJCQlEaWFnQ21kczsJCQkvLyBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBjb21tYW5kcwotCS8vCVBESUFHX0JVRkZFUgkJCQlEaWFnQnVmZmVyczsJCS8vIExpc3Qgb2YgZnJlZSBkaWFnbm9zdGljIGJ1ZmZlcnMKLQkvLwlQRElBR19SRVEJCQkJCURpYWdSZXFROwkJCS8vIExpc3Qgb2Ygb3V0c3RhbmRpbmcgKGFzeW5jaHJvbm91cykgZGlhZyByZXF1ZXN0cwotCS8vCXUzMgkJCQkJCURpYWdDbWRUaW1lb3V0OwkJLy8gVGltZSBvdXQgZm9yIGRpYWcgY21kcyAoc2Vjb25kcykgWFhYVE9ETyAtIHJlcGxhY2Ugd2l0aCBTWEdfUEFSQU0gdmFyPwotCS8vCXVuc2lnbmVkIGNoYXIJCQkJCQlEaWFnRG1hRGVzY1tETUFfQ1BVX0NUWFNdOwkJLy8gRnJlZSBETUEgZGVzY3JpcHRvcnMgYml0IGZpZWxkICgzMiBDUFUgY3R4ICogOCBETUEgY3R4KQotCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gUHV0IHByZXByb2Nlc3Nvci1jb25kaXRpb25hbCBmaWVsZHMgYXQgdGhlIGVuZCBzbyB3ZSBkb24ndAotCS8vIGhhdmUgdG8gcmVjb21waWxlIHN4Z2RiZyBldmVyeXRpbWUgd2UgcmVjb25maWd1cmUgdGhlIGRyaXZlcgotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCXZvaWQgKgkJCQkJCVBlbmRpbmdTZXRSc3M7CQkvLyBQZW5kaW5nIFJTUyBwYXJhbWV0ZXIgY2hhbmdlCi0JdTMyCQkJCQkJSVB2NEhkclNpemU7CQkvLyBTaGFyZWQgNS4yLzYuMCBlbmNhcCBwYXJhbQotCXVuc2lnbmVkIGNoYXIgKiAgICAgICAgICAJCQlJbnRlcnJ1cHRJbmZvOwkJLy8gQWxsb2NhdGVkIGJ5IHVzIGR1cmluZyBBZGREZXZpY2UKKwlzdHJ1Y3QgbGlzdF9lbnRyeQlGcmVlU2dsQnVmZmVyczsJCS8qIEZyZWUgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUFsbFNnbEJ1ZmZlcnM7CQkvKiBBbGwgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqLworCXVzaG9ydAkJRnJlZVNnbEJ1ZmZlckNvdW50OwkvKiBOdW1iZXIgb2YgZnJlZSBTR0wgYnVmZmVycyAqLworCXVzaG9ydAkJQWxsU2dsQnVmZmVyQ291bnQ7CS8qIE51bWJlciBvZiB0b3RhbCBTR0wgYnVmZmVycyAqLworCXUzMgkJQ3VycmVudFRpbWU7CQkvKiBUaWNrIGNvdW50ICovCisJdTMyCQlGYXN0cGF0aENvbm5lY3Rpb25zOy8qICMgb2YgZmFzdHBhdGggY29ubmVjdGlvbnMgKi8KKwkvKiBWYXJpb3VzIHNpbmdsZS1iaXQgZmxhZ3M6ICovCisJdTMyCQlCYXNpY0FsbG9jYXRpb25zOjE7CS8qIExvY2tzIGFuZCBsaXN0aGVhZHMgKi8KKwl1MzIJCUludFJlZ2lzdGVyZWQ6MTsJLyogSW50ZXJydXB0IHJlZ2lzdGVyZWQgKi8KKwl1MzIJCVBpbmdPdXRzdGFuZGluZzoxOwkvKiBQaW5nIG91dHN0YW5kaW5nIHRvIGNhcmQgKi8KKwl1MzIJCURlYWQ6MTsJCQkJLyogQ2FyZCBkZWFkICovCisJdTMyCQlEdW1wRHJpdmVyOjE7CQkvKiBPSURfU0xJQ19EUklWRVJfRFVNUCByZXF1ZXN0ICovCisJdTMyCQlEdW1wQ2FyZDoxOwkJCS8qIE9JRF9TTElDX0NBUkRfRFVNUCByZXF1ZXN0ICovCisJdTMyCQlEdW1wQ21kUnVubmluZzoxOwkvKiBEdW1wIGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KKwl1MzIJCURlYnVnUnVubmluZzoxOwkJLyogQUdEQiBkZWJ1ZyBpbiBwcm9ncmVzcyAqLworCXUzMgkJSnVtYm9FbmFibGVkOjE7CQkvKiBKdW1ibyBmcmFtZXMgZW5hYmxlZCAqLworCXUzMgkJbXNpX2VuYWJsZWQ6MTsJCS8qIE1TSSBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCXUzMgkJUnNzRW5hYmxlZDoxOwkJLyogUlNTIEVuYWJsZWQgKi8KKwl1MzIJCUZhaWxPbkJhZEVlcHJvbToxOwkvKiBGYWlsIG9uIEJhZCBFZXByb20gKi8KKwl1MzIJCURpYWdTdGFydDoxOwkJLyogSW5pdCBhZGFwdGVyIGZvciBkaWFnbm9zdGljIHN0YXJ0ICovCisgCXUzMiAJCVhtdEZjRW5hYmxlZDoxOworIAl1MzIgCQlSY3ZGY0VuYWJsZWQ6MTsKKwkvKiBTdGF0cyAqLworCXUzMgkJUGVuZGluZ1JjdkNvdW50OwkvKiBPdXRzdGFuZGluZyByY3YgaW5kaWNhdGlvbnMgKi8KKwl1MzIJCVBlbmRpbmdYbXRDb3VudDsJLyogT3V0c3RhbmRpbmcgc2VuZCByZXF1ZXN0cyAqLworCXN0cnVjdCBzeGdfc3RhdHMJU3RhdHM7CQkJCS8qIFN0YXRpc3RpY3MgKi8KKwl1MzIJCVJlYXNzQnVmczsJCQkvKiBOdW1iZXIgb2YgcmVhc3NlbWJseSBidWZmZXJzICovCisJLyogQ2FyZCBDcmFzaCBJbmZvICovCisJdXNob3J0CQlDcmFzaExvY2F0aW9uOwkJLyogTWljcm9jb2RlIGNyYXNoIGxvY2F0aW9uICovCisJdW5zaWduZWQgY2hhcglDcmFzaENwdTsJCQkvKiBTYWhhcmEgQ1BVIElEICovCisJLyogRGlhZ25vc3RpY3MgKi8KKwkvKglQRElBR19DTUQJRGlhZ0NtZHM7ICovCQkJLyogTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgY29tbWFuZHMgKi8KKwkvKglQRElBR19CVUZGRVIJRGlhZ0J1ZmZlcnM7ICovCQkvKiBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBidWZmZXJzICovCisJLyoJUERJQUdfUkVRCURpYWdSZXFROyAqLwkJCS8qIExpc3Qgb2Ygb3V0c3RhbmRpbmcgKGFzeW5jaHJvbm91cykgZGlhZyByZXF1ZXN0cyAqLworCS8qCXUzMgkJRGlhZ0NtZFRpbWVvdXQ7ICovCQkvKiBUaW1lIG91dCBmb3IgZGlhZyBjbWRzIChzZWNvbmRzKSBYWFhUT0RPIC0gcmVwbGFjZSB3aXRoIFNYR19QQVJBTSB2YXI/ICovCisJLyoJdW5zaWduZWQgY2hhcglEaWFnRG1hRGVzY1tETUFfQ1BVX0NUWFNdOyAqLwkJLyogRnJlZSBETUEgZGVzY3JpcHRvcnMgYml0IGZpZWxkICgzMiBDUFUgY3R4ICogOCBETUEgY3R4KSAqLworCS8qCisJICogUHV0IHByZXByb2Nlc3Nvci1jb25kaXRpb25hbCBmaWVsZHMgYXQgdGhlIGVuZCBzbyB3ZSBkb24ndAorCSAqIGhhdmUgdG8gcmVjb21waWxlIHN4Z2RiZyBldmVyeXRpbWUgd2UgcmVjb25maWd1cmUgdGhlIGRyaXZlcgorCSAqLwogI2lmIGRlZmluZWQoQ09ORklHX1g4NikKLQl1MzIJCQkJCQlBZGRyVXBwZXI7CQkJLy8gVXBwZXIgMzIgYml0cyBvZiA2NC1iaXQgcmVnaXN0ZXIKKwl1MzIJCUFkZHJVcHBlcjsJCQkvKiBVcHBlciAzMiBiaXRzIG9mIDY0LWJpdCByZWdpc3RlciAqLwogI2VuZGlmCi0JLy8jaWYgU1hHX0ZBSUxVUkVfRFVNUAotCS8vCU5ESVNfRVZFTlQJCQkJCUR1bXBUaHJlYWRFdmVudDsJLy8gc3luY3Jvbml6ZSBkdW1wIHRocmVhZAotCS8vCUJPT0xFQU4JCQkJCQlEdW1wVGhyZWFkUnVubmluZzsJLy8gdGVybWluYXRpb24gZmxhZwotCS8vCVBTWEdfRFVNUF9DTUQJCQkJRHVtcEJ1ZmZlcjsJCQkvLyA2OGsgLSBDbWQgYW5kIEJ1ZmZlcgotCS8vCWRtYV9hZGRyX3QJCVBEdW1wQnVmZmVyOwkJLy8gUGh5c2ljYWwgYWRkcmVzcwotCS8vI2VuZGlmIC8vIFNYR19GQUlMVVJFX0RVTVAKLQorCXVuc2lnbmVkIHNob3J0IG1heF9hZ2dyZWdhdGlvbjsKKwl1bnNpZ25lZCBzaG9ydCBtaW5fYWdncmVnYXRpb247CisJLyojaWYgU1hHX0ZBSUxVUkVfRFVNUCAqLworCS8qCU5ESVNfRVZFTlQJRHVtcFRocmVhZEV2ZW50OyAqLwkvKiBzeW5jcm9uaXplIGR1bXAgdGhyZWFkICovCisJLyoJQk9PTEVBTgkJRHVtcFRocmVhZFJ1bm5pbmc7ICovCS8qIHRlcm1pbmF0aW9uIGZsYWcgKi8KKwkvKglQU1hHX0RVTVBfQ01ECUR1bXBCdWZmZXI7ICovCQkJLyogNjhrIC0gQ21kIGFuZCBCdWZmZXIgKi8KKwkvKglkbWFfYWRkcl90CVBEdW1wQnVmZmVyOyAqLwkJLyogUGh5c2ljYWwgYWRkcmVzcyAqLworCS8qI2VuZGlmICovIC8qIFNYR19GQUlMVVJFX0RVTVAgKi8KKwkvKk1TSS1YIHJlbGF0ZWQgZGF0YSBlbGVtZW50cyovCisJdTMyIG5yX21zaXhfZW50cmllczsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpX2VudHJpZXM7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHVwZGF0ZV9saW5rX3N0YXR1czsKKwl1MzIgCWxpbmtfc3RhdHVzX2NoYW5nZWQ7CiB9OwogCiAjaWYgU0xJQ19EVU1QX0VOQUJMRUQKQEAgLTcxMCwxMiArNzI1LDEwIEBACiAjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCiAjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgorLyoKICAqIE1pY3JvY29kZSBjcmFzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICBUaGlzCiAgKiBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGNhcmQncyBTUkFNIHdoZW4gdGhlIG1pY3JvY29kZSBwYW5pYydzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICovCiBzdHJ1Y3Qgc2xpY19jcmFzaF9pbmZvIHsKICAgICB1c2hvcnQgIGNwdV9pZDsKICAgICB1c2hvcnQgIGNyYXNoX3BjOwpAQCAtNzM4LDIxICs3NTEsMjUgQEAKICAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLSNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgXAotICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgCVwKKyAgICAgICAgX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBFVEhFUk1BWEZSQU1FICAgMTUxNAogI2RlZmluZSBKVU1CT01BWEZSQU1FICAgOTAxNAogCisjZGVmaW5lIFNYR19KVU1CT19NVFUgOTAwMAorI2RlZmluZSBTWEdfREVGQVVMVF9NVFUgMTUwMAorCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQogI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAodTMyKSgodTY0KShfYWRkcikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCi0jZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKSgoKHU2NCkoX2FkZHIpID4+IDMyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRikKKyNkZWZpbmUgICBTWEdfR0VUX0FERFJfSElHSChfYWRkcikgIAkJCQkJXAorCQkJKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCiAjZWxzZQogI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAgKHUzMilfYWRkcgogI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCkBAIC03NjEsOCArNzc4LDEwIEBACiAjZGVmaW5lIEZMVVNIICAgICAgIFRSVUUKICNkZWZpbmUgRE9OVF9GTFVTSCAgRkFMU0UKIAotI2RlZmluZSBTSU9DU0xJQ0RVTVBDQVJEICAgICAgICAgU0lPQ0RFVlBSSVZBVEUrOQotI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgU0lPQ0RFVlBSSVZBVEUrMTAKLSNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIFNJT0NERVZQUklWQVRFKzExCisjZGVmaW5lIFNJT0NTTElDRFVNUENBUkQgICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrOSkKKyNkZWZpbmUgU0lPQ1NMSUNTRVRJTlRBR0cgICAgICAgIChTSU9DREVWUFJJVkFURSsxMCkKKyNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIChTSU9DREVWUFJJVkFURSsxMSkKIAorZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBzeGdfbmljX2V0aHRvb2xfb3BzOworI2RlZmluZSBTWEdfQ09NUExFVEVfU0xPV19TRU5EX0xJTUlUCTEyOAogI2VuZGlmIC8qICBfX1NYR19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19ldGh0b29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX2V0aHRvb2wuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Z19ldGh0b29sLmMKKyAqCisgKiBUaGUgZXRodG9vbCBzdXBwb3J0IGZvciBTWEcgZHJpdmVyIGZvciBBbGFjcml0ZWNoJ3MgMTBHYmUgcHJvZHVjdHMuCisgKgorICogTk9URTogVGhpcyBpcyB0aGUgc3RhbmRhcmQsIG5vbi1hY2NlbGVyYXRlZCB2ZXJzaW9uIG9mIEFsYWNyaXRlY2gncworICogICAgICAgSVMtTklDIGRyaXZlci4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJzeGdfb3MuaCIKKyNpbmNsdWRlICJzeGdody5oIgorI2luY2x1ZGUgInN4Z2hpZi5oIgorI2luY2x1ZGUgInN4Zy5oIgorCitzdHJ1Y3Qgc3hnX25pY19zdGF0cyB7CisgICAgICAgIGNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKKyAgICAgICAgaW50IHNpemVvZl9zdGF0OworICAgICAgICBpbnQgc3RhdF9vZmZzZXQ7Cit9OworCisjZGVmaW5lIFNYR19OSUNfU1RBVFMobSkgc2l6ZW9mKCgoc3RydWN0IGFkYXB0ZXJfdCAqKTApLT5tKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBhZGFwdGVyX3QsIG0pCisKKyNkZWZpbmUgVVNFUl9WSUVXQUJMRV9FRVBST01fU0laRQkyOAorCitzdGF0aWMgc3RydWN0IHN4Z19uaWNfc3RhdHMgc3hnX25pY19nc3RyaW5nc19zdGF0c1tdID0geworCXsieG1pdF9yaW5nXzBfZnVsbCIsIFNYR19OSUNfU1RBVFMoU3RhdHMuWG10WmVyb0Z1bGwpfSwKKworCS8qIE1heSBiZSB3aWxsIG5lZWQgaW4gZnV0dXJlICovCisvKgl7ImR1bWJfeG1pdF9icm9hZGNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlhtdEJjYXN0UGt0cyl9LAorCXsiZHVtYl94bWl0X2Jyb2FkY2FzdF9ieXRlcyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlhtdEJjYXN0Qnl0ZXMpfSwKKwl7ImR1bWJfeG1pdF91bmljYXN0X3BhY2tldHMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJYbXRVY2FzdFBrdHMpfSwKKwl7ImR1bWJfeG1pdF91bmljYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iWG10VWNhc3RCeXRlcyl9LAorKi8KKwl7InhtaXRfcXVldWVfbGVuZ3RoIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5YbXRRTGVuKX0sCisJeyJtZW1vcnlfYWxsb2NhdGlvbl9mYWlsdXJlIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5Ob01lbSl9LAorCXsiSW50ZXJydXB0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTnVtSW50cyl9LAorCXsiZmFsc2VfaW50ZXJydXB0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRmFsc2VJbnRzKX0sCisJeyJwcm9jZXNzZWRfZGF0YV9xdWV1ZV9mdWxsIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5QZHFGdWxsKX0sCisJeyJldmVudF9yaW5nX2Z1bGwiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkV2ZW50UmluZ0Z1bGwpfSwKKwl7InRyYW5zcG9ydF9jaGVja3N1bV9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuVHJhbnNwb3J0Q3N1bSl9LAorCXsidHJhbnNwb3J0X3VuZGVyZmxvd19lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuVHJhbnNwb3J0VWZsb3cpfSwKKwl7InRyYW5zcG9ydF9oZWFkZXJfbGVuZ3RoX2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5UcmFuc3BvcnRIZHJMZW4pfSwKKwl7Im5ldHdvcmtfY2hlY2tzdW1fZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLk5ldHdvcmtDc3VtKX0sCisJeyJuZXR3b3JrX3VuZGVyZmxvd19lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTmV0d29ya1VmbG93KX0sCisJeyJuZXR3b3JrX2hlYWRlcl9sZW5ndGhfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLk5ldHdvcmtIZHJMZW4pfSwKKwl7InJlY2VpdmVfcGFyaXR5X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5QYXJpdHkpfSwKKwl7ImxpbmtfcGFyaXR5X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rUGFyaXR5KX0sCisJeyJsaW5rL2RhdGEgZWFybHlfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtFYXJseSl9LAorCXsiYnVmZmVyX292ZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rQnVmT2Zsb3cpfSwKKwl7ImxpbmtfY29kZV9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTGlua0NvZGUpfSwKKwl7ImRyaWJibGUgbmliYmxlIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rRHJpYmJsZSl9LAorCXsiQ1JDX2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rQ3JjKX0sCisJeyJsaW5rX292ZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rT2Zsb3cpfSwKKwl7ImxpbmtfdW5kZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rVWZsb3cpfSwKKworCS8qIE1heSBiZSBuZWVkIGluIGZ1dHVyZSAqLworLyoJeyJkdW1iX3Jjdl9icm9hZGNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlJjdkJjYXN0UGt0cyl9LAorCXsiZHVtYl9yY3ZfYnJvYWRjYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyl9LAorKi8JeyJkdW1iX3Jjdl9tdWx0aWNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlJjdk1jYXN0UGt0cyl9LAorCXsiZHVtYl9yY3ZfbXVsdGljYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iUmN2TWNhc3RCeXRlcyl9LAorLyoJeyJkdW1iX3Jjdl91bmljYXN0X3BhY2tldHMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJSY3ZVY2FzdFBrdHMpfSwKKwl7ImR1bWJfcmN2X3VuaWNhc3RfYnl0ZXMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJSY3ZVY2FzdEJ5dGVzKX0sCisqLworCXsibm9fc2dsX2J1ZmZlciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTm9TZ2xCdWYpfSwKK307CisKKyNkZWZpbmUgU1hHX05JQ19TVEFUU19MRU4JQVJSQVlfU0laRShzeGdfbmljX2dzdHJpbmdzX3N0YXRzKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIGJvb2wgZmx1c2gpCit7CisgICAgICAgIHdyaXRlbCh2YWx1ZSwgcmVnKTsKKyAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICAgICAgICAgIG1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeGdfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCB2YWx1ZSwgdTMyIGNwdSkKK3sKKyAgICAgICAgdTMyIHZhbHVlX2hpZ2ggPSAodTMyKSAodmFsdWUgPj4gMzIpOworICAgICAgICB1MzIgdmFsdWVfbG93ID0gKHUzMikgKHZhbHVlICYgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Qml0NjRSZWdMb2NrLCBmbGFncyk7CisgICAgICAgIHdyaXRlbCh2YWx1ZV9oaWdoLCAodm9pZCBfX2lvbWVtICopKCZhZGFwdGVyLT5VY29kZVJlZ3NbY3B1XS5VcHBlcikpOworICAgICAgICB3cml0ZWwodmFsdWVfbG93LCByZWcpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3N4Z19uaWNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgc3hnX2RyaXZlcl9uYW1lLCAzMik7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBTWEdfRFJWX1ZFUlNJT04sIDMyKTsKKy8vCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgU0FIQVJBX1VDT0RFX1ZFUlNfU1RSSU5HLCAzMik7CisJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGNpZGV2KSwgMzIpOworCS8qIFRPRE8gOiBSZWFkIHRoZSBtYWpvciBhbmQgbWlub3IgbnVtYmVyIG9mIGZpcm13YXJlLiBJcyB0aGlzCisgCSAqIGZyb20gdGhlIEZMQVNIL0VFUFJPTSBvciBkb3dubG9hZCBmaWxlID8KKyAJICovCisJLyogTElOU1lTIDogQ2hlY2sgaWYgdGhpcyBpcyBjb3JyZWN0IG9yIGlmIG5vdCBmaW5kIHRoZSByaWdodCB2YWx1ZQorIAkgKiBBbHNvIGNoZWNrIHdoYXQgaXMgdGhlIHJpZ2h0IEVFUFJPTSBsZW5ndGggOiBFRVBST01fU0laRV9YRk1SIG9yIEVFUFJPTV9TSVpFX05PX1hGTVIKKyAJICovCit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwkvKiBObyBzZXR0aW5ncyBhcmUgYXBwbGljYWJsZSBhcyB3ZSBzdXBwb3J0IG9ubHkgMTBHYi9GSUJSRV9tZWRpYSAqLworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIHZvaWQKK3N4Z19uaWNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQoreworCWludCBpbmRleDsKKworCXN3aXRjaChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQlicmVhazsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgU1hHX05JQ19TVEFUU19MRU47IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAJbWVtY3B5KGRhdGEgKyBpbmRleCAqIEVUSF9HU1RSSU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIAlzeGdfbmljX2dzdHJpbmdzX3N0YXRzW2luZGV4XS5zdGF0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJRVRIX0dTVFJJTkdfTEVOKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorc3hnX25pY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKiBkYXRhKQoreworICAgICAgICBzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKyAgICAgICAgaW50IGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBTWEdfTklDX1NUQVRTX0xFTjsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGNoYXIgKnAgPSAoY2hhciAqKWFkYXB0ZXIgKworCQkJCXN4Z19uaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnN0YXRfb2Zmc2V0OworICAgICAgICAgICAgICAgIGRhdGFbaW5kZXhdID0gKHN4Z19uaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnNpemVvZl9zdGF0ID09CisJCSAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1NjQpKSA/ICoodTY0ICopIHAgOiAqKHUzMiAqKSBwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKK3sKKyAgICAgICAgc3dpdGNoIChzc2V0KSB7CisgICAgICAgIGNhc2UgRVRIX1NTX1NUQVRTOgorICAgICAgIAkJcmV0dXJuIFNYR19OSUNfU1RBVFNfTEVOOworCWRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKyAgICAgICAgZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKKyAgICAgICAgZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwkJLy9WU1MgY2hlY2sgVGhpcworICAgICAgICBlY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CS8vVlNTIGNoZWNrIFRoaXMKKworCS8qIEZvciBGaWJyZSBDaGFubmVsICovCisJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9GSUJSRTsKKyAgICAgICAgZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEX0ZJQlJFKTsKKwllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKworCisJLyogTGluayBTcGVlZCAqLworCWlmKGFkYXB0ZXItPkxpbmtTdGF0ZSAmIFNYR19MSU5LX1VQKSB7CisJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CS8vYWRhcHRlci0+TGlua1NwZWVkOworCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc3hnX25pY19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAoKGFkYXB0ZXItPmZsYWdzICYgU1hHX1JDVl9JUF9DU1VNX0VOQUJMRUQpICYmCisJCSAoYWRhcHRlci0+ZmxhZ3MgJiBTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQpKTsKK30KKworc3RhdGljIGludCBzeGdfbmljX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChkYXRhKQorCQlhZGFwdGVyLT5mbGFncyB8PSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRDsKKwllbHNlCisJCWFkYXB0ZXItPmZsYWdzICY9IH5TWEdfUkNWX0lQX0NTVU1fRU5BQkxFRDsKKwkvKgorCSAqIFdlIGRvbnQgbmVlZCB0byB3cml0ZSB0byB0aGUgY2FyZCB0byBkbyBjaGVja3N1bXMuCisJICogSXQgZG9lcyBpdCBhbnl3YXlzLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN4Z19uaWNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChTWEdfSFdSRUdfTUVNU0laRSArIFNYR19VQ09ERVJFR19NRU1TSVpFKTsKK30KKworc3RhdGljIHZvaWQgc3hnX25pY19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MgKlVjb2RlUmVncyA9IGFkYXB0ZXItPlVjb2RlUmVnczsKKwl1MzIgKmJ1ZmYgPSBwOworCisJbWVtc2V0KHAsIDAsIChzaXplb2Yoc3RydWN0IHN4Z19od19yZWdzKStzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9yZWdzKSkpOworCW1lbWNweShidWZmLCBId1JlZ3MsIHNpemVvZihzdHJ1Y3Qgc3hnX2h3X3JlZ3MpKTsKKwltZW1jcHkoKGJ1ZmYrc2l6ZW9mKHN0cnVjdCBzeGdfaHdfcmVncykpLCBVY29kZVJlZ3MsIHNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MpKTsKK30KKworc3RhdGljIGludCBzeGdfbmljX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIChVU0VSX1ZJRVdBQkxFX0VFUFJPTV9TSVpFKTsKK30KKworc3RhdGljIGludCBzeGdfbmljX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzd19jZmdfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBpLCBzdGF0dXM7CisJZG1hX2FkZHJfdCBwX2FkZHI7CisKKwlkYXRhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBzaXplb2Yoc3RydWN0IHN3X2NmZ19kYXRhKSwKKwkJCQkJICZwX2FkZHIpOworCWlmKCFkYXRhKSB7CisgICAgICAgICAgICAgICAgLyoKKwkJICogV2UgY2FudCBnZXQgZXZlbiB0aGlzIG11Y2ggbWVtb3J5LiBSYWlzZSBhIGhlbGwKKyAgICAgICAgICAgICAgICAgKiBHZXQgb3V0IG9mIGhlcmUKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIiJXMgOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZWFkaW5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUVQUk9NXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWdTdGF0LCBTWEdfQ0ZHX1RJTUVPVVQsIFRSVUUpOworICAgICAgICBXUklURV9SRUc2NChhZGFwdGVyLCBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ29uZmlnLCBwX2FkZHIsIDApOworCWZvcihpPTA7IGk8MTAwMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgUkVBRF9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZ1N0YXQsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBTWEdfQ0ZHX1RJTUVPVVQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtZGVsYXkoMSk7ICAgICAgLyogRG8gd2UgcmVhbGx5IG5lZWQgdGhpcyAqLworICAgICAgICB9CisKKwltZW1zZXQoYnl0ZXMsIDAsIGVlcHJvbS0+bGVuKTsKKyAgICAgICAgbWVtY3B5KGJ5dGVzLCBkYXRhLT5NYWNBZGRyWzBdLk1hY0FkZHIsIHNpemVvZihzdHJ1Y3Qgc3hnX2NvbmZpZ19tYWMpKTsKKyAgICAgICAgbWVtY3B5KGJ5dGVzKzYsIGRhdGEtPkF0a0ZydS5QYXJ0TnVtLCA2KTsKKyAgICAgICAgbWVtY3B5KGJ5dGVzKzEyLCBkYXRhLT5BdGtGcnUuUmV2aXNpb24sIDIpOworICAgICAgICBtZW1jcHkoYnl0ZXMrMTQsIGRhdGEtPkF0a0ZydS5TZXJpYWwsIDE0KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzID0gc3hnX25pY19nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IHN4Z19uaWNfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IHN4Z19uaWNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiA9IHN4Z19uaWNfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyA9IHN4Z19uaWNfZ2V0X3JlZ3MsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKy8vCS5nZXRfd29sID0gc3hnX25pY19nZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbiA9IHN4Z19uaWNfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gPSBzeGdfbmljX2dldF9lZXByb20sCisvLwkuZ2V0X3BhdXNlcGFyYW0gPSBzeGdfbmljX2dldF9wYXVzZXBhcmFtLAorLy8JLnNldF9wYXVzZXBhcmFtID0gc3hnX25pY19zZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCisvLwkuZ2V0X3RzbyA9IHN4Z19uaWNfZ2V0X3RzbywKKy8vCS5zZXRfdHNvID0gc3hnX25pY19zZXRfdHNvLAorLy8JLnNlbGZfdGVzdCA9IHN4Z19uaWNfZGlhZ190ZXN0LAorCS5nZXRfc3RyaW5ncyA9IHN4Z19uaWNfZ2V0X3N0cmluZ3MsCisJLmdldF9ldGh0b29sX3N0YXRzID0gc3hnX25pY19nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3NzZXRfY291bnQgPSBzeGdfbmljX2dldF9zc2V0X2NvdW50LAorCS5nZXRfcnhfY3N1bSA9IHN4Z19uaWNfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtID0gc3hnX25pY19zZXRfcnhfY3N1bSwKKy8vCS5nZXRfY29hbGVzY2UgPSBzeGdfbmljX2dldF9pbnRyX2NvYWxlc2NlLAorLy8JLnNldF9jb2FsZXNjZSA9IHN4Z19uaWNfc2V0X2ludHJfY29hbGVzY2UsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKaW5kZXggNmQzZjIzZi4uNjhlMWEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCkBAIC00NCwzNCArNDQsMzQgQEAKICNkZWZpbmUgRkFMU0UJKDApCiAjZGVmaW5lIFRSVUUJKDEpCiAKLXN0cnVjdCBMSVNUX0VOVFJZIHsKLQlzdHJ1Y3QgTElTVF9FTlRSWSAqbmxlX2ZsaW5rOwotCXN0cnVjdCBMSVNUX0VOVFJZICpubGVfYmxpbms7CitzdHJ1Y3QgbGlzdF9lbnRyeSB7CisJc3RydWN0IGxpc3RfZW50cnkgKm5sZV9mbGluazsKKwlzdHJ1Y3QgbGlzdF9lbnRyeSAqbmxlX2JsaW5rOwogfTsKIAotI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQobCkgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQobCkgICAgICAgICAgICAgICAgICAgCQkJXAogICAgICAgICAobCktPm5sZV9mbGluayA9IChsKS0+bmxlX2JsaW5rID0gKGwpCiAKLSNkZWZpbmUgSXNMaXN0RW1wdHkoaCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgSXNMaXN0RW1wdHkoaCkgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKICAgICAgICAgKChoKS0+bmxlX2ZsaW5rID09IChoKSkKIAotI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoZSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpiOyAgICAgXAotICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGYgPSAoZSktPm5sZV9mbGluazsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGIgPSAoZSktPm5sZV9ibGluazsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgICAgXAorI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoZSkgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpiOyAgICAgCQkJXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGYgPSAoZSktPm5sZV9mbGluazsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGIgPSAoZSktPm5sZV9ibGluazsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgICAgCQkJXAogICAgICAgICB9IHdoaWxlICgwKQogCiAvKiBUaGVzZSB0d28gaGF2ZSB0byBiZSBpbmxpbmVkIHNpbmNlIHRoZXkgcmV0dXJuIHRoaW5ncy4gKi8KIAotc3RhdGljIF9faW5saW5lIHN0cnVjdCBMSVNUX0VOVFJZICpSZW1vdmVIZWFkTGlzdChzdHJ1Y3QgTElTVF9FTlRSWSAqbCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfZW50cnkgKlJlbW92ZUhlYWRMaXN0KHN0cnVjdCBsaXN0X2VudHJ5ICpsKQogewotCXN0cnVjdCBMSVNUX0VOVFJZICpmOwotCXN0cnVjdCBMSVNUX0VOVFJZICplOworCXN0cnVjdCBsaXN0X2VudHJ5ICpmOworCXN0cnVjdCBsaXN0X2VudHJ5ICplOwogCiAJZSA9IGwtPm5sZV9mbGluazsKIAlmID0gZS0+bmxlX2ZsaW5rOwpAQCAtODEsMTAgKzgxLDEwIEBACiAJcmV0dXJuIChlKTsKIH0KIAotc3RhdGljIF9faW5saW5lIHN0cnVjdCBMSVNUX0VOVFJZICpSZW1vdmVUYWlsTGlzdChzdHJ1Y3QgTElTVF9FTlRSWSAqbCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfZW50cnkgKlJlbW92ZVRhaWxMaXN0KHN0cnVjdCBsaXN0X2VudHJ5ICpsKQogewotCXN0cnVjdCBMSVNUX0VOVFJZICpiOwotCXN0cnVjdCBMSVNUX0VOVFJZICplOworCXN0cnVjdCBsaXN0X2VudHJ5ICpiOworCXN0cnVjdCBsaXN0X2VudHJ5ICplOwogCiAJZSA9IGwtPm5sZV9ibGluazsKIAliID0gZS0+bmxlX2JsaW5rOwpAQCAtOTQsNTQgKzk0LDU2IEBACiAJcmV0dXJuIChlKTsKIH0KIAotI2RlZmluZSBJbnNlcnRUYWlsTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHN0cnVjdCBMSVNUX0VOVFJZICAgICAgICpiOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGIgPSAobCktPm5sZV9ibGluazsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gKGwpOyAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChsKS0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgXAorI2RlZmluZSBJbnNlcnRUYWlsTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2VudHJ5ICAgICAgICpiOyAgICAgCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGIgPSAobCktPm5sZV9ibGluazsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gKGwpOyAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIChsKS0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgCQkJXAogICAgICAgICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIEluc2VydEhlYWRMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3RydWN0IExJU1RfRU5UUlkgICAgICAgKmY7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZiA9IChsKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSBmOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBsOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGwpLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICBcCisjZGVmaW5lIEluc2VydEhlYWRMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfZW50cnkgICAgICAgKmY7ICAgICAJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgZiA9IChsKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSBmOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBsOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGwpLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICAJCQlcCiAgICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQVRLX0RFQlVHICAxCiAKICNpZiBBVEtfREVCVUcKLSNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNMSUNfVElNRVNUQU1QKHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgCVwKIH0KICNlbHNlCiAjZGVmaW5lIFNMSUNfVElNRVNUQU1QKHZhbHVlKQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKiogIFNYRyBERUZJTkVTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNYRyBERUZJTkVTICovCiAKICNpZmRlZiAgQVRLREJHCi0jZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIHZhbHVlID0gdGltZXYudHZfc2VjKjEwMDAwMDAgKyB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgIAlcCiB9CiAjZWxzZQogI2RlZmluZSBTWEdfVElNRVNUQU1QKHZhbHVlKQogI2VuZGlmCiAKLSNkZWZpbmUgV1JJVEVfUkVHKHJlZyx2YWx1ZSxmbHVzaCkgICAgICAgICAgICAgICAgICBzeGdfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQotI2RlZmluZSBXUklURV9SRUc2NChhLHJlZyx2YWx1ZSxjcHUpICAgICAgICAgICAgICAgIHN4Z19yZWc2NF93cml0ZSgoYSksKCZyZWcpLCh2YWx1ZSksKGNwdSkpCisjZGVmaW5lIFdSSVRFX1JFRyhyZWcsdmFsdWUsZmx1c2gpCQkJCQlcCisJCQkJc3hnX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSkKKyNkZWZpbmUgV1JJVEVfUkVHNjQoYSxyZWcsdmFsdWUsY3B1KQkJCQkJXAorCQkJCXN4Z19yZWc2NF93cml0ZSgoYSksKCZyZWcpLCh2YWx1ZSksKGNwdSkpCiAjZGVmaW5lIFJFQURfUkVHKHJlZyx2YWx1ZSkgICAodmFsdWUpID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKSgmcmVnKSkKIAogI2VuZGlmIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnZGJnLmgKaW5kZXggYmI1OGRkZi4uZTYxM2E5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oCkBAIC00NCwyMiArNDQsMjMgQEAKICNkZWZpbmUgX1NYR19ERUJVR19IXwogCiAjZGVmaW5lIEFUS0RCRyAgMQotI2RlZmluZSBBVEtfVFJBQ0VfRU5BQkxFRCAxCisjZGVmaW5lIEFUS19UUkFDRV9FTkFCTEVEIDAKIAotI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikJcHJpbnRrKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQorI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikJcHJpbnRrKEtFUk5fV0FSTklORyBuLCAjI2FyZ3MpCiAKICNpZmRlZiBBU1NFUlQKICN1bmRlZiBBU1NFUlQKICNlbmRpZgogCisjZGVmaW5lIFNYR19BU1NFUlRfRU5BQkxFRAogI2lmZGVmIFNYR19BU1NFUlRfRU5BQkxFRAogI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIERCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAotICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIERCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsIFwKKyAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAjZW5kaWYKICNlbHNlCkBAIC03OCw3ICs3OSw3IEBACiBleHRlcm4gdWxvbmcgQVRLVGltZXJEaXY7CiAKIC8qCi0gKiB0cmFjZV9lbnRyeV90IC0KKyAqIHRyYWNlX2VudHJ5IC0KICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGFuIGVudHJ5IGluIHRoZSB0cmFjZSBidWZmZXIuICBUaGUKICAqIGZpcnN0IGZldyBmaWVsZHMgbWVhbiB0aGUgc2FtZSBmcm9tIGVudHJ5IHRvIGVudHJ5LCB3aGlsZQpAQCAtODYsMzQgKzg3LDM0IEBACiAgKiBuZWVkcyBvZiB0aGUgdHJhY2UgZW50cnkuICBUeXBpY2FsbHkgdGhleSBhcmUgZnVuY3Rpb24gY2FsbAogICogcGFyYW1ldGVycy4KICAqLwotc3RydWN0IHRyYWNlX2VudHJ5X3QgewotICAgICAgICBjaGFyICAgICAgbmFtZVs4XTsgICAgICAgIC8qIDggY2hhcmFjdGVyIG5hbWUgLSBsaWtlICdzJ2knbSdiJ2EncidjJ3YnICovCi0gICAgICAgIHUzMiAgIHRpbWU7ICAgICAgICAgICAvKiBDdXJyZW50IGNsb2NrIHRpYyAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBjcHU7ICAgICAgICAgICAgLyogQ3VycmVudCBDUFUgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgaXJxbDsgICAgICAgICAgIC8qIEN1cnJlbnQgSVJRTCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBkcml2ZXI7ICAgICAgICAgLyogVGhlIGRyaXZlciB3aGljaCBhZGRlZCB0aGUgdHJhY2UgY2FsbCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQyOyAgICAgICAgICAgLyogcGFkIHRvIDQgYnl0ZSBib3VuZGFyeSAtIHdpbGwgcHJvYmFibHkgZ2V0IHVzZWQgKi8KLSAgICAgICAgdTMyICAgYXJnMTsgICAgICAgICAgIC8qIENhbGxlciBhcmcxICovCi0gICAgICAgIHUzMiAgIGFyZzI7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMiAqLwotICAgICAgICB1MzIgICBhcmczOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzMgKi8KLSAgICAgICAgdTMyICAgYXJnNDsgICAgICAgICAgIC8qIENhbGxlciBhcmc0ICovCitzdHJ1Y3QgdHJhY2VfZW50cnkgeworICAgICAgICBjaGFyICAgICAgCW5hbWVbOF07LyogOCBjaGFyYWN0ZXIgbmFtZSAtIGxpa2UgJ3MnaSdtJ2InYSdyJ2MndicgKi8KKyAgICAgICAgdTMyICAgCQl0aW1lOyAgLyogQ3VycmVudCBjbG9jayB0aWMgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGNwdTsgICAvKiBDdXJyZW50IENQVSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgaXJxbDsgIC8qIEN1cnJlbnQgSVJRTCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgZHJpdmVyOy8qIFRoZSBkcml2ZXIgd2hpY2ggYWRkZWQgdGhlIHRyYWNlIGNhbGwgKi8KKwkvKiBwYWQgdG8gNCBieXRlIGJvdW5kYXJ5IC0gd2lsbCBwcm9iYWJseSBnZXQgdXNlZCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgcGFkMjsKKyAgICAgICAgdTMyCQlhcmcxOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzEgKi8KKyAgICAgICAgdTMyCQlhcmcyOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzIgKi8KKyAgICAgICAgdTMyCQlhcmczOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzMgKi8KKyAgICAgICAgdTMyCQlhcmc0OyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzQgKi8KIH07CiAKLS8qCi0gKiBEcml2ZXIgdHlwZXMgZm9yIGRyaXZlciBmaWVsZCBpbiB0cmFjZV9lbnRyeV90Ci0gKi8KKy8qIERyaXZlciB0eXBlcyBmb3IgZHJpdmVyIGZpZWxkIGluIHN0cnVjdCB0cmFjZV9lbnRyeSAqLwogI2RlZmluZSBUUkFDRV9TWEcgICAgICAgICAgICAgMQogI2RlZmluZSBUUkFDRV9WUENJICAgICAgICAgICAgMgogI2RlZmluZSBUUkFDRV9TTElDICAgICAgICAgICAgMwogCiAjZGVmaW5lIFRSQUNFX0VOVFJJRVMgICAxMDI0CiAKLXN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyX3QgewotICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgLyogYWlkIGZvciB3aW5kYmcgZXh0ZW5zaW9uICovCi0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgaW47ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBhZGQgKi8KLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBsZXZlbDsgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgVHJhY2UgbGV2ZWwgKi8KLQlzcGlubG9ja190CWxvY2s7ICAgICAgICAgICAgICAgICAgLyogRm9yIE1QIHRyYWNpbmcgKi8KLSAgICAgICAgc3RydWN0IHRyYWNlX2VudHJ5X3QgICAgICAgICAgIGVudHJpZXNbVFJBQ0VfRU5UUklFU107LyogVGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RydWN0IHN4Z190cmFjZV9idWZmZXIgeworCS8qIGFpZCBmb3Igd2luZGJnIGV4dGVuc2lvbiAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHNpemU7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgaW47ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBhZGQgKi8KKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBsZXZlbDsgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgVHJhY2UgbGV2ZWwgKi8KKwlzcGlubG9ja190CQlsb2NrOyAgICAgICAgICAgICAgICAgIC8qIEZvciBNUCB0cmFjaW5nICovCisJc3RydWN0IHRyYWNlX2VudHJ5CWVudHJpZXNbVFJBQ0VfRU5UUklFU107LyogVGhlIGNpcmN1bGFyIGJ1ZmZlciAqLwogfTsKIAogLyoKQEAgLTEyOCwxNSArMTI5LDExIEBACiAjZGVmaW5lIFRSQUNFX05PSVNZICAgICAgICAgICAgIDEwICAvKiBFdmVyeXRoaW5nIGluIHRoZSB3b3JsZCAqLwogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhlIG1hY3JvcyB0aGVtc2VsdmVzIC0KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhlIG1hY3JvcyB0aGVtc2VsdmVzICovCiAjaWYgQVRLX1RSQUNFX0VOQUJMRUQKICNkZWZpbmUgU1hHX1RSQUNFX0lOSVQoYnVmZmVyLCB0bGV2ZWwpCQkJCVwKIHsJCQkJCQkJCVwKLQltZW1zZXQoKGJ1ZmZlciksIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlcl90KSk7CVwKKwltZW1zZXQoKGJ1ZmZlciksIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlcikpOwlcCiAJKGJ1ZmZlciktPmxldmVsID0gKHRsZXZlbCk7CQkJCVwKIAkoYnVmZmVyKS0+c2l6ZSA9IFRSQUNFX0VOVFJJRVM7CQkJCVwKIAlzcGluX2xvY2tfaW5pdCgmKGJ1ZmZlciktPmxvY2spOwkJCVwKQEAgLTE0NSw0MCArMTQyLDM4IEBACiAjZGVmaW5lIFNYR19UUkFDRV9JTklUKGJ1ZmZlciwgdGxldmVsKQogI2VuZGlmCiAKLS8qCi0gKiBUaGUgdHJhY2UgbWFjcm8uICBUaGlzIGlzIGFjdGl2ZSBvbmx5IGlmIEFUS19UUkFDRV9FTkFCTEVEIGlzIHNldC4KLSAqLworLypUaGUgdHJhY2UgbWFjcm8uICBUaGlzIGlzIGFjdGl2ZSBvbmx5IGlmIEFUS19UUkFDRV9FTkFCTEVEIGlzIHNldC4gKi8KICNpZiBBVEtfVFJBQ0VfRU5BQkxFRAogI2RlZmluZSBTWEdfVFJBQ0UodGRyaXZlciwgYnVmZmVyLCB0bGV2ZWwsIHRuYW1lLCBhMSwgYTIsIGEzLCBhNCkgeyAgICAgICAgXAotICAgICAgICBpZiAoKGJ1ZmZlcikgJiYgKChidWZmZXIpLT5sZXZlbCA+PSAodGxldmVsKSkpIHsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHRyYWNlX2lycWwgPSAwOyAgICAvKiA/Pz8/Pz8gRklYIFRISVMgICovICAgIFwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3RydWN0IHRyYWNlX2VudHJ5X3QJKnRyYWNlX2VudHJ5OwkJCQlcCi0gICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmKGJ1ZmZlciktPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5ID0gJihidWZmZXIpLT5lbnRyaWVzWyhidWZmZXIpLT5pbl07ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG1lbXNldCh0cmFjZV9lbnRyeS0+bmFtZSwgMCwgOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfbGVuID0gc3RybGVuKHRuYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSB0cmFjZV9sZW4gPiA4ID8gOCA6IHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG1lbWNweSh0cmFjZV9lbnRyeS0+bmFtZSwgKHRuYW1lKSwgdHJhY2VfbGVuKTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPnRpbWUgPSB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+Y3B1ID0gKHVuc2lnbmVkIGNoYXIpKHNtcF9wcm9jZXNzb3JfaWQoKSAmIDB4RkYpOyAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmRyaXZlciA9ICh0ZHJpdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+aXJxbCA9IHRyYWNlX2lycWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcxID0gKHVsb25nKShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzIgPSAodWxvbmcpKGEyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMyA9ICh1bG9uZykoYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmc0ID0gKHVsb25nKShhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyKS0+aW4gPT0gVFJBQ0VfRU5UUklFUykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKChidWZmZXIpICYmICgoYnVmZmVyKS0+bGV2ZWwgPj0gKHRsZXZlbCkpKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9pcnFsID0gMDsvKiA/Pz8/Pz8gRklYIFRISVMgKi9cCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN0cnVjdCB0cmFjZV9lbnRyeQkqdHJhY2VfZW50cnk7CQkJICAgIFwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmKHNwaW5fdHJ5bG9jaygmKGJ1ZmZlciktPmxvY2spKQl7CQkgICAgIFwKKwkgICAgICAgICAgICAgICAgdHJhY2VfZW50cnkgPSAmKGJ1ZmZlciktPmVudHJpZXNbKGJ1ZmZlciktPmluXTsgICAgICBcCisgICAgICAgIAkgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgbWVtc2V0KHRyYWNlX2VudHJ5LT5uYW1lLCAwLCA4KTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgIHRyYWNlX2xlbiA9IHN0cmxlbih0bmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSB0cmFjZV9sZW4gPiA4ID8gOCA6IHRyYWNlX2xlbjsgICAgICAgICAgIFwKKyAgICAgICAgCSAgICAgICAgbWVtY3B5KHRyYWNlX2VudHJ5LT5uYW1lLCAodG5hbWUpLCB0cmFjZV9sZW4pOyAgICAgICBcCisJICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT50aW1lID0gdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgXAorCQkJdHJhY2VfZW50cnktPmNwdSA9ICh1bnNpZ25lZCBjaGFyKShzbXBfcHJvY2Vzc29yX2lkKCkgJiAweEZGKTtcCisJICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5kcml2ZXIgPSAodGRyaXZlcik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICB0cmFjZV9lbnRyeS0+aXJxbCA9IHRyYWNlX2lycWw7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzEgPSAodWxvbmcpKGExKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcyID0gKHVsb25nKShhMik7ICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMyA9ICh1bG9uZykoYTMpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgCSAgICAgICAgdHJhY2VfZW50cnktPmFyZzQgPSAodWxvbmcpKGE0KTsgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICAoYnVmZmVyKS0+aW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAJaWYgKChidWZmZXIpLT5pbiA9PSBUUkFDRV9FTlRSSUVTKSAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlciktPmluID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXNwaW5fdW5sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICAgCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfQkJCQkJCQkJICAgICBcCiB9CiAjZWxzZQogI2RlZmluZSBTWEdfVFJBQ0UodGRyaXZlciwgYnVmZmVyLCB0bGV2ZWwsIHRuYW1lLCBhMSwgYTIsIGEzLCBhNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCmluZGV4IGE0ZTk0NjguLmUxOTBkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdoaWYuaApAQCAtMSw0ICsxLDQgQEAKLS8qCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAogICoKICAqICRJZDogc3hnaGlmLmgsdiAxLjUgMjAwOC8wNy8yNCAxOToxODoyMiBjaHJpcyBFeHAgJApAQCAtNywxMjkgKzcsMTM0IEBACiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKICAqIEFsYWNyaXRlY2ggU2FoYXJhIGhvc3QgaW50ZXJmYWNlCi0gKi8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVQ09ERSBSZWdpc3RlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IFNYR19VQ09ERV9SRUdTIHsKLQkvLyBBZGRyZXNzIDAgLSAweDNGID0gQ29tbWFuZCBjb2RlcyAwLTE1IGZvciBUQ0IgMC4gIEV4Y29kZSAwCi0JdTMyIEljcjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDAgLSBJbnQgY29udHJvbAotCXUzMiBSc3ZkUmVnMTsJCS8vIENvZGUgPSAxIC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnMjsJCS8vIENvZGUgPSAyIC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnMzsJCS8vIENvZGUgPSAzIC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnNDsJCS8vIENvZGUgPSA0IC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnNTsJCS8vIENvZGUgPSA1IC0gVE9FIC1OQQotCXUzMiBDYXJkVXA7CQkvLyBDb2RlID0gNiAtIE1pY3JvY29kZSBpbml0aWFsaXplZCB3aGVuIDEKLQl1MzIgUnN2ZFJlZzc7CQkvLyBDb2RlID0gNyAtIFRPRSAtTkEKLQl1MzIgQ29kZU5vdFVzZWRbOF07CS8vIENvZGVzIDgtMTUgbm90IHVzZWQuICBFeENvZGUgPSAwCi0JLy8gVGhpcyBicmluZ3MgdXMgdG8gRXhDb2RlIDEgYXQgYWRkcmVzcyAweDQwID0gSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyCi0JdTMyIElzcDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEKLQl1MzIgUGFkRXgxWzE1XTsJCS8vIENvZGVzIDEtMTUgbm90IHVzZWQgd2l0aCBleHRlbmRlZCBjb2RlcwotCS8vIEV4Q29kZSAyID0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgotCXUzMiBJc3I7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyCisjZGVmaW5lIERCRwkJCQkxCisKKy8qIFVDT0RFIFJlZ2lzdGVycyAqLworc3RydWN0IHN4Z191Y29kZV9yZWdzIHsKKwkvKiBBZGRyZXNzIDAgLSAweDNGID0gQ29tbWFuZCBjb2RlcyAwLTE1IGZvciBUQ0IgMC4gIEV4Y29kZSAwICovCisJdTMyCUljcjsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDAgLSBJbnQgY29udHJvbCAqLworCXUzMglSc3ZkUmVnMTsJLyogQ29kZSA9IDEgLSBUT0UgLU5BICovCisJdTMyCVJzdmRSZWcyOwkvKiBDb2RlID0gMiAtIFRPRSAtTkEgKi8KKwl1MzIJUnN2ZFJlZzM7CS8qIENvZGUgPSAzIC0gVE9FIC1OQSAqLworCXUzMglSc3ZkUmVnNDsJLyogQ29kZSA9IDQgLSBUT0UgLU5BICovCisJdTMyCVJzdmRSZWc1OwkvKiBDb2RlID0gNSAtIFRPRSAtTkEgKi8KKwl1MzIJQ2FyZFVwOwkJLyogQ29kZSA9IDYgLSBNaWNyb2NvZGUgaW5pdGlhbGl6ZWQgd2hlbiAxICovCisJdTMyCVJzdmRSZWc3OwkvKiBDb2RlID0gNyAtIFRPRSAtTkEgKi8KKwl1MzIJQ29uZmlnU3RhdDsgICAgIC8qIENvZGUgPSA4IC0gQ29uZmlndXJhdGlvbiBkYXRhIGxvYWQgc3RhdHVzICovCisJdTMyICAJUnN2ZFJlZzk7CS8qIENvZGUgPSA5IC0gVE9FIC1OQSAqLworCXUzMglDb2RlTm90VXNlZFs2XTsJLyogQ29kZXMgMTAtMTUgbm90IHVzZWQuICBFeENvZGUgPSAwICovCisJLyogVGhpcyBicmluZ3MgdXMgdG8gRXhDb2RlIDEgYXQgYWRkcmVzcyAweDQwID0gSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyICovCisJdTMyCUlzcDsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEgKi8KKwl1MzIJUGFkRXgxWzE1XTsJLyogQ29kZXMgMS0xNSBub3QgdXNlZCB3aXRoIGV4dGVuZGVkIGNvZGVzICovCisJLyogRXhDb2RlIDIgPSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisJdTMyCUlzcjsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIgKi8KIAl1MzIgUGFkRXgyWzE1XTsKLQkvLyBFeENvZGUgMyA9IEV2ZW50IGJhc2UgcmVnaXN0ZXIuICBMb2NhdGlvbiBvZiBldmVudCByaW5ncwotCXUzMiBFdmVudEJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzCisJLyogRXhDb2RlIDMgPSBFdmVudCBiYXNlIHJlZ2lzdGVyLiAgTG9jYXRpb24gb2YgZXZlbnQgcmluZ3MgKi8KKwl1MzIJRXZlbnRCYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzICovCiAJdTMyIFBhZEV4M1sxNV07Ci0JLy8gRXhDb2RlIDQgPSBFdmVudCByaW5nIHNpemUKLQl1MzIgRXZlbnRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNAorCS8qIEV4Q29kZSA0ID0gRXZlbnQgcmluZyBzaXplICovCisJdTMyCUV2ZW50U2l6ZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNCAqLwogCXUzMiBQYWRFeDRbMTVdOwotCS8vIEV4Q29kZSA1ID0gVENCIEJ1ZmZlcnMgYmFzZSBhZGRyZXNzCi0JdTMyIFRjYkJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA1CisJLyogRXhDb2RlIDUgPSBUQ0IgQnVmZmVycyBiYXNlIGFkZHJlc3MgKi8KKwl1MzIJVGNiQmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNSAqLwogCXUzMiBQYWRFeDVbMTVdOwotCS8vIEV4Q29kZSA2ID0gVENCIENvbXBvc2l0ZSBCdWZmZXJzIGJhc2UgYWRkcmVzcwotCXUzMiBUY2JDb21wQmFzZTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNgorCS8qIEV4Q29kZSA2ID0gVENCIENvbXBvc2l0ZSBCdWZmZXJzIGJhc2UgYWRkcmVzcyAqLworCXUzMglUY2JDb21wQmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNiAqLwogCXUzMiBQYWRFeDZbMTVdOwotCS8vIEV4Q29kZSA3ID0gVHJhbnNtaXQgcmluZyBiYXNlIGFkZHJlc3MKLQl1MzIgWG10QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcKKwkvKiBFeENvZGUgNyA9IFRyYW5zbWl0IHJpbmcgYmFzZSBhZGRyZXNzICovCisJdTMyCVhtdEJhc2U7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcgKi8KIAl1MzIgUGFkRXg3WzE1XTsKLQkvLyBFeENvZGUgOCA9IFRyYW5zbWl0IHJpbmcgc2l6ZQotCXUzMiBYbXRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOAorCS8qIEV4Q29kZSA4ID0gVHJhbnNtaXQgcmluZyBzaXplICovCisJdTMyCVhtdFNpemU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDggKi8KIAl1MzIgUGFkRXg4WzE1XTsKLQkvLyBFeENvZGUgOSA9IFJlY2VpdmUgcmluZyBiYXNlIGFkZHJlc3MKLQl1MzIgUmN2QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDkKKwkvKiBFeENvZGUgOSA9IFJlY2VpdmUgcmluZyBiYXNlIGFkZHJlc3MgKi8KKwl1MzIJUmN2QmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOSAqLwogCXUzMiBQYWRFeDlbMTVdOwotCS8vIEV4Q29kZSAxMCA9IFJlY2VpdmUgcmluZyBzaXplCi0JdTMyIFJjdlNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMAorCS8qIEV4Q29kZSAxMCA9IFJlY2VpdmUgcmluZyBzaXplICovCisJdTMyCVJjdlNpemU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEwICovCiAJdTMyIFBhZEV4MTBbMTVdOwotCS8vIEV4Q29kZSAxMSA9IFJlYWQgRUVQUk9NIENvbmZpZwotCXUzMiBDb25maWc7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMQorCS8qIEV4Q29kZSAxMSA9IFJlYWQgRUVQUk9NL0ZsYXNoIENvbmZpZyAqLworCXUzMglDb25maWc7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMSAqLwogCXUzMiBQYWRFeDExWzE1XTsKLQkvLyBFeENvZGUgMTIgPSBNdWx0aWNhc3QgYml0cyAzMTowCi0JdTMyIE1jYXN0TG93OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTIKKwkvKiBFeENvZGUgMTIgPSBNdWx0aWNhc3QgYml0cyAzMTowICovCisJdTMyCU1jYXN0TG93OwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMiAqLwogCXUzMiBQYWRFeDEyWzE1XTsKLQkvLyBFeENvZGUgMTMgPSBNdWx0aWNhc3QgYml0cyA2MzozMgotCXUzMiBNY2FzdEhpZ2g7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMworCS8qIEV4Q29kZSAxMyA9IE11bHRpY2FzdCBiaXRzIDYzOjMyICovCisJdTMyCU1jYXN0SGlnaDsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTMgKi8KIAl1MzIgUGFkRXgxM1sxNV07Ci0JLy8gRXhDb2RlIDE0ID0gUGluZwotCXUzMiBQaW5nOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTQKKwkvKiBFeENvZGUgMTQgPSBQaW5nICovCisJdTMyCVBpbmc7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNCAqLwogCXUzMiBQYWRFeDE0WzE1XTsKLQkvLyBFeENvZGUgMTUgPSBMaW5rIE1UVQotCXUzMiBMaW5rTXR1OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTUKKwkvKiBFeENvZGUgMTUgPSBMaW5rIE1UVSAqLworCXUzMglMaW5rTXR1OwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNSAqLwogCXUzMiBQYWRFeDE1WzE1XTsKLQkvLyBFeENvZGUgMTYgPSBEb3dubG9hZCBzeW5jaHJvbml6YXRpb24KLQl1MzIgTG9hZFN5bmM7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNgorCS8qIEV4Q29kZSAxNiA9IERvd25sb2FkIHN5bmNocm9uaXphdGlvbiAqLworCXUzMglMb2FkU3luYzsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTYgKi8KIAl1MzIgUGFkRXgxNlsxNV07Ci0JLy8gRXhDb2RlIDE3ID0gVXBwZXIgRFJBTSBhZGRyZXNzIGJpdHMgb24gMzItYml0IHN5c3RlbXMKLQl1MzIgVXBwZXI7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNworCS8qIEV4Q29kZSAxNyA9IFVwcGVyIERSQU0gYWRkcmVzcyBiaXRzIG9uIDMyLWJpdCBzeXN0ZW1zICovCisJdTMyCVVwcGVyOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTcgKi8KIAl1MzIgUGFkRXgxN1sxNV07Ci0JLy8gRXhDb2RlIDE4ID0gU2xvd3BhdGggU2VuZCBJbmRleCBBZGRyZXNzCi0JdTMyIFNQU2VuZEluZGV4OwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxOAorCS8qIEV4Q29kZSAxOCA9IFNsb3dwYXRoIFNlbmQgSW5kZXggQWRkcmVzcyAqLworCXUzMglTUFNlbmRJbmRleDsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTggKi8KIAl1MzIgUGFkRXgxOFsxNV07Ci0JdTMyIFJzdmRYRjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE5CisJLyogRXhDb2RlIDE5ID0gR2V0IHVjb2RlIHN0YXRpc3RpY3MgKi8KKwl1MzIJR2V0VWNvZGVTdGF0czsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTkgKi8KIAl1MzIgUGFkRXgxOVsxNV07Ci0JLy8gRXhDb2RlIDIwID0gQWdncmVnYXRpb24KLQl1MzIgQWdncmVnYXRpb247CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIwCisJLyogRXhDb2RlIDIwID0gQWdncmVnYXRpb24gLSBTZWUgc3hnbWlzYy5jOlN4Z1NldEludGVycnVwdEFnZ3JlZ2F0aW9uICovCisJdTMyCUFnZ3JlZ2F0aW9uOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMCAqLwogCXUzMiBQYWRFeDIwWzE1XTsKLQkvLyBFeENvZGUgMjEgPSBSZWNlaXZlIE1ETCBwdXNoIHRpbWVyCi0JdTMyIFB1c2hUaWNrczsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIxCisJLyogRXhDb2RlIDIxID0gUmVjZWl2ZSBNREwgcHVzaCB0aW1lciAqLworCXUzMglQdXNoVGlja3M7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIxICovCiAJdTMyIFBhZEV4MjFbMTVdOwotCS8vIEV4Q29kZSAyMiA9IFRPRSBOQQotCXUzMiBBY2tGcmVxdWVuY3k7CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIyCisJLyogRXhDb2RlIDIyID0gQUNLIEZyZXF1ZW5jeSAqLworCXUzMglBY2tGcmVxdWVuY3k7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIyICovCiAJdTMyIFBhZEV4MjJbMTVdOwotCS8vIEV4Q29kZSAyMyA9IFRPRSBOQQorCS8qIEV4Q29kZSAyMyA9IFRPRSBOQSAqLwogCXUzMiBSc3ZkUmVnMjM7CiAJdTMyIFBhZEV4MjNbMTVdOwotCS8vIEV4Q29kZSAyNCA9IFRPRSBOQQorCS8qIEV4Q29kZSAyNCA9IFRPRSBOQSAqLwogCXUzMiBSc3ZkUmVnMjQ7CiAJdTMyIFBhZEV4MjRbMTVdOwotCS8vIEV4Q29kZSAyNSA9IFRPRSBOQQotCXUzMiBSc3ZkUmVnMjU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyNQorCS8qIEV4Q29kZSAyNSA9IFRPRSBOQSAqLworCXUzMglSc3ZkUmVnMjU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI1ICovCiAJdTMyIFBhZEV4MjVbMTVdOwotCS8vIEV4Q29kZSAyNiA9IFJlY2VpdmUgY2hlY2tzdW0gcmVxdWlyZW1lbnRzCi0JdTMyIFJlY2VpdmVDaGVja3N1bTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjYKKwkvKiBFeENvZGUgMjYgPSBSZWNlaXZlIGNoZWNrc3VtIHJlcXVpcmVtZW50cyAqLworCXUzMglSZWNlaXZlQ2hlY2tzdW07CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI2ICovCiAJdTMyIFBhZEV4MjZbMTVdOwotCS8vIEV4Q29kZSAyNyA9IFJTUyBSZXF1aXJlbWVudHMKLQl1MzIgUnNzOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjcKKwkvKiBFeENvZGUgMjcgPSBSU1MgUmVxdWlyZW1lbnRzICovCisJdTMyCVJzczsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI3ICovCiAJdTMyIFBhZEV4MjdbMTVdOwotCS8vIEV4Q29kZSAyOCA9IFJTUyBUYWJsZQotCXUzMiBSc3NUYWJsZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI4CisJLyogRXhDb2RlIDI4ID0gUlNTIFRhYmxlICovCisJdTMyCVJzc1RhYmxlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOCAqLwogCXUzMiBQYWRFeDI4WzE1XTsKLQkvLyBFeENvZGUgMjkgPSBFdmVudCByaW5nIHJlbGVhc2UgZW50cmllcwotCXUzMiBFdmVudFJlbGVhc2U7CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI5CisJLyogRXhDb2RlIDI5ID0gRXZlbnQgcmluZyByZWxlYXNlIGVudHJpZXMgKi8KKwl1MzIJRXZlbnRSZWxlYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOSAqLwogCXUzMiBQYWRFeDI5WzE1XTsKLQkvLyBFeENvZGUgMzAgPSBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJsaXN0IGNvbW1hbmRzIG9uIHJpbmcgMAotCXUzMiBSY3ZDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMAorCS8qIEV4Q29kZSAzMCA9IE51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcmxpc3QgY29tbWFuZHMgb24gcmluZyAwICovCisJdTMyCVJjdkNtZDsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMwICovCiAJdTMyIFBhZEV4MzBbMTVdOwotCS8vIEV4Q29kZSAzMSA9IHNsb3dwYXRoIHRyYW5zbWl0IGNvbW1hbmQgLSBEYXRhWzMxOjBdID0gMQotCXUzMiBYbXRDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMQorCS8qIEV4Q29kZSAzMSA9IHNsb3dwYXRoIHRyYW5zbWl0IGNvbW1hbmQgLSBEYXRhWzMxOjBdID0gMSAqLworCXUzMglYbXRDbWQ7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMSAqLwogCXUzMiBQYWRFeDMxWzE1XTsKLQkvLyBFeENvZGUgMzIgPSBEdW1wIGNvbW1hbmQKLQl1MzIgRHVtcENtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMyCisJLyogRXhDb2RlIDMyID0gRHVtcCBjb21tYW5kICovCisJdTMyCUR1bXBDbWQ7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMyICovCiAJdTMyIFBhZEV4MzJbMTVdOwotCS8vIEV4Q29kZSAzMyA9IERlYnVnIGNvbW1hbmQKLQl1MzIgRGVidWdDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMworCS8qIEV4Q29kZSAzMyA9IERlYnVnIGNvbW1hbmQgKi8KKwl1MzIJRGVidWdDbWQ7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMzICovCiAJdTMyIFBhZEV4MzNbMTVdOwotCS8vIFRoZXJlIGFyZSAxMjggcG9zc2libGUgZXh0ZW5kZWQgY29tbWFuZHMgLSBlYWNoIG9mIGFjY291bnQgZm9yIDE2Ci0JLy8gd29yZHMgKGluY2x1ZGluZyB0aGUgbm9uLXJlbGV2ZW50IGJhc2UgY29tbWFuZCBjb2RlcyAxLTE1KS4KLQkvLyBQYWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlc2UgaGVyZSB0byBicmluZyB1cyB0byB0aGUgbmV4dCBDUFUKLQkvLyBiYXNlLiAgQXMgZXh0ZW5kZWQgY29kZXMgYXJlIGFkZGVkLCByZWR1Y2UgdGhlIGZpcnN0IGFycmF5IHZhbHVlIGluCi0JLy8gdGhlIGZvbGxvd2luZyBmaWVsZAotCXUzMiBQYWRUb05leHRDcHVbOTRdWzE2XTsJLy8gOTQgPSAxMjggLSAzNCAoMzQgPSBFeGNvZGVzIDAgLSAzMykKKwkvKgorCSAqIFRoZXJlIGFyZSAxMjggcG9zc2libGUgZXh0ZW5kZWQgY29tbWFuZHMgLSBlYWNoIG9mIGFjY291bnQgZm9yIDE2CisJICogd29yZHMgKGluY2x1ZGluZyB0aGUgbm9uLXJlbGV2ZW50IGJhc2UgY29tbWFuZCBjb2RlcyAxLTE1KS4KKwkgKiBQYWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlc2UgaGVyZSB0byBicmluZyB1cyB0byB0aGUgbmV4dCBDUFUKKwkgKiBiYXNlLiAgQXMgZXh0ZW5kZWQgY29kZXMgYXJlIGFkZGVkLCByZWR1Y2UgdGhlIGZpcnN0IGFycmF5IHZhbHVlIGluCisJICogdGhlIGZvbGxvd2luZyBmaWVsZAorCSAqLworCXUzMiBQYWRUb05leHRDcHVbOTRdWzE2XTsJLyogOTQgPSAxMjggLSAzNCAoMzQgPSBFeGNvZGVzIDAgLSAzMykqLwogfTsKIAotLy8gSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKDApIHZhbHVlcworLyogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKDApIHZhbHVlcyAqLwogI2RlZmluZSBTWEdfSUNSX0RJU0FCTEUJCQkJCTB4MDAwMDAwMDAKICNkZWZpbmUgU1hHX0lDUl9FTkFCTEUJCQkJCTB4MDAwMDAwMDEKICNkZWZpbmUgU1hHX0lDUl9NQVNLCQkJCQkweDAwMDAwMDAyCkBAIC0xMzksNDcgKzE0NCw2NSBAQAogCSgoKChfTWVzc2FnZUlkKSA8PCBTWEdfSUNSX01TR0lEX1NISUZUKSAmCVwKIAkgIFNYR19JQ1JfTVNHSURfTUFTSykgfCAoX0RhdGEpKQogCi0vLyBUaGUgTWljcm9jb2RlIHN1cHBvcnRzIHVwIHRvIDE2IFJTUyBxdWV1ZXMKLSNkZWZpbmUgU1hHX01BWF9SU1MJCQkJMTYKLSNkZWZpbmUgU1hHX01BWF9SU1NfVEFCTEVfU0laRQkyNTYJLy8gMjU2LWJ5dGUgbWF4CisjZGVmaW5lIFNYR19NSU5fQUdHX0RFRkFVTFQJMHgwMDEwCS8qIE1pbmltdW0gYWdncmVnYXRpb24gZGVmYXVsdCAqLworI2RlZmluZSBTWEdfTUFYX0FHR19ERUZBVUxUCTB4MDA0MAkvKiBNYXhpbXVtIGFnZ3JlZ2F0aW9uIGRlZmF1bHQgKi8KKyNkZWZpbmUgU1hHX01BWF9BR0dfU0hJRlQJMTYJLyogTWF4aW11bSBpbiB0b3AgMTYgYml0cyBvZiByZWdpc3RlciAqLworLyogRGlzYWJsZSBpbnRlcnJ1cHQgYWdncmVnYXRpb24gb24geG10ICovCisjZGVmaW5lIFNYR19BR0dfWE1UX0RJU0FCTEUJMHg4MDAwMDAwMAogCi0jZGVmaW5lIFNYR19SU1NfVENQNgkJCQkweDAwMDAwMDAxCS8vIFJTUyBUQ1Agb3ZlciBJUHY2Ci0jZGVmaW5lIFNYR19SU1NfVENQNAkJCQkweDAwMDAwMDAyCS8vIFJTUyBUQ1Agb3ZlciBJUHY0Ci0jZGVmaW5lIFNYR19SU1NfTEVHQUNZCQkJCTB4MDAwMDAwMDQJLy8gTGluZS1iYXNlIGludGVycnVwdHMKLSNkZWZpbmUgU1hHX1JTU19UQUJMRV9TSVpFCQkJMHgwMDAwRkYwMAkvLyBUYWJsZSBzaXplIG1hc2sKKy8qIFRoZSBNaWNyb2NvZGUgc3VwcG9ydHMgdXAgdG8gMTYgUlNTIHF1ZXVlcyAoUmV2QikgKi8KKyNkZWZpbmUgU1hHX01BWF9SU1MJCQkxNgorI2RlZmluZSBTWEdfTUFYX1JTU19SRVZBCQk4CisKKyNkZWZpbmUgU1hHX01BWF9SU1NfVEFCTEVfU0laRQkyNTYJCS8qIDI1Ni1ieXRlIG1heCAqLworCisjZGVmaW5lIFNYR19SU1NfUkVWQV9UQ1A2CTB4MDAwMDAwMDEJLyogUlNTIFRDUCBvdmVyIElQdjYgKi8KKyNkZWZpbmUgU1hHX1JTU19SRVZBX1RDUDQJMHgwMDAwMDAwMgkvKiBSU1MgVENQIG92ZXIgSVB2NCAqLworI2RlZmluZSBTWEdfUlNTX0lQCQkweDAwMDAwMDAxCS8qIFJTUyBUQ1Agb3ZlciBJUHY2ICovCisjZGVmaW5lIFNYR19SU1NfVENQCQkweDAwMDAwMDAyCS8qIFJTUyBUQ1Agb3ZlciBJUHY0ICovCisjZGVmaW5lIFNYR19SU1NfTEVHQUNZCQkweDAwMDAwMDA0CS8qIExpbmUtYmFzZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0laRQkweDAwMDBGRjAwCS8qIFRhYmxlIHNpemUgbWFzayAqLworCiAjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0hJRlQJCQk4Ci0jZGVmaW5lCVNYR19SU1NfQkFTRV9DUFUJCQkweDAwRkYwMDAwCS8vIEJhc2UgQ1BVIChub3QgdXNlZCkKKyNkZWZpbmUJU1hHX1JTU19CQVNFX0NQVQkweDAwRkYwMDAwCS8qIEJhc2UgQ1BVIChub3QgdXNlZCkgKi8KICNkZWZpbmUgU1hHX1JTU19CQVNFX1NISUZUCQkJMTYKIAotI2RlZmluZSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRAkJMHgwMDAwMDAwMQkvLyBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkKLSNkZWZpbmUgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVECTB4MDAwMDAwMDIJLy8gRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pCisjZGVmaW5lIFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVECQkweDAwMDAwMDAxCS8qIEV4Q29kZSAyNiAoUmVjZWl2ZUNoZWNrc3VtKSAqLworI2RlZmluZSBTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQJMHgwMDAwMDAwMgkvKiBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkgKi8KIAogI2RlZmluZSBTWEdfWE1UX0NQVUlEX1NISUZUCQkJMTYKIAotI2lmIFZQQ0kKLSNkZWZpbmUgU1hHX0NIRUNLX0ZPUl9IQU5HX1RJTUUJCTMwMDAKLSNlbHNlCisvKgorICogU3RhdHVzIHJldHVybmVkIGJ5IHVjb2RlIGluIHRoZSBDb25maWdTdGF0IHJlZyAoc2VlIGFib3ZlKSB3aGVuIGF0dGVtcHRlZAorICogdG8gbG9hZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSB0aGUgRUVQUk9NL0ZsYXNoLgorICovCisjZGVmaW5lCVNYR19DRkdfVElNRU9VVAkJMQkvKiBpbml0IHZhbHVlIC0gdGltZW91dCBpZiB1bmNoYW5nZWQgKi8KKyNkZWZpbmUJU1hHX0NGR19MT0FEX0VFUFJPTQkyCS8qIGNvbmZpZyBkYXRhIGxvYWRlZCBmcm9tIEVFUFJPTSAqLworI2RlZmluZQlTWEdfQ0ZHX0xPQURfRkxBU0gJMwkvKiBjb25maWcgZGF0YSBsb2FkZWQgZnJvbSBmbGFzaCAqLworI2RlZmluZQlTWEdfQ0ZHX0xPQURfSU5WQUxJRAk0CS8qIG5vIHZhbGlkIGNvbmZpZyBkYXRhIGZvdW5kICovCisjZGVmaW5lCVNYR19DRkdfTE9BRF9FUlJPUgk1CS8qIGhhcmR3YXJlIGVycm9yICovCisKICNkZWZpbmUgU1hHX0NIRUNLX0ZPUl9IQU5HX1RJTUUJCTUKLSNlbmRpZgogCiAvKgogICogVENCIHJlZ2lzdGVycyAtIFRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIHJlZ2lzdGVyIG1lbW9yeSBhcmVhIGFzIFVDT0RFX1JFR1MKICAqIGFib3ZlLCBidXQgZGVmaW5lZCBkaWZmZXJlbnRseS4gIEJpdHMgMTc6MDYgb2YgdGhlIGFkZHJlc3MgZGVmaW5lIHRoZSBUQ0IsCiAgKiB3aGljaCBtZWFucyBlYWNoIFRDQiBhcmVhIG9jY3VwaWVzIDB4NDAgKDY0KSBieXRlcywgb3IgMTYgdTMyUy4gIFdoYXQgcmVhbGx5CiAgKiBpcyBoYXBwZW5pbmcgaXMgdGhhdCB0aGVzZSByZWdpc3RlcnMgb2NjdXB5IHRoZSAiUGFkRXhbMTVdIiBhcmVhcyBpbiB0aGUKLSAqIFNYR19VQ09ERV9SRUdTIGRlZmluaXRpb24gYWJvdmUKKyAqIHN0cnVjdCBzeGdfdWNvZGVfcmVncyBkZWZpbml0aW9uIGFib3ZlCiAgKi8KLXN0cnVjdCBTWEdfVENCX1JFR1MgewotCXUzMiBFeENvZGU7CQkvKiBFeHRlbmRlZCBjb2RlcyAtIHNlZSBTWEdfVUNPREVfUkVHUyAqLwotCXUzMiBYbXQ7CQkvKiBDb2RlID0gMSAtICMgb2YgWG10IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KLQl1MzIgUmN2OwkJLyogQ29kZSA9IDIgLSAjIG9mIFJjdiBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCi0JdTMyIFJzdmQxOwkJLyogQ29kZSA9IDMgLSBUT0UgTkEgKi8KLQl1MzIgUnN2ZDI7CQkvKiBDb2RlID0gNCAtIFRPRSBOQSAqLwotCXUzMiBSc3ZkMzsJCS8qIENvZGUgPSA1IC0gVE9FIE5BICovCi0JdTMyIEludmFsaWQ7CQkvKiBDb2RlID0gNiAtIFJlc2VydmVkIGZvciAiQ2FyZFVwIiBzZWUgYWJvdmUgKi8KLQl1MzIgUnN2ZDQ7CQkvKiBDb2RlID0gNyAtIFRPRSBOQSAqLwotCXUzMiBSc3ZkNTsJCS8qIENvZGUgPSA4IC0gVE9FIE5BICovCi0JdTMyIFBhZFs3XTsJCS8qIENvZGVzIDgtMTUgLSBOb3QgdXNlZC4gKi8KK3N0cnVjdCBzeGdfdGNiX3JlZ3MgeworCXUzMiBFeENvZGU7CS8qIEV4dGVuZGVkIGNvZGVzIC0gc2VlIFNYR19VQ09ERV9SRUdTICovCisJdTMyIFhtdDsJLyogQ29kZSA9IDEgLSAjIG9mIFhtdCBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCisJdTMyIFJjdjsJLyogQ29kZSA9IDIgLSAjIG9mIFJjdiBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCisJdTMyIFJzdmQxOwkvKiBDb2RlID0gMyAtIFRPRSBOQSAqLworCXUzMiBSc3ZkMjsJLyogQ29kZSA9IDQgLSBUT0UgTkEgKi8KKwl1MzIgUnN2ZDM7CS8qIENvZGUgPSA1IC0gVE9FIE5BICovCisJdTMyIEludmFsaWQxOwkvKiBDb2RlID0gNiAtIFJlc2VydmVkIGZvciAiQ2FyZFVwIiBzZWUgYWJvdmUgKi8KKwl1MzIgUnN2ZDQ7CS8qIENvZGUgPSA3IC0gVE9FIE5BICovCisJdTMyIEludmFsaWQyOwkvKiBDb2RlID0gOCAtIFJlc2VydmVkIGZvciAiQ29uZmlnU3RhdCIgc2VlIGFib3ZlICovCisJdTMyIFJzdmQ1OwkvKiBDb2RlID0gOSAtIFRPRSBOQSAqLworCXUzMiBQYWRbNl07CS8qIENvZGVzIDEwLTE1IC0gTm90IHVzZWQuICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMDYsMjkgKzIyOSwyNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fC0tLXwtQ3B1SWQgb2YgY3Jhc2gKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0vCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTWEdfSVNSX0VSUgkJMHg4MDAwMDAwMAkvLyBFcnJvcgotI2RlZmluZSBTWEdfSVNSX0VWRU5UCQkweDQwMDAwMDAwCS8vIEV2ZW50IHJpbmcgZXZlbnQKLSNkZWZpbmUgU1hHX0lTUl9OT05FMQkJMHgyMDAwMDAwMAkvLyBOb3QgdXNlZAotI2RlZmluZSBTWEdfSVNSX1VQQwkJMHgxMDAwMDAwMAkvLyBEdW1wL2RlYnVnIGNvbW1hbmQgY29tcGxldGUKLSNkZWZpbmUgU1hHX0lTUl9MSU5LCQkweDA4MDAwMDAwCS8vIExpbmsgZXZlbnQKLSNkZWZpbmUgU1hHX0lTUl9QRFFGCQkweDA0MDAwMDAwCS8vIFByb2Nlc3NlZCBkYXRhIHF1ZXVlIGZ1bGwKLSNkZWZpbmUgU1hHX0lTUl9STUlTUwkJMHgwMjAwMDAwMAkvLyBEcm9wIC0gbm8gaG9zdCBidWYKLSNkZWZpbmUgU1hHX0lTUl9CUkVBSwkJMHgwMTAwMDAwMAkvLyBCcmVha3BvaW50IGhpdAotI2RlZmluZSBTWEdfSVNSX1BJTkcJCTB4MDA4MDAwMDAJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCi0jZGVmaW5lIFNYR19JU1JfREVBRAkJMHgwMDQwMDAwMAkvLyBDYXJkIGNyYXNoCi0jZGVmaW5lIFNYR19JU1JfRVJGVUxMCQkweDAwMjAwMDAwCS8vIEV2ZW50IHJpbmcgZnVsbAotI2RlZmluZSBTWEdfSVNSX1hEUk9QCQkweDAwMTAwMDAwCS8vIFhNVCBEcm9wIC0gbm8gRFJBTSBidWZzIG9yIFhNVCBlcnIKLSNkZWZpbmUgU1hHX0lTUl9TUFNFTkQJCTB4MDAwODAwMDAJLy8gU2xvdyBzZW5kIGNvbXBsZXRlCi0jZGVmaW5lIFNYR19JU1JfQ1BVCQkweDAwMDcwMDAwCS8vIERlYWQgQ1BVIG1hc2sKLSNkZWZpbmUgU1hHX0lTUl9DUFVfU0hJRlQJCTE2CS8vIERlYWQgQ1BVIHNoaWZ0Ci0jZGVmaW5lIFNYR19JU1JfQ1JBU0gJCTB4MDAwMEZGRkYJLy8gQ3Jhc2ggYWRkcmVzcyBtYXNrCisjZGVmaW5lIFNYR19JU1JfRVJSCQkweDgwMDAwMDAwCS8qIEVycm9yICovCisjZGVmaW5lIFNYR19JU1JfRVZFTlQJCTB4NDAwMDAwMDAJLyogRXZlbnQgcmluZyBldmVudCAqLworI2RlZmluZSBTWEdfSVNSX05PTkUxCQkweDIwMDAwMDAwCS8qIE5vdCB1c2VkICovCisjZGVmaW5lIFNYR19JU1JfVVBDCQkweDEwMDAwMDAwCS8qIER1bXAvZGVidWcgY29tbWFuZCBjb21wbGV0ZSovCisjZGVmaW5lIFNYR19JU1JfTElOSwkJMHgwODAwMDAwMAkvKiBMaW5rIGV2ZW50ICovCisjZGVmaW5lIFNYR19JU1JfUERRRgkJMHgwNDAwMDAwMAkvKiBQcm9jZXNzZWQgZGF0YSBxdWV1ZSBmdWxsICovCisjZGVmaW5lIFNYR19JU1JfUk1JU1MJCTB4MDIwMDAwMDAJLyogRHJvcCAtIG5vIGhvc3QgYnVmICovCisjZGVmaW5lIFNYR19JU1JfQlJFQUsJCTB4MDEwMDAwMDAJLyogQnJlYWtwb2ludCBoaXQgKi8KKyNkZWZpbmUgU1hHX0lTUl9QSU5HCQkweDAwODAwMDAwCS8qIEhlYXJ0YmVhdCByZXNwb25zZSAqLworI2RlZmluZSBTWEdfSVNSX0RFQUQJCTB4MDA0MDAwMDAJLyogQ2FyZCBjcmFzaCAqLworI2RlZmluZSBTWEdfSVNSX0VSRlVMTAkJMHgwMDIwMDAwMAkvKiBFdmVudCByaW5nIGZ1bGwgKi8KKyNkZWZpbmUgU1hHX0lTUl9YRFJPUAkJMHgwMDEwMDAwMAkvKiBYTVQgRHJvcCAtIG5vIERSQU0gYnVmcyBvciBYTVQgZXJyICovCisjZGVmaW5lIFNYR19JU1JfU1BTRU5ECQkweDAwMDgwMDAwCS8qIFNsb3cgc2VuZCBjb21wbGV0ZSAqLworI2RlZmluZSBTWEdfSVNSX0NQVQkJMHgwMDA3MDAwMAkvKiBEZWFkIENQVSBtYXNrICovCisjZGVmaW5lIFNYR19JU1JfQ1BVX1NISUZUCTE2CQkvKiBEZWFkIENQVSBzaGlmdCAqLworI2RlZmluZSBTWEdfSVNSX0NSQVNICQkweDAwMDBGRkZGCS8qIENyYXNoIGFkZHJlc3MgbWFzayAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRXZlbnQgUmluZyBlbnRyeQogICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgogICogIDMxICAgICAgICAgICAgICAgICAgMTUgICAgICAgICAgICAgICAgIDAKICAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX19fX19fLgogICogIHw8LS0tLS0tLS0tLS0tICAgIFBhZCAwICAgIC0tLS0tLS0tLS0tLT58CkBAIC0yNzAsMTk2ICsyOTAsMjIzIEBACiAgKiAgICB8fC0tLS0tLS0gSVNUQ1BJUAogICogICAgfC0tLS0tLS0tIFNDRVJSCiAgKgotICovCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi1zdHJ1Y3QgU1hHX0VWRU5UIHsKLQl1MzIgUGFkWzFdOwkJLy8gbm90IHVzZWQKLQl1MzIgU25kVW5hOwkJLy8gU25kVW5hIHZhbHVlCi0JdTMyIFJlc2lkOwkJLy8gcmVjZWl2ZSBNREwgcmVzaWQKK3N0cnVjdCBzeGdfZXZlbnQgeworCXUzMgkJCVBhZFsxXTsJCS8qIG5vdCB1c2VkICovCisJdTMyCQkJU25kVW5hOwkJLyogU25kVW5hIHZhbHVlICovCisJdTMyCQkJUmVzaWQ7CQkvKiByZWNlaXZlIE1ETCByZXNpZCAqLwogCXVuaW9uIHsKLQkJdm9pZCAqSG9zdEhhbmRsZTsJLy8gUmVjZWl2ZSBob3N0IGhhbmRsZQotCQl1MzIgUnN2ZDE7CS8vIFRPRSBOQQorCQl2b2lkICoJCUhvc3RIYW5kbGU7CS8qIFJlY2VpdmUgaG9zdCBoYW5kbGUgKi8KKwkJdTMyCQlSc3ZkMTsJCS8qIFRPRSBOQSAqLwogCQlzdHJ1Y3QgewogCQkJdTMyIE5vdFVzZWQ7Ci0JCQl1MzIgUnN2ZDI7CS8vIFRPRSBOQQorCQkJdTMyCVJzdmQyOwkJLyogVE9FIE5BICovCiAJCX0gRmx1c2g7CiAJfTsKLQl1MzIgVG9lcGxpdHo7CQkvLyBSU1MgVG9lcGxpdHogaGFzaAorCXUzMgkJCVRvZXBsaXR6OwkvKiBSU1MgVG9lcGxpdHogaGFzaCAqLwogCXVuaW9uIHsKLQkJdXNob3J0IFJzdmQzOwkvLyBUT0UgTkEKLQkJdXNob3J0IEhkck9mZnNldDsJLy8gU2xvd3BhdGgKKwkJdXNob3J0CQlSc3ZkMzsJCS8qIFRPRSBOQSAqLworCQl1c2hvcnQJCUhkck9mZnNldDsJLyogU2xvd3BhdGggKi8KIAl9OwotCXVzaG9ydCBMZW5ndGg7CQkvLwotCXVuc2lnbmVkIGNoYXIgUnN2ZDQ7CS8vIFRPRSBOQQotCXVuc2lnbmVkIGNoYXIgQ29kZTsJLy8gRXZlbnQgY29kZQotCXVuc2lnbmVkIGNoYXIgQ29tbWFuZEluZGV4OwkvLyBOZXcgcmluZyBpbmRleAotCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBFdmVudCBzdGF0dXMKKwl1c2hvcnQJCQlMZW5ndGg7CisJdW5zaWduZWQgY2hhciAJUnN2ZDQ7CQkvKiBUT0UgTkEgKi8KKwl1bnNpZ25lZCBjaGFyIAlDb2RlOwkJLyogRXZlbnQgY29kZSAqLworCXVuc2lnbmVkIGNoYXIJQ29tbWFuZEluZGV4OwkvKiBOZXcgcmluZyBpbmRleCAqLworCXVuc2lnbmVkIGNoYXIJU3RhdHVzOwkJLyogRXZlbnQgc3RhdHVzICovCiB9OwogI3ByYWdtYSBwYWNrKHBvcCkKIAotLy8gRXZlbnQgY29kZSBkZWZpbml0aW9ucwotI2RlZmluZSBFVkVOVF9DT0RFX0JVRkZFUlMJMHgwMQkvLyBSZWNlaXZlIGJ1ZmZlciBsaXN0IGNvbW1hbmQgKHJpbmcgMCkKLSNkZWZpbmUgRVZFTlRfQ09ERV9TTE9XUkNWCTB4MDIJLy8gU2xvd3BhdGggcmVjZWl2ZQotI2RlZmluZSBFVkVOVF9DT0RFX1VOVVNFRAkweDA0CS8vIFdhcyBzbG93cGF0aCBjb21tYW5kcyBjb21wbGV0ZQorLyogRXZlbnQgY29kZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBFVkVOVF9DT0RFX0JVRkZFUlMJMHgwMQkvKiBSZWNlaXZlIGJ1ZmZlciBsaXN0IGNvbW1hbmQgKHJpbmcgMCkgKi8KKyNkZWZpbmUgRVZFTlRfQ09ERV9TTE9XUkNWCTB4MDIJLyogU2xvd3BhdGggcmVjZWl2ZSAqLworI2RlZmluZSBFVkVOVF9DT0RFX1VOVVNFRAkweDA0CS8qIFdhcyBzbG93cGF0aCBjb21tYW5kcyBjb21wbGV0ZSAqLwogCi0vLyBTdGF0dXMgdmFsdWVzCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19WQUxJRAkweDgwCS8vIEVudHJ5IHZhbGlkCisvKiBTdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19WQUxJRAkweDgwCS8qIEVudHJ5IHZhbGlkICovCiAKLS8vIFNsb3dwYXRoIHN0YXR1cwotI2RlZmluZSBFVkVOVF9TVEFUVVNfRVJST1IJMHg0MAkvLyBDb21wbGV0ZWQgd2l0aCBlcnJvci4gSW5kZXggaW4gbmV4dCBieXRlCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDQJMHgyMAkvLyBUQ1BJUHY0IGZyYW1lCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BCQUQJMHgxMAkvLyBCYWQgVENQIGNoZWNrc3VtCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19JUEJBRAkweDA4CS8vIEJhZCBJUCBjaGVja3N1bQotI2RlZmluZSBFVkVOVF9TVEFUVVNfUkNWRVJSCTB4MDQJLy8gU2xvd3BhdGggcmVjZWl2ZSBlcnJvcgotI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBPTkxZCTB4MDIJLy8gSVAgZnJhbWUKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNgkweDAxCS8vIFRDUElQdjYgZnJhbWUKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQCTB4MjEJLy8gQ29tYmluYXRpb24gb2YgdjQgYW5kIHY2CisvKiBTbG93cGF0aCBzdGF0dXMgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX0VSUk9SCTB4NDAJLyogQ29tcGxldGVkIHdpdGggZXJyb3IuIEluZGV4IGluIG5leHQgYnl0ZSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVA0CTB4MjAJLyogVENQSVB2NCBmcmFtZSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQQkFECTB4MTAJLyogQmFkIFRDUCBjaGVja3N1bSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBCQUQJMHgwOAkvKiBCYWQgSVAgY2hlY2tzdW0gKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1JDVkVSUgkweDA0CS8qIFNsb3dwYXRoIHJlY2VpdmUgZXJyb3IgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX0lQT05MWQkweDAyCS8qIElQIGZyYW1lICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDYJMHgwMQkvKiBUQ1BJUHY2IGZyYW1lICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUAkweDIxCS8qIENvbWJpbmF0aW9uIG9mIHY0IGFuZCB2NiAqLwogCi0vLyBFdmVudCByaW5nCi0vLyBTaXplIG11c3QgYmUgcG93ZXIgb2YgMiwgYmV0d2VlbiAxMjggYW5kIDE2awotI2RlZmluZSBFVkVOVF9SSU5HX1NJWkUJCTQwOTYJLy8gPz8KLSNkZWZpbmUgRVZFTlRfUklOR19CQVRDSAkxNgkvLyBIYW5kIGVudHJpZXMgYmFjayAxNiBhdCBhIHRpbWUuCi0jZGVmaW5lIEVWRU5UX0JBVENIX0xJTUlUCTI1NgkvLyBTdG9wIHByb2Nlc3NpbmcgZXZlbnRzIGFmdGVyIDI1NiAoMTYgKiAxNikKKy8qCisgKiBFdmVudCByaW5nCisgKiBTaXplIG11c3QgYmUgcG93ZXIgb2YgMiwgYmV0d2VlbiAxMjggYW5kIDE2aworICovCisjZGVmaW5lIEVWRU5UX1JJTkdfU0laRQkJNDA5NgorI2RlZmluZSBFVkVOVF9SSU5HX0JBVENICTE2CS8qIEhhbmQgZW50cmllcyBiYWNrIDE2IGF0IGEgdGltZS4gKi8KKy8qIFN0b3AgcHJvY2Vzc2luZyBldmVudHMgYWZ0ZXIgNDA5NiAoMjU2ICogMTYpICovCisjZGVmaW5lIEVWRU5UX0JBVENIX0xJTUlUCTI1NgogCi1zdHJ1Y3QgU1hHX0VWRU5UX1JJTkcgewotCXN0cnVjdCBTWEdfRVZFTlQgUmluZ1tFVkVOVF9SSU5HX1NJWkVdOworc3RydWN0IHN4Z19ldmVudF9yaW5nIHsKKwlzdHJ1Y3Qgc3hnX2V2ZW50IFJpbmdbRVZFTlRfUklOR19TSVpFXTsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUQ0IgQnVmZmVycwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyBNYXhpbXVtIG51bWJlciBvZiBUQ0JTIHN1cHBvcnRlZCBieSBoYXJkd2FyZS9taWNyb2NvZGUKKy8qIFRDQiBCdWZmZXJzICovCisvKiBNYXhpbXVtIG51bWJlciBvZiBUQ0JTIHN1cHBvcnRlZCBieSBoYXJkd2FyZS9taWNyb2NvZGUgKi8KICNkZWZpbmUgU1hHX01BWF9UQ0IJCTQwOTYKLS8vIE1pbmltdW0gVENCcyBiZWZvcmUgd2UgZmFpbCBpbml0aWFsaXphdGlvbgorLyogTWluaW11bSBUQ0JzIGJlZm9yZSB3ZSBmYWlsIGluaXRpYWxpemF0aW9uICovCiAjZGVmaW5lIFNYR19NSU5fVENCCQk1MTIKLS8vIFRDQiBIYXNoCi0vLyBUaGUgYnVja2V0IGlzIGRldGVybWluZWQgYnkgYml0cyAxMTo0IG9mIHRoZSB0b2VwbGl0eiBpZiB3ZSBzdXBwb3J0IDRrCi0vLyBvZmZsb2FkZWQgY29ubmVjdGlvbnMsIDEwOjQgaWYgd2Ugc3VwcG9ydCAyayBhbmQgc28gb24uCisvKgorICogVENCIEhhc2gKKyAqIFRoZSBidWNrZXQgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIDExOjQgb2YgdGhlIHRvZXBsaXR6IGlmIHdlIHN1cHBvcnQgNGsKKyAqIG9mZmxvYWRlZCBjb25uZWN0aW9ucywgMTA6NCBpZiB3ZSBzdXBwb3J0IDJrIGFuZCBzbyBvbi4KKyAqLwogI2RlZmluZSBTWEdfVENCX0JVQ0tFVF9TSElGVAk0Ci0jZGVmaW5lIFNYR19UQ0JfUEVSX0JVQ0tFVAkJMTYKLSNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfTUFTSwkJMHhGRjAJLy8gQnVja2V0IHBvcnRpb24gb2YgVENCIElECi0jZGVmaW5lIFNYR19UQ0JfRUxFTUVOVF9NQVNLCTB4MDBGCS8vIEVsZW1lbnQgd2l0aGluIGJ1Y2tldAotI2RlZmluZSBTWEdfVENCX0JVQ0tFVFMJCQkyNTYJLy8gMjU2ICogMTYgPSA0aworI2RlZmluZSBTWEdfVENCX1BFUl9CVUNLRVQJMTYKKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfTUFTSwkweEZGMAkvKiBCdWNrZXQgcG9ydGlvbiBvZiBUQ0IgSUQgKi8KKyNkZWZpbmUgU1hHX1RDQl9FTEVNRU5UX01BU0sJMHgwMEYJLyogRWxlbWVudCB3aXRoaW4gYnVja2V0ICovCisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUUwkJMjU2CQkvKiAyNTYgKiAxNiA9IDRrICovCiAKLSNkZWZpbmUgU1hHX1RDQl9CVUZGRVJfU0laRQk1MTIJLy8gQVNTRVJUIGZvcm1hdCBpcyBjb3JyZWN0CisjZGVmaW5lIFNYR19UQ0JfQlVGRkVSX1NJWkUJNTEyCS8qIEFTU0VSVCBmb3JtYXQgaXMgY29ycmVjdCAqLwogCi0jZGVmaW5lIFNYR19UQ0JfUkNWUV9TSVpFCQk3MzYKKyNkZWZpbmUgU1hHX1RDQl9SQ1ZRX1NJWkUJNzM2CiAKICNkZWZpbmUgU1hHX1RDQl9DT01QT1NJVEVfQlVGRkVSX1NJWkUJMTAyNAogCi0jZGVmaW5lIFNYR19MT0NBVEVfVENQX0ZSQU1FX0hEUihfVGNwT2JqZWN0LCBfSVB2NikJCQkJCQkJXAotCSgoKF9UY3BPYmplY3QpLT5WbGFuSWQpID8JCQkJCQkJCQkJCQlcCi0JICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0geWVzICovCQkJCQkJCVwKLQkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LlN4Z1RjcAkJCToJXAotCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5TeGdUY3ApCQkJOiAJXAotCSAoKF9JUHY2KSA/CQkvKiBWbGFuIGZyYW1lIGhlYWRlciA9IE5vICovCQkJCQkJCVwKLQkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuU3hnVGNwCQkJCTogCVwKKyNkZWZpbmUgU1hHX0xPQ0FURV9UQ1BfRlJBTUVfSERSKF9UY3BPYmplY3QsIF9JUHY2KQkJCVwKKwkoKChfVGNwT2JqZWN0KS0+VmxhbklkKSA/CQkJCQlcCisJICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0geWVzICovCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5TeGdUY3A6CVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXAuU3hnVGNwKTogCVwKKwkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSBObyAqLwkJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwNi5TeGdUY3AJOiAJXAogCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwLlN4Z1RjcCkpCiAKLSNkZWZpbmUgU1hHX0xPQ0FURV9JUF9GUkFNRV9IRFIoX1RjcE9iamVjdCkJCQkJCQkJCQlcCi0JKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCQkJCQkJCQlcCi0JJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5JcAkJCQk6IAkJXAorI2RlZmluZSBTWEdfTE9DQVRFX0lQX0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQlcCisJKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLklwOiAJCVwKIAkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXAuSXAKIAotI2RlZmluZSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoX1RjcE9iamVjdCkJCQkJCQkJCVwKLQkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJCQkJCQkJCVwKLQkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5JcAkJCQk6CQlcCisjZGVmaW5lIFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUihUY3BPYmplY3QpCQkJCVwKKwkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LklwOgkJXAogCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuSXAKIAogI2lmIERCRwotLy8gSG9ycmlibGUga2x1ZGdlIHRvIGRpc3Rpbmd1aXNoIGR1bWItbmljLCBzbG93cGF0aCwgYW5kCi0vLyBmYXN0cGF0aCB0cmFmZmljLiAgRGVjcmVtZW50IHRoZSBIb3BMaW1pdCBieSBvbmUKLS8vIGZvciBzbG93cGF0aCwgdHdvIGZvciBmYXN0cGF0aC4gIFRoaXMgYXNzdW1lcyB0aGUgbGltaXQgaXMgbWVhc3VyYWJseQotLy8gZ3JlYXRlciB0aGFuIHR3bywgd2hpY2ggSSB0aGluayBpcyByZWFzb25hYmxlLgotLy8gT2J2aW91c2x5IHRoaXMgaXMgREJHIG9ubHkuICBNYXliZSByZW1vdmUgbGF0ZXIsIG9yICNpZiAwIHNvIHdlCi0vLyBjYW4gc2V0IGl0IHdoZW4gbmVlZGVkCi0jZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkgewkJCQkJCQkJXAotCVBJUFY2X0hEUgkJX0lwNkZyYW1lSGRyOwkJCQkJCQkJCQkJCVwKLQlpZigoX1RjcE9iamVjdCktPklQdjYpIHsJCQkJCQkJCQkJCQkJXAotCQlfSXA2RnJhbWVIZHIgPSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoKF9UY3BPYmplY3QpKTsJCQkJCVwKLQkJaWYoX0Zhc3RQYXRoKSB7CQkJCQkJCQkJCQkJCQkJXAotCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAyOwlcCi0JCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQkJCVwKLQkJCV9JcDZGcmFtZUhkci0+SG9wTGltaXQgPSAoX1RjcE9iamVjdCktPkNhY2hlZC5UdGxPckhvcExpbWl0IC0gMTsJXAotCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorLyoKKyAqIEhvcnJpYmxlIGtsdWRnZSB0byBkaXN0aW5ndWlzaCBkdW1iLW5pYywgc2xvd3BhdGgsIGFuZAorICogZmFzdHBhdGggdHJhZmZpYy4gIERlY3JlbWVudCB0aGUgSG9wTGltaXQgYnkgb25lCisgKiBmb3Igc2xvd3BhdGgsIHR3byBmb3IgZmFzdHBhdGguICBUaGlzIGFzc3VtZXMgdGhlIGxpbWl0IGlzIG1lYXN1cmFibHkKKyAqIGdyZWF0ZXIgdGhhbiB0d28sIHdoaWNoIEkgdGhpbmsgaXMgcmVhc29uYWJsZS4KKyAqIE9idmlvdXNseSB0aGlzIGlzIERCRyBvbmx5LiAgTWF5YmUgcmVtb3ZlIGxhdGVyLCBvciAjaWYgMCBzbyB3ZQorICogY2FuIHNldCBpdCB3aGVuIG5lZWRlZAorICovCisjZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkgewkJCVwKKwlQSVBWNl9IRFIJCV9JcDZGcmFtZUhkcjsJCQkJXAorCWlmICgoX1RjcE9iamVjdCktPklQdjYpIHsJCQkJCVwKKwkJX0lwNkZyYW1lSGRyID0gU1hHX0xPQ0FURV9JUDZfRlJBTUVfSERSKChfVGNwT2JqZWN0KSk7CVwKKwkJaWYgKF9GYXN0UGF0aCkgewkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IAkJCVwKKwkJCQkoX1RjcE9iamVjdCktPkNhY2hlZC5UdGxPckhvcExpbWl0IC0gMjsJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCV9JcDZGcmFtZUhkci0+SG9wTGltaXQgPSAJCQlcCisJCQkJKF9UY3BPYmplY3QpLT5DYWNoZWQuVHRsT3JIb3BMaW1pdCAtIDE7CVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAogfQogI2Vsc2UKLS8vIERvIG5vdGhpbmcgd2l0aCBmcmVlIGJ1aWxkCisvKiBEbyBub3RoaW5nIHdpdGggZnJlZSBidWlsZCAqLwogI2RlZmluZSBTWEdfREJHX0hPUF9MSU1JVChfVGNwT2JqZWN0LCBfRmFzdFBhdGgpCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncyAqLwogI2RlZmluZSBTWEdfTUFYX1JJTkdfU0laRQkyNTYKLSNkZWZpbmUgU1hHX1hNVF9SSU5HX1NJWkUJMTI4CS8vIFN0YXJ0IHdpdGggMTI4Ci0jZGVmaW5lIFNYR19SQ1ZfUklOR19TSVpFCTEyOAkvLyBTdGFydCB3aXRoIDEyOAorI2RlZmluZSBTWEdfWE1UX1JJTkdfU0laRQkxMjgJCS8qIFN0YXJ0IHdpdGggMTI4ICovCisjZGVmaW5lIFNYR19SQ1ZfUklOR19TSVpFCTEyOAkJLyogU3RhcnQgd2l0aCAxMjggKi8KICNkZWZpbmUgU1hHX01BWF9FTlRSSUVTICAgICA0MDk2CisjZGVmaW5lIFNYR19KVU1CT19SQ1ZfUklOR19TSVpFICAgICAgIDMyCiAKLS8vIFN0cnVjdHVyZSBhbmQgbWFjcm9zIHRvIG1hbmFnZSBhIHJpbmcKLXN0cnVjdCBTWEdfUklOR19JTkZPIHsKLQl1bnNpZ25lZCBjaGFyIEhlYWQ7CS8vIFdoZXJlIHdlIGFkZCBlbnRyaWVzIC0gTm90ZSB1bnNpZ25lZCBjaGFyOlJJTkdfU0laRQotCXVuc2lnbmVkIGNoYXIgVGFpbDsJLy8gV2hlcmUgd2UgcHVsbCBvZmYgY29tcGxldGVkIGVudHJpZXMKLQl1c2hvcnQgU2l6ZTsJCS8vIFJpbmcgc2l6ZSAtIE11c3QgYmUgbXVsdGlwbGUgb2YgMgotCXZvaWQgKkNvbnRleHRbU1hHX01BWF9SSU5HX1NJWkVdOwkvLyBTaGFkb3cgcmluZworLyogU3RydWN0dXJlIGFuZCBtYWNyb3MgdG8gbWFuYWdlIGEgcmluZyAqLworc3RydWN0IHN4Z19yaW5nX2luZm8geworCS8qIFdoZXJlIHdlIGFkZCBlbnRyaWVzIC0gTm90ZSB1bnNpZ25lZCBjaGFyOlJJTkdfU0laRSAqLworCXVuc2lnbmVkIGNoYXIgSGVhZDsKKwl1bnNpZ25lZCBjaGFyIFRhaWw7CS8qIFdoZXJlIHdlIHB1bGwgb2ZmIGNvbXBsZXRlZCBlbnRyaWVzICovCisJdXNob3J0CVNpemU7CQkvKiBSaW5nIHNpemUgLSBNdXN0IGJlIG11bHRpcGxlIG9mIDIgKi8KKwl2b2lkICoJQ29udGV4dFtTWEdfTUFYX1JJTkdfU0laRV07CS8qIFNoYWRvdyByaW5nICovCiB9OwogCi0jZGVmaW5lIFNYR19JTklUSUFMSVpFX1JJTkcoX3JpbmcsIF9zaXplKSB7CQkJCQkJCVwKLQkoX3JpbmcpLkhlYWQgPSAwOwkJCQkJCQkJCQkJCVwKLQkoX3JpbmcpLlRhaWwgPSAwOwkJCQkJCQkJCQkJCVwKLQkoX3JpbmcpLlNpemUgPSAoX3NpemUpOwkJCQkJCQkJCQkJXAorI2RlZmluZSBTWEdfSU5JVElBTElaRV9SSU5HKF9yaW5nLCBfc2l6ZSkgewkJCQlcCisJKF9yaW5nKS5IZWFkID0gMDsJCQkJCQlcCisJKF9yaW5nKS5UYWlsID0gMDsJCQkJCQlcCisJKF9yaW5nKS5TaXplID0gKF9zaXplKTsJCQkJCQlcCiB9Ci0jZGVmaW5lIFNYR19BRFZBTkNFX0lOREVYKF9pbmRleCwgX3NpemUpICgoX2luZGV4KSA9ICgoX2luZGV4KSArIDEpICYgKChfc2l6ZSkgLSAxKSkKLSNkZWZpbmUgU1hHX1BSRVZJT1VTX0lOREVYKF9pbmRleCwgX3NpemUpICgoKF9pbmRleCkgLSAxKSAmKChfc2l6ZSkgLSAxKSkKKworI2RlZmluZSBTWEdfQURWQU5DRV9JTkRFWChfaW5kZXgsIF9zaXplKSAJCQkJXAorCQkJKChfaW5kZXgpID0gKChfaW5kZXgpICsgMSkgJiAoKF9zaXplKSAtIDEpKQorI2RlZmluZSBTWEdfUFJFVklPVVNfSU5ERVgoX2luZGV4LCBfc2l6ZSkgCQkJCVwKKwkJCSgoKF9pbmRleCkgLSAxKSAmKChfc2l6ZSkgLSAxKSkKICNkZWZpbmUgU1hHX1JJTkdfRU1QVFkoX3JpbmcpICgoX3JpbmcpLT5IZWFkID09IChfcmluZyktPlRhaWwpCi0jZGVmaW5lIFNYR19SSU5HX0ZVTEwoX3JpbmcpICgoKChfcmluZyktPkhlYWQgKyAxKSAmICgoX3JpbmcpLT5TaXplIC0gMSkpID09IChfcmluZyktPlRhaWwpCi0jZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZykgU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKChfcmluZyktPlNpemUpKQotI2RlZmluZSBTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmcpICgoX3JpbmcpLT5IZWFkID0JCQkJXAotCQkJCQkJCQkJICBTWEdfUFJFVklPVVNfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKF9yaW5nKS0+U2l6ZSkpCi0jZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZykgewkJCQkJCQkJXAotCUFTU0VSVCgoX3JpbmcpLT5UYWlsICE9IChfcmluZyktPkhlYWQpOwkJCQkJCQlcCi0JU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+VGFpbCwgKChfcmluZyktPlNpemUpKTsJCQkJXAorI2RlZmluZSBTWEdfUklOR19GVUxMKF9yaW5nKSAJCQkJCQlcCisJCSgoKChfcmluZyktPkhlYWQgKyAxKSAmICgoX3JpbmcpLT5TaXplIC0gMSkpID09IChfcmluZyktPlRhaWwpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZykgCQkJCQlcCisJCVNYR19BRFZBTkNFX0lOREVYKChfcmluZyktPkhlYWQsICgoX3JpbmcpLT5TaXplKSkKKyNkZWZpbmUgU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5nKSAoKF9yaW5nKS0+SGVhZCA9CQkJXAorCQlTWEdfUFJFVklPVVNfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKF9yaW5nKS0+U2l6ZSkpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZykgewkJCQkJXAorCUFTU0VSVCgoX3JpbmcpLT5UYWlsICE9IChfcmluZyktPkhlYWQpOwkJCQlcCisJU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+VGFpbCwgKChfcmluZyktPlNpemUpKTsJCVwKIH0KLS8vIFNldCBjbWQgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHJpbmcgZW50cnksIHNldCB0aGUgc2hhZG93IGNvbnRleHQKLS8vIGVudHJ5IGFuZCBhZHZhbmNlIHRoZSByaW5nLgotLy8gVGhlIGFwcHJvcHJpYXRlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIG1hY3JvCi0jZGVmaW5lIFNYR19HRVRfQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJCVwKLQlpZihTWEdfUklOR19GVUxMKF9yaW5naW5mbykpIHsJCQkJCQkJCQlcCi0JCShfY21kKSA9IE5VTEw7CQkJCQkJCQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQlcCi0JCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+SGVhZF07CQkJXAorLyoKKyAqIFNldCBjbWQgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHJpbmcgZW50cnksIHNldCB0aGUgc2hhZG93IGNvbnRleHQKKyAqIGVudHJ5IGFuZCBhZHZhbmNlIHRoZSByaW5nLgorICogVGhlIGFwcHJvcHJpYXRlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIG1hY3JvCisgKi8KKyNkZWZpbmUgU1hHX0dFVF9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQlcCisJaWYoU1hHX1JJTkdfRlVMTChfcmluZ2luZm8pKSB7CQkJCQlcCisJCShfY21kKSA9IE5VTEw7CQkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5IZWFkXTsJXAogCQkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+SGVhZF0gPSAodm9pZCAqKShfY29udGV4dCk7XAotCQlTWEdfUklOR19BRFZBTkNFX0hFQUQoX3JpbmdpbmZvKTsJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJXAorCQlTWEdfUklOR19BRFZBTkNFX0hFQUQoX3JpbmdpbmZvKTsJCQlcCisJfQkJCQkJCQkJXAogfQogCi0vLyBBYm9ydCB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgY29tbWFuZCBieSByZXRyZWF0aW5nIHRoZSBoZWFkLgotLy8gTk9URSAtIFRoZSBhcHBvcHJpYXRlIGxvY2sgTVVTVCBOT1QgQkUgRFJPUFBFRCBiZXR3ZWVuIHRoZSBTWEdfR0VUX0NNRAotLy8gYW5kIFNYR19BQk9SVF9DTUQgY2FsbHMuCi0jZGVmaW5lIFNYR19BQk9SVF9DTUQoX3JpbmdpbmZvKSB7CQkJCQkJCQkJXAotCUFTU0VSVCghKFNYR19SSU5HX0VNUFRZKF9yaW5naW5mbykpKTsJCQkJCQkJXAotCVNYR19SSU5HX1JFVFJFQVRfSEVBRChfcmluZ2luZm8pOwkJCQkJCQkJXAotCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9IE5VTEw7CQkJCQlcCisvKgorICogQWJvcnQgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNvbW1hbmQgYnkgcmV0cmVhdGluZyB0aGUgaGVhZC4KKyAqIE5PVEUgLSBUaGUgYXBwb3ByaWF0ZSBsb2NrIE1VU1QgTk9UIEJFIERST1BQRUQgYmV0d2VlbiB0aGUgU1hHX0dFVF9DTUQKKyAqIGFuZCBTWEdfQUJPUlRfQ01EIGNhbGxzLgorICovCisjZGVmaW5lIFNYR19BQk9SVF9DTUQoX3JpbmdpbmZvKSB7CQkJCQlcCisJQVNTRVJUKCEoU1hHX1JJTkdfRU1QVFkoX3JpbmdpbmZvKSkpOwkJCQlcCisJU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5naW5mbyk7CQkJCVwKKwkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+SGVhZF0gPSBOVUxMOwkJCVwKIH0KIAotLy8gRm9yIHRoZSBnaXZlbiByaW5nLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0YWlsIGNtZCBhbmQgY29udGV4dCwKLS8vIGNsZWFyIHRoZSBjb250ZXh0IGFuZCBhZHZhbmNlIHRoZSB0YWlsCi0jZGVmaW5lIFNYR19SRVRVUk5fQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJXAotCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+VGFpbF07CQkJCVwKKy8qCisgKiBGb3IgdGhlIGdpdmVuIHJpbmcsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRhaWwgY21kIGFuZCBjb250ZXh0LAorICogY2xlYXIgdGhlIGNvbnRleHQgYW5kIGFkdmFuY2UgdGhlIHRhaWwKKyAqLworI2RlZmluZSBTWEdfUkVUVVJOX0NNRChfcmluZywgX3JpbmdpbmZvLCBfY21kLCBfY29udGV4dCkgewkJXAorCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+VGFpbF07CQlcCiAJKF9jb250ZXh0KSA9IChfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXTsgICAgICAgCVwKLQkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+VGFpbF0gPSBOVUxMOwkJCQkJXAotCVNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZ2luZm8pOwkJCQkJCQkJXAorCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXSA9IE5VTEw7CQkJXAorCVNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZ2luZm8pOwkJCQlcCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCisvKgorICogRm9yIGEgZ2l2ZW4gcmluZyBmaW5kIG91dCBob3cgbXVjaCB0aGUgZmlyc3QgcG9pbnRlciBpcyBhaGVhZCBvZgorICogdGhlIHNlY29uZCBwb2ludGVyLiAiYWhlYWQiIHJlY29nbmlzZXMgdGhlIGZhY3QgdGhhdCB0aGUgcmluZyBjYW4gd3JhcAorICovCitzdGF0aWMgaW5saW5lIGludCBzeGdfcmluZ19nZXRfZm9yd2FyZF9kaWZmIChzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqcmluZ2luZm8sCisJCQkJCQlpbnQgYSwgaW50IGIpIHsKKwlpZiAoKGEgPCAwIHx8IGEgPiByaW5naW5mby0+U2l6ZSApIHx8IChiIDwgMCB8fCBiID4gcmluZ2luZm8tPlNpemUpKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPiBiKQkvKiBfYSBpcyBsYWdnaW5nIF9iIGFuZCBfYiBoYXMgbm90IHdyYXBwZWQgYXJvdW5kICovCisJCXJldHVybiAoYSAtIGIpOworCWVsc2UKKwkJcmV0dXJuICgocmluZ2luZm8tPlNpemUgLSAoYiAtIGEpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhvc3QgQ29tbWFuZCBCdWZmZXIgLSBjb21tYW5kcyB0byBJTklDIHZpYSB0aGUgQ21kIFJpbmdzCiAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCiAgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAogICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCiAgKiAgfDwtLS0tLS0tLS0tLS0tLSBTZ2wgTG93IC0tLS0tLS0tLS0tLS0tPnwKQEAgLTQ3OSw0MiArNTI2LDQzIEBACiAgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAogICogIHw8LS0tLS0gTENudCAtLS0tLS0+fDwtLS0tLSBGbGFncyAtLS0tLT58CiAgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYwotICovCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNwcmFnbWEgcGFjayhwdXNoLCAxKQotc3RydWN0IFNYR19DTUQgewotCWRtYV9hZGRyX3QgU2dsOwkJLy8gUGh5c2ljYWwgYWRkcmVzcyBvZiBTR0wKK3N0cnVjdCBzeGdfY21kIHsKKwlkbWE2NF9hZGRyX3QJU2dsOwkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBTR0wgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlkbWE2NF9hZGRyX3QgRmlyc3RTZ2VBZGRyZXNzOwkvLyBBZGRyZXNzIG9mIGZpcnN0IFNHRQotCQkJdTMyIEZpcnN0U2dlTGVuZ3RoOwkvLyBMZW5ndGggb2YgZmlyc3QgU0dFCisJCQlkbWE2NF9hZGRyX3QgRmlyc3RTZ2VBZGRyZXNzOyAvKiBBZGRyZXNzIG9mIGZpcnN0IFNHRSAqLworCQkJdTMyIAkgICAgIEZpcnN0U2dlTGVuZ3RoOyAgLyogTGVuZ3RoIG9mIGZpcnN0IFNHRSAqLwogCQkJdW5pb24gewotCQkJCXUzMiBSc3ZkMTsJLy8gVE9FIE5BCi0JCQkJdTMyIFNnZU9mZnNldDsJLy8gU2xvd3BhdGggLSAybmQgU0dFIG9mZnNldAotCQkJCXUzMiBSZXNpZDsJLy8gTURMIGNvbXBsZXRpb24gLSBjbG9iYmVycyB1cGRhdGUKKwkJCQl1MzIgIFJzdmQxOwkgICAvKiBUT0UgTkEgKi8KKwkJCQl1MzIgIFNnZU9mZnNldDsgLyogU2xvd3BhdGggLSAybmQgU0dFIG9mZnNldCAqLworCQkJCS8qIE1ETCBjb21wbGV0aW9uIC0gY2xvYmJlcnMgdXBkYXRlICovCisJCQkJdTMyICBSZXNpZDsKIAkJCX07CiAJCQl1bmlvbiB7Ci0JCQkJdTMyIFRvdGFsTGVuZ3RoOwkvLyBUb3RhbCB0cmFuc2ZlciBsZW5ndGgKLQkJCQl1MzIgTXNzOwkvLyBMU08gTVNTCisJCQkJdTMyICBUb3RhbExlbmd0aDsgLyogVG90YWwgdHJhbnNmZXIgbGVuZ3RoICovCisJCQkJdTMyICBNc3M7CSAgLyogTFNPIE1TUyAqLwogCQkJfTsKIAkJfSBCdWZmZXI7CiAJfTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBjaGFyIEZsYWdzOjQ7CS8vIHNsb3dwYXRoIGZsYWdzCi0JCQl1bnNpZ25lZCBjaGFyIElwSGw6NDsJLy8gSXAgaGVhZGVyIGxlbmd0aCAoPj4yKQotCQkJdW5zaWduZWQgY2hhciBNYWNMZW47CS8vIE1hYyBoZWFkZXIgbGVuCisJCQl1bnNpZ25lZCBjaGFyIEZsYWdzOjQ7CS8qIHNsb3dwYXRoIGZsYWdzICovCisJCQl1bnNpZ25lZCBjaGFyIElwSGw6NDsJLyogSXAgaGVhZGVyIGxlbmd0aCAoPj4yKSAqLworCQkJdW5zaWduZWQgY2hhciBNYWNMZW47CS8qIE1hYyBoZWFkZXIgbGVuICovCiAJCX0gQ3N1bUZsYWdzOwogCQlzdHJ1Y3QgewotCQkJdXNob3J0IEZsYWdzOjQ7CS8vIHNsb3dwYXRoIGZsYWdzCi0JCQl1c2hvcnQgVGNwSGRyT2ZmOjc7CS8vIFRDUAotCQkJdXNob3J0IE1hY0xlbjo1OwkvLyBNYWMgaGVhZGVyIGxlbgorCQkJdXNob3J0CUZsYWdzOjQ7CS8qIHNsb3dwYXRoIGZsYWdzICovCisJCQl1c2hvcnQJVGNwSGRyT2ZmOjc7CS8qIFRDUCAqLworCQkJdXNob3J0CU1hY0xlbjo1OwkvKiBNYWMgaGVhZGVyIGxlbiAqLwogCQl9IExzb0ZsYWdzOwotCQl1c2hvcnQgRmxhZ3M7CS8vIGZsYWdzCisJCXVzaG9ydAkJRmxhZ3M7CQkvKiBmbGFncyAqLwogCX07CiAJdW5pb24gewotCQl1c2hvcnQgU2dFbnRyaWVzOwkvLyBTRyBlbnRyeSBjb3VudCBpbmNsdWRpbmcgZmlyc3Qgc2dlCisJCXVzaG9ydAlTZ0VudHJpZXM7CS8qIFNHIGVudHJ5IGNvdW50IGluY2x1ZGluZyBmaXJzdCBzZ2UgKi8KIAkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBDb3BpZWQgZnJvbSBldmVudCBzdGF0dXMKKwkJCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvKiBDb3BpZWQgZnJvbSBldmVudCBzdGF0dXMgKi8KIAkJCXVuc2lnbmVkIGNoYXIgTm90VXNlZDsKIAkJfSBTdGF0dXM7CiAJfTsKQEAgLTUyMiwxMyArNTcwLDEzIEBACiAjcHJhZ21hIHBhY2socG9wKQogCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBWTEFOX0hEUiB7CitzdHJ1Y3Qgdmxhbl9oZHIgewogCXVzaG9ydCBWbGFuVGNpOwogCXVzaG9ydCBWbGFuVHBpZDsKIH07CiAjcHJhZ21hIHBhY2socG9wKQogCi0vKgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTbG93cGF0aCBGbGFnczoKICAqCiAgKgpAQCAtNTU4LDM2ICs2MDYsMzYgQEAKICAqICB8ICAgICAgTENudCAgICAgICAgIHxNQUMgaGxlbiB8SGxlbnxGbGdzfAogICogIHxfX19fX19fX19fX19fX19fX19ffF9fX198X19fX3xfX19ffF9fX198CiAgKgotICovCi0vLyBTbG93cGF0aCBDTUQgZmxhZ3MKLSNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9JUAkJCTB4MDEJLy8gQ2hlY2tzdW0gSVAKLSNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9UQ1AJCTB4MDIJLy8gQ2hlY2tzdW0gVENQCi0jZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCQkweDA0CS8vIExhcmdlIHNlZ21lbnQgc2VuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2xvd3BhdGggQ01EIGZsYWdzICovCisjZGVmaW5lIFNYR19TTE9XQ01EX0NTVU1fSVAJCTB4MDEJLyogQ2hlY2tzdW0gSVAgKi8KKyNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9UQ1AJCTB4MDIJLyogQ2hlY2tzdW0gVENQICovCisjZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCTB4MDQJLyogTGFyZ2Ugc2VnbWVudCBzZW5kICovCiAKLXN0cnVjdCBTWEdfWE1UX1JJTkcgewotCXN0cnVjdCBTWEdfQ01EIERlc2NyaXB0b3JzW1NYR19YTVRfUklOR19TSVpFXTsKK3N0cnVjdCBzeGdfeG10X3JpbmcgeworCXN0cnVjdCBzeGdfY21kIERlc2NyaXB0b3JzW1NYR19YTVRfUklOR19TSVpFXTsKIH07CiAKLXN0cnVjdCBTWEdfUkNWX1JJTkcgewotCXN0cnVjdCBTWEdfQ01EIERlc2NyaXB0b3JzW1NYR19SQ1ZfUklOR19TSVpFXTsKK3N0cnVjdCBzeGdfcmN2X3JpbmcgeworCXN0cnVjdCBzeGdfY21kIERlc2NyaXB0b3JzW1NYR19SQ1ZfUklOR19TSVpFXTsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBTaGFyZSBtZW1vcnkgYnVmZmVyIHR5cGVzIC0gVXNlZCB0byBpZGVudGlmeSBhc3luY2hyb25vdXMKICAqIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWVudW0gU1hHX0JVRkZFUl9UWVBFIHsKLQlTWEdfQlVGRkVSX1RZUEVfUkNWLAkvLyBSZWNlaXZlIGJ1ZmZlcgotCVNYR19CVUZGRVJfVFlQRV9TR0wJLy8gU0dMIGJ1ZmZlcgorICovCitlbnVtIHN4Z19idWZmZXJfdHlwZSB7CisJU1hHX0JVRkZFUl9UWVBFX1JDViwJCS8qIFJlY2VpdmUgYnVmZmVyICovCisJU1hHX0JVRkZFUl9UWVBFX1NHTAkJLyogU0dMIGJ1ZmZlciAqLwogfTsKIAotLy8gU3RhdGUgZm9yIFNYRyBidWZmZXJzCisvKiBTdGF0ZSBmb3IgU1hHIGJ1ZmZlcnMgKi8KICNkZWZpbmUgU1hHX0JVRkZFUl9GUkVFCQkweDAxCiAjZGVmaW5lIFNYR19CVUZGRVJfQlVTWQkJMHgwMgogI2RlZmluZSBTWEdfQlVGRkVSX09OQ0FSRAkweDA0CiAjZGVmaW5lIFNYR19CVUZGRVJfVVBTVFJFQU0JMHgwOAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogUmVjZWl2ZSBkYXRhIGJ1ZmZlcnMKICAqCiAgKiBSZWNlaXZlIGRhdGEgYnVmZmVycyBhcmUgZ2l2ZW4gdG8gdGhlIFNhaGFyYSBjYXJkIDEyOCBhdCBhIHRpbWUuCkBAIC01OTcsMjYyICs2NDUsMzcwIEBACiAgKiBETUEgZGF0YSBpbnRvLCBhbmQgYSB2aXJ0dWFsIGFkZHJlc3MsIHdoaWNoIGlzIGdpdmVuIGJhY2sKICAqIHRvIHRoZSBob3N0IGluIHRoZSAiSG9zdEhhbmRsZSIgcG9ydGlvbiBvZiBhbiBldmVudC4KICAqIFRoZSByZWNlaXZlIGRlc2NyaXB0b3IgZGF0YSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBiZWxvdwotICogYXMgU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBibG9jawotICogaXMgZGVmaW5lZCBhcyBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0suCisgKiBhcyBzeGdfcmN2X2RhdGFfZGVzY3JpcHRvciwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrCisgKiBpcyBkZWZpbmVkIGFzIHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jay4KICAqCiAgKiBUaGlzIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jayBpcyBnaXZlbiB0byB0aGUgY2FyZCBieSBmaWxsaW5nCi0gKiBpbiB0aGUgU2dsIGZpZWxkIG9mIGEgU1hHX0NNRCBlbnRyeSBmcm9tIHBBZGFwdC0+UmN2UmluZ3NbMF0KKyAqIGluIHRoZSBTZ2wgZmllbGQgb2YgYSBzeGdfY21kIGVudHJ5IGZyb20gcEFkYXB0LT5SY3ZSaW5nc1swXQogICogd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLgogICoKICAqIEJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9ja3MKICAqIHJlcXVpcmUgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFpbnRhaW4gdGhlbQogICogb24gYSBmcmVlIHF1ZXVlIGFuZCBjb250YWluIG90aGVyIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgotICogYW5kIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgcmVzcGVjdGl2ZWx5LgorICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkcgorICogYW5kIHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgcmVzcGVjdGl2ZWx5LgogICoKICAqIFNpbmNlIGJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jawogICogbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSBjYXJkLCBib3RoIG11c3QgYmUgYWxsb2NhdGVkIG91dCBvZgogICogc2hhcmVkIG1lbW9yeS4gIFRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVzY3JpcHRvcgogICogYmxvY2sgYXZhaWxhYmxlIGZvciBldmVyeSAxMjggYnVmZmVycywgd2UgYWxsb2NhdGUgYWxsIG9mCiAgKiB0aGVzZSByZXNvdXJjZXMgdG9nZXRoZXIgaW4gYSBzaW5nbGUgYmxvY2suICBUaGlzIGVudGlyZQotICogYmxvY2sgaXMgbWFuYWdlZCBieSBhIFNYR19SQ1ZfQkxPQ0tfSERSLCB3aG8ncyBzb2xlIHB1cnBvc2UKKyAqIGJsb2NrIGlzIG1hbmFnZWQgYnkgYSBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIsIHdobydzIHNvbGUgcHVycG9zZQogICogaXMgdG8gbWFpbnRhaW4gYWRkcmVzcyBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoZSBlbnRpcmUgYmxvY2sKICAqIGNhbiBiZSBmcmVlIGxhdGVyLgogICoKICAqIEZ1cnRoZXIgY29tcGxpY2F0aW5nIG1hdHRlcnMgaXMgdGhlIGZhY3QgdGhhdCB0aGUgcmVjZWl2ZQogICogYnVmZmVycyBtdXN0IGJlIHZhcmlhYmxlIGluIGxlbmd0aCBpbiBvcmRlciB0byBhY2NvbW9kYXRlCiAgKiBqdW1ibyBmcmFtZSBjb25maWd1cmF0aW9ucy4gIFdlIGNvbmZpZ3VyZSB0aGUgYnVmZmVyCi0gKiBsZW5ndGggc28gdGhhdCB0aGUgYnVmZmVyIGFuZCBpdCdzIGNvcnJlc3BvbmRpbmcgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKLSAqIHN0cnVjdHVyZSBhZGQgdXAgdG8gYW4gZXZlbiBib3VuZGFyeS4gIFRoZW4gd2UgcGxhY2UgdGhlCi0gKiByZW1haW5pbmcgZGF0YSBzdHJ1Y3R1cmVzIGFmdGVyIDEyOCBvZiB0aGVtIGFzIHNob3duIGluCi0gKiB0aGUgZm9sbG93aW5nIGRpYWdyYW06CisgKiBsZW5ndGggc28gdGhhdCB0aGUgYnVmZmVyIGFuZCBpdCdzIGNvcnJlc3BvbmRpbmcgc3RydWN0CisgKiBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciBzdHJ1Y3R1cmUgYWRkIHVwIHRvIGFuIGV2ZW4KKyAqIGJvdW5kYXJ5LiAgVGhlbiB3ZSBwbGFjZSB0aGUgcmVtYWluaW5nIGRhdGEgc3RydWN0dXJlcyBhZnRlciAxMjgKKyAqICBvZiB0aGVtIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKICAqCiAgKiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAqIHwgICAgVmFyaWFibGUgbGVuZ3RoIHJlY2VpdmUgYnVmZmVyICMxICAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICAgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgIzEgICAgICAgIHwKKyAqIHwgICAgICAgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgIzEgICAgICAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wgPD09IEV2ZW4gMmsgb3IgMTBrIGJvdW5kYXJ5CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgKiB8ICAgICAgICAgLi4uIHJlcGVhdCAyLTEyOCAuLiAgICAgICAgICAgICB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLICAgICAgICAgICB8Ci0gKiB8ICBDb250YWlucyBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiAqIDEyOCB8CisgKiB8ICAgICAgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAgICB8CisgKiB8ICBDb250YWlucyBzeGdfcmN2X2RhdGFfZGVzY3JpcHRvciAqIDEyOCB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAgICAgICB8CisgKiB8ICAgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgICB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgICAgIFNYR19SQ1ZfQkxPQ0tfSERSICAgICAgICAgICAgICB8CisgKiB8ICAgICAgc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICAgICAgICAgICB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKgogICogTWVtb3J5IGNvbnN1bXB0aW9uOgogICoJICBOb24tanVtYm86Ci0gKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMmsgKiAxMjggPSAyNTZrCi0gKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyA9IDJrCi0gKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgPSB+MzIKLSAqICAgICsgU1hHX1JDVl9CTE9DS19IRFIgPSB+MzIKKyAqICAgICAgQnVmZmVycyBhbmQgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgPSAyayAqIDEyOCA9IDI1NmsKKyAqICAgICsgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayA9IDJrCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyID0gfjMyCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciA9IH4zMgogICogICAgPT4gVG90YWwgPSB+MjU4ay9ibG9jawogICoKICAqCSAgSnVtYm86Ci0gKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMTBrICogMTI4ID0gMTI4MGsKLSAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKLSAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgotICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgICBCdWZmZXJzIGFuZCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciA9IDEwayAqIDEyOCA9IDEyODBrCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgPSAyaworICogICAgKyBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciA9IH4zMgorICogICAgKyBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIgPSB+MzIKICAqICAgID0+IFRvdGFsID0gfjEyODJrL2Jsb2NrCiAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUlMJCQk0MDk2CS8vIEFtb3VudCB0byBnaXZlIHRvIHRoZSBjYXJkCi0jZGVmaW5lIFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlMJODE5MgkvLyBJbml0aWFsIHBvb2wgb2YgYnVmZmVycwotI2RlZmluZSBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlMJCTIwNDgJLy8gTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUKLSNkZWZpbmUgU1hHX01BWF9SQ1ZfQkxPQ0tTCQkJCTEyOAkvLyA9IDE2Mzg0IHJlY2VpdmUgYnVmZmVycworICovCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJTCQk4MTkyCS8qIEFtb3VudCB0byBnaXZlIHRvIHRoZSBjYXJkICovCisjZGVmaW5lIFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlMJMTYzODQJLyogSW5pdGlhbCBwb29sIG9mIGJ1ZmZlcnMgKi8KKy8qIE1pbmltdW0gYW1vdW50IGFuZCB3aGVuIHRvIGdldCBtb3JlICovCisjZGVmaW5lIFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUwk0MDk2CisjZGVmaW5lIFNYR19NQVhfUkNWX0JMT0NLUwkJMjU2CS8qID0gMzJrIHJlY2VpdmUgYnVmZmVycyAqLworLyogQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQgaW4gY2FzZSBvZiBqdW1ibyBmcmFtZXMgKi8KKyNkZWZpbmUgU1hHX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlMJCTIwNDgKKy8qIEluaXRpYWwgcG9vbCBvZiBidWZmZXJzIGluIGNhc2Ugb2YganVtYm8gYnVmZmVycyAqLworI2RlZmluZSBTWEdfSU5JVElBTF9KVU1CT19SQ1ZfREFUQV9CVUZGRVJTCTQwOTYKKyNkZWZpbmUgU1hHX01JTl9KVU1CT19SQ1ZfREFUQV9CVUZGRVJTCQkxMDI0CiAKLS8vIFJlY2VpdmUgYnVmZmVyIGhlYWRlcgotc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIHsKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsJLy8gQnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MKLQkvLyBOb3RlIC0gRE8gTk9UIFVTRSB0aGUgVmlydHVhbEFkZHJlc3MgZmllbGQgdG8gbG9jYXRlIGRhdGEuCi0JLy8gVXNlIHRoZSBzeGcuaDpTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OIG1hY3JvIGluc3RlYWQuCi0Jdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIGJ1ZmZlcgotCXN0cnVjdCBMSVNUX0VOVFJZIEZyZWVMaXN0OwkvLyBGcmVlIHF1ZXVlIG9mIGJ1ZmZlcnMKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKk5leHQ7CS8vIEZhc3RwYXRoIGRhdGEgYnVmZmVyIHF1ZXVlCi0JdTMyIFNpemU7CQkvLyBCdWZmZXIgc2l6ZQotCXUzMiBCeXRlT2Zmc2V0OwkJLy8gU2VlIFNYR19SRVNUT1JFX01ETF9PRkZTRVQKLQl1bnNpZ25lZCBjaGFyIFN0YXRlOwkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQotCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBFdmVudCBzdGF0dXMgKHRvIGxvZyBQVVNIKQotCXN0cnVjdCBza19idWZmICpza2I7CS8vIERvdWJsZSBtYXBwZWQgKG5ibCBhbmQgcGt0KQorLyogUmVjZWl2ZSBidWZmZXIgaGVhZGVyICovCitzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgeworCWRtYTY0X2FkZHJfdAlQaHlzaWNhbEFkZHJlc3M7CS8qIEJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzICovCisJLyoKKwkgKiBOb3RlIC0gRE8gTk9UIFVTRSB0aGUgVmlydHVhbEFkZHJlc3MgZmllbGQgdG8gbG9jYXRlIGRhdGEuCisJICogVXNlIHRoZSBzeGcuaDpTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OIG1hY3JvIGluc3RlYWQuCisJICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZUxpc3Q7CS8qIEZyZWUgcXVldWUgb2YgYnVmZmVycyAqLworCXVuc2lnbmVkIGNoYXIJCVN0YXRlOwkJLyogU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqIHNrYjsJCS8qIERvdWJsZSBtYXBwZWQgKG5ibCBhbmQgcGt0KSovCiB9OwogCi0vLyBTeGdTbG93UmVjZWl2ZSB1c2VzIHRoZSBQQUNLRVQgKHNrYikgY29udGFpbmVkCi0vLyBpbiB0aGUgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgd2hlbiBpbmRpY2F0aW5nIGR1bWItbmljIGRhdGEKKy8qCisgKiBTeGdTbG93UmVjZWl2ZSB1c2VzIHRoZSBQQUNLRVQgKHNrYikgY29udGFpbmVkCisgKiBpbiB0aGUgc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyIHdoZW4gaW5kaWNhdGluZyBkdW1iLW5pYyBkYXRhCisgKi8KICNkZWZpbmUgU3hnRHVtYlJjdlBhY2tldAkgICAgICAgIHNrYgogCi0jZGVmaW5lIFNYR19SQ1ZfREFUQV9IRFJfU0laRQkJCTI1NgkvLyBTcGFjZSBmb3IgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKLSNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFCQkyMDQ4CS8vIE5vbiBqdW1ibyA9IDJrIGluY2x1ZGluZyBIRFIKLSNkZWZpbmUgU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRQkJMTAyNDAJLy8ganVtYm8gPSAxMGsgaW5jbHVkaW5nIEhEUgorLyogU3BhY2UgZm9yIHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqLworI2RlZmluZSBTWEdfUkNWX0RBVEFfSERSX1NJWkUJCXNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIpCisvKiBOb24ganVtYm8gPSAyayBpbmNsdWRpbmcgSERSICovCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRQkyMDQ4CisvKiBqdW1ibyA9IDEwayBpbmNsdWRpbmcgSERSICovCisjZGVmaW5lIFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUJMTAyNDAKIAotLy8gUmVjZWl2ZSBkYXRhIGRlc2NyaXB0b3IKLXN0cnVjdCBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiB7CisvKiBSZWNlaXZlIGRhdGEgZGVzY3JpcHRvciAqLworc3RydWN0IHN4Z19yY3ZfZGF0YV9kZXNjcmlwdG9yIHsKIAl1bmlvbiB7Ci0JCXN0cnVjdCBza19idWZmICpWaXJ0dWFsQWRkcmVzczsJLy8gSG9zdCBoYW5kbGUKLQkJdTY0IEZvcmNlVG84Qnl0ZXM7CS8vIEZvcmNlIHg4NiB0byA4LWJ5dGUgYm91bmRhcnkKKwkJc3RydWN0IHNrX2J1ZmYgKlZpcnR1YWxBZGRyZXNzOwkvKiBIb3N0IGhhbmRsZSAqLworCQl1NjQJCUZvcmNlVG84Qnl0ZXM7CS8qRm9yY2UgeDg2IHRvIDgtYnl0ZSBib3VuZGFyeSovCiAJfTsKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsKKwlkbWE2NF9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzOwogfTsKIAotLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrCisvKiBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgKi8KICNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0sJCTEyOAotI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfU0laRQkJMjA0OAkvLyBGb3Igc2FuaXR5IGNoZWNrCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19TSVpFCQkyMDQ4CS8qIEZvciBzYW5pdHkgY2hlY2sgKi8KIAotc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyB7Ci0Jc3RydWN0IFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SIERlc2NyaXB0b3JzW1NYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLXTsKK3N0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgeworCXN0cnVjdCBzeGdfcmN2X2RhdGFfZGVzY3JpcHRvciBEZXNjcmlwdG9yc1tTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DS107CiB9OwogCi0vLyBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgaGVhZGVyCi1zdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiB7Ci0Jdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIDJrIGJ1ZmZlcgotCWRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzOwkvLyAuLmFuZCBpdCdzIHBoeXNpY2FsIGFkZHJlc3MKLQlzdHJ1Y3QgTElTVF9FTlRSWSBGcmVlTGlzdDsJLy8gRnJlZSBxdWV1ZSBvZiBkZXNjcmlwdG9yIGJsb2NrcwotCXVuc2lnbmVkIGNoYXIgU3RhdGU7CS8vIFNlZSBTWEdfQlVGRkVSIHN0YXRlIGFib3ZlCisvKiBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgaGVhZGVyICovCitzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciB7CisJdm9pZCAJCSpWaXJ0dWFsQWRkcmVzczsJLyogc3RhcnQgb2YgMmsgYnVmZmVyICovCisJZG1hNjRfYWRkcl90CQlQaHlzaWNhbEFkZHJlc3M7LyogYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVMaXN0Oy8qIGZyZWUgcXVldWUgb2YgZGVzY3JpcHRvciBibG9ja3MgKi8KKwl1bnNpZ25lZCBjaGFyCVN0YXRlOwkvKiBzZWUgc3hnX2J1ZmZlciBzdGF0ZSBhYm92ZSAqLwogfTsKIAotLy8gUmVjZWl2ZSBibG9jayBoZWFkZXIKLXN0cnVjdCBTWEdfUkNWX0JMT0NLX0hEUiB7Ci0Jdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIHZpcnR1YWwgbWVtb3J5Ci0JZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcwotCXN0cnVjdCBMSVNUX0VOVFJZIEFsbExpc3Q7CS8vIFF1ZXVlIG9mIGFsbCBTWEdfUkNWX0JMT0NLUworLyogUmVjZWl2ZSBibG9jayBoZWFkZXIgKi8KK3N0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciB7CisJdm9pZAkJKlZpcnR1YWxBZGRyZXNzOwkvKiBTdGFydCBvZiB2aXJ0dWFsIG1lbW9yeSAqLworCWRtYTY0X2FkZHJfdAkJUGh5c2ljYWxBZGRyZXNzOy8qIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcyovCisJc3RydWN0IGxpc3RfZW50cnkJQWxsTGlzdDsJLyogUXVldWUgb2YgYWxsIFNYR19SQ1ZfQkxPQ0tTKi8KIH07CiAKLS8vIE1hY3JvcyB0byBkZXRlcm1pbmUgZGF0YSBzdHJ1Y3R1cmUgb2Zmc2V0cyBpbnRvIHJlY2VpdmUgYmxvY2sKLSNkZWZpbmUgU1hHX1JDVl9CTE9DS19TSVpFKF9CdWZmZXJzaXplKSAJCQkJCVwKKy8qIE1hY3JvcyB0byBkZXRlcm1pbmUgZGF0YSBzdHJ1Y3R1cmUgb2Zmc2V0cyBpbnRvIHJlY2VpdmUgYmxvY2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9CTE9DS19TSVpFKF9CdWZmZXJzaXplKSAJCQkJXAogCSgoKF9CdWZmZXJzaXplKSAqIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpICAgICAgICAgICAgICArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSAgICAgICAgICArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfQkxPQ0tfSERSKSkpCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykpICAgICAgICAgICAgICArCVwKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkcikpICAgICAgICAgICsJXAorCSAoc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkcikpKQogI2RlZmluZSBTWEdfUkNWX0JVRkZFUl9EQVRBX1NJWkUoX0J1ZmZlcnNpemUpCQkJCVwKIAkoKF9CdWZmZXJzaXplKSAtIFNYR19SQ1ZfREFUQV9IRFJfU0laRSkKICNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFJfT0ZGU0VUKF9CdWZmZXJzaXplKQkJCVwKIAkoKF9CdWZmZXJzaXplKSAtIFNYR19SQ1ZfREFUQV9IRFJfU0laRSkKLSNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX09GRlNFVChfQnVmZmVyc2l6ZSkJCVwKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX09GRlNFVChfQnVmZmVyc2l6ZSkJCQlcCiAJKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKLSNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCVwKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQlcCiAJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKLQkgKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSkpCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykpKQogI2RlZmluZSBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJCVwKIAkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAotCSAoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSAgICAgICAgICAgICAgKwkJXAotCSAoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSKSkpCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykpICAgICAgICAgICAgICArCVwKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkcikpKQogCi0vLyBVc2UgdGhlIG1pbmlwb3J0IHJlc2VydmVkIHBvcnRpb24gb2YgdGhlIE5CTCB0byBsb2NhdGUKLS8vIG91ciBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBzdHJ1Y3R1cmUuCi1zdHJ1Y3QgU1hHX1JDVl9OQkxfUkVTRVJWRUQgewotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqUmN2RGF0YUJ1ZmZlckhkcjsKLQl2b2lkICpBdmFpbGFibGU7CisvKiBTY2F0dGVyIGdhdGhlciBsaXN0IGJ1ZmZlciAqLworI2RlZmluZSBTWEdfSU5JVElBTF9TR0xfQlVGRkVSUwk4MTkyCS8qIEluaXRpYWwgcG9vbCBvZiBTR0wgYnVmZmVycyAqLworI2RlZmluZSBTWEdfTUlOX1NHTF9CVUZGRVJTCTIwNDgJLyogTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUqLworLyogTWF4aW11bSB0byBhbGxvY2F0ZSAobm90ZSBBREFQVDp1c2hvcnQpICovCisjZGVmaW5lIFNYR19NQVhfU0dMX0JVRkZFUlMJMTYzODQKKworLyoKKyAqIFNYR19TR0xfUE9PTF9QUk9QRVJUSUVTIC0gVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYSBwb29sIG9mIFNHTAorICogYnVmZmVycy4gVGhlc2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIG91dCBvZiBzaGFyZWQgbWVtb3J5IGFuZCB1c2VkIHRvCisgKiBjb250YWluIGEgcGh5c2ljYWwgc2NhdHRlciBnYXRoZXIgbGlzdCBzdHJ1Y3R1cmUgdGhhdCBpcyBzaGFyZWQKKyAqIHdpdGggdGhlIGNhcmQuCisgKgorICogV2Ugc3BsaXQgb3VyIFNHTCBidWZmZXJzIGludG8gbXVsdGlwbGUgcG9vbHMgYmFzZWQgb24gc2l6ZS4gIFRoZSBtb3RpdmF0aW9uCisgKiBpcyB0aGF0IHNvbWUgYXBwbGljYXRpb25zIHBlcmZvcm0gdmVyeSBsYXJnZSBJL09zICgxTUIgZm9yIGV4YW1wbGUpLCBzbworICogd2UgbmVlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGFuIFNHTCB0byBhY2NvbW1vZGF0ZSBzdWNoIGEgcmVxdWVzdC4KKyAqIEJ1dCBzdWNoIGFuIFNHTCB3b3VsZCByZXF1aXJlIDI1NiAyNC1ieXRlIFNHIGVudHJpZXMgLSB+NmsuCisgKiBHaXZlbiB0aGF0IHRoZSB2YXN0IG1ham9yaXR5IG9mIEkvT3MgYXJlIG11Y2ggc21hbGxlciB0aGFuIDFNLCBhbGxvY2F0aW5nCisgKiBhIHNpbmdsZSBwb29sIG9mIFNHTCBidWZmZXJzIHdvdWxkIGJlIGEgaG9ycmlibHkgaW5lZmZpY2llbnQgdXNlIG9mCisgKiBtZW1vcnkuCisgKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW5jbHVkZXMgdHdvIGZpZWxkcyByZWxhdGluZyB0byBpdHMgc2l6ZS4KKyAqIFRoZSBOQlNpemUgZmllbGQgc3BlY2lmaWVzIHRoZSBsYXJnZXN0IE5FVF9CVUZGRVIgdGhhdCBjYW4gYmUgaGFuZGxlZAorICogYnkgdGhlIHBhcnRpY3VsYXIgcG9vbC4gIFRoZSBTR0VudHJpZXMgZmllbGQgZGVmaW5lcyB0aGUgc2l6ZSwgaW4KKyAqIGVudHJpZXMsIG9mIHRoZSBTR0wgZm9yIHRoYXQgcG9vbC4gIFRoZSBTR0VudHJpZXMgaXMgZGV0ZXJtaW5lZCBieQorICogZGl2aWRpbmcgdGhlIE5CU2l6ZSBieSB0aGUgZXhwZWN0ZWQgcGFnZSBzaXplICg0ayksIGFuZCB0aGVuIHBhZGRpbmcKKyAqIGl0IGJ5IHNvbWUgYXBwcm9wcmlhdGUgYW1vdW50IGFzIGluc3VyYW5jZSAoMjAlIG9yIHNvLi4/PykuCisgKi8KK3N0cnVjdCBzeGdfc2dsX3Bvb2xfcHJvcGVydGllcyB7CisJdTMyCU5CU2l6ZTsJCS8qIExhcmdlc3QgTkVUX0JVRkZFUiBzaXplIGZvciB0aGlzIHBvb2wgKi8KKwl1c2hvcnQJU0dFbnRyaWVzOwkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiBTR0wgKi8KKwl1c2hvcnQJSW5pdGlhbEJ1ZmZlcnM7CS8qIE51bWJlciB0byBhbGxvY2F0ZSBhdCBpbml0aWFsaXphdGlvbnRpbWUgKi8KKwl1c2hvcnQJTWluQnVmZmVyczsJLyogV2hlbiB0byBnZXQgbW9yZSAqLworCXVzaG9ydAlNYXhCdWZmZXJzOwkvKiBXaGVuIHRvIHN0b3AgKi8KKwl1c2hvcnQJUGVyQ3B1VGhyZXNob2xkOy8qIFNlZSBzeGdoLmg6U1hHX1JFU09VUkNFUyAqLwogfTsKIAotI2RlZmluZSBTWEdfUkNWX05CTF9CVUZGRVJfSERSKF9OQkwpICgoKFBTWEdfUkNWX05CTF9SRVNFUlZFRClORVRfQlVGRkVSX0xJU1RfTUlOSVBPUlRfUkVTRVJWRUQoX05CTCkpLT5SY3ZEYXRhQnVmZmVySGRyKQorLyoKKyAqIEF0IHRoZSBtb21lbnQgSSdtIGdvaW5nIHRvIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSA0IHBvb2xzOgorICoJMTAwayBidWZmZXIgcG9vbDogVGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlIGV4cGVjdGVkIGJ1ZmZlcnMgYXJlIGV4cGVjdGVkCisgKgkJCXRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDBrLiAgQXQgMzAgZW50cmllcyBwZXIgYW5kCisgKiAJCQk4ayBpbml0aWFsIGJ1ZmZlcnMgYW1vdW50cyB0byB+NE1CIG9mIG1lbW9yeQorICogICAgICAgICAgICAgICAgIE5PVEUgLSBUaGlzIHVzZWQgdG8gYmUgNjRLIHdpdGggMjAgZW50cmllcywgYnV0IGR1cmluZworICogICAgICAgICAgICAgICAgICAgICAgICBXSFFMIE5ESVMgNi4wIFRlc3RpbmcgKDJjX21pbmk2c3RyZXNzKSBNUyBkb2VzIHRoZWlyCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgdG8gc2VuZCBhYnN1cmQgTkJMJ3Mgd2l0aCByaWRpY3Vsb3VzIFNHTHMsIHdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgcmVjZWl2ZWQgNDAwYnl0ZSBzZW5kcyBjb250YWluZWQgaW4gU0dMJ3MgdGhhdAorICogICAgICAgICAgICAgICAgICAgICAgICBoYXZlIDI4IGVudHJpZXMKKyAqCSAgMU0gYnVmZmVyIHBvb2w6IEJ1ZmZlcnMgYmV0d2VlbiA2NGsgYW5kIDFNLiAgQWxsb2NhdGUgMjU2IGluaXRpYWwKKyAqCSAgCQkgIGJ1ZmZlcnMgd2l0aCAzMDAgZW50cmllcyBlYWNoID0+IH4yTUIgb2YgbWVtb3J5CisgKgkgIDVNIGJ1ZmZlciBwb29sOiBOb3QgZXhwZWN0ZWQgb2Z0ZW4sIGlmIGF0IGFsbC4gIDMyIGluaXRpYWwgYnVmZmVycworICoJCQkgIGF0IDE1MDAgZW50cmllcyBlYWNoID0+IH4xTUIgb2YgbWVtb3J5CisgKiAxME0gYnVmZmVyIHBvb2w6IE5vdCBleHBlY3RlZCBhdCBhbGwsIGV4Y2VwdCB1bmRlciBwYXRoZWxvZ2ljYWwgY29uZGl0aW9ucy4KKyAqIAkJICAgIEFsbG9jYXRlIG9uZSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgorICogCQkgIE5vdGUgLSAxME0gaXMgdGhlIGN1cnJlbnQgbGltaXQgb2Ygd2hhdCB3ZSBjYW4gcmVhbGlzdGljYWxseQorICogCQkgIAkgc3VwcG9ydCBkdWUgdG8gdGhlIHNhaGFyYSBTR0wgYnVnIGRlc2NyaWJlZCBpbiB0aGUKKyAqIAkJICAJIFNBSEFSQSBTR0wgV09SS0FST1VORCBiZWxvdy4gV2Ugd2lsbCBsaWtlbHkgYWRqdXN0IHRoZQorICogCQkgIAkgbnVtYmVyIG9mIHBvb2xzIGFuZC9vciBwb29sIHByb3BlcnRpZXMgb3ZlciB0aW1lLgorICovCisjZGVmaW5lIFNYR19OVU1fU0dMX1BPT0xTCTQKKyNkZWZpbmUgSU5JVElBTElaRV9TR0xfUE9PTF9QUk9QRVJUSUVTCQkJCQlcCitzdHJ1Y3Qgc3hnX3NnbF9wb29sX3Byb3BlcnRpZXMgU3hnU2dsUG9vbFByb3BlcnRpZXNbU1hHX05VTV9TR0xfUE9PTFNdID1cCit7IAkJCQkJCQkJCVwKKwl7ICAxMDI0MDAsICAgMzAsIDgxOTIsIDIwNDgsIDE2Mzg0LCAyNTZ9LAkJCVwKKwl7IDEwNDg1NzYsICAzMDAsICAyNTYsICAxMjgsICAxMDI0LCAxNn0sCQkJXAorCXsgNTI1Mjg4MCwgMTUwMCwgICAzMiwgICAxNiwgICA1MTIsIDB9LAkJCQlcCisJezEwNDg1NzYwLCAyNzAwLCAgICAyLCAgICA0LCAgICAzMiwgMH0sCQkJCVwKK307CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgYnVmZmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTWEdfSU5JVElBTF9TR0xfQlVGRkVSUwkJODE5MgkvLyBJbml0aWFsIHBvb2wgb2YgU0dMIGJ1ZmZlcnMKLSNkZWZpbmUgU1hHX01JTl9TR0xfQlVGRkVSUwkJCTIwNDgJLy8gTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUKLSNkZWZpbmUgU1hHX01BWF9TR0xfQlVGRkVSUwkJCTE2Mzg0CS8vIE1heGltdW0gdG8gYWxsb2NhdGUgKG5vdGUgQURBUFQ6dXNob3J0KQorZXh0ZXJuIHN0cnVjdCBzeGdfc2dsX3Bvb2xfcHJvcGVydGllcyBTeGdTZ2xQb29sUHJvcGVydGllc1tdOwogCi0vLyBTZWxmIGlkZW50aWZ5aW5nIHN0cnVjdHVyZSB0eXBlCisjZGVmaW5lIFNYR19NQVhfU0dMX0JVRkZFUl9TSVpFCQkJCQkJXAorCVN4Z1NnbFBvb2xQcm9wZXJ0aWVzW1NYR19OVU1fU0dMX1BPT0xTIC0gMV0uTkJTaXplCisKKy8qCisgKiBTQUhBUkEgU0dMIFdPUktBUk9VTkQhIQorICogVGhlIGN1cnJlbnQgU2FoYXJhIGNhcmQgdXNlcyBhIDE2LWJpdCBjb3VudGVyIHdoZW4gYWR2YW5jaW5nCisgKiBTR0wgYWRkcmVzcyBsb2NhdGlvbnMuICBUaGlzIG1lYW5zIHRoYXQgaWYgYW4gU0dMIGNyb3NzZXMKKyAqIGEgNjRrIGJvdW5kYXJ5LCB0aGUgaGFyZHdhcmUgd2lsbCBhY3R1YWxseSBza2lwIGJhY2sgdG8KKyAqIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgNjRrIGJvdW5kYXJ5LCB3aXRoIG9idmlvdXNseQorICogdW5kZXNpcmFibGUgcmVzdWx0cy4KKyAqCisgKiBXZSBjdXJyZW50bHkgd29ya2Fyb3VuZCB0aGlzIGlzc3VlIGJ5IGFsbG9jYXRpbmcgU0dMIGJ1ZmZlcnMKKyAqIGluIDY0ayBibG9ja3MgYW5kIHNraXBwaW5nIG92ZXIgYnVmZmVycyB0aGF0IHN0cmFkZGxlIHRoZSBib3VuZGFyeS4KKyAqLworI2RlZmluZSBTWEdfSU5WQUxJRF9TR0wocGh5c19hZGRyLGxlbikgXAorCSgoKHBoeXNfYWRkciA+PiAxNikgIT0gKCAocGh5c19hZGRyICsgbGVuKSA+PiAxNiApKSkKKworLyoKKyAqIEFsbG9jYXRlIFNHTHMgaW4gYmxvY2tzIHNvIHdlIGNhbiBza2lwIG92ZXIgaW52YWxpZCBlbnRyaWVzLgorICogV2UgYWxsb2NhdGlvbiA2NGsgd29ydGggb2YgU0dMIGJ1ZmZlcnMsIGluY2x1ZGluZyB0aGUKKyAqIHN0cnVjdCBzeGdfc2dsX2Jsb2NrX2hkciwgcGx1cyBvbmUgZm9yIHBhZGRpbmcKKyAqLworI2RlZmluZSBTWEdfU0dMX0JMT0NLX1NJWkUJCQkJNjU1MzYKKyNkZWZpbmUgU1hHX1NHTF9BTExPQ0FUSU9OX1NJWkUoX1Bvb2wpCQkJCQlcCisJU1hHX1NHTF9CTE9DS19TSVpFICsgU1hHX1NHTF9TSVpFKF9Qb29sKQorCitzdHJ1Y3Qgc3hnX3NnbF9ibG9ja19oZHIgeworCXVzaG9ydAkJCVBvb2w7CQkvKiBBc3NvY2lhdGVkIFNHTCBwb29sICovCisJLyogc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciBibG9ja3MgKi8KKwlzdHJ1Y3QgbGlzdF9lbnRyeQlMaXN0OworCWRtYTY0X2FkZHJfdCAgICAgICAgCVBoeXNpY2FsQWRkcmVzczsvKiBwaHlzaWNhbCBhZGRyZXNzICovCit9OworCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGRlbm90ZXMgdGhlIG1heGltdW0gYmxvY2sgb2YgbWVtb3J5IHRoYXQgdGhlCisgKiBjYXJkIGNhbiBETUEgdG8uSXQgaXMgc3BlY2lmaWVkIGluIHRoZSBjYWxsIHRvIE5kaXNNUmVnaXN0ZXJTY2F0dGVyR2F0aGVyRG1hLgorICogRm9yIG5vdywgdXNlIHRoZSBzYW1lIHZhbHVlIGFzIHVzZWQgaW4gdGhlIFNsaWMvT2FzaXMgZHJpdmVyLCB3aGljaAorICogaXMgMTI4TS4gIFRoYXQgc2hvdWxkIGNvdmVyIGFueSBleHBlY3RlZCBNREwgdGhhdCBJIGNhbiB0aGluayBvZi4KKyAqLworI2RlZmluZSBTWEdfTUFYX1BIWVNfTUFQCSgxMDI0ICogMTAyNCAqIDEyOCkKKworLyogU2VsZiBpZGVudGlmeWluZyBzdHJ1Y3R1cmUgdHlwZSAqLwogZW51bSBTWEdfU0dMX1RZUEUgewotCVNYR19TR0xfRFVNQiwJCS8vIER1bWIgTklDIFNHTAotCVNYR19TR0xfU0xPVywJCS8vIFNsb3dwYXRoIHByb3RvY29sIGhlYWRlciAtIHNlZSBiZWxvdwotCVNYR19TR0xfQ0hJTU5FWQkJLy8gQ2hpbW5leSBvZmZsb2FkIFNHTAorCVNYR19TR0xfRFVNQiwJCS8qIER1bWIgTklDIFNHTCAqLworCVNYR19TR0xfU0xPVywJCS8qIFNsb3dwYXRoIHByb3RvY29sIGhlYWRlciAtIHNlZSBiZWxvdyAqLworCVNYR19TR0xfQ0hJTU5FWQkJLyogQ2hpbW5leSBvZmZsb2FkIFNHTCAqLwogfTsKIAotLy8gTm90ZSAtIHRoZSBkZXNjcmlwdGlvbiBiZWxvdyBpcyBNaWNyb3NvZnQgc3BlY2lmaWMKLS8vCi0vLyBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gc3BlY2lmaWVzIHRoZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSB0byBhbGxvY2F0ZQotLy8gZm9yIHRoZSBTQ0FUVEVSX0dBVEhFUl9MSVNUIHBvcnRpb24gb2YgdGhlIFNYR19TQ0FUVEVSX0dBVEhFUiBkYXRhIHN0cnVjdHVyZS4KLS8vIFRoZSBmb2xsb3dpbmcgY29uc2lkZXJhdGlvbnMgYXBwbHkgd2hlbiBzZXR0aW5nIHRoaXMgdmFsdWU6Ci0vLyAtIEZpcnN0LCB0aGUgU2FoYXJhIGNhcmQgaXMgZGVzaWduZWQgdG8gcmVhZCB0aGUgTWljcm9zb2Z0IFNHTCBzdHJ1Y3R1cmUKLS8vICAgICAgIHN0cmFpZ2h0IG91dCBvZiBob3N0IG1lbW9yeS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgU0dMIG11c3QgcmVzaWRlIGluCi0vLyAgICAgICBzaGFyZWQgbWVtb3J5LiAgSWYgdGhlIGxlbmd0aCBoZXJlIGlzIHNtYWxsZXIgdGhhbiB0aGUgU0dMIGZvciB0aGUKLS8vICAgICAgIE5FVF9CVUZGRVIsIHRoZW4gTkRJUyB3aWxsIGFsbG9jYXRlIGl0cyBvd24gYnVmZmVyLiAgVGhlIGJ1ZmZlcgotLy8gICAgICAgdGhhdCBORElTIGFsbG9jYXRlcyBpcyBub3QgaW4gc2hhcmVkIG1lbW9yeSwgc28gd2hlbiB0aGlzIGhhcHBlbnMsCi0vLyAgICAgICB0aGUgU0dMIHdpbGwgbmVlZCB0byBiZSBjb3BpZWQgdG8gYSBzZXQgb2YgU1hHX1NDQVRURVJfR0FUSEVSIGJ1ZmZlcnMuCi0vLyAgICAgICBJbiBvdGhlciB3b3Jkcy4uIHdlIGRvbid0IHdhbnQgdGhpcyB2YWx1ZSB0byBiZSB0b28gc21hbGwuCi0vLyAtIE9uIHRoZSBvdGhlciBoYW5kLi4gd2UncmUgYWxsb2NhdGluZyB1cCB0byAxNmsgb2YgdGhlc2UgdGhpbmdzLiAgSWYKLS8vICAgICAgIHdlIG1ha2UgdGhpcyB0b28gYmlnLCB3ZSBzdGFydCB0byBjb25zdW1lIGEgdG9uIG9mIG1lbW9yeS4uCi0vLyBBdCB0aGUgbW9tZW50LCBJJ20gZ29pbmcgdG8gbGltaXQgdGhlIG51bWJlciBvZiBTRyBlbnRyaWVzIHRvIDE1MC4KLS8vIElmIGVhY2ggZW50cnkgbWFwcyByb3VnaGx5IDRrLCB0aGVuIHRoaXMgc2hvdWxkIGNvdmVyIHJvdWdobHkgNjAwa0IKLS8vIE5FVF9CVUZGRVJzLiAgRnVydGhlcm1vcmUsIHNpbmNlIGVhY2ggZW50cnkgaXMgMjQgYnl0ZXMsIHRoZSB0b3RhbAotLy8gU0dFIHBvcnRpb24gb2YgdGhlIHN0cnVjdHVyZSBjb25zdW1lcyAzNjAwIGJ5dGVzLCB3aGljaCBzaG91bGQgYWxsb3cKLS8vIHRoZSBlbnRpcmUgU1hHX1NDQVRURVJfR0FUSEVSIHN0cnVjdHVyZSB0byByZXNpZGUgY29tZm9ydGFibHkgd2l0aGluCi0vLyBhIDRrIGJsb2NrLCBwcm92aWRpbmcgdGhlIHJlbWFpbmluZyBmaWVsZHMgc3RheSB1bmRlciA1MDAgYnl0ZXMuCi0vLwotLy8gU28gd2l0aCAxNTAgZW50cmllcywgdGhlIFNYR19TQ0FUVEVSX0dBVEhFUiBzdHJ1Y3R1cmUgYmVjb21lcyByb3VnaGx5Ci0vLyA0ay4gIEF0IDE2ayBvZiB0aGVtLCB0aGF0IGFtb3VudHMgdG8gNjRNIG9mIHNoYXJlZCBtZW1vcnkuICBBIHRvbiwgYnV0Ci0vLyBtYW5hZ2VhYmxlLgotI2RlZmluZSBTWEdfU0dMX0VOVFJJRVMJCTE1MAotCi0vLyBUaGUgdWNvZGUgZXhwZWN0cyBhbiBORElTIFNHTCBzdHJ1Y3R1cmUgdGhhdAotLy8gaXMgZm9ybWF0dGVkIGZvciBhbiB4NjQgc3lzdGVtLiAgV2hlbiBydW5uaW5nCi0vLyBvbiBhbiB4NjQgc3lzdGVtLCB3ZSBjYW4gc2ltcGx5IGhhbmQgdGhlIE5ESVMgU0dMCi0vLyB0byB0aGUgY2FyZCBkaXJlY3RseS4gIEZvciB4ODYgc3lzdGVtcyB3ZSBtdXN0IHJlY29uc3RydWN0Ci0vLyB0aGUgU0dMLiAgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiB4NjQKLS8vIGZvcm1hdHRlZCBTR0wgZW50cnkKLXN0cnVjdCBTWEdfWDY0X1NHRSB7Ci0JZG1hNjRfYWRkcl90IEFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKLQl1MzIgTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAotCXUzMiBDb21waWxlclBhZDsJLy8gVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcwotCXU2NCBSZXNlcnZlZDsJCS8vIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcworLyoKKyAqIFRoZSB1Y29kZSBleHBlY3RzIGFuIE5ESVMgU0dMIHN0cnVjdHVyZSB0aGF0CisgKiBpcyBmb3JtYXR0ZWQgZm9yIGFuIHg2NCBzeXN0ZW0uICBXaGVuIHJ1bm5pbmcKKyAqIG9uIGFuIHg2NCBzeXN0ZW0sIHdlIGNhbiBzaW1wbHkgaGFuZCB0aGUgTkRJUyBTR0wKKyAqIHRvIHRoZSBjYXJkIGRpcmVjdGx5LiAgRm9yIHg4NiBzeXN0ZW1zIHdlIG11c3QgcmVjb25zdHJ1Y3QKKyAqIHRoZSBTR0wuICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBkZWZpbmVzIGFuIHg2NAorICogZm9ybWF0dGVkIFNHTCBlbnRyeQorICovCitzdHJ1Y3Qgc3hnX3g2NF9zZ2UgeworCWRtYTY0X2FkZHJfdCAgICBBZGRyZXNzOwkvKiBzYW1lIGFzIHdkbS5oICovCisJdTMyCQlMZW5ndGg7CQkvKiBzYW1lIGFzIHdkbS5oICovCisJdTMyCQlDb21waWxlclBhZDsJLyogVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcyAqLworCXU2NAkJUmVzZXJ2ZWQ7CS8qIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcyAqLwogfTsKIAotc3RydWN0IFNDQVRURVJfR0FUSEVSX0VMRU1FTlQgewotCWRtYTY0X2FkZHJfdCBBZGRyZXNzOwkvLyBzYW1lIGFzIHdkbS5oCi0JdTMyIExlbmd0aDsJCS8vIHNhbWUgYXMgd2RtLmgKLQl1MzIgQ29tcGlsZXJQYWQ7CS8vIFRoZSBjb21waWxlciBwYWRzIHRvIDgtYnl0ZXMKLQl1NjQgUmVzZXJ2ZWQ7CQkvLyB1MzIgKiBpbiB3ZG0uaC4gIEZvcmNlIHRvIDggYnl0ZXMKLX07Ci0KLXN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9MSVNUIHsKKy8qCisgKiBPdXIgU0dMIHN0cnVjdHVyZSAtIEVzc2VudGlhbGx5IHRoZSBzYW1lIGFzCisgKiB3ZG0uaDpTQ0FUVEVSX0dBVEhFUl9MSVNULiAgTm90ZSB0aGUgdmFyaWFibGUgbnVtYmVyIG9mCisgKiBlbGVtZW50cyBiYXNlZCBvbiB0aGUgcG9vbCBzcGVjaWZpZWQgYWJvdmUKKyAqLworc3RydWN0IHN4Z194NjRfc2dsIHsKIAl1MzIgTnVtYmVyT2ZFbGVtZW50czsKIAl1MzIgKlJlc2VydmVkOwotCXN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIEVsZW1lbnRzW107CisJc3RydWN0IHN4Z194NjRfc2dlCQlFbGVtZW50c1sxXTsgICAvKiBWYXJpYWJsZSAqLwogfTsKIAotLy8gVGhlIGNhcmQgZG9lc24ndCBjYXJlIGFib3V0IGFueXRoaW5nIGV4Y2VwdCBlbGVtZW50cywgc28KLS8vIHdlIGNhbiBsZWF2ZSB0aGUgdTMyICogcmVzZXJ2ZWQgZmllbGQgYWxvbmUgaW4gdGhlIGZvbGxvd2luZwotLy8gU0dMIHN0cnVjdHVyZS4gIEJ1dCByZWRlZmluZSBmcm9tIHdkbS5oOlNDQVRURVJfR0FUSEVSX0xJU1Qgc28KLS8vIHdlIGNhbiBzcGVjaWZ5IFNYR19YNjRfU0dFIGFuZCBkZWZpbmUgYSBmaXhlZCBudW1iZXIgb2YgZWxlbWVudHMKLXN0cnVjdCBTWEdfWDY0X1NHTCB7Ci0JdTMyIE51bWJlck9mRWxlbWVudHM7Ci0JdTMyICpSZXNlcnZlZDsKLQlzdHJ1Y3QgU1hHX1g2NF9TR0UgRWxlbWVudHNbU1hHX1NHTF9FTlRSSUVTXTsKK3N0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgeworCWVudW0gU1hHX1NHTF9UWVBFCVR5cGU7CQkvKiBGSVJTVCEgRHVtYi1uaWMgb3Igb2ZmbG9hZCAqLworCXVzaG9ydAkJCVBvb2w7CQkvKiBBc3NvY2lhdGVkIFNHTCBwb29sICovCisJdXNob3J0CQkJRW50cmllczsJLyogU0dMIHRvdGFsIGVudHJpZXMgKi8KKwl2b2lkICogICAJCWFkYXB0ZXI7CS8qIEJhY2sgcG9pbnRlciB0byBhZGFwdGVyICovCisJLyogRnJlZSBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyIGJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVMaXN0OworCS8qIEFsbCBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyIGJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUFsbExpc3Q7CisJZG1hNjRfYWRkcl90CQlQaHlzaWNhbEFkZHJlc3M7LyogcGh5c2ljYWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGNoYXIJCVN0YXRlOwkJLyogU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUgKi8KKwl1bnNpZ25lZCBjaGFyCQlDbWRJbmRleDsJLyogQ29tbWFuZCByaW5nIGluZGV4ICovCisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAJKkR1bWJQYWNrZXQ7CS8qIEFzc29jaWF0ZWQgUGFja2V0ICovCisJLyogRm9yIGFzeW5jaHJvbm91cyBjb21wbGV0aW9ucyAqLworCXUzMgkJCURpcmVjdGlvbjsKKwl1MzIJCQlDdXJPZmZzZXQ7CS8qIEN1cnJlbnQgU0dMIG9mZnNldCAqLworCXUzMgkJCVNnbFJlZjsJCS8qIFNHTCByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qgdmxhbl9oZHIJCVZsYW5UYWc7CS8qIFZMQU4gdGFnIHRvIGJlIGluc2VydGVkIGludG8gU0dMICovCisJc3RydWN0IHN4Z194NjRfc2dsICAgICAJKnBTZ2w7CQkvKiBTR0wgQWRkci4gUG9zc2libHkgJlNnbCAqLworCXN0cnVjdCBzeGdfeDY0X3NnbAlTZ2w7CQkvKiBTR0wgaGFuZGVkIHRvIGNhcmQgKi8KIH07CiAKLXN0cnVjdCBTWEdfU0NBVFRFUl9HQVRIRVIgewotCWVudW0gU1hHX1NHTF9UWVBFIFR5cGU7CS8vIEZJUlNUISBEdW1iLW5pYyBvciBvZmZsb2FkCi0Jdm9pZCAqYWRhcHRlcjsJCS8vIEJhY2sgcG9pbnRlciB0byBhZGFwdGVyCi0Jc3RydWN0IExJU1RfRU5UUlkgRnJlZUxpc3Q7CS8vIEZyZWUgU1hHX1NDQVRURVJfR0FUSEVSIGJsb2NrcwotCXN0cnVjdCBMSVNUX0VOVFJZIEFsbExpc3Q7CS8vIEFsbCBTWEdfU0NBVFRFUl9HQVRIRVIgYmxvY2tzCi0JZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIHBoeXNpY2FsIGFkZHJlc3MKLQl1bnNpZ25lZCBjaGFyIFN0YXRlOwkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQotCXVuc2lnbmVkIGNoYXIgQ21kSW5kZXg7CS8vIENvbW1hbmQgcmluZyBpbmRleAotCXN0cnVjdCBza19idWZmICpEdW1iUGFja2V0OwkvLyBBc3NvY2lhdGVkIFBhY2tldAotCXUzMiBEaXJlY3Rpb247CQkvLyBGb3IgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zCi0JdTMyIEN1ck9mZnNldDsJCS8vIEN1cnJlbnQgU0dMIG9mZnNldAotCXUzMiBTZ2xSZWY7CQkvLyBTR0wgcmVmZXJlbmNlIGNvdW50Ci0Jc3RydWN0IFZMQU5fSERSIFZsYW5UYWc7CS8vIFZMQU4gdGFnIHRvIGJlIGluc2VydGVkIGludG8gU0dMCi0Jc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgKnBTZ2w7CS8vIFNHTCBBZGRyLiBQb3NzaWJseSAmU2dsCi0Jc3RydWN0IFNYR19YNjRfU0dMIFNnbDsJLy8gU0dMIGhhbmRlZCB0byBjYXJkCi19OworLyoKKyAqIE5vdGUgLSB0aGUgIi0gMSIgaXMgYmVjYXVzZSBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyPT5zdHJ1Y3Qgc3hnX3g2NF9zZ2wKKyAqIGluY2x1ZGVzIDEgU0dFLi4KKyAqLworI2RlZmluZSBTWEdfU0dMX1NJWkUoX1Bvb2wpIAkJCQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIpICsJCQkJXAorCSAoKFN4Z1NnbFBvb2xQcm9wZXJ0aWVzW19Qb29sXS5TR0VudHJpZXMgLSAxKSAqIAkJXAorCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3g2NF9zZ2UpKSkKIAorLyogRm9yY2UgTkRJUyB0byBnaXZlIHVzIGl0J3Mgb3duIGJ1ZmZlciBzbyB3ZSBjYW4gcmVmb3JtYXQgdG8gb3VyIG93biAqLworI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKSAgICAgICAgICAgICAgICAgTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRkZFUl9MRU5HVEgoX1N4Z1NnbCkgICAgICAgICAgMAorI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLSNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSgmX1N4Z1NnbC0+U2dsKQotI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJc2l6ZW9mKHN0cnVjdCBTWEdfWDY0X1NHTCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSAgICAoJl9TeGdTZ2wtPlNnbCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVJfTEVOR1RIKF9TeGdTZ2wpCSgoX1N4Z1NnbCktPkVudHJpZXMgKiAJCVwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzeGdfeDY0X3NnZSkpCisjZGVmaW5lIFNYR19TR0xfQlVGX1NJWkUJCQkgICAgc2l6ZW9mKHN0cnVjdCBzeGdfeDY0X3NnbCkKICNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKIC8vIEZvcmNlIE5ESVMgdG8gZ2l2ZSB1cyBpdCdzIG93biBidWZmZXIgc28gd2UgY2FuIHJlZm9ybWF0IHRvIG91ciBvd24KLSNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCU5VTEwKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSAgICAgICAgTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRkZFUl9MRU5HVEgoX1N4Z1NnbCkJCTAKICNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCTAKICNlbHNlCiAjZXJyb3Igc3RhZ2luZzogc3hnOiBkcml2ZXIgaXMgZm9yIFg4NiBvbmx5IQogI2VuZGlmCisqLworLyogTWljcm9jb2RlIHN0YXRpc3RpY3MgKi8KK3N0cnVjdCBzeGdfdWNvZGVfc3RhdHMgeworCXUzMiAgUlBEUU9mbG93OwkJLyogUERRIG92ZXJmbG93ICh1bmZyYW1lZCBpZSBkcSAmIGRyb3AgMXN0KSAqLworCXUzMiAgWERyb3BzOwkJLyogWG10IGRyb3BzIGR1ZSB0byBubyB4bXQgYnVmZmVyICovCisJdTMyICBFUkRyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBFUiBmdWxsICovCisJdTMyICBOQkRyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBvdXQgb2YgaG9zdCBidWZmZXJzICovCisJdTMyICBQUURyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBQRFEgZnVsbCAqLworCS8qIFJjdiBkcm9wcyBkdWUgdG8gYmFkIGZyYW1lOiBubyBsaW5rIGFkZHIgbWF0Y2gsIGZybGVuID4gbWF4ICovCisJdTMyICBCRkRyb3BzOworCXUzMiAgVVBEcm9wczsJCS8qIFJjdiBkcm9wcyBkdWUgdG8gVVBGcSBmdWxsICovCisJdTMyICBYTm9CdWZzOwkJLyogWG10IGRyb3AgZHVlIHRvIG5vIERSQU0gWG1pdCBidWZmZXIgb3IgUHh5QnVmICovCit9OworCisvKgorICogTWFjcm9zIGZvciBoYW5kbGluZyB0aGUgT2ZmbG9hZCBlbmdpbmUgdmFsdWVzCisgKi8KKy8qIE51bWJlciBvZiBwb3NpdGlvbnMgdG8gc2hpZnQgTmV0d29yayBIZWFkZXIgTGVuZ3RoIGJlZm9yZSBwYXNzaW5nIHRvIGNhcmQgKi8KKyNkZWZpbmUgU1hHX05XX0hEUl9MRU5fU0hJRlQJCTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaAppbmRleCBiMGVmZmY5Li44MWY4MWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdody5oCkBAIC0xLDQgKzEsNCBAQAotLyoKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDb3B5cmlnaHQgqSAxOTk3LTIwMDcgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCiAgKgogICogJElkOiBzeGdody5oLHYgMS4yIDIwMDgvMDcvMjQgMTc6MjQ6MjMgY2hyaXMgRXhwICQKQEAgLTcsNjgyICs3LDg5NCBAQAogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlCiAgKiBBbGFjcml0ZWNoIFNhaGFyYSBoYXJkd2FyZQotICovCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvbmZpZ3VyYXRpb24gc3BhY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUENJIENvbmZpZ3VyYXRpb24gc3BhY2UgKi8KIC8qICBQQ0kgVmVuZG9yIElEICovCiAjZGVmaW5lIFNYR19WRU5ET1JfSUQJCQkweDEzOUEJLyogQWxhY3JpdGVjaCdzIFZlbmRvciBJRCAqLwogCi0vLyAgUENJIERldmljZSBJRAorLyogIFBDSSBEZXZpY2UgSUQgKi8KICNkZWZpbmUgU1hHX0RFVklDRV9JRAkJCTB4MDAwOQkvKiBTYWhhcmEgRGV2aWNlIElEICovCiAKLS8vCi0vLyBTdWJzeXN0ZW0gSURzLgotLy8KLS8vIFRoZSBzdWJzeXN0ZW0gSUQgdmFsdWUgaXMgYnJva2VuIGludG8gYml0IGZpZWxkcyBhcyBmb2xsb3dzOgotLy8JCUJpdHMgWzE1OjEyXSAtIEZ1bmN0aW9uCi0vLwkJQml0cyBbMTE6OF0gIC0gT0VNIGFuZC9vciBvcGVyYXRpbmcgc3lzdGVtLgotLy8JCUJpdHMgWzc6MF0gICAtIEJhc2UgU0lELgotLy8KLS8vIFNTSUQgZmllbGQgKGJpdCkgbWFza3MKLSNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCQkJCTB4MDBGRgkvLyBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrCi0jZGVmaW5lIFNTSURfT0VNX01BU0sJCQkJCTB4MEYwMAkvLyBTdWJzeXN0ZW0gT0VNIG1hc2sKLSNkZWZpbmUgU1NJRF9GVU5DX01BU0sJCQkJCTB4RjAwMAkvLyBTdWJzeXN0ZW0gZnVuY3Rpb24gbWFzawogCi0vLyBCYXNlIFNTSUQncwotI2RlZmluZSBTU0lEX1NBSEFSQV9QUk9UTwkJCQkweDAwMTgJLy8gMTAwMDIyIFNhaGFyYSBwcm90b3R5cGUgKFhlblBhaykgYm9hcmQKLSNkZWZpbmUgU1NJRF9TQUhBUkFfRklCRVIJCQkJMHgwMDE5CS8vIDEwMDAyMyBTYWhhcmEgMS1wb3J0IGZpYmVyIGJvYXJkCi0jZGVmaW5lIFNTSURfU0FIQVJBX0NPUFBFUgkJCQkweDAwMUEJLy8gMTAwMDI0IFNhaGFyYSAxLXBvcnQgY29wcGVyIGJvYXJkCisvKiBUeXBlIG9mIEFTSUMgaW4gdXNlICovCitlbnVtIGFzaWNfdHlwZSB7CisJU0FIQVJBX1JFVl9BLAorCVNBSEFSQV9SRVZfQgorfTsKIAotLy8gVXNlZnVsIFNTSUQgbWFjcm9zCi0jZGVmaW5lCVNTSURfQkFTRShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX0JBU0VfTUFTSykJCS8vIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMKLSNkZWZpbmUJU1NJRF9PRU0oc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9PRU1fTUFTSykJCS8vIGlzb2xhdGUgU1NJRCBPRU0gYml0cwotI2RlZmluZQlTU0lEX0ZVTkMoc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9GVU5DX01BU0spCQkvLyBpc29sYXRlIFNTSUQgZnVuY3Rpb24gYml0cworLyogVHlwZSBvZiBYY3ZyIGluIGZpYmVyIGNhcmQgKi8KK2VudW0geGN2cl90eXBlIHsKKwlYQ1ZSX1VOS05PV04sCisJWENWUl9OT05FLAorCVhDVlJfU1IsCisJWENWUl9MUiwKKwlYQ1ZSX0xSTSwKKwlYQ1ZSX0NSCit9OworLyoKKyAqIFN1YnN5c3RlbSBJRHMuCisgKgorICogVGhlIHN1YnN5c3RlbSBJRCB2YWx1ZSBpcyBicm9rZW4gaW50byBiaXQgZmllbGRzIGFzIGZvbGxvd3M6CisgKgkJQml0cyBbMTU6MTJdIC0gRnVuY3Rpb24KKyAqCQlCaXRzIFsxMTo4XSAgLSBPRU0gYW5kL29yIG9wZXJhdGluZyBzeXN0ZW0uCisgKgkJQml0cyBbNzowXSAgIC0gQmFzZSBTSUQuCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEhXIFJlZ2lzdGVyIFNwYWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1hHX0hXUkVHX01FTVNJWkUJMHg0MDAwCQkvLyAxNmsKKy8qIFNTSUQgZmllbGQgKGJpdCkgbWFza3MgKi8KKyNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCTB4MDBGRgkvKiBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrICovCisjZGVmaW5lIFNTSURfT0VNX01BU0sJCTB4MEYwMAkvKiBTdWJzeXN0ZW0gT0VNIG1hc2sgKi8KKyNkZWZpbmUgU1NJRF9GVU5DX01BU0sJCTB4RjAwMAkvKiBTdWJzeXN0ZW0gZnVuY3Rpb24gbWFzayAqLworCisvKiBCYXNlIFNTSUQncyAqLworLyogMTAwMDIyIFNhaGFyYSBwcm90b3R5cGUgKFhlblBhaykgYm9hcmQgKi8KKyNkZWZpbmUgU1NJRF9TQUhBUkFfUFJPVE8JMHgwMDE4CisjZGVmaW5lIFNTSURfU0FIQVJBX0ZJQkVSCTB4MDAxOQkvKiAxMDAwMjMgU2FoYXJhIDEtcG9ydCBmaWJlciBib2FyZCAqLworI2RlZmluZSBTU0lEX1NBSEFSQV9DT1BQRVIJMHgwMDFBCS8qIDEwMDAyNCBTYWhhcmEgMS1wb3J0IGNvcHBlciBib2FyZCAqLworCisvKiBVc2VmdWwgU1NJRCBtYWNyb3MgKi8KKy8qIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMgKi8KKyNkZWZpbmUJU1NJRF9CQVNFKHNzaWQpCQkoKHNzaWQpICYgU1NJRF9CQVNFX01BU0spCisvKiBpc29sYXRlIFNTSUQgT0VNIGJpdHMgKi8KKyNkZWZpbmUJU1NJRF9PRU0oc3NpZCkJCSgoc3NpZCkgJiBTU0lEX09FTV9NQVNLKQorLyogaXNvbGF0ZSBTU0lEIGZ1bmN0aW9uIGJpdHMgKi8KKyNkZWZpbmUJU1NJRF9GVU5DKHNzaWQpCQkoKHNzaWQpICYgU1NJRF9GVU5DX01BU0spCisKKworLyogSFcgUmVnaXN0ZXIgU3BhY2UgKi8KKyNkZWZpbmUgU1hHX0hXUkVHX01FTVNJWkUJMHg0MDAwCQkvKiAxNmsgKi8KIAogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi1zdHJ1Y3QgU1hHX0hXX1JFR1MgewotCXUzMgkJUmVzZXQ7CQkJCS8vIFdyaXRlIDB4ZGVhZCB0byBpbnZva2Ugc29mdCByZXNldAotCXUzMgkJUGFkMTsJCQkJLy8gTm8gcmVnaXN0ZXIgZGVmaW5lZCBhdCBvZmZzZXQgNAotCXUzMgkJSW50ZXJydXB0TWFzazA7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDAKLQl1MzIJCUludGVycnVwdE1hc2sxOwkJLy8gRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxCi0JdTMyCQlVY29kZURhdGFMb3c7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyAzMS0wCi0JdTMyCQlVY29kZURhdGFNaWRkbGU7CS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyCi0JdTMyCQlVY29kZURhdGFIaWdoOwkJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQKLQl1MzIJCVVjb2RlQWRkcjsJCQkvLyBTdG9yZSBtaWNyb2NvZGUgYWRkcmVzcyAtIFNlZSBmbGFncyBiZWxvdwotCXUzMgkJUGFkVG8weDgwWzI0XTsJCS8vIFBhZCB0byBYY3YgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLQl1MzIJCU1hY0NvbmZpZzA7CQkJLy8gMHg4MCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKLQl1MzIJCU1hY0NvbmZpZzE7CQkJLy8gMHg4NCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKLQl1MzIJCU1hY0NvbmZpZzI7CQkJLy8gMHg4OCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIKLQl1MzIJCU1hY0NvbmZpZzM7CQkJLy8gMHg4QyAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKLQl1MzIJCU1hY0FkZHJlc3NMb3c7CQkvLyAweDkwIC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgMS00Ci0JdTMyCQlNYWNBZGRyZXNzSGlnaDsJCS8vIDB4OTQgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyA1LTYKLQl1MzIJCU1hY1Jlc2VydmVkMVsyXTsJLy8gMHg5OCAtIEFYR01BQyBSZXNlcnZlZAotCXUzMgkJTWFjTWF4RnJhbWVMZW47CQkvLyAweEEwIC0gQVhHTUFDIE1heGltdW0gRnJhbWUgTGVuZ3RoCi0JdTMyCQlNYWNSZXNlcnZlZDJbMl07CS8vIDB4QTQgLSBBWEdNQUMgUmVzZXJ2ZWQKLQl1MzIJCU1hY1JldmlzaW9uOwkJLy8gMHhBQyAtIEFYR01BQyBSZXZpc2lvbiBMZXZlbCBSZWdpc3RlcgotCXUzMgkJTWFjUmVzZXJ2ZWQzWzRdOwkvLyAweEIwIC0gQVhHTUFDIFJlc2VydmVkCi0JdTMyCQlNYWNBbWlpbUNtZDsJCS8vIDB4QzAgLSBBWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlcgotCXUzMgkJTWFjQW1paW1GaWVsZDsJCS8vIDB4QzQgLSBBWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKLQl1MzIJCU1hY0FtaWltQ29uZmlnOwkJLy8gMHhDOCAtIEFYR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0JdTMyCQlNYWNBbWlpbUxpbms7CQkvLyAweENDIC0gQVhHTUFDIEFNSUlNIExpbmsgRmFpbCBWZWN0b3IgUmVnaXN0ZXIKLQl1MzIJCU1hY0FtaWltSW5kaWNhdG9yOwkvLyAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvcgotCXUzMgkJUGFkVG8weDEwMFsxMV07CQkvLyAweEQ0IC0gMHgxMDAgLSBQYWQKLQl1MzIJCVhtdENvbmZpZzsJCQkvLyAweDEwMCAtIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLQl1MzIJCVJjdkNvbmZpZzsJCQkvLyAweDEwNCAtIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCi0JdTMyCQlMaW5rQWRkcmVzczBMb3c7CS8vIDB4MTA4IC0gTGluayBhZGRyZXNzIDAKLQl1MzIJCUxpbmtBZGRyZXNzMEhpZ2g7CS8vIDB4MTBDIC0gTGluayBhZGRyZXNzIDAKLQl1MzIJCUxpbmtBZGRyZXNzMUxvdzsJLy8gMHgxMTAgLSBMaW5rIGFkZHJlc3MgMQotCXUzMgkJTGlua0FkZHJlc3MxSGlnaDsJLy8gMHgxMTQgLSBMaW5rIGFkZHJlc3MgMQotCXUzMgkJTGlua0FkZHJlc3MyTG93OwkvLyAweDExOCAtIExpbmsgYWRkcmVzcyAyCi0JdTMyCQlMaW5rQWRkcmVzczJIaWdoOwkvLyAweDExQyAtIExpbmsgYWRkcmVzcyAyCi0JdTMyCQlMaW5rQWRkcmVzczNMb3c7CS8vIDB4MTIwIC0gTGluayBhZGRyZXNzIDMKLQl1MzIJCUxpbmtBZGRyZXNzM0hpZ2g7CS8vIDB4MTI0IC0gTGluayBhZGRyZXNzIDMKLQl1MzIJCVRvZXBsaXR6S2V5WzEwXTsJLy8gMHgxMjggLSAweDE1MCAtIFRvZXBsaXR6IGtleQotCXUzMgkJU29ja2V0S2V5WzEwXTsJCS8vIDB4MTUwIC0gMHgxNzggLSBTb2NrZXQgS2V5Ci0JdTMyCQlMaW5rU3RhdHVzOwkJCS8vIDB4MTc4IC0gTGluayBzdGF0dXMKLQl1MzIJCUNsZWFyU3RhdHM7CQkJLy8gMHgxN0MgLSBDbGVhciBTdGF0cwotCXUzMgkJWG10RXJyb3JzTG93OwkJLy8gMHgxODAgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycwotCXUzMgkJWG10RXJyb3JzSGlnaDsJCS8vIDB4MTg0IC0gVHJhbnNtaXQgc3RhdHMgLSBlcnJvcnMKLQl1MzIJCVhtdEZyYW1lc0xvdzsJCS8vIDB4MTg4IC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAotCXUzMgkJWG10RnJhbWVzSGlnaDsJCS8vIDB4MThDIC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAotCXUzMgkJWG10Qnl0ZXNMb3c7CQkvLyAweDE5MCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJWG10Qnl0ZXNIaWdoOwkJLy8gMHgxOTQgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQKLQl1MzIJCVhtdFRjcFNlZ21lbnRzTG93OwkvLyAweDE5OCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIHNlZ21lbnRzCi0JdTMyCQlYbXRUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MTlDIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKLQl1MzIJCVhtdFRjcEJ5dGVzTG93OwkJLy8gMHgxQTAgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcwotCXUzMgkJWG10VGNwQnl0ZXNIaWdoOwkvLyAweDFBNCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCi0JdTMyCQlSY3ZFcnJvcnNMb3c7CQkvLyAweDFBOCAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKLQl1MzIJCVJjdkVycm9yc0hpZ2g7CQkvLyAweDFBQyAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKLQl1MzIJCVJjdkZyYW1lc0xvdzsJCS8vIDB4MUIwIC0gUmVjZWl2ZSBzdGF0cyAtIGZyYW1lIGNvdW50Ci0JdTMyCQlSY3ZGcmFtZXNIaWdoOwkJLy8gMHgxQjQgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKLQl1MzIJCVJjdkJ5dGVzTG93OwkJLy8gMHgxQjggLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJUmN2Qnl0ZXNIaWdoOwkJLy8gMHgxQkMgLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJUmN2VGNwU2VnbWVudHNMb3c7CS8vIDB4MUMwIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cwotCXUzMgkJUmN2VGNwU2VnbWVudHNIaWdoOwkvLyAweDFDNCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1Agc2VnbWVudHMKLQl1MzIJCVJjdlRjcEJ5dGVzTG93OwkJLy8gMHgxQzggLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCi0JdTMyCQlSY3ZUY3BCeXRlc0hpZ2g7CS8vIDB4MUNDIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcwotCXUzMgkJUGFkVG8weDIwMFsxMl07CQkvLyAweDFEMCAtIDB4MjAwIC0gUGFkCi0JdTMyCQlTb2Z0d2FyZVsxOTIwXTsJCS8vIDB4MjAwIC0gMHgyMDAwIC0gU29mdHdhcmUgZGVmaW5lZCAobm90IHVzZWQpCi0JdTMyCQlNc2l4VGFibGVbMTAyNF07CS8vIDB4MjAwMCAtIDB4MzAwMCAtIE1TSVggVGFibGUKLQl1MzIJCU1zaXhCaXRBcnJheVsxMDI0XTsJLy8gMHgzMDAwIC0gMHg0MDAwIC0gTVNJWCBQZW5kaW5nIEJpdCBBcnJheQorc3RydWN0IHN4Z19od19yZWdzIHsKKwl1MzIJUmVzZXQ7CQkvKiBXcml0ZSAweGRlYWQgdG8gaW52b2tlIHNvZnQgcmVzZXQgKi8KKwl1MzIJUGFkMTsJCS8qIE5vIHJlZ2lzdGVyIGRlZmluZWQgYXQgb2Zmc2V0IDQgKi8KKwl1MzIJSW50ZXJydXB0TWFzazA7CS8qIERlYXNzZXJ0IGxlZ2FjeSBpbnRlcnJ1cHQgb24gZnVuY3Rpb24gMCAqLworCXUzMglJbnRlcnJ1cHRNYXNrMTsJLyogRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxICovCisJdTMyCVVjb2RlRGF0YUxvdzsJLyogU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgMzEtMCAqLworCXUzMglVY29kZURhdGFNaWRkbGU7CS8qIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyICovCisJdTMyCVVjb2RlRGF0YUhpZ2g7CS8qIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDk1LTY0ICovCisJdTMyCVVjb2RlQWRkcjsJLyogU3RvcmUgbWljcm9jb2RlIGFkZHJlc3MgLSBTZWUgZmxhZ3MgYmVsb3cgKi8KKwl1MzIJUGFkVG8weDgwWzI0XTsJLyogUGFkIHRvIFhjdiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworCXUzMglNYWNDb25maWcwOwkvKiAweDgwIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworCXUzMglNYWNDb25maWcxOwkvKiAweDg0IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworCXUzMglNYWNDb25maWcyOwkvKiAweDg4IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworCXUzMglNYWNDb25maWczOwkvKiAweDhDIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworCXUzMglNYWNBZGRyZXNzTG93OwkvKiAweDkwIC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgMS00ICovCisJdTMyCU1hY0FkZHJlc3NIaWdoOwkvKiAweDk0IC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgNS02ICovCisJdTMyCU1hY1Jlc2VydmVkMVsyXTsJLyogMHg5OCAtIEFYR01BQyBSZXNlcnZlZCAqLworCXUzMglNYWNNYXhGcmFtZUxlbjsJLyogMHhBMCAtIEFYR01BQyBNYXhpbXVtIEZyYW1lIExlbmd0aCAqLworCXUzMglNYWNSZXNlcnZlZDJbMl07CS8qIDB4QTQgLSBBWEdNQUMgUmVzZXJ2ZWQgKi8KKwl1MzIJTWFjUmV2aXNpb247CS8qIDB4QUMgLSBBWEdNQUMgUmV2aXNpb24gTGV2ZWwgUmVnaXN0ZXIgKi8KKwl1MzIJTWFjUmVzZXJ2ZWQzWzRdOwkvKiAweEIwIC0gQVhHTUFDIFJlc2VydmVkICovCisJdTMyCU1hY0FtaWltQ21kOwkvKiAweEMwIC0gQVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIgKi8KKwl1MzIJTWFjQW1paW1GaWVsZDsJLyogMHhDNCAtIEFYR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlciAqLworCXUzMglNYWNBbWlpbUNvbmZpZzsJLyogMHhDOCAtIEFYR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJdTMyCU1hY0FtaWltTGluazsJLyogMHhDQyAtIEFYR01BQyBBTUlJTSBMaW5rIEZhaWwgVmVjdG9yIFJlZ2lzdGVyICovCisJdTMyCU1hY0FtaWltSW5kaWNhdG9yOwkvKiAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvciAqLworCXUzMglQYWRUbzB4MTAwWzExXTsJCS8qIDB4RDQgLSAweDEwMCAtIFBhZCAqLworCXUzMglYbXRDb25maWc7CS8qIDB4MTAwIC0gVHJhbnNtaXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCXUzMglSY3ZDb25maWc7CS8qIDB4MTA0IC0gUmVjZWl2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKwl1MzIJTGlua0FkZHJlc3MwTG93OwkvKiAweDEwOCAtIExpbmsgYWRkcmVzcyAwICovCisJdTMyCUxpbmtBZGRyZXNzMEhpZ2g7CS8qIDB4MTBDIC0gTGluayBhZGRyZXNzIDAgKi8KKwl1MzIJTGlua0FkZHJlc3MxTG93OwkvKiAweDExMCAtIExpbmsgYWRkcmVzcyAxICovCisJdTMyCUxpbmtBZGRyZXNzMUhpZ2g7CS8qIDB4MTE0IC0gTGluayBhZGRyZXNzIDEgKi8KKwl1MzIJTGlua0FkZHJlc3MyTG93OwkvKiAweDExOCAtIExpbmsgYWRkcmVzcyAyICovCisJdTMyCUxpbmtBZGRyZXNzMkhpZ2g7CS8qIDB4MTFDIC0gTGluayBhZGRyZXNzIDIgKi8KKwl1MzIJTGlua0FkZHJlc3MzTG93OwkvKiAweDEyMCAtIExpbmsgYWRkcmVzcyAzICovCisJdTMyCUxpbmtBZGRyZXNzM0hpZ2g7CS8qIDB4MTI0IC0gTGluayBhZGRyZXNzIDMgKi8KKwl1MzIJVG9lcGxpdHpLZXlbMTBdOwkvKiAweDEyOCAtIDB4MTUwIC0gVG9lcGxpdHoga2V5ICovCisJdTMyCVNvY2tldEtleVsxMF07CQkvKiAweDE1MCAtIDB4MTc4IC0gU29ja2V0IEtleSAqLworCXUzMglMaW5rU3RhdHVzOwkJLyogMHgxNzggLSBMaW5rIHN0YXR1cyAqLworCXUzMglDbGVhclN0YXRzOwkJLyogMHgxN0MgLSBDbGVhciBTdGF0cyAqLworCXUzMglYbXRFcnJvcnNMb3c7CQkvKiAweDE4MCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzICovCisJdTMyCVhtdEVycm9yc0hpZ2g7CQkvKiAweDE4NCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzICovCisJdTMyCVhtdEZyYW1lc0xvdzsJLyogMHgxODggLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50ICovCisJdTMyCVhtdEZyYW1lc0hpZ2g7CS8qIDB4MThDIC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudCAqLworCXUzMglYbXRCeXRlc0xvdzsJLyogMHgxOTAgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQgKi8KKwl1MzIJWG10Qnl0ZXNIaWdoOwkvKiAweDE5NCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudCAqLworCXUzMglYbXRUY3BTZWdtZW50c0xvdzsJLyogMHgxOTggLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglYbXRUY3BTZWdtZW50c0hpZ2g7CS8qIDB4MTlDIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMgKi8KKwl1MzIJWG10VGNwQnl0ZXNMb3c7CQkvKiAweDFBMCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzICovCisJdTMyCVhtdFRjcEJ5dGVzSGlnaDsJLyogMHgxQTQgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcyAqLworCXUzMglSY3ZFcnJvcnNMb3c7CQkvKiAweDFBOCAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMgKi8KKwl1MzIJUmN2RXJyb3JzSGlnaDsJCS8qIDB4MUFDIC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycyAqLworCXUzMglSY3ZGcmFtZXNMb3c7CQkvKiAweDFCMCAtIFJlY2VpdmUgc3RhdHMgLSBmcmFtZSBjb3VudCAqLworCXUzMglSY3ZGcmFtZXNIaWdoOwkJLyogMHgxQjQgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQgKi8KKwl1MzIJUmN2Qnl0ZXNMb3c7CQkvKiAweDFCOCAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50ICovCisJdTMyCVJjdkJ5dGVzSGlnaDsJCS8qIDB4MUJDIC0gUmVjZWl2ZSBzdGF0cyAtIGJ5dGUgY291bnQgKi8KKwl1MzIJUmN2VGNwU2VnbWVudHNMb3c7CS8qIDB4MUMwIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglSY3ZUY3BTZWdtZW50c0hpZ2g7CS8qIDB4MUM0IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglSY3ZUY3BCeXRlc0xvdzsJCS8qIDB4MUM4IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcyAqLworCXUzMglSY3ZUY3BCeXRlc0hpZ2g7CS8qIDB4MUNDIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcyAqLworCXUzMglQYWRUbzB4MjAwWzEyXTsJCS8qIDB4MUQwIC0gMHgyMDAgLSBQYWQgKi8KKwl1MzIJU29mdHdhcmVbMTkyMF07CQkvKiAweDIwMCAtIDB4MjAwMCAtIFNvZnR3YXJlIGRlZmluZWQgKG5vdCB1c2VkKSAqLworCXUzMglNc2l4VGFibGVbMTAyNF07CS8qIDB4MjAwMCAtIDB4MzAwMCAtIE1TSVggVGFibGUgKi8KKwl1MzIJTXNpeEJpdEFycmF5WzEwMjRdOwkvKiAweDMwMDAgLSAweDQwMDAgLSBNU0lYIFBlbmRpbmcgQml0IEFycmF5ICovCiB9OwogI3ByYWdtYSBwYWNrKHBvcCkKIAotLy8gTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MKLSNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfR08JCTB4ODAwMDAwMDAJLy8gU3RhcnQgbWljcm9jb2RlCi0jZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFCQkweDQwMDAwMDAwCS8vIFN0b3JlIG1pY3JvY29kZQotI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8vIFJlYWQgbWljcm9jb2RlCi0jZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWQkweDEwMDAwMDAwCS8vIFBhcml0eSBlcnJvciBkZXRlY3RlZAotI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19NQVNLCQkweDAwMDAxRkZGCS8vIEFkZHJlc3MgYml0cworLyogTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MgKi8KKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfR08JCTB4ODAwMDAwMDAJLyogU3RhcnQgbWljcm9jb2RlICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFCQkweDQwMDAwMDAwCS8qIFN0b3JlIG1pY3JvY29kZSAqLworI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8qIFJlYWQgbWljcm9jb2RlICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWQkweDEwMDAwMDAwLyogUGFyaXR5IGVycm9yIGRldGVjdGVkICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX01BU0sJCTB4MDAwMDFGRkYJLyogQWRkcmVzcyBiaXRzICovCiAKLS8vIExpbmsgQWRkcmVzcyBSZWdpc3RlcnMKLSNkZWZpbmUgTElOS19BRERSRVNTX0VOQUJMRQkJCTB4ODAwMDAwMDAJLy8gQXBwbGllZCB0byBsaW5rIGFkZHJlc3MgaGlnaAorLyogTGluayBBZGRyZXNzIFJlZ2lzdGVycyAqLworLyogQXBwbGllZCB0byBsaW5rIGFkZHJlc3MgaGlnaCAqLworI2RlZmluZSBMSU5LX0FERFJFU1NfRU5BQkxFCTB4ODAwMDAwMDAKIAotLy8gTWljcm9zb2Z0IHJlZ2lzdGVyIHNwYWNlIHNpemUKLSNkZWZpbmUgU1hHX1VDT0RFUkVHX01FTVNJWkUJMHg0MDAwMAkJLy8gMjU2aworLyogTWljcm9zb2Z0IHJlZ2lzdGVyIHNwYWNlIHNpemUgKi8KKyNkZWZpbmUgU1hHX1VDT0RFUkVHX01FTVNJWkUJMHg0MDAwMAkJLyogMjU2ayAqLwogCi0vLyBTYWhhcmEgbWljcm9jb2RlIHJlZ2lzdGVyIGFkZHJlc3MgZm9ybWF0LiAgVGhlIGNvbW1hbmQgY29kZSwKLS8vIGV4dGVuZGVkIGNvbW1hbmQgY29kZSwgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc29yIGFyZSBlbmNvZGVkIGluCi0vLyB0aGUgYWRkcmVzcyBiaXRzIGFzIGZvbGxvd3MKLSNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9TSElGVAkJMgkJCS8vIEJhc2UgY29tbWFuZCBjb2RlCisvKgorICogU2FoYXJhIG1pY3JvY29kZSByZWdpc3RlciBhZGRyZXNzIGZvcm1hdC4gIFRoZSBjb21tYW5kIGNvZGUsCisgKiBleHRlbmRlZCBjb21tYW5kIGNvZGUsIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NvciBhcmUgZW5jb2RlZCBpbgorICogdGhlIGFkZHJlc3MgYml0cyBhcyBmb2xsb3dzCisgKi8KKyNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9TSElGVAkJMgkJLyogQmFzZSBjb21tYW5kIGNvZGUgKi8KICNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9NQVNLCQkweDAwMDAwMDNDCi0jZGVmaW5lIFNYR19BRERSRVNTX0VYQ09ERV9TSElGVAk2CQkJLy8gRXh0ZW5kZWQgKG9yIHN1YikgY29tbWFuZCBjb2RlCisvKiBFeHRlbmRlZCAob3Igc3ViKSBjb21tYW5kIGNvZGUgKi8KKyNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX1NISUZUCTYKICNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX01BU0sJCTB4MDAwMDFGQzAKLSNkZWZpbmUJU1hHX0FERFJFU1NfQ1BVSURfU0hJRlQJCTEzCQkJLy8gQ1BVCisjZGVmaW5lCVNYR19BRERSRVNTX0NQVUlEX1NISUZUCQkxMwkJLyogQ1BVICovCiAjZGVmaW5lIFNYR19BRERSRVNTX0NQVUlEX01BU0sJCTB4MDAwM0UwMDAKLSNkZWZpbmUgU1hHX1JFR0lTVEVSX1NJWkVfUEVSX0NQVQkweDAwMDAyMDAwCS8vIFVzZWQgdG8gc2FuaXR5IGNoZWNrIFVDT0RFX1JFR1Mgc3RydWN0dXJlCisvKiBVc2VkIHRvIHNhbml0eSBjaGVjayBVQ09ERV9SRUdTIHN0cnVjdHVyZSAqLworI2RlZmluZSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVCTB4MDAwMDIwMDAKIAotLy8gU2FoYXJhIHJlY2VpdmUgc2VxdWVuY2VyIHN0YXR1cyB2YWx1ZXMKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQVRUTgkJCTB4ODAwMDAwMDAJLy8gQXR0ZW50aW9uCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9NQVNLCQkweDNGMDAwMDAwCS8vIFRyYW5zcG9ydCBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0JCTB4MjMwMDAwMDAJLy8gVHJhbnNwb3J0IGNrc3VtIGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVwkJMHgyMjAwMDAwMAkvLyBUcmFuc3BvcnQgdW5kZXJmbG93Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4JCTB4MjAwMDAwMDAJLy8gVHJhbnNwb3J0IGhlYWRlciBsZW5ndGgKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZMQUdTCQkweDEwMDAwMDAwCS8vIFRyYW5zcG9ydCBmbGFncyBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfT1BUUwkJMHgwODAwMDAwMAkvLyBUcmFuc3BvcnQgb3B0aW9ucyBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU0VTU19NQVNLCTB4MDcwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRERQCQkweDA2MDAwMDAwCS8vIFRyYW5zcG9ydCBERFAKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX2lTQ1NJCQkweDA1MDAwMDAwCS8vIFRyYW5zcG9ydCBpU0NTSQotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTkZTCQkweDA0MDAwMDAwCS8vIFRyYW5zcG9ydCBORlMKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZUUAkJMHgwMzAwMDAwMAkvLyBUcmFuc3BvcnQgRlRQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IVFRQCQkweDAyMDAwMDAwCS8vIFRyYW5zcG9ydCBIVFRQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TTUIJCTB4MDEwMDAwMDAJLy8gVHJhbnNwb3J0IFNNQgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01BU0sJCTB4MDBGRjAwMDAJLy8gTmV0d29yayBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IJCTB4MDA4MDAwMDAJLy8gTmV0d29yayBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCTB4MDA4MzAwMDAJLy8gTmV0d29yayBja3N1bSBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XCQkweDAwODIwMDAwCS8vIE5ldHdvcmsgdW5kZXJmbG93IGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfSERSTEVOCQkweDAwODAwMDAwCS8vIE5ldHdvcmsgaGVhZGVyIGxlbmd0aAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09GTE9XCQkweDAwNDAwMDAwCS8vIE5ldHdvcmsgb3ZlcmZsb3cgZGV0ZWN0ZWQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19NQ0FTVAkJMHgwMDIwMDAwMAkvLyBOZXR3b3JrIG11bHRpY2FzdCBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09QVElPTlMJCTB4MDAxMDAwMDAJLy8gTmV0d29yayBvcHRpb25zIGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZGU0VUCQkweDAwMDgwMDAwCS8vIE5ldHdvcmsgb2Zmc2V0IGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRlJBR01FTlQJCTB4MDAwNDAwMDAJLy8gTmV0d29yayBmcmFnbWVudCBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1RSQU5TX01BU0sJMHgwMDAzMDAwMAkvLyBOZXR3b3JrIHRyYW5zcG9ydCB0eXBlIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRFAJCTB4MDAwMjAwMDAJLy8gVURQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVENQCQkweDAwMDEwMDAwCS8vIFRDUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19JUE9OTFkJCQkweDAwMDA4MDAwCS8vIElQLW9ubHkgbm90IFRDUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QS1RfUFJJCQkJMHgwMDAwNjAwMAkvLyBSZWNlaXZlIHByaW9yaXR5Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUklfU0hGVAkJCTEzCS8vIFJlY2VpdmUgcHJpb3JpdHkgc2hpZnQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEFSSVRZCQkJMHgwMDAwMTAwMAkvLyBNQUMgUmVjZWl2ZSBSQU0gcGFyaXR5IGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUFTSwkJMHgwMDAwMEYwMAkvLyBMaW5rIGFkZHJlc3MgZGV0ZWN0aW9uIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19ECQkweDAwMDAwQjAwCS8vIExpbmsgYWRkcmVzcyBECi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQwkJMHgwMDAwMEEwMAkvLyBMaW5rIGFkZHJlc3MgQwotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0IJCTB4MDAwMDA5MDAJLy8gTGluayBhZGRyZXNzIEIKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19BCQkweDAwMDAwODAwCS8vIExpbmsgYWRkcmVzcyBBCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQkNBU1QJCTB4MDAwMDAzMDAJLy8gTGluayBhZGRyZXNzIGJyb2FkY2FzdAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX01DQVNUCQkweDAwMDAwMjAwCS8vIExpbmsgYWRkcmVzcyBtdWx0aWNhc3QKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19DTUNBU1QJCTB4MDAwMDAxMDAJLy8gTGluayBjb250cm9sIG11bHRpY2FzdAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX01BU0sJCTB4MDAwMDAwRkYJLy8gTGluayBzdGF0dXMgbWFzawotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VSUk9SCQkweDAwMDAwMDgwCS8vIExpbmsgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCS8vIExpbmsgc3RhdHVzIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFkJCTB4MDAwMDAwODcJLy8gUmN2TWFjUSBwYXJpdHkgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19FQVJMWQkJMHgwMDAwMDA4NgkvLyBEYXRhIGVhcmx5Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1cJCTB4MDAwMDAwODUJLy8gQnVmZmVyIG92ZXJmbG93Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERQkJMHgwMDAwMDA4NAkvLyBMaW5rIGNvZGUgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFCQkweDAwMDAwMDgzCS8vIERyaWJibGUgbmliYmxlCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDCQkJMHgwMDAwMDA4MgkvLyBDUkMgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVwkJMHgwMDAwMDA4MQkvLyBMaW5rIG92ZXJmbG93Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1cJCTB4MDAwMDAwODAJLy8gTGluayB1bmRlcmZsb3cKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS184MDIzCQkweDAwMDAwMDIwCS8vIDgwMi4zCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfU05BUAkJMHgwMDAwMDAxMAkvLyBTbmFwCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVkxBTgkJMHgwMDAwMDAwOAkvLyBWTEFOCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVFlQRV9NQVNLCQkweDAwMDAwMDA3CS8vIE5ldHdvcmsgdHlwZSBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09OVFJPTAkJMHgwMDAwMDAwMwkvLyBDb250cm9sIHBhY2tldAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCTB4MDAwMDAwMDIJLy8gSVB2NiBwYWNrZXQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19JUFY0CQkweDAwMDAwMDAxCS8vIElQdjQgcGFja2V0CisvKiBTYWhhcmEgcmVjZWl2ZSBzZXF1ZW5jZXIgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BVFROCQkJMHg4MDAwMDAwMCAvKiBBdHRlbnRpb24gKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0sJCTB4M0YwMDAwMDAgLyogVHJhbnNwb3J0IG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SCQkweDIwMDAwMDAwIC8qIFRyYW5zcG9ydCBlcnJvciAqLworLyogVHJhbnNwb3J0IGNrc3VtIGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9DU1VNCQkweDIzMDAwMDAwCisvKiBUcmFuc3BvcnQgdW5kZXJmbG93ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVwkJMHgyMjAwMDAwMAorIC8qIFRyYW5zcG9ydCBoZWFkZXIgbGVuZ3RoICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4JCTB4MjAwMDAwMDAKKy8qIFRyYW5zcG9ydCBmbGFncyBkZXRlY3RlZCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRkxBR1MJCTB4MTAwMDAwMDAKKyAvKiBUcmFuc3BvcnQgb3B0aW9ucyBkZXRlY3RlZCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfT1BUUwkJMHgwODAwMDAwMAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU0VTU19NQVNLCTB4MDcwMDAwMDAgLyogVHJhbnNwb3J0IEREUCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRERQCQkweDA2MDAwMDAwIC8qIFRyYW5zcG9ydCBERFAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX2lTQ1NJCQkweDA1MDAwMDAwIC8qIFRyYW5zcG9ydCBpU0NTSSAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTkZTCQkweDA0MDAwMDAwIC8qIFRyYW5zcG9ydCBORlMgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZUUAkJMHgwMzAwMDAwMCAvKiBUcmFuc3BvcnQgRlRQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IVFRQCQkweDAyMDAwMDAwIC8qIFRyYW5zcG9ydCBIVFRQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TTUIJCTB4MDEwMDAwMDAgLyogVHJhbnNwb3J0IFNNQiAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01BU0sJCTB4MDBGRjAwMDAgLyogTmV0d29yayBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IJCTB4MDA4MDAwMDAgLyogTmV0d29yayBlcnJvciAqLworLyogTmV0d29yayBja3N1bSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCTB4MDA4MzAwMDAKKy8qIE5ldHdvcmsgdW5kZXJmbG93IGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1cJCTB4MDA4MjAwMDAKKyAvKiBOZXR3b3JrIGhlYWRlciBsZW5ndGggKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU4JCTB4MDA4MDAwMDAKKyAvKiBOZXR3b3JrIG92ZXJmbG93IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZMT1cJCTB4MDA0MDAwMDAKKy8qIE5ldHdvcmsgbXVsdGljYXN0IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUNBU1QJCTB4MDAyMDAwMDAKKy8qIE5ldHdvcmsgb3B0aW9ucyBkZXRlY3RlZCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09QVElPTlMJCTB4MDAxMDAwMDAKKy8qIE5ldHdvcmsgb2Zmc2V0IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZGU0VUCQkweDAwMDgwMDAwCisvKiBOZXR3b3JrIGZyYWdtZW50IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRlJBR01FTlQJCTB4MDAwNDAwMDAKKy8qIE5ldHdvcmsgdHJhbnNwb3J0IHR5cGUgbWFzayAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1RSQU5TX01BU0sJMHgwMDAzMDAwMAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VEUAkJMHgwMDAyMDAwMCAvKiBVRFAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UQ1AJCTB4MDAwMTAwMDAgLyogVENQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0lQT05MWQkJCTB4MDAwMDgwMDAgLyogSVAtb25seSBub3QgVENQICovCisvKiBSZWNlaXZlIHByaW9yaXR5ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUkkJCQkweDAwMDA2MDAwCisvKiBSZWNlaXZlIHByaW9yaXR5IHNoaWZ0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUklfU0hGVAkJMTMKKy8qIE1BQyBSZWNlaXZlIFJBTSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEFSSVRZCQkJMHgwMDAwMTAwMAorLyogTGluayBhZGRyZXNzIGRldGVjdGlvbiBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUFTSwkJMHgwMDAwMEYwMAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTYWhhcmEgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lCVJDVl9DT05GSUdfUkVTRVQJCTB4ODAwMDAwMDAJLy8gUmN2Q29uZmlnIHJlZ2lzdGVyIHJlc2V0Ci0jZGVmaW5lCVJDVl9DT05GSUdfRU5BQkxFCQkweDQwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYwotI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCTB4MjAwMDAwMDAJLy8gRW5hYmxlIHRoZSByZWNlaXZlIHBhcnNlcgotI2RlZmluZQlSQ1ZfQ09ORklHX1NPQ0tFVAkJMHgxMDAwMDAwMAkvLyBFbmFibGUgdGhlIHNvY2tldCBkZXRlY3RvcgotI2RlZmluZQlSQ1ZfQ09ORklHX1JDVkJBRAkJMHgwODAwMDAwMAkvLyBSZWNlaXZlIGFsbCBiYWQgZnJhbWVzCi0jZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJMHgwNDAwMDAwMAkvLyBSZWNlaXZlIGFsbCBjb250cm9sIGZyYW1lcwotI2RlZmluZQlSQ1ZfQ09ORklHX1JDVlBBVVNFCQkweDAyMDAwMDAwCS8vIEVuYWJsZSBwYXVzZSB0cmFuc21pdCB3aGVuIGF0dG4KLSNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjYJCTB4MDEwMDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY2IHRvZXBsaXR6Ci0jZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkweDAwODAwMDAwCS8vIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NCB0b2VwbGl0egotI2RlZmluZQlSQ1ZfQ09ORklHX0ZMVVNICQkweDAwNDAwMDAwCS8vIEZsdXNoIGJ1ZmZlcnMKLSNkZWZpbmUJUkNWX0NPTkZJR19QUklPUklUWV9NQVNLCTB4MDAzMDAwMDAJLy8gUHJpb3JpdHkgbGV2ZWwKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIX01BU0sJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aAotI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfOAkJMHgwMDAwMDAwMAkvLyBIYXNoIGRlcHRoIDgKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzE2CQkweDAwMDEwMDAwCS8vIEhhc2ggZGVwdGggMTYKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzQJCTB4MDAwMjAwMDAJLy8gSGFzaCBkZXB0aCA0Ci0jZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8yCQkweDAwMDMwMDAwCS8vIEhhc2ggZGVwdGggMgotI2RlZmluZQlSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLCQkweDAwMDBGRkYwCS8vIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4KLSNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkweDAwMDAwMDA4CS8vIERpc2FibGUgc29ja2V0IGRldGVjdGlvbiBvbiBhdHRuCi0vLyBNYWNybyB0byBkZXRlcm1pbmUgUkNWX0NPTkZJR19CVUZMRU4gYmFzZWQgb24gbWF4aW11bSBmcmFtZSBzaXplLgotLy8gV2UgYWRkIDE4IGJ5dGVzIGZvciBTYWhhcmEgcmVjZWl2ZSBzdGF0dXMgYW5kIHBhZGRpbmcsIHBsdXMgNCBieXRlcyBmb3IgQ1JDLAotLy8gYW5kIHJvdW5kIHVwIHRvIG5lYXJlc3QgMTYgYnl0ZSBib3VuZGFyeQotI2RlZmluZSBSQ1ZfQ09ORklHX0JVRlNJWkUoX01heEZyYW1lKSAoKCgoX01heEZyYW1lKSArIDIyKSArIDE1KSAmIFJDVl9DT05GSUdfQlVGTEVOX01BU0spCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfRAkJMHgwMDAwMEIwMCAvKiBMaW5rIGFkZHJlc3MgRCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0MJCTB4MDAwMDBBMDAgLyogTGluayBhZGRyZXNzIEMgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19CCQkweDAwMDAwOTAwIC8qIExpbmsgYWRkcmVzcyBCICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQQkJMHgwMDAwMDgwMCAvKiBMaW5rIGFkZHJlc3MgQSAqLworLyogTGluayBhZGRyZXNzIGJyb2FkY2FzdCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0JDQVNUCQkweDAwMDAwMzAwCisgLyogTGluayBhZGRyZXNzIG11bHRpY2FzdCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX01DQVNUCQkweDAwMDAwMjAwCisvKiBMaW5rIGNvbnRyb2wgbXVsdGljYXN0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQ01DQVNUCQkweDAwMDAwMTAwCisvKiBMaW5rIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VSUk9SCQkweDAwMDAwMDgwIC8qIExpbmsgZXJyb3IgKi8KKy8qIExpbmsgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCisvKiBSY3ZNYWNRIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWQkJMHgwMDAwMDA4NworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZCQkweDAwMDAwMDg2IC8qIERhdGEgZWFybHkgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19CVUZPRkxPVwkJMHgwMDAwMDA4NSAvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT0RFCQkweDAwMDAwMDg0IC8qIExpbmsgY29kZSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEUJCTB4MDAwMDAwODMgLyogRHJpYmJsZSBuaWJibGUgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DUkMJCQkweDAwMDAwMDgyIC8qIENSQyBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XCQkweDAwMDAwMDgxIC8qIExpbmsgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVwkJMHgwMDAwMDA4MCAvKiBMaW5rIHVuZGVyZmxvdyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LXzgwMjMJCTB4MDAwMDAwMjAgLyogODAyLjMgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19TTkFQCQkweDAwMDAwMDEwIC8qIFNuYXAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19WTEFOCQkweDAwMDAwMDA4IC8qIFZMQU4gKi8KKy8qIE5ldHdvcmsgdHlwZSBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVFlQRV9NQVNLCQkweDAwMDAwMDA3CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09OVFJPTAkJMHgwMDAwMDAwMyAvKiBDb250cm9sIHBhY2tldCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCTB4MDAwMDAwMDIgLyogSVB2NiBwYWNrZXQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19JUFY0CQkweDAwMDAwMDAxIC8qIElQdjQgcGFja2V0ICovCiAKLSNkZWZpbmUJWE1UX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAkvLyBYbXRDb25maWcgcmVnaXN0ZXIgcmVzZXQKLSNkZWZpbmUJWE1UX0NPTkZJR19FTkFCTEUJCTB4NDAwMDAwMDAJLy8gRW5hYmxlIHRyYW5zbWl0IGxvZ2ljCi0jZGVmaW5lCVhNVF9DT05GSUdfTUFDX1BBUklUWQkJMHgyMDAwMDAwMAkvLyBJbmhpYml0IE1BQyBSQU0gcGFyaXR5IGVycm9yCi0jZGVmaW5lCVhNVF9DT05GSUdfQlVGX1BBUklUWQkJMHgxMDAwMDAwMAkvLyBJbmhpYml0IEQyRiBidWZmZXIgcGFyaXR5IGVycm9yCi0jZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAkvLyBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yCi0jZGVmaW5lCVhNVF9DT05GSUdfSU5WRVJUX1BBUklUWQkweDA0MDAwMDAwCS8vIEludmVydCBNQUMgUkFNIHBhcml0eQotI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRgkvLyBJbml0aWFsIElQSUQKKy8qIFNhaGFyYSByZWNlaXZlIGFuZCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworLyogUmN2Q29uZmlnIHJlZ2lzdGVyIHJlc2V0ICovCisjZGVmaW5lCVJDVl9DT05GSUdfUkVTRVQJCTB4ODAwMDAwMDAKKy8qIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYyAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0VOQUJMRQkJMHg0MDAwMDAwMAorLyogRW5hYmxlIHRoZSByZWNlaXZlIHBhcnNlciAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCTB4MjAwMDAwMDAKKy8qIEVuYWJsZSB0aGUgc29ja2V0IGRldGVjdG9yICovCisjZGVmaW5lCVJDVl9DT05GSUdfU09DS0VUCQkweDEwMDAwMDAwCisjZGVmaW5lCVJDVl9DT05GSUdfUkNWQkFECQkweDA4MDAwMDAwIC8qIFJlY2VpdmUgYWxsIGJhZCBmcmFtZXMgKi8KKy8qIFJlY2VpdmUgYWxsIGNvbnRyb2wgZnJhbWVzICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJMHgwNDAwMDAwMAorLyogRW5hYmxlIHBhdXNlIHRyYW5zbWl0IHdoZW4gYXR0biAqLworI2RlZmluZQlSQ1ZfQ09ORklHX1JDVlBBVVNFCQkweDAyMDAwMDAwCisvKiBJbmNsdWRlIFRDUCBwb3J0IHcvIElQdjYgdG9lcGxpdHogKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjYJCTB4MDEwMDAwMDAKKy8qIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NCB0b2VwbGl0eiAqLworI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNAkJMHgwMDgwMDAwMAorI2RlZmluZQlSQ1ZfQ09ORklHX0ZMVVNICQkweDAwNDAwMDAwIC8qIEZsdXNoIGJ1ZmZlcnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19QUklPUklUWV9NQVNLCTB4MDAzMDAwMDAgLyogUHJpb3JpdHkgbGV2ZWwgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05OX01BU0sJCTB4MDAwQzAwMDAgLyogTnVtYmVyIG9mIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OTl80SwkJMHgwMDAwMDAwMCAvKiA0ayBjb25uZWN0aW9ucyAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0NPTk5fMksJCTB4MDAwNDAwMDAgLyogMmsgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05OXzFLCQkweDAwMDgwMDAwIC8qIDFrIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OTl81MTIJCTB4MDAwQzAwMDAgLyogNTEyIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF9NQVNLCQkweDAwMDMwMDAwIC8qIEhhc2ggZGVwdGggKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzgJCTB4MDAwMDAwMDAgLyogSGFzaCBkZXB0aCA4ICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8xNgkJMHgwMDAxMDAwMCAvKiBIYXNoIGRlcHRoIDE2ICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF80CQkweDAwMDIwMDAwIC8qIEhhc2ggZGVwdGggNCAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfMgkJMHgwMDAzMDAwMCAvKiBIYXNoIGRlcHRoIDIgKi8KKy8qIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4gKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19CVUZMRU5fTUFTSwkJMHgwMDAwRkZFMAorLyogRGlzYWJsZSBzb2NrZXQgZGV0ZWN0aW9uIG9uIGF0dG4gKi8KKyNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkweDAwMDAwMDA4CisjZGVmaW5lIFJDVl9DT05GSUdfSElQUklDVEwgICAgIDB4MDAwMDAwMDIgLyogQ3RybCBmcmFtZXMgb24gaGlnaC1wcmlvaXJ0eSBSY3ZRICovCisjZGVmaW5lIFJDVl9DT05GSUdfTkVXU1RBVFVTRk1UIDB4MDAwMDAwMDEgLyogVXNlIFJldkIgc3RhdHVzIGZvcm1hdCAqLworLyoKKyAqIE1hY3JvIHRvIGRldGVybWluZSBSQ1ZfQ09ORklHX0JVRkxFTiBiYXNlZCBvbiBtYXhpbXVtIGZyYW1lIHNpemUuCisgKiBXZSBhZGQgMTggYnl0ZXMgZm9yIFNhaGFyYSByZWNlaXZlIHN0YXR1cyBhbmQgcGFkZGluZywgcGx1cyA0IGJ5dGVzIGZvciBDUkMsCisgKiBhbmQgcm91bmQgdXAgdG8gbmVhcmVzdCAzMiBieXRlIGJvdW5kYXJ5CisgKi8KKyNkZWZpbmUgUkNWX0NPTkZJR19CVUZTSVpFKF9NYXhGcmFtZSkJCQkJCVwKKwkJKCgoKF9NYXhGcmFtZSkgKyAyMikgKyAzMSkgJiBSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLKQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBLVhHTUFDIFJlZ2lzdGVycyAtIE9jY3VweSAweDgwIC0gMHhENCBvZiB0aGUgU1hHX0hXX1JFR1MKKy8qIFhtdENvbmZpZyByZWdpc3RlciByZXNldCAqLworI2RlZmluZQlYTVRfQ09ORklHX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lCVhNVF9DT05GSUdfRU5BQkxFCQkweDQwMDAwMDAwIC8qIEVuYWJsZSB0cmFuc21pdCBsb2dpYyAqLworLyogSW5oaWJpdCBNQUMgUkFNIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlYTVRfQ09ORklHX01BQ19QQVJJVFkJCTB4MjAwMDAwMDAKKy8qIEluaGliaXQgRDJGIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJWE1UX0NPTkZJR19CVUZfUEFSSVRZCQkweDEwMDAwMDAwCisvKiBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yICovCisjZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAorI2RlZmluZQlYTVRfQ09ORklHX0lOVkVSVF9QQVJJVFkJMHgwNDAwMDAwMCAvKiBJbnZlcnQgTUFDIFJBTSBwYXJpdHkgKi8KKyNkZWZpbmUJWE1UX0NPTkZJR19JTklUSUFMX0lQSUQJCTB4MDAwMEZGRkYgLyogSW5pdGlhbCBJUElEICovCisKKy8qCisgKiBBLVhHTUFDIFJlZ2lzdGVycyAtIE9jY3VweSAweDgwIC0gMHhENCBvZiB0aGUgc3RydWN0IHN4Z19od19yZWdzCiAgKgogICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIGF4Z21hYy5wZGYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIFN1YiBtb2R1bGUgcmVzZXQKLSNkZWZpbmUgQVhHTUFDX0NGRzBfUkNOVFJMX1JFU0VUCTB4MDA0MDAwMDAJCS8vIFJlY2VpdmUgY29udHJvbCByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9SRlVOQ19SRVNFVAkJMHgwMDIwMDAwMAkJLy8gUmVjZWl2ZSBmdW5jdGlvbiByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMAkJLy8gVHJhbnNtaXQgY29udHJvbCByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9URlVOQ19SRVNFVAkJMHgwMDAyMDAwMAkJLy8gVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQKLSNkZWZpbmUgQVhHTUFDX0NGRzBfTUlJX1JFU0VUCQkweDAwMDEwMDAwCQkvLyBNSUkgTWFuYWdlbWVudCByZXNldAorICovCisvKiBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAgLyogU3ViIG1vZHVsZSByZXNldCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9SQ05UUkxfUkVTRVQJMHgwMDQwMDAwMCAvKiBSZWNlaXZlIGNvbnRyb2wgcmVzZXQgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzBfUkZVTkNfUkVTRVQJCTB4MDAyMDAwMDAgLyogUmVjZWl2ZSBmdW5jdGlvbiByZXNldCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMCAvKiBUcmFuc21pdCBjb250cm9sIHJlc2V0ICovCisjZGVmaW5lIEFYR01BQ19DRkcwX1RGVU5DX1JFU0VUCQkweDAwMDIwMDAwIC8qIFRyYW5zbWl0IGZ1bmN0aW9uIHJlc2V0ICovCisjZGVmaW5lIEFYR01BQ19DRkcwX01JSV9SRVNFVAkJMHgwMDAxMDAwMCAvKiBNSUkgTWFuYWdlbWVudCByZXNldCAqLwogCi0vLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEFsbG93IHRoZSBzZW5kaW5nIG9mIFBhdXNlIGZyYW1lcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCTB4NDAwMDAwMDAJCS8vIEVuYWJsZSB0cmFuc21pdAotI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UJCTB4MjAwMDAwMDAJCS8vIEFsbG93IHRoZSBkZXRlY3Rpb24gb2YgUGF1c2UgZnJhbWVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9FTgkJMHgxMDAwMDAwMAkJLy8gRW5hYmxlIHJlY2VpdmUKLSNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1NUQVRFCQkweDA0MDAwMDAwCQkvLyBDdXJyZW50IHRyYW5zbWl0IHN0YXRlIC0gUkVBRCBPTkxZCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAkJLy8gQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZCi0jZGVmaW5lIEFYR01BQ19DRkcxX1hPRkZfU0hPUlQJCTB4MDAwMDEwMDAJCS8vIE9ubHkgcGF1c2UgZm9yIDY0IHNsb3Qgb24gWE9GRgotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMQkJMHgwMDAwMDQwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDEgNC1ieXRlIHdvcmQKLSNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAJCS8vIERlbGF5IHRyYW5zbWl0IEZDUyAyIDQtYnl0ZSB3b3JkcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMwkJMHgwMDAwMEMwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDMgNC1ieXRlIHdvcmRzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MxCQkweDAwMDAwMTAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAxIDQtYnl0ZSB3b3JkCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MyCQkweDAwMDAwMjAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAyIDQtYnl0ZSB3b3JkcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMwkJMHgwMDAwMDMwMAkJLy8gRGVsYXkgcmVjZWl2ZSBGQ1MgMyA0LWJ5dGUgd29yZHMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUEtUX09WRVJSSURFCTB4MDAwMDAwODAJCS8vIFBlci1wYWNrZXQgb3ZlcnJpZGUgZW5hYmxlCi0jZGVmaW5lIEFYR01BQ19DRkcxX1NXQVAJCTB4MDAwMDAwNDAJCS8vIEJ5dGUgc3dhcCBlbmFibGUKLSNkZWZpbmUgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUCTB4MDAwMDAwMjAJCS8vIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KQotI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfU1RSSUNUCQkweDAwMDAwMDEwCQkvLyBSQ1Ygb25seSA4MDIuM0FFIHdoZW4gQ0xFQVIKLSNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4CQkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCi0jZGVmaW5lIEFYR01BQ19DRkcxX0dFTl9GQ1MJCTB4MDAwMDAwMDQJCS8vIEdlbmVyYXRlIEZDUwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfTUFTSwkJMHgwMDAwMDAwMwkJLy8gTWFzayBmb3IgcGFkIGJpdHMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY0CQkweDAwMDAwMDAxCQkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1BBRF9WTEFOCQkweDAwMDAwMDAyCQkvLyBEZXRlY3QgVkxBTiBhbmQgcGFkIHRvIDY4IGJ5dGVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1BBRF82OAkJMHgwMDAwMDAwMwkJLy8gUGFkIHRvIDY4IGJ5dGVzCisvKiBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworLyogQWxsb3cgdGhlIHNlbmRpbmcgb2YgUGF1c2UgZnJhbWVzICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9QQVVTRQkJMHg4MDAwMDAwMAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCTB4NDAwMDAwMDAgLyogRW5hYmxlIHRyYW5zbWl0ICovCisvKiBBbGxvdyB0aGUgZGV0ZWN0aW9uIG9mIFBhdXNlIGZyYW1lcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0VOCQkweDEwMDAwMDAwIC8qIEVuYWJsZSByZWNlaXZlICovCisvKiBDdXJyZW50IHRyYW5zbWl0IHN0YXRlIC0gUkVBRCBPTkxZICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9TVEFURQkJMHgwNDAwMDAwMAorLyogQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAorLyogT25seSBwYXVzZSBmb3IgNjQgc2xvdCBvbiBYT0ZGICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hPRkZfU0hPUlQJCTB4MDAwMDEwMDAKKy8qIERlbGF5IHRyYW5zbWl0IEZDUyAxIDQtYnl0ZSB3b3JkICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MxCQkweDAwMDAwNDAwCisvKiBEZWxheSB0cmFuc21pdCBGQ1MgMiA0LWJ5dGUgd29yZHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAKKy8qIERlbGF5IHRyYW5zbWl0IEZDUyAzIDQtYnl0ZSB3b3JkcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMwkJMHgwMDAwMEMwMAorLyogRGVsYXkgcmVjZWl2ZSBGQ1MgMSA0LWJ5dGUgd29yZCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMQkJMHgwMDAwMDEwMAorLyogRGVsYXkgcmVjZWl2ZSBGQ1MgMiA0LWJ5dGUgd29yZHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzIJCTB4MDAwMDAyMDAKKy8qIERlbGF5IHJlY2VpdmUgRkNTIDMgNC1ieXRlIHdvcmRzICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MzCQkweDAwMDAwMzAwCisvKiBQZXItcGFja2V0IG92ZXJyaWRlIGVuYWJsZSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QS1RfT1ZFUlJJREUJMHgwMDAwMDA4MAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9TV0FQCQkweDAwMDAwMDQwIC8qIEJ5dGUgc3dhcCBlbmFibGUgKi8KKy8qIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9TSE9SVF9BU1NFUlQJMHgwMDAwMDAyMAorLyogUkNWIG9ubHkgODAyLjNBRSB3aGVuIENMRUFSICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVFJJQ1QJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4IC8qIFZlcmlmeSBmcmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfR0VOX0ZDUwkJMHgwMDAwMDAwNCAvKiBHZW5lcmF0ZSBGQ1MgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX01BU0sJCTB4MDAwMDAwMDMgLyogTWFzayBmb3IgcGFkIGJpdHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY0CQkweDAwMDAwMDAxIC8qIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMgKi8KKy8qIERldGVjdCBWTEFOIGFuZCBwYWQgdG8gNjggYnl0ZXMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX1ZMQU4JCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY4CQkweDAwMDAwMDAzIC8qIFBhZCB0byA2OCBieXRlcyAqLwogCi0vLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgotI2RlZmluZSBBWEdNQUNfQ0ZHMl9HRU5fUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEdlbmVyYXRlIHNpbmdsZSBwYXVzZSBmcmFtZSAodGVzdCkKLSNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfTUFOVUFMCQkweDA4MDAwMDAwCQkvLyBNYW51YWwgbGluayBmYXVsdCBzZXF1ZW5jZQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9BVVRPCQkweDA0MDAwMDAwCQkvLyBBdXRvIGxpbmsgZmF1bHQgc2VxdWVuY2UKLSNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfUkVNT1RFCQkweDAyMDAwMDAwCQkvLyBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9MT0NBTAkJMHgwMTAwMDAwMAkJLy8gTG9jYWwgbGluayBmYXVsdCAoUkVBRCBPTkxZKQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfTUFTSwkJMHgwMDFGMDAwMAkJLy8gSW50ZXIgcGFja2V0IGdhcAorLyogQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKy8qIEdlbmVyYXRlIHNpbmdsZSBwYXVzZSBmcmFtZSAodGVzdCkgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzJfR0VOX1BBVVNFCQkweDgwMDAwMDAwCisvKiBNYW51YWwgbGluayBmYXVsdCBzZXF1ZW5jZSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAKKy8qIEF1dG8gbGluayBmYXVsdCBzZXF1ZW5jZSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9BVVRPCQkweDA0MDAwMDAwCisvKiBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9SRU1PVEUJCTB4MDIwMDAwMDAKKy8qIExvY2FsIGxpbmsgZmF1bHQgKFJFQUQgT05MWSkgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfTE9DQUwJCTB4MDEwMDAwMDAKKyNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHX01BU0sJCTB4MDAxRjAwMDAgLyogSW50ZXIgcGFja2V0IGdhcCAqLwogI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfU0hJRlQJCQkxNgotI2RlZmluZSBBWEdNQUNfQ0ZHMl9QQVVTRV9YTVQJCTB4MDAwMDgwMDAJCS8vIFBhdXNlIHRyYW5zbWl0IG1vZHVsZQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfRVhURU4JCTB4MDAwMDAwMjAJCS8vIEVuYWJsZSBJUEcgZXh0ZW5zaW9uIGFsZ29yaXRobQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdFWF9NQVNLCQkweDAwMDAwMDFGCQkvLyBJUEcgZXh0ZW5zaW9uCisjZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMCAvKiBQYXVzZSB0cmFuc21pdCBtb2R1bGUgKi8KKy8qIEVuYWJsZSBJUEcgZXh0ZW5zaW9uIGFsZ29yaXRobSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfRVhURU4JCTB4MDAwMDAwMjAKKyNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHRVhfTUFTSwkJMHgwMDAwMDAxRiAvKiBJUEcgZXh0ZW5zaW9uICovCiAKLS8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzCi0jZGVmaW5lIEFYR01BQ19DRkczX1JDVl9EUk9QCQkweEZGRkYwMDAwCQkvLyBSZWNlaXZlIGZyYW1lIGRyb3AgZmlsdGVyCi0jZGVmaW5lIEFYR01BQ19DRkczX1JDVl9ET05UX0NBUkUJMHgwMDAwRkZGRgkJLy8gUmVjZWl2ZSBmcmFtZSBkb24ndCBjYXJlIGZpbHRlcgorLyogQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKy8qIFJlY2VpdmUgZnJhbWUgZHJvcCBmaWx0ZXIgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RST1AJCTB4RkZGRjAwMDAKKy8qIFJlY2VpdmUgZnJhbWUgZG9uJ3QgY2FyZSBmaWx0ZXIgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCiAKLS8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNAotI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkJLy8gRmlyc3Qgb2N0ZXQKLSNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9UV08JCTB4MDBGRjAwMDAJCS8vIFNlY29uZCBvY3RldAotI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RIUkVFCTB4MDAwMEZGMDAJCS8vIFRoaXJkIG9jdGV0Ci0jZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCQkvLyBGb3VydGggb2N0ZXQKKy8qIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNCAqLworI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkvKiBGaXJzdCBvY3RldCAqLworI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RXTwkJMHgwMEZGMDAwMAkvKiBTZWNvbmQgb2N0ZXQgKi8KKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9USFJFRQkweDAwMDBGRjAwCS8qIFRoaXJkIG9jdGV0ICovCisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCS8qIEZvdXJ0aCBvY3RldCAqLwogCi0vLyBBLVhHTUFDIFN0YXRpb24gQWRkcmVzcyBSZWdpc3RlciAtIE9jdGV0cyA1LTYKLSNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfRklWRQkweEZGMDAwMDAwCQkvLyBGaWZ0aCBvY3RldAotI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9TSVgJMHgwMEZGMDAwMAkJLy8gU2l4dGggb2N0ZXQKKy8qIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDUtNiAqLworI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9GSVZFCTB4RkYwMDAwMDAJLyogRmlmdGggb2N0ZXQgKi8KKyNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfU0lYCTB4MDBGRjAwMDAJLyogU2l4dGggb2N0ZXQgKi8KIAotLy8gQS1YR01BQyBNYXhpbXVtIGZyYW1lIGxlbmd0aCByZWdpc3RlcgotI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UCQkweDNGRkYwMDAwCQkvLyBNYXhpbXVtIHRyYW5zbWl0IGZyYW1lIGxlbmd0aAorLyogQS1YR01BQyBNYXhpbXVtIGZyYW1lIGxlbmd0aCByZWdpc3RlciAqLworLyogTWF4aW11bSB0cmFuc21pdCBmcmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1hNVAkJMHgzRkZGMDAwMAogI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UX1NISUZUCTE2Ci0jZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9SQ1YJCTB4MDAwMEZGRkYJCS8vIE1heGltdW0gcmVjZWl2ZSBmcmFtZSBsZW5ndGgKLS8vIFRoaXMgcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHN0YW5kYXJkIE1UVS4KLS8vIEZvciBqdW1ibywgSSdsbCBqdXN0IHN0YXRpY2FsbHkgZGVmaW5lIHRoZSB2YWx1ZSBoZXJlLiAgVGhpcwotLy8gdmFsdWUgc2V0cyB0aGUgcmVjZWl2ZSBieXRlIGNvdW50IHRvIDkwMzYgKDB4MjM0QykgYW5kIHRoZQotLy8gdHJhbnNtaXQgV09SRCBjb3VudCB0byAyMjU5ICgweDhEMykuICBUaGVzZSB2YWx1ZXMgaW5jbHVkZSAyMgotLy8gYnl0ZXMgb2YgcGFkZGluZyBiZXlvbmQgdGhlIGp1bWJvIE1UVSBvZiA5MDE0CisvKiBNYXhpbXVtIHJlY2VpdmUgZnJhbWUgbGVuZ3RoICovCisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9SQ1YJCTB4MDAwMEZGRkYKKy8qCisgKiBUaGlzIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSB3cml0dGVuIGZvciBzdGFuZGFyZCBNVFUuCisgKiBGb3IganVtYm8sIEknbGwganVzdCBzdGF0aWNhbGx5IGRlZmluZSB0aGUgdmFsdWUgaGVyZS4gIFRoaXMKKyAqIHZhbHVlIHNldHMgdGhlIHJlY2VpdmUgYnl0ZSBjb3VudCB0byA5MDM2ICgweDIzNEMpIGFuZCB0aGUKKyAqIHRyYW5zbWl0IFdPUkQgY291bnQgdG8gMjI1OSAoMHg4RDMpLiAgVGhlc2UgdmFsdWVzIGluY2x1ZGUgMjIKKyAqIGJ5dGVzIG9mIHBhZGRpbmcgYmV5b25kIHRoZSBqdW1ibyBNVFUgb2YgOTAxNAorICovCiAjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9KVU1CTwkJMHgwOEQzMjM0QwogCi0vLyBBLVhHTUFDIFJldmlzaW9uIGxldmVsCi0jZGVmaW5lIEFYR01BQ19SRVZJU0lPTl9NQVNLCQkweDAwMDBGRkZGCQkvLyBSZXZpc2lvbiBsZXZlbAorLyogQS1YR01BQyBSZXZpc2lvbiBsZXZlbCAqLworI2RlZmluZSBBWEdNQUNfUkVWSVNJT05fTUFTSwkJMHgwMDAwRkZGRgkvKiBSZXZpc2lvbiBsZXZlbCAqLwogCi0vLyBBLVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9TVEFSVAkJMHgwMDAwMDAwOAkJLy8gQ29tbWFuZCBzdGFydAotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJCS8vIENvbW1hbmQKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfV1JJVEUJCTEJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFdyaXRlCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTEVHQUNZX1JFQUQJCTIJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFJlYWQKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX1NJTkdMRQkJMwkJLy8gTW9uaXRvciBzaW5nbGUgUEhZCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9NVUxUSVBMRQk0CQkvLyBNb25pdG9yIG11bHRpcGxlIGNvbnRpZ3VvdXMgUEhZcwotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT04JCTUJCS8vIFByZXNlbnQgQU1JSU0gRmllbGQgUmVnCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYJCS8vIENsZWFyIExpbmsgRmFpbCBCaXQgaW4gTUlJTQorLyogQS1YR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfU1RBUlQJCTB4MDAwMDAwMDgJLyogQ29tbWFuZCBzdGFydCAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJLyogQ29tbWFuZCAqLworLyogMTAvMTAwLzEwMDAgTWJwcyBQaHkgV3JpdGUgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfV1JJVEUJCTEKKy8qIDEwLzEwMC8xMDAwIE1icHMgUGh5IFJlYWQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfUkVBRAkJMgorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01PTklUT1JfU0lOR0xFCQkzCS8qIE1vbml0b3Igc2luZ2xlIFBIWSAqLworLyogTW9uaXRvciBtdWx0aXBsZSBjb250aWd1b3VzIFBIWXMgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX01VTFRJUExFCTQKKy8qIFByZXNlbnQgQU1JSU0gRmllbGQgUmVnICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfMTBHX09QRVJBVElPTgkJNQorLyogQ2xlYXIgTGluayBGYWlsIEJpdCBpbiBNSUlNICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYKIAotLy8gQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1QJCTB4QzAwMDAwMDAJCS8vIDItYml0IFNUIGZpZWxkCisvKiBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVAkJMHhDMDAwMDAwMAkvKiAyLWJpdCBTVCBmaWVsZCAqLwogI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1RfU0hJRlQJCTMwCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9PUAkJMHgzMDAwMDAwMAkJLy8gMi1iaXQgT1AgZmllbGQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCS8qIDItYml0IE9QIGZpZWxkICovCiAjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVAkJMjgKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUgkweDBGODAwMDAwCQkvLyBQb3J0IGFkZHJlc3MgZmllbGQgKGhzdHBoeWFkeCBpbiBzcGVjKQorLyogUG9ydCBhZGRyZXNzIGZpZWxkIChoc3RwaHlhZHggaW4gc3BlYykgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUiAJMHgwRjgwMDAwMAogI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVAkJMjMKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSCTB4MDA3QzAwMDAJCS8vIERldmljZSBhZGRyZXNzIGZpZWxkIChoc3RyZWdhZHggaW4gc3BlYykKKy8qIERldmljZSBhZGRyZXNzIGZpZWxkIChoc3RyZWdhZHggaW4gc3BlYykgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSCTB4MDA3QzAwMDAKICNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVAkJMTgKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBCQkweDAwMDMwMDAwCQkvLyAyLWJpdCBUQSBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEEJCTB4MDAwMzAwMDAJLyogMi1iaXQgVEEgZmllbGQgKi8KICNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUCQkxNgotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREFUQQkJMHgwMDAwRkZGRgkJLy8gRGF0YSBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREFUQQkJMHgwMDAwRkZGRgkvKiBEYXRhIGZpZWxkICovCiAKLS8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9PUCBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX09QX0FERFIJCQkJMAkJLy8gTUlJTSBBZGRyZXNzIHNldCBvcGVyYXRpb24KLSNkZWZpbmUJTUlJTV9PUF9XUklURQkJCQkxCQkvLyBNSUlNIFdyaXRlIHJlZ2lzdGVyIG9wZXJhdGlvbgotI2RlZmluZQlNSUlNX09QX1JFQUQJCQkJMgkJLy8gTUlJTSBSZWFkIHJlZ2lzdGVyIG9wZXJhdGlvbgorLyogVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyICovCisjZGVmaW5lCU1JSU1fT1BfQUREUgkJMAkvKiBNSUlNIEFkZHJlc3Mgc2V0IG9wZXJhdGlvbiAqLworI2RlZmluZQlNSUlNX09QX1dSSVRFCQkxCS8qIE1JSU0gV3JpdGUgcmVnaXN0ZXIgb3BlcmF0aW9uICovCisjZGVmaW5lCU1JSU1fT1BfUkVBRAkJMgkvKiBNSUlNIFJlYWQgcmVnaXN0ZXIgb3BlcmF0aW9uICovCiAjZGVmaW5lCU1JSU1fT1BfQUREUl9TSElGVAkoTUlJTV9PUF9BRERSIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkKIAotLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX1BPUlRfTlVNCQkJCTEJCS8vIEFsbCBTYWhhcmEgTUlJTSBtb2R1bGVzIHVzZSBwb3J0IDEKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNCisgKiBGaWVsZCBSZWdpc3RlcgorICovCisjZGVmaW5lCU1JSU1fUE9SVF9OVU0JCTEJLyogQWxsIFNhaGFyYSBNSUlNIG1vZHVsZXMgdXNlIHBvcnQgMSAqLwogCi0vLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKLSNkZWZpbmUJTUlJTV9ERVZfUEhZX1BNQQkJCTEJCS8vIFBIWSBQTUEvUE1EIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKLSNkZWZpbmUJTUlJTV9ERVZfUEhZX1BDUwkJCTMJCS8vIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgotI2RlZmluZQlNSUlNX0RFVl9QSFlfWFMJCQkJNAkJLy8gUEhZIFhTIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKLSNkZWZpbmUJTUlJTV9ERVZfWEdYUwkJCQk1CQkvLyBYR1hTIE1JSU0gZGV2aWNlIG51bWJlcgorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTQorICogRmllbGQgUmVnaXN0ZXIKKyAqLworLyogUEhZIFBNQS9QTUQgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlciAqLworI2RlZmluZQlNSUlNX0RFVl9QSFlfUE1BCTEKKy8qIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlciAqLworI2RlZmluZQlNSUlNX0RFVl9QSFlfUENTCTMKKy8qIFBIWSBYUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyICovCisjZGVmaW5lCU1JSU1fREVWX1BIWV9YUwkJNAorI2RlZmluZQlNSUlNX0RFVl9YR1hTCQk1CS8qIFhHWFMgTUlJTSBkZXZpY2UgbnVtYmVyICovCiAKLS8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9UQSBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX1RBXzEwR0IJCQkJMgkJLy8gc2V0IHRvIDIgZm9yIDEwIEdCIG9wZXJhdGlvbgorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9UQSBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZAorICogUmVnaXN0ZXIKKyAqLworI2RlZmluZQlNSUlNX1RBXzEwR0IJCTIJLyogc2V0IHRvIDIgZm9yIDEwIEdCIG9wZXJhdGlvbiAqLwogCi0vLyBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19OT1BSRUFNCTB4MDAwMDAwODAJCS8vIEJ5cGFzcyBwcmVhbWJsZSBvZiBtbmdtdCBmcmFtZQotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sJMHgwMDAwMDA3RgkJLy8gaGFsZi1jbG9jayBkdXJhdGlvbiBvZiBNREMgb3V0cHV0CisvKiBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKy8qIEJ5cGFzcyBwcmVhbWJsZSBvZiBtbmdtdCBmcmFtZSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX05PUFJFQU0JMHgwMDAwMDA4MAorLyogaGFsZi1jbG9jayBkdXJhdGlvbiBvZiBNREMgb3V0cHV0ICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DRkdfSEFMRl9DTE9DSwkweDAwMDAwMDdGCiAKLS8vIEEtWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdGVyCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX0xJTksJCTB4MDAwMDAwMTAJCS8vIExpbmsgc3RhdHVzIGZyb20gbGVnYWN5IFBIWSBvciBNTUQKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTVBIWQkJMHgwMDAwMDAwOAkJLy8gTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcwotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19TUEhZCQkweDAwMDAwMDA0CQkvLyBTaW5nbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcwotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NT04JCTB4MDAwMDAwMDIJCS8vIFNpbmdsZSBvciBtdWx0aXBsZSBtb25pdG9yIGNtZAotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCQkvLyBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZQorLyogQS1YR01BQyBBTUlJTSBJbmRpY2F0b3IgUmVnaXN0ZXIgKi8KKy8qIExpbmsgc3RhdHVzIGZyb20gbGVnYWN5IFBIWSBvciBNTUQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTElOSwkJMHgwMDAwMDAxMAorLyogTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NUEhZCQkweDAwMDAwMDA4CisvKiBTaW5nbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19TUEhZCQkweDAwMDAwMDA0CisvKiBTaW5nbGUgb3IgbXVsdGlwbGUgbW9uaXRvciBjbWQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTU9OCQkweDAwMDAwMDAyCisvKiBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCiAKLS8vIExpbmsgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyCi0jZGVmaW5lCUxTX1BIWV9DTFJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIENsZWFyIHJlc2V0IHNpZ25hbCB0byBQSFkKLSNkZWZpbmUJTFNfU0VSREVTX1BPV0VSX0RPV04JCTB4NDAwMDAwMDAJCS8vIFBvd2VyIGRvd24gdGhlIFNhaGFyYSBTZXJkZXMKLSNkZWZpbmUJTFNfWEdYU19FTkFCTEUJCQkweDIwMDAwMDAwCQkvLyBFbmFibGUgdGhlIFhBVUkgWEdYUyBsb2dpYwotI2RlZmluZQlMU19YR1hTX0NUTAkJCTB4MTAwMDAwMDAJCS8vIEhvbGQgWEFVSSBYR1hTIGxvZ2ljIHJlc2V0IHVudGlsIFNlcmRlcyBpcyB1cAotI2RlZmluZQlMU19TRVJERVNfRE9XTgkJCTB4MDgwMDAwMDAJCS8vIFdoZW4gMCwgWEFVSSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCi0jZGVmaW5lCUxTX1RSQUNFX0RPV04JCQkweDA0MDAwMDAwCQkvLyBXaGVuIDAsIFRyYWNlIFNlcmRlcyBpcyB1cCBhbmQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUKLSNkZWZpbmUJTFNfUEhZX0NMS18yNU1IWgkJMHgwMjAwMDAwMAkJLy8gU2V0IFBIWSBjbG9jayB0byAyNSBNSHogKGVsc2UgMTU2LjEyNSBNSHopCi0jZGVmaW5lCUxTX1BIWV9DTEtfRU4JCQkweDAxMDAwMDAwCQkvLyBFbmFibGUgY2xvY2sgdG8gUEhZCi0jZGVmaW5lCUxTX1hBVUlfTElOS19VUAkJCTB4MDAwMDAwMTAJCS8vIFhBVUkgbGluayBpcyB1cAotI2RlZmluZQlMU19YQVVJX0xJTktfQ0hORwkJMHgwMDAwMDAwOAkJLy8gWEFVSSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZAotI2RlZmluZQlMU19MSU5LX0FMQVJNCQkJMHgwMDAwMDAwNAkJLy8gTGluayBhbGFybSBwaW4KLSNkZWZpbmUJTFNfQVRUTl9DVFJMX01BU0sJCTB4MDAwMDAwMDMJCS8vIE1hc2sgbGluayBhdHRlbnRpb24gY29udHJvbCBiaXRzCi0jZGVmaW5lCUxTX0FUVE5fQUxBUk0JCQkweDAwMDAwMDAwCQkvLyAwMCA9PiBBdHRuIG9uIGxpbmsgYWxhcm0KLSNkZWZpbmUJTFNfQVRUTl9BTEFSTV9PUl9TVEFUX0NITkcJMHgwMDAwMDAwMQkJLy8gMDEgPT4gQXR0biBvbiBsaW5rIGFsYXJtIG9yIHN0YXR1cyBjaGFuZ2UKLSNkZWZpbmUJTFNfQVRUTl9TVEFUX0NITkcJCTB4MDAwMDAwMDIJCS8vIDEwID0+IEF0dG4gb24gbGluayBzdGF0dXMgY2hhbmdlCi0jZGVmaW5lCUxTX0FUVE5fTk9ORQkJCTB4MDAwMDAwMDMJCS8vIDExID0+IG5vIEF0dG4KKy8qIExpbmsgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCUxTX1BIWV9DTFJfUkVTRVQJMHg4MDAwMDAwMAkvKiBDbGVhciByZXNldCBzaWduYWwgdG8gUEhZICovCisjZGVmaW5lCUxTX1NFUkRFU19QT1dFUl9ET1dOCTB4NDAwMDAwMDAJLyogUG93ZXIgZG93biB0aGUgU2FoYXJhIFNlcmRlcyAqLworI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJMHgyMDAwMDAwMAkvKiBFbmFibGUgdGhlIFhBVUkgWEdYUyBsb2dpYyAqLworLyogSG9sZCBYQVVJIFhHWFMgbG9naWMgcmVzZXQgdW50aWwgU2VyZGVzIGlzIHVwICovCisjZGVmaW5lCUxTX1hHWFNfQ1RMCQkweDEwMDAwMDAwCisvKiBXaGVuIDAsIFhBVUkgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSAqLworI2RlZmluZQlMU19TRVJERVNfRE9XTgkJMHgwODAwMDAwMAorLyogV2hlbiAwLCBUcmFjZSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlICovCisjZGVmaW5lCUxTX1RSQUNFX0RPV04JCTB4MDQwMDAwMDAKKy8qIFNldCBQSFkgY2xvY2sgdG8gMjUgTUh6IChlbHNlIDE1Ni4xMjUgTUh6KSAqLworI2RlZmluZQlMU19QSFlfQ0xLXzI1TUhaCTB4MDIwMDAwMDAKKyNkZWZpbmUJTFNfUEhZX0NMS19FTgkJMHgwMTAwMDAwMAkvKiBFbmFibGUgY2xvY2sgdG8gUEhZICovCisjZGVmaW5lCUxTX1hBVUlfTElOS19VUAkJMHgwMDAwMDAxMAkvKiBYQVVJIGxpbmsgaXMgdXAgKi8KKy8qIFhBVUkgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUJTFNfWEFVSV9MSU5LX0NITkcJMHgwMDAwMDAwOAorI2RlZmluZQlMU19MSU5LX0FMQVJNCQkweDAwMDAwMDA0CS8qIExpbmsgYWxhcm0gcGluICovCisvKiBNYXNrIGxpbmsgYXR0ZW50aW9uIGNvbnRyb2wgYml0cyAqLworI2RlZmluZQlMU19BVFROX0NUUkxfTUFTSwkweDAwMDAwMDAzCisjZGVmaW5lCUxTX0FUVE5fQUxBUk0JCTB4MDAwMDAwMDAJLyogMDAgPT4gQXR0biBvbiBsaW5rIGFsYXJtICovCisvKiAwMSA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gb3Igc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZQlMU19BVFROX0FMQVJNX09SX1NUQVRfQ0hORwkweDAwMDAwMDAxCisvKiAxMCA9PiBBdHRuIG9uIGxpbmsgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkweDAwMDAwMDAyCisjZGVmaW5lCUxTX0FUVE5fTk9ORQkJMHgwMDAwMDAwMwkvKiAxMSA9PiBubyBBdHRuICovCiAKLS8vIExpbmsgQWRkcmVzcyBIaWdoIFJlZ2lzdGVycwotI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCQkweDgwMDAwMDAwCQkvLyBFbmFibGUgdGhpcyBsaW5rIGFkZHJlc3MKKy8qIExpbmsgQWRkcmVzcyBIaWdoIFJlZ2lzdGVycyAqLworI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCTB4ODAwMDAwMDAJLyogRW5hYmxlIHRoaXMgbGluayBhZGRyZXNzICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIFhHWFMgWEFVSSBYR01JSSBFeHRlbmRlciByZWdpc3RlcnMKICAqCiAgKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gbXhneHMucGRmCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8gWEdYUyBSZWdpc3RlciBNYXAKLSNkZWZpbmUgWEdYU19BRERSRVNTX0NPTlRST0wxCQkweDAwMDAJCQkvLyBYUyBDb250cm9sIDEKLSNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzEJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCi0jZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9MT1cJCTB4MDAwMgkJCS8vIFhTIERldmljZSBJRCAobG93KQotI2RlZmluZSBYR1hTX0FERFJFU1NfREVWSURfSElHSAkJMHgwMDAzCQkJLy8gWFMgRGV2aWNlIElEIChoaWdoKQotI2RlZmluZSBYR1hTX0FERFJFU1NfU1BFRUQJCTB4MDAwNAkJCS8vIFhTIFNwZWVkIGFiaWxpdHkKLSNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9MT1cJCTB4MDAwNQkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQotI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0hJR0gJCTB4MDAwNgkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQotI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkJMHgwMDA4CQkJLy8gWFMgU3RhdHVzIDIKLSNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX2xPVwkJMHgwMDBFCQkJLy8gWFMgUGFja2FnZSBJZGVudGlmaWVyCi0jZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9ISUdICQkweDAwMEYJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKLSNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkJCS8vIDEwRyBYR1hTIExhbmUgU3RhdHVzCi0jZGVmaW5lIFhHWFNfQUREUkVTU19URVNUX0NUUkwJCTB4MDAxOQkJCS8vIDEwRyBYR1hTIFRlc3QgQ29udHJvbAotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8xCQkweDgwMDAJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMQotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCQkweDgwMDEJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMgotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkxCQkweDgwMDIJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMQotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkyCQkweDgwMDMJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMgorICovCisvKiBYR1hTIFJlZ2lzdGVyIE1hcCAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfQ09OVFJPTDEJMHgwMDAwCQkvKiBYUyBDb250cm9sIDEgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzEJMHgwMDAxCQkvKiBYUyBTdGF0dXMgMSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfREVWSURfTE9XCTB4MDAwMgkJLyogWFMgRGV2aWNlIElEIChsb3cpICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9ISUdICTB4MDAwMwkJLyogWFMgRGV2aWNlIElEIChoaWdoKSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfU1BFRUQJMHgwMDA0CQkvKiBYUyBTcGVlZCBhYmlsaXR5ICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfTE9XCTB4MDAwNQkJLyogWFMgRGV2aWNlcyBpbiBwYWNrYWdlICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfSElHSAkweDAwMDYJCS8qIFhTIERldmljZXMgaW4gcGFja2FnZSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkweDAwMDgJCS8qIFhTIFN0YXR1cyAyICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9sT1cJMHgwMDBFCQkvKiBYUyBQYWNrYWdlIElkZW50aWZpZXIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX0hJR0gJMHgwMDBGCQkvKiBYUyBQYWNrYWdlIElkZW50aWZpZXIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkvKiAxMEcgWEdYUyBMYW5lIFN0YXR1cyAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfVEVTVF9DVFJMCTB4MDAxOQkJLyogMTBHIFhHWFMgVGVzdCBDb250cm9sICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzEJMHg4MDAwCQkvKiBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCTB4ODAwMQkJLyogVmVuZG9yLVNwZWNpZmljIFJlc2V0IExvIDIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0hJMQkweDgwMDIJCS8qIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAxICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTIJMHg4MDAzCQkvKiBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMiAqLwogCi0vLyBYUyBDb250cm9sIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfUkVTRVQJCTB4ODAwMAkJCS8vIFJlc2V0IC0gc2VsZiBjbGVhcmluZwotI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPT1BCQUNLCQkweDQwMDAJCQkvLyBFbmFibGUgbG9vcGJhY2sKLSNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRDEJCTB4MjAwMAkJCS8vIDAgPSB1bnNwZWNpZmllZCwgMSA9IDEwR2IrCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9XUE9XRVIJCTB4MDQwMAkJCS8vIDEgPSBMb3cgcG93ZXIgbW9kZQotI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMgkJMHgwMDQwCQkJLy8gU2FtZSBhcyBTUEVFRDEgKD8pCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQJCTB4MDAzQwkJCS8vIEV2ZXJ5dGhpbmcgcmVzZXJ2ZWQgZXhjZXB0IHplcm8gKD8pCisvKiBYUyBDb250cm9sIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfUkVTRVQJMHg4MDAwCQkvKiBSZXNldCAtIHNlbGYgY2xlYXJpbmcgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT09QQkFDSwkweDQwMDAJCS8qIEVuYWJsZSBsb29wYmFjayAqLworI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMQkweDIwMDAJCS8qIDAgPSB1bnNwZWNpZmllZCwgMSA9IDEwR2IrICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9XUE9XRVIJMHgwNDAwCQkvKiAxID0gTG93IHBvd2VyIG1vZGUgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRDIJMHgwMDQwCQkvKiBTYW1lIGFzIFNQRUVEMSAoPykgKi8KKy8qIEV2ZXJ5dGhpbmcgcmVzZXJ2ZWQgZXhjZXB0IHplcm8gKD8pICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQJMHgwMDNDCiAKLS8vIFhTIFN0YXR1cyAxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX1NUQVRVUzFfRkFVTFQJCTB4MDA4MAkJCS8vIEZhdWx0IGRldGVjdGVkCi0jZGVmaW5lIFhHWFNfU1RBVFVTMV9MSU5LCQkweDAwMDQJCQkvLyAxID0gTGluayB1cAotI2RlZmluZSBYR1hTX1NUQVRVUzFfTE9XUE9XRVIJCTB4MDAwMgkJCS8vIDEgPSBMb3cgcG93ZXIgc3VwcG9ydGVkCisvKiBYUyBTdGF0dXMgMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMxX0ZBVUxUCTB4MDA4MAkJLyogRmF1bHQgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMxX0xJTksJMHgwMDA0CQkvKiAxID0gTGluayB1cCAqLworI2RlZmluZSBYR1hTX1NUQVRVUzFfTE9XUE9XRVIJMHgwMDAyCQkvKiAxID0gTG93IHBvd2VyIHN1cHBvcnRlZCAqLwogCi0vLyBYUyBTcGVlZCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19TUEVFRF8xMEcJCQkweDAwMDEJCQkvLyAxID0gMTBHIGNhcGFibGUKKy8qIFhTIFNwZWVkIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX1NQRUVEXzEwRwkJMHgwMDAxCQkvKiAxID0gMTBHIGNhcGFibGUgKi8KIAotLy8gWFMgRGV2aWNlcyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX0RURQkJMHgwMDIwCQkJLy8gRFRFIFhTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1BIWQkJMHgwMDEwCQkJLy8gUEhZIFhTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1BDUwkJMHgwMDA4CQkJLy8gUENTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1dJUwkJMHgwMDA0CQkJLy8gV0lTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1BNRAkJMHgwMDAyCQkJLy8gUE1EL1BNQSBQcmVzZW50Ci0jZGVmaW5lIFhHWFNfREVWSUNFU19DTEFVU0UyMgkJMHgwMDAxCQkJLy8gQ2xhdXNlIDIyIHJlZ2lzdGVycyBwcmVzZW50CisvKiBYUyBEZXZpY2VzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfRFRFCTB4MDAyMAkJLyogRFRFIFhTIFByZXNlbnQgKi8KKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BIWQkweDAwMTAJCS8qIFBIWSBYUyBQcmVzZW50ICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19QQ1MJMHgwMDA4CQkvKiBQQ1MgUHJlc2VudCAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfV0lTCTB4MDAwNAkJLyogV0lTIFByZXNlbnQgKi8KKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BNRAkweDAwMDIJCS8qIFBNRC9QTUEgUHJlc2VudCAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfQ0xBVVNFMjIJMHgwMDAxCQkvKiBDbGF1c2UgMjIgcmVnaXN0ZXJzIHByZXNlbnQqLwogCi0vLyBYUyBEZXZpY2VzIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IyCQkweDgwMDAJCQkvLyBWZW5kb3Igc3BlY2lmaWMgZGV2aWNlIDIKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjEJCTB4NDAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMQorLyogWFMgRGV2aWNlcyBIaWdoIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMgkweDgwMDAJCS8qIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMiAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMQkweDQwMDAJCS8qIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMSAqLwogCi0vLyBYUyBTdGF0dXMgMiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9NQVNLCQkweEMwMDAJCQkvLyBEZXZpY2UgcHJlc2VudCBtYXNrCi0jZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfUkVTUE9ORAkweDgwMDAJCQkvLyBEZXZpY2UgcmVzcG9uZGluZwotI2RlZmluZSBYR1hTX1NUQVRVUzJfWE1UX0ZBVUxUCQkweDA4MDAJCQkvLyBUcmFuc21pdCBmYXVsdAotI2RlZmluZSBYR1hTX1NUQVRVUzJfUkNWX0ZBVUxUCQkweDA0MDAJCQkvLyBSZWNlaXZlIGZhdWx0CisvKiBYUyBTdGF0dXMgMiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9NQVNLCTB4QzAwMAkJLyogRGV2aWNlIHByZXNlbnQgbWFzayAqLworI2RlZmluZSBYR1hTX1NUQVRVUzJfREVWX1JFU1BPTkQJMHg4MDAwCS8qIERldmljZSByZXNwb25kaW5nICovCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9YTVRfRkFVTFQJMHgwODAwCQkvKiBUcmFuc21pdCBmYXVsdCAqLworI2RlZmluZSBYR1hTX1NUQVRVUzJfUkNWX0ZBVUxUCTB4MDQwMAkJLyogUmVjZWl2ZSBmYXVsdCAqLwogCi0vLyBYUyBQYWNrYWdlIElEIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfUEtHSURfSElHSF9PUkcJCTB4RkMwMAkJCS8vIE9yZ2FuaXphdGlvbmFsbHkgVW5pcXVlCi0jZGVmaW5lIFhHWFNfUEtHSURfSElHSF9NRkcJCTB4MDNGMAkJCS8vIE1hbnVmYWN0dXJlciBNb2RlbAotI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfUkVWCQkweDAwMEYJCQkvLyBSZXZpc2lvbiBOdW1iZXIKKy8qIFhTIFBhY2thZ2UgSUQgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX09SRwkweEZDMDAJCS8qIE9yZ2FuaXphdGlvbmFsbHkgVW5pcXVlICovCisjZGVmaW5lIFhHWFNfUEtHSURfSElHSF9NRkcJMHgwM0YwCQkvKiBNYW51ZmFjdHVyZXIgTW9kZWwgKi8KKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX1JFVgkweDAwMEYJCS8qIFJldmlzaW9uIE51bWJlciAqLwogCi0vLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19MQU5FX1BIWQkJCTB4MTAwMAkJCS8vIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzCi0jZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCQkweDA4MDAJCQkvLyBQYXR0ZXJuIHRlc3RpbmcgYWJpbGl0eQotI2RlZmluZSBYR1hTX0xBTkVfTE9PUEJBQ0sJCTB4MDQwMAkJCS8vIFBIWSBsb29wYmFjayBhYmlsaXR5Ci0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMwkJCTB4MDAwOAkJCS8vIExhbmUgMyBzeW5jCi0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJCTB4MDAwNAkJCS8vIExhbmUgMiBzeW5jCi0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMQkJCTB4MDAwMgkJCS8vIExhbmUgMSBzeW5jCi0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMAkJCTB4MDAwMQkJCS8vIExhbmUgMCBzeW5jCisvKiBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1BIWQkJMHgxMDAwCS8qIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzICovCisjZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCTB4MDgwMAkJLyogUGF0dGVybiB0ZXN0aW5nIGFiaWxpdHkgKi8KKyNkZWZpbmUgWEdYU19MQU5FX0xPT1BCQUNLCTB4MDQwMAkJLyogUEhZIGxvb3BiYWNrIGFiaWxpdHkgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMzCQkweDAwMDgJCS8qIExhbmUgMyBzeW5jICovCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJMHgwMDA0CQkvKiBMYW5lIDIgc3luYyAqLworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzEJCTB4MDAwMgkJLyogTGFuZSAxIHN5bmMgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMwCQkweDAwMDEJCS8qIExhbmUgMCBzeW5jICovCiAKLS8vIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fRU5BQkxFCTB4MDAwNAkJCS8vIFRlc3QgcGF0dGVybiBlbmFibGVkCi0jZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01BU0sJCTB4MDAwMwkJCS8vIFRlc3QgcGF0dGVybnMKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUlYCQkweDAwMDIJCQkvLyBUZXN0IHBhdHRlcm4gLSBtaXhlZAotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9MT1cJCTB4MDAwMQkJCS8vIFRlc3QgcGF0dGVybiAtIGxvdwotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBoaWdoCisvKiBYUyBUZXN0IENvbnRyb2wgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0VOQUJMRQkweDAwMDQJLyogVGVzdCBwYXR0ZXJuIGVuYWJsZWQgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUFTSwkweDAwMDMJCS8qIFRlc3QgcGF0dGVybnMgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkweDAwMDMJCS8qIFRlc3QgcGF0dGVybiAtIHJlc2VydmVkICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01JWAkweDAwMDIJCS8qIFRlc3QgcGF0dGVybiAtIG1peGVkICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0xPVwkweDAwMDEJCS8qIFRlc3QgcGF0dGVybiAtIGxvdyAqLworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICTB4MDAwMQkJLyogVGVzdCBwYXR0ZXJuIC0gaGlnaCAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogRXh0ZXJuYWwgTURJTyBCdXMgUmVnaXN0ZXJzCiAgKgogICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIFBIWS9YRU5QQUsvSUVFRSBzcGVjcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vIExBU0kgKExpbmsgQWxhcm0gU3RhdHVzIEludGVycnVwdCkgUmVnaXN0ZXJzIChsb2NhdGVkIGluIE1JSU1fREVWX1BIWV9QTUEgZGV2aWNlKQotI2RlZmluZSBMQVNJX1JYX0FMQVJNX0NPTlRST0wJCTB4OTAwMAkJCS8vIExBU0kgUlhfQUxBUk0gQ29udHJvbAotI2RlZmluZSBMQVNJX1RYX0FMQVJNX0NPTlRST0wJCTB4OTAwMQkJCS8vIExBU0kgVFhfQUxBUk0gQ29udHJvbAotI2RlZmluZSBMQVNJX0NPTlRST0wJCQkweDkwMDIJCQkvLyBMQVNJIENvbnRyb2wKLSNkZWZpbmUgTEFTSV9SWF9BTEFSTV9TVEFUVVMJCTB4OTAwMwkJCS8vIExBU0kgUlhfQUxBUk0gU3RhdHVzCi0jZGVmaW5lIExBU0lfVFhfQUxBUk1fU1RBVFVTCQkweDkwMDQJCQkvLyBMQVNJIFRYX0FMQVJNIFN0YXR1cwotI2RlZmluZSBMQVNJX1NUQVRVUwkJCTB4OTAwNQkJCS8vIExBU0kgU3RhdHVzCisgKi8KKy8qCisgKiBMQVNJIChMaW5rIEFsYXJtIFN0YXR1cyBJbnRlcnJ1cHQpIFJlZ2lzdGVycyAobG9jYXRlZCBpbgorICogTUlJTV9ERVZfUEhZX1BNQSBkZXZpY2UpCisgKi8KKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9DT05UUk9MCTB4OTAwMAkJLyogTEFTSSBSWF9BTEFSTSBDb250cm9sICovCisjZGVmaW5lIExBU0lfVFhfQUxBUk1fQ09OVFJPTAkweDkwMDEJCS8qIExBU0kgVFhfQUxBUk0gQ29udHJvbCAqLworI2RlZmluZSBMQVNJX0NPTlRST0wJCTB4OTAwMgkJLyogTEFTSSBDb250cm9sICovCisjZGVmaW5lIExBU0lfUlhfQUxBUk1fU1RBVFVTCTB4OTAwMwkJLyogTEFTSSBSWF9BTEFSTSBTdGF0dXMgKi8KKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9TVEFUVVMJMHg5MDA0CQkvKiBMQVNJIFRYX0FMQVJNIFN0YXR1cyAqLworI2RlZmluZSBMQVNJX1NUQVRVUwkJMHg5MDA1CQkvKiBMQVNJIFN0YXR1cyAqLwogCi0vLyBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCUxBU0lfQ1RMX1JYX0FMQVJNX0VOQUJMRQkweDAwMDQJCQkvLyBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cwotI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCQkJLy8gRW5hYmxlIFRYX0FMQVJNIGludGVycnVwdHMKLSNkZWZpbmUJTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCTB4MDAwMQkJCS8vIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzCisvKiBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zICovCisvKiBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cyAqLworI2RlZmluZQlMQVNJX0NUTF9SWF9BTEFSTV9FTkFCTEUJMHgwMDA0CisvKiBFbmFibGUgVFhfQUxBUk0gaW50ZXJydXB0cyAqLworI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCisvKiBFbmFibGUgTGluayBTdGF0dXMgaW50ZXJydXB0cyAqLworI2RlZmluZQlMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUJMHgwMDAxCiAKLS8vIExBU0lfU1RBVFVTIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkJMHgwMDA0CQkJLy8gUlhfQUxBUk0gc3RhdHVzCi0jZGVmaW5lCUxBU0lfU1RBVFVTX1RYX0FMQVJNCQkweDAwMDIJCQkvLyBUWF9BTEFSTSBzdGF0dXMKLSNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JCTB4MDAwMQkJCS8vIExpbmsgU3RhdHVzCisvKiBMQVNJX1NUQVRVUyBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJTEFTSV9TVEFUVVNfUlhfQUxBUk0JMHgwMDA0CQkvKiBSWF9BTEFSTSBzdGF0dXMgKi8KKyNkZWZpbmUJTEFTSV9TVEFUVVNfVFhfQUxBUk0JMHgwMDAyCQkvKiBUWF9BTEFSTSBzdGF0dXMgKi8KKyNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JMHgwMDAxCQkvKiBMaW5rIFN0YXR1cyAqLwogCi0vLyBQSFkgcmVnaXN0ZXJzIC0gUE1BL1BNRCAoZGV2aWNlIDEpCi0jZGVmaW5lCVBIWV9QTUFfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFBNQS9QTUQgQ29udHJvbCAxCi0jZGVmaW5lCVBIWV9QTUFfU1RBVFVTMQkJCTB4MDAwMQkJCS8vIFBNQS9QTUQgU3RhdHVzIDEKLSNkZWZpbmUJUEhZX1BNQV9SQ1ZfREVUCQkJMHgwMDBBCQkJLy8gUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QKLQkJLy8gb3RoZXIgUE1BL1BNRCByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorLyogUEhZIHJlZ2lzdGVycyAtIFBNQS9QTUQgKGRldmljZSAxKSAqLworI2RlZmluZQlQSFlfUE1BX0NPTlRST0wxCTB4MDAwMAkJLyogUE1BL1BNRCBDb250cm9sIDEgKi8KKyNkZWZpbmUJUEhZX1BNQV9TVEFUVVMxCQkweDAwMDEJCS8qIFBNQS9QTUQgU3RhdHVzIDEgKi8KKyNkZWZpbmUJUEhZX1BNQV9SQ1ZfREVUCQkweDAwMEEJLyogUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QgKi8KKwkJLyogb3RoZXIgUE1BL1BNRCByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZCAqLwogCi0vLyBQSFkgcmVnaXN0ZXJzIC0gUENTIChkZXZpY2UgMykKLSNkZWZpbmUJUEhZX1BDU19DT05UUk9MMQkJMHgwMDAwCQkJLy8gUENTIENvbnRyb2wgMQotI2RlZmluZQlQSFlfUENTX1NUQVRVUzEJCQkweDAwMDEJCQkvLyBQQ1MgU3RhdHVzIDEKLSNkZWZpbmUJUEhZX1BDU18xMEdfU1RBVFVTMQkJMHgwMDIwCQkJLy8gUENTIDEwR0JBU0UtUiBTdGF0dXMgMQotCQkvLyBvdGhlciBQQ1MgcmVnaXN0ZXJzIGV4aXN0IGFuZCBjYW4gYmUgZGVmaW5lZCBhcyBuZWVkZWQKKy8qIFBIWSByZWdpc3RlcnMgLSBQQ1MgKGRldmljZSAzKSAqLworI2RlZmluZQlQSFlfUENTX0NPTlRST0wxCTB4MDAwMAkJLyogUENTIENvbnRyb2wgMSAqLworI2RlZmluZQlQSFlfUENTX1NUQVRVUzEJCTB4MDAwMQkJLyogUENTIFN0YXR1cyAxICovCisjZGVmaW5lCVBIWV9QQ1NfMTBHX1NUQVRVUzEJMHgwMDIwCQkvKiBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxICovCisJCS8qIG90aGVyIFBDUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZCAqLwogCi0vLyBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KQotI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCQkweDAwMDAJCQkvLyBYUyBDb250cm9sIDEKLSNkZWZpbmUJUEhZX1hTX1NUQVRVUzEJCQkweDAwMDEJCQkvLyBYUyBTdGF0dXMgMQotI2RlZmluZQlQSFlfWFNfTEFORV9TVEFUVVMJCTB4MDAxOAkJCS8vIFhTIExhbmUgU3RhdHVzCi0JCS8vIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisvKiBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KSAqLworI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCTB4MDAwMAkJLyogWFMgQ29udHJvbCAxICovCisjZGVmaW5lCVBIWV9YU19TVEFUVVMxCQkweDAwMDEJCS8qIFhTIFN0YXR1cyAxICovCisjZGVmaW5lCVBIWV9YU19MQU5FX1NUQVRVUwkweDAwMTgJCS8qIFhTIExhbmUgU3RhdHVzICovCisJCS8qIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkICovCiAKLS8vIFBIWV9QTUFfQ09OVFJPTDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCVBNQV9DT05UUk9MMV9SRVNFVAkJMHg4MDAwCQkJLy8gUE1BL1BNRCByZXNldAorLyogUEhZX1BNQV9DT05UUk9MMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJUE1BX0NPTlRST0wxX1JFU0VUCTB4ODAwMAkJLyogUE1BL1BNRCByZXNldCAqLwogCi0vLyBQSFlfUE1BX1JDVl9ERVQgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCVBNQV9SQ1ZfREVURUNUCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCByZWNlaXZlIHNpZ25hbCBkZXRlY3QKKy8qIFBIWV9QTUFfUkNWX0RFVCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJUE1BX1JDVl9ERVRFQ1QJCTB4MDAwMQkvKiBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdCAqLwogCi0vLyBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZQlQQ1NfMTBCX0JMT0NLX0xPQ0sJCTB4MDAwMQkJCS8vIFBDUyAxMEdCQVNFLVIgbG9ja2VkIHRvIHJlY2VpdmUgYmxvY2tzCisvKiBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlQQ1NfMTBCX0JMT0NLX0xPQ0sJMHgwMDAxCS8qIFBDUyAxMEdCQVNFLVIgbG9ja2VkIHRvIHJlY2VpdmUgYmxvY2tzICovCiAKLS8vIFBIWV9YU19MQU5FX1NUQVRVUyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJWFNfTEFORV9BTElHTgkJCTB4MTAwMAkJCS8vIFhTIHRyYW5zbWl0IGxhbmVzIGFsaWduZWQKKy8qIFBIWV9YU19MQU5FX1NUQVRVUyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJWFNfTEFORV9BTElHTgkJMHgxMDAwCQkvKiBYUyB0cmFuc21pdCBsYW5lcyBhbGlnbmVkICovCiAKLS8vIFBIWSBNaWNyb2NvZGUgZG93bmxvYWQgZGF0YSBzdHJ1Y3R1cmUKLXN0cnVjdCBQSFlfVUNPREUgeworI2RlZmluZSBYQ1ZSX1ZFTkRPUl9MRU4JCTE2ICAvKiB4Y3ZyIHZlbmRvciBsZW4gKi8KKyNkZWZpbmUgWENWUl9NT0RFTF9MRU4JCTE2ICAvKiB4Y3ZyIG1vZGVsIGxlbiAqLworCisvKiBQSFkgTWljcm9jb2RlIGRvd25sb2FkIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgcGh5X3Vjb2RlIHsKIAl1c2hvcnQJQWRkcjsKIAl1c2hvcnQJRGF0YTsKIH07CiAKKy8qIFNsb3cgQnVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogTW9kdWxlIDAgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdQSU9fTF9JTgkJMHgxNQkJLyogR1BJTyBpbnB1dCAobG93KSAqLworI2RlZmluZSBHUElPX0xfT1VUCQkweDE2CQkvKiBHUElPIG91dHB1dCAobG93KSAqLworI2RlZmluZSBHUElPX0xfRElSCQkweDE3CQkvKiBHUElPIGRpcmVjdGlvbiAobG93KSAqLworI2RlZmluZSBHUElPX0hfSU4JCTB4MTkJCS8qIEdQSU8gaW5wdXQgKGhpZ2gpICovCisjZGVmaW5lIEdQSU9fSF9PVVQJCTB4MUEJCS8qIEdQSU8gb3V0cHV0IChoaWdoKSAqLworI2RlZmluZSBHUElPX0hfRElSCQkweDFCCQkvKiBHUElPIGRpcmVjdGlvbiAoaGlnaCkgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIG90aGVyIHNsb3cgYnVzIHJlZ2lzdGVycyBjYW4gYmUgYWRkZWQgYXMgbmVlZGVkICovCisKKworLyoKICAqIFRyYW5zbWl0IFNlcXVlbmNlciBDb21tYW5kIERlc2NyaXB0b3IgZGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy8gVGhpcyBkZXNjcmlwdG9yIG11c3QgYmUgcGxhY2VkIGluIEdSQU0uICBUaGUgYWRkcmVzcyBvZiB0aGlzIGRlc2NyaXB0b3IKLS8vIChhbG9uZyB3aXRoIGEgY291cGxlIG9mIGNvbnRyb2wgYml0cykgaXMgcHVzaGVkIG9udG8gdGhlIFB4aENtZFEgb3IgUHhsQ21kUQotLy8gKFByb3h5IGhpZ2ggb3IgbG93IGNvbW1hbmQgcXVldWUpLiAgVGhpcyBkYXRhIGlzIHJlYWQgYnkgdGhlIFByb3h5IFNlcXVlbmNlciwKLS8vIHdoaWNoIHB1c2hlcyBpdCBvbnRvIHRoZSBYbXRDbWRRLCB3aGljaCBpcyAoZXZlbnR1YWxseSkgcmVhZCBieSB0aGUgVHJhbnNtaXQKLS8vIFNlcXVlbmNlciwgY2F1c2luZyBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZC4gIE5vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCBmb3IKLS8vIGFsbCBjb21tYW5kcyAtIHNlZSB0aGUgU2FoYXJhIHNwZWMgZm9yIGRldGFpbHMuICBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKLS8vIG9ubHkgdmFsaWQgd2hlbiBjb21waWxlZCBvbiBhIGxpdHRsZSBlbmRpYW4gbWFjaGluZS4KKyAqCisgKiBUaGlzIGRlc2NyaXB0b3IgbXVzdCBiZSBwbGFjZWQgaW4gR1JBTS4gIFRoZSBhZGRyZXNzIG9mIHRoaXMgZGVzY3JpcHRvcgorICogKGFsb25nIHdpdGggYSBjb3VwbGUgb2YgY29udHJvbCBiaXRzKSBpcyBwdXNoZWQgb250byB0aGUgUHhoQ21kUSBvciBQeGxDbWRRCisgKiAoUHJveHkgaGlnaCBvciBsb3cgY29tbWFuZCBxdWV1ZSkuICBUaGlzIGRhdGEgaXMgcmVhZCBieSB0aGUgUHJveHkgU2VxdWVuY2VyLAorICogd2hpY2ggcHVzaGVzIGl0IG9udG8gdGhlIFhtdENtZFEsIHdoaWNoIGlzIChldmVudHVhbGx5KSByZWFkIGJ5IHRoZSBUcmFuc21pdAorICogU2VxdWVuY2VyLCBjYXVzaW5nIGEgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkLiAgTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkIGZvcgorICogYWxsIGNvbW1hbmRzIC0gc2VlIHRoZSBTYWhhcmEgc3BlYyBmb3IgZGV0YWlscy4gIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcworICogb25seSB2YWxpZCB3aGVuIGNvbXBpbGVkIG9uIGEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lLgorICovCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBYTVRfREVTQyB7Ci0JdXNob3J0CVhtdExlbjsJCQkvLyB3b3JkIDAsIGJpdHMgWzE1OjBdIC0gIHRyYW5zbWl0IGxlbmd0aAotCXVuc2lnbmVkIGNoYXIJWG10Q3RsOwkJCS8vIHdvcmQgMCwgYml0cyBbMjM6MTZdIC0gdHJhbnNtaXQgY29udHJvbCBieXRlCi0JdW5zaWduZWQgY2hhcglDbWQ7CQkJLy8gd29yZCAwLCBiaXRzIFszMToyNF0gLSB0cmFuc21pdCBjb21tYW5kIHBsdXMgbWlzYy4KLQl1MzIJWG10QnVmSWQ7CQkvLyB3b3JkIDEsIGJpdHMgWzMxOjBdIC0gIHRyYW5zbWl0IGJ1ZmZlciBJRAotCXVuc2lnbmVkIGNoYXIJVGNwU3RydDsJCS8vIHdvcmQgMiwgYml0cyBbNzowXSAtICAgYnl0ZSBhZGRyZXNzIG9mIFRDUCBoZWFkZXIKLQl1bnNpZ25lZCBjaGFyCUlwU3RydDsJCQkvLyB3b3JkIDIsIGJpdHMgWzE1OjhdIC0gIGJ5dGUgYWRkcmVzcyBvZiBJUCBoZWFkZXIKLQl1c2hvcnQJSXBDa1N1bTsJCS8vIHdvcmQgMiwgYml0cyBbMzE6MTZdIC0gcGFydGlhbCBJUCBjaGVja3N1bQotCXVzaG9ydAlUY3BDa1N1bTsJCS8vIHdvcmQgMywgYml0cyBbMTU6MF0gLSAgcGFydGlhbCBUQ1AgY2hlY2tzdW0KLQl1c2hvcnQJUnN2ZDE7CQkJLy8gd29yZCAzLCBiaXRzIFszMToxNl0gLSBQQUQKLQl1MzIJUnN2ZDI7CQkJLy8gd29yZCA0LCBiaXRzIFszMTowXSAtICBQQUQKLQl1MzIJUnN2ZDM7CQkJLy8gd29yZCA1LCBiaXRzIFszMTowXSAtICBQQUQKLQl1MzIJUnN2ZDQ7CQkgICAgLy8gd29yZCA2LCBiaXRzIFszMTowXSAtICBQQUQKLQl1MzIJUnN2ZDU7CQkgICAgLy8gd29yZCA3LCBiaXRzIFszMTowXSAtICBQQUQKK3N0cnVjdCB4bXRfZGVzYyB7CisJdXNob3J0CSAgICAgICAgWG10TGVuOwkgICAgLyogd29yZCAwLCBiaXRzIFsxNTowXSAtICB0cmFuc21pdCBsZW5ndGggKi8KKwkvKiB3b3JkIDAsIGJpdHMgWzIzOjE2XSAtIHRyYW5zbWl0IGNvbnRyb2wgYnl0ZSAqLworCXVuc2lnbmVkIGNoYXIJWG10Q3RsOworCS8qIHdvcmQgMCwgYml0cyBbMzE6MjRdIC0gdHJhbnNtaXQgY29tbWFuZCBwbHVzIG1pc2MuICovCisJdW5zaWduZWQgY2hhcglDbWQ7CisJLyogd29yZCAxLCBiaXRzIFszMTowXSAtICB0cmFuc21pdCBidWZmZXIgSUQgKi8KKwl1MzIJWG10QnVmSWQ7CisJLyogd29yZCAyLCBiaXRzIFs3OjBdIC0gICBieXRlIGFkZHJlc3Mgb2YgVENQIGhlYWRlciAqLworCXVuc2lnbmVkIGNoYXIJVGNwU3RydDsKKwkvKiB3b3JkIDIsIGJpdHMgWzE1OjhdIC0gIGJ5dGUgYWRkcmVzcyBvZiBJUCBoZWFkZXIgKi8KKwl1bnNpZ25lZCBjaGFyCUlwU3RydDsKKwkvKiB3b3JkIDIsIGJpdHMgWzMxOjE2XSAtIHBhcnRpYWwgSVAgY2hlY2tzdW0gKi8KKwl1c2hvcnQJSXBDa1N1bTsKKwkvKiB3b3JkIDMsIGJpdHMgWzE1OjBdIC0gIHBhcnRpYWwgVENQIGNoZWNrc3VtICovCisJdXNob3J0CVRjcENrU3VtOworCXVzaG9ydAlSc3ZkMTsJCSAgICAvKiB3b3JkIDMsIGJpdHMgWzMxOjE2XSAtIFBBRCAqLworCXUzMglSc3ZkMjsJCSAgICAvKiB3b3JkIDQsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLworCXUzMglSc3ZkMzsJCSAgICAvKiB3b3JkIDUsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLworCXUzMglSc3ZkNDsJCSAgICAvKiB3b3JkIDYsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLworCXUzMglSc3ZkNTsJCSAgICAvKiB3b3JkIDcsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLwogfTsKICNwcmFnbWEgcGFjayhwb3ApCiAKLS8vIFhNVF9ERVNDIENtZCBieXRlIGRlZmluaXRpb25zCi0JCS8vIGNvbW1hbmQgY29kZXMKLSNkZWZpbmUgWE1UX0RFU0NfQ01EX1JBV19TRU5ECQkwCQkvLyByYXcgc2VuZCBkZXNjcmlwdG9yCi0jZGVmaW5lIFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVAkxCQkvLyBjaGVja3N1bSBpbnNlcnQgZGVzY3JpcHRvcgotI2RlZmluZSBYTVRfREVTQ19DTURfRk9STUFUCQkyCQkvLyBmb3JtYXQgZGVzY3JpcHRvcgotI2RlZmluZSBYTVRfREVTQ19DTURfUFJJTUUJCTMJCS8vIHByaW1lIGRlc2NyaXB0b3IKLSNkZWZpbmUgWE1UX0RFU0NfQ01EX0NPREVfU0hGVAkJNgkJLy8gY29tYW5kIGNvZGUgc2hpZnQgKHNoaWZ0IHRvIGJpdHMgWzMxOjMwXSBpbiB3b3JkIDApCi0JCS8vIHNoaWZ0ZWQgY29tbWFuZCBjb2RlcwotI2RlZmluZSBYTVRfUkFXX1NFTkQJCShYTVRfREVTQ19DTURfUkFXX1NFTkQgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKLSNkZWZpbmUgWE1UX0NTVU1fSU5TRVJUCQkoWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCi0jZGVmaW5lIFhNVF9GT1JNQVQJCQkoWE1UX0RFU0NfQ01EX0ZPUk1BVCAgICAgIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCi0jZGVmaW5lIFhNVF9QUklNRQkJCShYTVRfREVTQ19DTURfUFJJTUUgICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKy8qIHN0cnVjdCB4bXRfZGVzYyBDbWQgYnl0ZSBkZWZpbml0aW9ucyAqLworCQkvKiBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9SQVdfU0VORAkJMAkvKiByYXcgc2VuZCBkZXNjcmlwdG9yICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVAkxCS8qIGNoZWNrc3VtIGluc2VydCBkZXNjcmlwdG9yICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9GT1JNQVQJCTIJLyogZm9ybWF0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1BSSU1FCQkzCS8qIHByaW1lIGRlc2NyaXB0b3IgKi8KKy8qIGNvbWFuZCBjb2RlIHNoaWZ0IChzaGlmdCB0byBiaXRzIFszMTozMF0gaW4gd29yZCAwKSAqLworI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CisJCS8qIHNoaWZ0ZWQgY29tbWFuZCBjb2RlcyAqLworI2RlZmluZSBYTVRfUkFXX1NFTkQJKFhNVF9ERVNDX0NNRF9SQVdfU0VORCAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJKFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVCA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfRk9STUFUCShYTVRfREVTQ19DTURfRk9STUFUICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX1BSSU1FCShYTVRfREVTQ19DTURfUFJJTUUgICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKIAotLy8gWE1UX0RFU0MgQ29udHJvbCBCeXRlIChYbXRDdGwpIGRlZmluaXRpb25zCi0vLyBOT1RFOiAgVGhlc2UgYml0cyBkbyBub3Qgd29yayBvbiBTYWhhcmEgKFJldiBBKSEKLSNkZWZpbmUJWE1UX0NUTF9QQVVTRV9GUkFNRQkJMHg4MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgcGF1c2UgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCi0jZGVmaW5lCVhNVF9DVExfQ09OVFJPTF9GUkFNRQkJMHg0MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCi0jZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8vIHBlciBwYWNrZXQgcXVhbGlmaWVyCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfTk9ORQkJMHgwMAkvLyBkbyBub3QgcGFkIGZyYW1lCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjQJCTB4MDgJLy8gcGFkIGZyYW1lIHRvIDY0IGJ5dGVzCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfVkxBTl82OAkweDEwCS8vIHBhZCBmcmFtZSB0byA2NCBieXRlcywgYW5kIFZMQU4gZnJhbWVzIHRvIDY4IGJ5dGVzCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjgJCTB4MTgJLy8gcGFkIGZyYW1lIHRvIDY4IGJ5dGVzCi0jZGVmaW5lCVhNVF9DVExfR0VOX0ZDUwkJCTB4MDQJLy8gZ2VuZXJhdGUgRkNTIChDUkMpIGZvciB0aGlzIGZyYW1lCi0jZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzAJCTB4MDAJLy8gZG8gbm90IGRlbGF5IEZDUyBjYWxjdXRpb24KLSNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMQkJMHgwMQkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMSAoNC1ieXRlKSB3b3JkCi0jZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzIJCTB4MDIJLy8gZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDIgKDQtYnl0ZSkgd29yZHMKLSNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMwkJMHgwMwkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMyAoNC1ieXRlKSB3b3JkcworLyoKKyAqIHN0cnVjdCB4bXRfZGVzYyBDb250cm9sIEJ5dGUgKFhtdEN0bCkgZGVmaW5pdGlvbnMKKyAqIE5PVEU6ICBUaGVzZSBiaXRzIGRvIG5vdCB3b3JrIG9uIFNhaGFyYSAoUmV2IEEpIQorICovCisvKiBjdXJyZW50IGZyYW1lIGlzIGEgcGF1c2UgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpICovCisjZGVmaW5lCVhNVF9DVExfUEFVU0VfRlJBTUUJCTB4ODAKKy8qIGN1cnJlbnQgZnJhbWUgaXMgYSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykgKi8KKyNkZWZpbmUJWE1UX0NUTF9DT05UUk9MX0ZSQU1FCQkweDQwCisjZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8qIHBlciBwYWNrZXQgcXVhbGlmaWVyICovCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfTk9ORQkJMHgwMAkvKiBkbyBub3QgcGFkIGZyYW1lICovCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjQJCTB4MDgJLyogcGFkIGZyYW1lIHRvIDY0IGJ5dGVzICovCisvKiBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMsIGFuZCBWTEFOIGZyYW1lcyB0byA2OCBieXRlcyAqLworI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFX1ZMQU5fNjgJMHgxMAorI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFXzY4CQkweDE4CS8qIHBhZCBmcmFtZSB0byA2OCBieXRlcyAqLworLyogZ2VuZXJhdGUgRkNTIChDUkMpIGZvciB0aGlzIGZyYW1lICovCisjZGVmaW5lCVhNVF9DVExfR0VOX0ZDUwkJCTB4MDQKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMAkJMHgwMAkvKiBkbyBub3QgZGVsYXkgRkNTIGNhbGN1dGlvbiAqLworLyogZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDEgKDQtYnl0ZSkgd29yZCAqLworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18xCQkweDAxCisvKiBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMiAoNC1ieXRlKSB3b3JkcyAqLworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18yCQkweDAyCisvKiBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMyAoNC1ieXRlKSB3b3JkcyAqLworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18zCQkweDAzCiAKLS8vIFhNVF9ERVNDIFhtdEJ1ZklkIGRlZmluaXRpb24KLSNkZWZpbmUgWE1UX0JVRl9JRF9TSEZUCQk4CS8vIFRoZSBYbXQgYnVmZmVyIElEIGlzIGZvcm1lZCBieSBkaXZpZGluZwotCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDI1NiAob3IgPDwgOCkKKy8qIHN0cnVjdCB4bXRfZGVzYyBYbXRCdWZJZCBkZWZpbml0aW9uICovCisvKgorICogVGhlIFhtdCBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nIHRoZSBidWZmZXIgKERSQU0pIGFkZHJlc3MKKyAqIGJ5IDI1NiAob3IgPDwgOCkKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJlY2VpdmVyIFNlcXVlbmNlciBEZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBYTVRfQlVGX0lEX1NIRlQJCTgKIAotLy8gUmVjZWl2ZSBFdmVudCBRdWV1ZSAocXVldWVzIDMgLSA2KSBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJUkNWX0VWVFFfUkJGSURfTUFTSwkJMHgwMDAwRkZGRgkvLyBiaXQgbWFzayBmb3IgdGhlIFJlY2VpdmUgQnVmZmVyIElECisvKiBSZWNlaXZlciBTZXF1ZW5jZXIgRGVmaW5pdGlvbnMgKi8KIAotLy8gUmVjZWl2ZSBCdWZmZXIgSUQgZGVmaW5pdGlvbgotI2RlZmluZSBSQ1ZfQlVGX0lEX1NIRlQJCTUJLy8gVGhlIFJjdiBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCi0JCQkJCS8vIHRoZSBidWZmZXIgKERSQU0pIGFkZHJlc3MgYnkgMzIgKG9yIDw8IDUpCisvKiBSZWNlaXZlIEV2ZW50IFF1ZXVlIChxdWV1ZXMgMyAtIDYpIGJpdCBkZWZpbml0aW9ucyAqLworLyogYml0IG1hc2sgZm9yIHRoZSBSZWNlaXZlIEJ1ZmZlciBJRCAqLworI2RlZmluZQlSQ1ZfRVZUUV9SQkZJRF9NQVNLCTB4MDAwMEZGRkYKIAotLy8gRm9ybWF0IG9mIHRoZSAxOCBieXRlIFJlY2VpdmUgQnVmZmVyIHJldHVybmVkIGJ5IHRoZQotLy8gUmVjZWl2ZSBTZXF1ZW5jZXIgZm9yIHJlY2VpdmVkIHBhY2tldHMKKy8qIFJlY2VpdmUgQnVmZmVyIElEIGRlZmluaXRpb24gKi8KKy8qCisgKiBUaGUgUmN2IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcgdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcworICogYnkgMzIgKG9yIDw8IDUpCisgKi8KKyNkZWZpbmUgUkNWX0JVRl9JRF9TSEZUCQk1CisKKy8qCisgKiBGb3JtYXQgb2YgdGhlIDE4IGJ5dGUgUmVjZWl2ZSBCdWZmZXIgcmV0dXJuZWQgYnkgdGhlCisgKiBSZWNlaXZlIFNlcXVlbmNlciBmb3IgcmVjZWl2ZWQgcGFja2V0cworICovCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBSQ1ZfQlVGX0hEUiB7Ci0JdTMyCVN0YXR1czsJCQkJLy8gU3RhdHVzIHdvcmQgZnJvbSBSY3YgU2VxIFBhcnNlcgotCXVzaG9ydAlMZW5ndGg7CQkJCS8vIFJjdiBwYWNrZXQgYnl0ZSBjb3VudAorc3RydWN0IHJjdl9idWZfaGRyIHsKKwl1MzIJU3RhdHVzOwkJLyogU3RhdHVzIHdvcmQgZnJvbSBSY3YgU2VxIFBhcnNlciAqLworCXVzaG9ydAlMZW5ndGg7CQkvKiBSY3YgcGFja2V0IGJ5dGUgY291bnQgKi8KIAl1bmlvbiB7Ci0JCXVzaG9ydAkJVGNwQ3N1bTsJLy8gVENQIGNoZWNrc3VtCisJCXVzaG9ydAkJVGNwQ3N1bTsJLyogVENQIGNoZWNrc3VtICovCiAJCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBjaGFyCVRjcENzdW1MOwkvLyBsb3dlciA4IGJpdHMgb2YgdGhlIFRDUCBjaGVja3N1bQotCQkJdW5zaWduZWQgY2hhcglMaW5rSGFzaDsJLy8gTGluayBoYXNoIChtdWx0aWNhc3QgZnJhbWVzIG9ubHkpCisJCQkvKiBsb3dlciA4IGJpdHMgb2YgdGhlIFRDUCBjaGVja3N1bSAqLworCQkJdW5zaWduZWQgY2hhcglUY3BDc3VtTDsKKwkJCS8qIExpbmsgaGFzaCAobXVsdGljYXN0IGZyYW1lcyBvbmx5KSAqLworCQkJdW5zaWduZWQgY2hhcglMaW5rSGFzaDsKIAkJfTsKIAl9OwotCXVzaG9ydAlTa3RIYXNoOwkJCS8vIFNvY2tldCBoYXNoCi0JdW5zaWduZWQgY2hhcglUY3BIZHJPZmZzZXQ7CQkvLyBUQ1AgaGVhZGVyIG9mZnNldCBpbnRvIHBhY2tldAotCXVuc2lnbmVkIGNoYXIJSXBIZHJPZmZzZXQ7CQkvLyBJUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0Ci0JdTMyCVRwekhhc2g7CQkJLy8gVG9lcGxpdHogaGFzaAotCXVzaG9ydAlSZXNlcnZlZDsJCQkvLyBSZXNlcnZlZAorCXVzaG9ydAlTa3RIYXNoOwkJLyogU29ja2V0IGhhc2ggKi8KKwl1bnNpZ25lZCBjaGFyCVRjcEhkck9mZnNldDsJLyogVENQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQgKi8KKwl1bnNpZ25lZCBjaGFyCUlwSGRyT2Zmc2V0OwkvKiBJUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0ICovCisJdTMyCSAgICAgICAJVHB6SGFzaDsJLyogVG9lcGxpdHogaGFzaCAqLworCXVzaG9ydAkgICAgICAgIFJlc2VydmVkOwkvKiBSZXNlcnZlZCAqLwogfTsKICNwcmFnbWEgcGFjayhwb3ApCiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBRdWV1ZSBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUXVldWUgZGVmaW5pdGlvbnMgKi8KIAogLyogSW5ncmVzcyAocmVhZCBvbmx5KSBxdWV1ZSBudW1iZXJzICovCi0jZGVmaW5lIFBYWV9CVUZfUQkJMAkJLyogUHJveHkgQnVmZmVyIFF1ZXVlICovCi0jZGVmaW5lIEhTVF9FVlRfUQkJMQkJLyogSG9zdCBFdmVudCBRdWV1ZSAqLwotI2RlZmluZSBYTVRfQlVGX1EJCTIJCS8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSAqLwotI2RlZmluZSBTS1RfRVZMX1EJCTMJCS8qIFJjdlNxciBTb2NrZXQgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlICovCi0jZGVmaW5lIFJDVl9FVkxfUQkJNAkJLyogUmN2U3FyIFJjdiBFdmVudCBMb3cgUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgU0tUX0VWSF9RCQk1CQkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgUkNWX0VWSF9RCQk2CQkvKiBSY3ZTcXIgUmN2IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgRE1BX1JTUF9RCQk3CQkvKiBEbWEgUmVzcG9uc2UgUXVldWUgLSBvbmUgcGVyIENQVSBjb250ZXh0ICovCisjZGVmaW5lIFBYWV9CVUZfUQkwCS8qIFByb3h5IEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBIU1RfRVZUX1EJMQkvKiBIb3N0IEV2ZW50IFF1ZXVlICovCisjZGVmaW5lIFhNVF9CVUZfUQkyCS8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBTS1RfRVZMX1EJMwkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZSAqLworI2RlZmluZSBSQ1ZfRVZMX1EJNAkvKiBSY3ZTcXIgUmN2IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZSAqLworI2RlZmluZSBTS1RfRVZIX1EJNQkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KKyNkZWZpbmUgUkNWX0VWSF9RCTYJLyogUmN2U3FyIFJjdiBFdmVudCBIaWdoIFByaW9yaXR5IFF1ZXVlICovCisjZGVmaW5lIERNQV9SU1BfUQk3CS8qIERtYSBSZXNwb25zZSBRdWV1ZSAtIG9uZSBwZXIgQ1BVIGNvbnRleHQgKi8KIC8qIExvY2FsIChyZWFkL3dyaXRlKSBxdWV1ZSBudW1iZXJzICovCi0jZGVmaW5lIExPQ0FMX0FfUQkJOAkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KLSNkZWZpbmUgTE9DQUxfQl9RCQk5CQkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLwotI2RlZmluZSBMT0NBTF9DX1EJCTEwCQkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLwotI2RlZmluZSBGU01fRVZUX1EJCTExCQkvKiBGaW5pdGUtU3RhdGUtTWFjaGluZSBFdmVudCBRdWV1ZSAqLwotI2RlZmluZSBTQkZfUEFMX1EJCTEyCQkvKiBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGxvdykgUXVldWUgKi8KLSNkZWZpbmUgU0JGX1BBSF9RCQkxMwkJLyogU3lzdGVtIEJ1ZmZlciBQaHlzaWNhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZSAqLwotI2RlZmluZSBTQkZfVkFMX1EJCTE0CQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAobG93KSBRdWV1ZSAqLwotI2RlZmluZSBTQkZfVkFIX1EJCTE1CQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAoaGlnaCkgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQV9RCTgJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQl9RCTkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQ19RCTEwCS8qIFNwYXJlIGxvY2FsIFF1ZXVlICovCisjZGVmaW5lIEZTTV9FVlRfUQkxMQkvKiBGaW5pdGUtU3RhdGUtTWFjaGluZSBFdmVudCBRdWV1ZSAqLworI2RlZmluZSBTQkZfUEFMX1EJMTIJLyogU3lzdGVtIEJ1ZmZlciBQaHlzaWNhbCBBZGRyZXNzIChsb3cpIFF1ZXVlICovCisjZGVmaW5lIFNCRl9QQUhfUQkxMwkvKiBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGhpZ2gpIFF1ZXVlKi8KKyNkZWZpbmUgU0JGX1ZBTF9RCTE0CS8qIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChsb3cpIFF1ZXVlICovCisjZGVmaW5lIFNCRl9WQUhfUQkxNQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAoaGlnaCkgUXVldWUgKi8KIC8qIEVncmVzcyAod3JpdGUgb25seSkgcXVldWUgbnVtYmVycyAqLwotI2RlZmluZSBIMkdfQ01EX1EJCTE2CQkvKiBIb3N0IHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBIMkRfQ01EX1EJCTE3CQkvKiBIb3N0IHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRzJIX0NNRF9RCQkxOAkJLyogR2xiUmFtIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRzJEX0NNRF9RCQkxOQkJLyogR2xiUmFtIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRDJIX0NNRF9RCQkyMAkJLyogRFJBTSB0byBIb3N0IERNQSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIEQyR19DTURfUQkJMjEJCS8qIERSQU0gdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIEQyRF9DTURfUQkJMjIJCS8qIERSQU0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBQWExfQ01EX1EJCTIzCQkvKiBMb3cgUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBQWEhfQ01EX1EJCTI0CQkvKiBIaWdoIFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgUlNRX0NNRF9RCQkyNQkJLyogUmVjZWl2ZSBTZXF1ZW5jZXIgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBSQ1ZfQlVGX1EJCTI2CQkvKiBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBIMkdfQ01EX1EJMTYJLyogSG9zdCB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgSDJEX0NNRF9RCTE3CS8qIEhvc3QgdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBHMkhfQ01EX1EJMTgJLyogR2xiUmFtIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgRzJEX0NNRF9RCTE5CS8qIEdsYlJhbSB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEQySF9DTURfUQkyMAkvKiBEUkFNIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgRDJHX0NNRF9RCTIxCS8qIERSQU0gdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEQyRF9DTURfUQkyMgkvKiBEUkFNIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUFhMX0NNRF9RCTIzCS8qIExvdyBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIFBYSF9DTURfUQkyNAkvKiBIaWdoIFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUlNRX0NNRF9RCTI1CS8qIFJlY2VpdmUgU2VxdWVuY2VyIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUkNWX0JVRl9RCTI2CS8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlICovCiAKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFByb3h5IENvbW1hbmQgcXVldWVzIChQWExfQ01EX1EgYW5kIFBYSF9DTURfUSkgKi8KLSNkZWZpbmUgUFhZX0NPUFlfRU4JCTB4MDAyMDAwMDAJCS8qIGVuYWJsZSBjb3B5IG9mIHhtdCBkZXNjcmlwdG9yIHRvIHhtdCBjb21tYW5kIHF1ZXVlICovCi0jZGVmaW5lIFBYWV9TSVpFXzE2CQkweDAwMDAwMDAwCQkvKiBjb3B5IDE2IGJ5dGVzICovCi0jZGVmaW5lIFBYWV9TSVpFXzMyCQkweDAwMTAwMDAwCQkvKiBjb3B5IDMyIGJ5dGVzICovCisvKiBlbmFibGUgY29weSBvZiB4bXQgZGVzY3JpcHRvciB0byB4bXQgY29tbWFuZCBxdWV1ZSAqLworI2RlZmluZSBQWFlfQ09QWV9FTgkweDAwMjAwMDAwCisjZGVmaW5lIFBYWV9TSVpFXzE2CTB4MDAwMDAwMDAJLyogY29weSAxNiBieXRlcyAqLworI2RlZmluZSBQWFlfU0laRV8zMgkweDAwMTAwMDAwCS8qIGNvcHkgMzIgYnl0ZXMgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTWEcgRUVQUk9NL0ZsYXNoIENvbmZpZ3VyYXRpb24gRGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNYRyBFRVBST00vRmxhc2ggQ29uZmlndXJhdGlvbiBEZWZpbml0aW9ucyAqLworCisvKiBMb2NhdGlvbiBvZiBjb25maWd1cmF0aW9uIGRhdGEgaW4gRUVQUk9NIG9yIEZsYXNoICovCisvKiBzdGFydCBhZGRyIGZvciBjb25maWcgaW5mbyBpbiBFRVBST00gKi8KKyNkZWZpbmUJRUVQUk9NX0NPTkZJR19TVEFSVF9BRERSCTB4MDAKKy8qIHN0YXJ0IGFkZHIgZm9yIGNvbmZpZyBpbmZvIGluIEZsYXNoICovCisjZGVmaW5lCUZMQVNIX0NPTkZJR19TVEFSVF9BRERSCQkweDgwCisKKy8qIENvbmZpZ3VyYXRpb24gZGF0YSBzZWN0aW9uIGRlZmluZXMgKi8KKyNkZWZpbmUJSFdfQ0ZHX1NFQ1RJT05fU0laRQk1MTIJLyogc2l6ZSBvZiBIL1cgc2VjdGlvbiAqLworI2RlZmluZQlIV19DRkdfU0VDVElPTl9TSVpFX0EJMjU2CS8qIHNpemUgb2YgSC9XIHNlY3Rpb24gKFNhaGFyYSByZXYgQSkgKi8KKy8qIHN0YXJ0aW5nIGxvY2F0aW9uIChvZmZzZXQpIG9mIFMvVyBzZWN0aW9uICovCisjZGVmaW5lCVNXX0NGR19TRUNUSU9OX1NUQVJUCTUxMgorLyogc3RhcnRpbmcgbG9jYXRpb24gKG9mZnNldCkgb2YgUy9XIHNlY3Rpb24gKFNhaGFyYSByZXYgQSkgKi8KKyNkZWZpbmUJU1dfQ0ZHX1NFQ1RJT05fU1RBUlRfQQkyNTYKKyNkZWZpbmUJU1dfQ0ZHX1NFQ1RJT05fU0laRQkxMjgJLyogc2l6ZSBvZiBTL1cgc2VjdGlvbiAqLworLyoKKyAqIEgvVyBjb25maWd1cmF0aW9uIGRhdGEgbWFnaWMgd29yZCBHb2VzIGluIEFkZHIgZmllbGQgb2YgZmlyc3QKKyAqIHN0cnVjdCBod19jZmdfZGF0YSBlbnRyeQorICovCisjZGVmaW5lCUhXX0NGR19NQUdJQ19XT1JECTB4QTVBNQorLyoKKyAqIEgvVyBjb25maWd1cmF0aW9uIGRhdGEgdGVybWluYXRvciAgR29lcyBpbiBBZGRyIGZpZWxkIG9mIGxhc3QKKyAqIHN0cnVjdCBod19jZmdfZGF0YSBlbnRyeQorICovCisjZGVmaW5lCUhXX0NGR19URVJNSU5BVE9SCTB4RkZGRgorCisjZGVmaW5lCVNXX0NGR19NQUdJQ19XT1JECTB4NUE1QQkvKiBTL1cgY29uZmlndXJhdGlvbiBkYXRhIG1hZ2ljIHdvcmQgKi8KKwogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi0KLS8qICovCi1zdHJ1Y3QgSFdfQ0ZHX0RBVEEgewotCXVzaG9ydAkJQWRkcjsKLQl1bmlvbiB7Ci0JCXVzaG9ydAlEYXRhOwotCQl1c2hvcnQJQ2hlY2tzdW07Ci0JfTsKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIGFuIGVsZW1lbnQgb2YgSC9XIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqIFJlYWQgYnkgdGhlIFNhaGFyYSBoYXJkd2FyZQorICovCitzdHJ1Y3QgaHdfY2ZnX2RhdGEgeworCXVzaG9ydAlBZGRyOworCXVzaG9ydAlEYXRhOwogfTsKIAotLyogKi8KLSNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTCSgoMTI4L3NpemVvZihzdHJ1Y3QgSFdfQ0ZHX0RBVEEpKSAtIDQpCisvKgorICogTnVtYmVyIG9mIHN0cnVjdCBod19jZmdfZGF0YSBzdHJ1Y3R1cmVzIHRvIHB1dCBpbiB0aGUgY29uZmlndXJhdGlvbiBkYXRhCisgKiBkYXRhIHN0cnVjdHVyZSAoc3RydWN0IHN4Z19jb25maWcgb3Igc3RydWN0IHN4Z19jb25maWdfYSkuICBUaGUgbnVtYmVyIGlzCisgKiBjb21wdXRlZCB0byBmaWxsIHRoZSBlbnRpcmUgSC9XIGNvbmZpZyBzZWN0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTCQkJCQkJXAorCQkJKEhXX0NGR19TRUNUSU9OX1NJWkUgLyBzaXplb2Yoc3RydWN0IGh3X2NmZ19kYXRhKSkKKyNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTX0EJCQkJCQlcCisJCQkoSFdfQ0ZHX1NFQ1RJT05fU0laRV9BIC8gc2l6ZW9mKHN0cnVjdCBod19jZmdfZGF0YSkpCiAKLS8qIE1BQyBhZGRyZXNzICovCi1zdHJ1Y3QgU1hHX0NPTkZJR19NQUMgewotCXVuc2lnbmVkIGNoYXIJCU1hY0FkZHJbNl07CQkJLyogTUFDIEFkZHJlc3MgKi8KKy8qIE1BQyBhZGRyZXNzIHN0cnVjdHVyZSAqLworc3RydWN0IHN4Z19jb25maWdfbWFjIHsKKwl1bnNpZ25lZCBjaGFyCU1hY0FkZHJbNl07CS8qIE1BQyBBZGRyZXNzICovCiB9OwogCi0vKiAqLwotc3RydWN0IEFUS19GUlUgeworLyogRlJVIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgYXRrX2ZydSB7CiAJdW5zaWduZWQgY2hhcgkJUGFydE51bVs2XTsKIAl1bnNpZ25lZCBjaGFyCQlSZXZpc2lvblsyXTsKIAl1bnNpZ25lZCBjaGFyCQlTZXJpYWxbMTRdOwpAQCAtNjk3LDM4ICs5MDksMTEyIEBACiAjZGVmaW5lIEVNQ19GUlVfRk9STUFUCQkweDAwMDUKICNkZWZpbmUgTk9fRlJVX0ZPUk1BVAkJMHhGRkZGCiAKLS8qIEVFUFJPTS9GbGFzaCBGb3JtYXQgKi8KLXN0cnVjdCBTWEdfQ09ORklHIHsKLQkvKiAqLwotCS8qIFNlY3Rpb24gMSAoMTI4IGJ5dGVzKSAqLwotCS8qICovCi0JdXNob3J0CQkJTWFnaWNXb3JkOwkJCS8qIEVFUFJPTS9GTEFTSCBNYWdpYyBjb2RlICdBNUE1JyAqLwotCXVzaG9ydAkJCVNwaUNsa3M7CQkJLyogU1BJIGJ1cyBjbG9jayBkaXZpZGVycyAqLwotCXN0cnVjdCBIV19DRkdfREFUQQkJSHdDZmdbTlVNX0hXX0NGR19FTlRSSUVTXTsKLQkvKiAqLwotCS8qICovCi0JLyogKi8KLQl1c2hvcnQJCQlWZXJzaW9uOwkJCS8qIEVFUFJPTSBmb3JtYXQgdmVyc2lvbiAqLwotCXN0cnVjdCBTWEdfQ09ORklHX01BQwlNYWNBZGRyWzRdOwkJCS8qIHNwYWNlIGZvciA0IE1BQyBhZGRyZXNzZXMgKi8KLQlzdHJ1Y3QgQVRLX0ZSVQkJCUF0a0ZydTsJCQkJLyogRlJVIGluZm9ybWF0aW9uICovCi0JdXNob3J0CQkJT2VtRnJ1Rm9ybWF0OwkJLyogT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwotCXVuc2lnbmVkIGNoYXIJCQlPZW1GcnVbNzZdOwkJCS8qIE9FTSBGUlUgaW5mb3JtYXRpb24gKG9wdGlvbmFsKSAqLwotCXVzaG9ydAkJCUNoZWNrc3VtOwkJCS8qIENoZWNrc3VtIG9mIHNlY3Rpb24gMiAqLwotCS8qIENTIGluZm8gWFhYVE9ETyAqLworI2RlZmluZQlBVEtfT0VNX0FTU1lfU0laRQkxMAkvKiBhc3N5IG51bSBpcyA5IGNoYXJzIHBsdXMgXDAgKi8KKworLyogT0VNIEZSVSBzdHJ1Y3R1cmUgZm9yIEFsYWNyaXRlY2ggKi8KK3N0cnVjdCBhdGtfb2VtIHsKKwl1bnNpZ25lZCBjaGFyIEFzc3lbQVRLX09FTV9BU1NZX1NJWkVdOwogfTsKKworI2RlZmluZQlPRU1fRUVQUk9NX0ZSVVNJWkUJNzQJLyogc2l6ZSBvZiBPRU0gZnJ1IGluZm8gLSBzaXplICovCisvKiBjaG9zZW4gdG8gZmlsbCBvdXQgdGhlIFMvVyBzZWN0aW9uICovCisKK3VuaW9uIG9lbV9mcnUgewkJCS8qIE9FTSBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIE9lbUZydVtPRU1fRUVQUk9NX0ZSVVNJWkVdOworCXN0cnVjdCBhdGtfb2VtIEF0a09lbTsKK307CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIHRoZSBTL1cgY29uZmlndXJhdGlvbiBkYXRhLiAqLworc3RydWN0IHN3X2NmZ19kYXRhIHsKKwl1c2hvcnQJCQlNYWdpY1dvcmQ7CS8qIE1hZ2ljIHdvcmQgZm9yIHNlY3Rpb24gMiAqLworCXVzaG9ydAkJCVZlcnNpb247CS8qIEZvcm1hdCB2ZXJzaW9uICovCisJc3RydWN0IHN4Z19jb25maWdfbWFjCU1hY0FkZHJbNF07CS8qIHNwYWNlIGZvciA0IE1BQyBhZGRyZXNzZXMgKi8KKwlzdHJ1Y3QgYXRrX2ZydQkJQXRrRnJ1OwkJLyogRlJVIGluZm9ybWF0aW9uICovCisJdXNob3J0CQkJT2VtRnJ1Rm9ybWF0OwkvKiBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtX2ZydQkJT2VtRnJ1OwkJLyogT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVzaG9ydAkJCUNoZWNrc3VtOwkvKiBDaGVja3N1bSBvZiBzZWN0aW9uIDIgKi8KK307CisKKworLyogRUVQUk9NL0ZsYXNoIEZvcm1hdCAqLworc3RydWN0IHN4Z19jb25maWcgeworCS8qIEgvVyBTZWN0aW9uIC0gUmVhZCBieSBTYWhhcmEgaGFyZHdhcmUgKDUxMiBieXRlcykgKi8KKwlzdHJ1Y3QgaHdfY2ZnX2RhdGEJCUh3Q2ZnW05VTV9IV19DRkdfRU5UUklFU107CisJLyogUy9XIFNlY3Rpb24gLSBPdGhlciBjb25maWd1cmF0aW9uIGRhdGEgKDEyOCBieXRlcykgKi8KKwlzdHJ1Y3Qgc3dfY2ZnX2RhdGEJU3dDZmc7Cit9OworCisjaWZkZWYgV0lORE9XU19DT01QSUxFUgorLyoKKyAqICBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHNvbWV0aGluZyBvZiBhIGtsdWRnZSwgYnV0IGl0IGlzIHRoZSBvbmx5IHdheQorICogdGhhdCBJIGNvdWxkIGZpbmQgdG8gY2F0Y2ggY2VydGFpbiBwcm9ncmFtbWluZyBlcnJvcnMgYXQgY29tcGlsZSB0aW1lLgorICogSWYgdGhlIGFzc2VydGVkIGNvbmRpdGlvbiBpcyB0cnVlLCB0aGVuIG5vdGhpbmcgaGFwcGVucy4gIElmIGZhbHNlLCB0aGVuCisgKiB0aGUgY29tcGlsZXIgdHJpZXMgdG8gdHlwZWRlZiBhbiBhcnJheSB3aXRoIC0xIG1lbWJlcnMsIHdoaWNoIGdlbmVyYXRlcworICogYW4gZXJyb3IuICBVbmZvcnR1bmF0ZWx5LCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtZWFuaW5nbGVzcywgYnV0IGF0IGxlYXN0CisgKiBpdCBjYXRjaGVzIHRoZSBwcm9ibGVtLiAgVGhpcyBtYWNybyB3b3VsZCBiZSB1bm5lY2Vzc2FyeSBpZiB0aGUgY29tcGlsZXIKKyAqIGFsbG93ZWQgdGhlIHNpemVvZiBhbmQgb2Zmc2V0b2YgbWFjcm9zIHRvIGJlIHVzZWQgaW4gdGhlICNpZiBkaXJlY3RpdmUuCisgKi8KKyNkZWZpbmUgY29tcGlsZV90aW1lX2Fzc2VydChjb25kKSBcCisgICAgdHlwZWRlZiBjaGFyIGNvbXBfZXJyb3JbKGNvbmQpID8gMSA6IC0xXQorCisvKgorICogQSBjb21waWxlciBlcnJvciBvbiBlaXRoZXIgb2YgdGhlIG5leHQgdHdvIGxpbmVzIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3Qgc3hnX2NvbmZpZworICogc3RydWN0dXJlIHdhcyBidWlsdCBpbmNvcnJlY3RseS4gIFVuZm9ydHVuYXRlbHksIHRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkCisgKiBpcyBtZWFuaW5nbGVzcy4gIEJ1dCB0aGlzIGlzIGFwcGFyZW50bHkgdGhlIG9ubHkgd2F5IHRvIGNhdGNoIHRoaXMgcHJvYmxlbQorICogYXQgY29tcGlsZSB0aW1lLgorICovCitjb21waWxlX3RpbWVfYXNzZXJ0IChvZmZzZXRvZihzdHJ1Y3Qgc3hnX2NvbmZpZywgU3dDZmcpID09IFNXX0NGR19TRUNUSU9OX1NUQVJUKTsKK2NvbXBpbGVfdGltZV9hc3NlcnQgKHNpemVvZihzdHJ1Y3Qgc3hnX2NvbmZpZykgPT0gSFdfQ0ZHX1NFQ1RJT05fU0laRQorCQkJCQkJCSsgU1dfQ0ZHX1NFQ1RJT05fU0laRSk7CisKK2NvbXBpbGVfdGltZV9hc3NlcnQgKG9mZnNldG9mKHN0cnVjdCBzeGdfY29uZmlnX2EsIFN3Q2ZnKQorCQkJCQkJID09IFNXX0NGR19TRUNUSU9OX1NUQVJUX0EpOworY29tcGlsZV90aW1lX2Fzc2VydCAoc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnX2EpID09IEhXX0NGR19TRUNUSU9OX1NJWkVfQQorCQkJCQkJICsgU1dfQ0ZHX1NFQ1RJT05fU0laRSk7CisjZW5kaWYKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gZHJpdmVyIGFuZCB1c2VyLW1vZGUKKyAqIGNvbnRyb2wgYXBwbGljYXRpb24KKyAqLworc3RydWN0IGFkYXB0X3VzZXJpbmZvIHsKKwlib29sCQkgICAgTGlua1VwOworCS8qIHVzZSBMaW5rVXAgLSBhbnkgbmVlZCBmb3Igb3RoZXIgc3RhdGVzPyAqLworCS8qIHUzMiAgCSAgICBMaW5rU3RhdGU7ICovCisJdTMyIAkJICAgIExpbmtTcGVlZDsJCS8qIG5vdCBjdXJyZW50bHkgbmVlZGVkICovCisJdTMyIAkJICAgIExpbmtEdXBsZXg7CQkvKiBub3QgY3VycmVudGx5IG5lZWRlZCAqLworIAllbnVtIHhjdnJfdHlwZQkgICAgWGN2clR5cGU7CQkvKiB0eXBlIG9mIHhjdnIgb24gZmliZXIgY2FyZCAqLworCS8qIGZpYmVyIGNhcmQgeGN2ciB2ZW5kb3IgKi8KKwl1bnNpZ25lZCBjaGFyCQlYY3ZyVmVuZG9yW1hDVlJfVkVORE9SX0xFTl07CisJdW5zaWduZWQgY2hhcgkJWGN2ck1vZGVbWENWUl9NT0RFTF9MRU5dOworCXUzMiAJCSAgICBQb3J0OwkJLyogbm90IGN1cnJlbnRseSBuZWVkZWQgKi8KKwl1MzIgCQkgICAgUGh5c1BvcnQ7CQkvKiBub3QgY3VycmVudGx5IG5lZWRlZCAqLworCXVzaG9ydAkJICAgIFBjaUxhbmVzOworCXVuc2lnbmVkIGNoYXIJTWFjQWRkcls2XTsKKwl1bnNpZ25lZCBjaGFyICAgQ3Vyck1hY0FkZHJbNl07CisJc3RydWN0IGF0a19mcnUJICAgIEF0a0ZydTsKKwl1c2hvcnQgIAkgICAgT2VtRnJ1Rm9ybWF0OworCXVuaW9uIG9lbV9mcnUJICAgIE9lbUZydTsKK307CisKICNwcmFnbWEgcGFjayhwb3ApCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTWlzY2VsbGFuZW91cyBIYXJkd2FyZSBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTWlzY2VsbGFuZW91cyBIYXJkd2FyZSBkZWZpbml0aW9ucyAqLwogCi0vLyBTYWhhcmEgKEFTSUMgbGV2ZWwpIGRlZmluZXMKLSNkZWZpbmUgU0FIQVJBX0dSQU1fU0laRQkJMHgwMjAwMDAJCS8vIEdSQU0gc2l6ZSAtIDEyOCBLQgotI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCQkweDIwMDAwMAkJLy8gRFJBTSBzaXplIC0gMiBNQgotI2RlZmluZSBTQUhBUkFfUVJBTV9TSVpFCQkweDAwNDAwMAkJLy8gUVJBTSBzaXplIC0gMTZLIGVudHJpZXMgKDY0IEtCKQotI2RlZmluZSBTQUhBUkFfV0NTX1NJWkUJCQkweDAwMjAwMAkJLy8gV0NTIC0gOEsgaW5zdHJ1Y3Rpb25zICh4IDEwOCBiaXRzKQorLyogSGFyZHdhcmUgVHlwZSBkZWZpbml0aW9ucyAgKi8KIAotLy8gQXJhYmlhIChib2FyZCBsZXZlbCkgZGVmaW5lcwotI2RlZmluZQlGTEFTSF9TSVpFCQkJMHgwODAwMDAJCS8vIDUxMiBLQiAoNCBNYikKLSNkZWZpbmUJRUVQUk9NX1NJWkVfWEZNUgkJNTEyCQkJLy8gdHJ1ZSBFRVBST00gc2l6ZSAoYnl0ZXMpLCBpbmNsdWRpbmcgeGZtciBhcmVhCi0jZGVmaW5lCUVFUFJPTV9TSVpFX05PX1hGTVIJCTI1NgkJCS8vIEVFUFJPTSBzaXplIGV4Y2x1ZGluZyB4Zm1yIGFyZWEKKy8qIFNhaGFyYSAoQVNJQyBsZXZlbCkgZGVmaW5lcyAqLworI2RlZmluZSBTQUhBUkFfR1JBTV9TSVpFCTB4MDIwMDAwCS8qIEdSQU0gc2l6ZSAtIDEyOCBLQiAqLworI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCTB4MjAwMDAwCS8qIERSQU0gc2l6ZSAtIDIgTUIgKi8KKy8qIFFSQU0gc2l6ZSAtIDE2SyBlbnRyaWVzICg2NCBLQikgKi8KKyNkZWZpbmUgU0FIQVJBX1FSQU1fU0laRQkweDAwNDAwMAorLyogV0NTIC0gOEsgaW5zdHJ1Y3Rpb25zICh4IDEwOCBiaXRzKSAqLworI2RlZmluZSBTQUhBUkFfV0NTX1NJWkUJCTB4MDAyMDAwCisKKy8qIEFyYWJpYSAoYm9hcmQgbGV2ZWwpIGRlZmluZXMgKi8KKyNkZWZpbmUJRkxBU0hfU0laRQkJMHgwODAwMDAJLyogNTEyIEtCICg0IE1iKSAqLworLyogRUVQUk9NIHNpemUgKGJ5dGVzKSwgaW5jbHVkaW5nIHhmbXIgYXJlYSAqLworI2RlZmluZQlFRVBST01fU0laRV9YRk1SCTEwMjQKKy8qIEVFUFJPTSBzaXplIGV4Y2x1ZGluZyB4Zm1yIGFyZWEgKDUxMiArIDEyOCkgKi8KKyNkZWZpbmUJRUVQUk9NX1NJWkVfTk9fWEZNUgk2NDAKKy8qIEVFUFJPTSBzaXplIGZvciBTYWhhcmEgcmV2IEEgKi8KKyNkZWZpbmUJRUVQUk9NX1NJWkVfUkVWX0EJNTEyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUtMS4yLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUtMS4yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0NDhiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS0xLjIuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCA/IDE5OTctMjAwOCBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiAkSWQ6IHN4Z3BoeWNvZGUuaCx2IDEuMiAyMDA4LzEwLzAyIDAxOjQ0OjA3IEV4cCAkCisgKgorICogc3hncGh5Y29kZS5oOgorICoKKyAqIFRoaXMgZmlsZSBQSFkgbWljcm9jb2RlIGFuZCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBkYXRhLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQSFkgTWljcm9jb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIGJvdGggUEhZIG1pY3JvY29kZSBhbmQgUEhZIHJlZ2lzdGVyCisvLyBpbml0aWFsaXphdGlvbiBkYXRhLiAgSXQgaXMgc3BlY2lmaWMgdG8gYm90aCB0aGUgUEhZIGFuZCB0aGUKKy8vIHR5cGUgb2YgdHJhbnNjZWl2ZXIuCisvLworCisvLyBEb3dubG9hZCBmb3IgQUVMMjAwNUMgUEhZIHdpdGggU1IvTFIgdHJhbnNjZWl2ZXIgKDEwR0JBU0UtU1Igb3IgMTBHQkFTRS1MUikKKy8vIEFFTDIwMDUgU1IgZmlybXdhcmUgcmV2IDE4IChtaWNyb0luaXRfbWRpb19TUl9BRUwyMDA1Q18xOC50eCkuCitzdGF0aWMgc3RydWN0IHBoeV91Y29kZQlQaHlVY29kZVtdID0geworCS8vIE5PVEU6ICBBbiBhZGRyZXNzIG9mIDAgaXMgYSBzcGVjaWFsIGNhc2UuICBXaGVuIHRoZSBkb3dubG9hZCByb3V0aW5lCisJLy8gc2VlcyBhbiBhZGRyZXNzIG9mIDAsIGl0IGRvZXMgbm90IHdyaXRlIHRvIHRoZSBQSFkuICBJbnN0ZWFkLCBpdCBkZWxheXMKKwkvLyB0aGUgZG93bmxvYWQuICBUaGUgbGVuZ3RoIG9mIHRoZSBkZWxheSAoaW4gbXMpIGlzIGdpdmVuIGluIHRoZSBkYXRhIGZpZWxkLgorCS8vIERlbGF5cyBhcmUgcmVxdWlyZWQgYXQgY2VydGFpbiBwb2ludHMuCisKKwkvLyBQbGF0Zm9ybS1zcGVjaWZpYyBNRElPIFBhdGNoZXM6CisJLy8gKGluY2x1ZGUgcGF0Y2hlcyBmb3IgMTBHIFJYIHBvbGFyaXR5IGZsaXAsIDUwTWh6IFN5bnRoLCBldGMpCisJLy8gQWRkcgkJRGF0YQorCXsweGMwMTcsCTB4ZmViMH0sCS8vIGZsaXAgUlhfTE9TIHBvbGFyaXR5IChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNGUCsgYXBwbGljYXRpb25zKQorCXsweEMwMDEsCTB4MDQyOH0sCS8vIGZsaXAgUlggc2VyaWFsIHBvbGFyaXR5CisKKwl7MHhjMDEzLAkweGYzNDF9LAkvLyBpbnZlcnQgbHhtaXQgY2xvY2sgKG1hbmRhdG9yeSBwYXRjaCkKKwl7MHhjMjEwLAkweDgwMDB9LAkvLyByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKQorCXsweGMyMTAsCTB4ODEwMH0sCS8vIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpCisJezB4YzIxMCwJMHg4MDAwfSwJLy8gcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkKKwl7MHhjMjEwLAkweDAwMDB9LAkvLyByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKQorCXsweDAwMDAsCTB4MDAzMn0sCS8vIHdhaXQgZm9yIDUwbXMgZm9yIGRhdGFwYXRoIHJlc2V0IHRvIGNvbXBsZXRlLiAobWFuZGF0b3J5IHBhdGNoKQorCisJLy8gVHJhbnNjZWl2ZXItc3BlY2lmaWMgTURJTyBQYXRjaGVzOgorCXsweGMwMDMsCTB4MDE4MX0sCS8vIChiaXQgNykgZW5hYmxlIHRoZSBDRFIgaW5jIHNldHRpbmcgaW4gMS5DMDA1IChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNSIGNvZGUpCisJezB4YzAxMCwJMHg0NDhhfSwJLy8gKGJpdCAxNCkgbWFzayBvdXQgaGlnaCBCRVIgaW5wdXQgZnJvbSB0aGUgTE9TIHNpZ25hbCBpbiAxLjAwMEEgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkKKworCS8vIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1pY3JvY29udHJvbGxlciBJbml0aWFsaXphdGlvbjoKKwl7MHhjMDRhLAkweDUyMDB9LAkvLyBhY3RpdmF0ZSBtaWNyb2NvbnRyb2xsZXIgYW5kIHBhdXNlCisJezB4MDAwMCwJMHgwMDMyfSwJLy8gd2FpdCA1MG1zIGZvciBtaWNyb2NvbnRyb2xsZXIgYmVmb3JlIHdyaXRpbmcgaW4gY29kZS4KKworCS8vIGNvZGUgYmxvY2sgc3RhcnRzIGhlcmU6CisJezB4Y2MwMCwJMHgyZmY0fSwJezB4Y2MwMSwJMHgzY2Q0fSwJezB4Y2MwMiwJMHgyMDE1fSwJezB4Y2MwMywJMHgzMTI1fSwKKwl7MHhjYzA0LAkweDY1MjR9LAl7MHhjYzA1LAkweDI3ZmZ9LAl7MHhjYzA2LAkweDMwMGZ9LAl7MHhjYzA3LAkweDJjOGJ9LAorCXsweGNjMDgsCTB4MzAwYn0sCXsweGNjMDksCTB4NDAwOX0sCXsweGNjMGEsCTB4NDAwZX0sCXsweGNjMGIsCTB4MmYxMn0sCisJezB4Y2MwYywJMHgzMDAyfSwJezB4Y2MwZCwJMHgxMDAyfSwJezB4Y2MwZSwJMHgyMTEyfSwJezB4Y2MwZiwJMHgzMDEyfSwKKwl7MHhjYzEwLAkweDEwMDJ9LAl7MHhjYzExLAkweDI1NzJ9LAl7MHhjYzEyLAkweDMwMTJ9LAl7MHhjYzEzLAkweDEwMDJ9LAorCXsweGNjMTQsCTB4ZDAxZX0sCXsweGNjMTUsCTB4Mjc3Mn0sCXsweGNjMTYsCTB4MzAxMn0sCXsweGNjMTcsCTB4MTAwMn0sCisJezB4Y2MxOCwJMHgyMDA0fSwJezB4Y2MxOSwJMHgzYzg0fSwJezB4Y2MxYSwJMHg2NDM2fSwJezB4Y2MxYiwJMHgyMDA3fSwKKwl7MHhjYzFjLAkweDNmODd9LAl7MHhjYzFkLAkweDg2NzZ9LAl7MHhjYzFlLAkweDQwYjd9LAl7MHhjYzFmLAkweGE3NDZ9LAorCXsweGNjMjAsCTB4NDA0N30sCXsweGNjMjEsCTB4NTY3M30sCXsweGNjMjIsCTB4Mjk4Mn0sCXsweGNjMjMsCTB4MzAwMn0sCisJezB4Y2MyNCwJMHgxM2QyfSwJezB4Y2MyNSwJMHg4YmJkfSwJezB4Y2MyNiwJMHgyODAyfSwJezB4Y2MyNywJMHgzMDEyfSwKKwl7MHhjYzI4LAkweDEwMDJ9LAl7MHhjYzI5LAkweDIwMzJ9LAl7MHhjYzJhLAkweDMwMTJ9LAl7MHhjYzJiLAkweDEwMDJ9LAorCXsweGNjMmMsCTB4NWNjM30sCXsweGNjMmQsCTB4MDMxNH0sCXsweGNjMmUsCTB4Mjk0Mn0sCXsweGNjMmYsCTB4MzAwMn0sCisJezB4Y2MzMCwJMHgxMDAyfSwJezB4Y2MzMSwJMHhkMDE5fSwJezB4Y2MzMiwJMHgyZmQyfSwJezB4Y2MzMywJMHgzMDAyfSwKKwl7MHhjYzM0LAkweDEwMDJ9LAl7MHhjYzM1LAkweDJhMDR9LAl7MHhjYzM2LAkweDNjNzR9LAl7MHhjYzM3LAkweDY0MzV9LAorCXsweGNjMzgsCTB4MmZhNH0sCXsweGNjMzksCTB4M2NkNH0sCXsweGNjM2EsCTB4NjYyNH0sCXsweGNjM2IsCTB4NTU2M30sCisJezB4Y2MzYywJMHgyZDQyfSwJezB4Y2MzZCwJMHgzMDAyfSwJezB4Y2MzZSwJMHgxM2QyfSwJezB4Y2MzZiwJMHg0NjRkfSwKKwl7MHhjYzQwLAkweDI4MDJ9LAl7MHhjYzQxLAkweDMwMTJ9LAl7MHhjYzQyLAkweDEwMDJ9LAl7MHhjYzQzLAkweDJmZDJ9LAorCXsweGNjNDQsCTB4MzAwMn0sCXsweGNjNDUsCTB4MTAwMn0sCXsweGNjNDYsCTB4MmZiNH0sCXsweGNjNDcsCTB4M2NkNH0sCisJezB4Y2M0OCwJMHg2NjI0fSwJezB4Y2M0OSwJMHg1NTYzfSwJezB4Y2M0YSwJMHgyZDQyfSwJezB4Y2M0YiwJMHgzMDAyfSwKKwl7MHhjYzRjLAkweDEzZDJ9LAl7MHhjYzRkLAkweDJlNzJ9LAl7MHhjYzRlLAkweDMwMDJ9LAl7MHhjYzRmLAkweDEwMDJ9LAorCXsweGNjNTAsCTB4MmY3Mn0sCXsweGNjNTEsCTB4MzAwMn0sCXsweGNjNTIsCTB4MTAwMn0sCXsweGNjNTMsCTB4MDAwNH0sCisJezB4Y2M1NCwJMHgyOTQyfSwJezB4Y2M1NSwJMHgzMDAyfSwJezB4Y2M1NiwJMHgxMDAyfSwJezB4Y2M1NywJMHgyMDMyfSwKKwl7MHhjYzU4LAkweDMwMTJ9LAl7MHhjYzU5LAkweDEwMDJ9LAl7MHhjYzVhLAkweDVjYzN9LAl7MHhjYzViLAkweDAzMTd9LAorCXsweGNjNWMsCTB4MmYxMn0sCXsweGNjNWQsCTB4MzAwMn0sCXsweGNjNWUsCTB4MTAwMn0sCXsweGNjNWYsCTB4Mjk0Mn0sCisJezB4Y2M2MCwJMHgzMDAyfSwJezB4Y2M2MSwJMHgxMDAyfSwJezB4Y2M2MiwJMHgyMmNkfSwJezB4Y2M2MywJMHgzMDFkfSwKKwl7MHhjYzY0LAkweDI4MDJ9LAl7MHhjYzY1LAkweDMwMTJ9LAl7MHhjYzY2LAkweDEwMDJ9LAl7MHhjYzY3LAkweDIwYjJ9LAorCXsweGNjNjgsCTB4MzAxMn0sCXsweGNjNjksCTB4MTAwMn0sCXsweGNjNmEsCTB4NWFhM30sCXsweGNjNmIsCTB4MmRjMn0sCisJezB4Y2M2YywJMHgzMDAyfSwJezB4Y2M2ZCwJMHgxMzEyfSwJezB4Y2M2ZSwJMHgyZDAyfSwJezB4Y2M2ZiwJMHgzMDAyfSwKKwl7MHhjYzcwLAkweDEwMDJ9LAl7MHhjYzcxLAkweDI4MDd9LAl7MHhjYzcyLAkweDMxYTd9LAl7MHhjYzczLAkweDIwYzR9LAorCXsweGNjNzQsCTB4M2MyNH0sCXsweGNjNzUsCTB4NjcyNH0sCXsweGNjNzYsCTB4MTAwMn0sCXsweGNjNzcsCTB4MjgwN30sCisJezB4Y2M3OCwJMHgzMTg3fSwJezB4Y2M3OSwJMHgyMGM0fSwJezB4Y2M3YSwJMHgzYzI0fSwJezB4Y2M3YiwJMHg2NzI0fSwKKwl7MHhjYzdjLAkweDEwMDJ9LAl7MHhjYzdkLAkweDI1MTR9LAl7MHhjYzdlLAkweDNjNjR9LAl7MHhjYzdmLAkweDY0MzZ9LAorCXsweGNjODAsCTB4ZGZmNH0sCXsweGNjODEsCTB4NjQzNn0sCXsweGNjODIsCTB4MTAwMn0sCXsweGNjODMsCTB4NDBhNH0sCisJezB4Y2M4NCwJMHg2NDNjfSwJezB4Y2M4NSwJMHg0MDE2fSwJezB4Y2M4NiwJMHg4YzZjfSwJezB4Y2M4NywJMHgyYjI0fSwKKwl7MHhjYzg4LAkweDNjMjR9LAl7MHhjYzg5LAkweDY0MzV9LAl7MHhjYzhhLAkweDEwMDJ9LAl7MHhjYzhiLAkweDJiMjR9LAorCXsweGNjOGMsCTB4M2MyNH0sCXsweGNjOGQsCTB4NjQzYX0sCXsweGNjOGUsCTB4NDAyNX0sCXsweGNjOGYsCTB4OGE1YX0sCisJezB4Y2M5MCwJMHgxMDAyfSwJezB4Y2M5MSwJMHgyNmQxfSwJezB4Y2M5MiwJMHgzMDExfSwJezB4Y2M5MywJMHgxMDAxfSwKKwl7MHhjYzk0LAkweGM3YTB9LAl7MHhjYzk1LAkweDAxMDB9LAl7MHhjYzk2LAkweGM1MDJ9LAl7MHhjYzk3LAkweDUzYWN9LAorCXsweGNjOTgsCTB4YzUwM30sCXsweGNjOTksCTB4ZDVkNX0sCXsweGNjOWEsCTB4YzYwMH0sCXsweGNjOWIsCTB4MmE2ZH0sCisJezB4Y2M5YywJMHhjNjAxfSwJezB4Y2M5ZCwJMHgyYTRjfSwJezB4Y2M5ZSwJMHhjNjAyfSwJezB4Y2M5ZiwJMHgwMTExfSwKKwl7MHhjY2EwLAkweGM2MGN9LAl7MHhjY2ExLAkweDU5MDB9LAl7MHhjY2EyLAkweGM3MTB9LAl7MHhjY2EzLAkweDA3MDB9LAorCXsweGNjYTQsCTB4YzcxOH0sCXsweGNjYTUsCTB4MDcwMH0sCXsweGNjYTYsCTB4YzcyMH0sCXsweGNjYTcsCTB4NDcwMH0sCisJezB4Y2NhOCwJMHhjODAxfSwJezB4Y2NhOSwJMHg3ZjUwfSwJezB4Y2NhYSwJMHhjODAyfSwJezB4Y2NhYiwJMHg3NzYwfSwKKwl7MHhjY2FjLAkweGM4MDN9LAl7MHhjY2FkLAkweDdmY2V9LAl7MHhjY2FlLAkweGM4MDR9LAl7MHhjY2FmLAkweDU3MDB9LAorCXsweGNjYjAsCTB4YzgwNX0sCXsweGNjYjEsCTB4NWYxMX0sCXsweGNjYjIsCTB4YzgwNn0sCXsweGNjYjMsCTB4NDc1MX0sCisJezB4Y2NiNCwJMHhjODA3fSwJezB4Y2NiNSwJMHg1N2UxfSwJezB4Y2NiNiwJMHhjODA4fSwJezB4Y2NiNywJMHgyNzAwfSwKKwl7MHhjY2I4LAkweGM4MDl9LAl7MHhjY2I5LAkweDAwMDB9LAl7MHhjY2JhLAkweGM4MjF9LAl7MHhjY2JiLAkweDAwMDJ9LAorCXsweGNjYmMsCTB4YzgyMn0sCXsweGNjYmQsCTB4MDAxNH0sCXsweGNjYmUsCTB4YzgzMn0sCXsweGNjYmYsCTB4MTE4Nn0sCisJezB4Y2NjMCwJMHhjODQ3fSwJezB4Y2NjMSwJMHgxZTAyfSwJezB4Y2NjMiwJMHhjMDEzfSwJezB4Y2NjMywJMHhmMzQxfSwKKwl7MHhjY2M0LAkweGMwMWF9LAl7MHhjY2M1LAkweDA0NDZ9LAl7MHhjY2M2LAkweGMwMjR9LAl7MHhjY2M3LAkweDEwMDB9LAorCXsweGNjYzgsCTB4YzAyNX0sCXsweGNjYzksCTB4MGEwMH0sCXsweGNjY2EsCTB4YzAyNn0sCXsweGNjY2IsCTB4MGMwY30sCisJezB4Y2NjYywJMHhjMDI3fSwJezB4Y2NjZCwJMHgwYzBjfSwJezB4Y2NjZSwJMHhjMDI5fSwJezB4Y2NjZiwJMHgwMGEwfSwKKwl7MHhjY2QwLAkweGMwMzB9LAl7MHhjY2QxLAkweDBhMDB9LAl7MHhjY2QyLAkweGMwM2N9LAl7MHhjY2QzLAkweDAwMWN9LAorCXsweGNjZDQsCTB4YzAwNX0sCXsweGNjZDUsCTB4N2EwNn0sCXsweGNjZDYsCTB4MDAwMH0sCXsweGNjZDcsCTB4MjZkMX0sCisJezB4Y2NkOCwJMHgzMDExfSwJezB4Y2NkOSwJMHgxMDAxfSwJezB4Y2NkYSwJMHhjNjIwfSwJezB4Y2NkYiwJMHgwMDAwfSwKKwl7MHhjY2RjLAkweGM2MjF9LAl7MHhjY2RkLAkweDAwM2Z9LAl7MHhjY2RlLAkweGM2MjJ9LAl7MHhjY2RmLAkweDAwMDB9LAorCXsweGNjZTAsCTB4YzYyM30sCXsweGNjZTEsCTB4MDAwMH0sCXsweGNjZTIsCTB4YzYyNH0sCXsweGNjZTMsCTB4MDAwMH0sCisJezB4Y2NlNCwJMHhjNjI1fSwJezB4Y2NlNSwJMHgwMDAwfSwJezB4Y2NlNiwJMHhjNjI3fSwJezB4Y2NlNywJMHgwMDAwfSwKKwl7MHhjY2U4LAkweGM2Mjh9LAl7MHhjY2U5LAkweDAwMDB9LAl7MHhjY2VhLAkweGM2MmN9LAl7MHhjY2ViLAkweDAwMDB9LAorCXsweGNjZWMsCTB4MDAwMH0sCXsweGNjZWQsCTB4MjgwNn0sCXsweGNjZWUsCTB4M2NiNn0sCXsweGNjZWYsCTB4YzE2MX0sCisJezB4Y2NmMCwJMHg2MTM0fSwJezB4Y2NmMSwJMHg2MTM1fSwJezB4Y2NmMiwJMHg1NDQzfSwJezB4Y2NmMywJMHgwMzAzfSwKKwl7MHhjY2Y0LAkweDY1MjR9LAl7MHhjY2Y1LAkweDAwMGJ9LAl7MHhjY2Y2LAkweDEwMDJ9LAl7MHhjY2Y3LAkweDIxMDR9LAorCXsweGNjZjgsCTB4M2MyNH0sCXsweGNjZjksCTB4MjEwNX0sCXsweGNjZmEsCTB4MzgwNX0sCXsweGNjZmIsCTB4NjUyNH0sCisJezB4Y2NmYywJMHhkZmY0fSwJezB4Y2NmZCwJMHg0MDA1fSwJezB4Y2NmZSwJMHg2NTI0fSwJezB4Y2NmZiwJMHgxMDAyfSwKKwl7MHhjZDAwLAkweDVkZDN9LAl7MHhjZDAxLAkweDAzMDZ9LAl7MHhjZDAyLAkweDJmZjd9LAl7MHhjZDAzLAkweDM4Zjd9LAorCXsweGNkMDQsCTB4NjBiN30sCXsweGNkMDUsCTB4ZGZmZH0sCXsweGNkMDYsCTB4MDAwYX0sCXsweGNkMDcsCTB4MTAwMn0sCisJezB4Y2QwOCwJMHgwMDAwfSwKKwkvLyBlbmQgb2YgY29kZSBibG9jaworCisJLy8gVW5wYXVzZSB0aGUgbWljcm9jb250cm9sbGVyIHRvIHN0YXJ0IHByb2dyYW0KKwl7MHhjYTAwLAkweDAwODB9LAorCXsweGNhMTIsCTB4MDAwMH0sCisJezB4MDAwMCwJMHgwMDBBfSwJLy8gd2FpdCAxMG1zIGp1c3QgdG8gYmUgc2FmZQorCisJLy8gQ29uZmlndXJlIHRoZSBMRUQncworCXsweGMyMTQsCTB4MDA5OX0sCS8vIGNvbmZpZ3VyZSB0aGUgTEVEIGRyaXZlcnMgKGZvciBTYWhhcmEgcmV2IEIpCisJezB4YzIxNiwJMHgwNDAwfSwJLy8gY29uZmlndXJlIHRoZSBvbmUgTEVECisJezB4YzIxNywJMHgwMDAwfSwJLy8gZG9uJ3QgZHJpdmUgdGhlIDJuZCBMRUQgKGlmIGl0IGV4aXN0cykKKworCXsweGZmZmYsCTB4ZmZmZn0JCS8vIHRhYmxlIHRlcm1pbmF0b3IKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjdmMzU2ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDggQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gKgotICogc3hncGh5Y29kZS5oOgotICoKLSAqIFRoaXMgZmlsZSBQSFkgbWljcm9jb2RlIGFuZCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBkYXRhLgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQSFkgTWljcm9jb2RlCi0gKgotICogVGhlIGZvbGxvd2luZyBjb250YWlucyBib3RoIFBIWSBtaWNyb2NvZGUgYW5kIFBIWSByZWdpc3RlcgotICogaW5pdGlhbGl6YXRpb24gZGF0YS4gIEl0IGlzIHNwZWNpZmljIHRvIGJvdGggdGhlIFBIWSBhbmQgdGhlCi0gKiB0eXBlIG9mIHRyYW5zY2VpdmVyLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRG93bmxvYWQgZm9yIEFFTDIwMDVDIFBIWSB3aXRoIFNSL0xSIHRyYW5zY2VpdmVyICgxMEdCQVNFLVNSIG9yIDEwR0JBU0UtTFIpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgUEhZX1VDT0RFIFBoeVVjb2RlW10gPSB7Ci0JLyoKLQkgKiBOT1RFOiAgQW4gYWRkcmVzcyBvZiAwIGlzIGEgc3BlY2lhbCBjYXNlLiAgV2hlbiB0aGUgZG93bmxvYWQgcm91dGluZQotCSAqIHNlZXMgYW4gYWRkcmVzcyBvZiAwLCBpdCBkb2VzIG5vdCB3cml0ZSB0byB0aGUgUEhZLiAgSW5zdGVhZCwgaXQKLQkgKiBkZWxheXMgdGhlIGRvd25sb2FkLiAgVGhlIGxlbmd0aCBvZiB0aGUgZGVsYXkgKGluIG1zKSBpcyBnaXZlbiBpbgotCSAqIHRoZSBkYXRhIGZpZWxkLgotCSAqCi0JICogRGVsYXlzIGFyZSByZXF1aXJlZCBhdCBjZXJ0YWluIHBvaW50cy4KLQkgKi8KLQotCS8qCi0JICogUGxhdGZvcm0tc3BlY2lmaWMgTURJTyBQYXRjaGVzOgotCSAqIChpbmNsdWRlIHBhdGNoZXMgZm9yIDEwRyBSWCBwb2xhcml0eSBmbGlwLCA1ME1oeiBTeW50aCwgZXRjKQotCSAqLwotCS8qIEFkZHIsIERhdGEgKi8KLQl7MHhjMDE3LCAweGZlYjB9LAkvKiBmbGlwIFJYX0xPUyBwb2xhcml0eSAobWFuZGF0b3J5ICovCi0JLyogIHBhdGNoIGZvciBTRlArIGFwcGxpY2F0aW9ucykgKi8KLQl7MHhDMDAxLCAweDA0Mjh9LAkvKiBmbGlwIFJYIHNlcmlhbCBwb2xhcml0eSAqLwotCi0JezB4YzAxMywgMHhmMzQxfSwJLyogaW52ZXJ0IGx4bWl0IGNsb2NrIChtYW5kYXRvcnkgcGF0Y2gpICovCi0JezB4YzIxMCwgMHg4MDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KLQl7MHhjMjEwLCAweDgxMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLwotCXsweGMyMTAsIDB4ODAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCi0JezB4YzIxMCwgMHgwMDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KLQl7MHgwMDAwLCAweDAwMzJ9LAkvKiB3YWl0IGZvciA1MG1zIGZvciBkYXRhcGF0aCByZXNldCB0byAqLwotCS8qIGNvbXBsZXRlLiAobWFuZGF0b3J5IHBhdGNoKSAqLwotCi0JLyogQ29uZmlndXJlIHRoZSBMRUQncyAqLwotCXsweGMyMTQsIDB4MDA5OX0sCS8qIGNvbmZpZ3VyZSB0aGUgTEVEIGRyaXZlcnMgKi8KLQl7MHhjMjE2LCAweDVmNWZ9LAkvKiBjb25maWd1cmUgdGhlIEFjdGl2aXR5IExFRCAqLwotCXsweGMyMTcsIDB4MzNmZn0sCS8qIGNvbmZpZ3VyZSB0aGUgTGluayBMRUQgKi8KLQotCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1ESU8gUGF0Y2hlczogKi8KLQl7MHhjMDEwLCAweDQ0OGF9LAkvKiAoYml0IDE0KSBtYXNrIG91dCBoaWdoIEJFUiBpbnB1dCBmcm9tIHRoZSAqLwotCS8qIExPUyBzaWduYWwgaW4gMS4wMDBBICovCi0JLyogKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkgKi8KLQl7MHhjMDAzLCAweDAxODF9LAkvKiAoYml0IDcpIGVuYWJsZSB0aGUgQ0RSIGluYyBzZXR0aW5nIGluICovCi0JLyogMS5DMDA1IChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNSIGNvZGUpICovCi0KLQkvKiBUcmFuc2NlaXZlci1zcGVjaWZpYyBNaWNyb2NvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb246ICovCi0JezB4YzA0YSwgMHg1MjAwfSwJLyogYWN0aXZhdGUgbWljcm9jb250cm9sbGVyIGFuZCBwYXVzZSAqLwotCXsweDAwMDAsIDB4MDAzMn0sCS8qIHdhaXQgNTBtcyBmb3IgbWljcm9jb250cm9sbGVyIGJlZm9yZSAqLwotCS8qIHdyaXRpbmcgaW4gY29kZS4gKi8KLQotCS8qIGNvZGUgYmxvY2sgc3RhcnRzIGhlcmU6ICovCi0JezB4Y2MwMCwgMHgyMDA5fSwKLQl7MHhjYzAxLCAweDMwMDl9LAotCXsweGNjMDIsIDB4MjdmZn0sCi0JezB4Y2MwMywgMHgzMDBmfSwKLQl7MHhjYzA0LCAweDIwMGN9LAotCXsweGNjMDUsIDB4MzAwY30sCi0JezB4Y2MwNiwgMHgyMGM0fSwKLQl7MHhjYzA3LCAweDNjMDR9LAotCXsweGNjMDgsIDB4NjQzN30sCi0JezB4Y2MwOSwgMHgyMGM0fSwKLQl7MHhjYzBhLCAweDNjMDR9LAotCXsweGNjMGIsIDB4NjQzN30sCi0JezB4Y2MwYywgMHgyNWM0fSwKLQl7MHhjYzBkLCAweDNjNTR9LAotCXsweGNjMGUsIDB4NjcyNH0sCi0JezB4Y2MwZiwgMHgyNWM0fSwKLQl7MHhjYzEwLCAweDNjNTR9LAotCXsweGNjMTEsIDB4NjcyNH0sCi0JezB4Y2MxMiwgMHgyMDQyfSwKLQl7MHhjYzEzLCAweDMwMTJ9LAotCXsweGNjMTQsIDB4MTAwMn0sCi0JezB4Y2MxNSwgMHgyNDgyfSwKLQl7MHhjYzE2LCAweDMwMTJ9LAotCXsweGNjMTcsIDB4MTAwMn0sCi0JezB4Y2MxOCwgMHgyYTMyfSwKLQl7MHhjYzE5LCAweDMwMDJ9LAotCXsweGNjMWEsIDB4MTAwMn0sCi0JezB4Y2MxYiwgMHgyMDBkfSwKLQl7MHhjYzFjLCAweDMwNGR9LAotCXsweGNjMWQsIDB4Mjg2Mn0sCi0JezB4Y2MxZSwgMHgzMDEyfSwKLQl7MHhjYzFmLCAweDEwMDJ9LAotCXsweGNjMjAsIDB4Mjk4Mn0sCi0JezB4Y2MyMSwgMHgzMDAyfSwKLQl7MHhjYzIyLCAweDEwMDJ9LAotCXsweGNjMjMsIDB4NjI4Zn0sCi0JezB4Y2MyNCwgMHgyMGE0fSwKLQl7MHhjYzI1LCAweDMwMDR9LAotCXsweGNjMjYsIDB4NjQzOH0sCi0JezB4Y2MyNywgMHgyMGE0fSwKLQl7MHhjYzI4LCAweDMwMDR9LAotCXsweGNjMjksIDB4NjQzOH0sCi0JezB4Y2MyYSwgMHgyMDE1fSwKLQl7MHhjYzJiLCAweDMwMDV9LAotCXsweGNjMmMsIDB4NTg1M30sCi0JezB4Y2MyZCwgMHgyYmQyfSwKLQl7MHhjYzJlLCAweDMwMDJ9LAotCXsweGNjMmYsIDB4MTM0Mn0sCi0JezB4Y2MzMCwgMHgyMDBjfSwKLQl7MHhjYzMxLCAweDMwMGN9LAotCXsweGNjMzIsIDB4MmZmN30sCi0JezB4Y2MzMywgMHgzMGY3fSwKLQl7MHhjYzM0LCAweDIwYzR9LAotCXsweGNjMzUsIDB4M2MwNH0sCi0JezB4Y2MzNiwgMHg2NzI0fSwKLQl7MHhjYzM3LCAweDIwYzR9LAotCXsweGNjMzgsIDB4M2MwNH0sCi0JezB4Y2MzOSwgMHg2NzI0fSwKLQl7MHhjYzNhLCAweDJkMzJ9LAotCXsweGNjM2IsIDB4MzAwMn0sCi0JezB4Y2MzYywgMHgxMDAyfSwKLQl7MHhjYzNkLCAweDIwMDh9LAotCXsweGNjM2UsIDB4MzAwOH0sCi0JezB4Y2MzZiwgMHg1YzgzfSwKLQl7MHhjYzQwLCAweDJkNTJ9LAotCXsweGNjNDEsIDB4MzAwMn0sCi0JezB4Y2M0MiwgMHgxMzUyfSwKLQl7MHhjYzQzLCAweDIwMDh9LAotCXsweGNjNDQsIDB4MzAwOH0sCi0JezB4Y2M0NSwgMHg1YzgzfSwKLQl7MHhjYzQ2LCAweDJkMzJ9LAotCXsweGNjNDcsIDB4MzAwMn0sCi0JezB4Y2M0OCwgMHgxMzUyfSwKLQl7MHhjYzQ5LCAweDIwMWN9LAotCXsweGNjNGEsIDB4MzAwY30sCi0JezB4Y2M0YiwgMHgyMDBkfSwKLQl7MHhjYzRjLCAweDMxMGR9LAotCXsweGNjNGQsIDB4Mjg2Mn0sCi0JezB4Y2M0ZSwgMHgzMDEyfSwKLQl7MHhjYzRmLCAweDEwMDJ9LAotCXsweGNjNTAsIDB4MmVkMn0sCi0JezB4Y2M1MSwgMHgzMDAyfSwKLQl7MHhjYzUyLCAweDEzNDJ9LAotCXsweGNjNTMsIDB4NmY3Mn0sCi0JezB4Y2M1NCwgMHgxMDAyfSwKLQl7MHhjYzU1LCAweDYyOGZ9LAotCXsweGNjNTYsIDB4MjUxNH0sCi0JezB4Y2M1NywgMHgzYzY0fSwKLQl7MHhjYzU4LCAweDY0MzZ9LAotCXsweGNjNTksIDB4MjUxNH0sCi0JezB4Y2M1YSwgMHgzYzY0fSwKLQl7MHhjYzViLCAweDY0MzZ9LAotCXsweGNjNWMsIDB4MmZhNH0sCi0JezB4Y2M1ZCwgMHgzY2Q0fSwKLQl7MHhjYzVlLCAweDY2MjR9LAotCXsweGNjNWYsIDB4MmZhNH0sCi0JezB4Y2M2MCwgMHgzY2Q0fSwKLQl7MHhjYzYxLCAweDY2MjR9LAotCXsweGNjNjIsIDB4MmY0NX0sCi0JezB4Y2M2MywgMHgzMDE1fSwKLQl7MHhjYzY0LCAweDU2NTN9LAotCXsweGNjNjUsIDB4MmViMn0sCi0JezB4Y2M2NiwgMHgzMDAyfSwKLQl7MHhjYzY3LCAweDEzZDJ9LAotCXsweGNjNjgsIDB4MmVkMn0sCi0JezB4Y2M2OSwgMHgzMDAyfSwKLQl7MHhjYzZhLCAweDEwMDJ9LAotCXsweGNjNmIsIDB4NmY3Mn0sCi0JezB4Y2M2YywgMHgxMDAyfSwKLQl7MHhjYzZkLCAweDYyOGZ9LAotCXsweGNjNmUsIDB4MjYwMn0sCi0JezB4Y2M2ZiwgMHgzMDEyfSwKLQl7MHhjYzcwLCAweDEwMDJ9LAotCXsweGNjNzEsIDB4MjAwZH0sCi0JezB4Y2M3MiwgMHgzMjBkfSwKLQl7MHhjYzczLCAweDI4NjJ9LAotCXsweGNjNzQsIDB4MzAxMn0sCi0JezB4Y2M3NSwgMHgxMDAyfSwKLQl7MHhjYzc2LCAweDI1YzR9LAotCXsweGNjNzcsIDB4M2M1NH0sCi0JezB4Y2M3OCwgMHg2NDM3fSwKLQl7MHhjYzc5LCAweDI1YzR9LAotCXsweGNjN2EsIDB4M2M1NH0sCi0JezB4Y2M3YiwgMHg2NDM3fSwKLQl7MHhjYzdjLCAweDIwYzR9LAotCXsweGNjN2QsIDB4M2MwNH0sCi0JezB4Y2M3ZSwgMHg2NzI0fSwKLQl7MHhjYzdmLCAweDIwYzR9LAotCXsweGNjODAsIDB4M2MwNH0sCi0JezB4Y2M4MSwgMHg2NzI0fSwKLQl7MHhjYzgyLCAweDZmNzJ9LAotCXsweGNjODMsIDB4MTAwMn0sCi0JezB4Y2M4NCwgMHg2MjhmfSwKLQl7MHhjYzg1LCAweDI2ZjJ9LAotCXsweGNjODYsIDB4MzAxMn0sCi0JezB4Y2M4NywgMHgxMDAyfSwKLQl7MHhjYzg4LCAweGM1MDN9LAotCXsweGNjODksIDB4ZDVkNX0sCi0JezB4Y2M4YSwgMHhjNjAwfSwKLQl7MHhjYzhiLCAweDJhNmR9LAotCXsweGNjOGMsIDB4YzYwMX0sCi0JezB4Y2M4ZCwgMHgyYTRjfSwKLQl7MHhjYzhlLCAweGM2MDJ9LAotCXsweGNjOGYsIDB4MDExMX0sCi0JezB4Y2M5MCwgMHhjNjBjfSwKLQl7MHhjYzkxLCAweDU5MDB9LAotCXsweGNjOTIsIDB4YzcxMH0sCi0JezB4Y2M5MywgMHgwNzAwfSwKLQl7MHhjYzk0LCAweGM3MTh9LAotCXsweGNjOTUsIDB4MDcwMH0sCi0JezB4Y2M5NiwgMHhjNzIwfSwKLQl7MHhjYzk3LCAweDQ3MDB9LAotCXsweGNjOTgsIDB4YzgwMX0sCi0JezB4Y2M5OSwgMHg3ZjUwfSwKLQl7MHhjYzlhLCAweGM4MDJ9LAotCXsweGNjOWIsIDB4Nzc2MH0sCi0JezB4Y2M5YywgMHhjODAzfSwKLQl7MHhjYzlkLCAweDdmY2V9LAotCXsweGNjOWUsIDB4YzgwNH0sCi0JezB4Y2M5ZiwgMHg1NzAwfSwKLQl7MHhjY2EwLCAweGM4MDV9LAotCXsweGNjYTEsIDB4NWYxMX0sCi0JezB4Y2NhMiwgMHhjODA2fSwKLQl7MHhjY2EzLCAweDQ3NTF9LAotCXsweGNjYTQsIDB4YzgwN30sCi0JezB4Y2NhNSwgMHg1N2UxfSwKLQl7MHhjY2E2LCAweGM4MDh9LAotCXsweGNjYTcsIDB4MjcwMH0sCi0JezB4Y2NhOCwgMHhjODA5fSwKLQl7MHhjY2E5LCAweDAwMDB9LAotCXsweGNjYWEsIDB4YzgyMX0sCi0JezB4Y2NhYiwgMHgwMDAyfSwKLQl7MHhjY2FjLCAweGM4MjJ9LAotCXsweGNjYWQsIDB4MDAxNH0sCi0JezB4Y2NhZSwgMHhjODMyfSwKLQl7MHhjY2FmLCAweDExODZ9LAotCXsweGNjYjAsIDB4Yzg0N30sCi0JezB4Y2NiMSwgMHgxZTAyfSwKLQl7MHhjY2IyLCAweGMwMTN9LAotCXsweGNjYjMsIDB4ZjM0MX0sCi0JezB4Y2NiNCwgMHhjMDFhfSwKLQl7MHhjY2I1LCAweDA0NDZ9LAotCXsweGNjYjYsIDB4YzAyNH0sCi0JezB4Y2NiNywgMHgxMDAwfSwKLQl7MHhjY2I4LCAweGMwMjV9LAotCXsweGNjYjksIDB4MGEwMH0sCi0JezB4Y2NiYSwgMHhjMDI2fSwKLQl7MHhjY2JiLCAweDBjMGN9LAotCXsweGNjYmMsIDB4YzAyN30sCi0JezB4Y2NiZCwgMHgwYzBjfSwKLQl7MHhjY2JlLCAweGMwMjl9LAotCXsweGNjYmYsIDB4MDBhMH0sCi0JezB4Y2NjMCwgMHhjMDMwfSwKLQl7MHhjY2MxLCAweDBhMDB9LAotCXsweGNjYzIsIDB4YzAzY30sCi0JezB4Y2NjMywgMHgwMDFjfSwKLQl7MHhjY2M0LCAweGMwMDV9LAotCXsweGNjYzUsIDB4N2EwNn0sCi0JezB4Y2NjNiwgMHgwMDAwfSwKLQl7MHhjY2M3LCAweDAwMDB9LAotCXsweGNjYzgsIDB4NjI4Zn0sCi0JezB4Y2NjOSwgMHgyNmYyfSwKLQl7MHhjY2NhLCAweDMwMTJ9LAotCXsweGNjY2IsIDB4MTAwMn0sCi0JezB4Y2NjYywgMHhjNjIwfSwKLQl7MHhjY2NkLCAweDAwMDB9LAotCXsweGNjY2UsIDB4YzYyMX0sCi0JezB4Y2NjZiwgMHgwMDNmfSwKLQl7MHhjY2QwLCAweGM2MjJ9LAotCXsweGNjZDEsIDB4MDAwMH0sCi0JezB4Y2NkMiwgMHhjNjIzfSwKLQl7MHhjY2QzLCAweDAwMDB9LAotCXsweGNjZDQsIDB4YzYyNH0sCi0JezB4Y2NkNSwgMHgwMDAwfSwKLQl7MHhjY2Q2LCAweGM2MjV9LAotCXsweGNjZDcsIDB4MDAwMH0sCi0JezB4Y2NkOCwgMHhjNjI3fSwKLQl7MHhjY2Q5LCAweDAwMDB9LAotCXsweGNjZGEsIDB4YzYyOH0sCi0JezB4Y2NkYiwgMHgwMDAwfSwKLQl7MHhjY2RjLCAweGM2MmN9LAotCXsweGNjZGQsIDB4MDAwMH0sCi0JezB4Y2NkZSwgMHgwMDAwfSwKLQl7MHhjY2RmLCAweDAwMDB9LAotCXsweGNjZTAsIDB4NjI4Zn0sCi0JezB4Y2NlMSwgMHhkMDE5fSwKLQl7MHhjY2UyLCAweDI2ZjJ9LAotCXsweGNjZTMsIDB4MzAxMn0sCi0JezB4Y2NlNCwgMHgxMDAyfSwKLQl7MHhjY2U1LCAweGMyMTB9LAotCXsweGNjZTYsIDB4ODAwMH0sCi0JezB4Y2NlNywgMHhjMjEwfSwKLQl7MHhjY2U4LCAweDgwMTB9LAotCXsweGNjZTksIDB4YzIxMH0sCi0JezB4Y2NlYSwgMHg4MDAwfSwKLQl7MHhjY2ViLCAweGMyMTB9LAotCXsweGNjZWMsIDB4MDAwMH0sCi0JezB4Y2NlZCwgMHgwMDAwfSwKLQl7MHhjY2VlLCAweDAwMDB9LAotCXsweGNjZWYsIDB4ODIyMX0sCi0JezB4Y2NmMCwgMHgyNzUyfSwKLQl7MHhjY2YxLCAweDMwMTJ9LAotCXsweGNjZjIsIDB4MTAwMn0sCi0JezB4Y2NmMywgMHg2ZjcyfSwKLQl7MHhjY2Y0LCAweDEwMDJ9LAotCXsweGNjZjUsIDB4MjgwNn0sCi0JezB4Y2NmNiwgMHgzMDA2fSwKLQl7MHhjY2Y3LCAweDIwMDd9LAotCXsweGNjZjgsIDB4M2NjN30sCi0JezB4Y2NmOSwgMHhlMTYxfSwKLQl7MHhjY2ZhLCAweGMxNzF9LAotCXsweGNjZmIsIDB4NjEzNH0sCi0JezB4Y2NmYywgMHg2MTM1fSwKLQl7MHhjY2ZkLCAweDU0NTN9LAotCXsweGNjZmUsIDB4Mjg1OH0sCi0JezB4Y2NmZiwgMHgzMDE4fSwKLQl7MHhjZDAwLCAweDEzNDh9LAotCXsweGNkMDEsIDB4NjUyNH0sCi0JezB4Y2QwMiwgMHgyN2I4fSwKLQl7MHhjZDAzLCAweDMwMTh9LAotCXsweGNkMDQsIDB4MTAwOH0sCi0JezB4Y2QwNSwgMHgxMDAyfSwKLQl7MHhjZDA2LCAweDYyOGZ9LAotCXsweGNkMDcsIDB4NWRkM30sCi0JezB4Y2QwOCwgMHgyOTA2fSwKLQl7MHhjZDA5LCAweDMwMTZ9LAotCXsweGNkMGEsIDB4MTMwNn0sCi0JezB4Y2QwYiwgMHgyZmY3fSwKLQl7MHhjZDBjLCAweDMwZjd9LAotCXsweGNkMGQsIDB4NjBiN30sCi0JezB4Y2QwZSwgMHhkZmZkfSwKLQl7MHhjZDBmLCAweDAwMDh9LAotCXsweGNkMTAsIDB4NmY3Mn0sCi0JezB4Y2QxMSwgMHgxMDAyfSwKLQl7MHhjZDEyLCAweDAwMDB9LAotCXsweGNkZmYsIDB4MGEwMX0sCi0JLyogZW5kIG9mIGNvZGUgYmxvY2sgKi8KLQotCS8qIFVucGF1c2UgdGhlIG1pY3JvY29udHJvbGxlciB0byBzdGFydCBwcm9ncmFtICovCi0JezB4Y2EwMCwgMHgwMDgwfSwKLQl7MHhjYTEyLCAweDAwMDB9LAotCXsweDAwMDAsIDB4MDAwQX0sCS8qIHdhaXQgMTBtcyBqdXN0IHRvIGJlIHNhZmUgKi8KLQl7MHhmZmZmLCAweGZmZmZ9CS8qIHRhYmxlIHRlcm1pbmF0b3IgKi8KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwYzZlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIFVTQl9TRVJJQUxfQVRFTjIwMTEKKwl0cmlzdGF0ZSAiQVRFTiAyMDExIFVTQiB0byBzZXJpYWwgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBBVEVOIDIwMTEgZHVhbCBwb3J0IFVTQiB0byBzZXJpYWwKKwkgIGFkYXB0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGF0ZW4yMDExLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljMThkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQVRFTjIwMTEpCSs9IGF0ZW4yMDExLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg5YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9UT0RPCkBAIC0wLDAgKzEsNyBAQAorVE9ETzoKKwktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKKwktIHJlbW92ZSBkZWFkIGFuZCB1c2VsZXNzIGNvZGUgKGF1ZGl0aW5nIHRoZSB0dHkgaW9jdGxzIHRvCisJICB2ZXJpZnkgdGhhdCB0aGV5IHJlYWxseSBhcmUgY29ycmVjdCBhbmQgbmVlZGVkLikKKworUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kCitSdXNzZWxsIExhbmcgPGdzdmlld0BnaG9zdGd1bS5jb20uYXU+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9hdGVuMjAxMS5jIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9hdGVuMjAxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjcwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL2F0ZW4yMDExLmMKQEAgLTAsMCArMSwyNDUyIEBACisvKgorICogQXRlbiAyMDExIFVTQiBzZXJpYWwgZHJpdmVyIGZvciA0IHBvcnQgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBJbnNpZGUgT3V0IE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5vdmVsbCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorCisKKyNkZWZpbmUgWkxQX1JFRzEJCTB4M0EJLyogWmVyb19GbGFnX1JlZzEgNTggKi8KKyNkZWZpbmUgWkxQX1JFRzIJCTB4M0IJLyogWmVyb19GbGFnX1JlZzIgNTkgKi8KKyNkZWZpbmUgWkxQX1JFRzMJCTB4M0MJLyogWmVyb19GbGFnX1JlZzMgNjAgKi8KKyNkZWZpbmUgWkxQX1JFRzQJCTB4M0QJLyogWmVyb19GbGFnX1JlZzQgNjEgKi8KKyNkZWZpbmUgWkxQX1JFRzUJCTB4M0UJLyogWmVyb19GbGFnX1JlZzUgNjIgKi8KKworLyogSW50ZXJydXB0IFJvdGludWUgRGVmaW5lcwkqLworI2RlZmluZSBTRVJJQUxfSUlSX1JMUwkJMHgwNgorI2RlZmluZSBTRVJJQUxfSUlSX1JEQQkJMHgwNAorI2RlZmluZSBTRVJJQUxfSUlSX0NUSQkJMHgwYworI2RlZmluZSBTRVJJQUxfSUlSX1RIUgkJMHgwMgorI2RlZmluZSBTRVJJQUxfSUlSX01TCQkweDAwCisKKy8qIEVtdWxhdGlvbiBvZiB0aGUgYml0IG1hc2sgb24gdGhlIExJTkUgU1RBVFVTIFJFR0lTVEVSLiAgKi8KKyNkZWZpbmUgU0VSSUFMX0xTUl9EUgkJMHgwMDAxCisjZGVmaW5lIFNFUklBTF9MU1JfT0UJCTB4MDAwMgorI2RlZmluZSBTRVJJQUxfTFNSX1BFCQkweDAwMDQKKyNkZWZpbmUgU0VSSUFMX0xTUl9GRQkJMHgwMDA4CisjZGVmaW5lIFNFUklBTF9MU1JfQkkJCTB4MDAxMAorI2RlZmluZSBTRVJJQUxfTFNSX1RIUkUJCTB4MDAyMAorI2RlZmluZSBTRVJJQUxfTFNSX1RFTVQJCTB4MDA0MAorI2RlZmluZSBTRVJJQUxfTFNSX0ZJRk9FUlIJMHgwMDgwCisKKy8qIE1TUiBiaXQgZGVmaW5lcyhwbGFjZSBob2xkZXJzKSAqLworI2RlZmluZSBBVEVOX01TUl9ERUxUQV9DVFMJMHgxMAorI2RlZmluZSBBVEVOX01TUl9ERUxUQV9EU1IJMHgyMAorI2RlZmluZSBBVEVOX01TUl9ERUxUQV9SSQkweDQwCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX0NECTB4ODAKKworLyogU2VyaWFsIFBvcnQgcmVnaXN0ZXIgQWRkcmVzcyAqLworI2RlZmluZSBSRUNFSVZFX0JVRkZFUl9SRUdJU1RFUgkJKChfX3UxNikoMHgwMCkpCisjZGVmaW5lIFRSQU5TTUlUX0hPTERJTkdfUkVHSVNURVIJKChfX3UxNikoMHgwMCkpCisjZGVmaW5lIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIJKChfX3UxNikoMHgwMSkpCisjZGVmaW5lIElOVEVSUlVQVF9JREVOVF9SRUdJU1RFUgkoKF9fdTE2KSgweDAyKSkKKyNkZWZpbmUgRklGT19DT05UUk9MX1JFR0lTVEVSCQkoKF9fdTE2KSgweDAyKSkKKyNkZWZpbmUgTElORV9DT05UUk9MX1JFR0lTVEVSCQkoKF9fdTE2KSgweDAzKSkKKyNkZWZpbmUgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUgkJKChfX3UxNikoMHgwNCkpCisjZGVmaW5lIExJTkVfU1RBVFVTX1JFR0lTVEVSCQkoKF9fdTE2KSgweDA1KSkKKyNkZWZpbmUgTU9ERU1fU1RBVFVTX1JFR0lTVEVSCQkoKF9fdTE2KSgweDA2KSkKKyNkZWZpbmUgU0NSQVRDSF9QQURfUkVHSVNURVIJCSgoX191MTYpKDB4MDcpKQorI2RlZmluZSBESVZJU09SX0xBVENIX0xTQgkJKChfX3UxNikoMHgwMCkpCisjZGVmaW5lIERJVklTT1JfTEFUQ0hfTVNCCQkoKF9fdTE2KSgweDAxKSkKKworI2RlZmluZSBTUDFfUkVHSVNURVIJCQkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgQ09OVFJPTDFfUkVHSVNURVIJCSgoX191MTYpKDB4MDEpKQorI2RlZmluZSBDTEtfTVVMVElfUkVHSVNURVIJCSgoX191MTYpKDB4MDIpKQorI2RlZmluZSBDTEtfU1RBUlRfVkFMVUVfUkVHSVNURVIJKChfX3UxNikoMHgwMykpCisjZGVmaW5lIERDUjFfUkVHSVNURVIJCQkoKF9fdTE2KSgweDA0KSkKKyNkZWZpbmUgR1BJT19SRUdJU1RFUgkJCSgoX191MTYpKDB4MDcpKQorCisjZGVmaW5lIFNFUklBTF9MQ1JfRExBQgkJCSgoX191MTYpKDB4MDA4MCkpCisKKy8qCisgKiBVUkIgUE9PTCByZWxhdGVkIGRlZmluZXMKKyAqLworI2RlZmluZSBOVU1fVVJCUwkJCTE2CS8qIFVSQiBDb3VudCAqLworI2RlZmluZSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUJMzIJLyogVVJCIFNpemUgICovCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTAkJMHgwNTU3CisjZGVmaW5lIEFURU5JTlRMX0RFVklDRV9JRF8yMDExCQkweDIwMTEKKyNkZWZpbmUgQVRFTklOVExfREVWSUNFX0lEXzc4MjAJCTB4NzgyMAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEXzIwMTEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF83ODIwKSB9LAorCXsgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgbG9jYWwgcG9ydCBpbmZvcm1hdGlvbiAqLworc3RydWN0IEFURU5JTlRMX3BvcnQgeworCWludAkJcG9ydF9udW07ICAgICAgICAgIC8qQWN0dWFsIHBvcnQgbnVtYmVyIGluIHRoZSBkZXZpY2UoMSwyLGV0YykqLworCV9fdTgJCWJ1bGtfb3V0X2VuZHBvaW50OyAgIAkvKiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgaGFuZGxlICovCisJdW5zaWduZWQgY2hhcgkqYnVsa19vdXRfYnVmZmVyOyAgICAgCS8qIGJ1ZmZlciB1c2VkIGZvciB0aGUgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiCSp3cml0ZV91cmI7CSAgICAgCS8qIHdyaXRlIFVSQiBmb3IgdGhpcyBwb3J0ICovCisJX191OAkJYnVsa19pbl9lbmRwb2ludDsJLyogdGhlIGJ1bGsgaW4gZW5kcG9pbnQgaGFuZGxlICovCisJdW5zaWduZWQgY2hhcgkqYnVsa19pbl9idWZmZXI7CS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIJKnJlYWRfdXJiOwkgICAgIAkvKiByZWFkIFVSQiBmb3IgdGhpcyBwb3J0ICovCisJX191OAkJc2hhZG93TENSOwkJLyogbGFzdCBMQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4CQlzaGFkb3dNQ1I7CQkvKiBsYXN0IE1DUiB2YWx1ZSByZWNlaXZlZCAqLworCWNoYXIJCW9wZW47CisJY2hhcgkJY2hhc2VSZXNwb25zZVBlbmRpbmc7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jaGFzZTsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBjaGFzZSB0byBmaW5pc2ggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NvbW1hbmQ7CQkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgY29tbWFuZCB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgYXN5bmNfaWNvdW50CWljb3VudDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OwkJCS8qIGxvb3AgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBvYmplY3QgKi8KKwkvKk9mZnNldHMqLworCV9fdTgJCVNwUmVnT2Zmc2V0OworCV9fdTgJCUNvbnRyb2xSZWdPZmZzZXQ7CisJX191OAkJRGNyUmVnT2Zmc2V0OworCS8qIGZvciBwcm9jZXNzaW5nIGNvbnRyb2wgVVJCUyBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLworCXN0cnVjdCB1cmIgCSpjb250cm9sX3VyYjsKKwljaGFyCQkqY3RybF9idWY7CisJaW50CQlNc3JMc3I7CisKKwlzdHJ1Y3QgdXJiCSp3cml0ZV91cmJfcG9vbFtOVU1fVVJCU107CisJLyogd2UgcGFzcyBhIHBvaW50ZXIgdG8gdGhpcyBhcyB0aGUgYXJndWVtZW50IHNlbnQgdG8gY3lwcmVzc19zZXRfdGVybWlvcyBvbGRfdGVybWlvcyAqLworCXN0cnVjdCBrdGVybWlvcwl0bXBfdGVybWlvczsgICAgICAgIC8qIHN0b3JlcyB0aGUgb2xkIHRlcm1pb3Mgc2V0dGluZ3MgKi8KKwlzcGlubG9ja190IAlsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBwcml2YXRlIGxvY2sgKi8KK307CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBzZXJpYWwgZGV2aWNlIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgQVRFTklOVExfc2VyaWFsIHsKKwlfX3U4CQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CQkvKiB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGhhbmRsZSAqLworCXVuc2lnbmVkIGNoYXIJKmludGVycnVwdF9pbl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHdlIHVzZSBmb3IgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIJKmludGVycnVwdF9yZWFkX3VyYjsJLyogb3VyIGludGVycnVwdCB1cmIgKi8KKwlfX3U4CQlidWxrX2luX2VuZHBvaW50OwkvKiB0aGUgYnVsayBpbiBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyCSpidWxrX2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIgCSpyZWFkX3VyYjsJCS8qIG91ciBidWxrIHJlYWQgdXJiICovCisJX191OAkJYnVsa19vdXRfZW5kcG9pbnQ7CS8qIHRoZSBidWxrIG91dCBlbmRwb2ludCBoYW5kbGUgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsOwkvKiBsb29wIGJhY2sgdG8gdGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0ICovCisJaW50CUFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0czsgCS8qIHRoaXMgc2F5cyB0aGUgbnVtYmVyIG9mIHBvcnRzIGluIHRoZSBkZXZpY2UgKi8KKwkvKiBJbmRpY2F0ZXMgYWJvdXQgdGhlIG5vLm9mIG9wZW5lZCBwb3J0cyBvZiBhbiBpbmRpdmlkdWFsIFVTQi1zZXJpYWwgYWRhcGF0ZXIuICovCisJdW5zaWduZWQgaW50CU5vT2ZPcGVuUG9ydHM7CisJLyogYSBmbGFnIGZvciBTdGF0dXMgZW5kcG9pbnQgcG9sbGluZyAqLworCXVuc2lnbmVkIGNoYXIJc3RhdHVzX3BvbGxpbmdfc3RhcnRlZDsKK307CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgQVRFTjIwMTFfY2hhbmdlX3BvcnRfc2V0dGluZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJICBzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydCwKKwkJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJpdCBkZWZpbml0aW9ucyBmb3IgZWFjaCByZWdpc3RlciAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTENSX0JJVFNfNQkJMHgwMAkvKiA1IGJpdHMvY2hhciAqLworI2RlZmluZSBMQ1JfQklUU182CQkweDAxCS8qIDYgYml0cy9jaGFyICovCisjZGVmaW5lIExDUl9CSVRTXzcJCTB4MDIJLyogNyBiaXRzL2NoYXIgKi8KKyNkZWZpbmUgTENSX0JJVFNfOAkJMHgwMwkvKiA4IGJpdHMvY2hhciAqLworI2RlZmluZSBMQ1JfQklUU19NQVNLCQkweDAzCS8qIE1hc2sgZm9yIGJpdHMvY2hhciBmaWVsZCAqLworCisjZGVmaW5lIExDUl9TVE9QXzEJCTB4MDAJLyogMSBzdG9wIGJpdCAqLworI2RlZmluZSBMQ1JfU1RPUF8xXzUJCTB4MDQJLyogMS41IHN0b3AgYml0cyAoaWYgNSAgIGJpdHMvY2hhcikgKi8KKyNkZWZpbmUgTENSX1NUT1BfMgkJMHgwNAkvKiAyIHN0b3AgYml0cyAgIChpZiA2LTggYml0cy9jaGFyKSAqLworI2RlZmluZSBMQ1JfU1RPUF9NQVNLCQkweDA0CS8qIE1hc2sgZm9yIHN0b3AgYml0cyBmaWVsZCAqLworCisjZGVmaW5lIExDUl9QQVJfTk9ORQkJMHgwMAkvKiBObyBwYXJpdHkgKi8KKyNkZWZpbmUgTENSX1BBUl9PREQJCTB4MDgJLyogT2RkIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX0VWRU4JCTB4MTgJLyogRXZlbiBwYXJpdHkgKi8KKyNkZWZpbmUgTENSX1BBUl9NQVJLCQkweDI4CS8qIEZvcmNlIHBhcml0eSBiaXQgdG8gMSAqLworI2RlZmluZSBMQ1JfUEFSX1NQQUNFCQkweDM4CS8qIEZvcmNlIHBhcml0eSBiaXQgdG8gMCAqLworI2RlZmluZSBMQ1JfUEFSX01BU0sJCTB4MzgJLyogTWFzayBmb3IgcGFyaXR5IGZpZWxkICovCisKKyNkZWZpbmUgTENSX1NFVF9CUkVBSwkJMHg0MAkvKiBTZXQgQnJlYWsgY29uZGl0aW9uICovCisjZGVmaW5lIExDUl9ETF9FTkFCTEUJCTB4ODAJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisKKyNkZWZpbmUgTUNSX0RUUgkJCTB4MDEJLyogQXNzZXJ0IERUUiAqLworI2RlZmluZSBNQ1JfUlRTCQkJMHgwMgkvKiBBc3NlcnQgUlRTICovCisjZGVmaW5lIE1DUl9PVVQxCQkweDA0CS8qIExvb3BiYWNrIG9ubHk6IFNldHMgc3RhdGUgb2YgUkkgKi8KKyNkZWZpbmUgTUNSX01BU1RFUl9JRQkJMHgwOAkvKiBFbmFibGUgaW50ZXJydXB0IG91dHB1dHMgKi8KKyNkZWZpbmUgTUNSX0xPT1BCQUNLCQkweDEwCS8qIFNldCBpbnRlcm5hbCAoZGlnaXRhbCkgbG9vcGJhY2sgbW9kZSAqLworI2RlZmluZSBNQ1JfWE9OX0FOWQkJMHgyMAkvKiBFbmFibGUgYW55IGNoYXIgdG8gZXhpdCBYT0ZGIG1vZGUgKi8KKworI2RlZmluZSBBVEVOMjAxMV9NU1JfQ1RTCTB4MTAJLyogQ3VycmVudCBzdGF0ZSBvZiBDVFMgKi8KKyNkZWZpbmUgQVRFTjIwMTFfTVNSX0RTUgkweDIwCS8qIEN1cnJlbnQgc3RhdGUgb2YgRFNSICovCisjZGVmaW5lIEFURU4yMDExX01TUl9SSQkJMHg0MAkvKiBDdXJyZW50IHN0YXRlIG9mIFJJICovCisjZGVmaW5lIEFURU4yMDExX01TUl9DRAkJMHg4MAkvKiBDdXJyZW50IHN0YXRlIG9mIENEICovCisKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMi4wIgorI2RlZmluZSBEUklWRVJfREVTQyAiQVRFTklOVEwgMjAxMSBVU0IgU2VyaWFsIEFkYXB0ZXIiCisKKy8qCisgKiBEZWZpbmVzIHVzZWQgZm9yIHNlbmRpbmcgY29tbWFuZHMgdG8gcG9ydAorICovCisKKyNkZWZpbmUgQVRFTl9XRFJfVElNRU9VVAkoNTApCS8qIGRlZmF1bHQgdXJiIHRpbWVvdXQgKi8KKworLyogUmVxdWVzdHMgKi8KKyNkZWZpbmUgQVRFTl9SRF9SVFlQRQkJMHhDMAorI2RlZmluZSBBVEVOX1dSX1JUWVBFCQkweDQwCisjZGVmaW5lIEFURU5fUkRSRVEJCTB4MEQKKyNkZWZpbmUgQVRFTl9XUlJFUQkJMHgwRQorI2RlZmluZSBBVEVOX0NUUkxfVElNRU9VVAk1MDAKKyNkZWZpbmUgVkVORE9SX1JFQURfTEVOR1RICSgweDAxKQorCisvKiBzZXQgdG8gMSBmb3IgUlM0ODUgbW9kZSBhbmQgMCBmb3IgUlMyMzIgbW9kZSAqLworLyogRklYTUUgbWFrZSB0aGlzIHNvbWVob3cgZHluYW1pYyBhbmQgbm90IGJ1aWxkIHRpbWUgc3BlY2lmaWMgKi8KK3N0YXRpYyBpbnQgUlM0ODVtb2RlOworCitzdGF0aWMgaW50IHNldF9yZWdfc3luYyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiByZWcsIF9fdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdmFsID0gdmFsICYgMHgwMGZmOworCisJZGJnKCIlczogaXMgJXgsIHZhbHVlICV4IiwgX19mdW5jX18sIHJlZywgdmFsKTsKKworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgQVRFTl9XUlJFUSwKKwkJCSAgICAgICBBVEVOX1dSX1JUWVBFLCB2YWwsIHJlZywgTlVMTCwgMCwKKwkJCSAgICAgICBBVEVOX1dEUl9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBnZXRfcmVnX3N5bmMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191MTYgcmVnLCBfX3UxNiAqdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEFURU5fUkRSRVEsCisJCQkgICAgICBBVEVOX1JEX1JUWVBFLCAwLCByZWcsIHZhbCwgVkVORE9SX1JFQURfTEVOR1RILAorCQkJICAgICAgQVRFTl9XRFJfVElNRU9VVCk7CisJZGJnKCIlczogb2Zmc2V0IGlzICV4LCByZXR1cm4gdmFsICV4IiwgX19mdW5jX18sIHJlZywgKnZhbCk7CisJKnZhbCA9ICgqdmFsKSAmIDB4MDBmZjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF91YXJ0X3JlZyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiByZWcsIF9fdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqYV9zZXJpYWw7CisJX191MTYgbWlub3I7CisKKwlhX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwltaW5vciA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJaWYgKG1pbm9yID09IFNFUklBTF9UVFlfTk9fTUlOT1IpCisJCW1pbm9yID0gMDsKKwl2YWwgPSB2YWwgJiAweDAwZmY7CisKKwkvKgorCSAqIEZvciB0aGUgVUFSVCBjb250cm9sIHJlZ2lzdGVycywKKwkgKiB0aGUgYXBwbGljYXRpb24gbnVtYmVyIG5lZWQgdG8gYmUgT3InZWQKKwkgKi8KKwlpZiAoYV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PSA0KQorCQl2YWwgfD0gKCgoX191MTYpcG9ydC0+bnVtYmVyIC0gbWlub3IpICsgMSkgPDwgODsKKwllbHNlIHsKKwkJaWYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIG1pbm9yKSA9PSAwKQorCQkJdmFsIHw9ICgoKF9fdTE2KXBvcnQtPm51bWJlciAtIG1pbm9yKSArIDEpIDw8IDg7CisJCWVsc2UKKwkJCXZhbCB8PSAoKChfX3UxNilwb3J0LT5udW1iZXIgLSBtaW5vcikgKyAyKSA8PCA4OworCX0KKwlkYmcoIiVzOiBhcHBsaWNhdGlvbiBudW1iZXIgaXMgJXgiLCBfX2Z1bmNfXywgdmFsKTsKKworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgQVRFTl9XUlJFUSwKKwkJCSAgICAgICBBVEVOX1dSX1JUWVBFLCB2YWwsIHJlZywgTlVMTCwgMCwKKwkJCSAgICAgICBBVEVOX1dEUl9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBnZXRfdWFydF9yZWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191MTYgcmVnLCBfX3UxNiAqdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpbnQgcmV0ID0gMDsKKwlfX3UxNiB3dmFsOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKmFfc2VyaWFsOworCV9fdTE2IG1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQltaW5vciA9IDA7CisKKwkvKiB3dmFsIGlzIHNhbWUgYXMgYXBwbGljYXRpb24gbnVtYmVyICovCisJaWYgKGFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gNCkKKwkJd3ZhbCA9ICgoKF9fdTE2KXBvcnQtPm51bWJlciAtIG1pbm9yKSArIDEpIDw8IDg7CisJZWxzZSB7CisJCWlmICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSBtaW5vcikgPT0gMCkKKwkJCXd2YWwgPSAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0gbWlub3IpICsgMSkgPDwgODsKKwkJZWxzZQorCQkJd3ZhbCA9ICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSBtaW5vcikgKyAyKSA8PCA4OworCX0KKwlkYmcoIiVzOiBhcHBsaWNhdGlvbiBudW1iZXIgaXMgJXgiLCBfX2Z1bmNfXywgd3ZhbCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEFURU5fUkRSRVEsCisJCQkgICAgICBBVEVOX1JEX1JUWVBFLCB3dmFsLCByZWcsIHZhbCwgVkVORE9SX1JFQURfTEVOR1RILAorCQkJICAgICAgQVRFTl9XRFJfVElNRU9VVCk7CisJKnZhbCA9ICgqdmFsKSAmIDB4MDBmZjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhhbmRsZV9uZXdNc3Ioc3RydWN0IEFURU5JTlRMX3BvcnQgKnBvcnQsIF9fdTggbmV3TXNyKQoreworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCBhc3luY19pY291bnQgKmljb3VudDsKKwlBVEVOMjAxMV9wb3J0ID0gcG9ydDsKKwlpY291bnQgPSAmQVRFTjIwMTFfcG9ydC0+aWNvdW50OworCWlmIChuZXdNc3IgJgorCSAgICAoQVRFTl9NU1JfREVMVEFfQ1RTIHwgQVRFTl9NU1JfREVMVEFfRFNSIHwgQVRFTl9NU1JfREVMVEFfUkkgfAorCSAgICAgQVRFTl9NU1JfREVMVEFfQ0QpKSB7CisJCWljb3VudCA9ICZBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisKKwkJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwkJaWYgKG5ld01zciAmIEFURU5fTVNSX0RFTFRBX0NUUykKKwkJCWljb3VudC0+Y3RzKys7CisJCWlmIChuZXdNc3IgJiBBVEVOX01TUl9ERUxUQV9EU1IpCisJCQlpY291bnQtPmRzcisrOworCQlpZiAobmV3TXNyICYgQVRFTl9NU1JfREVMVEFfQ0QpCisJCQlpY291bnQtPmRjZCsrOworCQlpZiAobmV3TXNyICYgQVRFTl9NU1JfREVMVEFfUkkpCisJCQlpY291bnQtPnJuZysrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9uZXdMc3Ioc3RydWN0IEFURU5JTlRMX3BvcnQgKnBvcnQsIF9fdTggbmV3THNyKQoreworCXN0cnVjdCBhc3luY19pY291bnQgKmljb3VudDsKKworCWRiZygiJXMgLSAlMDJ4IiwgX19mdW5jX18sIG5ld0xzcik7CisKKwlpZiAobmV3THNyICYgU0VSSUFMX0xTUl9CSSkgeworCQkvKgorCQkgKiBQYXJpdHkgYW5kIEZyYW1pbmcgZXJyb3JzIG9ubHkgY291bnQgaWYgdGhleSBvY2N1ciBleGNsdXNpdmUKKwkJICogb2YgYSBicmVhayBiZWluZyByZWNlaXZlZC4KKwkJICovCisJCW5ld0xzciAmPSAoX191OCkgKFNFUklBTF9MU1JfT0UgfCBTRVJJQUxfTFNSX0JJKTsKKwl9CisKKwkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCWljb3VudCA9ICZwb3J0LT5pY291bnQ7CisJaWYgKG5ld0xzciAmIFNFUklBTF9MU1JfQkkpCisJCWljb3VudC0+YnJrKys7CisJaWYgKG5ld0xzciAmIFNFUklBTF9MU1JfT0UpCisJCWljb3VudC0+b3ZlcnJ1bisrOworCWlmIChuZXdMc3IgJiBTRVJJQUxfTFNSX1BFKQorCQlpY291bnQtPnBhcml0eSsrOworCWlmIChuZXdMc3IgJiBTRVJJQUxfTFNSX0ZFKQorCQlpY291bnQtPmZyYW1lKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfY29udHJvbF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlfX3U4IHJlZ3ZhbCA9IDB4MDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJQVRFTjIwMTFfcG9ydCA9IChzdHJ1Y3QgQVRFTklOVExfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCWRiZygiJXMgdXJiIGJ1ZmZlciBzaXplIGlzICVkIiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGJnKCIlcyBBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgaXMgJWQgcG9ydCAlZCIsIF9fZnVuY19fLAorCQlBVEVOMjAxMV9wb3J0LT5Nc3JMc3IsIEFURU4yMDExX3BvcnQtPnBvcnRfbnVtKTsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJcmVndmFsID0gKF9fdTgpIGRhdGFbMF07CisJZGJnKCIlcyBkYXRhIGlzICV4IiwgX19mdW5jX18sIHJlZ3ZhbCk7CisJaWYgKEFURU4yMDExX3BvcnQtPk1zckxzciA9PSAwKQorCQloYW5kbGVfbmV3TXNyKEFURU4yMDExX3BvcnQsIHJlZ3ZhbCk7CisJZWxzZSBpZiAoQVRFTjIwMTFfcG9ydC0+TXNyTHNyID09IDEpCisJCWhhbmRsZV9uZXdMc3IoQVRFTjIwMTFfcG9ydCwgcmVndmFsKTsKKworZXhpdDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfZ2V0X3JlZyhzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTiwgX191MTYgV3ZhbCwgX191MTYgcmVnLAorCQkJICAgIF9fdTE2ICp2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IEFURU4tPnBvcnQtPnNlcmlhbC0+ZGV2OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBOVUxMOworCWludCByZXQgPSAwOworCWJ1ZmZlciA9IChfX3U4ICopIEFURU4tPmN0cmxfYnVmOworCisJZHIgPSAodm9pZCAqKShidWZmZXIgKyAyKTsKKwlkci0+YlJlcXVlc3RUeXBlID0gQVRFTl9SRF9SVFlQRTsKKwlkci0+YlJlcXVlc3QgPSBBVEVOX1JEUkVROworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNihXdmFsKTsKKwlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYocmVnKTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDIpOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIoQVRFTi0+Y29udHJvbF91cmIsIGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICh1bnNpZ25lZCBjaGFyICopZHIsIGJ1ZmZlciwgMiwKKwkJCSAgICAgQVRFTjIwMTFfY29udHJvbF9jYWxsYmFjaywgQVRFTik7CisJQVRFTi0+Y29udHJvbF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAyOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKEFURU4tPmNvbnRyb2xfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9pbnRlcnJ1cHRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXN1bHQ7CisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlfX3UxNiBEYXRhOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJX191OCBzcFs1XSwgc3Q7CisJaW50IGk7CisJX191MTYgd3ZhbDsKKwlpbnQgbWlub3I7CisKKwlkYmcoIiVzIiwgIiA6IEVudGVyaW5nIik7CisKKwlBVEVOMjAxMV9zZXJpYWwgPSAoc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqKXVyYi0+Y29udGV4dDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCWxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlzZXJpYWwgPSBBVEVOMjAxMV9zZXJpYWwtPnNlcmlhbDsKKworCS8qIEFURU5JTlRMIGdldCA1IGJ5dGVzCisJICogQnl0ZSAxIElJUiBQb3J0IDEgKHBvcnQubnVtYmVyIGlzIDApCisJICogQnl0ZSAyIElJUiBQb3J0IDIgKHBvcnQubnVtYmVyIGlzIDEpCisJICogQnl0ZSAzIElJUiBQb3J0IDMgKHBvcnQubnVtYmVyIGlzIDIpCisJICogQnl0ZSA0IElJUiBQb3J0IDQgKHBvcnQubnVtYmVyIGlzIDMpCisJICogQnl0ZSA1IEZJRk8gc3RhdHVzIGZvciBib3RoICovCisKKwlpZiAobGVuZ3RoICYmIGxlbmd0aCA+IDUpIHsKKwkJZGJnKCIlcyIsICJXcm9uZyBkYXRhICEhISIpOworCQlyZXR1cm47CisJfQorCisJLyogTUFUUklYICovCisJaWYgKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDQpIHsKKwkJc3BbMF0gPSAoX191OCkgZGF0YVswXTsKKwkJc3BbMV0gPSAoX191OCkgZGF0YVsxXTsKKwkJc3BbMl0gPSAoX191OCkgZGF0YVsyXTsKKwkJc3BbM10gPSAoX191OCkgZGF0YVszXTsKKwkJc3QgPSAoX191OCkgZGF0YVs0XTsKKwl9IGVsc2UgeworCQlzcFswXSA9IChfX3U4KSBkYXRhWzBdOworCQlzcFsxXSA9IChfX3U4KSBkYXRhWzJdOworCQkvKiBzcFsyXT0oX191OClkYXRhWzJdOyAqLworCQkvKiBzcFszXT0oX191OClkYXRhWzNdOyAqLworCQlzdCA9IChfX3U4KSBkYXRhWzRdOworCisJfQorCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJbWlub3IgPSBzZXJpYWwtPm1pbm9yOworCQlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJCW1pbm9yID0gMDsKKwkJaWYgKChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PSAyKQorCQkgICAgJiYgKGkgIT0gMCkpCisJCQl3dmFsID0KKwkJCSAgICAoKChfX3UxNikgc2VyaWFsLT5wb3J0W2ldLT5udW1iZXIgLQorCQkJICAgICAgKF9fdTE2KSAobWlub3IpKSArIDIpIDw8IDg7CisJCWVsc2UKKwkJCXd2YWwgPQorCQkJICAgICgoKF9fdTE2KSBzZXJpYWwtPnBvcnRbaV0tPm51bWJlciAtCisJCQkgICAgICAoX191MTYpIChtaW5vcikpICsgMSkgPDwgODsKKwkJaWYgKEFURU4yMDExX3BvcnQtPm9wZW4gIT0gMCkgeworCQkJaWYgKHNwW2ldICYgMHgwMSkgeworCQkJCWRiZygiU1AlZCBObyBJbnRlcnJ1cHQgISEhIiwgaSk7CisJCQl9IGVsc2UgeworCQkJCXN3aXRjaCAoc3BbaV0gJiAweDBmKSB7CisJCQkJY2FzZSBTRVJJQUxfSUlSX1JMUzoKKwkJCQkJZGJnKCJTZXJpYWwgUG9ydCAlZDogUmVjZWl2ZXIgc3RhdHVzIGVycm9yIG9yIGFkZHJlc3MgYml0IGRldGVjdGVkIGluIDktYml0IG1vZGUiLCBpKTsKKwkJCQkJQVRFTjIwMTFfcG9ydC0+TXNyTHNyID0gMTsKKwkJCQkJQVRFTjIwMTFfZ2V0X3JlZyhBVEVOMjAxMV9wb3J0LCB3dmFsLAorCQkJCQkJCSBMSU5FX1NUQVRVU19SRUdJU1RFUiwKKwkJCQkJCQkgJkRhdGEpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNFUklBTF9JSVJfTVM6CisJCQkJCWRiZygiU2VyaWFsIFBvcnQgJWQ6IE1vZGVtIHN0YXR1cyBjaGFuZ2UiLCBpKTsKKwkJCQkJQVRFTjIwMTFfcG9ydC0+TXNyTHNyID0gMDsKKwkJCQkJQVRFTjIwMTFfZ2V0X3JlZyhBVEVOMjAxMV9wb3J0LCB3dmFsLAorCQkJCQkJCSBNT0RFTV9TVEFUVVNfUkVHSVNURVIsCisJCQkJCQkJICZEYXRhKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwl9CitleGl0OgorCWlmIChBVEVOMjAxMV9zZXJpYWwtPnN0YXR1c19wb2xsaW5nX3N0YXJ0ZWQgPT0gMCkKKwkJcmV0dXJuOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmJcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2J1bGtfaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCWludCBzdGF0dXM7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqQVRFTjIwMTFfc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJQVRFTjIwMTFfcG9ydCA9IChzdHJ1Y3QgQVRFTklOVExfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKUFURU4yMDExX3BvcnQtPnBvcnQ7CisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJZGJnKCIlcyIsICJFbnRlcmluZy4uLiIpOworCisJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCUFURU4yMDExX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmQVRFTjIwMTFfcG9ydC0+cG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisKKwkJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnJ4ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJZGJnKCJBVEVOMjAxMV9wb3J0LT5pY291bnQucnggaXMgJWQ6IiwKKwkJCUFURU4yMDExX3BvcnQtPmljb3VudC5yeCk7CisJfQorCisJaWYgKCFBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYikgeworCQlkYmcoIiVzIiwgIlVSQiBLSUxMRUQgISEhIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRiZygidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkIiwgc3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCJub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJQVRFTjIwMTFfcG9ydCA9IChzdHJ1Y3QgQVRFTklOVExfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uIik7CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZBVEVOMjAxMV9wb3J0LT5wb3J0LT5wb3J0KTsKKworCWlmICh0dHkgJiYgQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQkvKiB0ZWxsIHRoZSB0dHkgZHJpdmVyIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkICovCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwl9CisKKwkvKiBzY2hlZHVsZV93b3JrKCZBVEVOMjAxMV9wb3J0LT5wb3J0LT53b3JrKTsgKi8KKwl0dHlfa3JlZl9wdXQodHR5KTsKKworfQorCisjaWZkZWYgQVRFTlNlcmlhbFByb2JlCitzdGF0aWMgaW50IEFURU4yMDExX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisKKwkvKm5lZWQgdG8gaW1wbGVtZW50IHRoZSBtb2RlX3JlZyByZWFkaW5nIGFuZCB1cGRhdGluZ1wKKwkgICBzdHJ1Y3R1cmVzIHVzYl9zZXJpYWxfIGRldmljZV90eXBlXAorCSAgIChpLmUgbnVtX3BvcnRzLCBudW1fYnVsa2luLGJ1bGtvdXQgZXRjKSAqLworCS8qIEFsc28gd2UgY2FuIHVwZGF0ZSB0aGUgY2hhbmdlcyAgYXR0YWNoICovCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBBVEVOMjAxMV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJlc3BvbnNlOworCWludCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVyYiAqdXJiOworCV9fdTE2IERhdGE7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IGt0ZXJtaW9zIHRtcF90ZXJtaW9zOworCWludCBtaW5vcjsKKworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCUFURU4yMDExX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW5jcmVtZW50IHRoZSBudW1iZXIgb2Ygb3BlbmVkIHBvcnRzIGNvdW50ZXIgaGVyZSAqLworCUFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cysrOworCisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKKworCS8qIEluaXRpYWxpc2luZyB0aGUgd3JpdGUgdXJiIHBvb2wgKi8KKwlmb3IgKGogPSAwOyBqIDwgTlVNX1VSQlM7ICsraikgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCQlBVEVOMjAxMV9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IHVyYjsKKworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkgICAga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQllcnIoIiVzLW91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLiIsIF9fZnVuY19fKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemUgQVRFTjIwMTEgLS0gV3JpdGUgSW5pdCB2YWx1ZXMgdG8gY29ycmVzcG9uZGluZyBSZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlciBJbmRleAorICogMSA6IElFUgorICogMiA6IEZDUgorICogMyA6IExDUgorICogNCA6IE1DUgorICoKKyAqIDB4MDggOiBTUDEvMiBDb250cm9sIFJlZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBORUVEIHRvIGNoZWNrIHRoZSBmYWxsb3dpbmcgQmxvY2sgKi8KKworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCAmRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJSZWFkaW5nIFNwcmVnIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCURhdGEgfD0gMHg4MDsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygid3JpdGluZyBTcHJlZyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCURhdGEgJj0gfjB4ODA7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIndyaXRpbmcgU3ByZWcgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKy8qIEVuZCBvZiBibG9jayB0byBiZSBjaGVja2VkICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKipDSEVDSyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChSUzQ4NW1vZGUgPT0gMCkKKwkJRGF0YSA9IDB4QzA7CisJZWxzZQorCQlEYXRhID0gMHgwMDsKKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgU0NSQVRDSF9QQURfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiV3JpdGluZyBTQ1JBVENIX1BBRF9SRUdJU1RFUiBmYWlsZWQgc3RhdHVzLTB4JXgiLCBzdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlCisJCWRiZygiU0NSQVRDSF9QQURfUkVHSVNURVIgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwgc3RhdHVzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqQ0hFQ0sqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IGdldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJSZWFkaW5nIENvbnRyb2xyZWcgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJRGF0YSB8PSAweDA4OwkJLyogRHJpdmVyIGRvbmUgYml0ICovCisJRGF0YSB8PSAweDIwOwkJLyogcnhfZGlzYWJsZSAqLworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0KKwkgICAgc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygid3JpdGluZyBDb250cm9scmVnIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCS8qCisJICogZG8gcmVnaXN0ZXIgc2V0dGluZ3MgaGVyZQorCSAqIFNldCBhbGwgcmVncyB0byB0aGUgZGV2aWNlIGRlZmF1bHQgdmFsdWVzLgorCSAqIEZpcnN0IERpc2FibGUgYWxsIGludGVycnVwdHMuCisJICovCisKKwlEYXRhID0gMHgwMDsKKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJkaXNhYmxlaW5nIGludGVycnVwdHMgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJLyogU2V0IEZJRk9fQ09OVFJPTF9SRUdJU1RFUiB0byB0aGUgZGVmYXVsdCB2YWx1ZSAqLworCURhdGEgPSAweDAwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiV3JpdGluZyBGSUZPX0NPTlRST0xfUkVHSVNURVIgIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJRGF0YSA9IDB4Y2Y7CQkvKiBjaGsgKi8KKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgRklGT19DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIldyaXRpbmcgRklGT19DT05UUk9MX1JFR0lTVEVSICBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCURhdGEgPSAweDAzOwkJLyogTENSX0JJVFNfOCAqLworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CisKKwlEYXRhID0gMHgwYjsJCS8qIE1DUl9EVFJ8TUNSX1JUU3xNQ1JfTUFTVEVSX0lFICovCisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IERhdGE7CisKKyNpZmRlZiBDaGVjaworCURhdGEgPSAweDAwOworCXN0YXR1cyA9IGdldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsICZEYXRhKTsKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCisJRGF0YSB8PSBTRVJJQUxfTENSX0RMQUI7CS8qIGRhdGEgbGF0Y2ggZW5hYmxlIGluIExDUiAweDgwICovCisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwlEYXRhID0gMHgwYzsKKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgRElWSVNPUl9MQVRDSF9MU0IsIERhdGEpOworCisJRGF0YSA9IDB4MDsKKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgRElWSVNPUl9MQVRDSF9NU0IsIERhdGEpOworCisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gZ2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgJkRhdGEpOworCisvKiAgICAgIERhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1I7ICovCS8qIGRhdGEgbGF0Y2ggZGlzYWJsZSAqLworCURhdGEgPSBEYXRhICYgflNFUklBTF9MQ1JfRExBQjsKKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworI2VuZGlmCisJLyogY2xlYXJpbmcgQnVsa2luIGFuZCBCdWxrb3V0IEZpZm8gKi8KKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IGdldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgJkRhdGEpOworCisJRGF0YSA9IERhdGEgfCAweDBjOworCXN0YXR1cyA9IHNldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CisKKwlEYXRhID0gRGF0YSAmIH4weDBjOworCXN0YXR1cyA9IHNldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CisJLyogRmluYWxseSBlbmFibGUgYWxsIGludGVycnVwdHMgKi8KKwlEYXRhID0gMHgwOworCURhdGEgPSAweDBjOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKworCS8qIGNsZWFyaW5nIHJ4X2Rpc2FibGUgKi8KKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IGdldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJRGF0YSA9IERhdGEgJiB+MHgyMDsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisKKwkvKiByeF9uZWdhdGUgKi8KKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IGdldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJRGF0YSA9IERhdGEgfCAweDEwOworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsIERhdGEpOworCisJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzICoKKwkgKiB0aGUgZGF0YSB0aHJvdWdoLG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoICAgICAgKgorCSAqIGhpZ2ggZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LiAgICAgICAqLworCisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgd2UndmUgc2V0IHVwIG91ciBlbmRwb2ludCBpbmZvIHlldAorCSAqIChjYW4ndCBzZXQgaXQgdXAgaW4gQVRFTjIwMTFfc3RhcnR1cCBhcyB0aGUgc3RydWN0dXJlcworCSAqIHdlcmUgbm90IHNldCB1cCBhdCB0aGF0IHRpbWUuKQorCSAqLworCWlmIChBVEVOMjAxMV9zZXJpYWwtPk5vT2ZPcGVuUG9ydHMgPT0gMSkgeworCQkvKiBzdGFydCB0aGUgc3RhdHVzIHBvbGxpbmcgaGVyZSAqLworCQlBVEVOMjAxMV9zZXJpYWwtPnN0YXR1c19wb2xsaW5nX3N0YXJ0ZWQgPSAxOworCQkvKiBJZiBub3QgeWV0IHNldCwgU2V0IGhlcmUgKi8KKwkJQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0KKwkJICAgIHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX2J1ZmZlcjsKKwkJQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQgPQorCQkgICAgc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOworCQlBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiA9CisJCSAgICBzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmI7CisKKwkJLyogc2V0IHVwIGludGVycnVwdCB1cmIgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKKwkJCQkgc2VyaWFsLT5kZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJQVRFTjIwMTFfc2VyaWFsLT4KKwkJCQkJCWludGVycnVwdF9pbl9lbmRwb2ludCksCisJCQkJIEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCQkgQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmItPgorCQkJCSB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSBBVEVOMjAxMV9pbnRlcnJ1cHRfY2FsbGJhY2ssIEFURU4yMDExX3NlcmlhbCwKKwkJCQkgQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmItPmludGVydmFsKTsKKworCQkvKiBzdGFydCBpbnRlcnJ1cHQgcmVhZCBmb3IgQVRFTjIwMTEgICAgICAgICAgICAgICAqCisJCSAqIHdpbGwgY29udGludWUgYXMgbG9uZyBhcyBBVEVOMjAxMSBpcyBjb25uZWN0ZWQgICovCisKKwkJcmVzcG9uc2UgPQorCQkgICAgdXNiX3N1Ym1pdF91cmIoQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIsCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXNwb25zZSkgeworCQkJZGJnKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsCisJCQkJX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJfQorCisJfQorCisJLyoKKwkgKiBTZWUgaWYgd2UndmUgc2V0IHVwIG91ciBlbmRwb2ludCBpbmZvIHlldAorCSAqIChjYW4ndCBzZXQgaXQgdXAgaW4gQVRFTjIwMTFfc3RhcnR1cCBhcyB0aGUKKwkgKiBzdHJ1Y3R1cmVzIHdlcmUgbm90IHNldCB1cCBhdCB0aGF0IHRpbWUuKQorCSAqLworCisJZGJnKCJwb3J0IG51bWJlciBpcyAlZCIsIHBvcnQtPm51bWJlcik7CisJZGJnKCJzZXJpYWwgbnVtYmVyIGlzICVkIiwgcG9ydC0+c2VyaWFsLT5taW5vcik7CisJZGJnKCJCdWxraW4gZW5kcG9pbnQgaXMgJWQiLCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CisJZGJnKCJCdWxrT3V0IGVuZHBvaW50IGlzICVkIiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwlkYmcoIkludGVycnVwdCBlbmRwb2ludCBpcyAlZCIsCisJCXBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpOworCWRiZygicG9ydCdzIG51bWJlciBpbiB0aGUgZGV2aWNlIGlzICVkIiwgQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0pOworCUFURU4yMDExX3BvcnQtPmJ1bGtfaW5fYnVmZmVyID0gcG9ydC0+YnVsa19pbl9idWZmZXI7CisJQVRFTjIwMTFfcG9ydC0+YnVsa19pbl9lbmRwb2ludCA9IHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCUFURU4yMDExX3BvcnQtPnJlYWRfdXJiID0gcG9ydC0+cmVhZF91cmI7CisJQVRFTjIwMTFfcG9ydC0+YnVsa19vdXRfZW5kcG9pbnQgPSBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisKKwltaW5vciA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJaWYgKG1pbm9yID09IFNFUklBTF9UVFlfTk9fTUlOT1IpCisJCW1pbm9yID0gMDsKKworCS8qIHNldCB1cCBvdXIgYnVsayBpbiB1cmIgKi8KKwlpZiAoKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDIpCisJICAgICYmICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSAoX191MTYpIChtaW5vcikpICE9IDApKSB7CisJCXVzYl9maWxsX2J1bGtfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCSAgKHBvcnQtPgorCQkJCQkJICAgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MgKworCQkJCQkJICAgMikpLCBwb3J0LT5idWxrX2luX2J1ZmZlciwKKwkJCQkgIEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT4KKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBBVEVOMjAxMV9idWxrX2luX2NhbGxiYWNrLCBBVEVOMjAxMV9wb3J0KTsKKwl9IGVsc2UKKwkJdXNiX2ZpbGxfYnVsa191cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsCisJCQkJICBzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCSAgcG9ydC0+CisJCQkJCQkgIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLAorCQkJCSAgQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPgorCQkJCSAgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIEFURU4yMDExX2J1bGtfaW5fY2FsbGJhY2ssIEFURU4yMDExX3BvcnQpOworCisJZGJnKCJBVEVOMjAxMV9vcGVuOiBidWxraW4gZW5kcG9pbnQgaXMgJWQiLAorCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CisJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3BvbnNlKSB7CisJCWVycigiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiIiwgX19mdW5jX18sCisJCSAgICByZXNwb25zZSk7CisJfQorCisJLyogaW5pdGlhbGl6ZSBvdXIgd2FpdCBxdWV1ZXMgKi8KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZBVEVOMjAxMV9wb3J0LT53YWl0X2NoYXNlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZBVEVOMjAxMV9wb3J0LT53YWl0X2NvbW1hbmQpOworCisJLyogaW5pdGlhbGl6ZSBvdXIgaWNvdW50IHN0cnVjdHVyZSAqLworCW1lbXNldCgmKEFURU4yMDExX3BvcnQtPmljb3VudCksIDB4MDAsIHNpemVvZihBVEVOMjAxMV9wb3J0LT5pY291bnQpKTsKKworCS8qIGluaXRpYWxpemUgb3VyIHBvcnQgc2V0dGluZ3MgKi8KKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgPSBNQ1JfTUFTVEVSX0lFOwkvKiBNdXN0IHNldCB0byBlbmFibGUgaW50cyEgKi8KKwlBVEVOMjAxMV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IDA7CisJLyogc2VuZCBhIG9wZW4gcG9ydCBjb21tYW5kICovCisJQVRFTjIwMTFfcG9ydC0+b3BlbiA9IDE7CisJLyogQVRFTjIwMTFfY2hhbmdlX3BvcnRfc2V0dGluZ3MoQVRFTjIwMTFfcG9ydCxvbGRfdGVybWlvcyk7ICovCisJLyogU2V0dXAgdGVybWlvcyAqLworCUFURU4yMDExX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgJnRtcF90ZXJtaW9zKTsKKwlBVEVOMjAxMV9wb3J0LT5pY291bnQudHggPSAwOworCUFURU4yMDExX3BvcnQtPmljb3VudC5yeCA9IDA7CisKKwlkYmcoInVzYl9zZXJpYWwgc2VyaWFsOiV4ICAgICAgIEFURU4yMDExX3BvcnQ6JXhcbkFURU4yMDExX3NlcmlhbDoleCAgICAgIHVzYl9zZXJpYWxfcG9ydCBwb3J0OiV4IiwKKwkgICAgICh1bnNpZ25lZCBpbnQpc2VyaWFsLCAodW5zaWduZWQgaW50KUFURU4yMDExX3BvcnQsCisJICAgICAodW5zaWduZWQgaW50KUFURU4yMDExX3NlcmlhbCwgKHVuc2lnbmVkIGludClwb3J0KTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGk7CisJaW50IGNoYXJzID0gMDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKworCS8qIGRiZygiJXMiLCIgQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyOmVudGVyaW5nIC4uLi4uLi4uLi4uIik7ICovCisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpIHsKKwkJZGJnKCIlcyIsICJBVEVOMjAxMV9icmVhazpsZWF2aW5nIC4uLi4uLi4uLi4uIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkKKwkJaWYgKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJY2hhcnMgKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOworCXJldHVybiBjaGFyczsKKworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9ibG9ja191bnRpbF90eF9lbXB0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkgIHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0KQoreworCWludCB0aW1lb3V0ID0gSFogLyAxMDsKKwlpbnQgd2FpdCA9IDMwOworCWludCBjb3VudDsKKworCXdoaWxlICgxKSB7CisJCWNvdW50ID0gQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyKHR0eSk7CisKKwkJLyogQ2hlY2sgZm9yIEJ1ZmZlciBzdGF0dXMgKi8KKwkJaWYgKGNvdW50IDw9IDApCisJCQlyZXR1cm47CisKKwkJLyogQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZSAqLworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJkFURU4yMDExX3BvcnQtPndhaXRfY2hhc2UsCisJCQkJCSAgICAgICB0aW1lb3V0KTsKKworCQkvKiBObyBhY3Rpdml0eS4uIGNvdW50IGRvd24gc2VjdGlvbiAqLworCQl3YWl0LS07CisJCWlmICh3YWl0ID09IDApIHsKKwkJCWRiZygiJXMgLSBUSU1FT1VUIiwgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJLyogUmVzZXQgdGltb3V0IHZhbHVlIGJhY2sgdG8gc2Vjb25kcyAqLworCQkJd2FpdCA9IDMwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJaW50IG5vX3VyYnM7CisJX191MTYgRGF0YTsKKworCWRiZygiJXMiLCAiQVRFTjIwMTFfY2xvc2U6ZW50ZXJpbmcuLi4iKTsKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwkvKiB0YWtlIHRoZSBBZHBhdGVyIGFuZCBwb3J0J3MgcHJpdmF0ZSBkYXRhICovCisJQVRFTjIwMTFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKChBVEVOMjAxMV9zZXJpYWwgPT0gTlVMTCkgfHwgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkpCisJCXJldHVybjsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiBmbHVzaCBhbmQgYmxvY2sod2FpdCkgdW50aWwgdHggaXMgZW1wdHkgKi8KKwkJQVRFTjIwMTFfYmxvY2tfdW50aWxfdHhfZW1wdHkodHR5LCBBVEVOMjAxMV9wb3J0KTsKKwl9CisJLyoga2lsbCB0aGUgcG9ydHMgVVJCJ3MgKi8KKwlmb3IgKG5vX3VyYnMgPSAwOyBub191cmJzIDwgTlVNX1VSQlM7IG5vX3VyYnMrKykKKwkJdXNiX2tpbGxfdXJiKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW25vX3VyYnNdKTsKKwkvKiBGcmVlaW5nIFdyaXRlIFVSQnMgKi8KKwlmb3IgKG5vX3VyYnMgPSAwOyBub191cmJzIDwgTlVNX1VSQlM7ICsrbm9fdXJicykgeworCQlrZnJlZShBVEVOMjAxMV9wb3J0LT53cml0ZV91cmJfcG9vbFtub191cmJzXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX2ZyZWVfdXJiKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW25vX3VyYnNdKTsKKwl9CisJLyogV2hpbGUgY2xvc2luZyBwb3J0LCBzaHV0ZG93biBhbGwgYnVsayByZWFkLCB3cml0ZSAgKgorCSAqIGFuZCBpbnRlcnJ1cHQgcmVhZCBpZiB0aGV5IGV4aXN0cyAgICAgICAgICAgICAgICAgICovCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCWlmIChBVEVOMjAxMV9wb3J0LT53cml0ZV91cmIpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gYnVsayB3cml0ZSIpOworCQkJdXNiX2tpbGxfdXJiKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYik7CisJCX0KKwkJaWYgKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiKSB7CisJCQlkYmcoIiVzIiwgIlNodXRkb3duIGJ1bGsgcmVhZCIpOworCQkJdXNiX2tpbGxfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiKTsKKwkJfQorCQlpZiAoKCZBVEVOMjAxMV9wb3J0LT5jb250cm9sX3VyYikpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gY29udHJvbCByZWFkIik7CisJCQkvKiB1c2Jfa2lsbF91cmIgKEFURU4yMDExX3BvcnQtPmNvbnRyb2xfdXJiKTsgKi8KKworCQl9CisJfQorCS8qIGlmKEFURU4yMDExX3BvcnQtPmN0cmxfYnVmICE9IE5VTEwpICovCisJCS8qIGtmcmVlKEFURU4yMDExX3BvcnQtPmN0cmxfYnVmKTsgKi8KKwkvKiBkZWNyZW1lbnQgdGhlIG5vLm9mIG9wZW4gcG9ydHMgY291bnRlciBvZiBhbiBpbmRpdmlkdWFsIFVTQi1zZXJpYWwgYWRhcHRlci4gKi8KKwlBVEVOMjAxMV9zZXJpYWwtPk5vT2ZPcGVuUG9ydHMtLTsKKwlkYmcoIk5vT2ZPcGVuUG9ydHMgaW4gY2xvc2UlZDppbiBwb3J0JWQiLAorCQlBVEVOMjAxMV9zZXJpYWwtPk5vT2ZPcGVuUG9ydHMsIHBvcnQtPm51bWJlcik7CisJaWYgKEFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cyA9PSAwKSB7CisJCS8qIHN0b3AgdGhlIHN0dXMgcG9sbGluZyBoZXJlICovCisJCUFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9IDA7CisJCWlmIChBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYikgeworCQkJZGJnKCIlcyIsICJTaHV0ZG93biBpbnRlcnJ1cHRfcmVhZF91cmIiKTsKKwkJCS8qIEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlcj1OVUxMOyAqLworCQkJLyogdXNiX2tpbGxfdXJiIChBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYik7ICovCisJCX0KKwl9CisJaWYgKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYikgeworCQkvKiBpZiB0aGlzIHVyYiBoYWQgYSB0cmFuc2ZlciBidWZmZXIgYWxyZWFkeSAob2xkIHR4KSBmcmVlIGl0ICovCisJCWtmcmVlKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX2ZyZWVfdXJiKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYik7CisJfQorCisJLyogY2xlYXIgdGhlIE1DUiAmIElFUiAqLworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwlEYXRhID0gMHgwMDsKKwlzZXRfdWFydF9yZWcocG9ydCwgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgRGF0YSk7CisKKwlBVEVOMjAxMV9wb3J0LT5vcGVuID0gMDsKKwlkYmcoIiVzIiwgIkxlYXZpbmcgLi4uLi4uLi4uLi4uIik7CisKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJCXN0cnVjdCBBVEVOSU5UTF9wb3J0CisJCQkJCQkqQVRFTjIwMTFfcG9ydCkKK3sKKwlpbnQgdGltZW91dCA9IDEgKiBIWjsKKwlpbnQgd2FpdCA9IDEwOworCWludCBjb3VudDsKKworCXdoaWxlICgxKSB7CisJCWNvdW50ID0gQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyKHR0eSk7CisKKwkJLyogQ2hlY2sgZm9yIEJ1ZmZlciBzdGF0dXMgKi8KKwkJaWYgKGNvdW50IDw9IDApIHsKKwkJCUFURU4yMDExX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gMDsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIEJsb2NrIHRoZSB0aHJlYWQgZm9yIGEgd2hpbGUgKi8KKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZBVEVOMjAxMV9wb3J0LT53YWl0X2NoYXNlLAorCQkJCQkgICAgICAgdGltZW91dCk7CisJCS8qIE5vIGFjdGl2aXR5Li4gY291bnQgZG93biBzZWN0aW9uICovCisJCXdhaXQtLTsKKwkJaWYgKHdhaXQgPT0gMCkgeworCQkJZGJnKCIlcyAtIFRJTUVPVVQiLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKiBSZXNldCB0aW1vdXQgdmFsdWUgYmFjayB0byBzZWNvbmRzICovCisJCQl3YWl0ID0gMTA7CisJCX0KKwl9CisKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLi4iKTsKKwlkYmcoIkFURU4yMDExX2JyZWFrOiBTdGFydCIpOworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJQVRFTjIwMTFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoKEFURU4yMDExX3NlcmlhbCA9PSBOVUxMKSB8fCAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJLyogZmx1c2ggYW5kIGNoYXNlICovCisJQVRFTjIwMTFfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSAxOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIGZsdXNoIGFuZCBibG9jayB1bnRpbCB0eCBpcyBlbXB0eSAqLworCQlBVEVOMjAxMV9ibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZSh0dHksIEFURU4yMDExX3BvcnQpOworCX0KKworCWlmIChicmVha19zdGF0ZSA9PSAtMSkKKwkJZGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiB8IExDUl9TRVRfQlJFQUs7CisJZWxzZQorCQlkYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSICYgfkxDUl9TRVRfQlJFQUs7CisKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgPSBkYXRhOworCWRiZygiQVRFTjIwMTFfYnJlYWsgQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSIGlzICV4IiwKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSKTsKKwlzZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgaTsKKwlpbnQgcm9vbSA9IDA7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpIHsKKwkJZGJnKCIlcyIsICJBVEVOMjAxMV9icmVhazpsZWF2aW5nIC4uLi4uLi4uLi4uIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkKKwkJaWYgKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJcm9vbSArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKKworfQorCitzdGF0aWMgaW50IEFURU4yMDExX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjb3VudCkKK3sKKwlpbnQgc3RhdHVzOworCWludCBpOworCWludCBieXRlc19zZW50ID0gMDsKKwlpbnQgdHJhbnNmZXJfc2l6ZTsKKwlpbnQgbWlub3I7CisKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9wb3NpdGlvbiA9IGRhdGE7CisJdW5zaWduZWQgY2hhciAqZGF0YTE7CisJZGJnKCIlcyIsICJlbnRlcmluZyAuLi4uLi4uLi4uLiIpOworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKSB7CisJCWRiZygiJXMiLCAiQVRFTjIwMTFfcG9ydCBpcyBOVUxMIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlBVEVOMjAxMV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJaWYgKEFURU4yMDExX3NlcmlhbCA9PSBOVUxMKSB7CisJCWRiZygiJXMiLCAiQVRFTjIwMTFfc2VyaWFsIGlzIE5VTEwiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgaW4gdGhlIGxpc3QgKi8KKwl1cmIgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQl1cmIgPSBBVEVOMjAxMV9wb3J0LT53cml0ZV91cmJfcG9vbFtpXTsKKwkJCWRiZygiVVJCOiVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh1cmIgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9CisJCSAgICBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCWVycigiJXMgbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uIiwgX19mdW5jX18pOworCQkJZ290byBleGl0OworCQl9CisJfQorCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSk7CisKKwltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfcG9zaXRpb24sIHRyYW5zZmVyX3NpemUpOworCS8qIHVzYl9zZXJpYWxfZGVidWdfZGF0YSAoX19GSUxFX18sIF9fZnVuY19fLCB0cmFuc2Zlcl9zaXplLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7ICovCisKKwkvKiBmaWxsIHVyYiB3aXRoIGRhdGEgYW5kIHN1Ym1pdCAgKi8KKwltaW5vciA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJaWYgKG1pbm9yID09IFNFUklBTF9UVFlfTk9fTUlOT1IpCisJCW1pbm9yID0gMDsKKwlpZiAoKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDIpCisJICAgICYmICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSAoX191MTYpIChtaW5vcikpICE9IDApKSB7CisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgQVRFTjIwMTFfc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZShBVEVOMjAxMV9zZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkJICAocG9ydC0+CisJCQkJCQkgICBidWxrX291dF9lbmRwb2ludEFkZHJlc3MpICsKKwkJCQkJCSAgMiksIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgdHJhbnNmZXJfc2l6ZSwKKwkJCQkgIEFURU4yMDExX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCisJCQkJICBBVEVOMjAxMV9wb3J0KTsKKwl9IGVsc2UKKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsCisJCQkJICBBVEVOMjAxMV9zZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKEFURU4yMDExX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQkgIHBvcnQtPgorCQkJCQkJICBidWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHRyYW5zZmVyX3NpemUsCisJCQkJICBBVEVOMjAxMV9idWxrX291dF9kYXRhX2NhbGxiYWNrLAorCQkJCSAgQVRFTjIwMTFfcG9ydCk7CisKKwlkYXRhMSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWRiZygiYnVsa291dCBlbmRwb2ludCBpcyAlZCIsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyk7CisJLyogZm9yKGk9MDtpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoO2krKykgKi8KKwkJLyogZGJnKCJEYXRhIGlzICVjICIsZGF0YTFbaV0pOyAqLworCisJLyogc2VuZCBpdCBkb3duIHRoZSBwaXBlICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChzdGF0dXMpIHsKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlieXRlc19zZW50ID0gc3RhdHVzOworCQlnb3RvIGV4aXQ7CisJfQorCWJ5dGVzX3NlbnQgPSB0cmFuc2Zlcl9zaXplOworCUFURU4yMDExX3BvcnQtPmljb3VudC50eCArPSB0cmFuc2Zlcl9zaXplOworCWRiZygiQVRFTjIwMTFfcG9ydC0+aWNvdW50LnR4IGlzICVkOiIsIEFURU4yMDExX3BvcnQtPmljb3VudC50eCk7CisKK2V4aXQ6CisJcmV0dXJuIGJ5dGVzX3NlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJaW50IHN0YXR1czsKKworCWRiZygiLSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyIsICJwb3J0IG5vdCBvcGVuZWQiKTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiAiKTsKKworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RvcCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CisJCXN0YXR1cyA9IEFURU4yMDExX3dyaXRlKHR0eSwgcG9ydCwgJnN0b3BfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgJj0gfk1DUl9SVFM7CisJCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJCSAgICAgIEFURU4yMDExX3BvcnQtPnNoYWRvd01DUik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWludCBzdGF0dXM7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiAiKTsKKworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RhcnQgY2hhcmFjdGVyICovCisJaWYgKElfSVhPRkYodHR5KSkgeworCQl1bnNpZ25lZCBjaGFyIHN0YXJ0X2NoYXIgPSBTVEFSVF9DSEFSKHR0eSk7CisJCXN0YXR1cyA9IEFURU4yMDExX3dyaXRlKHR0eSwgcG9ydCwgJnN0YXJ0X2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApCisJCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCB0b2dnbGUgdGhhdCBsaW5lICovCisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSIHw9IE1DUl9SVFM7CisJCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJCSAgICAgIEFURU4yMDExX3BvcnQtPnNoYWRvd01DUik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCV9fdTE2IG1zcjsKKwlfX3UxNiBtY3I7CisJLyogdW5zaWduZWQgaW50IG1jcjsgKi8KKwlpbnQgc3RhdHVzID0gMDsKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gZ2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX1NUQVRVU19SRUdJU1RFUiwgJm1zcik7CisJc3RhdHVzID0gZ2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsICZtY3IpOworCS8qIG1jciA9IEFURU4yMDExX3BvcnQtPnNoYWRvd01DUjsgKi8KKwkvKiBDT01NRU5UMjogdGhlIEZhbGxvd2luZyB0aHJlZSBsaW5lIGFyZSBjb21tZW50ZWQgZm9yIHVwZGF0aW5nIG9ubHkgTVNSIHZhbHVlcyAqLworCXJlc3VsdCA9ICgobWNyICYgTUNSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQorCSAgICB8ICgobWNyICYgTUNSX1JUUykgPyBUSU9DTV9SVFMgOiAwKQorCSAgICB8ICgobWNyICYgTUNSX0xPT1BCQUNLKSA/IFRJT0NNX0xPT1AgOiAwKQorCSAgICB8ICgobXNyICYgQVRFTjIwMTFfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQorCSAgICB8ICgobXNyICYgQVRFTjIwMTFfTVNSX0NEKSA/IFRJT0NNX0NBUiA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfUkkpID8gVElPQ01fUkkgOiAwKQorCSAgICB8ICgobXNyICYgQVRFTjIwMTFfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKTsKKworCWRiZygiJXMgLSAweCUwNFgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwl1bnNpZ25lZCBpbnQgbWNyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWNyID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJbWNyICY9IH5NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJbWNyICY9IH5NQ1JfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX0xPT1ApCisJCW1jciAmPSB+TUNSX0xPT1BCQUNLOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IE1DUl9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IE1DUl9EVFI7CisJaWYgKHNldCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgPSBtY3I7CisKKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgbWNyKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoInNldHRpbmcgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiBGYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGNmbGFnOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisKKwlkYmcoIkFURU4yMDExX3NldF90ZXJtaW9zOiBTVEFSVCIpOworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJzZXR0aW5nIHRlcm1pb3MgLSAiKTsKKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJaWYgKCFjZmxhZykgeworCQlkYmcoIiVzICVzIiwgX19mdW5jX18sICJjZmxhZyBpcyBOVUxMIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgorCQkgICAgKFJFTEVWQU5UX0lGTEFHKHR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0KKwkJICAgICBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlkYmcoIiVzIiwgIk5vdGhpbmcgdG8gY2hhbmdlIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlkYmcoIiVzIC0gY2xmYWcgJTA4eCBpZmxhZyAlMDh4IiwgX19mdW5jX18sCisJICAgIHR0eS0+dGVybWlvcy0+Y19jZmxhZywgUkVMRVZBTlRfSUZMQUcodHR5LT50ZXJtaW9zLT5jX2lmbGFnKSk7CisKKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJZGJnKCIlcyAtIG9sZCBjbGZhZyAlMDh4IG9sZCBpZmxhZyAlMDh4IiwgX19mdW5jX18sCisJCSAgICBvbGRfdGVybWlvcy0+Y19jZmxhZywgUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKTsKKwl9CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyogY2hhbmdlIHRoZSBwb3J0IHNldHRpbmdzIHRvIHRoZSBuZXcgb25lcyBzcGVjaWZpZWQgKi8KKworCUFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzKHR0eSwgQVRFTjIwMTFfcG9ydCwgb2xkX3Rlcm1pb3MpOworCisJaWYgKCFBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYikgeworCQlkYmcoIiVzIiwgIlVSQiBLSUxMRUQgISEhISEiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnCisJCQkgICAgKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkIiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydCwKKwkJCXVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCWludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKworCWNvdW50ID0gQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyKHR0eSk7CisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtLSBFbXB0eSIsIF9fZnVuY19fKTsKKwkJcmVzdWx0ID0gVElPQ1NFUl9URU1UOworCX0KKworCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X251bWJlcl9ieXRlc19hdmFpbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCSAgc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkJICB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKworCWlmICghdHR5KQorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCisJcmVzdWx0ID0gdHR5LT5yZWFkX2NudDsKKworCWRiZygiJXMoJWQpID0gJWQiLCBfX2Z1bmNfXywgQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyLCByZXN1bHQpOworCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHNldF9tb2RlbV9pbmZvKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWNyOworCXVuc2lnbmVkIGludCBhcmc7CisJX191MTYgRGF0YTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKilBVEVOMjAxMV9wb3J0LT5wb3J0OworCisJbWNyID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmcsIHZhbHVlLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNQklTOgorCQlpZiAoYXJnICYgVElPQ01fUlRTKQorCQkJbWNyIHw9IE1DUl9SVFM7CisJCWlmIChhcmcgJiBUSU9DTV9EVFIpCisJCQltY3IgfD0gTUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0xPT1ApCisJCQltY3IgfD0gTUNSX0xPT1BCQUNLOworCQlicmVhazsKKworCWNhc2UgVElPQ01CSUM6CisJCWlmIChhcmcgJiBUSU9DTV9SVFMpCisJCQltY3IgJj0gfk1DUl9SVFM7CisJCWlmIChhcmcgJiBUSU9DTV9EVFIpCisJCQltY3IgJj0gfk1DUl9SVFM7CisJCWlmIChhcmcgJiBUSU9DTV9MT09QKQorCQkJbWNyICY9IH5NQ1JfTE9PUEJBQ0s7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTVNFVDoKKwkJLyogdHVybiBvZmYgdGhlIFJUUyBhbmQgRFRSIGFuZCBMT09QQkFDSworCQkgKiBhbmQgdGhlbiBvbmx5IHR1cm4gb24gd2hhdCB3YXMgYXNrZWQgdG8gKi8KKwkJbWNyICY9IH4oTUNSX1JUUyB8IE1DUl9EVFIgfCBNQ1JfTE9PUEJBQ0spOworCQltY3IgfD0gKChhcmcgJiBUSU9DTV9SVFMpID8gTUNSX1JUUyA6IDApOworCQltY3IgfD0gKChhcmcgJiBUSU9DTV9EVFIpID8gTUNSX0RUUiA6IDApOworCQltY3IgfD0gKChhcmcgJiBUSU9DTV9MT09QKSA/IE1DUl9MT09QQkFDSyA6IDApOworCQlicmVhazsKKwl9CisKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgPSBtY3I7CisKKwlEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoInNldHRpbmcgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiBGYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9tb2RlbV9pbmZvKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJICB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwlfX3UxNiBtc3I7CisJdW5zaWduZWQgaW50IG1jciA9IEFURU4yMDExX3BvcnQtPnNoYWRvd01DUjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZ2V0X3VhcnRfcmVnKEFURU4yMDExX3BvcnQtPnBvcnQsIE1PREVNX1NUQVRVU19SRUdJU1RFUiwgJm1zcik7CisJcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCS8qIDB4MDAyICovCisJICAgIHwoKG1jciAmIE1DUl9SVFMpID8gVElPQ01fUlRTIDogMCkJLyogMHgwMDQgKi8KKwkgICAgfCgobXNyICYgQVRFTjIwMTFfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQkvKiAweDAyMCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfQ0QpID8gVElPQ01fQ0FSIDogMCkJLyogMHgwNDAgKi8KKwkgICAgfCgobXNyICYgQVRFTjIwMTFfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkJLyogMHgwODAgKi8KKwkgICAgfCgobXNyICYgQVRFTjIwMTFfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKTsJLyogMHgxMDAgKi8KKworCWRiZygiJXMgLS0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKworCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmICghcmV0aW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCisJdG1wLnR5cGUgPSBQT1JUXzE2NTUwQTsKKwl0bXAubGluZSA9IEFURU4yMDExX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisJaWYgKHRtcC5saW5lID09IFNFUklBTF9UVFlfTk9fTUlOT1IpCisJCXRtcC5saW5lID0gMDsKKwl0bXAucG9ydCA9IEFURU4yMDExX3BvcnQtPnBvcnQtPm51bWJlcjsKKwl0bXAuaXJxID0gMDsKKwl0bXAuZmxhZ3MgPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUgPSBOVU1fVVJCUyAqIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKwl0bXAuYmF1ZF9iYXNlID0gOTYwMDsKKwl0bXAuY2xvc2VfZGVsYXkgPSA1ICogSFo7CisJdG1wLmNsb3Npbmdfd2FpdCA9IDMwICogSFo7CisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjbm93OworCXN0cnVjdCBhc3luY19pY291bnQgY3ByZXY7CisJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgaWNvdW50OworCWludCBBVEVOcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgX191c2VyICp1c2VyX2FyZyA9ICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCV4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCS8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlICovCisKKwljYXNlIFRJT0NJTlE6CisJCWRiZygiJXMgKCVkKSBUSU9DSU5RIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKHR0eSwgQVRFTjIwMTFfcG9ydCwgdXNlcl9hcmcpOworCQlicmVhazsKKworCWNhc2UgVElPQ09VVFE6CisJCWRiZygiJXMgKCVkKSBUSU9DT1VUUSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gcHV0X3VzZXIoQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyKHR0eSksIHVzZXJfYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NTRVJHRVRMU1I6CisJCWRiZygiJXMgKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfbHNyX2luZm8odHR5LCBBVEVOMjAxMV9wb3J0LCB1c2VyX2FyZyk7CisJCXJldHVybiAwOworCisJY2FzZSBUSU9DTUJJUzoKKwljYXNlIFRJT0NNQklDOgorCWNhc2UgVElPQ01TRVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTVNFVC9USU9DTUJJQy9USU9DTVNFVCIsIF9fZnVuY19fLAorCQkgICAgcG9ydC0+bnVtYmVyKTsKKwkJQVRFTnJldCA9IHNldF9tb2RlbV9pbmZvKEFURU4yMDExX3BvcnQsIGNtZCwgdXNlcl9hcmcpOworCQlyZXR1cm4gQVRFTnJldDsKKworCWNhc2UgVElPQ01HRVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUdFVCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gZ2V0X21vZGVtX2luZm8oQVRFTjIwMTFfcG9ydCwgdXNlcl9hcmcpOworCisJY2FzZSBUSU9DR1NFUklBTDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NHU0VSSUFMIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfc2VyaWFsX2luZm8oQVRFTjIwMTFfcG9ydCwKKwkJCQkgICAgICAgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CisKKwljYXNlIFRJT0NTU0VSSUFMOgorCQlkYmcoIiVzICglZCkgVElPQ1NTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCWNwcmV2ID0gQVRFTjIwMTFfcG9ydC0+aWNvdW50OworCQl3aGlsZSAoMSkgeworCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQljbm93ID0gQVRFTjIwMTFfcG9ydC0+aWNvdW50OworCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKKwkJCSAgICBjbm93LmRjZCA9PSBjcHJldi5kY2QgJiYgY25vdy5jdHMgPT0gY3ByZXYuY3RzKQorCQkJCXJldHVybiAtRUlPOwkvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAorCQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSkpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWNwcmV2ID0gY25vdzsKKwkJfQorCQkvKiBOT1RSRUFDSEVEICovCisJCWJyZWFrOworCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJY25vdyA9IEFURU4yMDExX3BvcnQtPmljb3VudDsKKwkJaWNvdW50LmN0cyA9IGNub3cuY3RzOworCQlpY291bnQuZHNyID0gY25vdy5kc3I7CisJCWljb3VudC5ybmcgPSBjbm93LnJuZzsKKwkJaWNvdW50LmRjZCA9IGNub3cuZGNkOworCQlpY291bnQucnggPSBjbm93LnJ4OworCQlpY291bnQudHggPSBjbm93LnR4OworCQlpY291bnQuZnJhbWUgPSBjbm93LmZyYW1lOworCQlpY291bnQub3ZlcnJ1biA9IGNub3cub3ZlcnJ1bjsKKwkJaWNvdW50LnBhcml0eSA9IGNub3cucGFyaXR5OworCQlpY291bnQuYnJrID0gY25vdy5icms7CisJCWljb3VudC5idWZfb3ZlcnJ1biA9IGNub3cuYnVmX292ZXJydW47CisKKwkJZGJnKCIlcyAoJWQpIFRJT0NHSUNPVU5UIFJYPSVkLCBUWD0lZCIsIF9fZnVuY19fLAorCQkgICAgcG9ydC0+bnVtYmVyLCBpY291bnQucngsIGljb3VudC50eCk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaWNvdW50LCBzaXplb2YoaWNvdW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX2NhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoaW50IGJhdWRSYXRlLCBpbnQgKmRpdmlzb3IsCisJCQkJCSAgIF9fdTE2ICpjbGtfc2VsX3ZhbCkKK3sKKwlkYmcoIiVzIC0gJWQiLCBfX2Z1bmNfXywgYmF1ZFJhdGUpOworCisJaWYgKGJhdWRSYXRlIDw9IDExNTIwMCkgeworCQkqZGl2aXNvciA9IDExNTIwMCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDA7CisJfQorCWlmICgoYmF1ZFJhdGUgPiAxMTUyMDApICYmIChiYXVkUmF0ZSA8PSAyMzA0MDApKSB7CisJCSpkaXZpc29yID0gMjMwNDAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4MTA7CisJfSBlbHNlIGlmICgoYmF1ZFJhdGUgPiAyMzA0MDApICYmIChiYXVkUmF0ZSA8PSA0MDMyMDApKSB7CisJCSpkaXZpc29yID0gNDAzMjAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4MjA7CisJfSBlbHNlIGlmICgoYmF1ZFJhdGUgPiA0MDMyMDApICYmIChiYXVkUmF0ZSA8PSA0NjA4MDApKSB7CisJCSpkaXZpc29yID0gNDYwODAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4MzA7CisJfSBlbHNlIGlmICgoYmF1ZFJhdGUgPiA0NjA4MDApICYmIChiYXVkUmF0ZSA8PSA4MDY0MDApKSB7CisJCSpkaXZpc29yID0gODA2NDAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4NDA7CisJfSBlbHNlIGlmICgoYmF1ZFJhdGUgPiA4MDY0MDApICYmIChiYXVkUmF0ZSA8PSA5MjE2MDApKSB7CisJCSpkaXZpc29yID0gOTIxNjAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4NTA7CisJfSBlbHNlIGlmICgoYmF1ZFJhdGUgPiA5MjE2MDApICYmIChiYXVkUmF0ZSA8PSAxNTcyODY0KSkgeworCQkqZGl2aXNvciA9IDE1NzI4NjQgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHg2MDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDE1NzI4NjQpICYmIChiYXVkUmF0ZSA8PSAzMTQ1NzI4KSkgeworCQkqZGl2aXNvciA9IDMxNDU3MjggLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHg3MDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlKHN0cnVjdCBBVEVOSU5UTF9wb3J0CisJCQkJCSAgICAgKkFURU4yMDExX3BvcnQsIGludCBiYXVkUmF0ZSkKK3sKKwlpbnQgZGl2aXNvciA9IDA7CisJaW50IHN0YXR1czsKKwlfX3UxNiBEYXRhOworCXVuc2lnbmVkIGNoYXIgbnVtYmVyOworCV9fdTE2IGNsa19zZWxfdmFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IG1pbm9yOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopQVRFTjIwMTFfcG9ydC0+cG9ydDsKKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiAiKTsKKworCW1pbm9yID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCW51bWJlciA9IEFURU4yMDExX3BvcnQtPnBvcnQtPm51bWJlciAtIG1pbm9yOworCisJZGJnKCIlcyAtIHBvcnQgPSAlZCwgYmF1ZCA9ICVkIiwgX19mdW5jX18sCisJICAgIEFURU4yMDExX3BvcnQtPnBvcnQtPm51bWJlciwgYmF1ZFJhdGUpOworCS8qIHJlc2V0IGNsa191YXJ0X3NlbCBpbiBzcHJlZ09mZnNldCAqLworCWlmIChiYXVkUmF0ZSA+IDExNTIwMCkgeworI2lmZGVmIEhXX2Zsb3dfY29udHJvbAorCQkvKgorCQkgKiBOT1RFOiBuZWVkIHRvIHNlZSB0aGUgcHRoZXIgcmVnaXN0ZXIgdG8gbW9kaWZ5CisJCSAqIHNldHRpbmcgaC93IGZsb3cgY29udHJvbCBiaXQgdG8gMTsKKwkJICovCisJCS8qIERhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7ICovCisJCURhdGEgPSAweDJiOworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgPSBEYXRhOworCQlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisjZW5kaWYKKworCX0gZWxzZSB7CisjaWZkZWYgSFdfZmxvd19jb250cm9sCisJCS8qIHNldHRpbmcgaC93IGZsb3cgY29udHJvbCBiaXQgdG8gMDsgKi8KKwkJLyogRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd01DUjsgKi8KKwkJRGF0YSA9IDB4YjsKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKKwkJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIHNwcmVnIGZhaWxlZCBpbiBzZXRfc2VyaWFsX2JhdWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisKKwl9CisKKwlpZiAoMSkJCQkvKiBiYXVkUmF0ZSA8PSAxMTUyMDApICovIHsKKwkJY2xrX3NlbF92YWwgPSAweDA7CisJCURhdGEgPSAweDA7CisJCXN0YXR1cyA9CisJCSAgICBBVEVOMjAxMV9jYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGJhdWRSYXRlLCAmZGl2aXNvciwKKwkJCQkJCSAgICAmY2xrX3NlbF92YWwpOworCQlzdGF0dXMgPSBnZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsICZEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygicmVhZGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJRGF0YSA9IChEYXRhICYgMHg4ZikgfCBjbGtfc2VsX3ZhbDsKKwkJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJLyogQ2FsY3VsYXRlIHRoZSBEaXZpc29yICovCisKKwkJaWYgKHN0YXR1cykgeworCQkJZXJyKCIlcyAtIGJhZCBiYXVkIHJhdGUiLCBfX2Z1bmNfXyk7CisJCQlkYmcoIiVzIiwgImJhZCBiYXVkIHJhdGUiKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisJCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgfCBTRVJJQUxfTENSX0RMQUI7CisJCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CisJCXNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJCS8qIFdyaXRlIHRoZSBkaXZpc29yICovCisJCURhdGEgPSAodW5zaWduZWQgY2hhcikoZGl2aXNvciAmIDB4ZmYpOworCQlkYmcoInNldF9zZXJpYWxfYmF1ZCBWYWx1ZSB0byB3cml0ZSBETEwgaXMgJXgiLCBEYXRhKTsKKwkJc2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTFNCLCBEYXRhKTsKKworCQlEYXRhID0gKHVuc2lnbmVkIGNoYXIpKChkaXZpc29yICYgMHhmZjAwKSA+PiA4KTsKKwkJZGJnKCJzZXRfc2VyaWFsX2JhdWQgVmFsdWUgdG8gd3JpdGUgRExNIGlzICV4IiwgRGF0YSk7CisJCXNldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX01TQiwgRGF0YSk7CisKKwkJLyogRGlzYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaCAqLworCQlEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSICYgflNFUklBTF9MQ1JfRExBQjsKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKwkJc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkgIHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJaW50IGJhdWQ7CisJdW5zaWduZWQgY2ZsYWc7CisJdW5zaWduZWQgaWZsYWc7CisJX191OCBsRGF0YTsKKwlfX3U4IGxQYXJpdHk7CisJX191OCBsU3RvcDsKKwlpbnQgc3RhdHVzOworCV9fdTE2IERhdGE7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopQVRFTjIwMTFfcG9ydC0+cG9ydDsKKworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIEFURU4yMDExX3BvcnQtPnBvcnQtPm51bWJlcik7CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoIXR0eSkgfHwgKCF0dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiAiKTsKKworCWxEYXRhID0gTENSX0JJVFNfODsKKwlsU3RvcCA9IExDUl9TVE9QXzE7CisJbFBhcml0eSA9IExDUl9QQVJfTk9ORTsKKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCisJLyogQ2hhbmdlIHRoZSBudW1iZXIgb2YgYml0cyAqLworCisJLyogQ09NTUVOVDE6IHRoZSBiZWxvdyBMaW5lImlmKGNmbGFnICYgQ1NJWkUpIiBpcyBhZGRlZCBmb3IgdGhlIGVycm9ycyB3ZSBnZXQgZm9yIHNlcmlhbCBsb29wIGRhdGEgdGVzdCBpLmUgc2VyaWFsX2xvb3BiYWNrLnBsIC12ICovCisJLyogaWYoY2ZsYWcgJiBDU0laRSkgKi8KKwl7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCWxEYXRhID0gTENSX0JJVFNfNTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1M2OgorCQkJbERhdGEgPSBMQ1JfQklUU182OworCQkJYnJlYWs7CisKKwkJY2FzZSBDUzc6CisJCQlsRGF0YSA9IExDUl9CSVRTXzc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CisJCQlsRGF0YSA9IExDUl9CSVRTXzg7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBDaGFuZ2UgdGhlIFBhcml0eSBiaXQgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQlsUGFyaXR5ID0gTENSX1BBUl9PREQ7CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gb2RkIiwgX19mdW5jX18pOworCQl9IGVsc2UgeworCQkJbFBhcml0eSA9IExDUl9QQVJfRVZFTjsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19mdW5jX18pOworCQl9CisKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gcGFyaXR5ID0gbm9uZSIsIF9fZnVuY19fKTsKKwl9CisKKwlpZiAoY2ZsYWcgJiBDTVNQQVIpCisJCWxQYXJpdHkgPSBsUGFyaXR5IHwgMHgyMDsKKworCS8qIENoYW5nZSB0aGUgU3RvcCBiaXQgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJbFN0b3AgPSBMQ1JfU1RPUF8yOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlsU3RvcCA9IExDUl9TVE9QXzE7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOworCX0KKworCS8qIFVwZGF0ZSB0aGUgTENSIHdpdGggdGhlIGNvcnJlY3QgdmFsdWUgKi8KKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgJj0KKwkgICAgfihMQ1JfQklUU19NQVNLIHwgTENSX1NUT1BfTUFTSyB8IExDUl9QQVJfTUFTSyk7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSIHw9IChsRGF0YSB8IGxQYXJpdHkgfCBsU3RvcCk7CisKKwlkYmcKKwkgICAgKCJBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgaXMgJXgiLAorCSAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSKTsKKwkvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KKwlEYXRhID0gMHgwMDsKKwlzZXRfdWFydF9yZWcocG9ydCwgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgRGF0YSk7CisKKwlEYXRhID0gMHgwMDsKKwlzZXRfdWFydF9yZWcocG9ydCwgRklGT19DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweGNmOworCXNldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJLyogU2VuZCB0aGUgdXBkYXRlZCBMQ1IgdmFsdWUgdG8gdGhlIEFURU4yMDExICovCisJRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUjsKKworCXNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJRGF0YSA9IDB4MDBiOworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IERhdGE7CisJc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCURhdGEgPSAweDAwYjsKKwlzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwkvKiBzZXQgdXAgdGhlIE1DUiByZWdpc3RlciBhbmQgc2VuZCBpdCB0byB0aGUgQVRFTjIwMTEgKi8KKworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CisJaWYgKGNmbGFnICYgQ0JBVUQpCisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiB8PSAoTUNSX0RUUiB8IE1DUl9SVFMpOworCisJaWYgKGNmbGFnICYgQ1JUU0NUUykKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSIHw9IChNQ1JfWE9OX0FOWSk7CisJZWxzZQorCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgJj0gfihNQ1JfWE9OX0FOWSk7CisKKwlEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOworCXNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCS8qIERldGVybWluZSBkaXZpc29yIGJhc2VkIG9uIGJhdWQgcmF0ZSAqLworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCisJaWYgKCFiYXVkKSB7CisJCS8qIHBpY2sgYSBkZWZhdWx0LCBhbnkgZGVmYXVsdC4uLiAqLworCQlkYmcoIiVzIiwgIlBpY2tlZCBkZWZhdWx0IGJhdWQuLi4iKTsKKwkJYmF1ZCA9IDk2MDA7CisJfQorCisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQpOworCXN0YXR1cyA9IEFURU4yMDExX3NlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZShBVEVOMjAxMV9wb3J0LCBiYXVkKTsKKworCS8qIEVuYWJsZSBJbnRlcnJ1cHRzICovCisJRGF0YSA9IDB4MGM7CisJc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOworCisJaWYgKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCUFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnCisJCQkgICAgKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkIiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJfQorCX0KKwlkYmcKKwkgICAgKCJBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgaXMgRW5kICV4IiwKKwkgICAgIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKworCV9fdTE2IERhdGEgPSAweDAwOworCWludCByZXQgPSAwOworCWludCBBVEVOMjAxMV8yb3I0cG9ydHM7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAgQVRFTl9SRFJFUSwgQVRFTl9SRF9SVFlQRSwgMCwgR1BJT19SRUdJU1RFUiwKKwkJCSAgICAgICZEYXRhLCBWRU5ET1JfUkVBRF9MRU5HVEgsIEFURU5fV0RSX1RJTUVPVVQpOworCisvKiBnaG9zdGd1bTogaGVyZSBpcyB3aGVyZSB0aGUgcHJvYmxlbSBhcHBlYXJzIHRvIGJldCAqLworLyogV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBhcmUgbmVlZGVkPyAqLworLyogR3JlZyB1c2VkIHRoZSBzZXJpYWwtPnR5cGUtPm51bV9wb3J0cz0yICovCisvKiBCdXQgdGhlIGNvZGUgaW4gdGhlIEFURU4yMDExX29wZW4gcmVsaWVzIG9uIHNlcmlhbC0+bnVtX3BvcnRzPTIgKi8KKwlpZiAoKERhdGEgJiAweDAxKSA9PSAwKSB7CisJCUFURU4yMDExXzJvcjRwb3J0cyA9IDI7CisJCXNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzID0gMjsKKwkJc2VyaWFsLT5udW1fcG9ydHMgPSAyOworCX0KKwkvKiBlbHNlIGlmKHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzID09IDkpICovCisJZWxzZSB7CisJCUFURU4yMDExXzJvcjRwb3J0cyA9IDQ7CisJCXNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzID0gNDsKKwkJc2VyaWFsLT5udW1fcG9ydHMgPSA0OworCisJfQorCisJcmV0dXJuIEFURU4yMDExXzJvcjRwb3J0czsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqQVRFTjIwMTFfc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJaW50IGksIHN0YXR1czsKKwlpbnQgbWlub3I7CisKKwlfX3UxNiBEYXRhOworCWRiZygiJXMiLCAiIEFURU4yMDExX3N0YXJ0dXAgOmVudGVyaW5nLi4uLi4uLi4uLiIpOworCisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyIsICJJbnZhbGlkIEhhbmRsZXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldiA9IHNlcmlhbC0+ZGV2OworCisJZGJnKCIlcyIsICJFbnRlcmluZy4uLiIpOworCisJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KKwlBVEVOMjAxMV9zZXJpYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgQVRFTklOVExfc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKEFURU4yMDExX3NlcmlhbCA9PSBOVUxMKSB7CisJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiByZXNldHRpbmcgdGhlIHByaXZhdGUgc3RydWN0dXJlIGZpZWxkIHZhbHVlcyB0byB6ZXJvICovCisJbWVtc2V0KEFURU4yMDExX3NlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCBBVEVOSU5UTF9zZXJpYWwpKTsKKworCUFURU4yMDExX3NlcmlhbC0+c2VyaWFsID0gc2VyaWFsOworCS8qIGluaXRpbGl6ZSBzdGF0dXMgcG9sbGluZyBmbGFnIHRvIDAgKi8KKwlBVEVOMjAxMV9zZXJpYWwtPnN0YXR1c19wb2xsaW5nX3N0YXJ0ZWQgPSAwOworCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIEFURU4yMDExX3NlcmlhbCk7CisJQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPQorCSAgICBBVEVOMjAxMV9jYWxjX251bV9wb3J0cyhzZXJpYWwpOworCS8qIHdlIHNldCB1cCB0aGUgcG9pbnRlcnMgdG8gdGhlIGVuZHBvaW50cyBpbiB0aGUgQVRFTjIwMTFfb3BlbiAqCisJICogZnVuY3Rpb24sIGFzIHRoZSBzdHJ1Y3R1cmVzIGFyZW4ndCBjcmVhdGVkIHlldC4gICAgICAgICAgICAgKi8KKworCS8qIHNldCB1cCBwb3J0IHByaXZhdGUgc3RydWN0dXJlcyAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCUFURU4yMDExX3BvcnQgPQorCQkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IEFURU5JTlRMX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkgeworCQkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCQl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CisJCQlrZnJlZShBVEVOMjAxMV9zZXJpYWwpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KEFURU4yMDExX3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgQVRFTklOVExfcG9ydCkpOworCisJCS8qCisJCSAqIEluaXRpYWxpemUgYWxsIHBvcnQgaW50ZXJydXB0IGVuZCBwb2ludCB0byBwb3J0IDAKKwkJICogaW50IGVuZHBvaW50LiBPdXIgZGV2aWNlIGhhcyBvbmx5IG9uZSBpbnRlcnJ1cHQgZW5kIHBvaW50CisJCSAqIGNvbW1hbiB0byBhbGwgcG9ydAorCQkgKi8KKwkJLyogc2VyaWFsLT5wb3J0W2ldLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOyAqLworCisJCUFURU4yMDExX3BvcnQtPnBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIEFURU4yMDExX3BvcnQpOworCisJCW1pbm9yID0gc2VyaWFsLT5wb3J0W2ldLT5zZXJpYWwtPm1pbm9yOworCQlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJCW1pbm9yID0gMDsKKwkJQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gPQorCQkgICAgKChzZXJpYWwtPnBvcnRbaV0tPm51bWJlciAtIG1pbm9yKSArIDEpOworCisJCWlmIChBVEVOMjAxMV9wb3J0LT5wb3J0X251bSA9PSAxKSB7CisJCQlBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCA9IDB4MDsKKwkJCUFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweDE7CisJCQlBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDQ7CisJCX0gZWxzZSBpZiAoKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtID09IDIpCisJCQkgICAmJiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0KKwkJCSAgICAgICA0KSkgeworCQkJQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQgPSAweDg7CisJCQlBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0ID0gMHg5OworCQkJQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ID0gMHgxNjsKKwkJfSBlbHNlIGlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gPT0gMikKKwkJCSAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PQorCQkJICAgICAgIDIpKSB7CisJCQlBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCA9IDB4YTsKKwkJCUFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweGI7CisJCQlBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDE5OworCQl9IGVsc2UgaWYgKChBVEVOMjAxMV9wb3J0LT5wb3J0X251bSA9PSAzKQorCQkJICAgJiYgKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09CisJCQkgICAgICAgNCkpIHsKKwkJCUFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHhhOworCQkJQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4YjsKKwkJCUFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCA9IDB4MTk7CisJCX0gZWxzZSBpZiAoKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtID09IDQpCisJCQkgICAmJiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0KKwkJCSAgICAgICA0KSkgeworCQkJQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQgPSAweGM7CisJCQlBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0ID0gMHhkOworCQkJQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ID0gMHgxYzsKKwkJfQorCisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIEFURU4yMDExX3BvcnQpOworCisJCS8qIGVuYWJsZSByeF9kaXNhYmxlIGJpdCBpbiBjb250cm9sIHJlZ2lzdGVyICovCisKKwkJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKKwkJCQkgICAgICBBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIlJlYWRpbmcgQ29udHJvbFJlZyBmYWlsZWQgc3RhdHVzLTB4JXgiLAorCQkJCXN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcKKwkJCSAgICAoIkNvbnRyb2xSZWcgUmVhZGluZyBzdWNjZXNzIHZhbCBpcyAleCwgc3RhdHVzJWQiLAorCQkJICAgICBEYXRhLCBzdGF0dXMpOworCQlEYXRhIHw9IDB4MDg7CS8qIHNldHRpbmcgZHJpdmVyIGRvbmUgYml0ICovCisJCURhdGEgfD0gMHgwNDsJLyogc3AxX2JpdCB0byBoYXZlIGN0cyBjaGFuZ2UgcmVmbGVjdCBpbiBtb2RlbSBzdGF0dXMgcmVnICovCisKKwkJLyogRGF0YSB8PSAweDIwOyAqLwkvKiByeF9kaXNhYmxlIGJpdCAqLworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSAgICAgIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnCisJCQkgICAgKCJXcml0aW5nIENvbnRyb2xSZWcgZmFpbGVkKHJ4X2Rpc2FibGUpIHN0YXR1cy0weCV4IiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZworCQkJICAgICgiQ29udHJvbFJlZyBXcml0aW5nIHN1Y2Nlc3MocnhfZGlzYWJsZSkgc3RhdHVzJWQiLAorCQkJICAgICBzdGF0dXMpOworCisJCS8qCisJCSAqIFdyaXRlIGRlZmF1bHQgdmFsdWVzIGluIERDUiAoaS5lIDB4MDEgaW4gRENSMCwgMHgwNSBpbiBEQ1IyCisJCSAqIGFuZCAweDI0IGluIERDUjMKKwkJICovCisJCURhdGEgPSAweDAxOworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSAgICAgIChfX3UxNikoQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ICsgMCksCisJCQkJICAgICAgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgRENSMCBmYWlsZWQgc3RhdHVzLTB4JXgiLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJZGJnKCJEQ1IwIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsIHN0YXR1cyk7CisKKwkJRGF0YSA9IDB4MDU7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJICAgICAgKF9fdTE2KShBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgKyAxKSwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBEQ1IxIGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIkRDUjEgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwgc3RhdHVzKTsKKworCQlEYXRhID0gMHgyNDsKKwkJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKKwkJCQkgICAgICAoX191MTYpKEFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCArIDIpLAorCQkJCSAgICAgIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIERDUjIgZmFpbGVkIHN0YXR1cy0weCV4Iiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiRENSMiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisJCS8qIHdyaXRlIHZhbHVlcyBpbiBjbGtzdGFydDB4MCBhbmQgY2xrbXVsdGkgMHgyMCAqLworCQlEYXRhID0gMHgwOworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLCBDTEtfU1RBUlRfVkFMVUVfUkVHSVNURVIsCisJCQkJICAgICAgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcKKwkJCSAgICAoIldyaXRpbmcgQ0xLX1NUQVJUX1ZBTFVFX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkgICAgIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcKKwkJCSAgICAoIkNMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLAorCQkJICAgICBzdGF0dXMpOworCisJCURhdGEgPSAweDIwOworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLCBDTEtfTVVMVElfUkVHSVNURVIsCisJCQkJICAgICAgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcKKwkJCSAgICAoIldyaXRpbmcgQ0xLX01VTFRJX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkgICAgIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIkNMS19NVUxUSV9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLAorCQkJCXN0YXR1cyk7CisKKwkJLyogWmVybyBMZW5ndGggZmxhZyByZWdpc3RlciAqLworCQlpZiAoKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtICE9IDEpCisJCSAgICAmJiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gMikpIHsKKworCQkJRGF0YSA9IDB4ZmY7CisJCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCQkgICAgICAoX191MTYpKFpMUF9SRUcxICsgKChfX3UxNilBVEVOMjAxMV9wb3J0LT5wb3J0X251bSkpLAorCQkJCQkgICAgICBEYXRhKTsKKwkJCWRiZygiWkxJUCBvZmZzZXQleCIsCisJCQkJKF9fdTE2KSAoWkxQX1JFRzEgKworCQkJCQkgKChfX3UxNikgQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0pKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRiZworCQkJCSAgICAoIldyaXRpbmcgWkxQX1JFRyVkIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkJICAgICBpICsgMiwgc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCWRiZygiWkxQX1JFRyVkIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkJCWkgKyAyLCBzdGF0dXMpOworCQl9IGVsc2UgeworCQkJRGF0YSA9IDB4ZmY7CisJCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCQkgICAgICAoX191MTYpKFpMUF9SRUcxICsgKChfX3UxNilBVEVOMjAxMV9wb3J0LT5wb3J0X251bSkgLSAweDEpLAorCQkJCQkgICAgICBEYXRhKTsKKwkJCWRiZygiWkxJUCBvZmZzZXQleCIsCisJCQkJKF9fdTE2KSAoWkxQX1JFRzEgKworCQkJCQkgKChfX3UxNikgQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0pIC0KKwkJCQkJIDB4MSkpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkYmcKKwkJCQkgICAgKCJXcml0aW5nIFpMUF9SRUclZCBmYWlsZWQgc3RhdHVzLTB4JXgiLAorCQkJCSAgICAgaSArIDEsIHN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlkYmcoIlpMUF9SRUclZCBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLAorCQkJCQlpICsgMSwgc3RhdHVzKTsKKworCQl9CisJCUFURU4yMDExX3BvcnQtPmNvbnRyb2xfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwkJQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYgPSBrbWFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKworCX0KKworCS8qIFplcm8gTGVuZ3RoIGZsYWcgZW5hYmxlICovCisJRGF0YSA9IDB4MGY7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFswXSwgWkxQX1JFRzUsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiV3JpdGluZyBaTFBfUkVHNSBmYWlsZWQgc3RhdHVzLTB4JXgiLCBzdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlCisJCWRiZygiWkxQX1JFRzUgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwgc3RhdHVzKTsKKworCS8qIHNldHRpbmcgY29uZmlndXJhdGlvbiBmZWF0dXJlIHRvIG9uZSAqLworCXVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCShfX3U4KSAweDAzLCAweDAwLCAweDAxLCAweDAwLCBOVUxMLCAweDAwLCA1ICogSFopOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCisJLyogY2hlY2sgZm9yIHRoZSBwb3J0cyB0byBiZSBjbG9zZWQsY2xvc2UgdGhlIHBvcnRzIGFuZCBkaXNjb25uZWN0ICovCisKKwkvKiBmcmVlIHByaXZhdGUgc3RydWN0dXJlIGFsbG9jYXRlZCBmb3Igc2VyaWFsIHBvcnQgICoKKwkgKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICAgICAgICAgICAgICAgICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWtmcmVlKEFURU4yMDExX3BvcnQtPmN0cmxfYnVmKTsKKwkJdXNiX2tpbGxfdXJiKEFURU4yMDExX3BvcnQtPmNvbnRyb2xfdXJiKTsKKwkJa2ZyZWUoQVRFTjIwMTFfcG9ydCk7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KKworCS8qIGZyZWUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciBzZXJpYWwgZGV2aWNlICovCisKKwlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBhdGVuX3NlcmlhbF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJhdGVuMjAxMSIsCisJCX0sCisJLmRlc2NyaXB0aW9uID0JCURSSVZFUl9ERVNDLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkub3BlbiA9CQkJQVRFTjIwMTFfb3BlbiwKKwkuY2xvc2UgPQkJQVRFTjIwMTFfY2xvc2UsCisJLndyaXRlID0JCUFURU4yMDExX3dyaXRlLAorCS53cml0ZV9yb29tID0JCUFURU4yMDExX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CUFURU4yMDExX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPQkJQVRFTjIwMTFfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJQVRFTjIwMTFfdW50aHJvdHRsZSwKKwkuY2FsY19udW1fcG9ydHMgPQlBVEVOMjAxMV9jYWxjX251bV9wb3J0cywKKworCS5pb2N0bCA9CQlBVEVOMjAxMV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJQVRFTjIwMTFfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlBVEVOMjAxMV9icmVhaywKKwkudGlvY21nZXQgPQkJQVRFTjIwMTFfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCUFURU4yMDExX3Rpb2Ntc2V0LAorCS5hdHRhY2ggPQkJQVRFTjIwMTFfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJQVRFTjIwMTFfc2h1dGRvd24sCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CUFURU4yMDExX2J1bGtfaW5fY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrID0JQVRFTjIwMTFfaW50ZXJydXB0X2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0ZW5fZHJpdmVyID0geworCS5uYW1lID0JCSJhdGVuMjAxMSIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0ZW5faW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2Igc2VyaWFsICovCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmYXRlbl9zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCisJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdXNiICovCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZhdGVuX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZhdGVuX3NlcmlhbF9kcml2ZXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0ZW5fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhdGVuX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZhdGVuX3NlcmlhbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhdGVuX2luaXQpOworbW9kdWxlX2V4aXQoYXRlbl9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IDJlYjYxMzcuLjFjNzEwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CiAKLQlwcml2ID0ga21lbV9jYWNoZV9hbGxvYyhzdHViX3ByaXZfY2FjaGUsIEdGUF9BVE9NSUMpOworCXByaXYgPSBrbWVtX2NhY2hlX3phbGxvYyhzdHViX3ByaXZfY2FjaGUsIEdGUF9BVE9NSUMpOwogCWlmICghcHJpdikgewogCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgImFsbG9jIHN0dWJfcHJpdlxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOwpAQCAtMzQyLDggKzM0Miw2IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IHN0dWJfcHJpdikpOwotCiAJcHJpdi0+c2VxbnVtID0gcGR1LT5iYXNlLnNlcW51bTsKIAlwcml2LT5zZGV2ID0gc2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKaW5kZXggMGZkMzNhNi4uZTRjNzE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0zMSw4ICszMSw3IEBACiAJY2hhciAqcyA9IG91dDsKIAlpbnQgaSA9IDA7CiAKLQlpZiAoIXRoZV9jb250cm9sbGVyIHx8ICFvdXQpCi0JCUJVRygpOworCUJVR19PTighdGhlX2NvbnRyb2xsZXIgfHwgIW91dCk7CiAKIAlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MzNiNWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLSNpZm5kZWYgX19XSU5CT05EX0JTU19GX0gKLSNkZWZpbmUgX19XSU5CT05EX0JTU19GX0gKLQotI2luY2x1ZGUgImNvcmUuaCIKLQotc3RydWN0IFBNS0lEX0luZm9ybWF0aW9uX0VsZW1lbnQ7Ci0KLS8vCi0vLyBCU1MgZGVzY3JpcHRvciBEYXRhQmFzZSBtYW5hZ2VtZW50IGdsb2JhbCBmdW5jdGlvbgotLy8KLQotdm9pZCB2QlNTZGVzY3JpcHRpb25Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdm9pZCB2QlNTZm91bmRMaXN0KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdTggYm9DaGFuRmlsdGVyKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4IENoYW5Obyk7Ci11MTYgd0JTU2FsbG9jYXRlRW50cnkoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11MTYgd0JTU0dldEVudHJ5KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdm9pZCB2U2ltcGxlSG91c2VLZWVwaW5nKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdTE2IHdCU1Nob3VzZUtlZXBpbmcoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIENsZWFyQlNTZGVzY3B0KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiBpKTsKLXUxNiB3QlNTZmluZEJzc0lEKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4ICpwYkJzc2lkKTsKLXUxNiB3QlNTZmluZERlZGljYXRlQ2FuZGlkYXRlKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU3NpZCwgdTggKnBiQnNzaWQpOwotdTE2IHdCU1NmaW5kTUFDYWRkcihzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1OCAqcGJNYWNBZGRyKTsKLXUxNiB3QlNTc2VhcmNoTUFDYWRkcihzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1OCAqcGJNYWNBZGRyLCB1OCBiYW5kKTsKLXUxNiB3QlNTYWRkU2NhbkRhdGEoc3RydWN0IHdic29mdF9wcml2ICosIHUxNiwgcHNSWERBVEEpOwotdTE2IHdCU1NVcGRhdGVTY2FuRGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYgd0Jzc0lkeCwgcHNSWERBVEEgcHNSY3ZEYXRhKTsKLXUxNiB3QlNTY3JlYXRlSUJTU2RhdGEoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgUFdCX0JTU0RFU0NSSVBUSU9OIHBzRGVzRGF0YSk7Ci12b2lkIERlc2lyZWRSYXRlMkJTU2Rlc2NyaXB0b3Ioc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgUFdCX0JTU0RFU0NSSVBUSU9OIHBzRGVzRGF0YSwKLQkJCQkJCQkgdTggKnBCYXNpY1JhdGVTZXQsIHU4IEJhc2ljUmF0ZUNvdW50LAotCQkJCQkJCSB1OCAqcE9wZXJhdGlvblJhdGVTZXQsIHU4IE9wZXJhdGlvblJhdGVDb3VudCk7Ci12b2lkIERlc2lyZWRSYXRlMkluZm9FbGVtZW50KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4CSphZGRyLCB1MTYgKmlGaWxkT2Zmc2V0LAotCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCi0JCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKLXZvaWQgQlNTQWRkSUJTU2RhdGEoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgUFdCX0JTU0RFU0NSSVBUSU9OIHBzRGVzRGF0YSk7Ci11bnNpZ25lZCBjaGFyIGJvQ21wTWFjQWRkciggdTggKiwgdTggKik7Ci11bnNpZ25lZCBjaGFyIGJvQ21wU1NJRChzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NTSUQxLCBzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NTSUQyKTsKLXUxNiB3QlNTZmluZFNTSUQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTc2lkKTsKLXUxNiB3Um9hbWluZ1F1ZXJ5KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdm9pZCB2UmF0ZVRvQml0bWFwKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiBpbmRleCk7Ci11OCBiUmF0ZVRvQml0bWFwSW5kZXgoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTggYlJhdGUpOwotdTggYkJpdG1hcFRvUmF0ZSh1OCBpKTsKLXVuc2lnbmVkIGNoYXIgYm9Jc0VSUHN0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYgaSk7Ci11bnNpZ25lZCBjaGFyIGJvQ2hlY2tDb25uZWN0KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdW5zaWduZWQgY2hhciBib0NoZWNrU2lnbmFsKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdm9pZCBBZGRJQlNTSWUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcixQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhICk7Ly9hZGRlZCBieSB3cyBmb3IgV1BBX05vbmUwNi8wMS8wNAotdm9pZCBCc3NTY2FuVXBUb0RhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIEJzc1VwVG9EYXRlKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpOwotdm9pZCBSYXRlU29ydCh1OCAqUmF0ZUFycmF5LCB1OCBudW0sIHU4IG1vZGUpOwotdm9pZCBSYXRlUmVTb3J0Rm9yU1JhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTggKlJhdGVBcnJheSwgdTggbnVtKTsKLXZvaWQgQXNzZW1ibGVfSUUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTE2IHdCc3NJZHgpOwotdm9pZCBTZXRNYXhUeFJhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci0KLXZvaWQgQ3JlYXRlV3BhSUUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTE2KiBpRmlsZE9mZnNldCwgdTggKm1zZywgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCi0JCQkJIHN0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkqIG1zZ0JvZHksIHUxNiBpTVNpbmRleCk7IC8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKLQotI2lmZGVmIF9XUEEyXwotdm9pZCBDcmVhdGVSc25JRShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYqIGlGaWxkT2Zmc2V0LCB1OCAqbXNnLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKLQkJCQkgc3RydWN0IEFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keSogbXNnQm9keSwgdTE2IGlNU2luZGV4KTsvL2FkZGVkIGJ5IFdTIDA1LzE0LzA1Ci0KLXUxNiBTZWFyY2hQbWtpZChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKLQkJCQkgICBzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudCAqIEFzc29SZXFfUE1LSUQgKTsKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc2RzY3B0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTcxZDRlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc2RzY3B0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotI2lmbmRlZiBfX1dJTkJPTkRfQlNTRFNDUFRfSAotI2RlZmluZSBfX1dJTkJPTkRfQlNTRFNDUFRfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgIm1kc19zLmgiCi0jaW5jbHVkZSAibWxtZV9zLmgiCi0KLS8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLS8vCWJzc2RzY3B0LmMKLS8vCQlCU1MgZGVzY3JpcHRvciBkYXRhIGJhc2UKLS8vCWhpc3RvcnkgOgotLy8KLS8vCURlc2NyaXB0aW9uOgotLy8JCUJTUyBkZXNjcmlwdG9yIGRhdGEgYmFzZSB3aWxsIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgc3RhdGlvbnMgYXQgdGhlCi0vLwkJc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFRoZSBmaXJzdCBlbnRyeSggcHNCU1MoMCkgKSB3aWxsIG5vdCBiZSB1c2VkIGFuZCB0aGUKLS8vCQlzZWNvbmQgb25lKCBwc0JTUygxKSApIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgotLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotCi0vLyNkZWZpbmUgTUFYX0FDQ19SU1NJX0NPVU5UCQkxMAotI2RlZmluZSBNQVhfQUNDX1JTU0lfQ09VTlQJCTYKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gQlNTIERlc2NyaXB0aW9uIHNldCBFbGVtZW50ICwgdG8gc3RvcmUgc2NhbiByZWNlaXZlZCBCZWFjb24gaW5mb3JtYXRpb24KLS8vCi0vLyBPdXIncyBkaWZmZXJzIHNsaWdodGx5IGZyb20gdGhlIHNwZWNzLiBUaGUgc3BlY2lmeSBhIFBIWV9QYXJhbWV0ZXJfU2V0LgotLy8gU2luY2Ugd2UncmUgb25seSBkb2luZyBhIERTIGRlc2lnbiByaWdodCBub3csIHdlIGp1c3QgaGF2ZSBhIERTIHN0cnVjdHVyZS4KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdHlwZWRlZiBzdHJ1Y3QgQlNTRGVzY3JpcHRpb25FbGVtZW50Ci17Ci0JdTMyCQlTbG90VmFsaWQ7Ci0JdTMyCQlQb3dlclNhdmVNb2RlOwotCVJYTEFZRVIxCVJ4TGF5ZXIxOwotCi0gICAgdTgJCWFiUGVlckFkZHJlc3NbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsgLy8gcGVlciBNQUMgQWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiA2LU9DVEVUIHZhbHVlCi0gICAgdTMyCQlkd0JnU2NhblN0YW1wOwkJLy8gQmdTY2FuIFNlcXVlbmNlIENvdW50ZXIgc3RhbXAsIHJlY29yZCBwc1JPQU0tPmR3U2NhbkNvdW50ZXIuCi0KLQl1MTYJCUJlYWNvbl9QZXJpb2Q7Ci0JdTE2CQl3QVRJTV9XaW5kb3c7Ci0KLSAgICB1OAkJYWJCc3NJRFsgTUFDX0FERFJfTEVOR1RIICsgMiBdOwkJCQkvLyA2QgotCi0gICAgdTgJCWJCc3NUeXBlOwotICAgIHU4CQlEVElNX1BlcmlvZDsgICAgICAgIC8vIDEgb2N0ZXQgdXN1YWxseSBmcm9tIFRJTSBlbGVtZW50LCBpZiBwcmVzZW50Ci0JdTgJCWJvSW5UaW1lckhhbmRsZXI7Ci0JdTgJCWJvRVJQOwkJCS8vIGFuYWx5c2lzIEVSUCBvciAoZXh0ZW5kZWQpIHN1cHBvcnRlZCByYXRlIGVsZW1lbnQKLQotCXU4CQlUaW1lc3RhbXBbOF07Ci0JdTgJCUJhc2ljUmF0ZVszMl07Ci0JdTgJCU9wZXJhdGlvbmFsUmF0ZVszMl07Ci0JdTMyCQlkd0Jhc2ljUmF0ZUJpdG1hcDsJCQkvL2JpdCBtYXAsIHJldHJpZXZlIGZyb20gU3VwcG9ydGVkUmF0ZVNldAotCXUzMgkJZHdPcGVyYXRpb25hbFJhdGVCaXRtYXA7CS8vYml0IG1hcCwgcmV0cmlldmUgZnJvbSBTdXBwb3J0ZWRSYXRlU2V0IGFuZAotCQkJCQkJCQkJCS8vIEV4dGVuZGVkU3VwcG9ydGVkUmF0ZVNldAotCS8vIEZvciBSU1NJIGNhbGN1bGF0aW5nCi0JdTMyCQlIYWxSc3NpW01BWF9BQ0NfUlNTSV9DT1VOVF07IC8vIEVuY29kZS4gSXQgbXVzdCB1c2UgTUFDUk8gb2YgSEFMIHRvIGdldCB0aGUgTE5BIGFuZCBBR0MgZGF0YQotCXUzMgkJSGFsUnNzaUluZGV4OwotCi0JLy8vL0Zyb20gYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0gICAgc3RydWN0IFNTSURfRWxlbWVudCBTU0lEOwkJCQkvLyAzNEIKLQl1OAlyZXNlcnZlZF8xWyAyIF07Ci0KLSAgICBzdHJ1Y3QgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbl9FbGVtZW50ICAgQ2FwYWJpbGl0eUluZm9ybWF0aW9uOyAgLy8gMkIKLQl1OAlyZXNlcnZlZF8yWyAyIF07Ci0KLSAgICBzdHJ1Y3QgQ0ZfUGFyYW1ldGVyX1NldF9FbGVtZW50ICAgIENGX1BhcmFtZXRlcl9TZXQ7CQkvLyA4QgotICAgIHN0cnVjdCBJQlNTX1BhcmFtZXRlcl9TZXRfRWxlbWVudCAgSUJTU19QYXJhbWV0ZXJfU2V0OwkJLy8gNEIKLSAgICBzdHJ1Y3QgVElNX0VsZW1lbnQgICAgICAgICAgICAgICAgIFRJTV9FbGVtZW50X1NldDsgCQkJLy8gMjU2QgotCi0gICAgc3RydWN0IERTX1BhcmFtZXRlcl9TZXRfRWxlbWVudCAgICBEU19QYXJhbWV0ZXJfU2V0OwkJLy8gM0IKLQl1OAlyZXNlcnZlZF8zOwotCi0Jc3RydWN0IEVSUF9JbmZvcm1hdGlvbl9FbGVtZW50CQlFUlBfSW5mb3JtYXRpb25fU2V0OwkvLyAzQgotCXU4CXJlc2VydmVkXzQ7Ci0KLSAgICBzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQgICAgIFN1cHBvcnRlZFJhdGVTZXQ7CQkJLy8gMTBCCi0JdTgJcmVzZXJ2ZWRfNVsyXTsKLQotCXN0cnVjdCBFeHRlbmRlZF9TdXBwb3J0ZWRfUmF0ZXNfRWxlbWVudAlFeHRlbmRlZFN1cHBvcnRlZFJhdGVTZXQ7CS8vIDI1N0IKLQl1OAlyZXNlcnZlZF82WzNdOwotCi0JdTgJYmFuZDsKLQl1OAlyZXNlcnZlZF83WzNdOwotCi0JLy8gZm9yIE1MTUUgbW9kdWxlCi0gICAgdTE2CQl3U3RhdGU7CQkJLy8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN5c3RlbQotCXUxNgkJd0luZGV4OwkJCS8vIFRISVMgQlNTIGVsZW1lbnQgZW50cnkgaW5kZXgKLQotCXZvaWQqCXBzYWRhcHRlcjsJCS8vIHBvaW50ZXIgdG8gVEhJUyBhZGFwdGVyCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7ICAvLyBNTE1FIHRpbWVyCi0KLSAgICAvLyBBdXRoZW50aWNhdGlvbgotICAgIHUxNgkJd0F1dGhBbGdvOyAgICAgIC8vIHBlZXIgTUFDIE1MTUUgdXNlIEF1dGggYWxnb3JpdGhtLCBkZWZhdWx0IE9QRU5fQVVUSAotICAgIHUxNgkJd0F1dGhTZXFOdW07ICAgIC8vIGN1cnJlbnQgbG9jYWwgTUFDIHNlbmRvdXQgQXV0aFJlcSBzZXF1ZW5jZSBudW1iZXIKLQotCXU4CQlhdXRoX2NoYWxsZW5nZVRleHRbMTI4XTsKLQotCS8vLy9Gb3IgWFA6Ci0gICAgdTMyCQlpZXNfbGVuOwkJLy8gaW5mb3JtYXRpb24gZWxlbWVudCBsZW5ndGgKLSAgICB1OAkJaWVzWzI1Nl07CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50Ci0KLQkvLy8vRm9yIFdQQQotCXU4CVJzbkllX1R5cGVbMl07CQkvL2FkZGVkIGJ5IHdzIGZvciBkaXN0aW5ndWlzaCBXUEEgYW5kIFdQQTIgMDUvMTQvMDQKLQl1OAlSc25JZV9sZW47Ci0gICAgdTgJUnNuX051bTsKLQotICAgIC8vIHRvIHJlY29yZCB0aGUgcnNuIGNpcGhlciBzdWl0ZXMsYWRkZGVkIGJ5IHdzIDA5LzA1LzA0Ci0JU1VJVEVfU0VMRUNUT1IJCQlncm91cF9jaXBoZXI7IC8vIDRCCi0JU1VJVEVfU0VMRUNUT1IJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlc1tXTEFOX01BWF9QQUlSV0lTRV9DSVBIRVJfU1VJVEVfQ09VTlRdOwotCVNVSVRFX1NFTEVDVE9SCQkJYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07Ci0KLQl1MTYJCQkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfY291bnQ7Ci0JdTE2CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfY291bnQ7Ci0KLQl1OAkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKLQl1OAkJCQkJYXV0aF9rZXlfbWd0X3N1aXRlX3NlbGVjdGVkOwotCXU4CQkJCQlyZXNlcnZlZF84WzJdOwotCi0Jc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHJzbl9jYXBhYmlsaXRpZXM7IC8vIDJCCi0JdTgJCQkJCXJlc2VydmVkXzlbMl07Ci0KLSAgICAvL3RvIHJlY29yZCB0aGUgcnNuIGNpcGhlciBzdWl0ZXMgZm9yIFdQQTIKLSAgICAjaWZkZWYgX1dQQTJfCi0JdTMyCQkJCQlwcmVfYXV0aDsJCS8vYWRkZWQgYnkgV1MgZm9yIGRpc3Rpbmd1aXNoIGZvciAwNS8wNC8wNAotICAgIFNVSVRFX1NFTEVDVE9SCQkJd3BhMl9ncm91cF9jaXBoZXI7IC8vIDRCCi0JU1VJVEVfU0VMRUNUT1IJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07Ci0JU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2F1dGhfa2V5X21ndF9zdWl0ZXNbV0xBTl9NQVhfQVVUSF9LRVlfTUdUX1NVSVRFX0xJU1RfQ09VTlRdOwotCi0JdTE2CQkJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfY291bnQ7Ci0JdTE2CQkJCQl3cGEyX2F1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKLQotCXU4CQkJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfc2VsZWN0ZWQ7Ci0JdTgJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX3NlbGVjdGVkOwotCXU4CQkJCQlyZXNlcnZlZF8xMFsyXTsKLQotCXN0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50ICB3cGEyX3Jzbl9jYXBhYmlsaXRpZXM7IC8vIDJCCi0JdTgJCQkJCXJlc2VydmVkXzExWzJdOwotICAgICNlbmRpZiAvL2VuZGlmIF9XUEEyXwotCi0JLy9Gb3IgUmVwbGF5IHByb3RlY3Rpb24KLS8vCXU4CQlQYWlyd2lzZVRTQ1s2XTsKLS8vCXU4CQlHcm91cFRTQ1s2XTsKLQotCS8vLy9Gb3IgdXAtdG8tZGF0ZQotCXUzMgkJU2NhblRpbWVTdGFtcDsJLy9mb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAobWF5IGV4aXN0IGF0Ci0JCQkJCQkJLy9kaWZmZXJlbnQgY2hhbm5lbHMpIGhhcyBsZWZ0LiBJdCBtdXN0IGJlIGRldGVjdGVkIGJ5Ci0JCQkJCQkJLy9zY2FubmluZy4gTG9jYWwgZGV2aWNlIG1heSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkLgotCXUzMgkJQnNzVGltZVN0YW1wOwkvL09ubHkgZm9yIHRoZSBkZWNpc2lvbiB3aGV0aGVyIHRoZSBzdGF0aW9uL0FQKGV4aXN0IGluCi0JCQkJCQkJLy90aGUgc2FtZSBjaGFubmVsLCBhbmQgbm8gc2Nhbm5pbmcpIGlmIGxvY2FsIGRldmljZSBoYXMKLQkJCQkJCQkvL2Nvbm5lY3RlZCBzdWNjZXNzZnVsbHkuCi0KLQkvLyAyMDA2MTEwOCBBZGQgZm9yIHN0b3JpbmcgV1BTX0lFLiBbRSBpZF1bTGVuZ3RoXVtPVUldW0RhdGFdCi0JdTgJCVdQU19JRV9EYXRhW01BWF9JRV9BUFBFTkRfU0laRV07Ci0JdTE2CQlXUFNfSUVfbGVuZ3RoOwotCXUxNgkJV1BTX0lFX2xlbmd0aF90bXA7IC8vIEZvciB2ZXJpZnkgdGhlcmUgaXMgYW4gV1BTX0lFIGluIEJlYWNvbiBvciBwcm9iZSByZXNwb25zZQotCi19IFdCX0JTU0RFU0NSSVBUSU9OLCAqUFdCX0JTU0RFU0NSSVBUSU9OOwotCi0jZGVmaW5lIHdCU1NDb25uZWN0ZWRTVEEoYWRhcHRlcikgICAgICAgICAgICAgXAotICAgICgodTE2KShhZGFwdGVyKS0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXgpCi0KLSNkZWZpbmUgcHNCU1MoaSkJCQkoJihhZGFwdGVyLT5hc0JTU0Rlc2NyaXB0RWxlbWVudFsoaSldKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGQ5NjA0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLy8KLS8vIGNvbW1vbi5oCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBPUyBkZXBlbmRhbnQgZGVmaW5pdGlvbiBhbmQgZnVuY3Rpb24uCi0vLyBFdmVyeSBPUyBoYXMgdGhpcyBmaWxlIGluZGl2aWR1YWwuCi0vLwotCi0jZGVmaW5lIERlYnVnVXNiZFN0YXR1c0luZm9ybWF0aW9uKCBfQSApCi0KLSNpZm5kZWYgQ09NTU9OX0RFRgotI2RlZmluZSBDT01NT05fREVGCi0KLS8vI2RlZmluZSBERUJVR19FTkFCTEVEICAxCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvbW1vbiBmdW5jdGlvbiBkZWZpbml0aW9uCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jZGVmaW5lIERFQlVHX0VOQUJMRUQKLSNkZWZpbmUgRVRIX0xFTkdUSF9PRl9BRERSRVNTCTYKLSNpZmRlZiBERUJVR19FTkFCTEVECi0jZGVmaW5lIFdCREVCVUcoIF9NICkJcHJpbnRrIF9NCi0jZWxzZQotI2RlZmluZSBXQkRFQlVHKCBfTSApCTAKLSNlbmRpZgotCi0jZW5kaWYgLy8gQ09NTU9OX0RFRgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmgKaW5kZXggZmUxNDJhMS4uZWI0YzA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29yZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaApAQCAtMyw5ICszLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKLSNpbmNsdWRlICJic3Nkc2NwdC5oIgotI2luY2x1ZGUgIm10by5oIgorI2luY2x1ZGUgIm1sbWVfcy5oIgogI2luY2x1ZGUgIndiaGFsX3MuaCIKKyNpbmNsdWRlICJtdG8uaCIKIAogI2RlZmluZSBXQkxJTlVYX1BBQ0tFVF9BUlJBWV9TSVpFIChFVEhFUk5FVF9UWF9ERVNDUklQVE9SUyo0KQogCkBAIC0xNSwxMiArMTUsMTEgQEAKIAl1MzIgYWRhcHRlckluZGV4OwkvLyAyMDA2MDcwMy40IEFkZCBmb3IgdXNpbmcgcGFkYXB0ZXJDb250ZXh0IGdsb2JhbCBhZGFwdGVyIHBvaW50CiAKIAlXQl9MT0NBTERFU0NSSVBUIHNMb2NhbFBhcmE7CS8vIE15c2VsZiBjb25uZWN0ZWQgcGFyYW1ldGVycwotCVBXQl9CU1NERVNDUklQVElPTiBhc0JTU0Rlc2NyaXB0RWxlbWVudDsKIAogCU1MTUVfRlJBTUUgc01sbWVGcmFtZTsJLy8gY29ubmVjdCB0byBwZWVyU1RBIHBhcmFtZXRlcnMKIAogCU1UT19QQVJBTUVURVJTIHNNdG9QYXJhOwkvLyBNVE9fc3RydWN0IC4uLgotCWh3X2RhdGFfdCBzSHdEYXRhOwkvL0ZvciBIQUwKKwlzdHJ1Y3QgaHdfZGF0YSBzSHdEYXRhOwkvL0ZvciBIQUwKIAlNRFMgTWRzOwogCiAJc3BpbmxvY2tfdCBTcGluTG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1YzRlNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9kc190a2lwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jaWZuZGVmIF9fV0lOQk9ORF9EU19US0lQX0gKLSNkZWZpbmUgX19XSU5CT05EX0RTX1RLSVBfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLy8gUm90YXRpb24gZnVuY3Rpb25zIG9uIDMyIGJpdCB2YWx1ZXMKLSNkZWZpbmUgUk9MMzIoIEEsIG4gKSBcCi0gICAgKCAoKEEpIDw8IChuKSkgfCAoICgoQSk+PigzMi0obikpKSAgJiAoICgxVUwgPDwgKG4pKSAtIDEgKSApICkKLQotI2RlZmluZSBST1IzMiggQSwgbiApICAgUk9MMzIoIChBKSwgMzItKG4pICkKLQotCi10eXBlZGVmIHN0cnVjdCB0a2lwCi17Ci0gICAgdTMyCUswLCBLMTsJCS8vIEtleQotCXVuaW9uCi0JewotCQlzdHJ1Y3QgLy8gQ3VycmVudCBzdGF0ZQotCQl7Ci0JCQl1MzIJTDsKLQkJCXUzMglSOwotCQl9OwotCQl1OAlMUls4XTsKLQl9OwotCXVuaW9uCi0JewotCQl1MzIJTTsJCS8vIE1lc3NhZ2UgYWNjdW11bGF0b3IgKHNpbmdsZSB3b3JkKQotCQl1OAlNYls0XTsKLQl9OwotCXMzMgkJYnl0ZXNfaW5fTTsJLy8gIyBieXRlcyBpbiBNCi19IHRraXBfdDsKLQotLy92b2lkIF9hcHBlbmRfZGF0YSggdTggKnBEYXRhLCB1MTYgc2l6ZSwgdGtpcF90ICpwICk7Ci12b2lkIE1kc19NaWNHZXQoICB2b2lkKiBhZGFwdGVyLCAgdm9pZCogcFJ4TGF5ZXIxLCAgdTggKnBLZXksICB1OCAqcE1pYyApOwotdm9pZCBNZHNfTWljRmlsbCggIHZvaWQqIGFkYXB0ZXIsICB2b2lkKiBwRGVzLCAgdTggKlhtaXRCdWZBZGRyZXNzICk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZ2xfODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjQ0YzQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZ2xfODAyMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0jaWZuZGVmIF9fR0xfODAyMTFfSF9fCi0jZGVmaW5lIF9fR0xfODAyMTFfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKioqKioqKioqKioqKioqKioqIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQlNTIFR5cGUgKi8KLWVudW0gewotICAgIFdMQU5fQlNTVFlQRV9JTkZSQVNUUlVDVFVSRSAgICAgICAgID0gMCwKLSAgICBXTEFOX0JTU1RZUEVfSU5ERVBFTkRFTlQsCi0gICAgV0xBTl9CU1NUWVBFX0FOWV9CU1MsCi19OwotCi0KLQotLyogUHJlYW1ibGVfVHlwZSwgc2VlIDxTRlMtODAyLjExRy1NSUItMjAzPiAqLwotdHlwZWRlZiBlbnVtIHByZWFtYmxlX3R5cGUgewotICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVCwKLSAgICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORywKLX0gICAgcHJlYW1ibGVfdHlwZV9lOwotCi0KLS8qIFNsb3RfVGltZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDg+ICovCi10eXBlZGVmIGVudW0gc2xvdF90aW1lX3R5cGUgewotICAgIFdMQU5fU0xPVF9USU1FX1RZUEVfTE9ORywKLSAgICBXTEFOX1NMT1RfVElNRV9UWVBFX1NIT1JULAotfSAgICBzbG90X3RpbWVfdHlwZV9lOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIEVuY3J5cHRpb24gTW9kZSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgICBXRVBfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAotICAgIFdFUF82NCwKLSAgICBXRVBfMTI4LAotCi0gICAgRU5DUllQVF9ESVNBQkxFLAotICAgIEVOQ1JZUFRfV0VQLAotICAgIEVOQ1JZUFRfV0VQX05PS0VZLAotICAgIEVOQ1JZUFRfVEtJUCwKLSAgICBFTkNSWVBUX1RLSVBfTk9LRVksCi0gICAgRU5DUllQVF9DQ01QLAotICAgIEVOQ1JZUFRfQ0NNUF9OT0tFWSwKLX0gICAgZW5jcnlwdGlvbl9tb2RlX2U7Ci0KLXR5cGVkZWYgZW51bSBfV0xBTl9SQURJTyB7Ci0gICAgV0xBTl9SQURJT19PTiwKLSAgICBXTEFOX1JBRElPX09GRiwKLSAgICBXTEFOX1JBRElPX01BWCwgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCi19IFdMQU5fUkFESU87Ci0KLXR5cGVkZWYgc3RydWN0IF9XTEFOX1JBRElPX1NUQVRVUyB7Ci0JV0xBTl9SQURJTyBIV1N0YXR1czsKLQlXTEFOX1JBRElPIFNXU3RhdHVzOwotfSBXTEFOX1JBRElPX1NUQVRVUzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAyMDA0MTAyMSAxLjEuODEuMTAwMCB5YmppYW5nCi0vLyBhZGQgZm9yIHJhZGlvIG5vdGlmaWNhdGlvbgotdHlwZWRlZgotdm9pZCAoKlJBRElPX05PVElGSUNBVElPTl9IQU5ETEVSKSgKLQl2b2lkICpEYXRhLAotCXZvaWQgKlJhZGlvU3RhdHVzQnVmZmVyLAotCXUzMiBSYWRpb1N0YXR1c0J1ZmZlckxlbgotCSk7Ci0KLXR5cGVkZWYgc3RydWN0IF9XTEFOX1JBRElPX05PVElGSUNBVElPTgotewotICAgIFJBRElPX05PVElGSUNBVElPTl9IQU5ETEVSIFJhZGlvQ2hhbmdlSGFuZGxlcjsKLSAgICB2b2lkICpEYXRhOwotfSBXTEFOX1JBRElPX05PVElGSUNBVElPTjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAyMDA0MTEwMiAxLjEuOTEuMTAwMCB5YmppYW5nCi0vLyBhZGQgZm9yIE9JRF84MDJfMTFfQ1VTVF9SRUdJT05fQ0FQQUJJTElUSUVTIGFuZCBPSURfODAyXzExX09JRF9SRUdJT04KLXR5cGVkZWYgZW51bSBfV0xBTl9SRUdJT05fQ09ERQotewotCVdMQU5fUkVHSU9OX1VOS05PV04sCi0JV0xBTl9SRUdJT05fRVVST1BFLAotCVdMQU5fUkVHSU9OX0pBUEFOLAotCVdMQU5fUkVHSU9OX1VTQSwKLQlXTEFOX1JFR0lPTl9GUkFOQ0UsCi0JV0xBTl9SRUdJT05fU1BBSU4sCi0JV0xBTl9SRUdJT05fSVNSQUVMLAotCVdMQU5fUkVHSU9OX01BWCwgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCi19IFdMQU5fUkVHSU9OX0NPREU7Ci0KLSNkZWZpbmUgUkVHSU9OX05BTUVfTUFYX0xFTkdUSCAgIDI1NgotCi10eXBlZGVmIHN0cnVjdCBfV0xBTl9SRUdJT05fQ0hBTk5FTFMKLXsKLQl1MzIgTGVuZ3RoOwotCXUzMiBOYW1lTGVuZ3RoOwotCXU4IE5hbWVbUkVHSU9OX05BTUVfTUFYX0xFTkdUSF07Ci0JV0xBTl9SRUdJT05fQ09ERSBDb2RlOwotCXUzMiBGcmVxdWVuY3lbMV07Ci19IFdMQU5fUkVHSU9OX0NIQU5ORUxTOwotCi10eXBlZGVmIHN0cnVjdCBfV0xBTl9SRUdJT05fQ0FQQUJJTElUSUVTCi17Ci0JdTMyIE51bWJlck9mSXRlbXM7Ci0JV0xBTl9SRUdJT05fQ0hBTk5FTFMgUmVnaW9uWzFdOwotfSBXTEFOX1JFR0lPTl9DQVBBQklMSVRJRVM7Ci0KLXR5cGVkZWYgc3RydWN0IF9yZWdpb25fbmFtZV9tYXAgewotCVdMQU5fUkVHSU9OX0NPREUgcmVnaW9uOwotCXU4ICpuYW1lOwotCXUzMiAqY2hhbm5lbHM7Ci19IHJlZ2lvbl9uYW1lX21hcDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIE1BQzJTVFIoYSkgKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XQotI2RlZmluZSBNQUNTVFIgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIgotCi0vLyBUT0RPOiAwNjI3IGtldmluCi0jZGVmaW5lIE1JQzJTVFIoYSkgKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XSwgKGEpWzZdLCAoYSlbN10KLSNkZWZpbmUgTUlDU1RSICIlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgiCi0KLSNkZWZpbmUgTUlDS0VZMlNUUihhKSAgIE1JQzJTVFIoYSkKLSNkZWZpbmUgTUlDS0VZU1RSICAgICAgIE1JQ1NUUgotCi0KLSNlbmRpZiAvKiBfX0dMXzgwMjExX0hfXyAqLwotLyoqKiBlbmQgb2YgZmlsZSAqKiovCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9pb2N0bHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiMzVkYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9pb2N0bHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3OCArMCwwIEBACi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vICBJT0NUTFMuSCAtCi0vLwotLy8gIERlc2NyaXB0aW9uOgotLy8gICAgRGVmaW5lIHRoZSBJT0NUTCBjb2Rlcy4KLS8vCi0vLyAgUmV2aXNpb24gaGlzdG9yeToKLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZm5kZWYgX0lPQ1RMU19ICi0jZGVmaW5lIF9JT0NUTFNfSAotCi0vLyBQRDQzIEtlZXAgaXQgLSBVc2VkIHdpdGggdGhlIFdpbjMzIGFwcGxpY2F0aW9uCi0vLyAjaW5jbHVkZSA8d2luaW9jdGwuaD4KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gMjAwNDAxMDggQUREIHRoZSBmb2xsb3cgZm9yIHRlc3QKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgSU5GT1JNQVRJT05fTEVOR1RIIHNpemVvZih1bnNpZ25lZCBpbnQpCi0KLSNkZWZpbmUgV0IzMl9JT0NUTF9JTkRFWCAgMHgwOTAwIC8vwq3Dl8KnxI/EvUjFpEvFucWwxb1lLy8KLQotI2RlZmluZSBXYjMyX1JlZ2lzdGVyUmVhZAkJCUNUTF9DT0RFKAlcCi0JCQlGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfUmVnaXN0ZXJXcml0ZQkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMSwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfU2VuZFBhY2tldAkJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDIsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjMyX1F1ZXJ5U2VuZFJlc3VsdAkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAzLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9TZXRGcmFnbWVudFRocmVzaG9sZAlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDQsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjMyX1NldExpbmtTdGF0dXMJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNSwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfU2V0QnVsa0luCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA2LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9Mb29wYmFja1Rlc3QJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDcsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X0VFUHJvbVJlYWQJCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA4LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9FRVByb21Xcml0ZQkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgOSwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfRmxhc2hSZWFkRGF0YQkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTAsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X0ZsYXNoV3JpdGUJCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMSwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfRmxhc2hXcml0ZUJ1cnN0CQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDEyLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9UeEJ1cnN0U3RhcnQJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDEzLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9UeEJ1cnN0U3RvcAkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTQsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X1R4QnVyc3RTdGF0dXMJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDE1LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIEZvciBJT0NUTCBpbnRlcmZhY2UKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jZGVmaW5lIExJTktOQU1FX1NUUklORyAgICAgIlxcRG9zRGV2aWNlc1xcVzM1VU5EIgotI2RlZmluZSBOVERFVklDRV9TVFJJTkcgICAgICJcXERldmljZVxcVzM1VU5EIgotI2RlZmluZSBBUFBMSUNBVElPTl9MSU5LCSJcXFxcLlxcVzM1VU5EIgotCi0jZGVmaW5lIFdCX0lPQ1RMX0lOREVYICAgICAgMHgwODAwCi0jZGVmaW5lIFdCX0lPQ1RMX1RTX0lOREVYICAgV0JfSU9DVExfSU5ERVggKyA2MAotI2RlZmluZSBXQl9JT0NUTF9EVVRfSU5ERVggIFdCX0lPQ1RMX1RTX0lOREVYICsgNDAKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gSU9DVExTIGRlZmluZWQgZm9yIERVVCAoRGV2aWNlIFVuZGVyIFRlc3QpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX0FERFJFU1MKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExU3RhdGlvbklECi0vLyBTZXQgIDogU2V0IHRoZSBkb3QxMVN0YXRpb25JRC4gRGVtbyBvbmx5LgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUyAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEsICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBpbmZvLiBvZiB0aGUgY3VycmVudCBjb25uZWN0ZWQgQlNTLgotLy8gU2V0ICA6IE5vbmUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU19ERVNDUklQVElPTiAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIsICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEUKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHJhbnNtaXNzaW9uIHJhdGUuCi0vLyBTZXQgIDogU2V0IHRoZSB0cmFuc21pc3Npb24gcmF0ZSBvZiB0aGUgVHggcGFja2V0cy4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURSAgICAgICAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9DVVJSRU5UX1NUQV9TVEFURQotLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBTVEEgc3RhdGUuIChXQl9TVEFTVEFURSB0eXBlKQotLy8gU2V0ICA6IE5vbmUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vLy8vLy8vLy8vIDEwLzMxLzAyJyBBZGRlZCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IFN0YXJ0IGEgbmV3IElCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfU1RBUlRfSUJTU19SRVFVRVNUICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9KT0lOX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IFN5bmNocm9uaXplIHdpdGggdGhlIHNlbGVjdGVkIEJTUwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9KT0lOX1JFUVVFU1QgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FVVEhFTl9SRVFVRVNUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBBdXRoZW50aWNhdGUgd2l0aCB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FVVEhFTl9SRVFVRVNUICAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfREVBVVRIRU5fUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogRGVBdXRoZW50aWNhdGUgd2l0aGUgdGhlIEJTUwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FTU09DX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IEFzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FTU09DX1JFUVVFU1QgICAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBSZUFzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1JFQVNTT0NfUkVRVUVTVCAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9ESVNBU1NPQ19SRVFVRVNUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBEaXNBc3NvY2lhdGUgd2l0aGUgdGhlIEJTUwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9ESVNBU1NPQ19SRVFVRVNUICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0ZSQUdfVEhSRVNIT0xECi0vLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMUZyYWdtZW50VGhyZXNob2xkCi0vLyBTZXQgIDogU2V0IHRoZSBkb3QxMUZyYWdtZW50VGhyZXNob2xkCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0ZSQUdfVEhSRVNIT0xEICAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMiwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUlRTX1RIUkVTSE9MRAotLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFSVFNUaHJlc2hvbGQKLS8vIFNldCAgOiBTZXQgdGhlIGRvdDExUlRTVGhyZXNvbGQKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUlRTX1RIUkVTSE9MRCAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERQotLy8gUXVlcnk6IEdldCB0aGUgV0VQIGtleSBtb2RlLgotLy8gU2V0ICA6IFNldCB0aGUgV0VQIGtleSBtb2RlOiBkaXNhYmxlLzY0IGJpdHMvMTI4IGJpdHMKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfV0VQX0tFWU1PREUgICAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE0LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IGZpbGwgaW4gdGhlIFdFUCBrZXkgdmFsdWUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfV0VQX0tFWVZBTFVFICAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogUmVzZXQgUy9XIGFuZCBIL1cKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVTRVQgICAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9QT1dFUl9TQVZFCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBTZXQgUG93ZXIgU2F2ZSBNb2RlCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUgICAgQ1RMX0NPREUoICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxNywgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVF9TQ0FOCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4gQ1RMX0NPREUoICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1QKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIEJTUyBpbmZvIG9mIEJTU3MgaW4gdGhlIGxhc3Qgc2Nhbm5pbmcgcHJvY2VzcwotLy8gU2V0ICA6IE5vbmUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1QgICAgQ1RMX0NPREUoICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfU1RBVElTVElDUwotLy8gUXVlcnk6IFJldHVybiB0aGUgc3RhdGlzdGljcyBvZiBUeC9SeC4KLS8vIFNldCAgOiBOb25lLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTICAgIENUTF9DT0RFKCAgICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjAsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FDQ0VQVF9CRUFDT04KLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgbW9kZSB0byBhY2NlcHQgYmVhY29uIG9yIG5vdC4KLS8vIFNldCAgOiBFbmFibGUgb3IgZGlzYWJsZSBhbGxvd2luZyB0aGUgSFctTUFDIHRvIHBhc3MgdGhlIGJlYWNvbiB0byB0aGUgU1ctTUFDCi0vLyBBcmd1bWVudHM6IHVuc2lnbmVkIGNoYXIKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTiAgQ1RMX0NPREUoICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIxLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9ST0FNSU5HCi0vLyBRdWVyeTogUmV0dXJuIHRoZSByb2FtaW5nIGZ1bmN0aW9uIHN0YXR1cwotLy8gU2V0ICA6IEVuYWJsZS9EaXNhYmxlIHRoZSByb2FtaW5nIGZ1bmN0aW9uLgotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcgICAgICAgIENUTF9DT0RFKCAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBEVE8oRGF0YSBUaHJvdWdocHV0IE9wdGltaXphdGlvbikKLS8vICAgICAgICBmdW5jdGlvbiBzdGF0dXMgKFRSVUUgb3IgRkFMU0UpCi0vLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIERUTyBmdW5jdGlvbi4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPICAgICAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9BTlRFTk5BX0RJVkVSU0lUWQotLy8gUXVlcnk6IFJldHVybiB0aGUgYW50ZW5uYSBkaXZlcnNpdHkgc3RhdHVzLiAoVFJVRS9PTiBvciBGQUxTRS9PRkYpCi0vLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIGFudGVubmEgZGl2ZXJzaXR5LgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BTlRFTk5BX0RJVkVSU0lUWSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLy0tLS0tLS0tLS0tLS0tIG5ldyBhZGRlZCBmb3IgYStiK2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19PUEVSQVRJT05fTU9ERQotLy8gUXVlcnk6IFJldHVybiB0aGUgTUFDIG9wZXJhdGlvbiBtb2RlLiAoTU9ERV84MDJfMTFfQkcsIE1PREVfODAyXzExX0EsCi0vLwkJCSBNT0RFXzgwMl8xMV9BQkcsIE1PREVfODAyXzExX0JHX0lCU1MpCi0vLyBTZXQgIDogU2V0IHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19PUEVSQVRJT05fTU9ERSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfUkVERUZJTkVECi0vLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IHR4IHJhdGUgd2hpY2ggZm9sbG93cyB0aGUgZGVmaW5pdGlvbiBpbiBzcGVjLiAoZm9yCi0vLwkJCWV4YW1wbGUsIDUuNU0gPT4gMHgwYikKLS8vIFNldCAgOiBOb25lCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfUkVERUZJTkVEIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERQotLy8gUXVlcnk6IFJldHVybiB0aGUgcHJlYW1ibGUgbW9kZS4gKGF1dG8gb3IgbG9uZykKLS8vIFNldCAgOiBTZXQgdGhlIHByZWFtYmxlIG1vZGUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1BSRUFNQkxFX01PREUgQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERQotLy8gUXVlcnk6IFJldHVybiB0aGUgc2xvdCB0aW1lIG1vZGUuIChhdXRvIG9yIGxvbmcpCi0vLyBTZXQgIDogU2V0IHRoZSBzbG90IHRpbWUgbW9kZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfU0xPVF9USU1FX01PREUgQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI4LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMKLS8vIFF1ZXJ5OgotLy8gU2V0ICA6IE5PTkUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMgQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFX01PREUKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHR4IHJhdGUgbW9kZS4gKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKLS8vIFNldCAgOiBTZXQgdGhlIHR4IHJhdGUgbW9kZS4gIChSQVRFX0FVVE8sIFJBVEVfMU0sIC4uLCBSQVRFXzU0TSwgUkFURV9NQVgpCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzAsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RUT19QQVJBCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBEVE8gcGFyYW1ldGVycwotLy8gU2V0ICA6IFNldCB0aGUgRFRPIHBhcmFtZXRlcnMKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEgQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMxLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9FVkVOVF9MT0cKLS8vIFF1ZXJ5OiBSZXR1cm4gZXZlbnQgbG9nCi0vLyBTZXQgIDogUmVzZXQgZXZlbnQgbG9nCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRyBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NXTUlOCi0vLyBRdWVyeTogTk9ORShJdCB3aWxsIGJlIG9idGFpbmVkIGJ5IElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMpCi0vLyBTZXQgIDogU2V0IENXTWluIHZhbHVlCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0NXTUlOIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMywgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNQVgKLS8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKLS8vIFNldCAgOiBTZXQgQ1dNYXggdmFsdWUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNQVggQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDM0LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIElPQ1RMcyBmb3IgVGVzdGluZwotCi0vLyBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX0NYWF9SRUcKLS8vIFF1ZXJ5OiBOb25lCi0vLyBTZXQgIDogV3JpdGUgdGhlIHZhbHVlIHRvIG9uZSBvZiBDeHggcmVnaXN0ZXIuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX0NYWF9SRUcgIENUTF9DT0RFKCAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRwotLy8gUXVlcnk6IFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIEN4eCByZWdpc3Rlci4KLS8vIFNldCAgOiBXcml0ZSB0aGUgcmVnIG5vLiAoMHgwMCwgMHgwNCwgMHgwOCBldGMpCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0NYWF9SRUcgIENUTF9DT0RFKCAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfRFhYX1JFRwotLy8gUXVlcnk6IE5vbmUKLS8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIER4eCByZWdpc3Rlci4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfRFhYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHCi0vLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgRHh4IHJlZ2lzdGVyLgotLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfRFhYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFtUU10KLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfVFhfUkFURSAgICAgICAgICAgICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DVVJSRU5UX0NIQU5ORUwgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0VOQUJMRV9TRVFOTyAgICAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BTEJFX0FDS0VEUEFDS0VUICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19JTkhJQklUX0NSQyAgICAgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDgsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JFU0VUX1JDVl9DT1VOVEVSICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX1RYX1RSSUdHRVIgICAgICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GQUlMRURfVFhfQ09VTlQgICAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDExLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIFtUUzFdCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9QT1dFUiAgICAgICAgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRU5BQkxFCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxMywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19NT0RFX0RJU0FCTEUJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FOVEVOTkEJCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19BREFQVEVSX0lORk8JCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01BQ19BRERSRVNTCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxNywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19CU1NJRAkJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JGX1BBUkFNRVRFUgkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTksICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRklMVEVSCQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjAsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQ0FMSUJSQVRJT04JCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIxLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU19NT0RFCQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX1NTSUQJCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19JQlNTX0NIQU5ORUwJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIHNldC9xdWVyeSB0aGUgc2xvdCB0aW1lIHZhbHVlKHNob3J0IG9yIGxvbmcgc2xvdCB0aW1lKQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0xPVF9USU1FCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JYX1NUQVRJU1RJQ1MJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2VuZGlmICAvLyAjaWZuZGVmIF9JT0NUTFNfSAotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKaW5kZXggZTQzMTQwNi4uYzdhZjA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKQEAgLTEsOSArMSw3IEBACi0jaW5jbHVkZSAiZHNfdGtpcC5oIgotI2luY2x1ZGUgImdsXzgwMjExLmgiCiAjaW5jbHVkZSAibWRzX2YuaCIKICNpbmNsdWRlICJtbG1ldHhyeF9mLmgiCi0jaW5jbHVkZSAibXRvX2YuaCIKLSNpbmNsdWRlICJvc19jb21tb24uaCIKKyNpbmNsdWRlICJtdG8uaCIKKyNpbmNsdWRlICJzeXNkZWYuaCIKICNpbmNsdWRlICJ3YmhhbF9mLmgiCiAjaW5jbHVkZSAid2JsaW51eF9mLmgiCiAKQEAgLTM3NCw3ICszNzIsNyBAQAogCiAJcERlcy0+VHhSYXRlID0gY3RtcDE7CiAJI2lmZGVmIF9QRV9UWF9EVU1QXwotCVdCREVCVUcoKCJUeCByYXRlID0leFxuIiwgY3RtcDEpKTsKKwlwcmludGsoIlR4IHJhdGUgPSV4XG4iLCBjdG1wMSk7CiAJI2VuZGlmCiAKIAlwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlID0gKGN0bXAxJTMpID8gMCA6IDE7CkBAIC00MTgsMTQgKzQxNiwxNCBAQAogdm9pZAogTWRzX1R4KHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIpCiB7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKglwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CiAJUE1EUwkJcE1kcyA9ICZhZGFwdGVyLT5NZHM7CiAJREVTQ1JJUFRPUglUeERlczsKIAlQREVTQ1JJUFRPUglwVHhEZXMgPSAmVHhEZXM7CiAJdTgJCSpYbWl0QnVmQWRkcmVzczsKIAl1MTYJCVhtaXRCdWZTaXplLCBQYWNrZXRTaXplLCBzdG1wLCBDdXJyZW50U2l6ZSwgRnJhZ21lbnRUaHJlc2hvbGQ7CiAJdTgJCUZpbGxJbmRleCwgVHhEZXNJbmRleCwgRnJhZ21lbnRDb3VudCwgRmlsbENvdW50OwotCXVuc2lnbmVkIGNoYXIJQnVmZmVyRmlsbGVkID0gZmFsc2UsIE1JQ0FkZCA9IDA7CisJdW5zaWduZWQgY2hhcglCdWZmZXJGaWxsZWQgPSBmYWxzZTsKIAogCiAJaWYgKHBNZHMtPlR4UGF1c2UpCkBAIC00NDIsNyArNDQwLDcgQEAKIAkJRmlsbEluZGV4ID0gcE1kcy0+VHhGaWxsSW5kZXg7CiAJCWlmIChwTWRzLT5UeE93bmVyW0ZpbGxJbmRleF0pIHsgLy8gSXMgb3duZWQgYnkgc29mdHdhcmUgMDpZZXMgMTpObwogI2lmZGVmIF9QRV9UWF9EVU1QXwotCQkJV0JERUJVRygoIltNZHNfVHhdIFR4IE93bmVyIGlzIEgvVy5cbiIpKTsKKwkJCXByaW50aygiW01kc19UeF0gVHggT3duZXIgaXMgSC9XLlxuIik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQl9CkBAIC00ODgsNyArNDg2LDcgQEAKIAkJCS8vIEZvciBzcGVlZCB1cCBLZXkgc2V0dGluZwogCQkJaWYgKHBUeERlcy0+RWFwRml4KSB7CiAjaWZkZWYgX1BFX1RYX0RVTVBfCi0JCQkJV0JERUJVRygoIjM1OiBFUEEgNHRoIGZyYW1lIGRldGVjdGVkLiBTaXplID0gJWRcbiIsIFBhY2tldFNpemUpKTsKKwkJCQlwcmludGsoIjM1OiBFUEEgNHRoIGZyYW1lIGRldGVjdGVkLiBTaXplID0gJWRcbiIsIFBhY2tldFNpemUpOwogI2VuZGlmCiAJCQkJcEh3RGF0YS0+SXNLZXlQcmVTZXQgPSAxOwogCQkJfQpAQCAtNDk5LDEyICs0OTcsNiBAQAogCQkJLy8gU2V0IFJUUy9DVFMgYW5kIE5vcm1hbCBkdXJhdGlvbiBmaWVsZCBpbnRvIGJ1ZmZlcgogCQkJTWRzX0R1cmF0aW9uU2V0KGFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MpOwogCi0JCQkvLwotCQkJLy8gQ2FsY3VsYXRpb24gTUlDIGZyb20gYnVmZmVyIHdoaWNoIG1heWJlIGZyYWdtZW50LCB0aGVuIGZpbGwgaW50byB0ZW1wb3JhcnkgYWRkcmVzcyA4IGJ5dGUKLQkJCS8vIDkzMTEzMC41LmUKLQkJCWlmIChNSUNBZGQpCi0JCQkJTWRzX01pY0ZpbGwoIGFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MgKTsKLQogCQkJLy9TaGlmdCB0byB0aGUgbmV4dCBhZGRyZXNzCiAJCQlYbWl0QnVmU2l6ZSArPSBDdXJyZW50U2l6ZTsKIAkJCVhtaXRCdWZBZGRyZXNzICs9IEN1cnJlbnRTaXplOwpAQCAtNTYxLDcgKzU1Myw3IEBACiBNZHNfU2VuZENvbXBsZXRlKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIFBUMDJfREVTQ1JJUFRPUiBwVDAyKQogewogCVBNRFMJcE1kcyA9ICZhZGFwdGVyLT5NZHM7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKglwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CiAJdTgJUGFja2V0SWQgPSAodTgpcFQwMi0+VDAyX1R4X1BrdElEOwogCXVuc2lnbmVkIGNoYXIJU2VuZE9LID0gdHJ1ZTsKIAl1OAlSZXRyeUNvdW50LCBUeFJhdGU7CkBAIC01ODUsNyArNTc3LDcgQEAKIAkJCQllbHNlCiAJCQkJCXBId0RhdGEtPnR4X3JldHJ5X2NvdW50WzddICs9IFJldHJ5Q291bnQ7CiAJCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCQkJCVdCREVCVUcoKCJkdG9fdHhfcmV0cnlfY291bnQgPSVkXG4iLCBwSHdEYXRhLT5kdG9fdHhfcmV0cnlfY291bnQpKTsKKwkJCQlwcmludGsoImR0b190eF9yZXRyeV9jb3VudCA9JWRcbiIsIHBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCk7CiAJCQkJI2VuZGlmCiAJCQkJTVRPX1NldFR4Q291bnQoYWRhcHRlciwgVHhSYXRlLCBSZXRyeUNvdW50KTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCmluZGV4IGViZjYxZTMuLjlmZmVjMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaApAQCAtOSw2ICs5LDEyIEBACiAjaW5jbHVkZSAibWFjX3N0cnVjdHVyZXMuaCIKICNpbmNsdWRlICJzY2FuX3MuaCIKIAorLyogUHJlYW1ibGVfVHlwZSwgc2VlIDxTRlMtODAyLjExRy1NSUItMjAzPiAqLworZW51bSB7CisJV0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JULAorCVdMQU5fUFJFQU1CTEVfVFlQRV9MT05HLAorfTsKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgTUFYX1VTQl9UWF9ERVNDUklQVE9SCQkxNQkJLy8gSVM4OUMzNSBhYmlsaXR5CiAjZGVmaW5lIE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUgk0CQkvLyBWaXJ0dWFsIHByZS1idWZmZXIgbnVtYmVyIG9mIE1BWF9VU0JfVFhfQlVGRkVSCkBAIC0xNywyNiArMjMsOCBAQAogI2RlZmluZSBBVVRIX1JFUVVFU1RfUEFJUldJU0VfRVJST1IJCQkwCQkvLyBfRiBmbGFnIHNldHRpbmcKICNkZWZpbmUgQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SCQkJMQkJLy8gX0YgZmxhZyBzZXR0aW5nCiAKLS8vIEZvciB2YXJpYWJsZSBzZXR0aW5nCi0jZGVmaW5lIENVUlJFTlRfQlNTX1RZUEUJCQkJcHNCU1MocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS0+YkJzc1R5cGUKLSNkZWZpbmUgQ1VSUkVOVF9XRVBfTU9ERQkJCQlwc1NNRS0+X2RvdDExUHJpdmFjeUludm9rZWQKLSNkZWZpbmUgQ1VSUkVOVF9CU1NJRAkJCQkJcHNCU1MocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS0+YWJCc3NJRAotI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBX0VOQUJMRQkJKChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBX0FVVEgpfHwocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQVBTS19BVVRIKSkKLSNpZmRlZiBfV1BBMl8KLSNkZWZpbmUgQ1VSUkVOVF9ERVNJUkVEX1dQQTJfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEEyX0FVVEgpfHwocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJQU0tfQVVUSCkpCi0jZW5kaWYgLy9lbmQgZGVmIF9XUEEyXwotI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWV9PSwkJCXBzU01FLT5wYWlyd2lzZV9rZXlfb2sKLS8vWzIwMDQwNzEyIFdTXQotI2RlZmluZSBDVVJSRU5UX0dST1VQX0tFWV9PSwkJCXBzU01FLT5ncm91cF9rZXlfb2sKLSNkZWZpbmUgQ1VSUkVOVF9QQUlSV0lTRV9LRVkJCQlwc1NNRS0+dHhfbWljX2tleQotI2RlZmluZSBDVVJSRU5UX0dST1VQX0tFWQkJCQlwc1NNRS0+Z3JvdXBfdHhfbWljX2tleQotI2RlZmluZSBDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTCQkJcHNTTUUtPmVuY3J5cHRfc3RhdHVzCi0jZGVmaW5lIENVUlJFTlRfV0VQX0lECQkJCQlhZGFwdGVyLT5zU21lUGFyYS5fZG90MTFXRVBEZWZhdWx0S2V5SUQKLSNkZWZpbmUgQ1VSUkVOVF9DT05UUk9MX1BPUlRfQkxPQ0sJCSggcHNTTUUtPndwYV9vayE9MSB8fCAoYWRhcHRlci0+TWRzLmJvQ291bnRlck1lYXN1cmVCbG9jaz09MSAmJiAoQ1VSUkVOVF9FTkNSWVBUX1NUQVRVUz09RU5DUllQVF9US0lQKSkgKQogI2RlZmluZSBDVVJSRU5UX0ZSQUdNRU5UX1RIUkVTSE9MRAkJKGFkYXB0ZXItPk1kcy5UeEZyYWdtZW50VGhyZXNob2xkICYgfjB4MSkKICNkZWZpbmUgQ1VSUkVOVF9QUkVBTUJMRV9NT0RFCQkJcHNMT0NBTC0+Ym9TaG9ydFByZWFtYmxlP1dMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVDpXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORwotI2RlZmluZSBDVVJSRU5UX1RYX1JBVEUJCQkJCWFkYXB0ZXItPnNMb2NhbFBhcmEuQ3VycmVudFR4UmF0ZQotI2RlZmluZSBDVVJSRU5UX0ZBTExfQkFDS19UWF9SQVRFCQlhZGFwdGVyLT5zTG9jYWxQYXJhLkN1cnJlbnRUeEZhbGxiYWNrUmF0ZQogI2RlZmluZSBDVVJSRU5UX1RYX1JBVEVfRk9SX01ORwkJCWFkYXB0ZXItPnNMb2NhbFBhcmEuQ3VycmVudFR4UmF0ZUZvck1uZwogI2RlZmluZSBDVVJSRU5UX1BST1RFQ1RfTUVDSEFOSVNNCQlwc0xPQ0FMLT5ib1Byb3RlY3RNZWNoYW5pc20KICNkZWZpbmUgQ1VSUkVOVF9SVFNfVEhSRVNIT0xECQkJYWRhcHRlci0+TWRzLlR4UlRTVGhyZXNob2xkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E4OTIyZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX21pYi5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyAgTUxNRU1JQi5IIC0KLS8vCi0vLyAgRGVzY3JpcHRpb246Ci0vLyAgICBHZXQgYW5kIFNldCBzb21lIG9mIE1MTUUgTUlCIGF0dHJpYnV0ZXMuCi0vLwotLy8gIFJldmlzaW9uIGhpc3Rvcnk6Ci0vLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICAgICAgICAgICAyMDAzMDExNyAgUEQ0MyBBdXN0aW4gTGl1Ci0vLyAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgcmVsZWFzZQotLy8KLS8vICBDb3B5cmlnaHQgKGMpIDIwMDMgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZm5kZWYgX01MTUVfTUlCX0gKLSNkZWZpbmUgX01MTUVfTUlCX0gKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCi0vLwotLy8gRGVzY3JpcHRpb246Ci0vLyAgIFNldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCi0vLwotLy8gQXJndW1lbnRzOgotLy8gICBhZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCi0vLyAgIEV4VW5lbmNyeXB0ZWQgIC0gdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgdmFsdWUgdG8gYmUgc2V0LgotLy8KLS8vIFJldHVybiB2YWx1ZXM6Ci0vLyAgIE5vbmUuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTUxNRVNldEV4Y2x1ZGVVbmVuY3J5cHRlZChhZGFwdGVyLCBFeFVuZW5jcnlwdGVkKSAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhZGFwdGVyKS0+c0xvY2FsUGFyYS5FeGNsdWRlVW5lbmNyeXB0ZWQgPSBFeFVuZW5jcnlwdGVkOyAgICAgICAgICAgICBcCi19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gTUxNRUdldEV4Y2x1ZGVVbmVuY3J5cHRlZCAtLQotLy8KLS8vIERlc2NyaXB0aW9uOgotLy8gICBHZXQgdGhlIGRvdDExRXhjbHVkZVVuZW5jcnlwdGVkIHZhbHVlLgotLy8KLS8vIEFyZ3VtZW50czoKLS8vICAgYWRhcHRlciAgICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgotLy8KLS8vIFJldHVybiB2YWx1ZXM6Ci0vLyAgIHVuc2lnbmVkIGNoYXIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTUxNRUdldEV4Y2x1ZGVVbmVuY3J5cHRlZChhZGFwdGVyKSAoKHVuc2lnbmVkIGNoYXIpIChhZGFwdGVyKS0+c0xvY2FsUGFyYS5FeGNsdWRlVW5lbmNyeXB0ZWQpCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gTUxNRVNldE1heFJlY2VpdmVMaWZlVGltZSAtLQotLy8KLS8vIERlc2NyaXB0aW9uOgotLy8gICBTZXQgdGhlIGRvdDExTWF4UmVjZWl2ZUxpZmVUaW1lIHZhbHVlLgotLy8KLS8vIEFyZ3VtZW50czoKLS8vICAgYWRhcHRlciAgICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgotLy8gICBSZWNlaXZlTGlmZVRpbWUtIHUzMiB0eXBlLiBUaGUgdmFsdWUgdG8gYmUgc2V0LgotLy8KLS8vIFJldHVybiB2YWx1ZXM6Ci0vLyAgIE5vbmUuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTUxNRVNldE1heFJlY2VpdmVMaWZlVGltZShhZGFwdGVyLCBSZWNlaXZlTGlmZVRpbWUpICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUgPSBSZWNlaXZlTGlmZVRpbWU7ICAgICAgICAgICAgICAgIFwKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCi0vLwotLy8gRGVzY3JpcHRpb246Ci0vLyAgIEdldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCi0vLwotLy8gQXJndW1lbnRzOgotLy8gICBhZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgdTMyIHR5cGUuIFRoZSBjdXJyZW50IGRvdDExTWF4UmVjZWl2ZUxpZmVUaW1lIHZhbHVlLgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jZGVmaW5lIE1MTUVHZXRNYXhSZWNlaXZlTGlmZVRpbWUoYWRhcHRlcikgKCh1MzIpIChhZGFwdGVyKS0+TWRzLk1heFJlY2VpdmVUaW1lKQotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnguYwppbmRleCAwNzgwMmFmLi42NDNjZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKQEAgLTE1LDcgKzE1LDcgQEAKIC8vCiAvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaW5jbHVkZSAib3NfY29tbW9uLmgiCisjaW5jbHVkZSAic3lzZGVmLmgiCiAKICNpbmNsdWRlICJtZHNfZi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCmluZGV4IGRlMTFhMDUuLjk0YTA2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCkBAIC0yMiw5ICsyMiw4IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLy8gTEEyMDA0MDIxMF9EVE8ga2V2aW4KLSNpbmNsdWRlICJvc19jb21tb24uaCIKKyNpbmNsdWRlICJzeXNkZWYuaCIKICNpbmNsdWRlICJzbWVfYXBpLmgiCi0jaW5jbHVkZSAiZ2xfODAyMTEuaCIKICNpbmNsdWRlICJ3YmhhbF9mLmgiCiAKIC8vIERlY2xhcmUgU1EzIHRvIHJhdGUgYW5kIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIHRhYmxlCkBAIC01MSwyMCArNTAsMTQgQEAKIHN0YXRpYyBpbnQgUGVyaW9kVG90YWxUeFBrdCA9IDA7CiBzdGF0aWMgaW50IFBlcmlvZFRvdGFsVHhQa3RSZXRyeSA9IDA7CiAKLXR5cGVkZWYgc3RydWN0Ci17Ci0JczMyIFJTU0k7Ci0JdTggIFR4UmF0ZTsKLX1SU1NJMlJBVEU7Ci0KIHN0YXRpYyB1OCBib1NwYXJzZVR4VHJhZmZpYyA9IGZhbHNlOwogCi12b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKTsKLXZvaWQgVHhSYXRlUmVkdWN0aW9uQ3RybChNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIE1UT19Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcik7Cit2b2lkIFR4UmF0ZVJlZHVjdGlvbkN0cmwoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKIC8qKiAxLjEuMzEuMTAwMCBUdXJibyBtb2RpZnkgKi8KLXZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHQwLCB1OCBpbmRleCk7Ci12b2lkIE1UT19UeEZhaWxlZChNVE9fRlVOQ19JTlBVVCk7Ci12b2lkIGhhbF9nZXRfZHRvX3BhcmEoTVRPX0ZVTkNfSU5QVVQsIGNoYXIgKmJ1ZmZlcik7Cit2b2lkIE1UT19TZXRUeENvdW50KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgdTggdDAsIHU4IGluZGV4KTsKK3ZvaWQgTVRPX1R4RmFpbGVkKHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcik7Cit2b2lkIGhhbF9nZXRfZHRvX3BhcmEoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCBjaGFyICpidWZmZXIpOwogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gIE1UT19Jbml0IC0tCkBAIC04MCwxMCArNzMsOSBAQAogLy8gIFJldHVybiBWYWx1ZToKIC8vICAgIE5vbmUKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdm9pZCBNVE9fSW5pdChNVE9fRlVOQ19JTlBVVCkKK3ZvaWQgTVRPX0luaXQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKQogewogICAgIGludCBpOwotCS8vV0JERUJVRygoIltNVE9dIC0+IE1UT19Jbml0KClcbiIpKTsKIAkvL1tXS0NIRU5dcE1UT2NvcmVfZGF0YSA9IHBjb3JlX2RhdGE7CiAvLyAyMDA0MDUxMCBUdXJibyBhZGQgZm9yIGdsb2JhbCB2YXJpYWJsZQogICAgIE1UT19UTVJfQ05UKCkgICAgICAgPSAwOwpAQCAtMTk2LDcgKzE4OCw3IEBACiAvLyAgICAgIElmIHdlIGVuYWJsZSBEVE8sIHdlIHdpbGwgaWdub3JlIHRoZSB0eCBjb3VudCB3aXRoIGRpZmZlcmVudCB0eCByYXRlIGZyb20KIC8vICAgICAgRFRPIHJhdGUuIFRoaXMgaXMgYmVjYXVzZSB3aGVuIHdlIGFkanVzdCBEVE8gdHggcmF0ZSwgdGhlcmUgY291bGQgYmUgc29tZQogLy8gICAgICBwYWNrZXRzIGluIHRoZSB0eCBxdWV1ZSB3aXRoIHByZXZpb3VzIHR4IHJhdGUKLXZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHR4X3JhdGUsIHU4IGluZGV4KQordm9pZCBNVE9fU2V0VHhDb3VudChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIHU4IHR4X3JhdGUsIHU4IGluZGV4KQogewogCU1UT19UWEZMT1dDT1VOVCgpKys7CiAJaWYgKChNVE9fRU5BQkxFPT0xKSAmJiAoTVRPX1JBVEVfQ0hBTkdFX0VOQUJMRSgpPT0xKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKaW5kZXggMGQzNzc1ZS4uNTZmMjQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKQEAgLTEzLDYgKzEzLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKK3N0cnVjdCB3YnNvZnRfcHJpdjsKKwogI2RlZmluZSBNVE9fREVGQVVMVF9USF9DTlQgICAgICAgICAgICAgIDUKICNkZWZpbmUgTVRPX0RFRkFVTFRfVEhfU1EzICAgICAgICAgICAgICAxMTIgIC8vT0xEIElTIDEzIHJlZmVyZW5jZSBKb2huWHUKICNkZWZpbmUgTVRPX0RFRkFVTFRfVEhfSURMRV9TTE9UICAgICAgICAxNQpAQCAtMTMxLDggKzEzMyw2IEBACiB9IE1UT19QQVJBTUVURVJTLCAqUE1UT19QQVJBTUVURVJTOwogCiAKLSNkZWZpbmUgTVRPX0ZVTkNfSU5QVVQgICAgICAgICAgICAgIHN0cnVjdCB3YnNvZnRfcHJpdiAqCWFkYXB0ZXIKLSNkZWZpbmUgTVRPX0ZVTkNfSU5QVVRfREFUQSAgICAgICAgIGFkYXB0ZXIKICNkZWZpbmUgTVRPX0RBVEEoKSAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5zTXRvUGFyYSkKICNkZWZpbmUgTVRPX0hBTCgpICAgICAgICAgICAgICAgICAgICgmYWRhcHRlci0+c0h3RGF0YSkKICNkZWZpbmUgTVRPX1NFVF9QUkVBTUJMRV9UWVBFKHgpICAgIC8vIDIwMDQwNTExIFR1cmJvIG1hcmsgTE1fUFJFQU1CTEVfVFlQRSgmcGNvcmVfZGF0YS0+bG1fZGF0YSkgPSAoeCkKQEAgLTE0MCw3ICsxNDAsNiBAQAogI2RlZmluZSBNVE9fVFhQT1dFUl9GUk9NX0VFUFJPTQkJKGFkYXB0ZXItPnNId0RhdGEuUG93ZXJJbmRleEZyb21FRVBST00pCiAjZGVmaW5lIExPQ0FMX0FOVEVOTkFfTk8oKQkJCShhZGFwdGVyLT5zTG9jYWxQYXJhLmJBbnRlbm5hTm8pCiAjZGVmaW5lIExPQ0FMX0lTX0NPTk5FQ1RFRCgpCQkoYWRhcHRlci0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXggIT0gMCkKLSNkZWZpbmUgTE9DQUxfSVNfSUJTU19NT0RFKCkJCShhZGFwdGVyLT5hc0JTU0Rlc2NyaXB0RWxlbWVudFthZGFwdGVyLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleF0uYkJzc1R5cGUgPT0gSUJTU19ORVQpCiAjZGVmaW5lIE1UT19JTklUVFhSQVRFX01PREUJCQkoYWRhcHRlci0+c0h3RGF0YS5Tb2Z0d2FyZVNldCYweDIpCS8vYml0IDEKIC8vIDIwMDQwNTEwIFR1cmJvIGFkZAogI2RlZmluZSBNVE9fVE1SX0NOVCgpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5UbXJDbnQKQEAgLTI1OSw2ICsyNTgsMTMgQEAKIAlzMzIgICBBbnRlbm5hOwogfSBTVEFUSVNUSUNTX0lORk8sICpQU1RBVElTVElDU19JTkZPOwogCitleHRlcm4gdm9pZCBNVE9fSW5pdChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7CitleHRlcm4gdm9pZCBNVE9fUGVyaW9kaWNUaW1lckV4cGlyZWQoc3RydWN0IHdic29mdF9wcml2ICopOworZXh0ZXJuIHZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiwgdTggKiwgdTgpOworZXh0ZXJuIHU4IE1UT19HZXRUeFJhdGUoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCB1MzIgZnBkdV9sZW4pOworZXh0ZXJuIHU4IE1UT19HZXRUeEZhbGxiYWNrUmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgTVRPX1NldFR4Q291bnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCB1OCB0MCwgdTggaW5kZXgpOworCiAjZW5kaWYgLy9fX01UT19IX18KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvX2YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFmNTkxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI2lmbmRlZiBfX1dJTkJPTkRfTVRPX0ZfSAotI2RlZmluZSBfX1dJTkJPTkRfTVRPX0ZfSAotCi0jaW5jbHVkZSAiY29yZS5oIgotCi1leHRlcm4gdm9pZCBNVE9fSW5pdChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7Ci1leHRlcm4gdm9pZCBNVE9fUGVyaW9kaWNUaW1lckV4cGlyZWQoc3RydWN0IHdic29mdF9wcml2ICopOwotZXh0ZXJuIHZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiwgdTggKiwgdTgpOwotZXh0ZXJuIHU4IE1UT19HZXRUeFJhdGUoTVRPX0ZVTkNfSU5QVVQsIHUzMiBmcGR1X2xlbik7Ci1leHRlcm4gdTggTVRPX0dldFR4RmFsbGJhY2tSYXRlKE1UT19GVU5DX0lOUFVUKTsKLWV4dGVybiB2b2lkIE1UT19TZXRUeENvdW50KE1UT19GVU5DX0lOUFVULCB1OCB0MCwgdTggaW5kZXgpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL29zX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMjc2ZTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSNpbmNsdWRlICJzeXNkZWYuaCIKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwppbmRleCA2NzgyNTUyLi5hZjhjMDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKIC8qKioqKioqKioqKioqKioqKiogSU5DTFVERSBGSUxFUyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgInBoeV9jYWxpYnJhdGlvbi5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKIApAQCAtMzcsOCArMzcsOCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKiovCi0vL3ZvaWQgICAgX3BoeV9yZl93cml0ZV9kZWxheShod19kYXRhX3QgKnBod19kYXRhKTsKLS8vdm9pZCAgICBwaHlfaW5pdF9yZihod19kYXRhX3QgKnBod19kYXRhKTsKKy8vdm9pZCAgICBfcGh5X3JmX3dyaXRlX2RlbGF5KHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSk7CisvL3ZvaWQgICAgcGh5X2luaXRfcmYoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKIAogLyoqKioqKioqKioqKioqKioqKiBGVU5DVElPTiBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTM0MSw3ICszNDEsNyBAQAogfQogCiAKLXZvaWQgX3Jlc2V0X3J4X2NhbChod19kYXRhX3QgKnBod19kYXRhKQordm9pZCBfcmVzZXRfcnhfY2FsKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAl1MzIgICAgIHZhbDsKIApAQCAtMzY2LDcgKzM2Niw3IEBACiAvLwogLy8KIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotdm9pZCBfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCit2b2lkIF9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQogewogICAgIHUzMiAgICAgcmVnX2FnY19jdHJsMzsKICAgICB1MzIgICAgIHJlZ19hX2FjcV9jdHJsOwpAQCAtNDY1LDcgKzQ2NSw3IEBACiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi12b2lkIF90eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit2b2lkIF90eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CiAJdTMyICAgICByZWdfbW9kZV9jdHJsOwpAQCAtNjAwLDcgKzYwMCw3IEBACiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXZvaWQgX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhKQordm9pZCBfdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CiAJdTMyICAgICByZWdfbW9kZV9jdHJsOwpAQCAtNzI2LDcgKzcyNiw3IEBACiB9CiAKIC8vMjAwNjA2MTIuMS5hIDIwMDYwNzE4LjEgTW9kaWZ5Ci11OCBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsCit1OCBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwKIAkJCQkJCSAgIHMzMiBhXzJfdGhyZXNob2xkLAogCQkJCQkJICAgczMyIGJfMl90aHJlc2hvbGQpCiB7CkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogCXJldHVybiAxOwogfQogCi12b2lkIF90eF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit2b2lkIF90eF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CiAjaWZkZWYgX0RFQlVHCkBAIC0xMTk1LDcgKzExOTUsNyBAQAogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdTggX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MTYgZmFjdG9yLCB1MzIgZnJlcXVlbmN5KQordTggX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUxNiBmYWN0b3IsIHUzMiBmcmVxdWVuY3kpCiB7CiAJdTMyICAgICByZWdfbW9kZV9jdHJsOwogCXMzMiAgICAgaXFjYWxfdG9uZV9pOwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXZvaWQgX3J4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3ZvaWQgX3J4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQogewogLy8gZmlnbyAyMDA1MDUyMyBtYXJrZWQgdGhzaSBmbGFnIGZvciBjYW4ndCBjb21waWxlIGZvciByZWxlc2FzZQogI2lmZGVmIF9ERUJVRwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi12b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCit2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKIHsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CiAJdTMyICAgICBpcV9hbHBoYTsKQEAgLTE2MTgsNyArMTYxOCw3IEBACiB9CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIHBoeV9zZXRfcmZfZGF0YSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApCit2b2lkIHBoeV9zZXRfcmZfZGF0YSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApCiB7CiAgICB1MzIgbHRtcD0wOwogCkBAIC0xNjYwLDcgKzE2NjAsNyBAQAogfQogCiAvLyAyMDA2MDcxNyBtb2RpZnkgYXMgQnJ1Y2UncyBtYWlsCi11bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit1bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAlpbnQgaW5pdF90eHZnYSA9IDA7CiAJdTMyICAgICByZWdfbW9kZV9jdHJsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaAppbmRleCAwM2I4MjBjLi41MWM4ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaApAQCAtMTAxLDcgKzEwMSw3IEBACiAvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9RICAgICAgICAgMHgwM0ZGRTAwMAogLy8jZGVmaW5lIFNISUZUX0lRQ0FMX0lNQUdFX1EoeCkgICAgICgoeCk+PjEzKQogCi12b2lkIHBoeV9zZXRfcmZfZGF0YSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApOwordm9pZCBwaHlfc2V0X3JmX2RhdGEoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MzIgaW5kZXgsICB1MzIgdmFsdWUgKTsKICNkZWZpbmUgcGh5X2luaXRfcmYoIF9BICkJLy9SRlN5bnRoZXNpemVyX2luaXRpYWwoIF9BICkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCmluZGV4IGNkMjEyNzIuLmQ5MTVjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCkBAIC0xLDQgKzEsNCBAQAotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC05MTUsNyArOTE1LDcgQEAKIC8vICAgIFRoZSBhZGRyZXNzIGlzIHN0b3JlZCBpbiBFdGhlcm5ldElEQWRkci4KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogdm9pZAotVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEgKQorVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXUzMglsdG1wOwogCkBAIC05NDgsMTQgKzk0OCwxMyBAQAogLy8gIFJldHVybiBWYWx1ZToKIC8vICAgIE5vbmUuCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoICAgdTggQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdLAotCQkJCQkJICAgdTggKkJ5dGUsICB1OCAqVmFsdWUgKQordm9pZCBDYXJkR2V0TXVsdGljYXN0Qml0KCB1OCBBZGRyZXNzW0VUSF9BTEVOXSwgdTggKkJ5dGUsIHU4ICpWYWx1ZSApCiB7CiAgICAgdTMyIENyYzsKICAgICB1MzIgQml0TnVtYmVyOwogCiAgICAgLy8gRmlyc3QgY29tcHV0ZSB0aGUgQ1JDLgotICAgIENyYyA9IENhcmRDb21wdXRlQ3JjKEFkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisgICAgQ3JjID0gQ2FyZENvbXB1dGVDcmMoQWRkcmVzcywgRVRIX0FMRU4pOwogCiAJLy8gVGhlIGNvbXB1dGVkIENSQyBpcyBiaXQwfjMxIGZyb20gbGVmdCB0byByaWdodAogCS8vQXQgZmlyc3Qgd2Ugc2hvdWxkIGRvIHJpZ2h0IHNoaWZ0IDI1Yml0cywgYW5kIHJlYWQgN2JpdHMgYnkgdXNpbmcgJyYnLCAyXjc9MTI4CkBAIC05NjUsNyArOTY0LDcgQEAKIAkqVmFsdWUgPSAodTgpICgodTgpMSA8PCAoQml0TnVtYmVyICUgOCkpOwogfQogCi12b2lkIFV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoICBwaHdfZGF0YV90IHBId0RhdGEgKQordm9pZCBVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAl1MzIJbHRtcCwgbG9vcDsKIApAQCAtMTAwOSw3ICsxMDA4LDcgQEAKIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Y4LCAweDdmZiApOwogfQogCi12b2lkIFNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNCggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyICpwbHRtcCAsY2hhciBudW1iZXIpCit2b2lkIFNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTMyICpwbHRtcCAsY2hhciBudW1iZXIpCiB7CiAJdTgJaTsKIApAQCAtMTAyMCw3ICsxMDE5LDcgQEAKIAl9CiB9CiAKLXZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wLCBjaGFyIG51bWJlcikKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1MzIgKnBsdG1wLCBjaGFyIG51bWJlcikKIHsKIAl1OAlpOwogCkBAIC0xMDM2LDcgKzEwMzUsNyBAQAogLy8gUkZTeW50aGVzaXplcl9pbml0aWFsIC0tCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHZvaWQKLVJGU3ludGhlc2l6ZXJfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCitSRlN5bnRoZXNpemVyX2luaXRpYWwoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXUzMglhbHRtcFszMl07CiAJdTMyICoJcGx0bXAgPSBhbHRtcDsKQEAgLTExMTUsNyArMTExNCw3IEBACiAJCS8vU3RhcnQgdG8gZmlsbCBSRiBwYXJhbWV0ZXJzLCBQTExfT04gc2hvdWxkIGJlIHB1bGxlZCBsb3cuCiAJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwMDAgKTsKICNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQkJV0JERUJVRygoIiogUExMX09OICAgIGxvd1xuIikpOworCQlwcmludGsoIiogUExMX09OICAgIGxvd1xuIik7CiAjZW5kaWYKIAogCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjQpL3NpemVvZihhbDcyMzBfcmZfZGF0YV8yNFswXSk7CkBAIC0xMjI0LDcgKzEyMjMsNyBAQAogCQkJLy9wdWxsZWQgaGlnaAogCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOwogCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCQkJV0JERUJVRygoIiogUExMX09OICAgIGhpZ2hcbiIpKTsKKwkJCXByaW50aygiKiBQTExfT04gICAgaGlnaFxuIik7CiAJCQkjZW5kaWYKIAogCQkJLy8yLjRHSHoKQEAgLTEyNDQsNyArMTI0Myw3IEBACiAJCQkvLzVHSHoKIAkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwMDAgKTsKIAkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQkJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKwkJCXByaW50aygiKiBQTExfT04gICAgbG93XG4iKTsKIAkJCSNlbmRpZgogCiAJCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfNTApL3NpemVvZihhbDcyMzBfcmZfZGF0YV81MFswXSk7CkBAIC0xMjU2LDcgKzEyNTUsNyBAQAogCiAJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDgwICk7CiAJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JCQlXQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJcHJpbnRrKCIqIFBMTF9PTiAgICBoaWdoXG4iKTsKIAkJCSNlbmRpZgogCiAJCQkvL2x0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgxMkJBQ0Y7CkBAIC0xMjcyLDcgKzEyNzEsNyBAQAogCQkJbXNsZWVwKDUpOwogCiAJCQkvL1diMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKLQkJCS8vV0JERUJVRygoIiogUExMX09OICAgIGhpZ2hcbiIpKTsKKwkJCS8vcHJpbnRrKCIqIFBMTF9PTiAgICBoaWdoXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUkZfV0JfMjQyOgpAQCAtMTQxNCw3ICsxNDEzLDcgQEAKIAl9CiB9CiAKLXZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzI0MDAoICBwaHdfZGF0YV90IHBId0RhdGEpCit2b2lkIEJCUHJvY2Vzc29yX0FMNzIzMF8yNDAwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJcGx0bXBbMTJdOwpAQCAtMTQ1Niw3ICsxNDU1LDcgQEAKIAogfQogCi12b2lkIEJCUHJvY2Vzc29yX0FMNzIzMF81MDAwKCAgcGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfNTAwMCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJdTMyCXBsdG1wWzEyXTsKQEAgLTE1MTAsNyArMTUwOSw3IEBACiAvLyAgICBOb25lLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB2b2lkCi1CQlByb2Nlc3Nvcl9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK0JCUHJvY2Vzc29yX2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJaSwgcGx0bXBbMTJdOwpAQCAtMTgyNCwxMiArMTgyMywxMiBAQAogCQlyZWctPlNRM19maWx0ZXJbaV0gPSAweDJmOyAvLyBoYWxmIG9mIEJpdCAwIH4gNgogfQogCi12b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9tYXgyODI5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQogewogCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgMTAwICk7IC8vIDIwMDYwNjIwLjEgTW9kaWZ5CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsMjIzMCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWwyMjMwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCiB7CiAJdTgJaW5kZXggPSAxMDA7CiAKQEAgLTE4MzksNyArMTgzOCw3IEBACiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBpbmRleCApOwogfQogCi12b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWw3MjMwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKIHsKIAl1OAlpLCBpbmRleCA9IDEwMDsKIApAQCAtMTg2OSw3ICsxODY4LDcgQEAKIAlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIGluZGV4ICk7CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKIHsKIAl1OAlpbmRleCA9IDEwMDsKIApAQCAtMTkwMiw3ICsxOTAxLDcgQEAKIC8vICAgTm9uZS4KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogdm9pZAotUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCitSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJdTMyCXBsdG1wWzE2XTsgLy8gVGhlIDE2IGlzIHRoZSBtYXhpbXVtIGNhcGFiaWxpdHkgb2YgaGFyZHdhcmUKQEAgLTIwMTIsNyArMjAxMSw3IEBACiAKIAkJCS8vU3RhcnQgdG8gZmlsbCBSRiBwYXJhbWV0ZXJzLCBQTExfT04gc2hvdWxkIGJlIHB1bGxlZCBsb3cuCiAJCQkvL1diMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOwotCQkJLy9XQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisJCQkvL3ByaW50aygiKiBQTExfT04gICAgbG93XG4iKTsKIAogCQkJLy9DaGFubmVsIGluZGVwZW5kZW50IHJlZ2lzdGVycwogCQkJaWYoIENoYW5uZWwuYmFuZCAhPSBwSHdEYXRhLT5iYW5kKQpAQCAtMjAzNyw3ICsyMDM2LDcgQEAKIAkJCQkvLyBXcml0ZSB0byByZWdpc3Rlci4gbnVtYmVyIG11c3QgbGVzcyBhbmQgZXF1YWwgdGhhbiAxNgogCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgbnVtYmVyLCBOT19JTkNSRU1FTlQgKTsKIAkJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JCQkJV0JERUJVRygoIkJhbmQgY2hhbmdlZFxuIikpOworCQkJCXByaW50aygiQmFuZCBjaGFuZ2VkXG4iKTsKIAkJCQkjZW5kaWYKIAkJCX0KIApAQCAtMjEzMCw3ICsyMTI5LDcgQEAKIH0KIAogLy9TZXQgdGhlIHR4IHBvd2VyIGRpcmVjdGx5IGZyb20gRFVUIEdVSSwgbm90IGZyb20gdGhlIEVFUFJPTS4gUmV0dXJuIHRoZSBjdXJyZW50IHNldHRpbmcKLXU4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApCiB7CiAJdTMyCUJhbmQgPSBwSHdEYXRhLT5iYW5kOwogCXU4CWluZGV4PTA7CkBAIC0yMTg4LDcgKzIxODcsNyBAQAogfQogCiAvLy0tIFN1YiBmdW5jdGlvbgotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CkBAIC0yMTk3LDcgKzIxOTYsNyBAQAogCXJldHVybiBpbmRleDsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IGluZGV4ICkKIHsKIAl1MzIJCVBvd2VyRGF0YTsKIAlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOwpAQCAtMjIwNiw3ICsyMjA1LDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAvLy0tCi11OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN18yNFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN18yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKQEAgLTIyMTUsNyArMjIxNCw3IEBACiAJcmV0dXJuIGluZGV4OwogfQogLy8tLQotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfNTBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfNTBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CkBAIC0yMjI0LDcgKzIyMjMsNyBAQAogCXJldHVybiBpbmRleDsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI1UG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI1UG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IGluZGV4ICkKIHsKIAl1MzIJCVBvd2VyRGF0YTsKIAlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOwpAQCAtMjIzMyw3ICsyMjMyLDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAvLy0tCi11OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IGluZGV4ICkKIHsKIAl1MzIJCVBvd2VyRGF0YTsKIAl1OAkJaSxjb3VudDsKQEAgLTIyNTIsNyArMjI1MSw3IEBACiAJcmV0dXJuIGk7CiB9CiAvLy0tCi11OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGE3MjMwUG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IGluZGV4ICkKIHsKIAl1MzIJCVBvd2VyRGF0YTsKIAl1OAkJaSxjb3VudDsKQEAgLTIyNzEsNyArMjI3MCw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXU4IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCXU4CQlpLGNvdW50OwpAQCAtMjMxMiw3ICsyMzExLDcgQEAKIC8vCQlJbml0aWFsIHRoZSBoYXJkd2FyZSBzZXR0aW5nIGFuZCBtb2R1bGUgdmFyaWFibGUKIAkvLwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApCit2b2lkIER4eF9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTIzMjYsNyArMjMyNSw3IEBACiAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDQwMCwgcmVnLT5EMDBfRG1hQ29udHJvbCApOwogfQogCi12b2lkIE14eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgTXh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJCXRtcDsKQEAgLTI0MTcsNyArMjQxNiw3IEBACiB9CiAKIAotdm9pZCBVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApCit2b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAkvLyBTVywgUE1VIHJlc2V0IGFuZCB0dXJuIG9mZiBjbG9jawogCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDMgKTsKQEAgLTI0MjUsNyArMjQyNCw3IEBACiB9CiAKIC8vRGVjaWRlIHRoZSBUeFZnYSBvZiBldmVyeSBjaGFubmVsCi12b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHBod19kYXRhX3QgcEh3RGF0YSApCit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJdTMyCQlpLCBqLCBsdG1wOwogCXUxNgkJVmFsdWVbTUFYX1RYVkdBX0VFUFJPTV07CkBAIC0yNDc5LDcgKzI0NzgsNyBAQAogLy8gb3IgUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4IGJlIGNhbGxlZCwgbmV3IFR4VmdhIHdpbGwgdGFrZSBlZmZlY3QuCiAvLyBUeFZnYVNldHRpbmdJbkVFUFJPTSBvZiBzSHdEYXRhIGlzIGFuIHU4IGFycmF5IHBvaW50IHRvIEVFUFJPTSBjb250YWluIGZvciBJUzg5QzM1CiAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgdXNlIGRlZmF1bHQgVHhWZ2FTZXR0aW5nSW5FRVBST00gZGF0YSB0byBjYWxjdWxhdGUgbmV3IFR4VmdhLgotdm9pZCBFRVBST01UeFZnYUFkanVzdCggIHBod19kYXRhX3QgcEh3RGF0YSApIC8vIDIwMDYwNjE5LjUgQWRkCit2b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkgLy8gMjAwNjA2MTkuNSBBZGQKIHsKIAl1OAkqCXBUeFZnYSA9IHBId0RhdGEtPlR4VmdhU2V0dGluZ0luRUVQUk9NOwogCXMxNgkJaSwgc3RtcDsKQEAgLTI2MTIsMTQgKzI2MTEsMTQgQEAKIAl9CiAKIAkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JV0JERUJVRygoIiBUeFZnYUZvcjI0IDogXG4iKSk7CisJcHJpbnRrKCIgVHhWZ2FGb3IyNCA6IFxuIik7CiAJRGF0YURtcCgodTggKilwSHdEYXRhLT5UeFZnYUZvcjI0LCAxNCAsMCk7Ci0JV0JERUJVRygoIiBUeFZnYUZvcjUwIDogXG4iKSk7CisJcHJpbnRrKCIgVHhWZ2FGb3I1MCA6IFxuIik7CiAJRGF0YURtcCgodTggKilwSHdEYXRhLT5UeFZnYUZvcjUwLCA3MCAsMCk7CiAJI2VuZGlmCiB9CiAKLXZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggcmF0ZSApIC8vIDIwMDYwNjEzLjEKK3ZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggcmF0ZSApIC8vIDIwMDYwNjEzLjEKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJdW5zaWduZWQgY2hhcgkJSXMxMWJSYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCmluZGV4IDE4OGEyNTMuLjU0OTg3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKQEAgLTE3LDkgKzE3LDYgQEAKIAogI2luY2x1ZGUgImxvY2FscGFyYS5oIgogCi0vKioqKioqKioqKioqKioqKioqIElOQ0xVREUgRklMRVMgU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vI2luY2x1ZGUgIkdMXGdsX2NvcmUuaCIKLQogLyoqKioqKioqKioqKioqKioqKiBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIF9JTkxJTkUgICAgICBfX2lubGluZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJkMTE4Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLSNpZm5kZWYgX19XSU5CT05EX1NNRV9TX0gKLSNkZWZpbmUgX19XSU5CT05EX1NNRV9TX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlICJtYWNfc3RydWN0dXJlcy5oIgotI2luY2x1ZGUgImxvY2FscGFyYS5oIgotCi0vLwotLy8gU01FX1MuSCAtCi0vLyBTTUUgdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkVTLCB2YXJpYWJsZXMKLS8vCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgU01FIG1vZHVsZQotLy8gMHgwMH4weDFGIDogTVNHIGZyb20gR1VJIGRpc3BhdGNoCi0vLyAweDIwfjB4M0YgOiBNU0cgZnJvbSBNTE1FCi0vLyAweDQwfjB4NUYgOiBNU0cgZnJvbSBTQ0FOCi0vLyAweDYwfjB4NkYgOiBNU0cgZnJvbSBUWC9SWAotLy8gMHg3MH4weDdGIDogTVNHIGZyb20gUk9BTUlORwotLy8gMHg4MH4weDhGIDogTVNHIGZyb20gSVNSCi0vLyAweDkwCQkgOiBNU0cgVGltZU91dAotCi0vLyBmcm9tIEdVSQotI2RlZmluZSBTTUVNU0dfU0NBTl9SRVEJCQkJCTB4MDEKLS8vI2RlZmluZSBTTUVNU0dfUEFTU0lWRV9TQ0FOX1JFUQkJCTB4MDIKLSNkZWZpbmUgU01FTVNHX0pPSU5fUkVRCQkJCQkweDAzCi0jZGVmaW5lIFNNRU1TR19TVEFSVF9JQlNTCQkJCTB4MDQKLSNkZWZpbmUgU01FTVNHX0RJU0NPTk5FQ1RfUkVRCQkJMHgwNQotI2RlZmluZSBTTUVNU0dfQVVUSEVOX1JFUQkJCQkweDA2Ci0jZGVmaW5lIFNNRU1TR19ERUFVVEhFTl9SRVEJCQkJMHgwNwotI2RlZmluZSBTTUVNU0dfQVNTT0NfUkVRCQkJCTB4MDgKLSNkZWZpbmUgU01FTVNHX1JFQVNTT0NfUkVRCQkJCTB4MDkKLSNkZWZpbmUgU01FTVNHX0RJU0FTU09DX1JFUQkJCQkweDBhCi0jZGVmaW5lIFNNRU1TR19QT1dFUlNBVkVfUkVRCQkJMHgwYgotCi0KLS8vIGZyb20gTUxNRQotI2RlZmluZSBTTUVNU0dfQVVUSEVOX0NGTQkJCQkweDIxCi0jZGVmaW5lIFNNRU1TR19BVVRIRU5fSU5ECQkJCTB4MjIKLSNkZWZpbmUgU01FTVNHX0FTU09DX0NGTQkJCQkweDIzCi0jZGVmaW5lIFNNRU1TR19ERUFVVEhFTl9JTkQJCQkJMHgyNAotI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfSU5ECQkJCTB4MjUKLS8vIGZyb20gU0NBTgotI2RlZmluZSBTTUVNU0dfU0NBTl9DRk0JCQkJCTB4NDEKLSNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1NfQ0ZNCQkJMHg0MgotLy8gZnJvbSBNVE8sIGZ1bmN0aW9uIGNhbGwgdG8gc2V0IFNNRSBwYXJhbWV0ZXJzCi0KLS8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCi0vLyNkZWZpbmUgU01FTVNHX0lCU1NfSk9JTl9VUERBVEVfQlNTSUQJMHg2MQotI2RlZmluZSBTTUVNU0dfQ09VTlRFUk1FQVNVUkVfTUlDRkFJTF9USU1FT1VUCQkweDYyCi0jZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9CTE9DS19USU1FT1VUCTB4NjMKLS8vIGZyb20gUk9BTUlORwotI2RlZmluZSBTTUVNU0dfSEFORE9WRVJfSk9JTl9SRVEJCTB4NzEKLSNkZWZpbmUgU01FTVNHX0VORF9ST0FNSU5HCQkJCTB4NzIKLSNkZWZpbmUgU01FTVNHX1NDQU5fSk9JTl9SRVEJCQkweDczCi0vLyBmcm9tIElTUgotI2RlZmluZSBTTUVNU0dfVFNGX1NZTkNfSU5ECQkJCTB4ODEKLS8vIGZyb20gVGltZU91dAotI2RlZmluZSBTTUVNU0dfVElNRU9VVAkJCQkJMHg5MQotCi0KLQotI2RlZmluZSBNQVhfUE1LSURfQWNjdW50ICAgICAgICAgICAgICAgIDE2Ci0vL0BhZGRlZCBieSB3cyAwNC8yMi8wNQotI2RlZmluZSBDaXBoZXJfRGlzYWJsZWQgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ2lwaGVyX1dlcCAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIENpcGhlcl9Ua2lwICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBDaXBoZXJfQ2NtcCAgICAgICAgICAgICAgICAgICAgIDQKLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vQ29uc3RhbnRzCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9HbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzCi0KLSNkZWZpbmUgTlVNT0ZXRVBFTlRSSUVTICAgICA2NAotCi10eXBlZGVmIGVudW0gX1dFUEtleU1vZGUKLXsKLSAgICBXRVBLRVlfRElTQUJMRUQgPSAwLAotICAgIFdFUEtFWV82NCAgICAgICA9IDEsCi0gICAgV0VQS0VZXzEyOCAgICAgID0gMgotCi19IFdFUEtFWU1PREUsICpwV0VQS0VZTU9ERTsKLQotI2lmZGVmIF9XUEEyXwotCi10eXBlZGVmIHN0cnVjdCBfQlNTSW5mbwotewotICB1OCAgICAgICAgUHJlQXV0aEJzc0lEWzZdOwotICBQTUtJRCAgICAgICAgcG1raWRfdmFsdWU7Ci19QlNTSURfSW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgX1BNS0lEX1RhYmxlIC8vYWRkZWQgYnkgd3MgMDUvMDUvMDQKLXsKLSAgIHUzMiAgTGVuZ3RoOwotICAgdTMyICBCU1NJREluZm9Db3VudDsKLSAgIEJTU0lEX0luZm8gQlNTSURJbmZvWzE2XTsKLQotfSBQTUtJRF9UYWJsZTsKLQotI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KLQotI2RlZmluZSBNQVhfQkFTSUNfUkFURV9TRVQgICAgICAgICAgMTUKLSNkZWZpbmUgTUFYX09QVF9SQVRFX1NFVCAgICAgICAgICAgIE1BWF9CQVNJQ19SQVRFX1NFVAotCi0KLXR5cGVkZWYgc3RydWN0IF9TTUVfUEFSQU1FVEVSUwotewotICAgIHUxNgkJCQl3U3RhdGU7Ci0JdTgJCQkJYm9EVVRtb2RlOwotCXU4CQkJCWJEZXNpcmVkUG93ZXJTYXZlOwotCi0JLy8gU01FIHRpbWVyIGFuZCB0aW1lb3V0IHZhbHVlCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0KLQl1OAkJCQlib0luVGltZXJIYW5kbGVyOwotCXU4IAkJCQlib0F1dGhSZXRyeUFjdGl2ZTsKLQl1OAkJCQlyZXNlcnZlZF8wWzJdOwotCi0JdTMyCQkJCUF1dGhlblJldHJ5VGltZXJWYWw7CS8vIE5PVEU6IEFzc29jIGRvbid0IGZhaWwgdGltZW91dAotCXUzMgkJCQlKb2luRmFpbFRpbWVyVmFsOwkJLy8gMTAqQmVhY29uLUludGVydmFsCi0KLQkvL1JhdGVzCi0JdTgJCQkJQlNTQmFzaWNSYXRlU2V0WyhNQVhfQkFTSUNfUkFURV9TRVQgKyAzKSAmIH4weDAzIF07ICAgIC8vIEJTUyBiYXNpYyByYXRlIHNldAotCXU4CQkJCU9wZXJhdGlvbmFsUmF0ZVNldFsoTUFYX09QVF9SQVRFX1NFVCArIDMpICYgfjB4MDMgXTsgLy8gT3BlcmF0aW9uYWwgcmF0ZSBzZXQKLQotCXU4CQkJCU51bU9mQlNTQmFzaWNSYXRlOwotCXU4CQkJCU51bU9mT3BlcmF0aW9uYWxSYXRlOwotCXU4CQkJCXJlc2VydmVkXzFbMl07Ci0KLQl1MzIJCQkJQmFzaWNSYXRlQml0bWFwOwotCXUzMgkJCQlPcFJhdGVCaXRtYXA7Ci0KLQkvLyBTeXN0ZW0gcGFyYW1ldGVycyBTZXQgYnkgR1VJCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGFydCBJQlNTIHBhcmFtZXRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCXUzMgkJCQlib1N0YXJ0SUJTUzsJCQkvL1N0YXJ0IElCU1MgdG9nZ2xlCi0KLQl1MTYJCQkJd0JlYWNvblBlcmlvZDsKLQl1MTYJCQkJd0FUSU1fV2luZG93OwotCi0JQ2hhbkluZm8JCQlJYnNzQ2hhbjsgLy8gMkIJLy9jaGFubmVsIHNldHRpbmcgd2hlbiBzdGFydCBJQlNTCi0JdTgJCQkJcmVzZXJ2ZWRfMlsyXTsKLQotICAgIC8vIEpvaW4gcmVsYXRlZAotCXUxNgkJCQl3RGVzaXJlZEpvaW5CU1M7CQkvLyBCU1MgaW5kZXggd2hpY2ggZGVzaXJlIHRvIGpvaW4KLQl1OAkJCQlib0pvaW5SZXE7CQkJCS8vSm9pbiByZXF1ZXN0IHRvZ2dsZQotCXU4CQkJCWJEZXNpcmVkQlNTVHlwZTsJCS8vZm9yIEpvaW4gcmVxdWVzdAotCi0gICAgdTE2CQkJCXdDYXBhYmlsaXR5SW5mbzsgICAgICAgIC8vIFVzZWQgd2hlbiBpbnZva2luZyB0aGUgTUxNRV9Bc3NvY2lhdGVfcmVxdWVzdCgpLgotCXUxNgkJCQl3Tm9uRVJQY2FwYWJpbGl0eUluZm87Ci0KLSAgICBzdHJ1Y3QgU1NJRF9FbGVtZW50IHNEZXNpcmVkU1NJRDsgLy8gMzQgQgotCXU4CQkJCXJlc2VydmVkXzNbMl07Ci0KLQl1OCAgICAJCQlhYkRlc2lyZWRCU1NJRFtNQUNfQUREUl9MRU5HVEggKyAyXTsKLQotCXU4CQkJCWJKb2luU2NhbkNvdW50OwkJCS8vIHRoZSB0aW1lIG9mIHNjYW4tam9pbiBhY3Rpb24gbmVlZCB0byBkbwotCXU4CQkJCWJEZXNpcmVkQXV0aE1vZGU7ICAgICAgIC8vIEFVVEhfT1BFTl9TWVNURU0gb3IgQVVUSF9TSEFSRURfS0VZCi0JdTgJCQkJcmVzZXJ2ZWRfNFsyXTsKLQotICAgIC8vIEVuY3J5cHRpb24gcGFyYW1ldGVycwotCXU4ICAgICAJCQlfZG90MTFQcml2YWN5SW52b2tlZDsKLSAgICB1OCAgICAgICAgICAgICAJX2RvdDExUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkOwotCXU4CQkJCXJlc2VydmVkXzVbMl07Ci0KLSAgICAvL0Agd3MgYWRkZWQKLSAgICB1OAkJCQlEZXNpcmVkRW5jcnlwdDsKLQl1OAkJCQllbmNyeXB0X3N0YXR1czsJLy9FTkNSWVBUX0RJU0FCTEUsIEVOQ1JZUFRfV0VQLCBFTkNSWVBUX1dFUF9OT0tFWSwgRU5DUllQVF9US0lQLCAuLi4KLQl1OAkJCQlrZXlfbGVuZ3RoOwotCXU4CQkJCXBhaXJ3aXNlX2tleV9vazsKLQotCXU4CQkJCWdyb3VwX2tleV9vazsKLSAgICB1OAkJCQl3cGFfb2s7ICAgICAgICAgICAgIC8vIGluZGljYXRlIHRoZSBjb250cm9sIHBvcnQgb2YgODAyLjF4IGlzIG9wZW4gb3IgY2xvc2UKLQl1OAkJCQlwYWlyd2lzZV9rZXlfdHlwZTsKLQl1OAkJCQlncm91cF9rZXlfdHlwZTsKLQotICAgIHUzMiAgICAgICAgICAgICAgIF9kb3QxMVdFUERlZmF1bHRLZXlJRDsKLQotCXU4ICAgICAgICAgICAgICAJdHhfbWljX2tleVs4XTsgICAgICAvLyBUT0RPOiAwNjI3IGtldmluLVRLSVAKLQl1OCAgICAgICAgICAgICAgCXJ4X21pY19rZXlbOF07ICAgICAgLy8gVE9ETzogMDYyNyBrZXZpbi1US0lQCi0JdTgJCQkJZ3JvdXBfdHhfbWljX2tleVs4XTsKLQl1OAkJCQlncm91cF9yeF9taWNfa2V5WzhdOwotCi0vLwkjaWZkZWYgX1dQQV8KLQl1OAkJCQlBc3NvY1JlcVZhcklFWzIwMF07Ci0JdTgJCQkJQXNzb2NSZXNwVmFySUVbMjAwXTsKLQotCXUxNgkJCQlBc3NvY1JlcVZhckxlbjsKLQl1MTYJCQkJQXNzb2NSZXNwVmFyTGVuOwotCXU4CQkJCWJvUmVhc3NvYzsJCQkJLy91c2UgYXNzb2MuIG9yIHJlYXNzb2MuCi0JdTgJCQkJcmVzZXJ2ZWRfNlszXTsKLQl1MTYJCQkJQXNzb2NSZXNwQ2FwYWJpbGl0eTsKLQl1MTYJCQkJQXNzb2NSZXNwU3RhdHVzOwotLy8JI2VuZGlmCi0KLQkjaWZkZWYgX1dQQTJfCi0gICAgdTggICAgICAgICAgICAgICBQbWtJZFRhYmxlWzI1Nl07Ci0gICAgdTMyICAgICAgICAgICAgICAgUG1raWRUYWJsZUluZGV4OwotCSNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCi0KLX0gU01FX1BBUkFNRVRFUlMsICpQU01FX1BBUkFNRVRFUlM7Ci0KLSNkZWZpbmUgcHNTTUUJCQkoJihhZGFwdGVyLT5zU21lUGFyYSkpCi0KLSNkZWZpbmUgd1NNRUdldEN1cnJlbnRTVEFTdGF0ZShhZGFwdGVyKQkJKCh1MTYpKGFkYXB0ZXIpLT5zU21lUGFyYS53U3RhdGUpCi0KLQotCi0vLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0vLwlTbWVNb2R1bGUuaAotLy8JCURlZmluZSB0aGUgcmVsYXRlZCBkZWZpbml0aW9ucyBvZiBTTUUgbW9kdWxlCi0vLwloaXN0b3J5IC0tIDAxLzE0LzAzJyBjcmVhdGVkCi0vLwotLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotCi0vL0RlZmluZSB0aGUgc3RhdGUgb2YgU01FIG1vZHVsZQotI2RlZmluZSBESVNBQkxFRAkJCQkJCTAKLSNkZWZpbmUgSU5JVF9TQ0FOCQkJCQkJMQotI2RlZmluZSBTQ0FOX1JFQURZCQkJCQkJMgotI2RlZmluZSBTVEFSVF9JQlNTCQkJCQkJMwotI2RlZmluZSBKT0lOX1BFTkRJTkcJCQkJCTQKLSNkZWZpbmUgSk9JTl9DRk0JCQkJCQk1Ci0jZGVmaW5lIEFVVEhFTlRJQ0FURV9QRU5ESU5HCQkJNgotI2RlZmluZSBBVVRIRU5USUNBVEVECQkJCQk3Ci0jZGVmaW5lIENPTk5FQ1RFRAkJCQkJCTgKLS8vI2RlZmluZSBFQVBfU1RBUlRJTkcJCQkJCTkKLS8vI2RlZmluZSBFQVBPTF9BVVRIRU5fUEVORElORwkJCTEwCi0vLyNkZWZpbmUgU0VDVVJFX0NPTk5FQ1RFRAkJCQkxMQotCi0KLS8vIFN0YXRpYyBmdW5jdGlvbgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1X3Zlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDMzYmMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLwotLy8gT25seSBkZWZpbmUgb25lIG9mIGZvbGxvdwotLy8KLQotI2lmZGVmIFdCX1dJTgotCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDEsMDAsNDcsMDAKLQkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMS4wMC40Ny4wMCIKLQkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAxMDAKLQkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKLSNlbmRpZgotCi0jaWZkZWYgV0JfQ0UKLQkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAyLDAwLDQ3LDAwCi0JI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjIuMDAuNDcuMDAiCi0JI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMjAwCi0JI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCi0jZW5kaWYKLQotI2lmZGVmIFdCX0xJTlVYCi0JI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMywwMCw0NywwMAotCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIzLjAwLjQ3LjAwIgotCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDMwMAotCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAotI2VuZGlmCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnLmMKaW5kZXggYzc0YjNmZC4uZjU2MDhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWcuYwpAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCi1leHRlcm4gdm9pZCBwaHlfY2FsaWJyYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KTsKK2V4dGVybiB2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSk7CiAKIC8vIHRydWUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CiAvLyBmYWxzZSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CkBAIC0xMyw3ICsxMyw3IEBACiAvLyBGbGFnIDogQVVUT19JTkNSRU1FTlQgLSBSZWdpc3Rlck5vIHdpbGwgYXV0byBpbmNyZW1lbnQgNAogLy8JCSAgTk9fSU5DUkVNRU5UIC0gRnVuY3Rpb24gd2lsbCB3cml0ZSBkYXRhIGludG8gdGhlIHNhbWUgcmVnaXN0ZXIKIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfQnVyc3RXcml0ZShwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgKiBwUmVnaXN0ZXJEYXRhLCB1OCBOdW1iZXJPZkRhdGEsIHU4IEZsYWcpCitXYjM1UmVnX0J1cnN0V3JpdGUoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgdTMyICogcFJlZ2lzdGVyRGF0YSwgdTggTnVtYmVyT2ZEYXRhLCB1OCBGbGFnKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXJiCSp1cmIgPSBOVUxMOwpAQCAtNzMsNyArNzMsNyBAQAogfQogCiB2b2lkCi1XYjM1UmVnX1VwZGF0ZShwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlKQorV2IzNVJlZ19VcGRhdGUoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJc3dpdGNoIChSZWdpc3Rlck5vKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAKIC8vIHRydWUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CiAvLyBmYWxzZSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CiB1bnNpZ25lZCBjaGFyCi1XYjM1UmVnX1dyaXRlU3luYyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQorV2IzNVJlZ19Xcml0ZVN5bmMoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJaW50IHJldCA9IC0xOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIAlpZiAocmV0IDwgMCkgewogCQkjaWZkZWYgX1BFX1JFR19EVU1QXwotCQlXQkRFQlVHKCgiRVAwIFdyaXRlIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJcHJpbnRrKCJFUDAgV3JpdGUgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIik7CiAJCSNlbmRpZgogCiAJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsgLy8gMjAwNjA3MDQuMgpAQCAtMTYyLDcgKzE2Miw3IEBACiAvLyB0cnVlICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogdW5zaWduZWQgY2hhcgotV2IzNVJlZ19Xcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQorV2IzNVJlZ19Xcml0ZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkcjsKQEAgLTIyMiw3ICsyMjIsNyBAQAogLy8gdHJ1ZSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggcGh3X2RhdGFfdCBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgdTMyIFJlZ2lzdGVyVmFsdWUsCitXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sIHUzMiBSZWdpc3RlclZhbHVlLAogCQkJCXM4ICpwVmFsdWUsIHM4IExlbikKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CkBAIC0yODEsNyArMjgxLDcgQEAKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKIC8vIHBSZWdpc3RlclZhbHVlIDogSXQgbXVzdCBiZSBhIHJlc2lkZW50IGJ1ZmZlciBkdWUgdG8gYXN5bmNocm9ub3VzIHJlYWQgcmVnaXN0ZXIuCiB1bnNpZ25lZCBjaGFyCi1XYjM1UmVnX1JlYWRTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQorV2IzNVJlZ19SZWFkU3luYyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIHUzMiAqIHBSZWdpc3RlclZhbHVlICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJdTMyICoJcGx0bXAgPSBwUmVnaXN0ZXJWYWx1ZTsKQEAgLTMxNiw3ICszMTYsNyBAQAogCiAJaWYgKHJldCA8IDApIHsKIAkJI2lmZGVmIF9QRV9SRUdfRFVNUF8KLQkJV0JERUJVRygoIkVQMCBSZWFkIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJcHJpbnRrKCJFUDAgUmVhZCByZWdpc3RlciB1c2IgbWVzc2FnZSBzZW5kaW5nIGVycm9yXG4iKTsKIAkJI2VuZGlmCiAKIAkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCkBAIC0zMzAsNyArMzMwLDcgQEAKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKIC8vIHBSZWdpc3RlclZhbHVlIDogSXQgbXVzdCBiZSBhIHJlc2lkZW50IGJ1ZmZlciBkdWUgdG8gYXN5bmNocm9ub3VzIHJlYWQgcmVnaXN0ZXIuCiB1bnNpZ25lZCBjaGFyCi1XYjM1UmVnX1JlYWQocGh3X2RhdGFfdCBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgIHUzMiAqIHBSZWdpc3RlclZhbHVlICkKK1diMzVSZWdfUmVhZChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICogZHI7CkBAIC0zODUsNyArMzg1LDcgQEAKIAogCiB2b2lkCi1XYjM1UmVnX0VQMFZNX3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK1diMzVSZWdfRVAwVk1fc3RhcnQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtMzk3LDcgKzM5Nyw3IEBACiB9CiAKIHZvaWQKLVdiMzVSZWdfRVAwVk0ocGh3X2RhdGFfdCBwSHdEYXRhICkKK1diMzVSZWdfRVAwVk0oc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJc3RydWN0IHVyYgkqdXJiOwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAKIAlpZiAocmV0IDwgMCkgewogI2lmZGVmIF9QRV9SRUdfRFVNUF8KLQkJV0JERUJVRygoIkVQMCBJcnAgc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMCBJcnAgc2VuZGluZyBlcnJvclxuIik7CiAjZW5kaWYKIAkJZ290byBjbGVhbnVwOwogCX0KQEAgLTQ1Nyw3ICs0NTcsNyBAQAogdm9pZAogV2IzNVJlZ19FUDBWTV9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0JcGh3X2RhdGFfdCAgcEh3RGF0YSA9IChwaHdfZGF0YV90KXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaHdfZGF0YSAqICBwSHdEYXRhID0gKHN0cnVjdCBod19kYXRhICopdXJiLT5jb250ZXh0OwogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3Qgd2IzNV9yZWdfcXVldWUgKnJlZ19xdWV1ZTsKIApAQCAtNDgwLDggKzQ4MCw3IEBACiAKIAkJaWYgKHJlZy0+RVAwVk1fc3RhdHVzKSB7CiAjaWZkZWYgX1BFX1JFR19EVU1QXwotCQkJV0JERUJVRygoIkVQMCBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKLQkJCURlYnVnVXNiZFN0YXR1c0luZm9ybWF0aW9uKCByZWctPkVQMFZNX3N0YXR1cyApOworCQkJcHJpbnRrKCJFUDAgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKTsKICNlbmRpZgogCQkJcmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CiAJCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7CkBAIC01MDAsNyArNDk5LDcgQEAKIAogCiB2b2lkCi1XYjM1UmVnX2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQorV2IzNVJlZ19kZXN0cm95KHN0cnVjdCBod19kYXRhICogcEh3RGF0YSkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJc3RydWN0IHVyYgkqdXJiOwpAQCAtNTMwLDcgKzUyOSw3IEBACiAJCQlrZnJlZShyZWdfcXVldWUpOwogCQl9IGVsc2UgewogCQkJI2lmZGVmIF9QRV9SRUdfRFVNUF8KLQkJCVdCREVCVUcoKCJFUDAgcXVldWUgcmVsZWFzZSBlcnJvclxuIikpOworCQkJcHJpbnRrKCJFUDAgcXVldWUgcmVsZWFzZSBlcnJvclxuIik7CiAJCQkjZW5kaWYKIAkJfQogCQlzcGluX2xvY2tfaXJxKCAmcmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKQEAgLTU0Myw3ICs1NDIsNyBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIFRoZSBmdW5jdGlvbiBjYW4gYmUgcnVuIGluIHBhc3NpdmUtbGV2ZWwgb25seS4KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWc9JnBId0RhdGEtPnJlZzsKIAl1MzIgbHRtcDsKQEAgLTU5OSw3ICs1OTgsNyBAQAogCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlJlZ2lvbl9TY2FuSW50ZXJ2YWwgKTsKIAogCS8vIFVwZGF0ZSBFdGhlcm5ldCBhZGRyZXNzCi0JbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7CisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcywgRVRIX0FMRU4gKTsKIAogCS8vIFVwZGF0ZSBzb2Z0d2FyZSB2YXJpYWJsZQogCXBId0RhdGEtPlNvZnR3YXJlU2V0ID0gKHUxNikoU29mdHdhcmVTZXQgJiAweGZmZmYpOwpAQCAtNzIzLDcgKzcyMiw3IEBACiAJcmV0dXJuIGR3RGF0YTsKIH0KIAotdm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApCit2b2lkIFdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAl1MzIgQkIzYywgQkI1NDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZ19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnX2YuaAppbmRleCBkOTcyMTVhLi4zMGY1YjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnX2YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnX2YuaApAQCAtNiw0NyArNiw0NyBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdW5zaWduZWQgY2hhciBXYjM1UmVnX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBNeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBSRlN5bnRoZXNpemVyX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLS8vdm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBzOCBDaGFubmVsICk7Ci12b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKTsKLXZvaWQgQkJQcm9jZXNzb3JfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjEzLjEKLS8vdm9pZCBSRl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjI2LjUuYyBBZGQKLXU4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI1UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Ci11OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7IC8vIDIwMDYwNjE5LjUgQWRkCit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFV4eF9SZWFkRXRoZXJuZXRBZGRyZXNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIER4eF9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIE14eF9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFJGU3ludGhlc2l6ZXJfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOworLy92b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHM4IENoYW5uZWwgKTsKK3ZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApOwordm9pZCBCQlByb2Nlc3Nvcl9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIEJCUHJvY2Vzc29yX1JhdGVDaGFuZ2luZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MTMuMQorLy92b2lkIFJGX1JhdGVDaGFuZ2luZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MjYuNS5jIEFkZAordTggUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfMjRQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfNTBQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqLCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordm9pZCBHZXRUeFZnYUZyb21FRVBST00oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsgLy8gMjAwNjA2MTkuNSBBZGQKIAogI2RlZmluZSBSRldyaXRlQ29udHJvbERhdGEoIF9BLCBfViApIFdiMzVSZWdfV3JpdGUoIF9BLCAweDA4NjQsIF9WICkKIAotdm9pZCBXYjM1UmVnX2Rlc3Ryb3koICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19kZXN0cm95KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAKLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkU3luYyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIHUzMiAqIHBSZWdpc3RlclZhbHVlICk7Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwotdW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoICBwaHdfZGF0YV90IHBId0RhdGEsCit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfUmVhZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIHUzMiAqIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfUmVhZFN5bmMoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlU3luYyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLAogCQkJCQkJCQkgdTE2IFJlZ2lzdGVyTm8sCiAJCQkJCQkJCSB1MzIgUmVnaXN0ZXJWYWx1ZSwKIAkJCQkJCQkJIHM4ICpwVmFsdWUsCiAJCQkJCQkJCSBzOCBMZW4pOwotdW5zaWduZWQgY2hhciBXYjM1UmVnX0J1cnN0V3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiAqIHBSZWdpc3RlckRhdGEsICB1OCBOdW1iZXJPZkRhdGEsICB1OCBGbGFnICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfQnVyc3RXcml0ZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyRGF0YSwgIHU4IE51bWJlck9mRGF0YSwgIHU4IEZsYWcgKTsKIAotdm9pZCBXYjM1UmVnX0VQMFZNKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFdiMzVSZWdfRVAwVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19FUDBWTSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX0VQMFZNX3N0YXJ0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiB2b2lkIFdiMzVSZWdfRVAwVk1fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKTsKIAogdTMyIEJpdFJldmVyc2UoIHUzMiBkd0RhdGEsIHUzMiBEYXRhTGVuZ3RoKTsKQEAgLTU0LDggKzU0LDggQEAKIHZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW01BQ19BRERSX0xFTkdUSF0sICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApOwogdTMyIENhcmRDb21wdXRlQ3JjKCAgdTggKiBCdWZmZXIsICB1MzIgTGVuZ3RoICk7CiAKLXZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgV2IzNVJlZ19VcGRhdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Ci11bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfVXBkYXRlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKaW5kZXggN2Y4YjZkNy4uM2U4Y2YwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKQEAgLTgyLDkgKzgyLDkgQEAKIHN0YXRpYyB1MTYgV2IzNVJ4X2luZGljYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOwogCURFU0NSSVBUT1IJUnhEZXM7Ci0JUFdCMzVSWAlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAJdTggKgkJcFJ4QnVmZmVyQWRkcmVzczsKIAl1MTYJCVBhY2tldFNpemU7CiAJdTE2CQlzdG1wLCBCdWZmZXJTaXplLCBzdG1wMiA9IDA7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJCS8vIEJhc2ljIGNoZWNrIGZvciBSeCBsZW5ndGguIElzIGxlbmd0aCB2YWxpZD8KIAkJCWlmIChQYWNrZXRTaXplID4gTUFYX1BBQ0tFVF9TSVpFKSB7CiAJCQkJI2lmZGVmIF9QRV9SWF9EVU1QXwotCQkJCVdCREVCVUcoKCJTZXJpb3VzIEVSUk9SIDogUnggZGF0YSBzaXplIHRvbyBsb25nLCBzaXplID0lZFxuIiwgUGFja2V0U2l6ZSkpOworCQkJCXByaW50aygiU2VyaW91cyBFUlJPUiA6IFJ4IGRhdGEgc2l6ZSB0b28gbG9uZywgc2l6ZSA9JWRcbiIsIFBhY2tldFNpemUpOwogCQkJCSNlbmRpZgogCiAJCQkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOwpAQCAtMTYxLDggKzE2MSw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7Ci0JUFdCMzVSWAkJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CisJc3RydWN0IHdiMzVfcnggKnBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OwogCXU4ICoJCXBSeEJ1ZmZlckFkZHJlc3M7CiAJdTMyCQlTaXplQ2hlY2s7CiAJdTE2CQlCdWxrTGVuZ3RoOwpAQCAtMTk0LDggKzE5NCw3IEBACiAJLy8gVGhlIFVSQiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKIAlpZiAocFdiMzVSeC0+RVAzVk1fc3RhdHVzICE9IDApIHsKIAkJI2lmZGVmIF9QRV9VU0JfU1RBVEVfRFVNUF8KLQkJV0JERUJVRygoIkVQMyBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKLQkJRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIHBXYjM1UngtPkVQM1ZNX3N0YXR1cyApOworCQlwcmludGsoIkVQMyBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpOwogCQkjZW5kaWYKIAkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOwogCQlnb3RvIGVycm9yOwpAQCAtMjM5LDggKzIzOCw4IEBACiBzdGF0aWMgdm9pZCBXYjM1Ungoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7Ci0JUFdCMzVSWAlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAJdTggKglwUnhCdWZmZXJBZGRyZXNzOwogCXN0cnVjdCB1cmIgKnVyYiA9IHBXYjM1UngtPlJ4VXJiOwogCWludAlyZXR2OwpAQCAtMjYwLDcgKzI1OSw3IEBACiAJaWYgKCFwV2IzNVJ4LT5SeE93bmVyW1J4QnVmZmVySWRdKSB7CiAJCS8vIEl0J3MgaW1wb3NzaWJsZSB0byBydW4gaGVyZS4KIAkJI2lmZGVmIF9QRV9SWF9EVU1QXwotCQlXQkRFQlVHKCgiUnggZHJpdmVyIGZpZm8gdW5hdmFpbGFibGVcbiIpKTsKKwkJcHJpbnRrKCJSeCBkcml2ZXIgZmlmbyB1bmF2YWlsYWJsZVxuIik7CiAJCSNlbmRpZgogCQlnb3RvIGVycm9yOwogCX0KQEAgLTMwMiw4ICszMDEsOCBAQAogdm9pZCBXYjM1Unhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7Ci0JUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAKIAkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gdGhlIFdiMzVSeCgpIGZ1bmN0aW9uCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyKSA9PSAxKSB7CkBAIC0zMTQsOSArMzEzLDkgQEAKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgdm9pZCBXYjM1UnhfcmVzZXRfZGVzY3JpcHRvciggIHBod19kYXRhX3QgcEh3RGF0YSApCitzdGF0aWMgdm9pZCBXYjM1UnhfcmVzZXRfZGVzY3JpcHRvciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7Ci0JUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAJdTMyCWk7CiAKIAlwV2IzNVJ4LT5CeXRlUmVjZWl2ZWQgPSAwOwpAQCAtMzMwLDkgKzMyOSw5IEBACiAJCXBXYjM1UngtPlJ4T3duZXJbaV0gPSAxOwogfQogCi11bnNpZ25lZCBjaGFyIFdiMzVSeF9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3Vuc2lnbmVkIGNoYXIgV2IzNVJ4X2luaXRpYWwoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJc3RydWN0IHdiMzVfcnggKnBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OwogCiAJLy8gSW5pdGlhbCB0aGUgQnVmZmVyIFF1ZXVlCiAJV2IzNVJ4X3Jlc2V0X2Rlc2NyaXB0b3IoIHBId0RhdGEgKTsKQEAgLTM0MSwyMyArMzQwLDIzIEBACiAJcmV0dXJuICghIXBXYjM1UngtPlJ4VXJiKTsKIH0KIAotdm9pZCBXYjM1Unhfc3RvcChwaHdfZGF0YV90IHBId0RhdGEpCit2b2lkIFdiMzVSeF9zdG9wKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSkKIHsKLQlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAogCS8vIENhbmNlbGluZyB0aGUgSXJwIGlmIGFscmVhZHkgc2VuZHMgaXQgb3V0LgogCWlmIChwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKSB7CiAJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVJ4LT5SeFVyYiApOyAvLyBPbmx5IHVzZSB1bmxpbmssIGxldCBXYjM1UnhfZGVzdHJveSB0byBmcmVlIHRoZW0KIAkJI2lmZGVmIF9QRV9SWF9EVU1QXwotCQlXQkRFQlVHKCgiRVAzIFJ4IHN0b3BcbiIpKTsKKwkJcHJpbnRrKCJFUDMgUnggc3RvcFxuIik7CiAJCSNlbmRpZgogCX0KIH0KIAogLy8gTmVlZHMgcHJvY2VzcyBjb250ZXh0Ci12b2lkIFdiMzVSeF9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgV2IzNVJ4X2Rlc3Ryb3koc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJc3RydWN0IHdiMzVfcnggKnBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OwogCiAJZG8gewogCQltc2xlZXAoMTApOyAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5hCkBAIC0zNjcsNyArMzY2LDcgQEAKIAlpZiAocFdiMzVSeC0+UnhVcmIpCiAJCXVzYl9mcmVlX3VyYiggcFdiMzVSeC0+UnhVcmIgKTsKIAkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JV0JERUJVRygoIldiMzVSeF9kZXN0cm95IE9LXG4iKSk7CisJcHJpbnRrKCJXYjM1UnhfZGVzdHJveSBPS1xuIik7CiAJI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfZi5oCmluZGV4IGQ5OTMwNDEuLjk4YWNjZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9mLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X2YuaApAQCAtNyw5ICs3LDkgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBJbnRlcmZhY2UgZnVuY3Rpb24gZGVjbGFyZQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXVuc2lnbmVkIGNoYXIJCVdiMzVSeF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkCQlXYjM1UnhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZAkJV2IzNVJ4X3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIJCVdiMzVSeF9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfZGVzdHJveSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X3N0b3AoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIHZvaWQJCVdiMzVSeF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9zLmgKaW5kZXggZjE4MzUwYi4uNGIwMzI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfcy5oCkBAIC0xNSw4ICsxNSw3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXR5cGVkZWYgc3RydWN0IF9XQjM1UlgKLXsKK3N0cnVjdCB3YjM1X3J4IHsKIAl1MzIJCQlCeXRlUmVjZWl2ZWQ7Ly8gRm9yIGNhbGN1bGF0aW5nIHRocm91Z2hwdXQgb2YgQnVsa0luCiAJYXRvbWljX3QJCVJ4RmlyZUNvdW50ZXI7Ly8gRG9lcyBXYjM1UnggbW9kdWxlIGZpcmU/CiAKQEAgLTQyLDcgKzQxLDQgQEAKIAogCWludAkJRVAzVk1fc3RhdHVzOwogCXU4ICoJcERSeDsKLQotfSBXQjM1UlgsICpQV0IzNVJYOwotCi0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eC5jCmluZGV4IGI5YjQ0NTYuLjFlNDE2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eC5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAic3lzZGVmLmgiCiAKIHVuc2lnbmVkIGNoYXIKLVdiMzVUeF9nZXRfdHhfYnVmZmVyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggKipwQnVmZmVyKQorV2IzNVR4X2dldF90eF9idWZmZXIoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCAqKnBCdWZmZXIpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkqcEJ1ZmZlciA9IHBXYjM1VHgtPlR4QnVmZmVyWzBdOwogCXJldHVybiB0cnVlOwpAQCAtMjgsOCArMjgsOCBAQAogc3RhdGljIHZvaWQgV2IzNVR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKiBwVXJiKQogewogCXN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciA9IHBVcmItPmNvbnRleHQ7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7Ci0JUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKglwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCVBNRFMJCXBNZHMgPSAmYWRhcHRlci0+TWRzOwogCiAJcHJpbnRrKCJ3YjM1OiB0eCBjb21wbGV0ZVxuIik7CkBAIC02NCw4ICs2NCw4IEBACiAKIHN0YXRpYyB2b2lkIFdiMzVUeChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7Ci0JUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKglwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCXU4CQkqcFR4QnVmZmVyQWRkcmVzczsKIAlQTURTCQlwTWRzID0gJmFkYXB0ZXItPk1kczsKIAlzdHJ1Y3QgdXJiICoJcFVyYiA9IChzdHJ1Y3QgdXJiICopcFdiMzVUeC0+VHg0VXJiOwpAQCAtMTE1LDggKzExNSw4IEBACiAKIHZvaWQgV2IzNVR4X3N0YXJ0KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcikKIHsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKLQlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOworCXN0cnVjdCB3YjM1X3R4ICpwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKIAogCS8vIEFsbG93IG9ubHkgb25lIHRocmVhZCB0byBydW4gaW50byBmdW5jdGlvbgogCWlmIChhdG9taWNfaW5jX3JldHVybigmcFdiMzVUeC0+VHhGaXJlQ291bnRlcikgPT0gMSkgewpAQCAtMTI2LDkgKzEyNiw5IEBACiAJCWF0b21pY19kZWMoJnBXYjM1VHgtPlR4RmlyZUNvdW50ZXIpOwogfQogCi11bnNpZ25lZCBjaGFyIFdiMzVUeF9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3Vuc2lnbmVkIGNoYXIgV2IzNVR4X2luaXRpYWwoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCiAJcFdiMzVUeC0+VHg0VXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXBXYjM1VHgtPlR4NFVyYikKQEAgLTE0NSwyOSArMTQ1LDI5IEBACiB9CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIFdiMzVUeF9zdG9wKHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgV2IzNVR4X3N0b3Aoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCiAJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgVHJwIG9mIEVQMgogCWlmIChwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQogCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHgyVXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQogCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQlXQkRFQlVHKCgiRVAyIFR4IHN0b3BcbiIpKTsKKwlwcmludGsoIkVQMiBUeCBzdG9wXG4iKTsKIAkjZW5kaWYKIAogCS8vIFRyeWluZyB0byBjYW5jZWxpbmcgdGhlIElycCBvZiBFUDQKIAlpZiAocFdiMzVUeC0+RVA0dm1fc3RhdGUgPT0gVk1fUlVOTklORykKIAkJdXNiX3VubGlua191cmIoIHBXYjM1VHgtPlR4NFVyYiApOyAvLyBPbmx5IHVzZSB1bmxpbmssIGxldCBXYjM1VHhfZGVzdHJvdCB0byBmcmVlIHRoZW0KIAkjaWZkZWYgX1BFX1RYX0RVTVBfCi0JV0JERUJVRygoIkVQNCBUeCBzdG9wXG4iKSk7CisJcHJpbnRrKCJFUDQgVHggc3RvcFxuIik7CiAJI2VuZGlmCiB9CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIFdiMzVUeF9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgV2IzNVR4X2Rlc3Ryb3koc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCiAJLy8gV2FpdCBmb3IgVk0gc3RvcAogCWRvIHsKQEAgLTE4MiwxNCArMTgyLDE0IEBACiAJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHgyVXJiICk7CiAKIAkjaWZkZWYgX1BFX1RYX0RVTVBfCi0JV0JERUJVRygoIldiMzVUeF9kZXN0cm95IE9LXG4iKSk7CisJcHJpbnRrKCJXYjM1VHhfZGVzdHJveSBPS1xuIik7CiAJI2VuZGlmCiB9CiAKIHZvaWQgV2IzNVR4X0N1cnJlbnRUaW1lKHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgdTMyIFRpbWVDb3VudCkKIHsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKLQlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOworCXN0cnVjdCB3YjM1X3R4ICpwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKIAl1bnNpZ25lZCBjaGFyIFRyaWdnZXIgPSBmYWxzZTsKIAogCWlmIChwV2IzNVR4LT5UeFRpbWVyID4gVGltZUNvdW50KQpAQCAtMjA4LDkgKzIwOCw5IEBACiBzdGF0aWMgdm9pZCBXYjM1VHhfRVAyVk1fY29tcGxldGUoc3RydWN0IHVyYiAqIHBVcmIpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyID0gcFVyYi0+Y29udGV4dDsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKIAlUMDJfREVTQ1JJUFRPUglUMDIsIFRTVEFUVVM7Ci0JUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCXUzMiAqCQlwbHRtcCA9ICh1MzIgKilwV2IzNVR4LT5FUDJfYnVmOwogCXUzMgkJaTsKIAl1MTYJCUludGVycnVwdEluTGVuZ3RoOwpAQCAtMjI5LDcgKzIyOSw3IEBACiAKIAkvL1RoZSBVcmIgaXMgY29tcGxldGVkLCBjaGVjayB0aGUgcmVzdWx0CiAJaWYgKHBXYjM1VHgtPkVQMlZNX3N0YXR1cyAhPSAwKSB7Ci0JCVdCREVCVUcoKCJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCXByaW50aygiRVAyIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIik7CiAJCXBXYjM1VHgtPkVQMnZtX3N0YXRlPSBWTV9TVE9QOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTI1Niw4ICsyNTYsOCBAQAogCiBzdGF0aWMgdm9pZCBXYjM1VHhfRVAyVk0oc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKQogewotCXBod19kYXRhX3QJcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKglwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCXN0cnVjdCB1cmIgKglwVXJiID0gKHN0cnVjdCB1cmIgKilwV2IzNVR4LT5UeDJVcmI7CiAJdTMyICoJcGx0bXAgPSAodTMyICopcFdiMzVUeC0+RVAyX2J1ZjsKIAlpbnQJCXJldHY7CkBAIC0yNzksNyArMjc5LDcgQEAKIAogCWlmIChyZXR2IDwgMCkgewogCQkjaWZkZWYgX1BFX1RYX0RVTVBfCi0JCVdCREVCVUcoKCJFUDIgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJcHJpbnRrKCJFUDIgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpOwogCQkjZW5kaWYKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0yOTIsOCArMjkyLDggQEAKIAogdm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKQogewotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCiAJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIGZ1bmN0aW9uCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwV2IzNVR4LT5UeFJlc3VsdENvdW50KSA9PSAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X2YuaAppbmRleCA0MjIyZmE4Li5hN2FmOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9mLmgKQEAgLTcsMTQgKzcsMTQgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBJbnRlcmZhY2UgZnVuY3Rpb24gZGVjbGFyZQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXVuc2lnbmVkIGNoYXIgV2IzNVR4X2luaXRpYWwoCSBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgV2IzNVR4X2Rlc3Ryb3koICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXVuc2lnbmVkIGNoYXIgV2IzNVR4X2dldF90eF9idWZmZXIoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqKnBCdWZmZXIgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVR4X2luaXRpYWwoCSBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X2Rlc3Ryb3koICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVR4X2dldF90eF9idWZmZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqKnBCdWZmZXIgKTsKIAogdm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKIAogdm9pZCBXYjM1VHhfc3RhcnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKLXZvaWQgV2IzNVR4X3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X3N0b3AoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIAogdm9pZCBXYjM1VHhfQ3VycmVudFRpbWUoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCAgdTMyIFRpbWVDb3VudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfcy5oCmluZGV4IDM5NjAyNzYuLmY3MGY0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X3MuaApAQCAtMTgsOCArMTgsNyBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCi10eXBlZGVmIHN0cnVjdCBfV0IzNVRYCi17CitzdHJ1Y3Qgd2IzNV90eCB7CiAJLy8gRm9yIFR4IGJ1ZmZlcgogCXU4CVR4QnVmZmVyWyBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgXVsgTUFYX1VTQl9UWF9CVUZGRVIgXTsKIApAQCAtNDMsNyArNDIsNiBAQAogCiAJdTMyCVR4RmlsbENvdW50OyAvLyAyMDA2MDkyOAogCXUzMglUeFRpbWVyOyAvLyAyMDA2MDkyOCBBZGQgaWYgc2VuZGluZyBwYWNrZXQgbm90IGdyZWF0IHRoYW4gMTMKLQotfSBXQjM1VFgsICpQV0IzNVRYOworfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWwuYwppbmRleCA4YTlkMjFjLi5jOTg1YWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKQEAgLTEsMTQgKzEsMTQgQEAKLSNpbmNsdWRlICJvc19jb21tb24uaCIKKyNpbmNsdWRlICJzeXNkZWYuaCIKICNpbmNsdWRlICJ3YmhhbF9mLmgiCiAjaW5jbHVkZSAid2JsaW51eF9mLmgiCiAKLXZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIHU4ICpjdXJyZW50X2FkZHJlc3MgKQordm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggKmN1cnJlbnRfYWRkcmVzcyApCiB7CiAJdTMyIGx0bXBbMl07CiAKIAlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CiAKLQltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBjdXJyZW50X2FkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyApOworCW1lbWNweSggcEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MsIGN1cnJlbnRfYWRkcmVzcywgRVRIX0FMRU4gKTsKIAogCWx0bXBbMF09IGNwdV90b19sZTMyKCAqKHUzMiAqKXBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzICk7CiAJbHRtcFsxXT0gY3B1X3RvX2xlMzIoICoodTMyICopKHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzICsgNCkgKSAmIDB4ZmZmZjsKQEAgLTE2LDcgKzE2LDcgQEAKIAlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDNlOCwgbHRtcCwgMiwgQVVUT19JTkNSRU1FTlQgKTsKIH0KIAotdm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIHU4ICpwZXRoZXJuZXRfYWRkcmVzcyApCit2b2lkIGhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggKnBldGhlcm5ldF9hZGRyZXNzICkKIHsKIAlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CiAKQEAgLTI2LDcgKzI2LDcgQEAKIHN0YXRpYyB2b2lkIGhhbF9sZWRfY29udHJvbCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyID0gKHN0cnVjdCB3YnNvZnRfcHJpdiAqKSBkYXRhOwotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJTEVEU2V0ID0gKHBId0RhdGEtPlNvZnR3YXJlU2V0ICYgSEFMX0xFRF9TRVRfTUFTSykgPj4gSEFMX0xFRF9TRVRfU0hJRlQ7CiAJdTgJTEVEZ3JheVsyMF0gPSB7IDAsMyw0LDYsOCwxMCwxMSwxMiwxMywxNCwxNSwxNCwxMywxMiwxMSwxMCw4LDYsNCwyIH07CkBAIC0zMTEsNyArMzExLDcgQEAKIHU4IGhhbF9pbml0X2hhcmR3YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOwogCXUxNiBTb2Z0d2FyZVNldDsKIAogCS8vIEluaXRpYWwgdGhlIHZhcmlhYmxlCkBAIC0zNTYsNyArMzU2LDcgQEAKIH0KIAogCi12b2lkIGhhbF9oYWx0KHBod19kYXRhX3QgcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEpCit2b2lkIGhhbF9oYWx0KHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEpCiB7CiAJc3dpdGNoKCBwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgKQogCXsKQEAgLTM3MCw3ICszNzAsNyBAQAogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYmVhY29uX3BlcmlvZCApCit2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICkKIHsKIAl1MzIJdG1wOwogCkBAIC0zODMsNyArMzgzLDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQorc3RhdGljIHZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTM5Niw3ICszOTYsNyBAQAogCXBId0RhdGEtPkNoYW5uZWwgPSBjaGFubmVsLkNoYW5ObzsKIAlwSHdEYXRhLT5iYW5kID0gY2hhbm5lbC5iYW5kOwogCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQlXQkRFQlVHKCgiU2V0IGNoYW5uZWwgaXMgJWQsIGJhbmQgPSVkXG4iLCBwSHdEYXRhLT5DaGFubmVsLCBwSHdEYXRhLT5iYW5kKSk7CisJcHJpbnRrKCJTZXQgY2hhbm5lbCBpcyAlZCwgYmFuZCA9JWRcbiIsIHBId0RhdGEtPkNoYW5uZWwsIHBId0RhdGEtPmJhbmQpOwogCSNlbmRpZgogCXJlZy0+TTI4X01hY0NvbnRyb2wgJj0gfjB4ZmY7IC8vIENsZWFuIGNoYW5uZWwgaW5mb3JtYXRpb24gZmllbGQKIAlyZWctPk0yOF9NYWNDb250cm9sIHw9IGNoYW5uZWwuQ2hhbk5vOwpAQCAtNDA0LDEyICs0MDQsMTIgQEAKIAkJCQkJKHM4ICopJmNoYW5uZWwsIHNpemVvZihDaGFuSW5mbykpOwogfQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICkKK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICkKIHsKIAloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggcEh3RGF0YSwgY2hhbm5lbCApOwogfQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3ZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTQyNCw3ICs0MjQsNyBAQAogfQogCiAvL2ZvciB3ZXAga2V5IGVycm9yIGRldGVjdGlvbiwgd2UgbmVlZCB0byBhY2NlcHQgYnJvYWRjYXN0IHBhY2tldHMgdG8gYmUgcmVjZWl2ZWQgdGVtcG9yYXJ5Lgotdm9pZCBoYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cyggcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlKQordm9pZCBoYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cyggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNDM4LDcgKzQzOCw3IEBACiAJfQogfQogCi12b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit2b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IGVuYWJsZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00NDksNyArNDQ5LDcgQEAKIAlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MDAsIHJlZy0+TTAwX01hY0NvbnRyb2wgKTsKIH0KIAotdm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNDY3LDcgKzQ2Nyw3IEBACiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIGhhbF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgaGFsX3N0b3AoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNDgxLDEwICs0ODEsMTAgQEAKIAlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA0MDAsIHJlZy0+RDAwX0RtYUNvbnRyb2wgKTsKIH0KIAotdW5zaWduZWQgY2hhciBoYWxfaWRsZShwaHdfZGF0YV90IHBId0RhdGEpCit1bnNpZ25lZCBjaGFyIGhhbF9pZGxlKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7Ci0JUFdCVVNCCXBXYlVzYiA9ICZwSHdEYXRhLT5XYlVzYjsKKwlzdHJ1Y3Qgd2JfdXNiICpwV2JVc2IgPSAmcEh3RGF0YS0+V2JVc2I7CiAKIAlpZiggIXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICYmICggcFdiVXNiLT5EZXRlY3RDb3VudCB8fCByZWctPkVQMHZtX3N0YXRlIT1WTV9TVE9QICkgKQogCQlyZXR1cm4gZmFsc2U7CkBAIC00OTIsMTIgKzQ5MiwxMiBAQAogCXJldHVybiB0cnVlOwogfQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZvaWQgaGFsX3NldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBoeVR5cGUgKQordm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggUGh5VHlwZSApCiB7CiAJcEh3RGF0YS0+cGh5X3R5cGUgPSBQaHlUeXBlOwogfQogCi12b2lkIGhhbF9zZXRfcmFkaW9fbW9kZSggcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciByYWRpb19vZmYpCit2b2lkIGhhbF9zZXRfcmFkaW9fbW9kZSggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciByYWRpb19vZmYpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC01MTYsNyArNTE2LDcgQEAKIAlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MjQsIHJlZy0+TTI0X01hY0NvbnRyb2wgKTsKIH0KIAotdTggaGFsX2dldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSApCit1OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vMCA6IHJhZGlvIG9uOyAxOiByYWRpbyBvZmYKLXU4IGhhbF9nZXRfaHdfcmFkaW9fb2ZmKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3U4IGhhbF9nZXRfaHdfcmFkaW9fb2ZmKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTU0NSwxNCArNTQ1LDE0IEBACiAJfQogfQogCi11bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgKiBwVmFsdWUgKQordW5zaWduZWQgY2hhciBoYWxfZ2V0X2R4eF9yZWcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyICogcFZhbHVlICkKIHsKIAlpZiggbnVtYmVyIDwgMHgxMDAwICkKIAkJbnVtYmVyICs9IDB4MTAwMDsKIAlyZXR1cm4gV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgbnVtYmVyLCBwVmFsdWUgKTsKIH0KIAotdW5zaWduZWQgY2hhciBoYWxfc2V0X2R4eF9yZWcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyIHZhbHVlICkKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApCiB7CiAJdW5zaWduZWQgY2hhcglyZXQ7CiAKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgaGFsX3NldF9yZl9wb3dlcihwaHdfZGF0YV90IHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCit2b2lkIGhhbF9zZXRfcmZfcG93ZXIoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBQb3dlckluZGV4KQogewogCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgUG93ZXJJbmRleCApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oCmluZGV4IGU4MDVmNDAuLmVmY2FlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX2YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKQEAgLTEwLDU2ICsxMCw1NiBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdm9pZCBoYWxfcmVtb3ZlX21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBtYWNfYWRkciApOwotdm9pZCBoYWxfcmVtb3ZlX2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4ICk7Ci11bnNpZ25lZCBjaGFyIGhhbF9zZXRfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IGFkYXB0ZXIsICB1OCAqcG1hY19hZGRyLCAgdTggbnVsbF9rZXksICB1OCB3ZXBfb24sICB1OCAqcHR4X3RzYywgIHU4ICpwcnhfdHNjLCAgdTgga2V5X3R5cGUsICB1OCBrZXlfbGVuLCAgdTggKnBrZXlfZGF0YSApOwotdW5zaWduZWQgY2hhciBoYWxfc2V0X2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBhZGFwdGVyLCAgdTggaW5kZXgsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIHU4ICpwdHhfdHNjLCAgdTggKnByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICB1OCAqcGtleV9kYXRhICk7Ci12b2lkIGhhbF9jbGVhcl9hbGxfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX2NsZWFyX2FsbF9ncm91cF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX2NsZWFyX2FsbF9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfY2xlYXJfYWxsX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfZ2V0X2V0aGVybmV0X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqY3VycmVudF9hZGRyZXNzICk7Ci12b2lkIGhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpjdXJyZW50X2FkZHJlc3MgKTsKLXZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpwZXRoZXJuZXRfYWRkcmVzcyApOwordm9pZCBoYWxfcmVtb3ZlX21hcHBpbmdfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggKnBtYWNfYWRkciApOwordm9pZCBoYWxfcmVtb3ZlX2RlZmF1bHRfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTMyIGluZGV4ICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfbWFwcGluZ19rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIGFkYXB0ZXIsICB1OCAqcG1hY19hZGRyLCAgdTggbnVsbF9rZXksICB1OCB3ZXBfb24sICB1OCAqcHR4X3RzYywgIHU4ICpwcnhfdHNjLCAgdTgga2V5X3R5cGUsICB1OCBrZXlfbGVuLCAgdTggKnBrZXlfZGF0YSApOwordW5zaWduZWQgY2hhciBoYWxfc2V0X2RlZmF1bHRfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBhZGFwdGVyLCAgdTggaW5kZXgsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIHU4ICpwdHhfdHNjLCAgdTggKnByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICB1OCAqcGtleV9kYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfZGVmYXVsdF9rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9ncm91cF9rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9tYXBwaW5nX2tleSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2tleSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfZ2V0X2V0aGVybmV0X2FkZHJlc3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqY3VycmVudF9hZGRyZXNzICk7Cit2b2lkIGhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpjdXJyZW50X2FkZHJlc3MgKTsKK3ZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwZXRoZXJuZXRfYWRkcmVzcyApOwogdTggaGFsX2luaXRfaGFyZHdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotdm9pZCBoYWxfc2V0X3Bvd2VyX3NhdmVfbW9kZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgcG93ZXJfc2F2ZSwgIHVuc2lnbmVkIGNoYXIgd2FrZXVwLCAgdW5zaWduZWQgY2hhciBkdGltICk7Ci12b2lkIGhhbF9nZXRfcG93ZXJfc2F2ZV9tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgIHU4ICpwaW5fcHdyX3NhdmUgKTsKLXZvaWQgaGFsX3NldF9zbG90X3RpbWUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCB0eXBlICk7Cit2b2lkIGhhbF9zZXRfcG93ZXJfc2F2ZV9tb2RlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBwb3dlcl9zYXZlLCAgdW5zaWduZWQgY2hhciB3YWtldXAsICB1bnNpZ25lZCBjaGFyIGR0aW0gKTsKK3ZvaWQgaGFsX2dldF9wb3dlcl9zYXZlX21vZGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICAgdTggKnBpbl9wd3Jfc2F2ZSApOwordm9pZCBoYWxfc2V0X3Nsb3RfdGltZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IHR5cGUgKTsKICNkZWZpbmUgaGFsX3NldF9hdGltX3dpbmRvdyggX0EsIF9BVE0gKQotdm9pZCBoYWxfc3RhcnRfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggbWFjX29wX21vZGUgKTsKLXZvaWQgaGFsX2pvaW5fcmVxdWVzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGJzc190eXBlICk7IC8vIDA6QlNTIFNUQSAxOklCU1MgU1RBLy8KLXZvaWQgaGFsX3N0b3Bfc3luY19ic3MoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX3Jlc3VtZV9zeW5jX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSk7Ci12b2lkIGhhbF9zZXRfYWlkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGFpZCApOwotdm9pZCBoYWxfc2V0X2Jzc2lkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBic3NpZCApOwotdm9pZCBoYWxfZ2V0X2Jzc2lkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBic3NpZCApOwotdm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYmVhY29uX3BlcmlvZCApOwotdm9pZCBoYWxfc2V0X2xpc3Rlbl9pbnRlcnZhbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBsaXN0ZW5faW50ZXJ2YWwgKTsKLXZvaWQgaGFsX3NldF9jYXBfaW5mbyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBjYXBhYmlsaXR5X2luZm8gKTsKLXZvaWQgaGFsX3NldF9zc2lkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBzc2lkLCAgdTggc3NpZF9sZW4gKTsKLXZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICk7Ci12b2lkIGhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwotdm9pZCBoYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKLXZvaWQgaGFsX3NldF9hY2NlcHRfYmVhY29uKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Ci12b2lkIGhhbF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIGhhbF9oYWx0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSApOwotdm9pZCBoYWxfc3RhcnRfdHgwKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIGhhbF9zZXRfcGh5X3R5cGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQaHlUeXBlICk7Cit2b2lkIGhhbF9zdGFydF9ic3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBtYWNfb3BfbW9kZSApOwordm9pZCBoYWxfam9pbl9yZXF1ZXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggYnNzX3R5cGUgKTsgLy8gMDpCU1MgU1RBIDE6SUJTUyBTVEEvLwordm9pZCBoYWxfc3RvcF9zeW5jX2JzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfcmVzdW1lX3N5bmNfYnNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKTsKK3ZvaWQgaGFsX3NldF9haWQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgYWlkICk7Cit2b2lkIGhhbF9zZXRfYnNzaWQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqcGJzc2lkICk7Cit2b2lkIGhhbF9nZXRfYnNzaWQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqcGJzc2lkICk7Cit2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICk7Cit2b2lkIGhhbF9zZXRfbGlzdGVuX2ludGVydmFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGxpc3Rlbl9pbnRlcnZhbCApOwordm9pZCBoYWxfc2V0X2NhcF9pbmZvKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGNhcGFiaWxpdHlfaW5mbyApOwordm9pZCBoYWxfc2V0X3NzaWQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqcHNzaWQsICB1OCBzc2lkX2xlbiApOwordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3N0b3AoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgaGFsX2hhbHQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHZvaWQgKnBwYV9kYXRhICk7Cit2b2lkIGhhbF9zdGFydF90eDAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9waHlfdHlwZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IFBoeVR5cGUgKTsKICNkZWZpbmUgaGFsX2dldF9jd21pbiggX0EgKSAoIChfQSktPmN3bWluICkKLXZvaWQgaGFsX3NldF9jd21heCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBjd2luX21heCApOwordm9pZCBoYWxfc2V0X2N3bWF4KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGN3aW5fbWF4ICk7CiAjZGVmaW5lIGhhbF9nZXRfY3dtYXgoIF9BICkgKCAoX0EpLT5jd21heCApCi12b2lkIGhhbF9zZXRfcnNuX3dwYSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiAqIFJTTl9JRV9CaXRtYXAgLCB1MzIgKiBSU05fT1VJX3R5cGUgLCB1bnNpZ25lZCBjaGFyIGJEZXNpcmVkQXV0aE1vZGUpOwotdm9pZCBoYWxfc2V0X2Nvbm5lY3RfaW5mbyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgYm9Db25uZWN0ICk7Ci11OCBoYWxfZ2V0X2VzdF9zcTMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBDb3VudCApOwotdm9pZCBoYWxfc2V0X3JmX3Bvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApOyAvLyAyMDA2MDYyMSBNb2RpZnkKLXZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib1ZhbHVlKTsKLXZvaWQgaGFsX2Rlc2NyaXB0b3JfaW5kaWNhdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICBQREVTQ1JJUFRPUiBwRGVzICk7Ci11OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci11MzIgaGFsX2dldF9ic3NfcGtfY250KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9zZXRfcnNuX3dwYSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUzMiAqIFJTTl9JRV9CaXRtYXAgLCB1MzIgKiBSU05fT1VJX3R5cGUgLCB1bnNpZ25lZCBjaGFyIGJEZXNpcmVkQXV0aE1vZGUpOwordm9pZCBoYWxfc2V0X2Nvbm5lY3RfaW5mbyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgYm9Db25uZWN0ICk7Cit1OCBoYWxfZ2V0X2VzdF9zcTMoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBDb3VudCApOwordm9pZCBoYWxfc2V0X3JmX3Bvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApOyAvLyAyMDA2MDYyMSBNb2RpZnkKK3ZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib1ZhbHVlKTsKK3ZvaWQgaGFsX2Rlc2NyaXB0b3JfaW5kaWNhdGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit1OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit1MzIgaGFsX2dldF9ic3NfcGtfY250KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAjZGVmaW5lIGhhbF9nZXRfcmVnaW9uX2Zyb21fRUVQUk9NKCBfQSApICggKF9BKS0+cmVnLkVFUFJPTVJlZ2lvbiApCi12b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzCQkoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpOwordm9pZCBoYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cwkJKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlKTsKICNkZWZpbmUgaGFsX2dldF90eF9idWZmZXIoIF9BLCBfQiApIFdiMzVUeF9nZXRfdHhfYnVmZmVyKCBfQSwgX0IgKQotdTggaGFsX2dldF9od19yYWRpb19vZmYJCQkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3U4IGhhbF9nZXRfaHdfcmFkaW9fb2ZmCQkJKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAjZGVmaW5lIGhhbF9zb2Z0d2FyZV9zZXQoIF9BICkJCShfQS0+U29mdHdhcmVTZXQpCiAjZGVmaW5lIGhhbF9kcml2ZXJfaW5pdF9PSyggX0EgKQkoX0EtPklzSW5pdE9LKQogI2RlZmluZSBoYWxfcnNzaV9ib3VuZGFyeV9oaWdoKCBfQSApIChfQS0+UlNTSV9oaWdoKQpAQCAtNjgsOCArNjgsOCBAQAogCiAjZGVmaW5lIFBIWV9ERUJVRyggbXNnLCBhcmdzLi4uICkKIAotdW5zaWduZWQgY2hhciBoYWxfZ2V0X2R4eF9yZWcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyICogcFZhbHVlICk7Ci11bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX2dldF9keHhfcmVnKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiAqIHBWYWx1ZSApOwordW5zaWduZWQgY2hhciBoYWxfc2V0X2R4eF9yZWcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyIHZhbHVlICk7CiAjZGVmaW5lIGhhbF9nZXRfdGltZV9jb3VudCggX1AgKQkoX1AtPnRpbWVfY291bnQvMTApCS8vIHJldHVybiAxMDBtcyBjb3VudAogI2RlZmluZSBoYWxfZGV0ZWN0X2Vycm9yKCBfUCApCQkoX1AtPldiVXNiLkRldGVjdENvdW50KQogCkBAIC04Miw3ICs4Miw3IEBACiAjZGVmaW5lIGhhbF9nZXRfY2xlYXJfaW50ZXJydXB0KF9BKQogI2RlZmluZSBoYWxfaWJzc19kaXNjb25uZWN0KF9BKSBoYWxfc3RvcF9zeW5jX2JzcyhfQSkKICNkZWZpbmUgaGFsX2pvaW5fcmVxdWVzdF9zdG9wKF9BKQotdW5zaWduZWQgY2hhcgloYWxfaWRsZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordW5zaWduZWQgY2hhcgloYWxfaWRsZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogI2RlZmluZSBod19nZXRfY3h4X3JlZyggX0EsIF9CLCBfQyApCiAjZGVmaW5lIGh3X3NldF9jeHhfcmVnKCBfQSwgX0IsIF9DICkKICNkZWZpbmUgaHdfZ2V0X2R4eF9yZWcoIF9BLCBfQiwgX0MgKQloYWxfZ2V0X2R4eF9yZWcoIF9BLCBfQiwgKHUzMiAqKV9DICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaAppbmRleCAyNzZkMmIxLi5hY2ZlYmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oCkBAIC0yLDggKzIsNyBAQAogI2RlZmluZSBfX1dJTkJPTkRfV0JIQUxfU19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4gLyogZm9yIEVUSF9BTEVOICovCiAKIC8vWzIwMDQwNzIyIFdLXQogI2RlZmluZSBIQUxfTEVEX1NFVF9NQVNLCQkweDAwMWMJLy8yMDA2MDkwMSBFeHRlbmQKQEAgLTg2LDE5ICs4NSw2IEBACiAJVk1fQ09NUExFVEVECiB9OwogCi0vLyBCZSB1c2VkIGZvciA4MDIuMTEgbWFjIGhlYWRlcgotdHlwZWRlZiBzdHJ1Y3QgX01BQ19GUkFNRV9DT05UUk9MIHsKLQl1OAltYWNfZnJhbWVfaW5mbzsgLy8gdGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm90b3ZsIHZlcnNpb24sIHR5cGUgYW5kIHN1YnR5cGUKLQl1OAl0b19kczoxOwotCXU4CWZyb21fZHM6MTsKLQl1OAltb3JlX2ZyYWc6MTsKLQl1OAlyZXRyeToxOwotCXU4CXB3cl9tZ3Q6MTsKLQl1OAltb3JlX2RhdGE6MTsKLQl1OAlXRVA6MTsKLQl1OAlvcmRlcjoxOwotfSBNQUNfRlJBTUVfQ09OVFJPTCwgKlBNQUNfRlJBTUVfQ09OVFJPTDsKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTm9ybWFsIEtleSB0YWJsZSBmb3JtYXQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNiwyOCArOTIsNiBAQAogI2RlZmluZSBNQVhfS0VZX1RBQkxFCQkJCTI0CS8vIDI0IGVudHJ5IGZvciBzdG9yaW5nIGtleSBkYXRhCiAjZGVmaW5lIEdST1VQX0tFWV9TVEFSVF9JTkRFWAkJNAogI2RlZmluZSBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWAkJOAotdHlwZWRlZiBzdHJ1Y3QgX0tFWV9UQUJMRQotewotCXUzMglEVzBfVmFsaWQ6MTsKLQl1MzIJRFcwX051bGxLZXk6MTsKLQl1MzIJRFcwX1NlY3VyaXR5X01vZGU6MjsvLzA6V0VQIDQwIGJpdCAxOldFUCAxMDQgYml0IDI6VEtJUCAxMjggYml0IDM6Q0NNUCAxMjggYml0Ci0JdTMyCURXMF9XRVBPTjoxOwotCXUzMglEVzBfUkVTRVJWRUQ6MTE7Ci0JdTMyCURXMF9BZGRyZXNzMToxNjsKLQotCXUzMglEVzFfQWRkcmVzczI7Ci0KLQl1MzIJRFcyX1J4U2VxdWVuY2VDb3VudDE7Ci0KLQl1MzIJRFczX1J4U2VxdWVuY2VDb3VudDI6MTY7Ci0JdTMyCURXM19SRVNFUlZFRDoxNjsKLQotCXUzMglEVzRfVHhTZXF1ZW5jZUNvdW50MTsKLQotCXUzMglEVzVfVHhTZXF1ZW5jZUNvdW50MjoxNjsKLQl1MzIJRFc1X1JFU0VSVkVEOjE2OwotCi19IEtFWV9UQUJMRSwgKlBLRVlfVEFCTEU7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIAkJCSBEZXNjcmlwdG9yCkBAIC00MTMsOCArMzc3LDggQEAKICNkZWZpbmUgTUFYX1JGX1BBUkFNRVRFUgkzMgogCiB0eXBlZGVmIHN0cnVjdCBfVFhWR0FfRk9SXzUwIHsKLQl1OAlDaGFuTm87Ci0JdTgJVHhWZ2FWYWx1ZTsKKwl1OCAgICAgIENoYW5ObzsKKwl1OCAgICAgIFR4VmdhVmFsdWU7CiB9IFRYVkdBX0ZPUl81MDsKIAogCkBAIC00MjcsMTAgKzM5MSw4IEBACiAjaW5jbHVkZSAid2IzNXR4X3MuaCIKICNpbmNsdWRlICJ3YjM1cnhfcy5oIgogCi0KIC8vIEZvciBIYWwgdXNpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci10eXBlZGVmIHN0cnVjdCBfSFdfREFUQV9UCi17CitzdHJ1Y3QgaHdfZGF0YSB7CiAJLy8gRm9yIGNvbXBhdGlibGUgd2l0aCAzMwogCXUzMglyZXZpc2lvbjsKIAl1MzIJQkIzY19jYWw7IC8vIFRoZSB2YWx1ZSBmb3IgVHggY2FsaWJyYXRpb24gY29tZXMgZnJvbSBFRVBST00KQEAgLTQ1Miw4ICs0MTQsOCBAQAogCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkvLyBEZWZpbml0aW9uIGZvciBNQUMgYWRkcmVzcwogCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQl1OAkJUGVybWFuZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIHN0b3JlZCBpbiBFRVBST00uICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAotCXU4CQlDdXJyZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIGluIHVzZWQuICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCXU4CQlQZXJtYW5lbnRNYWNBZGRyZXNzW0VUSF9BTEVOICsgMl07IC8vIFRoZSBFbnRoZXJuZXQgYWRkciB0aGF0IGFyZSBzdG9yZWQgaW4gRUVQUk9NLiAgKyAyIHRvIDgtYnl0ZSBhbGlnbm1lbnQKKwl1OAkJQ3VycmVudE1hY0FkZHJlc3NbRVRIX0FMRU4gKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIGluIHVzZWQuICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAogCiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkvLyBEZWZpbml0aW9uIGZvciA4MDIuMTEKQEAgLTUwMiwxMCArNDY0LDEwIEBACiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkvLyBWYXJpYWJsZSBmb3IgZWFjaCBtb2R1bGUKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCVdCVVNCCQlXYlVzYjsgLy8gTmVlZCBXYlVzYi5oCisJc3RydWN0IHdiX3VzYglXYlVzYjsgLy8gTmVlZCBXYlVzYi5oCiAJc3RydWN0IHdiMzVfcmVnCXJlZzsgLy8gTmVlZCBXYjM1UmVnLmgKLQlXQjM1VFgJCVdiMzVUeDsgLy8gTmVlZCBXYjM1VHguaAotCVdCMzVSWAkJV2IzNVJ4OyAvLyBOZWVkIFdiMzVSeC5oCisJc3RydWN0IHdiMzVfdHgJV2IzNVR4OyAvLyBOZWVkIFdiMzVUeC5oCisJc3RydWN0IHdiMzVfcngJV2IzNVJ4OyAvLyBOZWVkIFdiMzVSeC5oCiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAlMRURUaW1lcjsvLyBGb3IgTEVECiAKQEAgLTU3OCwzNSArNTQwLDYgQEAKIAkvLyAyMDA2MDgyOC4xIGZvciBhdm9pZCBBUCBkaXNjb25uZWN0CiAJdTMyCQlOdWxsUGFja2V0Q291bnQ7CiAKLX0gaHdfZGF0YV90LCAqcGh3X2RhdGFfdDsKLQotLy8gVGhlIG1hcHBpbmcgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3IgZmllbGQKLXR5cGVkZWYgc3RydWN0IF9IQUxfUkFURQotewotCS8vIERTU1MKLQl1MzIJUkVTRVJWRURfMDsKLQl1MzIgICBOdW1SYXRlMk1TOwotCXUzMiAgIE51bVJhdGU1NU1TOwotCXUzMiAgIE51bVJhdGUxMU1TOwotCi0JdTMyCVJFU0VSVkVEXzFbNF07Ci0KLQl1MzIgICBOdW1SYXRlMU07Ci0JdTMyICAgTnVtUmF0ZTJNTDsKLQl1MzIgICBOdW1SYXRlNTVNTDsKLQl1MzIgICBOdW1SYXRlMTFNTDsKLQotCXUzMglSRVNFUlZFRF8yWzRdOwotCi0JLy8gT0ZETQotCXUzMiAgIE51bVJhdGU2TTsKLQl1MzIgICBOdW1SYXRlOU07Ci0JdTMyICAgTnVtUmF0ZTEyTTsKLQl1MzIgICBOdW1SYXRlMThNOwotCXUzMiAgIE51bVJhdGUyNE07Ci0JdTMyICAgTnVtUmF0ZTM2TTsKLQl1MzIgICBOdW1SYXRlNDhNOwotCXUzMiAgIE51bVJhdGU1NE07Ci19IEhBTF9SQVRFLCAqUEhBTF9SQVRFOworfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwppbmRleCBmNzE2YjJlLi45YzNmOTQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJtZHNfZi5oIgogI2luY2x1ZGUgIm1sbWV0eHJ4X2YuaCIKLSNpbmNsdWRlICJtdG9fZi5oIgorI2luY2x1ZGUgIm10by5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKICNpbmNsdWRlICJ3YmxpbnV4X2YuaCIKIApAQCAtMTQ5LDE5ICsxNDksMTkgQEAKIAloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCgmcHJpdi0+c0h3RGF0YSwgY2gpOwogCWhhbF9zZXRfYmVhY29uX3BlcmlvZCgmcHJpdi0+c0h3RGF0YSwgY29uZi0+YmVhY29uX2ludCk7CiAvLwloYWxfc2V0X2NhcF9pbmZvKCZwcml2LT5zSHdEYXRhLCA/PyApOwotLy8gaGFsX3NldF9zc2lkKHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICogcHNzaWQsICB1OCBzc2lkX2xlbik7ID8/CisvLyBoYWxfc2V0X3NzaWQoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggKiBwc3NpZCwgIHU4IHNzaWRfbGVuKTsgPz8KIAloYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoJnByaXYtPnNId0RhdGEsIDEpOwogCWhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCZwcml2LT5zSHdEYXRhLCAgMSk7CiAJaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCZwcml2LT5zSHdEYXRhLCAgMSk7CiAJaGFsX3NldF9hY2NlcHRfYmVhY29uKCZwcml2LT5zSHdEYXRhLCAgMSk7CiAJaGFsX3NldF9yYWRpb19tb2RlKCZwcml2LT5zSHdEYXRhLCAgMCk7Ci0JLy9oYWxfc2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBudW1iZXIgKQotCS8vaGFsX3NldF9yZl9wb3dlcihwaHdfZGF0YV90IHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCisJLy9oYWxfc2V0X2FudGVubmFfbnVtYmVyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBudW1iZXIgKQorCS8vaGFsX3NldF9yZl9wb3dlcihzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCiAKIAogLy8JaGFsX3N0YXJ0X2JzcygmcHJpdi0+c0h3RGF0YSwgV0xBTl9CU1NUWVBFX0lORlJBU1RSVUNUVVJFKTsJPz8KIAotLy92b2lkIGhhbF9zZXRfcmF0ZXMocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCAqIHBic3NfcmF0ZXMsCisvL3ZvaWQgaGFsX3NldF9yYXRlcyhzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4ICogcGJzc19yYXRlcywKIC8vCQkgICB1OCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgYmFzaWNfcmF0ZV9zZXQpCiAKIAlyZXR1cm4gMDsKQEAgLTE5OSw3ICsxOTksNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2IzNV9od19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXBod19kYXRhX3QJcEh3RGF0YTsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGE7CiAJdTgJCSpwTWFjQWRkcjsKIAl1OAkJKnBNYWNBZGRyMjsKIAl1MzIJCUluaXRTdGVwID0gMDsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCS8vZ2V0IGN1cnJlbnQgYW50ZW5uYQogCXByaXYtPnNMb2NhbFBhcmEuYkFudGVubmFObyA9IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIocEh3RGF0YSk7CiAjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JV0JERUJVRygoIkRyaXZlciBpbml0LCBhbnRlbm5hIG5vID0gJWRcbiIsIHBzTE9DQUwtPmJBbnRlbm5hTm8pKTsKKwlwcmludGsoIkRyaXZlciBpbml0LCBhbnRlbm5hIG5vID0gJWRcbiIsIHBzTE9DQUwtPmJBbnRlbm5hTm8pOwogI2VuZGlmCiAJaGFsX2dldF9od19yYWRpb19vZmYoIHBId0RhdGEgKTsKIApAQCAtMzEyLDcgKzMxMiw3IEBACiAKIHN0YXRpYyBpbnQgd2IzNV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKQogewotCVBXQlVTQgkJcFdiVXNiOworCXN0cnVjdCB3Yl91c2IgKnBXYlVzYjsKICAgICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJdTMyCWx0bXA7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAogCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJnVkZXYtPmRldik7CiAJewotCQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKKwkJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CiAJCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CiAJCWhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MocEh3RGF0YSwgZGV2X2FkZHIpOwogCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIGRldl9hZGRyKTsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCS8vIFR1cm4gb2ZmIFJ4IGFuZCBUeCBoYXJkd2FyZSBhYmlsaXR5CiAJaGFsX3N0b3AoICZhZGFwdGVyLT5zSHdEYXRhICk7CiAjaWZkZWYgX1BFX1VTQl9JTklfRFVNUF8KLQlXQkRFQlVHKCgiW3czNXVuZF0gSGFsX3N0b3AgTy5LLlxuIikpOworCXByaW50aygiW3czNXVuZF0gSGFsX3N0b3AgTy5LLlxuIik7CiAjZW5kaWYKIAltc2xlZXAoMTAwKTsvLyBXYWl0aW5nIElycCBjb21wbGV0ZWQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2Jfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2Jfcy5oCmluZGV4IDFkZTkzNjAuLjBjN2U2YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiX3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYl9zLmgKQEAgLTE2LDIyICsxNiwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBSV19DT05URVhUIC0tCi0vLwotLy8gIFVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCBpbyBpcnBzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBzdHJ1Y3QgX1JXX0NPTlRFWFQKLXsKLQl2b2lkKgkJCXBId0RhdGE7Ci0Jc3RydWN0IHVyYgkJKnVyYjsKLQl2b2lkKgkJCXBDYWxsQmFja0Z1bmN0aW9uUGFyYW1ldGVyOwotfSBSV19DT05URVhULCAqUFJXX0NPTlRFWFQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9XQlVTQiB7CitzdHJ1Y3Qgd2JfdXNiIHsKIAl1MzIJSXNVc2IyMDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAl1MzIJRGV0ZWN0Q291bnQ7Ci19IFdCVVNCLCAqUFdCVVNCOworfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUKaW5kZXggOWMxMGRiYi4uMDI4YzI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRQpAQCAtNCw0ICs0LDYgQEAKIAktIExpbmRlbnQgY2xlYW51cHMKIAktIG1vdmUgdG8gdXNlIHRoZSBpbi1rZXJuZWwgd2lyZWxlc3Mgc3RhY2sKIAotUGxlYXNlIHNlbmQgYWxsIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIG9yIGNvbXBsYWludHMgYWJvdXQgdGhpcyBkcml2ZXIgdG8gR3JlZworS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZCBkb24ndCBib3RoZXIgdGhlIHVwc3RyZWFtIHdpcmVsZXNzCitrZXJuZWwgZGV2ZWxvcGVycyBhYm91dCBpdCwgdGhleSB3YW50IG5vdGhpbmcgdG8gZG8gd2l0aCBpdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaAppbmRleCA5Yjc0NjY1Li5mM2U4NzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCkBAIC01Niw3NSArNTYsMzcgQEAKICNpZm5kZWYgX0hGQTM4NHhfSAogI2RlZmluZSBfSEZBMzg0eF9ICiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKKyNkZWZpbmUgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGEsIGIsIGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCiAKLSNkZWZpbmUgSEZBMzg0eF9MRVZFTF9UT19kQm0odikgICAoMHgxMDAgKyAodikgKiAxMDAgLyAyNTUgLSAxMDApCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIAotLyotLS0tLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIE1pbnMgJiBNYXhzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0FMTE9DX0xFTl9NSU4JKCh1MTYpNCkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0FMTE9DX0xFTl9NQVgJKCh1MTYpMjQwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQkFQX0RBVEFMRU5fTUFYCQkoKHUxNik0MDk2KQotI2RlZmluZQkJSEZBMzg0eF9CQVBfT0ZGU0VUX01BWAkJKCh1MTYpNDA5NikKICNkZWZpbmUJCUhGQTM4NHhfUE9SVElEX01BWAkJKCh1MTYpNykKICNkZWZpbmUJCUhGQTM4NHhfTlVNUE9SVFNfTUFYCQkoKHUxNikoSEZBMzg0eF9QT1JUSURfTUFYKzEpKQotI2RlZmluZQkJSEZBMzg0eF9QRFJfTEVOX01BWAkJKCh1MTYpNTEyKQkvKiBpbiBieXRlcywgZnJvbSBFSyAqLwotI2RlZmluZQkJSEZBMzg0eF9QREFfUkVDU19NQVgJCSgodTE2KTIwMCkJLyogYSBndWVzcyAqLwotI2RlZmluZQkJSEZBMzg0eF9QREFfTEVOX01BWAkJKCh1MTYpMTAyNCkJLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERSX0xFTl9NQVgJCSgodTE2KTUxMikgLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX0xFTl9NQVgJCSgodTE2KTEwMjQpIC8qIGluIGJ5dGVzLCBmcm9tIEVLICovCiAjZGVmaW5lCQlIRkEzODR4X1NDQU5SRVNVTFRfTUFYCQkoKHUxNikzMSkKICNkZWZpbmUJCUhGQTM4NHhfSFNDQU5SRVNVTFRfTUFYCQkoKHUxNikzMSkKICNkZWZpbmUJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWAkoKHUxNikxNikKLSNkZWZpbmUJCUhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVgJKDEwKQotI2RlZmluZQkJSEZBMzg0eF9EUlZSX1RYQlVGX01BWAkJKHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpICsgXAotCQkJCQkJV0xBTl9EQVRBX01BWExFTiAtIFwKLQkJCQkJCVdMQU5fV0VQX0lWX0xFTiAtIFwKLQkJCQkJCVdMQU5fV0VQX0lDVl9MRU4gKyAyKQotI2RlZmluZQkJSEZBMzg0eF9EUlZSX01BR0lDCQkoMHg0YTJkKQotI2RlZmluZQkJSEZBMzg0eF9JTkZPREFUQV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9pbmZvZGF0YV90KSkKLSNkZWZpbmUJCUhGQTM4NHhfSU5GT0ZSTV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9JbmZGcmFtZV90KSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4ICAvKiBJJ20gbm90IHJlYWxseSBzdXJlICovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4JMjA0OAkvKiBJJ20gbm90IHJlYWxseSBzdXJlICovCiAjZGVmaW5lCQlIRkEzODR4X1JJRERBVEFfTUFYTEVOCQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4KICNkZWZpbmUJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTgkyMDQ4CiAKIC8qLS0tIFN1cHBvcnQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQkFQX1BST0MJCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9CQVBfaW50CQkJCSgodTE2KTEpCiAjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MJCQkoKHUxNikwKQogI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9CU1MJCQkoKHUxNikxKQotI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9XRFMJCQkoKHUxNikyKQogI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTCQkoKHUxNikzKQotI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9IT1NUQVAgICAgCQkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRAkJKCh1MTYpQklUMCkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERQkJKCh1MTYpQklUMSkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUCSgodTE2KUJJVDQpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVAkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBTExPV19NSVhFRCAJKCh1MTYpQklUMTEpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX2ludEVSVkFMMQkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfaW50RVJWQUwxMAkJKCh1MTYpQklUNSkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfaW50RVJWQUw1MAkJKCh1MTYpQklUNikKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfaW50RVJWQUwxMDAJCSgodTE2KShCSVQ1IHwgQklUNikpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0ZJUk1XQVJFX1dQQSAgCQkoKHUxNilCSVQ4KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19IT1NUX01JQyAgICAgIAkJKCh1MTYpQklUOSkKLSNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0ZXUk9BTQkJKCh1MTYpMSkKLSNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0hPU1RST0FNCSgodTE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VECQkoKHUxNilCSVQoMCkpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0VYQ0xVREUJCSgodTE2KUJJVCgxKSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUCSgodTE2KUJJVCg0KSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUCSgodTE2KUJJVCg3KSkKICNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfSE9TVFNDQU5fSE9TVFJPQU0JKCh1MTYpMykKICNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19ESVNBQkxFRAkJKCh1MTYpMSkKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19JTklUU1JDSAkJKCh1MTYpMikKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19DT05OX0lCU1MJCSgodTE2KTMpCi0jZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9FU1MJCSgodTE2KTQpCi0jZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfT09SX0VTUwkJKCh1MTYpNSkKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19DT05OX1dEUwkJKCh1MTYpNikKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19IT1NUQVAJCSgodTE2KTgpCiAjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMQkJCSgodTE2KTEpCiAjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMgkJCSgodTE2KTIpCiAjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfNWRvdDUJCQkoKHUxNik0KQogI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzExCQkJKCh1MTYpOCkKIAotLyotLS0gSnVzdCBzb21lIHN5bWJvbGljIG5hbWVzIGZvciBsZWdpYmlsaXR5IC0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9UWENNRF9OT1JFQ0wJCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1RYQ01EX1JFQ0wJCSgodTE2KTEpCi0KIC8qLS0tIE1BQyBJbnRlcm5hbCBtZW1vcnkgY29uc3RhbnRzIGFuZCBtYWNyb3MgLS0tLS0tKi8KIC8qIG1hc2tzIGFuZCBtYWNyb3MgdXNlZCB0byBtYW5pcHVsYXRlIE1BQyBpbnRlcm5hbCBtZW1vcnkgYWRkcmVzc2VzLiAqLwogLyogTUFDIGludGVybmFsIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDIzIGJpdCBxdWFudGl0aWVzLiAgVGhlIE1BQyB1c2VzCkBAIC0xMzksNTkgKzEwMSwyOCBAQAogICogbWFjcm9zIGJlbG93IGhlbHAgaGFuZGxlIHNvbWUgb2YgdGhpcy4KICAqLwogCi0vKiBIYW5keSBjb25zdGFudCAqLwotI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFYCSgodTE2KTB4MDA3ZikKLQogLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBhIGZsYXQgYWRkcmVzcyAqLwogI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX1BBR0VfTUFTSwkoMHgwMDdmZmY4MCkKICNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0FVWF9PRkZfTUFTSwkoMHgwMDAwMDA3ZikKICNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9QQUdFX01BU0sJKDB4ZmZmZjAwMDApCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9DTURfT0ZGX01BU0sJKDB4MDAwMGZmZmYpCiAKLS8qIE1hc2sgYml0cyBmb3IgZGlzY2FyZGluZyB1bndhbnRlZCBwaWVjZXMgaW4gQVVYIGZvcm1hdCAxNi1iaXQgYWRkcmVzcyBwYXJ0cyAqLworLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBBVVggZm9ybWF0CisgICAxNi1iaXQgYWRkcmVzcyBwYXJ0cyAqLwogI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9QQUdFX01BU0sJKDB4ZmZmZikKICNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0sJKDB4MDA3ZikKIAotLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBDTUQgZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX1BBR0VfTUFTSwkoMHgwMDdmKQotI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9PRkZfTUFTSwkoMHhmZmZmKQotCiAvKiBNYWtlIGEgMzItYml0IGZsYXQgYWRkcmVzcyBmcm9tIEFVWCBmb3JtYXQgMTYtYml0IHBhZ2UgYW5kIG9mZnNldCAqLwotI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQocCxvKQlcCi0JCSgoKHUzMikoKCh1MTYpKHApKSZIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSykpIDw8NykgfCBcCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLCBvKQlcCisJCSgoKHUzMikoKCh1MTYpKHApKSZIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSykpIDw8IDcpIHwgXAogCQkoKHUzMikoKCh1MTYpKG8pKSZIRkEzODR4X0FERFJfQVVYX09GRl9NQVNLKSkKIAotLyogTWFrZSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgZnJvbSBDTUQgZm9ybWF0IDE2LWJpdCBwYWdlIGFuZCBvZmZzZXQgKi8KLSNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtGTEFUKHAsbykJXAotCQkoKCh1MzIpKCgodTE2KShwKSkmSEZBMzg0eF9BRERSX0NNRF9QQUdFX01BU0spKSA8PDE2KSB8IFwKLQkJKCh1MzIpKCgodTE2KShvKSkmSEZBMzg0eF9BRERSX0NNRF9PRkZfTUFTSykpCi0KLS8qIE1ha2UgQVVYIGZvcm1hdCBvZmZzZXQgYW5kIHBhZ2UgZnJvbSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgKi8KLSNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfTUtQQUdFKGYpIFwKLQkJKCh1MTYpKCgoKHUzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0FVWF9QQUdFX01BU0spPj43KSkKLSNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfTUtPRkYoZikgXAotCQkoKHUxNikoKCh1MzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9BVVhfT0ZGX01BU0spKQotCiAvKiBNYWtlIENNRCBmb3JtYXQgb2Zmc2V0IGFuZCBwYWdlIGZyb20gYSAzMi1iaXQgZmxhdCBhZGRyZXNzICovCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LUEFHRShmKSBcCiAJCSgodTE2KSgoKCh1MzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9DTURfUEFHRV9NQVNLKT4+MTYpKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS09GRihmKSBcCiAJCSgodTE2KSgoKHUzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0NNRF9PRkZfTUFTSykpCiAKLS8qLS0tIEF1eCByZWdpc3RlciBtYXNrcy90ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFNvbWUgb2YgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIEFVWCBvZmZzZXQgcmVnaXN0ZXIgYXJlIHVzZWQgdG8gKi8KLS8qICBzZWxlY3QgYWRkcmVzcyBzcGFjZS4gKi8KLSNkZWZpbmUJCUhGQTM4NHhfQVVYX0NUTF9FWFREUwkoMHgwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYX0NUTF9OVgkoMHgwMSkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYX0NUTF9QSFkJKDB4MDIpCi0jZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfSUNTUkFNCSgweDAzKQotCi0vKiBNYWtlIEFVWCByZWdpc3RlciBvZmZzZXQgYW5kIHBhZ2UgdmFsdWVzIGZyb20gYSBmbGF0IGFkZHJlc3MgKi8KLSNkZWZpbmUJCUhGQTM4NHhfQVVYX01LT0ZGKGYsIGMpIFwKLQkoSEZBMzg0eF9BRERSX0FVWF9NS09GRihmKSB8ICgoKHUxNikoYykpPDwxMikpCi0jZGVmaW5lCQlIRkEzODR4X0FVWF9NS1BBR0UoZikJSEZBMzg0eF9BRERSX0FVWF9NS1BBR0UoZikKLQotCiAvKi0tLSBDb250cm9sbGVyIE1lbW9yeSBhZGRyZXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lCQlIRkEzODQyX1BEQV9CQVNFCSgweDAwN2YwMDAwVUwpCiAjZGVmaW5lCQlIRkEzODQxX1BEQV9CQVNFCSgweDAwM2YwMDAwVUwpCkBAIC0yMDEsMTI0ICsxMzIsMjUgQEAKICNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9ESVNBQkxFRAkJMAogI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQJCTEKICNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQJCTIKLSNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9GTEFTSFdSSVRURU4JCTMKLSNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9GTEFTSFdSSVRFUEVORElORwk0Ci0jZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfR0VORVNJUyAJCTUKLQotI2RlZmluZQkJSEZBMzg0eF9DTURfT0ZGCQkJKDB4MDApCi0jZGVmaW5lCQlIRkEzODR4X1BBUkFNMF9PRkYJCSgweDA0KQotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTFfT0ZGCQkoMHgwOCkKLSNkZWZpbmUJCUhGQTM4NHhfUEFSQU0yX09GRgkJKDB4MGMpCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19PRkYJCSgweDEwKQotI2RlZmluZQkJSEZBMzg0eF9SRVNQMF9PRkYJCSgweDE0KQotI2RlZmluZQkJSEZBMzg0eF9SRVNQMV9PRkYJCSgweDE4KQotI2RlZmluZQkJSEZBMzg0eF9SRVNQMl9PRkYJCSgweDFjKQotI2RlZmluZQkJSEZBMzg0eF9JTkZPRklEX09GRgkJKDB4MjApCi0jZGVmaW5lCQlIRkEzODR4X1JYRklEX09GRgkJKDB4NDApCi0jZGVmaW5lCQlIRkEzODR4X0FMTE9DRklEX09GRgkJKDB4NDQpCi0jZGVmaW5lCQlIRkEzODR4X1RYQ09NUExGSURfT0ZGCQkoMHg0OCkKLSNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMF9PRkYJCSgweDMwKQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwX09GRgkJKDB4MzgpCi0jZGVmaW5lCQlIRkEzODR4X0RBVEEwX09GRgkJKDB4NmMpCi0jZGVmaW5lCQlIRkEzODR4X1NFTEVDVDFfT0ZGCQkoMHgzNCkKLSNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUMV9PRkYJCSgweDNjKQotI2RlZmluZQkJSEZBMzg0eF9EQVRBMV9PRkYJCSgweDcwKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfT0ZGCQkoMHg2MCkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fT0ZGCQkoMHg2NCkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfT0ZGCQkoMHg2OCkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9PRkYJCSgweDI4KQotI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwX09GRgkJKDB4NTApCi0jZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCQkoMHg1NCkKLSNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMl9PRkYJCSgweDU4KQotI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFX09GRgkJKDB4NzQpCi0jZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVF9PRkYJCSgweDc4KQotI2RlZmluZQkJSEZBMzg0eF9BVVhEQVRBX09GRgkJKDB4N2MpCi0jZGVmaW5lCQlIRkEzODR4X1BDSUNPUl9PRkYJCSgweDRjKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1JfT0ZGCQkoMHg1YykKLSNkZWZpbmUJCUhGQTM4NHhfUENJX00wX0FERFJIX09GRgkoMHg4MCkKLSNkZWZpbmUJCUhGQTM4NHhfUENJX00wX0FERFJMX09GRgkoMHg4NCkKLSNkZWZpbmUJCUhGQTM4NHhfUENJX00wX0xFTl9PRkYJCSgweDg4KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQ1RMX09GRgkJKDB4OGMpCi0jZGVmaW5lCQlIRkEzODR4X1BDSV9TVEFUVVNfT0ZGCQkoMHg5OCkKLSNkZWZpbmUJCUhGQTM4NHhfUENJX00xX0FERFJIX09GRgkoMHhhMCkKLSNkZWZpbmUJCUhGQTM4NHhfUENJX00xX0FERFJMX09GRgkoMHhhNCkKLSNkZWZpbmUJCUhGQTM4NHhfUENJX00xX0xFTl9PRkYJCSgweGE4KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQ1RMX09GRgkJKDB4YWMpCiAKIC8qLS0tIFJlZ2lzdGVyIEZpZWxkIE1hc2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0JVU1kJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgodTE2KShCSVQxNCB8IEJJVDEzIHwgQklUMTIgfCBCSVQxMSB8IEJJVDEwIHwgQklUOSB8IEJJVDgpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVAkJKCh1MTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTAkJKCh1MTYpQklUOCkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX1dSSVRFCQkoKHUxNilCSVQ4KQotI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREUJCSgodTE2KShCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKHUxNikoQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEgfCBCSVQwKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPCQkoKHUxNikoQklUKDE0KSB8IEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDExKSB8IEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVAkJKCh1MTYpKEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREUJCSgodTE2KShCSVQoOSkgfCBCSVQoOCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERQkJKCh1MTYpKEJJVCg1KSB8IEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSB8IEJJVCgxKSB8IEJJVCgwKSkpCiAKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVAkJKCh1MTYpKEJJVDE0IHwgQklUMTMgfCBCSVQxMiB8IEJJVDExIHwgQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFCQkoKHUxNikoQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEgfCBCSVQwKSkKLQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfQlVTWQkJKCh1MTYpQklUMTUpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9FUlIJCSgodTE2KUJJVDE0KQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfREFUQU9GRgkJKCh1MTYpKEJJVDExIHwgQklUMTAgfCBCSVQ5IHwgQklUOCB8IEJJVDcgfCBCSVQ2IHwgQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEpKQotCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9USUNLCQkoKHUxNilCSVQxNSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1dURVJSCQkoKHUxNilCSVQxNCkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lORkRST1AJCSgodTE2KUJJVDEzKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GTwkJKCh1MTYpQklUNykKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0RUSU0JCSgodTE2KUJJVDUpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9DTUQJCSgodTE2KUJJVDQpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9BTExPQwkJKCh1MTYpQklUMykKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RYRVhDCQkoKHUxNilCSVQyKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFgJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9SWAkJKCh1MTYpQklUMCkKLQotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfaW50X0JBUF9PUCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEMpCi0KLSNkZWZpbmUgICAgICAgICBIRkEzODR4X2ludF9OT1JNQUwgICAgICAgICAgIChIRkEzODR4X0VWU1RBVF9JTkZPfEhGQTM4NHhfRVZTVEFUX1JYfEhGQTM4NHhfRVZTVEFUX1RYfEhGQTM4NHhfRVZTVEFUX1RYRVhDfEhGQTM4NHhfRVZTVEFUX0lORkRST1B8SEZBMzg0eF9FVlNUQVRfQUxMT0N8SEZBMzg0eF9FVlNUQVRfRFRJTSkKLQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9USUNLCQkoKHUxNilCSVQxNSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fV1RFUlIJCSgodTE2KUJJVDE0KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JTkZEUk9QCQkoKHUxNilCSVQxMykKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSU5GTwkJKCh1MTYpQklUNykKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fRFRJTQkJKCh1MTYpQklUNSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fQ01ECQkoKHUxNilCSVQ0KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9BTExPQwkJKCh1MTYpQklUMykKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fVFhFWEMJCSgodTE2KUJJVDIpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RYCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9SWAkJKCh1MTYpQklUMCkKLQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19USUNLCQkoKHUxNilCSVQxNSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfV1RFUlIJCSgodTE2KUJJVDE0KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZEUk9QCQkoKHUxNilCSVQxMykKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSU5GTwkJKCh1MTYpQklUNykKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfRFRJTQkJKCh1MTYpQklUNSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfQ01ECQkoKHUxNilCSVQ0KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19BTExPQwkJKCh1MTYpQklUMykKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhFWEMJCSgodTE2KUJJVDIpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RYCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19SWAkJKCh1MTYpQklUMCkKLQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOCQkoKHUxNikoQklUMTUgfCBCSVQxNCkpCi0KKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVAkJKCh1MTYpKEJJVCgxNCkgfCBCSVQoMTMpIHwgQklUKDEyKSB8IEJJVCgxMSkgfCBCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKIAogLyotLS0gQ29tbWFuZCBDb2RlIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBDb250cm9sbGVyIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9JTklUCQkoKHUxNikweDAwKQogI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0VOQUJMRQkJKCh1MTYpMHgwMSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ESVNBQkxFCQkoKHUxNikweDAyKQotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJQUcJCSgodTE2KTB4MDMpCi0KLS8qLS0tIEJ1ZmZlciBNZ210IENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9BTExPQwkJKCh1MTYpMHgwQSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9UWAkJKCh1MTYpMHgwQikKLSNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9DTFJQUlNUCQkoKHUxNikweDEyKQogCiAvKi0tLSBSZWd1bGF0ZSBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0NNRENPREVfTk9USUZZCQkoKHUxNikweDEwKQogI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOUQkJKCh1MTYpMHgxMSkKIAogLyotLS0gQ29uZmlndXJlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9BQ0NFU1MJCSgodTE2KTB4MjEpCiAjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRE9XTkxECQkoKHUxNikweDIyKQogCiAvKi0tLSBEZWJ1Z2dpbmcgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzI3LDkgKzE1OSw2IEBACiAjZGVmaW5lCQlIRkEzODR4X01PTklUT1JfRElTQUJMRQkJKCh1MTYpKDB4MGYpKQogCiAvKi0tLSBSZXN1bHQgQ29kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9TVUNDRVNTCQkJKCh1MTYpKDB4MDApKQotI2RlZmluZQkJSEZBMzg0eF9DQVJEX0ZBSUwJCSgodTE2KSgweDAxKSkKLSNkZWZpbmUJCUhGQTM4NHhfTk9fQlVGRgkJCSgodTE2KSgweDA1KSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EX0VSUgkJCSgodTE2KSgweDdGKSkKIAogLyotLS0gUHJvZ3JhbW1pbmcgTW9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0MywxNiArMTcyLDYgQEAKICNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfTlYJCSgodTE2KTB4MDIpCiAjZGVmaW5lCQlIRkEzODR4X1BST0dNT0RFX05WV1JJVEUJKCh1MTYpMHgwMykKIAotLyotLS0gQVVYIHJlZ2lzdGVyIGVuYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0FVWFBXMAkJCSgodTE2KTB4ZmUwMSkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYUFcxCQkJKCh1MTYpMHhkYzIzKQotI2RlZmluZQkJSEZBMzg0eF9BVVhQVzIJCQkoKHUxNikweGJhNDUpCi0KLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfSVNESVNBQkxFRAkoKHUxNikweDAwMDApCi0jZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0lTRU5BQkxFRAkoKHUxNikweGMwMDApCi0jZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0RPRU5BQkxFCSgodTE2KTB4ODAwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfRE9ESVNBQkxFCSgodTE2KTB4NDAwMCkKLQogLyotLS0gUmVjb3JkIElEIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJJRHM6IE5ldHdvcmsgUGFyYW1ldGVycywgU3RhdGljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKQEAgLTM2MiwxMzMgKzE4MSwyNSBAQAogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQJKCh1MTYpMHhGQzAyKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTAkoKHUxNikweEZDMDMpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05TU0lECQkoKHUxNikweEZDMDQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05BVElNV0lOCSgodTE2KTB4RkMwNSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFCQkoKHUxNikweEZDMDYpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOCSgodTE2KTB4RkMwNykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIJCSgodTE2KTB4RkMwOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRU5BQkxFRAkoKHUxNikweEZDMDkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQUwkJKCh1MTYpMHhGQzBBKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTVVMVElDQVNUUlgJKCh1MTYpMHhGQzBCKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVIJKCh1MTYpMHhGQzBDKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1IT0xERFVSCSgodTE2KTB4RkMwRCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTk5BTUUJCSgodTE2KTB4RkMwRSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIJKCh1MTYpMHhGQzEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjEJCSgodTE2KTB4RkMxMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyCQkoKHUxNikweEZDMTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMwkJKCh1MTYpMHhGQzEzKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjQJCSgodTE2KTB4RkMxNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1CQkoKHUxNikweEZDMTUpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNgkJKCh1MTYpMHhGQzE2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUNBU1RQTUJVRkYJKCh1MTYpMHhGQzE3KQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJJRCBsZW5ndGhzOiBOZXR3b3JrIFBhcmFtcywgU3RhdGljIENvbmZpZyBFbnRpdGllcwogICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CiAgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFX0xFTgkoKHUxNikyKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4JKCh1MTYpNikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTgkoKHUxNikzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUxfTEVOCSgodTE2KTIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTgkoKHUxNikzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU5fTEVOCSgodTE2KTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTWVNTQ0FMRV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU5fTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSX0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVEX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FUFNfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1IT0xERFVSX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRV9MRU4JKCh1MTYpMzQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05EVElNUEVSX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjFfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMl9MRU4JKCh1MTYpNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzX0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjRfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNV9MRU4JKCh1MTYpNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2X0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUNBU1RQTUJVRkZfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTl9MRU4gKCh1MTYpc2l6ZW9mKHUxNikpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUl9MRU4JKCh1MTYpMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29uZmlndXJhdGlvbiBSSURzOiBOZXR3b3JrIFBhcmFtZXRlcnMsIER5bmFtaWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SSURfR1JPVVBBRERSCQkoKHUxNikweEZDODApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DUkVBVEVJQlNTCQkoKHUxNikweEZDODEpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNICQkoKHUxNikweEZDODIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gJCSgodTE2KTB4RkM4MykKICNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwJCSgodTE2KTB4RkM4NCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX1BST01JU0NNT0RFCQkoKHUxNikweEZDODUpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMAkJKCh1MTYpMHhGQzkwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDEJCSgodTE2KTB4RkM5MSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gyCQkoKHUxNikweEZDOTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMwkJKCh1MTYpMHhGQzkzKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDQJCSgodTE2KTB4RkM5NCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g1CQkoKHUxNikweEZDOTUpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINgkJKCh1MTYpMHhGQzk2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMAkJKCh1MTYpMHhGQzk3KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMQkJKCh1MTYpMHhGQzk4KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMgkJKCh1MTYpMHhGQzk5KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMwkJKCh1MTYpMHhGQzlBKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINAkJKCh1MTYpMHhGQzlCKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINQkJKCh1MTYpMHhGQzlDKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINgkJKCh1MTYpMHhGQzlEKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAJCSgodTE2KTB4RkM5RSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxCQkoKHUxNikweEZDOUYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMgkJKCh1MTYpMHhGQ0EwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDMJCSgodTE2KTB4RkNBMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0CQkoKHUxNikweEZDQTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNQkJKCh1MTYpMHhGQ0EzKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDYJCSgodTE2KTB4RkNBNCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogTmV0d29yayBQYXJhbSwgRHluYW1pYyBDb25maWcgRW50aXRpZXMKLSAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAotICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUT0RPOiBmaWxsIGluIHRoZSByZXN0IG9mIHRoZXNlICovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFJfTEVOCSgodTE2KTE2ICogV0xBTl9BRERSX0xFTikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1NfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTF9MRU4JKCh1MTYpNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BST01JU0NNT0RFX0xFTgkoKHUxNikyKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDBfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gyX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDNfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g1X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDZfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDVfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDBfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDNfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDZfTEVOCSgodTE2KTApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvbmZpZ3VyYXRpb24gUklEczogQmVoYXZpb3IgUGFyYW1ldGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SSURfSVRJQ0tUSU1FCQkoKHUxNikweEZDRTApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvbmZpZ3VyYXRpb24gUklEIExlbmd0aHM6IEJlaGF2aW9yIFBhcmFtZXRlcnMKLSAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAotICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUVfTEVOCSgodTE2KTIpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUklEczogTklDIEluZm9ybWF0aW9uCkBAIC01MDIsNDEgKzIxMywxNyBAQAogI2RlZmluZQkJSEZBMzg0eF9SSURfTklDSURFTlRJVFkJCSgodTE2KTB4RkQwQikKICNkZWZpbmUJCUhGQTM4NHhfUklEX01GSVNVUFJBTkdFCQkoKHUxNikweEZEMEMpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DRklTVVBSQU5HRQkJKCh1MTYpMHhGRDBEKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTExJU1QJCSgodTE2KTB4RkQxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JFR1VMQVRPUllET01BSU5TCSgodTE2KTB4RkQxMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RFTVBUWVBFCQkoKHUxNikweEZEMTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSVMJCQkoKHUxNikweEZEMTMpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFJREVOVElUWQkJKCh1MTYpMHhGRDIwKQogI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBU1VQUkFOR0UJCSgodTE2KTB4RkQyMSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQV9NRklBQ1RSQU5HRVMJKCh1MTYpMHhGRDIyKQogI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBX0NGSUFDVFJBTkdFUwkoKHUxNikweEZEMjMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9CVUlMRFNFUQkJKCh1MTYpMHhGRkZFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRldJRAkJKCh1MTYpMHhGRkZGKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJJRCBMZW5ndGhzOiBOSUMgSW5mb3JtYXRpb24KICAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAogICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhMT0FEVElNRV9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X2Rvd25sb2FkYnVmZmVyX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJSURFTlRJVFlfTEVOCQkoKHUxNik4KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJU1VQUkFOR0VfTEVOCQkoKHUxNikxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSUFDVFJBTkdFU19MRU4JCSgodTE2KTEwKQogI2RlZmluZQkJSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTgkJKCh1MTYpMTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNJREVOVElUWV9MRU4JCSgodTE2KTgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NRklTVVBSQU5HRV9MRU4JCSgodTE2KTEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0VfTEVOCQkoKHUxNikxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NIQU5ORUxMSVNUX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JFR1VMQVRPUllET01BSU5TX0xFTgkoKHUxNikxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RFTVBUWVBFX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NJU19MRU4JCQkoKHUxNik0ODApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFJREVOVElUWV9MRU4JCSgodTE2KTgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFTVVBSQU5HRV9MRU4JCSgodTE2KTEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJQUNUUkFOR0VTX0xFTgkJKCh1MTYpMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVMyX0xFTgkJKCh1MTYpMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9CVUlMRFNFUV9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X0J1aWxkU2VxX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRldJRF9MRU4JCQkoKHUxNilzaXplb2YoaGZhMzg0eF9GV0lEX3QpKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSURzOiAgTUFDIEluZm9ybWF0aW9uCkBAIC01NDQsODcgKzIzMSwyNSBAQAogI2RlZmluZQkJSEZBMzg0eF9SSURfUE9SVFNUQVRVUwkJKCh1MTYpMHhGRDQwKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQJCSgodTE2KTB4RkQ0MSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRAkoKHUxNikweEZENDIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DT01NU1FVQUxJVFkJKCh1MTYpMHhGRDQzKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURQkoKHUxNikweEZENDQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQkNOaW50CSgodTE2KTB4RkQ0NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSAkoKHUxNikweEZENDYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUUJKCh1MTYpMHhGRDQ3KQogI2RlZmluZQkJSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlUCSgodTE2KTB4RkQ0OCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlUCSgodTE2KTB4RkQ0OSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUJKCh1MTYpMHhGRDRBKQotI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRQkoKHUxNikweEZENEIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DRlBPTExBQkxFCQkoKHUxNikweEZENEMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNUwkoKHUxNikweEZENEQpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QCSgodTE2KTB4RkQ0RikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWQkoKHUxNikweEZENTEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMQkoKHUxNikweEZEODApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMgkoKHUxNikweEZEODEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMwkoKHUxNikweEZEODIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNAkoKHUxNikweEZEODMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNQkoKHUxNikweEZEODQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNgkoKHUxNikweEZEODUpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTCSgodTE2KTB4RkQ4NikKLS8vICNkZWZpbmUJSEZBMzg0eF9SSURfUENGSU5GTwkJKCh1MTYpMHhGRDg3KQotI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFU1VMVFMgICAgICAgCSgodTE2KTB4RkQ4OCkgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9IT1NUU0NBTlJFU1VMVFMgICAJKCh1MTYpMHhGRDg5KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FUSU9OVVNFRAkoKHUxNikweEZEOEEpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFRkFJTFVSRSAgCSgodTE2KTB4RkQ4RCkgLy8gMS44LjAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNQUMgSW5mb3JtYXRpb24KICAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAogICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QT1JUU1RBVFVTX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lEX0xFTgkJKCh1MTYpMzQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSURfTEVOCQkoKHUxNilXTEFOX0JTU0lEX0xFTikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X2NvbW1zcXVhbGl0eV90KSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X2RibWNvbW1zcXVhbGl0eV90KSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJDTmludF9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFDVVJTQ0FMRVRIUkVTSF9MRU4JKCh1MTYpMTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BUENVUlNDQUxFVEhSRVNIX0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVF9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVF9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFJYTElGRVRJTUVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRV9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNU19MRU4JCSgodTE2KTQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0X0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1X0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2X0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1NfTEVOCQkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUENGSU5GT19MRU4JCQkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfUENGSW5mb19kYXRhX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1RfTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3QpKQogI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUX0xFTgkoKHUxNilzaXplb2YoaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YV90KSkKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUklEczogIE1vZGVtIEluZm9ybWF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QSFlUWVBFCQkoKHUxNikweEZEQzApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQ0hBTk5FTAkoKHUxNikweEZEQzEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UUE9XRVJTVEFURQkoKHUxNikweEZEQzIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DQ0FNT0RFCQkoKHUxNikweEZEQzMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVMJKCh1MTYpMHhGREM2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfTEZPU1RBVFVTICAgICAgICAgICAoKHUxNikweEZEQzcpIC8vIDEuNy4xCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUluZm9ybWF0aW9uIFJJRCBMZW5ndGhzOiAgTW9kZW0gSW5mb3JtYXRpb24KLSAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAotICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QSFlUWVBFX0xFTgkJCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQ0hBTk5FTF9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UUE9XRVJTVEFURV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NDQU1PREVfTEVOCQkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFU19MRU4JKCh1MTYpMTApCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFQSSBFTkhBTkNFTUVOVFMgKE5PVCBBTFJFQURZIElNUExFTUVOVEVEKQpAQCAtNjM1LDU3ICsyNjAsMjIgQEAKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkyCSgodTE2KTB4RkMyNikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkzCSgodTE2KTB4RkMyNykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUEZMQUdTCQkoKHUxNikweEZDMjgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBLRVlNQVBUQUJMRQkoKHUxNikweEZDMjkpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTgkoKHUxNikweEZDMkEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhBU1NPQ1NUQVRJT05TCSgodTE2KTB4RkMyQikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlRYQ09OVFJPTAkoKHUxNikweEZDMkMpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERQkoKHUxNikweEZDMkQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZIT1NUQVVUSEFTU09DCSgodTE2KTB4RkMyRSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlJDVkNSQ0VSUk9SCSgodTE2KTB4RkMzMCkKLS8vICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1NTElGRQkJKCh1MTYpMHhGQzMxKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQUxUUkVUUllDTlQJKCh1MTYpMHhGQzMyKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBCQ05pbnQJCSgodTE2KTB4RkMzMykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFQUENGSU5GTwkoKHUxNikweEZDMzQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTVEFQQ0ZJTkZPCSgodTE2KTB4RkMzNSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBSSU9SSVRZUVVTQUdFCSgodTE2KTB4RkMzNykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlRJTUNUUkwJCSgodTE2KTB4RkM0MCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlRISVJUWTJUQUxMWQkoKHUxNikweEZDNDIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZFTkhTRUNVUklUWQkoKHUxNikweEZDNDMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZEQk1BREpVU1QgIAkoKHUxNikweEZDNDYpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV1BBREFUQSAgICAgICAJKCh1MTYpMHhGQzQ4KSAvLyAxLjcuMAotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJPUE9HQVRJT05ERUxBWQkoKHUxNikweEZDNDkpIC8vIDEuNy42Ci0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTSE9SVFBSRUFNQkxFCSgodTE2KTB4RkNCMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkVYQ0xPTkdQUkVBTUJMRQkoKHUxNikweEZDQjEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBVVRIUlNQVElNRU9VVAkoKHUxNikweEZDQjIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZEQk1BREpVU1QgIAkoKHUxNikweEZDNDYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFEQVRBICAgICAgIAkoKHUxNikweEZDNDgpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZCQVNJQ1JBVEVTCSgodTE2KTB4RkNCMykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNVUFBSQVRFUwkoKHUxNikweEZDQjQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZGQUxMQkFDS0NUUkwJKCh1MTYpMHhGQ0I1KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1dFUEtFWVNUQVRVUyAgIAkoKHUxNikweEZDQjYpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfV0VQS0VZTUFQSU5ERVggCSgodTE2KTB4RkNCNykgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9CUk9BRENBU1RLRVlJRCAJKCh1MTYpMHhGQ0I4KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0VOVFNFQ0ZMQUdFWUlEIAkoKHUxNikweEZDQjkpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUEFTU0lWRVNDQU5DVFJMCSgodTE2KTB4RkNCQSkgLy8gTkVXIFNUQQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV1BBSEFORExJTkcJKCh1MTYpMHhGQ0JCKSAvLyAxLjcuMAotI2RlZmluZQkJSEZBMzg0eF9SSURfTURDQ09OVFJPTCAgICAgICAgCSgodTE2KTB4RkNCQykgLy8gMS43LjAvMS40LjAKLSNkZWZpbmUJCUhGQTM4NHhfUklEX01EQ0NPVU5UUlkgICAgICAgIAkoKHUxNikweEZDQkQpIC8vIDEuNy4wLzEuNC4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFBPV0VSTUFYICAgICAgICAJKCh1MTYpMHhGQ0JFKSAvLyAxLjcuMC8xLjQuMAotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTEZPRU5CTEVEICAgICAgCSgodTE2KTB4RkNCRikgLy8gMS42LjMKLSNkZWZpbmUgICAgICAgICBIRkEzODR4X1JJRF9DQVBJTkZPICAgICAgICAgICAgICgodTE2KTB4RkNDMCkgLy8gMS43LjAvMS4zLjcKLSNkZWZpbmUgICAgICAgICBIRkEzODR4X1JJRF9MSVNURU5pbnRFUlZBTCAgICAgICgodTE2KTB4RkNDMSkgLy8gMS43LjAvMS4zLjcKLSNkZWZpbmUgICAgICAgICBIRkEzODR4X1JJRF9ESVZFUlNJVFlFTkFCTEVEICAgICgodTE2KTB4RkNDMikgLy8gMS43LjAvMS4zLjcKLSNkZWZpbmUgICAgICAgICBIRkEzODR4X1JJRF9MRURfQ09OVFJPTCAgICAgICAgICgodTE2KTB4RkNDNCkgLy8gMS43LjYKLSNkZWZpbmUgICAgICAgICBIRkEzODR4X1JJRF9IRk9fREVMQVkgICAgICAgICAgICgodTE2KTB4RkNDNSkgLy8gMS43LjYKLSNkZWZpbmUgICAgICAgICBIRkEzODR4X1JJRF9ESVNTQUxPV0VEQlNTSUQgICAgICgodTE2KTB4RkNDNikgLy8gMS44LjAKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NDQU5SRVFVRVNUCQkoKHUxNikweEZDRTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwJKCh1MTYpMHhGQ0JBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhQT1dFUk1BWCAgICAgICAgCSgodTE2KTB4RkNCRSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNUCQkoKHUxNikweEZDRTIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEEJKCh1MTYpMHhGQ0UzKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUCSgodTE2KTB4RkNFNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0hPU1RTQ0FOICAgICAgICAgIAkoKHUxNikweEZDRTUpIC8vIE5FVyBTVEEKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FTU09DSUFURVNUQQkoKHUxNikweEZDRTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9IT1NUU0NBTiAgICAgICAgICAJKCh1MTYpMHhGQ0U1KQogCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZX0xFTgkoKHUxNik2KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQMTI4REVGQVVMVEtFWV9MRU4JKCh1MTYpMTQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUklPUVVTQUdFX0xFTgkJKCh1MTYpNCkKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUEQgUmVjb3JkIGNvZGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02OTcsMjIgKzI4NywxMSBAQAogI2RlZmluZSBIRkEzODR4X1BEUl9NRklTVVBSQU5HRQkJKCh1MTYpMHgwMDA2KQogI2RlZmluZSBIRkEzODR4X1BEUl9DRklTVVBSQU5HRQkJKCh1MTYpMHgwMDA3KQogI2RlZmluZSBIRkEzODR4X1BEUl9OSUNJRAkJKCh1MTYpMHgwMDA4KQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19NRUFTVVJFTUVOVFMJKCh1MTYpMHgwMDEwKQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1ZHREFDX01FQVNVUkVNRU5UUwkoKHUxNikweDAwMjApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfTEVWRUxfQ09NUF9NRUFTVVJFTUVOVFMJKCh1MTYpMHgwMDMwKQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX01PREVNX1RSSU1EQUNfTUVBU1VSRU1FTlRTCSgodTE2KTB4MDA0MCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9DT1JFR0FfSEFDSwkJKCh1MTYpMHgwMGZmKQogI2RlZmluZSBIRkEzODR4X1BEUl9NQUNfQUREUkVTUwkJKCh1MTYpMHgwMTAxKQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX01LS19DQUxMTkFNRQkoKHUxNikweDAxMDIpCiAjZGVmaW5lIEhGQTM4NHhfUERSX1JFR0RPTUFJTgkJKCh1MTYpMHgwMTAzKQogI2RlZmluZSBIRkEzODR4X1BEUl9BTExPV0VEX0NIQU5ORUwJKCh1MTYpMHgwMTA0KQogI2RlZmluZSBIRkEzODR4X1BEUl9ERUZBVUxUX0NIQU5ORUwJKCh1MTYpMHgwMTA1KQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1BSSVZBQ1lfT1BUSU9OCSgodTE2KTB4MDEwNikKICNkZWZpbmUgSEZBMzg0eF9QRFJfVEVNUFRZUEUJCSgodTE2KTB4MDEwNykKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9SRUZEQUNfU0VUVVAJKCh1MTYpMHgwMTEwKQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1ZHREFDX1NFVFVQCQkoKHUxNikweDAxMjApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfTEVWRUxfQ09NUF9TRVRVUAkoKHUxNikweDAxMzApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfVFJJTURBQ19TRVRVUAkoKHUxNikweDAxNDApCiAjZGVmaW5lIEhGQTM4NHhfUERSX0lGUl9TRVRUSU5HCQkoKHUxNikweDAyMDApCiAjZGVmaW5lIEhGQTM4NHhfUERSX1JGUl9TRVRUSU5HCQkoKHUxNikweDAyMDEpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfQkFTRUxJTkUJKCh1MTYpMHgwMjAyKQpAQCAtNzI5LDcgKzMwOCw2IEBACiAjZGVmaW5lIEhGQTM4NHhfUERSX1BDSV9QTUNPTkYJCSgodTE2KTB4MDQwNCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfUkZFTlJHWQkJKCh1MTYpMHgwNDA2KQogI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUE9XRVJfVFlQRSAgICAgICgodTE2KTB4MDQwNykKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9VTktOT1dONDA4CQkoKHUxNikweDA0MDgpCiAjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQVhfUE9XRVIJKCh1MTYpMHgwNDA5KQogI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfTUFOVUZBQ1RVUkVSCSgodTE2KTB4MDQxMCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX1BST0RVQ1QgIAkoKHUxNikweDA0MTEpCkBAIC03NDEsODMxICszMTksMTIyIEBACiAjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfTUFORl9URVNUSQkoKHUxNikweDA5MDEpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0VORF9PRl9QREEJCSgodTE2KTB4MDAwMCkKIAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0gUmVnaXN0ZXIgSUQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUJCUhGQTM4NHhfQ01ECQlIRkEzODR4X0NNRF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wCQlIRkEzODR4X1BBUkFNMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUEFSQU0xCQlIRkEzODR4X1BBUkFNMV9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUEFSQU0yCQlIRkEzODR4X1BBUkFNMl9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTCQlIRkEzODR4X1NUQVRVU19PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUkVTUDAJCUhGQTM4NHhfUkVTUDBfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AxCQlIRkEzODR4X1JFU1AxX09GRgotI2RlZmluZQkJSEZBMzg0eF9SRVNQMgkJSEZBMzg0eF9SRVNQMl9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfSU5GT0ZJRAkJSEZBMzg0eF9JTkZPRklEX09GRgotI2RlZmluZQkJSEZBMzg0eF9SWEZJRAkJSEZBMzg0eF9SWEZJRF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSUQJSEZBMzg0eF9BTExPQ0ZJRF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRAlIRkEzODR4X1RYQ09NUExGSURfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1NFTEVDVDAJCUhGQTM4NHhfU0VMRUNUMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUMAkJSEZBMzg0eF9PRkZTRVQwX09GRgotI2RlZmluZQkJSEZBMzg0eF9EQVRBMAkJSEZBMzg0eF9EQVRBMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMQkJSEZBMzg0eF9TRUxFQ1QxX09GRgotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxCQlIRkEzODR4X09GRlNFVDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0RBVEExCQlIRkEzODR4X0RBVEExX09GRgotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVQJCUhGQTM4NHhfRVZTVEFUX09GRgotI2RlZmluZQkJSEZBMzg0eF9pbnRFTgkJSEZBMzg0eF9JTlRFTl9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0sJCUhGQTM4NHhfRVZBQ0tfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0NPTlRST0wJCUhGQTM4NHhfQ09OVFJPTF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMAlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDEJSEZBMzg0eF9TV1NVUFBPUlQxX09GRgotI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyCUhGQTM4NHhfU1dTVVBQT1JUMl9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfQVVYUEFHRQkJSEZBMzg0eF9BVVhQQUdFX09GRgotI2RlZmluZQkJSEZBMzg0eF9BVVhPRkZTRVQJSEZBMzg0eF9BVVhPRkZTRVRfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0FVWERBVEEJCUhGQTM4NHhfQVVYREFUQV9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUENJQ09SCQlIRkEzODR4X1BDSUNPUl9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUENJSENSCQlIRkEzODR4X1BDSUhDUl9PRkYKLQotCiAvKi0tLSBSZWdpc3RlciBUZXN0L0dldC9TZXQgRmllbGQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTQlVTWSh2YWx1ZSkJCSgodTE2KSgoKHUxNil2YWx1ZSkgJiBIRkEzODR4X0NNRF9CVVNZKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPX0dFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpICYgSEZBMzg0eF9DTURfQUlORk8pID4+IDgpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKQkJKCh1MTYpKCh1MTYpKHZhbHVlKSA8PCA4KSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfR0VUKHZhbHVlKQkJKCh1MTYpKEhGQTM4NHhfQ01EX0FJTkZPX0dFVCgodTE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9NQUNQT1JUKSkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUX1NFVCh2YWx1ZSkJCSgodTE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCh2YWx1ZSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9JU1JFQ0wodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1JFQ0wpKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHZhbHVlKQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX1FPU19HRVQodmFsdWUpCQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpJigodTE2KTB4MzAwMCkpID4+IDEyKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX1FPU19TRVQodmFsdWUpCQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpIDw8IDEyKSAmIDB4MzAwMCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9JU1dSSVRFKHZhbHVlKQkJKCh1MTYpKEhGQTM4NHhfQ01EX0FJTkZPX0dFVCgodTE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9XUklURSkpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfV1JJVEVfU0VUKHZhbHVlKQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKCh1MTYpdmFsdWUpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREVfR0VUKHZhbHVlKQkJKCh1MTYpKEhGQTM4NHhfQ01EX0FJTkZPX0dFVCgodTE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9QUk9HTU9ERSkpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREVfU0VUKHZhbHVlKQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKCh1MTYpdmFsdWUpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERV9HRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0NNRF9DTURDT0RFKSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EX0NNRENPREVfU0VUKHZhbHVlKQkJKCh1MTYpKHZhbHVlKSkKIAotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUX0dFVCh2YWx1ZSkJKCh1MTYpKCgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfU1RBVFVTX1JFU1VMVCkgPj4gOCkpCiAjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKHZhbHVlKQkoKCh1MTYpKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREVfR0VUKHZhbHVlKQkoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1NUQVRVU19DTURDT0RFKQotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfQ01EQ09ERV9TRVQodmFsdWUpCSgodTE2KSh2YWx1ZSkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0lTQlVTWSh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfT0ZGU0VUX0JVU1kpKQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfSVNFUlIodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X09GRlNFVF9FUlIpKQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfREFUQU9GRl9HRVQodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfT0ZGU0VUX0RBVEFPRkYpKQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfREFUQU9GRl9TRVQodmFsdWUpCSgodTE2KSh2YWx1ZSkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVElDSyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1RJQ0spKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNXVEVSUih2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1dURVJSKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTSU5GRFJPUCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0lORkRST1ApKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNJTkZPKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfSU5GTykpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0RUSU0odmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9EVElNKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTQ01EKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfQ01EKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTQUxMT0ModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9BTExPQykpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RYRVhDKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVFhFWEMpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1RYKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTUlgodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9SWCkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTQkFQX09QKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9pbnRfQkFQX09QKSkKLQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU1RJQ0sodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RJQ0spKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9USUNLX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxNSkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTV1RFUlIodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1dURVJSKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fV1RFUlJfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDE0KSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNJTkZEUk9QKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9JTkZEUk9QKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSU5GRFJPUF9TRVQodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxMykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTSU5GTyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fSU5GTykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lORk9fU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDcpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU0RUSU0odmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0RUSU0pKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9EVElNX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCA1KSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNDTUQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0NNRCkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0NNRF9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgNCkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTQUxMT0ModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0FMTE9DKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fQUxMT0NfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDMpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU1RYRVhDKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9UWEVYQykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RYRVhDX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAyKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNUWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVFgpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9UWF9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMSkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTUlgodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1JYKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fUlhfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDApKQotCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTVElDSyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVElDSykpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RJQ0tfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDE1KSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNXVEVSUih2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfV1RFUlIpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19XVEVSUl9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTQpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0lORkRST1AodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0lORkRST1ApKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZEUk9QX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDEzKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNJTkZPKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19JTkZPKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSU5GT19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgNykpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTRFRJTSh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfRFRJTSkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0RUSU1fU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDUpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0NNRCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfQ01EKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfQ01EX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCA0KSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNBTExPQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfQUxMT0MpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19BTExPQ19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMykpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTVFhFWEModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RYRVhDKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhFWENfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDIpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1RYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19UWCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RYX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNSWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfUlgpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19SWF9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMCkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhFTl9TRVQodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxNCkpCi0jZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU5fR0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPj4gMTQpKQotCi0vKiBCeXRlIE9yZGVyICovCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBoZmEzODR4Mmhvc3RfMTYobikJKF9fbGUxNl90b19jcHUoKHUxNikobikpKQotI2RlZmluZSBoZmEzODR4Mmhvc3RfMzIobikJKF9fbGUzMl90b19jcHUoKHUzMikobikpKQotI2RlZmluZSBob3N0MmhmYTM4NHhfMTYobikJKF9fY3B1X3RvX2xlMTYoKHUxNikobikpKQotI2RlZmluZSBob3N0MmhmYTM4NHhfMzIobikJKF9fY3B1X3RvX2xlMzIoKHUzMikobikpKQotI2VuZGlmCiAKIC8qIEhvc3QgTWFpbnRhaW5lZCBTdGF0ZSBJbmZvICovCiAjZGVmaW5lIEhGQTM4NHhfU1RBVEVfUFJFSU5JVAkwCiAjZGVmaW5lIEhGQTM4NHhfU1RBVEVfSU5JVAkxCiAjZGVmaW5lIEhGQTM4NHhfU1RBVEVfUlVOTklORwkyCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBUeXBlcyBhbmQgdGhlaXIgcmVsYXRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIEhGQTM4NHhfSE9TVEFVVEhBU1NPQ19IT1NUQVVUSCAgIEJJVDAKLSNkZWZpbmUgSEZBMzg0eF9IT1NUQVVUSEFTU09DX0hPU1RBU1NPQyAgQklUMQotCi0jZGVmaW5lIEhGQTM4NHhfV0hBSEFORExJTkdfRElTQUJMRUQgICAgIDAKLSNkZWZpbmUgSEZBMzg0eF9XSEFIQU5ETElOR19QQVNTVEhST1VHSCAgQklUMQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogQ29tbW9ubHkgdXNlZCBiYXNpYyB0eXBlcyAqLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyCi17Ci0JdTE2CWxlbjsKLQl1OAlkYXRhWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2J5dGVzdHJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0ciB7CisJdTE2IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9ieXRlc3RyX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0cjMyCi17Ci0JdTE2CWxlbjsKLQl1OAlkYXRhWzMyXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9ieXRlc3RyMzJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0cjMyIHsKKwl1MTYgbGVuOworCXU4IGRhdGFbMzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9ieXRlc3RyMzJfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczoKIAlOZXR3b3JrIFBhcmFtZXRlcnMsIFN0YXRpYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcm90b3R5cGUgc3RydWN0dXJlOiBhbGwgY29uZmlndXJhdGlvbiByZWNvcmQgc3RydWN0dXJlcyBzdGFydCB3aXRoCi10aGVzZSBtZW1iZXJzICovCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkCi17Ci0JdTE2CXJlY2xlbjsKLQl1MTYJcmlkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlY190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZDE2Ci17Ci0JdTE2CXJlY2xlbjsKLQl1MTYJcmlkOwotCXUxNgl2YWw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjMTZfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQzMgotewotCXUxNglyZWNsZW47Ci0JdTE2CXJpZDsKLQl1MzIJdmFsOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlYzMyOwogCiAvKi0tIEhhcmR3YXJlL0Zpcm13YXJlIENvbXBvbmVudCBJbmZvcm1hdGlvbiAtLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY29tcGlkZW50Ci17Ci0JdTE2CWlkOwotCXUxNgl2YXJpYW50OwotCXUxNgltYWpvcjsKLQl1MTYJbWlub3I7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tcGlkZW50X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbXBpZGVudCB7CisJdTE2IGlkOworCXUxNiB2YXJpYW50OworCXUxNiBtYWpvcjsKKwl1MTYgbWlub3I7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2NvbXBpZGVudF90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NhcGxldmVsCi17Ci0JdTE2CXJvbGU7Ci0JdTE2CWlkOwotCXUxNgl2YXJpYW50OwotCXUxNglib3R0b207Ci0JdTE2CXRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jYXBsZXZlbF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQb3J0VHlwZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBvcnRUeXBlCi17Ci0JdTE2CWNuZlBvcnRUeXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBvcnRUeXBlX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk1BQ0FkZHJlc3MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25NQUNBZGRyZXNzCi17Ci0JdTgJY25mT3duTUFDQWRkcmVzc1s2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25NQUNBZGRyZXNzX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZkRlc2lyZWRTU0lEIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mRGVzaXJlZFNTSUQKLXsKLQl1OAljbmZEZXNpcmVkU1NJRFszNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mRGVzaXJlZFNTSURfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duQ2hhbm5lbCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bkNoYW5uZWwKLXsKLQl1MTYJY25mT3duQ2hhbm5lbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25DaGFubmVsX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93blNTSUQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25TU0lECi17Ci0JdTgJY25mT3duU1NJRFszNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duU1NJRF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25BVElNV2luZG93IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQVRJTVdpbmRvdwotewotCXUxNgljbmZPd25BVElNV2luZG93OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkFUSU1XaW5kb3dfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mU3lzdGVtU2NhbGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZTeXN0ZW1TY2FsZQotewotCXUxNgljbmZTeXN0ZW1TY2FsZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZTeXN0ZW1TY2FsZV90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNYXhEYXRhTGVuZ3RoIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aAotewotCXUxNgljbmZNYXhEYXRhTGVuZ3RoOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk1heERhdGFMZW5ndGhfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3MKLXsKLQl1OAljbmZXRFNBZGRyZXNzWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZldEU0FkZHJlc3NfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1FbmFibGVkIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUE1FbmFibGVkCi17Ci0JdTE2CWNuZlBNRW5hYmxlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUVuYWJsZWRfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1FUFMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVQUwotewotCXUxNgljbmZQTUVQUzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUVQU190OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RSZWNlaXZlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZQotewotCXUxNgljbmZNdWx0aWNhc3RSZWNlaXZlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFJlY2VpdmVfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY2FwbGV2ZWwgeworCXUxNiByb2xlOworCXUxNiBpZDsKKwl1MTYgdmFyaWFudDsKKwl1MTYgYm90dG9tOworCXUxNiB0b3A7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2NhcGxldmVsX3Q7CiAKIC8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZkF1dGhlbnRpY2F0aW9uIC0tKi8KICNkZWZpbmUgSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNCTB4MDAwMQogI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWQkweDAwMDIKICNkZWZpbmUgSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9MRUFQICAgICAJMHgwMDA0CiAKLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk1heFNsZWVwRHVyYXRpb24gLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNYXhTbGVlcER1cmF0aW9uCi17Ci0JdTE2CWNuZk1heFNsZWVwRHVyYXRpb247Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTWF4U2xlZXBEdXJhdGlvbl90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUhvbGRvdmVyRHVyYXRpb24gLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUhvbGRvdmVyRHVyYXRpb24KLXsKLQl1MTYJY25mUE1Ib2xkb3ZlckR1cmF0aW9uOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNSG9sZG92ZXJEdXJhdGlvbl90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25OYW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duTmFtZQotewotCXU4CWNuZk93bk5hbWVbMzRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bk5hbWVfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duRFRJTVBlcmlvZCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bkRUSU1QZXJpb2QKLXsKLQl1MTYJY25mT3duRFRJTVBlcmlvZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25EVElNUGVyaW9kX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZldEU0FkZHJlc3MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZXRFNBZGRyZXNzTgotewotCXU4CWNuZldEU0FkZHJlc3NbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mV0RTQWRkcmVzc05fdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mTXVsdGljYXN0UE1CdWZmZXJpbmcgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZwotewotCXUxNgljbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZ190OwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOgogCU5ldHdvcmsgUGFyYW1ldGVycywgRHluYW1pYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEdyb3VwQWRkcmVzc2VzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfR3JvdXBBZGRyZXNzZXMKLXsKLQl1OAlNQUNBZGRyZXNzWzE2XVs2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Hcm91cEFkZHJlc3Nlc190OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBDcmVhdGVJQlNTIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3JlYXRlSUJTUwotewotCXUxNglDcmVhdGVJQlNTOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NyZWF0ZUlCU1NfdDsKLQogI2RlZmluZSBIRkEzODR4X0NSRUFURUlCU1NfSk9JTkNSRUFURUlCU1MgICAgICAgICAgMAotI2RlZmluZSBIRkEzODR4X0NSRUFURUlCU1NfSk9JTkVTU19KT0lOQ1JFQVRFSUJTUyAgMQotI2RlZmluZSBIRkEzODR4X0NSRUFURUlCU1NfSk9JTklCU1MgICAgICAgICAgICAgICAgMgotI2RlZmluZSBIRkEzODR4X0NSRUFURUlCU1NfSk9JTkVTU19KT0lOSUJTUyAgICAgICAgMwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBGcmFnbWVudGF0aW9uVGhyZXNob2xkIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfRnJhZ21lbnRhdGlvblRocmVzaG9sZAotewotCXUxNglGcmFnbWVudGF0aW9uVGhyZXNob2xkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0ZyYWdtZW50YXRpb25UaHJlc2hvbGRfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogUlRTVGhyZXNob2xkIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUlRTVGhyZXNob2xkCi17Ci0JdTE2CVJUU1RocmVzaG9sZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9SVFNUaHJlc2hvbGRfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogVHhSYXRlQ29udHJvbCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1R4UmF0ZUNvbnRyb2wKLXsKLQl1MTYJVHhSYXRlQ29udHJvbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9UeFJhdGVDb250cm9sX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFByb21pc2N1b3VzTW9kZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1Byb21pc2N1b3VzTW9kZQotewotCXUxNglQcm9taXNjdW91c01vZGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUHJvbWlzY3VvdXNNb2RlX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFNjYW5SZXF1ZXN0IChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhCi17Ci0JdTE2CWNoYW5uZWxMaXN0OwotCXUxNgl0eFJhdGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2NhblJlcXVlc3RfZGF0YV90OwogCiAvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBIb3N0U2NhblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhCi17Ci0JdTE2CWNoYW5uZWxMaXN0OwotCXUxNgl0eFJhdGU7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhIHsKKwl1MTYgY2hhbm5lbExpc3Q7CisJdTE2IHR4UmF0ZTsKIAloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdDsKIAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogSm9pblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGEKLXsKLQl1OAlic3NpZFtXTEFOX0JTU0lEX0xFTl07Ci0JdTE2CWNoYW5uZWw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhIHsKKwl1OCBic3NpZFtXTEFOX0JTU0lEX0xFTl07CisJdTE2IGNoYW5uZWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdDsKIAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogYXV0aGVudGljYXRlU3RhdGlvbiAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhCi17Ci0JdTgJYWRkcmVzc1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJc3RhdHVzOwotCXUxNglhbGdvcml0aG07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGFzc29jaWF0ZVN0YXRpb24gKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2Fzc29jaWF0ZVN0YXRpb25fZGF0YQotewotCXU4CWFkZHJlc3NbV0xBTl9BRERSX0xFTl07Ci0JdTE2CXN0YXR1czsKLQl1MTYJdHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9hc3NvY2lhdGVTdGF0aW9uX2RhdGFfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogQ2hhbm5lbEluZm9SZXF1ZXN0IChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YQotewotCXUxNgljaGFubmVsTGlzdDsKLQl1MTYJY2hhbm5lbER3ZWxsVGltZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YV90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBXRVBLZXlNYXBwaW5nIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9XRVBLZXlNYXBwaW5nCi17Ci0JdTgJYWRkcmVzc1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJa2V5X2luZGV4OwotCXU4IAlrZXlbMTZdOwotCXU4IAltaWNfdHJhbnNtaXRfa2V5WzRdOwotCXU4IAltaWNfcmVjZWl2ZV9rZXlbNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfV0VQS2V5TWFwcGluZ190OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGEgeworCXU4IGFkZHJlc3NbRVRIX0FMRU5dOworCXUxNiBzdGF0dXM7CisJdTE2IGFsZ29yaXRobTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3Q7CiAKIC8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdQQURhdGEgICAgICAgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dQQURhdGEKLXsKLQl1MTYJZGF0YWxlbjsKLSAgICAgICAgdTggCWRhdGFbMF07IC8vIG1heCA4MAotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1dQQURhdGFfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczogQmVoYXZpb3IgUGFyYW1ldGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUaWNrVGltZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1RpY2tUaW1lCi17Ci0JdTE2CVRpY2tUaW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1RpY2tUaW1lX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dQQURhdGEgeworCXUxNiBkYXRhbGVuOworCXU4IGRhdGFbMF07CQkvLyBtYXggODAKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfV1BBRGF0YV90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTklDIEluZm9ybWF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNYXhMb2FkVGltZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X01heExvYWRUaW1lCi17Ci0JdTE2CU1heExvYWRUaW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01heExvYWRUaW1lX3Q7Ci0KIC8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBEb3duTG9hZEJ1ZmZlciAtLSovCiAvKiBOT1RFOiBUaGUgcGFnZSBhbmQgb2Zmc2V0IGFyZSBpbiBBVVggZm9ybWF0ICovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2Rvd25sb2FkYnVmZmVyCi17Ci0JdTE2CXBhZ2U7Ci0JdTE2CW9mZnNldDsKLQl1MTYJbGVuOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2Rvd25sb2FkYnVmZmVyX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQUklJZGVudGl0eSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BSSUlkZW50aXR5Ci17Ci0JdTE2CVBSSUNvbXBJRDsKLQl1MTYJUFJJVmFyaWFudDsKLQl1MTYJUFJJTWFqb3JWZXJzaW9uOwotCXUxNglQUklNaW5vclZlcnNpb247Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFJJSWRlbnRpdHlfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBSSVN1cFJhbmdlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFJJU3VwUmFuZ2UKLXsKLQl1MTYJUFJJUm9sZTsKLQl1MTYJUFJJSUQ7Ci0JdTE2CVBSSVZhcmlhbnQ7Ci0JdTE2CVBSSUJvdHRvbTsKLQl1MTYJUFJJVG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BSSVN1cFJhbmdlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDRklBY3RSYW5nZXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRklBY3RSYW5nZXMKLXsKLQl1MTYJQ0ZJUm9sZTsKLQl1MTYJQ0ZJSUQ7Ci0JdTE2CUNGSVZhcmlhbnQ7Ci0JdTE2CUNGSUJvdHRvbTsKLQl1MTYJQ0ZJVG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NGSUFjdFJhbmdlc190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTklDU2VyaWFsTnVtYmVyIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTklDU2VyaWFsTnVtYmVyCi17Ci0JdTgJTklDU2VyaWFsTnVtYmVyWzEyXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9OSUNTZXJpYWxOdW1iZXJfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE5JQ0lkZW50aXR5IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTklDSWRlbnRpdHkKLXsKLQl1MTYJTklDQ29tcElEOwotCXUxNglOSUNWYXJpYW50OwotCXUxNglOSUNNYWpvclZlcnNpb247Ci0JdTE2CU5JQ01pbm9yVmVyc2lvbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9OSUNJZGVudGl0eV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTUZJU3VwUmFuZ2UgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NRklTdXBSYW5nZQotewotCXUxNglNRklSb2xlOwotCXUxNglNRklJRDsKLQl1MTYJTUZJVmFyaWFudDsKLQl1MTYJTUZJQm90dG9tOwotCXUxNglNRklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTUZJU3VwUmFuZ2VfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGSVN1cFJhbmdlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0ZJU3VwUmFuZ2UKLXsKLQl1MTYJQ0ZJUm9sZTsKLQl1MTYJQ0ZJSUQ7Ci0JdTE2CUNGSVZhcmlhbnQ7Ci0JdTE2CUNGSUJvdHRvbTsKLQl1MTYJQ0ZJVG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NGSVN1cFJhbmdlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBCVUlMRFNFUTpCdWlsZFNlcSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0J1aWxkU2VxIHsKLQl1MTYJcHJpbWFyeTsKLQl1MTYJc2Vjb25kYXJ5OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0J1aWxkU2VxX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBGV0lEIC0tKi8KLSNkZWZpbmUgSEZBMzg0eF9GV0lEX0xFTgkxNAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9GV0lEIHsKLQl1OAlwcmltYXJ5W0hGQTM4NHhfRldJRF9MRU5dOwotCXU4CXNlY29uZGFyeVtIRkEzODR4X0ZXSURfTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9GV0lEX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDaGFubmVsTGlzdCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoYW5uZWxMaXN0Ci17Ci0JdTE2CUNoYW5uZWxMaXN0OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoYW5uZWxMaXN0X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBSZWd1bGF0b3J5RG9tYWlucyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1JlZ3VsYXRvcnlEb21haW5zCi17Ci0JdTgJUmVndWxhdG9yeURvbWFpbnNbMTJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1JlZ3VsYXRvcnlEb21haW5zX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBUZW1wVHlwZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1RlbXBUeXBlCi17Ci0JdTE2CVRlbXBUeXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1RlbXBUeXBlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDSVMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DSVMKLXsKLQl1OAlDSVNbNDgwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DSVNfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFNUQUlkZW50aXR5IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfU1RBSWRlbnRpdHkKLXsKLQl1MTYJU1RBQ29tcElEOwotCXUxNglTVEFWYXJpYW50OwotCXUxNglTVEFNYWpvclZlcnNpb247Ci0JdTE2CVNUQU1pbm9yVmVyc2lvbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TVEFJZGVudGl0eV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU1RBU3VwUmFuZ2UgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TVEFTdXBSYW5nZQotewotCXUxNglTVEFSb2xlOwotCXUxNglTVEFJRDsKLQl1MTYJU1RBVmFyaWFudDsKLQl1MTYJU1RBQm90dG9tOwotCXUxNglTVEFUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU1RBU3VwUmFuZ2VfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1GSUFjdFJhbmdlcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X01GSUFjdFJhbmdlcwotewotCXUxNglNRklSb2xlOwotCXUxNglNRklJRDsKLQl1MTYJTUZJVmFyaWFudDsKLQl1MTYJTUZJQm90dG9tOwotCXUxNglNRklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTUZJQWN0UmFuZ2VzX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2Rvd25sb2FkYnVmZmVyIHsKKwl1MTYgcGFnZTsKKwl1MTYgb2Zmc2V0OworCXUxNiBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2Rvd25sb2FkYnVmZmVyX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBOSUMgSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBvcnRTdGF0dXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qb3J0U3RhdHVzCi17Ci0JdTE2CVBvcnRTdGF0dXM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUG9ydFN0YXR1c190OwotCi0jZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19ESVNBQkxFRAkoKHUxNikxKQotI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfU0VBUkNISU5HCSgodTE2KTIpCiAjZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19DT05OX0lCU1MJKCh1MTYpMykKLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fRVNTCSgodTE2KTQpCi0jZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19PVVRPRlJBTkdFCSgodTE2KTUpCi0jZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19DT05OX1dEUwkoKHUxNik2KQotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudFNTSUQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50U1NJRAotewotCXU4CUN1cnJlbnRTU0lEWzM0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50U1NJRF90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudEJTU0lEIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudEJTU0lECi17Ci0JdTgJQ3VycmVudEJTU0lEWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRCU1NJRF90OwogCiAvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogY29tbXNxdWFsaXR5IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY29tbXNxdWFsaXR5Ci17Ci0JdTE2CUNRX2N1cnJCU1M7Ci0JdTE2CUFTTF9jdXJyQlNTOwotCXUxNglBTkxfY3VyckZDOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NvbW1zcXVhbGl0eV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21tc3F1YWxpdHkgeworCXUxNiBDUV9jdXJyQlNTOworCXUxNiBBU0xfY3VyckJTUzsKKwl1MTYgQU5MX2N1cnJGQzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfY29tbXNxdWFsaXR5X3Q7CiAKIC8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBkbWJjb21tc3F1YWxpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kYm1jb21tc3F1YWxpdHkKLXsKLQl1MTYJQ1FkYm1fY3VyckJTUzsKLQl1MTYJQVNMZGJtX2N1cnJCU1M7Ci0JdTE2CUFOTGRibV9jdXJyRkM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50VHhSYXRlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFR4UmF0ZQotewotCXUxNglDdXJyZW50VHhSYXRlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRUeFJhdGVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRCZWFjb25JbnRlcnZhbCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRCZWFjb25JbnRlcnZhbAotewotCXUxNglDdXJyZW50QmVhY29uSW50ZXJ2YWw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U2NhbGVUaHJlc2hvbGRzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFNjYWxlVGhyZXNob2xkcwotewotCXUxNglFbmVyZ3lEZXRlY3RUaHJlc2hvbGQ7Ci0JdTE2CUNhcnJpZXJEZXRlY3RUaHJlc2hvbGQ7Ci0JdTE2CURlZmVyRGV0ZWN0VGhyZXNob2xkOwotCXUxNglDZWxsU2VhcmNoVGhyZXNob2xkOyAvKiBTdGF0aW9ucyBvbmx5ICovCi0JdTE2CURlYWRTcG90VGhyZXNob2xkOyAvKiBTdGF0aW9ucyBvbmx5ICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFNjYWxlVGhyZXNob2xkc190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUHJvdG9jb2xSc3BUaW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvdG9jb2xSc3BUaW1lCi17Ci0JdTE2CVByb3RvY29sUnNwVGltZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFNob3J0UmV0cnlMaW1pdCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1Nob3J0UmV0cnlMaW1pdAotewotCXUxNglTaG9ydFJldHJ5TGltaXQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMb25nUmV0cnlMaW1pdCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xvbmdSZXRyeUxpbWl0Ci17Ci0JdTE2CUxvbmdSZXRyeUxpbWl0OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0xvbmdSZXRyeUxpbWl0X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNYXhUcmFuc21pdExpZmV0aW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZQotewotCXUxNglNYXhUcmFuc21pdExpZmV0aW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01heFRyYW5zbWl0TGlmZXRpbWVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFJlY2VpdmVMaWZldGltZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X01heFJlY2VpdmVMaWZldGltZQotewotCXUxNglNYXhSZWNlaXZlTGlmZXRpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDRlBvbGxhYmxlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0ZQb2xsYWJsZQotewotCXUxNglDRlBvbGxhYmxlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NGUG9sbGFibGVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcwotewotCXUxNglBdXRoZW50aWNhdGlvblR5cGU7Ci0JdTE2CVR5cGVFbmFibGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zCi0oZGF0YSBvbmx5IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX2RhdGEKLXsKLQl1MTYJQXV0aGVudGljYXRpb25UeXBlOwotCXUxNglUeXBlRW5hYmxlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkCi17Ci0JdTE2CVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWRfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE93bk1BQ0FkZHJlc3MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Pd25NQUNBZGRyZXNzCi17Ci0JdTgJT3duTUFDQWRkcmVzc1s2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Pd25NQUNBZGRyZXNzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUENGSW5mbwotewotCXUxNglNZWRpdW1PY2N1cGFuY3lMaW1pdDsKLQl1MTYJQ0ZQUGVyaW9kOwotCXUxNglDRlBNYXhEdXJhdGlvbjsKLQl1MTYJQ0ZQRmxhZ3M7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUENGSW5mb190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUENGSW5mbyAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUENGSW5mb19kYXRhCi17Ci0JdTE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OwotCXUxNglDRlBQZXJpb2Q7Ci0JdTE2CUNGUE1heER1cmF0aW9uOwotCXUxNglDRlBGbGFnczsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE1vZGVtIEluZm9ybWF0aW9uIFJlY29yZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBIWVR5cGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QSFlUeXBlCi17Ci0JdTE2CVBIWVR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUEhZVHlwZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudENoYW5uZWwgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50Q2hhbm5lbAotewotCXUxNglDdXJyZW50Q2hhbm5lbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50Q2hhbm5lbF90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudFBvd2VyU3RhdGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50UG93ZXJTdGF0ZQotewotCXUxNglDdXJyZW50UG93ZXJTdGF0ZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50UG93ZXJTdGF0ZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0NBTW9kZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NDQU1vZGUKLXsKLQl1MTYJQ0NBTW9kZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DQ0FNb2RlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTdXBwb3J0ZWREYXRhUmF0ZXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TdXBwb3J0ZWREYXRhUmF0ZXMKLXsKLQl1OAlTdXBwb3J0ZWREYXRhUmF0ZXNbMTBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlc190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTEZPU3RhdHVzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTEZPU3RhdHVzCi17Ci0JdTE2ICBUZXN0UmVzdWx0czsKLQl1MTYgIExGT1Jlc3VsdDsKLQl1MTYgIFZSSEZPUmVzdWx0OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0xGT1N0YXR1c190OwotCi0jZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9BTExQQVNTRUQgICAgQklUMAotI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfTEZPX0ZBSUwgICAgIEJJVDEKLSNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX1ZSX0hGMF9GQUlMICBCSVQyCi0jZGVmaW5lIEhGQTM4NHhfSE9TVF9GSVJNX0NPT1JESU5BVEUgICAgQklUNwotI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfQ09PUkRJTkFURSAgIEJJVDE1Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRURDb250cm9sIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTEVEQ29udHJvbAotewotCXUxNiAgc2VhcmNoaW5nX29uOwotCXUxNiAgc2VhcmNoaW5nX29mZjsKLQl1MTYgIGFzc29jX29uOwotCXUxNiAgYXNzb2Nfb2ZmOwotCXUxNiAgYWN0aXZpdHk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEVEQ29udHJvbF90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgIEZSQU1FIERFU0NSSVBUT1JTIEFORCBGUkFNRSBTVFJVQ1RVUkVTCi0KLUZSQU1FIERFU0NSSVBUT1JTOiBPZmZzZXRzCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvbnRyb2wgSW5mbyAob2Zmc2V0IDQ0LTUxKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9GRF9TVEFUVVNfT0ZGCQkJKCh1MTYpMHg0NCkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfVElNRV9PRkYJCQkoKHUxNikweDQ2KQotI2RlZmluZQkJSEZBMzg0eF9GRF9TV1NVUFBPUlRfT0ZGCQkoKHUxNikweDRBKQotI2RlZmluZQkJSEZBMzg0eF9GRF9TSUxFTkNFX09GRgkJCSgodTE2KTB4NEEpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NJR05BTF9PRkYJCQkoKHUxNikweDRCKQotI2RlZmluZQkJSEZBMzg0eF9GRF9SQVRFX09GRgkJCSgodTE2KTB4NEMpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1JYRkxPV19PRkYJCQkoKHUxNikweDREKQotI2RlZmluZQkJSEZBMzg0eF9GRF9SRVNFUlZFRF9PRkYJCQkoKHUxNikweDRFKQotI2RlZmluZQkJSEZBMzg0eF9GRF9UWENPTlRST0xfT0ZGCQkoKHUxNikweDUwKQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotODAyLjExIEhlYWRlciAob2Zmc2V0IDUyLTZCKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9GRF9GUkFNRUNPTlRST0xfT0ZGCQkoKHUxNikweDUyKQotI2RlZmluZQkJSEZBMzg0eF9GRF9EVVJBVElPTklEX09GRgkJKCh1MTYpMHg1NCkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzFfT0ZGCQkJKCh1MTYpMHg1NikKLSNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzJfT0ZGCQkJKCh1MTYpMHg1QykKLSNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzNfT0ZGCQkJKCh1MTYpMHg2MikKLSNkZWZpbmUJCUhGQTM4NHhfRkRfU0VRQ09OVFJPTF9PRkYJCSgodTE2KTB4NjgpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0FERFJFU1M0X09GRgkJCSgodTE2KTB4NkEpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5fT0ZGCQkJKCh1MTYpMHg3MCkKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTgwMi4zIEhlYWRlciAob2Zmc2V0IDcyLTdGKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9GRF9ERVNUQUREUkVTU19PRkYJCSgodTE2KTB4NzIpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NSQ0FERFJFU1NfT0ZGCQkoKHUxNikweDc4KQotI2RlZmluZQkJSEZBMzg0eF9GRF9EQVRBTEVOR1RIX09GRgkJKCh1MTYpMHg3RSkKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5IHsKKwl1MTYgQ1FkYm1fY3VyckJTUzsKKwl1MTYgQVNMZGJtX2N1cnJCU1M7CisJdTE2IEFOTGRibV9jdXJyRkM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2RibWNvbW1zcXVhbGl0eV90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGUkFNRSBTVFJVQ1RVUkVTOiBDb21tdW5pY2F0aW9uIEZyYW1lcwpAQCAtMTU3Myw1MSArNDQyLDQ2IEBACiBDb21tdW5pY2F0aW9uIEZyYW1lczogVHJhbnNtaXQgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tIENvbW11bmljYXRpb24gRnJhbWU6IFRyYW5zbWl0IEZyYW1lIFN0cnVjdHVyZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lCi17Ci0JdTE2CXN0YXR1czsKLQl1MTYJcmVzZXJ2ZWQxOwotCXUxNglyZXNlcnZlZDI7Ci0JdTMyCXN3X3N1cHBvcnQ7Ci0JdTgJdHhfcmV0cnljb3VudDsKLQl1OCAgIHR4X3JhdGU7Ci0JdTE2CXR4X2NvbnRyb2w7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lIHsKKwl1MTYgc3RhdHVzOworCXUxNiByZXNlcnZlZDE7CisJdTE2IHJlc2VydmVkMjsKKwl1MzIgc3dfc3VwcG9ydDsKKwl1OCB0eF9yZXRyeWNvdW50OworCXU4IHR4X3JhdGU7CisJdTE2IHR4X2NvbnRyb2w7CiAKIAkvKi0tIDgwMi4xMSBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLwogCi0JdTE2CWZyYW1lX2NvbnRyb2w7Ci0JdTE2CWR1cmF0aW9uX2lkOwotCXU4CWFkZHJlc3MxWzZdOwotCXU4CWFkZHJlc3MyWzZdOwotCXU4CWFkZHJlc3MzWzZdOwotCXUxNglzZXF1ZW5jZV9jb250cm9sOwotCXU4CWFkZHJlc3M0WzZdOwotCXUxNglkYXRhX2xlbjsgLyogbGl0dGxlIGVuZGlhbiBmb3JtYXQgKi8KKwl1MTYgZnJhbWVfY29udHJvbDsKKwl1MTYgZHVyYXRpb25faWQ7CisJdTggYWRkcmVzczFbNl07CisJdTggYWRkcmVzczJbNl07CisJdTggYWRkcmVzczNbNl07CisJdTE2IHNlcXVlbmNlX2NvbnRyb2w7CisJdTggYWRkcmVzczRbNl07CisJdTE2IGRhdGFfbGVuOwkJLyogbGl0dGxlIGVuZGlhbiBmb3JtYXQgKi8KIAogCS8qLS0gODAyLjMgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KIAotCXU4CWRlc3RfYWRkcls2XTsKLQl1OAlzcmNfYWRkcls2XTsKLQl1MTYJZGF0YV9sZW5ndGg7IC8qIGJpZyBlbmRpYW4gZm9ybWF0ICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdHhfZnJhbWVfdDsKKwl1OCBkZXN0X2FkZHJbNl07CisJdTggc3JjX2FkZHJbNl07CisJdTE2IGRhdGFfbGVuZ3RoOwkvKiBiaWcgZW5kaWFuIGZvcm1hdCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF90eF9mcmFtZV90OwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tbXVuaWNhdGlvbiBGcmFtZXM6IEZpZWxkIE1hc2tzIGZvciBUcmFuc21pdCBGcmFtZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0gU3RhdHVzIEZpZWxkIC0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSCQkJKCh1MTYpQklUNSkKLSNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRk9STUVSUgkJKCh1MTYpQklUMykKLSNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OCQkJKCh1MTYpQklUMikKLSNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUgkJKCh1MTYpQklUMSkKLSNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIJCSgodTE2KUJJVDApCisjZGVmaW5lCQlIRkEzODR4X1RYU1RBVFVTX0FDS0VSUgkJCSgodTE2KUJJVCg1KSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRk9STUVSUgkJKCh1MTYpQklUKDMpKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19ESVNDT04JCQkoKHUxNilCSVQoMikpCisjZGVmaW5lCQlIRkEzODR4X1RYU1RBVFVTX0FHRURFUlIJCSgodTE2KUJJVCgxKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIJCSgodTE2KUJJVCgwKSkKIC8qLS0gVHJhbnNtaXQgQ29udHJvbCBGaWVsZCAtLSovCi0jZGVmaW5lCQlIRkEzODR4X1RYX0NGUE9MTAkJCSgodTE2KUJJVDEyKQotI2RlZmluZQkJSEZBMzg0eF9UWF9QUlNUCQkJCSgodTE2KUJJVDExKQotI2RlZmluZQkJSEZBMzg0eF9UWF9NQUNQT1JUCQkJKCh1MTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQotI2RlZmluZQkJSEZBMzg0eF9UWF9OT0VOQ1JZUFQJCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9UWF9SRVRSWVNUUkFUCQkJKCh1MTYpKEJJVDYgfCBCSVQ1KSkKLSNkZWZpbmUJCUhGQTM4NHhfVFhfU1RSVUNUWVBFCQkJKCh1MTYpKEJJVDQgfCBCSVQzKSkKLSNkZWZpbmUJCUhGQTM4NHhfVFhfVFhFWAkJCQkoKHUxNilCSVQyKQotI2RlZmluZQkJSEZBMzg0eF9UWF9UWE9LCQkJCSgodTE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X1RYX01BQ1BPUlQJCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X1RYX1NUUlVDVFlQRQkJCSgodTE2KShCSVQoNCkgfCBCSVQoMykpKQorI2RlZmluZQkJSEZBMzg0eF9UWF9UWEVYCQkJCSgodTE2KUJJVCgyKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfVFhPSwkJCQkoKHUxNilCSVQoMSkpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21tdW5pY2F0aW9uIEZyYW1lczogVGVzdC9HZXQvU2V0IEZpZWxkIFZhbHVlcyBmb3IgVHJhbnNtaXQgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNjI4LDgzICs0OTIsNTMgQEAKIAlIRkEzODR4X1RYU1RBVFVTX0RJU0NPTnxIRkEzODR4X1RYU1RBVFVTX0FHRURFUlJ8XAogCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQogCi0jZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNBQ0tFUlIodikJKCh1MTYpKCgodTE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0FDS0VSUikpCi0jZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNGT1JNRVJSKHYpCSgodTE2KSgoKHUxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSKSkKLSNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0RJU0NPTih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfRElTQ09OKSkKLSNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FHRURFUlIodikJKCh1MTYpKCgodTE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0FHRURFUlIpKQotI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTUkVUUllFUlIodikJKCh1MTYpKCgodTE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX1JFVFJZRVJSKSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9TRVQodiwgbSwgcykJCSgoKCh1MTYpKHYpKTw8KCh1MTYpKHMpKSkmKCh1MTYpKG0pKSkKIAotI2RlZmluZQlIRkEzODR4X1RYX0dFVCh2LG0scykJCSgoKCh1MTYpKHYpKSYoKHUxNikobSkpKT4+KCh1MTYpKHMpKSkKLSNkZWZpbmUJSEZBMzg0eF9UWF9TRVQodixtLHMpCQkoKCgodTE2KSh2KSk8PCgodTE2KShzKSkpJigodTE2KShtKSkpCi0KLSNkZWZpbmUJSEZBMzg0eF9UWF9DRlBPTExfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfQ0ZQT0xMLDEyKQotI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCi0jZGVmaW5lCUhGQTM4NHhfVFhfUFJTVF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfUFJTVCwxMSkKLSNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQotI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKICNkZWZpbmUJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX01BQ1BPUlQsIDgpCi0jZGVmaW5lCUhGQTM4NHhfVFhfTk9FTkNSWVBUX0dFVCh2KQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX05PRU5DUllQVCwgNykKLSNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQotI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKLSNkZWZpbmUJSEZBMzg0eF9UWF9SRVRSWVNUUkFUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1JFVFJZU1RSQVQsIDUpCi0jZGVmaW5lCUhGQTM4NHhfVFhfU1RSVUNUWVBFX0dFVCh2KQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1NUUlVDVFlQRSwgMykKICNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQotI2RlZmluZQlIRkEzODR4X1RYX1RYRVhfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYRVgsIDIpCiAjZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKLSNkZWZpbmUJSEZBMzg0eF9UWF9UWE9LX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9UWE9LLCAxKQogI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21tdW5pY2F0aW9uIEZyYW1lczogUmVjZWl2ZSBGcmFtZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogUmVjZWl2ZSBGcmFtZSBTdHJ1Y3R1cmUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yeF9mcmFtZQotewordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yeF9mcmFtZSB7CiAJLyotLSBNQUMgcnggZGVzY3JpcHRvciAoaGZhMzg0eCBieXRlIG9yZGVyKSAtLSovCi0JdTE2CXN0YXR1czsKLQl1MzIJdGltZTsKLQl1OAlzaWxlbmNlOwotCXU4CXNpZ25hbDsKLQl1OAlyYXRlOwotCXU4CXJ4X2Zsb3c7Ci0JdTE2CXJlc2VydmVkMTsKLQl1MTYJcmVzZXJ2ZWQyOworCXUxNiBzdGF0dXM7CisJdTMyIHRpbWU7CisJdTggc2lsZW5jZTsKKwl1OCBzaWduYWw7CisJdTggcmF0ZTsKKwl1OCByeF9mbG93OworCXUxNiByZXNlcnZlZDE7CisJdTE2IHJlc2VydmVkMjsKIAogCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAoODAyLjExIGJ5dGUgb3JkZXIpIC0tKi8KLQl1MTYJZnJhbWVfY29udHJvbDsKLQl1MTYJZHVyYXRpb25faWQ7Ci0JdTgJYWRkcmVzczFbNl07Ci0JdTgJYWRkcmVzczJbNl07Ci0JdTgJYWRkcmVzczNbNl07Ci0JdTE2CXNlcXVlbmNlX2NvbnRyb2w7Ci0JdTgJYWRkcmVzczRbNl07Ci0JdTE2CWRhdGFfbGVuOyAvKiBoZmEzODR4IChsaXR0bGUgZW5kaWFuKSBmb3JtYXQgKi8KKwl1MTYgZnJhbWVfY29udHJvbDsKKwl1MTYgZHVyYXRpb25faWQ7CisJdTggYWRkcmVzczFbNl07CisJdTggYWRkcmVzczJbNl07CisJdTggYWRkcmVzczNbNl07CisJdTE2IHNlcXVlbmNlX2NvbnRyb2w7CisJdTggYWRkcmVzczRbNl07CisJdTE2IGRhdGFfbGVuOwkJLyogaGZhMzg0eCAobGl0dGxlIGVuZGlhbikgZm9ybWF0ICovCiAKIAkvKi0tIDgwMi4zIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCi0JdTgJZGVzdF9hZGRyWzZdOwotCXU4CXNyY19hZGRyWzZdOwotCXUxNglkYXRhX2xlbmd0aDsgLyogSUVFRT8gKGJpZyBlbmRpYW4pIGZvcm1hdCAqLwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3J4X2ZyYW1lX3Q7CisJdTggZGVzdF9hZGRyWzZdOworCXU4IHNyY19hZGRyWzZdOworCXUxNiBkYXRhX2xlbmd0aDsJLyogSUVFRT8gKGJpZyBlbmRpYW4pIGZvcm1hdCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9yeF9mcmFtZV90OwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tbXVuaWNhdGlvbiBGcmFtZXM6IEZpZWxkIE1hc2tzIGZvciBSZWNlaXZlIEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyotLSBPZmZzZXRzIC0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUlhfREFUQV9MRU5fT0ZGCQkJKCh1MTYpNDQpCi0jZGVmaW5lCQlIRkEzODR4X1JYXzgwMjExSERSX09GRgkJCSgodTE2KTE0KQotI2RlZmluZQkJSEZBMzg0eF9SWF9EQVRBX09GRgkJCSgodTE2KTYwKQogCiAvKi0tIFN0YXR1cyBGaWVsZHMgLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFCQkoKHUxNikoQklUMTUgfCBCSVQxNCB8IEJJVDEzKSkKLSNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVAkJKCh1MTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19VTkRFQ1IJCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIJCQkoKHUxNilCSVQwKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUgkJCSgodTE2KUJJVCgwKSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbW11bmljYXRpb24gRnJhbWVzOiBUZXN0L0dldC9TZXQgRmllbGQgVmFsdWVzIGZvciBSZWNlaXZlIEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFX0dFVCh2YWx1ZSkJKCh1MTYpKCgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTVNHVFlQRSkgPj4gMTMpKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDEzKSkKICNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodmFsdWUpCSgodTE2KSgoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQpID4+IDgpKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDgpKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU1VOREVDUih2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19VTkRFQ1IpKQogI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUih2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIpKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEZSQU1FIFNUUlVDVFVSRVM6IEluZm9ybWF0aW9uIFR5cGVzIGFuZCBJbmZvcm1hdGlvbiBGcmFtZSBTdHJ1Y3R1cmVzCkBAIC0xNzEyLDcgKzU0Niw2IEBACiBJbmZvcm1hdGlvbiBUeXBlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFIJCQkoKHUxNikweEYwMDBVTCkKLSNkZWZpbmUJCUhGQTM4NHhfSVRfSEFORE9WRVJERUFVVEhBRERSRVNTCSgodTE2KTB4RjAwMVVMKS8vQVAgMS4zLjcKICNkZWZpbmUJCUhGQTM4NHhfSVRfQ09NTVRBTExJRVMJCQkoKHUxNikweEYxMDBVTCkKICNkZWZpbmUJCUhGQTM4NHhfSVRfU0NBTlJFU1VMVFMJCQkoKHUxNikweEYxMDFVTCkKICNkZWZpbmUJCUhGQTM4NHhfSVRfQ0hJTkZPUkVTVUxUUwkJKCh1MTYpMHhGMTAyVUwpCkBAIC0xNzMwLDEyOCArNTYzLDExMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gRnJhbWVzOiBOb3RpZmljYXRpb24gRnJhbWUgU3RydWN0dXJlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyotLSAgTm90aWZpY2F0aW9uIEZyYW1lLE1BQyBNZ210OiBIYW5kb3ZlciBBZGRyZXNzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSGFuZG92ZXJBZGRyCi17Ci0JdTE2CWZyYW1lbGVuOwotCXUxNglpbmZvdHlwZTsKLQl1OAloYW5kb3Zlcl9hZGRyW1dMQU5fQlNTSURfTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IYW5kb3ZlckFkZHJfdDsKIAogLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IENvbW11bmljYXRpb24gVGFsbGllcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMTYKLXsKLQl1MTYJdHh1bmljYXN0ZnJhbWVzOwotCXUxNgl0eG11bHRpY2FzdGZyYW1lczsKLQl1MTYJdHhmcmFnbWVudHM7Ci0JdTE2CXR4dW5pY2FzdG9jdGV0czsKLQl1MTYJdHhtdWx0aWNhc3RvY3RldHM7Ci0JdTE2CXR4ZGVmZXJyZWR0cmFuczsKLQl1MTYJdHhzaW5nbGVyZXRyeWZyYW1lczsKLQl1MTYJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOwotCXUxNgl0eHJldHJ5bGltaXRleGNlZWRlZDsKLQl1MTYJdHhkaXNjYXJkczsKLQl1MTYJcnh1bmljYXN0ZnJhbWVzOwotCXUxNglyeG11bHRpY2FzdGZyYW1lczsKLQl1MTYJcnhmcmFnbWVudHM7Ci0JdTE2CXJ4dW5pY2FzdG9jdGV0czsKLQl1MTYJcnhtdWx0aWNhc3RvY3RldHM7Ci0JdTE2CXJ4ZmNzZXJyb3JzOwotCXUxNglyeGRpc2NhcmRzbm9idWZmZXI7Ci0JdTE2CXR4ZGlzY2FyZHN3cm9uZ3NhOwotCXUxNglyeGRpc2NhcmRzd2VwdW5kZWNyOwotCXUxNglyeG1zZ2lubXNnZnJhZzsKLQl1MTYJcnhtc2dpbmJhZG1zZ2ZyYWc7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMxNl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczE2IHsKKwl1MTYgdHh1bmljYXN0ZnJhbWVzOworCXUxNiB0eG11bHRpY2FzdGZyYW1lczsKKwl1MTYgdHhmcmFnbWVudHM7CisJdTE2IHR4dW5pY2FzdG9jdGV0czsKKwl1MTYgdHhtdWx0aWNhc3RvY3RldHM7CisJdTE2IHR4ZGVmZXJyZWR0cmFuczsKKwl1MTYgdHhzaW5nbGVyZXRyeWZyYW1lczsKKwl1MTYgdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCXUxNiB0eHJldHJ5bGltaXRleGNlZWRlZDsKKwl1MTYgdHhkaXNjYXJkczsKKwl1MTYgcnh1bmljYXN0ZnJhbWVzOworCXUxNiByeG11bHRpY2FzdGZyYW1lczsKKwl1MTYgcnhmcmFnbWVudHM7CisJdTE2IHJ4dW5pY2FzdG9jdGV0czsKKwl1MTYgcnhtdWx0aWNhc3RvY3RldHM7CisJdTE2IHJ4ZmNzZXJyb3JzOworCXUxNiByeGRpc2NhcmRzbm9idWZmZXI7CisJdTE2IHR4ZGlzY2FyZHN3cm9uZ3NhOworCXUxNiByeGRpc2NhcmRzd2VwdW5kZWNyOworCXUxNiByeG1zZ2lubXNnZnJhZzsKKwl1MTYgcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0NvbW1UYWxsaWVzMTZfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczMyCi17Ci0JdTMyCXR4dW5pY2FzdGZyYW1lczsKLQl1MzIJdHhtdWx0aWNhc3RmcmFtZXM7Ci0JdTMyCXR4ZnJhZ21lbnRzOwotCXUzMgl0eHVuaWNhc3RvY3RldHM7Ci0JdTMyCXR4bXVsdGljYXN0b2N0ZXRzOwotCXUzMgl0eGRlZmVycmVkdHJhbnM7Ci0JdTMyCXR4c2luZ2xlcmV0cnlmcmFtZXM7Ci0JdTMyCXR4bXVsdGlwbGVyZXRyeWZyYW1lczsKLQl1MzIJdHhyZXRyeWxpbWl0ZXhjZWVkZWQ7Ci0JdTMyCXR4ZGlzY2FyZHM7Ci0JdTMyCXJ4dW5pY2FzdGZyYW1lczsKLQl1MzIJcnhtdWx0aWNhc3RmcmFtZXM7Ci0JdTMyCXJ4ZnJhZ21lbnRzOwotCXUzMglyeHVuaWNhc3RvY3RldHM7Ci0JdTMyCXJ4bXVsdGljYXN0b2N0ZXRzOwotCXUzMglyeGZjc2Vycm9yczsKLQl1MzIJcnhkaXNjYXJkc25vYnVmZmVyOwotCXUzMgl0eGRpc2NhcmRzd3JvbmdzYTsKLQl1MzIJcnhkaXNjYXJkc3dlcHVuZGVjcjsKLQl1MzIJcnhtc2dpbm1zZ2ZyYWc7Ci0JdTMyCXJ4bXNnaW5iYWRtc2dmcmFnOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NvbW1UYWxsaWVzMzJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ29tbVRhbGxpZXMzMiB7CisJdTMyIHR4dW5pY2FzdGZyYW1lczsKKwl1MzIgdHhtdWx0aWNhc3RmcmFtZXM7CisJdTMyIHR4ZnJhZ21lbnRzOworCXUzMiB0eHVuaWNhc3RvY3RldHM7CisJdTMyIHR4bXVsdGljYXN0b2N0ZXRzOworCXUzMiB0eGRlZmVycmVkdHJhbnM7CisJdTMyIHR4c2luZ2xlcmV0cnlmcmFtZXM7CisJdTMyIHR4bXVsdGlwbGVyZXRyeWZyYW1lczsKKwl1MzIgdHhyZXRyeWxpbWl0ZXhjZWVkZWQ7CisJdTMyIHR4ZGlzY2FyZHM7CisJdTMyIHJ4dW5pY2FzdGZyYW1lczsKKwl1MzIgcnhtdWx0aWNhc3RmcmFtZXM7CisJdTMyIHJ4ZnJhZ21lbnRzOworCXUzMiByeHVuaWNhc3RvY3RldHM7CisJdTMyIHJ4bXVsdGljYXN0b2N0ZXRzOworCXUzMiByeGZjc2Vycm9yczsKKwl1MzIgcnhkaXNjYXJkc25vYnVmZmVyOworCXUzMiB0eGRpc2NhcmRzd3JvbmdzYTsKKwl1MzIgcnhkaXNjYXJkc3dlcHVuZGVjcjsKKwl1MzIgcnhtc2dpbm1zZ2ZyYWc7CisJdTMyIHJ4bXNnaW5iYWRtc2dmcmFnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9Db21tVGFsbGllczMyX3Q7CiAKIC8qLS0gIElucXVpcnkgRnJhbWUsIERpYWdub3NlOiBTY2FuIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXN1bHRTdWIKLXsKLQl1MTYJY2hpZDsKLQl1MTYJYW5sOwotCXUxNglzbDsKLQl1OAlic3NpZFtXTEFOX0JTU0lEX0xFTl07Ci0JdTE2CWJjbmludDsKLQl1MTYJY2FwaW5mbzsKLQloZmEzODR4X2J5dGVzdHIzMl90CXNzaWQ7Ci0JdTgJc3VwcHJhdGVzWzEwXTsgLyogODAyLjExIGluZm8gZWxlbWVudCAqLwotCXUxNglwcm9iZXJlc3BfcmF0ZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXN1bHRTdWIgeworCXUxNiBjaGlkOworCXUxNiBhbmw7CisJdTE2IHNsOworCXU4IGJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwl1MTYgYmNuaW50OworCXUxNiBjYXBpbmZvOworCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKKwl1OCBzdXBwcmF0ZXNbMTBdOwkvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCisJdTE2IHByb2JlcmVzcF9yYXRlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdAotewotCXUxNglyc3ZkOwotCXUxNglzY2FucmVhc29uOwotCWhmYTM4NHhfU2NhblJlc3VsdFN1Yl90Ci0JCXJlc3VsdFtIRkEzODR4X1NDQU5SRVNVTFRfTUFYXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TY2FuUmVzdWx0X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXN1bHQgeworCXUxNiByc3ZkOworCXUxNiBzY2FucmVhc29uOworCSBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdCByZXN1bHRbSEZBMzg0eF9TQ0FOUkVTVUxUX01BWF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X1NjYW5SZXN1bHRfdDsKIAogLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IENoSW5mbyBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWIKLXsKLQl1MTYJY2hpZDsKLQl1MTYJYW5sOwotCXUxNglwbmw7Ci0JdTE2CWFjdGl2ZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViIHsKKwl1MTYgY2hpZDsKKwl1MTYgYW5sOworCXUxNiBwbmw7CisJdTE2IGFjdGl2ZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViX3Q7CiAKLSNkZWZpbmUgSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFCUJJVDAKLSNkZWZpbmUgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFCUJJVDEKKyNkZWZpbmUgSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFCUJJVCgwKQorI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUJQklUKDEpCiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hJbmZvUmVzdWx0Ci17Ci0JdTE2CXNjYW5jaGFubmVsczsKLQloZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90Ci0JCXJlc3VsdFtIRkEzODR4X0NISU5GT1JFU1VMVF9NQVhdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdF90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHQgeworCXUxNiBzY2FuY2hhbm5lbHM7CisJIGhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViX3QgcmVzdWx0W0hGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0NoSW5mb1Jlc3VsdF90OwogCiAvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogSG9zdCBTY2FuIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hTY2FuUmVzdWx0U3ViCi17Ci0JdTE2CWNoaWQ7Ci0JdTE2CWFubDsKLQl1MTYJc2w7Ci0JdTgJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOwotCXUxNgliY25pbnQ7Ci0JdTE2CWNhcGluZm87Ci0JaGZhMzg0eF9ieXRlc3RyMzJfdAlzc2lkOwotCXU4CXN1cHByYXRlc1sxMF07IC8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KLQl1MTYJcHJvYmVyZXNwX3JhdGU7Ci0JdTE2CWF0aW07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHRTdWIgeworCXUxNiBjaGlkOworCXUxNiBhbmw7CisJdTE2IHNsOworCXU4IGJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwl1MTYgYmNuaW50OworCXUxNiBjYXBpbmZvOworCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKKwl1OCBzdXBwcmF0ZXNbMTBdOwkvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCisJdTE2IHByb2JlcmVzcF9yYXRlOworCXUxNiBhdGltOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hTY2FuUmVzdWx0Ci17Ci0JdTE2CW5yZXN1bHQ7Ci0JdTE2CXJzdmQ7Ci0JaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90Ci0JCXJlc3VsdFtIRkEzODR4X0hTQ0FOUkVTVUxUX01BWF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSFNjYW5SZXN1bHRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHQgeworCXUxNiBucmVzdWx0OworCXUxNiByc3ZkOworCSBoZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QgcmVzdWx0W0hGQTM4NHhfSFNDQU5SRVNVTFRfTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfSFNjYW5SZXN1bHRfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBMaW5rU3RhdHVzIC0tKi8KIApAQCAtMTg2MywxMDAgKzY3OCw2NyBAQAogI2RlZmluZSBIRkEzODR4X0xJTktfQVBfSU5SQU5HRQkJKCh1MTYpNSkKICNkZWZpbmUgSEZBMzg0eF9MSU5LX0FTU09DRkFJTAkJKCh1MTYpNikKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MaW5rU3RhdHVzCi17Ci0JdTE2CWxpbmtzdGF0dXM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTGlua1N0YXR1c190OwotCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xpbmtTdGF0dXMgeworCXUxNiBsaW5rc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9MaW5rU3RhdHVzX3Q7CiAKIC8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXNzb2NpYXRpb25TdGF0dXMgKC0tKi8KIAogI2RlZmluZSBIRkEzODR4X0FTU09DU1RBVFVTX1NUQUFTU09DCSgodTE2KTEpCiAjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfUkVBU1NPQwkoKHUxNikyKQotI2RlZmluZSBIRkEzODR4X0FTU09DU1RBVFVTX0RJU0FTU09DCSgodTE2KTMpCi0jZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfQVNTT0NGQUlMCSgodTE2KTQpCiAjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwJKCh1MTYpNSkKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1N0YXR1cwotewotCXUxNglhc3NvY3N0YXR1czsKLQl1OAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXNzb2NTdGF0dXMgeworCXUxNiBhc3NvY3N0YXR1czsKKwl1OCBzdGFfYWRkcltFVEhfQUxFTl07CiAJLyogb2xkX2FwX2FkZHIgaXMgb25seSB2YWxpZCBpZiBhc3NvY3N0YXR1cyA9PSAyICovCi0JdTgJb2xkX2FwX2FkZHJbV0xBTl9BRERSX0xFTl07Ci0JdTE2CXJlYXNvbjsKLQl1MTYJcmVzZXJ2ZWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXNzb2NTdGF0dXNfdDsKKwl1OCBvbGRfYXBfYWRkcltFVEhfQUxFTl07CisJdTE2IHJlYXNvbjsKKwl1MTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0Fzc29jU3RhdHVzX3Q7CiAKIC8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXV0aFJlcXVlc3QgKEFQIE9ubHkpIC0tKi8KIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoUmVxdWVzdAotewotCXU4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOwotCXUxNglhbGdvcml0aG07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aFJlcV90OwotCi0vKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IEFzc29jUmVxdWVzdCAoQVAgT25seSkgLS0qLwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jUmVxdWVzdAotewotCXU4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOwotCXUxNgl0eXBlOwotCXU4ICAgd3BhX2RhdGFbODBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0Fzc29jUmVxX3Q7Ci0KLQotI2RlZmluZSBIRkEzODR4X0FTU09DUkVRX1RZUEVfQVNTT0MgICAgIDAKLSNkZWZpbmUgSEZBMzg0eF9BU1NPQ1JFUV9UWVBFX1JFQVNTT0MgICAxCi0KLS8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogTUlDIEZhaWx1cmUgIChBUCBPbmx5KSAtLSovCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWljRmFpbHVyZQotewotCXU4CXNlbmRlcltXTEFOX0FERFJfTEVOXTsKLQl1OAlkZXN0W1dMQU5fQUREUl9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01pY0ZhaWx1cmVfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aFJlcXVlc3QgeworCXU4IHN0YV9hZGRyW0VUSF9BTEVOXTsKKwl1MTYgYWxnb3JpdGhtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9BdXRoUmVxX3Q7CiAKIC8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogUFNVc2VyQ291bnQgKEFQIE9ubHkpIC0tKi8KIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QU1VzZXJDb3VudAotewotCXUxNgl1c2VyY250OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BTVXNlckNvdW50X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BTVXNlckNvdW50IHsKKwl1MTYgdXNlcmNudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfUFNVc2VyQ291bnRfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9LZXlJRENoYW5nZWQKLXsKLQl1OAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKLQl1MTYJa2V5aWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfS2V5SURDaGFuZ2VkX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0tleUlEQ2hhbmdlZCB7CisJdTggc3RhX2FkZHJbRVRIX0FMRU5dOworCXUxNiBrZXlpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfS2V5SURDaGFuZ2VkX3Q7CiAKIC8qLS0gIENvbGxlY3Rpb24gb2YgYWxsIEluZiBmcmFtZXMgLS0tLS0tLS0tLS0tLS0tKi8KIHR5cGVkZWYgdW5pb24gaGZhMzg0eF9pbmZvZGF0YSB7Ci0JaGZhMzg0eF9Db21tVGFsbGllczE2X3QJY29tbXRhbGxpZXMxNjsKLQloZmEzODR4X0NvbW1UYWxsaWVzMzJfdAljb21tdGFsbGllczMyOwotCWhmYTM4NHhfU2NhblJlc3VsdF90CXNjYW5yZXN1bHQ7Ci0JaGZhMzg0eF9DaEluZm9SZXN1bHRfdAljaGluZm9yZXN1bHQ7Ci0JaGZhMzg0eF9IU2NhblJlc3VsdF90CWhzY2FucmVzdWx0OwotCWhmYTM4NHhfTGlua1N0YXR1c190CWxpbmtzdGF0dXM7Ci0JaGZhMzg0eF9Bc3NvY1N0YXR1c190CWFzc29jc3RhdHVzOwotCWhmYTM4NHhfQXV0aFJlcV90CWF1dGhyZXE7Ci0JaGZhMzg0eF9QU1VzZXJDb3VudF90CXBzdXNlcmNudDsKLQloZmEzODR4X0tleUlEQ2hhbmdlZF90ICBrZXlpZGNoYW5nZWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfaW5mb2RhdGFfdDsKKwloZmEzODR4X0NvbW1UYWxsaWVzMTZfdCBjb21tdGFsbGllczE2OworCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90IGNvbW10YWxsaWVzMzI7CisJaGZhMzg0eF9TY2FuUmVzdWx0X3Qgc2NhbnJlc3VsdDsKKwloZmEzODR4X0NoSW5mb1Jlc3VsdF90IGNoaW5mb3Jlc3VsdDsKKwloZmEzODR4X0hTY2FuUmVzdWx0X3QgaHNjYW5yZXN1bHQ7CisJaGZhMzg0eF9MaW5rU3RhdHVzX3QgbGlua3N0YXR1czsKKwloZmEzODR4X0Fzc29jU3RhdHVzX3QgYXNzb2NzdGF0dXM7CisJaGZhMzg0eF9BdXRoUmVxX3QgYXV0aHJlcTsKKwloZmEzODR4X1BTVXNlckNvdW50X3QgcHN1c2VyY250OworCWhmYTM4NHhfS2V5SURDaGFuZ2VkX3Qga2V5aWRjaGFuZ2VkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9pbmZvZGF0YV90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0luZkZyYW1lCi17Ci0JdTE2CQkJZnJhbWVsZW47Ci0JdTE2CQkJaW5mb3R5cGU7Ci0JaGZhMzg0eF9pbmZvZGF0YV90CWluZm87Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSW5mRnJhbWVfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSW5mRnJhbWUgeworCXUxNiBmcmFtZWxlbjsKKwl1MTYgaW5mb3R5cGU7CisJaGZhMzg0eF9pbmZvZGF0YV90IGluZm87Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0luZkZyYW1lX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFVTQiBQYWNrZXQgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBTaG91bGQgYmUgc2VudCB0byB0aGUgY3RybG91dCBlbmRwb2ludCAqLwotI2RlZmluZSBIRkEzODR4X1VTQl9FTkJVTEtJTgk2Ci0KIC8qIFNob3VsZCBiZSBzZW50IHRvIHRoZSBidWxrb3V0IGVuZHBvaW50ICovCiAjZGVmaW5lIEhGQTM4NHhfVVNCX1RYRlJNCTAKICNkZWZpbmUgSEZBMzg0eF9VU0JfQ01EUkVRCTEKQEAgLTE5NjYsNyArNzQ4LDYgQEAKICNkZWZpbmUgSEZBMzg0eF9VU0JfUk1FTVJFUQk1CiAKIC8qIFJlY2VpdmVkIGZyb20gdGhlIGJ1bGtpbiBlbmRwb2ludCAqLwotI2RlZmluZSBIRkEzODR4X1VTQl9JU0ZSTShhKQkoISgoYSkgJiAweDgwMDApKQogI2RlZmluZSBIRkEzODR4X1VTQl9JU1RYRlJNKGEpCSgoKGEpICYgMHg5MDAwKSA9PSAweDEwMDApCiAjZGVmaW5lIEhGQTM4NHhfVVNCX0lTUlhGUk0oYSkJKCEoKGEpICYgMHg5MDAwKSkKICNkZWZpbmUgSEZBMzg0eF9VU0JfSU5GT0ZSTQkweDgwMDAKQEAgLTE5ODIsMzgwICs3NjMsMTM1IEBACiAvKiBSZXF1ZXN0IChidWxrIE9VVCkgcGFja2V0IGNvbnRlbnRzICovCiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3R4ZnJtIHsKLQloZmEzODR4X3R4X2ZyYW1lX3QJZGVzYzsKLQl1OAkJCWRhdGFbV0xBTl9EQVRBX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3R4ZnJtX3Q7CisJaGZhMzg0eF90eF9mcmFtZV90IGRlc2M7CisJdTggZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX3R4ZnJtX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX2NtZHJlcSB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJY21kOwotCXUxNgkJcGFybTA7Ci0JdTE2CQlwYXJtMTsKLQl1MTYJCXBhcm0yOwotCXU4CQlwYWRbNTRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9jbWRyZXFfdDsKKwl1MTYgdHlwZTsKKwl1MTYgY21kOworCXUxNiBwYXJtMDsKKwl1MTYgcGFybTE7CisJdTE2IHBhcm0yOworCXU4IHBhZFs1NF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9jbWRyZXFfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfd3JpZHJlcSB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotCXUxNgkJcmlkOwotCXU4CQlkYXRhW0hGQTM4NHhfUklEREFUQV9NQVhMRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl93cmlkcmVxX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1MTYgcmlkOworCXU4IGRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl93cmlkcmVxX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXEgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLQl1MTYJCXJpZDsKLQl1OAkJcGFkWzU4XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfcnJpZHJlcV90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47CisJdTE2IHJpZDsKKwl1OCBwYWRbNThdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfcnJpZHJlcV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93bWVtcmVxIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlmcm1sZW47Ci0JdTE2CQlvZmZzZXQ7Ci0JdTE2CQlwYWdlOwotCXU4CQlkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dtZW1yZXFfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZnJtbGVuOworCXUxNiBvZmZzZXQ7CisJdTE2IHBhZ2U7CisJdTggZGF0YVtIRkEzODR4X1VTQl9SV01FTV9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2Jfd21lbXJlcV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9ybWVtcmVxIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlmcm1sZW47Ci0JdTE2CQlvZmZzZXQ7Ci0JdTE2CQlwYWdlOwotCXU4CQlwYWRbNTZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ybWVtcmVxX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1MTYgb2Zmc2V0OworCXUxNiBwYWdlOworCXU4IHBhZFs1Nl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ybWVtcmVxX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFJlc3BvbnNlIChidWxrIElOKSBwYWNrZXQgY29udGVudHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcnhmcm0gewotCWhmYTM4NHhfcnhfZnJhbWVfdAlkZXNjOwotCXU4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcnhmcm1fdDsKKwloZmEzODR4X3J4X2ZyYW1lX3QgZGVzYzsKKwl1OCBkYXRhW1dMQU5fREFUQV9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2Jfcnhmcm1fdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfaW5mb2ZybSB7Ci0JdTE2CQkJdHlwZTsKLQloZmEzODR4X0luZkZyYW1lX3QJaW5mbzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfaW5mb2ZybV90OworCXUxNiB0eXBlOworCWhmYTM4NHhfSW5mRnJhbWVfdCBpbmZvOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfaW5mb2ZybV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9zdGF0dXNyZXNwIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlyZXNwMDsKLQl1MTYJCXJlc3AxOwotCXUxNgkJcmVzcDI7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlc3BfdDsKKwl1MTYgdHlwZTsKKwl1MTYgc3RhdHVzOworCXUxNiByZXNwMDsKKwl1MTYgcmVzcDE7CisJdTE2IHJlc3AyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfY21kcmVzcF90OwogCiB0eXBlZGVmIGhmYTM4NHhfdXNiX2NtZHJlc3BfdCBoZmEzODR4X3VzYl93cmlkcmVzcF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9ycmlkcmVzcCB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotCXUxNgkJcmlkOwotCXU4CQlkYXRhW0hGQTM4NHhfUklEREFUQV9NQVhMRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ycmlkcmVzcF90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47CisJdTE2IHJpZDsKKwl1OCBkYXRhW0hGQTM4NHhfUklEREFUQV9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfcnJpZHJlc3BfdDsKIAogdHlwZWRlZiBoZmEzODR4X3VzYl9jbWRyZXNwX3QgaGZhMzg0eF91c2Jfd21lbXJlc3BfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcm1lbXJlc3AgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLQl1OAkJZGF0YVtIRkEzODR4X1VTQl9SV01FTV9NQVhMRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ybWVtcmVzcF90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47CisJdTggZGF0YVtIRkEzODR4X1VTQl9SV01FTV9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfYnVmYXZhaWwgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfYnVmYXZhaWxfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZnJtbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfYnVmYXZhaWxfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfZXJyb3IgewotCXUxNgkJdHlwZTsKLQl1MTYJCWVycm9ydHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfZXJyb3JfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZXJyb3J0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfZXJyb3JfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFVuaW9ucyBmb3IgcGFja2FnaW5nIGFsbCB0aGUga25vd24gcGFja2V0IHR5cGVzIHRvZ2V0aGVyICovCiAKIHR5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JvdXQgewotCXUxNgkJCXR5cGU7Ci0JaGZhMzg0eF91c2JfdHhmcm1fdAl0eGZybTsKLQloZmEzODR4X3VzYl9jbWRyZXFfdAljbWRyZXE7Ci0JaGZhMzg0eF91c2Jfd3JpZHJlcV90CXdyaWRyZXE7Ci0JaGZhMzg0eF91c2JfcnJpZHJlcV90CXJyaWRyZXE7Ci0JaGZhMzg0eF91c2Jfd21lbXJlcV90CXdtZW1yZXE7Ci0JaGZhMzg0eF91c2Jfcm1lbXJlcV90CXJtZW1yZXE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNib3V0X3Q7CisJdTE2IHR5cGU7CisJaGZhMzg0eF91c2JfdHhmcm1fdCB0eGZybTsKKwloZmEzODR4X3VzYl9jbWRyZXFfdCBjbWRyZXE7CisJaGZhMzg0eF91c2Jfd3JpZHJlcV90IHdyaWRyZXE7CisJaGZhMzg0eF91c2JfcnJpZHJlcV90IHJyaWRyZXE7CisJaGZhMzg0eF91c2Jfd21lbXJlcV90IHdtZW1yZXE7CisJaGZhMzg0eF91c2Jfcm1lbXJlcV90IHJtZW1yZXE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYm91dF90OwogCiB0eXBlZGVmIHVuaW9uIGhmYTM4NHhfdXNiaW4gewotCXUxNgkJCXR5cGU7Ci0JaGZhMzg0eF91c2Jfcnhmcm1fdAlyeGZybTsKLQloZmEzODR4X3VzYl90eGZybV90CXR4ZnJtOwotCWhmYTM4NHhfdXNiX2luZm9mcm1fdAlpbmZvZnJtOwotCWhmYTM4NHhfdXNiX2NtZHJlc3BfdAljbWRyZXNwOwotCWhmYTM4NHhfdXNiX3dyaWRyZXNwX3QJd3JpZHJlc3A7Ci0JaGZhMzg0eF91c2JfcnJpZHJlc3BfdAlycmlkcmVzcDsKLQloZmEzODR4X3VzYl93bWVtcmVzcF90CXdtZW1yZXNwOwotCWhmYTM4NHhfdXNiX3JtZW1yZXNwX3QJcm1lbXJlc3A7Ci0JaGZhMzg0eF91c2JfYnVmYXZhaWxfdAlidWZhdmFpbDsKLQloZmEzODR4X3VzYl9lcnJvcl90CXVzYmVycm9yOwotCXU4CQkJYm9ndXNwYWRbMzAwMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiaW5fdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUEQgcmVjb3JkIHN0cnVjdHVyZXMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtCi17Ci0JdTgJbnVtWzhdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9wY2JfcGFydG51bV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9wY2JfdHJhY2VudW0KLXsKLQl1OAludW1bOF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsCi17Ci0JdTgJbnVtWzEyXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX3NlcmlhbF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzCi17Ci0JZG91YmxlCWNhcnJpZXJfZnJlcTsKLQlkb3VibGUJb2NjdXBpZWRfYmFuZDsKLQlkb3VibGUJcG93ZXJfZGVuc2l0eTsKLQlkb3VibGUJdHhfc3B1cl9mMTsKLQlkb3VibGUJdHhfc3B1cl9mMjsKLQlkb3VibGUJdHhfc3B1cl9mMzsKLQlkb3VibGUJdHhfc3B1cl9mNDsKLQlkb3VibGUJdHhfc3B1cl9sMTsKLQlkb3VibGUJdHhfc3B1cl9sMjsKLQlkb3VibGUJdHhfc3B1cl9sMzsKLQlkb3VibGUJdHhfc3B1cl9sNDsKLQlkb3VibGUJcnhfc3B1cl9mMTsKLQlkb3VibGUJcnhfc3B1cl9mMjsKLQlkb3VibGUJcnhfc3B1cl9sMTsKLQlkb3VibGUJcnhfc3B1cl9sMjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWtrX21lYXN1cmVtZW50c190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZQotewotCXU4CXNpemVbMTJdOyAvKiB1bml0cyBvZiBLQiAqLwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tZmlzdXByYW5nZQotewotCXUxNglpZDsKLQl1MTYJdmFyaWFudDsKLQl1MTYJYm90dG9tOwotCXUxNgl0b3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2NmaXN1cHJhbmdlCi17Ci0JdTE2CWlkOwotCXUxNgl2YXJpYW50OwotCXUxNglib3R0b207Ci0JdTE2CXRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbmljaWQKLXsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CW1ham9yOwotCXUxNgltaW5vcjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljaWRfdDsKLQotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzCi17Ci0JdTE2CXZhbHVlWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX21lYXN1cmVtZW50cwotewotCXUxNgl2YWx1ZVswXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfbWVhc3VyZW1lbnRzCi17Ci0JdTE2CXZhbHVlWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9sZXZlbF9jb21wY19tZWFzdXJlbWVudHNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbWFjX2FkZHJlc3MKLXsKLQl1OAlhZGRyWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzc190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWUKLXsKLQl1OAljYWxsbmFtZVs4XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZ2RvbWFpbgotewotCXUxNgludW1kb21haW5zOwotCXUxNglkb21haW5bNV07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9hbGxvd2VkX2NoYW5uZWwKLXsKLQl1MTYJY2hfYml0bWFwOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9hbGxvd2VkX2NoYW5uZWxfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsCi17Ci0JdTE2CWNoYW5uZWw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbgotewotCXUxNglhdmFpbGFibGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3RlbXB0eXBlCi17Ci0JdTE2CXR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RlbXB0eXBlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cAotewotCXUxNgljaF92YWx1ZVsxNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl92Z2RhY19zZXR1cAotewotCXUxNgljaF92YWx1ZVsxNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXAKLXsKLQl1MTYJY2hfdmFsdWVbMTRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9sZXZlbF9jb21wX3NldHVwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXAKLXsKLQl1MTYJdHJpbWlkYWM7Ci0JdTE2CXRyaW1xZGFjOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl90cmltZGFjX3NldHVwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nCi17Ci0JdTE2CXZhbHVlWzNdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9pZnJfc2V0dGluZ190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZwotewotCXUxNgl2YWx1ZVszXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZQotewotCXUxNgl2YWx1ZVs1MF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfYmFzZWxpbmVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9zaGFkb3cKLXsKLQl1MzIJdmFsdWVbMzJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2lmcmYKLXsKLQl1MzIJdmFsdWVbMjBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2lmcmZfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwCi17Ci0JdTE2CXZhbHVlWzE0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfY2hjYWxpCi17Ci0JdTE2CXZhbHVlWzE3XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9uaWNfY29uZmlnCi17Ci0JdTE2CWNvbmZpZ19iaXRtYXA7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19jb25maWdfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZvX2RlbGF5Ci17Ci0JdTggICBoZm9fZGVsYXk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfaGZvX2RlbGF5X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3AKLXsKLQl1MTYJdmFsdWVbMzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0aQotewotCXUxNgl2YWx1ZVszMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0aV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2VuZF9vZl9wZGEKLXsKLQl1MTYJY3JjOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9lbmRfb2ZfcGRhX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyZWMKLXsKLQl1MTYJbGVuOyAvKiBpbiB3b3JkcyAqLwotCXUxNgljb2RlOwotCXVuaW9uIHBkciB7Ci0JaGZhMzg0eF9wZHJfcGNiX3BhcnRudW1fdAlwY2JfcGFydG51bTsKLQloZmEzODR4X3Bkcl9wY2JfdHJhY2VudW1fdAlwY2JfdHJhY2VudW07Ci0JaGZhMzg0eF9wZHJfbmljX3NlcmlhbF90CW5pY19zZXJpYWw7Ci0JaGZhMzg0eF9wZHJfbWtrX21lYXN1cmVtZW50c190CW1ra19tZWFzdXJlbWVudHM7Ci0JaGZhMzg0eF9wZHJfbmljX3JhbXNpemVfdAluaWNfcmFtc2l6ZTsKLQloZmEzODR4X3Bkcl9tZmlzdXByYW5nZV90CW1maXN1cHJhbmdlOwotCWhmYTM4NHhfcGRyX2NmaXN1cHJhbmdlX3QJY2Zpc3VwcmFuZ2U7Ci0JaGZhMzg0eF9wZHJfbmljaWRfdAkJbmljaWQ7Ci0JaGZhMzg0eF9wZHJfcmVmZGFjX21lYXN1cmVtZW50c190CXJlZmRhY19tZWFzdXJlbWVudHM7Ci0JaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzX3QJdmdkYWNfbWVhc3VyZW1lbnRzOwotCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190CWxldmVsX2NvbXBjX21lYXN1cmVtZW50czsKLQloZmEzODR4X3Bkcl9tYWNfYWRkcmVzc190CW1hY19hZGRyZXNzOwotCWhmYTM4NHhfcGRyX21ra19jYWxsbmFtZV90CW1ra19jYWxsbmFtZTsKLQloZmEzODR4X3Bkcl9yZWdkb21haW5fdAkJcmVnZG9tYWluOwotCWhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90CWFsbG93ZWRfY2hhbm5lbDsKLQloZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWxfdAlkZWZhdWx0X2NoYW5uZWw7Ci0JaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdAlwcml2YWN5X29wdGlvbjsKLQloZmEzODR4X3Bkcl90ZW1wdHlwZV90CQl0ZW1wdHlwZTsKLQloZmEzODR4X3Bkcl9yZWZkYWNfc2V0dXBfdAlyZWZkYWNfc2V0dXA7Ci0JaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdAl2Z2RhY19zZXR1cDsKLQloZmEzODR4X3Bkcl9sZXZlbF9jb21wX3NldHVwX3QJbGV2ZWxfY29tcF9zZXR1cDsKLQloZmEzODR4X3Bkcl90cmltZGFjX3NldHVwX3QJdHJpbWRhY19zZXR1cDsKLQloZmEzODR4X3Bkcl9pZnJfc2V0dGluZ190CWlmcl9zZXR0aW5nOwotCWhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nX3QJcmZyX3NldHRpbmc7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90CWhmYTM4NjFfYmFzZWxpbmU7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9zaGFkb3dfdAloZmEzODYxX3NoYWRvdzsKLQloZmEzODR4X3Bkcl9oZmEzODYxX2lmcmZfdAloZmEzODYxX2lmcmY7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwX3QJaGZhMzg2MV9jaGNhbHNwOwotCWhmYTM4NHhfcGRyX2hmYTM4NjFfY2hjYWxpX3QJaGZhMzg2MV9jaGNhbGk7Ci0JaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190CW5pY19jb25maWc7Ci0JaGZhMzg0eF9oZm9fZGVsYXlfdCAgICAgICAgICAgICBoZm9fZGVsYXk7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcF90CWhmYTM4NjFfbWFuZl90ZXN0c3A7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3QJaGZhMzg2MV9tYW5mX3Rlc3RpOwotCWhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdAllbmRfb2ZfcGRhOwotCi0JfSBkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3BkcmVjX3Q7Ci0KKwl1MTYgdHlwZTsKKwloZmEzODR4X3VzYl9yeGZybV90IHJ4ZnJtOworCWhmYTM4NHhfdXNiX3R4ZnJtX3QgdHhmcm07CisJaGZhMzg0eF91c2JfaW5mb2ZybV90IGluZm9mcm07CisJaGZhMzg0eF91c2JfY21kcmVzcF90IGNtZHJlc3A7CisJaGZhMzg0eF91c2Jfd3JpZHJlc3BfdCB3cmlkcmVzcDsKKwloZmEzODR4X3VzYl9ycmlkcmVzcF90IHJyaWRyZXNwOworCWhmYTM4NHhfdXNiX3dtZW1yZXNwX3Qgd21lbXJlc3A7CisJaGZhMzg0eF91c2Jfcm1lbXJlc3BfdCBybWVtcmVzcDsKKwloZmEzODR4X3VzYl9idWZhdmFpbF90IGJ1ZmF2YWlsOworCWhmYTM4NHhfdXNiX2Vycm9yX3QgdXNiZXJyb3I7CisJdTggYm9ndXNwYWRbMzAwMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYmluX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLS0gIE1BQyBzdGF0ZSBzdHJ1Y3R1cmUsIGFyZ3VtZW50IHRvIGFsbCBmdW5jdGlvbnMgLS0KIC0tLSAgQWxzbywgYSBjb2xsZWN0aW9uIG9mIHN1cHBvcnQgdHlwZXMgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfc3RhdHVzcmVzdWx0Ci17Ci0JdTE2CXN0YXR1czsKLQl1MTYJcmVzcDA7Ci0JdTE2CXJlc3AxOwotCXUxNglyZXNwMjsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfc3RhdHVzcmVzdWx0IHsKKwl1MTYgc3RhdHVzOworCXUxNiByZXNwMDsKKwl1MTYgcmVzcDE7CisJdTE2IHJlc3AyOwogfSBoZmEzODR4X2NtZHJlc3VsdF90OwogCiAvKiBVU0IgQ29udHJvbCBFeGNoYW5nZSAoQ1RMWCk6CkBAIC0yMzY1LDIwICs5MDEsMTYgQEAKIC8qIFRoZSBmb2xsb3dpbmcgaGZhMzg0eF8qIHN0cnVjdHVyZXMgYXJlIGFyZ3VtZW50cyB0bwogICogdGhlIHVzZXJjYigpIGZvciB0aGUgZGlmZmVyZW50IENUTFggdHlwZXMuCiAgKi8KLXR5cGVkZWYgaGZhMzg0eF9jbWRyZXN1bHRfdCBoZmEzODR4X3dyaWRyZXN1bHRfdDsKLXR5cGVkZWYgaGZhMzg0eF9jbWRyZXN1bHRfdCBoZmEzODR4X3dtZW1yZXN1bHRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ycmlkcmVzdWx0Ci17Ci0JdTE2CQlyaWQ7Ci0JY29uc3Qgdm9pZAkqcmlkZGF0YTsKLQl1bnNpZ25lZCBpbnQJCXJpZGRhdGFfbGVuOwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ycmlkcmVzdWx0IHsKKwl1MTYgcmlkOworCWNvbnN0IHZvaWQgKnJpZGRhdGE7CisJdW5zaWduZWQgaW50IHJpZGRhdGFfbGVuOwogfSBoZmEzODR4X3JyaWRyZXN1bHRfdDsKIAogZW51bSBjdGx4X3N0YXRlIHsKLQlDVExYX1NUQVJUID0gMCwJLyogU3RhcnQgc3RhdGUsIG5vdCBxdWV1ZWQgKi8KKwlDVExYX1NUQVJUID0gMCwJCS8qIFN0YXJ0IHN0YXRlLCBub3QgcXVldWVkICovCiAKLQlDVExYX0NPTVBMRVRFLAkvKiBDVExYIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKi8KKwlDVExYX0NPTVBMRVRFLAkJLyogQ1RMWCBzdWNjZXNzZnVsbHkgY29tcGxldGVkICovCiAJQ1RMWF9SRVFfRkFJTEVELAkvKiBPVVQgVVJCIGNvbXBsZXRlZCB3LyBlcnJvciAqLwogCiAJQ1RMWF9QRU5ESU5HLAkJLyogUXVldWVkLCBkYXRhIHZhbGlkICovCkBAIC0yMzg2LDExNCArOTE4LDk4IEBACiAJQ1RMWF9SRVFfQ09NUExFVEUsCS8qIE9VVCBVUkIgY29tcGxldGUgKi8KIAlDVExYX1JFU1BfQ09NUExFVEUJLyogSU4gVVJCIHJlY2VpdmVkICovCiB9OwotdHlwZWRlZiBlbnVtIGN0bHhfc3RhdGUgIENUTFhfU1RBVEU7Cit0eXBlZGVmIGVudW0gY3RseF9zdGF0ZSBDVExYX1NUQVRFOwogCiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4Owogc3RydWN0IGhmYTM4NHg7CiAKLXR5cGVkZWYgdm9pZCAoKmN0bHhfY21kY2JfdCkoIHN0cnVjdCBoZmEzODR4KiwgY29uc3Qgc3RydWN0IGhmYTM4NHhfdXNiY3RseCogKTsKK3R5cGVkZWYgdm9pZCAoKmN0bHhfY21kY2JfdCkgKHN0cnVjdCBoZmEzODR4ICosIGNvbnN0IHN0cnVjdCBoZmEzODR4X3VzYmN0bHggKik7CiAKLXR5cGVkZWYgdm9pZCAoKmN0bHhfdXNlcmNiX3QpKAotCXN0cnVjdCBoZmEzODR4CSpodywKLQl2b2lkCQkqY3RseHJlc3VsdCwKLQl2b2lkCQkqdXNlcmNiX2RhdGEpOwordHlwZWRlZiB2b2lkICgqY3RseF91c2VyY2JfdCkgKHN0cnVjdCBoZmEzODR4ICpodywKKwkJCSAgICAgICB2b2lkICpjdGx4cmVzdWx0LCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseAotewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0Jc2l6ZV90CQkJb3V0YnVmc2l6ZTsKLQloZmEzODR4X3VzYm91dF90CW91dGJ1ZjsJCS8qIHBrdCBidWYgZm9yIE9VVCAqLwotCWhmYTM4NHhfdXNiaW5fdAkJaW5idWY7CQkvKiBwa3QgYnVmIGZvciBJTihhIGNvcHkpICovCisJc2l6ZV90IG91dGJ1ZnNpemU7CisJaGZhMzg0eF91c2JvdXRfdCBvdXRidWY7CS8qIHBrdCBidWYgZm9yIE9VVCAqLworCWhmYTM4NHhfdXNiaW5fdCBpbmJ1ZjsJLyogcGt0IGJ1ZiBmb3IgSU4oYSBjb3B5KSAqLwogCi0JQ1RMWF9TVEFURQkJc3RhdGU7CQkvKiBUcmFja3MgcnVubmluZyBzdGF0ZSAqLworCUNUTFhfU1RBVEUgc3RhdGU7CS8qIFRyYWNrcyBydW5uaW5nIHN0YXRlICovCiAKLQlzdHJ1Y3QgY29tcGxldGlvbglkb25lOwotCXZvbGF0aWxlIGludAkJcmVhcGFibGU7CS8qIEZvb2QgZm9yIHRoZSByZWFwZXIgdGFzayAqLworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisJdm9sYXRpbGUgaW50IHJlYXBhYmxlOwkvKiBGb29kIGZvciB0aGUgcmVhcGVyIHRhc2sgKi8KIAotCWN0bHhfY21kY2JfdAkJY21kY2I7CQkvKiBBc3luYyBjb21tYW5kIGNhbGxiYWNrICovCi0JY3RseF91c2VyY2JfdAkJdXNlcmNiOwkJLyogQXN5bmMgdXNlciBjYWxsYmFjaywgKi8KLQl2b2lkCQkJKnVzZXJjYl9kYXRhOwkvKiAgYXQgQ1RMWCBjb21wbGV0aW9uICAqLworCWN0bHhfY21kY2JfdCBjbWRjYjsJLyogQXN5bmMgY29tbWFuZCBjYWxsYmFjayAqLworCWN0bHhfdXNlcmNiX3QgdXNlcmNiOwkvKiBBc3luYyB1c2VyIGNhbGxiYWNrLCAqLworCXZvaWQgKnVzZXJjYl9kYXRhOwkvKiAgYXQgQ1RMWCBjb21wbGV0aW9uICAqLwogCi0JaW50CQkJdmFyaWFudDsJLyogSWRlbnRpZmllcyBjbWQgdmFyaWFudCAqLworCWludCB2YXJpYW50OwkJLyogSWRlbnRpZmllcyBjbWQgdmFyaWFudCAqLwogfSBoZmEzODR4X3VzYmN0bHhfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4cQotewotCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlwZW5kaW5nOwotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOwotCXN0cnVjdCBsaXN0X2hlYWQJY29tcGxldGluZzsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJlYXBhYmxlOwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4cSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBsZXRpbmc7CisJc3RydWN0IGxpc3RfaGVhZCByZWFwYWJsZTsKIH0gaGZhMzg0eF91c2JjdGx4cV90OwogCi10eXBlZGVmIHN0cnVjdCBoZmE0ODR4X21ldGFjbWQKLXsKLQl1MTYJCWNtZDsKK3R5cGVkZWYgc3RydWN0IGhmYTQ4NHhfbWV0YWNtZCB7CisJdTE2IGNtZDsKIAotCXUxNiAgICAgICAgICBwYXJtMDsKLQl1MTYgICAgICAgICAgcGFybTE7Ci0JdTE2ICAgICAgICAgIHBhcm0yOworCXUxNiBwYXJtMDsKKwl1MTYgcGFybTE7CisJdTE2IHBhcm0yOwogCiAJaGZhMzg0eF9jbWRyZXN1bHRfdCByZXN1bHQ7CiB9IGhmYTM4NHhfbWV0YWNtZF90OwogCi0jZGVmaW5lCU1BWF9QUklTTTJfR1JQX0FERFIJMTYKICNkZWZpbmUJTUFYX0dSUF9BRERSCQkzMgotI2RlZmluZSBXTEFOX0NPTU1FTlRfTUFYCTgwICAvKiBNYXguIGxlbmd0aCBvZiB1c2VyIGNvbW1lbnQgc3RyaW5nLiAqLworI2RlZmluZSBXTEFOX0NPTU1FTlRfTUFYCTgwCS8qIE1heC4gbGVuZ3RoIG9mIHVzZXIgY29tbWVudCBzdHJpbmcuICovCiAKLSNkZWZpbmUgTU1fU0FUX1BDRgkJKEJJVDE0KQotI2RlZmluZSBNTV9HQ1NEX1BDRgkJKEJJVDE1KQotI2RlZmluZSBNTV9HQ1NEX1BDRl9FQgkJKEJJVDE0IHwgQklUMTUpCi0KLSNkZWZpbmUgV0xBTl9TVEFURV9TVE9QUEVECTAgICAvKiBOZXR3b3JrIGlzIG5vdCBhY3RpdmUuICovCi0jZGVmaW5lIFdMQU5fU1RBVEVfU1RBUlRFRAkxICAgLyogTmV0d29yayBoYXMgYmVlbiBzdGFydGVkLiAqLwotCi0jZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwICAvKiBNYXguICMgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfTUFYCQk2MCAgLyogTWF4LiAjIG9mIHN0YXRpb25zIGluIGFuIGFjY2VzcyBsaXN0LiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19OT05FCTAgICAvKiBObyBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMCQkxICAgLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyICAgLyogQXV0aGVudGljYXRlIG9ubHkgImFsbG93ZWQiIHN0YXRpb25zLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19ERU5ZCTMgICAvKiBEbyBub3QgYXV0aGVudGljYXRlICJkZW5pZWQiIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FVVEhfTUFYICAgICAgICAgICA2MAkvKiBNYXguICMgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTUFYCQk2MAkvKiBNYXguICMgb2Ygc3RhdGlvbnMgaW4gYW4gYWNjZXNzIGxpc3QuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX05PTkUJMAkvKiBObyBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMCQkxCS8qIEFsbCBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMT1cJMgkvKiBBdXRoZW50aWNhdGUgb25seSAiYWxsb3dlZCIgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX0RFTlkJMwkvKiBEbyBub3QgYXV0aGVudGljYXRlICJkZW5pZWQiIHN0YXRpb25zLiAqLwogCiAvKiBYWFggVGhlc2UgYXJlIGdvaW5nIGF3YXkgQVNBUCAqLwotdHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2F1dGhsaXN0Ci17Ci0JdW5zaWduZWQgaW50CWNudDsKLQl1OAlhZGRyW1dMQU5fQVVUSF9NQVhdW1dMQU5fQUREUl9MRU5dOwotCXU4CWFzc29jW1dMQU5fQVVUSF9NQVhdOwordHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2F1dGhsaXN0IHsKKwl1bnNpZ25lZCBpbnQgY250OworCXU4IGFkZHJbV0xBTl9BVVRIX01BWF1bRVRIX0FMRU5dOworCXU4IGFzc29jW1dMQU5fQVVUSF9NQVhdOwogfSBwcmlzbTJzdGFfYXV0aGxpc3RfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2FjY2Vzc2xpc3QKLXsKLQl1bnNpZ25lZCBpbnQJbW9kaWZ5OwotCXVuc2lnbmVkIGludAljbnQ7Ci0JdTgJYWRkcltXTEFOX0FDQ0VTU19NQVhdW1dMQU5fQUREUl9MRU5dOwotCXVuc2lnbmVkIGludAljbnQxOwotCXU4CWFkZHIxW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07Cit0eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYWNjZXNzbGlzdCB7CisJdW5zaWduZWQgaW50IG1vZGlmeTsKKwl1bnNpZ25lZCBpbnQgY250OworCXU4IGFkZHJbV0xBTl9BQ0NFU1NfTUFYXVtFVEhfQUxFTl07CisJdW5zaWduZWQgaW50IGNudDE7CisJdTggYWRkcjFbV0xBTl9BQ0NFU1NfTUFYXVtFVEhfQUxFTl07CiB9IHByaXNtMnN0YV9hY2Nlc3NsaXN0X3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHgKLXsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHggewogCS8qIFVTQiBzdXBwb3J0IGRhdGEgKi8KLQlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOwotCXN0cnVjdCB1cmIJCXJ4X3VyYjsKLQlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4X3VyYl9za2I7Ci0Jc3RydWN0IHVyYgkJdHhfdXJiOwotCXN0cnVjdCB1cmIJCWN0bHhfdXJiOwotCWhmYTM4NHhfdXNib3V0X3QJdHhidWZmOwotCWhmYTM4NHhfdXNiY3RseHFfdAljdGx4cTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlyZXF0aW1lcjsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlyZXNwdGltZXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKKwlzdHJ1Y3QgdXJiIHJ4X3VyYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfdXJiX3NrYjsKKwlzdHJ1Y3QgdXJiIHR4X3VyYjsKKwlzdHJ1Y3QgdXJiIGN0bHhfdXJiOworCWhmYTM4NHhfdXNib3V0X3QgdHhidWZmOworCWhmYTM4NHhfdXNiY3RseHFfdCBjdGx4cTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZXF0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZXNwdGltZXI7CiAKLQlzdHJ1Y3QgdGltZXJfbGlzdAl0aHJvdHRsZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aHJvdHRsZTsKIAotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyZWFwZXJfYmg7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CWNvbXBsZXRpb25fYmg7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJlYXBlcl9iaDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgY29tcGxldGlvbl9iaDsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdAl1c2Jfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXNiX3dvcms7CiAKLQl1bnNpZ25lZCBsb25nCQl1c2JfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB1c2JfZmxhZ3M7CiAjZGVmaW5lIFRIUk9UVExFX1JYCTAKICNkZWZpbmUgVEhST1RUTEVfVFgJMQogI2RlZmluZSBXT1JLX1JYX0hBTFQJMgpAQCAtMjUwMSwyOTIgKzEwMTcsMTY4IEBACiAjZGVmaW5lIFdPUktfUlhfUkVTVU1FCTQKICNkZWZpbmUgV09SS19UWF9SRVNVTUUJNQogCi0JdW5zaWduZWQgc2hvcnQJCXJlcV90aW1lcl9kb25lOjE7Ci0JdW5zaWduZWQgc2hvcnQJCXJlc3BfdGltZXJfZG9uZToxOworCXVuc2lnbmVkIHNob3J0IHJlcV90aW1lcl9kb25lOjE7CisJdW5zaWduZWQgc2hvcnQgcmVzcF90aW1lcl9kb25lOjE7CiAKLQlpbnQgICAgICAgICAgICAgICAgICAgICBlbmRwX2luOwotCWludCAgICAgICAgICAgICAgICAgICAgIGVuZHBfb3V0OworCWludCBlbmRwX2luOworCWludCBlbmRwX291dDsKIAotCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmX2ZjczsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZl9jaGFubmVsOwotCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmX3RydW5jYXRlOwotCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmaGRyOworCWludCBzbmlmZl9mY3M7CisJaW50IHNuaWZmX2NoYW5uZWw7CisJaW50IHNuaWZmX3RydW5jYXRlOworCWludCBzbmlmZmhkcjsKIAotCXdhaXRfcXVldWVfaGVhZF90IGNtZHE7CSAgICAgICAgLyogd2FpdCBxdWV1ZSBpdHNlbGYgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBjbWRxOwkvKiB3YWl0IHF1ZXVlIGl0c2VsZiAqLwogCiAJLyogQ29udHJvbGxlciBzdGF0ZSAqLwotCXUzMgkJc3RhdGU7Ci0JdTMyCQlpc2FwOwotCXU4CQlwb3J0X2VuYWJsZWRbSEZBMzg0eF9OVU1QT1JUU19NQVhdOworCXUzMiBzdGF0ZTsKKwl1MzIgaXNhcDsKKwl1OCBwb3J0X2VuYWJsZWRbSEZBMzg0eF9OVU1QT1JUU19NQVhdOwogCiAJLyogRG93bmxvYWQgc3VwcG9ydCAqLwotCXVuc2lnbmVkIGludAkJCQlkbHN0YXRlOwotCWhmYTM4NHhfZG93bmxvYWRidWZmZXJfdAlidWZpbmZvOwotCXUxNgkJCQlkbHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IGRsc3RhdGU7CisJaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90IGJ1ZmluZm87CisJdTE2IGRsdGltZW91dDsKIAotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmZsYWc7ICAgIC8qIHRvIHNpZ25hbCBzY2FuIGNvbWxldGUgKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5fYXA7ICAgICAgICAvKiBhcmUgd2Ugam9pbmVkIHRvIGEgc3BlY2lmaWMgYXAgKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5fcmV0cmllczsgICAvKiBudW1iZXIgb2Ygam9pbiByZXRyaWVzIHRpbGwgd2UgZmFpbCAqLwotCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgam9pbnJlcTsgICAgICAgIC8qIGpvaW4gcmVxdWVzdCBzYXZlZCBkYXRhICovCisJaW50IHNjYW5mbGFnOwkJLyogdG8gc2lnbmFsIHNjYW4gY29tbGV0ZSAqLworCWludCBqb2luX2FwOwkJLyogYXJlIHdlIGpvaW5lZCB0byBhIHNwZWNpZmljIGFwICovCisJaW50IGpvaW5fcmV0cmllczsJLyogbnVtYmVyIG9mIGpvaW4gcmV0cmllcyB0aWxsIHdlIGZhaWwgKi8KKwloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCBqb2lucmVxOwkvKiBqb2luIHJlcXVlc3Qgc2F2ZWQgZGF0YSAqLwogCi0Jd2xhbmRldmljZV90ICAgICAgICAgICAgKndsYW5kZXY7CisJd2xhbmRldmljZV90ICp3bGFuZGV2OwogCS8qIFRpbWVyIHRvIGFsbG93IGZvciB0aGUgZGVmZXJyZWQgcHJvY2Vzc2luZyBvZiBsaW5rc3RhdHVzIG1lc3NhZ2VzICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IAlsaW5rX2JoOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2JoOwogCi0gICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNvbW1zcXVhbF9iaDsKLQloZmEzODR4X2NvbW1zcXVhbGl0eV90ICBxdWFsOwotCXN0cnVjdCB0aW1lcl9saXN0CWNvbW1zcXVhbF90aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29tbXNxdWFsX2JoOworCWhmYTM4NHhfY29tbXNxdWFsaXR5X3QgcXVhbDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBjb21tc3F1YWxfdGltZXI7CiAKIAl1MTYgbGlua19zdGF0dXM7CiAJdTE2IGxpbmtfc3RhdHVzX25ldzsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICAgICBhdXRocTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGF1dGhxOwogCiAJLyogQW5kIGhlcmUgd2UgaGF2ZSBzdHVmZiB0aGF0IHVzZWQgdG8gYmUgaW4gcHJpdiAqLwogCiAJLyogU3RhdGUgdmFyaWFibGVzICovCi0JdW5zaWduZWQgaW50CQlwcmVzbmlmZl9wb3J0X3R5cGU7Ci0JdTE2CQlwcmVzbmlmZl93ZXBmbGFnczsKLQl1MzIJCWRvdDExX2Rlc2lyZWRfYnNzX3R5cGU7CisJdW5zaWduZWQgaW50IHByZXNuaWZmX3BvcnRfdHlwZTsKKwl1MTYgcHJlc25pZmZfd2VwZmxhZ3M7CisJdTMyIGRvdDExX2Rlc2lyZWRfYnNzX3R5cGU7CiAKLQlpbnQgICAgICAgICAgICAgZGJtYWRqdXN0OworCWludCBkYm1hZGp1c3Q7CiAKIAkvKiBHcm91cCBBZGRyZXNzZXMgLSByaWdodCBub3csIHRoZXJlIGFyZSB1cCB0byBhIHRvdGFsCi0Jb2YgTUFYX0dSUF9BRERSIGdyb3VwIGFkZHJlc3NlcyAqLwotCXU4CQlkb3QxMV9ncnBfYWRkcltNQVhfR1JQX0FERFJdW1dMQU5fQUREUl9MRU5dOwotCXVuc2lnbmVkIGludAkJZG90MTFfZ3JwY250OworCSAgIG9mIE1BWF9HUlBfQUREUiBncm91cCBhZGRyZXNzZXMgKi8KKwl1OCBkb3QxMV9ncnBfYWRkcltNQVhfR1JQX0FERFJdW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBpbnQgZG90MTFfZ3JwY250OwogCiAJLyogQ29tcG9uZW50IElkZW50aXRpZXMgKi8KLQloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X25pYzsKLQloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X3ByaV9mdzsKLQloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X3N0YV9mdzsKLQloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X2FwX2Z3OwotCXUxNgkJCW1tX21vZHM7CisJaGZhMzg0eF9jb21waWRlbnRfdCBpZGVudF9uaWM7CisJaGZhMzg0eF9jb21waWRlbnRfdCBpZGVudF9wcmlfZnc7CisJaGZhMzg0eF9jb21waWRlbnRfdCBpZGVudF9zdGFfZnc7CisJaGZhMzg0eF9jb21waWRlbnRfdCBpZGVudF9hcF9mdzsKKwl1MTYgbW1fbW9kczsKIAogCS8qIFN1cHBsaWVyIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfbWZpOwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX2NmaTsKLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9wcmk7Ci0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfc3RhOwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX2FwOworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfc3VwX21maTsKKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX3N1cF9jZmk7CisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9zdXBfcHJpOworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfc3VwX3N0YTsKKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX3N1cF9hcDsKIAogCS8qIEFjdG9yIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfcHJpX2NmaTsgLyogcHJpIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9jZmk7IC8qIHN0YSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9zdGFfbWZpOyAvKiBzdGEgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X2FwX2NmaTsgIC8qIGFwIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X2FwX21maTsgIC8qIGFwIGYvdyB0byBtb2RlbSBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9wcmlfY2ZpOwkvKiBwcmkgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3Rfc3RhX2NmaTsJLyogc3RhIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3N0YV9tZmk7CS8qIHN0YSBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3RfYXBfY2ZpOwkvKiBhcCBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9hcF9tZmk7CS8qIGFwIGYvdyB0byBtb2RlbSBpbnRlcmZhY2UgKi8KIAotCXUzMgkJCXBzdXNlcmNvdW50OyAgLyogUG93ZXIgc2F2ZSB1c2VyIGNvdW50LiAqLwotCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90CXRhbGxpZXM7ICAgICAgLyogQ29tbXVuaWNhdGlvbiB0YWxsaWVzLiAqLwotCXU4CQkJY29tbWVudFtXTEFOX0NPTU1FTlRfTUFYKzFdOyAvKiBVc2VyIGNvbW1lbnQgKi8KKwl1MzIgcHN1c2VyY291bnQ7CS8qIFBvd2VyIHNhdmUgdXNlciBjb3VudC4gKi8KKwloZmEzODR4X0NvbW1UYWxsaWVzMzJfdCB0YWxsaWVzOwkvKiBDb21tdW5pY2F0aW9uIHRhbGxpZXMuICovCisJdTggY29tbWVudFtXTEFOX0NPTU1FTlRfTUFYICsgMV07CS8qIFVzZXIgY29tbWVudCAqLwogCiAJLyogQ2hhbm5lbCBJbmZvIHJlcXVlc3QgcmVzdWx0cyAoQVAgb25seSkgKi8KIAlzdHJ1Y3QgewotCQlhdG9taWNfdAkJZG9uZTsKLQkJdTgJCQljb3VudDsKLQkJaGZhMzg0eF9DaEluZm9SZXN1bHRfdAlyZXN1bHRzOworCQlhdG9taWNfdCBkb25lOworCQl1OCBjb3VudDsKKwkJaGZhMzg0eF9DaEluZm9SZXN1bHRfdCByZXN1bHRzOwogCX0gY2hhbm5lbF9pbmZvOwogCi0JaGZhMzg0eF9JbmZGcmFtZV90ICAgICAgKnNjYW5yZXN1bHRzOworCWhmYTM4NHhfSW5mRnJhbWVfdCAqc2NhbnJlc3VsdHM7CiAKLQotICAgICAgICBwcmlzbTJzdGFfYXV0aGxpc3RfdAlhdXRobGlzdDsgICAgIC8qIEF1dGhlbnRpY2F0ZWQgc3RhdGlvbiBsaXN0LiAqLwotCXVuc2lnbmVkIGludAkJCWFjY2Vzc21vZGU7ICAgLyogQWNjZXNzIG1vZGUuICovCi0gICAgICAgIHByaXNtMnN0YV9hY2Nlc3NsaXN0X3QJYWxsb3c7ICAgICAgICAvKiBBbGxvd2VkIHN0YXRpb24gbGlzdC4gKi8KLSAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlkZW55OyAgICAgICAgIC8qIERlbmllZCBzdGF0aW9uIGxpc3QuICovCisJcHJpc20yc3RhX2F1dGhsaXN0X3QgYXV0aGxpc3Q7CS8qIEF1dGhlbnRpY2F0ZWQgc3RhdGlvbiBsaXN0LiAqLworCXVuc2lnbmVkIGludCBhY2Nlc3Ntb2RlOwkvKiBBY2Nlc3MgbW9kZS4gKi8KKwlwcmlzbTJzdGFfYWNjZXNzbGlzdF90IGFsbG93OwkvKiBBbGxvd2VkIHN0YXRpb24gbGlzdC4gKi8KKwlwcmlzbTJzdGFfYWNjZXNzbGlzdF90IGRlbnk7CS8qIERlbmllZCBzdGF0aW9uIGxpc3QuICovCiAKIH0gaGZhMzg0eF90OwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gRnVuY3Rpb24gRGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi12b2lkCi1oZmEzODR4X2NyZWF0ZSgKLQloZmEzODR4X3QgKmh3LAotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IpOwotCit2b2lkIGhmYTM4NHhfY3JlYXRlKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpOwogdm9pZCBoZmEzODR4X2Rlc3Ryb3koaGZhMzg0eF90ICpodyk7CiAKIGludAotaGZhMzg0eF9jb3JlcmVzZXQoIGhmYTM4NHhfdCAqaHcsIGludCBob2xkdGltZSwgaW50IHNldHRsZXRpbWUsIGludCBnZW5lc2lzKTsKLWludAotaGZhMzg0eF9kcnZyX2NoaW5mb3Jlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2RydnJfY29tbXRhbGxpZXMoIGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOwotaW50Ci1oZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCogYnVmLCB1MzIgbGVuKTsKLWludAotaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfaGFuZG92ZXIoIGhmYTM4NHhfdCAqaHcsIHU4ICphZGRyKTsKLWludAotaGZhMzg0eF9kcnZyX2hvc3RzY2FucmVzdWx0cyggaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCB1MzIgYWRkcmVzcywgdTMyICpyZXN1bHQpOwotaW50Ci1oZmEzODR4X2RydnJfbW1pX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBhZGRyZXNzLCB1MzIgZGF0YSk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgdTMyIGV4ZWFkZHIpOwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCogYnVmLCB1MzIgbGVuKTsKLWludAotaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKLWludAotaGZhMzg0eF9kcnZyX3NjYW5yZXN1bHRzKCBoZmEzODR4X3QgKmh3KTsKK2hmYTM4NHhfY29yZXJlc2V0KGhmYTM4NHhfdCAqaHcsIGludCBob2xkdGltZSwgaW50IHNldHRsZXRpbWUsIGludCBnZW5lc2lzKTsKK2ludCBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCAqYnVmLCB1MzIgbGVuKTsKK2ludCBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7CitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MzIgZXhlYWRkcik7CitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCAqYnVmLCB1MzIgbGVuKTsKK2ludCBoZmEzODR4X2RydnJfcmVhZHBkYShoZmEzODR4X3QgKmh3LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKIAotaW50Ci1oZmEzODR4X2RydnJfc2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqdmFsKQorc3RhdGljIGlubGluZSBpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKnZhbCkKIHsKLQlpbnQJCXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZih1MTYpKTsKLQlpZiAoIHJlc3VsdCA9PSAwICkgewotCQkqKCh1MTYqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMTYoKigodTE2Kil2YWwpKTsKLQl9CisJaWYgKHJlc3VsdCA9PSAwKQorCQkqKCh1MTYgKikgdmFsKSA9IGxlMTZfdG9fY3B1KCooKHUxNiAqKSB2YWwpKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kcnZyX2dldGNvbmZpZzMyKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKnZhbCkKK3N0YXRpYyBpbmxpbmUgaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MTYgdmFsKQogewotCWludAkJcmVzdWx0ID0gMDsKLQotCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIHJpZCwgdmFsLCBzaXplb2YodTMyKSk7Ci0JaWYgKCByZXN1bHQgPT0gMCApIHsKLQkJKigodTMyKil2YWwpID0gaGZhMzg0eDJob3N0XzMyKCooKHUzMiopdmFsKSk7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MTYgdmFsKQotewotCXUxNiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8xNih2YWwpOwotCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2RydnJfc2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdTMyIHZhbCkKLXsKLQl1MzIgdmFsdWUgPSBob3N0MmhmYTM4NHhfMzIodmFsKTsKKwl1MTYgdmFsdWUgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiB9CiAKIGludAotaGZhMzg0eF9kcnZyX2dldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgICAgICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAgICAgICAgcmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICp1c2VyY2JfZGF0YSk7CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisJCQkgICAgIHUxNiByaWQsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIGludAogaGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHJpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKTsKKwkJCSAgICAgdTE2IHJpZCwKKwkJCSAgICAgdm9pZCAqYnVmLAorCQkJICAgICB1MTYgbGVuLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpOwogCiBzdGF0aWMgaW5saW5lIGludAogaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2X2FzeW5jKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUxNiB2YWwpCiB7Ci0JdTE2IHZhbHVlID0gaG9zdDJoZmEzODR4XzE2KHZhbCk7CisJdTE2IHZhbHVlID0gY3B1X3RvX2xlMTYodmFsKTsKIAlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSksCi0JCQkJCSAgICBOVUxMICwgTlVMTCk7CisJCQkJCSAgICBOVUxMLCBOVUxMKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWczMl9hc3luYyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MzIgdmFsKQotewotCXUzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOwotCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKLQkJCQkJICAgIE5VTEwgLCBOVUxMKTsKLX0KK2ludCBoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKK3ZvaWQgaGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAKLQoraW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKK2ludCBoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKK2ludCBoZmEzODR4X2NtZF9hbGxvY2F0ZShoZmEzODR4X3QgKmh3LCB1MTYgbGVuKTsKK2ludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIHUxNiBlbmFibGUpOwogaW50Ci1oZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwotdm9pZAotaGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci0KLWludAotaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKLWludAotaGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7Ci1pbnQKLWhmYTM4NHhfY21kX2RpYWdub3NlKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2NtZF9hbGxvY2F0ZShoZmEzODR4X3QgKmh3LCB1MTYgbGVuKTsKLWludAotaGZhMzg0eF9jbWRfdHJhbnNtaXQoaGZhMzg0eF90ICpodywgdTE2IHJlY2xhaW0sIHUxNiBxb3MsIHUxNiBmaWQpOwotaW50Ci1oZmEzODR4X2NtZF9jbGVhcnBlcnNpc3QoaGZhMzg0eF90ICpodywgdTE2IGZpZCk7Ci1pbnQKLWhmYTM4NHhfY21kX2FjY2VzcyhoZmEzODR4X3QgKmh3LCB1MTYgd3JpdGUsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7Ci1pbnQKLWhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgdTE2IGVuYWJsZSk7Ci1pbnQKLWhmYTM4NHhfY21kX2Rvd25sb2FkKAotCWhmYTM4NHhfdCAqaHcsCi0JdTE2IG1vZGUsCi0JdTE2IGxvd2FkZHIsCi0JdTE2IGhpZ2hhZGRyLAotCXUxNiBjb2RlbGVuKTsKLWludAotaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShoZmEzODR4X3QgKmh3LCBpbnQgZm9yY2UpOwotaW50Ci1oZmEzODR4X2NtZF9hdXhfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9jb3B5X2Zyb21fYmFwKAotCWhmYTM4NHhfdCAqaHcsCi0JdTE2CWJhcCwKLQl1MTYJaWQsCi0JdTE2CW9mZnNldCwKLQl2b2lkCSpidWYsCi0JdW5zaWduZWQgaW50CWxlbik7Ci1pbnQKLWhmYTM4NHhfY29weV90b19iYXAoCi0JaGZhMzg0eF90ICpodywKLQl1MTYJYmFwLAotCXUxNglpZCwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmJ1ZiwKLQl1bnNpZ25lZCBpbnQJbGVuKTsKLXZvaWQKLWhmYTM4NHhfY29weV9mcm9tX2F1eCgKLQloZmEzODR4X3QgKmh3LAotCXUzMgljYXJkYWRkciwKLQl1MzIJYXV4Y3RsLAotCXZvaWQJKmJ1ZiwKLQl1bnNpZ25lZCBpbnQJbGVuKTsKLXZvaWQKLWhmYTM4NHhfY29weV90b19hdXgoCi0JaGZhMzg0eF90ICpodywKLQl1MzIJY2FyZGFkZHIsCi0JdTMyCWF1eGN0bCwKLQl2b2lkCSpidWYsCi0JdW5zaWduZWQgaW50CWxlbik7CitoZmEzODR4X2NtZF9kb3dubG9hZChoZmEzODR4X3QgKmh3LAorCQkgICAgIHUxNiBtb2RlLCB1MTYgbG93YWRkciwgdTE2IGhpZ2hhZGRyLCB1MTYgY29kZWxlbik7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKLSNlbmRpZiAgLyogX0hGQTM4NHhfSCAqLworI2VuZGlmIC8qIF9IRkEzODR4X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCmluZGV4IDhhNzViNTAuLjg4ODE5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpAQCAtMTEwLDEwICsxMTAsNiBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMzAsOCArMTI2LDcgQEAKICNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgogCiAjZGVmaW5lIFNVQk1JVF9VUkIodSxmKSAgdXNiX3N1Ym1pdF91cmIodSxmKQogCkBAIC0xNTAsNjkgKzE0NSw0MyBAQAogI2luY2x1ZGUgImhmYTM4NHguaCIKICNpbmNsdWRlICJwcmlzbTJtZ210LmgiCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBDb25zdGFudHMgKi8KLQotZW51bSBjbWRfbW9kZQotewotICBET1dBSVQgPSAwLAotICBET0FTWU5DCitlbnVtIGNtZF9tb2RlIHsKKwlET1dBSVQgPSAwLAorCURPQVNZTkMKIH07CiB0eXBlZGVmIGVudW0gY21kX21vZGUgQ01EX01PREU7CiAKICNkZWZpbmUgVEhST1RUTEVfSklGRklFUwkoSFovOCkKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIE1hY3JvcyAqLworI2RlZmluZSBVUkJfQVNZTkNfVU5MSU5LIDAKKyNkZWZpbmUgVVNCX1FVRVVFX0JVTEsgMAogCiAjZGVmaW5lIFJPVU5EVVA2NChhKSAoKChhKSs2MykmfjYzKQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLwotZXh0ZXJuIGludCBwcmlzbTJfZGVidWc7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQogI2lmZGVmIERFQlVHX1VTQgotc3RhdGljIHZvaWQKLWRicHJpbnRfdXJiKHN0cnVjdCB1cmIqIHVyYik7CitzdGF0aWMgdm9pZCBkYnByaW50X3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCi1oZmEzODR4X2ludF9yeG1vbml0b3IoCi0Jd2xhbmRldmljZV90ICp3bGFuZGV2LAotCWhmYTM4NHhfdXNiX3J4ZnJtX3QgKnJ4ZnJtKTsKK2hmYTM4NHhfaW50X3J4bW9uaXRvcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiX3J4ZnJtX3QgKnJ4ZnJtKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOwogCi1zdGF0aWMgaW50Ci1zdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IGZsYWdzKTsKK3N0YXRpYyBpbnQgc3VibWl0X3J4X3VyYihoZmEzODR4X3QgKmh3LCBnZnBfdCBmbGFncyk7CiAKLXN0YXRpYyBpbnQKLXN1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBmbGFncyk7CitzdGF0aWMgaW50IHN1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBmbGFncyk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIENhbGxiYWNrcyAqLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZAotaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogCiBzdGF0aWMgdm9pZAogaGZhMzg0eF91c2Jpbl90eGNvbXBsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2Jpbik7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmluX3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmluX2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOwogCiBzdGF0aWMgdm9pZAogaGZhMzg0eF91c2JvdXRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYm91dF90ICp1c2JvdXQpOwpAQCAtMjIzLDEyMyArMTkyLDk0IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgcHJpc20yIHVzYiBjb21tYW5kIHF1ZXVlICovCiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhxX3J1bihoZmEzODR4X3QgKmh3KTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseHFfcnVuKGhmYTM4NHhfdCAqaHcpOwogCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOwogCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpOwogCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOwogCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKTsKIAotc3RhdGljIGludAotaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CitzdGF0aWMgaW50IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOwogCi1zdGF0aWMgdm9pZAotdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CitzdGF0aWMgdm9pZCB1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAotc3RydWN0IHVzYmN0bHhfY29tcGxldG9yCi17Ci0JaW50ICgqY29tcGxldGUpKHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciopOworc3RydWN0IHVzYmN0bHhfY29tcGxldG9yIHsKKwlpbnQgKCpjb21wbGV0ZSkgKHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciAqKTsKIH07CiB0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciB1c2JjdGx4X2NvbXBsZXRvcl90OwogCiBzdGF0aWMgaW50CiBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICpjb21wbGV0b3IpOworCQkJICAgICAgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgsCisJCQkgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICpjb21wbGV0b3IpOwogCiBzdGF0aWMgaW50CiB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CitzdGF0aWMgdm9pZCBoZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOworc3RhdGljIHZvaWQgaGZhMzg0eF9jYl9ycmlkKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAogc3RhdGljIGludAogdXNiY3RseF9nZXRfc3RhdHVzKGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKLSAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpOworCQkgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpOwogCiBzdGF0aWMgdm9pZAogdXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9ycmlkcmVzdWx0X3QgKnJlc3VsdCk7CisJCSAgICAgICBoZmEzODR4X3JyaWRyZXN1bHRfdCAqcmVzdWx0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogTG93IGxldmVsIHJlcS9yZXNwIENUTFggZm9ybWF0dGVycyBhbmQgc3VibWl0dGVycyAqLwogc3RhdGljIGludAotaGZhMzg0eF9kb2NtZCgKLQloZmEzODR4X3QgKmh3LAotCUNNRF9NT0RFIG1vZGUsCi0JaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpOworaGZhMzg0eF9kb2NtZChoZmEzODR4X3QgKmh3LAorCSAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwkgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9ycmlkKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcmlkLAotCXZvaWQJKnJpZGRhdGEsCi0JdW5zaWduZWQgaW50CXJpZGRhdGFsZW4sCi0JY3RseF9jbWRjYl90IGNtZGNiLAotCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKTsKK2hmYTM4NHhfZG9ycmlkKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiByaWQsCisJICAgICAgIHZvaWQgKnJpZGRhdGEsCisJICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG93cmlkKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcmlkLAotCXZvaWQJKnJpZGRhdGEsCi0JdW5zaWduZWQgaW50CXJpZGRhdGFsZW4sCi0JY3RseF9jbWRjYl90IGNtZGNiLAotCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKTsKK2hmYTM4NHhfZG93cmlkKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiByaWQsCisJICAgICAgIHZvaWQgKnJpZGRhdGEsCisJICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9ybWVtKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcGFnZSwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmRhdGEsCi0JdW5zaWduZWQgaW50CWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpOworaGZhMzg0eF9kb3JtZW0oaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHBhZ2UsCisJICAgICAgIHUxNiBvZmZzZXQsCisJICAgICAgIHZvaWQgKmRhdGEsCisJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3dtZW0oCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglwYWdlLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqZGF0YSwKLQl1bnNpZ25lZCBpbnQJbGVuLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSk7CitoZmEzODR4X2Rvd21lbShoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcGFnZSwKKwkgICAgICAgdTE2IG9mZnNldCwKKwkgICAgICAgdm9pZCAqZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpOwogCi1zdGF0aWMgaW50Ci1oZmEzODR4X2lzZ29vZF9wZHJjb2RlKHUxNiBwZHJjb2RlKTsKK3N0YXRpYyBpbnQgaGZhMzg0eF9pc2dvb2RfcGRyY29kZSh1MTYgcGRyY29kZSk7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLwotc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBjdGx4c3RyKENUTFhfU1RBVEUgcykKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY3RseHN0cihDVExYX1NUQVRFIHMpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIqIGN0bHhfc3RyW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmN0bHhfc3RyW10gPSB7CiAJCSJJbml0aWFsIHN0YXRlIiwKIAkJIkNvbXBsZXRlIiwKIAkJIlJlcXVlc3QgZmFpbGVkIiwKQEAgLTM1MiwzNiArMjkyLDM2IEBACiAJcmV0dXJuIGN0bHhfc3RyW3NdOwogfTsKIAotCi1zdGF0aWMgaW5saW5lIGhmYTM4NHhfdXNiY3RseF90KgotZ2V0X2FjdGl2ZV9jdGx4KGhmYTM4NHhfdCAqaHcpCitzdGF0aWMgaW5saW5lIGhmYTM4NHhfdXNiY3RseF90ICpnZXRfYWN0aXZlX2N0bHgoaGZhMzg0eF90ICpodykKIHsKIAlyZXR1cm4gbGlzdF9lbnRyeShody0+Y3RseHEuYWN0aXZlLm5leHQsIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKIH0KIAotCiAjaWZkZWYgREVCVUdfVVNCCi12b2lkCi1kYnByaW50X3VyYihzdHJ1Y3QgdXJiKiB1cmIpCit2b2lkIGRicHJpbnRfdXJiKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnBpcGU9MHglMDh4XG4iLCB1cmItPnBpcGUpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c3RhdHVzPTB4JTA4eFxuIiwgdXJiLT5zdGF0dXMpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfZmxhZ3M9MHglMDh4XG4iLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnRyYW5zZmVyX2J1ZmZlcj0weCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpdXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5hY3R1YWxfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmJhbmR3aWR0aD0weCUwOHhcbiIsIHVyYi0+YmFuZHdpZHRoKTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnNldHVwX3BhY2tldChjdGwpPTB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCl1cmItPnNldHVwX3BhY2tldCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGFydF9mcmFtZShpc28vaXJxKT0weCUwOHhcbiIsIHVyYi0+c3RhcnRfZnJhbWUpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+aW50ZXJ2YWwoaXJxKT0weCUwOHhcbiIsIHVyYi0+aW50ZXJ2YWwpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+ZXJyb3JfY291bnQoaXNvKT0weCUwOHhcbiIsIHVyYi0+ZXJyb3JfY291bnQpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dGltZW91dD0weCUwOHhcbiIsIHVyYi0+dGltZW91dCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb250ZXh0PTB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCl1cmItPmNvbnRleHQpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+Y29tcGxldGU9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+Y29tcGxldGUpOworCXByX2RlYnVnKCJ1cmItPnBpcGU9MHglMDh4XG4iLCB1cmItPnBpcGUpOworCXByX2RlYnVnKCJ1cmItPnN0YXR1cz0weCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKKwlwcl9kZWJ1ZygidXJiLT50cmFuc2Zlcl9mbGFncz0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCXByX2RlYnVnKCJ1cmItPnRyYW5zZmVyX2J1ZmZlcj0weCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXByX2RlYnVnKCJ1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9MHglMDh4XG4iLAorCSAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCXByX2RlYnVnKCJ1cmItPmFjdHVhbF9sZW5ndGg9MHglMDh4XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCXByX2RlYnVnKCJ1cmItPmJhbmR3aWR0aD0weCUwOHhcbiIsIHVyYi0+YmFuZHdpZHRoKTsKKwlwcl9kZWJ1ZygidXJiLT5zZXR1cF9wYWNrZXQoY3RsKT0weCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpdXJiLT5zZXR1cF9wYWNrZXQpOworCXByX2RlYnVnKCJ1cmItPnN0YXJ0X2ZyYW1lKGlzby9pcnEpPTB4JTA4eFxuIiwKKwkgICAgICAgdXJiLT5zdGFydF9mcmFtZSk7CisJcHJfZGVidWcoInVyYi0+aW50ZXJ2YWwoaXJxKT0weCUwOHhcbiIsIHVyYi0+aW50ZXJ2YWwpOworCXByX2RlYnVnKCJ1cmItPmVycm9yX2NvdW50KGlzbyk9MHglMDh4XG4iLCB1cmItPmVycm9yX2NvdW50KTsKKwlwcl9kZWJ1ZygidXJiLT50aW1lb3V0PTB4JTA4eFxuIiwgdXJiLT50aW1lb3V0KTsKKwlwcl9kZWJ1ZygidXJiLT5jb250ZXh0PTB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCl1cmItPmNvbnRleHQpOworCXByX2RlYnVnKCJ1cmItPmNvbXBsZXRlPTB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCl1cmItPmNvbXBsZXRlKTsKIH0KICNlbmRpZgogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBzdWJtaXRfcnhfdXJiCiAqCkBAIC0zOTgsMTQgKzMzOCwxMSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCUFueQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci1zdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IG1lbWZsYWdzKQorc3RhdGljIGludCBzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IG1lbWZsYWdzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHJlc3VsdDsKIAotCURCRkVOVEVSOwotCiAJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoaGZhMzg0eF91c2Jpbl90KSk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CkBAIC00MTQsMjEgKzM1MSwyMiBAQAogCiAJLyogUG9zdCB0aGUgSU4gdXJiICovCiAJdXNiX2ZpbGxfYnVsa191cmIoJmh3LT5yeF91cmIsIGh3LT51c2IsCi0JICAgICAgICAgICAgICBody0+ZW5kcF9pbiwKLQkgICAgICAgICAgICAgIHNrYi0+ZGF0YSwgc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCksCi0JICAgICAgICAgICAgICBoZmEzODR4X3VzYmluX2NhbGxiYWNrLCBody0+d2xhbmRldik7CisJCQkgIGh3LT5lbmRwX2luLAorCQkJICBza2ItPmRhdGEsIHNpemVvZihoZmEzODR4X3VzYmluX3QpLAorCQkJICBoZmEzODR4X3VzYmluX2NhbGxiYWNrLCBody0+d2xhbmRldik7CiAKIAlody0+cnhfdXJiX3NrYiA9IHNrYjsKIAogCXJlc3VsdCA9IC1FTk9MSU5LOwotCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYgIXRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmICF0ZXN0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgewogCQlyZXN1bHQgPSBTVUJNSVRfVVJCKCZody0+cnhfdXJiLCBtZW1mbGFncyk7CiAKIAkJLyogQ2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBSWCBwaXBlICovCiAJCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyByeCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgICAgICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOwotCQkJaWYgKCAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKSApCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkKIAkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCQl9CiAJfQpAQCAtNDM5LDkgKzM3Nyw3IEBACiAJCWh3LT5yeF91cmJfc2tiID0gTlVMTDsKIAl9CiAKLSBkb25lOgotCi0JREJGRVhJVDsKK2RvbmU6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDYzLDI0ICszOTksMjMgQEAKICogQ2FsbCBjb250ZXh0OgogKglBbnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IG1lbWZsYWdzKQorc3RhdGljIGludCBzdWJtaXRfdHhfdXJiKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1cmIgKnR4X3VyYiwgZ2ZwX3QgbWVtZmxhZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CiAJaW50IHJlc3VsdDsKIAotCURCRkVOVEVSOwotCiAJcmVzdWx0ID0gLUVOT0xJTks7Ci0JaWYgKCBuZXRpZl9ydW5uaW5nKG5ldGRldikgKSB7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCi0JCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYgIXRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgeworCQlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQKKwkJICAgICYmICF0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgewogCQkJcmVzdWx0ID0gU1VCTUlUX1VSQih0eF91cmIsIG1lbWZsYWdzKTsKIAogCQkJLyogVGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFRYIHBpcGUgKi8KIAkJCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7Ci0JCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAotCQkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgICAgIG5ldGRldi0+bmFtZSk7CiAJCQkJc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKIAkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgewpAQCAtNDg5LDggKzQyNCw2IEBACiAJCX0KIAl9CiAKLQlEQkZFWElUOwotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTEwLDI3ICs0NDMsMjIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzIChieSBkZXNpZ24pCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7CiAJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgdXNiX3dvcmspOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBody0+d2xhbmRldi0+bmV0ZGV2OwogCi0JREJGRU5URVI7Ci0KIAkvKiBEb24ndCBib3RoZXIgdHJ5aW5nIHRvIHJlc2V0IGFueXRoaW5nIGlmIHRoZSBwbHVnCiAJICogaGFzIGJlZW4gcHVsbGVkIC4uLgogCSAqLwotCWlmICggaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKLQkJREJGRVhJVDsKKwlpZiAoaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKIAkJcmV0dXJuOwotCX0KIAogCS8qIFJlY2VwdGlvbiBoYXMgc3RvcHBlZDogdHJ5IHRvIHJlc2V0IHRoZSBpbnB1dCBwaXBlICovCiAJaWYgKHRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCWludCByZXQ7CiAKLQkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsgIC8qIENhbm5vdCBiZSBob2xkaW5nIHNwaW5sb2NrISAqLworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOwkvKiBDYW5ub3QgYmUgaG9sZGluZyBzcGlubG9jayEgKi8KIAogCQlyZXQgPSB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9pbik7CiAJCWlmIChyZXQgIT0gMCkgewpAQCAtNTM5LDE0ICs0NjcsMTQgQEAKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyByeCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKLQkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQkJY2xlYXJfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOwogCQkJc2V0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpOwogCQl9CiAJfQogCiAJLyogUmVzdW1lIHJlY2VpdmluZyBkYXRhIGJhY2sgZnJvbSB0aGUgZGV2aWNlLiAqLwotCWlmICggdGVzdF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSApIHsKKwlpZiAodGVzdF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkgewogCQlpbnQgcmV0OwogCiAJCXJldCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9LRVJORUwpOwpAQCAtNTcwLDcgKzQ5OCw3IEBACiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lLCByZXQpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdHggcGlwZSByZXNldCBjb21wbGV0ZS5cbiIsCi0JCQkgICAgICAgICAgICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKIAkJCWNsZWFyX2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKIAkJCXNldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKIApAQCAtNTgzLDE0ICs1MTEsMTAgQEAKIAl9CiAKIAkvKiBSZXN1bWUgdHJhbnNtaXR0aW5nLiAqLwotCWlmICggdGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykgKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQogCQluZXRpZl93YWtlX3F1ZXVlKGh3LT53bGFuZGV2LT5uZXRkZXYpOwotCX0KLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY3JlYXRlCiAqCkBAIC02MTIsMTEgKzUzNiw4IEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1oZmEzODR4X2NyZWF0ZSggaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKK3ZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKIHsKLQlEQkZFTlRFUjsKLQogCW1lbXNldChodywgMCwgc2l6ZW9mKGhmYTM4NHhfdCkpOwogCWh3LT51c2IgPSB1c2I7CiAKQEAgLTYzOCwxMSArNTU5LDkgQEAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZody0+YXV0aHEpOwogCiAJdGFza2xldF9pbml0KCZody0+cmVhcGVyX2JoLAotCSAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2ssCi0JICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWh3KTsKKwkJICAgICBoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2ssICh1bnNpZ25lZCBsb25nKWh3KTsKIAl0YXNrbGV0X2luaXQoJmh3LT5jb21wbGV0aW9uX2JoLAotCSAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrLAotCSAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylodyk7CisJCSAgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzaywgKHVuc2lnbmVkIGxvbmcpaHcpOwogCUlOSVRfV09SSygmaHctPmxpbmtfYmgsIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKTsKIAlJTklUX1dPUksoJmh3LT51c2Jfd29yaywgaGZhMzg0eF91c2JfZGVmZXIpOwogCkBAIC02NjUsMTUgKzU4NCwxMiBAQAogCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CiAJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOwogCi0gICAgICAgIElOSVRfV09SSygmaHctPmNvbW1zcXVhbF9iaCwgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcik7CisJSU5JVF9XT1JLKCZody0+Y29tbXNxdWFsX2JoLCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKTsKIAlpbml0X3RpbWVyKCZody0+Y29tbXNxdWFsX3RpbWVyKTsKLQlody0+Y29tbXNxdWFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaHc7CisJaHctPmNvbW1zcXVhbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CiAJaHctPmNvbW1zcXVhbF90aW1lci5mdW5jdGlvbiA9IHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXI7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2Rlc3Ryb3kKICoKQEAgLTY5NiwxNiArNjEyLDEyIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1oZmEzODR4X2Rlc3Ryb3koIGhmYTM4NHhfdCAqaHcpCit2b2lkIGhmYTM4NHhfZGVzdHJveShoZmEzODR4X3QgKmh3KQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlEQkZFTlRFUjsKLQotCWlmICggaHctPnN0YXRlID09IEhGQTM4NHhfU1RBVEVfUlVOTklORyApIHsKKwlpZiAoaHctPnN0YXRlID09IEhGQTM4NHhfU1RBVEVfUlVOTklORykKIAkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOwotCX0KIAlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1BSRUlOSVQ7CiAKIAlpZiAoaHctPnNjYW5yZXN1bHRzKSB7CkBAIC03MTQsMjMgKzYyNiwxNiBAQAogCX0KIAogCS8qIE5vdyB0byBjbGVhbiBvdXQgdGhlIGF1dGggcXVldWUgKi8KLSAgICAgICAgd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJmh3LT5hdXRocSkpICkgewotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKLSAgICAgICAgfQotCi0JREJGRVhJVDsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSkKKwkJZGV2X2tmcmVlX3NrYihza2IpOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaGZhMzg0eF91c2JjdGx4X3QqIHVzYmN0bHhfYWxsb2Modm9pZCkKK3N0YXRpYyBoZmEzODR4X3VzYmN0bHhfdCAqdXNiY3RseF9hbGxvYyh2b2lkKQogewogCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OwogCiAJY3RseCA9IGttYWxsb2Moc2l6ZW9mKCpjdGx4KSwgaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7Ci0JaWYgKGN0bHggIT0gTlVMTCkKLQl7CisJaWYgKGN0bHggIT0gTlVMTCkgewogCQltZW1zZXQoY3RseCwgMCwgc2l6ZW9mKCpjdGx4KSk7CiAJCWluaXRfY29tcGxldGlvbigmY3RseC0+ZG9uZSk7CiAJfQpAQCAtNzM4LDcwICs2NDMsNTggQEAKIAlyZXR1cm4gY3RseDsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKIHVzYmN0bHhfZ2V0X3N0YXR1cyhjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCi0gICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KQorCQkgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCiB7Ci0JREJGRU5URVI7CisJcmVzdWx0LT5zdGF0dXMgPSBsZTE2X3RvX2NwdShjbWRyZXNwLT5zdGF0dXMpOworCXJlc3VsdC0+cmVzcDAgPSBsZTE2X3RvX2NwdShjbWRyZXNwLT5yZXNwMCk7CisJcmVzdWx0LT5yZXNwMSA9IGxlMTZfdG9fY3B1KGNtZHJlc3AtPnJlc3AxKTsKKwlyZXN1bHQtPnJlc3AyID0gbGUxNl90b19jcHUoY21kcmVzcC0+cmVzcDIpOwogCi0JcmVzdWx0LT5zdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+c3RhdHVzKTsKLQlyZXN1bHQtPnJlc3AwID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AwKTsKLQlyZXN1bHQtPnJlc3AxID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AxKTsKLQlyZXN1bHQtPnJlc3AyID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AyKTsKKwlwcl9kZWJ1ZygiY21kcmVzdWx0OnN0YXR1cz0weCUwNHggIgorCSAgICAgICAicmVzcDA9MHglMDR4IHJlc3AxPTB4JTA0eCByZXNwMj0weCUwNHhcbiIsCisJICAgICAgIHJlc3VsdC0+c3RhdHVzLCByZXN1bHQtPnJlc3AwLCByZXN1bHQtPnJlc3AxLCByZXN1bHQtPnJlc3AyKTsKIAotCVdMQU5fTE9HX0RFQlVHKDQsICJjbWRyZXN1bHQ6c3RhdHVzPTB4JTA0eCAiCi0JICAgICAgICAgICAgICAgICAgInJlc3AwPTB4JTA0eCByZXNwMT0weCUwNHggcmVzcDI9MHglMDR4XG4iLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnN0YXR1cywKLQkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMCwKLQkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMSwKLQkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMik7Ci0KLQlEQkZFWElUOwotCXJldHVybiAocmVzdWx0LT5zdGF0dXMgJiBIRkEzODR4X1NUQVRVU19SRVNVTFQpOworCXJldHVybiByZXN1bHQtPnN0YXR1cyAmIEhGQTM4NHhfU1RBVFVTX1JFU1VMVDsKIH0KIAogc3RhdGljIHZvaWQKIHVzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3AsCi0gICAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpCisJCSAgICAgICBoZmEzODR4X3JyaWRyZXN1bHRfdCAqcmVzdWx0KQogewotCURCRkVOVEVSOwotCi0JcmVzdWx0LT5yaWQgPSBoZmEzODR4Mmhvc3RfMTYocnJpZHJlc3AtPnJpZCk7CisJcmVzdWx0LT5yaWQgPSBsZTE2X3RvX2NwdShycmlkcmVzcC0+cmlkKTsKIAlyZXN1bHQtPnJpZGRhdGEgPSBycmlkcmVzcC0+ZGF0YTsKLQlyZXN1bHQtPnJpZGRhdGFfbGVuID0gKChoZmEzODR4Mmhvc3RfMTYocnJpZHJlc3AtPmZybWxlbikgLSAxKSAqIDIpOworCXJlc3VsdC0+cmlkZGF0YV9sZW4gPSAoKGxlMTZfdG9fY3B1KHJyaWRyZXNwLT5mcm1sZW4pIC0gMSkgKiAyKTsKIAotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvbXBsZXRvciBvYmplY3Q6CiAqIFRoaXMgY29tcGxldG9yIG11c3QgYmUgcGFzc2VkIHRvIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKCkKICogd2hlbiBwcm9jZXNzaW5nIGEgQ1RMWCB0aGF0IHJldHVybnMgYSBoZmEzODR4X2NtZHJlc3VsdF90IHN0cnVjdHVyZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvcgotewotCXVzYmN0bHhfY29tcGxldG9yX3QJaGVhZDsKK3N0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgeworCXVzYmN0bHhfY29tcGxldG9yX3QgaGVhZDsKIAotCWNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdAkqY21kcmVzcDsKLQloZmEzODR4X2NtZHJlc3VsdF90CSpyZXN1bHQ7CisJY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwOworCWhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdDsKIH07CiB0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgdXNiY3RseF9jbWRfY29tcGxldG9yX3Q7CiAKIHN0YXRpYyBpbnQgdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCiB7Ci0JdXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfY21kX2NvbXBsZXRvcl90KiloZWFkOworCXVzYmN0bHhfY21kX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqKSBoZWFkOwogCXJldHVybiB1c2JjdGx4X2dldF9zdGF0dXMoY29tcGxldGUtPmNtZHJlc3AsIGNvbXBsZXRlLT5yZXN1bHQpOwogfQogCi1zdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCi1pbml0X2NtZF9jb21wbGV0b3IodXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRvciwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCi0gICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KQorc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90ICppbml0X2NtZF9jb21wbGV0b3IodXNiY3RseF9jbWRfY29tcGxldG9yX3QgKgorCQkJCQkJICAgICAgY29tcGxldG9yLAorCQkJCQkJICAgICAgY29uc3QKKwkJCQkJCSAgICAgIGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqCisJCQkJCQkgICAgICBjbWRyZXNwLAorCQkJCQkJICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqCisJCQkJCQkgICAgICByZXN1bHQpCiB7CiAJY29tcGxldG9yLT5oZWFkLmNvbXBsZXRlID0gdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuOwogCWNvbXBsZXRvci0+Y21kcmVzcCA9IGNtZHJlc3A7CkBAIC04MTQsNDQgKzcwNyw0MSBAQAogKiBUaGlzIGNvbXBsZXRvciBtdXN0IGJlIHBhc3NlZCB0byBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygpCiAqIHdoZW4gcHJvY2Vzc2luZyBhIENUTFggdGhhdCByZWFkcyBhIFJJRC4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RydWN0IHVzYmN0bHhfcnJpZF9jb21wbGV0b3IKLXsKLQl1c2JjdGx4X2NvbXBsZXRvcl90CWhlYWQ7CitzdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvciB7CisJdXNiY3RseF9jb21wbGV0b3JfdCBoZWFkOwogCi0JY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdAkqcnJpZHJlc3A7Ci0Jdm9pZAkJCSpyaWRkYXRhOwotCXVuc2lnbmVkIGludAkJCXJpZGRhdGFsZW47CisJY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3A7CisJdm9pZCAqcmlkZGF0YTsKKwl1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbjsKIH07CiB0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JyaWRfY29tcGxldG9yIHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdDsKIAogc3RhdGljIGludCB1c2JjdGx4X3JyaWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCiB7Ci0JdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QqKWhlYWQ7CisJdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgKikgaGVhZDsKIAloZmEzODR4X3JyaWRyZXN1bHRfdCBycmlkcmVzdWx0OwogCiAJdXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb21wbGV0ZS0+cnJpZHJlc3AsICZycmlkcmVzdWx0KTsKIAogCS8qIFZhbGlkYXRlIHRoZSBsZW5ndGgsIG5vdGUgYm9keSBsZW4gY2FsY3VsYXRpb24gaW4gYnl0ZXMgKi8KLQlpZiAoIHJyaWRyZXN1bHQucmlkZGF0YV9sZW4gIT0gY29tcGxldGUtPnJpZGRhdGFsZW4gKSB7Ci0JCVdMQU5fTE9HX1dBUk5JTkcoCi0JCQkiUklEIGxlbiBtaXNtYXRjaCwgcmlkPTB4JTA0eCBobGVuPSVkIGZ3bGVuPSVkXG4iLAotCQkgICAgICAgIHJyaWRyZXN1bHQucmlkLAotCQkgICAgICAgIGNvbXBsZXRlLT5yaWRkYXRhbGVuLAotCQkgICAgICAgIHJyaWRyZXN1bHQucmlkZGF0YV9sZW4pOworCWlmIChycmlkcmVzdWx0LnJpZGRhdGFfbGVuICE9IGNvbXBsZXRlLT5yaWRkYXRhbGVuKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJSSUQgbGVuIG1pc21hdGNoLCByaWQ9MHglMDR4IGhsZW49JWQgZndsZW49JWRcbiIsCisJCSAgICAgICBycmlkcmVzdWx0LnJpZCwKKwkJICAgICAgIGNvbXBsZXRlLT5yaWRkYXRhbGVuLCBycmlkcmVzdWx0LnJpZGRhdGFfbGVuKTsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIAotCW1lbWNweShjb21wbGV0ZS0+cmlkZGF0YSwKLQkgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhLAotCSAgICAgICBjb21wbGV0ZS0+cmlkZGF0YWxlbik7CisJbWVtY3B5KGNvbXBsZXRlLT5yaWRkYXRhLCBycmlkcmVzdWx0LnJpZGRhdGEsIGNvbXBsZXRlLT5yaWRkYXRhbGVuKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90KgotaW5pdF9ycmlkX2NvbXBsZXRvcih1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgKmNvbXBsZXRvciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3AsCi0gICAgICAgICAgICAgICAgICAgIHZvaWQgKnJpZGRhdGEsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQorc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90ICppbml0X3JyaWRfY29tcGxldG9yKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdAorCQkJCQkJICAgICAgICpjb21wbGV0b3IsCisJCQkJCQkgICAgICAgY29uc3QKKwkJCQkJCSAgICAgICBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICoKKwkJCQkJCSAgICAgICBycmlkcmVzcCwgdm9pZCAqcmlkZGF0YSwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKIHsKIAljb21wbGV0b3ItPmhlYWQuY29tcGxldGUgPSB1c2JjdGx4X3JyaWRfY29tcGxldG9yX2ZuOwogCWNvbXBsZXRvci0+cnJpZHJlc3AgPSBycmlkcmVzcDsKQEAgLTg3OCwzMCArNzY4LDI5IEBACiAqIENvbXBsZXRvciBvYmplY3Q6CiAqIEludGVycHJldHMgdGhlIHJlc3VsdHMgb2YgYSBzeW5jaHJvbm91cyBtZW1vcnktcmVhZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvcgotewotICAgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICAgICAgICAgICBoZWFkOworc3RydWN0IHVzYmN0bHhfcm1lbV9jb21wbGV0b3IgeworCXVzYmN0bHhfY29tcGxldG9yX3QgaGVhZDsKIAotICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9ybWVtcmVzcF90ICAqcm1lbXJlc3A7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhOwotICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKKwljb25zdCBoZmEzODR4X3VzYl9ybWVtcmVzcF90ICpybWVtcmVzcDsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGludCBsZW47CiB9OwogdHlwZWRlZiBzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvciB1c2JjdGx4X3JtZW1fY29tcGxldG9yX3Q7CiAKIHN0YXRpYyBpbnQgdXNiY3RseF9ybWVtX2NvbXBsZXRvcl9mbih1c2JjdGx4X2NvbXBsZXRvcl90ICpoZWFkKQogewotCXVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9ybWVtX2NvbXBsZXRvcl90KiloZWFkOworCXVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICopIGhlYWQ7CiAKLQlXTEFOX0xPR19ERUJVRyg0LCJybWVtcmVzcDpsZW49JWRcbiIsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZnJtbGVuKTsKKwlwcl9kZWJ1Zygicm1lbXJlc3A6bGVuPSVkXG4iLCBjb21wbGV0ZS0+cm1lbXJlc3AtPmZybWxlbik7CiAJbWVtY3B5KGNvbXBsZXRlLT5kYXRhLCBjb21wbGV0ZS0+cm1lbXJlc3AtPmRhdGEsIGNvbXBsZXRlLT5sZW4pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCi1pbml0X3JtZW1fY29tcGxldG9yKHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCAqY29tcGxldG9yLAotICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3VzYl9ybWVtcmVzcF90ICpybWVtcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCAqaW5pdF9ybWVtX2NvbXBsZXRvcih1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QKKwkJCQkJCSAgICAgICAqY29tcGxldG9yLAorCQkJCQkJICAgICAgIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcm1lbXJlc3AsIHZvaWQgKmRhdGEsCisJCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAljb21wbGV0b3ItPmhlYWQuY29tcGxldGUgPSB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuOwogCWNvbXBsZXRvci0+cm1lbXJlc3AgPSBybWVtcmVzcDsKQEAgLTkzMSwyOCArODIwLDIzIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQogewotCURCRkVOVEVSOwotCi0JaWYgKCBjdGx4LT51c2VyY2IgIT0gTlVMTCApIHsKKwlpZiAoY3RseC0+dXNlcmNiICE9IE5VTEwpIHsKIAkJaGZhMzg0eF9jbWRyZXN1bHRfdCBjbWRyZXN1bHQ7CiAKIAkJaWYgKGN0bHgtPnN0YXRlICE9IENUTFhfQ09NUExFVEUpIHsKIAkJCW1lbXNldCgmY21kcmVzdWx0LCAwLCBzaXplb2YoY21kcmVzdWx0KSk7Ci0JCQljbWRyZXN1bHQuc3RhdHVzID0gSEZBMzg0eF9TVEFUVVNfUkVTVUxUX1NFVChIRkEzODR4X0NNRF9FUlIpOworCQkJY21kcmVzdWx0LnN0YXR1cyA9CisJCQkgICAgSEZBMzg0eF9TVEFUVVNfUkVTVUxUX1NFVChIRkEzODR4X0NNRF9FUlIpOwogCQl9IGVsc2UgewogCQkJdXNiY3RseF9nZXRfc3RhdHVzKCZjdGx4LT5pbmJ1Zi5jbWRyZXNwLCAmY21kcmVzdWx0KTsKIAkJfQogCiAJCWN0bHgtPnVzZXJjYihodywgJmNtZHJlc3VsdCwgY3RseC0+dXNlcmNiX2RhdGEpOwogCX0KLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY2JfcnJpZAogKgpAQCAtOTczLDEzMiArODU3LDExNCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF9jYl9ycmlkKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQorc3RhdGljIHZvaWQgaGZhMzg0eF9jYl9ycmlkKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQogewotCURCRkVOVEVSOwotCi0JaWYgKCBjdGx4LT51c2VyY2IgIT0gTlVMTCApIHsKKwlpZiAoY3RseC0+dXNlcmNiICE9IE5VTEwpIHsKIAkJaGZhMzg0eF9ycmlkcmVzdWx0X3QgcnJpZHJlc3VsdDsKIAogCQlpZiAoY3RseC0+c3RhdGUgIT0gQ1RMWF9DT01QTEVURSkgewogCQkJbWVtc2V0KCZycmlkcmVzdWx0LCAwLCBzaXplb2YocnJpZHJlc3VsdCkpOwotCQkJcnJpZHJlc3VsdC5yaWQgPSBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnJyaWRyZXEucmlkKTsKKwkJCXJyaWRyZXN1bHQucmlkID0KKwkJCSAgICBsZTE2X3RvX2NwdShjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpOwogCQl9IGVsc2UgewotCQkJdXNiY3RseF9nZXRfcnJpZHJlc3VsdCgmY3RseC0+aW5idWYucnJpZHJlc3AsICZycmlkcmVzdWx0KTsKKwkJCXVzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoJmN0bHgtPmluYnVmLnJyaWRyZXNwLAorCQkJCQkgICAgICAgJnJyaWRyZXN1bHQpOwogCQl9CiAKIAkJY3RseC0+dXNlcmNiKGh3LCAmcnJpZHJlc3VsdCwgY3RseC0+dXNlcmNiX2RhdGEpOwogCX0KLQotCURCRkVYSVQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2RvY21kX3dhaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3N0YXRpYyBpbmxpbmUgaW50IGhmYTM4NHhfZG9jbWRfd2FpdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQogewogCXJldHVybiBoZmEzODR4X2RvY21kKGh3LCBET1dBSVQsIGNtZCwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2RvY21kX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQsCi0gICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLSAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCi0gICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQorCQkgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwkJICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKQogewotCXJldHVybiBoZmEzODR4X2RvY21kKGh3LCBET0FTWU5DLCBjbWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCXJldHVybiBoZmEzODR4X2RvY21kKGh3LCBET0FTWU5DLCBjbWQsIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZG9ycmlkX3dhaXQoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4pCitoZmEzODR4X2RvcnJpZF93YWl0KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKnJpZGRhdGEsCisJCSAgICB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3JyaWQoaHcsIERPV0FJVCwKLQkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCSAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2RvcnJpZF9hc3luYyhoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICAgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQorCQkgICAgIHUxNiByaWQsIHZvaWQgKnJpZGRhdGEsIHVuc2lnbmVkIGludCByaWRkYXRhbGVuLAorCQkgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwkJICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG9ycmlkKGh3LCBET0FTWU5DLAotCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKKwkJCSAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwKKwkJCSAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZG93cmlkX3dhaXQoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4pCitoZmEzODR4X2Rvd3JpZF93YWl0KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKnJpZGRhdGEsCisJCSAgICB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dyaWQoaHcsIERPV0FJVCwKLQkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCSAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2Rvd3JpZF9hc3luYyhoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICAgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQorCQkgICAgIHUxNiByaWQsIHZvaWQgKnJpZGRhdGEsIHVuc2lnbmVkIGludCByaWRkYXRhbGVuLAorCQkgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwkJICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG93cmlkKGh3LCBET0FTWU5DLAotCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKKwkJCSAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwKKwkJCSAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG9ybWVtX3dhaXQoaGZhMzg0eF90ICpodywKLSAgICAgICAgICAgICAgICAgICAgdTE2IHBhZ2UsIHUxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCisJCSAgICB1MTYgcGFnZSwgdTE2IG9mZnNldCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3JtZW0oaHcsIERPV0FJVCwKLQkgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sIE5VTEwsIE5VTEwsIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAogaGZhMzg0eF9kb3JtZW1fYXN5bmMoaGZhMzg0eF90ICpodywKLSAgICAgICAgICAgICAgICAgICAgIHUxNiBwYWdlLCB1MTYgb2Zmc2V0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAotICAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCi0gICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSkKKwkJICAgICB1MTYgcGFnZSwgdTE2IG9mZnNldCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbiwKKwkJICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisJCSAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKQogewogCXJldHVybiBoZmEzODR4X2Rvcm1lbShodywgRE9BU1lOQywKLQkgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKKwkJCSAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAorCQkJICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kb3dtZW1fd2FpdCgKLSAgICAgICAgaGZhMzg0eF90ICpodywKLSAgICAgICAgdTE2ICBwYWdlLAotICAgICAgICB1MTYgIG9mZnNldCwKLSAgICAgICAgdm9pZCAgICAqZGF0YSwKLSAgICAgICAgdW5zaWduZWQgaW50ICAgIGxlbikKK2hmYTM4NHhfZG93bWVtX3dhaXQoaGZhMzg0eF90ICpodywKKwkJICAgIHUxNiBwYWdlLCB1MTYgb2Zmc2V0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXJldHVybiBoZmEzODR4X2Rvd21lbShodywgRE9XQUlULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQkgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2Rvd21lbV9hc3luYygKLSAgICAgICAgaGZhMzg0eF90ICpodywKLSAgICAgICAgdTE2ICBwYWdlLAotICAgICAgICB1MTYgIG9mZnNldCwKLSAgICAgICAgdm9pZCAgICAqZGF0YSwKLSAgICAgICAgdW5zaWduZWQgaW50ICAgIGxlbiwKLSAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAotICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgdm9pZCAgICAqdXNlcmNiX2RhdGEpCitoZmEzODR4X2Rvd21lbV9hc3luYyhoZmEzODR4X3QgKmh3LAorCQkgICAgIHUxNiBwYWdlLAorCQkgICAgIHUxNiBvZmZzZXQsCisJCSAgICAgdm9pZCAqZGF0YSwKKwkJICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCQkgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwkJICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET0FTWU5DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJCQkgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEyMCwxNiArOTg2LDEyIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQKLWhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKK2ludCBoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpCiB7Ci0JaW50CXJlc3VsdCA9IDA7Ci0JaW50CWk7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CiAJaGZhMzg0eF9tZXRhY21kX3QgY21kOwogCi0JREJGRU5URVI7Ci0KLQogCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5JVDsKIAljbWQucGFybTAgPSAwOwogCWNtZC5wYXJtMSA9IDA7CkBAIC0xMTM3LDI3ICs5OTksMjEgQEAKIAogCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CiAKLQotCVdMQU5fTE9HX0RFQlVHKDMsImNtZHJlc3AuaW5pdDogIgotCQkic3RhdHVzPTB4JTA0eCwgcmVzcDA9MHglMDR4LCAiCi0JCSJyZXNwMT0weCUwNHgsIHJlc3AyPTB4JTA0eFxuIiwKLQkJY21kLnJlc3VsdC5zdGF0dXMsCi0JCWNtZC5yZXN1bHQucmVzcDAsCi0JCWNtZC5yZXN1bHQucmVzcDEsCi0JCWNtZC5yZXN1bHQucmVzcDIpOwotCWlmICggcmVzdWx0ID09IDAgKSB7Ci0JCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCXByX2RlYnVnKCJjbWRyZXNwLmluaXQ6ICIKKwkgICAgICAgInN0YXR1cz0weCUwNHgsIHJlc3AwPTB4JTA0eCwgIgorCSAgICAgICAicmVzcDE9MHglMDR4LCByZXNwMj0weCUwNHhcbiIsCisJICAgICAgIGNtZC5yZXN1bHQuc3RhdHVzLAorCSAgICAgICBjbWQucmVzdWx0LnJlc3AwLCBjbWQucmVzdWx0LnJlc3AxLCBjbWQucmVzdWx0LnJlc3AyKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspCiAJCQlody0+cG9ydF9lbmFibGVkW2ldID0gMDsKLQkJfQogCX0KIAotICAgICAgICBody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY21kX2Rpc2FibGUKICoKQEAgLTExODAsMjQgKzEwMzYsMjAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF9tZXRhY21kX3QgY21kOwogCi0JREJGRU5URVI7Ci0KIAljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUpIHwKLQkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwkgICAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CiAJY21kLnBhcm0wID0gMDsKIAljbWQucGFybTEgPSAwOwogCWNtZC5wYXJtMiA9IDA7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2NtZF9lbmFibGUKICoKQEAgLTEyMjAsMjAgKzEwNzIsMTcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfY21kX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCkKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQogCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRU5BQkxFKSB8Ci0JCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJICAgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOwogCWNtZC5wYXJtMCA9IDA7CiAJY21kLnBhcm0xID0gMDsKIAljbWQucGFybTIgPSAwOwogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI2OCwyNCArMTExNywyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfbW9uaXRvcihoZmEzODR4X3QgKmh3LCB1MTYgZW5hYmxlKQogewotCWludAlyZXN1bHQgPSAwOworCWludCByZXN1bHQgPSAwOwogCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKIAotCURCRkVOVEVSOwotCiAJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9NT05JVE9SKSB8Ci0JCUhGQTM4NHhfQ01EX0FJTkZPX1NFVChlbmFibGUpOworCSAgICBIRkEzODR4X0NNRF9BSU5GT19TRVQoZW5hYmxlKTsKIAljbWQucGFybTAgPSAwOwogCWNtZC5wYXJtMSA9IDA7CiAJY21kLnBhcm0yID0gMDsKIAogCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY21kX2Rvd25sb2FkCiAqCkBAIC0xMzI1LDE1ICsxMTcwLDE0IEBACiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfY21kX2Rvd25sb2FkKGhmYTM4NHhfdCAqaHcsIHUxNiBtb2RlLCB1MTYgbG93YWRkciwKLQkJCQl1MTYgaGlnaGFkZHIsIHUxNiBjb2RlbGVuKQorCQkJIHUxNiBoaWdoYWRkciwgdTE2IGNvZGVsZW4pCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF9tZXRhY21kX3QgY21kOwogCi0JREJGRU5URVI7Ci0JV0xBTl9MT0dfREVCVUcoNSwKLQkJIm1vZGU9JWQsIGxvd2FkZHI9MHglMDR4LCBoaWdoYWRkcj0weCUwNHgsIGNvZGVsZW49JWRcbiIsCi0JCW1vZGUsIGxvd2FkZHIsIGhpZ2hhZGRyLCBjb2RlbGVuKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAibW9kZT0lZCwgbG93YWRkcj0weCUwNHgsIGhpZ2hhZGRyPTB4JTA0eCwgY29kZWxlbj0lZFxuIiwKKwkgICAgICAgbW9kZSwgbG93YWRkciwgaGlnaGFkZHIsIGNvZGVsZW4pOwogCiAJY21kLmNtZCA9IChIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRE9XTkxEKSB8CiAJCSAgIEhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVChtb2RlKSk7CkBAIC0xMzQ0LDc5ICsxMTg4LDkgQEAKIAogCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGhmYTM4NHhfY29weV9mcm9tX2F1eAotKgotKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIGZyb20gdGhlIGNvbnRyb2xsZXIgbWVtb3J5LiAgVGhlCi0qIEF1eGlsaWFyeSBwb3J0IE1VU1QgYmUgZW5hYmxlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0qIFdlIF9taWdodF8gYmUgaW4gYSBkb3dubG9hZCBzdGF0ZS4KLSoKLSogQXJndW1lbnRzOgotKglodwkJZGV2aWNlIHN0cnVjdHVyZQotKgljYXJkYWRkcglhZGRyZXNzIGluIGhmYTM4NHggZGF0YSBzcGFjZSB0byByZWFkCi0qCWF1eGN0bAkJYWRkcmVzcyBzcGFjZSBzZWxlY3QKLSoJYnVmCQlwdHIgdG8gZGVzdGluYXRpb24gaG9zdCBidWZmZXIKLSoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCi0qCi0qIFJldHVybnM6Ci0qCW5vdGhpbmcKLSoKLSogU2lkZSBlZmZlY3RzOgotKglidWYgY29udGFpbnMgdGhlIGRhdGEgY29waWVkCi0qCi0qIENhbGwgY29udGV4dDoKLSoJcHJvY2VzcwotKglpbnRlcnJ1cHQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotaGZhMzg0eF9jb3B5X2Zyb21fYXV4KAotCWhmYTM4NHhfdCAqaHcsIHUzMiBjYXJkYWRkciwgdTMyIGF1eGN0bCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCURCRkVOVEVSOwotCVdMQU5fTE9HX0VSUk9SKCJub3QgdXNlZCBpbiBVU0IuXG4iKTsKLQlEQkZFWElUOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBoZmEzODR4X2NvcHlfdG9fYXV4Ci0qCi0qIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgdG8gdGhlIGNvbnRyb2xsZXIgbWVtb3J5LiAgVGhlCi0qIEF1eGlsaWFyeSBwb3J0IE1VU1QgYmUgZW5hYmxlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0qIFdlIF9taWdodF8gYmUgaW4gYSBkb3dubG9hZCBzdGF0ZS4KLSoKLSogQXJndW1lbnRzOgotKglodwkJZGV2aWNlIHN0cnVjdHVyZQotKgljYXJkYWRkcglhZGRyZXNzIGluIGhmYTM4NHggZGF0YSBzcGFjZSB0byByZWFkCi0qCWF1eGN0bAkJYWRkcmVzcyBzcGFjZSBzZWxlY3QKLSoJYnVmCQlwdHIgdG8gZGVzdGluYXRpb24gaG9zdCBidWZmZXIKLSoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCi0qCi0qIFJldHVybnM6Ci0qCW5vdGhpbmcKLSoKLSogU2lkZSBlZmZlY3RzOgotKglDb250cm9sbGVyIG1lbW9yeSBub3cgY29udGFpbnMgYSBjb3B5IG9mIGJ1ZgotKgotKiBDYWxsIGNvbnRleHQ6Ci0qCXByb2Nlc3MKLSoJaW50ZXJydXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLWhmYTM4NHhfY29weV90b19hdXgoCi0JaGZhMzg0eF90ICpodywgdTMyIGNhcmRhZGRyLCB1MzIgYXV4Y3RsLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JREJGRU5URVI7Ci0JV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOwotCURCRkVYSVQ7Ci19Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY29yZXJlc2V0CiAqCkBAIC0xNDQyLDIwICsxMjE2LDE3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKIHsKLQlpbnQgCQkJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAotCURCRkVOVEVSOwotCi0JcmVzdWx0PXVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7Ci0JaWYocmVzdWx0PDApIHsKLQkJV0xBTl9MT0dfRVJST1IoInVzYl9yZXNldF9kZXZpY2UoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIscmVzdWx0KTsKKwlyZXN1bHQgPSB1c2JfcmVzZXRfZGV2aWNlKGh3LT51c2IpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJICAgICAgIHJlc3VsdCk7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYwogKgpAQCAtMTQ4Nyw4ICsxMjU4LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXN1bHQ7CiAKLQlEQkZFTlRFUjsKLQogCXJlc3VsdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY3RseC0+ZG9uZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKQEAgLTE0OTcsMTQgKzEyNjYsMTEgQEAKIAkgKiBXZSBjYW4gb25seSBoYW5kbGUgdGhlIENUTFggaWYgdGhlIFVTQiBkaXNjb25uZWN0CiAJICogZnVuY3Rpb24gaGFzIG5vdCBydW4geWV0IC4uLgogCSAqLwotCWNsZWFudXA6Ci0JaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKLQl7CitjbGVhbnVwOgorCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7Ci0JfQotCWVsc2UgaWYgKCByZXN1bHQgIT0gMCApCi0JeworCX0gZWxzZSBpZiAocmVzdWx0ICE9IDApIHsKIAkJaW50IHJ1bnF1ZXVlID0gMDsKIAogCQkvKgpAQCAtMTUxNiw4ICsxMjgyLDcgQEAKIAkJICogTk9URTogV2UgY2FuIG9ubHkgZGVsZXRlIHRoZSB0aW1lcnMgYW5kCiAJCSAqICAgICAgIHRoZSBVUkIgaWYgdGhpcyBDVExYIGlzIGFjdGl2ZS4KIAkJICovCi0JCWlmIChjdGx4ID09IGdldF9hY3RpdmVfY3RseChodykpCi0JCXsKKwkJaWYgKGN0bHggPT0gZ2V0X2FjdGl2ZV9jdGx4KGh3KSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAogCQkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlcXRpbWVyKTsKQEAgLTE1MzQsNyArMTI5OSw3IEBACiAJCQkgKiBUaGlzIHNjZW5hcmlvIGlzIHNvIHVubGlrZWx5IHRoYXQgSSdtCiAJCQkgKiBoYXBweSB3aXRoIGEgZ3J1YmJ5ICJnb3RvIiBzb2x1dGlvbiAuLi4KIAkJCSAqLwotCQkJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQogCQkJCWdvdG8gY2xlYW51cDsKIAkJfQogCkBAIC0xNTU1LDkgKzEzMjAsOSBAQAogCQlpZiAoY3RseC0+c3RhdGUgPT0gQ1RMWF9DT01QTEVURSkgewogCQkJcmVzdWx0ID0gY29tcGxldG9yLT5jb21wbGV0ZShjb21wbGV0b3IpOwogCQl9IGVsc2UgewotCQkJV0xBTl9MT0dfV0FSTklORygiQ1RMWFslZF0gZXJyb3I6IHN0YXRlKCVzKVxuIiwKLQkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1RMWFslZF0gZXJyb3I6IHN0YXRlKCVzKVxuIiwKKwkJCSAgICAgICBsZTE2X3RvX2NwdShjdGx4LT5vdXRidWYudHlwZSksCisJCQkgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOwogCQkJcmVzdWx0ID0gLUVJTzsKIAkJfQogCkBAIC0xNTY2LDcgKzEzMzEsNiBAQAogCQlrZnJlZShjdGx4KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2MDMsMzkgKzEzNjcsMzIgQEAKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50Ci1oZmEzODR4X2RvY21kKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQloZmEzODR4X21ldGFjbWRfdCAqY21kLAotCWN0bHhfY21kY2JfdAljbWRjYiwKLQljdGx4X3VzZXJjYl90CXVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG9jbWQoaGZhMzg0eF90ICpodywKKwkgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQsCisJICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYuY21kcmVxLnR5cGUgPSAJaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX0NNRFJFUSk7Ci0JY3RseC0+b3V0YnVmLmNtZHJlcS5jbWQgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5jbWQpOwotCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTAgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMCk7Ci0JY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMSA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0xKTsKLQljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0yID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTIpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEudHlwZSA9IGNwdV90b19sZTE2KEhGQTM4NHhfVVNCX0NNRFJFUSk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5jbWQgPSBjcHVfdG9fbGUxNihjbWQtPmNtZCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMCA9IGNwdV90b19sZTE2KGNtZC0+cGFybTApOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTEgPSBjcHVfdG9fbGUxNihjbWQtPnBhcm0xKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0yID0gY3B1X3RvX2xlMTYoY21kLT5wYXJtMik7CiAKIAljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5jbWRyZXEpOwogCi0JV0xBTl9MT0dfREVCVUcoNCwgImNtZHJlcTogY21kPTB4JTA0eCAiCi0JCSJwYXJtMD0weCUwNHggcGFybTE9MHglMDR4IHBhcm0yPTB4JTA0eFxuIiwKLQkJY21kLT5jbWQsCi0JCWNtZC0+cGFybTAsCi0JCWNtZC0+cGFybTEsCi0JCWNtZC0+cGFybTIpOworCXByX2RlYnVnKCJjbWRyZXE6IGNtZD0weCUwNHggIgorCSAgICAgICAicGFybTA9MHglMDR4IHBhcm0xPTB4JTA0eCBwYXJtMj0weCUwNHhcbiIsCisJICAgICAgIGNtZC0+Y21kLCBjbWQtPnBhcm0wLCBjbWQtPnBhcm0xLCBjbWQtPnBhcm0yKTsKIAogCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKIAljdGx4LT5jbWRjYiA9IGNtZGNiOwpAQCAtMTY0OCwxOCArMTQwNSwyMCBAQAogCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKIAkJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgY29tcGxldG9yOwogCi0JCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAotCQkgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfY21kX2NvbXBsZXRvcigmY29tcGxldG9yLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYuY21kcmVzcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZC0+cmVzdWx0KSApOworCQlyZXN1bHQgPQorCQkgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsIGN0bHgsCisJCQkJCQkgIGluaXRfY21kX2NvbXBsZXRvcigmY29tcGxldG9yLAorCQkJCQkJCQkgICAgICZjdGx4LT4KKwkJCQkJCQkJICAgICBpbmJ1Zi4KKwkJCQkJCQkJICAgICBjbWRyZXNwLAorCQkJCQkJCQkgICAgICZjbWQtPgorCQkJCQkJCQkgICAgIHJlc3VsdCkpOwogCX0KIAogZG9uZToKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZG9ycmlkCiAqCkBAIC0xNjk3LDMxICsxNDU2LDI3IEBACiAqCXByb2Nlc3MgKERPV0FJVCBvciBET0FTWU5DKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50Ci1oZmEzODR4X2RvcnJpZCgKLQloZmEzODR4X3QgKmh3LAotCUNNRF9NT0RFIG1vZGUsCi0JdTE2CXJpZCwKLQl2b2lkCSpyaWRkYXRhLAotCXVuc2lnbmVkIGludAlyaWRkYXRhbGVuLAotICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpCitoZmEzODR4X2RvcnJpZChoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcmlkLAorCSAgICAgICB2b2lkICpyaWRkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYucnJpZHJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUlJJRFJFUSk7CisJY3RseC0+b3V0YnVmLnJyaWRyZXEudHlwZSA9IGNwdV90b19sZTE2KEhGQTM4NHhfVVNCX1JSSURSRVEpOwogCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLmZybWxlbiA9Ci0JCWhvc3QyaGZhMzg0eF8xNihzaXplb2YoY3RseC0+b3V0YnVmLnJyaWRyZXEucmlkKSk7Ci0JY3RseC0+b3V0YnVmLnJyaWRyZXEucmlkID0gICAgaG9zdDJoZmEzODR4XzE2KHJpZCk7CisJICAgIGNwdV90b19sZTE2KHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS5yaWQgPSBjcHVfdG9fbGUxNihyaWQpOwogCiAJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcSk7CiAKQEAgLTE3MzcsMTkgKzE0OTIsMTggQEAKIAl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7CiAJCXVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CiAKLQkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCi0JCSAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcnJpZF9jb21wbGV0b3IoJmNvbXBsZXRvciwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYucnJpZHJlc3AsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlkZGF0YSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWRkYXRhbGVuKSApOworCQlyZXN1bHQgPQorCQkgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsIGN0bHgsCisJCQkJCQkgIGluaXRfcnJpZF9jb21wbGV0b3IKKwkJCQkJCSAgKCZjb21wbGV0b3IsCisJCQkJCQkgICAmY3RseC0+aW5idWYucnJpZHJlc3AsCisJCQkJCQkgICByaWRkYXRhLCByaWRkYXRhbGVuKSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kb3dyaWQKICoKQEAgLTE3ODMsMzggKzE1MzcsMzQgQEAKICoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG93cmlkKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcmlkLAotCXZvaWQJKnJpZGRhdGEsCi0JdW5zaWduZWQgaW50CXJpZGRhdGFsZW4sCi0JY3RseF9jbWRjYl90IGNtZGNiLAotCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kb3dyaWQoaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHJpZCwKKwkgICAgICAgdm9pZCAqcmlkZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKQogewotCWludAkJCXJlc3VsdDsKLQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwlpbnQgcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OwogCi0JREJGRU5URVI7CiAJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKLQlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwlpZiAoY3RseCA9PSBOVUxMKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kICovCi0JY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSA9ICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1dSSURSRVEpOwotCWN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbiA9IGhvc3QyaGZhMzg0eF8xNigKLQkJCQkJKHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKLQkJCQkJcmlkZGF0YWxlbiArIDEpIC8gMik7Ci0JY3RseC0+b3V0YnVmLndyaWRyZXEucmlkID0gICAgaG9zdDJoZmEzODR4XzE2KHJpZCk7CisJY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSA9IGNwdV90b19sZTE2KEhGQTM4NHhfVVNCX1dSSURSRVEpOworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbiA9IGNwdV90b19sZTE2KChzaXplb2YKKwkJCQkJCSAgICAgICAoY3RseC0+b3V0YnVmLndyaWRyZXEuCisJCQkJCQkJcmlkKSArIHJpZGRhdGFsZW4gKworCQkJCQkJICAgICAgIDEpIC8gMik7CisJY3RseC0+b3V0YnVmLndyaWRyZXEucmlkID0gY3B1X3RvX2xlMTYocmlkKTsKIAltZW1jcHkoY3RseC0+b3V0YnVmLndyaWRyZXEuZGF0YSwgcmlkZGF0YSwgcmlkZGF0YWxlbik7CiAKIAljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLnR5cGUpICsKLQkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbikgKwotCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEucmlkKSArCi0JICAgICAgICAgICAgICAgICAgIHJpZGRhdGFsZW47CisJICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5mcm1sZW4pICsKKwkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCkgKyByaWRkYXRhbGVuOwogCiAJY3RseC0+cmVhcGFibGUgPSBtb2RlOwogCWN0bHgtPmNtZGNiID0gY21kY2I7CkBAIC0xODI5LDE2ICsxNTc5LDE1IEBACiAJCXVzYmN0bHhfd3JpZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CiAJCWhmYTM4NHhfY21kcmVzdWx0X3Qgd3JpZHJlc3VsdDsKIAotCQlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygKLQkJICAgICAgICAgICAgICAgaHcsCi0JCSAgICAgICAgICAgICAgIGN0bHgsCi0JCSAgICAgICAgICAgICAgIGluaXRfd3JpZF9jb21wbGV0b3IoJmNvbXBsZXRvciwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYud3JpZHJlc3AsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaWRyZXN1bHQpICk7CisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKGh3LAorCQkJCQkJICAgICAgIGN0bHgsCisJCQkJCQkgICAgICAgaW5pdF93cmlkX2NvbXBsZXRvcgorCQkJCQkJICAgICAgICgmY29tcGxldG9yLAorCQkJCQkJCSZjdGx4LT5pbmJ1Zi53cmlkcmVzcCwKKwkJCQkJCQkmd3JpZHJlc3VsdCkpOwogCX0KIAogZG9uZToKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4NzYsNDcgKzE2MjUsNDEgQEAKICoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9ybWVtKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcGFnZSwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmRhdGEsCi0JdW5zaWduZWQgaW50CWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpCitoZmEzODR4X2Rvcm1lbShoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcGFnZSwKKwkgICAgICAgdTE2IG9mZnNldCwKKwkgICAgICAgdm9pZCAqZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYucm1lbXJlcS50eXBlID0gICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1JNRU1SRVEpOwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiA9ICBob3N0MmhmYTM4NHhfMTYoCi0JCQkJCXNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQpICsKLQkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UpICsKLQkJCQkJbGVuKTsKLQljdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQgPQlob3N0MmhmYTM4NHhfMTYob2Zmc2V0KTsKLQljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlID0JaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihIRkEzODR4X1VTQl9STUVNUkVRKTsKKwljdGx4LT5vdXRidWYucm1lbXJlcS5mcm1sZW4gPQorCSAgICBjcHVfdG9fbGUxNihzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0KSArCisJCQkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UpICsgbGVuKTsKKwljdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UgPSBjcHVfdG9fbGUxNihwYWdlKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEpOwogCi0JV0xBTl9MT0dfREVCVUcoNCwKLQkJInR5cGU9MHglMDR4IGZybWxlbj0lZCBvZmZzZXQ9MHglMDR4IHBhZ2U9MHglMDR4XG4iLAotCQljdGx4LT5vdXRidWYucm1lbXJlcS50eXBlLAotCQljdGx4LT5vdXRidWYucm1lbXJlcS5mcm1sZW4sCi0JCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCwKLQkJY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInR5cGU9MHglMDR4IGZybWxlbj0lZCBvZmZzZXQ9MHglMDR4IHBhZ2U9MHglMDR4XG4iLAorCSAgICAgICBjdGx4LT5vdXRidWYucm1lbXJlcS50eXBlLAorCSAgICAgICBjdGx4LT5vdXRidWYucm1lbXJlcS5mcm1sZW4sCisJICAgICAgIGN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCwgY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSk7CiAKLQlXTEFOX0xPR19ERUJVRyg0LCJwa3RzaXplPSV6ZFxuIiwKLQkJUk9VTkRVUDY0KHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSkpKTsKKwlwcl9kZWJ1ZygicGt0c2l6ZT0lemRcbiIsCisJICAgICAgIFJPVU5EVVA2NChzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEpKSk7CiAKIAljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CiAJY3RseC0+Y21kY2IgPSBjbWRjYjsKQEAgLTE5MjYsMjMgKzE2NjksMjEgQEAKIAlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKIAlpZiAocmVzdWx0ICE9IDApIHsKIAkJa2ZyZWUoY3RseCk7Ci0JfSBlbHNlIGlmICggbW9kZSA9PSBET1dBSVQgKSB7Ci0gICAgICAgICAgICAgICAgdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7CisJCXVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7CiAKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LCBjdGx4LCBpbml0X3JtZW1fY29tcGxldG9yKCZjb21wbGV0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYucm1lbXJlc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKSApOworCQlyZXN1bHQgPQorCQkgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsIGN0bHgsCisJCQkJCQkgIGluaXRfcm1lbV9jb21wbGV0b3IKKwkJCQkJCSAgKCZjb21wbGV0b3IsCisJCQkJCQkgICAmY3RseC0+aW5idWYucm1lbXJlc3AsIGRhdGEsCisJCQkJCQkgICBsZW4pKTsKIAl9CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZG93bWVtCiAqCkBAIC0xOTc3LDQ1ICsxNzE4LDM5IEBACiAqCXByb2Nlc3MgKERPV0FJVCBvciBET0FTWU5DKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50Ci1oZmEzODR4X2Rvd21lbSgKLQloZmEzODR4X3QgKmh3LAotCUNNRF9NT0RFIG1vZGUsCi0JdTE2CXBhZ2UsCi0JdTE2CW9mZnNldCwKLQl2b2lkCSpkYXRhLAotCXVuc2lnbmVkIGludAlsZW4sCi0JY3RseF9jbWRjYl90IGNtZGNiLAotCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kb3dtZW0oaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHBhZ2UsCisJICAgICAgIHUxNiBvZmZzZXQsCisJICAgICAgIHZvaWQgKmRhdGEsCisJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKQogewotCWludAkJCXJlc3VsdDsKLQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwlpbnQgcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OwogCi0JREJGRU5URVI7Ci0JV0xBTl9MT0dfREVCVUcoNSwgInBhZ2U9MHglMDR4IG9mZnNldD0weCUwNHggbGVuPSVkXG4iLAotCQlwYWdlLG9mZnNldCxsZW4pOworCXByX2RlYnVnKCJwYWdlPTB4JTA0eCBvZmZzZXQ9MHglMDR4IGxlbj0lZFxuIiwKKwkgICAgICAgcGFnZSwgb2Zmc2V0LCBsZW4pOwogCiAJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKLQlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwlpZiAoY3RseCA9PSBOVUxMKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kICovCi0JY3RseC0+b3V0YnVmLndtZW1yZXEudHlwZSA9ICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1dNRU1SRVEpOwotCWN0bHgtPm91dGJ1Zi53bWVtcmVxLmZybWxlbiA9IGhvc3QyaGZhMzg0eF8xNigKLQkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLm9mZnNldCkgKwotCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSkgKwotCQkJCQlsZW4pOwotCWN0bHgtPm91dGJ1Zi53bWVtcmVxLm9mZnNldCA9IGhvc3QyaGZhMzg0eF8xNihvZmZzZXQpOwotCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UgPSAgIGhvc3QyaGZhMzg0eF8xNihwYWdlKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfV01FTVJFUSk7CisJY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuID0KKwkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLm9mZnNldCkgKworCQkJICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArIGxlbik7CisJY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5wYWdlID0gY3B1X3RvX2xlMTYocGFnZSk7CiAJbWVtY3B5KGN0bHgtPm91dGJ1Zi53bWVtcmVxLmRhdGEsIGRhdGEsIGxlbik7CiAKIAljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUpICsKLQkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLmZybWxlbikgKwotCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCi0JICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCi0JICAgICAgICAgICAgICAgICAgIGxlbjsKKwkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLmZybWxlbikgKworCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArIGxlbjsKIAogCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKIAljdGx4LT5jbWRjYiA9IGNtZGNiOwpAQCAtMjAyNSwyNCArMTc2MCwyMiBAQAogCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlrZnJlZShjdGx4KTsKLQl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKLSAgICAgICAgICAgICAgICB1c2JjdGx4X3dtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOwotICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3Qgd21lbXJlc3VsdDsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7CisJCXVzYmN0bHhfd21lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisJCWhmYTM4NHhfY21kcmVzdWx0X3Qgd21lbXJlc3VsdDsKIAotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF93bWVtX2NvbXBsZXRvcigmY29tcGxldG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLndtZW1yZXNwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndtZW1yZXN1bHQpICk7CisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKGh3LAorCQkJCQkJICAgICAgIGN0bHgsCisJCQkJCQkgICAgICAgaW5pdF93bWVtX2NvbXBsZXRvcgorCQkJCQkJICAgICAgICgmY29tcGxldG9yLAorCQkJCQkJCSZjdGx4LT5pbmJ1Zi53bWVtcmVzcCwKKwkJCQkJCQkmd21lbXJlc3VsdCkpOwogCX0KIAogZG9uZToKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcwogKgpAQCAtMjA2MCwxMiArMTc5MywxMCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyggaGZhMzg0eF90ICpodyApCitpbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKGhmYTM4NHhfdCAqaHcpCiB7CiAJaGZhMzg0eF9tZXRhY21kX3QgY21kOwogCi0JREJGRU5URVI7Ci0KIAljbWQuY21kID0gSEZBMzg0eF9DTURDT0RFX0lOUTsKIAljbWQucGFybTAgPSBIRkEzODR4X0lUX0NPTU1UQUxMSUVTOwogCWNtZC5wYXJtMSA9IDA7CkBAIC0yMDczLDExICsxODA0LDkgQEAKIAogCWhmYTM4NHhfZG9jbWRfYXN5bmMoaHcsICZjbWQsIE5VTEwsIE5VTEwsIE5VTEwpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2Rpc2FibGUKICoKQEAgLTIxMDIsMjQgKzE4MzEsMjAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KQogewotCWludAlyZXN1bHQgPSAwOworCWludCByZXN1bHQgPSAwOwogCi0JREJGRU5URVI7CiAJaWYgKCghaHctPmlzYXAgJiYgbWFjcG9ydCAhPSAwKSB8fAogCSAgICAoaHctPmlzYXAgJiYgIShtYWNwb3J0IDw9IEhGQTM4NHhfUE9SVElEX01BWCkpIHx8Ci0JICAgICEoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkgICAgIShody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSkgewogCQlyZXN1bHQgPSAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rpc2FibGUoaHcsIG1hY3BvcnQpOwotCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQlpZiAocmVzdWx0ID09IDApCiAJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMDsKLQkJfQogCX0KLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9lbmFibGUKICoKQEAgLTIxNDQsMjQgKzE4NjksMjAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAKLQlEQkZFTlRFUjsKIAlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CiAJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKLQkgICAgKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pICl7CisJICAgIChody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSkgewogCQlyZXN1bHQgPSAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2VuYWJsZShodywgbWFjcG9ydCk7Ci0JCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWlmIChyZXN1bHQgPT0gMCkKIAkJCWh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0gPSAxOwotCQl9CiAJfQotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlCiAqCkBAIC0yMTg1LDQ1ICsxOTA2LDQzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICpodykKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JaW50CQlpOworCWludCByZXN1bHQgPSAwOworCWludCBpOwogCi0JREJGRU5URVI7CiAJLyogQ2hlY2sgdGhhdCBhIHBvcnQgaXNuJ3QgYWN0aXZlICovCi0JZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgewotCQlpZiAoIGh3LT5wb3J0X2VuYWJsZWRbaV0gKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLCJjYWxsZWQgd2hlbiBwb3J0IGVuYWJsZWQuXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKGh3LT5wb3J0X2VuYWJsZWRbaV0pIHsKKwkJCXByX2RlYnVnKCJjYWxsZWQgd2hlbiBwb3J0IGVuYWJsZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQgKSB7CisJaWYgKGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLwotCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAotCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwKKwkJCQkJICAgICAmKGh3LT5idWZpbmZvKSwKKwkJCQkJICAgICBzaXplb2YoaHctPmJ1ZmluZm8pKSkpIHsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9Ci0JaHctPmJ1ZmluZm8ucGFnZSA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5wYWdlKTsKLQlody0+YnVmaW5mby5vZmZzZXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ub2Zmc2V0KTsKLQlody0+YnVmaW5mby5sZW4gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ubGVuKTsKLQlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAotCQkJCSYoaHctPmRsdGltZW91dCkpKSApIHsKKwlody0+YnVmaW5mby5wYWdlID0gbGUxNl90b19jcHUoaHctPmJ1ZmluZm8ucGFnZSk7CisJaHctPmJ1ZmluZm8ub2Zmc2V0ID0gbGUxNl90b19jcHUoaHctPmJ1ZmluZm8ub2Zmc2V0KTsKKwlody0+YnVmaW5mby5sZW4gPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5sZW4pOworCWlmICgocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkJICAgICAgICYoaHctPmRsdGltZW91dCkpKSkgewogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQlody0+ZGx0aW1lb3V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5kbHRpbWVvdXQpOworCWh3LT5kbHRpbWVvdXQgPSBsZTE2X3RvX2NwdShody0+ZGx0aW1lb3V0KTsKIAotCVdMQU5fTE9HX0RFQlVHKDEsImZsYXNoZGxfZW5hYmxlXG4iKTsKKwlwcl9kZWJ1ZygiZmxhc2hkbF9lbmFibGVcbiIpOwogCiAJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEOwotCURCRkVYSVQ7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlCiAqCkBAIC0yMjQ1LDI0ICsxOTY0LDIwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCiB7Ci0JREJGRU5URVI7CiAJLyogQ2hlY2sgdGhhdCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBkb3dubG9hZCBzdGF0ZSAqLwotCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRCApIHsKKwlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCi0JV0xBTl9MT0dfREVCVUcoMSwiZmxhc2hkbF9lbmFibGVcbiIpOworCXByX2RlYnVnKCJmbGFzaGRsX2VuYWJsZVxuIik7CiAKIAkvKiBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50LCBzbyBJIGRvbid0ICovCiAJLyogIGJvdGhlciAgdy8gdGhlIHJldHVybiB2YWx1ZSAqLwotCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKwloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwLCAwKTsKIAlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlCiAqCkBAIC0yMjkyLDQ4ICsyMDA3LDQyIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQKLWhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKAotCWhmYTM4NHhfdAkqaHcsCi0JdTMyCQlkYWRkciwKLQl2b2lkCQkqYnVmLAotCXUzMgkJbGVuKQoraW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCAqYnVmLCB1MzIgbGVuKQogewotCWludAkJcmVzdWx0ID0gMDsKLQl1MzIJCWRsYnVmYWRkcjsKLQlpbnQJCW5idXJuczsKLQl1MzIJCWJ1cm5sZW47Ci0JdTMyCQlidXJuZGFkZHI7Ci0JdTE2CQlidXJubG87Ci0JdTE2CQlidXJuaGk7Ci0JaW50CQlud3JpdGVzOwotCXU4CQkqd3JpdGVidWY7Ci0JdTE2CQl3cml0ZXBhZ2U7Ci0JdTE2CQl3cml0ZW9mZnNldDsKLQl1MzIJCXdyaXRlbGVuOwotCWludAkJaTsKLQlpbnQJCWo7CisJaW50IHJlc3VsdCA9IDA7CisJdTMyIGRsYnVmYWRkcjsKKwlpbnQgbmJ1cm5zOworCXUzMiBidXJubGVuOworCXUzMiBidXJuZGFkZHI7CisJdTE2IGJ1cm5sbzsKKwl1MTYgYnVybmhpOworCWludCBud3JpdGVzOworCXU4ICp3cml0ZWJ1ZjsKKwl1MTYgd3JpdGVwYWdlOworCXUxNiB3cml0ZW9mZnNldDsKKwl1MzIgd3JpdGVsZW47CisJaW50IGk7CisJaW50IGo7CiAKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg1LCJkYWRkcj0weCUwOHggbGVuPSVkXG4iLCBkYWRkciwgbGVuKTsKKwlwcl9kZWJ1ZygiZGFkZHI9MHglMDh4IGxlbj0lZFxuIiwgZGFkZHIsIGxlbik7CiAKIAkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSBmbGFzaCBkb3dubG9hZCBzdGF0ZSAqLwotCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRCApIHsKKwlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCi0JV0xBTl9MT0dfSU5GTygiRG93bmxvYWQgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwgbGVuLCBkYWRkcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiRG93bmxvYWQgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwgbGVuLCBkYWRkcik7CiAKIAkvKiBDb252ZXJ0IHRvIGZsYXQgYWRkcmVzcyBmb3IgYXJpdGhtZXRpYyAqLwogCS8qIE5PVEU6IGRsYnVmZmVyIFJJRCBzdG9yZXMgdGhlIGFkZHJlc3MgaW4gQVVYIGZvcm1hdCAqLwotCWRsYnVmYWRkciA9IEhGQTM4NHhfQUREUl9BVVhfTUtGTEFUKAotCQkJaHctPmJ1ZmluZm8ucGFnZSwgaHctPmJ1ZmluZm8ub2Zmc2V0KTsKLQlXTEFOX0xPR19ERUJVRyg1LAotCQkiZGxidWYucGFnZT0weCUwNHggZGxidWYub2Zmc2V0PTB4JTA0eCBkbGJ1ZmFkZHI9MHglMDh4XG4iLAotCQlody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQsIGRsYnVmYWRkcik7CisJZGxidWZhZGRyID0KKwkgICAgSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQoaHctPmJ1ZmluZm8ucGFnZSwgaHctPmJ1ZmluZm8ub2Zmc2V0KTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiZGxidWYucGFnZT0weCUwNHggZGxidWYub2Zmc2V0PTB4JTA0eCBkbGJ1ZmFkZHI9MHglMDh4XG4iLAorCSAgICAgICBody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQsIGRsYnVmYWRkcik7CiAKICNpZiAwCi1XTEFOX0xPR19XQVJOSU5HKCJkbGJ1ZkAweCUwNmx4IGxlbj0lZCB0bz0lZFxuIiwgZGxidWZhZGRyLCBody0+YnVmaW5mby5sZW4sIGh3LT5kbHRpbWVvdXQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsCisJICAgICAgIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7CiAjZW5kaWYKIAkvKiBDYWxjdWxhdGlvbnMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGZpbGxzIG9mIHRoZSBkbGJ1ZmZlciB0byBkbwogCSAqIGFuZCBob3cgbWFueSBVU0Igd21lbXJlcSdzIHRvIGRvIGZvciBlYWNoIGZpbGwuICBBdCB0aGlzIHBvaW50CkBAIC0yMzUxLDc0ICsyMDYwLDYwIEBACiAJbndyaXRlcyArPSAoaHctPmJ1ZmluZm8ubGVuICUgSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSA/IDEgOiAwOwogCiAJLyogRm9yIGVhY2ggYnVybiAqLwotCWZvciAoIGkgPSAwOyBpIDwgbmJ1cm5zOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1cm5zOyBpKyspIHsKIAkJLyogR2V0IHRoZSBkZXN0IGFkZHJlc3MgYW5kIGxlbiAqLwogCQlidXJubGVuID0gKGxlbiAtIChody0+YnVmaW5mby5sZW4gKiBpKSkgPiBody0+YnVmaW5mby5sZW4gPwotCQkJCWh3LT5idWZpbmZvLmxlbiA6Ci0JCQkJKGxlbiAtIChody0+YnVmaW5mby5sZW4gKiBpKSk7CisJCSAgICBody0+YnVmaW5mby5sZW4gOiAobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKTsKIAkJYnVybmRhZGRyID0gZGFkZHIgKyAoaHctPmJ1ZmluZm8ubGVuICogaSk7CiAJCWJ1cm5sbyA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoYnVybmRhZGRyKTsKIAkJYnVybmhpID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoYnVybmRhZGRyKTsKIAotCQlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsCi0JCQlidXJubGVuLCBidXJuZGFkZHIpOworCQlwcmludGsoS0VSTl9JTkZPICJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsCisJCSAgICAgICBidXJubGVuLCBidXJuZGFkZHIpOwogCiAJCS8qIFNldCB0aGUgZG93bmxvYWQgbW9kZSAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OViwKLQkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbik7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgotCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKLQkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKKwkJCQkJICAgICAgYnVybmxvLCBidXJuaGksIGJ1cm5sZW4pOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJICAgICAgICJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCSAgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdF9wcm9jOwogCQl9CiAKIAkJLyogY29weSB0aGUgZGF0YSB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyICovCi0JCWZvciAoIGo9MDsgaiA8IG53cml0ZXM7IGorKykgeworCQlmb3IgKGogPSAwOyBqIDwgbndyaXRlczsgaisrKSB7CiAJCQl3cml0ZWJ1ZiA9IGJ1ZiArCi0JCQkJKGkqaHctPmJ1ZmluZm8ubGVuKSArCi0JCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKKwkJCSAgICAoaSAqIGh3LT5idWZpbmZvLmxlbikgKworCQkJICAgIChqICogSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKIAotCQkJd3JpdGVwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoCi0JCQkJCWRsYnVmYWRkciArCi0JCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOwotCQkJd3JpdGVvZmZzZXQgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKAotCQkJCQlkbGJ1ZmFkZHIgKwotCQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pKTsKKwkJCXdyaXRlcGFnZSA9IEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGRsYnVmYWRkciArCisJCQkJCQkJICAgIChqICoKKwkJCQkJCQkgICAgIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOworCQkJd3JpdGVvZmZzZXQgPQorCQkJICAgIEhGQTM4NHhfQUREUl9DTURfTUtPRkYoZGxidWZhZGRyICsKKwkJCQkJCSAgIChqICoKKwkJCQkJCSAgICBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pKTsKIAotCQkJd3JpdGVsZW4gPSBidXJubGVuLShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7Ci0JCQl3cml0ZWxlbiA9IHdyaXRlbGVuICA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/Ci0JCQkJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA6Ci0JCQkJCXdyaXRlbGVuOworCQkJd3JpdGVsZW4gPSBidXJubGVuIC0gKGogKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQkJd3JpdGVsZW4gPSB3cml0ZWxlbiA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/CisJCQkgICAgSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOIDogd3JpdGVsZW47CiAKLQkJCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoIGh3LAotCQkJCQl3cml0ZXBhZ2UsCi0JCQkJCXdyaXRlb2Zmc2V0LAotCQkJCQl3cml0ZWJ1ZiwKLQkJCQkJd3JpdGVsZW4gKTsKLSNpZiAwCi0KLUNvbW1lbnQgb3V0IGZvciBkZWJ1Z2dpbmcsIGFzc3VtZSB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwuCi0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJCSJXcml0ZSB0byBkbCBidWZmZXIgZmFpbGVkLCAiCi0JCQkJCSJyZXN1bHQ9MHglMDR4LiBBYm9ydGluZy5cbiIsCi0JCQkJCXJlc3VsdCk7Ci0JCQkJZ290byBleGl0X3Byb2M7Ci0JCQl9Ci0jZW5kaWYKLQorCQkJcmVzdWx0ID0gaGZhMzg0eF9kb3dtZW1fd2FpdChodywKKwkJCQkJCSAgICAgd3JpdGVwYWdlLAorCQkJCQkJICAgICB3cml0ZW9mZnNldCwKKwkJCQkJCSAgICAgd3JpdGVidWYsIHdyaXRlbGVuKTsKIAkJfQogCiAJCS8qIHNldCB0aGUgZG93bmxvYWQgJ3dyaXRlIGZsYXNoJyBtb2RlICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LAotCQkJCUhGQTM4NHhfUFJPR01PREVfTlZXUklURSwKLQkJCQkwLDAsMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJImRvd25sb2FkKE5WV1JJVEUsbG89JXgsaGk9JXgsbGVuPSV4KSAiCi0JCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAotCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJCQkgICAgICBIRkEzODR4X1BST0dNT0RFX05WV1JJVEUsCisJCQkJCSAgICAgIDAsIDAsIDApOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiZG93bmxvYWQoTlZXUklURSxsbz0leCxoaT0leCxsZW49JXgpICIKKwkJCSAgICAgICAiY21kIGZhaWxlZCwgcmVzdWx0PSVkLiBBYm9ydGluZyBkL2xcbiIsCisJCQkgICAgICAgYnVybmxvLCBidXJuaGksIGJ1cm5sZW4sIHJlc3VsdCk7CiAJCQlnb3RvIGV4aXRfcHJvYzsKIAkJfQogCkBAIC0yNDMxLDExICsyMTI2LDkgQEAKIAkvKiAgYWN0dWFsbHkgZGlzYWJsZSBwcm9ncmFtbWluZyBtb2RlLiAgUmVtZW1iZXIsIHRoYXQgd2lsbCBjYXVzZSB0aGUgKi8KIAkvKiAgdGhlIGZpcm13YXJlIHRvIGVmZmVjdGl2ZWx5IHJlc2V0IGl0c2VsZi4gKi8KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2dldGNvbmZpZwogKgpAQCAtMjQ2MywxMiArMjE1NiwxMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pCiB7Ci0JaW50IAkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OwogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb3JyaWRfd2FpdChodywgcmlkLCBidWYsIGxlbik7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI1MDAsMTQgKzIxOTEsMTEgQEAKICAqICAgICAgIEFueQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKAotICAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3LAotICAgICAgICAgdTE2ICAgICAgICAgICAgICAgICAgcmlkLAotICAgICAgICAgY3RseF91c2VyY2JfdCAgICAgICAgICAgdXNlcmNiLAotICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kcnZyX2dldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKmh3LAorCQkJICAgICB1MTYgcmlkLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0gICAgICAgICByZXR1cm4gaGZhMzg0eF9kb3JyaWRfYXN5bmMoaHcsIHJpZCwgTlVMTCwgMCwKLQkJCQkgICAgIGhmYTM4NHhfY2JfcnJpZCwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CisJcmV0dXJuIGhmYTM4NHhfZG9ycmlkX2FzeW5jKGh3LCByaWQsIE5VTEwsIDAsCisJCQkJICAgIGhmYTM4NHhfY2JfcnJpZCwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjUzNCw3MSArMjIyMiwxNiBAQAogICogICAgICAgcHJvY2VzcwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50Ci1oZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKAotICAgICAgICAgaGZhMzg0eF90ICAgICAgICpodywKLSAgICAgICAgIHUxNiAgICAgICAgICByaWQsCi0gICAgICAgICB2b2lkICAgICAgICAgICAgKmJ1ZiwKLSAgICAgICAgIHUxNiAgICAgICAgICBsZW4sCi0gICAgICAgICBjdGx4X3VzZXJjYl90ICAgdXNlcmNiLAotICAgICAgICAgdm9pZCAgICAgICAgICAgICp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywKKwkJCSAgICAgdTE2IHJpZCwKKwkJCSAgICAgdm9pZCAqYnVmLAorCQkJICAgICB1MTYgbGVuLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG93cmlkX2FzeW5jKGh3LCByaWQsIGJ1ZiwgbGVuLAogCQkJCSAgICBoZmEzODR4X2NiX3N0YXR1cywgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBoZmEzODR4X2RydnJfaGFuZG92ZXIKLSoKLSogU2VuZHMgYSBoYW5kb3ZlciBub3RpZmljYXRpb24gdG8gdGhlIE1BQy4KLSoKLSogQXJndW1lbnRzOgotKglodwkJZGV2aWNlIHN0cnVjdHVyZQotKglhZGRyCQlhZGRyZXNzIG9mIHN0YXRpb24gdGhhdCdzIGxlZnQKLSoKLSogUmV0dXJuczoKLSoJemVybwkJc3VjY2Vzcy4KLSoJLUVSRVNUQVJUU1lTCXJlY2VpdmVkIHNpZ25hbCB3aGlsZSB3YWl0aW5nIGZvciBzZW1hcGhvcmUuCi0qCS1FSU8JCWZhaWxlZCB0byB3cml0ZSB0byBiYXAsIG9yIGZhaWxlZCBpbiBjbWQuCi0qCi0qIFNpZGUgZWZmZWN0czoKLSoKLSogQ2FsbCBjb250ZXh0OgotKglwcm9jZXNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBoZmEzODR4X2RydnJfaGFuZG92ZXIoIGhmYTM4NHhfdCAqaHcsIHU4ICphZGRyKQotewotICAgICAgICBEQkZFTlRFUjsKLQlXTEFOX0xPR19FUlJPUigiTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gVVNCIVxuIik7Ci0JREJGRVhJVDsKLQlyZXR1cm4gLUVJTzsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwKLSoKLSogV3JpdGUgdGVzdCBjb21tYW5kcyB0byB0aGUgY2FyZC4gIFNvbWUgdGVzdCBjb21tYW5kcyBkb24ndCBtYWtlCi0qIHNlbnNlIHdpdGhvdXQgcHJpb3Igc2V0LXVwLiAgRm9yIGV4YW1wbGUsIGNvbnRpbm91cyBUWCBpc24ndCB2ZXJ5Ci0qIHVzZWZ1bCB1bnRpbCB5b3Ugc2V0IHRoZSBjaGFubmVsLiAgVGhhdCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSogICAgICBwcm9jZXNzIHRocmVhZAotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQotewotCWludCAgICAgICAgICAgICByZXN1bHQ7Ci0JREJGRU5URVI7Ci0KLQkvKiBEbyBpIG5lZWQgYSBob3N0MmhmYS4uLiBjb252ZXJzaW9uID8gKi8KLQotCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kKTsKLQotCURCRkVYSVQ7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlCiAqCiAqIEVuZHMgdGhlIHJhbSBkb3dubG9hZCBzdGF0ZS4KQEAgLTI2MTYsMjcgKzIyNDksMjIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQogewotCURCRkVOVEVSOwogCS8qIENoZWNrIHRoYXQgd2UncmUgYWxyZWFkeSBpbiB0aGUgZG93bmxvYWQgc3RhdGUgKi8KLQlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgeworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCi0JV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZGlzYWJsZSgpXG4iKTsKKwlwcl9kZWJ1ZygicmFtZGxfZGlzYWJsZSgpXG4iKTsKIAogCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KIAkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCi0JaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAsIDApOwogCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZQogKgpAQCAtMjY2MSw1NSArMjI4OSw0OSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUzMiBleGVhZGRyKQoraW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgdTMyIGV4ZWFkZHIpCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCXUxNgkJbG93YWRkcjsKLQl1MTYJCWhpYWRkcjsKLQlpbnQJCWk7Ci0JREJGRU5URVI7CisJaW50IHJlc3VsdCA9IDA7CisJdTE2IGxvd2FkZHI7CisJdTE2IGhpYWRkcjsKKwlpbnQgaTsKKwogCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLwotCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKLQkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgewotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJIkNhbid0IGRvd25sb2FkIHdpdGggYSBtYWNwb3J0IGVuYWJsZWQuXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKGh3LT5wb3J0X2VuYWJsZWRbaV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJDYW4ndCBkb3dubG9hZCB3aXRoIGEgbWFjcG9ydCBlbmFibGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAogCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLwotCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKKwlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRG93bmxvYWQgc3RhdGUgbm90IGRpc2FibGVkLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCVdMQU5fTE9HX0RFQlVHKDMsInJhbWRsX2VuYWJsZSwgZXhlYWRkcj0weCUwOHhcbiIsIGV4ZWFkZHIpOworCXByX2RlYnVnKCJyYW1kbF9lbmFibGUsIGV4ZWFkZHI9MHglMDh4XG4iLCBleGVhZGRyKTsKIAogCS8qIENhbGwgdGhlIGRvd25sb2FkKDEsYWRkcikgZnVuY3Rpb24gKi8KIAlsb3dhZGRyID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihleGVhZGRyKTsKLQloaWFkZHIgPSAgSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZXhlYWRkcik7CisJaGlhZGRyID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZXhlYWRkcik7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9SQU0sCi0JCQlsb3dhZGRyLCBoaWFkZHIsIDApOworCQkJCSAgICAgIGxvd2FkZHIsIGhpYWRkciwgMCk7CiAKLQlpZiAoIHJlc3VsdCA9PSAwKSB7CisJaWYgKHJlc3VsdCA9PSAwKSB7CiAJCS8qIFNldCB0aGUgZG93bmxvYWQgc3RhdGUgKi8KIAkJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRDsKIAl9IGVsc2UgewotCQlXTEFOX0xPR19ERUJVRygxLAotCQkJImNtZF9kb3dubG9hZCgweCUwNHgsIDB4JTA0eCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLAotCQkJbG93YWRkciwKLQkJCWhpYWRkciwKLQkJCXJlc3VsdCk7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiY21kX2Rvd25sb2FkKDB4JTA0eCwgMHglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCSAgICAgICBsb3dhZGRyLCBoaWFkZHIsIHJlc3VsdCk7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUKICoKQEAgLTI3MzYsNTcgKzIzNTgsNTQgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCogYnVmLCB1MzIgbGVuKQoraW50IGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShoZmEzODR4X3QgKmh3LCB1MzIgZGFkZHIsIHZvaWQgKmJ1ZiwgdTMyIGxlbikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JaW50CQlud3JpdGVzOwotCXU4CQkqZGF0YSA9IGJ1ZjsKLQlpbnQJCWk7Ci0JdTMyCQljdXJyYWRkcjsKLQl1MTYJCWN1cnJwYWdlOwotCXUxNgkJY3Vycm9mZnNldDsKLQl1MTYJCWN1cnJsZW47Ci0JREJGRU5URVI7Ci0JLyogQ2hlY2sgdGhhdCB3ZSdyZSBpbiB0aGUgcmFtIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCApIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWludCByZXN1bHQgPSAwOworCWludCBud3JpdGVzOworCXU4ICpkYXRhID0gYnVmOworCWludCBpOworCXUzMiBjdXJyYWRkcjsKKwl1MTYgY3VycnBhZ2U7CisJdTE2IGN1cnJvZmZzZXQ7CisJdTE2IGN1cnJsZW47CiAKLQlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW0gZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpbnRrKEtFUk5fSU5GTyAiV3JpdGluZyAlZCBieXRlcyB0byByYW0gQDB4JTA2eFxuIiwgbGVuLCBkYWRkcik7CiAKIAkvKiBIb3cgbWFueSBkb3dtZW0gY2FsbHM/ICAqLwogCW53cml0ZXMgPSBsZW4gLyBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU47CiAJbndyaXRlcyArPSBsZW4gJSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gPyAxIDogMDsKIAogCS8qIERvIGJsb2NraW5nIHdtZW0ncyAqLwotCWZvcihpPTA7IGkgPCBud3JpdGVzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbndyaXRlczsgaSsrKSB7CiAJCS8qIG1ha2UgYWRkcmVzcyBhcmdzICovCiAJCWN1cnJhZGRyID0gZGFkZHIgKyAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CiAJCWN1cnJwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoY3VycmFkZHIpOwogCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihjdXJyYWRkcik7CiAJCWN1cnJsZW4gPSBsZW4gLSAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7Ci0JCWlmICggY3VycmxlbiA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikgeworCQlpZiAoY3VycmxlbiA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikKIAkJCWN1cnJsZW4gPSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU47Ci0JCX0KIAotCSAJLyogRG8gYmxvY2tpbmcgY3RseCAqLwotCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KCBodywKLQkJCQljdXJycGFnZSwKLQkJCQljdXJyb2Zmc2V0LAotCQkJCWRhdGEgKyAoaSpIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pLAotCQkJCWN1cnJsZW4gKTsKKwkJLyogRG8gYmxvY2tpbmcgY3RseCAqLworCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KGh3LAorCQkJCQkgICAgIGN1cnJwYWdlLAorCQkJCQkgICAgIGN1cnJvZmZzZXQsCisJCQkJCSAgICAgZGF0YSArCisJCQkJCSAgICAgKGkgKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pLAorCQkJCQkgICAgIGN1cnJsZW4pOwogCi0JCWlmIChyZXN1bHQpIGJyZWFrOworCQlpZiAocmVzdWx0KQorCQkJYnJlYWs7CiAKIAkJLyogVE9ETzogV2UgcmVhbGx5IHNob3VsZCBoYXZlIGEgcmVhZGJhY2suICovCiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfcmVhZHBkYQogKgpAQCAtMjgyMCwxMDEgKzI0MzksODkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JdTE2CQkqcGRhID0gYnVmOwotCWludAkJcGRhb2sgPSAwOwotCWludAkJbW9yZXBkcnMgPSAxOwotCWludAkJY3VycnBkciA9IDA7CS8qIHdvcmQgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHBkciAqLwotCXNpemVfdAkJaTsKLQl1MTYJCXBkcmxlbjsJCS8qIHBkciBsZW5ndGggaW4gYnl0ZXMsIGhvc3Qgb3JkZXIgKi8KLQl1MTYJCXBkcmNvZGU7CS8qIHBkciBjb2RlLCBob3N0IG9yZGVyICovCi0JdTE2CQljdXJycGFnZTsKLQl1MTYJCWN1cnJvZmZzZXQ7CisJaW50IHJlc3VsdCA9IDA7CisJdTE2ICpwZGEgPSBidWY7CisJaW50IHBkYW9rID0gMDsKKwlpbnQgbW9yZXBkcnMgPSAxOworCWludCBjdXJycGRyID0gMDsJLyogd29yZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgcGRyICovCisJc2l6ZV90IGk7CisJdTE2IHBkcmxlbjsJCS8qIHBkciBsZW5ndGggaW4gYnl0ZXMsIGhvc3Qgb3JkZXIgKi8KKwl1MTYgcGRyY29kZTsJCS8qIHBkciBjb2RlLCBob3N0IG9yZGVyICovCisJdTE2IGN1cnJwYWdlOworCXUxNiBjdXJyb2Zmc2V0OwogCXN0cnVjdCBwZGFsb2MgewotCQl1MzIJY2FyZGFkZHI7Ci0JCXUxNglhdXhjdGw7Ci0JfSBwZGFsb2NbXSA9Ci0JewotCQl7IEhGQTM4NDJfUERBX0JBU0UsCQkwfSwKLQkJeyBIRkEzODQxX1BEQV9CQVNFLAkJMH0sCi0JCXsgSEZBMzg0MV9QREFfQk9HVVNfQkFTRSwJMH0KKwkJdTMyIGNhcmRhZGRyOworCQl1MTYgYXV4Y3RsOworCX0gcGRhbG9jW10gPSB7CisJCXsKKwkJSEZBMzg0Ml9QREFfQkFTRSwgMH0sIHsKKwkJSEZBMzg0MV9QREFfQkFTRSwgMH0sIHsKKwkJSEZBMzg0MV9QREFfQk9HVVNfQkFTRSwgMH0KIAl9OwogCi0JREJGRU5URVI7Ci0KIAkvKiBSZWFkIHRoZSBwZGEgZnJvbSBlYWNoIGtub3duIGFkZHJlc3MuICAqLwotCWZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGFsb2MpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGFsb2MpOyBpKyspIHsKIAkJLyogTWFrZSBhZGRyZXNzICovCiAJCWN1cnJwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UocGRhbG9jW2ldLmNhcmRhZGRyKTsKIAkJY3Vycm9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYocGRhbG9jW2ldLmNhcmRhZGRyKTsKIAotCQlyZXN1bHQgPSBoZmEzODR4X2Rvcm1lbV93YWl0KGh3LAotCQkJY3VycnBhZ2UsCi0JCQljdXJyb2Zmc2V0LAotCQkJYnVmLAotCQkJbGVuKTsJCS8qIHVuaXRzIG9mIGJ5dGVzICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZG9ybWVtX3dhaXQoaHcsIGN1cnJwYWdlLCBjdXJyb2Zmc2V0LCBidWYsIGxlbik7CS8qIHVuaXRzIG9mIGJ5dGVzICovCiAKIAkJaWYgKHJlc3VsdCkgewotCQkJV0xBTl9MT0dfV0FSTklORygKLQkJCQkJICAiUmVhZCBmcm9tIGluZGV4ICV6ZCBmYWlsZWQsIGNvbnRpbnVpbmdcbiIsCi0JCQkJaSApOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJSZWFkIGZyb20gaW5kZXggJXpkIGZhaWxlZCwgY29udGludWluZ1xuIiwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIFRlc3QgZm9yIGdhcmJhZ2UgKi8KIAkJcGRhb2sgPSAxOwkvKiBpbml0aWFsbHkgYXNzdW1lIGdvb2QgKi8KIAkJbW9yZXBkcnMgPSAxOwotCQl3aGlsZSAoIHBkYW9rICYmIG1vcmVwZHJzICkgewotCQkJcGRybGVuID0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyXSkgKiAyOwotCQkJcGRyY29kZSA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcisxXSk7CisJCXdoaWxlIChwZGFvayAmJiBtb3JlcGRycykgeworCQkJcGRybGVuID0gbGUxNl90b19jcHUocGRhW2N1cnJwZHJdKSAqIDI7CisJCQlwZHJjb2RlID0gbGUxNl90b19jcHUocGRhW2N1cnJwZHIgKyAxXSk7CiAJCQkvKiBUZXN0IHRoZSByZWNvcmQgbGVuZ3RoICovCi0JCQlpZiAoIHBkcmxlbiA+IEhGQTM4NHhfUERSX0xFTl9NQVggfHwgcGRybGVuID09IDApIHsKLQkJCQlXTEFOX0xPR19FUlJPUigicGRybGVuIGludmFsaWQ9JWRcbiIsCi0JCQkJCXBkcmxlbik7CisJCQlpZiAocGRybGVuID4gSEZBMzg0eF9QRFJfTEVOX01BWCB8fCBwZHJsZW4gPT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAicGRybGVuIGludmFsaWQ9JWRcbiIsIHBkcmxlbik7CiAJCQkJcGRhb2sgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogVGVzdCB0aGUgY29kZSAqLwotCQkJaWYgKCAhaGZhMzg0eF9pc2dvb2RfcGRyY29kZShwZHJjb2RlKSApIHsKLQkJCQlXTEFOX0xPR19FUlJPUigicGRyY29kZSBpbnZhbGlkPSVkXG4iLAotCQkJCQlwZHJjb2RlKTsKKwkJCWlmICghaGZhMzg0eF9pc2dvb2RfcGRyY29kZShwZHJjb2RlKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAicGRyY29kZSBpbnZhbGlkPSVkXG4iLAorCQkJCSAgICAgICBwZHJjb2RlKTsKIAkJCQlwZGFvayA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBUZXN0IGZvciBjb21wbGV0aW9uICovCi0JCQlpZiAoIHBkcmNvZGUgPT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSkgeworCQkJaWYgKHBkcmNvZGUgPT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSkKIAkJCQltb3JlcGRycyA9IDA7Ci0JCQl9CiAKIAkJCS8qIE1vdmUgdG8gdGhlIG5leHQgcGRyIChpZiBuZWNlc3NhcnkpICovCi0JCQlpZiAoIG1vcmVwZHJzICkgeworCQkJaWYgKG1vcmVwZHJzKSB7CiAJCQkJLyogbm90ZSB0aGUgYWNjZXNzIHRvIHBkYVtdLCBuZWVkIHdvcmRzIGhlcmUgKi8KLQkJCQljdXJycGRyICs9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICsgMTsKKwkJCQljdXJycGRyICs9IGxlMTZfdG9fY3B1KHBkYVtjdXJycGRyXSkgKyAxOwogCQkJfQogCQl9Ci0JCWlmICggcGRhb2sgKSB7Ci0JCQlXTEFOX0xPR19JTkZPKAotCQkJCSJQREEgUmVhZCBmcm9tIDB4JTA4eCBpbiAlcyBzcGFjZS5cbiIsCi0JCQkJcGRhbG9jW2ldLmNhcmRhZGRyLAotCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMCA/ICJFWFREUyIgOgotCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMSA/ICJOViIgOgotCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMiA/ICJQSFkiIDoKLQkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDMgPyAiSUNTUkFNIiA6Ci0JCQkJIjxib2d1cyBhdXhjdGw+Iik7CisJCWlmIChwZGFvaykgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJQREEgUmVhZCBmcm9tIDB4JTA4eCBpbiAlcyBzcGFjZS5cbiIsCisJCQkgICAgICAgcGRhbG9jW2ldLmNhcmRhZGRyLAorCQkJICAgICAgIHBkYWxvY1tpXS5hdXhjdGwgPT0gMCA/ICJFWFREUyIgOgorCQkJICAgICAgIHBkYWxvY1tpXS5hdXhjdGwgPT0gMSA/ICJOViIgOgorCQkJICAgICAgIHBkYWxvY1tpXS5hdXhjdGwgPT0gMiA/ICJQSFkiIDoKKwkJCSAgICAgICBwZGFsb2NbaV0uYXV4Y3RsID09IDMgPyAiSUNTUkFNIiA6CisJCQkgICAgICAgIjxib2d1cyBhdXhjdGw+Iik7CiAJCQlicmVhazsKIAkJfQogCX0KIAlyZXN1bHQgPSBwZGFvayA/IDAgOiAtRU5PREFUQTsKIAotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19ERUJVRygzLCJGYWlsdXJlOiBwZGEgaXMgbm90IG9rYXlcbiIpOwotCX0KKwlpZiAocmVzdWx0KQorCQlwcl9kZWJ1ZygiRmFpbHVyZTogcGRhIGlzIG5vdCBva2F5XG4iKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX3NldGNvbmZpZwogKgpAQCAtMjk2Myw5ICsyNTcwLDggQEAKIAogaW50IGhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KQogewotCWludAkJcmVzdWx0LCByZXN1bHQxLCByZXN1bHQyOwotCXUxNgkJc3RhdHVzOwotCURCRkVOVEVSOworCWludCByZXN1bHQsIHJlc3VsdDEsIHJlc3VsdDI7CisJdTE2IHN0YXR1czsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKQEAgLTI5NzQsMjcgKzI1ODAsMjMgQEAKIAkgKiBiYWRseSBpZiBhIGNsZWFyX2hhbHQgaXMgY2FsbGVkIHdoZW4gdGhlIGVuZHBvaW50IGlzIGFscmVhZHkKIAkgKiBvawogCSAqLwotCXJlc3VsdCA9IHVzYl9nZXRfc3RhdHVzKGh3LT51c2IsIFVTQl9SRUNJUF9FTkRQT0lOVCwgaHctPmVuZHBfaW4sICZzdGF0dXMpOworCXJlc3VsdCA9CisJICAgIHVzYl9nZXRfc3RhdHVzKGh3LT51c2IsIFVTQl9SRUNJUF9FTkRQT0lOVCwgaHctPmVuZHBfaW4sICZzdGF0dXMpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkNhbm5vdCBnZXQgYnVsayBpbiBlbmRwb2ludCBzdGF0dXMuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZ2V0IGJ1bGsgaW4gZW5kcG9pbnQgc3RhdHVzLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChzdGF0dXMgPT0gMSkgJiYgdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkZhaWxlZCB0byByZXNldCBidWxrIGluIGVuZHBvaW50LlxuIik7Ci0JfQorCWlmICgoc3RhdHVzID09IDEpICYmIHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVzZXQgYnVsayBpbiBlbmRwb2ludC5cbiIpOwogCi0JcmVzdWx0ID0gdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9vdXQsICZzdGF0dXMpOworCXJlc3VsdCA9CisJICAgIHVzYl9nZXRfc3RhdHVzKGh3LT51c2IsIFVTQl9SRUNJUF9FTkRQT0lOVCwgaHctPmVuZHBfb3V0LCAmc3RhdHVzKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJDYW5ub3QgZ2V0IGJ1bGsgb3V0IGVuZHBvaW50IHN0YXR1cy5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBnZXQgYnVsayBvdXQgZW5kcG9pbnQgc3RhdHVzLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChzdGF0dXMgPT0gMSkgJiYgdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfb3V0KSkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJGYWlsZWQgdG8gcmVzZXQgYnVsayBvdXQgZW5kcG9pbnQuXG4iKTsKLQl9CisJaWYgKChzdGF0dXMgPT0gMSkgJiYgdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfb3V0KSkKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVzZXQgYnVsayBvdXQgZW5kcG9pbnQuXG4iKTsKIAogCS8qIFN5bmNocm9ub3VzIHVubGluaywgaW4gY2FzZSB3ZSdyZSB0cnlpbmcgdG8gcmVzdGFydCB0aGUgZHJpdmVyICovCiAJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKQEAgLTMwMDIsOSArMjYwNCw4IEBACiAJLyogUG9zdCB0aGUgSU4gdXJiICovCiAJcmVzdWx0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkZhdGFsLCBmYWlsZWQgdG8gc3VibWl0IFJYIFVSQiwgcmVzdWx0PSVkXG4iLAotCQkJcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRmF0YWwsIGZhaWxlZCB0byBzdWJtaXQgUlggVVJCLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTMwMjMsMzIgKzI2MjQsMzMgQEAKIAlyZXN1bHQgPSByZXN1bHQyID0gaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CiAJaWYgKHJlc3VsdDEgIT0gMCkgewogCQlpZiAocmVzdWx0MiAhPSAwKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiY21kX2luaXRpYWxpemUoKSBmYWlsZWQgb24gdHdvIGF0dGVtcHRzLCByZXN1bHRzICVkIGFuZCAlZFxuIiwKLQkJCQlyZXN1bHQxLCByZXN1bHQyKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCBvbiB0d28gYXR0ZW1wdHMsIHJlc3VsdHMgJWQgYW5kICVkXG4iLAorCQkJICAgICAgIHJlc3VsdDEsIHJlc3VsdDIpOwogCQkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKIAkJCWdvdG8gZG9uZTsKIAkJfSBlbHNlIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDAsICJGaXJzdCBjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCAocmVzdWx0ICVkKSxcbiIsCi0JCQkJcmVzdWx0MSk7Ci0JCQlXTEFOX0xPR19ERUJVRygwLCAiYnV0IHNlY29uZCBhdHRlbXB0IHN1Y2NlZWRlZC4gQWxsIHNob3VsZCBiZSBva1xuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJGaXJzdCBjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCAocmVzdWx0ICVkKSxcbiIsCisJCQkgICAgICAgcmVzdWx0MSk7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJidXQgc2Vjb25kIGF0dGVtcHQgc3VjY2VlZGVkLiBBbGwgc2hvdWxkIGJlIG9rXG4iKTsKIAkJfQogCX0gZWxzZSBpZiAocmVzdWx0MiAhPSAwKSB7Ci0JCVdMQU5fTE9HX1dBUk5JTkcoCi0JCQkiRmlyc3QgY21kX2luaXRpYWxpemUoKSBzdWNjZWVkZWQsIGJ1dCBzZWNvbmQgYXR0ZW1wdCBmYWlsZWQgKHJlc3VsdD0lZClcbiIsCi0JCQlyZXN1bHQyKTsKLQkJV0xBTl9MT0dfV0FSTklORygiTW9zdCBsaWtlbHkgdGhlIGNhcmQgd2lsbCBiZSBmdW5jdGlvbmFsXG4iKTsKLQkJCWdvdG8gZG9uZTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkZpcnN0IGNtZF9pbml0aWFsaXplKCkgc3VjY2VlZGVkLCBidXQgc2Vjb25kIGF0dGVtcHQgZmFpbGVkIChyZXN1bHQ9JWQpXG4iLAorCQkgICAgICAgcmVzdWx0Mik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJNb3N0IGxpa2VseSB0aGUgY2FyZCB3aWxsIGJlIGZ1bmN0aW9uYWxcbiIpOworCQlnb3RvIGRvbmU7CiAJfQogCiAJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9SVU5OSU5HOwogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX3N0b3AKICoKQEAgLTMwNjgsMTkgKzI2NzAsMTcgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodykKK2ludCBoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQogewotCWludAlyZXN1bHQgPSAwOwotCWludAlpOwotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCWludCBpOwogCiAJbWlnaHRfc2xlZXAoKTsKIAogCS8qIFRoZXJlJ3Mgbm8gbmVlZCBmb3Igc3BpbmxvY2tzIGhlcmUuIFRoZSBVU0IgImRpc2Nvbm5lY3QiCiAJICogZnVuY3Rpb24gc2V0cyB0aGlzICJyZW1vdmVkIiBmbGFnIGFuZCB0aGVuIGNhbGxzIHVzLgogCSAqLwotCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgKSB7CisJaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CiAJCS8qIENhbGwgaW5pdGlhbGl6ZSB0byBsZWF2ZSB0aGUgTUFDIGluIGl0cyAncmVzZXQnIHN0YXRlICovCiAJCWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOwogCkBAIC0zMDk0LDExICsyNjk0LDkgQEAKIAlkZWxfdGltZXJfc3luYygmaHctPmNvbW1zcXVhbF90aW1lcik7CiAKIAkvKiBDbGVhciBhbGwgdGhlIHBvcnQgc3RhdHVzICovCi0JZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspCiAJCWh3LT5wb3J0X2VuYWJsZWRbaV0gPSAwOwotCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzEyMywxOCArMjcyMSwxNyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQotCitpbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQkgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKIHsKLQlpbnQJCXVzYnBrdGxlbiA9IHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpOwotCWludAkJcmVzdWx0OwotCWludAkJcmV0OwotCWNoYXIJCSpwdHI7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgdXNicGt0bGVuID0gc2l6ZW9mKGhmYTM4NHhfdHhfZnJhbWVfdCk7CisJaW50IHJlc3VsdDsKKwlpbnQgcmV0OworCWNoYXIgKnB0cjsKIAogCWlmIChody0+dHhfdXJiLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJV0xBTl9MT0dfV0FSTklORygiVFggVVJCIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVFggVVJCIGFscmVhZHkgaW4gdXNlXG4iKTsKIAkJcmVzdWx0ID0gMzsKIAkJZ290byBleGl0OwogCX0KQEAgLTMxNDQsNyArMjc0MSw3IEBACiAJbWVtc2V0KCZody0+dHhidWZmLnR4ZnJtLmRlc2MsIDAsIHNpemVvZihody0+dHhidWZmLnR4ZnJtLmRlc2MpKTsKIAogCS8qIFNldHVwIHRoZSB1c2IgdHlwZSBmaWVsZCAqLwotCWh3LT50eGJ1ZmYudHlwZSA9IGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9UWEZSTSk7CisJaHctPnR4YnVmZi50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfVFhGUk0pOwogCiAJLyogU2V0IHVwIHRoZSBzd19zdXBwb3J0IGZpZWxkIHRvIGlkZW50aWZ5IHRoaXMgZnJhbWUgKi8KIAlody0+dHhidWZmLnR4ZnJtLmRlc2Muc3dfc3VwcG9ydCA9IDB4MDEyMzsKQEAgLTMxNTIsMzMgKzI3NDksMzMgQEAKIC8qIFR4IGNvbXBsZXRlIGFuZCBUeCBleGNlcHRpb24gZGlzYWJsZSBwZXIgZGxlYWNoLiAgTWlnaHQgYmUgY2F1c2luZwogICogYnVmIGRlcGxldGlvbgogICovCi0vLyNkZWZpbmUgRE9FWEMgIFNMUCAtLSBkb2JvdGggYnJlYWtzIGhvcnJpYmx5IHVuZGVyIGxvYWQsIGRvZXhjIGxlc3Mgc28uCisvKiAjZGVmaW5lIERPRVhDICBTTFAgLS0gZG9ib3RoIGJyZWFrcyBob3JyaWJseSB1bmRlciBsb2FkLCBkb2V4YyBsZXNzIHNvLiAqLwogI2lmIGRlZmluZWQoRE9CT1RIKQogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KLQkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8Ci0JCUhGQTM4NHhfVFhfVFhFWF9TRVQoMSkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDEpOworCSAgICBIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkgICAgSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMSk7CiAjZWxpZiBkZWZpbmVkKERPRVhDKQogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KLQkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8Ci0JCUhGQTM4NHhfVFhfVFhFWF9TRVQoMSkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworCSAgICBIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkgICAgSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CiAjZWxzZQogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KLQkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8Ci0JCUhGQTM4NHhfVFhfVFhFWF9TRVQoMCkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworCSAgICBIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkgICAgSEZBMzg0eF9UWF9UWEVYX1NFVCgwKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CiAjZW5kaWYKIAlody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCA9Ci0JCWhvc3QyaGZhMzg0eF8xNihody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCk7CisJICAgIGNwdV90b19sZTE2KGh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sKTsKIAogCS8qIGNvcHkgdGhlIGhlYWRlciBvdmVyIHRvIHRoZSB0eGRlc2MgKi8KLQltZW1jcHkoJihody0+dHhidWZmLnR4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCksIHA4MDIxMV9oZHIsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKwltZW1jcHkoJihody0+dHhidWZmLnR4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCksIHA4MDIxMV9oZHIsCisJICAgICAgIHNpemVvZihwODAyMTFfaGRyX3QpKTsKIAogCS8qIGlmIHdlJ3JlIHVzaW5nIGhvc3QgV0VQLCBpbmNyZWFzZSBzaXplIGJ5IElWK0lDViAqLwogCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7Ci0JCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5kYXRhX2xlbiA9IGhvc3QyaGZhMzg0eF8xNihza2ItPmxlbis4KTsKLQkJLy8gaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgfD0gSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKDEpOwotCQl1c2Jwa3RsZW4rPTg7CisJCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5kYXRhX2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuICsgOCk7CisJCXVzYnBrdGxlbiArPSA4OwogCX0gZWxzZSB7Ci0JCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5kYXRhX2xlbiA9IGhvc3QyaGZhMzg0eF8xNihza2ItPmxlbik7CisJCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5kYXRhX2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKIAl9CiAKIAl1c2Jwa3RsZW4gKz0gc2tiLT5sZW47CkBAIC0zMTg3LDU5ICsyNzg0LDUxIEBACiAJcHRyID0gaHctPnR4YnVmZi50eGZybS5kYXRhOwogCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CiAJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPml2LCBzaXplb2YocDgwMjExX3dlcC0+aXYpKTsKLQkJcHRyKz0gc2l6ZW9mKHA4MDIxMV93ZXAtPml2KTsKKwkJcHRyICs9IHNpemVvZihwODAyMTFfd2VwLT5pdik7CiAJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmRhdGEsIHNrYi0+bGVuKTsKIAl9IGVsc2UgewogCQltZW1jcHkocHRyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAl9CiAJLyogY29weSBvdmVyIHRoZSBwYWNrZXQgZGF0YSAqLwotCXB0cis9IHNrYi0+bGVuOworCXB0ciArPSBza2ItPmxlbjsKIAogCS8qIGNvcHkgb3ZlciB0aGUgV0VQIElDViBpZiB3ZSBhcmUgdXNpbmcgaG9zdCBXRVAgKi8KLQlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCWlmIChwODAyMTFfd2VwLT5kYXRhKQogCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5pY3YsIHNpemVvZihwODAyMTFfd2VwLT5pY3YpKTsKLQl9CiAKIAkvKiBTZW5kIHRoZSBVU0IgcGFja2V0ICovCi0JdXNiX2ZpbGxfYnVsa191cmIoICYoaHctPnR4X3VyYiksIGh3LT51c2IsCi0JICAgICAgICAgICAgICAgaHctPmVuZHBfb3V0LAotCSAgICAgICAgICAgICAgICYoaHctPnR4YnVmZiksIFJPVU5EVVA2NCh1c2Jwa3RsZW4pLAotCSAgICAgICAgICAgICAgIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrLCBody0+d2xhbmRldiApOworCXVzYl9maWxsX2J1bGtfdXJiKCYoaHctPnR4X3VyYiksIGh3LT51c2IsCisJCQkgIGh3LT5lbmRwX291dCwKKwkJCSAgJihody0+dHhidWZmKSwgUk9VTkRVUDY0KHVzYnBrdGxlbiksCisJCQkgIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrLCBody0+d2xhbmRldik7CiAJaHctPnR4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVU0JfUVVFVUVfQlVMSzsKIAogCXJlc3VsdCA9IDE7CiAJcmV0ID0gc3VibWl0X3R4X3VyYihodywgJmh3LT50eF91cmIsIEdGUF9BVE9NSUMpOwotCWlmICggcmV0ICE9IDAgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJInN1Ym1pdF90eF91cmIoKSBmYWlsZWQsIGVycm9yPSVkXG4iLCByZXQpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgInN1Ym1pdF90eF91cmIoKSBmYWlsZWQsIGVycm9yPSVkXG4iLCByZXQpOwogCQlyZXN1bHQgPSAzOwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWhmYTM4NHhfdAkqaHcgPSB3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEQkZFTlRFUjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCi0JaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgotCSAgICAgLyogTm90ZSB0aGUgYml0d2lzZSBPUiwgbm90IHRoZSBsb2dpY2FsIE9SLiAqLwotCSAgICAgKCAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSB8Ci0JICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgKQotCXsKKwlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYKKwkgICAgLyogTm90ZSB0aGUgYml0d2lzZSBPUiwgbm90IHRoZSBsb2dpY2FsIE9SLiAqLworCSAgICAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfAorCSAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpKSB7CiAJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKLQotCURCRkVYSVQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzI1NywxMiArMjg0NiwxMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdAkqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCi0JREJGRU5URVI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCkBAIC0zMjcwLDcgKzI4NTcsNyBAQAogCSAqIGhhcyB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIuCiAJICovCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmaHctPmN0bHhxLnJlYXBhYmxlKSB7Ci0JCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAogCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOwogCQlsaXN0X2RlbCgmY3RseC0+bGlzdCk7CkBAIC0zMjc5LDcgKzI4NjYsNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAotCURCRkVYSVQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzI5OCwxNSArMjg4NCwxMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWludCByZWFwID0gMDsKIAotCURCRkVOVEVSOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKIAkvKiBUaGlzIGxpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSBlbXB0eSBpZiBzb21lb25lCkBAIC0zMzIwLDcgKzI5MDQsNyBAQAogCQkvKiBDYWxsIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIHRoYXQgdGhpcwogCQkgKiBjb21tYW5kIHdhcyBhc3NpZ25lZCwgYXNzdW1pbmcgaXQgaGFzIG9uZS4KIAkJICovCi0JCWlmICggY3RseC0+Y21kY2IgIT0gTlVMTCApIHsKKwkJaWYgKGN0bHgtPmNtZGNiICE9IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCQljdGx4LT5jbWRjYihodywgY3RseCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKQEAgLTMzMzMsOCArMjkxNyw3IEBACiAJCQkvKiBEaWQgc29tZW9uZSB5YW5rIHRoZSBhZGFwdGVyIG91dAogCQkJICogd2hpbGUgb3VyIGxpc3Qgd2FzIChicmllZmx5KSB1bmxvY2tlZD8KIAkJCSAqLwotCQkJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKLQkJCXsKKwkJCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CiAJCQkJcmVhcCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zMzQ1LDcgKzI5MjgsNyBAQAogCQkgKiB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZGllLiBIZW5jZSB0aGV5IG11c3QKIAkJICogYmUgZGVsaXZlcmVkIHRvIFRoZSBSZWFwZXIhCiAJCSAqLwotCQlpZiAoIGN0bHgtPnJlYXBhYmxlICkgeworCQlpZiAoY3RseC0+cmVhcGFibGUpIHsKIAkJCS8qIE1vdmUgdGhlIENUTFggb2ZmIHRoZSAiY29tcGxldGluZyIgbGlzdCAoaG9wZWZ1bGx5KQogCQkJICogb24gdG8gdGhlICJyZWFwYWJsZSIgbGlzdCB3aGVyZSB0aGUgcmVhcGVyIHRhc2sKIAkJCSAqIGNhbiBmaW5kIGl0LiBBbmQgInJlYXBhYmxlIiBtZWFucyB0aGF0IHRoaXMgQ1RMWApAQCAtMzM2MSw4ICsyOTQ0LDYgQEAKIAogCWlmIChyZWFwKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZody0+cmVhcGVyX2JoKTsKLQotCURCRkVYSVQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzM4MiwxMiArMjk2MywxMSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCUVpdGhlciBwcm9jZXNzIG9yIGludGVycnVwdCwgYnV0IHByZXN1bWFibHkgaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCitzdGF0aWMgaW50IHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisJCQkJCSBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKIHsKIAlpbnQgcmV0OwogCi0JREJGRU5URVI7Ci0KIAkvKgogCSAqIFRyeSB0byBkZWxldGUgdGhlIFVSQiBjb250YWluaW5nIG91ciByZXF1ZXN0IHBhY2tldC4KIAkgKiBJZiB3ZSBzdWNjZWVkLCB0aGVuIGl0cyBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZQpAQCAtMzQwOCw4ICsyOTg4LDYgQEAKIAkJcmV0ID0gMDsKIAl9CiAKLQlEQkZFWElUOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQzNyw4ICszMDE1LDYgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKIHsKLQlEQkZFTlRFUjsKLQogCS8qIFRpbWVycyBoYXZlIGJlZW4gc3RvcHBlZCwgYW5kIGN0bHggc2hvdWxkIGJlIGluCiAJICogYSB0ZXJtaW5hbCBzdGF0ZS4gUmV0aXJlIGl0IGZyb20gdGhlICJhY3RpdmUiCiAJICogcXVldWUuCkBAIC0zNDUzLDEzICszMDI5LDExIEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfRVJST1IoIkNUTFhbJWRdIG5vdCBpbiBhIHRlcm1pbmF0aW5nIHN0YXRlKCVzKVxuIiwKLQkJICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQlwcmludGsoS0VSTl9FUlIgIkNUTFhbJWRdIG5vdCBpbiBhIHRlcm1pbmF0aW5nIHN0YXRlKCVzKVxuIiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKIAkJYnJlYWs7Ci0JfSAvKiBzd2l0Y2ggKi8KLQotCURCRkVYSVQ7CisJfQkJCS8qIHN3aXRjaCAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0NzgsMTEgKzMwNTIsOSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWFueQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90CSpodykKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseHFfcnVuKGhmYTM4NHhfdCAqaHcpCiB7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JREJGRU5URVI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGFjcXVpcmUgbG9jayAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMzQ5NCwyOCArMzA2NiwyNiBAQAogCSAqIERvbid0IHRvdWNoIGFueSBvZiB0aGVzZSBDVExYcyBpZiB0aGUgaGFyZHdhcmUKIAkgKiBoYXMgYmVlbiByZW1vdmVkIG9yIHRoZSBVU0Igc3Vic3lzdGVtIGlzIHN0YWxsZWQuCiAJICovCi0JaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgfHwKLQkgICAgIHRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHx8Ci0JICAgICBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwlpZiAoIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpIHx8CisJICAgIHRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHx8IGh3LT53bGFuZGV2LT5od3JlbW92ZWQpCiAJCWdvdG8gdW5sb2NrOwogCi0Jd2hpbGUgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLnBlbmRpbmcpICkgewotCQloZmEzODR4X3VzYmN0bHhfdAkqaGVhZDsKLQkJaW50CQkJcmVzdWx0OworCXdoaWxlICghbGlzdF9lbXB0eSgmaHctPmN0bHhxLnBlbmRpbmcpKSB7CisJCWhmYTM4NHhfdXNiY3RseF90ICpoZWFkOworCQlpbnQgcmVzdWx0OwogCiAJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IHBlbmRpbmcgY29tbWFuZCAqLwogCQloZWFkID0gbGlzdF9lbnRyeShody0+Y3RseHEucGVuZGluZy5uZXh0LAotCQkgICAgICAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfdCwKLQkJICAgICAgICAgICAgICAgICAgbGlzdCk7CisJCQkJICBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CiAKIAkJLyogV2UgbmVlZCB0byBzcGxpdCB0aGlzIG9mZiB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uICovCiAJCWxpc3RfbW92ZV90YWlsKCZoZWFkLT5saXN0LCAmaHctPmN0bHhxLmFjdGl2ZSk7CiAKIAkJLyogRmlsbCB0aGUgb3V0IHBhY2tldCAqLwotCQl1c2JfZmlsbF9idWxrX3VyYiggJihody0+Y3RseF91cmIpLCBody0+dXNiLAotCQkgICAgICAgICAgICAgICAgICAgaHctPmVuZHBfb3V0LAotCQkgICAgICAgICAgICAgICAgICAgJihoZWFkLT5vdXRidWYpLCBST1VORFVQNjQoaGVhZC0+b3V0YnVmc2l6ZSksCi0JCSAgICAgICAgICAgICAgICAgICBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2ssIGh3KTsKKwkJdXNiX2ZpbGxfYnVsa191cmIoJihody0+Y3RseF91cmIpLCBody0+dXNiLAorCQkJCSAgaHctPmVuZHBfb3V0LAorCQkJCSAgJihoZWFkLT5vdXRidWYpLCBST1VORFVQNjQoaGVhZC0+b3V0YnVmc2l6ZSksCisJCQkJICBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2ssIGh3KTsKIAkJaHctPmN0bHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVTQl9RVUVVRV9CVUxLOwogCiAJCS8qIE5vdyBzdWJtaXQgdGhlIFVSQiBhbmQgdXBkYXRlIHRoZSBDVExYJ3Mgc3RhdGUKQEAgLTM1MzEsNyArMzEwMSw3IEBACiAKIAkJCS8qIFN0YXJ0IHRoZSBJTiB3YWl0IHRpbWVyICovCiAJCQlody0+cmVzcF90aW1lcl9kb25lID0gMDsKLQkJCWh3LT5yZXNwdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAyKkhaOworCQkJaHctPnJlc3B0aW1lci5leHBpcmVzID0gamlmZmllcyArIDIgKiBIWjsKIAkJCWFkZF90aW1lcigmaHctPnJlc3B0aW1lcik7CiAKIAkJCWJyZWFrOwpAQCAtMzU0Miw4ICszMTEyLDkgQEAKIAkJCSAqIHRoaXMgQ1RMWCBiYWNrIGluIHRoZSAicGVuZGluZyIgcXVldWUKIAkJCSAqIGFuZCBzY2hlZHVsZSBhIHJlc2V0IC4uLgogCQkJICovCi0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgICAgICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CiAJCQlsaXN0X21vdmUoJmhlYWQtPmxpc3QsICZody0+Y3RseHEucGVuZGluZyk7CiAJCQlzZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOwogCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKQEAgLTM1NTEsMjMgKzMxMjIsMjAgQEAKIAkJfQogCiAJCWlmIChyZXN1bHQgPT0gLUVTSFVURE9XTikgewotCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdXJiIHNodXRkb3duIVxuIiwKLQkJCQkJIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgdXJiIHNodXRkb3duIVxuIiwKKwkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzdWJtaXQgQ1RMWFslZF06IGVycm9yPSVkXG4iLAotCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaGVhZC0+b3V0YnVmLnR5cGUpLCByZXN1bHQpOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzdWJtaXQgQ1RMWFslZF06IGVycm9yPSVkXG4iLAorCQkgICAgICAgbGUxNl90b19jcHUoaGVhZC0+b3V0YnVmLnR5cGUpLCByZXN1bHQpOwogCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBoZWFkKTsKLQl9IC8qIHdoaWxlICovCisJfQkJCS8qIHdoaWxlICovCiAKLQl1bmxvY2s6Cit1bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2sKICoKQEAgLTM1ODYsMTMgKzMxNTQsMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jd2xhbmRldmljZV90CQkqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKLQloZmEzODR4X3QJCSpodzsKLQloZmEzODR4X3VzYmluX3QJCSp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0Jc3RydWN0IHNrX2J1ZmYgICAgICAgICAgKnNrYiA9IE5VTEw7Ci0JaW50CQkJcmVzdWx0OwotCWludCAgICAgICAgICAgICAgICAgICAgIHVyYl9zdGF0dXM7Ci0JdTE2CQkJdHlwZTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSB1cmItPmNvbnRleHQ7CisJaGZhMzg0eF90ICpodzsKKwloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlpbnQgcmVzdWx0OworCWludCB1cmJfc3RhdHVzOworCXUxNiB0eXBlOwogCiAJZW51bSBVU0JJTl9BQ1RJT04gewogCQlIQU5ETEUsCkBAIC0zNjAwLDExICszMTY4LDcgQEAKIAkJQUJPUlQKIAl9IGFjdGlvbjsKIAotCURCRkVOVEVSOwotCi0JaWYgKCAhd2xhbmRldiB8fAotCSAgICAgIXdsYW5kZXYtPm5ldGRldiB8fAotCSAgICAgd2xhbmRldi0+aHdyZW1vdmVkICkKKwlpZiAoIXdsYW5kZXYgfHwgIXdsYW5kZXYtPm5ldGRldiB8fCB3bGFuZGV2LT5od3JlbW92ZWQpCiAJCWdvdG8gZXhpdDsKIAogCWh3ID0gd2xhbmRldi0+cHJpdjsKQEAgLTM2MTIsOSArMzE3Niw4IEBACiAJCWdvdG8gZXhpdDsKIAogCXNrYiA9IGh3LT5yeF91cmJfc2tiOwotCWlmICghc2tiIHx8IChza2ItPmRhdGEgIT0gdXJiLT50cmFuc2Zlcl9idWZmZXIpKSB7Ci0JCUJVRygpOwotCX0KKwlCVUdfT04oIXNrYiB8fCAoc2tiLT5kYXRhICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyKSk7CisKIAlody0+cnhfdXJiX3NrYiA9IE5VTEw7CiAKIAkvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIFVSQiAqLwpAQCAtMzYyMyw3ICszMTg2LDcgQEAKIAkJYWN0aW9uID0gSEFORExFOwogCiAJCS8qIENoZWNrIGZvciBzaG9ydCBwYWNrZXQgKi8KLQkJaWYgKCB1cmItPmFjdHVhbF9sZW5ndGggPT0gMCApIHsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKSB7CiAJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOwogCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyk7CiAJCQlhY3Rpb24gPSBSRVNVQk1JVDsKQEAgLTM2MzEsOSArMzE5NCw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSAtRVBJUEU6Ci0JCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJICAgICAgICAgICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOwotCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKQogCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKIAkJYWN0aW9uID0gQUJPUlQ7CkBAIC0zNjQyLDggKzMyMDUsOCBAQAogCWNhc2UgLUVJTFNFUToKIAljYXNlIC1FVElNRURPVVQ6CiAJY2FzZSAtRVBST1RPOgotCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKLQkJICAgICAhdGltZXJfcGVuZGluZygmaHctPnRocm90dGxlKSApIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkJICAgICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpKSB7CiAJCQltb2RfdGltZXIoJmh3LT50aHJvdHRsZSwgamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOwogCQl9CiAJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CkBAIC0zNjU3LDE5ICszMjIwLDIwIEBACiAKIAljYXNlIC1FTk9ERVY6CiAJY2FzZSAtRVNIVVRET1dOOgotCQlXTEFOX0xPR19ERUJVRygzLCJzdGF0dXM9JWQsIGRldmljZSByZW1vdmVkLlxuIiwgdXJiLT5zdGF0dXMpOworCQlwcl9kZWJ1Zygic3RhdHVzPSVkLCBkZXZpY2UgcmVtb3ZlZC5cbiIsIHVyYi0+c3RhdHVzKTsKIAkJYWN0aW9uID0gQUJPUlQ7CiAJCWJyZWFrOwogCiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgdXJiIGV4cGxpY2l0bHkgdW5saW5rZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCXByX2RlYnVnKCJzdGF0dXM9JWQsIHVyYiBleHBsaWNpdGx5IHVubGlua2VkLlxuIiwKKwkJICAgICAgIHVyYi0+c3RhdHVzKTsKIAkJYWN0aW9uID0gQUJPUlQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfREVCVUcoMywidXJiIHN0YXR1cz0lZCwgdHJhbnNmZXIgZmxhZ3M9MHgleFxuIiwKLQkJICAgICAgICAgICAgICAgICB1cmItPnN0YXR1cywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCXByX2RlYnVnKCJ1cmIgc3RhdHVzPSVkLCB0cmFuc2ZlciBmbGFncz0weCV4XG4iLAorCQkgICAgICAgdXJiLT5zdGF0dXMsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwogCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOwogCQlhY3Rpb24gPSBSRVNVQk1JVDsKIAkJYnJlYWs7CkBAIC0zNjgyLDkgKzMyNDYsOSBAQAogCQlyZXN1bHQgPSBzdWJtaXRfcnhfdXJiKGh3LCBHRlBfQVRPTUlDKTsKIAogCQlpZiAocmVzdWx0ICE9IDApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCSJGYXRhbCwgZmFpbGVkIHRvIHJlc3VibWl0IHJ4X3VyYi4gZXJyb3I9JWRcbiIsCi0JCQkJcmVzdWx0KTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYXRhbCwgZmFpbGVkIHRvIHJlc3VibWl0IHJ4X3VyYi4gZXJyb3I9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJfQogCX0KIApAQCAtMzY5Miw3ICszMjU2LDcgQEAKIAkvKiBOb3RlOiB0aGUgY2hlY2sgb2YgdGhlIHN3X3N1cHBvcnQgZmllbGQsIHRoZSB0eXBlIGZpZWxkIGRvZXNuJ3QKIAkgKiAgICAgICBoYXZlIGJpdCAxMiBzZXQgbGlrZSB0aGUgZG9jcyBzdWdnZXN0LgogCSAqLwotCXR5cGUgPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPnR5cGUpOworCXR5cGUgPSBsZTE2X3RvX2NwdSh1c2Jpbi0+dHlwZSk7CiAJaWYgKEhGQTM4NHhfVVNCX0lTUlhGUk0odHlwZSkpIHsKIAkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpIHsKIAkJCWlmICh1c2Jpbi0+dHhmcm0uZGVzYy5zd19zdXBwb3J0ID09IDB4MDEyMykgewpAQCAtMzcyOCwzMCArMzI5MiwyOCBAQAogCQlicmVhazsKIAogCWNhc2UgSEZBMzg0eF9VU0JfQlVGQVZBSUw6Ci0JCVdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIEJVRkFWQUlMIHBhY2tldCwgZnJtbGVuPSVkXG4iLAotCQkJdXNiaW4tPmJ1ZmF2YWlsLmZybWxlbik7CisJCXByX2RlYnVnKCJSZWNlaXZlZCBCVUZBVkFJTCBwYWNrZXQsIGZybWxlbj0lZFxuIiwKKwkJICAgICAgIHVzYmluLT5idWZhdmFpbC5mcm1sZW4pOwogCQlicmVhazsKIAogCWNhc2UgSEZBMzg0eF9VU0JfRVJST1I6Ci0JCVdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIFVTQl9FUlJPUiBwYWNrZXQsIGVycm9ydHlwZT0lZFxuIiwKLQkJCXVzYmluLT51c2JlcnJvci5lcnJvcnR5cGUpOworCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgVVNCX0VSUk9SIHBhY2tldCwgZXJyb3J0eXBlPSVkXG4iLAorCQkgICAgICAgdXNiaW4tPnVzYmVycm9yLmVycm9ydHlwZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfREVCVUcoMywiVW5yZWNvZ25pemVkIFVTQklOIHBhY2tldCwgdHlwZT0leCwgc3RhdHVzPSVkXG4iLAotCQkJdXNiaW4tPnR5cGUsIHVyYl9zdGF0dXMpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIlVucmVjb2duaXplZCBVU0JJTiBwYWNrZXQsIHR5cGU9JXgsIHN0YXR1cz0lZFxuIiwKKwkJICAgICAgIHVzYmluLT50eXBlLCB1cmJfc3RhdHVzKTsKIAkJYnJlYWs7Ci0JfSAvKiBzd2l0Y2ggKi8KKwl9CQkJLyogc3dpdGNoICovCiAKIGV4aXQ6CiAKIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX2N0bHgKICoKQEAgLTM3NzUsMTEgKzMzMzcsOSBAQAogc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jdGx4KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4sCiAJCQkgICAgICAgaW50IHVyYl9zdGF0dXMpCiB7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7Ci0JaW50CQkJcnVuX3F1ZXVlID0gMDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OworCWludCBydW5fcXVldWUgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIHJldHJ5OgogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMzc4OCw5ICszMzQ4LDggQEAKIAkgKiBhdCBhbnkgb25lIHRpbWUsIGFuZCB0aGlzIGlzIHRoZSBDVExYIHRoYXQgdGhlCiAJICogdGltZXJzIGFyZSB3YWl0aW5nIGZvci4KIAkgKi8KLQlpZiAoIGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkgeworCWlmIChsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSkKIAkJZ290byB1bmxvY2s7Ci0JfQogCiAJLyogUmVtb3ZlIHRoZSAicmVzcG9uc2UgdGltZW91dCIuIEl0J3MgcG9zc2libGUgdGhhdAogCSAqIHdlIGFyZSBhbHJlYWR5IHRvbyBsYXRlLCBhbmQgdGhhdCB0aGUgdGltZW91dCBpcwpAQCAtMzgwMyw4ICszMzYyLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAxOwogCX0KIApAQCAtMzgxOSwxNSArMzM3NywxNiBAQAogCQlpZiAodW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaHcsIGN0bHgpID09IDApCiAJCQlydW5fcXVldWUgPSAxOwogCX0gZWxzZSB7Ci0JCWNvbnN0IHUxNiBpbnR5cGUgPSAodXNiaW4tPnR5cGUmfmhvc3QyaGZhMzg0eF8xNigweDgwMDApKTsKKwkJY29uc3QgdTE2IGludHlwZSA9ICh1c2Jpbi0+dHlwZSAmIH5jcHVfdG9fbGUxNigweDgwMDApKTsKIAogCQkvKgogCQkgKiBDaGVjayB0aGF0IG91ciBtZXNzYWdlIGlzIHdoYXQgd2UncmUgZXhwZWN0aW5nIC4uLgogCQkgKi8KIAkJaWYgKGN0bHgtPm91dGJ1Zi50eXBlICE9IGludHlwZSkgewotCQkJV0xBTl9MT0dfV0FSTklORygiRXhwZWN0ZWQgSU5bJWRdLCByZWNlaXZlZCBJTlslZF0gLSBpZ25vcmVkLlxuIiwKLQkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGludHlwZSkpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJFeHBlY3RlZCBJTlslZF0sIHJlY2VpdmVkIElOWyVkXSAtIGlnbm9yZWQuXG4iLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICBsZTE2X3RvX2NwdShpbnR5cGUpKTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CiAKQEAgLTM4NDEsNyArMzQwMCw4IEBACiAJCQkgKiBvdXIgcmVxdWVzdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQuIE9kZCwKIAkJCSAqIGJ1dCBvdXIgT1VUIFVSQiBpcyBzdGlsbCBhbGl2ZS4uLgogCQkJICovCi0JCQlXTEFOX0xPR19ERUJVRygwLCAiQ2F1c2FsaXR5IHZpb2xhdGlvbjogcGxlYXNlIHJlYm9vdCBVbml2ZXJzZSwgb3IgZW1haWwgbGludXgtd2xhbi1kZXZlbEBsaXN0cy5saW51eC13bGFuLmNvbVxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJDYXVzYWxpdHkgdmlvbGF0aW9uOiBwbGVhc2UgcmVib290IFVuaXZlcnNlLCBvciBlbWFpbCBsaW51eC13bGFuLWRldmVsQGxpc3RzLmxpbnV4LXdsYW4uY29tXG4iKTsKIAkJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVNQX0NPTVBMRVRFOwogCQkJYnJlYWs7CiAKQEAgLTM4NjAsMTQgKzM0MjAsMTUgQEAKIAkJCS8qCiAJCQkgKiBUaHJvdyB0aGlzIENUTFggYXdheSAuLi4KIAkJCSAqLwotCQkJV0xBTl9MT0dfRVJST1IoIk1hdGNoZWQgSU4gVVJCLCBDVExYWyVkXSBpbiBpbnZhbGlkIHN0YXRlKCVzKS4iCi0JCQkgICAgICAgICAgICAgICAiIERpc2NhcmRlZC5cbiIsCi0JCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkJICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1hdGNoZWQgSU4gVVJCLCBDVExYWyVkXSBpbiBpbnZhbGlkIHN0YXRlKCVzKS4iCisJCQkgICAgICAgIiBEaXNjYXJkZWQuXG4iLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CiAJCQlpZiAodW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaHcsIGN0bHgpID09IDApCiAJCQkJcnVuX3F1ZXVlID0gMTsKIAkJCWJyZWFrOwotCQl9IC8qIHN3aXRjaCAqLworCQl9CQkvKiBzd2l0Y2ggKi8KIAl9CiAKIHVubG9jazoKQEAgLTM4NzUsMTEgKzM0MzYsOCBAQAogCiAJaWYgKHJ1bl9xdWV1ZSkKIAkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2Jpbl90eGNvbXBsCiAqCkBAIC0zODk3LDI1ICszNDU1LDIwIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF91c2Jpbl90ICp1c2JpbikKIHsKLQl1MTYJCQlzdGF0dXM7Ci0JREJGRU5URVI7CisJdTE2IHN0YXR1czsKIAotCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7IC8qIHllYWggSSBrbm93IGl0IHNheXMgdHlwZS4uLiovCisJc3RhdHVzID0gbGUxNl90b19jcHUodXNiaW4tPnR5cGUpOwkvKiB5ZWFoIEkga25vdyBpdCBzYXlzIHR5cGUuLi4gKi8KIAogCS8qIFdhcyB0aGVyZSBhbiBlcnJvcj8gKi8KLQlpZiAoSEZBMzg0eF9UWFNUQVRVU19JU0VSUk9SKHN0YXR1cykpIHsKKwlpZiAoSEZBMzg0eF9UWFNUQVRVU19JU0VSUk9SKHN0YXR1cykpCiAJCXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2LCBzdGF0dXMpOwotCX0gZWxzZSB7CisJZWxzZQogCQlwcmlzbTJzdGFfZXZfdHgod2xhbmRldiwgc3RhdHVzKTsKLQl9Ci0JLy8gcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXYpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2Jpbl9yeAogKgpAQCAtMzkzNSwzNCArMzQ4OCwyOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQloZmEzODR4X3VzYmluX3QgICAgICAgICAqdXNiaW4gPSAoaGZhMzg0eF91c2Jpbl90ICopIHNrYi0+ZGF0YTsKLQloZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSB3bGFuZGV2LT5wcml2OwotCWludCAgICAgICAgICAgICAgICAgICAgIGhkcmxlbjsKLQlwODAyMTFfcnhtZXRhX3QgICAgICAgICAqcnhtZXRhOwotCXUxNiAgICAgICAgICAgICAgICAgIGRhdGFfbGVuOwotCXUxNiAgICAgICAgICAgICAgICAgIGZjOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF91c2Jpbl90ICp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgc2tiLT5kYXRhOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCWludCBoZHJsZW47CisJcDgwMjExX3J4bWV0YV90ICpyeG1ldGE7CisJdTE2IGRhdGFfbGVuOworCXUxNiBmYzsKIAogCS8qIEJ5dGUgb3JkZXIgY29udmVydCBvbmNlIHVwIGZyb250LiAqLwotCXVzYmluLT5yeGZybS5kZXNjLnN0YXR1cyA9Ci0JCWhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpOwotCXVzYmluLT5yeGZybS5kZXNjLnRpbWUgPQotCQloZmEzODR4Mmhvc3RfMzIodXNiaW4tPnJ4ZnJtLmRlc2MudGltZSk7CisJdXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzID0gbGUxNl90b19jcHUodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKTsKKwl1c2Jpbi0+cnhmcm0uZGVzYy50aW1lID0gbGUzMl90b19jcHUodXNiaW4tPnJ4ZnJtLmRlc2MudGltZSk7CiAKIAkvKiBOb3cgaGFuZGxlIGZyYW1lIGJhc2VkIG9uIHBvcnQjICovCi0Jc3dpdGNoKCBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykgKQotCXsKKwlzd2l0Y2ggKEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSkgewogCWNhc2UgMDoKLQkJZmMgPSBpZWVlMmhvc3QxNih1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sKTsKKwkJZmMgPSBsZTE2X3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sKTsKIAogCQkvKiBJZiBleGNsdWRlIGFuZCB3ZSByZWNlaXZlIGFuIHVuZW5jcnlwdGVkLCBkcm9wIGl0ICovCi0JCWlmICggKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkgJiYKLQkJICAgICAhV0xBTl9HRVRfRkNfSVNXRVAoZmMpKXsKKwkJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpICYmCisJCSAgICAhV0xBTl9HRVRfRkNfSVNXRVAoZmMpKSB7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlkYXRhX2xlbiA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+cnhmcm0uZGVzYy5kYXRhX2xlbik7CisJCWRhdGFfbGVuID0gbGUxNl90b19jcHUodXNiaW4tPnJ4ZnJtLmRlc2MuZGF0YV9sZW4pOwogCiAJCS8qIEhvdyBtdWNoIGhlYWRlciBkYXRhIGRvIHdlIGhhdmU/ICovCiAJCWhkcmxlbiA9IHA4MDIxMV9oZWFkZXJsZW4oZmMpOwpAQCAtMzk3NCw4ICszNTIyLDcgQEAKIAkJICogd2l0aCBhbiAib3ZlcmxhcHBpbmciIGNvcHkKIAkJICovCiAJCW1lbW1vdmUoc2tiX3B1c2goc2tiLCBoZHJsZW4pLAotCQkgICAgICAgICZ1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sLAotCQkgICAgICAgIGhkcmxlbik7CisJCQkmdXNiaW4tPnJ4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCwgaGRybGVuKTsKIAogCQlza2ItPmRldiA9IHdsYW5kZXYtPm5ldGRldjsKIAkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwpAQCAtNDAwMSwyNCArMzU0OCwyNCBAQAogCQlicmVhazsKIAogCWNhc2UgNzoKLQkJaWYgKCAhIEhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApIHsKKwkJaWYgKCFIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykpIHsKIAkJCS8qIENvcHkgdG8gd2xhbnNuaWYgc2tiICovCi0JCQloZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXYsICZ1c2Jpbi0+cnhmcm0pOworCQkJaGZhMzg0eF9pbnRfcnhtb25pdG9yKHdsYW5kZXYsICZ1c2Jpbi0+cnhmcm0pOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQl9IGVsc2UgewotCQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgbW9uaXRvciBmcmFtZTogRkNTZXJyIHNldFxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJSZWNlaXZlZCBtb25pdG9yIGZyYW1lOiBGQ1NlcnIgc2V0XG4iKTsKIAkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCVdMQU5fTE9HX1dBUk5JTkcoIlJlY2VpdmVkIGZyYW1lIG9uIHVuc3VwcG9ydGVkIHBvcnQ9JWRcbiIsCi0JCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykgKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVjZWl2ZWQgZnJhbWUgb24gdW5zdXBwb3J0ZWQgcG9ydD0lZFxuIiwKKwkJICAgICAgIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSk7CiAJCWdvdG8gZG9uZTsKIAkJYnJlYWs7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC00MDQzLDk3ICszNTkwLDkzIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIGhmYTM4NHhfaW50X3J4bW9uaXRvciggd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYl9yeGZybV90ICpyeGZybSkKK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X3J4bW9uaXRvcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICBoZmEzODR4X3VzYl9yeGZybV90ICpyeGZybSkKIHsKLQloZmEzODR4X3J4X2ZyYW1lX3QgICAgICAgICAgICAgICpyeGRlc2MgPSAmKHJ4ZnJtLT5kZXNjKTsKLQl1bnNpZ25lZCBpbnQJCQkJaGRybGVuID0gMDsKLQl1bnNpZ25lZCBpbnQJCQkJZGF0YWxlbiA9IDA7Ci0JdW5zaWduZWQgaW50CQkJCXNrYmxlbiA9IDA7Ci0JdTgJCQkJKmRhdGFwOwotCXUxNgkJCQlmYzsKLQlzdHJ1Y3Qgc2tfYnVmZgkJCSpza2I7Ci0JaGZhMzg0eF90CQkgICAgICAgICpodyA9IHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9yeF9mcmFtZV90ICpyeGRlc2MgPSAmKHJ4ZnJtLT5kZXNjKTsKKwl1bnNpZ25lZCBpbnQgaGRybGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgZGF0YWxlbiA9IDA7CisJdW5zaWduZWQgaW50IHNrYmxlbiA9IDA7CisJdTggKmRhdGFwOworCXUxNiBmYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwogCi0KLQlEQkZFTlRFUjsKIAkvKiBEb24ndCBmb3JnZXQgdGhlIHN0YXR1cywgdGltZSwgYW5kIGRhdGFfbGVuIGZpZWxkcyBhcmUgaW4gaG9zdCBvcmRlciAqLwogCS8qIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZnJhbWUgaXMgKi8KLQlmYyA9IGllZWUyaG9zdDE2KHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CisJZmMgPSBsZTE2X3RvX2NwdShyeGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWhkcmxlbiA9IHA4MDIxMV9oZWFkZXJsZW4oZmMpOwotCWRhdGFsZW4gPSBoZmEzODR4Mmhvc3RfMTYocnhkZXNjLT5kYXRhX2xlbik7CisJZGF0YWxlbiA9IGxlMTZfdG9fY3B1KHJ4ZGVzYy0+ZGF0YV9sZW4pOwogCiAJLyogQWxsb2NhdGUgYW4gaW5kIG1lc3NhZ2UrZnJhbWVzaXplIHNrYiAqLwotCXNrYmxlbiA9IHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsKLQkJaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKwlza2JsZW4gPSBzaXplb2YocDgwMjExX2NhcGhkcl90KSArIGhkcmxlbiArIGRhdGFsZW4gKyBXTEFOX0NSQ19MRU47CiAKIAkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLwotCWlmICggc2tibGVuID4KLQkgICAgIChzaXplb2YocDgwMjExX2NhcGhkcl90KSArCi0JICAgICAgV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsICJvdmVybGVuIGZybTogbGVuPSV6ZFxuIiwKLQkJCSAgICAgICBza2JsZW4gLSBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJaWYgKHNrYmxlbiA+CisJICAgIChzaXplb2YocDgwMjExX2NhcGhkcl90KSArCisJICAgICBXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSkgeworCQlwcl9kZWJ1Zygib3ZlcmxlbiBmcm06IGxlbj0lemRcbiIsCisJCSAgICAgICBza2JsZW4gLSBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CiAJfQogCi0JaWYgKCAoc2tiID0gZGV2X2FsbG9jX3NrYihza2JsZW4pKSA9PSBOVUxMICkgewotCQlXTEFOX0xPR19FUlJPUigiYWxsb2Nfc2tiIGZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsIHNrYmxlbik7CisJaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbikpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiYWxsb2Nfc2tiIGZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsCisJCSAgICAgICBza2JsZW4pOwogCQlyZXR1cm47CiAJfQogCiAJLyogb25seSBwcmVwZW5kIHRoZSBwcmlzbSBoZWFkZXIgaWYgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KIAlpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgogCSAgICAoaHctPnNuaWZmaGRyICE9IDApKSB7Ci0JCXA4MDIxMV9jYXBoZHJfdAkJKmNhcGhkcjsKKwkJcDgwMjExX2NhcGhkcl90ICpjYXBoZHI7CiAJCS8qIFRoZSBORVcgaGVhZGVyIGZvcm1hdCEgKi8KIAkJZGF0YXAgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkpOwotCQljYXBoZHIgPSAocDgwMjExX2NhcGhkcl90KikgZGF0YXA7CisJCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QgKikgZGF0YXA7CiAKLQkJY2FwaGRyLT52ZXJzaW9uID0JaHRvbmwoUDgwMjExQ0FQVFVSRV9WRVJTSU9OKTsKLQkJY2FwaGRyLT5sZW5ndGggPQlodG9ubChzaXplb2YocDgwMjExX2NhcGhkcl90KSk7Ci0JCWNhcGhkci0+bWFjdGltZSA9CV9fY3B1X3RvX2JlNjQocnhkZXNjLT50aW1lKSAqIDEwMDA7Ci0JCWNhcGhkci0+aG9zdHRpbWUgPQlfX2NwdV90b19iZTY0KGppZmZpZXMpOwotCQljYXBoZHItPnBoeXR5cGUgPQlodG9ubCg0KTsgLyogZHNzX2RvdDExX2IgKi8KLQkJY2FwaGRyLT5jaGFubmVsID0JaHRvbmwoaHctPnNuaWZmX2NoYW5uZWwpOwotCQljYXBoZHItPmRhdGFyYXRlID0JaHRvbmwocnhkZXNjLT5yYXRlKTsKLQkJY2FwaGRyLT5hbnRlbm5hID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KLQkJY2FwaGRyLT5wcmlvcml0eSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCi0JCWNhcGhkci0+c3NpX3R5cGUgPQlodG9ubCgzKTsgLyogcnNzaV9yYXcgKi8KLQkJY2FwaGRyLT5zc2lfc2lnbmFsID0JaHRvbmwocnhkZXNjLT5zaWduYWwpOwotCQljYXBoZHItPnNzaV9ub2lzZSA9CWh0b25sKHJ4ZGVzYy0+c2lsZW5jZSk7Ci0JCWNhcGhkci0+cHJlYW1ibGUgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLwotCQljYXBoZHItPmVuY29kaW5nID0JaHRvbmwoMSk7IC8qIGNjayAqLworCQljYXBoZHItPnZlcnNpb24gPSBodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOworCQljYXBoZHItPmxlbmd0aCA9IGh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyLT5tYWN0aW1lID0gX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpICogMTAwMDsKKwkJY2FwaGRyLT5ob3N0dGltZSA9IF9fY3B1X3RvX2JlNjQoamlmZmllcyk7CisJCWNhcGhkci0+cGh5dHlwZSA9IGh0b25sKDQpOwkvKiBkc3NfZG90MTFfYiAqLworCQljYXBoZHItPmNoYW5uZWwgPSBodG9ubChody0+c25pZmZfY2hhbm5lbCk7CisJCWNhcGhkci0+ZGF0YXJhdGUgPSBodG9ubChyeGRlc2MtPnJhdGUpOworCQljYXBoZHItPmFudGVubmEgPSBodG9ubCgwKTsJLyogdW5rbm93biAqLworCQljYXBoZHItPnByaW9yaXR5ID0gaHRvbmwoMCk7CS8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5zc2lfdHlwZSA9IGh0b25sKDMpOwkvKiByc3NpX3JhdyAqLworCQljYXBoZHItPnNzaV9zaWduYWwgPSBodG9ubChyeGRlc2MtPnNpZ25hbCk7CisJCWNhcGhkci0+c3NpX25vaXNlID0gaHRvbmwocnhkZXNjLT5zaWxlbmNlKTsKKwkJY2FwaGRyLT5wcmVhbWJsZSA9IGh0b25sKDApOwkvKiB1bmtub3duICovCisJCWNhcGhkci0+ZW5jb2RpbmcgPSBodG9ubCgxKTsJLyogY2NrICovCiAJfQogCiAJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiIChjdGwgZnJhbWVzIG1heSBiZSBsZXNzIHRoYW4gYSBmdWxsIGhlYWRlcikgKi8KIAlkYXRhcCA9IHNrYl9wdXQoc2tiLCBoZHJsZW4pOwotCW1lbWNweSggZGF0YXAsICYocnhkZXNjLT5mcmFtZV9jb250cm9sKSwgaGRybGVuKTsKKwltZW1jcHkoZGF0YXAsICYocnhkZXNjLT5mcmFtZV9jb250cm9sKSwgaGRybGVuKTsKIAogCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KLQlpZiAoIGRhdGFsZW4gPiAwICkKLQl7CisJaWYgKGRhdGFsZW4gPiAwKSB7CiAJCWRhdGFwID0gc2tiX3B1dChza2IsIGRhdGFsZW4pOwogCQltZW1jcHkoZGF0YXAsIHJ4ZnJtLT5kYXRhLCBkYXRhbGVuKTsKIAogCQkvKiBjaGVjayBmb3IgdW5lbmNyeXB0ZWQgc3R1ZmYgaWYgV0VQIGJpdCBzZXQuICovCi0JCWlmICgqKGRhdGFwIC0gaGRybGVuICsgMSkgJiAweDQwKSAvLyB3ZXAgc2V0Ci0JCSAgaWYgKCgqKGRhdGFwKSA9PSAweGFhKSAmJiAoKihkYXRhcCsxKSA9PSAweGFhKSkKLQkJICAgICooZGF0YXAgLSBoZHJsZW4gKyAxKSAmPSAweGJmOyAvLyBjbGVhciB3ZXA7IGl0J3MgdGhlIDgwMi4yIGhlYWRlciEKKwkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApCS8qIHdlcCBzZXQgKi8KKwkJCWlmICgoKihkYXRhcCkgPT0gMHhhYSkgJiYgKCooZGF0YXAgKyAxKSA9PSAweGFhKSkKKwkJCQkqKGRhdGFwIC0gaGRybGVuICsgMSkgJj0gMHhiZjsJLy8gY2xlYXIgd2VwOyBpdCdzIHRoZSA4MDIuMiBoZWFkZXIhCiAJfQogCiAJaWYgKGh3LT5zbmlmZl9mY3MpIHsKIAkJLyogU2V0IHRoZSBGQ1MgKi8KIAkJZGF0YXAgPSBza2JfcHV0KHNrYiwgV0xBTl9DUkNfTEVOKTsKLQkJbWVtc2V0KCBkYXRhcCwgMHhmZiwgV0xBTl9DUkNfTEVOKTsKKwkJbWVtc2V0KGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOwogCX0KIAogCS8qIHBhc3MgaXQgYmFjayB1cCAqLwogCXByaXNtMnN0YV9ldl9yeCh3bGFuZGV2LCBza2IpOwogCi0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2Jpbl9pbmZvCiAqCkBAIC00MTUxLDE4ICszNjk0LDEzIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2luZm8od2xhbmRldmljZV90ICogd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICogdXNiaW4pCiB7Ci0JREJGRU5URVI7Ci0KLQl1c2Jpbi0+aW5mb2ZybS5pbmZvLmZyYW1lbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4pOworCXVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4gPQorCSAgICBsZTE2X3RvX2NwdSh1c2Jpbi0+aW5mb2ZybS5pbmZvLmZyYW1lbGVuKTsKIAlwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2LCAmdXNiaW4tPmluZm9mcm0uaW5mbyk7Ci0KLQlEQkZFWElUOwogfQogCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrCiAqCkBAIC00MTgxLDQ4ICszNzE5LDQ5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OwotCWhmYTM4NHhfdXNib3V0X3QJKnVzYm91dCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3VzYm91dF90ICp1c2JvdXQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogI2lmZGVmIERFQlVHX1VTQgogCWRicHJpbnRfdXJiKHVyYik7CiAjZW5kaWYKIAotCWlmICggd2xhbmRldiAmJgotCSAgICAgd2xhbmRldi0+bmV0ZGV2ICkgeworCWlmICh3bGFuZGV2ICYmIHdsYW5kZXYtPm5ldGRldikgewogCi0JCXN3aXRjaCh1cmItPnN0YXR1cykgeworCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJCWNhc2UgMDoKIAkJCWhmYTM4NHhfdXNib3V0X3R4KHdsYW5kZXYsIHVzYm91dCk7CiAJCQlicmVhazsKIAogCQljYXNlIC1FUElQRToKLQkJewotCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7Ci0JCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKLQkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwotCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKLQkJCWJyZWFrOwotCQl9CisJCQl7CisJCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJCSAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdAorCQkJCSAgICAoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykpCisJCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCQlicmVhazsKKwkJCX0KIAogCQljYXNlIC1FUFJPVE86CiAJCWNhc2UgLUVUSU1FRE9VVDoKIAkJY2FzZSAtRUlMU0VROgotCQl7Ci0JCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCXsKKwkJCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAotCQkJaWYgKCAhdGVzdF9hbmRfc2V0X2JpdChUSFJPVFRMRV9UWCwgJmh3LT51c2JfZmxhZ3MpCi0JCQkgICAgICYmICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpICkgewotCQkJCW1vZF90aW1lcigmaHctPnRocm90dGxlLAotCQkJCSAgICAgICAgICBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CisJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0CisJCQkJICAgIChUSFJPVFRMRV9UWCwgJmh3LT51c2JfZmxhZ3MpCisJCQkJICAgICYmICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpKSB7CisJCQkJCW1vZF90aW1lcigmaHctPnRocm90dGxlLAorCQkJCQkJICBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CisJCQkJfQorCQkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQkJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworCQkJCWJyZWFrOwogCQkJfQotCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKLQkJCW5ldGlmX3N0b3BfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKLQkJCWJyZWFrOwotCQl9CiAKIAkJY2FzZSAtRU5PRU5UOgogCQljYXNlIC1FU0hVVERPV046CkBAIC00MjMwLDE2ICszNzY5LDE0IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJV0xBTl9MT0dfSU5GTygidW5rbm93biB1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAidW5rbm93biB1cmItPnN0YXR1cz0lZFxuIiwKKwkJCSAgICAgICB1cmItPnN0YXR1cyk7CiAJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOwogCQkJYnJlYWs7Ci0JCX0gLyogc3dpdGNoICovCisJCX0JCS8qIHN3aXRjaCAqLwogCX0KLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjawogKgpAQCAtNDI1OCwyMiArMzc5NSwxOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewotCWhmYTM4NHhfdAkqaHcgPSB1cmItPmNvbnRleHQ7Ci0JaW50ICAgICAgICAgICAgIGRlbGV0ZV9yZXNwdGltZXIgPSAwOwotCWludCAgICAgICAgICAgICB0aW1lcl9vayA9IDE7Ci0JaW50CQlydW5fcXVldWUgPSAwOwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaGZhMzg0eF90ICpodyA9IHVyYi0+Y29udGV4dDsKKwlpbnQgZGVsZXRlX3Jlc3B0aW1lciA9IDA7CisJaW50IHRpbWVyX29rID0gMTsKKwlpbnQgcnVuX3F1ZXVlID0gMDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JREJGRU5URVI7Ci0KLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOworCXByX2RlYnVnKCJ1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOwogI2lmZGVmIERFQlVHX1VTQgogCWRicHJpbnRfdXJiKHVyYik7CiAjZW5kaWYKLQlpZiAoICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB8fAotCSAgICAgKHVyYi0+c3RhdHVzID09IC1FTk9ERVYpIHx8Ci0JICAgICAoaHcgPT0gTlVMTCkgKQorCWlmICgodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgfHwKKwkgICAgKHVyYi0+c3RhdHVzID09IC1FTk9ERVYpIHx8IChodyA9PSBOVUxMKSkKIAkJZ290byBkb25lOwogCiByZXRyeToKQEAgLTQyODUsNyArMzgxOSw3IEBACiAJICogcmVseSBvbiB0aGUgZGlzY29ubmVjdCBmdW5jdGlvbiB0byBjbGVhbiBldmVyeXRoaW5nCiAJICogdXAgaWYgc29tZW9uZSB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIuCiAJICovCi0JaWYgKCBsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApIHsKKwlpZiAobGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTQzMDQsMTYgKzM4MzgsMTUgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWh3LT5yZXFfdGltZXJfZG9uZSA9IDE7CiAJfQogCiAJY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CiAKLQlpZiAoIHVyYi0+c3RhdHVzID09IDAgKSB7CisJaWYgKHVyYi0+c3RhdHVzID09IDApIHsKIAkJLyogUmVxdWVzdCBwb3J0aW9uIG9mIGEgQ1RMWCBpcyBzdWNjZXNzZnVsICovCi0JCXN3aXRjaCAoIGN0bHgtPnN0YXRlICkgeworCQlzd2l0Y2ggKGN0bHgtPnN0YXRlKSB7CiAJCWNhc2UgQ1RMWF9SRVFfU1VCTUlUVEVEOgogCQkJLyogVGhpcyBPVVQtQUNLIHJlY2VpdmVkIGJlZm9yZSBJTiAqLwogCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9DT01QTEVURTsKQEAgLTQzMzAsMTggKzM4NjMsMTkgQEAKIAogCQlkZWZhdWx0OgogCQkJLyogVGhpcyBpcyBOT1QgYSB2YWxpZCBDVExYICJzdWNjZXNzIiBzdGF0ZSEgKi8KLQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJICAgICJJbGxlZ2FsIENUTFhbJWRdIHN1Y2Nlc3Mgc3RhdGUoJXMsICVkKSBpbiBPVVQgVVJCXG4iLAotCQkJICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCi0JCQkgICAgY3RseHN0cihjdGx4LT5zdGF0ZSksIHVyYi0+c3RhdHVzKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJJbGxlZ2FsIENUTFhbJWRdIHN1Y2Nlc3Mgc3RhdGUoJXMsICVkKSBpbiBPVVQgVVJCXG4iLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOwogCQkJYnJlYWs7Ci0JCX0gLyogc3dpdGNoICovCisJCX0JCS8qIHN3aXRjaCAqLwogCX0gZWxzZSB7CiAJCS8qIElmIHRoZSBwaXBlIGhhcyBzdGFsbGVkIHRoZW4gd2UgbmVlZCB0byByZXNldCBpdCAqLwotCQlpZiAoICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpICYmCi0JCSAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgewotCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAotCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJaWYgKCh1cmItPnN0YXR1cyA9PSAtRVBJUEUpICYmCisJCSAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CiAJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCQl9CiAKQEAgLTQzNTQsNyArMzg4OCw3IEBACiAJCXJ1bl9xdWV1ZSA9IDE7CiAJfQogCi0gZGVscmVzcDoKK2RlbHJlc3A6CiAJaWYgKGRlbGV0ZV9yZXNwdGltZXIpIHsKIAkJaWYgKCh0aW1lcl9vayA9IGRlbF90aW1lcigmaHctPnJlc3B0aW1lcikpICE9IDApIHsKIAkJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAxOwpAQCAtNDM2Myw3ICszODk3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKLQlpZiAoICF0aW1lcl9vayAmJiAoaHctPnJlc3BfdGltZXJfZG9uZSA9PSAwKSApIHsKKwlpZiAoIXRpbWVyX29rICYmIChody0+cmVzcF90aW1lcl9kb25lID09IDApKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCQlnb3RvIGRlbHJlc3A7CiAJfQpAQCAtNDM3MSwxMSArMzkwNSwxMCBAQAogCWlmIChydW5fcXVldWUpCiAJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKIAotIGRvbmU6Ci0JREJGRVhJVDsKK2RvbmU6CisJOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbgogKgpAQCAtNDM5NCwxMiArMzkyNywxMCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdAkqaHcgPSAoaGZhMzg0eF90KilkYXRhOwotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIApAQCAtNDQwOCwxNSArMzkzOSwxMyBAQAogCS8qIFJlbW92aW5nIHRoZSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGVtcHRpZXMKIAkgKiB0aGUgYWN0aXZlIGxpc3QgLi4uCiAJICovCi0JaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKQotCXsKKwlpZiAoIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpKSB7CiAJCS8qCiAJCSAqIFdlIG11c3QgZW5zdXJlIHRoYXQgb3VyIFVSQiBpcyByZW1vdmVkIGZyb20KIAkJICogdGhlIHN5c3RlbSwgaWYgaXQgaGFzbid0IGFscmVhZHkgZXhwaXJlZC4KIAkJICovCiAJCWh3LT5jdGx4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOwotCQlpZiAodXNiX3VubGlua191cmIoJmh3LT5jdGx4X3VyYikgPT0gLUVJTlBST0dSRVNTKQotCQl7CisJCWlmICh1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKSA9PSAtRUlOUFJPR1JFU1MpIHsKIAkJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKIAogCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CkBAIC00NDM2LDExICszOTY1LDggQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuCiAqCkBAIC00NDU5LDEzICszOTg1LDEwIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKLQl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIApAQCAtNDQ3NCwxMiArMzk5NywxMCBAQAogCS8qIFRoZSBhY3RpdmUgbGlzdCB3aWxsIGJlIGVtcHR5IGlmIHRoZQogCSAqIGFkYXB0ZXIgaGFzIGJlZW4gdW5wbHVnZ2VkIC4uLgogCSAqLwotCWlmICggIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkKLQl7CisJaWYgKCFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSkgewogCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CiAKLQkJaWYgKCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCApCi0JCXsKKwkJaWYgKHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCQkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOwogCQkJZ290byBkb25lOwpAQCAtNDQ4OCw4ICs0MDA5LDkgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKLSBkb25lOgotCURCRkVYSVQ7Citkb25lOgorCTsKKwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ1MDcsMTMgKzQwMjksMTAgQEAKICogQ2FsbCBjb250ZXh0OgogKglJbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiX3Rocm90dGxlZm4odW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKQEAgLTQ1MjEsMjUgKzQwNDAsMjAgQEAKIAkgKiBXZSBuZWVkIHRvIGNoZWNrIEJPVEggdGhlIFJYIGFuZCB0aGUgVFggdGhyb3R0bGUgY29udHJvbHMsCiAJICogc28gd2UgdXNlIHRoZSBiaXR3aXNlIE9SIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgT1IuCiAJICovCi0JV0xBTl9MT0dfREVCVUcoMywgImZsYWdzPTB4JWx4XG4iLCBody0+dXNiX2ZsYWdzKTsKLQlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCi0JICAgICAoCi0JICAgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgotCSAgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQotCSAgICAgICB8Ci0JICAgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfVFgsICZody0+dXNiX2ZsYWdzKSAmJgotCSAgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKLQkgICAgICkgKQotCXsKKwlwcl9kZWJ1ZygiZmxhZ3M9MHglbHhcbiIsIGh3LT51c2JfZmxhZ3MpOworCWlmICghaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAoKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9SWCwgJmh3LT51c2JfZmxhZ3MpICYmCisJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgIHwKKwkgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfVFgsICZody0+dXNiX2ZsYWdzKSAmJgorCSAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCisJICAgICkpIHsKIAkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2JjdGx4X3N1Ym1pdAogKgpAQCAtNDU1OCwxNiArNDA3MiwxMSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3Mgb3IgaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLWhmYTM4NHhfdXNiY3RseF9zdWJtaXQoCi0JaGZhMzg0eF90CQkqaHcsCi0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHgpCitzdGF0aWMgaW50IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JREJGRU5URVI7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAogCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CkBAIC00NTgyLDExICs0MDkxLDkgQEAKIAkJcmV0ID0gMDsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNib3V0X3R4CiAqCkBAIC00NjA4LDExICs0MTE1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYm91dF90ICp1c2JvdXQpCiB7Ci0JREJGRU5URVI7Ci0KIAlwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7Ci0KLQlEQkZFWElUOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2MzEsMTAgKzQxMzQsOSBAQAogKgogKiBDYWxsIGNvbnRleHQ6CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLWhmYTM4NHhfaXNnb29kX3BkcmNvZGUodTE2IHBkcmNvZGUpCitzdGF0aWMgaW50IGhmYTM4NHhfaXNnb29kX3BkcmNvZGUodTE2IHBkcmNvZGUpCiB7Ci0Jc3dpdGNoKHBkcmNvZGUpIHsKKwlzd2l0Y2ggKHBkcmNvZGUpIHsKIAljYXNlIEhGQTM4NHhfUERSX0VORF9PRl9QREE6CiAJY2FzZSBIRkEzODR4X1BEUl9QQ0JfUEFSVE5VTToKIAljYXNlIEhGQTM4NHhfUERSX1BEQVZFUjoKQEAgLTQ2NjgsMjMgKzQxNzAsMjAgQEAKIAkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlmICggcGRyY29kZSA8IDB4MTAwMCApIHsKKwkJaWYgKHBkcmNvZGUgPCAweDEwMDApIHsKIAkJCS8qIGNvZGUgaXMgT0ssIGJ1dCB3ZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBpcyAqLwotCQkJV0xBTl9MT0dfREVCVUcoMywKLQkJCQkiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgotCQkJCSJhc3N1bWluZyBpdCdzIG9rLlxuIiwKLQkJCQlwZHJjb2RlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCSAgICAgICAiYXNzdW1pbmcgaXQncyBvay5cbiIsIHBkcmNvZGUpOwogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7CiAJCQkvKiBiYWQgY29kZSAqLwotCQkJV0xBTl9MT0dfREVCVUcoMywKLQkJCQkiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgotCQkJCSIoPj0weDEwMDApLCBhc3N1bWluZyBpdCdzIGJhZC5cbiIsCi0JCQkJcGRyY29kZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCisJCQkgICAgICAgIig+PTB4MTAwMCksIGFzc3VtaW5nIGl0J3MgYmFkLlxuIiwgcGRyY29kZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7IC8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCisJcmV0dXJuIDA7CQkvKiBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKaW5kZXggZGZjN2IzYS4uMmFiY2UwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwpAQCAtNDgsMTAgKzQ4LDggQEAKICogODAyLjExIGZyYW1lIGNvbnZlcnNpb25zLgogKgogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQorKgorKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNjMsMTQgKzYxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogUHJvamVjdCBJbmNsdWRlcyAqLwotCiAjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKICNpbmNsdWRlICJwODAyMTFjb252LmgiCkBAIC04MCwzMCArNzQsOCBAQAogI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCiAjaW5jbHVkZSAicDgwMjExcmVxLmgiCiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFR5cGVzICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLwotCi1zdGF0aWMgdTgJb3VpX3JmYzEwNDJbXSA9IHsweDAwLCAweDAwLCAweDAwfTsKLXN0YXRpYyB1OAlvdWlfODAyMWhbXSA9IHsweDAwLCAweDAwLCAweGY4fTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworc3RhdGljIHU4IG91aV9yZmMxMDQyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAgfTsKK3N0YXRpYyB1OCBvdWlfODAyMWhbXSA9IHsgMHgwMCwgMHgwMCwgMHhmOCB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExcGJfZXRoZXJfdG9fODAyMTEKQEAgLTEzMCwzNSArMTAyLDM2IEBACiAqIENhbGwgY29udGV4dDoKICoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBza2JfZXRoZXJfdG9fcDgwMjExKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBldGhjb252LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCitpbnQgc2tiX2V0aGVyX3RvX3A4MDIxMSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBldGhjb252LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKIHsKIAotCXUxNiAgICAgICAgICBmYzsKLQl1MTYgICAgICAgICAgcHJvdG87Ci0Jd2xhbl9ldGhoZHJfdCAgIGVfaGRyOwotCXdsYW5fbGxjX3QgICAgICAqZV9sbGM7Ci0Jd2xhbl9zbmFwX3QgICAgICplX3NuYXA7CisJdTE2IGZjOworCXUxNiBwcm90bzsKKwl3bGFuX2V0aGhkcl90IGVfaGRyOworCXdsYW5fbGxjX3QgKmVfbGxjOworCXdsYW5fc25hcF90ICplX3NuYXA7CiAJaW50IGZvbzsKIAotCURCRkVOVEVSOwogCW1lbWNweSgmZV9oZHIsIHNrYi0+ZGF0YSwgc2l6ZW9mKGVfaGRyKSk7CiAKIAlpZiAoc2tiLT5sZW4gPD0gMCkgewotCQlXTEFOX0xPR19ERUJVRygxLCAiemVyby1sZW5ndGggc2tiIVxuIik7CisJCXByX2RlYnVnKCJ6ZXJvLWxlbmd0aCBza2IhXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKCBldGhjb252ID09IFdMQU5fRVRIQ09OVl9FTkNBUCApIHsgLyogc2ltcGxlc3QgY2FzZSAqLwotCSAgICAgICAgV0xBTl9MT0dfREVCVUcoMywgIkVOQ0FQIGxlbjogJWRcbiIsIHNrYi0+bGVuKTsKKwlpZiAoZXRoY29udiA9PSBXTEFOX0VUSENPTlZfRU5DQVApIHsJLyogc2ltcGxlc3QgY2FzZSAqLworCQlwcl9kZWJ1ZygiRU5DQVAgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOwogCQkvKiBoZXJlLCB3ZSBkb24ndCBjYXJlIHdoYXQga2luZCBvZiBldGhlciBmcm0uIEp1c3Qgc3RpY2sgaXQgKi8KIAkJLyogIGluIHRoZSA4MDIxMSBwYXlsb2FkICovCiAJCS8qIHdoaWNoIGlzIHRvIHNheSwgbGVhdmUgdGhlIHNrYiBhbG9uZS4gKi8KIAl9IGVsc2UgewogCQkvKiBzdGVwIDE6IGNsYXNzaWZ5IGV0aGVyIGZyYW1lLCBESVggb3IgODAyLjM/ICovCiAJCXByb3RvID0gbnRvaHMoZV9oZHIudHlwZSk7Ci0JCWlmICggcHJvdG8gPD0gMTUwMCApIHsKLQkJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogY29kZXMgPD0gMTUwMCByZXNlcnZlZCBmb3IgODAyLjMgbGVuZ3RocyAqLworCQlpZiAocHJvdG8gPD0gMTUwMCkgeworCQkJcHJfZGVidWcoIjgwMi4zIGxlbjogJWRcbiIsIHNrYi0+bGVuKTsKKwkJCS8qIGNvZGVzIDw9IDE1MDAgcmVzZXJ2ZWQgZm9yIDgwMi4zIGxlbmd0aHMgKi8KIAkJCS8qIGl0J3MgODAyLjMsIHBhc3MgZXRoZXIgcGF5bG9hZCB1bmNoYW5nZWQsICAqLwogCiAJCQkvKiB0cmltIG9mZiBldGhlcm5ldCBoZWFkZXIgKi8KQEAgLTE2NywyMyArMTQwLDI4IEBACiAJCQkvKiAgIGxlYXZlIG9mZiBhbnkgUEFEIG9jdGV0cy4gICovCiAJCQlza2JfdHJpbShza2IsIHByb3RvKTsKIAkJfSBlbHNlIHsKLQkJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRElYSUkgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkJcHJfZGVidWcoIkRJWElJIGxlbjogJWRcbiIsIHNrYi0+bGVuKTsKIAkJCS8qIGl0J3MgRElYSUksIHRpbWUgZm9yIHNvbWUgY29udmVyc2lvbiAqLwogCiAJCQkvKiB0cmltIG9mZiBldGhlcm5ldCBoZWFkZXIgKi8KIAkJCXNrYl9wdWxsKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKIAogCQkJLyogdGFjayBvbiBTTkFQICovCi0JCQllX3NuYXAgPSAod2xhbl9zbmFwX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKKwkJCWVfc25hcCA9CisJCQkgICAgKHdsYW5fc25hcF90ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fc25hcF90KSk7CiAJCQllX3NuYXAtPnR5cGUgPSBodG9ucyhwcm90byk7Ci0JCQlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoICYmIHA4MDIxMV9zdHRfZmluZHByb3RvKHByb3RvKSApIHsKLQkJCQltZW1jcHkoIGVfc25hcC0+b3VpLCBvdWlfODAyMWgsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCWlmIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaAorCQkJICAgICYmIHA4MDIxMV9zdHRfZmluZHByb3RvKHByb3RvKSkgeworCQkJCW1lbWNweShlX3NuYXAtPm91aSwgb3VpXzgwMjFoLAorCQkJCSAgICAgICBXTEFOX0lFRUVfT1VJX0xFTik7CiAJCQl9IGVsc2UgewotCQkJCW1lbWNweSggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTik7CisJCQkJbWVtY3B5KGVfc25hcC0+b3VpLCBvdWlfcmZjMTA0MiwKKwkJCQkgICAgICAgV0xBTl9JRUVFX09VSV9MRU4pOwogCQkJfQogCiAJCQkvKiB0YWNrIG9uIGxsYyAqLwotCQkJZV9sbGMgPSAod2xhbl9sbGNfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX2xsY190KSk7CisJCQllX2xsYyA9CisJCQkgICAgKHdsYW5fbGxjX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOwogCQkJZV9sbGMtPmRzYXAgPSAweEFBOwkvKiBTTkFQLCBzZWUgSUVFRSA4MDIgKi8KIAkJCWVfbGxjLT5zc2FwID0gMHhBQTsKIAkJCWVfbGxjLT5jdGwgPSAweDAzOwpAQCAtMTkzLDYyICsxNzEsNjEgQEAKIAogCS8qIFNldCB1cCB0aGUgODAyLjExIGhlYWRlciAqLwogCS8qIEl0J3MgYSBkYXRhIGZyYW1lICovCi0JZmMgPSBob3N0MmllZWUxNiggV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9GVFlQRV9EQVRBKSB8Ci0JCQkgIFdMQU5fU0VUX0ZDX0ZTVFlQRShXTEFOX0ZTVFlQRV9EQVRBT05MWSkpOworCWZjID0gY3B1X3RvX2xlMTYoV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9GVFlQRV9EQVRBKSB8CisJCQkgV0xBTl9TRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX0RBVEFPTkxZKSk7CiAKLQlzd2l0Y2ggKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCXN3aXRjaCAod2xhbmRldi0+bWFjbW9kZSkgewogCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTIsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCB3bGFuZGV2LT5ic3NpZCwgRVRIX0FMRU4pOwogCQlicmVhazsKIAljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgotCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19UT0RTKDEpKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmExLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJZmMgfD0gY3B1X3RvX2xlMTYoV0xBTl9TRVRfRkNfVE9EUygxKSk7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgd2xhbmRldi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLmRhZGRyLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19BUDoKLQkJZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfRlJPTURTKDEpKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmExLCAmZV9oZHIuZGFkZHIsIFdMQU5fQUREUl9MRU4pOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTIsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuc2FkZHIsIFdMQU5fQUREUl9MRU4pOworCQlmYyB8PSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19GUk9NRFMoMSkpOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTIsIHdsYW5kZXYtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLnNhZGRyLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVdMQU5fTE9HX0VSUk9SKCJFcnJvcjogQ29udmVydGluZyBldGggdG8gd2xhbiBpbiB1bmtub3duIG1vZGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRXJyb3I6IENvbnZlcnRpbmcgZXRoIHRvIHdsYW4gaW4gdW5rbm93biBtb2RlLlxuIik7CiAJCXJldHVybiAxOwogCQlicmVhazsKIAl9CiAKIAlwODAyMTFfd2VwLT5kYXRhID0gTlVMTDsKIAotCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpICYmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FTkNSWVBUKSkgewotCQkvLyBYWFhYIG5lZWQgdG8gcGljayBrZXludW0gb3RoZXIgdGhhbiBkZWZhdWx0PworCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpCisJICAgICYmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FTkNSWVBUKSkgeworCQkvKiBYWFhYIG5lZWQgdG8gcGljayBrZXludW0gb3RoZXIgdGhhbiBkZWZhdWx0PyAqLwogCi0jaWYgMQogCQlwODAyMTFfd2VwLT5kYXRhID0ga21hbGxvYyhza2ItPmxlbiwgR0ZQX0FUT01JQyk7Ci0jZWxzZQotCQlwODAyMTFfd2VwLT5kYXRhID0gc2tiLT5kYXRhOwotI2VuZGlmCiAKIAkJaWYgKChmb28gPSB3ZXBfZW5jcnlwdCh3bGFuZGV2LCBza2ItPmRhdGEsIHA4MDIxMV93ZXAtPmRhdGEsCiAJCQkJICAgICAgIHNrYi0+bGVuLAotCQkJCSh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spLAotCQkJCXA4MDIxMV93ZXAtPml2LCBwODAyMTFfd2VwLT5pY3YpKSkgewotCQkJV0xBTl9MT0dfV0FSTklORygiSG9zdCBlbi1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwgZm9vKTsKKwkJCQkgICAgICAgKHdsYW5kZXYtPgorCQkJCQlob3N0d2VwICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spLAorCQkJCSAgICAgICBwODAyMTFfd2VwLT5pdiwgcDgwMjExX3dlcC0+aWN2KSkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiSG9zdCBlbi1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwKKwkJCSAgICAgICBmb28pOwogCQkJcmV0dXJuIDI7CiAJCX0KLQkJZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworCQlmYyB8PSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CiAJfQogCi0KLQkvLwlza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKKwkvKiAgICAgIHNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOyAqLwogCiAJcDgwMjExX2hkci0+YTMuZmMgPSBmYzsKIAlwODAyMTFfaGRyLT5hMy5kdXIgPSAwOwogCXA4MDIxMV9oZHItPmEzLnNlcSA9IDA7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC0yNTYsMjIgKzIzMywyNCBAQAogc3RhdGljIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgY2hhciAqbWFjLAogCQkJICAgICAgIHA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhKQogewotICAgICAgICBpbnQgaTsKKwlpbnQgaTsKIAotICAgICAgICAvKiBHYXRoZXIgd2lyZWxlc3Mgc3B5IHN0YXRpc3RpY3M6IGZvciBlYWNoIHBhY2tldCwgY29tcGFyZSB0aGUKLSAgICAgICAgICogc291cmNlIGFkZHJlc3Mgd2l0aCBvdXQgbGlzdCwgYW5kIGlmIG1hdGNoLCBnZXQgdGhlIHN0YXRzLi4uICovCisJLyogR2F0aGVyIHdpcmVsZXNzIHNweSBzdGF0aXN0aWNzOiBmb3IgZWFjaCBwYWNrZXQsIGNvbXBhcmUgdGhlCisJICogc291cmNlIGFkZHJlc3Mgd2l0aCBvdXQgbGlzdCwgYW5kIGlmIG1hdGNoLCBnZXQgdGhlIHN0YXRzLi4uICovCiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHdsYW5kZXYtPnNweV9udW1iZXI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCB3bGFuZGV2LT5zcHlfbnVtYmVyOyBpKyspIHsKIAotICAgICAgICAgICAgICAgIGlmICghbWVtY21wKHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKSkgeworCQlpZiAoIW1lbWNtcCh3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgbWFjLCBFVEhfQUxFTikpIHsKIAkJCW1lbWNweSh3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgbWFjLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5sZXZlbCA9IHJ4bWV0YS0+c2lnbmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0ubm9pc2UgPSByeG1ldGEtPm5vaXNlOwotICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0ucXVhbCA9IChyeG1ldGEtPnNpZ25hbCA+IHJ4bWV0YS0+bm9pc2UpID8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnhtZXRhLT5zaWduYWwgLSByeG1ldGEtPm5vaXNlKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMHg3OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0ubGV2ZWwgPSByeG1ldGEtPnNpZ25hbDsKKwkJCXdsYW5kZXYtPnNweV9zdGF0W2ldLm5vaXNlID0gcnhtZXRhLT5ub2lzZTsKKwkJCXdsYW5kZXYtPnNweV9zdGF0W2ldLnF1YWwgPQorCQkJICAgIChyeG1ldGEtPnNpZ25hbCA+CisJCQkgICAgIHJ4bWV0YS0+bm9pc2UpID8gKHJ4bWV0YS0+c2lnbmFsIC0KKwkJCQkJICAgICAgIHJ4bWV0YS0+bm9pc2UpIDogMDsKKwkJCXdsYW5kZXYtPnNweV9zdGF0W2ldLnVwZGF0ZWQgPSAweDc7CisJCX0KKwl9CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjkzLDQzICsyNzIsNDIgQEAKICogQ2FsbCBjb250ZXh0OgogKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgc2tiX3A4MDIxMV90b19ldGhlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBldGhjb252LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQluZXRkZXZpY2VfdCAgICAgKm5ldGRldiA9IHdsYW5kZXYtPm5ldGRldjsKLQl1MTYgICAgICAgICAgZmM7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGg7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgcGF5bG9hZF9vZmZzZXQ7Ci0JdTgJCWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXU4CQlzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKLQlwODAyMTFfaGRyX3QgICAgKndfaGRyOwotCXdsYW5fZXRoaGRyX3QgICAqZV9oZHI7Ci0Jd2xhbl9sbGNfdCAgICAgICplX2xsYzsKLQl3bGFuX3NuYXBfdCAgICAgKmVfc25hcDsKKwluZXRkZXZpY2VfdCAqbmV0ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCXUxNiBmYzsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW5ndGg7CisJdW5zaWduZWQgaW50IHBheWxvYWRfb2Zmc2V0OworCXU4IGRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCXU4IHNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCXA4MDIxMV9oZHJfdCAqd19oZHI7CisJd2xhbl9ldGhoZHJfdCAqZV9oZHI7CisJd2xhbl9sbGNfdCAqZV9sbGM7CisJd2xhbl9zbmFwX3QgKmVfc25hcDsKIAogCWludCBmb287CiAKLQlEQkZFTlRFUjsKLQogCXBheWxvYWRfbGVuZ3RoID0gc2tiLT5sZW4gLSBXTEFOX0hEUl9BM19MRU4gLSBXTEFOX0NSQ19MRU47CiAJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BM19MRU47CiAKIAl3X2hkciA9IChwODAyMTFfaGRyX3QgKikgc2tiLT5kYXRhOwogCi0gICAgICAgIC8qIHNldHVwIHNvbWUgdmFycyBmb3IgY29udmVuaWVuY2UgKi8KLQlmYyA9IGllZWUyaG9zdDE2KHdfaGRyLT5hMy5mYyk7Ci0JaWYgKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJLyogc2V0dXAgc29tZSB2YXJzIGZvciBjb252ZW5pZW5jZSAqLworCWZjID0gbGUxNl90b19jcHUod19oZHItPmEzLmZjKTsKKwlpZiAoKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDApKSB7CiAJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmExLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTIsIFdMQU5fRVRIQUREUl9MRU4pOwotCX0gZWxzZSBpZiggKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDEpICkgeworCX0gZWxzZSBpZiAoKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDEpKSB7CiAJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmExLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTMsIFdMQU5fRVRIQUREUl9MRU4pOwotCX0gZWxzZSBpZiggKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDEpICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDApICkgeworCX0gZWxzZSBpZiAoKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDEpICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDApKSB7CiAJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmEzLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTIsIFdMQU5fRVRIQUREUl9MRU4pOwogCX0gZWxzZSB7CiAJCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTRfTEVOOwogCQlpZiAocGF5bG9hZF9sZW5ndGggPCBXTEFOX0hEUl9BNF9MRU4gLSBXTEFOX0hEUl9BM19MRU4pIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJBNCBmcmFtZSB0b28gc2hvcnQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiQTQgZnJhbWUgdG9vIHNob3J0IVxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlwYXlsb2FkX2xlbmd0aCAtPSAoV0xBTl9IRFJfQTRfTEVOIC0gV0xBTl9IRFJfQTNfTEVOKTsKQEAgLTMzOCwxOCArMzE2LDIyIEBACiAJfQogCiAJLyogcGVyZm9ybSBkZS13ZXAgaWYgbmVjZXNzYXJ5Li4gKi8KLQlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiBXTEFOX0dFVF9GQ19JU1dFUChmYykgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpKSB7CisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgJiYgV0xBTl9HRVRfRkNfSVNXRVAoZmMpCisJICAgICYmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUNSWVBUKSkgewogCQlpZiAocGF5bG9hZF9sZW5ndGggPD0gOCkgewotCQkJV0xBTl9MT0dfRVJST1IoIldFUCBmcmFtZSB0b28gc2hvcnQgKCV1KS5cbiIsCi0JCQkJCXNrYi0+bGVuKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiV0VQIGZyYW1lIHRvbyBzaG9ydCAoJXUpLlxuIiwKKwkJCSAgICAgICBza2ItPmxlbik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAoKGZvbyA9IHdlcF9kZWNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgNCwKIAkJCQkgICAgICAgcGF5bG9hZF9sZW5ndGggLSA4LCAtMSwKIAkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQsCi0JCQkJICAgICAgIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgcGF5bG9hZF9sZW5ndGggLSA0KSkpIHsKKwkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKworCQkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCAtIDQpKSkgewogCQkJLyogZGUtd2VwIGZhaWxlZCwgZHJvcCBza2IuICovCi0JCQlXTEFOX0xPR19ERUJVRygxLCAiSG9zdCBkZS1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwgZm9vKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkhvc3QgZGUtV0VQIGZhaWxlZCwgZHJvcHBpbmcgZnJhbWUgKCVkKS5cbiIsCisJCQkgICAgICAgZm9vKTsKIAkJCXdsYW5kZXYtPnJ4LmRlY3J5cHRfZXJyKys7CiAJCQlyZXR1cm4gMjsKIAkJfQpAQCAtMzY3LDIxICszNDksMjIgQEAKIAllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCk7CiAKIAllX2xsYyA9ICh3bGFuX2xsY190ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCk7Ci0JZV9zbmFwID0gKHdsYW5fc25hcF90ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIHNpemVvZih3bGFuX2xsY190KSk7CisJZV9zbmFwID0KKwkgICAgKHdsYW5fc25hcF90ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIHNpemVvZih3bGFuX2xsY190KSk7CiAKIAkvKiBUZXN0IGZvciB0aGUgdmFyaW91cyBlbmNvZGluZ3MgKi8KLQlpZiAoIChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9ldGhoZHJfdCkpICYmCi0JICAgICAoIGVfbGxjLT5kc2FwICE9IDB4YWEgfHwgZV9sbGMtPnNzYXAgIT0gMHhhYSApICYmCi0JICAgICAoKG1lbWNtcChkYWRkciwgZV9oZHItPmRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKSA9PSAwKSB8fAorCWlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fZXRoaGRyX3QpKSAmJgorCSAgICAoZV9sbGMtPmRzYXAgIT0gMHhhYSB8fCBlX2xsYy0+c3NhcCAhPSAweGFhKSAmJgorCSAgICAoKG1lbWNtcChkYWRkciwgZV9oZHItPmRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKSA9PSAwKSB8fAogCSAgICAgKG1lbWNtcChzYWRkciwgZV9oZHItPnNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKSA9PSAwKSkpIHsKLQkJV0xBTl9MT0dfREVCVUcoMywgIjgwMi4zIEVOQ0FQIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwkJcHJfZGVidWcoIjgwMi4zIEVOQ0FQIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKIAkJLyogODAyLjMgRW5jYXBzdWxhdGVkICovCiAJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KLQkJaWYgKCBwYXlsb2FkX2xlbmd0aCA+IChuZXRkZXYtPm10dSArIFdMQU5fRVRISERSX0xFTikpIHsKKwkJaWYgKHBheWxvYWRfbGVuZ3RoID4gKG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIGVuY2FwJ2QuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlXTEFOX0xPR19FUlJPUigiRU5DQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKLQkJCQlwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pOworCQkJcHJpbnRrKEtFUk5fRVJSICJFTkNBUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJICAgICAgIHBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSArIFdMQU5fRVRISERSX0xFTik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC0zOTAsMjUgKzM3MywyNSBAQAogCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLwogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKIAotCX0gZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpICYmCi0JCSAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgotCQkgICAoZV9sbGMtPnNzYXAgPT0gMHhhYSkgJiYKLQkJICAgKGVfbGxjLT5jdGwgPT0gMHgwMykgJiYKLQkJICAgKCgobWVtY21wKCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKT09MCkgJiYKLQkJICAgIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCkgJiYKLQkJICAgIChwODAyMTFfc3R0X2ZpbmRwcm90byhpZWVlMmhvc3QxNihlX3NuYXAtPnR5cGUpKSkpIHx8Ci0JCSAgICAobWVtY21wKCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSE9MCkpKQotCXsKLQkJV0xBTl9MT0dfREVCVUcoMywgIlNOQVArUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkKKwkJICAgJiYgKGVfbGxjLT5kc2FwID09IDB4YWEpICYmIChlX2xsYy0+c3NhcCA9PSAweGFhKQorCQkgICAmJiAoZV9sbGMtPmN0bCA9PSAweDAzKQorCQkgICAmJgorCQkgICAoKChtZW1jbXAoZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTikgPT0gMCkKKwkJICAgICAmJiAoZXRoY29udiA9PSBXTEFOX0VUSENPTlZfODAyMWgpCisJCSAgICAgJiYgKHA4MDIxMV9zdHRfZmluZHByb3RvKGxlMTZfdG9fY3B1KGVfc25hcC0+dHlwZSkpKSkKKwkJICAgIHx8IChtZW1jbXAoZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTikgIT0KKwkJCTApKSkgeworCQlwcl9kZWJ1ZygiU05BUCtSRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKIAkJLyogaXQncyBhIFNOQVAgKyBSRkMxMDQyIGZyYW1lICYmIHByb3RvY29sIGlzIGluIFNUVCAqLwogCQkvKiBidWlsZCA4MDIuMyArIFJGQzEwNDIgKi8KIAogCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCi0JCWlmICggcGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSApIHsKKwkJaWYgKHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUpIHsKIAkJCS8qIEEgYm9ndXMgbGVuZ3RoIGV0aGZybSBoYXMgYmVlbiBzZW50LiAqLwogCQkJLyogSXMgc29tZW9uZSB0cnlpbmcgYW4gb2Zsb3cgYXR0YWNrPyAqLwotCQkJV0xBTl9MT0dfRVJST1IoIlNOQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKLQkJCQlwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTTkFQIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkgICAgICAgcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1KTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTQyNCwxMSArNDA3LDEwIEBACiAJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOwogCi0JfSAgZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpICYmCi0JCSAgICAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYKLQkJICAgIChlX2xsYy0+c3NhcCA9PSAweGFhKSAmJgotCQkgICAgKGVfbGxjLT5jdGwgPT0gMHgwMykgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMWgvUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkKKwkJICAgJiYgKGVfbGxjLT5kc2FwID09IDB4YWEpICYmIChlX2xsYy0+c3NhcCA9PSAweGFhKQorCQkgICAmJiAoZV9sbGMtPmN0bCA9PSAweDAzKSkgeworCQlwcl9kZWJ1ZygiODAyLjFoL1JGQzEwNDIgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiBpdCdzIGFuIDgwMi4xaCBmcmFtZSB8fCAoYW4gUkZDMTA0MiAmJiBwcm90b2NvbCBpcyBub3QgaW4gU1RUKSAqLwogCQkvKiBidWlsZCBhIERJWElJICsgUkZDODk0ICovCiAKQEAgLTQzNywxMCArNDE5LDkgQEAKIAkJICAgID4gbmV0ZGV2LT5tdHUpIHsKIAkJCS8qIEEgYm9ndXMgbGVuZ3RoIGV0aGZybSBoYXMgYmVlbiBzZW50LiAqLwogCQkJLyogSXMgc29tZW9uZSB0cnlpbmcgYW4gb2Zsb3cgYXR0YWNrPyAqLwotCQkJV0xBTl9MT0dfRVJST1IoIkRJWElJIGZyYW1lIHRvbyBsYXJnZSAoJWxkID4gJWQpXG4iLAotCQkJCQkobG9uZyBpbnQpIChwYXlsb2FkX2xlbmd0aCAtIHNpemVvZih3bGFuX2xsY190KSAtCi0JCQkJCQkgICAgc2l6ZW9mKHdsYW5fc25hcF90KSksCi0JCQkJCW5ldGRldi0+bXR1KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCisJCQkgICAgICAgKGxvbmcgaW50KShwYXlsb2FkX2xlbmd0aCAtIHNpemVvZih3bGFuX2xsY190KSAtCisJCQkJCSAgc2l6ZW9mKHdsYW5fc25hcF90KSksIG5ldGRldi0+bXR1KTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTQ2MiwxOSArNDQzLDE4IEBACiAJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDMsICJOT04tRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQlwcl9kZWJ1ZygiTk9OLUVOQ0FQIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKIAkJLyogYW55IE5PTi1FTkNBUCAqLwogCQkvKiBpdCdzIGEgZ2VuZXJpYyA4MDIxMStMTEMgb3IgSVBYICdSYXcgODAyLjMnICovCiAJCS8qICBidWlsZCBhbiA4MDIuMyBmcmFtZSAqLwogCQkvKiBhbGxvY2F0ZSBzcGFjZSBhbmQgc2V0dXAgaG9zdGJ1ZiAqLwogCiAJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KLQkJaWYgKCBwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1ICkgeworCQlpZiAocGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlXTEFOX0xPR19FUlJPUigiT1RIRVIgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKLQkJCQlwYXlsb2FkX2xlbmd0aCwKLQkJCQluZXRkZXYtPm10dSk7CisJCQlwcmludGsoS0VSTl9FUlIgIk9USEVSIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkgICAgICAgcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1KTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTQ5MiwyNiArNDcyLDI2IEBACiAKIAl9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogTm90ZSB0aGF0IGV0aF90eXBlX3RyYW5zKCkgZXhwZWN0cyBhbiBza2Igdy8gc2tiLT5kYXRhIHBvaW50aW5nCi0gICAgICAgICAqIGF0IHRoZSBNQUMgaGVhZGVyLCBpdCB0aGVuIHNldHMgdGhlIGZvbGxvd2luZyBza2IgbWVtYmVyczoKLSAgICAgICAgICogc2tiLT5tYWNfaGVhZGVyLAotICAgICAgICAgKiBza2ItPmRhdGEsIGFuZAotICAgICAgICAgKiBza2ItPnBrdF90eXBlLgotICAgICAgICAgKiBJdCB0aGVuIF9yZXR1cm5zXyB0aGUgdmFsdWUgdGhhdCBfd2UncmVfIHN1cHBvc2VkIHRvIHN0dWZmIGluCi0gICAgICAgICAqIHNrYi0+cHJvdG9jb2wuICBUaGlzIGlzIG51dHMuCi0gICAgICAgICAqLworCS8qCisJICogTm90ZSB0aGF0IGV0aF90eXBlX3RyYW5zKCkgZXhwZWN0cyBhbiBza2Igdy8gc2tiLT5kYXRhIHBvaW50aW5nCisJICogYXQgdGhlIE1BQyBoZWFkZXIsIGl0IHRoZW4gc2V0cyB0aGUgZm9sbG93aW5nIHNrYiBtZW1iZXJzOgorCSAqIHNrYi0+bWFjX2hlYWRlciwKKwkgKiBza2ItPmRhdGEsIGFuZAorCSAqIHNrYi0+cGt0X3R5cGUuCisJICogSXQgdGhlbiBfcmV0dXJuc18gdGhlIHZhbHVlIHRoYXQgX3dlJ3JlXyBzdXBwb3NlZCB0byBzdHVmZiBpbgorCSAqIHNrYi0+cHJvdG9jb2wuICBUaGlzIGlzIG51dHMuCisJICovCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAotICAgICAgICAvKiBqa3JpZWdsOiBwcm9jZXNzIHNpZ25hbCBhbmQgbm9pc2UgYXMgc2V0IGluIGhmYTM4NHhfaW50X3J4KCkgKi8KKwkvKiBqa3JpZWdsOiBwcm9jZXNzIHNpZ25hbCBhbmQgbm9pc2UgYXMgc2V0IGluIGhmYTM4NHhfaW50X3J4KCkgKi8KIAkvKiBqa3JpZWdsOiBvbmx5IHByb2Nlc3Mgc2lnbmFsL25vaXNlIGlmIHJlcXVlc3RlZCBieSBpd3NweSAqLwotICAgICAgICBpZiAod2xhbmRldi0+c3B5X251bWJlcikKLSAgICAgICAgICAgICAgICBvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldiwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgUDgwMjExU0tCX1JYTUVUQShza2IpKTsKKwlpZiAod2xhbmRldi0+c3B5X251bWJlcikKKwkJb3Jpbm9jb19zcHlfZ2F0aGVyKHdsYW5kZXYsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsCisJCQkJICAgUDgwMjExU0tCX1JYTUVUQShza2IpKTsKIAogCS8qIEZyZWUgdGhlIG1ldGFkYXRhICovCiAJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzNiwxMSArNTE2LDExIEBACiAJLyogQWx3YXlzIHJldHVybiBmb3VuZCBmb3Igbm93LiAgVGhpcyBpcyB0aGUgYmVoYXZpb3IgdXNlZCBieSB0aGUgKi8KIAkvKiAgWm9vbSBXaW45NSBkcml2ZXIgd2hlbiA4MDIuMWggbW9kZSBpcyBzZWxlY3RlZCAqLwogCS8qIFRPRE86IElmIG5lY2Vzc2FyeSwgYWRkIGFuIGFjdHVhbCBzZWFyY2ggd2UnbGwgcHJvYmFibHkKLQkJIG5lZWQgdGhpcyB0byBtYXRjaCB0aGUgQ01BQydzIHdheSBvZiBkb2luZyB0aGluZ3MuCi0JCSBOZWVkIHRvIGRvIHNvbWUgdGVzdGluZyB0byBjb25maXJtLgotCSovCisJICAgbmVlZCB0aGlzIHRvIG1hdGNoIHRoZSBDTUFDJ3Mgd2F5IG9mIGRvaW5nIHRoaW5ncy4KKwkgICBOZWVkIHRvIGRvIHNvbWUgdGVzdGluZyB0byBjb25maXJtLgorCSAqLwogCi0JaWYgKHByb3RvID09IDB4ODBmMykgIC8qIEFQUExFVEFMSyAqLworCWlmIChwcm90byA9PSAweDgwZjMpCS8qIEFQUExFVEFMSyAqLwogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtNTYxLDI2ICs1NDEsMjQgQEAKICogQ2FsbCBjb250ZXh0OgogKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7Ci0JcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKKwlwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YTsKKwlwODAyMTFfZnJtbWV0YV90ICpmcm1tZXRhOwogCi0JREJGRU5URVI7CiAJLyogU2FuaXR5IGNoZWNrcyAqLwotCWlmICggc2tiPT1OVUxMICkgewkJCS8qIGJhZCBza2IgKi8KLQkJV0xBTl9MT0dfREVCVUcoMSwgIkNhbGxlZCB3LyBudWxsIHNrYi5cbiIpOworCWlmIChza2IgPT0gTlVMTCkgewkvKiBiYWQgc2tiICovCisJCXByX2RlYnVnKCJDYWxsZWQgdy8gbnVsbCBza2IuXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAlmcm1tZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKLQlpZiAoIGZybW1ldGEgPT0gTlVMTCApIHsgCQkvKiBubyBtYWdpYyAqLwotCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIGJhZCBmcm1tZXRhIG1hZ2ljLlxuIik7CisJaWYgKGZybW1ldGEgPT0gTlVMTCkgewkvKiBubyBtYWdpYyAqLworCQlwcl9kZWJ1ZygiQ2FsbGVkIHcvIGJhZCBmcm1tZXRhIG1hZ2ljLlxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAJcnhtZXRhID0gZnJtbWV0YS0+cng7Ci0JaWYgKCByeG1ldGEgPT0gTlVMTCApIHsJCQkvKiBiYWQgbWV0YSBwdHIgKi8KLQkJV0xBTl9MT0dfREVCVUcoMSwgIkNhbGxlZCB3LyBiYWQgcnhtZXRhIHB0ci5cbiIpOworCWlmIChyeG1ldGEgPT0gTlVMTCkgewkvKiBiYWQgbWV0YSBwdHIgKi8KKwkJcHJfZGVidWcoIkNhbGxlZCB3LyBiYWQgcnhtZXRhIHB0ci5cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC01OTAsNyArNTY4LDYgQEAKIAkvKiBDbGVhciBza2ItPmNiICovCiAJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiBleGl0OgotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC02MTAsMTkgKzU4NywxNiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQKLXA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludAkJCXJlc3VsdCA9IDA7Ci0JcDgwMjExX3J4bWV0YV90CQkqcnhtZXRhOwotCXA4MDIxMV9mcm1tZXRhX3QJKmZybW1ldGE7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YTsKKwlwODAyMTFfZnJtbWV0YV90ICpmcm1tZXRhOwogCiAJLyogSWYgdGhlc2UgYWxyZWFkeSBoYXZlIG1ldGFkYXRhLCB3ZSBlcnJvciBvdXQhICovCiAJaWYgKFA4MDIxMVNLQl9SWE1FVEEoc2tiKSAhPSBOVUxMKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCIlczogUlhtZXRhIGFscmVhZHkgYXR0YWNoZWQhXG4iLAotCQkJCXdsYW5kZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSWG1ldGEgYWxyZWFkeSBhdHRhY2hlZCFcbiIsCisJCSAgICAgICB3bGFuZGV2LT5uYW1lKTsKIAkJcmVzdWx0ID0gMDsKIAkJZ290byBleGl0OwogCX0KQEAgLTYzMCw5ICs2MDQsOSBAQAogCS8qIEFsbG9jYXRlIHRoZSByeG1ldGEgKi8KIAlyeG1ldGEgPSBrbWFsbG9jKHNpemVvZihwODAyMTFfcnhtZXRhX3QpLCBHRlBfQVRPTUlDKTsKIAotCWlmICggcnhtZXRhID09IE5VTEwgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHJ4bWV0YS5cbiIsCi0JCQkJd2xhbmRldi0+bmFtZSk7CisJaWYgKHJ4bWV0YSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSByeG1ldGEuXG4iLAorCQkgICAgICAgd2xhbmRldi0+bmFtZSk7CiAJCXJlc3VsdCA9IDE7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC02NDQsMTEgKzYxOCwxMCBAQAogCiAJLyogT3ZlcmxheSBhIGZybW1ldGFfdCBvbnRvIHNrYi0+Y2IgKi8KIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHA4MDIxMV9mcm1tZXRhX3QpKTsKLQlmcm1tZXRhID0gKHA4MDIxMV9mcm1tZXRhX3QqKShza2ItPmNiKTsKKwlmcm1tZXRhID0gKHA4MDIxMV9mcm1tZXRhX3QgKikgKHNrYi0+Y2IpOwogCWZybW1ldGEtPm1hZ2ljID0gUDgwMjExX0ZSTU1FVEFfTUFHSUM7CiAJZnJtbWV0YS0+cnggPSByeG1ldGE7CiBleGl0OgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjY4LDE5ICs2NDEsMTUgQEAKICogQ2FsbCBjb250ZXh0OgogKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIHA4MDIxMXNrYl9mcmVlKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXA4MDIxMV9mcm1tZXRhX3QJKm1ldGE7Ci0JREJGRU5URVI7Ci0JbWV0YSA9IFA4MDIxMVNLQl9GUk1NRVRBKHNrYik7Ci0JaWYgKCBtZXRhICYmIG1ldGEtPnJ4KSB7Ci0JCXA4MDIxMXNrYl9yeG1ldGFfZGV0YWNoKHNrYik7Ci0JfSBlbHNlIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZyZWVpbmcgYW4gc2tiICglcCkgdy8gbm8gZnJtbWV0YS5cbiIsIHNrYik7Ci0JfQorCXA4MDIxMV9mcm1tZXRhX3QgKm1ldGE7CiAKKwltZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKKwlpZiAobWV0YSAmJiBtZXRhLT5yeCkKKwkJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKaW5kZXggNTM4ZTliZC4uNmZlMTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaApAQCAtNTMsMTM0ICs1MywxMDkgQEAKICNpZm5kZWYgX0xJTlVYX1A4MDIxMUNPTlZfSAogI2RlZmluZSBfTElOVVhfUDgwMjExQ09OVl9ICiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQogI2RlZmluZSBXTEFOX0VUSEFERFJfTEVOCTYKICNkZWZpbmUgV0xBTl9JRUVFX09VSV9MRU4JMwogCiAjZGVmaW5lIFdMQU5fRVRIQ09OVl9FTkNBUAkxCi0jZGVmaW5lIFdMQU5fRVRIQ09OVl9SRkMxMDQyCTIKICNkZWZpbmUgV0xBTl9FVEhDT05WXzgwMjFoCTMKIAotI2RlZmluZSBXTEFOX01JTl9FVEhGUk1fTEVOCTYwCi0jZGVmaW5lIFdMQU5fTUFYX0VUSEZSTV9MRU4JMTUxNAogI2RlZmluZSBXTEFOX0VUSEhEUl9MRU4JCTE0CiAKICNkZWZpbmUgUDgwMjExQ0FQVFVSRV9WRVJTSU9OCTB4ODAyMTEwMDEKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1hY3JvcyAqLwotCiAjZGVmaW5lCVA4MDIxMV9GUk1NRVRBX01BR0lDCQkweDgwMjExMAogCiAjZGVmaW5lIFA4MDIxMVNLQl9GUk1NRVRBKHMpIFwKLQkoKCgoKHA4MDIxMV9mcm1tZXRhX3QqKSgocyktPmNiKSktPm1hZ2ljKT09UDgwMjExX0ZSTU1FVEFfTUFHSUMpID8gXAotCQkoKHA4MDIxMV9mcm1tZXRhX3QqKSgocyktPmNiKSkgOiBcCisJKCgoKChwODAyMTFfZnJtbWV0YV90ICopKChzKS0+Y2IpKS0+bWFnaWMpID09IFA4MDIxMV9GUk1NRVRBX01BR0lDKSA/IFwKKwkJKChwODAyMTFfZnJtbWV0YV90ICopKChzKS0+Y2IpKSA6IFwKIAkJKE5VTEwpKQogCiAjZGVmaW5lIFA4MDIxMVNLQl9SWE1FVEEocykgXAotCShQODAyMTFTS0JfRlJNTUVUQSgocykpID8gIFA4MDIxMVNLQl9GUk1NRVRBKChzKSktPnJ4IDogKChwODAyMTFfcnhtZXRhX3QqKShOVUxMKSkpCisJKFA4MDIxMVNLQl9GUk1NRVRBKChzKSkgPyAgUDgwMjExU0tCX0ZSTU1FVEEoKHMpKS0+cnggOiAoKHA4MDIxMV9yeG1ldGFfdCAqKShOVUxMKSkpCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9yeG1ldGEKLXsKLQlzdHJ1Y3Qgd2xhbmRldmljZQkqd2xhbmRldjsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9yeG1ldGEgeworCXN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2OwogCi0JdTY0CW1hY3RpbWU7CS8qIEhpLXJleiBNQUMtc3VwcGxpZWQgdGltZSB2YWx1ZSAqLwotCXU2NAlob3N0dGltZTsJLyogQmVzdC1yZXogaG9zdCBzdXBwbGllZCB0aW1lIHZhbHVlICovCisJdTY0IG1hY3RpbWU7CQkvKiBIaS1yZXogTUFDLXN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKwl1NjQgaG9zdHRpbWU7CQkvKiBCZXN0LXJleiBob3N0IHN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KIAotCXVuc2lnbmVkIGludAlyeHJhdGU7CQkvKiBSZWNlaXZlIGRhdGEgcmF0ZSBpbiAxMDBrYnBzICovCi0JdW5zaWduZWQgaW50CXByaW9yaXR5OwkvKiAwLTE1LCAwPWNvbnRlbnRpb24sIDY9Q0YgKi8KLQlpbnQJc2lnbmFsOwkJLyogQW4gU1NJLCBzZWUgcDgwMjExbmV0ZGV2LmggKi8KLQlpbnQJbm9pc2U7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLwotCXVuc2lnbmVkIGludAljaGFubmVsOwkvKiBSZWNlaXZlIGNoYW5uZWwgKG1vc3RseSBmb3Igc25pZnMpICovCi0JdW5zaWduZWQgaW50CXByZWFtYmxlOwkvKiBQODAyMTFFTlVNX3ByZWFtYmxldHlwZV8qICovCi0JdW5zaWduZWQgaW50CWVuY29kaW5nOwkvKiBQODAyMTFFTlVNX2VuY29kaW5nXyogKi8KKwl1bnNpZ25lZCBpbnQgcnhyYXRlOwkvKiBSZWNlaXZlIGRhdGEgcmF0ZSBpbiAxMDBrYnBzICovCisJdW5zaWduZWQgaW50IHByaW9yaXR5OwkvKiAwLTE1LCAwPWNvbnRlbnRpb24sIDY9Q0YgKi8KKwlpbnQgc2lnbmFsOwkJLyogQW4gU1NJLCBzZWUgcDgwMjExbmV0ZGV2LmggKi8KKwlpbnQgbm9pc2U7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLworCXVuc2lnbmVkIGludCBjaGFubmVsOwkvKiBSZWNlaXZlIGNoYW5uZWwgKG1vc3RseSBmb3Igc25pZnMpICovCisJdW5zaWduZWQgaW50IHByZWFtYmxlOwkvKiBQODAyMTFFTlVNX3ByZWFtYmxldHlwZV8qICovCisJdW5zaWduZWQgaW50IGVuY29kaW5nOwkvKiBQODAyMTFFTlVNX2VuY29kaW5nXyogKi8KIAogfSBwODAyMTFfcnhtZXRhX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1tZXRhCi17Ci0JdW5zaWduZWQgaW50CQkJbWFnaWM7Ci0JcDgwMjExX3J4bWV0YV90CQkqcng7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfZnJtbWV0YSB7CisJdW5zaWduZWQgaW50IG1hZ2ljOworCXA4MDIxMV9yeG1ldGFfdCAqcng7CiB9IHA4MDIxMV9mcm1tZXRhX3Q7CiAKIHZvaWQgcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCiAvKgogICogRnJhbWUgY2FwdHVyZSBoZWFkZXIuICAoU2VlIGRvYy9jYXB0dXJlZnJtLnR4dCkKICAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2NhcGhkcgotewotCXUzMgkJdmVyc2lvbjsKLQl1MzIJCWxlbmd0aDsKLQl1NjQJCW1hY3RpbWU7Ci0JdTY0CQlob3N0dGltZTsKLQl1MzIJCXBoeXR5cGU7Ci0JdTMyCQljaGFubmVsOwotCXUzMgkJZGF0YXJhdGU7Ci0JdTMyCQlhbnRlbm5hOwotCXUzMgkJcHJpb3JpdHk7Ci0JdTMyCQlzc2lfdHlwZTsKLQlzMzIJCXNzaV9zaWduYWw7Ci0JczMyCQlzc2lfbm9pc2U7Ci0JdTMyCQlwcmVhbWJsZTsKLQl1MzIJCWVuY29kaW5nOwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2NhcGhkciB7CisJdTMyIHZlcnNpb247CisJdTMyIGxlbmd0aDsKKwl1NjQgbWFjdGltZTsKKwl1NjQgaG9zdHRpbWU7CisJdTMyIHBoeXR5cGU7CisJdTMyIGNoYW5uZWw7CisJdTMyIGRhdGFyYXRlOworCXUzMiBhbnRlbm5hOworCXUzMiBwcmlvcml0eTsKKwl1MzIgc3NpX3R5cGU7CisJczMyIHNzaV9zaWduYWw7CisJczMyIHNzaV9ub2lzZTsKKwl1MzIgcHJlYW1ibGU7CisJdTMyIGVuY29kaW5nOwogfSBwODAyMTFfY2FwaGRyX3Q7CiAKIC8qIGJ1ZmZlciBmcmVlIG1ldGhvZCBwb2ludGVyIHR5cGUgKi8KLXR5cGVkZWYgdm9pZCAoKiBmcmVlYnVmX21ldGhvZF90KSh2b2lkICpidWYsIGludCBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKmZyZWVidWZfbWV0aG9kX3QpICh2b2lkICpidWYsIGludCBzaXplKTsKIAogdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgewotCXZvaWQgICpkYXRhOworCXZvaWQgKmRhdGE7CiAJdTggaXZbNF07CiAJdTggaWN2WzRdOwogfSBwODAyMTFfbWV0YXdlcF90OwogCiAvKiBsb2NhbCBldGhlciBoZWFkZXIgdHlwZSAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9ldGhoZHIKLXsKLQl1OAlkYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKLQl1OAlzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKLQl1MTYJdHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9ldGhoZHJfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZXRoaGRyIHsKKwl1OCBkYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKKwl1OCBzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKKwl1MTYgdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5fZXRoaGRyX3Q7CiAKIC8qIGxvY2FsIGxsYyBoZWFkZXIgdHlwZSAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9sbGMKLXsKLQl1OAlkc2FwOwotCXU4CXNzYXA7Ci0JdTgJY3RsOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2xsY190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9sbGMgeworCXU4IGRzYXA7CisJdTggc3NhcDsKKwl1OCBjdGw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2xsY190OwogCiAvKiBsb2NhbCBzbmFwIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX3NuYXAKLXsKLQl1OAlvdWlbV0xBTl9JRUVFX09VSV9MRU5dOwotCXUxNgl0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX3NuYXBfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5fc25hcCB7CisJdTggb3VpW1dMQU5fSUVFRV9PVUlfTEVOXTsKKwl1MTYgdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5fc25hcF90OwogCiAvKiBDaXJjdWxhciBpbmNsdWRlIHRyaWNrICovCiBzdHJ1Y3Qgd2xhbmRldmljZTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybnMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLWludCBza2JfcDgwMjExX3RvX2V0aGVyKCBzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCi0JCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgc2tiX2V0aGVyX3RvX3A4MDIxMSggc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAotCQkJIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKLQkJCSBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwICk7CitpbnQgc2tiX3A4MDIxMV90b19ldGhlcihzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKKwkJCXN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCXA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwogCiBpbnQgcDgwMjExX3N0dF9maW5kcHJvdG8odTE2IHByb3RvKTsKLWludCBwODAyMTFfc3R0X2FkZHByb3RvKHUxNiBwcm90byk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaAppbmRleCA3MmYxMmFmLi5kZWQ0Nzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaApAQCAtNjMsNDMgKzYzLDIzIEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogU3lzdGVtIEluY2x1ZGVzICovCiAKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwogCi0jaWZuZGVmICBfV0xBTl9DT01QQVRfSAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0jZW5kaWYKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29uc3RhbnRzICovCiAKIC8qLS0tIFNpemVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgV0xBTl9BRERSX0xFTgkJCTYKICNkZWZpbmUgV0xBTl9DUkNfTEVOCQkJNAogI2RlZmluZSBXTEFOX0JTU0lEX0xFTgkJCTYKLSNkZWZpbmUgV0xBTl9CU1NfVFNfTEVOCQkJOAogI2RlZmluZSBXTEFOX0hEUl9BM19MRU4JCQkyNAogI2RlZmluZSBXTEFOX0hEUl9BNF9MRU4JCQkzMAogI2RlZmluZSBXTEFOX1NTSURfTUFYTEVOCQkzMgogI2RlZmluZSBXTEFOX0RBVEFfTUFYTEVOCQkyMzEyCi0jZGVmaW5lIFdMQU5fQTNGUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQotI2RlZmluZSBXTEFOX0E0RlJfTUFYTEVOCQkoV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikKLSNkZWZpbmUgV0xBTl9CRUFDT05fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMzM0KQotI2RlZmluZSBXTEFOX0FUSU1fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMCkKLSNkZWZpbmUgV0xBTl9ESVNBU1NPQ19GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQotI2RlZmluZSBXTEFOX0FTU09DUkVRX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDQ4KQotI2RlZmluZSBXTEFOX0FTU09DUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDE2KQotI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfRlJfTUFYTEVOCShXTEFOX0hEUl9BM19MRU4gKyA1NCkKLSNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDE2KQotI2RlZmluZSBXTEFOX1BST0JFUkVRX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDQ0KQotI2RlZmluZSBXTEFOX1BST0JFUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDc4KQotI2RlZmluZSBXTEFOX0FVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyNjEpCi0jZGVmaW5lIFdMQU5fREVBVVRIRU5fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMikKLSNkZWZpbmUgV0xBTl9XRVBfTktFWVMJCQk0Ci0jZGVmaW5lIFdMQU5fV0VQX01BWEtFWUxFTgkJMTMKLSNkZWZpbmUgV0xBTl9DSEFMTEVOR0VfSUVfTEVOCQkxMzAKLSNkZWZpbmUgV0xBTl9DSEFMTEVOR0VfTEVOCQkxMjgKICNkZWZpbmUgV0xBTl9XRVBfSVZfTEVOCQkJNAogI2RlZmluZSBXTEFOX1dFUF9JQ1ZfTEVOCQk0CiAKQEAgLTE0Myw3ICsxMjMsNiBAQAogI2RlZmluZSBXTEFOX0ZTVFlQRV9DRlBPTEwJCTB4MDYKICNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZBQ0tfQ0ZQT0xMCTB4MDcKIAotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogTWFjcm9zICovCiAKQEAgLTE2Niw5NyArMTQ1LDUxIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfUlRTKSApOyAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgV0xBTl9HRVRfRkNfUFZFUihuKQkgKCgodTE2KShuKSkgJiAoQklUMCB8IEJJVDEpKQotI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKQkoKCgodTE2KShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQotI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikJKCgoKHUxNikobikpICYgKEJJVDR8QklUNXxCSVQ2fEJJVDcpKSA+PiA0KQotI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pIAkoKCgodTE2KShuKSkgJiAoQklUOCkpID4+IDgpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZST01EUyhuKQkoKCgodTE2KShuKSkgJiAoQklUOSkpID4+IDkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVGUkFHKG4pICgoKCh1MTYpKG4pKSAmIChCSVQxMCkpID4+IDEwKQotI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKQkoKCgodTE2KShuKSkgJiAoQklUMTEpKSA+PiAxMSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQxMikpID4+IDEyKQotI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgodTE2KShuKSkgJiAoQklUMTMpKSA+PiAxMykKLSNkZWZpbmUgV0xBTl9HRVRfRkNfSVNXRVAobikJKCgoKHUxNikobikpICYgKEJJVDE0KSkgPj4gMTQpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX09SREVSKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQxNSkpID4+IDE1KQorI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKQkoKCgodTE2KShuKSkgJiAoQklUKDIpIHwgQklUKDMpKSkgPj4gMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlNUWVBFKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoNCl8QklUKDUpfEJJVCg2KXxCSVQoNykpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pIAkoKCgodTE2KShuKSkgJiAoQklUKDgpKSkgPj4gOCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlJPTURTKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoOSkpKSA+PiA5KQorI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKQkoKCgodTE2KShuKSkgJiAoQklUKDE0KSkpID4+IDE0KQogCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1BWRVIobikJKCh1MTYpKG4pKQogI2RlZmluZSBXTEFOX1NFVF9GQ19GVFlQRShuKQkoKCh1MTYpKG4pKSA8PCAyKQogI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikJKCgodTE2KShuKSkgPDwgNCkKICNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKSAJKCgodTE2KShuKSkgPDwgOCkKICNkZWZpbmUgV0xBTl9TRVRfRkNfRlJPTURTKG4pCSgoKHUxNikobikpIDw8IDkpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX01PUkVGUkFHKG4pICgoKHUxNikobikpIDw8IDEwKQotI2RlZmluZSBXTEFOX1NFVF9GQ19SRVRSWShuKQkoKCh1MTYpKG4pKSA8PCAxMSkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfUFdSTUdUKG4pCSgoKHUxNikobikpIDw8IDEyKQotI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKCh1MTYpKG4pKSA8PCAxMykKICNkZWZpbmUgV0xBTl9TRVRfRkNfSVNXRVAobikJKCgodTE2KShuKSkgPDwgMTQpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX09SREVSKG4pCSgoKHUxNikobikpIDw8IDE1KQogCi0vKi0tLSBEdXJhdGlvbiBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBEdXJhdGlvbiBGaWVsZCAgICAgICovCi0vKiAgLSB0aGUgZHVyYXRpb24gdmFsdWUgaXMgb25seSB2YWxpZCB3aGVuIGJpdDE1IGlzIHplcm8gICAgICovCi0vKiAgLSB0aGUgZmlybXdhcmUgaGFuZGxlcyB0aGVzZSB2YWx1ZXMsIHNvIEknbSBub3QgZ29pbmcgICAgICovCi0vKiAgICB0aGVzZSBtYWNyb3MgcmlnaHQgbm93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0tIFNlcXVlbmNlIENvbnRyb2wgIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE1hY3JvcyB0byBnZXQvc2V0IHRoZSBiaXRmaWVsZHMgb2YgdGhlIFNlcXVlbmNlIENvbnRyb2wgICAgKi8KLS8qIEZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSR05VTShuKSAoKCh1MTYpKG4pKSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgodTE2KShuKSkgJiAofihCSVQwfEJJVDF8QklUMnxCSVQzKSkpID4+IDQpCi0KLS8qLS0tIERhdGEgcHRyIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIENyZWF0ZXMgYSB1OCogdG8gdGhlIGRhdGEgcG9ydGlvbiBvZiBhIGZyYW1lICAgICAgICAgICAgKi8KLS8qIEFzc3VtZXMgeW91J3JlIHBhc3NpbmcgaW4gYSBwdHIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaGRyKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQVAocCkgKCgodTgqKShwKSkgKyBXTEFOX0hEUl9BM19MRU4pCi0jZGVmaW5lIFdMQU5fSERSX0E0X0RBVEFQKHApICgoKHU4KikocCkpICsgV0xBTl9IRFJfQTRfTEVOKQotCi0jZGVmaW5lIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKHIpICAgICAoKCh1OCkocikpICYgQklUNykKKyNkZWZpbmUgRE9UMTFfUkFURTVfSVNCQVNJQ19HRVQocikgICAgICgoKHU4KShyKSkgJiBCSVQoNykpCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBUeXBlcyAqLwogCi0vKiBCU1MgVGltZXN0YW1wICovCi10eXBlZGVmIHU4IHdsYW5fYnNzX3RzX3RbV0xBTl9CU1NfVFNfTEVOXTsKLQogLyogR2VuZXJpYyA4MDIuMTEgSGVhZGVyIHR5cGVzICovCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTMKLXsKLQl1MTYJZmM7Ci0JdTE2CWR1cjsKLQl1OAlhMVtXTEFOX0FERFJfTEVOXTsKLQl1OAlhMltXTEFOX0FERFJfTEVOXTsKLQl1OAlhM1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJc2VxOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2EzX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfaGRyX2EzIHsKKwl1MTYgZmM7CisJdTE2IGR1cjsKKwl1OCBhMVtFVEhfQUxFTl07CisJdTggYTJbRVRIX0FMRU5dOworCXU4IGEzW0VUSF9BTEVOXTsKKwl1MTYgc2VxOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExX2hkcl9hM190OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfaGRyX2E0Ci17Ci0JdTE2CWZjOwotCXUxNglkdXI7Ci0JdTgJYTFbV0xBTl9BRERSX0xFTl07Ci0JdTgJYTJbV0xBTl9BRERSX0xFTl07Ci0JdTgJYTNbV0xBTl9BRERSX0xFTl07Ci0JdTE2CXNlcTsKLQl1OAlhNFtXTEFOX0FERFJfTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExX2hkcl9hNF90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hNCB7CisJdTE2IGZjOworCXUxNiBkdXI7CisJdTggYTFbRVRIX0FMRU5dOworCXU4IGEyW0VUSF9BTEVOXTsKKwl1OCBhM1tFVEhfQUxFTl07CisJdTE2IHNlcTsKKwl1OCBhNFtFVEhfQUxFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX2E0X3Q7CiAKLXR5cGVkZWYgdW5pb24gcDgwMjExX2hkcgotewotCXA4MDIxMV9oZHJfYTNfdAkJYTM7Ci0JcDgwMjExX2hkcl9hNF90CQlhNDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExX2hkcl90OwordHlwZWRlZiB1bmlvbiBwODAyMTFfaGRyIHsKKwlwODAyMTFfaGRyX2EzX3QgYTM7CisJcDgwMjExX2hkcl9hNF90IGE0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExX2hkcl90OwogCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0vKiBGcmFtZSBhbmQgaGVhZGVyIGxlbmdodCBtYWNyb3MgKi8KKy8qIEZyYW1lIGFuZCBoZWFkZXIgbGVuZ3RoIG1hY3JvcyAqLwogCiAjZGVmaW5lIFdMQU5fQ1RMX0ZSQU1FTEVOKGZzdHlwZSkgKFwKIAkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQk/IDI0IDogXApAQCAtMjcxLDIzICsyMDQsMjIgQEAKICNkZWZpbmUgV0xBTl9GQ1NfTEVOCQkJNAogCiAvKiBmdGNsIGluIEhPU1Qgb3JkZXIgKi8KLWlubGluZSBzdGF0aWMgdTE2IHA4MDIxMV9oZWFkZXJsZW4odTE2IGZjdGwpCitzdGF0aWMgaW5saW5lIHUxNiBwODAyMTFfaGVhZGVybGVuKHUxNiBmY3RsKQogewogCXUxNiBoZHJsZW4gPSAwOwogCi0Jc3dpdGNoICggV0xBTl9HRVRfRkNfRlRZUEUoZmN0bCkgKSB7CisJc3dpdGNoIChXTEFOX0dFVF9GQ19GVFlQRShmY3RsKSkgewogCWNhc2UgV0xBTl9GVFlQRV9NR01UOgogCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9GVFlQRV9EQVRBOgogCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47Ci0JCWlmICggV0xBTl9HRVRfRkNfVE9EUyhmY3RsKSAmJiBXTEFOX0dFVF9GQ19GUk9NRFMoZmN0bCkgKSB7Ci0JCQloZHJsZW4gKz0gV0xBTl9BRERSX0xFTjsKLQkJfQorCQlpZiAoV0xBTl9HRVRfRkNfVE9EUyhmY3RsKSAmJiBXTEFOX0dFVF9GQ19GUk9NRFMoZmN0bCkpCisJCQloZHJsZW4gKz0gRVRIX0FMRU47CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9GVFlQRV9DVEw6CiAJCWhkcmxlbiA9IFdMQU5fQ1RMX0ZSQU1FTEVOKFdMQU5fR0VUX0ZDX0ZTVFlQRShmY3RsKSkgLQotCQkJV0xBTl9GQ1NfTEVOOworCQkgICAgV0xBTl9GQ1NfTEVOOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaAppbmRleCBhZDY3YjY5Li42NGNhN2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKQEAgLTYwLDE0ICs2MCw5IEBACiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0KICNpZm5kZWYgX1A4MDIxMUlPQ1RMX0gKICNkZWZpbmUgX1A4MDIxMUlPQ1RMX0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogcDgwMjExIGlvY3RsICJyZXF1ZXN0IiBjb2Rlcy4gIFNlZSBhcmd1bWVudCAyIG9mIGlvY3RsKDIpLiAqLwogCiAjZGVmaW5lIFA4MDIxMV9JRlRFU1QJCShTSU9DREVWUFJJVkFURSArIDApCkBAIC03OSw0NSArNzQsMTYgQEAKICNkZWZpbmUgUDgwMjExX0lPQ1RMX01BR0lDCSgweDRhMmQ0NjRkVUwpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBOZXRsaW5rIHByb3RvY29sIG51bWJlcnMgZm9yIHRoZSBpbmRpY2F0aW9uIGludGVyZmFjZSAqLwotCi0jZGVmaW5lIFA4MDIxMV9OTF9TT0NLX0lORAlORVRMSU5LX1VTRVJTT0NLCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBOZXRsaW5rIG11bHRpY2FzdCBiaXRzIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMgKi8KLQotI2RlZmluZSBQODAyMTFfTkxfTUNBU1RfR1JQX01MTUUJQklUMAkvKiBMb2NhbCBzdGF0aW9uIG1lc3NhZ2VzICovCi0jZGVmaW5lIFA4MDIxMV9OTF9NQ0FTVF9HUlBfU05JRkYJQklUMQkvKiBTbmlmZmVyIG1lc3NhZ2VzICovCi0jZGVmaW5lIFA4MDIxMV9OTF9NQ0FTVF9HUlBfRElTVAlCSVQyCS8qIERpc3RyaWJ1dGlvbiBzeXN0ZW0gbWVzc2FnZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1hY3JvcyAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogQSBwdHIgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZSBpcyBwYXNzZWQgYXMgdGhlIHRoaXJkICovCiAvKiAgYXJndW1lbnQgdG8gdGhlIGlvY3RsIHN5c3RlbSBjYWxsIHdoZW4gaXNzdWluZyBhIHJlcXVlc3QgdG8gKi8KIC8qICB0aGUgcDgwMjExIG1vZHVsZS4gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExaW9jdGxfcmVxCi17Ci0JY2hhciAJbmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWlvY3RsX3JlcSB7CisJY2hhciBuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCWNhZGRyX3QgZGF0YTsKLQl1MzIJbWFnaWM7Ci0JdTE2CWxlbjsKLQl1MzIJcmVzdWx0OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpb2N0bF9yZXFfdDsKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQorCXUzMiBtYWdpYzsKKwl1MTYgbGVuOworCXUzMiByZXN1bHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpb2N0bF9yZXFfdDsKIAogI2VuZGlmIC8qIF9QODAyMTFJT0NUTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKaW5kZXggOGI2MWU1Zi4uMmYzYzlmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaApAQCAtNTgsNTAgKzU4LDggQEAKICNkZWZpbmUgX1A4MDIxMU1FVEFfSAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW50IG5hbWluZyAqLwotLyogIGNvbnZlbnRpb25zIGZvciBhbGwgdGhlIGRpZmZlcmVudCBtZXRhZGF0YSBsaXN0cy4gKi8KLQotI2RlZmluZSBNS1JFUU1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyByZXEgIyMgXyAjIyBuYW1lCi0jZGVmaW5lIE1LSU5ETUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGluZCAjIyBfICMjIG5hbWUKLSNkZWZpbmUgTUtNSUJNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgbWliICMjIF8gIyMgbmFtZQotI2RlZmluZSBNS0dSUE1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBncnAgIyMgXyAjIyBuYW1lCi0KLSNkZWZpbmUgTUtSRVFNRVRBU0laRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgcmVxICMjIF8gIyMgbmFtZSAjIyBfICMjIHNpemUKLSNkZWZpbmUgTUtJTkRNRVRBU0laRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgaW5kICMjIF8gIyMgbmFtZSAjIyBfICMjIHNpemUKLSNkZWZpbmUgTUtNSUJNRVRBU0laRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgbWliICMjIF8gIyMgbmFtZSAjIyBfICMjIHNpemUKLSNkZWZpbmUgTUtHUlBNRVRBU0laRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgZ3JwICMjIF8gIyMgbmFtZSAjIyBfICMjIHNpemUKLQotI2RlZmluZSBHRVRNRVRBU0laRShhcHRyKQkJKCoqKCh1MzIqKikoYXB0cikpKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBpZmRlZiBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcgZGVmaW5lczogKi8KLS8qICBQODAyMTFfTk9JTkNMVURFU1RSSU5HUyAtIGlmIGRlZmluZWQsIGFsbCBtZXRhZGF0YSBuYW1lIGZpZWxkcyAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGVtcHR5IHN0cmluZ3MgKi8KLQotI2lmZGVmIFA4MDIxMV9OT0lOQ0xVREVTVFJJTkdTCi0JI2RlZmluZQlNS0lURU1OQU1FKHMpCSgiIikKLSNlbHNlCi0JI2RlZmluZQlNS0lURU1OQU1FKHMpCShzKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBUeXBlcyAqLwpAQCAtMTExLDU5ICs2OSwyOSBAQAogLyogcmVwcmVzZW50YXRpb24gb2YgY2F0ZWdvcnkgbGlzdCBtZXRhZGF0YSwgZ3JvdXAgbGlzdCBtZXRhZGF0YSwgKi8KIC8qIGFuZCBkYXRhIGl0ZW0gbWV0YWRhdGEgZm9yIGJvdGggTWliIGFuZCBNZXNzYWdlcy4gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbWV0YQotewotCWNoYXIJCQkqbmFtZTsJCS8qIGRhdGEgaXRlbSBuYW1lICovCi0JdTMyCQkJZGlkOwkJLyogcGFydGlhbCBkaWQgKi8KLQl1MzIJCQlmbGFnczsJCS8qIHNldCBvZiB2YXJpb3VzIGZsYWcgYml0cyAqLwotCXUzMgkJCW1pbjsJCS8qIG1pbiB2YWx1ZSBvZiBhIEJPVU5ERURpbnQgKi8KLQl1MzIJCQltYXg7CQkvKiBtYXggdmFsdWUgb2YgYSBCT1VOREVEaW50ICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtZXRhIHsKKwljaGFyICpuYW1lOwkJLyogZGF0YSBpdGVtIG5hbWUgKi8KKwl1MzIgZGlkOwkJLyogcGFydGlhbCBkaWQgKi8KKwl1MzIgZmxhZ3M7CQkvKiBzZXQgb2YgdmFyaW91cyBmbGFnIGJpdHMgKi8KKwl1MzIgbWluOwkJLyogbWluIHZhbHVlIG9mIGEgQk9VTkRFRGludCAqLworCXUzMiBtYXg7CQkvKiBtYXggdmFsdWUgb2YgYSBCT1VOREVEaW50ICovCiAKLQl1MzIJCQltYXhsZW47CQkvKiBtYXhsZW4gb2YgYSBPQ1RFVFNUUiBvciBESVNQTEFZU1RSICovCi0JdTMyCQkJbWlubGVuOwkJLyogbWlubGVuIG9mIGEgT0NURVRTVFIgb3IgRElTUExBWVNUUiAqLwotCXA4MDIxMWVudW1fdAkJKmVudW1wdHI7CS8qIHB0ciB0byB0aGUgZW51bSB0eXBlIGZvciBFTlVNaW50ICovCi0JcDgwMjExX3RvdGV4dF90CQl0b3RleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwotCXA4MDIxMV9mcm9tdGV4dF90CWZyb210ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KLQlwODAyMTFfdmFsaWRfdAkJdmFsaWRmdW5wdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLworCXUzMiBtYXhsZW47CQkvKiBtYXhsZW4gb2YgYSBPQ1RFVFNUUiBvciBESVNQTEFZU1RSICovCisJdTMyIG1pbmxlbjsJCS8qIG1pbmxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwlwODAyMTFlbnVtX3QgKmVudW1wdHI7CS8qIHB0ciB0byB0aGUgZW51bSB0eXBlIGZvciBFTlVNaW50ICovCisJcDgwMjExX3RvdGV4dF90IHRvdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX2Zyb210ZXh0X3QgZnJvbXRleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLworCXA4MDIxMV92YWxpZF90IHZhbGlkZnVucHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KIH0gcDgwMjExbWV0YV90OwogCi10eXBlZGVmIHN0cnVjdCBncnBsaXN0aXRlbQotewotCWNoYXIJCSpuYW1lOwotCXA4MDIxMW1ldGFfdAkqaXRlbWxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBncnBsaXN0aXRlbSB7CisJY2hhciAqbmFtZTsKKwlwODAyMTFtZXRhX3QgKml0ZW1saXN0OwogfSBncnBsaXN0aXRlbV90OwogCi10eXBlZGVmIHN0cnVjdCBjYXRsaXN0aXRlbQotewotCWNoYXIJCSpuYW1lOwotCWdycGxpc3RpdGVtX3QJKmdycGxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBjYXRsaXN0aXRlbSB7CisJY2hhciAqbmFtZTsKKwlncnBsaXN0aXRlbV90ICpncnBsaXN0OwogfSBjYXRsaXN0aXRlbV90OwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLXUzMiBwODAyMTFfdGV4dDJkaWQoY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgY2hhciAqY2F0bmFtZSwgY2hhciAqZ3JwbmFtZSwgY2hhciAqaXRlbW5hbWUpOwotdTMyIHA4MDIxMV90ZXh0MmNhdGRpZChjYXRsaXN0aXRlbV90ICpsaXN0LCBjaGFyICpuYW1lICk7Ci11MzIgcDgwMjExX3RleHQyZ3JwZGlkKGdycGxpc3RpdGVtX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKLXUzMiBwODAyMTFfdGV4dDJpdGVtZGlkKHA4MDIxMW1ldGFfdCAqbGlzdCwgY2hhciAqbmFtZSApOwotdTMyIHA4MDIxMV9pc3ZhbGlkX2RpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMV9pc3ZhbGlkX2NhdGRpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMV9pc3ZhbGlkX2dycGRpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMV9pc3ZhbGlkX2l0ZW1kaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIHUzMiBkaWQgKTsKLWNhdGxpc3RpdGVtX3QgKnA4MDIxMV9kaWQyY2F0KCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci1ncnBsaXN0aXRlbV90ICpwODAyMTFfZGlkMmdycCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotcDgwMjExbWV0YV90ICpwODAyMTFfZGlkMml0ZW0oIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIHUzMiBkaWQgKTsKLXUzMiBwODAyMTFpdGVtX21heGRhdGFsZW4oIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQgKTsKLXUzMiBwODAyMTFfbWV0YW5hbWUyZGlkKHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIGNoYXIgKml0ZW1uYW1lKTsKLXUzMiBwODAyMTFpdGVtX2dldG9mZnNldCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCApOwotaW50IHA4MDIxMWl0ZW1fZ2V0dHlwZShwODAyMTFtZXRhX3QgKm1ldGEpOwotCiAjZW5kaWYgLyogX1A4MDIxMU1FVEFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCmluZGV4IGNlNGZkZDUuLmEyOWQ2YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKQEAgLTQ3LDIwICs0Nyw5IEBACiAjaWZuZGVmIF9QODAyMTFNS01FVEFERUZfSAogI2RlZmluZSBfUDgwMjExTUtNRVRBREVGX0gKIAotCi0jZGVmaW5lIERJRG1zZ19jYXRfZG90MTFyZXEgXAotCQkJUDgwMjExRElEX01LU0VDVElPTigxKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0IFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXRfbWliYXR0cmlidXRlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldF9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYnNldCBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQpAQCAtNzUsNTc5ICs2NCw0OCBAQAogI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2NhbiBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9ic3N0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYnNzaWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9zc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fc2NhbnR5cGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9wcm9iZWRlbGF5IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fY2hhbm5lbGxpc3QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9taW5jaGFubmVsdGltZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX21heGNoYW5uZWx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX251bWJzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9hcHBlbmQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc2luZGV4IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zaWduYWwgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX25vaXNlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3NpZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3NpZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzdHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmVhY29ucGVyaW9kIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19kdGltcGVyaW9kIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190aW1lc3RhbXAgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19sb2NhbHRpbWUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGR3ZWxsdGltZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9wc2V0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BwYXR0ZXJuIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BpbmRleCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2RzY2hhbm5lbCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcGNvdW50IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwcGVyaW9kIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwbWF4ZHVyYXRpb24gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBkdXJyZW1haW5pbmcgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19pYnNzYXRpbXdpbmRvdyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG9sbGFibGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBvbGxyZXEgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19wcml2YWN5IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU2IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTEgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTMgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTYgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTcgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNDApIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0IFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfc3NpZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYnNzdHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmVhY29ucGVyaW9kIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kdGltcGVyaW9kIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBwZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcG1heGR1cmF0aW9uIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGR3ZWxsdGltZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BzZXQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoaG9wcGF0dGVybiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZHNjaGFubmVsIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfaWJzc2F0aW13aW5kb3cgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9wcm9iZWRlbGF5IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xsYWJsZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcG9sbHJlcSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTEgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUyIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU1IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTcgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU4IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU2IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfY2F0X2RvdDExaW5kIFwKLQkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKICNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZV9hdXRoZW50aWNhdGlvbnR5cGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3JlYXNvbmNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXNzb2NpYXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMykpCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfcGVlcnN0YWFkZHJlc3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXNzb2NpYXRlX2FpZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfcGVlcnN0YWFkZHJlc3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfYWlkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlX29sZGFwYWRkcmVzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGVfcmVhc29uY29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19jYXRfbG54cmVxIFwKLQkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMykKICNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfaWZzdGF0ZV9pZnN0YXRlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZiBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9lbmFibGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9jaGFubmVsIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfcHJpc21oZWFkZXIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl93bGFuaGVhZGVyIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfa2VlcHdlcGZsYWdzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfc3RyaXBmY3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wYWNrZXRfdHJ1bmMgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMykpCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX2RlY3J5cHQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZW5jcnlwdCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5IFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9kYm0gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9saW5rIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfbGV2ZWwgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9ub2lzZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19sbnhyZXFfYXV0b2pvaW4gXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9zc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9hdXRodHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfYXV0b2pvaW5fcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19jYXRfcDJyZXEgXAotCQkJUDgwMjExRElEX01LU0VDVElPTig1KQogI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYV9wZGEgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYV9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMTEpKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGVfZW5hYmxlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9leGVhZGRyIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSkKLSNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlX2FkZHIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlX2xlbiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfZGF0YSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfZW5hYmxlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxNCkpCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX2FkZHIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfbGVuIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX2RhdGEgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtaWJfY2F0X2RvdDExc210IFwKIAkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMSkKICNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZSBcCkBAIC02ODQsOCArMTQyLDYgQEAKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCiAJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKLSNkZWZpbmUgRElEbWliX2NhdF9kb3QxMW1hYyBcCi0JCQlQODAyMTFESURfTUtTRUNUSU9OKDIpCiAjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbWliLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbWliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZDcyZWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIHA4MDIxMW1ldGFtaWIuaAotKgotKiBNYWNyb3MsIGNvbnN0LCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgbWliIG1ldGFkYXRhCi0qCi0qIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qCi0qIGxpbnV4LXdsYW4KLSoKLSogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYwotKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCi0qICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCi0qICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0qCi0qICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCi0qICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwotKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qCi0qICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKLSogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKLSogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQotKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCi0qICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCi0qICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKLSogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcwotKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQotKiBtYWRlIGRpcmVjdGx5IHRvOgotKgotKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgotKiBpbmZvQGxpbnV4LXdsYW4uY29tCi0qIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKLSogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCi0qCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qCi0qIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cwotKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCi0qCi0qIE5vdGVzOgotKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgotKgotKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKLSogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfUDgwMjExTUVUQU1JQl9ICi0jZGVmaW5lIF9QODAyMTFNRVRBTUlCX0gKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogUHJvamVjdCBJbmNsdWRlcyAqLwotCi0jaWZuZGVmIF9XTEFOX0NPTVBBVF9ICi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogQ29uc3RhbnRzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVHlwZXMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIG1pYiAqLwotLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLwotCi1leHRlcm4gY2F0bGlzdGl0ZW1fdCBtaWJfY2F0bGlzdFtdOwotZXh0ZXJuIHUzMiBtaWJfY2F0bGlzdF9zaXplOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLSNlbmRpZiAvKiBfUDgwMjExTUVUQU1JQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNjU5ZWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1zZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIHA4MDIxMW1ldGFtc2cuaAotKgotKiBNYWNyb3MsIGNvbnN0LCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgbXNnIG1ldGFkYXRhCi0qCi0qIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qCi0qIGxpbnV4LXdsYW4KLSoKLSogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYwotKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCi0qICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCi0qICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0qCi0qICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCi0qICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwotKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qCi0qICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKLSogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKLSogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQotKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCi0qICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCi0qICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKLSogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcwotKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQotKiBtYWRlIGRpcmVjdGx5IHRvOgotKgotKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgotKiBpbmZvQGxpbnV4LXdsYW4uY29tCi0qIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKLSogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCi0qCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qCi0qIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cwotKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCi0qCi0qIE5vdGVzOgotKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgotKgotKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKLSogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfUDgwMjExTUVUQU1TR19ICi0jZGVmaW5lIF9QODAyMTFNRVRBTVNHX0gKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogUHJvamVjdCBJbmNsdWRlcyAqLwotCi0jaWZuZGVmIF9XTEFOX0NPTVBBVF9ICi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogQ29uc3RhbnRzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVHlwZXMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKi8KLS8qIGNhdGVnb3J5IG1ldGFkYXRhIGxpc3QgKi8KLQotZXh0ZXJuIGNhdGxpc3RpdGVtX3QgbXNnX2NhdGxpc3RbXTsKLWV4dGVybiB1MzIgbXNnX2NhdGxpc3Rfc2l6ZTsKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0jZW5kaWYgLyogX1A4MDIxMU1FVEFNU0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCmluZGV4IGQyMjU4YjAuLmRiMTI3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKQEAgLTQ3LDIzOSArNDcsMjIzIEBACiAjaWZuZGVmIF9QODAyMTFNS01FVEFTVFJVQ1RfSAogI2RlZmluZSBfUDgwMjExTUtNRVRBU1RSVUNUX0gKIAordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QgbWliYXR0cmlidXRlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldAotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VuazM5Ml90CW1pYmF0dHJpYnV0ZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QgbWliYXR0cmlidXRlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldAotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VuazM5Ml90CW1pYmF0dHJpYnV0ZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW4geworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJzc3R5cGU7CisJcDgwMjExaXRlbV9wc3RyNl90IGJzc2lkOworCXU4IHBhZF8wQ1sxXTsKKwlwODAyMTFpdGVtX3BzdHIzMl90IHNzaWQ7CisJdTggcGFkXzFEWzNdOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc2NhbnR5cGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBwcm9iZWRlbGF5OworCXA4MDIxMWl0ZW1fcHN0cjE0X3QgY2hhbm5lbGxpc3Q7CisJdTggcGFkXzJDWzFdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWluY2hhbm5lbHRpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBtYXhjaGFubmVsdGltZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBudW1ic3M7CisJcDgwMjExaXRlbV91aW50MzJfdCBhcHBlbmQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbgotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOwotCXA4MDIxMWl0ZW1fcHN0cjZfdAlic3NpZAk7Ci0JdTgJcGFkXzBDWzFdCTsKLQlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOwotCXU4CXBhZF8xRFszXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzY2FudHlwZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlwcm9iZWRlbGF5CTsKLQlwODAyMTFpdGVtX3BzdHIxNF90CWNoYW5uZWxsaXN0CTsKLQl1OAlwYWRfMkNbMV0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbWluY2hhbm5lbHRpbWUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbWF4Y2hhbm5lbHRpbWUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAludW1ic3MJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYXBwZW5kCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJzc2luZGV4OworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHNpZ25hbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG5vaXNlOworCXA4MDIxMWl0ZW1fcHN0cjZfdCBic3NpZDsKKwl1OCBwYWRfM0NbMV07CisJcDgwMjExaXRlbV9wc3RyMzJfdCBzc2lkOworCXU4IHBhZF80RFszXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJzc3R5cGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBiZWFjb25wZXJpb2Q7CisJcDgwMjExaXRlbV91aW50MzJfdCBkdGltcGVyaW9kOworCXA4MDIxMWl0ZW1fdWludDMyX3QgdGltZXN0YW1wOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbG9jYWx0aW1lOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhkd2VsbHRpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBmaGhvcHNldDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoaG9wcGF0dGVybjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoaG9waW5kZXg7CisJcDgwMjExaXRlbV91aW50MzJfdCBkc2NoYW5uZWw7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBjb3VudDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcHBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG1heGR1cmF0aW9uOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2ZwZHVycmVtYWluaW5nOworCXA4MDIxMWl0ZW1fdWludDMyX3QgaWJzc2F0aW13aW5kb3c7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxhYmxlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2Zwb2xscmVxOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcHJpdmFjeTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTE7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU1OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTc7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU4OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGUxOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGUyOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGUzOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGU0OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGU1OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGU2OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGU3OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc3VwcHJhdGU4OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzaW5kZXgJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzaWduYWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOwotCXA4MDIxMWl0ZW1fcHN0cjZfdAlic3NpZAk7Ci0JdTgJcGFkXzNDWzFdCTsKLQlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOwotCXU4CXBhZF80RFszXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJlYWNvbnBlcmlvZAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkdGltcGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXRpbWVzdGFtcAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlsb2NhbHRpbWUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhkd2VsbHRpbWUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BzZXQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BwYXR0ZXJuCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9waW5kZXgJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZHNjaGFubmVsCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGNvdW50CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcHBlcmlvZAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBtYXhkdXJhdGlvbgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBkdXJyZW1haW5pbmcJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUxCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTMJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTYJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU3CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlOAk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydCB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fcHN0cjMyX3Qgc3NpZDsKKwl1OCBwYWRfMTJEWzNdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzdHlwZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJlYWNvbnBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGR0aW1wZXJpb2Q7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBwZXJpb2Q7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBtYXhkdXJhdGlvbjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoZHdlbGx0aW1lOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhob3BzZXQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBmaGhvcHBhdHRlcm47CisJcDgwMjExaXRlbV91aW50MzJfdCBkc2NoYW5uZWw7CisJcDgwMjExaXRlbV91aW50MzJfdCBpYnNzYXRpbXdpbmRvdzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHByb2JlZGVsYXk7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxhYmxlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2Zwb2xscmVxOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTI7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUzOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTU7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTg7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGUxOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlMjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTM7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU0OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlNTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTY7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU3OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlODsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0Ci17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzEyRFszXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJlYWNvbnBlcmlvZAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkdGltcGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcHBlcmlvZAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBtYXhkdXJhdGlvbgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZHNjaGFubmVsCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWlic3NhdGltd2luZG93CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGUgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGlmc3RhdGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZQotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWlmc3RhdGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmYgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGVuYWJsZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNoYW5uZWw7CisJcDgwMjExaXRlbV91aW50MzJfdCBwcmlzbWhlYWRlcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHdsYW5oZWFkZXI7CisJcDgwMjExaXRlbV91aW50MzJfdCBrZWVwd2VwZmxhZ3M7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdHJpcGZjczsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHBhY2tldF90cnVuYzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZgotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljaGFubmVsCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXByaXNtaGVhZGVyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXdsYW5oZWFkZXIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJa2VlcHdlcGZsYWdzCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN0cmlwZmNzCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXBhY2tldF90cnVuYwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmZfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcCB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGRlY3J5cHQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBlbmNyeXB0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcAotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZGVjcnlwdAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAllbmNyeXB0CTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eSB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGRibTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGxpbms7CisJcDgwMjExaXRlbV91aW50MzJfdCBsZXZlbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG5vaXNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHkKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWRibQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlsaW5rCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxldmVsCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW5vaXNlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4geworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3BzdHIzMl90IHNzaWQ7CisJdTggcGFkXzE5RFszXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGF1dGh0eXBlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbgotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOwotCXU4CXBhZF8xOURbM10JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aHR5cGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91bmsxMDI0X3QgcGRhOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdW5rMTAyNF90CXBkYQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZSB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZW5hYmxlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZXhlYWRkcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWV4ZWFkZHIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBhZGRyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbGVuOworCXA4MDIxMWl0ZW1fdW5rNDA5Nl90IGRhdGE7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZQotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbGVuCTsKLQlwODAyMTFpdGVtX3VuazQwOTZfdAlkYXRhCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBlbmFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOwotCXA4MDIxMWl0ZW1fdW5rNDA5Nl90CWRhdGEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYWRkcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGxlbjsKKwlwODAyMTFpdGVtX3VuazQwOTZfdCBkYXRhOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3Q7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCmluZGV4IDZjYzE2YzMuLjYyMzVmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKQEAgLTEwMSwxNCArMTAxLDggQEAKICNkZWZpbmUgX1A4MDIxMU1HTVRfSAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLSNlbmRpZgogCiAjaWZuZGVmICBfUDgwMjExSERSX0gKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKQEAgLTE2MCw4ICsxNTQsNiBAQAogI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT1BCQ0MJMjAKICNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfTk9BR0lMSVRZCTIxCiAKLQotCiAvKi0tIEF1dGggQWxnb3JpdGhtIEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lIFdMQU5fQVVUSF9BTEdfT1BFTlNZU1RFTQkJMAogI2RlZmluZSBXTEFOX0FVVEhfQUxHX1NIQVJFREtFWQkJCTEKQEAgLTIxMSwyMCArMjAzLDE2IEBACiAKICNkZWZpbmUgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OCQkwCiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1hY3JvcyAqLwotCiAvKi0tIENhcGFiaWxpdHkgRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19FU1MobikJCSgobikgJiBCSVQwKQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgoKG4pICYgQklUMSkgPj4gMSkKLSNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExBQkxFKG4pCSgoKG4pICYgQklUMikgPj4gMikKLSNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExSRVEobikJKCgobikgJiBCSVQzKSA+PiAzKQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1kobikJKCgobikgJiBCSVQ0KSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKChuKSAmIEJJVCgwKSkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19JQlNTKG4pCQkoKChuKSAmIEJJVCgxKSkgPj4gMSkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExBQkxFKG4pCSgoKG4pICYgQklUKDIpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKChuKSAmIEJJVCgzKSkgPj4gMykKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QUklWQUNZKG4pCSgoKG4pICYgQklUKDQpKSA+PiA0KQogICAvKiBwODAyMTFiIGFkZGl0aW9ucyAqLwotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1NIT1JUKG4pCQkoKChuKSAmIEJJVDUpID4+IDUpCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fUEJDQyhuKQkJKCgobikgJiBCSVQ2KSA+PiA2KQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0FHSUxJVFkobikJKCgobikgJiBCSVQ3KSA+PiA3KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1NIT1JUKG4pCQkoKChuKSAmIEJJVCg1KSkgPj4gNSkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKChuKSAmIEJJVCg2KSkgPj4gNikKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19BR0lMSVRZKG4pCSgoKG4pICYgQklUKDcpKSA+PiA3KQogCiAjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fRVNTKG4pCQkobikKICNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19JQlNTKG4pCQkoKG4pIDw8IDEpCkBAIC0yMzYsMTQzICsyMjQsMTI2IEBACiAjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fUEJDQyhuKQkJKChuKSA8PCA2KQogI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0FHSUxJVFkobikJKChuKSA8PCA3KQogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCiAvKi0tIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogcHJvdG90eXBlIHN0cnVjdHVyZSwgYWxsIElFcyBzdGFydCB3aXRoIHRoZXNlIG1lbWJlcnMgKi8KIAotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZQotewotCXU4CWVpZDsKLQl1OAlsZW47Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWUgeworCXU4IGVpZDsKKwl1OCBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX3Q7CiAKIC8qLS0gU2VydmljZSBTZXQgSWRlbnRpdHkgKFNTSUQpICAtLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX3NzaWQKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXU4CXNzaWRbMV07ICAvKiBtYXkgYmUgemVybywgcHRycyBtYXkgb3ZlcmxhcCAqLwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX3NzaWRfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfc3NpZCB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCBzc2lkWzFdOwkJLyogbWF5IGJlIHplcm8sIHB0cnMgbWF5IG92ZXJsYXAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5faWVfc3NpZF90OwogCiAvKi0tIFN1cHBvcnRlZCBSYXRlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zdXBwX3JhdGVzCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1OAlyYXRlc1sxXTsgIC8qIGhhZCBiZXR0ZXIgYmUgYXQgTEVBU1Qgb25lISAqLwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX3N1cHBfcmF0ZXNfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfc3VwcF9yYXRlcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCByYXRlc1sxXTsJCS8qIGhhZCBiZXR0ZXIgYmUgYXQgTEVBU1Qgb25lISAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9zdXBwX3JhdGVzX3Q7CiAKIC8qLS0gRkggUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX2ZoX3Bhcm1zCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1MTYJZHdlbGw7Ci0JdTgJaG9wc2V0OwotCXU4CWhvcHBhdHRlcm47Ci0JdTgJaG9waW5kZXg7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfZmhfcGFybXNfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfZmhfcGFybXMgeworCXU4IGVpZDsKKwl1OCBsZW47CisJdTE2IGR3ZWxsOworCXU4IGhvcHNldDsKKwl1OCBob3BwYXR0ZXJuOworCXU4IGhvcGluZGV4OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9maF9wYXJtc190OwogCiAvKi0tIERTIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9kc19wYXJtcwotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTgJY3Vycl9jaDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9kc19wYXJtc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9kc19wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCBjdXJyX2NoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9kc19wYXJtc190OwogCiAvKi0tIENGIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NmX3Bhcm1zCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1OAljZnBfY250OwotCXU4CWNmcF9wZXJpb2Q7Ci0JdTE2CWNmcF9tYXhkdXI7Ci0JdTE2CWNmcF9kdXJyZW1haW5pbmc7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2ZfcGFybXNfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfY2ZfcGFybXMgeworCXU4IGVpZDsKKwl1OCBsZW47CisJdTggY2ZwX2NudDsKKwl1OCBjZnBfcGVyaW9kOworCXUxNiBjZnBfbWF4ZHVyOworCXUxNiBjZnBfZHVycmVtYWluaW5nOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9jZl9wYXJtc190OwogCiAvKi0tIFRJTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV90aW0KLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXU4CWR0aW1fY250OwotCXU4CWR0aW1fcGVyaW9kOwotCXU4CWJpdG1hcF9jdGw7Ci0JdTgJdmlydF9ibVsxXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90aW1fdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfdGltIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IGR0aW1fY250OworCXU4IGR0aW1fcGVyaW9kOworCXU4IGJpdG1hcF9jdGw7CisJdTggdmlydF9ibVsxXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5faWVfdGltX3Q7CiAKIC8qLS0gSUJTUyBQYXJhbWV0ZXIgU2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX2lic3NfcGFybXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXUxNglhdGltX3dpbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9pYnNzX3Bhcm1zX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2lic3NfcGFybXMgeworCXU4IGVpZDsKKwl1OCBsZW47CisJdTE2IGF0aW1fd2luOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9pYnNzX3Bhcm1zX3Q7CiAKIC8qLS0gQ2hhbGxlbmdlIFRleHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NoYWxsZW5nZQotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTgJY2hhbGxlbmdlWzFdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2NoYWxsZW5nZV90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9jaGFsbGVuZ2UgeworCXU4IGVpZDsKKwl1OCBsZW47CisJdTggY2hhbGxlbmdlWzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9jaGFsbGVuZ2VfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qICBGcmFtZSBUeXBlcyAgKi8KIAogLyogcHJvdG90eXBlIHN0cnVjdHVyZSwgYWxsIG1nbXQgZnJhbWUgdHlwZXMgd2lsbCBzdGFydCB3aXRoIHRoZXNlIG1lbWJlcnMgKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfbWdtdAotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwkvKiBET0VTIE5PVCBpbmNsdWRlIENSQyAhISEhKi8KLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9tZ210IHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOwkJLyogRE9FUyBOT1QgaW5jbHVkZSBDUkMgISEhISAqLworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCiB9IHdsYW5fZnJfbWdtdF90OwogCiAvKi0tIEJlYWNvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9iZWFjb24KLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9iZWFjb24geworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXU2NAkJCSp0czsKLQl1MTYJCQkqYmNuX2ludDsKLQl1MTYJCQkqY2FwX2luZm87CisJdTY0ICp0czsKKwl1MTYgKmJjbl9pbnQ7CisJdTE2ICpjYXBfaW5mbzsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zc2lkX3QJCSpzc2lkOwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOwotCXdsYW5faWVfZmhfcGFybXNfdAkqZmhfcGFybXM7Ci0Jd2xhbl9pZV9kc19wYXJtc190CSpkc19wYXJtczsKLQl3bGFuX2llX2NmX3Bhcm1zX3QJKmNmX3Bhcm1zOwotCXdsYW5faWVfaWJzc19wYXJtc190CSppYnNzX3Bhcm1zOwotCXdsYW5faWVfdGltX3QJCSp0aW07CisJd2xhbl9pZV9zc2lkX3QgKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9maF9wYXJtc190ICpmaF9wYXJtczsKKwl3bGFuX2llX2RzX3Bhcm1zX3QgKmRzX3Bhcm1zOworCXdsYW5faWVfY2ZfcGFybXNfdCAqY2ZfcGFybXM7CisJd2xhbl9pZV9pYnNzX3Bhcm1zX3QgKmlic3NfcGFybXM7CisJd2xhbl9pZV90aW1fdCAqdGltOwogCiB9IHdsYW5fZnJfYmVhY29uX3Q7CiAKLQogLyotLSBJQlNTIEFUSU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfaWJzc2F0aW0KLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OCoJCQlidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9pYnNzYXRpbSB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCkBAIC0zODIsMTk0ICszNTMsMTc2IEBACiB9IHdsYW5fZnJfaWJzc2F0aW1fdDsKIAogLyotLSBEaXNhc3NvY2lhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGlzYXNzb2MKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kaXNhc3NvYyB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTE2CQkJKnJlYXNvbjsKKwl1MTYgKnJlYXNvbjsKIAogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KIAogfSB3bGFuX2ZyX2Rpc2Fzc29jX3Q7CiAKIC8qLS0gQXNzb2NpYXRpb24gUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2Fzc29jcmVxCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgqCQkJYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXEgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqbGlzdGVuX2ludDsKKwl1MTYgKmNhcF9pbmZvOworCXUxNiAqbGlzdGVuX2ludDsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zc2lkX3QJCSpzc2lkOwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfc3NpZF90ICpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190ICpzdXBwX3JhdGVzOwogCiB9IHdsYW5fZnJfYXNzb2NyZXFfdDsKIAogLyotLSBBc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXNwCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXNwIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqY2FwX2luZm87Ci0JdTE2CQkJKnN0YXR1czsKLQl1MTYJCQkqYWlkOworCXUxNiAqY2FwX2luZm87CisJdTE2ICpzdGF0dXM7CisJdTE2ICphaWQ7CiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfc3VwcF9yYXRlc190ICpzdXBwX3JhdGVzOwogCiB9IHdsYW5fZnJfYXNzb2NyZXNwX3Q7CiAKIC8qLS0gUmVhc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXEKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9yZWFzc29jcmVxIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqY2FwX2luZm87Ci0JdTE2CQkJKmxpc3Rlbl9pbnQ7Ci0JdTgJCQkqY3Vycl9hcDsKKwl1MTYgKmNhcF9pbmZvOworCXUxNiAqbGlzdGVuX2ludDsKKwl1OCAqY3Vycl9hcDsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zc2lkX3QJCSpzc2lkOwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfc3NpZF90ICpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190ICpzdXBwX3JhdGVzOwogCiB9IHdsYW5fZnJfcmVhc3NvY3JlcV90OwogCiAvKi0tIFJlYXNzb2NpYXRpb24gUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9yZWFzc29jcmVzcAotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXNwIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqY2FwX2luZm87Ci0JdTE2CQkJKnN0YXR1czsKLQl1MTYJCQkqYWlkOworCXUxNiAqY2FwX2luZm87CisJdTE2ICpzdGF0dXM7CisJdTE2ICphaWQ7CiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfc3VwcF9yYXRlc190ICpzdXBwX3JhdGVzOwogCiB9IHdsYW5fZnJfcmVhc3NvY3Jlc3BfdDsKIAogLyotLSBQcm9iZSBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXEKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9wcm9iZXJlcSB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwotCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKLQl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKwl3bGFuX2llX3NzaWRfdCAqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdCAqc3VwcF9yYXRlczsKIAogfSB3bGFuX2ZyX3Byb2JlcmVxX3Q7CiAKIC8qLS0gUHJvYmUgUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVzcAotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVzcCB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTY0CQkJKnRzOwotCXUxNgkJCSpiY25faW50OwotCXUxNgkJCSpjYXBfaW5mbzsKKwl1NjQgKnRzOworCXUxNiAqYmNuX2ludDsKKwl1MTYgKmNhcF9pbmZvOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7Ci0Jd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKLQl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOwotCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7Ci0Jd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7CisJd2xhbl9pZV9zc2lkX3QgKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9maF9wYXJtc190ICpmaF9wYXJtczsKKwl3bGFuX2llX2RzX3Bhcm1zX3QgKmRzX3Bhcm1zOworCXdsYW5faWVfY2ZfcGFybXNfdCAqY2ZfcGFybXM7CisJd2xhbl9pZV9pYnNzX3Bhcm1zX3QgKmlic3NfcGFybXM7CiB9IHdsYW5fZnJfcHJvYmVyZXNwX3Q7CiAKIC8qLS0gQXV0aGVudGljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2F1dGhlbgotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2F1dGhlbiB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTE2CQkJKmF1dGhfYWxnOwotCXUxNgkJCSphdXRoX3NlcTsKLQl1MTYJCQkqc3RhdHVzOworCXUxNiAqYXV0aF9hbGc7CisJdTE2ICphdXRoX3NlcTsKKwl1MTYgKnN0YXR1czsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9jaGFsbGVuZ2VfdAkqY2hhbGxlbmdlOworCXdsYW5faWVfY2hhbGxlbmdlX3QgKmNoYWxsZW5nZTsKIAogfSB3bGFuX2ZyX2F1dGhlbl90OwogCiAvKi0tIERlYXV0aGVuaWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2RlYXV0aGVuCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGVhdXRoZW4geworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpyZWFzb247CisJdTE2ICpyZWFzb247CiAKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCiAKIH0gd2xhbl9mcl9kZWF1dGhlbl90OwogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2JlYWNvbiggd2xhbl9mcl9iZWFjb25fdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9kaXNhc3NvYyggd2xhbl9mcl9kaXNhc3NvY190ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXEoIHdsYW5fZnJfYXNzb2NyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3Jlc3AoIHdsYW5fZnJfYXNzb2NyZXNwX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3JlcSggd2xhbl9mcl9yZWFzc29jcmVxX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3JlcSggd2xhbl9mcl9yZWFzc29jcmVxX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3Jlc3AoIHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVxKCB3bGFuX2ZyX3Byb2JlcmVxX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXNwKCB3bGFuX2ZyX3Byb2JlcmVzcF90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9hdXRoZW4oIHdsYW5fZnJfYXV0aGVuX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGVhdXRoZW4oIHdsYW5fZnJfZGVhdXRoZW5fdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOwotCit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYmVhY29uKHdsYW5fZnJfYmVhY29uX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2JlYWNvbih3bGFuX2ZyX2JlYWNvbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kaXNhc3NvYyh3bGFuX2ZyX2Rpc2Fzc29jX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXEod2xhbl9mcl9hc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3JlcSh3bGFuX2ZyX2Fzc29jcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVzcCh3bGFuX2ZyX2Fzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3Jlc3Aod2xhbl9mcl9hc3NvY3Jlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3JlcSh3bGFuX2ZyX3JlYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3JlcSh3bGFuX2ZyX3JlYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3Jlc3Aod2xhbl9mcl9yZWFzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVzcCh3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVxKHdsYW5fZnJfcHJvYmVyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9wcm9iZXJlc3Aod2xhbl9mcl9wcm9iZXJlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXNwKHdsYW5fZnJfcHJvYmVyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hdXRoZW4od2xhbl9mcl9hdXRoZW5fdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGVhdXRoZW4od2xhbl9mcl9kZWF1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKmYpOwogCiAjZW5kaWYgLyogX1A4MDIxMU1HTVRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaAppbmRleCAzYTU3NWQ4Li5mMTVhNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaApAQCAtNDksNTQgKzQ5LDE4IEBACiAjZGVmaW5lIF9QODAyMTFNU0dfSAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotI2RlZmluZSBNU0dfQlVGRl9MRU4JCTQwMDAKICNkZWZpbmUgV0xBTl9ERVZOQU1FTEVOX01BWAkxNgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qLS0tLS0gTWVzc2FnZSBTdHJ1Y3R1cmUgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByb3RvdHlwZSBtc2cgdHlwZSAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2cKLXsKLQl1MzIJbXNnY29kZTsKLQl1MzIJbXNnbGVuOwotCXU4CWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ190OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnZAotewotCXUzMgltc2djb2RlOwotCXUzMgltc2dsZW47Ci0JdTgJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKLQl1OAlhcmdzWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dkX3Q7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0jZW5kaWYgIC8qIF9QODAyMTFNU0dfSCAqLwotCisjZW5kaWYgLyogX1A4MDIxMU1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCmluZGV4IDU5ZTVhZDEuLmIyYTYwNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC00OSwxMyArNDksNyBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC03MCw5ICs2NCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2lmZGVmIFNJT0NFVEhUT09MCkBAIC04NSw3ICs4MCw2IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwogCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgogI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKQEAgLTk3LDMzICs5MSwyMiBAQAogI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKICNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBDb25zdGFudHMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIE1hY3JvcyAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KIC8qIFN1cHBvcnQgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBwODAyMTFuZXRkZXZfcnhfYmgodW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiBuZXRkZXZpY2UgbWV0aG9kIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2luaXQoIG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9vcGVuKCBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICk7Ci1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9pbml0KG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9vcGVuKG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AobmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKIHN0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0KG5ldGRldmljZV90ICpkZXYpOwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9kb19pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwKKwkJCQkgIGludCBjbWQpOwogc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dChuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKLXN0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBmYyk7CitzdGF0aWMgaW50IHA4MDIxMV9yeF90eXBlZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBmYyk7CiAKIGludCB3bGFuX3dhdGNoZG9nID0gNTAwMDsKIG1vZHVsZV9wYXJhbSh3bGFuX3dhdGNoZG9nLCBpbnQsIDA2NDQpOwpAQCAtMTMzLDE1ICsxMTYsNiBAQAogbW9kdWxlX3BhcmFtKHdsYW5fd2V4dF93cml0ZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod2xhbl93ZXh0X3dyaXRlLCAiZW5hYmxlIHdyaXRlIHdpcmVsZXNzIGV4dGVuc2lvbnMiKTsKIAotI2lmZGVmIFdMQU5fSU5DTFVERV9ERUJVRwotaW50IHdsYW5fZGVidWc9MDsKLW1vZHVsZV9wYXJhbSh3bGFuX2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh3bGFuX2RlYnVnLCAicDgwMjExIGRlYnVnIGxldmVsIik7Ci0jZW5kaWYKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFrbmV0ZGV2X2luaXQKICoKQEAgLTE1NCwxOCArMTI4LDE1IEBACiAqIFJldHVybnM6CiAqCW5vdGhpbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2luaXQoIG5ldGRldmljZV90ICpuZXRkZXYpCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdChuZXRkZXZpY2VfdCAqbmV0ZGV2KQogewotCURCRkVOVEVSOwogCS8qIENhbGxlZCBpbiByZXNwb25zZSB0byByZWdpc3Rlcl9uZXRkZXYgKi8KIAkvKiBUaGlzIGlzIHVzdWFsbHkgdGhlIHByb2JlIGZ1bmN0aW9uLCBidXQgdGhlIHByb2JlIGhhcyAqLwogCS8qIGFscmVhZHkgYmVlbiBkb25lIGJ5IHRoZSBNU0QgYW5kIHRoZSBjcmVhdGVfa2RldiAqLwogCS8qIGZ1bmN0aW9uLiAgQWxsIHdlIGRvIGhlcmUgaXMgcmV0dXJuIHN1Y2Nlc3MgKi8KLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFrbmV0ZGV2X2dldF9zdGF0cwogKgpAQCAtMTgwLDIwICsxNTEsMTYgQEAKICogUmV0dXJuczoKICoJdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXRpc3RpY3Mgc3RydWN0dXJlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyoKLXA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpCiB7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKIAogCS8qIFRPRE86IHJldmlldyB0aGUgTUlCIHN0YXRzIGZvciBpdGVtcyB0aGF0IGNvcnJlc3BvbmQgdG8KLQkJbGludXggc3RhdHMgKi8KKwkgICBsaW51eCBzdGF0cyAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gJih3bGFuZGV2LT5saW51eF9zdGF0cyk7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfb3BlbgogKgpAQCAtMjA4LDIyICsxNzUsMTkgQEAKICogUmV0dXJuczoKICoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4oIG5ldGRldmljZV90ICpuZXRkZXYgKQorc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4obmV0ZGV2aWNlX3QgKm5ldGRldikKIHsKLQlpbnQgCQlyZXN1bHQgPSAwOyAvKiBzdWNjZXNzICovCi0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdCA9IDA7CQkvKiBzdWNjZXNzICovCisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwogCiAJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBNU0QgaXMgcnVubmluZyAqLwotCWlmICggd2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORyApIHsKKwlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJLyogVGVsbCB0aGUgTVNEIHRvIG9wZW4gKi8KLQlpZiAoIHdsYW5kZXYtPm9wZW4gIT0gTlVMTCkgeworCWlmICh3bGFuZGV2LT5vcGVuICE9IE5VTEwpIHsKIAkJcmVzdWx0ID0gd2xhbmRldi0+b3Blbih3bGFuZGV2KTsKLQkJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CiAJCQluZXRpZl9zdGFydF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwogCQkJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9PUEVOOwogCQl9CkBAIC0yMzEsMTEgKzE5NSw5IEBACiAJCXJlc3VsdCA9IC1FQUdBSU47CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFrbmV0ZGV2X3N0b3AKICoKQEAgLTI0OCwyMSArMjEwLDE3IEBACiAqIFJldHVybnM6CiAqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICkKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKG5ldGRldmljZV90ICpuZXRkZXYpCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKKwlpbnQgcmVzdWx0ID0gMDsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7CiAKLQlEQkZFTlRFUjsKLQotCWlmICggd2xhbmRldi0+Y2xvc2UgIT0gTlVMTCApIHsKKwlpZiAod2xhbmRldi0+Y2xvc2UgIT0gTlVMTCkKIAkJcmVzdWx0ID0gd2xhbmRldi0+Y2xvc2Uod2xhbmRldik7Ci0JfQogCiAJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwogCXdsYW5kZXYtPnN0YXRlID0gV0xBTl9ERVZJQ0VfQ0xPU0VEOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNzksMTcgKzIzNywxMyBAQAogKiBTaWRlIGVmZmVjdHM6CiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLXA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IgKQordm9pZCBwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCURCRkVOVEVSOwotCiAJLyogRW5xdWV1ZSBmb3IgcG9zdC1pcnEgcHJvY2Vzc2luZyAqLwogCXNrYl9xdWV1ZV90YWlsKCZ3bGFuZGV2LT5uc2RfcnhxLCBza2IpOwogCiAJdGFza2xldF9zY2hlZHVsZSgmd2xhbmRldi0+cnhfYmgpOwogCi0gICAgICAgIERCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0zMTAsMTkgKzI2NCwxNyBAQAogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgYXJnOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCW5ldGRldmljZV90ICAgICAqZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCW5ldGRldmljZV90ICpkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CiAJcDgwMjExX2hkcl9hM190ICpoZHI7CiAJdTE2IGZjOwogCi0gICAgICAgIERCRkVOVEVSOwotCiAJLyogTGV0J3MgZW1wdHkgb3VyIG91ciBxdWV1ZSAqLwotCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkgKSB7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2xhbmRldi0+bnNkX3J4cSkpKSB7CiAJCWlmICh3bGFuZGV2LT5zdGF0ZSA9PSBXTEFOX0RFVklDRV9PUEVOKSB7CiAKIAkJCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSKSB7CiAJCQkJLyogUkFXIGZyYW1lOyB3ZSBzaG91bGRuJ3QgY29udmVydCBpdCAqLwotCQkJCS8vIFhYWCBBcHBlbmQgdGhlIFByaXNtIEhlYWRlciBoZXJlIGluc3RlYWQuCisJCQkJLyogWFhYIEFwcGVuZCB0aGUgUHJpc20gSGVhZGVyIGhlcmUgaW5zdGVhZC4gKi8KIAogCQkJCS8qIHNldCB1cCB2YXJpb3VzIGRhdGEgZmllbGRzICovCiAJCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC0zMzcsOCArMjg5LDggQEAKIAkJCQluZXRpZl9yeF9uaShza2IpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIHsKLQkJCQloZHIgPSAocDgwMjExX2hkcl9hM190ICopc2tiLT5kYXRhOwotCQkJCWZjID0gaWVlZTJob3N0MTYoaGRyLT5mYyk7CisJCQkJaGRyID0gKHA4MDIxMV9oZHJfYTNfdCAqKSBza2ItPmRhdGE7CisJCQkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZjKTsKIAkJCQlpZiAocDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXYsIGZjKSkgewogCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJCWNvbnRpbnVlOwpAQCAtMzQ3LDcgKzI5OSw5IEBACiAJCQkJLyogcGVyZm9ybSBtY2FzdCBmaWx0ZXJpbmcgKi8KIAkJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkJCQkvKiBhbGxvdyBteSBsb2NhbCBhZGRyZXNzIHRocm91Z2ggKi8KLQkJCQkJaWYgKG1lbWNtcChoZHItPmExLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKSAhPSAwKSB7CisJCQkJCWlmIChtZW1jbXAKKwkJCQkJICAgIChoZHItPmExLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLAorCQkJCQkgICAgIEVUSF9BTEVOKSAhPSAwKSB7CiAJCQkJCQkvKiBidXQgcmVqZWN0IGFueXRoaW5nIGVsc2UgdGhhdCBpc24ndCBtdWx0aWNhc3QgKi8KIAkJCQkJCWlmICghKGhkci0+YTFbMF0gJiAweDAxKSkgewogCQkJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTM1NiwyMyArMzEwLDIyIEBACiAJCQkJCX0KIAkJCQl9CiAKLQkJCQlpZiAoIHNrYl9wODAyMTFfdG9fZXRoZXIod2xhbmRldiwgd2xhbmRldi0+ZXRoY29udiwgc2tiKSA9PSAwICkgeworCQkJCWlmIChza2JfcDgwMjExX3RvX2V0aGVyCisJCQkJICAgICh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IpID09IDApIHsKIAkJCQkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9ieXRlcyArPQorCQkJCQkgICAgc2tiLT5sZW47CiAJCQkJCW5ldGlmX3J4X25pKHNrYik7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KLQkJCQlXTEFOX0xPR19ERUJVRygxLCAicDgwMjExX3RvX2V0aGVyIGZhaWxlZC5cbiIpOworCQkJCXByX2RlYnVnKCJwODAyMTFfdG9fZXRoZXIgZmFpbGVkLlxuIik7CiAJCQl9CiAJCX0KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KLQotICAgICAgICBEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFrbmV0ZGV2X2hhcmRfc3RhcnRfeG1pdAogKgpAQCAtMzkyLDIxICszNDUsMTkgQEAKICogUmV0dXJuczoKICoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQorc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgbmV0ZGV2aWNlX3QgKm5ldGRldikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JaW50CQl0eHJlc3VsdCA9IC0xOwotCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKLQlwODAyMTFfaGRyX3QgICAgcDgwMjExX2hkcjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgdHhyZXN1bHQgPSAtMTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7CisJcDgwMjExX2hkcl90IHA4MDIxMV9oZHI7CiAJcDgwMjExX21ldGF3ZXBfdCBwODAyMTFfd2VwOwogCi0JREJGRU5URVI7Ci0KLQlpZiAoc2tiID09IE5VTEwpIHsKKwlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAwOwotCX0KIAotICAgICAgICBpZiAod2xhbmRldi0+c3RhdGUgIT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCWlmICh3bGFuZGV2LT5zdGF0ZSAhPSBXTEFOX0RFVklDRV9PUEVOKSB7CiAJCXJlc3VsdCA9IDE7CiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTQxNCw4ICszNjUsOCBAQAogCW1lbXNldCgmcDgwMjExX2hkciwgMCwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwogCW1lbXNldCgmcDgwMjExX3dlcCwgMCwgc2l6ZW9mKHA4MDIxMV9tZXRhd2VwX3QpKTsKIAotCWlmICggbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICkgewotCQlXTEFOX0xPR19ERUJVRygxLCAiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpIHsKKwkJcHJfZGVidWcoImNhbGxlZCB3aGVuIHF1ZXVlIHN0b3BwZWQuXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtNDIzLDcgKzM3NCw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJLyogQ2hlY2sgdG8gc2VlIHRoYXQgYSB2YWxpZCBtb2RlIGlzIHNldCAqLwotCXN3aXRjaCggd2xhbmRldi0+bWFjbW9kZSApIHsKKwlzd2l0Y2ggKHdsYW5kZXYtPm1hY21vZGUpIHsKIAljYXNlIFdMQU5fTUFDTU9ERV9JQlNTX1NUQToKIAljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgogCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19BUDoKQEAgLTQzMywxMCArMzg0LDEwIEBACiAJCSAqIGFuZCByZXR1cm4gc3VjY2VzcyAuCiAJCSAqIFRPRE86IHdlIG5lZWQgYSBzYW5lciB3YXkgdG8gaGFuZGxlIHRoaXMKIAkJICovCi0JCWlmKHNrYi0+cHJvdG9jb2wgIT0gRVRIX1BfODAyMTFfUkFXKSB7CisJCWlmIChza2ItPnByb3RvY29sICE9IEVUSF9QXzgwMjExX1JBVykgewogCQkJbmV0aWZfc3RhcnRfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKLQkJCVdMQU5fTE9HX05PVElDRSgKLQkJCQkiVHggYXR0ZW1wdCBwcmlvciB0byBhc3NvY2lhdGlvbiwgZnJhbWUgZHJvcHBlZC5cbiIpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkgICAgICAgIlR4IGF0dGVtcHQgcHJpb3IgdG8gYXNzb2NpYXRpb24sIGZyYW1lIGRyb3BwZWQuXG4iKTsKIAkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJlc3VsdCA9IDA7CiAJCQlnb3RvIGZhaWxlZDsKQEAgLTQ0NSw3ICszOTYsNyBAQAogCX0KIAogCS8qIENoZWNrIGZvciByYXcgdHJhbnNtaXRzICovCi0JaWYoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF84MDIxMV9SQVcpIHsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF84MDIxMV9SQVcpIHsKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CiAJCQlyZXN1bHQgPSAxOwogCQkJZ290byBmYWlsZWQ7CkBAIC00NTQsMTUgKzQwNSwxNyBAQAogCQltZW1jcHkoJnA4MDIxMV9oZHIsIHNrYi0+ZGF0YSwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwogCQlza2JfcHVsbChza2IsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKIAl9IGVsc2UgewotCQlpZiAoIHNrYl9ldGhlcl90b19wODAyMTEod2xhbmRldiwgd2xhbmRldi0+ZXRoY29udiwgc2tiLCAmcDgwMjExX2hkciwgJnA4MDIxMV93ZXApICE9IDAgKSB7CisJCWlmIChza2JfZXRoZXJfdG9fcDgwMjExCisJCSAgICAod2xhbmRldiwgd2xhbmRldi0+ZXRoY29udiwgc2tiLCAmcDgwMjExX2hkciwKKwkJICAgICAmcDgwMjExX3dlcCkgIT0gMCkgewogCQkJLyogY29udmVydCBmYWlsZWQgKi8KLQkJCVdMQU5fTE9HX0RFQlVHKDEsICJldGhlcl90b184MDIxMSglZCkgZmFpbGVkLlxuIiwKLQkJCQkJd2xhbmRldi0+ZXRoY29udik7CisJCQlwcl9kZWJ1ZygiZXRoZXJfdG9fODAyMTEoJWQpIGZhaWxlZC5cbiIsCisJCQkgICAgICAgd2xhbmRldi0+ZXRoY29udik7CiAJCQlyZXN1bHQgPSAxOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9Ci0JaWYgKCB3bGFuZGV2LT50eGZyYW1lID09IE5VTEwgKSB7CisJaWYgKHdsYW5kZXYtPnR4ZnJhbWUgPT0gTlVMTCkgewogCQlyZXN1bHQgPSAxOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC00NzUsMjggKzQyOCwyOCBAQAogCiAJdHhyZXN1bHQgPSB3bGFuZGV2LT50eGZyYW1lKHdsYW5kZXYsIHNrYiwgJnA4MDIxMV9oZHIsICZwODAyMTFfd2VwKTsKIAotCWlmICggdHhyZXN1bHQgPT0gMCkgeworCWlmICh0eHJlc3VsdCA9PSAwKSB7CiAJCS8qIHN1Y2Nlc3MgYW5kIG1vcmUgYnVmICovCiAJCS8qIGF2YWlsLCByZTogaHdfdHhkYXRhICovCiAJCW5ldGlmX3dha2VfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKIAkJcmVzdWx0ID0gMDsKLQl9IGVsc2UgaWYgKCB0eHJlc3VsdCA9PSAxICkgeworCX0gZWxzZSBpZiAodHhyZXN1bHQgPT0gMSkgewogCQkvKiBzdWNjZXNzLCBubyBtb3JlIGF2YWlsICovCi0JCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHN1Y2Nlc3MsIG5vIG1vcmUgYnVmc1xuIik7CisJCXByX2RlYnVnKCJ0eGZyYW1lIHN1Y2Nlc3MsIG5vIG1vcmUgYnVmc1xuIik7CiAJCS8qIG5ldGRldi0+dGJ1c3kgPSAxOyAgZG9uJ3Qgc2V0IGhlcmUsIGlycWhkbHIgKi8KIAkJLyogICBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgaXQgKi8KIAkJcmVzdWx0ID0gMDsKLQl9IGVsc2UgaWYgKCB0eHJlc3VsdCA9PSAyICkgeworCX0gZWxzZSBpZiAodHhyZXN1bHQgPT0gMikgewogCQkvKiBhbGxvYyBmYWlsdXJlLCBkcm9wIGZyYW1lICovCi0JCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGFsbG9jX2ZhaWxcbiIpOworCQlwcl9kZWJ1ZygidHhmcmFtZSByZXR1cm5lZCBhbGxvY19mYWlsXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAl9IGVsc2UgewogCQkvKiBidWZmZXIgZnVsbCBvciBxdWV1ZSBidXN5LCBkcm9wIGZyYW1lLiAqLwotCQlXTEFOX0xPR19ERUJVRygzLCAidHhmcmFtZSByZXR1cm5lZCBmdWxsIG9yIGJ1c3lcbiIpOworCQlwcl9kZWJ1ZygidHhmcmFtZSByZXR1cm5lZCBmdWxsIG9yIGJ1c3lcbiIpOwogCQlyZXN1bHQgPSAxOwogCX0KIAotIGZhaWxlZDoKK2ZhaWxlZDoKIAkvKiBGcmVlIHVwIHRoZSBXRVAgYnVmZmVyIGlmIGl0J3Mgbm90IHRoZSBzYW1lIGFzIHRoZSBza2IgKi8KIAlpZiAoKHA4MDIxMV93ZXAuZGF0YSkgJiYgKHA4MDIxMV93ZXAuZGF0YSAhPSBza2ItPmRhdGEpKQogCQlrZnJlZShwODAyMTFfd2VwLmRhdGEpOwpAQCAtNTA1LDExICs0NTgsOSBAQAogCWlmICghcmVzdWx0KQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0CiAqCkBAIC01MjQsMTYgKzQ3NSwxMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdChuZXRkZXZpY2VfdCAqZGV2KQogewotCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAogCS8qIFRPRE86ICByZWFsIG11bHRpY2FzdCBzdXBwb3J0IGFzIHdlbGwgKi8KIAogCWlmICh3bGFuZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QpCiAJCXdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCh3bGFuZGV2LCBkZXYpOwogCi0JREJGRVhJVDsKIH0KIAogI2lmZGVmIFNJT0NFVEhUT09MCkBAIC01NTgsOSArNTA2LDYgQEAKIAkJc25wcmludGYoaW5mby52ZXJzaW9uLCBzaXplb2YoaW5mby52ZXJzaW9uKSwgIiVzIiwKIAkJCSBXTEFOX1JFTEVBU0UpOwogCi0JCS8vIGluZm8uZndfdmVyc2lvbgotCQkvLyBpbmZvLmJ1c19pbmZvCi0KIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CkBAIC01NzYsNyArNTIxLDcgQEAKIAkJfQogCiAJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKQEAgLTYxNSw0NSArNTYwLDQ3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9kb19pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKLQlpbnQJCQlyZXN1bHQgPSAwOwotCXA4MDIxMWlvY3RsX3JlcV90CSpyZXEgPSAocDgwMjExaW9jdGxfcmVxX3QqKWlmcjsKLQl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXU4CQkJKm1zZ2J1ZjsKLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFpb2N0bF9yZXFfdCAqcmVxID0gKHA4MDIxMWlvY3RsX3JlcV90ICopIGlmcjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJdTggKm1zZ2J1ZjsKIAotCVdMQU5fTE9HX0RFQlVHKDIsICJyeCdkIGlvY3RsLCBjbWQ9JWQsIGxlbj0lZFxuIiwgY21kLCByZXEtPmxlbik7CisJcHJfZGVidWcoInJ4J2QgaW9jdGwsIGNtZD0lZCwgbGVuPSVkXG4iLCBjbWQsIHJlcS0+bGVuKTsKKworCW11dGV4X2xvY2soJndsYW5kZXYtPmlvY3RsX2xvY2spOwogCiAjaWZkZWYgU0lPQ0VUSFRPT0wKIAlpZiAoY21kID09IFNJT0NFVEhUT09MKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMW5ldGRldl9ldGh0b29sKHdsYW5kZXYsICh2b2lkIF9fdXNlciAqKSBpZnItPmlmcl9kYXRhKTsKKwkJcmVzdWx0ID0KKwkJICAgIHA4MDIxMW5ldGRldl9ldGh0b29sKHdsYW5kZXYsICh2b2lkIF9fdXNlciAqKWlmci0+aWZyX2RhdGEpOwogCQlnb3RvIGJhaWw7CiAJfQogI2VuZGlmCiAKIAkvKiBUZXN0IHRoZSBtYWdpYywgYXNzdW1lIGlmciBpcyBnb29kIGlmIGl0J3MgdGhlcmUgKi8KLQlpZiAoIHJlcS0+bWFnaWMgIT0gUDgwMjExX0lPQ1RMX01BR0lDICkgeworCWlmIChyZXEtPm1hZ2ljICE9IFA4MDIxMV9JT0NUTF9NQUdJQykgewogCQlyZXN1bHQgPSAtRU5PU1lTOwogCQlnb3RvIGJhaWw7CiAJfQogCi0JaWYgKCBjbWQgPT0gUDgwMjExX0lGVEVTVCApIHsKKwlpZiAoY21kID09IFA4MDIxMV9JRlRFU1QpIHsKIAkJcmVzdWx0ID0gMDsKIAkJZ290byBiYWlsOwotCX0gZWxzZSBpZiAoIGNtZCAhPSBQODAyMTFfSUZSRVEgKSB7CisJfSBlbHNlIGlmIChjbWQgIT0gUDgwMjExX0lGUkVRKSB7CiAJCXJlc3VsdCA9IC1FTk9TWVM7CiAJCWdvdG8gYmFpbDsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBhIGJ1ZiBvZiBzaXplIHJlcS0+bGVuICovCi0JaWYgKChtc2didWYgPSBrbWFsbG9jKCByZXEtPmxlbiwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWlmICggY29weV9mcm9tX3VzZXIoIG1zZ2J1ZiwgKHZvaWQgX191c2VyICopIHJlcS0+ZGF0YSwgcmVxLT5sZW4pICkgeworCWlmICgobXNnYnVmID0ga21hbGxvYyhyZXEtPmxlbiwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcihtc2didWYsICh2b2lkIF9fdXNlciAqKXJlcS0+ZGF0YSwgcmVxLT5sZW4pKQogCQkJcmVzdWx0ID0gLUVGQVVMVDsKLQkJfSBlbHNlIHsKLQkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3QoIHdsYW5kZXYsIG1zZ2J1Zik7Ci0JCX0KKwkJZWxzZQorCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCBtc2didWYpOwogCi0JCWlmICggcmVzdWx0ID09IDAgKSB7Ci0JCQlpZiAoIGNvcHlfdG9fdXNlciggKHZvaWQgX191c2VyICopIHJlcS0+ZGF0YSwgbXNnYnVmLCByZXEtPmxlbikpIHsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlpZiAoY29weV90b191c2VyCisJCQkgICAgKCh2b2lkIF9fdXNlciAqKXJlcS0+ZGF0YSwgbXNnYnVmLCByZXEtPmxlbikpIHsKIAkJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJfQogCQl9CkBAIC02NjIsOSArNjA5LDkgQEAKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAl9CiBiYWlsOgotCURCRkVYSVQ7CisJbXV0ZXhfdW5sb2NrKCZ3bGFuZGV2LT5pb2N0bF9sb2NrKTsKIAotCXJldHVybiByZXN1bHQ7IC8qIElmIGFsbG9jYXRlLGNvcHlmcm9tIG9yIGNvcHl0byBmYWlscywgcmV0dXJuIGVycm5vICovCisJcmV0dXJuIHJlc3VsdDsJCS8qIElmIGFsbG9jYXRlLGNvcHlmcm9tIG9yIGNvcHl0byBmYWlscywgcmV0dXJuIGVycm5vICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjk0LDIyICs2NDEsMjAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKQogewotCXN0cnVjdCBzb2NrYWRkcgkJCSpuZXdfYWRkciA9IGFkZHI7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CWRvdDExcmVxOwotCXA4MDIxMWl0ZW1fdW5rMzkyX3QJCSptaWJhdHRyOwotCXA4MDIxMWl0ZW1fcHN0cjZfdAkJKm1hY2FkZHI7Ci0JcDgwMjExaXRlbV91aW50MzJfdAkJKnJlc3VsdGNvZGU7CisJc3RydWN0IHNvY2thZGRyICpuZXdfYWRkciA9IGFkZHI7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IGRvdDExcmVxOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QgKm1pYmF0dHI7CisJcDgwMjExaXRlbV9wc3RyNl90ICptYWNhZGRyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgKnJlc3VsdGNvZGU7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlEQkZFTlRFUjsKIAkvKiBJZiB3ZSdyZSBydW5uaW5nLCB3ZSBkb24ndCBhbGxvdyBNQUMgYWRkcmVzcyBjaGFuZ2VzICovCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUJVU1k7Ci0JfQogCiAJLyogU2V0IHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMuICovCiAJbWliYXR0ciA9ICZkb3QxMXJlcS5taWJhdHRyaWJ1dGU7Ci0JbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QqKSZtaWJhdHRyLT5kYXRhOworCW1hY2FkZHIgPSAocDgwMjExaXRlbV9wc3RyNl90ICopJm1pYmF0dHItPmRhdGE7CiAJcmVzdWx0Y29kZSA9ICZkb3QxMXJlcS5yZXN1bHRjb2RlOwogCiAJLyogU2V0IHVwIGEgZG90MTFyZXFfbWlic2V0ICovCkBAIC03MTcsOCArNjYyLDcgQEAKIAlkb3QxMXJlcS5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKIAlkb3QxMXJlcS5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90KTsKIAltZW1jcHkoZG90MTFyZXEuZGV2bmFtZSwKLQkJKCh3bGFuZGV2aWNlX3QgKilkZXYtPm1sX3ByaXYpLT5uYW1lLAotCQlXTEFOX0RFVk5BTUVMRU5fTUFYIC0gMSk7CisJICAgICAgICgod2xhbmRldmljZV90ICopIGRldi0+bWxfcHJpdiktPm5hbWUsIFdMQU5fREVWTkFNRUxFTl9NQVggLSAxKTsKIAogCS8qIFNldCB1cCB0aGUgbWliYXR0cmlidXRlIGFyZ3VtZW50ICovCiAJbWliYXR0ci0+ZGlkID0gRElEbXNnX2RvdDExcmVxX21pYnNldF9taWJhdHRyaWJ1dGU7CkBAIC03MjgsOCArNjcyLDggQEAKIAltYWNhZGRyLT5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3M7CiAJbWFjYWRkci0+c3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCW1hY2FkZHItPmxlbiA9IHNpemVvZihtYWNhZGRyLT5kYXRhKTsKLQltYWNhZGRyLT5kYXRhLmxlbiA9IFdMQU5fQUREUl9MRU47Ci0JbWVtY3B5KCZtYWNhZGRyLT5kYXRhLmRhdGEsIG5ld19hZGRyLT5zYV9kYXRhLCBXTEFOX0FERFJfTEVOKTsKKwltYWNhZGRyLT5kYXRhLmxlbiA9IEVUSF9BTEVOOworCW1lbWNweSgmbWFjYWRkci0+ZGF0YS5kYXRhLCBuZXdfYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwogCiAJLyogU2V0IHVwIHRoZSByZXN1bHRjb2RlIGFyZ3VtZW50ICovCiAJcmVzdWx0Y29kZS0+ZGlkID0gRElEbXNnX2RvdDExcmVxX21pYnNldF9yZXN1bHRjb2RlOwpAQCAtNzQzLDM2ICs2ODcsMzAgQEAKIAkvKiBJZiB0aGUgcmVxdWVzdCB3YXNuJ3Qgc3VjY2Vzc2Z1bCwgcmVwb3J0IGFuIGVycm9yIGFuZCBkb24ndAogCSAqIGNoYW5nZSB0aGUgbmV0ZGV2IGFkZHJlc3MKIAkgKi8KLQlpZiAoIHJlc3VsdCAhPSAwIHx8IHJlc3VsdGNvZGUtPmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCSJMb3ctbGV2ZWwgZHJpdmVyIGZhaWxlZCBkb3QxMXJlcV9taWJzZXQoZG90MTFNQUNBZGRyZXNzKS5cbiIpOworCWlmIChyZXN1bHQgIT0gMCB8fCByZXN1bHRjb2RlLT5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkxvdy1sZXZlbCBkcml2ZXIgZmFpbGVkIGRvdDExcmVxX21pYnNldChkb3QxMU1BQ0FkZHJlc3MpLlxuIik7CiAJCXJlc3VsdCA9IC1FQUREUk5PVEFWQUlMOwogCX0gZWxzZSB7CiAJCS8qIGV2ZXJ5dGhpbmcncyBvaywgY2hhbmdlIHRoZSBhZGRyIGluIG5ldGRldiAqLwogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbmV3X2FkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCB3bGFuX2NoYW5nZV9tdHUobmV0ZGV2aWNlX3QgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0JREJGRU5URVI7Ci0JLy8gMjMxMiBpcyBtYXggODAyLjExIHBheWxvYWQsIDIwIGlzIG92ZXJoZWFkLCAoZXRoZXIgKyBsbGMgK3NuYXApCi0JLy8gYW5kIGFub3RoZXIgOCBmb3Igd2VwLgotICAgICAgICBpZiAoIChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gKDIzMTIgLSAyMCAtIDgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkvKiAyMzEyIGlzIG1heCA4MDIuMTEgcGF5bG9hZCwgMjAgaXMgb3ZlcmhlYWQsIChldGhlciArIGxsYyArc25hcCkKKwkgICBhbmQgYW5vdGhlciA4IGZvciB3ZXAuICovCisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gKDIzMTIgLSAyMCAtIDgpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICAgZGV2LT5tdHUgPSBuZXdfbXR1OworCWRldi0+bXR1ID0gbmV3X210dTsKIAotCURCRkVYSVQ7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogd2xhbl9zZXR1cAogKgpAQCAtNzk3LDEwICs3MzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgd2xhbl9zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCW5ldGRldmljZV90CSpkZXY7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwluZXRkZXZpY2VfdCAqZGV2OwogCiAJLyogU2V0IHVwIHRoZSB3bGFuZGV2ICovCiAJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CkBAIC04MTAsMjggKzc0NiwyNiBAQAogCS8qIFNldCB1cCB0aGUgcnggcXVldWUgKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZ3bGFuZGV2LT5uc2RfcnhxKTsKIAl0YXNrbGV0X2luaXQoJndsYW5kZXYtPnJ4X2JoLAotCQkgICAgIHA4MDIxMW5ldGRldl9yeF9iaCwKLQkJICAgICAodW5zaWduZWQgbG9uZyl3bGFuZGV2KTsKKwkJICAgICBwODAyMTFuZXRkZXZfcnhfYmgsICh1bnNpZ25lZCBsb25nKXdsYW5kZXYpOwogCiAJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBkZXZpY2UgKi8KLQlkZXYgPSBhbGxvY19uZXRkZXYoMCwid2xhbiVkIixldGhlcl9zZXR1cCk7Ci0JaWYgKCBkZXYgPT0gTlVMTCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKKwlkZXYgPSBhbGxvY19uZXRkZXYoMCwgIndsYW4lZCIsIGV0aGVyX3NldHVwKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2MgbmV0ZGV2LlxuIik7CiAJCXJlc3VsdCA9IDE7CiAJfSBlbHNlIHsKIAkJd2xhbmRldi0+bmV0ZGV2ID0gZGV2OwogCQlkZXYtPm1sX3ByaXYgPSB3bGFuZGV2OwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9CXA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0OwotCQlkZXYtPmdldF9zdGF0cyA9CXA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzOwotI2lmZGVmIEhBVkVfUFJJVkFURV9JT0NUTAotCQlkZXYtPmRvX2lvY3RsID0gCXA4MDIxMWtuZXRkZXZfZG9faW9jdGw7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX01VTFRJQ0FTVAotCQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0OwotI2VuZGlmCi0JCWRldi0+aW5pdCA9CQlwODAyMTFrbmV0ZGV2X2luaXQ7Ci0JCWRldi0+b3BlbiA9CQlwODAyMTFrbmV0ZGV2X29wZW47Ci0JCWRldi0+c3RvcCA9CQlwODAyMTFrbmV0ZGV2X3N0b3A7CisJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQ7CisJCWRldi0+Z2V0X3N0YXRzID0gcDgwMjExa25ldGRldl9nZXRfc3RhdHM7CisJCWRldi0+aW5pdCA9IHA4MDIxMWtuZXRkZXZfaW5pdDsKKwkJZGV2LT5vcGVuID0gcDgwMjExa25ldGRldl9vcGVuOworCQlkZXYtPnN0b3AgPSBwODAyMTFrbmV0ZGV2X3N0b3A7CisKKwkJbXV0ZXhfaW5pdCgmd2xhbmRldi0+aW9jdGxfbG9jayk7CisJCS8qIGJsb2NrIGlvY3RscyB1bnRpbCBmdWxseSBpbml0aWFsaXNlZC4gRG9uJ3QgZm9yZ2V0IHRvIGNhbGwKKwkJICAgYWxsb3dfaW9jdGxzIGF0IHNvbWUgcG9pbnQhKi8KKwkJbXV0ZXhfbG9jaygmd2xhbmRldi0+aW9jdGxfbG9jayk7CiAKICNpZiAoV0lSRUxFU1NfRVhUIDwgMjEpCiAJCWRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHM7CkBAIC04MzksMjAgKzc3Myw5IEBACiAJCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKIAogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0jaWZkZWYgSEFWRV9DSEFOR0VfTVRVCi0JCWRldi0+Y2hhbmdlX210dSA9IHdsYW5fY2hhbmdlX210dTsKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0VUX01BQ19BRERSCi0JCWRldi0+c2V0X21hY19hZGRyZXNzID0JcDgwMjExa25ldGRldl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQkJZGV2LT50eF90aW1lb3V0ICAgICAgPSAgJnA4MDIxMWtuZXRkZXZfdHhfdGltZW91dDsKLQkJZGV2LT53YXRjaGRvZ190aW1lbyAgPSAgKHdsYW5fd2F0Y2hkb2cgKiBIWikgLyAxMDAwOwotI2VuZGlmCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NzksMjYgKzgwMiwyMSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKIAogCXRhc2tsZXRfa2lsbCgmd2xhbmRldi0+cnhfYmgpOwogCi0JaWYgKHdsYW5kZXYtPm5ldGRldiA9PSBOVUxMICkgewotCQlXTEFOX0xPR19FUlJPUigiY2FsbGVkIHdpdGhvdXQgd2xhbmRldi0+bmV0ZGV2IHNldC5cbiIpOworCWlmICh3bGFuZGV2LT5uZXRkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbGxlZCB3aXRob3V0IHdsYW5kZXYtPm5ldGRldiBzZXQuXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAl9IGVsc2UgewogCQlmcmVlX25ldGRldih3bGFuZGV2LT5uZXRkZXYpOwogCQl3bGFuZGV2LT5uZXRkZXYgPSBOVUxMOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcmVnaXN0ZXJfd2xhbmRldgogKgpAQCAtOTIwLDE5ICs4MzgsMTUgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWludAkJaSA9IDA7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgaSA9IDA7CiAKIAlpID0gcmVnaXN0ZXJfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CiAJaWYgKGkpCiAJCXJldHVybiBpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogdW5yZWdpc3Rlcl93bGFuZGV2CiAqCkBAIC05NTQsMjAgKzg2OCwxNSBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlEQkZFTlRFUjsKLQogCXVucmVnaXN0ZXJfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CiAKIAkvKiBOb3cgdG8gY2xlYW4gb3V0IHRoZSByeCBxdWV1ZSAqLwotCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkgKSB7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2xhbmRldi0+bnNkX3J4cSkpKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZAogKgpAQCAtMTAwMCwxOCArOTA5LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHZvaWQgcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JREJGRU5URVI7CiAJd2xhbmRldi0+aHdyZW1vdmVkID0gMTsKLQlpZiAoIHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKKwlpZiAod2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikKIAkJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCX0KIAogCW5ldGlmX2RldmljZV9kZXRhY2god2xhbmRldi0+bmV0ZGV2KTsKLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMV9yeF90eXBlZHJvcAogKgpAQCAtMTAzMywyOCArOTM3LDI3IEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBmYykKK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKQogewotCXUxNglmdHlwZTsKLQl1MTYJZnN0eXBlOwotCWludAlkcm9wID0gMDsKKwl1MTYgZnR5cGU7CisJdTE2IGZzdHlwZTsKKwlpbnQgZHJvcCA9IDA7CiAJLyogQ2xhc3NpZnkgZnJhbWUsIGluY3JlbWVudCBjb3VudGVyICovCiAJZnR5cGUgPSBXTEFOX0dFVF9GQ19GVFlQRShmYyk7CiAJZnN0eXBlID0gV0xBTl9HRVRfRkNfRlNUWVBFKGZjKTsKICNpZiAwCi0JV0xBTl9MT0dfREVCVUcoNCwKLQkJInJ4X3R5cGVkcm9wIDogZnR5cGU9JWQgZnN0eXBlPSVkLlxuIiwgZnR5cGUsIGZzdHlwZSk7CisJcHJfZGVidWcoInJ4X3R5cGVkcm9wIDogZnR5cGU9JWQgZnN0eXBlPSVkLlxuIiwgZnR5cGUsIGZzdHlwZSk7CiAjZW5kaWYKLQlzd2l0Y2ggKCBmdHlwZSApIHsKKwlzd2l0Y2ggKGZ0eXBlKSB7CiAJY2FzZSBXTEFOX0ZUWVBFX01HTVQ6CiAJCWlmICgod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fAotCQkJKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCSAgICAod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJCWRyb3AgPSAxOwogCQkJYnJlYWs7CiAJCX0KLQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgbWdtdDpcbiIpOworCQlwcl9kZWJ1ZygicngnZCBtZ210OlxuIik7CiAJCXdsYW5kZXYtPnJ4Lm1nbXQrKzsKLQkJc3dpdGNoKCBmc3R5cGUgKSB7CisJCXN3aXRjaCAoZnN0eXBlKSB7CiAJCWNhc2UgV0xBTl9GU1RZUEVfQVNTT0NSRVE6CiAJCQkvKiBwcmludGsoImFzc29jcmVxIik7ICovCiAJCQl3bGFuZGV2LT5yeC5hc3NvY3JlcSsrOwpAQCAtMTExMCwxMyArMTAxMywxMyBAQAogCiAJY2FzZSBXTEFOX0ZUWVBFX0NUTDoKIAkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8Ci0JCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJICAgICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkJZHJvcCA9IDE7CiAJCQlicmVhazsKIAkJfQotCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBjdGw6XG4iKTsKKwkJcHJfZGVidWcoInJ4J2QgY3RsOlxuIik7CiAJCXdsYW5kZXYtPnJ4LmN0bCsrOwotCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJc3dpdGNoIChmc3R5cGUpIHsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9QU1BPTEw6CiAJCQkvKiBwcmludGsoInBzcG9sbCIpOyAqLwogCQkJd2xhbmRldi0+cngucHNwb2xsKys7CkBAIC0xMTUyLDcgKzEwNTUsNyBAQAogCiAJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CiAJCXdsYW5kZXYtPnJ4LmRhdGErKzsKLQkJc3dpdGNoKCBmc3R5cGUgKSB7CisJCXN3aXRjaCAoZnN0eXBlKSB7CiAJCWNhc2UgV0xBTl9GU1RZUEVfREFUQU9OTFk6CiAJCQl3bGFuZGV2LT5yeC5kYXRhb25seSsrOwogCQkJYnJlYWs7CkBAIC0xMTY2LDE5ICsxMDY5LDE5IEBACiAJCQl3bGFuZGV2LT5yeC5kYXRhX19jZmFja19jZnBvbGwrKzsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRlNUWVBFX05VTEw6Ci0JCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOm51bGxcbiIpOworCQkJcHJfZGVidWcoInJ4J2QgZGF0YTpudWxsXG4iKTsKIAkJCXdsYW5kZXYtPnJ4Lm51bGwrKzsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRlNUWVBFX0NGQUNLOgotCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZmFja1xuIik7CisJCQlwcl9kZWJ1ZygicngnZCBkYXRhOmNmYWNrXG4iKTsKIAkJCXdsYW5kZXYtPnJ4LmNmYWNrKys7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9DRlBPTEw6Ci0JCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmcG9sbFxuIik7CisJCQlwcl9kZWJ1ZygicngnZCBkYXRhOmNmcG9sbFxuIik7CiAJCQl3bGFuZGV2LT5yeC5jZnBvbGwrKzsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRlNUWVBFX0NGQUNLX0NGUE9MTDoKLQkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6Y2ZhY2tfY2Zwb2xsXG4iKTsKKwkJCXByX2RlYnVnKCJyeCdkIGRhdGE6Y2ZhY2tfY2Zwb2xsXG4iKTsKIAkJCXdsYW5kZXYtPnJ4LmNmYWNrX2NmcG9sbCsrOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xMTkyLDE4ICsxMDk1LDIwIEBACiAJcmV0dXJuIGRyb3A7CiB9CiAKLXN0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dChuZXRkZXZpY2VfdCAqbmV0ZGV2KQogewotCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKLQlEQkZFTlRFUjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7CiAKIAlpZiAod2xhbmRldi0+dHhfdGltZW91dCkgewogCQl3bGFuZGV2LT50eF90aW1lb3V0KHdsYW5kZXYpOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX1dBUk5JTkcoIkltcGxlbWVudCB0eF90aW1lb3V0IGZvciAlc1xuIiwKLQkJCQkgd2xhbmRldi0+bnNkbmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkltcGxlbWVudCB0eF90aW1lb3V0IGZvciAlc1xuIiwKKwkJICAgICAgIHdsYW5kZXYtPm5zZG5hbWUpOwogCQluZXRpZl93YWtlX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CiAJfQorfQogCi0JREJGRVhJVDsKK3ZvaWQgcDgwMjExX2FsbG93X2lvY3Rscyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJbXV0ZXhfdW5sb2NrKCZ3bGFuZGV2LT5pb2N0bF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKaW5kZXggOTQwMTQ2Zi4uYjk2MDkwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKQEAgLTU1LDEwICs1NSwxNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvbnN0YW50cyAqLwogCisjdW5kZWYgbmV0ZGV2aWNlX3QKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7CisKKyNkZWZpbmUgV0xBTl9SRUxFQVNFCSIwLjMuMC1zdGFnaW5nIgorCiAjZGVmaW5lIFdMQU5fREVWSUNFX0NMT1NFRAkwCiAjZGVmaW5lIFdMQU5fREVWSUNFX09QRU4JMQogCkBAIC02OCw4ICs3NCw2IEBACiAjZGVmaW5lIFdMQU5fTUFDTU9ERV9FU1NfQVAJMwogCiAvKiBNU0QgU3RhdGVzICovCi0jZGVmaW5lIFdMQU5fTVNEX1NUQVJUCQkJLTEKLSNkZWZpbmUgV0xBTl9NU0RfRFJJVkVSTE9BREVECQkwCiAjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVF9QRU5ESU5HCTEKICNkZWZpbmUgV0xBTl9NU0RfSFdGQUlMCQkJMgogI2RlZmluZSBXTEFOX01TRF9IV1BSRVNFTlQJCTMKQEAgLTc5LDc5ICs4Myw2NiBAQAogI2RlZmluZSBXTEFOX01TRF9SVU5OSU5HCQk3CiAKICNpZm5kZWYgRVRIX1BfRUNPTkVUCi0jZGVmaW5lIEVUSF9QX0VDT05FVCAgIDB4MDAxOCAgICAvKiBuZWVkZWQgZm9yIDIuMi54IGtlcm5lbHMgKi8KKyNkZWZpbmUgRVRIX1BfRUNPTkVUICAgMHgwMDE4CS8qIG5lZWRlZCBmb3IgMi4yLngga2VybmVscyAqLwogI2VuZGlmCiAKICNkZWZpbmUgRVRIX1BfODAyMTFfUkFXICAgICAgICAoRVRIX1BfRUNPTkVUICsgMSkKIAogI2lmbmRlZiBBUlBIUkRfSUVFRTgwMjExCi0jZGVmaW5lIEFSUEhSRF9JRUVFODAyMTEgODAxICAgICAvKiBrZXJuZWwgMi40LjYgKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMSA4MDEJLyoga2VybmVsIDIuNC42ICovCiAjZW5kaWYKIAotI2lmbmRlZiBBUlBIUkRfSUVFRTgwMjExX1BSSVNNICAvKiBrZXJuZWwgMi40LjE4ICovCisjaWZuZGVmIEFSUEhSRF9JRUVFODAyMTFfUFJJU00JLyoga2VybmVsIDIuNC4xOCAqLwogI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNIDgwMgogI2VuZGlmCiAKIC8qLS0tIE5TRCBDYXBhYmlsaXRpZXMgRmxhZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgUDgwMjExX05TRENBUF9IQVJEV0FSRVdFUCAgICAgICAgICAgMHgwMSAgLyogaGFyZHdhcmUgd2VwIGVuZ2luZSAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX1RJRURXRVAgICAgICAgICAgICAgICAweDAyICAvKiBjYW4ndCBkZWNvdXBsZSBlbi9kZSAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX05PSE9TVFdFUCAgICAgICAgICAgICAweDA0ICAvKiBtdXN0IHVzZSBoYXJkd2FyZSB3ZXAgKi8KLSNkZWZpbmUgUDgwMjExX05TRENBUF9QQkNDICAgICAgICAgICAgICAgICAgMHgwOCAgLyogaGFyZHdhcmUgc3VwcG9ydHMgUEJDQyAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX1NIT1JUX1BSRUFNQkxFICAgICAgICAweDEwICAvKiBoYXJkd2FyZSBzdXBwb3J0cyAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX0FHSUxJVFkgICAgICAgICAgICAgICAweDIwICAvKiBoYXJkd2FyZSBzdXBwb3J0cyAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX0FQX1JFVFJBTlNNSVQgICAgICAgICAweDQwICAvKiBuc2QgaGFuZGxlcyByZXRyYW5zbWl0cyAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgICAgICAgICAgICAweDgwICAvKiBuc2QgaGFuZGxlcyBmcmFnL2RlZnJhZyAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOICAgICAgICAgICAgICAweDEwMCAgLyogbnNkIGRvZXMgYXV0b2pvaW4gKi8KLSNkZWZpbmUgUDgwMjExX05TRENBUF9OT1NDQU4gICAgICAgICAgICAgICAgMHgyMDAgIC8qIG5zZCBjYW4gc2NhbiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hBUkRXQVJFV0VQICAgICAgICAgICAweDAxCS8qIGhhcmR3YXJlIHdlcCBlbmdpbmUgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRSAgICAgICAgMHgxMAkvKiBoYXJkd2FyZSBzdXBwb3J0cyAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgICAgICAgICAgICAweDgwCS8qIG5zZCBoYW5kbGVzIGZyYWcvZGVmcmFnICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU4gICAgICAgICAgICAgIDB4MTAwCS8qIG5zZCBkb2VzIGF1dG9qb2luICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9TQ0FOICAgICAgICAgICAgICAgIDB4MjAwCS8qIG5zZCBjYW4gc2NhbiAqLwogCiAvKiBSZWNlaXZlZCBmcmFtZSBzdGF0aXN0aWNzICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfZnJtcnhfdAotewotCXUzMgltZ210OwotCXUzMglhc3NvY3JlcTsKLQl1MzIJYXNzb2NyZXNwOwotCXUzMglyZWFzc29jcmVxOwotCXUzMglyZWFzc29jcmVzcDsKLQl1MzIJcHJvYmVyZXE7Ci0JdTMyCXByb2JlcmVzcDsKLQl1MzIJYmVhY29uOwotCXUzMglhdGltOwotCXUzMglkaXNhc3NvYzsKLQl1MzIJYXV0aGVuOwotCXUzMglkZWF1dGhlbjsKLQl1MzIJbWdtdF91bmtub3duOwotCXUzMgljdGw7Ci0JdTMyCXBzcG9sbDsKLQl1MzIJcnRzOwotCXUzMgljdHM7Ci0JdTMyCWFjazsKLQl1MzIJY2ZlbmQ7Ci0JdTMyCWNmZW5kY2ZhY2s7Ci0JdTMyCWN0bF91bmtub3duOwotCXUzMglkYXRhOwotCXUzMglkYXRhb25seTsKLQl1MzIJZGF0YV9jZmFjazsKLQl1MzIJZGF0YV9jZnBvbGw7Ci0JdTMyCWRhdGFfX2NmYWNrX2NmcG9sbDsKLQl1MzIJbnVsbDsKLQl1MzIJY2ZhY2s7Ci0JdTMyCWNmcG9sbDsKLQl1MzIJY2ZhY2tfY2Zwb2xsOwotCXUzMglkYXRhX3Vua25vd247Ci0JdTMyICBkZWNyeXB0OwotCXUzMiAgZGVjcnlwdF9lcnI7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfZnJtcnhfdCB7CisJdTMyIG1nbXQ7CisJdTMyIGFzc29jcmVxOworCXUzMiBhc3NvY3Jlc3A7CisJdTMyIHJlYXNzb2NyZXE7CisJdTMyIHJlYXNzb2NyZXNwOworCXUzMiBwcm9iZXJlcTsKKwl1MzIgcHJvYmVyZXNwOworCXUzMiBiZWFjb247CisJdTMyIGF0aW07CisJdTMyIGRpc2Fzc29jOworCXUzMiBhdXRoZW47CisJdTMyIGRlYXV0aGVuOworCXUzMiBtZ210X3Vua25vd247CisJdTMyIGN0bDsKKwl1MzIgcHNwb2xsOworCXUzMiBydHM7CisJdTMyIGN0czsKKwl1MzIgYWNrOworCXUzMiBjZmVuZDsKKwl1MzIgY2ZlbmRjZmFjazsKKwl1MzIgY3RsX3Vua25vd247CisJdTMyIGRhdGE7CisJdTMyIGRhdGFvbmx5OworCXUzMiBkYXRhX2NmYWNrOworCXUzMiBkYXRhX2NmcG9sbDsKKwl1MzIgZGF0YV9fY2ZhY2tfY2Zwb2xsOworCXUzMiBudWxsOworCXUzMiBjZmFjazsKKwl1MzIgY2Zwb2xsOworCXUzMiBjZmFja19jZnBvbGw7CisJdTMyIGRhdGFfdW5rbm93bjsKKwl1MzIgZGVjcnlwdDsKKwl1MzIgZGVjcnlwdF9lcnI7CiB9IHA4MDIxMV9mcm1yeF90OwogCiAvKiBjYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzICovCi1zdHJ1Y3QgaXdfc3RhdGlzdGljcyogcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMobmV0ZGV2aWNlX3QgKmRldik7CitzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMobmV0ZGV2aWNlX3QgKiBkZXYpOwogLyogd2lyZWxlc3MgZXh0ZW5zaW9ucycgaW9jdGxzICovCi1pbnQgcDgwMjExd2V4dF9zdXBwb3J0X2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKIGV4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKIGludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIGludCBhc3NvYyk7CiAKQEAgLTE1OSw5NiArMTUwLDk5IEBACiAjZGVmaW5lIE5VTV9XRVBLRVlTIDQKICNkZWZpbmUgTUFYX0tFWUxFTiAzMgogCi0jZGVmaW5lIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLIChCSVQxfEJJVDApCi0jZGVmaW5lIEhPU1RXRVBfREVDUllQVCAgQklUNAotI2RlZmluZSBIT1NUV0VQX0VOQ1JZUFQgIEJJVDUKLSNkZWZpbmUgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCBCSVQ2Ci0jZGVmaW5lIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEIEJJVDcKKyNkZWZpbmUgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0sgKEJJVCgxKXxCSVQoMCkpCisjZGVmaW5lIEhPU1RXRVBfREVDUllQVCAgQklUKDQpCisjZGVmaW5lIEhPU1RXRVBfRU5DUllQVCAgQklUKDUpCisjZGVmaW5lIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgQklUKDYpCisjZGVmaW5lIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEIEJJVCg3KQogCiBleHRlcm4gaW50IHdsYW5fd2F0Y2hkb2c7CiBleHRlcm4gaW50IHdsYW5fd2V4dF93cml0ZTsKIAogLyogV0xBTiBkZXZpY2UgdHlwZSAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbmRldmljZQotewotCXN0cnVjdCB3bGFuZGV2aWNlCSpuZXh0OwkJLyogbGluayBmb3IgbGlzdCBvZiBkZXZpY2VzICovCi0Jdm9pZAkJCSpwcml2OwkJLyogcHJpdmF0ZSBkYXRhIGZvciBNU0QgKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5kZXZpY2UgeworCXN0cnVjdCB3bGFuZGV2aWNlICpuZXh0OwkvKiBsaW5rIGZvciBsaXN0IG9mIGRldmljZXMgKi8KKwl2b2lkICpwcml2OwkJLyogcHJpdmF0ZSBkYXRhIGZvciBNU0QgKi8KIAogCS8qIFN1YnN5c3RlbSBTdGF0ZSAqLwotCWNoYXIJCW5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07IC8qIERldiBuYW1lLCBmcm9tIHJlZ2lzdGVyX3dsYW5kZXYoKSovCi0JY2hhcgkJKm5zZG5hbWU7CisJY2hhciBuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwkvKiBEZXYgbmFtZSwgZnJvbSByZWdpc3Rlcl93bGFuZGV2KCkgKi8KKwljaGFyICpuc2RuYW1lOwogCi0JdTMyICAgICAgICAgIHN0YXRlOyAgICAgICAgICAvKiBEZXZpY2UgSS9GIHN0YXRlIChvcGVuL2Nsb3NlZCkgKi8KLQl1MzIJCW1zZHN0YXRlOwkvKiBzdGF0ZSBvZiB1bmRlcmx5aW5nIGRyaXZlciAqLwotCXUzMgkJaHdyZW1vdmVkOwkvKiBIYXMgdGhlIGh3IGJlZW4geWFua2VkIG91dD8gKi8KKwl1MzIgc3RhdGU7CQkvKiBEZXZpY2UgSS9GIHN0YXRlIChvcGVuL2Nsb3NlZCkgKi8KKwl1MzIgbXNkc3RhdGU7CQkvKiBzdGF0ZSBvZiB1bmRlcmx5aW5nIGRyaXZlciAqLworCXUzMiBod3JlbW92ZWQ7CQkvKiBIYXMgdGhlIGh3IGJlZW4geWFua2VkIG91dD8gKi8KIAogCS8qIEhhcmR3YXJlIGNvbmZpZyAqLwotCXVuc2lnbmVkIGludAkJaXJxOwotCXVuc2lnbmVkIGludAkJaW9iYXNlOwotCXVuc2lnbmVkIGludAkJbWVtYmFzZTsKLQl1MzIgICAgICAgICAgbnNkY2FwczsgIC8qIE5TRCBDYXBhYmlsaXRpZXMgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGludCBpb2Jhc2U7CisJdW5zaWduZWQgaW50IG1lbWJhc2U7CisJdTMyIG5zZGNhcHM7CQkvKiBOU0QgQ2FwYWJpbGl0aWVzIGZsYWdzICovCiAKIAkvKiBDb25maWcgdmFycyAqLwotCXVuc2lnbmVkIGludAkJZXRoY29udjsKKwl1bnNpZ25lZCBpbnQgZXRoY29udjsKIAogCS8qIGRldmljZSBtZXRob2RzIChpbml0IGJ5IE1TRCwgdXNlZCBieSBwODAyMTEgKi8KLQlpbnQJCSgqb3Blbikoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOwotCWludAkJKCpjbG9zZSkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOwotCXZvaWQJCSgqcmVzZXQpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2ICk7Ci0JaW50CQkoKnR4ZnJhbWUpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwotCWludAkJKCptbG1lcmVxdWVzdCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOwotCWludCAgICAgICAgICAgICAoKnNldF9tdWx0aWNhc3RfbGlzdCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsCi0JCQkJCSAgICAgIG5ldGRldmljZV90ICpkZXYpOwotCXZvaWQJCSgqdHhfdGltZW91dCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOworCWludCAoKm9wZW4pIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqY2xvc2UpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJdm9pZCAoKnJlc2V0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOworCWludCAoKnR4ZnJhbWUpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCXA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOworCWludCAoKm1sbWVyZXF1ZXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworCWludCAoKnNldF9tdWx0aWNhc3RfbGlzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LAorCQkJCSAgIG5ldGRldmljZV90ICpkZXYpOworCXZvaWQgKCp0eF90aW1lb3V0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOwogCiAJLyogODAyLjExIFN0YXRlICovCi0JdTgJCWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKLQlwODAyMTFwc3RyMzJfdAlzc2lkOwotCXUzMgkJbWFjbW9kZTsKLQlpbnQgICAgICAgICAgICAgbGlua3N0YXR1czsKKwl1OCBic3NpZFtXTEFOX0JTU0lEX0xFTl07CisJcDgwMjExcHN0cjMyX3Qgc3NpZDsKKwl1MzIgbWFjbW9kZTsKKwlpbnQgbGlua3N0YXR1czsKIAogCS8qIFdFUCBTdGF0ZSAqLwogCXU4IHdlcF9rZXlzW05VTV9XRVBLRVlTXVtNQVhfS0VZTEVOXTsKIAl1OCB3ZXBfa2V5bGVuc1tOVU1fV0VQS0VZU107Ci0JaW50ICAgaG9zdHdlcDsKKwlpbnQgaG9zdHdlcDsKIAogCS8qIFJlcXVlc3QvQ29uZmlybSBpL2Ygc3RhdGUgKHVzZWQgYnkgcDgwMjExKSAqLwotCXVuc2lnbmVkIGxvbmcJCXJlcXVlc3RfcGVuZGluZzsgLyogZmxhZywgYWNjZXNzIGF0b21pY2FsbHkgKi8KKwl1bnNpZ25lZCBsb25nIHJlcXVlc3RfcGVuZGluZzsJLyogZmxhZywgYWNjZXNzIGF0b21pY2FsbHkgKi8KIAogCS8qIG5ldGxpbmsgc29ja2V0ICovCiAJLyogcXVldWUgZm9yIGluZGljYXRpb25zIHdhaXRpbmcgZm9yIGNtZCBjb21wbGV0aW9uICovCiAJLyogTGludXggbmV0ZGV2aWNlIGFuZCBzdXBwb3J0ICovCi0JbmV0ZGV2aWNlX3QJCSpuZXRkZXY7CS8qIHB0ciB0byBsaW51eCBuZXRkZXZpY2UgKi8KKwluZXRkZXZpY2VfdCAqbmV0ZGV2OwkvKiBwdHIgdG8gbGludXggbmV0ZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbGludXhfc3RhdHM7CiAKIAkvKiBSeCBib3R0b20gaGFsZiAqLwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyeF9iaDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfYmg7CiAKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCW5zZF9yeHE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBuc2RfcnhxOwogCiAJLyogODAyLjExIGRldmljZSBzdGF0aXN0aWNzICovCi0Jc3RydWN0IHA4MDIxMV9mcm1yeF90CXJ4OworCXN0cnVjdCBwODAyMTFfZnJtcnhfdCByeDsKIAotCXN0cnVjdCBpd19zdGF0aXN0aWNzCXdzdGF0czsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CiAKIAkvKiBqa3JpZWdsOiBpd3NweSBmaWVsZHMgKi8KLSAgICAgICAgdTgJCQlzcHlfbnVtYmVyOwotICAgICAgICBjaGFyCQkJc3B5X2FkZHJlc3NbSVdfTUFYX1NQWV1bRVRIX0FMRU5dOwotICAgICAgICBzdHJ1Y3QgaXdfcXVhbGl0eSAgICAgICBzcHlfc3RhdFtJV19NQVhfU1BZXTsKKwl1OCBzcHlfbnVtYmVyOworCWNoYXIgc3B5X2FkZHJlc3NbSVdfTUFYX1NQWV1bRVRIX0FMRU5dOworCXN0cnVjdCBpd19xdWFsaXR5IHNweV9zdGF0W0lXX01BWF9TUFldOworCisJc3RydWN0IG11dGV4IGlvY3RsX2xvY2s7CiB9IHdsYW5kZXZpY2VfdDsKIAogLyogV0VQIHN0dWZmICovCi1pbnQgd2VwX2NoYW5nZV9rZXkod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQga2V5bnVtLCB1OCoga2V5LCBpbnQga2V5bGVuKTsKLWludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHUzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsIHU4ICppdiwgdTggKmljdik7Ci1pbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqYnVmLCB1OCAqZHN0LCB1MzIgbGVuLCBpbnQga2V5bnVtLCB1OCAqaXYsIHU4ICppY3YpOworaW50IHdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaW50IGtleW51bSwgdTggKmtleSwgaW50IGtleWxlbik7CitpbnQgd2VwX2RlY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqYnVmLCB1MzIgbGVuLCBpbnQga2V5X292ZXJyaWRlLAorCQl1OCAqaXYsIHU4ICppY3YpOworaW50IHdlcF9lbmNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKmJ1ZiwgdTggKmRzdCwgdTMyIGxlbiwgaW50IGtleW51bSwKKwkJdTggKml2LCB1OCAqaWN2KTsKIAotdm9pZAlwODAyMTFuZXRkZXZfc3RhcnR1cCh2b2lkKTsKLXZvaWQJcDgwMjExbmV0ZGV2X3NodXRkb3duKHZvaWQpOwotaW50CXdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLWludAl3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLWludAlyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci1pbnQJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci12b2lkCXA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZAlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci0KK2ludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQgd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQgcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworaW50IHVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCBwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCBwODAyMTFfYWxsb3dfaW9jdGxzKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKaW5kZXggNmUyMGJmZi4uMTVlY2JhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKQEAgLTUwLDExICs1MCw2IEBACiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLQotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTY3LDExICs2Miw2IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogUHJvamVjdCBJbmNsdWRlcyAqLwotCiAjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKICNpbmNsdWRlICJwODAyMTFtZ210LmgiCkBAIC04MywzMCArNzMsMTAgQEAKICNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCiAjaW5jbHVkZSAicDgwMjExcmVxLmgiCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBDb25zdGFudHMgKi8KLQotLyogTWF4aW11bSBhbW91bnQgb2YgdGltZSB3ZSdsbCB3YWl0IGZvciBhIHJlcXVlc3QgdG8gY29tcGxldGUgKi8KLSNkZWZpbmUgUDgwMjExUkVRX01BWFRJTUUJMypIWgkvKiAzIHNlY29uZHMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIE1hY3JvcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLXN0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2coIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7Ci1zdGF0aWMgaW50IHA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLCBpbnQgaXNnZXQpOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KLQorc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLAorCQkJCSAgIGludCBpc2dldCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFyZXFfZG9yZXF1ZXN0CkBAIC0xMjQsMzMgKzk0LDMwIEBACiAqCVBvdGVudGlhbGx5IGJsb2NrcyB0aGUgY2FsbGVyLCBzbyBpdCdzIGEgZ29vZCBpZGVhIHRvCiAqCW5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHA4MDIxMXJlcV9kb3JlcXVlc3QoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKm1zZ2J1ZikKK2ludCBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKm1zZ2J1ZikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX3QJKm1zZyA9IChwODAyMTFtc2dfdCopbXNnYnVmOwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdCA9IDA7CisJcDgwMjExbXNnX3QgKm1zZyA9IChwODAyMTFtc2dfdCAqKSBtc2didWY7CiAKIAkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCi0JaWYgKAotCSEoKHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0hXUFJFU0VOVCAmJgotCW1zZy0+bXNnY29kZSA9PSBESURtc2dfbG54cmVxX2lmc3RhdGUpIHx8Ci0Jd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfUlVOTklORyB8fAotCXdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0ZXTE9BRCkgKSB7CisJaWYgKCEoKHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0hXUFJFU0VOVCAmJgorCSAgICAgICBtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2xueHJlcV9pZnN0YXRlKSB8fAorCSAgICAgIHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX1JVTk5JTkcgfHwKKwkgICAgICB3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9GV0xPQUQpKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIENoZWNrIFBlcm1pc3Npb25zICovCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmCi0JICAgIChtc2ctPm1zZ2NvZGUgIT0gRElEbXNnX2RvdDExcmVxX21pYmdldCkpIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBvbmx5IGRvdDExcmVxX21pYmdldCBhbGxvd2VkIGZvciBub24tcm9vdC5cbiIsIHdsYW5kZXYtPm5hbWUpOworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSAmJiAobXNnLT5tc2djb2RlICE9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBvbmx5IGRvdDExcmVxX21pYmdldCBhbGxvd2VkIGZvciBub24tcm9vdC5cbiIsCisJCSAgICAgICB3bGFuZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKIAkvKiBDaGVjayBmb3IgYnVzeSBzdGF0dXMgKi8KLQlpZiAoIHRlc3RfYW5kX3NldF9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKSkgeworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDEsICYod2xhbmRldi0+cmVxdWVzdF9wZW5kaW5nKSkpCiAJCXJldHVybiAtRUJVU1k7Ci0JfQogCiAJLyogQWxsb3cgcDgwMjExIHRvIGxvb2sgYXQgbXNnIGFuZCBoYW5kbGUgaWYgZGVzaXJlZC4gKi8KIAkvKiBTbyBmYXIsIGFsbCBwODAyMTEgbXNncyBhcmUgaW1tZWRpYXRlLCBubyB3YWl0cS90aW1lciBuZWNlc3NhcnkgKi8KQEAgLTE1OCwxMiArMTI1LDExIEBACiAJcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2LCBtc2cpOwogCiAJLyogUGFzcyBpdCBkb3duIHRvIHdsYW5kZXYgdmlhIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ICovCi0JaWYgKCB3bGFuZGV2LT5tbG1lcmVxdWVzdCAhPSBOVUxMICkKKwlpZiAod2xhbmRldi0+bWxtZXJlcXVlc3QgIT0gTlVMTCkKIAkJd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgbXNnKTsKIAotCWNsZWFyX2JpdCggMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKTsKLQlEQkZFWElUOwotCXJldHVybiByZXN1bHQ7CS8qIGlmIHJlc3VsdD09MCwgbXNnLT5zdGF0dXMgc3RpbGwgbWF5IGNvbnRhaW4gYW4gZXJyICovCisJY2xlYXJfYml0KDEsICYod2xhbmRldi0+cmVxdWVzdF9wZW5kaW5nKSk7CisJcmV0dXJuIHJlc3VsdDsgLyogaWYgcmVzdWx0PT0wLCBtc2ctPnN0YXR1cyBzdGlsbCBtYXkgY29udGFpbiBhbiBlcnIgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODQsMzQgKzE1MCwzMiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCVByb2Nlc3MgdGhyZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2coIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZykKK3N0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2cod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQogewotICAgICAgICBEQkZFTlRFUjsKLQogCXN3aXRjaCAobXNnLT5tc2djb2RlKSB7CiAKLQljYXNlIERJRG1zZ19sbnhyZXFfaG9zdHdlcDogewotCQlwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdCAqcmVxID0gKHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90KikgbXNnOwotCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUNSWVBUfEhPU1RXRVBfRU5DUllQVCk7Ci0JCWlmIChyZXEtPmRlY3J5cHQuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCi0JCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfREVDUllQVDsKLQkJaWYgKHJlcS0+ZW5jcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKLQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9FTkNSWVBUOworCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwOnsKKwkJCXA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICpyZXEgPQorCQkJICAgIChwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdCAqKSBtc2c7CisJCQl3bGFuZGV2LT5ob3N0d2VwICY9CisJCQkgICAgfihIT1NUV0VQX0RFQ1JZUFQgfCBIT1NUV0VQX0VOQ1JZUFQpOworCQkJaWYgKHJlcS0+ZGVjcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfREVDUllQVDsKKwkJCWlmIChyZXEtPmVuY3J5cHQuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VOQ1JZUFQ7CiAKLQkJYnJlYWs7Ci0JfQorCQkJYnJlYWs7CisJCX0KIAljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJnZXQ6Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0OiB7Ci0JCWludCBpc2dldCA9IChtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2RvdDExcmVxX21pYmdldCk7Ci0JCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAgKm1pYl9tc2cgPSAocDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICopIG1zZzsKLQkJcDgwMjExcmVxX21pYnNldF9taWJnZXQgKHdsYW5kZXYsIG1pYl9tc2csIGlzZ2V0KTsKLQl9CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0OnsKKwkJCWludCBpc2dldCA9IChtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2RvdDExcmVxX21pYmdldCk7CisJCQlwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2cgPQorCQkJICAgIChwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKikgbXNnOworCQkJcDgwMjExcmVxX21pYnNldF9taWJnZXQod2xhbmRldiwgbWliX21zZywgaXNnZXQpOworCQl9CiAJZGVmYXVsdDoKLQkJLy8gWFhYIGRvIG5vdGhpbmchCiAJCTsKLQl9IC8qIHN3aXRjaCBtc2ctPm1zZ2NvZGUgKi8KLQotCURCRkVYSVQ7CisJfQkJCS8qIHN3aXRjaCBtc2ctPm1zZ2NvZGUgKi8KIAogCXJldHVybjsKIH0KQEAgLTIyMCw4MSArMTg0LDgyIEBACiAJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLAogCQkJCSAgIGludCBpc2dldCkKIHsKLQlwODAyMTFpdGVtZF90ICAgKm1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtaWJfbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKLQlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgbWliaXRlbS0+ZGF0YTsKKwlwODAyMTFpdGVtZF90ICptaWJpdGVtID0gKHA4MDIxMWl0ZW1kX3QgKikgbWliX21zZy0+bWliYXR0cmlidXRlLmRhdGE7CisJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIG1pYml0ZW0tPmRhdGE7CiAJdTggKmtleSA9IG1pYml0ZW0tPmRhdGEgKyBzaXplb2YocDgwMjExcHN0cmRfdCk7CiAKLQlEQkZFTlRFUjsKLQogCXN3aXRjaCAobWliaXRlbS0+ZGlkKSB7Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA6IHsKLQkJaWYgKCFpc2dldCkKLQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDAsIGtleSwgcHN0ci0+bGVuKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOiB7Ci0JCWlmICghaXNnZXQpCi0JCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAxLCBrZXksIHBzdHItPmxlbik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjogewotCQlpZiAoIWlzZ2V0KQotCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMiwga2V5LCBwc3RyLT5sZW4pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM6IHsKLQkJaWYgKCFpc2dldCkKLQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDMsIGtleSwgcHN0ci0+bGVuKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlEOiB7Ci0JCXUzMiAqZGF0YSA9ICh1MzIgKikgbWliaXRlbS0+ZGF0YTsKKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDp7CisJCQlpZiAoIWlzZ2V0KQorCQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDAsIGtleSwgcHN0ci0+bGVuKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE6eworCQkJaWYgKCFpc2dldCkKKwkJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAxLCBrZXksIHBzdHItPmxlbik7CisJCQlicmVhazsKKwkJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOnsKKwkJCWlmICghaXNnZXQpCisJCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMiwga2V5LCBwc3RyLT5sZW4pOworCQkJYnJlYWs7CisJCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5Mzp7CisJCQlpZiAoIWlzZ2V0KQorCQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDMsIGtleSwgcHN0ci0+bGVuKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQ6eworCQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOwogCi0JCWlmIChpc2dldCkgewotCQkJKmRhdGEgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0s7CisJCQlpZiAoaXNnZXQpIHsKKwkJCQkqZGF0YSA9CisJCQkJICAgIHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKIAkJCX0gZWxzZSB7CiAJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKTsKIAotCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gKCpkYXRhICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOworCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0KKwkJCQkgICAgKCpkYXRhICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOwogCQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZDogewotCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CisJCQlicmVhazsKKwkJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQ6eworCQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOwogCi0JCWlmIChpc2dldCkgewotCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKQotCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOwotCQkJZWxzZQotCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKLQkJfSBlbHNlIHsKKwkJCWlmIChpc2dldCkgeworCQkJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKKwkJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJCQkJZWxzZQorCQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCQl9IGVsc2UgewogCQkJCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKTsKIAkJCQlpZiAoKmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQotCQkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQ7CisJCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0KKwkJCQkJICAgIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQ7CisJCQl9CisJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQ6IHsKLQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOworCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkOnsKKwkJCXUzMiAqZGF0YSA9ICh1MzIgKikgbWliaXRlbS0+ZGF0YTsKIAotCQlpZiAoaXNnZXQpIHsKLQkJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCi0JCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7Ci0JCQllbHNlCi0JCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOwotCQl9IGVsc2UgewotCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKTsKLQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCi0JCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRDsKKwkJCWlmIChpc2dldCkgeworCQkJCWlmICh3bGFuZGV2LT4KKwkJCQkgICAgaG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKQorCQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCQllbHNlCisJCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJCX0gZWxzZSB7CisJCQkJd2xhbmRldi0+aG9zdHdlcCAmPQorCQkJCSAgICB+KEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKTsKKwkJCQlpZiAoKmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9CisJCQkJCSAgICBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRDsKKwkJCX0KKwkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCX0KIAlkZWZhdWx0OgotCQkvLyBYWFhYIGRvIG5vdGhpbmchCiAJCTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oCmluZGV4IDQ5N2E0ZDYuLmE5NWE0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oCkBAIC00OCwyMSArNDgsNiBAQAogI2lmbmRlZiBfTElOVVhfUDgwMjExUkVRX0gKICNkZWZpbmUgX0xJTlVYX1A4MDIxMVJFUV9ICiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1hY3JvcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVHlwZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybnMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi1pbnQJcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICptc2didWYpOworaW50IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaAppbmRleCA1YmU2NzM3Li5hMjI0MzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmgKQEAgLTU4LDM3ICs1OCw5IEBACiAjZGVmaW5lIF9QODAyMTFUWVBFU19ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaWZuZGVmIF9XTEFOX0NPTVBBVF9ICi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogQ29uc3RhbnRzICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcDgwMjExIGRhdGEgdHlwZSBjb2RlcyB1c2VkIGZvciBNSUIgaXRlbXMgYW5kIG1lc3NhZ2UgKi8KLS8qIGFyZ3VtZW50cy4gVGhlIHZhcmlvdXMgbWV0YWRhdGEgc3RydWN0dXJlcyBwcm92aWRlIGFkZGl0aW9uYWwgKi8KLS8qIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHR5cGVzLiAqLwotCi0jZGVmaW5lIFA4MDIxMV9UWVBFX09DVEVUU1RSCQkxCS8qIHBhc2NhbCBhcnJheSBvZiBieXRlcyAqLwotI2RlZmluZSBQODAyMTFfVFlQRV9ESVNQTEFZU1RSCQkyCS8qIHBhc2NhbCBhcnJheSBvZiBieXRlcyBjb250YWluaW5nIGFzY2lpICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX2ludAkJCTQJLyogdTMyIG1pbiBhbmQgbWF4IGxpbWl0ZWQgYnkgMzIgYml0cyAqLwotI2RlZmluZSBQODAyMTFfVFlQRV9FTlVNaW50CQk1CS8qIHUzMiBob2xkaW5nIGEgbnVtZXJpYwotCQkJCQkJICAgY29kZSB0aGF0IGNhbiBiZSBtYXBwZWQKLQkJCQkJCSAgIHRvIGEgdGV4dHVhbCBuYW1lICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX1VOS0RBVEEJCTYJLyogRGF0YSBpdGVtIGNvbnRhaW5pbmcgYW4KLQkJCQkJCSAgIHVua25vd24gZGF0YSB0eXBlICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX2ludEFSUkFZCQk3CS8qIEFycmF5IG9mIDMyLWJpdCBpbnRlZ2Vycy4gKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfQklUQVJSQVkJCTgJLyogQXJyYXkgb2YgYml0cy4gKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfTUFDQVJSQVkJCTkJLyogQXJyYXkgb2YgTUFDIGFkZHJlc3Nlcy4gKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBpbmRleGVzIGludG8gdGhlIE1pYiBDYXRlZ29yeSBMaXN0ICovCkBAIC0xMDYsMjUgKzc4LDYgQEAKIC8qIE1lc3NhZ2UgQ2F0ZWdvcnkgTGlzdCAqLwogI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMVJFUQkJMQogI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMUlORAkJMgotLyogI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMUNGTQkJMyAoZG9lc24ndCBleGlzdCBhdCB0aGlzIHRpbWUpICovCi0KLSNkZWZpbmUgUDgwMjExU0VDX0RPVDExUkVRCQlQODAyMTFfTVNHX0NBVF9ET1QxMVJFUQotI2RlZmluZSBQODAyMTFTRUNfRE9UMTFJTkQJCVA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECi0vKiAjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUNGTQkJUDgwMjExX01TR19DQVRfRE9UMTFDRk0gIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSAqLwotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHA4MDIxMSBESUQgZmllbGQgY29kZXMgdGhhdCByZXByZXNlbnQgYWNjZXNzIHR5cGUgYW5kICovCi0vKiBpc190YWJsZSBzdGF0dXMuICovCi0KLSNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19SRUFECQkweDEwMDAwMDAwCi0jZGVmaW5lIFA4MDIxMURJRF9BQ0NFU1NfV1JJVEUJCTB4MDgwMDAwMDAKLSNkZWZpbmUgUDgwMjExRElEX1dSSVRFT05MWQkJMHgwMDAwMDAwMQotI2RlZmluZSBQODAyMTFESURfUkVBRE9OTFkJCTB4MDAwMDAwMDIKLSNkZWZpbmUgUDgwMjExRElEX1JFQURXUklURQkJMHgwMDAwMDAwMwotI2RlZmluZSBQODAyMTFESURfSVNUQUJMRV9GQUxTRQkJMAotI2RlZmluZSBQODAyMTFESURfSVNUQUJMRV9UUlVFCQkxCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBwODAyMTEgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgVGhlIHZhbHVlIHRvIHRleHQgbWFwcGluZ3MgZm9yICovCkBAIC0xMzIsMTA0ICs4NSwzMCBAQAogLyogIGZyb20gdGhlIG1hcHBpbmdzLiAqLwogCiAvKiBlcnJvciBjb2RlcyBmb3IgbG9va3VwcyAqLwotI2RlZmluZSBQODAyMTFFTlVNX0JBRAkJCQkweGZmZmZmZmZmVUwKLSNkZWZpbmUgUDgwMjExRU5VTV9CQURTVFIJCQkiUDgwMjExRU5VTV9CQUQiCiAKICNkZWZpbmUgUDgwMjExRU5VTV90cnV0aF9mYWxzZQkJCTAKICNkZWZpbmUgUDgwMjExRU5VTV90cnV0aF90cnVlCQkJMQogI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZQkJMAogI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkCQkxCiAjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGUJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9wb3dlcm1nbXRfYWN0aXZlCQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fcG93ZXJtZ210X3Bvd2Vyc2F2ZQkJMgogI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmUJMQogI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQJCTIKICNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2FueQkJCTMKICNkZWZpbmUgUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW0JCTEKICNkZWZpbmUgUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleQkJMgotI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfZmhzcwkJCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2Rzc3MJCQkyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9pcmJhc2ViYW5kCQkzCi0jZGVmaW5lIFA4MDIxMUVOVU1fdGVtcHR5cGVfY29tbWVyY2lhbAkJMQotI2RlZmluZSBQODAyMTFFTlVNX3RlbXB0eXBlX2luZHVzdHJpYWwJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZmNjCQkxNgotI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9kb2MJCTMyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2V0c2kJCTQ4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX3NwYWluCQk0OQotI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9mcmFuY2UJCTUwCi0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX21rawkJNjQKLSNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Vkb25seQkJMQotI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfY3Nvbmx5CQkyCi0jZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9lZGFuZGNzCQk0Ci0jZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9jc3dpdGh0aW1lcgkJOAotI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfaHJjc2FuZGVkCQkxNgotI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9maXhlZGxpc3QJCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfbm90c3VwcG9ydGVkCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfZHluYW1pYwkJMwogI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZQkJMQotI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX3Bhc3NpdmUJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9ib3RoCQkzCiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzCQkxCiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnMJMgogI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZAkzCi0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90aW1lb3V0CQk0Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90b29fbWFueV9yZXEJNQogI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZAkJNgotI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfYnNzX2FscmVhZHkJNwotI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9hY2Nlc3MJOAotI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9taWJhdHRyaWJ1dGUJOQogI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9zZXRfcmVhZG9ubHlfbWliCTEwCiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlCTExCiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X2dldF93cml0ZW9ubHlfbWliCTEyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX3Vuc3BlY19yZWFzb24JCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXV0aF9ub3RfdmFsaWQJMgotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9kZWF1dGhfbHZfc3MJCTMKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25faW5hY3Rpdml0eQkJNAotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hcF9vdmVybG9hZAkJNQotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9jbGFzczIzX2VycgkJNgotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9jbGFzczNfZXJyCQk3Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2Rpc2FzX2x2X3NzCQk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2Fzb2Nfbm90X2F1dGgJCTkKICNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bAkJMAogI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX2NhcAkJMTAKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfcmVhc29jX25vX2Fzb2MJMTEKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfZmFpbF9vdGhlcgkJMTIKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zcHRfYWxnCQkxMwotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hdXRoX3NlcV9mYWlsCQkxNAotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19jaGxuZ19mYWlsCQkxNQotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hdXRoX3RpbWVvdXQJCTE2CiAjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2FwX2Z1bGwJCTE3Ci0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3JhdGUJCTE4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3Nob3J0cHJlYW1ibGUJMTkKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfcGJjYwkJMjAKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfYWdpbGl0eQkJMjEKICNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rCQkwCiAjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWUJCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2l0ZW1uYW1lCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2l0ZW1kYXRhCTMKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX2l0ZW1kYXRhCTQKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbmNvbXBsZXRlX2l0ZW1kYXRhCTUKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX21zZ19kaWQJNgotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfbWliX2RpZAk3Ci0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19jb252X2Z1bmMJOAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3N0cmluZ190b29fbG9uZwk5Ci0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vdXRfb2ZfcmFuZ2UJMTAKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19zdHJpbmdfdG9vX3Nob3J0CTExCi0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ192YWxpZF9mdW5jCTEyCi0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfdW5rbm93bgkJMTMKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2RpZAkJMTQKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX3ByaW50X2Z1bmMJMTUKLQotI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3Vua25vd24gICAgICAgIDAKLSNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9iZWFjb24gICAgICAgICAxCi0jZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fc2lnbmFsICAgICAgICAgMgotI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3R4cmV0cnkgICAgICAgIDMKLSNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9ub3Rqb2luZWQgICAgICA0Ci0KLSNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX2xvbmcgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9zaG9ydCAgICAgICAgICAgICAgMgotI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfbWl4ZWQgICAgICAgICAgICAgIDMKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIHA4MDIxMSBtYXggbGVuZ3RoIGNvbnN0YW50cyBmb3IgdGhlIGRpZmZlcmVudCBwYXNjYWwgc3RyaW5ncy4gKi8KQEAgLTI0Myw0NiArMTIyLDYgQEAKIAkJCQkJLyogaXMgYSBESUQtTEVOLURBVEEgdHJpcGxlICovCiAJCQkJCS8qIHdpdGggYSBtYXggc2l6ZSBvZiA0KzQrMzg0ICovCiAKLSNkZWZpbmUgUDgwMjExX1NFVF9pbnQoaXRlbSwgdmFsdWUpIGRvIHsgXAotCShpdGVtKS5kYXRhICAgPSAodmFsdWUpOyBcCi0JKGl0ZW0pLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsgXAotCX0gd2hpbGUoMCkKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBzdHJpbmcgY29uc3RhbnRzICovCi0KLSNkZWZpbmUgTk9UX1NFVAkJCSJOT1RfU0VUIgotI2RlZmluZSBOT1RfU1VQUE9SVEVECQkiTk9UX1NVUFBPUlRFRCIKLSNkZWZpbmUgVU5LTk9XTl9EQVRBCQkiVU5LTk9XTl9EQVRBIgotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogIE1ldGFkYXRhIGZsYWdzICAqLwotCi0vKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/IEknbSBub3Qgc3VyZS4gKi8KLQotI2RlZmluZSBJU1JFUVVJUkVECQkoMHg4MDAwMDAwMFVMKQotI2RlZmluZSBJU1JFUVVFU1QJCSgweDQwMDAwMDAwVUwpCi0jZGVmaW5lIElTQ09ORklSTQkJKDB4MjAwMDAwMDBVTCkKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgJ2ZsYWdzJyBmaWVsZCBpbiAgICovCi0vKiAgdGhlIG1ldGFkYXRhLiAgVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSBtZXRhZGF0YSBpcyBmb3IgICAgICAgKi8KLS8qICBjb21tYW5kIGFyZ3VtZW50cyB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgaXRlbSBpcyByZXF1aXJlZCwgYW5kICAqLwotLyogIHdoZXRoZXIgdGhlIG1ldGFkYXRhIGl0ZW0gaXMgZm9yIGEgcmVxdWVzdCBjb21tYW5kLCBjb25maXJtICAgICAgICovCi0vKiAgY29tbWFuZCBvciBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogTVNNOiBEbyB0aGVzZSBiZWxvbmcgaW4gcDgwMjExbWV0YS5oPyAgSSdtIG5vdCBzdXJlICovCi0KLSNkZWZpbmUgUDgwMjExSVRFTV9TRVRGTEFHUyhxLCByLCBjKQkoIHEgfCByIHwgYyApCi0KLSNkZWZpbmUgUDgwMjExSVRFTV9JU1JFUVVJUkVEKGZsYWdzKQkoKCh1MzIpKGZsYWdzICYgSVNSRVFVSVJFRCkpID4+IDMxICkKLSNkZWZpbmUgUDgwMjExSVRFTV9JU1JFUVVFU1QoZmxhZ3MpCSgoKHUzMikoZmxhZ3MgJiBJU1JFUVVFU1QpKSA+PiAzMCApCi0jZGVmaW5lIFA4MDIxMUlURU1fSVNDT05GSVJNKGZsYWdzKQkoKCh1MzIpKGZsYWdzICYgSVNDT05GSVJNKSkgPj4gMjkgKQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogVGhlIGZvbGxvd2luZyBtYWNybyBjcmVhdGVzIGEgbmFtZSBmb3IgYW4gZW51bSAqLwogCkBAIC0zMDIsOSArMTQxLDYgQEAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAtIFVudXNlZAogKi8KIAotI2RlZmluZSBQODAyMTFESURfSU5WQUxJRAkJMHhmZmZmZmZmZlVMCi0jZGVmaW5lIFA4MDIxMURJRF9WQUxJRAkJCTB4MDAwMDAwMDBVTAotCiAjZGVmaW5lIFA4MDIxMURJRF9MU0JfU0VDVElPTgkJKDApCiAjZGVmaW5lIFA4MDIxMURJRF9MU0JfR1JPVVAJCSg2KQogI2RlZmluZSBQODAyMTFESURfTFNCX0lURU0JCSgxMikKQEAgLTMxOSwzNSArMTU1LDMyIEBACiAjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lTVEFCTEUJCSgweDAwMDAwMDAxVUwpCiAjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0FDQ0VTUyAJCSgweDAwMDAwMDAzVUwpCiAKLQotI2RlZmluZSBQODAyMTFESURfTUsoYSxtLGwpCSgoKCh1MzIpKGEpKSAmIChtKSkgPDwgKGwpKQorI2RlZmluZSBQODAyMTFESURfTUsoYSwgbSwgbCkJKCgoKHUzMikoYSkpICYgKG0pKSA8PCAobCkpCiAKICNkZWZpbmUgUDgwMjExRElEX01LU0VDVElPTihhKQlQODAyMTFESURfTUsoYSwgXAogCQkJCQlQODAyMTFESURfTUFTS19TRUNUSU9OLCBcCi0JCQkJCVA4MDIxMURJRF9MU0JfU0VDVElPTiApCisJCQkJCVA4MDIxMURJRF9MU0JfU0VDVElPTikKICNkZWZpbmUgUDgwMjExRElEX01LR1JPVVAoYSkJUDgwMjExRElEX01LKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfR1JPVVAsIFwKLQkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCApCisJCQkJCVA4MDIxMURJRF9MU0JfR1JPVVApCiAjZGVmaW5lIFA4MDIxMURJRF9NS0lURU0oYSkJUDgwMjExRElEX01LKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfSVRFTSwgXAotCQkJCQlQODAyMTFESURfTFNCX0lURU0gKQorCQkJCQlQODAyMTFESURfTFNCX0lURU0pCiAjZGVmaW5lIFA4MDIxMURJRF9NS0lOREVYKGEpCVA4MDIxMURJRF9NSyhhLCBcCiAJCQkJCVA4MDIxMURJRF9NQVNLX0lOREVYLCBcCi0JCQkJCVA4MDIxMURJRF9MU0JfSU5ERVggKQorCQkJCQlQODAyMTFESURfTFNCX0lOREVYKQogI2RlZmluZSBQODAyMTFESURfTUtJU1RBQkxFKGEpCVA4MDIxMURJRF9NSyhhLCBcCiAJCQkJCVA4MDIxMURJRF9NQVNLX0lTVEFCTEUsIFwKLQkJCQkJUDgwMjExRElEX0xTQl9JU1RBQkxFICkKLQorCQkJCQlQODAyMTFESURfTFNCX0lTVEFCTEUpCiAKICNkZWZpbmUgUDgwMjExRElEX01LSUQocyxnLGksbix0LGEpCShQODAyMTFESURfTUtTRUNUSU9OKHMpIHwgXAogCQkJCQkJUDgwMjExRElEX01LR1JPVVAoZykgfCBcCiAJCQkJIAkJUDgwMjExRElEX01LSVRFTShpKSB8IFwKIAkJCQkgCQlQODAyMTFESURfTUtJTkRFWChuKSB8IFwKIAkJCQkJCVA4MDIxMURJRF9NS0lTVEFCTEUodCkgfCBcCi0JCQkJCQkoYSkgKQorCQkJCQkJKGEpKQogCi0KLSNkZWZpbmUgUDgwMjExRElEX0dFVChhLG0sbCkJKCgoKHUzMikoYSkpID4+IChsKSkgJiAobSkpCisjZGVmaW5lIFA4MDIxMURJRF9HRVQoYSwgbSwgbCkJKCgoKHUzMikoYSkpID4+IChsKSkgJiAobSkpCiAKICNkZWZpbmUgUDgwMjExRElEX1NFQ1RJT04oYSkJUDgwMjExRElEX0dFVChhLCBcCiAJCQkJCVA4MDIxMURJRF9NQVNLX1NFQ1RJT04sIFwKQEAgLTM2OCwyMyArMjAxLDE4IEBACiAJCQkJCVA4MDIxMURJRF9NQVNLX0FDQ0VTUywgXAogCQkJCQlQODAyMTFESURfTFNCX0FDQ0VTUykKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlcyBhcmUgdXNlZCBmb3IgdGhlIHJlcHJlc2VuYXRpb24gKi8KIC8qICBvZiBFTlVNaW50IHR5cGUgbWV0YWRhdGEuICovCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMWVudW1wYWlyCi17Ci0JdTMyCQkJdmFsOwotCWNoYXIJCQkqbmFtZTsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWVudW1wYWlyIHsKKwl1MzIgdmFsOworCWNoYXIgKm5hbWU7CiB9IHA4MDIxMWVudW1wYWlyX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMWVudW0KLXsKLQlpbnQJCQluaXRlbXM7Ci0JcDgwMjExZW51bXBhaXJfdAkqbGlzdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWVudW0geworCWludCBuaXRlbXM7CisJcDgwMjExZW51bXBhaXJfdCAqbGlzdDsKIH0gcDgwMjExZW51bV90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzkyLDE0MCArMjIwLDEyMyBAQAogLyogIG1lc3NhZ2VzLiAqLwogCiAvKiBUZW1wbGF0ZSBwYXNjYWwgc3RyaW5nICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyCi17Ci0JdTgJCWxlbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0ciB7CisJdTggbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cl90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyZAotewotCXU4CQlsZW47Ci0JdTgJCWRhdGFbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHJkX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyZCB7CisJdTggbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyZF90OwogCiAvKiBNYXhpbXVtIHBhc2NhbCBzdHJpbmcgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIyNTUKLXsKLQl1OAkJbGVuOwotCXU4CQlkYXRhW01BWExFTl9QU1RSMjU1XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjI1NV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjI1NSB7CisJdTggbGVuOworCXU4IGRhdGFbTUFYTEVOX1BTVFIyNTVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cjI1NV90OwogCiAvKiBwYXNjYWwgc3RyaW5nIGZvciBtYWNhZGRyZXNzIGFuZCBic3NpZCAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjYKLXsKLQl1OAkJbGVuOwotCXU4CQlkYXRhW01BWExFTl9QU1RSNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHI2X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyNiB7CisJdTggbGVuOworCXU4IGRhdGFbTUFYTEVOX1BTVFI2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMXBzdHI2X3Q7CiAKIC8qIHBhc2NhbCBzdHJpbmcgZm9yIGNoYW5uZWwgbGlzdCAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjE0Ci17Ci0JdTgJCWxlbjsKLQl1OAkJZGF0YVtNQVhMRU5fUFNUUjE0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjE0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMTQgeworCXU4IGxlbjsKKwl1OCBkYXRhW01BWExFTl9QU1RSMTRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cjE0X3Q7CiAKIC8qIHBhc2NhbCBzdHJpbmcgZm9yIHNzaWQgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIzMgotewotCXU4CQlsZW47Ci0JdTgJCWRhdGFbTUFYTEVOX1BTVFIzMl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHIzMl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjMyIHsKKwl1OCBsZW47CisJdTggZGF0YVtNQVhMRU5fUFNUUjMyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMXBzdHIzMl90OwogCiAvKiBNQUMgYWRkcmVzcyBhcnJheSAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbWFjYXJyYXkKLXsKLQl1MzIJCWNudDsKLQl1OAkJZGF0YVsxXVtNQVhMRU5fUFNUUjZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtYWNhcnJheV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbWFjYXJyYXkgeworCXUzMiBjbnQ7CisJdTggZGF0YVsxXVtNQVhMRU5fUFNUUjZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbWFjYXJyYXlfdDsKIAogLyogcHJvdG90eXBlIHRlbXBsYXRlICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtCi17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW0geworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV90OwogCiAvKiBwcm90b3R5cGUgdGVtcGxhdGUgdy8gZGF0YSBpdGVtICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtZAotewotCXUzMgkJZGlkOwotCXUxNgkJc3RhdHVzOwotCXUxNgkJbGVuOwotCXU4CQlkYXRhWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtZF90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbWQgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtZF90OwogCiAvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgaW50LCBCT1VOREVESU5ULCBFTlVNSU5UICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VpbnQzMgotewotCXUzMgkJZGlkOwotCXUxNgkJc3RhdHVzOwotCXUxNgkJbGVuOwotCXUzMgkJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91aW50MzJfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdWludDMyIHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwl1MzIgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1fdWludDMyX3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyNgotewotCXUzMgkJZGlkOwotCXUxNgkJc3RhdHVzOwotCXUxNgkJbGVuOwotCXA4MDIxMXBzdHI2X3QJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyNl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyNiB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJcDgwMjExcHN0cjZfdCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV9wc3RyNl90OwogCiAvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjE0Ci17Ci0JdTMyCQkJZGlkOwotCXUxNgkJCXN0YXR1czsKLQl1MTYJCQlsZW47Ci0JcDgwMjExcHN0cjE0X3QJCWRhdGE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fcHN0cjE0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIxNCB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJcDgwMjExcHN0cjE0X3QgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1fcHN0cjE0X3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMzIKLXsKLQl1MzIJCQlkaWQ7Ci0JdTE2CQkJc3RhdHVzOwotCXUxNgkJCWxlbjsKLQlwODAyMTFwc3RyMzJfdAkJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMzJfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjMyIHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwlwODAyMTFwc3RyMzJfdCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV9wc3RyMzJfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIyNTUKLXsKLQl1MzIJCQlkaWQ7Ci0JdTE2CQkJc3RhdHVzOwotCXUxNgkJCWxlbjsKLQlwODAyMTFwc3RyMjU1X3QJCWRhdGE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fcHN0cjI1NV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMjU1IHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwlwODAyMTFwc3RyMjU1X3QgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1fcHN0cjI1NV90OwogCiAvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgVU5LIDM5MiwgbmFtZWx5IG1pYiBpdGVtcyAqLwotdHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rMzkyCi17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTgJCWRhdGFbTUFYTEVOX01JQkFUVFJJQlVURV07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fdW5rMzkyX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VuazM5MiB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJdTggZGF0YVtNQVhMRU5fTUlCQVRUUklCVVRFXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1fdW5rMzkyX3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgMTAyNSwgbmFtZWx5IHAyIHBkYXMgKi8KLXR5cGVkZWYgc3RydWN0ICBwODAyMTFpdGVtX3VuazEwMjQKLXsKLQl1MzIJCWRpZDsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCWxlbjsKLQl1OAkJZGF0YVsxMDI0XTsKLX0gIF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fdW5rMTAyNF90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV91bmsxMDI0IHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwl1OCBkYXRhWzEwMjRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV91bmsxMDI0X3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgNDA5NiwgbmFtZWx5IHAyIGRvd25sb2FkIGNodW5rcyAqLwotdHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rNDA5NgotewotCXUzMgkJZGlkOwotCXUxNgkJc3RhdHVzOwotCXUxNgkJbGVuOwotCXU4CQlkYXRhWzQwOTZdOwotfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bms0MDk2X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VuazQwOTYgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXU4IGRhdGFbNDA5Nl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3VuazQwOTZfdDsKIAogc3RydWN0IGNhdGxpc3RpdGVtOwogCkBAIC01MzQsMTMgKzM0NSwxMSBAQAogLyogIG1ldGFkYXRhIGl0ZW1zLiAgU29tZSBjb21wb25lbnRzIG1heSBjaG9vc2UgdG8gdXNlIG1vcmUsICovCiAvKiAgbGVzcyBvciBkaWZmZXJlbnQgbWV0YWRhdGEgaXRlbXMuICovCiAKLXR5cGVkZWYgdm9pZCAoKnA4MDIxMV90b3RleHRfdCkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCogaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1Zik7Ci10eXBlZGVmIHZvaWQgKCpwODAyMTFfZnJvbXRleHRfdCkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCogaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1Zik7Ci10eXBlZGVmIHUzMiAoKnA4MDIxMV92YWxpZF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4KiBpdGVtYnVmKTsKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLwordHlwZWRlZiB2b2lkICgqcDgwMjExX3RvdGV4dF90KSAoc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4ICppdGVtYnVmLAorCQkJCSBjaGFyICp0ZXh0YnVmKTsKK3R5cGVkZWYgdm9pZCAoKnA4MDIxMV9mcm9tdGV4dF90KSAoc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4ICppdGVtYnVmLAorCQkJCSAgIGNoYXIgKnRleHRidWYpOwordHlwZWRlZiB1MzIoKnA4MDIxMV92YWxpZF90KSAoc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4ICppdGVtYnVmKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEVudW1lcmF0aW9uIExpc3RzICovCkBAIC01NjgsMTA4ICszNzcsNCBAQAogCiBleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocDJwcmVhbWJsZSk7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgKi8KLS8qICBwODAyMTFlbnVtX3QgdHlwZS4gKi8KLQotdTMyIHA4MDIxMWVudW1fdGV4dDJpbnQocDgwMjExZW51bV90ICplcCwgY2hhciAqdGV4dCk7Ci11MzIgcDgwMjExZW51bV9pbnQydGV4dChwODAyMTFlbnVtX3QgKmVwLCB1MzIgdmFsLCBjaGFyICp0ZXh0KTsKLXZvaWQgcDgwMjExX2Vycm9yMnRleHQoaW50IGVycl9jb2RlLCBjaGFyICplcnJfc3RyKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgKi8KLS8qICBwODAyMTFpdGVtX3QgYW5kIHA4MDIxMW1ldGFfdCB0eXBlcy4gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIHZhbGlkYXRpb24gYW5kICAgICovCi0vKiB0ZXh0IHRvIGJpbmFyeSBjb252ZXJzaW9ucyBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgZm9yIGludGVyZmFjZSAqLwotLyogYW5kIE1JQiBkYXRhIGl0ZW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0gRElTUExBWVNUUiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcHN0ciA9PT4gY3N0ciAqLwotdm9pZCBwODAyMTFfdG90ZXh0X2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGNzdHIgPT0+IHBzdHIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGEgZGlzcGxheXN0ciBiaW5hcnkgdmFsdWUgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9kaXNwbGF5c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIE9DVEVUU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHBzdHIgPT0+ICJ4eDp4eDouLi4uIiAqLwotdm9pZCBwODAyMTFfdG90ZXh0X29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiAieHg6eHg6Li4uLiIgPT0+IHBzdHIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhbiBvY3RldHN0ciBiaW5hcnkgdmFsdWUgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9vY3RldHN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYgKTsKLQotLyotLSBpbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiB1MzIgPT0+ICVkICovCi12b2lkIHA4MDIxMV90b3RleHRfaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiAlZCA9PT4gdTMyICovCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGludCdzIGJpbmFyeSB2YWx1ZSAoYWx3YXlzIHN1Y2Nlc3NmdWwpICovCi11MzIgcDgwMjExX2lzdmFsaWRfaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIEVOVU1pbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHUzMiA9PT4gPHZhbHVlbmFtZT4gKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiA8dmFsdWVuYW1lPiA9PT4gdTMyICovCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhbiBlbnVtJ3MgYmluYXJ5IHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfZW51bWludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYgKTsKLQotLyotLSBpbnRBUlJBWSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiB1MzJbXSA9PiAlZCwlZCwlZCwuLi4gKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogJWQsJWQsJWQsLi4uID09PiB1MzJbXSAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGludGVnZXIgYXJyYXkncyB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIEJJVEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHUzMiA9PT4gJWQsJWQsJWQsLi4uICovCi12b2lkIHA4MDIxMV90b3RleHRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qICVkLCVkLCVkLC4uLiA9PT4gdTMyICovCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBiaXQgYXJyYXkncyB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIE1BQ0FSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotdm9pZCBwODAyMTFfZnJvbXRleHRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGEgTUFDIGFkZHJlc3MgYXJyYXkncyB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIE1JQkFUVFJJVUJURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogPG1pYnZhbHVlPiA9PT4gPHRleHR1YWwgcmVwcmVzZW50YXRpb24gaWRlbnRpZmllZCBpbiBNSUIgbWV0YWRhdGE+ICovCi12b2lkIHA4MDIxMV90b3RleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotdm9pZCBwODAyMTFfdG90ZXh0X3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotCi0vKiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gPT0+IDxtaWJ2YWx1ZT4gKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2dldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLXZvaWQgcDgwMjExX2Zyb210ZXh0X3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBtaWJpdGVtJ3MgYmluYXJ5IHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotdTMyIHA4MDIxMV9pc3ZhbGlkX3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYgKTsKLQogI2VuZGlmIC8qIF9QODAyMTFUWVBFU19IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdlcC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKaW5kZXggNDZhMmE2Yi4uNDA1Y2U4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKQEAgLTU1LDggKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLQotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKIC8vICNkZWZpbmUgV0VQX0RFQlVHCiAKQEAgLTcyLDE4ICs3MSw5IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogTG9jYWwgQ29uc3RhbnRzICovCiAKLSNkZWZpbmUgU1NXQVAoYSxiKSB7dTggdG1wID0gc1thXTsgc1thXSA9IHNbYl07IHNbYl0gPSB0bXA7fQogI2RlZmluZSBXRVBfS0VZKHgpICAgICAgICgoKHgpICYgMHhDMCkgPj4gNikKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIE1hY3JvcyAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KIAogc3RhdGljIGNvbnN0IHUzMiB3ZXBfY3JjMzJfdGFibGVbMjU2XSA9IHsKQEAgLTIxMSw3ICsyMDEsNyBAQAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQlqID0gKGogKyBzW2ldICsga2V5W2kgJSBrZXlsZW5dKSAmIDB4ZmY7Ci0JCVNTV0FQKGksaik7CisJCXN3YXAoaSxqKTsKIAl9CiAKIAkvKiBBcHBseSB0aGUgUkM0IHRvIHRoZSBkYXRhLCB1cGRhdGUgdGhlIENSQzMyICovCkBAIC0yMjAsNyArMjEwLDcgQEAKIAlmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyspIHsKIAkJaSA9IChpKzEpICYgMHhmZjsKIAkJaiA9IChqK3NbaV0pICYgMHhmZjsKLQkJU1NXQVAoaSxqKTsKKwkJc3dhcChpLGopOwogCQlidWZba10gXj0gc1soc1tpXSArIHNbal0pICYgMHhmZl07CiAJCWNyYyA9IHdlcF9jcmMzMl90YWJsZVsoY3JjIF4gYnVmW2tdKSAmIDB4ZmZdIF4gKGNyYyA+PiA4KTsKIAl9CkBAIC0yMzUsNyArMjI1LDcgQEAKIAlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7CiAJCWkgPSAoaSArIDEpICYgMHhmZjsKIAkJaiA9IChqK3NbaV0pICYgMHhmZjsKLQkJU1NXQVAoaSxqKTsKKwkJc3dhcChpLGopOwogCQlpZiAoKGNfY3JjW2tdIF4gc1soc1tpXSArIHNbal0pICYgMHhmZl0pICE9IGljdltrXSkKIAkJCXJldHVybiAtKDQgfCAoayA8PCA0KSkgOyAvKiBJQ1YgbWlzbWF0Y2ggKi8KIAl9CkBAIC0yODMsNyArMjczLDcgQEAKIAlqID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJaiA9IChqICsgc1tpXSArIGtleVtpICUga2V5bGVuXSkgJiAweGZmOwotCQlTU1dBUChpLGopOworCQlzd2FwKGksaik7CiAJfQogCiAJLyogVXBkYXRlIENSQzMyIHRoZW4gYXBwbHkgUkM0IHRvIHRoZSBkYXRhICovCkBAIC0yOTMsNyArMjgzLDcgQEAKIAkJY3JjID0gd2VwX2NyYzMyX3RhYmxlWyhjcmMgXiBidWZba10pICYgMHhmZl0gXiAoY3JjID4+IDgpOwogCQlpID0gKGkrMSkgJiAweGZmOwogCQlqID0gKGorc1tpXSkgJiAweGZmOwotCQlTU1dBUChpLGopOworCQlzd2FwKGksaik7CiAJCWRzdFtrXSA9IGJ1ZltrXSBeIHNbKHNbaV0gKyBzW2pdKSAmIDB4ZmZdOwogCX0KIAljcmMgPSB+Y3JjOwpAQCAtMzA3LDcgKzI5Nyw3IEBACiAJZm9yIChrID0gMDsgayA8IDQ7IGsrKykgewogCQlpID0gKGkgKyAxKSAmIDB4ZmY7CiAJCWogPSAoaitzW2ldKSAmIDB4ZmY7Ci0JCVNTV0FQKGksaik7CisJCXN3YXAoaSxqKTsKIAkJaWN2W2tdIF49IHNbKHNbaV0gKyBzW2pdKSAmIDB4ZmZdOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCmluZGV4IDBkNTcwZjEuLjk2MDc4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKQEAgLTUxLDEyICs1MSwxMiBAQAogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwogCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLQogI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCiAjaW5jbHVkZSAicDgwMjExaGRyLmgiCiAjaW5jbHVkZSAicDgwMjExY29udi5oIgpAQCAtNzcsMTYgKzc3LDE0IEBACiAKIHN0YXRpYyB1OCBwODAyMTFfbWh6X3RvX2NoYW5uZWwodTE2IG1oeikKIHsKLQlpZiAobWh6ID49IDUwMDApIHsKLQkJcmV0dXJuICgobWh6IC0gNTAwMCkgLyA1KTsKLQl9CisJaWYgKG1oeiA+PSA1MDAwKQorCQlyZXR1cm4gKG1oeiAtIDUwMDApIC8gNTsKIAogCWlmIChtaHogPT0gMjQ4MikKIAkJcmV0dXJuIDE0OwogCi0JaWYgKG1oeiA+PSAyNDA3KSB7Ci0JCXJldHVybiAoKG1oeiAtIDI0MDcpIC8gNSk7Ci0JfQorCWlmIChtaHogPj0gMjQwNykKKwkJcmV0dXJuIChtaHogLSAyNDA3KSAvIDU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMCwxOSArOTgsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiA1RyAqLwotCi0JaWYgKGRvdDExYSkgewotCQlyZXR1cm4gKDUwMDAgKyAoNSAqIGNoKSk7Ci0JfQorCWlmIChkb3QxMWEpCisJCXJldHVybiA1MDAwICsgKDUgKiBjaCk7CiAKIAkvKiAyLjRHICovCi0KIAlpZiAoY2ggPT0gMTQpCiAJCXJldHVybiAyNDg0OwogCi0JaWYgKChjaCA8IDE0KSAmJiAoY2ggPiAwKSkgewotCQlyZXR1cm4gKDI0MDcgKyAoNSAqIGNoKSk7Ci0JfQorCWlmICgoY2ggPCAxNCkgJiYgKGNoID4gMCkpCisJCXJldHVybiAyNDA3ICsgKDUgKiBjaCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMiw1NCArMTE2LDQ2IEBACiAJMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKIAkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0CiB9OworCiAjZGVmaW5lIE5VTV9DSEFOTkVMUyBBUlJBWV9TSVpFKHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxKQogCi0vKiBzdGVhbCBhIHNwYXJlIGJpdCB0byBzdG9yZSB0aGUgc2hhcmVkL29wZW5zeXN0ZW1zIHN0YXRlLiBzaG91bGQgZGVmYXVsdCB0byBvcGVuIGlmIG5vdCBzZXQgKi8KLSNkZWZpbmUgSE9TVFdFUF9TSEFSRURLRVkgQklUMworLyogc3RlYWwgYSBzcGFyZSBiaXQgdG8gc3RvcmUgdGhlIHNoYXJlZC9vcGVuc3lzdGVtcyBzdGF0ZS4KKyAgIHNob3VsZCBkZWZhdWx0IHRvIG9wZW4gaWYgbm90IHNldCAqLworI2RlZmluZSBIT1NUV0VQX1NIQVJFREtFWSBCSVQoMykKIAotCi0vKiogZnVuY3Rpb24gZGVjbGFyYXRpb25zID09PT09PT09PT09PT09PSAqLwotCi1zdGF0aWMgaW50IHF1YWxfYXNfcGVyY2VudChpbnQgc25yICkgewotICBpZiAoIHNuciA8PSAwICkKLSAgICByZXR1cm4gMDsKLSAgaWYgKCBzbnIgPD0gNDAgKQotICAgIHJldHVybiBzbnIqNS8yOwotICByZXR1cm4gMTAwOworc3RhdGljIGludCBxdWFsX2FzX3BlcmNlbnQoaW50IHNucikKK3sKKwlpZiAoc25yIDw9IDApCisJCXJldHVybiAwOworCWlmIChzbnIgPD0gNDApCisJCXJldHVybiBzbnIgKiA1IC8gMjsKKwlyZXR1cm4gMTAwOwogfQogCi0KLQotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGRpZCwgdTMyIGRhdGEpCiB7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKLQlwODAyMTFpdGVtX3VpbnQzMl90CQltaWJpdGVtOwotCWludAlyZXN1bHQ7Ci0KLQlEQkZFTlRFUjsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlpbnQgcmVzdWx0OwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwogCW1pYml0ZW0uZGlkID0gZGlkOwogCW1pYml0ZW0uZGF0YSA9IGRhdGE7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCXA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdCAgICAgbXNnOwotCXN0cnVjdCBpd19wb2ludAkJCWRhdGE7CisJcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90IG1zZzsKKwlzdHJ1Y3QgaXdfcG9pbnQgZGF0YTsKIAljaGFyIHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwogCiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJLyogR2V0IEVTU0lEICovCiAJcmVzdWx0ID0gcDgwMjExd2V4dF9naXdlc3NpZCh3bGFuZGV2LT5uZXRkZXYsIE5VTEwsICZkYXRhLCBzc2lkKTsKIApAQCAtMTc4LDIzICsxNjQsMjIgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWlmICggd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfU0hBUkVES0VZICkKLQkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKKwlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfU0hBUkVES0VZKQorCQltc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXk7CiAJZWxzZQotCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbTsKKwkJbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbTsKIAogCW1zZy5tc2djb2RlID0gRElEbXNnX2xueHJlcV9hdXRvam9pbjsKIAogCS8qIFRyaW0gdGhlIGxhc3QgJ1wwJyB0byBmaXQgdGhlIFNTSUQgZm9ybWF0ICovCiAKLQlpZiAoZGF0YS5sZW5ndGggJiYgc3NpZFtkYXRhLmxlbmd0aC0xXSA9PSAnXDAnKSB7CisJaWYgKGRhdGEubGVuZ3RoICYmIHNzaWRbZGF0YS5sZW5ndGggLSAxXSA9PSAnXDAnKQogCQlkYXRhLmxlbmd0aCA9IGRhdGEubGVuZ3RoIC0gMTsKLQl9CiAKIAltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBzc2lkLCBkYXRhLmxlbmd0aCk7CiAJbXNnLnNzaWQuZGF0YS5sZW4gPSBkYXRhLmxlbmd0aDsKIAotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMjAzLDIyICsxODgsMjAgQEAKIAogZXhpdDoKIAotCURCRkVYSVQ7CiAJcmV0dXJuIGVycjsKIAogfQogCiAvKiBjYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzICovCi1zdHJ1Y3QgaXdfc3RhdGlzdGljcyogcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMgKG5ldGRldmljZV90ICpkZXYpCitzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMobmV0ZGV2aWNlX3QgKiBkZXYpCiB7Ci0JcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAgcXVhbGl0eTsKKwlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90IHF1YWxpdHk7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBpd19zdGF0aXN0aWNzKiB3c3RhdHMgPSAmd2xhbmRldi0+d3N0YXRzOworCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmd2xhbmRldi0+d3N0YXRzOwogCWludCByZXR2YWw7CiAKLQlEQkZFTlRFUjsKIAkvKiBDaGVjayAqLwotCWlmICggKHdsYW5kZXYgPT0gTlVMTCkgfHwgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcpICkKKwlpZiAoKHdsYW5kZXYgPT0gTlVMTCkgfHwgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIFhYWCBPbmx5IHZhbGlkIGluIHN0YXRpb24gbW9kZSAqLwpAQCAtMjMwLDI2ICsyMTMsMjQgQEAKIAlxdWFsaXR5LmRibS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKIAkvKiBzZW5kIG1lc3NhZ2UgdG8gbnNkICovCi0JaWYgKCB3bGFuZGV2LT5tbG1lcmVxdWVzdCA9PSBOVUxMICkKKwlpZiAod2xhbmRldi0+bWxtZXJlcXVlc3QgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR2YWwgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAocDgwMjExbXNnX3QqKSAmcXVhbGl0eSk7CisJcmV0dmFsID0gd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgKHA4MDIxMW1zZ190ICopJnF1YWxpdHkpOwogCi0Jd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOyAgICAvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLwotCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsgIC8qIGluc3RhbnQgc2lnbmFsIGxldmVsICovCi0Jd3N0YXRzLT5xdWFsLm5vaXNlID0gcXVhbGl0eS5ub2lzZS5kYXRhOyAgLyogaW5zdGFudCBub2lzZSBsZXZlbCAqLworCXdzdGF0cy0+cXVhbC5xdWFsID0gcXVhbF9hc19wZXJjZW50KHF1YWxpdHkubGluay5kYXRhKTsJLyogb3ZlcmFsbCBsaW5rIHF1YWxpdHkgKi8KKwl3c3RhdHMtPnF1YWwubGV2ZWwgPSBxdWFsaXR5LmxldmVsLmRhdGE7CS8qIGluc3RhbnQgc2lnbmFsIGxldmVsICovCisJd3N0YXRzLT5xdWFsLm5vaXNlID0gcXVhbGl0eS5ub2lzZS5kYXRhOwkvKiBpbnN0YW50IG5vaXNlIGxldmVsICovCiAKIAl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKIAl3c3RhdHMtPmRpc2NhcmQuY29kZSA9IHdsYW5kZXYtPnJ4LmRlY3J5cHRfZXJyOwogCXdzdGF0cy0+ZGlzY2FyZC5ud2lkID0gMDsKIAl3c3RhdHMtPmRpc2NhcmQubWlzYyA9IDA7CiAKLQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSAwOyAgLy8gaW5jb21wbGV0ZSBmcmFnbWVudHMKLQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IDA7ICAgLy8gdHggcmV0cmllcy4KKwl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSAwOwkvKiBpbmNvbXBsZXRlIGZyYWdtZW50cyAqLworCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzID0gMDsJLyogdHggcmV0cmllcy4gKi8KIAl3c3RhdHMtPm1pc3MuYmVhY29uID0gMDsKIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm4gd3N0YXRzOwogfQogCkBAIC0yNjEsOCArMjQyLDYgQEAKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd3JhdGUoZGV2LCBOVUxMLCAmcmF0ZSwgTlVMTCk7CiAKIAlpZiAocmVzdWx0KSB7CkBAIC0yODEsNyArMjYwLDYgQEAKIAkJYnJlYWs7CiAJfQogZXhpdDoKLQlEQkZFWElUOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI5MCwxNyArMjY4LDE1IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbDsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0zMTgsOCArMjk0LDcgQEAKIAlmcmVxLT5lID0gMTsKIAlmcmVxLT5tID0gcDgwMjExX2NoYW5uZWxfdG9fbWh6KG1pYml0ZW0uZGF0YSwgMCkgKiAxMDAwMDA7CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMyOCwxMyArMzAzLDExIEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CkBAIC0zNDQsMjEgKzMxNywyMCBAQAogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWw7CiAJbWliaXRlbS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKLQlpZiAoIChmcmVxLT5lID09IDApICYmIChmcmVxLT5tIDw9IDEwMDApICkKKwlpZiAoKGZyZXEtPmUgPT0gMCkgJiYgKGZyZXEtPm0gPD0gMTAwMCkpCiAJCW1pYml0ZW0uZGF0YSA9IGZyZXEtPm07CiAJZWxzZQogCQltaWJpdGVtLmRhdGEgPSBwODAyMTFfbWh6X3RvX2NoYW5uZWwoZnJlcS0+bSk7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM2OCw4ICszNDAsNiBAQAogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAotCURCRkVOVEVSOwotCiAJc3dpdGNoICh3bGFuZGV2LT5tYWNtb2RlKSB7CiAJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6CiAJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKQEAgLTM4NSw3ICszNTUsNiBAQAogCQkqbW9kZSA9IElXX01PREVfQVVUTzsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC0zOTQsMTIgKzM2MywxMCBAQAogCQkJICAgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7Ci0JaW50IAlyZXN1bHQ7Ci0JaW50ICAgICBlcnIgPSAwOwotCi0JREJGRU5URVI7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKIAogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CkBAIC00MjgsNyArMzk1LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogTm90IHNldCB5ZXQuICovCi0JCVdMQU5fTE9HX0lORk8oIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgKm1vZGUpOworCQlwcmludGsoS0VSTl9JTkZPICJPcGVyYXRpb24gbW9kZTogJWQgbm90IHN1cHBvcnRcbiIsICptb2RlKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIApAQCAtNDM3LDMzICs0MDQsMjggQEAKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlOwogCW1pYml0ZW0uZGF0YSA9ICgqbW9kZSA9PSBJV19NT0RFX0FESE9DKSA/IDAgOiAxOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpCiAJCWVyciA9IC1FRkFVTFQ7CiAKLSBleGl0OgotCURCRkVYSVQ7Ci0KK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cmFuZ2UobmV0ZGV2aWNlX3QgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgICAgIHN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7CiAJaW50IGksIHZhbDsKIAotCURCRkVOVEVSOwotCi0JLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgc2V0IHNpemUgJiB6ZXJvIGV2ZXJ5dGhpbmcgd2UgZG9uJ3QgdW5kZXJzdGFuZAorCS8qIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IHNldCBzaXplIGFuZCB6ZXJvIGV2ZXJ5dGhpbmcgd2UgZG9uJ3QgdW5kZXJzdGFuZCAqLwogCWRhdGEtPmxlbmd0aCA9IHNpemVvZigqcmFuZ2UpOwotCW1lbXNldChyYW5nZSwwLHNpemVvZigqcmFuZ2UpKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZigqcmFuZ2UpKTsKIAogCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07Ci0JLy8gWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuCisJLyogWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuICovCiAKIAlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKIAlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxMzsKQEAgLTQ3MywxOCArNDM1LDE4IEBACiAJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CiAJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKIAotICAgICAgICByYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8ICAvL21vZGUvZnJlcS9zc2lkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdTQ0FOKSk7Ci0gICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzFdID0gSVdfRVZFTlRfQ0FQQV9LXzE7ICAvL2VuY29kZQotICAgICAgICByYW5nZS0+ZXZlbnRfY2FwYVs0XSA9IChJV19FVkVOVF9DQVBBX01BU0soSVdFVlFVQUwpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKElXRVZDVVNUT00pICk7CisJcmFuZ2UtPmV2ZW50X2NhcGFbMF0gPSAoSVdfRVZFTlRfQ0FQQV9LXzAgfAkvKiBtb2RlL2ZyZXEvc3NpZCAqLworCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApIHwKKwkJCQlJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKKwlyYW5nZS0+ZXZlbnRfY2FwYVsxXSA9IElXX0VWRU5UX0NBUEFfS18xOwkvKiBlbmNvZGUgKi8KKwlyYW5nZS0+ZXZlbnRfY2FwYVs0XSA9IChJV19FVkVOVF9DQVBBX01BU0soSVdFVlFVQUwpIHwKKwkJCQlJV19FVkVOVF9DQVBBX01BU0soSVdFVkNVU1RPTSkpOwogCiAJcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKIAogCS8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCiAJdmFsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7CiAJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGkgKyAxOwogCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcVtpXSAqIDEwMDAwMDsKIAkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKQEAgLTQ5OCw3ICs0NjAsNyBAQAogCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7CiAJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKIAlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOwotCS8vIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEKKwkvKiBYWFggdGhlc2UgbmVlZCB0byBiZSBuc2Qtc3BlY2lmaWMhICovCiAKIAlyYW5nZS0+bWluX3J0cyA9IDA7CiAJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwpAQCAtNTEwLDE0ICs0NzIsMTMgQEAKIAlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7CiAJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKIAotCS8vIFhYWCB3aGF0IGFib3V0IG51bV9iaXRyYXRlcy90aHJvdWdocHV0PworCS8qIFhYWCB3aGF0IGFib3V0IG51bV9iaXRyYXRlcy90aHJvdWdocHV0PyAqLwogCXJhbmdlLT5udW1fYml0cmF0ZXMgPSAwOwogCiAJLyogZXN0aW1hdGVkIG1heCB0aHJvdWdocHV0ICovCi0JLy8gWFhYIG5lZWQgdG8gY2FwIGl0IGlmIHdlJ3JlIHJ1bm5pbmcgYXQgfjJNYnBzLi4KKwkvKiBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLiAqLwogCXJhbmdlLT50aHJvdWdocHV0ID0gNTUwMDAwMDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyOCwxMiArNDg5LDkgQEAKIAogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAotCURCRkVOVEVSOwotCiAJbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CiAJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQ1LDggKzUwMyw2IEBACiAJaW50IGVyciA9IDA7CiAJaW50IGk7CiAKLQlEQkZFTlRFUjsKLQogCWkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwogCWVycS0+ZmxhZ3MgPSAwOwogCkBAIC01NzYsOCArNTMyLDcgQEAKIAllcnEtPmxlbmd0aCA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2ldOwogCW1lbWNweShrZXksIHdsYW5kZXYtPndlcF9rZXlzW2ldLCBlcnEtPmxlbmd0aCk7CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTU4NiwzMiArNTQxLDMzIEBACiAJCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKLQlwODAyMTFpdGVtX3BzdHIzMl90CQlwc3RyOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJcDgwMjExaXRlbV9wc3RyMzJfdCBwc3RyOwogCiAJaW50IGVyciA9IDA7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGk7CiAKLQlEQkZFTlRFUjsKIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJLyogQ2hlY2sgdGhlIEtleSBpbmRleCBmaXJzdC4gKi8KLQlpZigoaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSkpIHsKKwlpZiAoKGkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkpKSB7CiAKIAkJaWYgKChpIDwgMSkgfHwgKGkgPiBOVU1fV0VQS0VZUykpIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJZWxzZQorCQl9IGVsc2UKIAkJCWktLTsKIAogCQkvKiBTZXQgY3VycmVudCBrZXkgbnVtYmVyIG9ubHkgaWYgbm8ga2V5cyBhcmUgZ2l2ZW4gKi8KIAkJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpIHsKLQkJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwgaSk7CisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAorCQkJCQkJIGkpOwogCiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKQEAgLTYyMCwxMiArNTc2LDEyIEBACiAJCX0KIAogCX0gZWxzZSB7Ci0JCS8vIFVzZSBkZWZhdWx0a2V5IGlmIG5vIEtleSBJbmRleAorCQkvKiBVc2UgZGVmYXVsdGtleSBpZiBubyBLZXkgSW5kZXggKi8KIAkJaSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKIAl9CiAKIAkvKiBDaGVjayBpZiB0aGVyZSBpcyBubyBrZXkgaW5mb3JtYXRpb24gaW4gdGhlIGl3Y29uZmlnIHJlcXVlc3QgKi8KLQlpZigoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCApIHsKKwlpZiAoKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpID09IDApIHsKIAogCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkgKiBJZiB0aGVyZSBpcyBXRVAgS2V5IGZvciBzZXR0aW5nLCBjaGVjayB0aGUgS2V5IEluZm9ybWF0aW9uCkBAIC02NDIsMzIgKzU5OCwzNSBAQAogCQkJbWVtY3B5KHBzdHIuZGF0YS5kYXRhLCBrZXksIGVycS0+bGVuZ3RoKTsKIAkJCXBzdHIuZGF0YS5sZW4gPSBlcnEtPmxlbmd0aDsKIAotCQkJc3dpdGNoKGkpCi0JCQl7Ci0JCQkJY2FzZSAwOgotCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKLQkJCQkJYnJlYWs7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgMDoKKwkJCQlwc3RyLmRpZCA9CisJCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKKwkJCQlicmVhazsKIAotCQkJCWNhc2UgMToKLQkJCQkJcHN0ci5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7Ci0JCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXBzdHIuZGlkID0KKwkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQkJCWJyZWFrOwogCi0JCQkJY2FzZSAyOgotCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKLQkJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcHN0ci5kaWQgPQorCQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisJCQkJYnJlYWs7CiAKLQkJCQljYXNlIDM6Ci0JCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOwotCQkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlwc3RyLmRpZCA9CisJCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzsKKwkJCQlicmVhazsKIAotCQkJCWRlZmF1bHQ6Ci0JCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gZXhpdDsKKwkJCWRlZmF1bHQ6CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAKIAkJCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKIAkJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmcHN0ciwgc2l6ZW9mKHBzdHIpKTsKLQkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtNjc5LDkgKzYzOCwxNSBAQAogCiAJLyogQ2hlY2sgdGhlIFByaXZhY3lJbnZva2VkIGZsYWcgKi8KIAlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgewotCQlyZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCXJlc3VsdCA9CisJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJCQkJCSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKIAl9IGVsc2UgewotCQlyZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwkJcmVzdWx0ID0KKwkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKwkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7CiAJfQogCiAJaWYgKHJlc3VsdCkgewpAQCAtNjkwLDE3ICs2NTUsMjIgQEAKIAl9CiAKIAkvKiAgVGhlICBzZWN1cml0eSAgbW9kZSAgbWF5ICBiZSBvcGVuIG9yIHJlc3RyaWN0ZWQsIGFuZCBpdHMgbWVhbmluZwotCSAgICBkZXBlbmRzIG9uIHRoZSBjYXJkIHVzZWQuIFdpdGggIG1vc3QgIGNhcmRzLCAgaW4gIG9wZW4gIG1vZGUgIG5vCi0JICAgIGF1dGhlbnRpY2F0aW9uICBpcyAgdXNlZCAgYW5kICB0aGUgIGNhcmQgIG1heSAgYWxzbyAgYWNjZXB0IG5vbi0KLQkgICAgZW5jcnlwdGVkIHNlc3Npb25zLCB3aGVyZWFzIGluIHJlc3RyaWN0ZWQgIG1vZGUgIG9ubHkgIGVuY3J5cHRlZAotCSAgICBzZXNzaW9ucyAgYXJlICBhY2NlcHRlZCAgYW5kIHRoZSBjYXJkIHdpbGwgdXNlIGF1dGhlbnRpY2F0aW9uIGlmCi0JICAgIGF2YWlsYWJsZS4KLQkqLworCSAgIGRlcGVuZHMgb24gdGhlIGNhcmQgdXNlZC4gV2l0aCAgbW9zdCAgY2FyZHMsICBpbiAgb3BlbiAgbW9kZSAgbm8KKwkgICBhdXRoZW50aWNhdGlvbiAgaXMgIHVzZWQgIGFuZCAgdGhlICBjYXJkICBtYXkgIGFsc28gIGFjY2VwdCBub24tCisJICAgZW5jcnlwdGVkIHNlc3Npb25zLCB3aGVyZWFzIGluIHJlc3RyaWN0ZWQgIG1vZGUgIG9ubHkgIGVuY3J5cHRlZAorCSAgIHNlc3Npb25zICBhcmUgIGFjY2VwdGVkICBhbmQgdGhlIGNhcmQgd2lsbCB1c2UgYXV0aGVudGljYXRpb24gaWYKKwkgICBhdmFpbGFibGUuCisJICovCiAJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkgewotCQlyZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7Ci0JfQotCWVsc2UgaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgewotCQlyZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKKwkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7CisJfSBlbHNlIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pIHsKKwkJcmVzdWx0ID0KKwkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJCQkJCSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKIAl9CiAKIAlpZiAocmVzdWx0KSB7CkBAIC03MDgsOSArNjc4LDggQEAKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6CitleGl0OgogCi0JREJGRVhJVDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MjAsOCArNjg5LDYgQEAKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CiAKLQlEQkZFTlRFUjsKLQogCWlmICh3bGFuZGV2LT5zc2lkLmxlbikgewogCQlkYXRhLT5sZW5ndGggPSB3bGFuZGV2LT5zc2lkLmxlbjsKIAkJZGF0YS0+ZmxhZ3MgPSAxOwpAQCAtNzMxLDEyICs2OTgsMTEgQEAKIAkJZGF0YS0+bGVuZ3RoKys7CiAjZW5kaWYKIAl9IGVsc2UgewotCSAgCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKHdsYW5kZXYtPnNzaWQuZGF0YSkpOworCQltZW1zZXQoZXNzaWQsIDAsIHNpemVvZih3bGFuZGV2LT5zc2lkLmRhdGEpKTsKIAkJZGF0YS0+bGVuZ3RoID0gMDsKIAkJZGF0YS0+ZmxhZ3MgPSAwOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0NSw1NSArNzExLDQ5IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90ICAgICBtc2c7CisJcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90IG1zZzsKIAogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAJaW50IGxlbmd0aCA9IGRhdGEtPmxlbmd0aDsKIAotCURCRkVOVEVSOwotCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwogCX0KIAotCi0JaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQotCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkpCisJCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKIAllbHNlCi0JICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCQltc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOwogCiAjaWYgKFdJUkVMRVNTX0VYVCA8IDIxKQotCWlmIChsZW5ndGgpIGxlbmd0aC0tOworCWlmIChsZW5ndGgpCisJCWxlbmd0aC0tOwogI2VuZGlmCiAKIAkvKiBUcmltIHRoZSBsYXN0ICdcMCcgdG8gZml0IHRoZSBTU0lEIGZvcm1hdCAqLwotCi0JaWYgKGxlbmd0aCAmJiBlc3NpZFtsZW5ndGgtMV0gPT0gJ1wwJykgewotCSAgbGVuZ3RoLS07Ci0JfQorCWlmIChsZW5ndGggJiYgZXNzaWRbbGVuZ3RoIC0gMV0gPT0gJ1wwJykKKwkJbGVuZ3RoLS07CiAKIAltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBlc3NpZCwgbGVuZ3RoKTsKIAltc2cuc3NpZC5kYXRhLmxlbiA9IGxlbmd0aDsKIAotCVdMQU5fTE9HX0RFQlVHKDEsImF1dG9qb2luX3NzaWQgZm9yICVzIFxuIixlc3NpZCk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOwotICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJhdXRvam9pbl9zc2lkICVkXG4iLHJlc3VsdCk7CisJcHJfZGVidWcoImF1dG9qb2luX3NzaWQgZm9yICVzIFxuIiwgZXNzaWQpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CisJcHJfZGVidWcoImF1dG9qb2luX3NzaWQgJWRcbiIsIHJlc3VsdCk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2NvbW1pdChuZXRkZXZpY2VfdCAqZGV2LAogCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKQEAgLTgwMSw4ICs3NjEsNiBAQAogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwpAQCAtODExLDI4ICs3NjksMjQgQEAKIAkvKiBBdXRvIEpvaW4gKi8KIAllcnIgPSBwODAyMTF3ZXh0X2F1dG9qb2luKHdsYW5kZXYpOwogCi0gZXhpdDoKLSAJREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cmF0ZShuZXRkZXZpY2VfdCAqZGV2LAogCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtODQxLDcgKzc5NSw3IEBACiAKIAltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CiAKLQlycnEtPmZpeGVkID0gMDsgICAvKiBjYW4gaXQgY2hhbmdlPyAqLworCXJycS0+Zml4ZWQgPSAwOwkJLyogY2FuIGl0IGNoYW5nZT8gKi8KIAlycnEtPmRpc2FibGVkID0gMDsKIAlycnEtPnZhbHVlID0gMDsKIApAQCAtODY2LDggKzgyMCw3IEBACiAJZGVmYXVsdDoKIAkJZXJyID0gLUVJTlZBTDsKIAl9Ci0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04NzYsMTcgKzgyOSwxNSBAQAogCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZDsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC04OTksMjQgKzg1MCwyMCBAQAogCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSAyMzQ3KTsKIAlydHMtPmZpeGVkID0gMTsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3cnRzKG5ldGRldmljZV90ICpkZXYsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKQEAgLTkzMCwxNSArODc3LDE0IEBACiAJCW1pYml0ZW0uZGF0YSA9IHJ0cy0+dmFsdWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTk0NywxNyArODkzLDE2IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OwotCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkOworCW1pYml0ZW0uZGlkID0KKwkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTk3MCw4ICs5MTUsNyBAQAogCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID09IDIzNDYpOwogCWZyYWctPmZpeGVkID0gMTsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTgwLDIwICs5MjQsMTkgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwotCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkOworCW1pYml0ZW0uZGlkID0KKwkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkOwogCiAJaWYgKGZyYWctPmRpc2FibGVkKQogCQltaWJpdGVtLmRhdGEgPSAyMzQ2OwpAQCAtMTAwMSwxNSArOTQ0LDE0IEBACiAJCW1pYml0ZW0uZGF0YSA9IGZyYWctPnZhbHVlOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDI2LDE5ICs5NjgsMTcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCXUxNiBzaG9ydHJldHJ5LCBsb25ncmV0cnksIGxpZmV0aW1lOwogCi0JREJGRU5URVI7Ci0KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdDsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTEwNTIsNyArOTkyLDcgQEAKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQ7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMDYzLDEwICsxMDAzLDExIEBACiAKIAlsb25ncmV0cnkgPSBtaWJpdGVtLmRhdGE7CiAKLQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTA5NCw4ICsxMDM1LDcgQEAKIAkJfQogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIAogfQpAQCAtMTEwNSwxMyArMTA0NSwxMSBAQAogCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKQEAgLTExMjUsMTEgKzEwNjMsMTIgQEAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CiAKIAlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgewotCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7Ci0JCW1pYml0ZW0uZGF0YSA9ICBycnEtPnZhbHVlIC89IDEwMjQ7CisJCW1pYml0ZW0uZGlkID0KKwkJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CisJCW1pYml0ZW0uZGF0YSA9IHJycS0+dmFsdWUgLz0gMTAyNDsKIAogCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCQlpZiAocmVzdWx0KSB7CiAJCQllcnIgPSAtRUZBVUxUOwpAQCAtMTEzNywxMSArMTA3NiwxMyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7Ci0JCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKIAkJCW1pYml0ZW0uZGF0YSA9IHJycS0+dmFsdWU7CiAKLQkJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwkJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwKKwkJCSAgICAgICBzaXplb2YobWliaXRlbSkpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCQkJaWYgKHJlc3VsdCkgewogCQkJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMTUwLDExICsxMDkxLDEzIEBACiAJCX0KIAogCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX1NIT1JUKSB7Ci0JCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0OworCQkJbWliaXRlbS5kaWQgPQorCQkJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0OwogCQkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZTsKIAotCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLAorCQkJICAgICAgIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKQEAgLTExNjMsNDYgKzExMDYsNDMgQEAKIAkJfQogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIAogfQogCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3dHhwb3cobmV0ZGV2aWNlX3QgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0gICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLSAgICAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7Ci0gICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgIGludCBlcnIgPSAwOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CiAKLSAgICAgICAgREJGRU5URVI7CisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KIAotICAgICAgIGlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gKC1FT1BOT1RTVVBQKTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0JbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLmRpZCA9CisJICAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CiAJaWYgKHJycS0+Zml4ZWQgPT0gMCkKLQkgIG1pYml0ZW0uZGF0YSA9IDMwOworCQltaWJpdGVtLmRhdGEgPSAzMDsKIAllbHNlCi0JICBtaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOwotICAgICAgICBtZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0gICAgICAgIHJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZTsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CiAKLSBleGl0OgotICAgICAgICBEQkZFWElUOwotICAgICAgICByZXR1cm4gZXJyOworZXhpdDoKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3dHhwb3cobmV0ZGV2aWNlX3QgKmRldiwKQEAgLTEyMTAsMTggKzExNTAsMTcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7Ci0JbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOworCW1pYml0ZW0uZGlkID0KKwkgICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbDsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTEyMzAsMTUgKzExNjksMTQgQEAKIAogCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKIAotCS8vIFhYWCBoYW5kbGUgT0ZGIGJ5IHNldHRpbmcgZGlzYWJsZWQgPSAxOworCS8qIFhYWCBoYW5kbGUgT0ZGIGJ5IHNldHRpbmcgZGlzYWJsZWQgPSAxOyAqLwogCi0JcnJxLT5mbGFncyA9IDA7IC8vIElXX1RYUE9XX0RCTTsKKwlycnEtPmZsYWdzID0gMDsJCS8qIElXX1RYUE9XX0RCTTsgKi8KIAlycnEtPmRpc2FibGVkID0gMDsKIAlycnEtPmZpeGVkID0gMDsKIAlycnEtPnZhbHVlID0gbWliaXRlbS5kYXRhOwogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMjQ3LDMzICsxMTg1LDMyIEBACiAJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOwotICAgICAgICBpbnQgbnVtYmVyID0gc3JxLT5sZW5ndGg7Ci0gICAgICAgIGludCBpOwotCi0JREJGRU5URVI7CisJc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07CisJaW50IG51bWJlciA9IHNycS0+bGVuZ3RoOworCWludCBpOwogCiAJLyogQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgKi8KLQltZW1jcHkoYWRkcmVzcywgZXh0cmEsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlcik7CisJbWVtY3B5KGFkZHJlc3MsIGV4dHJhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAqIG51bWJlcik7CiAKLSAgICAgICAgd2xhbmRldi0+c3B5X251bWJlciA9IDA7CisJd2xhbmRldi0+c3B5X251bWJlciA9IDA7CiAKLSAgICAgICAgaWYgKG51bWJlciA+IDApIHsKKwlpZiAobnVtYmVyID4gMCkgewogCi0gICAgICAgICAgICAgICAgLyogZXh0cmFjdCB0aGUgYWRkcmVzc2VzICovCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisJCS8qIGV4dHJhY3QgdGhlIGFkZHJlc3NlcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBhZGRyZXNzW2ldLnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJCW1lbWNweSh3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgYWRkcmVzc1tpXS5zYV9kYXRhLAorCQkJICAgICAgIEVUSF9BTEVOKTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyogcmVzZXQgc3RhdHMgKi8KLSAgICAgICAgICAgICAgICBtZW1zZXQod2xhbmRldi0+c3B5X3N0YXQsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkgKiBJV19NQVhfU1BZKTsKKwkJLyogcmVzZXQgc3RhdHMgKi8KKwkJbWVtc2V0KHdsYW5kZXYtPnNweV9zdGF0LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIElXX01BWF9TUFkpOwogCi0gICAgICAgICAgICAgICAgLyogc2V0IG51bWJlciBvZiBhZGRyZXNzZXMgKi8KLSAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfbnVtYmVyID0gbnVtYmVyOwotICAgICAgICB9CisJCS8qIHNldCBudW1iZXIgb2YgYWRkcmVzc2VzICovCisJCXdsYW5kZXYtPnNweV9udW1iZXIgPSBudW1iZXI7CisJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI4NCw3NCArMTIyMSw3MiBAQAogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKLSAgICAgICAgc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07Ci0gICAgICAgIGludCBudW1iZXI7Ci0gICAgICAgIGludCBpOworCXN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOworCXN0cnVjdCBpd19xdWFsaXR5IHNweV9zdGF0W0lXX01BWF9TUFldOworCWludCBudW1iZXI7CisJaW50IGk7CiAKLQlEQkZFTlRFUjsKKwludW1iZXIgPSB3bGFuZGV2LT5zcHlfbnVtYmVyOwogCi0gICAgICAgIG51bWJlciA9IHdsYW5kZXYtPnNweV9udW1iZXI7CisJaWYgKG51bWJlciA+IDApIHsKIAotICAgICAgICBpZiAobnVtYmVyID4gMCkgewotCi0gICAgICAgICAgICAgICAgLyogcG9wdWxhdGUgYWRkcmVzcyBhbmQgc3B5IHN0cnVjdCdzICovCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcmVzc1tpXS5zYV9kYXRhLCB3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgRVRIX0FMRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1tpXS5zYV9mYW1pbHkgPSBBRl9VTklYOwotICAgICAgICAgICAgICAgIAltZW1jcHkoJnNweV9zdGF0W2ldLCAmd2xhbmRldi0+c3B5X3N0YXRbaV0sIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpOwotICAgICAgICAgICAgICAgIH0KKwkJLyogcG9wdWxhdGUgYWRkcmVzcyBhbmQgc3B5IHN0cnVjdCdzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgeworCQkJbWVtY3B5KGFkZHJlc3NbaV0uc2FfZGF0YSwgd2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sCisJCQkgICAgICAgRVRIX0FMRU4pOworCQkJYWRkcmVzc1tpXS5zYV9mYW1pbHkgPSBBRl9VTklYOworCQkJbWVtY3B5KCZzcHlfc3RhdFtpXSwgJndsYW5kZXYtPnNweV9zdGF0W2ldLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpOworCQl9CiAKIAkJLyogcmVzZXQgdXBkYXRlIGZsYWcgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IG51bWJlcjsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDA7Ci0gICAgICAgIH0KKwkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKQorCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDA7CisJfQogCi0gICAgICAgIC8qIHB1c2ggc3R1ZmYgdG8gdXNlciBzcGFjZSAqLwotICAgICAgICBzcnEtPmxlbmd0aCA9IG51bWJlcjsKLQltZW1jcHkoZXh0cmEsIGFkZHJlc3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlcik7Ci0JbWVtY3B5KGV4dHJhK3NpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlciwgc3B5X3N0YXQsIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkqbnVtYmVyKTsKKwkvKiBwdXNoIHN0dWZmIHRvIHVzZXIgc3BhY2UgKi8KKwlzcnEtPmxlbmd0aCA9IG51bWJlcjsKKwltZW1jcHkoZXh0cmEsIGFkZHJlc3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyKTsKKwltZW1jcHkoZXh0cmEgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAqIG51bWJlciwgc3B5X3N0YXQsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkgKiBudW1iZXIpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcmlzbTJfcmVzdWx0MmVyciAoaW50IHByaXNtMl9yZXN1bHQpCitzdGF0aWMgaW50IHByaXNtMl9yZXN1bHQyZXJyKGludCBwcmlzbTJfcmVzdWx0KQogewogCWludCBlcnIgPSAwOwogCiAJc3dpdGNoIChwcmlzbTJfcmVzdWx0KSB7Ci0JCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczoKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZToKLQkJCWVyciA9IC1FSU87Ci0JCQlicmVhazsKLQkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDoKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIgPSAwOwotCQkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOgorCQllcnIgPSAtRUlPOworCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3NjYW4obmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdAltc2c7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaSA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9FU1NfQVApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkNhbid0IHNjYW4gaW4gQVAgbW9kZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc2NhbiBpbiBBUCBtb2RlXG4iKTsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTEzNjAsMzYgKzEyOTUsMzQgQEAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuOwogCW1zZy5ic3N0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2Jzc3R5cGVfYW55OwogCi0JbWVtc2V0KCYobXNnLmJzc2lkLmRhdGEpLCAweEZGLCBzaXplb2YgKHA4MDIxMWl0ZW1fcHN0cjZfdCkpOworCW1lbXNldCgmKG1zZy5ic3NpZC5kYXRhKSwgMHhGRiwgc2l6ZW9mKHA4MDIxMWl0ZW1fcHN0cjZfdCkpOwogCW1zZy5ic3NpZC5kYXRhLmxlbiA9IDY7CiAKIAltc2cuc2NhbnR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlOwogCW1zZy5wcm9iZWRlbGF5LmRhdGEgPSAwOwogCiAJZm9yIChpID0gMTsgaSA8PSAxNDsgaSsrKQotCQltc2cuY2hhbm5lbGxpc3QuZGF0YS5kYXRhW2ktMV0gPSBpOworCQltc2cuY2hhbm5lbGxpc3QuZGF0YS5kYXRhW2kgLSAxXSA9IGk7CiAJbXNnLmNoYW5uZWxsaXN0LmRhdGEubGVuID0gMTQ7CiAKIAltc2cubWF4Y2hhbm5lbHRpbWUuZGF0YSA9IDI1MDsKIAltc2cubWluY2hhbm5lbHRpbWUuZGF0YSA9IDIwMDsKIAotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCWlmIChyZXN1bHQpCi0JCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyIChtc2cucmVzdWx0Y29kZS5kYXRhKTsKKwkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIobXNnLnJlc3VsdGNvZGUuZGF0YSk7CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKLQogLyogSGVscGVyIHRvIHRyYW5zbGF0ZSBzY2FuIGludG8gV2lyZWxlc3MgRXh0ZW5zaW9ucyBzY2FuIHJlc3VsdHMuCiAgKiBJbnNwaXJlZCBieSB0aGUgcHJpc201NCBjb2RlLCB3aGljaCB3YXMgaW4gdHVybiBpbnNwaXJlZCBieSB0aGUKICAqIGFpcm8gZHJpdmVyIGNvZGUuCiAgKi8KLXN0YXRpYyBjaGFyICoKLXdleHRfdHJhbnNsYXRlX2JzcyhzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjdXJyZW50X2V2LAotCQkgICBjaGFyICplbmRfYnVmLCBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKmJzcykKK3N0YXRpYyBjaGFyICp3ZXh0X3RyYW5zbGF0ZV9ic3Moc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3VycmVudF9ldiwKKwkJCQljaGFyICplbmRfYnVmLAorCQkJCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqYnNzKQogewogCXN0cnVjdCBpd19ldmVudCBpd2U7CS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KIApAQCAtMTM5Nyw3ICsxMzMwLDkgQEAKIAltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLmRhdGEuZGF0YSwgV0xBTl9CU1NJRF9MRU4pOwogCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwljdXJyZW50X2V2ID0KKwkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkgSVdfRVZfQUREUl9MRU4pOwogCiAJLyogVGhlIGZvbGxvd2luZyBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwogCkBAIC0xNDA2LDMzICsxMzQxLDM5IEBACiAJCWNoYXIgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKIAkJaW50IHNpemU7CiAKLQkJc2l6ZSA9IHdsYW5fbWluKElXX0VTU0lEX01BWF9TSVpFLCBic3MtPnNzaWQuZGF0YS5sZW4pOwotCQltZW1zZXQoJmVzc2lkLCAwLCBzaXplb2YgKGVzc2lkKSk7CisJCXNpemUgPQorCQkgICAgbWluX3QodW5zaWduZWQgc2hvcnQsIElXX0VTU0lEX01BWF9TSVpFLAorCQkJICBic3MtPnNzaWQuZGF0YS5sZW4pOworCQltZW1zZXQoJmVzc2lkLCAwLCBzaXplb2YoZXNzaWQpKTsKIAkJbWVtY3B5KCZlc3NpZCwgYnNzLT5zc2lkLmRhdGEuZGF0YSwgc2l6ZSk7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsICIgZXNzaWQgc2l6ZSA9ICVkXG4iLCBzaXplKTsKKwkJcHJfZGVidWcoIiBlc3NpZCBzaXplID0gJWRcbiIsIHNpemUpOwogCQlpd2UudS5kYXRhLmxlbmd0aCA9IHNpemU7CiAJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwogCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgJmVzc2lkWzBdKTsKLQkJV0xBTl9MT0dfREVCVUcoMSwgIiBlc3NpZCBzaXplIE9LLlxuIik7CisJCWN1cnJlbnRfZXYgPQorCQkgICAgaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICZlc3NpZFswXSk7CisJCXByX2RlYnVnKCIgZXNzaWQgc2l6ZSBPSy5cbiIpOwogCX0KIAogCXN3aXRjaCAoYnNzLT5ic3N0eXBlLmRhdGEpIHsKLQkJY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmU6Ci0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZToKKwkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQlicmVhazsKIAotCQljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDoKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQ6CisJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQlicmVhazsKIAotCQlkZWZhdWx0OgotCQkJaXdlLnUubW9kZSA9IDA7Ci0JCQlicmVhazsKKwlkZWZhdWx0OgorCQlpd2UudS5tb2RlID0gMDsKKwkJYnJlYWs7CiAJfQogCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKIAlpZiAoaXdlLnUubW9kZSkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwkJY3VycmVudF9ldiA9CisJCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgSVdfRVZfVUlOVF9MRU4pOwogCiAJLyogRW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCiAJaWYgKGJzcy0+cHJpdmFjeS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKQEAgLTE0NDEsMTMgKzEzODIsMTYgQEAKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CiAJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIE5VTEwpOworCWN1cnJlbnRfZXYgPQorCSAgICBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKIAogCS8qIEFkZCBmcmVxdWVuY3kuIChzaG9ydCkgYnNzLT5jaGFubmVsIGlzIHRoZSBmcmVxdWVuY3kgaW4gTUh6ICovCiAJaXdlLnUuZnJlcS5tID0gYnNzLT5kc2NoYW5uZWwuZGF0YTsKIAlpd2UudS5mcmVxLmUgPSAwOwogCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCWN1cnJlbnRfZXYgPQorCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCSBJV19FVl9GUkVRX0xFTik7CiAKIAkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCiAJaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+c2lnbmFsLmRhdGE7CkBAIC0xNDU1LDI2ICsxMzk5LDI1IEBACiAJLyogZG8gYSBzaW1wbGUgU05SIGZvciBxdWFsaXR5ICovCiAJaXdlLnUucXVhbC5xdWFsID0gcXVhbF9hc19wZXJjZW50KGJzcy0+c2lnbmFsLmRhdGEgLSBic3MtPm5vaXNlLmRhdGEpOwogCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCWN1cnJlbnRfZXYgPQorCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCSBJV19FVl9RVUFMX0xFTik7CiAKIAlyZXR1cm4gY3VycmVudF9ldjsKIH0KIAotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3c2NhbihuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QJbXNnOworCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCBtc2c7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGVyciA9IDA7CiAJaW50IGkgPSAwOwogCWludCBzY2FuX2dvb2QgPSAwOwogCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKIAotCURCRkVOVEVSOwotCiAJLyogU2luY2Ugd2lyZWxlc3MgdG9vbHMgZG9lc24ndCByZWFsbHkgaGF2ZSBhIHdheSBvZiBwYXNzaW5nIGhvdwogCSAqIG1hbnkgc2NhbiByZXN1bHRzIHJlc3VsdHMgdGhlcmUgd2VyZSBiYWNrIGhlcmUsIGtlZXAgZ3JhYmJpbmcgdGhlbQogCSAqIHVudGlsIHdlIGZhaWwuCkBAIC0xNDg0LDExMCArMTQyNywxMTUgQEAKIAkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzOwogCQltc2cuYnNzaW5kZXguZGF0YSA9IGk7CiAKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCQlpZiAoKHJlc3VsdCAhPSAwKSB8fAogCQkgICAgKG1zZy5yZXN1bHRjb2RlLmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpKSB7CiAJCQlicmVhazsKIAkJfQogCi0JCWN1cnJlbnRfZXYgPSB3ZXh0X3RyYW5zbGF0ZV9ic3MoaW5mbywgY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmbXNnKTsKKwkJY3VycmVudF9ldiA9CisJCSAgICB3ZXh0X3RyYW5zbGF0ZV9ic3MoaW5mbywgY3VycmVudF9ldiwKKwkJCQkgICAgICAgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmbXNnKTsKIAkJc2Nhbl9nb29kID0gMTsKIAkJaSsrOwogCX0gd2hpbGUgKGkgPCBJV19NQVhfQVApOwogCiAJc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKLQlzcnEtPmZsYWdzID0gMDsJLyogdG9kbyAqLworCXNycS0+ZmxhZ3MgPSAwOwkJLyogdG9kbyAqLwogCiAJaWYgKHJlc3VsdCAmJiAhc2Nhbl9nb29kKQotCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVyciAobXNnLnJlc3VsdGNvZGUuZGF0YSk7CisJCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyKG1zZy5yZXN1bHRjb2RlLmRhdGEpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gZXJyOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vL2V4dHJhIHdpcmVsZXNzIGV4dGVuc2lvbnMgc3R1ZmYgdG8gc3VwcG9ydCBOZXR3b3JrTWFuYWdlciAoSSBob3BlKQorLyogZXh0cmEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBzdHVmZiB0byBzdXBwb3J0IE5ldHdvcmtNYW5hZ2VyIChJIGhvcGUpICovCiAKIC8qIFNJT0NTSVdFTkNPREVFWFQgKi8KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0gIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdAltc2c7Ci0JcDgwMjExaXRlbV9wc3RyMzJfdAkJKnBzdHI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QgKnBzdHI7CiAKLSAgaW50IHJlc3VsdCA9IDA7Ci0gIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7Ci0gIGludCBpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlpbnQgaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogCi0gIFdMQU5fTE9HX0RFQlVHKDEsInNldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsZXh0LT5leHRfZmxhZ3MsKGludClleHQtPmFsZywoaW50KWV4dC0+a2V5X2xlbik7CisJcHJfZGVidWcoInNldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsCisJICAgICAgIGV4dC0+ZXh0X2ZsYWdzLCAoaW50KWV4dC0+YWxnLCAoaW50KWV4dC0+a2V5X2xlbik7CiAKKwlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkgeworCQkvKiBzZXQgZGVmYXVsdCBrZXkgPyBJJ20gbm90IHN1cmUgaWYgdGhpcyB0aGUgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZSAqLwogCi0gIGlmICggZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSApIHsKLSAgICAvLyBzZXQgZGVmYXVsdCBrZXkgPyBJJ20gbm90IHN1cmUgaWYgdGhpcyB0aGUgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZQorCQlpZiAoaWR4KSB7CisJCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQlpZHgtLTsKKwkJfQorCQlwcl9kZWJ1Zygic2V0dGluZyBkZWZhdWx0IGtleSAoJWQpXG4iLCBpZHgpOworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKwkJCQkJIGlkeCk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAKLSAgICBpZiAoIGlkeCApIHsKLSAgICAgIGlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKSB7Ci0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgICB9IGVsc2UKLQlpZHgtLTsKLSAgICB9Ci0gICAgV0xBTl9MT0dfREVCVUcoMSwic2V0dGluZyBkZWZhdWx0IGtleSAoJWQpXG4iLGlkeCk7Ci0gICAgcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELCBpZHgpOwotICAgIGlmICggcmVzdWx0ICkKLSAgICAgIHJldHVybiAtRUZBVUxUOwotICB9CisJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7CisJCWlmICghKGV4dC0+YWxnICYgSVdfRU5DT0RFX0FMR19XRVApKSB7CisJCQlwcl9kZWJ1ZygiYXNrZWQgdG8gc2V0IGEgbm9uIHdlcCBrZXkgOigiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChpZHgpIHsKKwkJCWlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCWlkeC0tOworCQl9CisJCXByX2RlYnVnKCJTZXQgV0VQIGtleSAoJWQpXG4iLCBpZHgpOworCQl3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdID0gZXh0LT5rZXlfbGVuOworCQltZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CiAKLQotICBpZiAoIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZICkgewotICAgIGlmICghKGV4dC0+YWxnICYgSVdfRU5DT0RFX0FMR19XRVApKSB7Ci0gICAgICBXTEFOX0xPR19ERUJVRygxLCJhc2tlZCB0byBzZXQgYSBub24gd2VwIGtleSA6KCIpOwotICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotICAgIGlmIChpZHgpIHsKLSAgICAgIGlmIChpZHggPDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgICBlbHNlCi0JaWR4LS07Ci0gICAgfQotICAgIFdMQU5fTE9HX0RFQlVHKDEsIlNldCBXRVAga2V5ICglZClcbiIsaWR4KTsKLSAgICB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdID0gZXh0LT5rZXlfbGVuOwotICAgIG1lbWNweSh3bGFuZGV2LT53ZXBfa2V5c1tpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKLQotICAgIG1lbXNldCggJm1zZywwLHNpemVvZihtc2cpKTsKLSAgICBwc3RyID0gKHA4MDIxMWl0ZW1fcHN0cjMyX3QqKSZtc2cubWliYXR0cmlidXRlLmRhdGE7Ci0gICAgbWVtY3B5KHBzdHItPmRhdGEuZGF0YSwgZXh0LT5rZXksZXh0LT5rZXlfbGVuKTsKLSAgICBwc3RyLT5kYXRhLmxlbiA9IGV4dC0+a2V5X2xlbjsKLSAgICBzd2l0Y2ggKGlkeCkgewotICAgIGNhc2UgMDoKLSAgICAgIHBzdHItPmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgIHBzdHItPmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgIHBzdHItPmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgIHBzdHItPmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwotICAgIHJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwodTgqKSZtc2cpOwotICAgIFdMQU5fTE9HX0RFQlVHKDEsInJlc3VsdCAoJWQpXG4iLHJlc3VsdCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJcHN0ciA9IChwODAyMTFpdGVtX3BzdHIzMl90ICopJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKKwkJbWVtY3B5KHBzdHItPmRhdGEuZGF0YSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisJCXBzdHItPmRhdGEubGVuID0gZXh0LT5rZXlfbGVuOworCQlzd2l0Y2ggKGlkeCkgeworCQljYXNlIDA6CisJCQlwc3RyLT5kaWQgPQorCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwc3RyLT5kaWQgPQorCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwc3RyLT5kaWQgPQorCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwc3RyLT5kaWQgPQorCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOworCQlwcl9kZWJ1ZygicmVzdWx0ICglZClcbiIsIHJlc3VsdCk7CisJfQorCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qIFNJT0NHSVdFTkNPREVFWFQgKi8KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLQorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwpAQCAtMTU5NywyNCArMTU0NSwyNCBAQAogCWludCBtYXhfbGVuOwogCWludCBpZHg7CiAKLQlEQkZFTlRFUjsKLQotCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsZXh0LT5leHRfZmxhZ3MsKGludClleHQtPmFsZywoaW50KWV4dC0+a2V5X2xlbik7Ci0KKwlwcl9kZWJ1ZygiZ2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIiwKKwkgICAgICAgZXh0LT5leHRfZmxhZ3MsIChpbnQpZXh0LT5hbGcsIChpbnQpZXh0LT5rZXlfbGVuKTsKIAogCW1heF9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOwotCWlmICggbWF4X2xlbiA8PSAwKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVleHQgbWF4X2xlbiBbJWRdIGludmFsaWRcbiIsbWF4X2xlbik7CisJaWYgKG1heF9sZW4gPD0gMCkgeworCQlwcl9kZWJ1ZygiZ2V0X2VuY29kZWV4dCBtYXhfbGVuIFslZF0gaW52YWxpZFxuIiwKKwkJICAgICAgIG1heF9sZW4pOwogCQlyZXN1bHQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQogCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAotCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGluZGV4IFslZF1cbiIsaWR4KTsKKwlwcl9kZWJ1ZygiZ2V0X2VuY29kZV9leHQgaW5kZXggWyVkXVxuIiwgaWR4KTsKIAogCWlmIChpZHgpIHsKLQkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLCJnZXRfZW5jb2RlX2V4dCBpbnZhbGlkIGtleSBpbmRleCBbJWRdXG4iLGlkeCk7CisJCWlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJnZXRfZW5jb2RlX2V4dCBpbnZhbGlkIGtleSBpbmRleCBbJWRdXG4iLCBpZHgpOwogCQkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXhpdDsKIAkJfQpAQCAtMTYyNSwyMDMgKzE1NzMsMjA3IEBACiAJfQogCiAJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKLQltZW1zZXQoZXh0LDAsc2l6ZW9mKCpleHQpKTsKKwltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwogCiAJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKIAlleHQtPmtleV9sZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdOwotCW1lbWNweSggZXh0LT5rZXksIHdsYW5kZXYtPndlcF9rZXlzW2lkeF0gLCBleHQtPmtleV9sZW4gKTsKKwltZW1jcHkoZXh0LT5rZXksIHdsYW5kZXYtPndlcF9rZXlzW2lkeF0sIGV4dC0+a2V5X2xlbik7CiAKIAllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CiBleGl0OgotCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogU0lPQ1NJV0FVVEggKi8KK3N0YXRpYyBpbnQgcDgwMjExX3dleHRfc2V0X2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCWludCByZXN1bHQgPSAwOworCisJcHJfZGVidWcoInNldF9pd2F1dGggZmxhZ3NbJWRdXG4iLAorCSAgICAgICAoaW50KXBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpOworCisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXByX2RlYnVnKCJkcm9wX3VuZW5jcnlwdGVkICVkXG4iLCBwYXJhbS0+dmFsdWUpOworCQlpZiAocGFyYW0tPnZhbHVlKQorCQkJcmVzdWx0ID0KKwkJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKKwkJCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCQllbHNlCisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJCXByX2RlYnVnKCJwcml2YWN5IGludm9rZWQgJWRcbiIsIHBhcmFtLT52YWx1ZSk7CisJCWlmIChwYXJhbS0+dmFsdWUpCisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0KKwkJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworCisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKKwkJCXByX2RlYnVnKCJzZXQgb3Blbl9zeXN0ZW1cbiIpOworCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+SE9TVFdFUF9TSEFSRURLRVk7CisJCX0gZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgeworCQkJcHJfZGVidWcoInNldCBzaGFyZWQga2V5XG4iKTsKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9TSEFSRURLRVk7CisJCX0gZWxzZSB7CisJCQkvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8ga25vdyAgKi8KKwkJCXByX2RlYnVnKCJ1bmtub3duIEFVVEhfQUxHICglZClcbiIsCisJCQkgICAgICAgcGFyYW0tPnZhbHVlKTsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qIFNJT0NTSVdBVVRIICovCi1zdGF0aWMgaW50IHA4MDIxMV93ZXh0X3NldF9pd2F1dGggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3N0YXRpYyBpbnQgcDgwMjExX3dleHRfZ2V0X2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0gIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0gIGludCByZXN1bHQgPTA7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJaW50IHJlc3VsdCA9IDA7CiAKLSAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7CisJcHJfZGVidWcoImdldF9pd2F1dGggZmxhZ3NbJWRdXG4iLAorCSAgICAgICAoaW50KXBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpOwogCi0gIHN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotICBjYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLSAgICBXTEFOX0xPR19ERUJVRygxLCJkcm9wX3VuZW5jcnlwdGVkICVkXG4iLHBhcmFtLT52YWx1ZSk7Ci0gICAgaWYgKHBhcmFtLT52YWx1ZSkKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwotICAgIGJyZWFrOworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorCQlwYXJhbS0+dmFsdWUgPQorCQkgICAgd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEID8gMSA6IDA7CisJCWJyZWFrOwogCi0gIGNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0gICAgV0xBTl9MT0dfREVCVUcoMSwicHJpdmFjeSBpbnZva2VkICVkXG4iLHBhcmFtLT52YWx1ZSk7Ci0gICAgaWYgKCBwYXJhbS0+dmFsdWUpCi0gICAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwkJcGFyYW0tPnZhbHVlID0KKwkJICAgIHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEID8gMSA6IDA7CisJCWJyZWFrOwogCi0gICAgYnJlYWs7CisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlwYXJhbS0+dmFsdWUgPQorCQkgICAgd2xhbmRldi0+CisJCSAgICBob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgPyBJV19BVVRIX0FMR19TSEFSRURfS0VZIDoKKwkJICAgIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOworCQlicmVhazsKIAotICBjYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0gICAgaWYgKCBwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSApIHsKLSAgICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldCBvcGVuX3N5c3RlbVxuIik7Ci0gICAgICB3bGFuZGV2LT5ob3N0d2VwICY9IH5IT1NUV0VQX1NIQVJFREtFWTsKLSAgICB9IGVsc2UgaWYgKCBwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7Ci0gICAgICBXTEFOX0xPR19ERUJVRygxLCJzZXQgc2hhcmVkIGtleVxuIik7Ci0gICAgICB3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfU0hBUkVES0VZOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8ga25vdyA6KCAqLwotICAgICAgV0xBTl9MT0dfREVCVUcoMSwidW5rbm93biBBVVRIX0FMRyAoJWQpXG4iLHBhcmFtLT52YWx1ZSk7Ci0gICAgICByZXN1bHQgPSAtRUlOVkFMOwotICAgIH0KLSAgICBicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotCi0KLQotICByZXR1cm4gcmVzdWx0OworCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qIFNJT0NTSVdBVVRIICovCi1zdGF0aWMgaW50IHA4MDIxMV93ZXh0X2dldF9pd2F1dGggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLSAgd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotICBzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwotICBpbnQgcmVzdWx0ID0wOwotCi0gIFdMQU5fTE9HX0RFQlVHKDEsImdldF9pd2F1dGggZmxhZ3NbJWRdXG4iLChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCApOwotCi0gIHN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotICBjYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLSAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQ/MTowOwotICAgIGJyZWFrOwotCi0gIGNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0gICAgcGFyYW0tPnZhbHVlID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQ/MTowOwotICAgIGJyZWFrOwotCi0gIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLSAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVk/SVdfQVVUSF9BTEdfU0hBUkVEX0tFWTpJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKLSAgICBicmVhazsKLQotCi0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLQotCi0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGl3X2hhbmRsZXIgcDgwMjExd2V4dF9oYW5kbGVyc1tdID0gIHsKLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdjb21taXQsCQkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJlcSwgIAkJLyogU0lPQ1NJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmVxLCAgCQkvKiBTSU9DR0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd21vZGUsICAgICAgIAkJLyogU0lPQ1NJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdtb2RlLCAgICAgICAJCS8qIFNJT0NHSVdNT0RFICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdTRU5TICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmFuZ2UsICAgICAgCQkvKiBTSU9DR0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1BSSVYgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyoga2VybmVsIGNvZGUgKi8gICAJCS8qIFNJT0NHSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsIC8qIG5vdCB1c2VkICovICAgICAJCS8qIFNJT0NTSVdTVEFUUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBrZXJuZWwgY29kZSAqLyAgIAkJLyogU0lPQ0dJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c3B5LAkJCS8qIFNJT0NTSVdTUFkgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdzcHksCQkJLyogU0lPQ0dJV1NQWSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV0FQICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3YXAsICAgICAgICAgCQkvKiBTSU9DR0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV0FQTElTVCAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2Vzc2lkLCAgCQkvKiBTSU9DU0lXRVNTSUQgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlc3NpZCwgICAgICAJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgCQkvKiBTSU9DU0lXTklDS04gKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlc3NpZCwgICAgICAJCS8qIFNJT0NHSVdOSUNLTiAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgCQkvKiBTSU9DU0lXUkFURSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhdGUsICAgICAgCQkvKiBTSU9DR0lXUkFURSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3J0cywgIAkJLyogU0lPQ1NJV1JUUyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3J0cywgICAgICAgIAkJLyogU0lPQ0dJV1JUUyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2ZyYWcsICAgICAgCQkvKiBTSU9DU0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyYWcsICAgCQkvKiBTSU9DR0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3R4cG93LCAgICAgICAgICAgCS8qIFNJT0NTSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3R4cG93LCAgCQkvKiBTSU9DR0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdyZXRyeSwgICAgIAkJLyogU0lPQ1NJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmV0cnksICAJCS8qIFNJT0NHSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2VuY29kZSwgICAgIAkJLyogU0lPQ1NJV0VOQ09ERSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2VuY29kZSwgIAkJLyogU0lPQ0dJV0VOQ09ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgCQkvKiBTSU9DU0lXUE9XRVIgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAJCS8qIFNJT0NHSVdQT1dFUiAqLworc3RhdGljIGl3X2hhbmRsZXIgcDgwMjExd2V4dF9oYW5kbGVyc1tdID0geworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2NvbW1pdCwJLyogU0lPQ1NJV0NPTU1JVCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd25hbWUsCS8qIFNJT0NHSVdOQU1FICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJlcSwJLyogU0lPQ1NJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmVxLAkvKiBTSU9DR0lXRlJFUSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd21vZGUsCS8qIFNJT0NTSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bW9kZSwJLyogU0lPQ0dJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogbm90IHVzZWQgKi8vKiBTSU9DU0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYW5nZSwJLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG5vdCB1c2VkICovLyogU0lPQ1NJV1BSSVYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyoga2VybmVsIGNvZGUgKi8vKiBTSU9DR0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBub3QgdXNlZCAqLy8qIFNJT0NTSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBrZXJuZWwgY29kZSAqLy8qIFNJT0NHSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NweSwJLyogU0lPQ1NJV1NQWSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NweSwJLyogU0lPQ0dJV1NQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV0FQICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3YXAsCS8qIFNJT0NHSVdBUCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdBUExJU1QgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdzY2FuLAkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NjYW4sCS8qIFNJT0NHSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZXNzaWQsCS8qIFNJT0NTSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLAkvKiBTSU9DR0lXRVNTSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsCS8qIFNJT0NHSVdOSUNLTiAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYXRlLAkvKiBTSU9DR0lXUkFURSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3J0cywJLyogU0lPQ1NJV1JUUyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3J0cywJLyogU0lPQ0dJV1JUUyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2ZyYWcsCS8qIFNJT0NTSVdGUkFHICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZnJhZywJLyogU0lPQ0dJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXd0eHBvdywJLyogU0lPQ1NJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3dHhwb3csCS8qIFNJT0NHSVdUWFBPVyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3JldHJ5LAkvKiBTSU9DU0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyZXRyeSwJLyogU0lPQ0dJV1JFVFJZICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZW5jb2RlLAkvKiBTSU9DU0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZW5jb2RlLAkvKiBTSU9DR0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdQT1dFUiAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXUE9XRVIgKi8KIC8qIFdQQSBvcGVyYXRpb25zICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DU0lXR0VOSUUJc2V0IGdlbmVyaWMgSUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyogU0lPQ0dJV0dFTklFCWdldCBnZW5lcmljIElFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X3NldF9pd2F1dGgsIC8qIFNJT0NTSVdBVVRICXNldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLwotCShpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9nZXRfaXdhdXRoLCAvKiBTSU9DR0lXQVVUSAlnZXQgYXV0aGVudGljYXRpb24gbW9kZSBwYXJhbXMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdHRU5JRSAgICAgIHNldCBnZW5lcmljIElFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdHRU5JRSAgICAgIGdldCBnZW5lcmljIElFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X3NldF9pd2F1dGgsCS8qIFNJT0NTSVdBVVRIICAgICBzZXQgYXV0aGVudGljYXRpb24gbW9kZSBwYXJhbXMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCwJLyogU0lPQ0dJV0FVVEggICAgIGdldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLwogCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dCwgLyogU0lPQ1NJV0VOQ09ERUVYVCAgc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQsIC8qIFNJT0NHSVdFTkNPREVFWFQgIGdldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyogU0lPQ1NJV1BNS1NBCVBNS1NBIGNhY2hlIG9wZXJhdGlvbiAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3NldF9lbmNvZGVleHQsCS8qIFNJT0NTSVdFTkNPREVFWFQgIHNldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9nZXRfZW5jb2RlZXh0LAkvKiBTSU9DR0lXRU5DT0RFRVhUICBnZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdQTUtTQSAgICAgIFBNS1NBIGNhY2hlIG9wZXJhdGlvbiAqLwogfTsKIAogc3RydWN0IGl3X2hhbmRsZXJfZGVmIHA4MDIxMXdleHRfaGFuZGxlcl9kZWYgPSB7CiAJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUocDgwMjExd2V4dF9oYW5kbGVycyksCiAJLm51bV9wcml2YXRlID0gMCwKIAkubnVtX3ByaXZhdGVfYXJncyA9IDAsCi0gICAgICAgIC5zdGFuZGFyZCA9IHA4MDIxMXdleHRfaGFuZGxlcnMsCisJLnN0YW5kYXJkID0gcDgwMjExd2V4dF9oYW5kbGVycywKIAkucHJpdmF0ZSA9IE5VTEwsCiAJLnByaXZhdGVfYXJncyA9IE5VTEwsCiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzCiB9OwogCi0KIGludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQgYXNzb2MpCiB7Ci0gICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgZGF0YTsKKwl1bmlvbiBpd3JlcV9kYXRhIGRhdGE7CiAKLSAgICAgICAgREJGRU5URVI7CisJLyogU2VuZCB0aGUgYXNzb2NpYXRpb24gc3RhdGUgZmlyc3QgKi8KKwlkYXRhLmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCWlmIChhc3NvYykKKwkJbWVtY3B5KGRhdGEuYXBfYWRkci5zYV9kYXRhLCB3bGFuZGV2LT5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtc2V0KGRhdGEuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CiAKLSAgICAgICAgLyogU2VuZCB0aGUgYXNzb2NpYXRpb24gc3RhdGUgZmlyc3QgKi8KLSAgICAgICAgZGF0YS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLSAgICAgICAgaWYgKGFzc29jKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGRhdGEuYXBfYWRkci5zYV9kYXRhLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KGRhdGEuYXBfYWRkci5zYV9kYXRhLCAwLCBXTEFOX0FERFJfTEVOKTsKLSAgICAgICAgfQorCWlmICh3bGFuX3dleHRfd3JpdGUpCisJCXdpcmVsZXNzX3NlbmRfZXZlbnQod2xhbmRldi0+bmV0ZGV2LCBTSU9DR0lXQVAsICZkYXRhLCBOVUxMKTsKIAotICAgICAgICBpZiAod2xhbl93ZXh0X3dyaXRlKQotICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQod2xhbmRldi0+bmV0ZGV2LCBTSU9DR0lXQVAsICZkYXRhLCBOVUxMKTsKKwlpZiAoIWFzc29jKQorCQlnb3RvIGRvbmU7CiAKLSAgICAgICAgaWYgKCFhc3NvYykgZ290byBkb25lOworCS8qIFhYWCBzZW5kIGFzc29jaWF0aW9uIGRhdGEsIGxpa2UgSUVzLCBldGMgZXRjLiAqLwogCi0gICAgICAgIC8vIFhYWCBzZW5kIGFzc29jaWF0aW9uIGRhdGEsIGxpa2UgSUVzLCBldGMgZXRjLgotCi0gZG9uZToKLSAgICAgICAgREJGRVhJVDsKLSAgICAgICAgcmV0dXJuIDA7Citkb25lOgorCXJldHVybiAwOwogfQotCi0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKaW5kZXggZjE3MjdiYS4uZTdhNzkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYwpAQCAtNTcsMTEgKzU3LDYgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLSNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKLQotCiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03Niw4ICs3MSw3IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KQEAgLTk0LDEwICs4OCwxMCBAQAogI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKIAogLyogQ29udmVydHMgODAyLjExIGZvcm1hdCByYXRlIHNwZWNpZmljYXRpb25zIHRvIHByaXNtMiAqLwotI2RlZmluZSBwODAyMTFyYXRlX3RvX3AyYml0KG4pCSgoKChuKSZ+QklUNykgPT0gMikgPyBCSVQwIDogXAotCQkJCSAoKChuKSZ+QklUNykgPT0gNCkgPyBCSVQxIDogXAotCQkJCSAoKChuKSZ+QklUNykgPT0gMTEpID8gQklUMiA6IFwKLQkJCQkgKCgobikmfkJJVDcpID09IDIyKSA/IEJJVDMgOiAwKQorI2RlZmluZSBwODAyMTFyYXRlX3RvX3AyYml0KG4pCSgoKChuKSZ+QklUKDcpKSA9PSAyKSA/IEJJVCgwKSA6ICBcCisJCQkJICgoKG4pJn5CSVQoNykpID09IDQpID8gQklUKDEpIDogXAorCQkJCSAoKChuKSZ+QklUKDcpKSA9PSAxMSkgPyBCSVQoMikgOiBcCisJCQkJICgoKG4pJn5CSVQoNykpID09IDIyKSA/IEJJVCgzKSA6IDApCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJtZ210X3NjYW4KQEAgLTEyNSwxODMgKzExOSwxODggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfc2Nhbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0JaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QJKm1zZyA9IG1zZ3A7Ci0gICAgICAgIHUxNiAgICAgICAgICAgICAgICAgIHJvYW1pbmdtb2RlLCB3b3JkOwotCWludCAgICAgICAgICAgICAgICAgICAgIGksIHRpbWVvdXQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaXN0bXBlbmFibGUgPSAwOworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QgKm1zZyA9IG1zZ3A7CisJdTE2IHJvYW1pbmdtb2RlLCB3b3JkOworCWludCBpLCB0aW1lb3V0OworCWludCBpc3RtcGVuYWJsZSA9IDA7CiAKLSAgICAgICAgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90ICBzY2FucmVxOworCWhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdCBzY2FucmVxOwogCi0JREJGRU5URVI7Ci0KLSAgICAgICAgLyogZ2F0ZWtlZXBlciBjaGVjayAqLwotICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKLSAgICAgICAgICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDMsMikpIHsKLQkJV0xBTl9MT0dfRVJST1IoIkhvc3RTY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCBjdXJyZW50IGZpcm13YXJlICg8MS4zLjIpLlxuIik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCS8qIGdhdGVrZWVwZXIgY2hlY2sgKi8KKwlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA8CisJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLCAzLCAyKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJIb3N0U2NhbiBub3Qgc3VwcG9ydGVkIHdpdGggY3VycmVudCBmaXJtd2FyZSAoPDEuMy4yKS5cbiIpOworCQlyZXN1bHQgPSAxOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0gICAgICAgIG1lbXNldCgmc2NhbnJlcSwgMCwgc2l6ZW9mKHNjYW5yZXEpKTsKKwltZW1zZXQoJnNjYW5yZXEsIDAsIHNpemVvZihzY2FucmVxKSk7CiAKLSAgICAgICAgLyogc2F2ZSBjdXJyZW50IHJvYW1pbmcgbW9kZSAqLwotICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwgJnJvYW1pbmdtb2RlKTsKLSAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgICAgICAgICAgICAgV0xBTl9MT0dfRVJST1IoImdldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisJLyogc2F2ZSBjdXJyZW50IHJvYW1pbmcgbW9kZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKKwkJCQkJICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCQkJICAmcm9hbWluZ21vZGUpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnZXRjb25maWcoUk9BTU1PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorCQkgICAgICAgcmVzdWx0KTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCWdvdG8gZXhpdDsKKwl9CiAKLSAgICAgICAgLyogZHJvcCBpbnRvIG1vZGUgMyBmb3IgdGhlIHNjYW4gKi8KLSAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotICAgICAgICAgICAgICAgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCi0JCQlIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNKTsKLSAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgICAgICAgICAgICAgV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisJLyogZHJvcCBpbnRvIG1vZGUgMyBmb3IgdGhlIHNjYW4gKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJCSAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCisJCQkJCSAgSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KIAotICAgICAgICAvKiBhY3RpdmUgb3IgcGFzc2l2ZT8gKi8KLSAgICAgICAgaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA+Ci0gICAgICAgICAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSw1LDApKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1zZy0+c2NhbnR5cGUuZGF0YSAhPSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgd29yZCA9IGhvc3QyaGZhMzg0eF8xNihtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JkID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwsIHdvcmQpOwotICAgICAgICAgICAgICAgIGlmICggcmVzdWx0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9MT0dfV0FSTklORygiUGFzc2l2ZSBzY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCAiCi0JCQkJCSAgImN1cnJlbnQgZmlybXdhcmUuICAoPDEuNS4xKVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogYWN0aXZlIG9yIHBhc3NpdmU/ICovCisJaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKwkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPgorCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSwgNSwgMCkpIHsKKwkJaWYgKG1zZy0+c2NhbnR5cGUuZGF0YSAhPSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZSkKKwkJCXdvcmQgPSBjcHVfdG9fbGUxNihtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGEpOworCQllbHNlCisJCQl3b3JkID0gMDsKKworCQlyZXN1bHQgPQorCQkgICAgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwsCisJCQkJCSAgICAgd29yZCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBhc3NpdmUgc2NhbiBub3Qgc3VwcG9ydGVkIHdpdGggIgorCQkJICAgICAgICJjdXJyZW50IGZpcm13YXJlLiAgKDwxLjUuMSlcbiIpOworCQl9CisJfQogCiAJLyogc2V0IHVwIHRoZSB0eHJhdGUgdG8gYmUgMk1CUFMuIFNob3VsZCBiZSBmYXN0ZXN0IGJhc2ljcmF0ZS4uLiAqLwogCXdvcmQgPSBIRkEzODR4X1JBVEVCSVRfMjsKLQlzY2FucmVxLnR4UmF0ZSA9IGhvc3QyaGZhMzg0eF8xNih3b3JkKTsKKwlzY2FucmVxLnR4UmF0ZSA9IGNwdV90b19sZTE2KHdvcmQpOwogCi0gICAgICAgIC8qIHNldCB1cCB0aGUgY2hhbm5lbCBsaXN0ICovCi0gICAgICAgIHdvcmQgPSAwOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLT5jaGFubmVsbGlzdC5kYXRhLmxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdTggY2hhbm5lbCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5kYXRhW2ldOwotICAgICAgICAgICAgICAgIGlmIChjaGFubmVsID4gMTQpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgMSBpcyBCSVQwIC4uLiBjaGFubmVsIDE0IGlzIEJJVDEzICovCi0gICAgICAgICAgICAgICAgd29yZCB8PSAoMSA8PCAoY2hhbm5lbC0xKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2NhbnJlcS5jaGFubmVsTGlzdCA9IGhvc3QyaGZhMzg0eF8xNih3b3JkKTsKKwkvKiBzZXQgdXAgdGhlIGNoYW5uZWwgbGlzdCAqLworCXdvcmQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBtc2ctPmNoYW5uZWxsaXN0LmRhdGEubGVuOyBpKyspIHsKKwkJdTggY2hhbm5lbCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5kYXRhW2ldOworCQlpZiAoY2hhbm5lbCA+IDE0KQorCQkJY29udGludWU7CisJCS8qIGNoYW5uZWwgMSBpcyBCSVQgMCAuLi4gY2hhbm5lbCAxNCBpcyBCSVQgMTMgKi8KKwkJd29yZCB8PSAoMSA8PCAoY2hhbm5lbCAtIDEpKTsKKwl9CisJc2NhbnJlcS5jaGFubmVsTGlzdCA9IGNwdV90b19sZTE2KHdvcmQpOwogCi0gICAgICAgIC8qIHNldCB1cCB0aGUgc3NpZCwgaWYgcHJlc2VudC4gKi8KLSAgICAgICAgc2NhbnJlcS5zc2lkLmxlbiA9IGhvc3QyaGZhMzg0eF8xNihtc2ctPnNzaWQuZGF0YS5sZW4pOwotICAgICAgICBtZW1jcHkoc2NhbnJlcS5zc2lkLmRhdGEsIG1zZy0+c3NpZC5kYXRhLmRhdGEsIG1zZy0+c3NpZC5kYXRhLmxlbik7CisJLyogc2V0IHVwIHRoZSBzc2lkLCBpZiBwcmVzZW50LiAqLworCXNjYW5yZXEuc3NpZC5sZW4gPSBjcHVfdG9fbGUxNihtc2ctPnNzaWQuZGF0YS5sZW4pOworCW1lbWNweShzY2FucmVxLnNzaWQuZGF0YSwgbXNnLT5zc2lkLmRhdGEuZGF0YSwgbXNnLT5zc2lkLmRhdGEubGVuKTsKIAogCS8qIEVuYWJsZSB0aGUgTUFDIHBvcnQgaWYgaXQncyBub3QgYWxyZWFkeSBlbmFibGVkICAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgJndvcmQpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiZ2V0Y29uZmlnKFBPUlRTVEFUVVMpIGZhaWxlZC4gIgotCQkJCSJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgImdldGNvbmZpZyhQT1JUU1RBVFVTKSBmYWlsZWQuICIKKwkJICAgICAgICJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCWdvdG8gZXhpdDsKIAl9CiAJaWYgKHdvcmQgPT0gSEZBMzg0eF9QT1JUU1RBVFVTX0RJU0FCTEVEKSB7CiAJCXUxNiB3b3JkYnVmWzE3XTsKIAogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQlIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKLQkJCUhGQTM4NHhfUk9BTU1PREVfSE9TVFNDQU5fSE9TVFJPQU0pOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoUk9BTUlOR01PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCQkJCSAgSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJzZXRjb25maWcoUk9BTUlOR01PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJLyogQ29uc3RydWN0IGEgYm9ndXMgU1NJRCBhbmQgYXNzaWduIGl0IHRvIE93blNTSUQgYW5kCiAJCSAqIERlc2lyZWRTU0lECiAJCSAqLwotCQl3b3JkYnVmWzBdID0gaG9zdDJoZmEzODR4XzE2KFdMQU5fU1NJRF9NQVhMRU4pOworCQl3b3JkYnVmWzBdID0gY3B1X3RvX2xlMTYoV0xBTl9TU0lEX01BWExFTik7CiAJCWdldF9yYW5kb21fYnl0ZXMoJndvcmRidWZbMV0sIFdMQU5fU1NJRF9NQVhMRU4pOwotCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKLQkJCQl3b3JkYnVmLCBIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTik7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgT3duU1NJRC5cbiIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZPV05TU0lELAorCQkJCQkJd29yZGJ1ZiwKKwkJCQkJCUhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IE93blNTSUQuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCi0JCQkJd29yZGJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBEZXNpcmVkU1NJRC5cbiIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCQkJCXdvcmRidWYsCisJCQkJCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgRGVzaXJlZFNTSUQuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBic3N0eXBlICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKLQkJCQlIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKLQkJCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MpOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENORlBPUlRUWVBFLlxuIik7CisJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCQkJICBIRkEzODR4X1BPUlRUWVBFX0lCU1MpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgQ05GUE9SVFRZUEUuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBpYnNzIG9wdGlvbnMgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MsCi0JCQkJSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBDUkVBVEVJQlNTLlxuIik7CisJCQkJCQkgIEhGQTM4NHhfUklEX0NSRUFURUlCU1MsCisJCQkJCQkgIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOQ1JFQVRFSUJTUyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBDUkVBVEVJQlNTLlxuIik7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoImRydnJfZW5hYmxlKDApIGZhaWxlZC4gIgotCQkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgImRydnJfZW5hYmxlKDApIGZhaWxlZC4gIgorCQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlpc3RtcGVuYWJsZSA9IDE7CiAJfQogCi0gICAgICAgIC8qIEZpZ3VyZSBvdXQgb3VyIHRpbWVvdXQgZmlyc3QgS3VzLCB0aGVuIEhaICovCi0gICAgICAgIHRpbWVvdXQgPSBtc2ctPmNoYW5uZWxsaXN0LmRhdGEubGVuICogbXNnLT5tYXhjaGFubmVsdGltZS5kYXRhOwotCXRpbWVvdXQgPSAodGltZW91dCAqIEhaKS8xMDAwOworCS8qIEZpZ3VyZSBvdXQgb3VyIHRpbWVvdXQgZmlyc3QgS3VzLCB0aGVuIEhaICovCisJdGltZW91dCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5sZW4gKiBtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGE7CisJdGltZW91dCA9ICh0aW1lb3V0ICogSFopIC8gMTAwMDsKIAotICAgICAgICAvKiBJc3N1ZSB0aGUgc2NhbiByZXF1ZXN0ICovCi0gICAgICAgIGh3LT5zY2FuZmxhZyA9IDA7CisJLyogSXNzdWUgdGhlIHNjYW4gcmVxdWVzdCAqLworCWh3LT5zY2FuZmxhZyA9IDA7CiAKLQlXTEFOX0hFWF9EVU1QKDUsImhzY2FucmVxIiwgJnNjYW5yZXEsIHNpemVvZihzY2FucmVxKSk7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJSEZBMzg0eF9SSURfSE9TVFNDQU4sICZzY2FucmVxLAorCQkJCQlzaXplb2YoaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgInNldGNvbmZpZyhTQ0FOUkVRVUVTVCkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KIAotICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKLSAgICAgICAgICAgICAgICAgICAgICAgIEhGQTM4NHhfUklEX0hPU1RTQ0FOLCAmc2NhbnJlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhX3QpKTsKLSAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgICAgICAgICAgICAgV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhTQ0FOUkVRVUVTVCkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyogc2xlZXAgdW50aWwgaW5mbyBmcmFtZSBhcnJpdmVzICovCi0gICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGh3LT5jbWRxLCBody0+c2NhbmZsYWcsIHRpbWVvdXQpOworCS8qIHNsZWVwIHVudGlsIGluZm8gZnJhbWUgYXJyaXZlcyAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGh3LT5jbWRxLCBody0+c2NhbmZsYWcsIHRpbWVvdXQpOwogCiAJbXNnLT5udW1ic3Muc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCWlmIChody0+c2NhbmZsYWcgPT0gLTEpCkBAIC0zMDksMTYgKzMwOCwxNiBAQAogCiAJbXNnLT5udW1ic3MuZGF0YSA9IGh3LT5zY2FuZmxhZzsKIAotICAgICAgICBody0+c2NhbmZsYWcgPSAwOworCWh3LT5zY2FuZmxhZyA9IDA7CiAKIAkvKiBEaXNhYmxlIHBvcnQgaWYgd2UgdGVtcG9yYXJpbHkgZW5hYmxlZCBpdC4gKi8KIAlpZiAoaXN0bXBlbmFibGUpIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2Rpc2FibGUoaHcsIDApOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJkcnZyX2Rpc2FibGUoMCkgZmFpbGVkLiAiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHJ2cl9kaXNhYmxlKDApIGZhaWxlZC4gIgorCQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KQEAgLTMyNiwyNSArMzI1LDIzIEBACiAJLyogcmVzdG9yZSBvcmlnaW5hbCByb2FtaW5nIG1vZGUgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAogCQkJCQkgIHJvYW1pbmdtb2RlKTsKLSAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgICAgICAgICAgICAgV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgInNldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KIAotICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCXJlc3VsdCA9IDA7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAotIGV4aXQ6CitleGl0OgogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfc2Nhbl9yZXN1bHRzCiAqCkBAIC0zNjcsMzIgKzM2NCwzMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWludCAJCQlyZXN1bHQgPSAwOwotICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgICAgICAgKnJlcTsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IHJlc3VsdCA9IDA7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICpyZXE7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90ICppdGVtID0gTlVMTDsKIAogCWludCBjb3VudDsKIAotCURCRkVOVEVSOwotCi0gICAgICAgIHJlcSA9IChwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKikgbXNncDsKKwlyZXEgPSAocDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICopIG1zZ3A7CiAKIAlyZXEtPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCi0JaWYgKCEgaHctPnNjYW5yZXN1bHRzKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJkb3QxMXJlcV9zY2FuX3Jlc3VsdHMgY2FuIG9ubHkgYmUgdXNlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgZG90MTFyZXFfc2Nhbi5cbiIpOworCWlmICghaHctPnNjYW5yZXN1bHRzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3QxMXJlcV9zY2FuLlxuIik7CiAJCXJlc3VsdCA9IDI7CiAJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJZ290byBleGl0OwogCX0KIAotICAgICAgICBjb3VudCA9IChody0+c2NhbnJlc3VsdHMtPmZyYW1lbGVuIC0gMykgLyAzMjsKLQlpZiAoY291bnQgPiAzMikgIGNvdW50ID0gMzI7CisJY291bnQgPSAoaHctPnNjYW5yZXN1bHRzLT5mcmFtZWxlbiAtIDMpIC8gMzI7CisJaWYgKGNvdW50ID4gMzIpCisJCWNvdW50ID0gMzI7CiAKIAlpZiAocmVxLT5ic3NpbmRleC5kYXRhID49IGNvdW50KSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDAsICJyZXF1ZXN0ZWQgaW5kZXggKCVkKSBvdXQgb2YgcmFuZ2UgKCVkKVxuIiwKLQkJCQlyZXEtPmJzc2luZGV4LmRhdGEsIGNvdW50KTsKKwkJcHJfZGVidWcoInJlcXVlc3RlZCBpbmRleCAoJWQpIG91dCBvZiByYW5nZSAoJWQpXG4iLAorCQkgICAgICAgcmVxLT5ic3NpbmRleC5kYXRhLCBjb3VudCk7CiAJCXJlc3VsdCA9IDI7CiAJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJZ290byBleGl0OwpAQCAtNDAyLDggKzM5OSw4IEBACiAJLyogc2lnbmFsIGFuZCBub2lzZSAqLwogCXJlcS0+c2lnbmFsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAlyZXEtPm5vaXNlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlyZXEtPnNpZ25hbC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPnNsKTsKLQlyZXEtPm5vaXNlLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+YW5sKTsKKwlyZXEtPnNpZ25hbC5kYXRhID0gbGUxNl90b19jcHUoaXRlbS0+c2wpOworCXJlcS0+bm9pc2UuZGF0YSA9IGxlMTZfdG9fY3B1KGl0ZW0tPmFubCk7CiAKIAkvKiBCU1NJRCAqLwogCXJlcS0+YnNzaWQuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNDEyLDEzICs0MDksMTMgQEAKIAogCS8qIFNTSUQgKi8KIAlyZXEtPnNzaWQuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCXJlcS0+c3NpZC5kYXRhLmxlbiA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5zc2lkLmxlbik7CisJcmVxLT5zc2lkLmRhdGEubGVuID0gbGUxNl90b19jcHUoaXRlbS0+c3NpZC5sZW4pOwogCW1lbWNweShyZXEtPnNzaWQuZGF0YS5kYXRhLCBpdGVtLT5zc2lkLmRhdGEsIHJlcS0+c3NpZC5kYXRhLmxlbik7CiAKIAkvKiBzdXBwb3J0ZWQgcmF0ZXMgKi8KLSAgICAgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMTAgOyBjb3VudCsrKQotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5zdXBwcmF0ZXNbY291bnRdID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMDsgY291bnQrKykKKwkJaWYgKGl0ZW0tPnN1cHByYXRlc1tjb3VudF0gPT0gMCkKKwkJCWJyZWFrOwogCiAjZGVmaW5lIFJFUUJBU0lDUkFURShOKSBcCiAJaWYgKChjb3VudCA+PSBOKSAmJiBET1QxMV9SQVRFNV9JU0JBU0lDX0dFVChpdGVtLT5zdXBwcmF0ZXNbKE4pLTFdKSkgeyBcCkBAIC00NTIsNyArNDQ5LDcgQEAKIAogCS8qIGJlYWNvbiBwZXJpb2QgKi8KIAlyZXEtPmJlYWNvbnBlcmlvZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JcmVxLT5iZWFjb25wZXJpb2QuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5iY25pbnQpOworCXJlcS0+YmVhY29ucGVyaW9kLmRhdGEgPSBsZTE2X3RvX2NwdShpdGVtLT5iY25pbnQpOwogCiAJLyogdGltZXN0YW1wcyAqLwogCXJlcS0+dGltZXN0YW1wLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTQ2MiwxNCArNDU5LDE0IEBACiAKIAkvKiBhdGltIHdpbmRvdyAqLwogCXJlcS0+aWJzc2F0aW13aW5kb3cuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCXJlcS0+aWJzc2F0aW13aW5kb3cuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5hdGltKTsKKwlyZXEtPmlic3NhdGltd2luZG93LmRhdGEgPSBsZTE2X3RvX2NwdShpdGVtLT5hdGltKTsKIAogCS8qIENoYW5uZWwgKi8KIAlyZXEtPmRzY2hhbm5lbC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JcmVxLT5kc2NoYW5uZWwuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5jaGlkKTsKKwlyZXEtPmRzY2hhbm5lbC5kYXRhID0gbGUxNl90b19jcHUoaXRlbS0+Y2hpZCk7CiAKIAkvKiBjYXBpbmZvIGJpdHMgKi8KLQljb3VudCA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5jYXBpbmZvKTsKKwljb3VudCA9IGxlMTZfdG9fY3B1KGl0ZW0tPmNhcGluZm8pOwogCiAJLyogcHJpdmFjeSBmbGFnICovCiAJcmVxLT5wcml2YWN5LnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTQ4NCwyNSArNDgxLDE0IEBACiAJcmVxLT5jZnBvbGxyZXEuZGF0YSA9IFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMUkVRKGNvdW50KTsKIAogCS8qIGJzc3R5cGUgKi8KLQlyZXEtPmJzc3R5cGUuc3RhdHVzID0gIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmJzc3R5cGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCXJlcS0+YnNzdHlwZS5kYXRhID0gKFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fRVNTKGNvdW50KSkgPwotCQlQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmUgOgotCQlQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQ7Ci0KLQkvLyBpdGVtLT5wcm9iZXJlc3BfcmF0ZQotLyoKLQlyZXEtPmZoZHdlbGx0aW1lCi0JcmVxLT5maGhvcHNldAotCXJlcS0+Zmhob3BwYXR0ZXJuCi0JcmVxLT5maGhvcGluZGV4Ci0gICAgICAgIHJlcS0+Y2ZwZHVycmVtYWluaW5nCi0qLworCSAgICBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmUgOiBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQ7CiAKIAlyZXN1bHQgPSAwOwogCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUyNywxNSArNTEzLDE0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQlpbnQgCQkJcmVzdWx0ID0gMDsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3QJKm1zZyA9IG1zZ3A7CisJaW50IHJlc3VsdCA9IDA7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3QgKm1zZyA9IG1zZ3A7CiAKLQlwODAyMTFwc3RyZF90CQkqcHN0cjsKLQl1OAkJCWJ5dGVidWZbODBdOwotCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7Ci0JdTE2CQkJd29yZDsKLQlEQkZFTlRFUjsKKwlwODAyMTFwc3RyZF90ICpwc3RyOworCXU4IGJ5dGVidWZbODBdOworCWhmYTM4NHhfYnl0ZXN0cl90ICpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QgKikgYnl0ZWJ1ZjsKKwl1MTYgd29yZDsKIAogCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKIApAQCAtNTQ3LDcgKzUzMiw3IEBACiAJaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAogCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKIAkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAotCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMCw4LDMpKSB7CisJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigwLCA4LCAzKSkgewogCQkvKiBBZC1Ib2Mgbm90IHF1aXRlIHN1cHBvcnRlZCBvbiBQcmlzbTIgKi8KIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKQEAgLTU1OSwxOCArNTQ0LDE5IEBACiAJLyoqKiBTVEFUSU9OICoqKi8KIAkvKiBTZXQgdGhlIFJFUVVJUkVEIGNvbmZpZyBpdGVtcyAqLwogCS8qIFNTSUQgKi8KLQlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSYobXNnLT5zc2lkLmRhdGEpOwogCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7Ci0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCi0JCQkJCSBieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTik7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENuZk93blNTSURcbiIpOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBDbmZPd25TU0lEXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQotCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKLQkJCQkJIGJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENuZkRlc2lyZWRTU0lEXG4iKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCQkJYnl0ZWJ1ZiwKKwkJCQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBDbmZEZXNpcmVkU1NJRFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNTgxLDg0ICs1NjcsODQgQEAKIAkvKiBiZWFjb24gcGVyaW9kICovCiAJd29yZCA9IG1zZy0+YmVhY29ucGVyaW9kLmRhdGE7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZBUEJDTmludCwgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJlYWNvbiBwZXJpb2Q9JWQuXG4iLCB3b3JkKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBiZWFjb24gcGVyaW9kPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGRzY2hhbm5lbCAqLwogCXdvcmQgPSBtc2ctPmRzY2hhbm5lbC5kYXRhOwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGNoYW5uZWw9JWQuXG4iLCB3b3JkKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBjaGFubmVsPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAkvKiBCYXNpYyByYXRlcyAqLwogCXdvcmQgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMS5kYXRhKTsKLQlpZiAoIG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCWlmIChtc2ctPmJhc2ljcmF0ZTIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMi5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPmJhc2ljcmF0ZTMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPmJhc2ljcmF0ZTMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMy5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPmJhc2ljcmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPmJhc2ljcmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNC5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPmJhc2ljcmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPmJhc2ljcmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNS5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPmJhc2ljcmF0ZTYuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPmJhc2ljcmF0ZTYuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNi5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPmJhc2ljcmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPmJhc2ljcmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNy5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPmJhc2ljcmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPmJhc2ljcmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlOC5kYXRhKTsKLQl9CisKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIHdvcmQpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBiYXNpY3JhdGVzPSVkLlxuIiwgd29yZCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgYmFzaWNyYXRlcz0lZC5cbiIsIHdvcmQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBPcGVyYXRpb25hbCByYXRlcyAoc3VwcHJhdGVzIGFuZCB0eHJhdGVjb250cm9sKSAqLwogCXdvcmQgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMS5kYXRhKTsKLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTYuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTYuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5kYXRhKTsKLQl9Ci0JaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKworCWlmIChtc2ctPm9wZXJhdGlvbmFscmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKIAkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5kYXRhKTsKLQl9CisKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlNVUFBSQVRFUywgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHN1cHByYXRlcz0lZC5cbiIsIHdvcmQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IHN1cHByYXRlcz0lZC5cbiIsIHdvcmQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIHdvcmQpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgdHhyYXRlcz0lZC5cbiIsIHdvcmQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBTZXQgdGhlIG1hY21vZGUgc28gdGhlIGZyYW1lIHNldHVwIGNvZGUga25vd3Mgd2hhdCB0byBkbyAqLwotCWlmICggbXNnLT5ic3N0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9ic3N0eXBlX2luZGVwZW5kZW50ICkgeworCWlmIChtc2ctPmJzc3R5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQpIHsKIAkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9JQlNTX1NUQTsKIAkJLyogbGV0cyBleHRlbmQgdGhlIGRhdGEgbGVuZ3RoIGEgYml0ICovCiAJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwgMjMwNCk7CkBAIC02NjYsOCArNjUyLDggQEAKIAogCS8qIEVuYWJsZSB0aGUgUG9ydCAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFbmFibGUgbWFjcG9ydCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNjc1LDEzICs2NjEsMTIgQEAKIAogCWdvdG8gZG9uZTsKIGZhaWxlZDoKLQlXTEFOX0xPR19ERUJVRygxLCAiRmFpbGVkIHRvIHNldCBhIGNvbmZpZyBvcHRpb24sIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwlwcl9kZWJ1ZygiRmFpbGVkIHRvIHNldCBhIGNvbmZpZyBvcHRpb24sIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CiAKIGRvbmU6CiAJcmVzdWx0ID0gMDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzA1LDQwICs2OTAsMzUgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QJKm1zZyA9IG1zZ3A7Ci0JaW50CQkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfcmVhZHBkYV90ICptc2cgPSBtc2dwOworCWludCByZXN1bHQ7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgY29sbGVjdGluZyB0aGUgUERBIHdoZW4gaW4gdGhlIEZXTE9BRAogCSAqIHN0YXRlLgogCSAqLwogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiUERBIG1heSBvbmx5IGJlIHJlYWQgIgotCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiUERBIG1heSBvbmx5IGJlIHJlYWQgIiAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCX0gZWxzZSB7CiAJCS8qICBDYWxsIGRydnJfcmVhZHBkYSgpLCBpdCBoYW5kbGVzIHRoZSBhdXhwb3J0IGVuYWJsZQogCQkgKiAgYW5kIHZhbGlkYXRpbmcgdGhlIHJldHVybmVkIFBEQS4KIAkJICovCi0JCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKAotCQkJaHcsCi0JCQltc2ctPnBkYS5kYXRhLAotCQkJSEZBMzg0eF9QREFfTEVOX01BWCk7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGh3LAorCQkJCQkgICAgICBtc2ctPnBkYS5kYXRhLAorCQkJCQkgICAgICBIRkEzODR4X1BEQV9MRU5fTUFYKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJImhmYTM4NHhfZHJ2cl9yZWFkcGRhKCkgZmFpbGVkLCAiCi0JCQkJInJlc3VsdD0lZFxuIiwKLQkJCQlyZXN1bHQpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImhmYTM4NHhfZHJ2cl9yZWFkcGRhKCkgZmFpbGVkLCAiCisJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9Ci0JCQkJUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQkJREJGRVhJVDsKKwkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQltc2ctPnBkYS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC03NDYsNyArNzI2LDYgQEAKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC03NzcsMzAgKzc1NiwyOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90CSptc2cgPSBtc2dwOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90ICptc2cgPSBtc2dwOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJyYW1kbF9zdGF0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgotCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicmFtZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCURCRkVYSVQ7CiAJCXJldHVybiAwOwogCX0KIAogCS8qCi0JKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCi0JKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KLQkqLworCSAqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkgKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KKwkgKi8KIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JaWYgICggbXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgKSB7Ci0JCWlmICggaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShodywgbXNnLT5leGVhZGRyLmRhdGEpICkgewotCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwlpZiAobXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpIHsKKwkJaWYgKGhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaHcsIG1zZy0+ZXhlYWRkci5kYXRhKSkgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQl9IGVsc2UgewogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJfQpAQCAtODA5LDExICs3ODcsOSBAQAogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfcmFtZGxfd3JpdGUKICoKQEAgLTgzNiw0NSArODEyLDQxIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlX3QJKm1zZyA9IG1zZ3A7Ci0JdTMyCQkJYWRkcjsKLQl1MzIJCQlsZW47Ci0JdTgJCQkqYnVmOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90ICptc2cgPSBtc2dwOworCXUzMiBhZGRyOworCXUzMiBsZW47CisJdTggKmJ1ZjsKIAogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkicmFtZGxfd3JpdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKLQkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInJhbWRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCSAgICAgICAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQlEQkZFWElUOwogCQlyZXR1cm4gMDsKIAl9CiAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KLQlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKLQkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJaWYgKG1zZy0+bGVuLmRhdGEgPiBzaXplb2YobXNnLT5kYXRhLmRhdGEpKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQorCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGNhbGwgdGhlIGhmYTM4NHggZnVuY3Rpb24gdG8gZG8gdGhlIHdyaXRlICovCiAJYWRkciA9IG1zZy0+YWRkci5kYXRhOwogCWxlbiA9IG1zZy0+bGVuLmRhdGE7CiAJYnVmID0gbXNnLT5kYXRhLmRhdGE7Ci0JaWYgKCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaHcsIGFkZHIsIGJ1ZiwgbGVuKSApIHsKKwlpZiAoaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGh3LCBhZGRyLCBidWYsIGxlbikpCiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CiAKLQl9CiAJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZQogKgpAQCAtOTAyLDMxICs4NzQsMzAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaW50CQkJcmVzdWx0ID0gMDsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdAkqbXNnID0gbXNncDsKLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90ICptc2cgPSBtc2dwOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJmbGFzaGRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJmbGFzaGRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCSAgICAgICAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQlEQkZFWElUOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgotCSoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAotCSoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCi0JKi8KKwkgKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCisJICoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCisJICovCiAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCWlmICAoIG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlICkgewotCQlpZiAoIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShodykgKSB7Ci0JCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCWlmIChtc2ctPmVuYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgeworCQlpZiAoaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGh3KSkgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQl9IGVsc2UgewogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJfQpAQCAtOTQzLDE5ICs5MTQsMTcgQEAKIAkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CiAJCXJlc3VsdCA9IHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQpOwogCQlpZiAocmVzdWx0ICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigicHJpc20yc3RhX2lmc3RhdGUoZndsb2FkKSBmYWlsZWQsIgotCQkJCSJQODAyMTFFTlVNX3Jlc3VsdGNvZGU9JWRcbiIsIHJlc3VsdCk7CisJCQlwcmludGsoS0VSTl9FUlIgInByaXNtMnN0YV9pZnN0YXRlKGZ3bG9hZCkgZmFpbGVkLCIKKwkJCSAgICAgICAiUDgwMjExRU5VTV9yZXN1bHRjb2RlPSVkXG4iLCByZXN1bHQpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJcmVzdWx0ID0gLTE7CiAJCX0KIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUKICoKQEAgLTk3Niw0NyArOTQ1LDQzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90CSptc2cgPSBtc2dwOwotCXUzMgkJCWFkZHI7Ci0JdTMyCQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90ICptc2cgPSBtc2dwOworCXUzMiBhZGRyOworCXUzMiBsZW47CisJdTggKmJ1ZjsKIAogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiZmxhc2hkbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgotCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmxhc2hkbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkgICAgICAgImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJREJGRVhJVDsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyoKLQkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKLQkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgotCSovCisJICoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAorCSAqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSAqLwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkvKiBmaXJzdCB2YWxpZGF0ZSB0aGUgbGVuZ3RoICovCi0JaWYgICggbXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkgKSB7CisJaWYgKG1zZy0+bGVuLmRhdGEgPiBzaXplb2YobXNnLT5kYXRhLmRhdGEpKSB7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQotCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CiAJCXJldHVybiAwOwogCX0KIAkvKiBjYWxsIHRoZSBoZmEzODR4IGZ1bmN0aW9uIHRvIGRvIHRoZSB3cml0ZSAqLwogCWFkZHIgPSBtc2ctPmFkZHIuZGF0YTsKIAlsZW4gPSBtc2ctPmxlbi5kYXRhOwogCWJ1ZiA9IG1zZy0+ZGF0YS5kYXRhOwotCWlmICggaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaHcsIGFkZHIsIGJ1ZiwgbGVuKSApIHsKKwlpZiAoaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaHcsIGFkZHIsIGJ1ZiwgbGVuKSkKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKIAotCX0KIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0MSwxNSArMTAwNiwxNCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaGZhMzg0eF90CQkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlpbnQgCQkJcmVzdWx0ID0gMDsKLQl1MTYJCQlyZWc7Ci0JdTE2CQkJcG9ydF90eXBlOwotCXA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdAkqbXNnID0gbXNncDsKLQlwODAyMTFwc3RyZF90CQkqcHN0cjsKLQl1OAkJCWJ5dGVidWZbMjU2XTsKLQloZmEzODR4X2J5dGVzdHJfdAkqcDJieXRlc3RyID0gKGhmYTM4NHhfYnl0ZXN0cl90KilieXRlYnVmOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCWludCByZXN1bHQgPSAwOworCXUxNiByZWc7CisJdTE2IHBvcnRfdHlwZTsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgKm1zZyA9IG1zZ3A7CisJcDgwMjExcHN0cmRfdCAqcHN0cjsKKwl1OCBieXRlYnVmWzI1Nl07CisJaGZhMzg0eF9ieXRlc3RyX3QgKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCAqKSBieXRlYnVmOwogCiAJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOwogCkBAIC0xMDY0LDM5ICsxMDI4LDIxIEBACiAJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCAweDAwMGYpOwogCiAJLyogU2V0IHRoZSBhdXRoIHR5cGUgKi8KLQlpZiAoIG1zZy0+YXV0aHR5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5ICkgeworCWlmIChtc2ctPmF1dGh0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleSkKIAkJcmVnID0gSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9TSEFSRURLRVk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTTsKLQl9CisKIAloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCByZWcpOwogCiAJLyogU2V0IHRoZSBzc2lkICovCiAJbWVtc2V0KGJ5dGVidWYsIDAsIDI1Nik7Ci0JcHN0ciA9IChwODAyMTFwc3RyZF90KikmKG1zZy0+c3NpZC5kYXRhKTsKKwlwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikmKG1zZy0+c3NpZC5kYXRhKTsKIAlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOwotICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKAotCQkJaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAotCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKLSNpZiAwCi0JLyogd2UgY2FuIHVzZSB0aGUgbmV3LWZhbmdsZWQgYXV0by11bmtub3duIG1vZGUgaWYgdGhlIGZpcm13YXJlCi0JICAgaXMgMS4zLjMgb3IgbmV3ZXIgKi8KLQlpZiAoSEZBMzg0eF9GSVJNQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLQkJCQkgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKLQkJCQkgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA+PQotCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSwzLDMpKSB7Ci0JCS8qIFNldCB1cCB0aGUgSUJTUyBvcHRpb25zICovCi0JCXJlZyA9ICBIRkEzODR4X0NSRUFURUlCU1NfSk9JTkVTU19KT0lOQ1JFQVRFSUJTUzsKLQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DUkVBVEVJQlNTLCByZWcpOwotCi0JCS8qIFNldCB0aGUgUG9ydFR5cGUgKi8KLQkJcG9ydF90eXBlID0gSEZBMzg0eF9QT1JUVFlQRV9JQlNTOwotCX0gZWxzZSB7Ci0JCXBvcnRfdHlwZSA9IEhGQTM4NHhfUE9SVFRZUEVfQlNTOwotCX0KLSNlbHNlCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQkJCWJ5dGVidWYsCisJCQkJCUhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CiAJcG9ydF90eXBlID0gSEZBMzg0eF9QT1JUVFlQRV9CU1M7Ci0jZW5kaWYKIAkvKiBTZXQgdGhlIFBvcnRUeXBlICovCiAJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgcG9ydF90eXBlKTsKIApAQCAtMTEwNywxMSArMTA1Myw5IEBACiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJtZ210X3dsYW5zbmlmZgogKgpAQCAtMTEzMywzOCArMTA3NywzNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWludCAJCQlyZXN1bHQgPSAwOwotCXA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3QJKm1zZyA9IG1zZ3A7CisJaW50IHJlc3VsdCA9IDA7CisJcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmZfdCAqbXNnID0gbXNncDsKIAotCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JdTE2CQkJd29yZDsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXUxNiB3b3JkOwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlzd2l0Y2ggKG1zZy0+ZW5hYmxlLmRhdGEpCi0JeworCXN3aXRjaCAobXNnLT5lbmFibGUuZGF0YSkgewogCWNhc2UgUDgwMjExRU5VTV90cnV0aF9mYWxzZToKIAkJLyogQ29uZmlybSB0aGF0IHdlJ3JlIGluIG1vbml0b3IgbW9kZSAqLwotCQlpZiAoIHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIgKSB7Ci0JCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJCXJlc3VsdCA9IDA7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfbW9uaXRvcihodywgSEZBMzg0eF9NT05JVE9SX0RJU0FCTEUpOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJImZhaWxlZCB0byBkaXNhYmxlIG1vbml0b3IgbW9kZSwgcmVzdWx0PSVkXG4iLAotCQkJCXJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImZhaWxlZCB0byBkaXNhYmxlIG1vbml0b3IgbW9kZSwgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCQkvKiBEaXNhYmxlIHBvcnQgMCAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSJmYWlsZWQgdG8gZGlzYWJsZSBwb3J0IDAgYWZ0ZXIgc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKLQkJCXJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgMCBhZnRlciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCQkvKiBDbGVhciB0aGUgZHJpdmVyIHN0YXRlICovCkBAIC0xMTcyLDMyICsxMTE0LDM0IEBACiAKIAkJLyogUmVzdG9yZSB0aGUgd2VwZmxhZ3MgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCUhGQTM4NHhfUklEX0NORldFUEZMQUdTLAotCQkJCWh3LT5wcmVzbmlmZl93ZXBmbGFncyk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSJmYWlsZWQgdG8gcmVzdG9yZSB3ZXBmbGFncz0weCUwNHgsIHJlc3VsdD0lZFxuIiwKLQkJCWh3LT5wcmVzbmlmZl93ZXBmbGFncywKLQkJCXJlc3VsdCk7CisJCQkJCQkgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLAorCQkJCQkJICBody0+cHJlc25pZmZfd2VwZmxhZ3MpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdG9yZSB3ZXBmbGFncz0weCUwNHgsIHJlc3VsdD0lZFxuIiwKKwkJCSAgICAgICBody0+cHJlc25pZmZfd2VwZmxhZ3MsIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCiAJCS8qIFNldCB0aGUgcG9ydCB0byBpdHMgcHJpb3IgdHlwZSBhbmQgZW5hYmxlIChpZiBuZWNlc3NhcnkpICovCi0JCWlmIChody0+cHJlc25pZmZfcG9ydF90eXBlICE9IDAgKSB7CisJCWlmIChody0+cHJlc25pZmZfcG9ydF90eXBlICE9IDApIHsKIAkJCXdvcmQgPSBody0+cHJlc25pZmZfcG9ydF90eXBlOwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCB3b3JkKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJImZhaWxlZCB0byByZXN0b3JlIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsCi0JCQkJcmVzdWx0KTsKKwkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCQkJCSAgd29yZCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImZhaWxlZCB0byByZXN0b3JlIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsCisJCQkJICAgICAgIHJlc3VsdCk7CiAJCQkJZ290byBmYWlsZWQ7CiAJCQl9CiAKIAkJCS8qIEVuYWJsZSB0aGUgcG9ydCAqLwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7Ci0JCQlpZiAoIHJlc3VsdCApIHsKLQkJCQlXTEFOX0xPR19ERUJVRygxLCAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IHRvIHByZXNuaWZmIHNldHRpbmcsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IHRvIHByZXNuaWZmIHNldHRpbmcsIHJlc3VsdD0lZFxuIiwKKwkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTEyMDUsNDYgKzExNDksNTIgQEAKIAogCQl9CiAKLQkJV0xBTl9MT0dfSU5GTygibW9uaXRvciBtb2RlIGRpc2FibGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibW9uaXRvciBtb2RlIGRpc2FibGVkXG4iKTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJcmVzdWx0ID0gMDsKIAkJZ290byBleGl0OwogCQlicmVhazsKIAljYXNlIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZToKIAkJLyogRGlzYWJsZSB0aGUgcG9ydCAoaWYgZW5hYmxlZCksIG9ubHkgY2hlY2sgUG9ydCAwICovCi0JCWlmICggaHctPnBvcnRfZW5hYmxlZFswXSkgeworCQlpZiAoaHctPnBvcnRfZW5hYmxlZFswXSkgewogCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpIHsKIAkJCQkvKiBTYXZlIG1hY3BvcnQgMCBzdGF0ZSAqLwogCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKIAkJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKLQkJCQkJCQkJICAmKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUpKTsKLQkJCQlpZiAoIHJlc3VsdCApIHsKLQkJCQkJV0xBTl9MT0dfREVCVUcoMSwiZmFpbGVkIHRvIHJlYWQgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCQkJCQkJICAmKGh3LT4KKwkJCQkJCQkJICAgIHByZXNuaWZmX3BvcnRfdHlwZSkpOworCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gcmVhZCBwb3J0dHlwZSwgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQkJZ290byBmYWlsZWQ7CiAJCQkJfQogCQkJCS8qIFNhdmUgdGhlIHdlcGZsYWdzIHN0YXRlICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAogCQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLAotCQkJCQkJCQkgICYoaHctPnByZXNuaWZmX3dlcGZsYWdzKSk7Ci0JCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJCVdMQU5fTE9HX0RFQlVHKDEsImZhaWxlZCB0byByZWFkIHdlcGZsYWdzLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJCQkJCSAgJihody0+CisJCQkJCQkJCSAgICBwcmVzbmlmZl93ZXBmbGFncykpOworCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gcmVhZCB3ZXBmbGFncywgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQkJZ290byBmYWlsZWQ7CiAJCQkJfQogCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKIAkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc3RhcnQoaHcpOwotCQkJCWlmICggcmVzdWx0ICkgewotCQkJCQlXTEFOX0xPR19ERUJVRygxLAotCQkJCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdGFydCB0aGUgY2FyZCBmb3Igc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKLQkJCQkJCSAgICAgICByZXN1bHQpOworCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdGFydCB0aGUgY2FyZCBmb3Igc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKKwkJCQkJICAgICAgIHJlc3VsdCk7CiAJCQkJCWdvdG8gZmFpbGVkOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJLyogRGlzYWJsZSB0aGUgcG9ydCAqLwogCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKLQkJCQlpZiAoIHJlc3VsdCApIHsKLQkJCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAotCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byBlbmFibGUgcG9ydCBmb3Igc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKKwkJCQkJICAgICAgIHJlc3VsdCk7CiAJCQkJCWdvdG8gZmFpbGVkOwogCQkJCX0KIAkJCX0KQEAgLTEyNTUsMTQgKzEyMDUsMTQgQEAKIAkJLyogU2V0IHRoZSBjaGFubmVsIHdlIHdpc2ggdG8gc25pZmYgICovCiAJCXdvcmQgPSBtc2ctPmNoYW5uZWwuZGF0YTsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCQkJICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKLQkJaHctPnNuaWZmX2NoYW5uZWw9d29yZDsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwKKwkJCQkJCSAgd29yZCk7CisJCWh3LT5zbmlmZl9jaGFubmVsID0gd29yZDsKIAotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IGNoYW5uZWwgJWQsIHJlc3VsdD0lZFxuIiwKLQkJCQkJICAgICAgIHdvcmQsCi0JCQkJICAgICAgIHJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImZhaWxlZCB0byBzZXQgY2hhbm5lbCAlZCwgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIHdvcmQsIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCkBAIC0xMjcxLDM5ICsxMjIxLDQ2IEBACiAJCQkvKiBTZXQgdGhlIHBvcnQgdHlwZSB0byBwSWJzcyAqLwogCQkJd29yZCA9IEhGQTM4NHhfUE9SVFRZUEVfUFNVRURPSUJTUzsKIAkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKLQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCB3b3JkKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCSAgICAgICAiZmFpbGVkIHRvIHNldCBwb3J0dHlwZSAlZCwgcmVzdWx0PSVkXG4iLAotCQkJCQkgICAgICAgd29yZCwKLQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKKwkJCQkJCQkgIHdvcmQpOworCQkJaWYgKHJlc3VsdCkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHBvcnR0eXBlICVkLCByZXN1bHQ9JWRcbiIsCisJCQkJICAgICAgIHdvcmQsIHJlc3VsdCk7CiAJCQkJZ290byBmYWlsZWQ7CiAJCQl9Ci0JCQlpZiAoKG1zZy0+a2VlcHdlcGZsYWdzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spICYmIChtc2ctPmtlZXB3ZXBmbGFncy5kYXRhICE9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJCWlmICgobXNnLT5rZWVwd2VwZmxhZ3Muc3RhdHVzID09CisJCQkgICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKKwkJCSAgICAmJiAobXNnLT5rZWVwd2VwZmxhZ3MuZGF0YSAhPQorCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKIAkJCQkvKiBTZXQgdGhlIHdlcGZsYWdzIGZvciBubyBkZWNyeXB0aW9uICovCiAJCQkJd29yZCA9IEhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUIHwKLQkJCQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQ7Ci0JCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgd29yZCk7CisJCQkJICAgIEhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUOworCQkJCXJlc3VsdCA9CisJCQkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJCQkgICAgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLAorCQkJCQkJCSAgICAgd29yZCk7CiAJCQl9CiAKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCSAgICAgICAiZmFpbGVkIHRvIHNldCB3ZXBmbGFncz0weCUwNHgsIHJlc3VsdD0lZFxuIiwKLQkJCQkJICAgICAgIHdvcmQsCi0JCQkJCSAgICAgICByZXN1bHQpOworCQkJaWYgKHJlc3VsdCkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAorCQkJCSAgICAgICB3b3JkLCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCQl9CiAKIAkJLyogRG8gd2Ugd2FudCB0byBzdHJpcCB0aGUgRkNTIGluIG1vbml0b3IgbW9kZT8gKi8KLQkJaWYgKChtc2ctPnN0cmlwZmNzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spICYmIChtc2ctPnN0cmlwZmNzLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQlpZiAoKG1zZy0+c3RyaXBmY3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKKwkJICAgICYmIChtc2ctPnN0cmlwZmNzLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgewogCQkJaHctPnNuaWZmX2ZjcyA9IDA7CiAJCX0gZWxzZSB7CiAJCQlody0+c25pZmZfZmNzID0gMTsKIAkJfQogCiAJCS8qIERvIHdlIHdhbnQgdG8gdHJ1bmNhdGUgdGhlIHBhY2tldHM/ICovCi0JCWlmIChtc2ctPnBhY2tldF90cnVuYy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSB7CisJCWlmIChtc2ctPnBhY2tldF90cnVuYy5zdGF0dXMgPT0KKwkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgewogCQkJaHctPnNuaWZmX3RydW5jYXRlID0gbXNnLT5wYWNrZXRfdHJ1bmMuZGF0YTsKIAkJfSBlbHNlIHsKIAkJCWh3LT5zbmlmZl90cnVuY2F0ZSA9IDA7CkBAIC0xMzExLDMxICsxMjY4LDM1IEBACiAKIAkJLyogRW5hYmxlIHRoZSBwb3J0ICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAotCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX21vbml0b3IoaHcsIEhGQTM4NHhfTU9OSVRPUl9FTkFCTEUpOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkiZmFpbGVkIHRvIGVuYWJsZSBtb25pdG9yIG1vZGUsIHJlc3VsdD0lZFxuIiwKLQkJCXJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImZhaWxlZCB0byBlbmFibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKLQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpIHsKLQkJCVdMQU5fTE9HX0lORk8oIm1vbml0b3IgbW9kZSBlbmFibGVkXG4iKTsKLQkJfQorCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikKKwkJCXByaW50ayhLRVJOX0lORk8gIm1vbml0b3IgbW9kZSBlbmFibGVkXG4iKTsKIAogCQkvKiBTZXQgdGhlIGRyaXZlciBzdGF0ZSAqLwogCQkvKiBEbyB3ZSB3YW50IHRoZSBwcmlzbTIgaGVhZGVyPyAqLwotCQlpZiAoKG1zZy0+cHJpc21oZWFkZXIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+cHJpc21oZWFkZXIuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CisJCWlmICgobXNnLT5wcmlzbWhlYWRlci5zdGF0dXMgPT0KKwkJICAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spCisJCSAgICAmJiAobXNnLT5wcmlzbWhlYWRlci5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKIAkJCWh3LT5zbmlmZmhkciA9IDA7CiAJCQl3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNOwotCQl9IGVsc2UgaWYgKChtc2ctPndsYW5oZWFkZXIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+d2xhbmhlYWRlci5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJfSBlbHNlCisJCSAgICBpZiAoKG1zZy0+d2xhbmhlYWRlci5zdGF0dXMgPT0KKwkJCSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spCisJCQkmJiAobXNnLT53bGFuaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgewogCQkJaHctPnNuaWZmaGRyID0gMTsKIAkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007CiAJCX0gZWxzZSB7CkBAIC0xMzU3LDcgKzEzMTgsNSBAQAogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CiAJcmVzdWx0ID0gMDsKIGV4aXQ6Ci0KLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKaW5kZXggY2FmODA4ZC4uMDdlZWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaApAQCAtNjAsNDMgKzYwLDE2IEBACiAjaWZuZGVmIF9QUklTTTJNR01UX0gKICNkZWZpbmUgX1BSSVNNMk1HTVRfSAogCitleHRlcm4gaW50IHByaXNtMl9yZXNldF9ob2xkdGltZTsKK2V4dGVybiBpbnQgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWU7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordTMyIHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGlmc3RhdGUpOwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIFR5cGVzIGFuZCB0aGVpciByZWxhdGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBTdGF0aWMgdmFyaWFibGUgZXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gaW50CXByaXNtMl9kZWJ1ZzsKLWV4dGVybiBpbnQgICAgICBwcmlzbTJfcmVzZXRfaG9sZHRpbWU7Ci1leHRlcm4gaW50ICAgICAgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWU7Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gRnVuY3Rpb24gRGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXUzMgotcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgaWZzdGF0ZSk7Ci0KLXZvaWQKLXByaXNtMnN0YV9ldl9kdGltKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci12b2lkCi1wcmlzbTJzdGFfZXZfaW5mZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotdm9pZAotcHJpc20yc3RhX2V2X2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci12b2lkCi1wcmlzbTJzdGFfZXZfdHhleGMod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MTYgc3RhdHVzKTsKLXZvaWQKLXByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwotdm9pZAotcHJpc20yc3RhX2V2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkCi1wcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQgcHJpc20yc3RhX2V2X2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Cit2b2lkIHByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwordm9pZCBwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MTYgc3RhdHVzKTsKK3ZvaWQgcHJpc20yc3RhX2V2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogCiBpbnQgcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CiBpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CkBAIC0xMjIsMzQgKzk1LDE2IEBACiB2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKIHZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwogCi0vKiBpbnRlZ2VyIGNvbnZlcnNpb24gZnVuY3Rpb25zICovCi12b2lkIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh1MTYgKnByaXNtMmludCwgdTMyICp3bGFuaW50KTsKLXZvaWQgcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHUxNiAqcHJpc20yaW50LCB1MzIgKndsYW5pbnQpOwotCi0vKiBlbnVtZXJhdGVkIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KLXZvaWQgcHJpc20ybWdtdF9wcmlzbTJlbnVtMnA4MDIxMWVudW0odTE2ICpwcmlzbTJlbnVtLCB1MzIgKndsYW5lbnVtLCB1MTYgcmlkKTsKLXZvaWQgcHJpc20ybWdtdF9wODAyMTFlbnVtMnByaXNtMmVudW0odTE2ICpwcmlzbTJlbnVtLCB1MzIgKndsYW5lbnVtLCB1MTYgcmlkKTsKLQotLyogZnVuY3Rpb25zIHRvIGNvbnZlcnQgYSBiaXQgYXJlYSB0by9mcm9tIGFuIE9wZXJhdGlvbmFsIFJhdGUgU2V0ICovCi12b2lkIHByaXNtMm1nbXRfZ2V0X29wcmF0ZXNldCh1MTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwotdm9pZCBwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQodTE2ICpyYXRlLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKLQogLyogZnVuY3Rpb25zIHRvIGNvbnZlcnQgR3JvdXAgQWRkcmVzc2VzICovCi12b2lkIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIodTMyIGRpZCwKLQlwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYgKTsKK3ZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcih1MzIgZGlkLCBwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYpOwogaW50IHByaXNtMm1nbXRfc2V0X2dycGFkZHIodTMyIGRpZCwKLQl1OCAqcHJpc20yYnVmLCBwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYgKTsKLWludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KCB1MzIgZGlkICk7CisJCQkgICB1OCAqcHJpc20yYnVmLCBwODAyMTFwc3RyZF90ICpwc3RyLAorCQkJICAgaGZhMzg0eF90ICpwcml2KTsKK2ludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KHUzMiBkaWQpOwogCiB2b2lkIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CiAKIHZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOwogdm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLSBJbmxpbmUgRnVuY3Rpb24gRGVmaW5pdGlvbnMgKGlmIHN1cHBvcnRlZCkgLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYwppbmRleCA1MzljNDQ3Li41YTZiYTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYwpAQCAtNTAsMTIgKzUwLDcgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLSNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC02MywxMyArNTgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogUHJvamVjdCBJbmNsdWRlcyAqLworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKQEAgLTgyLDE5NiArNzUsMTY5IEBACiAjaW5jbHVkZSAiaGZhMzg0eC5oIgogI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLworI2RlZmluZSBNSUJfVE1QX01BWExFTiAgICAyMDAJLyogTWF4IGxlbmd0aCBvZiBSSUQgcmVjb3JkIChpbiBieXRlcykuICovCiAKLSNkZWZpbmUgTUlCX1RNUF9NQVhMRU4gICAgMjAwICAgIC8qIE1heCBsZW5ndGggb2YgUklEIHJlY29yZCAoaW4gYnl0ZXMpLiAqLworI2RlZmluZSAgRl9TVEEgICAgICAgIDB4MQkvKiBNSUIgaXMgc3VwcG9ydGVkIG9uIHN0YXRpb25zLiAqLworI2RlZmluZSAgRl9SRUFEICAgICAgIDB4MgkvKiBNSUIgbWF5IGJlIHJlYWQuICovCisjZGVmaW5lICBGX1dSSVRFICAgICAgMHg0CS8qIE1JQiBtYXkgYmUgd3JpdHRlbi4gKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFR5cGVzICovCi0KLSNkZWZpbmUgIEZfU1RBICAgICAgICAweDEgICAgICAgIC8qIE1JQiBpcyBzdXBwb3J0ZWQgb24gc3RhdGlvbnMuICovCi0jZGVmaW5lICBGX1JFQUQgICAgICAgMHgyICAgICAgICAvKiBNSUIgbWF5IGJlIHJlYWQuICovCi0jZGVmaW5lICBGX1dSSVRFICAgICAgMHg0ICAgICAgICAvKiBNSUIgbWF5IGJlIHdyaXR0ZW4uICovCi0KLXR5cGVkZWYgc3RydWN0IG1pYnJlYwotewotICAgIHUzMiAgIGRpZDsKLSAgICB1MTYgICBmbGFnOwotICAgIHUxNiAgIHBhcm0xOwotICAgIHUxNiAgIHBhcm0yOwotICAgIHUxNiAgIHBhcm0zOwotICAgIGludCAgICAgICgqZnVuYykoc3RydWN0IG1pYnJlYyAgICAgICAgICAgICAgICAqbWliLAotICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLSAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi0gICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLSAgICAgICAgICAgICAgICAgICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOwordHlwZWRlZiBzdHJ1Y3QgbWlicmVjIHsKKwl1MzIgZGlkOworCXUxNiBmbGFnOworCXUxNiBwYXJtMTsKKwl1MTYgcGFybTI7CisJdTE2IHBhcm0zOworCWludCAoKmZ1bmMpIChzdHJ1Y3QgbWlicmVjICptaWIsCisJCSAgICAgaW50IGlzZ2V0LAorCQkgICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJICAgICBoZmEzODR4X3QgKmh3LAorCQkgICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKIH0gbWlicmVjX3Q7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIobWlicmVjX3QgKm1pYiwKKwkJCQkgICBpbnQgaXNnZXQsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIobWlicmVjX3QgKm1pYiwKKwkJCSAgICBpbnQgaXNnZXQsCisJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJICAgIGhmYTM4NHhfdCAqaHcsCisJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl9mbGFnKG1pYnJlY190ICptaWIsCisJCQkgIGludCBpc2dldCwKKwkJCSAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJICBoZmEzODR4X3QgKmh3LAorCQkJICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KG1pYnJlY190ICptaWIsCisJCQkJICAgaW50IGlzZ2V0LAorCQkJCSAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBoZmEzODR4X3QgKmh3LAorCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQobWlicmVjX3QgKm1pYiwKKwkJCQkgICAgaW50IGlzZ2V0LAorCQkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQobWlicmVjX3QgKm1pYiwKKwkJCQkJaW50IGlzZ2V0LAorCQkJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfdCAqaHcsCisJCQkJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQl2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZChtaWJyZWNfdCAqbWliLAorCQkJCQkgICAgaW50IGlzZ2V0LAorCQkJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQkgICAgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7Ci0KLXN0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYobWlicmVjX3QgKm1pYiwKKwkJCSAgaW50IGlzZ2V0LAorCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgIGhmYTM4NHhfdCAqaHcsCisJCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKIAogc3RhdGljIG1pYnJlY190IG1pYnRhYltdID0gewogCi0gICAgLyogZG90MTFzbXQgTUlCJ3MgKi8KLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MCwKLSAgICAgICAgICBGX1NUQSB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTAsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MSwKLSAgICAgICAgICBGX1NUQSB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTEsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiwKLSAgICAgICAgICBGX1NUQSB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MywKLSAgICAgICAgICBGX1NUQSB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQgfSwKLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWUlELCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERSwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkIH0sCisJLyogZG90MTFzbXQgTUlCJ3MgKi8KKwl7RElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwLAorCSBGX1NUQSB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkwLCAwLCAwLAorCSBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleX0sCisJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MSwKKwkgRl9TVEEgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMSwgMCwgMCwKKwkgcHJpc20ybWliX3dlcGRlZmF1bHRrZXl9LAorCXtESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTIsCisJIEZfU1RBIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIsIDAsIDAsCisJIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5fSwKKwl7RElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzLAorCSBGX1NUQSB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkzLCAwLCAwLAorCSBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleX0sCisJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorCSBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCBIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VELCAwLAorCSBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWR9LAorCXtESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWUlELCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCSBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCBIRkEzODR4X1dFUEZMQUdTX0VYQ0xVREUsIDAsCisJIHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWR9LAogCi0gICAgLyogZG90MTFtYWMgTUlCJ3MgKi8KKwkvKiBkb3QxMW1hYyBNSUIncyAqLwogCi0gICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3MsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFJfTEVOLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCi0gICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZCwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNILCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0LAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVCwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCi0gICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0LAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlULCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSCwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAotICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZSwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKLSAgICAgICAgICBIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzLAorCSBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFJfTEVOLCAwLAorCSBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cn0sCisJe0RJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAorCSBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX1JUU1RIUkVTSCwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCisJe0RJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0LAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlULCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdCwKKwkgRl9TVEEgfCBGX1JFQUQsCisJIEhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlULCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorCSBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gsIDAsIDAsCisJIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZSwKKwkgRl9TVEEgfCBGX1JFQUQsCisJIEhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAogCi0gICAgLyogZG90MTFwaHkgTUlCJ3MgKi8KKwkvKiBkb3QxMXBoeSBNSUIncyAqLwogCi0gICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQ0hBTk5FTCwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCi0gICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKwl7RElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCisJIEZfU1RBIHwgRl9SRUFELAorCSBIRkEzODR4X1JJRF9DVVJSRU5UQ0hBTk5FTCwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCisJe0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfVFhQT1dFUk1BWCwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCiAKLSAgICAvKiBwMlN0YXRpYyBNSUIncyAqLworCS8qIHAyU3RhdGljIE1JQidzICovCiAKLSAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisJe0RJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlLAorCSBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKIAotICAgIC8qIHAyTUFDIE1JQidzICovCisJLyogcDJNQUMgTUlCJ3MgKi8KIAotICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZSwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKwl7RElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZSwKKwkgRl9TVEEgfCBGX1JFQUQsCisJIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAogCi0gICAgLyogQW5kIGZpbmFsbHksIGxueCBtaWJzICovCi0gICAgeyBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRSwKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAotICAgIHsgMCwgMCwgMCwgMCwgMCwgTlVMTH19OwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKwkvKiBBbmQgZmluYWxseSwgbG54IG1pYnMgKi8KKwl7RElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUUsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwgMCwgMCwKKwkgcHJpc20ybWliX3ByaXZ9LAorCXswLCAwLCAwLCAwLCAwLCBOVUxMfQorfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfbWlic2V0X21pYmdldApAQCAtMjk1LDMyICsyNjEsMzAgQEAKIAogaW50IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCWludAkJCXJlc3VsdCwgaXNnZXQ7Ci0JbWlicmVjX3QJCSptaWI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IHJlc3VsdCwgaXNnZXQ7CisJbWlicmVjX3QgKm1pYjsKIAotCXUxNgkJCXdoaWNoOworCXUxNiB3aGljaDsKIAotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdAkqbXNnID0gbXNncDsKLQlwODAyMTFpdGVtZF90CQkJKm1pYml0ZW07Ci0KLQlEQkZFTlRFUjsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZyA9IG1zZ3A7CisJcDgwMjExaXRlbWRfdCAqbWliaXRlbTsKIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAogCS8qCi0JKiogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYW4gQWNjZXNzIFBvaW50IG9yIGEgc3RhdGlvbi4KLQkqLworCSAqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBBY2Nlc3MgUG9pbnQgb3IgYSBzdGF0aW9uLgorCSAqLwogCiAJd2hpY2ggPSBGX1NUQTsKIAogCS8qCi0JKiogRmluZCB0aGUgTUlCIGluIHRoZSBNSUIgdGFibGUuICBOb3RlIHRoYXQgYSBNSUIgbWF5IGJlIGluIHRoZQotCSoqIHRhYmxlIHR3aWNlLi4ub25jZSBmb3IgYW4gQVAgYW5kIG9uY2UgZm9yIGEgc3RhdGlvbi4gIE1ha2Ugc3VyZQotCSoqIHRvIGdldCB0aGUgY29ycmVjdCBvbmUuICBOb3RlIHRoYXQgRElEPTAgbWFya3MgdGhlIGVuZCBvZiB0aGUKLQkqKiBNSUIgdGFibGUuCi0JKi8KKwkgKiogRmluZCB0aGUgTUlCIGluIHRoZSBNSUIgdGFibGUuICBOb3RlIHRoYXQgYSBNSUIgbWF5IGJlIGluIHRoZQorCSAqKiB0YWJsZSB0d2ljZS4uLm9uY2UgZm9yIGFuIEFQIGFuZCBvbmNlIGZvciBhIHN0YXRpb24uICBNYWtlIHN1cmUKKwkgKiogdG8gZ2V0IHRoZSBjb3JyZWN0IG9uZS4gIE5vdGUgdGhhdCBESUQ9MCBtYXJrcyB0aGUgZW5kIG9mIHRoZQorCSAqKiBNSUIgdGFibGUuCisJICovCiAKIAltaWJpdGVtID0gKHA4MDIxMWl0ZW1kX3QgKikgbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKIApAQCAtMzM0LDU4ICsyOTgsNTUgQEAKIAl9CiAKIAkvKgotCSoqIERldGVybWluZSBpZiB0aGlzIGlzIGEgIm1pYmdldCIgb3IgYSAibWlic2V0Ii4gIElmIHRoaXMgaXMgYQotCSoqICJtaWJnZXQiLCB0aGVuIG1ha2Ugc3VyZSB0aGF0IHRoZSBNSUIgbWF5IGJlIHJlYWQuICBPdGhlcndpc2UsCi0JKiogdGhpcyBpcyBhICJtaWJzZXQiIHNvIG1ha2UgbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgd3JpdHRlbi4KLQkqLworCSAqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhICJtaWJnZXQiIG9yIGEgIm1pYnNldCIuICBJZiB0aGlzIGlzIGEKKwkgKiogIm1pYmdldCIsIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgcmVhZC4gIE90aGVyd2lzZSwKKwkgKiogdGhpcyBpcyBhICJtaWJzZXQiIHNvIG1ha2UgbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgd3JpdHRlbi4KKwkgKi8KIAogCWlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKIAogCWlmIChpc2dldCkgewogCQlpZiAoIShtaWItPmZsYWcgJiBGX1JFQUQpKSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfZ2V0X3dyaXRlb25seV9taWI7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfZ2V0X3dyaXRlb25seV9taWI7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIShtaWItPmZsYWcgJiBGX1dSSVRFKSkgewogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X3NldF9yZWFkb25seV9taWI7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYjsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAogCS8qCi0JKiogRXhlY3V0ZSB0aGUgTUlCIGZ1bmN0aW9uLiAgSWYgdGhpbmdzIHdvcmtlZCBva2F5LCB0aGVuIG1ha2UKLQkqKiBzdXJlIHRoYXQgdGhlIE1JQiBmdW5jdGlvbiBhbHNvIHdvcmtlZCBva2F5LiAgSWYgc28sIGFuZCB0aGlzCi0JKiogaXMgYSAibWliZ2V0IiwgdGhlbiB0aGUgc3RhdHVzIHZhbHVlIG11c3QgYmUgc2V0IGZvciBib3RoIHRoZQotCSoqICJtaWJhdHRyaWJ1dGUiIHBhcmFtZXRlciBhbmQgdGhlIG1pYiBpdGVtIHdpdGhpbiB0aGUgZGF0YQotCSoqIHBvcnRpb24gb2YgdGhlICJtaWJhdHRyaWJ1dGUiLgotCSovCisJICoqIEV4ZWN1dGUgdGhlIE1JQiBmdW5jdGlvbi4gIElmIHRoaW5ncyB3b3JrZWQgb2theSwgdGhlbiBtYWtlCisJICoqIHN1cmUgdGhhdCB0aGUgTUlCIGZ1bmN0aW9uIGFsc28gd29ya2VkIG9rYXkuICBJZiBzbywgYW5kIHRoaXMKKwkgKiogaXMgYSAibWliZ2V0IiwgdGhlbiB0aGUgc3RhdHVzIHZhbHVlIG11c3QgYmUgc2V0IGZvciBib3RoIHRoZQorCSAqKiAibWliYXR0cmlidXRlIiBwYXJhbWV0ZXIgYW5kIHRoZSBtaWIgaXRlbSB3aXRoaW4gdGhlIGRhdGEKKwkgKiogcG9ydGlvbiBvZiB0aGUgIm1pYmF0dHJpYnV0ZSIuCisJICovCiAKLQlyZXN1bHQgPSBtaWItPmZ1bmMobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywKLQkJCSAgICh2b2lkICopIG1pYml0ZW0tPmRhdGEpOworCXJlc3VsdCA9IG1pYi0+ZnVuYyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCAodm9pZCAqKW1pYml0ZW0tPmRhdGEpOwogCiAJaWYgKG1zZy0+cmVzdWx0Y29kZS5kYXRhID09IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7CiAJCWlmIChyZXN1bHQgIT0gMCkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwgImdldC9zZXQgZmFpbHVyZSwgcmVzdWx0PSVkXG4iLAotCQkJCQlyZXN1bHQpOworCQkJcHJfZGVidWcoImdldC9zZXQgZmFpbHVyZSwgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQl9IGVsc2UgewogCQkJaWYgKGlzZ2V0KSB7CiAJCQkJbXNnLT5taWJhdHRyaWJ1dGUuc3RhdHVzID0KLQkJCQkJUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJCQkJbWliaXRlbS0+c3RhdHVzID0KLQkJCQkJUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJCQl9CiAJCX0KIAl9CiAKIGRvbmU6Ci0JREJGRVhJVDsKLQotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MTMsMzEgKzM3NCwyOSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIobWlicmVjX3QgKm1pYiwKKwkJCQkgICBpbnQgaXNnZXQsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgICAgICAgICByZXN1bHQ7Ci0JcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7Ci0JdTggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgKnBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSBkYXRhOworCXU4IGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOwogCiAJaWYgKGlzZ2V0KSB7Ci0JCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOworCQlyZXN1bHQgPQorCQkgICAgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CiAJCXByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cihieXRlYnVmLCBwc3RyLCBtaWItPnBhcm0yKTsKIAl9IGVsc2UgewogCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbWliLT5wYXJtMik7CiAJCXByaXNtMm1nbXRfcHN0cjJieXRlYXJlYShieXRlYnVmLCBwc3RyKTsKLQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKIAl9CiAKLQlEQkZFWElUOwotCXJldHVybihyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDY1LDM3ICs0MjQsMjYgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMihtaWJyZWNfdCAqbWliLAorCQkJICAgIGludCBpc2dldCwKKwkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgIHJlc3VsdDsKLQl1MzIgICp1aW50MzIgPSAodTMyKikgZGF0YTsKLQl1OCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOwotCXUxNiAgKndvcmRidWYgPSAodTE2KikgYnl0ZWJ1ZjsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJdTMyICp1aW50MzIgPSAodTMyICopIGRhdGE7CisJdTggYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJdTE2ICp3b3JkYnVmID0gKHUxNiAqKSBieXRlYnVmOwogCiAJaWYgKGlzZ2V0KSB7CiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CiAJCSp1aW50MzIgPSAqd29yZGJ1ZjsKLQkJLyogW01TTV0gUmVtb3ZlZCwgZ2V0Y29uZmlnMTYgcmV0dXJucyB0aGUgdmFsdWUgaW4gaG9zdCBvcmRlci4KLQkJICogcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYsIHVpbnQzMik7Ci0JCSAqLwogCX0gZWxzZSB7Ci0JCS8qIFtNU01dIFJlbW92ZWQsIHNldGNvbmZpZzE2IGV4cGVjdHMgaG9zdCBvcmRlci4KLQkJICogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYsIHVpbnQzMik7Ci0JCSAqLwogCQkqd29yZGJ1ZiA9ICp1aW50MzI7CiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MjMsNDYgKzQ3MSwzNiBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcobWlicmVjX3QgKm1pYiwKKwkJCSAgaW50IGlzZ2V0LAorCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgIGhmYTM4NHhfdCAqaHcsCisJCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKQogewotCWludCAgICAgcmVzdWx0OwotCXUzMiAgKnVpbnQzMiA9ICh1MzIqKSBkYXRhOwotCXU4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07Ci0JdTE2ICAqd29yZGJ1ZiA9ICh1MTYqKSBieXRlYnVmOwotCXUzMiAgZmxhZ3M7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OworCXUzMiAqdWludDMyID0gKHUzMiAqKSBkYXRhOworCXU4IGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCXUxNiAqd29yZGJ1ZiA9ICh1MTYgKikgYnl0ZWJ1ZjsKKwl1MzIgZmxhZ3M7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOwogCWlmIChyZXN1bHQgPT0gMCkgewotCQkvKiBbTVNNXSBSZW1vdmVkLCBnZXRjb25maWcxNiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBob3N0IG9yZGVyLgotCQkgKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZiwgJmZsYWdzKTsKLQkJICovCiAJCWZsYWdzID0gKndvcmRidWY7CiAJCWlmIChpc2dldCkgewogCQkJKnVpbnQzMiA9IChmbGFncyAmIG1pYi0+cGFybTIpID8KLQkJCQlQODAyMTFFTlVNX3RydXRoX3RydWUgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQkJICAgIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQlpZiAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKIAkJCQlmbGFncyB8PSBtaWItPnBhcm0yOwogCQkJZWxzZQogCQkJCWZsYWdzICY9IH5taWItPnBhcm0yOwotCQkJLyogW01TTV0gUmVtb3ZlZCwgc2V0Y29uZmlnMTYgZXhwZWN0cyBob3N0IG9yZGVyLgotCQkJICogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYsICZmbGFncyk7Ci0JCQkgKi8KIAkJCSp3b3JkYnVmID0gZmxhZ3M7Ci0JCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwkJCXJlc3VsdCA9CisJCQkgICAgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CiAJCX0KIAl9CiAKLQlEQkZFWElUOwotCXJldHVybihyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTkwLDMzICs1MjgsMjkgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCitzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KG1pYnJlY190ICptaWIsCisJCQkJICAgaW50IGlzZ2V0LAorCQkJCSAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBoZmEzODR4X3QgKmh3LAorCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgIHZvaWQgKmRhdGEpCiB7Ci0JaW50ICAgICAgICAgICAgcmVzdWx0OwotCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOwotCXU4ICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOwotCXUxNiAgICAgICAgIGxlbjsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJdTggYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJdTE2IGxlbjsKIAogCWlmIChpc2dldCkgewotCQlyZXN1bHQgPSAwOyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAqLworCQlyZXN1bHQgPSAwOwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAqLwogCX0gZWxzZSB7CiAJCWxlbiA9IChwc3RyLT5sZW4gPiA1KSA/IEhGQTM4NHhfUklEX0NORldFUDEyOERFRkFVTFRLRVlfTEVOIDoKLQkJCQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWV9MRU47CisJCSAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZX0xFTjsKIAkJbWVtc2V0KGJ5dGVidWYsIDAsIGxlbik7CiAJCXByaXNtMm1nbXRfcHN0cjJieXRlYXJlYShieXRlYnVmLCBwc3RyKTsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbGVuKTsKIAl9CiAKLQlEQkZFWElUOwotCXJldHVybihyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjQ0LDE3ICs1NzgsMTQgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQobWlicmVjX3QgKm1pYiwKKwkJCQkgICAgaW50IGlzZ2V0LAorCQkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgICB2b2lkICpkYXRhKQogewotCWludCAgICAgcmVzdWx0OwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKIAogCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUNSWVBUKSB7CiAJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUNSWVBUKQpAQCAtNjY1LDggKzU5Niw3IEBACiAKIAlyZXN1bHQgPSBwcmlzbTJtaWJfZmxhZyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02OTQsMjIgKzYyNCwxOCBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKG1pYnJlY190ICptaWIsCisJCQkJCWludCBpc2dldCwKKwkJCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQloZmEzODR4X3QgKmh3LAorCQkJCQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkJdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgIHJlc3VsdDsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSBwcmlzbTJtaWJfZmxhZyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MzcsMzEgKzY2MywyOCBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQobWlicmVjX3QgKm1pYiwKKwkJCQkJICAgIGludCBpc2dldCwKKwkJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJICAgIGhmYTM4NHhfdCAqaHcsCisJCQkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkJICAgIHZvaWQgKmRhdGEpCiB7Ci0JaW50ICAgICByZXN1bHQ7Ci0JdTMyICAqdWludDMyID0gKHUzMiopIGRhdGE7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OworCXUzMiAqdWludDMyID0gKHUzMiAqKSBkYXRhOwogCiAJaWYgKCFpc2dldCkKIAkJaWYgKCgqdWludDMyKSAlIDIpIHsKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIkF0dGVtcHQgdG8gc2V0IG9kZCBudW1iZXIgIgotCQkJCQkgICJGcmFnbWVudGF0aW9uVGhyZXNob2xkXG4iKTsKLQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7Ci0JCQlyZXR1cm4oMCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJBdHRlbXB0IHRvIHNldCBvZGQgbnVtYmVyICIKKwkJCSAgICAgICAiRnJhZ21lbnRhdGlvblRocmVzaG9sZFxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJcmVzdWx0ID0gcHJpc20ybWliX3VpbnQzMihtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03ODksNDMgKzcxMiw0MyBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYobWlicmVjX3QgKm1pYiwKKwkJCSAgaW50IGlzZ2V0LAorCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgIGhmYTM4NHhfdCAqaHcsCisJCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKQogewotCXA4MDIxMXBzdHJkX3QgICAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCXA4MDIxMXBzdHJkX3QgKnBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSBkYXRhOwogCi0JaW50ICByZXN1bHQ7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OwogCiAJc3dpdGNoIChtaWItPmRpZCkgewotCWNhc2UgRElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUU6IHsKLQkJaGZhMzg0eF9XUEFEYXRhX3Qgd3BhOwotCQlpZiAoaXNnZXQpIHsKLQkJCWhmYTM4NHhfZHJ2cl9nZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLAotCQkJCQkJKHU4ICopICZ3cGEsIHNpemVvZih3cGEpKTsKLQkJCXBzdHItPmxlbiA9IGhmYTM4NHgyaG9zdF8xNih3cGEuZGF0YWxlbik7Ci0JCQltZW1jcHkocHN0ci0+ZGF0YSwgd3BhLmRhdGEsIHBzdHItPmxlbik7Ci0JCX0gZWxzZSB7Ci0JCQl3cGEuZGF0YWxlbiA9IGhvc3QyaGZhMzg0eF8xNihwc3RyLT5sZW4pOwotCQkJbWVtY3B5KHdwYS5kYXRhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCWNhc2UgRElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUU6eworCQkJaGZhMzg0eF9XUEFEYXRhX3Qgd3BhOworCQkJaWYgKGlzZ2V0KSB7CisJCQkJaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJCSAgICAgICBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLAorCQkJCQkJICAgICAgICh1OCAqKSZ3cGEsCisJCQkJCQkgICAgICAgc2l6ZW9mKHdwYSkpOworCQkJCXBzdHItPmxlbiA9IGxlMTZfdG9fY3B1KHdwYS5kYXRhbGVuKTsKKwkJCQltZW1jcHkocHN0ci0+ZGF0YSwgd3BhLmRhdGEsIHBzdHItPmxlbik7CisJCQl9IGVsc2UgeworCQkJCXdwYS5kYXRhbGVuID0gY3B1X3RvX2xlMTYocHN0ci0+bGVuKTsKKwkJCQltZW1jcHkod3BhLmRhdGEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CiAKLQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCi0JCQkJKHU4ICopICZ3cGEsIHNpemVvZih3cGEpKTsKKwkJCQlyZXN1bHQgPQorCQkJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LAorCQkJCQkJCSAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJCQkJICAgKHU4ICopJndwYSwKKwkJCQkJCQkgICBzaXplb2Yod3BhKSk7CisJCQl9CisJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQl9CiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfRVJST1IoIlVuaGFuZGxlZCBESUQgMHglMDh4XG4iLCBtaWItPmRpZCk7CisJCXByaW50ayhLRVJOX0VSUiAiVW5oYW5kbGVkIERJRCAweCUwOHhcbiIsIG1pYi0+ZGlkKTsKIAl9CiAKLQlEQkZFWElUOwotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NDUsMTQgKzc2OCwxMCBAQAogCiB2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKQogewotCURCRkVOVEVSOwotCi0JYnl0ZXN0ci0+bGVuID0gaG9zdDJoZmEzODR4XzE2KCh1MTYpKHBzdHItPmxlbikpOworCWJ5dGVzdHItPmxlbiA9IGNwdV90b19sZTE2KCh1MTYpIChwc3RyLT5sZW4pKTsKIAltZW1jcHkoYnl0ZXN0ci0+ZGF0YSwgcHN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEKICoKQEAgLTg3MCwxMyArNzg5LDkgQEAKIAogdm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEodTggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyKQogewotCURCRkVOVEVSOwotCiAJbWVtY3B5KGJ5dGVhcmVhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOwotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyCiAqCkBAIC04OTQsMTQgKzgwOSwxMCBAQAogCiB2b2lkIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKQogewotCURCRkVOVEVSOwotCi0JcHN0ci0+bGVuID0gKHU4KShoZmEzODR4Mmhvc3RfMTYoKHUxNikoYnl0ZXN0ci0+bGVuKSkpOworCXBzdHItPmxlbiA9ICh1OCkgKGxlMTZfdG9fY3B1KCh1MTYpIChieXRlc3RyLT5sZW4pKSk7CiAJbWVtY3B5KHBzdHItPmRhdGEsIGJ5dGVzdHItPmRhdGEsIHBzdHItPmxlbik7Ci0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyCiAqCkBAIC05MTksMjE3ICs4MzAsMTEgQEAKIAogdm9pZCBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIodTggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyLCBpbnQgbGVuKQogewotCURCRkVOVEVSOwotCi0JcHN0ci0+bGVuID0gKHU4KWxlbjsKKwlwc3RyLT5sZW4gPSAodTgpIGxlbjsKIAltZW1jcHkocHN0ci0+ZGF0YSwgYnl0ZWFyZWEsIGxlbik7Ci0JREJGRVhJVDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50Ci0qCi0qIENvbnZlcnQgYW4gaGZhMzg0eCBpbnRlZ2VyIGludG8gYSB3bGFuIGludGVnZXIKLSoKLSogQXJndW1lbnRzOgotKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCi0qCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHUxNiAqcHJpc20yaW50LCB1MzIgKndsYW5pbnQpCi17Ci0JREJGRU5URVI7Ci0KLQkqd2xhbmludCA9ICh1MzIpaGZhMzg0eDJob3N0XzE2KCpwcmlzbTJpbnQpOwotCURCRkVYSVQ7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludAotKgotKiBDb252ZXJ0IGEgd2xhbiBpbnRlZ2VyIGludG8gYW4gaGZhMzg0eCBpbnRlZ2VyCi0qCi0qIEFyZ3VtZW50czoKLSoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgotKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCi0qCi0qIFJldHVybnM6Ci0qCU5vdGhpbmcKLSoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi12b2lkIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh1MTYgKnByaXNtMmludCwgdTMyICp3bGFuaW50KQotewotCURCRkVOVEVSOwotCi0JKnByaXNtMmludCA9IGhvc3QyaGZhMzg0eF8xNigodTE2KSgqd2xhbmludCkpOwotCURCRkVYSVQ7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMm1nbXRfcHJpc20yZW51bTJwODAyMTFlbnVtCi0qCi0qIENvbnZlcnQgdGhlIGhmYTM4NHggZW51bWVyYXRlZCBpbnQgaW50byBhIHA4MDIxMSBlbnVtZXJhdGVkIGludAotKgotKiBBcmd1bWVudHM6Ci0qCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKLSoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgotKglyaWQJCWhmYTM4NHggcmVjb3JkIGlkCi0qCi0qIFJldHVybnM6Ci0qCU5vdGhpbmcKLSoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bSh1MTYgKnByaXNtMmVudW0sIHUzMiAqd2xhbmVudW0sIHUxNiByaWQpCi17Ci0JREJGRU5URVI7Ci0KLQkvKiBBdCB0aGUgbW9tZW50LCB0aGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGhhc24ndAotCXByZXNlbnRlZCBpdHNlbGYuIEFsbCB0aGUgd2xhbiBlbnVtZXJhdGVkIHZhbHVlcyBhcmUKLQlhIDEtdG8tMSBtYXRjaCBhZ2FpbnN0IHRoZSBQcmlzbTIgZW51bWVyYXRlZCB2YWx1ZXMqLwotCURCRkVYSVQ7Ci0JcmV0dXJuOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bQotKgotKiBDb252ZXJ0IHRoZSBwODAyMTEgZW51bWVyYXRlZCBpbnQgaW50byBhbiBoZmEzODR4IGVudW1lcmF0ZWQgaW50Ci0qCi0qIEFyZ3VtZW50czoKLSoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgotKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCi0qCXJpZAkJaGZhMzg0eCByZWNvcmQgaWQKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIHByaXNtMm1nbXRfcDgwMjExZW51bTJwcmlzbTJlbnVtKHUxNiAqcHJpc20yZW51bSwgdTMyICp3bGFuZW51bSwgdTE2IHJpZCkKLXsKLQlEQkZFTlRFUjsKLQotCS8qIEF0IHRoZSBtb21lbnQsIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzbid0Ci0JcHJlc2VudGVkIGl0c2VsZi4gQWxsIHRoZSB3bGFuIGVudW1lcmF0ZWQgdmFsdWVzIGFyZQotCWEgMS10by0xIG1hdGNoIGFnYWluc3QgdGhlIFByaXNtMiBlbnVtZXJhdGVkIHZhbHVlcyovCi0JREJGRVhJVDsKLQlyZXR1cm47CiB9CiAKIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0Ci0qCi0qIENvbnZlcnQgdGhlIGhmYTM4NHggYml0IGFyZWEgaW50byBhIHdsYW4gb2N0ZXQgc3RyaW5nLgotKgotKiBBcmd1bWVudHM6Ci0qCXJhdGUJCVByaXNtMiBiaXQgYXJlYQotKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZwotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KHUxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cikKLXsKLQl1OAlsZW47Ci0JdTgJKmRhdGFyYXRlOwotCi0JREJGRU5URVI7Ci0KLQlsZW4gPSAwOwotCWRhdGFyYXRlID0gcHN0ci0+ZGF0YTsKLQotIAkvKiAxIE1icHMgKi8KLQlpZiAoIEJJVDAgJiAoKnJhdGUpICkgewotCQlsZW4gKz0gKHU4KTE7Ci0JCSpkYXRhcmF0ZSA9ICh1OCkyOwotCQlkYXRhcmF0ZSsrOwotCX0KLQotIAkvKiAyIE1icHMgKi8KLQlpZiAoIEJJVDEgJiAoKnJhdGUpICkgewotCQlsZW4gKz0gKHU4KTE7Ci0JCSpkYXRhcmF0ZSA9ICh1OCk0OwotCQlkYXRhcmF0ZSsrOwotCX0KLQotIAkvKiA1LjUgTWJwcyAqLwotCWlmICggQklUMiAmICgqcmF0ZSkgKSB7Ci0JCWxlbiArPSAodTgpMTsKLQkJKmRhdGFyYXRlID0gKHU4KTExOwotCQlkYXRhcmF0ZSsrOwotCX0KLQotIAkvKiAxMSBNYnBzICovCi0JaWYgKCBCSVQzICYgKCpyYXRlKSApIHsKLQkJbGVuICs9ICh1OCkxOwotCQkqZGF0YXJhdGUgPSAodTgpMjI7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0JcHN0ci0+bGVuID0gbGVuOwotCi0JREJGRVhJVDsKLQlyZXR1cm47Ci19CiAKIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0Ci0qCi0qIENvbnZlcnQgdGhlIHdsYW4gb2N0ZXQgc3RyaW5nIGludG8gYW4gaGZhMzg0eCBiaXQgYXJlYS4KLSoKLSogQXJndW1lbnRzOgotKglyYXRlCQlQcmlzbTIgYml0IGFyZWEKLSoJcHN0cgkJd2xhbiBvY3RldCBzdHJpbmcKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldCh1MTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCi17Ci0JdTgJKmRhdGFyYXRlOwotCWludAlpOwotCi0JREJGRU5URVI7Ci0KLQkqcmF0ZSA9IDA7Ci0KLQlkYXRhcmF0ZSA9IHBzdHItPmRhdGE7Ci0KLQlmb3IgKCBpPTA7IGkgPCBwc3RyLT5sZW47IGkrKywgZGF0YXJhdGUrKyApIHsKLQkJc3dpdGNoICgqZGF0YXJhdGUpIHsKLQkJY2FzZSAyOiAvKiAxIE1icHMgKi8KLQkJCSpyYXRlIHw9IEJJVDA7Ci0JCQlicmVhazsKLQkJY2FzZSA0OiAvKiAyIE1icHMgKi8KLQkJCSpyYXRlIHw9IEJJVDE7Ci0JCQlicmVhazsKLQkJY2FzZSAxMTogLyogNS41IE1icHMgKi8KLQkJCSpyYXRlIHw9IEJJVDI7Ci0JCQlicmVhazsKLQkJY2FzZSAyMjogLyogMTEgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJV0xBTl9MT0dfREVCVUcoMSwgIlVucmVjb2dpbnplZCBSYXRlIG9mICVkXG4iLAotCQkJCSpkYXRhcmF0ZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCURCRkVYSVQ7Ci0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYwppbmRleCBiMjc5Yzk3Li45ZDU3ZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYwpAQCAtNTAsMTAgKzUwLDYgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLSNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNjUsMTMgKzYxLDE1IEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLQotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KQEAgLTg4LDExMSArODYsNzggQEAKICNpbmNsdWRlICJoZmEzODR4LmgiCiAjaW5jbHVkZSAicHJpc20ybWdtdC5oIgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgQ29uc3RhbnRzICovCisjZGVmaW5lIHdsYW5faGV4Y2hhcih4KSAoKCh4KSA8IDB4MGEpID8gKCcwJyArICh4KSkgOiAoJ2EnICsgKCh4KSAtIDB4MGEpKSkKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIE1hY3JvcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworLyogQ3JlYXRlIGEgc3RyaW5nIG9mIHByaW50YWJsZSBjaGFycyBmcm9tIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSAqLworLyogSXQncyByZWNvbW1lbmRlZCB0aGF0IHRoZSBzdHIgYmUgNCpsZW4gKyAxIGJ5dGVzIGxvbmcgKi8KKyNkZWZpbmUgd2xhbl9ta3ByaW50c3RyKGJ1ZiwgYnVmbGVuLCBzdHIsIHN0cmxlbikgXAoreyBcCisJaW50IGkgPSAwOyBcCisJaW50IGogPSAwOyBcCisJbWVtc2V0KHN0ciwgMCwgKHN0cmxlbikpOyBcCisJZm9yIChpID0gMDsgaSA8IChidWZsZW4pOyBpKyspIHsgXAorCQlpZiAoaXNwcmludCgoYnVmKVtpXSkpIHsgXAorCQkJKHN0cilbal0gPSAoYnVmKVtpXTsgXAorCQkJaisrOyBcCisJCX0gZWxzZSB7IFwKKwkJCShzdHIpW2pdID0gJ1xcJzsgXAorCQkJKHN0cilbaisxXSA9ICd4JzsgXAorCQkJKHN0cilbaisyXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweGYwKSA+PiA0KTsgXAorCQkJKHN0cilbaiszXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweDBmKSk7IFwKKwkJCWogKz0gNDsgXAorCQl9IFwKKwl9IFwKK30KIAogc3RhdGljIGNoYXIgKmRldl9pbmZvID0gInByaXNtMl91c2IiOwotCiBzdGF0aWMgd2xhbmRldmljZV90ICpjcmVhdGVfd2xhbih2b2lkKTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIC0tTW9kdWxlIFBhcmFtZXRlcnMgKi8KK2ludCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUgPSAzMDsJLyogUmVzZXQgaG9sZCB0aW1lIGluIG1zICovCitpbnQgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUgPSAxMDA7CS8qIFJlc2V0IHNldHRsZSB0aW1lIGluIG1zICovCiAKLWludCAgICAgIHByaXNtMl9yZXNldF9ob2xkdGltZT0zMDsJLyogUmVzZXQgaG9sZCB0aW1lIGluIG1zICovCi1pbnQJIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lPTEwMDsJLyogUmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMgKi8KK3N0YXRpYyBpbnQgcHJpc20yX2RvcmVzZXQgPSAwOwkvKiBEbyBhIHJlc2V0IGF0IGluaXQ/ICovCiAKLXN0YXRpYyBpbnQJcHJpc20yX2RvcmVzZXQ9MDsJCS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KLQotI2lmZGVmIFdMQU5fSU5DTFVERV9ERUJVRwotaW50IHByaXNtMl9kZWJ1Zz0wOwotbW9kdWxlX3BhcmFtKCBwcmlzbTJfZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9kZWJ1ZywgInByaXNtMiBkZWJ1Z2dpbmciKTsKLSNlbmRpZgotCi1tb2R1bGVfcGFyYW0oIHByaXNtMl9kb3Jlc2V0LCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHByaXNtMl9kb3Jlc2V0LCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfZG9yZXNldCwgIklzc3VlIGEgcmVzZXQgb24gaW5pdGlhbGl6YXRpb24iKTsKIAotbW9kdWxlX3BhcmFtKCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsICJyZXNldCBob2xkIHRpbWUgaW4gbXMiKTsKLW1vZHVsZV9wYXJhbSggcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgInJlc2V0IHNldHRsZSB0aW1lIGluIG1zIik7Cittb2R1bGVfcGFyYW0ocHJpc20yX3Jlc2V0X2hvbGR0aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfcmVzZXRfaG9sZHRpbWUsICJyZXNldCBob2xkIHRpbWUgaW4gbXMiKTsKK21vZHVsZV9wYXJhbShwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsICJyZXNldCBzZXR0bGUgdGltZSBpbiBtcyIpOwogCiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yc3RhX2Nsb3NlKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yc3RhX3R4ZnJhbWUod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQkgICAgIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOworc3RhdGljIGludCBwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKK3N0YXRpYyBpbnQgcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50IHByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCBwcmlzbTJzdGFfc2V0bXVsdGljYXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgbmV0ZGV2aWNlX3QgKmRldik7CiAKLXN0YXRpYyBpbnQJcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXN0YXRpYyBpbnQJcHJpc20yc3RhX2Nsb3NlKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2ICk7Ci1zdGF0aWMgaW50ICAgICAgcHJpc20yc3RhX3R4ZnJhbWUod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwotc3RhdGljIGludAlwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKLXN0YXRpYyBpbnQJcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci1zdGF0aWMgaW50CXByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotc3RhdGljIGludCAgICAgIHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LAotCQkJCSAgICAgICBuZXRkZXZpY2VfdCAqZGV2KTsKLQotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9oYW5kb3ZlcigKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl90YWxsaWVzKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZCAgICAgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cygKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2F1dGhyZXEoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXV0aHJlcV9kZWZlcigKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9wc3VzZXJjbnQoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBkbXBtZW0KLSoKLSogRGVidWcgdXRpbGl0eSBmdW5jdGlvbiB0byBkdW1wIG1lbW9yeSB0byB0aGUga2VybmVsIGRlYnVnIGxvZy4KLSoKLSogQXJndW1lbnRzOgotKglidWYJcHRyIGRhdGEgd2Ugd2FudCBkdW1wZWQKLSoJbGVuCWxlbmd0aCBvZiBkYXRhCi0qCi0qIFJldHVybnM6Ci0qCW5vdGhpbmcKLSogU2lkZSBlZmZlY3RzOgotKgotKiBDYWxsIGNvbnRleHQ6Ci0qCXByb2Nlc3MgdGhyZWFkCi0qCWludGVycnVwdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbmxpbmUgdm9pZCBkbXBtZW0odm9pZCAqYnVmLCBpbnQgbikKLXsKLQlpbnQgYzsKLQlmb3IgKCBjPSAwOyBjIDwgbjsgYysrKSB7Ci0JCWlmICggKGMgJSAxNikgPT0gMCApIHByaW50ayhLRVJOX0RFQlVHImRtcFslZF06ICIsIGMpOwotCQlwcmludGsoIiUwMnggIiwgKCh1OCopYnVmKVtjXSk7Ci0JCWlmICggKGMgJSAxNikgPT0gMTUgKSBwcmludGsoIlxuIik7Ci0JfQotCWlmICggKGMgJSAxNikgIT0gMCApIHByaW50aygiXG4iKTsKLX0KLQorc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl90YWxsaWVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXV0aHJlcV9kZWZlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfcHN1c2VyY250KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX29wZW4KQEAgLTIxNyw4ICsxODIsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9vcGVuKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlEQkZFTlRFUjsKLQogCS8qIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIHRvIGRvIGFueXRoaW5nIGVsc2UuCiAJICogVGhlIHNldHVwIG9mIHRoZSBNQUMgc2hvdWxkIGJlIHN1YnNlcXVlbnRseSBjb21wbGV0ZWQgdmlhCiAJICogdGhlIG1sbWUgY29tbWFuZHMuCkBAIC0yMjcsMTEgKzE5MCw5IEBACiAJICogZnJhbWVzIGJlY2F1c2Ugb2YgZGV2LT5mbGFncyZJRkZfVVAgaXMgdHJ1ZS4KIAkgKi8KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9jbG9zZQogKgpAQCAtMjU1LDE5ICsyMTYsMTUgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCURCRkVOVEVSOwotCiAJLyogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgZWxzZS4KIAkgKiBIaWdoZXIgbGF5ZXJzIGtub3cgd2UncmUgbm90IHJlYWR5IGZyb20gZGV2LT5zdGFydD09MCBhbmQKIAkgKiBkZXYtPnRidXN5PT0xLiAgT3VyIHJ4IHBhdGgga25vd3MgdG8gbm90IHBhc3MgdXAgcmVjZWl2ZWQKIAkgKiBmcmFtZXMgYmVjYXVzZSBvZiBkZXYtPmZsYWdzJklGRl9VUCBpcyBmYWxzZS4KIAkgKi8KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9yZXNldAogKgpAQCAtMjg1LDE0ICsyNDIsMTEgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzIHRocmVhZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBwcmlzbTJzdGFfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2ICkKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JREJGRU5URVI7Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV90eGZyYW1lCiAqCkBAIC0zMTgsMjIgKzI3MiwyMCBAQAogCQkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCiAJCQkgICAgIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQlpbnQJCQlyZXN1bHQ7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwlpbnQgcmVzdWx0OwogCiAJLyogSWYgbmVjZXNzYXJ5LCBzZXQgdGhlIDgwMi4xMSBXRVAgYml0ICovCi0JaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgKEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgfCBIT1NUV0VQX0VOQ1JZUFQpKSA9PSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSB7Ci0JCXA4MDIxMV9oZHItPmEzLmZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiAoSE9TVFdFUF9QUklWQUNZSU5WT0tFRCB8IEhPU1RXRVBfRU5DUllQVCkpID09CisJICAgIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpIHsKKwkJcDgwMjExX2hkci0+YTMuZmMgfD0gY3B1X3RvX2xlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOwogCX0KIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl90eGZyYW1lKGh3LCBza2IsIHA4MDIxMV9oZHIsIHA4MDIxMV93ZXApOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfbWxtZXJlcXVlc3QKICoKQEAgLTM2MCwxMDkgKzMxMiwxMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCiAJaW50IHJlc3VsdCA9IDA7Ci0JREJGRU5URVI7CiAKLQlzd2l0Y2goIG1zZy0+bXNnY29kZSApCi0JewotCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldCA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1pYmdldCByZXF1ZXN0XG4iKTsKKwlzd2l0Y2ggKG1zZy0+bXNnY29kZSkgeworCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldDoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1pYmdldCByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYnNldCA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1pYnNldCByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtaWJzZXQgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19kb3QxMXJlcV9zY2FuIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgc2NhbiByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zY2FuOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgc2NhbiByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuKHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHNjYW5fcmVzdWx0cyByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHM6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBzY2FuX3Jlc3VsdHMgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfc2Nhbl9yZXN1bHRzKHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX2RvdDExcmVxX3N0YXJ0IDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBzdGFydCByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zdGFydDoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgc3RhcnQgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfc3RhcnQod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JLyoKLQkgKiBQcmlzbTIgc3BlY2lmaWMgbWVzc2FnZXMKLQkgKi8KLSAgICAgICAJY2FzZSBESURtc2dfcDJyZXFfcmVhZHBkYSA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVhZHBkYSByZXF1ZXN0XG4iKTsKKwkJLyoKKwkJICogUHJpc20yIHNwZWNpZmljIG1lc3NhZ2VzCisJCSAqLworCWNhc2UgRElEbXNnX3AycmVxX3JlYWRwZGE6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIHJlYWRwZGEgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZSA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmFtZGxfc3RhdGUgcmVxdWVzdFxuIik7CisJY2FzZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGU6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIHJhbWRsX3N0YXRlIHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByYW1kbF93cml0ZSByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZToKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgcmFtZGxfd3JpdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZmxhc2hkbF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3N0YXRlIHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZmxhc2hkbF93cml0ZSByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3dyaXRlIHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JLyoKLQkgKiBMaW51eCBzcGVjaWZpYyBtZXNzYWdlcwotCSAqLwotCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwIDoKLQkJYnJlYWs7ICAgLy8gaWdub3JlIG1lLgotICAgICAgICBjYXNlIERJRG1zZ19sbnhyZXFfaWZzdGF0ZSA6CisJCS8qCisJCSAqIExpbnV4IHNwZWNpZmljIG1lc3NhZ2VzCisJCSAqLworCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwOgorCQlicmVhazsJCS8qIGlnbm9yZSBtZS4gKi8KKwljYXNlIERJRG1zZ19sbnhyZXFfaWZzdGF0ZToKIAkJewotCQlwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdAkqaWZzdGF0ZW1zZzsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGlmc3RhdGUgcmVxdWVzdFxuIik7Ci0JCWlmc3RhdGVtc2cgPSAocDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3QqKW1zZzsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBpZnN0YXRlbXNnLT5pZnN0YXRlLmRhdGEpOwotCQlpZnN0YXRlbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9Ci0JCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IHJlc3VsdDsKLQkJcmVzdWx0ID0gMDsKKwkJCXA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90ICppZnN0YXRlbXNnOworCQkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgaWZzdGF0ZSByZXF1ZXN0XG4iKTsKKwkJCWlmc3RhdGVtc2cgPSAocDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3QgKikgbXNnOworCQkJcmVzdWx0ID0KKwkJCSAgICBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LAorCQkJCQkgICAgICBpZnN0YXRlbXNnLT5pZnN0YXRlLmRhdGEpOworCQkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQorCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IHJlc3VsdDsKKwkJCXJlc3VsdCA9IDA7CiAJCX0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZiA6Ci0gICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSB3bGFuc25pZmYgcmVxdWVzdFxuIik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldiwgbXNnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQljYXNlIERJRG1zZ19sbnhyZXFfYXV0b2pvaW4gOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGF1dG9qb2luIHJlcXVlc3RcbiIpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSB3bGFuc25pZmYgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfd2xhbnNuaWZmKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2xueHJlcV9hdXRvam9pbjoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgYXV0b2pvaW4gcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTogewotCQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICpxdWFsbXNnOworCWNhc2UgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHk6eworCQkJcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAqcXVhbG1zZzsKIAotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBjb21tc3F1YWxpdHkgcmVxdWVzdFxuIik7CisJCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgY29tbXNxdWFsaXR5IHJlcXVlc3RcbiIpOwogCi0JCXF1YWxtc2cgPSAocDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCopIG1zZzsKKwkJCXF1YWxtc2cgPSAocDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAqKSBtc2c7CiAKLQkJcXVhbG1zZy0+bGluay5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCXF1YWxtc2ctPmxldmVsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJcXVhbG1zZy0+bm9pc2Uuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJcXVhbG1zZy0+bGluay5zdGF0dXMgPQorCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCXF1YWxtc2ctPmxldmVsLnN0YXR1cyA9CisJCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJcXVhbG1zZy0+bm9pc2Uuc3RhdHVzID0KKwkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKKwkJCXF1YWxtc2ctPmxpbmsuZGF0YSA9CisJCQkgICAgbGUxNl90b19jcHUoaHctPnF1YWwuQ1FfY3VyckJTUyk7CisJCQlxdWFsbXNnLT5sZXZlbC5kYXRhID0KKwkJCSAgICBsZTE2X3RvX2NwdShody0+cXVhbC5BU0xfY3VyckJTUyk7CisJCQlxdWFsbXNnLT5ub2lzZS5kYXRhID0KKwkJCSAgICBsZTE2X3RvX2NwdShody0+cXVhbC5BTkxfY3VyckZDKTsKIAotCQlxdWFsbXNnLT5saW5rLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQ1FfY3VyckJTUyk7Ci0JCXF1YWxtc2ctPmxldmVsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQVNMX2N1cnJCU1MpOwotCQlxdWFsbXNnLT5ub2lzZS5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFOTF9jdXJyRkMpOwotCi0JCWJyZWFrOwotCX0KKwkJCWJyZWFrOworCQl9CiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfV0FSTklORygiVW5rbm93biBtZ210IHJlcXVlc3QgbWVzc2FnZSAweCUwOHgiLCBtc2ctPm1zZ2NvZGUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIG1nbXQgcmVxdWVzdCBtZXNzYWdlIDB4JTA4eCIsCisJCSAgICAgICBtc2ctPm1zZ2NvZGUpOwogCQlicmVhazsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9pZnN0YXRlCiAqCkBAIC00ODYsMTYgKzQ0MiwxNCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB1MzIgcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgaWZzdGF0ZSkKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JdTMyIAkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCXUzMiByZXN1bHQ7CiAKIAlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAotCVdMQU5fTE9HX0RFQlVHKDIsICJDdXJyZW50IE1TRCBzdGF0ZSglZCksIHJlcXVlc3RpbmcoJWQpXG4iLAotCSAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm1zZHN0YXRlLCBpZnN0YXRlKTsKLQlzd2l0Y2ggKGlmc3RhdGUpCi0JeworCXByX2RlYnVnKCJDdXJyZW50IE1TRCBzdGF0ZSglZCksIHJlcXVlc3RpbmcoJWQpXG4iLAorCSAgICAgICB3bGFuZGV2LT5tc2RzdGF0ZSwgaWZzdGF0ZSk7CisJc3dpdGNoIChpZnN0YXRlKSB7CiAJY2FzZSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkOgogCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CiAJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgpAQCAtNTA0LDEyICs0NTgsMTIgQEAKIAkJCSAqIEluaXRpYWxpemUgdGhlIGRldmljZStkcml2ZXIgc3VmZmljaWVudGx5CiAJCQkgKiBmb3IgZmlybXdhcmUgbG9hZGluZy4KIAkJCSAqLwotCQkJaWYgKChyZXN1bHQ9aGZhMzg0eF9kcnZyX3N0YXJ0KGh3KSkpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJImhmYTM4NHhfZHJ2cl9zdGFydCgpIGZhaWxlZCwiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCWlmICgocmVzdWx0ID0gaGZhMzg0eF9kcnZyX3N0YXJ0KGh3KSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImhmYTM4NHhfZHJ2cl9zdGFydCgpIGZhaWxlZCwiCisJCQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKIAkJCQlyZXN1bHQgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTUyMSw5ICs0NzUsOSBAQAogCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgotCQkJV0xBTl9MT0dfV0FSTklORygKLQkJCQkiQ2Fubm90IGVudGVyIGZ3bG9hZCBzdGF0ZSBmcm9tIGVuYWJsZSBzdGF0ZSwiCi0JCQkJInlvdSBtdXN0IGRpc2FibGUgZmlyc3QuXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiQ2Fubm90IGVudGVyIGZ3bG9hZCBzdGF0ZSBmcm9tIGVuYWJsZSBzdGF0ZSwiCisJCQkgICAgICAgInlvdSBtdXN0IGRpc2FibGUgZmlyc3QuXG4iKTsKIAkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX01TRF9IV0ZBSUw6CkBAIC01NDgsMzIgKzUwMiwzMiBAQAogCQkJICogY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YXRlCiAJCQkgKiBvZiB0aGUgaGFyZHdhcmUgb3IgYSBwcmV2aW91cyBmaXJtd2FyZSBsb2FkLgogCQkJICovCi0JCQlpZiAoKHJlc3VsdD1oZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgewotCQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCQkiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKLQkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoKHJlc3VsdD1wcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldikpKSB7Ci0JCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJCSJwcmlzbTJzdGFfZ2V0Y2FyZGluZm8oKSBmYWlsZWQsIgotCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQlpZiAoKHJlc3VsdCA9IHByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2KSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgInByaXNtMnN0YV9nZXRjYXJkaW5mbygpIGZhaWxlZCwiCisJCQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKIAkJCQlyZXN1bHQgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCQloZmEzODR4X2RydnJfc3RvcChodyk7CiAJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAoKHJlc3VsdD1wcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldikpKSB7Ci0JCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJCSJwcmlzbTJzdGFfZ2xvYmFsc2V0dXAoKSBmYWlsZWQsIgotCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQlpZiAoKHJlc3VsdCA9IHByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2KSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgInByaXNtMnN0YV9nbG9iYWxzZXR1cCgpIGZhaWxlZCwiCisJCQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKIAkJCQlyZXN1bHQgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCQloZmEzODR4X2RydnJfc3RvcChodyk7CiAJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CiAJCQkJYnJlYWs7CkBAIC01ODQsNyArNTM4LDcgQEAKIAkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9NU0RfUlVOTklORzoKLQkJCS8qIERvIG5vdGhpbmcsIHdlJ3JlIGFscmVhZHkgaW4gdGhpcyBzdGF0ZS4qLworCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiAqLwogCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX01TRF9IV0ZBSUw6CkBAIC01OTksNyArNTUzLDcgQEAKIAljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlOgogCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CiAJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgotCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuICovCiAJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKQEAgLTYzNCwxMSArNTg4LDkgQEAKIAkJYnJlYWs7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8KICoKQEAgLTY2MCwyNjkgKzYxMiwyODQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWludCAJCQlyZXN1bHQgPSAwOwotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQl1MTYgICAgICAgICAgICAgICAgICB0ZW1wOwotCXU4CQkJc251bVtIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOXTsKLQljaGFyCQkJcHN0clsoSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTiAqIDQpICsgMV07Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCXUxNiB0ZW1wOworCXU4IHNudW1bSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTl07CisJY2hhciBwc3RyWyhIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOICogNCkgKyAxXTsKIAogCS8qIENvbGxlY3QgdmVyc2lvbiBhbmQgY29tcGF0aWJpbGl0eSBpbmZvICovCiAJLyogIFNvbWUgYXJlIGNyaXRpY2FsLCBzb21lIGFyZSBub3QgKi8KIAkvKiBOSUMgaWRlbnRpdHkgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9OSUNJREVOVElUWSwKLQkJCSZody0+aWRlbnRfbmljLCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIE5JQ0lERU5USVRZXG4iKTsKKwkJCQkJJmh3LT5pZGVudF9uaWMsCisJCQkJCXNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBOSUNJREVOVElUWVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIG5pYyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCi0JaHctPmlkZW50X25pYy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLmlkKTsKLQlody0+aWRlbnRfbmljLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy52YXJpYW50KTsKLQlody0+aWRlbnRfbmljLm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMubWFqb3IpOwotCWh3LT5pZGVudF9uaWMubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5taW5vcik7CisJaHctPmlkZW50X25pYy5pZCA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9uaWMuaWQpOworCWh3LT5pZGVudF9uaWMudmFyaWFudCA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9uaWMudmFyaWFudCk7CisJaHctPmlkZW50X25pYy5tYWpvciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9uaWMubWFqb3IpOworCWh3LT5pZGVudF9uaWMubWlub3IgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfbmljLm1pbm9yKTsKIAotCVdMQU5fTE9HX0lORk8oICJpZGVudDogbmljIGgvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAotCQkJaHctPmlkZW50X25pYy5pZCwgaHctPmlkZW50X25pYy5tYWpvciwKLQkJCWh3LT5pZGVudF9uaWMubWlub3IsIGh3LT5pZGVudF9uaWMudmFyaWFudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiaWRlbnQ6IG5pYyBoL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkgICAgICAgaHctPmlkZW50X25pYy5pZCwgaHctPmlkZW50X25pYy5tYWpvciwKKwkgICAgICAgaHctPmlkZW50X25pYy5taW5vciwgaHctPmlkZW50X25pYy52YXJpYW50KTsKIAogCS8qIFByaW1hcnkgZi93IGlkZW50aXR5ICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJSURFTlRJVFksCi0JCQkmaHctPmlkZW50X3ByaV9mdywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQUklJREVOVElUWVxuIik7CisJCQkJCSZody0+aWRlbnRfcHJpX2Z3LAorCQkJCQlzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgUFJJSURFTlRJVFlcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBwcml2YXRlIGZ3IGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KLQlody0+aWRlbnRfcHJpX2Z3LmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncuaWQpOwotCWh3LT5pZGVudF9wcmlfZncudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOwotCWh3LT5pZGVudF9wcmlfZncubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5tYWpvcik7Ci0JaHctPmlkZW50X3ByaV9mdy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3Lm1pbm9yKTsKKwlody0+aWRlbnRfcHJpX2Z3LmlkID0gbGUxNl90b19jcHUoaHctPmlkZW50X3ByaV9mdy5pZCk7CisJaHctPmlkZW50X3ByaV9mdy52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKwlody0+aWRlbnRfcHJpX2Z3Lm1ham9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X3ByaV9mdy5tYWpvcik7CisJaHctPmlkZW50X3ByaV9mdy5taW5vciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9wcmlfZncubWlub3IpOwogCi0JV0xBTl9MT0dfSU5GTyggImlkZW50OiBwcmkgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCi0JCQlody0+aWRlbnRfcHJpX2Z3LmlkLCBody0+aWRlbnRfcHJpX2Z3Lm1ham9yLAotCQkJaHctPmlkZW50X3ByaV9mdy5taW5vciwgaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKwlwcmludGsoS0VSTl9JTkZPICJpZGVudDogcHJpIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCSAgICAgICBody0+aWRlbnRfcHJpX2Z3LmlkLCBody0+aWRlbnRfcHJpX2Z3Lm1ham9yLAorCSAgICAgICBody0+aWRlbnRfcHJpX2Z3Lm1pbm9yLCBody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOwogCiAJLyogU3RhdGlvbiAoU2Vjb25kYXJ5PykgZi93IGlkZW50aXR5ICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBSURFTlRJVFksCi0JCQkmaHctPmlkZW50X3N0YV9mdywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFJREVOVElUWVxuIik7CisJCQkJCSZody0+aWRlbnRfc3RhX2Z3LAorCQkJCQlzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgU1RBSURFTlRJVFlcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlpZiAoaHctPmlkZW50X25pYy5pZCA8IDB4ODAwMCkgewotCQlXTEFOX0xPR19FUlJPUigiRkFUQUw6IENhcmQgaXMgbm90IGFuIEludGVyc2lsIFByaXNtMi8yLjUvM1xuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkZBVEFMOiBDYXJkIGlzIG5vdCBhbiBJbnRlcnNpbCBQcmlzbTIvMi41LzNcbiIpOwogCQlyZXN1bHQgPSAtMTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgc3RhdGlvbiBmdyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCi0JaHctPmlkZW50X3N0YV9mdy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3LmlkKTsKLQlody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKLQlody0+aWRlbnRfc3RhX2Z3Lm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncubWFqb3IpOwotCWh3LT5pZGVudF9zdGFfZncubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5taW5vcik7CisJaHctPmlkZW50X3N0YV9mdy5pZCA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9zdGFfZncuaWQpOworCWh3LT5pZGVudF9zdGFfZncudmFyaWFudCA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJaHctPmlkZW50X3N0YV9mdy5tYWpvciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9zdGFfZncubWFqb3IpOworCWh3LT5pZGVudF9zdGFfZncubWlub3IgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfc3RhX2Z3Lm1pbm9yKTsKIAogCS8qIHN0cmlwIG91dCB0aGUgJ3NwZWNpYWwnIHZhcmlhbnQgYml0cyAqLwotCWh3LT5tbV9tb2RzID0gaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICYgKEJJVDE0IHwgQklUMTUpOwotCWh3LT5pZGVudF9zdGFfZncudmFyaWFudCAmPSB+KCh1MTYpKEJJVDE0IHwgQklUMTUpKTsKKwlody0+bW1fbW9kcyA9IGh3LT5pZGVudF9zdGFfZncudmFyaWFudCAmIChCSVQoMTQpIHwgQklUKDE1KSk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICY9IH4oKHUxNikgKEJJVCgxNCkgfCBCSVQoMTUpKSk7CiAKLQlpZiAgKCBody0+aWRlbnRfc3RhX2Z3LmlkID09IDB4MWYgKSB7Ci0JCVdMQU5fTE9HX0lORk8oCi0JCQkiaWRlbnQ6IHN0YSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKLQkJCWh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0JCQlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCWlmIChody0+aWRlbnRfc3RhX2Z3LmlkID09IDB4MWYpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImlkZW50OiBzdGEgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCSAgICAgICBody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKIAl9IGVsc2UgewotCQlXTEFOX0xPR19JTkZPKAotCQkJImlkZW50OiAgYXAgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCi0JCQlody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAotCQkJaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKLQkJV0xBTl9MT0dfRVJST1IoIlVuc3VwcG9ydGVkIFRlcnRpYXJ5IEFQIGZpcm1lYXJlIGxvYWRlZCFcbiIpOworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiaWRlbnQ6ICBhcCBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJICAgICAgIGh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCSAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCQlwcmludGsoS0VSTl9FUlIgIlVuc3VwcG9ydGVkIFRlcnRpYXJ5IEFQIGZpcm1lYXJlIGxvYWRlZCFcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBNb2RlbSBzdXBwbGllciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX01GSVNVUFJBTkdFLAotCQkJJmh3LT5jYXBfc3VwX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIE1GSVNVUFJBTkdFXG4iKTsKKwkJCQkJJmh3LT5jYXBfc3VwX21maSwKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgTUZJU1VQUkFOR0VcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBtb2RlbSBpbnRlcmZhY2Ugc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfc3VwX21maS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5yb2xlKTsKLQlody0+Y2FwX3N1cF9tZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLmlkKTsKLQlody0+Y2FwX3N1cF9tZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkudmFyaWFudCk7Ci0JaHctPmNhcF9zdXBfbWZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkuYm90dG9tKTsKLQlody0+Y2FwX3N1cF9tZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfbWZpLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9tZmkucm9sZSk7CisJaHctPmNhcF9zdXBfbWZpLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfbWZpLmlkKTsKKwlody0+Y2FwX3N1cF9tZmkudmFyaWFudCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX21maS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9tZmkuYm90dG9tID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfbWZpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfbWZpLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX21maS50b3ApOwogCi0JV0xBTl9MT0dfSU5GTygKLQkJIk1GSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX3N1cF9tZmkucm9sZSwgaHctPmNhcF9zdXBfbWZpLmlkLAotCQlody0+Y2FwX3N1cF9tZmkudmFyaWFudCwgaHctPmNhcF9zdXBfbWZpLmJvdHRvbSwKLQkJaHctPmNhcF9zdXBfbWZpLnRvcCk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiTUZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJICAgICAgIGh3LT5jYXBfc3VwX21maS5yb2xlLCBody0+Y2FwX3N1cF9tZmkuaWQsCisJICAgICAgIGh3LT5jYXBfc3VwX21maS52YXJpYW50LCBody0+Y2FwX3N1cF9tZmkuYm90dG9tLAorCSAgICAgICBody0+Y2FwX3N1cF9tZmkudG9wKTsKIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIENvbnRyb2xsZXIgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DRklTVVBSQU5HRSwKLQkJCSZody0+Y2FwX3N1cF9jZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBDRklTVVBSQU5HRVxuIik7CisJCQkJCSZody0+Y2FwX3N1cF9jZmksCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIENGSVNVUFJBTkdFXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgY29udHJvbGxlciBpbnRlcmZhY2Ugc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfc3VwX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5yb2xlKTsKLQlody0+Y2FwX3N1cF9jZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLmlkKTsKLQlody0+Y2FwX3N1cF9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkudmFyaWFudCk7Ci0JaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkuYm90dG9tKTsKLQlody0+Y2FwX3N1cF9jZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfY2ZpLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9jZmkucm9sZSk7CisJaHctPmNhcF9zdXBfY2ZpLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfY2ZpLmlkKTsKKwlody0+Y2FwX3N1cF9jZmkudmFyaWFudCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9jZmkuYm90dG9tID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfY2ZpLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX2NmaS50b3ApOwogCi0JV0xBTl9MT0dfSU5GTygKLQkJIkNGSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX3N1cF9jZmkucm9sZSwgaHctPmNhcF9zdXBfY2ZpLmlkLAotCQlody0+Y2FwX3N1cF9jZmkudmFyaWFudCwgaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSwKLQkJaHctPmNhcF9zdXBfY2ZpLnRvcCk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiQ0ZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJICAgICAgIGh3LT5jYXBfc3VwX2NmaS5yb2xlLCBody0+Y2FwX3N1cF9jZmkuaWQsCisJICAgICAgIGh3LT5jYXBfc3VwX2NmaS52YXJpYW50LCBody0+Y2FwX3N1cF9jZmkuYm90dG9tLAorCSAgICAgICBody0+Y2FwX3N1cF9jZmkudG9wKTsKIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIFByaW1hcnkgZi93IHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UsCi0JCQkmaHctPmNhcF9zdXBfcHJpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUFJJU1VQUkFOR0VcbiIpOworCQkJCQkmaHctPmNhcF9zdXBfcHJpLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBQUklTVVBSQU5HRVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHByaW1hcnkgZmlybXdhcmUgc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfc3VwX3ByaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5yb2xlKTsKLQlody0+Y2FwX3N1cF9wcmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLmlkKTsKLQlody0+Y2FwX3N1cF9wcmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkudmFyaWFudCk7Ci0JaHctPmNhcF9zdXBfcHJpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkuYm90dG9tKTsKLQlody0+Y2FwX3N1cF9wcmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfcHJpLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9wcmkucm9sZSk7CisJaHctPmNhcF9zdXBfcHJpLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfcHJpLmlkKTsKKwlody0+Y2FwX3N1cF9wcmkudmFyaWFudCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3ByaS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9wcmkuYm90dG9tID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfcHJpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfcHJpLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3ByaS50b3ApOwogCi0JV0xBTl9MT0dfSU5GTygKLQkJIlBSSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX3N1cF9wcmkucm9sZSwgaHctPmNhcF9zdXBfcHJpLmlkLAotCQlody0+Y2FwX3N1cF9wcmkudmFyaWFudCwgaHctPmNhcF9zdXBfcHJpLmJvdHRvbSwKLQkJaHctPmNhcF9zdXBfcHJpLnRvcCk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiUFJJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJICAgICAgIGh3LT5jYXBfc3VwX3ByaS5yb2xlLCBody0+Y2FwX3N1cF9wcmkuaWQsCisJICAgICAgIGh3LT5jYXBfc3VwX3ByaS52YXJpYW50LCBody0+Y2FwX3N1cF9wcmkuYm90dG9tLAorCSAgICAgICBody0+Y2FwX3N1cF9wcmkudG9wKTsKIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIFN0YXRpb24gZi93IHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBU1VQUkFOR0UsCi0JCQkmaHctPmNhcF9zdXBfc3RhLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBU1VQUkFOR0VcbiIpOworCQkJCQkmaHctPmNhcF9zdXBfc3RhLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFTVVBSQU5HRVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YXRpb24gZmlybXdhcmUgc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfc3VwX3N0YS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5yb2xlKTsKLQlody0+Y2FwX3N1cF9zdGEuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLmlkKTsKLQlody0+Y2FwX3N1cF9zdGEudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEudmFyaWFudCk7Ci0JaHctPmNhcF9zdXBfc3RhLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEuYm90dG9tKTsKLQlody0+Y2FwX3N1cF9zdGEudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfc3RhLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9zdGEucm9sZSk7CisJaHctPmNhcF9zdXBfc3RhLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfc3RhLmlkKTsKKwlody0+Y2FwX3N1cF9zdGEudmFyaWFudCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3N0YS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9zdGEuYm90dG9tID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfc3RhLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfc3RhLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3N0YS50b3ApOwogCi0JaWYgKCBody0+Y2FwX3N1cF9zdGEuaWQgPT0gMHgwNCApIHsKLQkJV0xBTl9MT0dfSU5GTygKLQkJIlNUQTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAotCQlody0+Y2FwX3N1cF9zdGEudmFyaWFudCwgaHctPmNhcF9zdXBfc3RhLmJvdHRvbSwKLQkJaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJaWYgKGh3LT5jYXBfc3VwX3N0YS5pZCA9PSAweDA0KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJTVEE6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJICAgICAgIGh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCisJCSAgICAgICBody0+Y2FwX3N1cF9zdGEudmFyaWFudCwgaHctPmNhcF9zdXBfc3RhLmJvdHRvbSwKKwkJICAgICAgIGh3LT5jYXBfc3VwX3N0YS50b3ApOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX0lORk8oCi0JCSJBUDpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAotCQlody0+Y2FwX3N1cF9zdGEudmFyaWFudCwgaHctPmNhcF9zdXBfc3RhLmJvdHRvbSwKLQkJaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJBUDpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnJvbGUsIGh3LT5jYXBfc3VwX3N0YS5pZCwKKwkJICAgICAgIGh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnRvcCk7CiAJfQogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmL3cgYWN0b3IsIENGSSBzdXBwbGllciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMsCi0JCQkmaHctPmNhcF9hY3RfcHJpX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSV9DRklBQ1RSQU5HRVNcbiIpOworCQkJCQkmaHctPmNhcF9hY3RfcHJpX2NmaSwKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgUFJJX0NGSUFDVFJBTkdFU1xuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHByaW1hcnkgZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUpOwotCWh3LT5jYXBfYWN0X3ByaV9jZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS5pZCk7Ci0JaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCk7Ci0JaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20pOwotCWh3LT5jYXBfYWN0X3ByaV9jZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKKwkgICBmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS5pZCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkuaWQpOworCWh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCA9CisJICAgIGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20gPQorCSAgICBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS50b3AgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiUFJJLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3ByaV9jZmkuaWQsCi0JCWh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20sCi0JCWh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJQUkktQ0ZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJICAgICAgIGh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSwgaHctPmNhcF9hY3RfcHJpX2NmaS5pZCwKKwkgICAgICAgaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50LCBody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSwKKwkgICAgICAgaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhIGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBX0NGSUFDVFJBTkdFUywKLQkJCSZody0+Y2FwX2FjdF9zdGFfY2ZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBX0NGSUFDVFJBTkdFU1xuIik7CisJCQkJCSZody0+Y2FwX2FjdF9zdGFfY2ZpLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFfQ0ZJQUNUUkFOR0VTXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhdGlvbiBmL3cgYWN0b3IsIENGSSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkucm9sZSk7Ci0JaHctPmNhcF9hY3Rfc3RhX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLmlkKTsKLQlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50KTsKLQlody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSk7Ci0JaHctPmNhcF9hY3Rfc3RhX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS5pZCk7CisJaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50ID0KKwkgICAgbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSA9CisJICAgIGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9jZmkudG9wKTsKIAotCVdMQU5fTE9HX0lORk8oCi0JCSJTVEEtQ0ZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfYWN0X3N0YV9jZmkucm9sZSwgaHctPmNhcF9hY3Rfc3RhX2NmaS5pZCwKLQkJaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50LCBody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSwKLQkJaHctPmNhcF9hY3Rfc3RhX2NmaS50b3ApOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIlNUQS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9zdGFfY2ZpLmlkLAorCSAgICAgICBody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tLAorCSAgICAgICBody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CiAKIAkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGEgZi93IGFjdG9yLCBNRkkgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTLAotCQkJJmh3LT5jYXBfYWN0X3N0YV9tZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFfTUZJQUNUUkFOR0VTXG4iKTsKKwkJCQkJJmh3LT5jYXBfYWN0X3N0YV9tZmksCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9NRklBQ1RSQU5HRVNcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgTUZJIHN1cHBsaWVyCi0JZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KLQlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5yb2xlKTsKLQlody0+Y2FwX2FjdF9zdGFfbWZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQpOwotCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQpOwotCWh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tKTsKLQlody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLmlkKTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQgPQorCSAgICBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tID0KKwkgICAgbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20pOworCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX21maS50b3ApOwogCi0JV0xBTl9MT0dfSU5GTygKLQkJIlNUQS1NRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKLQkJaHctPmNhcF9hY3Rfc3RhX21maS5yb2xlLCBody0+Y2FwX2FjdF9zdGFfbWZpLmlkLAotCQlody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tLAotCQlody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiU1RBLU1GSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCSAgICAgICBody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQsCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKIAogCS8qIFNlcmlhbCBOdW1iZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVIsCi0JCQlzbnVtLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOKTsKLQlpZiAoICFyZXN1bHQgKSB7CisJCQkJCXNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4pOworCWlmICghcmVzdWx0KSB7CiAJCXdsYW5fbWtwcmludHN0cihzbnVtLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOLAogCQkJCXBzdHIsIHNpemVvZihwc3RyKSk7Ci0JCVdMQU5fTE9HX0lORk8oIlByaXNtMiBjYXJkIFNOOiAlc1xuIiwgcHN0cik7CisJCXByaW50ayhLRVJOX0lORk8gIlByaXNtMiBjYXJkIFNOOiAlc1xuIiwgcHN0cik7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQcmlzbTIgQ2FyZCBTTlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFByaXNtMiBDYXJkIFNOXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogQ29sbGVjdCB0aGUgTUFDIGFkZHJlc3MgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSLAotCQl3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKLQlpZiAoIHJlc3VsdCAhPSAwICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIG1hYyBhZGRyZXNzXG4iKTsKKwkJCQkJd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBtYWMgYWRkcmVzc1xuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtOTM5LDEwICs5MDYsMTAgQEAKIAlody0+ZGJtYWRqdXN0ID0gdGVtcDsKIAogCS8qIE9ubHkgZW5hYmxlIHNjYW4gYnkgZGVmYXVsdCBvbiBuZXdlciBmaXJtd2FyZSAqLwotICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKLQkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsNSw1KSkgeworCWlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsIDUsIDUpKSB7CiAJCXdsYW5kZXYtPm5zZGNhcHMgfD0gUDgwMjExX05TRENBUF9OT1NDQU47CiAJfQogCkBAIC05NTAsMTMgKzkxNywxMSBAQAogCiAJZ290byBkb25lOwogZmFpbGVkOgotCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogZG9uZToKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9nbG9iYWxzZXR1cAogKgpAQCAtOTc3LDQzICs5NDIsMzMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CiAKIAkvKiBTZXQgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSAqLwogCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9EQVRBX01BWExFTik7CisJCQkJCVdMQU5fREFUQV9NQVhMRU4pOwogfQogCiBzdGF0aWMgaW50IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBuZXRkZXZpY2VfdCAqZGV2KQogewogCWludCByZXN1bHQgPSAwOwotCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CiAKLQl1MTYgIHByb21pc2M7Ci0KLQlEQkZFTlRFUjsKKwl1MTYgcHJvbWlzYzsKIAogCS8qIElmIHdlJ3JlIG5vdCByZWFkeSwgd2hhdCdzIHRoZSBwb2ludD8gKi8KLQlpZiAoIGh3LT5zdGF0ZSAhPSBIRkEzODR4X1NUQVRFX1JVTk5JTkcgKQorCWlmIChody0+c3RhdGUgIT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HKQogCQlnb3RvIGV4aXQ7CiAKLQlpZiAoIChkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkgIT0gMCApCisJaWYgKChkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkgIT0gMCkKIAkJcHJvbWlzYyA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKIAllbHNlCiAJCXByb21pc2MgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOwogCi0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2X2FzeW5jKGh3LCBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgcHJvbWlzYyk7Ci0KLQkvKiBYWFggVE9ETzogY29uZmlndXJlIHRoZSBtdWx0aWNhc3QgbGlzdCAqLwotCS8vIENMRUFSX0hXX01VTFRJQ0FTVF9MSVNUCi0JLy8gc3RydWN0IGRldl9tY19saXN0IGVsZW1lbnQgPSBkZXYtPm1jX2xpc3Q7Ci0JLy8gd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkgewotCS8vICBIV19BRERfTVVMVElDQVNUX0FERFIoZWxlbWVudC0+ZG1pX2FkZHIsIGRtaV9hZGRybGVuKQotCS8vICBlbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKLQkvLyB9Ci0KLSBleGl0OgotCURCRkVYSVQ7CisJcmVzdWx0ID0KKwkgICAgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2X2FzeW5jKGh3LCBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwKKwkJCQkJICAgcHJvbWlzYyk7CitleGl0OgogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwMzUsMTUgKzk5MCwxMyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRygyLCJyZWNlaXZlZCBpbmZvZnJhbWU6SEFORE9WRVIgKHVuaGFuZGxlZClcbiIpOwotCURCRkVYSVQ7CisJcHJfZGVidWcoInJlY2VpdmVkIGluZm9mcmFtZTpIQU5ET1ZFUiAodW5oYW5kbGVkKVxuIik7CiAJcmV0dXJuOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfaW5mX3RhbGxpZXMKICoKQEAgLTEwNjEsMzcgKzEwMTQsMzQgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl90YWxsaWVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCXUxNgkJCSpzcmMxNjsKLQl1MzIJCQkqZHN0OwotCXUzMgkJCSpzcmMzMjsKLQlpbnQJCQlpOwotCWludAkJCWNudDsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJdTE2ICpzcmMxNjsKKwl1MzIgKmRzdDsKKwl1MzIgKnNyYzMyOworCWludCBpOworCWludCBjbnQ7CiAKIAkvKgotCSoqIERldGVybWluZSBpZiB0aGVzZSBhcmUgMTYtYml0IG9yIDMyLWJpdCB0YWxsaWVzLCBiYXNlZCBvbiB0aGUKLQkqKiByZWNvcmQgbGVuZ3RoIG9mIHRoZSBpbmZvIHJlY29yZC4KLQkqLworCSAqKiBEZXRlcm1pbmUgaWYgdGhlc2UgYXJlIDE2LWJpdCBvciAzMi1iaXQgdGFsbGllcywgYmFzZWQgb24gdGhlCisJICoqIHJlY29yZCBsZW5ndGggb2YgdGhlIGluZm8gcmVjb3JkLgorCSAqLwogCiAJY250ID0gc2l6ZW9mKGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90KSAvIHNpemVvZih1MzIpOwogCWlmIChpbmYtPmZyYW1lbGVuID4gMjIpIHsKLQkJZHN0ICAgPSAodTMyICopICZody0+dGFsbGllczsKLQkJc3JjMzIgPSAodTMyICopICZpbmYtPmluZm8uY29tbXRhbGxpZXMzMjsKKwkJZHN0ID0gKHUzMiAqKSZody0+dGFsbGllczsKKwkJc3JjMzIgPSAodTMyICopJmluZi0+aW5mby5jb21tdGFsbGllczMyOwogCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGRzdCsrLCBzcmMzMisrKQotCQkJKmRzdCArPSBoZmEzODR4Mmhvc3RfMzIoKnNyYzMyKTsKKwkJCSpkc3QgKz0gbGUzMl90b19jcHUoKnNyYzMyKTsKIAl9IGVsc2UgewotCQlkc3QgICA9ICh1MzIgKikgJmh3LT50YWxsaWVzOwotCQlzcmMxNiA9ICh1MTYgKikgJmluZi0+aW5mby5jb21tdGFsbGllczE2OworCQlkc3QgPSAodTMyICopJmh3LT50YWxsaWVzOworCQlzcmMxNiA9ICh1MTYgKikmaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CiAJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzE2KyspCi0JCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8xNigqc3JjMTYpOworCQkJKmRzdCArPSBsZTE2X3RvX2NwdSgqc3JjMTYpOwogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTExMTYsNDQgKzEwNjYsNDAgQEAKIAkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKIAotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQlpbnQJCQluYnNzOwotCWhmYTM4NHhfU2NhblJlc3VsdF90CSpzciA9ICYoaW5mLT5pbmZvLnNjYW5yZXN1bHQpOwotCWludAkJCWk7Ci0JaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QJam9pbnJlcTsKLQlpbnQJCQlyZXN1bHQ7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwlpbnQgbmJzczsKKwloZmEzODR4X1NjYW5SZXN1bHRfdCAqc3IgPSAmKGluZi0+aW5mby5zY2FucmVzdWx0KTsKKwlpbnQgaTsKKwloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCBqb2lucmVxOworCWludCByZXN1bHQ7CiAKIAkvKiBHZXQgdGhlIG51bWJlciBvZiByZXN1bHRzLCBmaXJzdCBpbiBieXRlcywgdGhlbiBpbiByZXN1bHRzICovCiAJbmJzcyA9IChpbmYtPmZyYW1lbGVuICogc2l6ZW9mKHUxNikpIC0KLQkJc2l6ZW9mKGluZi0+aW5mb3R5cGUpIC0KLQkJc2l6ZW9mKGluZi0+aW5mby5zY2FucmVzdWx0LnNjYW5yZWFzb24pOworCSAgICBzaXplb2YoaW5mLT5pbmZvdHlwZSkgLSBzaXplb2YoaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbik7CiAJbmJzcyAvPSBzaXplb2YoaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QpOwogCiAJLyogUHJpbnQgZW0gKi8KLQlXTEFOX0xPR19ERUJVRygxLCJyeCBzY2FucmVzdWx0cywgcmVhc29uPSVkLCBuYnNzPSVkOlxuIiwKLQkJaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbiwgbmJzcyk7Ci0JZm9yICggaSA9IDA7IGkgPCBuYnNzOyBpKyspIHsKLQkJV0xBTl9MT0dfREVCVUcoMSwgImNoaWQ9JWQgYW5sPSVkIHNsPSVkIGJjbmludD0lZFxuIiwKLQkJCXNyLT5yZXN1bHRbaV0uY2hpZCwKLQkJCXNyLT5yZXN1bHRbaV0uYW5sLAotCQkJc3ItPnJlc3VsdFtpXS5zbCwKLQkJCXNyLT5yZXN1bHRbaV0uYmNuaW50KTsKLQkJV0xBTl9MT0dfREVCVUcoMSwgIiAgY2FwaW5mbz0weCUwNHggcHJvYmVyZXNwX3JhdGU9JWRcbiIsCi0JCQlzci0+cmVzdWx0W2ldLmNhcGluZm8sCi0JCQlzci0+cmVzdWx0W2ldLnByb2JlcmVzcF9yYXRlKTsKKwlwcl9kZWJ1Zygicnggc2NhbnJlc3VsdHMsIHJlYXNvbj0lZCwgbmJzcz0lZDpcbiIsCisJICAgICAgIGluZi0+aW5mby5zY2FucmVzdWx0LnNjYW5yZWFzb24sIG5ic3MpOworCWZvciAoaSA9IDA7IGkgPCBuYnNzOyBpKyspIHsKKwkJcHJfZGVidWcoImNoaWQ9JWQgYW5sPSVkIHNsPSVkIGJjbmludD0lZFxuIiwKKwkJICAgICAgIHNyLT5yZXN1bHRbaV0uY2hpZCwKKwkJICAgICAgIHNyLT5yZXN1bHRbaV0uYW5sLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5zbCwgc3ItPnJlc3VsdFtpXS5iY25pbnQpOworCQlwcl9kZWJ1ZygiICBjYXBpbmZvPTB4JTA0eCBwcm9iZXJlc3BfcmF0ZT0lZFxuIiwKKwkJICAgICAgIHNyLT5yZXN1bHRbaV0uY2FwaW5mbywgc3ItPnJlc3VsdFtpXS5wcm9iZXJlc3BfcmF0ZSk7CiAJfQogCS8qIGlzc3VlIGEgam9pbiByZXF1ZXN0ICovCiAJam9pbnJlcS5jaGFubmVsID0gc3ItPnJlc3VsdFswXS5jaGlkOwotCW1lbWNweSggam9pbnJlcS5ic3NpZCwgc3ItPnJlc3VsdFswXS5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOwotCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCi0JCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwltZW1jcHkoam9pbnJlcS5ic3NpZCwgc3ItPnJlc3VsdFswXS5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCisJCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKIAlpZiAocmVzdWx0KSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoam9pbnJlcSkgZmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKGpvaW5yZXEpIGZhaWxlZCwgcmVzdWx0PSVkXG4iLAorCQkgICAgICAgcmVzdWx0KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIApAQCAtMTE3NywxOCArMTEyMywxNiBAQAogc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQlpbnQJCQluYnNzOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJaW50IG5ic3M7CiAKIAluYnNzID0gKGluZi0+ZnJhbWVsZW4gLSAzKSAvIDMyOwotCVdMQU5fTE9HX0RFQlVHKDEsICJSZWNlaXZlZCAlZCBob3N0c2NhbiByZXN1bHRzXG4iLCBuYnNzKTsKKwlwcl9kZWJ1ZygiUmVjZWl2ZWQgJWQgaG9zdHNjYW4gcmVzdWx0c1xuIiwgbmJzcyk7CiAKIAlpZiAobmJzcyA+IDMyKQogCQluYnNzID0gMzI7CiAKLQlpZiAoaHctPnNjYW5yZXN1bHRzKQotCQlrZnJlZShody0+c2NhbnJlc3VsdHMpOworCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CiAKIAlody0+c2NhbnJlc3VsdHMgPSBrbWFsbG9jKHNpemVvZihoZmEzODR4X0luZkZyYW1lX3QpLCBHRlBfQVRPTUlDKTsKIAltZW1jcHkoaHctPnNjYW5yZXN1bHRzLCBpbmYsIHNpemVvZihoZmEzODR4X0luZkZyYW1lX3QpKTsKQEAgLTExOTYsMTEgKzExNDAsOSBAQAogCWlmIChuYnNzID09IDApCiAJCW5ic3MgPSAtMTsKIAotICAgICAgICAvKiBOb3RpZnkvd2FrZSB0aGUgc2xlZXBpbmcgY2FsbGVyLiAqLwotICAgICAgICBody0+c2NhbmZsYWcgPSBuYnNzOwotICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmh3LT5jbWRxKTsKLQotCURCRkVYSVQ7CisJLyogTm90aWZ5L3dha2UgdGhlIHNsZWVwaW5nIGNhbGxlci4gKi8KKwlody0+c2NhbmZsYWcgPSBuYnNzOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOwogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjIzLDU1ICsxMTY1LDYwIEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50CQlpLCBuOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJdW5zaWduZWQgaW50IGksIG47CiAKLQlEQkZFTlRFUjsKIAlody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMuc2NhbmNoYW5uZWxzID0KLQkJaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQuc2NhbmNoYW5uZWxzKTsKLSNpZiAwCi0JbWVtY3B5KCZpbmYtPmluZm8uY2hpbmZvcmVzdWx0LCAmaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLCBzaXplb2YoaGZhMzg0eF9DaEluZm9SZXN1bHRfdCkpOwotI2VuZGlmCisJICAgIGxlMTZfdG9fY3B1KGluZi0+aW5mby5jaGluZm9yZXN1bHQuc2NhbmNoYW5uZWxzKTsKIAotCWZvciAoaT0wLCBuPTA7IGk8SEZBMzg0eF9DSElORk9SRVNVTFRfTUFYOyBpKyspIHsKLQkJaWYgKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgJiAoMTw8aSkpIHsKLQkJCWludCAJY2hhbm5lbD1oZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uY2hpZCktMTsKLQkJCWhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViX3QgKmNoaW5mb3Jlc3VsdD0maHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXTsKLQkJCWNoaW5mb3Jlc3VsdC0+Y2hpZCAgID0gY2hhbm5lbDsKLQkJCWNoaW5mb3Jlc3VsdC0+YW5sICAgID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLmFubCk7Ci0JCQljaGluZm9yZXN1bHQtPnBubCAgICA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5wbmwpOwotCQkJY2hpbmZvcmVzdWx0LT5hY3RpdmUgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uYWN0aXZlKTsKLQkJCVdMQU5fTE9HX0RFQlVHKDIsICJjaGluZm86IGNoYW5uZWwgJWQsICVzIGxldmVsIChhdmcvcGVhayk9JWQvJWQgZEIsIHBjZiAlZFxuIiwKLQkJCQkJY2hhbm5lbCsxLAotCQkJCQljaGluZm9yZXN1bHQtPmFjdGl2ZSAmCi0JCQkJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRSA/ICJzaWduYWwiIDogIm5vaXNlIiwKLQkJCQkJY2hpbmZvcmVzdWx0LT5hbmwsIGNoaW5mb3Jlc3VsdC0+cG5sLAotCQkJCQljaGluZm9yZXN1bHQtPmFjdGl2ZSAmIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRSA/IDEgOiAwCi0JCQkpOworCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYOyBpKyspIHsKKwkJaWYgKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgJiAoMSA8PCBpKSkgeworCQkJaW50IGNoYW5uZWwgPQorCQkJICAgIGxlMTZfdG9fY3B1KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLgorCQkJCQkgICAgY2hpZCkgLSAxOworCQkJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCAqY2hpbmZvcmVzdWx0ID0KKwkJCSAgICAmaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXTsKKwkJCWNoaW5mb3Jlc3VsdC0+Y2hpZCA9IGNoYW5uZWw7CisJCQljaGluZm9yZXN1bHQtPmFubCA9CisJCQkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uCisJCQkJCSAgICBhbmwpOworCQkJY2hpbmZvcmVzdWx0LT5wbmwgPQorCQkJICAgIGxlMTZfdG9fY3B1KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLgorCQkJCQkgICAgcG5sKTsKKwkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlID0KKwkJCSAgICBsZTE2X3RvX2NwdShpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS4KKwkJCQkJICAgIGFjdGl2ZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJjaGluZm86IGNoYW5uZWwgJWQsICVzIGxldmVsIChhdmcvcGVhayk9JWQvJWQgZEIsIHBjZiAlZFxuIiwKKwkJCSAgICAgICBjaGFubmVsICsgMSwKKwkJCSAgICAgICBjaGluZm9yZXN1bHQtPgorCQkJICAgICAgIGFjdGl2ZSAmIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRSA/CisJCQkgICAgICAgInNpZ25hbCIgOiAibm9pc2UiLCBjaGluZm9yZXN1bHQtPmFubCwKKwkJCSAgICAgICBjaGluZm9yZXN1bHQtPnBubCwKKwkJCSAgICAgICBjaGluZm9yZXN1bHQtPgorCQkJICAgICAgIGFjdGl2ZSAmIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRSA/IDEgOiAwKTsKIAkJCW4rKzsKIAkJfQogCX0KIAlhdG9taWNfc2V0KCZody0+Y2hhbm5lbF9pbmZvLmRvbmUsIDIpOwogCiAJaHctPmNoYW5uZWxfaW5mby5jb3VudCA9IG47Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKIHZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCWhmYTM4NHhfdAkJKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCBsaW5rX2JoKTsKLQl3bGFuZGV2aWNlX3QgICAgICAgICAgICAqd2xhbmRldiA9IGh3LT53bGFuZGV2OworCWhmYTM4NHhfdCAqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGxpbmtfYmgpOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGh3LT53bGFuZGV2OwogCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKLQlpbnQJCQlyZXN1bHQ7CisJaW50IHJlc3VsdDsKIAotCURCRkVOVEVSOwogCS8qIEZpcnN0IGxldCdzIHByb2Nlc3MgdGhlIGF1dGggZnJhbWVzICovCiAJewotCQlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqc2tiOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQloZmEzODR4X0luZkZyYW1lX3QgKmluZjsKIAotCQl3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7CisJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmh3LT5hdXRocSkpKSB7CiAJCQlpbmYgPSAoaGZhMzg0eF9JbmZGcmFtZV90ICopIHNrYi0+ZGF0YTsKIAkJCXByaXNtMnN0YV9pbmZfYXV0aHJlcV9kZWZlcih3bGFuZGV2LCBpbmYpOwogCQl9CkBAIC0xMjg0LDcgKzEyMzEsNyBAQAogCiAJaHctPmxpbmtfc3RhdHVzID0gaHctPmxpbmtfc3RhdHVzX25ldzsKIAotCXN3aXRjaChody0+bGlua19zdGF0dXMpIHsKKwlzd2l0Y2ggKGh3LT5saW5rX3N0YXR1cykgewogCWNhc2UgSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDoKIAkJLyogSSdtIGN1cnJlbnRseSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgdGhlIGluaXRpYWwgbGluawogCQkgKiBzdGF0ZS4gIEl0IHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGltbWVkaWF0ZWx5CkBAIC0xMjk0LDcgKzEyNDEsNyBAQAogCQkgKi8KIAkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKIAotCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPU5PVENPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImxpbmtzdGF0dXM9Tk9UQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhGQTM4NHhfTElOS19DT05ORUNURUQ6CkBAIC0xMzExLDUzICsxMjU4LDU2IEBACiAJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKIAogCQkvKiBJZiB3ZSBhcmUgam9pbmluZyBhIHNwZWNpZmljIEFQLCBzZXQgb3VyIHN0YXRlIGFuZCByZXNldCByZXRyaWVzICovCi0JCWlmKGh3LT5qb2luX2FwID09IDEpCisJCWlmIChody0+am9pbl9hcCA9PSAxKQogCQkJaHctPmpvaW5fYXAgPSAyOwogCQlody0+am9pbl9yZXRyaWVzID0gNjA7CiAKIAkJLyogRG9uJ3QgY2FsbCB0aGlzIGluIG1vbml0b3IgbW9kZSAqLwotCQlpZiAoIHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIgKSB7Ci0JCQl1MTYJCQlwb3J0c3RhdHVzOworCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgeworCQkJdTE2IHBvcnRzdGF0dXM7CiAKLQkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9Q09OTkVDVEVEXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gImxpbmtzdGF0dXM9Q09OTkVDVEVEXG4iKTsKIAogCQkJLyogRm9yIG5vbi11c2IgZGV2aWNlcywgd2UgY2FuIHVzZSB0aGUgc3luYyB2ZXJzaW9ucyAqLwogCQkJLyogQ29sbGVjdCB0aGUgQlNTSUQsIGFuZCBzZXQgc3RhdGUgdG8gYWxsb3cgdHggKi8KIAogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCi0JCQkJCQkJd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKLQkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwkJCQkJCQl3bGFuZGV2LT5ic3NpZCwKKwkJCQkJCQlXTEFOX0JTU0lEX0xFTik7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KIAogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwKIAkJCQkJCQkmc3NpZCwgc2l6ZW9mKHNzaWQpKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKLQkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCQkJaWYgKHJlc3VsdCkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KIAkJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAotCQkJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOworCQkJCQkJKHA4MDIxMXBzdHJkX3QgKikmd2xhbmRldi0+CisJCQkJCQlzc2lkKTsKIAogCQkJLyogQ29sbGVjdCB0aGUgcG9ydCBzdGF0dXMgKi8KIAkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKLQkJCQkJCQkgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsICZwb3J0c3RhdHVzKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKLQkJCQkJICAgICAgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsIHJlc3VsdCk7CisJCQkJCQkJICBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLAorCQkJCQkJCSAgJnBvcnRzdGF0dXMpOworCQkJaWYgKHJlc3VsdCkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCSAgICAgICBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCQkJd2xhbmRldi0+bWFjbW9kZSA9Ci0JCQkJKHBvcnRzdGF0dXMgPT0gSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUykgPwotCQkJCVdMQU5fTUFDTU9ERV9JQlNTX1NUQSA6IFdMQU5fTUFDTU9ERV9FU1NfU1RBOworCQkJICAgIChwb3J0c3RhdHVzID09IEhGQTM4NHhfUFNUQVRVU19DT05OX0lCU1MpID8KKwkJCSAgICBXTEFOX01BQ01PREVfSUJTU19TVEEgOiBXTEFOX01BQ01PREVfRVNTX1NUQTsKIAogCQkJLyogR2V0IHRoZSBiYWxsIHJvbGxpbmcgb24gdGhlIGNvbW1zIHF1YWxpdHkgc3R1ZmYgKi8KIAkJCXByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIoJmh3LT5jb21tc3F1YWxfYmgpOwpAQCAtMTM3NCwxOCArMTMyNCwyMCBAQAogCQkgKiBJbmRpY2F0ZSBEZWF1dGhlbnRpY2F0aW9uCiAJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlpZihody0+am9pbl9hcCA9PSAyKQotCQl7Ci0JCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgICAgIGpvaW5yZXE7CisJCWlmIChody0+am9pbl9hcCA9PSAyKSB7CisJCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCBqb2lucmVxOwogCQkJam9pbnJlcSA9IGh3LT5qb2lucmVxOwogCQkJLyogU2VuZCB0aGUgam9pbiByZXF1ZXN0ICovCi0JCQloZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKLQkJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKLQkJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKLQkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEIChyZS1zdWJtaXR0aW5nIGpvaW4pXG4iKTsKKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCQkJICAgICAgICZqb2lucmVxLAorCQkJCQkgICAgICAgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOwogCQl9IGVsc2UgewogCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpCi0JCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKIAkJfQogCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CiAKQEAgLTE0MDgsMzAgKzEzNjAsMjkgQEAKIAkJICogSW5kaWNhdGUgUmVhc3NvY2lhdGlvbgogCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcwogCQkgKi8KLQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BUF9DSEFOR0VcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJsaW5rc3RhdHVzPUFQX0NIQU5HRVxuIik7CiAKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKIAkJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCi0JCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCiAJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwKIAkJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAotCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7Ci0KKwkJCQkJKHA4MDIxMXBzdHJkX3QgKikmd2xhbmRldi0+c3NpZCk7CiAKIAkJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDsKIAkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOwpAQCAtMTQ1MCw3ICsxNDAxLDcgQEAKIAkJICogUmVzcG9uc2U6CiAJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX09VVE9GUkFOR0UgKHVuaGFuZGxlZClcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJsaW5rc3RhdHVzPUFQX09VVE9GUkFOR0UgKHVuaGFuZGxlZClcbiIpOwogCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CiAKQEAgLTE0NjMsNyArMTQxNCw3IEBACiAJCSAqIFJlc3BvbnNlOgogCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcwogCQkgKi8KLQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BUF9JTlJBTkdFXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGlua3N0YXR1cz1BUF9JTlJBTkdFXG4iKTsKIAogCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOwogCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CkBAIC0xNDc5LDE3ICsxNDMwLDE4IEBACiAJCSAqIFJlc3BvbnNlOgogCQkgKiBEaXNhYmxlIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlpZihody0+am9pbl9hcCAmJiAtLWh3LT5qb2luX3JldHJpZXMgPiAwKQotCQl7Ci0JCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgICAgIGpvaW5yZXE7CisJCWlmIChody0+am9pbl9hcCAmJiAtLWh3LT5qb2luX3JldHJpZXMgPiAwKSB7CisJCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCBqb2lucmVxOwogCQkJam9pbnJlcSA9IGh3LT5qb2lucmVxOwogCQkJLyogU2VuZCB0aGUgam9pbiByZXF1ZXN0ICovCi0JCQloZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKLQkJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKLQkJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKLQkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVNTT0NGQUlMIChyZS1zdWJtaXR0aW5nIGpvaW4pXG4iKTsKKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCQkJICAgICAgICZqb2lucmVxLAorCQkJCQkgICAgICAgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOwogCQl9IGVsc2UgewotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHVuaGFuZGxlZClcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHVuaGFuZGxlZClcbiIpOwogCQl9CiAKIAkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKQEAgLTE0OTgsOCArMTQ1MCw4IEBACiAKIAlkZWZhdWx0OgogCQkvKiBUaGlzIGlzIGJhZCwgSU8gcG9ydCBwcm9ibGVtcz8gKi8KLQkJV0xBTl9MT0dfV0FSTklORygKLQkJCSJ1bmtub3duIGxpbmtzdGF0dXM9MHglMDJ4XG4iLCBody0+bGlua19zdGF0dXMpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAidW5rbm93biBsaW5rc3RhdHVzPTB4JTAyeFxuIiwgaHctPmxpbmtfc3RhdHVzKTsKIAkJZ290byBmYWlsZWQ7CiAJCWJyZWFrOwogCX0KQEAgLTE1MDksOCArMTQ2MSw4IEBACiAJcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHdsYW5kZXYsIHdsYW5kZXYtPmxpbmtzdGF0dXMpOwogI2VuZGlmCiAKLSBmYWlsZWQ6Ci0JREJGRVhJVDsKK2ZhaWxlZDoKKwlyZXR1cm47CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUzMywxNSArMTQ4NSwxMiBAQAogc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCi0JREJGRU5URVI7Ci0KLQlody0+bGlua19zdGF0dXNfbmV3ID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5saW5rc3RhdHVzLmxpbmtzdGF0dXMpOworCWh3LT5saW5rX3N0YXR1c19uZXcgPSBsZTE2X3RvX2NwdShpbmYtPmluZm8ubGlua3N0YXR1cy5saW5rc3RhdHVzKTsKIAogCXNjaGVkdWxlX3dvcmsoJmh3LT5saW5rX2JoKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0xNTY2LDQ1ICsxNTE1LDQzIEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JaGZhMzg0eF9Bc3NvY1N0YXR1c190CXJlYzsKLQlpbnQJCQlpOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X0Fzc29jU3RhdHVzX3QgcmVjOworCWludCBpOwogCiAJbWVtY3B5KCZyZWMsICZpbmYtPmluZm8uYXNzb2NzdGF0dXMsIHNpemVvZihyZWMpKTsKLQlyZWMuYXNzb2NzdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYocmVjLmFzc29jc3RhdHVzKTsKLQlyZWMucmVhc29uICAgICAgPSBoZmEzODR4Mmhvc3RfMTYocmVjLnJlYXNvbik7CisJcmVjLmFzc29jc3RhdHVzID0gbGUxNl90b19jcHUocmVjLmFzc29jc3RhdHVzKTsKKwlyZWMucmVhc29uID0gbGUxNl90b19jcHUocmVjLnJlYXNvbik7CiAKIAkvKgotCSoqIEZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIElmIGl0IHdhc24ndAotCSoqIGZvdW5kLCB0aGVuIHRoaXMgYWRkcmVzcyBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBhdXRoZW50aWNhdGVkIGFuZAotCSoqIHNvbWV0aGluZyB3ZWlyZCBoYXMgaGFwcGVuZWQgaWYgdGhpcyBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuCi0JKiogImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIgbWVzc2FnZS4gIElmIHRoZSBhZGRyZXNzIHdhcyBmb3VuZCwgdGhlbgotCSoqIHNldCB0aGUgImFzc29jaWF0ZWQiIGZsYWcgZm9yIHRoYXQgc3RhdGlvbiwgYmFzZWQgb24gd2hldGhlciB0aGUKLQkqKiBzdGF0aW9uIGlzIGFzc29jaWF0aW5nIG9yIGxvc2luZyBpdHMgYXNzb2NpYXRpb24uICBTb21ldGhpbmcgd2VpcmQKLQkqKiBoYXMgYWxzbyBoYXBwZW5lZCBpZiB3ZSBmaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQKLQkqKiBzdGF0aW9ucyBidXQgd2UgYXJlIGdldHRpbmcgYW4gImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIgbWVzc2FnZS4KLQkqLworCSAqKiBGaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuICBJZiBpdCB3YXNuJ3QKKwkgKiogZm91bmQsIHRoZW4gdGhpcyBhZGRyZXNzIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQgYW5kCisJICoqIHNvbWV0aGluZyB3ZWlyZCBoYXMgaGFwcGVuZWQgaWYgdGhpcyBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuCisJICoqICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuICBJZiB0aGUgYWRkcmVzcyB3YXMgZm91bmQsIHRoZW4KKwkgKiogc2V0IHRoZSAiYXNzb2NpYXRlZCIgZmxhZyBmb3IgdGhhdCBzdGF0aW9uLCBiYXNlZCBvbiB3aGV0aGVyIHRoZQorCSAqKiBzdGF0aW9uIGlzIGFzc29jaWF0aW5nIG9yIGxvc2luZyBpdHMgYXNzb2NpYXRpb24uICBTb21ldGhpbmcgd2VpcmQKKwkgKiogaGFzIGFsc28gaGFwcGVuZWQgaWYgd2UgZmluZCB0aGUgYWRkcmVzcyBpbiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkCisJICoqIHN0YXRpb25zIGJ1dCB3ZSBhcmUgZ2V0dGluZyBhbiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLgorCSAqLwogCiAJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKLQkJaWYgKG1lbWNtcChyZWMuc3RhX2FkZHIsIGh3LT5hdXRobGlzdC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKSA9PSAwKQorCQlpZiAobWVtY21wKHJlYy5zdGFfYWRkciwgaHctPmF1dGhsaXN0LmFkZHJbaV0sIEVUSF9BTEVOKSA9PSAwKQogCQkJYnJlYWs7CiAKIAlpZiAoaSA+PSBody0+YXV0aGxpc3QuY250KSB7CiAJCWlmIChyZWMuYXNzb2NzdGF0dXMgIT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTCkKLQkJCVdMQU5fTE9HX1dBUk5JTkcoImFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIG5vbi1hdXRoZW50aWNhdGVkIHN0YXRpb24uXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3Igbm9uLWF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOwogCX0gZWxzZSB7CiAJCWh3LT5hdXRobGlzdC5hc3NvY1tpXSA9Ci0JCQkocmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfU1RBQVNTT0MgfHwKLQkJCSByZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DKTsKKwkJICAgIChyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19TVEFBU1NPQyB8fAorCQkgICAgIHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1JFQVNTT0MpOwogCiAJCWlmIChyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTCkKLQkJCVdMQU5fTE9HX1dBUk5JTkcoImF1dGhmYWlsIGFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhdXRoZmFpbCBhc3NvY3N0YXR1cyBpbmZvIGZyYW1lIHJlY2VpdmVkIGZvciBhdXRoZW50aWNhdGVkIHN0YXRpb24uXG4iKTsKIAl9CiAKLQlEQkZFWElUOwotCiAJcmV0dXJuOwogfQogCkBAIC0xNjMwLDExICsxNTc3LDkgQEAKIHN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXV0aHJlcSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JREJGRU5URVI7Ci0KIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqaW5mKSk7CiAJaWYgKHNrYikgewogCQlza2JfcHV0KHNrYiwgc2l6ZW9mKCppbmYpKTsKQEAgLTE2NDIsMTMyICsxNTg3LDEyOSBAQAogCQlza2JfcXVldWVfdGFpbCgmaHctPmF1dGhxLCBza2IpOwogCQlzY2hlZHVsZV93b3JrKCZody0+bGlua19iaCk7CiAJfQotCi0JREJGRVhJVDsKIH0KIAogc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QgIHJlYzsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QgcmVjOwogCi0JaW50ICAgIGksIGFkZGVkLCByZXN1bHQsIGNudDsKLQl1OCAgKmFkZHI7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgaSwgYWRkZWQsIHJlc3VsdCwgY250OworCXU4ICphZGRyOwogCiAJLyoKLQkqKiBCdWlsZCB0aGUgQXV0aGVudGljYXRlU3RhdGlvbiByZWNvcmQuICBJbml0aWFsaXplIGl0IGZvciBkZW55aW5nCi0JKiogYXV0aGVudGljYXRpb24uCi0JKi8KKwkgKiogQnVpbGQgdGhlIEF1dGhlbnRpY2F0ZVN0YXRpb24gcmVjb3JkLiAgSW5pdGlhbGl6ZSBpdCBmb3IgZGVueWluZworCSAqKiBhdXRoZW50aWNhdGlvbi4KKwkgKi8KIAotCW1lbWNweShyZWMuYWRkcmVzcywgaW5mLT5pbmZvLmF1dGhyZXEuc3RhX2FkZHIsIFdMQU5fQUREUl9MRU4pOworCW1lbWNweShyZWMuYWRkcmVzcywgaW5mLT5pbmZvLmF1dGhyZXEuc3RhX2FkZHIsIEVUSF9BTEVOKTsKIAlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmU7CiAKIAkvKgotCSoqIEF1dGhlbnRpY2F0ZSBiYXNlZCBvbiB0aGUgYWNjZXNzIG1vZGUuCi0JKi8KKwkgKiogQXV0aGVudGljYXRlIGJhc2VkIG9uIHRoZSBhY2Nlc3MgbW9kZS4KKwkgKi8KIAogCXN3aXRjaCAoaHctPmFjY2Vzc21vZGUpIHsKLQkJY2FzZSBXTEFOX0FDQ0VTU19OT05FOgorCWNhc2UgV0xBTl9BQ0NFU1NfTk9ORToKIAotCQkJLyoKLQkJCSoqIERlbnkgYWxsIG5ldyBhdXRoZW50aWNhdGlvbnMuICBIb3dldmVyLCBpZiBhIHN0YXRpb24KLQkJCSoqIGlzIEFMUkVBRFkgYXV0aGVudGljYXRlZCwgdGhlbiBhY2NlcHQgaXQuCi0JCQkqLworCQkvKgorCQkgKiogRGVueSBhbGwgbmV3IGF1dGhlbnRpY2F0aW9ucy4gIEhvd2V2ZXIsIGlmIGEgc3RhdGlvbgorCQkgKiogaXMgQUxSRUFEWSBhdXRoZW50aWNhdGVkLCB0aGVuIGFjY2VwdCBpdC4KKwkJICovCiAKLQkJCWZvciAoaSA9IDA7IGkgPCBody0+YXV0aGxpc3QuY250OyBpKyspCi0JCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sCi0JCQkJCQlXTEFOX0FERFJfTEVOKSA9PSAwKSB7Ci0JCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9BQ0NFU1NfQUxMOgotCi0JCQkvKgotCQkJKiogQWxsb3cgYWxsIGF1dGhlbnRpY2F0aW9ucy4KLQkJCSovCi0KLQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0FDQ0VTU19BTExPVzoKLQotCQkJLyoKLQkJCSoqIE9ubHkgYWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIGlmIHRoZSBNQUMgYWRkcmVzcwotCQkJKiogaXMgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBhZGRyZXNzZXMuCi0JCQkqKgotCQkJKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCi0JCQkqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZwotCQkJKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KLQkJCSoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coKSIgZm9yIGRldGFpbHMuCi0JCQkqLwotCi0JCQlpZiAoaHctPmFsbG93Lm1vZGlmeSA9PSAwKSB7Ci0JCQkJY250ICA9IGh3LT5hbGxvdy5jbnQ7Ci0JCQkJYWRkciA9IGh3LT5hbGxvdy5hZGRyWzBdOwotCQkJfSBlbHNlIHsKLQkJCQljbnQgID0gaHctPmFsbG93LmNudDE7Ci0JCQkJYWRkciA9IGh3LT5hbGxvdy5hZGRyMVswXTsKKwkJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKKwkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGh3LT5hdXRobGlzdC5hZGRyW2ldLAorCQkJCSAgIEVUSF9BTEVOKSA9PSAwKSB7CisJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBXTEFOX0FERFJfTEVOKQotCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIFdMQU5fQUREUl9MRU4pID09IDApIHsKLQkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJYnJlYWs7CiAKLQkJCWJyZWFrOworCWNhc2UgV0xBTl9BQ0NFU1NfQUxMOgogCi0JCWNhc2UgV0xBTl9BQ0NFU1NfREVOWToKKwkJLyoKKwkJICoqIEFsbG93IGFsbCBhdXRoZW50aWNhdGlvbnMuCisJCSAqLwogCi0JCQkvKgotCQkJKiogQWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIFVOTEVTUyB0aGUgTUFDIGFkZHJlc3MgaXMKLQkJCSoqIGluIHRoZSBsaXN0IG9mIGRlbmllZCBhZGRyZXNzZXMuCi0JCQkqKgotCQkJKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCi0JCQkqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZwotCQkJKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KLQkJCSoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgpIiBmb3IgZGV0YWlscy4KLQkJCSovCisJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQlicmVhazsKIAotCQkJaWYgKGh3LT5kZW55Lm1vZGlmeSA9PSAwKSB7Ci0JCQkJY250ICA9IGh3LT5kZW55LmNudDsKLQkJCQlhZGRyID0gaHctPmRlbnkuYWRkclswXTsKLQkJCX0gZWxzZSB7Ci0JCQkJY250ICA9IGh3LT5kZW55LmNudDE7Ci0JCQkJYWRkciA9IGh3LT5kZW55LmFkZHIxWzBdOworCWNhc2UgV0xBTl9BQ0NFU1NfQUxMT1c6CisKKwkJLyoKKwkJICoqIE9ubHkgYWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIGlmIHRoZSBNQUMgYWRkcmVzcworCQkgKiogaXMgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBhZGRyZXNzZXMuCisJCSAqKgorCQkgKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCisJCSAqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZworCQkgKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KKwkJICoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coKSIgZm9yIGRldGFpbHMuCisJCSAqLworCisJCWlmIChody0+YWxsb3cubW9kaWZ5ID09IDApIHsKKwkJCWNudCA9IGh3LT5hbGxvdy5jbnQ7CisJCQlhZGRyID0gaHctPmFsbG93LmFkZHJbMF07CisJCX0gZWxzZSB7CisJCQljbnQgPSBody0+YWxsb3cuY250MTsKKwkJCWFkZHIgPSBody0+YWxsb3cuYWRkcjFbMF07CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGFkZHIgKz0gRVRIX0FMRU4pCisJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBhZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQkJCWJyZWFrOwogCQkJfQogCi0JCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJYnJlYWs7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBXTEFOX0FERFJfTEVOKQotCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIFdMQU5fQUREUl9MRU4pID09IDApIHsKLQkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlOwotCQkJCQlicmVhazsKLQkJCQl9CisJY2FzZSBXTEFOX0FDQ0VTU19ERU5ZOgogCi0JCQlicmVhazsKKwkJLyoKKwkJICoqIEFsbG93IHRoZSBhdXRoZW50aWNhdGlvbiBVTkxFU1MgdGhlIE1BQyBhZGRyZXNzIGlzCisJCSAqKiBpbiB0aGUgbGlzdCBvZiBkZW5pZWQgYWRkcmVzc2VzLgorCQkgKioKKwkJICoqIFNpbmNlIHRoaXMgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSBtYXkgYmUgaGVyZQorCQkgKiogd2hpbGUgdGhlIGFjY2VzcyBsaXN0IGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcKKwkJICoqIHVwZGF0ZWQuICBDaG9vc2UgdGhlIGxpc3Qgd2hpY2ggaXMgY3VycmVudGx5IG9rYXkuCisJCSAqKiBTZWUgInByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoKSIgZm9yIGRldGFpbHMuCisJCSAqLworCisJCWlmIChody0+ZGVueS5tb2RpZnkgPT0gMCkgeworCQkJY250ID0gaHctPmRlbnkuY250OworCQkJYWRkciA9IGh3LT5kZW55LmFkZHJbMF07CisJCX0gZWxzZSB7CisJCQljbnQgPSBody0+ZGVueS5jbnQxOworCQkJYWRkciA9IGh3LT5kZW55LmFkZHIxWzBdOworCQl9CisKKwkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IEVUSF9BTEVOKQorCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJYnJlYWs7CiAJfQogCiAJLyoKLQkqKiBJZiB0aGUgYXV0aGVudGljYXRpb24gaXMgb2theSwgdGhlbiBhZGQgdGhlIE1BQyBhZGRyZXNzIHRvIHRoZSBsaXN0Ci0JKiogb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIERvbid0IGFkZCB0aGUgYWRkcmVzcyBpZiBpdCBpcyBhbHJlYWR5IGluCi0JKiogdGhlIGxpc3QuICAoODAyLjExYiBkb2VzIG5vdCBzZWVtIHRvIGRpc2FsbG93IGEgc3RhdGlvbiBmcm9tIGlzc3VpbmcKLQkqKiBhbiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHdoZW4gdGhlIHN0YXRpb24gaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkLgotCSoqIERvZXMgdGhpcyBzb3J0IG9mIHRoaW5nIGV2ZXIgaGFwcGVuPyAgV2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hlY2sKLQkqKiBqdXN0IGluIGNhc2UuKQotCSovCisJICoqIElmIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBva2F5LCB0aGVuIGFkZCB0aGUgTUFDIGFkZHJlc3MgdG8gdGhlIGxpc3QKKwkgKiogb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIERvbid0IGFkZCB0aGUgYWRkcmVzcyBpZiBpdCBpcyBhbHJlYWR5IGluCisJICoqIHRoZSBsaXN0LiAgKDgwMi4xMWIgZG9lcyBub3Qgc2VlbSB0byBkaXNhbGxvdyBhIHN0YXRpb24gZnJvbSBpc3N1aW5nCisJICoqIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2hlbiB0aGUgc3RhdGlvbiBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuCisJICoqIERvZXMgdGhpcyBzb3J0IG9mIHRoaW5nIGV2ZXIgaGFwcGVuPyAgV2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hlY2sKKwkgKioganVzdCBpbiBjYXNlLikKKwkgKi8KIAogCWFkZGVkID0gMDsKIAogCWlmIChyZWMuc3RhdHVzID09IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWwpIHsKIAkJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKLQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGh3LT5hdXRobGlzdC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKSA9PSAwKQorCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sIEVUSF9BTEVOKQorCQkJICAgID09IDApCiAJCQkJYnJlYWs7CiAKIAkJaWYgKGkgPj0gaHctPmF1dGhsaXN0LmNudCkgewpAQCAtMTc3NSw3ICsxNzE3LDcgQEAKIAkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfYXBfZnVsbDsKIAkJCX0gZWxzZSB7CiAJCQkJbWVtY3B5KGh3LT5hdXRobGlzdC5hZGRyW2h3LT5hdXRobGlzdC5jbnRdLAotCQkJCQlyZWMuYWRkcmVzcywgV0xBTl9BRERSX0xFTik7CisJCQkJICAgICAgIHJlYy5hZGRyZXNzLCBFVEhfQUxFTik7CiAJCQkJaHctPmF1dGhsaXN0LmNudCsrOwogCQkJCWFkZGVkID0gMTsKIAkJCX0KQEAgLTE3ODMsMjcgKzE3MjUsMjYgQEAKIAl9CiAKIAkvKgotCSoqIFNlbmQgYmFjayB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0aGVudGljYXRpb24uICBJZiB0aGlzIGRvZXNuJ3Qgd29yaywKLQkqKiB0aGVuIG1ha2Ugc3VyZSB0byByZW1vdmUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgYXV0aGVudGljYXRlZCBsaXN0IGlmCi0JKiogaXQgd2FzIGFkZGVkLgotCSovCisJICoqIFNlbmQgYmFjayB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0aGVudGljYXRpb24uICBJZiB0aGlzIGRvZXNuJ3Qgd29yaywKKwkgKiogdGhlbiBtYWtlIHN1cmUgdG8gcmVtb3ZlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGF1dGhlbnRpY2F0ZWQgbGlzdCBpZgorCSAqKiBpdCB3YXMgYWRkZWQuCisJICovCiAKLQlyZWMuc3RhdHVzID0gaG9zdDJoZmEzODR4XzE2KHJlYy5zdGF0dXMpOworCXJlYy5zdGF0dXMgPSBjcHVfdG9fbGUxNihyZWMuc3RhdHVzKTsKIAlyZWMuYWxnb3JpdGhtID0gaW5mLT5pbmZvLmF1dGhyZXEuYWxnb3JpdGhtOwogCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBLAotCQkJCQkJCSZyZWMsIHNpemVvZihyZWMpKTsKKwkJCQkJJnJlYywgc2l6ZW9mKHJlYykpOwogCWlmIChyZXN1bHQpIHsKLQkJaWYgKGFkZGVkKSBody0+YXV0aGxpc3QuY250LS07Ci0JCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoYXV0aGVudGljYXRlc3RhdGlvbikgZmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWlmIChhZGRlZCkKKwkJCWh3LT5hdXRobGlzdC5jbnQtLTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAic2V0Y29uZmlnKGF1dGhlbnRpY2F0ZXN0YXRpb24pIGZhaWxlZCwgcmVzdWx0PSVkXG4iLAorCQkgICAgICAgcmVzdWx0KTsKIAl9Ci0KLQlEQkZFWElUOwotCiAJcmV0dXJuOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfaW5mX3BzdXNlcmNudAogKgpAQCAtMTgyNSw3NCArMTc2NiwxNCBAQAogc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9wc3VzZXJjbnQod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAotCURCRkVOVEVSOwotCi0JaHctPnBzdXNlcmNvdW50ID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5wc3VzZXJjbnQudXNlcmNudCk7Ci0KLQlEQkZFWElUOworCWh3LT5wc3VzZXJjb3VudCA9IGxlMTZfdG9fY3B1KGluZi0+aW5mby5wc3VzZXJjbnQudXNlcmNudCk7CiAKIAlyZXR1cm47CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJzdGFfZXZfZHRpbQotKgotKiBIYW5kbGVzIHRoZSBEVElNIGVhcmx5IHdhcm5pbmcgZXZlbnQuCi0qCi0qIEFyZ3VtZW50czoKLSoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCi0qCi0qIFJldHVybnM6Ci0qCW5vdGhpbmcKLSoKLSogU2lkZSBlZmZlY3RzOgotKgotKiBDYWxsIGNvbnRleHQ6Ci0qCWludGVycnVwdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIHByaXNtMnN0YV9ldl9kdGltKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKLXsKLSNpZiAwCi0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotI2VuZGlmCi0JREJGRU5URVI7Ci0JV0xBTl9MT0dfREVCVUcoMywgIkRUSU0gZXZlbnQsIGN1cnJlbnRseSB1bmhhbmRsZWQuXG4iKTsKLQlEQkZFWElUOwotCXJldHVybjsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20yc3RhX2V2X2luZmRyb3AKLSoKLSogSGFuZGxlcyB0aGUgSW5mRHJvcCBldmVudC4KLSoKLSogQXJndW1lbnRzOgotKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJaW50ZXJydXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2KQotewotI2lmIDAKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0jZW5kaWYKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRygzLCAiSW5mbyBmcmFtZSBkcm9wcGVkIGR1ZSB0byBjYXJkIG1lbSBsb3cuXG4iKTsKLQlEQkZFWElUOwotCXJldHVybjsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2V2X2luZm8KICoKICogSGFuZGxlcyB0aGUgSW5mbyBldmVudC4KQEAgLTE5MTEsNTYgKzE3OTIsNTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotCURCRkVOVEVSOwotCWluZi0+aW5mb3R5cGUgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvdHlwZSk7CisJaW5mLT5pbmZvdHlwZSA9IGxlMTZfdG9fY3B1KGluZi0+aW5mb3R5cGUpOwogCS8qIERpc3BhdGNoICovCi0Jc3dpdGNoICggaW5mLT5pbmZvdHlwZSApIHsKLQkJY2FzZSBIRkEzODR4X0lUX0hBTkRPVkVSQUREUjoKLQkJCXByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfQ09NTVRBTExJRVM6Ci0JCQlwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotICAgICAgICAgICAgICAgY2FzZSBIRkEzODR4X0lUX0hPU1RTQ0FOUkVTVUxUUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKHdsYW5kZXYsIGluZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJY2FzZSBIRkEzODR4X0lUX1NDQU5SRVNVTFRTOgotCQkJcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cyh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTOgotCQkJcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzKHdsYW5kZXYsIGluZik7Ci0JCQlicmVhazsKLQkJY2FzZSBIRkEzODR4X0lUX0xJTktTVEFUVVM6Ci0JCQlwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfQVNTT0NTVEFUVVM6Ci0JCQlwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKHdsYW5kZXYsIGluZik7Ci0JCQlicmVhazsKLQkJY2FzZSBIRkEzODR4X0lUX0FVVEhSRVE6Ci0JCQlwcmlzbTJzdGFfaW5mX2F1dGhyZXEod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfUFNVU0VSQ05UOgotCQkJcHJpc20yc3RhX2luZl9wc3VzZXJjbnQod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCSAgICAgICAgY2FzZSBIRkEzODR4X0lUX0tFWUlEQ0hBTkdFRDoKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9LRVlJRENIQU5HRURcbiIpOwotCQkJYnJlYWs7Ci0JICAgICAgICBjYXNlIEhGQTM4NHhfSVRfQVNTT0NSRVE6Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJVbmhhbmRsZWQgSVRfQVNTT0NSRVFcbiIpOwotCQkJYnJlYWs7Ci0JICAgICAgICBjYXNlIEhGQTM4NHhfSVRfTUlDRkFJTFVSRToKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9NSUNGQUlMVVJFXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJV0xBTl9MT0dfV0FSTklORygKLQkJCQkiVW5rbm93biBpbmZvIHR5cGU9MHglMDJ4XG4iLCBpbmYtPmluZm90eXBlKTsKLQkJCWJyZWFrOworCXN3aXRjaCAoaW5mLT5pbmZvdHlwZSkgeworCWNhc2UgSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFI6CisJCXByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0NPTU1UQUxMSUVTOgorCQlwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0hPU1RTQ0FOUkVTVUxUUzoKKwkJcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX1NDQU5SRVNVTFRTOgorCQlwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTOgorCQlwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0xJTktTVEFUVVM6CisJCXByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQVNTT0NTVEFUVVM6CisJCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0FVVEhSRVE6CisJCXByaXNtMnN0YV9pbmZfYXV0aHJlcSh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfUFNVU0VSQ05UOgorCQlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfS0VZSURDSEFOR0VEOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmhhbmRsZWQgSVRfS0VZSURDSEFOR0VEXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0FTU09DUkVROgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmhhbmRsZWQgSVRfQVNTT0NSRVFcbiIpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfTUlDRkFJTFVSRToKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5oYW5kbGVkIElUX01JQ0ZBSUxVUkVcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiVW5rbm93biBpbmZvIHR5cGU9MHglMDJ4XG4iLCBpbmYtPmluZm90eXBlKTsKKwkJYnJlYWs7CiAJfQotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfZXZfdHhleGMKICoKQEAgLTE5ODIsMTUgKzE4NjAsMTEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwcmlzbTJzdGFfZXZfdHhleGMod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MTYgc3RhdHVzKQogewotCURCRkVOVEVSOworCXByX2RlYnVnKCJUeEV4YyBzdGF0dXM9MHgleC5cbiIsIHN0YXR1cyk7CiAKLQlXTEFOX0xPR19ERUJVRygzLCAiVHhFeGMgc3RhdHVzPTB4JXguXG4iLCBzdGF0dXMpOwotCi0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9ldl90eAogKgpAQCAtMjAwOSwxNSArMTg4MywxMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpCiB7Ci0JREJGRU5URVI7Ci0JV0xBTl9MT0dfREVCVUcoNCwgIlR4IENvbXBsZXRlLCBzdGF0dXM9MHglMDR4XG4iLCBzdGF0dXMpOworCXByX2RlYnVnKCJUeCBDb21wbGV0ZSwgc3RhdHVzPTB4JTA0eFxuIiwgc3RhdHVzKTsKIAkvKiB1cGRhdGUgbGludXggbmV0d29yayBzdGF0cyAqLwogCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X3BhY2tldHMrKzsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2V2X3J4CiAqCkBAIC0yMDM2LDExICsxOTA3LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCURCRkVOVEVSOwotCiAJcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXYsIHNrYik7Ci0KLQlEQkZFWElUOwogCXJldHVybjsKIH0KIApAQCAtMjA2MiwxMSArMTkyOSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlEQkZFTlRFUjsKLQogCW5ldGlmX3dha2VfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKLQotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0yMDkxLDE3ICsxOTU0LDE3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB3bGFuZGV2aWNlX3QgKmNyZWF0ZV93bGFuKHZvaWQpCiB7Ci0gICAgICAgIHdsYW5kZXZpY2VfdCAgICAqd2xhbmRldiA9IE5VTEw7Ci0JaGZhMzg0eF90CSpodyA9IE5VTEw7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gTlVMTDsKKwloZmEzODR4X3QgKmh3ID0gTlVMTDsKIAotICAgICAgCS8qIEFsbG9jIG91ciBzdHJ1Y3R1cmVzICovCi0Jd2xhbmRldiA9CWttYWxsb2Moc2l6ZW9mKHdsYW5kZXZpY2VfdCksIEdGUF9LRVJORUwpOwotCWh3ID0JCWttYWxsb2Moc2l6ZW9mKGhmYTM4NHhfdCksIEdGUF9LRVJORUwpOworCS8qIEFsbG9jIG91ciBzdHJ1Y3R1cmVzICovCisJd2xhbmRldiA9IGttYWxsb2Moc2l6ZW9mKHdsYW5kZXZpY2VfdCksIEdGUF9LRVJORUwpOworCWh3ID0ga21hbGxvYyhzaXplb2YoaGZhMzg0eF90KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXdsYW5kZXYgfHwgIWh3KSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKLQkJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOwotCQlpZiAoaHcpCQlrZnJlZShodyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCWtmcmVlKHdsYW5kZXYpOworCQlrZnJlZShodyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjEyMSwyNCArMTk4NCwyMSBAQAogCXdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Q7CiAJd2xhbmRldi0+dHhfdGltZW91dCA9IGhmYTM4NHhfdHhfdGltZW91dDsKIAotCXdsYW5kZXYtPm5zZGNhcHMgPSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgfAotCSAgICAgICAgICAgICAgICAgICBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOOworCXdsYW5kZXYtPm5zZGNhcHMgPSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgfCBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHByaXZhdGUgZGF0YSBzdHVjdHVyZS4gKi8KLSAgICAgICAgaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAxOworCWh3LT5kb3QxMV9kZXNpcmVkX2Jzc190eXBlID0gMTsKIAogCXJldHVybiB3bGFuZGV2OwogfQogCiB2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCWhmYTM4NHhfdAkJKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCBjb21tc3F1YWxfYmgpOwotICAgICAgICB3bGFuZGV2aWNlX3QgICAgICAgICAgICAqd2xhbmRldiA9IGh3LT53bGFuZGV2OworCWhmYTM4NHhfdCAqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGNvbW1zcXVhbF9iaCk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CiAJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOwogCWludCByZXN1bHQgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKIAkJZ290byBkb25lOwogCkBAIC0yMTU1LDU4ICsyMDE1LDQ5IEBACiAJCQkJCQlIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFlfTEVOKTsKIAogCQlpZiAocmVzdWx0KSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiZXJyb3IgZmV0Y2hpbmcgY29tbXNxdWFsXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgZmV0Y2hpbmcgY29tbXNxdWFsXG4iKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCS8vIHF1YWwuQ1FfY3VyckJTUzsgLy8gbGluawotCQkvLyBBU0xfY3VyckJTUzsgIC8vIGxldmVsCi0JCS8vIHF1YWwuQU5MX2N1cnJGQzsgLy8gbm9pc2UKLQotCQlXTEFOX0xPR19ERUJVRygzLCAiY29tbXNxdWFsICVkICVkICVkXG4iLAotCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5DUV9jdXJyQlNTKSwKLQkJCSAgICAgICBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQVNMX2N1cnJCU1MpLAotCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BTkxfY3VyckZDKSk7CisJCXByX2RlYnVnKCJjb21tc3F1YWwgJWQgJWQgJWRcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdShody0+cXVhbC5DUV9jdXJyQlNTKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFTTF9jdXJyQlNTKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFOTF9jdXJyRkMpKTsKIAl9CiAKIAkvKiBMYXN0bHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCU1NJRCBkaWRuJ3QgY2hhbmdlIG9uIHVzICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAogCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19ERUJVRygxLAotCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKIAkJZ290byBkb25lOwogCX0KIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCiAJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAogCQkJCQkmc3NpZCwgc2l6ZW9mKHNzaWQpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKLQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAotCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKLQorCQkJCShwODAyMTFwc3RyZF90ICopJndsYW5kZXYtPnNzaWQpOwogCiAJLyogUmVzY2hlZHVsZSB0aW1lciAqLwogCW1vZF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lciwgamlmZmllcyArIEhaKTsKIAotIGRvbmU6Ci0JREJGRVhJVDsKK2RvbmU6CisJOwogfQogCiB2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOwogCiAJc2NoZWR1bGVfd29yaygmaHctPmNvbW1zcXVhbF9iaCk7Ci0KLQlEQkZFWElUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYwppbmRleCA4ZjdiMWYyLi5kOGExMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYwpAQCAtMTEsNDQgKzExLDcwIEBACiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNGJiLCAweDA5MjIsICJJT0RhdGEgQWlyUG9ydCBXTi1CMTEvVVNCUyIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDA3YWEsIDB4MDAxMiwgIkNvcmVnYSBXaXJlbGVzcyBMQU4gVVNCIFN0aWNrLTExIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDlhYSwgMHgzNjQyLCAiUHJpc20yLnggMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgxNjY4LCAweDA0MDgsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgxNjY4LCAweDA0MjEsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzYsICJMaW5rc3lzIFdVU0IxMXYzLjAgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMTIsICJMaW5rc3lzIFdVU0IxMXYyLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMTMsICJMaW5rc3lzIFdVU0IxMnYxLjEgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNjdjLCAweDEwMjIsICJTaWVtZW5zIFNwZWVkU3RyZWFtIDEwMjIgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDlmLCAweDAwMzMsICJDb21wYXEvSW50ZWwgVzEwMCBQUk8vV2lyZWxlc3MgMTFNYnBzIG11bHRpcG9ydCBXTEFOIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwMTYsICJNZWxjbyBXTEktVVNCLVMxMSAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDhkZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4ODA4NiwgMHgxMTExLCAiSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCIExBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBkOGUsIDB4N2EwMSwgIlBSSVNNMjUgSUVFRSA4MDIuMTEgTWluaSBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0NWUsIDB4MDA2ZSwgIk1pY3Jvc29mdCBNTjUxMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgxNjY4LCAweDA0MDgsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MTY2OCwgMHgwNDIxLCAiQWN0aW9udGVjIFByaXNtMi41IDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDE5MTUsIDB4MjIzNiwgIkxpbmtzeXMgV1VTQjExdjMuMCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNjZiLCAweDIyMTIsICJMaW5rc3lzIFdVU0IxMXYyLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDY2YiwgMHgyMjEzLCAiTGlua3N5cyBXVVNCMTJ2MS4xIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA2N2MsIDB4MTAyMiwgIlNpZW1lbnMgU3BlZWRTdHJlYW0gMTAyMiAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNDlmLCAweDAwMzMsCisJICAiQ29tcGFxL0ludGVsIFcxMDAgUFJPL1dpcmVsZXNzIDExTWJwcyBtdWx0aXBvcnQgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0MTEsIDB4MDAxNiwgIk1lbGNvIFdMSS1VU0ItUzExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDhkZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDgwODYsIDB4MTExMSwgIkludGVsIFBSTy9XaXJlbGVzcyAyMDExQiBMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MGQ4ZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0NWUsIDB4MDA2ZSwgIk1pY3Jvc29mdCBNTjUxMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDA5NjcsIDB4MDIwNCwgIkFjZXIgV2FycGxpbmsgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDIsICJaLUNvbSA3MjUvNzI2IFByaXNtMi41IFVTQi9VU0IgSW50ZWdyYXRlZCIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwNSwgIlotQ29tIFhsNzM1IFdpcmVsZXNzIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHg0MTNjLCAweDgxMDAsICJEZWxsIFRydWVNb2JpbGUgMTE4MCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBiM2IsIDB4MTYwMSwgIkFMTE5FVCAwMTkzIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGIzYiwgMHgxNjAyLCAiWnlYRUwgWnlBSVIgQjIwMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBiYWYsIDB4MDBlYiwgIlVTUm9ib3RpY3MgVVNSMTEyMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0MTEsIDB4MDAyNywgIk1lbGNvIFdMSS1VU0ItS1MxMUcgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKLSAgICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwNGYxLCAweDMwMDksICJKVkMgTVAtWFA3MjUwIEJ1aWx0aW4gVVNCIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwY2RlLCAweDAwMDIsICJaLUNvbSA3MjUvNzI2IFByaXNtMi41IFVTQi9VU0IgSW50ZWdyYXRlZCIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwY2RlLCAweDAwMDUsICJaLUNvbSBYbDczNSBXaXJlbGVzcyA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDQxM2MsIDB4ODEwMCwgIkRlbGwgVHJ1ZU1vYmlsZSAxMTgwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDBiM2IsIDB4MTYwMSwgIkFMTE5FVCAwMTkzIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDBiM2IsIDB4MTYwMiwgIlp5WEVMIFp5QUlSIEIyMDAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MGJhZiwgMHgwMGViLCAiVVNSb2JvdGljcyBVU1IxMTIwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0MTEsIDB4MDAyNywgIk1lbGNvIFdMSS1VU0ItS1MxMUcgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNGYxLCAweDMwMDksICJKVkMgTVAtWFA3MjUwIEJ1aWx0aW4gVVNCIFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDA4NDYsIDB4NDExMCwgIk5ldEdlYXIgTUExMTEiKX0sCi0gICAgICAgIHtQUklTTV9VU0JfREVWSUNFKDB4MDNmMywgMHgwMDIwLCAiQWRhcHRlYyBBV04tODAyMCBVU0IgV0xBTiBBZGFwdGVyIil9LAotLy8Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMDEsICJaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCisvKiAgICAgIHtQUklTTV9VU0JfREVWSUNFKDB4MGFjZSwgMHgxMjAxLCAiWnlEQVMgWkQxMjAxIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LCAqLwogCXtQUklTTV9VU0JfREVWSUNFKDB4MjgyMSwgMHgzMzAwLCAiQVNVUy1XTDE0MCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDIwMDEsIDB4MzcwMCwgIkRXTC0xMjIgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDIsICJEV0wtMTIwIFJldiBGIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDIwMDEsIDB4MzcwMiwgIkRXTC0xMjAgUmV2IEYgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHg1MGMyLCAweDQwMTMsICJBdmVyYXRlYyBVU0IgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MmMwMiwgMHgxNGVhLCAiUGxhbmV4IEdXLVVTMTFIIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxMjRhLCAweDE2OGIsICJBaXJ2YXN0IFBSSVNNMyBXTEFOIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDgzYSwgMHgzNTAzLCAiVC1TaW51cyAxMTEgVVNCIFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDI4MjEsIDB4MzMwMCwgIkhhd2tpbmcgSGlnaERCIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDQxMSwgMHgwMDQ0LCAiTWVsY28gV0xJLVVTQi1LQjExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQxMSwgMHgwMDQ0LCAiTWVsY28gV0xJLVVTQi1LQjExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxNjY4LCAweDYxMDYsICJST1BFWCBGcmVlTGFuIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgxMjRhLCAweDQwMTcsICJQaGVlbmV0IFdMLTUwM0lBIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MTI0YSwgMHg0MDE3LCAiUGhlZW5ldCBXTC01MDNJQSA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MGJiMiwgMHgwMzAyLCAiQW1iaXQgTWljcm9zeXN0ZW1zIENvcnAuIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4OTAxNiwgMHgxODJkLCAiU2l0ZWNvbSBXTC0wMjIgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA1NDMsIDB4MGYwMSwgIlZpZXdTb25pYyBBaXJzeW5jIFVTQiBBZGFwdGVyIDExTWJwcyAoUHJpc20yLjUpIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDkwMTYsIDB4MTgyZCwgIlNpdGVjb20gV0wtMDIyIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDU0MywgMHgwZjAxLCAiVmlld1NvbmljIEFpcnN5bmMgVVNCIEFkYXB0ZXIgMTFNYnBzIChQcmlzbTIuNSkiKX0sCiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKQEAgLTc1LDI5ICsxMDEsMjYgQEAKICoJSSdtIG5vdCBzdXJlLCBhc3N1bWUgaXQncyBpbnRlcnJ1cHQuCiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgcHJpc20yc3RhX3Byb2JlX3VzYigKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgcHJpc20yc3RhX3Byb2JlX3VzYihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogCi0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gTlVMTDsKLQloZmEzODR4X3QJKmh3ID0gTlVMTDsKLQlpbnQgICAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0KLQlEQkZFTlRFUjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdCAqaHcgPSBOVUxMOworCWludCByZXN1bHQgPSAwOwogCiAJZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCiAJaWYgKCh3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKSkgPT0gTlVMTCkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CiAJCXJlc3VsdCA9IC1FSU87CiAJCWdvdG8gZmFpbGVkOwogCX0KIAlodyA9IHdsYW5kZXYtPnByaXY7CiAKLQlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCWlmICh3bGFuX3NldHVwKHdsYW5kZXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKIAkJcmVzdWx0ID0gLUVJTzsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMTE0LDE1ICsxMzcsMTQgQEAKIAkvKiBEbyBhIGNoaXAtbGV2ZWwgcmVzZXQgb24gdGhlIE1BQyAqLwogCWlmIChwcmlzbTJfZG9yZXNldCkgewogCQlyZXN1bHQgPSBoZmEzODR4X2NvcmVyZXNldChodywKLQkJCQlwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCi0JCQkJcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQkJCQkgICBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJCSAgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAwKTsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCQl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CiAJCQloZmEzODR4X2Rlc3Ryb3koaHcpOwogCQkJcmVzdWx0ID0gLUVJTzsKLQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCSIlczogaGZhMzg0eF9jb3JlcmVzZXQoKSBmYWlsZWQuXG4iLAotCQkJCWRldl9pbmZvKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogaGZhMzg0eF9jb3JlcmVzZXQoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KQEAgLTEzMSwzMCArMTUzLDI4IEBACiAKIAl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAotICAgICAgICBpZiAoIHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCWlmIChyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnaXN0ZXJfd2xhbmRldigpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKIAkJcmVzdWx0ID0gLUVJTzsKIAkJZ290byBmYWlsZWQ7Ci0gICAgICAgIH0KKwl9CiAKIC8qIGVuYWJsZSB0aGUgY2FyZCAqLwogCXByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGUpOwogCiAJZ290byBkb25lOwogCi0gZmFpbGVkOgotCWlmICh3bGFuZGV2KQlrZnJlZSh3bGFuZGV2KTsKLQlpZiAoaHcpCQlrZnJlZShodyk7CitmYWlsZWQ6CisJa2ZyZWUod2xhbmRldik7CisJa2ZyZWUoaHcpOwogCXdsYW5kZXYgPSBOVUxMOwogCi0gZG9uZToKLQlEQkZFWElUOwotCitkb25lOgorCXA4MDIxMV9hbGxvd19pb2N0bHMod2xhbmRldik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHdsYW5kZXYpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9kaXNjb25uZWN0X3VzYgogKgpAQCAtMTc0LDIyICsxOTQsMTkgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1wcmlzbTJzdGFfZGlzY29ubmVjdF91c2Ioc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9kaXNjb25uZWN0X3VzYihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewotCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7Ci0KLSAgICAgICAgREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2OwogCiAJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCi0JaWYgKCB3bGFuZGV2ICE9IE5VTEwgKSB7CisJaWYgKHdsYW5kZXYgIT0gTlVMTCkgewogCQlMSVNUX0hFQUQoY2xlYW5saXN0KTsKLQkJc3RydWN0IGxpc3RfaGVhZAkqZW50cnk7Ci0JCXN0cnVjdCBsaXN0X2hlYWQJKnRlbXA7Ci0JCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwogCiAJCWlmICghaHcpCiAJCQlnb3RvIGV4aXQ7CkBAIC0yMzEsNyArMjQ4LDcgQEAKIAkJICogcmVzcG9uc2VzIHRoYXQgd2UgaGF2ZSBzaHV0IGRvd24uCiAJCSAqLwogCQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmY2xlYW5saXN0KSB7Ci0JCQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwkJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OwogCiAJCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOwogCQkJY29tcGxldGUoJmN0bHgtPmRvbmUpOwpAQCAtMjY0LDEzICsyODEsMTAgQEAKIAkJa2ZyZWUod2xhbmRldik7CiAJfQogCi0gZXhpdDoKLQorZXhpdDoKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0JREJGRVhJVDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcHJpc20yX3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUgPSAicHJpc20yX3VzYiIsCiAJLnByb2JlID0gcHJpc20yc3RhX3Byb2JlX3VzYiwKQEAgLTI4MSwyMSArMjk1LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHByaXNtMnVzYl9pbml0KHZvaWQpCiB7Ci0gICAgICAgIERCRkVOVEVSOwotCiAJLyogVGhpcyBjYWxsIHdpbGwgcmVzdWx0IGluIGNhbGxzIHRvIHByaXNtMnN0YV9wcm9iZV91c2IuICovCiAJcmV0dXJuIHVzYl9yZWdpc3RlcigmcHJpc20yX3VzYl9kcml2ZXIpOwotCi0JREJGRVhJVDsKIH07CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcmlzbTJ1c2JfY2xlYW51cCh2b2lkKQogewotICAgICAgICBEQkZFTlRFUjsKLQogCXVzYl9kZXJlZ2lzdGVyKCZwcmlzbTJfdXNiX2RyaXZlcik7Ci0KLQlEQkZFWElUOwogfTsKIAogbW9kdWxlX2luaXQocHJpc20ydXNiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3dsYW5fY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOGE1MTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKiB3bGFuX2NvbXBhdC5oCi0qCi0qIFR5cGVzIGFuZCBtYWNyb3MgdG8gYWlkIGluIHBvcnRhYmlsaXR5Ci0qCi0qIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qCi0qIGxpbnV4LXdsYW4KLSoKLSogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYwotKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCi0qICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCi0qICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0qCi0qICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCi0qICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwotKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qCi0qICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKLSogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKLSogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQotKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCi0qICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCi0qICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKLSogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcwotKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQotKiBtYWRlIGRpcmVjdGx5IHRvOgotKgotKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgotKiBpbmZvQGxpbnV4LXdsYW4uY29tCi0qIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKLSogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCi0qCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9XTEFOX0NPTVBBVF9ICi0jZGVmaW5lIF9XTEFOX0NPTVBBVF9ICi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBCaXQgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2RlZmluZSBCSVQwCTB4MDAwMDAwMDEKLSNkZWZpbmUgQklUMQkweDAwMDAwMDAyCi0jZGVmaW5lIEJJVDIJMHgwMDAwMDAwNAotI2RlZmluZSBCSVQzCTB4MDAwMDAwMDgKLSNkZWZpbmUgQklUNAkweDAwMDAwMDEwCi0jZGVmaW5lIEJJVDUJMHgwMDAwMDAyMAotI2RlZmluZSBCSVQ2CTB4MDAwMDAwNDAKLSNkZWZpbmUgQklUNwkweDAwMDAwMDgwCi0jZGVmaW5lIEJJVDgJMHgwMDAwMDEwMAotI2RlZmluZSBCSVQ5CTB4MDAwMDAyMDAKLSNkZWZpbmUgQklUMTAJMHgwMDAwMDQwMAotI2RlZmluZSBCSVQxMQkweDAwMDAwODAwCi0jZGVmaW5lIEJJVDEyCTB4MDAwMDEwMDAKLSNkZWZpbmUgQklUMTMJMHgwMDAwMjAwMAotI2RlZmluZSBCSVQxNAkweDAwMDA0MDAwCi0jZGVmaW5lIEJJVDE1CTB4MDAwMDgwMDAKLSNkZWZpbmUgQklUMTYJMHgwMDAxMDAwMAotI2RlZmluZSBCSVQxNwkweDAwMDIwMDAwCi0jZGVmaW5lIEJJVDE4CTB4MDAwNDAwMDAKLSNkZWZpbmUgQklUMTkJMHgwMDA4MDAwMAotI2RlZmluZSBCSVQyMAkweDAwMTAwMDAwCi0jZGVmaW5lIEJJVDIxCTB4MDAyMDAwMDAKLSNkZWZpbmUgQklUMjIJMHgwMDQwMDAwMAotI2RlZmluZSBCSVQyMwkweDAwODAwMDAwCi0jZGVmaW5lIEJJVDI0CTB4MDEwMDAwMDAKLSNkZWZpbmUgQklUMjUJMHgwMjAwMDAwMAotI2RlZmluZSBCSVQyNgkweDA0MDAwMDAwCi0jZGVmaW5lIEJJVDI3CTB4MDgwMDAwMDAKLSNkZWZpbmUgQklUMjgJMHgxMDAwMDAwMAotI2RlZmluZSBCSVQyOQkweDIwMDAwMDAwCi0jZGVmaW5lIEJJVDMwCTB4NDAwMDAwMDAKLSNkZWZpbmUgQklUMzEJMHg4MDAwMDAwMAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gQ29tcGlsZXIgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIF9fV0xBTl9BVFRSSUJfUEFDS19fCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIE9TIFBvcnRhYmlsaXR5IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaWZuZGVmIFdMQU5fREJWQVIKLSNkZWZpbmUgV0xBTl9EQlZBUgl3bGFuX2RlYnVnCi0jZW5kaWYKLQotI2RlZmluZSBXTEFOX1JFTEVBU0UJIjAuMy4wLWxrbWwiCi0KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0KLSNkZWZpbmUgV0xBTl9MT0dfRVJST1IoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIHggLCBfX2Z1bmNfXyAsICMjYXJncyk7Ci0KLSNkZWZpbmUgV0xBTl9MT0dfV0FSTklORyh4LGFyZ3MuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIHggLCBfX2Z1bmNfXyAsICMjYXJncyk7Ci0KLSNkZWZpbmUgV0xBTl9MT0dfTk9USUNFKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fTk9USUNFICIlczogIiB4ICwgX19mdW5jX18gLCAjI2FyZ3MpOwotCi0jZGVmaW5lIFdMQU5fTE9HX0lORk8oYXJncy4uLiApIHByaW50ayhLRVJOX0lORk8gYXJncykKLQotI2lmIGRlZmluZWQoV0xBTl9JTkNMVURFX0RFQlVHKQotCSNkZWZpbmUgV0xBTl9IRVhfRFVNUCggbCwgeCwgcCwgbikJaWYoIFdMQU5fREJWQVIgPj0gKGwpICl7IFwKLQkJaW50IF9faV9fOyBcCi0JCXByaW50ayhLRVJOX0RFQlVHIHggIjoiKTsgXAotCQlmb3IoIF9faV9fPTA7IF9faV9fIDwgKG4pOyBfX2lfXysrKSBcCi0JCQlwcmludGsoICIgJTAyeCIsICgodTgqKShwKSlbX19pX19dKTsgXAotCQlwcmludGsoIlxuIik7IH0KLQkjZGVmaW5lIERCRkVOVEVSIHsgaWYgKCBXTEFOX0RCVkFSID49IDUgKXsgV0xBTl9MT0dfREVCVUcoMywiLS0tLT5cbiIpOyB9IH0KLQkjZGVmaW5lIERCRkVYSVQgIHsgaWYgKCBXTEFOX0RCVkFSID49IDUgKXsgV0xBTl9MT0dfREVCVUcoMywiPC0tLS1cbiIpOyB9IH0KLQotCSNkZWZpbmUgV0xBTl9MT0dfREVCVUcobCx4LGFyZ3MuLi4pIGlmICggV0xBTl9EQlZBUiA+PSAobCkpIHByaW50ayhLRVJOX0RFQlVHICIlcyglbHUpOiAiIHggLCAgX19mdW5jX18sIChwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX01BU0spLCAjI2FyZ3MgKTsKLSNlbHNlCi0JI2RlZmluZSBXTEFOX0hFWF9EVU1QKCBsLCBzLCBwLCBuKQotCSNkZWZpbmUgREJGRU5URVIKLQkjZGVmaW5lIERCRkVYSVQKLQotCSNkZWZpbmUgV0xBTl9MT0dfREVCVUcobCwgcywgYXJncy4uLikKLSNlbmRpZgotCi0jdW5kZWYgbmV0ZGV2aWNlX3QKLXR5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7Ci0KLSNkZWZpbmUgVVJCX0FTWU5DX1VOTElOSyAwCi0jZGVmaW5lIFVTQl9RVUVVRV9CVUxLIDAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIEhhcmR3YXJlIFBvcnRhYmlsaXR5IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jZGVmaW5lIGllZWUyaG9zdDE2KG4pCV9fbGUxNl90b19jcHUobikKLSNkZWZpbmUgaWVlZTJob3N0MzIobikJX19sZTMyX3RvX2NwdShuKQotI2RlZmluZSBob3N0MmllZWUxNihuKQlfX2NwdV90b19sZTE2KG4pCi0jZGVmaW5lIGhvc3QyaWVlZTMyKG4pCV9fY3B1X3RvX2xlMzIobikKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tIEdlbmVyYWwgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jZGVmaW5lIHdsYW5fbWF4KGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKLSNkZWZpbmUgd2xhbl9taW4oYSwgYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQotCi0jZGVmaW5lIHdsYW5faXNwcmludChjKQkoKChjKSA+ICgweDE5KSkgJiYgKChjKSA8ICgweDdmKSkpCi0KLSNkZWZpbmUgd2xhbl9oZXhjaGFyKHgpICgoKHgpIDwgMHgwYSkgPyAoJzAnICsgKHgpKSA6ICgnYScgKyAoKHgpIC0gMHgwYSkpKQotCi0vKiBDcmVhdGUgYSBzdHJpbmcgb2YgcHJpbnRhYmxlIGNoYXJzIGZyb20gc29tZXRoaW5nIHRoYXQgbWlnaHQgbm90IGJlICovCi0vKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHN0ciBiZSA0KmxlbiArIDEgYnl0ZXMgbG9uZyAqLwotI2RlZmluZSB3bGFuX21rcHJpbnRzdHIoYnVmLCBidWZsZW4sIHN0ciwgc3RybGVuKSBcCi17IFwKLQlpbnQgaSA9IDA7IFwKLQlpbnQgaiA9IDA7IFwKLQltZW1zZXQoc3RyLCAwLCAoc3RybGVuKSk7IFwKLQlmb3IgKGkgPSAwOyBpIDwgKGJ1Zmxlbik7IGkrKykgeyBcCi0JCWlmICggd2xhbl9pc3ByaW50KChidWYpW2ldKSApIHsgXAotCQkJKHN0cilbal0gPSAoYnVmKVtpXTsgXAotCQkJaisrOyBcCi0JCX0gZWxzZSB7IFwKLQkJCShzdHIpW2pdID0gJ1xcJzsgXAotCQkJKHN0cilbaisxXSA9ICd4JzsgXAotCQkJKHN0cilbaisyXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweGYwKSA+PiA0KTsgXAotCQkJKHN0cilbaiszXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweDBmKSk7IFwKLQkJCWogKz0gNDsgXAotCQl9IFwKLQl9IFwKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCi1leHRlcm4gaW50IHdsYW5fZGVidWc7Ci0jZW5kaWYKLQotZXh0ZXJuIGludCB3bGFuX2V0aGNvbnY7CQkvKiBXaGF0J3MgdGhlIGRlZmF1bHQgZXRoY29udj8gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2VuZGlmIC8qIF9XTEFOX0NPTVBBVF9IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKaW5kZXggODE3MWNhMS4uZDBiMDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIAogTU9EVUxFX0FVVEhPUigiWmhhbmcgUnVpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgdGhlcm1hbCBtYW5hZ2VtZW50IHN5c2ZzIHN1cHBvcnQiKTsKQEAgLTEwNCwyMiArMTA1LDM2IEBACiB0ZW1wX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiA9IHRvX3RoZXJtYWxfem9uZShkZXYpOworCWxvbmcgdGVtcGVyYXR1cmU7CisJaW50IHJldDsKIAogCWlmICghdHotPm9wcy0+Z2V0X3RlbXApCiAJCXJldHVybiAtRVBFUk07CiAKLQlyZXR1cm4gdHotPm9wcy0+Z2V0X3RlbXAodHosIGJ1Zik7CisJcmV0ID0gdHotPm9wcy0+Z2V0X3RlbXAodHosICZ0ZW1wZXJhdHVyZSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCB0ZW1wZXJhdHVyZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CiBtb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiA9IHRvX3RoZXJtYWxfem9uZShkZXYpOworCWVudW0gdGhlcm1hbF9kZXZpY2VfbW9kZSBtb2RlOworCWludCByZXN1bHQ7CiAKIAlpZiAoIXR6LT5vcHMtPmdldF9tb2RlKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JcmV0dXJuIHR6LT5vcHMtPmdldF9tb2RlKHR6LCBidWYpOworCXJlc3VsdCA9IHR6LT5vcHMtPmdldF9tb2RlKHR6LCAmbW9kZSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtb2RlID09IFRIRVJNQUxfREVWSUNFX0VOQUJMRUQgPyAiZW5hYmxlZCIKKwkJICAgICAgIDogImRpc2FibGVkIik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xMzIsNyArMTQ3LDEzIEBACiAJaWYgKCF0ei0+b3BzLT5zZXRfbW9kZSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXJlc3VsdCA9IHR6LT5vcHMtPnNldF9tb2RlKHR6LCBidWYpOworCWlmICghc3RybmNtcChidWYsICJlbmFibGVkIiwgc2l6ZW9mKCJlbmFibGVkIikpKQorCQlyZXN1bHQgPSB0ei0+b3BzLT5zZXRfbW9kZSh0eiwgVEhFUk1BTF9ERVZJQ0VfRU5BQkxFRCk7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAiZGlzYWJsZWQiLCBzaXplb2YoImRpc2FibGVkIikpKQorCQlyZXN1bHQgPSB0ei0+b3BzLT5zZXRfbW9kZSh0eiwgVEhFUk1BTF9ERVZJQ0VfRElTQUJMRUQpOworCWVsc2UKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKQEAgLTE0NCw3ICsxNjUsOCBAQAogCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHogPSB0b190aGVybWFsX3pvbmUoZGV2KTsKLQlpbnQgdHJpcDsKKwllbnVtIHRoZXJtYWxfdHJpcF90eXBlIHR5cGU7CisJaW50IHRyaXAsIHJlc3VsdDsKIAogCWlmICghdHotPm9wcy0+Z2V0X3RyaXBfdHlwZSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTE1Miw3ICsxNzQsMjIgQEAKIAlpZiAoIXNzY2FuZihhdHRyLT5hdHRyLm5hbWUsICJ0cmlwX3BvaW50XyVkX3R5cGUiLCAmdHJpcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHR6LT5vcHMtPmdldF90cmlwX3R5cGUodHosIHRyaXAsIGJ1Zik7CisJcmVzdWx0ID0gdHotPm9wcy0+Z2V0X3RyaXBfdHlwZSh0eiwgdHJpcCwgJnR5cGUpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRIRVJNQUxfVFJJUF9DUklUSUNBTDoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWwiKTsKKwljYXNlIFRIRVJNQUxfVFJJUF9IT1Q6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImhvdCIpOworCWNhc2UgVEhFUk1BTF9UUklQX1BBU1NJVkU6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBhc3NpdmUiKTsKKwljYXNlIFRIRVJNQUxfVFJJUF9BQ1RJVkU6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFjdGl2ZSIpOworCWRlZmF1bHQ6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd24iKTsKKwl9CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xNjAsNyArMTk3LDggQEAKIAkJICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ID0gdG9fdGhlcm1hbF96b25lKGRldik7Ci0JaW50IHRyaXA7CisJaW50IHRyaXAsIHJldDsKKwlsb25nIHRlbXBlcmF0dXJlOwogCiAJaWYgKCF0ei0+b3BzLT5nZXRfdHJpcF90ZW1wKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtMTY4LDEyICsyMDYsNzcgQEAKIAlpZiAoIXNzY2FuZihhdHRyLT5hdHRyLm5hbWUsICJ0cmlwX3BvaW50XyVkX3RlbXAiLCAmdHJpcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHR6LT5vcHMtPmdldF90cmlwX3RlbXAodHosIHRyaXAsIGJ1Zik7CisJcmV0ID0gdHotPm9wcy0+Z2V0X3RyaXBfdGVtcCh0eiwgdHJpcCwgJnRlbXBlcmF0dXJlKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHRlbXBlcmF0dXJlKTsKK30KKworc3RhdGljIHNzaXplX3QKK3Bhc3NpdmVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiA9IHRvX3RoZXJtYWxfem9uZShkZXYpOworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2ID0gTlVMTDsKKwlpbnQgc3RhdGU7CisKKwlpZiAoIXNzY2FuZihidWYsICIlZFxuIiwgJnN0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RhdGUgJiYgIXR6LT5mb3JjZWRfcGFzc2l2ZSkgeworCQltdXRleF9sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJnRoZXJtYWxfY2Rldl9saXN0LCBub2RlKSB7CisJCQlpZiAoIXN0cm5jbXAoIlByb2Nlc3NvciIsIGNkZXYtPnR5cGUsCisJCQkJICAgICBzaXplb2YoIlByb2Nlc3NvciIpKSkKKwkJCQl0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZSh0eiwKKwkJCQkJCQkJIFRIRVJNQUxfVFJJUFNfTk9ORSwKKwkJCQkJCQkJIGNkZXYpOworCQl9CisJCW11dGV4X3VubG9jaygmdGhlcm1hbF9saXN0X2xvY2spOworCX0gZWxzZSBpZiAoIXN0YXRlICYmIHR6LT5mb3JjZWRfcGFzc2l2ZSkgeworCQltdXRleF9sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJnRoZXJtYWxfY2Rldl9saXN0LCBub2RlKSB7CisJCQlpZiAoIXN0cm5jbXAoIlByb2Nlc3NvciIsIGNkZXYtPnR5cGUsCisJCQkJICAgICBzaXplb2YoIlByb2Nlc3NvciIpKSkKKwkJCQl0aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlKHR6LAorCQkJCQkJCQkgICBUSEVSTUFMX1RSSVBTX05PTkUsCisJCQkJCQkJCSAgIGNkZXYpOworCQl9CisJCW11dGV4X3VubG9jaygmdGhlcm1hbF9saXN0X2xvY2spOworCX0KKworCXR6LT50YzEgPSAxOworCXR6LT50YzIgPSAxOworCisJaWYgKCF0ei0+cGFzc2l2ZV9kZWxheSkKKwkJdHotPnBhc3NpdmVfZGVsYXkgPSAxMDAwOworCisJaWYgKCF0ei0+cG9sbGluZ19kZWxheSkKKwkJdHotPnBvbGxpbmdfZGVsYXkgPSAxMDAwMDsKKworCXR6LT5mb3JjZWRfcGFzc2l2ZSA9IHN0YXRlOworCisJdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUodHopOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAorcGFzc2l2ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHogPSB0b190aGVybWFsX3pvbmUoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ei0+Zm9yY2VkX3Bhc3NpdmUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIodHlwZSwgMDQ0NCwgdHlwZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wLCAwNDQ0LCB0ZW1wX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG1vZGUsIDA2NDQsIG1vZGVfc2hvdywgbW9kZV9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGFzc2l2ZSwgU19JUlVHTyB8IFNfSVdVU1IsIHBhc3NpdmVfc2hvdywgXAorCQkgICBwYXNzaXZlX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHRyaXBfcG9pbnRfYXR0cnNbXSA9IHsKIAlfX0FUVFIodHJpcF9wb2ludF8wX3R5cGUsIDA0NDQsIHRyaXBfcG9pbnRfdHlwZV9zaG93LCBOVUxMKSwKQEAgLTIzNiw4ICszMzksMTMgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2ID0gdG9fY29vbGluZ19kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCWludCByZXQ7CiAKLQlyZXR1cm4gY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsIGJ1Zik7CisJcmV0ID0gY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsICZzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHN0YXRlKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTI0NSw4ICszNTMsMTMgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2ID0gdG9fY29vbGluZ19kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCWludCByZXQ7CiAKLQlyZXR1cm4gY2Rldi0+b3BzLT5nZXRfY3VyX3N0YXRlKGNkZXYsIGJ1Zik7CisJcmV0ID0gY2Rldi0+b3BzLT5nZXRfY3VyX3N0YXRlKGNkZXYsICZzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHN0YXRlKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTI1NSwxMCArMzY4LDEwIEBACiAJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2ID0gdG9fY29vbGluZ19kZXZpY2UoZGV2KTsKLQlpbnQgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKCFzc2NhbmYoYnVmLCAiJWRcbiIsICZzdGF0ZSkpCisJaWYgKCFzc2NhbmYoYnVmLCAiJWxkXG4iLCAmc3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChzdGF0ZSA8IDApCkBAIC0zMTIsMTMgKzQyNSwyMCBAQAogc3RhdGljIHNzaXplX3QKIHRlbXBfaW5wdXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CisJbG9uZyB0ZW1wZXJhdHVyZTsKKwlpbnQgcmV0OwogCXN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIgKmh3bW9uX2F0dHIKIAkJCT0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIsIGF0dHIpOwogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0egogCQkJPSBjb250YWluZXJfb2YoaHdtb25fYXR0ciwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UsCiAJCQkJICAgICAgIHRlbXBfaW5wdXQpOwogCi0JcmV0dXJuIHR6LT5vcHMtPmdldF90ZW1wKHR6LCBidWYpOworCXJldCA9IHR6LT5vcHMtPmdldF90ZW1wKHR6LCAmdGVtcGVyYXR1cmUpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgdGVtcGVyYXR1cmUpOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMzMwLDggKzQ1MCwxNCBAQAogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0egogCQkJPSBjb250YWluZXJfb2YoaHdtb25fYXR0ciwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UsCiAJCQkJICAgICAgIHRlbXBfY3JpdCk7CisJbG9uZyB0ZW1wZXJhdHVyZTsKKwlpbnQgcmV0OwogCi0JcmV0dXJuIHR6LT5vcHMtPmdldF90cmlwX3RlbXAodHosIDAsIGJ1Zik7CisJcmV0ID0gdHotPm9wcy0+Z2V0X3RyaXBfdGVtcCh0eiwgMCwgJnRlbXBlcmF0dXJlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCB0ZW1wZXJhdHVyZSk7CiB9CiAKIApAQCAtNDUyLDYgKzU3OCw5NyBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2Vfc2V0X3BvbGxpbmcoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAorCQkJCQkgICAgaW50IGRlbGF5KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmsoJih0ei0+cG9sbF9xdWV1ZSkpOworCisJaWYgKCFkZWxheSkKKwkJcmV0dXJuOworCisJaWYgKGRlbGF5ID4gMTAwMCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCYodHotPnBvbGxfcXVldWUpLAorCQkJCSAgICAgIHJvdW5kX2ppZmZpZXMobXNlY3NfdG9famlmZmllcyhkZWxheSkpKTsKKwllbHNlCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmKHR6LT5wb2xsX3F1ZXVlKSwKKwkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfcGFzc2l2ZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosCisJCQkJCWludCB0ZW1wLCBpbnQgdHJpcF90ZW1wLCBpbnQgdHJpcCkKK3sKKwlpbnQgdHJlbmQgPSAwOworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX2luc3RhbmNlICppbnN0YW5jZTsKKwlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldjsKKwlsb25nIHN0YXRlLCBtYXhfc3RhdGU7CisKKwkvKgorCSAqIEFib3ZlIFRyaXA/CisJICogLS0tLS0tLS0tLS0KKwkgKiBDYWxjdWxhdGUgdGhlIHRoZXJtYWwgdHJlbmQgKHVzaW5nIHRoZSBwYXNzaXZlIGNvb2xpbmcgZXF1YXRpb24pCisJICogYW5kIG1vZGlmeSB0aGUgcGVyZm9ybWFuY2UgbGltaXQgZm9yIGFsbCBwYXNzaXZlIGNvb2xpbmcgZGV2aWNlcworCSAqIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IHdlIGFzc3VtZSBzeW1tZXRyeS4KKwkgKi8KKwlpZiAodGVtcCA+PSB0cmlwX3RlbXApIHsKKwkJdHotPnBhc3NpdmUgPSB0cnVlOworCisJCXRyZW5kID0gKHR6LT50YzEgKiAodGVtcCAtIHR6LT5sYXN0X3RlbXBlcmF0dXJlKSkgKworCQkJKHR6LT50YzIgKiAodGVtcCAtIHRyaXBfdGVtcCkpOworCisJCS8qIEhlYXRpbmcgdXA/ICovCisJCWlmICh0cmVuZCA+IDApIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5zdGFuY2UsICZ0ei0+Y29vbGluZ19kZXZpY2VzLAorCQkJCQkgICAgbm9kZSkgeworCQkJCWlmIChpbnN0YW5jZS0+dHJpcCAhPSB0cmlwKQorCQkJCQljb250aW51ZTsKKwkJCQljZGV2ID0gaW5zdGFuY2UtPmNkZXY7CisJCQkJY2Rldi0+b3BzLT5nZXRfY3VyX3N0YXRlKGNkZXYsICZzdGF0ZSk7CisJCQkJY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsICZtYXhfc3RhdGUpOworCQkJCWlmIChzdGF0ZSsrIDwgbWF4X3N0YXRlKQorCQkJCQljZGV2LT5vcHMtPnNldF9jdXJfc3RhdGUoY2Rldiwgc3RhdGUpOworCQkJfQorCQl9IGVsc2UgaWYgKHRyZW5kIDwgMCkgeyAvKiBDb29saW5nIG9mZj8gKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5zdGFuY2UsICZ0ei0+Y29vbGluZ19kZXZpY2VzLAorCQkJCQkgICAgbm9kZSkgeworCQkJCWlmIChpbnN0YW5jZS0+dHJpcCAhPSB0cmlwKQorCQkJCQljb250aW51ZTsKKwkJCQljZGV2ID0gaW5zdGFuY2UtPmNkZXY7CisJCQkJY2Rldi0+b3BzLT5nZXRfY3VyX3N0YXRlKGNkZXYsICZzdGF0ZSk7CisJCQkJY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsICZtYXhfc3RhdGUpOworCQkJCWlmIChzdGF0ZSA+IDApCisJCQkJCWNkZXYtPm9wcy0+c2V0X2N1cl9zdGF0ZShjZGV2LCAtLXN0YXRlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBCZWxvdyBUcmlwPworCSAqIC0tLS0tLS0tLS0tCisJICogSW1wbGVtZW50IHBhc3NpdmUgY29vbGluZyBoeXN0ZXJlc2lzIHRvIHNsb3dseSBpbmNyZWFzZSBwZXJmb3JtYW5jZQorCSAqIGFuZCBhdm9pZCB0aHJhc2hpbmcgYXJvdW5kIHRoZSBwYXNzaXZlIHRyaXAgcG9pbnQuICBOb3RlIHRoYXQgd2UKKwkgKiBhc3N1bWUgc3ltbWV0cnkuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnN0YW5jZSwgJnR6LT5jb29saW5nX2RldmljZXMsIG5vZGUpIHsKKwkJaWYgKGluc3RhbmNlLT50cmlwICE9IHRyaXApCisJCQljb250aW51ZTsKKwkJY2RldiA9IGluc3RhbmNlLT5jZGV2OworCQljZGV2LT5vcHMtPmdldF9jdXJfc3RhdGUoY2RldiwgJnN0YXRlKTsKKwkJY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsICZtYXhfc3RhdGUpOworCQlpZiAoc3RhdGUgPiAwKQorCQkJY2Rldi0+b3BzLT5zZXRfY3VyX3N0YXRlKGNkZXYsIC0tc3RhdGUpOworCQlpZiAoc3RhdGUgPT0gMCkKKwkJCXR6LT5wYXNzaXZlID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCB0aGVybWFsX3pvbmVfZGV2aWNlX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHogPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0CisJCQkJCQkgICAgICB0aGVybWFsX3pvbmVfZGV2aWNlLAorCQkJCQkJICAgICAgcG9sbF9xdWV1ZS53b3JrKTsKKwl0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSh0eik7Cit9CiAKIC8qKgogICogdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UgLSBiaW5kIGEgY29vbGluZyBkZXZpY2UgdG8gYSB0aGVybWFsIHpvbmUKQEAgLTcyMiwyNSArOTM5LDExMyBAQAogRVhQT1JUX1NZTUJPTCh0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIpOwogCiAvKioKKyAqIHRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlIC0gZm9yY2UgYW4gdXBkYXRlIG9mIGEgdGhlcm1hbCB6b25lJ3Mgc3RhdGUKKyAqIEB0dHo6CXRoZSB0aGVybWFsIHpvbmUgdG8gdXBkYXRlCisgKi8KKwordm9pZCB0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCit7CisJaW50IGNvdW50LCByZXQgPSAwOworCWxvbmcgdGVtcCwgdHJpcF90ZW1wOworCWVudW0gdGhlcm1hbF90cmlwX3R5cGUgdHJpcF90eXBlOworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX2luc3RhbmNlICppbnN0YW5jZTsKKwlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldjsKKworCW11dGV4X2xvY2soJnR6LT5sb2NrKTsKKworCXR6LT5vcHMtPmdldF90ZW1wKHR6LCAmdGVtcCk7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCB0ei0+dHJpcHM7IGNvdW50KyspIHsKKwkJdHotPm9wcy0+Z2V0X3RyaXBfdHlwZSh0eiwgY291bnQsICZ0cmlwX3R5cGUpOworCQl0ei0+b3BzLT5nZXRfdHJpcF90ZW1wKHR6LCBjb3VudCwgJnRyaXBfdGVtcCk7CisKKwkJc3dpdGNoICh0cmlwX3R5cGUpIHsKKwkJY2FzZSBUSEVSTUFMX1RSSVBfQ1JJVElDQUw6CisJCQlpZiAodGVtcCA+IHRyaXBfdGVtcCkgeworCQkJCWlmICh0ei0+b3BzLT5ub3RpZnkpCisJCQkJCXJldCA9IHR6LT5vcHMtPm5vdGlmeSh0eiwgY291bnQsCisJCQkJCQkJICAgICAgdHJpcF90eXBlKTsKKwkJCQlpZiAoIXJldCkgeworCQkJCQlwcmludGsoS0VSTl9FTUVSRworCQkJCQkgICAgICAgIkNyaXRpY2FsIHRlbXBlcmF0dXJlIHJlYWNoZWQgKCVsZCBDKSwgc2h1dHRpbmcgZG93bi5cbiIsCisJCQkJCSAgICAgICB0ZW1wLzEwMDApOworCQkJCQlvcmRlcmx5X3Bvd2Vyb2ZmKHRydWUpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRIRVJNQUxfVFJJUF9IT1Q6CisJCQlpZiAodGVtcCA+IHRyaXBfdGVtcCkKKwkJCQlpZiAodHotPm9wcy0+bm90aWZ5KQorCQkJCQl0ei0+b3BzLT5ub3RpZnkodHosIGNvdW50LCB0cmlwX3R5cGUpOworCQkJYnJlYWs7CisJCWNhc2UgVEhFUk1BTF9UUklQX0FDVElWRToKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5zdGFuY2UsICZ0ei0+Y29vbGluZ19kZXZpY2VzLAorCQkJCQkgICAgbm9kZSkgeworCQkJCWlmIChpbnN0YW5jZS0+dHJpcCAhPSBjb3VudCkKKwkJCQkJY29udGludWU7CisKKwkJCQljZGV2ID0gaW5zdGFuY2UtPmNkZXY7CisKKwkJCQlpZiAodGVtcCA+IHRyaXBfdGVtcCkKKwkJCQkJY2Rldi0+b3BzLT5zZXRfY3VyX3N0YXRlKGNkZXYsIDEpOworCQkJCWVsc2UKKwkJCQkJY2Rldi0+b3BzLT5zZXRfY3VyX3N0YXRlKGNkZXYsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVEhFUk1BTF9UUklQX1BBU1NJVkU6CisJCQlpZiAodGVtcCA+IHRyaXBfdGVtcCB8fCB0ei0+cGFzc2l2ZSkKKwkJCQl0aGVybWFsX3pvbmVfZGV2aWNlX3Bhc3NpdmUodHosIHRlbXAsCisJCQkJCQkJICAgIHRyaXBfdGVtcCwgY291bnQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodHotPmZvcmNlZF9wYXNzaXZlKQorCQl0aGVybWFsX3pvbmVfZGV2aWNlX3Bhc3NpdmUodHosIHRlbXAsIHR6LT5mb3JjZWRfcGFzc2l2ZSwKKwkJCQkJICAgIFRIRVJNQUxfVFJJUFNfTk9ORSk7CisKKwl0ei0+bGFzdF90ZW1wZXJhdHVyZSA9IHRlbXA7CisJaWYgKHR6LT5wYXNzaXZlKQorCQl0aGVybWFsX3pvbmVfZGV2aWNlX3NldF9wb2xsaW5nKHR6LCB0ei0+cGFzc2l2ZV9kZWxheSk7CisJZWxzZSBpZiAodHotPnBvbGxpbmdfZGVsYXkpCisJCXRoZXJtYWxfem9uZV9kZXZpY2Vfc2V0X3BvbGxpbmcodHosIHR6LT5wb2xsaW5nX2RlbGF5KTsKKwltdXRleF91bmxvY2soJnR6LT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wodGhlcm1hbF96b25lX2RldmljZV91cGRhdGUpOworCisvKioKICAqIHRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBhIG5ldyB0aGVybWFsIHpvbmUgZGV2aWNlCiAgKiBAdHlwZToJdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgdHlwZQogICogQHRyaXBzOgl0aGUgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoZSB0aGVybWFsIHpvbmUgc3VwcG9ydAogICogQGRldmRhdGE6CXByaXZhdGUgZGV2aWNlIGRhdGEKICAqIEBvcHM6CXN0YW5kYXJkIHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbGJhY2tzCisgKiBAdGMxOgl0aGVybWFsIGNvZWZmaWNpZW50IDEgZm9yIHBhc3NpdmUgY2FsY3VsYXRpb25zCisgKiBAdGMyOgl0aGVybWFsIGNvZWZmaWNpZW50IDIgZm9yIHBhc3NpdmUgY2FsY3VsYXRpb25zCisgKiBAcGFzc2l2ZV9kZWxheTogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcG9sbHMgd2hlbgorICoJCSAgIHBlcmZvcm1pbmcgcGFzc2l2ZSBjb29saW5nCisgKiBAcG9sbGluZ19kZWxheTogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcG9sbHMgd2hlbiBjaGVja2luZworICoJCSAgIHdoZXRoZXIgdHJpcCBwb2ludHMgaGF2ZSBiZWVuIGNyb3NzZWQgKDAgZm9yIGludGVycnVwdAorICoJCSAgIGRyaXZlbiBzeXN0ZW1zKQogICoKICAqIHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcigpIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyBubwotICogbG9uZ2VyIG5lZWRlZC4KKyAqIGxvbmdlciBuZWVkZWQuIFRoZSBwYXNzaXZlIGNvb2xpbmcgZm9ybXVsYSB1c2VzIHRjMSBhbmQgdGMyIGFzIGRlc2NyaWJlZCBpbgorICogc2VjdGlvbiAxMS4xLjUuMSBvZiB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uIDMuMC4KICAqLwogc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoY2hhciAqdHlwZSwKIAkJCQkJCQkgaW50IHRyaXBzLAogCQkJCQkJCSB2b2lkICpkZXZkYXRhLCBzdHJ1Y3QKIAkJCQkJCQkgdGhlcm1hbF96b25lX2RldmljZV9vcHMKLQkJCQkJCQkgKm9wcykKKwkJCQkJCQkgKm9wcywgaW50IHRjMSwgaW50CisJCQkJCQkJIHRjMiwKKwkJCQkJCQkgaW50IHBhc3NpdmVfZGVsYXksCisJCQkJCQkJIGludCBwb2xsaW5nX2RlbGF5KQogewogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0ejsKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqcG9zOworCWVudW0gdGhlcm1hbF90cmlwX3R5cGUgdHJpcF90eXBlOwogCWludCByZXN1bHQ7CiAJaW50IGNvdW50OworCWludCBwYXNzaXZlID0gMDsKIAogCWlmIChzdHJsZW4odHlwZSkgPj0gVEhFUk1BTF9OQU1FX0xFTkdUSCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC03NjksNiArMTA3NCwxMSBAQAogCXR6LT5kZXZpY2UuY2xhc3MgPSAmdGhlcm1hbF9jbGFzczsKIAl0ei0+ZGV2ZGF0YSA9IGRldmRhdGE7CiAJdHotPnRyaXBzID0gdHJpcHM7CisJdHotPnRjMSA9IHRjMTsKKwl0ei0+dGMyID0gdGMyOworCXR6LT5wYXNzaXZlX2RlbGF5ID0gcGFzc2l2ZV9kZWxheTsKKwl0ei0+cG9sbGluZ19kZWxheSA9IHBvbGxpbmdfZGVsYXk7CisKIAlkZXZfc2V0X25hbWUoJnR6LT5kZXZpY2UsICJ0aGVybWFsX3pvbmUlZCIsIHR6LT5pZCk7CiAJcmVzdWx0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ0ei0+ZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7CkBAIC03OTgsOCArMTEwOCwxOCBAQAogCQlUUklQX1BPSU5UX0FUVFJfQUREKCZ0ei0+ZGV2aWNlLCBjb3VudCwgcmVzdWx0KTsKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gdW5yZWdpc3RlcjsKKwkJdHotPm9wcy0+Z2V0X3RyaXBfdHlwZSh0eiwgY291bnQsICZ0cmlwX3R5cGUpOworCQlpZiAodHJpcF90eXBlID09IFRIRVJNQUxfVFJJUF9QQVNTSVZFKQorCQkJcGFzc2l2ZSA9IDE7CiAJfQogCisJaWYgKCFwYXNzaXZlKQorCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnR6LT5kZXZpY2UsCisJCQkJCSAgICAmZGV2X2F0dHJfcGFzc2l2ZSk7CisKKwlpZiAocmVzdWx0KQorCQlnb3RvIHVucmVnaXN0ZXI7CisKIAlyZXN1bHQgPSB0aGVybWFsX2FkZF9od21vbl9zeXNmcyh0eik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byB1bnJlZ2lzdGVyOwpAQCAtODE0LDYgKzExMzQsMTAgQEAKIAkJfQogCW11dGV4X3VubG9jaygmdGhlcm1hbF9saXN0X2xvY2spOwogCisJSU5JVF9ERUxBWUVEX1dPUksoJih0ei0+cG9sbF9xdWV1ZSksIHRoZXJtYWxfem9uZV9kZXZpY2VfY2hlY2spOworCisJdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUodHopOworCiAJaWYgKCFyZXN1bHQpCiAJCXJldHVybiB0ejsKIApAQCAtODUzLDYgKzExNzcsOCBAQAogCQkgICAgdHotPm9wcy0+dW5iaW5kKHR6LCBjZGV2KTsKIAltdXRleF91bmxvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKIAorCXRoZXJtYWxfem9uZV9kZXZpY2Vfc2V0X3BvbGxpbmcodHosIDApOworCiAJaWYgKHR6LT50eXBlWzBdKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnR6LT5kZXZpY2UsICZkZXZfYXR0cl90eXBlKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnR6LT5kZXZpY2UsICZkZXZfYXR0cl90ZW1wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggYzIyZmFiMS4uNTYzZDU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCiBzdGF0aWMgaW50IHZidXNfaXNfcHJlc2VudChzdHJ1Y3QgdXNiYV91ZGMgKnVkYykKIHsKLQlpZiAodWRjLT52YnVzX3BpbiAhPSAtMSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKIAkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHVkYy0+dmJ1c19waW4pOwogCiAJLyogTm8gVmJ1cyBkZXRlY3Rpb246IEFzc3VtZSBhbHdheXMgcHJlc2VudCAqLwpAQCAtMTgyMSw3ICsxODIxLDcgQEAKIAlEQkcoREJHX0dBREdFVCwgInJlZ2lzdGVyZWQgZHJpdmVyIGAlcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJdWRjLT52YnVzX3ByZXYgPSAwOwotCWlmICh1ZGMtPnZidXNfcGluICE9IC0xKQorCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQogCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHVkYy0+dmJ1c19waW4pKTsKIAogCS8qIElmIFZidXMgaXMgcHJlc2VudCwgZW5hYmxlIHRoZSBjb250cm9sbGVyIGFuZCB3YWl0IGZvciByZXNldCAqLwpAQCAtMTg1Miw3ICsxODUyLDcgQEAKIAlpZiAoZHJpdmVyICE9IHVkYy0+ZHJpdmVyIHx8ICFkcml2ZXItPnVuYmluZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodWRjLT52YnVzX3BpbiAhPSAtMSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKIAkJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEodWRjLT52YnVzX3BpbikpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTkxMCw3ICsxOTEwLDcgQEAKIAl1ZGMtPnBkZXYgPSBwZGV2OwogCXVkYy0+cGNsayA9IHBjbGs7CiAJdWRjLT5oY2xrID0gaGNsazsKLQl1ZGMtPnZidXNfcGluID0gLTE7CisJdWRjLT52YnVzX3BpbiA9IC1FTk9ERVY7CiAKIAlyZXQgPSAtRU5PTUVNOwogCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCQlnb3RvIGVycl9kZXZpY2VfYWRkOwogCX0KIAotCWlmIChwZGF0YS0+dmJ1c19waW4gPj0gMCkgeworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT52YnVzX3BpbikpIHsKIAkJaWYgKCFncGlvX3JlcXVlc3QocGRhdGEtPnZidXNfcGluLCAiYXRtZWxfdXNiYV91ZGMiKSkgewogCQkJdWRjLT52YnVzX3BpbiA9IHBkYXRhLT52YnVzX3BpbjsKIApAQCAtMjAwNSw3ICsyMDA1LDcgQEAKIAkJCQkJImF0bWVsX3VzYmFfdWRjIiwgdWRjKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlncGlvX2ZyZWUodWRjLT52YnVzX3Bpbik7Ci0JCQkJdWRjLT52YnVzX3BpbiA9IC0xOworCQkJCXVkYy0+dmJ1c19waW4gPSAtRU5PREVWOwogCQkJCWRldl93YXJuKCZ1ZGMtPnBkZXYtPmRldiwKIAkJCQkJICJmYWlsZWQgdG8gcmVxdWVzdCB2YnVzIGlycTsgIgogCQkJCQkgImFzc3VtaW5nIGFsd2F5cyBvblxuIik7CkBAIC0yMDUxLDcgKzIwNTEsNyBAQAogCQl1c2JhX2VwX2NsZWFudXBfZGVidWdmcygmdXNiYV9lcFtpXSk7CiAJdXNiYV9jbGVhbnVwX2RlYnVnZnModWRjKTsKIAotCWlmICh1ZGMtPnZidXNfcGluICE9IC0xKQorCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQogCQlncGlvX2ZyZWUodWRjLT52YnVzX3Bpbik7CiAKIAlmcmVlX2lycSh1ZGMtPmlycSwgdWRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKaW5kZXggMjllMTQ0Zi4uMzdmMDhjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKQEAgLTE2LDEwICsxNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9kczF3bS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RzMXdtLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtODksMTAgKzg5LDkgQEAKIAl2b2lkCQlfX2lvbWVtICptYXA7CiAJaW50CQlidXNfc2hpZnQ7IC8qICMgb2Ygc2hpZnRzIHRvIGNhbGMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGRzMXdtX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBtZmRfY2VsbAkqY2VsbDsKIAlpbnQJCWlycTsKIAlpbnQJCWFjdGl2ZV9oaWdoOwotCXN0cnVjdCBjbGsJKmNsazsKIAlpbnQJCXNsYXZlX3ByZXNlbnQ7CiAJdm9pZAkJKnJlc2V0X2NvbXBsZXRlOwogCXZvaWQJCSpyZWFkX2NvbXBsZXRlOwpAQCAtMjE1LDE3ICsyMTQsMTcgQEAKIAogc3RhdGljIHZvaWQgZHMxd21fdXAoc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEpCiB7Ci0JaW50IGdjbGssIGRpdmlzb3I7CisJaW50IGRpdmlzb3I7CisJc3RydWN0IGRzMXdtX2RyaXZlcl9kYXRhICpwbGF0ID0gZHMxd21fZGF0YS0+Y2VsbC0+ZHJpdmVyX2RhdGE7CiAKLQlpZiAoZHMxd21fZGF0YS0+cGRhdGEtPmVuYWJsZSkKLQkJZHMxd21fZGF0YS0+cGRhdGEtPmVuYWJsZShkczF3bV9kYXRhLT5wZGV2KTsKKwlpZiAoZHMxd21fZGF0YS0+Y2VsbC0+ZW5hYmxlKQorCQlkczF3bV9kYXRhLT5jZWxsLT5lbmFibGUoZHMxd21fZGF0YS0+cGRldik7CiAKLQlnY2xrID0gY2xrX2dldF9yYXRlKGRzMXdtX2RhdGEtPmNsayk7Ci0JY2xrX2VuYWJsZShkczF3bV9kYXRhLT5jbGspOwotCWRpdmlzb3IgPSBkczF3bV9maW5kX2Rpdmlzb3IoZ2Nsayk7CisJZGl2aXNvciA9IGRzMXdtX2ZpbmRfZGl2aXNvcihwbGF0LT5jbG9ja19yYXRlKTsKIAlpZiAoZGl2aXNvciA9PSAwKSB7CiAJCWRldl9lcnIoJmRzMXdtX2RhdGEtPnBkZXYtPmRldiwKLQkJCSJubyBzdWl0YWJsZSBkaXZpc29yIGZvciAlZEh6IGNsb2NrXG4iLCBnY2xrKTsKKwkJCSJubyBzdWl0YWJsZSBkaXZpc29yIGZvciAlZEh6IGNsb2NrXG4iLAorCQkJcGxhdC0+Y2xvY2tfcmF0ZSk7CiAJCXJldHVybjsKIAl9CiAJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fQ0xLRElWLCBkaXZpc29yKTsKQEAgLTI0NCwxMCArMjQzLDggQEAKIAlkczF3bV93cml0ZV9yZWdpc3RlcihkczF3bV9kYXRhLCBEUzFXTV9JTlRfRU4sCiAJCQkgICAgIGRzMXdtX2RhdGEtPmFjdGl2ZV9oaWdoID8gRFMxV01fSU5URU5fSUFTIDogMCk7CiAKLQlpZiAoZHMxd21fZGF0YS0+cGRhdGEtPmRpc2FibGUpCi0JCWRzMXdtX2RhdGEtPnBkYXRhLT5kaXNhYmxlKGRzMXdtX2RhdGEtPnBkZXYpOwotCi0JY2xrX2Rpc2FibGUoZHMxd21fZGF0YS0+Y2xrKTsKKwlpZiAoZHMxd21fZGF0YS0+Y2VsbC0+ZGlzYWJsZSkKKwkJZHMxd21fZGF0YS0+Y2VsbC0+ZGlzYWJsZShkczF3bV9kYXRhLT5wZGV2KTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMzAsMTMgKzMyNywxOCBAQAogc3RhdGljIGludCBkczF3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhOwotCXN0cnVjdCBkczF3bV9wbGF0Zm9ybV9kYXRhICpwbGF0OworCXN0cnVjdCBkczF3bV9kcml2ZXJfZGF0YSAqcGxhdDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGw7CiAJaW50IHJldDsKIAogCWlmICghcGRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwljZWxsID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFjZWxsKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRzMXdtX2RhdGEgPSBremFsbG9jKHNpemVvZigqZHMxd21fZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZHMxd21fZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNDgsMTUgKzM1MCwxOCBAQAogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyMDsKIAl9Ci0JZHMxd21fZGF0YS0+bWFwID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlkczF3bV9kYXRhLT5tYXAgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFkczF3bV9kYXRhLT5tYXApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnIwOwogCX0KLQlwbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JZHMxd21fZGF0YS0+YnVzX3NoaWZ0ID0gcGxhdC0+YnVzX3NoaWZ0OworCXBsYXQgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKworCS8qIGNhbGN1bGF0ZSBidXMgc2hpZnQgZnJvbSBtZW0gcmVzb3VyY2UgKi8KKwlkczF3bV9kYXRhLT5idXNfc2hpZnQgPSByZXNvdXJjZV9zaXplKHJlcykgPj4gMzsKKwogCWRzMXdtX2RhdGEtPnBkZXYgPSBwZGV2OwotCWRzMXdtX2RhdGEtPnBkYXRhID0gcGxhdDsKKwlkczF3bV9kYXRhLT5jZWxsID0gY2VsbDsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CiAJaWYgKCFyZXMpIHsKQEAgLTM3NiwyNiArMzgxLDE4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnIxOwogCi0JZHMxd21fZGF0YS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZHMxd20iKTsKLQlpZiAoSVNfRVJSKGRzMXdtX2RhdGEtPmNsaykpIHsKLQkJcmV0ID0gUFRSX0VSUihkczF3bV9kYXRhLT5jbGspOwotCQlnb3RvIGVycjI7Ci0JfQotCiAJZHMxd21fdXAoZHMxd21fZGF0YSk7CiAKIAlkczF3bV9tYXN0ZXIuZGF0YSA9ICh2b2lkICopZHMxd21fZGF0YTsKIAogCXJldCA9IHcxX2FkZF9tYXN0ZXJfZGV2aWNlKCZkczF3bV9tYXN0ZXIpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnIyOwogCiAJcmV0dXJuIDA7CiAKLWVycjM6Ci0JZHMxd21fZG93bihkczF3bV9kYXRhKTsKLQljbGtfcHV0KGRzMXdtX2RhdGEtPmNsayk7CiBlcnIyOgorCWRzMXdtX2Rvd24oZHMxd21fZGF0YSk7CiAJZnJlZV9pcnEoZHMxd21fZGF0YS0+aXJxLCBkczF3bV9kYXRhKTsKIGVycjE6CiAJaW91bm1hcChkczF3bV9kYXRhLT5tYXApOwpAQCAtNDM0LDcgKzQzMSw2IEBACiAKIAl3MV9yZW1vdmVfbWFzdGVyX2RldmljZSgmZHMxd21fbWFzdGVyKTsKIAlkczF3bV9kb3duKGRzMXdtX2RhdGEpOwotCWNsa19wdXQoZHMxd21fZGF0YS0+Y2xrKTsKIAlmcmVlX2lycShkczF3bV9kYXRhLT5pcnEsIGRzMXdtX2RhdGEpOwogCWlvdW5tYXAoZHMxd21fZGF0YS0+bWFwKTsKIAlrZnJlZShkczF3bV9kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMgYi9kcml2ZXJzL3hlbi9jcHVfaG90cGx1Zy5jCmluZGV4IDk3NGY1NmQuLjVmNTRjMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy94ZW4vY3B1X2hvdHBsdWcuYwpAQCAtMTAsNyArMTAsNyBAQAogCWlmICghY3B1X3ByZXNlbnQoY3B1KSkKIAkJYXJjaF9yZWdpc3Rlcl9jcHUoY3B1KTsKIAotCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOworCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2hvdHBsdWdfY3B1KGludCBjcHUpCkBAIC0xOCw3ICsxOCw3IEBACiAJaWYgKGNwdV9wcmVzZW50KGNwdSkpCiAJCWFyY2hfdW5yZWdpc3Rlcl9jcHUoY3B1KTsKIAotCWNwdV9jbGVhcihjcHUsIGNwdV9wcmVzZW50X21hcCk7CisJc2V0X2NwdV9wcmVzZW50KGNwdSwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCB2Y3B1X2hvdHBsdWcodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggYmFmNWFlNC4uMTY2NjQ4OSAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTQ5LDYgKzQ5LDEyIEBACiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9pbml0LmNzcCBcCiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9wbGF5YmFjay5jc3AgXAogCQkJCSAgICAgc2IxNi9pbWFfYWRwY21fY2FwdHVyZS5jc3AKK2Z3LXNoaXBwZWQtJChDT05GSUdfU0xJQ09TUykgKz0gc2xpY29zcy9nYmRvd25sb2FkLnN5cyBzbGljb3NzL2dicmN2dWNvZGUuc3lzIFwKKwkJCQlzbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzIFwKKwkJCQlzbGljb3NzL29hc2lzZG93bmxvYWQuc3lzIFwKKwkJCQlzbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzCitmdy1zaGlwcGVkLSQoQ09ORklHX1NYRykgKz0gc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMgXAorCQkJCXN4Zy9zYWhhcmFkYmdkb3dubG9hZEIuc3lzCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9ZTUZQQ0kpICs9IHlhbWFoYS9kczFfY3RybC5mdyB5YW1haGEvZHMxX2RzcC5mdyBcCiAJCQkJICAgeWFtYWhhL2RzMWVfY3RybC5mdwogZnctc2hpcHBlZC0kKENPTkZJR19URUhVVEkpICs9IHRlaHV0aS9iZHguYmluCmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggMzgxNGQ3ZC4uZDZjMjI3ZCAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtMzY0LDYgKzM2NCw1OSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitEcml2ZXI6IFNMSUNPU1MgLSBBbGFjcml0ZWNoIElTLU5JQyBwcm9kdWN0cworCitGaWxlOiBzbGljb3NzL2diZG93bmxvYWQuc3lzLmloZXgKK0ZpbGU6IHNsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMuaWhleAorRmlsZTogc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLnN5cy5paGV4CitGaWxlOiBzbGljb3NzL29hc2lzZG93bmxvYWQuc3lzLmloZXgKK0ZpbGU6IHNsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMuaWhleAorCitMaWNlbmNlOgorCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBBbGFjcml0ZWNoLCBJbmMuCisKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZQorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQKKwlBbGFjcml0ZWNoJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aAorCUFsYWNyaXRlY2ggaGFyZHdhcmUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogU1hHIC0gQWxhY3JpdGVjaCBJUy1OSUMgcHJvZHVjdHMKKworRmlsZTogc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMuaWhleAorRmlsZTogc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMuaWhleAorCitMaWNlbmNlOgorCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBBbGFjcml0ZWNoLCBJbmMuCisKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZQorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQKKwlBbGFjcml0ZWNoJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aAorCUFsYWNyaXRlY2ggaGFyZHdhcmUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIERyaXZlcjogY3hnYjMgLSBDaGVsc2lvIFRlcm1pbmF0b3IgMyAxRy8xMEcgRXRoZXJuZXQgYWRhcHRlcgogCiBGaWxlOiBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluLmloZXgKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3NsaWNvc3MvZ2Jkb3dubG9hZC5zeXMuaWhleCBiL2Zpcm13YXJlL3NsaWNvc3MvZ2Jkb3dubG9hZC5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE3ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc2xpY29zcy9nYmRvd25sb2FkLnN5cy5paGV4CkBAIC0wLDAgKzEsNjE0OCBAQAorOjEwMDAwMDAwMDIwMDAwMDAwMDgwMDAwMDAwMDAwMTAwMDAwMDAwMDA2RAorOjEwMDAxMDAwMDA4MDAwMDAxMjAwMDA0MDgxQjIwMDAwMTgwMDAwNDA4MworOjEwMDAyMDAwODFCMjAwMDAxRTAwMDA0MDgxQjIwMDAwMDMwMDAwNDBDOQorOjEwMDAzMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MEEyNDAzNgorOjEwMDA0MDAwRkQ3RjAwMDAwOTAwQTI0OUREN0QwMDAwMDAwMDAwNEM5QQorOjEwMDA1MDAwODBCMjAxMDAwNzAwMDA0MEQxQjEwMDAwMDAwMDAwNEM1OAorOjEwMDA2MDAwODBCMjAxMDAwOTAwQTI0MDc1N0QwMDAwNjAwMDAwNDBFMAorOjEwMDA3MDAwNjE5OTAxMDAwQjAwQThCMTdFMzEwMDAwMDkwMDAwNDAyOQorOjEwMDA4MDAwODFCMjAwMDAxMTAwMDA0MDgxQjIwMDAwMDA4MDFGRTkzMQorOjEwMDA5MDAwMTgzMTAwMDAwMDAwNDFFOTgwQjIwMTAwMEYwMDQwRTk4MgorOjEwMDBBMDAwODBCMjAwMDAwMDAwMDA0MEE1OTkwMTAwMTYwMDI5NDAyMAorOjEwMDBCMDAwODEzMjAwMDAxNjAwMTRCQzgwMzIwMDAwMEYwMDkzQkM5NworOjEwMDBDMDAwODAzMjAwMDAwMDAwNTA0MDgxQjIwMTAwMDA4MDAwNDBGQQorOjEwMDBEMDAwODFCMjAwMDAxMDAwMDA0MEE1OTkwMTAwMUMwMDI5NDBEOQorOjEwMDBFMDAwODEzMjAwMDAxQzAwMTRCQzgwMzIwMDAwMTEwMDkzQkM1RgorOjEwMDBGMDAwODAzMjAwMDAwMDAwNTA0MDgxQjIwMTAwMDE4MDAwNDBDOQorOjEwMDEwMDAwODFCMjAwMDAyMDAwMDA0MEE1OTkwMTAwMjIwMDI5NDA5MgorOjEwMDExMDAwODEzMjAwMDAyMjAwMTRCQzgwMzIwMDAwMEUwMDkzQkMyQgorOjEwMDEyMDAwODAzMjAwMDAwMDAwMDA0OUREODEwMTAwMkIwMTAwNDAwOQorOjEwMDEzMDAwODEzMjAxMDAzQzAxMDA0MDgxMzIwMTAwMjcwMDE0QkNFMworOjEwMDE0MDAwODAzMjAwMDAxNDAxMTNCQzgwMzIwMDAwNTQ5NTAwNDAzRQorOjEwMDE1MDAwNDU5OTAxMDBGRkZGMDA0MEU1OTkwMTAwMDAwMDJGNDA5NAorOjEwMDE2MDAwNDlCMTAxMDAwMDAwMDA0MEUxQjEwMTAwMDAwMDAwNEI3NgorOjEwMDE3MDAwQjdCMzAxMDAwMDAwMDA0MEI1QjMwMTAwRDkwMDAwNDA1MgorOjEwMDE4MDAwQjMzMzAxMDAwMDAwMDA0MEI2RDMwMTAwMzIwMDk1RTgwRgorOjEwMDE5MDAwODAzMjAwMDBGRkZGMDBFODgwODgwMTAwQjgwMDI2NDBBMAorOjEwMDFBMDAwODEzMjAwMDAwMDAwMDA0MEZEQjMwMTAwMDAwMDAwNDA2QgorOjEwMDFCMDAwRkZCMzAxMDAzQzAwMjI1MDgzNkMwMDAwMDAwMDAwNDVBQQorOjEwMDFDMDAwRkQ5MzAxMDBBNUE1MDBBNkI0QTcwMTAwM0MwMEEyNTAyNAorOjEwMDFEMDAwQjU3MzAwMDAwMDAxMDA0MDgxMzIwMTAwM0MwMEEyNDVERgorOjEwMDFFMDAwODAzMjAwMDAwMDAwMDA0NkZEOTMwMTAwNDEwMDAwNDAwNQorOjEwMDFGMDAwODFCMjAwMDA3RjAwMDAyMEY1Q0YwMTAwMUMwMTAwRkE1MQorOjEwMDIwMDAwQjMzMzAxMDBBNUE1MDBEQUI1QUIwMTAwOTkwMEEyNTBGNworOjEwMDIxMDAwQjU2MzAwMDAwMDAwMDA0NEZEOTMwMTAwRDUwMDAwNDREOAorOjEwMDIyMDAwQjMzMzAxMDAwMDAwMDA0MEQ1OTkwMTAwMDAwMDAwREE1RQorOjEwMDIzMDAwRDdCMTAxMDBGRkZGMDBEQUVEOEIwMTAwRDUwMDAwNDZDOQorOjEwMDI0MDAwQjMzMzAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMDAwREEzNgorOjEwMDI1MDAwRDdCMTAxMDBGRjAwMDBEQUVGOEIwMTAwRkYwMDAwREFFOAorOjEwMDI2MDAwRTM4RjAxMDBENTAwMDA0OEIzMzMwMTAwM0MwMDAwNDA5QgorOjEwMDI3MDAwRDU5OTAxMDBGRjAwMDBEQUQ3OEQwMTAwRkZGRjAwREFGOQorOjEwMDI4MDAwRjFEQjAxMDBGRjAwMDBEQUU5OEIwMTAwMDAwMDAwNDgwQgorOjEwMDI5MDAwRTlFMzAxMDBENTAwMDA0QkIzMzMwMTAwMkMwMDAwNDAxRQorOjEwMDJBMDAwRDU5OTAxMDAwMDAwMDBEQUQ3QjEwMTAwRDUwMDAwNEM1QgorOjEwMDJCMDAwQjMzMzAxMDBGRkZGMDBEQUVCREIwMTAwRDUwMDAwNEU5NQorOjEwMDJDMDAwQjMzMzAxMDAwMzAwMDBEQTgxODgwMTAwMDAwMDAwNUMwNAorOjEwMDJEMDAwODFFMDAxMDBGRkZGMDBEQUI1REIwMTAwNUMwMDI2NDA5MQorOjEwMDJFMDAwODEzMjAwMDAwMTAwMDBEQUI1Q0YwMTAwMDBGMDAwQTc2NAorOjEwMDJGMDAwQjQ4NzAxMDAwMDAwMDBEQTgxOTQwMTAwMDAwMDAwNDA5MgorOjEwMDMwMDAwRDhCMTAxMDBENTAwMDA1MEIzMzMwMTAwRkZGRjAwREE3RgorOjEwMDMxMDAwQjU4QjAxMDA2MjAwMjY0Q0I1NjMwMDAwMDEwMDAwREFENQorOjEwMDMyMDAwQjVDRjAxMDAwMDAwMDBEQURGQjEwMTAwRDUwMDAwNTJCNgorOjEwMDMzMDAwQjMzMzAxMDBGRjAwMDBEQTRCODkwMTAwMDgwMDAwREE0NgorOjEwMDM0MDAwREZGNzAxMDBGRjAwMDBFRkRGOEIwMTAwNjkwMDIyNDBCMgorOjEwMDM1MDAwREY3RjAwMDAwMDAwMDA0N0ZEOTMwMTAwMjAwMDAwNDAwNworOjEwMDM2MDAwQjM5QjAxMDBENTAwMDA0MDgxMzIwMTAwMDYwMDAwNDAyRgorOjEwMDM3MDAwRDU5OTAxMDAwODAwMDBEQUQ3RTUwMTAwRjgwMDAwREE5RAorOjEwMDM4MDAwQjM4QjAxMDAzNDAwMDA0MEQ1OTkwMTAwMDAwMDAwRDk3MgorOjEwMDM5MDAwRDdCMTAxMDAwMjAwMDBEOUQ1QzkwMTAwMDAwMDAwREE4MAorOjEwMDNBMDAwRDdCMTAxMDAyMjAwMDA0MEIzOUIwMTAwRDUwMDAwNDBGRQorOjEwMDNCMDAwODEzMjAxMDAwMDAwMDA0OEI1RjMwMTAwMDMwMDAwREFCQgorOjEwMDNDMDAwN0I4OTAxMDAwMDAxMDA0MEREOUIwMTAwRDUwMDAwNUQzQworOjEwMDNEMDAwQjMzMzAxMDBGRkZGMDBEQUU3OEIwMTAwOEEwMDI2NDBGQgorOjEwMDNFMDAwODEzMjAwMDAwMDAwMDA0MUZEOTMwMTAwMDAwMDAwNTAzOAorOjEwMDNGMDAwRTdFMzAxMDAwMDAxMDA0MEQ1OTkwMTAwMDAwMDAwRjY4QworOjEwMDQwMDAwRTc5NzAxMDAwMDAwMDBGM0Q3QjEwMTAwRDUwMDAwNUVCRQorOjEwMDQxMDAwQjMzMzAxMDBGRjAwMDBEQUU1OEIwMTAwMDAwMDAwNDg2MworOjEwMDQyMDAwRTVFMzAxMDAwODAxMDA0MEQ1OTkwMTAwRkYwMDAwREE3MgorOjEwMDQzMDAwQjU4RjAxMDAwMDAwMDBGN0I1OTcwMTAwMDAwMDAwREE1OQorOjEwMDQ0MDAwRDdCMTAxMDAzQzAxMDA0MEQ1OTkwMTAwMDAwMDAwRjgzRgorOjEwMDQ1MDAwRTU5NzAxMDAwMDAwMDBGMkQ3QjEwMTAwMDAwMjAwNDA2MgorOjEwMDQ2MDAwREQ5QjAxMDA5NjAwMjJGNTgxMzIwMDAwMDAwMDAwNDI3MQorOjEwMDQ3MDAwRkQ5MzAxMDAwMDAwMDBFRUQ1QjEwMTAwMDAwMDAwRjY4MAorOjEwMDQ4MDAwRUI5NzAxMDAwMDAwMDBGNUQ3QjEwMTAwMDgwMDAwRUE3OQorOjEwMDQ5MDAwRDRDOTAxMDAwMDAwMDBGN0UzOTcwMTAwMDAwMDAwRjE1QgorOjEwMDRBMDAwRDdCMTAxMDAzQzAwMDBFRUREQ0IwMTAwMDAwMDAwRUUwMgorOjEwMDRCMDAwRDVCMTAxMDAwMDAwMDBGOEU5OTcwMTAwMDAwMDAwRjQ0OAorOjEwMDRDMDAwRDdCMTAxMDBENTAwMDA0QUIzMzMwMTAwRkZGRjAwREFDNQorOjEwMDREMDAwREQ4OTAxMDBCNzAwMDA0MDgxQjIwMDAwMDAwMDAwNDA0QgorOjEwMDRFMDAwRDU5OTAxMDAwNTAwMDBBNkQ2QjEwMTAwOUExMzAwRUJEMgorOjEwMDRGMDAwRDY5OTAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMjAwQTYyRAorOjEwMDUwMDAwRDZCMTAxMDAwMTAwMDBFQkQ2OTkwMTAwMkMwMDAwNDA5QgorOjEwMDUxMDAwRDU5OTAxMDAwNTAwMDBBNkQ2QjEwMTAwOUExMzAwRUJBMQorOjEwMDUyMDAwRDY5OTAxMDAzQzAxMDA0MEQ1OTkwMTAwMDAwMjAwNDAyRAorOjEwMDUzMDAwRDc5OTAxMDAwMDAwMDA0MkZEOTMwMTAwM0MwMDAwNDBGQgorOjEwMDU0MDAwRDU5OTAxMDAwMDAwMDBBNkQ2QjEwMTAwMDAwMTAwRUIyMgorOjEwMDU1MDAwRDY5OTAxMDAwMDAxMDA0MEQ1OTkwMTAwMDYwMDAwQTZDRgorOjEwMDU2MDAwRDZCMTAxMDA5QTEzMDBFQkQ2OTkwMTAwMDgwMTAwNDBCMgorOjEwMDU3MDAwRDU5OTAxMDAwMDAyMDBBNkQ2QjEwMTAwMDEwMDAwRUJGMAorOjEwMDU4MDAwRDY5OTAxMDAwMDAwMDA0MEQ5QjEwMTAwMDAwMDAwNDBGMAorOjEwMDU5MDAwREZCMTAxMDAwNjAwMDA0MEQ1OTkwMTAwQTAwMDAwQTZDRgorOjEwMDVBMDAwRDZCMTAxMDA2NDAwMDA0MDRCOTkwMTAwMDAwMDAwNDBGQQorOjEwMDVCMDAwN0I5OTAxMDAwMjA0MDA0MEREOTkwMTAwQjcwMDEzQkNFMworOjEwMDVDMDAwODAzMjAwMDAwMjA4MDA0MEREOTkwMTAwMDAwMDAwNEM2QworOjEwMDVEMDAwREQ5MTAxMDBCODAwOTVFODg0MzAwMDAwMDAwMDJGRTlBQgorOjEwMDVFMDAwRkFCMzAxMDAwMDAwMDA0MEQxQjEwMTAwRkYwMDAwNDI1OQorOjEwMDVGMDAwODA4ODAxMDAzNDAwMDA0MDgwQ0UwMTAwQjgwMEE2NDA5MQorOjEwMDYwMDAwODEzMjAwMDBDMTAwMDA0MDgxMzIwMTAwMDI4MDIyNDA5RQorOjEwMDYxMDAwODAzMjAwMDBCODAwMDA0MDgxQjIwMDAwMDAwMDAwNEZBRQorOjEwMDYyMDAwODFCMDAxMDBDQTAwMDlGOTgxMzIwMDAwQzgwMDA4Rjk1MAorOjEwMDYzMDAwODEzMjAwMDBENDAwMUZGREY5MzMwMDAwQzcwMDlFRkQ4OQorOjEwMDY0MDAwODEzMjAwMDAwMDAwMDA0QUYzOTMwMTAwMDAwMDgwNDg1RQorOjEwMDY1MDAwRjM5MzAxMDAwMDAwMDBGREY3QjMwMTAwMDAwMDgwNDlBMgorOjEwMDY2MDAwRjM5MzAxMDAwMDAwMDBGQzE5QjEwMTAwQ0YwMDBBRjk2QQorOjEwMDY3MDAwODEzMjAwMDAwMDAwNDBGQjgxQjIwMTAwMDAwMDQxRkQxQQorOjEwMDY4MDAwODFCMjAxMDAwMDA3ODBGOUYzOEYwMTAwMDAwNzQyRjlGMQorOjEwMDY5MDAwRjM4RjAxMDBEMzAwQTJGRkY3NkYwMDAwMDAwMDQzNDA3QQorOjEwMDZBMDAwODFCMjAxMDAwMDAwQTJGRkZCRUYwMDAwMDAwMDgwRkMwRgorOjEwMDZCMDAwRTFCMTAxMDAwMDAwODA0MDgxQjAwMTAwRDgwMDA2RkVEOQorOjEwMDZDMDAwODEzMjAwMDAwMDAwMDA0MUIzRTMwMTAwMUMwMTAwRkE4OAorOjEwMDZEMDAwQjNDMzAwMDBEQTAwMDA0MjhEQjAwMDAwMDAwMDAwNDEwQQorOjEwMDZFMDAwOERCMDAxMDAwMDA0MDA0MDgzOTgwMTAwRUIwMDAwNDA0MQorOjEwMDZGMDAwODEzMjAxMDAwMDAwMDA1MDgzQjAwMTAwMDAwMDg0OTZBOAorOjEwMDcwMDAwODBCMjAwMDAyNjAxMDA0MDgxMzIwMTAwMjUwMTAwNDAzNgorOjEwMDcxMDAwMkQxMTAxMDAwMDAwMDA0MDJEODEwMTAwMDAwMDAwREFEMQorOjEwMDcyMDAwQjVFQjAxMDBFNDAwODQ5NjgwMzIwMDAwRTUwMDAwNDA1MworOjEwMDczMDAwQjU5MzAwMDAwMDAwMDA0MEI1ODMwMTAwREUwMEEyNDEzNworOjEwMDc0MDAwODM1MDAwMDAwMDAwMDA0MjJEODEwMTAwMjYwMTAwNDE3RAorOjEwMDc1MDAwMkQwMTAxMDAwMDAwMDA0MUIzQzMwMTAwREEwMEEyNDFGNQorOjEwMDc2MDAwOEQ1MDAwMDAwMDAwODBEQUI1QkYwMTAwMDAwMDAwNEI5MgorOjEwMDc3MDAwODFCMDAxMDAwMDAwMDBEQjgxRDAwMTAwMDAwMDAwRDk0MQorOjEwMDc4MDAwQjlCMzAxMDAwMDAwMDA0MEI4RTMwMTAwMDAwMDAwREM0NAorOjEwMDc5MDAwQjlFQjAxMDAwMDAwMDA0MUI4OTcwMTAwMTUwMDAwREMzMgorOjEwMDdBMDAwQjlFNzAxMDAwMDAwMDA0MTJEODEwMTAwMDAwMDAwREJERAorOjEwMDdCMDAwODFCMDAxMDAyNzAxMDA0MjJEMTEwMTAwMjUwMTAwNDBGOAorOjEwMDdDMDAwMkQxMTAxMDAyODAxMDA0MDJEMDEwMTAwMDAwMDAwNDExMQorOjEwMDdEMDAwMkQ5MTAxMDAyNjAxMDA0MDgxMzIwMTAwMjUwMTAwNDBEOQorOjEwMDdFMDAwMkQxMTAxMDAwMDAwMDA0MDJEODEwMTAwMDAwMEEyNDFGOAorOjEwMDdGMDAwODFEMDAwMDAwMDAwODQ5NjgwMzIwMTAwRkYwMEEwREM2MAorOjEwMDgwMDAwQjk2QjAwMDBGODAwMDA0MTJEOTEwMDAwRjgwMDAwNDE5NAorOjEwMDgxMDAwMkQ4MTAwMDBEODAwMDA0MEIzMzMwMTAwMDAwMDkwREFDMQorOjEwMDgyMDAwOEJCMDAwMDAxMTAwMDA0NTg4RjQwMTAwNDAwMDAwNDQzNgorOjEwMDgzMDAwODBDRTAxMDAwMDAwQTQ0MDgxQjIwMDAwMDAwMEEzNDQ2QgorOjEwMDg0MDAwODlFQzAwMDAwMDAwMDA0Mjg5RDAwMTAwMDAwMDAwNDI1NQorOjEwMDg1MDAwODdCMDAxMDBEOTAwMDA0M0IyMzMwMTAwMDAwMDAwNTAwRQorOjEwMDg2MDAwQjVGMzAxMDAwQzAxQTBEQThCNDAwMDAwMDAwMDAwNDE0QworOjEwMDg3MDAwOEJDMDAxMDAwMDAwMDA0MTg3QzAwMTAwMDgwMUEyNDFCNworOjEwMDg4MDAwODk1MDAwMDBGRkZGMDA0NTg4ODgwMTAwMTAwMDAwNDVFNgorOjEwMDg5MDAwOEFGNDAxMDAxMjAxOTA0NDhBNDAwMDAwMDAwMDAwNDFFNworOjEwMDhBMDAwOEJDMDAxMDBGRkZGMDA0NThBQTgwMTAwMDAwMDgwNTBCNgorOjEwMDhCMDAwOEJFMDAxMDAwMDgwMDA0MEY5OUIwMTAwMDBDMDAwNDA3NworOjEwMDhDMDAwQjNDRjAxMDAxQzAxMDBGQzE5MzEwMTAwMUMwMTQwREEwQQorOjEwMDhEMDAwODEzMjAxMDAwMDAwNDFEQTgxQjIwMTAwMDAwMDAwNDFENAorOjEwMDhFMDAwRjlDMzAxMDAxNjAxOUZEQTgxMzIwMDAwMDI4MDAwNDA0NgorOjEwMDhGMDAwODFCMjAwMDAwMDAwMDA0NDkxQjAwMTAwMDAwMDAwRDk2NgorOjEwMDkwMDAwMkJCMTAxMDAxRTAxOUY5NDgwMzIwMDAwMTgwMDAwOTQ1QQorOjEwMDkxMDAwOTJFNDAxMDAwMDAwMDA0OEI1RjMwMTAwMDAwMDAwNDkyNgorOjEwMDkyMDAwQjQ5NzAxMDAwMDAwMDA0MUIzQzMwMTAwMUQwMUEyNDFDMgorOjEwMDkzMDAwOTE1MDAwMDAwMDAwODA0MDJCQjEwMTAwMjkwMTAwNTFCRQorOjEwMDk0MDAwOTNCMDAwMDAyOTAxMDA0RDkzQjAwMDAwMjkwMTAwNDkzNworOjEwMDk1MDAwOTNCMDAwMDAwMDAwMDA0MjkzQjAwMTAwMjkwMUEyNDFDMQorOjEwMDk2MDAwOTM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDAwMDEwNDA2MAorOjEwMDk3MDAwODFCMjAxMDAwMDAwMTE0MDgxQjIwMTAwMDAwMDEyNDA2QworOjEwMDk4MDAwODFCMjAxMDAwMDAwMTM0MDgxQjIwMTAwMDAwMDE0NDA1OAorOjEwMDk5MDAwODFCMjAxMDAwMDAwMTU0MDgxQjIwMTAwMDAwMDE2NDA0NAorOjEwMDlBMDAwODFCMjAxMDAwMDAwMTc0MDgxQjIwMTAwMDAwMDE4NDAzMAorOjEwMDlCMDAwODFCMjAxMDAwMDAwMTk0MDgxQjIwMTAwMDAwMDFBNDAxQworOjEwMDlDMDAwODFCMjAxMDAwMDAwMUI0MDgxQjIwMTAwMDAwMDFDNDAwOAorOjEwMDlEMDAwODFCMjAxMDAwMDAwMUQ0MDgxQjIwMTAwMDAwMDFFNDBGNAorOjEwMDlFMDAwODFCMjAxMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDgwNDA4MAorOjEwMDlGMDAwODFCMjAxMDAwMDA0MDA0MEExOTkwMTAwMDAwMDAwNTBGNAorOjEwMEEwMDAwQTFEMTAxMDAwMDAwMDA0MDFCQjAwMTAwMDAwMDAwNDAyNworOjEwMEExMDAwMTlCMDAxMDAwMDAwMDA0MDE3QjAwMTAwMDAwMDAwNDBDNAorOjEwMEEyMDAwMTVCMDAxMDAwMDAwMDA0MDEzQjAwMTAwMDAwMDAwNDBCQworOjEwMEEzMDAwMTFCMDAxMDAwMDAwMDA0MDBGQjAwMTAwMDAwMDAwNDBCNAorOjEwMEE0MDAwMERCMDAxMDAwMDAwMDA0MDBCQjAwMTAwMDAwMDAwNDBBQworOjEwMEE1MDAwMDlCMDAxMDAwMDAwMDA0MDA3QjAwMTAwMDAwMDAwNDBBNAorOjEwMEE2MDAwMDVCMDAxMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDA5QworOjEwMEE3MDAwMDFCMDAxMDA0NDAxMjA0OEExNTEwMDAwMDAwMDgwNDA2NQorOjEwMEE4MDAwODFCMjAxMDA1MDAxMjI0Qjc0N0QwMDAwMDAwMDgwNDBDMworOjEwMEE5MDAwODFCMjAxMDA2MDAwMDA0QjYwOTkwMTAwMDAwMDAwQjFDQworOjEwMEFBMDAwN0VCMTAxMDA1MTAxQTg0MDgxMzIwMDAwNEUwMTAwNDA5QQorOjEwMEFCMDAwODFCMjAwMDAwNDAwODA0MDk3OTgwMTAwMDAwMDAwNThCNworOjEwMEFDMDAwMDc5MDAxMDBGMzlGMDA0MDgxQjIwMDAwMDAwMDAwNDQ0NQorOjEwMEFEMDAwQTVCMzAxMDBBRjAyMDA0MDgxMzIwMTAwQzUwMjAwNDAxMQorOjEwMEFFMDAwODEzMjAxMDAwMDAwMDA1QzA3OTAwMTAwRjM5RjAwNDA4QworOjEwMEFGMDAwQkZCMzAwMDA1RjAxMjJDQzg1N0YwMDAwMDAwMDAwNTFFMQorOjEwMEIwMDAwMDc5MDAxMDBGMzlGMDA0MDgxQjIwMDAwMDAwMDAwNDAwOAorOjEwMEIxMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwRDAxNDAwNDBDRAorOjEwMEIyMDAwQTE5QjAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwNDgyOAorOjEwMEIzMDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwQ0FENQorOjEwMEI0MDAwRjFCMTAxMDAwMDAwMDBENUUxQjEwMTAwMDcwMDAwNDA1MworOjEwMEI1MDAwNjE5OTAxMDAyMDAwMDAyMDYyREQwMTAwNjgwMUE4NDBDOQorOjEwMEI2MDAwODEzMjAwMDAwMDAwMDBDQzg1OTMwMTAwQzUwMjAwNDBFNgorOjEwMEI3MDAwODEzMjAxMDBEMDE0MDA0MDQzOTkwMTAwMDAwMDAwRkFDNgorOjEwMEI4MDAwQkFCMzAxMDAwMDAwMDBGQUE0QjMwMTAwMDAwMDAwRjhBRAorOjEwMEI5MDAwQkNCMzAxMDAwMDE0MkY0MDgxQjAwMTAwMDAwMDAwRTc0OQorOjEwMEJBMDAwQTdCMzAxMDAwMDAwMDBEOEE5QjMwMTAwRkYwMDAwREREOQorOjEwMEJCMDAwODE4ODAxMDAwMjAwMDA0MDgwRjQwMTAwNzgwMTAwNDBCQgorOjEwMEJDMDAwODBDODAxMDA4ODAxMDBERDgxMzIwMDAwMDAwMDAwNDA4MworOjEwMEJEMDAwMTBCMTAwMDA4OTAxMDA0MDgxQjIwMDAwOEEwMTAwNDA4QworOjEwMEJFMDAwODFCMjAwMDA4QjAxMDA0MDgxQjIwMDAwOEMwMTAwNDAwNgorOjEwMEJGMDAwODFCMjAwMDA4RDAxMDA0MDgxQjIwMDAwOEYwMTAwNDBGMQorOjEwMEMwMDAwODFCMjAwMDA5MTAxMDA0MDgxQjIwMDAwNTUwMTAwNDAxNgorOjEwMEMxMDAwODFCMjAwMDBEMjAxMDA0MDgxQjIwMDAwNTUwMTAwNDBDNQorOjEwMEMyMDAwODFCMjAwMDBFMDAxMDA0MDgxQjIwMDAwRTEwMTAwNDAxQgorOjEwMEMzMDAwODFCMjAwMDA3RjAyMDA0MDgxQjIwMDAwODAwMjAwNDBDQgorOjEwMEM0MDAwODFCMjAwMDBGMTlGMDA0MDgxQjIwMDAwRjI5RjAwNDA5RAorOjEwMEM1MDAwODFCMjAwMDA3NzAxMDA0MTgxQzAxQTAwNUEwMTUxNDA2MQorOjEwMEM2MDAwODFCMjFBMDA1QTAxNTI0MDgxQjIxQTAwNUEwMTU1NDAwRAorOjEwMEM3MDAwODFCMjFBMDA1QTAxNTY0MDgxQjIxQTAwNTUwMTkxODE4MQorOjEwMEM4MDAwODAzMDFBMDA1QTAxNDU0MDgxQjIxQTAwNTUwMTkxODIwNAorOjEwMEM5MDAwODAzMDFBMDA1QTAxNDY0MDgxQjIwMDAwMDAwMDAwNDAzNgorOjEwMENBMDAwODlCMDAxMDAwMDAwMkY0MDgxQjAwMTAwMDAxNDAwNDAxNQorOjEwMENCMDAwNDk5OTAxMDBCNTAxMjJERUUxNkQwMDAwMDAwMDAwNEMwMQorOjEwMENDMDAwNDlDMTAxMDAwMDAwMDA0MTgxQzAwMTAwOTQwMUEyNDQxQgorOjEwMENEMDAwODE2QzAwMDAwMDAwMDA0QzQ5RDEwMTAwOUMwMTIyNDBDMQorOjEwMENFMDAwRTE2RDAwMDA5ODAxQTI0MTgxNTAwMDAwNTUwMTAwNDFEMgorOjEwMENGMDAwQkZCMzAwMDAwMDAwMDA0MkJGQjMwMTAwNTUwMUEwMEZDOAorOjEwMEQwMDAwQkQ2RjAwMDAwMDAwMDBERUUxQjEwMTAwMDAwMDAwNDQwMgorOjEwMEQxMDAwNDlDMTAxMDBCNzAxMDA0MDE5OTkwMTAwMDAwMDQyNDA5QgorOjEwMEQyMDAwODFCMjAxMDAwMDAwNDNGRjg1QjAwMTAwMDAwMDAwREUzOQorOjEwMEQzMDAwMTlCMTAxMDAwMDAwNDJGRjg3QjAwMTAwMDAwMDQzRkYyRAorOjEwMEQ0MDAwRTFCMTAxMDAwMDAwMDA0NDQ5QzEwMTAwMDAwMDJGRkY5MworOjEwMEQ1MDAwRTFCMTAxMDAwODE0MDBBNDgwQ0MwMTAwQUMwMTI2NDBFMAorOjEwMEQ2MDAwODEzMjAwMDAwMDAwMDA0MTg1QzAwMTAwQUEwMUEyNENCMAorOjEwMEQ3MDAwODE1MDAwMDBCNjAxMjJEMjgxMzIwMDAwQjEwMTIyNDEyRgorOjEwMEQ4MDAwQTU2RjAwMDA1NTAxQTJFMDgxMzIwMDAwMDAwMDAwRDJGMgorOjEwMEQ5MDAwQzFCMzAxMDAwMDAwMDA1Qzg5OTAwMTAwMDAwMDQwNDJFNgorOjEwMERBMDAwODBCMjAxMDAwMDAwNDE0MzgwQjIwMTAwMDAwMDAwRjA2OQorOjEwMERCMDAwODg5NDAxMDA1QTAxMDA0NEUwQjEwMDAwQjMwMTAwNDhFQQorOjEwMERDMDAwNDlDMTAwMDBCMTAxMDA1Qjg5OTAwMDAwQjA5RjAwQTAwNAorOjEwMEREMDAwOUVCMDAwMDAwMDAwMDA0RDgxQjAwMTAwMDAwMDAwNDMwMworOjEwMERFMDAwQ0I4MzAxMDAwMDAwNDU0MDgxQjIwMTAwQkEwMUEyNDE1RAorOjEwMERGMDAwODE1MDAwMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDQ1NDBFNAorOjEwMEUwMDAwODFCMjAxMDBDNDAxOTE4MjgyMzAwMDAwMDAwMDAwOEE5QQorOjEwMEUxMDAwODBCMDAxMDBCNjlGMDA0MDgwQ0UwMTAwQzMwMUE2NDAxMworOjEwMEUyMDAwODEzMjAwMDBDNDAxNTY0MDgxQjIwMDAwMDAwMDAwNTMyRQorOjEwMEUzMDAwNkY5MzAxMDBGMzlGMDA1MjZGOTMwMDAwMDAwMDAwNEQ3QworOjEwMEU0MDAwODFCMDAxMDAwMDAwMDA0MkNEODMwMTAwMDAwMDQ2NDA1NworOjEwMEU1MDAwODFCMjAxMDBDNzAxQTI0MTgxNTAwMDAwMDAwMDQ2NDA1QworOjEwMEU2MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwRDEwMTkxODFCMAorOjEwMEU3MDAwODIzMDAwMDAwMDAwMDA4OTgwQjAwMTAwQjY5RjAwNDA3MQorOjEwMEU4MDAwODBDRTAxMDBEMDAxQTY0MDgxMzIwMDAwRDEwMTU1NDA0MgorOjEwMEU5MDAwODFCMjAwMDAwMDAwMDA1MjZGOTMwMTAwRjM5RjAwNTNFNQorOjEwMEVBMDAwNkY5MzAwMDAwMDAwMDA0MDgzQjAwMTAwMDAxNDAwNDA3OAorOjEwMEVCMDAwNDk5OTAxMDAwMDAwMjM0MDgxQjAwMTAwREEwMTIyREVERgorOjEwMEVDMDAwRTE2RDAwMDAwMDAwMDA0QzQ5QzEwMTAwMDAwMDAwNDEzQworOjEwMEVEMDAwODFDMDAxMDBENTAxQTI0NDgxNkMwMDAwNTUwMTAwNDM4RQorOjEwMEVFMDAwQkZCMzAwMDAwMDAwMDBGODE4QjEwMTAwMDAwMDQwRjg5NgorOjEwMEVGMDAwODBCMjAxMDAwMDAwNDFGMDgwQjIwMTAwMDAwMDAwNDAxQgorOjEwMEYwMDAwRjFCMTAxMDAwMDAwMDA0MEYxQjEwMTAwNUEwMTAwNDBDMAorOjEwMEYxMDAwRTFCMTAwMDBFMjAxMDA0MDkxQjAwMDAwMDAwMDAwNDE5QQorOjEwMEYyMDAwOTFCMDAxMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDBFRAorOjEwMEYzMDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwRTcwMTAwNDBFRgorOjEwMEY0MDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwRUQwMTAwNDAyOQorOjEwMEY1MDAwODFCMDAwMDA1ODAxMDBERUExQjMwMDAwRkYwMTAwNDA5NQorOjEwMEY2MDAwODFCMjAwMDAwMTAyMDA0MDgxQjAwMDAwMDcwMjAwNDA5MQorOjEwMEY3MDAwODFCMjAwMDA1NzAxMDBERkUxQjEwMDAwMDAwMDAwRDBBNQorOjEwMEY4MDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDIwMDAwRDJFRQorOjEwMEY5MDAwQTVFNzAxMDAwMDAwMDBEMkMxQjMwMTAwMDAwMDAwMDA3RAorOjEwMEZBMDAwRjBCMTAxMDBGNzAxMjI0NEMxNTMwMDAwRjYwMTg0NDE3MQorOjEwMEZCMDAwODE0MDAwMDBGQTAxMDA0MDgxMzIwMTAwMDAwMDAwRDBCMQorOjEwMEZDMDAwNDVCMTAxMDBGMTAxMDA0MUExQzEwMDAwQjEwMjAwNDBBMgorOjEwMEZEMDAwODEzMjAxMDBDNTAyMDA0MDgxMzIwMTAwNUEwMTAwREQ2QQorOjEwMEZFMDAwQTFCMTAwMDAwMDAwMDA0MDgxQjAwMTAwNDAwMDAwNDBCRAorOjEwMEZGMDAwQTU5QjAxMDBCMTAyMDA0MDgxMzIwMTAwNDAwMDAwRDNGNgorOjEwMTAwMDAwQTdDQjAxMDBDNTAyMDBFMEE1QjMwMDAwMDMwMDAwNDAyQgorOjEwMTAxMDAwQTM5QjAxMDA1ODAxMDBERUExQjMwMDAwMDAwMDAwNDRDMgorOjEwMTAyMDAwQkZCMzAxMDAwMDAwMDBERTgxOTAwMTAwNTUwMUEyQkFBQgorOjEwMTAzMDAwODAwNDAwMDA2MDAwMDBERTYxOTkwMTAwMDQwMkE4QjE5NAorOjEwMTA0MDAwODAzMDAwMDA1NzAxMDA0MEUwQjEwMDAwMDAwMDAwRDBGNworOjEwMTA1MDAwQkFCMzAxMDA2ODAyMDA0MDgxOTgwMTAwNUQwMjAwNERCMgorOjEwMTA2MDAwODMzMDAxMDAwMDAwMDA0NEUxQjMwMTAwMDAwMDAwNDRBRgorOjEwMTA3MDAwRTNCMzAxMDAwMDAwMDA0NEU1QjMwMTAwMDAwMDAwNDRCOAorOjEwMTA4MDAwRTlCMzAxMDAwMDAwMDA0NEVCQjMwMTAwMDAwMDAwNDQ5QworOjEwMTA5MDAwRjVCMzAxMDAwMDAwMDA0NEY3QjMwMTAwMDAwMDAwNDQ3NAorOjEwMTBBMDAwRjlCMzAxMDAxNTAyMjI0MDhGNkYwMDAwNzUwMjAwNDA2NQorOjEwMTBCMDAwODE5ODAxMDA1RDAyMDBDNzgzMzAwMTAwN0QwMjAwNDA3RAorOjEwMTBDMDAwODE5ODAxMDA1RDAyMDA0MjgzMzAwMTAwMDAwMDAwRThDOQorOjEwMTBEMDAwRjFCMTAxMDAwMDAwMDBFOUYxQjEwMTAwMDAwMDAwRUFGNworOjEwMTBFMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwODU0QQorOjEwMTBGMDAwRjBCMTAxMDAwMDAwMDBFQ0YxQjEwMTAwMDAwMDAwRUREMgorOjEwMTEwMDAwRjFCMTAxMDAwMDAwMDBCMkYwQjEwMTAwRTA5RjAwNDAyOQorOjEwMTExMDAwODEzMjAxMDAwMDAwMDA0MEYwQjEwMTAwMDAwMDAwNDBGOQorOjEwMTEyMDAwRjFCMTAxMDAwMDAwMDBBQkYwQjEwMTAwMDAwMDAwQjgxNworOjEwMTEzMDAwRjBCMTAxMDAwMDAwMDBCOUYwQjEwMTAwMDAwMDAwQkFGOAorOjEwMTE0MDAwRjBCMTAxMDAwMDAwMDBCQkYwQjEwMTAwMjkwMkI4NDA3RAorOjEwMTE1MDAwODEzMDAwMDAwMDAwMDA0MDgxOTAwMTAwMkIwMkI5NDA2NgorOjEwMTE2MDAwODEzMjAwMDAwMDAwMDA0MTgxOTAwMTAwMkQwMkJBNDA1MAorOjEwMTE3MDAwODEzMjAwMDAwMDAwMDA0MjgxOTAwMTAwMkYwMkJCNDAzQworOjEwMTE4MDAwODEzMjAwMDAwMDAwMDA0MzgxOTAwMTAwMzEwMkJDNDAyOAorOjEwMTE5MDAwODEzMjAwMDAwMDAwMDA0NDgxOTAwMTAwMzMwMkJENDAxNAorOjEwMTFBMDAwODEzMjAwMDAwMDAwMDA0NTgxOTAwMTAwMzUwMkJFNDAwMAorOjEwMTFCMDAwODEzMjAwMDAwMDAwMDA0NjgxOTAwMTAwMzcwMkJGNDBFQworOjEwMTFDMDAwODEzMjAwMDAwMDAwMDA0NzgxOTAwMTAwMzkwMkM4NDBEMAorOjEwMTFEMDAwODEzMjAwMDAwMDAwMDA0ODgxOTAwMTAwM0IwMkM5NDBCQworOjEwMTFFMDAwODEzMjAwMDAwMDAwMDA0OTgxOTAwMTAwM0QwMkNBNDBBOAorOjEwMTFGMDAwODEzMjAwMDAwMDAwMDA0QTgxOTAwMTAwM0YwMkNCNDA5NAorOjEwMTIwMDAwODEzMjAwMDAwMDAwMDA0QjgxOTAwMTAwNDEwMkNDNDA3RgorOjEwMTIxMDAwODEzMjAwMDAwMDAwMDA0QzgxOTAwMTAwNDMwMkNENDA2QgorOjEwMTIyMDAwODEzMjAwMDAwMDAwMDA0RDgxOTAwMTAwNDUwMkNFNDA1NworOjEwMTIzMDAwODEzMjAwMDAwMDAwMDA0RTgxOTAwMTAwNDcwMkNGNDA0MworOjEwMTI0MDAwODEzMjAwMDAwMDAwMDA0RjgxOTAwMTAwMDAwMDAwNDA0QQorOjEwMTI1MDAwRjBCMTAxMDA0MDAwMDA0MEE1OUIwMTAwQUYwMjAwNDAzQQorOjEwMTI2MDAwODEzMjAxMDBDNTAyMDA0MDgxMzIwMTAwRDAxNDJFMDZGNworOjEwMTI3MDAwQTVCMzAxMDA0MDAwMDBEM0E3Q0IwMTAwMDAwMDAwRjA5RgorOjEwMTI4MDAwRjFCMTAxMDAwMDAwMDBGMUYxQjEwMTAwMDAwMDAwRjIzNQorOjEwMTI5MDAwRjFCMTAxMDAwMDAwMDBGNEYxQjEwMTAwMDAwMDAwRjUxRgorOjEwMTJBMDAwRjFCMTAxMDAwMDAwMDBGQUYxQjEwMTAwMDAwMDAwRkIwMworOjEwMTJCMDAwRjFCMTAxMDAwMDAwMDBGQ0YxQjEwMTAwMDAwMDAwRUIwMQorOjEwMTJDMDAwRjFCMTAxMDAwMDAwMDBFRUYxQjEwMTAwMDAwMDAwRUZGQgorOjEwMTJEMDAwRjFCMTAxMDAwMDAwMDBGM0YxQjEwMTAwMDAwMDAwRjZERgorOjEwMTJFMDAwRjFCMTAxMDAwMDAwMDBGREYxQjEwMTAwRjcwMTAwQzdGQworOjEwMTJGMDAwRTFCMTAwMDAwMDAwODA0MDgxQjIwMTAwNjMwMjAwNDhCQgorOjEwMTMwMDAwODAzMjAwMDAwMDAwNTE0MDFBQjEwMTAwMDAwMDRENDA0MQorOjEwMTMxMDAwODFCMjAxMDAwMDAwNDU0MDgxQjIwMTAwNjAwMkEyNDE5QgorOjEwMTMyMDAwODM1MDAwMDA1QzAyNDk0MDgxQjIwMDAwMDAwMDUyNDAzRQorOjEwMTMzMDAwMUNCMTAxMDAwMDAwNEU0MDgxQjIwMTAwMDAwMDQ2NDA5NworOjEwMTM0MDAwODFCMjAxMDA2NTAyQTI0MTgzNTAwMDAwNUMwMjRBNDA2NAorOjEwMTM1MDAwODFCMjAwMDAwMDAwMDBBMDlFQjAwMTAwMDAwMDAwODBFQgorOjEwMTM2MDAwRDhCMzAxMDAwMDAwMDBBMUQwQjMwMTAwMDAwMDAwQTIyQQorOjEwMTM3MDAwRDJCMzAxMDAwMDAwMDBBNEQ0QjMwMTAwMDAwMDAwRDBFQgorOjEwMTM4MDAwRDZCMzAxMDAwMDAwMDBEMURDQjMwMTAwMDAwMDAwRDJBMAorOjEwMTM5MDAwREVCMzAxMDAwMDAwMDA4OERBQjMwMTAwMDAwMDAwRDREMQorOjEwMTNBMDAwOEVCMzAxMDAwMDAwMDBEM0U2QjMwMTAwMDAwMDAwQUNFMgorOjEwMTNCMDAwRUNCMzAxMDAwMDAwMDA5OUZBQjMwMTAwMDAwMDAwRDU3MQorOjEwMTNDMDAwRTBCMzAxMDAwMDAwMDBENUUyQjMwMTAwMDAwMDAwRDU0OQorOjEwMTNEMDAwRTRCMzAxMDAwMDAwMDBENUU4QjMwMTAwMDAwMDAwRDUyRgorOjEwMTNFMDAwRUFCMzAxMDAwMDAwMDBENUY0QjMwMTAwMDAwMDAwRDUwRAorOjEwMTNGMDAwRjZCMzAxMDAwMDAwMDBENUY4QjMwMTAwMDAwMDAwQzdGQgorOjEwMTQwMDAwQTlCMTAxMDAwMDAwMDA0RjQwQjEwMTAwODEwMjAwNDA3RAorOjEwMTQxMDAwOTFCMDAwMDAwMDAwMDA0MTkxQjAwMTAwMDcwMDAwNDBDMQorOjEwMTQyMDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwODUwMjAwNDA1QgorOjEwMTQzMDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwOEEwMjAwNDA5NgorOjEwMTQ0MDAwODFCMjAwMDA5NTAyMDA0MDgxQjIwMDAwOTUwMjAwNDY4MgorOjEwMTQ1MDAwQTNCMzAwMDA5ODAyMDA0MDgxQjIwMDAwOUUwMjAwNDA0OQorOjEwMTQ2MDAwODFCMjAwMDA4QzAyMjM1MEE1NkYwMDAwMDAwMDAwNTBFNAorOjEwMTQ3MDAwQTVCMzAxMDBCQzAyMDA0MkE1NjMwMTAwQzUwMjAwNDAwMworOjEwMTQ4MDAwODEzMjAxMDBEMDE0MkQ0MDQ5QjEwMTAwMDAwMDAwRDA4QworOjEwMTQ5MDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDAwMDAwRjhCNQorOjEwMTRBMDAwMDBCMDAxMDA5NDAyMjI0NEE1NTMwMDAwOTEwMjAwNDFDMworOjEwMTRCMDAwQTFDMTAwMDA1QTAxMDBEREExQjEwMDAwQkMwMjAwREVBNAorOjEwMTRDMDAwQTEzMzAxMDBDNTAyMDA0MDgxMzIwMTAwNUEwMTAwNDBGMQorOjEwMTREMDAwODFCMjAwMDAwMDAwMDA0NUJGQjMwMTAwNTUwMUEyRDI1NworOjEwMTRFMDAwNzc3RDAwMDAwMDAwMDBEMjYxQjEwMTAwMDAwMDAwREU0NQorOjEwMTRGMDAwNjNCMTAxMDA5QjAyQTg0MDgxMzIwMDAwNUEwMTAwNDAwNAorOjEwMTUwMDAwODFCMjAwMDBCQzAyMDA1NEE1MzMwMTAwQzUwMjAwNDBCNgorOjEwMTUxMDAwODEzMjAxMDBEMDE0MkQ0MDQ5QjEwMTAwMDAwMDAwRjhEMworOjEwMTUyMDAwRDBCMzAxMDAwMDAwMDBGOEQyQjMwMTAwMDAwMDAwRjhDMQorOjEwMTUzMDAwRDRCMzAxMDAwMDAwMDBGOEQ2QjMwMTAwMDAwMDAwRjhBOQorOjEwMTU0MDAwMDhCMTAxMDBBOTAyMDA0MDgxOTgwMTAwNUQwMjAwNDYzNworOjEwMTU1MDAwODMzMDAxMDA1QTAxMDA0MDgxQjIwMDAwMDAwMDAwQTA2OQorOjEwMTU2MDAwOUVCMDAxMDAwMDAwMDBFODQzQjEwMTAwMDAwMDAwRTk2NgorOjEwMTU3MDAwNDVCMTAxMDAwMDAwMDBFQTQ5QjEwMTAwMDAwMDAwRUJBNAorOjEwMTU4MDAwQTFCMTAxMDAwMDAwMDA0RjQwQjEwMTAwMDAwMDAwRTdFMAorOjEwMTU5MDAwQTdCMzAxMDAwMDAwMDBEOEE5QjMwMTAwMDAwMDAwNDA3QgorOjEwMTVBMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjAzNworOjEwMTVCMDAwNDZCMTAxMDAwMDAwMDBEMkYxQjEwMTAwMDAwMDAwRDNFQgorOjEwMTVDMDAwRjFCMTAxMDAwMDAwMDBENEYxQjEwMTAwMDAwMDAwRDAzMQorOjEwMTVEMDAwRTFCMTAxMDAwMDAwMDBEMTYxQjEwMTAwMjAwMDAwMjA1NAorOjEwMTVFMDAwNjJERDAxMDBCOTAyQTg0MDgxMzIwMDAwMDAwMDgwQ0MxOQorOjEwMTVGMDAwODU5MzAxMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDhCOAorOjEwMTYwMDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0JDNgorOjEwMTYxMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI3MworOjEwMTYyMDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwRDNEMQorOjEwMTYzMDAwRjFCMTAxMDBCODAyMDBENEUxQjEwMDAwMDAwMEEyQ0M3OQorOjEwMTY0MDAwODVGRjAwMDAwMDAwMDA1MDgxQjAwMTAwQzcwMkEyNDFFOAorOjEwMTY1MDAwODE1MDAwMDBDNjAyQTJGMjgwMzAwMDAwMDAwMDgwQ0M2MQorOjEwMTY2MDAwODU4MzAxMDAwMDAwMDA0MDgxQjAwMTAwQ0IwMjgwQTUwRAorOjEwMTY3MDAwODAzMjAwMDBDQzAyMDBBNTgwMzIwMDAwMDAwMDAwNDE1MgorOjEwMTY4MDAwODFDMDAxMDBDRDAyODBBNTgwMzIwMDAwODAwMTAwNDBCMQorOjEwMTY5MDAwODM5ODAxMDBENjAyMjA0RjgxNkMwMDAwMDAwMTAwNDBCOQorOjEwMTZBMDAwODM5ODAxMDBENjAyMjA0QjgxNkMwMDAwODAwMDAwNDAyRQorOjEwMTZCMDAwODM5ODAxMDBENjAyMjA0NzgxNkMwMDAwMDAwMDAwNDBBMgorOjEwMTZDMDAwODM5ODAxMDAwMDAwMDA0MTgyREMwMTAwMDM5MDAwNDE4QQorOjEwMTZEMDAwMjA5OTAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAxNDJGNEM4NgorOjEwMTZFMDAwODNCMDAxMDAwMDAwMDA0MEYxQjEwMTAwREEwMkEyNDEyNAorOjEwMTZGMDAwODM1MDAwMDAwMjAwMDBBNTgwQzgwMTAwREQwMkEyQTUwMQorOjEwMTcwMDAwODA2QzAwMDAyMDAwMDA5MDIwOTkwMTAwMDAwMDAwNUYyNAorOjEwMTcxMDAwMjM5MTAxMDBFMDAyMUY5MTgwMzIwMDAwMzAwMDAwOTAxMAorOjEwMTcyMDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwRTMwMjFGOTE1NgorOjEwMTczMDAwODAzMjAwMDA3MDAwMDA5MDIwQTkwMTAwMDAwMDAwNUZDRQorOjEwMTc0MDAwMjM5MTAxMDBFNjAyMUY5MTgwMzIwMDAwMDAwMDAwNUYzQgorOjEwMTc1MDAwMjM5MTAxMDBFODAyMUY5MTgwMzIwMDAwNDA2ODAwOTA1MAorOjEwMTc2MDAwMjBBOTAxMDBFMDAwMDA0MDYxOTkwMTAwMjEwMDAwNDAzMworOjEwMTc3MDAwNjE5OTAxMDAyMjAwMDA0MDYxOTkwMTAwMjMwMDAwNDBBRQorOjEwMTc4MDAwNjE5OTAxMDAyNDAwMDA0MDYxOTkwMTAwMjUwMDAwNDA5QQorOjEwMTc5MDAwNjE5OTAxMDAyNjAwMDA0MDYxOTkwMTAwMjcwMDAwNDA4NgorOjEwMTdBMDAwNjE5OTAxMDBDMDAwMDA0MDYxOTkwMTAwRDAxNDAwNDAxRgorOjEwMTdCMDAwNDU5OTAxMDAwMjAxMDBBNjgwQjAwMTAwMDQwMzAwNDAyOQorOjEwMTdDMDAwODA5ODAxMDAwNjA1MDBBNjgyQjAwMTAwMDgwNzAwNDFDQworOjEwMTdEMDAwODI5ODAxMDAwMDAwMDA0MEYwQjEwMTAwMDAwMDAwNDFDQgorOjEwMTdFMDAwRTBCMTAxMDAzMDAzMDA0MDg1MzAwMTAwMzkwMzAwNDBDMgorOjEwMTdGMDAwODEzMjAxMDBEODE0MDA0MDQzOTkwMTAwRkYwMkEyRjg5MQorOjEwMTgwMDAwODA2QzAwMDAwMDAzMjJGMDgyNkMwMDAwMDAwMDAwNDJBNworOjEwMTgxMDAwMjE5MTAxMDBEMDE0MjA0MEUxQjEwMTAwMzAwMzAwMENGRgorOjEwMTgyMDAwODUzMDAxMDAzMDAzMDA0RDg1MTAwMTAwMzAwMzAwNEU2QgorOjEwMTgzMDAwODUxMDAxMDBEMDE0MjA0RkUxQjEwMTAwMzAwMzAwNEZBQQorOjEwMTg0MDAwODUxMDAxMDAzOTAzMDAwQzg1MzAwMTAwRDgxNDIwNDNCNQorOjEwMTg1MDAwODFCMDAxMDAwRjAzMjJGMDlFNkUwMDAwMzkwMzAwNEQ5RAorOjEwMTg2MDAwODUxMDAxMDBEODE0MjA0MjgxQjAwMTAwMEYwMzIyRjAzRQorOjEwMTg3MDAwOUU2RTAwMDAzOTAzMDA0RTg1MTAwMTAwRDgxNDIwNDFFRgorOjEwMTg4MDAwODFCMDAxMDAxMTAzQTJGMDlFNkUwMDAwMDAwMDAwNDkyQgorOjEwMTg5MDAwODFFMDAxMDAwMDAwMDA0MDIwOTUwMTAwMDMwMDAwOTA1RAorOjEwMThBMDAwMjA4RDAxMDAwMDAwMDA0MzIxOTUwMTAwMDAwMDAwMUI3NQorOjEwMThCMDAwODlCMDAxMDBEMDE0MjA0MEUxQjEwMTAwMzAwMzAwMTdDRAorOjEwMThDMDAwODUzMDAxMDAzMDAzMDA1ODg1MTAwMTAwMzAwMzAwNTlCNQorOjEwMThEMDAwODUxMDAxMDBEMDE0MjA0RkUxQjEwMTAwMzAwMzAwNUFGRgorOjEwMThFMDAwODUxMDAxMDAzOTAzMDAxNzg1MzAwMTAwRDgxNDIwNDAwRAorOjEwMThGMDAwODFCMDAxMDAyMzAzMjJGMDlFNkUwMDAwMzkwMzAwNThERQorOjEwMTkwMDAwODUxMDAxMDBEODE0MjA0MTgxQjAwMTAwMjMwMzIyRjA4QQorOjEwMTkxMDAwOUU2RTAwMDAzOTAzMDA1OTg1MTAwMTAwRDgxNDIwNDI0MgorOjEwMTkyMDAwODFCMDAxMDAyNzAzQTJGMDlFNkUwMDAwMDMwMDAwOTAyQQorOjEwMTkzMDAwMjA4RDAxMDAwMDAwMDA0MDIwOTUwMTAwMDAwMDAwMThFQgorOjEwMTk0MDAwODlCMDAxMDAwMDAwMDA0MDg4RTAwMTAwMkYwM0EyNDI5RQorOjEwMTk1MDAwMjE3RDAwMDBBNUE1MDA0MDgxOTgwMTAwRDAxNDIwNDAwMQorOjEwMTk2MDAwRTBCMTAxMDAzMDAzMDA0NDg0MzAwMTAwMzkwMzAwNDAzRAorOjEwMTk3MDAwODEzMjAxMDBEODE0MjA0MDgxQjIwMTAwMkYwM0EyRjA2RgorOjEwMTk4MDAwODA2QzAwMDAwMDAwMDA0MTg5RTAwMTAwRTAwMDgwNDAyMAorOjEwMTk5MDAwNjE5OTAxMDA3MDE1MDA0MDQ3OTkwMTAwMDAwMDAwNDg1RQorOjEwMTlBMDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwRDAxNDAwNDA4QworOjEwMTlCMDAwRjE5OTAxMDAwMDAwMDA1NTg3QjQwMTAwMDQwMDAwNDBDNworOjEwMTlDMDAwNjE5OTAxMDA3MDE1MDA0MzYyOTkwMTAwMzYwM0E4NDAzNworOjEwMTlEMDAwODEzMjAwMDA0MTAzMDA0MDgxQjIwMDAwNzAxNTAwNDBEOAorOjEwMTlFMDAwNDc5OTAxMDAwMDAwMDA0OEYxQjEwMTAwRDgxNDAwNDBGRgorOjEwMTlGMDAwRjE5OTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwNTUyMworOjEwMUEwMDAwODdCNDAxMDAwMjAwMDA0MDYxOTkwMTAwNzAxNTAwNDM5NQorOjEwMUExMDAwNjI5OTAxMDAzRjAzQTg0MDgxMzIwMDAwMDAwMDAwNDhBNQorOjEwMUEyMDAwODdCMDAxMDA0MjAzQTI0MTg3NTAwMDAwMDAwMEEyRjJFQgorOjEwMUEzMDAwODZCMDAwMDAxMDAwMDBGMTg2RjQwMTAwNDEwMzI2NDA0QQorOjEwMUE0MDAwODEzMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDAwMDAwNDcyNQorOjEwMUE1MDAwODRCMDAxMDAwMDAwQTI0ODg0ODQwMDAwMDAwMDAwNUYwMAorOjEwMUE2MDAwNjFCMTAxMDAwMDAwMDA1QzhGOTAwMTAwMDAwMDAwNDdBMAorOjEwMUE3MDAwNjJCMTAxMDA0OTAzQTg0MDgxMzIwMDAwRjU5RjAwNDc5MAorOjEwMUE4MDAwOTgzMDAxMDAwMDA4MDA0NzhFQzgwMTAwNDcwMzAwNUM0MQorOjEwMUE5MDAwOEY4MDAwMDBFMDAwMDA0MDYxOTkwMTAwNTgxNTJENDA0MgorOjEwMUFBMDAwOERCMDAxMDBEMDE0MkRGMDg4QjAwMTAwMDAwMDAwRkFDNAorOjEwMUFCMDAwOEFCMDAxMDAwMDAwMDA0NTgxQjAwMTAwMDcwMDAwNDUyOAorOjEwMUFDMDAwODI4ODAxMDAwMDAwMDA0MzhCRjAwMTAwMDAwMDAwNDgwNAorOjEwMUFEMDAwODNFMDAxMDAwMDAwMDA0NjgyOTQwMTAwMjAwMDAwNDFFNAorOjEwMUFFMDAwNjA5OTAxMDAwMDAwMDA0MThEQzAwMTAwNjQwMzIyNUY4NQorOjEwMUFGMDAwOEQ2QzAwMDA1NTAzQTI0MTgxNTAwMDAwNTMwMzAwNDA0QgorOjEwMUIwMDAwODFCMjAwMDAwODAwMDA0MDg1OTgwMTAwMDAwMDAwNDRGOAorOjEwMUIxMDAwODJCMDAxMDAwMDAwMDA0MTg2QjAwMTAwMDAxQzAwNDNCQgorOjEwMUIyMDAwODZEODAxMDAwMDAwQTY0MTg1NTAwMTAwNjAwMzAwNDFGNQorOjEwMUIzMDAwODNFMDAwMDA1RTAzMDA0MDgxMzIwMTAwMDAwMDAwNDhBNQorOjEwMUI0MDAwODVFMDAxMDBEMDE0MkY0Njg0OTQwMTAwMjAwMDAwNDI1QgorOjEwMUI1MDAwNjA5OTAxMDBDMDAwMDA0MDYxOTkwMTAwMDAwMDgwNDBEMAorOjEwMUI2MDAwODFCMjAxMDAwNzAwMDA0NTgwODgwMTAwMDAwMDAwNDNBOQorOjEwMUI3MDAwOEJGMDAxMDAwMDA0MDA0MDgzOTgwMTAwNkYwM0EwNDEzNgorOjEwMUI4MDAwODE1MDAwMDA2RDAzMDA0MTgyRTgwMDAwMDAwMDgwNDFBOAorOjEwMUI5MDAwOEVDMDAxMDBBRTAzMDA0MEEzOTkwMTAwMDAwMDAwNTQ3NAorOjEwMUJBMDAwODFCMDAxMDA2MDE1MDA0MDg1OTgwMTAwMDgwMDAwNDBFOAorOjEwMUJCMDAwNDBFNDAxMDAwMDAwMDA1QTQxOTQwMTAwMDAwMDAwNTA4MAorOjEwMUJDMDAwNDFFMDAxMDAwMDAwMDA0MjQwOTQwMTAwMDAwMDAwNDE5QgorOjEwMUJEMDAwODFDMDAxMDAwMDAwQTM1NTgxNkMwMTAwMDAwMDAwNDE5QworOjEwMUJFMDAwQTNDMTAxMDA3MzAzMDA1MDg1QzAwMDAwMDAwMDAwNDA0NQorOjEwMUJGMDAwNDlCMTAxMDAwMDAyMDA0MDgzOTgwMTAwMDAxNjAwNDAzNgorOjEwMUMwMDAwNDU5OTAxMDAwMDAwMDA0MEYxQjEwMTAwN0UwM0EyNDFBRQorOjEwMUMxMDAwODM1MDAwMDAwMDAwMDA0MDg1QjAwMTAwMEIwMDAwNDQyQworOjEwMUMyMDAwODJGNDAxMDAxQTE1MDBBNjg2QjAwMTAwNzAxNTAwNDA2QworOjEwMUMzMDAwNDU5OTAxMDAwMDA4MDA0MEYxOTkwMTAwMDAwMDAwNDJCMAorOjEwMUM0MDAwRjBCMTAxMDAwMDE2MDA0MEUxOTkwMTAwMDQwMDAwNDBERAorOjEwMUM1MDAwNjE5OTAxMDA3MDE1MDA0MzYyOTkwMTAwODgwM0E4NDA1MgorOjEwMUM2MDAwODEzMjAwMDA4QTAzMjI1QTczN0QwMDAwN0EwMDAwNDAwRQorOjEwMUM3MDAwNjE5OTAxMDA4QjAzQThCMTdFMzEwMDAwMDAwODAwNDI4OQorOjEwMUM4MDAwODRDODAxMDA4MzAzQTI0MTgzNTAwMDAwMDAwMDgwNDAwQgorOjEwMUM5MDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMUNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMUNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMUNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMUNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMUNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMUQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMUQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMUQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMUQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMUQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMUQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMUQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMUQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMURBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMURCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMURDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMUREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMURFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMURGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMUUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMUUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMUUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMUUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMUU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMUU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMUU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMUU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMUU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMUU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMUVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMUVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMUVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMUVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMUVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMUVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMUYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMUYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMUYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMUYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMUY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMUZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMUZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMUZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMUZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMUZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMUZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMjAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMjAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMjAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMjAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMjA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMjA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMjA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMjA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMjA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMjA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMjBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMjBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMjBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMjBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMjEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMjEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMjE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMjE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMjE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMjE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMjE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMjE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMjFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMjFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMjFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMjFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMjFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMjFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMjIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMjIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMjIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMjIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMjI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMjI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMjI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMjI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMjI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMjI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMjJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMjJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMjMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMjMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMjMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMzAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMzAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMzAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMzAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMzA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMzA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMzA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMzA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMzA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMzA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMzBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMzBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMzBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMzBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMzEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMzExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMzEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMzEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMzE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMzE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMzE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMzE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMzE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMzE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMzFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMzFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMzFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMzFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMzFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMzFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMzIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMzIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMzIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMzIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMzI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMzI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMzI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMzI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMzI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMzI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMzJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMzJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMzJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMzJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMzJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMzJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMzMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMzMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMzMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMzMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMzM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMzM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMzM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMzM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMzM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMzM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMzNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMzNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMzNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMzNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMzNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMzNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMzQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMzQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMzQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMzQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMzQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMzQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMzRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMzRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMzRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMzREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMzRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMzRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMzUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMzUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMzUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMzUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMzU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMzU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMzU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMzU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMzU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMzU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMzVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMzVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMzVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMzVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMzVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMzYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMzYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMzY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMzY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMzY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMzY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMzY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMzY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMzZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMzZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMzZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMzZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMzZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMzZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMzcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMzcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMzcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMzczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMzc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMzc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMzc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMzc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMzc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMzc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMzdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMzdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMzdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMzdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMzdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMzdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMzgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMzgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMzgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMzgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMzg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMzg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMzg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMzg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMzg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMzg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMzhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMzhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMzhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMzhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMzhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMzhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMzkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMzkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMzkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMzkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMzk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMzk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMzk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMzk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMzk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMzk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMzlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMzlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMzlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMzlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMzlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMzlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwM0EwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwM0ExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwM0EyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0EzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwM0E0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwM0E1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwM0E2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwM0E3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwM0E4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwM0E5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwM0FBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwM0FCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwM0FDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwM0FEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwM0FFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwM0FGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwM0IwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwM0IxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwM0IyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwM0IzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwM0I0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwM0I1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwM0I2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwM0I3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwM0I4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwM0I5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwM0JBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwM0JCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwM0JDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwM0JEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwM0JFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwM0JGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwM0MwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwM0MxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwM0MyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwM0MzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwM0M0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwM0M1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwM0M2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwM0M3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwM0M4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwM0M5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwM0NBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwM0NCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwM0NDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwM0NEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwM0NFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwM0NGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwM0QwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwM0QxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwM0QyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwM0QzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwM0Q0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwM0Q1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwM0Q2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwM0Q3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwM0Q4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwM0Q5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwM0RBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwM0RCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwM0RDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwM0REMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwM0RFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwM0RGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwM0UwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwM0UxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwM0UyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwM0UzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwM0U0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwM0U1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwM0U2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwM0U3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwM0U4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwM0U5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwM0VBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwM0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwM0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwM0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwM0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwM0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwM0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwM0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwM0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwM0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwM0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwM0ZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwM0ZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwM0ZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNDAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNDAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNDAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNDAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNDA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNDA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNDA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNDA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNDA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNDA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNDBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNDBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNDBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNDBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNDBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNDBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNDEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNDExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNDEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNDEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNDE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNDE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNDE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNDE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNDE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNDE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNDFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNDFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNDFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNDFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNDFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNDFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNDIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNDIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNDIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNDIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNDI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNDI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNDI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNDI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNDI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNDI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNDJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNDJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNDJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNDJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNDJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNDJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNDMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNDMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNDMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNDMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNDM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNDM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNDM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNDM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNDM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNDM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNDNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNDNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNDNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNDNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNDNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNDNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNDQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNDQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNDQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNDQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNDQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNDQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNDQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNDQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNDQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNDQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNDRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNDRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNDRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNDREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNDRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNDRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNDUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNDUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNDUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNDUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNDU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNDU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNDU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNDU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNDU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNDU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNDVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNDVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNDVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNDVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNDVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNDVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNDYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNDYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNDYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNDYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNDY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNDY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNDY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNDY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNDY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNDY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNDZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNDZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNDZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNDZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNDZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNDZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNDcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNDcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNDcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNDczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNDc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNDc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNDc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNDc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNDc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNDc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNDdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNDdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNDdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNDdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNDdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNDdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNDgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNDgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNDgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNDgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNDg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNDg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNDg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNDg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNDg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNDg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNDhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNDhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNDhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNDhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNDhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNDhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNDkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNDkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNDkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwNDkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNDk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNDk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNDk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNDk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNDk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNDk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNDlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNDlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNDlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNDlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNDlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNDlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNEEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwNEExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwNEEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwNEEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwNEE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwNEE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNEE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwNEE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwNEE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwNEE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwNEFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwNEFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwNEFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwNEFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwNEFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwNEFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwNEIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwNEIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwNEIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwNEIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwNEI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwNEI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwNEI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwNEI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwNEI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwNEI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwNEJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwNEJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwNEJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwNEJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwNEJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwNEJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwNEMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwNEMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwNEMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwNEMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwNEM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwNEM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwNEM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwNEM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwNEM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwNEM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwNENBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwNENCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwNENDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwNENEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwNENFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwNENGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwNEQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwNEQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwNEQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwNEQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwNEQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwNEQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwNEQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwNEQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwNEQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwNEQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwNERBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwNERCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwNERDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwNEREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwNERFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwNERGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwNEUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwNEUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwNEUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwNEUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwNEU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwNEU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwNEU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwNEU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwNEU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwNEU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwNEVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwNEVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwNEVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwNEVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwNEVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwNEVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwNEYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwNEYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwNEYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwNEYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwNEY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwNEY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwNEY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNEY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwNEY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwNEY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwNEZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwNEZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwNEZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwNEZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwNEZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNEZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwNTAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNTAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNTAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNTAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNTA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNTA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNTA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNTA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNTA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNTA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNTBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNTBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNTBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNTBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNTBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNTBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNTEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNTExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNTEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNTEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNTE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNTE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNTE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNTE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNTE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNTE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNTFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNTFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNTFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNTFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNTFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNTFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNTIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNTIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNTIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNTIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNTI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNTI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNTI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNTI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNTI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNTI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNTJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNTJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNTJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNTJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNTJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNTJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNTMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNTMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNTMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNTMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNTM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNTM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNTM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNTM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNTM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNTM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNTNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNTNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNTNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNTNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNTNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNTNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNTQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNTQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNTQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNTQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNTQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNTQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNTQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNTQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNTQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNTQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNTRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNTRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNTRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNTREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNTRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNTRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNTUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNTUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNTUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNTUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNTU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNTU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNTU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNTU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNTU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNTU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNTVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNTVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNTVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNTVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNTYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNTYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNTYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNTYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNTY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNTY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNTY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNTY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNTY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNTY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNTZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNTZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNTZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNTZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNTZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNTcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNTcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNTcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNTczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNTc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNTc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNTc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNTc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNTc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNTdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNTdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNTdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNTgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNTgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNTgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNTg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNTg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNTg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNTg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNTg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNTg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNThBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNThCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNThDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNThEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNThFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNThGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNTkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNTkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwNTkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNTkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNTk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNTk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNTk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNTk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNTk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNTk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNTlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNTlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNTlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNTlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNTlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNTlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNUEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwNUExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwNUEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwNUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwNUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNUE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwNUE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwNUE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwNUE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwNUE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwNUFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwNUFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwNUFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwNUFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwNUFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwNUFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwNUIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwNUIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwNUIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwNUIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwNUI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwNUI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwNUI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwNUI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwNUI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwNUI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwNUJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwNUJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwNUJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwNUJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwNUJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwNUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwNUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwNUMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwNUMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwNUMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwNUM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwNUM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwNUM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwNUM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwNUM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwNUM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwNUNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwNUNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwNUNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwNUNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwNUNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwNUNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwNUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwNUQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwNUQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwNUQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwNUQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwNUQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwNUQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwNUQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwNUQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwNUQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwNURBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwNURCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwNURDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwNUREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwNURFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwNURGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwNUUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwNUUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwNUUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwNUUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwNUU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwNUU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwNUU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwNUU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwNUU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwNUU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwNUVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwNUVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwNUVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwNUVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwNUVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwNUVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwNUYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwNUYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwNUYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwNUYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwNUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwNUY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNUY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwNUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwNUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwNUY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwNUZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwNUZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwNUZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwNUZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNUZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwNUZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwNjAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNjAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNjAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNjAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNjA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNjA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNjA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNjA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNjA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNjA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNjBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNjBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNjBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNjBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNjExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNjEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNjEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNjE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNjE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNjE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNjE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNjE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNjE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNjFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNjFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNjFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNjFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNjFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNjFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNjIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNjIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNjIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNjIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNjI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNjI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNjI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNjI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNjI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNjI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNjJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNjJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNjJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNjMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNjMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNjMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwNjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwNkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwNkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwNkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwNkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwNkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwNkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwNkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwNkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwNkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwNkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwNkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwNkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwNkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwNkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwNkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwNkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwNkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwNkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwNkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwNkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwNkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwNkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwNkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwNkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwNkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwNkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwNkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwNkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwNkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwNkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwNkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwNkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwNkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwNkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwNkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwNkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwNkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwNkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwNkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwNkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwNkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwNkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwNkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwNkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwNkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwNkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwNkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwNkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwNkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwNkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwNkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwNkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwNkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwNkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwNkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwNkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwNkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwNkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwNkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwNkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwNkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwNkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwNkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwNkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwNkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwNkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwNkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwNkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwNkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwNkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwNkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwNkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwNkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwNkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwNkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwNkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwNkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwNkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwNkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwNkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwNkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwNkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwNkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwNkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwNkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwNkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwNkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwNkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwNkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwNkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwNkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwNkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwNzAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNzAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNzAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNzAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNzA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNzA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNzA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNzA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNzA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNzA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNzBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNzBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNzBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNzBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNzBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNzEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNzExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNzEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNzEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNzE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNzE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNzE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNzE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNzE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNzE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNzFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNzFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNzFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNzFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNzFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNzFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNzIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNzIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNzIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNzIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNzI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNzI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNzI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNzI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNzI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNzI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNzJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNzJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNzJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNzJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNzJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNzJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNzMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNzMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNzMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNzMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNzM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNzM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNzM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNzM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNzM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNzM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNzNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNzNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNzNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNzNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNzNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNzNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNzQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNzQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNzQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNzQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNzQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNzQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNzQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNzRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNzRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNzRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNzREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNzRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNzRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNzUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNzUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNzUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNzUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNzU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNzU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNzU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNzU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNzU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNzU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNzVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNzVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNzVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNzVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNzVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNzYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNzYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNzYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNzY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNzY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNzY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNzY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNzY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNzY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNzZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNzZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNzZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNzZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNzZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNzZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNzcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNzcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNzcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNzczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNzc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNzc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNzc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNzc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNzc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNzc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNzdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNzdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNzdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNzdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNzdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNzdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNzgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNzgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNzgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNzgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNzg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNzg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNzg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNzg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNzg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNzg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNzhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNzhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNzhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNzhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNzhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNzhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNzkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNzkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNzkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNzkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNzk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNzk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNzk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNzk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNzk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNzk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNzlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNzlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNzlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNzlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNzlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNzlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwN0EwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwN0ExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwN0EyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwN0EzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwN0E0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwN0E1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwN0E2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwN0E3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwN0E4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwN0E5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwN0FBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwN0FCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwN0FDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwN0FEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwN0FFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwN0FGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwN0IwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwN0IxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwN0IyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwN0IzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwN0I0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwN0I1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwN0I2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwN0I3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwN0I4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwN0I5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwN0JBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwN0JCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwN0JDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwN0JEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwN0JFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwN0JGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwN0MwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwN0MxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwN0MyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwN0MzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwN0M0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwN0M1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwN0M2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwN0M3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwN0M4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwN0M5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwN0NBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwN0NCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwN0NDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwN0NEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwN0NFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwN0NGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwN0QwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwN0QxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwN0QyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwN0QzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwN0Q0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwN0Q1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwN0Q2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwN0Q3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwN0Q4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwN0Q5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwN0RBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwN0RCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwN0RDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwN0REMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwN0RFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwN0RGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwN0UwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwN0UxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwN0UyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwN0UzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwN0U0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwN0U1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwN0U2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwN0U3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwN0U4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwN0U5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwN0VBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwN0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwN0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwN0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwN0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwN0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwN0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwN0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwN0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwN0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwN0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwN0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwN0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwN0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwN0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwN0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwN0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwN0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwN0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRjcwRjAwQkM0NQorOjEwN0ZEMDAwODBCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBCNgorOjEwN0ZFMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBBNQorOjEwN0ZGMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDA5NQorOjEwODAwMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDA4NAorOjEwODAxMDAwODFCMjAwMDAzMTgwMDA0MDgxQjIwMDAwMzQ4MDAwNDAxNQorOjEwODAyMDAwODFCMjAwMDAzNTgwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwODAzMDAwODFCMjAwMDAxQjgwODE4MDgwMzIwMDAwRUM4OUEyNDA2OAorOjEwODA0MDAwOTE2RjAwMDAwMDAwMDA0QzkwQjMwMTAwNUM5NTJFQTJERgorOjEwODA1MDAwODBCMDAxMDBGRjAwMDA4MEY0ODkwMTAwOTA5NTJBQzhEQgorOjEwODA2MDAwRTVCMTAxMDAwMDAwMDBBMUYwQjEwMTAwMDAwMDAwNDBGNgorOjEwODA3MDAwRjBCMTAxMDAwMDAwMDBBNEYwQjEwMTAwMDAwMDAwRDA0OAorOjEwODA4MDAwRjBCMTAxMDAwMDAwMDBEMUYwQjEwMTAwMDAwMDAwRDIwOQorOjEwODA5MDAwRjBCMTAxMDAwMDAwMDA0Q0YwQjEwMTAwMDAwMDAwRDQ3QworOjEwODBBMDAwRjBCMTAxMDAwMDAwMDBEM0YwQjEwMTAwMDAwMDAwRUVDQgorOjEwODBCMDAwRjBCMTAxMDAwMDAwMDA0RUYwQjEwMTAwMDAwMDAwNDBFRQorOjEwODBDMDAwNDRCMTAxMDAxODgwMTE4MTk4MzAwMDAwMDAwMDUxNDAzNworOjEwODBEMDAwODFCMjAxMDAxQTgwMTE4Mjk4MzAwMDAwMDAwMDUyNDBFNQorOjEwODBFMDAwODFCMjAxMDBFQzg5MDA0OEZEOTMwMDAwQjYwMzAwNDAxNgorOjEwODBGMDAwQTE5OTAxMDAyMzgwQTI0MkZEN0YwMDAwMjA4MDAwODAyMgorOjEwODEwMDAwODAzMjAwMDAyMjgwMTE4MTgyMzAwMDAwMjI4MDUxNDBBNAorOjEwODExMDAwODFCMjAwMDAyMjgwMTE4MjgyMzAwMDAwMjI4MDUyNDAxMQorOjEwODEyMDAwODFCMjAwMDAyQzgwMDA0OEZEOTMwMDAwMjc4MDAwODA3MQorOjEwODEzMDAwODAzMjAwMDAyNjgwQTI1MzA3N0MwMDAwMDAwMDUxNTNDQgorOjEwODE0MDAwMDc5MDAxMDAyQTgwMDA1MjA3OTAwMDAwMjk4MEEyNTI2NworOjEwODE1MDAwMDc3QzAwMDAwMDAwNTI1MjA3OTAwMTAwMDAwMDAwNTMwRAorOjEwODE2MDAwMDc5MDAxMDAwMDAwMDA0OEZEOTMwMTAwMDAwMDAwNDU1OQorOjEwODE3MDAwRjM5MzAxMDA1Qzk1MkVBMjUyQjMwMTAwRkYwMDAwODAzMgorOjEwODE4MDAwRjQ4OTAxMDAwMDAwMDA0Q0U0QjEwMTAwMDAwMDAwQTlFNgorOjEwODE5MDAwNDVCMTAxMDAzMDgwMDA0QzgwQjIwMDAwMDAwMDQ1NDAzNQorOjEwODFBMDAwODFCMjAxMDAwMDAwNTU0MDgxQjIwMTAwMUI4NDA1NDBFRQorOjEwODFCMDAwNDlCMTAwMDAxQjg0MDU0MDQ5QjEwMDAwMDAwMDA1NDBBMgorOjEwODFDMDAwNDlCMTAxMDBFMTgwMDA0MDgxMzIwMTAwMDAwMDAwNEIxNAorOjEwODFEMDAwREVCMjAxMDA3NzAwMDA0MDRCOTkwMTAwMDAwMDAwNDAzMgorOjEwODFFMDAwRkQ5MzAxMDAwMDAwMDA0OEZEODMwMTAwMDIwMDAwNDBGMworOjEwODFGMDAwOUI5QjAxMDAwMDAwMDBBNTlDQjMwMTAwRjY5OTAwNDA4NAorOjEwODIwMDAwODEzMjAxMDA1ODk1MjA0NEUwQjEwMTAwMDBDMDAwQTY3MQorOjEwODIxMDAwMzZCMTAxMDBEMDE0MDA0MDQ3OTkwMTAwMDUwMDAwNDAyQworOjEwODIyMDAwRjU5OTAxMDAwMDM4MDA0MEY1OTkwMTAwMDAwNjAwNDA3MgorOjEwODIzMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDUxODAwNDA4MworOjEwODI0MDAwRjU5OTAxMDAwMjA5MDA0MEY1OTkwMTAwMDQwMDAwNDA4MQorOjEwODI1MDAwRjU5OTAxMDA1MDAzMDA0MDgxMzIwMTAwN0IwMzAwNDA4QQorOjEwODI2MDAwODEzMjAxMDBFMDgzMDA0MDgxMzIwMTAwMTA4NDAwNDAyRgorOjEwODI3MDAwODEzMjAxMDAwODg0MDA0MDgxMzIwMTAwNjA5NTIwNDA3NQorOjEwODI4MDAwRTFCMTAxMDA3MDk1MjA0MEUxQjEwMTAwMDAwMDAwNDkxQQorOjEwODI5MDAwREQ5MTAxMDAwMDAwMDA0MDkxQjMwMTAwMDAwMDAwNDBBQQorOjEwODJBMDAwODVCMzAxMDA1Qzk1MjA0MEUxQjEwMTAwMUE4MjAwNDBENQorOjEwODJCMDAwODEzMjAxMDA3MTgzMDA0MDgxMzIwMTAwMDIwMDAwOTc4OQorOjEwODJDMDAwODA5ODAxMDAwMDAwMDA0MDJFQjEwMTAwMDIwMDAwNDAzMworOjEwODJEMDAwMkVERDAxMDA5MDAxMDA0MDkzOTgwMTAwMjkwMTAwNDAyQgorOjEwODJFMDAwODEzMjAxMDA1QzgxMDA0MEFGMzMwMTAwNzk5OTAwNDA4OAorOjEwODJGMDAwODEzMjAxMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDU1NDA3QworOjEwODMwMDAwODFCMjAxMDA0OTg0MDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwODMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwODMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwODMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwODM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwODM1MDAwODFCMjAwMDA3NzAxMDA0MTgxQzAwMDAwNzE4MDUxNDA2RQorOjEwODM2MDAwODFCMjAwMDA3MjgwNTI0MDgxQjIwMDAwNzM4MDU1NDA5QgorOjEwODM3MDAwODFCMjAwMDA3NDgwNTY0MDgxQjIwMDAwNTUwMTkxODFBNQorOjEwODM4MDAwODAzMDAwMDA1QTAxNDU0MDgxQjIwMDAwNTUwMTkxODJDMQorOjEwODM5MDAwODAzMDAwMDA1QTAxNDY0MDgxQjIwMDAwNUEwMTAwNDg3NgorOjEwODNBMDAwRkQ5MzAwMDA1QTAxMDA0OEZEOTMwMDAwNUEwMTAwNDk2NgorOjEwODNCMDAwRkQ4MzAwMDA1QTAxMDA0QUZEODMwMDAwMDAwMDAwNDBEOAorOjEwODNDMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjBBOQorOjEwODNEMDAwNDZCMTAxMDAwMDAwMDBEMkYxQjEwMTAwMDAwMDAwRDM1RAorOjEwODNFMDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwNDVDMQorOjEwODNGMDAwNjFCMTAxMDAyMDAwMDAyMDYyREQwMTAwMDAwMEE4RDA3MgorOjEwODQwMDAwRTFCMTAwMDA3QzgwMDA0MDgxQjIwMDAwMDAwMDAwQThDMworOjEwODQxMDAwOThCMDAxMDAwNDgwMDA0MDhCQjMwMDAwQjEwMzAwNDAxRAorOjEwODQyMDAwQTE5OTAxMDA4NDgwQTI0MTk3NkYwMDAwMDAwMDAwNDVERgorOjEwODQzMDAwQTFDMTAxMDAwMDAwMDAwMDgwQjAwMTAwMDAwMEEyMDQwMgorOjEwODQ0MDAwODA5NDAwMDA4MDE1M0Y0Mjk3RTMwMTAwMDAwMDAwNDA0NworOjEwODQ1MDAwNDlCMTAxMDAwMDAwNjAwMzAyOTQwMTAwMDAwMDAwNDBFNworOjEwODQ2MDAwMDdCMDAxMDAwNDAwMDBDQjk5Q0IwMTAwMDAwMDAwQ0M1NAorOjEwODQ3MDAwRjM4MzAxMDA4RTgwQTI0MTk3NkYwMDAwMDAwMDAwQ0JDMworOjEwODQ4MDAwRjM5MzAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjA1QworOjEwODQ5MDAwNDRCMTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwMDBGRgorOjEwODRBMDAwRjBCMTAxMDAwMDAwMDAwNEYwQjEwMTAwMDAwMDAwQTFFMworOjEwODRCMDAwRTBCMTAxMDAwNTAwMDA0MDYxOTkwMTAwMjAwMDAwMjBBQQorOjEwODRDMDAwNjJERDAxMDA5NTgwQTg0MDgxMzIwMDAwQzYwMjAwMjBENAorOjEwODREMDAwNDIzMTAxMDAwMDAwQTI0MTA1NkMwMTAwMDAwMDgwQ0I4OAorOjEwODRFMDAwREI5MTAxMDAwMDAwMTk0MThCQjMwMTAwNjAwMDAwNDBFNgorOjEwODRGMDAwNjE5OTAxMDA5QjgwQThCMThDMzMwMDAwNjAwMDAwNDBBRQorOjEwODUwMDAwNjE5OTAxMDA5RDgwQThCMTk0MzMwMDAwQTM4MDE0QzYzNgorOjEwODUxMDAwODEzMjAwMDAxODAwMDBDNjgzRjQwMTAwNkE4NDIyNEZGMworOjEwODUyMDAwODMwNDAwMDA3RjgwMDA0MDgxQjIwMDAwRkYwMTAwQzY4QworOjEwODUzMDAwODE4ODAxMDAwMDAwMDBDNjk3QTMwMTAwN0Y4MDFGNUNCNgorOjEwODU0MDAwOTc1MzAwMDA5RTgzMURDNjgxMzIwMDAwMDAwMDJGNDMxOAorOjEwODU1MDAwODFGMDAxMDBBOTgwMDA0MDEwQzkwMDAwMDU4MTAwNDBBMQorOjEwODU2MDAwODFCMjAwMDAzNjgxMDA0MDgxQjIwMDAwREE4MTAwQ0E4OQorOjEwODU3MDAwNjNCMzAwMDAyRDgxMDA0MDgxQjIwMDAwMTQ4MTAwNERFMgorOjEwODU4MDAwODNCMDAwMDAxRTgxMDA0RTYxQjEwMDAwMEQ4MTAwNDBFQgorOjEwODU5MDAwODVCMDAwMDAxNDgxMDA0QzgzQjAwMDAwRjA4MDAwNDBFMgorOjEwODVBMDAwODVCMDAwMDA5MTgxMDA0MDQ5QjEwMDAwM0Q4MTAwNDA0QworOjEwODVCMDAwQzFCMTAwMDA4RDgxMDA0MDgxQjIwMDAwMEQ4MTAwNDBGQQorOjEwODVDMDAwODVCMDAwMDBERDgxMDA0MDQ5QjEwMDAwNkE4NDAwQ0EyNgorOjEwODVEMDAwOUJCMzAwMDA0NjgxMDA0MEMxQjEwMDAwNEU4MTAwNDBDNQorOjEwODVFMDAwQzFCMTAwMDA1NTgxMDA0MEMxQjEwMDAwNTY4MTAwNDA3QQorOjEwODVGMDAwQzFCMTAwMDA1NzgxMDA0MEMxQjEwMDAwNTg4MTAwNDA2NgorOjEwODYwMDAwQzFCMTAwMDA1OTgxMDA0MDgxQjAwMDAwNTk4MTAwNDE5MgorOjEwODYxMDAwODFCMDAwMDBDRTgxMDA0MDgxQjIwMDAwREQ4MzAwQkI0QworOjEwODYyMDAwQUJCMzAwMDBEQjgxMDBDQUNGQjMwMDAwRDM4MDAwNDBCMQorOjEwODYzMDAwNDlCMTAwMDBERjgwMDA0MDgxQjIwMDAwREM4MTAwNDBEMQorOjEwODY0MDAwODFCMjAwMDA2QTg0MDA0MDgxQjIwMDAwREE4MDAwNDBGQworOjEwODY1MDAwODFCMjAwMDA2QTg0MDBDQTc3QjMwMDAwMTU4MTAwNEQyMgorOjEwODY2MDAwODNCMDAwMDAxQzgxMDA0RTYxQjEwMDAwMEQ4MTAwQkI5MQorOjEwODY3MDAwODVCMDAwMDAxNTgxMDA0QzgzQjAwMDAwMEQ4MTAwQkI2NworOjEwODY4MDAwODVCMDAwMDBGMDgwMDBCQjg1QjAwMDAwRTI4MDAwNDBCMworOjEwODY5MDAwODFCMjAwMDA2QTg0MDBDQTREQjMwMDAwNjQ4MjAwNDBDOQorOjEwODZBMDAwNDlCMTAwMDA4RjgyMDA0MDQ5QjEwMDAwQzgxNDJFQkJDMAorOjEwODZCMDAwODVCMDAxMDAwMDAwMDBFRTgyQjAwMTAwMDAwMDAwNDEyMgorOjEwODZDMDAwRTBCMTAxMDBGRjdGMDBBMkEwOEIwMTAwMDAwMDAwNDQ4OAorOjEwODZEMDAwQTVCMzAxMDA3NTgwMDBDQUE3MzMwMTAwMDI4MTAwNDBFNAorOjEwODZFMDAwODFCMjAwMDA0RTAxMDA0RDkzMzAwMTAwNEUwMTAwNEU1QQorOjEwODZGMDAwOTMzMDAxMDA0RTAxMDA0QzkzMzAwMTAwMDg4NDAwNDA4QgorOjEwODcwMDAwODEzMjAxMDA2QTg0MDA0MDgxQjIwMDAwNTQ5NTAwNDAyQgorOjEwODcxMDAwNDU5OTAxMDA2QTg0MDBDQUU1QjEwMDAwMDAwMDgwNDA2QworOjEwODcyMDAwOTdCMDAxMDBFODgwMjI0MjhGNkYwMDAwRUE4MDIyNDE2QQorOjEwODczMDAwOEY2RjAwMDBFQzgwMUVDQTgxMzIwMDAwRUU4MDFGQ0FERAorOjEwODc0MDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwNkE4NDAwNDIwMQorOjEwODc1MDAwOEZCMzAwMDAwMDAwMDBDQUNEQjEwMTAwNkE4NDAwNDE1RgorOjEwODc2MDAwOEZCMzAwMDAwMDAwMDBDQUNGQjEwMTAwNkE4NDAwNDA0RQorOjEwODc3MDAwOEZCMzAwMDAwMDgxMDBBNkM2QjEwMTAwNkE4NDAwNDBFQQorOjEwODc4MDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwNkE4NDAwNDBFQQorOjEwODc5MDAwOEZCMzAwMDA3ODE4MDA0MDQ5OTkwMTAwMTAwMDJGOUMwOQorOjEwODdBMDAwODlCMDAxMDAwNzgxMDA0MDM5MzMwMTAwMTgwMDJGOUI3OAorOjEwODdCMDAwODlCMDAxMDAwNzgxMDA0MDM3MzMwMTAwMDAwMDJGOUE4MworOjEwODdDMDAwODlCMDAxMDAwNzgxMDA0MDM1MzMwMTAwMDgwMDJGOTk2RQorOjEwODdEMDAwODlCMDAxMDAwNzgxMDA0MDMzMzMwMTAwMDA4MDAwQUUwMgorOjEwODdFMDAwNDdDOTAxMDA4MDAwMDA0MEYxOTkwMTAwMDAwMDAwQ0E2MworOjEwODdGMDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwNDAxODAwNDA1QQorOjEwODgwMDAwRTE5OTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwQUVDNworOjEwODgxMDAwNjNERDAxMDAwMjgxMjg0MDgxMzIwMDAwRkY4MDAwNDBCQQorOjEwODgyMDAwODFCMjAwMDAwMjgxNDI0MDgxMzIwMDAwMDAwMDAwNUMwMQorOjEwODgzMDAwNjk5MzAxMDA2QTg0MUE0NDkzOTMwMDAwMDU4MTQyNDBDMQorOjEwODg0MDAwODEzMjAwMDAwNDgxMDA1ODY5OTMwMDAwMDAwMDAwNDQ1OAorOjEwODg1MDAwRjBEMTAxMDAwMDAwQTQ0MDgxQjIwMDAwMEM4MUEyNDBEMAorOjEwODg2MDAwRTE2RDAwMDAwMDAwMDA0NDQ1RDEwMTAwMDAwMDgwNDA5RgorOjEwODg3MDAwRTFCMTAxMDAwMDAwODA0MUUxRDEwMTAwMEQ4MTM3NUNEMAorOjEwODg4MDAwNjEzMTAwMDAwMDAwMDA0MjYyQjEwMTAwMTE4MTI4NDAwNgorOjEwODg5MDAwODEzMjAwMDAwRTgxMDA0MDgxQjIwMDAwMDAwMDAwQ0E1OQorOjEwODhBMDAwNjNCMTAxMDAxMTgxQTg0MDgxMzIwMDAwNkE4NDE3NDA0MQorOjEwODhCMDAwODFCMjAwMDAxNjgxMDA0MDgxQjAwMDAwMTY4MTAwQkIyQgorOjEwODhDMDAwODFCMDAwMDAwMDAwMDA0MTYwQjEwMTAwMDAwMDAwNDBFNAorOjEwODhEMDAwNjJCMTAxMDAxNzgxQTg0MDgxMzIwMDAwMDAwMDAwQ0E4NworOjEwODhFMDAwNjNCMTAxMDA2QTg0Mjg0MDgxMzIwMDAwMTk4MTAwNDA5MAorOjEwODhGMDAwODFCMjAwMDA1MDk1MDA0MDQ3OTkwMTAwMUY4MTAwQkJFNAorOjEwODkwMDAwODdCMDAwMDA1MDk1MkY0MDg3QjAwMTAwMjE4MTIyNDBBMAorOjEwODkxMDAwOTU3RjAwMDA2QTg0NjA0MDk1ODMwMDAwMDIwMDJERjA3RQorOjEwODkyMDAwODRCMDAxMDAyMjgxMzY0MDgxMzIwMDAwMDAwMDAwNDIwNAorOjEwODkzMDAwNjJCMTAxMDAyMzgxQTg0MDgxMzIwMDAwMDAwMDAwNDNBMQorOjEwODk0MDAwNjJCMTAxMDAyNTgxQTg0MDgxMzIwMDAwMDAwMDAwQ0EwOAorOjEwODk1MDAwNjNCMTAxMDAyNzgxQTg0MDgxMzIwMDAwMDAwMDE2NDA2OQorOjEwODk2MDAwODFCMjAxMDA2QTg0MjI0MTQzNTEwMDAwMDAwODAwQ0ExQworOjEwODk3MDAwOTVDQjAxMDAyMjgxMDA0MTg1QzAwMDAwMkY4MUEyNDJEOQorOjEwODk4MDAwNjc2RjAwMDAwMDAwMDA0MTY3QjMwMTAwMkY4MTQyNDA4MworOjEwODk5MDAwODEzMjAwMDAwMDAwMDA0MDY1QjMwMTAwMDAwMDAwNDA4QgorOjEwODlBMDAwOTM4MzAxMDAwMDAwMUFDQTY5OTcwMTAwNkE4NDI2NDA3NworOjEwODlCMDAwODEzMjAwMDAzNDgxNDI0MDgxMzIwMDAwNkE4NDFBNDRDRQorOjEwODlDMDAwOTM5MzAwMDA2QTg0MjA0Mzk1NkYwMDAwNkE4NDgwQ0FGNAorOjEwODlEMDAwNjczMzAwMDA2QTg0MjI0MDY1NkYwMDAwNkE4NDAwNkY3QworOjEwODlFMDAwREI5MTAwMDBDMTAwMDA0MDgxMzIwMTAwMzU4MDIyNDA0RgorOjEwODlGMDAwODAzMjAwMDA2QTg0MDA0MDgxQjIwMDAwMDAwMDAwNUYwNQorOjEwOEEwMDAwOTU5MzAxMDA0MjgxQTI0NDIxNkYwMDAwMDAwMDAwNUZBNQorOjEwOEExMDAwOTU4MzAxMDAwMDAwMDA1RTk1OTMwMTAwMDAwMDAwNTc1RgorOjEwOEEyMDAwOTU5MzAxMDAwMDAwMDBDQUMzQjEwMTAwNDU4MTIyNUI5QgorOjEwOEEzMDAwOTU3RjAwMDAwMDAwMDA0QkZEOTMwMTAwNkE4NDAwNDAxOAorOjEwOEE0MDAwODFCMjAwMDA0OTgxMjI0MEFGNkYwMDAwMUJGNTAwQ0FDRgorOjEwOEE1MDAwOTU5QjAxMDA0QTgxMDA0MDgxQjIwMDAwMUJGRDAwQ0FDNQorOjEwOEE2MDAwOTU5QjAxMDAwMDAwMDBDQTdGQjMwMTAwMjYwMTAwQ0FFNworOjEwOEE3MDAwQzUzMTAxMDAwMDAwMDA1Rjk1ODMwMTAwNkE4NDAwQ0FDRgorOjEwOEE4MDAwQzVCMTAwMDBERjZGMDBDQTk1OUIwMTAwMDAwMDAwNTVEMgorOjEwOEE5MDAwOTU5MzAxMDAwMDAwMDBDQUM3QjEwMTAwNkE4NDIyNUZGQgorOjEwOEFBMDAwOTU3RjAwMDAyNjAxMDA0MDgxMzIwMTAwMDAwMDAwNUYzOAorOjEwOEFCMDAwOTU4MzAxMDA2QTg0MDBDQUM3QjEwMDAwNkE4NDAwQ0FCNQorOjEwOEFDMDAwQzlCMTAwMDA2QTg0MDBDQUNCQjEwMDAwNkE4NDAwQ0E0MAorOjEwOEFEMDAwQ0RCMTAwMDA2QTg0MDBDQUNGQjEwMDAwMDAwMDJFNDI3MAorOjEwOEFFMDAwODFFMDAxMDA5ODE0MDA0MDQ4QzkwMTAwNkE4NDAwQ0E2RQorOjEwOEFGMDAwRTFCMTAwMDAwMDAwMDA0MDA5QjEwMTAwMjAwMDAwQTYyMworOjEwOEIwMDAwODJCMDAxMDA1RTgxQTI1RTBCN0QwMDAwMDA4MDAwNDEwQQorOjEwOEIxMDAwMDg5OTAxMDA2MDgxQTI1RTBCN0QwMDAwMjA4MDAwQTYwNAorOjEwOEIyMDAwMDhCMTAxMDA2MjgxOUY4NTgyMzAwMDAwNjE4MUEyNEZGRgorOjEwOEIzMDAwMEI3RDAwMDAwMDAwMDA0MTIxQjMwMTAwMDI4MDAwQTY2RgorOjEwOEI0MDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwMTAwMDAwNDE2MworOjEwOEI1MDAwODRFNDAxMDAwMzgwMDBBNjgyQjAwMTAwQzk4MTAwNDBDNgorOjEwOEI2MDAwODEzMjAxMDBGMEZGMDA0MTg2ODgwMTAwMDAwMDAwNDNDRgorOjEwOEI3MDAwODQ5NDAxMDAwRjAwMDBBNjg2QjAwMTAwMTBDNDAwNDNEOQorOjEwOEI4MDAwODY5ODAxMDA3NTgxQTI0Mzg0NkMwMDAwMDAwMDAwNDNCOAorOjEwOEI5MDAwMjFCMzAxMDAyMDAwMDBBNjgyQjAwMTAwMUMwMDAwNDFBQQorOjEwOEJBMDAwODJEQzAxMDA3MjgxQTI1RTBCN0QwMDAwMDQwMDAwNDFBNgorOjEwOEJCMDAwMDg5OTAxMDA3RTgxMDA0MDgxQjIwMDAwNDEwMTAwQTZCOQorOjEwOEJDMDAwODZCMDAxMDA1MDBDMDA0Mzg2OTgwMTAwN0E4MUEyNDNEMAorOjEwOEJEMDAwODQ2QzAwMDAwMDAwMDA0MTIxQjMwMTAwN0U4MTAwNDA1MAorOjEwOEJFMDAwODFCMjAwMDA0MTAxMDBBNjg2QjAwMTAwNjAwQzAwNDM4NAorOjEwOEJGMDAwODY5ODAxMDA3RTgxQTI0Mzg0NkMwMDAwMDAwMDAwNDI0MAorOjEwOEMwMDAwMjFCMzAxMDAyMDAwMDBBNjgyQjAwMTAwN0Y4MUEyNUU5NgorOjEwOEMxMDAwMEI3RDAwMDA0MDEzMDA0MTA4OTkwMTAwODc4MTIyNDMyOQorOjEwOEMyMDAwMjE2RjAwMDAyMDAwMDBBNjgyQjAwMTAwMTIwMDAwNDE2OAorOjEwOEMzMDAwODJEQzAxMDA4NDgxQTI1RTBCN0QwMDAwMDAwNDAwNDEwMworOjEwOEM0MDAwMDg5OTAxMDA4QzgxMDA0MDgxQjIwMDAwMjAwMDAwQTYzQworOjEwOEM1MDAwODJCMDAxMDAxOTAwMDA0MTgyREMwMTAwODk4MUEyNUUxRQorOjEwOEM2MDAwMEI3RDAwMDAwMEEwMDA0MTA4OTkwMTAwOEM4MTAwNDBBQworOjEwOEM3MDAwODFCMjAwMDAwMDAwODA0MDgxQjIwMTAwMjAwMDAwQTYwNworOjEwOEM4MDAwODBCMDAxMDAwMDAwMDBDQTgxOTQwMTAwOEY4MUEyNUVDMworOjEwOEM5MDAwMEI3RDAwMDA2QTg0MDA0MDA4QjEwMDAwQzgxNDJFQkJBMAorOjEwOENBMDAwODVCMDAxMDA5MjgxQTI1RTBCN0QwMDAwMDAwMDAwNDBCMworOjEwOENCMDAwODdCMDAxMDBBMTgxMjI0MzIxNkYwMDAwQjA4MTIyNDRDRQorOjEwOENDMDAwMjE2RjAwMDAxMTgwMDBBNjgyQjAwMTAwQzk4MTAwNDAyMAorOjEwOENEMDAwODEzMjAxMDBCODgxMjI0QTgzN0MwMDAwMDAwMDAwNDBGQworOjEwOENFMDAwODc5MDAxMDA5QzgxMjI0RDgzN0MwMDAwMDAwMDAwNDFBMAorOjEwOENGMDAwODc5MDAxMDA5RTgxMjI0RjgzN0MwMDAwMDAwMDAwNDM4QQorOjEwOEQwMDAwODc5MDAxMDBBMDgxMjI0RTgzN0MwMDAwMDAwMDAwNDI3OQorOjEwOEQxMDAwODc5MDAxMDBCODgxMDA0MDgxQjIwMDAwMDE4MDAwQTY2OAorOjEwOEQyMDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwMDE4MDAwQTZBQgorOjEwOEQzMDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwQjg4MTIyNDIyNQorOjEwOEQ0MDAwODM3QzAwMDAwMDAwMDA0MDg3OTAwMTAwMUM4MDAwQTY4QQorOjEwOEQ1MDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwQUI4MTIyNDUwRgorOjEwOEQ2MDAwODM3QzAwMDAwMDAwMDA0MTg3OTAwMTAwQUQ4MTIyNDQxNworOjEwOEQ3MDAwODM3QzAwMDAwMDAwMDA0Mzg3OTAwMTAwQUY4MTIyNDMwNAorOjEwOEQ4MDAwODM3QzAwMDAwMDAwMDA0Mjg3OTAwMTAwQjg4MTAwNDAxMQorOjEwOEQ5MDAwODFCMjAwMDAwMTgwMDBBNjgyQjAwMTAwQzk4MTAwNDBCQworOjEwOERBMDAwODEzMjAxMDAwMTgwMDBBNjgyQjAwMTAwQzk4MTAwNDAyQgorOjEwOERCMDAwODEzMjAxMDBCODgxMjI0MjgzN0MwMDAwMDAwMDAwNDAyMworOjEwOERDMDAwODc5MDAxMDAwMDAwMDA0Mzg3OTAwMTAwMDAwMDAwNDFFRgorOjEwOEREMDAwODc5MDAxMDAwMDgwMDBBNjgyQjAwMTAwQzk4MTAwNDA5OAorOjEwOERFMDAwODEzMjAxMDBCQzgxMjI0QjgzN0MwMDAwMDAwMDAwNDBFNgorOjEwOERGMDAwODc4MDAxMDAwMDAwMDA0M0UwQjEwMTAwMDAwMDAwNDA1NgorOjEwOEUwMDAwQUZCMzAxMDBDNTgxMjI0MDg3N0MwMDAwQzU4MUEyNDEyQgorOjEwOEUxMDAwODc3QzAwMDAwMDAwMDA0MUFFQjMwMTAwMDAwMDAwNDA2QworOjEwOEUyMDAwODFCMzAxMDBDNDgxMjI0Mjg3N0MwMDAwQzU4MTAwMEIxMAorOjEwOEUzMDAwN0RCMzAwMDAwMDAwMDAwRjdEQjMwMTAwRkY3RjAwQTJBMgorOjEwOEU0MDAwQTA4QjAxMDAwMDAwMDA0NEE1QjMwMTAwNzU4MDAwQ0E5QQorOjEwOEU1MDAwQTczMzAxMDAwMjgxMDA0MDgxQjIwMDAwMjAwMDAwNDFFMAorOjEwOEU2MDAwODJEQzAxMDBDQTgxQTI1RTBCN0QwMDAwMDAwMDAwNDE4RgorOjEwOEU3MDAwMDhCMTAxMDBDQzgxOUY4NTgyMzAwMDAwMDAwMDgwNDA1NQorOjEwOEU4MDAwODFCMjAxMDBEMTgxMTRGNzgxMzAwMDAwRDE4MUEyNDk2MworOjEwOEU5MDAwRkQ3RjAwMDAwMDAwMDA0OEZEOTMwMTAwRDQ4MTE1RjgxQgorOjEwOEVBMDAwODExNDAwMDBENDgxQTI0QUZEN0YwMDAwMDAwMDAwNDgyOAorOjEwOEVCMDAwRkQ5MzAxMDBENjgxQTJDODgxMzIwMDAwNDAwMDAwNDAyRAorOjEwOEVDMDAwODBEQzAxMDAwMDEwMDA0MDgwREMwMTAwMDAwMDAwNDA1OAorOjEwOEVEMDAwRUZCMzAxMDBEODgxNDI0MEYxMzMwMDAwMDQ4MTAwNDAyQgorOjEwOEVFMDAwNjg5NzAwMDA2QTg0MDBCQjZCQjMwMDAwNkE4NDAwQkIxMworOjEwOEVGMDAwQjFCMzAwMDA2QTg0MDA0MDgxQjIwMDAwQ0MxNDJFNDA1RgorOjEwOEYwMDAwODdCMDAxMDBGRjdGMDBBMkEwOEIwMTAwRDgwMDAwNDNDMgorOjEwOEYxMDAwQjIzMzAxMDAwMDAwNjhEQTg5QjAwMTAwN0MwMDAwNDAzMworOjEwOEYyMDAwOEI5ODAxMDAwMDAwMDA1MDg5RjAwMTAwMDAwMDAwNDExMgorOjEwOEYzMDAwODlEMDAxMDAwMzAwMDA0NDg4OEMwMTAwMDAwMDAwNDIzOQorOjEwOEY0MDAwODdDMDAxMDAwMDAwMDA0MUE1QjMwMTAwRDgwMDAwNDMyNAorOjEwOEY1MDAwQjIzMzAxMDAwMDAwMDBEQUYxQjEwMTAwMDAwMDAwNDI2QworOjEwOEY2MDAwODdDMDAxMDAwMDAwMDA0MUE1QzMwMTAwRjg4MTIyNDQzMAorOjEwOEY3MDAwODk1MDAwMDBGODgxMjI0NDhCNTAwMDAwRTc4MUEyNTAwNAorOjEwOEY4MDAwQTU2RjAwMDAwMDAwMDA0MkE1RTMwMTAwMDAwMDAwQ0EzOAorOjEwOEY5MDAwQTdCMzAxMDA3NTgwMDBCQjg1MzAwMTAwQ0MxNDJFRDIzMAorOjEwOEZBMDAwOTVDMzAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjA1RgorOjEwOEZCMDAwNDJCMTAxMDAwMDAwMDA1MDgxQjAwMTAwRjU4MUEyNDFFMgorOjEwOEZDMDAwODE1MDAwMDBGNDgxQTJGMjgwMzAwMDAwRTc4MTAwNDA2RgorOjEwOEZEMDAwQTVCMzAwMDAwMDAwMDA0MkE1RTMwMTAwMDAwMDAwQ0FBNAorOjEwOEZFMDAwQTdCMzAxMDA3NTgwMDBCQjg1MzAwMTAwMDI4MTAwNDBGRAorOjEwOEZGMDAwODFCMjAwMDBEOTAwMDA0MUIzNzMwMTAwMDAwMDgwNTAyRAorOjEwOTAwMDAwQjVGMzAxMDBEODAwMDA0MUIzRjMwMDAwMDAwMDAwRDkxRgorOjEwOTAxMDAwQjNGQjAxMDAwMDMwMDBBNkI4QjMwMTAwRjIwMDAwNDAyRAorOjEwOTAyMDAwODEzMjAxMDAyNTAxMDA0MjJEMDEwMTAwMDAwMjAwNDBCMworOjEwOTAzMDAwODM5ODAxMDBFQjAwMDA0MDgxMzIwMTAwMDAwMDAwNTBFNQorOjEwOTA0MDAwODFCMDAxMDAyNjAxMDA0MDgxMzIwMTAwMDk4MjEwREE1RQorOjEwOTA1MDAwQjU2QjAwMDAwQTgyMDA0MTJEODEwMDAwMDAwMDAwNDEzNAorOjEwOTA2MDAwMkQ5MTAxMDAyODAxMDA0MDgxMzIwMTAwMjUwMTAwNDBCRQorOjEwOTA3MDAwMkQxMTAxMDAwMDAwMDA0MDJEODEwMTAwMDY4MkEyNDE1NworOjEwOTA4MDAwODE1MDAwMDAyNjAxMDA0MjJEMDEwMTAwMjUwMTAwNDAxMQorOjEwOTA5MDAwODEzMjAxMDAyNjAxMDA0MjJEMTEwMTAwMjUwMTAwNDAwRQorOjEwOTBBMDAwMkQxMTAxMDAxNTgyMDQ0MDJEMDEwMDAwMjUwMTAwNDAxMgorOjEwOTBCMDAwODEzMjAxMDAxMTgyMDA0MDgxQjIwMDAwMjgwMTAwNDA4RAorOjEwOTBDMDAwODEzMjAxMDAyNTAxMDA0MjJEMDEwMTAwRjIwMDAwNDAyMworOjEwOTBEMDAwQjkzMzAxMDAwMDAwMDA0MjJEODEwMTAwMDAwMDgwNDFGMQorOjEwOTBFMDAwMkQ4MTAxMDAwMDAwODA0MDgxQjIwMTAwMDAwMzAwNDA5QQorOjEwOTBGMDAwODE5ODAxMDAwMDAwMDA0MDE4QjEwMTAwODAwMDAwNDA4QworOjEwOTEwMDAwODM5ODAxMDAwMDE5MDA0MDQ1OTkwMTAwMDAwMDQyNDA4OQorOjEwOTExMDAwODFCMjAxMDAwMDAwNDNGRkYxQjEwMTAwMDAwMDAwRkYzNworOjEwOTEyMDAwRjFCMTAxMDAwMDAwMDA0MTgxQzAwMTAwMDAwMDAwNDBEOQorOjEwOTEzMDAwMThCMTAxMDAxRjgyQTI0MTgzNTAwMDAwMDAxNjAwNDBCOAorOjEwOTE0MDAwNDU5OTAxMDAwMDE5MDA0MDQzOTkwMTAwMDAwMDAwNDdDMworOjEwOTE1MDAwNDNDMTAxMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwRjNBMworOjEwOTE2MDAwODBCMDAxMDAwMDAwMDA1QjgxRDAwMTAwMDAwMDAwNDFFMAorOjEwOTE3MDAwODBEMDAxMDAwMDAwMDA0MEY2QjEwMTAwMDAwMDAwNUI1QgorOjEwOTE4MDAwNDNDMTAxMDAwMDAwMDA0MTgzQzAwMTAwMjk4MkEyNTRCNAorOjEwOTE5MDAwODM2QzAwMDAwMDAwMDA0MEY3QjEwMTAwMDAwMDAwNDFCNgorOjEwOTFBMDAwODNDMDAxMDAzMDgyQTIwNjgzNkMwMDAwMDAwMDgwNDA3MgorOjEwOTFCMDAwODFCMjAxMDAwMDAwODAwNzkxQjAwMTAwRTE4MDAwNDAxMQorOjEwOTFDMDAwODEzMjAxMDAzOTgyQTI0MDk3NkMwMDAwMjgwMDAwNDBFMworOjEwOTFEMDAwQjM5QjAxMDAzQTgyMDA0MDgxQjIwMDAwMjgwMDAwNDBBOQorOjEwOTFFMDAwQjM5QjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDAwREFFNQorOjEwOTFGMDAwRjVCMTAxMDBGQzgxMDA0MkIzNDMwMTAwMDAwMDAwREEzOAorOjEwOTIwMDAwRjVCMTAxMDBGQzgxMDA0MkIzNDMwMTAwMDAwMDAwREEyNworOjEwOTIxMDAwRjVCMTAxMDA0RTAwMDA0MEIzOUIwMTAwRkM4MTAwNDAwRAorOjEwOTIyMDAwODEzMjAxMDAwODAwMDBEQUY3RjUwMTAwNTAwMDAwNDAyQgorOjEwOTIzMDAwOTE5ODAxMDAwMDAwMDA0NzhGQjAwMTAwRkM4MTAwNDhCOAorOjEwOTI0MDAwQjIzMzAxMDAwMDAwMDBEQUY3QjEwMTAwMDgwMDAwREFEMworOjEwOTI1MDAwRjdGNTAxMDAwMDAwMDA0MjkxQzAwMTAwNDU4MkEyNDFFMworOjEwOTI2MDAwOEY1MDAwMDAwMDAwMDA0MTQ1RDEwMTAwMDgwMDAwNDA3RgorOjEwOTI3MDAwQjM5QjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDAwREE1NAorOjEwOTI4MDAwRkRCMTAxMDAwQTAwMDA0MEIzOUIwMTAwRkM4MTAwNDBEOQorOjEwOTI5MDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMTgwMDAwNDAzOQorOjEwOTJBMDAwQjM5QjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDAwREEyNAorOjEwOTJCMDAwRkRCMTAxMDAxNjAwMDA0MEIzOUIwMTAwRkM4MTAwNDA5RAorOjEwOTJDMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMzQ4MjAwNDA2QgorOjEwOTJEMDAwODEzMjAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDAzOQorOjEwOTJFMDAwODEzMjAxMDAwMDAwMDBEQTkxQzAwMTAwMDAwMDAwNDg1NgorOjEwOTJGMDAwQjJDQjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDZFREEzNworOjEwOTMwMDAwOEZCMDAxMDAwMjAwMDA0OEIyQ0IwMTAwRkM4MTAwNDA5OAorOjEwOTMxMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMDQwMDAwNDhDNAorOjEwOTMyMDAwQjJDQjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDgwREFGNAorOjEwOTMzMDAwRkRCMTAxMDA2RjgyMjI1MEZEN0YwMDAwNkY4MjIyNDU0NworOjEwOTM0MDAwRkQ3RjAwMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDAzNQorOjEwOTM1MDAwNDkzMTAxMDAwODAwMDA0OEIyQ0IwMTAwRkU4MTAwNDAwNQorOjEwOTM2MDAwODEzMjAxMDA2RDgyQTI0MDhGNkMwMDAwNzI4MjIyMjA0NworOjEwOTM3MDAwQjU2RjAwMDA2RjgyMDA0MDgxQjIwMDAwREI4MjAwNDBDOAorOjEwOTM4MDAwODEzMjAxMDA3MjgyMjI0MDk3NkMwMDAwNkY4MjQyNDA1RAorOjEwOTM5MDAwODEzMjAwMDAwMDAwMDA0RjY5OTMwMTAwMDQ4MTAwNThGMQorOjEwOTNBMDAwNjk5MzAwMDA1NDE2MDA0MDQ3OTkwMTAwMDAwMDAwRkUzOAorOjEwOTNCMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU5NQorOjEwOTNDMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU4NQorOjEwOTNEMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU3NQorOjEwOTNFMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU2NQorOjEwOTNGMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU1NQorOjEwOTQwMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU0NAorOjEwOTQxMDAwRjRCMTAxMDA0NjAwMDA0MEIzOUIwMTAwRkM4MTAwNDAxNAorOjEwOTQyMDAwODEzMjAxMDAwODAwMDBEQUY3RjUwMTAwNDgwMDAwNDAzMQorOjEwOTQzMDAwOTU5ODAxMDAwMDAwMDA0NDk3QjAwMTAwRkM4MTAwNEFBQgorOjEwOTQ0MDAwQjIzMzAxMDAwMDAwMDBEQUY3QjEwMTAwMDgwMDAwREFEMQorOjEwOTQ1MDAwRjdGNTAxMDAwMDAwMDA0Mjk1QzAwMTAwODU4MkEyNDE5RAorOjEwOTQ2MDAwOTc1MDAwMDAyQTAwMDA0MEE1OUIwMTAwNDAxNjAwNDBENAorOjEwOTQ3MDAwQTE5QjAxMDAwMDAwMDBDQUE3QjMwMTAwNzU4MDAwQkJEQQorOjEwOTQ4MDAwODUzMDAxMDAwMjgxMDA0MDgxQjIwMDAwQTc4MjIyNDVBMAorOjEwOTQ5MDAwRkQ3RjAwMDBFMDE1MDA0MDQ3OTkwMTAwMUEwMDAwQTI3RQorOjEwOTRBMDAwODBEQzAxMDAwMDAwMDA1MEYxQjEwMTAwRjAxNTAwNDAyNworOjEwOTRCMDAwRjE5OTAxMDAwMDAwMDBDQUYxQjEwMTAwMDcwMDAwNDA2RAorOjEwOTRDMDAwNjE5OTAxMDBBMDAwMDA0MDYyREQwMTAwOTY4MkE4QkIwNgorOjEwOTREMDAwRTEzMTAwMDAwMDAwMDA1MDgzQjAwMTAwOTk4MkEyNDFGOAorOjEwOTRFMDAwODM1MDAwMDA5ODgyQTJGMjgyMzAwMDAwRTE4MDAwNDBBOAorOjEwOTRGMDAwODEzMjAxMDA5RjgyQTI0MDk3NkMwMDAwMjgwMDAwNDA0QQorOjEwOTUwMDAwQjM5QjAxMDBBMDgyMDA0MDgxQjIwMDAwMjgwMDAwNDAwRgorOjEwOTUxMDAwQjM5QjAxMDBGMDE1MDA0MDQzOTkwMTAwRkM4MTAwNDAxRAorOjEwOTUyMDAwODEzMjAxMDBBNzgyQTJGQUI0NkYwMDAwRkM4MTAwNDJFMAorOjEwOTUzMDAwQjM0MzAxMDBBNzgyQTJGQUI0NkYwMDAwRkM4MTAwNDI4RAorOjEwOTU0MDAwQjM0MzAxMDBBQTgyMjJGQUI0NkYwMDAwQTc4MjQyNDAwRQorOjEwOTU1MDAwODEzMjAwMDAwMDAwMDA0RTY5OTMwMTAwMDQ4MTAwNTgzMAorOjEwOTU2MDAwNjk5MzAwMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDA5MworOjEwOTU3MDAwNDkzMTAxMDBGNjE1MDA0MDQzOTkwMTAwNUMxNjAwNDA5NgorOjEwOTU4MDAwNDU5OTAxMDAwMDAwNkVGQThFQjAwMTAwMDAwMDAwNDAxNQorOjEwOTU5MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDBCMworOjEwOTVBMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDBBMworOjEwOTVCMDAwODFCMjAxMDAwMDAwMDBGMEI0QjMwMTAwQjg4MkEyNDAwMworOjEwOTVDMDAwOEY2QzAwMDBGQzE1MjAyMEUxQjEwMTAwQkQ4MjAwNDAzRAorOjEwOTVEMDAwODFCMjAwMDBEQjgyMDA0MDgxMzIwMTAwQkQ4MjIyNDA2NgorOjEwOTVFMDAwOTc2QzAwMDBCQTgyNDI0MDgxMzIwMDAwMDAwMDAwNEZCOAorOjEwOTVGMDAwNjk5MzAxMDAwNDgxMDA1ODY5OTMwMDAwMzQ4MjAwNDA5RgorOjEwOTYwMDAwODEzMjAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDAwNQorOjEwOTYxMDAwODEzMjAxMDBDMjgyMjI1MEI1NkYwMDAwMDAwMDAwNTA2QworOjEwOTYyMDAwOTFDMDAxMDAwMDAwMDA0OEIyQ0IwMTAwRjYxNTAwNDBENworOjEwOTYzMDAwNDM5OTAxMDBGRjgxMDBGMkI0MzMwMTAwMDIwMDAwNDhBOQorOjEwOTY0MDAwQjJDQjAxMDBGODE1MDA0MDQzOTkwMTAwRkY4MTAwRjIwMAorOjEwOTY1MDAwQjQzMzAxMDAwNDAwMDA0OEIyQ0IwMTAwRkExNTAwNDAwOQorOjEwOTY2MDAwNDM5OTAxMDBGRjgxMDBGMkI0MzMwMTAwMDgwMDAwNDg3MworOjEwOTY3MDAwQjJDQjAxMDBGQzE1MDA0MDQzOTkwMTAwMDAwMDAwRjA0RQorOjEwOTY4MDAwOTRCMDAxMDBGRkZGMDA0QUI0OEIwMTAwRkY4MTAwNDA0RAorOjEwOTY5MDAwODEzMjAxMDAwQTAwMDA0OEIyQ0IwMTAwMTAwMDAwNEFFQworOjEwOTZBMDAwQjRGNzAxMDBGRjgxMDA0MDgxMzIwMTAwMzQ4MjAwNDBBNAorOjEwOTZCMDAwODEzMjAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDA1NQorOjEwOTZDMDAwODEzMjAxMDBEODgyMjI1MEI1NkYwMDAwRDk4MjAwNTA0QgorOjEwOTZEMDAwQjVCMzAwMDAwMDAwMDA0MEI1QjMwMTAwRkY4MTAwNDBCOQorOjEwOTZFMDAwODEzMjAxMDAwMjgxMDA0MDgxQjIwMDAwMDAxNjAwNDA3QQorOjEwOTZGMDAwNDc5OTAxMDAzMDMxMDA0MEY1OTkwMTAwMzIzMzAwNDBCNAorOjEwOTcwMDAwRjU5OTAxMDAzNDM1MDA0MEY1OTkwMTAwMzYzNzAwNDBFNQorOjEwOTcxMDAwRjU5OTAxMDAzODM5MDA0MEY1OTkwMTAwNDE0MjAwNDBCNworOjEwOTcyMDAwRjU5OTAxMDA0MzQ0MDA0MEY1OTkwMTAwNDU0NjAwNDA4OQorOjEwOTczMDAwRjU5OTAxMDA0NzQ4MDA0MEY1OTkwMTAwNDk0QTAwNDA2OQorOjEwOTc0MDAwRjU5OTAxMDAyQzAwMDA0MDgzOTgwMTAwMDAwMDAwNDBDMgorOjEwOTc1MDAwRjdCMTAxMDBFNzgyQTI0MTgzNTAwMDAwODAxNjJFMDY3NworOjEwOTc2MDAwODNCMDAxMDAzNjAwMDBGQkY2QTkwMTAwRUE4MkEyNDFBNQorOjEwOTc3MDAwODM1MDAwMDAyMjAwMDA0MDgzOTgwMTAwMDAwMDAwRkI5RAorOjEwOTc4MDAwRjZCMTAxMDBFRDgyQTI0MTgzNTAwMDAwNjIwMDAwNDA2QQorOjEwOTc5MDAwOTU5ODAxMDAwMDgzMDA0MDgxMzIwMTAwMDAxNjJEMDZEQgorOjEwOTdBMDAwODNCMDAxMDA4MDE2MDA0MDQ1OTkwMTAwNUMwMDAwRkI3OQorOjEwOTdCMDAwRjZBOTAxMDBGMzgyQTI0MTgzNTAwMDAwMDAwMDAwNzA2RQorOjEwOTdDMDAwRjlCMTAxMDAwMDAwMDA3MUY5QjEwMTAwMDAwMDAwNzI2MAorOjEwOTdEMDAwRjlCMTAxMDAwMDAwMDA3M0Y5QjEwMTAwMDAwMDAwNzQ0QworOjEwOTdFMDAwRjlCMTAxMDA1NDAwMDA0MDk1OTgwMTAwMDA4MzAwNDA0OQorOjEwOTdGMDAwODEzMjAxMDAwMDAwMDA3MDk1QjAwMTAwRkY4MjIyNzBFQworOjEwOTgwMDAwQjU2RjAwMDAwMDAwODA0MTk3QjAwMTAwMDAwMDgwNDA2QgorOjEwOTgxMDAwOTdCMDAxMDA0NTY3MDBBNkUwQjIwMTAwMDEyMzAwNzA4NworOjEwOTgyMDAwRTE5QTAxMDBDREVGMDBBNkUyQjIwMTAwODlBQjAwNzEyMAorOjEwOTgzMDAwRTM5QTAxMDBCQTk4MDBBNkU0QjIwMTAwRkVEQzAwNzJDRgorOjEwOTg0MDAwRTU5QTAxMDAzMjEwMDBBNkU2QjIwMTAwNzY1NDAwNzNEQQorOjEwOTg1MDAwRTc5QTAxMDBEMkMzMDBBNkU4QjIwMTAwRjBFMTAwNzQ2QgorOjEwOTg2MDAwRTk5QTAxMDA4MDE2MDA0QTQ0QzkwMTAwMDAwMDAwMDc3RgorOjEwOTg3MDAwODFCMDAxMDAwMDAwMDA0QTgwRDAwMTAwMDAwMDAwNDBEQgorOjEwOTg4MDAwRjdCMTAxMDAwRDgzQTI0MTgxNTAwMDAwODAxNjAwNEEwQgorOjEwOTg5MDAwNDRDOTAxMDBGQzE2MkE0N0U3QjUwMTAwMDMwMDAwNEE0RAorOjEwOThBMDAwRThFNTAxMDAwMDAwMDA0MDhEQjAwMTAwNTAwMzAwNDBEOQorOjEwOThCMDAwQTM5OTAxMDA4MDE2M0Q0NjhERTAwMTAwMDAwMDAwNTA5NAorOjEwOThDMDAwODlCMDAxMDAwMDAwMDBGQzQwQjAwMTAwMDAwMDAwNDEzMAorOjEwOThEMDAwQTNDMTAxMDAxNjgzQTI0MTg5NTAwMDAwMDAwMDAwNzA1RQorOjEwOThFMDAwRUJCMjAxMDAwMDAwMDA3MUVEQjIwMTAwMDAwMDAwNzI1NworOjEwOThGMDAwRUZCMjAxMDAwMDAwMDA3M0YxQjIwMTAwMDAwMDAwNzQzQgorOjEwOTkwMDAwRjNCMjAxMDAwMDAwMDA0MDgzQjAwMTAwMEYwMDAwNDFFRAorOjEwOTkxMDAwODA4ODAxMDA1MDAzMDA0MEEyQzkwMTAwMzM4M0EwNTA5OQorOjEwOTkyMDAwODM2QzAwMDAwRDAwMDA0MDk4QzgwMTAwMDAwMDAwNEY0QgorOjEwOTkzMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjBERQorOjEwOTk0MDAwODZCMDAxMDAwODAwMDA0MDk4QzgwMTAwMDAwMDAwNEZFOAorOjEwOTk1MDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjBCRQorOjEwOTk2MDAwODZBNDAxMDAwMjAwMDA0MDk4QzgwMTAwMDAwMDAwNEZEQQorOjEwOTk3MDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA5RQorOjEwOTk4MDAwODZBNDAxMDA1MDAzMDA0MEEyQzkwMTAwMDAwMDAwNDM2QQorOjEwOTk5MDAwNDBBNDAxMDAwMTAwMDAyMDg4RTQwMTAwMDAwMDAwNUZGNQorOjEwOTlBMDAwNDFGMDAxMDAwMDAwMDA0NDQwOTQwMTAwMDUwMDAwNzVGMgorOjEwOTlCMDAwODlFNDAxMDAxQjAwMDA3NTg1RjQwMTAwMDAwMDAwNDRFQgorOjEwOTlDMDAwODQ5NDAxMDAzRDgzQTM1MzgzNkMwMDAwMDAwMDAwNzY2MworOjEwOTlEMDAwODlCMDAxMDAwMDAwMDA3Nzg5ODQwMTAwMDAwMDAwNzY1MgorOjEwOTlFMDAwOEJCMDAxMDAwMDAwMDAyMDhCQTQwMTAwMDAwMDAwNzg3MworOjEwOTlGMDAwOEI4NDAxMDA0QzgzMDA0NTg4OTQwMDAwMjcwMDAwNDFCRgorOjEwOUEwMDAwODBDRTAxMDA0MjgzQUE0MDgxMzIwMDAwMDAwMDAwNzYyRgorOjEwOUExMDAwODlCMDAxMDAwMDAwMDA3Nzg5QTQwMTAwNEM4MzAwNzgyMAorOjEwOUEyMDAwODlBNDAwMDAzQjAwMDA0MTgwQ0UwMTAwM0Y4M0FBNDA5MgorOjEwOUEzMDAwODEzMjAwMDAwMDAwMDA3Njg5QjAwMTAwMDAwMDAwNzc0QworOjEwOUE0MDAwODk4NDAxMDAwMDAwMDA3NjhCQjAwMTAwMDAwMDAwNzhERQorOjEwOUE1MDAwOEI4NDAxMDAwMDAwMDA0NTg4OTQwMTAwMDAwMDAwNzcxRAorOjEwOUE2MDAwOEJCMDAxMDAwMDAwMDA3ODhCODQwMTAwNEM4MzAwNDUxRQorOjEwOUE3MDAwODg5NDAwMDAwMDAwMDA0NDg0QzAwMTAwMDAwMDAwNzlDOAorOjEwOUE4MDAwODVDMDAxMDAwMDAwMDAyMDg0QzAwMTAwNTM4M0EzNTM1RgorOjEwOUE5MDAwODM2QzAwMDA4MjVBMDBBNjg0QzAwMTAwOTk3OTAwNDJCQworOjEwOUFBMDAwODRDODAxMDA2MDgzMDA0MDgxQjIwMDAwMjcwMDAwNDFBQgorOjEwOUFCMDAwODBDRTAxMDA1ODgzQUE0MDgxMzIwMDAwRDk2RTAwQTZGMgorOjEwOUFDMDAwODRDMDAxMDBBMUVCMDA0Mjg0QzgwMTAwNjA4MzAwNDAxMworOjEwOUFEMDAwODFCMjAwMDAzQjAwMDA0MTgwQ0UwMTAwNUQ4M0FBNDBCRQorOjEwOUFFMDAwODEzMjAwMDAxQjhGMDBBNjg0QzAwMTAwRENCQzAwNDI1NAorOjEwOUFGMDAwODRDODAxMDA2MDgzMDA0MDgxQjIwMDAwNjJDQTAwQTZGMQorOjEwOUIwMDAwODRDMDAxMDBENkMxMDA0Mjg0QzgwMTAwNjA4MzAwNDBDNworOjEwOUIxMDAwODFCMjAwMDAwMDAwMDA3OEYzQjIwMTAwMDAwMDAwNzc3RAorOjEwOUIyMDAwRjFCMjAxMDAxRTAwMDA3Njg5RTQwMTAwMDIwMDAwNzYxNworOjEwOUIzMDAwRUZGNjAxMDAwMDAwMDA0NEVFOTYwMTAwMDAwMDAwNzUwMQorOjEwOUI0MDAwRURCMjAxMDAwMDAwMDA0MkVBQjIwMTAwMDAwMDAwNDE1NQorOjEwOUI1MDAwODNDMDAxMDA0RjAwMDA0MTgwQ0UwMTAwMUY4MzJBNDBENgorOjEwOUI2MDAwODEzMjAwMDAwMDAwMDA3NUUxQzIwMTAwMDAwMDAwNzZCMworOjEwOUI3MDAwRTNDMjAxMDAwMDAwMDA3N0U1QzIwMTAwMDAwMDAwNzhBOAorOjEwOUI4MDAwRTdDMjAxMDAwMDAwMDA3OUU5QzIwMTAwMTM4MzgxNDFBRQorOjEwOUI5MDAwOEQ0MDAwMDAwMDAwODA0MDgxQjIwMTAwOUQ4M0EyNEJGNworOjEwOUJBMDAwQjc2RjAwMDA5RDgzQTI0MTJGN0QwMDAwMDAwMDAwNTA5MAorOjEwOUJCMDAwRkQ5MzAxMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDBBOAorOjEwOUJDMDAwNDkzMTAxMDA5QzgzMjI0MDhGNkMwMDAwMDgwMDAwNDg0RQorOjEwOUJEMDAwQjJDQjAxMDBGRTgxMDA0MDgxMzIwMTAwREI4MjAwNDBGNworOjEwOUJFMDAwODEzMjAxMDA5QzgzQTI0MDk3NkMwMDAwNUUxNjAwNDAwOQorOjEwOUJGMDAwNDM5OTAxMDA3QzE2MjBGNkUwQjEwMTAwMDAwMDAwNDAwRQorOjEwOUMwMDAwMzFCMzAxMDA4MDgzMjI0RjhGN0MwMDAwMDAwMDAwNTE5RgorOjEwOUMxMDAwRkQ5MzAxMDA4MjgzMjI0MDhGN0MwMDAwODY4MzAwNTRFNAorOjEwOUMyMDAwRkQ5MzAwMDA4NDgzMjI0MjhGN0MwMDAwMDAwMDAwNTJEQworOjEwOUMzMDAwRkQ5MzAxMDA4NjgzMjI0MThGN0MwMDAwMDAwMDAwNTNDOQorOjEwOUM0MDAwRkQ5MzAxMDA5QTgzMjI1MUZEN0YwMDAwMzQ4MjAwNDA4MQorOjEwOUM1MDAwODEzMjAxMDAwQzAwMDA0OEIyQ0IwMTAwRkM4MTAwNDBDMQorOjEwOUM2MDAwODEzMjAxMDA5NTgzQTI0MEI1NkYwMDAwMUUwMDAwNDhCQworOjEwOUM3MDAwQjJDQjAxMDBGQzgxMDA0ODk2MzAwMTAwMDAwMDAwREEwMAorOjEwOUM4MDAwOTdDMDAxMDAwNDAwMDA0QkIyQ0IwMTAwRkM4MTAwNDBGMgorOjEwOUM5MDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwRkY4MTAwNDA3QworOjEwOUNBMDAwODEzMjAxMDAwQzAwMDA0OEIyQ0IwMTAwMDAwMDAwMzBGRQorOjEwOUNCMDAwQjVCMzAxMDBGRjgxMDA0MDgxMzIwMTAwMEUwMDAwNDg3MQorOjEwOUNDMDAwQjJDQjAxMDBGQzgxMDA0MDgxMzIwMTAwOTk4MzIyNDAyNworOjEwOUNEMDAwQjU2RjAwMDA5RDgzMDA1NEZEOTMwMDAwMDAwMDAwNTEwQgorOjEwOUNFMDAwRkQ4MzAxMDAxQzAwMDBGRTdGRDkwMTAwOUQ4M0E2NDA3QQorOjEwOUNGMDAwODEzMjAwMDAwMDAwMDA1NUZEOTMwMTAwMDAwMDgwNDAwQgorOjEwOUQwMDAwODFCMjAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDJGNDE3QgorOjEwOUQxMDAwOTlCMzAxMDBBODgzMjI0NDgxNkMwMDAwQjA4MzIyNDhEQgorOjEwOUQyMDAwODE2QzAwMDBBQTgzMjI0QzgxNkMwMDAwQjQ4MzIyNTAxNQorOjEwOUQzMDAwODE2QzAwMDBCNTgzMjI1NDgxNkMwMDAwQjc4MzIyNThFNworOjEwOUQ0MDAwODE2QzAwMDBCQzgzMjI1QzgxNkMwMDAwNTUwMTAwNDBFNgorOjEwOUQ1MDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwNkE4NDAwQ0FBMgorOjEwOUQ2MDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDEwRAorOjEwOUQ3MDAwRjM4MzAxMDBBRTgzQTI0MjA1NkMwMDAwMDAwMDAwNDFBNQorOjEwOUQ4MDAwMDVCMDAxMDA2QTg0MjJDQTA3MTQwMDAwNkE4NDAwNDVGNQorOjEwOUQ5MDAwRjM5MzAwMDA2QTg0MjA0Mzk1NkYwMDAwNkE4NDgwQ0FCMAorOjEwOURBMDAwMDUzMDAwMDA2QTg0MjIwMTgwMzAwMDAwNkE4NDAwQ0IwNAorOjEwOURCMDAwREI5MTAwMDA1QzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkMwNAorOjEwOURDMDAwQjFCMzAxMDA2QTg0MDBDQUNGQjMwMDAwRkYwMDAwQ0EyQgorOjEwOUREMDAwODE4ODAxMDA2QTg0QTI0MDc0N0QwMDAwNjAwMDIwNDBGOAorOjEwOURFMDAwNjA5OTAxMDBCOTgzQThCMTgyMzAwMDAwQjg4MzAwNDBCNworOjEwOURGMDAwODFCMjAwMDA2QTg0MDBDQTc5QjMwMDAwMDAwMDAwNEVGRQorOjEwOUUwMDAwODFCMDAxMDAwMDAwMDA0M0NCODMwMTAwMDAwMDQ1NDAwOQorOjEwOUUxMDAwODFCMjAxMDBCRjgzQTI0MTgxNTAwMDAwMDAwMDQ1NDA5MworOjEwOUUyMDAwODFCMjAxMDAwMDAwNDU0MDgxQjIwMTAwQ0E4MzkxODJFNQorOjEwOUUzMDAwODIzMDAwMDAwMDAwMDA4QTgwQjAwMTAwQjY5RjAwNDAyMAorOjEwOUU0MDAwODBDRTAxMDBDODgzQTY0MDgxMzIwMDAwQ0E4MzU2NDBGQworOjEwOUU1MDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTM0OAorOjEwOUU2MDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTJENAorOjEwOUU3MDAwMDc5MDAxMDBGMzlGMDA0MThCQjMwMDAwMDAwMDAwNEVFQgorOjEwOUU4MDAwODFCMDAxMDAwMDAwMDA0MkNEODMwMTAwMDAwMDQ2NDA4NworOjEwOUU5MDAwODFCMjAxMDBDRjgzQTI0MTgxNTAwMDAwMDAwMDQ2NDAwMgorOjEwOUVBMDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwREE4MzkxODE1NQorOjEwOUVCMDAwODIzMDAwMDAwMDAwMDA4OTgwQjAwMTAwQjY5RjAwNDBBMQorOjEwOUVDMDAwODBDRTAxMDBEODgzQTY0MDgxMzIwMDAwREE4MzU1NDA1RAorOjEwOUVEMDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTJDOQorOjEwOUVFMDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTM1MworOjEwOUVGMDAwMDc5MDAxMDBGMzlGMDA0MThCQjMwMDAwQjEwMzAwNDBDNQorOjEwOUYwMDAwQTE5OTAxMDBDNDE0MkY0MDk5QjMwMTAwNUMwMTAwNDBFNQorOjEwOUYxMDAwNDlCMTAwMDA1ODE1MkQ0MDhEQjAwMTAwRDAxNDJERjAyRQorOjEwOUYyMDAwODhCMDAxMDAwMDAwMDA0MDhGQjAwMTAwMDEwMDAwQTZEMQorOjEwOUYzMDAwOTBCMDAxMDAwMEY4MDA0ODkwOTgwMTAwMDAwMDAwNDUzMgorOjEwOUY0MDAwOTNCMDAxMDAwMDAwMDBGQThBQjAwMTAwNkEwMzAwNDBFQgorOjEwOUY1MDAwODEzMjAxMDAwMjAwMDBBNjgwQjAwMTAwRUM4MzIyNDBBMworOjEwOUY2MDAwODI2QzAwMDBGMDgzMDA0MDgxMzIwMTAwNDcwMzAwNDAxMgorOjEwOUY3MDAwODEzMjAxMDAwMDAwMDA0MThEQzAwMTAwRjU4MzIyNUZBNQorOjEwOUY4MDAwOEQ2QzAwMDBFNzgzQTI0MTkzNTAwMDAwRTU4MzAwNDAwMAorOjEwOUY5MDAwODFCMjAwMDBGRjA3MDA0Nzg0ODgwMTAwMDAwMEE2NDA0RQorOjEwOUZBMDAwODFCMjAwMDBGNTlGMDA0NzgwMzAwMTAwMDAwMjAwNDdBOQorOjEwOUZCMDAwOEVDODAxMDBGMDgzMDA0MDgxQjIwMDAwMDAwMDAwNDQyMAorOjEwOUZDMDAwNTBCMzAxMDBGQjgzMjAxODg5NkMwMDAwMDQwMDAwQTYzOAorOjEwOUZEMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDBGRgorOjEwOUZFMDAwNTU5QjAxMDBGRTgzMDA0MDgxQjIwMDAwMDQwMDAwQTZFMgorOjEwOUZGMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDBERgorOjEwQTAwMDAwNTU5QjAxMDAwMDAwMDA0MjUwRDMwMTAwMDAwMDAwQTg1MQorOjEwQTAxMDAwNEZCMzAxMDAwMDAwMDA0MzRFRDMwMTAwNUUwMzAwNDAzNworOjEwQTAyMDAwODEzMjAxMDA2QzAzMDA0MjgwMzAwMTAwRjA4MzAwNDA2NworOjEwQTAzMDAwODEzMjAxMDAwNzg0MjJBNzhGNkMwMDAwNDkwMzAwNDA5MQorOjEwQTA0MDAwODEzMjAxMDAwNDg0MDA0MDgxQjIwMDAwMDAwMDgwNDBBMQorOjEwQTA1MDAwODFCMjAxMDBBMDk0MkU0Mzk3QjAwMTAwMDAwMDAwNDA5RgorOjEwQTA2MDAwRjFCMTAxMDAwOTg0QTI0MTk3NTAwMDAwNTA5NTIwNDBCMQorOjEwQTA3MDAwRTFCMTAxMDBBQzk0MkU0Mzk3QjAwMTAwMDAwMDAwNDAxNAorOjEwQTA4MDAwRjFCMTAxMDAwRDg0QTI0MTk3NTAwMDAwMDAwMDgwNDAxMgorOjEwQTA5MDAwODFCMjAxMDBBRTAzMDA0MEEzOTkwMTAwMDAwMDAwNDAxRQorOjEwQTBBMDAwODFCMDAxMDA2MDE1MDA0MDg1OTgwMTAwMDgwMDAwNDA2MworOjEwQTBCMDAwNDBFNDAxMDAwMDAwMDA1OTQxOTQwMTAwMDAwMDAwNTBGQworOjEwQTBDMDAwNDFFMDAxMDAwMDAwMDA0MjQwOTQwMTAwMDAwMDAwNDExNgorOjEwQTBEMDAwODFDMDAxMDAwMDAwQTM0MTgxNkMwMTAwMDAwMDAwNDEyQgorOjEwQTBFMDAwQTNDMTAxMDAxMzg0MDA1MDg1QzAwMDAwNDk4NEEyNDEyRgorOjEwQTBGMDAwMDE3RDAwMDAyMTg0MjI1ODczN0QwMDAwNzgwMDAwNDAxQgorOjEwQTEwMDAwNjE5OTAxMDAxQzg0QThCMTlDMzAwMDAwMzAwMDM4NDVFMgorOjEwQTExMDAwOURFMDAxMDAwMTAwMDAwRTEwQzkwMDAwMjE4NDMzQzQzRAorOjEwQTEyMDAwODEzMDAwMDAyNDg0QTFBRDlEMjAwMDAwMUI4NDEzNDBEOQorOjEwQTEzMDAwODFCMjAwMDAwMDAwMTM0RTVBODMwMTAwMzAwMDM4NDUwMAorOjEwQTE0MDAwOURFMDAxMDAyQzg0MjJBQjgwMDQwMDAwMkE4NEEyNDAwMAorOjEwQTE1MDAwMDE3RDAwMDAyQzg0MjI1RjU3N0QwMDAwMjc4QTAwNDA4QgorOjEwQTE2MDAwODFCMjAwMDAyQzg0MjI1RTU3N0QwMDAwOEE4QTAwNDA2NAorOjEwQTE3MDAwODFCMjAwMDAzMTg0MjI1NDczN0QwMDAwNzQwMDAwNDBERAorOjEwQTE4MDAwNjE5OTAxMDAyQzg0QThCMTAwMzAwMDAwMDA4NkEyNUYxNAorOjEwQTE5MDAwMDE3QzAwMDA2Mjg5MDA0MDgxQjIwMDAwMzM4NEEyNUYyQworOjEwQTFBMDAwNTkyNzAwMDAzNTg0QTI1QzczN0QwMDAwM0M4NEEyNUVDOAorOjEwQTFCMDAwNzM3RDAwMDA0Njg0MjI1QzczN0QwMDAwNDc4NDM3NDAzNQorOjEwQTFDMDAwODEzMjAwMDA3QzAwMDA0MDYxOTkwMTAwMzY4NEE4QjExMgorOjEwQTFEMDAwMzYzMDAwMDA3QzAwMDA0MDYxOTkwMTAwMzg4NEE4QjE0RAorOjEwQTFFMDAwMDAzMDAwMDAxRjAwMDAwMDAyODgwMTAwMkY4NjE3NDA4OQorOjEwQTFGMDAwODFCMjAwMDA0Nzg0MzQ0MDgxMzIwMDAwN0UwMDAwNDA3QworOjEwQTIwMDAwNjE5OTAxMDAzRDg0QThCMTEyMzAwMDAwNDQ4NDUyMjFCQworOjEwQTIxMDAwMTMwNDAwMDAwMDAwMTQ0MTJGQzMwMTAwRkYzRjAwMDk5OAorOjEwQTIyMDAwMDA4QzAxMDAwMDAwMDA0MzAxRjAwMTAwODc4NDAwMzQyRAorOjEwQTIzMDAwMTM4NDAwMDBGRjNGMTQwOTAwOEMwMTAwRTc4NDAwNDNGMQorOjEwQTI0MDAwMDFGMDAwMDAwMDAwMDA0MDgxQjIwMTAwNDc4NDMzNDA2QgorOjEwQTI1MDAwODEzMjAwMDAxQjg0MTM0RTVBOTMwMDAwRUM4OUEyNDhGRgorOjEwQTI2MDAwRkQ3RjAwMDA0RTg0MjI1OTczN0QwMDAwNzkwMDAwNDA3QworOjEwQTI3MDAwNjE5OTAxMDA0QTg0MjhCMTdFMzEwMDAwNEI4NDAwNDA3RQorOjEwQTI4MDAwODFCMjAwMDA1Mjg0MjFBQzlDMjAwMDAwMDAwMDAwNDFGQgorOjEwQTI5MDAwMUZDMzAxMDAwNDAwQTA1RjlENkMwMDAwMDAwMDAwNEU4MQorOjEwQTJBMDAwNTg5MTAxMDA1Njg0MjI1QTczN0QwMDAwN0EwMDAwNDBDNAorOjEwQTJCMDAwNjE5OTAxMDA1Mzg0QThCMTdFMzEwMDAwMDEwMDAwQ0ZGNAorOjEwQTJDMDAwMTFDOTAwMDA1Qzg0QTI0MDkzN0YwMDAwNUM4NDIyNDQ5QQorOjEwQTJEMDAwOTM3RjAwMDA1ODg0NDJBNTgwMzAwMDAwNUI4NEEyNDAzOAorOjEwQTJFMDAwOTM3RjAwMDA3MTg0MUE0MDkzOTMwMDAwMDAwMDFBNDA4RAorOjEwQTJGMDAwODFCMjAxMDA5QTgwQTI0MDczN0QwMDAwQTE4OTIyNDRBRQorOjEwQTMwMDAwMjE2RjAwMDA5ODg5MjI0MDY1N0QwMDAwQTY4OUEyNUIyQworOjEwQTMxMDAwNzM3RDAwMDAwNDAwQTI0OTMzN0QwMDAwNjY4NDIyNDg1QQorOjEwQTMyMDAwMzM3RDAwMDBGRjAxMDA5OTgwRDgwMTAwMDAwMDAwNTAzQgorOjEwQTMzMDAwODFFMDAxMDBBODk4MkY0MDMzQjEwMTAwMDAwMDAwNDBFNworOjEwQTM0MDAwRTBDMTAxMDA2OTg0MjI0MEFGNkYwMDAwNjk4NDIyNDBBRgorOjEwQTM1MDAwODE2RjAwMDBGNTg5MUZBNTgyNkYwMDAwNDk4NDAwNDBDRAorOjEwQTM2MDAwODFCMjAwMDAxQjg0MDA0MDhCQjMwMDAwMDAwMDAwNTg0NQorOjEwQTM3MDAwNjFCMTAxMDAwMDAwMDA0RTYyQjEwMTAwMUI4NDI4NDA2MQorOjEwQTM4MDAwODEzMjAwMDA2Qzg0MDA0MDgxQjIwMDAwNkY4NDMzNDA1MQorOjEwQTM5MDAwMUYzMDAwMDAxQjg0MTM0RTVBOTMwMDAwNzM4NEEwQ0UxQworOjEwQTNBMDAwODE1MDAwMDA4NTg0QTBDRDgxNkMwMDAwMDAwMDAwQTVENAorOjEwQTNCMDAwOUNCMzAxMDAwMDAwMDBCMTgxQjAwMTAwODU4NDIyQjU4QQorOjEwQTNDMDAwODExNDAwMDA4MDE1MkY0MDQ5QjEwMTAwNzc4NDQyNDA3QworOjEwQTNEMDAwODEzMjAwMDAwMDAwNjBCNDY1OTcwMTAwRDAxNTJFNDA2NgorOjEwQTNFMDAwNjlCMzAxMDAwMDAwMUE0NDkzODMwMTAwMUEwMDAwQTIxRgorOjEwQTNGMDAwODBEQzAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwQjE2OAorOjEwQTQwMDAwRjFCMTAxMDAwMDAwMDBCNUYxQjEwMTAwMDUwMDAwNDAwQworOjEwQTQxMDAwNjE5OTAxMDAwMDAwMDA0MDYyQjEwMTAwODA4NEE4QTFBMAorOjEwQTQyMDAwRTAzMTAwMDA1Qzg0MDA4ODlFQjMwMDAwNUM4NEEyNDE5RgorOjEwQTQzMDAwNjc2RjAwMDA1Qzg0MDA2RkRCOTEwMDAwODU4NDQyNDAwMAorOjEwQTQ0MDAwODEzMjAwMDA1Qzg0MUE0MDkzODMwMDAwMDA5OTAwMDk2NworOjEwQTQ1MDAwNDZDOTAxMDAzRjAwMDBGMzBDODgwMTAwOTA4NEE2NDIyOQorOjEwQTQ2MDAwMTM2MDAwMDA1NTk3MDA5NTAzMzAwMTAwOEI4NDQ1NDAzMAorOjEwQTQ3MDAwODEzMjAwMDA3NTAwMDA0MDYxOTkwMTAwOEM4NEE4QjExMAorOjEwQTQ4MDAwMEMzMDAwMDA1Qzk3MUQxMDk0MzAwMTAwOTE4NDAwNTgzRQorOjEwQTQ5MDAwMUY5MDAwMDA0RTk3MDA5NTAzMzAwMTAwMUI4NDAwODgzOAorOjEwQTRBMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDQwMDJERjA5NQorOjEwQTRCMDAwMkVCMDAxMDBFRTA3MDA0MDk3OTgwMTAwOTg4NDIzNEJDRQorOjEwQTRDMDAwRTQ2RDAwMDA5ODg0MjI0QkZEN0YwMDAwMDAwMDAwNDBGNgorOjEwQTREMDAwMUY5MDAxMDAyMjAwMkY0MDgxQjIwMTAwOUI4NDgzMTc0RQorOjEwQTRFMDAwODAzMjAwMDAyNjAwMDA0MDQ3OTkwMTAwOUQ4NDg1MTdCNgorOjEwQTRGMDAwODAzMjAwMDAwMDAwMDA0ODQ3QzEwMTAwQTM4NDIyNTVCQgorOjEwQTUwMDAwMkY3QzAwMDAwMDAwMDA0MjQzRDEwMTAwMEYwMDAwRkE0MAorOjEwQTUxMDAwOTY4ODAxMDAwMDAwMDA0Mjk3RTAwMTAwMDAwMDAwNDIyMAorOjEwQTUyMDAwOTdEMDAxMDBBNDg0MDA0QjQ0QzEwMDAwMTIwMDAwQTI5NworOjEwQTUzMDAwNDRDOTAxMDAyODAwMDBGNjAyQ0MwMTAwMEEwMDAwQTE3NQorOjEwQTU0MDAwNDJDOTAxMDAwMDAwMDBGODE2QjAwMTAwMDAwMDI4RjAyOAorOjEwQTU1MDAwMTBCMDAxMDAwMDAwMDBGMDFBQjAwMTAwMDAwMDAwQTJERAorOjEwQTU2MDAwMkFCMDAxMDBDMDI4M0M0NjBERTAwMTAwMDAwMDJENDQ0NworOjEwQTU3MDAwOTVCMDAxMDBCMDg0QTJGODBFMzAwMDAwQzA4NDIyNDFFMgorOjEwQTU4MDAwOTU1MDAwMDAwMDAwMkQ1MDQ5QzEwMTAwQUM4NDAwNDBFRQorOjEwQTU5MDAwODFCMjAwMDBBRDg0QTJGODE2NkMwMDAwQUQ4NEEyRjg3MAorOjEwQTVBMDAwMTA2QzAwMDBBRDg0QTJGMDFBNkMwMDAwQkU4NDIyNTgyQQorOjEwQTVCMDAwMUY3QzAwMDAwMDk5M0Y0MjEzRjAwMTAwQjU4NDQ3NDAyMgorOjEwQTVDMDAwODEzMjAwMDBCOTg0QTJGMzc0MDYwMDAwMDAwMDAwMDY4NgorOjEwQTVEMDAwRTY5NTAxMDBCRTg0MUY0MDgxQjIwMDAwMDAwMDAwMDYyNQorOjEwQTVFMDAwOTZCMDAxMDAzRjAwMUZGMzBDODgwMTAwMDAwMDAwNTVFOQorOjEwQTVGMDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwQkM4NEE4NDBDMQorOjEwQTYwMDAwODEzMjAwMDBCRTg0NDc0MDgxMzIwMDAwQzY4NDFGNDE3MQorOjEwQTYxMDAwMkRDMzAwMDBDNDg0MjI1ODFGN0MwMDAwMDAwMDAwNTU5OAorOjEwQTYyMDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwQzI4NEE4NDBDRgorOjEwQTYzMDAwODEzMjAwMDBDNDg0NDc0MDgxMzIwMDAwRUU4NDFGNDExMworOjEwQTY0MDAwMkRDMzAwMDAwMzAwMDAwNzFBRjQwMTAwMjE5NjAwMDc0MworOjEwQTY1MDAwMTYzMDAxMDBENTg0MjI0MTgxNkMwMDAwQ0M4NDIyNDI1NgorOjEwQTY2MDAwODE2QzAwMDAxQjg0MDA4ODFDQjAwMDAwRDQ4NDIyNUYzMQorOjEwQTY3MDAwMEY3QzAwMDAxNTk3MDA1RjAxMTAwMTAwRDI4NDIyNDA3QQorOjEwQTY4MDAwOTU2QzAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjI0NAorOjEwQTY5MDAwMDJCMDAxMDA4QTk2MDA1Mjk1MzAwMTAwOTE5NjAwNEI1RAorOjEwQTZBMDAwMDJCMDAwMDA2Nzk3MDAwOTk2MzAwMTAwMDU4QTAwNDA1QgorOjEwQTZCMDAwMEZCMDAwMDBERDg0QTI1QTFGN0MwMDAwOUI5NTAwNDA3MworOjEwQTZDMDAwODEzMjAxMDBERDg0MjIyMDg1NkMwMDAwREE4NDlDMEYzOQorOjEwQTZEMDAwODAzMjAwMDAxQjg0MDA4ODFDQjAwMDAwN0M5NjAwNUM2NworOjEwQTZFMDAwMUYwMDAxMDA5Qjk4MDA0MjYxMzEwMTAwMUI4NDAwODgxQgorOjEwQTZGMDAwMUNCMDAwMDBFNjk5MDAwNzk2MzAwMTAwMDAwMDJEMDUwRgorOjEwQTcwMDAwNDhCMTAxMDBFMDg0ODJGMDE4MzAwMDAwNkM4QjAwNDVGNQorOjEwQTcxMDAwOEZCMDAwMDAyODIwMDBBNjk2QjAwMTAwRTQ4NDIyMTcyNAorOjEwQTcyMDAwOTYwNDAwMDAwQjk4MDA0Qjk1MzAwMTAwNkM4QjAwNEI5OQorOjEwQTczMDAwOEZCMDAwMDAyMTk3MDAwMzQ4MzEwMTAwRkM5NDAwNDBENQorOjEwQTc0MDAwODEzMDAxMDA2QzhCMDA0MDgxQjIwMDAwMDAwMDJFMTBBRgorOjEwQTc1MDAwNDhCMTAxMDAwMDAwNjg1MDAzQjAwMTAwMDAwMDAwMDM5MAorOjEwQTc2MDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTBFMgorOjEwQTc3MDAwNjJCMTAxMDBFQjg0QTgwMEUwMzEwMDAwMUI4NDAwODg3NgorOjEwQTc4MDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDAwMDAwNDA5MworOjEwQTc5MDAwMEZCMDAxMDAwMDAwMDBGODJFQjAwMTAwMDAwMDAwRjIzMAorOjEwQTdBMDAwMDJCMDAxMDAwMDAwMDA0MDE3QjAwMTAwMDA0MTAwQTYwNworOjEwQTdCMDAwOTZCMDAxMDBFRTA3MkU0Nzk3OTAwMTAwMDE4NTIyMTcwMQorOjEwQTdDMDAwOTYwNDAwMDBGRjg0MjI0QkZEN0YwMDAwRkY4NDIzQTIzQgorOjEwQTdEMDAwMDI2QzAwMDA4QTk2MDA1Mjk1MzAwMTAwMDQwMDIyNDE2QworOjEwQTdFMDAwOTc1MDAwMDAwQzAwMkQwMDEyQjAwMTAwMDAwMDAwRjA5NgorOjEwQTdGMDAwMDBCMDAxMDAwMDAwMDA1QzAxODAwMTAwOTE5NjAwNEI1OAorOjEwQTgwMDAwMDJCMDAwMDAwMDAwMDAwOTAwQjAwMTAwMDAwMDAwNTA4QworOjEwQTgxMDAwMDNCMDAxMDAxRTg1MDA1QzE3OTAwMDAwMTM4NTIyNDNFMQorOjEwQTgyMDAwMkY3QzAwMDAwMDAwMDA0NTFGOTAwMTAwMEM4NTIyNUY3NgorOjEwQTgzMDAwMkY3QzAwMDAwMDAwMkUxMDQ4QjEwMTAwMDAwMDAwNThERAorOjEwQTg0MDAwRjFCMTAxMDAxMDAwMDAwM0YwQzkwMTAwMTAwMDAwMDA4OAorOjEwQTg1MDAwRTBDOTAxMDAwODg1NDU0MjYxMzEwMDAwMDAwMDAwMTA5OAorOjEwQTg2MDAwNjJCMTAxMDAwOTg1QTg0MDgxMzIwMDAwMUI4NDFEODg2NworOjEwQTg3MDAwMUNCMDAwMDAyMDAwMkQwMzQ4QjEwMTAwRkYwRjAwRjZCRQorOjEwQTg4MDAwODA4ODAxMDAxMDg1QTJBNjgxNkMwMDAwMTM4NTAwRjI2QgorOjEwQTg5MDAwM0FCMDAwMDBGRDg1QTI0QkZEN0YwMDAwRTI5NTAwNDAyQworOjEwQThBMDAwODEzMjAxMDAxQjhBMDA0MDgxQjIwMDAwMUU4NTIyNEFDRAorOjEwQThCMDAwMkY3QzAwMDAxRTg1MjI0ODJGN0MwMDAwMEEwMDJEMDNGQgorOjEwQThDMDAwNDhCMTAxMDAzRjAwMDBGMjg2ODgwMTAwMUYwMDAwNDNFQworOjEwQThEMDAwODQ4ODAxMDAwNTAwMDA0MzgwRjQwMTAwOTg5NDNENDIwMworOjEwQThFMDAwODFFMDAxMDAxRTg1QTI0MkUwN0QwMDAwRkQ4NUEyNEJCMworOjEwQThGMDAwRkQ3RjAwMDBFMjk1MDA0MDgxMzIwMTAwMUI4QTAwNDA4QworOjEwQTkwMDAwODFCMjAwMDAxRTg1NDc0MDgxMzIwMDAwMDAwMDAwQTM5NAorOjEwQTkxMDAwMDlCMDAxMDAwMDAwMUY0MTQ3QzMwMTAwMjQ4NTIyQTFBNgorOjEwQTkyMDAwMDk2QzAwMDA2Qjg0MDA4ODFDQjAwMDAwMjE4NTAwMDNDNgorOjEwQTkzMDAwNDhCMTAwMDA1RTg1QTM5MjAzNkMwMDAwMEE5OTAwNDBCNAorOjEwQTk0MDAwOTUzMDAxMDAwMDAwMDA0MTQzQzMwMTAwMDAwMDAwMTZFMworOjEwQTk1MDAwODBCMjAxMDAxQjhBMjcwODgwMzIwMDAwMkI4NTIyNUMxMAorOjEwQTk2MDAwMTc3QzAwMDAyQzg1MDAwMDJBQjAwMDAwMTIwMDAwMDBCNworOjEwQTk3MDAwMkFDODAxMDAwMjAwMDAwODgwQzgwMTAwMzA4NUEyNDNGNworOjEwQTk4MDAwMkY3QzAwMDAwRTk4MDA0MDgxMzIwMTAwNEM4NTAwNUU1MworOjEwQTk5MDAwMTc5MDAwMDAwNDAwMDAwMThDQ0MwMTAwMEU5ODAwNENDMAorOjEwQTlBMDAwMDMzMDAxMDAwMDAwMkU0NjAyQjAwMTAwMTAwMDAwMTAyQworOjEwQTlCMDAwNDhDOTAxMDAwQzAwMDAwMUYwQ0QwMTAwMkMwMDAwNDA0RQorOjEwQTlDMDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMTAwMDAwMTVGMAorOjEwQTlEMDAwRTBDOTAxMDAwMDAwMDA0MzYxQjEwMTAwQTAwMDAwQTQzMworOjEwQTlFMDAwNjJERDAxMDAzOTg1QTg1NDE3MTAwMDAwNEM4NTAwNUUxNworOjEwQTlGMDAwMTc5MDAwMDAxMjAwMDAwMDJBQzgwMTAwNEI4NTIyNDM3NgorOjEwQUEwMDAwMkY3QzAwMDAwNDAwMDAwMThDQ0MwMTAwMDAwMDAwNENGMQorOjEwQUExMDAwMDNCMDAxMDAyRjk4MDA0MzYxMzEwMTAwMDAwMDJFNDY3MQorOjEwQUEyMDAwMDJCMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMEMwMDAwMDEzNAorOjEwQUEzMDAwRjBDRDAxMDAwQzAwMDAwOUYwQzkwMTAwMDAwMDAwMTg3MQorOjEwQUE0MDAwRjBCMTAxMDAxMDAwMDAxNUUwQzkwMTAwMDAwMDAwNDM1MgorOjEwQUE1MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNEM4NTI4NTQxMgorOjEwQUE2MDAwMTcxMDAwMDA0ODg1MDA0MDgxQjIwMDAwMkY5ODAwNDM3NQorOjEwQUE3MDAwNjEzMTAxMDA0RTg1MjI1MDJGN0MwMDAwMDAwMDAwNTZGRAorOjEwQUE4MDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwNTE4NUEyNDEyNgorOjEwQUE5MDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwMDAwMDAwNDM3MQorOjEwQUFBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTI4NUE4NDA0NAorOjEwQUFCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMTY5ODAwNDAwMgorOjEwQUFDMDAwODEzMjAxMDA1OTg1MjI0MzJGN0MwMDAwMTY4MDAwMDM0QgorOjEwQUFEMDAwNDRDOTAxMDAwMDAwMDAxREU0QjEwMTAwQjc5NzAwNUUwOQorOjEwQUFFMDAwMDUxMDAxMDA1Qzg1QTI1RjJGN0MwMDAwQ0U5NDAwMDE2MAorOjEwQUFGMDAwMzg0MzAxMDBFMjk1MDA0MDgxMzIwMTAwMUI4QTAwNDA4QQorOjEwQUIwMDAwODFCMjAwMDA2MDg1QTI0QkZEN0YwMDAwRkE4NTAwNDEwNAorOjEwQUIxMDAwNDNDMzAwMDAwMDAwMDA0MDI3QjAwMTAwMDAwMDAwNDBENworOjEwQUIyMDAwMkRCMDAxMDAwMDAwMDA0MDExQjAwMTAwNjM4NTM1MDEyNworOjEwQUIzMDAwODYzMDAwMDA2RDAwMDA0MDYxOTkwMTAwNkI4NTI4QjFFRQorOjEwQUI0MDAwMzAzMDAwMDA2NDg1MjI0RDc1N0QwMDAwMDAwMDAwMTY0NQorOjEwQUI1MDAwODBCMjAxMDBFQTg1QTc0MDExNkMwMDAwMDAwMDAwNDFBRQorOjEwQUI2MDAwNDNDMzAxMDBGOTg1MDA0MDgxQjIwMDAwNkQwMDAwNDA0MAorOjEwQUI3MDAwNjE5OTAxMDA2Qjg1QThCMTEyMzAwMDAwMDAwMDAwMTYzOQorOjEwQUI4MDAwODBCMjAxMDA3NTg1QTc0MDExNkMwMDAwMDAwMDAwNDFGMworOjEwQUI5MDAwNDNDMzAxMDAwMDAwMDAwOTEwQjAwMTAwMDAwMDAwMThDQworOjEwQUJBMDAwMkNCMDAxMDBERTA3MDA0MzgwQ0UwMTAwNjQ4NUFBNDA3RQorOjEwQUJCMDAwODEzMjAwMDA3QTg1MDA0MDgxQjIwMDAwNDAwMDNFNDNBRgorOjEwQUJDMDAwMjdFMDAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMThCQQorOjEwQUJEMDAwRTBCMTAxMDAwMDAwMDA0MTI3QzAwMTAwNjQ4NUEzMEIyMworOjEwQUJFMDAwODc1MDAwMDAwMDAwMTU0MDFCQjAwMTAwMDAwMDAwNDAyRAorOjEwQUJGMDAwMjNCMDAxMDAxMjAwMDAwMDJBQzgwMTAwNDAwMDJENDBDRgorOjEwQUMwMDAwMzlCMDAxMDA4Mjg1QTI0MDI3NkMwMDAwMjIwMDAwMDhCNAorOjEwQUMxMDAwMTJDODAxMDBERTA3MDA0MDI1OTgwMTAwODU4NTAwNDAyQworOjEwQUMyMDAwODFCMjAwMDAwMDAwMDBGODEyQjAwMTAwMDAwMDAwRjA0NgorOjEwQUMzMDAwMzBCMDAxMDAwMDAwMDAwQjI1QjAwMTAwMDAwMDAwMTA0MgorOjEwQUM0MDAwMzJCMDAxMDAxNDAwMjAwMUUwQjEwMTAwRUUwNzAwNDAyNQorOjEwQUM1MDAwMzc5ODAxMDA4QTg1MjMwMTM2NkMwMDAwMDAwMDAwMDE0RQorOjEwQUM2MDAwMzZCMDAxMDA5NTg1ODI0MTIzNDAwMDAwMjA4MDAwMTAwRAorOjEwQUM3MDAwNDJDOTAxMDA5MTg1MjI0MEUzNkQwMDAwMDAwMDAwNDNCRAorOjEwQUM4MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOEU4NUE4NDAyNgorOjEwQUM5MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDE5NjAwNDMzNAorOjEwQUNBMDAwMjMzMDAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwNDExQworOjEwQUNCMDAwMjNCMDAxMDAwMDAwMDAwMzQ4QjEwMTAwMDA4MDAwMTkyQQorOjEwQUNDMDAwNDRDOTAxMDBBNDg1MjI0NTFGN0MwMDAwMDAwMDAwNENGRgorOjEwQUNEMDAwRjFCMTAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMTgwRQorOjEwQUNFMDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTkzMworOjEwQUNGMDAwNjJERDAxMDA5Qjg1QTgxNUUwMzEwMDAwMDAwMDAwNTBENgorOjEwQUQwMDAwMDNEMDAxMDAwMDAwMDA1MDMzQzAwMTAwMDAwMDAwNENERgorOjEwQUQxMDAwMjVEMDAxMDAwQzAwMkQ0QzEzQzAwMTAwMDAwMDAwNTA5NAorOjEwQUQyMDAwMzdEMDAxMDAwMDAwMDA1MDJCQzAwMTAwOEE4NTAwNDU4QgorOjEwQUQzMDAwMUY4MDAwMDBBNjg1QTMxMjM2NkMwMDAwQTc4NTY4MUI0MworOjEwQUQ0MDAwMjhCMDAwMDAwMDAwNjgxMjI4QjAwMTAwMDAwMDAwMDlDRgorOjEwQUQ1MDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwMDAwMDAwNDM1NAorOjEwQUQ2MDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwQUE4NUE4MTU2QgorOjEwQUQ3MDAwRTAzMTAwMDBEMDg1MjIxNDAyNTAwMDAwMDAwMDAwNTA5NQorOjEwQUQ4MDAwMzNDMDAxMDAwMDAwMDAxNDI0RDAwMTAwMEMwMDJEMTQ3OQorOjEwQUQ5MDAwMTJDMDAxMDBDOTg1QTIxNDM2NTAwMDAwQkE4NTIyNUM5OQorOjEwQURBMDAwMUY3QzAwMDAzMDgwMDAxMDQyQzkwMTAwQjg4NTIyNDA5RAorOjEwQURCMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTA5RQorOjEwQURDMDAwNjJERDAxMDBCNTg1QTg0MDgxMzIwMDAwMUI4NDAwODg0NworOjEwQUREMDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwMEMwMDJENUMxNQorOjEwQURFMDAwMUY4MDAxMDAxMDAwMDBGMDJBQzgwMTAwMDAwMDAwNUM3NAorOjEwQURGMDAwMkI4MDAxMDBGMDA3MDA0MDM3OTgwMTAwQkY4NTIzMDEzOAorOjEwQUUwMDAwMzY2QzAwMDAwMDAwMDAwMTM2QjAwMTAwQ0E4NTIyMUIyQworOjEwQUUxMDAwMDI2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMDAwMDJFNUNFOAorOjEwQUUyMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM3QworOjEwQUUzMDAwRjBCMTAxMDBGRjA3MDAxNUUwOEQwMTAwMDAwMDAwNDJBNQorOjEwQUU0MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwQzY4NUE4NDAzOAorOjEwQUU1MDAwODEzMjAwMDBDQTg1MDAwMzQ4QjEwMDAwMDAwMDAwMTRFMAorOjEwQUU2MDAwMkFDMDAxMDA4QTg1QTI0MDI1NkMwMDAwMDAwMDAwNDEzNAorOjEwQUU3MDAwMzlDMDAxMDA0MDAwM0Q0MzM5RTAwMTAwMDAwMDAwMEJGMworOjEwQUU4MDAwMjVCMDAxMDAwMDAwMDBGODEyQjAwMTAwOEE4NTAwRjAzMgorOjEwQUU5MDAwMzBCMDAwMDAwMDgwMDAxOTQyQzkwMTAwRDY4NTIyNDA3MAorOjEwQUVBMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTlBMworOjEwQUVCMDAwNjJERDAxMDBEMzg1QTg0MDgxMzIwMDAwMUI4NDAwODgzOAorOjEwQUVDMDAwMUNCMDAwMDAwMTk2MDA0MDJCMzAwMTAwMTgwMDJFMDMzQQorOjEwQUVEMDAwNDhCMTAxMDBEQTg1MjI1MDJGN0MwMDAwMDAwMDAwNTZBNgorOjEwQUVFMDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwREQ4NUEyNDEzNgorOjEwQUVGMDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwRTA4NTIyNDM4NgorOjEwQUYwMDAwMkY3QzAwMDAwMDAwMDA1NDE3OTAwMTAwMTYwMDIwMUQ0NworOjEwQUYxMDAwRTRCMTAxMDBFMjg1QTM0MDI3NkMwMDAwRTQ4NTYwNUY5NgorOjEwQUYyMDAwMTc5MDAwMDAwMDg0MDAwQjE2REMwMTAwMDAwMDYwMTM4NQorOjEwQUYzMDAwMTY5NDAxMDBCNzk3MDA1RTA1MTAwMTAwMUI4QUEyNUZGRQorOjEwQUY0MDAwMkY3QzAwMDAxNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjJDMQorOjEwQUY1MDAwMDJCMDAxMDBDRTk0MDAwMTM4NDMwMTAwMUI4QTAwNDA3QQorOjEwQUY2MDAwODFCMjAwMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwNERFRAorOjEwQUY3MDAwNjFCMTAxMDAwMDAwMDAxNjYyQjEwMTAwRUM4NUE4NDAzQgorOjEwQUY4MDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwRUU4NUE4NDA5NworOjEwQUY5MDAwODEzMjAwMDBGOTg1MjIxMzgyNkMwMDAwNDAwMDNENDM5RAorOjEwQUZBMDAwODNFMDAxMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwRjA5NAorOjEwQUZCMDAwMkNCMDAxMDAwMDAwMDAxNjYyQjEwMTAwRjQ4NUE4NDAyOQorOjEwQUZDMDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwRjY4NUE4NDA0RgorOjEwQUZEMDAwODEzMjAwMDBGMDg1MDA0MTgzQzAwMDAwMDAwMDE1NDA3MAorOjEwQUZFMDAwODFCMjAxMDAwMDgyMDBBNjA0QjAwMTAwQTA5ODAwNDBEOAorOjEwQUZGMDAwNDc5OTAxMDBFOTg5MDA0MTg5MzAwMTAwOEE5NjAwNTI5MQorOjEwQjAwMDAwOTUzMDAxMDA5MTk2MDA0QjAyQjAwMDAwMUI4QTAwNDA3MQorOjEwQjAxMDAwMEZCMDAwMDAwMDAwMDA1RjAxODAwMTAwMTAwMDAwMDA4MAorOjEwQjAyMDAwMEVGNDAxMDAzRjAwMDAwMDAwODgwMTAwMDMwMDAwMDc0QgorOjEwQjAzMDAwMUFGNDAxMDAyMTk2MDAwNzE2MzAwMTAwMEI4NjIyNDEwOAorOjEwQjA0MDAwODE2QzAwMDAwOTg2MjI0MjgxNkMwMDAwMUI4NDAwODgwQworOjEwQjA1MDAwMUNCMDAwMDAwQTg2MjI1RjBGN0MwMDAwMDU4QTAwNDBCOQorOjEwQjA2MDAwMEZCMDAwMDAxMzg2QTI1QTFGN0MwMDAwOUI5NTAwNDA4MQorOjEwQjA3MDAwODEzMjAxMDAxMzg2MjIyMDg1NkMwMDAwMTA4NjlDMEYwRgorOjEwQjA4MDAwODAzMjAwMDAxQjg0MDA4ODFDQjAwMDAwN0M5NjAwNUNBRAorOjEwQjA5MDAwMUYwMDAxMDA5Qjk4MDA0MjYxMzEwMTAwMUI4NDAwODg2MQorOjEwQjBBMDAwMUNCMDAwMDBFNjk5MDAwNzk2MzAwMTAwMDAwMDJEMDU1NQorOjEwQjBCMDAwNDhCMTAxMDAwMDAwMDBGMDE4QjAwMTAwMTk4NjIyM0FFMgorOjEwQjBDMDAwMDE2QzAwMDAwMDAwMDAwMDhFQjAwMTAwNkM4QjAwNDA5RAorOjEwQjBEMDAwMDFCMDAwMDAwMDAwMDA0MDgxQjIwMTAwMkUwMDJEMDVFQgorOjEwQjBFMDAwNDhCMTAxMDAxRDg2QTI0MEU3NkQwMDAwMEEwMDAwNDA0MworOjEwQjBGMDAwOEY5ODAxMDA2QzhCMDA0MDAxQjAwMDAwNjY5NTAwNDAwNQorOjEwQjEwMDAwODEzMjAxMDA0RTk3MDA5NTAzMzAwMTAwMUI4NDAwODhCNgorOjEwQjExMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMjIwMDJERjBGQQorOjEwQjEyMDAwMkVCMDAxMDAyODIwMDBBNjk2QjAwMTAwMjY4NjIyMTcyNgorOjEwQjEzMDAwOTYwNDAwMDAwQjk4MDA0Qjk1MzAwMTAwNkM4QjAwNEM3RQorOjEwQjE0MDAwOEZCMDAwMDAyODg2ODMxNzgwMzIwMDAwMDAwMDAwNDQ4MgorOjEwQjE1MDAwNDNDMTAxMDAyQTg2ODUxNzgwMzIwMDAwMDAwMDAwNDhBNAorOjEwQjE2MDAwNDNDMTAxMDAyODAwMDBGNjAyQ0MwMTAwMTIwMDAwQTEzQQorOjEwQjE3MDAwMkFDODAxMDAyMTk3MDA0MDgxMzIwMTAwRkM5NDAwNDE1RgorOjEwQjE4MDAwODEzMDAxMDA2QzhCMDA0MDgxQjIwMDAwMDAwMDAwMDFBMgorOjEwQjE5MDAwMDBEMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMjgwMDAwNDAzRQorOjEwQjFBMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDA2RgorOjEwQjFCMDAwRjBCMTAxMDAzNDg2NDY0NzYxMzEwMDAwMDAwMDAwMTAwNAorOjEwQjFDMDAwNjJCMTAxMDAzNTg2QTgxQkUwMzEwMDAwMUI4NDFFODg5NworOjEwQjFEMDAwMUNCMDAwMDAwMDAwMDA0NTAzRTAwMTAwMDgwMDJEMDM0MgorOjEwQjFFMDAwNDhCMTAxMDA1QTg2MDFGQjA4MzAwMDAwQUQ4Njg3RkI5QworOjEwQjFGMDAwMjIzMDAwMDAwMDAwMDBGQTBFQjAwMTAwMDAwMDAwRjg0QworOjEwQjIwMDAwMTRCMDAxMDAwMzAwMDAwNzFBRjQwMTAwMjE5NjAwMDdBMgorOjEwQjIxMDAwMTYzMDAxMDA1MDg2MjI0MTgxNkMwMDAwNDQ4NjIyNDI5MworOjEwQjIyMDAwODE2QzAwMDAxQjg0MDA4ODFDQjAwMDAwNEY4NjIyNUZFOAorOjEwQjIzMDAwMEY3QzAwMDAzODAwMDAwNDdFODkwMTAwNDg4NkE2NUY2QworOjEwQjI0MDAwMEYwMDAwMDA3NDk1MDA0MDA1MzAwMTAwNEQ4NjAwNDA1RAorOjEwQjI1MDAwODFCMjAwMDAxMzAwMDA0MDg3OTgwMTAwMDAwMDJEMDMxOAorOjEwQjI2MDAwNDhCMTAxMDAwQzAwMkRGMDgyQjAwMTAwMDAwMDAwRjA5OAorOjEwQjI3MDAwODRCMDAxMDAwMDk3MDA0MDA1MzAwMTAwMDAwMDAwNUMzMAorOjEwQjI4MDAwMUY5MDAxMDAwNThBMDA0MDBGQjAwMDAwNTg4NkEyNUFBNgorOjEwQjI5MDAwMUY3QzAwMDA5Qjk1MDA0MDgxMzIwMTAwNTg4NjIyMjBDRgorOjEwQjJBMDAwODU2QzAwMDA1NTg2OUMwRjgwMzIwMDAwMUI4NDAwODg0RQorOjEwQjJCMDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwOUI5ODAwNDJCRgorOjEwQjJDMDAwNjEzMTAxMDAxQjg0MDA4ODFDQjAwMDAwRTY5OTAwMDc3MgorOjEwQjJEMDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA4QgorOjEwQjJFMDAwMThCMDAxMDA1Qzg2MjEwNDgwMjAwMDAwNUQ4NjAwNDBDQgorOjEwQjJGMDAwMTBDOTAwMDBBRThBMDA0QjgxQjAwMDAwN0M4NjAwNDM3QworOjEwQjMwMDAwODFCMDAwMDA4MDg2MDBGQjIyQjAwMDAwQUU4QTAwNDFDMAorOjEwQjMxMDAwODFCMDAwMDA2QzhCMDA0RThGQjAwMDAwNzg4NjAwNUEyMAorOjEwQjMyMDAwOEZCMDAwMDA2NTg2MDA0NzhGQjAwMDAwQUU4QTAwNTNFMgorOjEwQjMzMDAwODFCMDAwMDBBRThBMDA1NjgxQjAwMDAwMzIwMDJEMDVCOQorOjEwQjM0MDAwNDhCMTAxMDA2QzhCQTAwQUU0NkQwMDAwNkI4NkEyNDEzRAorOjEwQjM1MDAwMTk3QzAwMDA2QTg2MjIwQTgwMzIwMDAwNkM4QjAwNTM0MAorOjEwQjM2MDAwOEZCMDAwMDA2QzhCMDA1NDhGQjAwMDAwNzQ4NjIyMEFFRQorOjEwQjM3MDAwODAzMjAwMDA2RTg2QTIwQUU0NkQwMDAwNkM4QjAwNURENgorOjEwQjM4MDAwOEZCMDAwMDAwMDAwMDBGMjgwQjAwMTAwMDAwMDAwMEE1MQorOjEwQjM5MDAwODBEMDAxMDA3Mjg2QTA5MTgxNkMwMDAwNkM4QjAwNUVGMQorOjEwQjNBMDAwOEZCMDAwMDAyNTAwMDA0MDhGOTgwMTAwNkM4QjAwNDA5QQorOjEwQjNCMDAwODFCMjAwMDA3Njg2MjA5MUU1NkQwMDAwNkM4QjAwNTQxMAorOjEwQjNDMDAwOEZCMDAwMDAyMTAwMDA0MDhGOTgwMTAwNkM4QjAwNDA3RQorOjEwQjNEMDAwODFCMjAwMDAzMjAwMkQwNTQ4QjEwMTAwNkM4QkEwMEEzQgorOjEwQjNFMDAwRTQ2RDAwMDAyNDAwMDA0MDhGOTgwMTAwNkM4QjAwNDA0OQorOjEwQjNGMDAwODFCMjAwMDAzNzAwMkQwNTQ4QjEwMTAwMDQwMDAwRjNDMAorOjEwQjQwMDAwODJGNDAxMDBBRThBQTA0MjgzNkMwMDAwQUU4QTAwNTQzMAorOjEwQjQxMDAwODFCMDAwMDAwMDAwMDBGMjBFQjAwMTAwMDMwMDAwMDc0MAorOjEwQjQyMDAwMUFGNDAxMDAwMEI1MDAwRDQyQzkwMTAwMDcwMDAwMDczMQorOjEwQjQzMDAwMTY4ODAxMDA4OTg2MjIwQkU2N0QwMDAwMEEwMDAwNDA4NAorOjEwQjQ0MDAwODc5ODAxMDA1NTk5MDA0MDgxMzIwMTAwMDAwMDAwNDBCQQorOjEwQjQ1MDAwMEZCMDAxMDAwNThBMDA1QzFGOTAwMDAwOUI4NjIyNTBGRgorOjEwQjQ2MDAwRkQ3RjAwMDA5Njg2QTI1NEZEN0YwMDAwOEU4NjIyNTU0NworOjEwQjQ3MDAwRkQ3RjAwMDA4MjAwMDA0MDg3OTgwMTAwODY4NjAwNDAyMgorOjEwQjQ4MDAwODFCMjAwMDA4Njg2MjI1M0ZEN0YwMDAwMTQ4MDAwMDNGNQorOjEwQjQ5MDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMTAwMDAwNEIwRQorOjEwQjRBMDAwODBGNDAxMDAwQ0JDMDA0MDg3OTgwMTAwOTY4NjIyNDM3RQorOjEwQjRCMDAwODA2QzAwMDBGRkZGMDA0QjgwODgwMTAwODY4NkEyNDM1RAorOjEwQjRDMDAwODA2QzAwMDA3Qzk2MDA0MDQ3OTkwMTAwOTc4NjQzNDBCRAorOjEwQjREMDAwODEzMjAwMDA5QTg2QTBGMDMwNkYwMDAwOEM4NjFCNDBGRAorOjEwQjRFMDAwODFCMjAwMDAwMDAwMUI0MTMxQzMwMTAwQTU5NTAwNDA1RQorOjEwQjRGMDAwMjUzMDAxMDA5Rjg2OUMwRjgwMzIwMDAwMUI4NDAwODg0RAorOjEwQjUwMDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwMTQ4MDAwMDM0QQorOjEwQjUxMDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMDAwMDJGMDVCNAorOjEwQjUyMDAwNDhCMTAxMDAxMDAwMDAwNzE4RTQwMTAwMDAwODAwMENGOQorOjEwQjUzMDAwRTA5OTAxMDBFNjk5MDAwNzk2MzAwMTAwMDBCNTAwMEQ4MgorOjEwQjU0MDAwNDZDOTAxMDBBNjg2MzA0MDgxMzIwMDAwMDAwMDAwMEI5MQorOjEwQjU1MDAwRTY5MTAxMDAwMDAyMDBBMTQ2QzkwMTAwMDAwMDAwMEJCNQorOjEwQjU2MDAwRTY5MTAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDEwNDBFMgorOjEwQjU3MDAwRTFCMTAxMDBBRThBMDA0MDgxQjAwMDAwMDAwMDAwRkI5NAorOjEwQjU4MDAwMjhCMDAxMDAwMDAwMDBGQjg2QjAwMTAwMDAwMDAwRjhCOAorOjEwQjU5MDAwMTRCMDAxMDBCNzg2MjI0NjIzN0MwMDAwQjM4NjIyNDAwNworOjEwQjVBMDAwODc3QzAwMDAwMDAwMDA0ODFGOTAwMTAwQjU4NjIyNDEwMgorOjEwQjVCMDAwODc3QzAwMDAwMDAwMDA0NzFGOTAwMTAwQjc4NjIyNDJGMAorOjEwQjVDMDAwODc3QzAwMDAwMDAwMDA0NTFGOTAwMTAwQjc4NjQ3MUJFNAorOjEwQjVEMDAwMkMzMDAwMDAwMDAwMDBBMDEzQjAwMTAwMDAwMDFGNDE0QgorOjEwQjVFMDAwNDFDMzAxMDBFNjg2MjM5MjE1NkMwMDAwRTY4NkEyNDU2MQorOjEwQjVGMDAwMUY3QzAwMDBFQTg2MjI0QkZEN0YwMDAwMTcwMDAwRDA3MAorOjEwQjYwMDAwQTJDOTAxMDAwMDAwMDA0MDI3QjAwMTAwMDIwMDAwMEFBQQorOjEwQjYxMDAwMjRDODAxMDBERDk1MDA0MDBGMzAwMTAwRTQ4NjIyMDhCNworOjEwQjYyMDAwNDAzMDAwMDAwMDAwMDA0MUEzQzEwMTAwRjAwNzAwMTJGQgorOjEwQjYzMDAwMjRDQzAxMDBDMDg2QUE0MTI3NDAwMDAwMDEwMDAwMTM2RAorOjEwQjY0MDAwODBDQzAxMDBFMDg2MjY0MDIzMzAwMDAwMDAwMDAwNDA0RQorOjEwQjY1MDAwODNCMDAxMDA2MDAwMDAwMzg0QzgwMTAwMTAwMDAwMTBFNgorOjEwQjY2MDAwNDhDRDAxMDAxNzAwMDBEMEEyQzkwMTAwQ0Q4NkEyNDAzQworOjEwQjY3MDAwODM2QzAwMDBEOTg2MDA0MTgzQjAwMDAwMDA4MDAwNDI0NgorOjEwQjY4MDAwNDQ5OTAxMDAwMDAwNjgyMTM4OTYwMTAwMDAwMDJFNTAwNgorOjEwQjY5MDAwNDlDMTAxMDBEMjg2QTI0NDIzNkMwMDAwMzAwMDAwMDM5RgorOjEwQjZBMDAwNDhDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMEMwMDAwMjA3NQorOjEwQjZCMDAwRjBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQzNQorOjEwQjZDMDAwNjJERDAxMDBENTg2QTg0MkUwMzEwMDAwMDAwMDAwNDRBMAorOjEwQjZEMDAwODVDMDAxMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDFCRQorOjEwQjZFMDAwQTNDMTAxMDBDQjg2QTI0MTgxNTAwMDAwRTA4NjIyNDAyOAorOjEwQjZGMDAwMjM2QzAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTAxNAorOjEwQjcwMDAwNjJERDAxMDBERDg2QTg0MDgxMzIwMDAwMUI4NDAwODhENAorOjEwQjcxMDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwRUUwNzAwNDAyQgorOjEwQjcyMDAwMjU5ODAxMDAxNzAwMDBEMDJBQzgwMTAwRjM4NjAwMTdGMQorOjEwQjczMDAwMTBCMDAwMDBDMDk3MDA0MDgxMzIwMTAwRUE4NjAwNDA0RQorOjEwQjc0MDAwODFCMjAwMDBERDk1MDA5MjI1MzAwMTAwMDAwMDAwNDAyQworOjEwQjc1MDAwMzFCMDAxMDBFQTg2MjIwODJFMzAwMDAwRjM4NjAwNDE1NQorOjEwQjc2MDAwMjdCMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDA2MQorOjEwQjc3MDAwODc5ODAxMDA1NTk5MDAwQThDMzAwMTAwMDAwMDAwNDBCNAorOjEwQjc4MDAwMEZCMDAxMDAwMDAwMDA1QzFGOTAwMTAwRjI4NjIyOUZCNAorOjEwQjc5MDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwNkI4NDAwNDA4OAorOjEwQjdBMDAwODFCMjAwMDAwNThBMDA0MTNGQzMwMDAwMDAwMDAwNDA1NAorOjEwQjdCMDAwMEZCMDAxMDAyODAwMDAwMTgwQ0UwMTAwMDc4NzJBNDA1OQorOjEwQjdDMDAwODEzMDAwMDAwMDgwMDAxMDQ0QzkwMTAwNDAwMDAwNDBBQQorOjEwQjdEMDAwODE5ODAxMDBGQzg2QTI0ODFGN0MwMDAwRkM4NkEyNDdERAorOjEwQjdFMDAwMUY3QzAwMDBGQzg2QTMwNzAzNkMwMDAwODAwMDAwNDA2MworOjEwQjdGMDAwODE5ODAxMDBGRjg2QTM0MDAyNkMwMDAwMjgwMDAwMDEzMAorOjEwQjgwMDAwRjBDRDAxMDAwMTg3MDA0MDBGQjAwMDAwMjgwMDAwNDA4QgorOjEwQjgxMDAwRjBDRDAxMDAwNDAwMDA0MDBFQ0MwMTAwMjgwMDAwMDMyMAorOjEwQjgyMDAwRjBDOTAxMDAyODAwMDAwMEYwQzkwMTAwMDAwMDAwMTY2NgorOjEwQjgzMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTBFQworOjEwQjg0MDAwNjJERDAxMDAwNTg3QTg1QzFGMTAwMDAwMDAwMDAwNDBCOQorOjEwQjg1MDAwNDM5OTAxMDAwMDAwMDBGMDA4QjAwMTAwQTAwMTJENDA1NAorOjEwQjg2MDAwMDBDMDAxMDBFRDg4MjIwRjQyMDUwMDAwMTg4NzlDMEZFMAorOjEwQjg3MDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA4QQorOjEwQjg4MDAwNDJDOTAxMDAxMzg3MjI0MEUzNkQwMDAwMDAwMDAwNDcxOQorOjEwQjg5MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMTA4N0E4NDA4NgorOjEwQjhBMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMTg4NzIyMDcyQQorOjEwQjhCMDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDdEOAorOjEwQjhDMDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUYxNAorOjEwQjhEMDAwRTE5MTAxMDBENzg3QTI0NTFGN0MwMDAwMTAwMDAwMDMwMgorOjEwQjhFMDAwNDhDOTAxMDAwMDAwMkQ1NDI5QzAwMTAwMDAwMDAwRjhFMworOjEwQjhGMDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhEQQorOjEwQjkwMDAwMEVCMDAxMDA0MjAwMDAwMzBBQzgwMTAwMEMwMDAwQTRCMAorOjEwQjkxMDAwMENDODAxMDAwMDAwMDA0MDE3QjAwMTAwMDAwMDAwMTQzNgorOjEwQjkyMDAwMDJCMDAxMDAwMDAwMDAxNDI0RDAwMTAwMDAwMDAwMTQ0NworOjEwQjkzMDAwMTBDMDAxMDAxMjAwMDAwODEwQzgwMTAwMDAwMDAwNDAwMworOjEwQjk0MDAwMjNCMDAxMDBGRTdGMDAwNTQ0QzkwMTAwMjk4NzIwOTQyRgorOjEwQjk1MDAwMTU2QzAwMDAyQTg3MDA5NEU1QjEwMDAwMDAwMDAwMEE4MQorOjEwQjk2MDAwRTRCMTAxMDA0Mzg3MjIwMTgwMzIwMDAwMDAwMDNDNDQyMgorOjEwQjk3MDAwMjNFMDAxMDAwMDAwMkVBNDgwQjAwMTAwMDAwMDAwMTBCMAorOjEwQjk4MDAwNDhDMTAxMDAzMDg3QTMwNzAyNkMwMDAwMzE4NzY4MDFCRAorOjEwQjk5MDAwMUFCMDAwMDAwMDAwNjgwNzFBQjAwMTAwMDAwMDAwMEQ5NgorOjEwQjlBMDAwMDJEMDAxMDAwMDAwMDAwNUYwQjEwMTAwMDAwMDAwMEMxMQorOjEwQjlCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMEQ0NAorOjEwQjlDMDAwMEFDMDAxMDAzRDg3MjI0MDAzNkMwMDAwM0Q4NzIyNDJFRgorOjEwQjlEMDAwMjM2QzAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDc2QworOjEwQjlFMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNjU4NzI4NDA2QworOjEwQjlGMDAwODEzMjAwMDAzQTg3MDA0MDgxQjIwMDAwMDAwMDAwMTA1MAorOjEwQkEwMDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDA1QgorOjEwQkExMDAwNjJCMTAxMDAzRjg3QTg0MDIzMzAwMDAwMUI4NDAwODhFQQorOjEwQkEyMDAwMUNCMDAwMDA2NTg3MDA0MDgxQjIwMDAwMDAwMDNDNDQ2QgorOjEwQkEzMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTBFOQorOjEwQkE0MDAwNDhDMTAxMDA0ODg3QTMxMjBFNkMwMDAwNDk4NzY4MDdBRgorOjEwQkE1MDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwNEM4NzgwMDg3QworOjEwQkE2MDAwRjAzMTAwMDAwMTAwMDAxMTk4QzgwMTAwMDAwMDAwNENGNgorOjEwQkE3MDAwMUU5MDAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI2NworOjEwQkE4MDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDY4NworOjEwQkE5MDAwNjFCMTAxMDAwMTFGMDA0MzYyREQwMTAwNTA4N0E4NUMxNQorOjEwQkFBMDAwMUYxMDAwMDA4Mzg3MjIwRDE0NkMwMDAwNTY4NzIyMERBMgorOjEwQkFCMDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwNUE4NzAwMEQyQQorOjEwQkFDMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTU0MAorOjEwQkFEMDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDBEMgorOjEwQkFFMDAwMjU5ODAxMDA1Qzg3MjI0MjIzNkMwMDAwNjU4NzAwNDE5NQorOjEwQkFGMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTBCQQorOjEwQkIwMDAwNjJERDAxMDA1RDg3QTg1QzFGMDAwMDAwMUI4NDAwODhDNworOjEwQkIxMDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwNjM4NzIyNDdGQworOjEwQkIyMDAwMUY3QzAwMDAxMTk2MDA0MzIzMzAwMTAwMEUwMDAwMEYxRgorOjEwQkIzMDAwMUU4QzAxMDAwMDAwMDA0MDIzQjAwMTAwODM4NzIyMEQwRAorOjEwQkI0MDAwMTQ1MDAwMDA4Mjg3QTIwRDBFNTAwMDAwNzE4NzIyNDYxQgorOjEwQkI1MDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTBBNAorOjEwQkI2MDAwNDJDOTAxMDA2Rjg3MjI0MEUzNkQwMDAwMDAwMDAwNDdEQQorOjEwQkI3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNkM4N0E4NDA0NworOjEwQkI4MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA4MDAwMDM2QworOjEwQkI5MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDZDMAorOjEwQkJBMDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjhFMgorOjEwQkJCMDAwMDRCMDAxMDA3Njg3MUZGMDBFMzAwMDAwMkE4NzAwNEM4OQorOjEwQkJDMDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwMkE4NzIzMDdCMAorOjEwQkJEMDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDAyRgorOjEwQkJFMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDAyNQorOjEwQkJGMDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDBDNworOjEwQkMwMDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTRDRAorOjEwQkMxMDAwNjJERDAxMDA3Rjg3QTg0NjFGMTAwMDAwMkE4NzAwMDMwRAorOjEwQkMyMDAwMENCMDAwMDAyQTg3MDAwRDE4QzAwMDAwMDQwMDJFMTQ3QworOjEwQkMzMDAwMEFEMDAxMDAxMjAwMDAwNTQ4Q0QwMTAwRkU3RjAwMDU3QQorOjEwQkM0MDAwNDJDOTAxMDAwQzAwMkFGMkUwQjEwMTAwODk4NzIyNDBCQworOjEwQkM1MDAwMzE2QzAwMDAwMDAwNjAxODM4OTYwMTAwMUUwMDAwNDBBMgorOjEwQkM2MDAwNDM5OTAxMDAwMDgxMDBGNjgwQ0UwMTAwOEQ4N0E2NDAzNworOjEwQkM3MDAwODEzMjAwMDAwMDAwMDA0NDQzQzEwMTAwOEY4NzIyMEI4NQorOjEwQkM4MDAwRUQ2RDAwMDAwODAwMDBBMTQyQzkwMTAwMDIwMDAwQTEwMgorOjEwQkM5MDAwNDZDOTAxMDAwRjAwMDBGQTk0ODgwMTAwMDIwMDAwNEEyMgorOjEwQkNBMDAwODZFNDAxMDAwMDAwMDBGNjBFQjAwMTAwOTc4NzIyNDdFRAorOjEwQkNCMDAwMUY3QzAwMDAwNDAwMUY0MzBFNTAwMDAwOTc4N0EwNDYyMQorOjEwQkNDMDAwMEY0MDAwMDAwMDAwMDA0MTBGQzAwMTAwOUI4NzIyNDg4OAorOjEwQkNEMDAwMUY3QzAwMDAwMDAwMDA0MDkxQjAwMTAwMDQwMDBGQTI5MgorOjEwQkNFMDAwNDIzMTAwMDA5RTg3MDA0MDg5QjAwMDAwMEMwMDAwQTI5NQorOjEwQkNGMDAwNDJDOTAxMDAwMDAwMDA0Mzg5QjAwMTAwMDAwMDAwNDM3OAorOjEwQkQwMDAwOTVEMDAxMDAwMDAwMDBGQzgyQjAwMTAwQTE4N0EwNDE5NQorOjEwQkQxMDAwOTA0MDAwMDAwMDAwMDA0MTkxQzAwMTAwQTY4NzIyNDcyQQorOjEwQkQyMDAwMUY3QzAwMDBBNjg3QTA0Mzg5NkMwMDAwQTY4NzIwNDVFMQorOjEwQkQzMDAwODk2QzAwMDBBNjg3QTA0MTBFNDAwMDAwMDAwMDAwNDE3MQorOjEwQkQ0MDAwMEZDMDAxMDAwMDAwMDA0MTg5QzAwMTAwOUU4N0EyNDE5MAorOjEwQkQ1MDAwOTU1MDAwMDBBRjg3MjI0ODFGN0MwMDAwMTAwMDAwNDg2QgorOjEwQkQ2MDAwOTJGNDAxMDBGRkZGMDA0ODkwODgwMTAwQUQ4NzkwNDhFMQorOjEwQkQ3MDAwOTI0MDAwMDAwMDAwMDA0MTkzQzAwMTAwMEEwMDAwQTJCMAorOjEwQkQ4MDAwNDRDOTAxMDAwMDAwNjYyMDkzQTQwMTAwMzA4MDAwMTAyNworOjEwQkQ5MDAwNDRDOTAxMDAxMjAwMDAxNEYwQzkwMTAwMDAwMDAwMTc5RQorOjEwQkRBMDAwRjBCMTAxMDAxMjAwMDAwNUUwQ0QwMTAwMzAwMDAwMTBFQworOjEwQkRCMDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDA4MworOjEwQkRDMDAwNjJERDAxMDBCNTg3QTg0MDgxMzIwMDAwQzI4NzIyNUM5NQorOjEwQkREMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTAwNworOjEwQkRFMDAwNDhDMTAxMDBCRjg3MjI0MEUzNkQwMDAwMDAwMDAwNDYwQgorOjEwQkRGMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQkM4N0E4NDA3NQorOjEwQkUwMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwQzI4Nzg3NUM2MAorOjEwQkUxMDAwMUYwMDAwMDAwMDAwMDAxMDQ4QjEwMTAwMTE5NjAwNDExMQorOjEwQkUyMDAwMjM0MDAxMDBDNDg3QTI0NzFGN0MwMDAwNTg4OTAwMTdFNworOjEwQkUzMDAwMTBCMDAwMDAwMDAwMkYwMzQ4QjEwMTAwQzc4N0EwMDcyMQorOjEwQkU0MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDAwMEI3OAorOjEwQkU1MDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwQ0I4NzkwRjIyMAorOjEwQkU2MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBERAorOjEwQkU3MDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwNTA5RgorOjEwQkU4MDAwMkJFMDAxMDAwMDAwMDBGMjJBOTQwMTAwMzA4MDAwMTAzNQorOjEwQkU5MDAwNDJDOTAxMDBENTg3MjI0MEUzNkQwMDAwMDAwMDAwNDQ0NAorOjEwQkVBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDI4N0E4NDBBRQorOjEwQkVCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDA4MDAwMTc0NQorOjEwQkVDMDAwMTBEQzAxMDA1ODg5MDA0MDgxQjIwMDAwQTU5NTAwNDBCNworOjEwQkVEMDAwODEzMjAxMDBEQjg3MjI1QzFGN0MwMDAwMUI4NDAwODgwQworOjEwQkVFMDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwMDA4MDAwMDU3MworOjEwQkVGMDAwNDRDOTAxMDAwMDAwMDA0MEUxQjEwMTAwMDQwMDJEMDMyRAorOjEwQkYwMDAwNDhCMTAxMDAwMDAwMDBGMDNDQjAwMTAwMjgwMDAwMTQxRQorOjEwQkYxMDAwMDJDODAxMDAwMDAwMDAwMTM0QjAwMTAwMDAwMDJEMDUzRQorOjEwQkYyMDAwMzJCMDAxMDAyMjAwMDAwNTBBQzgwMTAwMTAwMDAwMDMyMQorOjEwQkYzMDAwNDhDOTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjgzNgorOjEwQkY0MDAwMDRCMDAxMDAwMDAwMDBGODBFQjAwMTAwMEMwMDAwQTRENQorOjEwQkY1MDAwMENDODAxMDAwMDAwMDA0MDE3QjAwMTAwMDAwMDAwNDBDNAorOjEwQkY2MDAwMjNCMDAxMDAyMTg4MjIwMTgwMzIwMDAwMDAwMDNDNDRGRgorOjEwQkY3MDAwMjNFMDAxMDAwMDAwMkVBNDgwQjAwMTAwMDAwMDAwMTBBQQorOjEwQkY4MDAwNDhDMTAxMDBGMDg3QTMwNzAyNkMwMDAwRjE4NzY4MDEzNworOjEwQkY5MDAwMUFCMDAwMDAwMDAwNjgwNzFBQjAwMTAwMDAwMDAwMEQ5MAorOjEwQkZBMDAwMDJEMDAxMDAwMDAwMDAwNUYwQjEwMTAwMDAwMDAwMEMwQgorOjEwQkZCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMEQzRQorOjEwQkZDMDAwMEFDMDAxMDAwMzg4MjI0MDAzNkMwMDAwRkQ4NzIyNDI2MgorOjEwQkZEMDAwMjM2QzAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDc2NgorOjEwQkZFMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwM0Q4ODI4NDA4RAorOjEwQkZGMDAwODEzMjAwMDBGQTg3MDA0MDgxQjIwMDAwMDAwMDAwMTA4QQorOjEwQzAwMDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDA1NQorOjEwQzAxMDAwNjJCMTAxMDBGRjg3QTg0MDIzMzAwMDAwMUI4NDAwODgyNAorOjEwQzAyMDAwMUNCMDAwMDAzRDg4MDA0MDgxQjIwMDAwMDAwMDAwMTBGQworOjEwQzAzMDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDAyNQorOjEwQzA0MDAwNjJCMTAxMDAwNTg4QTg0MDIzMzAwMDAwMUI4NDAwODhFRAorOjEwQzA1MDAwMUNCMDAwMDAyMjAwMDAxOTQ4QzkwMTAwMDAwMDJEMTQ4NgorOjEwQzA2MDAwNDhDMTAxMDAwRjAwMDBGMjNBODgwMTAwMDAwMDAwNDJDMAorOjEwQzA3MDAwM0JFMDAxMDAwRTAwMDAxNDAyQzgwMTAwMDAwMDAwMUQ5QQorOjEwQzA4MDAwMDJDMDAxMDAxMTg4MjMxQTAyNTAwMDAwMDAwMDAwNDY3RgorOjEwQzA5MDAwMDNDMDAxMDAzRDg4MDAwMTM0QzAwMDAwMEMwMDJEMURDQworOjEwQzBBMDAwNDhDMTAxMDBGMDAwMDBGMjMwODgwMTAwMDAwMDAwNDJBOQorOjEwQzBCMDAwMzFGMDAxMDAwMDAwMDAxNDAyQjAwMTAwMDAwMDAwMUQ3QQorOjEwQzBDMDAwMDJDMDAxMDAwMDAwMDAxODAyQzAwMTAwMTk4ODIyMUFGNQorOjEwQzBEMDAwMDI1MDAwMDAzRDg4MDAwMTM0QzAwMDAwMjIwMDAwMTkxOQorOjEwQzBFMDAwNDhDOTAxMDAwMjAwMkQxNDQ4QzEwMTAwMDAwMDAwRjZGQgorOjEwQzBGMDAwMTRCMDAxMDAwMDAwMDAxRDE0RDAwMTAwMDAwMDAwMTg2MQorOjEwQzEwMDAwMTREMDAxMDAwMDAwMDAxRTI0QjAwMTAwMTIwMDAwMTcyRQorOjEwQzExMDAwMTBDODAxMDAzRDg4MDAxQTEwQzAwMDAwMDAwMDNDNDQxNworOjEwQzEyMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTBGMgorOjEwQzEzMDAwNDhDMTAxMDAyNjg4QTMxMjBFNkMwMDAwMjc4ODY4MDdGQQorOjEwQzE0MDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMkE4ODgwMDhBNgorOjEwQzE1MDAwRjAzMTAwMDAwMTAwMDAxMTk4QzgwMTAwMDAwMDAwNENGRgorOjEwQzE2MDAwMUU5MDAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI3MAorOjEwQzE3MDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDY5MAorOjEwQzE4MDAwNjFCMTAxMDAwMTFGMDA0MzYyREQwMTAwMkU4OEE4NUMzRgorOjEwQzE5MDAwMUYxMDAwMDA1QTg4MjIwRDE0NTAwMDAwNUE4ODIyMERFQQorOjEwQzFBMDAwMjQ1MDAwMDAwMDAwMDAwRDEwQzAwMTAwMzU4ODIyNDIxQworOjEwQzFCMDAwMjM2QzAwMDAzRDg4MDA0MTIzQzAwMDAwMDAwMDAwNDZDMQorOjEwQzFDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMzY4OEE4NUMwQQorOjEwQzFEMDAwMUYwMDAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMTAzRAorOjEwQzFFMDAwNDhCMTAxMDAxMTk2MDA0MzIzMzAwMTAwMEUwMDAwMEZGQQorOjEwQzFGMDAwMUU4QzAxMDAwMDAwMDA0MDIzQjAwMTAwNTk4OEEyMERGMAorOjEwQzIwMDAwMEU1MDAwMDA0ODg4MjI0NjFGN0MwMDAwMDAwMDAwNDZCNworOjEwQzIxMDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwNDY4ODIyNDA4MgorOjEwQzIyMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTAxNAorOjEwQzIzMDAwNjJERDAxMDA0Mzg4QTg0MDgxMzIwMDAwMUI4NDAwODgzMQorOjEwQzI0MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY0MAorOjEwQzI1MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg0NgorOjEwQzI2MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwNEQ4ODFGRjA3NAorOjEwQzI3MDAwMEUzMDAwMDBFQTg3MDA0QzBEQzAwMDAwMDAwMDJFNUY2OQorOjEwQzI4MDAwMEY4MDAxMDBFQTg3MjMwNzE0NkMwMDAwMzAwMDAwMTBDMworOjEwQzI5MDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDM5QQorOjEwQzJBMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTYzNAorOjEwQzJCMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDdBOAorOjEwQzJDMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNTY4OEE4NDYwQgorOjEwQzJEMDAwMUYxMDAwMDBFQTg3MDAwMzBDQjAwMDAwRUE4NzAwMEQ4MQorOjEwQzJFMDAwMThDMDAwMDA3Nzg4QTI0NDFGN0MwMDAwMDAwMDAwMTlERAorOjEwQzJGMDAwMEFCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMEEwMDJEMTRGRgorOjEwQzMwMDAwNDhDMTAxMDAwMjAwMjA0MEU1QjEwMTAwMDQwMDIwNDBDNgorOjEwQzMxMDAwRTVCMTAxMDAwRDAwMkQxRDQ4QzEwMTAwMDkwMDAwRjMyOQorOjEwQzMyMDAwMzg4ODAxMDAwRDAwMjA1MEU3QjEwMTAwMDQwMDJENDBDNQorOjEwQzMzMDAwM0ZCMDAxMDAwMDAwMDBGNDMyQjAwMTAwMDQwMDIwNDBEMgorOjEwQzM0MDAwRTFCMTAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDJEMTRFMAorOjEwQzM1MDAwNDhDMTAxMDAwMjAwMDAxRDk0RjQwMTAwMDAwMDAwNDBFQgorOjEwQzM2MDAwOTFCMDAxMDA2Qzg4QTBGQzkwNDAwMDAwMDAwMDAwNDFFQQorOjEwQzM3MDAwOTFDMDAxMDA2QTg4QTI0MTk1NTAwMDAwMDQ4MDAwMDUyOAorOjEwQzM4MDAwNDRDOTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwMTg5RAorOjEwQzM5MDAwNDhDMTAxMDAwMjAwMDAxODk0RjQwMTAwMDAwMDJEMThBQgorOjEwQzNBMDAwOTBCMDAxMDA3NDg4QTBGQzkwNDAwMDAwMDAwMDAwNDFBMworOjEwQzNCMDAwOTFDMDAxMDA3Mjg4QTI0MTk1NTAwMDAwMDAwMDAwNDgyMQorOjEwQzNDMDAwRTBCMTAxMDAxMDAwMjA0MEU1QjEwMTAwMjIwMDAwMDVBRAorOjEwQzNEMDAwNDhDOTAxMDAwMDAwMDAxNDQ4QzEwMTAwMDQ4MDAwMDVBNAorOjEwQzNFMDAwNDJDOTAxMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjAyOAorOjEwQzNGMDAwMTZDMDAxMDA3Qzg4NDIzMDNEMDcwMDAwMDAwMDAwOUUwRQorOjEwQzQwMDAwODVCMDAxMDAwMDAwMUE0MTNEQzMwMTAwMDQwMDIwNDIzNAorOjEwQzQxMDAwRUNCMTAxMDAwMDAwMDAxRTgyQjAwMTAwMDIwMDJFMURFMAorOjEwQzQyMDAwODJDMDAxMDAwMDAwNjYxODgyQzAwMTAwMDAwMDAwNDJDNgorOjEwQzQzMDAwODBDMDAxMDA4Njg4QTA0MTgwNDQwMDAwMDAwMDAwNDFDNworOjEwQzQ0MDAwODFDMDAxMDAxMDAwMDA0MDkyRjQwMTAwMEEwMDJFMzA2QgorOjEwQzQ1MDAwODE4NDAxMDA4QTg4OTA0MDkyNDAwMDAwMDAwMDAwNDFFMQorOjEwQzQ2MDAwOTNDMDAxMDAwMDAwNjYyMDkzQTQwMTAwMDAwMDAwMUQ5RAorOjEwQzQ3MDAwNDhDMTAxMDAwNDAwMjAxOUU4QjEwMTAwMDAwMDAwMUVCRAorOjEwQzQ4MDAwMTZDMDAxMDA5MDg4QTAxOTE2NDQwMDAwMDAwMDAwNDE2OQorOjEwQzQ5MDAwMTdDMDAxMDAwRDAwMkYxRTMyQzAwMTAwOTU4OEEyNDA3OAorOjEwQzRBMDAwMTU2QzAwMDA5NDg4QTAxQzE2NDAwMDAwMDAwMDAwNDE5QworOjEwQzRCMDAwMTdDMDAxMDAwMDAwNjNGMzM4OTQwMTAwMTAwMDAwMDU2QworOjEwQzRDMDAwNDhDOTAxMDAwNDAwMkUxRTk4QjAwMTAwMDAwMDYwMUE0NworOjEwQzREMDAwOThDMDAxMDAwQzAwMjA0MEUxQjEwMTAwQTM4ODIyNDY3MQorOjEwQzRFMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTAwQgorOjEwQzRGMDAwNDJDOTAxMDBBMTg4MjI0MEUzNkQwMDAwMDAwMDAwNDcwRQorOjEwQzUwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOUU4OEE4NDA3QQorOjEwQzUxMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA4MDAwMDNEMgorOjEwQzUyMDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMzA4MDAwMTA5OQorOjEwQzUzMDAwNDRDOTAxMDAxMjAwMDAxQUYwQzkwMTAwMDAwMDAwMTdGMAorOjEwQzU0MDAwRjBCMTAxMDAxMDAwMDAwNUUwQzkwMTAwMzAwMDAwMTA0QQorOjEwQzU1MDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDBEQgorOjEwQzU2MDAwNjJERDAxMDBBOTg4QTg0MDgxMzIwMDAwQjc4ODIyNUMwMgorOjEwQzU3MDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTA1RgorOjEwQzU4MDAwNDhDMTAxMDBCMzg4MjI0MEUzNkQwMDAwMDAwMDAwNDY2RQorOjEwQzU5MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQjA4OEE4NDBEOAorOjEwQzVBMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwNUM4OQorOjEwQzVCMDAwMUY4MDAxMDAwMDAwMDAxMDQ4QjEwMTAwMTE5NjAwNDFFOQorOjEwQzVDMDAwMjM0MDAxMDAwRTAwMDAwRjFFOEMwMTAwMjAwMDJGMDVFQgorOjEwQzVEMDAwNDhCMTAxMDAwMDAwMDAwQkU0QjEwMTAwMDAwMDAwNTA3MAorOjEwQzVFMDAwMTdGMDAxMDBCQzg4OTBGMjE2NDAwMDAwMDAwMDAwNDFFNgorOjEwQzVGMDAwMTdDMDAxMDAwMDAwNjYyMDE3QTQwMTAwMTAwMDAwMTRGRAorOjEwQzYwMDAwMkFDODAxMDAwMDAwMDAxRDJBQzAwMTAwMDAwMDAwNTBERgorOjEwQzYxMDAwMkJFMDAxMDAwMDAwMDBGMjJBOTQwMTAwMzA4MDAwMTA5RAorOjEwQzYyMDAwNDJDOTAxMDBDNzg4MjI0MEUzNkQwMDAwMDAwMDAwNDRCOQorOjEwQzYzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQzQ4OEE4NDAyMworOjEwQzY0MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDA4MDAwMTdBRAorOjEwQzY1MDAwMTBEQzAxMDBFNDg4MjI0MDE1NkMwMDAwQ0Y4OEEyNDQ2MQorOjEwQzY2MDAwMUY3QzAwMDAwMDAwMDA0NDFGOTAwMTAwQ0U4ODIyOUYyNAorOjEwQzY3MDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwNkI4NDAwNDA5OQorOjEwQzY4MDAwODFCMjAwMDAwMDAwMDA0MTNGQzMwMTAwNjY5OTAwNDBGNAorOjEwQzY5MDAwODEzMjAxMDBEMjg4QTI0MTg3N0MwMDAwMDAwMDAwMUU4OAorOjEwQzZBMDAwM0VDMDAxMDBFNDg4MjI0MDE1NkMwMDAwRDU4ODIwMUVBMQorOjEwQzZCMDAwMTQ2QzAwMDAwMDAwMDAwQTNDQjAwMTAwREQ5NTAwMUU3MworOjEwQzZDMDAwMjQzMDAxMDBEQTg4MjIwODJFMzAwMDAwMDAwMDAwNTJEOQorOjEwQzZEMDAwMTFDMDAxMDAwMDAwMDAxQTEwQzAwMTAwM0Q4ODAwNDA5OAorOjEwQzZFMDAwMTdCMDAwMDA2Qjg0MDA4ODFDQjAwMDAwREQ5NTAwNDA4RQorOjEwQzZGMDAwODEzMjAxMDBENzg4QTIwODJFMzAwMDAwODA4MDAwQTY3OQorOjEwQzcwMDAwMDRCMDAxMDAwNjAwMDA0MDg3OTgwMTAwMDA4MDAwMDM4QgorOjEwQzcxMDAwNDQ5OTAxMDAwNDAwMjIwNEUwMzEwMDAwNTU5OTAwMUZGMworOjEwQzcyMDAwOEMzMDAxMDAwMDAwMDA0MDBGQjAwMTAwMDU4QTAwNUM2MQorOjEwQzczMDAwMUY5MDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDQwMDIyMDRCRgorOjEwQzc0MDAwRTAzMTAwMDA2Njk5MDA0MDgxMzIwMTAwRTk4OEEyNDE5MQorOjEwQzc1MDAwODc3QzAwMDBFQTg4MDAxRTNFQzAwMDAwMDAwMDAwMUYyOQorOjEwQzc2MDAwOENCMDAxMDAwMDAwMDA0MDA1QjAwMTAwNTU5OTAwNDA2OAorOjEwQzc3MDAwMEYzMDAxMDAwNThBMDA1QzFGOTAwMDAwRjU4ODlDMEZCNworOjEwQzc4MDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA2QgorOjEwQzc5MDAwNDJDOTAxMDBGNTg4MjI0MEUzNkQwMDAwMDAwMDAwNDcxNworOjEwQzdBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjI4OEE4NDA4NAorOjEwQzdCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwRkE4ODIyMDcyOAorOjEwQzdDMDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDdCOQorOjEwQzdEMDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZGNQorOjEwQzdFMDAwRTE5MTAxMDAwNDAwMkUwMzQ4QjEwMTAwRkQ4ODIwOTQ2RQorOjEwQzdGMDAwMTU2QzAwMDBGRTg4MDA5NEUxQjEwMDAwMDAwMDAwMEEwMgorOjEwQzgwMDAwRTBCMTAxMDAwMTg5MjI0MDMxNkMwMDAwMEMwMDAwNDBDMQorOjEwQzgxMDAwNDU5OTAxMDAwMDAwNjAxODM4OTYwMTAwMDAwMDJFMTBCNAorOjEwQzgyMDAwNDhCMTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDgxMworOjEwQzgzMDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDQ3RAorOjEwQzg0MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwMDY4OUE4NDAzQQorOjEwQzg1MDAwMjMzMDAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDJENTIxMworOjEwQzg2MDAwMTFDMDAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjhEOQorOjEwQzg3MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjg0QQorOjEwQzg4MDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwMDAwMDNDNDRFNAorOjEwQzg5MDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTA3QgorOjEwQzhBMDAwNDhDMTAxMDAxNDg5QTMxMjBFNkMwMDAwMTU4OTY4MDdBNQorOjEwQzhCMDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMDAwMDAwMTA1OQorOjEwQzhDMDAwODZDMDAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwMEM2QgorOjEwQzhEMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwNDZEQworOjEwQzhFMDAwNjFCMTAxMDAwMTFGMDA0MzYyREQwMTAwMUE4OUE4NUNFQgorOjEwQzhGMDAwMUYxMDAwMDA0Qjg5MjIwRDE0NkMwMDAwMjA4OTIyMERBRQorOjEwQzkwMDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwMjQ4OTAwMERGRgorOjEwQzkxMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTVFMQorOjEwQzkyMDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDA3MworOjEwQzkzMDAwMjU5ODAxMDAyNjg5MjI0MjIzNkMwMDAwMkQ4OTAwNDFBMAorOjEwQzk0MDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA1QgorOjEwQzk1MDAwNjJERDAxMDAyNzg5QTg1QzFGMDAwMDAwMUI4NDAwODg5RAorOjEwQzk2MDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwRDc5NDAwNDM0MworOjEwQzk3MDAwMjMzMDAxMDAwMDAwMDA0MDIzQjAwMTAwMDQwMDIyMEQxQworOjEwQzk4MDAwMTQ1MDAwMDA0QTg5QTIwRDBFNTAwMDAwMzk4OTIyNDYzOQorOjEwQzk5MDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTA1NgorOjEwQzlBMDAwNDJDOTAxMDAzNzg5MjI0MEUzNkQwMDAwMDAwMDAwNDdDMgorOjEwQzlCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMzQ4OUE4NDAyRgorOjEwQzlDMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA4MDAwMDMxRQorOjEwQzlEMDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDY3MgorOjEwQzlFMDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjg5NAorOjEwQzlGMDAwMDRCMDAxMDAzRTg5MUZGMDBFMzAwMDAwMEY4OTAwNEM4QQorOjEwQ0EwMDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwMEY4OTIzMDc3QQorOjEwQ0ExMDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDBFMAorOjEwQ0EyMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDBENgorOjEwQ0EzMDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDA3OAorOjEwQ0E0MDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQ3RgorOjEwQ0E1MDAwNjJERDAxMDA0Nzg5QTg0NjFGMTAwMDAwMEY4OTAwMDMwRQorOjEwQ0E2MDAwMENCMDAwMDAwRjg5MDAwRDE4QzAwMDAwNTQ4OTIyNUMzMgorOjEwQ0E3MDAwMUY3QzAwMDAwMDAwMDA1QzFGODAwMTAwMDAwMDNDNDQ5RgorOjEwQ0E4MDAwMjNFMDAxMDAwMDAwMkQxMDQ4QzEwMTAwNTQ4OTIyNDAxQworOjEwQ0E5MDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA5RAorOjEwQ0FBMDAwNjJERDAxMDA1MTg5QTg0MDgxMzIwMDAwMUI4NDAwODhBQQorOjEwQ0FCMDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwRDc5NDAwNDFGNAorOjEwQ0FDMDAwMjM0MDAxMDAwMDAwMDAxNzEwQjAwMTAwNTg4OTAwNDAwOQorOjEwQ0FEMDAwMkJCMDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDAwMDAwMDQxNgorOjEwQ0FFMDAwRTBCMTAxMDA1RDg5MjI5RjEzNkMwMDAwMDIwMDAwODgwNAorOjEwQ0FGMDAwMUNDQzAxMDA2Qjg0MDA0MDgxQjIwMDAwNjY5OTAwNDFBQgorOjEwQ0IwMDAwM0Y0MzAxMDAwMDAwMDA0MDhEQjAwMTAwMDAwMDAwNDBFNAorOjEwQ0IxMDAwMDVCMDAxMDA1NTk5MDA0MDBGMzAwMTAwMUI4QTAwNUNGMAorOjEwQ0IyMDAwMUY5MDAwMDAxMDAwMDAwMDBFRjQwMTAwMDAwMDAwM0EwOQorOjEwQ0IzMDAwMDE4NDAxMDAwMzAwMDAwNzFBRjQwMTAwMjE5NjAwMDc5OAorOjEwQ0I0MDAwMTYzMDAxMDA2Qzg5MjI0MTgxNkMwMDAwNkE4OTIyNDIwMgorOjEwQ0I1MDAwODE2QzAwMDAxQjg0MDA4ODFDQjAwMDAwNkI4OTIyNUY4MAorOjEwQ0I2MDAwMEY3QzAwMDAwNThBMDA0MDBGQjAwMDAwNzQ4OUEyNUFCMworOjEwQ0I3MDAwMUY3QzAwMDA5Qjk1MDA0MDgxMzIwMTAwNzQ4OTIyMjBCNworOjEwQ0I4MDAwODU2QzAwMDA3MTg5OUMwRjgwMzIwMDAwMUI4NDAwODgzNgorOjEwQ0I5MDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwOUI5ODAwNDJDNgorOjEwQ0JBMDAwNjEzMTAxMDAxQjg0MDA4ODFDQjAwMDAwRTY5OTAwMDc3OQorOjEwQ0JCMDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA5MgorOjEwQ0JDMDAwMThCMDAxMDAwMDAwMDAwMDgwQjAwMTAwQUU4QUEyNUYzMgorOjEwQ0JEMDAwODE2QzAwMDBBODAwMkQ0MzE5ODAwMTAwMzcwMDJERjA2MgorOjEwQ0JFMDAwMjRCMDAxMDAwNDAwMDBGMzhFRjQwMTAwMEYwMDAwRjNGNAorOjEwQ0JGMDAwOTA4ODAxMDA4Mzg5MjI0ODhFNkMwMDAwMzYwMDAwNDAzNgorOjEwQ0MwMDAwNDM5OTAxMDA1ODAwM0Q0M0U3RTEwMTAwODM4OTFGRjA4QgorOjEwQ0MxMDAwMjQ2QzAwMDA4Mjg5MjM0MThGNkMwMDAwQUU4QTAwNDc5QgorOjEwQ0MyMDAwODFCMDAwMDBBRThBMDA0ODgxQjAwMDAwNDAwMDAwNDBBMgorOjEwQ0MzMDAwNDM5OTAxMDBCMDAwMkRGMDE0QjAwMTAwODg4OTIyMEE0OAorOjEwQ0M0MDAwOTA0MDAwMDAzOTk5MDA0MDkxMzAwMTAwQUU4QUEyNDAyNgorOjEwQ0M1MDAwODAzMjAwMDBCMDAwMkQ0NTgxQjAwMTAwOTQ4OTIyRjA5RgorOjEwQ0M2MDAwMkMzMDAwMDBBMzAwMkQzMDgzQjAwMTAwQUMwMDJERjM2OAorOjEwQ0M3MDAwODJFMDAxMDA4RTg5QTM0MTJDNkMwMDAwMDAwMDAwMTZBOAorOjEwQ0M4MDAwODJCMDAxMDA5ODAwMkRGMDgyQzAwMTAwODgwMDJERjBENAorOjEwQ0M5MDAwODJEMDAxMDAwMDAwMDBGMjk4RTgwMTAwQUU4QTIwNEMyQQorOjEwQ0NBMDAwODI2QzAwMDA3QzAwMkQ0MTk4RTgwMTAwQUU4QTIwRjBFMworOjEwQ0NCMDAwOTg2QzAwMDAwNThBMjIwQTgwMzIwMDAwNDAwMjAwMENCNQorOjEwQ0NDMDAwN0U4OTAxMDAwNThBQTY0MDgxMzIwMDAwQUU4QTAwNDlCMworOjEwQ0NEMDAwODFCMDAwMDAyMDAwMDBBNjgwQjAwMTAwOUM4OTIyNDNBMgorOjEwQ0NFMDAwMjE2RjAwMDAxMzgwMDA0MDgwREMwMTAwOUQ4OTAwNDAxRQorOjEwQ0NGMDAwODFCMjAwMDAxQTgwMDA0MDgwREMwMTAwOUQ4OUEyNUVBNAorOjEwQ0QwMDAwMEI3RDAwMDAwMDAwMDA0MDA4QjEwMTAwOUY4OTlGODU1NQorOjEwQ0QxMDAwODAzMjAwMDBBMzg5MDA0MDgxQjIwMDAwNUY4NDIyNDA3RAorOjEwQ0QyMDAwNTc3RDAwMDAwMTAwMDA0MDU3OTkwMTAwQTM4OTQyNDA0RgorOjEwQ0QzMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNDk4NDFBNUI5MworOjEwQ0Q0MDAwNjk5MzAwMDA3QjAwMDA0MDYxOTkwMTAwQTY4OUE4QjFBOQorOjEwQ0Q1MDAwODAzMDAwMDBDRjg5MUQ0MDgwMzIwMDAwQzA4OTIyNDAxMQorOjEwQ0Q2MDAwQUY2RjAwMDBDMDg5MjI1QjgxN0MwMDAwMDQwMDIyNUQ1RgorOjEwQ0Q3MDAwNzM3RDAwMDA3RDAwMDA0MDYxOTkwMTAwQUM4OUE4QjE3RAorOjEwQ0Q4MDAwOTQzMDAwMDAwMDAwMDA1RjYxQjEwMTAwMDAwMDAwNEEyMworOjEwQ0Q5MDAwNjJCMTAxMDBBRjg5QTg0MDgxMzIwMDAwQjE4OTQzNDBFRgorOjEwQ0RBMDAwODEzMjAwMDBCRjg5MjI1NzczN0QwMDAwNzcwMDAwNDA2OAorOjEwQ0RCMDAwNjE5OTAxMDBCMzg5QThCMTk0MzAwMDAwNzcwMDAwNDA2OAorOjEwQ0RDMDAwNjE5OTAxMDBCNTg5QThCMTk2MzAwMDAwMDAwMDAwNDhDMworOjEwQ0REMDAwNjFCMTAxMDAwMDAwMDA0QTYyQjEwMTAwQjg4OUE4NEFBRgorOjEwQ0RFMDAwODAzMzAwMDBCRDg5MjI1Rjk1N0MwMDAwMDAwMDAwNEI2RAorOjEwQ0RGMDAwNjJCMTAxMDBCQjg5QTg0QkFDMzMwMDAwMDAwMDFCQTU0OQorOjEwQ0UwMDAwODJCMzAxMDBDMDg5MDBCRTgzQzMwMDAwMDAwMDFCNDA0NAorOjEwQ0UxMDAwODFCMzAxMDA0MDE4MDA0MDQ5OTkwMTAwMDQwMDAwQTZCOAorOjEwQ0UyMDAwODZCMDAxMDBDRDg5QTI0MDg2MDQwMDAwMUI4NDlDNDA4RQorOjEwQ0UzMDAwODAzMjAwMDBGRkZGMDA0MDg4ODgwMTAwRTk4OTAwNTAyRgorOjEwQ0U0MDAwNDczMTAxMDAzNjAwMDA0NDg4Q0MwMTAwQzk4OTUyNDBCNgorOjEwQ0U1MDAwODEzMjAwMDBFOTg5MDA0MDQ3MzEwMTAwMDAwMDAwNDFCMworOjEwQ0U2MDAwODlCMDAxMDBFOTg5MDA0ODQ3MzEwMTAwRTk4OTAwMDVERQorOjEwQ0U3MDAwNDczMTAxMDAxQjg0MDA0MDgxQjIwMDAwMjgwMDAwNDBCRgorOjEwQ0U4MDAwNDc5OTAxMDAxQjg0MDA0MUUxQzEwMDAwNzgxODAwNDA2RgorOjEwQ0U5MDAwNDk5OTAxMDBENjg5MjI1NDgxN0MwMDAwRDE4OTQyNDAwMQorOjEwQ0VBMDAwODEzMjAwMDAwMDgyMDBCNDY5REYwMTAwMDAwMDFBNDRGMgorOjEwQ0VCMDAwOTM5MzAxMDAyODAwMDA0MDQ3OTkwMTAwRTk4OTAwNDE0RgorOjEwQ0VDMDAwODkzMDAxMDBFNDg5MEY0MDgwMzIwMDAwRkY3RjAwNDA3QworOjEwQ0VEMDAwODg4ODAxMDBFOTg5MDA1MDQ3MzEwMTAwMzYwMDAwNDQ4QworOjEwQ0VFMDAwODhDQzAxMDBEQzg5OTk0MDgwMzIwMDAwMDAwMDAwNDhCNQorOjEwQ0VGMDAwODlEMDAxMDBERTg5OUI0MDgwMzIwMDAwMDAwMDAwNEM5OAorOjEwQ0YwMDAwODlEMDAxMDBFMDg5MUY0NDgwMzIwMDAwRTk4OTAwNDA5NworOjEwQ0YxMDAwNDczMTAxMDAwMDAwMDA0MTg5QjAwMTAwRTk4OTAwNDg2MworOjEwQ0YyMDAwNDczMTAxMDBFOTg5MDA1ODQ3MzEwMTAwMUI4NDAwNDA2NgorOjEwQ0YzMDAwODFCMjAwMDAxMDAwMDA0MDg2RjQwMTAwNkYwMDAwNDM0MQorOjEwQ0Y0MDAwODY4ODAxMDAxQjg0MjYwNTQ3MzEwMDAwRTk4OTAwNDFERAorOjEwQ0Y1MDAwODkzMDAxMDAxQjg0MDA0MDgxQjIwMDAwMDAwMEEwNDQyMQorOjEwQ0Y2MDAwRjA0MTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDgwNDE1QQorOjEwQ0Y3MDAwRTFDMTAxMDAwNDAwMDBDQjgxQzgwMTAwRUY4OTIyNDAxQgorOjEwQ0Y4MDAwRjI3RjAwMDA4MTgwMDA2Rjk3MzMwMTAwRjE4OTIyNDAxOQorOjEwQ0Y5MDAwNzM3RDAwMDA5QjgwMDA0MThCQjMwMDAwRUM4OTIyNTkxNworOjEwQ0ZBMDAwNzM3RDAwMDA3OTAwMDA0MDYxOTkwMTAwRUM4OTI4QjE4RgorOjEwQ0ZCMDAwN0UzMTAwMDBGMjg5MDA0MDgxQjIwMDAwMDQwMDIyQzBFRQorOjEwQ0ZDMDAwOTUzMDAwMDAwMDAwMDBENjk3QjAwMTAwRkE4OTIyNUQ3QworOjEwQ0ZEMDAwNzM3RDAwMDA3RDAwMDA0MDYxOTkwMTAwRjg4OUE4QjFDRgorOjEwQ0ZFMDAwODAzMDAwMDAwMDAwMDA1RTdGODMwMTAwMDAwMDAwQkY3MQorOjEwQ0ZGMDAwQzVCMTAxMDAwNDAwMDA0MDgxOTgwMTAwMjUwMTAwNDBGNgorOjEwRDAwMDAwODEzMjAxMDBGRDg5QTI0MTgxNTAwMDAwRkY4OTQzNUYwOAorOjEwRDAxMDAwN0YxMzAwMDAyNjAxMDBCRkM1MzEwMTAwMDAwMDAwNUY0MgorOjEwRDAyMDAwN0Y4MzAxMDAwMDAwMDA1RTdGOTMwMTAwOEI5ODAwQkZBQQorOjEwRDAzMDAwQzUzMTAxMDAxQjg0MDA0MDgxQjIwMDAwMEM4QTlDMEZBNgorOjEwRDA0MDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMEM4QTIyNDA5QQorOjEwRDA1MDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTBEOAorOjEwRDA2MDAwNjJERDAxMDAwOThBQTg0MDgxMzIwMDAwMUI4NDAwODgyQgorOjEwRDA3MDAwMUNCMDAwMDA3Nzk1MjIwMjgwMzIwMDAwMEQ4QTQyNDBFOQorOjEwRDA4MDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNzc5NTFBMDI1QQorOjEwRDA5MDAwNjg5NzAwMDAxNzhBOUMwRjgwMzIwMDAwMDA4MDAwMTAwMworOjEwRDBBMDAwNDJDOTAxMDAxNzhBMjI0MEUzNkQwMDAwMDAwMDAwNDVEQworOjEwRDBCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMTQ4QUE4NDA0NworOjEwRDBDMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwODE5NTIyMDI4MAorOjEwRDBEMDAwODAzMjAwMDAxODhBNDI0MDgxMzIwMDAwMDAwMDAwNDQ4MworOjEwRDBFMDAwOTM5MzAxMDA4MTk1MUEwMjY4OTcwMDAwMjI4QTlDMEY5MQorOjEwRDBGMDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMjI4QTIyNDBENAorOjEwRDEwMDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAyNworOjEwRDExMDAwNjJERDAxMDAxRjhBQTg0MDgxMzIwMDAwMUI4NDAwODg2NAorOjEwRDEyMDAwMUNCMDAwMDA2Rjg0MjIwMjgwMzIwMDAwMjM4QTQyNDAzQgorOjEwRDEzMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBMDJCNQorOjEwRDE0MDAwNjg5NzAxMDA2Rjg0MDA0MDA1QjAwMDAwMDA4MDAwQTZEMQorOjEwRDE1MDAwNTZCMTAxMDA1Njk1MkY0MDA1QjAwMTAwNzM4QUEyNDBEOAorOjEwRDE2MDAwRTc2RDAwMDBCODk0Mjk0MUU3QjEwMTAwMDAwMDAwNTRDOAorOjEwRDE3MDAwRUY5MzAxMDAwMDAwMDBGMjBFQjAwMTAwMjkwMDAwNDAxMgorOjEwRDE4MDAwMEQ5ODAxMDAwOTAwMDAwNzEyRTQwMTAwMDAwMDAwQTc0QgorOjEwRDE5MDAwMTNDMDAxMDAwMzAwMDAwNzFBRjQwMTAwMDcwMDAwMDc5NAorOjEwRDFBMDAwMTY4ODAxMDBGRkZGMDAxMDM0RDgwMTAwMDAwMDAwMDNDMgorOjEwRDFCMDAwMzQ5NDAxMDAwMDAwMDA0MDIzQjAwMTAwMjAxODAwNDAxQQorOjEwRDFDMDAwMTE5ODAxMDAwMEI1MDAwRDQyQzkwMTAwNTc4QTIyMEJEOQorOjEwRDFEMDAwRTY3RDAwMDAzODhBNDQ0MDgxMzIwMDAwRkZGRjAwMDdFRQorOjEwRDFFMDAwODQ4OTAxMDAzRjhBMDVDMjI0MzAwMDAwNjc5ODAwNDAwRQorOjEwRDFGMDAwODEzMjAxMDAwMDAwMkQwNTQ4QjEwMTAwNzQ4QTFDRjA0NQorOjEwRDIwMDAwMTgzMDAxMDA1NzhBMDA0MDgxQjIwMDAwMDAwMDFDNDAyNQorOjEwRDIxMDAwODFCMjAxMDA0RThBQTA0ODIzNkMwMDAwMDAwMDAwNTAzQgorOjEwRDIyMDAwMzVEMDAxMDAwMDgwMDAxQTQyQzkwMTAwNDg4QTIyNDAxRQorOjEwRDIzMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMUFFRgorOjEwRDI0MDAwNjJERDAxMDA0NThBQTg0MDgxMzIwMDAwMUI4NDAwODgwRAorOjEwRDI1MDAwMUNCMDAwMDAyMDk4MDA0MDQzOTkwMTAwNzQ4QTAwRjgzNworOjEwRDI2MDAwMTgzMDAxMDA0OThBQTI0MTIzNTAwMDAwRkZGRjAwMTAzRQorOjEwRDI3MDAwMzREODAxMDAwMDAwMDAwMzM0OTQwMTAwMjAxODAwNDA1RAorOjEwRDI4MDAwMTE5ODAxMDAwMDAwMkUxQTQ4QjEwMTAwMDAwMDAwNDQ2RQorOjEwRDI5MDAwRjFCMTAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwNDJGRgorOjEwRDJBMDAwNjFCMTAxMDAyMDAwMDAxQTYyREQwMTAwNTI4QUE4MDk2NAorOjEwRDJCMDAwRTAzMTAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNTBFOAorOjEwRDJDMDAwMzVDMDAxMDAwMDAwMDA0NDExQzAwMTAwNjM4QTIyNDEwMgorOjEwRDJEMDAwMEQ1MDAwMDAwMDAwMDA0MTBGQzAwMTAwNUY4QUEwQUFBRAorOjEwRDJFMDAwMEY2QzAwMDAwMDAwMDA0MTBGQjAwMTAwMDkwMDAwMDdCMgorOjEwRDJGMDAwMTJFNDAxMDAwMDAwMDBBNzEzQzAwMTAwMDAwMDAwNDA3QworOjEwRDMwMDAwMUJCMDAxMDAzNjhBMDA0MTE3QjAwMDAwMDAwMjAwMDk3RQorOjEwRDMxMDAwMTJDODAxMDAzNjhBODM0MTE3NDAwMDAwMDAwMDAwNDAxNworOjEwRDMyMDAwMTdCMDAxMDAzNjhBMDA0MTFCQzAwMDAwNkU4QTIzNDBGRQorOjEwRDMzMDAwMjM2QzAwMDAwMDAwMDA1MDM1RDAwMTAwMDA4MDAwMUE2RQorOjEwRDM0MDAwNDJDOTAxMDA2QjhBMjI0MEUzNkQwMDAwMDAwMDAwNDJFOAorOjEwRDM1MDAwNjFCMTAxMDA0MDAwMDAxQTYyREQwMTAwNjg4QUE4NDA0NgorOjEwRDM2MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA5ODAwNDAxRgorOjEwRDM3MDAwNDM5OTAxMDA3NDhBMDBGODE4MzAwMTAwNkM4QUEyNDFCOAorOjEwRDM4MDAwMjM1MDAwMDAwMDAwMDA0MTBGQzAwMTAwNzE4QUEwQUFENAorOjEwRDM5MDAwMEY2QzAwMDAwMDAwMDA0MTBGQjAwMTAwQjg5NDIwMDc5RQorOjEwRDNBMDAwRTRCMTAxMDA1Njk1MjA0MEU3QjEwMTAwMDU4QTAwNDAzNAorOjEwRDNCMDAwMEZCMDAwMDBGRkZGMDAwQzgwRDgwMTAwQzAwMjAwMEM3RAorOjEwRDNDMDAwN0U4OTAxMDA4NjhBMjY1NDYxMzEwMDAwN0M4QTg3MENBMAorOjEwRDNEMDAwODAzMjAwMDAwRjAwMDA0MDYyOTkwMTAwN0M4QTI4NDBFMgorOjEwRDNFMDAwODEzMjAwMDA3QzhBQTI1NDc3N0QwMDAwNzg4QTAwNDA1OAorOjEwRDNGMDAwODFCMjAwMDA4MThBMjI0NjE5N0MwMDAwMEQwMDAwNDBBNQorOjEwRDQwMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDAwMEEyNTQwRgorOjEwRDQxMDAwNzc3RDAxMDA3RDhBMDA0MDgxQjIwMDAwODY4QTIyNDkyMgorOjEwRDQyMDAwMTk3QzAwMDAwRTAwMDA0MDYyOTkwMTAwMDAwMEE4NDAzNQorOjEwRDQzMDAwODFCMjAwMDAwMDAwQTI1NDc3N0QwMTAwODE4QTAwNDA4MworOjEwRDQ0MDAwODFCMjAwMDAxMDAwMDA0MDYyOTkwMTAwMDAwMEE4NDA3NQorOjEwRDQ1MDAwODFCMjAwMDAwMDAwQTI1NDc3N0QwMTAwODY4QTAwNDA1RQorOjEwRDQ2MDAwODFCMjAwMDAzMDk0MkY1NUYxOTMwMTAwMDA0MDAwQTZENgorOjEwRDQ3MDAwNTZCMTAxMDA2Rjg0QTI0MUU1NTEwMDAwNjQwMDAwNDBGNAorOjEwRDQ4MDAwRTU5OTAxMDA4RThBNDI0MDgxMzIwMDAwOTE4QUEyOTM4MAorOjEwRDQ5MDAwNTc2RjAwMDAwMDAwMDA0MTU3QzMwMTAwMDAwMDFBQUJBNQorOjEwRDRBMDAwMjdCMzAxMDA2Rjg0MjI1MEZEN0YwMDAwNkY4NDIyNTE1QQorOjEwRDRCMDAwRkQ3RjAwMDA2Rjg0QTI0MTFENTMwMDAwNTA0NjAwNDBENAorOjEwRDRDMDAwMUQ5QjAxMDAzNDgyMDA0MDgxMzIwMTAwMEUwMDAwNDhBMworOjEwRDREMDAwQjJDQjAxMDBGQzgxMDA0MDQ5MzEwMTAwOUQ4QTIyNDAwRAorOjEwRDRFMDAwQjU2RjAwMDAwRTAwMDA0OEIyQ0IwMTAwRkY4MTAwNDE4MworOjEwRDRGMDAwQjU1MzAxMDA2Rjg0MDA0MDgxQjIwMDAwMDAwMDAwNTE2QworOjEwRDUwMDAwRkQ4MzAxMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDAyRQorOjEwRDUxMDAwNDkzMTAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDBFRgorOjEwRDUyMDAwODEzMjAxMDAwMDAwMDBEQTkxQzAwMTAwMDQwMDAwNDhDRgorOjEwRDUzMDAwQjJDQjAxMDBGRjgxMDA0MEI1MzMwMTAwNjAxNjIwNDBFRQorOjEwRDU0MDAwRTVCMTAxMDBEQjgyMDA0MEI1MzMwMTAwMDgwMDAwNDg2RQorOjEwRDU1MDAwQjJDQjAxMDBGRkZGMDA0QUI0OEIwMTAwRkY4MTAwNDAwNQorOjEwRDU2MDAwODEzMjAxMDAwQTAwMDA0OEIyQ0IwMTAwMTAwMDAwNEFERAorOjEwRDU3MDAwQjRGNzAxMDBGRjgxMDA0MDgxMzIwMTAwNkY4NDAwNDA1OAorOjEwRDU4MDAwODFCMjAwMDAwNTAwMDA0MDQzOTkwMTAwMDAwMDAwRjM1MworOjEwRDU5MDAwMDhCMDAxMDAwNDAwMjA0MEU2QjEwMTAwMDMwMDAwNDA5MworOjEwRDVBMDAwOTZFNDAxMDAwMDAwMDAwNDk2QzAwMTAwQjQ4QTAwNEIxQworOjEwRDVCMDAwMTBDOTAwMDBENzhEMDA0MTA5QjAwMDAwMDQwMDAwMjAxMAorOjEwRDVDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NQorOjEwRDVEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4NQorOjEwRDVFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NQorOjEwRDVGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMEI4RTAwNDFBRgorOjEwRDYwMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQQorOjEwRDYxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0NAorOjEwRDYyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNAorOjEwRDYzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyNAorOjEwRDY0MDAwOEZCMDAwMDAzRDhFMDA0NTA5QjAwMDAwM0Q4RTAwNDVDMgorOjEwRDY1MDAwMDlCMDAwMDAzRDhFMDA0NTA5QjAwMDAwM0Q4RTAwNDUzOAorOjEwRDY2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3QQorOjEwRDY3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFNAorOjEwRDY4MDAwOEZCMDAwMDA3QzhFMDA0MzA5QjAwMDAwQTU4RTAwNDNERgorOjEwRDY5MDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDVCNworOjEwRDZBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzQQorOjEwRDZCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBNAorOjEwRDZDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQjU4RTAwNDMzMgorOjEwRDZEMDAwMDlCMDAwMDBCNDhFMDA0MzA5QjAwMDAwRDU4RDAwNDVBQworOjEwRDZFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGQQorOjEwRDZGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2NAorOjEwRDcwMDAwOEZCMDAwMDA3NThGMDA0MjA5QjAwMDAwNzU4RjAwNDM5NAorOjEwRDcxMDAwMDlCMDAwMDA3NThGMDA0NDA5QjAwMDAwRDU4RDAwNDVBOAorOjEwRDcyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCOQorOjEwRDczMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyMworOjEwRDc0MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQTE4RjAwNDNDNAorOjEwRDc1MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDUwNgorOjEwRDc2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3OQorOjEwRDc3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMworOjEwRDc4MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQkY4RjAwNDM2NgorOjEwRDc5MDAwMDlCMDAwMDBCRjhGMDA0NDA5QjAwMDAwRDU4RDAwNDVERQorOjEwRDdBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzOQorOjEwRDdCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMworOjEwRDdDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQkY4RjAwNDIyNworOjEwRDdEMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDU4NgorOjEwRDdFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGOQorOjEwRDdGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MworOjEwRDgwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTc4RjAwNDRCQworOjEwRDgxMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDU0NQorOjEwRDgyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCOAorOjEwRDgzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyMgorOjEwRDg0MDAwOEZCMDAwMDBENThEMDA0MjA5QjAwMDAwRjg4RjAwNDU3MAorOjEwRDg1MDAwMDlCMDAwMDBGODhGMDA0NTA5QjAwMDAwRDU4RDAwNDVFMworOjEwRDg2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3OAorOjEwRDg3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMgorOjEwRDg4MDAwOEZCMDAwMDBGQThGMDA0MjA5QjAwMDAwRkE4RjAwNDMwOQorOjEwRDg5MDAwMDlCMDAwMDBGQThGMDA0NDA5QjAwMDAwRkE4RjAwNDU3QgorOjEwRDhBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzOAorOjEwRDhCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMgorOjEwRDhDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5MgorOjEwRDhEMDAwOEZCMDAwMDAwMjkwMDA0NDA5QjAwMDAwRDU4RDAwNDVEMworOjEwRDhFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGOAorOjEwRDhGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MgorOjEwRDkwMDAwOEZCMDAwMDAxMzkwMDA0MjA5QjAwMDAwMDM5MDAwNDM2NAorOjEwRDkxMDAwMDlCMDAwMDAxMzkwMDA0NDA5QjAwMDAwRDU4RDAwNDUwNworOjEwRDkyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNworOjEwRDkzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyMQorOjEwRDk0MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMTQ5MDAwNDM0RQorOjEwRDk1MDAwMDlCMDAwMDAwQTkwMDA0NDA5QjAwMDAwRDU4RDAwNDVEMAorOjEwRDk2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NworOjEwRDk3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDE2MgorOjEwRDk4MDAwMDlCMDAwMDA3MzhGMDA0MjA5QjAwMDAwNzM4RjAwNDM5QworOjEwRDk5MDAwMDlCMDAwMDA3MzhGMDA0NDA5QjAwMDAwRDU4RDAwNDUyOAorOjEwRDlBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNworOjEwRDlCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDEyMgorOjEwRDlDMDAwMDlCMDAwMDAxNTkwMDA0MjA5QjAwMDAwMTU5MDAwNDMxNgorOjEwRDlEMDAwMDlCMDAwMDAxNTkwMDA0NDA5QjAwMDAwRDU4RDAwNDU0NQorOjEwRDlFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGNworOjEwRDlGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MQorOjEwREEwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1MAorOjEwREExMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMUM5MDAwNDU3MworOjEwREEyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNgorOjEwREEzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMUU5MDAwNDI1NAorOjEwREE0MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NgorOjEwREE1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwMAorOjEwREE2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGMAorOjEwREE3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMAorOjEwREE4MDAwOEZCMDAwMDAyQTkwMDA0MzA5QjAwMDAwOTM5MDAwNDMzQgorOjEwREE5MDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDVCMworOjEwREFBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNgorOjEwREFCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMAorOjEwREFDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwOUI5MDAwNDM0NgorOjEwREFEMDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDU3MworOjEwREFFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGNgorOjEwREFGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MAorOjEwREIwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQUM5MDAwNDNGNAorOjEwREIxMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDU0MgorOjEwREIyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNQorOjEwREIzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxRgorOjEwREI0MDAwOEZCMDAwMDA3OThFMDA0MzA5QjAwMDAwOTc5MDAwNDMyOQorOjEwREI1MDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDVGMgorOjEwREI2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NQorOjEwREI3MDAwOEZCMDAwMDAwNzAwMkQwNTQ4QjEwMTAwMDAwMDAwRjM0MAorOjEwREI4MDAwMDhCMDAxMDAwNjAwMjA0N0U2QjEwMTAwMDQwMDAwNDc4QworOjEwREI5MDAwOTZFNDAxMDAwMDAwMDA0Nzk2RDAwMTAwMDAwMDAwNDcxNQorOjEwREJBMDAwOTZEMDAxMDAwMDAwMDAwNDk2QzAwMTAwNzQ4QjAwNEI2OQorOjEwREJCMDAwMTBDOTAwMDBDNDkwMDA0OTA5QjAwMDAwMDQwMDAwMjAxMgorOjEwREJDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMworOjEwREJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MworOjEwREJFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MworOjEwREJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MworOjEwREMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MgorOjEwREMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MgorOjEwREMyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkQ5MDAwNDI5NworOjEwREMzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRQorOjEwREM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMgorOjEwREM1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMgorOjEwREM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwREM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwREM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwREM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDM5MTAwNDYxQworOjEwRENBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwRENCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMgorOjEwRENDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwRENEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MgorOjEwRENFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwRENGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MgorOjEwREQwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MQorOjEwREQxMDAwODVCMDAwMDAxMTkxMDA0MjA5QjAwMDAwMDQwMDAwMjAwRAorOjEwREQyMDAwODVCMDAwMDAzMzkxMDA0MjA5QjAwMDAwMDQwMDAwMjBEQgorOjEwREQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwREQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwREQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkU5MTAwNEEyQworOjEwREQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RAorOjEwREQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwREQ4MDAwODVCMDAwMDAzNjkxMDA0MzA5QjAwMDAwMDQwMDAwMjA3NworOjEwREQ5MDAwODVCMDAwMDA4RjkxMDA0NDA5QjAwMDAwMDQwMDAwMjAwRAorOjEwRERBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwRERCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwRERDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOEU5MTAwNEI1QgorOjEwREREMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRAorOjEwRERFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MTAwNDFDRAorOjEwRERGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MTAwNDMzNworOjEwREUwMDAwMDlCMDAwMDAwNjkxMDA0NDA5QjAwMDAwMDY5MTAwNDVFOQorOjEwREUxMDAwMDlCMDAwMDAwNjkxMDA0NjA5QjAwMDAwMDY5MTAwNDdENQorOjEwREUyMDAwMDlCMDAwMDAwNjkxMDA0ODA5QjAwMDAwMDY5MTAwNDlDMQorOjEwREUzMDAwMDlCMDAwMDAwNjkxMDA0QTA5QjAwMDAwMDY5MTAwNEJBRAorOjEwREU0MDAwMDlCMDAwMDAwNjkxMDA0QzA5QjAwMDAwMDY5MTAwNEQ5OQorOjEwREU1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QworOjEwREU2MDAwODVCMDAwMDBFRTkxMDA0MjA5QjAwMDAwMDQwMDAwMjBERgorOjEwREU3MDAwODVCMDAwMDBFRTkxMDA0NDA5QjAwMDAwMDQwMDAwMjBDRAorOjEwREU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwREU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMAorOjEwREVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUU5MTAwNEIxQQorOjEwREVCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQworOjEwREVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMAorOjEwREVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MjAwNDVENworOjEwREVFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQworOjEwREVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MAorOjEwREYwMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjAwOQorOjEwREYxMDAwODVCMDAwMDBGQTkxMDA0NTA5QjAwMDAwMDQwMDAwMjAxRgorOjEwREYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M5NDAwNDYwRAorOjEwREYzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBQgorOjEwREY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRgorOjEwREY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzM5MTAwNDYyOQorOjEwREY2MDAwMDlCMDAwMDAxMTkxMDA0NjA5QjAwMDAwMkM5MTAwNDc1MworOjEwREY3MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAwNgorOjEwREY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERgorOjEwREY5MDAwODVCMDAwMDAyRTkxMDA0QTA5QjAwMDAwMDQwMDAwMjA2NgorOjEwREZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRgorOjEwREZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRgorOjEwREZDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOEY5MTAwNDU1RQorOjEwREZEMDAwMDlCMDAwMDAzNjkxMDA0MzA5QjAwMDAwMkM5MTAwNDdDMQorOjEwREZFMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA5NgorOjEwREZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RgorOjEwRTAwMDAwODVCMDAwMDA4RTkxMDA0QzA5QjAwMDAwMDQwMDAwMjA5MworOjEwRTAxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0RQorOjEwRTAyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwRTAzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjM5MjAwNDQ1OQorOjEwRTA0MDAwMDlCMDAwMDAyMzkyMDA0MjA5QjAwMDAwQzA4RDAwNDdEMworOjEwRTA1MDAwMDlCMDAwMDBDMDhEMDA0ODA5QjAwMDAwMDQwMDAwMjA5NQorOjEwRTA2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRQorOjEwRTA3MDAwODVCMDAwMDAyMzkyMDA0QjA5QjAwMDAwMDQwMDAwMjA4RQorOjEwRTA4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MTAwNDEyQQorOjEwRTA5MDAwMDlCMDAwMDA0NjkyMDA0NzA5QjAwMDAwMDQwMDAwMjBDQgorOjEwRTBBMDAwODVCMDAwMDAyRTkyMDA0NzA5QjAwMDAwMDQwMDAwMjA1NworOjEwRTBCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRQorOjEwRTBDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RQorOjEwRTBEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkU5MjAwNDdBQgorOjEwRTBFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwRTBGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RQorOjEwRTEwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1RAorOjEwRTExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkU5MjAwNDc2QQorOjEwRTEyMDAwMDlCMDAwMDA0NjkyMDA0NzA5QjAwMDAwMkM5MTAwNDc1QQorOjEwRTEzMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA0NAorOjEwRTE0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRAorOjEwRTE1MDAwODVCMDAwMDAyRTkyMDA0NzA5QjAwMDAwMDQwMDAwMjBBNgorOjEwRTE2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRAorOjEwRTE3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRAorOjEwRTE4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERAorOjEwRTE5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTU5MjAwNDdDMworOjEwRTFBMDAwMDlCMDAwMDA1NTkyMDA0ODA5QjAwMDAwMDQwMDAwMjBBQQorOjEwRTFCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRAorOjEwRTFDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RAorOjEwRTFEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQjg5MjAwNDAyNworOjEwRTFFMDAwMDlCMDAwMDBENjkyMDA0NzA5QjAwMDAwQ0E5MjAwNDg2QQorOjEwRTFGMDAwMDlCMDAwMDAyNjkyMDA0NzA5QjAwMDAwMjY5MjAwNDdBRgorOjEwRTIwMDAwMDlCMDAwMDBENjkyMDA0NzA5QjAwMDAwREQ5MjAwNDczNworOjEwRTIxMDAwMDlCMDAwMDBERDkyMDA0ODA5QjAwMDAwMDQwMDAwMjBCMQorOjEwRTIyMDAwODVCMDAwMDBDQTkyMDA0ODA5QjAwMDAwMjY5MjAwNDc1RAorOjEwRTIzMDAwMDlCMDAwMDAyNjkyMDA0NzA5QjAwMDAwQ0E5MjAwNDhDOQorOjEwRTI0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OAorOjEwRTI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUU5MTAwNDM2RQorOjEwRTI2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUU5MTAwNDVEOAorOjEwRTI3MDAwMDlCMDAwMDBFRTkxMDA0NjA5QjAwMDAwMkM5MTAwNDc2MworOjEwRTI4MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjBGMworOjEwRTI5MDAwODVCMDAwMDBFRTkxMDA0QTA5QjAwMDAwMDQwMDAwMjBBMworOjEwRTJBMDAwODVCMDAwMDBFRTkxMDA0QzA5QjAwMDAwMDQwMDAwMjA5MQorOjEwRTJCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBQworOjEwRTJDMDAwODVCMDAwMDA0NTkyMDA0NzA5QjAwMDAwMzk5MjAwNDgyRgorOjEwRTJEMDAwMDlCMDAwMDAyRDkyMDA0NzA5QjAwMDAwMkQ5MjAwNDdDMAorOjEwRTJFMDAwMDlCMDAwMDA0NTkyMDA0NzA5QjAwMDAwQzA4RDAwNDcwQQorOjEwRTJGMDAwMDlCMDAwMDBDMDhEMDA0ODA5QjAwMDAwMDQwMDAwMjBGMworOjEwRTMwMDAwODVCMDAwMDAzOTkyMDA0ODA5QjAwMDAwMkQ5MjAwNDcwNgorOjEwRTMxMDAwMDlCMDAwMDAyRDkyMDA0NzA5QjAwMDAwMzk5MjAwNDg3MgorOjEwRTMyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNworOjEwRTMzMDAwODVCMDAwMDBERjkyMDA0MjA5QjAwMDAwMDQwMDAwMjAxOAorOjEwRTM0MDAwODVCMDAwMDBERjkyMDA0NDA5QjAwMDAwMDQwMDAwMjAwNgorOjEwRTM1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQgorOjEwRTM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQgorOjEwRTM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY5MjAwNEI1MworOjEwRTM4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NworOjEwRTM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQgorOjEwRTNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY5MjAwNDMyQgorOjEwRTNCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY5MjAwNDU5NQorOjEwRTNDMDAwMDlCMDAwMDBERjkyMDA0NjA5QjAwMDAwREY5MjAwNDc2QworOjEwRTNEMDAwMDlCMDAwMDBERjkyMDA0ODA5QjAwMDAwMDQwMDAwMjBFRQorOjEwRTNFMDAwODVCMDAwMDBERjkyMDA0QTA5QjAwMDAwMDQwMDAwMjA2MAorOjEwRTNGMDAwODVCMDAwMDBERjkyMDA0QzA5QjAwMDAwREY5MjAwNENCNQorOjEwRTQwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENgorOjEwRTQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkE5MjAwNDY5QworOjEwRTQyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNgorOjEwRTQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQQorOjEwRTQ0MDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBDNAorOjEwRTQ1MDAwODVCMDAwMDBGQTkyMDA0NjA5QjAwMDAwMDQwMDAwMjBEOAorOjEwRTQ2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwRTQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQQorOjEwRTQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5NDAwNDYxRQorOjEwRTQ5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NgorOjEwRTRBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCQQorOjEwRTRCMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA1NAorOjEwRTRDMDAwODVCMDAwMDAwNjk0MDA0NjA5QjAwMDAwMDQwMDAwMjA1QQorOjEwRTREMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5NDAwNDZDRQorOjEwRTRFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNgorOjEwRTRGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QQorOjEwRTUwMDAwODVCMDAwMDAyQjk0MDA0MjA5QjAwMDAwMDQwMDAwMjBGOAorOjEwRTUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwRTUyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwRTUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkE5NDAwNEE0NQorOjEwRTU0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NQorOjEwRTU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwOQorOjEwRTU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGOQorOjEwRTU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkI5NDAwNDYwOAorOjEwRTU4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkM5MTAwNDc3NQorOjEwRTU5MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjBFMAorOjEwRTVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOQorOjEwRTVCMDAwODVCMDAwMDAyQTk0MDA0QTA5QjAwMDAwMDQwMDAwMjA0MQorOjEwRTVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OQorOjEwRTVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OQorOjEwRTVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OQorOjEwRTVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OQorOjEwRTYwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUE5MjAwNDFCRgorOjEwRTYxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNAorOjEwRTYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOAorOjEwRTYzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOAorOjEwRTY0MDAwODVCMDAwMDBGNzkyMDA0MjA5QjAwMDAwMDQwMDAwMjBFRAorOjEwRTY1MDAwODVCMDAwMDBGNzkyMDA0NDA5QjAwMDAwMDQwMDAwMjBEQgorOjEwRTY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGOAorOjEwRTY3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFOAorOjEwRTY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRjc5MjAwNEIyOAorOjEwRTY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NAorOjEwRTZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOAorOjEwRTZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRjc5MjAwNDMwMAorOjEwRTZDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRjc5MjAwNDU2QQorOjEwRTZEMDAwMDlCMDAwMDBGNzkyMDA0NjA5QjAwMDAwRjc5MjAwNDcyOQorOjEwRTZFMDAwMDlCMDAwMDBGNzkyMDA0ODA5QjAwMDAwMDQwMDAwMjBDMworOjEwRTZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwRTcwMDAwODVCMDAwMDBGNzkyMDA0QzA5QjAwMDAwMDQwMDAwMjAyMgorOjEwRTcxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NworOjEwRTcyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MjAwNEM3NworOjEwRTczMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMworOjEwRTc0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNworOjEwRTc1MDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBCMQorOjEwRTc2MDAwODVCMDAwMDBGQTkxMDA0QzA5QjAwMDAwMDQwMDAwMjBDMAorOjEwRTc3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q5NDAwNDY2NAorOjEwRTc4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MworOjEwRTc5MDAwODVCMDAwMDA3MTk0MDA0MjA5QjAwMDAwMDQwMDAwMjAyMAorOjEwRTdBMDAwODVCMDAwMDA3MTk0MDA0NDA5QjAwMDAwMDQwMDAwMjAwRQorOjEwRTdCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNworOjEwRTdDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NworOjEwRTdEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzE5NDAwNEI1QgorOjEwRTdFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMworOjEwRTdGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NworOjEwRTgwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NgorOjEwRTgxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzE5NDAwNDUyMAorOjEwRTgyMDAwMDlCMDAwMDA3MTk0MDA0NjA5QjAwMDAwMkM5MTAwNDcyNworOjEwRTgzMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAzRAorOjEwRTg0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNgorOjEwRTg1MDAwODVCMDAwMDA3MTk0MDA0QzA5QjAwMDAwMDQwMDAwMjA1NQorOjEwRTg2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNgorOjEwRTg3MDAwODVCMDAwMDBGQTkxMDA0MjA5QjAwMDAwN0M5NDAwNDY4NworOjEwRTg4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MgorOjEwRTg5MDAwODVCMDAwMDBGQTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA5NQorOjEwRThBMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA2MAorOjEwRThCMDAwODVCMDAwMDA3Qzk0MDA0NjA5QjAwMDAwMDQwMDAwMjBGMAorOjEwRThDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M5NDAwNDY2NAorOjEwRThEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwRThFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwODA5NDAwNDM0MworOjEwRThGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwRTkwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NQorOjEwRTkxMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBFRgorOjEwRTkyMDAwODVCMDAwMDA4MDk0MDA0MzA5QjAwMDAwMDQwMDAwMjA3RQorOjEwRTkzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwODA5NDAwNERFOAorOjEwRTk0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwRTk1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNQorOjEwRTk2MDAwODVCMDAwMDA5Mjk0MDA0MzA5QjAwMDAwMDQwMDAwMjAyQworOjEwRTk3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFNQorOjEwRTk4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENQorOjEwRTk5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkY5NDAwNEE5QworOjEwRTlBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwRTlCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNQorOjEwRTlDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NQorOjEwRTlEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOTI5NDAwNDM0MAorOjEwRTlFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkM5MTAwNDcxMQorOjEwRTlGMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA3QworOjEwRUEwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NAorOjEwRUExMDAwODVCMDAwMDA2Rjk0MDA0QTA5QjAwMDAwMDQwMDAwMjA5NworOjEwRUEyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNAorOjEwRUEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTQ5NDAwNDNDRAorOjEwRUE0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MAorOjEwRUE1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNAorOjEwRUE2MDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA5RQorOjEwRUE3MDAwODVCMDAwMDBBNDk0MDA0MzA5QjAwMDAwMDQwMDAwMjAwOQorOjEwRUE4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTQ5NDAwNEQ3MworOjEwRUE5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MAorOjEwRUFBMDAwODVCMDAwMDAxMTkxMDA0MjA5QjAwMDAwMDQwMDAwMjA3MAorOjEwRUFCMDAwODVCMDAwMDAzMzkxMDA0MjA5QjAwMDAwMDQwMDAwMjAzRQorOjEwRUFDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwRUFEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NAorOjEwRUFFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQzM5NDAwNDJGRgorOjEwRUFGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwRUIwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MworOjEwRUIxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MworOjEwRUIyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzM5MTAwNDY0RAorOjEwRUIzMDAwMDlCMDAwMDAxMTkxMDA0NjA5QjAwMDAwMkM5MTAwNDc3NworOjEwRUI0MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAyQQorOjEwRUI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMworOjEwRUI2MDAwODVCMDAwMDBDMzk0MDA0NjA5QjAwMDAwMDQwMDAwMjBGNgorOjEwRUI3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMworOjEwRUI4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQzU5NDAwNEE1NAorOjEwRUI5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRgorOjEwRUJBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMworOjEwRUJCMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA0RAorOjEwRUJDMDAwODVCMDAwMDBDNTk0MDA0QTA5QjAwMDAwMDQwMDAwMjA5MAorOjEwRUJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5NDAwNDY1MAorOjEwRUJFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRgorOjEwRUJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5NDAwNDYzMAorOjEwRUMwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDRQorOjEwRUMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MgorOjEwRUMyMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBEQworOjEwRUMzMDAwODVCMDAwMDA3RDk0MDA0NjA5QjAwMDAwMDQwMDAwMjA2QgorOjEwRUM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5NDAwNDZERgorOjEwRUM1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RQorOjEwRUM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwRUM3MDAwODVCMDAwMDBDQjk0MDA0MjA5QjAwMDAwMDQwMDAwMjBFMQorOjEwRUM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMgorOjEwRUM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMgorOjEwRUNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkY5NDAwNEE4OQorOjEwRUNCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRQorOjEwRUNDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MgorOjEwRUNEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwRUNFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0I5NDAwNDZGMQorOjEwRUNGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkM5MTAwNDdGRQorOjEwRUQwMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA2OAorOjEwRUQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MQorOjEwRUQyMDAwODVCMDAwMDA2Rjk0MDA0QTA5QjAwMDAwMDQwMDAwMjA4NAorOjEwRUQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwRUQ0MDAwODVCMDAwMDAzNjkxMDA0RDA5QjAwMDAwMDQwMDAwMjA5RAorOjEwRUQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMQorOjEwRUQ2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwRUQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwRUQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMQorOjEwRUQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwRURBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwRURCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMQorOjEwRURDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwRUREMDAwODVCMDAwMDAzNjkxMDA0RDA5QjAwMDAwMkM5MTAwNDcyRAorOjEwRURFMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA4OAorOjEwRURGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MQorOjEwRUUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MAorOjEwRUUxMDAwODVCMDAwMDAwNzAwMkU0QjE5OTAwMTAwMTA4QTAwMDRGNQorOjEwRUUyMDAwRTZCMTAwMDBDMDhEMjI0MjE5N0MwMDAwQzU5NzAwM0E2RgorOjEwRUUzMDAwODEzMDAxMDBDMDhEMDA0MDgxQjIwMDAwQzA4RDIyNDJBRgorOjEwRUU0MDAwMTk3QzAwMDBGRjFGMDAwRjFFOEMwMTAwMzc5NzAwNDA0NworOjEwRUU1MDAwODEzMjAxMDBEMDhEOUMwRjgwMzIwMDAwMDAwMDAwNUNFOAorOjEwRUU2MDAwMUY4MDAxMDAwMDgwMDAxMDQyQzkwMTAwRDA4RDIyNDBBNworOjEwRUU3MDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTA5QQorOjEwRUU4MDAwNjJERDAxMDBDRDhEQTg0MDgxMzIwMDAwMUI4NDAwODgyNgorOjEwRUU5MDAwMUNCMDAwMDAxOTg2MjIwMjgwMzIwMDAwRDE4RDQyNDA1MQorOjEwRUVBMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBMDIyOAorOjEwRUVCMDAwNjg5NzAxMDAxOTg2MDA0MDA1QjAwMDAwMDUwMDJFNEI0MAorOjEwRUVDMDAwMTk5MDAxMDAxMDhBMDAwNEU2QjEwMDAwMDAwMDAwNDAyMworOjEwRUVEMDAwODdCMDAxMDAwMDAwMDA0MDhEQjAwMTAwMDA4MDAwMDNGOQorOjEwRUVFMDAwNDJDOTAxMDA0MDAwMDBBMTQ0QzkwMTAwMDAwMDAwRjAzNworOjEwRUVGMDAwRTBCMTAxMDA1NTk5MDAwNjA3NDAwMTAwMDAwMDAwMDYzRQorOjEwRUYwMDAwMDdEMDAxMDBENDAwMkU1QzFGOTAwMTAwMDAwMDAwMDcxNAorOjEwRUYxMDAwRjBCMTAxMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjBDNAorOjEwRUYyMDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVDRAorOjEwRUYzMDAwOTZCMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRjA0NQorOjEwRUY0MDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVBRAorOjEwRUY1MDAwOTZDMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRjAxNQorOjEwRUY2MDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkE5MQorOjEwRUY3MDAwOTZDMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAzMDAwNEI2QQorOjEwRUY4MDAwOTQ4ODAxMDAwMDAwMDA0Njk1RjAwMTAwMDAwMDAwNEE0RQorOjEwRUY5MDAwOTZDMDAxMDA1RTAxMkUzNDk3ODQwMTAwMDIwMDAwNEJGMAorOjEwRUZBMDAwRTRFNTAxMDA2NDAxMjA0MEUxQjEwMTAwMDkwMDAwMDcyRgorOjEwRUZCMDAwODZFNDAxMDAwMDAwMkVBNzg3QzAwMTAwMTAwMDAwMTBBOQorOjEwRUZDMDAwNDhDOTAxMDAxMDAwMDA0MEYxOTkwMTAwNTgwMTAwNDNCOAorOjEwRUZEMDAwRjBDOTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQyQgorOjEwRUZFMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwRkE4REE4NDAxQgorOjEwRUZGMDAwODEzMjAwMDAwMDAwMDAwNTQ4QjEwMTAwMUEwMDAwNDAwNQorOjEwRjAwMDAwOTc5ODAxMDAwODAwMkU0MDk1QjAwMTAwMDI4RTIwNEIxOQorOjEwRjAxMDAwOTQ2QzAwMDAwMDAwMDA0MEYxQjEwMTAwRkY4RDAwNDE0MAorOjEwRjAyMDAwOTVDMDAwMDAxMDgwMDAxMDQyQzkwMTAwMDk4RTIyNDBFNgorOjEwRjAzMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBEOQorOjEwRjA0MDAwNjJERDAxMDAwNThFQTg0MDgxMzIwMDAwMUI4NDAwODgyQgorOjEwRjA1MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwQzU5NzAwNDA0OQorOjEwRjA2MDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwMEM4MDAwMDM4QQorOjEwRjA3MDAwNDJDOTAxMDAwMDAwMDBGODg2QjAwMTAwMDAwMDAwRjg1RAorOjEwRjA4MDAwODhCMDAxMDAwRThFNDI0MDgxMzIwMDAwMTE4RUEyNENFOQorOjEwRjA5MDAwRkQ3RjAwMDAxMjhFMDA0Q0ZEOTMwMDAwMTM4RTIwRjBDNworOjEwRjBBMDAwNTY2RjAwMDAwMDAwMDBGMDU2QjMwMTAwMDAwMDFBNDA0NworOjEwRjBCMDAwODFCMjAxMDAwMDgwMDAxMDQ0QzkwMTAwNjQwMDAwNDBEQQorOjEwRjBDMDAwRjE5OTAxMDA3MDAwMDAwNUYwQzkwMTAwMDAwMDAwNDM0MworOjEwRjBEMDAwRjBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTAwNAorOjEwRjBFMDAwNjJERDAxMDAxOThFQTg0NEUwMzEwMDAwMTAwMDAwMTAxQworOjEwRjBGMDAwOENDODAxMDAwMDgwMDA0NjQ0QzkwMTAwNDAwMDAwNDA2NworOjEwRjEwMDAwRjE5OTAxMDA2ODAxMDAwNUYwQzkwMTAwNjQwMDAwNDNBNQorOjEwRjExMDAwRjBDOTAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDY5NQorOjEwRjEyMDAwNjJCMTAxMDAyMThFQTg0NEUwMzEwMDAwMUI4NDAwODhGOAorOjEwRjEzMDAwMUNCMDAwMDAwOTAwMDAwNzg2RTQwMTAwMzgwMDJFQTc3QgorOjEwRjE0MDAwODdDMDAxMDA4QjAwMkQwNTQ4QjEwMTAwMjk4RTIyNDNBNAorOjEwRjE1MDAwRTc3RDAwMDAwMDAwMDA0NDQ1QzEwMTAwMkM4RTIyNDRFMAorOjEwRjE2MDAwRTc3RDAwMDAwMDAwMDA0QzQ1QzEwMTAwMDAwMDAwNEE5RQorOjEwRjE3MDAwMTk5MDAxMDA2ODAxMjBBMkU0QjEwMTAwODgwMDAwNDA1QworOjEwRjE4MDAwNDM5OTAxMDAzMDhFMjMwQkU1NkQwMDAwMDAwMDAwNDEyMworOjEwRjE5MDAwMTk5MDAxMDAwMDgwMDAxMDQ0QzkwMTAwNTAwMDAwNDA5NworOjEwRjFBMDAwRjE5OTAxMDA1ODAxMDA0M0YwQzkwMTAwNTgwMTAwMDUyMAorOjEwRjFCMDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTAzRQorOjEwRjFDMDAwNjJCMTAxMDAzNThFQTg0MDgxMzIwMDAwMUI4NDAwODhBNgorOjEwRjFEMDAwMUNCMDAwMDA1QzAwMkUwNTQ4QjEwMTAwMDA4MDAwMDM1NworOjEwRjFFMDAwNDJDOTAxMDAwMDAwNjBGMDk2QjAwMTAwQzU5NzAwNDFERgorOjEwRjFGMDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwNDA4RUEyNDlDRgorOjEwRjIwMDAwMTk3QzAwMDA4NjAwMDA0MDQ3OTkwMTAwNDQ4RTAwNDBCMAorOjEwRjIxMDAwRTVCMTAwMDA4NjAwMkY0OTE5ODAwMTAwNDQ4RUEyRjI1QQorOjEwRjIyMDAwODAzMjAwMDA4QjAwMDA0MDQ3OTkwMTAwMDAwMDAwNDIzRQorOjEwRjIzMDAwRTc5MTAxMDA0NzhFQTI0NjE5N0MwMDAwQTAwMDAwNDAyMworOjEwRjI0MDAwNDc5OTAxMDA0QjhFMDA0MEU1QjEwMDAwQTAwMDJGNDYxOQorOjEwRjI1MDAwMTk4MDAxMDA0QjhFQTJGMjgwMzIwMDAwOEIwMDAwNDAyQQorOjEwRjI2MDAwNDc5OTAxMDAwMDAwMDA0MUU3OTEwMTAwQTgwMDAwNDAxQgorOjEwRjI3MDAwNDM5OTAxMDAzNDAwMkRGMDI0QjAwMTAwMDAwMDAwRkI5MAorOjEwRjI4MDAwMENCMDAxMDAwMDAwMDBGQjEwQjAwMTAwMDAwMDAwRkIwQQorOjEwRjI5MDAwMTJCMDAxMDAwRjAwMDBGMzE2ODgwMTAwMDQwMDAwRjMxMworOjEwRjJBMDAwMTRGNDAxMDA3NjhFMjY0MDgxMzIwMDAwNUU4RTIyMEEyMAorOjEwRjJCMDAwMTY2QzAwMDA1ODAwM0Q0MzEzRTAwMTAwMDAwMDAwRjgwOAorOjEwRjJDMDAwODJCMDAxMDAwNDAwMjJGMDg0MzAwMDAwRkQ5ODAwNDA2QworOjEwRjJEMDAwODEzMjAxMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDU4MgorOjEwRjJFMDAwNDhCMTAxMDAwMDAwMDA0MTEzQzAwMTAwNUQ4RUEwNDM0MQorOjEwRjJGMDAwMTM2QzAwMDAwMDAwMDA0MDEzQjAwMTAwNTM4RTAwNDE2OQorOjEwRjMwMDAwMTVEMDAwMDA3NjhFMjIwQTgwMzIwMDAwNTgwMDNENDM1RQorOjEwRjMxMDAwMTNFMDAxMDAwMDAwMDBGODgyQjAwMTAwMDQwMDIyRjBCOAorOjEwRjMyMDAwODQzMDAwMDBGRDk4MDA0MDgxMzIwMTAwNDAwMDIwNDAwMAorOjEwRjMzMDAwRTFCMTAxMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDU0MgorOjEwRjM0MDAwNDhCMTAxMDA3NjhFMjI0MTE1NTAwMDAwMDAwMDAwNDFCNgorOjEwRjM1MDAwMTFDMDAxMDA2QThFQTA0MzExNkMwMDAwMDAwMDAwNDA0MworOjEwRjM2MDAwMTFCMDAxMDA1ODAwM0Q0MzExRTAwMTAwMDAwMDAwRjgxOQorOjEwRjM3MDAwMzZCMDAxMDAwNDAwMjJGMDAwMzAwMDAwMDAwMDAwNTAxMAorOjEwRjM4MDAwODNCMDAxMDAwNDk4MDA0NzYxMzEwMTAwMUI4NDAwODhBQworOjEwRjM5MDAwMUNCMDAwMDA3NDk1MDAwNTQ4MzEwMTAwMDAwMDAwNDVENAorOjEwRjNBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNzI4RUE4NDBEMgorOjEwRjNCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwNjY4RTAwMDVBRQorOjEwRjNDMDAwNDhCMTAwMDAzNzAwMjA0MEU3QjEwMTAwMzY5ODAwNTFGNQorOjEwRjNEMDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwMzQwMDJFNDEwMworOjEwRjNFMDAwRjVCMTAxMDAwMDExMDA0MEU1OTkwMTAwN0U4RTAwNDg1MgorOjEwRjNGMDAwMTk5MDAwMDAzNDAwMkU0MUY1QjEwMTAwMDAxMTAwNDBDOQorOjEwRjQwMDAwRTU5OTAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjhGNgorOjEwRjQxMDAwOTRCMDAxMDA4MzhFMjI0NTIzN0MwMDAwQjAwMDJGRjBDMQorOjEwRjQyMDAwOENCMDAxMDAwMDAwNjBGMDhDQzAwMTAwOTAwMDAwNDAzMgorOjEwRjQzMDAwNDM5OTAxMDAzNTAwMkRGMDhDQjAwMTAwNTgwMDNFNDM4NworOjEwRjQ0MDAwRTdFMTAxMDA4ODhFMjI0ODE5N0MwMDAwMDAwMDAwNDE5RAorOjEwRjQ1MDAwOERDMDAxMDAwMDAwNjgwQThDQzAwMTAwMzgwMDJBNEFGMworOjEwRjQ2MDAwRTBCMTAxMDAyODAwMDAwMEUwQzkwMTAwM0MwMDIwMUJDMQorOjEwRjQ3MDAwRTBCMTAxMDAxMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg2MworOjEwRjQ4MDAwMzhCMDAxMDAwMDAwMDBGODI2QjAwMTAwMDQwMDIyRjhBNgorOjEwRjQ5MDAwMDIzMDAwMDA5NjhFMjMwMTE0NkMwMDAwMDAwMDAwRjg3QQorOjEwRjRBMDAwODBCMDAxMDAwMDAwMDBGODgyQjAwMTAwNEMwMDIwRjBBNAorOjEwRjRCMDAwRTRCMTAxMDA0NDAwMjA0MEUwQjEwMTAwNDgwMDIwNDFENworOjEwRjRDMDAwRTBCMTAxMDBBODAwMkQxMDMyQjAwMTAwMzk5OTAwRjAyMAorOjEwRjREMDAwMjQzMDAxMDA5RjhFQTI0NDgxNkMwMDAwOUQ4RTIyNDE0OQorOjEwRjRFMDAwMTk3QzAwMDBBMDk2MDA0MDNCMzAwMTAwQzM4RUEyMDhBQQorOjEwRjRGMDAwM0MzMDAwMDA5RjhFMDA0MDgxQjIwMDAwREQ5NTAwNDA0RQorOjEwRjUwMDAwODEzMjAxMDBDMzhFQTIwODNDMzAwMDAwNTAwMDIwMUM1NAorOjEwRjUxMDAwRTBCMTAxMDA1NDAwMjAxM0UwQjEwMTAwNEUwMDIwMDFEMQorOjEwRjUyMDAwRTRCMTAxMDA0MDAwMjAwQUUwQjEwMTAwMzY5ODAwNUYxQworOjEwRjUzMDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwMzcwMDAwNDBDRAorOjEwRjU0MDAwNDc5OTAxMDA3Rjk2MDBGMzk0MzAwMTAwN0U4RTIyNEE5NQorOjEwRjU1MDAwODAzMjAwMDBBQjhFMDA0MDgxQjIwMDAwMzcwMDAwNDBENgorOjEwRjU2MDAwNDc5OTAxMDA3Rjk2MDBGMzk0MzAwMTAwNTgwMDNFNDMxNAorOjEwRjU3MDAwOTdFMDAxMDAwMDAwMDAxQkYwQjEwMTAwMUYwMDYwMDBENworOjEwRjU4MDAwMDA4QzAxMDBENThEODUxMTgwMzIwMDAwMDQ4MDAwMDNCRAorOjEwRjU5MDAwNDJDOTAxMDBCMDAwMkZGMDhDQjAwMTAwMDAwMDYwRjAwMworOjEwRjVBMDAwOENDMDAxMDAzNjk4MDA1RjgxMzAwMTAwRDU4RDAwNDA4RAorOjEwRjVCMDAwODFCMjAwMDBCNThFMDA0OTE5ODAwMDAwQkE4RTIyNDE0OAorOjEwRjVDMDAwMTk3QzAwMDBBMDk2MDA0MDNCMzAwMTAwQkU4RUEyMDhDRQorOjEwRjVEMDAwM0MzMDAwMDAzNjk4MDA1RjgxMzAwMTAwRDU4RDAwNDAzRQorOjEwRjVFMDAwODFCMjAwMDBERDk1MDA0MDgxMzIwMTAwQkU4RUEyMDg4QworOjEwRjVGMDAwM0MzMDAwMDAzNjk4MDA1RjgxMzAwMTAwRDU4RDAwNDAxRQorOjEwRjYwMDAwODFCMjAwMDA1MDAwMkQxMDMyQjAwMTAwNTQwMDJERjBFNgorOjEwRjYxMDAwMzhCMDAxMDA0RTAwMkRGMDI2QjAwMTAwNDAwMDJERjI2MAorOjEwRjYyMDAwMDJCMDAxMDAwMDAwMDBGMDE0QjAwMTAwMzAwMDAwMTAzMgorOjEwRjYzMDAwOENDODAxMDAwMDgwMDA0NjQ0QzkwMTAwNjgwMTJENDRDNworOjEwRjY0MDAwNjFCMTAxMDAxMDAwNjhGMjgwQzgwMTAwMDAwMDAwMDhFQworOjEwRjY1MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwMEJGNQorOjEwRjY2MDAwMzdCMDAxMDAwMDAwMDA0MDM2RDAwMTAwNUMwMTJFNDBBMAorOjEwRjY3MDAwMTBDMDAxMDAwMDAwMDAwNjgwQzAwMTAwMDAwMDAwNTIyMAorOjEwRjY4MDAwODFEMDAxMDBEMThFMjA5NDgxNkMwMDAwQ0I5NzAwOTQzMgorOjEwRjY5MDAwRTUzMTAxMDBEMjhFMDA0MDgxQjIwMDAwQ0I5NzAwNDBERQorOjEwRjZBMDAwRTQzMTAxMDAyMDAwMDA0NjYyREQwMTAwRDI4RUE4NDA1NgorOjEwRjZCMDAwMjMzMDAwMDAwRTAwMDAwRjFFOEMwMTAwRTI4RTgyNDFGQworOjEwRjZDMDAwMjM0MDAwMDAyMDgwMDAxMDQyQzkwMTAwREM4RTIyNDA0RgorOjEwRjZEMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAzMQorOjEwRjZFMDAwNjJERDAxMDBEOThFQTg0MDgxMzIwMDAwMUI4NDAwODhCMQorOjEwRjZGMDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwMTE5NjAwNDM0QQorOjEwRjcwMDAwMjMzMDAxMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMTA5NgorOjEwRjcxMDAwMzJCMDAxMDAwMDAwMDA0MTIzQjAwMTAwMEUwMDAwMEZENAorOjEwRjcyMDAwMUU4QzAxMDAwMDgwMDAxOTQ0QzkwMTAwRUE4RTIyNDFBQworOjEwRjczMDAwMTk3QzAwMDBFNjhFQTMwMTBDNkMwMDAwRTc4RTAwMDYyOQorOjEwRjc0MDAwMDRCMDAwMDAwMDAwMDAwMTA0QjAwMTAwRTk4RTIwMDJCNgorOjEwRjc1MDAwMzY2QzAwMDAwMDAwMDAxQjA0QjAwMTAwRUQ4RTAwMDJCQQorOjEwRjc2MDAwRjBCMTAwMDBFQzhFQTMwMTBDNkMwMDAwRUQ4RTY4MDY3OQorOjEwRjc3MDAwMDRCMDAwMDAwMDAwNjgwMTA0QjAwMTAwRUY4RTgwMDhCMgorOjEwRjc4MDAwRjAzMTAwMDAwMDAwMDAxMTFFOTAwMTAwMDAwMDAwMUM3QworOjEwRjc5MDAwRjBCMTAxMDAwMDAwMDA0NjYxQjEwMTAwMDExRjAwMTkzNQorOjEwRjdBMDAwNjJERDAxMDBGMThFQTgxM0UwMzEwMDAwMjg4RjIyMDJGMworOjEwRjdCMDAwMTQ1MDAwMDA0NDAwMkQwMjBDRDAwMTAwMTg4RkEyMDI0QQorOjEwRjdDMDAwMDI1MDAwMDBGRjhFMjI1QzFGN0MwMDAwMjA4MDAwMDM5RQorOjEwRjdEMDAwNDJDOTAxMDBGRThFMjI0MEUzNkQwMDAwMDAwMDAwNDc5OAorOjEwRjdFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRkE4RUE4NDAwNgorOjEwRjdGMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDU1RQorOjEwRjgwMDAwNDhCMTAxMDA0NDAwMkQ1QzFGODAwMTAwNDgwMDJERjAyQworOjEwRjgxMDAwMzhCMDAxMDA0QzAwMkRGMDI2QjAwMTAwMzgwMDJGRjI2NgorOjEwRjgyMDAwMDJCMDAxMDAxOThGMjIwMTE0NkMwMDAwMEM4RjIyNDZENworOjEwRjgzMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMjAwMDJEMDNGNworOjEwRjg0MDAwNDhCMTAxMDAwQjhGMjI0MEUzNkQwMDAwMDAwMDAwNDQyRQorOjEwRjg1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDg4RkE4NDA4NgorOjEwRjg2MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMzgwMDJGMDU4NgorOjEwRjg3MDAwNDhCMTAxMDAwMDAwMDBGODk0QjAwMTAwMzgwMDJERjBGQworOjEwRjg4MDAwOTZCMDAxMDAwMDAwMDA0Q0UxQzEwMTAwMjAwMDAwMDMxRgorOjEwRjg5MDAwNDhDOTAxMDAwMDAwMjI0QUYxQjEwMTAwNDQwMDAwMDVGRQorOjEwRjhBMDAwRjBDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDAwMDAwNEI2NworOjEwRjhCMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQxOAorOjEwRjhDMDAwNjJERDAxMDAxNThGQTg1QzFGMTAwMDAwMTk4RjAwMDU3NAorOjEwRjhEMDAwNDhCMTAwMDAwMDAwMDAwMjM4QzAwMTAwMjM4RjIyMDY1QQorOjEwRjhFMDAwODAzMjAwMDAwMDAwMDA1MDMzQzAwMTAwMjE4RkEyMDJDRQorOjEwRjhGMDAwMzY2QzAwMDAwNDAwOEYwRDQyMzEwMDAwMTAwMDAwRjg0QgorOjEwRjkwMDAwMTBDODAxMDAwMDAwMDA1QzExODAwMTAwRjAwNzAwNDBGOQorOjEwRjkxMDAwMzc5ODAxMDBENThFMDBBMTFBQjAwMDAwMDAwMDAwMDI0NworOjEwRjkyMDAwMTBDMDAxMDBENThFMDAwMjM2RDAwMDAwNTAwMDIwMUMwRgorOjEwRjkzMDAwRTBCMTAxMDA1NDAwMjAxM0UwQjEwMTAwNEUwMDIwMDFBRAorOjEwRjk0MDAwRTRCMTAxMDA0MDAwMjAwQUUwQjEwMTAwMkQ4RjAwNUYwQQorOjEwRjk1MDAwMDFCMDAwMDAzNzAwMkQ0NjAxQjAwMTAwMDQwMDAwRjNBMworOjEwRjk2MDAwODBGNDAxMDAyQzhGQTA0MzgxNkMwMDAwMDAwMDAwNTU0MgorOjEwRjk3MDAwMDFCMDAxMDA0MDAwMjA0MEUxQjEwMTAwMDA4MDAwMTkwOQorOjEwRjk4MDAwNDJDOTAxMDAzMzhGMjI0MEUzNkQwMDAwMDAwMDAwNDZCMQorOjEwRjk5MDAwNjFCMTAxMDA0MDAwMDAxOTYyREQwMTAwMzA4RkE4NDAxNAorOjEwRjlBMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMTE5NjAwMTBGQQorOjEwRjlCMDAwNDgzMTAxMDAzMDgwMDAxMDQyQzkwMTAwM0E4RjIyNDBENgorOjEwRjlDMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA0MAorOjEwRjlEMDAwNjJERDAxMDAzNzhGQTg0MDgxMzIwMDAwMUI4NDAwODg1RgorOjEwRjlFMDAwMUNCMDAwMDA2MDAxMkYwNTQ4QjEwMTAwMDAwMDAwMEJCMQorOjEwRjlGMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwM0Y4RjkwRjJDOQorOjEwRkEwMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjAwMQorOjEwRkExMDAwMTdBNDAxMDAzMjAwMDBBNjJBQzAwMTAwMDAwMDAwRjI3NQorOjEwRkEyMDAwMkE5NDAxMDA0ODhGMjI0OTFGN0MwMDAwMDAwMDAwNDlGMQorOjEwRkEzMDAwMUY4MDAxMDAwMDAwMDA0MDA1QjAwMTAwMDBGMDAwMEMzNAorOjEwRkE0MDAwMTg4QzAxMDAwQjk4MDA0Qzk1MzAwMTAwNTg4RjAwMDA3NQorOjEwRkE1MDAwOTJCMDAwMDA0RjhGMjI0MEFGNkYwMDAwMDBDMDAwMUUyOAorOjEwRkE2MDAwOTREQzAxMDAwMDAwMDAxNTk2QjAwMTAwODg5ODAwNDA2OQorOjEwRkE3MDAwMDUzMDAxMDA0RThGQTI0MDk3NkMwMDAwNjE4RjAwNDc1NworOjEwRkE4MDAwMTk4MDAwMDA1ODhGMDAwMDkyQjAwMDAwNEY4RjQzNDg0QgorOjEwRkE5MDAwNjEzMTAwMDAwMEQwMDAxRTYyREQwMTAwNTQ4RjI4NDA1QgorOjEwRkFBMDAwMDUzMDAwMDA1MDhGMjI0ODc3N0QwMDAwNTc4RjAwNDBCRQorOjEwRkFCMDAwODFCMjAwMDAwMDAwMDAxNTYyQjEwMTAwNjA4RjI4NDA5MworOjEwRkFDMDAwODEzMjAwMDA1NDhGMDA0MDgxQjIwMDAwMDAwMDFCMDAxMgorOjEwRkFEMDAwOTJCMDAxMDA1RDhGMjI0MTE5N0MwMDAwMDA4MDAwMDM3QworOjEwRkFFMDAwNDJDOTAxMDBFMjk1MDBGODAwMzAwMTAwNUE4RkEyNDE5RQorOjEwRkFGMDAwM0I1MDAwMDA2MThGMDA0OTAwQjAwMDAwRkYwNzAwMUU2RQorOjEwRkIwMDAwMDA4QzAxMDBFMjk1MDA0MDgxMzIwMTAwNjE4RjAwNDlDNAorOjEwRkIxMDAwMDBCMDAwMDAwMDAwMUI0NzE5ODAwMTAwNjQ4RjIyNUZDNQorOjEwRkIyMDAwMDE2QzAwMDA2Mzk5MDA0MDgxMzIwMTAwQjA4QTAwMDAzRQorOjEwRkIzMDAwODBCMDAwMDA2QjhGMjI1QzFGN0MwMDAwMjA4MDAwMDNERgorOjEwRkI0MDAwNDJDOTAxMDA2QjhGMjI0MEUzNkQwMDAwMDAwMDAwNDdCNgorOjEwRkI1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNjg4RkE4NDAyMworOjEwRkI2MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwNkI4RjQwMDVCMAorOjEwRkI3MDAwNDgzMTAwMDBGRkZGMDAwNzk0ODkwMTAwNzE4Rjg1Q0E5QQorOjEwRkI4MDAwOTQzMDAwMDA2Mzk5MTg1QzFGMDAwMTAwMEUwMDAwMEYwNAorOjEwRkI5MDAwMUU4QzAxMDA3ODg5MDA0MDgxQjIwMDAwMzY5ODE4MDA2MAorOjEwRkJBMDAwODAzMDAxMDBENThEMDA0NzE5ODAwMDAwMDAwMDAwNDAyMgorOjEwRkJCMDAwMTk4MDAxMDBENThEMjI0NzE5N0MwMDAwREQ5NTAwNDA5OQorOjEwRkJDMDAwODEzMjAxMDA3ODhGQTIwODgwMzIwMDAwRDU4RDAwNDA3QworOjEwRkJEMDAwODFCMjAwMDBDQjk3MDA0MDBEMzAwMTAwOUMwMTAwNDAzNQorOjEwRkJFMDAwNDU5OTAxMDBGRkZGMDAwQjk4ODgwMTAwOEIwMDJENTAwNAorOjEwRkJGMDAwMTdGMDAxMDA3RThGOTA0QzE2NDAwMDAwMDAwMDAwNDE3RAorOjEwRkMwMDAwMTdDMDAxMDA4MDhGMjI0M0U3N0QwMDAwMDAwMDAwNDQwMAorOjEwRkMxMDAwNDVDMTAxMDAwMDAwNjYyMDE3QTQwMTAwNjgwMTAwNDBGMgorOjEwRkMyMDAwNDM5OTAxMDA1QzAxMkVGMjgwQjAwMTAwM0UwMDAwNDBDQgorOjEwRkMzMDAwODBDRTAxMDA4NzhGMjQ0MDgxMzIwMDAwMDAwMDAwNDYwMgorOjEwRkM0MDAwODFDMDAxMDA4ODhGMDA5NEU1QjEwMDAwMDIwMDYyNDA4RAorOjEwRkM1MDAwN0VDRDAxMDAwMDAwMDA1NzgxQzAwMTAwMDAwMDJFMTA4MQorOjEwRkM2MDAwNDhCMTAxMDAwMzAwMDA0MEYwOEQwMTAwMDAwMDAwMDhEMQorOjEwRkM3MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQ5NgorOjEwRkM4MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwOEU4RkE4NDAzOAorOjEwRkM5MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDVCOQorOjEwRkNBMDAwNDhCMTAxMDA5QThGMjI0MEFGNkYwMDAwMDA0MDAwMDg2OQorOjEwRkNCMDAwOTREQzAxMDA4ODk4MDA0MDgxMzIwMTAwOTg4RjIyNDAzNgorOjEwRkNDMDAwOTc2QzAwMDBFMjk1MDAwODAwMzAwMTAwRDU4RDAwNDBERgorOjEwRkNEMDAwODFCMjAwMDAwMDAwMDA0MDA1QjAwMTAwRDU4RDAwNDc1MgorOjEwRkNFMDAwMTk4MDAwMDA5QThGNDM0ODYxMzEwMDAwMDA1MDAwMDhERAorOjEwRkNGMDAwNjJERDAxMDBBMDhGMjg0MDA1MzAwMDAwOUI4RjIyNDg2NAorOjEwRkQwMDAwNzc3RDAwMDBFMjk1MUIwODAwMzAwMTAwRDU4RDAwNDA5MgorOjEwRkQxMDAwODFCMjAwMDBENThEMUI0NzE5ODAwMDAwMzUwMDAwNDBERQorOjEwRkQyMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwQTU4RkEwNDMzNworOjEwRkQzMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwQTgwMDAwNDAxMQorOjEwRkQ0MDAwNDM5OTAxMDAzNzAwMkZGMDI0QjAwMTAwMDEwMDYzRjM1NAorOjEwRkQ1MDAwODJDQzAxMDBCMDhGQTI0MTlFMDYwMDAwRDU4RDIyNDRDNgorOjEwRkQ2MDAwODM3MDAwMDAzNjAwMDA0MDQzOTkwMTAwNTgwMDNENDM3NQorOjEwRkQ3MDAwRTdFMTAxMDBENThEMUZGMDI0NkMwMDAwNjM5OTAwNDg3NQorOjEwRkQ4MDAwODEzMDAxMDBCMDhBMjM0MTgzNkMwMDAwQjA4QTAwNDdCMworOjEwRkQ5MDAwODFCMDAwMDA1ODAwM0Q0Mzg1RTAwMTAwMDAwMDAwRjhGQworOjEwRkRBMDAwMzZCMDAxMDAwMDAwMDBGMDAwQjAwMTAwMjgwMDAwNDA2MworOjEwRkRCMDAwODM5ODAxMDAwNDk4MDA0NzYxMzEwMTAwMUI4NDAwODg4QQorOjEwRkRDMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDgwMDJERjAxOAorOjEwRkREMDAwOTRCMDAxMDAwMDAwMDBGODhFQjAwMTAwOTAwMDJERjBGQQorOjEwRkRFMDAwMTRCMDAxMDAwMDAwMDAwNTQ4QjEwMTAwODQ4RUEyNDA1QgorOjEwRkRGMDAwOEY3QzAwMDBCRThGMjI0NzhGN0MwMDAwODQ4RTAwNDhERAorOjEwRkUwMDAwMTk5MDAwMDAyRDkwMDA0MDgxQjIwMDAwMzYwMDJENUQ1OQorOjEwRkUxMDAwMDVCNDAxMDAzNzAwMkRGMzgwQjAwMTAwMDAwMDAwRjNBRAorOjEwRkUyMDAwOEVCMDAxMDA1QzAwM0Q0MzgxRTAwMTAwQTgwMDJERjA5MAorOjEwRkUzMDAwOTRCMDAxMDAwMDAwMDBGMDI0QjAwMTAwMjAwMDAwMTA4OAorOjEwRkU0MDAwODZEQzAxMDA0MDgwMDAwMzQ0QzkwMTAwRTM5NDAwNEFCRAorOjEwRkU1MDAwRjAzMTAxMDAzNjAwMkY1QzFGOTAwMTAwQ0M4RkEyNTBDMgorOjEwRkU2MDAwOEY1MDAwMDAzNDAwMjA0MEUxQjEwMTAwRDU4RDAwNDBFQQorOjEwRkU3MDAwODFCMjAwMDAwMDAwNjM0MTgxQzAwMTAwQ0Y4RkEwNDMyOAorOjEwRkU4MDAwODE2QzAwMDAwMDAwNjM0MDgxQjAwMTAwMzcwMDIwNDcxMgorOjEwRkU5MDAwRTZCMTAxMDBENThEMjI0NzgwMzIwMDAwMDQwMDAwNDcwMgorOjEwRkVBMDAwMENGNDAxMDAwMDAwMDA0RjhGODQwMTAwRTQ4RjIyNDcxMgorOjEwRkVCMDAwMEM2QzAwMDA1ODAwM0Q0MzgxRTAwMTAwRTQ4RjFGRjAwRQorOjEwRkVDMDAwMjQ2QzAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAxNgorOjEwRkVEMDAwNDJDOTAxMDBERDhGMjI0MEUzNkQwMDAwMDAwMDAwNDVCMworOjEwRkVFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwREE4RkE4NDAxRQorOjEwRkVGMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwREQ4RjQyNDA2RQorOjEwRkYwMDAwMDUzMDAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBNUREQQorOjEwRkYxMDAwNjk5MzAxMDBFMjhGMjM0MTBENkMwMDAwQkY4RjAwMDU0MworOjEwRkYyMDAwNDhCMTAwMDA2Mzk5MDAwNTQ4MzEwMTAwQjA4QTAwNDhEQgorOjEwRkYzMDAwODFCMDAwMDBENThEMjI0MDhGNkMwMDAwMzY5ODAwNUZBNAorOjEwRkY0MDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwQTIwMDAwNDA0OAorOjEwRkY1MDAwNDM5OTAxMDAwMDAwMDBGMzg0QjAwMTAwQTYwMDJENDk4MAorOjEwRkY2MDAwMTk5MDAxMDAwMjAwMDBGMjgwRjQwMTAwQjgwMDJENDA1OQorOjEwRkY3MDAwODFCMjAxMDAwMDAwMDBGMjgwQzAwMTAwMDAwMDAwNDBEQQorOjEwRkY4MDAwODJGODAxMDAxOTAwMDA0MDgxOTgwMTAwRjM4RkEwNDAyMQorOjEwRkY5MDAwODI2QzAwMDAyQzAxMDA0MDgxOTgwMTAwRjM4RkEzNDA4NworOjEwRkZBMDAwODI2QzAwMDAwMDAwMDA0MTgwQjAwMTAwRjU4RjIwNEMwMQorOjEwRkZCMDAwODU2QzAwMDAwMDAwMDA0MTg1QzAwMTAwODYwMDIwNDBFMworOjEwRkZDMDAwRTRCMTAxMDBBMjAwMjA0MkU2QjEwMTAwRDU4RDAwNDA1RAorOjEwRkZEMDAwODFCMjAwMDBDNTk3MDA1MDgxMzAwMTAwRDU4RDAwNDBFRQorOjEwRkZFMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDQwMDIyRjAzNQorOjEwRkZGMDAwODAzMDAwMDAwMDAwMDA0MDhEQjAwMTAwNTU5OTAwNDBBNQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA4NzMwMDEwMEIwMDAyRjVDMUY5MDAxMDAwMDAwNjBGMEZECis6MTAwMDEwMDA4MEMwMDEwMDM2OTgwMDVGODEzMDAxMDBENThEMDA0MDFFCis6MTAwMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDBENThEMjI0NjVDCis6MTAwMDMwMDAxOTdDMDAwMEEwMDAwMDQwNDc5OTAxMDAwMTAwNjJGMjE1Cis6MTAwMDQwMDA5NkNDMDEwMEQ1OERBNjQwODEzMjAwMDAzNjk4MDA0QTNBCis6MTAwMDUwMDA4MTMwMDEwMDBCOTgwMDQ2OTUzMDAxMDBENThEMDA0MDlECis6MTAwMDYwMDA4MUIyMDAwMEQ1OEQyMjQ5MTk3QzAwMDA4NjAwMDA0MDM1Cis6MTAwMDcwMDA0Nzk5MDEwMDAxMDA2MkYyODBDQzAxMDBENThEQTY0MEI1Cis6MTAwMDgwMDA4MTMyMDAwMDM2OTgwMDRBODEzMDAxMDAwQjk4MDA0NzA5Cis6MTAwMDkwMDA5NTMwMDEwMEQ1OEQwMDQwODFCMjAwMDA3NDk1MDA0MDdDCis6MTAwMEEwMDA4MTMyMDEwMEQ1OEQwMDVDMUY5MDAwMDBENThEMDA0MDhECis6MTAwMEIwMDA4MUIyMDAwMEQ1OEQwMDQwODFCMjAwMDBCQTAwMDA0MDNFCis6MTAwMEMwMDA0Nzk5MDEwMDAxMDA2MkYyODBDODAxMDAxOTkwOTA0MDM4Cis6MTAwMEQwMDA4MDMyMDAwMEZGRkY2MjQwODE5ODAxMDBBNDAwMDA0MEQwCis6MTAwMEUwMDA0Nzk5MDEwMEQ1OEQyMjQwRTU2RDAwMDBENThEMDA0MTc2Cis6MTAwMEYwMDBFNUMxMDAwMEM1OTcwMDREODEzMDAxMDBENThEMDA0MDVECis6MTAwMTAwMDA4MUIyMDAwMDVDMDAwMDQwNDc5OTAxMDAwNDAwMjJGMDI5Cis6MTAwMTEwMDA5NjMwMDAwMDAwMDAwMDQwRTFCMTAxMDAwMDgwMDAwM0MzCis6MTAwMTIwMDA0NEM5MDEwMDAwMDAwMDRCRTBCMTAxMDAwMDAwMDA0MEE0Cis6MTAwMTMwMDA4REIwMDEwMDU1OTkwMDQwODczMDAxMDA4QjAwMDA0MEQwCis6MTAwMTQwMDA0Nzk5MDEwMDI5OTA4MEYzOTYzMDAwMDAwMDAwMDA0MDlDCis6MTAwMTUwMDBFNzgxMDEwMDAwMDAwMDQ3MTk5MDAxMDBENThEMDA1Qzg3Cis6MTAwMTYwMDAxRjkwMDAwMDM0MDAwMDQwNDU5OTAxMDAwMTAwMDA0MDRDCis6MTAwMTcwMDBGNTk5MDEwMDAwMTEwMDQwRTU5OTAxMDBERDk1MDA0MDZFCis6MTAwMTgwMDA4MTMyMDEwMDNFOTBBMjA4ODAzMjAwMDAzNzAwMDA0MDFBCis6MTAwMTkwMDA0Nzk5MDEwMDAwMDAwMEYzODJCMDAxMDAwMDAwNjM1MUE0Cis6MTAwMUEwMDA4M0QwMDEwMDM0MDAwMDQwNDc5OTAxMDAwMTAwNjNGMzRGCis6MTAwMUIwMDA4NENDMDEwMDM2OTA5RjQyODAzMjAwMDAwMDAwNjM0MkYwCis6MTAwMUMwMDA4NUIwMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMUJGCis6MTAwMUQwMDAwMEMwMDEwMDM4OTAzNzVDNjEzMTAwMDAwMDAwMDAxQjU2Cis6MTAwMUUwMDA2MkIxMDEwMDM5OTBBODRCMTkxMDAwMDAwMDAwMDAwMDE2Cis6MTAwMUYwMDA2MkIxMDEwMDNCOTBBODQwODEzMjAwMDAwNThBMTc0MDlGCis6MTAwMjAwMDA4MUIyMDAwMDAwODAwMDAzNDJDOTAxMDA5MDAwMkRGMDdGCis6MTAwMjEwMDA5NEIwMDEwMEFDMDAyREYwMzBCMDAxMDAzNTAwMkRGMDlECis6MTAwMjIwMDAyOEIwMDEwMDU4MDAzRTQzRTdFMTAxMDAwMTAwMDAxODNBCis6MTAwMjMwMDBGMEM5MDEwMDAwMDAwMDRBRTBCMTAxMDAzODAwMjAwMEQwCis6MTAwMjQwMDBFMEIxMDEwMDNDMDAyMDFCRTBCMTAxMDA0MDAwMjA0MDczCis6MTAwMjUwMDBFMUIxMDEwMDAwMDAwMDQwMkJCMDAxMDAxQTk4MDA0MEZECis6MTAwMjYwMDAwRDMwMDEwMDAwMDAwMDE4MTZDMDAxMDA0RDkwQTAxNEQwCis6MTAwMjcwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDAwRTAwMDBBMjVCCis6MTAwMjgwMDA0NEM5MDEwMDAwMDAwMDE4RjhCMTAxMDBCMDAwMkQxNEFECis6MTAwMjkwMDBGOEIxMDEwMDEwNTAwMDQwODc5ODAxMDA1NjkwMjI0QUEyCis6MTAwMkEwMDAxOTdDMDAwMDAwMzAwMDQzODZDODAxMDAwMDMwMDAwQkJDCis6MTAwMkIwMDAxNkM4MDEwMDU2OTBBNDQwODEzMjAwMDAwMDAwMDA0MUExCis6MTAwMkMwMDAxN0MwMDEwMDAxMDA2RTQzODY5ODAxMDA1MTk4MDAzMDZDCis6MTAwMkQwMDA4MTMwMDEwMDVBOTBBMDQxMTc0MDAwMDAwMDAwMDA0MTA5Cis6MTAwMkUwMDAxN0MwMDEwMDYxOTAyMjRBMTk3QzAwMDAwODAwMDBBMjlBCis6MTAwMkYwMDA0NEM5MDEwMENDMDAyREFCRjlCMTAxMDAwMDAwMDBBQkY2Cis6MTAwMzAwMDAxN0MwMDEwMDYwOTBBMEYwMTY0NDAwMDAwMDAwMDA0MUZBCis6MTAwMzEwMDAxN0MwMDEwMDAwMDA2NEYwODJCMDAxMDA5MDAwMDA0MEFFCis6MTAwMzIwMDA0NTk5MDEwMDAwMDA2MDQxMzFDMDAxMDBCQzAwMDA0MDVGCis6MTAwMzMwMDA0Mzk5MDEwMDY3OTAwNjBDODAzMjAwMDBBMDAwMjBGMjczCis6MTAwMzQwMDBFNEIxMDEwMDA0MDAwOTQ2MTkxMDAwMDA5QzAxMDA0MEJFCis6MTAwMzUwMDA0NTk5MDEwMEZGRkYwMDBCOTg4ODAxMDA4QjAwMkQ1MDhDCis6MTAwMzYwMDAxN0YwMDEwMDZDOTA5MDRDMTY0MDAwMDAwMDAwMDA0MTE2Cis6MTAwMzcwMDAxN0MwMDEwMDZFOTAyMjQzRTc3RDAwMDAwMDAwMDA0NDlBCis6MTAwMzgwMDA0NUMxMDEwMDAwMDA2NjIwMTdBNDAxMDA2ODAxMDA0MDdCCis6MTAwMzkwMDA0Mzk5MDEwMDVDMDEyRUYyODBCMDAxMDAzRTAwMDA0MDU0Cis6MTAwM0EwMDA4MENFMDEwMDc1OTAyNDQwODEzMjAwMDAwMDAwMDA0NjlDCis6MTAwM0IwMDA4MUMwMDEwMDc2OTAwMDk0RTVCMTAwMDAwMjAwNjI0MDI3Cis6MTAwM0MwMDA3RUNEMDEwMDAwMDAwMDU3ODFDMDAxMDAwMDAwMkUxMDBBCis6MTAwM0QwMDA0OEIxMDEwMDAzMDAwMDQwRjA4RDAxMDAwMDAwMDAwODVBCis6MTAwM0UwMDBGMEIxMDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NDFGCis6MTAwM0YwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA3QzkwQTg0MEQyCis6MTAwNDAwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTQxCis6MTAwNDEwMDA0OEIxMDEwMDg2OTAyMjQwQUY2RjAwMDAwMDQwMDAwODA0Cis6MTAwNDIwMDA5NERDMDEwMDg4OTgwMDQwODEzMjAxMDA4MTkwQTI0MDU0Cis6MTAwNDMwMDA5NzZDMDAwMDM1MDAwMDQwNDc5OTAxMDA4QTkwMDA0MDA5Cis6MTAwNDQwMDAwNUIwMDAwMDg2OTA0MzQ4NjEzMTAwMDAwMDUwMDAwODZDCis6MTAwNDUwMDA2MkREMDEwMDg3OTBBODQwMDUzMDAwMDAzNTAwMUI0MDk4Cis6MTAwNDYwMDA0Nzk5MDEwMDAxMDA2M0YzODRDODAxMDA4RDkwQTA0MzA3Cis6MTAwNDcwMDA4NTZDMDAwMDAwMDA2MzQwODVCMDAxMDAzNzAwMDA0MDNCCis6MTAwNDgwMDA0Nzk5MDEwMDAxMDA2M0YzODJDQzAxMDA4QjAwMDA0MDFBCis6MTAwNDkwMDA0Nzk5MDEwMDAwMDAwMDQ1RTc5MTAxMDAzNjk4MDA1RjkwCis6MTAwNEEwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDAzNzAwMDA0MDRFCis6MTAwNEIwMDA0Nzk5MDEwMDdGOTYwMEYzOTQzMDAxMDAyRDkwMjI0QTY1Cis6MTAwNEMwMDA4MDMyMDAwMEFCOEUwMDQwODFCMjAwMDAzNzAwMDA0MDU3Cis6MTAwNEQwMDA0Nzk5MDEwMDdGOTYwMEYzOTQzMDAxMDA3QjhFMjI0QUY5Cis6MTAwNEUwMDA4MDMyMDAwMEFCOEUwMDQwODFCMjAwMDAzNjAwMDA0MDM4Cis6MTAwNEYwMDA0Mzk5MDEwMDAwMDAwMEZCMTJCMDAxMDAwRjAwMDBGMzVGCis6MTAwNTAwMDA5MDg4MDEwMDA0MDAwMEYzMENGNDAxMDBBNThFMjIwNjdGCis6MTAwNTEwMDA5MDZDMDAwMDVDMDAzRDQzMTNFMDAxMDBBODAwMkRGMDRBCis6MTAwNTIwMDA5NEIwMDEwMDM3MDAyRkYwMjRCMDAxMDAzNjAwMkE1MEFCCis6MTAwNTMwMDBFN0QxMDEwMDAwMDA2MzQxMTNDMDAxMDBBNzkwQTA0MzcwCis6MTAwNTQwMDAxMzZDMDAwMDAwMDAwMDQwRTdCMTAxMDBFMTk0MDAxMENFCis6MTAwNTUwMDA4NjMwMDEwMDFCODQwMDg4MUNCMDAwMDBBOTkwNDIwNTcxCis6MTAwNTYwMDA0ODMxMDAwMDAwMDAwMDQ0OTM5MzAxMDBBNThFMUE1REZECis6MTAwNTcwMDA2OTkzMDAwMDM2MDAyRDEwODZCMDAxMDA1QzAwM0Q0M0Y5Cis6MTAwNTgwMDBFN0UxMDEwMEE4MDAyREYwOTRCMDAxMDAzNTAwMkZGMDQ0Cis6MTAwNTkwMDAyNEIwMDEwMDAxMDA2QkZCODRDODAxMDBCNDkwQTA0M0FCCis6MTAwNUEwMDA4NTZDMDAwMDM1MDAyMDQwRTdCMTAxMDAwMDAwMDA0MEVDCis6MTAwNUIwMDA4MUIyMDEwMDAxMDA2M0YzMTJDODAxMDBCNzkwQTA0M0FCCis6MTAwNUMwMDAxMzZDMDAwMDAwMDAwMDQwRTdCMTAxMDA0MDgwMDAwMzEwCis6MTAwNUQwMDA0NEM5MDEwMEUzOTQwMDRBRjAzMTAxMDAxQjg0MDA4ODAzCis6MTAwNUUwMDAxQ0IwMDAwMEJBOTA0MjA1NDgzMTAwMDAwMDAwMDA0NEYxCis6MTAwNUYwMDA5MzkzMDEwMDAwMDAxQTVENjk5MzAxMDAzNzAwMDA0MEU5Cis6MTAwNjAwMDA0Nzk5MDEwMDExMDA2M0YzODJDQzAxMDBBOThGMjI0MUI4Cis6MTAwNjEwMDA5RTA2MDAwMDM1MDAwMDQwNDM5OTAxMDA1ODAwM0Q0MzBDCis6MTAwNjIwMDBFN0UxMDEwMDAwMDAwMEY4MzZCMDAxMDBCMzhGMDBGMEYwCis6MTAwNjMwMDAwMEIwMDAwMDVFMDEyRDA1NDhCMTAxMDBDNTkwNDdGMkYxCis6MTAwNjQwMDAxMjMwMDAwMDAwOTkzRjQyMTNGMDAxMDBDQTkwMjI0Nzg3Cis6MTAwNjUwMDBFNzdEMDAwMDZCODQxRjg4MUNCMDAwMDBDNDkwMDA0MDQwCis6MTAwNjYwMDA4MUIyMDAwMDAwMDAwMDQ3RTc5MTAxMDAwMDAwMUY0MjM2Cis6MTAwNjcwMDAxOTkwMDEwMDc1MDAwMDQwNjE5OTAxMDBDQzkwQThCMTZCCis6MTAwNjgwMDAwQzMwMDAwMDVDOTcwMDEwOTQzMDAxMDAxQjg0MDA4ODNGCis6MTAwNjkwMDAxQ0IwMDAwMDVFMDEyRTA1NDhCMTAxMDBDMEE4M0Q0NjE3Cis6MTAwNkEwMDAwREUwMDEwMDAwMDAwMDQwOTdCMDAxMDBENjkwMjI0MDBDCis6MTAwNkIwMDBFMTZEMDAwMDA0MDAwMjQxOTc0MDAwMDBEMzkwMDA1MDFCCis6MTAwNkMwMDA0M0MxMDAwMEUyOTAyMjRCODAzMjAwMDAwMDAwNjI0QkU4Cis6MTAwNkQwMDAxMjk0MDEwMDA5MDAwMDA3OTZFNDAxMDAwMDAwMDBBNzQxCis6MTAwNkUwMDA5N0MwMDEwMDMwMDAwMDEwOTRDODAxMDAwMDgwMDA0QTRCCis6MTAwNkYwMDA0NDk5MDEwMDAwMDAwMDQyRjFCMTAxMDA1RTAxMDA0QjhECis6MTAwNzAwMDBGMEM5MDEwMDVFMDEwMDA1RTBDOTAxMDAwMDAwMDA0NERECis6MTAwNzEwMDA2MUIxMDEwMDIwMDAwMDRBNjJERDAxMDBFMDkwQTg0MEM0Cis6MTAwNzIwMDA4MTMyMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MDI4Cis6MTAwNzMwMDBGMUIxMDEwMDA0MDAwMDA5OTZFNDAxMDAwMDAwNjhBODdFCis6MTAwNzQwMDA5N0MwMDEwMEQ0MDAwMDA1RTBDOTAxMDAwMDAwMDA0NDhBCis6MTAwNzUwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBFODkwQTg0MDAyCis6MTAwNzYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDk5M0Y0MkM5Cis6MTAwNzcwMDAxM0YwMDEwMEVDOTA0NzQwODEzMjAwMDAzRjAwMDBGMzhECis6MTAwNzgwMDA5Njg4MDEwMDAwMDAwMDQwRTdCMTAxMDAwMDAwMUY1NUZECis6MTAwNzkwMDA2MUIxMDEwMDAwMDAwMDA2NjJCMTAxMDBGMDkwQTg0MEM0Cis6MTAwN0EwMDA4MTMyMDAwMEY1OTAyMjRCODAzMjAwMDAwMDAwMDA0QkE3Cis6MTAwN0IwMDA2MkIxMDEwMEYzOTBBODQwODEzMjAwMDAwMDAwMDA5NzcwCis6MTAwN0MwMDAxM0IwMDEwMDAwMDAwMDk2OTdCMDAxMDBGQjkwMjAwOUQzCis6MTAwN0QwMDA5NjZDMDAwMEZCOTAxRjA5OTYyNDAwMDA2Qjg0MDA4ODMzCis6MTAwN0UwMDAxQ0IwMDAwMEY2OTAwMDQwODFCMjAwMDBDNTk3MDA1NzkxCis6MTAwN0YwMDA4MTMwMDEwMEMwOEQwMDA1NDhCMTAwMDAyRTAwMDA0MDhFCis6MTAwODAwMDA0Mzk5MDEwMDAxOTEyMkYzODAzMjAwMDBDNTk3MDA0MjE0Cis6MTAwODEwMDA4MTMwMDEwMDA1OEEwMDQwODFCMjAwMDAzNjk4MDA1MjA0Cis6MTAwODIwMDA4MTMwMDEwMEMwOEQwMDQyMTk4MDAwMDBDNTk3MDAzQTU4Cis6MTAwODMwMDA4MTMwMDEwMDM2OTgwMDUyODEzMDAxMDBDMDhEMDA0MEE3Cis6MTAwODQwMDA4MUIyMDAwMDAwMDAwMDQwMDVCMDAxMDBERjk2MDA0MENBCis6MTAwODUwMDA5NTMwMDEwMEMwOEQyMjQwOTU2QzAwMDAwQzkxQTI0MEEzCis6MTAwODYwMDAxRjdDMDAwMEUyOTUwMDQwODEzMjAxMDAwNThBMDA0MEIzCis6MTAwODcwMDA4MUIyMDAwMDA0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMkMwCis6MTAwODgwMDAwMkIwMDEwMDhBOTYwMDUyOTUzMDAxMDA5MTk2MDA0QjBCCis6MTAwODkwMDAwMkIwMDAwMDA1OEEwMDQwODFCMjAwMDAwQTk5MDA0MEMxCis6MTAwOEEwMDA5NTMwMDEwMDE4OTFBMjA4ODAzMjAwMDAxODkxQTIxNjFDCis6MTAwOEIwMDA4MDMyMDAwMDA1OEEyMjQyMTk3QzAwMDAwMDAwMDA0QkIzCis6MTAwOEMwMDAxOTkwMDEwMEM1OTcwMDNBODEzMDAxMDAwNThBMDA0MDY3Cis6MTAwOEQwMDA4MUIyMDAwMDAwMjMwMEE2MTZCMDAxMDAxQjkxODMxRTA4Cis6MTAwOEUwMDA4MDMyMDAwMDAwMDgwMDBCMTZEQzAxMDAwMDAwMDAwMDUwCis6MTAwOEYwMDAyQUMwMDEwMDBFOTgwMDA4ODAzMDAxMDAxRjkxMDA1RUEwCis6MTAwOTAwMDAxNzkwMDAwMDJGOTgwMDQzNjEzMTAxMDBFRjk0MDA0MEUwCis6MTAwOTEwMDA4RDMwMDEwMDE2OTgwMDA3MTYxNDAxMDAwMDgwMDAxMEE5Cis6MTAwOTIwMDA0MkM5MDEwMDI3OTEyMjQwRTM2RDAwMDAwMDAwMDA0MzBFCis6MTAwOTMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAyNDkxQTg0MDc3Cis6MTAwOTQwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBCNzk3MDA1RTU1Cis6MTAwOTUwMDAwNTEwMDEwMEUyOTUwMDQwODEzMjAxMDAyQjkxMjIwOTJGCis6MTAwOTYwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBDNThEMDAwNTJFCis6MTAwOTcwMDA0OEIxMDAwMDBGOTcwMDQwODEzMjAxMDBDMDhEMDA0MDU3Cis6MTAwOTgwMDA4MUIyMDAwMDAwMDAwMDRBMUY5MDAxMDAzMjkxMjI0MzEyCis6MTAwOTkwMDAzRDdDMDAwMDAwMDAwMDQ0MTk5MDAxMDAwMDAwMDA0MzZECis6MTAwOUEwMDAzRDgwMDEwMDMzOTEwMDQyMTk5MDAwMDAxNDAwMkQ0NTU0Cis6MTAwOUIwMDAxRjkwMDEwMDhGOTE4MzFFODAzMjAwMDA4RjkxMDA0NEIwCis6MTAwOUMwMDAxOTkwMDAwMEQ0OTUwMDQwODEzMjAxMDA0NzkxQTIwODlGCis6MTAwOUQwMDA4MDMyMDAwMDQ3OTFBMjE2ODAzMjAwMDA0MzkxQTI0MjZCCis6MTAwOUUwMDAxOTdDMDAwMDAwODIwMDAyMDREQzAxMDBBMDk4MDA0MDk1Cis6MTAwOUYwMDA0Nzk5MDEwMEU5ODkwMDQxODkzMDAxMDA0MDkxQTI0MUY1Cis6MTAwQTAwMDAxOTdDMDAwMEUyOTUwMDQwODEzMjAxMDAwNThBMDA0MDE3Cis6MTAwQTEwMDA4MUIyMDAwMDhBOTYwMDE1OTQzMDAxMDA5MTk2MDA0QjM3Cis6MTAwQTIwMDAwMkIwMDAwMDA1OEEwMDQwODFCMjAwMDAwRjk3MDA0MDJDCis6MTAwQTMwMDA4MTMyMDEwMDAwMDAwMDRCMTk5MDAxMDBDNTk3MDAzQTc3Cis6MTAwQTQwMDA4MTMwMDEwMDA1OEEwMDQwODFCMjAwMDA0QTkxMjI0MkIzCis6MTAwQTUwMDAxOTdDMDAwMDBGOTcwMDQwODEzMjAxMDA0QjkxMDA0MDRCCis6MTAwQTYwMDA4MUIyMDAwMERGOTYwMDQwODEzMjAxMDA3NzkxMjI0MTdGCis6MTAwQTcwMDAxOTdDMDAwMEMwMDAwMDE1OThDODAxMDA3NzkxQTAwQkY4Cis6MTAwQTgwMDA5OTZDMDAwMDMwMDAwMDEwODBDODAxMDAwMDgwMDA0MDE4Cis6MTAwQTkwMDA0NDk5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzgyCis6MTAwQUEwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDA0MDBGCis6MTAwQUIwMDA2MkIxMDEwMDUzOTFBODAwRTAzMTAwMDAxQjg0MDA4ODVFCis6MTAwQUMwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDBDMDAwMDAxNTg2Cis6MTAwQUQwMDA5OEM4MDEwMDMwMDAyRTBCOTlEMDAxMDAwMDAwNkE1MDI4Cis6MTAwQUUwMDA5OUMwMDEwMEMwMDA2MjAxODBDQzAxMDAwQzgwMDAwM0FECis6MTAwQUYwMDA0MkM5MDEwMDJEMDAyREYwMjJCMDAxMDAwMDAwMDA0QzgxCis6MTAwQjAwMDA4MEMwMDEwMDAwMDAwMDVDMjM4MDAxMDBENDAwM0Y0MTUwCis6MTAwQjEwMDBFN0UxMDEwMDBCMDAwMDExRTRGNTAxMDAyRjAwMjA0NzgwCis6MTAwQjIwMDBFN0I1MDEwMDY0OTEyMzBCODE2QzAwMDAwMDAwMDA0RkM5Cis6MTAwQjMwMDBFNTkxMDEwMDAwMDAwMDA4ODBCMDAxMDAwMDAwMDAwQkZBCis6MTAwQjQwMDAwM0IwMDEwMDAwMDAwMDE1MDJEMDAxMDAwRTk4MDAwMDYzCis6MTAwQjUwMDAyQTQwMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDg0Cis6MTAwQjYwMDA2MkREMDEwMDY5OTFBODQwODEzMjAwMDAxQjg0MDA4ODg5Cis6MTAwQjcwMDAxQ0IwMDAwMEUyOTUwMDA1NDgzMTAxMDBDMDAwMDAwMUYyCis6MTAwQjgwMDA4MENFMDEwMDc1OTEyNjExMDAzMDAwMDAxMDAwMDAwMDk5Cis6MTAwQjkwMDAyQUM4MDEwMDAwMDAwMDA4ODBCMDAxMDAwMDAwMDAwMTI4Cis6MTAwQkEwMDA4MEMwMDEwMEMwMDAwMDQwOTk5ODAxMDAwMDAwMDAwMUQxCis6MTAwQkIwMDA5OEQwMDEwMDBFOTgwMDRDMDIzMDAxMDBDMDAwMDA0MEE3Cis6MTAwQkMwMDAwMzk4MDEwMDdDOTEwMDQwODFCMjAwMDAzMDAwMkYwOEEyCis6MTAwQkQwMDA4MEIwMDEwMEMwMDAwMDE1RjRDOTAxMDBDMDAwMDAwMTkwCis6MTAwQkUwMDBFNENEMDEwMEMwMDAwMDQwMDM5ODAxMDAwRTk4MDAwMDExCis6MTAwQkYwMDAyQTQwMDEwMDgxOTEyMjQ0MUY3QzAwMDBBQzAwMkY0MDVDCis6MTAwQzAwMDAxM0IwMDEwMDAwMDAwMDAxRTBDMTAxMDBCMDAwMDA0MDhECis6MTAwQzEwMDA0Nzk5MDEwMDgyOTEwMDAxRTBEMTAwMDBFRjk0MDA0MDZCCis6MTAwQzIwMDA4RDMwMDEwMDgwNjMwMEE2MTZCMDAxMDAxNjk4MDAwNzAxCis6MTAwQzMwMDAxNjE0MDEwMDAwODAwMDEwNDJDOTAxMDA4QTkxMjI0MDcwCis6MTAwQzQwMDBFMzZEMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMEFFCis6MTAwQzUwMDA2MkREMDEwMDg3OTFBODQwODEzMjAwMDAxQjg0MDA4ODdBCis6MTAwQzYwMDAxQ0IwMDAwMEI3OTcwMDVFMDUxMDAxMDA4RDkxMjIwOUFECis6MTAwQzcwMDA4MDMwMDAwMDM2OTgwMDQwODEzMjAxMDBDMDhEMDAwNUIwCis6MTAwQzgwMDA0OEIxMDAwMDhGOTEwMDRBMUY5MDAwMDAwMDAwMDAwMDUyCis6MTAwQzkwMDAxMEIwMDEwMDI0MDAyRDE1MTBDMDAxMDAyODAwMkRGMDE3Cis6MTAwQ0EwMDAxNkIwMDEwMDIyMDAyREYwMjZCMDAxMDAxNDAwMkZGMjMyCis6MTAwQ0IwMDAwQ0IwMDEwMDAwMDAwMDAxRTBEMTAxMDAwMDAwMDAxMEI0Cis6MTAwQ0MwMDAzMkIwMDEwMDAwMDAwMDBCMUJCMDAxMDAwNDAwMUYxNTMyCis6MTAwQ0QwMDAxQTUwMDAwMDAwMDAwMDQwMjNCMDAxMDAwMDAwMDAwMTk1Cis6MTAwQ0UwMDAyQUIwMDEwMDcxOTcwMDQwMzVCMDAwMDAyRjAwMjA0MDZECis6MTAwQ0YwMDBFN0IxMDEwMEQzOTFBMjQ1MUY3QzAwMDAyNDAwMjAwQjI2Cis6MTAwRDAwMDBFMEIxMDEwMDI4MDAyMDEzRTBCMTAxMDAyMjAwMjAwNjFDCis6MTAwRDEwMDBFNEIxMDEwMEE5OTEyMjVDMUY3QzAwMDAwMDAwMDA1QzhFCis6MTAwRDIwMDAxRjgwMDEwMDMwODAwMDEwNDJDOTAxMDBBOTkxMjI0MEJCCis6MTAwRDMwMDBFMzZEMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEI5Cis6MTAwRDQwMDA2MkREMDEwMEE1OTFBODQwODEzMjAwMDAxQjg0MDA4ODZCCis6MTAwRDUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwMDgwMDAxOTJGCis6MTAwRDYwMDA0MkM5MDEwMENDOTEyMjQwRTM2RDAwMDBCQTkxMjI0MkI5Cis6MTAwRDcwMDAxOTdDMDAwMDM3OTcwMDQwODEzMjAxMDA4OTk1MDA0MEJFCis6MTAwRDgwMDA4MTMyMDEwMEM3OTEyMjRCODAzMjAwMDAwMDAwMDA0M0Y1Cis6MTAwRDkwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCMDkxQTg0MDg3Cis6MTAwREEwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBCNjkxMjI0MUYzCis6MTAwREIwMDAxOTdDMDAwMEY4OTUwMDQwMTEzMDAxMDBCNzkxMDAwNTQyCis6MTAwREMwMDA0OEIxMDAwMEUyOTUwMDQwODEzMjAxMDBCOTkxMjIwOTRBCis6MTAwREQwMDA4MDMwMDAwMDM2OTgwMDQwODEzMjAxMDA2Rjg0MDA0MDZFCis6MTAwREUwMDAwNUIwMDAwMDM3OTcwMDQwODEzMjAxMDA4NTk1MDA0MDMyCis6MTAwREYwMDA4MTMyMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDk5Cis6MTAwRTAwMDA2MkREMDEwMEJEOTFBODQwODEzMjAwMDAxQjg0MDA4ODkyCis6MTAwRTEwMDAxQ0IwMDAwMEMzOTEyMjQxMTk3QzAwMDBGODk1MDA0MEVECis6MTAwRTIwMDAxMTMwMDEwMEM0OTEwMDA1NDhCMTAwMDBFMjk1MDA0MDc2Cis6MTAwRTMwMDA4MTMyMDEwMEM2OTEyMjA5ODAzMDAwMDAzNjk4MDA0MEJFCis6MTAwRTQwMDA4MTMyMDEwMDZGODQwMDQwMDVCMDAwMDAwMDAwMDA0M0MzCis6MTAwRTUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBDODkxQTg0MEFFCis6MTAwRTYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUQ3Cis6MTAwRTcwMDA0OEIxMDEwMENGOTEyMjQxMTk3QzAwMDBGODk1MDA0MDUzCis6MTAwRTgwMDAxMTMwMDEwMEQwOTEwMDA1NDhCMTAwMDBFMjk1MDA0MDBBCis6MTAwRTkwMDA4MTMyMDEwMEQyOTEyMjA5ODAzMDAwMDAzNjk4MDA0MDUyCis6MTAwRUEwMDAxMzMwMDEwMEM1OEQwMDQwMDVCMDAwMDAwMDgwMDAxOTFFCis6MTAwRUIwMDA0MkM5MDEwMERBOTEyMjQwRTM2RDAwMDAwMDAwMDA0M0M2Cis6MTAwRUMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBENjkxQTg0MDMwCis6MTAwRUQwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTY3Cis6MTAwRUUwMDA0OEIxMDEwMDAwMDAwMDQwMDVCMDAxMDBERTkxMjI0MTQwCis6MTAwRUYwMDAxOTdDMDAwMEY4OTUwMDQwMTEzMDAxMDBERjkxMDAwNUQ5Cis6MTAwRjAwMDA0OEIxMDAwMEUyOTUwMDQwODEzMjAxMDAwODAwMkQwQTNFCis6MTAwRjEwMDA4NEIwMDEwMDAwMDAwMEYwODJCMDAxMDAxNDAwMjA0MDA1Cis6MTAwRjIwMDBFMUIxMDEwMEU0OTEwMzFFODAzMjAwMDBFNTkxMDA0MTJGCis6MTAwRjMwMDA4N0IwMDAwMDIxMDAwMDQwODc5ODAxMDAwMDk3MDA0MDIyCis6MTAwRjQwMDA4MTMyMDEwMDAwMDAwMDVDMUY5MDAxMDBFOTkxMjIwOTNDCis6MTAwRjUwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBFQzkxMjI0NEFDCis6MTAwRjYwMDAxOTdDMDAwMDM2OTgwMDRGODEzMDAxMDAwMDAwMDA0NEQ5Cis6MTAwRjcwMDAxOTgwMDEwMEMwOERBMjRBMUY3QzAwMDBDNThEMDA0MDcxCis6MTAwRjgwMDA4MUIyMDAwMEJBMDAyMDQwRTVCMTAxMDBGMjkxOUMxNzQ3Cis6MTAwRjkwMDA4MDMyMDAwMENDMDAwMDQwNDM5OTAxMDAxMzk5MDA0MENBCis6MTAwRkEwMDA4MTMyMDEwMEEzOTgwMDQwMTMzMDAxMDBDMDAwMDA0MENFCis6MTAwRkIwMDA0Mzk5MDEwMEM0MDAyREYwODJCMDAxMDBFRTk4MDBGMENBCis6MTAwRkMwMDA4NDMwMDEwMEUyOTUwMDQwODEzMjAxMDBDNThEMjIwOTg0Cis6MTAwRkQwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBDNThEMDA0MDdECis6MTAwRkUwMDA4MUIyMDAwMDJFMDAwMDQwNDM5OTAxMDBGRTkxMjI0MDkyCis6MTAwRkYwMDBFNzZEMDAwMDMyMDAwMDQwNDM5OTAxMDAwNjkyQTI0MEQ0Cis6MTAxMDAwMDBFNTZEMDAwMENDOTYwMDQwODEzMjAxMDAyNDAwMjAwQkU5Cis6MTAxMDEwMDBFMEIxMDEwMDI4MDAyMDEzRTBCMTAxMDAyMjAwMjAwNjA5Cis6MTAxMDIwMDBFNEIxMDEwMDE0MDAyMDBBRTBCMTAxMDBDNThEMjIwOURECis6MTAxMDMwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBDNThEMDA0MDFDCis6MTAxMDQwMDA4MUIyMDAwMENDOTYwMDQwODEzMjAxMDA4NTk2MDA0MEJDCis6MTAxMDUwMDA4MTMyMDEwMDE0OTIyMjQxMTk3QzAwMDAwMDAwMDAwQjMzCis6MTAxMDYwMDA5OUIwMDEwMDA0MDAxRjE1OTg1MDAwMDAxNDkyMjAwMTRGCis6MTAxMDcwMDA5ODZDMDAwMDcwMDAwMDAzNDhDOTAxMDAwMDAwMkU0NjczCis6MTAxMDgwMDAxRjkwMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwM0JBCis6MTAxMDkwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDBBMDAwMDBBNDE1Cis6MTAxMEEwMDA2MkREMDEwMDExOTJBODAwRTAzMTAwMDAwMDAwMDAwNTlGCis6MTAxMEIwMDA0OEIxMDEwMEFDMDAyRjAwMTBCMDAxMDAwMDAwMDAwMTk5Cis6MTAxMEMwMDBFMEMxMDEwMDE0MDAyRjE1MTBDMDAxMDAwMDAwMDAwQTRCCis6MTAxMEQwMDA4MEIwMDEwMDAwMDA2MDAxODBEMDAxMDAwMDAwMDA0N0U2Cis6MTAxMEUwMDAxOTkwMDEwMDk2OTEyMjA5ODAzMjAwMDAzNjk4MDAwOTdCCis6MTAxMEYwMDA4MDMwMDEwMDk2OTEwMDQwMTNCMDAwMDAwMDgwMDAwMzkyCis6MTAxMTAwMDA0MkM5MDEwMDAwMDAwMEYwODJCMDAxMDAxMzAwMDA0MDVECis6MTAxMTEwMDA4Nzk4MDEwMDAwMDAwMDRDNDNDMTAxMDAwMDk3MDBGMEQ3Cis6MTAxMTIwMDA4NDMwMDEwMEMwOEQwMDVDMUY5MDAwMDAyQzAwMjA0MDI2Cis6MTAxMTMwMDBFN0IxMDEwMDJEMDAyMDQwRTdCMTAxMDBDMDhEMDA0MjYxCis6MTAxMTQwMDAxOTgwMDAwMEYyOTYwMDQwODEzMjAxMDAwQjk4MDA0ODlGCis6MTAxMTUwMDA5NTMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDIxCis6MTAxMTYwMDA2MkREMDEwMDI5OTJBODQwMTMzMDAwMDAxQjg0MDA4ODMyCis6MTAxMTcwMDAxQ0IwMDAwMDJGOTIwMDA1NDhCMTAwMDAyRTkyMDA0MEU0Cis6MTAxMTgwMDAxM0IwMDAwMDAwMDAwMDAwMTJCMDAxMDAwODAwMDA0MDkxCis6MTAxMTkwMDA0Mzk5MDEwMDE0MDAyREYwODJCMDAxMDAwNDAwMjJGMEY4Cis6MTAxMUEwMDA4NDMwMDAwMDEzMDAwMDQwODc5ODAxMDAwMDk3MDA0MDQxCis6MTAxMUIwMDA4MTMyMDEwMDAwMDAwMDVDMUY5MDAxMDA0NzkyMDAwOThECis6MTAxMUMwMDAwMEIwMDAwMEMwOEQ4NzQyMTkxMDAwMDA4QjAwMkY0NzJGCis6MTAxMUQwMDAxOTgwMDEwMEMwOEQwMDQwRTc5MTAwMDAyRjAwMDA0MDAxCis6MTAxMUUwMDA0Nzk5MDEwMDQ1OTIyMjQ3RTc3RDAwMDA2Njk1MDA0MDNGCis6MTAxMUYwMDBFNzMxMDEwMDQ1OTIyMjAwODAzMjAwMDA0MDkyQTI0MDc3Cis6MTAxMjAwMDAxRjdDMDAwMEUyOTUwMDQwODEzMjAxMDA0NTkyMDA0MEMxCis6MTAxMjEwMDA4MUIyMDAwMDMwMDAwMDQwNDM5OTAxMDAzMjAwMkRGMkZECis6MTAxMjIwMDA5NEIwMDEwMDhBOTYwMEYyMDIzMDAxMDA5MTk2MDA0QkMyCis6MTAxMjMwMDAwMkIwMDAwMDAwMDAwMDA1NDhCMTAxMDA0NjkyMDA0MEU1Cis6MTAxMjQwMDAwMUIwMDAwMDAwMDAwMDQwMDVCMDAxMDA0QzkyMjIwMEY3Cis6MTAxMjUwMDA4MDMyMDAwMDRCOTJBMjQyMTk3QzAwMDBERjk2MDA0MEQxCis6MTAxMjYwMDA4MTMyMDEwMDRDOTIwMDQwODFCMjAwMDAwRjk3MDA0MDkzCis6MTAxMjcwMDA4MTMyMDEwMEQ4OTIyMjVDMUY3QzAwMDAwMDAwMDA1Q0RCCis6MTAxMjgwMDAxRjgwMDEwMDAwODAwMDEwNDJDOTAxMDA1NDkyMjI0MERBCis6MTAxMjkwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDU2Cis6MTAxMkEwMDA2MkREMDEwMDUxOTJBODQwODEzMjAwMDAxQjg0MDA4ODU5Cis6MTAxMkIwMDAxQ0IwMDAwMEQ4OTIwMDA1NDhCMTAwMDBENDk1MDA0MDUxCis6MTAxMkMwMDA4MTMyMDEwMDVCOTJBMjA4ODAzMjAwMDA1QjkyQTIxNjdDCis6MTAxMkQwMDA4MDMyMDAwMEM1OTcwMDREODEzMDAxMDAwMDgyMDAwMjdECis6MTAxMkUwMDAwNERDMDEwMDA1OEEwMDQwODFCMjAwMDA3NDAwMDA0MDY3Cis6MTAxMkYwMDA0Mzk5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGMEY2Cis6MTAxMzAwMDA4NEIwMDEwMDAwMDAwMDQxOTZCMDAxMDA2OTkyMjI0MkMxCis6MTAxMzEwMDA5NjE0MDAwMDAwODAwMDEwNDRDOTAxMDA2NDAwNjg0MDc5Cis6MTAxMzIwMDA5Nzk4MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDA0MjY4Cis6MTAxMzMwMDBGMEIxMDEwMDcwMDAwMDA1RTBDOTAxMDAwMDAwMDA0NUE3Cis6MTAxMzQwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDA2NjkyQTg0MDNBCis6MTAxMzUwMDA4MTMyMDAwMDAwMDAwMDVDMUY5MDAxMDAwMDAwMDA0NTg5Cis6MTAxMzYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2QTkyQTg1Q0RBCis6MTAxMzcwMDAxRjAwMDAwMDFCODQwMDg4MUNCMDAwMDA1RTAxMkQwNUNBCis6MTAxMzgwMDA0OEIxMDEwMDZFOTI0N0YyMTIzMDAwMDAwMDk5M0Y0MkNFCis6MTAxMzkwMDAxM0YwMDEwMDczOTIyMjQ3RTc3RDAwMDA2Qjg0MUY4OEUxCis6MTAxM0EwMDAxQ0IwMDAwMDZEOTIwMDQwODFCMjAwMDAwMDAwMDA0N0I4Cis6MTAxM0IwMDBFNzkxMDEwMDA0MDAxRjA5OTZFNDAxMDAwMDgwMDAxMDdECis6MTAxM0MwMDA0NEM5MDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwNjhBODE4Cis6MTAxM0QwMDA5N0MwMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDgwMDAwMzlECis6MTAxM0UwMDA0NDk5MDEwMDAwMDAwMDQ0NjFCMTAxMDAwMDAwMDAxMEI4Cis6MTAxM0YwMDA2MkIxMDEwMDdCOTJBODQwRTEzMTAwMDAxQjg0MDA4OEFCCis6MTAxNDAwMDAxQ0IwMDAwMDAwOTkzRjQyMTNGMDAxMDA3RjkyNDcwNTk1Cis6MTAxNDEwMDA0ODMxMDAwMDNGMDAwMEYzOTY4ODAxMDAwMDAwMDA0MEMyCis6MTAxNDIwMDBFN0IxMDEwMDAwMDAxRjQwODFCMjAxMDA4NzkyMjI0QjBBCis6MTAxNDMwMDA4MDMyMDAwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QjQ3Cis6MTAxNDQwMDA2MkIxMDEwMDg1OTJBODQwODEzMjAwMDAwMDAwMDAwN0NGCis6MTAxNDUwMDAxNkIwMDEwMDAwNjIwMDBCMTZEQzAxMDA2Njk1MDA0MDJBCis6MTAxNDYwMDA4MTMyMDEwMDlGOTIyMjAwODAzMjAwMDAxNTk3MDA1RkI4Cis6MTAxNDcwMDAwMTEwMDEwMDg5OTIyMjQwOTU2QzAwMDAwMDgwMDAxMDRDCis6MTAxNDgwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzU4Cis6MTAxNDkwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMDQ1Cis6MTAxNEEwMDA2MkIxMDEwMDkxOTJBODAwRTAzMTAwMDAxQjg0MDA4ODI1Cis6MTAxNEIwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwNDgwMDAwM0RBCis6MTAxNEMwMDA0MkM5MDEwMDAwMDAwMEYyMDJCMDAxMDA4QTk2MDA1MkY5Cis6MTAxNEQwMDA5NTMwMDEwMEUyOTUwMDQwODEzMjAxMDA4OTkyMjI0MTVECis6MTAxNEUwMDA5NzUwMDAwMDBDODAwMDAzNDJDOTAxMDAwMDAwMDBGMDhBCis6MTAxNEYwMDAwMEIwMDEwMDAwMDAwMDVDMDE4MDAxMDA5MTk2MDA0QkVCCis6MTAxNTAwMDAwMkIwMDAwMDg5OTIwMDA1NDhCMTAwMDAxNjk4MDA0MDIyCis6MTAxNTEwMDAwMzMwMDEwMDE3ODAwMDAzNDRDOTAxMDAwMEYwMDAwQ0YzCis6MTAxNTIwMDA5Njg4MDEwMDAwMDA2MzRDOTdGMDAxMDAxMDgwMDAwM0QyCis6MTAxNTMwMDA0NEM5MDEwMDAwMDAwMEFCRTFCMTAxMDBCNzk3MDA1RUIzCis6MTAxNTQwMDAwNTEwMDEwMDAzMDAwMDA3MUFGNDAxMDAwNzAwMDAwNzVFCis6MTAxNTUwMDAxNjg4MDEwMDAwQjUwMDBENDZDOTAxMDBBOTkyMzA0MDZGCis6MTAxNTYwMDA4MTMyMDAwMDAwMDAwMDBCRTY4MTAxMDAwMEI3MDAwRDkxCis6MTAxNTcwMDA0NkM5MDEwMDAwMDAwMDBCRTY4MTAxMDAxMDAwMTAwRkI5Cis6MTAxNTgwMDA5NEY0MDEwMEU5OTkwMDVGOTUwNDAxMDA2Qjk2MDA0MDE2Cis6MTAxNTkwMDA4MTMyMDEwMEIzOTIyMjUwRkQ3RjAwMDBCMTkyNDM0MDlFCis6MTAxNUEwMDA4MTMyMDAwMDAwMDAxQjQxMzFEMzAxMDAwMDAwMkUwNUY0Cis6MTAxNUIwMDA0OEIxMDEwMDAwMDAwMDQwRTFCMTAxMDAwMDAwMDA0MDFFCis6MTAxNUMwMDAwRkIwMDEwMENEOTUwMDQxODEzMDAxMDAwNThBMDA0MDM3Cis6MTAxNUQwMDA4MUIyMDAwMEQ0OTUwMDQwODEzMjAxMDBDNTkyQTIwODdBCis6MTAxNUUwMDA4MDMyMDAwMEM1OTJBMjE2ODAzMjAwMDAwMDgyMDAwMjA0Cis6MTAxNUYwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMUQwCis6MTAxNjAwMDAwMEMwMDEwMEJFOTIzNzVDNjEzMTAwMDAwMDAwMDAxQjg5Cis6MTAxNjEwMDA2MkIxMDEwMEMyOTIyODQwODEzMjAwMDBCRjkyMDA0MEI2Cis6MTAxNjIwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDBDMjkyQTg0MDM3Cis6MTAxNjMwMDA4MTMyMDAwMDA1OEExNzQwODFCMjAwMDA3NDAwMjI0MDA4Cis6MTAxNjQwMDBGMUIxMDEwMDAwMDAwMDQwRTFCMTAxMDAwQjk4MDA0QTM3Cis6MTAxNjUwMDA5NTMwMDEwMEYyOTYwMDVDMUYxMDAxMDA1QjkyMDA0MDgzCis6MTAxNjYwMDA4MUIyMDAwMDJGMDAwMDQwNDc5OTAxMDBENjkyMjI0NzI2Cis6MTAxNjcwMDBFNzdEMDAwMDY2OTUwMDQwRTczMTAxMDBENjkyMjIwMDI4Cis6MTAxNjgwMDA4MDMyMDAwMEQxOTJBMjQwMUY3QzAwMDBFMjk1MDA0MDExCis6MTAxNjkwMDA4MTMyMDEwMEQ2OTIwMDQwODFCMjAwMDAzMDAwMDA0MDRCCis6MTAxNkEwMDA0Mzk5MDEwMDMyMDAyREYyOTRCMDAxMDA4QTk2MDBGMkI1Cis6MTAxNkIwMDAwMjMwMDEwMDkxOTYwMDRCMDJCMDAwMDAwMDAwMDAwNUNFCis6MTAxNkMwMDA0OEIxMDEwMDBCOTgwMDQ4OTUzMDAxMDBGMjk2MDA1QzhCCis6MTAxNkQwMDAxRjEwMDEwMERCOTI4NzQyMTkxMDAwMDA4QjAwMkY0NzdBCis6MTAxNkUwMDAxOTgwMDEwMDAwMDAwMDQwRTc5MTAxMDAzNjk4MDA0Mjk3Cis6MTAxNkYwMDA4MTMwMDEwMEMwOEQwMDQwODFCMjAwMDBGMjk2MDA0MEIwCis6MTAxNzAwMDA4MTMyMDEwMEMwOEQwMDVDMUY5MDAwMDBCQTAwMjA0MEIzCis6MTAxNzEwMDBFNUIxMDEwMEEzOTgwMDQwODEzMjAxMDBDMDAwMDA0MDAzCis6MTAxNzIwMDA0Mzk5MDEwMEM0MDAyREYwODJCMDAxMDBFRTk4MDBGMDUyCis6MTAxNzMwMDA4NDMwMDEwMEUyOTUwMDQwODEzMjAxMDAzNjk4MDA0NTc2Cis6MTAxNzQwMDA4MTMwMDEwMEMwOEQyMjQyMTk3QzAwMDBDNTk3MDAzQTBCCis6MTAxNzUwMDA4MTMwMDEwMEMwOEQwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAxNzYwMDA4MUIyMDAwMEQ0OTUwMDQwODEzMjAxMDBGMDkyQTIwOEJECis6MTAxNzcwMDA4MDMyMDAwMEYwOTJBMjE2ODAzMjAwMDBDNTk3MDA0NzI4Cis6MTAxNzgwMDA4MDMwMDEwMDAwODIwMDAyMDREQzAxMDAwNThBMDA0MDc0Cis6MTAxNzkwMDA4MUIyMDAwMDEwODAwMDAzNDRDOTAxMDAwMEUxMDBBNkVFCis6MTAxN0EwMDA4NEIwMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MEUxCis6MTAxN0IwMDBGMUIxMDEwMDAwMDA2MDA3ODQ5NDAxMDBCNzk3MDA1RTVBCis6MTAxN0MwMDAwNTEwMDEwMEMwOEQwMDQwODFCMjAwMDA4QTAwMDA0MDc5Cis6MTAxN0QwMDA0Nzk5MDEwMEUyOTUwMDQxRTc0MTAxMDBDNThEMDA0MEI1Cis6MTAxN0UwMDA4MUIyMDAwMENDOTYwMDQwODEzMjAxMDA4NTk2MDA0MDE1Cis6MTAxN0YwMDA4MTMyMDEwMDAwMDAwMDAxMkNCMDAxMDAwMDAwMDAxNTQyCis6MTAxODAwMDAxMEIwMDEwMDAwMDAwMDAwMTBDMDAxMDAwNDAwMUYwQTE5Cis6MTAxODEwMDAyQzUwMDAwMDAwMDAwMDEwMzJCMDAxMDAwNzAwMDAwQjQ3Cis6MTAxODIwMDA5Njg4MDEwMDBDOTMyNjQ3OTcyNDAwMDAwMDAwMDA0MTkxCis6MTAxODMwMDA5N0MwMDEwMDBDOTMyMzRCMEM2QzAwMDA0OTk4MDA0QjlGCis6MTAxODQwMDAwNDMwMDEwMDAwMDAwMDUwMzNDMDAxMDAwMDAwMDAwMjFECis6MTAxODUwMDAxMEMwMDEwMDAwMDAwMDAyMTZDMDAxMDAwMDAwMDAwNkQ4Cis6MTAxODYwMDAwNEIwMDEwMDQ5OTgwMDRCMDQ1MDAxMDAwRDkzMDA0MDYyCis6MTAxODcwMDA4MUIyMDAwMDQ5OTgwMDA2MDQzMDAxMDAxMzkzQTI0ODg5Cis6MTAxODgwMDAxRjdDMDAwMDExOTM4NDQ4MUYxMDAwMDBBQzAwMDA0MDMyCis6MTAxODkwMDA0Nzk5MDEwMDEzOTMwMDBBRTBDMTAwMDAwMDAwMDAwQTBDCis6MTAxOEEwMDAwMkIwMDEwMEVGOTQwMDAxOEMzMDAxMDAwMDAwMDA0MzAxCis6MTAxOEIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxNDkzQTg0MEY2Cis6MTAxOEMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTZECis6MTAxOEQwMDA0OEIxMDEwMDAwMDAwMDAyMTBDMDAxMDAyMTkzMjIwNjVGCis6MTAxOEUwMDAxNDUwMDAwMDNBOTcwMDQ1MUYwMDAxMDAwMDkzMjI1QzRECis6MTAxOEYwMDAxRjdDMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEEzCis6MTAxOTAwMDA2MkREMDEwMDFEOTNBODVDMUYwMDAwMDAxQjg0MDA4ODlECis6MTAxOTEwMDAxQ0IwMDAwMDAwOTMwMDA1NDhCMTAwMDAwMDAwMDAwQjVGCis6MTAxOTIwMDAxQkIwMDEwMDA4MDAyRDQwODVCMDAxMDAwMDAwMDBGMDUwCis6MTAxOTMwMDA4MkIwMDEwMDAwMDAwMDQwMDVCMDAxMDAwMDk3MDA0MUE2Cis6MTAxOTQwMDA4NzMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDM3Cis6MTAxOTUwMDA2MkREMDEwMDI3OTNBODQwODEzMjAwMDAxQjg0MDA4OENCCis6MTAxOTYwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAyRDkzMjIwOUMxCis6MTAxOTcwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDAzMTkzMjI0NDNCCis6MTAxOTgwMDAxOTdDMDAwMDM2OTgwMDRGODEzMDAxMDAzMTkzQTI0NzQ2Cis6MTAxOTkwMDAxRjdDMDAwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwOEMwCis6MTAxOUEwMDAwMDhDMDEwMDNGOTMyMjRBMUY3QzAwMDAzNzkzQTIxNjRGCis6MTAxOUIwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MEZCCis6MTAxOUMwMDBFN0IxMDEwMEMwOEQwMDQwODFCMjAwMDAyRDAwMkQwODVDCis6MTAxOUQwMDAyQUIwMDEwMDNCOTMyMjQyMTk3QzAwMDAwRjk3MDA0MDdGCis6MTAxOUUwMDA4MTMyMDEwMDNDOTMwMDQwODFCMjAwMDBERjk2MDA0MDRDCis6MTAxOUYwMDA4MTMyMDEwMDMwMDAyRTAwMkFEMDAxMDAzMjAwMkExNTY5Cis6MTAxQTAwMDBFNEIxMDEwMEMwOEQwMDE2RTRCMTAwMDA1MjkzMjIxNjJCCis6MTAxQTEwMDAwMjMwMDAwMDAwMDAwMDA4MkFCMDAxMDAwQTk5MDA0MENFCis6MTAxQTIwMDA5NTMwMDEwMDQ0OTNBMjQwMTE2QzAwMDA1MzkzMjI0MDcyCis6MTAxQTMwMDAyRDZDMDAwMEFDMDAwMDQwNDc5OTAxMDBCMDAwMkIwMTY0Cis6MTAxQTQwMDBFMEMxMDEwMDAwMkIwMEE2MTZCMDAxMDAwMDAwMDAwMTVCCis6MTAxQTUwMDBFMEQxMDEwMDBFOTgwMDA4ODAzMDAxMDA0QjkzMDA1RTM5Cis6MTAxQTYwMDAxNzkwMDAwMDJGOTgwMDQzNjEzMTAxMDAwMDAwMDA0M0VGCis6MTAxQTcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA0QzkzQTg0MEZDCis6MTAxQTgwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUFCCis6MTAxQTkwMDA0OEIxMDEwMDE2OTgwMDA3MTYxNDAxMDBCNzk3MDA1RUMwCis6MTAxQUEwMDAwNTEwMDEwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDI2Cis6MTAxQUIwMDBFN0IxMDEwMEM1OEQwMDQwODFCMjAwMDAwMDAwMDAwQkJECis6MTAxQUMwMDAxQkIwMDEwMDA0MDAxRjE1MUE1MDAwMDA2MDkzMjAxNjdGCis6MTAxQUQwMDAxQTZDMDAwMDcwMDAwMDAzNDhDOTAxMDAwMDAwMjI1MDg5Cis6MTAxQUUwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMEFFCis6MTAxQUYwMDBFMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDBBMDAwMDBBNEJCCis6MTAxQjAwMDA2MkREMDEwMDVEOTNBODQ2MUYxMDAwMDAwMDAwMDAwNTgzCis6MTAxQjEwMDA0OEIxMDEwMDAwMDAwMDAwMTBCMDAxMDAwMDAwMDAxNUY1Cis6MTAxQjIwMDAxMEMwMDEwMDAwMDAwMDBBMkFCMDAxMDAwMDAwMDAwQUY1Cis6MTAxQjMwMDAyQ0QwMDEwMEFDMDAyRjQwMjNCMDAxMDA2NzkzODQ0NUY2Cis6MTAxQjQwMDAxRjEwMDAwMDY4OTMwMDBBRTBDMTAwMDAwMDAwMDAwQUI2Cis6MTAxQjUwMDAwMkIwMDEwMDcxOTcwMDQwMzVCMDAwMDAwMDgwMDAxOTBDCis6MTAxQjYwMDA0MkM5MDEwMDcwOTMyMjQwRTM2RDAwMDAwMDAwMDA0MzcxCis6MTAxQjcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2QzkzQTg0MERCCis6MTAxQjgwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUFBCis6MTAxQjkwMDA0OEIxMDEwMDgwOTNBMjAyMUE1MDAwMDA4MTkzMjI0MEI0Cis6MTAxQkEwMDAyRDZDMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEFFCis6MTAxQkIwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDBGRjA3MDAwOENGCis6MTAxQkMwMDBFMDhEMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMDQyCis6MTAxQkQwMDA2MkIxMDEwMDc3OTNBODQwODEzMjAwMDAxQjg0MDA4ODI1Cis6MTAxQkUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAyRjAwMjA0Nzk0Cis6MTAxQkYwMDBFN0I1MDEwMDBDODAwMDAzNDJDOTAxMDAxMDAwMDBGMEFECis6MTAxQzAwMDAxMEM4MDEwMEYwMDcwMDQwMUI5ODAxMDA4MTkzMDA1Q0EwCis6MTAxQzEwMDAxMTgwMDAwMDAwMDAwMDAyMTBDMDAxMDBGODk1MDA0MDkzCis6MTAxQzIwMDAxRjAwMDEwMDAwMDAwMDA1NDhCMTAxMDA4NTkzMjMwRDRECis6MTAxQzMwMDAyQzZDMDAwMDAwMDAwMDQwMUY5MDAxMDA4RTkzMjI0NjkzCis6MTAxQzQwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDA3MDgwMDAwMzIwCis6MTAxQzUwMDA0MkM5MDEwMDhFOTMyMjQwRTM2RDAwMDAwMDAwMDA0MjYzCis6MTAxQzYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA4QTkzQTg0MENDCis6MTAxQzcwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUI5Cis6MTAxQzgwMDA0OEIxMDEwMDA4MDAyRDQwODVCMDAxMDAwMDAwMDBGMEJGCis6MTAxQzkwMDA4MkIwMDEwMDAwMDAwMDQwMDVCMDAxMDAwMDk3MDA0MTQzCis6MTAxQ0EwMDA4NzMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMEQ0Cis6MTAxQ0IwMDA2MkREMDEwMDkzOTNBODQwODEzMjAwMDAxQjg0MDA4OEZDCis6MTAxQ0MwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDA5OTkzMjIwOUYyCis6MTAxQ0QwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDA5RDkzMjI0NDZDCis6MTAxQ0UwMDAxOTdDMDAwMDM2OTgwMDRGODEzMDAxMDA5RDkzQTI0Nzc3Cis6MTAxQ0YwMDAxRjdDMDAwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwODVECis6MTAxRDAwMDAwMDhDMDEwMEIyOTMyMjRBMUY3QzAwMDBBMzkzQTIxNjBDCis6MTAxRDEwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDk3Cis6MTAxRDIwMDBFN0IxMDEwMEMwOEQwMDQwODFCMjAwMDAyRDAwMkQwOEY4Cis6MTAxRDMwMDAyQUIwMDEwMEFFOTMyMjQyMTk3QzAwMDBBNzkzQTJGM0JGCis6MTAxRDQwMDA4NDMwMDAwMDAwMDAwMEE1ODVCMDAxMDAwMDAwMDA0MUMzCis6MTAxRDUwMDA4NUQwMDEwMEQ0MDAzRTQxODVFMDAxMDBBQjkzMjI0MEQ0Cis6MTAxRDYwMDAxRjdDMDAwMDAwMDAwMDVBMTE5MDAxMDAwQjAwMDAwOEM5Cis6MTAxRDcwMDBFNEY1MDEwMDBGOTcwMDQwODEzMjAxMDBBRjkzMDA0MDZECis6MTAxRDgwMDA4MUIyMDAwMERGOTYwMDQwODEzMjAxMDAzMDAwMkUwMDU5Cis6MTAxRDkwMDAyQUQwMDEwMDMyMDAyQTE1RTRCMTAxMDBDMDhEMDAxNkRFCis6MTAxREEwMDBFNEIxMDAwMEI1OTNBMjE2MDIzMDAwMDBFMjk1MDA0MEI1Cis6MTAxREIwMDA4MTMyMDEwMDA0OTQwMDQwODFCMjAwMDAyRDAwMkQwODAyCis6MTAxREMwMDAyQUIwMDEwMEMzOTMyMjQ3MUY3QzAwMDBCRjkzMjI0MjI4Cis6MTAxREQwMDAxOTdDMDAwMEJBOTNBMkYzODQzMDAwMDAwMDAwMDBBNTMzCis6MTAxREUwMDA4NUIwMDEwMDAwMDAwMDQxODVEMDAxMDBENDAwM0U0MUQzCis6MTAxREYwMDA4NUUwMDEwMEJFOTMyMjQwMUY3QzAwMDAwMDAwMDA1QUQ1Cis6MTAxRTAwMDAxMTkwMDEwMDBCMDAwMDA4RTRGNTAxMDA1ODAxMkQwMEJECis6MTAxRTEwMDAyQUQwMDEwMDYwMDEyREYwMTBCMDAxMDAwMDAwMDBGMDk4Cis6MTAxRTIwMDAyQ0IwMDEwMDQ3OTEwMDQwODFCMjAwMDAwQTk5MDA0MUE2Cis6MTAxRTMwMDA5NTMwMDEwMENCOTNBMjA4ODAzMjAwMDBDQjkzQTIxNjBDCis6MTAxRTQwMDA4MDMyMDAwMDAwMDAwMDQxOTdCMDAxMDBDOTkzMjMwRENCCis6MTAxRTUwMDAwMjZDMDAwMDAwMDAwMDQxOTdDMDAxMDA5MTk2MDA0QjA5Cis6MTAxRTYwMDAwMkIwMDAwMDA0OTQwMDA1NDhCMTAwMDBBQzAwMkYwMTRFCis6MTAxRTcwMDAxNEIwMDEwMEIwMDAyQjAxRTBDMTAxMDAwMDJCMDBBNjRFCis6MTAxRTgwMDAxNkIwMDEwMDAwMDAwMDAxRTBEMTAxMDBEQjkzMjMwRDNBCis6MTAxRTkwMDAwMjZDMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEU2Cis6MTAxRUEwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDA0MkE4Cis6MTAxRUIwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBENDkzQTgwMERDCis6MTAxRUMwMDBFMDMxMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTA5Cis6MTAxRUQwMDA0OEIxMDEwMDBDODAwMDAzNDJDOTAxMDAxMDAwMDBGMDZECis6MTAxRUUwMDAyMkM4MDEwMDAwMDAwMDVDMjM4MDAxMDAwMDAwMDAwMTA2Cis6MTAxRUYwMDA4NEIwMDEwMERFOTMyMzBEMDI2QzAwMDAwMDAwMDAwRDkxCis6MTAxRjAwMDAwMkIwMDEwMDAwMDAwMDA4ODBCMDAxMDBFMzkzMjI0MDBECis6MTAxRjEwMDAxQjZDMDAwMDBFOTgwMDAxODQ1MDAxMDBFQjkzMjI0MERFCis6MTAxRjIwMDA4NTZDMDAwMDAwMDAwMDAxODBDMDAxMDAxMDgwMDAxMERFCis6MTAxRjMwMDA0NkM5MDEwMDAwMDAwMDRGNDM4MTAxMDAwMDAwMDA0MjNCCis6MTAxRjQwMDBGMEIxMDEwMDIwMDAwMDQwRjBDOTAxMDAwMDAwMDAxNkJGCis6MTAxRjUwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDBBMDAwMDBBMTQ4Cis6MTAxRjYwMDA2MkREMDEwMEU5OTNBODExRTAzMTAwMDBGQTkzMDA1RTAwCis6MTAxRjcwMDAxNzkwMDAwMEVFOTMyMzBEMDI2QzAwMDAwMDAwMDAwRDhFCis6MTAxRjgwMDAwMkIwMDEwMDAwMDAwMDAxODREMDAxMDBGMzkzMjI0MDYwCis6MTAxRjkwMDAxQjZDMDAwMDJGOTgwMDQzNjEzMTAxMDBGQTkzMjI0MDJFCis6MTAxRkEwMDA4NTZDMDAwMDAwMDAwMDAxMTJDMDAxMDAxMDgwMDAxMENDCis6MTAxRkIwMDA0NkM5MDEwMDAwMDAwMDRGNDM4MTAxMDAwMDAwMDA0MkJCCis6MTAxRkMwMDBGMEIxMDEwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxOEFDCis6MTAxRkQwMDBGMEIxMDEwMEEwMDAwMEExNjJERDAxMDBGODkzQTgxMTlBCis6MTAxRkUwMDBFMDMxMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDNBCis6MTAxRkYwMDA2MkREMDEwMEZCOTNBODBBMDIzMDAwMDAxQjg0MDA4ODA4Cis6MTAyMDAwMDAxQ0IwMDAwMEUyOTUwMDA1NDgzMTAxMDAwMjk0MjMwRDQ4Cis6MTAyMDEwMDAwMjZDMDAwMEZGMDcwMDExMDA4QzAxMDBFMjk1MDA0MEY3Cis6MTAyMDIwMDA4MTMyMDEwMDE2OTgwMDA3MTYxNDAxMDBCNzk3MDA1RTcwCis6MTAyMDMwMDAwNTEwMDEwMDJGMDAyMDQwRTdCMTAxMDBDNThEMDA0MEQwCis6MTAyMDQwMDA4MUIyMDAwMDAwODAwMDAzNDJDOTAxMDAwMDAwMDBGOEQ2Cis6MTAyMDUwMDA4MkIwMDEwMDAwMDAwMEY4OENCMDAxMDAwMDAwMDBGMDI4Cis6MTAyMDYwMDA4RUIwMDEwMEM5OTYwMDQwMTMzMDAxMDAwMDAwMDA0MDBFCis6MTAyMDcwMDA4NUIwMDEwMDAwOTcwMDQxODczMDAxMDA4NTk2MDA0MDNGCis6MTAyMDgwMDA4MTMyMDEwMDAwODAwMDEwNDJDOTAxMDAxNTk0MjI0MEY1Cis6MTAyMDkwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDQ4Cis6MTAyMEEwMDA2MkREMDEwMDExOTRBODQwODEzMjAwMDAxQjg0MDA4ODg5Cis6MTAyMEIwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAxNzk0MjIwOTdGCis6MTAyMEMwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDAwMDAwMDAwQjAzCis6MTAyMEQwMDAxQkIwMDEwMDAwMDAwMDE1MUFEMDAxMDAxRTk0QTI0MTlGCis6MTAyMEUwMDAxOTdDMDAwMDBBOTkwMDQwOTUzMDAxMDAwMDAwMDAxNjlDCis6MTAyMEYwMDA4MEIyMDEwMDI3OTQyNzA4ODAzMjAwMDA0NDkzMDAwMDNBCis6MTAyMTAwMDAyQUMwMDAwMDBBOTkwMDQxOTUzMDAxMDAwMDAwMDAxNjI1Cis6MTAyMTEwMDA4MEIyMDEwMDIyOTQyNzA4ODAzMjAwMDBDQjkzMDAwMDk3Cis6MTAyMTIwMDAyQUMwMDAwMDAwMDAwMDQxOTdCMDAxMDAyNTk0MjMwRDUzCis6MTAyMTMwMDAwMjZDMDAwMDAwMDAwMDQxOTdDMDAxMDA5MTk2MDA0QjI2Cis6MTAyMTQwMDAwMkIwMDAwMDAwMDAwMDA1NDhCMTAxMDBDMDhEMjI0MjJECis6MTAyMTUwMDAxOTdDMDAwMEM1OTcwMDNBODEzMDAxMDBDMDhEMDA0MDE1Cis6MTAyMTYwMDA4MUIyMDAwMDJCOTQwMDRBMUY5MDAwMDAwQTk2MDAwMEU0Cis6MTAyMTcwMDAxMDMwMDEwMDAwMDAwMDE1MTBDMDAxMDAwMDAwMDAxMDI4Cis6MTAyMTgwMDAzMkIwMDEwMDA3MDAwMDBCOTY4ODAxMDAzOTk0MjY0NzAxCis6MTAyMTkwMDA5NzI0MDAwMDAwMDAwMDQxOTdDMDAxMDAzOTk0MjM0QkIwCis6MTAyMUEwMDAwQzZDMDAwMDQ5OTgwMDRCMDQzMDAxMDAwMDAwMDA1MDA2Cis6MTAyMUIwMDAzM0MwMDEwMDAwMDAwMDAyMTBDMDAxMDAwMDAwMDAwMjU2Cis6MTAyMUMwMDAxNkMwMDEwMDAwMDAwMDA2MDRCMDAxMDA0OTk4MDA0QjUxCis6MTAyMUQwMDAwNDUwMDEwMDNBOTQwMDQwODFCMjAwMDA0OTk4MDAwNjgyCis6MTAyMUUwMDAwNDMwMDEwMDNGOTRBMjQ0MUY3QzAwMDAwMDAwMDAwQjVCCis6MTAyMUYwMDAxQkIwMDEwMDAwMDAwMDBBMkNEMDAxMDAwMDAwMDAwQTAyCis6MTAyMjAwMDAwMkIwMDEwMEVGOTQwMDAxOEMzMDAxMDAwMDgwMDAxOTQxCis6MTAyMjEwMDA0MkM5MDEwMDQ2OTQyMjQwRTM2RDAwMDAwMDAwMDA0M0UzCis6MTAyMjIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA0Mjk0QTg0MDRECis6MTAyMjMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUYzCis6MTAyMjQwMDA0OEIxMDEwMDAwMDAwMDAyMTBDMDAxMDA0Rjk0MjIwNkI2Cis6MTAyMjUwMDAxNDUwMDAwMDNBOTcwMDQ1MUYwMDAxMDAyRDk0MjI1Q0E1Cis6MTAyMjYwMDAxRjdDMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMDI5Cis6MTAyMjcwMDA2MkREMDEwMDRCOTRBODVDMUYwMDAwMDAxQjg0MDA4OEY1Cis6MTAyMjgwMDAxQ0IwMDAwMDJEOTQwMDA1NDhCMTAwMDAwODAwMkQ0MDRFCis6MTAyMjkwMDA4NUIwMDEwMDAwMDAwMEYwODJCMDAxMDAwMDAwMDA0MEE1Cis6MTAyMkEwMDAwNUIwMDEwMDAwOTcwMDQxODczMDAxMDAwMDAwMDA0NUEzCis6MTAyMkIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA1NDk0QTg0MEFCCis6MTAyMkMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTYzCis6MTAyMkQwMDA0OEIxMDEwMDVBOTQyMjA5ODAzMDAwMDAzNjk4MDA0MDJECis6MTAyMkUwMDAxMzMwMDEwMDVEOTQyMjQ0MTk3QzAwMDAzNjk4MDA0RkExCis6MTAyMkYwMDA4MTMwMDEwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwODQwCis6MTAyMzAwMDAwMDhDMDEwMDZCOTQyMjRBMUY3QzAwMDA2Mzk0QTIxNjhCCis6MTAyMzEwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDkxCis6MTAyMzIwMDBFN0IxMDEwMEMwOEQwMDQwODFCMjAwMDAyRDAwMkQwOEYyCis6MTAyMzMwMDAyQUIwMDEwMDY3OTQyMjQyMTk3QzAwMDAwRjk3MDA0MEU4Cis6MTAyMzQwMDA4MTMyMDEwMDY4OTQwMDQwODFCMjAwMDBERjk2MDA0MEI1Cis6MTAyMzUwMDA4MTMyMDEwMDMwMDAyRTAwMkFEMDAxMDAzMjAwMkExNUZGCis6MTAyMzYwMDBFNEIxMDEwMEMwOEQwMDE2RTRCMTAwMDA0MDkzQTIxNjU0Cis6MTAyMzcwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDMxCis6MTAyMzgwMDBFN0IxMDEwMEM1OEQwMDQwODFCMjAwMDAwQTk2MDA0QTA1Cis6MTAyMzkwMDAxRjEwMDEwMDU1OTMwMDEwMzJCMDAwMDA4QTAwMjA0MDQ5Cis6MTAyM0EwMDBFN0IxMDEwMDc1OTRBMjQxMTk3QzAwMDBFMjk1MDA0MDVDCis6MTAyM0IwMDA4MTMyMDEwMDc4OTQwMDQwODFCMjAwMDA4QTk2MDAxNUI1Cis6MTAyM0MwMDA5NDMwMDEwMDkxOTYwMDRCMDJCMDAwMDAwMDAwMDAwNTFGCis6MTAyM0QwMDA0OEIxMDEwMDdBOTQyMjQyMTk3QzAwMDBDNTk3MDAzQTY2Cis6MTAyM0UwMDA4MTMwMDEwMDM2OTgwMDQ1ODEzMDAxMDBDMDhEMDA0MEU5Cis6MTAyM0YwMDA4MUIyMDAwMDA2OTIwMDQ1MUY5MDAwMDBDQzk2MDA0MDdDCis6MTAyNDAwMDA4MTMyMDEwMDg1OTYwMDQwODEzMjAxMDA1NTkzMDAwMTIwCis6MTAyNDEwMDAyQ0IwMDAwMEQ0OTUwMDQwODEzMjAxMDA4RDk0QTIwOEI4Cis6MTAyNDIwMDA4MDMyMDAwMDhEOTRBMjE2ODAzMjAwMDAwMDgyMDAwMkVCCis6MTAyNDMwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMTgxCis6MTAyNDQwMDAwMEMwMDEwMDg2OTQzNzVDNjEzMTAwMDAwMDAwMDAxQjcxCis6MTAyNDUwMDA2MkIxMDEwMDhBOTQyODQwODEzMjAwMDA4Nzk0MDA0MEQ0Cis6MTAyNDYwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDA4QTk0QTg0MDFGCis6MTAyNDcwMDA4MTMyMDAwMDA1OEExNzQwODFCMjAwMDA1ODAxMjAwODBGCis6MTAyNDgwMDBFMEIxMDEwMDYwMDEyMDE2RTBCMTAxMDBDQzk2MDA0N0U4Cis6MTAyNDkwMDAxRjEwMDEwMDg1OTYwMDQwODEzMjAxMDA1NTkzMDAwMTE0Cis6MTAyNEEwMDAyQ0IwMDAwMEQ0OTUwMDQ3MUYxMDAxMDBBMDk0QTIwODkyCis6MTAyNEIwMDA4MDMyMDAwMEEwOTRBMjE2ODAzMjAwMDA5Qzk0QTI0MkI4Cis6MTAyNEMwMDAxOTdDMDAwMDAwODIwMDAyMDREQzAxMDBBMDk4MDA0MDlBCis6MTAyNEQwMDA0Nzk5MDEwMEU5ODkwMDQxODkzMDAxMDA4QTk2MDAxNTc5Cis6MTAyNEUwMDA5NDMwMDEwMDkxOTYwMDRCMDJCMDAwMDAwNThBMDA0MDM0Cis6MTAyNEYwMDA4MUIyMDAwMDBGOTcwMDQwODEzMjAxMDAwMDAwMDA0QkM0Cis6MTAyNTAwMDAxOTkwMDEwMEM1OTcwMDNBODEzMDAxMDAwNThBMDA0MDBBCis6MTAyNTEwMDA4MUIyMDAwMDU4MDEyMDA4RTBCMTAxMDA2MDAxMjAxNkRFCis6MTAyNTIwMDBFMEIxMDEwMDBBOTYwMDEwMzIzMDAxMDA1NTkzMDA0MERFCis6MTAyNTMwMDAxM0IwMDAwMEQ0OTUwMDQwODEzMjAxMDBCMTk0QTIwODhDCis6MTAyNTQwMDA4MDMyMDAwMEIxOTRBMjE2ODAzMjAwMDAwMDgyMDAwMkE2Cis6MTAyNTUwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMTYwCis6MTAyNTYwMDAwMEMwMDEwMEFBOTQzNzVDNjEzMTAwMDAwMDAwMDAxQjJDCis6MTAyNTcwMDA2MkIxMDEwMEFFOTQyODQwODEzMjAwMDBBQjk0MDA0MDZCCis6MTAyNTgwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDBBRTk0QTg0MERBCis6MTAyNTkwMDA4MTMyMDAwMDA1OEExNzQwODFCMjAwMDAwMDgwMDAwM0VDCis6MTAyNUEwMDA0MkM5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGOEZDCis6MTAyNUIwMDA4Q0IwMDEwMDAwMDAwMEYwOEVCMDAxMDBDOTk2MDA0MDEwCis6MTAyNUMwMDAxMzMwMDEwMDAwMDAwMDQwODVCMDAxMDAwMDk3MDA0MTc5Cis6MTAyNUQwMDA4NzMwMDEwMDg1OTYwMDQwODEzMjAxMDAwMDgwMDAxMEE0Cis6MTAyNUUwMDA0MkM5MDEwMEMwOTQyMjQwRTM2RDAwMDAwMDAwMDA0NTk0Cis6MTAyNUYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCQzk0QTg0MDAwCis6MTAyNjAwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTFGCis6MTAyNjEwMDA0OEIxMDEwMDQ3OTEyMjA5ODAzMDAwMDAzNjk4MDA0MEZGCis6MTAyNjIwMDAxMzMwMDEwMDQ3OTEwMDQwODFCMjAwMDAxNDAwMkQ0NTk1Cis6MTAyNjMwMDAxRjkwMDEwMDhGOTEwMDQ0MTk5MDAwMDBDODk0QTI0MTlFCis6MTAyNjQwMDAxOTdDMDAwMDAwMDAwMDRBMUY5MDAxMDBGQTkyMDA0MDJGCis6MTAyNjUwMDA4MUIyMDAwMENDOTYwMDRBMUYxMDAxMDA4NTk2MDA0MDEwCis6MTAyNjYwMDA4MTMyMDEwMDU1OTMwMDAxMkNCMDAwMDAwQTk2MDA0MDExCis6MTAyNjcwMDA4MTMyMDEwMDU1OTMwMDEwMzJCMDAwMDAwNjkyMDA0NUVGCis6MTAyNjgwMDAxRjkwMDAwMDAwMDAwMDQxMzdDMzAxMDAwMDAwMDA0MTFFCis6MTAyNjkwMDAzM0MzMDEwMDM2MDAwMDAxMDJDQzAxMDAwMDAwRDI0MDJCCis6MTAyNkEwMDA4MUIyMDAwMEQ0OTQ4NTE3ODAzMjAwMDAwMDAwOUY0ODVBCis6MTAyNkIwMDAwM0QwMDAwMEQ2OTQ5QzE3ODAzMjAwMDAwMDAwOUY0QzhECis6MTAyNkMwMDAwM0QwMDAwMDAwMDA4MDAxMzRDMzAxMDAwMjAwMkQxMTdFCis6MTAyNkQwMDAxMEMxMDAwMERCOTQwMDQwNDNDMTAwMDBEQjk0MDA1MEI3Cis6MTAyNkUwMDA0M0MxMDAwMDIwMDAwMEExNDJDOTAxMDBERjk0MjI0MDQ0Cis6MTAyNkYwMDBFNTZEMDAwMDA0MDBBMjQwRTU3RDAwMDAwMDAwMDA0MDAwCis6MTAyNzAwMDAyM0IwMDEwMDAwMDA4MDQ5MUY5MDAxMDAwMDAwQTI0MTk5Cis6MTAyNzEwMDAyM0QwMDAwMERCOTQwMDUwNDNEMTAwMDA0MDgwMDAwMzMwCis6MTAyNzIwMDA0NEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0MDZGCis6MTAyNzMwMDBGMUIxMDEwMDAwMDAwMDEyRjBCMTAxMDBFNjk1MDA0MTg2Cis6MTAyNzQwMDBFMTMxMDEwMDAwODAwMDQzNDRDOTAxMDAxMDAwMDA0MDU1Cis6MTAyNzUwMDBGMTk5MDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OUJCCis6MTAyNzYwMDBGMEIxMDEwMDQwMDAwMDAzRTBDOTAxMDAwMDAwMDA0NTk1Cis6MTAyNzcwMDA2MUIxMDEwMDAwMDAwMDQzNjJCMTAxMDAwMDAwQTg0MDA3Cis6MTAyNzgwMDA4MUIyMDAwMEVDOTQwMDQwODFCMjAwMDBCQTAwMjA0MDA5Cis6MTAyNzkwMDBFNUIxMDEwMEIwMDAyRjAxOENEMDAxMDAwMDAwMDA0NjFGCis6MTAyN0EwMDBFMEMxMDEwMEFDMDAyRjQwMTNCMDAxMDBDQzAwMkQwMUFFCis6MTAyN0IwMDBFMEMxMDEwMEY2OTQ5QzE3ODAzMjAwMDAxMzk5MDA0MDlDCis6MTAyN0MwMDA4MTMyMDEwMEY4OTQyMjQ3MTk3QzAwMDAwMDAwMDA1RjZDCis6MTAyN0QwMDAxMzkwMDEwMEEzOTgwMDQ3MTkxMDAxMDBDMDAwMkQ0NDc4Cis6MTAyN0UwMDAxRjkwMDEwMEM0MDAyREYwODJCMDAxMDBFRTk4MDBGMEFGCis6MTAyN0YwMDA4NEIwMDAwMDkwMDAyRDA1NDhCMTAxMDAwRDk1QTI0QjVBCis6MTAyODAwMDAxRjdDMDAwMDYwOTVBMjRDMUY3QzAwMDAwRDk1MUYxQ0QyCis6MTAyODEwMDBFMDZEMDAwMDEwOTVBMjAxODAzMjAwMDBBODAwMkQ0NjU2Cis6MTAyODIwMDA4RkIwMDEwMDA2OTUxRjFDRTA2RDAwMDBCNDAwMDA0MDUxCis6MTAyODMwMDA0Mzk5MDEwMDA4OTUyMkYwM0E2QzAwMDA1RDk1MUZGMDY1Cis6MTAyODQwMDAzQTZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0RkZGCis6MTAyODUwMDA4RkIwMDEwMDhBMDAwMDQwNDM5OTAxMDA1RTk1MjA0MjNDCis6MTAyODYwMDBFNzZEMDAwMDBDOTUyMjQwODAzMjAwMDAwMDAwODA1OTg2Cis6MTAyODcwMDA4RkIwMDEwMDAwMDA4MDU4OEZCMDAxMDAwRjk1MjI0MEZBCis6MTAyODgwMDA4MDMyMDAwMDAwMDA4MDVDOEZCMDAxMDAwMDAwODA1QjlGCis6MTAyODkwMDA4RkIwMDEwMEFDMDAwMDQwNDM5OTAxMDBCMDAwMkRGMDYyCis6MTAyOEEwMDA4NEIwMDEwMDE0OTVBMjQyMjQ2QzAwMDAxRDk1MjNGMDExCis6MTAyOEIwMDAwMjZDMDAwMDFBOTVBMkYwODAzMjAwMDA1Rjk1QTI0MkRGCis6MTAyOEMwMDAyNDZDMDAwMDVGOTVBMjQxMDM2QzAwMDAxOTk1QTI0MEEyCis6MTAyOEQwMDA4MDMyMDAwMDAwMDA4MDUxOEZCMDAxMDAwMDAwODA1MjYzCis6MTAyOEUwMDA4RkIwMDEwMDVGOTUxRjEyODQ1MDAwMDA1Rjk1QTAwMTFBCis6MTAyOEYwMDA4NDZDMDAwMDBEOTUwMDQwODFCMjAwMDA4QjAwMDA0MDA4Cis6MTAyOTAwMDA0Mzk5MDEwMDQ4OTVBMjQ2RTc3RDAwMDAxNDAwMDA0MDZECis6MTAyOTEwMDA0Mzk5MDEwMDNBOTUyMkYwMTQzMDAwMDAyNjk1MjAwQUQwCis6MTAyOTIwMDAwMjZDMDAwMDM3OTUwMzFFODAzMjAwMDAyNTk1QTI0MEZFCis6MTAyOTMwMDA4MDMyMDAwMDAwMDA4MDQ0OEZCMDAxMDAwMDAwODA0OTE4Cis6MTAyOTQwMDA4RkIwMDEwMDJCOTUyMjBBMDI2QzAwMDAyRTk1QTI0MTQ3Cis6MTAyOTUwMDAxOTdDMDAwMDJBOTVBMjQwODAzMjAwMDAwMDAwODA1NUJBCis6MTAyOTYwMDA4RkIwMDEwMDAwMDA4MDU2OEZCMDAxMDAyRDk1QTI0MDZECis6MTAyOTcwMDA4MDMyMDAwMDAwMDA4MDQzOEZCMDAxMDAwMDAwODA0OERBCis6MTAyOTgwMDA4RkIwMDEwMDAwMDAwMDAxODJCMDAxMDAwMDAwMDAwQUM5Cis6MTAyOTkwMDA4MkQwMDEwMDM0OTUyMDkxODM2QzAwMDAzMzk1QTI0MEQxCis6MTAyOUEwMDA4MDMyMDAwMDI2MDA4MDQwOEY5ODAxMDAyNzAwODA0MDgwCis6MTAyOUIwMDA4Rjk4MDEwMDM2OTVBMjQwODAzMjAwMDAxRjAwODA0MEIxCis6MTAyOUMwMDA4Rjk4MDEwMDIwMDA4MDQwOEY5ODAxMDAzOTk1QTI0MDI3Cis6MTAyOUQwMDA4MDMyMDAwMDIyMDA4MDQwOEY5ODAxMDAyMzAwODA0MDU4Cis6MTAyOUUwMDA4Rjk4MDEwMDg4MDAyRDQ0OEZCMDAxMDA0Mzk1QTI0MUNCCis6MTAyOUYwMDAxOTdDMDAwMDQwOTVBMjQzM0Q3QzAwMDA0MDk1QTJGMjY2Cis6MTAyQTAwMDAwMjZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0OTdCCis6MTAyQTEwMDA4RkIwMDEwMDQyOTVBMjQwODAzMjAwMDAwMDAwODA0MzQ4Cis6MTAyQTIwMDA4RkIwMDEwMDAwMDA4MDQ4OEZCMDAxMDA0MDk1QTA5MTU4Cis6MTAyQTMwMDAwMzZDMDAwMDNFOTUyMjQzM0Q3QzAwMDA0Nzk1QTI0MDc4Cis6MTAyQTQwMDA4MDMyMDAwMDI4MDA4MDQwOEY5ODAxMDAyOTAwODA0MERCCis6MTAyQTUwMDA4Rjk4MDEwMDE0MDAwMDQwNDM5OTAxMDA1MTk1QTJGMEE1Cis6MTAyQTYwMDAxNDMwMDAwMDg4MDAyRDQ0OEZCMDAxMDA0RTk1QTJGMjcyCis6MTAyQTcwMDAwMjZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0OTBCCis6MTAyQTgwMDA4RkIwMDEwMDQwOTUyMjQxMTk3QzAwMDAzRTk1MjA5MUI1Cis6MTAyQTkwMDAwMzZDMDAwMDQwOTUwMDQwODFCMjAwMDA1NTk1MjAwQTZCCis6MTAyQUEwMDAwMjZDMDAwMDU0OTVBMjQwODAzMjAwMDAwMDAwODA0NDc3Cis6MTAyQUIwMDA4RkIwMDEwMDAwMDA4MDQ5OEZCMDAxMDA1QTk1MjIwQUIyCis6MTAyQUMwMDAwMjZDMDAwMDJFOTVBMjQxMTk3QzAwMDA1OTk1QTI0MDhECis6MTAyQUQwMDA4MDMyMDAwMDAwMDA4MDU1OEZCMDAxMDAwMDAwODA1NjU5Cis6MTAyQUUwMDA4RkIwMDEwMDVDOTVBMjQwODAzMjAwMDAwMDAwODA0MzVFCis6MTAyQUYwMDA4RkIwMDEwMDAwMDA4MDQ4OEZCMDAxMDA2Mjk1MDA0MzU0Cis6MTAyQjAwMDA5NUIwMDAwMDYyOTUwMDQxOTVCMDAwMDA2Mjk1MDA0MkNBCis6MTAyQjEwMDA5NUIwMDAwMDYyOTUwMDQ0OTVCMDAwMDA2Mjk1MDA0Q0FECis6MTAyQjIwMDA5NUIwMDAwMDBCOTgwMDQwODEzMjAxMDA2NTk1QTI0MEVECis6MTAyQjMwMDA4MDMyMDAwMDAwMDA4MDRCOEZCMDAxMDAwMDAwODA0QzBDCis6MTAyQjQwMDA4RkIwMDEwMDJEMDAwMDQwNDM5OTAxMDAyRTAwMkZGM0FCCis6MTAyQjUwMDA4NEIwMDEwMDZBOTVBMkYzOTYzMDAwMDAwMDAwODA0MDI2Cis6MTAyQjYwMDAwMUIwMDEwMDJEMDAyQTQxRTdEMTAxMDBENDAwM0Q0MTEwCis6MTAyQjcwMDA4NUUwMDEwMDBCMDAwMEYyMDBFNDAxMDA3MDk1MjI1QThDCis6MTAyQjgwMDAwMTdDMDAwMDAwMDAwMDQwMUY5MDAxMDA3MTk1MDA1QTc4Cis6MTAyQjkwMDAwMTgwMDAwMDAwMDAwMDQwMUY4MDAxMDAwMDAwNjM0MTMwCis6MTAyQkEwMDA4NUMwMDEwMDAwMDBBMEE1ODU2QzAxMDAwMDAwRTM0MDg1Cis6MTAyQkIwMDA4NUIwMDEwMDBDODAwMDAzNDJDOTAxMDAxMjAwMDA0MEYyCis6MTAyQkMwMDA4Nzk4MDEwMDU1OTkwMEYwOENCMDAwMDA3RTk1MjI0MDU2Cis6MTAyQkQwMDAwRjZDMDAwMDAwMDAyRjA1NDhCMTAxMDA3Qjk1QTI0QjRGCis6MTAyQkUwMDAxOTdDMDAwMDdDOTUyMkYwMTg2QzAwMDAwMDAwNjA0QkZFCis6MTAyQkYwMDAxOTkwMDEwMDQ4OTYwMDA3MTAzMDAxMDA2Rjg0MDA0MEQyCis6MTAyQzAwMDAwNUIwMDAwMDgwOTUyMjVBMUY3QzAwMDBDRDk1MDA0MDQxCis6MTAyQzEwMDA4MTMwMDEwMDZGODQwMDQwMDVCMDAwMDAwMDAwMkYwNUU2Cis6MTAyQzIwMDA0OEIxMDEwMDAwMDA2MDRCMTk5MDAxMDA0ODk2MDAwNzcwCis6MTAyQzMwMDAxMDMwMDEwMDZGODQwMDQwMDVCMDAwMDAwMDAwMkYwNTM3Cis6MTAyQzQwMDA0OEIxMDEwMDAwMDA2MDRCMTk5MDAxMDA0ODk2MDAwNzUwCis6MTAyQzUwMDAxMDMwMDEwMDAwMDA4MDQwMDVCMDAxMDA4OTk1MzM0MDJDCis6MTAyQzYwMDA4MTMyMDAwMDhDOTVBMUFEOTUyMDAwMDA5QTk1MTM0MDBCCis6MTAyQzcwMDA4MUIyMDAwMDAwMDAxMzRBNUE4MzAxMDAzMDAwMzk0NTM4Cis6MTAyQzgwMDA5NUUwMDEwMDFGMDAwMDBGNUVEODAxMDAwMDAwMDA1QTBGCis6MTAyQzkwMDA1RjkwMDEwMDAwMDAwMDQwNDVCMDAxMDAwMDAwMDAwNDBBCis6MTAyQ0EwMDA0OEIwMDEwMDAwMDAwMDA1NEFCMDAxMDAwMDAwMDAwQzFGCis6MTAyQ0IwMDA1OEIwMDEwMDAwMDAwMDA3NEVCMDAxMDAxODg2MDA0MDI3Cis6MTAyQ0MwMDA1RDk4MDEwMDAwMDAwMDU4NjFCMTAxMDAwMDAwMDA0QTU5Cis6MTAyQ0QwMDA2MkIxMDEwMDAwMDBBODQxOTdCMDAwMDA5Nzk1MDA0MDQ0Cis6MTAyQ0UwMDA4MUIyMDAwMDAwMDA4MDQwOTdCMDAxMDA5Qjk1NDQwNzJFCis6MTAyQ0YwMDA5NjMwMDAwMEZGRkYwMDRCODQ4OTAxMDAwMDAwMUNDMkQ5Cis6MTAyRDAwMDAyNEIwMDEwMEE1OTVBMjQ1MjU3QzAwMDA5Rjk1MzEyMEE3Cis6MTAyRDEwMDA4NTMwMDAwMEE2OTUyMjEyNDg3RjAwMDA2Nzk4MTExMkE2Cis6MTAyRDIwMDA0ODAzMDEwMDEwMDAwMDEyOTZFNDAxMDAwMDAwMDA0QjZGCis6MTAyRDMwMDAxRTk0MDEwMDAwMDA4MDVBMUY5MDAxMDBBNTk1MzE0MEFCCis6MTAyRDQwMDA4MTMyMDAwMDAwMDAwMEI0MjRCMDAxMDBBNjk1MjIxMkQ4Cis6MTAyRDUwMDA0ODdGMDAwMDY3OTgwMDQwODEzMjAxMDAwMDAwMkYwNTg1Cis6MTAyRDYwMDA0OEIxMDEwMEIzOTUwQkYwODQzMDAwMDAwMDAwMTExMjRGCis6MTAyRDcwMDA0ODgzMDEwMEIwOTUyMjUwODU3MDAwMDA1RTAxMDA0MDNDCis6MTAyRDgwMDA0Mzk5MDEwMDY3OTcwMEYyOTYzMDAxMDBFOTk5MDAxMjFCCis6MTAyRDkwMDA5NDMwMDEwMDAwMDAwMDVBMUY5MDAxMDAxMDAwMDAxMjQyCis6MTAyREEwMDA5NkU0MDEwMDAwMDA4MDRCMUU5NDAxMDAxMDAwMDA0MkQ4Cis6MTAyREIwMDAxMEY0MDEwMDAwQjczRjQzMTFGMDAxMDAwNzAwMDAwOEM0Cis6MTAyREMwMDA4QTg4MDEwMEI2OTUzMEExMEMzMDAwMDBCOTk1MjI0NUUzCis6MTAyREQwMDBFNjdEMDAwMEE2OTUxMDQwODFCMjAwMDAwMDAwMkE0NTYzCis6MTAyREUwMDBFNjkxMDEwMDAwMDAxMDEyNDg4MzAxMDAwMDAwMTE0MDJDCis6MTAyREYwMDA4MUIyMDEwMDAwMDA2MDRCODU4MDAxMDA1RTAxMDA0MDRGCis6MTAyRTAwMDA0Mzk5MDEwMDY3OTcwMEYyOTYzMDAxMDAwMDgwMDAxMDlFCis6MTAyRTEwMDA0NEM5MDEwMEQ4MDAwMDQwODE5ODAxMDAyRTAwMkQwNTEyCis6MTAyRTIwMDA0OEIxMDEwMEM0OTUyMjQwRTc2RDAwMDA4MDAwMDA0MEQ5Cis6MTAyRTMwMDA4MEM4MDEwMDAwMDAwMDQwRjBCMTAxMDAwOTAwMDAwODU2Cis6MTAyRTQwMDA4NkU0MDEwMDAwMDA2OEE3ODdDMDAxMDAwMDAwMDA0NDdDCis6MTAyRTUwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBDODk1QTgwNTMxCis6MTAyRTYwMDBFMDMxMDAwMDEwMDAwMDEyOTZFNDAxMDAwMDE0MDA0QjU1Cis6MTAyRTcwMDA5NkRDMDEwMDAwMDA4MDRCMUU5NDAxMDAxMDAwMDAwRjQyCis6MTAyRTgwMDA4NEY0MDEwMDFGMDAwMDQyODQ4ODAxMDBEMTk1MjI0MDkzCis6MTAyRTkwMDA4MDMyMDAwMEQyOTUwMDQyNjhCMTAwMDAwMDAwMDA0MjdDCis6MTAyRUEwMDA2QUIxMDEwMEQyOTUzMTVBMUYwMDAwMDAwMDAwOTE0MjIyCis6MTAyRUIwMDA0ODkzMDEwMEQ0OTUzNTQwODEzMjAwMDA2RDAwMDA0MEY4Cis6MTAyRUMwMDA2MTk5MDEwMERBOTUyOEIxMkMzMDAwMDBENTk1MjI0RDhBCis6MTAyRUQwMDA3NTdEMDAwMDAwMDAwMDQwMkRCMDAxMDAwMDAwOTU0MDBECis6MTAyRUUwMDAxMUIwMDEwMDZEMDAwMDQwNjE5OTAxMDBEQTk1QThCMUIwCis6MTAyRUYwMDAxMDMwMDAwMDAwMDA5NTQwODFCMjAxMDA3RjAwMDA0MENBCis6MTAyRjAwMDA2MTk5MDEwMEUxOTUyOEIxMTAzMDAwMDBERDk1OUZCQTZDCis6MTAyRjEwMDA4MDMyMDAwMDAwMDA4MDQwMTFCMDAxMDAwMDAwODAyNEQ5Cis6MTAyRjIwMDAxMTg0MDEwMDAwMDAwMDVGNjFCMTAxMDAwMDEwMDAwMDg5Cis6MTAyRjMwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDBFMzk1MDA0MDdFCis6MTAyRjQwMDA4MUIyMDAwMEFDOTQwMDQwNDc5OTAxMDBFNzk1MzI0MEZGCis6MTAyRjUwMDA4MTMyMDAwMEVEOTUyMkY4OTYzMDAwMDAwMDAwMDBGODY0Cis6MTAyRjYwMDA5MEIwMDEwMDAwMDAwMEYwOTJCMDAxMDAwMTAwMDA0QkExCis6MTAyRjcwMDBGMENEMDEwMDIwMDA5MjQ4RTBDOTAxMDA2QzAwMDA0MDQzCis6MTAyRjgwMDA2MTk5MDEwMEYxOTUyOEIxOTIzMDAwMDBFRDk1MjI0QzM1Cis6MTAyRjkwMDA3NTdEMDAwMDA0MDAxMjQwOTFCMDAwMDA2QzAwMDA0MEZDCis6MTAyRkEwMDA2MTk5MDEwMEYxOTVBOEIxOTAzMDAwMDBGRjAwMDA0ODQwCis6MTAyRkIwMDA5Njg4MDEwMDAwMDAwMDRCOTBEMDAxMDAwMTAwMDA0QkZBCis6MTAyRkMwMDBGMENEMDEwMDIwMDAwMDQ4RjBDOTAxMDAwMDAwOTI0OTQ2Cis6MTAyRkQwMDBFMEIxMDEwMDBDMDAyRDEwNDhCMTAxMDBGRjA3MDAwODBFCis6MTAyRkUwMDA4MjhDMDEwMEZGMDcwMEYwMDA4QzAxMDAwMDAwQTI0MTZDCis6MTAyRkYwMDAwMEVDMDAwMEZFOTUyMjFBMDA2QzAwMDBFMjk1MDAwMDMzCis6MTAzMDAwMDAzNDMwMDEwMDAwMDAwMDUwNDlDMTAxMDBGQTk1QTI0MThFCis6MTAzMDEwMDAyMzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwQzAwMkQxMDAwCis6MTAzMDIwMDA0OEIxMDEwMEZGMDcwMDE1ODI4QzAxMDBGRjA3MDBGMDg2Cis6MTAzMDMwMDAwMDhDMDEwMDAwMDBBMjQxMDBFQzAwMDAwNzk2MjIwRDY4Cis6MTAzMDQwMDAwMDZDMDAwMEUyOTUwMDAwMUEzMDAxMDAwMDAwMDA1MDAyCis6MTAzMDUwMDA0OUMxMDEwMDAzOTZBMjQxMjM1MDAwMDAwMDAwODA0MEI2Cis6MTAzMDYwMDA4MUIyMDEwMDBDOTY4MzFFODAzMjAwMDAwMDAwMDA0NEYzCis6MTAzMDcwMDAxOTkwMDEwMDI0MDAyRDAxMkNCMDAxMDAyODAwMkRGMDMyCis6MTAzMDgwMDAxNkIwMDEwMDIyMDAyREYwMjZCMDAxMDAxNDAwMkZGMjJFCis6MTAzMDkwMDAwQ0IwMDEwMDAwMDA4MDQwRTFCMTAxMDAwMjAwMkQxMUUwCis6MTAzMEEwMDAxMEMxMDAwMDE1OTYwMDQwNDNDMTAwMDAxNTk2MDA1MDY1Cis6MTAzMEIwMDA0M0MxMDAwMDIwMDAwMEExNDJDOTAxMDAxQTk2MjI0MDJECis6MTAzMEMwMDBGNTZEMDAwMDAwMDAwMDQyNDNEMTAxMDAwNDAwQTI0MDYxCis6MTAzMEQwMDBFNTdEMDAwMDAwMDAwMDQwMjNCMDAxMDAwMDAwODA0OUIxCis6MTAzMEUwMDAxRjkwMDEwMDFEOTYyMjExMUU3QzAwMDAxRjk2QTBGMDZCCis6MTAzMEYwMDAxNjQwMDAwMDFGOTYwMDQxMTdDMDAwMDAxRjk2QTBGNDY0Cis6MTAzMTAwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwQTI0MTZECis6MTAzMTEwMDAyM0QwMDAwMDE1OTYwMDUyNDNEMTAwMDAwMEI1MDAwREU5Cis6MTAzMTIwMDA0MkM5MDEwMDIyOTYzMDQ3MTcwNDAwMDAyNTk2QTIwQkUxCis6MTAzMTMwMDBFNjdEMDAwMDAwMDA5MDQyODFCMDAxMDAwMEI3MDAwRDY0Cis6MTAzMTQwMDA0NkM5MDEwMDI5OTZBMjBCRTY3RDAwMDAwMDAwMDAwQjk1Cis6MTAzMTUwMDBFNjkxMDEwMDAwMDA5MDQxODFCMDAxMDAwMDAwMTA0MEE0Cis6MTAzMTYwMDA4MUIyMDEwMDJBOTY0MDA3OTYzMDAwMDBGMzk5MDA0MDkyCis6MTAzMTcwMDA4MTMyMDEwMDM0OTZBMjQ1OTU3QzAwMDAwMTk3M0Y0MUMxCis6MTAzMTgwMDA5NUUwMDEwMDAwMDAwMEYzOTZCMDAxMDAwMDAwMDA0RTQxCis6MTAzMTkwMDBFNkIxMDEwMDQwOTczRTQwOTdFMDAxMDAwMDAwMDA0RTdDCis6MTAzMUEwMDBFNkIxMDEwMDQwOTczRTQwOURFMDAxMDA0Nzk2MDAzQjlDCis6MTAzMUIwMDBFN0IxMDAwMDM0OTYzMDQwODEzMjAwMDAzRTk2QTIwQjA5Cis6MTAzMUMwMDBFNjdEMDAwMDAwQjUwMDBENDZDOTAxMDAzQTk2QTIwQjRECis6MTAzMUQwMDBFNjdEMDAwMDAwMDAxMDQwODFCMjAxMDAwMDAwOTg0MjJFCis6MTAzMUUwMDA4MUIwMDEwMDAwQjcwMDBENDZDOTAxMDAwMDAwMDAwQkNFCis6MTAzMUYwMDBFNjkxMDEwMDAwMDAxMDQwODFCMjAxMDAwMDAwOTg0MUZBCis6MTAzMjAwMDA4MUIwMDEwMDA0MDAyMUEyOTUyMDAwMDAwMDAwMTA0QUI2Cis6MTAzMjEwMDA0NDgzMDEwMDAwOTczRTQxOTVFMDAxMDAwMDAwMDA0RTBDCis6MTAzMjIwMDBGNkIxMDEwMDAwMDAwMDRFRTZCMTAxMDA0MDk3M0U0MEJCCis6MTAzMjMwMDA5REUwMDEwMDAwMDAwMDNCRTdCMTAxMDAwMDAwMDA0QUYyCis6MTAzMjQwMDA5MEIxMDEwMEZGRkYwMDA3OTI4OTAxMDAwMDAwOTg0MDQzCis6MTAzMjUwMDA4MUIwMDEwMDAzMDAwMDA4ODZGNDAxMDAwMEI3MDA0M0JDCis6MTAzMjYwMDA0NkM5MDEwMDA3MDAwMDA4ODI4ODAxMDA0Qjk2NDAwODBCCis6MTAzMjcwMDA5NjMwMDAwMEYzOTkwMDQwODEzMjAxMDA1Nzk2MjI0NUI0Cis6MTAzMjgwMDA5NTdDMDAwMDUzOTYyMjVBMUY3QzAwMDAxMDAwMDAwRjBFCis6MTAzMjkwMDA5NkY0MDEwMDUwOTYzMTVGOTcwNDAwMDAwMDAwMTE0QjM2Cis6MTAzMkEwMDA0ODkzMDEwMDAwMDAwMDRCNkFCMTAxMDA1Mzk2MzA0MDgyCis6MTAzMkIwMDA4MTMyMDAwMDAwMDAwMDQxRTY4MTAxMDAwMDAwMTA0MDYyCis6MTAzMkMwMDA4MUIyMDEwMDAwMDA5ODQwODFCMjAxMDAwMDk3M0Y0MUE3Cis6MTAzMkQwMDA5NUUwMDEwMDAwMDAwMEYzOTZCMDAxMDA0MDk3M0Q0MEVBCis6MTAzMkUwMDA5N0UwMDEwMDAwMDA2M0YzODhCMDAxMDA1Rjk2QTIzQjA1Cis6MTAzMkYwMDA4OTZDMDAwMDAwMDAwMDRBOTBCMTAxMDAwMTAwMDBBNkE2Cis6MTAzMzAwMDA5MkIxMDEwMDYwOTYxODRBNDQ5MzAwMDAwMDAwMTg0MEYyCis6MTAzMzEwMDA4MUIyMDEwMDMwMDAzOTQ1OTdFMDAxMDA2NTk2MjI1QURDCis6MTAzMzIwMDAxRjdDMDAwMDFGMDQwMDBGOThEODAxMDAwMDAwMDA0QzEzCis6MTAzMzMwMDA1RTk0MDEwMDY3OTYwMDA1NEFCMDAwMDAxRjA0MDBBN0Q0Cis6MTAzMzQwMDA1RTg0MDEwMDAwMDAwMDQwNEJCMDAxMDAwMDAwMDA1ODA2Cis6MTAzMzUwMDA2MUIxMDEwMDAwMDAwMDRCNjJCMTAxMDAwMDAwQTg0MDEzCis6MTAzMzYwMDA4MUIyMDAwMDY4OTYwMDQwODFCMjAwMDA2Qjk2NDAwNzcxCis6MTAzMzcwMDA5NjMwMDAwMEYzOTkwMDQwODEzMjAxMDA2Rjk2MjI0NTlCCis6MTAzMzgwMDA5NTdDMDAwMDAwMDA5ODQwODFCMjAxMDBGMTk5MDA0QTRDCis6MTAzMzkwMDA0NDEzMDEwMDAwOTczRjQxOTVFMDAxMDAwMDAwMDBGMzU1Cis6MTAzM0EwMDA5NkIwMDEwMDQwOTczRDQwOTdFMDAxMDAwMDAwNjNGM0I0Cis6MTAzM0IwMDA4OEIwMDEwMDMwMDAzODQ1OTdFMDAxMDAwMDAwMDA1RjUwCis6MTAzM0MwMDAwRjkwMDEwMDAwMDAwMDU4NjFCMTAxMDAwMDAwMDA0QkE3Cis6MTAzM0QwMDA2MkIxMDEwMDc3OTZBODQwODEzMjAwMDA3MDk2QTIzQjRFCis6MTAzM0UwMDA4OTZDMDAwMDMwMDAzODQ1OURFMDAxMDAwMDAwOTg0MEU1Cis6MTAzM0YwMDA4MUIyMDEwMEU5OTkwMDEyOTQzMDAxMDA0ODk2MDA1QTA4Cis6MTAzNDAwMDAxRjAwMDEwMDAwMDA4MDVBMUY5MDAxMDAxMTAwMDA0QUI3Cis6MTAzNDEwMDBFNkM5MDEwMDM0MDAyRjRGOTU4NDAxMDAwMDAwMDBGMzNECis6MTAzNDIwMDA5NkIwMDEwMDAxMDA2MzRCODRDODAxMDAwMDAwQTA0Mzc2Cis6MTAzNDMwMDA4NTZDMDEwMDAwMDBFMzQwODVCMDAxMDAzMDAwMkQ0NEEwCis6MTAzNDQwMDAxRjkwMDEwMDMyMDAyREYyMkFCMDAxMDAwNDAwMjJGMjg4Cis6MTAzNDUwMDAwMjMwMDAwMDY2OTUwMDEwMzIzMDAxMDAzMjAwQTA0MEJBCis6MTAzNDYwMDBFNUIxMDEwMDAwMDAwMDQwOTdCMDAxMDBGMDA3MDA0MDA2Cis6MTAzNDcwMDA5OTk4MDEwMDAwMDAwMDRBMDJDMDAxMDAwMDAwMDA1MEJECis6MTAzNDgwMDAwM0QwMDEwMDAwMDAwMDQxOTdDMDAxMDAwMDAwQTM0Q0UwCis6MTAzNDkwMDAwMkQwMDAwMDhFOTYwMDQwODFCMjAwMDAwMDAwMDBBODFCCis6MTAzNEEwMDAzNkIwMDEwMDlFOTYyMjQxMDM1MDAwMDAwMDgwMDAxMEJCCis6MTAzNEIwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDA3MDAwMDAwMzk4Cis6MTAzNEMwMDBGMEM5MDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMERECis6MTAzNEQwMDA2MkIxMDEwMDk3OTZBODAwRTAzMTAwMDAxQjg0MDA4OENCCis6MTAzNEUwMDAxQ0IwMDAwMEUyOTUwMDQwODEzMjAxMDA3QzgwMDAwM0E2Cis6MTAzNEYwMDA0MkM5MDEwMDAwMDAwMEYwMDBCMDAxMDA5Mjk2MDA1QzlCCis6MTAzNTAwMDAwMTgwMDAwMEUyOTUwMDQwODEzMjAxMDAwMDAwMDAxQkI0Cis6MTAzNTEwMDAxMEIxMDAwMDY4MDEyRDA2ODJCMDAxMDAwMDAwMDBGMjI5Cis6MTAzNTIwMDA4MkMwMDEwMDAwODAwMDAzNDZDOTAxMDBERDk1MDA0MDEzCis6MTAzNTMwMDA4MTMyMDEwMEM1OTYyMjQwMTE2QzAwMDAwMDAwNjgwODJECis6MTAzNTQwMDAzODk2MDEwMEYwMDcwMDQxODJDQzAxMDBBMzk2QUE0MTAxCis6MTAzNTUwMDAzQjQwMDAwMDAwMDAwMEY4MTBCMDAxMDAwMDAwMDA1Q0RCCis6MTAzNTYwMDAxMTgwMDEwMDAxMDAwMDFEMDRDQzAxMDBDNDk2MjY0NjE0Cis6MTAzNTcwMDAyMzMwMDAwMDA4MDAwMDAzMTJDODAxMDA2NDAxMjBGMDlECis6MTAzNTgwMDBFMEIxMDEwMEMzOTYyMjQxMDU1MDAwMDAyMDAwMDAwMzc1Cis6MTAzNTkwMDA0OEM5MDEwMDBDMDAwMEY4ODZDODAxMDAwMDAwMjI0NDYwCis6MTAzNUEwMDBGMUIxMDEwMDAwMDAwMDQzRjBCMTAxMDAwMDAwMDAwOThBCis6MTAzNUIwMDBFMEIxMDEwMDAwMDAwMDQ0NjFCMTAxMDBBMDAwMDBBNERFCis6MTAzNUMwMDA2MkREMDEwMEI1OTZBODQ2MUYxMDAwMDBDMjk2MjI0MTk4Cis6MTAzNUQwMDAwNTUwMDAwMEMwOTZBMjQxMjM1MDAwMDAwMDAwMDBBMTQ5Cis6MTAzNUUwMDAxQUIwMDEwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDY5Cis6MTAzNUYwMDA2MkREMDEwMEJCOTZBODQ2MjMzMDAwMDAxQjg0MDA4OEQyCis6MTAzNjAwMDAxQ0IwMDAwMDEwMDAwMDAzNDhDOTAxMDAwMDAwMDAwREJDCis6MTAzNjEwMDA0MkIxMDEwMDAwMDAwMDQ0MTNDMDAxMDBCMDk2MDA1MDA4Cis6MTAzNjIwMDA0OUMxMDAwMDAwMDAwMDA1NDhCMTAxMDAwNDgwMDAwMzBBCis6MTAzNjMwMDAxQUM4MDEwMDAwMDA4MDQwODFCMjAxMDBDNDk2MjI0MEY3Cis6MTAzNjQwMDAzQjZDMDAwMDAwMDAwMEY4MDBCMDAxMDBFMjk1MDA1QzU3Cis6MTAzNjUwMDAwMTAwMDEwMEM1OTYwMDQxM0JEMDAwMDAwMDAwOEQ0N0VECis6MTAzNjYwMDA4MDMyMDEwMEIwMDAyRjVGMTNCMDAxMDAwMDAwRTBGMEQ1Cis6MTAzNjcwMDA4Q0MwMDEwMDAwODAwMDAzNDJDOTAxMDAwMDAwMDBGODc2Cis6MTAzNjgwMDA5NEIwMDEwMDAwMDAwMEY4OENCMDAxMDBEMTk2OENGOEQ1Cis6MTAzNjkwMDA4RTMwMDAwMDAwMDAwMDQ0MTk5MDAxMDAwNDAwMjJGODYwCis6MTAzNkEwMDAxNDMwMDAwMDAwMDAwMEY4MTZCMDAxMDAwMDAwMDBGODFGCis6MTAzNkIwMDAyNkIwMDEwMDA4MDAyRUY4MENCMDAxMDAwQzAwMkE0QUM4Cis6MTAzNkMwMDBFMEIxMDEwMDI4MDAwMDAwRTBDOTAxMDAxMDAwMjAxQjRCCis6MTAzNkQwMDBFMEIxMDEwMERFOTYyMDBBMEM2QzAwMDAwMDAwMDBGODRBCis6MTAzNkUwMDA5NEIwMDEwMDAwMDAwMEY4OTZCMDAxMDAyMDAwMjBGMDI2Cis6MTAzNkYwMDBFNEIxMDEwMDE4MDAyMDRBRTBCMTAxMDAxQzAwMjA0Qjk5Cis6MTAzNzAwMDBFMEIxMDEwMEM5OTYwMDQwMTNCMDAwMDAyQzAwMkQ0MjJBCis6MTAzNzEwMDAxOTkwMDEwMDJFMDAyRkYzODJCMDAxMDAwMDAwMDBGMzg5Cis6MTAzNzIwMDA5NkIwMDEwMEU0OTZBMkE1OTc2QzAwMDAwMDAwODA0MUNECis6MTAzNzMwMDA5NUIwMDEwMEU3OTZBMjQwOTc2QzAwMDAwMDAwMDA0MEExCis6MTAzNzQwMDA4M0IwMDEwMDJEMDAyMDQwRTdCMTAxMDAwMDAwNjM0MTdCCis6MTAzNzUwMDA5N0MwMDEwMEQ0MDAzRTQxODNFMDAxMDAwMDAwMDA0MTE5Cis6MTAzNzYwMDA4M0MwMDEwMEVDOTZBMEE1ODM2QzAwMDAwMDAwMDA0MDFGCis6MTAzNzcwMDA4M0IwMDEwMDJDMDAyMDQxRTZCMTAxMDBGMTk2MjI0MDA3Cis6MTAzNzgwMDAxRjdDMDAwMDAwMDQwMDAwOThEQzAxMDAwQjAwMDA0Q0NFCis6MTAzNzkwMDBFNEY1MDEwMDAwMDA4MDQwMUY4MDAxMDAwQjAwODAwMDY0Cis6MTAzN0EwMDBFNEY1MDEwMEU2OTUwMDQwODEzMjAxMDAwNDgwMDAwMzQ5Cis6MTAzN0IwMDA0NEM5MDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MEQ4Cis6MTAzN0MwMDBGMUIxMDEwMDAwMDA2MDQxODdCMDAxMDAwMDgwMDAxMEVECis6MTAzN0QwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDA0OEEwCis6MTAzN0UwMDBGMEIxMDEwMDAwMDAwMDQ5RjBCMTAxMDAwMDAwMDAwMzQ5Cis6MTAzN0YwMDBFMEIxMDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAxMEFGCis6MTAzODAwMDA2MkREMDEwMDAwMDBBODVEMDU5MDAwMDBGRDk2MDA0MDBCCis6MTAzODEwMDA4MUIyMDAwMEU2OTUwMDQwODEzMjAxMDAwMDgwMDAwMzgzCis6MTAzODIwMDA0NEM5MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDA0MjY1Cis6MTAzODMwMDBGMEIxMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0M0MwCis6MTAzODQwMDBGMEIxMDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEU4Cis6MTAzODUwMDBGMUIxMDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OTkyCis6MTAzODYwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NURDCis6MTAzODcwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1REMwCis6MTAzODgwMDAwNTkwMDAwMDBDOTcwMDQwODFCMjAwMDAyRDAwMDA0MDIwCis6MTAzODkwMDA0Mzk5MDEwMDJFMDAyRkYzODRCMDAxMDAwMTAwNjNGMzZGCis6MTAzOEEwMDA5NkM4MDEwMDE0OTc5RjQxODU1MDAwMDAwMTAwMDBBNUIzCis6MTAzOEIwMDA4NUNDMDEwMDJEMDBBMDQyRTZCMTAxMDA1RTAxMkQwMDgzCis6MTAzOEMwMDA4MEIwMDEwMDE5OTc1MjQzODE2MDAwMDAwMjAwMDBGMkFECis6MTAzOEQwMDA4MkY0MDEwMDFBOTcwMDQxODA5NDAwMDAwMDAwMDA1RjBDCis6MTAzOEUwMDA4MTkwMDEwMDAwMDAwMDVFNjFCMTAxMDAwMDAwMDA0MDE1Cis6MTAzOEYwMDA2MkIxMDEwMDAwMDBBODQwOTVCMDAwMDAxQjk3OUVCQjdDCis6MTAzOTAwMDA4MDMyMDAwMDIwOTdBMjQwMUY3QzAwMDBFMjk1MDA0MDFBCis6MTAzOTEwMDA4MUIyMDAwMDAwMDA4MDQxOTVCMDAxMDAwNDAwMDAxNTU0Cis6MTAzOTIwMDA0MkM5MDEwMDAwMDAwMDU0MkJDMDAxMDAwMDAwMDBGQzRGCis6MTAzOTMwMDAyNEIwMDEwMDAwMDAwMEZDMzhCMDAxMDAwMDAwMDBGRUNGCis6MTAzOTQwMDAzQ0IwMDEwMDAwMDAwMEZFM0FCMDAxMDAzNTk3OUMxNzIyCis6MTAzOTUwMDA4MDMyMDAwMDJBOTdBMjRBMTk3QzAwMDAwMDAwODA0Q0E3Cis6MTAzOTYwMDAxRjkwMDEwMDBDMDAwMDFFOThGNDAxMDAyOTk3QTI0ODQ2Cis6MTAzOTcwMDA5OTZDMDAwMDAwMDAwMDE1NDJCMTAxMDAyOTk3QTI4QTRECis6MTAzOTgwMDBGMTZEMDAwMDBDMDAwMDAxMDJDQzAxMDAwMDAwMDBGQzAxCis6MTAzOTkwMDAzRUIwMDEwMDAxMDAwMEY0MjhDQzAxMDBDQzAwMkQwNTUwCis6MTAzOUEwMDA0OEIxMDEwMDM0OTcyMEYwM0U2QzAwMDAwMDAwMDA0QjRECis6MTAzOUIwMDAxRjkwMDEwMDAwMDAwMDRDMkJDMDAxMDBCRjAwMkQwNTJFCis6MTAzOUMwMDA0OEIxMDEwMDAwMDA4MEYzM0FFMDAxMDAwMDAwMkU0QkY2Cis6MTAzOUQwMDAxOTkwMDEwMDA3MDAyQTBDRTRCMTAxMDAwMDAwODAwNEU2Cis6MTAzOUUwMDBFNkIxMDEwMDE4MDAwMDQwNDM5OTAxMDAxQzAwMkRGMEQxCis6MTAzOUYwMDAxNkIwMDEwMDIwMDAyREYwMjZCMDAxMDAwQzAwMkZGMkJGCis6MTAzQTAwMDAwQ0IwMDEwMDAwMDBBMjA2MTRFQzAwMDA0MTk3MjI0NTEyCis6MTAzQTEwMDAxRjdDMDAwMDAwMDBBMzA2MkFFQzAwMDAwMDAwMDBGODU0Cis6MTAzQTIwMDA5NEIwMDEwMDAwMDAwMEYwOTZCMDAxMDAwQzAwMkQ0MEExCis6MTAzQTMwMDA4MUIyMDEwMDAwMDAyQTRDRTFDMTAxMDAzMDAwMDAxMEY5Cis6MTAzQTQwMDA0OEM5MDEwMDBBMDAwMDQwRjE5OTAxMDAxODAwMDAwNTcyCis6MTAzQTUwMDBGMEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0Qjc1Cis6MTAzQTYwMDBFMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNDI2Cis6MTAzQTcwMDA2MkREMDEwMDRCOTdBODVDMUYxMDAwMDAwMDAwODAwNTZDCis6MTAzQTgwMDA0OEIxMDEwMDAwMDAyRTEwNDhCMTAxMDAwMDAwNjgwMTlCCis6MTAzQTkwMDA5NkIwMDEwMDAwMDAwMDAzRjBCMTAxMDA1MTk3NDU0MkNCCis6MTAzQUEwMDA2MTMxMDAwMDAwMDAwMDEwNjJCMTAxMDA1Mjk3QTgwMENGCis6MTAzQUIwMDBFMDMxMDAwMDAwMDA5RDQwODFCMjAxMDAwMDAwMkUxMEE2Cis6MTAzQUMwMDA0OEIxMDEwMDAwMDA2ODAxOTZCMDAxMDAwMDAwMDAwMzQ5Cis6MTAzQUQwMDBGMEIxMDEwMDU4OTc0NTQyNjEzMTAwMDAyMDAwMDAxMDBDCis6MTAzQUUwMDA2MkREMDEwMDU5OTdBODAwRTAzMTAwMDAwMDAwOUQ0MDEwCis6MTAzQUYwMDA4MUIyMDEwMDMwODAwMDRBNDRDOTAxMDAwMDAwMDAwNjg0Cis6MTAzQjAwMDBGMUIxMDEwMEMwQTgzRDQ2MERFMDAxMDBGRjdGMDBBMTFBCis6MTAzQjEwMDBGMDg5MDEwMDAyMDAwMDA5OTZGNDAxMDAwMDAwMDA0NjRGCis6MTAzQjIwMDA5N0UwMDEwMDAwMDA2MEE4OTdDMDAxMDA2Mzk3NDY0MjNCCis6MTAzQjMwMDA2MTMxMDAwMDMwMDAwMDRBNjJDOTAxMDA2NDk3QTg0MDZBCis6MTAzQjQwMDA4MTMyMDAwMDAwMDA5RTQwODFCMjAxMDAwMDk5M0Y0Mjk2Cis6MTAzQjUwMDA5N0YwMDEwMDY4OTc0NzQwODEzMjAwMDA3MDk3MjJGMzg4Cis6MTAzQjYwMDA3NDA2MDAwMDNGMDAwMEYzOTQ4ODAxMDAwMDAwMDAwNzg1Cis6MTAzQjcwMDBFNzg1MDEwMDAwMDAxRjU1NjFCMTAxMDAwMDAwMDA0QTA3Cis6MTAzQjgwMDA2MkIxMDEwMDAwMDBBODQwODFCMjAwMDA2RDk3MDA0MEMyCis6MTAzQjkwMDA4MUIyMDAwMDAwMDA5RjQwODFCMjAxMDAwMDAwMDBBODM3Cis6MTAzQkEwMDAzNkIwMDEwMDgwOTc4MjQxMjM0MDAwMDA3NTk3QTI0NEZGCis6MTAzQkIwMDAxRjdDMDAwMEVGOTQwMDAxOEMzMDAxMDAyMDgwMDAxMDc5Cis6MTAzQkMwMDA0MkM5MDEwMDdCOTcyMjQwRTM2RDAwMDAwMDAwMDA0M0UyCis6MTAzQkQwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA3ODk3QTg0MDRCCis6MTAzQkUwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDA0MUVFCis6MTAzQkYwMDAyM0IwMDEwMDAwMDAwMDEwMzJCMDAxMDA4MDk3MjI0MTg0Cis6MTAzQzAwMDAxOTdDMDAwMEY4OTUwMDQzMjMzMDAxMDAwMDAwMDA0MUJBCis6MTAzQzEwMDAyM0IwMDEwMDgyOTdBMzE1MEM2QzAwMDA4Mzk3MDAwNjY3Cis6MTAzQzIwMDAwNEIwMDAwMDAwMDAwMDE1MDRCMDAxMDA4NTk3MjAwMkQ4Cis6MTAzQzMwMDAxQTZDMDAwMDAwMDAwMDBEMDRCMDAxMDAwNzAwMDAwQjJBCis6MTAzQzQwMDA5Njg4MDEwMDhBOTcyNjQ3OTcyNDAwMDAwMDAwMDA0MUNCCis6MTAzQzUwMDA5N0MwMDEwMDhBOTcyMzRCMDQ2QzAwMDAwMDAwMDA0QkMyCis6MTAzQzYwMDAwNEIwMDEwMDQ5OTgwMDA1NDgzMTAxMDBCNDk3MjIwMkQwCis6MTAzQzcwMDAxNDUwMDAwMDhFOTdBMjAyMkE1MDAwMDBCNDk3QTI0NTZCCis6MTAzQzgwMDAxRjdDMDAwMDkwOTcyMjAyMEM1MDAwMDA5OTk3MDAwMkMwCis6MTAzQzkwMDAxNkMwMDAwMDk4OTcyMjVDMUY3QzAwMDAzMDgwMDAxMDQ2Cis6MTAzQ0EwMDA0MkM5MDEwMDk4OTcyMjQwRTM2RDAwMDAwMDAwMDA0N0UwCis6MTAzQ0IwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA5NDk3QTg0MDRFCis6MTAzQ0MwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTQ5Cis6MTAzQ0QwMDA0OEIxMDEwMDNBOTcwMDVDMUYwMDAxMDBCNDk3MjIxNTFCCis6MTAzQ0UwMDA4MDMyMDAwMDAwMDAwMDUwMzNDMDAxMDBCMzk3QTIwMkYwCis6MTAzQ0YwMDAxQTUwMDAwMEE1OTcyMjQ2MUY3QzAwMDA3MDgwMDAwMzI4Cis6MTAzRDAwMDA0MkM5MDEwMDAwMDAwMDQ2MUY4MDAxMDBBNTk3MjI0MDIzCis6MTAzRDEwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxMEFFCis6MTAzRDIwMDA2MkREMDEwMEExOTdBODQwODEzMjAwMDAxQjg0MDA4ODU5Cis6MTAzRDMwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwQzgwMDAwMzI5Cis6MTAzRDQwMDA0MkM5MDEwMDEwMDAwMEYwMTBDODAxMDAyRjAwMkY1Q0Q0Cis6MTAzRDUwMDAxMTgwMDEwMDAwMDAwMDQ3RTc5MTAxMDBGMDA3MDA0MERBCis6MTAzRDYwMDAxQjk4MDEwMDcyOTcyMDE1MUE2QzAwMDA3MDAwMDAwMzY4Cis6MTAzRDcwMDA0OEM5MDEwMDAwMDAyMjUwRjFCMTAxMDAwMDAwMDAwMzE5Cis6MTAzRDgwMDBGMEIxMDEwMEZGMDcwMDA4RTA4RDAxMDAwMDAwMDA0MkQzCis6MTAzRDkwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDBCMDk3QTg0NjU3Cis6MTAzREEwMDAxRjEwMDAwMDcyOTcwMDA1NDhCMTAwMDA3Mjk3MDAwMkQyCis6MTAzREIwMDAxMEMwMDAwMEI2OTdBMjQ0MUY3QzAwMDBFRjk0MDAwMUUxCis6MTAzREMwMDA4QzMwMDEwMDAwMDAwMDFCMTBCMTAwMDAwMDgwMDAxMENBCis6MTAzREQwMDA0NEM5MDEwMDBDMDAwMDQwRjE5OTAxMDAxMDAwMDAwOEU2Cis6MTAzREUwMDBGMEM5MDEwMDAwMDAwMDE2RjBCMTAxMDAxMDAwMDAwMzRFCis6MTAzREYwMDBFMEM5MDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAxMDkxCis6MTAzRTAwMDA2MkREMDEwMDAwMDBBODVDMUY5MDAwMDBCRDk3MDA0MDJCCis6MTAzRTEwMDA4MUIyMDAwMDE3MDAwMEQwQTJDOTAxMDAwMDAwQTI0MDNBCis6MTAzRTIwMDAyN0VDMDAwMDAwMDAwMDIwMDBCMDAxMDBFMjk1MDA0MUY2Cis6MTAzRTMwMDBBMzQxMDEwMEMxOTcwMDQxMjdEMDAwMDAxMDAwMDAwN0Y2Cis6MTAzRTQwMDA5NkU0MDEwMDAwMDAwMDRCODA5NDAxMDAwMDAwMDA1NDQzCis6MTAzRTUwMDA2MUIxMDEwMDAwODAwMDQwNjJERDAxMDAwMDAwQTg0MDY3Cis6MTAzRTYwMDA4MUIyMDAwMEM4OTcwMDQwODFCMjAwMDAxQTk4MDA0MDVCCis6MTAzRTcwMDAyQjMwMDEwMEFDMDAyRDA2MTZDMDAxMDA5MDAwMkRGMDgzCis6MTAzRTgwMDAxNkM0MDEwMEQwOTdBMEYwMTY0NDAwMDAwMDAwMDA0MUM1Cis6MTAzRTkwMDAxN0MwMDEwMDBFMDAwMEEyNDRDOTAxMDAwMDAwNkNGMDMwCis6MTAzRUEwMDAzMEIwMDEwMEFDMDAyRDQwODdCMDAxMDAwMDAwNkNGMDg0Cis6MTAzRUIwMDAyOEIwMDEwMEQ5OTcyMjRBMTk3QzAwMDAwMDMwMDA0MzQ1Cis6MTAzRUMwMDA4NkM4MDEwMDAwMzAwMDBCMTZDODAxMDBEOTk3QTQ0MDM1Cis6MTAzRUQwMDA4MTMyMDAwMDAwMDAwMDQxMTdDMDAxMDBGQTk3MjIwNjVECis6MTAzRUUwMDA4MDMyMDAwMEU2OTdBMjA2MTQ2QzAwMDBFMzk3MjI0ODk3Cis6MTAzRUYwMDAxOTdDMDAwMERFOTdBMDQxMTc0MDAwMDAwMDAwMDA0MTNGCis6MTAzRjAwMDAxN0MwMDEwMDAwMDAwMDQxMzFDMDAxMDA5MDAwMjAxOERFCis6MTAzRjEwMDBFMEIxMDEwMDhCMDAyRDQ4MTk4MDAxMDA4QjAwMjA0NTg1Cis6MTAzRjIwMDBFNzkxMDEwMEU2OTcwMDQwODc5MDAwMDAwODAwMDA0M0Y5Cis6MTAzRjMwMDA4Njk4MDEwMEU2OTdBMDQ4MTc0MDAwMDAwMDAwMDA0MTY1Cis6MTAzRjQwMDAxN0MwMDEwMEIwMDAwMDQwNDM5OTAxMDAxMDUwMDA0MzI5Cis6MTAzRjUwMDBGQ0M5MDEwMDUxOTgwMDMwODEzMDAxMDAwMDAwMDA0MDkwCis6MTAzRjYwMDBFNUIxMDEwMEYxOTcyMjRBMTk3QzAwMDAwODAwMDBBMjg3Cis6MTAzRjcwMDA0NEM5MDEwMENDMDAyREFCRjlCMTAxMDAwMDAwMDBBQjM5Cis6MTAzRjgwMDAxN0MwMDEwMEYwOTdBMEYwMTY0NDAwMDAwMDAwMDA0MUE3Cis6MTAzRjkwMDAxN0MwMDEwMEY1OTc2NEYwODJCMDAwMDBBNDAwMDA0MDUzCis6MTAzRkEwMDA0Nzk5MDEwMEY1OTdBMkYyODAzMjAwMDAwMDAwMDA0MTFECis6MTAzRkIwMDBFNUIxMDEwMDhDMDAyMDE4RTBCMTAxMDA5MDAwMDA0MDQ0Cis6MTAzRkMwMDA0NTk5MDEwMDAwMDA2MDA2MzBDMDAxMDAwMDAwODYwQzI5Cis6MTAzRkQwMDA4MEIyMDAwMEJDMDAyRDQ2MTk5MDAxMDBBMDAwQTBGMkE0Cis6MTAzRkUwMDBFNEIxMDEwMEIwMDAwMDQwNDM5OTAxMDAxMDUwMDA0M0NCCis6MTAzRkYwMDBGQ0M5MDEwMDUxOTgwMDMwODEzMDAxMDAwMDAwQTI0QTQ0Cis6MTA0MDAwMDAxOUZDMDAwMDA4MDAwMEEyNDRDOTAxMDBDQzAwMkRBQjNGCis6MTA0MDEwMDBGOUIxMDEwMDAwMDAwMEFCMTdDMDAxMDAwMzk4QTBGMDQ3Cis6MTA0MDIwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwRTRGMDQ5Cis6MTA0MDMwMDA4MkIwMDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA0MTZFCis6MTA0MDQwMDBGMEIxMDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMDI5Cis6MTA0MDUwMDBGMEIxMDEwMDAwMDAwMDEwNjJCMTAxMDAwMDAwQTgxQkQ3Cis6MTA0MDYwMDBFMEIxMDAwMDA4OTgwMDQwODFCMjAwMDAwMEYwMDAwQ0IwCis6MTA0MDcwMDA3RTg5MDEwMDAwMDBBNjRDOTU2MDAxMDAwMDAwODA0QTg2Cis6MTA0MDgwMDAxODk0MDEwMDAwODAwMDEwNDRDOTAxMDAwNDAwMjIwMUJFCis6MTA0MDkwMDBGMDMxMDAwMDIwMDAwMDQwRjBDOTAxMDAwMDAwMDAxNkNGCis6MTA0MEEwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDAyMDAwMDAxMEU4Cis6MTA0MEIwMDA2MkREMDEwMDAwMDBBODE1RTBCMTAwMDAxMzk4MDA0MDg3Cis6MTA0MEMwMDA4MUIyMDAwMDEwODAwMDAzNDRDOTAxMDAwMDAwMDAwNjE2Cis6MTA0MEQwMDBGMEIxMDEwMDAwMDAwMDAxRjBCMTAxMDAwMDAwRTg1RjU0Cis6MTA0MEUwMDAxNzkwMDEwMDcwMDAwMDQwNDM5OTAxMDA3QTAxMkVGRUY0Cis6MTA0MEYwMDA5MkIwMDEwMDhCMDAyREY2MTZCMDAxMDAyMDk4MjI0M0VCCis6MTA0MTAwMDBFNzdEMDAwMDAwMDAwMDQ0NDVDMTAxMDAwNDAwMDBBNjU2Cis6MTA0MTEwMDAyQUIwMDEwMDI4MDA2RTA2ODJDODAxMDAyNDk4MjI0QUI1Cis6MTA0MTIwMDAxOTdDMDAwMDAwMDAwMDQyNDVEMTAxMDAwMDAwNkU0Q0U3Cis6MTA0MTMwMDA4M0MwMDEwMDAwMDAwMDQxOTJDMDAxMDAyNTk4NDIzMDc4Cis6MTA0MTQwMDAzRDA3MDAwMDAwMDA2NjlFODNCMDAxMDAwMDAwMUE0MTk4Cis6MTA0MTUwMDAzREMzMDEwMDAwMDAwMDQxOTJDMDAxMDAwNjAwMDBBMjIyCis6MTA0MTYwMDA0NEM5MDEwMDEwMDAwMDQ5OThGNDAxMDAyRTk4MjYzMDNGCis6MTA0MTcwMDA5MzA0MDAwMDJFOTg5MDRDOTI0MDAwMDAwMDAwMDA0MUYzCis6MTA0MTgwMDA5M0MwMDEwMEZGRkY4MDQ5RUNBOTAxMDAwMDgwMDAxMEVFCis6MTA0MTkwMDA0NEM5MDEwMDA0MDAyMjAxRjAzMTAwMDAwMDAwMDAwOUMwCis6MTA0MUEwMDBGMEIxMDEwMDAwMDAwMDE4RjBCMTAxMDAyMDAwMDAxMDgzCis6MTA0MUIwMDA2MkREMDEwMDAwMDBBODE1RTBCMTAwMDAzMzk4MDA0MDY2Cis6MTA0MUMwMDA4MUIyMDAwMDQwOTgyMjVGODE3QzAwMDAzRjk4QTI0MEFECis6MTA0MUQwMDAxOTdDMDAwMDAwMDAwMDQwMTk5MDAxMDAwMDAwMDA1NDBDCis6MTA0MUUwMDA2MUIxMDEwMDEwMDAwMDA3OTZFNDAxMDAwMDAwMDA0RkRCCis6MTA0MUYwMDA5Nzk0MDEwMDAwMDAwMDRCNjJCMTAxMDAzRjk4Mjg0MEY1Cis6MTA0MjAwMDA4MTMyMDAwMDNDOTgwMDQwODFCMjAwMDAwMDAwQTIyMUYxCis6MTA0MjEwMDA4MTg0MDAwMDQzOThBMjVGODE2QzAwMDAwMDAwQTI0M0VCCis6MTA0MjIwMDAxOTdDMDEwMDAwMDAwMDQzMTk5MDAxMDAwMDAwMDA1NEI3Cis6MTA0MjMwMDA2MUIxMDEwMDEwMDAwMDA3OTZFNDAxMDAwMDAwMDA0MDk5Cis6MTA0MjQwMDA5Njk0MDEwMDAwMDAwMDRCNjJCMTAxMDAwMDAwQTg0MEZDCis6MTA0MjUwMDA4MUIyMDAwMDQ2OTgwMDQwODFCMjAwMDAwMDgwMDAxOTQxCis6MTA0MjYwMDA0NEM5MDEwMDA0MDAyMjAyRjAzMTAwMDAwMDAwMDAwQkVDCis6MTA0MjcwMDBGMEIxMDEwMDAwMDAwMDEzRjBCMTAxMDAwMDAwMDA0M0E0Cis6MTA0MjgwMDA2MUIxMDEwMDIwMDAwMDE5NjJERDAxMDAwMDAwQTgwOEYyCis6MTA0MjkwMDBFMEIxMDAwMDRFOTgwMDQwODFCMjAwMDA3QzAwMkRGMDlCCis6MTA0MkEwMDA4NEIwMDEwMDAyMDAwMEYwOThGNDAxMDA1Nzk4MjA0Q0ZGCis6MTA0MkIwMDA4NDZDMDAwMDg4MDAwMDQwNDM5OTAxMDA1Nzk4MjBGMjY4Cis6MTA0MkMwMDA4NDZDMDAwMDAwMDAwMDQwODVCMDAxMDA5ODAwMkQxNEFGCis6MTA0MkQwMDA4MkIwMDEwMDAwMDAwMEYwOThCMDAxMDBBMzAwMkQxNDhFCis6MTA0MkUwMDA5OEQwMDEwMDVDOTgyMDRDODQ2QzAwMDAwMDAwMDA0Q0M5Cis6MTA0MkYwMDA4NEIwMDEwMDAwMDAwMEYzODBFMDAxMDA1Rjk4MjM0MERCCis6MTA0MzAwMDA4NDZDMDAwMDAwMDAwMDQwODRCMDAxMDBEMDAwMjAxNDQ0Cis6MTA0MzEwMDBFMEIxMDEwMDk4MDAyNTQyODBCMDAxMDAwMDAwNkVGMzdBCis6MTA0MzIwMDA4MEYwMDEwMDAwMDBBNjQyODJDMDAwMDA2NTk4QTA0MDE1Cis6MTA0MzMwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwOUZGMDdGCis6MTA0MzQwMDA4MkVDMDAwMDk4MDBBMDQxRTBCMTAxMDA2ODk4MDAxMkUyCis6MTA0MzUwMDAxMEM5MDAwMDAwNDg4MDQwMEI5ODAxMDBDMDQ5ODA0MDBGCis6MTA0MzYwMDAwQjk4MDEwMDgwNEI4MDQwMEI5ODAxMDA0MDREODA0MDJECis6MTA0MzcwMDAwQjk4MDEwMDAwNEY4MDQwMEI5ODAxMDBDMDUwODA0MDE2Cis6MTA0MzgwMDAwQjk4MDEwMDgwNTI4MDQwMEI5ODAxMDA0MDU0ODA0MEZGCis6MTA0MzkwMDAwQjk4MDEwMDAwNTY4MDQwMEI5ODAxMDBDMDU3ODA0MEU4Cis6MTA0M0EwMDAwQjk4MDEwMDgwNTk4MDQwMEI5ODAxMDA0MDVCODA0MEQxCis6MTA0M0IwMDAwQjk4MDEwMDAwNUQ4MDQwMEI5ODAxMDBDMDVFODA0MEJBCis6MTA0M0MwMDAwQjk4MDEwMDgwNjA4MDQwMEI5ODAxMDA0MDYyODA0MEEzCis6MTA0M0QwMDAwQjk4MDEwMDAwNjQ4MDQwMEI5ODAxMDBDMDY1ODA0MDhDCis6MTA0M0UwMDAwQjk4MDEwMDgwNjc4MDQwMEI5ODAxMDA0MDY5ODA0MDc1Cis6MTA0M0YwMDAwQjk4MDEwMDAwNkI4MDQwMEI5ODAxMDBDMDZDODA0MDVFCis6MTA0NDAwMDAwQjk4MDEwMDgwNkU4MDQwMEI5ODAxMDA0MDcwODA0MDQ2Cis6MTA0NDEwMDAwQjk4MDEwMDAwNzI4MDQwMEI5ODAxMDBDMDczODA0MDJGCis6MTA0NDIwMDAwQjk4MDEwMDgwNzU4MDQwMEI5ODAxMDA0MDc3ODA0MDE4Cis6MTA0NDMwMDAwQjk4MDEwMDAwNzk4MDQwMEI5ODAxMDBDMDdBODA0MDAxCis6MTA0NDQwMDAwQjk4MDEwMDgwN0M4MDQwMEI5ODAxMDA0MDdFODA0MEVBCis6MTA0NDUwMDAwQjk4MDEwMDg4OTg0MzU3NjEzMTAwMDA5NDk4QTI1NzQ3Cis6MTA0NDYwMDA3MzdEMDAwMDk0OThBMjQwODE2RjAwMDAwMDAwMDA0ODE2Cis6MTA0NDcwMDA2MUIxMDEwMDAwMTAwMDRBNjJERDAxMDA4Qzk4QTg0QTc5Cis6MTA0NDgwMDA4MDMzMDAwMDkxOTgyMjVGOTU3QzAwMDAwMDAwMDA0QjczCis6MTA0NDkwMDA2MkIxMDEwMDhGOThBODRCQUMzMzAwMDAwMDAwMUJBNTRGCis6MTA0NEEwMDA4MkIzMDEwMDAwMDAwMEJFODNDMzAxMDAwMDAwODA0MDExCis6MTA0NEIwMDA5N0IwMDEwMDAwMTAwMDRBNjJERDAxMDA5ODk4Mjg0MDgyCis6MTA0NEMwMDA4MTMyMDAwMDk0OTgyMjU3Nzc3RDAwMDAwMDAwOUIyMEU1Cis6MTA0NEQwMDA5N0IwMDEwMDAwMDAwMDRCNjJCMTAxMDA5ODk4QTg0MDFECis6MTA0NEUwMDA4MTMyMDAwMDAwMDA5QjQwOTdCMDAxMDAwMDAwMkUxMEI4Cis6MTA0NEYwMDA0OEIxMDEwMEE4MDEwMDQwRjE5OTAxMDAwMDAwMDAwNTQ5Cis6MTA0NTAwMDBGMEIxMDEwMDA5MDAwMDA3OTZFNDAxMDAwMDAwNjBBNzc3Cis6MTA0NTEwMDA5N0MwMDEwMDAwMDAwMDEwNjJCMTAxMDAwMDAwQTg0MDM3Cis6MTA0NTIwMDA4MUIyMDAwMEEwOTgwMDQwODFCMjAwMDBBODAwMkQxQ0JDCis6MTA0NTMwMDA4QUIwMDEwMDAwMDA5RkYwOEFEMDAwMDAwMDAwQTI0MDc1Cis6MTA0NTQwMDA4QkVDMDAwMDhBMDAyMDQwRTdCMTAxMDBCNDAwMDA0MDdECis6MTA0NTUwMDA0Nzk5MDEwMEE0MDAyRDQ1RTBEMTAxMDBBRDk4OUMxN0JBCis6MTA0NTYwMDA4MDMyMDAwMEJFMDAyRkFCODNCMDAxMDAxNzk5MDAxNDA5Cis6MTA0NTcwMDA4MjUwMDEwMEIyOTgwMDQwODFCMjAwMDBCMjk4MjJGMjRECis6MTA0NTgwMDA4MjMwMDAwMDhDMDAwMDQwNDM5OTAxMDBCMjk4OUYxQ0NCCis6MTA0NTkwMDBFMDZEMDAwMEJFMDAwMDQwNDc5OTAxMDAxNzk5MDA0MEZGCis6MTA0NUEwMDA4MTMyMDEwMEE4MDAyMDFDRTBCMTAxMDA5QzAwMkQzMEU4Cis6MTA0NUIwMDA4MUIwMDEwMDg4MDAyREYwODRCMDAxMDA5NDAwMkRGMjNDCis6MTA0NUMwMDA4NkIwMDEwMERDOTgyM0YwODQ2QzAwMDAwQzAwMDA0MkVGCis6MTA0NUQwMDA4OEY0MDEwMERDOTgyMDUwODk2QzAwMDBDQjk4QTM5MkVECis6MTA0NUUwMDA4NzZDMDAwMEJCOTgwMDQ0MTBDOTAwMDBEQzk4MDAwQUVBCis6MTA0NUYwMDA4N0IwMDAwMERDOTgwMDA5ODdCMDAwMDBEQzk4MDAwODU0Cis6MTA0NjAwMDA4N0IwMDAwMERDOTgwMDA3ODdCMDAwMDBEQzk4MDAwNzQ2Cis6MTA0NjEwMDA4N0IwMDAwMERDOTgwMDA3ODdCMDAwMDBEQzk4MDAwNjM3Cis6MTA0NjIwMDA4N0IwMDAwMERDOTgwMDA2ODdCMDAwMDBEQzk4MDAwNjI4Cis6MTA0NjMwMDA4N0IwMDAwMERDOTgwMDA2ODdCMDAwMDBEQzk4MDAwNjE4Cis6MTA0NjQwMDA4N0IwMDAwMERDOTgwMDA1ODdCMDAwMDBEQzk4MDAwNTBBCis6MTA0NjUwMDA4N0IwMDAwMERDOTgwMDA1ODdCMDAwMDBEQzk4MDAwNUZBCis6MTA0NjYwMDA4N0IwMDAwMERDOTgwMDA1ODdCMDAwMDBDQzk4MDA0NEJCCis6MTA0NjcwMDAxMEM5MDAwMERDOTgwMDBGODdCMDAwMDBEQzk4MDAwRTI1Cis6MTA0NjgwMDA4N0IwMDAwMERDOTgwMDBEODdCMDAwMDBEQzk4MDAwQ0JCCis6MTA0NjkwMDA4N0IwMDAwMERDOTgwMDBDODdCMDAwMDBEQzk4MDAwQ0FDCis6MTA0NkEwMDA4N0IwMDAwMERDOTgwMDBDODdCMDAwMDBEQzk4MDAwQzlDCis6MTA0NkIwMDA4N0IwMDAwMERDOTgwMDBDODdCMDAwMDBEQzk4MDAwQjhECis6MTA0NkMwMDA4N0IwMDAwMERDOTgwMDBCODdCMDAwMDBEQzk4MDAwQjdFCis6MTA0NkQwMDA4N0IwMDAwMERDOTgwMDBCODdCMDAwMDBEQzk4MDAwQjZFCis6MTA0NkUwMDA4N0IwMDAwMERDOTgwMDBCODdCMDAwMDBEQzk4MDAwQjVFCis6MTA0NkYwMDA4N0IwMDAwMEJGMDAyRDQzODRDMDAxMDA5MDAwMkRGMzVGCis6MTA0NzAwMDA4MEUwMDEwMEUxOTgyMzQwODQ2QzAwMDA5NDAwMjA5RDJCCis6MTA0NzEwMDBFMUIxMDEwMDAwMDAwMDQwODRCMDAxMDBFNTk4QTJGMDgyCis6MTA0NzIwMDAzODZDMDAwMDlDMDAyMDQyRTBCMTAxMDAwMDAwMDA1RkY2Cis6MTA0NzMwMDAxMzk0MDEwMDAwMDA4MDQ2MTk4MDAxMDA5QzAwMjA0MjczCis6MTA0NzQwMDBFMEIxMDEwMDM3MDAwMDQwNDM5OTAxMDAwNDAwMDBGMzhDCis6MTA0NzUwMDA4MEY0MDEwMDBGMDAwMEYzODI4ODAxMDBFQjk4MjM0MUYwCis6MTA0NzYwMDA4MDZDMDAwMDAwMDAwMDVGMTM5NDAxMDAwMDAwODkwQ0MxCis6MTA0NzcwMDA4MEIyMDAwMEJDMDAwMDQwNDM5OTAxMDBBMDAwQTBGMkZDCis6MTA0NzgwMDBFNEIxMDEwMDAwMDA5RjQxMjRFQzAwMDBGNTk4QTY0MDMwCis6MTA0NzkwMDA4MTMyMDAwMDAwMDA5RjQyMzhFQzAwMDBGNTk4QTY0MEVFCis6MTA0N0EwMDA4MTMyMDAwMEI0MDAwMDQwNDM5OTAxMDBGNzk4QTNGMDYzCis6MTA0N0IwMDAzQTZDMDAwMDAwMDA4MDQwODFCMjAxMDBCNDAwMDA0MDZCCis6MTA0N0MwMDA0Mzk5MDEwMEZCOTgyMkYwM0E2QzAwMDBCNDAwMjAxREQwCis6MTA0N0QwMDBFMEIxMDEwMDgwMDAyRDVGMTM5NDAxMDBGQjk4MjNGMEVECis6MTA0N0UwMDAzQTZDMDAwMDgwMDAyMDFERTBCMTAxMDBDMDAwMjAxMkUyCis6MTA0N0YwMDBFMEIxMDEwMEM0MDBBMDFDRTBCMTAxMDAwMDgwMDAwMzkyCis6MTA0ODAwMDA0NEM5MDEwMDAwMDAwMDQyRTBCMTAxMDAxMjAwMDA0MDc0Cis6MTA0ODEwMDA4Nzk4MDEwMDA0OTk5RjQxMjQ2QzAwMDAwMDAwMDA0MTJBCis6MTA0ODIwMDA4Q0IwMDEwMDAwMDAwMDEyOENEMDAxMDAwNTk5MDA0MUZECis6MTA0ODMwMDAyNEIwMDAwMDAwMDAwMDQwOERCMDAxMDA1NTk5MDA0MEY4Cis6MTA0ODQwMDA4MTMyMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDBDCis6MTA0ODUwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDAwNzk5MDA0MDFECis6MTA0ODYwMDA4MUIyMDAwMEQ0OTUwMDQwODEzMjAxMDAwMDAwMDAxNkEyCis6MTA0ODcwMDA4MEIyMDEwMDAwMDBBNzA4ODAzMjAxMDAwRjk5QTI0MDE5Cis6MTA0ODgwMDA5NTZDMDAwMEUyOTUwMDQwODEzMjAxMDAwMDgyMDBBNjk0Cis6MTA0ODkwMDAwNEIwMDEwMDAwMDAwMDQwMkRCMDAxMDBBMDk4MkY0MDlFCis6MTA0OEEwMDAxMUIwMDEwMEU5ODkwMDQxODlCMDAwMDAwMDAwOUZGOEMzCis6MTA0OEIwMDAzRUVDMDAwMDAwMDA5RjEyRTBFRDAwMDBDODAwMjBBQkJECis6MTA0OEMwMDBFMUIxMDEwMENDMDBBMDFGRTBCMTAxMDAxOTk5QTM1Rjg0Cis6MTA0OEQwMDBFNzZEMDAwMDAwMDAwMDQxRTdDMTAxMDBBNjAwMDA0MEI0Cis6MTA0OEUwMDA0Nzk5MDEwMDJEOTkyMkYyODYzMDAwMDAwMzAwMDA0MzExCis6MTA0OEYwMDA4NEY0MDEwMDAxMDAwMDQxODBDQzAxMDBCODAwMkQ0Mjg5Cis6MTA0OTAwMDA4MEQwMDEwMDAwMDA2MjQwODZDMDAxMDAyMTk5MUY0MzUxCis6MTA0OTEwMDA4MDMyMDAwMDIyOTlBMjQwODc2QzAwMDAwMDAwNjI0MUIyCis6MTA0OTIwMDA4N0IwMDEwMDI2OTk5RjQwODAzMjAwMDAwMDAwMDA0MEJGCis6MTA0OTMwMDA4NUIwMDEwMDAwMDAwMDQwODREMDAxMDAwMDAwMDA0MjZBCis6MTA0OTQwMDA4MEIwMDEwMDAwMDAwMEYyODhCMDAxMDAwMjAwMDA0NEM1Cis6MTA0OTUwMDA4NEY0MDEwMEI4MDAyRTQyODBEMDAxMDAwMDAwNjI0MEMzCis6MTA0OTYwMDA4OEMwMDEwMDJDOTkxRjQ0ODAzMjAwMDAzMDk5QTI0MDc5Cis6MTA0OTcwMDA4OTZDMDAwMDMwOTk2MjQxODlCMDAwMDAwMzAwNjI0MUY3Cis6MTA0OTgwMDA4NkU0MDEwMEI4MDAwMDQwNDU5OTAxMDAwMTAwNjI0MTQxCis6MTA0OTkwMDA4OEU0MDEwMEE0MDAyMDQwRTVCMTAxMDBBMjAwMjA0MDBECis6MTA0OUEwMDBFN0IxMDEwMEJDMDAyRTQzODdGMDAxMDAwMDAwMDA0NDg1Cis6MTA0OUIwMDA4NkMwMDEwMDM2OTkyMDQzODc2QzAwMDAwMDAwODA0M0M4Cis6MTA0OUMwMDBFNUIxMDEwMDQwMDEwMDQzODBDRTAxMDAwMDAwQTQ0Mzk2Cis6MTA0OUQwMDBFNDMxMDEwMDQwMDFFMjQwODc5ODAxMDA4ODAwMkQ0NDQ1Cis6MTA0OUUwMDA4MUIwMDEwMDkwMDAyREYyMkVCMDAxMDA5QzAwMkRGMDRFCis6MTA0OUYwMDA4NkIwMDEwMDkwMDAyREYwODJCMDAxMDBCQTAwMkRGMEM5Cis6MTA0QTAwMDA5OEIwMDEwMDQzOTlBMjEyOTg2QzAwMDBCQzAwMkRGMkVFCis6MTA0QTEwMDA5OEIwMDEwMDQzOTlBMEYyOTg2QzAwMDAwMDAwMDAxN0M0Cis6MTA0QTIwMDA4MkIwMDEwMDlDMDAyMDQxRTBCMTAxMDBCNDAwMkQxMkQxCis6MTA0QTMwMDA4NkQwMDEwMDQ2OTlBMzQxRTA2RDAwMDA0Nzk5MDBGMDNGCis6MTA0QTQwMDA4NEIwMDAwMDAwMDAwMDQxODRCMDAxMDA4MDAwMkQ0M0NDCis6MTA0QTUwMDA4NEQwMDEwMDRBOTk5RjQyODAzMjAwMDAwMDAwMDA0MDRCCis6MTA0QTYwMDA4NUIwMDEwMDRDOTlBMzQyMTQ2QzAwMDA0RDk5MDAwQUQ2Cis6MTA0QTcwMDAwQ0IwMDAwMDAwMDAwMDQyMENCMDAxMDA0Rjk5QTAxN0RDCis6MTA0QTgwMDAwQzZDMDAwMDAwMDA4MDE3MENCMDAxMDA1NDk5MjI0MDBCCis6MTA0QTkwMDAwRDZDMDAwMDAwMDBBMDBBMENFQzAwMDAwMTAwMDBGMDBBCis6MTA0QUEwMDA4MkY0MDEwMDU0OTlBMDQxMEM2QzAwMDAwMDAwQTJGMEI3Cis6MTA0QUIwMDA4MDMyMDEwMDAwMDA4MDQwODFCMDAxMDBFNjk1MDA0MDk2Cis6MTA0QUMwMDA4MTMyMDEwMDA0ODAwMDAzNDRDOTAxMDAwMDAwMDA0NjU3Cis6MTA0QUQwMDBGMEIxMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwNjA0MUIwCis6MTA0QUUwMDA4Nzk0MDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEJDCis6MTA0QUYwMDBGMUIxMDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OUUwCis6MTA0QjAwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NTI5Cis6MTA0QjEwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1RDBECis6MTA0QjIwMDAwNTkwMDAwMDYwOTkwMDQwODFCMjAwMDAwMDAwMkU0QjBCCis6MTA0QjMwMDAxOTkwMDEwMDA1MDAyQTBDRTRCMTAxMDAwMDAwODAwNDc2Cis6MTA0QjQwMDBFNkIxMDEwMDZBOTkyMjQ5MUY3QzAwMDA0MjAwMDA0MDQyCis6MTA0QjUwMDA4Nzk4MDEwMDAwMDAwMDQ5MUY4MDAxMDBDMDk3MDA0MEI1Cis6MTA0QjYwMDA4REIwMDAwMDcwOTkyMjQwQUY2RjAwMDAwMDAwMDAxNTZBCis6MTA0QjcwMDA5NkIwMDEwMDg4OTgwMDA4OTQzMDAxMDA2Rjk5MjI0MDk3Cis6MTA0QjgwMDA5NzZDMDAwMEMwOTcwMDQ2ODdCMDAwMDAwMDAwODA0MDhFCis6MTA0QjkwMDA4N0IwMDEwMDcwOTk0MzQ4NjEzMTAwMDAwMDEwMDAwODlGCis6MTA0QkEwMDA2MkREMDEwMDc1OTkyODQwODczMDAwMDA3MTk5MjI0ODI0Cis6MTA0QkIwMDA3NzdEMDAwMEMwOTcxQjQ2ODdCMDAwMDA3ODk5MjI1RjgwCis6MTA0QkMwMDAxMTdDMDAwMDA0MDAyMjE1NjIzMTAwMDA3Njk5QTg0MDkzCis6MTA0QkQwMDA4MTMyMDAwMDAwMDA5QjQwODFCMjAxMDAwMDAwMDA0MEQzCis6MTA0QkUwMDA0OUIxMDEwMDMwMDAwMDQwQTE5OTAxMDAwMDAwMDA0MERGCis6MTA0QkYwMDA5M0IwMDEwMDAwMDAwMDQwMUZCMDAxMDBDOTk5MDA0OUI2Cis6MTA0QzAwMDA5NjMwMDEwMDA3MDAwMDQ5MDZFNDAxMDAwMDM5MDAwMzY2Cis6MTA0QzEwMDAwNkM4MDEwMDAwMDAwMDQwMDVCMDAxMDAyMDAwMDBEMERGCis6MTA0QzIwMDBBMEM5MDEwMDAwMDAwMDQxOTNDMDAxMDA3RDk5QTA1NDdCCis6MTA0QzMwMDA5MzZDMDAwMDAwMDAyRTA1OTdCMDAxMDAwMDQ4MDA0MDcyCis6MTA0QzQwMDA0OTk5MDEwMDAwMDAwMDQwRTFCMTAxMDBDMDAxMDBBMjRCCis6MTA0QzUwMDA0NEM5MDEwMDg2OTlBMjQxOTc1MDAwMDAwMDAwMDAyMDNECis6MTA0QzYwMDA0OUIzMDEwMENFOTkwMDQwNDkzMTAxMDAwMEI1MkUwODNBCis6MTA0QzcwMDA5N0IwMDEwMDAwMDAwMDQwRjFCMTAxMDA4Qzk5QTI0MTAxCis6MTA0QzgwMDA5NzUwMDAwMDE4MDAwMDQwOTc5ODAxMDAwMDk3MkU0MEIwCis6MTA0QzkwMDA4MUIyMDEwMDAwMDAwMDQwRjFCMTAxMDA5MDk5QTI0MUYxCis6MTA0Q0EwMDA5NzUwMDAwMDAwMDAwMDQwNDlCMTAxMDA0MDE4MkUwNTU3Cis6MTA0Q0IwMDA5N0IwMDEwMDAwMDAwMDQwRjFCMTAxMDA5NDk5QTI0MUI5Cis6MTA0Q0MwMDA5NzUwMDAwMDU3OTUyMDQwRTdCMTAxMDAzMDk0MDA0MDE0Cis6MTA0Q0QwMDA0NTk5MDEwMDY0MDAwMDQwRTU5OTAxMDA1Njk1MjA0MDg3Cis6MTA0Q0UwMDBFN0IxMDEwMEI4OTQyMDQxRTVCMTAxMDBCQTk0MjA0MTM4Cis6MTA0Q0YwMDBFNUIxMDEwMDk4OTQwMDQwNDU5OTAxMDAwMjAwMDA0MDkwCis6MTA0RDAwMDA5Nzk4MDEwMDAwMDAwMDQwRjFCMTAxMDA5RTk5QTI0MTc2Cis6MTA0RDEwMDA5NzUwMDAwMDAwMDAwMDQwOTdCMDAxMDAwMDAwMDA0MEU0Cis6MTA0RDIwMDA2RkIxMDEwMDAwMDAwMDRCNjhCMTAxMDBBMjk5ODU0MUZDCis6MTA0RDMwMDA5NzQwMDAwMERCOTkwMDQwODEzMjAxMDAwMDAwMDA0MEY0Cis6MTA0RDQwMDAzOUIzMDEwMDAwMDAwMDQwMzdCMzAxMDAwMDAwMDA0MDBCCis6MTA0RDUwMDAzNUIzMDEwMDAwMDAwMDQwMzNCMzAxMDAwMDAwMDA0MDAzCis6MTA0RDYwMDA0MUIzMDEwMDAwMDAwMDQwM0ZCMzAxMDAzQzAwMDA0MDlGCis6MTA0RDcwMDAyOTlCMDEwMEVFMDUwMDQwMjU5QjAxMDA0MjAwMDA0MEY4Cis6MTA0RDgwMDA0QjlCMDEwMDAwMDAwMDQwMkZCMzAxMDAwMDAwMDA0MEQ5Cis6MTA0RDkwMDAyREIzMDEwMDAwMDAwMDQwNDdCMzAxMDAwMDAwMDA0MEI3Cis6MTA0REEwMDA0M0IzMDEwMDYwMDAwMDQwMkI5QjAxMDAwMDAwMDA1NDUxCis6MTA0REIwMDBFRjkzMDEwMDAwMDAwMDU1RjE5MzAxMDBGRkZGMDBBNUYzCis6MTA0REMwMDAzQzhCMDEwMDAwMDAwMDJDNUJCMzAxMDAwMDAwMDAyQ0I0Cis6MTA0REQwMDA0NUIzMDEwMDAwMDAwMDQwNTlCMzAxMDAwMDAwMDA0MDRECis6MTA0REUwMDA1N0IzMDEwMDAwMDAwMDQwMjdCMzAxMDAwMDAwMDA0MDVECis6MTA0REYwMDA1M0IzMDEwMEJGOTlBMjUwRkQ3RjAwMDBCRjk5QTI1MTlCCis6MTA0RTAwMDBGRDdGMDAwMEMwOTkwMDQwMURCMzAwMDA1MDQ2MDA0MEU3Cis6MTA0RTEwMDAxRDlCMDEwMDAwQzAwMEE2ODhCMzAxMDBGRjNGMDBBNjUzCis6MTA0RTIwMDAzQUIzMDEwMDAwQzAwMDlEM0I5QjAxMDBCNDA1MDA0MDY3Cis6MTA0RTMwMDAyMzlCMDEwMDAwMDAwMDQwNERCMzAxMDAwODBBMDBBNkJBCis6MTA0RTQwMDAxNEIzMDEwMDAxMDEwMDhBMTU5QjAxMDAwMDgwMDBBNjM3Cis6MTA0RTUwMDA1NkIxMDEwMDAwMDA4MDVFNTdCNTAxMDAxODAwMDA0QkZDCis6MTA0RTYwMDAyMEU0MDEwMDA2MDAwMDRCOTZFNDAxMDAwMDQzMDA0QkUzCis6MTA0RTcwMDA5NkM4MDEwMDE4MDAwMDEwMjBEQzAxMDAwMDAwODA0QkUzCis6MTA0RTgwMDAyMDk0MDEwMDAwOTkyRTBBOTdCMDAxMDAwMDAwMDA0MDE0Cis6MTA0RTkwMDBGMUIxMDEwMENGOTlBMjQxOTc1MDAwMDAwMDAzMDA0MEZBCis6MTA0RUEwMDA5Nzk4MDEwMDAwQTkwMDQwNDU5OTAxMDAwMDAwMDA0MENBCis6MTA0RUIwMDBGMUIxMDEwMEQzOTlBMjQxOTc1MDAwMDAzMDAwMDA0MEE5Cis6MTA0RUMwMDA5Nzk4MDEwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QkZGCis6MTA0RUQwMDA2MkIxMDEwMEQ3OTlBODQwODEzMjAwMDBENzk5QTI0MTYwCis6MTA0RUUwMDA5NzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwMDAwMDA0MEE3Cis6MTA0RUYwMDA4N0IxMDEwMDAwMDAwMDQwOTdCMDAxMDAwMDAwMDA0QkE2Cis6MTA0RjAwMDA4MEIxMDEwMDAxMDAwMEE2ODJCMTAxMDBERDk5ODU0MTU4Cis6MTA0RjEwMDA5NzQwMDAwMDAwMDAwMDQwOTdCMTAxMDAwMDAwMDA0MEYxCis6MTA0RjIwMDA5N0IwMDEwMDAwMDAwMDRCOTBCMTAxMDAwMTAwMDBBNjA1Cis6MTA0RjMwMDA5MkIxMDEwMEUyOTk4NTQxOTc0MDAwMDAwMDAwODA0MDU1Cis6MTA0RjQwMDA4MUIyMDEwMEU2OTk0NDQwODEzMjAwMDAwMDAwMDAxMjY1Cis6MTA0RjUwMDA4MEIxMDEwMEZGRkY5QzRCODI4OTAxMDBFOTk5NDQ0MDI4Cis6MTA0RjYwMDA4MTMyMDAwMDAwMDAwMDRBODBCMTAxMDAwMTAwOUNBNkNGCis6MTA0RjcwMDA4MkIxMDEwMEVDOTk0NDQwODEzMjAwMDBGRkZGMDA0QkY4Cis6MTA0RjgwMDA4NDg5MDEwMDAwMDA5Q0MyMjRCMDAxMDAwMDAwMDA0QTk2Cis6MTA0RjkwMDA5MEIxMDEwMEZGRkY4MDRCOTI4OTAxMDAwMDAwMDA0QUEwCis6MTA0RkEwMDA5MEIxMDEwMDAxMDA4MEE2OTJCMTAxMDBGRkZGMDA0QjBCCis6MTA0RkIwMDA5NDg5MDEwMDAwMDA4MENBOTRCMDAxMDAwMDAwODA0MDg0Cis6MTA0RkMwMDA4MUIyMDEwMDAwMDAwMDQwODFCMDAxMDBGNzk5ODBBNTg2Cis6MTA0RkQwMDA4MDMyMDAwMEY4OTkwMEE1ODAzMjAwMDAwMDAwMDA0MUY2Cis6MTA0RkUwMDA4MUMwMDEwMEY5OTk4MEE1ODAzMjAwMDA4MDAxMDA0MDU1Cis6MTA0RkYwMDA4Mzk4MDEwMDAyOUEyMDRGODE2QzAwMDAwMDAxMDA0MDVDCis6MTA1MDAwMDA4Mzk4MDEwMDAyOUEyMDRCODE2QzAwMDA4MDAwMDA0MEQwCis6MTA1MDEwMDA4Mzk4MDEwMDAyOUEyMDQ3ODE2QzAwMDAwMDAwMDA0MDQ0Cis6MTA1MDIwMDA4Mzk4MDEwMDAwMDAwMDQxODJEQzAxMDAwMzkwMDA0MUYwCis6MTA1MDMwMDAyMDk5MDEwMDAwMDAwMDQwNDlCMTAxMDAwMDE0MkY0Q0VDCis6MTA1MDQwMDA4M0IwMDEwMDAwMDAwMDQwRjFCMTAxMDAwNjlBQTI0MUM2Cis6MTA1MDUwMDA4MzUwMDAwMDY0MDAwMEE1ODBDODAxMDAwOTlBQTJBNTQxCis6MTA1MDYwMDA4MDZDMDAwMDIwMDAwMDkwMjA5OTAxMDAwMDAwMDA1RjhCCis6MTA1MDcwMDAyMzkxMDEwMDBDOUExRjkxODAzMjAwMDAzMDAwMDA5MEIzCis6MTA1MDgwMDAyMDk5MDEwMDAwMDAwMDVGMjM5MTAxMDAwRjlBMUY5MUY5Cis6MTA1MDkwMDA4MDMyMDAwMDcwMDAwMDkwMjBBOTAxMDAwMDAwMDA1RjM1Cis6MTA1MEEwMDAyMzkxMDEwMDEyOUExRjkxODAzMjAwMDAwMDAwMDA1RkRFCis6MTA1MEIwMDAyMzkxMDEwMDE0OUExRjkxODAzMjAwMDA0MDY4MDA5MEYzCis6MTA1MEMwMDAyMEE5MDEwMEUwMDAwMDQwNjE5OTAxMDAyMTAwMDA0MDlBCis6MTA1MEQwMDA2MTk5MDEwMDIyMDAwMDQwNjE5OTAxMDAyMzAwMDA0MDE1Cis6MTA1MEUwMDA2MTk5MDEwMDI0MDAwMDQwNjE5OTAxMDAyNTAwMDA0MDAxCis6MTA1MEYwMDA2MTk5MDEwMDI2MDAwMDQwNjE5OTAxMDAyNzAwMDA0MEVECis6MTA1MTAwMDA2MTk5MDEwMEMwMDAwMDQwNjE5OTAxMDBEMDE0MDA0MDg1Cis6MTA1MTEwMDA0NTk5MDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MDhECis6MTA1MTIwMDBFMUIxMDEwMDMwMDMwMDQwODUzMDAxMDBEMDE0MDA0MDlGCis6MTA1MTMwMDA0NTk5MDEwMDAyMDEwMEE2ODBCMDAxMDAwNDAzMDA0MDZGCis6MTA1MTQwMDA4MDk4MDEwMDA2MDUwMEE2ODJCMDAxMDAwODA3MDA0MTEyCis6MTA1MTUwMDA4Mjk4MDEwMDAwMDAwMDQwRjBCMTAxMDAwMDAwMDA0MTExCis6MTA1MTYwMDBFMEIxMDEwMDA4MDAwMDQwODU5ODAxMDAzMDAzMDA0MEQ0Cis6MTA1MTcwMDA4MTMyMDEwMDM5MDMwMDQwODEzMjAxMDBEODE0MDA0MDFGCis6MTA1MTgwMDA0Mzk5MDEwMEZGMDJBMkY4ODA2QzAwMDAwMDAzMjJGMEE2Cis6MTA1MTkwMDA4MjZDMDAwMEZGMDIwMDQwODFCMjAwMDBEMDE0MkU0MDVCCis6MTA1MUEwMDA0OUIxMDEwMDA1MDAwMDQwQTM5QjAxMDAwMDAwMDA0MDQwCis6MTA1MUIwMDBDMUIzMDEwMDA4MDAwMEREODFGNDAxMDAzNjlBMDA0MDBGCis6MTA1MUMwMDAxMEM5MDAwMDNDOUEwMDA1ODFCMDAwMDA1NTAxMDA0MDY0Cis6MTA1MUQwMDA4MUIyMDAwMDQ0OUEwMDA1ODFCMDAwMDA1NTAxMDA0MEYyCis6MTA1MUUwMDA4MUIyMDAwMDQ5OUEwMDQ0QTVCMzAwMDA0QjlBMDA0NEU0Cis6MTA1MUYwMDBBNUIzMDAwMDAyMDAwMDQwQTRFNzAxMDAwMDAwMDBFMEE5Cis6MTA1MjAwMDA4MUIxMDEwMEZGRkYwMEMxRjA4OTAxMDA0MTlBMjI0MUY0Cis6MTA1MjEwMDA4MTUwMDAwMDNEOUEwMDQxQzFDMzAwMDBCMTAyMDA0MDJFCis6MTA1MjIwMDA4MTMyMDEwMEM1MDIwMDQwODEzMjAxMDA1QTAxMDA0MDc0Cis6MTA1MjMwMDA4MUIyMDAwMDAyMDAwMDQwQTRFNzAxMDAwMDAwMDBFMDhECis6MTA1MjQwMDA5MUIxMDEwMEZGRkYwMEM5RjA4OTAxMDA0MTlBMjI0MTlDCis6MTA1MjUwMDA4MTUwMDAwMDQ1OUEwMDQxQzFDMzAwMDBGRkZGMDBERUZECis6MTA1MjYwMDA4NTg5MDEwMDQxOUEwMEMyRTBCMTAwMDBGRkZGMDBERTI1Cis6MTA1MjcwMDA5NTg5MDEwMDQxOUEwMENBRTBCMTAwMDAwNDAwMDBDQjBBCis6MTA1MjgwMDA4MUM4MDEwMDZBODQwMDQwRjI5MzAwMDAwNDAwMDA0MERECis6MTA1MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA1MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA1MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA1MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA1MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA1MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA1MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA1MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA1MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA1MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA1MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA1MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA1MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA1MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA1MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA1MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA1MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA1M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA1M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA1M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA1M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA1M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA1M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA1NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA1NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA1NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA1NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA1NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA1NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA1NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA1NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA1NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA1NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA1NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA1NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA1NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA1NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA1NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA1NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA1NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA1NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA1NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA1NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA1NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA1NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA1NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA1NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA1NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA1NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA1NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA1NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA1NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA1NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA1NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA1NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA1NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA1NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA1NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA1NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA1NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA1NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA1NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA1NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA1NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA1NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA1NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA1NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA1NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA1NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA1NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA1NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA1NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA1NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA1NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA1NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA1NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA1NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA1NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA1NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA1NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA1NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA1N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA1N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA1N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA1N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA1N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA1N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA1ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA1ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA1ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA1ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA1ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA1ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA1ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA1ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA1ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA1ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA1OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA1OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA1OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA1OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA1OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA1OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA1OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA1OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA1OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA1OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA1OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA1OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA1OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA1OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA1OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA1OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA1OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA1OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA1OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA1OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA1OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA1OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA1QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA1QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA1QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA1QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA1QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA1QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA1QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA1QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA1QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA1QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA1QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA1QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA1QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA1QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA1QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA1QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA1QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA1QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA1QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA1QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA1QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA1QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA1QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA1QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA1QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA1QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA1QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA1QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA1QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA1QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA1QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA1QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA1QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA1QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA1QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA1QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA1QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA1QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA1QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA1QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA1QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA1QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA1Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA1Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA1Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA1Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA1Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA1Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA1RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA1RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA1RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA1RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA1RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA1RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA1RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA1RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA1RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA1RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA1REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA1REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA1REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA1REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA1REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA1REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA1RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA1RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA1RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA1RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA1RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA1RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA1RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA1RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA1RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA1RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA1RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA1RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA1RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA1RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA1RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA1RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA1RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA1RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA1RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA1RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA1RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA1RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA1RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA1RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA1RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA1RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA1RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA1RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA1RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA1RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA1RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA1RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA2MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA2MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA2MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA2MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA2MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA2MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA2MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA2MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA2MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA2MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA2MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA2MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA2MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA2MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA2MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA2MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA2MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA2MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA2MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA2MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA2MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA2MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA2MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA2MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA2MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA2MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA2MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA2MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA2MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA2MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA2MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA2MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA2MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA2MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA2MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA2MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA2MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA2MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA2MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA2MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA2MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA2MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA2MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA2MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA2MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA2MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA2MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA2MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA2MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA2MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA2MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA2MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA2MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA2MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA2MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA2MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA2MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA2MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA2M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA2M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA2M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA2M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA2M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA2M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA2NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA2NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA2NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA2NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA2NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA2NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA2NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA2NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA2NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA2NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA2NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA2NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA2NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA2NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA2NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA2NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA2NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA2NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA2NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA2NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA2NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA2NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA2NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA2NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA2NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA2NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA2NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA2NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA2NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA2NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA2NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA2NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA2NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA2NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA2NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA2NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA2NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA2NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA2NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA2NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA2NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA2NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA2NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA2NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA2NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA2NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA2NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA2NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA2NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA2NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA2NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA2NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA2NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA2NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA2NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA2NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA2NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA2NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA2N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA2N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA2N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA2N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA2N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA2N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA2ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA2ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA2ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA2ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA2ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA2ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA2ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA2ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA2ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA2ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA2OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA2OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA2OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA2OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA2OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA2OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA2OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA2OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA2OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA2OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA2OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA2OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA2OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA2OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA2OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA2OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA2OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA2OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA2OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA2OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA2OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA2OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA2QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA2QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA2QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA2QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA2QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA2QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA2QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA2QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA2QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA2QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA2QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA2QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA2QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA2QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA2QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA2QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA2QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA2QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA2QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA2QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA2QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA2QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA2QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA2QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA2QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA2QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA2QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA2QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA2QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA2QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA2QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA2QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA2QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA2QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA2QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA2QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA2QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA2QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA2QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA2QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA2QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA2QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA2Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA2Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA2Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA2Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA2Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA2Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA2RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA2RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA2RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA2RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA2RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA2RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA2RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA2RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA2RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA2RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA2REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA2REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA2REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA2REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA2REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA2REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA2RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA2RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA2RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA2RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA2RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA2RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA2RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA2RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA2RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA2RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA2RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA2RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA2RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA2RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA2RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA2RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA2RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA2RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA2RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA2RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA2RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA2RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA2RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA2RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA2RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA2RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA2RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA2RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA2RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA2RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA2RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA2RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA3MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA3MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA3MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA3MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA3MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA3MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA3MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA3MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA3MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA3MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA3MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA3MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA3MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA3MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA3MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA3MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA3MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA3MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA3MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA3MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA3MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA3MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA3MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA3MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA3MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA3MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA3MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA3MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA3MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA3MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA3MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA3MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA3MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA3MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA3MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA3MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA3MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA3MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA3MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA3MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA3MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA3MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA3MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA3MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA3MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA3MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA3MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA3MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA3MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA3MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA3MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA3MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA3MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA3MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA3MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA3MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA3MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA3MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA3M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA3M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA3M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA3M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA3M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA3M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA3NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA3NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA3NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA3NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA3NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA3NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA3NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA3NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA3NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA3NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA3NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA3NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA3NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA3NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA3NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA3NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA3NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA3NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA3NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA3NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA3NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA3NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA3NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA3NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA3NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA3NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA3NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA3NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA3NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA3NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA3NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA3NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA3NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA3NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA3NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA3NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA3NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA3NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA3NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA3NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA3NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA3NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA3NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA3NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA3NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA3NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA3NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA3NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA3NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA3NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA3NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA3NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA3NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA3NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA3NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA3NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA3NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA3NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA3N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA3N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA3N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA3N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA3N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA3N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA3ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA3ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA3ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA3ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA3ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA3ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA3ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA3ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA3ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA3ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA3OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA3OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA3OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA3OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA3OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA3OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA3OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA3OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA3OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA3OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA3OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA3OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA3OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA3OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA3OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA3OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA3OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA3OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA3OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA3OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA3OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA3OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA3QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA3QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA3QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA3QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA3QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA3QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA3QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA3QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA3QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA3QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA3QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA3QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA3QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA3QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA3QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA3QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA3QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA3QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA3QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA3QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA3QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA3QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA3QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA3QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA3QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA3QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA3QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA3QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA3QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA3QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA3QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA3QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA3QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA3QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA3QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA3QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA3QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA3QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA3QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA3QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA3QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA3QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA3Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA3Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA3Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA3Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA3Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA3Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA3RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA3RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA3RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA3RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA3RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA3RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA3RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA3RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA3RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA3RDkwMDA4MUIyMDAwMEI2OUYwMDg4OUFCMDAwMDBCNjlGMDA4OEFDCis6MTA3REEwMDA5QUIwMDAwMEI2OUYwMDg4OUFCMDAwMDBCNjlGMDA4ODg1Cis6MTA3REIwMDA5QUIwMDAwMEI2OUYwMDg4OUFCMDAwMDAwMDAwMDA4OENBCis6MTA3REMwMDA5QUIwMDEwMEI2OUY0MTQwODEzMjAwMDBCOTlGMjI0MDI1Cis6MTA3REQwMDA3QjZGMDAwMEI2OUYxOTQwODFCMjAwMDAwMDAwMTk0MTdFCis6MTA3REUwMDA3QkIzMDEwMDAwMDAwMEE0QzRCMzAxMDAwMDAwMDBBMUE3Cis6MTA3REYwMDBDNkIzMDEwMDAwMDAyRkEyQzhCMzAxMDAwODE0MDA0MDYwCis6MTA3RTAwMDA0OTk5MDEwMEIwOUYwMDREOUFDQzAxMDBDMjlGMjY0MEM1Cis6MTA3RTEwMDA4MTMyMDAwMDAwMDAwMDRDNDlDMTAxMDBDMDlGQTI0MTE2Cis6MTA3RTIwMDA5QjUwMDAwMEM2OUY4MDgwODAzMjAwMDAwMDAwNTI0OUI1Cis6MTA3RTMwMDBGRDkzMDEwMDAwMDAwMDRBRkQ5MzAxMDBDOTlGMDA0MjJDCis6MTA3RTQwMDBDRDkzMDAwMDAwMDA1MTRBRkQ5MzAxMDAwMDAwMDA0OTVECis6MTA3RTUwMDBGRDkzMDEwMEM5OUYwMDQzQ0I5MzAwMDAwMDAwNTA0MEY4Cis6MTA3RTYwMDA4MUIyMDEwMEQ5OUYwMDQwMTk5OTAxMDAwMDAwMDBGMDgzCis6MTA3RTcwMDA5QUIwMDEwMDAwMDAwMDQ0NDlEMTAxMDAwMDAwNDBGMDI4Cis6MTA3RTgwMDA4MEIyMDEwMDAwMDA0MTREODBCMjAxMDBEMTlGMDA0MDRFCis6MTA3RTkwMDAxOTk5MDEwMDAwMDA0QzQwODFCMjAxMDAwMDAwMDA0NDJCCis6MTA3RUEwMDA0OUQxMDEwMDAwMDAwMEYwOUFCMDAxMDAwMDAwMDA0RDJGCis6MTA3RUIwMDAxMEIxMDAwMDAwMDAwMEUyNDlCMTAxMDAwMDAwMDBFMzQxCis6MTA3RUMwMDA0M0IxMDEwMDAwMDAwMEU0NDVCMTAxMDAwMDAwMDA0MEEyCis6MTA3RUQwMDA3QkIzMDEwMDAwMDA0ODRGNDBCMTAxMDBEOTlGMDA0MDMyCis6MTA3RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA3RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA3RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA3RjEwMDA4MUIyMDAwMDAwMDA4MDQwODFCMDAxMDAwNDAwMDA0MEY4Cis6MTA3RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA3RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA3RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA3RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA3RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA3RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA3RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA3RjkwMDA4MUIyMDAwMDZBODQwMDQwODFCMjAwMDAzMTlBMDA0MDQyCis6MTA3RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDA0RDlBMDA0MDAwCis6MTA3RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwMDAwODA0MDU3Cis6MTA3RkMwMDA4MUIyMDEwMDAwMDAwMEE4MTBCMTAwMDAwNDAwMDA0MEQwCis6MTA3RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA3RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA3RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA4MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MDQ4MDEwMDA4MUIyMDAwMDM5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc2xpY29zcy9nYnJjdnVjb2RlLnN5cy5paGV4IGIvZmlybXdhcmUvc2xpY29zcy9nYnJjdnVjb2RlLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjN2E4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zbGljb3NzL2dicmN2dWNvZGUuc3lzLmloZXgKQEAgLTAsMCArMSwxNjIgQEAKKzoxMDAwMDAwMDAwMDIwMDAwNDc3NTAxMDAwNEEwMTMwMTAwMUNCNzVCNEIKKzoxMDAwMTAwMDA5MzAwMEI2NUYwMTAwMUMwMDAwMDAyMDE4M0I3ODNBNTAKKzoxMDAwMjAwMDAwMUNBMjc3MDEwMDFDMDcxRDAxNzAxOEFEN0JGMUZGQjkKKzoxMDAwMzAwMDFDQjM3QkE5QUExRUI0N0IwMTBDMUNCNTdCMjkwNjFDMzIKKzoxMDAwNDAwMDAwMDA1MDY0MDgwQzMxNUE3MDA0MEMzMTVBODAwNDBDQzIKKzoxMDAwNTAwMDMxNEU5MDA0MEMzMTRBQTAwMDA5MjU1NUMwMDQwQzMxRTIKKzoxMDAwNjAwMDUyQjAwMEU5MjQ1NUMwMDRDQ0IzMDAxQzFDRUIyRDAxOTgKKzoxMDAwNzAwMDAwMUMwNjU2NTJENDA4MDc5RDAwMDAxQzdCQjcwMjAwRTYKKzoxMDAwODAwMDEwQTAwRjUxNTQwOTA2NTY1RUMwMDRBMDMwNzQwMzAwM0UKKzoxMDAwOTAwMEFDMzA3NTAzMDBDRDAzM0EwMDFDN0JCNzAyMDAxQzYwMzYKKzoxMDAwQTAwMDhFNTE1NDA5MjkyNTc1MDMwMDgwOEU1MTU0MDk4QzMwRDYKKzoxMDAwQjAwMDkxMDAwNDQ3MUMwMTAwMUNBMDBGNTE1NDA5MDAwMDY0NkEKKzoxMDAwQzAwMDAwMDQ0NzFDNjVDMDA0NDcxQzc1MDMwMDZDMzAwMTAwMjgKKzoxMDAwRDAwMDFDNEQzNDAyMDAxQzdCQjcwMjAwMUNBMDBGNTE1NDA5QjgKKzoxMDAwRTAwMEM4ODMzNzAwMUM4MDAxMDAwMDFDMDAwMDY0MDAwNEEwQ0QKKzoxMDAwRjAwMDBGNTA1NDA5MDAwMDc0QzMwNDdCRkJGMjAwMUNDQzMzODYKKzoxMDAxMDAwMDBEMDAxQ0I0N0JGRDAzMUM4MDBFNTA1NDA5RTBGQjA1NjAKKzoxMDAxMTAwMDAwMUMwMDAwQUMwMzAwQjMwRjUxNTQwOTAwMDBFQzcwNDgKKzoxMDAxMjAwMDA0MDAwMEVDODAwNDAwMDBBQzkzMDA2MTc2QURDMzA0RDEKKzoxMDAxMzAwMEMwOEQ1MTU0MDlFMDdCMDBDMDFGQTBGREM1MDEwMENDNUIKKzoxMDAxNDAwMDMzMDUwMDFDRDQwMzAwM0MxQ0Q0RDMxQjAwMUNDMEQzQkIKKzoxMDAxNTAwMDUyMDAxQzAwMDA3QzEzMDQ4RThFNTI1NDA5NUI4MDdFN0EKKzoxMDAxNjAwMDEzMDQwMDAwMDAwMDFDMDAwMDk0MDEwMEEwMEY1MTU0NzMKKzoxMDAxNzAwMDA5QTAwRjUxNTQwOUMwMDNGQzdGMUNBMDAxQTAwMTAwN0QKKzoxMDAxODAwMDAwMDBBNDAxMDBBMDBGNTE1NDA5QzAwM0ZDMDMxQ0Y1OUEKKzoxMDAxOTAwMDc3MDEwMDFDMjY3QTAyMDYxQ0EwMEY1MTU0MDlCMzBGRTgKKzoxMDAxQTAwMDUxNTQwOUI1MDIwMjAwMUNBMDBGNTE1NDA5N0E3RTAyNzUKKzoxMDAxQjAwMDAwMUNCNTAyMDIwMDFDNTMwRjUyNTQwOUFGMDMwMTAwOEEKKzoxMDAxQzAwMDFDN0EwRTUyNTQwOUI1MDIwMjAwMUMwMDAwMDIwMDFDRTkKKzoxMDAxRDAwMEEwM0RBQTExMDQwMDAwQUMxMTA0RDREMzUyMDAxQ0I1RjgKKzoxMDAxRTAwMDNFQjIwMTAwMjBGQkZERkYxRjgwMkM4QzAzMDBCOTNBQkEKKzoxMDAxRjAwMDlFMDEwMDc1M0IwMjAwMUNBNzFDMDEwMDEwREI4MzE2NEEKKzoxMDAyMDAwMDAwMUNDNzFEMjFDMTA0QjkzQjhEQzEwNDhCMkMwMTAwMEEKKzoxMDAyMTAwMDFDNkIyQzM1QzEwNDAwMDA3ODExMDBDQjJDNzlDMTA0NzMKKzoxMDAyMjAwMEEwMEY1MTU0MDlBMDBGNTE1NDA5NTREMDAyMDAxQzQ5ODkKKzoxMDAyMzAwMDI1QjEwMTAwQUIyQzgxQzEwNEE3MUQ3NTAzMDBDQzMzOEYKKzoxMDAyNDAwMDA5MDAxQ0VCMkQwMTAwMUNFQTI5MDEwMDFDQTAwRjUxMjQKKzoxMDAyNTAwMDU0MDlBRTBGNTE1NDA5QTAwRjUxNTQwOUQ0MDdGQzAzOUYKKzoxMDAyNjAwMDFDOTkzQTAyMDAxQ0JCMzgwMjAwMUMwMDM4MDAwMDFDMUMKKzoxMDAyNzAwMDAwMDBGQzAxMDREQjNCN0UwMDFDQzcxRDAxMDAxQzI2QTYKKzoxMDAyODAwMDdBMTYwNjFDMjcxRDAxMDAxQ0IzMEY1MTU0MDk3QTBFNjMKKzoxMDAyOTAwMDUyNTQwOTUzMEY1MjU0MDk3QTBFNTI1NDA5NTMwRjUyQjMKKzoxMDAyQTAwMDU0MDk3QTBFNTI1NDA5NTMwRjUyNTQwOUEwMEY1MTU0NTUKKzoxMDAyQjAwMDA5N0EwNjAyMDAxQzUzMEY1MjU0MDlBRjAzMDEwMDFDQjcKKzoxMDAyQzAwMDdBMEU1MjU0MDk1MzBGNTI1NDA5N0EwRTUyNTQwOTUzNUMKKzoxMDAyRDAwMDBGNTI1NDA5N0EwRTUyNTQwOTUzMEY1MjU0MDk3QTBFOTAKKzoxMDAyRTAwMDUyNTQwOTAwM0QwMjAwMUMwMDAwNTgxMjAwQ0IyQzAxQTIKKzoxMDAyRjAwMDAwMUM3NTNCMDIwMDFDQTcxQzAxMDAxMEE2N0JGRDA1MUQKKzoxMDAzMDAwMDFDMDAwMDkwQzIwNEE2N0JGRDA1MUMwMDAwQThDMjA0Q0UKKzoxMDAzMTAwMENCMkYwNTAwMUM2MDJDMDAwMDFDQzcxQ0U5MDIwMEEwQUMKKzoxMDAzMjAwMDBGNTE1NDA5NTMwNzAyMDAxQ0MwODNGMTMyMUMwMDAwMTYKKzoxMDAzMzAwMDYwMDIwNDQ2N0FFNjA1MUM3QTBFNTI1NDA5QzA4M0YxMjUKKzoxMDAzNDAwMDMyMUMwMDAwNjgwMjA0NDBGQTE1MDAxQzAwMDBBODAyREMKKzoxMDAzNTAwMDA0NDY3QUU2MDUxQ0EwMEY1MTU0MDlBMDBGNTE1NDA5MTgKKzoxMDAzNjAwMEEwMEY1MTU0MDlBMDBGNTE1NDA5QjM3QjAxQzAxRjc0NTEKKzoxMDAzNzAwMDBFNTA1NDA5QzAwMzlDMDAxQzgwMDBGODAyMDAwMDAwQ0QKKzoxMDAzODAwMEY4MDIwNDAwMDBDQzEyMDUwNzFEMDEwMDFDRDREMzJCNzkKKzoxMDAzOTAwMDAwMUNENEQzNTIwMDFDODA3NjlEMTMwNDAwMDAwMDAzN0YKKzoxMDAzQTAwMDAwQTY3QkI1MDMxMEM3OUMwMDAwMUM4MDJDMDAwMDFDMUQKKzoxMDAzQjAwMDAwMDA3QzAyMDQwMDAwNzRDMzA0QUIyREY5MTIwNTA3OTEKKzoxMDAzQzAwMDFERDVDMjA0OEIyRDAxMDAxQzY5MjUwMTAwMUNBNjdCRDQKKzoxMDAzRDAwMEI1MDMxMENCMkYwOTAwMUM2MDJDMDAwMDFDMDAwMDY4MjYKKzoxMDAzRTAwMDAzMDA1MzBGNTI1NDA5NDY3QUU2MDUxQzdBMEU1MjU0MDQKKzoxMDAzRjAwMDA5NDBGQTE1MDAxQzAwMDAzMDAzMDQ0NjdBRTYwNTFDOEIKKzoxMDA0MDAwMEI1MEY1MTU0MDlBMDBGNTE1NDA5NzNFQzRBMDMwNDYwMEQKKzoxMDA0MTAwMDJDMDAwMDFDMDAwMDQ4MDMwMEM3MUMwMTAwMUMwMDAwNDkKKzoxMDA0MjAwMDQ4MTMwNTA3MUQwMTAwMUNDMEQ3MjIwMDFDNzU1NjlFRUQKKzoxMDA0MzAwMDEzMDQ2MDJDMDAwMDFDRTcxQzY1MDMwNEU3OUMwMDAwMEIKKzoxMDA0NDAwMDFDQTY3QkI1MDMxMDgwMkMwMDAwMUMwMDAwMTgwMzA0QzAKKzoxMDA0NTAwMDAwMDA3NEMzMDRCOTdCMDEwMDFDMDAwMEFDQzMwNENCRDIKKzoxMDA0NjAwMEFGRkMwNzFDQ0IyRjAxMDQxQ0M3OUY4MDAzMUMwMDAwOUUKKzoxMDA0NzAwMEFDQzMwNENCQUZGQzA3MUNDQjJGMEQwNDFDQzc5RjgwNjMKKzoxMDA0ODAwMDAzMUMwMDAwQUNDMzA0Q0JBRjAwRjgxRENCMkYwMTAwNTAKKzoxMDA0OTAwMDFEQTY3QkI1MDMxQ0M3OUNBQ0MzMDQwMDAwQUMxMzA1QjAKKzoxMDA0QTAwMDA3MUQwMTAwMUNDMDFERkNEMzA4Mjc5RDA0MDQwMEEwRUIKKzoxMDA0QjAwMEVFNjZENDAwRkI3NTI5MTQwNDIwN0IwNjAwMUNDMDFDQ0EKKzoxMDA0QzAwMDNDMDQwMDAwMDBEMEQzMDgwMDAwMjBGNDAwQzBFRkYyOEMKKzoxMDA0RDAwMDAwMUMyMDI1N0MxNDA0NjBCN0YyMDMwMDAwMDAyQzE1REEKKzoxMDA0RTAwMDAwQ0NCM0ZDMDMxQ0NDMzMwNTAyMUMwMDAwMkNDNTA0NUIKKzoxMDA0RjAwMDYwQjcyRTA1MDQwMDAwMkMxNTA0MDAwMDdDQzQwNEMwNjUKKzoxMDA1MDAwMDFEQjhGMzA0MDAwMDg4QzQwNDA3OUQwMDAwMUMxQjc0ODAKKzoxMDA1MTAwMDFERjQwNEE2N0IxMTA0MUNBMDBGODk1NDA5RTA3QjAwODQKKzoxMDA1MjAwMEZDMUYzOTdGMDIwMDFDMDcxREJEQzMwNEE2N0JDRDAzNDEKKzoxMDA1MzAwMDFDMDAwMDg4QzQwNEUwMUMwMDAwMUMwMDAwQzQwMzA0NkMKKzoxMDA1NDAwMENCQUYwMEY4MURDQjJGMDExMDFEMDAwMENDQzMwNDAwNjEKKzoxMDA1NTAwMDAwQ0MwMzA0Q0JBRjAwRjgxRENCMkYwMTE4MURDNzlGQTMKKzoxMDA1NjAwMDAwMEIxQzAwMDBDQ0MzMDRGQjc1MDEwMDFDMDcxRDAxMUYKKzoxMDA1NzAwMDAwMUNDQ0IzRkMwMzFDQ0MzMzAxMDIxQzAwMDBDQ0MzMTgKKzoxMDA1ODAwMDA0QTAxQzAwMDAxQ0EwRUVDMjAzMDRDQkFGRkMwNzFDOUYKKzoxMDA1OTAwMENCMkYwOTA0MUNGQjc1MDEwMDFDMDAwMENDQzMwNENDNEMKKzoxMDA1QTAwMEIzRkMwMzFDQ0MzMzAxMDIxQzAwMDAyQ0M1MDQwMDAwNkEKKzoxMDA1QjAwMDk4MzQwNUNDQjNGQzAzMUNDQzMzMTUwMjFDNDc5RDc0NDYKKzoxMDA1QzAwMEM0MDQwMDAwOTg0NDAwODAxRDlDNTQwNDg3MURBRDA0QTEKKzoxMDA1RDAwMDAwQ0U3NjAxMDAxQ0VGNzZCREM0MDRBNDc3QUQyNDA5REIKKzoxMDA1RTAwMEU0NzYwMTAwMUNDNDc2MDEwMDFDMDAwMEI4NTQwNEQ3NTYKKzoxMDA1RjAwMDc2MDE1MDE4RjY3NjAxMDAxQzAwMDAwMDMwMTgwMDAwNEIKKzoxMDA2MDAwMDAwMDAxMENDMzA2MUM1MDRFQjJEMDEwMDFDRUEyOTAxNkIKKzoxMDA2MTAwMDAwMUNDMDU5MDEwMDFDRjU3NzQ5QzUwNEUwMzBGQzA0RkEKKzoxMDA2MjAwMDAwMDA0Q0QwMDQwMDIwNEMxNDA1MDAwMDAwMDgwNTAwMTgKKzoxMDA2MzAwMENDQjNGQzAzMUNDQzMzMDkwMjFDRUIyREQ1QzQwNENDNzkKKzoxMDA2NDAwMEIzRkMwMzFDQ0MzMzE5MDIxQ0VCMkRENUM0MDRDQ0IzNzIKKzoxMDA2NTAwMEZDMDMxQ0NDMzMwRDAyMUNFQjJERDVDNDA0Q0NCM0ZDMjUKKzoxMDA2NjAwMDAzMUNDQzMzMTEwMjFDRUIyREQ1QzQwNDAwN0IwMDgwOEQKKzoxMDA2NzAwMDFDQUU3NzYxMDUwMDAwMDAwNEMwMDREMzhCMDBGQzFGOTIKKzoxMDA2ODAwMDYwN0EzQzAwMUM2MDRDRTAwNDAwQzAyRjIwMDUxRkUwOTUKKzoxMDA2OTAwMDMwRDAwNDAwODAyNUQwMDQwMEI1NUJEMTA0MDQ2OTI2NjUKKzoxMDA2QTAwMDAxMDAxQzZBMkIwMTAwMUM4MDFEMDAwMDFDQTkyNTYxOTMKKzoxMDA2QjAwMDA1MDBFRTMwMDAwMDFDQUY3NzIxMDUwMEI0NUYwMTQwNUIKKzoxMDA2QzAwMDE4MDc5RDY0NTUwNEI3NzYwMTAwMUM5Njc2MDEwMDFDM0UKKzoxMDA2RDAwMDQ3MUQwMTAwMUNBNDMzMDE2MDE4QTQyRjAxNjAxODY0OTkKKzoxMDA2RTAwMDc3MDE2MDE4MjQ3NzAxNjAxODQ0NzcwMTAwMUM2NDg4NDIKKzoxMDA2RjAwMDAzMDAxQ0E0M0YwMTAwMUNBNDNCMDEwMDFDNTM3QjAwMTEKKzoxMDA3MDAwMEMwMUNEM0NGMUIwMDFDNTM0RjAyMDAxQ0RBQ0YwMEMwMEIKKzoxMDA3MTAwMDFGRDU1NzBGMDAxQ0QzRDMzNzAwMUNENDUzMEYwMDFDMTgKKzoxMDA3MjAwMEUwMjkwMDAwMUNGNUQ1Q0MwNTAwMDAwMEI4NTUwNDc3ODEKKzoxMDA3MzAwMDU2MDEwMDFDNTY1MzAxMDAxQzAwMDAwMDEwMTgwMDAwNTgKKzoxMDA3NDAwMDA0QzAwNEY1NTUwMTAwMUMwMDAwRDA1NTA0Nzc1NjAxODMKKzoxMDA3NTAwMDAwMUM1NjUzMDEwMDFDMDAwMDAwMTAxODAwMDAwNEMwQ0IKKzoxMDA3NjAwMDA0Q0IyRjAxMTgxMENCMkYwMTEwMTBDQjJGMDEwODEwMzQKKzoxMDA3NzAwMENCMkYwMTA4MTBDQjJGMDEyMDEwQ0IyRjAxMDAxMENCNjUKKzoxMDA3ODAwMDJGMDEyODEwODkyNTcxQzIwNDAwMDAwQ0MzMDQwMDAwNDkKKzoxMDA3OTAwMDc0QzMwNDAwMDA3NEMzMDQwMDAwNzRDMzA0MDAwMDcwMzgKKzoxMDA3QTAwMEMyMDQwMDAwMENDMzA0MDAwMDc0QzMwNDAwMDA3NEMzM0UKKzoxMDA3QjAwMDA0MDAwMDc0QzMwNDQwMUM2Q0MwMDQ0MDFDOUNDMDA0QjIKKzoxMDA3QzAwMEE3Nzc3NUMzMDQwMDAwQzRDMDA0MjcxREYxQzAwNDAwNEUKKzoxMDA3RDAwMDAwNzRDMzA0MDAwMDc0QzMwNDAwMDA3NEMzMDQwMDAwNjgKKzoxMDA3RTAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4OEIKKzoxMDA3RjAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2RkQKKzoxMDA4MDAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0QUUKKzoxMDA4MTAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwQTIKKzoxMDA4MjAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwOTIKKzoxMDA4MzAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4M0EKKzoxMDA4NDAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2QUMKKzoxMDA4NTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0NUUKKzoxMDA4NjAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwNTIKKzoxMDA4NzAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDIKKzoxMDA4ODAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4RUEKKzoxMDA4OTAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2NUMKKzoxMDA4QTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MEUKKzoxMDA4QjAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDIKKzoxMDA4QzAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwRjIKKzoxMDA4RDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4OUEKKzoxMDA4RTAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MEMKKzoxMDA4RjAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0QkUKKzoxMDA5MDAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwQjEKKzoxMDA5MTAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwQTEKKzoxMDA5MjAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4NDkKKzoxMDA5MzAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2QkIKKzoxMDA5NDAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0NkQKKzoxMDA5NTAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwNjEKKzoxMDA5NjAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNTEKKzoxMDA5NzAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4RjkKKzoxMDA5ODAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2NkIKKzoxMDA5OTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MUQKKzoxMDA5QTAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMTEKKzoxMDA5QjAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwMDEKKzoxMDA5QzAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QTkKKzoxMDA5RDAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MUIKKzoxMDA5RTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0Q0QKKzoxMDA5RjAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwQzEKKzowNDBBMDAwMDAwNDhDNjA0RTAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzLmloZXggYi9maXJtd2FyZS9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiMzc2YQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMuaWhleApAQCAtMCwwICsxLDUxMjQgQEAKKzoxMDAwMDAwMDAyMDAwMDAwMDA0MDAwMDAwMDAwMDEwMDAwMDAwMDAwQUQKKzoxMDAwMTAwMDAwODAwMDAwMTUwMDAwNDA4MUIyMDAwMDFCMDAwMDQwN0QKKzoxMDAwMjAwMDgxQjIwMDAwMjEwMDAwNDA4MUIyMDAwMDAzMDAwMDQwQzYKKzoxMDAwMzAwMDgxQjIwMDAwMDAwMDAwQTg5OEIwMDEwMDA0ODBBMjQwMzYKKzoxMDAwNDAwMEZEN0YwMDAwMDkwMEEyNDlERDdEMDAwMDAwMDAwMDRDOUEKKzoxMDAwNTAwMDgwQjIwMTAwMDcwMDAwNDBEMUIxMDAwMDAwMDAwMDRDNTgKKzoxMDAwNjAwMDgwQjIwMTAwMDkwMEEyNDA3NTdEMDAwMDYwMDAwMDQwRTAKKzoxMDAwNzAwMDYxOTkwMTAwMEIwMEE4QjE3RTMxMDAwMDA5MDAwMDQwMjkKKzoxMDAwODAwMDgxQjIwMDAwMDA4MDhGOTgxODMxMDAwMDEwMDAwMDk4QTUKKzoxMDAwOTAwMDgwRTQwMTAwMDAwMDQxOTg4MDk0MDEwMDAwMDAwMDQwQ0QKKzoxMDAwQTAwMDgxQjIwMTAwMTAwMDAwOTg4MEU0MDEwMDBFMDA0MDk4MjkKKzoxMDAwQjAwMDgwOTQwMDAwMTEwMDAwNDA4MUIyMDAwMDAwMDAwMDQwNjgKKzoxMDAwQzAwMEE1OTkwMTAwMTkwMDI5NDA4MTMyMDAwMDE5MDAxNEJDRDMKKzoxMDAwRDAwMDgwMzIwMDAwMEUwMDkzQkM4MDMyMDAwMDAwMDA1MDQwQ0YKKzoxMDAwRTAwMDgxQjIwMTAwMDA4MDAwNDA4MUIyMDAwMDEwMDAwMDQwOTkKKzoxMDAwRjAwMEE1OTkwMTAwMUYwMDI5NDA4MTMyMDAwMDFGMDAxNEJDOTcKKzoxMDAxMDAwMDgwMzIwMDAwMTIwMDkzQkM4MDMyMDAwMDAwMDA1MDQwOUEKKzoxMDAxMTAwMDgxQjIwMTAwMDE4MDAwNDA4MUIyMDAwMDIwMDAwMDQwNTcKKzoxMDAxMjAwMEE1OTkwMTAwMjUwMDI5NDA4MTMyMDAwMDI1MDAxNEJDNUEKKzoxMDAxMzAwMDgwMzIwMDAwMTQwMDkzQkM4MDMyMDAwMDAwMDAwMDQ5QUYKKzoxMDAxNDAwMEREODEwMTAwMTIwMTAwNDA4MTMyMDEwMDMzMDEwMDQwRDUKKzoxMDAxNTAwMDgxMzIwMTAwMkEwMDE0QkM4MDMyMDAwMEZFMDAxM0JDNzIKKzoxMDAxNjAwMDgwMzIwMDAwNTQ5NTAwNDA0NTk5MDEwMEZGRkYwMDQwOTcKKzoxMDAxNzAwMEU1OTkwMTAwMDAwMDJGNDA0OUIxMDEwMDAwMDAwMDQwNTYKKzoxMDAxODAwMEUxQjEwMTAwMDAwMDAwNDBGREIzMDEwMDAwMDAwMDQwQUIKKzoxMDAxOTAwMEZGQjMwMTAwMzMwMDE4RUU4MDMyMDAwMDAwMDAwMDUwNzEKKzoxMDAxQTAwMDg5QjAwMTAwMzIwMEEyNDE4OTUwMDAwMDk5MDAwMDQwNEUKKzoxMDAxQjAwMDgxMzIwMTAwMzA5NDAwNDA0Mzk5MDEwMDAwMDAwMEY4QjIKKzoxMDAxQzAwMDIwQjEwMTAwMDAwMDAwRkFFMEIzMDEwMDM5MDA5OEVFMTAKKzoxMDAxRDAwMDgwMzIwMDAwMDAwMDAwRkI4MEIwMDEwMDNCMDA4MEYzOTMKKzoxMDAxRTAwMERFMzMwMDAwMDAwMDAwNDdGRDkzMDEwMDNFMDA4M0YzNzIKKzoxMDAxRjAwMDgwMzIwMDAwRjAwMDAwRjM4MDg4MDEwMDAxODAwMDQwQTAKKzoxMDAyMDAwMDJFREQwMTAwMDA5NDAwNDA0Mzk5MDEwMDAwMDAwMDQ2RUIKKzoxMDAyMTAwMDQzQzEwMTAwMDAwMDAwRkEyNEIxMDEwMDdDMDAxOEVFODcKKzoxMDAyMjAwMDgwMzIwMDAwNDUwMDk1RTg4MDMyMDAwMEZGRkYwMEU4QzIKKzoxMDAyMzAwMDgwODgwMTAwN0MwMDI2NDA4MTMyMDAwMDAwMDAwMDQwRTAKKzoxMDAyNDAwMEQ1OTkwMTAwMDAwMDAwRjJFQ0IzMDEwMDAwMDAwMEY4QjUKKzoxMDAyNTAwMEQ2QjEwMTAwMDgwMDAwNDBENTk5MDEwMDAwMDAwMEYwNkYKKzoxMDAyNjAwMEQ2QjEwMTAwRkYwMDAwRjhFRThCMDEwMDA4MDEwMDQwNEMKKzoxMDAyNzAwMEQ1OTkwMTAwRkYwMDAwRjA4MDhDMDEwMDAwMDAwMEY3MUMKKzoxMDAyODAwMDgxOTQwMTAwMDAwMDAwNDBENkIxMDEwMEZGMDAwMEY4OTkKKzoxMDAyOTAwMDgwODgwMTAwM0MwMDAwNDBENTk5MDEwMEZGMDAwMEYwN0IKKzoxMDAyQTAwMEQ2OEQwMTAwRkZGRjAwRjBGMERCMDEwMDAwMDAwMDQ4RTgKKzoxMDAyQjAwMDgxRTAwMTAwMDAwMDAwRjg4MTk0MDEwMDNDMDEwMDQwNTEKKzoxMDAyQzAwMEQ1OTkwMTAwMDAwMDAwNDBENkIxMDEwMEZGMDAwMEY4MDAKKzoxMDAyRDAwMDgwODgwMTAwMDAwMDAwNDg4MUUwMDEwMDAwMDAwMEY4NzMKKzoxMDAyRTAwMDgxOTQwMTAwM0MwMjAwNDBENTk5MDEwMDAwMDAwMDQwQ0IKKzoxMDAyRjAwMEQ2QjEwMTAwMkMwMDAwNDBENTk5MDEwMDAwMDAwMEY4QTMKKzoxMDAzMDAwMEQ2QjEwMTAwMUUwMDAwRjA4MkY0MDEwMEZGM0YwMEY4QUEKKzoxMDAzMTAwMDgwRDgwMTAwNjQwMDI2NDA4MTMyMDAwMDAwMDAwMDQxQzYKKzoxMDAzMjAwMDgxRDAwMTAwRkZGRjAwNDA4MEQ4MDEwMDAwMDAwMDQxQTMKKzoxMDAzMzAwMDgwOTQwMTAwMDAwMDAwNDBEOEIxMDEwMDY4MDAyMkZBNUEKKzoxMDAzNDAwMDgwMzAwMDAwMDAwMDAwNEM4MUUwMDEwMDAxMDAwMDQwMEUKKzoxMDAzNTAwMDgwQ0MwMTAwMDAwMDAwNDBERUIxMDEwMDAwMDEwMDQwM0YKKzoxMDAzNjAwMEQ1OTkwMTAwMTAwMDAwRkE4MEU0MDEwMDAwMDAwMEY2QjkKKzoxMDAzNzAwMDgxOTQwMTAwMDAwMDAwNDBENkIxMDEwMDAwMDIwMDQwNUQKKzoxMDAzODAwMEQ1OTkwMTAwMTAwMDAwRkE4MEU0MDEwMDAwMDAwMEY2OTkKKzoxMDAzOTAwMDgxOTQwMTAwMDAwMDAwNDBENkIxMDEwMDA2MDAwMDQwMzkKKzoxMDAzQTAwMEQ1OTkwMTAwMTAwMDAwRkJENkU1MDEwMDA3MDAwMDQwRDAKKzoxMDAzQjAwMEQ1OTkwMTAwMTgwMDAwRkJENkU1MDEwMDQ4MDAwMDQwNzcKKzoxMDAzQzAwMEQ1OTkwMTAwMTAwMDAwRkFENkU1MDEwMDUwMDAwMDQwNjgKKzoxMDAzRDAwMEQ1OTkwMTAwMTAwMDAwRkJENkU1MDEwMDAzMDAwMEZCRTkKKzoxMDAzRTAwMDdBODkwMTAwMDAwMDAwRjBEQ0IxMDEwMDdDMDAwMDRDQzMKKzoxMDAzRjAwMEREOTEwMDAwN0MwMDk1RTg4NDMwMDAwMDAwMDAyRkU5Q0EKKzoxMDA0MDAwMEZBQjMwMTAwMDAwMDAwNDBEMUIxMDEwMEZGMDAwMDQyM0EKKzoxMDA0MTAwMDgwODgwMTAwMzQwMDAwNDA4MENFMDEwMDdDMDBBNjQwQUUKKzoxMDA0MjAwMDgxMzIwMDAwODUwMDAwNDA4MTMyMDEwMDAyODAyMjQwQkMKKzoxMDA0MzAwMDgwMzIwMDAwN0MwMDAwNDA4MUIyMDAwMDAwMDAwMDRGQ0MKKzoxMDA0NDAwMDgxQjAwMTAwOEUwMDA5Rjk4MTMyMDAwMDhDMDAwOEY5QUEKKzoxMDA0NTAwMDgxMzIwMDAwOTgwMDFGRkRGOTMzMDAwMDhCMDA5RUZERTMKKzoxMDA0NjAwMDgxMzIwMDAwMDAwMDAwNEFGMzkzMDEwMDAwMDA4MDQ4NDAKKzoxMDA0NzAwMEYzOTMwMTAwMDAwMDAwRkRGN0IzMDEwMDAwMDA4MDQ5ODQKKzoxMDA0ODAwMEYzOTMwMTAwMDAwMDAwRkMxOUIxMDEwMDkzMDAwQUY5ODgKKzoxMDA0OTAwMDgxMzIwMDAwMDAwMDQwRkI4MUIyMDEwMDAwMDA0MUZERkMKKzoxMDA0QTAwMDgxQjIwMTAwMDAwNzgwRjlGMzhGMDEwMDAwMDc0MkY5RDMKKzoxMDA0QjAwMEYzOEYwMTAwOTcwMEEyRkZGNzZGMDAwMDAwMDA0MzQwOTgKKzoxMDA0QzAwMDgxQjIwMTAwMDAwMEEyRkZGQkVGMDAwMDAwMDA4MEZDRjEKKzoxMDA0RDAwMEUxQjEwMTAwMDAwMDgwNDA4MUIwMDEwMDAwOTQwMDQwQzMKKzoxMDA0RTAwMDQ3OTkwMTAwQkIwMDAwNDA4MTMyMDEwMDAwMDBBMjQ2OTQKKzoxMDA0RjAwMEZEN0YwMTAwMDA5NDAwNDA0Nzk5MDEwMENFMDAwMDQwQkMKKzoxMDA1MDAwMDgxMzIwMTAwMDAwMEEyNDRGRDdGMDEwMDAwOTQwMDQwMDAKKzoxMDA1MTAwMDQ1OTkwMTAwMDAwMDAwNDBGMUIxMDEwMEZGN0YwMDQwNUIKKzoxMDA1MjAwMEY1OTkwMTAwRkY3RjAwNDBGNTk5MDEwMDlBMTMwMDQwMDIKKzoxMDA1MzAwMEY1OTkwMTAwMDcwMDAwNDBGNTk5MDEwMDAxMDAwMDQwMTUKKzoxMDA1NDAwMEY1OTkwMTAwMDAwMjAwNDBGNTk5MDEwMDAyMDAwMDQwMDkKKzoxMDA1NTAwMEY1OTkwMTAwMDAwMjAwNDBGNTk5MDEwMDAzMDEwMDQwRjcKKzoxMDA1NjAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDlBMTMwMDQwNDAKKzoxMDA1NzAwMEY1OTkwMTAwMEIwMDAwNDBGNTk5MDEwMDgwMDAwMDQwNTIKKzoxMDA1ODAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDAwMDAwMDQwQ0QKKzoxMDA1OTAwMEY1OTkwMTAwMDcwMDAwNDBGNTk5MDEwMDA4MDAwMDQwQUUKKzoxMDA1QTAwMEY1OTkwMTAwQjAwMjAwNDBGNTk5MDEwMDAwMDAwMDQwRkIKKzoxMDA1QjAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDAyMjkwMDQwNzIKKzoxMDA1QzAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDAwNjcwMDQwMjYKKzoxMDA1RDAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDgwMDAwMDQwRkQKKzoxMDA1RTAwMEY1OTkwMTAwMDAwMDgwNDBGNTk5MDEwMDAwMDAwMDQ1RTgKKzoxMDA1RjAwMEZEODMwMTAwMDAwMDAwNDZGRDgzMDEwMEZGN0YwMDQwRjUKKzoxMDA2MDAwMDI1OTkwMTAwQzQwMDAwNDA4MTMyMDEwMDAwMDBBMjQ0OEQKKzoxMDA2MTAwMDgwQjIwMDAwMDAwMDAwNDVGRDkzMDEwMEUyMDAwMDQwQjAKKzoxMDA2MjAwMDgzMzAwMTAwMDAwMEEyNDU4MDMyMDEwMDAwMDA4MDQ2QjYKKzoxMDA2MzAwMEZEOTMwMTAwMDAxMDAwNDA4Mzk4MDEwMEREMDAwMDQwQTAKKzoxMDA2NDAwMDJCMzEwMTAwMDAwMEEyNDY4OEIwMDAwMDAwMDAwMDQxRUMKKzoxMDA2NTAwMDg5QjAwMTAwMDAwMDAwOTQ4Q0IwMDEwMEZGRkYwMDQ2NEIKKzoxMDA2NjAwMDgwODgwMTAwQTVBNUEyNDA4MENFMDAwMDAwMDAwMDQ4QkYKKzoxMDA2NzAwMDhERjAwMTAwQzkwMDgyNDE4OTQwMDAwMDAwMDA4MDQwRTcKKzoxMDA2ODAwMDg5QjAwMTAwMDAwMDAwNDRGRDgzMDEwMEQ0MDAwMDQwNTcKKzoxMDA2OTAwMDgxMzIwMTAwMDAwMEEyNDQ4MEIyMDAwMEUyMDAwMDA4QTQKKzoxMDA2QTAwMDgzMzAwMTAwMDAwMEEyNDU4MDMyMDEwMDAwMDA4MDQ0MzgKKzoxMDA2QjAwMEZEOTMwMTAwMDAzMDAwMDg4Mzk4MDEwMDgwMDAwMDQwOTUKKzoxMDA2QzAwMDJCOTkwMTAwREIwMDAwNDA4OTMwMDEwMDAwMDBBMjQ2QTgKKzoxMDA2RDAwMDgwQjIwMDAwRkZGRjAwOTQ4MDg4MDEwMEE1QTVBMjQwMjEKKzoxMDA2RTAwMDgwNEUwMTAwMDAwMDgwNDM4OUIwMDEwMDAzODQwMDQxNzYKKzoxMDA2RjAwMDJDOTkwMTAwREUwMDAwNDA4MUIyMDAwMDAzODgwMDQxMTcKKzoxMDA3MDAwMDJDOTkwMTAwMDAwMDAwMjA4REIwMDEwMDAwMDA5Rjk2OTAKKzoxMDA3MTAwMDgwQjIwMDAwREYwMEEyNDE4RDUwMDAwMDAwMDA4MDQwNDgKKzoxMDA3MjAwMDgxQjIwMTAwRkY3RjAwNDAyNTk5MDEwMDAwMDAwMDRDQ0MKKzoxMDA3MzAwMDg5RTAwMTAwREQwMDAwNDQ4MjE0MDEwMDAwMDA5MDk0NzMKKzoxMDA3NDAwMDhBQjAwMDAwMDAwMDAwNDVGMEIxMDEwMDEwMDAwMDQ1MzMKKzoxMDA3NTAwMDg4RjQwMTAwMDAwMDAwNDQ4OUQwMDEwMEREMDAwMDQ0NUQKKzoxMDA3NjAwMDJCNDEwMTAwRUMwMDA4NDE4MDMyMDAwMEVEMDAwMDk0QjQKKzoxMDA3NzAwMDI0QjEwMDAwMTAwMDAwOTQyNEY1MDEwMDAwMDAwMDk0NTIKKzoxMDA3ODAwMEYwQjEwMTAwRjIwMEEwNDQ4OTUwMDAwMEREMDAwMDQ0RjcKKzoxMDA3OTAwMDJCNDEwMTAwMDAwMDAwOTRGMEIxMDEwMEVGMDAyMDQ0NjMKKzoxMDA3QTAwMDg5NTAwMDAwMTAwMDAwNDU4OEY0MDEwMDAwMDAwMEZBQTQKKzoxMDA3QjAwMDhBQjAwMTAwMDAwMEEzNDI4OUQwMDAwMEY3MDBBMEZBMkYKKzoxMDA3QzAwMDhBNDAwMDAwMDAwMDAwNDE4QkMwMDEwMEY1MDBBMzQyRjgKKzoxMDA3RDAwMDg5NTAwMDAwRkZGRjAwNDU4ODg4MDEwMDEwMDAwMDQ1OTcKKzoxMDA3RTAwMDhBRjQwMTAwRkMwMDkwNDQ4QTQwMDAwMDAwMDAwMDQxQUYKKzoxMDA3RjAwMDhCQzAwMTAwRkZGRjAwNDU4QUE4MDEwMDAwMDA4MDUwNjcKKzoxMDA4MDAwMDhCRTAwMTAwRkY3RjAwNDAyNTk5MDEwMDdDMDAwMDQwNDMKKzoxMDA4MTAwMDJCOTkwMTAwMDAzMDAwNDA4Mzk4MDEwMEREMDAwMDA4QTIKKzoxMDA4MjAwMDgzMTQwMTAwMDAwMDAwOTQyQUIxMDEwMDAwODAwMDQwMDAKKzoxMDA4MzAwMEY5OUIwMTAwREQwMDAwRkMxOTMxMDEwMDAwMDA0MDk0MkIKKzoxMDA4NDAwMDgwQjIwMTAwREQwMDAwNDQyQjQxMDEwMDAwMDA0MTk0MTIKKzoxMDA4NTAwMDgwQjIwMTAwMDAwMDAwNDFGOUMzMDEwMDAwMDAwMDQ0MjMKKzoxMDA4NjAwMDJCQzEwMTAwMDQwMTlGOTQ4MDMyMDAwMDAyODAwMDQwRUYKKzoxMDA4NzAwMDgxQjIwMDAwMTAwMTAwNTE5M0IwMDAwMDEwMDEwMDRENDIKKzoxMDA4ODAwMDkzQjAwMDAwMTAwMTAwNDk5M0IwMDAwMDAwMDAwMDQyNDYKKzoxMDA4OTAwMDkzQjAwMTAwMTAwMUEyNDE5MzUwMDAwMDAwMDA4MDQwN0QKKzoxMDA4QTAwMDgxQjIwMTAwMDAwMDEwNDA4MUIyMDEwMDAwMDAxMTQwM0YKKzoxMDA4QjAwMDgxQjIwMTAwMDAwMDEyNDA4MUIyMDEwMDAwMDAxMzQwMkIKKzoxMDA4QzAwMDgxQjIwMTAwMDAwMDE0NDA4MUIyMDEwMDAwMDAxNTQwMTcKKzoxMDA4RDAwMDgxQjIwMTAwMDAwMDE2NDA4MUIyMDEwMDAwMDAxNzQwMDMKKzoxMDA4RTAwMDgxQjIwMTAwMDAwMDE4NDA4MUIyMDEwMDAwMDAxOTQwRUYKKzoxMDA4RjAwMDgxQjIwMTAwMDAwMDFBNDA4MUIyMDEwMDAwMDAxQjQwREIKKzoxMDA5MDAwMDgxQjIwMTAwMDAwMDFDNDA4MUIyMDEwMDAwMDAxRDQwQzYKKzoxMDA5MTAwMDgxQjIwMTAwMDAwMDFFNDA4MUIyMDEwMDAwMDAxRjQwQjIKKzoxMDA5MjAwMDgxQjIwMTAwMDAwMDcwNDA4MUIyMDEwMDAwMDA3MTQwRkUKKzoxMDA5MzAwMDgxQjIwMTAwMDAwMDcyNDA4MUIyMDEwMDAwMDA3MzQwRUEKKzoxMDA5NDAwMDgxQjIwMTAwMDAwMDc0NDA4MUIyMDEwMDAwMDA3NTQwRDYKKzoxMDA5NTAwMDgxQjIwMTAwMDAwMDc2NDA4MUIyMDEwMDAwMDA3NzQwQzIKKzoxMDA5NjAwMDgxQjIwMTAwMDAwMDc4NDA4MUIyMDEwMDAwMDA3OTQwQUUKKzoxMDA5NzAwMDgxQjIwMTAwMDAwMDdBNDA4MUIyMDEwMDAwMDA3QjQwOUEKKzoxMDA5ODAwMDgxQjIwMTAwMDAwMDdDNDA4MUIyMDEwMDAwMDA3RDQwODYKKzoxMDA5OTAwMDgxQjIwMTAwMDAwMDdFNDA4MUIyMDEwMDAwMDA3RjQwNzIKKzoxMDA5QTAwMDgxQjIwMTAwMDAwMDgwNDA4MUIyMDEwMDAwMDQwMDQwREIKKzoxMDA5QjAwMEExOTkwMTAwMDAwMDAwNTBBMUQxMDEwMDAwMDAwMDQwRjkKKzoxMDA5QzAwMDFCQjAwMTAwMDAwMDAwNDAxOUIwMDEwMDAwMDAwMDQwMTEKKzoxMDA5RDAwMDE3QjAwMTAwMDAwMDAwNDAxNUIwMDEwMDAwMDAwMDQwMDkKKzoxMDA5RTAwMDEzQjAwMTAwMDAwMDAwNDAxMUIwMDEwMDAwMDAwMDQwMDEKKzoxMDA5RjAwMDBGQjAwMTAwMDAwMDAwNDAwREIwMDEwMDAwMDAwMDQwRjkKKzoxMDBBMDAwMDBCQjAwMTAwMDAwMDAwNDAwOUIwMDEwMDAwMDAwMDQwRjAKKzoxMDBBMTAwMDA3QjAwMTAwMDAwMDAwNDAwNUIwMDEwMDAwMDAwMDQwRTgKKzoxMDBBMjAwMDAzQjAwMTAwMDAwMDAwNDAwMUIwMDEwMDNCMDEyMDQ4N0MKKzoxMDBBMzAwMEExNTEwMDAwMDAwMDgwNDA4MUIyMDEwMDQ3MDEyMjRCMUIKKzoxMDBBNDAwMDc0N0QwMDAwMDAwMDgwNDA4MUIyMDEwMDYwMDAwMDRCMTYKKzoxMDBBNTAwMDYwOTkwMTAwMDAwMDAwQjE3RUIxMDEwMDQ4MDFBODQwOEEKKzoxMDBBNjAwMDgxMzIwMDAwNDUwMTAwNDA4MUIyMDAwMDA1MDA4MDQwNTUKKzoxMDBBNzAwMDk3OTgwMTAwMTgwMDAwQUE5Njg4MDEwMDAwMDA4MDQzQTIKKzoxMDBBODAwMDk3RjAwMTAwMDcwMDAwQUE5Njg4MDEwMDAwMDA4MDQwNEUKKzoxMDBBOTAwMDgxQjIwMTAwMDAwMDAwNTgwNzkwMDEwMEQ4OUYwMDQwN0IKKzoxMDBBQTAwMDgxQjIwMDAwMDAwMDAwNDRBNUIzMDEwMEQ4MDIwMDQwNUMKKzoxMDBBQjAwMDgxMzIwMTAwRjgwMjAwNDA4MTMyMDEwMDAwMDAwMDVDMzgKKzoxMDBBQzAwMDA3OTAwMTAwRDg5RjAwNDBCRkIzMDAwMDVBMDEyMkNDMUMKKzoxMDBBRDAwMDg1N0YwMDAwMDAwMDAwNTEwNzkwMDEwMEQ4OUYwMDQwNzIKKzoxMDBBRTAwMDgxQjIwMDAwMDAwMDAwNDA0OUIxMDEwMEFFMDMwMENCMUMKKzoxMDBBRjAwMEEzQzkwMTAwRDAxNDAwNDBBMTlCMDEwMDAwMDAwMDIwMDgKKzoxMDBCMDAwMDQ2QjEwMTAwMDAwMDAwNDhGMUIxMDEwMDAwMDAwMEQwMzIKKzoxMDBCMTAwMEYxQjEwMTAwMDAwMDAwQ0FGMUIxMDEwMDAwMDAwMEQ1RjAKKzoxMDBCMjAwMEUxQjEwMTAwMDcwMDAwNDA2MTk5MDEwMDIwMDAwMDIwQjAKKzoxMDBCMzAwMDYyREQwMTAwNjMwMUE4NDA4MTMyMDAwMDAwMDAwMENDQUEKKzoxMDBCNDAwMDg1OTMwMTAwRjgwMjAwNDA4MTMyMDEwMEQwMTQwMDQwN0EKKzoxMDBCNTAwMDQzOTkwMTAwMDAwMDAwRkFCQUIzMDEwMDAwMDAwMEZBNTYKKzoxMDBCNjAwMEE0QjMwMTAwMDAwMDAwRjhCQ0IzMDEwMDAwMTQyRjQwNDIKKzoxMDBCNzAwMDgxQjAwMTAwMDAwMDAwRTdBN0IzMDEwMDAwMDAwMEQ4MjkKKzoxMDBCODAwMEE5QjMwMTAwRkYwMDAwREQ4MTg4MDEwMDAyMDAwMDQwRTAKKzoxMDBCOTAwMDgwRjQwMTAwNzMwMTAwNDA4MEM4MDEwMDg2MDEwMEREN0YKKzoxMDBCQTAwMDgxMzIwMDAwMDAwMDAwNDAxMEIxMDAwMDg3MDEwMDQwQzkKKzoxMDBCQjAwMDgxQjIwMDAwODgwMTAwNDA4MUIyMDAwMDg5MDEwMDQwM0MKKzoxMDBCQzAwMDgxQjIwMDAwOEEwMTAwNDA4MUIyMDAwMDhCMDEwMDQwMjgKKzoxMDBCRDAwMDgxQjIwMDAwOEQwMTAwNDA4MUIyMDAwMDhGMDEwMDQwMTEKKzoxMDBCRTAwMDgxQjIwMDAwNTAwMTAwNDA4MUIyMDAwMEI2MDEwMDQwMTcKKzoxMDBCRjAwMDgxQjIwMDAwNTAwMTAwNDA4MUIyMDAwMEM0MDEwMDQwRjkKKzoxMDBDMDAwMDgxQjIwMDAwQzUwMTAwNDA4MUIyMDAwMDgyMDIwMDQwQjQKKzoxMDBDMTAwMDgxQjIwMDAwODMwMjAwNDA4MUIyMjgwMEI4MDIwMDQwODcKKzoxMDBDMjAwMDgxQjIyODAwRDQ5RjAwNDA4MUIyMjgwMEQ1OUYwMDQwQTcKKzoxMDBDMzAwMDgxQjIyODAwRDY5RjAwNDA4MUIyMjgwMEQ3OUYwMDQwOTMKKzoxMDBDNDAwMDgxQjIyODAwNzIwMTAwNDE4MUMwMjgwMDU1MDE1MTQ5M0MKKzoxMDBDNTAwMEZEOTMyODAwNTUwMTUyNEFGRDkzMkEwMDU1MDE1NTQ5M0MKKzoxMDBDNjAwMEZEODMyQTAwNTUwMTU2NEFGRDgzMkEwMDUwMDE5MTgxRDcKKzoxMDBDNzAwMDgwMzAyQTAwNTUwMTQ1NDA4MUIyMkEwMDUwMDE5MTgyRkUKKzoxMDBDODAwMDgwMzAyQTAwNTUwMTQ2NDA4MUIyMkEwMDAwMDAwMDQwMTEKKzoxMDBDOTAwMDg5QjAyQjAwMDAwMDJGNDA4MUIwMDEwMDAwMTQwMDQwRkIKKzoxMDBDQTAwMDQ5OTkwMTAwQjMwMTIyREVFMTZEMDAwMDAwMDAwMDRDMTMKKzoxMDBDQjAwMDQ5QzEwMTAwMDAwMDAwNDE4MUMwMDEwMDkyMDFBMjQ0MkQKKzoxMDBDQzAwMDgxNkMwMDAwMDAwMDAwNEM0OUQxMDEwMDlBMDEyMjQwRDMKKzoxMDBDRDAwMEUxNkQwMDAwOTYwMUEyNDE4MTUwMDAwMDUwMDEwMDQxRTkKKzoxMDBDRTAwMEJGQjMwMDAwMDAwMDAwNDJCRkIzMDEwMDUwMDFBMDBGREQKKzoxMDBDRjAwMEJENkYwMDAwMDAwMDAwREVFMUIxMDEwMDAwMDAwMDQ0MTMKKzoxMDBEMDAwMDQ5QzEwMTAwQjUwMTAwNDAxOTk5MDEwMDAwMDA0MjQwQUQKKzoxMDBEMTAwMDgxQjIwMTAwMDAwMDQzRkY4NUIwMDEwMDAwMDAwMERFNDkKKzoxMDBEMjAwMDE5QjEwMTAwMDAwMDQyRkY4N0IwMDEwMDAwMDA0M0ZGM0QKKzoxMDBEMzAwMEUxQjEwMTAwMDAwMDAwNDQ0OUMxMDEwMDAwMDAyRkZGQTMKKzoxMDBENDAwMEUxQjEwMTAwMDgxNDAwQTQ4MENDMDEwMEFBMDEyNjQwRjIKKzoxMDBENTAwMDgxMzIwMDAwMDAwMDAwNDE4NUMwMDEwMEE4MDFBMjRDQzIKKzoxMDBENjAwMDgxNTAwMDAwQjQwMTIyRDI4MTMyMDAwMEFGMDEyMjQxNDMKKzoxMDBENzAwMEE1NkYwMDAwNTAwMUEyRTA4MTMyMDAwMDAwMDAwMEQyMDcKKzoxMDBEODAwMEMxQjMwMTAwMDAwMDAwNUM4OTkwMDEwMDAwMDA0MDQyRjYKKzoxMDBEOTAwMDgwQjIwMTAwMDAwMDQxNDM4MEIyMDEwMDAwMDAwMEYwNzkKKzoxMDBEQTAwMDg4OTQwMTAwNTUwMTAwNDRFMEIxMDAwMEIxMDEwMDQ4MDEKKzoxMDBEQjAwMDQ5QzEwMDAwQUYwMTAwNUI4OTkwMDAwMEE4OUYwMEEwMUUKKzoxMDBEQzAwMDlFQjAwMDAwMDAwMDAwNDA4M0IwMDEwMDAwMTQwMDQwMEQKKzoxMDBERDAwMDQ5OTkwMTAwMDAwMDIzNDA4MUIwMDEwMEJFMDEyMkRFREMKKzoxMDBERTAwMEUxNkQwMDAwMDAwMDAwNEM0OUMxMDEwMDAwMDAwMDQxMUQKKzoxMDBERjAwMDgxQzAwMTAwQjkwMUEyNDQ4MTZDMDAwMDUwMDEwMDQzOTAKKzoxMDBFMDAwMEJGQjMwMDAwMDAwMDAwRjgxOEIxMDEwMDAwMDA0MEY4NzYKKzoxMDBFMTAwMDgwQjIwMTAwMDAwMDQxRjA4MEIyMDEwMDAwMDAwMDQwRkIKKzoxMDBFMjAwMEYxQjEwMTAwMDAwMDAwNDBGMUIxMDEwMDU1MDEwMDQwQTYKKzoxMDBFMzAwMEUxQjEwMDAwQzYwMTAwNDA5MUIwMDAwMDAwMDAwMDQxOTcKKzoxMDBFNDAwMDkxQjAwMTAwRDAxNDJFNDA0OUIxMDEwMDA1MDAwMDQwQ0UKKzoxMDBFNTAwMEEzOUIwMTAwMDgwMDAwREQ4MUY0MDEwMENCMDEwMDQwRUMKKzoxMDBFNjAwMDgwQzgwMTAwMDAwMDAwNDAxMEIxMDAwMEQxMDEwMDQwMjYKKzoxMDBFNzAwMDgxQjAwMDAwNTMwMTAwREVBMUIzMDAwMEUzMDEwMDQwOTcKKzoxMDBFODAwMDgxQjIwMDAwRTUwMTAwNDA4MUIwMDAwMEVCMDEwMDQwQUMKKzoxMDBFOTAwMDgxQjIwMDAwNTIwMTAwREZFMUIxMDAwMDAwMDAwMEQwOEIKKzoxMDBFQTAwMEJBQjMwMTAwMDAwMDAwREVBMUIxMDEwMDAyMDAwMEQyQ0YKKzoxMDBFQjAwMEE1RTcwMTAwMDAwMDAwRDJDMUIzMDEwMDAwMDAwMDAwNUUKKzoxMDBFQzAwMEYwQjEwMTAwREIwMTIyNDRDMTUzMDAwMERBMDE4NDQxOEEKKzoxMDBFRDAwMDgxNDAwMDAwREUwMTAwNDA4MTMyMDEwMDAwMDAwMEQwQUUKKzoxMDBFRTAwMDQ1QjEwMTAwRDUwMTAwNDFBMUMxMDAwMERBMDIwMDQwNzYKKzoxMDBFRjAwMDgxMzIwMTAwRjgwMjAwNDA4MTMyMDEwMDU1MDEwMEREMUQKKzoxMDBGMDAwMEExQjEwMDAwMDAwMDAwNDA4MUIwMDEwMDQwMDAwMDQwOUQKKzoxMDBGMTAwMEE1OUIwMTAwREEwMjAwNDA4MTMyMDEwMDQwMDAwMEQzQUQKKzoxMDBGMjAwMEE3Q0IwMTAwRjgwMjAwRTBBNUIzMDAwMDAzMDAwMDQwRDkKKzoxMDBGMzAwMEEzOUIwMTAwNTMwMTAwREVBMUIzMDAwMDAwMDAwMDQ0QTgKKzoxMDBGNDAwMEJGQjMwMTAwMDAwMDAwREU4MTkwMDEwMDUwMDFBMkJBOTEKKzoxMDBGNTAwMDgwMDQwMDAwNjAwMDAwREU2MTk5MDEwMEU4MDFBOEIxOTIKKzoxMDBGNjAwMDgwMzAwMDAwNTIwMTAwNDBFMEIxMDAwMDAwMDAwMEQwREQKKzoxMDBGNzAwMEJBQjMwMTAwNkIwMjAwNDA4MTk4MDEwMDYwMDIwMDREOEQKKzoxMDBGODAwMDgzMzAwMTAwMDAwMDAwNDRFMUIzMDEwMDAwMDAwMDQ0OTAKKzoxMDBGOTAwMEUzQjMwMTAwMDAwMDAwNDRFNUIzMDEwMDAwMDAwMDQ0OTkKKzoxMDBGQTAwMEU5QjMwMTAwMDAwMDAwNDRFQkIzMDEwMDAwMDAwMDQ0N0QKKzoxMDBGQjAwMEY1QjMwMTAwMDAwMDAwNDRGN0IzMDEwMDAwMDAwMDQ0NTUKKzoxMDBGQzAwMEY5QjMwMTAwRjkwMTIyNDA4RjZGMDAwMDc4MDIwMDQwNjAKKzoxMDBGRDAwMDgxOTgwMTAwNjAwMjAwQzc4MzMwMDEwMDgwMDIwMDQwNTgKKzoxMDBGRTAwMDgxOTgwMTAwNjAwMjAwNDI4MzMwMDEwMDAwMDAwMEU4QTcKKzoxMDBGRjAwMEYxQjEwMTAwMDAwMDAwRTlGMUIxMDEwMDAwMDAwMEVBRDgKKzoxMDEwMDAwMEYxQjEwMTAwMDAwMDAwRUJGMUIxMDEwMDAwMDAwMDg1MkEKKzoxMDEwMTAwMEYwQjEwMTAwMDAwMDAwRUNGMUIxMDEwMDAwMDAwMEVEQjIKKzoxMDEwMjAwMEYxQjEwMTAwMDAwMDAwQjJGMEIxMDEwMDAwMDAwMEE5MjAKKzoxMDEwMzAwMEYwQjEwMTAwMDAwMDAwQUNGMEIxMDEwMDAwMDAwMEFCMTUKKzoxMDEwNDAwMEYwQjEwMTAwMDAwMDAwQjhGMEIxMDEwMDAwMDAwMEI5RUIKKzoxMDEwNTAwMEYwQjEwMTAwMDAwMDAwQkFGMEIxMDEwMDAwMDAwMEJCRDcKKzoxMDEwNjAwMEYwQjEwMTAwMEMwMkI4NDA4MTMwMDAwMDAwMDAwMDQwRTcKKzoxMDEwNzAwMDgxOTAwMTAwMEUwMkI5NDA4MTMyMDAwMDAwMDAwMDQxNjEKKzoxMDEwODAwMDgxOTAwMTAwMTAwMkJBNDA4MTMyMDAwMDAwMDAwMDQyNEQKKzoxMDEwOTAwMDgxOTAwMTAwMTIwMkJCNDA4MTMyMDAwMDAwMDAwMDQzMzkKKzoxMDEwQTAwMDgxOTAwMTAwMTQwMkJDNDA4MTMyMDAwMDAwMDAwMDQ0MjUKKzoxMDEwQjAwMDgxOTAwMTAwMTYwMkJENDA4MTMyMDAwMDAwMDAwMDQ1MTEKKzoxMDEwQzAwMDgxOTAwMTAwMTgwMkJFNDA4MTMyMDAwMDAwMDAwMDQ2RkQKKzoxMDEwRDAwMDgxOTAwMTAwMUEwMkJGNDA4MTMyMDAwMDAwMDAwMDQ3RTkKKzoxMDEwRTAwMDgxOTAwMTAwMUMwMkM4NDA4MTMyMDAwMDAwMDAwMDQ4Q0QKKzoxMDEwRjAwMDgxOTAwMTAwMUUwMkM5NDA4MTMyMDAwMDAwMDAwMDQ5QjkKKzoxMDExMDAwMDgxOTAwMTAwMjAwMkNBNDA4MTMyMDAwMDAwMDAwMDRBQTQKKzoxMDExMTAwMDgxOTAwMTAwMjIwMkNCNDA4MTMyMDAwMDAwMDAwMDRCOTAKKzoxMDExMjAwMDgxOTAwMTAwMjQwMkNDNDA4MTMyMDAwMDAwMDAwMDRDN0MKKzoxMDExMzAwMDgxOTAwMTAwMjYwMkNENDA4MTMyMDAwMDAwMDAwMDRENjgKKzoxMDExNDAwMDgxOTAwMTAwMjgwMkNFNDA4MTMyMDAwMDAwMDAwMDRFNTQKKzoxMDExNTAwMDgxOTAwMTAwMkEwMkNGNDA4MTMyMDAwMDAwMDAwMDRGNDAKKzoxMDExNjAwMDgxOTAwMTAwMkMwMkYwNDA4MTMyMDAwMDAwMDAwMDUwMEMKKzoxMDExNzAwMDgxOTAwMTAwMkUwMkYxNDA4MTMyMDAwMDAwMDAwMDUxRjgKKzoxMDExODAwMDgxOTAwMTAwMzAwMkYyNDA4MTMyMDAwMDAwMDAwMDUyRTQKKzoxMDExOTAwMDgxOTAwMTAwMzIwMkYzNDA4MTMyMDAwMDAwMDAwMDUzRDAKKzoxMDExQTAwMDgxOTAwMTAwMzQwMkY0NDA4MTMyMDAwMDAwMDAwMDU0QkMKKzoxMDExQjAwMDgxOTAwMTAwMzYwMkY1NDA4MTMyMDAwMDAwMDAwMDU1QTgKKzoxMDExQzAwMDgxOTAwMTAwMzgwMkY2NDA4MTMyMDAwMDAwMDAwMDU2OTQKKzoxMDExRDAwMDgxOTAwMTAwM0EwMkY3NDA4MTMyMDAwMDAwMDAwMDU3ODAKKzoxMDExRTAwMDgxOTAwMTAwM0MwMkY4NDA4MTMyMDAwMDAwMDAwMDU4NkMKKzoxMDExRjAwMDgxOTAwMTAwM0UwMkY5NDA4MTMyMDAwMDAwMDAwMDU5NTgKKzoxMDEyMDAwMDgxOTAwMTAwNDAwMkZBNDA4MTMyMDAwMDAwMDAwMDVBNDMKKzoxMDEyMTAwMDgxOTAwMTAwNDIwMkZCNDA4MTMyMDAwMDAwMDAwMDVCMkYKKzoxMDEyMjAwMDgxOTAwMTAwNDQwMkZDNDA4MTMyMDAwMDAwMDAwMDVDMUIKKzoxMDEyMzAwMDgxOTAwMTAwNDYwMkZENDA4MTMyMDAwMDAwMDAwMDVEMDcKKzoxMDEyNDAwMDgxOTAwMTAwNDgwMkZFNDA4MTMyMDAwMDAwMDAwMDVFRjMKKzoxMDEyNTAwMDgxOTAwMTAwNEEwMkZGNDA4MTMyMDAwMDAwMDAwMDVGREYKKzoxMDEyNjAwMDgxOTAwMTAwMDAwMDAwNDBGMEIxMDEwMDQwMDAwMDQwMEEKKzoxMDEyNzAwMEE1OUIwMTAwRDgwMjAwNDA4MTMyMDEwMEY4MDIwMDQwMjUKKzoxMDEyODAwMDgxMzIwMTAwRDAxNDJFMDZBNUIzMDEwMDQwMDAwMEQzMjYKKzoxMDEyOTAwMEE3Q0IwMTAwMDAwMDAwRjBGMUIxMDEwMDAwMDAwMEYxNTcKKzoxMDEyQTAwMEYxQjEwMTAwMDAwMDAwRjJGMUIxMDEwMDAwMDAwMEY0MTIKKzoxMDEyQjAwMEYxQjEwMTAwMDAwMDAwRjVGMUIxMDEwMDAwMDAwMEZBRjkKKzoxMDEyQzAwMEYxQjEwMTAwMDAwMDAwRkJGMUIxMDEwMDAwMDAwMEZDRTEKKzoxMDEyRDAwMEYxQjEwMTAwMDAwMDAwRUJGMUIxMDEwMDAwMDAwMEVFRUYKKzoxMDEyRTAwMEYxQjEwMTAwMDAwMDAwRUZGMUIxMDEwMDAwMDAwMEYzRDYKKzoxMDEyRjAwMEYxQjEwMTAwMDAwMDAwRjZGMUIxMDEwMDAwMDAwMEZEQjUKKzoxMDEzMDAwMEYxQjEwMTAwREIwMTAwQzdFMUIxMDAwMDAwMDA4MDQwNDUKKzoxMDEzMTAwMDgxQjIwMTAwNjYwMjAwNDg4MDMyMDAwMDAwMDA1MTQwQTYKKzoxMDEzMjAwMDFBQjEwMTAwMDAwMDRENDA4MUIyMDEwMDAwMDA0NTQwQUIKKzoxMDEzMzAwMDgxQjIwMTAwNjMwMkEyNDE4MzUwMDAwMDVGMDI0OTQwNzQKKzoxMDEzNDAwMDgxQjIwMDAwMDAwMDUyNDAxQ0IxMDEwMDAwMDA0RTQwN0MKKzoxMDEzNTAwMDgxQjIwMTAwMDAwMDQ2NDA4MUIyMDEwMDY4MDJBMjQxNTIKKzoxMDEzNjAwMDgzNTAwMDAwNUYwMjRBNDA4MUIyMDAwMDAwMDAwMEEwRUMKKzoxMDEzNzAwMDlFQjAwMTAwMDAwMDAwODBEOEIzMDEwMDAwMDAwMEExNzEKKzoxMDEzODAwMEQwQjMwMTAwMDAwMDAwQTJEMkIzMDEwMDAwMDAwMEE0MEQKKzoxMDEzOTAwMEQ0QjMwMTAwMDAwMDAwRDBENkIzMDEwMDAwMDAwMEQxOUEKKzoxMDEzQTAwMERDQjMwMTAwMDAwMDAwRDJERUIzMDEwMDAwMDAwMDg4QzEKKzoxMDEzQjAwMERBQjMwMTAwMDAwMDAwRDQ4RUIzMDEwMDAwMDAwMEQzQjYKKzoxMDEzQzAwMEU2QjMwMTAwMDAwMDAwQUNFQ0IzMDEwMDAwMDAwMDk5OUUKKzoxMDEzRDAwMEZBQjMwMTAwMDAwMDAwRDVFMEIzMDEwMDAwMDAwMEQ1MjEKKzoxMDEzRTAwMEUyQjMwMTAwMDAwMDAwRDVFNEIzMDEwMDAwMDAwMEQ1MjUKKzoxMDEzRjAwMEU4QjMwMTAwMDAwMDAwRDVFQUIzMDEwMDAwMDAwMEQ1MDkKKzoxMDE0MDAwMEY0QjMwMTAwMDAwMDAwRDVGNkIzMDEwMDAwMDAwMEQ1RTAKKzoxMDE0MTAwMEY4QjMwMTAwMDAwMDAwQzdBOUIxMDEwMDAwMDAwMDRGQUYKKzoxMDE0MjAwMDQwQjEwMTAwODQwMjAwNDA5MUIwMDAwMDAwMDAwMDQxODIKKzoxMDE0MzAwMDkxQjAwMTAwMDcwMDAwNDBBMzlCMDEwMDA4MDAwMERERkYKKzoxMDE0NDAwMDgxRjQwMTAwODgwMjAwNDA4MEM4MDEwMDAwMDAwMDQwRDMKKzoxMDE0NTAwMDEwQjEwMDAwOEQwMjAwNDA4MUIyMDAwMDk4MDIwMDQwRUYKKzoxMDE0NjAwMDgxQjIwMDAwOTgwMjAwNDZBM0IzMDAwMDlCMDIwMDQwMzYKKzoxMDE0NzAwMDgxQjIwMDAwQTEwMjAwNDA4MUIyMDAwMDhGMDIyMzUwMUYKKzoxMDE0ODAwMEE1NkYwMDAwMDAwMDAwNTBBNUIzMDEwMEU4MDIwMDQyNzMKKzoxMDE0OTAwMEE1NjMwMTAwRjgwMjAwNDA4MTMyMDEwMEQwMTQyRDQwMDQKKzoxMDE0QTAwMDQ5QjEwMTAwMDAwMDAwRDBCQUIzMDEwMDAwMDAwMERFMjUKKzoxMDE0QjAwMEExQjEwMTAwMDAwMDAwRjgwMEIwMDEwMDk3MDIyMjQ0MzEKKzoxMDE0QzAwMEE1NTMwMDAwOTQwMjAwNDFBMUMxMDAwMDU1MDEwMEREQjgKKzoxMDE0RDAwMEExQjEwMDAwRTgwMjAwREVBMTMzMDEwMEY4MDIwMDQwRTMKKzoxMDE0RTAwMDgxMzIwMTAwNTUwMTAwNDA4MUIyMDAwMDAwMDAwMDQ1M0EKKzoxMDE0RjAwMEJGQjMwMTAwNTAwMUEyRDI3NzdEMDAwMDAwMDAwMEQyRUUKKzoxMDE1MDAwMDYxQjEwMTAwMDAwMDAwREU2M0IxMDEwMDlFMDJBODQwNEQKKzoxMDE1MTAwMDgxMzIwMDAwNTUwMTAwNDA4MUIyMDAwMEU4MDIwMDU0MTEKKzoxMDE1MjAwMEE1MzMwMTAwRjgwMjAwNDA4MTMyMDEwMEQwMTQyRDQwQTMKKzoxMDE1MzAwMDQ5QjEwMTAwMDAwMDAwRjhEMEIzMDEwMDAwMDAwMEY4M0MKKzoxMDE1NDAwMEQyQjMwMTAwMDAwMDAwRjhENEIzMDEwMDAwMDAwMEY4OUQKKzoxMDE1NTAwMEQ2QjMwMTAwMDAwMDAwRjgwOEIxMDEwMEFDMDIwMDQwNjEKKzoxMDE1NjAwMDgxOTgwMTAwNjAwMjAwNDY4MzMwMDEwMDU1MDEwMDQwNkYKKzoxMDE1NzAwMDgxQjIwMDAwMDAwMDAwQTA5RUIwMDEwMDAwMDAwMEU4NjEKKzoxMDE1ODAwMDQzQjEwMTAwMDAwMDAwRTk0NUIxMDEwMDAwMDAwMEVBOUMKKzoxMDE1OTAwMDQ5QjEwMTAwMDAwMDAwRUJBMUIxMDEwMDAwMDAwMDRGQzMKKzoxMDE1QTAwMDQwQjEwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDE1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDE1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDE1RDAwMDgxQjIwMDAwRDAxNDJFNDA0OUIxMDEwMDA1MDAwMDQwNDYKKzoxMDE1RTAwMEEzOUIwMTAwMDAwMDAwNDBDMUIzMDEwMDA4MDAwMEREMjIKKzoxMDE1RjAwMDgxRjQwMTAwQkQwMjAwNDAxMEM5MDAwMEMzMDIwMDA1RDMKKzoxMDE2MDAwMDgxQjAwMDAwNTAwMTAwNDA4MUIyMDAwMENCMDIwMDA1MTMKKzoxMDE2MTAwMDgxQjAwMDAwNTAwMTAwNDA4MUIyMDAwMEQwMDIwMDQ0QkYKKzoxMDE2MjAwMEE1QjMwMDAwRDIwMjAwNDRBNUIzMDAwMDAyMDAwMDQwQjAKKzoxMDE2MzAwMEE0RTcwMTAwMDAwMDAwRTA4MUIxMDEwMEZGRkYwMEMxNEMKKzoxMDE2NDAwMEYwODkwMTAwQzgwMjIyNDE4MTUwMDAwMEM0MDIwMDQxMUIKKzoxMDE2NTAwMEMxQzMwMDAwREEwMjAwNDA4MTMyMDEwMEY4MDIwMDQwRkMKKzoxMDE2NjAwMDgxMzIwMTAwNTUwMTAwNDA4MUIyMDAwMDAyMDAwMDQwQkIKKzoxMDE2NzAwMEE0RTcwMTAwMDAwMDAwRTA5MUIxMDEwMEZGRkYwMEM5RjQKKzoxMDE2ODAwMEYwODkwMTAwQzgwMjIyNDE4MTUwMDAwMENDMDIwMDQxRDMKKzoxMDE2OTAwMEMxQzMwMDAwRkZGRjAwREU4NTg5MDEwMEM4MDIwMEMyNEYKKzoxMDE2QTAwMEUwQjEwMDAwRkZGRjAwREU5NTg5MDEwMEM4MDIwMENBMUEKKzoxMDE2QjAwMEUwQjEwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDE2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDE2RDAwMDgxQjIwMDAwMDAwMDAwRTdBN0IzMDEwMDAwMDAwMEQ4QkQKKzoxMDE2RTAwMEE5QjMwMTAwMDAwMDAwNDA0OUIxMDEwMEFFMDMwMENCRTYKKzoxMDE2RjAwMEEzQzkwMTAwMDAwMDAwMjA0NkIxMDEwMDAwMDAwMEQyOTMKKzoxMDE3MDAwMEYxQjEwMTAwMDAwMDAwRDNGMUIxMDEwMDAwMDAwMEQ0RUMKKzoxMDE3MTAwMEYxQjEwMTAwMDAwMDAwRDBFMUIxMDEwMDAwMDAwMEQxRjIKKzoxMDE3MjAwMDYxQjEwMTAwMjAwMDAwMjA2MkREMDEwMEUyMDJBODQwNUEKKzoxMDE3MzAwMDgxMzIwMDAwMDAwMDgwQ0M4NTkzMDEwMDA0MDAwMDQwNEQKKzoxMDE3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDE3NTAwMDgxQjIwMDAwMDAwMDAwRTdBN0IzMDEwMDAwMDAwMEQ4M0MKKzoxMDE3NjAwMEE5QjMwMTAwMDAwMDAwNDA0OUIxMDEwMEFFMDMwMENCNjUKKzoxMDE3NzAwMEEzQzkwMTAwMDAwMDAwMjA0NkIxMDEwMDAwMDAwMEQyMTIKKzoxMDE3ODAwMEYxQjEwMTAwMDAwMDAwRDBGMUIxMDEwMDAwMDAwMEQzNzAKKzoxMDE3OTAwMEYxQjEwMTAwRTEwMjAwRDRFMUIxMDAwMDA0MDAwMDQwMTkKKzoxMDE3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDE3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDE3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDE3RDAwMDgxQjIwMDAwMDAwMEEyQ0M4NUZGMDAwMDAwMDAwMDUwOTQKKzoxMDE3RTAwMDgxQjAwMTAwRkEwMkEyNDE4MTUwMDAwMEY5MDJBMkYyODgKKzoxMDE3RjAwMDgwMzAwMDAwMDAwMDgwQ0M4NTgzMDEwMDA0MDAwMDQwQTAKKzoxMDE4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDE4MTAwMDgxQjIwMDAwQjUwMzAwNDBBMTk5MDEwMDAwMDAyRjQxRjIKKzoxMDE4MjAwMDk5QjMwMTAwMEEwMzIyNDQ4MTZDMDAwMDEyMDMyMjQ4OEMKKzoxMDE4MzAwMDgxNkMwMDAwMEMwMzIyNEM4MTZDMDAwMDE2MDMyMjUwQzYKKzoxMDE4NDAwMDgxNkMwMDAwMTcwMzIyNTQ4MTZDMDAwMDE5MDMyMjU4OTgKKzoxMDE4NTAwMDgxNkMwMDAwMUUwMzIyNUM4MTZDMDAwMDUwMDEwMDQwN0UKKzoxMDE4NjAwMDgxQjIwMDAwMDAwMDAwQkMwOUIwMDEwMEREOUYwMENBODkKKzoxMDE4NzAwMDAxQjAwMDAwMDAwMDAwNDAwM0IwMDEwMDAwMDAwMDQxODIKKzoxMDE4ODAwMEYzODMwMTAwMTAwM0EyNDIwNTZDMDAwMDAwMDAwMDQxMzgKKzoxMDE4OTAwMDA1QjAwMTAwREQ5RjIyQ0EwNzE0MDAwMEREOUYwMDQ1NEUKKzoxMDE4QTAwMEYzOTMwMDAwREQ5RjIwNDM5NTZGMDAwMEREOUY4MENBMDkKKzoxMDE4QjAwMDA1MzAwMDAwREQ5RjIyMDE4MDMwMDAwMEREOUYwMENCNUQKKzoxMDE4QzAwMERCOTEwMDAwNTcwMTAwQkNBQkIzMDAwMDAwMDAwMEJDN0UKKzoxMDE4RDAwMEIxQjMwMTAwREQ5RjAwQ0FDRkIzMDAwMEZGMDAwMENBMTIKKzoxMDE4RTAwMDgxODgwMTAwREQ5RkEyNDA3NDdEMDAwMDYwMDAyMDQwREYKKzoxMDE4RjAwMDYwOTkwMTAwMUIwM0E4QjE4MjMwMDAwMDFBMDMwMDQwNjgKKzoxMDE5MDAwMDgxQjIwMDAwREQ5RjAwQ0E3OUIzMDAwMDA0MDAwMDQwRUUKKzoxMDE5MTAwMDgxQjIwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQzRDEKKzoxMDE5MjAwMENCODMwMTAwMDAwMDQ1NDA4MUIyMDEwMDIyMDNBMjQxQTcKKzoxMDE5MzAwMDgxNTAwMDAwMDAwMDQ1NDA4MUIyMDEwMDAwMDA0NTQwOTgKKzoxMDE5NDAwMDgxQjIwMTAwMkQwMzkxODI4MjMwMDAwMDAwMDAwMDhBRTQKKzoxMDE5NTAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMDJCMDNBNjQwNjYKKzoxMDE5NjAwMDgxMzIwMDAwMkQwMzU2NDA4MUIyMDAwMEI1MDMwMDQwRDMKKzoxMDE5NzAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEI1MDMwMDQwNDkKKzoxMDE5ODAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEQ4OUYwMDQxN0EKKzoxMDE5OTAwMDhCQjMwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQyNDcKKzoxMDE5QTAwMENEODMwMTAwMDAwMDQ2NDA4MUIyMDEwMDMyMDNBMjQxMTQKKzoxMDE5QjAwMDgxNTAwMDAwMDAwMDQ2NDA4MUIyMDEwMDAwMDA0NjQwMTYKKzoxMDE5QzAwMDgxQjIwMTAwM0QwMzkxODE4MjMwMDAwMDAwMDAwMDg5NTYKKzoxMDE5RDAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMDNCMDNBNjQwRDYKKzoxMDE5RTAwMDgxMzIwMDAwM0QwMzU1NDA4MUIyMDAwMEI1MDMwMDQwNDQKKzoxMDE5RjAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEI1MDMwMDQwQ0EKKzoxMDFBMDAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEQ4OUYwMDQxRjgKKzoxMDFBMTAwMDhCQjMwMDAwQjAwMzAwNDBBMTk5MDEwMEM0MTQyRjQwMTMKKzoxMDFBMjAwMDk5QjMwMTAwNTcwMTAwNDA0OUIxMDAwMDA0MDAwMDQwOTMKKzoxMDFBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDFBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDFBNTAwMDgxQjIwMDAwMzA5NDAwNDA0Mzk5MDEwMDAwOTAwMEY4RUEKKzoxMDFBNjAwMDgwOTgwMTAwMTAwMDAwRjI4OEU0MDEwMDIwMDAwMDQwOEUKKzoxMDFBNzAwMDIwOTkwMTAwMDAwMDAwNUYyMzkxMDEwMDREMDMxRjkxOTgKKzoxMDFBODAwMDgwMzIwMDAwMzAwMDAwNDAyMDk5MDEwMDAwMDAwMDVGMUIKKzoxMDFBOTAwMDIzOTEwMTAwNTAwMzFGOTE4MDMyMDAwMDQwMDAwMDQwNUMKKzoxMDFBQTAwMDIwOTkwMTAwMDAwMDAwNUYyMzkxMDEwMDUzMDMxRjkxNjIKKzoxMDFBQjAwMDgwMzIwMDAwMDAwMDAwNUYyMzkxMDEwMDU1MDMxRjkxNTgKKzoxMDFBQzAwMDgwMzIwMDAwMDAwODgwNDAyMDk5MDEwMDA0MDAwMDQwOUUKKzoxMDFBRDAwMDgxQjIwMDAwMDAwMDAwNDc4NEIwMDEwMDAwMDBBMjQ4NkQKKzoxMDFBRTAwMDg0ODQwMDAwMDAwMDAwNUY2MUIxMDEwMDAwMDAwMDVDMjAKKzoxMDFBRjAwMDhGOTAwMTAwMDAwMDAwNDc2MkIxMDEwMDVBMDNBODQwMjYKKzoxMDFCMDAwMDgxMzIwMDAwMDAwODAwNDc4RUM4MDEwMDU4MDMwMDVDQzUKKzoxMDFCMTAwMDhGODAwMDAwRTAwMDAwNDA2MTk5MDEwMDU4MTUyRDQwQzEKKzoxMDFCMjAwMDhEQjAwMTAwRDAxNDJERjA4OEIwMDEwMDAwMDAwMEZBNDMKKzoxMDFCMzAwMDhBQjAwMTAwMDAwMDAwNDU4MUIwMDEwMDA3MDAwMDQ1QTcKKzoxMDFCNDAwMDgyODgwMTAwMDAwMDAwNDM4QkYwMDEwMDAwMDAwMDQ4ODMKKzoxMDFCNTAwMDgzRTAwMTAwMDAwMDAwNDY4Mjk0MDEwMDIwMDAwMDQxNjMKKzoxMDFCNjAwMDYwOTkwMTAwMDAwMDAwNDE4REMwMDEwMDc0MDMyMjVGRjQKKzoxMDFCNzAwMDhENkMwMDAwNjUwM0EyNDE4MTUwMDAwMDYzMDMwMDQwQUEKKzoxMDFCODAwMDgxQjIwMDAwMDgwMDAwNDA4NTk4MDEwMDAwMDAwMDQ0NzgKKzoxMDFCOTAwMDgyQjAwMTAwMDAwMDAwNDE4NkIwMDEwMDAwMUMwMDQzM0IKKzoxMDFCQTAwMDg2RDgwMTAwMDAwMEE2NDE4NTUwMDEwMDcwMDMwMDQxNjUKKzoxMDFCQjAwMDgzRTAwMDAwNkUwMzAwNDA4MTMyMDEwMDAwMDAwMDQ4MTUKKzoxMDFCQzAwMDg1RTAwMTAwRDAxNDJGNDY4NDk0MDEwMDIwMDAwMDQyREIKKzoxMDFCRDAwMDYwOTkwMTAwQzAwMDAwNDA2MTk5MDEwMDAwMDA4MDQwNTAKKzoxMDFCRTAwMDgxQjIwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDFCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDFDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDFDMTAwMDgxQjIwMDAwMDcwMDAwNDU4MDg4MDEwMDAwMDAwMDQzRjkKKzoxMDFDMjAwMDhCRjAwMTAwMDAwNDAwNDA4Mzk4MDEwMDg1MDNBMDQxNkYKKzoxMDFDMzAwMDgxNTAwMDAwODMwMzAwNDE4MkU4MDAwMDAwMDA4MDQxRTEKKzoxMDFDNDAwMDhFQzAwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDFDNTAwMDgxQjIwMDAwMDAwMDAwNDA0OUIxMDEwMDAwMDIwMDQwRDQKKzoxMDFDNjAwMDgzOTgwMTAwMDAzOTAwNDA0NTk5MDEwMDAwMDAwMDQwQzAKKzoxMDFDNzAwMEYxQjEwMTAwOEIwM0EyNDE4MzUwMDAwMDAwMDAwMDQwM0QKKzoxMDFDODAwMDg1QjAwMTAwMEIwMDAwNDQ4MkY0MDEwMDFBMTUwMEE2ODMKKzoxMDFDOTAwMDg2QjAwMTAwNzAxNTAwNDA0NTk5MDEwMDAwMDgwMDQwMjEKKzoxMDFDQTAwMEYxOTkwMTAwMDAwMDAwNDJGMEIxMDEwMDAwMzkwMDQwNEMKKzoxMDFDQjAwMEUxOTkwMTAwMDQwMDAwNDA2MTk5MDEwMDcwMTUwMDQzQTIKKzoxMDFDQzAwMDYyOTkwMTAwOTUwM0E4NDA4MTMyMDAwMDk3MDMyMjVBQ0YKKzoxMDFDRDAwMDczN0QwMDAwN0EwMDAwNDA2MTk5MDEwMDk4MDNBOEIxNkIKKzoxMDFDRTAwMDdFMzEwMDAwMDAwODAwNDI4NEM4MDEwMDkwMDNBMjQxMzgKKzoxMDFDRjAwMDgzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwRDkKKzoxMDFEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDFEMTAwMDgxQjIwMDAwNTgxNTJENDA4REIwMDEwMEQwMTQyREYwNzcKKzoxMDFEMjAwMDg4QjAwMTAwMDAwMDAwNDA4RkIwMDEwMDAxMDAwMEE2NTMKKzoxMDFEMzAwMDkwQjAwMTAwMDBGODAwNDg5MDk4MDEwMDAwMDAwMDQ1QjQKKzoxMDFENDAwMDkzQjAwMTAwMDAwMDAwRkE4QUIwMDEwMDgwMDMwMDQwNTcKKzoxMDFENTAwMDgxMzIwMTAwMDIwMDAwQTY4MEIwMDEwMEFDMDMyMjQwRTUKKzoxMDFENjAwMDgyNkMwMDAwQjAwMzAwNDA4MTMyMDEwMDU4MDMwMDQwNDMKKzoxMDFENzAwMDgxMzIwMTAwMDAwMDAwNDE4REMwMDEwMEI1MDMyMjVGRTcKKzoxMDFEODAwMDhENkMwMDAwQTcwM0EyNDE5MzUwMDAwMEE1MDMwMDQwMDIKKzoxMDFEOTAwMDgxQjIwMDAwRkYwNzAwNDc4NDg4MDEwMDAwMDBBNjQwRDAKKzoxMDFEQTAwMDgxQjIwMDAwRUQ5RjAwNDc4MDMwMDEwMDAwMDIwMDQ3MzMKKzoxMDFEQjAwMDhFQzgwMTAwQjAwMzAwNDA4MUIyMDAwMDAwMDAwMDQ0NjIKKzoxMDFEQzAwMDUwQjMwMTAwQkIwMzIwMTg4OTZDMDAwMDA0MDAwMEE2N0EKKzoxMDFERDAwMDg0QjAwMTAwMjAwMDAwQTY4NkIwMDEwMDAwMTAwMDQwODEKKzoxMDFERTAwMDU1OUIwMTAwQkUwMzAwNDA4MUIyMDAwMDA0MDAwMEE2MjQKKzoxMDFERjAwMDg0QjAwMTAwMjAwMDAwQTY4NkIwMDEwMDAwMTAwMDQwNjEKKzoxMDFFMDAwMDU1OUIwMTAwMDAwMDAwNDI1MEQzMDEwMDAwMDAwMEE4RDMKKzoxMDFFMTAwMDRGQjMwMTAwMDAwMDAwNDM0RUQzMDEwMDZFMDMwMDQwQTkKKzoxMDFFMjAwMDgxMzIwMTAwODIwMzAwNDI4MDMwMDEwMEIwMDMwMDQwOTMKKzoxMDFFMzAwMDgxMzIwMTAwQzcwMzIyQTc4RjZDMDAwMDVBMDMwMDQwQzMKKzoxMDFFNDAwMDgxMzIwMTAwQzQwMzAwNDA4MUIyMDAwMDAwMDA4MDQwRTQKKzoxMDFFNTAwMDgxQjIwMTAwQzgxNDJFQkI4NUIwMDEwMDAwMDAwMEVFNjUKKzoxMDFFNjAwMDgyQjAwMTAwMDAwMDAwNDFFMEIxMDEwMDAwMDAwMEEyQ0EKKzoxMDFFNzAwMEEwQjMwMTAwMDAwMDAwNDRBNUIzMDEwMEUxOUYwMENBMjcKKzoxMDFFODAwMEE3MzMwMTAwRTA5RjAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDFFOTAwMDgxQjIwMDAwRDYwMzIyNDI3NTZGMDAwMEQ4MDMyMjQxQjAKKzoxMDFFQTAwMDc1NkYwMDAwREEwMzFFQ0E4MTMyMDAwMERDMDMxRkNBMEUKKzoxMDFFQjAwMDgxMzIwMDAwMDAwMDAwQ0FDOUIxMDEwMEREOUYwMDQyNkMKKzoxMDFFQzAwMDc1QjMwMDAwMDAwMDAwQ0FDREIxMDEwMEREOUYwMDQxRTQKKzoxMDFFRDAwMDc1QjMwMDAwMDAwMDAwQ0FDRkIxMDEwMEREOUYwMDQwRDMKKzoxMDFFRTAwMDc1QjMwMDAwMDA4MTAwQTZDNkIxMDEwMEREOUYwMDQwNkYKKzoxMDFFRjAwMDgxQjIwMDAwMDA4MDAwQTZDNkIxMDEwMEREOUYwMDQwNTUKKzoxMDFGMDAwMDc1QjMwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDFGMTAwMDgxQjIwMDAwNDUwMTAwNEQ5MzMwMDEwMDQ1MDEwMDRFQTMKKzoxMDFGMjAwMDkzMzAwMTAwNDUwMTAwNEM5MzMwMDEwMEVDOUYwMDQwQ0MKKzoxMDFGMzAwMDgxMzIwMTAwREQ5RjAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDFGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDFGNTAwMDgxQjIwMDAwNTQ5NTAwNDA0NTk5MDEwMEREOUYwMENBMDAKKzoxMDFGNjAwMEU1QjEwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDFGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDFGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDFGOTAwMDgxQjIwMDAwQ0MxNDJFNDA4N0IwMDEwMDAwMDAwMEEyRTYKKzoxMDFGQTAwMEEwQjMwMTAwMTUwNDAwNDNCMjMzMDEwMDAwMDA2OERBNTkKKzoxMDFGQjAwMDg5QjAwMTAwN0MwMDAwNDA4Qjk4MDEwMDAwMDAwMDUwQjcKKzoxMDFGQzAwMDg5RjAwMTAwMDAwMDAwNDE4OUQwMDEwMDAzMDAwMDQ0QjUKKzoxMDFGRDAwMDg4OEMwMTAwMDAwMDAwNDQ4N0MwMDEwMDAwMDAwMDQxMUYKKzoxMDFGRTAwMEE1QjMwMTAwMTUwNDAwNDNCMjMzMDEwMDAwMDAwMERBN0MKKzoxMDFGRjAwMEYxQjEwMTAwMDAwMDAwNDQ4N0MwMDEwMDAwMDAwMDQxNzEKKzoxMDIwMDAwMEE1QzMwMTAwMEIwNDIyNDQ4OTUwMDAwMDBCMDQyMjQ0QTQKKzoxMDIwMTAwMDhCNTAwMDAwRkEwM0EyNTBBNTZGMDAwMDAwMDAwMDQyQTAKKzoxMDIwMjAwMEE1RTMwMTAwMDAwMDAwQ0FBN0IzMDEwMEUxOUYwMEJCQzcKKzoxMDIwMzAwMDg1MzAwMTAwQ0MxNDJFRDI5NUMzMDEwMEFFMDMwMENCMzUKKzoxMDIwNDAwMEEzQzkwMTAwMDAwMDAwMjA0MkIxMDEwMDAwMDAwMDUwQkYKKzoxMDIwNTAwMDgxQjAwMTAwMDgwNEEyNDE4MTUwMDAwMDA3MDRBMkYyRUYKKzoxMDIwNjAwMDgwMzAwMDAwRkEwMzAwNDBBNUIzMDAwMDAwMDAwMDQyRTkKKzoxMDIwNzAwMEE1RTMwMTAwMDAwMDAwQ0FBN0IzMDEwMEUxOUYwMEJCNzcKKzoxMDIwODAwMDg1MzAwMTAwRTA5RjAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDIwOTAwMDgxQjIwMDAwMDAwMDAwRDkyQkIxMDEwMDAwMTAwMDQwMDcKKzoxMDIwQTAwMDgzOTgwMTAwREIwMDAwNDA4MTMyMDEwMEZGRkYwMDk0QjMKKzoxMDIwQjAwMEI0OEIwMTAwMDAwMDgwNDA4MUIyMDEwMDAwMDAwMEQ5MTMKKzoxMDIwQzAwMDJCQjEwMTAwMDAxMDAwNDA4Mzk4MDEwMEREMDAwMDQwQUEKKzoxMDIwRDAwMDgxMzIwMTAwMDAwMDgwOTRCNEIzMDEwMDA0MDAwMDQwOEMKKzoxMDIwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDIwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDIxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDIxMTAwMDgxQjIwMDAwMDAwMDAwRDkyQkIxMDEwMDAwMDAwMERBRkMKKzoxMDIxMjAwMDI3QjEwMTAwMDZDMDAwNDAyRDk5MDEwMERFMDAwMDQwRUIKKzoxMDIxMzAwMDgxMzIwMTAwMDAxMDAwNDA4Mzk4MDEwMDAyQzQwMDQxNzgKKzoxMDIxNDAwMDJDOTkwMTAwREUwMDAwNDA4MTMyMDEwMDAwNDAwMDQwNzcKKzoxMDIxNTAwMDgzOTgwMTAwMDU4MjAwNDEyQzk5MDEwMERFMDAwMDQwQjcKKzoxMDIxNjAwMDgxMzIwMTAwMkQwNDgwOTQ4MDMyMDAwMDBDMDEwMDQwNzcKKzoxMDIxNzAwMDgxMzIwMTAwMjgwNDAwNDA4MUIyMDAwMDA0ODAwMDQwNDgKKzoxMDIxODAwMDJEOTkwMTAwREUwMDAwNDA4MTMyMDEwMDAwMDA4MDQwRjYKKzoxMDIxOTAwMDgxQjIwMTAwMzEwNDAwMTIxMEM5MDAwMDAwNDg4MDQwRTMKKzoxMDIxQTAwMDBCOTgwMTAwQzA0OTgwNDAwQjk4MDEwMDgwNEI4MDQwOTMKKzoxMDIxQjAwMDBCOTgwMTAwNDA0RDgwNDAwQjk4MDEwMDAwNEY4MDQwN0IKKzoxMDIxQzAwMDBCOTgwMTAwQzA1MDgwNDAwQjk4MDEwMDgwNTI4MDQwNjUKKzoxMDIxRDAwMDBCOTgwMTAwNDA1NDgwNDAwQjk4MDEwMDAwNTY4MDQwNEQKKzoxMDIxRTAwMDBCOTgwMTAwQzA1NzgwNDAwQjk4MDEwMDgwNTk4MDQwMzcKKzoxMDIxRjAwMDBCOTgwMTAwNDA1QjgwNDAwQjk4MDEwMDAwNUQ4MDQwMUYKKzoxMDIyMDAwMDBCOTgwMTAwQzA1RTgwNDAwQjk4MDEwMDgwNjA4MDQwMDgKKzoxMDIyMTAwMDBCOTgwMTAwNDA2MjgwNDAwQjk4MDEwMDAwNjQ4MDQwRjAKKzoxMDIyMjAwMDBCOTgwMTAwQzA2NTgwNDAwQjk4MDEwMDgwNjc4MDQwREEKKzoxMDIyMzAwMDBCOTgwMTAwNDA2OTgwNDAwQjk4MDEwMDAwNkI4MDQwQzIKKzoxMDIyNDAwMDBCOTgwMTAwQzA2QzgwNDAwQjk4MDEwMDgwNkU4MDQwQUMKKzoxMDIyNTAwMDBCOTgwMTAwNDA3MDgwNDAwQjk4MDEwMDAwNzI4MDQwOTQKKzoxMDIyNjAwMDBCOTgwMTAwQzA3MzgwNDAwQjk4MDEwMDgwNzU4MDQwN0UKKzoxMDIyNzAwMDBCOTgwMTAwNDA3NzgwNDAwQjk4MDEwMDAwNzk4MDQwNjYKKzoxMDIyODAwMDBCOTgwMTAwQzA3QTgwNDAwQjk4MDEwMDgwN0M4MDQwNTAKKzoxMDIyOTAwMDBCOTgwMTAwNDA3RTgwNDAwQjk4MDEwMDA0MDAwMDQwMzQKKzoxMDIyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDIyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDIyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDIyRDAwMDgxQjIwMDAwNTkwNDAwMTIxMEM5MDAwMDAwODA4MDQwNDMKKzoxMDIyRTAwMDBCOTgwMTAwMDA4MjgwNDAwQjk4MDEwMDAwODQ4MDQwMjAKKzoxMDIyRjAwMDBCOTgwMTAwMDA4NjgwNDAwQjk4MDEwMDAwODg4MDQwMDgKKzoxMDIzMDAwMDBCOTgwMTAwMDA4QTgwNDAwQjk4MDEwMDAwOEM4MDQwRUYKKzoxMDIzMTAwMDBCOTgwMTAwMDA4RTgwNDAwQjk4MDEwMDAwOTA4MDQwRDcKKzoxMDIzMjAwMDBCOTgwMTAwMDA5MjgwNDAwQjk4MDEwMDAwOTQ4MDQwQkYKKzoxMDIzMzAwMDBCOTgwMTAwMDA5NjgwNDAwQjk4MDEwMDAwOTg4MDQwQTcKKzoxMDIzNDAwMDBCOTgwMTAwMDA5QTgwNDAwQjk4MDEwMDAwOUM4MDQwOEYKKzoxMDIzNTAwMDBCOTgwMTAwMDA5RTgwNDAwQjk4MDEwMDAwQTA4MDQwNzcKKzoxMDIzNjAwMDBCOTgwMTAwMDBBMjgwNDAwQjk4MDEwMDAwQTQ4MDQwNUYKKzoxMDIzNzAwMDBCOTgwMTAwMDBBNjgwNDAwQjk4MDEwMDAwQTg4MDQwNDcKKzoxMDIzODAwMDBCOTgwMTAwMDBBQTgwNDAwQjk4MDEwMDAwQUM4MDQwMkYKKzoxMDIzOTAwMDBCOTgwMTAwMDBBRTgwNDAwQjk4MDEwMDAwQjA4MDQwMTcKKzoxMDIzQTAwMDBCOTgwMTAwMDBCMjgwNDAwQjk4MDEwMDAwQjQ4MDQwRkYKKzoxMDIzQjAwMDBCOTgwMTAwMDBCNjgwNDAwQjk4MDEwMDAwQjg4MDQwRTcKKzoxMDIzQzAwMDBCOTgwMTAwMDBCQTgwNDAwQjk4MDEwMDAwQkM4MDQwQ0YKKzoxMDIzRDAwMDBCOTgwMTAwMDBCRTgwNDAwQjk4MDEwMDA0MDAwMDQwRjMKKzoxMDIzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDIzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDI0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDI0MTAwMDgxQjIwMDAwMDAwMDAwNDA4N0IxMDEwMDAwMDAwMDQwRDAKKzoxMDI0MjAwMDk3QjAwMTAwMDAwMDAwNEI4MEIxMDEwMDAxMDAwMEE2NDAKKzoxMDI0MzAwMDgyQjEwMTAwODIwNDg1NDE5NzQwMDAwMDAwMDAwMDQwMDUKKzoxMDI0NDAwMDk3QjEwMTAwMDAwMDAwNDA5N0IwMDEwMDAwMDAwMDRCNzAKKzoxMDI0NTAwMDkwQjEwMTAwMDEwMDAwQTY5MkIxMDEwMDg3MDQ4NTQxRkUKKzoxMDI0NjAwMDk3NDAwMDAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwNUQKKzoxMDI0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDI0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDI0OTAwMDgxQjIwMDAwOTAwNDYwNDA4MTMyMDAwMDAwMDAwMDEyMTAKKzoxMDI0QTAwMDgwQjEwMTAwRkZGRkYwNEI4Mjg5MDEwMDkzMDQ2MDQwN0UKKzoxMDI0QjAwMDgxMzIwMDAwMDAwMDAwNEE4MEIxMDEwMDAxMDBGMEE2NTYKKzoxMDI0QzAwMDgyQjEwMTAwOTYwNDYwNDA4MTMyMDAwMEZGRkYwMDRCQTIKKzoxMDI0RDAwMDg0ODkwMTAwMDAwMEYwQzIyNEIwMDEwMDAwMDAwMDRBMUQKKzoxMDI0RTAwMDkwQjEwMTAwRkZGRjgwNEI5Mjg5MDEwMDAwMDAwMDRBN0IKKzoxMDI0RjAwMDkwQjEwMTAwMDEwMDgwQTY5MkIxMDEwMEZGRkYwMDRCRTYKKzoxMDI1MDAwMDk0ODkwMTAwMDAwMDgwQ0E5NEIwMDEwMDA0MDAwMDQwREEKKzoxMDI1MTAwMDgxQjIwMDAwMTAwMDAwNEU5OEU0MDEwMDAwMDAwMDA3QTYKKzoxMDI1MjAwMDk4OTQwMTAwMDAwMDAwNDM5OUUwMDEwMDAwMDAwMDgwNDEKKzoxMDI1MzAwMDk4OTQwMTAwMDAwMDAwNDk5OUUwMDEwMDAwMDAwMDRDNUYKKzoxMDI1NDAwMDg4OTQwMTAwQTYwNDQ3NDA4MTMyMDAwMEFEMDQyMjIwOTcKKzoxMDI1NTAwMDg3NkYwMDAwMDAwMDFGNDA4MUIyMDEwMDAwMDAwMDQwQjIKKzoxMDI1NjAwMDgxQjIwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMDQwODMKKzoxMDI1NzAwMDgxQjIwMTAwQTYwNDAwNDA4MUIyMDAwMDAwMDAxRjgwNkIKKzoxMDI1ODAwMDg2QjMwMTAwQjAwNDIyNEY3NzdEMDAwMEMwMDQwMDQwRjQKKzoxMDI1OTAwMDgxMzIwMTAwMDAwMDAwNEY2MUIxMDEwMDAwMDAwMDQ0RTEKKzoxMDI1QTAwMDYyQjEwMTAwQjEwNEE4NDA4MTMyMDAwMEI4MDQyMjRCOUUKKzoxMDI1QjAwMDg5N0MwMDAwQjYwNDIyNEY3NzdEMDAwMEMwMDQwMDQwRjMKKzoxMDI1QzAwMDgxMzIwMTAwMDAwMDAwNDU2MkIxMDEwMEI2MDRBODQwNUMKKzoxMDI1RDAwMDgxMzIwMDAwMDAwMDgwMjA4N0IzMDEwMDA0MDAwMDQwMjkKKzoxMDI1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDI1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDI2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDI2MTAwMDgxQjIwMDAwMDAwMDAwNTA5OUIwMDEwMDZGMDAwMDQwM0UKKzoxMDI2MjAwMDYxOTkwMTAwQzEwNEE4QjE1MjMzMDAwMEM2MDQyMjRCRDUKKzoxMDI2MzAwMDUzN0YwMDAwNkYwMDAwNDA2MTk5MDEwMEM0MDRBOEIxRkQKKzoxMDI2NDAwMDdFMzEwMDAwQzEwNEEyNDE5OTUwMDAwMDAwMDBBMjRGNTkKKzoxMDI2NTAwMDc3RkQwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDI2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDI2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDI2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDI2OTAwMDgxQjIwMDAwMTAwMDAwNEU5OEU0MDEwMDAwMDAwMDA3MjUKKzoxMDI2QTAwMDk4OTQwMTAwMDAwMDAwNDM5OUUwMDEwMDAwMDAwMDgwQzAKKzoxMDI2QjAwMDk4OTQwMTAwMDAwMDAwNDg5OUUwMDEwMEQ2MDQwMDRDMDUKKzoxMDI2QzAwMDg4OTQwMDAwRDYwNDQ3NDA4MTMyMDAwMEREMDQyMjIwQjcKKzoxMDI2RDAwMDg3NkYwMDAwMDAwMDFGNDA4MUIyMDEwMDAwMDAwMDQwMzEKKzoxMDI2RTAwMDgxQjIwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMDQwMDIKKzoxMDI2RjAwMDgxQjIwMTAwRDYwNDAwNDA4MUIyMDAwMDAwMDAxRjgwQkEKKzoxMDI3MDAwMDg2QjMwMTAwRTAwNDIyNEY3NzdEMDAwMEYwMDQwMDQwMTIKKzoxMDI3MTAwMDgxMzIwMTAwMDAwMDAwNEY2MUIxMDEwMDAwMDAwMDQ0NUYKKzoxMDI3MjAwMDYyQjEwMTAwRTEwNEE4NDA4MTMyMDAwMEU4MDQyMjRBQkQKKzoxMDI3MzAwMDg5N0MwMDAwRTYwNDIyNEY3NzdEMDAwMEYwMDQwMDQwMTEKKzoxMDI3NDAwMDgxMzIwMTAwMDAwMDAwNDU2MkIxMDEwMEU2MDRBODQwQUEKKzoxMDI3NTAwMDgxMzIwMDAwMDAwMDgwMjA4N0IzMDEwMDA0MDAwMDQwQTcKKzoxMDI3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDI3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDI3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDI3OTAwMDgxQjIwMDAwMDAwMDAwNTA5OUIwMDEwMDZGMDAwMDQwQkQKKzoxMDI3QTAwMDYxOTkwMTAwRjEwNEE4QjE1MjMzMDAwMEY2MDQyMjRBRjUKKzoxMDI3QjAwMDUzN0YwMDAwNkYwMDAwNDA2MTk5MDEwMEY0MDRBOEIxNEMKKzoxMDI3QzAwMDdFMzEwMDAwRjEwNEEyNDE5OTUwMDAwMDAwMDBBMjRGQTgKKzoxMDI3RDAwMDc3RkQwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDI3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDI3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDI4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDI4MTAwMDgxQjIwMDAwN0IwMDAwNDA2MTk5MDEwMDAwMDVBOEIxNzEKKzoxMDI4MjAwMDgwMzAwMDAwMTIwNTFENDA4MDMyMDAwMDQwMTgwMDQwM0EKKzoxMDI4MzAwMDQ5OTkwMTAwMDQwMDAwQTY4NkIwMDEwMDEwMDVBMjQwREQKKzoxMDI4NDAwMDg2MDQwMDAwREU5RjlDNDA4MDMyMDAwMEZGRkYwMDQwQjUKKzoxMDI4NTAwMDg4ODgwMTAwMzAwNTAwNTA0NzMxMDEwMDM2MDAwMDQ0RUYKKzoxMDI4NjAwMDg4Q0MwMTAwMEMwNTUyNDA4MTMyMDAwMDMwMDUwMDQwNDgKKzoxMDI4NzAwMDQ3MzEwMTAwMDAwMDAwNDE4OUIwMDEwMDMwMDUwMDQ4RTcKKzoxMDI4ODAwMDQ3MzEwMTAwMzAwNTAwMDU0NzMxMDEwMERFOUYwMDQwNUYKKzoxMDI4OTAwMDgxQjIwMDAwMjgwMDAwNDA0Nzk5MUIwMERFOUYwMDQxRTQKKzoxMDI4QTAwMEUxQzExQTAwNzgxODAwNDA0OTk5MUIwMDE5MDUyMjU0MEIKKzoxMDI4QjAwMDgxN0MxQTAwMTQwNTQyNDA4MTMyMUEwMDAwODIwMEIzNjQKKzoxMDI4QzAwMDY3REYxQjAwMDAwMDFBNDQ5MzkzMUIwMDI4MDAwMDQwQTAKKzoxMDI4RDAwMDQ3OTkxQjAwMzAwNTAwNDE4OTMwMDEwMDI3MDUwRjQwNTIKKzoxMDI4RTAwMDgwMzIwMDAwRkY3RjAwNDA4ODg4MDEwMDMwMDUwMDUwRTIKKzoxMDI4RjAwMDQ3MzEwMTAwMzYwMDAwNDQ4OENDMDEwMDFGMDU5OTQwOTMKKzoxMDI5MDAwMDgwMzIwMDAwMDAwMDAwNDg4OUQwMDEwMDIxMDU5QjQwNzIKKzoxMDI5MTAwMDgwMzIwMDAwMDAwMDAwNEM4OUQwMDEwMDIzMDUxRjQ0RDQKKzoxMDI5MjAwMDgwMzIwMDAwMzAwNTAwNDA0NzMxMDEwMDAwMDAwMDQxQzYKKzoxMDI5MzAwMDg5QjAwMTAwMzAwNTAwNDg0NzMxMDEwMDMwMDUwMDU4REEKKzoxMDI5NDAwMDQ3MzEwMTAwREU5RjAwNDA4MUIyMDAwMDEwMDAwMDQwQ0UKKzoxMDI5NTAwMDg2RjQwMTAwNkYwMDAwNDM4Njg4MDEwMERFOUYyNjA1OTMKKzoxMDI5NjAwMDQ3MzEwMDAwMzAwNTAwNDE4OTMwMDEwMERFOUYwMDQwMDIKKzoxMDI5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDI5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDI5OTAwMDgxQjIwMDAwMDAwMEEwNDRGMDQxMDEwMDAwMDAwMDQwQUUKKzoxMDI5QTAwMDgxQjIwMTAwMDAwMDgwNDFFMUMxMDEwMDA0MDAwMDQwNEIKKzoxMDI5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDI5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDI5RDAwMDgxQjIwMDAwNEMwMTAwMDc5MTMwMDEwMDAwMDBBMjQwQ0MKKzoxMDI5RTAwMDk3RUMwMDAwMDAwMDgwMDU5MUMwMDEwMDA0MDAwMDQwNDkKKzoxMDI5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDJBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDJBMTAwMDgxQjIwMDAwNEMwMTAwNDA4MTMyMDEwMDQ0MDVBMjQwMTcKKzoxMDJBMjAwMDk3NkMwMDAwM0EwMDAwNDBCMzlCMDEwMDQ1MDUwMDQwNTAKKzoxMDJBMzAwMDgxQjIwMDAwNDAwMDAwNDBCMzlCMDEwMDEwMDQwMDQwNDAKKzoxMDJBNDAwMDgxMzIwMTAwMDAwMDAwREFGNUIxMDEwMDEwMDQwMDQyRkIKKzoxMDJBNTAwMEIzNDMwMTAwMDAwMDAwREFGNUIxMDEwMDEwMDQwMDQyQTgKKzoxMDJBNjAwMEIzNDMwMTAwMDAwMDAwREFGNUIxMDEwMDRFMDAwMDQwNjAKKzoxMDJBNzAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDA4MDAwMERBMUQKKzoxMDJBODAwMEY3RjUwMTAwNTAwMDAwNDA5MTk4MDEwMDAwMDAwMDQ3NTgKKzoxMDJBOTAwMDhGQjAwMTAwMTAwNDAwNDhCMjMzMDEwMDAwMDAwMERBREEKKzoxMDJBQTAwMEY3QjEwMTAwMDgwMDAwREFGN0Y1MDEwMDAwMDAwMDQyNkMKKzoxMDJBQjAwMDkxQzAwMTAwNTAwNUEyNDE4RjUwMDAwMDAwMDAwMDQxNkMKKzoxMDJBQzAwMDQ1RDEwMTAwMDgwMDAwNDBCMzlCMDEwMDEwMDQwMDQwMDQKKzoxMDJBRDAwMDgxMzIwMTAwMDAwMDAwREFGREIxMDEwMDBBMDAwMDQwNkYKKzoxMDJBRTAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBQjUKKzoxMDJBRjAwMEZEQjEwMTAwMUEwMDAwNDBCMzlCMDEwMDEwMDQwMDQwMkEKKzoxMDJCMDAwMDgxMzIwMTAwMDAwMDAwREFGREIxMDEwMDE4MDAwMDQwMzAKKzoxMDJCMTAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBODQKKzoxMDJCMjAwMEZEQjEwMTAwMzgwNTAwNDA4MTMyMDEwMDFFMDAwMDQ4NUYKKzoxMDJCMzAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBMzUKKzoxMDJCNDAwMDkxQzAwMTAwMDAwMDAwNDhCMkNCMDEwMDEwMDQwMDQwMTkKKzoxMDJCNTAwMDgxMzIwMTAwMDAwMDZFREE4RkIwMDEwMDAyMDAwMDQ4RUYKKzoxMDJCNjAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBMDUKKzoxMDJCNzAwMEZEQjEwMTAwMDQwMDAwNDhCMkNCMDEwMDEwMDQwMDQwODgKKzoxMDJCODAwMDgxMzIwMTAwMDAwMDgwREFGREIxMDEwMDA0MDAwMDQwNDQKKzoxMDJCOTAwMDgxQjIwMDAwN0EwNTIyNDVGRDdGMDAwMDQwMTYwMDQwMEEKKzoxMDJCQTAwMDQ1OTkwMTAwREI5RjAwNDA0OTMxMDEwMDA4MDAwMDQ4QzEKKzoxMDJCQjAwMEIyQ0IwMTAwMTUwNDAwNDA4MTMyMDEwMDc4MDVBMjQwMkIKKzoxMDJCQzAwMDhGNkMwMDAwN0QwNTIyMjBCNTZGMDAwMDdBMDUwMDQwNjMKKzoxMDJCRDAwMDgxQjIwMDAwREE5RjAwNDA4MTMyMUYwMDdEMDUyMjQwNTMKKzoxMDJCRTAwMDk3NkMxRTAwN0EwNTQyNDA4MTMyMUUwMDAwMDAwMDRGQTMKKzoxMDJCRjAwMDY3OTMxRjAwREY5RjAwNTg2NzkzMUUwMDU0MTYwMDQwMjQKKzoxMDJDMDAwMDQ3OTkxRjAwMDAwMDAwRkVGNEIxMUYwMDAwMDAwMDQwQzMKKzoxMDJDMTAwMDgxQjIxRjAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwN0UKKzoxMDJDMjAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwOEMKKzoxMDJDMzAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwN0MKKzoxMDJDNDAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwNkMKKzoxMDJDNTAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwNUMKKzoxMDJDNjAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDQ2MDAwMDQwMDYKKzoxMDJDNzAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDA4MDAwMERBMUIKKzoxMDJDODAwMEY3RjUwMTAwNDgwMDAwNDA5NTk4MDEwMDAwMDAwMDQ0NUQKKzoxMDJDOTAwMDk3QjAwMTAwMTAwNDAwNEFCMjMzMDEwMDAwMDAwMERBQ0UKKzoxMDJDQTAwMEY3QjEwMTAwMDgwMDAwREFGN0Y1MDEwMDAwMDAwMDQyNkEKKzoxMDJDQjAwMDk1QzAwMTAwOTAwNUEyNDE5NzUwMDAwMDJBMDAwMDQwRjUKKzoxMDJDQzAwMEE1OUIwMTAwNDAxNjAwNDBBMTlCMDEwMDAwMDAwMENBMjYKKzoxMDJDRDAwMEE3QjMwMTAwRTE5RjAwQkI4NTMwMDEwMEUwOUYwMDQwRTkKKzoxMDJDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDJDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDJEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDJEMTAwMDgxQjIwMDAwQjgwNTIyNDVGRDdGMDAwMEUwMTUwMDQwQUIKKzoxMDJEMjAwMDQ3OTkwMTAwMUEwMDAwQTI4MERDMDEwMDAwMDAwMDUwNTkKKzoxMDJEMzAwMEYxQjEwMTAwRjAxNTAwNDBGMTk5MDEwMDAwMDAwMENBNTYKKzoxMDJENDAwMEYxQjEwMTAwMDcwMDAwNDA2MTk5MDEwMDIwMDAwMDQwM0UKKzoxMDJENTAwMDYyREQwMTAwQTcwNUE4QkJFMTMxMDAwMDAwMDAwMDUwQzIKKzoxMDJENjAwMDgzQjAwMTAwQUEwNUEyNDE4MzUwMDAwMEE5MDVBMkYyODgKKzoxMDJENzAwMDgyMzAwMDAwNEMwMTAwNDA4MTMyMDEwMEIwMDVBMjQwQzkKKzoxMDJEODAwMDk3NkMwMDAwM0EwMDAwNDBCMzlCMDEwMEIxMDUwMDQwODEKKzoxMDJEOTAwMDgxQjIwMDAwNDAwMDAwNDBCMzlCMDEwMEYwMTUwMDQwRUMKKzoxMDJEQTAwMDQzOTkwMTAwMTAwNDAwNDA4MTMyMDEwMEI4MDVBMkZBRTUKKzoxMDJEQjAwMEI0NkYwMDAwMTAwNDAwNDJCMzQzMDEwMEI4MDVBMkZBNEEKKzoxMDJEQzAwMEI0NkYwMDAwMTAwNDAwNDJCMzQzMDEwMEJCMDUyMkZBQjcKKzoxMDJERDAwMEI0NkYwMDAwQjgwNTQyNDA4MTMyMjAwMDAwMDAwMDRFNzAKKzoxMDJERTAwMDY3OTMyMTAwREY5RjAwNTg2NzkzMjAwMDQwMTYwMDQwNDIKKzoxMDJERjAwMDQ1OTkyMTAwREI5RjAwNDA0OTMxMjEwMEY2MTUwMDQwMzQKKzoxMDJFMDAwMDQzOTkyMTAwNUMxNjAwNDA0NTk5MjEwMDAwMDA2RUZBQUMKKzoxMDJFMTAwMDhFQjAyMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFRTEKKzoxMDJFMjAwMEY0QjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFOEEKKzoxMDJFMzAwMEY0QjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEYwODgKKzoxMDJFNDAwMEI0QjMwMTAwQzkwNUEyNDA4RjZDMDAwMEZDMTUyMDIwMUUKKzoxMDJFNTAwMEUxQjEwMTAwQ0UwNTAwNDA4MUIyMjQwMERBOUYwMDQwQkMKKzoxMDJFNjAwMDgxMzIyNTAwQ0UwNTIyNDA5NzZDMjQwMENCMDU0MjQwREMKKzoxMDJFNzAwMDgxMzIyNDAwMDAwMDAwNEY2NzkzMjUwMERGOUYwMDU4MzcKKzoxMDJFODAwMDY3OTMyNDAwMzgwNTAwNDA4MTMyMjUwMDFFMDAwMDQ4NjkKKzoxMDJFOTAwMEIyQ0IyNTAwMTAwNDAwNDA4MTMyMDEwMEQzMDUyMjUwM0UKKzoxMDJFQTAwMEI1NkYwMDAwMDAwMDAwNTA5MUMwMDEwMDAwMDAwMDQ4MTQKKzoxMDJFQjAwMEIyQ0IwMTAwRjYxNTAwNDA0Mzk5MDEwMDIwMDQwMEYyNTYKKzoxMDJFQzAwMEI0MzMwMTAwMDIwMDAwNDhCMkNCMDEwMEY4MTUwMDQwMDUKKzoxMDJFRDAwMDQzOTkwMTAwMjAwNDAwRjJCNDMzMDEwMDA0MDAwMDQ4Q0IKKzoxMDJFRTAwMEIyQ0IwMTAwRkExNTAwNDA0Mzk5MDEwMDIwMDQwMEYyMjIKKzoxMDJFRjAwMEI0MzMwMTAwMDgwMDAwNDhCMkNCMDEwMEZDMTUwMDQwQ0IKKzoxMDJGMDAwMDQzOTkwMTAwMDAwMDAwRjA5NEIwMDEwMEZGRkYwMDRBNjcKKzoxMDJGMTAwMEI0OEIwMTAwMjAwNDAwNDA4MTMyMDEwMDBBMDAwMDQ4MDcKKzoxMDJGMjAwMEIyQ0IwMTAwMTAwMDAwNEFCNEY3MDEwMDIwMDQwMDQwQjkKKzoxMDJGMzAwMDgxMzIwMTAwMzgwNTAwNDA4MTMyMDEwMDFFMDAwMDQ4NDYKKzoxMDJGNDAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMEU5MDUyMjUwOUIKKzoxMDJGNTAwMEI1NkYwMDAwRUEwNTAwNTBCNUIzMDAwMDAwMDAwMDQwNjYKKzoxMDJGNjAwMEI1QjMwMTAwMjAwNDAwNDA4MTMyMDEwMEUwOUYwMDQwMjEKKzoxMDJGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDJGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDJGOTAwMDgxQjIwMDAwMDAxNjAwNDA0Nzk5MDEwMDMwMzEwMDQwMjYKKzoxMDJGQTAwMEY1OTkwMTAwMzIzMzAwNDBGNTk5MDEwMDM0MzUwMDQwQjUKKzoxMDJGQjAwMEY1OTkwMTAwMzYzNzAwNDBGNTk5MDEwMDM4MzkwMDQwOTUKKzoxMDJGQzAwMEY1OTkwMTAwNDE0MjAwNDBGNTk5MDEwMDQzNDQwMDQwNTkKKzoxMDJGRDAwMEY1OTkwMTAwNDU0NjAwNDBGNTk5MDEwMDQ3NDgwMDQwMzkKKzoxMDJGRTAwMEY1OTkwMTAwNDk0QTAwNDBGNTk5MDEwMDJDMDAwMDQwODQKKzoxMDJGRjAwMDgzOTgwMTAwMDAwMDAwNDBGN0IxMDEwMEZDMDVBMjQxRTgKKzoxMDMwMDAwMDgzNTAwMDAwODAxNjJFMDY4M0IwMDEwMDM2MDAwMEZCQkUKKzoxMDMwMTAwMEY2QTkwMTAwRkYwNUEyNDE4MzUwMDAwMDIyMDAwMDQwRjQKKzoxMDMwMjAwMDgzOTgwMTAwMDAwMDAwRkJGNkIxMDEwMDAyMDZBMjQxRjYKKzoxMDMwMzAwMDgzNTAwMDAwNjIwMDAwNDA5NTk4MDEwMERDOUYwMDQwMzIKKzoxMDMwNDAwMDgxMzIwMTAwMDAxNjJEMDY4M0IwMDEwMDgwMTYwMDQwNzkKKzoxMDMwNTAwMDQ1OTkwMTAwNUMwMDAwRkJGNkE5MDEwMDA4MDZBMjQxQTkKKzoxMDMwNjAwMDgzNTAwMDAwMDAwMDAwNzBGOUIxMDEwMDAwMDAwMDcxMDEKKzoxMDMwNzAwMEY5QjEwMTAwMDAwMDAwNzJGOUIxMDEwMDAwMDAwMDczMTUKKzoxMDMwODAwMEY5QjEwMTAwMDAwMDAwNzRGOUIxMDEwMDU0MDAwMDQwRTIKKzoxMDMwOTAwMDk1OTgwMTAwREM5RjAwNDA4MTMyMDEwMDAwMDAwMDcwMjMKKzoxMDMwQTAwMDk1QjAwMTAwMTQwNjIyNzBCNTZGMDAwMDAwMDA4MDQxNDkKKzoxMDMwQjAwMDk3QjAwMTAwMDAwMDgwNDA5N0IwMDEwMDA0MDAwMDQwN0MKKzoxMDMwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDMwRDAwMDgxQjIwMDAwNDU2NzAwQTZFMEIyMDEwMDAxMjMwMDcwNDQKKzoxMDMwRTAwMEUxOUEwMTAwQ0RFRjAwQTZFMkIyMDEwMDg5QUIwMDcxQzgKKzoxMDMwRjAwMEUzOUEwMTAwQkE5ODAwQTZFNEIyMDEwMEZFREMwMDcyNzcKKzoxMDMxMDAwMEU1OUEwMTAwMzIxMDAwQTZFNkIyMDEwMDc2NTQwMDczODEKKzoxMDMxMTAwMEU3OUEwMTAwRDJDMzAwQTZFOEIyMDEwMEYwRTEwMDc0MTIKKzoxMDMxMjAwMEU5OUEwMTAwODAxNjAwNEE0NEM5MDEwMDAwMDAwMDA3MjYKKzoxMDMxMzAwMDgxQjAwMTAwMDAwMDAwNEE4MEQwMDEwMDAwMDAwMDQwODIKKzoxMDMxNDAwMEY3QjEwMTAwMjUwNkEyNDE4MTUwMDAwMDgwMTYwMDRBMTcKKzoxMDMxNTAwMDQ0QzkwMTAwRkMxNjJBNDdFN0I1MDEwMDAzMDAwMDRBRjQKKzoxMDMxNjAwMEU4RTUwMTAwMDAwMDAwNDA4REIwMDEwMDUwMDMwMDQwODAKKzoxMDMxNzAwMEEzOTkwMTAwODAxNjNENDY4REUwMDEwMDAwMDAwMDUwM0IKKzoxMDMxODAwMDg5QjAwMTAwMDAwMDAwRkM0MEIwMDEwMDAwMDAwMDQxRDcKKzoxMDMxOTAwMEEzQzEwMTAwMkUwNkEyNDE4OTUwMDAwMDAwMDAwMDcwNkEKKzoxMDMxQTAwMEVCQjIwMTAwMDAwMDAwNzFFREIyMDEwMDAwMDAwMDcyRkUKKzoxMDMxQjAwMEVGQjIwMTAwMDAwMDAwNzNGMUIyMDEwMDAwMDAwMDc0RTIKKzoxMDMxQzAwMEYzQjIwMTAwMDAwMDAwNDA4M0IwMDEwMDBGMDAwMDQxOTUKKzoxMDMxRDAwMDgwODgwMTAwNTAwMzAwNDBBMkM5MDEwMDRCMDZBMDUwQTYKKzoxMDMxRTAwMDgzNkMwMDAwMEQwMDAwNDA5OEM4MDEwMDAwMDAwMDRGRjMKKzoxMDMxRjAwMDk5ODQwMTAwNTAwMzAwNENBMkM5MDEwMDAwMDAwMDIwODYKKzoxMDMyMDAwMDg2QjAwMTAwMDgwMDAwNDA5OEM4MDEwMDAwMDAwMDRGOEYKKzoxMDMyMTAwMDk5ODQwMTAwNTAwMzAwNENBMkM5MDEwMDAwMDAwMDIwNjUKKzoxMDMyMjAwMDg2QTQwMTAwMDIwMDAwNDA5OEM4MDEwMDAwMDAwMDRGODEKKzoxMDMyMzAwMDk5ODQwMTAwNTAwMzAwNENBMkM5MDEwMDAwMDAwMDIwNDUKKzoxMDMyNDAwMDg2QTQwMTAwNTAwMzAwNDBBMkM5MDEwMDAwMDAwMDQzMTEKKzoxMDMyNTAwMDQwQTQwMTAwMDEwMDAwMjA4OEU0MDEwMDAwMDAwMDVGOUMKKzoxMDMyNjAwMDQxRjAwMTAwMDAwMDAwNDQ0MDk0MDEwMDA1MDAwMDc1OTkKKzoxMDMyNzAwMDg5RTQwMTAwMUIwMDAwNzU4NUY0MDEwMDAwMDAwMDQ0OTIKKzoxMDMyODAwMDg0OTQwMTAwNTUwNkEzNTM4MzZDMDAwMDAwMDAwMDc2NkYKKzoxMDMyOTAwMDg5QjAwMTAwMDAwMDAwNzc4OTg0MDEwMDAwMDAwMDc2RjkKKzoxMDMyQTAwMDhCQjAwMTAwMDAwMDAwMjA4QkE0MDEwMDAwMDAwMDc4MUEKKzoxMDMyQjAwMDhCODQwMTAwNjQwNjAwNDU4ODk0MDAwMDI3MDAwMDQxQ0IKKzoxMDMyQzAwMDgwQ0UwMTAwNUEwNkFBNDA4MTMyMDAwMDAwMDAwMDc2M0MKKzoxMDMyRDAwMDg5QjAwMTAwMDAwMDAwNzc4OUE0MDEwMDY0MDYwMDc4MkQKKzoxMDMyRTAwMDg5QTQwMDAwM0IwMDAwNDE4MENFMDEwMDU3MDZBQTQwOUYKKzoxMDMyRjAwMDgxMzIwMDAwMDAwMDAwNzY4OUIwMDEwMDAwMDAwMDc3RjQKKzoxMDMzMDAwMDg5ODQwMTAwMDAwMDAwNzY4QkIwMDEwMDAwMDAwMDc4ODUKKzoxMDMzMTAwMDhCODQwMTAwMDAwMDAwNDU4ODk0MDEwMDAwMDAwMDc3QzQKKzoxMDMzMjAwMDhCQjAwMTAwMDAwMDAwNzg4Qjg0MDEwMDY0MDYwMDQ1MkEKKzoxMDMzMzAwMDg4OTQwMDAwMDAwMDAwNDQ4NEMwMDEwMDAwMDAwMDc5NkYKKzoxMDMzNDAwMDg1QzAwMTAwMDAwMDAwMjA4NEMwMDEwMDZCMDZBMzUzNkIKKzoxMDMzNTAwMDgzNkMwMDAwODI1QTAwQTY4NEMwMDEwMDk5NzkwMDQyNjMKKzoxMDMzNjAwMDg0QzgwMTAwNzgwNjAwNDA4MUIyMDAwMDI3MDAwMDQxQjcKKzoxMDMzNzAwMDgwQ0UwMTAwNzAwNkFBNDA4MTMyMDAwMEQ5NkUwMEE2RkUKKzoxMDMzODAwMDg0QzAwMTAwQTFFQjAwNDI4NEM4MDEwMDc4MDYwMDQwMUYKKzoxMDMzOTAwMDgxQjIwMDAwM0IwMDAwNDE4MENFMDEwMDc1MDZBQTQwQ0EKKzoxMDMzQTAwMDgxMzIwMDAwMUI4RjAwQTY4NEMwMDEwMERDQkMwMDQyRkIKKzoxMDMzQjAwMDg0QzgwMTAwNzgwNjAwNDA4MUIyMDAwMDYyQ0EwMEE2RkQKKzoxMDMzQzAwMDg0QzAwMTAwRDZDMTAwNDI4NEM4MDEwMDc4MDYwMDQwRDQKKzoxMDMzRDAwMDgxQjIwMDAwMDAwMDAwNzhGM0IyMDEwMDAwMDAwMDc3MjUKKzoxMDMzRTAwMEYxQjIwMTAwMUUwMDAwNzY4OUU0MDEwMDAyMDAwMDc2QkYKKzoxMDMzRjAwMEVGRjYwMTAwMDAwMDAwNDRFRTk2MDEwMDAwMDAwMDc1QTkKKzoxMDM0MDAwMEVEQjIwMTAwMDAwMDAwNDJFQUIyMDEwMDAwMDAwMDQxRkMKKzoxMDM0MTAwMDgzQzAwMTAwNEYwMDAwNDE4MENFMDEwMDM3MDYyQTQwRTIKKzoxMDM0MjAwMDgxMzIwMDAwMDAwMDAwNzVFMUMyMDEwMDAwMDAwMDc2NUEKKzoxMDM0MzAwMEUzQzIwMTAwMDAwMDAwNzdFNUMyMDEwMDAwMDAwMDc4NEYKKzoxMDM0NDAwMEU3QzIwMTAwMDAwMDAwNzlFOUMyMDEwMDJCMDY4MTQxQkEKKzoxMDM0NTAwMDhENDAwMDAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwNjcKKzoxMDM0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDM0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDM0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDM0OTAwMDgxQjIwMDAwMDAwMDAwNTBGRDkzMDEwMDQwMTYwMDQwODIKKzoxMDM0QTAwMDQ1OTkwMTAwREI5RjAwNDA0OTMxMDEwMDA4MDAwMDQ4QjgKKzoxMDM0QjAwMEIyQ0IwMTAwMTUwNDAwNDA4MTMyMDEwMEI5MDYyMjQwNjAKKzoxMDM0QzAwMDhGNkMwMDAwREE5RjAwNDA4MTMyMDEwMEI5MDZBMjQwRjMKKzoxMDM0RDAwMDk3NkMwMDAwNUUxNjAwNDA0Mzk5MDEwMDdDMTYyMEY2QjAKKzoxMDM0RTAwMEUwQjEwMTAwMDAwMDAwNDAzMUIzMDEwMDlEMDYyMjRGMTEKKzoxMDM0RjAwMDhGN0MwMDAwMDAwMDAwNTFGRDkzMDEwMDlGMDYyMjQwRDgKKzoxMDM1MDAwMDhGN0MwMDAwQTMwNjAwNTRGRDkzMDAwMEExMDYyMjQyMTgKKzoxMDM1MTAwMDhGN0MwMDAwMDAwMDAwNTJGRDkzMDEwMEEzMDYyMjQxQjEKKzoxMDM1MjAwMDhGN0MwMDAwMDAwMDAwNTNGRDkzMDEwMEI3MDYyMjUxN0MKKzoxMDM1MzAwMEZEN0YwMDAwMzgwNTAwNDA4MTMyMDEwMDBDMDAwMDQ4OEEKKzoxMDM1NDAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMEIyMDZBMjQwNUIKKzoxMDM1NTAwMEI1NkYwMDAwMUUwMDAwNDhCMkNCMDEwMDEwMDQwMDQ4MDcKKzoxMDM1NjAwMDk2MzAwMTAwMDAwMDAwREE5N0MwMDEwMDA0MDAwMDRCMTMKKzoxMDM1NzAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMDBFMDAwMDQ4NkYKKzoxMDM1ODAwMEIyQ0IwMTAwMjAwNDAwNDA4MTMyMDEwMDBDMDAwMDQ4NTEKKzoxMDM1OTAwMEIyQ0IwMTAwMDAwMDAwMzBCNUIzMDEwMDIwMDQwMDQwQjAKKzoxMDM1QTAwMDgxMzIwMTAwMEUwMDAwNDhCMkNCMDEwMDEwMDQwMDQwM0YKKzoxMDM1QjAwMDgxMzIwMTAwQjYwNjIyNDBCNTZGMDAwMEJBMDYwMDU0MDEKKzoxMDM1QzAwMEZEOTMwMDAwMDAwMDAwNTFGRDgzMDEwMDFDMDAwMEZFN0YKKzoxMDM1RDAwMDdGRDkwMTAwQkEwNkE2NDA4MTMyMDAwMDAwMDAwMDU1RTQKKzoxMDM1RTAwMEZEOTMwMTAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwMTIKKzoxMDM1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDM2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDM2MTAwMDgxQjIwMDAwRTc5RjAwNDA4MTMyMDEwMEM0MDYyMjVDQjUKKzoxMDM2MjAwMDFGN0MwMDAwRTM5RjAwODgxQ0IwMDAwMEU5OUYwMDVDNDUKKzoxMDM2MzAwMDFGMDAwMTAwMDAwMDJFMDU0OEIxMDEwMDAwMDAwMDQwRkQKKzoxMDM2NDAwMEUxQjEwMTAwMDQwMDJEMDM0OEIxMDEwMDAwMDAwMEYwQzkKKzoxMDM2NTAwMDNDQjAwMTAwMjgwMDAwMTQwMkM4MDEwMDAwMDAwMDAxNzUKKzoxMDM2NjAwMDM0QjAwMTAwMDAwMDJEMDUzMkIwMDEwMDIyMDAwMDA1MzkKKzoxMDM2NzAwMDBBQzgwMTAwMTAwMDAwMDM0OEM5MDEwMDAwMDAwMEY4NUEKKzoxMDM2ODAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDAwMDAwMEY4Q0MKKzoxMDM2OTAwMDBFQjAwMTAwMEMwMDAwQTQwQ0M4MDEwMEVBOUYwMDQwMUQKKzoxMDM2QTAwMDgxMzIwMTAwMDAwMDAwNDAyM0IwMDEwMDBBMDcyMjAxMUUKKzoxMDM2QjAwMDgwMzIwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAyRUE0MDIKKzoxMDM2QzAwMDgwQjAwMTAwMDAwMDAwMTA0OEMxMDEwMEQ5MDZBMzA3MjYKKzoxMDM2RDAwMDAyNkMwMDAwREEwNjY4MDExQUIwMDAwMDAwMDA2ODA3RkEKKzoxMDM2RTAwMDFBQjAwMTAwMDAwMDAwMEQwMkQwMDEwMDAwMDAwMDA1MkEKKzoxMDM2RjAwMEYwQjEwMTAwMDAwMDAwMENGMEIxMDEwMDAwMDAwMDAyNzgKKzoxMDM3MDAwMEUwQjEwMTAwMDAwMDAwMEQwQUMwMDEwMEVDMDYyMjQwRkIKKzoxMDM3MTAwMDAzNkMwMDAwRTYwNjIyNDIyMzZDMDAwMDAwMDAwMDQxMUEKKzoxMDM3MjAwMDIzQzAwMTAwMDAwMDAwNDc2MUIxMDEwMDIwMDAwMEE0OTcKKzoxMDM3MzAwMDYyREQwMTAwMjMwNzI4NDA4MTMyMDAwMEUzMDYwMDQwREIKKzoxMDM3NDAwMDgxQjIwMDAwMDAwMDAwMTA4MEMwMDEwMDAwMDAwMDQ3QUUKKzoxMDM3NTAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMEU4MDZBODQwMkMKKzoxMDM3NjAwMDIzMzAwMDAwRTM5RjAwODgxQ0IwMDAwMDIzMDcwMDQwQzYKKzoxMDM3NzAwMDgxQjIwMDAwMDAwMDAwMTA4MEMwMDEwMDAwMDAwMDQ3N0UKKzoxMDM3ODAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMEVFMDZBODQwRjYKKzoxMDM3OTAwMDIzMzAwMDAwRTM5RjAwODgxQ0IwMDAwMDIyMDAwMDE5QzUKKzoxMDM3QTAwMDQ4QzkwMTAwMDAwMDJEMTQ0OEMxMDEwMDBGMDAwMEYyQkIKKzoxMDM3QjAwMDNBODgwMTAwMDAwMDAwNDIzQkUwMDEwMDBFMDAwMDE0QzYKKzoxMDM3QzAwMDAyQzgwMTAwMDAwMDAwMUQwMkMwMDEwMEZBMDYyMzFBMTEKKzoxMDM3RDAwMDAyNTAwMDAwMDAwMDAwNDYwM0MwMDEwMDIzMDcwMDAxNjIKKzoxMDM3RTAwMDM0QzAwMDAwMEMwMDJEMUQ0OEMxMDEwMEYwMDAwMEYyQTMKKzoxMDM3RjAwMDMwODgwMTAwMDAwMDAwNDIzMUYwMDEwMDAwMDAwMDE0OTgKKzoxMDM4MDAwMDAyQjAwMTAwMDAwMDAwMUQwMkMwMDEwMDAwMDAwMDE4MEQKKzoxMDM4MTAwMDAyQzAwMTAwMDIwNzIyMUEwMjUwMDAwMDIzMDcwMDAxMjMKKzoxMDM4MjAwMDM0QzAwMDAwMjIwMDAwMTk0OEM5MDEwMDAyMDAyRDE0MTQKKzoxMDM4MzAwMDQ4QzEwMTAwMDAwMDAwRjYxNEIwMDEwMDAwMDAwMDFEQTYKKzoxMDM4NDAwMDE0RDAwMTAwMDAwMDAwMTgxNEQwMDEwMDAwMDAwMDFFNzgKKzoxMDM4NTAwMDI0QjAwMTAwMTIwMDAwMTcxMEM4MDEwMDIzMDcwMDFBNEQKKzoxMDM4NjAwMDEwQzAwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAwMEE0NjAKKzoxMDM4NzAwMDg2QjAwMTAwMDAwMDJFMTA0OEMxMDEwMDBGMDdBMzEyRkUKKzoxMDM4ODAwMDBFNkMwMDAwMTAwNzYwMDcxQUIwMDAwMDAwMDA2MDEyMDQKKzoxMDM4OTAwMDFBQjAwMTAwMDAwMDY4MEQxNjk0MDEwMEZGRkYwMDBCMzQKKzoxMDM4QTAwMDE2RDgwMTAwMDAwMDAwMDhGMEIxMDEwMDAwMDAwMDBDNzMKKzoxMDM4QjAwMEYwQjEwMTAwMDAwMDAwMDJFMEIxMDEwMDAwMDAwMDEwQzIKKzoxMDM4QzAwMDg2QzAwMTAwMDAwMDAwNDY2MUIxMDEwMDIwMDAwMDQzRjUKKzoxMDM4RDAwMDYyREQwMTAwMTcwN0E4NUMxRjEwMDAwMDQwMDcyMjBERTEKKzoxMDM4RTAwMDE0NTAwMDAwNDAwNzIyMEQyNDUwMDAwMDAwMDAwMDBEN0QKKzoxMDM4RjAwMDEwQzAwMTAwMUUwNzIyNDIyMzZDMDAwMDIzMDcwMDQxNzQKKzoxMDM5MDAwMDIzQzAwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwMkIKKzoxMDM5MTAwMDYyREQwMTAwMUYwN0E4NUMxRjAwMDAwMEUzOUYwMDg4MTQKKzoxMDM5MjAwMDFDQjAwMDAwMDAwMDAwNDAyM0IwMDEwMDNGMDdBMjBEQzIKKzoxMDM5MzAwMDBFNTAwMDAwMkUwNzIyNDYxRjdDMDAwMDAwMDAwMDQ2QUIKKzoxMDM5NDAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMDJDMDcyMkYyQzQKKzoxMDM5NTAwMDY0MDYwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNTMKKzoxMDM5NjAwMDYyREQwMTAwMjkwN0E4NDA4MTMyMDAwMEUzOUYwMDg4NDIKKzoxMDM5NzAwMDFDQjAwMDAwMjA4MDAwMDM0Njk5MDEwMDAwMDAwMDVGOTkKKzoxMDM5ODAwMEUxOTEwMTAwMDAwMDJEMDY0OEIxMDEwMDAwMDAwMEY4OUYKKzoxMDM5OTAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDMzMDcxRkYwNjgKKzoxMDM5QTAwMDBFMzAwMDAwRDMwNjAwNEMwREMwMDAwMDAwMDAyRTVGNUEKKzoxMDM5QjAwMDBGODAwMTAwRDMwNjIzMDcxNDZDMDAwMDMwMDAwMDEwQjQKKzoxMDM5QzAwMDQ4QzkwMTAwMjQwMDAwNDBGMTk5MDEwMDAwMDAwMDAzRjMKKzoxMDM5RDAwMEYwQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDE2OEQKKzoxMDM5RTAwMEYwQjEwMTAwMjQwMDAwMDAwMEM4MDEwMDAwMDAwMDQ3MDEKKzoxMDM5RjAwMDYxQjEwMTAwMjAwMDAwQTQ2MkREMDEwMDNDMDdBODQ2N0YKKzoxMDNBMDAwMDFGMTAwMDAwRDMwNjAwMDMwQ0IwMDAwMEQzMDYwMDBEMDkKKzoxMDNBMTAwMDE4QzAwMDAwNUYwN0EyNDQxRjdDMDAwMDAwMDAwMDE5Q0UKKzoxMDNBMjAwMDBBQjAwMTAwMjIwMDAwMDU0OEM5MDEwMDBBMDAyRDE0NTcKKzoxMDNBMzAwMDQ4QzEwMTAwMDIwMDIwNDBFNUIxMDEwMDA0MDAyMDQwMUYKKzoxMDNBNDAwMEU1QjEwMTAwMEQwMDJEMUQ0OEMxMDEwMDA5MDAwMEYzODIKKzoxMDNBNTAwMDM4ODgwMTAwMEQwMDIwNTBFN0IxMDEwMDA0MDAyRDQwMUUKKzoxMDNBNjAwMDNGQjAwMTAwMDAwMDAwRjQzMkIwMDEwMDA0MDAyMDQwMkIKKzoxMDNBNzAwMEUxQjEwMTAwMjIwMDAwMDU0OEM5MDEwMDAwMDAyRDE0MzkKKzoxMDNBODAwMDQ4QzEwMTAwMDIwMDAwMUQ5NEY0MDEwMDAwMDAwMDQwNDQKKzoxMDNBOTAwMDkxQjAwMTAwNTIwN0EwRkM5MDQwMDAwMDAwMDAwMDQxREUKKzoxMDNBQTAwMDkxQzAwMTAwNTAwN0EyNDE5NTUwMDAwMDAwMDAwMEE0MDEKKzoxMDNBQjAwMDk2QjAwMTAwMDQwMDJFMDU0OEIxMDEwMDAwMDAwMDQ4NDYKKzoxMDNBQzAwMEYwQjEwMTAwMDAwMDAwNEI0OEIxMDEwMDAwMDAwMDE4RjcKKzoxMDNBRDAwMDQ4QzEwMTAwMDIwMDAwMTg5NEY0MDEwMDAwMDAyRDE4RjQKKzoxMDNBRTAwMDkwQjAwMTAwNUMwN0EwRkM5MDQwMDAwMDAwMDAwMDQxODUKKzoxMDNBRjAwMDkxQzAwMTAwNUEwN0EyNDE5NTUwMDAwMDAwMDAwMDQ4MDMKKzoxMDNCMDAwMEUwQjEwMTAwMTAwMDIwNDBFNUIxMDEwMDA0MDAyRDA1RTYKKzoxMDNCMTAwMDQ4QjEwMTAwMDAwMDAwRjg4MEIwMkQwMDAwMDAwMEYwNjYKKzoxMDNCMjAwMDE2QjAyRDAwMjIwMDAwMDU0OEM5MkQwMDAwMDAwMDE0MjkKKzoxMDNCMzAwMDQ4QzEyRDAwNjQwNzQzMzAzRDA3MkMwMDAwMDAwMDlFNjMKKzoxMDNCNDAwMDg1QjAyRDAwMDAwMDFCNDEzREMzMkQwMDA0MDAyMDQyMjQKKzoxMDNCNTAwMEVDQjEyRDAwMDAwMDAwMUU4MkIwMDEwMDAyMDAyRTFERkQKKzoxMDNCNjAwMDgyQzAwMTAwMDAwMDY2MTg4MkMwMDEwMDAwMDAwMDQyMEYKKzoxMDNCNzAwMDgwQzAwMTAwNkUwN0EwNDE4MDQ0MDAwMDAwMDAwMDQxQTkKKzoxMDNCODAwMDgxQzAwMTAwMTAwMDAwNDA5MkY0MDEwMDBBMDAyRTMwQjQKKzoxMDNCOTAwMDgxODQwMTAwNzIwNzkwNDA5MjQwMDAwMDAwMDAwMDQxQzMKKzoxMDNCQTAwMDkzQzAwMTAwMDAwMDY2MjA5M0E0MDEwMDAwMDAwMDFERTYKKzoxMDNCQjAwMDQ4QzEwMTAwMDQwMDIwMTlFOEIxMDEwMDAwMDAwMDFFMDYKKzoxMDNCQzAwMDE2QzAwMTAwNzgwN0EwMTkxNjQ0MDAwMDAwMDAwMDQxNEIKKzoxMDNCRDAwMDE3QzAwMTAwMEQwMDJGMUUzMkMwMDEwMDdEMDdBMjQwNUEKKzoxMDNCRTAwMDE1NkMwMDAwN0MwN0EwMUMxNjQwMDAwMDAwMDAwMDQxN0UKKzoxMDNCRjAwMDE3QzAwMTAwMDAwMDYzRjMzODk0MDEwMDEwMDAwMDA1QjUKKzoxMDNDMDAwMDQ4QzkwMTAwMDQwMDJFMUU5OEIwMDEwMDAwMDA2MDFBOEYKKzoxMDNDMTAwMDk4QzAwMTAwMEMwMDIwNDBFMUIxMDEwMDhCMDcyMjQ2NTIKKzoxMDNDMjAwMDFGN0MwMDAwMDAwMDAwNDYxRjgwMDEwMDMwODAwMDEwNTMKKzoxMDNDMzAwMDQyQzkwMTAwODkwNzIyRjI2NDA2MDAwMDAwMDAwMDQ3MjMKKzoxMDNDNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDg2MDdBODQwNUMKKzoxMDNDNTAwMDgxMzIwMDAwRTM5RjAwODgxQ0IwMDAwMDIwODAwMDAzMzgKKzoxMDNDNjAwMDQ2OTkwMTAwMDAwMDAwNUZFMTkxMDEwMDMwODAwMDEwRTIKKzoxMDNDNzAwMDQ0QzkwMTAwMTIwMDAwMUFGMEM5MDEwMDAwMDAwMDE3MzkKKzoxMDNDODAwMEYwQjEwMTAwMTAwMDAwMDVFMEM5MDEwMDMwMDAwMDEwOTMKKzoxMDNDOTAwMDgwQzgwMTAwMDAwMDAwNDQ2MUIxMDEwMDIwMDAwMDQwMjQKKzoxMDNDQTAwMDYyREQwMTAwOTEwN0E4NDA4MTMyMDAwMDlCMDcyMjVDODEKKzoxMDNDQjAwMDFGN0MwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAyRDEwQTgKKzoxMDNDQzAwMDQ4QzEwMTAwOUIwNzIyRjI2NDA2MDAwMDAwMDAwMDQ2ODQKKzoxMDNDRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk4MDdBODQwQkEKKzoxMDNDRTAwMDgxMzIwMDAwRTM5RjAwODgxQ0IwMDAwMEVCOUYwMDVDNjUKKzoxMDNDRjAwMDFGMDAwMTAwMjAwMDJGMDU0OEIxMDEwMDAwMDAwMDBCNEIKKzoxMDNEMDAwMEU0QjEwMTAwMDAwMDAwNTAxN0YwMDEwMEExMDc5MEYyOUIKKzoxMDNEMTAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA2NjIwQUUKKzoxMDNEMjAwMDE3QTQwMTAwMTAwMDAwMTQyQUM4MDEwMDAwMDAwMDFEQTMKKzoxMDNEMzAwMDJBQzAwMTAwMDAwMDAwNTAyQkUwMDEwMDAwMDAwMEYyNEEKKzoxMDNENDAwMDJBOTQwMTAwMzA4MDAwMTA0MkM5MDEwMEFDMDcyMkYyMjEKKzoxMDNENTAwMDY0MDYwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwNTIKKzoxMDNENjAwMDYyREQwMTAwQTkwN0E4NDA4MTMyMDAwMEUzOUYwMDg4QkUKKzoxMDNENzAwMDFDQjAwMDAwMDA4MDAwMTcxMERDMDEwMEM5MDcyMjQwQzEKKzoxMDNEODAwMDE1NkMwMDAwQjQwN0EyNDQxRjdDMDAwMDAwMDAwMDQ0MzIKKzoxMDNEOTAwMDFGOTAwMTAwQjMwNzIyOUYxMzZDMDAwMDAyMDAwMDg4RUYKKzoxMDNEQTAwMDFDQ0MwMTAwRTQ5RjAwNDA4MUIyMDAwMDAwMDAwMDQxRjMKKzoxMDNEQjAwMDNGQzMwMTAwRTY5RjAwNDA4MTMyMDEwMEI3MDdBMjQxRTYKKzoxMDNEQzAwMDg3N0MwMDAwMDAwMDAwMUUzRUMwMDEwMEM5MDcyMjQwQTEKKzoxMDNERDAwMDE1NkMwMDAwQkEwNzIwMUUxNDZDMDAwMDAwMDAwMDBBRDkKKzoxMDNERTAwMDNDQjAwMTAwRTU5RjAwMUUyNDMwMDEwMEJGMDcyMjA4RkYKKzoxMDNERjAwMDJFMzAwMDAwMDAwMDAwNTIxMUMwMDEwMDAwMDAwMDFBMjcKKzoxMDNFMDAwMDEwQzAwMTAwMjMwNzAwNDAxN0IwMDAwMEU0OUYwMDg4QTUKKzoxMDNFMTAwMDFDQjAwMDAwRTU5RjAwNDA4MTMyMDEwMEJDMDdBMjA4RjEKKzoxMDNFMjAwMDJFMzAwMDAwODA4MDAwQTYwNEIwMDEwMDA2MDAwMDQwOTMKKzoxMDNFMzAwMDg3OTgwMTAwMDA4MDAwMDM0NDk5MDEwMDA0MDAyMjA0RDcKKzoxMDNFNDAwMEUwMzEwMDAwRTg5RjAwMUY4QzMwMDEwMDAwMDAwMDQwQkUKKzoxMDNFNTAwMDBGQjAwMTAwRTI5RjAwNUMxRjkwMDAwMDAwODAwMDAzOTMKKzoxMDNFNjAwMDQ0OTkwMTAwMDQwMDIyMDRFMDMxMDAwMEU2OUYwMDQwNzQKKzoxMDNFNzAwMDgxMzIwMTAwQ0UwN0EyNDE4NzdDMDAwMENGMDcwMDFFREYKKzoxMDNFODAwMDNFQzAwMDAwMDAwMDAwMUY4Q0IwMDEwMDAwMDAwMDQwOTgKKzoxMDNFOTAwMDA1QjAwMTAwRTg5RjAwNDAwRjMwMDEwMEUyOUYwMDVDODgKKzoxMDNFQTAwMDFGOTAwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDNFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDNFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDNFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDNFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDNFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDNGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDNGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDNGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDNGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDNGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDNGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDNGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDNGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDNGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDNGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDNGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDNGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDNGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMEY3MDcwMEJDOEQKKzoxMDNGRDAwMDgwQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwRjYKKzoxMDNGRTAwMDgxQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwRTUKKzoxMDNGRjAwMDgxQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwRDUKKzoxMDQwMDAwMDgxQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwQzQKKzoxMDQwMTAwMDgxQjIwMDAwMzE4MDAwNDA4MUIyMDAwMDM0ODAwMDQwNTUKKzoxMDQwMjAwMDgxQjIwMDAwMzU4MDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDQwMzAwMDgxQjIwMDAwMUI4MDgxODA4MDMyMDAwMEU3ODdBMjQwQUYKKzoxMDQwNDAwMDkxNkYwMDAwMDAwMDAwNEM5MEIzMDEwMDVDOTUyRUEyMUYKKzoxMDQwNTAwMDgwQjAwMTAwRkYwMDAwODBGNDg5MDEwMDkwOTUyQUM4MUIKKzoxMDQwNjAwMEU1QjEwMTAwMDAwMDAwQTFGMEIxMDEwMDAwMDAwMDQwMzYKKzoxMDQwNzAwMEYwQjEwMTAwMDAwMDAwQTRGMEIxMDEwMDAwMDAwMEQwODgKKzoxMDQwODAwMEYwQjEwMTAwMDAwMDAwRDFGMEIxMDEwMDAwMDAwMEQyNDkKKzoxMDQwOTAwMEYwQjEwMTAwMDAwMDAwNENGMEIxMDEwMDAwMDAwMEQ0QkMKKzoxMDQwQTAwMEYwQjEwMTAwMDAwMDAwRDNGMEIxMDEwMDAwMDAwMEVFMEIKKzoxMDQwQjAwMEYwQjEwMTAwMDAwMDAwNEVGMEIxMDEwMDAwMDAwMDQwMkUKKzoxMDQwQzAwMDQ0QjEwMTAwMTg4MDExODE5ODMwMDAwMDAwMDA1MTQwNzcKKzoxMDQwRDAwMDgxQjIwMTAwMUE4MDExODI5ODMwMDAwMDAwMDA1MjQwMjUKKzoxMDQwRTAwMDgxQjIwMTAwRTc4NzAwNDhGRDkzMDAwMEI2MDMwMDQwNUQKKzoxMDQwRjAwMEExOTkwMTAwMjM4MEEyNDJGRDdGMDAwMDIwODAwMDgwNjIKKzoxMDQxMDAwMDgwMzIwMDAwMjI4MDExODE4MjMwMDAwMDIyODA1MTQwRTQKKzoxMDQxMTAwMDgxQjIwMDAwMjI4MDExODI4MjMwMDAwMDIyODA1MjQwNTEKKzoxMDQxMjAwMDgxQjIwMDAwMkM4MDAwNDhGRDkzMDAwMDI3ODAwMDgwQjEKKzoxMDQxMzAwMDgwMzIwMDAwMjY4MEEyNTMwNzdDMDAwMDAwMDA1MTUzMEIKKzoxMDQxNDAwMDA3OTAwMTAwMkE4MDAwNTIwNzkwMDAwMDI5ODBBMjUyQTcKKzoxMDQxNTAwMDA3N0MwMDAwMDAwMDUyNTIwNzkwMDEwMDAwMDAwMDUzNEQKKzoxMDQxNjAwMDA3OTAwMTAwMDAwMDAwNDhGRDkzMDEwMDAwMDAwMDQ2OTgKKzoxMDQxNzAwMEYzOTMwMTAwNUM5NTJFQTI1MkIzMDEwMEZGMDAwMDgwNzIKKzoxMDQxODAwMEY0ODkwMTAwMDAwMDAwNENFNEIxMDEwMDAwMDAwMEE5MjYKKzoxMDQxOTAwMDQ1QjEwMTAwMzA4MDAwNEM4MEIyMDAwMDAwMDA0NTQwNzUKKzoxMDQxQTAwMDgxQjIwMTAwMDAwMDU1NDA4MUIyMDEwMEM2ODIwNTQwODUKKzoxMDQxQjAwMDQ5QjEwMDAwQzY4MjA1NDA0OUIxMDAwMDAwMDAwNTQwMzkKKzoxMDQxQzAwMDQ5QjEwMTAwNEMwMTAwNDA4MTMyMDEwMDAwMDAwMDRCNjgKKzoxMDQxRDAwMERFQjIwMTAwMDAwMDAwNDBGRDkzMDEwMDAwMDAwMDQ4MzUKKzoxMDQxRTAwMEZEODMwMTAwMDIwMDAwNDA5QjlCMDEwMDAwMDAwMEE1MzAKKzoxMDQxRjAwMDlDQjMwMTAwNDgwMzAwNDA4MTMyMDEwMDU4OTUyMDQ0REYKKzoxMDQyMDAwMEUwQjEwMTAwMDQ5NDAwNDA0Mzk5MDEwMDAwMDAwMEYyNzUKKzoxMDQyMTAwMDI0QjEwMTAwMDAwQzAwRUU5Njg4MDEwMDAwMDAwMDRBNjUKKzoxMDQyMjAwMDk3RjAwMTAwNDQ4MEEyNDM5NzZDMDAwMDAwMDAwMDQyMTgKKzoxMDQyMzAwMEZEOTMwMTAwMDBDMDAwQTYzNkIxMDEwMEQwMTQwMDQwN0IKKzoxMDQyNDAwMDQ3OTkwMTAwMDUwMDAwNDBGNTk5MDEwMDAwMzgwMDQwNDEKKzoxMDQyNTAwMEY1OTkwMTAwMDAwNjAwNDBGNTk5MDEwMDAzMDAwMDQwQjcKKzoxMDQyNjAwMEY1OTkwMTAwMDUxMDAwNDBGNTk5MDEwMDAyMDkwMDQwOTAKKzoxMDQyNzAwMEY1OTkwMTAwMDQwMDAwNDBGNTk5MDEwMDYwMDMwMDQwMzkKKzoxMDQyODAwMDgxMzIwMTAwODgwMzAwNDA4MTMyMDEwMEEwMDMwMDQwMTgKKzoxMDQyOTAwMDgxMzIwMTAwQjk4MjAwNDA4MTMyMDEwMEIxODIwMDQwQzgKKzoxMDQyQTAwMDgxMzIwMTAwNjA5NTIwNDBFMUIxMDEwMDcwOTUyMDQwMEQKKzoxMDQyQjAwMEUxQjEwMTAwMDAwMDAwNDlERDkxMDEwMDAwMDAwMDQwNzMKKzoxMDQyQzAwMDkxQjMwMTAwMDAwMDAwNDA3QkIzMDEwMEEwOTgwMDQwQzIKKzoxMDQyRDAwMDgxMzIwMTAwMDAwMDAwNDA4NUIzMDEwMDVDOTUyMDQwNjAKKzoxMDQyRTAwMEUxQjEwMTAwM0M4MjAwNDA4MTMyMDEwMDkwMDYwMDQwQjMKKzoxMDQyRjAwMDgxMzIwMTAwMDAwMDAwNUYyRjgxMDEwMEEyODEwMDQwOTcKKzoxMDQzMDAwMDgxMzIwMTAwQTU5ODAwNDA4MTMyMDEwMDAwMDA0NTQwNDMKKzoxMDQzMTAwMDgxQjIwMTAwMDAwMDU1NDA4MUIyMDEwMDAxODMwMDQwREMKKzoxMDQzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDQzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDQzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDQzNTAwMDgxQjIwMDAwMjgwMDAwNDA0Nzk5MDEwMEM2ODIwMDQxNTgKKzoxMDQzNjAwMEUxQzEwMDAwNzgxODAwNDA0OTk5MDEwMDE5MDUyMjU0NjQKKzoxMDQzNzAwMDgxN0MwMDAwNkM4MDQyNDA4MTMyMDAwMDAwODIwMEI0RTkKKzoxMDQzODAwMDY5REYwMTAwMDAwMDFBNDQ5MzkzMDEwMDI4MDAwMDQwRjcKKzoxMDQzOTAwMDQ3OTkwMTAwMTgwNTAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDQzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDQzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDQzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDQzRDAwMDgxQjIwMDAwNTU4MjAwNDA4MTMyMDEwMDdEODAyMjQwODAKKzoxMDQzRTAwMDk3NkMwMDAwN0E4MDQyNDA4MTMyMDAwMDAwMDAwMDRGNEMKKzoxMDQzRjAwMDY5OTMwMTAwNDM4MTAwNTg2OTkzMDAwMDU0MTYwMDQwRkUKKzoxMDQ0MDAwMDQ3OTkwMTAwMDAwMDAwRkVGNEIxMDEwMDgwMDUwMDQwNjIKKzoxMDQ0MTAwMDgxQjIwMDAwODA4MDQyNDA4MTMyMDAwMDAwMDAwMDRFRTYKKzoxMDQ0MjAwMDY5OTMwMTAwNDM4MTAwNTg2OTkzMDAwMDQwMTYwMDQwRTEKKzoxMDQ0MzAwMDQ1OTkwMTAwNDAwNTAwNDA0OTMxMDEwMEY2MTUwMDQwNTIKKzoxMDQ0NDAwMDQzOTkwMTAwNUMxNjAwNDA0NTk5MDEwMDAwMDA2RUZBOTYKKzoxMDQ0NTAwMDhFQjAwMTAwQzEwNTAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDQ0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDQ0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDQ0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDQ0OTAwMDgxQjIwMDAwOTY4MDAwNDA4MUIyMDAwMDU1ODIwMDQwNDkKKzoxMDQ0QTAwMDgxMzIwMTAwOTY4MDIyNDA5NzZDMDAwMDkzODA0MjQwNDgKKzoxMDQ0QjAwMDgxMzIwMDAwMDAwMDAwNEY2OTkzMDEwMDQzODEwMDU4RTEKKzoxMDQ0QzAwMDY5OTMwMDAwMzgwNTAwNDA4MTMyMDEwMDFFMDAwMDQ4NTkKKzoxMDQ0RDAwMEIyQ0IwMTAwRDAwNTAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDQ0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDQ0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDQ1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDQ1MTAwMDgxQjIwMDAwODMwMjAwNDA4MUIyMDAwMEI4MDIwMDQwNzYKKzoxMDQ1MjAwMDgxQjIwMDAwRDQ5RjAwNDA4MUIyMDAwMEQ1OUYwMDQwQkUKKzoxMDQ1MzAwMDgxQjIwMDAwRDY5RjAwNDA4MUIyMDAwMEQ3OUYwMDQwQUEKKzoxMDQ1NDAwMDgxQjIwMDAwNzIwMTAwNDE4MUMwMDAwMDU1MDE1MTQ5NTMKKzoxMDQ1NTAwMEZEOTMwMDAwNTUwMTUyNEFGRDkzMDAwMDU1MDE1NTQ5NTUKKzoxMDQ1NjAwMEZEODMwMDAwNTUwMTU2NEFGRDgzMDAwMDUwMDE5MTgxRjIKKzoxMDQ1NzAwMDgwMzAwMDAwNTUwMTQ1NDA4MUIyMDAwMDUwMDE5MTgyMTkKKzoxMDQ1ODAwMDgwMzAwMDAwNTUwMTQ2NDA4MUIyMDAwMDAwMDAwMDQwMkMKKzoxMDQ1OTAwMDg5QjAwMTAwMDAwMDAwRjg4MEIwMDEwMDAwMDAwMEYwQzgKKzoxMDQ1QTAwMDE2QjAwMTAwMjIwMDAwMDU0OEM5MDEwMDAwMDAwMDE0RjcKKzoxMDQ1QjAwMDQ4QzEwMTAwQjQ4MDQzMzAzRDA3MDAwMDAwMDAwMDlFNjgKKzoxMDQ1QzAwMDg1QjAwMTAwMDAwMDFCNDEzREMzMDEwMDA0MDAyMDQyRjIKKzoxMDQ1RDAwMEVDQjEwMTAwMDAwMEEyNDA5MTZGMDEwMDAwMDAwMDQwMUEKKzoxMDQ1RTAwMDQ5QjEwMTAwQUUwMzAwQ0JBM0M5MDEwMDAwMDAwMDIwQzcKKzoxMDQ1RjAwMDQ2QjEwMTAwQzQ4MEEyNDBFMTZEMDAwMDAwMDAwMEQyN0QKKzoxMDQ2MDAwMEYxQjEwMTAwMDAwMDAwRDNGMUIxMDEwMDAwMDAwMDQyNEYKKzoxMDQ2MTAwMEYwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDIwNjAKKzoxMDQ2MjAwMDYyREQwMTAwMDAwMEE4RDBFMUIxMDAwMEMxODAwMDQwQkYKKzoxMDQ2MzAwMDgxQjIwMDAwMDAwMDAwQTg5OEIwMDEwMDA0ODAwMDQwOTIKKzoxMDQ2NDAwMDhCQjMwMDAwQjEwMzAwNDBBMTk5MDEwMEM5ODBBMjQyRDAKKzoxMDQ2NTAwMDk3NkYwMDAwMDAwMDAwNDVBMUMxMDEwMDAwMDAwMDAwQUMKKzoxMDQ2NjAwMDgwQjAwMTAwMDAwMEEyMDQ4MDk0MDAwMDgwMTUzRjQyNDkKKzoxMDQ2NzAwMDk3RTMwMTAwMDAwMDAwNDA0OUIxMDEwMDAwMDA2MDAzMjEKKzoxMDQ2ODAwMDAyOTQwMTAwMDAwMDAwNDAwN0IwMDEwMDA0MDAwMENCQ0MKKzoxMDQ2OTAwMDk5Q0IwMTAwMDAwMDAwQ0NGMzgzMDEwMEQzODBBMjQyM0IKKzoxMDQ2QTAwMDk3NkYwMDAwMDAwMDAwQ0JGMzkzMDEwMEFFMDMwMENCMzYKKzoxMDQ2QjAwMEEzQzkwMTAwMDAwMDAwMjA0NEIxMDEwMDAwMDAwMDQ0MzMKKzoxMDQ2QzAwMEYxQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDA0QTEKKzoxMDQ2RDAwMEYwQjEwMTAwMDAwMDAwQTFFMEIxMDEwMDA1MDAwMDQwQzAKKzoxMDQ2RTAwMDYxOTkwMTAwMjAwMDAwMjA2MkREMDEwMERBODBBODQwMEQKKzoxMDQ2RjAwMDgxMzIwMDAwRjkwMjAwMjA0MjMxMDEwMDAwMDBBMjQxOTUKKzoxMDQ3MDAwMDA1NkMwMTAwMDAwMDgwQ0JEQjkxMDEwMDAwMDAxOTQxMjUKKzoxMDQ3MTAwMDhCQjMwMTAwNjAwMDAwNDA2MTk5MDEwMEUwODBBOEIxMDYKKzoxMDQ3MjAwMDhDMzMwMDAwNjAwMDAwNDA2MTk5MDEwMEUyODBBOEIxNzQKKzoxMDQ3MzAwMDk0MzMwMDAwRTg4MDE0QzY4MTMyMDAwMDE4MDAwMEM2REYKKzoxMDQ3NDAwMDgzRjQwMTAwMjI4MzIyNEY4MzA0MDAwMEM0ODAwMDQwRDAKKzoxMDQ3NTAwMDgxQjIwMDAwRkYwMTAwQzY4MTg4MDEwMDAwMDAwMEM2OTAKKzoxMDQ3NjAwMDk3QTMwMTAwQzQ4MDFGNUM5NzUzMDAwMDZEODIxRUM2OTIKKzoxMDQ3NzAwMDgxMzIwMDAwRjI4MDIyNDhGRDdGMDAwMEYyODAyMjU4NDIKKzoxMDQ3ODAwMDgxNkMwMDAwRjI4MDIyNDg4MTZDMDAwMEMwMDAwMDQwNzMKKzoxMDQ3OTAwMDg0Q0MwMTAwRjI4MDlGNDI4MDMyMDAwMDIyODMwMDQwREUKKzoxMDQ3QTAwMDgxQjIwMDAwQzQ4MEEyQzY4RjA2MDAwMEM0ODAxRUM2NkQKKzoxMDQ3QjAwMDgxMzIwMDAwMDAwMDJGNDM4MUYwMDEwMEY2ODAwMDQwQUMKKzoxMDQ3QzAwMDEwQzkwMDAwNDQ4MTAwNDA4MUIyMDAwMDdFODEwMDQwOTkKKzoxMDQ3RDAwMDgxQjIwMDAwMzk4MjAwQ0E2M0IzMDAwMDc1ODEwMDQwRDUKKzoxMDQ3RTAwMDgxQjIwMDAwNTU4MTAwNEQ4M0IwMDAwMDYwODEwMDRFMTEKKzoxMDQ3RjAwMDYxQjEwMDAwNEM4MTAwNDA4NUIwMDAwMDU1ODEwMDRDNDMKKzoxMDQ4MDAwMDgzQjAwMDAwMkU4MTAwNDA4NUIwMDAwMEY4ODEwMDQwOTgKKzoxMDQ4MTAwMDQ5QjEwMDAwODY4MTAwNDBDMUIxMDAwMEY0ODEwMDQwMzAKKzoxMDQ4MjAwMDgxQjIwMDAwNEM4MTAwNDA4NUIwMDAwMEYwMDMwMDQwRTAKKzoxMDQ4MzAwMDQ5QjEwMDAwMjI4MzAwQ0E5QkIzMDAwMDkwODEwMDQwNzAKKzoxMDQ4NDAwMEMxQjEwMDAwOTQ4MTAwNDBDMUIxMDAwMDlCODEwMDQwRDMKKzoxMDQ4NTAwMEMxQjEwMDAwOUM4MTAwNDBDMUIxMDAwMDlEODEwMDQwQjkKKzoxMDQ4NjAwMEMxQjEwMDAwOUU4MTAwNDBDMUIxMDAwMDlGODEwMDQwQTUKKzoxMDQ4NzAwMDgxQjAwMDAwOUY4MTAwNDE4MUIwMDAwMDJEODIwMDQwODYKKzoxMDQ4ODAwMDgxQjIwMDAwQUU4MjAwQkJBQkIzMDAwMDNBODIwMENBMjYKKzoxMDQ4OTAwMENGQjMwMDAwQzgwMzAwNDA0OUIxMDAwMEU4MDMwMDQwNjYKKzoxMDQ4QTAwMDgxQjIwMDAwQzQ4MDAwNDA4MUIyMDAwMDIyODMwMDQwMzkKKzoxMDQ4QjAwMDgxQjIwMDAwRTAwMzAwNDA4MUIyMDAwMDIyODMwMENBMDAKKzoxMDQ4QzAwMDc3QjMwMDAwNTY4MTAwNEQ4M0IwMDAwMDVFODEwMDRFM0EKKzoxMDQ4RDAwMDYxQjEwMDAwNEM4MTAwQkI4NUIwMDAwMDU2ODEwMDRDRTYKKzoxMDQ4RTAwMDgzQjAwMDAwNEM4MTAwQkI4NUIwMDAwMDJFODEwMEJCNkUKKzoxMDQ4RjAwMDg1QjAwMDAwMjA4MTAwNDA4MUIyMDAwMDIyODMwMENBMDAKKzoxMDQ5MDAwMDREQjMwMDAwNzAwNTAwNDA0OUIxMDAwMEEwMDUwMDQwMTMKKzoxMDQ5MTAwMDQ5QjEwMDAwMjY4MTIyNDI4RjZGMDAwMDI4ODEyMjQxODgKKzoxMDQ5MjAwMDhGNkYwMDAwMkE4MTFFQ0E4MTMyMDAwMDJDODExRkNBQUQKKzoxMDQ5MzAwMDgxMzIwMDAwMDAwMDAwQ0FDOUIxMDEwMDIyODMwMDQyOTgKKzoxMDQ5NDAwMDhGQjMwMDAwMDAwMDAwQ0FDREIxMDEwMDIyODMwMDQxRjYKKzoxMDQ5NTAwMDhGQjMwMDAwMDAwMDAwQ0FDRkIxMDEwMDIyODMwMDQwRTUKKzoxMDQ5NjAwMDhGQjMwMDAwMDA4MTAwQTZDNkIxMDEwMDIyODMwMDQwODEKKzoxMDQ5NzAwMDgxQjIwMDAwMDA4MDAwQTZDNkIxMDEwMDIyODMwMDQwODEKKzoxMDQ5ODAwMDhGQjMwMDAwNzgxODAwNDA0OTk5MDEwMDEwMDAyRjlDNTcKKzoxMDQ5OTAwMDg5QjAwMTAwNDY4MTAwNDAzOTMzMDEwMDE4MDAyRjlCODcKKzoxMDQ5QTAwMDg5QjAwMTAwNDY4MTAwNDAzNzMzMDEwMDAwMDAyRjlBOTIKKzoxMDQ5QjAwMDg5QjAwMTAwNDY4MTAwNDAzNTMzMDEwMDA4MDAyRjk5N0QKKzoxMDQ5QzAwMDg5QjAwMTAwNDY4MTAwNDAzMzMzMDEwMDAwODAwMEFFMTEKKzoxMDQ5RDAwMDQ3QzkwMTAwQzQ4MEEyNDBFMTZEMDAwMDgwMDAwMDQwOTIKKzoxMDQ5RTAwMEYxOTkwMTAwMDAwMDAwQ0FGMUIxMDEwMDAwMDAwMDQyOEQKKzoxMDQ5RjAwMEYwQjEwMTAwNDAxODAwNDBFMTk5MDEwMDAwMDAwMDQ1QkQKKzoxMDRBMDAwMDYxQjEwMTAwMjAwMDAwQUU2M0REMDEwMDQxODEyODQwNUEKKzoxMDRBMTAwMDgxMzIwMDAwM0U4MTAwNDA4MUIyMDAwMDQxODE0MjQwNkQKKzoxMDRBMjAwMDgxMzIwMDAwMDAwMDAwNUM2OTkzMDEwMDIyODMxQTQ0NzcKKzoxMDRBMzAwMDkzOTMwMDAwNDQ4MTQyNDA4MTMyMDAwMDQzODEwMDU4M0EKKzoxMDRBNDAwMDY5OTMwMDAwMDAwMDAwNDRGMEQxMDEwMDAwMDBBNDQwODAKKzoxMDRBNTAwMDgxQjIwMDAwNEI4MUEyNDBFMTZEMDAwMDAwMDAwMDQ0RTMKKzoxMDRBNjAwMDQ1RDEwMTAwMDAwMDgwNDBFMUIxMDEwMDAwMDA4MDQxMUIKKzoxMDRBNzAwMEUxRDEwMTAwNEM4MTM3NUM2MTMxMDAwMDAwMDAwMDQyNEYKKzoxMDRBODAwMDYyQjEwMTAwNTI4MTI4NDA4MTMyMDAwMDREODEyMjVDRDgKKzoxMDRBOTAwMDc3N0QwMDAwQzQ4MDE3NDA4MUIyMDAwMDREODEwMDQwNDYKKzoxMDRBQTAwMDgxQjIwMDAwMDAwMDAwQ0E2M0IxMDEwMDUyODFBODQwMzkKKzoxMDRBQjAwMDgxMzIwMDAwMjI4MzE3NDA4MUIyMDAwMDU3ODEwMDQwRkMKKzoxMDRBQzAwMDgxQjAwMDAwNTc4MTAwQkI4MUIwMDAwMDAwMDAwMDQxQjAKKzoxMDRBRDAwMDYwQjEwMTAwQzQ4MEEyNDE3NjdEMDAwMDAwMDAwMDQwNkEKKzoxMDRBRTAwMDYyQjEwMTAwNTk4MUE4NDA4MTMyMDAwMDAwMDAwMENBNzMKKzoxMDRBRjAwMDYzQjEwMTAwMjI4MzI4NDA4MTMyMDAwMDVCODEwMDQwQzUKKzoxMDRCMDAwMDgxQjIwMDAwNTA5NTAwNDA0Nzk5MDEwMDYxODEwMEJCQ0YKKzoxMDRCMTAwMDg3QjAwMDAwNTA5NTJGNDA4N0IwMDEwMDY1ODEyMjQwOEEKKzoxMDRCMjAwMDk1N0YwMDAwQzQ4MEEyNDBFMTZEMDAwMEM0ODAyMjQwNTcKKzoxMDRCMzAwMDk1NkYwMDAwMjI4MzYwNDA5NTgzMDAwMDAyMDAyREYwRjUKKzoxMDRCNDAwMDg0QjAwMTAwQzQ4MDIyNDA4NTZDMDAwMEM0ODBBMjQwNzMKKzoxMDRCNTAwMDg1N0MwMDAwQzQ4MEEyNEU3NzdEMDAwMDY5ODEzNjQwQ0MKKzoxMDRCNjAwMDgxMzIwMDAwMDAwMDAwNDI2MkIxMDEwMDZBODFBODQwNjkKKzoxMDRCNzAwMDgxMzIwMDAwMDAwMDAwNDM2MkIxMDEwMDZDODFBODQwNTYKKzoxMDRCODAwMDgxMzIwMDAwMDAwMDAwQ0E2M0IxMDEwMDZFODFBODQwQkMKKzoxMDRCOTAwMDgxMzIwMDAwMDAwMDE2NDA4MUIyMDEwMDc0ODEyMjQxODAKKzoxMDRCQTAwMDQzNTEwMDAwMDAwODAwQ0E5NUNCMDEwMDY4ODEwMDQxMTQKKzoxMDRCQjAwMDg1QzAwMDAwMjI4MzAwNDBFMUIxMDAwMDc3ODFBMjQyNUQKKzoxMDRCQzAwMDY3NkYwMDAwMDAwMDAwNDE2N0IzMDEwMDc3ODE0MjQwMzkKKzoxMDRCRDAwMDgxMzIwMDAwMDAwMDAwNDA2NUIzMDEwMDAwMDAwMDQwODkKKzoxMDRCRTAwMDkzODMwMTAwMDAwMDFBQ0E2OTk3MDEwMDIyODMyNjQwQkUKKzoxMDRCRjAwMDgxMzIwMDAwN0M4MTQyNDA4MTMyMDAwMDIyODMxQTQ0Q0QKKzoxMDRDMDAwMDkzOTMwMDAwQzQ4MDIwNDM5NTZGMDAwMDIyODM4MENBRTQKKzoxMDRDMTAwMDY3MzMwMDAwMjI4MzIyNDA2NTZGMDAwMEM0ODBBMjQ4RjEKKzoxMDRDMjAwMERCN0QwMDAwMjI4MzAwNkZEQjkxMDAwMDg1MDAwMDQwRTcKKzoxMDRDMzAwMDgxMzIwMTAwMzU4MDIyNDA4MDMyMDAwMDIyODMwMDQwMTIKKzoxMDRDNDAwMDgxQjIwMDAwMDAwMDAwNTg5NTkzMDEwMDAwMDAwMDVGNTEKKzoxMDRDNTAwMDk1OTMwMTAwOEM4MUEyNDQyMTZGMDAwMDAwMDAwMDVGNDkKKzoxMDRDNjAwMDk1ODMwMTAwMDAwMDAwNUU5NTkzMDEwMDAwMDAwMDU3NEQKKzoxMDRDNzAwMDk1OTMwMTAwMDAwMDAwQ0FDM0IxMDEwMDhGODEyMjVCM0YKKzoxMDRDODAwMDk1N0YwMDAwMDAwMDAwNEJGRDkzMDEwMDIyODMwMDQwNEYKKzoxMDRDOTAwMDgxQjIwMDAwMUJGRDAwQ0E5NTlCMDEwMDBEMDEwMENBRjYKKzoxMDRDQTAwMEM1MzEwMTAwMDAwMDAwNUY5NTgzMDEwMDIyODMwMENBMjYKKzoxMDRDQjAwMEM1QjEwMDAwREY2RjAwQ0E5NTlCMDEwMDAwMDAwMDU1RTAKKzoxMDRDQzAwMDk1OTMwMTAwMDAwMDAwQ0FDN0IxMDEwMDIyODMyMjVGNTIKKzoxMDRDRDAwMDk1N0YwMDAwMEQwMTAwNDA4MTMyMDEwMDAwMDAwMDVGNUYKKzoxMDRDRTAwMDk1ODMwMTAwMjI4MzAwQ0FDN0IxMDAwMDIyODMwMENBNTUKKzoxMDRDRjAwMEM5QjEwMDAwMjI4MzAwQ0FDQkIxMDAwMDIyODMwMENBRTAKKzoxMDREMDAwMENEQjEwMDAwMjI4MzAwQ0FDRkIxMDAwMDAwMDAyRTQyQzYKKzoxMDREMTAwMDgxRTAwMTAwOTgxNDAwNDA0OEM5MDEwMDIyODMwMENBQzQKKzoxMDREMjAwMEUxQjEwMDAwMDAwMDAwNDAwOUIxMDEwMDIwMDAwMEE2MzAKKzoxMDREMzAwMDgyQjAwMTAwQTQ4MUEyNUUwQjdEMDAwMDAwODAwMDQxRDIKKzoxMDRENDAwMDA4OTkwMTAwQTY4MUEyNUUwQjdEMDAwMDIwODAwMEE2Q0MKKzoxMDRENTAwMDA4QjEwMTAwQTg4MTlGODU4MjMwMDAwMDAwMDAwMDMwNkEKKzoxMDRENjAwMDgzODQwMTAwREQ4MTIyMzA4MzZDMDAwMEE3ODFBMjRGODMKKzoxMDRENzAwMDBCN0QwMDAwMDAwMDAwNDEyMUIzMDEwMDAyODAwMEE2NkQKKzoxMDREODAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDEwMDAwMDQxMDEKKzoxMDREOTAwMDg0RTQwMTAwMDM4MDAwQTY4MkIwMDEwMDI4ODIwMDQwNjQKKzoxMDREQTAwMDgxMzIwMTAwRjBGRjAwNDE4Njg4MDEwMDAwMDAwMDQzQ0QKKzoxMDREQjAwMDg0OTQwMTAwMEYwMDAwQTY4NkIwMDEwMDEwQzQwMDQzRDcKKzoxMDREQzAwMDg2OTgwMTAwQkQ4MUEyNDM4NDZDMDAwMDAwMDAwMDQzNkUKKzoxMDRERDAwMDIxQjMwMTAwMjAwMDAwQTY4MkIwMDEwMDFDMDAwMDQxQTgKKzoxMDRERTAwMDgyREMwMTAwQkE4MUEyNUUwQjdEMDAwMDA0MDAwMDQxNUMKKzoxMDRERjAwMDA4OTkwMTAwQ0Y4MTAwNDA4MUIyMDAwMDQxMDEwMEE2NjYKKzoxMDRFMDAwMDg2QjAwMTAwNTAwQzAwNDM4Njk4MDEwMEMyODFBMjQzODUKKzoxMDRFMTAwMDg0NkMwMDAwMDAwMDAwNDEyMUIzMDEwMENGODEwMDQwRkMKKzoxMDRFMjAwMDgxQjIwMDAwNDEwMTAwQTY4NkIwMDEwMDYwMEMwMDQzODEKKzoxMDRFMzAwMDg2OTgwMTAwQ0Y4MUEyNDM4NDZDMDAwMDAwMDAwMDQyRUMKKzoxMDRFNDAwMDIxQjMwMTAwMTg4MDAwQTY4MkIwMDEwMDI4ODIwMDQwMzIKKzoxMDRFNTAwMDgxMzIwMTAwRkZGRjAwNDE4Mjg4MDEwMDAwNzcwMDQxOUMKKzoxMDRFNjAwMDgyOEMwMTAwMDEwMjAwNDE4Mjk4MDEwMDIwMDAwMDQxNzMKKzoxMDRFNzAwMDgyREMwMTAwMTgwMDAwNDE4MkRDMDEwMENEODFBMjVFQ0QKKzoxMDRFODAwMDBCN0QwMDAwMDAwMDAwNDEwOEIxMDEwMDIwMDAwMEE2RDkKKzoxMDRFOTAwMDgyQjAwMTAwRDA4MUEyNUUwQjdEMDAwMDQwMTMwMDQxNzIKKzoxMDRFQTAwMDA4OTkwMTAwRDg4MTIyNDMyMTZGMDAwMDIwMDAwMEE2NEMKKzoxMDRFQjAwMDgyQjAwMTAwMTIwMDAwNDE4MkRDMDEwMEQ1ODFBMjVFQjcKKzoxMDRFQzAwMDBCN0QwMDAwMDAwNDAwNDEwODk5MDEwMEYzODEwMDQwQkYKKzoxMDRFRDAwMDgxQjIwMDAwMjAwMDAwQTY4MkIwMDEwMDE5MDAwMDQxNEMKKzoxMDRFRTAwMDgyREMwMTAwREE4MUEyNUUwQjdEMDAwMDAwQTAwMDQxOUYKKzoxMDRFRjAwMDA4OTkwMTAwRjM4MTAwNDA4MUIyMDAwMDAwMDAwMDQ0RTUKKzoxMDRGMDAwMDIxQjMwMTAwMDAwMDAwNDA4M0IwMDEwMDAwMDAwMDVGRjkKKzoxMDRGMTAwMDgzOTAwMTAwMDAwMDAwNUU4MzkwMDEwMDAwMDAwMDU3QjQKKzoxMDRGMjAwMDgzOTAwMTAwMDAwMDAwNDFDMkIxMDEwMDBDMDEwMDQwNkIKKzoxMDRGMzAwMDgxMzIwMTAwMDAwMDAwNUY4MzgwMDEwMDAwMDAwMDQxMTkKKzoxMDRGNDAwMEMyQjEwMTAwMEMwMTAwNDA4MTMyMDEwMDIwMDAwMEE2MjYKKzoxMDRGNTAwMDgyQjAwMTAwMDQwMDAwNDE4MkRDMDEwMDIwMDAwMDQxMTkKKzoxMDRGNjAwMDA4OTkwMTAwMjAwMDAwQTY4MkIwMDEwMDExMDAwMDQxNTQKKzoxMDRGNzAwMDgyREMwMTAwRUM4MUEyNUUwQjdEMDAwMDAxMDAwMDQxOUIKKzoxMDRGODAwMDA4OTkwMTAwMjAwMDAwQTY4MkIwMDEwMEVGODFBMjVFMTYKKzoxMDRGOTAwMDBCN0QwMDAwNDAxMzAwNDEwODk5MDEwMDAxMDAwMEE2QUMKKzoxMDRGQTAwMDgyQjAwMTAwNDAwMDAwNDEyRTk5MDEwMDAwMDA4MDQwQzUKKzoxMDRGQjAwMDgxQjIwMTAwMjAwMDAwQTY4MEIwMDEwMDAwMDAwMENBRkMKKzoxMDRGQzAwMDgxOTQwMTAwRjY4MUEyNUUwQjdEMDAwMDIyODMwMDQwRTcKKzoxMDRGRDAwMDA4QjEwMDAwQzgxNDJFQkI4NUIwMDEwMEY5ODFBMjVFQTMKKzoxMDRGRTAwMDBCN0QwMDAwMDAwMDAwNDA4N0IwMDEwMDA4ODIyMjQzRDIKKzoxMDRGRjAwMDIxNkYwMDAwMTc4MjIyNDQyMTZGMDAwMDExODAwMEE2NUIKKzoxMDUwMDAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDFGODIyMjRBQzIKKzoxMDUwMTAwMDgzN0MwMDAwMDAwMDAwNDA4NzkwMDEwMDAzODIyMjRENDUKKzoxMDUwMjAwMDgzN0MwMDAwMDAwMDAwNDE4NzkwMDEwMDA1ODIyMjRGMzAKKzoxMDUwMzAwMDgzN0MwMDAwMDAwMDAwNDM4NzkwMDEwMDA3ODIyMjRFMUQKKzoxMDUwNDAwMDgzN0MwMDAwMDAwMDAwNDI4NzkwMDEwMDFGODIwMDQwMjYKKzoxMDUwNTAwMDgxQjIwMDAwMDE4MDAwQTY4MkIwMDEwMDI4ODIwMDQwRDkKKzoxMDUwNjAwMDgxMzIwMTAwMDE4MDAwQTY4MkIwMDEwMDI4ODIwMDQwNDgKKzoxMDUwNzAwMDgxMzIwMTAwMUY4MjIyNDI4MzdDMDAwMDAwMDAwMDQwMzgKKzoxMDUwODAwMDg3OTAwMTAwMUM4MDAwQTY4MkIwMDEwMDI4ODIwMDQwQTkKKzoxMDUwOTAwMDgxMzIwMTAwMTI4MjIyNDU4MzdDMDAwMDAwMDAwMDQxMjEKKzoxMDUwQTAwMDg3OTAwMTAwMTQ4MjIyNDQ4MzdDMDAwMDAwMDAwMDQzQUEKKzoxMDUwQjAwMDg3OTAwMTAwMTY4MjIyNDM4MzdDMDAwMDAwMDAwMDQyOUEKKzoxMDUwQzAwMDg3OTAwMTAwMUY4MjAwNDA4MUIyMDAwMDAxODAwMEE2OEQKKzoxMDUwRDAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDAxODAwMEE2RDgKKzoxMDUwRTAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDFGODIyMjQyRUEKKzoxMDUwRjAwMDgzN0MwMDAwMDAwMDAwNDA4NzkwMDEwMDAwMDAwMDQzMTYKKzoxMDUxMDAwMDg3OTAwMTAwMDAwMDAwNDE4NzkwMDEwMDAwODAwMEE2MDgKKzoxMDUxMTAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDIzODIyMjRCQUMKKzoxMDUxMjAwMDgzN0MwMDAwMDAwMDAwNDA4NzgwMDEwMDAwMDAwMDQzRjUKKzoxMDUxMzAwMEUwQjEwMTAwRkY3RjAwQTJBMDhCMDEwMDAwMDAwMDQ0NEQKKzoxMDUxNDAwMEE1QjMwMTAwQjg4MDAwQ0FBNzMzMDEwMDQxODEwMDQwMjcKKzoxMDUxNTAwMDgxQjIwMDAwMjAwMDAwNDE4MkRDMDEwMDI5ODJBMjVFQjEKKzoxMDUxNjAwMDBCN0QwMDAwMDAwMDAwNDEwOEIxMDEwMDJCODI5Rjg1RUIKKzoxMDUxNzAwMDgyMzAwMDAwMDAwMDgwNDA4MUIyMDEwMDMwODIxNEY3Q0MKKzoxMDUxODAwMDgxMzAwMDAwMzA4MkEyNDlGRDdGMDAwMDAwMDAwMDQ4MEQKKzoxMDUxOTAwMEZEOTMwMTAwMzM4MjE1Rjg4MTE0MDAwMDMzODJBMjRBODYKKzoxMDUxQTAwMEZEN0YwMDAwMDAwMDAwNDhGRDkzMDEwMDM1ODJBMkM4ODkKKzoxMDUxQjAwMDgxMzIwMDAwNDAwMDAwNDA4MERDMDEwMDAwMTAwMDQwMEYKKzoxMDUxQzAwMDgwREMwMTAwMDAwMDAwNDBFRkIzMDEwMDM3ODI0MjQwNjQKKzoxMDUxRDAwMEYxMzMwMDAwNDM4MTAwNDA2ODk3MDAwMDIyODMwMEJCNDgKKzoxMDUxRTAwMDZCQjMwMDAwMjI4MzAwQkJCMUIzMDAwMDIyODMwMDQwRjgKKzoxMDUxRjAwMDgxQjIwMDAwMDAwMzAwNDA4MTk4MDEwMDAwMDAwMDQwREYKKzoxMDUyMDAwMDE4QjEwMTAwODAwMDAwNDA4Mzk4MDEwMDAwMTkwMDQwOUYKKzoxMDUyMTAwMDQ1OTkwMTAwMDAwMDQyNDA4MUIyMDEwMDAwMDA0M0ZGQjcKKzoxMDUyMjAwMEYxQjEwMTAwMDAwMDAwRkZGMUIxMDEwMDAwMDAwMDQxRjgKKzoxMDUyMzAwMDgxQzAwMTAwMDAwMDAwNDAxOEIxMDEwMDQwODJBMjQxN0QKKzoxMDUyNDAwMDgzNTAwMDAwMDAxNjAwNDA0NTk5MDEwMDAwMTkwMDQwRkQKKzoxMDUyNTAwMDQzOTkwMTAwMDAwMDAwNDc0M0MxMDEwMDAwMDAwMDQwRTUKKzoxMDUyNjAwMDgzQjAwMTAwMDAwMDAwRjM4MEIwMDEwMDAwMDAwMDVCOEIKKzoxMDUyNzAwMDgxRDAwMTAwMDAwMDAwNDE4MEQwMDEwMDAwMDAwMDQwMEEKKzoxMDUyODAwMEY2QjEwMTAwMDAwMDAwNUI0M0MxMDEwMDAwMDAwMDQxRDUKKzoxMDUyOTAwMDgzQzAwMTAwNEE4MkEyNTQ4MzZDMDAwMDAwMDAwMDQwRDkKKzoxMDUyQTAwMEY3QjEwMTAwMDAwMDAwNDE4M0MwMDEwMDUxODJBMjA2NTUKKzoxMDUyQjAwMDgzNkMwMDAwMDAwMDgwNDA4MUIyMDEwMDAwMTYwMDQwQjUKKzoxMDUyQzAwMDQzOTkwMTAwODAxNjJFMDY4M0IwMDEwMDM2MDAwMEZCRDIKKzoxMDUyRDAwMEY2QTkwMTAwNTc4MkEyNDE4MzUwMDAwMDIyMDAwMDQwM0QKKzoxMDUyRTAwMDgzOTgwMTAwMDAwMDAwRkJGNkIxMDEwMDVBODJBMjQxNDAKKzoxMDUyRjAwMDgzNTAwMDAwNjIwMDAwNDA5NTk4MDEwMERDOUYwMDQwNTAKKzoxMDUzMDAwMDgxMzIwMTAwMDAxNjJEMDY4M0IwMDEwMDgwMTYwMDQwOTYKKzoxMDUzMTAwMDQ1OTkwMTAwNUMwMDAwRkJGNkE5MDEwMDYwODJBMjQxRjIKKzoxMDUzMjAwMDgzNTAwMDAwMDAwMDAwNzBGOUIxMDEwMDAwMDAwMDcxMUUKKzoxMDUzMzAwMEY5QjEwMTAwMDAwMDAwNzJGOUIxMDEwMDAwMDAwMDczMzIKKzoxMDUzNDAwMEY5QjEwMTAwMDAwMDAwNzRGOUIxMDEwMDU0MDAwMDQwRkYKKzoxMDUzNTAwMDk1OTgwMTAwREM5RjAwNDA4MTMyMDEwMDAwMDAwMDcwNDAKKzoxMDUzNjAwMDk1QjAwMTAwNkM4MjIyNzBCNTZGMDAwMDAwMDA4MDQxOTIKKzoxMDUzNzAwMDk3QjAwMTAwMDAwMDgwNDA5N0IwMDEwMEM0ODBBMjQyQjUKKzoxMDUzODAwMDk3NkYwMDAwQjYwMzAwNDBBMTk5MDEwMDAwMDAyRjQyNzIKKzoxMDUzOTAwMDk5QjMwMTAwNzg4MjIyNDQ4MTZDMDAwMDgwODIyMjQ4MDcKKzoxMDUzQTAwMDgxNkMwMDAwN0E4MjIyNEM4MTZDMDAwMDg1ODIyMjUwNDAKKzoxMDUzQjAwMDgxNkMwMDAwODY4MjIyNTQ4MTZDMDAwMDg4ODIyMjU4MTEKKzoxMDUzQzAwMDgxNkMwMDAwOEQ4MjIyNUM4MTZDMDAwMDUwMDEwMDQwRTUKKzoxMDUzRDAwMDgxQjIwMDAwMDAwMDAwQkMwOUIwMDEwMDIyODMwMENBQjUKKzoxMDUzRTAwMDAxQjAwMDAwMDAwMDAwNDAwM0IwMDEwMDAwMDAwMDQxRDcKKzoxMDUzRjAwMEYzODMwMTAwN0U4MkEyNDIwNTZDMDAwMDAwMDAwMDQxQTAKKzoxMDU0MDAwMDA1QjAwMTAwMjI4MzIyQ0EwNzE0MDAwMDIyODMwMDQ2NEYKKzoxMDU0MTAwMEYzOTMwMDAwMjI4MzIwNDM5NTZGMDAwMDIyODM4MENBMEIKKzoxMDU0MjAwMDA1MzAwMDAwMjI4MzIyMDE4MDMwMDAwMEM0ODBBMjQ4QTEKKzoxMDU0MzAwMERCN0QwMDAwMjI4MzAwQ0JEQjkxMDAwMDU3MDEwMEJDMjQKKzoxMDU0NDAwMEFCQjMwMDAwMDAwMDAwQkNCMUIzMDEwMDIyODMwMENBNkUKKzoxMDU0NTAwMENGQjMwMDAwRkYwMDAwQ0E4MTg4MDEwMDIyODNBMjQwNzAKKzoxMDU0NjAwMDc0N0QwMDAwNjAwMDIwNDA2MDk5MDEwMDhBODJBOEIxMkMKKzoxMDU0NzAwMDgyMzAwMDAwODk4MjAwNDA4MUIyMDAwMDIyODMwMENBOEQKKzoxMDU0ODAwMDc5QjMwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQzMkQKKzoxMDU0OTAwMENCODMwMTAwMDAwMDQ1NDA4MUIyMDEwMDkwODJBMjQxMEYKKzoxMDU0QTAwMDgxNTAwMDAwMDAwMDQ1NDA4MUIyMDEwMDAwMDA0NTQwRUQKKzoxMDU0QjAwMDgxQjIwMTAwOUI4MjkxODI4MjMwMDAwMDAwMDAwMDhBNEMKKzoxMDU0QzAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMDk5ODJBNjQwQ0UKKzoxMDU0RDAwMDgxMzIwMDAwOUI4MjU2NDA4MUIyMDAwMEI2MDMwMDQwM0EKKzoxMDU0RTAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEI2MDMwMDQwOUQKKzoxMDU0RjAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEQ4OUYwMDQxQ0YKKzoxMDU1MDAwMDhCQjMwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQyOUIKKzoxMDU1MTAwMENEODMwMTAwMDAwMDQ2NDA4MUIyMDEwMEEwODJBMjQxN0IKKzoxMDU1MjAwMDgxNTAwMDAwMDAwMDQ2NDA4MUIyMDEwMDAwMDA0NjQwNkEKKzoxMDU1MzAwMDgxQjIwMTAwQUI4MjkxODE4MjMwMDAwMDAwMDAwMDg5QkQKKzoxMDU1NDAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMEE5ODJBNjQwM0QKKzoxMDU1NTAwMDgxMzIwMDAwQUI4MjU1NDA4MUIyMDAwMEI2MDMwMDQwQUEKKzoxMDU1NjAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEI2MDMwMDQwMUQKKzoxMDU1NzAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEQ4OUYwMDQxNEQKKzoxMDU1ODAwMDhCQjMwMDAwQjEwMzAwNDBBMTk5MDEwMEM0MTQyRjQwNjcKKzoxMDU1OTAwMDk5QjMwMTAwNTcwMTAwNDA0OUIxMDAwMEEwOTQyRTQzODcKKzoxMDU1QTAwMDk3QjAwMTAwMDAwMDAwNDBGMUIxMDEwMEIyODJBMjQxQjkKKzoxMDU1QjAwMDk3NTAwMDAwNTA5NTIwNDBFMUIxMDEwMEFDOTQyRTQzN0IKKzoxMDU1QzAwMDk3QjAwMTAwMDAwMDAwNDBGMUIxMDEwMEI2ODJBMjQxOTUKKzoxMDU1RDAwMDk3NTAwMDAwMDAwMDgwNDA4MUIyMDEwMEFFMDMwMDQwRkYKKzoxMDU1RTAwMEEzOTkwMTAwMDAwMDAwNDA4MUIwMDEwMDYwMTUwMDQwNTcKKzoxMDU1RjAwMDg1OTgwMTAwMDgwMDAwNDA0MEU0MDEwMDAwMDAwMDU5QzcKKzoxMDU2MDAwMDQxOTQwMTAwMDAwMDAwNTA0MUUwMDEwMDAwMDAwMDQyMTAKKzoxMDU2MTAwMDQwOTQwMTAwMDAwMDAwNTc0MTkwMDEwMDAwMDAwMDQxNEIKKzoxMDU2MjAwMDgxQzAwMTAwMDAwMEEzNDI4MTZDMDEwMDAwMDAwMDQxMjQKKzoxMDU2MzAwMEEzQzEwMTAwQkM4MkEwNDI4MTZDMDAwMEJDODIwMDUwNkEKKzoxMDU2NDAwMDg1QzAwMDAwMDE4M0EyNDEwMTdEMDAwMENGODIyMjU4NjUKKzoxMDU2NTAwMDczN0QwMDAwNzgwMDAwNDA2MTk5MDEwMEM3ODJBOEIxMDUKKzoxMDU2NjAwMDlDMzAwMDAwMzAwMDM4NDU5REUwMDEwMDA0MDBBMjVGM0UKKzoxMDU2NzAwMDFGN0MwMDAwMDQwMDIyNUUxRjdDMDAwMDAwQzAwMEE2MEEKKzoxMDU2ODAwMDFFQTQwMTAwMDEwMDAwMEUxMEM5MDAwMENGODIzM0M0MjcKKzoxMDU2OTAwMDgxMzAwMDAwRDI4MkExQUQ5RDIwMDAwMEM2ODIxMzQwNUYKKzoxMDU2QTAwMDgxQjIwMDAwMDAwMDEzNEU1QTgzMDEwMDMwMDAzODQ1REIKKzoxMDU2QjAwMDlERTAwMTAwMDQwMEEyNUYxRjdDMDAwMDA0MDBBMjVFQzgKKzoxMDU2QzAwMDFGN0MwMDAwMDQwMEEyNDAwNTZDMDAwMEREODIyMkFCQkMKKzoxMDU2RDAwMDgwMDQwMDAwREI4MkEyNDAwMTdEMDAwMEREODIyMjVGQTkKKzoxMDU2RTAwMDU3N0QwMDAwMTI4ODAwNUYxRkI0MDAwMEREODIyMjVFM0IKKzoxMDU2RjAwMDU3N0QwMDAwODA4ODAwNUYxRkI0MDAwMEUzODIyMjU0QzEKKzoxMDU3MDAwMDczN0QwMDAwNzQwMDAwNDA2MTk5MDEwMEREODJBOEIxNDIKKzoxMDU3MTAwMDAwMzAwMDAwMDAwMDAwNUYxRkI0MDEwMEY3ODRBMjVGQUEKKzoxMDU3MjAwMDAxN0MwMDAwOTU4NzAwNDA4MUIyMDAwMEU1ODJBMjVGMDUKKzoxMDU3MzAwMDU5MjcwMDAwRTc4MkEyNUM3MzdEMDAwMEVFODJBMjVFMjIKKzoxMDU3NDAwMDczN0QwMDAwRkE4MjIyNUM3MzdEMDAwMEZCODIzNzQwOEIKKzoxMDU3NTAwMDgxMzIwMDAwN0MwMDAwNDA2MTk5MDEwMEU4ODJBOEIxMUMKKzoxMDU3NjAwMDM2MzAwMDAwN0MwMDAwNDA2MTk5MDEwMEVBODJBOEIxNTcKKzoxMDU3NzAwMDAwMzAwMDAwMUYwMDAwMDAwMjg4MDEwMDM3ODUxNzVGMUQKKzoxMDU3ODAwMDFGQjQwMDAwRkI4MjM0NDA4MTMyMDAwMDdFMDAwMDQwRTQKKzoxMDU3OTAwMDYxOTkwMTAwRUY4MkE4QjExMjMwMDAwMEY3ODI1MjIxMTYKKzoxMDU3QTAwMDEzMDQwMDAwMDAwMDE0NDEyRkMzMDEwMDAwMDAwMDVGM0IKKzoxMDU3QjAwMDFGQjQwMTAwRkYzRjAwMDkwMDhDMDEwMDAwMDAwMDQzRkUKKzoxMDU3QzAwMDAxRjAwMTAwNEY4MzAwMzQxMzg0MDAwMEZGM0YxNDA5RUYKKzoxMDU3RDAwMDAwOEMwMTAwMDAwMDAwNUYxRkI0MDEwMEM0ODMwMDQzN0YKKzoxMDU3RTAwMDAxRjAwMDAwMDAwMDAwNDA4MUIyMDEwMEZCODIzMzQwNjQKKzoxMDU3RjAwMDgxMzIwMDAwMDQwMEEyNEU1QTdGMDAwMDA3MDAwMDRFRDQKKzoxMDU4MDAwMDgwRTQwMTAwMDAzOTAwNDA4MEM4MDEwMDA0MDBBMjQwOEIKKzoxMDU4MTAwMDA2NkMwMDAwQzY4MjEzNEU1QTkzMDAwMEU3ODdBMjQ4MjgKKzoxMDU4MjAwMEZEN0YwMDAwMDU4MzAyRTY4MTMyMDAwMDA2ODM4M0U1RTgKKzoxMDU4MzAwMDgxMzIwMDAwOEU4MjAwNDI5N0IzMDAwMDlFODIwMDQyQjcKKzoxMDU4NDAwMDk3QjMwMDAwMDk4MzIyNDZGMzdGMDAwMDBDODNBMjQxMzYKKzoxMDU4NTAwMEYzN0YwMDAwQzY4MDAwNDI5NzMzMDEwMDBDODMyMjQ0OEUKKzoxMDU4NjAwMEYzN0YwMDAwMEM4M0EyNDFGMzdGMDAwMEM2ODAwMDZGMkQKKzoxMDU4NzAwMDk3MzMwMTAwMDQwMEEyQUM4MDMyMDAwMDExODMyMjVBNDkKKzoxMDU4ODAwMDczN0QwMDAwN0EwMDAwNDA2MTk5MDEwMDBFODNBOEIxODkKKzoxMDU4OTAwMDdFMzEwMDAwMDEwMDAwQ0YxMUM5MDAwMDE3ODNBMjQwMzMKKzoxMDU4QTAwMDkzN0YwMDAwMTc4MzIyNDQ5MzdGMDAwMDEzODM0MkE1NTcKKzoxMDU4QjAwMDgwMzAwMDAwMTY4M0EyNDA5MzdGMDAwMDM4ODMxQTQwOTYKKzoxMDU4QzAwMDkzOTMwMDAwMDAwMDFBNDA4MUIyMDEwMERGODBBMjQwRTMKKzoxMDU4RDAwMDczN0QwMDAwRTI4NzIyNDQyMTZGMDAwMEQ5ODcyMjQwQjcKKzoxMDU4RTAwMDY1N0QwMDAwMDAwNUEyNUI3MzdEMDAwMDA0MDBBMjQ5RjUKKzoxMDU4RjAwMDMzN0QwMDAwMjE4MzIyNDgzMzdEMDAwMEZGMDEwMDk5QTEKKzoxMDU5MDAwMDgwRDgwMTAwMDAwMDAwNTA4MUUwMDEwMEE4OTgyRjQwREQKKzoxMDU5MTAwMDMzQjEwMTAwMDAwMDAwNDBFMEMxMDEwMDAxODMwMDQwRkMKKzoxMDU5MjAwMDgxQjIwMDAwQzY4MjAwNDA4QkIzMDAwMDA0MDBBMjVFN0EKKzoxMDU5MzAwMDFGN0MwMDAwMDQwMDIyNUYxRjdDMDAwMDAwMDAwMDVFNEUKKzoxMDU5NDAwMDFGOTAwMTAwQzY4MjAwNUYxRjgwMDAwMDA0MDBBMjVFNUQKKzoxMDU5NTAwMDFGN0MwMDAwMDQwMDIyNUYxRjdDMDAwMDAwMDAwMDVFMkUKKzoxMDU5NjAwMDFGOTAwMTAwMDAwMDAwNUYxRjgwMDEwMDAwMDAwMDU4MzAKKzoxMDU5NzAwMDYxQjEwMTAwMDAwMDAwNEU2MkIxMDEwMEM2ODIyODQwMDIKKzoxMDU5ODAwMDgxMzIwMDAwMkM4MzAwNDA4MUIyMDAwMDAwMDAwMDQwMDIKKzoxMDU5OTAwMDBGQjAwMTAwMDQwMEEyNUUxRjdDMDAwMDA0MDAyMjVGMjMKKzoxMDU5QTAwMDFGN0MwMDAwMzI4MzMzNDAxRjMwMDAwMDA0MDBBMjRFRjEKKzoxMDU5QjAwMDVBN0YwMDAwMDcwMDAwNEU4MEU0MDEwMDAwMzkwMDQwREIKKzoxMDU5QzAwMDgwQzgwMTAwMDQwMEEyNDAwNjZDMDAwMEM2ODIxMzRFOEQKKzoxMDU5RDAwMDVBOTMwMDAwM0E4M0EwQ0U4MTUwMDAwMDREODNBMENEQTEKKzoxMDU5RTAwMDgxNkMwMDAwMDAwMDAwQTU5Q0IzMDEwMDAwMDAwMEIxMjQKKzoxMDU5RjAwMDgxQjAwMTAwNEQ4MzIyQjU4MTE0MDAwMDgwMTUyRjQwMzUKKzoxMDVBMDAwMDQ5QjEwMTAwM0U4MzQyNDA4MTMyMDAwMDAwMDA2MEI0OTEKKzoxMDVBMTAwMDY1OTcwMTAwRDAxNTJFNDA2OUIzMDEwMDAwMDAxQTQ0QkIKKzoxMDVBMjAwMDkzODMwMTAwMDQwMDIyNDBFMTZEMDAwMDFBMDAwMEEyRUYKKzoxMDVBMzAwMDgwREMwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDAwMEIxNzEKKzoxMDVBNDAwMEYxQjEwMTAwMDAwMDAwQjVGMUIxMDEwMDA1MDAwMDQwMTYKKzoxMDVBNTAwMDYxOTkwMTAwODAwMDAwNDA2MkREMDEwMDQ4ODNBOEExMzcKKzoxMDVBNjAwMEUwMzEwMDAwMTc4MzAwODg5RUIzMDAwMDE3ODNBMjQxMzUKKzoxMDVBNzAwMDY3NkYwMDAwMTc4MzAwNkZEQjkxMDAwMDREODM0MjQwODkKKzoxMDVBODAwMDgxMzIwMDAwMTc4MzFBNDA5MzgzMDAwMDAwMDQwMDQwMTUKKzoxMDVBOTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA0MDBBMjVBODcKKzoxMDVBQTAwMDAxN0MwMDAwMDQwMDIyNDAwMTZDMDAwMDAwOTkwMDA5MDQKKzoxMDVBQjAwMDQ2QzkwMTAwM0YwMDAwRjMwQzg4MDEwMDVDODNBNjQyNDgKKzoxMDVBQzAwMDEzNjAwMDAwOUI5NjAwOTUwMzMwMDEwMDU3ODM2MTQwRUUKKzoxMDVBRDAwMDgxMzIwMDAwNzUwMDAwNDA2MTk5MDEwMDU4ODNBOEIxMkYKKzoxMDVBRTAwMDBDMzAwMDAwQTk5NjcxMTA5NDMwMDEwMDVEODMwMDU4QkQKKzoxMDVBRjAwMDFGOTAwMDAwOEQ5NjAwOTUwMzMwMDEwMDIzODMwMDg4REQKKzoxMDVCMDAwMDFDQjAwMDAwMDAwMDJEMDM0OEIxMDEwMDA0MDAyREYwN0UKKzoxMDVCMTAwMDJFQjAwMTAwODAwNDAwMTc5Njg4MDEwMDA0MDBBNjQwMDIKKzoxMDVCMjAwMDgxMzIwMDAwNEFDMTAwMTc5NkQ4MDEwMDA0MDBBNjQwNDcKKzoxMDVCMzAwMDgxMzIwMDAwRUUwNzAwNDA5Nzk4MDEwMDY4ODMyMzRCRjQKKzoxMDVCNDAwMEU0NkQwMDAwNjg4MzIyNEJGRDdGMDAwMDAwMDAwMDQwRjAKKzoxMDVCNTAwMDFGOTAwMTAwMjIwMDJGNDA4MUIyMDEwMDZCODM4MzE3NDgKKzoxMDVCNjAwMDgwMzIwMDAwMjYwMDAwNDA0Nzk5MDEwMDZEODM4NTE3QjAKKzoxMDVCNzAwMDgwMzIwMDAwMDAwMDAwNDg0N0MxMDEwMDczODMyMjU1QjUKKzoxMDVCODAwMDJGN0MwMDAwMDAwMDAwNDI0M0QxMDEwMDBGMDAwMEZBMEEKKzoxMDVCOTAwMDk2ODgwMTAwMDAwMDAwNDI5N0UwMDEwMDAwMDAwMDQyRUEKKzoxMDVCQTAwMDk3RDAwMTAwNzQ4MzAwNEI0NEMxMDAwMDEyMDAwMEEyOTIKKzoxMDVCQjAwMDQ0QzkwMTAwMjgwMDAwRjYwMkNDMDEwMDBBMDAwMEExM0YKKzoxMDVCQzAwMDQyQzkwMTAwMDAwMDAwRjgxNkIwMDEwMDAwMDAyOEYwRjIKKzoxMDVCRDAwMDEwQjAwMTAwMDAwMDAwRjAxQUIwMDEwMDAwMDAwMEEyQTcKKzoxMDVCRTAwMDJBQjAwMTAwQzAyODNDNDYwREUwMDEwMDAwMDAyRDQ0MTEKKzoxMDVCRjAwMDk1QjAwMTAwODA4M0EyRjgwRTMwMDAwMDkwODMyMjQxMEUKKzoxMDVDMDAwMDk1NTAwMDAwMDAwMDJENTA0OUMxMDEwMDdDODMwMDQwRTgKKzoxMDVDMTAwMDgxQjIwMDAwN0Q4M0EyRjgxNjZDMDAwMDdEODNBMkY4OUIKKzoxMDVDMjAwMDEwNkMwMDAwN0Q4M0EyRjAxQTZDMDAwMDhFODMyMjU4NTUKKzoxMDVDMzAwMDFGN0MwMDAwMDA5OTNGNDIxM0YwMDEwMDg1ODM2NTQwRkUKKzoxMDVDNDAwMDgxMzIwMDAwODk4M0EyRjM3NDA2MDAwMDAwMDAwMDA2ODAKKzoxMDVDNTAwMEU2OTUwMTAwOEU4Mzc1NDA4MUIyMDAwMDAwMDAwMDA2QzkKKzoxMDVDNjAwMDk2QjAwMTAwM0YwMDc1RjMwQzg4MDEwMDAwMDAwMDU1NUMKKzoxMDVDNzAwMDYxQjEwMTAwMDAwMDAwNEI2MkIxMDEwMDhDODNBODQwQkIKKzoxMDVDODAwMDgxMzIwMDAwOEU4MzY3NDA4MTMyMDAwMDk2ODM3NzQxMjUKKzoxMDVDOTAwMDJEQzMwMDAwOTQ4MzIyNTgxRjdDMDAwMDAwMDAwMDU1OTMKKzoxMDVDQTAwMDYxQjEwMTAwMDAwMDAwMDY2MkIxMDEwMDkyODNBODQwQ0EKKzoxMDVDQjAwMDgxMzIwMDAwOTQ4MzY3NDA4MTMyMDAwMEQ1ODM3NzQxQjAKKzoxMDVDQzAwMDJEQzMwMDAwMDMwMDAwMDcxQUY0MDEwMDE4OTUwMDA3MTcKKzoxMDVDRDAwMDE2MzAwMTAwQTg4MzIyNDE4MTZDMDAwMDlDODMyMjQyN0YKKzoxMDVDRTAwMDgxNkMwMDAwMjM4MzAwODgxQ0IwMDAwMEE3ODMyMjVGMjIKKzoxMDVDRjAwMDBGN0MwMDAwNEU5NjAwNUYwMTEwMDEwMEEyODMyMjQwM0QKKzoxMDVEMDAwMDk1NkMwMDAwMDQ4MDAwMDM0MkM5MDEwMDAwMDAwMEYyMEQKKzoxMDVEMTAwMDAyQjAwMTAwQTU5NTAwNTI5NTMwMDEwMEFDOTUwMDRCRjIKKzoxMDVEMjAwMDAyQjAwMDAwMDAwMDAwNUYwRjgwMDEwMDAxMDQwMDQwOEQKKzoxMDVEMzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMEI0OTYwMDA5OTEKKzoxMDVENDAwMDk2MzAwMTAwRjA4NzAwNDAwRkIwMDAwMEI3ODNBMjVBRTAKKzoxMDVENTAwMDFGN0MwMDAwMDQwMEEyNUExRjdDMDAwMDAwQjUwMDBENEIKKzoxMDVENjAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwQjcwMDBEQ0YKKzoxMDVENzAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDcwOTQwMDQwM0YKKzoxMDVEODAwMDgxMzIwMTAwQjc4MzIyMjA4NTZDMDAwMEIyODM5QzBGMTIKKzoxMDVEOTAwMDgwMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDhEOTUwMDVDRDkKKzoxMDVEQTAwMDFGMDAwMTAwQzg5NzAwNDI2MTMxMDEwMDIzODMwMDg4NzEKKzoxMDVEQjAwMDFDQjAwMDAwOTAwNDAwMDc5NjMwMDEwMDAwMDAyRDA1ODMKKzoxMDVEQzAwMDQ4QjEwMTAwMDQwMEEyNEJFMTdEMDAwMDA0MDBBMjVDODgKKzoxMDVERDAwMDFGN0MwMDAwMDAwMDJEMDU0OEIxMDEwMEJCODM4MkYwNEMKKzoxMDVERTAwMDE4MzAwMDAwNkM4OTAwNDU4RkIwMDAwMDI4MjAwMEE2MDQKKzoxMDVERjAwMDk2QjAwMTAwQzE4MzIyMTc5NjA0MDAwMDM0MDQwMDQwQ0QKKzoxMDVFMDAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDVCOTcwMDRCRDYKKzoxMDVFMTAwMDk1MzAwMTAwNkM4OTAwNEI4RkIwMDAwMDVEOTYwMDAzNDcKKzoxMDVFMjAwMDQ4MzEwMTAwQUY5MzAwNDA4MTMwMDEwMDZDODkwMDQwOEYKKzoxMDVFMzAwMDgxQjIwMDAwMDAwMDAwNDAwRkIwMDEwMDAwMDQwMDQwRUIKKzoxMDVFNDAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA0MDAyMjQwNkQKKzoxMDVFNTAwMDAxNkMwMDAwMDAwMDJFMTA0OEIxMDEwMDAwMDA2ODUwRTUKKzoxMDVFNjAwMDAzQjAwMTAwMDAwMDAwMDNGMEIxMDEwMDQwMDAwMDAwOTkKKzoxMDVFNzAwMEUwQzkwMTAwMDAwMDJFNTA0OUMxMDEwMDAwMDAwMDUwOUYKKzoxMDVFODAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyODgKKzoxMDVFOTAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMEQwODNBODQwNDQKKzoxMDVFQTAwMDgxMzIwMDAwMTAwMDAwMTA2MkM5MDEwMEQyODNBODAwRjYKKzoxMDVFQjAwMEUwMzEwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAyRDAzQTcKKzoxMDVFQzAwMDQ4QjEwMTAwMDAwMDAwNDAwRkIwMDEwMDAwMDAwMEY4RTAKKzoxMDVFRDAwMDJFQjAwMTAwMDAwMDAwRjIwMkIwMDEwMDAwMDAwMDQwRkUKKzoxMDVFRTAwMDE3QjAwMTAwMDA0MTAwQTY5NkIwMDEwMEVFMDcyRTQ3NTIKKzoxMDVFRjAwMDk3OTAwMTAwRTg4MzIyMTc5NjA0MDAwMEU2ODMyMjRCNjYKKzoxMDVGMDAwMEZEN0YwMDAwRTY4MzIzQTIwMjZDMDAwMEE1OTUwMDUyRUQKKzoxMDVGMTAwMDk1MzAwMTAwMDQwMDIyNDE5NzUwMDAwMDBDMDAyRDAwMzQKKzoxMDVGMjAwMDEyQjAwMTAwMDAwMDAwRjAwMEIwMDEwMDAwMDAwMDVDQjEKKzoxMDVGMzAwMDAxODAwMTAwQUM5NTAwNEIwMkIwMDAwMDAwMDAwMDA5OTgKKzoxMDVGNDAwMDAwQjAwMTAwMDAwMDAwNTAwM0IwMDEwMDA1ODQwMDVDQjcKKzoxMDVGNTAwMDE3OTAwMDAwRkE4MzIyNDMyRjdDMDAwMDAwMDAwMDQ1QzgKKzoxMDVGNjAwMDFGOTAwMTAwRjM4MzIyNUYyRjdDMDAwMDAwMDAyRTEwQTEKKzoxMDVGNzAwMDQ4QjEwMTAwMDAwMDAwNThGMUIxMDEwMDEwMDAwMDAzMTkKKzoxMDVGODAwMEYwQzkwMTAwMTAwMDAwMDBFMEM5MDEwMEVGODM2MjQyODcKKzoxMDVGOTAwMDYxMzEwMDAwMDAwMDAwMTA2MkIxMDEwMEYwODNBODQwRjAKKzoxMDVGQTAwMDgxMzIwMDAwMjM4MzcyODgxQ0IwMDAwMDIwMDAyRDAzODIKKzoxMDVGQjAwMDQ4QjEwMTAwRkYwRjAwRjY4MDg4MDEwMEY3ODNBMkE2MTgKKzoxMDVGQzAwMDgxNkMwMDAwRkE4MzAwRjIzQUIwMDAwMEY0ODRBMjRCMjYKKzoxMDVGRDAwMEZEN0YwMDAwQzk5NDAwNDA4MTMyMDEwMDA2ODgwMDQwMjYKKzoxMDVGRTAwMDgxQjIwMDAwMDU4NDIyNEEyRjdDMDAwMDA1ODQyMjQ4RUIKKzoxMDVGRjAwMDJGN0MwMDAwMEEwMDJEMDM0OEIxMDEwMDNGMDAwMEYyOTEKKzoxMDYwMDAwMDg2ODgwMTAwMUYwMDAwNDM4NDg4MDEwMDA1MDAwMDQzQ0EKKzoxMDYwMTAwMDgwRjQwMTAwOTg5NDNENDI4MUUwMDEwMDA1ODRBMjQyOTEKKzoxMDYwMjAwMEUwN0QwMDAwRjQ4NEEyNEJGRDdGMDAwMEM5OTQwMDQwOTUKKzoxMDYwMzAwMDgxMzIwMTAwMDY4ODAwNDA4MUIyMDAwMDAyMDQwMDQwNjUKKzoxMDYwNDAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA3ODQ2OTQwOUQKKzoxMDYwNTAwMDgxMzIwMDAwMDAwMDAwQTMwOUIwMDEwMDAwMDA3OTQxNzYKKzoxMDYwNjAwMDQ3QzMwMTAwMDQwMEEwQTEwOTZDMDAwMDBFODQyMkExMTYKKzoxMDYwNzAwMDA5NkMwMDAwMjc4MzAwODgxQ0IwMDAwMDBBODQwMDAzMUMKKzoxMDYwODAwMDQ4QjEwMDAwNDg4NEEzOTIwMzZDMDAwMDJCOTgwMDQwQTQKKzoxMDYwOTAwMDk1MzAwMTAwMDAwMDAwNDE0M0MzMDEwMDAwMDAwMDE2REMKKzoxMDYwQTAwMDgwQjIwMTAwMDY4ODI3MDg4MDMyMDAwMDE1ODQyMjVDMzcKKzoxMDYwQjAwMDE3N0MwMDAwMTY4NDAwMDAyQUIwMDAwMDEyMDAwMDAwQzcKKzoxMDYwQzAwMDJBQzgwMTAwMDIwMDAwMDg4MEM4MDEwMDFBODRBMjQzMDcKKzoxMDYwRDAwMDJGN0MwMDAwNUU5NzAwNDA4MTMyMDEwMDM2ODQwMDVFMTQKKzoxMDYwRTAwMDE3OTAwMDAwMDQwMDAwMDE4Q0NDMDEwMDVFOTcwMDRDNkEKKzoxMDYwRjAwMDAzMzAwMTAwMDAwMDJFNDYwMkIwMDEwMDEwMDAwMDEwMjUKKzoxMDYxMDAwMDQ4QzkwMTAwMEMwMDAwMDFGMENEMDEwMDJDMDAwMDQwNDYKKzoxMDYxMTAwMEYwQzkwMTAwMDAwMDAwMTZGMEIxMDEwMDEwMDAwMDE1RTgKKzoxMDYxMjAwMEUwQzkwMTAwMDAwMDAwNDM2MUIxMDEwMEEwMDAwMEE0MkIKKzoxMDYxMzAwMDYyREQwMTAwMjM4NEE4NTQxNzEwMDAwMDM2ODQwMDVFM0QKKzoxMDYxNDAwMDE3OTAwMDAwMTIwMDAwMDAyQUM4MDEwMDM1ODQyMjQzODUKKzoxMDYxNTAwMDJGN0MwMDAwMDQwMDAwMDE4Q0NDMDEwMDAwMDAwMDRDRUEKKzoxMDYxNjAwMDAzQjAwMTAwN0Y5NzAwNDM2MTMxMDEwMDAwMDAyRTQ2MUIKKzoxMDYxNzAwMDAyQjAwMTAwMTAwMDAwMTA0OEM5MDEwMDBDMDAwMDAxMkQKKzoxMDYxODAwMEYwQ0QwMTAwMEMwMDAwMDlGMEM5MDEwMDAwMDAwMDE4NkEKKzoxMDYxOTAwMEYwQjEwMTAwMTAwMDAwMTVFMEM5MDEwMDAwMDAwMDQzNEIKKzoxMDYxQTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDM2ODQyODU0MjIKKzoxMDYxQjAwMDE3MTAwMDAwMzI4NDAwNDA4MUIyMDAwMDdGOTcwMDQzMzYKKzoxMDYxQzAwMDYxMzEwMTAwMzg4NDIyNTAyRjdDMDAwMDAwMDAwMDU2MEQKKzoxMDYxRDAwMDE3OTAwMTAwMDcwMDAwMTc5ODg4MDEwMDNCODRBMjQxMzYKKzoxMDYxRTAwMDk5NkMwMDAwMDAwMDAwNTUxNzkwMDEwMDAwMDAwMDQzNkEKKzoxMDYxRjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDNDODRBODQwNTQKKzoxMDYyMDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDY2OTcwMDQwQTQKKzoxMDYyMTAwMDgxMzIwMTAwNDM4NDIyNDMyRjdDMDAwMDE2ODAwMDAzNUEKKzoxMDYyMjAwMDQ0QzkwMTAwMDAwMDAwMURFNEIxMDEwMDAwOTcwMDVFQjgKKzoxMDYyMzAwMDA1MTAwMTAwNDY4NEEyNUYyRjdDMDAwMDg2OTMwMDAxQjgKKzoxMDYyNDAwMDM4NDMwMTAwQzk5NDAwNDA4MTMyMDEwMDA2ODgwMDQwQjMKKzoxMDYyNTAwMDgxQjIwMDAwNEE4NEEyNEJGRDdGMDAwMEYxODQwMDQxMUUKKzoxMDYyNjAwMDQzQzMwMDAwMDAwMDAwNDAyN0IwMDEwMDAwMDAwMDQwRDAKKzoxMDYyNzAwMDJEQjAwMTAwMDAwMDAwNDAxMUIwMDEwMDREODQzNTAxMzcKKzoxMDYyODAwMDg2MzAwMDAwNkQwMDAwNDA2MTk5MDEwMDU2ODQyOEIxRkQKKzoxMDYyOTAwMDMwMzAwMDAwNEU4NDIyNEQ3NTdEMDAwMDAwMDAwMDE2NTUKKzoxMDYyQTAwMDgwQjIwMTAwREQ4NEE3NDAxMTZDMDAwMDAwMDAwMDQxQjUKKzoxMDYyQjAwMDQzQzMwMTAwMDQwMEEyNDAyNzZDMDAwMEYwODQwMDQwQUEKKzoxMDYyQzAwMDgxQjIwMDAwNkQwMDAwNDA2MTk5MDEwMDU2ODRBOEIxQzAKKzoxMDYyRDAwMDEyMzAwMDAwMDAwMDAwMTY4MEIyMDEwMDYwODRBNzQwNjgKKzoxMDYyRTAwMDExNkMwMDAwMDAwMDAwNDE0M0MzMDEwMDAwMDAwMDA5RTAKKzoxMDYyRjAwMDEwQjAwMTAwMDAwMDAwMTgyQ0IwMDEwMERFMDcwMDQzQzAKKzoxMDYzMDAwMDgwQ0UwMTAwNEU4NEFBNDA4MTMyMDAwMDY1ODQwMDQwQTYKKzoxMDYzMTAwMDgxQjIwMDAwNDAwMDNFNDMyN0UwMDEwMDAwMDAwMDA5NzgKKzoxMDYzMjAwMEYwQjEwMTAwMDAwMDAwMThFMEIxMDEwMDAwMDAwMDQxRTAKKzoxMDYzMzAwMDI3QzAwMTAwNEU4NEEzMEI4NzUwMDAwMDAwMDAxNTQwQzkKKzoxMDYzNDAwMDFCQjAwMTAwMDAwMDAwNDAyM0IwMDEwMDA0MDBBMjAzQzQKKzoxMDYzNTAwMDQ4NkQwMDAwMTIwMDAwMDAyQUM4MDEwMDQwMDAyRDQwRDYKKzoxMDYzNjAwMDM5QjAwMTAwNkY4NEEyNDAyNzZDMDAwMDIyMDAwMDA4QjEKKzoxMDYzNzAwMDEyQzgwMTAwMDQwMEEyMTYzMDZDMDAwMERFMDcwMDQwQzUKKzoxMDYzODAwMDI1OTgwMTAwNzI4NDAwNDA4MUIyMDAwMDAwMDAwMEY4RUUKKzoxMDYzOTAwMDEyQjAwMTAwMDAwMDAwRjAzMEIwMDEwMDAwMDAwMDBCNUUKKzoxMDYzQTAwMDI1QjAwMTAwMDAwMDAwMTAzMkIwMDEwMDE0MDAyMDAxRUYKKzoxMDYzQjAwMEUwQjEwMTAwRUUwNzAwNDAzNzk4MDEwMDc3ODQyMzAxMjcKKzoxMDYzQzAwMDM2NkMwMDAwMDAwMDAwMDEzNkIwMDEwMDgyODQ4MjQxN0EKKzoxMDYzRDAwMDIzNDAwMDAwMjA4MDAwMTA0MkM5MDEwMDdFODQyMjQwM0EKKzoxMDYzRTAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwQjcKKzoxMDYzRjAwMDYyREQwMTAwN0I4NEE4NDA4MTMyMDAwMDIzODMwMDg4OTUKKzoxMDY0MDAwMDFDQjAwMDAwRjM5NDAwNDMyMzMwMDEwMDAwMDAwMDEwOTIKKzoxMDY0MTAwMDMyQjAwMTAwMDAwMDAwNDEyM0IwMDEwMDAwMDAwMDAzODEKKzoxMDY0MjAwMDQ4QjEwMTAwMDA4MDAwMTk0NEM5MDEwMDkzODQyMjQ1NEQKKzoxMDY0MzAwMDFGN0MwMDAwMDQwMEEyNDEyMzZDMDAwMDA0MDBBMjBCOUEKKzoxMDY0NDAwMDI1NkMwMDAwMDAwMDAwNENGMUIxMDEwMDAwMDAwMDA5QzMKKzoxMDY0NTAwMEYwQjEwMTAwMDAwMDAwMThGMEIxMDEwMDAwMDAwMDQzOUQKKzoxMDY0NjAwMDYxQjEwMTAwMjAwMDAwMTk2MkREMDEwMDhBODRBODE1RDUKKzoxMDY0NzAwMEUwMzEwMDAwMDAwMDAwNTAwM0QwMDEwMDAwMDAwMDUwOTcKKzoxMDY0ODAwMDMzQzAwMTAwMDAwMDAwNEMyNUQwMDEwMDBDMDAyRDRDNTEKKzoxMDY0OTAwMDEzQzAwMTAwMDAwMDAwNTAzN0QwMDEwMDAwMDAwMDUwODAKKzoxMDY0QTAwMDJCQzAwMTAwNzc4NDAwNDUxRjgwMDAwMDk1ODRBMzEyNTMKKzoxMDY0QjAwMDM2NkMwMDAwOTY4NDY4MUIyOEIwMDAwMDAwMDA2ODEyNEIKKzoxMDY0QzAwMDI4QjAwMTAwMDAwMDAwMDlGMEIxMDEwMDAwMDAwMDE4MzAKKzoxMDY0RDAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDE5OEIKKzoxMDY0RTAwMDYyREQwMTAwOTk4NEE4MTVFMDMxMDAwMEMxODQyMjE0MDYKKzoxMDY0RjAwMDAyNTAwMDAwMDAwMDAwNTAzM0MwMDEwMDAwMDAwMDE0RjIKKzoxMDY1MDAwMDI0RDAwMTAwMEMwMDJEMTQxMkMwMDEwMEI5ODRBMjE0ODMKKzoxMDY1MTAwMDM2NTAwMDAwQTk4NDIyNUMxRjdDMDAwMDMwODAwMDEwRUYKKzoxMDY1MjAwMDQyQzkwMTAwQTc4NDIyNDBFMzZEMDAwMDAwMDAwMDQyNDAKKzoxMDY1MzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEE0ODRBODQwQTgKKzoxMDY1NDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDAzOUIKKzoxMDY1NTAwMDQ4QjEwMTAwMEMwMDJENUMxRjgwMDEwMDEwMDAwMEYwMEMKKzoxMDY1NjAwMDJBQzgwMTAwMDAwMDAwNUMyQjgwMDEwMDA0MDAyMjUwQkEKKzoxMDY1NzAwMDJCNkMwMDAwRjAwNzAwNDAzNzk4MDEwMEFGODQyMzAxMjYKKzoxMDY1ODAwMDM2NkMwMDAwMDAwMDAwMDEzNkIwMDEwMEJBODQyMjFCMDYKKzoxMDY1OTAwMDAyNkMwMDAwMzAwMDAwMTA0OEM5MDEwMDAwMDAyRTVDQjEKKzoxMDY1QTAwMDFGOTAwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzNDUKKzoxMDY1QjAwMEYwQjEwMTAwRkYwNzAwMTVFMDhEMDEwMDAwMDAwMDQyNkUKKzoxMDY1QzAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMEI2ODRBODQwMTIKKzoxMDY1RDAwMDgxMzIwMDAwQkE4NDAwMDM0OEIxMDAwMDAwMDAwMDE0QkEKKzoxMDY1RTAwMDJBQzAwMTAwNzc4NEEyNDAyNTZDMDAwMDAwMDAwMDQxMTEKKzoxMDY1RjAwMDM5QzAwMTAwMDQwMDIwMTMzODZDMDAwMDQwMDAzRDQzMDYKKzoxMDY2MDAwMDM5RTAwMTAwMDAwMDAwMEIyNUIwMDEwMDAwMDAwMEY4OTcKKzoxMDY2MTAwMDEyQjAwMTAwNzc4NDAwRjAzMEIwMDAwMDA0MDBBMjVDRUEKKzoxMDY2MjAwMDFGN0MwMDAwMDA4MDAwMTk0MkM5MDEwMEM4ODQyMjQwN0MKKzoxMDY2MzAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDE5NUIKKzoxMDY2NDAwMDYyREQwMTAwQzU4NEE4NDA4MTMyMDAwMDIzODMwMDg4RjgKKzoxMDY2NTAwMDFDQjAwMDAwRjM5NDAwNDAyQjMwMDEwMDE4MDAyRTAzMDIKKzoxMDY2NjAwMDQ4QjEwMTAwQ0M4NDIyNTAyRjdDMDAwMDAwMDAwMDU2NkQKKzoxMDY2NzAwMDE3OTAwMTAwMDcwMDAwMTc5ODg4MDEwMENGODRBMjQxRkQKKzoxMDY2ODAwMDk5NkMwMDAwMDAwMDAwNTUxNzkwMDEwMEQyODQyMjQzNEQKKzoxMDY2OTAwMDJGN0MwMDAwMDAwMDAwNTQxNzkwMDEwMDE2MDAyMDFEMDAKKzoxMDY2QTAwMEU0QjEwMTAwRDQ4NEEzNDAyNzZDMDAwMEQ2ODQ2MDVGNkQKKzoxMDY2QjAwMDE3OTAwMDAwMDA4NDAwMEIxNkRDMDEwMDAwMDA2MDEzM0UKKzoxMDY2QzAwMDE2OTQwMTAwMDA5NzAwNUUwNTEwMDEwMDA0MDBBMjQwMkUKKzoxMDY2RDAwMDBGNkMwMDAwMDY4OEEyNUYyRjdDMDAwMDE0ODAwMDAzNkUKKzoxMDY2RTAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMDg2OTMwMDAxREYKKzoxMDY2RjAwMDM4NDMwMTAwMDY4ODAwNDA4MUIyMDAwMDA0MDBBMjAzNzQKKzoxMDY3MDAwMDQ4NkQwMDAwMDQwMDIyNEQ3NTdEMDAwMDAwMDAwMDQwMkYKKzoxMDY3MTAwMDgzQjAwMTAwMDAwMDAwNEQ2MUIxMDEwMDAwMDAwMDE2Q0YKKzoxMDY3MjAwMDgwQjIwMTAwMDQwMDI3NDAxMTZDMDAwMDAwMDAwMDE2MzgKKzoxMDY3MzAwMDYyQjEwMTAwRTM4NEE4NDA4MTMyMDAwMDAwMDAwMDA4M0IKKzoxMDY3NDAwMDYyQjEwMTAwRTU4NEE4NDA4MTMyMDAwMEYwODQyMjEzODgKKzoxMDY3NTAwMDgyNkMwMDAwNDAwMDNENDM4M0UwMDEwMDAwMDAwMEY4MkYKKzoxMDY3NjAwMDEwQjAwMTAwMDAwMDAwRjAyQ0IwMDEwMDAwMDAwMDE2ODUKKzoxMDY3NzAwMDYyQjEwMTAwRUI4NEE4NDA4MTMyMDAwMDAwMDAwMDA4RjMKKzoxMDY3ODAwMDYyQjEwMTAwRUQ4NEE4NDA4MTMyMDAwMEU3ODQwMDQxM0QKKzoxMDY3OTAwMDgzQzAwMDAwMDAwMDE1NDA4MUIyMDEwMDAwODIwMEE2MDUKKzoxMDY3QTAwMDA0QjAwMTAwQTA5ODAwNDA0Nzk5MDEwMDMwMDUwMDQxNjUKKzoxMDY3QjAwMDg5MzAwMTAwQTU5NTAwNTI5NTMwMDEwMEFDOTUwMDRCNDEKKzoxMDY3QzAwMDAyQjAwMDAwMDY4ODAwNDAwRkIwMDAwMDAwMDAwMDVGMkIKKzoxMDY3RDAwMDAxODAwMTAwMTAwMDAwMDAwRUY0MDEwMDA0MDAyNjQwQkEKKzoxMDY3RTAwMDgxMzIwMDAwM0YwMDAwMDAwMDg4MDEwMDA1MDQwMDQwRTUKKzoxMDY3RjAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAzMDAwMDA3MTAKKzoxMDY4MDAwMDFBRjQwMTAwMTg5NTAwMDcxNjMwMDEwMDA4ODUyMjQxOEUKKzoxMDY4MTAwMDgxNkMwMDAwMDM4NTIyNDI4MTZDMDAwMDIzODMwMDg4ODQKKzoxMDY4MjAwMDFDQjAwMDAwMDc4NTIyNUYwRjdDMDAwMDAwMDAwMDVGQTUKKzoxMDY4MzAwMDBGODAwMTAwMDYwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQkEKKzoxMDY4NDAwMDhBMzAwMTAwRjA4NzAwNDAwRkIwMDAwMDE3ODVBMjVBN0YKKzoxMDY4NTAwMDFGN0MwMDAwMDQwMEEyNUExRjdDMDAwMDAwQjUwMDBENDAKKzoxMDY4NjAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwQjcwMDBEQzQKKzoxMDY4NzAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDcwOTQwMDQwMzQKKzoxMDY4ODAwMDgxMzIwMTAwMTc4NTIyMjA4NTZDMDAwMDEyODU5QzBGNDMKKzoxMDY4OTAwMDgwMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDhEOTUwMDVDQ0UKKzoxMDY4QTAwMDFGMDAwMTAwQzg5NzAwNDI2MTMxMDEwMDIzODMwMDg4NjYKKzoxMDY4QjAwMDFDQjAwMDAwOTAwNDAwMDc5NjMwMDEwMDAwMDAyRDA1NzgKKzoxMDY4QzAwMDQ4QjEwMTAwMDQwMEEyNEJFMTdEMDAwMDAwMDAyRDA1NEQKKzoxMDY4RDAwMDQ4QjEwMTAwMDAwMDAwRjAxOEIwMDEwMDFDODUyMjNBMDgKKzoxMDY4RTAwMDAxNkMwMDAwMDAwMDAwMDA4RUIwMDEwMDZDODkwMDQwQzcKKzoxMDY4RjAwMDAxQjAwMDAwMDAwMDAwNDA4MUIyMDEwMDJFMDAyRDA1MTMKKzoxMDY5MDAwMDQ4QjEwMTAwMjE4NUEyNDBFNzZEMDAwMDBBMDAwMDQwNjcKKzoxMDY5MTAwMDhGOTgwMTAwNkM4OTAwNDAwMUIwMDAwMDFEOTQwMDQwNzgKKzoxMDY5MjAwMDgxMzIwMTAwMDQwMDIyMDA4MDMyMDAwMDM1MDQwMDQwNjIKKzoxMDY5MzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDhEOTYwMDk1MjAKKzoxMDY5NDAwMDAzMzAwMTAwMjM4MzAwODgxQ0IwMDAwMDAwMDAyRDAzRTkKKzoxMDY5NTAwMDQ4QjEwMTAwMjIwMDJERjAyRUIwMDEwMDA0MDAxRjE3RTUKKzoxMDY5NjAwMDgwMzIwMDAwMjgyMDAwQTY5NkIwMDEwMDJFODUyMjE3NTQKKzoxMDY5NzAwMDk2MDQwMDAwNUI5NzAwNEI5NTMwMDEwMDZDODkwMDRDMzkKKzoxMDY5ODAwMDhGQjAwMDAwMzA4NTgzMTc4MDMyMDAwMDAwMDAwMDQ0ODMKKzoxMDY5OTAwMDQzQzEwMTAwMzI4NTg1MTc4MDMyMDAwMDAwMDAwMDQ4QTUKKzoxMDY5QTAwMDQzQzEwMTAwMjgwMDAwRjYwMkNDMDEwMDEyMDAwMEExNDIKKzoxMDY5QjAwMDJBQzgwMTAwNUQ5NjAwNDA4MTMyMDEwMEFGOTMwMDQxN0EKKzoxMDY5QzAwMDgxMzAwMTAwNkM4OTAwNDA4MUIyMDAwMDAwMDAwMDAxQUMKKzoxMDY5RDAwMDAwRDAwMTAwMDAwMDJFMTA0OEIxMDEwMDI4MDAwMDQwNDYKKzoxMDY5RTAwMEYxOTkwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwNzcKKzoxMDY5RjAwMEYwQjEwMTAwM0M4NTY0NDc2MTMxMDAwMDAwMDAwMDEwRTcKKzoxMDZBMDAwMDYyQjEwMTAwM0Q4NUE4MUJFMDMxMDAwMDIzODM3NDg4M0EKKzoxMDZBMTAwMDFDQjAwMDAwMDAwMDAwNDUwM0UwMDEwMDA0MDBBMDA1RDgKKzoxMDZBMjAwMDAzNkMwMDAwMDQwMEEzMDkwMzZDMDAwMDA4MDAyRDAzQTAKKzoxMDZBMzAwMDQ4QjEwMTAwNkU4NTAxRkIwODMwMDAwMEQ4ODU4N0ZCNTYKKzoxMDZBNDAwMDIyMzAwMDAwMDAwMDAwRkEwRUIwMDEwMDAwMDAwMEY4NDMKKzoxMDZBNTAwMDE0QjAwMTAwMDMwMDAwMDcxQUY0MDEwMDE4OTUwMDA3QTQKKzoxMDZBNjAwMDE2MzAwMTAwNUY4NTIyNDE4MTZDMDAwMDRFODUyMjQyNzQKKzoxMDZBNzAwMDgxNkMwMDAwMjM4MzAwODgxQ0IwMDAwMDVFODUyMjVGQ0IKKzoxMDZBODAwMDBGN0MwMDAwMzgwMDAwMDQ3RTg5MDEwMDU0ODVBNjVGNTkKKzoxMDZBOTAwMDBGMDAwMDAwMzE5NDAwNDAwNTMwMDEwMDBBMDQwMDQwNUUKKzoxMDZBQTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDVCODUwMDQwNDcKKzoxMDZBQjAwMDgxQjIwMDAwMTMwMDAwNDA4Nzk4MDEwMDAwMDAyRDAzMDAKKzoxMDZBQzAwMDQ4QjEwMTAwMEMwMDJERjA4MkIwMDEwMDAwMDAwMEYwODAKKzoxMDZBRDAwMDg0QjAwMTAwMkM5NjAwNDAwNTMwMDEwMDA4MDQwMDQwRkQKKzoxMDZBRTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA0MDBBMjVDMjUKKzoxMDZBRjAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMEYwODcwMDQwMzgKKzoxMDZCMDAwMDBGQjAwMDAwNkM4NUEyNUExRjdDMDAwMDA0MDBBMjVBM0UKKzoxMDZCMTAwMDFGN0MwMDAwMDBCNTAwMEQ0MkM5MDEwMDA0MDAyMjBCREIKKzoxMDZCMjAwMEU2N0QwMDAwMDBCNzAwMEQ0MkM5MDEwMDA0MDAyMjBCMDEKKzoxMDZCMzAwMEU2N0QwMDAwNzA5NDAwNDA4MTMyMDEwMDZDODUyMjIwQzcKKzoxMDZCNDAwMDg1NkMwMDAwNjk4NTlDMEY4MDMyMDAwMDIzODMwMDg4REIKKzoxMDZCNTAwMDFDQjAwMDAwOEQ5NTAwNUMxRjAwMDEwMEM4OTcwMDQyMkEKKzoxMDZCNjAwMDYxMzEwMTAwMjM4MzAwODgxQ0IwMDAwMDkwMDQwMDA3RkQKKzoxMDZCNzAwMDk2MzAwMTAwMDAwMDJEMDU0OEIxMDEwMDAwMDAwMEYwMzIKKzoxMDZCODAwMDE4QjAwMTAwNzA4NTIxMDQ4MDIwMDAwMDcxODUwMDQwNEMKKzoxMDZCOTAwMDEwQzkwMDAwQTQ4ODAwNEI4MUIwMDAwMDlGODUwMDQzMEQKKzoxMDZCQTAwMDgxQjAwMDAwQTM4NTAwRkIyMkIwMDAwMEE0ODgwMDQxNTIKKzoxMDZCQjAwMDgxQjAwMDAwNkM4OTAwNEU4RkIwMDAwMDk0ODUwMDVBQUYKKzoxMDZCQzAwMDhGQjAwMDAwNzk4NTAwNDc4RkIwMDAwMEE0ODgwMDUzODMKKzoxMDZCRDAwMDgxQjAwMDAwQTQ4ODAwNTY4MUIwMDAwMDMyMDAyRDA1NkQKKzoxMDZCRTAwMDQ4QjEwMTAwMDcwNDAwNDA4OTk4MDEwMDA5OTkwMDAwOUMKKzoxMDZCRjAwMDhBMzAwMTAwM0MwNDAwNDA4OTk4MDEwMDA5OTkwMDBBOEMKKzoxMDZDMDAwMDhBMzAwMTAwM0QwNDAwNDA4OTk4MDEwMDE4MDAwMDExRkQKKzoxMDZDMTAwMDhBRTQwMTAwMDk5OTAwRjI4QTE0MDEwMDAwMDAwMDQwOTIKKzoxMDZDMjAwMDgxQjIwMTAwNkM4OUEwMEFFNDZEMDAwMDg3ODVBMjQxNTEKKzoxMDZDMzAwMDE5N0MwMDAwODY4NTIyMEE4MDMyMDAwMDZDODkwMDUzOEUKKzoxMDZDNDAwMDhGQjAwMDAwNkM4OTAwNTQ4RkIwMDAwMDkwODUyMjBBM0MKKzoxMDZDNTAwMDgwMzIwMDAwOEE4NUEyMEFFNDZEMDAwMDZDODkwMDVEMjQKKzoxMDZDNjAwMDhGQjAwMDAwMDAwMDAwRjI4MEIwMDEwMDAwMDAwMDBBQjgKKzoxMDZDNzAwMDgwRDAwMTAwOEU4NUEwOTE4MTZDMDAwMDZDODkwMDVFM0YKKzoxMDZDODAwMDhGQjAwMDAwMjUwMDAwNDA4Rjk4MDEwMDZDODkwMDQwMDMKKzoxMDZDOTAwMDgxQjIwMDAwOTI4NTIwOTFFNTZEMDAwMDZDODkwMDU0NUUKKzoxMDZDQTAwMDhGQjAwMDAwMjEwMDAwNDA4Rjk4MDEwMDZDODkwMDQwRTcKKzoxMDZDQjAwMDgxQjIwMDAwMzIwMDJEMDU0OEIxMDEwMDA3MDQwMDQwRjgKKzoxMDZDQzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDNDMDQwMDQwQzUKKzoxMDZDRDAwMDg5OTgwMTAwMDk5OTAwMEE4QTMwMDEwMDNEMDQwMDQwQUEKKzoxMDZDRTAwMDg5OTgwMTAwMDk5OTAwRjI4QTMwMDEwMDAwMDAwMDQwRjMKKzoxMDZDRjAwMDgxQjIwMTAwNkM4OUEwMEFFNDZEMDAwMDI0MDAwMDQwMEMKKzoxMDZEMDAwMDhGOTgwMTAwNkM4OTAwNDA4MUIyMDAwMDM3MDAyRDA1OEEKKzoxMDZEMTAwMDQ4QjEwMTAwMDQwMDAwRjM4MkY0MDEwMEE0ODhBMDQyRkQKKzoxMDZEMjAwMDgzNkMwMDAwQTQ4ODAwNTQ4MUIwMDAwMDAwMDAwMEYyRDEKKzoxMDZEMzAwMDBFQjAwMTAwMDQwMDIzNDAwRjZDMDAwMDA0MDAyMEFBRTQKKzoxMDZENDAwMDBGNkMwMDAwMDkwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQjcKKzoxMDZENTAwMDhBMzAwMTAwMDMwMDAwMDcxQUY0MDEwMDAwQjUwMDBEOUQKKzoxMDZENjAwMDQyQzkwMTAwMDcwMDAwMDcxNjg4MDEwMEIxODUyMjBCMDcKKzoxMDZENzAwMEU2N0QwMDAwMEEwMDAwNDA4Nzk4MDEwMDdGOTgwMDQwRUYKKzoxMDZEODAwMDgxMzIwMTAwMDQwMDFDMEY4MDMyMDAwMDAwMDAwMDQwMkUKKzoxMDZEOTAwMDBGQjAwMTAwRjA4NzAwNUMxRjkwMDAwMEMzODUyMjUwRjcKKzoxMDZEQTAwMEZEN0YwMDAwQkU4NUEyNTRGRDdGMDAwMEI2ODUyMjU1MDAKKzoxMDZEQjAwMEZEN0YwMDAwODIwMDAwNDA4Nzk4MDEwMEFEODUwMDQwMDMKKzoxMDZEQzAwMDgxQjIwMDAwMDQwMDIyNTNGRDdGMDAwMDE0ODAwMDAzMDQKKzoxMDZERDAwMDQyQzkwMTAwMDAwMDAwRjA5NkIwMDEwMDEwMDAwMDRCMTUKKzoxMDZERTAwMDgwRjQwMTAwMENCQzAwNDA4Nzk4MDEwMEJFODUyMjQzNUUKKzoxMDZERjAwMDgwNkMwMDAwRkZGRjAwNEI4MDg4MDEwMEFEODVBMjQzM0UKKzoxMDZFMDAwMDgwNkMwMDAwN0M5NjAwNDA0Nzk5MDEwMEJGODU0NjQwOTkKKzoxMDZFMTAwMDgxMzIwMDAwQzI4NUEwRjAzMDZGMDAwMEI0ODUxRTQwQjIKKzoxMDZFMjAwMDgxQjIwMDAwMDAwMDFFNDEzMUMzMDEwMDdGOTQwMDQwODgKKzoxMDZFMzAwMDI1MzAwMTAwQzc4NTlDMEY4MDMyMDAwMDIzODMwMDg4MjUKKzoxMDZFNDAwMDFDQjAwMDAwOEQ5NTAwNUMxRjAwMDEwMDE0ODAwMDAzNDEKKzoxMDZFNTAwMDQyQzkwMTAwMDQwMDIyNUExRjdDMDAwMDAwMDAwMEYwMUIKKzoxMDZFNjAwMDk2QjAwMTAwMDAwMDJGMDU0OEIxMDEwMDEwMDAwMDA3OTYKKzoxMDZFNzAwMDE4RTQwMTAwMDAwODAwMENFMDk5MDEwMDkwMDQwMDA3RUMKKzoxMDZFODAwMDk2MzAwMTAwMDBCNTAwMEQ0NkM5MDEwMENGODUzMDQwQTUKKzoxMDZFOTAwMDgxMzIwMDAwMDQwMEEyMEJFNjdEMDAwMDAwMDAwMDBCMjAKKzoxMDZFQTAwMEU2OTEwMTAwMDAwMjAwQTE0NkM5MDEwMDA0MDBBMjBCMDYKKzoxMDZFQjAwMEU2N0QwMDAwMDAwMDAwMEJFNjkxMDEwMDA0MDAyRTA1QjUKKzoxMDZFQzAwMDQ4QjEwMTAwMDAwMDEwNDBFMUIxMDEwMEE0ODgwMDQwNzkKKzoxMDZFRDAwMDgxQjAwMDAwMDAwMDAwRkIyOEIwMDEwMDAwMDAwMEZCQjIKKzoxMDZFRTAwMDg2QjAwMTAwMDAwMDAwRjgxNEIwMDEwMEUzODUyMjQ2REUKKzoxMDZFRjAwMDIzN0MwMDAwMDQwMDIyNDA4NzZDMDAwMERGODUyMjQwRDQKKzoxMDZGMDAwMDg3N0MwMDAwMDAwMDAwNDgxRjkwMDEwMEUxODUyMjQxQkQKKzoxMDZGMTAwMDg3N0MwMDAwMDAwMDAwNDcxRjkwMDEwMEUzODUyMjQyQUIKKzoxMDZGMjAwMDg3N0MwMDAwMDAwMDAwNDUxRjkwMDEwMDA0MDAyMjQwMDMKKzoxMDZGMzAwMDA5N0MwMDAwRTQ4NTY2MUIyQzMwMDAwMDAwMDAwMEEwRTYKKzoxMDZGNDAwMDEzQjAwMTAwMDAwMDc2NDE0MUMzMDEwMDE2ODYyMzkyNzAKKzoxMDZGNTAwMDE1NkMwMDAwMTY4NkEyNDUxRjdDMDAwMDFDODYyMjRCODMKKzoxMDZGNjAwMEZEN0YwMDAwMTcwMDAwRDBBMkM5MDEwMDAwMDAwMDQwMTIKKzoxMDZGNzAwMDI3QjAwMTAwMDIwMDAwMEEyNEM4MDEwMEJGOTQwMDQwQUQKKzoxMDZGODAwMDBGMzAwMTAwMTQ4NjIyMDg0MDMwMDAwMDAwMDAwMDQxNEMKKzoxMDZGOTAwMEEzQzEwMTAwRjAwNzAwMTIyNENDMDEwMEVEODVBQTQxMzUKKzoxMDZGQTAwMDI3NDAwMDAwMDQwMEEzNDkyNzZDMDAwMDAxMDAwMDEzRTMKKzoxMDZGQjAwMDgwQ0MwMTAwMEU4NjI2NDAyMzMwMDAwMDAwMDAwMDQwRjcKKzoxMDZGQzAwMDgzQjAwMTAwNjAwMDAwMDM4NEM4MDEwMDEwMDAwMDEwQkQKKzoxMDZGRDAwMDQ4Q0QwMTAwMTcwMDAwRDBBMkM5MDEwMEZCODVBMjQwRTYKKzoxMDZGRTAwMDgzNkMwMDAwMDc4NjAwNDE4M0IwMDAwMDAwODAwMDQyRUYKKzoxMDZGRjAwMDQ0OTkwMTAwMDAwMDY4MjEzODk2MDEwMDAwMDAyRTUwREQKKzoxMDcwMDAwMDQ5QzEwMTAwMDA4NkEyNDQyMzZDMDAwMDMwMDAwMDAzNDcKKzoxMDcwMTAwMDQ4QzkwMTAwMDAwMDAwNDRGMUIxMDEwMDBDMDAwMDIwNEIKKzoxMDcwMjAwMEYwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMEEwMDAwMEE0MEIKKzoxMDcwMzAwMDYyREQwMTAwMDM4NkE4NDJFMDMxMDAwMDAwMDAwMDQ0NDgKKzoxMDcwNDAwMDg1QzAwMTAwMDAwMDAwNDEyM0MwMDEwMDAwMDAwMDQxOTQKKzoxMDcwNTAwMEEzQzEwMTAwRjk4NUEyNDE4MTUwMDAwMDBFODYyMjQwQTMKKzoxMDcwNjAwMDIzNkMwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwRUEKKzoxMDcwNzAwMDYyREQwMTAwMEI4NkE4NDA4MTMyMDAwMDIzODMwMDg4NzYKKzoxMDcwODAwMDFDQjAwMDAwMEIwNDAwNDA4OTk4MDEwMDA5OTkwMDAwMjEKKzoxMDcwOTAwMDhBMzAwMTAwMDAwMDAwMDM0OEIxMDEwMEVFMDcwMDQwMDMKKzoxMDcwQTAwMDI1OTgwMTAwMTcwMDAwRDAyQUM4MDEwMDI3ODYwMDE3ODQKKzoxMDcwQjAwMDEwQjAwMDAwMEE5NzAwNDA4MTMyMDEwMDFDODYwMDQwOTkKKzoxMDcwQzAwMDgxQjIwMDAwQkY5NDAwOTIyNTMwMDEwMDAwMDAwMDQwMTIKKzoxMDcwRDAwMDMxQjAwMTAwMEIwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQkIKKzoxMDcwRTAwMDhBMzAwMTAwMUM4NjIyMDgyRTMwMDAwMDI3ODYwMDQxQ0QKKzoxMDcwRjAwMDI3QjAwMDAwODA4MDAwQTYwNEIwMDEwMDA2MDAwMDQwMTgKKzoxMDcxMDAwMDg3OTgwMTAwN0Y5ODAwMEE4QzMwMDEwMDA0MDAxQzBGNTIKKzoxMDcxMTAwMDgwMzIwMDAwMDAwMDAwNDAwRkIwMDEwMDAwMDAwMDVDNjEKKzoxMDcxMjAwMDFGOTAwMTAwMDQwMEEwOUYxMzZDMDAwMDI2ODYyMjlGODAKKzoxMDcxMzAwMDEzNkMwMDAwMDIwMDAwODgxQ0NDMDEwMDI3ODMwMDQwNzMKKzoxMDcxNDAwMDgxQjIwMDAwRjA4NzAwNDEzRkMzMDAwMDAwMDAwMDQwMTIKKzoxMDcxNTAwMDBGQjAwMTAwMjgwMDAwMDE4MENFMDEwMDNCODYyQTQwQ0MKKzoxMDcxNjAwMDgxMzAwMDAwMDA4MDAwMTA0NEM5MDEwMDQwMDAwMDQwNTAKKzoxMDcxNzAwMDgxOTgwMTAwMzA4NkEyNDgxRjdDMDAwMDMwODZBMjQ3MUIKKzoxMDcxODAwMDFGN0MwMDAwMzA4NkEzMDcwMzZDMDAwMDgwMDAwMDQwRDUKKzoxMDcxOTAwMDgxOTgwMTAwMzM4NkEzNDAwMjZDMDAwMDI4MDAwMDAxQTIKKzoxMDcxQTAwMEYwQ0QwMTAwMzU4NjAwNDAwRkIwMDAwMDI4MDAwMDQwRkYKKzoxMDcxQjAwMEYwQ0QwMTAwMDQwMDAwNDAwRUNDMDEwMDI4MDAwMDAzQzcKKzoxMDcxQzAwMEYwQzkwMTAwMjgwMDAwMDBGMEM5MDEwMDAwMDAwMDE2MEQKKzoxMDcxRDAwMEUwQjEwMTAwMDAwMDAwNDc2MUIxMDEwMDIwMDAwMDEwOTMKKzoxMDcxRTAwMDYyREQwMTAwMzk4NkE4NUMxRjEwMDAwMDA0MDAyMjBBM0QKKzoxMDcxRjAwMDgwMzIwMDAwMDQwMEEyMDM0ODZEMDAwMDAwMDAwMDQwM0YKKzoxMDcyMDAwMDQzOTkwMTAwMDAwMDAwRjAwOEIwMDEwMEEwMDEyRDQwRUEKKzoxMDcyMTAwMDAwQzAwMTAwMUM4NzIyMEY0MjA1MDAwMDRFODY5QzBGMTMKKzoxMDcyMjAwMDgwMzIwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwMjAKKzoxMDcyMzAwMDQyQzkwMTAwNDk4NjIyNDBFMzZEMDAwMDAwMDAwMDQ3N0EKKzoxMDcyNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDQ2ODZBODQwRTcKKzoxMDcyNTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDRFODYyMjA3ODQKKzoxMDcyNjAwMDgwMzIwMDAwMDAwMDAwMDM0MkIxMDEwMDAwMDAwMDA3NkUKKzoxMDcyNzAwMDQyQzEwMTAwMDA4MDAwQTE0Njk5MDEwMDAwMDAwMDVGQUEKKzoxMDcyODAwMEUxOTEwMTAwQzAwNkEyNDUxRjdDMDAwMDEwMDAwMDAzMzAKKzoxMDcyOTAwMDQ4QzkwMTAwMDAwMDJENTQyOUMwMDEwMDAwMDAwMEY4NzkKKzoxMDcyQTAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDAwMDAwMEY4NzAKKzoxMDcyQjAwMDBFQjAwMTAwMDQwMDI2NDA4MTMyMDAwMDA0MDBBMjVGRUQKKzoxMDcyQzAwMDBGN0MwMDAwM0UwMDAwMTQ4MENFMDEwMDA0MDBBQTQwQTQKKzoxMDcyRDAwMDgxMzIwMDAwNDIwMDAwMDMwQUM4MDEwMDBDMDAwMEE0MzMKKzoxMDcyRTAwMDBDQzgwMTAwMTY5NTAwNDA4MTMyMDEwMDAwMDAwMDE0MTYKKzoxMDcyRjAwMDAyQjAwMTAwMDAwMDAwMTQyNEQwMDEwMDAwMDAwMDE0QkUKKzoxMDczMDAwMDEwQzAwMTAwMTIwMDAwMDgxMEM4MDEwMDAwMDAwMDQwNzkKKzoxMDczMTAwMDIzQjAwMTAwRkU3RjAwMDU0NEM5MDEwMDA0MDBBMkEyQzEKKzoxMDczMjAwMDg2MDYwMDAwMDAwMDAwMEFFNEIxMDEwMDdDODYyMjAxMEMKKzoxMDczMzAwMDgwMzIwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAyRUE0NDUKKzoxMDczNDAwMDgwQjAwMTAwMDAwMDAwMTA0OEMxMDEwMDY5ODZBMzA3NTkKKzoxMDczNTAwMDAyNkMwMDAwNkE4NjY4MDExQUIwMDAwMDAwMDA2ODA3MkQKKzoxMDczNjAwMDFBQjAwMTAwMDAwMDAwMEQwMkQwMDEwMDAwMDAwMDA1NkQKKzoxMDczNzAwMEYwQjEwMTAwMDAwMDAwMENGMEIxMDEwMDAwMDAwMDAyQkIKKzoxMDczODAwMEUwQjEwMTAwMDAwMDAwMEQwQUMwMDEwMDc2ODYyMjQwMzUKKzoxMDczOTAwMDAzNkMwMDAwNzY4NjIyNDIyMzZDMDAwMDAwMDAwMDQxNEUKKzoxMDczQTAwMDIzQzAwMTAwMDAwMDAwNDc2MUIxMDEwMEEwMDAwMEE0NUIKKzoxMDczQjAwMDYyREQwMTAwOUM4NjI4NDA4MTMyMDAwMDczODYwMDQwMTcKKzoxMDczQzAwMDgxQjIwMDAwMDAwMDAwMTA4MEMwMDEwMDAwMDAwMDQ3RjIKKzoxMDczRDAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMDc4ODZBODQwNjAKKzoxMDczRTAwMDIzMzAwMDAwMjM4MzAwODgxQ0IwMDAwMDlDODYwMDQwRUUKKzoxMDczRjAwMDgxQjIwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAwMEE0MzIKKzoxMDc0MDAwMDg2QjAwMTAwMDAwMDJFMTA0OEMxMDEwMDgxODZBMzEyNDEKKzoxMDc0MTAwMDBFNkMwMDAwODI4NjYwMDcxQUIwMDAwMDAwMDA2MDEyNDcKKzoxMDc0MjAwMDFBQjAwMTAwMDAwMDY4MEQxNjk0MDEwMEZGRkYwMDBCNjgKKzoxMDc0MzAwMDE2RDgwMTAwMUI5OTAwMDg5ODMwMDEwMDAwMDA2ODA4NjgKKzoxMDc0NDAwMDNFOTYwMTAwMDAwMDAwMENGMEIxMDEwMDAwMDAwMDAyQjcKKzoxMDc0NTAwMEUwQjEwMTAwMDAwMDAwMTA4NkMwMDEwMDAwMDAwMDQ2RkQKKzoxMDc0NjAwMDYxQjEwMTAwMjAwMDAwNDM2MkREMDEwMDhBODZBODVDNTIKKzoxMDc0NzAwMDFGMTAwMDAwQkM4NjIyMEQxNDZDMDAwMDkwODYyMjBEQTcKKzoxMDc0ODAwMDI0NkMwMDAwMDAwMDAwMEQxMEMwMDEwMDk1ODYwMDBENjYKKzoxMDc0OTAwMDI0RDAwMDAwMDQwMDIyNEJGRDdGMDAwMDAwMDAwMDQxQ0EKKzoxMDc0QTAwMDJCQzAwMTAwMDAwMDAwMTVBMkIxMDEwMDEwMDAwMDIwNTcKKzoxMDc0QjAwMDEwQzgwMTAwRjAwNzAwNDAyNTk4MDEwMDk3ODYyMjQyN0QKKzoxMDc0QzAwMDIzNkMwMDAwOUM4NjAwNDEyM0MwMDAwMDAwMDAwMDQ2QTEKKzoxMDc0RDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk4ODZBODVDRTcKKzoxMDc0RTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDQwNDMKKzoxMDc0RjAwMDIzQjAwMTAwQkM4NjIyMEQxNDUwMDAwMEJCODZBMjBERjMKKzoxMDc1MDAwMDBFNTAwMDAwQTg4NjIyNDYxRjdDMDAwMDAwMDAwMDQ2QTYKKzoxMDc1MTAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMEE2ODYyMjQwNzEKKzoxMDc1MjAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNjEKKzoxMDc1MzAwMDYyREQwMTAwQTM4NkE4NDA4MTMyMDAwMDIzODMwMDg4MTkKKzoxMDc1NDAwMDFDQjAwMDAwMjA4MDAwMDM0Njk5MDEwMDAwMDAwMDVGOEQKKzoxMDc1NTAwMEUxOTEwMTAwMDAwMDJEMDY0OEIxMDEwMDAwMDAwMEY4OTMKKzoxMDc1NjAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDA0MDAyMkYwOEYKKzoxMDc1NzAwMDBFMzAwMDAwQUU4NkEyNUYwRjdDMDAwMDYzODYwMDRDRDgKKzoxMDc1ODAwMDBEQzAwMDAwMDAwMDJFNUYwRjgwMDEwMDYzODYyMzA3RkUKKzoxMDc1OTAwMDE0NkMwMDAwMDQwMEEyNDYxRjdDMDAwMDMwMDAwMDEwQTQKKzoxMDc1QTAwMDQ4QzkwMTAwMjQwMDAwNDBGMTk5MDEwMDAwMDAwMDAzRDcKKzoxMDc1QjAwMEYwQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDE2NzEKKzoxMDc1QzAwMEYwQjEwMTAwMjQwMDAwMDAwMEM4MDEwMDAwMDAwMDQ3RTUKKzoxMDc1RDAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMEI4ODZBODQ2RTgKKzoxMDc1RTAwMDFGMTAwMDAwNjM4NjAwMDMwQ0IwMDAwMDYzODYwMDBEQ0UKKzoxMDc1RjAwMDE4QzAwMDAwMDQwMDJFMTQwQUQwMDEwMDEyMDAwMDA1N0IKKzoxMDc2MDAwMDQ4Q0QwMTAwRkU3RjAwMDU0MkM5MDEwMDA0MDBBMkE0OEMKKzoxMDc2MTAwMDg2MDYwMDAwMDQwMEEyQTE4NjA2MDAwMDBDMDAyQUYyRTMKKzoxMDc2MjAwMEUwQjEwMTAwQzQ4NjIyNDAzMTZDMDAwMDAwMDA2MDE4MDcKKzoxMDc2MzAwMDM4OTYwMTAwMUUwMDAwNDA0Mzk5MDEwMDAwODEwMEY2QzkKKzoxMDc2NDAwMDgwQ0UwMTAwQzg4NkE2NDA4MTMyMDAwMDAwMDAwMDQ0QzAKKzoxMDc2NTAwMDQzQzEwMTAwQ0E4NjIyMEJFRDZEMDAwMDA4MDAwMEExQTUKKzoxMDc2NjAwMDQyQzkwMTAwMDIwMDAwQTE0NkM5MDEwMDA0MDBBMkExMTQKKzoxMDc2NzAwMDg2MDYwMDAwMEYwMDAwRkE5NDg4MDEwMDA0MDBBMjQ1NkQKKzoxMDc2ODAwMDk1NkMwMDAwMDIwMDAwNEE4NkU0MDEwMDAwMDAwMEY2NEMKKzoxMDc2OTAwMDBFQjAwMTAwRDQ4NjIyNDcxRjdDMDAwMDA0MDAxRjQzNjcKKzoxMDc2QTAwMDBFNTAwMDAwRDQ4NkEwNDYwRjQwMDAwMDAwMDAwMDQxQUMKKzoxMDc2QjAwMDBGQzAwMTAwRDg4NjIyNDgxRjdDMDAwMDAwMDAwMDQwNTcKKzoxMDc2QzAwMDkxQjAwMTAwMDQwMDBGQTI0MjMxMDAwMERCODYwMDQwQUYKKzoxMDc2RDAwMDg5QjAwMDAwMEMwMDAwQTI0MkM5MDEwMDAwMDAwMDQzNzQKKzoxMDc2RTAwMDg5QjAwMTAwMDAwMDAwNDM5NUQwMDEwMDAwMDAwMEZDQkIKKzoxMDc2RjAwMDgyQjAwMTAwREU4NkEwNDE5MDQwMDAwMDAwMDAwMDQxMDEKKzoxMDc3MDAwMDkxQzAwMTAwRTM4NjIyNDcxRjdDMDAwMEUzODZBMDQzNkUKKzoxMDc3MTAwMDg5NkMwMDAwRTM4NjIwNDU4OTZDMDAwMEUzODZBMDQxNjcKKzoxMDc3MjAwMDBFNDAwMDAwMDAwMDAwNDEwRkMwMDEwMDAwMDAwMDQxQjkKKzoxMDc3MzAwMDg5QzAwMTAwREI4NkEyNDE5NTUwMDAwMEYwODYyMjQ4RjYKKzoxMDc3NDAwMDFGN0MwMDAwMTAwMDAwNDg5MkY0MDEwMEZGRkYwMDQ4NzkKKzoxMDc3NTAwMDkwODgwMTAwRUE4NjkwNDg5MjQwMDAwMDAwMDAwMDQxQjUKKzoxMDc3NjAwMDkzQzAwMTAwMEEwMDAwQTI0NEM5MDEwMDAwMDA2NjIwODUKKzoxMDc3NzAwMDkzQTQwMTAwMEEwMDAwNDM4MENDMDEwMDAwMDAwMEEyOTUKKzoxMDc3ODAwMDgwQzAwMTAwMDQwMEEyNDA0MjZEMDAwMDA0MDBBMkExREMKKzoxMDc3OTAwMDg2MDYwMDAwMDQwMEEyNDYxRjdDMDAwMDFCOTkwMDE3MEIKKzoxMDc3QTAwMDk4MzAwMTAwRkYwNzAwMTc3RTg5MDEwMDA0MDBBNjQwMDEKKzoxMDc3QjAwMDgxMzIwMDAwMzA4MDAwMTA0NEM5MDEwMDEyMDAwMDE0MjIKKzoxMDc3QzAwMEYwQzkwMTAwMDAwMDAwMTdGMEIxMDEwMDEyMDAwMDA1MkYKKzoxMDc3RDAwMEUwQ0QwMTAwMzAwMDAwMTA4MEM4MDEwMDAwMDAwMDQ0MkUKKzoxMDc3RTAwMDYxQjEwMTAwMjAwMDAwNDA2MkREMDEwMEZBODZBODQwN0UKKzoxMDc3RjAwMDgxMzIwMDAwMDU4NzIyNUMxRjdDMDAwMDAwMDAzQzQ0QjEKKzoxMDc4MDAwMDIzRTAwMTAwMDAwMDJEMTA0OEMxMDEwMDA0ODcyMjQwNDAKKzoxMDc4MTAwMEUzNkQwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwNkYKKzoxMDc4MjAwMDYyREQwMTAwMDE4N0E4NDA4MTMyMDAwMDIzODMwMDg4QzcKKzoxMDc4MzAwMDFDQjAwMDAwMDAwMDAwNUMxRjgwMDEwMDA4ODdBMjQ3MDgKKzoxMDc4NDAwMDFGN0MwMDAwMEM5NTAwNDA4MTMyMDEwMDg4ODcwMDE3RTIKKzoxMDc4NTAwMDEwQjAwMDAwMTM5NTAwNDA4MTMyMDEwMDAwMDAyRjAzOUEKKzoxMDc4NjAwMDQ4QjEwMTAwMEM4N0EwMDcxNjQwMDAwMDAwMDAwMDQxNEQKKzoxMDc4NzAwMDE3QzAwMTAwMDAwMDAwMEJFNEIxMDEwMDAwMDAwMDUwM0YKKzoxMDc4ODAwMDE3RjAwMTAwMTA4NzkwRjIxNjQwMDAwMDAwMDAwMDQxNDAKKzoxMDc4OTAwMDE3QzAwMTAwMDAwMDY2MjAxN0E0MDEwMDEwMDAwMDE0QUEKKzoxMDc4QTAwMDJBQzgwMTAwMDAwMDAwNTAyQkUwMDEwMDAwMDAwMEYyOTcKKzoxMDc4QjAwMDJBOTQwMTAwMzA4MDAwMTA0MkM5MDEwMDFBODcyMjQwM0EKKzoxMDc4QzAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwQzEKKzoxMDc4RDAwMDYyREQwMTAwMTc4N0E4NDA4MTMyMDAwMDIzODMwMDg4MDEKKzoxMDc4RTAwMDFDQjAwMDAwMDA4MDAwMTcxMERDMDEwMDg4ODcwMDQwRjkKKzoxMDc4RjAwMDgxQjIwMDAwMjQ4NzlDMEY4MDMyMDAwMDAwMDAwMDVDRjEKKzoxMDc5MDAwMDFGODAwMTAwMDA4MDAwMTA0MkM5MDEwMDI0ODcyMjQwMkUKKzoxMDc5MTAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNkQKKzoxMDc5MjAwMDYyREQwMTAwMjE4N0E4NDA4MTMyMDAwMDIzODMwMDg4QTYKKzoxMDc5MzAwMDFDQjAwMDAwMjk4NzIyMDc4MDMyMDAwMDAwMDAwMDAzRUQKKzoxMDc5NDAwMDQyQjEwMTAwMDAwMDAwMDc0MkMxMDEwMDAwODAwMEExMTcKKzoxMDc5NTAwMDQ2OTkwMTAwMDAwMDAwNUZFMTkxMDEwMDA0MDAyRTAzNDAKKzoxMDc5NjAwMDQ4QjEwMTAwMDAwMDAwMEFFMEIxMDEwMDJFODcyMjQwNkEKKzoxMDc5NzAwMDMxNkMwMDAwMEMwMDAwNDA0NTk5MDEwMDAwMDA2MDE4QzcKKzoxMDc5ODAwMDM4OTYwMTAwMDAwMDJFMTA0OEIxMDEwMDAwMDAwMDUwQTAKKzoxMDc5OTAwMEYxQjEwMTAwMDAwMDAwMDhGMEIxMDEwMDAwMDAwMDAzOTcKKzoxMDc5QTAwMEUwQjEwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwREUKKzoxMDc5QjAwMDYyQjEwMTAwMzM4N0E4NDAyMzMwMDAwMDIzODMwMDg4OTAKKzoxMDc5QzAwMDFDQjAwMDAwMDAwMDJENTIxMUMwMDEwMDEwMDAwMDAzODcKKzoxMDc5RDAwMDQ4QzkwMTAwMDAwMDAwRjgxOEIwMDEwMDAwMDAwMEY4REMKKzoxMDc5RTAwMDA0QjAwMTAwMDAwMDAwRjgwRUIwMDEwMDBDMDAwMEE0N0IKKzoxMDc5RjAwMDBDQzgwMTAwMDQwMDIyNDAxNTZDMDAwMDAwMDAzQzQ0NEIKKzoxMDdBMDAwMDIzRTAwMTAwMDAwMDAwQTQ4NkIwMDEwMDAwMDAyRTEwNTkKKzoxMDdBMTAwMDQ4QzEwMTAwNDI4N0EzMTIwRTZDMDAwMDQzODc2ODA3MkIKKzoxMDdBMjAwMDFBQjAwMDAwMDAwMDY4MTIxQUIwMDEwMDFCOTkwMDA4OEIKKzoxMDdBMzAwMDk4MzAwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMDEwRjkKKzoxMDdBNDAwMDg2QzAwMTAwMDAwMDY4MDgzRTk2MDEwMDAwMDAwMDBDOUUKKzoxMDdBNTAwMEYwQjEwMTAwMDAwMDAwMDJFMEIxMDEwMDAwMDAwMDQ2QUEKKzoxMDdBNjAwMDYxQjEwMTAwMjAwMDAwNDM2MkREMDEwMDRBODdBODVDOEIKKzoxMDdBNzAwMDFGMTAwMDAwN0M4NzIyMEQxNDZDMDAwMDUwODcyMjBEMUYKKzoxMDdBODAwMDI0NkMwMDAwMDAwMDAwMEQxMEMwMDEwMDU1ODcwMDBEOUYKKzoxMDdBOTAwMDI0RDAwMDAwMDQwMDIyNEJGRDdGMDAwMDAwMDAwMDQxQzQKKzoxMDdBQTAwMDJCQzAwMTAwMDAwMDAwMTVBMkIxMDEwMDEwMDAwMDIwNTEKKzoxMDdBQjAwMDEwQzgwMTAwRjAwNzAwNDAyNTk4MDEwMDU3ODcyMjQyQjYKKzoxMDdBQzAwMDIzNkMwMDAwNUM4NzAwNDEyM0MwMDAwMDAwMDAwMDQ2REEKKzoxMDdBRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDU4ODdBODVDMjAKKzoxMDdBRTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDQwM0QKKzoxMDdBRjAwMDIzQjAwMTAwMDQwMDIyMEQxNDUwMDAwMDdCODdBMjBENkEKKzoxMDdCMDAwMDBFNTAwMDAwNjg4NzIyNDYxRjdDMDAwMDAwMDAwMDQ2REYKKzoxMDdCMTAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMDY2ODcyMjQwQUEKKzoxMDdCMjAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNUIKKzoxMDdCMzAwMDYyREQwMTAwNjM4N0E4NDA4MTMyMDAwMDIzODMwMDg4NTIKKzoxMDdCNDAwMDFDQjAwMDAwMjA4MDAwMDM0Njk5MDEwMDAwMDAwMDVGODcKKzoxMDdCNTAwMEUxOTEwMTAwMDAwMDJEMDY0OEIxMDEwMDAwMDAwMEY4OEQKKzoxMDdCNjAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDA0MDAyMkYwODkKKzoxMDdCNzAwMDBFMzAwMDAwNkU4N0EyNUYwRjdDMDAwMDNDODcwMDRDMzcKKzoxMDdCODAwMDBEQzAwMDAwMDAwMDJFNUYwRjgwMDEwMDNDODcyMzA3MUUKKzoxMDdCOTAwMDE0NkMwMDAwMDQwMEEyNDYxRjdDMDAwMDMwMDAwMDEwOUUKKzoxMDdCQTAwMDQ4QzkwMTAwMjQwMDAwNDBGMTk5MDEwMDAwMDAwMDAzRDEKKzoxMDdCQjAwMEYwQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDE2NkIKKzoxMDdCQzAwMEYwQjEwMTAwMjQwMDAwMDAwMEM4MDEwMDAwMDAwMDQ3REYKKzoxMDdCRDAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDc4ODdBODQ2MjEKKzoxMDdCRTAwMDFGMTAwMDAwM0M4NzAwMDMwQ0IwMDAwMDNDODcwMDBEMTQKKzoxMDdCRjAwMDE4QzAwMDAwMDQwMEEyNDYxRjdDMDAwMDg2ODcyMjVDOUIKKzoxMDdDMDAwMDFGN0MwMDAwMDAwMDAwNUMxRjgwMDEwMDAwMDAzQzQ0NUQKKzoxMDdDMTAwMDIzRTAwMTAwMDAwMDJEMTA0OEMxMDEwMDg2ODcyMjQwQUEKKzoxMDdDMjAwMEUzNkQwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwNUIKKzoxMDdDMzAwMDYyREQwMTAwODM4N0E4NDA4MTMyMDAwMDIzODMwMDg4MzEKKzoxMDdDNDAwMDFDQjAwMDAwMDAwMDAwMTcxMEIwMDEwMDg4ODcwMDQwNDEKKzoxMDdDNTAwMDJCQjAwMDAwMDA4MDAwMDM0NDk5MDEwMDAwMDAwMDA0RTQKKzoxMDdDNjAwMEUwQjEwMTAwMDQwMDI2NDA4MTMyMDAwMDA0MDBBMDlGMjIKKzoxMDdDNzAwMDEzNkMwMDAwOEY4NzIyOUYxMzZDMDAwMDAyMDAwMDg4QTUKKzoxMDdDODAwMDFDQ0MwMTAwMjc4MzAwNDA4MUIyMDAwMDk0OTgwMDQxODEKKzoxMDdDOTAwMDNGNDMwMTAwMDAwMDAwNDA4REIwMDEwMDAwMDAwMDQwQTMKKzoxMDdDQTAwMDA1QjAwMTAwN0Y5ODAwNDAwRjMwMDEwMDA0MDBBMjVDODUKKzoxMDdDQjAwMDFGN0MwMDAwMDY4ODAwNUMxRjkwMDAwMDEwMDAwMDAwODAKKzoxMDdDQzAwMDBFRjQwMTAwMDQwMDI2NDA4MTMyMDAwMDAwMDAwMDNBNUEKKzoxMDdDRDAwMDAxODQwMTAwOUI4NzIyNTAwMTZDMDAwMDBEMDQwMDQwQ0MKKzoxMDdDRTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAzMDAwMDA3MEIKKzoxMDdDRjAwMDFBRjQwMTAwMTg5NTAwMDcxNjMwMDEwMEE2ODcyMjQxRUEKKzoxMDdEMDAwMDgxNkMwMDAwQTE4NzIyNDI4MTZDMDAwMDIzODMwMDg4REYKKzoxMDdEMTAwMDFDQjAwMDAwQTU4NzIyNUYwRjdDMDAwMDAwMDAwMDVGMDAKKzoxMDdEMjAwMDBGODAwMTAwMEUwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQUQKKzoxMDdEMzAwMDhBMzAwMTAwRjA4NzAwNDAwRkIwMDAwMEIzODdBMjVBREMKKzoxMDdENDAwMDFGN0MwMDAwMDQwMEEyNUExRjdDMDAwMDAwQjUwMDBEM0IKKzoxMDdENTAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwQjcwMDBEQkYKKzoxMDdENjAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDcwOTQwMDQwMkYKKzoxMDdENzAwMDgxMzIwMTAwQjM4NzIyMjA4NTZDMDAwMEIwODc5QzBGMDAKKzoxMDdEODAwMDgwMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDhEOTUwMDVDQzkKKzoxMDdEOTAwMDFGMDAwMTAwQzg5NzAwNDI2MTMxMDEwMDIzODMwMDg4NjEKKzoxMDdEQTAwMDFDQjAwMDAwOTAwNDAwMDc5NjMwMDEwMDAwMDAyRDA1NzMKKzoxMDdEQjAwMDQ4QjEwMTAwMDAwMDAwRjAxOEIwMDEwMDAwMDAwMDAwMTAKKzoxMDdEQzAwMDgwQjAwMTAwQTQ4OEEyNUY4MTZDMDAwMEE4MDAyRDQzNTAKKzoxMDdERDAwMDE5ODAwMTAwMzcwMDJERjAyNEIwMDEwMDA0MDAwMEYzRTkKKzoxMDdERTAwMDhFRjQwMTAwMEYwMDAwRjM5MDg4MDEwMDA0MDBBMzQzMEIKKzoxMDdERjAwMDhGNkMwMDAwMDQwMEEzNDM5MTZDMDAwMEM0ODcyMjQ4RUMKKzoxMDdFMDAwMDhFNkMwMDAwMzYwMDAwNDA0Mzk5MDEwMDU4MDAzRDQzNEQKKzoxMDdFMTAwMEU3RTEwMTAwQzQ4NzFGRjAyNDZDMDAwMEMzODcyMzQxMDEKKzoxMDdFMjAwMDhGNkMwMDAwQTQ4ODAwNDc4MUIwMDAwMEE0ODgwMDQ4M0YKKzoxMDdFMzAwMDgxQjAwMDAwNDAwMDAwNDA0Mzk5MDEwMEIwMDAyREYwRTcKKzoxMDdFNDAwMDE0QjAwMTAwQzk4NzIyMEE5MDQwMDAwMDVGOTgwMDQwRUEKKzoxMDdFNTAwMDkxMzAwMTAwQTQ4OEEyNDA4MDMyMDAwMEIwMDAyRDQ1N0UKKzoxMDdFNjAwMDgxQjAwMTAwRDU4NzIyRjAyQzMwMDAwMEEzMDAyRDMwMTYKKzoxMDdFNzAwMDgzQjAwMTAwQUMwMDJERjM4MkUwMDEwMENGODdBMzQxNjUKKzoxMDdFODAwMDJDNkMwMDAwMDAwMDAwMTY4MkIwMDEwMDk4MDAyREYwNUMKKzoxMDdFOTAwMDgyQzAwMTAwODgwMDJERjA4MkQwMDEwMDAwMDAwMEYyQjUKKzoxMDdFQTAwMDk4RTgwMTAwQTQ4ODIwNEM4MjZDMDAwMDdDMDAyRDQxRTEKKzoxMDdFQjAwMDk4RTgwMTAwQTQ4ODIwRjA5ODZDMDAwMEYwODcyMjBBNUUKKzoxMDdFQzAwMDgwMzIwMDAwNDAwMjAwMEM3RTg5MDEwMEYwODdBNjQwNEQKKzoxMDdFRDAwMDgxMzIwMDAwQTQ4ODAwNDk4MUIwMDAwMDIwMDAwMEE2ODMKKzoxMDdFRTAwMDgwQjAwMTAwREQ4NzIyNDMyMTZGMDAwMDEzODAwMDQwMzUKKzoxMDdFRjAwMDgwREMwMTAwREU4NzAwNDA4MUIyMDAwMDFBODAwMDQwNzMKKzoxMDdGMDAwMDgwREMwMTAwREU4N0EyNUUwQjdEMDAwMDAwMDAwMDQwRTcKKzoxMDdGMTAwMDA4QjEwMTAwRTA4NzlGODU4MDMyMDAwMEU0ODcwMDQwQkYKKzoxMDdGMjAwMDgxQjIwMDAwMUE4MzIyNDA1NzdEMDAwMDAxMDAwMDQwMEEKKzoxMDdGMzAwMDU3OTkwMTAwRTQ4NzQyNDA4MTMyMDAwMDAwMDAwMDQ0NkMKKzoxMDdGNDAwMDkzOTMwMTAwMDE4MzFBNUI2OTkzMDAwMEVBODcyMjQ2M0MKKzoxMDdGNTAwMEYzN0YwMDAwRUE4N0EyNDFGMzdGMDAwMEM2ODAwMDQyNjEKKzoxMDdGNjAwMDk3MzMwMTAwMDQwMDAwQ0I4MUM4MDEwMEVEODcyMjQwNTcKKzoxMDdGNzAwMEYyN0YwMDAwQzY4MDAwNkY5NzMzMDEwMEVGODcyMjQwMzgKKzoxMDdGODAwMDczN0QwMDAwRTA4MDAwNDE4QkIzMDAwMEU3ODcwMDQwNzQKKzoxMDdGOTAwMDgxQjIwMDAwRjc4NzlDMEY4MDMyMDAwMDAwODAwMDEwNDMKKzoxMDdGQTAwMDQyQzkwMTAwRjc4NzIyNDBFMzZEMDAwMDAwMDAwMDQ1NTAKKzoxMDdGQjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEY0ODdBODQwQkIKKzoxMDdGQzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDM0OTQyMjAyMTgKKzoxMDdGRDAwMDgwMzIwMDAwRjg4NzQyNDA4MTMyMDAwMDAwMDAwMDQ0RjcKKzoxMDdGRTAwMDkzOTMwMTAwMzQ5NDFBMDI2ODk3MDAwMDAyODg5QzBGNTIKKzoxMDdGRjAwMDgwMzIwMDAwMDA4MDAwMTA0MkM5MDEwMDAyODgyMjQwNDcKKzoxMDgwMDAwMEUzNkQwMDAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNzgKKzoxMDgwMTAwMDYyREQwMTAwRkY4N0E4NDA4MTMyMDAwMDIzODMwMDg4RDEKKzoxMDgwMjAwMDFDQjAwMDAwNDQ5NDIyMDI4MDMyMDAwMDAzODg0MjQwQzkKKzoxMDgwMzAwMDgxMzIwMDAwMDAwMDAwNDQ5MzkzMDEwMDQ0OTQxQTAyMkUKKzoxMDgwNDAwMDY4OTcwMDAwMEQ4ODlDMEY4MDMyMDAwMDAwODAwMDEwQUYKKzoxMDgwNTAwMDQyQzkwMTAwMEQ4ODIyNDBFMzZEMDAwMDAwMDAwMDQ1ODgKKzoxMDgwNjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDBBODhBODQwRjMKKzoxMDgwNzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDJGODMyMjAyN0QKKzoxMDgwODAwMDgwMzIwMDAwMEU4ODQyNDA4MTMyMDAwMDAwMDAwMDQ0MkYKKzoxMDgwOTAwMDkzOTMwMTAwMDAwMDFBMDI2ODk3MDEwMDJGODMwMDQwQUIKKzoxMDgwQTAwMDA1QjAwMDAwMDA4MDAwQTY1NkIxMDEwMDU2OTUyRjQwOTMKKzoxMDgwQjAwMDA1QjAwMTAwMDQwMEEyNDBFNzZEMDAwMEI4OTQyOTQxMUEKKzoxMDgwQzAwMEU3QjEwMTAwMDAwMDAwNTRFRjkzMDEwMDAwMDAwMEYyNEUKKzoxMDgwRDAwMDBFQjAwMTAwMDQwMEEzMEM1NTZGMDAwMDI5MDAwMDQwMDEKKzoxMDgwRTAwMDBEOTgwMTAwMDkwMDAwMDcxMkU0MDEwMDAwMDAwMEE3M0MKKzoxMDgwRjAwMDEzQzAwMTAwMDMwMDAwMDcxQUY0MDEwMDA3MDAwMDA3ODUKKzoxMDgxMDAwMDE2ODgwMTAwRkZGRjAwMTAzNEQ4MDEwMDAwMDAwMDAzQjIKKzoxMDgxMTAwMDM0OTQwMTAwMDAwMDAwNDAyM0IwMDEwMDIwMTgwMDQwMEEKKzoxMDgxMjAwMDExOTgwMTAwMDQwMDIwQUEwRjZDMDAwMDAwQjUwMDBEOUEKKzoxMDgxMzAwMDQyQzkwMTAwNDY4ODIyMEJFNjdEMDAwMDI1ODg2MDQwODgKKzoxMDgxNDAwMDgxMzIwMDAwRkZGRjAwMDc4NDg5MDEwMDJFODgwNUMyRUMKKzoxMDgxNTAwMDI0MzAwMDAwNTgwNDAwNDA4MTMyMDEwMDAwMDAyRDA1NDkKKzoxMDgxNjAwMDQ4QjEwMTAwNjM4ODcwRjAxODMwMDEwMDEwMDAwMDBDNjUKKzoxMDgxNzAwMDgyRjQwMTAwMDQwMEEyNDEwRTZDMDAwMDQ2ODgwMDQwMTkKKzoxMDgxODAwMDgxQjIwMDAwMDAwMDcwNDA4MUIyMDEwMDNEODhBMDQ4MkIKKzoxMDgxOTAwMDIzNkMwMDAwMDAwMDAwNTAzNUQwMDEwMDAwODAwMDFBNjAKKzoxMDgxQTAwMDQyQzkwMTAwMzc4ODIyNDBFMzZEMDAwMDAwMDAwMDQyMTAKKzoxMDgxQjAwMDYxQjEwMTAwNDAwMDAwMUE2MkREMDEwMDM0ODhBODQwNkUKKzoxMDgxQzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDIwOTgwMDQwMEEKKzoxMDgxRDAwMDQzOTkwMTAwNjM4ODAwRjgxODMwMDEwMDM4ODhBMjQxRjMKKzoxMDgxRTAwMDIzNTAwMDAwRkZGRjAwMTAzNEQ4MDEwMDAwMDAwMDAzRkUKKzoxMDgxRjAwMDM0OTQwMTAwMjAxODAwNDAxMTk4MDEwMDAwMDAyRTFBNEMKKzoxMDgyMDAwMDQ4QjEwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDAwMDA4ODUKKzoxMDgyMTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDIwMDAwMDFBMkQKKzoxMDgyMjAwMDYyREQwMTAwNDE4OEE4MDlFMDMxMDAwMDAwMDAwMDQxNDIKKzoxMDgyMzAwMDIzQzAwMTAwMDAwMDAwNTAzNUMwMDEwMDAwMDAwMDQ0RDAKKzoxMDgyNDAwMDExQzAwMTAwNTI4ODIyNDEwRDUwMDAwMDAwMDAwMDQxODEKKzoxMDgyNTAwMDBGQzAwMTAwNEU4OEEwQUEwRjZDMDAwMDAwMDAwMDQxNzIKKzoxMDgyNjAwMDBGQjAwMTAwMDkwMDAwMDcxMkU0MDEwMDAwMDAwMEE3QTAKKzoxMDgyNzAwMDEzQzAwMTAwMDAwMDAwNDAxQkIwMDEwMDIyODgwMDQxMzMKKzoxMDgyODAwMDE3QjAwMDAwMDAwMjAwMDkxMkM4MDEwMDIyODg4MzQxRDMKKzoxMDgyOTAwMDE3NDAwMDAwMDAwMDAwNDAxN0IwMDEwMDIyODgwMDQxOTQKKzoxMDgyQTAwMDFCQzAwMDAwNUQ4ODIzNDAyMzZDMDAwMDAwMDAwMDUwQ0MKKzoxMDgyQjAwMDM1RDAwMTAwMDA4MDAwMUE0MkM5MDEwMDVBODgyMjQwQ0UKKzoxMDgyQzAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDFBQUYKKzoxMDgyRDAwMDYyREQwMTAwNTc4OEE4NDA4MTMyMDAwMDIzODMwMDg4QjYKKzoxMDgyRTAwMDFDQjAwMDAwMjA5ODAwNDA0Mzk5MDEwMDYzODgwMEY4MEEKKzoxMDgyRjAwMDE4MzAwMTAwNUI4OEEyNDEyMzUwMDAwMDAwMDAwMDQxQkIKKzoxMDgzMDAwMDBGQzAwMTAwNjA4OEEwQUEwRjZDMDAwMDAwMDAwMDQxQUYKKzoxMDgzMTAwMDBGQjAwMTAwQjg5NDIwMDdFNEIxMDEwMDU2OTUyMDQwNDkKKzoxMDgzMjAwMEU3QjEwMTAwRjA4NzAwNDAwRkIwMDAwMEZGRkYwMDBDMzQKKzoxMDgzMzAwMDgwRDgwMTAwMDQwMDI2NDA4MTMyMDAwMEMwMDIwMDBDRjkKKzoxMDgzNDAwMDdFODkwMTAwN0M4ODI2NTQ2MTMxMDAwMDZGODg4NzBDOEIKKzoxMDgzNTAwMDgwMzIwMDAwMUYwNDAwNDA4OTk4MDEwMDA5OTkwMDBDMzgKKzoxMDgzNjAwMDhBMzAwMTAwMDAwMDAwNTQ2MUIxMDEwMDBGMDAwMDQwOUMKKzoxMDgzNzAwMDYyOTkwMTAwNkY4ODI4NDA4MTMyMDAwMDA0MDBBMjU0RjUKKzoxMDgzODAwMDc3N0QwMDAwNkI4ODAwNDA4MUIyMDAwMDc3ODgyMjQ2MkMKKzoxMDgzOTAwMDE5N0MwMDAwMkEwNDAwNDA4OTk4MDEwMDA5OTkwMDBDMEEKKzoxMDgzQTAwMDhBMzAwMTAwMDAwMDAwNTQ2MUIxMDEwMDBEMDAwMDQwNUUKKzoxMDgzQjAwMDYyOTkwMTAwMDAwMEE4NDA4MUIyMDAwMDA0MDBBMjU0QUMKKzoxMDgzQzAwMDc3N0QwMDAwNzA4ODAwNDA4MUIyMDAwMDdDODgyMjQ5REYKKzoxMDgzRDAwMDE5N0MwMDAwMEUwMDAwNDA2Mjk5MDEwMDAwMDBBODQwRDYKKzoxMDgzRTAwMDgxQjIwMDAwMDQwMEEyNTQ3NzdEMDAwMDc3ODgwMDQwMkQKKzoxMDgzRjAwMDgxQjIwMDAwMTAwMDAwNDA2Mjk5MDEwMDAwMDBBODQwMTYKKzoxMDg0MDAwMDgxQjIwMDAwMDQwMEEyNTQ3NzdEMDAwMDdDODgwMDQwMDcKKzoxMDg0MTAwMDgxQjIwMDAwMzA5NDJGNTVGMTkzMDEwMDAwNDAwMEE2NzYKKzoxMDg0MjAwMDU2QjEwMTAwMkY4M0EyNDFFNTUxMDAwMDY0MDAwMDQwRDUKKzoxMDg0MzAwMEU1OTkwMTAwODQ4ODQ0NDA4MTMyMDAwMDg3ODhBMjkzMzYKKzoxMDg0NDAwMDU3NkYwMDAwMDAwMDAwNDE1N0MzMDEwMDAwMDAxQ0FCNDMKKzoxMDg0NTAwMDI3QjMwMTAwMkY4MzIyNTBGRDdGMDAwMDJGODMyMjUxN0MKKzoxMDg0NjAwMEZEN0YwMDAwMkY4M0EyNDExRDUzMDAwMDUwNDYwMDQwQjUKKzoxMDg0NzAwMDFEOUIwMTAwMzgwNTAwNDA4MTMyMDEwMDBFMDAwMDQ4QkMKKzoxMDg0ODAwMEIyQ0IwMTAwMTAwNDAwNDA0OTMxMDEwMDkzODgyMjQwMjIKKzoxMDg0OTAwMEI1NkYwMDAwMEUwMDAwNDhCMkNCMDEwMDIwMDQwMDQxN0YKKzoxMDg0QTAwMEI1NTMwMTAwMkY4MzAwNDA4MUIyMDAwMDAwMDAwMDUxNEQKKzoxMDg0QjAwMEZEODMwMTAwNDAxNjAwNDA0NTk5MDEwMDQwMDUwMDQwNDEKKzoxMDg0QzAwMDQ5MzEwMTAwMUUwMDAwNDhCMkNCMDEwMDEwMDQwMDQwRjkKKzoxMDg0RDAwMDgxMzIwMTAwMDAwMDAwREE5MUMwMDEwMDA0MDAwMDQ4NzAKKzoxMDg0RTAwMEIyQ0IwMTAwMjAwNDAwNDBCNTMzMDEwMDYwMTYyMDQwRUIKKzoxMDg0RjAwMEU1QjEwMTAwNTU4MjAwNDBCNTMzMDEwMDA4MDAwMDQ4OTUKKzoxMDg1MDAwMEIyQ0IwMTAwRkZGRjAwNEFCNDhCMDEwMDIwMDQwMDQwMDEKKzoxMDg1MTAwMDgxMzIwMTAwMEEwMDAwNDhCMkNCMDEwMDEwMDAwMDRBN0QKKzoxMDg1MjAwMEI0RjcwMTAwMjAwNDAwNDA4MTMyMDEwMDJGODMwMDQwOTUKKzoxMDg1MzAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDAyMDAwMDQwNjYKKzoxMDg1NDAwMDQzOTkwMTAwMDQwMEEyRjIwRTZDMDAwMDA0MDBBMjAyOTQKKzoxMDg1NTAwMDgwMzIwMDAwMDUwMDAwNDA0Mzk5MDEwMDAwMDAwMEYzNTQKKzoxMDg1NjAwMDA4QjAwMTAwQUU4ODIyNTA4MTZDMDAwMDBGMDQwMDQwNkEKKzoxMDg1NzAwMDg5OTgwMTAwMTAwMDAwNDA4QUU0MDEwMDA5OTkwMDA0NzQKKzoxMDg1ODAwMDhBMTQwMTAwMDQwMDIwNDgwOTZDMDAwMDA0MDAyMDU3RjAKKzoxMDg1OTAwMDgxNkMwMDAwMDQwMDIwNDBFNkIxMDEwMDAzMDAwMDQwQUYKKzoxMDg1QTAwMDk2RTQwMTAwMDAwMDAwMDQ5NkMwMDEwMEI0ODgwMDRCNkUKKzoxMDg1QjAwMDEwQzkwMDAwRTQ4QjAwNDEwOUIwMDAwMDA0MDAwMDIwNTUKKzoxMDg1QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRTUKKzoxMDg1RDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRDUKKzoxMDg1RTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzUKKzoxMDg1RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDE5OEMwMDQxRjMKKzoxMDg2MDAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMkEKKzoxMDg2MTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwOTQKKzoxMDg2MjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODQKKzoxMDg2MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzQKKzoxMDg2NDAwMDhGQjAwMDAwNTU4QzAwNDUwOUIwMDAwMDU1OEMwMDQ1RTYKKzoxMDg2NTAwMDA5QjAwMDAwNTU4QzAwNDUwOUIwMDAwMDU1OEMwMDQ1NUMKKzoxMDg2NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQ0EKKzoxMDg2NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzQKKzoxMDg2ODAwMDhGQjAwMDAwOUM4QzAwNDMwOUIwMDAwMENCOEMwMDQzRUQKKzoxMDg2OTAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1QjgKKzoxMDg2QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwOEEKKzoxMDg2QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjQKKzoxMDg2QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMERGOEMwMDQzNUEKKzoxMDg2RDAwMDA5QjAwMDAwREQ4QzAwNDMwOUIwMDAwMEUwOEIwMDQ1Q0MKKzoxMDg2RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNEEKKzoxMDg2RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjQKKzoxMDg3MDAwMDhGQjAwMDAwOTg4RDAwNDIwOUIwMDAwMDk4OEQwMDQzQTIKKzoxMDg3MTAwMDA5QjAwMDAwOTg4RDAwNDQwOUIwMDAwMEUwOEIwMDQ1Q0UKKzoxMDg3MjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDkKKzoxMDg3MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzMKKzoxMDg3NDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEI4OEQwMDQzRkYKKzoxMDg3NTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1NEQKKzoxMDg3NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzkKKzoxMDg3NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzMKKzoxMDg3ODAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEQwMDQzOTcKKzoxMDg3OTAwMDA5QjAwMDAwRTA4RDAwNDQwOUIwMDAwMEUwOEIwMDQ1MDYKKzoxMDg3QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODkKKzoxMDg3QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjMKKzoxMDg3QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEQwMDQyNTgKKzoxMDg3RDAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1Q0QKKzoxMDg3RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDkKKzoxMDg3RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjMKKzoxMDg4MDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDBGOEUwMDQ0RTUKKzoxMDg4MTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1OEMKKzoxMDg4MjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDgKKzoxMDg4MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzIKKzoxMDg4NDAwMDhGQjAwMDAwRTA4QjAwNDIwOUIwMDAwMDIyOEUwMDQ1OEUKKzoxMDg4NTAwMDA5QjAwMDAwMjI4RTAwNDUwOUIwMDAwMEUwOEIwMDQ1MDEKKzoxMDg4NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzgKKzoxMDg4NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzIKKzoxMDg4ODAwMDhGQjAwMDAwMjQ4RTAwNDIwOUIwMDAwMDI0OEUwMDQzMDcKKzoxMDg4OTAwMDA5QjAwMDAwMjQ4RTAwNDQwOUIwMDAwMDI0OEUwMDQ1NzkKKzoxMDg4QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODgKKzoxMDg4QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjIKKzoxMDg4QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRTIKKzoxMDg4RDAwMDhGQjAwMDAwMkY4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1RUYKKzoxMDg4RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDgKKzoxMDg4RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjIKKzoxMDg5MDAwMDhGQjAwMDAwNDE4RTAwNDIwOUIwMDAwMDMwOEUwMDQzNUQKKzoxMDg5MTAwMDA5QjAwMDAwNDE4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1MjIKKzoxMDg5MjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDcKKzoxMDg5MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzEKKzoxMDg5NDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDQzOEUwMDQzNzEKKzoxMDg5NTAwMDA5QjAwMDAwMzc4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1RUMKKzoxMDg5NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzcKKzoxMDg5NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQxQTkKKzoxMDg5ODAwMDA5QjAwMDAwOTY4RDAwNDIwOUIwMDAwMDk2OEQwMDQzQUEKKzoxMDg5OTAwMDA5QjAwMDAwOTY4RDAwNDQwOUIwMDAwMEUwOEIwMDQ1NEUKKzoxMDg5QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODcKKzoxMDg5QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQxNjkKKzoxMDg5QzAwMDA5QjAwMDAwNDU4RTAwNDIwOUIwMDAwMDQ1OEUwMDQzMEEKKzoxMDg5RDAwMDA5QjAwMDAwNDU4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1NUUKKzoxMDg5RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDcKKzoxMDg5RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjEKKzoxMDhBMDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQTAKKzoxMDhBMTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDRDOEUwMDQ1OTUKKzoxMDhBMjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDYKKzoxMDhBMzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDRFOEUwMDQyNzYKKzoxMDhBNDAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRTYKKzoxMDhBNTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNTAKKzoxMDhBNjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDAKKzoxMDhBNzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzAKKzoxMDhBODAwMDhGQjAwMDAwNUI4RTAwNDMwOUIwMDAwMEMxOEUwMDQzMzAKKzoxMDhBOTAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1QjQKKzoxMDhBQTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODYKKzoxMDhBQjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjAKKzoxMDhBQzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEM5OEUwMDQzNkEKKzoxMDhBRDAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1NzQKKzoxMDhBRTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDYKKzoxMDhBRjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjAKKzoxMDhCMDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEREOEUwMDQzMTUKKzoxMDhCMTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1ODkKKzoxMDhCMjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDUKKzoxMDhCMzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNkYKKzoxMDhCNDAwMDhGQjAwMDAwOTY4QzAwNDMwOUIwMDAwMEM1OEUwMDQzMzIKKzoxMDhCNTAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1RjMKKzoxMDhCNjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzUKKzoxMDhCNzAwMDhGQjAwMDAwMDIwMDJEMDU0OEIxMDEwMDA0MDBBMkYyRjAKKzoxMDhCODAwMDBFNkMwMDAwMDQwMEEyMDI4MDMyMDAwMDA3MDAyRDQwOUQKKzoxMDhCOTAwMDgxQjIwMTAwMDAwMDAwRjMwOEIwMDEwMDEwMDQwMDQwQTEKKzoxMDhCQTAwMDg5OTgwMTAwMTAwMDAwNDc4QUU0MDEwMDA5OTkwMDA0MzcKKzoxMDhCQjAwMDhBMTQwMTAwMDQwMDIwNEUwOTZDMDAwMDJBMDAwMDQ3QkUKKzoxMDhCQzAwMDgwQ0UwMTAwMDQwMDI0NDA4MTMyMDAwMDA2MDAyMDQ3Q0UKKzoxMDhCRDAwMEU2QjEwMTAwMDQwMDAwNDc5NkU0MDEwMDAwMDAwMDQ3RjAKKzoxMDhCRTAwMDk2RDAwMTAwMDAwMDAwNDc5NkQwMDEwMDAwMDAwMDA0NkMKKzoxMDhCRjAwMDk2QzAwMTAwN0Q4OTAwNEIxMEM5MDAwMEY5OEUwMDQ5MjQKKzoxMDhDMDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMkUKKzoxMDhDMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTIKKzoxMDhDMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTIKKzoxMDhDMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODIKKzoxMDhDNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzIKKzoxMDhDNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjIKKzoxMDhDNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTIKKzoxMDhDNzAwMDg1QjAwMDAwMzI4RjAwNDIwOUIwMDAwMDA0MDAwMDIwREYKKzoxMDhDODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzIKKzoxMDhDOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjIKKzoxMDhDQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTIKKzoxMDhDQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDIKKzoxMDhDQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjIKKzoxMDhDRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTIKKzoxMDhDRTAwMDg1QjAwMDAwMzk4RjAwNDYwOUIwMDAwMDA0MDAwMDIwNjQKKzoxMDhDRjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzIKKzoxMDhEMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjEKKzoxMDhEMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTEKKzoxMDhEMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTEKKzoxMDhEMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODEKKzoxMDhENDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzEKKzoxMDhENTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDRBOEYwMDQyNkEKKzoxMDhENjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDZEOEYwMDQyQjMKKzoxMDhENzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQkQKKzoxMDhEODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzEKKzoxMDhEOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjEKKzoxMDhEQTAwMDg1QjAwMDAwNjc4RjAwNEEwOUIwMDAwMDA0MDAwMDIwNzEKKzoxMDhEQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDEKKzoxMDhEQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OEYwMDQzQ0YKKzoxMDhERDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMERGOEYwMDQ0Q0YKKzoxMDhERTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNEQKKzoxMDhERjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzEKKzoxMDhFMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjAKKzoxMDhFMTAwMDg1QjAwMDAwREQ4RjAwNEIwOUIwMDAwMDA0MDAwMDIwODkKKzoxMDhFMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTAKKzoxMDhFMzAwMDg1QjAwMDAwM0Q4RjAwNDEwOUIwMDAwMDA0MDAwMDIwMTMKKzoxMDhFNDAwMDg1QjAwMDAwM0Q4RjAwNDMwOUIwMDAwMDNEOEYwMDQ0MTUKKzoxMDhFNTAwMDA5QjAwMDAwM0Q4RjAwNDUwOUIwMDAwMDNEOEYwMDQ2N0QKKzoxMDhFNjAwMDA5QjAwMDAwM0Q4RjAwNDcwOUIwMDAwMDNEOEYwMDQ4NjkKKzoxMDhFNzAwMDA5QjAwMDAwM0Q4RjAwNDkwOUIwMDAwMDNEOEYwMDRBNTUKKzoxMDhFODAwMDA5QjAwMDAwM0Q4RjAwNEIwOUIwMDAwMDNEOEYwMDRDNDEKKzoxMDhFOTAwMDA5QjAwMDAwM0Q4RjAwNEQwOUIwMDAwMDA0MDAwMDIwMjMKKzoxMDhFQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDQyMUEKKzoxMDhFQjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDQ0ODQKKzoxMDhFQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkMKKzoxMDhFRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTAKKzoxMDhFRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDAKKzoxMDhFRjAwMDg1QjAwMDAwNDg5MDAwNEIwOUIwMDAwMDA0MDAwMDIwM0QKKzoxMDhGMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUYKKzoxMDhGMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUYKKzoxMDhGMjAwMDg1QjAwMDAwNjU5MDAwNDUwOUIwMDAwMDA0MDAwMDIwRjUKKzoxMDhGMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwN0YKKzoxMDhGNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3M0YKKzoxMDhGNTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDQ1RDQKKzoxMDhGNjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0IKKzoxMDhGNzAwMDg1QjAwMDAwMTU5MzAwNDYwOUIwMDAwMDA0MDAwMDIwRjEKKzoxMDhGODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMkYKKzoxMDhGOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMUYKKzoxMDhGQTAwMDg1QjAwMDAwNkQ4RjAwNDYwOUIwMDAwMDRBOEYwMDQ2NzIKKzoxMDhGQjAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QzgKKzoxMDhGQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkIKKzoxMDhGRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDY3OEYwMDRBQzMKKzoxMDhGRTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNEIKKzoxMDhGRjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQkYKKzoxMDkwMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUUKKzoxMDkwMTAwMDg1QjAwMDAwREY4RjAwNDUwOUIwMDAwMDc0OEYwMDQzNjkKKzoxMDkwMjAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4NTcKKzoxMDkwMzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkEKKzoxMDkwNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEREOEYwMDRDREEKKzoxMDkwNTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwREEKKzoxMDkwNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNEUKKzoxMDkwNzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwM0UKKzoxMDkwODAwMDg1QjAwMDAwODQ5MDAwNDQwOUIwMDAwMDg0OTAwMDQyNDQKKzoxMDkwOTAwMDA5QjAwMDAwQzk4QjAwNDcwOUIwMDAwMEM5OEIwMDQ4MjcKKzoxMDkwQTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOEEKKzoxMDkwQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDg0OTAwMDRCQzMKKzoxMDkwQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkEKKzoxMDkwRDAwMDg1QjAwMDAwM0Q4RjAwNDEwOUIwMDAwMEFGOTAwMDQ3MEYKKzoxMDkwRTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDkyOTAwMDQ3MDUKKzoxMDkwRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwM0EKKzoxMDkxMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUQKKzoxMDkxMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUQKKzoxMDkxMjAwMDg1QjAwMDAwOTI5MDAwNDcwOUIwMDAwMDA0MDAwMDIwQzQKKzoxMDkxMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwN0QKKzoxMDkxNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkQKKzoxMDkxNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNUQKKzoxMDkxNjAwMDg1QjAwMDAwOTI5MDAwNDcwOUIwMDAwMEFGOTAwMDQ3MjIKKzoxMDkxNzAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4MDYKKzoxMDkxODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTkKKzoxMDkxOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDkyOTAwMDQ3RDgKKzoxMDkxQTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODkKKzoxMDkxQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkQKKzoxMDkxQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRUQKKzoxMDkxRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwREQKKzoxMDkxRTAwMDg1QjAwMDAwQkU5MDAwNDcwOUIwMDAwMEJFOTAwMDQ4NjYKKzoxMDkxRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzkKKzoxMDkyMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUMKKzoxMDkyMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUMKKzoxMDkyMjAwMDg1QjAwMDAwMkY5MTAwNDAwOUIwMDAwMDUxOTEwMDQ3MjcKKzoxMDkyMzAwMDA5QjAwMDAwNDM5MTAwNDgwOUIwMDAwMDhBOTAwMDQ3M0YKKzoxMDkyNDAwMDA5QjAwMDAwOEE5MDAwNDcwOUIwMDAwMDUxOTEwMDQ3MjIKKzoxMDkyNTAwMDA5QjAwMDAwNUE5MTAwNDcwOUIwMDAwMDVBOTEwMDQ4MzcKKzoxMDkyNjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQzOTEwMDQ4RDAKKzoxMDkyNzAwMDA5QjAwMDAwOEE5MDAwNDcwOUIwMDAwMDhBOTAwMDQ3QkEKKzoxMDkyODAwMDA5QjAwMDAwNDM5MTAwNDgwOUIwMDAwMDA0MDAwMDIwMkMKKzoxMDkyOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMUMKKzoxMDkyQTAwMDg1QjAwMDAwNDg5MDAwNDMwOUIwMDAwMDA0MDAwMDIwOTEKKzoxMDkyQjAwMDg1QjAwMDAwNDg5MDAwNDUwOUIwMDAwMDQ4OTAwMDQ2ODUKKzoxMDkyQzAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QjUKKzoxMDkyRDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDRBNUEKKzoxMDkyRTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDRDNDgKKzoxMDkyRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzgKKzoxMDkzMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEFFOTAwMDQ3NEEKKzoxMDkzMTAwMDA5QjAwMDAwQTA5MDAwNDgwOUIwMDAwMDkxOTAwMDQ3RkIKKzoxMDkzMjAwMDA5QjAwMDAwOTE5MDAwNDcwOUIwMDAwMEFFOTAwMDQ3REUKKzoxMDkzMzAwMDA5QjAwMDAwQzk4QjAwNDcwOUIwMDAwMEM5OEIwMDQ4ODQKKzoxMDkzNDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEEwOTAwMDQ4OTMKKzoxMDkzNTAwMDA5QjAwMDAwOTE5MDAwNDcwOUIwMDAwMDkxOTAwMDQ3Q0IKKzoxMDkzNjAwMDA5QjAwMDAwQTA5MDAwNDgwOUIwMDAwMDA0MDAwMDIwRUYKKzoxMDkzNzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDQyMkYKKzoxMDkzODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDQ0OTkKKzoxMDkzOTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTcKKzoxMDkzQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMEIKKzoxMDkzQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkIKKzoxMDkzQzAwMDg1QjAwMDAwNUQ5MTAwNEIwOUIwMDAwMDA0MDAwMDIwNTIKKzoxMDkzRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwREIKKzoxMDkzRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0IKKzoxMDkzRjAwMDg1QjAwMDAwNUQ5MTAwNDMwOUIwMDAwMDA0MDAwMDIwMkEKKzoxMDk0MDAwMDg1QjAwMDAwNUQ5MTAwNDUwOUIwMDAwMDVEOTEwMDQ2MDcKKzoxMDk0MTAwMDA5QjAwMDAwNUQ5MTAwNDcwOUIwMDAwMDVEOTEwMDQ4NkYKKzoxMDk0MjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDRBRjIKKzoxMDk0MzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDRDRTAKKzoxMDk0NDAwMDA5QjAwMDAwNUQ5MTAwNEMwOUIwMDAwMDA0MDAwMDIwNEMKKzoxMDk0NTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNUEKKzoxMDk0NjAwMDg1QjAwMDAwN0E5MTAwNDYwOUIwMDAwMDA0MDAwMDIwOTkKKzoxMDk0NzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwM0EKKzoxMDk0ODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3RkEKKzoxMDk0OTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdBOTEwMDQ2NjkKKzoxMDk0QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODYKKzoxMDk0QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkEKKzoxMDk0QzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRUEKKzoxMDk0RDAwMDg1QjAwMDAwOUM5MjAwNDYwOUIwMDAwMDA0MDAwMDIwMDYKKzoxMDk0RTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0EKKzoxMDk0RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3OEEKKzoxMDk1MDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDlDOTIwMDQ2RDUKKzoxMDk1MTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTUKKzoxMDk1MjAwMDg1QjAwMDAwOUM5MjAwNDYwOUIwMDAwMDA0MDAwMDIwQjUKKzoxMDk1MzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzkKKzoxMDk1NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEM1OTIwMDQyRjQKKzoxMDk1NTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDUKKzoxMDk1NjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDkKKzoxMDk1NzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzkKKzoxMDk1ODAwMDg1QjAwMDAwQzM5MjAwNEEwOUIwMDAwMDA0MDAwMDIwMkEKKzoxMDk1OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTkKKzoxMDk1QTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDkKKzoxMDk1QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjkKKzoxMDk1QzAwMDg1QjAwMDAwQzU5MjAwNDYwOUIwMDAwMDA0MDAwMDIwRUMKKzoxMDk1RDAwMDg1QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4MjYKKzoxMDk1RTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDUKKzoxMDk1RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEMzOTIwMDRBM0UKKzoxMDk2MDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjQKKzoxMDk2MTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTgKKzoxMDk2MjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODgKKzoxMDk2MzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzgKKzoxMDk2NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjgKKzoxMDk2NTAwMDg1QjAwMDAwNkE5MTAwNDEwOUIwMDAwMDA0MDAwMDIwQkMKKzoxMDk2NjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDgKKzoxMDk2NzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzgKKzoxMDk2ODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc3OTEwMDQyMDIKKzoxMDk2OTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc3OTEwMDQ0NkMKKzoxMDk2QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODQKKzoxMDk2QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjgKKzoxMDk2QzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTgKKzoxMDk2RDAwMDg1QjAwMDAwNzc5MTAwNEIwOUIwMDAwMDA0MDAwMDIwMjUKKzoxMDk2RTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzgKKzoxMDk2RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjgKKzoxMDk3MDAwMDg1QjAwMDAwNzc5MTAwNDMwOUIwMDAwMDA0MDAwMDIwRkMKKzoxMDk3MTAwMDg1QjAwMDAwNzc5MTAwNDUwOUIwMDAwMDc3OTEwMDQ2QzAKKzoxMDk3MjAwMDA5QjAwMDAwNzc5MTAwNDcwOUIwMDAwMDc3OTEwMDQ4MjgKKzoxMDk3MzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjMKKzoxMDk3NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc3OTEwMDRDMzcKKzoxMDk3NTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDMKKzoxMDk3NjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDcKKzoxMDk3NzAwMDg1QjAwMDAwNjU5MDAwNEMwOUIwMDAwMDA0MDAwMDIwOTYKKzoxMDk3ODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjcKKzoxMDk3OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3RTcKKzoxMDk3QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDRDNzUKKzoxMDk3QjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzMKKzoxMDk3QzAwMDg1QjAwMDAwODM5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMkIKKzoxMDk3RDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDBBOTMwMDQyMUMKKzoxMDk3RTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDBBOTMwMDQ0ODYKKzoxMDk3RjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzMKKzoxMDk4MDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTYKKzoxMDk4MTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTYKKzoxMDk4MjAwMDg1QjAwMDAwMEE5MzAwNEIwOUIwMDAwMDA0MDAwMDIwM0UKKzoxMDk4MzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzYKKzoxMDk4NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjYKKzoxMDk4NTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTYKKzoxMDk4NjAwMDg1QjAwMDAwMEE5MzAwNDUwOUIwMDAwMDBBOTMwMDQ2NDUKKzoxMDk4NzAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4RkYKKzoxMDk4ODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTIKKzoxMDk4OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDBBOTMwMDRDNTEKKzoxMDk4QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODIKKzoxMDk4QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDQyRjIKKzoxMDk4QzAwMDA5QjAwMDAwMTU5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMTQKKzoxMDk4RDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDQ2Q0UKKzoxMDk4RTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3MTIKKzoxMDk4RjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDE1OTMwMDQ2NjgKKzoxMDk5MDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjEKKzoxMDk5MTAwMDg1QjAwMDAwMTU5MzAwNDYwOUIwMDAwMDA0MDAwMDIwNDcKKzoxMDk5MjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODUKKzoxMDk5MzAwMDg1QjAwMDAwMUM5MzAwNDMwOUIwMDAwMDA0MDAwMDIwMjMKKzoxMDk5NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjUKKzoxMDk5NTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3MjUKKzoxMDk5NjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDFDOTMwMDQzRjMKKzoxMDk5NzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjEKKzoxMDk5ODAwMDg1QjAwMDAwMUM5MzAwNEQwOUIwMDAwMDA0MDAwMDIwQzkKKzoxMDk5OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTUKKzoxMDk5QTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDMyOTMwMDQzMjEKKzoxMDk5QjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzEKKzoxMDk5QzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTUKKzoxMDk5RDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDUKKzoxMDk5RTAwMDg1QjAwMDAwMDM5MzAwNEEwOUIwMDAwMDA0MDAwMDIwODUKKzoxMDk5RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjUKKzoxMDlBMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTQKKzoxMDlBMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTQKKzoxMDlBMjAwMDg1QjAwMDAwMzI5MzAwNDMwOUIwMDAwMDA0MDAwMDIwMUMKKzoxMDlBMzAwMDg1QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QzEKKzoxMDlBNDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTAKKzoxMDlBNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDAzOTMwMDRBOTgKKzoxMDlBNjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzAKKzoxMDlBNzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzQKKzoxMDlBODAwMDg1QjAwMDAwNEE5MzAwNDMwOUIwMDAwMDA0MDAwMDIwQTQKKzoxMDlBOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTQKKzoxMDlBQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3RDQKKzoxMDlBQjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDRBOTMwMDQzNzQKKzoxMDlBQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjAKKzoxMDlBRDAwMDg1QjAwMDAwNEE5MzAwNEQwOUIwMDAwMDA0MDAwMDIwNEEKKzoxMDlBRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDRBOEYwMDQyQ0QKKzoxMDlBRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDZEOEYwMDQyMTYKKzoxMDlCMDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMUYKKzoxMDlCMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTMKKzoxMDlCMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODMKKzoxMDlCMzAwMDg1QjAwMDAwNkQ5MzAwNDIwOUIwMDAwMDA0MDAwMDIwRDEKKzoxMDlCNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjMKKzoxMDlCNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTMKKzoxMDlCNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDMKKzoxMDlCNzAwMDg1QjAwMDAwNkQ4RjAwNDYwOUIwMDAwMDRBOEYwMDQ2OTYKKzoxMDlCODAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4RUMKKzoxMDlCOTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOEYKKzoxMDlCQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDZEOTMwMDQ2RTEKKzoxMDlCQjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkYKKzoxMDlCQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTMKKzoxMDlCRDAwMDg1QjAwMDAwNzQ5MzAwNEEwOUIwMDAwMDA0MDAwMDIwMjIKKzoxMDlCRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzMKKzoxMDlCRjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3ODMKKzoxMDlDMDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OTMwMDRBRjEKKzoxMDlDMTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMEUKKzoxMDlDMjAwMDg1QjAwMDAwMTY5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMzMKKzoxMDlDMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzIKKzoxMDlDNDAwMDg1QjAwMDAwMTY5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMTMKKzoxMDlDNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTIKKzoxMDlDNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3MTIKKzoxMDlDNzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDE2OTMwMDQ2RTMKKzoxMDlDODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUUKKzoxMDlDOTAwMDg1QjAwMDAwMTY5MzAwNDYwOUIwMDAwMDA0MDAwMDIwQzMKKzoxMDlDQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDIKKzoxMDlDQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTMwMDQyQzQKKzoxMDlDQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNUUKKzoxMDlDRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDIKKzoxMDlDRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzIKKzoxMDlDRjAwMDg1QjAwMDAwMDM5MzAwNEEwOUIwMDAwMDA0MDAwMDIwNzIKKzoxMDlEMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTEKKzoxMDlEMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTEKKzoxMDlEMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODEKKzoxMDlEMzAwMDg1QjAwMDAwN0Q5MzAwNDYwOUIwMDAwMDA0MDAwMDIwQkIKKzoxMDlENDAwMDg1QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QUUKKzoxMDlENTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0QKKzoxMDlENjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDAzOTMwMDRBODUKKzoxMDlENzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUQKKzoxMDlEODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OEYwMDRERjUKKzoxMDlEOTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOEQKKzoxMDlEQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDEKKzoxMDlEQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjEKKzoxMDlEQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTEKKzoxMDlERDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDEKKzoxMDlERTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzEKKzoxMDlERjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjEKKzoxMDlFMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTAKKzoxMDlFMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OEYwMDRENjQKKzoxMDlFMjAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4NDkKKzoxMDlFMzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRUMKKzoxMDlFNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjAKKzoxMDlFNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDBBMjA1QzkKKzoxMDlFNjAwMDQ4NkQwMDAwMDQwMDIyMDc4MDMyMDAwMDA3MDAyRTRCREUKKzoxMDlFNzAwMDE5OTAwMTAwRkI4NzAwMDRFNkIxMDAwMEM5OEIyMjQyNjMKKzoxMDlFODAwMDE5N0MwMDAwMEY5NzAwM0E4MTMwMDEwMEM5OEIwMDQwMTcKKzoxMDlFOTAwMDgxQjIwMDAwQzk4QjIyNDIxOTdDMDAwMEZGMUYwMDBGMTUKKzoxMDlFQTAwMDFFOEMwMTAwNzM5NjAwNDA4MTMyMDEwMERCOEI5QzBGRjkKKzoxMDlFQjAwMDgwMzIwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwNjQKKzoxMDlFQzAwMDQyQzkwMTAwREI4QjIyNDBFMzZEMDAwMDAwMDAwMDQ1MjkKKzoxMDlFRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ4OEJBODQwOTQKKzoxMDlFRTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDFEODUyMjAyRkYKKzoxMDlFRjAwMDgwMzIwMDAwREM4QjQyNDA4MTMyMDAwMDAwMDAwMDQ0RDAKKzoxMDlGMDAwMDkzOTMwMTAwMDAwMDFBMDI2ODk3MDEwMDFEODUwMDQwMkMKKzoxMDlGMTAwMDA1QjAwMDAwMDQwMEEyMDU0ODZEMDAwMDA0MDAyMjA3RkYKKzoxMDlGMjAwMDgwMzIwMDAwMDUwMDJFNEIxOTkwMDEwMEZCODcwMDA0RDEKKzoxMDlGMzAwMEU2QjEwMDAwMDAwMDAwNDA4N0IwMDEwMDAwMDAwMDQwRDIKKzoxMDlGNDAwMDhEQjAwMTAwMDA4MDAwMDM0MkM5MDEwMDQwMDAwMEExNjMKKzoxMDlGNTAwMDQ0QzkwMTAwMDAwMDAwRjBFMEIxMDEwMDdGOTgwMDA2NTQKKzoxMDlGNjAwMDA3NDAwMTAwMDQwMEEyNUMxRjdDMDAwMDAwMDAwMDA2MDYKKzoxMDlGNzAwMDA3RDAwMTAwRDQwMDJFNUMxRjkwMDEwMDAwMDAwMDA3RjQKKzoxMDlGODAwMEYwQjEwMTAwMEM4MDAwMDM0MkM5MDEwMDAwMDAwMEYwQTQKKzoxMDlGOTAwMEYwQjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFQUQKKzoxMDlGQTAwMDk2QjAwMTAwMDAwMDAwRkU5NkMwMDEwMDAwMDAwMEYwMjUKKzoxMDlGQjAwMEYwQjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFOEQKKzoxMDlGQzAwMDk2QzAwMTAwMDAwMDAwRkU5NkMwMDEwMDAwMDAwMEYwRjUKKzoxMDlGRDAwMEYwQjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZBNzEKKzoxMDlGRTAwMDk2QzAwMTAwMDAwMDAwRkU5NkMwMDEwMDAwMzAwMDRCNEEKKzoxMDlGRjAwMDk0ODgwMTAwMDAwMDAwNDY5NUYwMDEwMDAwMDAwMDRBMkUKKzoxMEEwMDAwMDk2QzAwMTAwNUUwMTJFMzQ5Nzg0MDEwMDAyMDAwMDRCQ0YKKzoxMEEwMTAwMEU0RTUwMTAwNjQwMTIwNDBFMUIxMDEwMDA5MDAwMDA3MEUKKzoxMEEwMjAwMDg2RTQwMTAwMDAwMDJFQTc4N0MwMDEwMDEwMDAwMDEwODgKKzoxMEEwMzAwMDQ4QzkwMTAwMTAwMDAwNDBGMTk5MDEwMDU4MDEwMDQzOTcKKzoxMEEwNDAwMEYwQzkwMTAwNTgwMTAwMDVFMEM5MDEwMDAwMDAwMDQ0MEEKKzoxMEEwNTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDA4OENBODQwRUQKKzoxMEEwNjAwMDgxMzIwMDAwMDAwMDAwMDU0OEIxMDEwMDFBMDAwMDQwRTQKKzoxMEEwNzAwMDk3OTgwMTAwMDgwMDJFNDA5NUIwMDEwMDEwOEMyMDRCRUQKKzoxMEEwODAwMDk0NkMwMDAwMDAwMDAwNDBGMUIxMDEwMDBEOEMwMDQxMTMKKzoxMEEwOTAwMDk1QzAwMDAwMTA4MDAwMTA0MkM5MDEwMDE3OEMyMjQwQkEKKzoxMEEwQTAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwQjkKKzoxMEEwQjAwMDYyREQwMTAwMTM4Q0E4NDA4MTMyMDAwMDIzODMwMDg4RjgKKzoxMEEwQzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBGOTcwMDQwREYKKzoxMEEwRDAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDBDODAwMDAzNjEKKzoxMEEwRTAwMDQyQzkwMTAwMDAwMDAwRjg4NkIwMDEwMDAwMDAwMEY4M0QKKzoxMEEwRjAwMDg4QjAwMTAwMTQ4MDAwMDM5OEM4MDEwMDA0MDBBMkExRTgKKzoxMEExMDAwMDk4NkMwMDAwMUU4QzQ0NDA4MTMyMDAwMDIxOENBMjRDQ0YKKzoxMEExMTAwMEZEN0YwMDAwMjI4QzAwNENGRDkzMDAwMDIzOEMyMEYwN0EKKzoxMEExMjAwMDU2NkYwMDAwMDAwMDAwRjA1NkIzMDEwMDAwMDAxQzQwMTQKKzoxMEExMzAwMDgxQjIwMTAwNjQwMDAwNDA4MTk4MDEwMDY0MDAwMDQwODkKKzoxMEExNDAwMDgwQ0MwMTAwMDQwMEE2NDA4MTMyMDAwMEQ4MDAwMDQwMEQKKzoxMEExNTAwMDgxOTgwMTAwMDQwMEEyNDM4MTA0MDAwMDAwODAwMDEwRTcKKzoxMEExNjAwMDQ0QzkwMTAwNjQwMDAwNDBGMTk5MDEwMDcwMDAwMDA1M0QKKzoxMEExNzAwMEYwQzkwMTAwMDAwMDAwNDNGMEIxMDEwMDAwMDAwMDQ3RjkKKzoxMEExODAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMDJFOENBODQ0QTYKKzoxMEExOTAwMEUwMzEwMDAwMTAwMDAwMTA4Q0M4MDEwMDAwODAwMDQ2NzMKKzoxMEExQTAwMDQ0QzkwMTAwNDAwMDAwNDBGMTk5MDEwMDY4MDEwMDA1MjgKKzoxMEExQjAwMEYwQzkwMTAwNjQwMDAwNDNGMEM5MDEwMDA0MDAyNDQwMUMKKzoxMEExQzAwMDgxMzIwMDAwMDAwMDAwNDc2MUIxMDEwMDAwMDAwMDQ2M0MKKzoxMEExRDAwMDYyQjEwMTAwMzc4Q0E4NDRFMDMxMDAwMDIzODMwMDg4N0QKKzoxMEExRTAwMDFDQjAwMDAwMDkwMDAwMDc4NkU0MDEwMDM4MDAyRUE3MUIKKzoxMEExRjAwMDg3QzAwMTAwOEIwMDJEMDU0OEIxMDEwMDNGOEMyMjQzMzAKKzoxMEEyMDAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDQyOEMyMjQ0NkIKKzoxMEEyMTAwMEU3N0QwMDAwMDAwMDAwNEM0NUMxMDEwMDAwMDAwMDRBM0QKKzoxMEEyMjAwMDE5OTAwMTAwNjgwMTIwQTJFNEIxMDEwMDg4MDAwMDQwRkIKKzoxMEEyMzAwMDQzOTkwMTAwNDY4QzIzMEJFNTZEMDAwMDAwMDAwMDQxQUUKKzoxMEEyNDAwMDE5OTAwMTAwMDA4MDAwMTA0NEM5MDEwMDUwMDAwMDQwMzYKKzoxMEEyNTAwMEYxOTkwMTAwNTgwMTAwNDNGMEM5MDEwMDU4MDEwMDA1QkYKKzoxMEEyNjAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwREQKKzoxMEEyNzAwMDYyQjEwMTAwNEI4Q0E4NDA4MTMyMDAwMDIzODMwMDg4MkEKKzoxMEEyODAwMDFDQjAwMDAwNUMwMDJFMDU0OEIxMDEwMDAwODAwMDAzRjYKKzoxMEEyOTAwMDQyQzkwMTAwMDAwMDYwRjA5NkIwMDEwMEEwMDAwMDQwM0IKKzoxMEEyQTAwMDQzOTkwMTAwMDQwMEEyRjI4MDMyMDAwMDBGOTcwMDQxQTAKKzoxMEEyQjAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDU4OENBMjQ5M0YKKzoxMEEyQzAwMDE5N0MwMDAwODYwMDAwNDA0Nzk5MDEwMDVDOEMwMDQwMkEKKzoxMEEyRDAwMEU1QjEwMDAwODYwMDJGNDkxOTgwMDEwMDVDOENBMkYyRDQKKzoxMEEyRTAwMDgwMzIwMDAwOEIwMDAwNDA0Nzk5MDEwMDAwMDAwMDQyQ0UKKzoxMEEyRjAwMEU3OTEwMTAwNUY4Q0EyNDYxOTdDMDAwMEEwMDAwMDQwOUQKKzoxMEEzMDAwMDQ3OTkwMTAwNjM4QzAwNDBFNUIxMDAwMEEwMDAyRjQ2OTIKKzoxMEEzMTAwMDE5ODAwMTAwNjM4Q0EyRjI4MDMyMDAwMDhCMDAwMDQwQTMKKzoxMEEzMjAwMDQ3OTkwMTAwMDAwMDAwNDFFNzkxMDEwMDA3MDAwMDRFM0QKKzoxMEEzMzAwMDgwRTQwMTAwMDAzOTAwNDA4MEM4MDEwMDA0MDBBMjQwMTAKKzoxMEEzNDAwMDA2NkMwMDAwQTgwMDAwNDA0Mzk5MDEwMDM0MDAyREYwODUKKzoxMEEzNTAwMDI0QjAwMTAwMDAwMDAwRkIwQ0IwMDEwMDAwMDAwMEZCNzUKKzoxMEEzNjAwMDEwQjAwMTAwMDAwMDAwRkIxMkIwMDEwMDBGMDAwMEYzNkMKKzoxMEEzNzAwMDE2ODgwMTAwMDQwMDAwRjMxNEY0MDEwMDkzOEMyNjQwQjkKKzoxMEEzODAwMDgxMzIwMDAwNzk4QzIyMEExNjZDMDAwMDU4MDAzRDQzOEYKKzoxMEEzOTAwMDEzRTAwMTAwMDAwMDAwRjg4MkIwMDEwMDA0MDAyMkYwODgKKzoxMEEzQTAwMDg0MzAwMDAwMUI5ODAwNDA4MTMyMDEwMDIzODMwMDg4MjQKKzoxMEEzQjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDQxOTEKKzoxMEEzQzAwMDEzQzAwMTAwNzg4Q0EwNDMxMzZDMDAwMDAwMDAwMDQwMTMKKzoxMEEzRDAwMDEzQjAwMTAwNkU4QzAwNDExNUQwMDAwMDkzOEMyMjBBNEUKKzoxMEEzRTAwMDgwMzIwMDAwMDQwMEEyMDgxMjZDMDAwMDU4MDAzRDQzQjcKKzoxMEEzRjAwMDEzRTAwMTAwMDAwMDAwRjg4MkIwMDEwMDA0MDAyMkYwMjgKKzoxMEE0MDAwMDg0MzAwMDAwMUI5ODAwNDA4MTMyMDEwMDQwMDAyMDQwNTEKKzoxMEE0MTAwMEUxQjEwMTAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1QUEKKzoxMEE0MjAwMDQ4QjEwMTAwOTM4QzIyNDExNTUwMDAwMDAwMDAwMDQxMEEKKzoxMEE0MzAwMDExQzAwMTAwODY4Q0EwNDMxMTZDMDAwMDAwMDAwMDQwOTgKKzoxMEE0NDAwMDExQjAwMTAwMDQwMDIyMDYxMDZDMDAwMDU4MDAzRDQzQ0EKKzoxMEE0NTAwMDExRTAwMTAwMDAwMDAwRjgzNkIwMDEwMDA0MDAyMkYwMTUKKzoxMEE0NjAwMDAwMzAwMDAwMDAwMDAwNTA4M0IwMDEwMDU0OTcwMDQ3MDYKKzoxMEE0NzAwMDYxMzEwMTAwMjM4MzAwODgxQ0IwMDAwMDMxOTQwMDA1ODUKKzoxMEE0ODAwMDQ4MzEwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwQUEKKzoxMEE0OTAwMDYyREQwMTAwOEY4Q0E4NDA4MTMyMDAwMDIzODMwMDg4OTgKKzoxMEE0QTAwMDFDQjAwMDAwODI4QzAwMDU0OEIxMDAwMDM3MDAyMDQwM0QKKzoxMEE0QjAwMEU3QjEwMTAwODY5NzAwNTE4MTMwMDEwMEUwOEIwMDQwMzgKKzoxMEE0QzAwMDgxQjIwMDAwMzcwMDAwNDA0Mzk5MDEwMDA0MDBBMkYzNkMKKzoxMEE0RDAwMDgwMzIwMDAwMzQwMDJFNDFGNUIxMDEwMDAwMTEwMDQwMkYKKzoxMEE0RTAwMEU1OTkwMTAwMDQwMEEyNDgxOTdDMDAwMEEwOEMwMDQ4RjYKKzoxMEE0RjAwMDE5OTAwMDAwMzcwMDAwNDA0Mzk5MDEwMDA0MDBBMkYzQzYKKzoxMEE1MDAwMDgwMzIwMDAwMzQwMDJFNDFGNUIxMDEwMDAwMTEwMDQwRkUKKzoxMEE1MTAwMEU1OTkwMTAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4MzUKKzoxMEE1MjAwMDk0QjAwMTAwQTc4QzIyNDUyMzdDMDAwMEIwMDAyRkYwREUKKzoxMEE1MzAwMDhDQjAwMTAwMDAwMDYwRjA4Q0MwMDEwMDdDMDAwMDQwODUKKzoxMEE1NDAwMDQzOTkwMTAwMDQwMEEzRjA4QzZDMDAwMDkwMDAwMDQwQ0YKKzoxMEE1NTAwMDQzOTkwMTAwMzUwMDJERjA4Q0IwMDEwMDM0MDAyREYzM0IKKzoxMEE1NjAwMDg0QjAwMTAwMDQwMDIyRjM4NDZDMDAwMDU4MDAzRTQzRDQKKzoxMEE1NzAwMDg1RTAwMTAwQUU4QzIyNDgxOTdDMDAwMDAwMDAwMDQxRkIKKzoxMEE1ODAwMDhEQzAwMTAwMDAwMDY4MEE4Q0MwMDEwMDM4MDAyQTRBMTIKKzoxMEE1OTAwMEUwQjEwMTAwMjgwMDAwMDBFMEM5MDEwMDNDMDAyMDFCRTAKKzoxMEE1QTAwMEUwQjEwMTAwMTA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4ODIKKzoxMEE1QjAwMDM4QjAwMTAwMDAwMDAwRjgyNkIwMDEwMDA0MDAyMkY4QzUKKzoxMEE1QzAwMDAyMzAwMDAwQkM4QzIzMDExNDZDMDAwMDAwMDAwMEY4NzUKKzoxMEE1RDAwMDgwQjAwMTAwMDAwMDAwRjg4MkIwMDEwMDRDMDAyMEYwQzMKKzoxMEE1RTAwMEU0QjEwMTAwNDQwMDIwNDBFMEIxMDEwMDQ4MDAyMDQxRjYKKzoxMEE1RjAwMEUwQjEwMTAwQTgwMDJEMTAzMkIwMDEwMDVGOTgwMEYwMUEKKzoxMEE2MDAwMDI0MzAwMTAwQzU4Q0EyNDQ4MTZDMDAwMEMzOEMyMjQxMUYKKzoxMEE2MTAwMDE5N0MwMDAwQkM5NTAwNDAzQjMwMDEwMEVEOENBMjA4ODUKKzoxMEE2MjAwMDNDMzAwMDAwQzU4QzAwNDA4MUIyMDAwMEJGOTQwMDQwNjcKKzoxMEE2MzAwMDgxMzIwMTAwRUQ4Q0EyMDgzQzMwMDAwMDUwMDAyMDFDNEIKKzoxMEE2NDAwMEUwQjEwMTAwNTQwMDIwMTNFMEIxMDEwMDRFMDAyMDAxRjAKKzoxMEE2NTAwMEU0QjEwMTAwNDAwMDIwMEFFMEIxMDEwMDg2OTcwMDVGRUMKKzoxMEE2NjAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDM3MDAwMDQwRTMKKzoxMEE2NzAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMEEwOEMyMjRBN0YKKzoxMEE2ODAwMDgwMzIwMDAwRDE4QzAwNDA4MUIyMDAwMDM3MDAwMDQwRDEKKzoxMEE2OTAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMDA0MDAyMDQzOTAKKzoxMEE2QTAwMDk3NkMwMDAwNTgwMDNFNDM5N0UwMDEwMDAwMDAwMDFCM0IKKzoxMEE2QjAwMEYwQjEwMTAwMUYwMDYwMDAwMDhDMDEwMEUwOEI4NTExRUIKKzoxMEE2QzAwMDgwMzIwMDAwMDQ4MDAwMDM0MkM5MDEwMEIwMDAyRkYwNzYKKzoxMEE2RDAwMDhDQjAwMTAwMDAwMDYwRjA4Q0MwMDEwMDdDMDAwMDQwRTQKKzoxMEE2RTAwMDQzOTkwMTAwMDQwMEEzRjA4QzZDMDAwMDg2OTcwMDVGODIKKzoxMEE2RjAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDA0MDAyMjQ5NUIKKzoxMEE3MDAwMDE5N0MwMDAwREY4QzAwNDkxOTgwMDAwMEU0OEMyMjQxOTQKKzoxMEE3MTAwMDE5N0MwMDAwQkM5NTAwNDAzQjMwMDEwMEU4OENBMjA4ODkKKzoxMEE3MjAwMDNDMzAwMDAwODY5NzAwNUY4MTMwMDEwMEUwOEIwMDQwRTQKKzoxMEE3MzAwMDgxQjIwMDAwQkY5NDAwNDA4MTMyMDEwMEU4OENBMjA4ODEKKzoxMEE3NDAwMDNDMzAwMDAwODY5NzAwNUY4MTMwMDEwMEUwOEIwMDQwQzQKKzoxMEE3NTAwMDgxQjIwMDAwNTAwMDJEMTAzMkIwMDEwMDU0MDAyREYwRTUKKzoxMEE3NjAwMDM4QjAwMTAwNEUwMDJERjAyNkIwMDEwMDQwMDAyREYyNUYKKzoxMEE3NzAwMDAyQjAwMTAwMDAwMDAwRjAxNEIwMDEwMDMwMDAwMDEwMzEKKzoxMEE3ODAwMDhDQzgwMTAwMDA4MDAwNDY0NEM5MDEwMDY4MDEyRDQ0QzYKKzoxMEE3OTAwMDYxQjEwMTAwMTAwMDY4RjI4MEM4MDEwMDAwMDAwMDA4RUIKKzoxMEE3QTAwMEYwQjEwMTAwNTgwMTAwMDVFMEM5MDEwMDAwMDAwMDBCRjQKKzoxMEE3QjAwMDM3QjAwMTAwMDAwMDAwNDAzNkQwMDEwMDVDMDEyRTQwOUYKKzoxMEE3QzAwMDEwQzAwMTAwMDAwMDAwMDY4MEMwMDEwMDAwMDAwMDUyMUYKKzoxMEE3RDAwMDgxRDAwMTAwMTg5NzAwNDBFNDMxMDEwMDIwMDAwMDQ2QkMKKzoxMEE3RTAwMDYyREQwMTAwRjk4Q0E4NDAyMzMwMDAwMDBFOTUwMDQwODYKKzoxMEE3RjAwMDgxMzIwMTAwMTY5NTAwNDA4MTMyMDEwMDA3OEQ4MjQxQUYKKzoxMEE4MDAwMDIzNDAwMDAwMjA4MDAwMTA0MkM5MDEwMDA0OEQyMjQwMzYKKzoxMEE4MTAwMEUzNkQwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwM0YKKzoxMEE4MjAwMDYyREQwMTAwMDE4REE4NDA4MTMyMDAwMDIzODMwMDg4OTEKKzoxMEE4MzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDEwM0QKKzoxMEE4NDAwMDMyQjAwMTAwMDAwMDAwNDEyM0IwMDEwMDAwODAwMDE5NzcKKzoxMEE4NTAwMDQ0QzkwMTAwMEY4RDIyNDExOTdDMDAwMDBCOERBMzAxMUEKKzoxMEE4NjAwMDBDNkMwMDAwMEM4RDAwMDYwNEIwMDAwMDAwMDAwMDAxMUMKKzoxMEE4NzAwMDA0QjAwMTAwMEU4RDIwMDIzNjZDMDAwMDAwMDAwMDFCQTkKKzoxMEE4ODAwMDA0QjAwMTAwMTI4RDAwMDJFMEIxMDAwMDExOERBMzAxOUYKKzoxMEE4OTAwMDBDNkMwMDAwMTI4RDAwMDYwNEIwMDAwMDAwMDAwMDAxRTYKKzoxMEE4QTAwMDA0QjAwMTAwMDAwMDY4MDIxNjk0MDEwMEZGRkYwMDBCRDUKKzoxMEE4QjAwMDE2RDgwMTAwMDAwMDY4MDgzRTk2MDEwMDAwMDAwMDFDNDgKKzoxMEE4QzAwMEYwQjEwMTAwMDAwMDAwNDY2MUIxMDEwMDIwMDAwMDE5NTQKKzoxMEE4RDAwMDYyREQwMTAwMTc4REE4MTNFMDMxMDAwMDU0OEQyMjAyQzMKKzoxMEE4RTAwMDE0NTAwMDAwNDQwMDJEMDIwQ0QwMDEwMDNGOERBMjAyNDQKKzoxMEE4RjAwMDAyNTAwMDAwMjU4RDIyNUMxRjdDMDAwMDIwODAwMDAzOTgKKzoxMEE5MDAwMDQyQzkwMTAwMjQ4RDIyNDBFMzZEMDAwMDAwMDAwMDQ3OTEKKzoxMEE5MTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDIwOERBODQwRkYKKzoxMEE5MjAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NzUKKzoxMEE5MzAwMDQ4QjEwMTAwNDQwMDJENUMxRjgwMDEwMDQ4MDAyREYwNEIKKzoxMEE5NDAwMDM4QjAwMTAwNEMwMDJERjAyNkIwMDEwMDM4MDAyRkYyODUKKzoxMEE5NTAwMDAyQjAwMTAwNDE4RDIyMDExNDZDMDAwMDA0MDBBNDQwRUIKKzoxMEE5NjAwMDgxMzIwMDAwMzM4RDIyNDYxRjdDMDAwMDAwMDAwMDQ2MkIKKzoxMEE5NzAwMDFGODAwMTAwMjAwMDJEMDM0OEIxMDEwMDMyOEQyMjQwQ0MKKzoxMEE5ODAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwRDAKKzoxMEE5OTAwMDYyREQwMTAwMkY4REE4NDA4MTMyMDAwMDIzODMwMDg4RjIKKzoxMEE5QTAwMDFDQjAwMDAwMzgwMDJGMDU0OEIxMDEwMDAwMDAwMEY4N0QKKzoxMEE5QjAwMDk0QjAwMTAwMzgwMDJERjA5NkIwMDEwMDAwMDAwMDRDNkEKKzoxMEE5QzAwMEUxQzEwMTAwMjAwMDAwMDM0OEM5MDEwMDAwMDAyMjRBNDMKKzoxMEE5RDAwMEYxQjEwMTAwNDQwMDAwMDVGMEM5MDEwMDAwMDAwMDRBODcKKzoxMEE5RTAwMEYwQjEwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQ3QTEKKzoxMEE5RjAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDNDOERBODVDRjMKKzoxMEFBMDAwMDFGMTAwMDAwNDE4RDAwMDU0OEIxMDAwMDAwMDAwMDAyNDkKKzoxMEFBMTAwMDM4QzAwMTAwMDQwMDI0NDA4MTMyMDAwMDRGOEQyMjA2MUUKKzoxMEFBMjAwMDgwMzIwMDAwMDAwMDAwNTAzM0MwMDEwMDREOERBMjAyQjIKKzoxMEFBMzAwMDM2NkMwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDA4RjBERDgKKzoxMEFBNDAwMDQyMzEwMDAwMDQwMDIyRjA4MDMyMDAwMDA0MDAyMjVDNDkKKzoxMEFBNTAwMEUxN0QwMDAwMDQwMEEyRjA2QTA2MDAwMDEwMDAwMEY4OEEKKzoxMEFBNjAwMDEwQzgwMTAwMDAwMDAwNUMxMTgwMDEwMEYwMDcwMDQwRTgKKzoxMEFBNzAwMDM3OTgwMTAwRkQ4QzAwQTExQUIwMDAwMDAwMDAwMDAyMTAKKzoxMEFBODAwMDEwQzAwMTAwRkQ4QzAwMDIzNkQwMDAwMDUwMDAyMDFDRDgKKzoxMEFBOTAwMEUwQjEwMTAwNTQwMDIwMTNFMEIxMDEwMDRFMDAyMDAxOUMKKzoxMEFBQTAwMEU0QjEwMTAwNDAwMDIwMEFFMEIxMDEwMDVCOEQwMDVGQ0QKKzoxMEFBQjAwMDAxQjAwMDAwMDQwMEEyMDIwMjZDMDAwMDA0MDBBMjAyMjcKKzoxMEFBQzAwMDBDNkMwMDAwMzcwMDJENDYwMUIwMDEwMDA0MDAwMEYzQkIKKzoxMEFBRDAwMDgwRjQwMTAwNUE4REEwNDM4MTZDMDAwMDAwMDAwMDU1RjUKKzoxMEFBRTAwMDAxQjAwMTAwNDAwMDIwNDBFMUIxMDEwMDAwODAwMDE5RTgKKzoxMEFBRjAwMDQyQzkwMTAwNjE4RDIyNDBFMzZEMDAwMDAwMDAwMDQ2NjQKKzoxMEFCMDAwMDYxQjEwMTAwNDAwMDAwMTk2MkREMDEwMDVFOERBODQwQzYKKzoxMEFCMTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDEzOTUwMDQwQTAKKzoxMEFCMjAwMDgxMzIwMTAwMzA4MDAwMTA0MkM5MDEwMDY4OEQyMjQwNEUKKzoxMEFCMzAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwMUUKKzoxMEFCNDAwMDYyREQwMTAwNjU4REE4NDA4MTMyMDAwMDIzODMwMDg4MEEKKzoxMEFCNTAwMDFDQjAwMDAwNjAwMTJGMDU0OEIxMDEwMDAwMDAwMDBCOEYKKzoxMEFCNjAwMEU0QjEwMTAwMDAwMDAwNTAxN0YwMDEwMDZEOEQ5MEYyN0IKKzoxMEFCNzAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA2NjIwRTAKKzoxMEFCODAwMDE3QTQwMTAwMzIwMDAwQTYyQUMwMDEwMDAwMDAwMEYyNTQKKzoxMEFCOTAwMDJBOTQwMTAwNzA4RDQ1NDg2MTMxMDAwMDAwRDAwMDFFRUMKKzoxMEFCQTAwMDYyREQwMTAwNzU4RDI4NDAwNTMwMDAwMDcxOEQyMjQ4NUUKKzoxMEFCQjAwMDc3N0QwMDAwNzg4RDAwNDA4MUIyMDAwMDAwMDAwMDE1MTQKKzoxMEFCQzAwMDYyQjEwMTAwODM4RDI4NDA4MTMyMDAwMDc1OEQwMDQwMDQKKzoxMEFCRDAwMDgxQjIwMDAwMDAwMDFEMDA5MkIwMDEwMDgwOEQyMjQxNzIKKzoxMEFCRTAwMDE5N0MwMDAwMDQwMDIyNDAzQjZDMDAwMDA0MDBBMzQ4RDQKKzoxMEFCRjAwMDNCNkMwMDAwMDA4MDAwMDM0MkM5MDEwMEM5OTQwMEY4Q0EKKzoxMEFDMDAwMDAwMzAwMTAwN0Q4REEyNDEzQjUwMDAwMDg0OEQwMDQ5NDEKKzoxMEFDMTAwMDAwQjAwMDAwRkYwNzAwMUUwMDhDMDEwMEM5OTQwMDQwMzYKKzoxMEFDMjAwMDgxMzIwMTAwODQ4RDAwNDkwMEIwMDAwMDAwMDAxRDQ3MDIKKzoxMEFDMzAwMDE5ODAwMTAwODc4RDIyNUYwMTZDMDAwMDhFOTgwMDQwMTIKKzoxMEFDNDAwMDgxMzIwMTAwQUE4ODAwMDA4MEIwMDAwMDhFOEQyMjVDNTUKKzoxMEFDNTAwMDFGN0MwMDAwMjA4MDAwMDM0MkM5MDEwMDhFOEQyMjQwMkQKKzoxMEFDNjAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwRUEKKzoxMEFDNzAwMDYyREQwMTAwOEI4REE4NDA4MTMyMDAwMDIzODMwMDg4QjMKKzoxMEFDODAwMDFDQjAwMDAwOEU4RDQwMDU0ODMxMDAwMEZGRkYwMDA3MUEKKzoxMEFDOTAwMDk0ODkwMTAwOTQ4RDg1Q0E5NDMwMDAwMDhFOTgxODVDQzgKKzoxMEFDQTAwMDFGMDAwMTAwMEUwMDAwMEYxRThDMDEwMEI3ODcwMDQwM0UKKzoxMEFDQjAwMDgxQjIwMDAwODY5NzE4MDA4MDMwMDEwMEUwOEIwMDQ3QzkKKzoxMEFDQzAwMDE5ODAwMDAwMDAwMDAwNDAxOTgwMDEwMEUwOEIyMjQ3M0QKKzoxMEFDRDAwMDE5N0MwMDAwQkY5NDAwNDA4MTMyMDEwMDlCOERBMjA4QzYKKzoxMEFDRTAwMDgwMzIwMDAwRTA4QjAwNDA4MUIyMDAwMDE4OTcwMDQwRTUKKzoxMEFDRjAwMDBEMzAwMTAwOUMwMTAwNDA0NTk5MDEwMEZGRkYwMDBCNTEKKzoxMEFEMDAwMDk4ODgwMTAwOEIwMDJENTAxN0YwMDEwMEExOEQ5MDRDMDgKKzoxMEFEMTAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMEEzOEQyMjQzMkYKKzoxMEFEMjAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDAwMDA2NjIwRUUKKzoxMEFEMzAwMDE3QTQwMTAwNjgwMTAwNDA0Mzk5MDEwMDVDMDEyRUYyNTQKKzoxMEFENDAwMDgwQjAwMTAwMDIwMDYyNDA3RUNEMDEwMDAwMDAwMDU3OEIKKzoxMEFENTAwMDgxQzAwMTAwMDAwMDJFMTA0OEIxMDEwMDAzMDAwMDQwMzYKKzoxMEFENjAwMEYwOEQwMTAwMDAwMDAwMDhGMEIxMDEwMDU4MDEwMDA1NUQKKzoxMEFENzAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQzIKKzoxMEFEODAwMDYyQjEwMTAwQUQ4REE4NDA4MTMyMDAwMDIzODMwMDg4QUMKKzoxMEFEOTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEIxOEQ0NTQ4MUQKKzoxMEFEQTAwMDYxMzEwMDAwMDA1MDAwMDg2MkREMDEwMEI3OEQyODQwQ0QKKzoxMEFEQjAwMDA1MzAwMDAwQjI4RDIyNDg3NzdEMDAwMEM5OTQxRDA4M0YKKzoxMEFEQzAwMDAwMzAwMTAwRTA4QjAwNDA4MUIyMDAwMEUwOEIxRDQ3QTUKKzoxMEFERDAwMDE5ODAwMDAwMDQwMEEyMDU0ODZEMDAwMDM1MDAwMDQwMDUKKzoxMEFERTAwMDQ3OTkwMTAwMDEwMDYzRjM4NEM4MDEwMEJEOERBMDQzQjEKKzoxMEFERjAwMDg1NkMwMDAwMDAwMDYzNDA4NUIwMDEwMEE4MDAwMDQwQTEKKzoxMEFFMDAwMDQzOTkwMTAwMzcwMDJGRjAyNEIwMDEwMDA0MDAyMkYzMjEKKzoxMEFFMTAwMDlFMDYwMDAwMDEwMDYzRjM4MkNDMDEwMENCOERBMjQxQUQKKzoxMEFFMjAwMDlFMDYwMDAwRTA4QjIyNDQ4MzcwMDAwMEE4MDAwMDQwRDIKKzoxMEFFMzAwMDQzOTkwMTAwMDQwMEEyRjAyNDZDMDAwMDM2MDAwMDQwOTkKKzoxMEFFNDAwMDQzOTkwMTAwNTgwMDNENDNFN0UxMDEwMEUwOEIxRkYwMEEKKzoxMEFFNTAwMDI0NkMwMDAwOEU5ODAwNDg4MTMwMDEwMEFBODgyMzQxQUMKKzoxMEFFNjAwMDgzNkMwMDAwQUE4ODAwNDc4MUIwMDAwMDM0MDAwMDQwRDUKKzoxMEFFNzAwMDQzOTkwMTAwMDQwMDIyNDJFNjZEMDAwMDU4MDAzRDQzNjIKKzoxMEFFODAwMDg1RTAwMTAwMDAwMDAwRjgzNkIwMDEwMDAwMDAwMEYwOEQKKzoxMEFFOTAwMDAwQjAwMTAwMDQwMDIyMDA4MDMyMDAwMDA0MDBBMjAwODMKKzoxMEFFQTAwMEJFMDYwMDAwMjgwMDAwNDA4Mzk4MDEwMDU0OTcwMDQ3MjgKKzoxMEFFQjAwMDYxMzEwMTAwMjM4MzAwODgxQ0IwMDAwMDAwMDAyRDAzRDUKKzoxMEFFQzAwMDQ4QjEwMTAwMDgwMDJERjA5NEIwMDEwMDAwMDAwMEY4MjYKKzoxMEFFRDAwMDhFQjAwMTAwOTAwMDJERjAxNEIwMDEwMDAwMDAwMDA1QkMKKzoxMEFFRTAwMDQ4QjEwMTAwQTg4Q0EyNDA4RjdDMDAwMERFOEQyMjQ3NzMKKzoxMEFFRjAwMDhGN0MwMDAwMDQwMEEyNDgxOTdDMDAwMEE4OEMwMDQ4NDgKKzoxMEFGMDAwMDE5OTAwMDAwMDQwMDIyNDY4RjdDMDAwMDYwOEUwMDQwRjMKKzoxMEFGMTAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDM2MDAyRDVEREUKKzoxMEFGMjAwMDA1QjQwMTAwMzcwMDJERjM4MEIwMDEwMDAwMDAwMEYzRUMKKzoxMEFGMzAwMDhFQjAwMTAwRjAwMDAwNDc3RTg5MDEwMDA0MDAyNjQwMjkKKzoxMEFGNDAwMDgxMzIwMDAwNUMwMDNENDM4MUUwMDEwMEE4MDAyREYwNEIKKzoxMEFGNTAwMDk0QjAwMTAwMDQwMDIyNEE4MDMyMDAwMDAwMDAwMEYwOUEKKzoxMEFGNjAwMDI0QjAwMTAwMjAwMDAwMTA4NkRDMDEwMDQwODAwMDAzQjYKKzoxMEFGNzAwMDQ0QzkwMTAwOTI5MzAwNEFGMDMxMDEwMDA0MDBBMjVDMzAKKzoxMEFGODAwMDFGN0MwMDAwMzYwMDJGNUMxRjkwMDEwMEYyOERBMjUwNDQKKzoxMEFGOTAwMDhGNTAwMDAwMzQwMDIwNDBFMUIxMDEwMEUwOEIwMDQwMDAKKzoxMEFGQTAwMDgxQjIwMDAwRjAwMDAwNDc3RTg5MDEwMDA0MDAyNjQwQzUKKzoxMEFGQjAwMDgxMzIwMDAwMDAwMDYzNDE4MUMwMDEwMEY3OERBMDQzOTEKKzoxMEFGQzAwMDgxNkMwMDAwMDAwMDYzNDA4MUIwMDEwMDM3MDAyMDQ3MjEKKzoxMEFGRDAwMEU2QjEwMTAwRTA4QjIyNDc4MDMyMDAwMDA0MDAwMDQ3MDgKKzoxMEFGRTAwMDBDRjQwMTAwMDAwMDAwNEY4Rjg0MDEwMDBDOEUyMjQ3RkEKKzoxMEFGRjAwMDBDNkMwMDAwNTgwMDNENDM4MUUwMDEwMDBDOEUxRkYwRjYKKzoxMEIwMDAwMDI0NkMwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwMjQKKzoxMEIwMTAwMDQyQzkwMTAwMDU4RTIyNDBFMzZEMDAwMDAwMDAwMDQ1OUEKKzoxMEIwMjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDAyOEVBODQwMDUKKzoxMEIwMzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDA1OEU0MjQwNEUKKzoxMEIwNDAwMDA1MzAwMDAwMDAwMDAwNDQ5MzkzMDEwMDAwMDAxQTVERTkKKzoxMEIwNTAwMDY5OTMwMTAwMEE4RTIzNDEwRDZDMDAwMEUwOEQwMDA1MEMKKzoxMEIwNjAwMDQ4QjEwMDAwOEU5ODAwMDU0ODMxMDEwMEFBODgwMDQ4QzgKKzoxMEIwNzAwMDgxQjAwMDAwRTA4QjIyNDA4RjZDMDAwMDg2OTcwMDVGNUIKKzoxMEIwODAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDQwMDIwMDBDRTIKKzoxMEIwOTAwMDdFODkwMTAwMDQwMEE2NDA4MTMyMDAwMEEyMDAwMDQwMjkKKzoxMEIwQTAwMDQzOTkwMTAwMDAwMDAwRjM4NEIwMDEwMEE2MDAyRDQ5N0YKKzoxMEIwQjAwMDE5OTAwMTAwMDIwMDAwRjI4MEY0MDEwMEI4MDAyRDQwNTgKKzoxMEIwQzAwMDgxQjIwMTAwMDAwMDAwRjI4MEMwMDEwMDAwMDAwMDQwRDkKKzoxMEIwRDAwMDgyRjgwMTAwMTkwMDAwNDA4MTk4MDEwMDFEOEVBMDQwRjcKKzoxMEIwRTAwMDgyNkMwMDAwMkMwMTAwNDA4MTk4MDEwMDFEOEVBMzQwNUQKKzoxMEIwRjAwMDgyNkMwMDAwMDAwMDAwNDE4MEIwMDEwMDFGOEUyMDRDRDcKKzoxMEIxMDAwMDg1NkMwMDAwMDAwMDAwNDE4NUMwMDEwMDg2MDAyMDQwRTEKKzoxMEIxMTAwMEU0QjEwMTAwQTIwMDIwNDJFNkIxMDEwMEUwOEIwMDQwNTIKKzoxMEIxMjAwMDgxQjIwMDAwMEY5NzAwNTA4MTMwMDEwMEUwOEIwMDQwOTkKKzoxMEIxMzAwMDgxQjIwMDAwMDQ4MDAwMDM0MkM5MDEwMDA0MDAyMkYwMzMKKzoxMEIxNDAwMDgwMzAwMDAwMDAwMDAwNDA4REIwMDEwMDdGOTgwMDQwN0EKKzoxMEIxNTAwMDg3MzAwMTAwMDQwMEEyNUMxRjdDMDAwMEIwMDAyRjVDNUYKKzoxMEIxNjAwMDFGOTAwMTAwMDAwMDYwRjA4MEMwMDEwMDdDMDAwMDQwRTIKKzoxMEIxNzAwMDQzOTkwMTAwMDQwMEEzRjA4MDZDMDAwMDg2OTcwMDVGRjMKKzoxMEIxODAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMEIxOTAwMDgxQjIwMDAwRTA4QjIyNDYxOTdDMDAwMEEwMDAwMDQwMzQKKzoxMEIxQTAwMDQ3OTkwMTAwMDEwMDYyRjI5NkNDMDEwMEUwOEJBNjQwQjUKKzoxMEIxQjAwMDgxMzIwMDAwODY5NzAwNEE4MTMwMDEwMDVCOTcwMDQ2OEIKKzoxMEIxQzAwMDk1MzAwMTAwRTA4QjAwNDA4MUIyMDAwMEUwOEIyMjQ5MDUKKzoxMEIxRDAwMDE5N0MwMDAwODYwMDAwNDA0Nzk5MDEwMDAxMDA2MkYyREUKKzoxMEIxRTAwMDgwQ0MwMTAwRTA4QkE2NDA4MTMyMDAwMDg2OTcwMDRBQTcKKzoxMEIxRjAwMDgxMzAwMTAwNUI5NzAwNDc5NTMwMDEwMEUwOEIwMDQwRjMKKzoxMEIyMDAwMDgxQjIwMDAwMzE5NDAwNDA4MTMyMDEwMDA0MDBBMjVDNTAKKzoxMEIyMTAwMDFGN0MwMDAwRTA4QjAwNUMxRjkwMDAwMDA0MDBBMjQ2MzEKKzoxMEIyMjAwMDE5N0MwMDAwRTA4QjAwNDA4MUIyMDAwMDA0MDBBMjQ5QkMKKzoxMEIyMzAwMDE5N0MwMDAwRTA4QjAwNDA4MUIyMDAwMEJBMDAwMDQwQTEKKzoxMEIyNDAwMDQ3OTkwMTAwMDEwMDYyRjI4MEM4MDEwMDQ5OEU5MDQwRDgKKzoxMEIyNTAwMDgwMzIwMDAwRkZGRjYyNDA4MTk4MDEwMEE0MDAwMDQwOUUKKzoxMEIyNjAwMDQ3OTkwMTAwRTA4QjIyNDBFNTZEMDAwMEUwOEIwMDQxMzIKKzoxMEIyNzAwMEU1QzEwMDAwMEY5NzAwNEQ4MTMwMDEwMEUwOEIwMDQwRDgKKzoxMEIyODAwMDgxQjIwMDAwNUMwMDAwNDA0Nzk5MDEwMDA0MDAyMkYwRjgKKzoxMEIyOTAwMDk2MzAwMDAwMDAwMDAwNDBFMUIxMDEwMDAwODAwMDAzOTIKKzoxMEIyQTAwMDQ0QzkwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQwNzMKKzoxMEIyQjAwMDhEQjAwMTAwN0Y5ODAwNDA4NzMwMDEwMDhCMDAwMDQwNzYKKzoxMEIyQzAwMDQ3OTkwMTAwNTk4RTgwRjM5NjMwMDAwMDAwMDAwMDQwM0QKKzoxMEIyRDAwMEU3ODEwMTAwMDAwMDAwNDcxOTkwMDEwMDA0MDBBMjVDMTIKKzoxMEIyRTAwMDFGN0MwMDAwRTA4QjAwNUMxRjkwMDAwMDM3MDAwMDQwRDYKKzoxMEIyRjAwMDQzOTkwMTAwMDQwMEEyRjM4MDMyMDAwMDM0MDAwMDQwQjIKKzoxMEIzMDAwMDQ1OTkwMTAwMDEwMDAwNDBGNTk5MDEwMDAwMTEwMDQwM0QKKzoxMEIzMTAwMEU1OTkwMTAwQkY5NDAwNDA4MTMyMDEwMDcxOEVBMjA4QkUKKzoxMEIzMjAwMDgwMzIwMDAwMzcwMDAwNDA0Nzk5MDEwMDAwMDAwMEYzMjAKKzoxMEIzMzAwMDgyQjAwMTAwMDAwMDYzNTE4M0QwMDEwMDM0MDAwMDQwNUUKKzoxMEIzNDAwMDQ3OTkwMTAwMDEwMDYzRjM4NENDMDEwMDY5OEU5RjQyOUMKKzoxMEIzNTAwMDgwMzIwMDAwMDAwMDYzNDI4NUIwMDEwMDAwMDAwMDQ1MUIKKzoxMEIzNjAwMDAzRjAwMTAwMDAwMDAwMDEwMEMwMDEwMDZCOEUzNzVDOUIKKzoxMEIzNzAwMDYxMzEwMDAwMDAwMDAwMUI2MkIxMDEwMDZDOEVBODRCMUYKKzoxMEIzODAwMDE5MTAwMDAwMDAwMDAwMDA2MkIxMDEwMDZFOEVBODQwOUMKKzoxMEIzOTAwMDgxMzIwMDAwRjA4NzE3NDA4MUIyMDAwMDAwODAwMDAzNzYKKzoxMEIzQTAwMDQyQzkwMTAwOTAwMDJERjA5NEIwMDEwMEFDMDAyREYwRDYKKzoxMEIzQjAwMDMwQjAwMTAwMzUwMDJERjAyOEIwMDEwMDM0MDAyREYzMkQKKzoxMEIzQzAwMDg0QjAwMTAwMDQwMDIyRjM4NDZDMDAwMDU4MDAzRTQzNjYKKzoxMEIzRDAwMDg1RTAwMTAwMDEwMDAwMThGMEM5MDEwMDAwMDAwMDRBRUEKKzoxMEIzRTAwMEUwQjEwMTAwMzgwMDIwMDBFMEIxMDEwMDNDMDAyMDFCNkEKKzoxMEIzRjAwMEUwQjEwMTAwNDAwMDIwNDBFMUIxMDEwMDAwMDAwMDQwNDgKKzoxMEI0MDAwMDJCQjAwMTAwNkE5NzAwNDAwRDMwMDEwMDAwMDAwMDE4QzkKKzoxMEI0MTAwMDE2QzAwMTAwODI4RUEwMTQxNjQ0MDAwMDAwMDAwMDQxRjYKKzoxMEI0MjAwMDE3QzAwMTAwMEUwMDAwQTI0NEM5MDEwMDAwMDAwMDE4NkUKKzoxMEI0MzAwMEY4QjEwMTAwQjAwMDJEMTRGOEIxMDEwMDEwNTAwMDQwMjcKKzoxMEI0NDAwMDg3OTgwMTAwOEI4RTIyNEExOTdDMDAwMDAwMzAwMDQzNEYKKzoxMEI0NTAwMDg2QzgwMTAwMDAzMDAwMEIxNkM4MDEwMDhCOEVBNDQwODYKKzoxMEI0NjAwMDgxMzIwMDAwMDAwMDAwNDExN0MwMDEwMDAxMDA2RTQzNUUKKzoxMEI0NzAwMDg2OTgwMTAwQUU5NzAwMzA4MTMwMDEwMDhGOEVBMDQxODgKKzoxMEI0ODAwMDE3NDAwMDAwMDAwMDAwNDExN0MwMDEwMDk2OEUyMjRBQkMKKzoxMEI0OTAwMDE5N0MwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCQkIKKzoxMEI0QTAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDk1OEVBMEYwQkIKKzoxMEI0QjAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA2NEYwQzUKKzoxMEI0QzAwMDgyQjAwMTAwOTAwMDAwNDA0NTk5MDEwMDAwMDA2MDQxRjkKKzoxMEI0RDAwMDMxQzAwMTAwQkMwMDAwNDA0Mzk5MDEwMDlDOEUwNjBDNjUKKzoxMEI0RTAwMDgwMzIwMDAwQTAwMDIwRjJFNEIxMDEwMDA0MDAwOTQ2MEYKKzoxMEI0RjAwMDE5MTAwMDAwOUMwMTAwNDA0NTk5MDEwMEZGRkYwMDBCNUUKKzoxMEI1MDAwMDk4ODgwMTAwOEIwMDJENTAxN0YwMDEwMEExOEU5MDRDRkYKKzoxMEI1MTAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMEEzOEUyMjQzMjYKKzoxMEI1MjAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDAwMDA2NjIwRTYKKzoxMEI1MzAwMDE3QTQwMTAwNjgwMTAwNDA0Mzk5MDEwMDVDMDEyRUYyNEMKKzoxMEI1NDAwMDgwQjAwMTAwMDIwMDYyNDA3RUNEMDEwMDAwMDAwMDU3ODMKKzoxMEI1NTAwMDgxQzAwMTAwMDAwMDJFMTA0OEIxMDEwMDAzMDAwMDQwMkUKKzoxMEI1NjAwMEYwOEQwMTAwMDAwMDAwMDhGMEIxMDEwMDU4MDEwMDA1NTUKKzoxMEI1NzAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQkEKKzoxMEI1ODAwMDYyQjEwMTAwQUQ4RUE4NDA4MTMyMDAwMDIzODMwMDg4QTMKKzoxMEI1OTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEIxOEU0NTQ4MTQKKzoxMEI1QTAwMDYxMzEwMDAwMDA1MDAwMDg2MkREMDEwMEIyOEVBODQwNDkKKzoxMEI1QjAwMDA1MzAwMDAwMzUwMDFENDA0Nzk5MDEwMDAxMDA2M0YzOEMKKzoxMEI1QzAwMDg0QzgwMTAwQjg4RUEwNDM4NTZDMDAwMDAwMDA2MzQwNzEKKzoxMEI1RDAwMDg1QjAwMTAwMzcwMDAwNDA0Nzk5MDEwMDA0MDAyMkYzQzQKKzoxMEI1RTAwMDlFMDYwMDAwMDEwMDYzRjM4MkNDMDEwMDA0MDBBMjQxMkEKKzoxMEI1RjAwMDlFMDYwMDAwOEIwMDAwNDA0Nzk5MDEwMDA0MDBBMjQ1MTAKKzoxMEI2MDAwMEU3N0QwMDAwMDAwMDAwNDVFNzkxMDEwMDg2OTcwMDVGOUMKKzoxMEI2MTAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDM3MDAwMDQwMjMKKzoxMEI2MjAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMDYwOEUyMjRBRkQKKzoxMEI2MzAwMDgwMzIwMDAwRDE4QzAwNDA4MUIyMDAwMDM3MDAwMDQwMTEKKzoxMEI2NDAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMDlBOEMyMjRBQTUKKzoxMEI2NTAwMDgwMzIwMDAwRDE4QzAwNDA4MUIyMDAwMDM2MDAwMDQwRjIKKzoxMEI2NjAwMDQzOTkwMTAwMDAwMDAwRkIxMkIwMDEwMDBGMDAwMEYzM0QKKzoxMEI2NzAwMDkwODgwMTAwMDQwMDAwRjMwQ0Y0MDEwMDA0MDAyNjQwNEYKKzoxMEI2ODAwMDgxMzIwMDAwQ0I4QzIyMDY5MDZDMDAwMDA0MDBBQTQwOUUKKzoxMEI2OTAwMDgxMzIwMDAwNUMwMDNENDMxM0UwMDEwMEE4MDAyREYwNjIKKzoxMEI2QTAwMDk0QjAwMTAwMDQwMDIyNDA5NTZDMDAwMDM3MDAyRkYwOTgKKzoxMEI2QjAwMDI0QjAwMTAwMzYwMDJBNTBFN0QxMDEwMDAwMDA2MzQxQTgKKzoxMEI2QzAwMDEzQzAwMTAwRDg4RUEwNDMxMzZDMDAwMDAwMDAwMDQwOUUKKzoxMEI2RDAwMEU3QjEwMTAwOEY5MzAwMTA4NjMwMDEwMDIzODMwMDg4QkEKKzoxMEI2RTAwMDFDQjAwMDAwREE4RTQyMDU0ODMxMDAwMDAwMDAwMDQ0MjIKKzoxMEI2RjAwMDkzOTMwMTAwQ0I4QzFBNUQ2OTkzMDAwMDA0MDBBMjA1QUUKKzoxMEI3MDAwMDQ4NkQwMDAwMzYwMDJEMTA4NkIwMDEwMDVDMDAzRDQzRkUKKzoxMEI3MTAwMEU3RTEwMTAwQTgwMDJERjA5NEIwMDEwMDA0MDAyMjRBRTYKKzoxMEI3MjAwMDgwMzIwMDAwMzUwMDJGRjAyNEIwMDEwMDAxMDA2QkZCRDcKKzoxMEI3MzAwMDg0QzgwMTAwRTc4RUEwNDM4NTZDMDAwMDM1MDAyMDQwREUKKzoxMEI3NDAwMEU3QjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAxMDA2M0YzOTUKKzoxMEI3NTAwMDEyQzgwMTAwRUE4RUEwNDMxMzZDMDAwMDAwMDAwMDQwRjQKKzoxMEI3NjAwMEU3QjEwMTAwNDA4MDAwMDM0NEM5MDEwMDkyOTMwMDRBMDAKKzoxMEI3NzAwMEYwMzEwMTAwMjM4MzAwODgxQ0IwMDAwMEVEOEU0MjA1RUIKKzoxMEI3ODAwMDQ4MzEwMDAwMDAwMDAwNDQ5MzkzMDEwMDAwMDAxQTVENUUKKzoxMEI3OTAwMDY5OTMwMTAwMzcwMDAwNDA0Nzk5MDEwMDA0MDAyMkYzM0IKKzoxMEI3QTAwMDlFMDYwMDAwMTEwMDYzRjM4MkNDMDEwMDA0MDAxRjQxREIKKzoxMEI3QjAwMDgwMzIwMDAwQzI4RDIyNDE5RTA2MDAwMDM1MDAwMDQwMEMKKzoxMEI3QzAwMDQzOTkwMTAwNTgwMDNENDNFN0UxMDEwMDAwMDAwMEY4MDMKKzoxMEI3RDAwMDM2QjAwMTAwRDA4RDAwRjAwMEIwMDAwMDVFMDEyRDA1RjQKKzoxMEI3RTAwMDQ4QjEwMTAwRkE4RTY1RjIxMjMwMDAwMDAwOTkzRjQyMjQKKzoxMEI3RjAwMDEzRjAwMTAwRkY4RTIyNDdFNzdEMDAwMDI3ODM3NTg4NDQKKzoxMEI4MDAwMDFDQjAwMDAwRjk4RTAwNDA4MUIyMDAwMDAwMDAwMDQ3MkIKKzoxMEI4MTAwMEU3OTEwMTAwMDAwMDc1NDIxOTkwMDEwMDc1MDAwMDQwOTkKKzoxMEI4MjAwMDYxOTkwMTAwMDE4RkE4QjEwQzMwMDAwMEE5OTYwMDEwQTkKKzoxMEI4MzAwMDk0MzAwMTAwMjM4MzAwODgxQ0IwMDAwMDVFMDEyRTA1QjcKKzoxMEI4NDAwMDQ4QjEwMTAwQzBBODNENDYwREUwMDEwMDAwMDAwMDQwRTUKKzoxMEI4NTAwMDk3QjAwMTAwMEI4RjIyNDBFMTZEMDAwMDA0MDAwMjQxMEYKKzoxMEI4NjAwMDk3NDAwMDAwMDg4RjAwNTA0M0MxMDAwMDE3OEYyMjRCMDMKKzoxMEI4NzAwMDgwMzIwMDAwMDAwMDYyNEIxMjk0MDEwMDA5MDAwMDA3QjIKKzoxMEI4ODAwMDk2RTQwMTAwMDAwMDAwQTc5N0MwMDEwMDMwMDAwMDEwRkUKKzoxMEI4OTAwMDk0QzgwMTAwMDA4MDAwNEE0NDk5MDEwMDAwMDAwMDQyNjEKKzoxMEI4QTAwMEYxQjEwMTAwNUUwMTAwNEJGMEM5MDEwMDVFMDEwMDA1MkQKKzoxMEI4QjAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDIwMDAwMDRBMUQKKzoxMEI4QzAwMDYyREQwMTAwMTU4RkE4NDA4MTMyMDAwMDAwODAwMDEwNjkKKzoxMEI4RDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDA0MDAwMDA5NUEKKzoxMEI4RTAwMDk2RTQwMTAwMDAwMDY4QTg5N0MwMDEwMEQ0MDAwMDA1OUMKKzoxMEI4RjAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwMzcKKzoxMEI5MDAwMDYyQjEwMTAwMUQ4RkE4NDA4MTMyMDAwMDIzODMwMDg4QUUKKzoxMEI5MTAwMDFDQjAwMDAwMDA5OTNGNDIxM0YwMDEwMDIxOEY2NTQwRTgKKzoxMEI5MjAwMDgxMzIwMDAwM0YwMDAwRjM5Njg4MDEwMDAwMDAwMDQwRDMKKzoxMEI5MzAwMEU3QjEwMTAwMDAwMDc1NTU2MUIxMDEwMDAwMDAwMDA2OEIKKzoxMEI5NDAwMDYyQjEwMTAwMjU4RkE4NDA4MTMyMDAwMDJBOEYyMjRCNkUKKzoxMEI5NTAwMDgwMzIwMDAwMDAwMDAwNEI2MkIxMDEwMDI4OEZBODQwMzcKKzoxMEI5NjAwMDgxMzIwMDAwMDAwMDAwOTcxM0IwMDEwMDAwMDAwMDk2MzMKKzoxMEI5NzAwMDk3QjAwMTAwMzA4RjIwMDk5NjZDMDAwMDMwOEYxRjA5QUUKKzoxMEI5ODAwMDk2MjQwMDAwMjc4MzAwODgxQ0IwMDAwMDJCOEYwMDQwMDUKKzoxMEI5OTAwMDgxQjIwMDAwMEY5NzAwNTc4MTMwMDEwMEM5OEIwMDA1NkMKKzoxMEI5QTAwMDQ4QjEwMDAwMDQwMDIyNDIxOTdDMDAwMDJFMDAwMDQwMzMKKzoxMEI5QjAwMDQzOTkwMTAwMzc4RjIyRjM4MDMyMDAwMDBGOTcwMDQyMzUKKzoxMEI5QzAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDg2OTcwMDUyNkMKKzoxMEI5RDAwMDgxMzAwMTAwQzk4QjAwNDIxOTgwMDAwMDA0MDAyMjQyMUUKKzoxMEI5RTAwMDE5N0MwMDAwMEY5NzAwM0E4MTMwMDEwMDg2OTcwMDUyQzEKKzoxMEI5RjAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDAwMDAwMDQwOEUKKzoxMEJBMDAwMDA1QjAwMTAwMDU5NjAwNDA5NTMwMDEwMEM5OEIyMjQwMjkKKzoxMEJBMTAwMDk1NkMwMDAwMjQwNDAwNDA4OTk4MDEwMDA5OTkwMDAwRjkKKzoxMEJBMjAwMDhBMzAwMTAwNDU4RkEyNDAxRjdDMDAwMEM5OTQwMDQwNkQKKzoxMEJBMzAwMDgxMzIwMTAwRjA4NzAwNDA4MUIyMDAwMDA0ODAwMDAzRTEKKzoxMEJBNDAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMEE1OTUwMDUyQjkKKzoxMEJBNTAwMDk1MzAwMTAwQUM5NTAwNEIwMkIwMDAwMEYwODcwMDQwMkIKKzoxMEJBNjAwMDgxQjIwMDAwMkI5ODAwNDA5NTMwMDEwMDUxOEZBMjA4NTAKKzoxMEJBNzAwMDgwMzIwMDAwNTE4RkEyMTY4MDMyMDAwMEYwODcyMjQyRUYKKzoxMEJBODAwMDE5N0MwMDAwMDAwMDAwNEIxOTkwMDEwMDBGOTcwMDNBNEMKKzoxMEJBOTAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDAwMjMwMEE2NDEKKzoxMEJBQTAwMDE2QjAwMTAwNTQ4RjgzMUU4MDMyMDAwMDAwMDgwMDBCODYKKzoxMEJBQjAwMDE2REMwMTAwMDAwMDAwMDAyQUMwMDEwMDVFOTcwMDA4QUIKKzoxMEJBQzAwMDgwMzAwMTAwNTg4RjAwNUUxNzkwMDAwMDdGOTcwMDQzODAKKzoxMEJBRDAwMDYxMzEwMTAwOUU5MzAwNDA4RDMwMDEwMDY2OTcwMDA3QTAKKzoxMEJBRTAwMDE2MTQwMTAwMDA4MDAwMTA0MkM5MDEwMDYwOEYyMjQwM0UKKzoxMEJBRjAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNTAKKzoxMEJCMDAwMDYyREQwMTAwNUQ4RkE4NDA4MTMyMDAwMDIzODMwMDg4NDAKKzoxMEJCMTAwMDFDQjAwMDAwMDA5NzAwNUUwNTEwMDEwMEM5OTQwMDQwQjEKKzoxMEJCMjAwMDgxMzIwMTAwNjQ4RjIyMDk4MDMwMDAwMDg2OTcwMDQwMzYKKzoxMEJCMzAwMDEzMzAwMTAwRDA4QjAwMDU0OEIxMDAwMDNDOTYwMDQwNTYKKzoxMEJCNDAwMDgxMzIwMTAwQzk4QjAwNDA4MUIyMDAwMDA0MDBBMjRBOEEKKzoxMEJCNTAwMDFGN0MwMDAwMDAwMDAwNEExRjkwMDEwMDZDOEYyMjQzRjAKKzoxMEJCNjAwMDNEN0MwMDAwMDAwMDAwNDQxOTkwMDEwMDAwMDAwMDQzRUIKKzoxMEJCNzAwMDNEODAwMTAwNkQ4RjAwNDIxOTkwMDAwMDA0MDBBMjRGMkIKKzoxMEJCODAwMDJCN0MwMDAwMDQwMEEyNDUxRjdDMDAwMDE0MDAyRDQ1MDIKKzoxMEJCOTAwMDFGOTAwMTAwMDQwMEEyRjAxNDZDMDAwMDA0MDBBMDAxM0EKKzoxMEJCQTAwMDE0NkMwMDAwREY4RjgzMUU4MDMyMDAwMERGOEYwMDQ0QTIKKzoxMEJCQjAwMDE5OTAwMDAwMkYwMDAwNDA0Mzk5MDEwMDA0MDBBMjQ3QTMKKzoxMEJCQzAwMEU3N0QwMDAwQjQ5NDAwNDA4MTMyMDEwMDg3OEZBMjA4MTUKKzoxMEJCRDAwMDgwMzIwMDAwODc4RkEyMTY4MDMyMDAwMDgzOEZBMjQyM0QKKzoxMEJCRTAwMDE5N0MwMDAwMDA4MjAwMDIwNERDMDEwMEEwOTgwMDQwRTMKKzoxMEJCRjAwMDQ3OTkwMTAwMzAwNTAwNDE4OTMwMDEwMDgwOEZBMjQxNDIKKzoxMEJDMDAwMDE5N0MwMDAwQzk5NDAwNDA4MTMyMDEwMEYwODcwMDQwOTcKKzoxMEJDMTAwMDgxQjIwMDAwQTU5NTAwMTU5NDMwMDEwMEFDOTUwMDRCNTEKKzoxMEJDMjAwMDAyQjAwMDAwRjA4NzAwNDA4MUIyMDAwMDNDOTYwMDQwNjYKKzoxMEJDMzAwMDgxMzIwMTAwMDAwMDAwNEIxOTkwMDEwMDBGOTcwMDNBN0IKKzoxMEJDNDAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDhBOEYyMjQyREIKKzoxMEJDNTAwMDE5N0MwMDAwM0M5NjAwNDA4MTMyMDEwMDhCOEYwMDQwMkYKKzoxMEJDNjAwMDgxQjIwMDAwMDU5NjAwNDA4MTMyMDEwMEMzOEYyMjQxNUQKKzoxMEJDNzAwMDE5N0MwMDAwQzAwMDAwMTU5OEM4MDEwMEMzOEZBMDBCRkMKKzoxMEJDODAwMDk5NkMwMDAwMDQwMDIyNDQxRjdDMDAwMEZGMDcwMDAwQTQKKzoxMEJDOTAwMDdFODkwMTAwMDQwMEE2NDA4MTMyMDAwMDMwMDAwMDEwQkYKKzoxMEJDQTAwMDgwQzgwMTAwMDA4MDAwNDA0NDk5MDEwMDAwMDAwMDUwNUQKKzoxMEJDQjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyRkEKKzoxMEJDQzAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMDk2OEZBODAwNDAKKzoxMEJDRDAwMEUwMzEwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NTQKKzoxMEJDRTAwMDQ4QjEwMTAwQzAwMDAwMTU5OEM4MDEwMDMwMDAyRTBCQkIKKzoxMEJDRjAwMDk5RDAwMTAwMDAwMDZBNTA5OUMwMDEwMDA0MDAyMDBCOTcKKzoxMEJEMDAwMDk5NkMwMDAwQzAwMDYyMDE4MENDMDEwMDBDODAwMDAzMkYKKzoxMEJEMTAwMDQyQzkwMTAwMkQwMDJERjAyMkIwMDEwMDAwMDAwMDRDQUUKKzoxMEJEMjAwMDgwQzAwMTAwMDAwMDAwNUMyMzgwMDEwMEQ0MDAzRjQxN0UKKzoxMEJEMzAwMEU3RTEwMTAwMDQwMDIyNDIxOTdDMDAwMDBCMDAwMEYyNDAKKzoxMEJENDAwMDk4RTQwMTAwMDAwMDAwNUE5OTgwMDEwMDA0MDBBMjAwNUMKKzoxMEJENTAwMDk4NkMwMDAwMjAwNDAwNDA4OTk4MDEwMDA5OTkwMDExQTYKKzoxMEJENjAwMDhBMzAwMTAwMEIwMDAwMTFFNEY1MDEwMDJGMDAyMDQ3OEMKKzoxMEJENzAwMEU3QjUwMTAwQUU4RjIzMEI4MTZDMDAwMDAwMDAwMDRGN0YKKzoxMEJEODAwMEU1OTEwMTAwMDAwMDAwMDg4MEIwMDEwMEMxMDAwMDAxNDEKKzoxMEJEOTAwMDgwQ0UwMTAwMDQwMEE0NDA4MTMyMDAwMDAwMDAwMDBCQUUKKzoxMEJEQTAwMDAzQjAwMTAwMDAwMDAwMTUwMkQwMDEwMDVFOTcwMDAwMDIKKzoxMEJEQjAwMDJBNDAwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNzIKKzoxMEJEQzAwMDYyREQwMTAwQjU4RkE4NDA4MTMyMDAwMDIzODMwMDg4MjYKKzoxMEJERDAwMDFDQjAwMDAwQzk5NDAwMDU0ODMxMDEwMEMwMDAwMDAxRkEKKzoxMEJERTAwMDgwQ0UwMTAwQzE4RjI2MTEwMDMwMDAwMDEwMDAwMDAwM0QKKzoxMEJERjAwMDJBQzgwMTAwMDAwMDAwMDg4MEIwMDEwMDAwMDAwMDAxMTYKKzoxMEJFMDAwMDgwQzAwMTAwQzAwMDAwNDA5OTk4MDEwMDAwMDAwMDAxQkUKKzoxMEJFMTAwMDk4RDAwMTAwNUU5NzAwNEMwMjMwMDEwMEMwMDAwMDQwNDUKKzoxMEJFMjAwMDAzOTgwMTAwQ0I4RjAwNDA4MUIyMDAwMDMwMDAyRjA4NDIKKzoxMEJFMzAwMDgwQjAwMTAwQzAwMDAwMTVGNEM5MDEwMEMwMDAwMDAxN0QKKzoxMEJFNDAwMEU0Q0QwMTAwQzEwMDAwMDE4MENFMDEwMDA0MDBBNDQwNDcKKzoxMEJFNTAwMDgxMzIwMDAwMDQwMDIwMEJFNTZEMDAwMEMwMDAwMDQwQUUKKzoxMEJFNjAwMDAzOTgwMTAwNUU5NzAwMDAyQTQwMDEwMEQwOEYyMjQ0MTEKKzoxMEJFNzAwMDFGN0MwMDAwQUMwMDJGNDAxM0IwMDEwMDAwMDAwMDAxNDcKKzoxMEJFODAwMEUwQzEwMTAwQjAwMDAwNDA0Nzk5MDEwMEQxOEYwMDAxREUKKzoxMEJFOTAwMEUwRDEwMDAwOUU5MzAwNDA4RDMwMDEwMDgwNjMwMEE2MzkKKzoxMEJFQTAwMDE2QjAwMTAwNjY5NzAwMDcxNjE0MDEwMDAwODAwMDEwMEMKKzoxMEJFQjAwMDQyQzkwMTAwRDk4RjIyNDBFMzZEMDAwMDAwMDAwMDQzMTkKKzoxMEJFQzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ2OEZBODQwODIKKzoxMEJFRDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwOTcwMDVFQzAKKzoxMEJFRTAwMDA1MTAwMTAwREM4RjIyMDk4MDMwMDAwMDg2OTcwMDQwOTkKKzoxMEJFRjAwMDgxMzIwMTAwQzk4QjAwMDU0OEIxMDAwMDA0MDBBMjRBNEMKKzoxMEJGMDAwMDFGN0MwMDAwREY4RjAwNEExRjkwMDAwMDA0MDBBMjRGM0EKKzoxMEJGMTAwMDJCN0MwMDAwMDQwMEEyNUMxRjdDMDAwMDA0MDBBMjQ0RjMKKzoxMEJGMjAwMDFGN0MwMDAwMDAwMDAwMDAxMEIwMDEwMDI0MDAyRDE1NEYKKzoxMEJGMzAwMDEwQzAwMTAwMjgwMDJERjAxNkIwMDEwMDIyMDAyREYwRTUKKzoxMEJGNDAwMDI2QjAwMTAwMTQwMDJGRjIwQ0IwMDEwMDAwMDAwMDAxMjcKKzoxMEJGNTAwMEUwRDEwMTAwMDAwMDAwMTAzMkIwMDEwMDAwMDAwMDBCMzEKKzoxMEJGNjAwMDFCQjAwMTAwMDQwMDFGMTUxQTUwMDAwMDAwMDAwMDQwMjMKKzoxMEJGNzAwMDIzQjAwMTAwMDAwMDAwMDEyQUIwMDEwMEJFOTYwMDQwN0QKKzoxMEJGODAwMDM1QjAwMDAwMkYwMDIwNDBFN0IxMDEwMDI5OTBBMjQ1MDQKKzoxMEJGOTAwMDFGN0MwMDAwMDQwMEEyMDU0ODZEMDAwMDI0MDAyMDBCNTcKKzoxMEJGQTAwMEUwQjEwMTAwMjgwMDIwMTNFMEIxMDEwMDIyMDAyMDA2Q0EKKzoxMEJGQjAwMEU0QjEwMTAwRkQ4RjIyNUMxRjdDMDAwMDAwMDAwMDVDRUEKKzoxMEJGQzAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMEZEOEYyMjQwMTcKKzoxMEJGRDAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNjcKKzoxMEJGRTAwMDYyREQwMTAwRjk4RkE4NDA4MTMyMDAwMDIzODMwMDg4QzAKKzoxMEJGRjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDE0MDAwMDQwMjIKKzoxMEMwMDAwMDQzOTkwMTAwMDQwMEEyRjAxNDZDMDAwMDAwODAwMDE5QTQKKzoxMEMwMTAwMDQyQzkwMTAwMjI5MDIyNDBFMzZEMDAwMDEwOTAyMjQyQUMKKzoxMEMwMjAwMDE5N0MwMDAwNzM5NjAwNDA4MTMyMDEwMDVBOTQwMDQwNTAKKzoxMEMwMzAwMDgxMzIwMTAwMUQ5MDIyNEI4MDMyMDAwMDAwMDAwMDQzM0QKKzoxMEMwNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDA2OTBBODQwQ0YKKzoxMEMwNTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDBDOTAyMjQxMzQKKzoxMEMwNjAwMDE5N0MwMDAwRTc5NDAwNDAxMTMwMDEwMDBEOTAwMDA1OUMKKzoxMEMwNzAwMDQ4QjEwMDAwQzk5NDAwNDA4MTMyMDEwMDBGOTAyMjA5QUMKKzoxMEMwODAwMDgwMzAwMDAwODY5NzAwNDA4MTMyMDEwMDJGODMwMDQwRkQKKzoxMEMwOTAwMDA1QjAwMDAwNzM5NjAwNDA4MTMyMDEwMDRGOTQwMDQwQ0IKKzoxMEMwQTAwMDgxMzIwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwMzYKKzoxMEMwQjAwMDYyREQwMTAwMTM5MEE4NDA4MTMyMDAwMDIzODMwMDg4RDQKKzoxMEMwQzAwMDFDQjAwMDAwMTk5MDIyNDExOTdDMDAwMEU3OTQwMDQwNDgKKzoxMEMwRDAwMDExMzAwMTAwMUE5MDAwMDU0OEIxMDAwMEM5OTQwMDQwRDkKKzoxMEMwRTAwMDgxMzIwMTAwMUM5MDIyMDk4MDMwMDAwMDg2OTcwMDQwQjgKKzoxMEMwRjAwMDgxMzIwMTAwMkY4MzAwNDAwNUIwMDAwMDAwMDAwMDQzQTIKKzoxMEMxMDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDFFOTBBODQwRjYKKzoxMEMxMTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NkQKKzoxMEMxMjAwMDQ4QjEwMTAwMjU5MDIyNDExOTdDMDAwMEU3OTQwMDQwQUQKKzoxMEMxMzAwMDExMzAwMTAwMjY5MDAwMDU0OEIxMDAwMEM5OTQwMDQwNkMKKzoxMEMxNDAwMDgxMzIwMTAwMjg5MDIyMDk4MDMwMDAwMDg2OTcwMDQwNEIKKzoxMEMxNTAwMDEzMzAwMTAwRDA4QjAwNDAwNUIwMDAwMDE0MDAwMDQwRjcKKzoxMEMxNjAwMDQzOTkwMTAwMDQwMEEyRjAxNDZDMDAwMDAwODAwMDE5NDMKKzoxMEMxNzAwMDQyQzkwMTAwMzI5MDIyNDBFMzZEMDAwMDAwMDAwMDQzRkMKKzoxMEMxODAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDJFOTBBODQwNjYKKzoxMEMxOTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1RUQKKzoxMEMxQTAwMDQ4QjEwMTAwMDAwMDAwNDAwNUIwMDEwMDM2OTAyMjQxNzYKKzoxMEMxQjAwMDE5N0MwMDAwRTc5NDAwNDAxMTMwMDEwMDM3OTAwMDA1MjEKKzoxMEMxQzAwMDQ4QjEwMDAwQzk5NDAwNDA4MTMyMDEwMDA4MDAyRDBBRTYKKzoxMEMxRDAwMDg0QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDA0MDAyNjQwOUQKKzoxMEMxRTAwMDgxMzIwMDAwMTQwMDIwNDBFMUIxMDEwMDNEOTAwMzFFQTcKKzoxMEMxRjAwMDgwMzIwMDAwM0U5MDAwNDE4N0IwMDAwMDIxMDAwMDQwRTYKKzoxMEMyMDAwMDg3OTgwMTAwMkM5NjAwNDA4MTMyMDEwMDA0MDBBMjVDNTYKKzoxMEMyMTAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMDQzOTAyMjA5NzkKKzoxMEMyMjAwMDgwMzAwMDAwODY5NzAwNDAxMzMwMDEwMDQ2OTAyMjQ0ODEKKzoxMEMyMzAwMDE5N0MwMDAwODY5NzAwNEY4MTMwMDEwMDAwMDAwMDQ0MDcKKzoxMEMyNDAwMDE5ODAwMTAwQzk4QkEyNEExRjdDMDAwMEQwOEIwMDQwREUKKzoxMEMyNTAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMEJBMDAyMDQwMzEKKzoxMEMyNjAwMEU1QjEwMTAwNEU5MDlDMTc4MDMyMDAwMDA0MDAyMjRBODQKKzoxMEMyNzAwMDE5N0MwMDAwQ0MwMDAwNDA0Mzk5MDEwMDM2OTgwMDQwMzIKKzoxMEMyODAwMDgxMzIwMTAwRDQ5NzAwNDAxMzMwMDEwMEMwMDAwMDQwMEIKKzoxMEMyOTAwMDQzOTkwMTAwQzQwMDJERjA4MkIwMDEwMDBCOTgwMEYwMUEKKzoxMEMyQTAwMDg0MzAwMTAwQzk5NDAwNDA4MTMyMDEwMEQwOEIyMjA5MDIKKzoxMEMyQjAwMDgwMzAwMDAwODY5NzAwNDAxMzMwMDEwMEQwOEIwMDQwOTIKKzoxMEMyQzAwMDgxQjIwMDAwMkUwMDAwNDA0Mzk5MDEwMDVBOTAyMjQwQTQKKzoxMEMyRDAwMEU3NkQwMDAwMzIwMDAwNDA0Mzk5MDEwMDY1OTBBMjQwRTQKKzoxMEMyRTAwMEU1NkQwMDAwRjI5NTAwNDA4MTMyMDEwMDI0MDAyMDBCMzIKKzoxMEMyRjAwMEUwQjEwMTAwMjgwMDIwMTNFMEIxMDEwMDIyMDAyMDA2NzcKKzoxMEMzMDAwMEU0QjEwMTAwMDQwMDIyNDIxOTdDMDAwMDE0MDAwMDQwNDYKKzoxMEMzMTAwMDQzOTkwMTAwMDQwMEEyRjA4MDMyMDAwMDE0MDAyMDBBQkEKKzoxMEMzMjAwMEUwQjEwMTAwRDA4QjIyMDk4MDMwMDAwMDg2OTcwMDQwRTgKKzoxMEMzMzAwMDEzMzAwMTAwRDA4QjAwNDA4MUIyMDAwMEYyOTUwMDQwMjQKKzoxMEMzNDAwMDgxMzIwMTAwOUQ5NTAwNDA4MTMyMDEwMDczOTAyMjQxQUQKKzoxMEMzNTAwMDE5N0MwMDAwMDAwMDAwMEI5OUIwMDEwMDA0MDAxRjE1QkIKKzoxMEMzNjAwMDk4NTAwMDAwNzM5MDIwMDE5ODZDMDAwMDcwMDAwMDAzNEEKKzoxMEMzNzAwMDQ4QzkwMTAwMDAwMDJFNDYxRjkwMDEwMDAwMDAwMDUwMzcKKzoxMEMzODAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyMjMKKzoxMEMzOTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDcwOTBBODAwNUUKKzoxMEMzQTAwMEUwMzEwMDAwMDAwMDAwMDU0OEIxMDEwMEFDMDAyRjAwQTIKKzoxMEMzQjAwMDEwQjAwMTAwMDAwMDAwMDFFMEMxMDEwMDE0MDAyRjE1QzEKKzoxMEMzQzAwMDEwQzAwMTAwMDQwMEEyRjA4MDMyMDAwMDAwMDAwMDBBNEEKKzoxMEMzRDAwMDgwQjAwMTAwMDAwMDYwMDE4MEQwMDEwMDAwMDAwMDQ3MzMKKzoxMEMzRTAwMDE5OTAwMTAwRTk4RjIyMDk4MDMyMDAwMDg2OTcwMDA5MjgKKzoxMEMzRjAwMDgwMzAwMTAwRTk4RjAwNDAxM0IwMDAwMDAwODAwMDAzOEUKKzoxMEM0MDAwMDQyQzkwMTAwMDAwMDAwRjA4MkIwMDEwMDEzMDAwMDQwQUEKKzoxMEM0MTAwMDg3OTgwMTAwMDAwMDAwNEM0M0MxMDEwMDJDOTYwMEYwRjkKKzoxMEM0MjAwMDg0MzAwMTAwMDQwMEEyNUMxRjdDMDAwMEM5OEIwMDVDMEEKKzoxMEM0MzAwMDFGOTAwMDAwMkMwMDIwNDBFN0IxMDEwMDJEMDAyMDQwOUIKKzoxMEM0NDAwMEU3QjEwMTAwMkUwMDAwNDA0Mzk5MDEwMDA0MDBBMkYzNkYKKzoxMEM0NTAwMDgwMzIwMDAwMDQwMDIyNDIxOTdDMDAwMEM5OEIwMDQyOTcKKzoxMEM0NjAwMDE5ODAwMDAwMUM5NjAwNDA4MTMyMDEwMDVCOTcwMDQ4NTMKKzoxMEM0NzAwMDk1MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNEUKKzoxMEM0ODAwMDYyREQwMTAwOEQ5MEE4NDAxMzMwMDAwMDIzODMwMDg4RjYKKzoxMEM0OTAwMDFDQjAwMDAwOTM5MDAwMDU0OEIxMDAwMDkyOTAwMDQwNEQKKzoxMEM0QTAwMDEzQjAwMDAwMDAwMDAwMDAxMkIwMDEwMDA4MDAwMDQwQkUKKzoxMEM0QjAwMDQzOTkwMTAwMTQwMDJERjA4MkIwMDEwMDA0MDAyNjQwRDEKKzoxMEM0QzAwMDgxMzIwMDAwMDQwMDIyRjA4NDMwMDAwMDEzMDAwMDQwOUMKKzoxMEM0RDAwMDg3OTgwMTAwMkM5NjAwNDA4MTMyMDEwMDA0MDBBMjVDODQKKzoxMEM0RTAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMEIwOTAwMDA5NUMKKzoxMEM0RjAwMDAwQjAwMDAwMDQwMEEyMDU0ODZEMDAwMEM5OEI4NzQyMEYKKzoxMEM1MDAwMDE5MTAwMDAwOEIwMDJGNDcxOTgwMDEwMEM5OEIwMDQwRDMKKzoxMEM1MTAwMEU3OTEwMDAwMDQwMEEyNDAxRjdDMDAwMDJGMDAwMDQwQjMKKzoxMEM1MjAwMDQ3OTkwMTAwQUU5MDIyNDdFNzdEMDAwMDA0MDAyMjQxQjgKKzoxMEM1MzAwMDE5N0MwMDAwMUQ5NDAwNDBFNzMxMDEwMEFFOTAyMjAwRkMKKzoxMEM1NDAwMDgwMzIwMDAwQTk5MEEyNDAxRjdDMDAwMEM5OTQwMDQwRTYKKzoxMEM1NTAwMDgxMzIwMTAwQUU5MDAwNDA4MUIyMDAwMDMwMDAwMDQwMDYKKzoxMEM1NjAwMDQzOTkwMTAwMzIwMDJERjI5NEIwMDEwMEE1OTUwMEYyMkMKKzoxMEM1NzAwMDAyMzAwMTAwQUM5NTAwNEIwMkIwMDAwMDAwMDAwMDA1NDUKKzoxMEM1ODAwMDQ4QjEwMTAwQUY5MDAwNDAwMUIwMDAwMDAwMDAwMDQwNDEKKzoxMEM1OTAwMDA1QjAwMTAwQjU5MDIyMDA4MDMyMDAwMEI0OTBBMjQyQTQKKzoxMEM1QTAwMDE5N0MwMDAwMDU5NjAwNDA4MTMyMDEwMEI1OTAwMDQwRTIKKzoxMEM1QjAwMDgxQjIwMDAwM0M5NjAwNDA4MTMyMDEwMDU0OTEyMjVDMUYKKzoxMEM1QzAwMDFGN0MwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwNDQKKzoxMEM1RDAwMDQyQzkwMTAwQkQ5MDIyNDBFMzZEMDAwMDAwMDAwMDQ1MEIKKzoxMEM1RTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEJBOTBBODQwNzYKKzoxMEM1RjAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDU0OTEwMDA1QTQKKzoxMEM2MDAwMDQ4QjEwMDAwQjQ5NDAwNDA4MTMyMDEwMEM0OTBBMjA4RjcKKzoxMEM2MTAwMDgwMzIwMDAwQzQ5MEEyMTY4MDMyMDAwMDBGOTcwMDREQjcKKzoxMEM2MjAwMDgxMzAwMTAwMDA4MjAwMDIwNERDMDEwMEYwODcwMDQwM0MKKzoxMEM2MzAwMDgxQjIwMDAwNzQwMDAwNDA0Mzk5MDEwMDAwMDAwMEY4M0UKKzoxMEM2NDAwMDgyQjAwMTAwMDAwMDAwRjA4NEIwMDEwMDAwMDAwMDQxNTEKKzoxMEM2NTAwMDk2QjAwMTAwRDU5MDIyNDI5NjE0MDAwMDAwODAwMDEwOTAKKzoxMEM2NjAwMDQ0QzkwMTAwNjQwMDY4NDA5Nzk4MDEwMDY0MDAwMDRCRDEKKzoxMEM2NzAwMDgwQ0UwMTAwMDQwMEE2NDA4MTMyMDAwMDAwMDAwMDQxOEQKKzoxMEM2ODAwMEYwQjEwMTAwMDAwMDAwNDJGMEIxMDEwMDcwMDAwMDA1QUYKKzoxMEM2OTAwMEUwQzkwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwNjgKKzoxMEM2QTAwMDYyREQwMTAwRDE5MEE4NDA4MTMyMDAwMDA0MDBBMjVDNEMKKzoxMEM2QjAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMDAwMDAwMDQ1OEUKKzoxMEM2QzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ2OTBBODVDNUQKKzoxMEM2RDAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDVFMDEyRDA1QjAKKzoxMEM2RTAwMDQ4QjEwMTAwREE5MDY1RjIxMjMwMDAwMDAwOTkzRjQyMzMKKzoxMEM2RjAwMDEzRjAwMTAwREY5MDIyNDdFNzdEMDAwMDI3ODM3NTg4NTMKKzoxMEM3MDAwMDFDQjAwMDAwRDk5MDAwNDA4MUIyMDAwMDAwMDAwMDQ3M0EKKzoxMEM3MTAwMEU3OTEwMTAwMDQwMDc1MDk5NkU0MDEwMDAwODAwMDEwMTMKKzoxMEM3MjAwMDQ0QzkwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDA2OEE4MDQKKzoxMEM3MzAwMDk3QzAwMTAwMDAwMDAwMDNFMEIxMDEwMDAwODAwMDAzODkKKzoxMEM3NDAwMDQ0OTkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQTQKKzoxMEM3NTAwMDYyQjEwMTAwRTc5MEE4NDBFMTMxMDAwMDIzODMwMDg4MjYKKzoxMEM3NjAwMDFDQjAwMDAwMDA5OTNGNDIxM0YwMDEwMEVCOTA2NTA1RkEKKzoxMEM3NzAwMDQ4MzEwMDAwM0YwMDAwRjM5Njg4MDEwMDAwMDAwMDQwQUYKKzoxMEM3ODAwMEU3QjEwMTAwMDAwMDc1NDA4MUIyMDEwMEYzOTAyMjRCMzcKKzoxMEM3OTAwMDgwMzIwMDAwMDAwMDAwNTU2MUIxMDEwMDAwMDAwMDRCMzQKKzoxMEM3QTAwMDYyQjEwMTAwRjE5MEE4NDA4MTMyMDAwMDAwMDAwMDA3NTIKKzoxMEM3QjAwMDE2QjAwMTAwMDA2MjAwMEIxNkRDMDEwMDJGMDAwMDQwRTMKKzoxMEM3QzAwMDQzOTkwMTAwMDQwMEEyNDdFNzdEMDAwMDFEOTQwMDQwNEEKKzoxMEM3RDAwMDgxMzIwMTAwMTA5MTIyMDA4MDMyMDAwMDRFOTYwMDVGRUQKKzoxMEM3RTAwMDAxMTAwMTAwRjc5MDIyNDA5NTZDMDAwMDA0MDAyMjQxRTYKKzoxMEM3RjAwMDE5N0MwMDAwMDQwMDIyNDAxRjdDMDAwMDAwODAwMDEwMTMKKzoxMEM4MDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzMjQKKzoxMEM4MTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwMTEKKzoxMEM4MjAwMDYyQjEwMTAwMDE5MUE4MDBFMDMxMDAwMDIzODMwMDg4N0IKKzoxMEM4MzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDA0ODAwMDAzQTYKKzoxMEM4NDAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMDA0MDAyMDMxRTIKKzoxMEM4NTAwMDAzNkMwMDAwQTU5NTAwNTI5NTMwMDEwMEM5OTQwMDQwN0EKKzoxMEM4NjAwMDgxMzIwMTAwRjc5MDIyNDE5NzUwMDAwMDBDODAwMDAzQjQKKzoxMEM4NzAwMDQyQzkwMTAwMDAwMDAwRjAwMEIwMDEwMDAwMDAwMDVDQUYKKzoxMEM4ODAwMDAxODAwMTAwQUM5NTAwNEIwMkIwMDAwMEY3OTAwMDA1NUMKKzoxMEM4OTAwMDQ4QjEwMDAwNjY5NzAwNDAwMzMwMDEwMDE3ODAwMDAzOTQKKzoxMEM4QTAwMDQ0QzkwMTAwMDBGMDAwMEM5Njg4MDEwMDAwMDA2MzRDQjAKKzoxMEM4QjAwMDk3RjAwMTAwMDQwMDIwNEQ5NzZDMDAwMDA0MDAyMjQwMTYKKzoxMEM4QzAwMDk3NkMwMDAwMTA4MDAwMDM0NEM5MDEwMDAwMDAwMEFCMTkKKzoxMEM4RDAwMEUxQjEwMTAwMDA5NzAwNUUwNTEwMDEwMDAzMDAwMDA3QjAKKzoxMEM4RTAwMDFBRjQwMTAwMDcwMDAwMDcxNjg4MDEwMDAwQjUwMDBEQ0EKKzoxMEM4RjAwMDQ2QzkwMTAwMUM5MTMwNDA4MTMyMDAwMDA0MDAyMjBCMjcKKzoxMEM5MDAwMEU2N0QwMDAwMDAwMDAwMEJFNjgxMDEwMDAwQjcwMDBEOEQKKzoxMEM5MTAwMDQ2QzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwMDAwMDBCNjgKKzoxMEM5MjAwMEU2ODEwMTAwMTAwMDEwMEY5NEY0MDEwMDkzMDQwMDVGRjEKKzoxMEM5MzAwMDk1MDQwMTAwNzY5NTAwNDA4MTMyMDEwMDJBOTEyMjUwMzEKKzoxMEM5NDAwMEZEN0YwMDAwMjY5MTQ2NDA4MTMyMDAwMDI5OTFBMjQwREYKKzoxMEM5NTAwMDMxNkYwMDAwMDQwMDFFNDA4MUIyMDAwMDAwMDAxRTQxNDMKKzoxMEM5NjAwMDMxRDMwMTAwMDAwMDJFMDU0OEIxMDEwMDAwMDAwMDQwNTUKKzoxMEM5NzAwMEUxQjEwMTAwMDAwMDAwNDAwRkIwMDEwMEFCOTQwMDQxQTQKKzoxMEM5ODAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMEI0OTQwMDQwODMKKzoxMEM5OTAwMDgxMzIwMTAwM0Q5MUEyMDg4MDMyMDAwMDNEOTFBMjE2MzMKKzoxMEM5QTAwMDgwMzIwMDAwMDA4MjAwMDIwNERDMDEwMDAwMDAwMDQ1MkIKKzoxMEM5QjAwMDAzRjAwMTAwMDAwMDAwMDEwMEMwMDEwMDM1OTEzNzVDNjgKKzoxMEM5QzAwMDYxMzEwMDAwMDAwMDAwMUI2MkIxMDEwMDNBOTEyODQwNzMKKzoxMEM5RDAwMDgxMzIwMDAwMDQwMEEyNUM3NzdEMDAwMDM2OTEwMDQwQTcKKzoxMEM5RTAwMDgxQjIwMDAwMDAwMDAwMDA2MkIxMDEwMDNBOTFBODQwNEQKKzoxMEM5RjAwMDgxMzIwMDAwRjA4NzE3NDA4MUIyMDAwMDc0MDAyMjQwQUQKKzoxMENBMDAwMEYxQjEwMTAwMDAwMDAwNDBFMUIxMDEwMDVCOTcwMDRBNzQKKzoxMENBMTAwMDk1MzAwMTAwMDQwMEEyNUMxRjdDMDAwMDFDOTYwMDVDQTUKKzoxMENBMjAwMDFGMTAwMTAwQzQ5MDAwNDA4MUIyMDAwMDA0MDBBMjQwMjkKKzoxMENBMzAwMDFGN0MwMDAwMkYwMDAwNDA0Nzk5MDEwMDUxOTEyMjQ3QzAKKzoxMENBNDAwMEU3N0QwMDAwMDQwMDIyNDExOTdDMDAwMDFEOTQwMDQwOTUKKzoxMENBNTAwMEU3MzEwMTAwNTE5MTIyMDA4MDMyMDAwMDRDOTFBMjQwNDgKKzoxMENBNjAwMDFGN0MwMDAwQzk5NDAwNDA4MTMyMDEwMDUxOTEwMDQwQjgKKzoxMENBNzAwMDgxQjIwMDAwMzAwMDAwNDA0Mzk5MDEwMDMyMDAyREYyRTUKKzoxMENBODAwMDk0QjAwMTAwQTU5NTAwRjIwMjMwMDEwMEFDOTUwMDRCNzYKKzoxMENBOTAwMDAyQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDVCOTcwMDQ4QUIKKzoxMENBQTAwMDk1MzAwMTAwMDQwMEEyNUMxRjdDMDAwMDFDOTYwMDVDMTUKKzoxMENBQjAwMDFGMTAwMTAwMDQwMEEyMDU0ODZEMDAwMDU4OTE4NzQyMzQKKzoxMENBQzAwMDE5MTAwMDAwOEIwMDJGNDcxOTgwMDEwMDAwMDAwMDQwNjIKKzoxMENBRDAwMEU3OTEwMTAwODY5NzAwNDI4MTMwMDEwMEM5OEIwMDQwMzgKKzoxMENBRTAwMDgxQjIwMDAwMUM5NjAwNDA4MTMyMDEwMDA0MDBBMjVDNkIKKzoxMENBRjAwMDFGN0MwMDAwQzk4QjAwNUMxRjkwMDAwMEIwMDAwMDQwNEMKKzoxMENCMDAwMDQzOTkwMTAwMDQwMEEyRjA4MDMyMDAwMEJBMDAyMDQwRTYKKzoxMENCMTAwMEU1QjEwMTAwRDQ5NzAwNDA4MTMyMDEwMEMwMDAwMDQwMUYKKzoxMENCMjAwMDQzOTkwMTAwQzQwMDJERjA4MkIwMDEwMDBCOTgwMEYwODEKKzoxMENCMzAwMDg0MzAwMTAwQzk5NDAwNDA4MTMyMDEwMDg2OTcwMDQ1OEQKKzoxMENCNDAwMDgxMzAwMTAwQzk4QjIyNDIxOTdDMDAwMDBGOTcwMDNBMDYKKzoxMENCNTAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMENCNjAwMDgxQjIwMDAwQjQ5NDAwNDA4MTMyMDEwMDcwOTFBMjA4QUIKKzoxMENCNzAwMDgwMzIwMDAwNzA5MUEyMTY4MDMyMDAwMDBGOTcwMDQ3QUIKKzoxMENCODAwMDgwMzAwMTAwMDA4MjAwMDIwNERDMDEwMEYwODcwMDQwRDgKKzoxMENCOTAwMDgxQjIwMDAwMTA4MDAwMDM0NEM5MDEwMDAwRTEwMEE2M0EKKzoxMENCQTAwMDg0QjAwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwMkQKKzoxMENCQjAwMEYxQjEwMTAwMDAwMDYwMDc4NDk0MDEwMDAwOTcwMDVFNUQKKzoxMENCQzAwMDA1MTAwMTAwQzk4QjAwNDA4MUIyMDAwMDhBMDAwMDQwQkUKKzoxMENCRDAwMDQ3OTkwMTAwQzk5NDAwNDFFNzQxMDEwMEQwOEIwMDQwMTIKKzoxMENCRTAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDA0MDBBMjQxQ0IKKzoxMENCRjAwMDE5N0MwMDAwMDQwMEEyNDgxRjdDMDAwMEYyOTUwMDQwNTAKKzoxMENDMDAwMDgxMzIwMTAwMDQwMEEzMEEwQzZDMDAwMDlEOTUwMDQwRDUKKzoxMENDMTAwMDgxMzIwMTAwMDAwMDAwMDEyQ0IwMDEwMDAwMDAwMDE1NkQKKzoxMENDMjAwMDEwQjAwMTAwMDAwMDAwMDAxMEMwMDEwMDA0MDAxRjBBNDUKKzoxMENDMzAwMDJDNTAwMDAwMTQwMDAwNDA0Mzk5MDEwMDA0MDBBMkYwQjEKKzoxMENDNDAwMDgwMzIwMDAwMDAwMDAwMTAzMkIwMDEwMEExOTcwMDA2MDEKKzoxMENDNTAwMDA0MzAwMTAwOEU5MUEyNDgxRjdDMDAwMDhDOTE4NDQ4MTIKKzoxMENDNjAwMDFGMTAwMDAwQUMwMDAwNDA0Nzk5MDEwMDhFOTEwMDBBOUYKKzoxMENDNzAwMEUwQzEwMDAwMDAwMDAwMEEwMkIwMDEwMDlFOTMwMDAxMjQKKzoxMENDODAwMDhDMzAwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNDEKKzoxMENDOTAwMDYyREQwMTAwOEY5MUE4NDA4MTMyMDAwMDIzODMwMDg4NkIKKzoxMENDQTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDAyQjcKKzoxMENDQjAwMDEwQzAwMTAwOUM5MTIyMDIxNDUwMDAwMDc5OTYwMDQ1OUEKKzoxMENDQzAwMDFGMDAwMTAwODY5MTIyNUMxRjdDMDAwMDAwMDAwMDQ3Q0QKKzoxMENDRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk4OTFBODVDODQKKzoxMENDRTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDg2OTEwMDA1MEYKKzoxMENDRjAwMDQ4QjEwMDAwMDAwMDAwMEIxQkIwMDEwMDA4MDAyRDQwRUYKKzoxMENEMDAwMDg1QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDAwMDAwMDQwOEEKKzoxMENEMTAwMDA1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDAwMDAwMDQ1NUQKKzoxMENEMjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEEyOTFBODQwNDUKKzoxMENEMzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NDEKKzoxMENENDAwMDQ4QjEwMTAwQTg5MTIyMDk4MDMwMDAwMDg2OTcwMDQwNzgKKzoxMENENTAwMDEzMzAwMTAwQUM5MTIyNDQxOTdDMDAwMDg2OTcwMDRGRUIKKzoxMENENjAwMDgxMzAwMTAwQUM5MUEyNDcxRjdDMDAwMDAwMDAwMDQ0MEMKKzoxMENENzAwMDE5ODAwMTAwRkYwNzAwMDgwMDhDMDEwMDA0MDAyNjQwMTQKKzoxMENEODAwMDgxMzIwMDAwQkI5MTIyNEExRjdDMDAwMEIzOTFBMjE2QTEKKzoxMENEOTAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwODEKKzoxMENEQTAwMEU3QjEwMTAwQzk4QjAwNDA4MUIyMDAwMDJEMDAyRDA4QzEKKzoxMENEQjAwMDJBQjAwMTAwQjc5MTIyNDIxOTdDMDAwMDNDOTYwMDQwNDUKKzoxMENEQzAwMDgxMzIwMTAwQjg5MTAwNDA4MUIyMDAwMDA1OTYwMDQwMTgKKzoxMENERDAwMDgxMzIwMTAwMzAwMDJFMDAyQUQwMDEwMDMyMDAyQTE1RDUKKzoxMENERTAwMEU0QjEwMTAwQzk4QjAwMTZFNEIxMDAwMEQxOTEyMjE2MTQKKzoxMENERjAwMDAyMzAwMDAwMDQwMEEyNDcxRjdDMDAwMDAwMDAwMDA4NzEKKzoxMENFMDAwMDJBQjAwMTAwMkI5ODAwNDA5NTMwMDEwMEMxOTFBMjQwNEEKKzoxMENFMTAwMDExNkMwMDAwRDI5MTIyNDAyRDZDMDAwMDA0MDBBMjA1OEMKKzoxMENFMjAwMDQ4NkQwMDAwMDQwMDIyNDQxRjdDMDAwMEFDMDAwMDQwNUMKKzoxMENFMzAwMDQ3OTkwMTAwQjAwMDJCMDFFMEMxMDEwMDAwMkIwMEE2QzIKKzoxMENFNDAwMDE2QjAwMTAwMDAwMDAwMDFFMEQxMDEwMDVFOTcwMDA4NkIKKzoxMENFNTAwMDgwMzAwMTAwQ0E5MTAwNUUxNzkwMDAwMDdGOTcwMDQzNjgKKzoxMENFNjAwMDYxMzEwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwODkKKzoxMENFNzAwMDYyREQwMTAwQ0I5MUE4NDA4MTMyMDAwMDIzODMwMDg4NEQKKzoxMENFODAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDY2OTcwMDA3RDMKKzoxMENFOTAwMDE2MTQwMTAwMDA5NzAwNUUwNTEwMDEwMEM5OTQwMDQwQkYKKzoxMENFQTAwMDgxMzIwMTAwMkYwMDIwNDBFN0IxMDEwMEQwOEIwMDQwMEIKKzoxMENFQjAwMDgxQjIwMDAwMDAwMDAwMEIxQkIwMDEwMDA0MDAxRjE1MzAKKzoxMENFQzAwMDFBNTAwMDAwRTA5MTIwMTYxQTZDMDAwMDA0MDAyMjQwNjUKKzoxMENFRDAwMDFGN0MwMDAwNzAwMDAwMDM0OEM5MDEwMDAwMDAyMjUwQzAKKzoxMENFRTAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwRkEKKzoxMENFRjAwMEUwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMEEwMDAwMEE0MDcKKzoxMENGMDAwMDYyREQwMTAwREQ5MUE4NDYxRjEwMDAwMDAwMDAwMDA1NTEKKzoxMENGMTAwMDQ4QjEwMTAwMDAwMDAwMDAxMEIwMDEwMDAwMDAwMDE1NDEKKzoxMENGMjAwMDEwQzAwMTAwMDAwMDAwMEEyQUIwMDEwMDAwMDAwMDBBNDEKKzoxMENGMzAwMDJDRDAwMTAwMDQwMDFGMTY4MDMyMDAwMDE0MDAwMDQwQjUKKzoxMENGNDAwMDQzOTkwMTAwMDQwMEEyRjA4MDMyMDAwMEFDMDAyRjQwQTEKKzoxMENGNTAwMDIzQjAwMTAwRUE5MTg0NDUxRjEwMDAwMEVCOTEwMDBBMDQKKzoxMENGNjAwMEUwQzEwMDAwMDAwMDAwMEEwMkIwMDEwMEJFOTYwMDQwQ0YKKzoxMENGNzAwMDM1QjAwMDAwMDQwMEEyNUMxRjdDMDAwMDAwODAwMDE5OTYKKzoxMENGODAwMDQyQzkwMTAwRjQ5MTIyNDBFMzZEMDAwMDAwMDAwMDQzMUIKKzoxMENGOTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEYwOTFBODQwODUKKzoxMENGQTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1Q0YKKzoxMENGQjAwMDQ4QjEwMTAwMDU5MkEyMDIxQTUwMDAwMDBBOTIyMjQwRDQKKzoxMENGQzAwMDJENkMwMDAwMDQwMDIyNDAxRjdDMDAwMDAwODAwMDEwMzcKKzoxMENGRDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzNEQKKzoxMENGRTAwMEYwQjEwMTAwRkYwNzAwMDhFMDhEMDEwMDAwMDAwMDQyRTEKKzoxMENGRjAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEZDOTFBODQwODUKKzoxMEQwMDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NkUKKzoxMEQwMTAwMDQ4QjEwMTAwMkYwMDIwNDdFN0I1MDEwMDBDODAwMDAzNTQKKzoxMEQwMjAwMDQyQzkwMTAwMTAwMDAwRjAxMEM4MDEwMEYwMDcwMDQwRTQKKzoxMEQwMzAwMDFCOTgwMTAwMEE5MjAwNUMxMTgwMDAwMDA0MDBBMjVGQUUKKzoxMEQwNDAwMDFCN0MwMDAwRkYwNzAwMDg5ODg4MDEwMDAwMDAwMDAyMTgKKzoxMEQwNTAwMDk4QzAwMTAwMDQwMDIwMEI5OTZDMDAwMDAwMDAwMDAyNDEKKzoxMEQwNjAwMDEwQzAwMTAwMDQwMDIyNDAyMzZDMDAwMDA0MDBBMzQzMTAKKzoxMEQwNzAwMDIzNkMwMDAwRTc5NDAwNDAxRjAwMDEwMDAwMDAwMDA1NDEKKzoxMEQwODAwMDQ4QjEwMTAwMTA5MjIzMEQyQzZDMDAwMDAwMDAwMDQwRkMKKzoxMEQwOTAwMDFGOTAwMTAwMTk5MjIyNDYxRjdDMDAwMDAwMDAwMDQ2RUMKKzoxMEQwQTAwMDFGODAwMTAwNzA4MDAwMDM0MkM5MDEwMDE5OTIyMjQwRDQKKzoxMEQwQjAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDEwN0IKKzoxMEQwQzAwMDYyREQwMTAwMTU5MkE4NDA4MTMyMDAwMDIzODMwMDg4QjAKKzoxMEQwRDAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDA4MDAyRDQwMTAKKzoxMEQwRTAwMDg1QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDAwMDAwMDQwQTcKKzoxMEQwRjAwMDA1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDAwMDAwMDQ1N0EKKzoxMEQxMDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDFFOTJBODQwRTQKKzoxMEQxMTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NUQKKzoxMEQxMjAwMDQ4QjEwMTAwMjQ5MjIyMDk4MDMwMDAwMDg2OTcwMDQwMTcKKzoxMEQxMzAwMDEzMzAwMTAwMjg5MjIyNDQxOTdDMDAwMDg2OTcwMDRGOEEKKzoxMEQxNDAwMDgxMzAwMTAwMjg5MkEyNDcxRjdDMDAwMDAwMDAwMDQ0QUIKKzoxMEQxNTAwMDE5ODAwMTAwRkYwNzAwMDgwMDhDMDEwMDA0MDAyNjQwMzAKKzoxMEQxNjAwMDgxMzIwMDAwM0U5MjIyNEExRjdDMDAwMDJGOTJBMjE2QkMKKzoxMEQxNzAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwOUQKKzoxMEQxODAwMEU3QjEwMTAwQzk4QjAwNDA4MUIyMDAwMDJEMDAyRDA4REQKKzoxMEQxOTAwMDJBQjAwMTAwM0E5MjIyNDIxOTdDMDAwMDMzOTJBMkYzOTUKKzoxMEQxQTAwMDg0MzAwMDAwMDAwMDAwQTU4NUIwMDEwMDAwMDAwMDQxQUYKKzoxMEQxQjAwMDg1RDAwMTAwRDQwMDNFNDE4NUUwMDEwMDM3OTIyMjQwMzUKKzoxMEQxQzAwMDFGN0MwMDAwMDAwMDAwNUExMTkwMDEwMDBCMDAwMDA4QjUKKzoxMEQxRDAwMEU0RjUwMTAwM0M5NjAwNDA4MTMyMDEwMDNCOTIwMDQwQTIKKzoxMEQxRTAwMDgxQjIwMDAwMDU5NjAwNDA4MTMyMDEwMDMwMDAyRTAwMUYKKzoxMEQxRjAwMDJBRDAwMTAwMzIwMDJBMTVFNEIxMDEwMEM5OEIwMDE2QzMKKzoxMEQyMDAwMEU0QjEwMDAwNDE5MkEyMTYwMjMwMDAwMEM5OTQwMDQwMkYKKzoxMEQyMTAwMDgxMzIwMTAwOUE5MjAwNDA4MUIyMDAwMDJEMDAyRDA4NTkKKzoxMEQyMjAwMDJBQjAwMTAwNTQ5MjIyNDcxRjdDMDAwMDA0MDBBMDkxMDQKKzoxMEQyMzAwMDAzNkMwMDAwNEU5MjIyNDIxOTdDMDAwMDQ3OTJBMkYzMzgKKzoxMEQyNDAwMDg0MzAwMDAwMDAwMDAwQTU4NUIwMDEwMDAwMDAwMDQxMEUKKzoxMEQyNTAwMDg1RDAwMTAwRDQwMDNFNDE4NUUwMDEwMDRCOTIyMjQwODAKKzoxMEQyNjAwMDFGN0MwMDAwMDAwMDAwNUExMTkwMDEwMDBCMDAwMDA4MTQKKzoxMEQyNzAwMEU0RjUwMTAwMjAwNDAwNDA4OTk4MDEwMDA5OTkwMDA4QTQKKzoxMEQyODAwMDhBMzAwMTAwNTgwMTJEMDAyQUQwMDEwMDYwMDEyREYwRTQKKzoxMEQyOTAwMDEwQjAwMTAwMDAwMDAwRjAyQ0IwMDEwMDAwMDAwMDE2RUEKKzoxMEQyQTAwMDgwQjIwMTAwMDQwMDI3NDAxMTZDMDAwMDg3OEYwMDQwMEQKKzoxMEQyQjAwMDgxQjIwMDAwMDQwMEEzOTEwMzZDMDAwMDJCOTgwMDQxOTAKKzoxMEQyQzAwMDk1MzAwMTAwNUQ5MkEyMDg4MDMyMDAwMDVEOTJBMjE2QTYKKzoxMEQyRDAwMDgwMzIwMDAwMDAwMDAwNDE5N0IwMDEwMDVCOTIyMzBERjYKKzoxMEQyRTAwMDAyNkMwMDAwMDAwMDAwNDE5N0MwMDEwMEFDOTUwMDRCQUIKKzoxMEQyRjAwMDAyQjAwMDAwOUE5MjAwMDU0OEIxMDAwMDA0MDBBMjA1QTcKKzoxMEQzMDAwMDQ4NkQwMDAwMDQwMDIyNDQxRjdDMDAwMEFDMDAyRjAxODcKKzoxMEQzMTAwMDE0QjAwMTAwQjAwMDJCMDFFMEMxMDEwMDAwMkIwMEE2RjkKKzoxMEQzMjAwMDE2QjAwMTAwMDQwMDIyNDExOTdDMDAwMDAwMDAwMDAxMzkKKzoxMEQzMzAwMEUwRDEwMTAwNzA5MjIzMEQwMjZDMDAwMDAwODAwMDEwMEIKKzoxMEQzNDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzRDkKKzoxMEQzNTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwQzYKKzoxMEQzNjAwMDYyQjEwMTAwNjk5MkE4MDBFMDMxMDAwMDIzODMwMDg4QzcKKzoxMEQzNzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBDODAwMDAzNTMKKzoxMEQzODAwMDQyQzkwMTAwMTAwMDAwRjAyMkM4MDEwMDAwMDAwMDVDNEEKKzoxMEQzOTAwMDIzODAwMTAwMDAwMDAwMDE4NEIwMDEwMDczOTIyMzBEN0UKKzoxMEQzQTAwMDAyNkMwMDAwMDAwMDAwMEQwMkIwMDEwMDAwMDAwMDA4NDcKKzoxMEQzQjAwMDgwQjAwMTAwNzg5MjIyNDAxQjZDMDAwMDVFOTcwMDAxNTMKKzoxMEQzQzAwMDg0NTAwMTAwODE5MjIyNDA4NTZDMDAwMDAwMDAwMDAxMjEKKzoxMEQzRDAwMDgwQzAwMTAwMTA4MDAwMTA0NkM5MDEwMDAwMDAwMDRGMEQKKzoxMEQzRTAwMDQzODEwMTAwMDAwMDAwNDJGMEIxMDEwMDIwMDAwMDQwMzQKKzoxMEQzRjAwMEYwQzkwMTAwMDAwMDAwMTZGMEIxMDEwMDAwMDAwMDQzNzgKKzoxMEQ0MDAwMDYxQjEwMTAwQTAwMDAwQTE2MkREMDEwMDdFOTJBODExQkYKKzoxMEQ0MTAwMEUwMzEwMDAwMDQwMDIyNDAyMzZDMDAwMDkwOTIwMDVFODYKKzoxMEQ0MjAwMDE3OTAwMDAwODQ5MjIzMEQwMjZDMDAwMDAwMDAwMDBEOTQKKzoxMEQ0MzAwMDAyQjAwMTAwMDAwMDAwMDE4NEQwMDEwMDg5OTIyMjQwNjYKKzoxMEQ0NDAwMDFCNkMwMDAwN0Y5NzAwNDM2MTMxMDEwMDkwOTIyMjQwRTUKKzoxMEQ0NTAwMDg1NkMwMDAwMDAwMDAwMDExMkMwMDEwMDEwODAwMDEwNjcKKzoxMEQ0NjAwMDQ2QzkwMTAwMDAwMDAwNEY0MzgxMDEwMDAwMDAwMDQyNTYKKzoxMEQ0NzAwMEYwQjEwMTAwMDAwMDAwMDlGMEIxMDEwMDAwMDAwMDE4NDcKKzoxMEQ0ODAwMEYwQjEwMTAwQTAwMDAwQTE2MkREMDEwMDhFOTJBODExQTAKKzoxMEQ0OTAwMEUwMzEwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwRDUKKzoxMEQ0QTAwMDYyREQwMTAwOTE5MkE4MEEwMjMwMDAwMDIzODMwMDg4MDcKKzoxMEQ0QjAwMDFDQjAwMDAwQzk5NDAwMDU0ODMxMDEwMDk4OTIyMzBENkEKKzoxMEQ0QzAwMDAyNkMwMDAwRkYwNzAwMTEwMDhDMDEwMEM5OTQwMDQwQUQKKzoxMEQ0RDAwMDgxMzIwMTAwNjY5NzAwMDcxNjE0MDEwMDAwOTcwMDVFNzQKKzoxMEQ0RTAwMDA1MTAwMTAwMkYwMDIwNDBFN0IxMDEwMEQwOEIwMDQwNjMKKzoxMEQ0RjAwMDgxQjIwMDAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4NzIKKzoxMEQ1MDAwMDgyQjAwMTAwMDQwMDI2NDA4MTMyMDAwMDAwMDAwMEY4RDMKKzoxMEQ1MTAwMDhDQjAwMTAwMDAwMDAwRjA4RUIwMDEwMEVDOTUwMDQwREUKKzoxMEQ1MjAwMDEzMzAwMTAwMDQwMDBDNDc4MDMyMDAwMDAwMDAwMDQwNkUKKzoxMEQ1MzAwMDg1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDlEOTUwMDQwODgKKzoxMEQ1NDAwMDgxMzIwMTAwMDQwMDIwOTEwMzZDMDAwMDAwODAwMDEwNzMKKzoxMEQ1NTAwMDQyQzkwMTAwQUU5MjIyNDBFMzZEMDAwMDAwMDAwMDQ1ODgKKzoxMEQ1NjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEFBOTJBODQwRjQKKzoxMEQ1NzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1RjkKKzoxMEQ1ODAwMDQ4QjEwMTAwQjA5MjIyMDk4MDMwMDAwMDg2OTcwMDQwMjcKKzoxMEQ1OTAwMDEzMzAwMTAwMDAwMDAwMEIxQkIwMDEwMDAwMDAwMDE1NUIKKzoxMEQ1QTAwMDFBRDAwMTAwQjc5MkEyNDExOTdDMDAwMDJCOTgwMDQwQ0MKKzoxMEQ1QjAwMDk1MzAwMTAwMDAwMDAwMTY4MEIyMDEwMEMwOTIyNzA4REIKKzoxMEQ1QzAwMDgwMzIwMDAwQzE5MTAwMDAyQUMwMDAwMDJCOTgwMDQxNjkKKzoxMEQ1RDAwMDk1MzAwMTAwMDAwMDAwMTY4MEIyMDEwMEJCOTIyNzA4QzAKKzoxMEQ1RTAwMDgwMzIwMDAwNUQ5MjAwMDAyQUMwMDAwMDAwMDAwMDQxNkYKKzoxMEQ1RjAwMDk3QjAwMTAwQkU5MjIzMEQwMjZDMDAwMDAwMDAwMDQxQjQKKzoxMEQ2MDAwMDk3QzAwMTAwQUM5NTAwNEIwMkIwMDAwMDAwMDAwMDA1N0YKKzoxMEQ2MTAwMDQ4QjEwMTAwQzk4QjIyNDIxOTdDMDAwMDBGOTcwMDNBRTMKKzoxMEQ2MjAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDA0MDBBMjRBOTEKKzoxMEQ2MzAwMDFGN0MwMDAwQzU5MjAwNEExRjkwMDAwMDA0MDBBMjQxMTgKKzoxMEQ2NDAwMDE5N0MwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ0QkYKKzoxMEQ2NTAwMDFGN0MwMDAwMDQwMEEyNDUxRjdDMDAwMEZGOTQwMDAwMTYKKzoxMEQ2NjAwMDEwMzAwMTAwMDAwMDAwMTUxMEMwMDEwMDAwMDAwMDEwODMKKzoxMEQ2NzAwMDMyQjAwMTAwQTE5NzAwMDYwNDMwMDEwMEQyOTJBMjQ0MEEKKzoxMEQ2ODAwMDFGN0MwMDAwMDAwMDAwMEIxQkIwMDEwMDAwMDAwMDBBMUUKKzoxMEQ2OTAwMDJDRDAwMTAwMDAwMDAwMEEwMkIwMDEwMDlFOTMwMDAxOUUKKzoxMEQ2QTAwMDhDMzAwMTAwMDA4MDAwMTk0MkM5MDEwMEQ5OTIyMjQwNEIKKzoxMEQ2QjAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNzQKKzoxMEQ2QzAwMDYyREQwMTAwRDU5MkE4NDA4MTMyMDAwMDIzODMwMDg4RUEKKzoxMEQ2RDAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDAyN0QKKzoxMEQ2RTAwMDEwQzAwMTAwRTI5MjIyMDIxNDUwMDAwMDc5OTYwMDQ1MTkKKzoxMEQ2RjAwMDFGMDAwMTAwQ0I5MjIyNUMxRjdDMDAwMDAwMDAwMDQ3NEQKKzoxMEQ3MDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMERFOTJBODVDMDIKKzoxMEQ3MTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMENCOTIwMDA1OEUKKzoxMEQ3MjAwMDQ4QjEwMDAwMDgwMDJENDA4NUIwMDEwMDAwMDAwMEYwNjUKKzoxMEQ3MzAwMDgyQjAwMTAwMDAwMDAwNDAwNUIwMDEwMDJDOTYwMDQxQkQKKzoxMEQ3NDAwMDg3MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNzkKKzoxMEQ3NTAwMDYyREQwMTAwRTc5MkE4NDA4MTMyMDAwMDIzODMwMDg4NDcKKzoxMEQ3NjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEVEOTIyMjA5NDQKKzoxMEQ3NzAwMDgwMzAwMDAwODY5NzAwNDAxMzMwMDEwMEYwOTIyMjQ0NzAKKzoxMEQ3ODAwMDE5N0MwMDAwODY5NzAwNEY4MTMwMDEwMDAwMDAwMDQ0QTIKKzoxMEQ3OTAwMDE5ODAwMTAwRkYwNzAwMDgwMDhDMDEwMDA0MDAyNjQwRUEKKzoxMEQ3QTAwMDgxMzIwMDAwRkY5MjIyNEExRjdDMDAwMEY3OTJBMjE2RUQKKzoxMEQ3QjAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwNTcKKzoxMEQ3QzAwMEU3QjEwMTAwQzk4QjAwNDA4MUIyMDAwMDJEMDAyRDA4OTcKKzoxMEQ3RDAwMDJBQjAwMTAwRkI5MjIyNDIxOTdDMDAwMDNDOTYwMDQwRDYKKzoxMEQ3RTAwMDgxMzIwMTAwRkM5MjAwNDA4MUIyMDAwMDA1OTYwMDQwQTkKKzoxMEQ3RjAwMDgxMzIwMTAwMzAwMDJFMDAyQUQwMDEwMDMyMDAyQTE1QUIKKzoxMEQ4MDAwMEU0QjEwMTAwQzk4QjAwMTZFNEIxMDAwMEJDOTFBMjE2N0UKKzoxMEQ4MTAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwRjYKKzoxMEQ4MjAwMEU3QjEwMTAwRDA4QjAwNDA4MUIyMDAwMDA0MDAyMjQxMkEKKzoxMEQ4MzAwMDE5N0MwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ0Q0QKKzoxMEQ4NDAwMDFGN0MwMDAwMDQwMEEyNDUxRjdDMDAwMDA0MDBBMjRBQzcKKzoxMEQ4NTAwMDFGN0MwMDAwRkY5NDAwNEExRjEwMDEwMEQ0OTEwMDEwQUIKKzoxMEQ4NjAwMDMyQjAwMDAwOEEwMDIwNDBFN0IxMDEwMDBFOTNBMjQxQ0YKKzoxMEQ4NzAwMDE5N0MwMDAwQzk5NDAwNDA4MTMyMDEwMDExOTMwMDQwREUKKzoxMEQ4ODAwMDgxQjIwMDAwQTU5NTAwMTU5NDMwMDEwMEFDOTUwMDRCQzUKKzoxMEQ4OTAwMDAyQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDEzOTMyMjQyQ0QKKzoxMEQ4QTAwMDE5N0MwMDAwMEY5NzAwM0E4MTMwMDEwMDg2OTcwMDQ1RUYKKzoxMEQ4QjAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDY1OTAwMDQ1QjUKKzoxMEQ4QzAwMDFGOTAwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDBBMjQ3QzAKKzoxMEQ4RDAwMDFGN0MwMDAwRjI5NTAwNDA4MTMyMDEwMDA0MDBBMzBBODEKKzoxMEQ4RTAwMDBDNkMwMDAwOUQ5NTAwNDA4MTMyMDEwMEQ0OTEwMDAxMzQKKzoxMEQ4RjAwMDJDQjAwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDBBMjQ4NjIKKzoxMEQ5MDAwMDFGN0MwMDAwQjQ5NDAwNDA4MTMyMDEwMDJDOTNBMjA4RDcKKzoxMEQ5MTAwMDgwMzIwMDAwMkM5M0EyMTY4MDMyMDAwMDAwODIwMDAyQTgKKzoxMEQ5MjAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxREMKKzoxMEQ5MzAwMDAwQzAwMTAwMjQ5MzM3NUM2MTMxMDAwMDAwMDAwMDFCMkYKKzoxMEQ5NDAwMDYyQjEwMTAwMjk5MzI4NDA4MTMyMDAwMDA0MDBBMjVDRUEKKzoxMEQ5NTAwMDc3N0QwMDAwMjU5MzAwNDA4MUIyMDAwMDAwMDAwMDAwQTgKKzoxMEQ5NjAwMDYyQjEwMTAwMjk5M0E4NDA4MTMyMDAwMEYwODcxNzQwN0UKKzoxMEQ5NzAwMDgxQjIwMDAwNTgwMTIwMDhFMEIxMDEwMDYwMDEyMDE2Q0EKKzoxMEQ5ODAwMEUwQjEwMTAwRjI5NTAwNDcxRjEwMDEwMDA0MDBBMzBBNTYKKzoxMEQ5OTAwMDBDNkMwMDAwOUQ5NTAwNDA4MTMyMDEwMEQ0OTEwMDAxODMKKzoxMEQ5QTAwMDJDQjAwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDBBMjQ3QjIKKzoxMEQ5QjAwMDFGN0MwMDAwQjQ5NDAwNDcxRjEwMDEwMDQzOTNBMjA4OEQKKzoxMEQ5QzAwMDgwMzIwMDAwNDM5M0EyMTY4MDMyMDAwMDNGOTNBMjQyQUYKKzoxMEQ5RDAwMDE5N0MwMDAwMDA4MjAwMDIwNERDMDEwMEEwOTgwMDQwRDUKKzoxMEQ5RTAwMDQ3OTkwMTAwMzAwNTAwNDE4OTMwMDEwMDA0MDAyMjQxQkYKKzoxMEQ5RjAwMDE5N0MwMDAwQTU5NTAwMTU5NDMwMDEwMEFDOTUwMDRCRjIKKzoxMERBMDAwMDAyQjAwMDAwRjA4NzAwNDA4MUIyMDAwMDNDOTYwMDQwNjgKKzoxMERBMTAwMDgxMzIwMTAwMDAwMDAwNEIxOTkwMDEwMDBGOTcwMDNBN0QKKzoxMERBMjAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDU4MDEyMDA4RDkKKzoxMERBMzAwMEUwQjEwMTAwNjAwMTIwMTZFMEIxMDEwMDA0MDBBMjRGMzYKKzoxMERBNDAwMDJCN0MwMDAwMDQwMEEyNDQxRjdDMDAwMDA0MDBBMjQ1QkYKKzoxMERBNTAwMDFGN0MwMDAwRkY5NDAwMTAzMjMwMDEwMEQ0OTEwMDQwODAKKzoxMERBNjAwMDEzQjAwMDAwQjQ5NDAwNDA4MTMyMDEwMDU4OTNBMjA4MjIKKzoxMERBNzAwMDgwMzIwMDAwNTg5M0EyMTY4MDMyMDAwMDAwODIwMDAyMUIKKzoxMERBODAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxN0IKKzoxMERBOTAwMDAwQzAwMTAwNTA5MzM3NUM2MTMxMDAwMDAwMDAwMDFCQTIKKzoxMERBQTAwMDYyQjEwMTAwNTU5MzI4NDA4MTMyMDAwMDA0MDBBMjVDNUQKKzoxMERBQjAwMDc3N0QwMDAwNTE5MzAwNDA4MUIyMDAwMDAwMDAwMDAwMUIKKzoxMERBQzAwMDYyQjEwMTAwNTU5M0E4NDA4MTMyMDAwMEYwODcxNzQwRjEKKzoxMERBRDAwMDgxQjIwMDAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4OEMKKzoxMERBRTAwMDgyQjAwMTAwMDQwMDI2NDA4MTMyMDAwMDAwMDAwMEY4RUUKKzoxMERBRjAwMDhDQjAwMTAwMDAwMDAwRjA4RUIwMDEwMEVDOTUwMDQwRjkKKzoxMERCMDAwMDEzMzAwMTAwMDQwMDBDNDc4MDMyMDAwMDAwMDAwMDQwODgKKzoxMERCMTAwMDg1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDlEOTUwMDQwQTIKKzoxMERCMjAwMDgxMzIwMTAwMDQwMEEwOTEwMzZDMDAwMDAwODAwMDEwMEQKKzoxMERCMzAwMDQyQzkwMTAwNkE5MzIyNDBFMzZEMDAwMDAwMDAwMDQ1RTUKKzoxMERCNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDY2OTNBODQwNTEKKzoxMERCNTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1MTMKKzoxMERCNjAwMDQ4QjEwMTAwODc4RjIyMDk4MDMwMDAwMDg2OTcwMDQwNkQKKzoxMERCNzAwMDEzMzAwMTAwODc4RjAwNDA4MUIyMDAwMDA0MDA4MzFFMzMKKzoxMERCODAwMDgwMzIwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ1NUMKKzoxMERCOTAwMDFGN0MwMDAwMTQwMDJENDUxRjkwMDEwMDA0MDBBMkYwMUUKKzoxMERCQTAwMDE0NkMwMDAwMDQwMEEwMDExNDZDMDAwMERGOEYwMDQ0MUUKKzoxMERCQjAwMDE5OTAwMDAwMDQwMEEyNEExRjdDMDAwMDc4OTNBMjQxNDMKKzoxMERCQzAwMDE5N0MwMDAwMDAwMDAwNEExRjkwMDEwMDdBOTEwMDQwN0IKKzoxMERCRDAwMDgxQjIwMDAwMDQwMEEyNDgxRjdDMDAwMEYyOTUwMDRBQjgKKzoxMERCRTAwMDFGMTAwMTAwMDQwMEEzMEEwQzZDMDAwMDlEOTUwMDQwNkEKKzoxMERCRjAwMDgxMzIwMTAwRDQ5MTAwMDEyQ0IwMDAwMDA0MDAyMjQxQzgKKzoxMERDMDAwMDE5N0MwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ0RjkKKzoxMERDMTAwMDFGN0MwMDAwMDQwMEEyNDUxRjdDMDAwMEZGOTQwMDQwMTAKKzoxMERDMjAwMDgxMzIwMTAwRDQ5MTAwMTAzMkIwMDAwMDhCMDAwMDQwMUUKKzoxMERDMzAwMDQzOTkwMTAwMDQwMEEyNDZFNzdEMDAwMDY1OTAwMDQ1N0QKKzoxMERDNDAwMDFGOTAwMDAwMDAwMDAwNDEzN0MzMDEwMDAwMDAwMDQxQTgKKzoxMERDNTAwMDMzQzMwMTAwMzYwMDAwMDEwMkNDMDEwMDAwMDBEMjQwQjUKKzoxMERDNjAwMDgxQjIwMDAwOEM5Mzg1MTc4MDMyMDAwMDAwMDA5RjQ4MkQKKzoxMERDNzAwMDAzRDAwMDAwOEU5MzlDMTc4MDMyMDAwMDAwMDA5RjRDNjAKKzoxMERDODAwMDAzRDAwMDAwMDAwMDgwMDEzNEMzMDEwMDQwODAwMDAzODUKKzoxMERDOTAwMDQ0QzkwMTAwMDAwMDAwNEFGMEIxMDEwMDA0MDAyNjQwMjAKKzoxMERDQTAwMDgxMzIwMDAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDEyQ0MKKzoxMERDQjAwMEYwQjEwMTAwRDE5NDAwNDFFMTMxMDEwMDAwODAwMDQzNDYKKzoxMERDQzAwMDQ0QzkwMTAwMTAwMDAwNDBGMTk5MDEwMDAwMDAwMDQ4MjMKKzoxMERDRDAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDQwMDAwMDAzNzQKKzoxMERDRTAwMEUwQzkwMTAwMDAwMDAwNDU2MUIxMDEwMDAwMDAwMDQzRUYKKzoxMERDRjAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDlCOTMwMDQwODcKKzoxMEREMDAwMDgxQjIwMDAwMkQwNDAwNDA4OTk4MDEwMDA5OTkwMEE1MDYKKzoxMEREMTAwMDhBMzAwMTAwQkEwMDIwNDBFNUIxMDEwMEIwMDAyRjAxQjcKKzoxMEREMjAwMDhDRDAwMTAwMDQwMDFGRjA4MDMyMDAwMDAwMDAwMDQ2OEIKKzoxMEREMzAwMEUwQzEwMTAwQUMwMDJGNDAxM0IwMDEwMENDMDAyRDAxNjgKKzoxMERENDAwMEUwQzEwMTAwQTk5MzlDMTc4MDMyMDAwMDA0MDAyMjRBMjAKKzoxMERENTAwMDE5N0MwMDAwMzY5ODAwNDA4MTMyMDEwMEFCOTMyMjQ3QzUKKzoxMERENjAwMDE5N0MwMDAwMDAwMDAwNUYxMzkwMDEwMEQ0OTcwMDQ3NjkKKzoxMERENzAwMDE5MTAwMTAwQzAwMDJENDQxRjkwMDEwMEM0MDAyREYwQjcKKzoxMEREODAwMDgyQjAwMTAwMEI5ODAwRjA4NEIwMDAwMDkwMDAyRDA1RDcKKzoxMEREOTAwMDQ4QjEwMTAwQzA5M0EyNEIxRjdDMDAwMDE1OTRBMjRDMTcKKzoxMEREQTAwMDFGN0MwMDAwQzA5MzFGMUNFMDZEMDAwMEMzOTNBMjAxMDQKKzoxMEREQjAwMDgwMzIwMDAwQTgwMDJENDY4RkIwMDEwMEI5OTMxRjFDQ0YKKzoxMEREQzAwMEUwNkQwMDAwQjQwMDAwNDA0Mzk5MDEwMEJCOTMyMkYwRDUKKzoxMERERDAwMDNBNkMwMDAwMTI5NDFGRjAzQTZDMDAwMDAwMDBBMjQwNjAKKzoxMERERTAwMDgwQjIwMDAwMDAwMDgwNEY4RkIwMDEwMDhBMDAwMDQwMjgKKzoxMERERjAwMDQzOTkwMTAwMTM5NDIwNDJFNzZEMDAwMEJGOTMyMjQwMzUKKzoxMERFMDAwMDgwMzIwMDAwMDAwMDgwNTk4RkIwMDEwMDAwMDA4MDU4NkYKKzoxMERFMTAwMDhGQjAwMTAwQzI5MzIyNDA4MDMyMDAwMDAwMDA4MDVDN0QKKzoxMERFMjAwMDhGQjAwMTAwMDAwMDgwNUI4RkIwMDEwMEFDMDAwMDQwQUIKKzoxMERFMzAwMDQzOTkwMTAwQjAwMDJERjA4NEIwMDEwMEM3OTNBMjQyQzUKKzoxMERFNDAwMDI0NkMwMDAwRDI5MzIzRjAwMjZDMDAwMEIwMDAwMEExMEIKKzoxMERFNTAwMDgwQ0UwMTAwMDQwMEE2NDA4MTMyMDAwMENGOTNBMkYwRTIKKzoxMERFNjAwMDgwMzIwMDAwMTQ5NEEyNDIyNDZDMDAwMDE0OTRBMjQxNTkKKzoxMERFNzAwMDAzNkMwMDAwQ0U5M0EyNDA4MDMyMDAwMDAwMDA4MDUxNkQKKzoxMERFODAwMDhGQjAwMTAwMDAwMDgwNTI4RkIwMDEwMDE0OTQxRjEyNjcKKzoxMERFOTAwMDg0NTAwMDAwMTQ5NEEwMDE4NDZDMDAwMEMwOTMwMDQwRTIKKzoxMERFQTAwMDgxQjIwMDAwOEIwMDAwNDA0Mzk5MDEwMEZEOTNBMjQ2MUYKKzoxMERFQjAwMEU3N0QwMDAwMTQwMDAwNDA0Mzk5MDEwMEVGOTMyMkYwMzkKKzoxMERFQzAwMDE0MzAwMDAwREI5MzIwMEEwMjZDMDAwMEVDOTMwMzFFNjgKKzoxMERFRDAwMDgwMzIwMDAwREE5M0EyNDA4MDMyMDAwMDAwMDA4MDQ0Q0IKKzoxMERFRTAwMDhGQjAwMTAwMDAwMDgwNDk4RkIwMDEwMEUwOTMyMjBBNEEKKzoxMERFRjAwMDAyNkMwMDAwRTM5M0EyNDExOTdDMDAwMERGOTNBMjQwNzIKKzoxMERGMDAwMDgwMzIwMDAwMDAwMDgwNTU4RkIwMDEwMDAwMDA4MDU2NzQKKzoxMERGMTAwMDhGQjAwMTAwRTI5M0EyNDA4MDMyMDAwMDAwMDA4MDQzRjUKKzoxMERGMjAwMDhGQjAwMTAwMDAwMDgwNDg4RkIwMDEwMDAwMDAwMDAxQTgKKzoxMERGMzAwMDgyQjAwMTAwMDAwMDAwMEE4MkQwMDEwMEU5OTMyMDkxMjQKKzoxMERGNDAwMDgzNkMwMDAwRTg5M0EyNDA4MDMyMDAwMDI2MDA4MDQwRUQKKzoxMERGNTAwMDhGOTgwMTAwMjcwMDgwNDA4Rjk4MDEwMEVCOTNBMjQwMkEKKzoxMERGNjAwMDgwMzIwMDAwMUYwMDgwNDA4Rjk4MDEwMDIwMDA4MDQwMTgKKzoxMERGNzAwMDhGOTgwMTAwRUU5M0EyNDA4MDMyMDAwMDIyMDA4MDQwODIKKzoxMERGODAwMDhGOTgwMTAwMjMwMDgwNDA4Rjk4MDEwMDg4MDAyRDQ0NjUKKzoxMERGOTAwMDhGQjAwMTAwRjg5M0EyNDExOTdDMDAwMEY1OTNBMjQzRDEKKzoxMERGQTAwMDNEN0MwMDAwRjU5M0EyRjIwMjZDMDAwMDAwMDBBMjQwNEMKKzoxMERGQjAwMDgwQjIwMDAwMDAwMDgwNDk4RkIwMDEwMEY3OTNBMjQwQkEKKzoxMERGQzAwMDgwMzIwMDAwMDAwMDgwNDM4RkIwMDEwMDAwMDA4MDQ4RDQKKzoxMERGRDAwMDhGQjAwMTAwRjU5M0EwOTEwMzZDMDAwMEYzOTMyMjQzRUUKKzoxMERGRTAwMDNEN0MwMDAwRkM5M0EyNDA4MDMyMDAwMDI4MDA4MDQwNkQKKzoxMERGRjAwMDhGOTgwMTAwMjkwMDgwNDA4Rjk4MDEwMDE0MDAwMDQwOTQKKzoxMEUwMDAwMDQzOTkwMTAwMDY5NEEyRjAxNDMwMDAwMDg4MDAyRDQ0Q0EKKzoxMEUwMTAwMDhGQjAwMTAwMDM5NEEyRjIwMjZDMDAwMDAwMDBBMjQwNDUKKzoxMEUwMjAwMDgwQjIwMDAwMDAwMDgwNDk4RkIwMDEwMEY1OTMyMjQxQ0EKKzoxMEUwMzAwMDE5N0MwMDAwRjM5MzIwOTEwMzZDMDAwMEY1OTMwMDQwREQKKzoxMEUwNDAwMDgxQjIwMDAwMEE5NDIwMEEwMjZDMDAwMDA5OTRBMjQwRTgKKzoxMEUwNTAwMDgwMzIwMDAwMDAwMDgwNDQ4RkIwMDEwMDAwMDA4MDQ5NDEKKzoxMEUwNjAwMDhGQjAwMTAwMEY5NDIyMEEwMjZDMDAwMEUzOTNBMjQxREEKKzoxMEUwNzAwMDE5N0MwMDAwMEU5NEEyNDA4MDMyMDAwMDAwMDA4MDU1MDAKKzoxMEUwODAwMDhGQjAwMTAwMDAwMDgwNTY4RkIwMDEwMDExOTRBMjQwQjMKKzoxMEUwOTAwMDgwMzIwMDAwMDAwMDgwNDM4RkIwMDEwMDAwMDA4MDQ4MDMKKzoxMEUwQTAwMDhGQjAwMTAwMTc5NDAwNDM5NUIwMDAwMDE3OTQwMDQxMTEKKzoxMEUwQjAwMDk1QjAwMDAwMTc5NDAwNDI5NUIwMDAwMDE3OTQwMDQ0RkEKKzoxMEUwQzAwMDk1QjAwMDAwMTc5NDAwNEM5NUIwMDAwMDMwMDQwMDQwNUIKKzoxMEUwRDAwMDg5OTgwMTAwMDk5OTAwNEE4QTMwMDEwMDVCOTcwMDQwNDUKKzoxMEUwRTAwMDgxMzIwMTAwMUM5NEEyNDA4MDMyMDAwMDAwMDA4MDRCNkQKKzoxMEUwRjAwMDhGQjAwMTAwMDAwMDgwNEM4RkIwMDEwMDA0MDBBMjA1MjkKKzoxMEUxMDAwMDQ4NkQwMDAwMkQwMDAwNDA0Mzk5MDEwMDJFMDAyRkYzQzAKKzoxMEUxMTAwMDg0QjAwMTAwMjI5NEEyRjM5NjMwMDAwMDAwMDA4MDQwRjkKKzoxMEUxMjAwMDAxQjAwMTAwMkQwMDJBNDFFN0QxMDEwMEQ0MDAzRDQxOUEKKzoxMEUxMzAwMDg1RTAwMTAwMEIwMDAwRjIwMEU0MDEwMDI4OTQyMjVBNUYKKzoxMEUxNDAwMDAxN0MwMDAwMDAwMDAwNDAxRjkwMDEwMDI5OTQwMDVBNEIKKzoxMEUxNTAwMDAxODAwMDAwMDAwMDAwNDAxRjgwMDEwMDAwMDA2MzQxQkEKKzoxMEUxNjAwMDg1QzAwMTAwMkM5NEEwQTU4NTZDMDAwMDAwMDA2MzQwRDAKKzoxMEUxNzAwMDg1QjAwMTAwMTIwNDAwNDA4OTk4MDEwMDA5OTkwMDAwNEYKKzoxMEUxODAwMDhBMzAwMTAwMDAwMDgwNDA4MUIyMDEwMDAwMDBBMEE1OUIKKzoxMEUxOTAwMDg1NkMwMTAwMDAwMEUzNDA4NUIwMDEwMDBDODAwMDAzQTUKKzoxMEUxQTAwMDQyQzkwMTAwMTIwMDAwNDA4Nzk4MDEwMDdGOTgwMEYwRUEKKzoxMEUxQjAwMDhDQjAwMDAwMDQwMDIyNUYxRjdDMDAwMDQxOTQyMjQwQ0MKKzoxMEUxQzAwMDBGNkMwMDAwMDAwMDJGMDU0OEIxMDEwMDA0MDAyMjVBMjYKKzoxMEUxRDAwMDFGN0MwMDAwMTAwMDAwRjA5OEY0MDEwMDA0MDBBMjA3NkEKKzoxMEUxRTAwMDk4NkMwMDAwMTAwMDAwMEM5OEY0MDEwMDA0MDBBMjA3RDUKKzoxMEUxRjAwMDk4NkMwMDAwM0U5NEEyNEIxOTdDMDAwMDNGOTQyMkYwRTIKKzoxMEUyMDAwMDE4NkMwMDAwMDAwMDYwNEIxOTkwMDEwMDQzOTUwMDA3NTYKKzoxMEUyMTAwMDEwMzAwMTAwMkY4MzAwNDAwNUIwMDAwMDQzOTQyMjVBQzMKKzoxMEUyMjAwMDFGN0MwMDAwQUI5NDAwNDA4MTMwMDEwMDJGODMwMDQwMzAKKzoxMEUyMzAwMDA1QjAwMDAwMDQwMDIyNUYxRjdDMDAwMDAwMDAyRjA1RDUKKzoxMEUyNDAwMDQ4QjEwMTAwMDAwMDYwNEIxOTkwMDEwMDA0MDAyMjVBRkYKKzoxMEUyNTAwMDFGN0MwMDAwMDQwMDIyNDAwRjZDMDAwMDEwMDAwMEYwNDIKKzoxMEUyNjAwMDk2RjQwMTAwMDQwMEEyMDc5NjZDMDAwMDEwMDAwMDBDNTgKKzoxMEUyNzAwMDk2RjQwMTAwMDQwMEEyMDc5NjZDMDAwMDQzOTUwMDA3ODUKKzoxMEUyODAwMDEwMzAwMTAwMkY4MzAwNDAwNUIwMDAwMDA0MDAyMjVGMjEKKzoxMEUyOTAwMDFGN0MwMDAwMDAwMDJGMDU0OEIxMDEwMDAwMDA2MDRCMEEKKzoxMEUyQTAwMDE5OTAwMTAwMDQwMDIyNUExRjdDMDAwMDA0MDAyMjQwNDMKKzoxMEUyQjAwMDBGNkMwMDAwMTAwMDAwRjA5NkY0MDEwMDA0MDBBMjA3QUIKKzoxMEUyQzAwMDk2NkMwMDAwMTAwMDAwMEM5NkY0MDEwMDA0MDBBMjA3RjgKKzoxMEUyRDAwMDk2NkMwMDAwNDM5NTAwMDcxMDMwMDEwMDAwMDA4MDQwNUMKKzoxMEUyRTAwMDA1QjAwMTAwNUE5NDMzNDA4MTMyMDAwMDVEOTRBMUFEMjUKKzoxMEUyRjAwMDk1MjAwMDAwNkY5NDEzNDA4MUIyMDAwMDAwMDAxMzRBODMKKzoxMEUzMDAwMDVBODMwMTAwMzAwMDM5NDU5NUUwMDEwMDA0MDBBMjVGMDYKKzoxMEUzMTAwMDVGN0MwMDAwMDQwMEEyNUU1RjdDMDAwMDFGMDAwMDBGMTUKKzoxMEUzMjAwMDVFRDgwMTAwMDAwMDAwNUE1RjkwMDEwMDAwMDAwMDVFMEUKKzoxMEUzMzAwMDVGOTAwMTAwMDAwMDAwNDA0NUIwMDEwMDAwMDAwMDA0QjMKKzoxMEUzNDAwMDQ4QjAwMTAwMDAwMDAwMDU0QUIwMDEwMDAwMDAwMDBDQzgKKzoxMEUzNTAwMDU4QjAwMTAwMDAwMDAwMDc0RUIwMDEwMDFDODUwMDQwQ0QKKzoxMEUzNjAwMDVEOTgwMTAwMDQwMEEyNDQ1RjdDMDAwMDAwMDAwMDU4OUEKKzoxMEUzNzAwMDYxQjEwMTAwMDAwMDAwNEE2MkIxMDEwMDAwMDBBODQxNDMKKzoxMEUzODAwMDk3QjAwMDAwNkM5NDAwNDA4MUIyMDAwMDAwMDA4MDQwMTMKKzoxMEUzOTAwMDk3QjAwMTAwMDQwMEEyNDAwNTZDMDAwMDFDOTkwMDQwRTkKKzoxMEUzQTAwMDgxMzIwMTAwNzI5NDYwMDc5NjMwMDAwMEZGRkYwMDRCM0QKKzoxMEUzQjAwMDg0ODkwMTAwMDAwMDcwQzIyNEIwMDEwMDdGOTRBMjQ1NEUKKzoxMEUzQzAwMDI1N0MwMDAwNzY5NDMxMjA4NTMwMDAwMDgwOTQyMjEyNTQKKzoxMEUzRDAwMDQ4N0YwMDAwNTgwNDExMTI0ODAzMDEwMDEwMDAwMDEyODkKKzoxMEUzRTAwMDk2RTQwMTAwMDAwMDAwNEIxRTk0MDEwMDE3MDQwMDQwNTkKKzoxMEUzRjAwMDg5OTgwMTAwMDAwMDAwMTI4QUIwMDEwMDA5OTkwMDVGQUQKKzoxMEU0MDAwMDhCMTAwMTAwMDAwMDgwNUExRjkwMDEwMDdGOTQzMTQwNjIKKzoxMEU0MTAwMDgxMzIwMDAwMDAwMDAwQjQyNEIwMDEwMDgwOTQyMjEyNzgKKzoxMEU0MjAwMDQ4N0YwMDAwNTgwNDAwNDA4MTMyMDEwMDE3MDQwMDQwN0EKKzoxMEU0MzAwMDg5OTgwMTAwMDk5OTAwMTI4QTMwMDEwMDAwMDAyRjA1MTcKKzoxMEU0NDAwMDQ4QjEwMTAwOEY5NDBCRjA4NDMwMDAwMDAwMDAxMTEyREQKKzoxMEU0NTAwMDQ4ODMwMTAwOEM5NDIyNTA4NTcwMDAwMDVFMDEwMDQwQ0EKKzoxMEU0NjAwMDQzOTkwMTAwQjQ5NjAwRjI5NjMwMDEwMDkzMDQwMDEyMjMKKzoxMEU0NzAwMDk0MzAwMTAwMDAwMDAwNUExRjkwMDEwMDEwMDAwMDEyQUIKKzoxMEU0ODAwMDk2RTQwMTAwMDAwMDgwNEIxRTk0MDEwMDEwMDAwMDQyNDEKKzoxMEU0OTAwMDEwRjQwMTAwMDQwMDIyMDg4MDMyMDAwMDAwQjczRjQzNUUKKzoxMEU0QTAwMDExRjAwMTAwMDcwMDAwMDg4QTg4MDEwMDkzOTQzMEExNTAKKzoxMEU0QjAwMDBDMzAwMDAwOTY5NDIyNDVFNjdEMDAwMDgwOTQxMDQwQzgKKzoxMEU0QzAwMDgxQjIwMDAwMDAwMDJBNDVFNjkxMDEwMDAwMDAxMDEyMTAKKzoxMEU0RDAwMDQ4ODMwMTAwMDQwMEEyMDU0ODZEMDAwMDAwMDAxMTQwQkYKKzoxMEU0RTAwMDgxQjIwMTAwMDAwMDYwNEI4NTgwMDEwMDVFMDEwMDQwQTgKKzoxMEU0RjAwMDQzOTkwMTAwQjQ5NjAwRjI5NjMwMDEwMDAwODAwMDEwQUMKKzoxMEU1MDAwMDQ0QzkwMTAwRDgwMDAwNDA4MTk4MDEwMDJFMDAyRDA1NkIKKzoxMEU1MTAwMDQ4QjEwMTAwQTI5NDIyNDBFNzZEMDAwMDgwMDAwMDQwNTUKKzoxMEU1MjAwMDgwQzgwMTAwMDAwMDAwNDBGMEIxMDEwMDA5MDAwMDA4QUYKKzoxMEU1MzAwMDg2RTQwMTAwMDAwMDY4QTc4N0MwMDEwMDAwMDAwMDQ0RDUKKzoxMEU1NDAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEE2OTRBODA1QUQKKzoxMEU1NTAwMEUwMzEwMDAwMTAwMDAwMTI5NkU0MDEwMDAwMTQwMDRCQUUKKzoxMEU1NjAwMDk2REMwMTAwMDAwMDgwNEIxRTk0MDEwMDA0MDAyMjVBM0EKKzoxMEU1NzAwMDFGN0MwMDAwMTAwMDAwMEY4NEY0MDEwMDFGMDAwMDQyMDcKKzoxMEU1ODAwMDg0ODgwMTAwQjA5NDIyNDA4MDMyMDAwMEIxOTQwMDQyOUYKKzoxMEU1OTAwMDY4QjEwMDAwMDAwMDAwNDI2QUIxMDEwMEIxOTQzMTVBMzQKKzoxMEU1QTAwMDFGMDAwMDAwMDQwMEEyNDI0ODdGMDAwMDAwMDA5MTQyQ0EKKzoxMEU1QjAwMDQ4OTMwMTAwQjQ5NDM1NDA4MTMyMDAwMDZEMDAwMDQwNjIKKzoxMEU1QzAwMDYxOTkwMTAwQkE5NDI4QjEyQzMwMDAwMEI1OTQyMjREMTUKKzoxMEU1RDAwMDc1N0QwMDAwMDAwMDAwNDAyREIwMDEwMDAwMDA5NTQwNTYKKzoxMEU1RTAwMDExQjAwMTAwNkQwMDAwNDA2MTk5MDEwMEJBOTRBOEIxMUEKKzoxMEU1RjAwMDEwMzAwMDAwMDAwMDAwMTY4MEIyMDEwMDA0MDAyNzA4NUYKKzoxMEU2MDAwMDgwMzIwMDAwMDAwMDk1NDA4MUIyMDEwMDdGMDAwMDQwOTAKKzoxMEU2MTAwMDYxOTkwMTAwQzU5NDI4QjExMDMwMDAwMEJGOTQ5RkJBRTEKKzoxMEU2MjAwMDgwMzIwMDAwMTUwMDAwNDA4OTk4MDEwMDA5OTkwMDQwREYKKzoxMEU2MzAwMDgxMzIwMTAwMDAwMDgwNDAxMUIwMDEwMDA0MDAyMjVDMjIKKzoxMEU2NDAwMDExN0MwMDAwMDQwMEEyNUExMTdDMDAwMDA0MDAyMjA4ODIKKzoxMEU2NTAwMDQ4MDYwMDAwMDAwMDgwMjQxMTg0MDEwMDA0MDBBMjVDMzAKKzoxMEU2NjAwMDAxN0MwMDAwMDQwMEEyNUEwMTdDMDAwMDA0MDAyMjAwOEEKKzoxMEU2NzAwMDQ4MDYwMDAwMDQwMDFGQkI4MDMyMDAwMDAwMDAwMDVGNUQKKzoxMEU2ODAwMDYxQjEwMTAwMDAxMDAwMDA2MkREMDEwMDAwMDBBODQwM0YKKzoxMEU2OTAwMDgxQjIwMDAwQ0U5NDAwNDA4MUIyMDAwMEFDOTQwMDQwRjIKKzoxMEU2QTAwMDQ3OTkwMTAwRDI5NDMyNDA4MTMyMDAwMERBOTQyMkY4NzYKKzoxMEU2QjAwMDk2MzAwMDAwMDAwMDAwRjg5MEIwMDEwMDAwMDAwMEYwNkIKKzoxMEU2QzAwMDkyQjAwMTAwMDAwMDAwNDg4MEIyMDEwMDA0MDAyNzQ5MTgKKzoxMEU2RDAwMDgwMzIwMDAwMDEwMDAwNEJGMENEMDEwMDIwMDA5MjQ4ODQKKzoxMEU2RTAwMEUwQzkwMTAwNkMwMDAwNDA2MTk5MDEwMERFOTQyOEIxOEUKKzoxMEU2RjAwMDkyMzAwMDAwREE5NDIyNEM3NTdEMDAwMDA0MDAxMjQwMzQKKzoxMEU3MDAwMDkxQjAwMDAwNkMwMDAwNDA2MTk5MDEwMERFOTRBOEIxNTYKKzoxMEU3MTAwMDkwMzAwMDAwMDAwMDAwNDk4MEIyMDEwMDA0MDAyNzQ4NEEKKzoxMEU3MjAwMDgwMzIwMDAwRkYwMDAwNDg5Njg4MDEwMDAwMDAwMDRCODYKKzoxMEU3MzAwMDkwRDAwMTAwMDEwMDAwNEJGMENEMDEwMDIwMDAwMDQ4MDYKKzoxMEU3NDAwMEYwQzkwMTAwMDAwMDkyNDlFMEIxMDEwMDBDMDAyRDEwNTkKKzoxMEU3NTAwMDQ4QjEwMTAwRkYwNzAwMDg4MjhDMDEwMDA0MDBBMjVDQTAKKzoxMEU3NjAwMDgzN0MwMDAwRkYwNzAwRjAwMDhDMDEwMDA0MDBBMjVDMjUKKzoxMEU3NzAwMDAxN0MwMDAwMDQwMDIyNDAwMTZDMDAwMDAwMDBBMjQxNjYKKzoxMEU3ODAwMDAwRUMwMDAwRjA5NDIyMUEwMDZDMDAwMEM5OTQwMDAwMTQKKzoxMEU3OTAwMDM0MzAwMTAwMDAwMDAwNTA0OUMxMDEwMEVBOTRBMjQxNTgKKzoxMEU3QTAwMDIzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDBDMDAyRDEwQjkKKzoxMEU3QjAwMDQ4QjEwMTAwRkYwNzAwMTU4MjhDMDEwMDA0MDBBMjVDMzMKKzoxMEU3QzAwMDgzN0MwMDAwRkYwNzAwRjAwMDhDMDEwMDA0MDBBMjVDQzUKKzoxMEU3RDAwMDAxN0MwMDAwMDQwMDIyNDAwMTZDMDAwMDAwMDBBMjQxMDYKKzoxMEU3RTAwMDAwRUMwMDAwRkM5NDIyMEQwMDZDMDAwMEM5OTQwMDAwQjUKKzoxMEU3RjAwMDFBMzAwMTAwMDAwMDAwNTA0OUMxMDEwMEY2OTRBMjQxMDYKKzoxMEU4MDAwMDIzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDAxOTU4MzFFNkEKKzoxMEU4MTAwMDgwMzIwMDAwMDAwMDAwNDQxOTkwMDEwMDI0MDAyRDAxMDYKKzoxMEU4MjAwMDJDQjAwMTAwMjgwMDJERjAxNkIwMDEwMDIyMDAyREYwQzAKKzoxMEU4MzAwMDI2QjAwMTAwMTQwMDJGRjIwQ0IwMDEwMDA0MDBBMkYwNzkKKzoxMEU4NDAwMDE0NkMwMDAwMDQwMDIwMDExNDZDMDAwMDAwMDA4MDQwRTMKKzoxMEU4NTAwMEUxQjEwMTAwMzAwMDAwNDA5Nzk4MDEwMDYwOTcyRTQwMjAKKzoxMEU4NjAwMDgxQjIwMTAwMDAwMDAwNDBGMUIxMDEwMDBBOTVBMjQxMEYKKzoxMEU4NzAwMDk3NTAwMDAwNjQ5NzNFNDM5REUwMDEwMDAwMDA4MDQwRjcKKzoxMEU4ODAwMEUxQjEwMTAwNjQ5NzNFNDM5REUwMDEwMDAwMDA4MDBCNzAKKzoxMEU4OTAwMEU4QjEwMTAwNjQ5NzNGNDM5REUwMDEwMDAwMDAwMEYwRjMKKzoxMEU4QTAwMDE2QzAwMTAwMDAwMDgwNDBFMUIxMDEwMDY0OTczRjQzQzEKKzoxMEU4QjAwMDlERTAwMTAwMDAwMDAwRjQxNkIwMDEwMDAwMDA4MDQwNUYKKzoxMEU4QzAwMEUxQjEwMTAwNjAxNzNENDM5REUwMDEwMDEwMDA4MEExMEYKKzoxMEU4RDAwMDE2RTQwMTAwMDQwMEEyMDcxNjZDMDAwMDFBMDQwMDQwQjAKKzoxMEU4RTAwMDg5OTgwMTAwMTAwMDAwMEI4QUU0MDEwMDA5OTkwMDBEQ0QKKzoxMEU4RjAwMDhBMTQwMTAwMDBCNTAwMEQ0MkM5MDEwMDFEOTUzMDQ3ODIKKzoxMEU5MDAwMDE3MDQwMDAwMjA5NUEyMEJFNjdEMDAwMDAwMDA5MDQyNTUKKzoxMEU5MTAwMDgxQjAwMTAwMDBCNzAwMEQ0NkM5MDEwMDI0OTVBMjBCOEIKKzoxMEU5MjAwMEU2N0QwMDAwMDAwMDAwMEJFNjkxMDEwMDAwMDA5MDQxMzAKKzoxMEU5MzAwMDgxQjAwMTAwMDAwMDEwNDA4MUIyMDEwMDI1OTU0MDA3MjAKKzoxMEU5NDAwMDk2MzAwMDAwOUQwNDAwNDA4MTMyMDEwMDJGOTVBMjQ1QzEKKzoxMEU5NTAwMDk1N0MwMDAwMDE5NzNGNDE5NUUwMDEwMDAwMDAwMEYzMjUKKzoxMEU5NjAwMDk2QjAwMTAwMDAwMDAwNEVFNkIxMDEwMDQwOTczRTQwMjUKKzoxMEU5NzAwMDk3RTAwMTAwMDAwMDAwNEVFNkIxMDEwMDQwOTczRTQwRTQKKzoxMEU5ODAwMDlERTAwMTAwNDI5NTAwM0JFN0IxMDAwMDJGOTUzMDQwMkIKKzoxMEU5OTAwMDgxMzIwMDAwMzk5NUEyMEJFNjdEMDAwMDAwQjUwMDBEMjQKKzoxMEU5QTAwMDQ2QzkwMTAwMzU5NUEyMEJFNjdEMDAwMDAwMDAxMDQwMkQKKzoxMEU5QjAwMDgxQjIwMTAwMDAwMDk4NDI4MUIwMDEwMDAwQjcwMDBENTMKKzoxMEU5QzAwMDQ2QzkwMTAwMDAwMDAwMEJFNjkxMDEwMDAwMDAxMDQwNjQKKzoxMEU5RDAwMDgxQjIwMTAwMDAwMDk4NDE4MUIwMDEwMDA0MDAyMUEyMzEKKzoxMEU5RTAwMDk1MjAwMDAwMDAwMDEwNEE0NDgzMDEwMDAwOTczRTQxM0EKKzoxMEU5RjAwMDk1RTAwMTAwMDAwMDAwNEVGNkIxMDEwMDAwMDAwMDRFNUQKKzoxMEVBMDAwMEU2QjEwMTAwNDA5NzNFNDA5REUwMDEwMDAwMDAwMDNCNjAKKzoxMEVBMTAwMEU3QjEwMTAwMDAwMDAwNEE5MEIxMDEwMEZGRkYwMDA3Q0MKKzoxMEVBMjAwMDkyODkwMTAwMDAwMDk4NDA4MUIwMDEwMDExMDQwMDQwNkIKKzoxMEVBMzAwMDg5OTgwMTAwMDk5OTAwMDg4QTMwMDEwMDAzMDAwMDA4NDQKKzoxMEVBNDAwMDg2RjQwMTAwMDBCNzAwNDM0NkM5MDEwMDA3MDAwMDA4MzIKKzoxMEVBNTAwMDgyODgwMTAwMDQwMDIyMDg4MDMyMDAwMDA0MDAyMjQxNjQKKzoxMEVBNjAwMEU2N0QwMDAwNEE5NTQwMDg5NjMwMDAwMDlEMDQwMDQwNzUKKzoxMEVBNzAwMDgxMzIwMTAwNTg5NTIyNDU5NTdDMDAwMDUzOTUyMjVBMTkKKzoxMEVBODAwMDFGN0MwMDAwMTAwMDAwMEY5NkY0MDEwMDRGOTUzMTVGQ0QKKzoxMEVBOTAwMDk3MDQwMDAwMDQwMEEyNEI0ODdGMDAwMDAwMDAxMTRCQzcKKzoxMEVBQTAwMDQ4OTMwMTAwMDAwMDAwNEI2QUIxMDEwMDUzOTUzMDQwQ0IKKzoxMEVBQjAwMDgxMzIwMDAwMDQwMDIyNDFFNjdEMDAwMDAwMDAwMDQxOTgKKzoxMEVBQzAwMEU2ODEwMTAwMDAwMDEwNDA4MUIyMDEwMDAwMDA5ODQwODIKKzoxMEVBRDAwMDgxQjIwMTAwMDA5NzNGNDE5NUUwMDEwMDAwMDAwMEYzODIKKzoxMEVBRTAwMDk2QjAwMTAwNDA5NzNENDA5N0UwMDEwMDAwMDA2M0YzQkQKKzoxMEVBRjAwMDg4QjAwMTAwNjE5NUEyM0I4OTZDMDAwMDAwMDAwMDRBQ0IKKzoxMEVCMDAwMDkwQjEwMTAwMDEwMDAwQTY5MkIxMDEwMDA0MDBBMjRBRTgKKzoxMEVCMTAwMDQ0N0YwMDAwNjI5NTE4NEE0NDkzMDAwMDAwMDAxODQwQUEKKzoxMEVCMjAwMDgxQjIwMTAwM0YwNDAwNDA4OTk4MDEwMDE2MDAwMDEyRTQKKzoxMEVCMzAwMDhBRTQwMTAwMDk5OTAwNEI4QTE0MDEwMDMwMDAzOTQ1MkMKKzoxMEVCNDAwMDk3RTAwMTAwMDQwMEEyNUY1RjdDMDAwMDA0MDAyMjVFRTkKKzoxMEVCNTAwMDVGN0MwMDAwMUYwNDAwMkY3RUQ5MDEwMDA0MDBBNjQwNDYKKzoxMEVCNjAwMDgxMzIwMDAwNkU5NTIyNUExRjdDMDAwMDFGMDQwMDBGQTYKKzoxMEVCNzAwMDk4RDgwMTAwMDAwMDAwNEM1RTk0MDEwMDcwOTUwMDA1REIKKzoxMEVCODAwMDRBQjAwMDAwMUYwNDAwQTc1RTg0MDEwMDAwMDAwMDQwOUUKKzoxMEVCOTAwMDRCQjAwMTAwMDAwMDAwNUU1RjkwMDEwMDA0MDBBMjA4N0QKKzoxMEVCQTAwMDRFNkMwMDAwMDAwMDAwNTg2MUIxMDEwMDAwMDAwMDRCRjUKKzoxMEVCQjAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDczOTUwMDQwREUKKzoxMEVCQzAwMDgxQjIwMDAwMzMwNDAwNDA4OTk4MDEwMDA5OTkwMDA3RDAKKzoxMEVCRDAwMDhBMzAwMTAwNzg5NTQwMDc5NjMwMDAwMDlEMDQwMDQwN0YKKzoxMEVCRTAwMDgxMzIwMTAwN0M5NTIyNDU5NTdDMDAwMDAwMDA5ODQwMTAKKzoxMEVCRjAwMDgxQjIwMTAwMDQwMEEyNEE0NDdGMDAwMDlCMDQwMDRBNDUKKzoxMEVDMDAwMDQ0MTMwMTAwMDA5NzNGNDE5NUUwMDEwMDAwMDAwMEYzMkMKKzoxMEVDMTAwMDk2QjAwMTAwNDA5NzNENDA5N0UwMDEwMDAwMDA2M0YzOEIKKzoxMEVDMjAwMDg4QjAwMTAwMzAwMDM4NDU5N0UwMDEwMDA0MDBBMjVGODEKKzoxMEVDMzAwMDFGN0MwMDAwMDQwMDIyNUUxRjdDMDAwMDA0MDAyMEFBNEMKKzoxMEVDNDAwMDBGNkMwMDAwMDAwMDAwNUYwRjkwMDEwMDAwMDAwMDU4RjIKKzoxMEVDNTAwMDYxQjEwMTAwMDAwMDAwNEI2MkIxMDEwMDg4OTVBODQwM0QKKzoxMEVDNjAwMDgxMzIwMDAwN0U5NUEyM0I4OTZDMDAwMDMwMDAzODQ1NUYKKzoxMEVDNzAwMDlERTAwMTAwMDAwMDk4NDA4MUIyMDEwMDA0MDAyMjA4REMKKzoxMEVDODAwMDgwMzIwMDAwMDMwMDAwMDg5NEY0MDEwMDAwQjcwMDRBM0QKKzoxMEVDOTAwMDQ2QzkwMTAwMDcwMDAwMDg5Njg4MDEwMDA0MDAyMjRCQzUKKzoxMEVDQTAwMEU2N0QwMDAwOTMwNDAwMTI5NDMwMDEwMDQzOTUwMDVBNjEKKzoxMEVDQjAwMDFGMDAwMTAwMDAwMDgwNUExRjkwMDEwMDExMDAwMDRBNEYKKzoxMEVDQzAwMEU2QzkwMTAwMzAwMDAwNEE4MENFMDEwMDA0MDAyNDQwNjMKKzoxMEVDRDAwMDgxMzIwMDAwMzQwMDJGNEY5NTg0MDEwMDAwMDAwMEYzQzIKKzoxMEVDRTAwMDk2QjAwMTAwMDEwMDYzNEI4NEM4MDEwMDAwMDBBMDQzRkUKKzoxMEVDRjAwMDg1NkMwMTAwMDAwMEUzNDA4NUIwMDEwMDMwMDAyRDQ0MjgKKzoxMEVEMDAwMDFGOTAwMTAwMzIwMDJERjIyQUIwMDEwMDA0MDAyNjQwQkQKKzoxMEVEMTAwMDgxMzIwMDAwMDQwMDIyRjIwMjMwMDAwMDFEOTQwMDEwMzUKKzoxMEVEMjAwMDMyMzAwMTAwMDQwMDIyMDA4MDMyMDAwMDA0MDAyMjQyNDAKKzoxMEVEMzAwMDE5N0MwMDAwMzIwMEEwNDBFNUIxMDEwMDAwMDAwMDQwNTUKKzoxMEVENDAwMDk3QjAwMTAwRjAwNzAwNDA5OTk4MDEwMDAwMDAwMDRBQzgKKzoxMEVENTAwMDAyQzAwMTAwMDAwMDAwNTAwM0QwMDEwMDAwMDAwMDQxOEIKKzoxMEVENjAwMDk3QzAwMTAwMDAwMEEzNEMwMkQwMDAwMEE5OTUwMDQwMEMKKzoxMEVENzAwMDgxQjIwMDAwMDAwMDAwQTgzNkIwMDEwMEJBOTUyMjQxMUYKKzoxMEVEODAwMDAzNTAwMDAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwNDIKKzoxMEVEOTAwMEYxQjEwMTAwNzAwMDAwMDNGMEM5MDEwMDAwMDAwMDQyNjEKKzoxMEVEQTAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEIyOTVBODAwM0QKKzoxMEVEQjAwMEUwMzEwMDAwMjM4MzAwODgxQ0IwMDAwMEM5OTQwMDQwQUIKKzoxMEVEQzAwMDgxMzIwMTAwN0M4MDAwMDM0MkM5MDEwMDA0MDAyMjQwMUUKKzoxMEVERDAwMEUxNkQwMDAwMDAwMDAwRjAwMEIwMDEwMEFEOTUwMDVDQTYKKzoxMEVERTAwMDAxODAwMDAwQzk5NDAwNDA4MTMyMDEwMDAwMDAwMDFCMzYKKzoxMEVERjAwMDEwQjEwMDAwNjgwMTJEMDY4MkIwMDEwMDAwMDAwMEYyOTEKKzoxMEVFMDAwMDgyQzAwMTAwMDA4MDAwMDM0NkM5MDEwMEJGOTQwMDQwOTkKKzoxMEVFMTAwMDgxMzIwMTAwRTg5NTIyNDAxMTZDMDAwMDAwMDA2ODA4NzIKKzoxMEVFMjAwMDM4OTYwMTAwM0EwNDAwNDA4OTk4MDEwMDA5OTkwMDA4QzkKKzoxMEVFMzAwMDhBMzAwMTAwRjAwNzAwNDE4MkNDMDEwMEJGOTVBQTQxNTEKKzoxMEVFNDAwMDNCNDAwMDAwMDAwMDAwRjgxMEIwMDEwMDAwMDAwMDVDMzIKKzoxMEVFNTAwMDExODAwMTAwMDQwMEEzNDgzQjZDMDAwMDAxMDAwMDFENkMKKzoxMEVFNjAwMDA0Q0MwMTAwRTY5NTI2NDYyMzMwMDAwMDA4MDAwMDAzOEMKKzoxMEVFNzAwMDEyQzgwMTAwMDQ4MDAwMDM5OEM4MDEwMDA0MDBBMjRDREQKKzoxMEVFODAwMDQyNkQwMDAwMDQwMEEyMDU0ODZEMDAwMDY0MDEyMEYwRkUKKzoxMEVFOTAwMEUwQjEwMTAwRTU5NTIyNDEwNTUwMDAwMDIwMDAwMDAzOEIKKzoxMEVFQTAwMDQ4QzkwMTAwMEMwMDAwRjg4NkM4MDEwMDAwMDAyMjQ0OTcKKzoxMEVFQjAwMEYxQjEwMTAwMDAwMDAwNDNGMEIxMDEwMDAwMDAwMDA5QzEKKzoxMEVFQzAwMEUwQjEwMTAwMDAwMDAwNDQ2MUIxMDEwMEEwMDAwMEE0MTUKKzoxMEVFRDAwMDYyREQwMTAwRDc5NUE4NDYxRjEwMDAwMEU0OTUyMjQxOEQKKzoxMEVFRTAwMDA1NTAwMDAwRTI5NUEyNDEyMzUwMDAwMDAwMDAwMEExNUYKKzoxMEVFRjAwMDFBQjAwMTAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwQTAKKzoxMEVGMDAwMDYyREQwMTAwREQ5NUE4NDYyMzMwMDAwMDIzODMwMDg4RTAKKzoxMEVGMTAwMDFDQjAwMDAwMTAwMDAwMDM0OEM5MDEwMDAwMDAwMDBERjMKKzoxMEVGMjAwMDQyQjEwMTAwMDAwMDAwNDQxM0MwMDEwMEQyOTUwMDUwMUUKKzoxMEVGMzAwMDQ5QzEwMDAwMDAwMDAwMDU0OEIxMDEwMDA0ODAwMDAzNDEKKzoxMEVGNDAwMDFBQzgwMTAwMDQwMEEyMDU0ODZEMDAwMDAwMDA4MDQwQkUKKzoxMEVGNTAwMDgxQjIwMTAwRTY5NTIyNDAzQjZDMDAwMDAwMDAwMEY4MDEKKzoxMEVGNjAwMDAwQjAwMTAwQzk5NDAwNUMwMTAwMDEwMEU4OTUwMDQxNzcKKzoxMEVGNzAwMDNCRDAwMDAwMDAwMDhENDc4MDMyMDEwMEIwMDAyRjVGQzEKKzoxMEVGODAwMDEzQjAwMTAwMDAwMDYwRjA4Q0MwMDEwMDdDMDAwMDQwNjQKKzoxMEVGOTAwMDQzOTkwMTAwMDQwMEEzRjA4QzZDMDAwMDAwMDA4MDQwNDUKKzoxMEVGQTAwMDgxQjIwMTAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4QTYKKzoxMEVGQjAwMDk0QjAwMTAwMDAwMDAwRjg4Q0IwMDEwMEY3OTU4Q0Y4QzcKKzoxMEVGQzAwMDhFMzAwMDAwMDAwMDAwNDQxOTkwMDEwMDA0MDAyMkY4NzcKKzoxMEVGRDAwMDE0MzAwMDAwMDAwMDAwRjgxNkIwMDEwMDAwMDAwMEY4MzYKKzoxMEVGRTAwMDI2QjAwMTAwMDgwMDJFRjgwQ0IwMDEwMDBDMDAyQTRBREYKKzoxMEVGRjAwMEUwQjEwMTAwMjgwMDAwMDBFMEM5MDEwMDEwMDAyMDFCNjIKKzoxMEYwMDAwMEUwQjEwMTAwMDQ5NjIwMEEwQzZDMDAwMDAwMDAwMEY4M0EKKzoxMEYwMTAwMDk0QjAwMTAwMDAwMDAwRjg5NkIwMDEwMDIwMDAyMEYwM0MKKzoxMEYwMjAwMEU0QjEwMTAwMTgwMDIwNEFFMEIxMDEwMDFDMDAyMDRCQUYKKzoxMEYwMzAwMEUwQjEwMTAwRUM5NTAwNDAxM0IwMDAwMDA0MDBBMjA1MEYKKzoxMEYwNDAwMDQ4NkQwMDAwMkMwMDJENDIxOTkwMDEwMDJFMDAyRkYzNzYKKzoxMEYwNTAwMDgyQjAwMTAwMDAwMDAwRjM5NkIwMDEwMDBCOTZBMkE1NUIKKzoxMEYwNjAwMDk3NkMwMDAwMDAwMDgwNDE5NUIwMDEwMDBFOTZBMjQwMTAKKzoxMEYwNzAwMDk3NkMwMDAwMDAwMDAwNDA4M0IwMDEwMDJEMDAyMDQwOEMKKzoxMEYwODAwMEU3QjEwMTAwMDAwMDYzNDE5N0MwMDEwMEQ0MDAzRTQxOTgKKzoxMEYwOTAwMDgzRTAwMTAwMDAwMDAwNDE4M0MwMDEwMDEzOTZBMEE1OTkKKzoxMEYwQTAwMDgzNkMwMDAwMDAwMDAwNDA4M0IwMDEwMDJDMDAyMDQxNzAKKzoxMEYwQjAwMEU2QjEwMTAwMTg5NjIyNDAxRjdDMDAwMDAwMDQwMDAwMDkKKzoxMEYwQzAwMDk4REMwMTAwMEIwMDAwNENFNEY1MDEwMDE5OTYwMDQwQUIKKzoxMEYwRDAwMDFGODAwMDAwMEIwMDAwMDBFNEY1MDEwMDFFMDQwMDQwNEEKKzoxMEYwRTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAwMDA4MDQwRTEKKzoxMEYwRjAwMDgxQjIwMTAwRDE5NDAwNDA4MTMyMDEwMDAwODAwMDAzMDAKKzoxMEYxMDAwMDQyQzkwMTAwMDQwMDIyNDBFMTZEMDAwMDA0ODAwMDAzQjgKKzoxMEYxMTAwMDQ0QzkwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwQkUKKzoxMEYxMjAwMEYxQjEwMTAwMDAwMDYwNDE4N0IwMDEwMDAwODAwMDEwRDMKKzoxMEYxMzAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDQ4ODYKKzoxMEYxNDAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDAwMDAwMDAzMkYKKzoxMEYxNTAwMEUwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwOTUKKzoxMEYxNjAwMDYyREQwMTAwMDAwMEE4NUQwNTkwMDAwMDI5OTYwMDQwQzYKKzoxMEYxNzAwMDgxQjIwMDAwRDE5NDAwNDA4MTMyMDEwMDAwODAwMDAzODAKKzoxMEYxODAwMDQ0QzkwMTAwMDAwMDAwNDFGMEIxMDEwMDA0MDAyNjQwMjQKKzoxMEYxOTAwMDgxMzIwMDAwMDAwMDAwNDJGMEIxMDEwMDAwMDAwMDQwOTgKKzoxMEYxQTAwMEYxQjEwMTAwMDAwMDAwNDNGMEIxMDEwMDAwODAwMDEwNDcKKzoxMEYxQjAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDQ4MDYKKzoxMEYxQzAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDAwMDAwMDAzQUYKKzoxMEYxRDAwMEUwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwMTUKKzoxMEYxRTAwMDYyREQwMTAwMDAwMEE4NUQwNTkwMDAwMDM5OTYwMDQwMzYKKzoxMEYxRjAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDA0MDA4MjBDRUEKKzoxMEYyMDAwMDgwMzIwMDAwMkQwMDAwNDA0Mzk5MDEwMDJFMDAyRkYzQjIKKzoxMEYyMTAwMDg0QjAwMTAwMDEwMDYzRjM5NkM4MDEwMDQzOTY5RjQxNEEKKzoxMEYyMjAwMDg1NTAwMDAwMDEwMDAwQTU4NUNDMDEwMDJEMDAyMDQyODIKKzoxMEYyMzAwMEU2QjEwMTAwMDQwMEEzQTU5NzZDMDAwMEQ0MDAzRDQxOTUKKzoxMEYyNDAwMDg1RTAwMTAwMEIwMDAwRjI5OEU0MDEwMDRBOTYyMjQwOUMKKzoxMEYyNTAwMDFGN0MwMDAwMDQwMDIyNUE5OTdDMDAwMDAwMDAwMDVBMjQKKzoxMEYyNjAwMDk5ODAwMTAwMDQwMEEyMDA5ODZDMDAwMDIwMDQwMDQwNzYKKzoxMEYyNzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAwMDA4MDQwNEYKKzoxMEYyODAwMDgxQjIwMTAwMjEwNDAwNDA4OTk4MDEwMDA5OTkwMDAwMjEKKzoxMEYyOTAwMDhBMzAwMTAwMDQwMEEyMDA2QTA2MDAwMDVFMDEyRDAwMTEKKzoxMEYyQTAwMDgwQjAwMTAwNTU5NjUyNDM4MTYwMDAwMDAyMDAwMEYyRDgKKzoxMEYyQjAwMDgyRjQwMTAwNTY5NjAwNDE4MDk0MDAwMDAwMDAwMDVGMzcKKzoxMEYyQzAwMDgxOTAwMTAwMDAwMDAwNUU2MUIxMDEwMDAwMDAwMDQwN0IKKzoxMEYyRDAwMDYyQjEwMTAwMDAwMEE4NDA5NUIwMDAwMDU3OTY5RUJCQTcKKzoxMEYyRTAwMDgwMzIwMDAwNUM5NkEyNDAxRjdDMDAwMEM5OTQwMDQwNjAKKzoxMEYyRjAwMDgxQjIwMDAwMDAwMDgwNDE5NUIwMDEwMDA0MDAwMDE1QkIKKzoxMEYzMDAwMDQyQzkwMTAwMDAwMDAwNTQyQkMwMDEwMDAwMDAwMEZDQjUKKzoxMEYzMTAwMDI0QjAwMTAwMDAwMDAwRkMzOEIwMDEwMDAwMDAwMEZFMzUKKzoxMEYzMjAwMDNDQjAwMTAwMDAwMDAwRkUzQUIwMDEwMDcxOTY5QzE3NEQKKzoxMEYzMzAwMDgwMzIwMDAwNjY5NkEyNEExOTdDMDAwMDAwMDA4MDRDRDIKKzoxMEYzNDAwMDFGOTAwMTAwMEMwMDAwMUU5OEY0MDEwMDY1OTZBMjQ4NzEKKzoxMEYzNTAwMDk5NkMwMDAwMDAwMDAwMTU0MkIxMDEwMDY1OTZBMjhBNzgKKzoxMEYzNjAwMEYxNkQwMDAwMEMwMDAwMDEwMkNDMDEwMDAwMDAwMEZDNjcKKzoxMEYzNzAwMDNFQjAwMTAwMDEwMDAwRjQyOENDMDEwMENDMDAyRDA1QjYKKzoxMEYzODAwMDQ4QjEwMTAwNzA5NjIwRjAzRTZDMDAwMDAwMDAwMDRCNzgKKzoxMEYzOTAwMDFGOTAwMTAwMDAwMDAwNEMyQkMwMDEwMEJGMDAyRDA1OTQKKzoxMEYzQTAwMDQ4QjEwMTAwMDAwMDgwRjMzQUUwMDEwMDA0MDBBMjA1MkEKKzoxMEYzQjAwMDQ4NkQwMDAwMTAwMDAwMEM5NkY0MDEwMDA0MDBBMjA3NDQKKzoxMEYzQzAwMDk2NkMwMDAwMDAwMDJFNEIxOTkwMDEwMDA3MDAyQTBDREIKKzoxMEYzRDAwMEU0QjEwMTAwMDAwMDgwMDRFNkIxMDEwMDE4MDAwMDQwMjMKKzoxMEYzRTAwMDQzOTkwMTAwMUMwMDJERjAxNkIwMDEwMDIwMDAyREYwMDMKKzoxMEYzRjAwMDI2QjAwMTAwMEMwMDJGRjIwQ0IwMDEwMDAwMDBBMjA2QTQKKzoxMEY0MDAwMDE0RUMwMDAwODA5NjIyNDUxRjdDMDAwMDAwMDBBMzA2M0IKKzoxMEY0MTAwMDJBRUMwMDAwMDAwMDAwRjg5NEIwMDEwMDAwMDAwMEYwQTkKKzoxMEY0MjAwMDk2QjAwMTAwMEMwMDJENDA4MUIyMDEwMDAwMDAyQTRDNzIKKzoxMEY0MzAwMEUxQzEwMTAwMzAwMDAwMTA0OEM5MDEwMDBBMDAwMDQwOEQKKzoxMEY0NDAwMEYxOTkwMTAwMTgwMDAwMDVGMEM5MDEwMDAwMDAwMDRBMTAKKzoxMEY0NTAwMEYwQjEwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQ3RTYKKzoxMEY0NjAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDhBOTZBODVDRTEKKzoxMEY0NzAwMDFGMTAwMDAwMDAwMDgwMDU0OEIxMDEwMDA0MDBBMjk1QTMKKzoxMEY0ODAwMDAzNkMwMDAwMDAwMDJFMTA0OEIxMDEwMDQwMDAwMDAxOTQKKzoxMEY0OTAwMEYwQ0QwMTAwNDAwMDAwMDNGMEM5MDEwMDQwMDAwMDAwNzEKKzoxMEY0QTAwMEUwQzkwMTAwMDAwMDJFNTA0OUMxMDEwMDAwMDAwMDA2MjMKKzoxMEY0QjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDk1OTY2MjQyMzUKKzoxMEY0QzAwMDYxMzEwMDAwMjAwMDAwMTA2MkREMDEwMDk2OTZBODQwMjYKKzoxMEY0RDAwMDgxMzIwMDAwMTAwMDAwMTA2MkM5MDEwMDk4OTZBODAwNTcKKzoxMEY0RTAwMEUwMzEwMDAwMDAwMEYyNDA4MUIyMDEwMDA0MDBBMjk1NkEKKzoxMEY0RjAwMDAzNkMwMDAwMDAwMDJFMTA0OEIxMDEwMDQwMDAwMDAxMjQKKzoxMEY1MDAwMEYwQ0QwMTAwNDAwMDAwMDNGMEM5MDEwMDQwMDAwMDAwMDAKKzoxMEY1MTAwMEUwQzkwMTAwMDAwMDJFNTA0OUMxMDEwMDAwMDAwMDA2QjIKKzoxMEY1MjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMEEzOTY2MjQyQjYKKzoxMEY1MzAwMDYxMzEwMDAwMjAwMDAwMTA2MkREMDEwMEE0OTZBODQwQTcKKzoxMEY1NDAwMDgxMzIwMDAwQTAwMDAwQTQ2MkREMDEwMEE2OTZBODAwQTAKKzoxMEY1NTAwMEUwMzEwMDAwMDAwMEYyNDA4MUIyMDEwMDMwODAwMDRBM0EKKzoxMEY1NjAwMDQ0QzkwMTAwMDAwMDAwMDZGMUIxMDEwMEMwQTgzRDQ2RjkKKzoxMEY1NzAwMDBERTAwMTAwRkY3RjAwQTFGMDg5MDEwMDAyMDAwMDA5RjkKKzoxMEY1ODAwMDk2RjQwMTAwMDAwMDAwNDY5N0UwMDEwMDAwMDA2MEE4MkEKKzoxMEY1OTAwMDk3QzAwMTAwQjA5NjYzNDI2MTMxMDAwMDMwMDAwMDRBMUMKKzoxMEY1QTAwMDYyQzkwMTAwQjE5NkE4NDA4MTMyMDAwMDAwMDBGMzQwMUEKKzoxMEY1QjAwMDgxQjIwMTAwMDA5OTNGNDI5N0YwMDEwMEI1OTY2NTQwODUKKzoxMEY1QzAwMDgxMzIwMDAwQkQ5NjIyRjM3NDA2MDAwMDNGMDAwMEYzNzQKKzoxMEY1RDAwMDk0ODgwMTAwMDAwMDAwMDdFNzg1MDEwMDAwMDA3NTU1RDAKKzoxMEY1RTAwMDYxQjEwMTAwMDAwMDAwNEE2MkIxMDEwMDAwMDBBODQwQzIKKzoxMEY1RjAwMDgxQjIwMDAwQkE5NjAwNDA4MUIyMDAwMDAwMDBGNTQwRTAKKzoxMEY2MDAwMDgxQjIwMTAwMDAwMDAwQTgzNkIwMDEwMENEOTY4MjQxMTEKKzoxMEY2MTAwMDIzNDAwMDAwQzI5NkEyNDQxRjdDMDAwMDlFOTMwMDAxN0MKKzoxMEY2MjAwMDhDMzAwMTAwMjA4MDAwMTA0MkM5MDEwMEM4OTYyMjQwQTEKKzoxMEY2MzAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwRDQKKzoxMEY2NDAwMDYyREQwMTAwQzU5NkE4NDA4MTMyMDAwMDIzODMwMDg4NTYKKzoxMEY2NTAwMDFDQjAwMDAwMDAwMDAwNDEyM0IwMDEwMDAwMDAwMDEwQjkKKzoxMEY2NjAwMDMyQjAwMTAwQ0Q5NjIyNDExOTdDMDAwMEU3OTQwMDQzOUUKKzoxMEY2NzAwMDIzMzAwMTAwMDAwMDAwNDEyM0IwMDEwMENGOTZBMzE1MDQKKzoxMEY2ODAwMDBDNkMwMDAwRDA5NjAwMDYwNEIwMDAwMDAwMDAwMDE1Q0QKKzoxMEY2OTAwMDA0QjAwMTAwRDI5NjIwMDIxQTZDMDAwMDAwMDAwMDBEOTgKKzoxMEY2QTAwMDA0QjAwMTAwQTE5NzAwMDU0ODMxMDEwMEZEOTYyMjAyMzcKKzoxMEY2QjAwMDE0NTAwMDAwRDY5NkEyMDIyQTUwMDAwMEZEOTZBMjQ1RTIKKzoxMEY2QzAwMDFGN0MwMDAwRDg5NjIyMDIwQzUwMDAwMEUxOTYwMDAyMzgKKzoxMEY2RDAwMDE2QzAwMDAwRTA5NjIyNUMxRjdDMDAwMDMwODAwMDEwMDUKKzoxMEY2RTAwMDQyQzkwMTAwRTA5NjIyNDBFMzZEMDAwMDAwMDAwMDQ3OUYKKzoxMEY2RjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMERDOTZBODQwMEQKKzoxMEY3MDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NDcKKzoxMEY3MTAwMDQ4QjEwMTAwNzk5NjAwNUMxRjAwMDEwMEZEOTYyMjE1OUEKKzoxMEY3MjAwMDgwMzIwMDAwMDAwMDAwNTAzM0MwMDEwMEZDOTZBMjAyQUQKKzoxMEY3MzAwMDFBNTAwMDAwRUQ5NjIyNDYxRjdDMDAwMDcwODAwMDAzRTYKKzoxMEY3NDAwMDQyQzkwMTAwMDAwMDAwNDYxRjgwMDEwMEVEOTYyMjQwRTIKKzoxMEY3NTAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDEwQjQKKzoxMEY3NjAwMDYyREQwMTAwRTk5NkE4NDA4MTMyMDAwMDIzODMwMDg4MTEKKzoxMEY3NzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBDODAwMDAzMkYKKzoxMEY3ODAwMDQyQzkwMTAwMDQwMDIyRjA4MDMyMDAwMDEwMDAwMEYwQTUKKzoxMEY3OTAwMDEwQzgwMTAwMkYwMDJGNUMxMTgwMDEwMDAwMDAwMDQ3RkQKKzoxMEY3QTAwMEU3OTEwMTAwRjAwNzAwNDAxQjk4MDEwMEJGOTYyMDE1NkIKKzoxMEY3QjAwMDFBNkMwMDAwNzAwMDAwMDM0OEM5MDEwMDAwMDAyMjUwQ0MKKzoxMEY3QzAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMEZGMDcwMDA4RTMKKzoxMEY3RDAwMEUwOEQwMTAwMDAwMDAwNDI2MUIxMDEwMEEwMDAwMEE0MjIKKzoxMEY3RTAwMDYyREQwMTAwRjk5NkE4NDYxRjEwMDAwMEJGOTYwMDA1RDMKKzoxMEY3RjAwMDQ4QjEwMDAwQkY5NjAwMDIxMEMwMDAwMEZGOTZBMjQ0NkUKKzoxMEY4MDAwMDFGN0MwMDAwOUU5MzAwMDE4QzMwMDEwMDAwMDAwMDFCNTMKKzoxMEY4MTAwMDEwQjEwMDAwMDA4MDAwMTA0NEM5MDEwMDBDMDAwMDQwM0QKKzoxMEY4MjAwMEYxOTkwMTAwMTAwMDAwMDhGMEM5MDEwMDAwMDAwMDE2NjUKKzoxMEY4MzAwMEYwQjEwMTAwMTAwMDAwMDNFMEM5MDEwMDA0MDBBMjVDNjcKKzoxMEY4NDAwMDFGN0MwMDAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwOTUKKzoxMEY4NTAwMDYyREQwMTAwMDAwMEE4NUMxRjkwMDAwMDA3OTcwMDQwRDcKKzoxMEY4NjAwMDgxQjIwMDAwMTcwMDAwRDBBMkM5MDEwMDAwMDBBMjQwMzAKKzoxMEY4NzAwMDI3RUMwMDAwMDAwMDAwMjAwMEIwMDEwMEM5OTQwMDQxMDYKKzoxMEY4ODAwMEEzNDEwMTAwMEI5NzAwNDEyN0QwMDAwMDM2MDQwMDQwM0YKKzoxMEY4OTAwMDg5OTgwMTAwMDk5OTAwNDA4QTMwMDEwMDEwMDAwMDA3OTIKKzoxMEY4QTAwMDk2RTQwMTAwMDAwMDAwNEI4MDk0MDEwMDAwMDAwMDU0MjkKKzoxMEY4QjAwMDYxQjEwMTAwMDA4MDAwNDA2MkREMDEwMDAwMDBBODQwNEQKKzoxMEY4QzAwMDgxQjIwMDAwMDQwMDE0QkI4MDMyMDAwMDE0OTcwMDQwOTUKKzoxMEY4RDAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDZBOTcwMDQwNTQKKzoxMEY4RTAwMDJCMzAwMTAwQUMwMDJEMDYxNkMwMDEwMDkwMDAyREYwNTkKKzoxMEY4RjAwMDE2QzQwMTAwMUU5N0EwRjAxNjQ0MDAwMDAwMDAwMDQxNEQKKzoxMEY5MDAwMDE3QzAwMTAwMEUwMDAwQTI0NEM5MDEwMDAwMDA2Q0YwMDUKKzoxMEY5MTAwMDMwQjAwMTAwQUMwMDJENDA4N0IwMDEwMDAwMDA2Q0YwNTkKKzoxMEY5MjAwMDI4QjAwMTAwMjc5NzIyNEExOTdDMDAwMDAwMzAwMDQzQ0MKKzoxMEY5MzAwMDg2QzgwMTAwMDAzMDAwMEIxNkM4MDEwMDI3OTdBNDQwQkMKKzoxMEY5NDAwMDgxMzIwMDAwMDAwMDAwNDExN0MwMDEwMDRBOTcyMjA2RTIKKzoxMEY5NTAwMDgwMzIwMDAwMzU5N0EyMDYxNDZDMDAwMDMyOTcyMjQ4Q0UKKzoxMEY5NjAwMDE5N0MwMDAwMkM5N0EwNDExNzQwMDAwMDAwMDAwMDQxQzYKKzoxMEY5NzAwMDE3QzAwMTAwMDAwMDAwNDEzMUMwMDEwMDkwMDAyMDE4QjQKKzoxMEY5ODAwMEUwQjEwMTAwOEIwMDJENDgxOTgwMDEwMDA0MDBBMjQ1NjAKKzoxMEY5OTAwMEU3N0QwMDAwOEIwMDIwNDVFNzkxMDEwMDM1OTcwMDQwOEUKKzoxMEY5QTAwMDg3OTAwMDAwMDgwMDAwNDM4Njk4MDEwMDM1OTdBMDQ4MjIKKzoxMEY5QjAwMDE3NDAwMDAwMDAwMDAwNDExN0MwMDEwMEIwMDAwMDQwRTcKKzoxMEY5QzAwMDQzOTkwMTAwMTA1MDAwNDNGQ0M5MDEwMEFFOTcwMDMwN0MKKzoxMEY5RDAwMDgxMzAwMTAwMDAwMDAwNDBFNUIxMDEwMDQwOTcyMjRBNUIKKzoxMEY5RTAwMDE5N0MwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCMjYKKzoxMEY5RjAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDNGOTdBMEYwNzMKKzoxMEZBMDAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDQ0OTc2NEYwNTQKKzoxMEZBMTAwMDgyQjAwMDAwQTQwMDAwNDA0Nzk5MDEwMDQ0OTdBMkYyODAKKzoxMEZBMjAwMDgwMzIwMDAwMDAwMDAwNDFFNUIxMDEwMDhDMDAyMDE4ODgKKzoxMEZBMzAwMEUwQjEwMTAwOTAwMDAwNDA0NTk5MDEwMDAwMDA2MDA2MUYKKzoxMEZBNDAwMDMwQzAwMTAwMDAwMDg2MEM4MEIyMDAwMDA0MDBBMjQ5MTIKKzoxMEZBNTAwMDE5N0MwMDAwQkMwMDJENDYxOTkwMDEwMEEwMDBBMEYyMDYKKzoxMEZBNjAwMEU0QjEwMTAwQjAwMDAwNDA0Mzk5MDEwMDEwNTAwMDQzOTAKKzoxMEZBNzAwMEZDQzkwMTAwQUU5NzAwMzA4MTMwMDEwMDAwMDBBMjRBQUQKKzoxMEZBODAwMDE5RkMwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCMDUKKzoxMEZBOTAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDUzOTdBMEYwQkUKKzoxMEZBQTAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDBFNEYwMEYKKzoxMEZBQjAwMDgyQjAwMTAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDQxMzQKKzoxMEZBQzAwMEYwQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwRUYKKzoxMEZBRDAwMEYwQjEwMTAwMDAwMDAwMTA2MkIxMDEwMDAwMDBBODFCOUQKKzoxMEZBRTAwMEUwQjEwMDAwNTg5NzAwNDA4MUIyMDAwMDAwRjAwMDBDMjcKKzoxMEZBRjAwMDdFODkwMTAwMDAwMEE2NEM5NTYwMDEwMDAwMDA4MDRBNEMKKzoxMEZCMDAwMDE4OTQwMTAwMDA4MDAwMTA0NEM5MDEwMDA0MDAyMjAxODMKKzoxMEZCMTAwMEYwMzEwMDAwMjAwMDAwNDBGMEM5MDEwMDAwMDAwMDE2OTQKKzoxMEZCMjAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDEwQUQKKzoxMEZCMzAwMDYyREQwMTAwMDAwMEE4MTVFMEIxMDAwMDYzOTcwMDQwRkQKKzoxMEZCNDAwMDgxQjIwMDAwMTA4MDAwMDM0NEM5MDEwMDAwMDAwMDA2REIKKzoxMEZCNTAwMEYwQjEwMTAwMDAwMDAwMDFGMEIxMDEwMDAwMDBFODVGMTkKKzoxMEZCNjAwMDE3OTAwMTAwNzAwMDAwNDA0Mzk5MDEwMDdBMDEyRUZFQjkKKzoxMEZCNzAwMDkyQjAwMTAwOEIwMDJERjYxNkIwMDEwMDcwOTcyMjQzNjEKKzoxMEZCODAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDA0MDAwMEE2MUMKKzoxMEZCOTAwMDJBQjAwMTAwMjgwMDZFMDY4MkM4MDEwMDc0OTcyMjRBMkMKKzoxMEZCQTAwMDE5N0MwMDAwMDAwMDAwNDI0NUQxMDEwMDAwMDA2RTRDQUQKKzoxMEZCQjAwMDgzQzAwMTAwMDAwMDAwNDE5MkMwMDEwMDc1OTc0MzMwRUUKKzoxMEZCQzAwMDNEMDcwMDAwMDAwMDY2OUU4M0IwMDEwMDAwMDAxQjQxNUQKKzoxMEZCRDAwMDNEQzMwMTAwMDAwMDAwNDE5MkMwMDEwMDA2MDAwMEEyRTgKKzoxMEZCRTAwMDQ0QzkwMTAwMTAwMDAwNDk5OEY0MDEwMDdFOTcyNjMwQjYKKzoxMEZCRjAwMDkzMDQwMDAwN0U5NzkwNEM5MjQwMDAwMDAwMDAwMDQxNkEKKzoxMEZDMDAwMDkzQzAwMTAwRkZGRjgwNDlFQ0E5MDEwMDAwODAwMDEwQjMKKzoxMEZDMTAwMDQ0QzkwMTAwMDQwMDIyMDFGMDMxMDAwMDAwMDAwMDA5ODUKKzoxMEZDMjAwMEYwQjEwMTAwMDAwMDAwMThGMEIxMDEwMDIwMDAwMDEwNDgKKzoxMEZDMzAwMDYyREQwMTAwMDAwMEE4MTVFMEIxMDAwMDgzOTcwMDQwREMKKzoxMEZDNDAwMDgxQjIwMDAwMDQwMDIyMjA4MTZDMDAwMDA0MDAyMjQwRTgKKzoxMEZDNTAwMDgxNkMwMDAwOTU5NzIyNUY4MTdDMDAwMDkyOTdBMjQwMDIKKzoxMEZDNjAwMDE5N0MwMDAwMDAwMDAwNDAxOTkwMDEwMDAwMDAwMDU0QzEKKzoxMEZDNzAwMDYxQjEwMTAwMTAwMDAwMDc5NkU0MDEwMDAwMDAwMDRGOTAKKzoxMEZDODAwMDk3OTQwMTAwMDAwMDAwNEI2MkIxMDEwMDkyOTcyODQwNTgKKzoxMEZDOTAwMDgxMzIwMDAwMDQwMEEyNTQ3NzdEMDAwMDhFOTcwMDQwNUUKKzoxMEZDQTAwMDgxQjIwMDAwMjUwNDAwNDA4OTk4MDEwMDA5OTkwMDQwQjQKKzoxMEZDQjAwMDhBMzAwMTAwMDAwMEEyMjE4MTg0MDAwMDk4OTdBMjVGOTEKKzoxMEZDQzAwMDgxNkMwMDAwMDAwMEEyNDMxOTdDMDEwMDAwMDAwMDQzODkKKzoxMEZDRDAwMDE5OTAwMTAwMjUwNDAwNDA4OTk4MDEwMDA5OTkwMDQwMEQKKzoxMEZDRTAwMDhBMzAwMTAwMDAwMDAwNTQ2MUIxMDEwMDEwMDAwMDA3REIKKzoxMEZDRjAwMDk2RTQwMTAwMDAwMDAwNDA5Njk0MDEwMDAwMDAwMDRCRDMKKzoxMEZEMDAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDA0MDBBMjU0Q0EKKzoxMEZEMTAwMDc3N0QwMDAwOUQ5NzAwNDA4MUIyMDAwMDA0MDAyMjA4MUEKKzoxMEZEMjAwMDgwMzIwMDAwMDQwMDIyMDI4MDMyMDAwMEE2OTdBMjRCMUQKKzoxMEZEMzAwMEZEN0YwMDAwQjQwNTAwMDI4MENFMDEwMDA0MDBBQTQwNEYKKzoxMEZENDAwMDgxMzIwMDAwMDA4MDAwMTk0NEM5MDEwMDA0MDAyMjAyMzEKKzoxMEZENTAwMEYwMzEwMDAwMDAwMDAwMEJGMEIxMDEwMDAwMDAwMDEzQzIKKzoxMEZENjAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDE5NjIKKzoxMEZENzAwMDYyREQwMTAwMDAwMEE4MDhFMEIxMDAwMEFCOTcwMDQwODAKKzoxMEZEODAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMEIwMDAwMEExOEYKKzoxMEZEOTAwMDgwQ0UwMTAwMDQwMEE2NDA4MTMyMDAwMDdDMDAyREYwREUKKzoxMEZEQTAwMDg0QjAwMTAwMDIwMDAwRjA5OEY0MDEwMEI3OTcyMDRDRTUKKzoxMEZEQjAwMDg0NkMwMDAwODgwMDAwNDA0Mzk5MDEwMEI3OTcyMEYyNEUKKzoxMEZEQzAwMDg0NkMwMDAwMDAwMDAwNDA4NUIwMDEwMDk4MDAyRDE0RjQKKzoxMEZERDAwMDgyQjAwMTAwMDAwMDAwRjA5OEIwMDEwMEEzMDAyRDE0RDMKKzoxMEZERTAwMDk4RDAwMTAwQkM5NzIwNEM4NDZDMDAwMDAwMDAwMDRDQUYKKzoxMEZERjAwMDg0QjAwMTAwMDQwMEEyMzA4MTZDMDAwMDAwMDAwMEYzMTgKKzoxMEZFMDAwMDgwRTAwMTAwQzA5NzIzNDA4NDZDMDAwMDAwMDAwMDQwQTcKKzoxMEZFMTAwMDg0QjAwMTAwRDAwMDIwMTRFMEIxMDEwMDk4MDAyNTQyMTgKKzoxMEZFMjAwMDgwQjAwMTAwMDAwMDZFRjM4MEYwMDEwMDAwMDBBNjQyRTcKKzoxMEZFMzAwMDgyQzAwMDAwQzY5N0EwNDAxNjQwMDAwMDAwMDAwMDQxQUMKKzoxMEZFNDAwMDE3QzAwMTAwMDAwMDlGRjA4MkVDMDAwMDk4MDBBMDQxNjQKKzoxMEZFNTAwMEUwQjEwMTAwMDQwMEEyNUMxRjdDMDAwMDM3MDQwMDQwRjgKKzoxMEZFNjAwMDg5OTgwMTAwMDk5OTAwMDU4QTMwMDEwMDAwMDAwMDQyQ0MKKzoxMEZFNzAwMDYxQjEwMTAwMDAwMDJFMTA0OEIxMDEwMEE4MDEwMDQwNEUKKzoxMEZFODAwMEYxOTkwMTAwMDAwMDAwMDVGMEIxMDEwMDA5MDAwMDA3MzAKKzoxMEZFOTAwMDk2RTQwMTAwMDAwMDYwQTc5N0MwMDEwMDAwMDAwMDEwNzgKKzoxMEZFQTAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMEQxOTcwMDQwN0IKKzoxMEZFQjAwMDgxQjIwMDAwQTgwMDJEMUM4QUIwMDEwMDAwMDA5RkYwNTQKKzoxMEZFQzAwMDhBRDAwMDAwMDAwMEEyNDA4QkVDMDAwMDhBMDAyMDQwOTUKKzoxMEZFRDAwMEU3QjEwMTAwQjQwMDAwNDA0Nzk5MDEwMEE0MDAyRDQ1OUUKKzoxMEZFRTAwMEUwRDEwMTAwREY5NzlDMTc4MDMyMDAwMDA0MDAyMjRBMTUKKzoxMEZFRjAwMDE5N0MwMDAwQkUwMDJGQUI4M0IwMDEwMDNDOTgwMDE0QjkKKzoxMEZGMDAwMDgyNTAwMTAwRTQ5NzAwNDA4MUIyMDAwMEU0OTcyMkYyQTEKKzoxMEZGMTAwMDgyMzAwMDAwOEMwMDAwNDA0Mzk5MDEwMEU0OTc5RjFDNTAKKzoxMEZGMjAwMEUwNkQwMDAwQkUwMDAwNDA0Nzk5MDEwMDNDOTgwMDQwOTEKKzoxMEZGMzAwMDgxMzIwMTAwQTgwMDIwMUNFMEIxMDEwMDlDMDAyRDMwOUUKKzoxMEZGNDAwMDgxQjAwMTAwODgwMDJERjA4NEIwMDEwMDk0MDAyREYyRjIKKzoxMEZGNTAwMDg2QjAwMTAwRjg5NzIzRjA4NDZDMDAwMEVDOTcyMzkyQTAKKzoxMEZGNjAwMDg3NkMwMDAwQzkwNDAwQTY5NEIwMDEwMEVFOTcwMDQwMjEKKzoxMEZGNzAwMDgxQjIwMDAwMjAwMDAwQTY5NEIwMDEwMDYwODkwMDRBMTAKKzoxMEZGODAwMDk0OTgwMTAwRUU5NzY4NDA4MTMyMDAwMDA0MDAyMjQwRkUKKzoxMEZGOTAwMEJEN0QwMDAwMDAwMDAwNEFCMEIxMDEwMEJGMDAyRDQyNEQKKzoxMEZGQTAwMEIyQjEwMTAwOTAwMDJERjM4MEUwMDEwMEYzOTdENDQwM0UKKzoxMEZGQjAwMDgxMzIwMDAwMDAwMDc4REE4NEMwMDEwMEZEOTcyMzQwMDAKKzoxMEZGQzAwMDg0NkMwMDAwOTQwMDIwOURFMUIxMDEwMEZEOTcwMDQwODkKKzoxMEZGRDAwMDg0QjAwMDAwQkYwMDJENDM4NEMwMDEwMDkwMDAyREYzQzkKKzoxMEZGRTAwMDgwRTAwMTAwRkQ5NzIzNDA4NDZDMDAwMDk0MDAyMDlENzgKKzoxMEZGRjAwMEUxQjEwMTAwMDAwMDAwNDA4NEIwMDEwMDAxOThBMkYwQ0UKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwMzg2QzAwMDA5QzAwMjA0MkUwQjEwMTAwMDAwMDAwNUY1RAorOjEwMDAxMDAwMTM5NDAxMDAwMDAwODA0NjE5ODAwMTAwOUMwMDIwNDJEQQorOjEwMDAyMDAwRTBCMTAxMDAzNzAwMDA0MDQzOTkwMTAwMDQwMDAwRjNGMworOjEwMDAzMDAwODBGNDAxMDAwRjAwMDBGMzgyODgwMTAwMDc5ODIzNDEzQgorOjEwMDA0MDAwODA2QzAwMDAwMDAwMDA1RjEzOTQwMTAwMDAwMDg5MEMyOAorOjEwMDA1MDAwODBCMjAwMDAwNDAwODYwQzgwMzIwMDAwQkMwMDAwNDAyQQorOjEwMDA2MDAwNDM5OTAxMDBBMDAwQTBGMkU0QjEwMTAwMDAwMDlGNDEwQgorOjEwMDA3MDAwMjRFQzAwMDAxMzk4QTY0MDgxMzIwMDAwMDAwMDlGNDI0QgorOjEwMDA4MDAwMzhFQzAwMDAxMzk4QTY0MDgxMzIwMDAwQjQwMDAwNDAxNAorOjEwMDA5MDAwNDM5OTAxMDAxNTk4QTNGMDNBNkMwMDAwMDQwMEE0NDBCNQorOjEwMDBBMDAwODEzMjAwMDAwMDAwODA0MDgxQjIwMTAwQjQwMDAwNDBCNQorOjEwMDBCMDAwNDM5OTAxMDAxOTk4MjJGMDNBNkMwMDAwQjQwMDIwMUQwOQorOjEwMDBDMDAwRTBCMTAxMDA4MDAwMkQ1RjEzOTQwMTAwMTk5ODIzRjAyNgorOjEwMDBEMDAwM0E2QzAwMDA4MDAwMjAxREUwQjEwMTAwQzAwMDIwMTIzOQorOjEwMDBFMDAwRTBCMTAxMDBDNDAwQTAxQ0UwQjEwMTAwMjcwNDAwNDAwMQorOjEwMDBGMDAwODk5ODAxMDAwOTk5MDA0MjhBMzAwMTAwMDQwMEEyMDU5NAorOjEwMDEwMDAwNDg2RDAwMDAwMDgwMDAwMzQ0QzkwMTAwMDAwMDAwNDI2NworOjEwMDExMDAwRTBCMTAxMDAxMjAwMDA0MDg3OTgwMTAwMjU5ODlGNDEzRQorOjEwMDEyMDAwMjQ2QzAwMDAwMDAwMDA0MThDQjAwMTAwMDAwMDAwMTJBRgorOjEwMDEzMDAwOENEMDAxMDAyNjk4MDA0MTI0QjAwMDAwMDAwMDAwNDA0RgorOjEwMDE0MDAwOERCMDAxMDA3Rjk4MDA0MDgxMzIwMTAwMDAwMDAwNDUyMQorOjEwMDE1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDAwMEE4NDAxNAorOjEwMDE2MDAwODFCMjAwMDAyODk4MDA0MDgxQjIwMDAwQjQ5NDAwNDBBMQorOjEwMDE3MDAwODEzMjAxMDAwMDAwMDAxNjgwQjIwMTAwMDAwMEE3MDhEMworOjEwMDE4MDAwODAzMjAxMDAzMjA0MDA0MDg5OTgwMTAwMDk5OTAwMDg3QQorOjEwMDE5MDAwOEEzMDAxMDAzMjk4QTI0MDk1NkMwMDAwQzk5NDAwNDA1QQorOjEwMDFBMDAwODEzMjAxMDAwMDgyMDBBNjA0QjAwMTAwMDAwMDAwNDA3RQorOjEwMDFCMDAwMkRCMDAxMDBBMDk4MkY0MDExQjAwMTAwMzAwNTAwNDE4MgorOjEwMDFDMDAwODlCMDAwMDBDQzAwMDBBMTgwQ0UwMTAwMDQwMEE2NDA1MAorOjEwMDFEMDAwODEzMjAwMDAwMDAwOUZGODNFRUMwMDAwMDAwMDlGMTJGQQorOjEwMDFFMDAwRTBFRDAwMDBDODAwMjBBQkUxQjEwMTAwQ0MwMEEwMUY5MQorOjEwMDFGMDAwRTBCMTAxMDAwNDAwQTIwNTQ4NkQwMDAwM0Y5OEEzNUYzNAorOjEwMDIwMDAwRTc2RDAwMDAwMDAwMDA0MUU3QzEwMTAwQTYwMDAwNDBDQQorOjEwMDIxMDAwNDc5OTAxMDA1Mzk4MjJGMjg2MzAwMDAwMDMwMDAwNDMwMgorOjEwMDIyMDAwODRGNDAxMDAwMTAwMDA0MTgwQ0MwMTAwQjgwMDJENDI5RgorOjEwMDIzMDAwODBEMDAxMDAwMDAwNjI0MDg2QzAwMTAwNDc5ODFGNDM0MworOjEwMDI0MDAwODAzMjAwMDA0ODk4QTI0MDg3NkMwMDAwMDAwMDYyNDFBNAorOjEwMDI1MDAwODdCMDAxMDA0Qzk4OUY0MDgwMzIwMDAwMDAwMDAwNDBCMQorOjEwMDI2MDAwODVCMDAxMDAwMDAwMDA0MDg0RDAwMTAwMDAwMDAwNDI4MQorOjEwMDI3MDAwODBCMDAxMDAwMDAwMDBGMjg4QjAwMTAwMDIwMDAwNDREQworOjEwMDI4MDAwODRGNDAxMDBCODAwMkU0MjgwRDAwMTAwMDAwMDYyNDBEQQorOjEwMDI5MDAwODhDMDAxMDA1Mjk4MUY0NDgwMzIwMDAwNTY5OEEyNDA0NgorOjEwMDJBMDAwODk2QzAwMDA1Njk4NjI0MTg5QjAwMDAwMDMwMDYyNDFFOQorOjEwMDJCMDAwODZFNDAxMDBCODAwMDA0MDQ1OTkwMTAwMDEwMDYyNDE1OAorOjEwMDJDMDAwODhFNDAxMDBBNDAwMjA0MEU1QjEwMTAwQTIwMDIwNDAyNAorOjEwMDJEMDAwRTdCMTAxMDBCQzAwMkU0Mzg3RjAwMTAwMDAwMDAwNDQ5QworOjEwMDJFMDAwODZDMDAxMDA1Qzk4MjA0Mzg3NkMwMDAwMDAwMDgwNDNCQQorOjEwMDJGMDAwRTVCMTAxMDA0MDAxMDA0MzgwQ0UwMTAwMDAwMEE0NDNBRAorOjEwMDMwMDAwRTQzMTAxMDA0MDAxRTI0MDg3OTgwMTAwMDQwMEEyMDVBOQorOjEwMDMxMDAwNDg2RDAwMDAwNDAwMjIwQTgwMzIwMDAwODgwMDJENDQ0RAorOjEwMDMyMDAwODFCMDAxMDA5MDAwMkRGMjJFQjAwMTAwOUMwMDJERjA1NAorOjEwMDMzMDAwODZCMDAxMDA5MDAwMkRGMDgyQjAwMTAwQkEwMDJERjBDRgorOjEwMDM0MDAwOThCMDAxMDA2Qjk4QTIxMjk4NkMwMDAwQkMwMDJERjJDRQorOjEwMDM1MDAwOThCMDAxMDA2Qjk4QTBGMjk4NkMwMDAwMDAwMDAwMTdBNAorOjEwMDM2MDAwODJCMDAxMDA5QzAwMjA0MUUwQjEwMTAwQjQwMDJEMTJEOAorOjEwMDM3MDAwODZEMDAxMDA2RTk4QTM0MUUwNkQwMDAwNkY5ODAwRjBGOAorOjEwMDM4MDAwODRCMDAwMDAwMDAwMDA0MTg0QjAwMTAwODAwMDJENDNEMworOjEwMDM5MDAwODREMDAxMDA3Mjk4OUY0MjgwMzIwMDAwMDAwMDAwNDAyQgorOjEwMDNBMDAwODVCMDAxMDA3NDk4QTM0MjE0NkMwMDAwNzU5ODAwMEE4RgorOjEwMDNCMDAwMENCMDAwMDAwMDAwMDA0MjBDQjAwMTAwNzc5OEEwMTdCQworOjEwMDNDMDAwMEM2QzAwMDAwMDAwODAxNzBDQjAwMTAwN0M5ODIyNDBFQgorOjEwMDNEMDAwMEQ2QzAwMDAwMDAwQTAwQTBDRUMwMDAwMDEwMDAwRjAxMQorOjEwMDNFMDAwODJGNDAxMDA3Qzk4QTA0MTBDNkMwMDAwMDAwMEEyRjA5NworOjEwMDNGMDAwODAzMjAxMDAyOTAwMDA0MDg5OTgwMTAwMDk5OTAwNDBERAorOjEwMDQwMDAwODEzMjAxMDAwMDAwODA0MDgxQjAwMTAwRDE5NDAwNDBBMQorOjEwMDQxMDAwODEzMjAxMDAwNDAwMjIwMzgwMzIwMDAwMDQ4MDAwMDNDNgorOjEwMDQyMDAwNDRDOTAxMDAwMDAwMDA0NkYwQjEwMTAwMDAwMDAwNDA5NgorOjEwMDQzMDAwRjFCMTAxMDAwMDAwNjA0MTg3OTQwMTAwMDA4MDAwMTBDQworOjEwMDQ0MDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwNDg2MworOjEwMDQ1MDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwMDAwMDAwMDMwQworOjEwMDQ2MDAwRTBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA3MgorOjEwMDQ3MDAwNjJERDAxMDAwMDAwQTg1RDA1OTAwMDAwOEI5ODAwNDAzRgorOjEwMDQ4MDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwMTAwMDAwMENCRAorOjEwMDQ5MDAwOTZGNDAxMDAwNDAwQTIwNzk2NkMwMDAwMDAwMDJFNEJBOQorOjEwMDRBMDAwMTk5MDAxMDAwNTAwMkEwQ0U0QjEwMTAwMDAwMDgwMDQ0RAorOjEwMDRCMDAwRTZCMTAxMDAzRTA0MDA0MDg5OTgwMTAwMDk5OTAwMDg1NgorOjEwMDRDMDAwOEEzMDAxMDA5Njk4NDU0ODYxMzEwMDAwMDAxMDAwMDgwQworOjEwMDREMDAwNjJERDAxMDA5Qzk4Mjg0MDg3MzAwMDAwOTc5ODIyNDhGMAorOjEwMDRFMDAwNzc3RDAwMDAwNDAwMjI0MDI3NkMwMDAwMEE5NzFENDYxQgorOjEwMDRGMDAwODdCMDAwMDA5Rjk4MjI1RjExN0MwMDAwMDQwMDIyMTU0NQorOjEwMDUwMDAwNjIzMTAwMDA5RDk4QTg0MDgxMzIwMDAwMDAwMDlENDBBQgorOjEwMDUxMDAwODFCMjAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAxNDJGNENERAorOjEwMDUyMDAwODNCMDAxMDAwMDAwMDA0MEYxQjEwMTAwQTI5OEEyNDE5NworOjEwMDUzMDAwODM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDAwMDAwNDBCNAorOjEwMDU0MDAwNDlCMTAxMDAzMDAwMDA0MEExOTkwMTAwMDAwMDAwNDBDNQorOjEwMDU1MDAwOTNCMDAxMDAwMDAwMDA0MDFGQjAwMTAwRjY5ODAwNDk3MAorOjEwMDU2MDAwOTYzMDAxMDAwNzAwMDA0OTA2RTQwMTAwMDAzOTAwMDM0RAorOjEwMDU3MDAwMDZDODAxMDAwMDAwMDA0MDA1QjAwMTAwMjAwMDAwRDBDNgorOjEwMDU4MDAwQTBDOTAxMDAwMDAwMDA0MTkzQzAwMTAwQTk5OEEwNTQzNworOjEwMDU5MDAwOTM2QzAwMDAwMDAwMkUwNTk3QjAwMTAwMDA4MDAwNDAyMQorOjEwMDVBMDAwNDk5OTAxMDAwMDAwMDA0MEUxQjEwMTAwMDAwMjAwQTJGMQorOjEwMDVCMDAwNDRDOTAxMDBCMjk4QTI0MTk3NTAwMDAwMDAwMDAwMjBGOQorOjEwMDVDMDAwNDlCMzAxMDBGQzk4MDA0MDQ5MzEwMTAwMDg5NTAwNDAwMgorOjEwMDVEMDAwODEzMjAxMDAwMEI1MkUwODk3QjAwMTAwMDAwMDAwNDBGNAorOjEwMDVFMDAwRjFCMTAxMDBCOTk4QTI0MTk3NTAwMDAwMTgwMDAwNDBGNQorOjEwMDVGMDAwOTc5ODAxMDAwMDk3MkU0MDgxQjIwMTAwMDAwMDAwNDA1MgorOjEwMDYwMDAwRjFCMTAxMDBCRDk4QTI0MTk3NTAwMDAwMDAwMDAwNDBFOAorOjEwMDYxMDAwNDlCMTAxMDA0MDE4MkUwNTk3QjAwMTAwMDAwMDAwNDBDQworOjEwMDYyMDAwRjFCMTAxMDBDMTk4QTI0MTk3NTAwMDAwNTc5NTIwNDBCOAorOjEwMDYzMDAwRTdCMTAxMDAzMDk0MDA0MDQ1OTkwMTAwNjQwMDAwNDA5QQorOjEwMDY0MDAwRTU5OTAxMDA1Njk1MjA0MEU3QjEwMTAwQjg5NDIwNDE5QQorOjEwMDY1MDAwRTVCMTAxMDBCQTk0MjA0MUU1QjEwMTAwOTg5NDAwNDA1MQorOjEwMDY2MDAwNDU5OTAxMDAwMjAwMDA0MDk3OTgwMTAwMDAwMDAwNDBGOQorOjEwMDY3MDAwRjFCMTAxMDBDQjk4QTI0MTk3NTAwMDAwMDAwMDAwNDA2QQorOjEwMDY4MDAwOTdCMDAxMDAwMDAwMDA0MDZGQjEwMTAwMDAwMDAwNEI3NgorOjEwMDY5MDAwNjhCMTAxMDBDRjk4ODU0MTk3NDAwMDAwODAwNDAwNDA3OAorOjEwMDZBMDAwODEzMjAxMDAwMDAwMDA0MDM5QjMwMTAwMDAwMDAwNDAyOQorOjEwMDZCMDAwMzdCMzAxMDAwMDAwMDA0MDM1QjMwMTAwMDAwMDAwNDBFNgorOjEwMDZDMDAwMzNCMzAxMDAwMDAwMDA0MDQxQjMwMTAwMDAwMDAwNDBDRQorOjEwMDZEMDAwM0ZCMzAxMDBFRTA1MDA0MDI1OUIwMTAwNDIwMDAwNDBCMQorOjEwMDZFMDAwNEI5QjAxMDAwMDAwMDA0MDJGQjMwMTAwMDAwMDAwNDBDMAorOjEwMDZGMDAwMkRCMzAxMDAwMDAwMDA0MDQ3QjMwMTAwMDAwMDAwNDA5RQorOjEwMDcwMDAwNDNCMzAxMDA2MDAwMDA0MDJCOUIwMTAwMDAwMDAwNTQzNworOjEwMDcxMDAwRUY5MzAxMDAwMDAwMDA1NUYxOTMwMTAwRkZGRjAwQTVEOQorOjEwMDcyMDAwM0M4QjAxMDAwMDAwMDAyQzVCQjMwMTAwMDAwMDAwMkM5QQorOjEwMDczMDAwNDVCMzAxMDAwMDAwMDA0MDU5QjMwMTAwMDAwMDAwNDAzMworOjEwMDc0MDAwNTdCMzAxMDAwMDAwMDA0MDI3QjMwMTAwMDAwMDAwNDA0MworOjEwMDc1MDAwNTNCMzAxMDBFQjk4QTI1MEZEN0YwMDAwRUI5OEEyNTEyQgorOjEwMDc2MDAwRkQ3RjAwMDBFQzk4MDA0MDFEQjMwMDAwNTA0NjAwNDBBMworOjEwMDc3MDAwMUQ5QjAxMDAwMEMwMDBBNjg4QjMwMTAwRkYzRjAwQTYzQQorOjEwMDc4MDAwM0FCMzAxMDAwMEMwMDA5RDNCOUIwMTAwQjQwNTAwNDA0RQorOjEwMDc5MDAwMjM5QjAxMDAwMDAwMDA0MDREQjMwMTAwMDgwQTAwQTZBMQorOjEwMDdBMDAwMTRCMzAxMDAwMTAxMDA4QTE1OUIwMTAwMDAwMDAwMjAyNAorOjEwMDdCMDAwODdCMzAxMDAwMDgwMDBBNjU2QjEwMTAwMDAwMDgwNUVGMgorOjEwMDdDMDAwNTdCNTAxMDAxODAwMDA0QjIwRTQwMTAwMDYwMDAwNEI2MworOjEwMDdEMDAwOTZFNDAxMDAwMDQzMDA0Qjk2QzgwMTAwMTgwMDAwMTA4OQorOjEwMDdFMDAwMjBEQzAxMDAwMDAwMDA0QjIwOTQwMTAwMDAwMDgwNTczNQorOjEwMDdGMDAwMjE5MDAxMDAwMDk5MkUwQTk3QjAwMTAwMDAwMDAwNDBFRQorOjEwMDgwMDAwRjFCMTAxMDBGRDk4QTI0MTk3NTAwMDAwMDAwMzAwNDBBMworOjEwMDgxMDAwOTc5ODAxMDAwMEE5MDA0MDQ1OTkwMTAwMDAwMDAwNDBBMAorOjEwMDgyMDAwRjFCMTAxMDAwMTk5QTI0MTk3NTAwMDAwMzAwMDAwNDA1MQorOjEwMDgzMDAwOTc5ODAxMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEJENQorOjEwMDg0MDAwNjJCMTAxMDAwNTk5QTg0MDgxMzIwMDAwMDU5OUEyNDFEQQorOjEwMDg1MDAwOTc1MDAwMDAwMDAwODA0MDgxQjIwMTAwMTAwMDAwNEU1RgorOjEwMDg2MDAwOThFNDAxMDAwMDAwMDAwNzk4OTQwMTAwMDAwMDAwNDM5NAorOjEwMDg3MDAwOTlFMDAxMDAwMDAwMDA4MDk4OTQwMTAwMDAwMDAwNDgwOQorOjEwMDg4MDAwOTlFMDAxMDAwMDAwMDA0Qzg4OTQwMTAwMEY5OTZBNDAzMworOjEwMDg5MDAwODEzMjAwMDAxMjk5MjI0Rjc3N0QwMDAwRjAwNDAwNDA2MQorOjEwMDhBMDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDRFRQorOjEwMDhCMDAwNjJCMTAxMDAxMzk5QTg0MDgxMzIwMDAwMUE5OTIyNEFCRQorOjEwMDhDMDAwODk3QzAwMDAxODk5MjI0Rjc3N0QwMDAwRjAwNDAwNDBEOQorOjEwMDhEMDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwMTg5OUE4NDA3MgorOjEwMDhFMDAwODEzMjAwMDAwMDAwRkE0MDgxQjIwMTAwMDAwMDgwNDAyNworOjEwMDhGMDAwODFCMjAxMDAwNDAwQTI1QTFGN0MwMDAwMTAwMDAwMEYwQQorOjEwMDkwMDAwOThGNDAxMDAwNDAwQTI1Rjk5MDQwMDAwMDAwMDgwNDBGOAorOjEwMDkxMDAwODFCMjAxMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA2QgorOjEwMDkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMDkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMDk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMDk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMDk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMDk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMDk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMDk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMDlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMDlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMDlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMDlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMDlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMDlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMEEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMEExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMEEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMEEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMEE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMEE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMEE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMEE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMEE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMEE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMEFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMEFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMEFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMEFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMEFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMEFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMEIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMEIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMEIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMEIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMEI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMEI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMEI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMEI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMEI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMEI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMEJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMEJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMEJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMEJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMEJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMEJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMEMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMEMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMEMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMEMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMEM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMEM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMEM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMEM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMEM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMEM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMENBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMENCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMENDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMENEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMENFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMENGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMEQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMEQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMEQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMEQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMEQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMEQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMEQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMEQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMEQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMEQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMERBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMERCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMERDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMEREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMERFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMERGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMEUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMEUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMEUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMEUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMEU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMEU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMEU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMEU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMEU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMEU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMEVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMEVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMEVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMEVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMEVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMEVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMEYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMEYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMEYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMEYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMEY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMEY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMEY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMEY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMEY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMEY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMEZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMEZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMEZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMEZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMEZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMEZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMTAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMTAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMTAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMTAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMTA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMTA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMTA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMTA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMTA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMTA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMTBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMTBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMTBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMTBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMTBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMTBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMTEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMTExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMTEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMTEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMTE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMTE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMTE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMTE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMTE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMTE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMTFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMTFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMTFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMTFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMTFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMTFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMTIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMTIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMTIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMTIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMTI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMTI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMTI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMTI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMTI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMTI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMTJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMTJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMTJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMTJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMTJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMTJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMTMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMTMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMTMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMTMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMTM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMTM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMTM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMTM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMTM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMTM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMTNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMTNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMTNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMTNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMTNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMTNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMTQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMTQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMTQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMTQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMTQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMTQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMTQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMTQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMTQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMTQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMTRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMTRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMTRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMTREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMTRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMTRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMTUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMTUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMTUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMTUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMTU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMTU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMTU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMTU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMTU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMTU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMTVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMTVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMTVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMTVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMTYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMTYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMTYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMTYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMTY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMTY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMTY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMTY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMTY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMTY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMTZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMTZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMTZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMTZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMTZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMTcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMTcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMTcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMTczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMTc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMTc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMTc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMTc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMTc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMTdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMTdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMTdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMTgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMTgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMTgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMTg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMTg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMTg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMTg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMTg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMTg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMThBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMThCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMThDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMThEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMThFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMThGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMTkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMTkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMTkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMTkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMTk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMTk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMTk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMTk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMTk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMTk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMTlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMTlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMTlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMTlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMTlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMTlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMUEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMUExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMUEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMUE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMUE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMUE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMUE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMUE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMUFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMUFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMUFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMUFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMUFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMUFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMUIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMUIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMUIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMUIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMUI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMUI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMUI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMUI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMUI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMUI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMUJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMUJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMUJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMUJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMUJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMUMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMUMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMUMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMUM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMUM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMUM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMUM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMUM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMUM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMUNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMUNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMUNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMUNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMUNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMUQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMUQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMUQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMUQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMUQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMUQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMUQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMUQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMURBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMURCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMURDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMUREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMURFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMURGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMUUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMUUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMUUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMUUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMUU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMUU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMUU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMUU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMUU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMUU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMUVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMUVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMUVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMUVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMUVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMUVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMUYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMUYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMUYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMUYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMUY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMUZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMUZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMUZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMUZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMUZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMUZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMjAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMjAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMjAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMjAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMjA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMjA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMjA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMjA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMjA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMjA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMjBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMjBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMjBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMjBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMjEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMjEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMjE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMjE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMjE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMjE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMjE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMjE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMjFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMjFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMjFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMjFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMjFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMjFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMjIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMjIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMjIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMjIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMjI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMjI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMjI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMjI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMjI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMjI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMjJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMjJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMjMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMjMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMjMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMzAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMzAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMzAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMzAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMzA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMzA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMzA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMzA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMzA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMzA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMzBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMzBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMzBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMzBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMzEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMzExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMzEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMzEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMzE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMzE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMzE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMzE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMzE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMzE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMzFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMzFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMzFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMzFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMzFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMzFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMzIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMzIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMzIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMzIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMzI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMzI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMzI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMzI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMzI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMzI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMzJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMzJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMzJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMzJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMzJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMzJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMzMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMzMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMzMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMzMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMzM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMzM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMzM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMzM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMzM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMzM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMzNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMzNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMzNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMzNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMzNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMzNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMzQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMzQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMzQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMzQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMzQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMzQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMzRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMzRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMzRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMzREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMzRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMzRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMzUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMzUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMzUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMzUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMzU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMzU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMzU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMzU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMzU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMzU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMzVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMzVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMzVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMzVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMzVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMzYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMzYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMzY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMzY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMzY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMzY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMzY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMzY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMzZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMzZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMzZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMzZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMzZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMzZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMzcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMzcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMzcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMzczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMzc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMzc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMzc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMzc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMzc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMzc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMzdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMzdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMzdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMzdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMzdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMzdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMzgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMzgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMzgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMzgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMzg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMzg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMzg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMzg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMzg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMzg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMzhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMzhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMzhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMzhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMzhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMzhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMzkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMzkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMzkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMzkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMzk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMzk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMzk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMzk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMzk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMzk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMzlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMzlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMzlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMzlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMzlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMzlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwM0EwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwM0ExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwM0EyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0EzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwM0E0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwM0E1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwM0E2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwM0E3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwM0E4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwM0E5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwM0FBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwM0FCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwM0FDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwM0FEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwM0FFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwM0FGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwM0IwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwM0IxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwM0IyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwM0IzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwM0I0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwM0I1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwM0I2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwM0I3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwM0I4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwM0I5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwM0JBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwM0JCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwM0JDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwM0JEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwM0JFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwM0JGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwM0MwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwM0MxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwM0MyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwM0MzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwM0M0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwM0M1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwM0M2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwM0M3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwM0M4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwM0M5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwM0NBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwM0NCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwM0NDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwM0NEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwM0NFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwM0NGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwM0QwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwM0QxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwM0QyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwM0QzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwM0Q0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwM0Q1MDAwODFCMjAwMDBBRTlGMDA4ODlBQjAwMDAwQUU5RjAwODgzQworOjEwM0Q2MDAwOUFCMDAwMDBBRTlGMDA4ODlBQjAwMDAwQUU5RjAwODgxNQorOjEwM0Q3MDAwOUFCMDAwMDBBRTlGMDA4ODlBQjAwMDAwMDAwMDAwODg1MgorOjEwM0Q4MDAwOUFCMDAxMDBBRTlGNDE0MDgxMzIwMDAwQjI5RjIyNDBCNAorOjEwM0Q5MDAwN0I2RjAwMDAwMDAwMTk0MDgxQjIwMTAwQUU5RjAwNDAxRgorOjEwM0RBMDAwODFCMjAwMDAwMDAwMTk0MTdCQjMwMTAwMDAwMDAwQTRCMworOjEwM0RCMDAwQzRCMzAxMDAwMDAwMDBBMUM2QjMwMTAwMDAwMDJGQTI5RgorOjEwM0RDMDAwQzhCMzAxMDAwODE0MDA0MDQ5OTkwMTAwQTg5RjAwNERBNAorOjEwM0REMDAwOUFDQzAxMDBCQjlGMjY0MDgxMzIwMDAwMDAwMDAwNENCRAorOjEwM0RFMDAwNDlDMTAxMDBCOTlGQTI0MTlCNTAwMDAwQkY5RjgwODA0NAorOjEwM0RGMDAwODAzMjAwMDAwMDAwNTI0OUZEOTMwMTAwMDAwMDAwNEE5QgorOjEwM0UwMDAwRkQ5MzAxMDBDMjlGMDA0MkNEOTMwMDAwMDAwMDUxNEE4MworOjEwM0UxMDAwRkQ5MzAxMDAwMDAwMDA0OUZEOTMwMTAwQzI5RjAwNDM5MworOjEwM0UyMDAwQ0I5MzAwMDAwMDAwNTA0MDgxQjIwMTAwRDI5RjAwNDBCRgorOjEwM0UzMDAwMTk5OTAxMDAwMDAwMDBGMDlBQjAwMTAwMDAwMDAwNDQ1MAorOjEwM0U0MDAwNDlEMTAxMDAwMDAwNDBGMDgwQjIwMTAwMDAwMDQxNEQ2NgorOjEwM0U1MDAwODBCMjAxMDBDQTlGMDA0MDE5OTkwMTAwMDAwMDRDNDA0NworOjEwM0U2MDAwODFCMjAxMDAwMDAwMDA0NDQ5RDEwMTAwMDAwMDAwRjBDRgorOjEwM0U3MDAwOUFCMDAxMDAwMDAwMDA0RDEwQjEwMDAwMDAwMDAwRTIwNworOjEwM0U4MDAwNDlCMTAxMDAwMDAwMDBFMzQzQjEwMTAwMDAwMDAwRTQ3QgorOjEwM0U5MDAwNDVCMTAxMDAwMDAwMDA0MDdCQjMwMTAwMDAwMDQ4NEYyNQorOjEwM0VBMDAwNDBCMTAxMDBEMjlGMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDBDQjgxQzgwMTAwMjI4MzAwNDBCMQorOjEwM0VFMDAwRjI5MzAwMDA1NTgyMDA0MDgxQjIwMDAwNDAwNTAwNDA3RQorOjEwM0VGMDAwODFCMjAwMDAxODA2MDA0MDgxQjIwMDAwMjI4MzAwNDAxOQorOjEwM0YwMDAwODFCMjAwMDBDNjgyMDA0MDgxQjIwMDAwNDM4MTAwNDBCRgorOjEwM0YxMDAwODFCMjAwMDA0MTgxMDA0MDgxQjIwMDAwQjg4MDAwNDBDMQorOjEwM0YyMDAwODFCMjAwMDBGMDg3MDA0MDgxQjIwMDAwMjM4MzAwNDA4RQorOjEwM0YzMDAwODFCMjAwMDAyNzgzMDA0MDgxQjIwMDAwQkY5NDAwNDA5RQorOjEwM0Y0MDAwODFCMjAwMDA5NDk4MDA0MDgxQjIwMDAwN0Y5NDAwNDA0QworOjEwM0Y1MDAwODFCMjAwMDA3Rjk4MDA0MDgxQjIwMDAwOEQ5NTAwNDA0MgorOjEwM0Y2MDAwODFCMjAwMDAxNjk1MDA0MDgxQjIwMDAwMTA5NTAwNDAxQgorOjEwM0Y3MDAwODFCMjAwMDBCMTgyMDA0MDgxQjIwMDAwMjA5OTAwNDA2RgorOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwM0ZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwM0ZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwM0ZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNDAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjA0NDAxMDAwODFCMjAwMDA3OQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMuaWhleCBiL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyNmMyCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc2xpY29zcy9vYXNpc2Rvd25sb2FkLnN5cy5paGV4CkBAIC0wLDAgKzEsNTEyNCBAQAorOjEwMDAwMDAwMDIwMDAwMDAwMDQwMDAwMDAwMDAwMTAwMDAwMDAwMDBBRAorOjEwMDAxMDAwMDA4MDAwMDAxNTAwMDA0MDgxQjIwMDAwMUIwMDAwNDA3RAorOjEwMDAyMDAwODFCMjAwMDAyMTAwMDA0MDgxQjIwMDAwMDMwMDAwNDBDNgorOjEwMDAzMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MEEyNDAzNgorOjEwMDA0MDAwRkQ3RjAwMDAwOTAwQTI0OUREN0QwMDAwMDAwMDAwNEM5QQorOjEwMDA1MDAwODBCMjAxMDAwNzAwMDA0MEQxQjEwMDAwMDAwMDAwNEM1OAorOjEwMDA2MDAwODBCMjAxMDAwOTAwQTI0MDc1N0QwMDAwNjAwMDAwNDBFMAorOjEwMDA3MDAwNjE5OTAxMDAwQjAwQThCMTdFMzEwMDAwMDkwMDAwNDAyOQorOjEwMDA4MDAwODFCMjAwMDAwMDgwOEY5ODE4MzEwMDAwMTAwMDAwOThBNQorOjEwMDA5MDAwODBFNDAxMDAwMDAwNDE5ODgwOTQwMTAwMDAwMDAwNDBDRAorOjEwMDBBMDAwODFCMjAxMDAxMDAwMDA5ODgwRTQwMTAwMEUwMDQwOTgyOQorOjEwMDBCMDAwODA5NDAwMDAxMTAwMDA0MDgxQjIwMDAwMDAwMDAwNDA2OAorOjEwMDBDMDAwQTU5OTAxMDAxOTAwMjk0MDgxMzIwMDAwMTkwMDE0QkNEMworOjEwMDBEMDAwODAzMjAwMDAwRTAwOTNCQzgwMzIwMDAwMDAwMDUwNDBDRgorOjEwMDBFMDAwODFCMjAxMDAwMDgwMDA0MDgxQjIwMDAwMTAwMDAwNDA5OQorOjEwMDBGMDAwQTU5OTAxMDAxRjAwMjk0MDgxMzIwMDAwMUYwMDE0QkM5NworOjEwMDEwMDAwODAzMjAwMDAxMjAwOTNCQzgwMzIwMDAwMDAwMDUwNDA5QQorOjEwMDExMDAwODFCMjAxMDAwMTgwMDA0MDgxQjIwMDAwMjAwMDAwNDA1NworOjEwMDEyMDAwQTU5OTAxMDAyNTAwMjk0MDgxMzIwMDAwMjUwMDE0QkM1QQorOjEwMDEzMDAwODAzMjAwMDAxNDAwOTNCQzgwMzIwMDAwMDAwMDAwNDlBRgorOjEwMDE0MDAwREQ4MTAxMDAxMjAxMDA0MDgxMzIwMTAwMzMwMTAwNDBENQorOjEwMDE1MDAwODEzMjAxMDAyQTAwMTRCQzgwMzIwMDAwRkUwMDEzQkM3MgorOjEwMDE2MDAwODAzMjAwMDA1NDk1MDA0MDQ1OTkwMTAwRkZGRjAwNDA5NworOjEwMDE3MDAwRTU5OTAxMDAwMDAwMkY0MDQ5QjEwMTAwMDAwMDAwNDA1NgorOjEwMDE4MDAwRTFCMTAxMDAwMDAwMDA0MEZEQjMwMTAwMDAwMDAwNDBBQgorOjEwMDE5MDAwRkZCMzAxMDAzMzAwMThFRTgwMzIwMDAwMDAwMDAwNTA3MQorOjEwMDFBMDAwODlCMDAxMDAzMjAwQTI0MTg5NTAwMDAwOTkwMDAwNDA0RQorOjEwMDFCMDAwODEzMjAxMDAzMDk0MDA0MDQzOTkwMTAwMDAwMDAwRjhCMgorOjEwMDFDMDAwMjBCMTAxMDAwMDAwMDBGQUUwQjMwMTAwMzkwMDk4RUUxMAorOjEwMDFEMDAwODAzMjAwMDAwMDAwMDBGQjgwQjAwMTAwM0IwMDgwRjM5MworOjEwMDFFMDAwREUzMzAwMDAwMDAwMDA0N0ZEOTMwMTAwM0UwMDgzRjM3MgorOjEwMDFGMDAwODAzMjAwMDBGMDAwMDBGMzgwODgwMTAwMDE4MDAwNDBBMAorOjEwMDIwMDAwMkVERDAxMDAwMDk0MDA0MDQzOTkwMTAwMDAwMDAwNDZFQgorOjEwMDIxMDAwNDNDMTAxMDAwMDAwMDBGQTI0QjEwMTAwN0MwMDE4RUU4NworOjEwMDIyMDAwODAzMjAwMDA0NTAwOTVFODgwMzIwMDAwRkZGRjAwRThDMgorOjEwMDIzMDAwODA4ODAxMDA3QzAwMjY0MDgxMzIwMDAwMDAwMDAwNDBFMAorOjEwMDI0MDAwRDU5OTAxMDAwMDAwMDBGMkVDQjMwMTAwMDAwMDAwRjhCNQorOjEwMDI1MDAwRDZCMTAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMDAwRjA2RgorOjEwMDI2MDAwRDZCMTAxMDBGRjAwMDBGOEVFOEIwMTAwMDgwMTAwNDA0QworOjEwMDI3MDAwRDU5OTAxMDBGRjAwMDBGMDgwOEMwMTAwMDAwMDAwRjcxQworOjEwMDI4MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwRkYwMDAwRjg5OQorOjEwMDI5MDAwODA4ODAxMDAzQzAwMDA0MEQ1OTkwMTAwRkYwMDAwRjA3QgorOjEwMDJBMDAwRDY4RDAxMDBGRkZGMDBGMEYwREIwMTAwMDAwMDAwNDhFOAorOjEwMDJCMDAwODFFMDAxMDAwMDAwMDBGODgxOTQwMTAwM0MwMTAwNDA1MQorOjEwMDJDMDAwRDU5OTAxMDAwMDAwMDA0MEQ2QjEwMTAwRkYwMDAwRjgwMAorOjEwMDJEMDAwODA4ODAxMDAwMDAwMDA0ODgxRTAwMTAwMDAwMDAwRjg3MworOjEwMDJFMDAwODE5NDAxMDAzQzAyMDA0MEQ1OTkwMTAwMDAwMDAwNDBDQgorOjEwMDJGMDAwRDZCMTAxMDAyQzAwMDA0MEQ1OTkwMTAwMDAwMDAwRjhBMworOjEwMDMwMDAwRDZCMTAxMDAxRTAwMDBGMDgyRjQwMTAwRkYzRjAwRjhBQQorOjEwMDMxMDAwODBEODAxMDA2NDAwMjY0MDgxMzIwMDAwMDAwMDAwNDFDNgorOjEwMDMyMDAwODFEMDAxMDBGRkZGMDA0MDgwRDgwMTAwMDAwMDAwNDFBMworOjEwMDMzMDAwODA5NDAxMDAwMDAwMDA0MEQ4QjEwMTAwNjgwMDIyRkE1QQorOjEwMDM0MDAwODAzMDAwMDAwMDAwMDA0QzgxRTAwMTAwMDEwMDAwNDAwRQorOjEwMDM1MDAwODBDQzAxMDAwMDAwMDA0MERFQjEwMTAwMDAwMTAwNDAzRgorOjEwMDM2MDAwRDU5OTAxMDAxMDAwMDBGQTgwRTQwMTAwMDAwMDAwRjZCOQorOjEwMDM3MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwMDAwMjAwNDA1RAorOjEwMDM4MDAwRDU5OTAxMDAxMDAwMDBGQTgwRTQwMTAwMDAwMDAwRjY5OQorOjEwMDM5MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwMDYwMDAwNDAzOQorOjEwMDNBMDAwRDU5OTAxMDAxMDAwMDBGQkQ2RTUwMTAwMDcwMDAwNDBEMAorOjEwMDNCMDAwRDU5OTAxMDAxODAwMDBGQkQ2RTUwMTAwNDgwMDAwNDA3NworOjEwMDNDMDAwRDU5OTAxMDAxMDAwMDBGQUQ2RTUwMTAwNTAwMDAwNDA2OAorOjEwMDNEMDAwRDU5OTAxMDAxMDAwMDBGQkQ2RTUwMTAwMDMwMDAwRkJFOQorOjEwMDNFMDAwN0E4OTAxMDAwMDAwMDBGMERDQjEwMTAwN0MwMDAwNENDMworOjEwMDNGMDAwREQ5MTAwMDA3QzAwOTVFODg0MzAwMDAwMDAwMDJGRTlDQQorOjEwMDQwMDAwRkFCMzAxMDAwMDAwMDA0MEQxQjEwMTAwRkYwMDAwNDIzQQorOjEwMDQxMDAwODA4ODAxMDAzNDAwMDA0MDgwQ0UwMTAwN0MwMEE2NDBBRQorOjEwMDQyMDAwODEzMjAwMDA4NTAwMDA0MDgxMzIwMTAwMDI4MDIyNDBCQworOjEwMDQzMDAwODAzMjAwMDA3QzAwMDA0MDgxQjIwMDAwMDAwMDAwNEZDQworOjEwMDQ0MDAwODFCMDAxMDA4RTAwMDlGOTgxMzIwMDAwOEMwMDA4RjlBQQorOjEwMDQ1MDAwODEzMjAwMDA5ODAwMUZGREY5MzMwMDAwOEIwMDlFRkRFMworOjEwMDQ2MDAwODEzMjAwMDAwMDAwMDA0QUYzOTMwMTAwMDAwMDgwNDg0MAorOjEwMDQ3MDAwRjM5MzAxMDAwMDAwMDBGREY3QjMwMTAwMDAwMDgwNDk4NAorOjEwMDQ4MDAwRjM5MzAxMDAwMDAwMDBGQzE5QjEwMTAwOTMwMDBBRjk4OAorOjEwMDQ5MDAwODEzMjAwMDAwMDAwNDBGQjgxQjIwMTAwMDAwMDQxRkRGQworOjEwMDRBMDAwODFCMjAxMDAwMDA3ODBGOUYzOEYwMTAwMDAwNzQyRjlEMworOjEwMDRCMDAwRjM4RjAxMDA5NzAwQTJGRkY3NkYwMDAwMDAwMDQzNDA5OAorOjEwMDRDMDAwODFCMjAxMDAwMDAwQTJGRkZCRUYwMDAwMDAwMDgwRkNGMQorOjEwMDREMDAwRTFCMTAxMDAwMDAwODA0MDgxQjAwMTAwMDA5NDAwNDBDMworOjEwMDRFMDAwNDc5OTAxMDBCQjAwMDA0MDgxMzIwMTAwMDAwMEEyNDY5NAorOjEwMDRGMDAwRkQ3RjAxMDAwMDk0MDA0MDQ3OTkwMTAwQ0UwMDAwNDBCQworOjEwMDUwMDAwODEzMjAxMDAwMDAwQTI0NEZEN0YwMTAwMDA5NDAwNDAwMAorOjEwMDUxMDAwNDU5OTAxMDAwMDAwMDA0MEYxQjEwMTAwRkY3RjAwNDA1QgorOjEwMDUyMDAwRjU5OTAxMDBGRjdGMDA0MEY1OTkwMTAwOUExMzAwNDAwMgorOjEwMDUzMDAwRjU5OTAxMDAwNzAwMDA0MEY1OTkwMTAwMDEwMDAwNDAxNQorOjEwMDU0MDAwRjU5OTAxMDAwMDAyMDA0MEY1OTkwMTAwMDIwMDAwNDAwOQorOjEwMDU1MDAwRjU5OTAxMDAwMDAyMDA0MEY1OTkwMTAwMDMwMTAwNDBGNworOjEwMDU2MDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwOUExMzAwNDA0MAorOjEwMDU3MDAwRjU5OTAxMDAwQjAwMDA0MEY1OTkwMTAwODAwMDAwNDA1MgorOjEwMDU4MDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDAwMDAwNDBDRAorOjEwMDU5MDAwRjU5OTAxMDAwNzAwMDA0MEY1OTkwMTAwMDgwMDAwNDBBRQorOjEwMDVBMDAwRjU5OTAxMDBCMDAyMDA0MEY1OTkwMTAwMDAwMDAwNDBGQgorOjEwMDVCMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDIyOTAwNDA3MgorOjEwMDVDMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDA2NzAwNDAyNgorOjEwMDVEMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwODAwMDAwNDBGRAorOjEwMDVFMDAwRjU5OTAxMDAwMDAwODA0MEY1OTkwMTAwMDAwMDAwNDVFOAorOjEwMDVGMDAwRkQ4MzAxMDAwMDAwMDA0NkZEODMwMTAwRkY3RjAwNDBGNQorOjEwMDYwMDAwMjU5OTAxMDBDNDAwMDA0MDgxMzIwMTAwMDAwMEEyNDQ4RAorOjEwMDYxMDAwODBCMjAwMDAwMDAwMDA0NUZEOTMwMTAwRTIwMDAwNDBCMAorOjEwMDYyMDAwODMzMDAxMDAwMDAwQTI0NTgwMzIwMTAwMDAwMDgwNDZCNgorOjEwMDYzMDAwRkQ5MzAxMDAwMDEwMDA0MDgzOTgwMTAwREQwMDAwNDBBMAorOjEwMDY0MDAwMkIzMTAxMDAwMDAwQTI0Njg4QjAwMDAwMDAwMDAwNDFFQworOjEwMDY1MDAwODlCMDAxMDAwMDAwMDA5NDhDQjAwMTAwRkZGRjAwNDY0QgorOjEwMDY2MDAwODA4ODAxMDBBNUE1QTI0MDgwQ0UwMDAwMDAwMDAwNDhCRgorOjEwMDY3MDAwOERGMDAxMDBDOTAwODI0MTg5NDAwMDAwMDAwMDgwNDBFNworOjEwMDY4MDAwODlCMDAxMDAwMDAwMDA0NEZEODMwMTAwRDQwMDAwNDA1NworOjEwMDY5MDAwODEzMjAxMDAwMDAwQTI0NDgwQjIwMDAwRTIwMDAwMDhBNAorOjEwMDZBMDAwODMzMDAxMDAwMDAwQTI0NTgwMzIwMTAwMDAwMDgwNDQzOAorOjEwMDZCMDAwRkQ5MzAxMDAwMDMwMDAwODgzOTgwMTAwODAwMDAwNDA5NQorOjEwMDZDMDAwMkI5OTAxMDBEQjAwMDA0MDg5MzAwMTAwMDAwMEEyNDZBOAorOjEwMDZEMDAwODBCMjAwMDBGRkZGMDA5NDgwODgwMTAwQTVBNUEyNDAyMQorOjEwMDZFMDAwODA0RTAxMDAwMDAwODA0Mzg5QjAwMTAwMDM4NDAwNDE3NgorOjEwMDZGMDAwMkM5OTAxMDBERTAwMDA0MDgxQjIwMDAwMDM4ODAwNDExNworOjEwMDcwMDAwMkM5OTAxMDAwMDAwMDAyMDhEQjAwMTAwMDAwMDlGOTY5MAorOjEwMDcxMDAwODBCMjAwMDBERjAwQTI0MThENTAwMDAwMDAwMDgwNDA0OAorOjEwMDcyMDAwODFCMjAxMDBGRjdGMDA0MDI1OTkwMTAwMDAwMDAwNENDQworOjEwMDczMDAwODlFMDAxMDBERDAwMDA0NDgyMTQwMTAwMDAwMDkwOTQ3MworOjEwMDc0MDAwOEFCMDAwMDAwMDAwMDA0NUYwQjEwMTAwMTAwMDAwNDUzMworOjEwMDc1MDAwODhGNDAxMDAwMDAwMDA0NDg5RDAwMTAwREQwMDAwNDQ1RAorOjEwMDc2MDAwMkI0MTAxMDBFQzAwMDg0MTgwMzIwMDAwRUQwMDAwOTRCNAorOjEwMDc3MDAwMjRCMTAwMDAxMDAwMDA5NDI0RjUwMTAwMDAwMDAwOTQ1MgorOjEwMDc4MDAwRjBCMTAxMDBGMjAwQTA0NDg5NTAwMDAwREQwMDAwNDRGNworOjEwMDc5MDAwMkI0MTAxMDAwMDAwMDA5NEYwQjEwMTAwRUYwMDIwNDQ2MworOjEwMDdBMDAwODk1MDAwMDAxMDAwMDA0NTg4RjQwMTAwMDAwMDAwRkFBNAorOjEwMDdCMDAwOEFCMDAxMDAwMDAwQTM0Mjg5RDAwMDAwRjcwMEEwRkEyRgorOjEwMDdDMDAwOEE0MDAwMDAwMDAwMDA0MThCQzAwMTAwRjUwMEEzNDJGOAorOjEwMDdEMDAwODk1MDAwMDBGRkZGMDA0NTg4ODgwMTAwMTAwMDAwNDU5NworOjEwMDdFMDAwOEFGNDAxMDBGQzAwOTA0NDhBNDAwMDAwMDAwMDAwNDFBRgorOjEwMDdGMDAwOEJDMDAxMDBGRkZGMDA0NThBQTgwMTAwMDAwMDgwNTA2NworOjEwMDgwMDAwOEJFMDAxMDBGRjdGMDA0MDI1OTkwMTAwN0MwMDAwNDA0MworOjEwMDgxMDAwMkI5OTAxMDAwMDMwMDA0MDgzOTgwMTAwREQwMDAwMDhBMgorOjEwMDgyMDAwODMxNDAxMDAwMDAwMDA5NDJBQjEwMTAwMDA4MDAwNDAwMAorOjEwMDgzMDAwRjk5QjAxMDBERDAwMDBGQzE5MzEwMTAwMDAwMDQwOTQyQgorOjEwMDg0MDAwODBCMjAxMDBERDAwMDA0NDJCNDEwMTAwMDAwMDQxOTQxMgorOjEwMDg1MDAwODBCMjAxMDAwMDAwMDA0MUY5QzMwMTAwMDAwMDAwNDQyMworOjEwMDg2MDAwMkJDMTAxMDAwNDAxOUY5NDgwMzIwMDAwMDI4MDAwNDBFRgorOjEwMDg3MDAwODFCMjAwMDAxMDAxMDA1MTkzQjAwMDAwMTAwMTAwNEQ0MgorOjEwMDg4MDAwOTNCMDAwMDAxMDAxMDA0OTkzQjAwMDAwMDAwMDAwNDI0NgorOjEwMDg5MDAwOTNCMDAxMDAxMDAxQTI0MTkzNTAwMDAwMDAwMDgwNDA3RAorOjEwMDhBMDAwODFCMjAxMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDExNDAzRgorOjEwMDhCMDAwODFCMjAxMDAwMDAwMTI0MDgxQjIwMTAwMDAwMDEzNDAyQgorOjEwMDhDMDAwODFCMjAxMDAwMDAwMTQ0MDgxQjIwMTAwMDAwMDE1NDAxNworOjEwMDhEMDAwODFCMjAxMDAwMDAwMTY0MDgxQjIwMTAwMDAwMDE3NDAwMworOjEwMDhFMDAwODFCMjAxMDAwMDAwMTg0MDgxQjIwMTAwMDAwMDE5NDBFRgorOjEwMDhGMDAwODFCMjAxMDAwMDAwMUE0MDgxQjIwMTAwMDAwMDFCNDBEQgorOjEwMDkwMDAwODFCMjAxMDAwMDAwMUM0MDgxQjIwMTAwMDAwMDFENDBDNgorOjEwMDkxMDAwODFCMjAxMDAwMDAwMUU0MDgxQjIwMTAwMDAwMDFGNDBCMgorOjEwMDkyMDAwODFCMjAxMDAwMDAwNzA0MDgxQjIwMTAwMDAwMDcxNDBGRQorOjEwMDkzMDAwODFCMjAxMDAwMDAwNzI0MDgxQjIwMTAwMDAwMDczNDBFQQorOjEwMDk0MDAwODFCMjAxMDAwMDAwNzQ0MDgxQjIwMTAwMDAwMDc1NDBENgorOjEwMDk1MDAwODFCMjAxMDAwMDAwNzY0MDgxQjIwMTAwMDAwMDc3NDBDMgorOjEwMDk2MDAwODFCMjAxMDAwMDAwNzg0MDgxQjIwMTAwMDAwMDc5NDBBRQorOjEwMDk3MDAwODFCMjAxMDAwMDAwN0E0MDgxQjIwMTAwMDAwMDdCNDA5QQorOjEwMDk4MDAwODFCMjAxMDAwMDAwN0M0MDgxQjIwMTAwMDAwMDdENDA4NgorOjEwMDk5MDAwODFCMjAxMDAwMDAwN0U0MDgxQjIwMTAwMDAwMDdGNDA3MgorOjEwMDlBMDAwODFCMjAxMDAwMDAwODA0MDgxQjIwMTAwMDAwNDAwNDBEQgorOjEwMDlCMDAwQTE5OTAxMDAwMDAwMDA1MEExRDEwMTAwMDAwMDAwNDBGOQorOjEwMDlDMDAwMUJCMDAxMDAwMDAwMDA0MDE5QjAwMTAwMDAwMDAwNDAxMQorOjEwMDlEMDAwMTdCMDAxMDAwMDAwMDA0MDE1QjAwMTAwMDAwMDAwNDAwOQorOjEwMDlFMDAwMTNCMDAxMDAwMDAwMDA0MDExQjAwMTAwMDAwMDAwNDAwMQorOjEwMDlGMDAwMEZCMDAxMDAwMDAwMDA0MDBEQjAwMTAwMDAwMDAwNDBGOQorOjEwMEEwMDAwMEJCMDAxMDAwMDAwMDA0MDA5QjAwMTAwMDAwMDAwNDBGMAorOjEwMEExMDAwMDdCMDAxMDAwMDAwMDA0MDA1QjAwMTAwMDAwMDAwNDBFOAorOjEwMEEyMDAwMDNCMDAxMDAwMDAwMDA0MDAxQjAwMTAwM0IwMTIwNDg3QworOjEwMEEzMDAwQTE1MTAwMDAwMDAwODA0MDgxQjIwMTAwNDcwMTIyNEIxQgorOjEwMEE0MDAwNzQ3RDAwMDAwMDAwODA0MDgxQjIwMTAwNjAwMDAwNEIxNgorOjEwMEE1MDAwNjA5OTAxMDAwMDAwMDBCMTdFQjEwMTAwNDgwMUE4NDA4QQorOjEwMEE2MDAwODEzMjAwMDA0NTAxMDA0MDgxQjIwMDAwMDUwMDgwNDA1NQorOjEwMEE3MDAwOTc5ODAxMDAxODAwMDBBQTk2ODgwMTAwMDAwMDgwNDNBMgorOjEwMEE4MDAwOTdGMDAxMDAwNzAwMDBBQTk2ODgwMTAwMDAwMDgwNDA0RQorOjEwMEE5MDAwODFCMjAxMDAwMDAwMDA1ODA3OTAwMTAwRDg5RjAwNDA3QgorOjEwMEFBMDAwODFCMjAwMDAwMDAwMDA0NEE1QjMwMTAwRDgwMjAwNDA1QworOjEwMEFCMDAwODEzMjAxMDBGODAyMDA0MDgxMzIwMTAwMDAwMDAwNUMzOAorOjEwMEFDMDAwMDc5MDAxMDBEODlGMDA0MEJGQjMwMDAwNUEwMTIyQ0MxQworOjEwMEFEMDAwODU3RjAwMDAwMDAwMDA1MTA3OTAwMTAwRDg5RjAwNDA3MgorOjEwMEFFMDAwODFCMjAwMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0IxQworOjEwMEFGMDAwQTNDOTAxMDBEMDE0MDA0MEExOUIwMTAwMDAwMDAwMjAwOAorOjEwMEIwMDAwNDZCMTAxMDAwMDAwMDA0OEYxQjEwMTAwMDAwMDAwRDAzMgorOjEwMEIxMDAwRjFCMTAxMDAwMDAwMDBDQUYxQjEwMTAwMDAwMDAwRDVGMAorOjEwMEIyMDAwRTFCMTAxMDAwNzAwMDA0MDYxOTkwMTAwMjAwMDAwMjBCMAorOjEwMEIzMDAwNjJERDAxMDA2MzAxQTg0MDgxMzIwMDAwMDAwMDAwQ0NBQQorOjEwMEI0MDAwODU5MzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDAwNDA3QQorOjEwMEI1MDAwNDM5OTAxMDAwMDAwMDBGQUJBQjMwMTAwMDAwMDAwRkE1NgorOjEwMEI2MDAwQTRCMzAxMDAwMDAwMDBGOEJDQjMwMTAwMDAxNDJGNDA0MgorOjEwMEI3MDAwODFCMDAxMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDgyOQorOjEwMEI4MDAwQTlCMzAxMDBGRjAwMDBERDgxODgwMTAwMDIwMDAwNDBFMAorOjEwMEI5MDAwODBGNDAxMDA3MzAxMDA0MDgwQzgwMTAwODYwMTAwREQ3RgorOjEwMEJBMDAwODEzMjAwMDAwMDAwMDA0MDEwQjEwMDAwODcwMTAwNDBDOQorOjEwMEJCMDAwODFCMjAwMDA4ODAxMDA0MDgxQjIwMDAwODkwMTAwNDAzQworOjEwMEJDMDAwODFCMjAwMDA4QTAxMDA0MDgxQjIwMDAwOEIwMTAwNDAyOAorOjEwMEJEMDAwODFCMjAwMDA4RDAxMDA0MDgxQjIwMDAwOEYwMTAwNDAxMQorOjEwMEJFMDAwODFCMjAwMDA1MDAxMDA0MDgxQjIwMDAwQjYwMTAwNDAxNworOjEwMEJGMDAwODFCMjAwMDA1MDAxMDA0MDgxQjIwMDAwQzQwMTAwNDBGOQorOjEwMEMwMDAwODFCMjAwMDBDNTAxMDA0MDgxQjIwMDAwODIwMjAwNDBCNAorOjEwMEMxMDAwODFCMjAwMDA4MzAyMDA0MDgxQjIyODAwQjgwMjAwNDA4NworOjEwMEMyMDAwODFCMjI4MDBENDlGMDA0MDgxQjIyODAwRDU5RjAwNDBBNworOjEwMEMzMDAwODFCMjI4MDBENjlGMDA0MDgxQjIyODAwRDc5RjAwNDA5MworOjEwMEM0MDAwODFCMjI4MDA3MjAxMDA0MTgxQzAyODAwNTUwMTUxNDkzQworOjEwMEM1MDAwRkQ5MzI4MDA1NTAxNTI0QUZEOTMyQTAwNTUwMTU1NDkzQworOjEwMEM2MDAwRkQ4MzJBMDA1NTAxNTY0QUZEODMyQTAwNTAwMTkxODFENworOjEwMEM3MDAwODAzMDJBMDA1NTAxNDU0MDgxQjIyQTAwNTAwMTkxODJGRQorOjEwMEM4MDAwODAzMDJBMDA1NTAxNDY0MDgxQjIyQTAwMDAwMDAwNDAxMQorOjEwMEM5MDAwODlCMDJCMDAwMDAwMkY0MDgxQjAwMTAwMDAxNDAwNDBGQgorOjEwMENBMDAwNDk5OTAxMDBCMzAxMjJERUUxNkQwMDAwMDAwMDAwNEMxMworOjEwMENCMDAwNDlDMTAxMDAwMDAwMDA0MTgxQzAwMTAwOTIwMUEyNDQyRAorOjEwMENDMDAwODE2QzAwMDAwMDAwMDA0QzQ5RDEwMTAwOUEwMTIyNDBEMworOjEwMENEMDAwRTE2RDAwMDA5NjAxQTI0MTgxNTAwMDAwNTAwMTAwNDFFOQorOjEwMENFMDAwQkZCMzAwMDAwMDAwMDA0MkJGQjMwMTAwNTAwMUEwMEZERAorOjEwMENGMDAwQkQ2RjAwMDAwMDAwMDBERUUxQjEwMTAwMDAwMDAwNDQxMworOjEwMEQwMDAwNDlDMTAxMDBCNTAxMDA0MDE5OTkwMTAwMDAwMDQyNDBBRAorOjEwMEQxMDAwODFCMjAxMDAwMDAwNDNGRjg1QjAwMTAwMDAwMDAwREU0OQorOjEwMEQyMDAwMTlCMTAxMDAwMDAwNDJGRjg3QjAwMTAwMDAwMDQzRkYzRAorOjEwMEQzMDAwRTFCMTAxMDAwMDAwMDA0NDQ5QzEwMTAwMDAwMDJGRkZBMworOjEwMEQ0MDAwRTFCMTAxMDAwODE0MDBBNDgwQ0MwMTAwQUEwMTI2NDBGMgorOjEwMEQ1MDAwODEzMjAwMDAwMDAwMDA0MTg1QzAwMTAwQTgwMUEyNENDMgorOjEwMEQ2MDAwODE1MDAwMDBCNDAxMjJEMjgxMzIwMDAwQUYwMTIyNDE0MworOjEwMEQ3MDAwQTU2RjAwMDA1MDAxQTJFMDgxMzIwMDAwMDAwMDAwRDIwNworOjEwMEQ4MDAwQzFCMzAxMDAwMDAwMDA1Qzg5OTAwMTAwMDAwMDQwNDJGNgorOjEwMEQ5MDAwODBCMjAxMDAwMDAwNDE0MzgwQjIwMTAwMDAwMDAwRjA3OQorOjEwMERBMDAwODg5NDAxMDA1NTAxMDA0NEUwQjEwMDAwQjEwMTAwNDgwMQorOjEwMERCMDAwNDlDMTAwMDBBRjAxMDA1Qjg5OTAwMDAwQTg5RjAwQTAxRQorOjEwMERDMDAwOUVCMDAwMDAwMDAwMDA0MDgzQjAwMTAwMDAxNDAwNDAwRAorOjEwMEREMDAwNDk5OTAxMDAwMDAwMjM0MDgxQjAwMTAwQkUwMTIyREVEQworOjEwMERFMDAwRTE2RDAwMDAwMDAwMDA0QzQ5QzEwMTAwMDAwMDAwNDExRAorOjEwMERGMDAwODFDMDAxMDBCOTAxQTI0NDgxNkMwMDAwNTAwMTAwNDM5MAorOjEwMEUwMDAwQkZCMzAwMDAwMDAwMDBGODE4QjEwMTAwMDAwMDQwRjg3NgorOjEwMEUxMDAwODBCMjAxMDAwMDAwNDFGMDgwQjIwMTAwMDAwMDAwNDBGQgorOjEwMEUyMDAwRjFCMTAxMDAwMDAwMDA0MEYxQjEwMTAwNTUwMTAwNDBBNgorOjEwMEUzMDAwRTFCMTAwMDBDNjAxMDA0MDkxQjAwMDAwMDAwMDAwNDE5NworOjEwMEU0MDAwOTFCMDAxMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDBDRQorOjEwMEU1MDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwQ0IwMTAwNDBFQworOjEwMEU2MDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwRDEwMTAwNDAyNgorOjEwMEU3MDAwODFCMDAwMDA1MzAxMDBERUExQjMwMDAwRTMwMTAwNDA5NworOjEwMEU4MDAwODFCMjAwMDBFNTAxMDA0MDgxQjAwMDAwRUIwMTAwNDBBQworOjEwMEU5MDAwODFCMjAwMDA1MjAxMDBERkUxQjEwMDAwMDAwMDAwRDA4QgorOjEwMEVBMDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDIwMDAwRDJDRgorOjEwMEVCMDAwQTVFNzAxMDAwMDAwMDBEMkMxQjMwMTAwMDAwMDAwMDA1RQorOjEwMEVDMDAwRjBCMTAxMDBEQjAxMjI0NEMxNTMwMDAwREEwMTg0NDE4QQorOjEwMEVEMDAwODE0MDAwMDBERTAxMDA0MDgxMzIwMTAwMDAwMDAwRDBBRQorOjEwMEVFMDAwNDVCMTAxMDBENTAxMDA0MUExQzEwMDAwREEwMjAwNDA3NgorOjEwMEVGMDAwODEzMjAxMDBGODAyMDA0MDgxMzIwMTAwNTUwMTAwREQxRAorOjEwMEYwMDAwQTFCMTAwMDAwMDAwMDA0MDgxQjAwMTAwNDAwMDAwNDA5RAorOjEwMEYxMDAwQTU5QjAxMDBEQTAyMDA0MDgxMzIwMTAwNDAwMDAwRDNBRAorOjEwMEYyMDAwQTdDQjAxMDBGODAyMDBFMEE1QjMwMDAwMDMwMDAwNDBEOQorOjEwMEYzMDAwQTM5QjAxMDA1MzAxMDBERUExQjMwMDAwMDAwMDAwNDRBOAorOjEwMEY0MDAwQkZCMzAxMDAwMDAwMDBERTgxOTAwMTAwNTAwMUEyQkE5MQorOjEwMEY1MDAwODAwNDAwMDA2MDAwMDBERTYxOTkwMTAwRTgwMUE4QjE5MgorOjEwMEY2MDAwODAzMDAwMDA1MjAxMDA0MEUwQjEwMDAwMDAwMDAwRDBERAorOjEwMEY3MDAwQkFCMzAxMDA2QjAyMDA0MDgxOTgwMTAwNjAwMjAwNEQ4RAorOjEwMEY4MDAwODMzMDAxMDAwMDAwMDA0NEUxQjMwMTAwMDAwMDAwNDQ5MAorOjEwMEY5MDAwRTNCMzAxMDAwMDAwMDA0NEU1QjMwMTAwMDAwMDAwNDQ5OQorOjEwMEZBMDAwRTlCMzAxMDAwMDAwMDA0NEVCQjMwMTAwMDAwMDAwNDQ3RAorOjEwMEZCMDAwRjVCMzAxMDAwMDAwMDA0NEY3QjMwMTAwMDAwMDAwNDQ1NQorOjEwMEZDMDAwRjlCMzAxMDBGOTAxMjI0MDhGNkYwMDAwNzgwMjAwNDA2MAorOjEwMEZEMDAwODE5ODAxMDA2MDAyMDBDNzgzMzAwMTAwODAwMjAwNDA1OAorOjEwMEZFMDAwODE5ODAxMDA2MDAyMDA0MjgzMzAwMTAwMDAwMDAwRThBNworOjEwMEZGMDAwRjFCMTAxMDAwMDAwMDBFOUYxQjEwMTAwMDAwMDAwRUFEOAorOjEwMTAwMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwODUyQQorOjEwMTAxMDAwRjBCMTAxMDAwMDAwMDBFQ0YxQjEwMTAwMDAwMDAwRURCMgorOjEwMTAyMDAwRjFCMTAxMDAwMDAwMDBCMkYwQjEwMTAwMDAwMDAwQTkyMAorOjEwMTAzMDAwRjBCMTAxMDAwMDAwMDBBQ0YwQjEwMTAwMDAwMDAwQUIxNQorOjEwMTA0MDAwRjBCMTAxMDAwMDAwMDBCOEYwQjEwMTAwMDAwMDAwQjlFQgorOjEwMTA1MDAwRjBCMTAxMDAwMDAwMDBCQUYwQjEwMTAwMDAwMDAwQkJENworOjEwMTA2MDAwRjBCMTAxMDAwQzAyQjg0MDgxMzAwMDAwMDAwMDAwNDBFNworOjEwMTA3MDAwODE5MDAxMDAwRTAyQjk0MDgxMzIwMDAwMDAwMDAwNDE2MQorOjEwMTA4MDAwODE5MDAxMDAxMDAyQkE0MDgxMzIwMDAwMDAwMDAwNDI0RAorOjEwMTA5MDAwODE5MDAxMDAxMjAyQkI0MDgxMzIwMDAwMDAwMDAwNDMzOQorOjEwMTBBMDAwODE5MDAxMDAxNDAyQkM0MDgxMzIwMDAwMDAwMDAwNDQyNQorOjEwMTBCMDAwODE5MDAxMDAxNjAyQkQ0MDgxMzIwMDAwMDAwMDAwNDUxMQorOjEwMTBDMDAwODE5MDAxMDAxODAyQkU0MDgxMzIwMDAwMDAwMDAwNDZGRAorOjEwMTBEMDAwODE5MDAxMDAxQTAyQkY0MDgxMzIwMDAwMDAwMDAwNDdFOQorOjEwMTBFMDAwODE5MDAxMDAxQzAyQzg0MDgxMzIwMDAwMDAwMDAwNDhDRAorOjEwMTBGMDAwODE5MDAxMDAxRTAyQzk0MDgxMzIwMDAwMDAwMDAwNDlCOQorOjEwMTEwMDAwODE5MDAxMDAyMDAyQ0E0MDgxMzIwMDAwMDAwMDAwNEFBNAorOjEwMTExMDAwODE5MDAxMDAyMjAyQ0I0MDgxMzIwMDAwMDAwMDAwNEI5MAorOjEwMTEyMDAwODE5MDAxMDAyNDAyQ0M0MDgxMzIwMDAwMDAwMDAwNEM3QworOjEwMTEzMDAwODE5MDAxMDAyNjAyQ0Q0MDgxMzIwMDAwMDAwMDAwNEQ2OAorOjEwMTE0MDAwODE5MDAxMDAyODAyQ0U0MDgxMzIwMDAwMDAwMDAwNEU1NAorOjEwMTE1MDAwODE5MDAxMDAyQTAyQ0Y0MDgxMzIwMDAwMDAwMDAwNEY0MAorOjEwMTE2MDAwODE5MDAxMDAyQzAyRjA0MDgxMzIwMDAwMDAwMDAwNTAwQworOjEwMTE3MDAwODE5MDAxMDAyRTAyRjE0MDgxMzIwMDAwMDAwMDAwNTFGOAorOjEwMTE4MDAwODE5MDAxMDAzMDAyRjI0MDgxMzIwMDAwMDAwMDAwNTJFNAorOjEwMTE5MDAwODE5MDAxMDAzMjAyRjM0MDgxMzIwMDAwMDAwMDAwNTNEMAorOjEwMTFBMDAwODE5MDAxMDAzNDAyRjQ0MDgxMzIwMDAwMDAwMDAwNTRCQworOjEwMTFCMDAwODE5MDAxMDAzNjAyRjU0MDgxMzIwMDAwMDAwMDAwNTVBOAorOjEwMTFDMDAwODE5MDAxMDAzODAyRjY0MDgxMzIwMDAwMDAwMDAwNTY5NAorOjEwMTFEMDAwODE5MDAxMDAzQTAyRjc0MDgxMzIwMDAwMDAwMDAwNTc4MAorOjEwMTFFMDAwODE5MDAxMDAzQzAyRjg0MDgxMzIwMDAwMDAwMDAwNTg2QworOjEwMTFGMDAwODE5MDAxMDAzRTAyRjk0MDgxMzIwMDAwMDAwMDAwNTk1OAorOjEwMTIwMDAwODE5MDAxMDA0MDAyRkE0MDgxMzIwMDAwMDAwMDAwNUE0MworOjEwMTIxMDAwODE5MDAxMDA0MjAyRkI0MDgxMzIwMDAwMDAwMDAwNUIyRgorOjEwMTIyMDAwODE5MDAxMDA0NDAyRkM0MDgxMzIwMDAwMDAwMDAwNUMxQgorOjEwMTIzMDAwODE5MDAxMDA0NjAyRkQ0MDgxMzIwMDAwMDAwMDAwNUQwNworOjEwMTI0MDAwODE5MDAxMDA0ODAyRkU0MDgxMzIwMDAwMDAwMDAwNUVGMworOjEwMTI1MDAwODE5MDAxMDA0QTAyRkY0MDgxMzIwMDAwMDAwMDAwNUZERgorOjEwMTI2MDAwODE5MDAxMDAwMDAwMDA0MEYwQjEwMTAwNDAwMDAwNDAwQQorOjEwMTI3MDAwQTU5QjAxMDBEODAyMDA0MDgxMzIwMTAwRjgwMjAwNDAyNQorOjEwMTI4MDAwODEzMjAxMDBEMDE0MkUwNkE1QjMwMTAwNDAwMDAwRDMyNgorOjEwMTI5MDAwQTdDQjAxMDAwMDAwMDBGMEYxQjEwMTAwMDAwMDAwRjE1NworOjEwMTJBMDAwRjFCMTAxMDAwMDAwMDBGMkYxQjEwMTAwMDAwMDAwRjQxMgorOjEwMTJCMDAwRjFCMTAxMDAwMDAwMDBGNUYxQjEwMTAwMDAwMDAwRkFGOQorOjEwMTJDMDAwRjFCMTAxMDAwMDAwMDBGQkYxQjEwMTAwMDAwMDAwRkNFMQorOjEwMTJEMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwRUVFRgorOjEwMTJFMDAwRjFCMTAxMDAwMDAwMDBFRkYxQjEwMTAwMDAwMDAwRjNENgorOjEwMTJGMDAwRjFCMTAxMDAwMDAwMDBGNkYxQjEwMTAwMDAwMDAwRkRCNQorOjEwMTMwMDAwRjFCMTAxMDBEQjAxMDBDN0UxQjEwMDAwMDAwMDgwNDA0NQorOjEwMTMxMDAwODFCMjAxMDA2NjAyMDA0ODgwMzIwMDAwMDAwMDUxNDBBNgorOjEwMTMyMDAwMUFCMTAxMDAwMDAwNEQ0MDgxQjIwMTAwMDAwMDQ1NDBBQgorOjEwMTMzMDAwODFCMjAxMDA2MzAyQTI0MTgzNTAwMDAwNUYwMjQ5NDA3NAorOjEwMTM0MDAwODFCMjAwMDAwMDAwNTI0MDFDQjEwMTAwMDAwMDRFNDA3QworOjEwMTM1MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwNjgwMkEyNDE1MgorOjEwMTM2MDAwODM1MDAwMDA1RjAyNEE0MDgxQjIwMDAwMDAwMDAwQTBFQworOjEwMTM3MDAwOUVCMDAxMDAwMDAwMDA4MEQ4QjMwMTAwMDAwMDAwQTE3MQorOjEwMTM4MDAwRDBCMzAxMDAwMDAwMDBBMkQyQjMwMTAwMDAwMDAwQTQwRAorOjEwMTM5MDAwRDRCMzAxMDAwMDAwMDBEMEQ2QjMwMTAwMDAwMDAwRDE5QQorOjEwMTNBMDAwRENCMzAxMDAwMDAwMDBEMkRFQjMwMTAwMDAwMDAwODhDMQorOjEwMTNCMDAwREFCMzAxMDAwMDAwMDBENDhFQjMwMTAwMDAwMDAwRDNCNgorOjEwMTNDMDAwRTZCMzAxMDAwMDAwMDBBQ0VDQjMwMTAwMDAwMDAwOTk5RQorOjEwMTNEMDAwRkFCMzAxMDAwMDAwMDBENUUwQjMwMTAwMDAwMDAwRDUyMQorOjEwMTNFMDAwRTJCMzAxMDAwMDAwMDBENUU0QjMwMTAwMDAwMDAwRDUyNQorOjEwMTNGMDAwRThCMzAxMDAwMDAwMDBENUVBQjMwMTAwMDAwMDAwRDUwOQorOjEwMTQwMDAwRjRCMzAxMDAwMDAwMDBENUY2QjMwMTAwMDAwMDAwRDVFMAorOjEwMTQxMDAwRjhCMzAxMDAwMDAwMDBDN0E5QjEwMTAwMDAwMDAwNEZBRgorOjEwMTQyMDAwNDBCMTAxMDA4NDAyMDA0MDkxQjAwMDAwMDAwMDAwNDE4MgorOjEwMTQzMDAwOTFCMDAxMDAwNzAwMDA0MEEzOUIwMTAwMDgwMDAwRERGRgorOjEwMTQ0MDAwODFGNDAxMDA4ODAyMDA0MDgwQzgwMTAwMDAwMDAwNDBEMworOjEwMTQ1MDAwMTBCMTAwMDA4RDAyMDA0MDgxQjIwMDAwOTgwMjAwNDBFRgorOjEwMTQ2MDAwODFCMjAwMDA5ODAyMDA0NkEzQjMwMDAwOUIwMjAwNDAzNgorOjEwMTQ3MDAwODFCMjAwMDBBMTAyMDA0MDgxQjIwMDAwOEYwMjIzNTAxRgorOjEwMTQ4MDAwQTU2RjAwMDAwMDAwMDA1MEE1QjMwMTAwRTgwMjAwNDI3MworOjEwMTQ5MDAwQTU2MzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDJENDAwNAorOjEwMTRBMDAwNDlCMTAxMDAwMDAwMDBEMEJBQjMwMTAwMDAwMDAwREUyNQorOjEwMTRCMDAwQTFCMTAxMDAwMDAwMDBGODAwQjAwMTAwOTcwMjIyNDQzMQorOjEwMTRDMDAwQTU1MzAwMDA5NDAyMDA0MUExQzEwMDAwNTUwMTAwRERCOAorOjEwMTREMDAwQTFCMTAwMDBFODAyMDBERUExMzMwMTAwRjgwMjAwNDBFMworOjEwMTRFMDAwODEzMjAxMDA1NTAxMDA0MDgxQjIwMDAwMDAwMDAwNDUzQQorOjEwMTRGMDAwQkZCMzAxMDA1MDAxQTJEMjc3N0QwMDAwMDAwMDAwRDJFRQorOjEwMTUwMDAwNjFCMTAxMDAwMDAwMDBERTYzQjEwMTAwOUUwMkE4NDA0RAorOjEwMTUxMDAwODEzMjAwMDA1NTAxMDA0MDgxQjIwMDAwRTgwMjAwNTQxMQorOjEwMTUyMDAwQTUzMzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDJENDBBMworOjEwMTUzMDAwNDlCMTAxMDAwMDAwMDBGOEQwQjMwMTAwMDAwMDAwRjgzQworOjEwMTU0MDAwRDJCMzAxMDAwMDAwMDBGOEQ0QjMwMTAwMDAwMDAwRjg5RAorOjEwMTU1MDAwRDZCMzAxMDAwMDAwMDBGODA4QjEwMTAwQUMwMjAwNDA2MQorOjEwMTU2MDAwODE5ODAxMDA2MDAyMDA0NjgzMzAwMTAwNTUwMTAwNDA2RgorOjEwMTU3MDAwODFCMjAwMDAwMDAwMDBBMDlFQjAwMTAwMDAwMDAwRTg2MQorOjEwMTU4MDAwNDNCMTAxMDAwMDAwMDBFOTQ1QjEwMTAwMDAwMDAwRUE5QworOjEwMTU5MDAwNDlCMTAxMDAwMDAwMDBFQkExQjEwMTAwMDAwMDAwNEZDMworOjEwMTVBMDAwNDBCMTAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMTVEMDAwODFCMjAwMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDA0NgorOjEwMTVFMDAwQTM5QjAxMDAwMDAwMDA0MEMxQjMwMTAwMDgwMDAwREQyMgorOjEwMTVGMDAwODFGNDAxMDBCRDAyMDA0MDEwQzkwMDAwQzMwMjAwMDVEMworOjEwMTYwMDAwODFCMDAwMDA1MDAxMDA0MDgxQjIwMDAwQ0IwMjAwMDUxMworOjEwMTYxMDAwODFCMDAwMDA1MDAxMDA0MDgxQjIwMDAwRDAwMjAwNDRCRgorOjEwMTYyMDAwQTVCMzAwMDBEMjAyMDA0NEE1QjMwMDAwMDIwMDAwNDBCMAorOjEwMTYzMDAwQTRFNzAxMDAwMDAwMDBFMDgxQjEwMTAwRkZGRjAwQzE0QworOjEwMTY0MDAwRjA4OTAxMDBDODAyMjI0MTgxNTAwMDAwQzQwMjAwNDExQgorOjEwMTY1MDAwQzFDMzAwMDBEQTAyMDA0MDgxMzIwMTAwRjgwMjAwNDBGQworOjEwMTY2MDAwODEzMjAxMDA1NTAxMDA0MDgxQjIwMDAwMDIwMDAwNDBCQgorOjEwMTY3MDAwQTRFNzAxMDAwMDAwMDBFMDkxQjEwMTAwRkZGRjAwQzlGNAorOjEwMTY4MDAwRjA4OTAxMDBDODAyMjI0MTgxNTAwMDAwQ0MwMjAwNDFEMworOjEwMTY5MDAwQzFDMzAwMDBGRkZGMDBERTg1ODkwMTAwQzgwMjAwQzI0RgorOjEwMTZBMDAwRTBCMTAwMDBGRkZGMDBERTk1ODkwMTAwQzgwMjAwQ0ExQQorOjEwMTZCMDAwRTBCMTAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMTZEMDAwODFCMjAwMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDhCRAorOjEwMTZFMDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0JFNgorOjEwMTZGMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI5MworOjEwMTcwMDAwRjFCMTAxMDAwMDAwMDBEM0YxQjEwMTAwMDAwMDAwRDRFQworOjEwMTcxMDAwRjFCMTAxMDAwMDAwMDBEMEUxQjEwMTAwMDAwMDAwRDFGMgorOjEwMTcyMDAwNjFCMTAxMDAyMDAwMDAyMDYyREQwMTAwRTIwMkE4NDA1QQorOjEwMTczMDAwODEzMjAwMDAwMDAwODBDQzg1OTMwMTAwMDQwMDAwNDA0RAorOjEwMTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMTc1MDAwODFCMjAwMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDgzQworOjEwMTc2MDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0I2NQorOjEwMTc3MDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDIxMgorOjEwMTc4MDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwRDM3MAorOjEwMTc5MDAwRjFCMTAxMDBFMTAyMDBENEUxQjEwMDAwMDQwMDAwNDAxOQorOjEwMTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMTdEMDAwODFCMjAwMDAwMDAwQTJDQzg1RkYwMDAwMDAwMDAwNTA5NAorOjEwMTdFMDAwODFCMDAxMDBGQTAyQTI0MTgxNTAwMDAwRjkwMkEyRjI4OAorOjEwMTdGMDAwODAzMDAwMDAwMDAwODBDQzg1ODMwMTAwMDQwMDAwNDBBMAorOjEwMTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMTgxMDAwODFCMjAwMDBCNTAzMDA0MEExOTkwMTAwMDAwMDJGNDFGMgorOjEwMTgyMDAwOTlCMzAxMDAwQTAzMjI0NDgxNkMwMDAwMTIwMzIyNDg4QworOjEwMTgzMDAwODE2QzAwMDAwQzAzMjI0QzgxNkMwMDAwMTYwMzIyNTBDNgorOjEwMTg0MDAwODE2QzAwMDAxNzAzMjI1NDgxNkMwMDAwMTkwMzIyNTg5OAorOjEwMTg1MDAwODE2QzAwMDAxRTAzMjI1QzgxNkMwMDAwNTAwMTAwNDA3RQorOjEwMTg2MDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwREQ5RjAwQ0E4OQorOjEwMTg3MDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDE4MgorOjEwMTg4MDAwRjM4MzAxMDAxMDAzQTI0MjA1NkMwMDAwMDAwMDAwNDEzOAorOjEwMTg5MDAwMDVCMDAxMDBERDlGMjJDQTA3MTQwMDAwREQ5RjAwNDU0RQorOjEwMThBMDAwRjM5MzAwMDBERDlGMjA0Mzk1NkYwMDAwREQ5RjgwQ0EwOQorOjEwMThCMDAwMDUzMDAwMDBERDlGMjIwMTgwMzAwMDAwREQ5RjAwQ0I1RAorOjEwMThDMDAwREI5MTAwMDA1NzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkM3RQorOjEwMThEMDAwQjFCMzAxMDBERDlGMDBDQUNGQjMwMDAwRkYwMDAwQ0ExMgorOjEwMThFMDAwODE4ODAxMDBERDlGQTI0MDc0N0QwMDAwNjAwMDIwNDBERgorOjEwMThGMDAwNjA5OTAxMDAxQjAzQThCMTgyMzAwMDAwMUEwMzAwNDA2OAorOjEwMTkwMDAwODFCMjAwMDBERDlGMDBDQTc5QjMwMDAwMDQwMDAwNDBFRQorOjEwMTkxMDAwODFCMjAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDNEMQorOjEwMTkyMDAwQ0I4MzAxMDAwMDAwNDU0MDgxQjIwMTAwMjIwM0EyNDFBNworOjEwMTkzMDAwODE1MDAwMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDQ1NDA5OAorOjEwMTk0MDAwODFCMjAxMDAyRDAzOTE4MjgyMzAwMDAwMDAwMDAwOEFFNAorOjEwMTk1MDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwMkIwM0E2NDA2NgorOjEwMTk2MDAwODEzMjAwMDAyRDAzNTY0MDgxQjIwMDAwQjUwMzAwNDBEMworOjEwMTk3MDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwQjUwMzAwNDA0OQorOjEwMTk4MDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwRDg5RjAwNDE3QQorOjEwMTk5MDAwOEJCMzAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDI0NworOjEwMTlBMDAwQ0Q4MzAxMDAwMDAwNDY0MDgxQjIwMTAwMzIwM0EyNDExNAorOjEwMTlCMDAwODE1MDAwMDAwMDAwNDY0MDgxQjIwMTAwMDAwMDQ2NDAxNgorOjEwMTlDMDAwODFCMjAxMDAzRDAzOTE4MTgyMzAwMDAwMDAwMDAwODk1NgorOjEwMTlEMDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwM0IwM0E2NDBENgorOjEwMTlFMDAwODEzMjAwMDAzRDAzNTU0MDgxQjIwMDAwQjUwMzAwNDA0NAorOjEwMTlGMDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwQjUwMzAwNDBDQQorOjEwMUEwMDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwRDg5RjAwNDFGOAorOjEwMUExMDAwOEJCMzAwMDBCMDAzMDA0MEExOTkwMTAwQzQxNDJGNDAxMworOjEwMUEyMDAwOTlCMzAxMDA1NzAxMDA0MDQ5QjEwMDAwMDQwMDAwNDA5MworOjEwMUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMUE1MDAwODFCMjAwMDAzMDk0MDA0MDQzOTkwMTAwMDA5MDAwRjhFQQorOjEwMUE2MDAwODA5ODAxMDAxMDAwMDBGMjg4RTQwMTAwMjAwMDAwNDA4RQorOjEwMUE3MDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwNEQwMzFGOTE5OAorOjEwMUE4MDAwODAzMjAwMDAzMDAwMDA0MDIwOTkwMTAwMDAwMDAwNUYxQgorOjEwMUE5MDAwMjM5MTAxMDA1MDAzMUY5MTgwMzIwMDAwNDAwMDAwNDA1QworOjEwMUFBMDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwNTMwMzFGOTE2MgorOjEwMUFCMDAwODAzMjAwMDAwMDAwMDA1RjIzOTEwMTAwNTUwMzFGOTE1OAorOjEwMUFDMDAwODAzMjAwMDAwMDA4ODA0MDIwOTkwMTAwMDQwMDAwNDA5RQorOjEwMUFEMDAwODFCMjAwMDAwMDAwMDA0Nzg0QjAwMTAwMDAwMEEyNDg2RAorOjEwMUFFMDAwODQ4NDAwMDAwMDAwMDA1RjYxQjEwMTAwMDAwMDAwNUMyMAorOjEwMUFGMDAwOEY5MDAxMDAwMDAwMDA0NzYyQjEwMTAwNUEwM0E4NDAyNgorOjEwMUIwMDAwODEzMjAwMDAwMDA4MDA0NzhFQzgwMTAwNTgwMzAwNUNDNQorOjEwMUIxMDAwOEY4MDAwMDBFMDAwMDA0MDYxOTkwMTAwNTgxNTJENDBDMQorOjEwMUIyMDAwOERCMDAxMDBEMDE0MkRGMDg4QjAwMTAwMDAwMDAwRkE0MworOjEwMUIzMDAwOEFCMDAxMDAwMDAwMDA0NTgxQjAwMTAwMDcwMDAwNDVBNworOjEwMUI0MDAwODI4ODAxMDAwMDAwMDA0MzhCRjAwMTAwMDAwMDAwNDg4MworOjEwMUI1MDAwODNFMDAxMDAwMDAwMDA0NjgyOTQwMTAwMjAwMDAwNDE2MworOjEwMUI2MDAwNjA5OTAxMDAwMDAwMDA0MThEQzAwMTAwNzQwMzIyNUZGNAorOjEwMUI3MDAwOEQ2QzAwMDA2NTAzQTI0MTgxNTAwMDAwNjMwMzAwNDBBQQorOjEwMUI4MDAwODFCMjAwMDAwODAwMDA0MDg1OTgwMTAwMDAwMDAwNDQ3OAorOjEwMUI5MDAwODJCMDAxMDAwMDAwMDA0MTg2QjAwMTAwMDAxQzAwNDMzQgorOjEwMUJBMDAwODZEODAxMDAwMDAwQTY0MTg1NTAwMTAwNzAwMzAwNDE2NQorOjEwMUJCMDAwODNFMDAwMDA2RTAzMDA0MDgxMzIwMTAwMDAwMDAwNDgxNQorOjEwMUJDMDAwODVFMDAxMDBEMDE0MkY0Njg0OTQwMTAwMjAwMDAwNDJEQgorOjEwMUJEMDAwNjA5OTAxMDBDMDAwMDA0MDYxOTkwMTAwMDAwMDgwNDA1MAorOjEwMUJFMDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMUMxMDAwODFCMjAwMDAwNzAwMDA0NTgwODgwMTAwMDAwMDAwNDNGOQorOjEwMUMyMDAwOEJGMDAxMDAwMDA0MDA0MDgzOTgwMTAwODUwM0EwNDE2RgorOjEwMUMzMDAwODE1MDAwMDA4MzAzMDA0MTgyRTgwMDAwMDAwMDgwNDFFMQorOjEwMUM0MDAwOEVDMDAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMUM1MDAwODFCMjAwMDAwMDAwMDA0MDQ5QjEwMTAwMDAwMjAwNDBENAorOjEwMUM2MDAwODM5ODAxMDAwMDM5MDA0MDQ1OTkwMTAwMDAwMDAwNDBDMAorOjEwMUM3MDAwRjFCMTAxMDA4QjAzQTI0MTgzNTAwMDAwMDAwMDAwNDAzRAorOjEwMUM4MDAwODVCMDAxMDAwQjAwMDA0NDgyRjQwMTAwMUExNTAwQTY4MworOjEwMUM5MDAwODZCMDAxMDA3MDE1MDA0MDQ1OTkwMTAwMDAwODAwNDAyMQorOjEwMUNBMDAwRjE5OTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAzOTAwNDA0QworOjEwMUNCMDAwRTE5OTAxMDAwNDAwMDA0MDYxOTkwMTAwNzAxNTAwNDNBMgorOjEwMUNDMDAwNjI5OTAxMDA5NTAzQTg0MDgxMzIwMDAwOTcwMzIyNUFDRgorOjEwMUNEMDAwNzM3RDAwMDA3QTAwMDA0MDYxOTkwMTAwOTgwM0E4QjE2QgorOjEwMUNFMDAwN0UzMTAwMDAwMDA4MDA0Mjg0QzgwMTAwOTAwM0EyNDEzOAorOjEwMUNGMDAwODM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDBEOQorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDA1ODE1MkQ0MDhEQjAwMTAwRDAxNDJERjA3NworOjEwMUQyMDAwODhCMDAxMDAwMDAwMDA0MDhGQjAwMTAwMDEwMDAwQTY1MworOjEwMUQzMDAwOTBCMDAxMDAwMEY4MDA0ODkwOTgwMTAwMDAwMDAwNDVCNAorOjEwMUQ0MDAwOTNCMDAxMDAwMDAwMDBGQThBQjAwMTAwODAwMzAwNDA1NworOjEwMUQ1MDAwODEzMjAxMDAwMjAwMDBBNjgwQjAwMTAwQUMwMzIyNDBFNQorOjEwMUQ2MDAwODI2QzAwMDBCMDAzMDA0MDgxMzIwMTAwNTgwMzAwNDA0MworOjEwMUQ3MDAwODEzMjAxMDAwMDAwMDA0MThEQzAwMTAwQjUwMzIyNUZFNworOjEwMUQ4MDAwOEQ2QzAwMDBBNzAzQTI0MTkzNTAwMDAwQTUwMzAwNDAwMgorOjEwMUQ5MDAwODFCMjAwMDBGRjA3MDA0Nzg0ODgwMTAwMDAwMEE2NDBEMAorOjEwMURBMDAwODFCMjAwMDBFRDlGMDA0NzgwMzAwMTAwMDAwMjAwNDczMworOjEwMURCMDAwOEVDODAxMDBCMDAzMDA0MDgxQjIwMDAwMDAwMDAwNDQ2MgorOjEwMURDMDAwNTBCMzAxMDBCQjAzMjAxODg5NkMwMDAwMDQwMDAwQTY3QQorOjEwMUREMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDA4MQorOjEwMURFMDAwNTU5QjAxMDBCRTAzMDA0MDgxQjIwMDAwMDQwMDAwQTYyNAorOjEwMURGMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDA2MQorOjEwMUUwMDAwNTU5QjAxMDAwMDAwMDA0MjUwRDMwMTAwMDAwMDAwQThEMworOjEwMUUxMDAwNEZCMzAxMDAwMDAwMDA0MzRFRDMwMTAwNkUwMzAwNDBBOQorOjEwMUUyMDAwODEzMjAxMDA4MjAzMDA0MjgwMzAwMTAwQjAwMzAwNDA5MworOjEwMUUzMDAwODEzMjAxMDBDNzAzMjJBNzhGNkMwMDAwNUEwMzAwNDBDMworOjEwMUU0MDAwODEzMjAxMDBDNDAzMDA0MDgxQjIwMDAwMDAwMDgwNDBFNAorOjEwMUU1MDAwODFCMjAxMDBDODE0MkVCQjg1QjAwMTAwMDAwMDAwRUU2NQorOjEwMUU2MDAwODJCMDAxMDAwMDAwMDA0MUUwQjEwMTAwMDAwMDAwQTJDQQorOjEwMUU3MDAwQTBCMzAxMDAwMDAwMDA0NEE1QjMwMTAwRTE5RjAwQ0EyNworOjEwMUU4MDAwQTczMzAxMDBFMDlGMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMUU5MDAwODFCMjAwMDBENjAzMjI0Mjc1NkYwMDAwRDgwMzIyNDFCMAorOjEwMUVBMDAwNzU2RjAwMDBEQTAzMUVDQTgxMzIwMDAwREMwMzFGQ0EwRQorOjEwMUVCMDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwREQ5RjAwNDI2QworOjEwMUVDMDAwNzVCMzAwMDAwMDAwMDBDQUNEQjEwMTAwREQ5RjAwNDFFNAorOjEwMUVEMDAwNzVCMzAwMDAwMDAwMDBDQUNGQjEwMTAwREQ5RjAwNDBEMworOjEwMUVFMDAwNzVCMzAwMDAwMDgxMDBBNkM2QjEwMTAwREQ5RjAwNDA2RgorOjEwMUVGMDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwREQ5RjAwNDA1NQorOjEwMUYwMDAwNzVCMzAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMUYxMDAwODFCMjAwMDA0NTAxMDA0RDkzMzAwMTAwNDUwMTAwNEVBMworOjEwMUYyMDAwOTMzMDAxMDA0NTAxMDA0QzkzMzAwMTAwRUM5RjAwNDBDQworOjEwMUYzMDAwODEzMjAxMDBERDlGMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDA1NDk1MDA0MDQ1OTkwMTAwREQ5RjAwQ0EwMAorOjEwMUY2MDAwRTVCMTAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDBDQzE0MkU0MDg3QjAwMTAwMDAwMDAwQTJFNgorOjEwMUZBMDAwQTBCMzAxMDAxNTA0MDA0M0IyMzMwMTAwMDAwMDY4REE1OQorOjEwMUZCMDAwODlCMDAxMDA3QzAwMDA0MDhCOTgwMTAwMDAwMDAwNTBCNworOjEwMUZDMDAwODlGMDAxMDAwMDAwMDA0MTg5RDAwMTAwMDMwMDAwNDRCNQorOjEwMUZEMDAwODg4QzAxMDAwMDAwMDA0NDg3QzAwMTAwMDAwMDAwNDExRgorOjEwMUZFMDAwQTVCMzAxMDAxNTA0MDA0M0IyMzMwMTAwMDAwMDAwREE3QworOjEwMUZGMDAwRjFCMTAxMDAwMDAwMDA0NDg3QzAwMTAwMDAwMDAwNDE3MQorOjEwMjAwMDAwQTVDMzAxMDAwQjA0MjI0NDg5NTAwMDAwMEIwNDIyNDRBNAorOjEwMjAxMDAwOEI1MDAwMDBGQTAzQTI1MEE1NkYwMDAwMDAwMDAwNDJBMAorOjEwMjAyMDAwQTVFMzAxMDAwMDAwMDBDQUE3QjMwMTAwRTE5RjAwQkJDNworOjEwMjAzMDAwODUzMDAxMDBDQzE0MkVEMjk1QzMwMTAwQUUwMzAwQ0IzNQorOjEwMjA0MDAwQTNDOTAxMDAwMDAwMDAyMDQyQjEwMTAwMDAwMDAwNTBCRgorOjEwMjA1MDAwODFCMDAxMDAwODA0QTI0MTgxNTAwMDAwMDcwNEEyRjJFRgorOjEwMjA2MDAwODAzMDAwMDBGQTAzMDA0MEE1QjMwMDAwMDAwMDAwNDJFOQorOjEwMjA3MDAwQTVFMzAxMDAwMDAwMDBDQUE3QjMwMTAwRTE5RjAwQkI3NworOjEwMjA4MDAwODUzMDAxMDBFMDlGMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMjA5MDAwODFCMjAwMDAwMDAwMDBEOTJCQjEwMTAwMDAxMDAwNDAwNworOjEwMjBBMDAwODM5ODAxMDBEQjAwMDA0MDgxMzIwMTAwRkZGRjAwOTRCMworOjEwMjBCMDAwQjQ4QjAxMDAwMDAwODA0MDgxQjIwMTAwMDAwMDAwRDkxMworOjEwMjBDMDAwMkJCMTAxMDAwMDEwMDA0MDgzOTgwMTAwREQwMDAwNDBBQQorOjEwMjBEMDAwODEzMjAxMDAwMDAwODA5NEI0QjMwMTAwMDQwMDAwNDA4QworOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwMDAwMDBEOTJCQjEwMTAwMDAwMDAwREFGQworOjEwMjEyMDAwMjdCMTAxMDAwNkMwMDA0MDJEOTkwMTAwREUwMDAwNDBFQgorOjEwMjEzMDAwODEzMjAxMDAwMDEwMDA0MDgzOTgwMTAwMDJDNDAwNDE3OAorOjEwMjE0MDAwMkM5OTAxMDBERTAwMDA0MDgxMzIwMTAwMDA0MDAwNDA3NworOjEwMjE1MDAwODM5ODAxMDAwNTgyMDA0MTJDOTkwMTAwREUwMDAwNDBCNworOjEwMjE2MDAwODEzMjAxMDAyRDA0ODA5NDgwMzIwMDAwMEMwMTAwNDA3NworOjEwMjE3MDAwODEzMjAxMDAyODA0MDA0MDgxQjIwMDAwMDQ4MDAwNDA0OAorOjEwMjE4MDAwMkQ5OTAxMDBERTAwMDA0MDgxMzIwMTAwMDAwMDgwNDBGNgorOjEwMjE5MDAwODFCMjAxMDAzMTA0MDAxMjEwQzkwMDAwMDA0ODgwNDBFMworOjEwMjFBMDAwMEI5ODAxMDBDMDQ5ODA0MDBCOTgwMTAwODA0QjgwNDA5MworOjEwMjFCMDAwMEI5ODAxMDA0MDREODA0MDBCOTgwMTAwMDA0RjgwNDA3QgorOjEwMjFDMDAwMEI5ODAxMDBDMDUwODA0MDBCOTgwMTAwODA1MjgwNDA2NQorOjEwMjFEMDAwMEI5ODAxMDA0MDU0ODA0MDBCOTgwMTAwMDA1NjgwNDA0RAorOjEwMjFFMDAwMEI5ODAxMDBDMDU3ODA0MDBCOTgwMTAwODA1OTgwNDAzNworOjEwMjFGMDAwMEI5ODAxMDA0MDVCODA0MDBCOTgwMTAwMDA1RDgwNDAxRgorOjEwMjIwMDAwMEI5ODAxMDBDMDVFODA0MDBCOTgwMTAwODA2MDgwNDAwOAorOjEwMjIxMDAwMEI5ODAxMDA0MDYyODA0MDBCOTgwMTAwMDA2NDgwNDBGMAorOjEwMjIyMDAwMEI5ODAxMDBDMDY1ODA0MDBCOTgwMTAwODA2NzgwNDBEQQorOjEwMjIzMDAwMEI5ODAxMDA0MDY5ODA0MDBCOTgwMTAwMDA2QjgwNDBDMgorOjEwMjI0MDAwMEI5ODAxMDBDMDZDODA0MDBCOTgwMTAwODA2RTgwNDBBQworOjEwMjI1MDAwMEI5ODAxMDA0MDcwODA0MDBCOTgwMTAwMDA3MjgwNDA5NAorOjEwMjI2MDAwMEI5ODAxMDBDMDczODA0MDBCOTgwMTAwODA3NTgwNDA3RQorOjEwMjI3MDAwMEI5ODAxMDA0MDc3ODA0MDBCOTgwMTAwMDA3OTgwNDA2NgorOjEwMjI4MDAwMEI5ODAxMDBDMDdBODA0MDBCOTgwMTAwODA3QzgwNDA1MAorOjEwMjI5MDAwMEI5ODAxMDA0MDdFODA0MDBCOTgwMTAwMDQwMDAwNDAzNAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDA1OTA0MDAxMjEwQzkwMDAwMDA4MDgwNDA0MworOjEwMjJFMDAwMEI5ODAxMDAwMDgyODA0MDBCOTgwMTAwMDA4NDgwNDAyMAorOjEwMjJGMDAwMEI5ODAxMDAwMDg2ODA0MDBCOTgwMTAwMDA4ODgwNDAwOAorOjEwMjMwMDAwMEI5ODAxMDAwMDhBODA0MDBCOTgwMTAwMDA4QzgwNDBFRgorOjEwMjMxMDAwMEI5ODAxMDAwMDhFODA0MDBCOTgwMTAwMDA5MDgwNDBENworOjEwMjMyMDAwMEI5ODAxMDAwMDkyODA0MDBCOTgwMTAwMDA5NDgwNDBCRgorOjEwMjMzMDAwMEI5ODAxMDAwMDk2ODA0MDBCOTgwMTAwMDA5ODgwNDBBNworOjEwMjM0MDAwMEI5ODAxMDAwMDlBODA0MDBCOTgwMTAwMDA5QzgwNDA4RgorOjEwMjM1MDAwMEI5ODAxMDAwMDlFODA0MDBCOTgwMTAwMDBBMDgwNDA3NworOjEwMjM2MDAwMEI5ODAxMDAwMEEyODA0MDBCOTgwMTAwMDBBNDgwNDA1RgorOjEwMjM3MDAwMEI5ODAxMDAwMEE2ODA0MDBCOTgwMTAwMDBBODgwNDA0NworOjEwMjM4MDAwMEI5ODAxMDAwMEFBODA0MDBCOTgwMTAwMDBBQzgwNDAyRgorOjEwMjM5MDAwMEI5ODAxMDAwMEFFODA0MDBCOTgwMTAwMDBCMDgwNDAxNworOjEwMjNBMDAwMEI5ODAxMDAwMEIyODA0MDBCOTgwMTAwMDBCNDgwNDBGRgorOjEwMjNCMDAwMEI5ODAxMDAwMEI2ODA0MDBCOTgwMTAwMDBCODgwNDBFNworOjEwMjNDMDAwMEI5ODAxMDAwMEJBODA0MDBCOTgwMTAwMDBCQzgwNDBDRgorOjEwMjNEMDAwMEI5ODAxMDAwMEJFODA0MDBCOTgwMTAwMDQwMDAwNDBGMworOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwMDAwMDA0MDg3QjEwMTAwMDAwMDAwNDBEMAorOjEwMjQyMDAwOTdCMDAxMDAwMDAwMDA0QjgwQjEwMTAwMDEwMDAwQTY0MAorOjEwMjQzMDAwODJCMTAxMDA4MjA0ODU0MTk3NDAwMDAwMDAwMDAwNDAwNQorOjEwMjQ0MDAwOTdCMTAxMDAwMDAwMDA0MDk3QjAwMTAwMDAwMDAwNEI3MAorOjEwMjQ1MDAwOTBCMTAxMDAwMTAwMDBBNjkyQjEwMTAwODcwNDg1NDFGRQorOjEwMjQ2MDAwOTc0MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA1RAorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDA5MDA0NjA0MDgxMzIwMDAwMDAwMDAwMTIxMAorOjEwMjRBMDAwODBCMTAxMDBGRkZGRjA0QjgyODkwMTAwOTMwNDYwNDA3RQorOjEwMjRCMDAwODEzMjAwMDAwMDAwMDA0QTgwQjEwMTAwMDEwMEYwQTY1NgorOjEwMjRDMDAwODJCMTAxMDA5NjA0NjA0MDgxMzIwMDAwRkZGRjAwNEJBMgorOjEwMjREMDAwODQ4OTAxMDAwMDAwRjBDMjI0QjAwMTAwMDAwMDAwNEExRAorOjEwMjRFMDAwOTBCMTAxMDBGRkZGODA0QjkyODkwMTAwMDAwMDAwNEE3QgorOjEwMjRGMDAwOTBCMTAxMDAwMTAwODBBNjkyQjEwMTAwRkZGRjAwNEJFNgorOjEwMjUwMDAwOTQ4OTAxMDAwMDAwODBDQTk0QjAwMTAwMDQwMDAwNDBEQQorOjEwMjUxMDAwODFCMjAwMDAxMDAwMDA0RTk4RTQwMTAwMDAwMDAwMDdBNgorOjEwMjUyMDAwOTg5NDAxMDAwMDAwMDA0Mzk5RTAwMTAwMDAwMDAwODA0MQorOjEwMjUzMDAwOTg5NDAxMDAwMDAwMDA0OTk5RTAwMTAwMDAwMDAwNEM1RgorOjEwMjU0MDAwODg5NDAxMDBBNjA0NDc0MDgxMzIwMDAwQUQwNDIyMjA5NworOjEwMjU1MDAwODc2RjAwMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDAwNDBCMgorOjEwMjU2MDAwODFCMjAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwNDA4MworOjEwMjU3MDAwODFCMjAxMDBBNjA0MDA0MDgxQjIwMDAwMDAwMDFGODA2QgorOjEwMjU4MDAwODZCMzAxMDBCMDA0MjI0Rjc3N0QwMDAwQzAwNDAwNDBGNAorOjEwMjU5MDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDRFMQorOjEwMjVBMDAwNjJCMTAxMDBCMTA0QTg0MDgxMzIwMDAwQjgwNDIyNEI5RQorOjEwMjVCMDAwODk3QzAwMDBCNjA0MjI0Rjc3N0QwMDAwQzAwNDAwNDBGMworOjEwMjVDMDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwQjYwNEE4NDA1QworOjEwMjVEMDAwODEzMjAwMDAwMDAwODAyMDg3QjMwMTAwMDQwMDAwNDAyOQorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwMDAwMDA1MDk5QjAwMTAwNkYwMDAwNDAzRQorOjEwMjYyMDAwNjE5OTAxMDBDMTA0QThCMTUyMzMwMDAwQzYwNDIyNEJENQorOjEwMjYzMDAwNTM3RjAwMDA2RjAwMDA0MDYxOTkwMTAwQzQwNEE4QjFGRAorOjEwMjY0MDAwN0UzMTAwMDBDMTA0QTI0MTk5NTAwMDAwMDAwMEEyNEY1OQorOjEwMjY1MDAwNzdGRDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAxMDAwMDA0RTk4RTQwMTAwMDAwMDAwMDcyNQorOjEwMjZBMDAwOTg5NDAxMDAwMDAwMDA0Mzk5RTAwMTAwMDAwMDAwODBDMAorOjEwMjZCMDAwOTg5NDAxMDAwMDAwMDA0ODk5RTAwMTAwRDYwNDAwNEMwNQorOjEwMjZDMDAwODg5NDAwMDBENjA0NDc0MDgxMzIwMDAwREQwNDIyMjBCNworOjEwMjZEMDAwODc2RjAwMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDAwNDAzMQorOjEwMjZFMDAwODFCMjAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwNDAwMgorOjEwMjZGMDAwODFCMjAxMDBENjA0MDA0MDgxQjIwMDAwMDAwMDFGODBCQQorOjEwMjcwMDAwODZCMzAxMDBFMDA0MjI0Rjc3N0QwMDAwRjAwNDAwNDAxMgorOjEwMjcxMDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDQ1RgorOjEwMjcyMDAwNjJCMTAxMDBFMTA0QTg0MDgxMzIwMDAwRTgwNDIyNEFCRAorOjEwMjczMDAwODk3QzAwMDBFNjA0MjI0Rjc3N0QwMDAwRjAwNDAwNDAxMQorOjEwMjc0MDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwRTYwNEE4NDBBQQorOjEwMjc1MDAwODEzMjAwMDAwMDAwODAyMDg3QjMwMTAwMDQwMDAwNDBBNworOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwMDAwMDA1MDk5QjAwMTAwNkYwMDAwNDBCRAorOjEwMjdBMDAwNjE5OTAxMDBGMTA0QThCMTUyMzMwMDAwRjYwNDIyNEFGNQorOjEwMjdCMDAwNTM3RjAwMDA2RjAwMDA0MDYxOTkwMTAwRjQwNEE4QjE0QworOjEwMjdDMDAwN0UzMTAwMDBGMTA0QTI0MTk5NTAwMDAwMDAwMEEyNEZBOAorOjEwMjdEMDAwNzdGRDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDA3QjAwMDA0MDYxOTkwMTAwMDAwNUE4QjE3MQorOjEwMjgyMDAwODAzMDAwMDAxMjA1MUQ0MDgwMzIwMDAwNDAxODAwNDAzQQorOjEwMjgzMDAwNDk5OTAxMDAwNDAwMDBBNjg2QjAwMTAwMTAwNUEyNDBERAorOjEwMjg0MDAwODYwNDAwMDBERTlGOUM0MDgwMzIwMDAwRkZGRjAwNDBCNQorOjEwMjg1MDAwODg4ODAxMDAzMDA1MDA1MDQ3MzEwMTAwMzYwMDAwNDRFRgorOjEwMjg2MDAwODhDQzAxMDAwQzA1NTI0MDgxMzIwMDAwMzAwNTAwNDA0OAorOjEwMjg3MDAwNDczMTAxMDAwMDAwMDA0MTg5QjAwMTAwMzAwNTAwNDhFNworOjEwMjg4MDAwNDczMTAxMDAzMDA1MDAwNTQ3MzEwMTAwREU5RjAwNDA1RgorOjEwMjg5MDAwODFCMjAwMDAyODAwMDA0MDQ3OTkxQjAwREU5RjAwNDFFNAorOjEwMjhBMDAwRTFDMTFBMDA3ODE4MDA0MDQ5OTkxQjAwMTkwNTIyNTQwQgorOjEwMjhCMDAwODE3QzFBMDAxNDA1NDI0MDgxMzIxQTAwMDA4MjAwQjM2NAorOjEwMjhDMDAwNjdERjFCMDAwMDAwMUE0NDkzOTMxQjAwMjgwMDAwNDBBMAorOjEwMjhEMDAwNDc5OTFCMDAzMDA1MDA0MTg5MzAwMTAwMjcwNTBGNDA1MgorOjEwMjhFMDAwODAzMjAwMDBGRjdGMDA0MDg4ODgwMTAwMzAwNTAwNTBFMgorOjEwMjhGMDAwNDczMTAxMDAzNjAwMDA0NDg4Q0MwMTAwMUYwNTk5NDA5MworOjEwMjkwMDAwODAzMjAwMDAwMDAwMDA0ODg5RDAwMTAwMjEwNTlCNDA3MgorOjEwMjkxMDAwODAzMjAwMDAwMDAwMDA0Qzg5RDAwMTAwMjMwNTFGNDRENAorOjEwMjkyMDAwODAzMjAwMDAzMDA1MDA0MDQ3MzEwMTAwMDAwMDAwNDFDNgorOjEwMjkzMDAwODlCMDAxMDAzMDA1MDA0ODQ3MzEwMTAwMzAwNTAwNThEQQorOjEwMjk0MDAwNDczMTAxMDBERTlGMDA0MDgxQjIwMDAwMTAwMDAwNDBDRQorOjEwMjk1MDAwODZGNDAxMDA2RjAwMDA0Mzg2ODgwMTAwREU5RjI2MDU5MworOjEwMjk2MDAwNDczMTAwMDAzMDA1MDA0MTg5MzAwMTAwREU5RjAwNDAwMgorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwMDAwQTA0NEYwNDEwMTAwMDAwMDAwNDBBRQorOjEwMjlBMDAwODFCMjAxMDAwMDAwODA0MUUxQzEwMTAwMDQwMDAwNDA0QgorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDA0QzAxMDAwNzkxMzAwMTAwMDAwMEEyNDBDQworOjEwMjlFMDAwOTdFQzAwMDAwMDAwODAwNTkxQzAwMTAwMDQwMDAwNDA0OQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDA0QzAxMDA0MDgxMzIwMTAwNDQwNUEyNDAxNworOjEwMkEyMDAwOTc2QzAwMDAzQTAwMDA0MEIzOUIwMTAwNDUwNTAwNDA1MAorOjEwMkEzMDAwODFCMjAwMDA0MDAwMDA0MEIzOUIwMTAwMTAwNDAwNDA0MAorOjEwMkE0MDAwODEzMjAxMDAwMDAwMDBEQUY1QjEwMTAwMTAwNDAwNDJGQgorOjEwMkE1MDAwQjM0MzAxMDAwMDAwMDBEQUY1QjEwMTAwMTAwNDAwNDJBOAorOjEwMkE2MDAwQjM0MzAxMDAwMDAwMDBEQUY1QjEwMTAwNEUwMDAwNDA2MAorOjEwMkE3MDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDgwMDAwREExRAorOjEwMkE4MDAwRjdGNTAxMDA1MDAwMDA0MDkxOTgwMTAwMDAwMDAwNDc1OAorOjEwMkE5MDAwOEZCMDAxMDAxMDA0MDA0OEIyMzMwMTAwMDAwMDAwREFEQQorOjEwMkFBMDAwRjdCMTAxMDAwODAwMDBEQUY3RjUwMTAwMDAwMDAwNDI2QworOjEwMkFCMDAwOTFDMDAxMDA1MDA1QTI0MThGNTAwMDAwMDAwMDAwNDE2QworOjEwMkFDMDAwNDVEMTAxMDAwODAwMDA0MEIzOUIwMTAwMTAwNDAwNDAwNAorOjEwMkFEMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMEEwMDAwNDA2RgorOjEwMkFFMDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREFCNQorOjEwMkFGMDAwRkRCMTAxMDAxQTAwMDA0MEIzOUIwMTAwMTAwNDAwNDAyQQorOjEwMkIwMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMTgwMDAwNDAzMAorOjEwMkIxMDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREE4NAorOjEwMkIyMDAwRkRCMTAxMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg1RgorOjEwMkIzMDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREEzNQorOjEwMkI0MDAwOTFDMDAxMDAwMDAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAxOQorOjEwMkI1MDAwODEzMjAxMDAwMDAwNkVEQThGQjAwMTAwMDIwMDAwNDhFRgorOjEwMkI2MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREEwNQorOjEwMkI3MDAwRkRCMTAxMDAwNDAwMDA0OEIyQ0IwMTAwMTAwNDAwNDA4OAorOjEwMkI4MDAwODEzMjAxMDAwMDAwODBEQUZEQjEwMTAwMDQwMDAwNDA0NAorOjEwMkI5MDAwODFCMjAwMDA3QTA1MjI0NUZEN0YwMDAwNDAxNjAwNDAwQQorOjEwMkJBMDAwNDU5OTAxMDBEQjlGMDA0MDQ5MzEwMTAwMDgwMDAwNDhDMQorOjEwMkJCMDAwQjJDQjAxMDAxNTA0MDA0MDgxMzIwMTAwNzgwNUEyNDAyQgorOjEwMkJDMDAwOEY2QzAwMDA3RDA1MjIyMEI1NkYwMDAwN0EwNTAwNDA2MworOjEwMkJEMDAwODFCMjAwMDBEQTlGMDA0MDgxMzIxRjAwN0QwNTIyNDA1MworOjEwMkJFMDAwOTc2QzFFMDA3QTA1NDI0MDgxMzIxRTAwMDAwMDAwNEZBMworOjEwMkJGMDAwNjc5MzFGMDBERjlGMDA1ODY3OTMxRTAwNTQxNjAwNDAyNAorOjEwMkMwMDAwNDc5OTFGMDAwMDAwMDBGRUY0QjExRjAwMDAwMDAwNDBDMworOjEwMkMxMDAwODFCMjFGMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA3RQorOjEwMkMyMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA4QworOjEwMkMzMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA3QworOjEwMkM0MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA2QworOjEwMkM1MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA1QworOjEwMkM2MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwNDYwMDAwNDAwNgorOjEwMkM3MDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDgwMDAwREExQgorOjEwMkM4MDAwRjdGNTAxMDA0ODAwMDA0MDk1OTgwMTAwMDAwMDAwNDQ1RAorOjEwMkM5MDAwOTdCMDAxMDAxMDA0MDA0QUIyMzMwMTAwMDAwMDAwREFDRQorOjEwMkNBMDAwRjdCMTAxMDAwODAwMDBEQUY3RjUwMTAwMDAwMDAwNDI2QQorOjEwMkNCMDAwOTVDMDAxMDA5MDA1QTI0MTk3NTAwMDAwMkEwMDAwNDBGNQorOjEwMkNDMDAwQTU5QjAxMDA0MDE2MDA0MEExOUIwMTAwMDAwMDAwQ0EyNgorOjEwMkNEMDAwQTdCMzAxMDBFMTlGMDBCQjg1MzAwMTAwRTA5RjAwNDBFOQorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDBCODA1MjI0NUZEN0YwMDAwRTAxNTAwNDBBQgorOjEwMkQyMDAwNDc5OTAxMDAxQTAwMDBBMjgwREMwMTAwMDAwMDAwNTA1OQorOjEwMkQzMDAwRjFCMTAxMDBGMDE1MDA0MEYxOTkwMTAwMDAwMDAwQ0E1NgorOjEwMkQ0MDAwRjFCMTAxMDAwNzAwMDA0MDYxOTkwMTAwMjAwMDAwNDAzRQorOjEwMkQ1MDAwNjJERDAxMDBBNzA1QThCQkUxMzEwMDAwMDAwMDAwNTBDMgorOjEwMkQ2MDAwODNCMDAxMDBBQTA1QTI0MTgzNTAwMDAwQTkwNUEyRjI4OAorOjEwMkQ3MDAwODIzMDAwMDA0QzAxMDA0MDgxMzIwMTAwQjAwNUEyNDBDOQorOjEwMkQ4MDAwOTc2QzAwMDAzQTAwMDA0MEIzOUIwMTAwQjEwNTAwNDA4MQorOjEwMkQ5MDAwODFCMjAwMDA0MDAwMDA0MEIzOUIwMTAwRjAxNTAwNDBFQworOjEwMkRBMDAwNDM5OTAxMDAxMDA0MDA0MDgxMzIwMTAwQjgwNUEyRkFFNQorOjEwMkRCMDAwQjQ2RjAwMDAxMDA0MDA0MkIzNDMwMTAwQjgwNUEyRkE0QQorOjEwMkRDMDAwQjQ2RjAwMDAxMDA0MDA0MkIzNDMwMTAwQkIwNTIyRkFCNworOjEwMkREMDAwQjQ2RjAwMDBCODA1NDI0MDgxMzIyMDAwMDAwMDAwNEU3MAorOjEwMkRFMDAwNjc5MzIxMDBERjlGMDA1ODY3OTMyMDAwNDAxNjAwNDA0MgorOjEwMkRGMDAwNDU5OTIxMDBEQjlGMDA0MDQ5MzEyMTAwRjYxNTAwNDAzNAorOjEwMkUwMDAwNDM5OTIxMDA1QzE2MDA0MDQ1OTkyMTAwMDAwMDZFRkFBQworOjEwMkUxMDAwOEVCMDIxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVFMQorOjEwMkUyMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU4QQorOjEwMkUzMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRjA4OAorOjEwMkU0MDAwQjRCMzAxMDBDOTA1QTI0MDhGNkMwMDAwRkMxNTIwMjAxRQorOjEwMkU1MDAwRTFCMTAxMDBDRTA1MDA0MDgxQjIyNDAwREE5RjAwNDBCQworOjEwMkU2MDAwODEzMjI1MDBDRTA1MjI0MDk3NkMyNDAwQ0IwNTQyNDBEQworOjEwMkU3MDAwODEzMjI0MDAwMDAwMDA0RjY3OTMyNTAwREY5RjAwNTgzNworOjEwMkU4MDAwNjc5MzI0MDAzODA1MDA0MDgxMzIyNTAwMUUwMDAwNDg2OQorOjEwMkU5MDAwQjJDQjI1MDAxMDA0MDA0MDgxMzIwMTAwRDMwNTIyNTAzRQorOjEwMkVBMDAwQjU2RjAwMDAwMDAwMDA1MDkxQzAwMTAwMDAwMDAwNDgxNAorOjEwMkVCMDAwQjJDQjAxMDBGNjE1MDA0MDQzOTkwMTAwMjAwNDAwRjI1NgorOjEwMkVDMDAwQjQzMzAxMDAwMjAwMDA0OEIyQ0IwMTAwRjgxNTAwNDAwNQorOjEwMkVEMDAwNDM5OTAxMDAyMDA0MDBGMkI0MzMwMTAwMDQwMDAwNDhDQgorOjEwMkVFMDAwQjJDQjAxMDBGQTE1MDA0MDQzOTkwMTAwMjAwNDAwRjIyMgorOjEwMkVGMDAwQjQzMzAxMDAwODAwMDA0OEIyQ0IwMTAwRkMxNTAwNDBDQgorOjEwMkYwMDAwNDM5OTAxMDAwMDAwMDBGMDk0QjAwMTAwRkZGRjAwNEE2NworOjEwMkYxMDAwQjQ4QjAxMDAyMDA0MDA0MDgxMzIwMTAwMEEwMDAwNDgwNworOjEwMkYyMDAwQjJDQjAxMDAxMDAwMDA0QUI0RjcwMTAwMjAwNDAwNDBCOQorOjEwMkYzMDAwODEzMjAxMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg0NgorOjEwMkY0MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwRTkwNTIyNTA5QgorOjEwMkY1MDAwQjU2RjAwMDBFQTA1MDA1MEI1QjMwMDAwMDAwMDAwNDA2NgorOjEwMkY2MDAwQjVCMzAxMDAyMDA0MDA0MDgxMzIwMTAwRTA5RjAwNDAyMQorOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwMDE2MDA0MDQ3OTkwMTAwMzAzMTAwNDAyNgorOjEwMkZBMDAwRjU5OTAxMDAzMjMzMDA0MEY1OTkwMTAwMzQzNTAwNDBCNQorOjEwMkZCMDAwRjU5OTAxMDAzNjM3MDA0MEY1OTkwMTAwMzgzOTAwNDA5NQorOjEwMkZDMDAwRjU5OTAxMDA0MTQyMDA0MEY1OTkwMTAwNDM0NDAwNDA1OQorOjEwMkZEMDAwRjU5OTAxMDA0NTQ2MDA0MEY1OTkwMTAwNDc0ODAwNDAzOQorOjEwMkZFMDAwRjU5OTAxMDA0OTRBMDA0MEY1OTkwMTAwMkMwMDAwNDA4NAorOjEwMkZGMDAwODM5ODAxMDAwMDAwMDA0MEY3QjEwMTAwRkMwNUEyNDFFOAorOjEwMzAwMDAwODM1MDAwMDA4MDE2MkUwNjgzQjAwMTAwMzYwMDAwRkJCRQorOjEwMzAxMDAwRjZBOTAxMDBGRjA1QTI0MTgzNTAwMDAwMjIwMDAwNDBGNAorOjEwMzAyMDAwODM5ODAxMDAwMDAwMDBGQkY2QjEwMTAwMDIwNkEyNDFGNgorOjEwMzAzMDAwODM1MDAwMDA2MjAwMDA0MDk1OTgwMTAwREM5RjAwNDAzMgorOjEwMzA0MDAwODEzMjAxMDAwMDE2MkQwNjgzQjAwMTAwODAxNjAwNDA3OQorOjEwMzA1MDAwNDU5OTAxMDA1QzAwMDBGQkY2QTkwMTAwMDgwNkEyNDFBOQorOjEwMzA2MDAwODM1MDAwMDAwMDAwMDA3MEY5QjEwMTAwMDAwMDAwNzEwMQorOjEwMzA3MDAwRjlCMTAxMDAwMDAwMDA3MkY5QjEwMTAwMDAwMDAwNzMxNQorOjEwMzA4MDAwRjlCMTAxMDAwMDAwMDA3NEY5QjEwMTAwNTQwMDAwNDBFMgorOjEwMzA5MDAwOTU5ODAxMDBEQzlGMDA0MDgxMzIwMTAwMDAwMDAwNzAyMworOjEwMzBBMDAwOTVCMDAxMDAxNDA2MjI3MEI1NkYwMDAwMDAwMDgwNDE0OQorOjEwMzBCMDAwOTdCMDAxMDAwMDAwODA0MDk3QjAwMTAwMDQwMDAwNDA3QworOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDA0NTY3MDBBNkUwQjIwMTAwMDEyMzAwNzA0NAorOjEwMzBFMDAwRTE5QTAxMDBDREVGMDBBNkUyQjIwMTAwODlBQjAwNzFDOAorOjEwMzBGMDAwRTM5QTAxMDBCQTk4MDBBNkU0QjIwMTAwRkVEQzAwNzI3NworOjEwMzEwMDAwRTU5QTAxMDAzMjEwMDBBNkU2QjIwMTAwNzY1NDAwNzM4MQorOjEwMzExMDAwRTc5QTAxMDBEMkMzMDBBNkU4QjIwMTAwRjBFMTAwNzQxMgorOjEwMzEyMDAwRTk5QTAxMDA4MDE2MDA0QTQ0QzkwMTAwMDAwMDAwMDcyNgorOjEwMzEzMDAwODFCMDAxMDAwMDAwMDA0QTgwRDAwMTAwMDAwMDAwNDA4MgorOjEwMzE0MDAwRjdCMTAxMDAyNTA2QTI0MTgxNTAwMDAwODAxNjAwNEExNworOjEwMzE1MDAwNDRDOTAxMDBGQzE2MkE0N0U3QjUwMTAwMDMwMDAwNEFGNAorOjEwMzE2MDAwRThFNTAxMDAwMDAwMDA0MDhEQjAwMTAwNTAwMzAwNDA4MAorOjEwMzE3MDAwQTM5OTAxMDA4MDE2M0Q0NjhERTAwMTAwMDAwMDAwNTAzQgorOjEwMzE4MDAwODlCMDAxMDAwMDAwMDBGQzQwQjAwMTAwMDAwMDAwNDFENworOjEwMzE5MDAwQTNDMTAxMDAyRTA2QTI0MTg5NTAwMDAwMDAwMDAwNzA2QQorOjEwMzFBMDAwRUJCMjAxMDAwMDAwMDA3MUVEQjIwMTAwMDAwMDAwNzJGRQorOjEwMzFCMDAwRUZCMjAxMDAwMDAwMDA3M0YxQjIwMTAwMDAwMDAwNzRFMgorOjEwMzFDMDAwRjNCMjAxMDAwMDAwMDA0MDgzQjAwMTAwMEYwMDAwNDE5NQorOjEwMzFEMDAwODA4ODAxMDA1MDAzMDA0MEEyQzkwMTAwNEIwNkEwNTBBNgorOjEwMzFFMDAwODM2QzAwMDAwRDAwMDA0MDk4QzgwMTAwMDAwMDAwNEZGMworOjEwMzFGMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA4NgorOjEwMzIwMDAwODZCMDAxMDAwODAwMDA0MDk4QzgwMTAwMDAwMDAwNEY4RgorOjEwMzIxMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA2NQorOjEwMzIyMDAwODZBNDAxMDAwMjAwMDA0MDk4QzgwMTAwMDAwMDAwNEY4MQorOjEwMzIzMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA0NQorOjEwMzI0MDAwODZBNDAxMDA1MDAzMDA0MEEyQzkwMTAwMDAwMDAwNDMxMQorOjEwMzI1MDAwNDBBNDAxMDAwMTAwMDAyMDg4RTQwMTAwMDAwMDAwNUY5QworOjEwMzI2MDAwNDFGMDAxMDAwMDAwMDA0NDQwOTQwMTAwMDUwMDAwNzU5OQorOjEwMzI3MDAwODlFNDAxMDAxQjAwMDA3NTg1RjQwMTAwMDAwMDAwNDQ5MgorOjEwMzI4MDAwODQ5NDAxMDA1NTA2QTM1MzgzNkMwMDAwMDAwMDAwNzY2RgorOjEwMzI5MDAwODlCMDAxMDAwMDAwMDA3Nzg5ODQwMTAwMDAwMDAwNzZGOQorOjEwMzJBMDAwOEJCMDAxMDAwMDAwMDAyMDhCQTQwMTAwMDAwMDAwNzgxQQorOjEwMzJCMDAwOEI4NDAxMDA2NDA2MDA0NTg4OTQwMDAwMjcwMDAwNDFDQgorOjEwMzJDMDAwODBDRTAxMDA1QTA2QUE0MDgxMzIwMDAwMDAwMDAwNzYzQworOjEwMzJEMDAwODlCMDAxMDAwMDAwMDA3Nzg5QTQwMTAwNjQwNjAwNzgyRAorOjEwMzJFMDAwODlBNDAwMDAzQjAwMDA0MTgwQ0UwMTAwNTcwNkFBNDA5RgorOjEwMzJGMDAwODEzMjAwMDAwMDAwMDA3Njg5QjAwMTAwMDAwMDAwNzdGNAorOjEwMzMwMDAwODk4NDAxMDAwMDAwMDA3NjhCQjAwMTAwMDAwMDAwNzg4NQorOjEwMzMxMDAwOEI4NDAxMDAwMDAwMDA0NTg4OTQwMTAwMDAwMDAwNzdDNAorOjEwMzMyMDAwOEJCMDAxMDAwMDAwMDA3ODhCODQwMTAwNjQwNjAwNDUyQQorOjEwMzMzMDAwODg5NDAwMDAwMDAwMDA0NDg0QzAwMTAwMDAwMDAwNzk2RgorOjEwMzM0MDAwODVDMDAxMDAwMDAwMDAyMDg0QzAwMTAwNkIwNkEzNTM2QgorOjEwMzM1MDAwODM2QzAwMDA4MjVBMDBBNjg0QzAwMTAwOTk3OTAwNDI2MworOjEwMzM2MDAwODRDODAxMDA3ODA2MDA0MDgxQjIwMDAwMjcwMDAwNDFCNworOjEwMzM3MDAwODBDRTAxMDA3MDA2QUE0MDgxMzIwMDAwRDk2RTAwQTZGRQorOjEwMzM4MDAwODRDMDAxMDBBMUVCMDA0Mjg0QzgwMTAwNzgwNjAwNDAxRgorOjEwMzM5MDAwODFCMjAwMDAzQjAwMDA0MTgwQ0UwMTAwNzUwNkFBNDBDQQorOjEwMzNBMDAwODEzMjAwMDAxQjhGMDBBNjg0QzAwMTAwRENCQzAwNDJGQgorOjEwMzNCMDAwODRDODAxMDA3ODA2MDA0MDgxQjIwMDAwNjJDQTAwQTZGRAorOjEwMzNDMDAwODRDMDAxMDBENkMxMDA0Mjg0QzgwMTAwNzgwNjAwNDBENAorOjEwMzNEMDAwODFCMjAwMDAwMDAwMDA3OEYzQjIwMTAwMDAwMDAwNzcyNQorOjEwMzNFMDAwRjFCMjAxMDAxRTAwMDA3Njg5RTQwMTAwMDIwMDAwNzZCRgorOjEwMzNGMDAwRUZGNjAxMDAwMDAwMDA0NEVFOTYwMTAwMDAwMDAwNzVBOQorOjEwMzQwMDAwRURCMjAxMDAwMDAwMDA0MkVBQjIwMTAwMDAwMDAwNDFGQworOjEwMzQxMDAwODNDMDAxMDA0RjAwMDA0MTgwQ0UwMTAwMzcwNjJBNDBFMgorOjEwMzQyMDAwODEzMjAwMDAwMDAwMDA3NUUxQzIwMTAwMDAwMDAwNzY1QQorOjEwMzQzMDAwRTNDMjAxMDAwMDAwMDA3N0U1QzIwMTAwMDAwMDAwNzg0RgorOjEwMzQ0MDAwRTdDMjAxMDAwMDAwMDA3OUU5QzIwMTAwMkIwNjgxNDFCQQorOjEwMzQ1MDAwOEQ0MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA2NworOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwMDAwMDA1MEZEOTMwMTAwNDAxNjAwNDA4MgorOjEwMzRBMDAwNDU5OTAxMDBEQjlGMDA0MDQ5MzEwMTAwMDgwMDAwNDhCOAorOjEwMzRCMDAwQjJDQjAxMDAxNTA0MDA0MDgxMzIwMTAwQjkwNjIyNDA2MAorOjEwMzRDMDAwOEY2QzAwMDBEQTlGMDA0MDgxMzIwMTAwQjkwNkEyNDBGMworOjEwMzREMDAwOTc2QzAwMDA1RTE2MDA0MDQzOTkwMTAwN0MxNjIwRjZCMAorOjEwMzRFMDAwRTBCMTAxMDAwMDAwMDA0MDMxQjMwMTAwOUQwNjIyNEYxMQorOjEwMzRGMDAwOEY3QzAwMDAwMDAwMDA1MUZEOTMwMTAwOUYwNjIyNDBEOAorOjEwMzUwMDAwOEY3QzAwMDBBMzA2MDA1NEZEOTMwMDAwQTEwNjIyNDIxOAorOjEwMzUxMDAwOEY3QzAwMDAwMDAwMDA1MkZEOTMwMTAwQTMwNjIyNDFCMQorOjEwMzUyMDAwOEY3QzAwMDAwMDAwMDA1M0ZEOTMwMTAwQjcwNjIyNTE3QworOjEwMzUzMDAwRkQ3RjAwMDAzODA1MDA0MDgxMzIwMTAwMEMwMDAwNDg4QQorOjEwMzU0MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwQjIwNkEyNDA1QgorOjEwMzU1MDAwQjU2RjAwMDAxRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDgwNworOjEwMzU2MDAwOTYzMDAxMDAwMDAwMDBEQTk3QzAwMTAwMDQwMDAwNEIxMworOjEwMzU3MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMEUwMDAwNDg2RgorOjEwMzU4MDAwQjJDQjAxMDAyMDA0MDA0MDgxMzIwMTAwMEMwMDAwNDg1MQorOjEwMzU5MDAwQjJDQjAxMDAwMDAwMDAzMEI1QjMwMTAwMjAwNDAwNDBCMAorOjEwMzVBMDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAzRgorOjEwMzVCMDAwODEzMjAxMDBCNjA2MjI0MEI1NkYwMDAwQkEwNjAwNTQwMQorOjEwMzVDMDAwRkQ5MzAwMDAwMDAwMDA1MUZEODMwMTAwMUMwMDAwRkU3RgorOjEwMzVEMDAwN0ZEOTAxMDBCQTA2QTY0MDgxMzIwMDAwMDAwMDAwNTVFNAorOjEwMzVFMDAwRkQ5MzAxMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDAxMgorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDBFNzlGMDA0MDgxMzIwMTAwQzQwNjIyNUNCNQorOjEwMzYyMDAwMUY3QzAwMDBFMzlGMDA4ODFDQjAwMDAwRTk5RjAwNUM0NQorOjEwMzYzMDAwMUYwMDAxMDAwMDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDBGRAorOjEwMzY0MDAwRTFCMTAxMDAwNDAwMkQwMzQ4QjEwMTAwMDAwMDAwRjBDOQorOjEwMzY1MDAwM0NCMDAxMDAyODAwMDAxNDAyQzgwMTAwMDAwMDAwMDE3NQorOjEwMzY2MDAwMzRCMDAxMDAwMDAwMkQwNTMyQjAwMTAwMjIwMDAwMDUzOQorOjEwMzY3MDAwMEFDODAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjg1QQorOjEwMzY4MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhDQworOjEwMzY5MDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwRUE5RjAwNDAxRAorOjEwMzZBMDAwODEzMjAxMDAwMDAwMDA0MDIzQjAwMTAwMEEwNzIyMDExRQorOjEwMzZCMDAwODAzMjAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJFQTQwMgorOjEwMzZDMDAwODBCMDAxMDAwMDAwMDAxMDQ4QzEwMTAwRDkwNkEzMDcyNgorOjEwMzZEMDAwMDI2QzAwMDBEQTA2NjgwMTFBQjAwMDAwMDAwMDY4MDdGQQorOjEwMzZFMDAwMUFCMDAxMDAwMDAwMDAwRDAyRDAwMTAwMDAwMDAwMDUyQQorOjEwMzZGMDAwRjBCMTAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI3OAorOjEwMzcwMDAwRTBCMTAxMDAwMDAwMDAwRDBBQzAwMTAwRUMwNjIyNDBGQgorOjEwMzcxMDAwMDM2QzAwMDBFNjA2MjI0MjIzNkMwMDAwMDAwMDAwNDExQQorOjEwMzcyMDAwMjNDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwQTQ5NworOjEwMzczMDAwNjJERDAxMDAyMzA3Mjg0MDgxMzIwMDAwRTMwNjAwNDBEQgorOjEwMzc0MDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDdBRQorOjEwMzc1MDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwRTgwNkE4NDAyQworOjEwMzc2MDAwMjMzMDAwMDBFMzlGMDA4ODFDQjAwMDAwMjMwNzAwNDBDNgorOjEwMzc3MDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDc3RQorOjEwMzc4MDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwRUUwNkE4NDBGNgorOjEwMzc5MDAwMjMzMDAwMDBFMzlGMDA4ODFDQjAwMDAwMjIwMDAwMTlDNQorOjEwMzdBMDAwNDhDOTAxMDAwMDAwMkQxNDQ4QzEwMTAwMEYwMDAwRjJCQgorOjEwMzdCMDAwM0E4ODAxMDAwMDAwMDA0MjNCRTAwMTAwMEUwMDAwMTRDNgorOjEwMzdDMDAwMDJDODAxMDAwMDAwMDAxRDAyQzAwMTAwRkEwNjIzMUExMQorOjEwMzdEMDAwMDI1MDAwMDAwMDAwMDA0NjAzQzAwMTAwMjMwNzAwMDE2MgorOjEwMzdFMDAwMzRDMDAwMDAwQzAwMkQxRDQ4QzEwMTAwRjAwMDAwRjJBMworOjEwMzdGMDAwMzA4ODAxMDAwMDAwMDA0MjMxRjAwMTAwMDAwMDAwMTQ5OAorOjEwMzgwMDAwMDJCMDAxMDAwMDAwMDAxRDAyQzAwMTAwMDAwMDAwMTgwRAorOjEwMzgxMDAwMDJDMDAxMDAwMjA3MjIxQTAyNTAwMDAwMjMwNzAwMDEyMworOjEwMzgyMDAwMzRDMDAwMDAyMjAwMDAxOTQ4QzkwMTAwMDIwMDJEMTQxNAorOjEwMzgzMDAwNDhDMTAxMDAwMDAwMDBGNjE0QjAwMTAwMDAwMDAwMURBNgorOjEwMzg0MDAwMTREMDAxMDAwMDAwMDAxODE0RDAwMTAwMDAwMDAwMUU3OAorOjEwMzg1MDAwMjRCMDAxMDAxMjAwMDAxNzEwQzgwMTAwMjMwNzAwMUE0RAorOjEwMzg2MDAwMTBDMDAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDAwQTQ2MAorOjEwMzg3MDAwODZCMDAxMDAwMDAwMkUxMDQ4QzEwMTAwMEYwN0EzMTJGRQorOjEwMzg4MDAwMEU2QzAwMDAxMDA3NjAwNzFBQjAwMDAwMDAwMDYwMTIwNAorOjEwMzg5MDAwMUFCMDAxMDAwMDAwNjgwRDE2OTQwMTAwRkZGRjAwMEIzNAorOjEwMzhBMDAwMTZEODAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwMEM3MworOjEwMzhCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMTBDMgorOjEwMzhDMDAwODZDMDAxMDAwMDAwMDA0NjYxQjEwMTAwMjAwMDAwNDNGNQorOjEwMzhEMDAwNjJERDAxMDAxNzA3QTg1QzFGMTAwMDAwNDAwNzIyMERFMQorOjEwMzhFMDAwMTQ1MDAwMDA0MDA3MjIwRDI0NTAwMDAwMDAwMDAwMEQ3RAorOjEwMzhGMDAwMTBDMDAxMDAxRTA3MjI0MjIzNkMwMDAwMjMwNzAwNDE3NAorOjEwMzkwMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAyQgorOjEwMzkxMDAwNjJERDAxMDAxRjA3QTg1QzFGMDAwMDAwRTM5RjAwODgxNAorOjEwMzkyMDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwM0YwN0EyMERDMgorOjEwMzkzMDAwMEU1MDAwMDAyRTA3MjI0NjFGN0MwMDAwMDAwMDAwNDZBQgorOjEwMzk0MDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwMkMwNzIyRjJDNAorOjEwMzk1MDAwNjQwNjAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA1MworOjEwMzk2MDAwNjJERDAxMDAyOTA3QTg0MDgxMzIwMDAwRTM5RjAwODg0MgorOjEwMzk3MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY5OQorOjEwMzk4MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg5RgorOjEwMzk5MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMzMwNzFGRjA2OAorOjEwMzlBMDAwMEUzMDAwMDBEMzA2MDA0QzBEQzAwMDAwMDAwMDJFNUY1QQorOjEwMzlCMDAwMEY4MDAxMDBEMzA2MjMwNzE0NkMwMDAwMzAwMDAwMTBCNAorOjEwMzlDMDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDNGMworOjEwMzlEMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTY4RAorOjEwMzlFMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDcwMQorOjEwMzlGMDAwNjFCMTAxMDAyMDAwMDBBNDYyREQwMTAwM0MwN0E4NDY3RgorOjEwM0EwMDAwMUYxMDAwMDBEMzA2MDAwMzBDQjAwMDAwRDMwNjAwMEQwOQorOjEwM0ExMDAwMThDMDAwMDA1RjA3QTI0NDFGN0MwMDAwMDAwMDAwMTlDRQorOjEwM0EyMDAwMEFCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMEEwMDJEMTQ1NworOjEwM0EzMDAwNDhDMTAxMDAwMjAwMjA0MEU1QjEwMTAwMDQwMDIwNDAxRgorOjEwM0E0MDAwRTVCMTAxMDAwRDAwMkQxRDQ4QzEwMTAwMDkwMDAwRjM4MgorOjEwM0E1MDAwMzg4ODAxMDAwRDAwMjA1MEU3QjEwMTAwMDQwMDJENDAxRQorOjEwM0E2MDAwM0ZCMDAxMDAwMDAwMDBGNDMyQjAwMTAwMDQwMDIwNDAyQgorOjEwM0E3MDAwRTFCMTAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDJEMTQzOQorOjEwM0E4MDAwNDhDMTAxMDAwMjAwMDAxRDk0RjQwMTAwMDAwMDAwNDA0NAorOjEwM0E5MDAwOTFCMDAxMDA1MjA3QTBGQzkwNDAwMDAwMDAwMDAwNDFERQorOjEwM0FBMDAwOTFDMDAxMDA1MDA3QTI0MTk1NTAwMDAwMDAwMDAwQTQwMQorOjEwM0FCMDAwOTZCMDAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDg0NgorOjEwM0FDMDAwRjBCMTAxMDAwMDAwMDA0QjQ4QjEwMTAwMDAwMDAwMThGNworOjEwM0FEMDAwNDhDMTAxMDAwMjAwMDAxODk0RjQwMTAwMDAwMDJEMThGNAorOjEwM0FFMDAwOTBCMDAxMDA1QzA3QTBGQzkwNDAwMDAwMDAwMDAwNDE4NQorOjEwM0FGMDAwOTFDMDAxMDA1QTA3QTI0MTk1NTAwMDAwMDAwMDAwNDgwMworOjEwM0IwMDAwRTBCMTAxMDAxMDAwMjA0MEU1QjEwMTAwMDQwMDJEMDVFNgorOjEwM0IxMDAwNDhCMTAxMDAwMDAwMDBGODgwQjAyRDAwMDAwMDAwRjA2NgorOjEwM0IyMDAwMTZCMDJEMDAyMjAwMDAwNTQ4QzkyRDAwMDAwMDAwMTQyOQorOjEwM0IzMDAwNDhDMTJEMDA2NDA3NDMzMDNEMDcyQzAwMDAwMDAwOUU2MworOjEwM0I0MDAwODVCMDJEMDAwMDAwMUI0MTNEQzMyRDAwMDQwMDIwNDIyNAorOjEwM0I1MDAwRUNCMTJEMDAwMDAwMDAxRTgyQjAwMTAwMDIwMDJFMURGRAorOjEwM0I2MDAwODJDMDAxMDAwMDAwNjYxODgyQzAwMTAwMDAwMDAwNDIwRgorOjEwM0I3MDAwODBDMDAxMDA2RTA3QTA0MTgwNDQwMDAwMDAwMDAwNDFBOQorOjEwM0I4MDAwODFDMDAxMDAxMDAwMDA0MDkyRjQwMTAwMEEwMDJFMzBCNAorOjEwM0I5MDAwODE4NDAxMDA3MjA3OTA0MDkyNDAwMDAwMDAwMDAwNDFDMworOjEwM0JBMDAwOTNDMDAxMDAwMDAwNjYyMDkzQTQwMTAwMDAwMDAwMURFNgorOjEwM0JCMDAwNDhDMTAxMDAwNDAwMjAxOUU4QjEwMTAwMDAwMDAwMUUwNgorOjEwM0JDMDAwMTZDMDAxMDA3ODA3QTAxOTE2NDQwMDAwMDAwMDAwNDE0QgorOjEwM0JEMDAwMTdDMDAxMDAwRDAwMkYxRTMyQzAwMTAwN0QwN0EyNDA1QQorOjEwM0JFMDAwMTU2QzAwMDA3QzA3QTAxQzE2NDAwMDAwMDAwMDAwNDE3RQorOjEwM0JGMDAwMTdDMDAxMDAwMDAwNjNGMzM4OTQwMTAwMTAwMDAwMDVCNQorOjEwM0MwMDAwNDhDOTAxMDAwNDAwMkUxRTk4QjAwMTAwMDAwMDYwMUE4RgorOjEwM0MxMDAwOThDMDAxMDAwQzAwMjA0MEUxQjEwMTAwOEIwNzIyNDY1MgorOjEwM0MyMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTA1MworOjEwM0MzMDAwNDJDOTAxMDA4OTA3MjJGMjY0MDYwMDAwMDAwMDAwNDcyMworOjEwM0M0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwODYwN0E4NDA1QworOjEwM0M1MDAwODEzMjAwMDBFMzlGMDA4ODFDQjAwMDAwMjA4MDAwMDMzOAorOjEwM0M2MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMzA4MDAwMTBFMgorOjEwM0M3MDAwNDRDOTAxMDAxMjAwMDAxQUYwQzkwMTAwMDAwMDAwMTczOQorOjEwM0M4MDAwRjBCMTAxMDAxMDAwMDAwNUUwQzkwMTAwMzAwMDAwMTA5MworOjEwM0M5MDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDAyNAorOjEwM0NBMDAwNjJERDAxMDA5MTA3QTg0MDgxMzIwMDAwOUIwNzIyNUM4MQorOjEwM0NCMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTBBOAorOjEwM0NDMDAwNDhDMTAxMDA5QjA3MjJGMjY0MDYwMDAwMDAwMDAwNDY4NAorOjEwM0NEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTgwN0E4NDBCQQorOjEwM0NFMDAwODEzMjAwMDBFMzlGMDA4ODFDQjAwMDAwRUI5RjAwNUM2NQorOjEwM0NGMDAwMUYwMDAxMDAyMDAwMkYwNTQ4QjEwMTAwMDAwMDAwMEI0QgorOjEwM0QwMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwQTEwNzkwRjI5QgorOjEwM0QxMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBBRQorOjEwM0QyMDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwMURBMworOjEwM0QzMDAwMkFDMDAxMDAwMDAwMDA1MDJCRTAwMTAwMDAwMDAwRjI0QQorOjEwM0Q0MDAwMkE5NDAxMDAzMDgwMDAxMDQyQzkwMTAwQUMwNzIyRjIyMQorOjEwM0Q1MDAwNjQwNjAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA1MgorOjEwM0Q2MDAwNjJERDAxMDBBOTA3QTg0MDgxMzIwMDAwRTM5RjAwODhCRQorOjEwM0Q3MDAwMUNCMDAwMDAwMDgwMDAxNzEwREMwMTAwQzkwNzIyNDBDMQorOjEwM0Q4MDAwMTU2QzAwMDBCNDA3QTI0NDFGN0MwMDAwMDAwMDAwNDQzMgorOjEwM0Q5MDAwMUY5MDAxMDBCMzA3MjI5RjEzNkMwMDAwMDIwMDAwODhFRgorOjEwM0RBMDAwMUNDQzAxMDBFNDlGMDA0MDgxQjIwMDAwMDAwMDAwNDFGMworOjEwM0RCMDAwM0ZDMzAxMDBFNjlGMDA0MDgxMzIwMTAwQjcwN0EyNDFFNgorOjEwM0RDMDAwODc3QzAwMDAwMDAwMDAxRTNFQzAwMTAwQzkwNzIyNDBBMQorOjEwM0REMDAwMTU2QzAwMDBCQTA3MjAxRTE0NkMwMDAwMDAwMDAwMEFEOQorOjEwM0RFMDAwM0NCMDAxMDBFNTlGMDAxRTI0MzAwMTAwQkYwNzIyMDhGRgorOjEwM0RGMDAwMkUzMDAwMDAwMDAwMDA1MjExQzAwMTAwMDAwMDAwMUEyNworOjEwM0UwMDAwMTBDMDAxMDAyMzA3MDA0MDE3QjAwMDAwRTQ5RjAwODhBNQorOjEwM0UxMDAwMUNCMDAwMDBFNTlGMDA0MDgxMzIwMTAwQkMwN0EyMDhGMQorOjEwM0UyMDAwMkUzMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDA5MworOjEwM0UzMDAwODc5ODAxMDAwMDgwMDAwMzQ0OTkwMTAwMDQwMDIyMDRENworOjEwM0U0MDAwRTAzMTAwMDBFODlGMDAxRjhDMzAwMTAwMDAwMDAwNDBCRQorOjEwM0U1MDAwMEZCMDAxMDBFMjlGMDA1QzFGOTAwMDAwMDA4MDAwMDM5MworOjEwM0U2MDAwNDQ5OTAxMDAwNDAwMjIwNEUwMzEwMDAwRTY5RjAwNDA3NAorOjEwM0U3MDAwODEzMjAxMDBDRTA3QTI0MTg3N0MwMDAwQ0YwNzAwMUVERgorOjEwM0U4MDAwM0VDMDAwMDAwMDAwMDAxRjhDQjAwMTAwMDAwMDAwNDA5OAorOjEwM0U5MDAwMDVCMDAxMDBFODlGMDA0MDBGMzAwMTAwRTI5RjAwNUM4OAorOjEwM0VBMDAwMUY5MDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwM0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwM0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwM0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwM0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwM0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwM0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwM0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwM0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwM0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwM0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRjcwNzAwQkM4RAorOjEwM0ZEMDAwODBCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBGNgorOjEwM0ZFMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBFNQorOjEwM0ZGMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBENQorOjEwNDAwMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBDNAorOjEwNDAxMDAwODFCMjAwMDAzMTgwMDA0MDgxQjIwMDAwMzQ4MDAwNDA1NQorOjEwNDAyMDAwODFCMjAwMDAzNTgwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNDAzMDAwODFCMjAwMDAxQjgwODE4MDgwMzIwMDAwMTQ4N0EyNDA4MgorOjEwNDA0MDAwOTE2RjAwMDAwMDAwMDA0QzkwQjMwMTAwNUM5NTJFQTIxRgorOjEwNDA1MDAwODBCMDAxMDBGRjAwMDA4MEY0ODkwMTAwOTA5NTJBQzgxQgorOjEwNDA2MDAwRTVCMTAxMDAwMDAwMDBBMUYwQjEwMTAwMDAwMDAwNDAzNgorOjEwNDA3MDAwRjBCMTAxMDAwMDAwMDBBNEYwQjEwMTAwMDAwMDAwRDA4OAorOjEwNDA4MDAwRjBCMTAxMDAwMDAwMDBEMUYwQjEwMTAwMDAwMDAwRDI0OQorOjEwNDA5MDAwRjBCMTAxMDAwMDAwMDA0Q0YwQjEwMTAwMDAwMDAwRDRCQworOjEwNDBBMDAwRjBCMTAxMDAwMDAwMDBEM0YwQjEwMTAwMDAwMDAwRUUwQgorOjEwNDBCMDAwRjBCMTAxMDAwMDAwMDA0RUYwQjEwMTAwMDAwMDAwNDAyRQorOjEwNDBDMDAwNDRCMTAxMDAxODgwMTE4MTk4MzAwMDAwMDAwMDUxNDA3NworOjEwNDBEMDAwODFCMjAxMDAxQTgwMTE4Mjk4MzAwMDAwMDAwMDUyNDAyNQorOjEwNDBFMDAwODFCMjAxMDAxNDg3MDA0OEZEOTMwMDAwQjYwMzAwNDAzMAorOjEwNDBGMDAwQTE5OTAxMDAyMzgwQTI0MkZEN0YwMDAwMjA4MDAwODA2MgorOjEwNDEwMDAwODAzMjAwMDAyMjgwMTE4MTgyMzAwMDAwMjI4MDUxNDBFNAorOjEwNDExMDAwODFCMjAwMDAyMjgwMTE4MjgyMzAwMDAwMjI4MDUyNDA1MQorOjEwNDEyMDAwODFCMjAwMDAyQzgwMDA0OEZEOTMwMDAwMjc4MDAwODBCMQorOjEwNDEzMDAwODAzMjAwMDAyNjgwQTI1MzA3N0MwMDAwMDAwMDUxNTMwQgorOjEwNDE0MDAwMDc5MDAxMDAyQTgwMDA1MjA3OTAwMDAwMjk4MEEyNTJBNworOjEwNDE1MDAwMDc3QzAwMDAwMDAwNTI1MjA3OTAwMTAwMDAwMDAwNTM0RAorOjEwNDE2MDAwMDc5MDAxMDAwMDAwMDA0OEZEOTMwMTAwMDAwMDAwNDY5OAorOjEwNDE3MDAwRjM5MzAxMDA1Qzk1MkVBMjUyQjMwMTAwRkYwMDAwODA3MgorOjEwNDE4MDAwRjQ4OTAxMDAwMDAwMDA0Q0U0QjEwMTAwMDAwMDAwQTkyNgorOjEwNDE5MDAwNDVCMTAxMDAzMDgwMDA0QzgwQjIwMDAwMDAwMDQ1NDA3NQorOjEwNDFBMDAwODFCMjAxMDAwMDAwNTU0MDgxQjIwMTAwQUY4MjA1NDA5QworOjEwNDFCMDAwNDlCMTAwMDBBRjgyMDU0MDQ5QjEwMDAwMDAwMDA1NDA1MAorOjEwNDFDMDAwNDlCMTAxMDA0QzAxMDA0MDgxMzIwMTAwMDAwMDAwNEI2OAorOjEwNDFEMDAwREVCMjAxMDAwMDAwMDA0MEZEOTMwMTAwMDAwMDAwNDgzNQorOjEwNDFFMDAwRkQ4MzAxMDAwMjAwMDA0MDlCOUIwMTAwMDAwMDAwQTUzMAorOjEwNDFGMDAwOUNCMzAxMDA0ODAzMDA0MDgxMzIwMTAwNTg5NTIwNDRERgorOjEwNDIwMDAwRTBCMTAxMDAwNDk0MDA0MDQzOTkwMTAwMDAwMDAwRjI3NQorOjEwNDIxMDAwMjRCMTAxMDAwMDBDMDBFRTk2ODgwMTAwMDAwMDAwNEE2NQorOjEwNDIyMDAwOTdGMDAxMDA0NDgwQTI0Mzk3NkMwMDAwMDAwMDAwNDIxOAorOjEwNDIzMDAwRkQ5MzAxMDAwMEMwMDBBNjM2QjEwMTAwRDAxNDAwNDA3QgorOjEwNDI0MDAwNDc5OTAxMDAwNTAwMDA0MEY1OTkwMTAwMDAzODAwNDA0MQorOjEwNDI1MDAwRjU5OTAxMDAwMDA2MDA0MEY1OTkwMTAwMDAwMDAwNDBCQQorOjEwNDI2MDAwRjU5OTAxMDAwNTEwMDA0MEY1OTkwMTAwMDIwOTAwNDA5MAorOjEwNDI3MDAwRjU5OTAxMDAwNDAwMDA0MEY1OTkwMTAwNjAwMzAwNDAzOQorOjEwNDI4MDAwODEzMjAxMDA4ODAzMDA0MDgxMzIwMTAwQTAwMzAwNDAxOAorOjEwNDI5MDAwODEzMjAxMDBBMjgyMDA0MDgxMzIwMTAwOUE4MjAwNDBGNgorOjEwNDJBMDAwODEzMjAxMDA2MDk1MjA0MEUxQjEwMTAwNzA5NTIwNDAwRAorOjEwNDJCMDAwRTFCMTAxMDAwMDAwMDA0OUREOTEwMTAwMDAwMDAwNDA3MworOjEwNDJDMDAwOTFCMzAxMDBGOTk1MDA0MDgxMzIwMTAwMDAwMDAwNDBFNworOjEwNDJEMDAwODVCMzAxMDA1Qzk1MjA0MEUxQjEwMTAwMjc4MjAwNDBEOAorOjEwNDJFMDAwODEzMjAxMDA5MDA2MDA0MDgxMzIwMTAwMDAwMDAwNUYzMQorOjEwNDJGMDAwMkY4MTAxMDA4RDgxMDA0MDgxMzIwMTAwRkU5NTAwNDAzOAorOjEwNDMwMDAwODEzMjAxMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDU1NDBBQgorOjEwNDMxMDAwODFCMjAxMDBERDgyMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNDMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNDMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNDM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNDM1MDAwODFCMjAwMDAyODAwMDA0MDQ3OTkwMTAwQUY4MjAwNDE2RgorOjEwNDM2MDAwRTFDMTAwMDA3ODE4MDA0MDQ5OTkwMTAwMTkwNTIyNTQ2NAorOjEwNDM3MDAwODE3QzAwMDA2QzgwNDI0MDgxMzIwMDAwMDA4MjAwQjRFOQorOjEwNDM4MDAwNjlERjAxMDAwMDAwMUE0NDkzOTMwMTAwMjgwMDAwNDBGNworOjEwNDM5MDAwNDc5OTAxMDAxODA1MDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNDNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNDNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNDNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNDNEMDAwODFCMjAwMDA0MDgyMDA0MDgxMzIwMTAwN0Q4MDIyNDA5NQorOjEwNDNFMDAwOTc2QzAwMDA3QTgwNDI0MDgxMzIwMDAwMDAwMDAwNEY0QworOjEwNDNGMDAwNjk5MzAxMDAzODgxMDA1ODY5OTMwMDAwNTQxNjAwNDAwOQorOjEwNDQwMDAwNDc5OTAxMDAwMDAwMDBGRUY0QjEwMTAwODAwNTAwNDA2MgorOjEwNDQxMDAwODFCMjAwMDA4MDgwNDI0MDgxMzIwMDAwMDAwMDAwNEVFNgorOjEwNDQyMDAwNjk5MzAxMDAzODgxMDA1ODY5OTMwMDAwNDAxNjAwNDBFQworOjEwNDQzMDAwNDU5OTAxMDA0MDA1MDA0MDQ5MzEwMTAwRjYxNTAwNDA1MgorOjEwNDQ0MDAwNDM5OTAxMDA1QzE2MDA0MDQ1OTkwMTAwMDAwMDZFRkE5NgorOjEwNDQ1MDAwOEVCMDAxMDBDMTA1MDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNDQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNDQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNDQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNDQ5MDAwODFCMjAwMDA5NjgwMDA0MDgxQjIwMDAwNDA4MjAwNDA1RQorOjEwNDRBMDAwODEzMjAxMDA5NjgwMjI0MDk3NkMwMDAwOTM4MDQyNDA0OAorOjEwNDRCMDAwODEzMjAwMDAwMDAwMDA0RjY5OTMwMTAwMzg4MTAwNThFQworOjEwNDRDMDAwNjk5MzAwMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg1OQorOjEwNDREMDAwQjJDQjAxMDBEMDA1MDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNDRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNDRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNDUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNDUxMDAwODFCMjAwMDA4MzAyMDA0MDgxQjIwMDAwQjgwMjAwNDA3NgorOjEwNDUyMDAwODFCMjAwMDBENDlGMDA0MDgxQjIwMDAwRDU5RjAwNDBCRQorOjEwNDUzMDAwODFCMjAwMDBENjlGMDA0MDgxQjIwMDAwRDc5RjAwNDBBQQorOjEwNDU0MDAwODFCMjAwMDA3MjAxMDA0MTgxQzAwMDAwNTUwMTUxNDg1NAorOjEwNDU1MDAwRkQ5MzAwMDA1NTAxNTI0OEZEOTMwMDAwNTUwMTU1NDk1NworOjEwNDU2MDAwRkQ4MzAwMDA1NTAxNTY0QUZEODMwMDAwNTAwMTkxODFGMgorOjEwNDU3MDAwODAzMDAwMDA1NTAxNDU0MDgxQjIwMDAwNTAwMTkxODIxOQorOjEwNDU4MDAwODAzMDAwMDA1NTAxNDY0MDgxQjIwMDAwMDAwMDAwNDAyQworOjEwNDU5MDAwODlCMDAxMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjBDOAorOjEwNDVBMDAwMTZCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDAwMTRGNworOjEwNDVCMDAwNDhDMTAxMDBCNDgwNDMzMDNEMDcwMDAwMDAwMDAwOUU2OAorOjEwNDVDMDAwODVCMDAxMDAwMDAwMUI0MTNEQzMwMTAwMDQwMDIwNDJGMgorOjEwNDVEMDAwRUNCMTAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0I4NgorOjEwNDVFMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI3NAorOjEwNDVGMDAwRjFCMTAxMDAwMDAwMDBEM0YxQjEwMTAwMDAwMDAwNDI2MAorOjEwNDYwMDAwRjBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMjA3MAorOjEwNDYxMDAwNjJERDAxMDAwMDAwQThEMEUxQjEwMDAwQkY4MDAwNDBEMQorOjEwNDYyMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MDAwNDBBMgorOjEwNDYzMDAwOEJCMzAwMDBCMTAzMDA0MEExOTkwMTAwQzc4MEEyNDJFMgorOjEwNDY0MDAwOTc2RjAwMDAwMDAwMDA0NUExQzEwMTAwMDAwMDAwMDBCQworOjEwNDY1MDAwODBCMDAxMDAwMDAwQTIwNDgwOTQwMDAwODAxNTNGNDI1OQorOjEwNDY2MDAwOTdFMzAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAwMDYwMDMzMQorOjEwNDY3MDAwMDI5NDAxMDAwMDAwMDA0MDA3QjAwMTAwMDQwMDAwQ0JEQworOjEwNDY4MDAwOTlDQjAxMDAwMDAwMDBDQ0YzODMwMTAwRDE4MEEyNDI0RAorOjEwNDY5MDAwOTc2RjAwMDAwMDAwMDBDQkYzOTMwMTAwQUUwMzAwQ0I0NgorOjEwNDZBMDAwQTNDOTAxMDAwMDAwMDAyMDQ0QjEwMTAwMDAwMDAwNDQ0MworOjEwNDZCMDAwRjFCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMDRCMQorOjEwNDZDMDAwRjBCMTAxMDAwMDAwMDBBMUUwQjEwMTAwMDUwMDAwNDBEMAorOjEwNDZEMDAwNjE5OTAxMDAyMDAwMDAyMDYyREQwMTAwRDg4MEE4NDAxRgorOjEwNDZFMDAwODEzMjAwMDBGOTAyMDAyMDQyMzEwMTAwMDAwMEEyNDFBNQorOjEwNDZGMDAwMDU2QzAxMDAwMDAwODBDQkRCOTEwMTAwMDAwMDE5NDEzNgorOjEwNDcwMDAwOEJCMzAxMDA2MDAwMDA0MDYxOTkwMTAwREU4MEE4QjExOAorOjEwNDcxMDAwOEMzMzAwMDA2MDAwMDA0MDYxOTkwMTAwRTA4MEE4QjE4NgorOjEwNDcyMDAwOTQzMzAwMDBFNjgwMTRDNjgxMzIwMDAwMTgwMDAwQzZGMQorOjEwNDczMDAwODNGNDAxMDBGNDgyMjI0RjgzMDQwMDAwQzI4MDAwNDAxMQorOjEwNDc0MDAwODFCMjAwMDBGRjAxMDBDNjgxODgwMTAwMDAwMDAwQzZBMAorOjEwNDc1MDAwOTdBMzAxMDBDMjgwMUY1Qzk3NTMwMDAwNTg4MjFFQzZCOQorOjEwNDc2MDAwODEzMjAwMDAwMDAwMkY0MzgxRjAwMTAwRUM4MDAwNDAwNgorOjEwNDc3MDAwMTBDOTAwMDAzOTgxMDA0MDgxQjIwMDAwNkE4MTAwNDAwOAorOjEwNDc4MDAwODFCMjAwMDAyNDgyMDBDQTYzQjMwMDAwNjE4MTAwNDA0RQorOjEwNDc5MDAwODFCMjAwMDA0ODgxMDA0RDgzQjAwMDAwNTI4MTAwNEU3QworOjEwNDdBMDAwNjFCMTAwMDA0MTgxMDA0MDg1QjAwMDAwNDg4MTAwNENBQgorOjEwNDdCMDAwODNCMDAwMDAyNDgxMDA0MDg1QjAwMDAwRTM4MTAwNDAwOAorOjEwNDdDMDAwNDlCMTAwMDA3MTgxMDA0MEMxQjEwMDAwREY4MTAwNDBBQgorOjEwNDdEMDAwODFCMjAwMDA0MTgxMDA0MDg1QjAwMDAwRjAwMzAwNDAzQworOjEwNDdFMDAwNDlCMTAwMDBGNDgyMDBDQTlCQjMwMDAwN0I4MTAwNDAwNQorOjEwNDdGMDAwQzFCMTAwMDA3RjgxMDA0MEMxQjEwMDAwODY4MTAwNDA0RQorOjEwNDgwMDAwQzFCMTAwMDA4NzgxMDA0MEMxQjEwMDAwODg4MTAwNDAzMworOjEwNDgxMDAwQzFCMTAwMDA4OTgxMDA0MEMxQjEwMDAwOEE4MTAwNDAxRgorOjEwNDgyMDAwODFCMDAwMDA4QTgxMDA0MTgxQjAwMDAwMTg4MjAwNDAwMAorOjEwNDgzMDAwODFCMjAwMDA5NzgyMDBCQkFCQjMwMDAwMjU4MjAwQ0FBMgorOjEwNDg0MDAwQ0ZCMzAwMDBDODAzMDA0MDQ5QjEwMDAwRTgwMzAwNDBCNgorOjEwNDg1MDAwODFCMjAwMDAyNjgyMDA0MDgxQjIwMDAwRjQ4MjAwNDA1NAorOjEwNDg2MDAwODFCMjAwMDBFMDAzMDA0MDgxQjIwMDAwRjQ4MjAwQ0E3RgorOjEwNDg3MDAwNzdCMzAwMDA0OTgxMDA0RDgzQjAwMDAwNTA4MTAwNEVBNQorOjEwNDg4MDAwNjFCMTAwMDA0MTgxMDBCQjg1QjAwMDAwNDk4MTAwNEM0RQorOjEwNDg5MDAwODNCMDAwMDA0MTgxMDBCQjg1QjAwMDAwMjQ4MTAwQkJEMworOjEwNDhBMDAwODVCMDAwMDAxNjgxMDA0MDgxQjIwMDAwRjQ4MjAwQ0E4OQorOjEwNDhCMDAwNERCMzAwMDA3MDA1MDA0MDQ5QjEwMDAwQTAwNTAwNDA2NAorOjEwNDhDMDAwNDlCMTAwMDAxQzgxMjI0MjhGNkYwMDAwMUU4MTIyNDFFRAorOjEwNDhEMDAwOEY2RjAwMDAyMDgxMUVDQTgxMzIwMDAwMjI4MTFGQ0ExMgorOjEwNDhFMDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwRjQ4MjAwNDIxOAorOjEwNDhGMDAwOEZCMzAwMDAwMDAwMDBDQUNEQjEwMTAwRjQ4MjAwNDE3NgorOjEwNDkwMDAwOEZCMzAwMDAwMDAwMDBDQUNGQjEwMTAwRjQ4MjAwNDA2NAorOjEwNDkxMDAwOEZCMzAwMDAwMDgxMDBBNkM2QjEwMTAwRjQ4MjAwNDAwMAorOjEwNDkyMDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwRjQ4MjAwNDAwMAorOjEwNDkzMDAwOEZCMzAwMDA3ODE4MDA0MDQ5OTkwMTAwMTAwMDJGOUNBNworOjEwNDk0MDAwODlCMDAxMDAzQjgxMDA0MDM5MzMwMTAwMTgwMDJGOUJFMgorOjEwNDk1MDAwODlCMDAxMDAzQjgxMDA0MDM3MzMwMTAwMDAwMDJGOUFFRAorOjEwNDk2MDAwODlCMDAxMDAzQjgxMDA0MDM1MzMwMTAwMDgwMDJGOTlEOAorOjEwNDk3MDAwODlCMDAxMDAzQjgxMDA0MDMzMzMwMTAwMDA4MDAwQUU2QworOjEwNDk4MDAwNDdDOTAxMDA4MDAwMDA0MEYxOTkwMTAwMDAwMDAwQ0EwMQorOjEwNDk5MDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwNDAxODAwNDBGOAorOjEwNDlBMDAwRTE5OTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwQUU2NgorOjEwNDlCMDAwNjNERDAxMDAzNjgxMjg0MDgxMzIwMDAwMzM4MTAwNDBGMAorOjEwNDlDMDAwODFCMjAwMDAzNjgxNDI0MDgxMzIwMDAwMDAwMDAwNUM2QworOjEwNDlEMDAwNjk5MzAxMDBGNDgyMUE0NDkzOTMwMDAwMzk4MTQyNDBBNAorOjEwNDlFMDAwODEzMjAwMDAzODgxMDA1ODY5OTMwMDAwMDAwMDAwNDRDMworOjEwNDlGMDAwRjBEMTAxMDAwMDAwQTQ0MDgxQjIwMDAwNDA4MUEyNDAzQgorOjEwNEEwMDAwRTE2RDAwMDAwMDAwMDA0NDQ1RDEwMTAwMDAwMDgwNDAzRAorOjEwNEExMDAwRTFCMTAxMDAwMDAwODA0MUUxRDEwMTAwNDE4MTM3NUMzQQorOjEwNEEyMDAwNjEzMTAwMDAwMDAwMDA0MjYyQjEwMTAwNDU4MTI4NDA3MAorOjEwNEEzMDAwODEzMjAwMDA0MjgxMDA0MDgxQjIwMDAwMDAwMDAwQ0FDMworOjEwNEE0MDAwNjNCMTAxMDA0NTgxQTg0MDgxMzIwMDAwRjQ4MjE3NDAyMworOjEwNEE1MDAwODFCMjAwMDA0QTgxMDA0MDgxQjAwMDAwNEE4MTAwQkI2MQorOjEwNEE2MDAwODFCMDAwMDAwMDAwMDA0MTYwQjEwMTAwMDAwMDAwNDA4MgorOjEwNEE3MDAwNjJCMTAxMDA0QjgxQTg0MDgxMzIwMDAwMDAwMDAwQ0FGMQorOjEwNEE4MDAwNjNCMTAxMDBGNDgyMjg0MDgxMzIwMDAwNEQ4MTAwNDA3MgorOjEwNEE5MDAwODFCMjAwMDA1MDk1MDA0MDQ3OTkwMTAwNTM4MTAwQkI0RQorOjEwNEFBMDAwODdCMDAwMDA1MDk1MkY0MDg3QjAwMTAwNTU4MTIyNDAwQgorOjEwNEFCMDAwOTU3RjAwMDBGNDgyNjA0MDk1ODMwMDAwMDIwMDJERjA5NQorOjEwNEFDMDAwODRCMDAxMDA1NjgxMzY0MDgxMzIwMDAwMDAwMDAwNDI2RgorOjEwNEFEMDAwNjJCMTAxMDA1NzgxQTg0MDgxMzIwMDAwMDAwMDAwNDMwQworOjEwNEFFMDAwNjJCMTAxMDA1OTgxQTg0MDgxMzIwMDAwMDAwMDAwQ0E3MworOjEwNEFGMDAwNjNCMTAxMDA1QjgxQTg0MDgxMzIwMDAwMDAwMDE2NDBENAorOjEwNEIwMDAwODFCMjAxMDBGNDgyMjI0MTQzNTEwMDAwMDAwODAwQ0EzMgorOjEwNEIxMDAwOTVDQjAxMDA1NjgxMDA0MTg1QzAwMDAwNjM4MUEyNDIwRgorOjEwNEIyMDAwNjc2RjAwMDAwMDAwMDA0MTY3QjMwMTAwNjM4MTQyNDBFRAorOjEwNEIzMDAwODEzMjAwMDAwMDAwMDA0MDY1QjMwMTAwMDAwMDAwNDAyOQorOjEwNEI0MDAwOTM4MzAxMDAwMDAwMUFDQTY5OTcwMTAwRjQ4MjI2NDA4RAorOjEwNEI1MDAwODEzMjAwMDA2ODgxNDI0MDgxMzIwMDAwRjQ4MjFBNDRCMAorOjEwNEI2MDAwOTM5MzAwMDBGNDgyMjA0Mzk1NkYwMDAwRjQ4MjgwQ0E4MgorOjEwNEI3MDAwNjczMzAwMDBGNDgyMjI0MDY1NkYwMDAwRjQ4MjAwNkYwQQorOjEwNEI4MDAwREI5MTAwMDA4NTAwMDA0MDgxMzIwMTAwMzU4MDIyNDAyOQorOjEwNEI5MDAwODAzMjAwMDBGNDgyMDA0MDgxQjIwMDAwMDAwMDAwNTgyMgorOjEwNEJBMDAwOTU5MzAxMDAwMDAwMDA1Rjk1OTMwMTAwNzc4MUEyNDQ3NgorOjEwNEJCMDAwMjE2RjAwMDAwMDAwMDA1Rjk1ODMwMTAwMDAwMDAwNUU4RgorOjEwNEJDMDAwOTU5MzAxMDAwMDAwMDA1Nzk1OTMwMTAwMDAwMDAwQ0E3MgorOjEwNEJEMDAwQzNCMTAxMDA3QTgxMjI1Qjk1N0YwMDAwMDAwMDAwNEI4OQorOjEwNEJFMDAwRkQ5MzAxMDBGNDgyMDA0MDgxQjIwMDAwMUJGRDAwQ0E2OQorOjEwNEJGMDAwOTU5QjAxMDAwRDAxMDBDQUM1MzEwMTAwMDAwMDAwNUY1NgorOjEwNEMwMDAwOTU4MzAxMDBGNDgyMDBDQUM1QjEwMDAwREY2RjAwQ0FCRAorOjEwNEMxMDAwOTU5QjAxMDAwMDAwMDA1NTk1OTMwMTAwMDAwMDAwQ0ExQgorOjEwNEMyMDAwQzdCMTAxMDBGNDgyMjI1Rjk1N0YwMDAwMEQwMTAwNDBCMgorOjEwNEMzMDAwODEzMjAxMDAwMDAwMDA1Rjk1ODMwMTAwRjQ4MjAwQ0EwOAorOjEwNEM0MDAwQzdCMTAwMDBGNDgyMDBDQUM5QjEwMDAwRjQ4MjAwQ0FGMgorOjEwNEM1MDAwQ0JCMTAwMDBGNDgyMDBDQUNEQjEwMDAwRjQ4MjAwQ0FEQQorOjEwNEM2MDAwQ0ZCMTAwMDAwMDAwMkU0MjgxRTAwMTAwOTgxNDAwNDAwNgorOjEwNEM3MDAwNDhDOTAxMDBGNDgyMDBDQUUxQjEwMDAwMDAwMDAwNDAxMAorOjEwNEM4MDAwMDlCMTAxMDAyMDAwMDBBNjgyQjAwMTAwOEY4MUEyNUU2MAorOjEwNEM5MDAwMEI3RDAwMDAwMDgwMDA0MTA4OTkwMTAwOTE4MUEyNUUxNworOjEwNENBMDAwMEI3RDAwMDAyMDgwMDBBNjA4QjEwMTAwOTM4MTlGODU0NAorOjEwNENCMDAwODIzMDAwMDAwMDAwMDAzMDgzODQwMTAwQzg4MTIyMzA2RgorOjEwNENDMDAwODM2QzAwMDA5MjgxQTI0RjBCN0QwMDAwMDAwMDAwNDEyOAorOjEwNENEMDAwMjFCMzAxMDAwMjgwMDBBNjgyQjAwMTAwMTM4MjAwNDBDRgorOjEwNENFMDAwODEzMjAxMDAxMDAwMDA0MTg0RTQwMTAwMDM4MDAwQTYyRAorOjEwNENGMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwRjBGRjAwNDFDOAorOjEwNEQwMDAwODY4ODAxMDAwMDAwMDA0Mzg0OTQwMTAwMEYwMDAwQTY4MworOjEwNEQxMDAwODZCMDAxMDAxMEM0MDA0Mzg2OTgwMTAwQTg4MUEyNDMxOAorOjEwNEQyMDAwODQ2QzAwMDAwMDAwMDA0MzIxQjMwMTAwMjAwMDAwQTZCNQorOjEwNEQzMDAwODJCMDAxMDAxQzAwMDA0MTgyREMwMTAwQTU4MUEyNUU1RQorOjEwNEQ0MDAwMEI3RDAwMDAwNDAwMDA0MTA4OTkwMTAwQkE4MTAwNDA3OQorOjEwNEQ1MDAwODFCMjAwMDA0MTAxMDBBNjg2QjAwMTAwNTAwQzAwNDM2MgorOjEwNEQ2MDAwODY5ODAxMDBBRDgxQTI0Mzg0NkMwMDAwMDAwMDAwNDFFMAorOjEwNEQ3MDAwMjFCMzAxMDBCQTgxMDA0MDgxQjIwMDAwNDEwMTAwQTZDOAorOjEwNEQ4MDAwODZCMDAxMDA2MDBDMDA0Mzg2OTgwMTAwQkE4MUEyNDNGRQorOjEwNEQ5MDAwODQ2QzAwMDAwMDAwMDA0MjIxQjMwMTAwMTg4MDAwQTZDRQorOjEwNERBMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwRkZGRjAwNDEwOAorOjEwNERCMDAwODI4ODAxMDAwMDc3MDA0MTgyOEMwMTAwMDEwMjAwNDFERAorOjEwNERDMDAwODI5ODAxMDAyMDAwMDA0MTgyREMwMTAwMTgwMDAwNDFBRgorOjEwNEREMDAwODJEQzAxMDBCODgxQTI1RTBCN0QwMDAwMDAwMDAwNDE3MgorOjEwNERFMDAwMDhCMTAxMDAyMDAwMDBBNjgyQjAwMTAwQkI4MUEyNUVENAorOjEwNERGMDAwMEI3RDAwMDA0MDEzMDA0MTA4OTkwMTAwQzM4MTIyNDM0QworOjEwNEUwMDAwMjE2RjAwMDAyMDAwMDBBNjgyQjAwMTAwMTIwMDAwNDFDNgorOjEwNEUxMDAwODJEQzAxMDBDMDgxQTI1RTBCN0QwMDAwMDAwNDAwNDEyNQorOjEwNEUyMDAwMDg5OTAxMDBERTgxMDA0MDgxQjIwMDAwMjAwMDAwQTY0OAorOjEwNEUzMDAwODJCMDAxMDAxOTAwMDA0MTgyREMwMTAwQzU4MUEyNUU0MAorOjEwNEU0MDAwMEI3RDAwMDAwMEEwMDA0MTA4OTkwMTAwREU4MTAwNDBCOAorOjEwNEU1MDAwODFCMjAwMDAwMDAwMDA0NDIxQjMwMTAwMDAwMDAwNDBDNgorOjEwNEU2MDAwODNCMDAxMDAwMDAwMDA1RjgzOTAwMTAwMDAwMDAwNUUzRAorOjEwNEU3MDAwODM5MDAxMDAwMDAwMDA1NzgzOTAwMTAwMDAwMDAwNDE3MgorOjEwNEU4MDAwQzJCMTAxMDAwQzAxMDA0MDgxMzIwMTAwMDAwMDAwNUY0RQorOjEwNEU5MDAwODM4MDAxMDAwMDAwMDA0MUMyQjEwMTAwMEMwMTAwNDAwQworOjEwNEVBMDAwODEzMjAxMDAyMDAwMDBBNjgyQjAwMTAwMDQwMDAwNDExMAorOjEwNEVCMDAwODJEQzAxMDAyMDAwMDA0MTA4OTkwMTAwMjAwMDAwQTZDQQorOjEwNEVDMDAwODJCMDAxMDAxMTAwMDA0MTgyREMwMTAwRDc4MUEyNUVBNgorOjEwNEVEMDAwMEI3RDAwMDAwMTAwMDA0MTA4OTkwMTAwMjAwMDAwQTZBMAorOjEwNEVFMDAwODJCMDAxMDBEQTgxQTI1RTBCN0QwMDAwNDAxMzAwNDExOAorOjEwNEVGMDAwMDg5OTAxMDAwMTAwMDBBNjgyQjAwMTAwNDAwMDAwNDFCNQorOjEwNEYwMDAwMkU5OTAxMDAwMDAwODA0MDgxQjIwMTAwMjAwMDAwQTYxRgorOjEwNEYxMDAwODBCMDAxMDAwMDAwMDBDQTgxOTQwMTAwRTE4MUEyNUUxRQorOjEwNEYyMDAwMEI3RDAwMDBGNDgyMDA0MDA4QjEwMDAwQzgxNDJFQkJDNQorOjEwNEYzMDAwODVCMDAxMDBFNDgxQTI1RTBCN0QwMDAwMDAwMDAwNDAwRQorOjEwNEY0MDAwODdCMDAxMDBGMzgxMjI0MzIxNkYwMDAwMDI4MjIyNDRENgorOjEwNEY1MDAwMjE2RjAwMDAxMTgwMDBBNjgyQjAwMTAwMTM4MjAwNDA4MgorOjEwNEY2MDAwODEzMjAxMDAwQTgyMjI0QTgzN0MwMDAwMDAwMDAwNDA1NgorOjEwNEY3MDAwODc5MDAxMDBFRTgxMjI0RDgzN0MwMDAwMDAwMDAwNDFGQgorOjEwNEY4MDAwODc5MDAxMDBGMDgxMjI0RjgzN0MwMDAwMDAwMDAwNDNFNQorOjEwNEY5MDAwODc5MDAxMDBGMjgxMjI0RTgzN0MwMDAwMDAwMDAwNDJENQorOjEwNEZBMDAwODc5MDAxMDAwQTgyMDA0MDgxQjIwMDAwMDE4MDAwQTZDMworOjEwNEZCMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwMDE4MDAwQTYwRQorOjEwNEZDMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwMEE4MjIyNDIzNQorOjEwNEZEMDAwODM3QzAwMDAwMDAwMDA0MDg3OTAwMTAwMUM4MDAwQTYzOAorOjEwNEZFMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwRkQ4MTIyNDUyMAorOjEwNEZGMDAwODM3QzAwMDAwMDAwMDA0MTg3OTAwMTAwRkY4MTIyNDQ3MworOjEwNTAwMDAwODM3QzAwMDAwMDAwMDA0Mzg3OTAwMTAwMDE4MjIyNDM1RQorOjEwNTAxMDAwODM3QzAwMDAwMDAwMDA0Mjg3OTAwMTAwMEE4MjAwNDA2QgorOjEwNTAyMDAwODFCMjAwMDAwMTgwMDBBNjgyQjAwMTAwMTM4MjAwNDAxRQorOjEwNTAzMDAwODEzMjAxMDAwMTgwMDBBNjgyQjAwMTAwMTM4MjAwNDA4RAorOjEwNTA0MDAwODEzMjAxMDAwQTgyMjI0MjgzN0MwMDAwMDAwMDAwNDA3RAorOjEwNTA1MDAwODc5MDAxMDAwMDAwMDA0Mzg3OTAwMTAwMDAwMDAwNDE5QworOjEwNTA2MDAwODc5MDAxMDAwMDgwMDBBNjgyQjAwMTAwMTM4MjAwNDBGQQorOjEwNTA3MDAwODEzMjAxMDAwRTgyMjI0QjgzN0MwMDAwMDAwMDAwNDA0MAorOjEwNTA4MDAwODc4MDAxMDAwMDAwMDA0M0UwQjEwMTAwRkY3RjAwQTIyMworOjEwNTA5MDAwQTA4QjAxMDAwMDAwMDA0NEE1QjMwMTAwQjg4MDAwQ0E0NQorOjEwNTBBMDAwQTczMzAxMDAzNjgxMDA0MDgxQjIwMDAwMjAwMDAwNDE5QQorOjEwNTBCMDAwODJEQzAxMDAxNDgyQTI1RTBCN0QwMDAwMDAwMDAwNDEzMgorOjEwNTBDMDAwMDhCMTAxMDAxNjgyOUY4NTgyMzAwMDAwMDAwMDgwNDBGOAorOjEwNTBEMDAwODFCMjAxMDAxQjgyMTRGNzgxMzAwMDAwMUI4MkEyNDlCQgorOjEwNTBFMDAwRkQ3RjAwMDAwMDAwMDA0OEZEOTMwMTAwMUU4MjE1RjhCRQorOjEwNTBGMDAwODExNDAwMDAxRTgyQTI0QUZEN0YwMDAwMDAwMDAwNDhDQgorOjEwNTEwMDAwRkQ5MzAxMDAyMDgyQTJDODgxMzIwMDAwNDAwMDAwNDBDRgorOjEwNTExMDAwODBEQzAxMDAwMDEwMDA0MDgwREMwMTAwMDAwMDAwNDA0NQorOjEwNTEyMDAwRUZCMzAxMDAyMjgyNDI0MEYxMzMwMDAwMzg4MTAwNDA5OQorOjEwNTEzMDAwNjg5NzAwMDBGNDgyMDBCQjZCQjMwMDAwRjQ4MjAwQkJGMAorOjEwNTE0MDAwQjFCMzAwMDBGNDgyMDA0MDgxQjIwMDAwMDAwMzAwNDBDRgorOjEwNTE1MDAwODE5ODAxMDAwMDAwMDA0MDE4QjEwMTAwODAwMDAwNDA2QgorOjEwNTE2MDAwODM5ODAxMDAwMDE5MDA0MDQ1OTkwMTAwMDAwMDQyNDA2OQorOjEwNTE3MDAwODFCMjAxMDAwMDAwNDNGRkYxQjEwMTAwMDAwMDAwRkYxNworOjEwNTE4MDAwRjFCMTAxMDAwMDAwMDA0MTgxQzAwMTAwMDAwMDAwNDBCOQorOjEwNTE5MDAwMThCMTAxMDAyQjgyQTI0MTgzNTAwMDAwMDAxNjAwNDA4QworOjEwNTFBMDAwNDU5OTAxMDAwMDE5MDA0MDQzOTkwMTAwMDAwMDAwNDdBMworOjEwNTFCMDAwNDNDMTAxMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwRjM4MworOjEwNTFDMDAwODBCMDAxMDAwMDAwMDA1QjgxRDAwMTAwMDAwMDAwNDFDMAorOjEwNTFEMDAwODBEMDAxMDAwMDAwMDA0MEY2QjEwMTAwMDAwMDAwNUIzQgorOjEwNTFFMDAwNDNDMTAxMDAwMDAwMDA0MTgzQzAwMTAwMzU4MkEyNTQ4OAorOjEwNTFGMDAwODM2QzAwMDAwMDAwMDA0MEY3QjEwMTAwMDAwMDAwNDE5NgorOjEwNTIwMDAwODNDMDAxMDAzQzgyQTIwNjgzNkMwMDAwMDAwMDgwNDA0NQorOjEwNTIxMDAwODFCMjAxMDAwMDE2MDA0MDQzOTkwMTAwODAxNjJFMDY1RAorOjEwNTIyMDAwODNCMDAxMDAzNjAwMDBGQkY2QTkwMTAwNDI4MkEyNDFEMgorOjEwNTIzMDAwODM1MDAwMDAyMjAwMDA0MDgzOTgwMTAwMDAwMDAwRkIyMgorOjEwNTI0MDAwRjZCMTAxMDA0NTgyQTI0MTgzNTAwMDAwNjIwMDAwNDA5NworOjEwNTI1MDAwOTU5ODAxMDBEQzlGMDA0MDgxMzIwMTAwMDAxNjJEMDY2OAorOjEwNTI2MDAwODNCMDAxMDA4MDE2MDA0MDQ1OTkwMTAwNUMwMDAwRkJGRQorOjEwNTI3MDAwRjZBOTAxMDA0QjgyQTI0MTgzNTAwMDAwMDAwMDAwNzA5QgorOjEwNTI4MDAwRjlCMTAxMDAwMDAwMDA3MUY5QjEwMTAwMDAwMDAwNzJFNQorOjEwNTI5MDAwRjlCMTAxMDAwMDAwMDA3M0Y5QjEwMTAwMDAwMDAwNzREMQorOjEwNTJBMDAwRjlCMTAxMDA1NDAwMDA0MDk1OTgwMTAwREM5RjAwNDBENgorOjEwNTJCMDAwODEzMjAxMDAwMDAwMDA3MDk1QjAwMTAwNTc4MjIyNzAxOQorOjEwNTJDMDAwQjU2RjAwMDAwMDAwODA0MTk3QjAwMTAwMDAwMDgwNDBGMQorOjEwNTJEMDAwOTdCMDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDJGNDJFMQorOjEwNTJFMDAwOTlCMzAxMDA2MjgyMjI0NDgxNkMwMDAwNkE4MjIyNDhFNAorOjEwNTJGMDAwODE2QzAwMDA2NDgyMjI0QzgxNkMwMDAwNkU4MjIyNTAxRQorOjEwNTMwMDAwODE2QzAwMDA2RjgyMjI1NDgxNkMwMDAwNzE4MjIyNThFRgorOjEwNTMxMDAwODE2QzAwMDA3NjgyMjI1QzgxNkMwMDAwNTAwMTAwNDBBQworOjEwNTMyMDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwRjQ4MjAwQ0E5NAorOjEwNTMzMDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDE4NworOjEwNTM0MDAwRjM4MzAxMDA2ODgyQTI0MjA1NkMwMDAwMDAwMDAwNDE2NgorOjEwNTM1MDAwMDVCMDAxMDBGNDgyMjJDQTA3MTQwMDAwRjQ4MjAwNDY1RQorOjEwNTM2MDAwRjM5MzAwMDBGNDgyMjA0Mzk1NkYwMDAwRjQ4MjgwQ0ExQQorOjEwNTM3MDAwMDUzMDAwMDBGNDgyMjIwMTgwMzAwMDAwRjQ4MjAwQ0I2RQorOjEwNTM4MDAwREI5MTAwMDA1NzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkM4MworOjEwNTM5MDAwQjFCMzAxMDBGNDgyMDBDQUNGQjMwMDAwRkYwMDAwQ0ExRAorOjEwNTNBMDAwODE4ODAxMDBGNDgyQTI0MDc0N0QwMDAwNjAwMDIwNDBFQQorOjEwNTNCMDAwNjA5OTAxMDA3MzgyQThCMTgyMzAwMDAwNzI4MjAwNDBCRgorOjEwNTNDMDAwODFCMjAwMDBGNDgyMDBDQTc5QjMwMDAwMDAwMDAwNEVGMAorOjEwNTNEMDAwODFCMDAxMDAwMDAwMDA0M0NCODMwMTAwMDAwMDQ1NDA4NAorOjEwNTNFMDAwODFCMjAxMDA3OTgyQTI0MTgxNTAwMDAwMDAwMDQ1NDA1NQorOjEwNTNGMDAwODFCMjAxMDAwMDAwNDU0MDgxQjIwMTAwODQ4MjkxODJBNworOjEwNTQwMDAwODIzMDAwMDAwMDAwMDA4QTgwQjAwMTAwQUU5RjAwNDBBMgorOjEwNTQxMDAwODBDRTAxMDA4MjgyQTY0MDgxMzIwMDAwODQ4MjU2NDAwNAorOjEwNTQyMDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTNDMgorOjEwNTQzMDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTI0RQorOjEwNTQ0MDAwMDc5MDAxMDBEODlGMDA0MThCQjMwMDAwMDAwMDAwNEU4MAorOjEwNTQ1MDAwODFCMDAxMDAwMDAwMDA0MkNEODMwMTAwMDAwMDQ2NDAwMQorOjEwNTQ2MDAwODFCMjAxMDA4OTgyQTI0MTgxNTAwMDAwMDAwMDQ2NDBDMworOjEwNTQ3MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwOTQ4MjkxODExNgorOjEwNTQ4MDAwODIzMDAwMDAwMDAwMDA4OTgwQjAwMTAwQUU5RjAwNDAyMworOjEwNTQ5MDAwODBDRTAxMDA5MjgyQTY0MDgxMzIwMDAwOTQ4MjU1NDA2NQorOjEwNTRBMDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTI0MworOjEwNTRCMDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTNDRAorOjEwNTRDMDAwMDc5MDAxMDBEODlGMDA0MThCQjMwMDAwQjEwMzAwNDA1QQorOjEwNTREMDAwQTE5OTAxMDBDNDE0MkY0MDk5QjMwMTAwNTcwMTAwNDA2NQorOjEwNTRFMDAwNDlCMTAwMDBBMDk0MkU0Mzk3QjAwMTAwMDAwMDAwNDA5NQorOjEwNTRGMDAwRjFCMTAxMDA5QjgyQTI0MTk3NTAwMDAwNTA5NTIwNDBERAorOjEwNTUwMDAwRTFCMTAxMDBBQzk0MkU0Mzk3QjAwMTAwMDAwMDAwNDBDRgorOjEwNTUxMDAwRjFCMTAxMDA5RjgyQTI0MTk3NTAwMDAwMDAwMDgwNDAzRAorOjEwNTUyMDAwODFCMjAxMDBBRTAzMDA0MEEzOTkwMTAwMDAwMDAwNDBEOQorOjEwNTUzMDAwODFCMDAxMDA2MDE1MDA0MDg1OTgwMTAwMDgwMDAwNDAxRQorOjEwNTU0MDAwNDBFNDAxMDAwMDAwMDA1OTQxOTQwMTAwMDAwMDAwNTBCNworOjEwNTU1MDAwNDFFMDAxMDAwMDAwMDA0MjQwOTQwMTAwMDAwMDAwNTdCQgorOjEwNTU2MDAwNDE5MDAxMDAwMDAwMDA0MTgxQzAwMTAwMDAwMEEzNDIwMQorOjEwNTU3MDAwODE2QzAxMDAwMDAwMDA0MUEzQzEwMTAwQTU4MkEwNDI4RQorOjEwNTU4MDAwODE2QzAwMDBBNTgyMDA1MDg1QzAwMDAwREQ4MkEyNDEzMAorOjEwNTU5MDAwMDE3RDAwMDBCNTgyMjI1ODczN0QwMDAwNzgwMDAwNDAzNAorOjEwNTVBMDAwNjE5OTAxMDBCMDgyQThCMTlDMzAwMDAwMzAwMDM4NDVGQworOjEwNTVCMDAwOURFMDAxMDAwMTAwMDAwRTEwQzkwMDAwQjU4MjMzQzQ1NworOjEwNTVDMDAwODEzMDAwMDBCODgyQTFBRDlEMjAwMDAwQUY4MjEzNDA2MQorOjEwNTVEMDAwODFCMjAwMDAwMDAwMTM0RTVBODMwMTAwMzAwMDM4NDVBQworOjEwNTVFMDAwOURFMDAxMDBDMDgyMjJBQjgwMDQwMDAwQkU4MkEyNDA4OAorOjEwNTVGMDAwMDE3RDAwMDBDMDgyMjI1RjU3N0QwMDAwM0M4NzAwNDA5MworOjEwNTYwMDAwODFCMjAwMDBDMDgyMjI1RTU3N0QwMDAwOUY4NzAwNDA2QgorOjEwNTYxMDAwODFCMjAwMDBDNTgyMjI1NDczN0QwMDAwNzQwMDAwNDBGNgorOjEwNTYyMDAwNjE5OTAxMDBDMDgyQThCMTAwMzAwMDAwOTA4NEEyNUY5RgorOjEwNTYzMDAwMDE3QzAwMDBEMDg2MDA0MDgxQjIwMDAwQzc4MkEyNUZEQQorOjEwNTY0MDAwNTkyNzAwMDBDOTgyQTI1QzczN0QwMDAwRDA4MkEyNUU0RgorOjEwNTY1MDAwNzM3RDAwMDBEQTgyMjI1QzczN0QwMDAwREI4MjM3NDBCQworOjEwNTY2MDAwODEzMjAwMDA3QzAwMDA0MDYxOTkwMTAwQ0E4MkE4QjEyQgorOjEwNTY3MDAwMzYzMDAwMDA3QzAwMDA0MDYxOTkwMTAwQ0M4MkE4QjE2NgorOjEwNTY4MDAwMDAzMDAwMDAxRjAwMDAwMDAyODgwMTAwQkY4NDE3NDBBNgorOjEwNTY5MDAwODFCMjAwMDBEQjgyMzQ0MDgxMzIwMDAwN0UwMDAwNDA5NQorOjEwNTZBMDAwNjE5OTAxMDBEMTgyQThCMTEyMzAwMDAwRDg4MjUyMjE0NAorOjEwNTZCMDAwMTMwNDAwMDAwMDAwMTQ0MTJGQzMwMTAwRkYzRjAwMDk0NAorOjEwNTZDMDAwMDA4QzAxMDAwMDAwMDA0MzAxRjAwMTAwMTE4MzAwMzQ1MAorOjEwNTZEMDAwMTM4NDAwMDBGRjNGMTQwOTAwOEMwMTAwNzE4MzAwNDMxNAorOjEwNTZFMDAwMDFGMDAwMDAwMDAwMDA0MDgxQjIwMTAwREI4MjMzNDA4NQorOjEwNTZGMDAwODEzMjAwMDBBRjgyMTM0RTVBOTMwMDAwMTQ4N0EyNDhGMworOjEwNTcwMDAwRkQ3RjAwMDAwNDAwQTJBQzgwMzIwMDAwRTM4MjIyNUEzOAorOjEwNTcxMDAwNzM3RDAwMDA3QTAwMDA0MDYxOTkwMTAwRTA4MkE4QjEyOQorOjEwNTcyMDAwN0UzMTAwMDAwMTAwMDBDRjExQzkwMDAwRTk4MkEyNDBEMworOjEwNTczMDAwOTM3RjAwMDBFOTgyMjI0NDkzN0YwMDAwRTU4MjQyQTUyNgorOjEwNTc0MDAwODAzMDAwMDBFODgyQTI0MDkzN0YwMDAwRkI4MjFBNDA3NAorOjEwNTc1MDAwOTM5MzAwMDAwMDAwMUE0MDgxQjIwMTAwREQ4MEEyNDA1NgorOjEwNTc2MDAwNzM3RDAwMDAwRjg3MjI0NDIxNkYwMDAwMDY4NzIyNDBDRQorOjEwNTc3MDAwNjU3RDAwMDAwMDA1QTI1QjczN0QwMDAwMDQwMEEyNDk2NgorOjEwNTc4MDAwMzM3RDAwMDBGMzgyMjI0ODMzN0QwMDAwRkYwMTAwOTk0MQorOjEwNTc5MDAwODBEODAxMDAwMDAwMDA1MDgxRTAwMTAwQTg5ODJGNDA0RgorOjEwNTdBMDAwMzNCMTAxMDAwMDAwMDA0MEUwQzEwMTAwREQ4MjAwNDA5MworOjEwNTdCMDAwODFCMjAwMDBBRjgyMDA0MDhCQjMwMDAwMDAwMDAwNThBRgorOjEwNTdDMDAwNjFCMTAxMDAwMDAwMDA0RTYyQjEwMTAwQUY4MjI4NDBDQgorOjEwNTdEMDAwODEzMjAwMDBGNjgyMDA0MDgxQjIwMDAwRjk4MjMzNDAzRAorOjEwNTdFMDAwMUYzMDAwMDBBRjgyMTM0RTVBOTMwMDAwRkQ4MkEwQ0VGRQorOjEwNTdGMDAwODE1MDAwMDAwRjgzQTBDRDgxNkMwMDAwMDAwMDAwQTU0NworOjEwNTgwMDAwOUNCMzAxMDAwMDAwMDBCMTgxQjAwMTAwMEY4MzIyQjVGQworOjEwNTgxMDAwODExNDAwMDA4MDE1MkY0MDQ5QjEwMTAwMDE4MzQyNDBFRQorOjEwNTgyMDAwODEzMjAwMDAwMDAwNjBCNDY1OTcwMTAwRDAxNTJFNDA2MQorOjEwNTgzMDAwNjlCMzAxMDAwMDAwMUE0NDkzODMwMTAwMUEwMDAwQTIxQQorOjEwNTg0MDAwODBEQzAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwQjE2MworOjEwNTg1MDAwRjFCMTAxMDAwMDAwMDBCNUYxQjEwMTAwMDUwMDAwNDAwOAorOjEwNTg2MDAwNjE5OTAxMDA4MDAwMDA0MDYyREQwMTAwMEE4M0E4QTE2NworOjEwNTg3MDAwRTAzMTAwMDBFOTgyMDA4ODlFQjMwMDAwRTk4MkEyNDE4NQorOjEwNTg4MDAwNjc2RjAwMDBFOTgyMDA2RkRCOTEwMDAwMEY4MzQyNDBFOAorOjEwNTg5MDAwODEzMjAwMDBFOTgyMUE0MDkzODMwMDAwMDA5OTAwMDlEOAorOjEwNThBMDAwNDZDOTAxMDAzRjAwMDBGMzBDODgwMTAwMUE4M0E2NDI5QworOjEwNThCMDAwMTM2MDAwMDAyOTk0MDA5NTAzMzAwMTAwMTU4MzYxNDBCNgorOjEwNThDMDAwODEzMjAwMDA3NTAwMDA0MDYxOTkwMTAwMTY4M0E4QjE4MworOjEwNThEMDAwMEMzMDAwMDAzNjk0NzExMDk0MzAwMTAwMUI4MzAwNTg4NgorOjEwNThFMDAwMUY5MDAwMDAxQzk0MDA5NTAzMzAwMTAwQUY4MjAwODhENworOjEwNThGMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDQwMDJERjA5MQorOjEwNTkwMDAwMkVCMDAxMDBFRTA3MDA0MDk3OTgwMTAwMjI4MzIzNEI0MAorOjEwNTkxMDAwRTQ2RDAwMDAyMjgzMjI0QkZEN0YwMDAwMDAwMDAwNDA2OAorOjEwNTkyMDAwMUY5MDAxMDAyMjAwMkY0MDgxQjIwMTAwMjU4MzgzMTdDMAorOjEwNTkzMDAwODAzMjAwMDAyNjAwMDA0MDQ3OTkwMTAwMjc4Mzg1MTcyOAorOjEwNTk0MDAwODAzMjAwMDAwMDAwMDA0ODQ3QzEwMTAwMkQ4MzIyNTUyRAorOjEwNTk1MDAwMkY3QzAwMDAwMDAwMDA0MjQzRDEwMTAwMEYwMDAwRkEzQworOjEwNTk2MDAwOTY4ODAxMDAwMDAwMDA0Mjk3RTAwMTAwMDAwMDAwNDIxQworOjEwNTk3MDAwOTdEMDAxMDAyRTgzMDA0QjQ0QzEwMDAwMTIwMDAwQTIwQQorOjEwNTk4MDAwNDRDOTAxMDAyODAwMDBGNjAyQ0MwMTAwMEEwMDAwQTE3MQorOjEwNTk5MDAwNDJDOTAxMDAwMDAwMDBGODE2QjAwMTAwMDAwMDI4RjAyNAorOjEwNTlBMDAwMTBCMDAxMDAwMDAwMDBGMDFBQjAwMTAwMDAwMDAwQTJEOQorOjEwNTlCMDAwMkFCMDAxMDBDMDI4M0M0NjBERTAwMTAwMDAwMDJENDQ0MworOjEwNTlDMDAwOTVCMDAxMDAzQTgzQTJGODBFMzAwMDAwNEE4MzIyNDFDQworOjEwNTlEMDAwOTU1MDAwMDAwMDAwMkQ1MDQ5QzEwMTAwMzY4MzAwNDA2MQorOjEwNTlFMDAwODFCMjAwMDAzNzgzQTJGODE2NkMwMDAwMzc4M0EyRjg1QQorOjEwNTlGMDAwMTA2QzAwMDAzNzgzQTJGMDFBNkMwMDAwNDg4MzIyNTgxNAorOjEwNUEwMDAwMUY3QzAwMDAwMDk5M0Y0MjEzRjAwMTAwM0Y4MzY1NDA3NgorOjEwNUExMDAwODEzMjAwMDA0MzgzQTJGMzc0MDYwMDAwMDAwMDAwMDZGOAorOjEwNUEyMDAwRTY5NTAxMDA0ODgzNzU0MDgxQjIwMDAwMDAwMDAwMDY0MQorOjEwNUEzMDAwOTZCMDAxMDAzRjAwNzVGMzBDODgwMTAwMDAwMDAwNTU4RQorOjEwNUE0MDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwNDY4M0E4NDAzMworOjEwNUE1MDAwODEzMjAwMDA0ODgzNjc0MDgxMzIwMDAwNTA4Mzc3NDFFMworOjEwNUE2MDAwMkRDMzAwMDA0RTgzMjI1ODFGN0MwMDAwMDAwMDAwNTUwQgorOjEwNUE3MDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwNEM4M0E4NDA0MgorOjEwNUE4MDAwODEzMjAwMDA0RTgzNjc0MDgxMzIwMDAwN0U4Mzc3NDE3RgorOjEwNUE5MDAwMkRDMzAwMDAwMzAwMDAwNzFBRjQwMTAwRUY5MjAwMDc3NQorOjEwNUFBMDAwMTYzMDAxMDA1RjgzMjI0MTgxNkMwMDAwNTY4MzIyNDI0MAorOjEwNUFCMDAwODE2QzAwMDBBRjgyMDA4ODFDQjAwMDAwNUU4MzIyNUYxMgorOjEwNUFDMDAwMEY3QzAwMDBFMzkzMDA1RjAxMTAwMTAwNUM4MzIyNDAyMworOjEwNUFEMDAwOTU2QzAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjI0MAorOjEwNUFFMDAwMDJCMDAxMDA1ODkzMDA1Mjk1MzAwMTAwNUY5MzAwNEJDMworOjEwNUFGMDAwMDJCMDAwMDA0MTk0MDAwOTk2MzAwMTAwMUE4NzAwNDA2RQorOjEwNUIwMDAwMEZCMDAwMDA2NzgzQTI1QTFGN0MwMDAwNjk5MjAwNDAxQQorOjEwNUIxMDAwODEzMjAxMDA2NzgzMjIyMDg1NkMwMDAwNjQ4MzlDMEYyMgorOjEwNUIyMDAwODAzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNEE5MzAwNUMwNQorOjEwNUIzMDAwMUYwMDAxMDAzQzk1MDA0MjYxMzEwMTAwQUY4MjAwODhFNgorOjEwNUI0MDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDVGNQorOjEwNUI1MDAwNDhCMTAxMDA2QTgzODJGMDE4MzAwMDAwODE4ODAwNDU1NgorOjEwNUI2MDAwOEZCMDAwMDAyODIwMDBBNjk2QjAwMTAwNkU4MzIyMTc5NworOjEwNUI3MDAwOTYwNDAwMDBFMDk0MDA0Qjk1MzAwMTAwODE4ODAwNEJCMgorOjEwNUI4MDAwOEZCMDAwMDBFRjkzMDAwMzQ4MzEwMTAwQ0E5MTAwNDAzQworOjEwNUI5MDAwODEzMDAxMDA4MTg4MDA0MDgxQjIwMDAwMDAwMDJFMTA5OQorOjEwNUJBMDAwNDhCMTAxMDAwMDAwNjg1MDAzQjAwMTAwMDAwMDAwMDM4QworOjEwNUJCMDAwRjBCMTAxMDA0MDAwMDAwMEUwQzkwMTAwMDAwMDJFNTBEQgorOjEwNUJDMDAwNDlDMTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDNENAorOjEwNUJEMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMjAwMDAwMTA5RQorOjEwNUJFMDAwNjJERDAxMDA3OTgzQTg0MDgxMzIwMDAwMTAwMDAwMTBCRQorOjEwNUJGMDAwNjJDOTAxMDA3QjgzQTgwMEUwMzEwMDAwQUY4MjAwODgwOQorOjEwNUMwMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDAwMDAwNDA1RQorOjEwNUMxMDAwMEZCMDAxMDAwMDAwMDBGODJFQjAwMTAwMDAwMDAwRjJGQgorOjEwNUMyMDAwMDJCMDAxMDAwMDAwMDA0MDE3QjAwMTAwMDA0MTAwQTZEMgorOjEwNUMzMDAwOTZCMDAxMDBFRTA3MkU0Nzk3OTAwMTAwOTE4MzIyMTczRQorOjEwNUM0MDAwOTYwNDAwMDA4RjgzMjI0QkZEN0YwMDAwOEY4MzIzQTJFOAorOjEwNUM1MDAwMDI2QzAwMDA1ODkzMDA1Mjk1MzAwMTAwMDQwMDIyNDE2QworOjEwNUM2MDAwOTc1MDAwMDAwQzAwMkQwMDEyQjAwMTAwMDAwMDAwRjA2MQorOjEwNUM3MDAwMDBCMDAxMDAwMDAwMDA1QzAxODAwMTAwNUY5MzAwNEI1OAorOjEwNUM4MDAwMDJCMDAwMDAwMDAwMDAwOTAwQjAwMTAwMDAwMDAwNTA1OAorOjEwNUM5MDAwMDNCMDAxMDBBRTgzMDA1QzE3OTAwMDAwQTM4MzIyNDM5MQorOjEwNUNBMDAwMkY3QzAwMDAwMDAwMDA0NTFGOTAwMTAwOUM4MzIyNUZCNAorOjEwNUNCMDAwMkY3QzAwMDAwMDAwMkUxMDQ4QjEwMTAwMDAwMDAwNThBOQorOjEwNUNDMDAwRjFCMTAxMDAxMDAwMDAwM0YwQzkwMTAwMTAwMDAwMDA1NAorOjEwNUNEMDAwRTBDOTAxMDA5ODgzNjI0MjYxMzEwMDAwMDAwMDAwMTBCOQorOjEwNUNFMDAwNjJCMTAxMDA5OTgzQTg0MDgxMzIwMDAwQUY4MjcyODhCRQorOjEwNUNGMDAwMUNCMDAwMDAyMDAwMkQwMzQ4QjEwMTAwRkYwRjAwRjY4QQorOjEwNUQwMDAwODA4ODAxMDBBMDgzQTJBNjgxNkMwMDAwQTM4MzAwRjIxQQorOjEwNUQxMDAwM0FCMDAwMDA4RDg0QTI0QkZEN0YwMDAwQjA5MjAwNDA5RAorOjEwNUQyMDAwODEzMjAxMDAzMDg3MDA0MDgxQjIwMDAwQUU4MzIyNEFGOAorOjEwNUQzMDAwMkY3QzAwMDBBRTgzMjI0ODJGN0MwMDAwMEEwMDJEMDMzOAorOjEwNUQ0MDAwNDhCMTAxMDAzRjAwMDBGMjg2ODgwMTAwMUYwMDAwNDNCNworOjEwNUQ1MDAwODQ4ODAxMDAwNTAwMDA0MzgwRjQwMTAwOTg5NDNENDJDRQorOjEwNUQ2MDAwODFFMDAxMDBBRTgzQTI0MkUwN0QwMDAwOEQ4NEEyNEI2MQorOjEwNUQ3MDAwRkQ3RjAwMDBCMDkyMDA0MDgxMzIwMTAwMzA4NzAwNDA3QQorOjEwNUQ4MDAwODFCMjAwMDBBRTgzNjk0MDgxMzIwMDAwMDAwMDAwQTNCMAorOjEwNUQ5MDAwMDlCMDAxMDAwMDAwNzk0MTQ3QzMwMTAwQjQ4MzIyQTE4QQorOjEwNURBMDAwMDk2QzAwMDBGNTgyMDA4ODFDQjAwMDAwQjE4MzAwMDM3QworOjEwNURCMDAwNDhCMTAwMDBFRTgzQTM5MjAzNkMwMDAwOTQ5NTAwNDA2QworOjEwNURDMDAwOTUzMDAxMDAwMDAwMDA0MTQzQzMwMTAwMDAwMDAwMTZBRgorOjEwNUREMDAwODBCMjAxMDAzMDg3MjcwODgwMzIwMDAwQkI4MzIyNUMzQworOjEwNURFMDAwMTc3QzAwMDBCQzgzMDAwMDJBQjAwMDAwMTIwMDAwMDBGNQorOjEwNURGMDAwMkFDODAxMDAwMjAwMDAwODgwQzgwMTAwQzA4M0EyNDMzNQorOjEwNUUwMDAwMkY3QzAwMDBFMzk0MDA0MDgxMzIwMTAwREM4MzAwNUVCRgorOjEwNUUxMDAwMTc5MDAwMDAwNDAwMDAwMThDQ0MwMTAwRTM5NDAwNENCQQorOjEwNUUyMDAwMDMzMDAxMDAwMDAwMkU0NjAyQjAwMTAwMTAwMDAwMTBGNworOjEwNUUzMDAwNDhDOTAxMDAwQzAwMDAwMUYwQ0QwMTAwMkMwMDAwNDAxOQorOjEwNUU0MDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMTAwMDAwMTVCQgorOjEwNUU1MDAwRTBDOTAxMDAwMDAwMDA0MzYxQjEwMTAwQTAwMDAwQTRGRQorOjEwNUU2MDAwNjJERDAxMDBDOTgzQTg1NDE3MTAwMDAwREM4MzAwNUVDNgorOjEwNUU3MDAwMTc5MDAwMDAxMjAwMDAwMDJBQzgwMTAwREI4MzIyNDNCMworOjEwNUU4MDAwMkY3QzAwMDAwNDAwMDAwMThDQ0MwMTAwMDAwMDAwNENCRAorOjEwNUU5MDAwMDNCMDAxMDAwNDk1MDA0MzYxMzEwMTAwMDAwMDJFNDY2QgorOjEwNUVBMDAwMDJCMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMEMwMDAwMDEwMAorOjEwNUVCMDAwRjBDRDAxMDAwQzAwMDAwOUYwQzkwMTAwMDAwMDAwMTgzRAorOjEwNUVDMDAwRjBCMTAxMDAxMDAwMDAxNUUwQzkwMTAwMDAwMDAwNDMxRQorOjEwNUVEMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwREM4MzI4NTQ1MAorOjEwNUVFMDAwMTcxMDAwMDBEODgzMDA0MDgxQjIwMDAwMDQ5NTAwNDNFMQorOjEwNUVGMDAwNjEzMTAxMDBERTgzMjI1MDJGN0MwMDAwMDAwMDAwNTYzQgorOjEwNUYwMDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwRTE4M0EyNDE2MworOjEwNUYxMDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwMDAwMDAwNDMzQworOjEwNUYyMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRTI4M0E4NDA4MQorOjEwNUYzMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwRUI5NDAwNDA2QQorOjEwNUY0MDAwODEzMjAxMDBFOTgzMjI0MzJGN0MwMDAwMTY4MDAwMDM4OAorOjEwNUY1MDAwNDRDOTAxMDAwMDAwMDAxREU0QjEwMTAwOEM5NDAwNUUwMgorOjEwNUY2MDAwMDUxMDAxMDBFQzgzQTI1RjJGN0MwMDAwQTY5MTAwMDFDOAorOjEwNUY3MDAwMzg0MzAxMDBCMDkyMDA0MDgxMzIwMTAwMzA4NzAwNDA3OAorOjEwNUY4MDAwODFCMjAwMDBGMDgzQTI0QkZEN0YwMDAwOEE4NDAwNDFCMworOjEwNUY5MDAwNDNDMzAwMDAwMDAwMDA0MDI3QjAwMTAwMDAwMDAwNDBBMworOjEwNUZBMDAwMkRCMDAxMDAwMDAwMDA0MDExQjAwMTAwRjM4MzM1MDE2NQorOjEwNUZCMDAwODYzMDAwMDA2RDAwMDA0MDYxOTkwMTAwRkI4MzI4QjEyQworOjEwNUZDMDAwMzAzMDAwMDBGNDgzMjI0RDc1N0QwMDAwMDAwMDAwMTY4MworOjEwNUZEMDAwODBCMjAxMDA3QTg0QTc0MDExNkMwMDAwMDAwMDAwNDFFQgorOjEwNUZFMDAwNDNDMzAxMDA4OTg0MDA0MDgxQjIwMDAwNkQwMDAwNDA3RAorOjEwNUZGMDAwNjE5OTAxMDBGQjgzQThCMTEyMzAwMDAwMDAwMDAwMTY3NworOjEwNjAwMDAwODBCMjAxMDAwNTg0QTc0MDExNkMwMDAwMDAwMDAwNDEyRgorOjEwNjAxMDAwNDNDMzAxMDAwMDAwMDAwOTEwQjAwMTAwMDAwMDAwMTg5NworOjEwNjAyMDAwMkNCMDAxMDBERTA3MDA0MzgwQ0UwMTAwRjQ4M0FBNDBCQgorOjEwNjAzMDAwODEzMjAwMDAwQTg0MDA0MDgxQjIwMDAwNDAwMDNFNDNFQgorOjEwNjA0MDAwMjdFMDAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMTg4NQorOjEwNjA1MDAwRTBCMTAxMDAwMDAwMDA0MTI3QzAwMTAwRjQ4M0EzMEI2MAorOjEwNjA2MDAwODc1MDAwMDAwMDAwMTU0MDFCQjAwMTAwMDAwMDAwNDBGOAorOjEwNjA3MDAwMjNCMDAxMDAxMjAwMDAwMDJBQzgwMTAwNDAwMDJENDA5QQorOjEwNjA4MDAwMzlCMDAxMDAxMjg0QTI0MDI3NkMwMDAwMjIwMDAwMDhGMQorOjEwNjA5MDAwMTJDODAxMDBERTA3MDA0MDI1OTgwMTAwMTU4NDAwNDA2OQorOjEwNjBBMDAwODFCMjAwMDAwMDAwMDBGODEyQjAwMTAwMDAwMDAwRjAxMgorOjEwNjBCMDAwMzBCMDAxMDAwMDAwMDAwQjI1QjAwMTAwMDAwMDAwMTAwRQorOjEwNjBDMDAwMzJCMDAxMDAxNDAwMjAwMUUwQjEwMTAwRUUwNzAwNDBGMQorOjEwNjBEMDAwMzc5ODAxMDAxQTg0MjMwMTM2NkMwMDAwMDAwMDAwMDE4QgorOjEwNjBFMDAwMzZCMDAxMDAyNTg0ODI0MTIzNDAwMDAwMjA4MDAwMTA0QQorOjEwNjBGMDAwNDJDOTAxMDAyMTg0MjI0MEUzNkQwMDAwMDAwMDAwNDNGQQorOjEwNjEwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUU4NEE4NDA2MgorOjEwNjExMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQ0Y5MjAwNDNBMworOjEwNjEyMDAwMjMzMDAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwNDFFNworOjEwNjEzMDAwMjNCMDAxMDAwMDAwMDAwMzQ4QjEwMTAwMDA4MDAwMTlGNQorOjEwNjE0MDAwNDRDOTAxMDAzNDg0MjI0NTFGN0MwMDAwMDAwMDAwNEMzQgorOjEwNjE1MDAwRjFCMTAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMThEOQorOjEwNjE2MDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTlGRQorOjEwNjE3MDAwNjJERDAxMDAyQjg0QTgxNUUwMzEwMDAwMDAwMDAwNTAxMgorOjEwNjE4MDAwMDNEMDAxMDAwMDAwMDA1MDMzQzAwMTAwMDAwMDAwNENBQgorOjEwNjE5MDAwMjVEMDAxMDAwQzAwMkQ0QzEzQzAwMTAwMDAwMDAwNTA2MAorOjEwNjFBMDAwMzdEMDAxMDAwMDAwMDA1MDJCQzAwMTAwMUE4NDAwNDVDOAorOjEwNjFCMDAwMUY4MDAwMDAzNjg0QTMxMjM2NkMwMDAwMzc4NDY4MUJGMQorOjEwNjFDMDAwMjhCMDAwMDAwMDAwNjgxMjI4QjAwMTAwMDAwMDAwMDk5QgorOjEwNjFEMDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwMDAwMDAwNDMyMAorOjEwNjFFMDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwM0E4NEE4MTVBOAorOjEwNjFGMDAwRTAzMTAwMDA2MDg0MjIxNDAyNTAwMDAwMDAwMDAwNTBEMgorOjEwNjIwMDAwMzNDMDAxMDAwMDAwMDAxNDI0RDAwMTAwMEMwMDJEMTQ0NAorOjEwNjIxMDAwMTJDMDAxMDA1OTg0QTIxNDM2NTAwMDAwNEE4NDIyNUM0NgorOjEwNjIyMDAwMUY3QzAwMDAzMDgwMDAxMDQyQzkwMTAwNDg4NDIyNDBEOQorOjEwNjIzMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTA2OQorOjEwNjI0MDAwNjJERDAxMDA0NTg0QTg0MDgxMzIwMDAwQUY4MjAwODhGMQorOjEwNjI1MDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwMEMwMDJENUNFMAorOjEwNjI2MDAwMUY4MDAxMDAxMDAwMDBGMDJBQzgwMTAwMDAwMDAwNUMzRgorOjEwNjI3MDAwMkI4MDAxMDBGMDA3MDA0MDM3OTgwMTAwNEY4NDIzMDE3NAorOjEwNjI4MDAwMzY2QzAwMDAwMDAwMDAwMTM2QjAwMTAwNUE4NDIyMUI2OQorOjEwNjI5MDAwMDI2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMDAwMDJFNUNCNAorOjEwNjJBMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM0OAorOjEwNjJCMDAwRjBCMTAxMDBGRjA3MDAxNUUwOEQwMTAwMDAwMDAwNDI3MQorOjEwNjJDMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNTY4NEE4NDA3NQorOjEwNjJEMDAwODEzMjAwMDA1QTg0MDAwMzQ4QjEwMDAwMDAwMDAwMTQxRAorOjEwNjJFMDAwMkFDMDAxMDAxQTg0QTI0MDI1NkMwMDAwMDAwMDAwNDE3MQorOjEwNjJGMDAwMzlDMDAxMDA0MDAwM0Q0MzM5RTAwMTAwMDAwMDAwMEJCRgorOjEwNjMwMDAwMjVCMDAxMDAwMDAwMDBGODEyQjAwMTAwMUE4NDAwRjA2RQorOjEwNjMxMDAwMzBCMDAwMDAwMDgwMDAxOTQyQzkwMTAwNjY4NDIyNDBBQworOjEwNjMyMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTk2RQorOjEwNjMzMDAwNjJERDAxMDA2Mzg0QTg0MDgxMzIwMDAwQUY4MjAwODhFMgorOjEwNjM0MDAwMUNCMDAwMDBDRjkyMDA0MDJCMzAwMTAwMTgwMDJFMDMzQgorOjEwNjM1MDAwNDhCMTAxMDA2QTg0MjI1MDJGN0MwMDAwMDAwMDAwNTZFMgorOjEwNjM2MDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwNkQ4NEEyNDE3MgorOjEwNjM3MDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwNzA4NDIyNDNDMgorOjEwNjM4MDAwMkY3QzAwMDAwMDAwMDA1NDE3OTAwMTAwMTYwMDIwMUQxMworOjEwNjM5MDAwRTRCMTAxMDA3Mjg0QTM0MDI3NkMwMDAwNzQ4NDYwNUY0NAorOjEwNjNBMDAwMTc5MDAwMDAwMDg0MDAwQjE2REMwMTAwMDAwMDYwMTM1MQorOjEwNjNCMDAwMTY5NDAxMDA4Qzk0MDA1RTA1MTAwMTAwMzA4N0EyNUZFNgorOjEwNjNDMDAwMkY3QzAwMDAxNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjI4RAorOjEwNjNEMDAwMDJCMDAxMDBBNjkxMDAwMTM4NDMwMTAwMzA4NzAwNDA1RgorOjEwNjNFMDAwODFCMjAwMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwNERCOQorOjEwNjNGMDAwNjFCMTAxMDAwMDAwMDAxNjYyQjEwMTAwN0M4NEE4NDA3OAorOjEwNjQwMDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwN0U4NEE4NDBEMworOjEwNjQxMDAwODEzMjAwMDA4OTg0MjIxMzgyNkMwMDAwNDAwMDNENDNEOQorOjEwNjQyMDAwODNFMDAxMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwRjA1RgorOjEwNjQzMDAwMkNCMDAxMDAwMDAwMDAxNjYyQjEwMTAwODQ4NEE4NDA2NQorOjEwNjQ0MDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwODY4NEE4NDA4QgorOjEwNjQ1MDAwODEzMjAwMDA4MDg0MDA0MTgzQzAwMDAwMDAwMDE1NDBBQworOjEwNjQ2MDAwODFCMjAxMDAwMDgyMDBBNjA0QjAwMTAwQTA5ODAwNDBBMworOjEwNjQ3MDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwNTg5MzAwNTJDRQorOjEwNjQ4MDAwOTUzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMzA4NzAwNDA2MAorOjEwNjQ5MDAwMEZCMDAwMDAwMDAwMDA1RjAxODAwMTAwMTAwMDAwMDA0QworOjEwNjRBMDAwMEVGNDAxMDAzRjAwMDAwMDAwODgwMTAwMDMwMDAwMDcxNworOjEwNjRCMDAwMUFGNDAxMDBFRjkyMDAwNzE2MzAwMTAwOUI4NDIyNDE3QworOjEwNjRDMDAwODE2QzAwMDA5OTg0MjI0MjgxNkMwMDAwQUY4MjAwODhCOAorOjEwNjREMDAwMUNCMDAwMDA5QTg0MjI1RjBGN0MwMDAwMUE4NzAwNDBFNQorOjEwNjRFMDAwMEZCMDAwMDBBMzg0QTI1QTFGN0MwMDAwNjk5MjAwNDBGNAorOjEwNjRGMDAwODEzMjAxMDBBMzg0MjIyMDg1NkMwMDAwQTA4NDlDMEZCRgorOjEwNjUwMDAwODAzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNEE5MzAwNUMxQgorOjEwNjUxMDAwMUYwMDAxMDAzQzk1MDA0MjYxMzEwMTAwQUY4MjAwODhGQworOjEwNjUyMDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDUwQgorOjEwNjUzMDAwNDhCMTAxMDAwMDAwMDBGMDE4QjAwMTAwQTk4NDIyM0ExRgorOjEwNjU0MDAwMDE2QzAwMDAwMDAwMDAwMDhFQjAwMTAwODE4ODAwNDA1NgorOjEwNjU1MDAwMDFCMDAwMDAwMDAwMDA0MDgxQjIwMTAwMkUwMDJEMDVCNgorOjEwNjU2MDAwNDhCMTAxMDBBRDg0QTI0MEU3NkQwMDAwMEEwMDAwNDA4MAorOjEwNjU3MDAwOEY5ODAxMDA4MTg4MDA0MDAxQjAwMDAwMzQ5MjAwNDBGMworOjEwNjU4MDAwODEzMjAxMDAxQzk0MDA5NTAzMzAwMTAwQUY4MjAwODgyNQorOjEwNjU5MDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMjIwMDJERjBDNgorOjEwNjVBMDAwMkVCMDAxMDAyODIwMDBBNjk2QjAwMTAwQjY4NDIyMTc2NAorOjEwNjVCMDAwOTYwNDAwMDBFMDk0MDA0Qjk1MzAwMTAwODE4ODAwNEM2NworOjEwNjVDMDAwOEZCMDAwMDBCODg0ODMxNzgwMzIwMDAwMDAwMDAwNDRDMAorOjEwNjVEMDAwNDNDMTAxMDBCQTg0ODUxNzgwMzIwMDAwMDAwMDAwNDhFMgorOjEwNjVFMDAwNDNDMTAxMDAyODAwMDBGNjAyQ0MwMTAwMTIwMDAwQTEwNgorOjEwNjVGMDAwMkFDODAxMDBFRjkzMDA0MDgxMzIwMTAwQ0E5MTAwNDE5NgorOjEwNjYwMDAwODEzMDAxMDA4MTg4MDA0MDgxQjIwMDAwMDAwMDAwMDE1QgorOjEwNjYxMDAwMDBEMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMjgwMDAwNDAwOQorOjEwNjYyMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDAzQQorOjEwNjYzMDAwRjBCMTAxMDBDNDg0NjQ0NzYxMzEwMDAwMDAwMDAwMTAyMworOjEwNjY0MDAwNjJCMTAxMDBDNTg0QTgxQkUwMzEwMDAwQUY4Mjc0ODhFQworOjEwNjY1MDAwMUNCMDAwMDAwMDAwMDA0NTAzRTAwMTAwMDgwMDJEMDMwRAorOjEwNjY2MDAwNDhCMTAxMDBFQTg0MDFGQjA4MzAwMDAwM0Q4NTg3RkI0QQorOjEwNjY3MDAwMjIzMDAwMDAwMDAwMDBGQTBFQjAwMTAwMDAwMDAwRjgxNworOjEwNjY4MDAwMTRCMDAxMDAwMzAwMDAwNzFBRjQwMTAwRUY5MjAwMDdBNAorOjEwNjY5MDAwMTYzMDAxMDBFMDg0MjI0MTgxNkMwMDAwRDQ4NDIyNDI0MworOjEwNjZBMDAwODE2QzAwMDBBRjgyMDA4ODFDQjAwMDAwREY4NDIyNUY5NAorOjEwNjZCMDAwMEY3QzAwMDAzODAwMDAwNDdFODkwMTAwRDg4NEE2NUZBQQorOjEwNjZDMDAwMEYwMDAwMDA0MjkyMDA0MDA1MzAwMTAwREQ4NDAwNDBEMAorOjEwNjZEMDAwODFCMjAwMDAxMzAwMDA0MDg3OTgwMTAwMDAwMDJEMDNFNAorOjEwNjZFMDAwNDhCMTAxMDAwQzAwMkRGMDgyQjAwMTAwMDAwMDAwRjA2NAorOjEwNjZGMDAwODRCMDAxMDBDRTkzMDA0MDA1MzAwMTAwMDAwMDAwNUMzMgorOjEwNjcwMDAwMUY5MDAxMDAxQTg3MDA0MDBGQjAwMDAwRTg4NEEyNUFEMQorOjEwNjcxMDAwMUY3QzAwMDA2OTkyMDA0MDgxMzIwMTAwRTg4NDIyMjA0MQorOjEwNjcyMDAwODU2QzAwMDBFNTg0OUMwRjgwMzIwMDAwQUY4MjAwODhGOQorOjEwNjczMDAwMUNCMDAwMDA0QTkzMDA1QzFGMDAwMTAwM0M5NTAwNDIyMQorOjEwNjc0MDAwNjEzMTAxMDBBRjgyMDA4ODFDQjAwMDAwOTAwNDAwMDc5NgorOjEwNjc1MDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA1NgorOjEwNjc2MDAwMThCMDAxMDBFQzg0MjEwNDgwMjAwMDAwRUQ4NDAwNDA3QQorOjEwNjc3MDAwMTBDOTAwMDBDMzg3MDA0QjgxQjAwMDAwMEM4NTAwNDNBNgorOjEwNjc4MDAwODFCMDAwMDAxMDg1MDBGQjIyQjAwMDAwQzM4NzAwNDFFQgorOjEwNjc5MDAwODFCMDAwMDA4MTg4MDA0RThGQjAwMDAwMDg4NTAwNUE0QgorOjEwNjdBMDAwOEZCMDAwMDBGNTg0MDA0NzhGQjAwMDAwQzM4NzAwNTMwRQorOjEwNjdCMDAwODFCMDAwMDBDMzg3MDA1NjgxQjAwMDAwMzIwMDJEMDU3MworOjEwNjdDMDAwNDhCMTAxMDA4MTg4QTAwQUU0NkQwMDAwRkI4NEEyNDE2OQorOjEwNjdEMDAwMTk3QzAwMDBGQTg0MjIwQTgwMzIwMDAwODE4ODAwNTM2QworOjEwNjdFMDAwOEZCMDAwMDA4MTg4MDA1NDhGQjAwMDAwMDQ4NTIyMEExOQorOjEwNjdGMDAwODAzMjAwMDBGRTg0QTIwQUU0NkQwMDAwODE4ODAwNUQwMgorOjEwNjgwMDAwOEZCMDAwMDAwMDAwMDBGMjgwQjAwMTAwMDAwMDAwMEExQworOjEwNjgxMDAwODBEMDAxMDAwMjg1QTA5MTgxNkMwMDAwODE4ODAwNUUxQgorOjEwNjgyMDAwOEZCMDAwMDAyNTAwMDA0MDhGOTgwMTAwODE4ODAwNDA1MworOjEwNjgzMDAwODFCMjAwMDAwNjg1MjA5MUU1NkQwMDAwODE4ODAwNTQzQQorOjEwNjg0MDAwOEZCMDAwMDAyMTAwMDA0MDhGOTgwMTAwODE4ODAwNDAzNworOjEwNjg1MDAwODFCMjAwMDAzMjAwMkQwNTQ4QjEwMTAwODE4OEEwMEFGNAorOjEwNjg2MDAwRTQ2RDAwMDAyNDAwMDA0MDhGOTgwMTAwODE4ODAwNDAwMgorOjEwNjg3MDAwODFCMjAwMDAzNzAwMkQwNTQ4QjEwMTAwMDQwMDAwRjM4QgorOjEwNjg4MDAwODJGNDAxMDBDMzg3QTA0MjgzNkMwMDAwQzM4NzAwNTREOAorOjEwNjg5MDAwODFCMDAwMDAwMDAwMDBGMjBFQjAwMTAwMDMwMDAwMDcwQworOjEwNjhBMDAwMUFGNDAxMDAwMEI1MDAwRDQyQzkwMTAwMDcwMDAwMDdGRAorOjEwNjhCMDAwMTY4ODAxMDAxOTg1MjIwQkU2N0QwMDAwMEEwMDAwNDBDMQorOjEwNjhDMDAwODc5ODAxMDBERjk1MDA0MDgxMzIwMTAwMDAwMDAwNDAwMAorOjEwNjhEMDAwMEZCMDAxMDAxQTg3MDA1QzFGOTAwMDAwMkI4NTIyNTAyQQorOjEwNjhFMDAwRkQ3RjAwMDAyNjg1QTI1NEZEN0YwMDAwMUU4NTIyNTVGNQorOjEwNjhGMDAwRkQ3RjAwMDA4MjAwMDA0MDg3OTgwMTAwMTY4NTAwNDA1RgorOjEwNjkwMDAwODFCMjAwMDAxNjg1MjI1M0ZEN0YwMDAwMTQ4MDAwMDMzMQorOjEwNjkxMDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMTAwMDAwNEJEOQorOjEwNjkyMDAwODBGNDAxMDAwQ0JDMDA0MDg3OTgwMTAwMjY4NTIyNDNCQQorOjEwNjkzMDAwODA2QzAwMDBGRkZGMDA0QjgwODgwMTAwMTY4NUEyNDM5OQorOjEwNjk0MDAwODA2QzAwMDA3Qzk2MDA0MDQ3OTkwMTAwMjc4NTQ2NDBGNgorOjEwNjk1MDAwODEzMjAwMDAyQTg1QTBGMDMwNkYwMDAwMUM4NTFFNDBBNworOjEwNjk2MDAwODFCMjAwMDAwMDAwMUU0MTMxQzMwMTAwNzM5MjAwNDA1QgorOjEwNjk3MDAwMjUzMDAxMDAyRjg1OUMwRjgwMzIwMDAwQUY4MjAwODhGNworOjEwNjk4MDAwMUNCMDAwMDA0QTkzMDA1QzFGMDAwMTAwMTQ4MDAwMDM0QgorOjEwNjk5MDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMDAwMDJGMDU4MAorOjEwNjlBMDAwNDhCMTAxMDAxMDAwMDAwNzE4RTQwMTAwMDAwODAwMENDNQorOjEwNjlCMDAwRTA5OTAxMDA5MDA0MDAwNzk2MzAwMTAwMDBCNTAwMEQzOQorOjEwNjlDMDAwNDZDOTAxMDAzNjg1MzA0MDgxMzIwMDAwMDAwMDAwMEJDRQorOjEwNjlEMDAwRTY5MTAxMDAwMDAyMDBBMTQ2QzkwMTAwMDAwMDAwMEI4MQorOjEwNjlFMDAwRTY5MTAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDEwNDBBRQorOjEwNjlGMDAwRTFCMTAxMDBDMzg3MDA0MDgxQjAwMDAwMDAwMDAwRkI0RQorOjEwNkEwMDAwMjhCMDAxMDAwMDAwMDBGQjg2QjAwMTAwMDAwMDAwRjg4MworOjEwNkExMDAwMTRCMDAxMDA0Nzg1MjI0NjIzN0MwMDAwNDM4NTIyNDBCNAorOjEwNkEyMDAwODc3QzAwMDAwMDAwMDA0ODFGOTAwMTAwNDU4NTIyNDEzRQorOjEwNkEzMDAwODc3QzAwMDAwMDAwMDA0NzFGOTAwMTAwNDc4NTIyNDIyQworOjEwNkE0MDAwODc3QzAwMDAwMDAwMDA0NTFGOTAwMTAwNDc4NTY2MUIwMQorOjEwNkE1MDAwMkMzMDAwMDAwMDAwMDBBMDEzQjAwMTAwMDAwMDc2NDFCRgorOjEwNkE2MDAwNDFDMzAxMDA3Njg1MjM5MjE1NkMwMDAwNzY4NUEyNDUwRQorOjEwNkE3MDAwMUY3QzAwMDA3QTg1MjI0QkZEN0YwMDAwMTcwMDAwRDBBQworOjEwNkE4MDAwQTJDOTAxMDAwMDAwMDA0MDI3QjAwMTAwMDIwMDAwMEE3NgorOjEwNkE5MDAwMjRDODAxMDBBQjkyMDA0MDBGMzAwMTAwNzQ4NTIyMDgyOQorOjEwNkFBMDAwNDAzMDAwMDAwMDAwMDA0MUEzQzEwMTAwRjAwNzAwMTJDNworOjEwNkFCMDAwMjRDQzAxMDA1MDg1QUE0MTI3NDAwMDAwMDEwMDAwMTNBQQorOjEwNkFDMDAwODBDQzAxMDA3MDg1MjY0MDIzMzAwMDAwMDAwMDAwNDA4QgorOjEwNkFEMDAwODNCMDAxMDA2MDAwMDAwMzg0QzgwMTAwMTAwMDAwMTBCMgorOjEwNkFFMDAwNDhDRDAxMDAxNzAwMDBEMEEyQzkwMTAwNUQ4NUEyNDA3OQorOjEwNkFGMDAwODM2QzAwMDA2OTg1MDA0MTgzQjAwMDAwMDA4MDAwNDI4MworOjEwNkIwMDAwNDQ5OTAxMDAwMDAwNjgyMTM4OTYwMTAwMDAwMDJFNTBEMQorOjEwNkIxMDAwNDlDMTAxMDA2Mjg1QTI0NDIzNkMwMDAwMzAwMDAwMDNEQgorOjEwNkIyMDAwNDhDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMEMwMDAwMjA0MAorOjEwNkIzMDAwRjBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQwMAorOjEwNkI0MDAwNjJERDAxMDA2NTg1QTg0MkUwMzEwMDAwMDAwMDAwNDREQworOjEwNkI1MDAwODVDMDAxMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDE4OQorOjEwNkI2MDAwQTNDMTAxMDA1Qjg1QTI0MTgxNTAwMDAwNzA4NTIyNDBENQorOjEwNkI3MDAwMjM2QzAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBERgorOjEwNkI4MDAwNjJERDAxMDA2RDg1QTg0MDgxMzIwMDAwQUY4MjAwODg3RgorOjEwNkI5MDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwRUUwNzAwNDBGNworOjEwNkJBMDAwMjU5ODAxMDAxNzAwMDBEMDJBQzgwMTAwODM4NTAwMTcyRQorOjEwNkJCMDAwMTBCMDAwMDA5NTk0MDA0MDgxMzIwMTAwN0E4NTAwNDBCOQorOjEwNkJDMDAwODFCMjAwMDBBQjkyMDA5MjI1MzAwMTAwMDAwMDAwNDAyRAorOjEwNkJEMDAwMzFCMDAxMDA3QTg1MjIwODJFMzAwMDAwODM4NTAwNDEwMworOjEwNkJFMDAwMjdCMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDAyRAorOjEwNkJGMDAwODc5ODAxMDBERjk1MDAwQThDMzAwMTAwMDAwMDAwNDBGQQorOjEwNkMwMDAwMEZCMDAxMDAwMDAwMDA1QzFGOTAwMTAwODI4NTIyOUZGMAorOjEwNkMxMDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwRjU4MjAwNDBDQgorOjEwNkMyMDAwODFCMjAwMDAxQTg3MDA0MTNGQzMwMDAwMDAwMDAwNDAwRAorOjEwNkMzMDAwMEZCMDAxMDAyODAwMDAwMTgwQ0UwMTAwOTc4NTJBNDA5NgorOjEwNkM0MDAwODEzMDAwMDAwMDgwMDAxMDQ0QzkwMTAwNDAwMDAwNDA3NQorOjEwNkM1MDAwODE5ODAxMDA4Qzg1QTI0ODFGN0MwMDAwOEM4NUEyNDc4QQorOjEwNkM2MDAwMUY3QzAwMDA4Qzg1QTMwNzAzNkMwMDAwODAwMDAwNDA5RgorOjEwNkM3MDAwODE5ODAxMDA4Rjg1QTM0MDAyNkMwMDAwMjgwMDAwMDE2QworOjEwNkM4MDAwRjBDRDAxMDA5MTg1MDA0MDBGQjAwMDAwMjgwMDAwNDBDOQorOjEwNkM5MDAwRjBDRDAxMDAwNDAwMDA0MDBFQ0MwMTAwMjgwMDAwMDNFQworOjEwNkNBMDAwRjBDOTAxMDAyODAwMDAwMEYwQzkwMTAwMDAwMDAwMTYzMgorOjEwNkNCMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTBCOAorOjEwNkNDMDAwNjJERDAxMDA5NTg1QTg1QzFGMTAwMDAwMDAwMDAwNDBGNworOjEwNkNEMDAwNDM5OTAxMDAwMDAwMDBGMDA4QjAwMTAwQTAwMTJENDAyMAorOjEwNkNFMDAwMDBDMDAxMDA2MTg2MjIwRjQyMDUwMDAwQTg4NTlDMEZBQworOjEwNkNGMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA1NgorOjEwNkQwMDAwNDJDOTAxMDBBMzg1MjI0MEUzNkQwMDAwMDAwMDAwNDc1NgorOjEwNkQxMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQTA4NUE4NDBDMworOjEwNkQyMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQTg4NTIyMDdENQorOjEwNkQzMDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDdBMworOjEwNkQ0MDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZERgorOjEwNkQ1MDAwRTE5MTAxMDBDMDA2QTI0NTFGN0MwMDAwMTAwMDAwMDM2NQorOjEwNkQ2MDAwNDhDOTAxMDAwMDAwMkQ1NDI5QzAwMTAwMDAwMDAwRjhBRQorOjEwNkQ3MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhBNQorOjEwNkQ4MDAwMEVCMDAxMDA0MjAwMDAwMzBBQzgwMTAwMEMwMDAwQTQ3QworOjEwNkQ5MDAwMENDODAxMDBFRDkyMDA0MDgxMzIwMTAwMDAwMDAwMTQ5NworOjEwNkRBMDAwMDJCMDAxMDAwMDAwMDAxNDI0RDAwMTAwMDAwMDAwMTQxMworOjEwNkRCMDAwMTBDMDAxMDAxMjAwMDAwODEwQzgwMTAwMDAwMDAwNDBDRgorOjEwNkRDMDAwMjNCMDAxMDBGRTdGMDAwNTQ0QzkwMTAwMDAwMDAwMEE1NQorOjEwNkREMDAwRTRCMTAxMDBEMTg1MjIwMTgwMzIwMDAwMDAwMDNDNDQ3MgorOjEwNkRFMDAwMjNFMDAxMDAwMDAwMkVBNDgwQjAwMTAwMDAwMDAwMTA4QworOjEwNkRGMDAwNDhDMTAxMDBCRTg1QTMwNzAyNkMwMDAwQkY4NTY4MDE4MQorOjEwNkUwMDAwMUFCMDAwMDAwMDAwNjgwNzFBQjAwMTAwMDAwMDAwMEQ3MQorOjEwNkUxMDAwMDJEMDAxMDAwMDAwMDAwNUYwQjEwMTAwMDAwMDAwMENFQworOjEwNkUyMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMEQxRgorOjEwNkUzMDAwMEFDMDAxMDBDQjg1MjI0MDAzNkMwMDAwQ0I4NTIyNDJCMgorOjEwNkU0MDAwMjM2QzAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDc0NworOjEwNkU1MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwRUY4NTI4NDBCRgorOjEwNkU2MDAwODEzMjAwMDBDODg1MDA0MDgxQjIwMDAwMDAwMDAwMTA5RgorOjEwNkU3MDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDAzNworOjEwNkU4MDAwNjJCMTAxMDBDRDg1QTg0MDIzMzAwMDAwQUY4MjAwODhBOAorOjEwNkU5MDAwMUNCMDAwMDBFRjg1MDA0MDgxQjIwMDAwMDAwMDNDNDRCRgorOjEwNkVBMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTBDNQorOjEwNkVCMDAwNDhDMTAxMDBENjg1QTMxMjBFNkMwMDAwRDc4NTYwMDc3QgorOjEwNkVDMDAwMUFCMDAwMDAwMDAwNjAxMjFBQjAwMTAwMDAwMDY4MEQ0NgorOjEwNkVEMDAwMTY5NDAxMDBGRkZGMDAwQjE2RDgwMTAwMDAwMDY4MDg5RgorOjEwNkVFMDAwM0U5NjAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDIxRAorOjEwNkVGMDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDY2MworOjEwNkYwMDAwNjFCMTAxMDAyMDAwMDA0MzYyREQwMTAwREU4NUE4NUM2NAorOjEwNkYxMDAwMUYxMDAwMDAwRDg2MjIwRDE0NkMwMDAwRTQ4NTIyMEQ2OAorOjEwNkYyMDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwRTg4NTAwMEQ3OQorOjEwNkYzMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTUxQgorOjEwNkY0MDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDBBRAorOjEwNkY1MDAwMjU5ODAxMDBFQTg1MjI0MjIzNkMwMDAwRUY4NTAwNDE1QworOjEwNkY2MDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA5NQorOjEwNkY3MDAwNjJERDAxMDBFQjg1QTg1QzFGMDAwMDAwQUY4MjAwODg4NQorOjEwNkY4MDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwMEQ4NjIyMEQ1RgorOjEwNkY5MDAwMTQ1MDAwMDAwQzg2QTIwRDBFNTAwMDAwRkI4NTIyNDYwNgorOjEwNkZBMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTBBMAorOjEwNkZCMDAwNDJDOTAxMDBGOTg1MjI0MEUzNkQwMDAwMDAwMDAwNDc0RQorOjEwNkZDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjY4NUE4NDBCQgorOjEwNkZEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMjA4MDAwMDNENgorOjEwNkZFMDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDZCQworOjEwNkZGMDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjhERQorOjEwNzAwMDAwMDRCMDAxMDAwMDg2MUZGMDBFMzAwMDAwQjg4NTAwNEM2RgorOjEwNzAxMDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwQjg4NTIzMDcxRgorOjEwNzAyMDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDAyQQorOjEwNzAzMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDAyMAorOjEwNzA0MDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDBDMgorOjEwNzA1MDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTRDOQorOjEwNzA2MDAwNjJERDAxMDAwOTg2QTg0NjFGMTAwMDAwQjg4NTAwMDNGNAorOjEwNzA3MDAwMENCMDAwMDBCODg1MDAwRDE4QzAwMDAwMDQwMDJFMTRFQworOjEwNzA4MDAwMEFEMDAxMDAxMjAwMDAwNTQ4Q0QwMTAwRkU3RjAwMDU3NgorOjEwNzA5MDAwNDJDOTAxMDAwQzAwMkFGMkUwQjEwMTAwMTM4NjIyNDAyRgorOjEwNzBBMDAwMzE2QzAwMDAwMDAwNjAxODM4OTYwMTAwMUUwMDAwNDA5RQorOjEwNzBCMDAwNDM5OTAxMDAwMDgxMDBGNjgwQ0UwMTAwMTc4NkE2NDBBQQorOjEwNzBDMDAwODEzMjAwMDAwMDAwMDA0NDQzQzEwMTAwMTk4NjIyMEJGOAorOjEwNzBEMDAwRUQ2RDAwMDAwODAwMDBBMTQyQzkwMTAwMDIwMDAwQTFGRQorOjEwNzBFMDAwNDZDOTAxMDAwRjAwMDBGQTk0ODgwMTAwMDIwMDAwNEExRQorOjEwNzBGMDAwODZFNDAxMDAwMDAwMDBGNjBFQjAwMTAwMjE4NjIyNDc2MAorOjEwNzEwMDAwMUY3QzAwMDAwNDAwMUY0MzBFNTAwMDAwMjE4NkEwNDY5MworOjEwNzExMDAwMEY0MDAwMDAwMDAwMDA0MTBGQzAwMTAwMjU4NjIyNDhGQQorOjEwNzEyMDAwMUY3QzAwMDAwMDAwMDA0MDkxQjAwMTAwMDQwMDBGQTI4RAorOjEwNzEzMDAwNDIzMTAwMDAyODg2MDA0MDg5QjAwMDAwMEMwMDAwQTIwNworOjEwNzE0MDAwNDJDOTAxMDAwMDAwMDA0Mzg5QjAwMTAwMDAwMDAwNDM3MworOjEwNzE1MDAwOTVEMDAxMDAwMDAwMDBGQzgyQjAwMTAwMkI4NkEwNDEwOAorOjEwNzE2MDAwOTA0MDAwMDAwMDAwMDA0MTkxQzAwMTAwMzA4NjIyNDc5RAorOjEwNzE3MDAwMUY3QzAwMDAzMDg2QTA0Mzg5NkMwMDAwMzA4NjIwNDVDQgorOjEwNzE4MDAwODk2QzAwMDAzMDg2QTA0MTBFNDAwMDAwMDAwMDAwNDFFNAorOjEwNzE5MDAwMEZDMDAxMDAwMDAwMDA0MTg5QzAwMTAwMjg4NkEyNDEwMworOjEwNzFBMDAwOTU1MDAwMDAzOTg2MjI0ODFGN0MwMDAwMTAwMDAwNDhERQorOjEwNzFCMDAwOTJGNDAxMDBGRkZGMDA0ODkwODgwMTAwMzc4NjkwNDg1NAorOjEwNzFDMDAwOTI0MDAwMDAwMDAwMDA0MTkzQzAwMTAwMEEwMDAwQTJBQworOjEwNzFEMDAwNDRDOTAxMDAwMDAwNjYyMDkzQTQwMTAwMzA4MDAwMTAyMworOjEwNzFFMDAwNDRDOTAxMDAxMjAwMDAxNEYwQzkwMTAwMDAwMDAwMTc5QQorOjEwNzFGMDAwRjBCMTAxMDAxMjAwMDAwNUUwQ0QwMTAwMzAwMDAwMTBFOAorOjEwNzIwMDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDA3RQorOjEwNzIxMDAwNjJERDAxMDAzRjg2QTg0MDgxMzIwMDAwNEE4NjIyNUM4MAorOjEwNzIyMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTAwMgorOjEwNzIzMDAwNDhDMTAxMDA0OTg2MjI0MEUzNkQwMDAwMDAwMDAwNDY3RAorOjEwNzI0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNDY4NkE4NDBFNworOjEwNzI1MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwNUM5QQorOjEwNzI2MDAwMUY4MDAxMDA0RDg2QTI0NzFGN0MwMDAwRTM5MjAwNDA3MgorOjEwNzI3MDAwODEzMjAxMDBDNjg2MDAxNzEwQjAwMDAwRUE5MjAwNDA3QgorOjEwNzI4MDAwODEzMjAxMDAwMDAwMkYwMzQ4QjEwMTAwNTE4NkEwMDdBMAorOjEwNzI5MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDAwMEI3NAorOjEwNzJBMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwNTU4NjkwRjI5MworOjEwNzJCMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBEOQorOjEwNzJDMDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwNTA5QgorOjEwNzJEMDAwMkJFMDAxMDAwMDAwMDBGMjJBOTQwMTAwMzA4MDAwMTAzMQorOjEwNzJFMDAwNDJDOTAxMDA1Rjg2MjI0MEUzNkQwMDAwMDAwMDAwNDRCNworOjEwNzJGMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNUM4NkE4NDAyMQorOjEwNzMwMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDA4MDAwMTdBRQorOjEwNzMxMDAwMTBEQzAxMDBDNjg2MDA0MDgxQjIwMDAwNjk4NjlDMEYyNworOjEwNzMyMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAxRgorOjEwNzMzMDAwNDJDOTAxMDA2OTg2MjI0MEUzNkQwMDAwMDAwMDAwNDc1OQorOjEwNzM0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNjY4NkE4NDBDNgorOjEwNzM1MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNkU4NjIyMDdEOAorOjEwNzM2MDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDc2RAorOjEwNzM3MDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZBOQorOjEwNzM4MDAwRTE5MTAxMDAwNDAwMkUwMzQ4QjEwMTAwMDAwMDAwMEE1MQorOjEwNzM5MDAwRTBCMTAxMDA3Mzg2MjI0MDMxNkMwMDAwMEMwMDAwNDAxNworOjEwNzNBMDAwNDU5OTAxMDAwMDAwNjAxODM4OTYwMTAwMDAwMDJFMTA3OQorOjEwNzNCMDAwNDhCMTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDhEOAorOjEwNzNDMDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDQ0MgorOjEwNzNEMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNzg4NkE4NDA5MAorOjEwNzNFMDAwMjMzMDAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDJENTI0NgorOjEwNzNGMDAwMTFDMDAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjg5RQorOjEwNzQwMDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjgwRQorOjEwNzQxMDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwMDAwMDNDNDRBOAorOjEwNzQyMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTAzRgorOjEwNzQzMDAwNDhDMTAxMDA4Njg2QTMxMjBFNkMwMDAwODc4NjY4MDc4QgorOjEwNzQ0MDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMDAwMDAwMTAxRAorOjEwNzQ1MDAwODZDMDAxMDAwMDAwNjgwODNFOTYwMTAwMDAwMDAwMEM5NAorOjEwNzQ2MDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwNDZBMAorOjEwNzQ3MDAwNjFCMTAxMDAyMDAwMDA0MzYyREQwMTAwOEM4NkE4NUM0MAorOjEwNzQ4MDAwMUYxMDAwMDBCQjg2MjIwRDE0NkMwMDAwOTI4NjIyMEQ5NgorOjEwNzQ5MDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwOTY4NjAwMEQ1NQorOjEwNzRBMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTVBNgorOjEwNzRCMDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDAzOAorOjEwNzRDMDAwMjU5ODAxMDA5ODg2MjI0MjIzNkMwMDAwOUQ4NjAwNDE4OQorOjEwNzREMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAyMAorOjEwNzRFMDAwNjJERDAxMDA5OTg2QTg1QzFGMDAwMDAwQUY4MjAwODg2MQorOjEwNzRGMDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwMDQwMDIyMEQ3OQorOjEwNzUwMDAwMTQ1MDAwMDBCQTg2QTIwRDBFNTAwMDAwQTk4NjIyNDYzMworOjEwNzUxMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTAyQQorOjEwNzUyMDAwNDJDOTAxMDBBNzg2MjI0MEUzNkQwMDAwMDAwMDAwNDcyOQorOjEwNzUzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQTQ4NkE4NDA5NgorOjEwNzU0MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMjA4MDAwMDM2MAorOjEwNzU1MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDY0NgorOjEwNzU2MDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjg2OAorOjEwNzU3MDAwMDRCMDAxMDBBRTg2MUZGMDBFMzAwMDAwODE4NjAwNEM4MgorOjEwNzU4MDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwODE4NjIzMDdFMAorOjEwNzU5MDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDBCNQorOjEwNzVBMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDBBQgorOjEwNzVCMDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDA0RAorOjEwNzVDMDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQ1NAorOjEwNzVEMDAwNjJERDAxMDBCNzg2QTg0NjFGMTAwMDAwODE4NjAwMDMwNworOjEwNzVFMDAwMENCMDAwMDA4MTg2MDAwRDE4QzAwMDAwQzQ4NjIyNUMyQgorOjEwNzVGMDAwMUY3QzAwMDAwMDAwMDA1QzFGODAwMTAwMDAwMDNDNDQ3NAorOjEwNzYwMDAwMjNFMDAxMDAwMDAwMkQxMDQ4QzEwMTAwQzQ4NjIyNDA4MworOjEwNzYxMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA3MQorOjEwNzYyMDAwNjJERDAxMDBDMTg2QTg0MDgxMzIwMDAwQUY4MjAwODg3RgorOjEwNzYzMDAwMUNCMDAwMDAwMDAwMDAxNzEwQjAwMTAwQzY4NjAwNDAxQQorOjEwNzY0MDAwMkJCMDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDAwMDAwMDRGQQorOjEwNzY1MDAwRTBCMTAxMDBDQjg2MjI5RjEzNkMwMDAwMDIwMDAwODg3RAorOjEwNzY2MDAwMUNDQzAxMDBGNTgyMDA0MDgxQjIwMDAwRjA5NTAwNDE4MQorOjEwNzY3MDAwM0Y0MzAxMDAwMDAwMDA0MDhEQjAwMTAwMDAwMDAwNDBDOQorOjEwNzY4MDAwMDVCMDAxMDBERjk1MDA0MDBGMzAwMTAwMzA4NzAwNUMzRAorOjEwNzY5MDAwMUY5MDAwMDAxMDAwMDAwMDBFRjQwMTAwMDAwMDAwM0FFRQorOjEwNzZBMDAwMDE4NDAxMDAwMzAwMDAwNzFBRjQwMTAwRUY5MjAwMDdCMworOjEwNzZCMDAwMTYzMDAxMDBEQTg2MjI0MTgxNkMwMDAwRDg4NjIyNDIxMQorOjEwNzZDMDAwODE2QzAwMDBBRjgyMDA4ODFDQjAwMDAwRDk4NjIyNUY2OAorOjEwNzZEMDAwMEY3QzAwMDAxQTg3MDA0MDBGQjAwMDAwRTI4NkEyNUExQgorOjEwNzZFMDAwMUY3QzAwMDA2OTkyMDA0MDgxMzIwMTAwRTI4NjIyMjA2NgorOjEwNzZGMDAwODU2QzAwMDBERjg2OUMwRjgwMzIwMDAwQUY4MjAwODgxRQorOjEwNzcwMDAwMUNCMDAwMDA0QTkzMDA1QzFGMDAwMTAwM0M5NTAwNDI0MQorOjEwNzcxMDAwNjEzMTAxMDBBRjgyMDA4ODFDQjAwMDAwOTAwNDAwMDdCNgorOjEwNzcyMDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA3NgorOjEwNzczMDAwMThCMDAxMDAwMDAwMDAwMDgwQjAwMTAwQzM4N0EyNUYwNAorOjEwNzc0MDAwODE2QzAwMDBBODAwMkQ0MzE5ODAwMTAwMzcwMDJERjA0NgorOjEwNzc1MDAwMjRCMDAxMDAwNDAwMDBGMzhFRjQwMTAwMEYwMDAwRjNEOAorOjEwNzc2MDAwOTA4ODAxMDBGMTg2MjI0ODhFNkMwMDAwMzYwMDAwNDBBRgorOjEwNzc3MDAwNDM5OTAxMDA1ODAwM0Q0M0U3RTEwMTAwRjE4NjFGRjAwNQorOjEwNzc4MDAwMjQ2QzAwMDBGMDg2MjM0MThGNkMwMDAwQzM4NzAwNDcwMworOjEwNzc5MDAwODFCMDAwMDBDMzg3MDA0ODgxQjAwMDAwNDAwMDAwNDA3NQorOjEwNzdBMDAwNDM5OTAxMDBCMDAwMkRGMDE0QjAwMTAwRjY4NjIyMEFDMgorOjEwNzdCMDAwOTA0MDAwMDBDMzk1MDA0MDkxMzAwMTAwQzM4N0EyNDA3MworOjEwNzdDMDAwODAzMjAwMDBCMDAwMkQ0NTgxQjAwMTAwMDI4NzIyRjAxOAorOjEwNzdEMDAwMkMzMDAwMDBBMzAwMkQzMDgzQjAwMTAwQUMwMDJERjM0RAorOjEwNzdFMDAwODJFMDAxMDBGQzg2QTM0MTJDNkMwMDAwMDAwMDAwMTYyMgorOjEwNzdGMDAwODJCMDAxMDA5ODAwMkRGMDgyQzAwMTAwODgwMDJERjBCOQorOjEwNzgwMDAwODJEMDAxMDAwMDAwMDBGMjk4RTgwMTAwQzM4NzIwNENGQworOjEwNzgxMDAwODI2QzAwMDA3QzAwMkQ0MTk4RTgwMTAwQzM4NzIwRjBCNQorOjEwNzgyMDAwOTg2QzAwMDAxQTg3MjIwQTgwMzIwMDAwNDAwMjAwMEM4NworOjEwNzgzMDAwN0U4OTAxMDAxQTg3QTY0MDgxMzIwMDAwQzM4NzAwNDk3MworOjEwNzg0MDAwODFCMDAwMDAyMDAwMDBBNjgwQjAwMTAwMEE4NzIyNDMxQQorOjEwNzg1MDAwMjE2RjAwMDAxMzgwMDA0MDgwREMwMTAwMEI4NzAwNDA5NgorOjEwNzg2MDAwODFCMjAwMDAxQTgwMDA0MDgwREMwMTAwMEI4N0EyNUUxQworOjEwNzg3MDAwMEI3RDAwMDAwMDAwMDA0MDA4QjEwMTAwMEQ4NzlGODVDRQorOjEwNzg4MDAwODAzMjAwMDAxMTg3MDA0MDgxQjIwMDAwRUM4MjIyNDA2QgorOjEwNzg5MDAwNTc3RDAwMDAwMTAwMDA0MDU3OTkwMTAwMTE4NzQyNDBDOAorOjEwNzhBMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwREQ4MjFBNUJFNgorOjEwNzhCMDAwNjk5MzAwMDAwNDAwMDBDQjgxQzgwMTAwMTc4NzIyNDBCMworOjEwNzhDMDAwRjI3RjAwMDBDNDgwMDA2Rjk3MzMwMTAwMTk4NzIyNDBDNworOjEwNzhEMDAwNzM3RDAwMDBERTgwMDA0MThCQjMwMDAwMTQ4NzAwNDAwMAorOjEwNzhFMDAwODFCMjAwMDAyMTg3OUMwRjgwMzIwMDAwMDA4MDAwMTBEMAorOjEwNzhGMDAwNDJDOTAxMDAyMTg3MjI0MEUzNkQwMDAwMDAwMDAwNDVERAorOjEwNzkwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUU4N0E4NDA0NworOjEwNzkxMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNDU5MjIyMDIzNAorOjEwNzkyMDAwODAzMjAwMDAyMjg3NDI0MDgxMzIwMDAwMDAwMDAwNDQ4MworOjEwNzkzMDAwOTM5MzAxMDA0NTkyMUEwMjY4OTcwMDAwMkM4NzlDMEZEMAorOjEwNzk0MDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMkM4NzIyNDBENAorOjEwNzk1MDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAyRgorOjEwNzk2MDAwNjJERDAxMDAyOTg3QTg0MDgxMzIwMDAwQUY4MjAwODhEMworOjEwNzk3MDAwMUNCMDAwMDA0RjkyMjIwMjgwMzIwMDAwMkQ4NzQyNDA0RQorOjEwNzk4MDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNEY5MjFBMDJEQworOjEwNzk5MDAwNjg5NzAwMDAzNzg3OUMwRjgwMzIwMDAwMDA4MDAwMTAzRAorOjEwNzlBMDAwNDJDOTAxMDAzNzg3MjI0MEUzNkQwMDAwMDAwMDAwNDUxNgorOjEwNzlCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMzQ4N0E4NDA4MQorOjEwNzlDMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwRjk4MjIyMDJFMAorOjEwNzlEMDAwODAzMjAwMDAzODg3NDI0MDgxMzIwMDAwMDAwMDAwNDRCRAorOjEwNzlFMDAwOTM5MzAxMDAwMDAwMUEwMjY4OTcwMTAwRjk4MjAwNDA5OQorOjEwNzlGMDAwMDVCMDAwMDAwMDgwMDBBNjU2QjEwMTAwNTY5NTJGNDA0QQorOjEwN0EwMDAwMDVCMDAxMDA4ODg3QTI0MEU3NkQwMDAwQjg5NDI5NDFDNQorOjEwN0ExMDAwRTdCMTAxMDAwMDAwMDA1NEVGOTMwMTAwMDAwMDAwRjIwNAorOjEwN0EyMDAwMEVCMDAxMDAyOTAwMDA0MDBEOTgwMTAwMDkwMDAwMDc3OAorOjEwN0EzMDAwMTJFNDAxMDAwMDAwMDBBNzEzQzAwMTAwMDMwMDAwMDdDQQorOjEwN0E0MDAwMUFGNDAxMDAwNzAwMDAwNzE2ODgwMTAwRkZGRjAwMTA2QworOjEwN0E1MDAwMzREODAxMDAwMDAwMDAwMzM0OTQwMTAwMDAwMDAwNDAwRAorOjEwN0E2MDAwMjNCMDAxMDAyMDE4MDA0MDExOTgwMTAwMDBCNTAwMEQ1RQorOjEwN0E3MDAwNDJDOTAxMDA2Qzg3MjIwQkU2N0QwMDAwNEQ4NzYwNDAwMworOjEwN0E4MDAwODEzMjAwMDBGRkZGMDAwNzg0ODkwMTAwNTQ4NzA1QzI4RQorOjEwN0E5MDAwMjQzMDAwMDA1ODA0MDA0MDgxMzIwMTAwMDAwMDJEMDUxMAorOjEwN0FBMDAwNDhCMTAxMDA4OTg3NzBGMDE4MzAwMTAwNkM4NzAwNDBGMAorOjEwN0FCMDAwODFCMjAwMDAwMDAwNzA0MDgxQjIwMTAwNjM4N0EwNDhERAorOjEwN0FDMDAwMjM2QzAwMDAwMDAwMDA1MDM1RDAwMTAwMDA4MDAwMUEzNworOjEwN0FEMDAwNDJDOTAxMDA1RDg3MjI0MEUzNkQwMDAwMDAwMDAwNDJDMgorOjEwN0FFMDAwNjFCMTAxMDA0MDAwMDAxQTYyREQwMTAwNUE4N0E4NDAyMAorOjEwN0FGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMjA5ODAwNDA1NgorOjEwN0IwMDAwNDM5OTAxMDA4OTg3MDBGODE4MzAwMTAwNUU4N0EyNDE3RgorOjEwN0IxMDAwMjM1MDAwMDBGRkZGMDAxMDM0RDgwMTAwMDAwMDAwMDNENAorOjEwN0IyMDAwMzQ5NDAxMDAyMDE4MDA0MDExOTgwMTAwMDAwMDJFMUEyMgorOjEwN0IzMDAwNDhCMTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwMDg1QworOjEwN0I0MDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMjAwMDAwMUEwNAorOjEwN0I1MDAwNjJERDAxMDA2Nzg3QTgwOUUwMzEwMDAwMDAwMDAwNDFGNAorOjEwN0I2MDAwMjNDMDAxMDAwMDAwMDA1MDM1QzAwMTAwMDAwMDAwNDRBNworOjEwN0I3MDAwMTFDMDAxMDA3ODg3MjI0MTBENTAwMDAwMDAwMDAwNDEzMworOjEwN0I4MDAwMEZDMDAxMDA3NDg3QTBBQTBGNkMwMDAwMDAwMDAwNDEyNAorOjEwN0I5MDAwMEZCMDAxMDAwOTAwMDAwNzEyRTQwMTAwMDAwMDAwQTc3NworOjEwN0JBMDAwMTNDMDAxMDAwMDAwMDA0MDFCQjAwMTAwNEI4NzAwNDFFMgorOjEwN0JCMDAwMTdCMDAwMDAwMDAyMDAwOTEyQzgwMTAwNEI4NzgzNDE4MgorOjEwN0JDMDAwMTc0MDAwMDAwMDAwMDA0MDE3QjAwMTAwNEI4NzAwNDE0MworOjEwN0JEMDAwMUJDMDAwMDA4Mzg3MjM0MDIzNkMwMDAwMDAwMDAwNTA3RQorOjEwN0JFMDAwMzVEMDAxMDAwMDgwMDAxQTQyQzkwMTAwODA4NzIyNDA4MAorOjEwN0JGMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMUE4NgorOjEwN0MwMDAwNjJERDAxMDA3RDg3QTg0MDgxMzIwMDAwQUY4MjAwODhEQworOjEwN0MxMDAwMUNCMDAwMDAyMDk4MDA0MDQzOTkwMTAwODk4NzAwRjhCQgorOjEwN0MyMDAwMTgzMDAxMDA4MTg3QTI0MTIzNTAwMDAwMDAwMDAwNDE2QworOjEwN0MzMDAwMEZDMDAxMDA4Njg3QTBBQTBGNkMwMDAwMDAwMDAwNDE2MQorOjEwN0M0MDAwMEZCMDAxMDBCODk0MjAwN0U0QjEwMTAwNTY5NTIwNDAyMAorOjEwN0M1MDAwRTdCMTAxMDAxQTg3MDA0MDBGQjAwMDAwRkZGRjAwMENFMQorOjEwN0M2MDAwODBEODAxMDBDMDAyMDAwQzdFODkwMTAwOUI4NzI2NTQ0OQorOjEwN0M3MDAwNjEzMTAwMDA5MTg3ODcwQzgwMzIwMDAwMEYwMDAwNDBDNgorOjEwN0M4MDAwNjI5OTAxMDA5MTg3Mjg0MDgxMzIwMDAwOTE4N0EyNTRCNworOjEwN0M5MDAwNzc3RDAwMDA4RDg3MDA0MDgxQjIwMDAwOTY4NzIyNDZFNAorOjEwN0NBMDAwMTk3QzAwMDAwRDAwMDA0MDYyOTkwMTAwMDAwMEE4NDAwRQorOjEwN0NCMDAwODFCMjAwMDAwMDAwQTI1NDc3N0QwMTAwOTI4NzAwNDA0RAorOjEwN0NDMDAwODFCMjAwMDA5Qjg3MjI0OTE5N0MwMDAwMEUwMDAwNDAxMQorOjEwN0NEMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDAwMEEyNTQ5NworOjEwN0NFMDAwNzc3RDAxMDA5Njg3MDA0MDgxQjIwMDAwMTAwMDAwNDBCRgorOjEwN0NGMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDAwMEEyNTQ3NworOjEwN0QwMDAwNzc3RDAxMDA5Qjg3MDA0MDgxQjIwMDAwMzA5NDJGNTVBMQorOjEwN0QxMDAwRjE5MzAxMDAwMDQwMDBBNjU2QjEwMTAwRjk4MkEyNDE5MgorOjEwN0QyMDAwRTU1MTAwMDA2NDAwMDA0MEU1OTkwMTAwQTM4NzQ0NDA0QworOjEwN0QzMDAwODEzMjAwMDBBNjg3QTI5MzU3NkYwMDAwMDAwMDAwNDEyNworOjEwN0Q0MDAwNTdDMzAxMDAwMDAwMUNBQjI3QjMwMTAwRjk4MjIyNTA4OQorOjEwN0Q1MDAwRkQ3RjAwMDBGOTgyMjI1MUZEN0YwMDAwRjk4MkEyNDFERgorOjEwN0Q2MDAwMUQ1MzAwMDA1MDQ2MDA0MDFEOUIwMTAwMzgwNTAwNDA5NworOjEwN0Q3MDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAyNworOjEwN0Q4MDAwNDkzMTAxMDBCMjg3MjI0MEI1NkYwMDAwMEUwMDAwNDg2MworOjEwN0Q5MDAwQjJDQjAxMDAyMDA0MDA0MUI1NTMwMTAwRjk4MjAwNDAzQworOjEwN0RBMDAwODFCMjAwMDAwMDAwMDA1MUZEODMwMTAwNDAxNjAwNDAzOAorOjEwN0RCMDAwNDU5OTAxMDA0MDA1MDA0MDQ5MzEwMTAwMUUwMDAwNDg3RQorOjEwN0RDMDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREE1MworOjEwN0REMDAwOTFDMDAxMDAwNDAwMDA0OEIyQ0IwMTAwMjAwNDAwNDAyMworOjEwN0RFMDAwQjUzMzAxMDA2MDE2MjA0MEU1QjEwMTAwNDA4MjAwNDAzQgorOjEwN0RGMDAwQjUzMzAxMDAwODAwMDA0OEIyQ0IwMTAwRkZGRjAwNEE4NAorOjEwN0UwMDAwQjQ4QjAxMDAyMDA0MDA0MDgxMzIwMTAwMEEwMDAwNDhDOAorOjEwN0UxMDAwQjJDQjAxMDAxMDAwMDA0QUI0RjcwMTAwMjAwNDAwNDA3QQorOjEwN0UyMDAwODEzMjAxMDBGOTgyMDA0MDgxQjIwMDAwMDUwMDAwNDA2QgorOjEwN0UzMDAwNDM5OTAxMDAwMDAwMDBGMzA4QjAwMTAwMDQwMDIwNDA1NQorOjEwN0U0MDAwRTZCMTAxMDAwMzAwMDA0MDk2RTQwMTAwMDAwMDAwMDREOAorOjEwN0U1MDAwOTZDMDAxMDBDOTg3MDA0QjEwQzkwMDAwRUM4QTAwNDFBMAorOjEwN0U2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEMgorOjEwN0U3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzQworOjEwN0U4MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyQworOjEwN0U5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxQworOjEwN0VBMDAwOEZCMDAwMDAyMDhCMDA0MTA5QjAwMDAwMDQwMDAwMjBDQQorOjEwN0VCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGQworOjEwN0VDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFQworOjEwN0VEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQworOjEwN0VFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNTI4QjAwNDVDRQorOjEwN0VGMDAwMDlCMDAwMDA1MjhCMDA0NTA5QjAwMDAwNTI4QjAwNDVDQworOjEwN0YwMDAwMDlCMDAwMDA1MjhCMDA0NTA5QjAwMDAwMDQwMDAwMjBCOQorOjEwN0YxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5QgorOjEwN0YyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwOTE4QjAwNDM1MAorOjEwN0YzMDAwMDlCMDAwMDBCQThCMDA0MzA5QjAwMDAwQkU4QjAwNDRCQQorOjEwN0Y0MDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjBDMAorOjEwN0Y1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1QgorOjEwN0Y2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0QgorOjEwN0Y3MDAwOEZCMDAwMDBDQThCMDA0MzA5QjAwMDAwQzk4QjAwNDNEQQorOjEwN0Y4MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBBMgorOjEwN0Y5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxQgorOjEwN0ZBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNzk4QzAwNDJFOAorOjEwN0ZCMDAwMDlCMDAwMDA3OThDMDA0MzA5QjAwMDAwNzk4QzAwNDRCRQorOjEwN0ZDMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA2MgorOjEwN0ZEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQgorOjEwN0ZFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDQgorOjEwN0ZGMDAwOEZCMDAwMDA5OThDMDA0MzA5QjAwMDAwMDQwMDAwMjBGRAorOjEwODAwMDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA5QgorOjEwODAxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5QQorOjEwODAyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4QQorOjEwODAzMDAwOEZCMDAwMDBCNzhDMDA0MzA5QjAwMDAwQjc4QzAwNDQzQgorOjEwODA0MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBFMQorOjEwODA1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1QQorOjEwODA2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0QQorOjEwODA3MDAwOEZCMDAwMDBCNzhDMDA0MjA5QjAwMDAwMDQwMDAwMjA1RgorOjEwODA4MDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjAxQgorOjEwODA5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxQQorOjEwODBBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwQQorOjEwODBCMDAwOEZCMDAwMDBERjhDMDA0NDA5QjAwMDAwMDQwMDAwMjBGNQorOjEwODBDMDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBEQgorOjEwODBEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQQorOjEwODBFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRUE4QTAwNDIzOAorOjEwODBGMDAwMDlCMDAwMDBGMDhDMDA0NTA5QjAwMDAwRjA4QzAwNDU4QworOjEwODEwMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjAyMAorOjEwODExMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5OQorOjEwODEyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRjI4QzAwNDJFRAorOjEwODEzMDAwMDlCMDAwMDBGMjhDMDA0MzA5QjAwMDAwRjI4QzAwNDQ0QQorOjEwODE0MDAwMDlCMDAwMDBGMjhDMDA0NTA5QjAwMDAwMDQwMDAwMjBENgorOjEwODE1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1OQorOjEwODE2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0OQorOjEwODE3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRkE4QzAwNDQ5MworOjEwODE4MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBBMAorOjEwODE5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxOQorOjEwODFBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMEI4RDAwNDI1MworOjEwODFCMDAwMDlCMDAwMDBGQjhDMDA0MzA5QjAwMDAwMEI4RDAwNDRBNworOjEwODFDMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA2MAorOjEwODFEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEOQorOjEwODFFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDOQorOjEwODFGMDAwOEZCMDAwMDAwQzhEMDA0MzA5QjAwMDAwMDI4RDAwNDREOAorOjEwODIwMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjAxRgorOjEwODIxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5OAorOjEwODIyMDAwOEZCMDAwMDBFQThBMDA0MTA5QjAwMDAwNzc4QzAwNDI1QworOjEwODIzMDAwMDlCMDAwMDA3NzhDMDA0MzA5QjAwMDAwNzc4QzAwNDQzRgorOjEwODI0MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBERgorOjEwODI1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1OAorOjEwODI2MDAwOEZCMDAwMDBFQThBMDA0MTA5QjAwMDAwMEQ4RDAwNDI4NQorOjEwODI3MDAwMDlCMDAwMDAwRDhEMDA0MzA5QjAwMDAwMEQ4RDAwNDREMQorOjEwODI4MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA5RgorOjEwODI5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxOAorOjEwODJBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwOAorOjEwODJCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGOAorOjEwODJDMDAwOEZCMDAwMDAxNDhEMDA0NTA5QjAwMDAwMDQwMDAwMjBBQworOjEwODJEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEOAorOjEwODJFMDAwOEZCMDAwMDAxNjhEMDA0MjA5QjAwMDAwMDQwMDAwMjA4RAorOjEwODJGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCOAorOjEwODMwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBNworOjEwODMxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NworOjEwODMyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMjI4RDAwNDNCOQorOjEwODMzMDAwMDlCMDAwMDA4MThEMDA0MzA5QjAwMDAwQkU4QjAwNDRFRAorOjEwODM0MDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjBCQworOjEwODM1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1NworOjEwODM2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0NworOjEwODM3MDAwOEZCMDAwMDA4OThEMDA0MzA5QjAwMDAwQkU4QjAwNDQxRgorOjEwODM4MDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjA3QworOjEwODM5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxNworOjEwODNBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwNworOjEwODNCMDAwOEZCMDAwMDA5QThEMDA0MzA5QjAwMDAwMDQwMDAwMjAzNworOjEwODNDMDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBEOAorOjEwODNEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBENworOjEwODNFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwOEU4QjAwNDM4RgorOjEwODNGMDAwMDlCMDAwMDA4NThEMDA0MzA5QjAwMDAwQkU4QjAwNDQyOQorOjEwODQwMDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjBGQgorOjEwODQxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDcwMDJEMDU4MQorOjEwODQyMDAwNDhCMTAxMDAwMDAwMDBGMzA4QjAwMTAwMDYwMDIwNDczOQorOjEwODQzMDAwRTZCMTAxMDAwNDAwMDA0Nzk2RTQwMTAwMDAwMDAwNDc5NworOjEwODQ0MDAwOTZEMDAxMDAwMDAwMDA0Nzk2RDAwMTAwMDAwMDAwMDQxMworOjEwODQ1MDAwOTZDMDAxMDA4OTg4MDA0QjEwQzkwMDAwQjI4RDAwNDkwOAorOjEwODQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENgorOjEwODQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QQorOjEwODQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQQorOjEwODQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQQorOjEwODRBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQQorOjEwODRCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQQorOjEwODRDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwODREMDAwODVCMDAwMDBFQjhEMDA0MjA5QjAwMDAwMDQwMDAwMjBEMAorOjEwODRFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQQorOjEwODRGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQQorOjEwODUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOQorOjEwODUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOQorOjEwODUyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OQorOjEwODUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OQorOjEwODU0MDAwODVCMDAwMDBGMThEMDA0NjA5QjAwMDAwMDQwMDAwMjA1NQorOjEwODU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OQorOjEwODU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OQorOjEwODU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwODU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwODU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOQorOjEwODVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxOQorOjEwODVCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkY4RDAwNDI1RgorOjEwODVDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjE4RTAwNDJBOAorOjEwODVEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NQorOjEwODVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEOQorOjEwODVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDOQorOjEwODYwMDAwODVCMDAwMDAxQzhFMDA0QTA5QjAwMDAwMDQwMDAwMjA2NAorOjEwODYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOAorOjEwODYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjQ4RTAwNDNDNworOjEwODYzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q4RTAwNDREOQorOjEwODY0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNAorOjEwODY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwODY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OAorOjEwODY3MDAwODVCMDAwMDA3QzhFMDA0QjA5QjAwMDAwMDQwMDAwMjA5MworOjEwODY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOAorOjEwODY5MDAwODVCMDAwMDBGNDhEMDA0MTA5QjAwMDAwMDQwMDAwMjAwNgorOjEwODZBMDAwODVCMDAwMDBGNDhEMDA0MzA5QjAwMDAwRjQ4RDAwNDQ1MworOjEwODZCMDAwMDlCMDAwMDBGNDhEMDA0NTA5QjAwMDAwRjQ4RDAwNDZCQgorOjEwODZDMDAwMDlCMDAwMDBGNDhEMDA0NzA5QjAwMDAwRjQ4RDAwNDhBNworOjEwODZEMDAwMDlCMDAwMDBGNDhEMDA0OTA5QjAwMDAwRjQ4RDAwNEE5MworOjEwODZFMDAwMDlCMDAwMDBGNDhEMDA0QjA5QjAwMDAwRjQ4RDAwNEM3RgorOjEwODZGMDAwMDlCMDAwMDBGNDhEMDA0RDA5QjAwMDAwMDQwMDAwMjAxNgorOjEwODcwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNDIyRgorOjEwODcxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNDQ5OQorOjEwODcyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMworOjEwODczMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NworOjEwODc0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3NworOjEwODc1MDAwODVCMDAwMDBEQzhFMDA0QjA5QjAwMDAwMDQwMDAwMjA1MgorOjEwODc2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NworOjEwODc3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NworOjEwODc4MDAwODVCMDAwMDBGNDhFMDA0NTA5QjAwMDAwMDQwMDAwMjAxMAorOjEwODc5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyNworOjEwODdBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDc1QQorOjEwODdCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNDVFQworOjEwODdDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MworOjEwODdEMDAwODVCMDAwMDA1NDkxMDA0NjA5QjAwMDAwMDQwMDAwMjA1QworOjEwODdFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENworOjEwODdGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNworOjEwODgwMDAwODVCMDAwMDAyMThFMDA0NjA5QjAwMDAwRkY4RDAwNDZCMworOjEwODgxMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgwNworOjEwODgyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMgorOjEwODgzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM4RTAwNEFCNgorOjEwODg0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwODg1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NgorOjEwODg2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NgorOjEwODg3MDAwODVCMDAwMDA3RDhFMDA0NTA5QjAwMDAwMjQ4RTAwNDNDNQorOjEwODg4MDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg5NworOjEwODg5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwODhBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M4RTAwNENFNAorOjEwODhCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwODhDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNgorOjEwODhEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFNgorOjEwODhFMDAwODVCMDAwMDAxMThGMDA0NDA5QjAwMDAwMTE4RjAwNDJENAorOjEwODhGMDAwMDlCMDAwMDBENThBMDA0NzA5QjAwMDAwRDU4QTAwNDhCOQorOjEwODkwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwODkxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMTE4RjAwNEJERQorOjEwODkyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMQorOjEwODkzMDAwODVCMDAwMDBGNDhEMDA0MTA5QjAwMDAwMzQ4RjAwNDc3RAorOjEwODk0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM4RjAwNDcyMworOjEwODk1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwODk2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NQorOjEwODk3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NQorOjEwODk4MDAwODVCMDAwMDAxQzhGMDA0NzA5QjAwMDAwMDQwMDAwMjBFMworOjEwODk5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyNQorOjEwODlBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNQorOjEwODlCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNQorOjEwODlDMDAwODVCMDAwMDAxQzhGMDA0NzA5QjAwMDAwMzQ4RjAwNDdCRAorOjEwODlEMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg0NgorOjEwODlFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MQorOjEwODlGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM4RjAwNDdGNworOjEwOEEwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMAorOjEwOEExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNAorOjEwOEEyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwOEEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NAorOjEwOEE0MDAwODVCMDAwMDA0MzhGMDA0NzA5QjAwMDAwNDM4RjAwNDgwNQorOjEwOEE1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwOEE2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NAorOjEwOEE3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NAorOjEwOEE4MDAwODVCMDAwMDBBNjhGMDA0MDA5QjAwMDAwQzQ4RjAwNDdFOQorOjEwOEE5MDAwMDlCMDAwMDBCODhGMDA0ODA5QjAwMDAwMTQ4RjAwNDdFQgorOjEwOEFBMDAwMDlCMDAwMDAxNDhGMDA0NzA5QjAwMDAwQzQ4RjAwNDdEMAorOjEwOEFCMDAwMDlCMDAwMDBDQjhGMDA0NzA5QjAwMDAwQ0I4RjAwNDgwMQorOjEwOEFDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQjg4RjAwNDgwNQorOjEwOEFEMDAwMDlCMDAwMDAxNDhGMDA0NzA5QjAwMDAwMTQ4RjAwNDc1MAorOjEwOEFFMDAwMDlCMDAwMDBCODhGMDA0ODA5QjAwMDAwMDQwMDAwMjA2MQorOjEwOEFGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNAorOjEwOEIwMDAwODVCMDAwMDBEQzhFMDA0MzA5QjAwMDAwMDQwMDAwMjBBNgorOjEwOEIxMDAwODVCMDAwMDBEQzhFMDA0NTA5QjAwMDAwREM4RTAwNDYwOAorOjEwOEIyMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDhGNAorOjEwOEIzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNEE2RgorOjEwOEI0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNEM1RAorOjEwOEI1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERgorOjEwOEI2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzM4RjAwNDc2RQorOjEwOEI3MDAwMDlCMDAwMDAyNzhGMDA0ODA5QjAwMDAwMUI4RjAwNDc5NAorOjEwOEI4MDAwMDlCMDAwMDAxQjhGMDA0NzA5QjAwMDAwMzM4RjAwNDc3OQorOjEwOEI5MDAwMDlCMDAwMDBENThBMDA0NzA5QjAwMDAwRDU4QTAwNDgxNgorOjEwOEJBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjc4RjAwNDhCNQorOjEwOEJCMDAwMDlCMDAwMDAxQjhGMDA0NzA5QjAwMDAwMUI4RjAwNDc2MQorOjEwOEJDMDAwMDlCMDAwMDAyNzhGMDA0ODA5QjAwMDAwMDQwMDAwMjAxMQorOjEwOEJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNDI2OQorOjEwOEJFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNDREMworOjEwOEJGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRgorOjEwOEMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMgorOjEwOEMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwOEMyMDAwODVCMDAwMDBDRDhGMDA0QjA5QjAwMDAwMDQwMDAwMjA4QgorOjEwOEMzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwOEM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MgorOjEwOEM1MDAwODVCMDAwMDBDRDhGMDA0MzA5QjAwMDAwMDQwMDAwMjA2MworOjEwOEM2MDAwODVCMDAwMDBDRDhGMDA0NTA5QjAwMDAwQ0Q4RjAwNDZEMworOjEwOEM3MDAwMDlCMDAwMDBDRDhGMDA0NzA5QjAwMDAwQ0Q4RjAwNDgzQgorOjEwOEM4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNEEyQworOjEwOEM5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNEMxQQorOjEwOENBMDAwMDlCMDAwMDBDRDhGMDA0QzA5QjAwMDAwMDQwMDAwMjA4NgorOjEwOENCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwOENDMDAwODVCMDAwMDBFODhGMDA0NjA5QjAwMDAwMDQwMDAwMjBENQorOjEwOENEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwOENFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcxNQorOjEwOENGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RjAwNDZBNQorOjEwOEQwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyRAorOjEwOEQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMQorOjEwOEQyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwOEQzMDAwODVCMDAwMDBFOTkwMDA0NjA5QjAwMDAwMDQwMDAwMjA2MgorOjEwOEQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MQorOjEwOEQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDdBNAorOjEwOEQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTk5MDAwNDYzMgorOjEwOEQ3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRAorOjEwOEQ4MDAwODVCMDAwMDBFOTkwMDA0NjA5QjAwMDAwMDQwMDAwMjAxMgorOjEwOEQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwOERBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEU5MTAwNDI1NAorOjEwOERCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RAorOjEwOERDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwOEREMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwOERFMDAwODVCMDAwMDAwRDkxMDA0QTA5QjAwMDAwMDQwMDAwMjA4OQorOjEwOERGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwOEUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMAorOjEwOEUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMAorOjEwOEUyMDAwODVCMDAwMDAwRTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA0QgorOjEwOEUzMDAwODVCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg2NQorOjEwOEU0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQworOjEwOEU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEQ5MTAwNEE5QworOjEwOEU2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQworOjEwOEU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MAorOjEwOEU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMAorOjEwOEU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMAorOjEwOEVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMAorOjEwOEVCMDAwODVCMDAwMDBEODhGMDA0MTA5QjAwMDAwMDQwMDAwMjBGOAorOjEwOEVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMAorOjEwOEVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwOEVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTU4RjAwNDIzRQorOjEwOEVGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTU4RjAwNDRBOAorOjEwOEYwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQgorOjEwOEYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RgorOjEwOEYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4RgorOjEwOEYzMDAwODVCMDAwMDBFNThGMDA0QjA5QjAwMDAwMDQwMDAwMjA2MAorOjEwOEY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RgorOjEwOEY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1RgorOjEwOEY2MDAwODVCMDAwMDBFNThGMDA0MzA5QjAwMDAwMDQwMDAwMjAzOAorOjEwOEY3MDAwODVCMDAwMDBFNThGMDA0NTA5QjAwMDAwRTU4RjAwNDY5MAorOjEwOEY4MDAwMDlCMDAwMDBFNThGMDA0NzA5QjAwMDAwRTU4RjAwNDhGOAorOjEwOEY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5QgorOjEwOEZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTU4RjAwNEM3MworOjEwOEZCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3QgorOjEwOEZDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRgorOjEwOEZEMDAwODVCMDAwMDBGNDhFMDA0QzA5QjAwMDAwMDQwMDAwMjBCMQorOjEwOEZFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDRgorOjEwOEZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcwMgorOjEwOTAwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNEM4QworOjEwOTAxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQQorOjEwOTAyMDAwODVCMDAwMDBBNTkxMDA0NjA5QjAwMDAwMDQwMDAwMjBCMgorOjEwOTAzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDk5MTAwNDI4NgorOjEwOTA0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDk5MTAwNDRGMAorOjEwOTA1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQQorOjEwOTA2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0RQorOjEwOTA3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwOTA4MDAwODVCMDAwMDA0OTkxMDA0QjA5QjAwMDAwMDQwMDAwMjBBOQorOjEwOTA5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRQorOjEwOTBBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRQorOjEwOTBCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRQorOjEwOTBDMDAwODVCMDAwMDA0OTkxMDA0NTA5QjAwMDAwNDk5MTAwNDY3MworOjEwOTBEMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgzRgorOjEwOTBFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QQorOjEwOTBGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDk5MTAwNENCQworOjEwOTEwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOQorOjEwOTExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNDIwOQorOjEwOTEyMDAwMDlCMDAwMDA1NDkxMDA0NjA5QjAwMDAwMDQwMDAwMjA3RQorOjEwOTEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNDZFNQorOjEwOTE0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcyQworOjEwOTE1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTQ5MTAwNDZEMgorOjEwOTE2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDOQorOjEwOTE3MDAwODVCMDAwMDA1NDkxMDA0NjA5QjAwMDAwMDQwMDAwMjBCMgorOjEwOTE4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyRAorOjEwOTE5MDAwODVCMDAwMDA1ODkxMDA0MzA5QjAwMDAwMDQwMDAwMjA5MQorOjEwOTFBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRAorOjEwOTFCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDc0MAorOjEwOTFDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTg5MTAwNDM2MQorOjEwOTFEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OQorOjEwOTFFMDAwODVCMDAwMDA1ODkxMDA0RDA5QjAwMDAwMDQwMDAwMjAzNworOjEwOTFGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRAorOjEwOTIwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkE5MTAwNDM5MgorOjEwOTIxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxOAorOjEwOTIyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QworOjEwOTIzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3QworOjEwOTI0MDAwODVCMDAwMDA0NzkxMDA0QTA5QjAwMDAwMDQwMDAwMjBFQQorOjEwOTI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1QworOjEwOTI2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QworOjEwOTI3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQworOjEwOTI4MDAwODVCMDAwMDA2QTkxMDA0MzA5QjAwMDAwMDQwMDAwMjA4RQorOjEwOTI5MDAwODVCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgwMQorOjEwOTJBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OAorOjEwOTJCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDc5MTAwNEFGRQorOjEwOTJDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwOTJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQworOjEwOTJFMDAwODVCMDAwMDA3QzkxMDA0MzA5QjAwMDAwMDQwMDAwMjAxQworOjEwOTJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCQworOjEwOTMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDdFRQorOjEwOTMxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M5MTAwNDNFQgorOjEwOTMyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNworOjEwOTMzMDAwODVCMDAwMDA3QzkxMDA0RDA5QjAwMDAwMDQwMDAwMjBDMQorOjEwOTM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkY4RDAwNDJDMQorOjEwOTM1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjE4RTAwNDIwQQorOjEwOTM2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNworOjEwOTM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQgorOjEwOTM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQgorOjEwOTM5MDAwODVCMDAwMDA5QjkxMDA0MjA5QjAwMDAwMDQwMDAwMjA0RAorOjEwOTNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQgorOjEwOTNCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQgorOjEwOTNDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQgorOjEwOTNEMDAwODVCMDAwMDAyMThFMDA0NjA5QjAwMDAwRkY4RDAwNDZEOAorOjEwOTNFMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgyQworOjEwOTNGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNworOjEwOTQwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOUI5MTAwNDY1QworOjEwOTQxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNgorOjEwOTQyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QQorOjEwOTQzMDAwODVCMDAwMDA5RDkxMDA0QTA5QjAwMDAwMDQwMDAwMjBBMgorOjEwOTQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QQorOjEwOTQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDc5RAorOjEwOTQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOUQ5MTAwNEE3MgorOjEwOTQ3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNgorOjEwOTQ4MDAwODVCMDAwMDA1NTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA5RQorOjEwOTQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQQorOjEwOTRBMDAwODVCMDAwMDA1NTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA3RQorOjEwOTRCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwOTRDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcyRAorOjEwOTREMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTU5MTAwNDY0RQorOjEwOTRFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NgorOjEwOTRGMDAwODVCMDAwMDA1NTkxMDA0NjA5QjAwMDAwMDQwMDAwMjAyRQorOjEwOTUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOQorOjEwOTUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTM5MTAwNDI0NworOjEwOTUyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNQorOjEwOTUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OQorOjEwOTU0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OQorOjEwOTU1MDAwODVCMDAwMDA0NzkxMDA0QTA5QjAwMDAwMDQwMDAwMjBENworOjEwOTU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwOTU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwOTU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOQorOjEwOTU5MDAwODVCMDAwMDBBMzkxMDA0NjA5QjAwMDAwMDQwMDAwMjAzRgorOjEwOTVBMDAwODVCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDhFRQorOjEwOTVCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3NQorOjEwOTVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDc5MTAwNEFFQgorOjEwOTVEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NQorOjEwOTVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjQ4RTAwNERFRQorOjEwOTVGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNQorOjEwOTYwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOAorOjEwOTYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OAorOjEwOTYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OAorOjEwOTYzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OAorOjEwOTY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwOTY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OAorOjEwOTY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OAorOjEwOTY3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjQ4RTAwNEQ1RAorOjEwOTY4MDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg4OQorOjEwOTY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwOTZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwOAorOjEwOTZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDcwMDJFNEI5QworOjEwOTZDMDAwMTk5MDAxMDAyNTg3MDAwNEU2QjEwMDAwRDU4QTIyNDJFNgorOjEwOTZEMDAwMTk3QzAwMDA5QTk0MDAzQTgxMzAwMTAwRDU4QTAwNDAzQworOjEwOTZFMDAwODFCMjAwMDBENThBMjI0MjE5N0MwMDAwRkYxRjAwMEZDMgorOjEwOTZGMDAwMUU4QzAxMDAwNTk0MDA0MDgxMzIwMTAwRTU4QTlDMEYxOAorOjEwOTcwMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAxQgorOjEwOTcxMDAwNDJDOTAxMDBFNThBMjI0MEUzNkQwMDAwMDAwMDAwNDVENworOjEwOTcyMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRTI4QUE4NDA0MgorOjEwOTczMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQTk4NDIyMDJBMAorOjEwOTc0MDAwODAzMjAwMDBFNjhBNDI0MDgxMzIwMDAwMDAwMDAwNDQ3RQorOjEwOTc1MDAwOTM5MzAxMDAwMDAwMUEwMjY4OTcwMTAwQTk4NDAwNDA1OQorOjEwOTc2MDAwMDVCMDAwMDAwNTAwMkU0QjE5OTAwMTAwMjU4NzAwMDQ2QworOjEwOTc3MDAwRTZCMTAwMDAwMDAwMDA0MDg3QjAwMTAwMDAwMDAwNDA5QQorOjEwOTc4MDAwOERCMDAxMDAwMDgwMDAwMzQyQzkwMTAwNDAwMDAwQTEyQgorOjEwOTc5MDAwNDRDOTAxMDAwMDAwMDBGMEUwQjEwMTAwREY5NTAwMDZCRgorOjEwOTdBMDAwMDc0MDAxMDAwMDAwMDAwNjA3RDAwMTAwRDQwMDJFNUMzNQorOjEwOTdCMDAwMUY5MDAxMDAwMDAwMDAwN0YwQjEwMTAwMEM4MDAwMDNDMQorOjEwOTdDMDAwNDJDOTAxMDAwMDAwMDBGMEYwQjEwMTAwMDAwMDAwNDBCQgorOjEwOTdEMDAwODFCMjAxMDAwMDAwMDBGRTk2QjAwMTAwMDAwMDAwRkUxMgorOjEwOTdFMDAwOTZDMDAxMDAwMDAwMDBGMEYwQjEwMTAwMDAwMDAwNDA1MAorOjEwOTdGMDAwODFCMjAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRkVFMgorOjEwOTgwMDAwOTZDMDAxMDAwMDAwMDBGMEYwQjEwMTAwMDAwMDAwNDAyRgorOjEwOTgxMDAwODFCMjAxMDAwMDAwMDBGQTk2QzAwMTAwMDAwMDAwRkVDNQorOjEwOTgyMDAwOTZDMDAxMDAwMDMwMDA0Qjk0ODgwMTAwMDAwMDAwNDYwMworOjEwOTgzMDAwOTVGMDAxMDAwMDAwMDA0QTk2QzAwMTAwNUUwMTJFMzQ0MAorOjEwOTg0MDAwOTc4NDAxMDAwMjAwMDA0QkU0RTUwMTAwNjQwMTIwNDAyMAorOjEwOTg1MDAwRTFCMTAxMDAwOTAwMDAwNzg2RTQwMTAwMDAwMDJFQTcyNQorOjEwOTg2MDAwODdDMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMTAwMDAwNDAyRQorOjEwOTg3MDAwRjE5OTAxMDA1ODAxMDA0M0YwQzkwMTAwNTgwMTAwMDVBOQorOjEwOTg4MDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQ5MworOjEwOTg5MDAwNjJERDAxMDAwRjhCQTg0MDgxMzIwMDAwMDAwMDAwMDU0RQorOjEwOThBMDAwNDhCMTAxMDAxQTAwMDA0MDk3OTgwMTAwMDgwMDJFNDBCRQorOjEwOThCMDAwOTVCMDAxMDAxNzhCMjA0Qjk0NkMwMDAwMDAwMDAwNDAxNQorOjEwOThDMDAwRjFCMTAxMDAxNDhCMDA0MTk1QzAwMDAwMTA4MDAwMTAyMAorOjEwOThEMDAwNDJDOTAxMDAxRThCMjI0MEUzNkQwMDAwMDAwMDAwNDRERAorOjEwOThFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUE4QkE4NDA0OAorOjEwOThGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyQgorOjEwOTkwMDAwNDhCMTAxMDA5QTk0MDA0MDgxMzAwMTAwRUE4QTAwNDA4OQorOjEwOTkxMDAwODFCMjAwMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjg4MQorOjEwOTkyMDAwODZCMDAxMDAwMDAwMDBGODg4QjAwMTAwMjM4QjQ0NDA5RAorOjEwOTkzMDAwODEzMjAwMDAyNjhCQTI0Q0ZEN0YwMDAwMjc4QjAwNEM1QgorOjEwOTk0MDAwRkQ5MzAwMDAyODhCMjBGMDU2NkYwMDAwMDAwMDAwRjAwRgorOjEwOTk1MDAwNTZCMzAxMDAwMDAwMUM0MDgxQjIwMTAwMDA4MDAwMTBERAorOjEwOTk2MDAwNDRDOTAxMDA2NDAwMDA0MEYxOTkwMTAwNzAwMDAwMDU0NQorOjEwOTk3MDAwRjBDOTAxMDAwMDAwMDA0M0YwQjEwMTAwMDAwMDAwNDcwMQorOjEwOTk4MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMkU4QkE4NDRBRgorOjEwOTk5MDAwRTAzMTAwMDAxMDAwMDAxMDhDQzgwMTAwMDA4MDAwNDY3QgorOjEwOTlBMDAwNDRDOTAxMDA0MDAwMDA0MEYxOTkwMTAwNjgwMTAwMDUzMAorOjEwOTlCMDAwRjBDOTAxMDA2NDAwMDA0M0YwQzkwMTAwMDAwMDAwNDc0NQorOjEwOTlDMDAwNjFCMTAxMDAwMDAwMDA0NjYyQjEwMTAwMzY4QkE4NDQ3RAorOjEwOTlEMDAwRTAzMTAwMDBBRjgyMDA4ODFDQjAwMDAwMDkwMDAwMDdFMQorOjEwOTlFMDAwODZFNDAxMDAzODAwMkVBNzg3QzAwMTAwOEIwMDJEMDVGQQorOjEwOTlGMDAwNDhCMTAxMDAzRThCMjI0M0U3N0QwMDAwMDAwMDAwNDQ5NworOjEwOUEwMDAwNDVDMTAxMDA0MThCMjI0NEU3N0QwMDAwMDAwMDAwNEM2RAorOjEwOUExMDAwNDVDMTAxMDAwMDAwMDA0QTE5OTAwMTAwNjgwMTIwQTIyMAorOjEwOUEyMDAwRTRCMTAxMDA4ODAwMDA0MDQzOTkwMTAwNDU4QjIzMEJGRAorOjEwOUEzMDAwRTU2RDAwMDAwMDAwMDA0MTE5OTAwMTAwMDA4MDAwMTA1OQorOjEwOUE0MDAwNDRDOTAxMDA1MDAwMDA0MEYxOTkwMTAwNTgwMTAwNDM1MQorOjEwOUE1MDAwRjBDOTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQwMAorOjEwOUE2MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNEE4QkE4NDAwMgorOjEwOUE3MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNUMwMDJFMDUxRgorOjEwOUE4MDAwNDhCMTAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDYwRjBGRAorOjEwOUE5MDAwOTZCMDAxMDA5QTk0MDA0MTgxMzAwMTAwRUE4QTAwNDBBQQorOjEwOUFBMDAwODFCMjAwMDA1NThCQTI0OTE5N0MwMDAwODYwMDAwNDA1RAorOjEwOUFCMDAwNDc5OTAxMDA1OThCMDA0MEU1QjEwMDAwODYwMDJGNDkwRAorOjEwOUFDMDAwMTk4MDAxMDA1OThCQTJGMjgwMzIwMDAwOEIwMDAwNDAwNworOjEwOUFEMDAwNDc5OTAxMDAwMDAwMDA0MkU3OTEwMTAwNUM4QkEyNDYxQgorOjEwOUFFMDAwMTk3QzAwMDBBMDAwMDA0MDQ3OTkwMTAwNjA4QjAwNDBGNQorOjEwOUFGMDAwRTVCMTAwMDBBMDAwMkY0NjE5ODAwMTAwNjA4QkEyRjJBMgorOjEwOUIwMDAwODAzMjAwMDA4QjAwMDA0MDQ3OTkwMTAwMDAwMDAwNDFCNgorOjEwOUIxMDAwRTc5MTAxMDBBODAwMDA0MDQzOTkwMTAwMzQwMDJERjBCNgorOjEwOUIyMDAwMjRCMDAxMDAwMDAwMDBGQjBDQjAwMTAwMDAwMDAwRkJBRAorOjEwOUIzMDAwMTBCMDAxMDAwMDAwMDBGQjEyQjAwMTAwMEYwMDAwRjNBNAorOjEwOUI0MDAwMTY4ODAxMDAwNDAwMDBGMzE0RjQwMTAwOEI4QjI2NDBGQQorOjEwOUI1MDAwODEzMjAwMDA3MzhCMjIwQTE2NkMwMDAwNTgwMDNENDNDRQorOjEwOUI2MDAwMTNFMDAxMDAwMDAwMDBGODgyQjAwMTAwMDQwMDIyRjBDMAorOjEwOUI3MDAwODQzMDAwMDA4Nzk1MDA0MDgxMzIwMTAwQUY4MjAwODg2OAorOjEwOUI4MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwNDFDOQorOjEwOUI5MDAwMTNDMDAxMDA3MjhCQTA0MzEzNkMwMDAwMDAwMDAwNDA1MgorOjEwOUJBMDAwMTNCMDAxMDA2ODhCMDA0MTE1RDAwMDAwOEI4QjIyMEE5NgorOjEwOUJCMDAwODAzMjAwMDA1ODAwM0Q0MzEzRTAwMTAwMDAwMDAwRjgyRgorOjEwOUJDMDAwODJCMDAxMDAwNDAwMjJGMDg0MzAwMDAwODc5NTAwNDAzQworOjEwOUJEMDAwODEzMjAxMDA0MDAwMjA0MEUxQjEwMTAwQUY4MjAwODhFNQorOjEwOUJFMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwOEI4QjIyNDEzMQorOjEwOUJGMDAwMTU1MDAwMDAwMDAwMDA0MTExQzAwMTAwN0Y4QkEwNDMwMAorOjEwOUMwMDAwMTE2QzAwMDAwMDAwMDA0MDExQjAwMTAwNTgwMDNENDNGRAorOjEwOUMxMDAwMTFFMDAxMDAwMDAwMDBGODM2QjAwMTAwMDQwMDIyRjA1RAorOjEwOUMyMDAwMDAzMDAwMDAwMDAwMDA1MDgzQjAwMTAwRDk5NDAwNDdDQworOjEwOUMzMDAwNjEzMTAxMDBBRjgyMDA4ODFDQjAwMDAwNDI5MjAwMDUzMworOjEwOUM0MDAwNDgzMTAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTBGMgorOjEwOUM1MDAwNjJERDAxMDA4NzhCQTg0MDgxMzIwMDAwQUY4MjAwODg1RQorOjEwOUM2MDAwMUNCMDAwMDA3QjhCMDAwNTQ4QjEwMDAwMzcwMDIwNDA4RAorOjEwOUM3MDAwRTdCMTAxMDAwQjk1MDA1MTgxMzAwMTAwRUE4QTAwNDBGNAorOjEwOUM4MDAwODFCMjAwMDAzNDAwMkU0MUY1QjEwMTAwMDAxMTAwNDAwNgorOjEwOUM5MDAwRTU5OTAxMDA5MzhCMDA0ODE5OTAwMDAwMzQwMDJFNDE5MworOjEwOUNBMDAwRjVCMTAxMDAwMDExMDA0MEU1OTkwMTAwMDA4MDAwMDNCQQorOjEwOUNCMDAwNDJDOTAxMDAwMDAwMDBGODk0QjAwMTAwOTg4QjIyNDVEMQorOjEwOUNDMDAwMjM3QzAwMDBCMDAwMkZGMDhDQjAwMTAwMDAwMDYwRjA5OQorOjEwOUNEMDAwOENDMDAxMDA5MDAwMDA0MDQzOTkwMTAwMzUwMDJERjAzOAorOjEwOUNFMDAwOENCMDAxMDA1ODAwM0U0M0U3RTEwMTAwOUQ4QjIyNDgwMworOjEwOUNGMDAwMTk3QzAwMDAwMDAwMDA0MThEQzAwMTAwMDAwMDY4MEFDRQorOjEwOUQwMDAwOENDMDAxMDAzODAwMkE0QUUwQjEwMTAwMjgwMDAwMDBBMAorOjEwOUQxMDAwRTBDOTAxMDAzQzAwMjAxQkUwQjEwMTAwMTA4MDAwMDNGRAorOjEwOUQyMDAwNDJDOTAxMDAwMDAwMDBGODM4QjAwMTAwMDAwMDAwRjg0RQorOjEwOUQzMDAwMjZCMDAxMDAwNDAwMjJGODAyMzAwMDAwQUI4QjIzMDFBMgorOjEwOUQ0MDAwMTQ2QzAwMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjg3MgorOjEwOUQ1MDAwODJCMDAxMDA0QzAwMjBGMEU0QjEwMTAwNDQwMDIwNDAzQQorOjEwOUQ2MDAwRTBCMTAxMDA0ODAwMjA0MUUwQjEwMTAwQTgwMDJEMTA0MQorOjEwOUQ3MDAwMzJCMDAxMDBDMzk1MDBGMDI0MzAwMTAwQjQ4QkEyNDQzRQorOjEwOUQ4MDAwODE2QzAwMDBCMjhCMjI0MTE5N0MwMDAwNkU5MzAwNDA3MAorOjEwOUQ5MDAwM0IzMDAxMDBEODhCQTIwODNDMzAwMDAwQjQ4QjAwNDA1RgorOjEwOURBMDAwODFCMjAwMDBBQjkyMDA0MDgxMzIwMTAwRDg4QkEyMDg0MgorOjEwOURCMDAwM0MzMDAwMDA1MDAwMjAxQ0UwQjEwMTAwNTQwMDIwMTM5MgorOjEwOURDMDAwRTBCMTAxMDA0RTAwMjAwMUU0QjEwMTAwNDAwMDIwMEE5MgorOjEwOUREMDAwRTBCMTAxMDAwQjk1MDA1RjgxMzAwMTAwRUE4QTAwNDA4QworOjEwOURFMDAwODFCMjAwMDAzNzAwMDA0MDQ3OTkwMTAwNEQ5MzAwRjMxNQorOjEwOURGMDAwOTQzMDAxMDA5MzhCMjI0QTgwMzIwMDAwQzA4QjAwNDBENworOjEwOUUwMDAwODFCMjAwMDAzNzAwMDA0MDQ3OTkwMTAwNEQ5MzAwRjNGNAorOjEwOUUxMDAwOTQzMDAxMDA1ODAwM0U0Mzk3RTAwMTAwMDAwMDAwMUIxMQorOjEwOUUyMDAwRjBCMTAxMDAxRjAwNjAwMDAwOEMwMTAwRUE4QTg1MTE3QQorOjEwOUUzMDAwODAzMjAwMDAwNDgwMDAwMzQyQzkwMTAwQjAwMDJGRjAwRQorOjEwOUU0MDAwOENCMDAxMDAwMDAwNjBGMDhDQzAwMTAwMEI5NTAwNUYzOQorOjEwOUU1MDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwQ0E4QjAwNDlDQgorOjEwOUU2MDAwMTk4MDAwMDBDRjhCMjI0MTE5N0MwMDAwNkU5MzAwNDBDNgorOjEwOUU3MDAwM0IzMDAxMDBEMzhCQTIwODNDMzAwMDAwMEI5NTAwNUYwMworOjEwOUU4MDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwQUI5MjAwNDBCQworOjEwOUU5MDAwODEzMjAxMDBEMzhCQTIwODNDMzAwMDAwMEI5NTAwNUY5QgorOjEwOUVBMDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwNTAwMDJEMTA4QworOjEwOUVCMDAwMzJCMDAxMDA1NDAwMkRGMDM4QjAwMTAwNEUwMDJERjBGQQorOjEwOUVDMDAwMjZCMDAxMDA0MDAwMkRGMjAyQjAwMTAwMDAwMDAwRjBCOQorOjEwOUVEMDAwMTRCMDAxMDAzMDAwMDAxMDhDQzgwMTAwMDA4MDAwNDY2MgorOjEwOUVFMDAwNDRDOTAxMDA2ODAxMkQ0NDYxQjEwMTAwMTAwMDY4RjIwRAorOjEwOUVGMDAwODBDODAxMDAwMDAwMDAwOEYwQjEwMTAwNTgwMTAwMDUxMQorOjEwOUYwMDAwRTBDOTAxMDAwMDAwMDAwQjM3QjAwMTAwMDAwMDAwNDA3NAorOjEwOUYxMDAwMzZEMDAxMDA1QzAxMkU0MDEwQzAwMTAwMDAwMDAwMDY5OAorOjEwOUYyMDAwODBDMDAxMDAwMDAwMDA1MjgxRDAwMTAwQTA5NDAwNDBEOAorOjEwOUYzMDAwRTQzMTAxMDAyMDAwMDA0NjYyREQwMTAwRTQ4QkE4NDAwRQorOjEwOUY0MDAwMjMzMDAwMDBFNTkyMDA0MDgxMzIwMTAwRUQ5MjAwNDA5NAorOjEwOUY1MDAwODEzMjAxMDBGMjhCODI0MTIzNDAwMDAwMjA4MDAwMTBGQQorOjEwOUY2MDAwNDJDOTAxMDBFRjhCMjI0MEUzNkQwMDAwMDAwMDAwNDY3MworOjEwOUY3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRUM4QkE4NDBERgorOjEwOUY4MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU5NAorOjEwOUY5MDAwNDhCMTAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwNDE5MworOjEwOUZBMDAwMjNCMDAxMDAwMDgwMDAxOTQ0QzkwMTAwRkE4QjIyNDE0RQorOjEwOUZCMDAwMTk3QzAwMDBGNjhCQTMwMTBDNkMwMDAwRjc4QjAwMDZFNworOjEwOUZDMDAwMDRCMDAwMDAwMDAwMDAwMTA0QjAwMTAwRjk4QjIwMDI4MQorOjEwOUZEMDAwMzY2QzAwMDAwMDAwMDAxQjA0QjAwMTAwRkQ4QjAwMDI4NQorOjEwOUZFMDAwRTBCMTAwMDBGQzhCQTMwMTBDNkMwMDAwRkQ4QjAwMDZBRgorOjEwOUZGMDAwMDRCMDAwMDAwMDAwMDAwMTA0QjAwMTAwMDAwMDY4MDI4RAorOjEwQTAwMDAwMTY5NDAxMDBGRkZGMDAwQjE2RDgwMTAwMDAwMDY4MDgzRAorOjEwQTAxMDAwM0U5NjAxMDAwMDAwMDAxQ0YwQjEwMTAwMDAwMDAwNDY2NworOjEwQTAyMDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwMDI4Q0E4MTM1QgorOjEwQTAzMDAwRTAzMTAwMDAzOThDMjIwMjE0NTAwMDAwNDQwMDJEMDI0RgorOjEwQTA0MDAwMENEMDAxMDAyOThDQTIwMjAyNTAwMDAwMTA4QzIyNUM2RQorOjEwQTA1MDAwMUY3QzAwMDAyMDgwMDAwMzQyQzkwMTAwMEY4QzIyNDBCOQorOjEwQTA2MDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBGNgorOjEwQTA3MDAwNjJERDAxMDAwQjhDQTg0MDgxMzIwMDAwQUY4MjAwODhCNQorOjEwQTA4MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwNDQwMDJENUMzOAorOjEwQTA5MDAwMUY4MDAxMDA0ODAwMkRGMDM4QjAwMTAwNEMwMDJERjA2OQorOjEwQTBBMDAwMjZCMDAxMDAzODAwMkZGMjAyQjAwMTAwMkE4QzIyMDFGNAorOjEwQTBCMDAwMTQ2QzAwMDAxRDhDMjI0NjFGN0MwMDAwMDAwMDAwNDYyRQorOjEwQTBDMDAwMUY4MDAxMDAyMDAwMkQwMzQ4QjEwMTAwMUM4QzIyNDA5QworOjEwQTBEMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA4OQorOjEwQTBFMDAwNjJERDAxMDAxOThDQTg0MDgxMzIwMDAwQUY4MjAwODgzNworOjEwQTBGMDAwMUNCMDAwMDAzODAwMkYwNTQ4QjEwMTAwMDAwMDAwRjgzNgorOjEwQTEwMDAwOTRCMDAxMDAzODAwMkRGMDk2QjAwMTAwMDAwMDAwNEMyMgorOjEwQTExMDAwRTFDMTAxMDAyMDAwMDAwMzQ4QzkwMTAwMDAwMDIyNEFGQgorOjEwQTEyMDAwRjFCMTAxMDA0NDAwMDAwNUYwQzkwMTAwMDAwMDAwNEEzRgorOjEwQTEzMDAwRjBCMTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDc1OQorOjEwQTE0MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwMjY4Q0E4NUNDMgorOjEwQTE1MDAwMUYxMDAwMDAyQThDMDAwNTQ4QjEwMDAwMDAwMDAwMDIxQQorOjEwQTE2MDAwMzhDMDAxMDAzNDhDMjIwNjgwMzIwMDAwMDAwMDAwNTAwQworOjEwQTE3MDAwMzNDMDAxMDAzMjhDQTIwMjM2NkMwMDAwMDQwMDhGMEQ0NworOjEwQTE4MDAwNDIzMTAwMDAxMDAwMDBGODEwQzgwMTAwMDAwMDAwNUMxRgorOjEwQTE5MDAwMTE4MDAxMDBGMDA3MDA0MDM3OTgwMTAwRTg4QjAwQTExMgorOjEwQTFBMDAwMUFCMDAwMDAwMDAwMDAwMjEwQzAwMTAwRTg4QjAwMDI5RAorOjEwQTFCMDAwMzZEMDAwMDA1MDAwMjAxQ0UwQjEwMTAwNTQwMDIwMTNGNAorOjEwQTFDMDAwRTBCMTAxMDA0RTAwMjAwMUU0QjEwMTAwNDAwMDIwMEE4RQorOjEwQTFEMDAwRTBCMTAxMDAzRThDMDA1RjAxQjAwMDAwMzcwMDJENDY2OQorOjEwQTFFMDAwMDFCMDAxMDAwNDAwMDBGMzgwRjQwMTAwM0Q4Q0EwNDNBNQorOjEwQTFGMDAwODE2QzAwMDAwMDAwMDA1NTAxQjAwMTAwNDAwMDIwNDBDQgorOjEwQTIwMDAwRTFCMTAxMDAwMDgwMDAxOTQyQzkwMTAwNDQ4QzIyNDBFNAorOjEwQTIxMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTkzQworOjEwQTIyMDAwNjJERDAxMDA0MThDQTg0MDgxMzIwMDAwQUY4MjAwODhDRAorOjEwQTIzMDAwMUNCMDAwMDBFQTkyMDA0MDgxMzIwMTAwMzA4MDAwMTAyMgorOjEwQTI0MDAwNDJDOTAxMDA0QjhDMjI0MEUzNkQwMDAwMDAwMDAwNDQzNQorOjEwQTI1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNDg4Q0E4NDA5RgorOjEwQTI2MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNjAwMTJGMDUyMQorOjEwQTI3MDAwNDhCMTAxMDAwMDAwMDAwQkU0QjEwMTAwMDAwMDAwNTBGMworOjEwQTI4MDAwMTdGMDAxMDA1MDhDOTBGMjE2NDAwMDAwMDAwMDAwNDFEMQorOjEwQTI5MDAwMTdDMDAxMDAwMDAwNjYyMDE3QTQwMTAwMzIwMDAwQTZDQworOjEwQTJBMDAwMkFDMDAxMDAwMDAwMDBGMjJBOTQwMTAwNTM4QzQ1NDhBNgorOjEwQTJCMDAwNjEzMTAwMDAwMEQwMDAxRTYyREQwMTAwNTg4QzI4NDA5MgorOjEwQTJDMDAwMDUzMDAwMDA1NDhDMjI0ODc3N0QwMDAwNUI4QzAwNDBGNAorOjEwQTJEMDAwODFCMjAwMDAwMDAwMDAxNTYyQjEwMTAwNjQ4QzI4NDBDQQorOjEwQTJFMDAwODEzMjAwMDA1ODhDMDA0MDgxQjIwMDAwMDAwMDFEMDA0NworOjEwQTJGMDAwOTJCMDAxMDA2MThDMjI0MTE5N0MwMDAwMDA4MDAwMDNCMworOjEwQTMwMDAwNDJDOTAxMDBCMDkyMDBGODAwMzAwMTAwNUU4Q0EyNDEwOQorOjEwQTMxMDAwM0I1MDAwMDA2NThDMDA0OTAwQjAwMDAwRkYwNzAwMUVBNAorOjEwQTMyMDAwMDA4QzAxMDBCMDkyMDA0MDgxMzIwMTAwNjU4QzAwNDkzMAorOjEwQTMzMDAwMDBCMDAwMDAwMDAwMUQ0NzE5ODAwMTAwNjg4QzIyNUZGQQorOjEwQTM0MDAwMDE2QzAwMDBFRDk1MDA0MDgxMzIwMTAwQzU4NzAwMDBERQorOjEwQTM1MDAwODBCMDAwMDA2RjhDMjI1QzFGN0MwMDAwMjA4MDAwMDMxNgorOjEwQTM2MDAwNDJDOTAxMDA2RjhDMjI0MEUzNkQwMDAwMDAwMDAwNDdFRAorOjEwQTM3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNkM4Q0E4NDA1QQorOjEwQTM4MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNkY4QzQwMDU1NQorOjEwQTM5MDAwNDgzMTAwMDBGRkZGMDAwNzk0ODkwMTAwNzU4Qzg1Q0FEMQorOjEwQTNBMDAwOTQzMDAwMDBFRDk1MTg1QzFGMDAwMTAwMEUwMDAwMEZCNgorOjEwQTNCMDAwMUU4QzAxMDBFNjg2MDA0MDgxQjIwMDAwMEI5NTE4MDA1QgorOjEwQTNDMDAwODAzMDAxMDBFQThBMDA0NzE5ODAwMDAwMDAwMDAwNDA0OAorOjEwQTNEMDAwMTk4MDAxMDBFQThBMjI0NzE5N0MwMDAwQUI5MjAwNDBGNAorOjEwQTNFMDAwODEzMjAxMDA3QzhDQTIwODgwMzIwMDAwRUE4QTAwNDBBMQorOjEwQTNGMDAwODFCMjAwMDBBMDk0MDA0MDBEMzAwMTAwOUMwMTAwNDA5QgorOjEwQTQwMDAwNDU5OTAxMDBGRkZGMDAwQjk4ODgwMTAwOEIwMDJENTAzQgorOjEwQTQxMDAwMTdGMDAxMDA4MjhDOTA0QzE2NDAwMDAwMDAwMDAwNDFCMworOjEwQTQyMDAwMTdDMDAxMDA4NDhDMjI0M0U3N0QwMDAwMDAwMDAwNDQzNworOjEwQTQzMDAwNDVDMTAxMDAwMDAwNjYyMDE3QTQwMTAwNjgwMTAwNDAyQQorOjEwQTQ0MDAwNDM5OTAxMDA1QzAxMkVGMjgwQjAwMTAwMDIwMDYyNDBERAorOjEwQTQ1MDAwN0VDRDAxMDAwMDAwMDA1NzgxQzAwMTAwMDAwMDJFMTBEOQorOjEwQTQ2MDAwNDhCMTAxMDAwMzAwMDA0MEYwOEQwMTAwMDAwMDAwMDgyOQorOjEwQTQ3MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDRFRQorOjEwQTQ4MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwOEU4Q0E4NDA5MworOjEwQTQ5MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU3RgorOjEwQTRBMDAwNDhCMTAxMDA5MjhDNDU0ODYxMzEwMDAwMDA1MDAwMDgxRAorOjEwQTRCMDAwNjJERDAxMDA5ODhDMjg0MDA1MzAwMDAwOTM4QzIyNDgxMgorOjEwQTRDMDAwNzc3RDAwMDBCMDkyMUQwODAwMzAwMTAwRUE4QTAwNDA0QworOjEwQTREMDAwODFCMjAwMDBFQThBMUQ0NzE5ODAwMDAwMzUwMDAwNDA2MworOjEwQTRFMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwOUQ4Q0EwNDNEQgorOjEwQTRGMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwQTgwMDAwNDBBQQorOjEwQTUwMDAwNDM5OTAxMDAzNzAwMkZGMDI0QjAwMTAwMDEwMDYzRjNFQworOjEwQTUxMDAwODJDQzAxMDBBODhDQTI0MTlFMDYwMDAwRUE4QTIyNDQ1NworOjEwQTUyMDAwODM3MDAwMDAzNjAwMDA0MDQzOTkwMTAwNTgwMDNENDMwRAorOjEwQTUzMDAwRTdFMTAxMDBFQThBMUZGMDI0NkMwMDAwRUQ5NTAwNDg3NQorOjEwQTU0MDAwODEzMDAxMDBDNTg3MjM0MTgzNkMwMDAwQzU4NzAwNDcyNworOjEwQTU1MDAwODFCMDAwMDA1ODAwM0Q0Mzg1RTAwMTAwMDAwMDAwRjg5NAorOjEwQTU2MDAwMzZCMDAxMDAwMDAwMDBGMDAwQjAwMTAwMjgwMDAwNDBGQgorOjEwQTU3MDAwODM5ODAxMDBEOTk0MDA0NzYxMzEwMTAwQUY4MjAwODhCRgorOjEwQTU4MDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDgwMDJERjBCMAorOjEwQTU5MDAwOTRCMDAxMDAwMDAwMDBGODhFQjAwMTAwOTAwMDJERjA5MgorOjEwQTVBMDAwMTRCMDAxMDAwMDAwMDAwNTQ4QjEwMTAwOTk4QkEyNDBFMQorOjEwQTVCMDAwOEY3QzAwMDBCNjhDMjI0NzhGN0MwMDAwOTk4QjAwNDg2RQorOjEwQTVDMDAwMTk5MDAwMDAyNThEMDA0MDgxQjIwMDAwMzYwMDJENURGRAorOjEwQTVEMDAwMDVCNDAxMDAzNzAwMkRGMzgwQjAwMTAwMDAwMDAwRjM0NgorOjEwQTVFMDAwOEVCMDAxMDA1QzAwM0Q0MzgxRTAwMTAwQTgwMDJERjAyOQorOjEwQTVGMDAwOTRCMDAxMDAwMDAwMDBGMDI0QjAwMTAwMjAwMDAwMTAyMQorOjEwQTYwMDAwODZEQzAxMDA0MDgwMDAwMzQ0QzkwMTAwQjE5MTAwNEE4QQorOjEwQTYxMDAwRjAzMTAxMDAzNjAwMkY1QzFGOTAwMTAwQzQ4Q0EyNTA2NQorOjEwQTYyMDAwOEY1MDAwMDAzNDAwMjA0MEUxQjEwMTAwRUE4QTAwNDA3MAorOjEwQTYzMDAwODFCMjAwMDAwMDAwNjM0MTgxQzAwMTAwQzc4Q0EwNDNDQgorOjEwQTY0MDAwODE2QzAwMDAwMDAwNjM0MDgxQjAwMTAwMzcwMDIwNDdBQQorOjEwQTY1MDAwRTZCMTAxMDBFQThBMjI0NzgwMzIwMDAwMDQwMDAwNDc4OAorOjEwQTY2MDAwMENGNDAxMDAwMDAwMDA0RjhGODQwMTAwREM4QzIyNDdCNQorOjEwQTY3MDAwMEM2QzAwMDA1ODAwM0Q0MzgxRTAwMTAwREM4QzFGRjBCMQorOjEwQTY4MDAwMjQ2QzAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTBBRQorOjEwQTY5MDAwNDJDOTAxMDBENThDMjI0MEUzNkQwMDAwMDAwMDAwNDU1NgorOjEwQTZBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDI4Q0E4NDBDMQorOjEwQTZCMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwRDU4QzQyNDA3RgorOjEwQTZDMDAwMDUzMDAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBNUQ3MworOjEwQTZEMDAwNjk5MzAxMDBEQThDMjM0MTBENkMwMDAwQjc4QzAwMDVGMgorOjEwQTZFMDAwNDhCMTAwMDBFRDk1MDAwNTQ4MzEwMTAwQzU4NzAwNDhEQworOjEwQTZGMDAwODFCMDAwMDBFQThBMjI0MDhGNkMwMDAwMEI5NTAwNUY1OQorOjEwQTcwMDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwQTIwMDAwNDBDRQorOjEwQTcxMDAwNDM5OTAxMDAwMDAwMDBGMzg0QjAwMTAwQTYwMDJENDkxOAorOjEwQTcyMDAwMTk5MDAxMDAwMjAwMDBGMjgwRjQwMTAwQjgwMDJENDBGMQorOjEwQTczMDAwODFCMjAxMDAwMDAwMDBGMjgwQzAwMTAwMDAwMDAwNDA3MgorOjEwQTc0MDAwODJGODAxMDAxOTAwMDA0MDgxOTgwMTAwRUI4Q0EwNDBDNAorOjEwQTc1MDAwODI2QzAwMDAyQzAxMDA0MDgxOTgwMTAwRUI4Q0EzNDAyQQorOjEwQTc2MDAwODI2QzAwMDAwMDAwMDA0MTgwQjAwMTAwRUQ4QzIwNENBNAorOjEwQTc3MDAwODU2QzAwMDAwMDAwMDA0MTg1QzAwMTAwODYwMDIwNDA3QgorOjEwQTc4MDAwRTRCMTAxMDBBMjAwMjA0MkU2QjEwMTAwRUE4QTAwNDBFMworOjEwQTc5MDAwODFCMjAwMDA5QTk0MDA1MDgxMzAwMTAwRUE4QTAwNDBBMgorOjEwQTdBMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDQwMDIyRjBDRAorOjEwQTdCMDAwODAzMDAwMDAwMDAwMDA0MDhEQjAwMTAwREY5NTAwNDBCNworOjEwQTdDMDAwODczMDAxMDBCMDAwMkY1QzFGOTAwMTAwMDAwMDYwRjA5NgorOjEwQTdEMDAwODBDMDAxMDAwQjk1MDA1RjgxMzAwMTAwRUE4QTAwNDBEMworOjEwQTdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRUE4QTIyNDZFMworOjEwQTdGMDAwMTk3QzAwMDBBMDAwMDA0MDQ3OTkwMTAwMDEwMDYyRjJBRQorOjEwQTgwMDAwOTZDQzAxMDBFQThBQTY0MDgxMzIwMDAwMEI5NTAwNEFFRQorOjEwQTgxMDAwODEzMDAxMDBFMDk0MDA0Njk1MzAwMTAwRUE4QTAwNDA1MgorOjEwQTgyMDAwODFCMjAwMDBFQThBMjI0OTE5N0MwMDAwODYwMDAwNDBCQgorOjEwQTgzMDAwNDc5OTAxMDAwMTAwNjJGMjgwQ0MwMTAwRUE4QUE2NDAzQgorOjEwQTg0MDAwODEzMjAwMDAwQjk1MDA0QTgxMzAwMTAwRTA5NDAwNDdGRQorOjEwQTg1MDAwOTUzMDAxMDBFQThBMDA0MDgxQjIwMDAwNDI5MjAwNDAzNworOjEwQTg2MDAwODEzMjAxMDBFQThBMDA1QzFGOTAwMDAwRUE4QTAwNDAwMQorOjEwQTg3MDAwODFCMjAwMDBFQThBMDA0MDgxQjIwMDAwQkEwMDAwNDBDNAorOjEwQTg4MDAwNDc5OTAxMDAwMTAwNjJGMjgwQzgwMTAwMTE4RDkwNDBEQgorOjEwQTg5MDAwODAzMjAwMDBGRkZGNjI0MDgxOTgwMTAwQTQwMDAwNDA2OAorOjEwQThBMDAwNDc5OTAxMDBFQThBMjI0MEU1NkQwMDAwRUE4QTAwNDFFQQorOjEwQThCMDAwRTVDMTAwMDA5QTk0MDA0RDgxMzAwMTAwRUE4QTAwNDAxMQorOjEwQThDMDAwODFCMjAwMDA1QzAwMDA0MDQ3OTkwMTAwMDQwMDIyRjBDMgorOjEwQThEMDAwOTYzMDAwMDAwMDAwMDA0MEUxQjEwMTAwMDA4MDAwMDM1QworOjEwQThFMDAwNDRDOTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDAzRAorOjEwQThGMDAwOERCMDAxMDBERjk1MDA0MDg3MzAwMTAwOEIwMDAwNDBFMworOjEwQTkwMDAwNDc5OTAxMDAyMThEODBGMzk2MzAwMDAwMDAwMDAwNDAzRgorOjEwQTkxMDAwRTc4MTAxMDAwMDAwMDA0NzE5OTAwMTAwRUE4QTAwNUMwRAorOjEwQTkyMDAwMUY5MDAwMDAzNDAwMDA0MDQ1OTkwMTAwMDEwMDAwNDBFNAorOjEwQTkzMDAwRjU5OTAxMDAwMDExMDA0MEU1OTkwMTAwQUI5MjAwNDAzQgorOjEwQTk0MDAwODEzMjAxMDAzNjhEQTIwODgwMzIwMDAwMzcwMDAwNDBCRAorOjEwQTk1MDAwNDc5OTAxMDAwMDAwMDBGMzgyQjAwMTAwMDAwMDYzNTEzQworOjEwQTk2MDAwODNEMDAxMDAzNDAwMDA0MDQ3OTkwMTAwMDEwMDYzRjNFNworOjEwQTk3MDAwODRDQzAxMDAyRThEOUY0MjgwMzIwMDAwMDAwMDYzNDI5MworOjEwQTk4MDAwODVCMDAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDE1NworOjEwQTk5MDAwMDBDMDAxMDAzMDhEMzc1QzYxMzEwMDAwMDAwMDAwMUJGOQorOjEwQTlBMDAwNjJCMTAxMDAzMThEQTg0QjE5MTAwMDAwMDAwMDAwMDBCOQorOjEwQTlCMDAwNjJCMTAxMDAzMzhEQTg0MDgxMzIwMDAwMUE4NzE3NDAzMAorOjEwQTlDMDAwODFCMjAwMDAwMDgwMDAwMzQyQzkwMTAwOTAwMDJERjAxOAorOjEwQTlEMDAwOTRCMDAxMDBBQzAwMkRGMDMwQjAwMTAwMzUwMDJERjAzNgorOjEwQTlFMDAwMjhCMDAxMDA1ODAwM0U0M0U3RTEwMTAwMDEwMDAwMThEMworOjEwQTlGMDAwRjBDOTAxMDAwMDAwMDA0QUUwQjEwMTAwMzgwMDIwMDA2OQorOjEwQUEwMDAwRTBCMTAxMDAzQzAwMjAxQkUwQjEwMTAwNDAwMDIwNDAwQgorOjEwQUExMDAwRTFCMTAxMDAwMDAwMDA0MDJCQjAwMTAwRUY5NDAwNDBDNAorOjEwQUEyMDAwMEQzMDAxMDAwMDAwMDAxODE2QzAwMTAwNDU4REEwMTQ3MworOjEwQUEzMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwMEUwMDAwQTJGMworOjEwQUE0MDAwNDRDOTAxMDAwMDAwMDAxOEY4QjEwMTAwQjAwMDJEMTQ0NQorOjEwQUE1MDAwRjhCMTAxMDAxMDUwMDA0MDg3OTgwMTAwNEU4RDIyNEE0NQorOjEwQUE2MDAwMTk3QzAwMDAwMDMwMDA0Mzg2QzgwMTAwMDAzMDAwMEI1NAorOjEwQUE3MDAwMTZDODAxMDA0RThEQTQ0MDgxMzIwMDAwMDAwMDAwNDE0NAorOjEwQUE4MDAwMTdDMDAxMDAwMTAwNkU0Mzg2OTgwMTAwMjY5NTAwMzAzMgorOjEwQUE5MDAwODEzMDAxMDA1MjhEQTA0MTE3NDAwMDAwMDAwMDAwNDFBQworOjEwQUFBMDAwMTdDMDAxMDA1OThEMjI0QTE5N0MwMDAwMDgwMDAwQTIzRAorOjEwQUFCMDAwNDRDOTAxMDBDQzAwMkRBQkY5QjEwMTAwMDAwMDAwQUI4RQorOjEwQUFDMDAwMTdDMDAxMDA1ODhEQTBGMDE2NDQwMDAwMDAwMDAwNDE5RQorOjEwQUFEMDAwMTdDMDAxMDAwMDAwNjRGMDgyQjAwMTAwOTAwMDAwNDA0NworOjEwQUFFMDAwNDU5OTAxMDAwMDAwNjA0MTMxQzAwMTAwQkMwMDAwNDBGOAorOjEwQUFGMDAwNDM5OTAxMDA1RjhEMDYwQzgwMzIwMDAwQTAwMDIwRjIxNworOjEwQUIwMDAwRTRCMTAxMDAwNDAwMDk0NjE5MTAwMDAwOUMwMTAwNDA1NgorOjEwQUIxMDAwNDU5OTAxMDBGRkZGMDAwQjk4ODgwMTAwOEIwMDJENTAyNAorOjEwQUIyMDAwMTdGMDAxMDA2NDhEOTA0QzE2NDAwMDAwMDAwMDAwNDFCOQorOjEwQUIzMDAwMTdDMDAxMDA2NjhEMjI0M0U3N0QwMDAwMDAwMDAwNDQzRAorOjEwQUI0MDAwNDVDMTAxMDAwMDAwNjYyMDE3QTQwMTAwNjgwMTAwNDAxMworOjEwQUI1MDAwNDM5OTAxMDA1QzAxMkVGMjgwQjAwMTAwMDIwMDYyNDBDNgorOjEwQUI2MDAwN0VDRDAxMDAwMDAwMDA1NzgxQzAwMTAwMDAwMDJFMTBDMgorOjEwQUI3MDAwNDhCMTAxMDAwMzAwMDA0MEYwOEQwMTAwMDAwMDAwMDgxMgorOjEwQUI4MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDRENworOjEwQUI5MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNzA4REE4NDA5OQorOjEwQUJBMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU2OAorOjEwQUJCMDAwNDhCMTAxMDA3NDhENDU0ODYxMzEwMDAwMDA1MDAwMDgyMworOjEwQUJDMDAwNjJERDAxMDA3NThEQTg0MDA1MzAwMDAwMzUwMDFENDA5NAorOjEwQUJEMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwN0I4REEwNDMwNQorOjEwQUJFMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwMzcwMDAwNDAyNAorOjEwQUJGMDAwNDc5OTAxMDAwMTAwNjNGMzgyQ0MwMTAwOEIwMDAwNDAwMworOjEwQUMwMDAwNDc5OTAxMDAwMDAwMDA0NUU3OTEwMTAwMEI5NTAwNUZBNgorOjEwQUMxMDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwMzcwMDAwNDAyNAorOjEwQUMyMDAwNDc5OTAxMDA0RDkzMDBGMzk0MzAwMTAwMjU4RDIyNEE4RAorOjEwQUMzMDAwODAzMjAwMDBDMDhCMDA0MDgxQjIwMDAwMzcwMDAwNDAyRAorOjEwQUM0MDAwNDc5OTAxMDA0RDkzMDBGMzk0MzAwMTAwOTA4QjIyNEEwNAorOjEwQUM1MDAwODAzMjAwMDBDMDhCMDA0MDgxQjIwMDAwMzYwMDAwNDAwRQorOjEwQUM2MDAwNDM5OTAxMDAwMDAwMDBGQjEyQjAwMTAwMEYwMDAwRjM0NworOjEwQUM3MDAwOTA4ODAxMDAwNDAwMDBGMzBDRjQwMTAwQkE4QjIyMDY1NgorOjEwQUM4MDAwOTA2QzAwMDA1QzAwM0Q0MzEzRTAwMTAwQTgwMDJERjAzMworOjEwQUM5MDAwOTRCMDAxMDAzNzAwMkZGMDI0QjAwMTAwMzYwMDJBNTA5NAorOjEwQUNBMDAwRTdEMTAxMDAwMDAwNjM0MTEzQzAwMTAwOTU4REEwNDM2RQorOjEwQUNCMDAwMTM2QzAwMDAwMDAwMDA0MEU3QjEwMTAwQUY5MTAwMTBFQworOjEwQUNDMDAwODYzMDAxMDBBRjgyMDA4ODFDQjAwMDAwOTc4RDQyMDVERAorOjEwQUNEMDAwNDgzMTAwMDAwMDAwMDA0NDkzOTMwMTAwQkE4QjFBNURENAorOjEwQUNFMDAwNjk5MzAwMDAzNjAwMkQxMDg2QjAwMTAwNUMwMDNENDNFMgorOjEwQUNGMDAwRTdFMTAxMDBBODAwMkRGMDk0QjAwMTAwMzUwMDJGRjAyRAorOjEwQUQwMDAwMjRCMDAxMDAwMTAwNkJGQjg0QzgwMTAwQTI4REEwNDNBOAorOjEwQUQxMDAwODU2QzAwMDAzNTAwMjA0MEU3QjEwMTAwMDAwMDAwNDBENAorOjEwQUQyMDAwODFCMjAxMDAwMTAwNjNGMzEyQzgwMTAwQTU4REEwNDNBOAorOjEwQUQzMDAwMTM2QzAwMDAwMDAwMDA0MEU3QjEwMTAwNDA4MDAwMDNGOAorOjEwQUQ0MDAwNDRDOTAxMDBCMTkxMDA0QUYwMzEwMTAwQUY4MjAwODg4RQorOjEwQUQ1MDAwMUNCMDAwMDBBODhENDIwNTQ4MzEwMDAwMDAwMDAwNDRFRQorOjEwQUQ2MDAwOTM5MzAxMDAwMDAwMUE1RDY5OTMwMTAwMzcwMDAwNDBEMQorOjEwQUQ3MDAwNDc5OTAxMDAxMTAwNjNGMzgyQ0MwMTAwQTE4QzIyNDFBQworOjEwQUQ4MDAwOUUwNjAwMDAzNTAwMDA0MDQzOTkwMTAwNTgwMDNENDNGNQorOjEwQUQ5MDAwRTdFMTAxMDAwMDAwMDBGODM2QjAwMTAwQUI4QzAwRjBFNAorOjEwQURBMDAwMDBCMDAwMDA1RTAxMkQwNTQ4QjEwMTAwQjM4RDY1RjJEMQorOjEwQURCMDAwMTIzMDAwMDAwMDk5M0Y0MjEzRjAwMTAwQjg4RDIyNDc4NQorOjEwQURDMDAwRTc3RDAwMDBGNTgyNzU4ODFDQjAwMDAwQjI4RDAwNDA2MAorOjEwQUREMDAwODFCMjAwMDAwMDAwMDA0N0U3OTEwMTAwMDAwMDc1NDJDOQorOjEwQURFMDAwMTk5MDAxMDA3NTAwMDA0MDYxOTkwMTAwQkE4REE4QjE2OQorOjEwQURGMDAwMEMzMDAwMDAzNjk0MDAxMDk0MzAwMTAwQUY4MjAwODhCRgorOjEwQUUwMDAwMUNCMDAwMDA1RTAxMkUwNTQ4QjEwMTAwQzBBODNENDZGRgorOjEwQUUxMDAwMERFMDAxMDAwMDAwMDA0MDk3QjAwMTAwQzQ4RDIyNDAwOQorOjEwQUUyMDAwRTE2RDAwMDAwNDAwMDI0MTk3NDAwMDAwQzE4RDAwNTAxOAorOjEwQUUzMDAwNDNDMTAwMDBEMDhEMjI0QjgwMzIwMDAwMDAwMDYyNEJFNQorOjEwQUU0MDAwMTI5NDAxMDAwOTAwMDAwNzk2RTQwMTAwMDAwMDAwQTcyOQorOjEwQUU1MDAwOTdDMDAxMDAzMDAwMDAxMDk0QzgwMTAwMDA4MDAwNEEzMworOjEwQUU2MDAwNDQ5OTAxMDAwMDAwMDA0MkYxQjEwMTAwNUUwMTAwNEI3NQorOjEwQUU3MDAwRjBDOTAxMDA1RTAxMDAwNUUwQzkwMTAwMDAwMDAwNDRDNgorOjEwQUU4MDAwNjFCMTAxMDAyMDAwMDA0QTYyREQwMTAwQ0U4REE4NDBDMgorOjEwQUU5MDAwODEzMjAwMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTAxMQorOjEwQUVBMDAwRjFCMTAxMDAwNDAwMDAwOTk2RTQwMTAwMDAwMDY4QTg2NworOjEwQUVCMDAwOTdDMDAxMDBENDAwMDAwNUUwQzkwMTAwMDAwMDAwNDQ3MworOjEwQUVDMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwRDY4REE4NDAwMAorOjEwQUVEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDA5OTNGNDIyMAorOjEwQUVFMDAwMTNGMDAxMDBEQThENjU0MDgxMzIwMDAwM0YwMDAwRjM2RAorOjEwQUVGMDAwOTY4ODAxMDAwMDAwMDA0MEU3QjEwMTAwMDAwMDc1NTU5MAorOjEwQUYwMDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwREU4REE4NDBDMQorOjEwQUYxMDAwODEzMjAwMDBFMzhEMjI0QjgwMzIwMDAwMDAwMDAwNEJBNAorOjEwQUYyMDAwNjJCMTAxMDBFMThEQTg0MDgxMzIwMDAwMDAwMDAwOTc2RAorOjEwQUYzMDAwMTNCMDAxMDAwMDAwMDA5Njk3QjAwMTAwRTk4RDIwMDlEMAorOjEwQUY0MDAwOTY2QzAwMDBFOThEMUYwOTk2MjQwMDAwRjU4MjAwODhBOAorOjEwQUY1MDAwMUNCMDAwMDBFNDhEMDA0MDgxQjIwMDAwOUE5NDAwNTdCQworOjEwQUY2MDAwODEzMDAxMDBENThBMDAwNTQ4QjEwMDAwMkUwMDAwNDA2NAorOjEwQUY3MDAwNDM5OTAxMDBFRjhEMjJGMzgwMzIwMDAwOUE5NDAwNDI0MQorOjEwQUY4MDAwODEzMDAxMDAxQTg3MDA0MDgxQjIwMDAwMEI5NTAwNTIwOQorOjEwQUY5MDAwODEzMDAxMDBENThBMDA0MjE5ODAwMDAwOUE5NDAwM0E1RAorOjEwQUZBMDAwODEzMDAxMDAwQjk1MDA1MjgxMzAwMTAwRDU4QTAwNDBBQworOjEwQUZCMDAwODFCMjAwMDAwMDAwMDA0MDA1QjAwMTAwQUQ5MzAwNDBFOAorOjEwQUZDMDAwOTUzMDAxMDBENThBMjI0MDk1NkMwMDAwRkE4REEyNDA5MAorOjEwQUZEMDAwMUY3QzAwMDBCMDkyMDA0MDgxMzIwMTAwMUE4NzAwNDBCRgorOjEwQUZFMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjJBOQorOjEwQUZGMDAwMDJCMDAxMDA1ODkzMDA1Mjk1MzAwMTAwNUY5MzAwNEI1RQorOjEwQjAwMDAwMDJCMDAwMDAxQTg3MDA0MDgxQjIwMDAwOTQ5NTAwNDAxMQorOjEwQjAxMDAwOTUzMDAxMDAwNjhFQTIwODgwMzIwMDAwMDY4RUEyMTYyRQorOjEwQjAyMDAwODAzMjAwMDAxQTg3MjI0MjE5N0MwMDAwMDAwMDAwNEI4OQorOjEwQjAzMDAwMTk5MDAxMDA5QTk0MDAzQTgxMzAwMTAwMUE4NzAwNDA2QgorOjEwQjA0MDAwODFCMjAwMDAwMDIzMDBBNjE2QjAwMTAwMDk4RTgzMUUwNQorOjEwQjA1MDAwODAzMjAwMDAwMDA4MDAwQjE2REMwMTAwMDAwMDAwMDAzOAorOjEwQjA2MDAwMkFDMDAxMDBFMzk0MDAwODgwMzAwMTAwMEQ4RTAwNUVDQworOjEwQjA3MDAwMTc5MDAwMDAwNDk1MDA0MzYxMzEwMTAwQkQ5MTAwNDAyQworOjEwQjA4MDAwOEQzMDAxMDBFQjk0MDAwNzE2MTQwMTAwMDA4MDAwMTBDMQorOjEwQjA5MDAwNDJDOTAxMDAxNThFMjI0MEUzNkQwMDAwMDAwMDAwNDMwQworOjEwQjBBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMTI4RUE4NDA3NQorOjEwQjBCMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwOEM5NDAwNUVEQQorOjEwQjBDMDAwMDUxMDAxMDBCMDkyMDA0MDgxMzIwMTAwMTk4RTIyMDk2MgorOjEwQjBEMDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4QTAwMDUzMworOjEwQjBFMDAwNDhCMTAwMDBERDkzMDA0MDgxMzIwMTAwRDU4QTAwNDA2NAorOjEwQjBGMDAwODFCMjAwMDAwMDAwMDA0QTFGOTAwMTAwMjA4RTIyNDMxMAorOjEwQjEwMDAwM0Q3QzAwMDAwMDAwMDA0NDE5OTAwMTAwMDAwMDAwNDM1NQorOjEwQjExMDAwM0Q4MDAxMDAyMThFMDA0MjE5OTAwMDAwMTQwMDJENDU1MQorOjEwQjEyMDAwMUY5MDAxMDA3RDhFODMxRTgwMzIwMDAwN0Q4RTAwNDRDMgorOjEwQjEzMDAwMTk5MDAwMDBBMjkyMDA0MDgxMzIwMTAwMzU4RUEyMDhEMQorOjEwQjE0MDAwODAzMjAwMDAzNThFQTIxNjgwMzIwMDAwMzE4RUEyNDI3RAorOjEwQjE1MDAwMTk3QzAwMDAwMDgyMDAwMjA0REMwMTAwQTA5ODAwNDA3RAorOjEwQjE2MDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwMkU4RUEyNDEyRgorOjEwQjE3MDAwMTk3QzAwMDBCMDkyMDA0MDgxMzIwMTAwMUE4NzAwNDAyMworOjEwQjE4MDAwODFCMjAwMDA1ODkzMDAxNTk0MzAwMTAwNUY5MzAwNEI4QQorOjEwQjE5MDAwMDJCMDAwMDAxQTg3MDA0MDgxQjIwMDAwREQ5MzAwNDAzOQorOjEwQjFBMDAwODEzMjAxMDAwMDAwMDA0QjE5OTAwMTAwOUE5NDAwM0E4RQorOjEwQjFCMDAwODEzMDAxMDAxQTg3MDA0MDgxQjIwMDAwMzg4RTIyNDI5RgorOjEwQjFDMDAwMTk3QzAwMDBERDkzMDA0MDgxMzIwMTAwMzk4RTAwNDA3RgorOjEwQjFEMDAwODFCMjAwMDBBRDkzMDA0MDgxMzIwMTAwNjU4RTIyNDFCMgorOjEwQjFFMDAwMTk3QzAwMDBDMDAwMDAxNTk4QzgwMTAwNjU4RUEwMEJGNgorOjEwQjFGMDAwOTk2QzAwMDAzMDAwMDAxMDgwQzgwMTAwMDA4MDAwNDAwMQorOjEwQjIwMDAwNDQ5OTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM2QQorOjEwQjIxMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwNDBGNworOjEwQjIyMDAwNjJCMTAxMDA0MThFQTgwMEUwMzEwMDAwQUY4MjAwODhDOQorOjEwQjIzMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwQzAwMDAwMTU2RQorOjEwQjI0MDAwOThDODAxMDAzMDAwMkUwQjk5RDAwMTAwMDAwMDZBNTAxMAorOjEwQjI1MDAwOTlDMDAxMDBDMDAwNjIwMTgwQ0MwMTAwMEM4MDAwMDM5NQorOjEwQjI2MDAwNDJDOTAxMDAyRDAwMkRGMDIyQjAwMTAwMDAwMDAwNEM2OQorOjEwQjI3MDAwODBDMDAxMDAwMDAwMDA1QzIzODAwMTAwRDQwMDNGNDEzOQorOjEwQjI4MDAwRTdFMTAxMDAwQjAwMDAxMUU0RjUwMTAwMkYwMDIwNDc2OQorOjEwQjI5MDAwRTdCNTAxMDA1MjhFMjMwQjgxNkMwMDAwMDAwMDAwNEZDNworOjEwQjJBMDAwRTU5MTAxMDAwMDAwMDAwODgwQjAwMTAwMDAwMDAwMEJFMworOjEwQjJCMDAwMDNCMDAxMDAwMDAwMDAxNTAyRDAwMTAwRTM5NDAwMDA3QgorOjEwQjJDMDAwMkE0MDAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA2RAorOjEwQjJEMDAwNjJERDAxMDA1NzhFQTg0MDgxMzIwMDAwQUY4MjAwODhGNQorOjEwQjJFMDAwMUNCMDAwMDBCMDkyMDAwNTQ4MzEwMTAwQzAwMDAwMDExMAorOjEwQjJGMDAwODBDRTAxMDA2MzhFMjYxMTAwMzAwMDAwMTAwMDAwMDA5NworOjEwQjMwMDAwMkFDODAxMDAwMDAwMDAwODgwQjAwMTAwMDAwMDAwMDExMAorOjEwQjMxMDAwODBDMDAxMDBDMDAwMDA0MDk5OTgwMTAwMDAwMDAwMDFCOQorOjEwQjMyMDAwOThEMDAxMDBFMzk0MDA0QzAyMzAwMTAwQzAwMDAwNDBCRQorOjEwQjMzMDAwMDM5ODAxMDA2QThFMDA0MDgxQjIwMDAwMzAwMDJGMDg5RgorOjEwQjM0MDAwODBCMDAxMDBDMDAwMDAxNUY0QzkwMTAwQzAwMDAwMDE3OAorOjEwQjM1MDAwRTRDRDAxMDBDMDAwMDA0MDAzOTgwMTAwRTM5NDAwMDAyOAorOjEwQjM2MDAwMkE0MDAxMDA2RjhFMjI0NDFGN0MwMDAwQUMwMDJGNDA1OQorOjEwQjM3MDAwMTNCMDAxMDAwMDAwMDAwMUUwQzEwMTAwQjAwMDAwNDA3NgorOjEwQjM4MDAwNDc5OTAxMDA3MDhFMDAwMUUwRDEwMDAwQkQ5MTAwNDA5RQorOjEwQjM5MDAwOEQzMDAxMDA4MDYzMDBBNjE2QjAwMTAwRUI5NDAwMDcxOQorOjEwQjNBMDAwMTYxNDAxMDAwMDgwMDAxMDQyQzkwMTAwNzg4RTIyNDA2RQorOjEwQjNCMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA5NworOjEwQjNDMDAwNjJERDAxMDA3NThFQTg0MDgxMzIwMDAwQUY4MjAwODhFNgorOjEwQjNEMDAwMUNCMDAwMDA4Qzk0MDA1RTA1MTAwMTAwN0I4RTIyMDlEOQorOjEwQjNFMDAwODAzMDAwMDAwQjk1MDA0MDgxMzIwMTAwRDU4QTAwMDVCNQorOjEwQjNGMDAwNDhCMTAwMDA3RDhFMDA0QTFGOTAwMDAwMDAwMDAwMDA1MAorOjEwQjQwMDAwMTBCMDAxMDAyNDAwMkQxNTEwQzAwMTAwMjgwMDJERjBGRgorOjEwQjQxMDAwMTZCMDAxMDAyMjAwMkRGMDI2QjAwMTAwMTQwMDJGRjIxQQorOjEwQjQyMDAwMENCMDAxMDAwMDAwMDAwMUUwRDEwMTAwMDAwMDAwMTA5QworOjEwQjQzMDAwMzJCMDAxMDAwMDAwMDAwQjFCQjAwMTAwMDQwMDFGMTUxQQorOjEwQjQ0MDAwMUE1MDAwMDAwMDAwMDA0MDIzQjAwMTAwMDAwMDAwMDE3RAorOjEwQjQ1MDAwMkFCMDAxMDA0Qjk0MDA0MDM1QjAwMDAwMkYwMDIwNDA3RQorOjEwQjQ2MDAwRTdCMTAxMDBDMThFQTI0NTFGN0MwMDAwMjQwMDIwMEIyMworOjEwQjQ3MDAwRTBCMTAxMDAyODAwMjAxM0UwQjEwMTAwMjIwMDIwMDYwNQorOjEwQjQ4MDAwRTRCMTAxMDA5NzhFMjI1QzFGN0MwMDAwMDAwMDAwNUM4QworOjEwQjQ5MDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwOTc4RTIyNDBCOQorOjEwQjRBMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBBMgorOjEwQjRCMDAwNjJERDAxMDA5MzhFQTg0MDgxMzIwMDAwQUY4MjAwODhENworOjEwQjRDMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDA4MDAwMTkxOAorOjEwQjREMDAwNDJDOTAxMDBCQThFMjI0MEUzNkQwMDAwQTg4RTIyNDJDQworOjEwQjRFMDAwMTk3QzAwMDAwNTk0MDA0MDgxMzIwMTAwNTc5MjAwNDAxMQorOjEwQjRGMDAwODEzMjAxMDBCNThFMjI0QjgwMzIwMDAwMDAwMDAwNDNGMworOjEwQjUwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOUU4RUE4NDA4NAorOjEwQjUxMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQTQ4RTIyNDE1RQorOjEwQjUyMDAwMTk3QzAwMDBDNjkyMDA0MDExMzAwMTAwQTU4RTAwMDU3NAorOjEwQjUzMDAwNDhCMTAwMDBCMDkyMDA0MDgxMzIwMTAwQTc4RTIyMDk3QworOjEwQjU0MDAwODAzMDAwMDAwQjk1MDA0MDgxMzIwMTAwRjk4MjAwNDBGQworOjEwQjU1MDAwMDVCMDAwMDAwNTk0MDA0MDgxMzIwMTAwNTM5MjAwNDA4NAorOjEwQjU2MDAwODEzMjAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA4MQorOjEwQjU3MDAwNjJERDAxMDBBQjhFQTg0MDgxMzIwMDAwQUY4MjAwODhGRQorOjEwQjU4MDAwMUNCMDAwMDBCMThFMjI0MTE5N0MwMDAwQzY5MjAwNDAyMAorOjEwQjU5MDAwMTEzMDAxMDBCMjhFMDAwNTQ4QjEwMDAwQjA5MjAwNDBBOQorOjEwQjVBMDAwODEzMjAxMDBCNDhFMjIwOTgwMzAwMDAwMEI5NTAwNDBFQQorOjEwQjVCMDAwODEzMjAxMDBGOTgyMDA0MDA1QjAwMDAwMDAwMDAwNDMyNAorOjEwQjVDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQjY4RUE4NDBBQworOjEwQjVEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyRQorOjEwQjVFMDAwNDhCMTAxMDBCRDhFMjI0MTE5N0MwMDAwQzY5MjAwNDA4NgorOjEwQjVGMDAwMTEzMDAxMDBCRThFMDAwNTQ4QjEwMDAwQjA5MjAwNDAzRAorOjEwQjYwMDAwODEzMjAxMDBDMDhFMjIwOTgwMzAwMDAwMEI5NTAwNDA3RAorOjEwQjYxMDAwMTMzMDAxMDBEQThBMDA0MDA1QjAwMDAwMDA4MDAwMTlGNAorOjEwQjYyMDAwNDJDOTAxMDBDODhFMjI0MEUzNkQwMDAwMDAwMDAwNDNDMworOjEwQjYzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQzQ4RUE4NDAyRAorOjEwQjY0MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDVCRAorOjEwQjY1MDAwNDhCMTAxMDAwMDAwMDA0MDA1QjAwMTAwQ0M4RTIyNDEzRAorOjEwQjY2MDAwMTk3QzAwMDBDNjkyMDA0MDExMzAwMTAwQ0Q4RTAwMDUwQgorOjEwQjY3MDAwNDhCMTAwMDBCMDkyMDA0MDgxMzIwMTAwMDgwMDJEMEE1QworOjEwQjY4MDAwODRCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMTQwMDIwNDBFRQorOjEwQjY5MDAwRTFCMTAxMDBEMjhFMDMxRTgwMzIwMDAwRDM4RTAwNDE0MgorOjEwQjZBMDAwODdCMDAwMDAyMTAwMDA0MDg3OTgwMTAwQ0U5MzAwNDA0MQorOjEwQjZCMDAwODEzMjAxMDAwMDAwMDA1QzFGOTAwMTAwRDc4RTIyMDkzQQorOjEwQjZDMDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4RTIyNDREOAorOjEwQjZEMDAwMTk3QzAwMDAwQjk1MDA0RjgxMzAwMTAwMDAwMDAwNDRGMAorOjEwQjZFMDAwMTk4MDAxMDBENThBQTI0QTFGN0MwMDAwREE4QTAwNDAzNgorOjEwQjZGMDAwODFCMjAwMDBCQTAwMjA0MEU1QjEwMTAwRTA4RTlDMTc0NQorOjEwQjcwMDAwODAzMjAwMDBDQzAwMDA0MDQzOTkwMTAwOUQ5NTAwNDAyQworOjEwQjcxMDAwODEzMjAxMDA0NDk1MDA0MDEzMzAwMTAwQzAwMDAwNDAxOAorOjEwQjcyMDAwNDM5OTAxMDBDNDAwMkRGMDgyQjAwMTAwNzg5NTAwRjAyQgorOjEwQjczMDAwODQzMDAxMDBCMDkyMDA0MDgxMzIwMTAwREE4QTIyMDk4RgorOjEwQjc0MDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4QTAwNDA4MQorOjEwQjc1MDAwODFCMjAwMDAyRTAwMDA0MDQzOTkwMTAwRUM4RTIyNDA4RgorOjEwQjc2MDAwRTc2RDAwMDAzMjAwMDA0MDQzOTkwMTAwRjQ4RUEyNDBEMgorOjEwQjc3MDAwRTU2RDAwMDA5QTkzMDA0MDgxMzIwMTAwMjQwMDIwMEIwNworOjEwQjc4MDAwRTBCMTAxMDAyODAwMjAxM0UwQjEwMTAwMjIwMDIwMDZGMgorOjEwQjc5MDAwRTRCMTAxMDAxNDAwMjAwQUUwQjEwMTAwREE4QTIyMDlCNAorOjEwQjdBMDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4QTAwNDAyMQorOjEwQjdCMDAwODFCMjAwMDA5QTkzMDA0MDgxMzIwMTAwNTM5MzAwNDAwRgorOjEwQjdDMDAwODEzMjAxMDAwMjhGMjI0MTE5N0MwMDAwMDAwMDAwMEIzMQorOjEwQjdEMDAwOTlCMDAxMDAwNDAwMUYxNTk4NTAwMDAwMDI4RjIwMDE0RAorOjEwQjdFMDAwOTg2QzAwMDA3MDAwMDAwMzQ4QzkwMTAwMDAwMDJFNDY1QworOjEwQjdGMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDNBMworOjEwQjgwMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwQTAwMDAwQTRGRAorOjEwQjgxMDAwNjJERDAxMDBGRjhFQTgwMEUwMzEwMDAwMDAwMDAwMDU5RAorOjEwQjgyMDAwNDhCMTAxMDBBQzAwMkYwMDEwQjAwMTAwMDAwMDAwMDE4MQorOjEwQjgzMDAwRTBDMTAxMDAxNDAwMkYxNTEwQzAwMTAwMDAwMDAwMEEzMworOjEwQjg0MDAwODBCMDAxMDAwMDAwNjAwMTgwRDAwMTAwMDAwMDAwNDdDRQorOjEwQjg1MDAwMTk5MDAxMDA4NDhFMjIwOTgwMzIwMDAwMEI5NTAwMDlBNgorOjEwQjg2MDAwODAzMDAxMDA4NDhFMDA0MDEzQjAwMDAwMDA4MDAwMDM4RgorOjEwQjg3MDAwNDJDOTAxMDAwMDAwMDBGMDgyQjAwMTAwMTMwMDAwNDA0NgorOjEwQjg4MDAwODc5ODAxMDAwMDAwMDA0QzQzQzEwMTAwQ0U5MzAwRjBGNgorOjEwQjg5MDAwODQzMDAxMDBENThBMDA1QzFGOTAwMDAwMkMwMDIwNDBGRAorOjEwQjhBMDAwRTdCMTAxMDAyRDAwMjA0MEU3QjEwMTAwRDU4QTAwNDIzOAorOjEwQjhCMDAwMTk4MDAwMDBDMDkzMDA0MDgxMzIwMTAwRTA5NDAwNDhFQworOjEwQjhDMDAwOTUzMDAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAwQQorOjEwQjhEMDAwNjJERDAxMDAxNzhGQTg0MDEzMzAwMDAwQUY4MjAwODg5RQorOjEwQjhFMDAwMUNCMDAwMDAxRDhGMDAwNTQ4QjEwMDAwMUM4RjAwNDBGNworOjEwQjhGMDAwMTNCMDAwMDAwMDAwMDAwMDEyQjAwMTAwMDgwMDAwNDA3QQorOjEwQjkwMDAwNDM5OTAxMDAxNDAwMkRGMDgyQjAwMTAwMDQwMDIyRjBFMAorOjEwQjkxMDAwODQzMDAwMDAxMzAwMDA0MDg3OTgwMTAwQ0U5MzAwNDA1RgorOjEwQjkyMDAwODEzMjAxMDAwMDAwMDA1QzFGOTAwMTAwMzU4RjAwMDk4QQorOjEwQjkzMDAwMDBCMDAwMDBENThBODc0MjE5MTAwMDAwOEIwMDJGNDcwNQorOjEwQjk0MDAwMTk4MDAxMDBENThBMDA0MEU3OTEwMDAwMkYwMDAwNDBENworOjEwQjk1MDAwNDc5OTAxMDAzMzhGMjI0N0U3N0QwMDAwMzQ5MjAwNDA3MQorOjEwQjk2MDAwRTczMTAxMDAzMzhGMjIwMDgwMzIwMDAwMkU4RkEyNDA4OQorOjEwQjk3MDAwMUY3QzAwMDBCMDkyMDA0MDgxMzIwMTAwMzM4RjAwNDBGNAorOjEwQjk4MDAwODFCMjAwMDAzMDAwMDA0MDQzOTkwMTAwMzIwMDJERjJFNgorOjEwQjk5MDAwOTRCMDAxMDA1ODkzMDBGMjAyMzAwMTAwNUY5MzAwNEIxNQorOjEwQjlBMDAwMDJCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMzQ4RjAwNDBFMworOjEwQjlCMDAwMDFCMDAwMDAwMDAwMDA0MDA1QjAwMTAwM0E4RjIyMDBGNQorOjEwQjlDMDAwODAzMjAwMDAzOThGQTI0MjE5N0MwMDAwQUQ5MzAwNDAwNAorOjEwQjlEMDAwODEzMjAxMDAzQThGMDA0MDgxQjIwMDAwREQ5MzAwNDBDNworOjEwQjlFMDAwODEzMjAxMDBDNjhGMjI1QzFGN0MwMDAwMDAwMDAwNUNEOQorOjEwQjlGMDAwMUY4MDAxMDAwMDgwMDAxMDQyQzkwMTAwNDI4RjIyNDBEOAorOjEwQkEwMDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAzRQorOjEwQkExMDAwNjJERDAxMDAzRjhGQTg0MDgxMzIwMDAwQUY4MjAwODhDNAorOjEwQkEyMDAwMUNCMDAwMDBDNjhGMDAwNTQ4QjEwMDAwQTI5MjAwNDA4MworOjEwQkEzMDAwODEzMjAxMDA0OThGQTIwODgwMzIwMDAwNDk4RkEyMTY4RQorOjEwQkE0MDAwODAzMjAwMDA5QTk0MDA0RDgxMzAwMTAwMDA4MjAwMDI5MworOjEwQkE1MDAwMDREQzAxMDAxQTg3MDA0MDgxQjIwMDAwNzQwMDAwNDAzRAorOjEwQkE2MDAwNDM5OTAxMDAwMDAwMDBGODgyQjAwMTAwMDAwMDAwRjBERQorOjEwQkE3MDAwODRCMDAxMDAwMDAwMDA0MTk2QjAwMTAwNTc4RjIyNDJCRgorOjEwQkE4MDAwOTYxNDAwMDAwMDgwMDAxMDQ0QzkwMTAwNjQwMDY4NDA2MgorOjEwQkE5MDAwOTc5ODAxMDAwMDAwMDA0MUYwQjEwMTAwMDAwMDAwNDI1MQorOjEwQkFBMDAwRjBCMTAxMDA3MDAwMDAwNUUwQzkwMTAwMDAwMDAwNDU5MAorOjEwQkFCMDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwNTQ4RkE4NDAzOAorOjEwQkFDMDAwODEzMjAwMDAwMDAwMDA1QzFGOTAwMTAwMDAwMDAwNDU3MgorOjEwQkFEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTg4RkE4NUNEOAorOjEwQkFFMDAwMUYwMDAwMDBBRjgyMDA4ODFDQjAwMDAwNUUwMTJEMDUyMQorOjEwQkFGMDAwNDhCMTAxMDA1QzhGNjVGMjEyMzAwMDAwMDA5OTNGNDJBRQorOjEwQkIwMDAwMTNGMDAxMDA2MThGMjI0N0U3N0QwMDAwRjU4Mjc1ODgwMAorOjEwQkIxMDAwMUNCMDAwMDA1QjhGMDA0MDgxQjIwMDAwMDAwMDAwNDdCNQorOjEwQkIyMDAwRTc5MTAxMDAwNDAwNzUwOTk2RTQwMTAwMDA4MDAwMTAwRgorOjEwQkIzMDAwNDRDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDY4QTgwMAorOjEwQkI0MDAwOTdDMDAxMDAwMDAwMDAwM0UwQjEwMTAwMDA4MDAwMDM4NQorOjEwQkI1MDAwNDQ5OTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBBMAorOjEwQkI2MDAwNjJCMTAxMDA2OThGQTg0MEUxMzEwMDAwQUY4MjAwODgxNgorOjEwQkI3MDAwMUNCMDAwMDAwMDk5M0Y0MjEzRjAwMTAwNkQ4RjY1MDU3NQorOjEwQkI4MDAwNDgzMTAwMDAzRjAwMDBGMzk2ODgwMTAwMDAwMDAwNDBBQgorOjEwQkI5MDAwRTdCMTAxMDAwMDAwNzU0MDgxQjIwMTAwNzU4RjIyNEJCMgorOjEwQkJBMDAwODAzMjAwMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEIzMAorOjEwQkJCMDAwNjJCMTAxMDA3MzhGQTg0MDgxMzIwMDAwMDAwMDAwMDdDRAorOjEwQkJDMDAwMTZCMDAxMDAwMDYyMDAwQjE2REMwMTAwMzQ5MjAwNDA0OAorOjEwQkJEMDAwODEzMjAxMDA4RDhGMjIwMDgwMzIwMDAwRTM5MzAwNUZFQworOjEwQkJFMDAwMDExMDAxMDA3NzhGMjI0MDk1NkMwMDAwMDA4MDAwMTA0QQorOjEwQkJGMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM0MQorOjEwQkMwMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTAyRAorOjEwQkMxMDAwNjJCMTAxMDA3RjhGQTgwMEUwMzEwMDAwQUY4MjAwODg5MAorOjEwQkMyMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDQ4MDAwMDNDMgorOjEwQkMzMDAwNDJDOTAxMDAwMDAwMDBGMjAyQjAwMTAwNTg5MzAwNTIxNgorOjEwQkM0MDAwOTUzMDAxMDBCMDkyMDA0MDgxMzIwMTAwNzc4RjIyNDE4RgorOjEwQkM1MDAwOTc1MDAwMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjA3MgorOjEwQkM2MDAwMDBCMDAxMDAwMDAwMDA1QzAxODAwMTAwNUY5MzAwNEIwOAorOjEwQkM3MDAwMDJCMDAwMDA3NzhGMDAwNTQ4QjEwMDAwRUI5NDAwNDA0RgorOjEwQkM4MDAwMDMzMDAxMDAxNzgwMDAwMzQ0QzkwMTAwMDBGMDAwMENEQworOjEwQkM5MDAwOTY4ODAxMDAwMDAwNjM0Qzk3RjAwMTAwMTA4MDAwMDNCQgorOjEwQkNBMDAwNDRDOTAxMDAwMDAwMDBBQkUxQjEwMTAwOEM5NDAwNUVDQQorOjEwQkNCMDAwMDUxMDAxMDAwMzAwMDAwNzFBRjQwMTAwMDcwMDAwMDc0NworOjEwQkNDMDAwMTY4ODAxMDAwMEI1MDAwRDQ2QzkwMTAwOTc4RjMwNDA2RAorOjEwQkNEMDAwODEzMjAwMDAwMDAwMDAwQkU2ODEwMTAwMDBCNzAwMEQ3QQorOjEwQkNFMDAwNDZDOTAxMDAwMDAwMDAwQkU2ODEwMTAwMTAwMDEwMEZBMgorOjEwQkNGMDAwOTRGNDAxMDA5MzA0MDA1Rjk1MDQwMTAwMzk5MzAwNDAxRgorOjEwQkQwMDAwODEzMjAxMDBBMThGMjI1MEZEN0YwMDAwOUY4RjQ2NDBBRAorOjEwQkQxMDAwODEzMjAwMDAwMDAwMUU0MTMxRDMwMTAwMDAwMDJFMDVEOQorOjEwQkQyMDAwNDhCMTAxMDAwMDAwMDA0MEUxQjEwMTAwMDAwMDAwNDAwNgorOjEwQkQzMDAwMEZCMDAxMDA5QjkyMDA0MTgxMzAwMTAwMUE4NzAwNDA0MgorOjEwQkQ0MDAwODFCMjAwMDBBMjkyMDA0MDgxMzIwMTAwQjM4RkEyMDhBQworOjEwQkQ1MDAwODAzMjAwMDBCMzhGQTIxNjgwMzIwMDAwMDA4MjAwMDIwMQorOjEwQkQ2MDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDFCOAorOjEwQkQ3MDAwMDBDMDAxMDBBQzhGMzc1QzYxMzEwMDAwMDAwMDAwMUI4NworOjEwQkQ4MDAwNjJCMTAxMDBCMDhGMjg0MDgxMzIwMDAwQUQ4RjAwNDBDOQorOjEwQkQ5MDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwQjA4RkE4NDAzNQorOjEwQkRBMDAwODEzMjAwMDAxQTg3MTc0MDgxQjIwMDAwNzQwMDIyNDBERgorOjEwQkRCMDAwRjFCMTAxMDAwMDAwMDA0MEUxQjEwMTAwRTA5NDAwNEE0RgorOjEwQkRDMDAwOTUzMDAxMDBDMDkzMDA1QzFGMTAwMTAwNDk4RjAwNDBCNgorOjEwQkREMDAwODFCMjAwMDAyRjAwMDA0MDQ3OTkwMTAwQzQ4RjIyNDcyNAorOjEwQkRFMDAwRTc3RDAwMDAzNDkyMDA0MEU3MzEwMTAwQzQ4RjIyMDA1QgorOjEwQkRGMDAwODAzMjAwMDBCRjhGQTI0MDFGN0MwMDAwQjA5MjAwNDA0NAorOjEwQkUwMDAwODEzMjAxMDBDNDhGMDA0MDgxQjIwMDAwMzAwMDAwNDA0OAorOjEwQkUxMDAwNDM5OTAxMDAzMjAwMkRGMjk0QjAwMTAwNTg5MzAwRjJEMgorOjEwQkUyMDAwMDIzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMDAwMDAwMDVFQgorOjEwQkUzMDAwNDhCMTAxMDBFMDk0MDA0ODk1MzAwMTAwQzA5MzAwNUNENworOjEwQkU0MDAwMUYxMDAxMDBDOThGODc0MjE5MTAwMDAwOEIwMDJGNDc3NworOjEwQkU1MDAwMTk4MDAxMDAwMDAwMDA0MEU3OTEwMTAwMEI5NTAwNDJBRAorOjEwQkU2MDAwODEzMDAxMDBENThBMDA0MDgxQjIwMDAwQzA5MzAwNDBCQgorOjEwQkU3MDAwODEzMjAxMDBENThBMDA1QzFGOTAwMDAwQkEwMDIwNDA4QQorOjEwQkU4MDAwRTVCMTAxMDA0NDk1MDA0MDgxMzIwMTAwQzAwMDAwNDA0RQorOjEwQkU5MDAwNDM5OTAxMDBDNDAwMkRGMDgyQjAwMTAwNzg5NTAwRjBCNAorOjEwQkVBMDAwODQzMDAxMDBCMDkyMDA0MDgxMzIwMTAwMEI5NTAwNDVDMgorOjEwQkVCMDAwODEzMDAxMDBENThBMjI0MjE5N0MwMDAwOUE5NDAwM0ExMAorOjEwQkVDMDAwODEzMDAxMDBENThBMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwQkVEMDAwODFCMjAwMDBBMjkyMDA0MDgxMzIwMTAwREU4RkEyMDhGMAorOjEwQkVFMDAwODAzMjAwMDBERThGQTIxNjgwMzIwMDAwOUE5NDAwNDc1NAorOjEwQkVGMDAwODAzMDAxMDAwMDgyMDAwMjA0REMwMTAwMUE4NzAwNDA0QgorOjEwQkYwMDAwODFCMjAwMDAxMDgwMDAwMzQ0QzkwMTAwMDBFMTAwQTZENgorOjEwQkYxMDAwODRCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDBDOQorOjEwQkYyMDAwRjFCMTAxMDAwMDAwNjAwNzg0OTQwMTAwOEM5NDAwNUU3MAorOjEwQkYzMDAwMDUxMDAxMDBENThBMDA0MDgxQjIwMDAwOEEwMDAwNDA0RgorOjEwQkY0MDAwNDc5OTAxMDBCMDkyMDA0MUU3NDEwMTAwREE4QTAwNDBDMAorOjEwQkY1MDAwODFCMjAwMDA5QTkzMDA0MDgxMzIwMTAwNTM5MzAwNDA2NworOjEwQkY2MDAwODEzMjAxMDAwMDAwMDAwMTJDQjAwMTAwMDAwMDAwMTUyQQorOjEwQkY3MDAwMTBCMDAxMDAwMDAwMDAwMDEwQzAwMTAwMDQwMDFGMEEwMgorOjEwQkY4MDAwMkM1MDAwMDAwMDAwMDAxMDMyQjAwMTAwMUU5NTAwMDY4OQorOjEwQkY5MDAwMDQzMDAxMDBGNjhGQTI0ODFGN0MwMDAwRjQ4Rjg0NDgxMworOjEwQkZBMDAwMUYxMDAwMDBBQzAwMDA0MDQ3OTkwMTAwRjY4RjAwMEEwNgorOjEwQkZCMDAwRTBDMTAwMDAwMDAwMDAwQTAyQjAwMTAwQkQ5MTAwMDFENAorOjEwQkZDMDAwOEMzMDAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTAwRQorOjEwQkZEMDAwNjJERDAxMDBGNzhGQTg0MDgxMzIwMDAwQUY4MjAwODg0NworOjEwQkZFMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMDI4NAorOjEwQkZGMDAwMTBDMDAxMDAwNDkwMjIwMjE0NTAwMDAwMDg5NDAwNDU3MworOjEwQzAwMDAwMUYwMDAxMDBFRThGMjI1QzFGN0MwMDAwMDAwMDAwNDczMworOjEwQzAxMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDA5MEE4NUNFOQorOjEwQzAyMDAwMUYwMDAwMDBBRjgyMDA4ODFDQjAwMDAwRUU4RjAwMDVFQQorOjEwQzAzMDAwNDhCMTAwMDAwMDAwMDAwQjFCQjAwMTAwMDgwMDJENDBCQgorOjEwQzA0MDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDA1NworOjEwQzA1MDAwMDVCMDAxMDBDRTkzMDA0MTg3MzAwMTAwMDAwMDAwNDU4QgorOjEwQzA2MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMEE5MEE4NDBBQgorOjEwQzA3MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU4MworOjEwQzA4MDAwNDhCMTAxMDAxMDkwMjIwOTgwMzAwMDAwMEI5NTAwNDA1QgorOjEwQzA5MDAwMTMzMDAxMDAxNDkwMjI0NDE5N0MwMDAwMEI5NTAwNEZDRQorOjEwQzBBMDAwODEzMDAxMDAxNDkwQTI0NzFGN0MwMDAwMDAwMDAwNDQ3MgorOjEwQzBCMDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwMjI5MDIyNEEyRAorOjEwQzBDMDAwMUY3QzAwMDAxQTkwQTIxNjAyMzAwMDAwQjA5MjAwNDBCRgorOjEwQzBEMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwRDU4QTAwNDBFNQorOjEwQzBFMDAwODFCMjAwMDAyRDAwMkQwODJBQjAwMTAwMUU5MDIyNDJDRQorOjEwQzBGMDAwMTk3QzAwMDBERDkzMDA0MDgxMzIwMTAwMUY5MDAwNDA1OAorOjEwQzEwMDAwODFCMjAwMDBBRDkzMDA0MDgxMzIwMTAwMzAwMDJFMDA2QQorOjEwQzExMDAwMkFEMDAxMDAzMjAwMkExNUU0QjEwMTAwRDU4QTAwMTZBOAorOjEwQzEyMDAwRTRCMTAwMDAzNTkwMjIxNjAyMzAwMDAwMDAwMDAwMDg0MworOjEwQzEzMDAwMkFCMDAxMDA5NDk1MDA0MDk1MzAwMTAwMjc5MEEyNDA1QworOjEwQzE0MDAwMTE2QzAwMDAzNjkwMjI0MDJENkMwMDAwQUMwMDAwNDBDNQorOjEwQzE1MDAwNDc5OTAxMDBCMDAwMkIwMUUwQzEwMTAwMDAyQjAwQTZBRgorOjEwQzE2MDAwMTZCMDAxMDAwMDAwMDAwMUUwRDEwMTAwRTM5NDAwMDhENgorOjEwQzE3MDAwODAzMDAxMDAyRTkwMDA1RTE3OTAwMDAwMDQ5NTAwNDM2RgorOjEwQzE4MDAwNjEzMTAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA3NgorOjEwQzE5MDAwNjJERDAxMDAyRjkwQTg0MDgxMzIwMDAwQUY4MjAwODg0QworOjEwQzFBMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwRUI5NDAwMDczRQorOjEwQzFCMDAwMTYxNDAxMDA4Qzk0MDA1RTA1MTAwMTAwQjA5MjAwNDAzRQorOjEwQzFDMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwREE4QTAwNDBFRgorOjEwQzFEMDAwODFCMjAwMDAwMDAwMDAwQjFCQjAwMTAwMDQwMDFGMTUxRAorOjEwQzFFMDAwMUE1MDAwMDA0MzkwMjAxNjFBNkMwMDAwNzAwMDAwMDNFMworOjEwQzFGMDAwNDhDOTAxMDAwMDAwMjI1MEYxQjEwMTAwMDAwMDAwMDMxNQorOjEwQzIwMDAwRjBCMTAxMDAwMDAwMDAwMEUwQjEwMTAwMDAwMDAwNDJCOAorOjEwQzIxMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNDA5MEE4NDZDOQorOjEwQzIyMDAwMUYxMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMDBFMAorOjEwQzIzMDAwMTBCMDAxMDAwMDAwMDAxNTEwQzAwMTAwMDAwMDAwMEE0RAorOjEwQzI0MDAwMkFCMDAxMDAwMDAwMDAwQTJDRDAwMTAwQUMwMDJGNDBGMQorOjEwQzI1MDAwMjNCMDAxMDA0QTkwODQ0NTFGMTAwMDAwNEI5MDAwMEE1MworOjEwQzI2MDAwRTBDMTAwMDAwMDAwMDAwQTAyQjAwMTAwNEI5NDAwNDA1MQorOjEwQzI3MDAwMzVCMDAwMDAwMDgwMDAxOTQyQzkwMTAwNTM5MDIyNDBFRgorOjEwQzI4MDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTBCOAorOjEwQzI5MDAwNjJERDAxMDA0RjkwQTg0MDgxMzIwMDAwQUY4MjAwODgyQgorOjEwQzJBMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwNjM5MEEyMDIyQworOjEwQzJCMDAwMUE1MDAwMDA2NDkwMjI0MDJENkMwMDAwMDA4MDAwMTA5NQorOjEwQzJDMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM2QQorOjEwQzJEMDAwRjBCMTAxMDBGRjA3MDAwOEUwOEQwMTAwMDAwMDAwNDJGRQorOjEwQzJFMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNUE5MEE4NDA0NQorOjEwQzJGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUwMQorOjEwQzMwMDAwNDhCMTAxMDAyRjAwMjA0N0U3QjUwMTAwMEM4MDAwMDM3MQorOjEwQzMxMDAwNDJDOTAxMDAxMDAwMDBGMDEwQzgwMTAwRjAwNzAwNDAwMQorOjEwQzMyMDAwMUI5ODAxMDA2NDkwMDA1QzExODAwMDAwMDAwMDAwMDI3NgorOjEwQzMzMDAwMTBDMDAxMDBDNjkyMDA0MDFGMDAwMTAwMDAwMDAwMDU2RgorOjEwQzM0MDAwNDhCMTAxMDA2ODkwMjMwRDJDNkMwMDAwMDAwMDAwNDBGMworOjEwQzM1MDAwMUY5MDAxMDA3MTkwMjI0NjFGN0MwMDAwMDAwMDAwNDZFMworOjEwQzM2MDAwMUY4MDAxMDA3MDgwMDAwMzQyQzkwMTAwNzE5MDIyNDBDQgorOjEwQzM3MDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTBDOAorOjEwQzM4MDAwNjJERDAxMDA2RDkwQTg0MDgxMzIwMDAwQUY4MjAwODgxQworOjEwQzM5MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDgwMDJENDA1RAorOjEwQzNBMDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDBGNAorOjEwQzNCMDAwMDVCMDAxMDBDRTkzMDA0MTg3MzAwMTAwMDAwMDAwNDUyOAorOjEwQzNDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNzY5MEE4NDBEQworOjEwQzNEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyMAorOjEwQzNFMDAwNDhCMTAxMDA3QzkwMjIwOTgwMzAwMDAwMEI5NTAwNDA4QworOjEwQzNGMDAwMTMzMDAxMDA4MDkwMjI0NDE5N0MwMDAwMEI5NTAwNEZGRgorOjEwQzQwMDAwODEzMDAxMDA4MDkwQTI0NzFGN0MwMDAwMDAwMDAwNDRBMgorOjEwQzQxMDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwOTU5MDIyNEE1NgorOjEwQzQyMDAwMUY3QzAwMDA4NjkwQTIxNjAyMzAwMDAwQjA5MjAwNDBFRgorOjEwQzQzMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwRDU4QTAwNDA4MQorOjEwQzQ0MDAwODFCMjAwMDAyRDAwMkQwODJBQjAwMTAwOTE5MDIyNDJGNworOjEwQzQ1MDAwMTk3QzAwMDA4QTkwQTJGMzg0MzAwMDAwMDAwMDAwQTUzRgorOjEwQzQ2MDAwODVCMDAxMDAwMDAwMDA0MTg1RDAwMTAwRDQwMDNFNDFBQworOjEwQzQ3MDAwODVFMDAxMDA4RTkwMjI0MDFGN0MwMDAwMDAwMDAwNUFFMQorOjEwQzQ4MDAwMTE5MDAxMDAwQjAwMDAwOEU0RjUwMTAwREQ5MzAwNDA2RAorOjEwQzQ5MDAwODEzMjAxMDA5MjkwMDA0MDgxQjIwMDAwQUQ5MzAwNDBEMworOjEwQzRBMDAwODEzMjAxMDAzMDAwMkUwMDJBRDAwMTAwMzIwMDJBMTUwRQorOjEwQzRCMDAwRTRCMTAxMDBENThBMDAxNkU0QjEwMDAwOTg5MEEyMTZGQworOjEwQzRDMDAwMDIzMDAwMDBCMDkyMDA0MDgxMzIwMTAwRTc5MDAwNDA0RAorOjEwQzREMDAwODFCMjAwMDAyRDAwMkQwODJBQjAwMTAwQTY5MDIyNDc0RAorOjEwQzRFMDAwMUY3QzAwMDBBMjkwMjI0MjE5N0MwMDAwOUQ5MEEyRjNDNAorOjEwQzRGMDAwODQzMDAwMDAwMDAwMDBBNTg1QjAwMTAwMDAwMDAwNDE2QworOjEwQzUwMDAwODVEMDAxMDBENDAwM0U0MTg1RTAwMTAwQTE5MDIyNDA4OQorOjEwQzUxMDAwMUY3QzAwMDAwMDAwMDA1QTExOTAwMTAwMEIwMDAwMDg3MQorOjEwQzUyMDAwRTRGNTAxMDA1ODAxMkQwMDJBRDAwMTAwNjAwMTJERjAzMgorOjEwQzUzMDAwMTBCMDAxMDAwMDAwMDBGMDJDQjAwMTAwMzU4RTAwNDA2QQorOjEwQzU0MDAwODFCMjAwMDA5NDk1MDA0MTk1MzAwMTAwQUU5MEEyMDhBMAorOjEwQzU1MDAwODAzMjAwMDBBRTkwQTIxNjgwMzIwMDAwMDAwMDAwNDE0MAorOjEwQzU2MDAwOTdCMDAxMDBBQzkwMjMwRDAyNkMwMDAwMDAwMDAwNDE2OAorOjEwQzU3MDAwOTdDMDAxMDA1RjkzMDA0QjAyQjAwMDAwRTc5MDAwMDVGOAorOjEwQzU4MDAwNDhCMTAwMDBBQzAwMkYwMTE0QjAwMTAwQjAwMDJCMDEzNQorOjEwQzU5MDAwRTBDMTAxMDAwMDJCMDBBNjE2QjAwMTAwMDAwMDAwMDE2MAorOjEwQzVBMDAwRTBEMTAxMDBCRTkwMjMwRDAyNkMwMDAwMDA4MDAwMTA1RAorOjEwQzVCMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM3NworOjEwQzVDMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTA2NAorOjEwQzVEMDAwNjJCMTAxMDBCNzkwQTgwMEUwMzEwMDAwQUY4MjAwODg4RQorOjEwQzVFMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMEM4MDAwMDNGMQorOjEwQzVGMDAwNDJDOTAxMDAxMDAwMDBGMDIyQzgwMTAwMDAwMDAwNUNFOAorOjEwQzYwMDAwMjM4MDAxMDAwMDAwMDAwMTg0QjAwMTAwQzE5MDIzMERDRgorOjEwQzYxMDAwMDI2QzAwMDAwMDAwMDAwRDAyQjAwMTAwMDAwMDAwMDhFNAorOjEwQzYyMDAwODBCMDAxMDBDNjkwMjI0MDFCNkMwMDAwRTM5NDAwMDEyMgorOjEwQzYzMDAwODQ1MDAxMDBDRTkwMjI0MDg1NkMwMDAwMDAwMDAwMDE3MworOjEwQzY0MDAwODBDMDAxMDAxMDgwMDAxMDQ2QzkwMTAwMDAwMDAwNEZBQQorOjEwQzY1MDAwNDM4MTAxMDAwMDAwMDA0MkYwQjEwMTAwMjAwMDAwNDBEMQorOjEwQzY2MDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMDAwMDAwNDMxNQorOjEwQzY3MDAwNjFCMTAxMDBBMDAwMDBBMTYyREQwMTAwQ0M5MEE4MTExMQorOjEwQzY4MDAwRTAzMTAwMDBERDkwMDA1RTE3OTAwMDAwRDE5MDIzMEQ5NgorOjEwQzY5MDAwMDI2QzAwMDAwMDAwMDAwRDAyQjAwMTAwMDAwMDAwMDE2QgorOjEwQzZBMDAwODREMDAxMDBENjkwMjI0MDFCNkMwMDAwMDQ5NTAwNDMwQQorOjEwQzZCMDAwNjEzMTAxMDBERDkwMjI0MDg1NkMwMDAwMDAwMDAwMDEyNgorOjEwQzZDMDAwMTJDMDAxMDAxMDgwMDAxMDQ2QzkwMTAwMDAwMDAwNEY5OAorOjEwQzZEMDAwNDM4MTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwMDlBOAorOjEwQzZFMDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwQTAwMDAwQTFBRAorOjEwQzZGMDAwNjJERDAxMDBEQjkwQTgxMUUwMzEwMDAwMDAwMDAwNDM4MgorOjEwQzcwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwREU5MEE4MEE2NgorOjEwQzcxMDAwMDIzMDAwMDBBRjgyMDA4ODFDQjAwMDAwQjA5MjAwMDUxQgorOjEwQzcyMDAwNDgzMTAxMDBFNTkwMjMwRDAyNkMwMDAwRkYwNzAwMTE2NQorOjEwQzczMDAwMDA4QzAxMDBCMDkyMDA0MDgxMzIwMTAwRUI5NDAwMDdCMAorOjEwQzc0MDAwMTYxNDAxMDA4Qzk0MDA1RTA1MTAwMTAwMkYwMDIwNDA5QgorOjEwQzc1MDAwRTdCMTAxMDBEQThBMDA0MDgxQjIwMDAwMDA4MDAwMDNFNgorOjEwQzc2MDAwNDJDOTAxMDAwMDAwMDBGODgyQjAwMTAwMDAwMDAwRjg5QQorOjEwQzc3MDAwOENCMDAxMDAwMDAwMDBGMDhFQjAwMTAwOTc5MzAwNDBFMworOjEwQzc4MDAwMTMzMDAxMDAwMDAwMDA0MDg1QjAwMTAwQ0U5MzAwNDE0RAorOjEwQzc5MDAwODczMDAxMDA1MzkzMDA0MDgxMzIwMTAwMDA4MDAwMTA3NworOjEwQzdBMDAwNDJDOTAxMDBGODkwMjI0MEUzNkQwMDAwMDAwMDAwNDVGRQorOjEwQzdCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjQ5MEE4NDA2QQorOjEwQzdDMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyQworOjEwQzdEMDAwNDhCMTAxMDBGQTkwMjIwOTgwMzAwMDAwMEI5NTAwNDAxQQorOjEwQzdFMDAwMTMzMDAxMDAwMDAwMDAwQjFCQjAwMTAwMDAwMDAwMTUxOQorOjEwQzdGMDAwMUFEMDAxMDAwMTkxQTI0MTE5N0MwMDAwOTQ5NTAwNDBEQgorOjEwQzgwMDAwOTUzMDAxMDAwMDAwMDAxNjgwQjIwMTAwMEE5MTI3MDg0RgorOjEwQzgxMDAwODAzMjAwMDAyNzkwMDAwMDJBQzAwMDAwOTQ5NTAwNDE1QgorOjEwQzgyMDAwOTUzMDAxMDAwMDAwMDAxNjgwQjIwMTAwMDU5MTI3MDgzNAorOjEwQzgzMDAwODAzMjAwMDBBRTkwMDAwMDJBQzAwMDAwMDAwMDAwNDFERAorOjEwQzg0MDAwOTdCMDAxMDAwODkxMjMwRDAyNkMwMDAwMDAwMDAwNDEyOAorOjEwQzg1MDAwOTdDMDAxMDA1RjkzMDA0QjAyQjAwMDAwMDAwMDAwMDU4QworOjEwQzg2MDAwNDhCMTAxMDBENThBMjI0MjE5N0MwMDAwOUE5NDAwM0EwRQorOjEwQzg3MDAwODEzMDAxMDBENThBMDA0MDgxQjIwMDAwMEU5MTAwNEE0QgorOjEwQzg4MDAwMUY5MDAwMDBEODkyMDAwMDEwMzAwMTAwMDAwMDAwMTUzOQorOjEwQzg5MDAwMTBDMDAxMDAwMDAwMDAxMDMyQjAwMTAwMUU5NTAwMDYxQgorOjEwQzhBMDAwMDQzMDAxMDAxNzkxQTI0NDFGN0MwMDAwMDAwMDAwMEIxRgorOjEwQzhCMDAwMUJCMDAxMDAwMDAwMDAwQTJDRDAwMTAwMDAwMDAwMEE5QgorOjEwQzhDMDAwMDJCMDAxMDBCRDkxMDAwMThDMzAwMTAwMDA4MDAwMTkxMAorOjEwQzhEMDAwNDJDOTAxMDAxRTkxMjI0MEUzNkQwMDAwMDAwMDAwNDNBOAorOjEwQzhFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUE5MUE4NDAxMgorOjEwQzhGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDVGQgorOjEwQzkwMDAwNDhCMTAxMDAwMDAwMDAwMjEwQzAwMTAwMjc5MTIyMDI3RQorOjEwQzkxMDAwMTQ1MDAwMDAwODk0MDA0NTFGMDAwMTAwMTA5MTIyNUM5MworOjEwQzkyMDAwMUY3QzAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBDMgorOjEwQzkzMDAwNjJERDAxMDAyMzkxQTg1QzFGMDAwMDAwQUY4MjAwODgyNworOjEwQzk0MDAwMUNCMDAwMDAxMDkxMDAwNTQ4QjEwMDAwMDgwMDJENDAwNworOjEwQzk1MDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDAzRQorOjEwQzk2MDAwMDVCMDAxMDBDRTkzMDA0MTg3MzAwMTAwMDAwMDAwNDU3MgorOjEwQzk3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMkM5MUE4NDA2RgorOjEwQzk4MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU2QQorOjEwQzk5MDAwNDhCMTAxMDAzMjkxMjIwOTgwMzAwMDAwMEI5NTAwNDAxRgorOjEwQzlBMDAwMTMzMDAxMDAzNTkxMjI0NDE5N0MwMDAwMEI5NTAwNEY5MworOjEwQzlCMDAwODEzMDAxMDAwMDAwMDA0NDE5ODAwMTAwRkYwNzAwMDhEOQorOjEwQzlDMDAwMDA4QzAxMDA0MzkxMjI0QTFGN0MwMDAwM0I5MUEyMTY3QgorOjEwQzlEMDAwMDIzMDAwMDBCMDkyMDA0MDgxMzIwMTAwMkYwMDIwNDA2MAorOjEwQzlFMDAwRTdCMTAxMDBENThBMDA0MDgxQjIwMDAwMkQwMDJEMDg3QQorOjEwQzlGMDAwMkFCMDAxMDAzRjkxMjI0MjE5N0MwMDAwREQ5MzAwNDBFMworOjEwQ0EwMDAwODEzMjAxMDA0MDkxMDA0MDgxQjIwMDAwQUQ5MzAwNDBBRQorOjEwQ0ExMDAwODEzMjAxMDAzMDAwMkUwMDJBRDAwMTAwMzIwMDJBMTU5OAorOjEwQ0EyMDAwRTRCMTAxMDBENThBMDAxNkU0QjEwMDAwMjM5MEEyMTZGQgorOjEwQ0EzMDAwMDIzMDAwMDBCMDkyMDA0MDgxMzIwMTAwMkYwMDIwNDBGRgorOjEwQ0E0MDAwRTdCMTAxMDBEQThBMDA0MDgxQjIwMDAwRDg5MjAwNEFDMgorOjEwQ0E1MDAwMUYxMDAxMDAzODkwMDAxMDMyQjAwMDAwOEEwMDIwNDAwMgorOjEwQ0E2MDAwRTdCMTAxMDA0RDkxQTI0MTE5N0MwMDAwQjA5MjAwNDA1NQorOjEwQ0E3MDAwODEzMjAxMDA1MDkxMDA0MDgxQjIwMDAwNTg5MzAwMTVBRQorOjEwQ0E4MDAwOTQzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMDAwMDAwMDVFRAorOjEwQ0E5MDAwNDhCMTAxMDA1MjkxMjI0MjE5N0MwMDAwOUE5NDAwM0E1OAorOjEwQ0FBMDAwODEzMDAxMDAwQjk1MDA0NTgxMzAwMTAwRDU4QTAwNDA5RQorOjEwQ0FCMDAwODFCMjAwMDBGNDhFMDA0NTFGOTAwMDAwOUE5MzAwNDA2MAorOjEwQ0FDMDAwODEzMjAxMDA1MzkzMDA0MDgxMzIwMTAwMzg5MDAwMDEwRgorOjEwQ0FEMDAwMkNCMDAwMDBBMjkyMDA0MDgxMzIwMTAwNjU5MUEyMDhCMgorOjEwQ0FFMDAwODAzMjAwMDA2NTkxQTIxNjgwMzIwMDAwMDA4MjAwMDJCMAorOjEwQ0FGMDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDExQgorOjEwQ0IwMDAwMDBDMDAxMDA1RTkxMzc1QzYxMzEwMDAwMDAwMDAwMUIzNQorOjEwQ0IxMDAwNjJCMTAxMDA2MjkxMjg0MDgxMzIwMDAwNUY5MTAwNDBDMworOjEwQ0IyMDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwNjI5MUE4NDBFMworOjEwQ0IzMDAwODEzMjAwMDAxQTg3MTc0MDgxQjIwMDAwNTgwMTIwMDg5NgorOjEwQ0I0MDAwRTBCMTAxMDA2MDAxMjAxNkUwQjEwMTAwOUE5MzAwNDdCNgorOjEwQ0I1MDAwMUYxMDAxMDA1MzkzMDA0MDgxMzIwMTAwMzg5MDAwMDEwMgorOjEwQ0I2MDAwMkNCMDAwMDBBMjkyMDA0NzFGMTAwMTAwNzg5MUEyMDg4QgorOjEwQ0I3MDAwODAzMjAwMDA3ODkxQTIxNjgwMzIwMDAwNzQ5MUEyNDJBNworOjEwQ0I4MDAwMTk3QzAwMDAwMDgyMDAwMjA0REMwMTAwQTA5ODAwNDAzMworOjEwQ0I5MDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwNTg5MzAwMTU4NAorOjEwQ0JBMDAwOTQzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMUE4NzAwNDBGMAorOjEwQ0JCMDAwODFCMjAwMDBERDkzMDA0MDgxMzIwMTAwMDAwMDAwNEI5MworOjEwQ0JDMDAwMTk5MDAxMDA5QTk0MDAzQTgxMzAwMTAwMUE4NzAwNDBDMAorOjEwQ0JEMDAwODFCMjAwMDA1ODAxMjAwOEUwQjEwMTAwNjAwMTIwMTY3OAorOjEwQ0JFMDAwRTBCMTAxMDBEODkyMDAxMDMyMzAwMTAwMzg5MDAwNDBDRQorOjEwQ0JGMDAwMTNCMDAwMDBBMjkyMDA0MDgxMzIwMTAwODk5MUEyMDg4NgorOjEwQ0MwMDAwODAzMjAwMDA4OTkxQTIxNjgwMzIwMDAwMDA4MjAwMDI2QQorOjEwQ0MxMDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDFGOQorOjEwQ0MyMDAwMDBDMDAxMDA4MjkxMzc1QzYxMzEwMDAwMDAwMDAwMUJGMAorOjEwQ0MzMDAwNjJCMTAxMDA4NjkxMjg0MDgxMzIwMDAwODM5MTAwNDA1QQorOjEwQ0M0MDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwODY5MUE4NDA5RQorOjEwQ0M1MDAwODEzMjAwMDAxQTg3MTc0MDgxQjIwMDAwMDA4MDAwMDM3MworOjEwQ0M2MDAwNDJDOTAxMDAwMDAwMDBGODgyQjAwMTAwMDAwMDAwRjg5NQorOjEwQ0M3MDAwOENCMDAxMDAwMDAwMDBGMDhFQjAwMTAwOTc5MzAwNDBERQorOjEwQ0M4MDAwMTMzMDAxMDAwMDAwMDA0MDg1QjAwMTAwQ0U5MzAwNDE0OAorOjEwQ0M5MDAwODczMDAxMDA1MzkzMDA0MDgxMzIwMTAwMDA4MDAwMTA3MgorOjEwQ0NBMDAwNDJDOTAxMDA5ODkxMjI0MEUzNkQwMDAwMDAwMDAwNDU1OAorOjEwQ0NCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTQ5MUE4NDBDNAorOjEwQ0NDMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyNworOjEwQ0NEMDAwNDhCMTAxMDAzNThFMjIwOTgwMzAwMDAwMEI5NTAwNDBEQworOjEwQ0NFMDAwMTMzMDAxMDAzNThFMDA0MDgxQjIwMDAwMTQwMDJENDU0NAorOjEwQ0NGMDAwMUY5MDAxMDA3RDhFMDA0NDE5OTAwMDAwQTA5MUEyNDE3OAorOjEwQ0QwMDAwMTk3QzAwMDAwMDAwMDA0QTFGOTAwMTAwRTg4RjAwNDBERAorOjEwQ0QxMDAwODFCMjAwMDA5QTkzMDA0QTFGMTAwMTAwNTM5MzAwNDAxMworOjEwQ0QyMDAwODEzMjAxMDAzODkwMDAwMTJDQjAwMDAwRDg5MjAwNDAwMAorOjEwQ0QzMDAwODEzMjAxMDAzODkwMDAxMDMyQjAwMDAwRjQ4RTAwNDVCRQorOjEwQ0Q0MDAwMUY5MDAwMDAwMDAwMDA0MTM3QzMwMTAwMDAwMDAwNDFCNworOjEwQ0Q1MDAwMzNDMzAxMDAzNjAwMDAwMTAyQ0MwMTAwMDAwMEQyNDBDNAorOjEwQ0Q2MDAwODFCMjAwMDBBQzkxODUxNzgwMzIwMDAwMDAwMDlGNDgxRQorOjEwQ0Q3MDAwMDNEMDAwMDBBRTkxOUMxNzgwMzIwMDAwMDAwMDlGNEM1MQorOjEwQ0Q4MDAwMDNEMDAwMDAwMDAwODAwMTM0QzMwMTAwNDA4MDAwMDM5NAorOjEwQ0Q5MDAwNDRDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDAwMDAwNDA1OQorOjEwQ0RBMDAwRjFCMTAxMDAwMDAwMDAxMkYwQjEwMTAwQjQ5MjAwNDFBNQorOjEwQ0RCMDAwRTEzMTAxMDAwMDgwMDA0MzQ0QzkwMTAwMTAwMDAwNDAzRgorOjEwQ0RDMDAwRjE5OTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwNDlBNQorOjEwQ0REMDAwRjBCMTAxMDA0MDAwMDAwM0UwQzkwMTAwMDAwMDAwNDU3RgorOjEwQ0RFMDAwNjFCMTAxMDAwMDAwMDA0MzYyQjEwMTAwMDAwMEE4NDBGMQorOjEwQ0RGMDAwODFCMjAwMDBCQTkxMDA0MDgxQjIwMDAwQkEwMDIwNDAyOAorOjEwQ0UwMDAwRTVCMTAxMDBCMDAwMkYwMThDRDAwMTAwMDAwMDAwNDYwOAorOjEwQ0UxMDAwRTBDMTAxMDBBQzAwMkY0MDEzQjAwMTAwQ0MwMDJEMDE5NworOjEwQ0UyMDAwRTBDMTAxMDBDNDkxOUMxNzgwMzIwMDAwOUQ5NTAwNDAzNAorOjEwQ0UzMDAwODEzMjAxMDBDNjkxMjI0NzE5N0MwMDAwMDAwMDAwNUY4QQorOjEwQ0U0MDAwMTM5MDAxMDA0NDk1MDA0NzE5MTAwMTAwQzAwMDJENDRDMworOjEwQ0U1MDAwMUY5MDAxMDBDNDAwMkRGMDgyQjAwMTAwNzg5NTAwRjAxMQorOjEwQ0U2MDAwODRCMDAwMDA5MDAwMkQwNTQ4QjEwMTAwREI5MUEyNEI3OQorOjEwQ0U3MDAwMUY3QzAwMDAyRTkyQTI0QzFGN0MwMDAwREI5MTFGMUMyNworOjEwQ0U4MDAwRTA2RDAwMDBERTkxQTIwMTgwMzIwMDAwQTgwMDJENDY3NgorOjEwQ0U5MDAwOEZCMDAxMDBENDkxMUYxQ0UwNkQwMDAwQjQwMDAwNDA3MQorOjEwQ0VBMDAwNDM5OTAxMDBENjkxMjJGMDNBNkMwMDAwMkI5MjFGRjBCQQorOjEwQ0VCMDAwM0E2QzAwMDAwMDAwQTI0MDgwQjIwMDAwMDAwMDgwNEZFOQorOjEwQ0VDMDAwOEZCMDAxMDA4QTAwMDA0MDQzOTkwMTAwMkM5MjIwNDI1QgorOjEwQ0VEMDAwRTc2RDAwMDBEQTkxMjI0MDgwMzIwMDAwMDAwMDgwNTlBNgorOjEwQ0VFMDAwOEZCMDAxMDAwMDAwODA1ODhGQjAwMTAwREQ5MTIyNDAxQQorOjEwQ0VGMDAwODAzMjAwMDAwMDAwODA1QzhGQjAwMTAwMDAwMDgwNUI4OQorOjEwQ0YwMDAwOEZCMDAxMDBBQzAwMDA0MDQzOTkwMTAwQjAwMDJERjA0QgorOjEwQ0YxMDAwODRCMDAxMDBFMjkxQTI0MjI0NkMwMDAwRUI5MTIzRjA2NgorOjEwQ0YyMDAwMDI2QzAwMDBFODkxQTJGMDgwMzIwMDAwMkQ5MkEyNDIzMworOjEwQ0YzMDAwMjQ2QzAwMDAyRDkyQTI0MTAzNkMwMDAwRTc5MUEyNDBGNgorOjEwQ0Y0MDAwODAzMjAwMDAwMDAwODA1MThGQjAwMTAwMDAwMDgwNTI0QworOjEwQ0Y1MDAwOEZCMDAxMDAyRDkyMUYxMjg0NTAwMDAwMkQ5MkEwMDE2RAorOjEwQ0Y2MDAwODQ2QzAwMDBEQjkxMDA0MDgxQjIwMDAwOEIwMDAwNDAyNworOjEwQ0Y3MDAwNDM5OTAxMDAxNjkyQTI0NkU3N0QwMDAwMTQwMDAwNDA4QworOjEwQ0Y4MDAwNDM5OTAxMDAwODkyMjJGMDE0MzAwMDAwRjQ5MTIwMEEyNQorOjEwQ0Y5MDAwMDI2QzAwMDAwNTkyMDMxRTgwMzIwMDAwRjM5MUEyNDA1MworOjEwQ0ZBMDAwODAzMjAwMDAwMDAwODA0NDhGQjAwMTAwMDAwMDgwNDkwMgorOjEwQ0ZCMDAwOEZCMDAxMDBGOTkxMjIwQTAyNkMwMDAwRkM5MUEyNDE5RAorOjEwQ0ZDMDAwMTk3QzAwMDBGODkxQTI0MDgwMzIwMDAwMDAwMDgwNTVEQQorOjEwQ0ZEMDAwOEZCMDAxMDAwMDAwODA1NjhGQjAwMTAwRkI5MUEyNDA4RAorOjEwQ0ZFMDAwODAzMjAwMDAwMDAwODA0MzhGQjAwMTAwMDAwMDgwNDhDNAorOjEwQ0ZGMDAwOEZCMDAxMDAwMDAwMDAwMTgyQjAwMTAwMDAwMDAwMEFCMworOjEwRDAwMDAwODJEMDAxMDAwMjkyMjA5MTgzNkMwMDAwMDE5MkEyNDAyNAorOjEwRDAxMDAwODAzMjAwMDAyNjAwODA0MDhGOTgwMTAwMjcwMDgwNDA2OQorOjEwRDAyMDAwOEY5ODAxMDAwNDkyQTI0MDgwMzIwMDAwMUYwMDgwNDBDRgorOjEwRDAzMDAwOEY5ODAxMDAyMDAwODA0MDhGOTgwMTAwMDc5MkEyNDA0NQorOjEwRDA0MDAwODAzMjAwMDAyMjAwODA0MDhGOTgwMTAwMjMwMDgwNDA0MQorOjEwRDA1MDAwOEY5ODAxMDA4ODAwMkQ0NDhGQjAwMTAwMTE5MkEyNDFFOQorOjEwRDA2MDAwMTk3QzAwMDAwRTkyQTI0MzNEN0MwMDAwMEU5MkEyRjJCOQorOjEwRDA3MDAwMDI2QzAwMDAwMDAwQTI0MDgwQjIwMDAwMDAwMDgwNDk2NQorOjEwRDA4MDAwOEZCMDAxMDAxMDkyQTI0MDgwMzIwMDAwMDAwMDgwNDM2NworOjEwRDA5MDAwOEZCMDAxMDAwMDAwODA0ODhGQjAwMTAwMEU5MkEwOTE3NworOjEwRDBBMDAwMDM2QzAwMDAwQzkyMjI0MzNEN0MwMDAwMTU5MkEyNDBDQworOjEwRDBCMDAwODAzMjAwMDAyODAwODA0MDhGOTgwMTAwMjkwMDgwNDBDNQorOjEwRDBDMDAwOEY5ODAxMDAxNDAwMDA0MDQzOTkwMTAwMUY5MkEyRjBDNAorOjEwRDBEMDAwMTQzMDAwMDA4ODAwMkQ0NDhGQjAwMTAwMUM5MkEyRjI5MQorOjEwRDBFMDAwMDI2QzAwMDAwMDAwQTI0MDgwQjIwMDAwMDAwMDgwNDlGNQorOjEwRDBGMDAwOEZCMDAxMDAwRTkyMjI0MTE5N0MwMDAwMEM5MjIwOTEwOQorOjEwRDEwMDAwMDM2QzAwMDAwRTkyMDA0MDgxQjIwMDAwMjM5MjIwMEFCRQorOjEwRDExMDAwMDI2QzAwMDAyMjkyQTI0MDgwMzIwMDAwMDAwMDgwNDQ5NQorOjEwRDEyMDAwOEZCMDAxMDAwMDAwODA0OThGQjAwMTAwMjg5MjIyMEFEMAorOjEwRDEzMDAwMDI2QzAwMDBGQzkxQTI0MTE5N0MwMDAwMjc5MkEyNDBFMQorOjEwRDE0MDAwODAzMjAwMDAwMDAwODA1NThGQjAwMTAwMDAwMDgwNTY0MgorOjEwRDE1MDAwOEZCMDAxMDAyQTkyQTI0MDgwMzIwMDAwMDAwMDgwNDM3QworOjEwRDE2MDAwOEZCMDAxMDAwMDAwODA0ODhGQjAwMTAwMzA5MjAwNDM3MgorOjEwRDE3MDAwOTVCMDAwMDAzMDkyMDA0MTk1QjAwMDAwMzA5MjAwNDIxRQorOjEwRDE4MDAwOTVCMDAwMDAzMDkyMDA0NDk1QjAwMDAwMzA5MjAwNEMwMQorOjEwRDE5MDAwOTVCMDAwMDBFMDk0MDA0MDgxMzIwMTAwMzM5MkEyNDAzQgorOjEwRDFBMDAwODAzMjAwMDAwMDAwODA0QjhGQjAwMTAwMDAwMDgwNENGNgorOjEwRDFCMDAwOEZCMDAxMDAyRDAwMDA0MDQzOTkwMTAwMkUwMDJGRjM5NQorOjEwRDFDMDAwODRCMDAxMDAzODkyQTJGMzk2MzAwMDAwMDAwMDgwNDA0NQorOjEwRDFEMDAwMDFCMDAxMDAyRDAwMkE0MUU3RDEwMTAwRDQwMDNENDFGQQorOjEwRDFFMDAwODVFMDAxMDAwQjAwMDBGMjAwRTQwMTAwM0U5MjIyNUFBQgorOjEwRDFGMDAwMDE3QzAwMDAwMDAwMDA0MDFGOTAwMTAwM0Y5MjAwNUE5NworOjEwRDIwMDAwMDE4MDAwMDAwMDAwMDA0MDFGODAwMTAwMDAwMDYzNDExOQorOjEwRDIxMDAwODVDMDAxMDAwMDAwQTBBNTg1NkMwMTAwMDAwMEUzNDA2RQorOjEwRDIyMDAwODVCMDAxMDAwQzgwMDAwMzQyQzkwMTAwMTIwMDAwNDBEQgorOjEwRDIzMDAwODc5ODAxMDBERjk1MDBGMDhDQjAwMDAwNEM5MjIyNDBFRQorOjEwRDI0MDAwMEY2QzAwMDAwMDAwMkYwNTQ4QjEwMTAwNDk5MkEyNEI2RAorOjEwRDI1MDAwMTk3QzAwMDA0QTkyMjJGMDE4NkMwMDAwMDAwMDYwNEIxQworOjEwRDI2MDAwMTk5MDAxMDAxNjkzMDAwNzEwMzAwMTAwRjk4MjAwNDA2OAorOjEwRDI3MDAwMDVCMDAwMDA0RTkyMjI1QTFGN0MwMDAwOUI5MjAwNDA5NQorOjEwRDI4MDAwODEzMDAxMDBGOTgyMDA0MDA1QjAwMDAwMDAwMDJGMDU0OAorOjEwRDI5MDAwNDhCMTAxMDAwMDAwNjA0QjE5OTAwMTAwMTY5MzAwMDc4RgorOjEwRDJBMDAwMTAzMDAxMDBGOTgyMDA0MDA1QjAwMDAwMDAwMDJGMDU5OQorOjEwRDJCMDAwNDhCMTAxMDAwMDAwNjA0QjE5OTAwMTAwMTY5MzAwMDc2RgorOjEwRDJDMDAwMTAzMDAxMDAwMDAwODA0MDA1QjAwMTAwNTc5MjMzNDA0QgorOjEwRDJEMDAwODEzMjAwMDA1QTkyQTFBRDk1MjAwMDAwNjg5MjEzNDA1RgorOjEwRDJFMDAwODFCMjAwMDAwMDAwMTM0QTVBODMwMTAwMzAwMDM5NDUyMgorOjEwRDJGMDAwOTVFMDAxMDAxRjAwMDAwRjVFRDgwMTAwMDAwMDAwNUFGOQorOjEwRDMwMDAwNUY5MDAxMDAwMDAwMDA0MDQ1QjAwMTAwMDAwMDAwMDRGMworOjEwRDMxMDAwNDhCMDAxMDAwMDAwMDAwNTRBQjAwMTAwMDAwMDAwMEMwOAorOjEwRDMyMDAwNThCMDAxMDAwMDAwMDAwNzRFQjAwMTAwQTg4NDAwNDA4MgorOjEwRDMzMDAwNUQ5ODAxMDAwMDAwMDA1ODYxQjEwMTAwMDAwMDAwNEE0MgorOjEwRDM0MDAwNjJCMTAxMDAwMDAwQTg0MTk3QjAwMDAwNjU5MjAwNDA2MgorOjEwRDM1MDAwODFCMjAwMDAwMDAwODA0MDk3QjAwMTAwNjk5MjYwMDczMAorOjEwRDM2MDAwOTYzMDAwMDBGRkZGMDA0Qjg0ODkwMTAwMDAwMDcwQzI2RQorOjEwRDM3MDAwMjRCMDAxMDA3MzkyQTI0NTI1N0MwMDAwNkQ5MjMxMjBGQgorOjEwRDM4MDAwODUzMDAwMDA3NDkyMjIxMjQ4N0YwMDAwNTgwNDExMTI2OAorOjEwRDM5MDAwNDgwMzAxMDAxMDAwMDAxMjk2RTQwMTAwMDAwMDAwNEI1OQorOjEwRDNBMDAwMUU5NDAxMDAwMDAwODA1QTFGOTAwMTAwNzM5MjMxNDBDQQorOjEwRDNCMDAwODEzMjAwMDAwMDAwMDBCNDI0QjAwMTAwNzQ5MjIyMTJGNworOjEwRDNDMDAwNDg3RjAwMDA1ODA0MDA0MDgxMzIwMTAwMDAwMDJGMDUxMgorOjEwRDNEMDAwNDhCMTAxMDA4MTkyMEJGMDg0MzAwMDAwMDAwMDExMTI2RQorOjEwRDNFMDAwNDg4MzAxMDA3RTkyMjI1MDg1NzAwMDAwNUUwMTAwNDA1QgorOjEwRDNGMDAwNDM5OTAxMDA0MTk0MDBGMjk2MzAwMTAwOTMwNDAwMTIxOQorOjEwRDQwMDAwOTQzMDAxMDAwMDAwMDA1QTFGOTAwMTAwMTAwMDAwMTIyQgorOjEwRDQxMDAwOTZFNDAxMDAwMDAwODA0QjFFOTQwMTAwMTAwMDAwNDJDMQorOjEwRDQyMDAwMTBGNDAxMDAwMEI3M0Y0MzExRjAwMTAwMDcwMDAwMDhBRAorOjEwRDQzMDAwOEE4ODAxMDA4NDkyMzBBMTBDMzAwMDAwODc5MjIyNDUzNgorOjEwRDQ0MDAwRTY3RDAwMDA3NDkyMTA0MDgxQjIwMDAwMDAwMDJBNDU4MQorOjEwRDQ1MDAwRTY5MTAxMDAwMDAwMTAxMjQ4ODMwMTAwMDAwMDExNDAxNQorOjEwRDQ2MDAwODFCMjAxMDAwMDAwNjA0Qjg1ODAwMTAwNUUwMTAwNDAzOAorOjEwRDQ3MDAwNDM5OTAxMDA0MTk0MDBGMjk2MzAwMTAwMDA4MDAwMTBCMQorOjEwRDQ4MDAwNDRDOTAxMDBEODAwMDA0MDgxOTgwMTAwMkUwMDJEMDVGQworOjEwRDQ5MDAwNDhCMTAxMDA5MjkyMjI0MEU3NkQwMDAwODAwMDAwNDBGOAorOjEwRDRBMDAwODBDODAxMDAwMDAwMDA0MEYwQjEwMTAwMDkwMDAwMDg0MAorOjEwRDRCMDAwODZFNDAxMDAwMDAwNjhBNzg3QzAwMTAwMDAwMDAwNDQ2NgorOjEwRDRDMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwOTY5MkE4MDU1MAorOjEwRDREMDAwRTAzMTAwMDAxMDAwMDAxMjk2RTQwMTAwMDAxNDAwNEIzRgorOjEwRDRFMDAwOTZEQzAxMDAwMDAwODA0QjFFOTQwMTAwMTAwMDAwMEYyQworOjEwRDRGMDAwODRGNDAxMDAxRjAwMDA0Mjg0ODgwMTAwOUY5MjIyNDBCMgorOjEwRDUwMDAwODAzMjAwMDBBMDkyMDA0MjY4QjEwMDAwMDAwMDAwNDI5QQorOjEwRDUxMDAwNkFCMTAxMDBBMDkyMzE1QTFGMDAwMDAwMDAwMDkxNDI0MAorOjEwRDUyMDAwNDg5MzAxMDBBMjkyMzU0MDgxMzIwMDAwNkQwMDAwNDAxNgorOjEwRDUzMDAwNjE5OTAxMDBBODkyMjhCMTJDMzAwMDAwQTM5MjIyNERERAorOjEwRDU0MDAwNzU3RDAwMDAwMDAwMDA0MDJEQjAwMTAwMDAwMDk1NDBGNgorOjEwRDU1MDAwMTFCMDAxMDA2RDAwMDA0MDYxOTkwMTAwQTg5MkE4QjFDRQorOjEwRDU2MDAwMTAzMDAwMDAwMDAwOTU0MDgxQjIwMTAwN0YwMDAwNDBCMworOjEwRDU3MDAwNjE5OTAxMDBBRjkyMjhCMTEwMzAwMDAwQUI5MjlGQkFDMAorOjEwRDU4MDAwODAzMjAwMDAwMDAwODA0MDExQjAwMTAwMDAwMDgwMjRDMworOjEwRDU5MDAwMTE4NDAxMDAwMDAwMDA1RjYxQjEwMTAwMDAxMDAwMDA3MworOjEwRDVBMDAwNjJERDAxMDAwMDAwQTg0MDgxQjIwMDAwQjE5MjAwNDA5RAorOjEwRDVCMDAwODFCMjAwMDBBQzk0MDA0MDQ3OTkwMTAwQjU5MjMyNDAxRQorOjEwRDVDMDAwODEzMjAwMDBCQjkyMjJGODk2MzAwMDAwMDAwMDAwRjg4MworOjEwRDVEMDAwOTBCMDAxMDAwMDAwMDBGMDkyQjAwMTAwMDEwMDAwNEI4QgorOjEwRDVFMDAwRjBDRDAxMDAyMDAwOTI0OEUwQzkwMTAwNkMwMDAwNDAyRAorOjEwRDVGMDAwNjE5OTAxMDBCRjkyMjhCMTkyMzAwMDAwQkI5MjIyNEM4OQorOjEwRDYwMDAwNzU3RDAwMDAwNDAwMTI0MDkxQjAwMDAwNkMwMDAwNDBFNQorOjEwRDYxMDAwNjE5OTAxMDBCRjkyQThCMTkwMzAwMDAwRkYwMDAwNDg1RQorOjEwRDYyMDAwOTY4ODAxMDAwMDAwMDA0QjkwRDAwMTAwMDEwMDAwNEJFMworOjEwRDYzMDAwRjBDRDAxMDAyMDAwMDA0OEYwQzkwMTAwMDAwMDkyNDkyRgorOjEwRDY0MDAwRTBCMTAxMDAwQzAwMkQxMDQ4QjEwMTAwRkYwNzAwMDhGNworOjEwRDY1MDAwODI4QzAxMDBGRjA3MDBGMDAwOEMwMTAwMDAwMEEyNDE1NQorOjEwRDY2MDAwMDBFQzAwMDBDQzkyMjIxQTAwNkMwMDAwQjA5MjAwMDA4NgorOjEwRDY3MDAwMzQzMDAxMDAwMDAwMDA1MDQ5QzEwMTAwQzg5MkEyNDFBRAorOjEwRDY4MDAwMjM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMEMwMDJEMTBFQQorOjEwRDY5MDAwNDhCMTAxMDBGRjA3MDAxNTgyOEMwMTAwRkYwNzAwRjA3MAorOjEwRDZBMDAwMDA4QzAxMDAwMDAwQTI0MTAwRUMwMDAwRDU5MjIyMEQ4OAorOjEwRDZCMDAwMDA2QzAwMDBCMDkyMDAwMDFBMzAwMTAwMDAwMDAwNTAyMQorOjEwRDZDMDAwNDlDMTAxMDBEMTkyQTI0MTIzNTAwMDAwMDAwMDgwNDBENgorOjEwRDZEMDAwODFCMjAxMDBEQTkyODMxRTgwMzIwMDAwMDAwMDAwNDQxMworOjEwRDZFMDAwMTk5MDAxMDAyNDAwMkQwMTJDQjAwMTAwMjgwMDJERjAxQworOjEwRDZGMDAwMTZCMDAxMDAyMjAwMkRGMDI2QjAwMTAwMTQwMDJGRjIxOAorOjEwRDcwMDAwMENCMDAxMDAwMDAwODA0MEUxQjEwMTAwMzAwMDAwNDA5OQorOjEwRDcxMDAwOTc5ODAxMDA2MDk3MkU0MDgxQjIwMTAwMDAwMDAwNDAwMAorOjEwRDcyMDAwRjFCMTAxMDBFMTkyQTI0MTk3NTAwMDAwNjQ5NzNFNDM5RAorOjEwRDczMDAwOURFMDAxMDAwMDAwODA0MEUxQjEwMTAwNjQ5NzNFNDM5QworOjEwRDc0MDAwOURFMDAxMDAwMDAwODAwQkU4QjEwMTAwNjQ5NzNGNDNCOQorOjEwRDc1MDAwOURFMDAxMDAwMDAwMDBGMDE2QzAwMTAwMDAwMDgwNDBDNAorOjEwRDc2MDAwRTFCMTAxMDA2NDk3M0Y0MzlERTAwMTAwMDAwMDAwRjQzNworOjEwRDc3MDAwMTZCMDAxMDAwMDAwODA0MEUxQjEwMTAwNjAxNzNENDM5OAorOjEwRDc4MDAwOURFMDAxMDAxMDAwODBBMTE2RTQwMTAwMDBCNTAwMEQyRAorOjEwRDc5MDAwNDJDOTAxMDBGMDkyMzA0NzE3MDQwMDAwRjM5MkEyMEIzNworOjEwRDdBMDAwRTY3RDAwMDAwMDAwOTA0MjgxQjAwMTAwMDBCNzAwMEQ0RQorOjEwRDdCMDAwNDZDOTAxMDBGNzkyQTIwQkU2N0QwMDAwMDAwMDAwMEJCNQorOjEwRDdDMDAwRTY5MTAxMDAwMDAwOTA0MTgxQjAwMTAwMDAwMDEwNDA4RQorOjEwRDdEMDAwODFCMjAxMDBGODkyNDAwNzk2MzAwMDAwOUQwNDAwNDA5RAorOjEwRDdFMDAwODEzMjAxMDAwMjkzQTI0NTk1N0MwMDAwMDE5NzNGNDFFMAorOjEwRDdGMDAwOTVFMDAxMDAwMDAwMDBGMzk2QjAwMTAwMDAwMDAwNEUyQgorOjEwRDgwMDAwRTZCMTAxMDA0MDk3M0U0MDk3RTAwMTAwMDAwMDAwNEU2NQorOjEwRDgxMDAwRTZCMTAxMDA0MDk3M0U0MDlERTAwMTAwMTU5MzAwM0JCQQorOjEwRDgyMDAwRTdCMTAwMDAwMjkzMzA0MDgxMzIwMDAwMEM5M0EyMEI1QworOjEwRDgzMDAwRTY3RDAwMDAwMEI1MDAwRDQ2QzkwMTAwMDg5M0EyMEI2QgorOjEwRDg0MDAwRTY3RDAwMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDk4NDIxNworOjEwRDg1MDAwODFCMDAxMDAwMEI3MDAwRDQ2QzkwMTAwMDAwMDAwMEJCNworOjEwRDg2MDAwRTY5MTAxMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDk4NDFFMworOjEwRDg3MDAwODFCMDAxMDAwNDAwMjFBMjk1MjAwMDAwMDAwMDEwNEFBMAorOjEwRDg4MDAwNDQ4MzAxMDAwMDk3M0U0MTk1RTAwMTAwMDAwMDAwNEVGNgorOjEwRDg5MDAwRjZCMTAxMDAwMDAwMDA0RUU2QjEwMTAwNDA5NzNFNDBBNQorOjEwRDhBMDAwOURFMDAxMDAwMDAwMDAzQkU3QjEwMTAwMDAwMDAwNEFEQworOjEwRDhCMDAwOTBCMTAxMDBGRkZGMDAwNzkyODkwMTAwMDAwMDk4NDAyRAorOjEwRDhDMDAwODFCMDAxMDAwMzAwMDAwODg2RjQwMTAwMDBCNzAwNDNBNgorOjEwRDhEMDAwNDZDOTAxMDAwNzAwMDAwODgyODgwMTAwMTk5MzQwMDgyQQorOjEwRDhFMDAwOTYzMDAwMDA5RDA0MDA0MDgxMzIwMTAwMjU5MzIyNDVCRQorOjEwRDhGMDAwOTU3QzAwMDAyMTkzMjI1QTFGN0MwMDAwMTAwMDAwMEYyRAorOjEwRDkwMDAwOTZGNDAxMDAxRTkzMzE1Rjk3MDQwMDAwMDAwMDExNEI1NAorOjEwRDkxMDAwNDg5MzAxMDAwMDAwMDA0QjZBQjEwMTAwMjE5MzMwNDBBMAorOjEwRDkyMDAwODEzMjAwMDAwMDAwMDA0MUU2ODEwMTAwMDAwMDEwNDA0QgorOjEwRDkzMDAwODFCMjAxMDAwMDAwOTg0MDgxQjIwMTAwMDA5NzNGNDE5MAorOjEwRDk0MDAwOTVFMDAxMDAwMDAwMDBGMzk2QjAwMTAwNDA5NzNENDBEMworOjEwRDk1MDAwOTdFMDAxMDAwMDAwNjNGMzg4QjAwMTAwMkQ5M0EyM0IyMworOjEwRDk2MDAwODk2QzAwMDAwMDAwMDA0QTkwQjEwMTAwMDEwMDAwQTY4RgorOjEwRDk3MDAwOTJCMTAxMDAyRTkzMTg0QTQ0OTMwMDAwMDAwMDE4NDAxMQorOjEwRDk4MDAwODFCMjAxMDAzMDAwMzk0NTk3RTAwMTAwMzM5MzIyNUFGQgorOjEwRDk5MDAwMUY3QzAwMDAxRjA0MDAwRjk4RDgwMTAwMDAwMDAwNENGRAorOjEwRDlBMDAwNUU5NDAxMDAzNTkzMDAwNTRBQjAwMDAwMUYwNDAwQTdGMworOjEwRDlCMDAwNUU4NDAxMDAwMDAwMDA0MDRCQjAwMTAwMDAwMDAwNThGMAorOjEwRDlDMDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwMDAwMEE4NDBGRAorOjEwRDlEMDAwODFCMjAwMDAzNjkzMDA0MDgxQjIwMDAwMzk5MzQwMDdDNQorOjEwRDlFMDAwOTYzMDAwMDA5RDA0MDA0MDgxMzIwMTAwM0Q5MzIyNDVBNQorOjEwRDlGMDAwOTU3QzAwMDAwMDAwOTg0MDgxQjIwMTAwOUIwNDAwNEEyMQorOjEwREEwMDAwNDQxMzAxMDAwMDk3M0Y0MTk1RTAwMTAwMDAwMDAwRjMzRQorOjEwREExMDAwOTZCMDAxMDA0MDk3M0Q0MDk3RTAwMTAwMDAwMDYzRjM5RAorOjEwREEyMDAwODhCMDAxMDAzMDAwMzg0NTk3RTAwMTAwMDAwMDAwNUYzOQorOjEwREEzMDAwMEY5MDAxMDAwMDAwMDA1ODYxQjEwMTAwMDAwMDAwNEI5MAorOjEwREE0MDAwNjJCMTAxMDA0NTkzQTg0MDgxMzIwMDAwM0U5M0EyM0JBMQorOjEwREE1MDAwODk2QzAwMDAzMDAwMzg0NTlERTAwMTAwMDAwMDk4NDBDRQorOjEwREE2MDAwODFCMjAxMDA5MzA0MDAxMjk0MzAwMTAwMTY5MzAwNUExMQorOjEwREE3MDAwMUYwMDAxMDAwMDAwODA1QTFGOTAwMTAwMTEwMDAwNEFBMQorOjEwREE4MDAwRTZDOTAxMDAzNDAwMkY0Rjk1ODQwMTAwMDAwMDAwRjMyNworOjEwREE5MDAwOTZCMDAxMDAwMTAwNjM0Qjg0QzgwMTAwMDAwMEEwNDM2MAorOjEwREFBMDAwODU2QzAxMDAwMDAwRTM0MDg1QjAwMTAwMzAwMDJENDQ4QQorOjEwREFCMDAwMUY5MDAxMDAzMjAwMkRGMjJBQjAwMTAwMDQwMDIyRjI3MgorOjEwREFDMDAwMDIzMDAwMDAzNDkyMDAxMDMyMzAwMTAwMzIwMEEwNDBEOQorOjEwREFEMDAwRTVCMTAxMDAwMDAwMDA0MDk3QjAwMTAwRjAwNzAwNDBGMAorOjEwREFFMDAwOTk5ODAxMDAwMDAwMDA0QTAyQzAwMTAwMDAwMDAwNTBBNworOjEwREFGMDAwMDNEMDAxMDAwMDAwMDA0MTk3QzAwMTAwMDAwMEEzNENDQQorOjEwREIwMDAwMDJEMDAwMDA1QzkzMDA0MDgxQjIwMDAwMDAwMDAwQTgzOQorOjEwREIxMDAwMzZCMDAxMDA2QzkzMjI0MTAzNTAwMDAwMDA4MDAwMTBEOQorOjEwREIyMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwNzAwMDAwMDM4MQorOjEwREIzMDAwRjBDOTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTBDNgorOjEwREI0MDAwNjJCMTAxMDA2NTkzQTgwMEUwMzEwMDAwQUY4MjAwODg1NworOjEwREI1MDAwMUNCMDAwMDBCMDkyMDA0MDgxMzIwMTAwN0M4MDAwMDNDNAorOjEwREI2MDAwNDJDOTAxMDAwMDAwMDBGMDAwQjAwMTAwNjA5MzAwNUNCOQorOjEwREI3MDAwMDE4MDAwMDBCMDkyMDA0MDgxMzIwMTAwMDAwMDAwMUJEMworOjEwREI4MDAwMTBCMTAwMDA2ODAxMkQwNjgyQjAwMTAwMDAwMDAwRjIxMworOjEwREI5MDAwODJDMDAxMDAwMDgwMDAwMzQ2QzkwMTAwQUI5MjAwNDAzMgorOjEwREJBMDAwODEzMjAxMDA5MzkzMjI0MDExNkMwMDAwMDAwMDY4MDg0QworOjEwREJCMDAwMzg5NjAxMDBGMDA3MDA0MTgyQ0MwMTAwNzE5M0FBNDEyMAorOjEwREJDMDAwM0I0MDAwMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwNUNDNQorOjEwREJEMDAwMTE4MDAxMDAwMTAwMDAxRDA0Q0MwMTAwOTI5MzI2NDYzMworOjEwREJFMDAwMjMzMDAwMDAwODAwMDAwMzEyQzgwMTAwNjQwMTIwRjA4NworOjEwREJGMDAwRTBCMTAxMDA5MTkzMjI0MTA1NTAwMDAwMjAwMDAwMDM5NAorOjEwREMwMDAwNDhDOTAxMDAwQzAwMDBGODg2QzgwMTAwMDAwMDIyNDQ0OQorOjEwREMxMDAwRjFCMTAxMDAwMDAwMDA0M0YwQjEwMTAwMDAwMDAwMDk3MworOjEwREMyMDAwRTBCMTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTRDNworOjEwREMzMDAwNjJERDAxMDA4MzkzQTg0NjFGMTAwMDAwOTA5MzIyNDFFQgorOjEwREM0MDAwMDU1MDAwMDA4RTkzQTI0MTIzNTAwMDAwMDAwMDAwQTE2NworOjEwREM1MDAwMUFCMDAxMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA1MgorOjEwREM2MDAwNjJERDAxMDA4OTkzQTg0NjIzMzAwMDAwQUY4MjAwODg1RQorOjEwREM3MDAwMUNCMDAwMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwMERBNgorOjEwREM4MDAwNDJCMTAxMDAwMDAwMDA0NDEzQzAwMTAwN0U5MzAwNTAyNworOjEwREM5MDAwNDlDMTAwMDAwMDAwMDAwNTQ4QjEwMTAwMDQ4MDAwMDNGNAorOjEwRENBMDAwMUFDODAxMDAwMDAwODA0MDgxQjIwMTAwOTI5MzIyNDAxNgorOjEwRENCMDAwM0I2QzAwMDAwMDAwMDBGODAwQjAwMTAwQjA5MjAwNUM3NgorOjEwRENDMDAwMDEwMDAxMDA5MzkzMDA0MTNCRDAwMDAwMDAwMDhENDcwQworOjEwRENEMDAwODAzMjAxMDBCMDAwMkY1RjEzQjAwMTAwMDAwMEUwRjBCRgorOjEwRENFMDAwOENDMDAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg2MAorOjEwRENGMDAwOTRCMDAxMDAwMDAwMDBGODhDQjAwMTAwOUY5MzhDRjhGNAorOjEwREQwMDAwOEUzMDAwMDAwMDAwMDA0NDE5OTAwMTAwMDQwMDIyRjg0OQorOjEwREQxMDAwMTQzMDAwMDAwMDAwMDBGODE2QjAwMTAwMDAwMDAwRjgwOAorOjEwREQyMDAwMjZCMDAxMDAwODAwMkVGODBDQjAwMTAwMEMwMDJBNEFCMQorOjEwREQzMDAwRTBCMTAxMDAyODAwMDAwMEUwQzkwMTAwMTAwMDIwMUIzNAorOjEwREQ0MDAwRTBCMTAxMDBBQzkzMjAwQTBDNkMwMDAwMDAwMDAwRjg2OAorOjEwREQ1MDAwOTRCMDAxMDAwMDAwMDBGODk2QjAwMTAwMjAwMDIwRjAwRgorOjEwREQ2MDAwRTRCMTAxMDAxODAwMjA0QUUwQjEwMTAwMUMwMDIwNEI4MgorOjEwREQ3MDAwRTBCMTAxMDA5NzkzMDA0MDEzQjAwMDAwMkMwMDJENDI0OQorOjEwREQ4MDAwMTk5MDAxMDAyRTAwMkZGMzgyQjAwMTAwMDAwMDAwRjM3MworOjEwREQ5MDAwOTZCMDAxMDBCMjkzQTJBNTk3NkMwMDAwMDAwMDgwNDFFQworOjEwRERBMDAwOTVCMDAxMDBCNTkzQTI0MDk3NkMwMDAwMDAwMDAwNDBDMAorOjEwRERCMDAwODNCMDAxMDAyRDAwMjA0MEU3QjEwMTAwMDAwMDYzNDE2NQorOjEwRERDMDAwOTdDMDAxMDBENDAwM0U0MTgzRTAwMTAwMDAwMDAwNDEwMworOjEwREREMDAwODNDMDAxMDBCQTkzQTBBNTgzNkMwMDAwMDAwMDAwNDAzRQorOjEwRERFMDAwODNCMDAxMDAyQzAwMjA0MUU2QjEwMTAwQkY5MzIyNDAyNgorOjEwRERGMDAwMUY3QzAwMDAwMDA0MDAwMDk4REMwMTAwMEIwMDAwNENCOAorOjEwREUwMDAwRTRGNTAxMDAwMDAwODA0MDFGODAwMTAwMEIwMDgwMDA0RAorOjEwREUxMDAwRTRGNTAxMDBCNDkyMDA0MDgxMzIwMTAwMDQ4MDAwMDM2NworOjEwREUyMDAwNDRDOTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDBDMQorOjEwREUzMDAwRjFCMTAxMDAwMDAwNjA0MTg3QjAwMTAwMDA4MDAwMTBENgorOjEwREU0MDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwNDg4OQorOjEwREU1MDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwMDAwMDAwMDMzMgorOjEwREU2MDAwRTBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA5OAorOjEwREU3MDAwNjJERDAxMDAwMDAwQTg1RDA1OTAwMDAwQ0I5MzAwNDAyQQorOjEwREU4MDAwODFCMjAwMDBCNDkyMDA0MDgxMzIwMTAwMDA4MDAwMDNBMgorOjEwREU5MDAwNDRDOTAxMDAwMDAwMDA0MUYwQjEwMTAwMDAwMDAwNDI0RgorOjEwREVBMDAwRjBCMTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDNBQQorOjEwREVCMDAwRjBCMTAxMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTBEMgorOjEwREVDMDAwRjFCMTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwNDk3QworOjEwREVEMDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDVDNgorOjEwREVFMDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4NURBQQorOjEwREVGMDAwMDU5MDAwMDBEQTkzMDA0MDgxQjIwMDAwMkQwMDAwNDA0MAorOjEwREYwMDAwNDM5OTAxMDAyRTAwMkZGMzg0QjAwMTAwMDEwMDYzRjM1OAorOjEwREYxMDAwOTZDODAxMDBFMjkzOUY0MTg1NTAwMDAwMDEwMDAwQTVEMgorOjEwREYyMDAwODVDQzAxMDAyRDAwQTA0MkU2QjEwMTAwNUUwMTJEMDA2QworOjEwREYzMDAwODBCMDAxMDBFNzkzNTI0MzgxNjAwMDAwMDIwMDAwRjJDQworOjEwREY0MDAwODJGNDAxMDBFODkzMDA0MTgwOTQwMDAwMDAwMDAwNUYyQgorOjEwREY1MDAwODE5MDAxMDAwMDAwMDA1RTYxQjEwMTAwMDAwMDAwNDBGRQorOjEwREY2MDAwNjJCMTAxMDAwMDAwQTg0MDk1QjAwMDAwRTk5MzlFQkI5QgorOjEwREY3MDAwODAzMjAwMDBFRTkzQTI0MDFGN0MwMDAwQjA5MjAwNDA2RgorOjEwREY4MDAwODFCMjAwMDAwMDAwODA0MTk1QjAwMTAwMDQwMDAwMTUzRQorOjEwREY5MDAwNDJDOTAxMDAwMDAwMDA1NDJCQzAwMTAwMDAwMDAwRkMzOQorOjEwREZBMDAwMjRCMDAxMDAwMDAwMDBGQzM4QjAwMTAwMDAwMDAwRkVCOQorOjEwREZCMDAwM0NCMDAxMDAwMDAwMDBGRTNBQjAwMTAwMDM5NDlDMTc0MQorOjEwREZDMDAwODAzMjAwMDBGODkzQTI0QTE5N0MwMDAwMDAwMDgwNENDNworOjEwREZEMDAwMUY5MDAxMDAwQzAwMDAxRTk4RjQwMTAwRjc5M0EyNDg2NgorOjEwREZFMDAwOTk2QzAwMDAwMDAwMDAxNTQyQjEwMTAwRjc5M0EyOEE2RAorOjEwREZGMDAwRjE2RDAwMDAwQzAwMDAwMTAyQ0MwMTAwMDAwMDAwRkNFQgorOjEwRTAwMDAwM0VCMDAxMDAwMTAwMDBGNDI4Q0MwMTAwQ0MwMDJEMDUzOQorOjEwRTAxMDAwNDhCMTAxMDAwMjk0MjBGMDNFNkMwMDAwMDAwMDAwNEI2QgorOjEwRTAyMDAwMUY5MDAxMDAwMDAwMDA0QzJCQzAwMTAwQkYwMDJEMDUxNworOjEwRTAzMDAwNDhCMTAxMDAwMDAwODBGMzNBRTAwMTAwMDAwMDJFNEJERgorOjEwRTA0MDAwMTk5MDAxMDAwNzAwMkEwQ0U0QjEwMTAwMDAwMDgwMDRDRgorOjEwRTA1MDAwRTZCMTAxMDAxODAwMDA0MDQzOTkwMTAwMUMwMDJERjBCQQorOjEwRTA2MDAwMTZCMDAxMDAyMDAwMkRGMDI2QjAwMTAwMEMwMDJGRjJBOAorOjEwRTA3MDAwMENCMDAxMDAwMDAwQTIwNjE0RUMwMDAwMEY5NDIyNDUzMQorOjEwRTA4MDAwMUY3QzAwMDAwMDAwQTMwNjJBRUMwMDAwMDAwMDAwRjgzRQorOjEwRTA5MDAwOTRCMDAxMDAwMDAwMDBGMDk2QjAwMTAwMEMwMDJENDA4QgorOjEwRTBBMDAwODFCMjAxMDAwMDAwMkE0Q0UxQzEwMTAwMzAwMDAwMTBFMworOjEwRTBCMDAwNDhDOTAxMDAwQTAwMDA0MEYxOTkwMTAwMTgwMDAwMDU1QworOjEwRTBDMDAwRjBDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDAwMDAwNEI1RgorOjEwRTBEMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQxMAorOjEwRTBFMDAwNjJERDAxMDAxOTk0QTg1QzFGMTAwMDAwMDAwMDgwMDU4QgorOjEwRTBGMDAwNDhCMTAxMDAwMDAwMkUxMDQ4QjEwMTAwNDAwMDAwMDFBRAorOjEwRTEwMDAwRjBDRDAxMDA0MDAwMDAwM0YwQzkwMTAwNDAwMDAwMDAxNAorOjEwRTExMDAwRTBDOTAxMDAwMDAwMkU1MDQ5QzEwMTAwMDAwMDAwMDZDNgorOjEwRTEyMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMjM5NDYyNDI0QworOjEwRTEzMDAwNjEzMTAwMDAyMDAwMDAxMDYyREQwMTAwMjQ5NEE4NDAzRAorOjEwRTE0MDAwODEzMjAwMDAxMDAwMDAxMDYyQzkwMTAwMjY5NEE4MDA2RQorOjEwRTE1MDAwRTAzMTAwMDAwMDAwRjI0MDgxQjIwMTAwMDAwMDJFMTAwQQorOjEwRTE2MDAwNDhCMTAxMDA0MDAwMDAwMUYwQ0QwMTAwNDAwMDAwMDM3MworOjEwRTE3MDAwRjBDOTAxMDA0MDAwMDAwMEUwQzkwMTAwMDAwMDJFNTA3RAorOjEwRTE4MDAwNDlDMTAxMDAwMDAwMDAwNkYxQjEwMTAwMDAwMDAwMDNEOAorOjEwRTE5MDAwRjBCMTAxMDAzMDk0NjI0MjYxMzEwMDAwMjAwMDAwMTBCMworOjEwRTFBMDAwNjJERDAxMDAzMTk0QTg0MDgxMzIwMDAwQTAwMDAwQTQ4QgorOjEwRTFCMDAwNjJERDAxMDAzMzk0QTgwMEUwMzEwMDAwMDAwMEYyNDA2RAorOjEwRTFDMDAwODFCMjAxMDAzMDgwMDA0QTQ0QzkwMTAwMDAwMDAwMDYwRAorOjEwRTFEMDAwRjFCMTAxMDBDMEE4M0Q0NjBERTAwMTAwRkY3RjAwQTFBNAorOjEwRTFFMDAwRjA4OTAxMDAwMjAwMDAwOTk2RjQwMTAwMDAwMDAwNDZEOQorOjEwRTFGMDAwOTdFMDAxMDAwMDAwNjBBODk3QzAwMTAwM0Q5NDYzNDJEMQorOjEwRTIwMDAwNjEzMTAwMDAzMDAwMDA0QTYyQzkwMTAwM0U5NEE4NDAxQworOjEwRTIxMDAwODEzMjAwMDAwMDAwRjM0MDgxQjIwMTAwMDA5OTNGNDJDQQorOjEwRTIyMDAwOTdGMDAxMDA0Mjk0NjU0MDgxMzIwMDAwNEE5NDIyRjM0NQorOjEwRTIzMDAwNzQwNjAwMDAzRjAwMDBGMzk0ODgwMTAwMDAwMDAwMDcwRQorOjEwRTI0MDAwRTc4NTAxMDAwMDAwNzU1NTYxQjEwMTAwMDAwMDAwNEEzQQorOjEwRTI1MDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwNDc5NDAwNDA3NAorOjEwRTI2MDAwODFCMjAwMDAwMDAwRjU0MDgxQjIwMTAwMDAwMDAwQTg2QQorOjEwRTI3MDAwMzZCMDAxMDA1QTk0ODI0MTIzNDAwMDAwNEY5NEEyNDREQQorOjEwRTI4MDAwMUY3QzAwMDBCRDkxMDAwMThDMzAwMTAwMjA4MDAwMTAzNworOjEwRTI5MDAwNDJDOTAxMDA1NTk0MjI0MEUzNkQwMDAwMDAwMDAwNDM5NAorOjEwRTJBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTI5NEE4NDBGRAorOjEwRTJCMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwNDFFNQorOjEwRTJDMDAwMjNCMDAxMDAwMDAwMDAxMDMyQjAwMTAwNUE5NDIyNDEzNgorOjEwRTJEMDAwMTk3QzAwMDBDNjkyMDA0MzIzMzAwMTAwMDAwMDAwNDE3OQorOjEwRTJFMDAwMjNCMDAxMDA1Qzk0QTMxNTBDNkMwMDAwNUQ5NDAwMDY0MworOjEwRTJGMDAwMDRCMDAwMDAwMDAwMDAxNTA0QjAwMTAwNUY5NDIwMDI4QgorOjEwRTMwMDAwMUE2QzAwMDAwMDAwMDAwRDA0QjAwMTAwMUU5NTAwMDUwRAorOjEwRTMxMDAwNDgzMTAxMDA4OTk0MjIwMjE0NTAwMDAwNjM5NEEyMDI0MworOjEwRTMyMDAwMkE1MDAwMDA4OTk0QTI0NTFGN0MwMDAwNjU5NDIyMDJCNworOjEwRTMzMDAwMEM1MDAwMDA2RTk0MDAwMjE2QzAwMDAwNkQ5NDIyNUMyOAorOjEwRTM0MDAwMUY3QzAwMDAzMDgwMDAxMDQyQzkwMTAwNkQ5NDIyNDAwMworOjEwRTM1MDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBDMworOjEwRTM2MDAwNjJERDAxMDA2OTk0QTg0MDgxMzIwMDAwQUY4MjAwODgxQworOjEwRTM3MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDg5NDAwNUNEQQorOjEwRTM4MDAwMUYwMDAxMDA4OTk0MjIxNTgwMzIwMDAwMDAwMDAwNTAxNworOjEwRTM5MDAwMzNDMDAxMDA4ODk0QTIwMjFBNTAwMDAwN0E5NDIyNDZFOQorOjEwRTNBMDAwMUY3QzAwMDA3MDgwMDAwMzQyQzkwMTAwMDAwMDAwNDY4RAorOjEwRTNCMDAwMUY4MDAxMDA3QTk0MjI0MEUzNkQwMDAwMDAwMDAwNDJCQgorOjEwRTNDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNzY5NEE4NDBCOAorOjEwRTNEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUwMAorOjEwRTNFMDAwNDhCMTAxMDAwQzgwMDAwMzQyQzkwMTAwMTAwMDAwRjA5OAorOjEwRTNGMDAwMTBDODAxMDAyRjAwMkY1QzExODAwMTAwMDAwMDAwNDdCMQorOjEwRTQwMDAwRTc5MTAxMDBGMDA3MDA0MDFCOTgwMTAwNEM5NDIwMTU5MworOjEwRTQxMDAwMUE2QzAwMDA3MDAwMDAwMzQ4QzkwMTAwMDAwMDIyNTA3RgorOjEwRTQyMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwRkYwNzAwMDg5NgorOjEwRTQzMDAwRTA4RDAxMDAwMDAwMDA0MjYxQjEwMTAwQTAwMDAwQTRENQorOjEwRTQ0MDAwNjJERDAxMDA4NTk0QTg0NjFGMTAwMDAwNEM5NDAwMDU3MQorOjEwRTQ1MDAwNDhCMTAwMDA0Qzk0MDAwMjEwQzAwMDAwOEI5NEEyNDQwQworOjEwRTQ2MDAwMUY3QzAwMDBCRDkxMDAwMThDMzAwMTAwMDAwMDAwMUJFQQorOjEwRTQ3MDAwMTBCMTAwMDAwMDgwMDAxMDQ0QzkwMTAwMEMwMDAwNDBGMQorOjEwRTQ4MDAwRjE5OTAxMDAxMDAwMDAwOEYwQzkwMTAwMDAwMDAwMTYxOQorOjEwRTQ5MDAwRjBCMTAxMDAxMDAwMDAwM0UwQzkwMTAwMDAwMDAwNDVEOAorOjEwRTRBMDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4NUNFNQorOjEwRTRCMDAwMUY5MDAwMDA5Mjk0MDA0MDgxQjIwMDAwMTcwMDAwRDAyRAorOjEwRTRDMDAwQTJDOTAxMDAwMDAwQTI0MDI3RUMwMDAwMDAwMDAwMjBDQgorOjEwRTREMDAwMDBCMDAxMDBCMDkyMDA0MUEzNDEwMTAwOTY5NDAwNDFCOAorOjEwRTRFMDAwMjdEMDAwMDAxMDAwMDAwNzk2RTQwMTAwMDAwMDAwNEI1OAorOjEwRTRGMDAwODA5NDAxMDAwMDAwMDA1NDYxQjEwMTAwMDA4MDAwNDBFMAorOjEwRTUwMDAwNjJERDAxMDAwMDAwQTg0MDgxQjIwMDAwOUQ5NDAwNDAzRgorOjEwRTUxMDAwODFCMjAwMDBFRjk0MDA0MDJCMzAwMTAwQUMwMDJEMDZDQQorOjEwRTUyMDAwMTZDMDAxMDA5MDAwMkRGMDE2QzQwMTAwQTU5NEEwRjBDMworOjEwRTUzMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwMEUwMDAwQTJCOAorOjEwRTU0MDAwNDRDOTAxMDAwMDAwNkNGMDMwQjAwMTAwQUMwMDJENDA2NworOjEwRTU1MDAwODdCMDAxMDAwMDAwNkNGMDI4QjAwMTAwQUU5NDIyNEFBMAorOjEwRTU2MDAwMTk3QzAwMDAwMDMwMDA0Mzg2QzgwMTAwMDAzMDAwMEIxOQorOjEwRTU3MDAwMTZDODAxMDBBRTk0QTQ0MDgxMzIwMDAwMDAwMDAwNDFBMgorOjEwRTU4MDAwMTdDMDAxMDBDRjk0MjIwNjgwMzIwMDAwQkI5NEEyMDY3RgorOjEwRTU5MDAwMTQ2QzAwMDBCODk0MjI0ODE5N0MwMDAwQjM5NEEwNDE4OAorOjEwRTVBMDAwMTc0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDAwNDFCQQorOjEwRTVCMDAwMzFDMDAxMDA5MDAwMjAxOEUwQjEwMTAwOEIwMDJENDgwRgorOjEwRTVDMDAwMTk4MDAxMDA4QjAwMjA0NUU3OTEwMTAwQkI5NDAwNDBCOQorOjEwRTVEMDAwODc5MDAwMDAwODAwMDA0Mzg2OTgwMTAwQkI5NEEwNDg4MworOjEwRTVFMDAwMTc0MDAwMDAwMDAwMDA0MTE3QzAwMTAwQjAwMDAwNDBDQgorOjEwRTVGMDAwNDM5OTAxMDAxMDUwMDA0M0ZDQzkwMTAwMjY5NTAwMzBFQQorOjEwRTYwMDAwODEzMDAxMDAwMDAwMDA0MEU1QjEwMTAwQzY5NDIyNEFCQgorOjEwRTYxMDAwMTk3QzAwMDAwODAwMDBBMjQ0QzkwMTAwQ0MwMDJEQUIwOQorOjEwRTYyMDAwRjlCMTAxMDAwMDAwMDBBQjE3QzAwMTAwQzU5NEEwRjBEMworOjEwRTYzMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwQ0E5NDY0RjBCNQorOjEwRTY0MDAwODJCMDAwMDBBNDAwMDA0MDQ3OTkwMTAwQ0E5NEEyRjJFMQorOjEwRTY1MDAwODAzMjAwMDAwMDAwMDA0MUU1QjEwMTAwOEMwMDIwMTg2QworOjEwRTY2MDAwRTBCMTAxMDA5MDAwMDA0MDQ1OTkwMTAwMDAwMDYwMDYwMworOjEwRTY3MDAwMzBDMDAxMDAwMDAwODYwQzgwQjIwMDAwQkMwMDJENDZCNgorOjEwRTY4MDAwMTk5MDAxMDBBMDAwQTBGMkU0QjEwMTAwQjAwMDAwNDAyOAorOjEwRTY5MDAwNDM5OTAxMDAxMDUwMDA0M0ZDQzkwMTAwMjY5NTAwMzA0OQorOjEwRTZBMDAwODEzMDAxMDAwMDAwQTI0QTE5RkMwMDAwMDgwMDAwQTIwRAorOjEwRTZCMDAwNDRDOTAxMDBDQzAwMkRBQkY5QjEwMTAwMDAwMDAwQUI1MgorOjEwRTZDMDAwMTdDMDAxMDBEODk0QTBGMDE2NDQwMDAwMDAwMDAwNDFEQgorOjEwRTZEMDAwMTdDMDAxMDAwMDAwRTRGMDgyQjAwMTAwMDA4MDAwMTBDQgorOjEwRTZFMDAwNDRDOTAxMDAwMDAwMDA0MUYwQjEwMTAwMDAwMDAwMDMzNgorOjEwRTZGMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTBDNgorOjEwRTcwMDAwNjJCMTAxMDAwMDAwQTgxQkUwQjEwMDAwREQ5NDAwNDBGMAorOjEwRTcxMDAwODFCMjAwMDAwMEYwMDAwQzdFODkwMTAwMDAwMEE2NENEMAorOjEwRTcyMDAwOTU2MDAxMDAwMDAwODA0QTE4OTQwMTAwMDA4MDAwMTBFQworOjEwRTczMDAwNDRDOTAxMDAwNDAwMjIwMUYwMzEwMDAwMjAwMDAwNDAyMworOjEwRTc0MDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMDAwMDAwNDMxNAorOjEwRTc1MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4MTU3OQorOjEwRTc2MDAwRTBCMTAwMDBFODk0MDA0MDgxQjIwMDAwMTA4MDAwMDM5NgorOjEwRTc3MDAwNDRDOTAxMDAwMDAwMDAwNkYwQjEwMTAwMDAwMDAwMDFFMgorOjEwRTc4MDAwRjBCMTAxMDAwMDAwRTg1RjE3OTAwMTAwNzAwMDAwNDA0OAorOjEwRTc5MDAwNDM5OTAxMDA3QTAxMkVGRTkyQjAwMTAwOEIwMDJERjYwNAorOjEwRTdBMDAwMTZCMDAxMDBGNTk0MjI0M0U3N0QwMDAwMDAwMDAwNDQwQworOjEwRTdCMDAwNDVDMTAxMDAwNDAwMDBBNjJBQjAwMTAwMjgwMDZFMDYzMQorOjEwRTdDMDAwODJDODAxMDBGOTk0MjI0QTE5N0MwMDAwMDAwMDAwNDIyRQorOjEwRTdEMDAwNDVEMTAxMDAwMDAwNkU0QzgzQzAwMTAwMDAwMDAwNDFFMworOjEwRTdFMDAwOTJDMDAxMDBGQTk0NDMzMDNEMDcwMDAwMDAwMDY2OUU4RAorOjEwRTdGMDAwODNCMDAxMDAwMDAwMUI0MTNEQzMwMTAwMDAwMDAwNDE0NworOjEwRTgwMDAwOTJDMDAxMDAwNjAwMDBBMjQ0QzkwMTAwMTAwMDAwNDlBNgorOjEwRTgxMDAwOThGNDAxMDAwMzk1MjYzMDkzMDQwMDAwMDM5NTkwNEM3MgorOjEwRTgyMDAwOTI0MDAwMDAwMDAwMDA0MTkzQzAwMTAwRkZGRjgwNDlCQQorOjEwRTgzMDAwRUNBOTAxMDAwMDgwMDAxMDQ0QzkwMTAwMDQwMDIyMDE3RAorOjEwRTg0MDAwRjAzMTAwMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMThFNAorOjEwRTg1MDAwRjBCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4MTVFOQorOjEwRTg2MDAwRTBCMTAwMDAwODk1MDA0MDgxQjIwMDAwMTU5NTIyNUZEQworOjEwRTg3MDAwODE3QzAwMDAxNDk1QTI0MDE5N0MwMDAwMDAwMDAwNDAzQgorOjEwRTg4MDAwMTk5MDAxMDAwMDAwMDA1NDYxQjEwMTAwMTAwMDAwMDc2MAorOjEwRTg5MDAwOTZFNDAxMDAwMDAwMDA0Rjk3OTQwMTAwMDAwMDAwNEIzNworOjEwRThBMDAwNjJCMTAxMDAxNDk1Mjg0MDgxMzIwMDAwMTE5NTAwNDBBQQorOjEwRThCMDAwODFCMjAwMDAwMDAwQTIyMTgxODQwMDAwMTg5NUEyNUZBRgorOjEwRThDMDAwODE2QzAwMDAwMDAwQTI0MzE5N0MwMTAwMDAwMDAwNDM5RAorOjEwRThEMDAwMTk5MDAxMDAwMDAwMDA1NDYxQjEwMTAwMTAwMDAwMDcxMAorOjEwRThFMDAwOTZFNDAxMDAwMDAwMDA0MDk2OTQwMTAwMDAwMDAwNEJGNworOjEwRThGMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwMUI5NTAwNDBGOQorOjEwRTkwMDAwODFCMjAwMDAwMDgwMDAxOTQ0QzkwMTAwMDQwMDIyMDIwNQorOjEwRTkxMDAwRjAzMTAwMDAwMDAwMDAwQkYwQjEwMTAwMDAwMDAwMTMxNgorOjEwRTkyMDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTlCNgorOjEwRTkzMDAwNjJERDAxMDAwMDAwQTgwOEUwQjEwMDAwMjM5NTAwNDA1RQorOjEwRTk0MDAwODFCMjAwMDA3QzAwMkRGMDg0QjAwMTAwMDIwMDAwRjBENAorOjEwRTk1MDAwOThGNDAxMDAyQzk1MjA0Qzg0NkMwMDAwODgwMDAwNDA0NQorOjEwRTk2MDAwNDM5OTAxMDAyQzk1MjBGMjg0NkMwMDAwMDAwMDAwNDBDNworOjEwRTk3MDAwODVCMDAxMDA5ODAwMkQxNDgyQjAwMTAwMDAwMDAwRjA2NQorOjEwRTk4MDAwOThCMDAxMDBBMzAwMkQxNDk4RDAwMTAwMzE5NTIwNENCRgorOjEwRTk5MDAwODQ2QzAwMDAwMDAwMDA0Qzg0QjAwMTAwMDAwMDAwRjMxMworOjEwRTlBMDAwODBFMDAxMDAzNDk1MjM0MDg0NkMwMDAwMDAwMDAwNDBBQQorOjEwRTlCMDAwODRCMDAxMDBEMDAwMjAxNEUwQjEwMTAwOTgwMDI1NDI4RAorOjEwRTlDMDAwODBCMDAxMDAwMDAwNkVGMzgwRjAwMTAwMDAwMEE2NDI1QworOjEwRTlEMDAwODJDMDAwMDAzQTk1QTA0MDE2NDAwMDAwMDAwMDAwNDFBRgorOjEwRTlFMDAwMTdDMDAxMDAwMDAwOUZGMDgyRUMwMDAwOTgwMEEwNDFEOQorOjEwRTlGMDAwRTBCMTAxMDAwMDAwMkUxMDQ4QjEwMTAwQTgwMTAwNDA2NAorOjEwRUEwMDAwRjE5OTAxMDAwMDAwMDAwNUYwQjEwMTAwMDkwMDAwMDdDNAorOjEwRUExMDAwOTZFNDAxMDAwMDAwNjBBNzk3QzAwMTAwMDAwMDAwMTAwQworOjEwRUEyMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwNDE5NTAwNDBBMQorOjEwRUEzMDAwODFCMjAwMDBBODAwMkQxQzhBQjAwMTAwMDAwMDlGRjBFOAorOjEwRUE0MDAwOEFEMDAwMDAwMDAwQTI0MDhCRUMwMDAwOEEwMDIwNDAyOQorOjEwRUE1MDAwRTdCMTAxMDBCNDAwMDA0MDQ3OTkwMTAwQTQwMDJENDUzMgorOjEwRUE2MDAwRTBEMTAxMDA0RTk1OUMxNzgwMzIwMDAwQkUwMDJGQUIxNAorOjEwRUE3MDAwODNCMDAxMDBBMTk1MDAxNDgyNTAwMTAwNTM5NTAwNDAxRAorOjEwRUE4MDAwODFCMjAwMDA1Mzk1MjJGMjgyMzAwMDAwOEMwMDAwNDBEOQorOjEwRUE5MDAwNDM5OTAxMDA1Mzk1OUYxQ0UwNkQwMDAwQkUwMDAwNDBBQgorOjEwRUFBMDAwNDc5OTAxMDBBMTk1MDA0MDgxMzIwMTAwQTgwMDIwMUM3NworOjEwRUFCMDAwRTBCMTAxMDA5QzAwMkQzMDgxQjAwMTAwODgwMDJERjBGNAorOjEwRUFDMDAwODRCMDAxMDA5NDAwMkRGMjg2QjAwMTAwNjY5NTIzRjAxOQorOjEwRUFEMDAwODQ2QzAwMDA1Qjk1MjM5Mjg3NkMwMDAwQzkwNDAwQTYzQgorOjEwRUFFMDAwOTRCMDAxMDA1RDk1MDA0MDgxQjIwMDAwMjAwMDAwQTZCNgorOjEwRUFGMDAwOTRCMDAxMDA2MDg5MDA0QTk0OTgwMTAwNUQ5NTY4NDBENworOjEwRUIwMDAwODEzMjAwMDAwMDAwMDA0QUIwQjEwMTAwQkYwMDJENDI3OAorOjEwRUIxMDAwQjJCMTAxMDA5MDAwMkRGMzgwRTAwMTAwNjE5NUQ0NDA3NgorOjEwRUIyMDAwODEzMjAwMDAwMDAwNzhEQTg0QzAwMTAwNkI5NTIzNDAzOAorOjEwRUIzMDAwODQ2QzAwMDA5NDAwMjA5REUxQjEwMTAwNkI5NTAwNDBDMQorOjEwRUI0MDAwODRCMDAwMDBCRjAwMkQ0Mzg0QzAwMTAwOTAwMDJERjM2RAorOjEwRUI1MDAwODBFMDAxMDA2Qjk1MjM0MDg0NkMwMDAwOTQwMDIwOURCMAorOjEwRUI2MDAwRTFCMTAxMDAwMDAwMDA0MDg0QjAwMTAwNkY5NUEyRjAwNworOjEwRUI3MDAwMzg2QzAwMDA5QzAwMjA0MkUwQjEwMTAwMDAwMDAwNUYwMgorOjEwRUI4MDAwMTM5NDAxMDAwMDAwODA0NjE5ODAwMTAwOUMwMDIwNDI3RgorOjEwRUI5MDAwRTBCMTAxMDAzNzAwMDA0MDQzOTkwMTAwMDQwMDAwRjM5OAorOjEwRUJBMDAwODBGNDAxMDAwRjAwMDBGMzgyODgwMTAwNzU5NTIzNDE3NQorOjEwRUJCMDAwODA2QzAwMDAwMDAwMDA1RjEzOTQwMTAwMDAwMDg5MENDRAorOjEwRUJDMDAwODBCMjAwMDBCQzAwMDA0MDQzOTkwMTAwQTAwMEEwRjIwOAorOjEwRUJEMDAwRTRCMTAxMDAwMDAwOUY0MTI0RUMwMDAwN0Y5NUE2NDBCNQorOjEwRUJFMDAwODEzMjAwMDAwMDAwOUY0MjM4RUMwMDAwN0Y5NUE2NDA3MworOjEwRUJGMDAwODEzMjAwMDBCNDAwMDA0MDQzOTkwMTAwODE5NUEzRjBFOAorOjEwRUMwMDAwM0E2QzAwMDAwMDAwODA0MDgxQjIwMTAwQjQwMDAwNDA3NgorOjEwRUMxMDAwNDM5OTAxMDA4NTk1MjJGMDNBNkMwMDAwQjQwMDIwMUQ1NAorOjEwRUMyMDAwRTBCMTAxMDA4MDAwMkQ1RjEzOTQwMTAwODU5NTIzRjA3MQorOjEwRUMzMDAwM0E2QzAwMDA4MDAwMjAxREUwQjEwMTAwQzAwMDIwMTJFRAorOjEwRUM0MDAwRTBCMTAxMDBDNDAwQTAxQ0UwQjEwMTAwMDA4MDAwMDM5RAorOjEwRUM1MDAwNDRDOTAxMDAwMDAwMDA0MkUwQjEwMTAwMTIwMDAwNDA4MAorOjEwRUM2MDAwODc5ODAxMDA4RTk1OUY0MTI0NkMwMDAwMDAwMDAwNDFCMAorOjEwRUM3MDAwOENCMDAxMDAwMDAwMDAxMjhDRDAwMTAwOEY5NTAwNDE4MworOjEwRUM4MDAwMjRCMDAwMDAwMDAwMDA0MDhEQjAwMTAwREY5NTAwNDA3RQorOjEwRUM5MDAwODEzMjAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAxOAorOjEwRUNBMDAwNjJERDAxMDAwMDAwQTg0MDgxQjIwMDAwOTE5NTAwNDBBMworOjEwRUNCMDAwODFCMjAwMDBBMjkyMDA0MDgxMzIwMTAwMDAwMDAwMTZFMworOjEwRUNDMDAwODBCMjAxMDAwMDAwQTcwODgwMzIwMTAwOTk5NUEyNDA5RgorOjEwRUNEMDAwOTU2QzAwMDBCMDkyMDA0MDgxMzIwMTAwMDA4MjAwQTZENQorOjEwRUNFMDAwMDRCMDAxMDAwMDAwMDA0MDJEQjAwMTAwQTA5ODJGNDBBQQorOjEwRUNGMDAwMTFCMDAxMDAzMDA1MDA0MTg5QjAwMDAwMDAwMDlGRjgwQworOjEwRUQwMDAwM0VFQzAwMDAwMDAwOUYxMkUwRUQwMDAwQzgwMDIwQUJDOAorOjEwRUQxMDAwRTFCMTAxMDBDQzAwQTAxRkUwQjEwMTAwQTM5NUEzNUYwOQorOjEwRUQyMDAwRTc2RDAwMDAwMDAwMDA0MUU3QzEwMTAwQTYwMDAwNDBCRgorOjEwRUQzMDAwNDc5OTAxMDBCNzk1MjJGMjg2MzAwMDAwMDMwMDAwNDM5NgorOjEwRUQ0MDAwODRGNDAxMDAwMTAwMDA0MTgwQ0MwMTAwQjgwMDJENDI5NAorOjEwRUQ1MDAwODBEMDAxMDAwMDAwNjI0MDg2QzAwMTAwQUI5NTFGNDNENworOjEwRUQ2MDAwODAzMjAwMDBBQzk1QTI0MDg3NkMwMDAwMDAwMDYyNDEzOAorOjEwRUQ3MDAwODdCMDAxMDBCMDk1OUY0MDgwMzIwMDAwMDAwMDAwNDA0NQorOjEwRUQ4MDAwODVCMDAxMDAwMDAwMDA0MDg0RDAwMTAwMDAwMDAwNDI3NgorOjEwRUQ5MDAwODBCMDAxMDAwMDAwMDBGMjg4QjAwMTAwMDIwMDAwNDREMQorOjEwRURBMDAwODRGNDAxMDBCODAwMkU0MjgwRDAwMTAwMDAwMDYyNDBDRgorOjEwRURCMDAwODhDMDAxMDBCNjk1MUY0NDgwMzIwMDAwQkE5NUEyNDA3OQorOjEwRURDMDAwODk2QzAwMDBCQTk1NjI0MTg5QjAwMDAwMDMwMDYyNDE3RAorOjEwRUREMDAwODZFNDAxMDBCODAwMDA0MDQ1OTkwMTAwMDEwMDYyNDE0RAorOjEwRURFMDAwODhFNDAxMDBBNDAwMjA0MEU1QjEwMTAwQTIwMDIwNDAxOQorOjEwRURGMDAwRTdCMTAxMDBCQzAwMkU0Mzg3RjAwMTAwMDAwMDAwNDQ5MQorOjEwRUUwMDAwODZDMDAxMDBDMDk1MjA0Mzg3NkMwMDAwMDAwMDgwNDM0RAorOjEwRUUxMDAwRTVCMTAxMDA0MDAxMDA0MzgwQ0UwMTAwMDAwMEE0NDNBMQorOjEwRUUyMDAwRTQzMTAxMDA0MDAxRTI0MDg3OTgwMTAwODgwMDJENDQ1MAorOjEwRUUzMDAwODFCMDAxMDA5MDAwMkRGMjJFQjAwMTAwOUMwMDJERjA1OQorOjEwRUU0MDAwODZCMDAxMDA5MDAwMkRGMDgyQjAwMTAwQkEwMDJERjBENAorOjEwRUU1MDAwOThCMDAxMDBDRDk1QTIxMjk4NkMwMDAwQkMwMDJERjI3NAorOjEwRUU2MDAwOThCMDAxMDBDRDk1QTBGMjk4NkMwMDAwMDAwMDAwMTc0QQorOjEwRUU3MDAwODJCMDAxMDA5QzAwMjA0MUUwQjEwMTAwQjQwMDJEMTJERAorOjEwRUU4MDAwODZEMDAxMDBEMDk1QTM0MUUwNkQwMDAwRDE5NTAwRjAzRgorOjEwRUU5MDAwODRCMDAwMDAwMDAwMDA0MTg0QjAwMTAwODAwMDJENDNEOAorOjEwRUVBMDAwODREMDAxMDBENDk1OUY0MjgwMzIwMDAwMDAwMDAwNDBEMQorOjEwRUVCMDAwODVCMDAxMDBENjk1QTM0MjE0NkMwMDAwRDc5NTAwMEFENgorOjEwRUVDMDAwMENCMDAwMDAwMDAwMDA0MjBDQjAwMTAwRDk5NUEwMTc2MgorOjEwRUVEMDAwMEM2QzAwMDAwMDAwODAxNzBDQjAwMTAwREU5NTIyNDA5MQorOjEwRUVFMDAwMEQ2QzAwMDAwMDAwQTAwQTBDRUMwMDAwMDEwMDAwRjAxNgorOjEwRUVGMDAwODJGNDAxMDBERTk1QTA0MTBDNkMwMDAwMDAwMEEyRjAzRAorOjEwRUYwMDAwODAzMjAxMDAwMDAwODA0MDgxQjAwMTAwQjQ5MjAwNDBENgorOjEwRUYxMDAwODEzMjAxMDAwNDgwMDAwMzQ0QzkwMTAwMDAwMDAwNDY2MgorOjEwRUYyMDAwRjBCMTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDYwNDFCQgorOjEwRUYzMDAwODc5NDAxMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTBDNworOjEwRUY0MDAwRjFCMTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwNDlFQgorOjEwRUY1MDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDUzNQorOjEwRUY2MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4NUQxOQorOjEwRUY3MDAwMDU5MDAwMDBFQTk1MDA0MDgxQjIwMDAwMDAwMDJFNEI5MQorOjEwRUY4MDAwMTk5MDAxMDAwNTAwMkEwQ0U0QjEwMTAwMDAwMDgwMDQ4MgorOjEwRUY5MDAwRTZCMTAxMDBGMDk1NDU0ODYxMzEwMDAwMDAxMDAwMDgxRAorOjEwRUZBMDAwNjJERDAxMDBGNTk1Mjg0MDg3MzAwMDAwRjE5NTIyNDg4OAorOjEwRUZCMDAwNzc3RDAwMDA5NTk0MUQ0Njg3QjAwMDAwRjg5NTIyNUY4QworOjEwRUZDMDAwMTE3QzAwMDAwNDAwMjIxNTYyMzEwMDAwRjY5NUE4NDA3MworOjEwRUZEMDAwODEzMjAwMDAwMDAwOUQ0MDgxQjIwMTAwMDAwMDAwNDAyRAorOjEwRUZFMDAwNDlCMTAxMDAwMDE0MkY0QzgzQjAwMTAwMDAwMDAwNDAyMworOjEwRUZGMDAwRjFCMTAxMDBGQjk1QTI0MTgzNTAwMDAwMDAwMDgwNDA2OAorOjEwRjAwMDAwODFCMjAxMDAwMDAwMDA0MDQ5QjEwMTAwMzAwMDAwNDAyMQorOjEwRjAxMDAwQTE5OTAxMDAwMDAwMDA0MDkzQjAwMTAwMDAwMDAwNDBGMQorOjEwRjAyMDAwMUZCMDAxMDA0RTk2MDA0OTk2MzAwMTAwMDcwMDAwNDlDQworOjEwRjAzMDAwMDZFNDAxMDAwMDM5MDAwMzA2QzgwMTAwMDAwMDAwNDA5QQorOjEwRjA0MDAwMDVCMDAxMDAyMDAwMDBEMEEwQzkwMTAwMDAwMDAwNDE2RgorOjEwRjA1MDAwOTNDMDAxMDAwMjk2QTA1NDkzNkMwMDAwMDAwMDJFMDU5RQorOjEwRjA2MDAwOTdCMDAxMDAwMDgwMDA0MDQ5OTkwMTAwMDAwMDAwNDA3NQorOjEwRjA3MDAwRTFCMTAxMDAwMDAyMDBBMjQ0QzkwMTAwMEI5NkEyNDFDNworOjEwRjA4MDAwOTc1MDAwMDAwMDAwMDAyMDQ5QjMwMTAwNTQ5NjAwNDA1MgorOjEwRjA5MDAwNDkzMTAxMDBERjkyMDA0MDgxMzIwMTAwMDBCNTJFMDhBNQorOjEwRjBBMDAwOTdCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMTI5NkEyNDFBQQorOjEwRjBCMDAwOTc1MDAwMDAxODAwMDA0MDk3OTgwMTAwMDA5NzJFNDBEQworOjEwRjBDMDAwODFCMjAxMDAwMDAwMDA0MEYxQjEwMTAwMTY5NkEyNDE5QQorOjEwRjBEMDAwOTc1MDAwMDAwMDAwMDA0MDQ5QjEwMTAwNDAxODJFMDU4MworOjEwRjBFMDAwOTdCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMUE5NkEyNDE2MgorOjEwRjBGMDAwOTc1MDAwMDA1Nzk1MjA0MEU3QjEwMTAwMzA5NDAwNDA0MAorOjEwRjEwMDAwNDU5OTAxMDA2NDAwMDA0MEU1OTkwMTAwNTY5NTIwNDBCMgorOjEwRjExMDAwRTdCMTAxMDBCODk0MjA0MUU1QjEwMTAwQkE5NDIwNDE2MworOjEwRjEyMDAwRTVCMTAxMDA5ODk0MDA0MDQ1OTkwMTAwMDIwMDAwNDBCQgorOjEwRjEzMDAwOTc5ODAxMDAwMDAwMDA0MEYxQjEwMTAwMjQ5NkEyNDExRgorOjEwRjE0MDAwOTc1MDAwMDAwMDAwMDA0MDk3QjAwMTAwMDAwMDAwNDAxMAorOjEwRjE1MDAwNkZCMTAxMDAwMDAwMDA0QjY4QjEwMTAwMjg5Njg1NDFBNQorOjEwRjE2MDAwOTc0MDAwMDA4MDA0MDA0MDgxMzIwMTAwMDAwMDAwNDAxMAorOjEwRjE3MDAwMzlCMzAxMDAwMDAwMDA0MDM3QjMwMTAwMDAwMDAwNDAzNworOjEwRjE4MDAwMzVCMzAxMDAwMDAwMDA0MDMzQjMwMTAwMDAwMDAwNDAyRgorOjEwRjE5MDAwNDFCMzAxMDAwMDAwMDA0MDNGQjMwMTAwRUUwNTAwNDAxNAorOjEwRjFBMDAwMjU5QjAxMDA0MjAwMDA0MDRCOUIwMTAwMDAwMDAwNDBGNQorOjEwRjFCMDAwMkZCMzAxMDAwMDAwMDA0MDJEQjMwMTAwMDAwMDAwNDAwQgorOjEwRjFDMDAwNDdCMzAxMDAwMDAwMDA0MDQzQjMwMTAwNjAwMDAwNDA2RAorOjEwRjFEMDAwMkI5QjAxMDAwMDAwMDA1NEVGOTMwMTAwMDAwMDAwNTUzQworOjEwRjFFMDAwRjE5MzAxMDBGRkZGMDBBNTNDOEIwMTAwMDAwMDAwMkMwMworOjEwRjFGMDAwNUJCMzAxMDAwMDAwMDAyQzQ1QjMwMTAwMDAwMDAwNDA5QgorOjEwRjIwMDAwNTlCMzAxMDAwMDAwMDA0MDU3QjMwMTAwMDAwMDAwNDA2NgorOjEwRjIxMDAwMjdCMzAxMDAwMDAwMDA0MDUzQjMwMTAwNDQ5NkEyNTAwMAorOjEwRjIyMDAwRkQ3RjAwMDA0NDk2QTI1MUZEN0YwMDAwNDU5NjAwNDBGRQorOjEwRjIzMDAwMURCMzAwMDA1MDQ2MDA0MDFEOUIwMTAwMDBDMDAwQTYwOQorOjEwRjI0MDAwODhCMzAxMDBGRjNGMDBBNjNBQjMwMTAwMDBDMDAwOUQ1MworOjEwRjI1MDAwM0I5QjAxMDBCNDA1MDA0MDIzOUIwMTAwMDAwMDAwNDBERgorOjEwRjI2MDAwNERCMzAxMDAwODBBMDBBNjE0QjMwMTAwMDEwMTAwOEE5MQorOjEwRjI3MDAwMTU5QjAxMDAwMDgwMDBBNjU2QjEwMTAwMDAwMDgwNUVEMQorOjEwRjI4MDAwNTdCNTAxMDAxODAwMDA0QjIwRTQwMTAwMDYwMDAwNEJCOAorOjEwRjI5MDAwOTZFNDAxMDAwMDQzMDA0Qjk2QzgwMTAwMTgwMDAwMTBERQorOjEwRjJBMDAwMjBEQzAxMDAwMDAwMDA0QjIwOTQwMTAwMDAwMDgwNTc4QQorOjEwRjJCMDAwMjE5MDAxMDAwMDk5MkUwQTk3QjAwMTAwMDAwMDAwNDA0MworOjEwRjJDMDAwRjFCMTAxMDA1NTk2QTI0MTk3NTAwMDAwMDAwMzAwNDBBMworOjEwRjJEMDAwOTc5ODAxMDAwMEE5MDA0MDQ1OTkwMTAwMDAwMDAwNDBGNgorOjEwRjJFMDAwRjFCMTAxMDA1OTk2QTI0MTk3NTAwMDAwMzAwMDAwNDA1MgorOjEwRjJGMDAwOTc5ODAxMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEIyQgorOjEwRjMwMDAwNjJCMTAxMDA1RDk2QTg0MDgxMzIwMDAwNUQ5NkEyNDE4NQorOjEwRjMxMDAwOTc1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDAwMDgwNDA1MgorOjEwRjMyMDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwRjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwRjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwRjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwRjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwRjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwRjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwRjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwRjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwRjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwRjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwRjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwRjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwRjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwRjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwRjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwRjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwRjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwRjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwRjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwRjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwRjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwRjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwRjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwRjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwRjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwRjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwRjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwRjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwRjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwRjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwRjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwRjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwRjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwRjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwRjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwRjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwRjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwRjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwRjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwRjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwRjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwRjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwRjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwRjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwRjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwRjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwRjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwRjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwRjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwRjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwRjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwRjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwRjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwRjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwRjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwRjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwRjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwRjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwRjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwRjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwRjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwRjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwRjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwRjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwRjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwRjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwRjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwRjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwRjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwRjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwRjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwRjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwRjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwRjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwRjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwRjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwRjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwRjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwRjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwRjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwRjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwRjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwRjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwRjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwRjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwRjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwRjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwRjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwRjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwRjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwRjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwRjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwRjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwRjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwRjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwRjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwRjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwRjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwRjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwRjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwRjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwRjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwRjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwRjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwRjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwRjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwRjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwRjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwRjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwRkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwRkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwRkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwRkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwRkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwRkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwRkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwRkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwRkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwRkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwRkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwRkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwRkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwRkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwRkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwRkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwRkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwRkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwRkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwRkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwRkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwRkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwRkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwRkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwRkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwRkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwRkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwRkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwRkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwRkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwRkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwRkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwRkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwRkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwRkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwRkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwRkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwRkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwRkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwRkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwRkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwRkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwRkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwRkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwRkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwRkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwRkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwRkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwRkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwRkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwRkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwRkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwRkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwRkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwRkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwRkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwRkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwRkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwRkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwRkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwRkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwRkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwRkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwRkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwRkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwRkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwRkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwRkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwRkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwRkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwRkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwRkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwRkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwRkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwRkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwRkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwRkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwRkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwRkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwRkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwRkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwRkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwRkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwRkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwRkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwRkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwRkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwRkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwRkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwRkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwRkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwRkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwRkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwRkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwRkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwRkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAwMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAwMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAwMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAwMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAwMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAwMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAwMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAwMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAwMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAwMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAwMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAwMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAwMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAwMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAwMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAwMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAwMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAwMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAwMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAwMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAwMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAwMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAwMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAwMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAwMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAwMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAwMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAwMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAwMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAwMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAwMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAwMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAwMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAwMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAwMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAwMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAwMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAwMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAwMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAwMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAwMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAwMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAwMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAwMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAwMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAwMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAwMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAwMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAwMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAwMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAwMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAwMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAwMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAwMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAwMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAwMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAwMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAwM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAwM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAwM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAwM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAwM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAwM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAwNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAwNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAwNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAwNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAwNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAwNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAwNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAwNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAwNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAwNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAwNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAwNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAwNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAwNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAwNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAwNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAwNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAwNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAwNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAwNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAwNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAwNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAwNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAwNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAwNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAwNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAwNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAwNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAwNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAwNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAwNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAwNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAwNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAwNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAwNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAwNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAwNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAwNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAwNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAwNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAwNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAwNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAwNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAwNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAwNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAwNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAwNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAwNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAwNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAwNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAwNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAwNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAwNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAwNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAwNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAwNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAwNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAwNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAwN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAwN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAwN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAwN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAwN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAwN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAwODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAwODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAwODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAwODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAwODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAwODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAwODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAwODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAwODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAwODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAwOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAwOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAwOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAwOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAwOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAwOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAwOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAwOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAwOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAwOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAwOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAwOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAwOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAwOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAwOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAwOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAwOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAwOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAwOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAwOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAwOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAwOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAwQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAwQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAwQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAwQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAwQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAwQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAwQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAwQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAwQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAwQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAwQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAwQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAwQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAwQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAwQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAwQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAwQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAwQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAwQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAwQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAwQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAwQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAwQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAwQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAwQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAwQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAwQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAwQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAwQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAwQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAwQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAwQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAwQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAwQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAwQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAwQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAwQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAwQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAwQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAwQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAwQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAwQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAwQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAwQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAwQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAwQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAwQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAwQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAwRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAwRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAwRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAwRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAwRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAwRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAwRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAwRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAwRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAwRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAwREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAwREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAwREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAwREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAwREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAwREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAwRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAwRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAwRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAwRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAwRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAwRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAwRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAwRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAwRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAwRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAwRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAwRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAwRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAwRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAwRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAwRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAwRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAwRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAwRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAwRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAwRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAwRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAwRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAwRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAwRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAwRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAwRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAwRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAwRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAwRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAwRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAwRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAxMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAxMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAxMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAxMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAxMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAxMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAxMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAxMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAxMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAxMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAxMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAxMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAxMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAxMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAxMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAxMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAxMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAxMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAxMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAxMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAxMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAxMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAxMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAxMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAxMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAxMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAxMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAxMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAxMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAxMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAxMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAxMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAxMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAxMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAxMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAxMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAxMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAxMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAxMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAxMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAxMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAxMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAxMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAxMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAxMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAxMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAxMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAxMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAxMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAxMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAxMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAxMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAxMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAxMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAxMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAxMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAxMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAxM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAxM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAxM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAxM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAxM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAxM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAxNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAxNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAxNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAxNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAxNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAxNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAxNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAxNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAxNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAxNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAxNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAxNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAxNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAxNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAxNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAxNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAxNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAxNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAxNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAxNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAxNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAxNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAxNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAxNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAxNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAxNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAxNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAxNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAxNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAxNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAxNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAxNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAxNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAxNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAxNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAxNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAxNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAxNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAxNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAxNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAxNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAxNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAxNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAxNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAxNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAxNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAxNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAxNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAxNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAxNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAxNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAxNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAxNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAxNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAxNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAxNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAxNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAxNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAxN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAxN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAxN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAxN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAxN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAxN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAxODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAxODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAxODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAxODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAxODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAxODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAxODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAxODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAxODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAxODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAxOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAxOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAxOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAxOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAxOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAxOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAxOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAxOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAxOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAxOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAxOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAxOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAxOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAxOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAxOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAxOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAxOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAxOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAxOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAxOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAxOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAxOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAxQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAxQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAxQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAxQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAxQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAxQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAxQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAxQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAxQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAxQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAxQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAxQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAxQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAxQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAxQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAxQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAxQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAxQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAxQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAxQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAxQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAxQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAxQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAxQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAxQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAxQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAxQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAxQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAxQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAxQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAxQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAxQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAxQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAxQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAxQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAxQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAxQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAxQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAxQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAxQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAxQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAxQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAxQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAxQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAxQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAxQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAxQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAxQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAxRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAxRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAxRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAxRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAxRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAxRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAxRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAxRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAxRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAxRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAxREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAxREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAxREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAxREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAxREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAxREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAxRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAxRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAxRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAxRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAxRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAxRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAxRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAxRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAxRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAxRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAxRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAxRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAxRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAxRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAxRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAxRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAxRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAxRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAxRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAxRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAxRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAxRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAxRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAxRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAxRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAxRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAxRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAxRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAxRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAxRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAxRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAyMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAyMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAyMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAyMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAyMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAyMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAyMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAyMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAyMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAyMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAyMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAyMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAyMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAyMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAyMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAyMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAyMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAyMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAyMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAyMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAyMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAyMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAyMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAyMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAyMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAyMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAyMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAyMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAyMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAyMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAyMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAyMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAyMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAyMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAyMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAyMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAyMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAyMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAyMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAyMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAyMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAyMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAyMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAyMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAyMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAyMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAyMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAyMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAyMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAyMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAyMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAyMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAyMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAyMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAyMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAyMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAyMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAyM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAyM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAyM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAyM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAyM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAyM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAyNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAyNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAyNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAyNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAyNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAyNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAyNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAyNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAyNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAyNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAyNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAyNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAyNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAyNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAyNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAyNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAyNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAyNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAyNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAyNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAyNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAyNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAyNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAyNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAyNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAyNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAyNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAyNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAyNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAyNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAyNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAyNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAyNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAyNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAyNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAyNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAyNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAyNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAyNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAyNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAyNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAyNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAyNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAyNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAyNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAyNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAyNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAyNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAyNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAyNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAyNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAyNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAyNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAyNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAyNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAyNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAyNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAyNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAyN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAyN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAyN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAyN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAyN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAyN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAyODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAyODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAyODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAyODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAyODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAyODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAyODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAyODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAyODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAyODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAyOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAyOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAyOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAyOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAyOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAyOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAyOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAyOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAyOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAyOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAyOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAyOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAyOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAyOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAyOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAyOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAyOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAyOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAyOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAyOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAyOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAyOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAyQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAyQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAyQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAyQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAyQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAyQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAyQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAyQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAyQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAyQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAyQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAyQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAyQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAyQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAyQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAyQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAyQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAyQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAyQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAyQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAyQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAyQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAyQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAyQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAyQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAyQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAyQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAyQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAyQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAyQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAyQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAyQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAyQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAyQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAyQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAyQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAyQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAyQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAyQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAyQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAyQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAyQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAyQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAyQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAyQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAyQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAyQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAyQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAyRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAyRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAyRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAyRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAyRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAyRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAyRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAyRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAyRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAyRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAyREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAyREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAyREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAyREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAyREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAyREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAyRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAyRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAyRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAyRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAyRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAyRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAyRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAyRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAyRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAyRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAyRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAyRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAyRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAyRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAyRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAyRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAyRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAyRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAyRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAyRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAyRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAyRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAyRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAyRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAyRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAyRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAyRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAyRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAyRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAyRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAyRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAzMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAzMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAzMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAzMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAzMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAzMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAzMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAzMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAzMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAzMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAzMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAzMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAzMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAzMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAzMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAzMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAzMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAzMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAzMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAzMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAzMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAzMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAzMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAzMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAzMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAzMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAzMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAzMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAzMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAzMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAzMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAzMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAzMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAzMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAzMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAzMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAzMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAzMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAzMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAzMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAzMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAzMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAzMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAzMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAzMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAzMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAzMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAzMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAzMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAzMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAzMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAzMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAzMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAzMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAzMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAzMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAzMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAzM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAzM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAzM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAzM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAzM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAzM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAzNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAzNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAzNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAzNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAzNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAzNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAzNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAzNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAzNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAzNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAzNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAzNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAzNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAzNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAzNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAzNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAzNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAzNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAzNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAzNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAzNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAzNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAzNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAzNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAzNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAzNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAzNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAzNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAzNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAzNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAzNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAzNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAzNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAzNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAzNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAzNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAzNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAzNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAzNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAzNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAzNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAzNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAzNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAzNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAzNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAzNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAzNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAzNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAzNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAzNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAzNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAzNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAzNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAzNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAzNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAzNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAzNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAzNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAzN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAzN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAzN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAzN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAzN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAzN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAzODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAzODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAzODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAzODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAzODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAzODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAzODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAzODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAzODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAzODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAzOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAzOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAzOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAzOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAzOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAzOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAzOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAzOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAzOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAzOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAzOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAzOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAzOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAzOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAzOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAzOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAzOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAzOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAzOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAzOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAzOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAzOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAzQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAzQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAzQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAzQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAzQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAzQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAzQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAzQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAzQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAzQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAzQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAzQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAzQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAzQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAzQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAzQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAzQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAzQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAzQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAzQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAzQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAzQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAzQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAzQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAzQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAzQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAzQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAzQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAzQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAzQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAzQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAzQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAzQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAzQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAzQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAzQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAzQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAzQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAzQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAzQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAzQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAzQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAzQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAzQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAzQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAzQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAzQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAzRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAzRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAzRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAzRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAzRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAzRDUwMDA4MUIyMDAwMEFFOUYwMDg4OUFCMDAwMDBBRTlGMDA4ODNDCis6MTAzRDYwMDA5QUIwMDAwMEFFOUYwMDg4OUFCMDAwMDBBRTlGMDA4ODE1Cis6MTAzRDcwMDA5QUIwMDAwMEFFOUYwMDg4OUFCMDAwMDAwMDAwMDA4ODUyCis6MTAzRDgwMDA5QUIwMDEwMEFFOUY0MTQwODEzMjAwMDBCMjlGMjI0MEI0Cis6MTAzRDkwMDA3QjZGMDAwMDAwMDAxOTQwODFCMjAxMDBBRTlGMDA0MDFGCis6MTAzREEwMDA4MUIyMDAwMDAwMDAxOTQxN0JCMzAxMDAwMDAwMDBBNEIzCis6MTAzREIwMDBDNEIzMDEwMDAwMDAwMEExQzZCMzAxMDAwMDAwMkZBMjlGCis6MTAzREMwMDBDOEIzMDEwMDA4MTQwMDQwNDk5OTAxMDBBODlGMDA0REE0Cis6MTAzREQwMDA5QUNDMDEwMEJCOUYyNjQwODEzMjAwMDAwMDAwMDA0Q0JECis6MTAzREUwMDA0OUMxMDEwMEI5OUZBMjQxOUI1MDAwMDBCRjlGODA4MDQ0Cis6MTAzREYwMDA4MDMyMDAwMDAwMDA1MjQ5RkQ5MzAxMDAwMDAwMDA0QTlCCis6MTAzRTAwMDBGRDkzMDEwMEMyOUYwMDQyQ0Q5MzAwMDAwMDAwNTE0QTgzCis6MTAzRTEwMDBGRDkzMDEwMDAwMDAwMDQ5RkQ5MzAxMDBDMjlGMDA0MzkzCis6MTAzRTIwMDBDQjkzMDAwMDAwMDA1MDQwODFCMjAxMDBEMjlGMDA0MEJGCis6MTAzRTMwMDAxOTk5MDEwMDAwMDAwMEYwOUFCMDAxMDAwMDAwMDA0NDUwCis6MTAzRTQwMDA0OUQxMDEwMDAwMDA0MEYwODBCMjAxMDAwMDAwNDE0RDY2Cis6MTAzRTUwMDA4MEIyMDEwMENBOUYwMDQwMTk5OTAxMDAwMDAwNEM0MDQ3Cis6MTAzRTYwMDA4MUIyMDEwMDAwMDAwMDQ0NDlEMTAxMDAwMDAwMDBGMENGCis6MTAzRTcwMDA5QUIwMDEwMDAwMDAwMDREMTBCMTAwMDAwMDAwMDBFMjA3Cis6MTAzRTgwMDA0OUIxMDEwMDAwMDAwMEUzNDNCMTAxMDAwMDAwMDBFNDdCCis6MTAzRTkwMDA0NUIxMDEwMDAwMDAwMDQwN0JCMzAxMDAwMDAwNDg0RjI1Cis6MTAzRUEwMDA0MEIxMDEwMEQyOUYwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAzRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAzRUQwMDA4MUIyMDAwMDA0MDAwMENCODFDODAxMDBGNDgyMDA0MEUwCis6MTAzRUUwMDBGMjkzMDAwMDQwODIwMDQwODFCMjAwMDA0MDA1MDA0MDkzCis6MTAzRUYwMDA4MUIyMDAwMDE4MDYwMDQwODFCMjAwMDBGNDgyMDA0MDQ4Cis6MTAzRjAwMDA4MUIyMDAwMEFGODIwMDQwODFCMjAwMDAzODgxMDA0MEUxCis6MTAzRjEwMDA4MUIyMDAwMDM2ODEwMDQwODFCMjAwMDBCODgwMDA0MENDCis6MTAzRjIwMDA4MUIyMDAwMDFBODcwMDQwODFCMjAwMDBBRjgyMDA0MEQ5Cis6MTAzRjMwMDA4MUIyMDAwMEY1ODIwMDQwODFCMjAwMDBBQjkyMDA0MEU3Cis6MTAzRjQwMDA4MUIyMDAwMEYwOTUwMDQwODFCMjAwMDA3MzkyMDA0MDAxCis6MTAzRjUwMDA4MUIyMDAwMERGOTUwMDQwODFCMjAwMDA0QTkzMDA0MDJBCis6MTAzRjYwMDA4MUIyMDAwMEVEOTIwMDQwODFCMjAwMDBFNzkyMDA0MDczCis6MTAzRjcwMDA4MUIyMDAwMDlBODIwMDQwODFCMjAwMDAwMDAwODA0MEJGCis6MTAzRjgwMDA4MUIyMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAzRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAzRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAzRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAzRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAzRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAzRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA0MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MDQ0MDEwMDA4MUIyMDAwMDc5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cy5paGV4IGIvZmlybXdhcmUvc2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxM2JlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzLmloZXgKQEAgLTAsMCArMSwxNjIgQEAKKzoxMDAwMDAwMDAwMDIwMDAwNDc3NTAxMDAwNEEwMTMwMTAwMUNCNzVCNEIKKzoxMDAwMTAwMDA5MzAwMEI2NUYwMTAwMUMwMDAwMDAyMDE4M0I3ODNBNTAKKzoxMDAwMjAwMDAwMUNBMjc3MDEwMDFDMDcxRDAxNzAxOEFEN0JGMUZGQjkKKzoxMDAwMzAwMDFDQjM3QkE5QUExRUI0N0IwMTBDMUNCNTdCMEQwNjFDNEUKKzoxMDAwNDAwMDAwMDAzMDY0MDgwQzMxNUE3MDA0MEMzMTVBODAwNDBDRTIKKzoxMDAwNTAwMDMxNEU5MDA0MEMzMTRBQTAwMDA5MjU1NUMwMDQwQzMxRTIKKzoxMDAwNjAwMDUyQjAwMEU5MjQ1NUMwMDRDQ0IzMDAxQzFDRUIyRDAxOTgKKzoxMDAwNzAwMDAwMUMwNjU2MzJENDA4MDc5RDAwMDAxQzdCQjcwMjAwMDYKKzoxMDAwODAwMDEwQTAwRjMxNTQwOTA2NTY1RUMwMDRBMDMwNTQwMzAwN0UKKzoxMDAwOTAwMEFDMzA1NTAzMDBDRDAzM0EwMDFDN0JCNzAyMDAxQzYwNTYKKzoxMDAwQTAwMDhFMzE1NDA5MjkyNTU1MDMwMDgwOEUzMTU0MDk4QzMwMzYKKzoxMDAwQjAwMDkxMDAwNDQ3MUMwMTAwMUNBMDBGMzE1NDA5MDAwMDY0OEEKKzoxMDAwQzAwMDAwMDQ0NzFDNjVDMDA0NDcxQzU1MDMwMDZDMzAwMTAwNDgKKzoxMDAwRDAwMDFDNEQzNDAyMDAxQzdCQjcwMjAwMUNBMDBGMzE1NDA5RDgKKzoxMDAwRTAwMEM4ODMzNzAwMUM4MDAxMDAwMDFDMDAwMDY0MDAwNEEwQ0QKKzoxMDAwRjAwMDBGMzA1NDA5MDAwMDU0QzMwNDdCRkJGMjAwMUNDQzMzQzYKKzoxMDAxMDAwMDBEMDAxQ0I0N0JGRDAzMUM4MDBFMzA1NDA5RTBGQjA1ODAKKzoxMDAxMTAwMDAwMUMwMDAwOEMwMzAwQjMwRjMxNTQwOTAwMDBFQzcwODgKKzoxMDAxMjAwMDA0MDAwMEVDODAwNDAwMDA4QzkzMDA2MTc2OERDMzA0MTEKKzoxMDAxMzAwMEMwOEQzMTU0MDlFMDdCMDBDMDFGQTBGREM1MDEwMENDN0IKKzoxMDAxNDAwMDMzMDUwMDFDRDQwMzAwM0MxQ0Q0RDMxQjAwMUNDMEQzQkIKKzoxMDAxNTAwMDUyMDAxQzAwMDA1QzEzMDQ4RThFMzI1NDA5NUI4MDVFREEKKzoxMDAxNjAwMDEzMDQwMDAwMDAwMDFDMDAwMDk0MDEwMEEwMEYzMTU0OTMKKzoxMDAxNzAwMDA5QTAwRjMxNTQwOUMwMDNGQzdGMUNBMDAxQTAwMTAwOUQKKzoxMDAxODAwMDAwMDBBNDAxMDBBMDBGMzE1NDA5QzAwM0ZDMDMxQ0Y1QkEKKzoxMDAxOTAwMDc3MDEwMDFDMjY3QUU2MDUxQ0EwMEYzMTU0MDlCMzBGMjUKKzoxMDAxQTAwMDMxNTQwOUI1MDIwMjAwMUNBMDBGMzE1NDA5N0E3RTAyQjUKKzoxMDAxQjAwMDAwMUNCNTAyMDIwMDFDNTMwRjMyNTQwOUFGMDMwMTAwQUEKKzoxMDAxQzAwMDFDN0EwRTMyNTQwOUI1MDIwMjAwMUMwMDAwMDIwMDFDMDkKKzoxMDAxRDAwMEEwM0RBQTExMDQwMDAwQUMxMTA0RDREMzUyMDAxQ0I1RjgKKzoxMDAxRTAwMDNFQjIwMTAwMjBGQkZERkYxRjgwMkM2QzAzMDBCOTNBREEKKzoxMDAxRjAwMDlFMDEwMDc1M0IwMjAwMUNBNzFDMDEwMDEwREI4MzE2NEEKKzoxMDAyMDAwMDAwMUNDNzFEMjFDMTA0QjkzQjhEQzEwNDhCMkMwMTAwMEEKKzoxMDAyMTAwMDFDNkIyQzM1QzEwNDAwMDA3ODExMDBDQjJDNzlDMTA0NzMKKzoxMDAyMjAwMEEwMEYzMTU0MDlBMDBGMzE1NDA5NTREMDAyMDAxQzQ5QzkKKzoxMDAyMzAwMDI1QjEwMTAwQUIyQzgxQzEwNEE3MUQ1NTAzMDBDQzMzQUYKKzoxMDAyNDAwMDA5MDAxQ0VCMkQwMTAwMUNFQTI5MDEwMDFDQTAwRjMxNDQKKzoxMDAyNTAwMDU0MDlBRTBGMzE1NDA5QTAwRjMxNTQwOUQ0MDdGQzAzREYKKzoxMDAyNjAwMDFDOTkzQTAyMDAxQ0JCMzgwMjAwMUMwMDM4MDAwMDFDMUMKKzoxMDAyNzAwMDAwMDBGQzAxMDREQjNCN0UwMDFDQzcxRDAxMDAxQzI2QTYKKzoxMDAyODAwMDdBRkEwNTFDMjcxRDAxMDAxQ0IzMEYzMTU0MDk3QTBFQTAKKzoxMDAyOTAwMDMyNTQwOTUzMEYzMjU0MDk3QTBFMzI1NDA5NTMwRjMyMzMKKzoxMDAyQTAwMDU0MDk3QTBFMzI1NDA5NTMwRjMyNTQwOUEwMEYzMTU0QjUKKzoxMDAyQjAwMDA5N0EwNjAyMDAxQzUzMEYzMjU0MDlBRjAzMDEwMDFDRDcKKzoxMDAyQzAwMDdBMEUzMjU0MDk1MzBGMzI1NDA5N0EwRTMyNTQwOTUzQkMKKzoxMDAyRDAwMDBGMzI1NDA5N0EwRTMyNTQwOTUzMEYzMjU0MDk3QTBFRjAKKzoxMDAyRTAwMDMyNTQwOTAwM0QwMjAwMUMwMDAwNTgxMjAwQ0IyQzAxQzIKKzoxMDAyRjAwMDAwMUM3NTNCMDIwMDFDQTcxQzAxMDAxMENCMkYwNTAwNDEKKzoxMDAzMDAwMDFDNjAyQzAwMDAxQ0M3MUNDOTAyMDBBMDBGMzE1NDA5M0UKKzoxMDAzMTAwMDUzMDcwMjAwMUM0NjdBQ0EwNTFDN0EwRTMyNTQwOTQwNjMKKzoxMDAzMjAwMEZBMTkwMDFDMDAwMDg4MDIwNDQ2N0FDQTA1MUNBMDBGQjYKKzoxMDAzMzAwMDMxNTQwOUEwMEYzMTU0MDlBMDBGMzE1NDA5QTAwRjMxRDUKKzoxMDAzNDAwMDU0MDlCMzdCMDFDMDFGNzQwRTMwNTQwOUMwMDM5QzAwRDQKKzoxMDAzNTAwMDFDODAwMEQ4MDIwMDAwMDBEODAyMDQwMDAwQUMxMjA1ODYKKzoxMDAzNjAwMDA3MUQwMTAwMUNENEQzMkIwMDFDRDREMzUyMDAxQzgwQzkKKzoxMDAzNzAwMDc2N0QxMzA0MDAwMEUwMDIwMEE2N0I5NTAzMTBDNzlDNjUKKzoxMDAzODAwMDAwMDAxQzgwMkMwMDAwMUMwMDAwNkMwMjA0MDAwMDU0QzMKKzoxMDAzOTAwMEMzMDRBQjJERDkxMjA1MDcxREI1QzIwNDhCMkQwMTAwNzYKKzoxMDAzQTAwMDFDNjkyNTAxMDAxQ0E2N0I5NTAzMTBDQjJGMDkwMDFDOUUKKzoxMDAzQjAwMDYwMkMwMDAwMUMwMDAwNDgwMzAwNTMwRjMyNTQwOTQ2MTMKKzoxMDAzQzAwMDdBQ0EwNTFDN0EwRTMyNTQwOTQwRkExOTAwMUMwMDAwNDIKKzoxMDAzRDAwMDEwMDMwNDQ2N0FDQTA1MUNCNTBGMzE1NDA5QTAwRjMxMjkKKzoxMDAzRTAwMDU0MDk3M0VDMkEwMzA0NjAyQzAwMDAxQzAwMDAyODAzNEQKKzoxMDAzRjAwMDAwQzcxQzAxMDAxQzAwMDAyODEzMDUwNzFEMDEwMDFDN0MKKzoxMDA0MDAwMEMwRDcyMjAwMUM3NTU2N0UxMzA0NjAyQzAwMDAxQ0U3MjgKKzoxMDA0MTAwMDFDNDUwMzA0RTc5QzAwMDAxQ0E2N0I5NTAzMTA4MDJDNjAKKzoxMDA0MjAwMDAwMDAxQzAwMDBGODAyMDQwMDAwNTRDMzA0Qjk3QjAxNjIKKzoxMDA0MzAwMDAwMUMwMDAwOENDMzA0Q0JBRkZDMDcxQ0NCMkYwMTA0QjUKKzoxMDA0NDAwMDFDQzc5RjgwMDMxQzAwMDA4Q0MzMDRDQkFGRkMwNzFDOUYKKzoxMDA0NTAwMENCMkYwRDA0MUNDNzlGODAwMzFDMDAwMDhDQzMwNENCNTIKKzoxMDA0NjAwMEFGMDBGODFEQ0IyRjAxMDAxREE2N0I5NTAzMUNDNzlDNzgKKzoxMDA0NzAwMDhDQzMwNDAwMDA4QzEzMDUwNzFEMDEwMDFDQzAxRERDOEIKKzoxMDA0ODAwMEQzMDgyNzlERTQwMzAwQTBFRTQ2RDQwMEZCNzUwOTE0QjEKKzoxMDA0OTAwMDA0MjA3QjA2MDAxQ0MwMUMxQzA0MDAwMDAwQjBEMzA4MTQKKzoxMDA0QTAwMDAwMDAwMEY0MDBDMEVGRjIwMDFDMjAyNTVDMTQwNDYwODIKKzoxMDA0QjAwMEI3RDIwMzAwMDAwMDBDMTUwMENDQjNGQzAzMUNDQzMzRjYKKzoxMDA0QzAwMDA1MDIxQzAwMDAwQ0M1MDQ2MEI3MEUwNTA0MDAwMDBDRkEKKzoxMDA0RDAwMDE1MDQwMDAwNUNDNDA0QzAxRDk4RjMwNDAwMDA2OEM0NDcKKzoxMDA0RTAwMDA0MDc5RDAwMDAxQzFCNzRGREYzMDRBNjdCRjEwMzFDOTQKKzoxMDA0RjAwMEEwMEY2OTU0MDlFMDdCMDBGQzFGMzk3RjAyMDAxQzA3MzQKKzoxMDA1MDAwMDFEOURDMzA0QTY3QkFEMDMxQzAwMDA2OEM0MDRFMDFDNTEKKzoxMDA1MTAwMDAwMDAxQzAwMDBBNDAzMDRDQkFGMDBGODFEQ0IyRjAxOEEKKzoxMDA1MjAwMDEwMUQwMDAwQUNDMzA0MDAwMEFDMDMwNENCQUYwMEY4MDYKKzoxMDA1MzAwMDFEQ0IyRjAxMTgxREM3OUYwMDBCMUMwMDAwQUNDMzA0NkUKKzoxMDA1NDAwMEZCNzUwMTAwMUMwNzFEMDEwMDFDQ0NCM0ZDMDMxQ0NDNzcKKzoxMDA1NTAwMDMzMDEwMjFDMDAwMEFDQzMwNEEwMUMwMDAwMUNBMEVFNzAKKzoxMDA1NjAwMEEyMDMwNENCQUZGQzA3MUNDQjJGMDkwNDFDRkI3NTAxQjUKKzoxMDA1NzAwMDAwMUMwMDAwQUNDMzA0Q0NCM0ZDMDMxQ0NDMzMwMTAyNTAKKzoxMDA1ODAwMDFDMDAwMDBDQzUwNDAwMDA3ODM0MDVDQ0IzRkMwMzFDMkYKKzoxMDA1OTAwMENDMzMxNTAyMUM0NzlENTRDNDA0MDAwMDc4NDQwMDgwRUQKKzoxMDA1QTAwMDFEN0M1NDA0ODcxRDhEMDQwMENFNzYwMTAwMUNFRjc2NUYKKzoxMDA1QjAwMDlEQzQwNEE0Nzc4RDI0MDlFNDc2MDEwMDFDQzQ3NjAxNEYKKzoxMDA1QzAwMDAwMUMwMDAwOTg1NDA0RDc3NjAxNTAxOEY2NzYwMTAwRkMKKzoxMDA1RDAwMDFDMDAwMDAwMzAxODAwMDAwMDAwMTBDQzMwNDVDNTA0OUQKKzoxMDA1RTAwMEVCMkQwMTAwMUNFQTI5MDEwMDFDQzA1OTAxMDAxQ0Y1N0IKKzoxMDA1RjAwMDc3MjlDNTA0RTAzMERDMDQwMDAwNENCMDA0MDAyMDRDMzYKKzoxMDA2MDAwMEY0MDQwMDAwMDBFODA0MDBDQ0IzRkMwMzFDQ0MzMzA5NjQKKzoxMDA2MTAwMDAyMUNFQjJEQjVDNDA0Q0NCM0ZDMDMxQ0NDMzMxOTAyNzMKKzoxMDA2MjAwMDFDRUIyREI1QzQwNENDQjNGQzAzMUNDQzMzMEQwMjFDNTUKKzoxMDA2MzAwMEVCMkRCNUM0MDRDQ0IzRkMwMzFDQ0MzMzExMDIxQ0VCNzIKKzoxMDA2NDAwMDJEQjVDNDA0MDA3QjAwODAxQ0FFNzc0NTA1MDAwMDAwN0EKKzoxMDA2NTAwMDA0QzAwNEQzOEIwMEZDMUY2MDdBM0MwMDFDNjA0Q0MwQkIKKzoxMDA2NjAwMDA0MDBDMDJGMjAwNTFGRTAzMEIwMDQwMDgwMjVCMDA0MzYKKzoxMDA2NzAwMDAwQjU1QkIxMDQwNDY5MjYwMTAwMUM2QTJCMDEwMDFDNTMKKzoxMDA2ODAwMDgwMUQwMDAwMUNBOTI1NDUwNTAwRUUzMDAwMDAxQ0FGQjAKKzoxMDA2OTAwMDc3MDEwNTAwMDAwMEFDMjQwNEI0NUYwMTQwMTgwNzlERjkKKzoxMDA2QTAwMDQ4NTUwNEI3NzYwMTAwMUM5Njc2MDEwMDFDNDcxRDAxRDEKKzoxMDA2QjAwMDAwMUNBNDMzMDE2MDE4QTQyRjAxNjAxODY0NzcwMTYwNDYKKzoxMDA2QzAwMDE4MjQ3NzAxNjAxODQ0NzcwMTAwMUM2NDg4MDMwMDFDMUIKKzoxMDA2RDAwMEE0M0YwMTAwMUNBNDNCMDEwMDFDNTM3QjAwQzAxQ0QzQTEKKzoxMDA2RTAwMENGMUIwMDFDNTM0RjAyMDAxQ0RBQ0YwMEMwMUZENTU3OTAKKzoxMDA2RjAwMDBGMDAxQ0QzRDMzNzAwMUNENDUzMEYwMDFDRTAyOTAwN0IKKzoxMDA3MDAwMDAwMUNGNUQ1QjAwNTAwMDAwMDlDNTUwNDc3NTYwMTAwOEIKKzoxMDA3MTAwMDFDNTY1MzAxMDAxQzAwMDAwMDEwMTgwMDAwMDRDMDA0MDcKKzoxMDA3MjAwMEY1NTUwMTAwMUMwMDAwQjQ1NTA0Nzc1NjAxMDAxQzU2MTUKKzoxMDA3MzAwMDUzMDEwMDFDMDAwMDAwMTAxODAwMDAwNEMwMDRDQjJGNUYKKzoxMDA3NDAwMDAxMTgxMENCMkYwMTEwMTBDQjJGMDEwODEwQ0IyRjAxNTcKKzoxMDA3NTAwMDA4MTBDQjJGMDEyMDEwQ0IyRjAxMjgxMENCMkYwMTAwMjgKKzoxMDA3NjAwMDEwODkyNTYxQzIwNDAwMDBFQ0MyMDQwMDAwNTRDMzA0RDcKKzoxMDA3NzAwMDAwMDA1NEMzMDQwMDAwNTRDMzA0MDAwMDYwQzIwNDAwMUQKKzoxMDA3ODAwMDAwRUNDMjA0MDAwMDU0QzMwNDAwMDA1NEMzMDQwMDAwODEKKzoxMDA3OTAwMDU0QzMwNDQwMUM2Q0MwMDQ0MDFDOUNDMDA0QTc3NzU1ODMKKzoxMDA3QTAwMEMzMDQwMDAwQzRDMDA0MjcxREYxQzAwNDAwMDA1NEMzRUEKKzoxMDA3QjAwMDA0MDAwMDU0QzMwNDAwMDA1NEMzMDQwMDAwMkNDNjA0MDkKKzoxMDA3QzAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwNDcKKzoxMDA3RDAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMzcKKzoxMDA3RTAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDRkIKKzoxMDA3RjAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2NTEKKzoxMDA4MDAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDIKKzoxMDA4MTAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwRjYKKzoxMDA4MjAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwRTYKKzoxMDA4MzAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQUEKKzoxMDA4NDAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDAKKzoxMDA4NTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0QjIKKzoxMDA4NjAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwQTYKKzoxMDA4NzAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwOTYKKzoxMDA4ODAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDNUEKKzoxMDA4OTAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2QjAKKzoxMDA4QTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0NjIKKzoxMDA4QjAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwNTYKKzoxMDA4QzAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwNDYKKzoxMDA4RDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDMEEKKzoxMDA4RTAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2NjAKKzoxMDA4RjAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MTIKKzoxMDA5MDAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDUKKzoxMDA5MTAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwRjUKKzoxMDA5MjAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQjkKKzoxMDA5MzAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MEYKKzoxMDA5NDAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0QzEKKzoxMDA5NTAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwQjUKKzoxMDA5NjAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwQTUKKzoxMDA5NzAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDNjkKKzoxMDA5ODAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2QkYKKzoxMDA5OTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0NzEKKzoxMDA5QTAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwNjUKKzoxMDA5QjAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwNTUKKzoxMDA5QzAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDMTkKKzoxMDA5RDAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2NkYKKzoxMDA5RTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MjEKKzoxMDA5RjAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMTUKKzowNDBBMDAwMDAwMkNDNjA0RkMKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cy5paGV4IGIvZmlybXdhcmUvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzAxNmQzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMuaWhleApAQCAtMCwwICsxLDM5MzcgQEAKKzoxMDAwMDAwMDAyMDAwMDAwRENGNTAwMDAwQzAwMDAwMDAwMDAwMDAwMTEKKzoxMDAwMTAwMEZGMUYwMDAwMDEwMDAwMDAwMDAwMDA4ODgyNEQyOTNBMDcKKzoxMDAwMjAwMDAwMDAwNDA0MDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwQUQKKzoxMDAwMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwMjUKKzoxMDAwNDAwMDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwMDMKKzoxMDAwNTAwMDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwN0MKKzoxMDAwNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwRjUKKzoxMDAwNzAwMDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwRDMKKzoxMDAwODAwMEZFRkYwMDAwMDAwMDAwQUMwMjAwMzYzMjAwMDAzNjAwMjcKKzoxMDAwOTAwMDAwMDAwMEE4MDIwMDAwOTIwMDAwMTYxMzAwMDAwMDgwN0IKKzoxMDAwQTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwODMKKzoxMDAwQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREMKKzoxMDAwQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzUKKzoxMDAwRDAwMDAyMDAwMDkwMDAwMDIwMDAwMDAwMDBEODBGODAyODkyNEQKKzoxMDAwRTAwMDAwMDAyMTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyMjAwQUMKKzoxMDAwRjAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjMwMDAwMDAwMEQ4RTQKKzoxMDAxMDAwMDBGNDAyQjkyMDAwMDI0MDAwMDAwMDBEODBGODAyODkyOUUKKzoxMDAxMTAwMDAwMDAyNTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyNjAwNzMKKzoxMDAxMjAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjcwMDAwMDAwMEQ4QUYKKzoxMDAxMzAwMDBGODAyODkyMDAwMDI4MDAwMDAwMDBEODBGODAyODkyMkQKKzoxMDAxNDAwMDAwMDAyOTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyQTAwM0IKKzoxMDAxNTAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMzYwMDAwMDAwMDk4QjAKKzoxMDAxNjAwMDFFODBFOTlBMDAwMDJDMDAwMDAwMDBEODBGODAyODkyMjEKKzoxMDAxNzAwMDAwMDAyRDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyRTAwMDMKKzoxMDAxODAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkYwMDAwMDAwMEQ4NDcKKzoxMDAxOTAwMDBGODAyODkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMDkyNzEKKzoxMDAxQTAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDA5MjAwMDAzMDAwM0EKKzoxMDAxQjAwMDAwMDAwMEQ0MEY4MDAwOTIwMDAwMzQwMDAwMDAwMEQ0NDIKKzoxMDAxQzAwMDBGQzAwMDkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMTkyMjgKKzoxMDAxRDAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDE5MjAwMDAzMDAwMDkKKzoxMDAxRTAwMDAwMDAwMEQ0MEY4MDAxOTIwMDAwMzAwMDAwMDAwMEQ0MTUKKzoxMDAxRjAwMDBGQzAwMTkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMjkyRjYKKzoxMDAyMDAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDI5MjAwMDAzMDAwRDcKKzoxMDAyMTAwMDAwMDAwMEQ0MEY4MDAyOTIwMDAwMTYxMzAwMDAwMDgwM0UKKzoxMDAyMjAwMDAyMDAwMDkwMDAwMDMwMDAwMDAwMDBENDBGMDAwMzkyOTQKKzoxMDAyMzAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDM5MjAwMDAzMDAwQTYKKzoxMDAyNDAwMDAwMDAwMEQ0MEY4MDAzOTIwMDAwMzAwMDAwMDAwMEQ0QjIKKzoxMDAyNTAwMDBGQzAwMzkyMDAwMDAwMDAwMDAwMDBEMDVGM0YwMDM0OTgKKzoxMDAyNjAwMDAwMDAxNjEzMDQwMDAwODA0MkZGRkNCMDAwMDAwMDAwRjQKKzoxMDAyNzAwMDAwMDAwMDg4MTI4MEZEM0EwMDAwMTYxMzAwMDAwMDgwODQKKzoxMDAyODAwMDAyMDAwMDkwMTYxMzE2MTMwMjAxMDA4MDgyOERGREJDM0YKKzoxMDAyOTAwMDAwMDAwMDAwMDAwMDAwODgxMjgwRkQzQTAwMDAwMDAwMEQKKzoxMDAyQTAwMDAwMDAwMEY4MDNDMDAxMzIzODAwMDAwMDAwMDEwMDg0QTMKKzoxMDAyQjAwMDgyNEQyODFBMDAwMDM2MDAwMDAwMDA3NDA5NDAwMDkyQTgKKzoxMDAyQzAwMDAwMDA0RjAwMDAwMDAwRkMwMjAwMDA5MjAwMDA0ODAwMDcKKzoxMDAyRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNEQwMDAwMDAwMDkwMkYKKzoxMDAyRTAwMDBFODAxODkyMDAwMDFCMDMwMDAwMDAwMDA4QzAyMDkyM0UKKzoxMDAyRjAwMDAwMDA4OTAwMDAwMDAwMDAwODAwMjE5MjAwMDAxOTAzOUUKKzoxMDAzMDAwMDAwMDAwMDAwMDg0MDIxOTIwMDAwODYwMDAwMDAwMDAwNkMKKzoxMDAzMTAwMDA4ODUyMTkwMDAwMDlCMDMwMDAwMDBFQzAyQzAyMjkyOUYKKzoxMDAzMjAwMDAwMDA5NDA0MDAwMDAwODAwMjAwMDA5MDAwMDA1ODAwQ0IKKzoxMDAzMzAwMDAwMDAwMEZDMDI0MDE4OUQwMDAwNTEwMDAwMDAwMEQwQTkKKzoxMDAzNDAwMDAyMDAwMDkyMDAwMEUwMDMwMDAwMDA4MDAyMDAwMDkwMjQKKzoxMDAzNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNjIKKzoxMDAzNjAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwNEMwMDAwMDAwMDAwNEUKKzoxMDAzNzAwMDA5QzAyMTkyMDAwMDRBMDAxMjAxMDAwMDA4ODUyMkIwNDUKKzoxMDAzODAwMDE4MDAzNjAwMDAwMDAwRjg3MzhBMDI5OTAwMDA4RTAwMDEKKzoxMDAzOTAwMDZBMDAwMDgwMDIwMDAwQjAwODAwOEUwMDAwMDAwMEY4MzMKKzoxMDAzQTAwMDIzNDAwMTk5MDAwMDAwMDAwMDAxMDBFODAyMDA5MDcyNjMKKzoxMDAzQjAwMDAwMDAxNjEzODAwMTAwODBCMjAwRTlCNjAwMDAwMjA0QkMKKzoxMDAzQzAwMDAwMDAwMDdDMUVDMEU3OUEwODAwMDAwMDAwMDAwMEY4NTIKKzoxMDAzRDAwMDEzNDAwMTM5MDAwMEY2MDMwMDAwMDAwOEI4MDEwMDk0NDIKKzoxMDAzRTAwMDAwMDAxNjEzMDMwMDAwNzgwOTQwMUFCRDAwMDAxNjEzMjAKKzoxMDAzRjAwMDA0MDEwMDgwRTI4MDk3QkMwMDAwMDAwMDAwMDAwMEEwMjMKKzoxMDA0MDAwMEUxMjUwMDM0MDgwMDAwMDAwMDAwMDBGOEIzNDAwMTM5ODUKKzoxMDA0MTAwMDAwMDAwMjA0QjIwMDAwRDgwMjAwMDBCMjAwMDAxNjEzNkYKKzoxMDA0MjAwMDE3MDEwMDgwMDIwMDAwQjAwMDAwMUYwNjAwMTAwMUY4NTQKKzoxMDA0MzAwMDAyMDA2RTkyMDAwMDVCMDAwQTAxMDBDQzAyMDAwMEIyRDQKKzoxMDA0NDAwMDAwMDA3MDAwMDMwMTAwRkMwMjQwMTlCRDA4MDAwMjA0MTYKKzoxMDA0NTAwMDAwMDAwMEY4QTM0MDAxOTkwMDAwMDAwMDAwMDAwMDg0QTMKKzoxMDA0NjAwMDAxQzAyRjMyMDAwMDAwMDAwMDAwMDA5MEYxMDEwMDM0QjQKKzoxMDA0NzAwMDAwMDAwMDAwMDAwMDAwOTQwMUMwMkYzMjAwMDA2MDAwNjYKKzoxMDA0ODAwMDgwMDEwMDgwMTI4MUZDQjYwMDAwMTYxMzA0MDEwMDgwNzgKKzoxMDA0OTAwMDAyQzAyRkJDMDIwMDYwMDBCMDAwMDBBMEYyMEIwMEI5NDcKKzoxMDA0QTAwMDAwMDA2MzAwMDQwMTAwODAwMkMwQjBCQzAwMDA2RTAwQzgKKzoxMDA0QjAwMEEwMDAwMDgwMDIwMDAwOTAwMDAwNjUwMDgwMDEwMDgwMjQKKzoxMDA0QzAwMEYyNEJEMEI2MDAwMDZFMDBBMDAwMDA4MDAyMDAwMDkwNDkKKzoxMDA0RDAwMDAwMDAwMDAwQTAwMDAwMDRGRDRCRDAzNDAwMDA2QjAwQzEKKzoxMDA0RTAwMDgwMDEwMDgwMTI4MUZDQjYwMDAwQzIxMTAwMDAwMEQ4MUIKKzoxMDA0RjAwMDAyMDAwMEQyMDAwMDE2MTMwNDAwMDA4MDAyODA5MkJDQUIKKzoxMDA1MDAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTZFMDAzNjAwN0UKKzoxMDA1MTAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwOTYxMTAwMDAwMEQ4RDIKKzoxMDA1MjAwMDAyMDAwMEQyMDAwMDE2MTMwNDAwMDA4MDAyODA5MkJDN0EKKzoxMDA1MzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDA1QjAwQTEKKzoxMDA1NDAwMDAzMDEwMEZDMDI0MDE4QkQwMDAwODUwMDAzMDAwMEZDMTAKKzoxMDA1NTAwMDAyNDAxOUJEMDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyQ0QKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMDAwODBGMTAxMDAzNDAwMDAwMDAwRTUKKzoxMDA1NzAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwNzUwMDgwMDEwMDgwNUYKKzoxMDA1ODAwMDEyODFGQ0I2MDAwMDE2MTMwNDAxMDA4MDAyQzAyRkJDQ0IKKzoxMDA1OTAwMDAyMDA3NTAwQjAwMDAwQTBGMjBCMDBCOTAwMDA3ODAwNjYKKzoxMDA1QTAwMDA0MDEwMDgwMDJDMEIwQkMwMDAwODMwMEEwMDAwMDgwRjUKKzoxMDA1QjAwMDAyMDAwMDkwMDAwMDdBMDA4MDAxMDA4MEYyNEJEMEI2NkIKKzoxMDA1QzAwMDAwMDA4MzAwQTAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRjYKKzoxMDA1RDAwMEEwMDAwMDA0RkQ0QkQwMzQwMDAwODAwMDgwMDEwMDgwQUEKKzoxMDA1RTAwMDEyODFGQ0I2MDAwMEMyMTEwMDAwMDBEODAyMDAwMEQyNDcKKzoxMDA1RjAwMDAwMDAxNjEzMDQwMDAwODAwMjgwOTJCQzE4MDAwMDAwNjYKKzoxMDA2MDAwMDAwMDAwMEY4NzMwQTAzMzk4MzAwMzYwMDAwMDAwMEMwQzAKKzoxMDA2MTAwMDAyMDAzNjkyMDAwMDk2MTEwMDAwMDBEODAyMDAwMEQyQkQKKzoxMDA2MjAwMDAwMDAxNjEzMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwRkYKKzoxMDA2MzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNzAwMDAzMDEwMEZDRDkKKzoxMDA2NDAwMDAyNDAxOUJEMDAwMDVCMDAwMzAxMDBGQzAyNDAxOEJEMjAKKzoxMDA2NTAwMDA4MDAwMjA0MDAwMDAwRjhBMzQwMDE5OTA4MDAwMDAwMEYKKzoxMDA2NjAwMDAwMDAwMEY4NzM0MDAxMzkwMDAwOEUwMDgwMDEwMDgwMTYKKzoxMDA2NzAwMEUyMDE4MEI2MDAwMDhCMDAwMDAwMDA4MDAyMDAwMDkwQzQKKzoxMDA2ODAwMDA4MDA5MTAzMEMwMDAwRjg1MzQwMDFCOTAwMDA4RDAwRjAKKzoxMDA2OTAwMDgwMDEwMDgwRTIwMTgwQjYwMDAwMTYxMzEyMDAwMDY4OUQKKzoxMDA2QTAwMDAyMDU4MEIwMDAwMEY2MDMwMDAwMDA2QzFGQzBGNjlBM0YKKzoxMDA2QjAwMDAwMDAwMDAwMDAwMDAwMDAwODA1ODAzMDAwMDAwMDAwN0QKKzoxMDA2QzAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwMDAwMDAwMDAwMDEwRTkKKzoxMDA2RDAwMDA4ODAzRDMyMDAwMDAwMDAwMDAwMDBDQzAyMDAwMDMyMjMKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRjcKKzoxMDA2RjAwMDAwMDAwMDE0MDkwMDgwRDIwMDAwMTYxMzgwMDAwMDgwNjIKKzoxMDA3MDAwMDYyODAyRkI2MDAwMDE2MTMwMjAxMDA4MDgyM0E4MEJDN0UKKzoxMDA3MTAwMDAwMDAxNjEzMDYwMTAwODA5MjNBODBCQzAwOTAxNjEzNjgKKzoxMDA3MjAwMDA0MDEwMDgwQTIwRDgwQjAwMDAwMTYxMzEyMDEwMEJDNkQKKzoxMDA3MzAwMDA4QzAyMUIyMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyMTYKKzoxMDA3NDAwMDAyQTAwMDAwMDAwMDAwMDBBOTBEODAzMjAwMDAxNjEzNzYKKzoxMDA3NTAwMDEyMDAwMDU0MDJBNDM4QjIwMDAyMDA4MDAwMDAwMDJDRjUKKzoxMDA3NjAwMDA4MDAzNzMyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NTkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwODAwMDQwODgwNzIzMjAwMDBBMjAwOUYKKzoxMDA3ODAwMDlGMDAwMDVDMDgwMDcyQjI4MzAwQTEwMDgwMDEwMDgwMUQKKzoxMDA3OTAwMDgyQ0Q4NUIwMDAwMEI2MDAwMDAwMDAyQ0Q4QzE4Mjk0NDQKKzoxMDA3QTAwMDAwMDBCNjAwMDAwMDAwMkM4OEMxODI5NDAwMDAxNjEzREYKKzoxMDA3QjAwMDA2MDEwMDgwODI3RDgwQkMwMDBGQUMwMDA0MDEwMDgwMzcKKzoxMDA3QzAwMDgyQ0Q4NUIwMDAwMEFDMDA4MDAwMDA4MDMyODFGQ0I2OTQKKzoxMDA3RDAwMDAwMDAxNjEzMTIwMDAwNjgwMjA1ODBCMDAwMDAwMDAwM0YKKzoxMDA3RTAwMDAwMDAwMDZDMUZDMEY2M0EwMDAwMDAwMDAwMDAwMEZDOTIKKzoxMDA3RjAwMDAyMDAwMTMyMDAwMEFBMDAwNDAxMDBEQzQzNjAzREIzQTYKKzoxMDA4MDAwMDAwMDBGNjAzMDAwMDAwRkMwMjAwMDA5MjE4MDAwMDAwNDcKKzoxMDA4MTAwMDAwMDAwMEY4NzM4QTAzMzlBNzAwMzYwMDAwMDAwMEMwMEEKKzoxMDA4MjAwMDAyMDAzNjkyMDAwMEFFMDA4MDAxMDA4MEYyQzA4NUI2NjIKKzoxMDA4MzAwMDAwMDBCRTAwMDAwMDAwMkM5OEMxODI5NDEwMDBDMzAwOEMKKzoxMDA4NDAwMDg3MDAwMDAwNzkyMTE2QjgwMDAwQzMwMDgwMDEwMDc4RkQKKzoxMDA4NTAwMDM5MDA5MEIwODMwMEMzMDA4NzAwMDA3ODg5Q0Q4NUIwNEYKKzoxMDA4NjAwMDAwMDBCMzAwODAwMDAwODAwMjgwOTdCNjAwMDBCNjAwNTAKKzoxMDA4NzAwMDAwMDAwMDJDODhDMTgyOTQwMDAwQjUwMDgwMDAwMDgwMzgKKzoxMDA4ODAwMDIyQzE4NUI2MDAwMEI2MDAwMDAwMDAyQ0Q4QzE4Mjk0QjkKKzoxMDA4OTAwMDAwMDBDMzAwMDAwMDAwMkM5OEMxODI5NDAwMDBCQzAwM0UKKzoxMDA4QTAwMDgwMDEwMDgwRDJDMTgyQjYwMDAwQzMwMDgwMDEwMDgwQjgKKzoxMDA4QjAwMDcyODBGQ0I2MDAwMDAwMDAwMDE4MDBBODQyM0Q3MjMwQjMKKzoxMDA4QzAwMDAwMDAwMDAwNTQxODA5RkVGMkMwN0MzMDAwMDBFQTAwNkQKKzoxMDA4RDAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwQzUwMDAwMDAwMDgwRTQKKzoxMDA4RTAwMDAyMDAwMDkwMDAwMDE2MTM4MDAxMDA4MDgyQzE4MkI2RDEKKzoxMDA4RjAwMDAwMDBCODAwODAwMDAwODA4MjgwRkNCNjA5MDBDMzAwQzAKKzoxMDA5MDAwMDA0MDAwMEI0MjhCRjE3Qjg4MzAwQzUwMDg3MDAwMEFDRkUKKzoxMDA5MTAwMDg4Q0Q4NUIwMDAwMEMzMDAwNDAwMDA4MEQyRTI4QUIwMTgKKzoxMDA5MjAwMDAwMDAwMDAwMDAxODAwQTg0MjNENzIzMDAwMDBDNTAwMjEKKzoxMDA5MzAwMDU0MTgwOUZFRjJDMDdDOTAwMDAwMDAwMDU0MDAwMEZDMzYKKzoxMDA5NDAwMDAyMDAwMDMyMDAwMDAwMDAwMDE4MDAyMDA3MDAwMDMyMDIKKzoxMDA5NTAwMDgwMDA4MDIwMDAwMDAwODBDMkNEODUzMDAwMDBEQTAwRDkKKzoxMDA5NjAwMDBCMDAwMDgwMDIwMDAwQjAxODAwMDAwMDAwMDAwMDc4QkEKKzoxMDA5NzAwMDc5QTExNjM4MjAwMEVBMDAwNDAwMDA4MDgyOEQ5N0JDMUYKKzoxMDA5ODAwMDAwMDBEMTAwODAwMTAwODA2MjgwRkNCNjgzMDBEMTAwQUQKKzoxMDA5OTAwMDg3MDAwMDc4ODlDRDg1QjAwMDAwQ0QwMDgwMDAwMDgwMDAKKzoxMDA5QTAwMDAyODA5N0I2MDAwMEQxMDA4MDAxMDA4MDEyODA5N0I2QzcKKzoxMDA5QjAwMDAwMDBEMTAwODAwMTAwODA3MkMxODVCNjEwMDAwMDAwRTcKKzoxMDA5QzAwMDAwMDAwMDc4Nzk2MTE2MzgwMDAwRDgwMDA0MDEwMDgwMkEKKzoxMDA5RDAwMDMyODA5N0JDMDAwMEVBMDAwMDAwMDAyQ0I4QzE4Mjk0NkQKKzoxMDA5RTAwMDAwMDBEODAwODAwMTAwODA1MjgwRkNCNjAwMDBEODAwRDIKKzoxMDA5RjAwMDgwMDAwMDgwNzJDMTg1QjYwMDAwRDgwMDgwMDEwMDgwQjAKKzoxMDBBMDAwMDAyQzE4NUI2MDAwMEQ4MDA4MDAxMDA4MEQyQzE4NUI2NDEKKzoxMDBBMTAwMDE4MDAwMDAwMDAwMDAwNzg3OUUxMTYzODAwMDBEODAwQzYKKzoxMDBBMjAwMDA0MDEwMDgwMzI4MDk3QkMwMDAwRUEwMDAwMDAwMDJDMjYKKzoxMDBBMzAwMEM4QzE4Mjk0MDAwMDAwMDAwMDAwMDAwNDA4MDAwNDMyRDUKKzoxMDBBNDAwMDAwMDBFQTAwMDAwMDAwMkNBOEMxODI5NDA4MDAwMDAwMDkKKzoxMDBBNTAwMDAwMDAwMDc4NzkyMTE3MzgwMDAwRUEwMDA0MDAwMDgwQzcKKzoxMDBBNjAwMDMyODA5N0JDMDAwMEVBMDAwNDAxMDA4MDIyODA5N0JDMUQKKzoxMDBBNzAwMDFGMDAwMDAwMDAxMjAwMDg4OUNENzIzMDA1MDAwMDAwNDAKKzoxMDBBODAwMDAwMTIwMDAwQjlEQzE3MzgwMDAwMDAwMDAwMDAwMEE4QzgKKzoxMDBBOTAwMDIyMDA5MDM3MDAwMEVBMDA4MDAwODY4MDIyMjQ3Q0I2ODUKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwNzgwOTA1ODAzMDAwMDAxNjEzRTcKKzoxMDBBQjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwNzQKKzoxMDBBQzAwMDkyQkE5N0JDMDAwMDE2MTMxMjAwMDA2ODAyMDU4MEIwQUQKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMjAwMDBFODAwRkQKKzoxMDBBRTAwMDA0MDEwMERDNDM2MDNEQjMwMDAwRjYwMzAwMDAwMEZDOUQKKzoxMDBBRjAwMDAyMDAwMDkyMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5MTkKKzoxMDBCMDAwMEU1MDAzNjAwMDAwMDAwQzAwMjAwMzY5MjAyMDAwMDAwM0UKKzoxMDBCMTAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0QUUKKzoxMDBCMjAwMDA5MDA4MEQyMDAwMEYxMDAxMjAxMDA2MDA4NDAyM0IyRTkKKzoxMDBCMzAwMDMyMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNzAKKzoxMDBCNDAwMDAwMDAwMDE0MDkwMDgwRDIwMDgyMDAwMDAwMDAwMDA4QUMKKzoxMDBCNTAwMDA4ODAzNjMyMDAwMEUxMDAwMDAwMDA2NDFGNDBGNjlBNzEKKzoxMDBCNjAwMDAwMDAxNjEzMTIwMDAwMjQwODAwMjNCMjAwMDAxNjEzMjAKKzoxMDBCNzAwMDEyMDAwMDIwMDhDMDIzQjIwMDAwMTYxMzEyMDAwMDE4NTMKKzoxMDBCODAwMDA4ODAyM0IyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyRDcKKzoxMDBCOTAwMDAwMDBGODAwMDQwMDAwREM0MzYwM0RCMzE4MDAwMDAwRDIKKzoxMDBCQTAwMDAwMDAwMEY4NzM4QTAzMzlGNDAwMzYwMDAwMDAwMEMwMkEKKzoxMDBCQjAwMDAyMDAzNjkyMDAwMDAwMDAwMDAwMDBGQzAyMDA4NTMyQjYKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwOTgKKzoxMDBCRDAwMDAwMDAwMEQwMDIwMDAwMzIwMEMwMDcwMTE4MDEwMDBDMjQKKzoxMDBCRTAwMEE4Q0QzRUIyMDAwMEY4MDAxMjAwMDAzODAyODA4MUIyQTkKKzoxMDBCRjAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwODIzMjAwMDAwMDAwMDMKKzoxMDBDMDAwMDAwMDAwMDMwMDI0MDgyMzIwMDAwMDAwMDAwMDAwMDM0OEEKKzoxMDBDMTAwMDAyMDA4NjMyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyODIKKzoxMDBDMjAwMDAwMDAwMDAwMDAwMDAwNUMxRkMwRjUzQTAwMDAwMDAwNUEKKzoxMDBDMzAwMDAwMDAwMDc4MDkwNTgwMzAwMDAwMTYxMzAyMDEwMDgwRDIKKzoxMDBDNDAwMDgyQkE5N0JDMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDQzYKKzoxMDBDNTAwMDAwMDBGNjAzMTIwMTAwNjgwMjA1ODBCMDAwMDAxNjEzQzAKKzoxMDBDNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMTgwMDc4RTIKKzoxMDBDNzAwMDA5MDA3MjMyMDAyMzBBMDEwNDAxMDA4MEEyQ0Q4MkIwNzMKKzoxMDBDODAwMDAwMDAwQjAxMDAwMDAwMDAwOTAwMDA5MjAwMDAxNjEzOTQKKzoxMDBDOTAwMDlGMTYwMDAwMjlDMTcyQkMwMDAwMDAwMDAwMTgwMDAwNkYKKzoxMDBDQTAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDA3MDA4MjMyMkYKKzoxMDBDQjAwMDAwMDAwMDAwMDAyODAwMDAwNzgwOTczMjEwMDAwMDAwQUMKKzoxMDBDQzAwMDAwMzAwMDAwMTcyMDkwMzkwMDAwMDAwMDAwMzgwMDAwQkMKKzoxMDBDRDAwMDA3QzA4MjMyMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyOEQKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAxNDAxRjYKKzoxMDBDRjAwMDgwMDEwMDgwQTJDMTgyQjYwMDAwMTUwMTAwMDgwMDAwM0EKKzoxMDBEMDAwMDU3MDA4MDk3MDUwMDAwMDAwMDA4MDAwMDA3QTAwNDM5ODQKKzoxMDBEMTAwMDAwMDAxNjEzMDQxMDAwMDAwNzQwODJCMjAwMDAwMDAwMUIKKzoxMDBEMjAwMDAwMTgwMDAwMDcwMDg2MzIwMDAwMTYxMzEyMDAwMDUwNjEKKzoxMDBEMzAwMEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NTUKKzoxMDBENDAwMDAwMDAxNjEzMTIwMDAwNjgwMjA1ODBCMDAwMDAwMDAwQzkKKzoxMDBENTAwMDAwMDAwMDc4MDkwNTgwMzAwMDAwMTYxMzAyMDEwMDgwQjEKKzoxMDBENjAwMDgyQkE5N0JDMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDQTUKKzoxMDBENzAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwODBCMjAwMDBGNjAzMDMKKzoxMDBEODAwMENBMDEwMDA4RTg4MTgwOTQwMDAwMDAwMDAwMDAwMDgwOTMKKzoxMDBEOTAwMDAyNDU5MDMwMDAwMDE2MTMwNDAxMDA4MDEyMDAyOEJDQTgKKzoxMDBEQTAwMDAwMDAxNjEzMTIwMTAwQkMwOEMwMjFCMjA4MDAwMDAwQTgKKzoxMDBEQjAwMDAwMDAwMEY4OTM0MDAxMzkxMDAwMDAwMDU0MDAwMEZDQ0UKKzoxMDBEQzAwMDgyNEQ5MDM2MDAwMDE2MTMwMjAwMDA4MDQyQzAyRkJDRjYKKzoxMDBERDAwMDAwMDAyNTAxRjAwMTAwRDgwMjAwMDBCMjAwMDAwMDAwNzAKKzoxMDBERTAwMDYyMDQwMUE4MDJDMDZFMzIwMDAwMDAwMDAwMDQwMTAwOEQKKzoxMDBERjAwMDU5QzA2RTM3MDAwMDAwMDAwMDA0MDE3ODE5QzA2RTNBMzcKKzoxMDBFMDAwMDAwMDAwMDAwNEUwNDAxRUMwNkJEOTczMDAwMDAwMDAwMTkKKzoxMDBFMTAwMEUwMDAwMEY0MUU0MEVGM0EwMDAwMTYxMzA0MTkwQjgyQTQKKzoxMDBFMjAwMDAyQzA3Q0JDMDAwMDAwMDAwMDE4MEJDRTA3NDAwMDMyNUUKKzoxMDBFMzAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwMDkzMjAwMDAxNjEzMDcKKzoxMDBFNDAwMDA0MDEwMDgwMDIwMDM2QkMwMDAwMDAwMDAwMDgwMDAwMjEKKzoxMDBFNTAwMDc3QzAyOTM3MDAwMDE2MTMwNDEwMDAwMDE3M0Q5MEJBMjAKKzoxMDBFNjAwMDAwMDAwMDAwMDAxODAwMDAwNzgwRjQzMjAwMDAxNjEzOTQKKzoxMDBFNzAwMDEyMDAwMDQwRjJDMTM4QjQwQjAwMDAwMDAwMDAwMDEwNjYKKzoxMDBFODAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA4M0QyNkQKKzoxMDBFOTAwMDAwMDAwMDAwMDAwMDAwRkMzMkMwMkYzMDAwMDAwMDAwMDUKKzoxMDBFQTAwMDAwMDAwMDEwMDg4MDNEMzIxODAwMzYwMDAwMDAwMEY4RjUKKzoxMDBFQjAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyQjEKKzoxMDBFQzAwMDAwMDAxNjEzMDQwMTAwODAwMjgwMkRCQzAwMDBDRTAxM0EKKzoxMDBFRDAwMDgwMzgwMDgwMjJDMDcyQjYwMDAwM0UwMTEyMDAwMEM4QjcKKzoxMDBFRTAwMDAyMDAyMEIyMDAwMDQ1MDExMjAxMDA1QzA4ODAyMEIyMUYKKzoxMDBFRjAwMDAwMDAxNjEzMTIwMDAwNjAwMjgwMkNCMjE4MDAwMDAwREYKKzoxMDBGMDAwMDAwMDAwMEY4NzM4QTAzMzkzQjAxMzYwMDAwMDAwMEMwN0UKKzoxMDBGMTAwMDAyMDAzNjkyMDAwMDAwMDAwMDAwMDBGODFGODBGRjNBMzcKKzoxMDBGMjAwMDAwMDAwMDAwMDAwMDAwRkMzMjAwODUzMDAwMDBBMzAxM0EKKzoxMDBGMzAwMDA0MDAwMDgwNDI2MDNEQjMxODAwMDAwMDAwMDAwMEY4OEIKKzoxMDBGNDAwMDczOEEwMzM5NDEwMTM2MDAwMDAwMDBDMDAyMDAzNjkyNjYKKzoxMDBGNTAwMDA4MDAwMDAwMDAwMDAwMDA4OENEODUzNzAwMDAwMDAwNzgKKzoxMDBGNjAwMDAwMDAwMDIwMDgwMDcyMzIwMDAwMDAwMDAwMDgwMDI0ODkKKzoxMDBGNzAwMDA4MDA3MjMyMDAwMDE2MTMwNDEwMDA2QzA4MDA3MkIyRjAKKzoxMDBGODAwMDAwMDAwMDAwMDAxODAwNEMwODAwNzIzMjAwMDAxNjEzMjgKKzoxMDBGOTAwMDA0MjAwMDE4MDgwMDcyQjIwMDAwMDAwMDAwMzAwMDI4OTEKKzoxMDBGQTAwMDA4MDA3MjMyMDAwMDE2MTMwMjAwMDA4MDgyQkQ4MkJDNkQKKzoxMDBGQjAwMDAwMDAwMDAwMDAyODAwMzAwODAwNzIzMjAwMDAwMDAwMkQKKzoxMDBGQzAwMDAwMDAwMDYwMDg4MDgyMzIwMDAwNTYwMTA2MDAwMDgwQTgKKzoxMDBGRDAwMDYyQTA4MkJDMDAwMDE2MTM5RjNDMDAxNDI4ODA3MkJDRTMKKzoxMDBGRTAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMjA3MDAwMDAwQkIKKzoxMDBGRjAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMTYxMzA0MTAwMDAwQTkKKzoxMDEwMDAwMDA3MDA4MkIyMDAwMDAwMDBDQTE5MDAwMDA3NDA4MjMyQzcKKzoxMDEwMTAwMDAwMDAxNjEzMTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwQjYKKzoxMDEwMjAwMDAwMDAwMEQ4MDI0MDAwMzIwMDAwN0QwMTA0MzgwMDc4NDIKKzoxMDEwMzAwMEQ5QzU3MkIwMDAwMDVBMDE4MDAxMDA4MDAyODA5N0I2QzUKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMDAwRjg4MjgwMkYzNDAwMDA1QzAxRTYKKzoxMDEwNTAwMDgwMDEwMDgwMTI4MDk3QjYwMDAwMDAwMDAwMDAwMEY4QjgKKzoxMDEwNjAwMDkyODAyRjM0MDAwMDE2MTMwNDAxMDA4MDAyNDAyREJDMzIKKzoxMDEwNzAwMDA0MDAwMDAwMDAzODAwM0NCODFDMTczODAwMDAwMDAwRDUKKzoxMDEwODAwMDAwMDAwMDNDMjhDMDgzMzcwMDAwMDAwMDAwM0EwMDJDMUMKKzoxMDEwOTAwMDA4QzA3MjMyMDAwMDAwMDAwMDAwMDAxQ0I4RTA4MzNBNzMKKzoxMDEwQTAwMDAwMDAwMDAwQ0IyOTAwMjAwNzAwMDAzMjAwMDA3QzAxNzYKKzoxMDEwQjAwMDA0MDAwMDgwMDJDMDgxQkMwMDAwMDAwMDAwMDAwMDM0NzkKKzoxMDEwQzAwMDc4QTA4MTNFMDAwMDAwMDAwMDAwMDAxQ0Q4RTA4MTNDQjgKKzoxMDEwRDAwMDAwMDA2QTAxMDYzQTAwODBCMjVDODNCQzAwMDAwMDAwOTgKKzoxMDEwRTAwMDAwM0EwMDAwODlDMTcyMzcwNzAwNjkwMTJCMDEwMDA0MzIKKzoxMDEwRjAwMDc5MEEwNEI5MDAwMDAwMDBDQjAwMDAwNDE5NDE5MDM0QzMKKzoxMDExMDAwMDAwMDA2RDAxMDAzQTAwMkMwNzAwMDA5MjAwMDAwMDAwNzIKKzoxMDExMTAwMDAwM0EwMDJDRDdFMDcyM0MwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDExMjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwNDA5MDAwMDMyNDUKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwNzY0ODMzMjAwMDAwMDAwOEYKKzoxMDExNDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMTYxMzA0MTAwMDAwQTEKKzoxMDExNTAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyRkIKKzoxMDExNjAwMDAwMDA4QzAxMDQwMDAwMjhEOEEwODJCQzAwMDAxNjEzRTcKKzoxMDExNzAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDExODAwMEQ4MjA4MDNBMDAwMDc3MDEwNDAwMDA4MDcyODAyREJDRDYKKzoxMDExOTAwMDAwMDAxNjEzMTIwMDAwNDQxMkU0MzhCMjAwMDA3ODAxNzcKKzoxMDExQTAwMDAwMDAwMEQ4MTI4MDJEOUEwMDAwNzUxMjAwMDAwMDA0ODMKKzoxMDExQjAwMEY5NDE5MEY0MDAwMDdBMDEwNDAwMDAxOEQ4QTA4MUJDMjUKKzoxMDExQzAwMDAwMDA2MjAxMDAwMDAwNkNEOEUwODY5QTAwMDAyMDEyNDYKKzoxMDExRDAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwNjIwMTAwMDAwMDMwOTEKKzoxMDExRTAwMDA4MDAwMDkyMDAwMDAwMDBDQjE5MDAyMDA3MDAwMDMyMjgKKzoxMDExRjAwMDA3MDA3RjAxMkIwMTAwMDQ3OTBBMDJCOTAwMDAwMDAwRkEKKzoxMDEyMDAwMENCMDAwMDA0MTk0MTkwMzQwMDAwMDAwMDREMDAwMDAwQTQKKzoxMDEyMTAwMEE3QTA4MTNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyMDcKKzoxMDEyMjAwMDAwMDAxNjEzMDQxMDAwMDAwN0MwODZCMjAwMDAwMDAwODIKKzoxMDEyMzAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwOEMwMTA0MDAwMDI4NjAKKzoxMDEyNDAwMEQ4QTA4MkJDMDAwMDE2MTMwNDAxMDA4MDYyNjA4M0JDMzkKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDBEODIwODAzQTAwMDA4OTAxNTIKKzoxMDEyNjAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMTYxMzEyMDAwMDQ0QTAKKzoxMDEyNzAwMDEyRTQzOEIyMDAwMDhBMDEwMDAwMDBEODEyODAyRDlBRDIKKzoxMDEyODAwMDAwMDA3NTEyMDAwMDAwMDRGOTQxOTBGNDAwMDAyMDEyRTMKKzoxMDEyOTAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwN0QwMTAwMDAwMDMwQjUKKzoxMDEyQTAwMDA4MDAwMDkyMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2NzQKKzoxMDEyQjAwMDAwMDAwMDAwMDAwMDAwMDRGOTQxOTAzNDAwMDAxNjEzMDMKKzoxMDEyQzAwMDEyMDAwMDQ0MTJFNDM4QjIxODAwMzYwMDAwMDAwMEY4QTIKKzoxMDEyRDAwMDczMEEwM0Y5MDAwMDE2MTMwNDAwMDA4MDAyODAyREJDN0QKKzoxMDEyRTAwMDAwMDAwMDAwMDAxODAwMDQwOTgwNzMzMjAwMDAwMDAwQjQKKzoxMDEyRjAwMDAwMjgwMDA4ODk4MDczMzcwMDAwMDAwMDAwMDAwMDgwOEIKKzoxMDEzMDAwMDA3MDA4NjMyNDEwMDAwMDAwMDA2MDA4QzA3MDAzNjMyREMKKzoxMDEzMTAwMDAwMDA5ODAxMjkwODAwODAwN0MwODVCMjAwMDA5QjAxRTkKKzoxMDEzMjAwMDI4MTAwMDhDMDcwMDAwQjIwMDAwOUMwMTAwMTIwMDg0MEQKKzoxMDEzMzAwMDA3MDAwMDkyMDAwMDAwMDAwMDEwMDA4Q0Y3RTA4MjNBRTUKKzoxMDEzNDAwMDAwMDA5QjAxMjgxODAwODAwNzQwOTBCMjAwMDA5QzAxMUIKKzoxMDEzNTAwMDAwMTIwMDg0MDcwMDAwOTIwMDAwMDAwMDAwMTIwMDg0QzgKKzoxMDEzNjAwMDI3RTQ4MjMyMDAwMDAwMDAwMDAwMDA3ODM5MDA4NTMwNTgKKzoxMDEzNzAwMDAwMDAxNjEzMDQwMTAwODBGMjhCOTdCQzAwMDBBMTAxNEQKKzoxMDEzODAwMDA0MDAwMDgwNDI2MDNEQjMxODAwMDAwMDAwMDAwMEY4MzcKKzoxMDEzOTAwMDczOEEwMzM5OUMwMTM2MDAwMDAwMDBDMDAyMDAzNjkyQjcKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwODUzMjAwMDAxNjEzNUYKKzoxMDEzQjAwMDEyMDAwMDVDNTI4MTJDQjQwMDAwMDAwMDAwMDAwMEQ4MzQKKzoxMDEzQzAwMDAyODAwMTMyMDAwMDAwMDAwMDAwMDA4MDAyMDAzQjMyNzkKKzoxMDEzRDAwMDA4NDBBNTAxRjAwMTAwMDgwODgwMzZCMjAwMDAwMDAwQjYKKzoxMDEzRTAwMDAwMDQwMTM4MDhDMDZFMzIwMDAwMDAwMEUwMDAwMEY0ODQKKzoxMDEzRjAwMDFFNDBFRjNDMDAwMEFDMDEwQjAxMDA4QzA4MDAwMEIyNjUKKzoxMDE0MDAwMDAwMDBBOTAxRjIwMTAwODAwMjAwMDBCMDAwMDAwMDAwMEQKKzoxMDE0MTAwMDAwMDAwMEYwMEUwMDNBMzIwMDAwQkUwMUUyMDAwMDgwNDEKKzoxMDE0MjAwMDBFODA4MzkyMDAwMEFDMDFGMjAxMDA3OEM5M0IzQUJDMDcKKzoxMDE0MzAwMDAwMDBCNjAxMDIwMTAwODA4MjgwOTdCQzAwMDAwMDAwMUQKKzoxMDE0NDAwMDAwMDAwMEE4MDIwMEU4MzIwMDAwQjEwMTA0MDAwMDgwQTIKKzoxMDE0NTAwMDIyQTIyQUJDMDAwMEI1MDEwNDE5MEI4MjAyQzA3Q0JDODgKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwOEMxOEMwODgzQTAwMDAwMDAwNTYKKzoxMDE0NzAwMDAwMDAwMEE4MTI4MDJBM0EwMDAwMDAwMDAwMDAwMEE4MjYKKzoxMDE0ODAwMDAyQkQyQTMwMDAwMEFGMDEwNDAxMDA4MEUyQTAyQUJDQTYKKzoxMDE0OTAwMDAwMDBCQjAxMDIwMDAwODA4MkMwODhCQzAwMDAwMDAwODgKKzoxMDE0QTAwMEUyMDAwMDA4MDgwMDAwMzIwMDAwMDAwMDAwMDAwMEE4NzAKKzoxMDE0QjAwMDAyODA4ODMyMDAwMDE2MTMwNDE5MEI4MjEyQzA3Q0JDMTMKKzoxMDE0QzAwMDAwMDAwMDAwMDAxODBCQ0UwNzAwMDAzMjAwMDBGNjAzRjkKKzoxMDE0RDAwMDAwMDAwMERDMDMwMDAwOTIwMDAwMDAwMDAwMDAwMDM4NjMKKzoxMDE0RTAwMDA4ODAyQTMyMDAwMDAwMDAwMDAwMDBGMDBFMDAzQTMyQUUKKzoxMDE0RjAwMDAwMDAwMDAwRTIwMDAwODAwRTgwMkEzMjAwMDAwMDAwQTAKKzoxMDE1MDAwMDAwMDAwMEE4MDI4MDg4MzIwMDAwMTYxMzA0MTkwQjgyMjQKKzoxMDE1MTAwMDEyQzA3Q0JDMDAwMDAwMDAwMDE4MEJDRTA3MDAwMDMyOTcKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwREMwMzAwMDAzMjAwMDAxNjEzODEKKzoxMDE1MzAwMDA0MDAwMDgwMjI3QUU4QkEwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDE1NDAwMDA3ODA4MzMyMDAwMDAwMDAwMDAwMDAwMDc5QzAyOTM3QzYKKzoxMDE1NTAwMDYwMjAwMDAwMDAwMDAwMDA4OTBEOTAzQTAwMDAwMDAwQUIKKzoxMDE1NjAwMENBMDEwMEQ4MTI4MDJEM0EwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDE1NzAwMDA3MDAwMTMyMDAwMDAwMDAwMDA4MDAwMDA3MDA5MDMyNjAKKzoxMDE1ODAwMDAwMDAwMDAwMDAxMDAwMDAwNzQwRTgzMjAwMDAwMDAwRUEKKzoxMDE1OTAwMDAwMTgwMDAwMDc4MEU4MzIwMDAwMDAwMDAwMDAwMEZDOTYKKzoxMDE1QTAwMDAyMDAwMDMyMDAwMEY2MDMxMjAxMDA0OEYyQzEzOEI0MTQKKzoxMDE1QjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQzcKKzoxMDE1QzAwMDA0MDEwMDgwMDI0MDJEQkMwMDAwMTYxMzA0MDEwMDgwQkQKKzoxMDE1RDAwMDAyODAyREJDMDAwMDE2MTM4MDAwMDA4MDcyODAyRkI2QTAKKzoxMDE1RTAwMDAwMDAwMDAwMDAzMDAwNzgwODgwNzIzMjA0MDAwMDAwMjMKKzoxMDE1RjAwMDAwMzgwMDU0QTg1QzE2MzgwQjAwMDAwMDAwMzgwMDJDOUUKKzoxMDE2MDAwMEE4REMxNjM4MTQwMDAwMDAwMDAwMDAxQzg4NEQ4NTNBNDQKKzoxMDE2MTAwMDIyMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyODUKKzoxMDE2MjAwMDAwMzgwMDE0QTk5Qzg3RDkwMDAwMDAwMDAwMDAwMDIwQTkKKzoxMDE2MzAwMDA4MDA3MjMyMDAwMDAwMDAwMDA4MDAyNDA4MDA3MjMyMjYKKzoxMDE2NDAwMDAwMDAwMDAwMDAxMDAwNkMwODAwNzIzMjAwMDAwMDAwNzIKKzoxMDE2NTAwMDAwMTgwMDRDMDgwMDcyMzIwMDAwMTYxMzA0MjAwMDE4MTUKKzoxMDE2NjAwMDA4MDA3MkIyMDAwMDAwMDAwMDI4MDAzMDA4MDA3MjMyNEEKKzoxMDE2NzAwMDAwMDAxNjEzOUYzQzAwMTQxODgwNzJCQzAwMDBFNTAxQTYKKzoxMDE2ODAwMDA0MDAwMDgwMDI0MDgxQkMwMDAwMDAwMDAwMDAwMDE0NDMKKzoxMDE2OTAwMDE4NDA4MTNDMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyRjYKKzoxMDE2QTAwMDA3MDAwMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAxNjEzRkYKKzoxMDE2QjAwMDA0MTAwMDAwMDcwMDgyQjIwMDAwMDAwMENBMTkwMDAwRjgKKzoxMDE2QzAwMDA3NDA4MjMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MDUKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwQkUKKzoxMDE2RTAwMDAwMDAwMDY0NzhDMDI5MzcwMjEwMDAwMDAwMDAwMDY0ODgKKzoxMDE2RjAwMDg4NEQ4NjNBMDAwMDAwMDAwMDAwMDA4MDA4MDAwMDMyOUIKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwNDAwODAwMDAzMjAwMDAwMDAwNUYKKzoxMDE3MTAwMDREMDAwMDAwNzdBMDgxM0UwMDAwMDAwMDAwMDgwMDAwOUUKKzoxMDE3MjAwMDA3NDA4NjMyMDAwMDE2MTMwNDEwMDAwMDA3QzA4NkIyN0UKKzoxMDE3MzAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDAwMDAyMTIKKzoxMDE3NDAwMDA0MDAwMDFDRDhFMDgxQkMwMDAwMTYxMzA5MDEwMDgwRDEKKzoxMDE3NTAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDA2NEQ4NjA4NjNBN0IKKzoxMDE3NjAwMDAwMDBGNDAxMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzRkMKKzoxMDE3NzAwMDEyMDAwMDQwMDJDMDM4QjIwMDAwRkMwMTAwMDAwMEQ4OTYKKzoxMDE3ODAwMDEyODAyRDlBMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0RTYKKzoxMDE3OTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDBGQTAxOEYKKzoxMDE3QTAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwMUYKKzoxMDE3QjAwMEEyODAyRkI2MDAwMEY1MDE2NzAwMDBGOEEyODAyRkI1QzcKKzoxMDE3QzAwMDAwMDAxNjEzMTIwMDAwRTgwMkMwMjFCMjAwMDAxNjEzMzgKKzoxMDE3RDAwMDA0MDEwMDgwNzI4MDJEQkMwMDAwMDAwMDAwMDAwMEQ4RDEKKzoxMDE3RTAwMDAyNDAwMDMyMDAwMEZFMDEwNDAwMDAxOEQ4QTA4MUJDQjUKKzoxMDE3RjAwMDAwMDBFQTAxMDAwMDAwNkNEOEUwODY5QTAwMDBDOTEwRTEKKzoxMDE4MDAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwRUEwMTAwMDAwMDMwRDIKKzoxMDE4MTAwMDA4MDAwMDkyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MTQKKzoxMDE4MjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwNjAyRjEKKzoxMDE4MzAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwOEUKKzoxMDE4NDAwMEEyODAyRkI2MDAwMDAxMDI2NzAwMDBGOEEyODAyRkI1MjkKKzoxMDE4NTAwMDAwMDAxNjEzMTIwMDAwRTgwMkMwMjFCMjAwMDAxMjAyQkMKKzoxMDE4NjAwMDA0MDEwMDgwMDIwMDg0QkMwMDAwMDAwMDAwMDAwMEQ0REQKKzoxMDE4NzAwMDAyNDAwMDMyMDAwMDAwMDAwMDAwMDBBNDIyNDA4NTNBMkYKKzoxMDE4ODAwMDA0MDAwMDAwMDAxODAwNDA4OENENzQzNjAwMDAwMDAwRkQKKzoxMDE4OTAwMDAwMDAwMDQwMjgwMDg0MzcwMDAwMDAwMDAwMDAwMEQ0NTEKKzoxMDE4QTAwMDAyMDAwMDMyMTQwMDEyMDIwNDAwMDAxQzg4MEQ4NEJDRTcKKzoxMDE4QjAwMDAwMDAxNjEzMDkwMTAwODAwMjAwMDBCMDAwMDAwMDAwQzMKKzoxMDE4QzAwMDAwMDAwMDc4MDk2MTg1M0E4MDAwMTYxMzA2MDEwMDgwNDcKKzoxMDE4RDAwMDgyOEQ5N0JDMDAwMDAwMDAwMDAwMDA2NEQ4NjA4NjNBNEEKKzoxMDE4RTAwMDAwMDBGQzAxMDAwMDAwRDgwMjQwMDA5MjAwMDAxNDAyMzkKKzoxMDE4RjAwMDA0MDAwMDE4RDhBMDgxQkMwMDAwMTYwMjAwMDAwMDZDOTMKKzoxMDE5MDAwMEQ4RTA4NjlBMDAwMEM5MTAwMDAwMDA0NDA4ODAyREYyM0IKKzoxMDE5MTAwMDAwMDAwMDAwMDAwMDAwMzAwODAwMDAzMjAwMDAwMDAwNUQKKzoxMDE5MjAwMDAwMDAwMEQ0MDI0MDAwMzIwMDAwMDAwMDAwMDAwMEE0Q0IKKzoxMDE5MzAwMDIyQzA4MjNBMDAwMDAwMDAwMDAwMDAzQ0I4NjA4NTNDRjQKKzoxMDE5NDAwMDA0MDAxQzAyODEwMDAwNjA4OENENzRCNjAwMDAwMDAwMTUKKzoxMDE5NTAwMDAwMDQwMDI4RjhBMDc1M0MwMDAwMUQwMjAwMDgwMDc0NzcKKzoxMDE5NjAwMDA4ODA3NTkyMDAwMDAwMDAwMDA4MDAyOEY4QTA3NTNDNkYKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwMjgwOEExODIzQzAwMDAwMDAwRDgKKzoxMDE5ODAwMDAwMDAwMEE0RjI2MDJBM0EwMDAwMDAwMDAwMDgwMDQ4QUQKKzoxMDE5OTAwMDA4MDA3NTMyMDAwMDAwMDAwMDIwMDA3QzA4ODA3NTMyQ0QKKzoxMDE5QTAwMDA5MDAyMzAyMDQxQTAwNzA4OENENzRCMDA5MDAwMDAwRjkKKzoxMDE5QjAwMDAwMUEwMDRDODdDRDc0MzE3RjAwMDAwMDAwMDAwMDY0RTUKKzoxMDE5QzAwMDg4NEQ4NjMxMDAwMDAwMDAwMDAwMDA2NDI4NDA4NjNBRkYKKzoxMDE5RDAwMDIzMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRDEKKzoxMDE5RTAwMDAwMDAwMDE0MDk4MDgyRDIwQzAwMDAwMDAwMDAwMDEwRUEKKzoxMDE5RjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA4NEQyRjEKKzoxMDFBMDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwOEEKKzoxMDFBMTAwMDAwMTAwMDAwMDc0MDg2MzIwMDAwMDAwMDAwMDAwMEQ4REYKKzoxMDFBMjAwMDAyODAwMDMyMDAwMDAwMDAwMDEwMDAwMDU3NjE4NjNBN0EKKzoxMDFBMzAwMDAwMDAzMDAyMTIwMDAwQzgwMjAwMjBCMjAwMDAzMzAyOTEKKzoxMDFBNDAwMDEyMDEwMDVDMDg4MDIwQjIwMDAwMTYxMzEyMDAwMDYwMzIKKzoxMDFBNTAwMDAyODAyQ0IyMDAwMDQwMDEyQTAxMDBENDAyMDAwMEIyMzIKKzoxMDFBNjAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTAwMDA0MTAxQUIKKzoxMDFBNzAwMDAwMDAwMEY4MUY4MEZGOUEwMDAwMDAwMDAwMDAwMEQ0NjIKKzoxMDFBODAwMDAyNDAwMDMyMDgwMDAwMDAwMDAwMDAwMDg4Q0Q4NTM3QzkKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMUNFOEExODIzRTAwMDAwMDAwRTEKKzoxMDFBQTAwMDAwMDAwMEE0MjI0MDg1M0EwMDAwMDAwMDAwMDgwMDUwMTkKKzoxMDFBQjAwMDA3ODA4NDMyMDAwMDNBMDIwNDAxMDA4MDcyQTA4MkJDRDgKKzoxMDFBQzAwMDAwMDAwMDAwMDAxQTAwNENDN0UxNzQzMjAwMDAwMDAwNjIKKzoxMDFBRDAwMDAwMDAwMDY4MDhFMTgxM0EwMDAwM0QwMjkwMDEwMDc4QjIKKzoxMDFBRTAwMEY5QTE4NkJBMDAwMDAwMDAwMDAwMDA3ODE5ODA5NzNBM0EKKzoxMDFBRjAwMDAwMDAwMDAwMDAyMDAwNTgwNzgwOTczMjAwMDAwMDAwMUUKKzoxMDFCMDAwMDAwMDAwMEQ4MDI4MDAwMzIwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDFCMTAwMDA3MDA4NDMyMDAwMDAwMDA0MDA4MDAwMDU3MjE4MDNBOEUKKzoxMDFCMjAwMDAwMDA0MTAyMTIwMDAwNENGMkMxMzhCNDAwMDAwMDAwNzUKKzoxMDFCMzAwMDAwMDAwMDAwMDgyMTgwM0EwMDAwMDAwMDAwMDAwMDA0QkUKKzoxMDFCNDAwMDA4QzA4MTMyMDAwMDAwMDA1MTAwMDBEODAyQzAwMDMyRkQKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwRDQwMjAwMDAzMjAwMDAwMDAwN0QKKzoxMDFCNjAwMENCMTkwMDIwMDcwMDAwMzIwMDAwMTYxMzAyMDEwMDgwOEMKKzoxMDFCNzAwMDMyODAyREJDMDcwMDRBMDIyQjAxMDA4NDc4MEEwMkI5OEEKKzoxMDFCODAwMDAwMDAwMDAwQ0IwMDAwODQxODQxODgzNDAwMDAwMDAwRjEKKzoxMDFCOTAwMDREMDAwMDAwNzdBMDgxM0UwMDAwMDAwMDAwMDgwMDAwMUEKKzoxMDFCQTAwMDA3MDA4MDMyMDAwMDE2MTMwNDEwMDAwMDA3QzA4NkIyNDAKKzoxMDFCQjAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDAxNjEzNjcKKzoxMDFCQzAwMDlGMDAwMDI4RDhBMDgyQkMwMDAwNjgwMjA0MDAwMDFDMEUKKzoxMDFCRDAwMEQ4RTA4MUJDMDAwMDE2MTMwNDAxMDA4MDYyNjA4M0JDNjEKKzoxMDFCRTAwMDAwMDA1OTAyMkQwMDAwMDBEODIwODBCQTAwMDA1NDAyRTUKKzoxMDFCRjAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4MEYKKzoxMDFDMDAwMDczMEEwM0Y5MDAwMDU2MDIwNDAxMDA4MDIyODAyREJDRjMKKzoxMDFDMTAwMDAwMDA1OTAyQ0QwMTAwRDgwMjQwODQ5MjAwMDAxNjEzNDIKKzoxMDFDMjAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwOUEKKzoxMDFDMzAwMEEyODAyRkI2MDAwMDUzMDIwMDAwMDBGOEEyODAyRjk1NkEKKzoxMDFDNDAwMDAwMDA1QzAyMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzQUUKKzoxMDFDNTAwMDEyMDAwMDQ0MTJFMjM4QjIwMDAwNjYwMjAwMDAwMEQ4MTAKKzoxMDFDNjAwMDEyODAyRDlBMDAwMDAwMDAwMDAwMDA4NEY4NDE4ODM0QTIKKzoxMDFDNzAwMDAwMDAxNjEzMTIwMDAwNDQxMkUyMzhCMjE4MDAzNjAwQjkKKzoxMDFDODAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNjQwMjA2MDEwMDgwRjYKKzoxMDFDOTAwMDIyODAyREJDMDAwMDE2MTMwNDAxMDA4MDAyODAyREJDQTAKKzoxMDFDQTAwMDAwMDAxNjEzODAwMTAwODBBMjgwMkZCNjAwMDA1RTAyQTMKKzoxMDFDQjAwMDY3MDAwMEY4QTI4MDJGQjUwMDAwNUYwMjAwMDAwMEU4NzYKKzoxMDFDQzAwMDAyQzAyMTkyMDAwMDE2MTMwNDAxMDA4MDcyODAyREJDMTYKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwRDgwMkMwMDAzMjAwMDBDOTEwNUYKKzoxMDFDRTAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwNDcwMjAwMDAwMDMwOTAKKzoxMDFDRjAwMDA4MDAwMDkyMDAwMDcwMDI4MDAwMDA4MEQyODAyRkI2QTEKKzoxMDFEMDAwMDAwMDA2QjAyMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwODgKKzoxMDFEMTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNkQwMjA0MDEwMDgwNUUKKzoxMDFEMjAwMDIyODAyREJDMDAwMDcwMDIwMDAwMDBEODAyNDA4NDkyODYKKzoxMDFEMzAwMDAwMDAxNjEzMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzNjEKKzoxMDFENDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNkEwMjAwMDAwMEY4MjcKKzoxMDFENTAwMEEyODAyRjk1MDAwMDAwMDBDRDAwMDA4NEY4NDE4ODM0NTcKKzoxMDFENjAwMDAwMDAxNjEzMTIwMDAwNDQxMkUyMzhCMjAwMDAwMDAwMTYKKzoxMDFENzAwMDAwMDAwMEQ0MDI0MDAwMzIwMDAwMDAwMDAwMDAwMEE0NzcKKzoxMDFEODAwMDIyQzA4MjNBMDAwMDc5MDIwNDAxMDA4MDQyMDA4NkJDMzEKKzoxMDFEOTAwMDAwMDAwMDAwMDAwODAwNTgwNzQwODczMjAwMDA3ODAyNjkKKzoxMDFEQTAwMDhGMDEwMDc0MTg0MDg3QkEwMDAwMDAwMDAwMDAwMDc0MjIKKzoxMDFEQjAwMDA4MDAwMDMyMDAwMDdCMDIwMDA0MDA1OEY3QTA4NjlBNTkKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwNzhGOUEwODYzQTI4MDAwMDAwMUEKKzoxMDFERDAwMDAwMDgwMDU4ODc4RDk3M0MwMDAwMDAwMDAwMDAwMEQ4RTQKKzoxMDFERTAwMDAyNDAwMDMyMTgwMDAwMDAwMDAwMDAwMEI3NjA4NTM5OTIKKzoxMDFERjAwMDA4MDAwMDAwMDAwODAwMDA4N0NEODUzNzAwMDA3RTAyNDMKKzoxMDFFMDAwMDEyMDAwMDRDRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDQ4OEQKKzoxMDFFMTAwMDE4QTA4NDNBMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyNDQKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwODA1N0ExODYzQTQxMDAwMDAwMzkKKzoxMDFFMzAwMDAwMDYwMDhDMDcwMDM2MzIwMDAwMDAwMDAwMDgwMDgwMTkKKzoxMDFFNDAwMDA3QzA4NTMyMDAwMDAwMDAwMDEwMDA4QzA3NDA4NTMyN0EKKzoxMDFFNTAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDAzMjAwMDAxNjEzQ0QKKzoxMDFFNjAwMDA0MDAwMDU4MDg4MDcxQjIwMDAwMDAwMDAwMDAwMDgwRUIKKzoxMDFFNzAwMDA4ODAwMDMyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RTkKKzoxMDFFODAwMDAwMDA4QzAyMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzQUIKKzoxMDFFOTAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwODgwMjAwMDAwMEY4QjgKKzoxMDFFQTAwMEEyODAyRjk1MDAwMDg4MDIwNDAxMDA4MDE4MDA4OEJDRTEKKzoxMDFFQjAwMDAwMDA4RjAyOTAxOTAwNThFODlDODVCQTAwMDAwMDAwQ0QKKzoxMDFFQzAwMDAwMDAwMDU4MTg4MDg1M0EwMDAwMDAwMDAwMTgwMDgwQ0IKKzoxMDFFRDAwMDA3ODU4NTMwMDAwMDk0MDIwNDAxMDA4MDQyMDA4NkJDMjIKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwQTYKKzoxMDFFRjAwMDAwMDAwMDA4ODk4MDcxMzcwMDAwOTUwMjAwMTIwMDg0RkMKKzoxMDFGMDAwMDI3RTQ4MjkyMDAwMDAwMDAwMDEyMDA4NDA3MDAwMDMyRTMKKzoxMDFGMTAwMDAwMDA5OTAyMjcwMDAwRkMwMjAwODVCMjAwMDA5OTAyMkYKKzoxMDFGMjAwMDA0MDAwMDgwNDI2MDNEQjMxODAwMDAwMDAwMDAwMEY4OEIKKzoxMDFGMzAwMDczOEEwMzM5OTUwMjM2MDAwMDAwMDBDMDAyMDAzNjkyMTEKKzoxMDFGNDAwMDAwMDAxNjEzMTIwMDAwNUM1MjgxMkNCNDAwMDA5RDAyQTgKKzoxMDFGNTAwMDA0MDEwMDgwMDI4MDgyQkMwMDAwMTYxMzgwMDAwMDgwMTMKKzoxMDFGNjAwMEEyODAyRkI2MDAwMEEzMDEwMDAwMDBENDAyMDAwMDkyNUUKKzoxMDFGNzAwMDAwMDBBMDAyMDQwMTAwMThEOEEwODFCQzAwMDBDOTEwMTQKKzoxMDFGODAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwMkQwMkM3MDEwMDMwM0YKKzoxMDFGOTAwMDA4MDAwMDkyMDAwMDJEMDJDNzAxMDA2Q0Q4RTA4NjlBNkMKKzoxMDFGQTAwMDA4MDAwMDAwQzYwMTAwRjg5MzQwMDEzOTE5MDAwMDAwNDQKKzoxMDFGQjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0RkEKKzoxMDFGQzAwMDA5NDA4MUQyMDAwMDAwMDAwMDAwMDAxNDA4NDU4MTMwNjMKKzoxMDFGRDAwMDAwMDAxNjEzMTIwMTAwQkMwOEMwMjFCMjAwMDAxNjEzNDUKKzoxMDFGRTAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwRjYwMzgwMDE4MDgwNzAKKzoxMDFGRjAwMDMyMEI2QUI2MDAwMDZBMTAwMDAwMDAzQzAzMDAzOEYyQTEKKzoxMDIwMDAwMDAwMDBBQzAyMDQwNjAxODAwMkMwNkVCQzAwMDAxNjEzODIKKzoxMDIwMTAwMDg3MDYwMUVDNTZFMDZFQkEwMDAwRjMwMzAwMDAwMDgwNzIKKzoxMDIwMjAwMDAyMDAwMDkwMDAwMDE2MTM4NzA2MDFFQzU2RTA2RUJBMUQKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwRjg0MjgwMkYzNDA4QzAxNjEzOTIKKzoxMDIwNDAwMDEyMDAwMDQwQTJDRDM5QjIxODAwMzYwMDAwMDAwMEY4OUUKKzoxMDIwNTAwMDczMEEwM0Y5MDAwMDE2MTMwM0I4MDAwMDA5QzA2RUJEMkYKKzoxMDIwNjAwMEIyMDIwMDAwMDAwMDAwODg4MjBEOTAzQTJGMDA1RTA2NDgKKzoxMDIwNzAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMTYxMzAwMDAwMDgwQ0IKKzoxMDIwODAwMDAyMDAwMDkwMkMwMDVFMDYwMDAwMDAxQzA4MDAzNjkyNDIKKzoxMDIwOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREMKKzoxMDIwQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzUKKzoxMDIwQjAwMDAyMDAwMDkwMzgwMDVFMDYwMDAwMDAxQzA4MDAzNjkyMDYKKzoxMDIwQzAwMDM5MDA1RTA2MDAwMDAwMUMwODAwMzY5MjA4MDAwMDAwN0YKKzoxMDIwRDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMTYxMzEyMDEwMEJDMDMKKzoxMDIwRTAwMDA4QzAyMUIyMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MjUKKzoxMDIwRjAwMDAwMDAxNjEzODAwMDgwODAzMjBCNkFCNjAwMDA2QTEwNjAKKzoxMDIxMDAwMDAwMDAwMDNDMDMwMDM4RjIwMDAwQzEwMjA0MDAwMDgwMUYKKzoxMDIxMTAwMDUyNDA4MkJDMDAwMDE2MTMwNDAxMDA4MDYyNDA4MkJDNjEKKzoxMDIxMjAwMDAwMDAxNjEzMDQwNTAxODAwMkMwNkVCQzAwMDAwMDAwMTAKKzoxMDIxMzAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwMTYxMzEyMDAwMDQwM0YKKzoxMDIxNDAwMEEyQ0QzOUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NzYKKzoxMDIxNTAwMDAwMDAwMDAwMDAwNDAxNzgwOUMwNkUzMjAwMDAwMDAwOTkKKzoxMDIxNjAwMDAwNjIwMUVDMDY4MDk3MzIwOTAwMDAwMDAwMDAwMDEwQjgKKzoxMDIxNzAwMDA5MDAzNjMyMDAwMDgwMTIwMDA0MDExNDA5QzA2RUQyM0EKKzoxMDIxODAwMDAyMDBDQjAyMDRCODAwODA4MkNENkVCQzA4MDAxNjEzOUEKKzoxMDIxOTAwMDA0QjkwMDgwODJDRDZFQkMwMDAwMDAwMDAwMDYwMUVDOTYKKzoxMDIxQTAwMDA2NDAwMDMyMDAwMENDMDJCNTAwMDBEODAyMDAwMEIyQTgKKzoxMDIxQjAwMDAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNDAwMDAwMDAwN0IKKzoxMDIxQzAwMDAwMzAwMkU4MDZDMDJDMzIwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDIxRDAwMDA3ODAwMDMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3QzEKKzoxMDIxRTAwMDE4MDUwMTAwMDAwODAwMDBDNzhEOTczQTAwMDAwMDAwQTQKKzoxMDIxRjAwMDAwMDAwMDc4OTlDMDJDMzcxODAxMDAwMDAwMDAwMDc4MUEKKzoxMDIyMDAwMDg5OEQ5NzNBMDAwMDE2MTMwMjEwMDAwMDg3QkY5N0JBMTUKKzoxMDIyMTAwMDAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjAwMDAxNjEzMDYKKzoxMDIyMjAwMDEyMDAwMDQ4RjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4NkYKKzoxMDIyMzAwMDczMEEwM0Y5MDAwMDAwMDAwMDE4MDFFMDA2MDAwMDMyRjQKKzoxMDIyNDAwMDAwMDAwMDAwMDAwMDAwRjg4Mjg1MkYzMDAwMDA2ODA2QzIKKzoxMDIyNTAwMDAwMDAwMDFDMDgwMDM2OTIwODAwMDAwMDAwMDAwMEY4OTIKKzoxMDIyNjAwMDkzNDAwMTM5MDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyQ0UKKzoxMDIyNzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjYwMDAxNjEzQTUKKzoxMDIyODAwMDA0MDEwMEY4ODI4RDJGQjAwNzAwMDAwMDAwMDAwMDEwNEMKKzoxMDIyOTAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5NDA4MUQyOEIKKzoxMDIyQTAwMDAwMDBFNTAyODAwMDgwODAzMjBCNkFCNjE3MDAwMDAwNTMKKzoxMDIyQjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMzgwMDE0QkYKKzoxMDIyQzAwMDA5QzA2RUQyMDAwMEY2MDMwMDAwMDA4MDAyMDAwMDkwRkEKKzoxMDIyRDAwMDAwMDA2QTEwMDAwMDAwMzgwMzAwMzhGMjAwMDBFODAyMzUKKzoxMDIyRTAwMDA0MDIwMTgwMDJDMDZFQkMwMDAwRjMwMzAwMDIwMUVDOTYKKzoxMDIyRjAwMDU2RTA2RTlBMDAwMDAwMDBDMDAzMDFFQzU2RTA2RTNBMTIKKzoxMDIzMDAwMDAwMDAxNjEzODAwMTAwODAwMjgwMkZCNjAwQzAxNjEzNTMKKzoxMDIzMTAwMDEyMDAwMDQwQTI4RDM5QjIxODAwMzYwMDAwMDAwMEY4MEIKKzoxMDIzMjAwMDczMEEwM0Y5MjAwMDE2MTMwNDM5MDA4MDgyQ0Q2RUJDQjUKKzoxMDIzMzAwMDEyMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNzgKKzoxMDIzNDAwMDAwMzAwMDE0MDkwMDZFRDIxNTAwMDAwMDAwMDAwMDEwREIKKzoxMDIzNTAwMDA5MDAzNjMyMTgwMDAwMDAwMDAyMDExNDg5Q0Q2RTM3RTIKKzoxMDIzNjAwMDAwMDA4MDEyMDAyMDAxMTQ4OTVCOTFEMjFCMDBGNDAyNEUKKzoxMDIzNzAwMDM4MDEwMDEwMDkwMDM2QjIwMDAwODAxMjAwMzAwMTE0NEMKKzoxMDIzODAwMDA5MDA2RUQyMTgwMDAwMDAwMDAwMDAxMDA5MDAzNjMyNkIKKzoxMDIzOTAwMDA4MDAwMDAwMDAwMDAwMTQ3OTBCMTQzODEwMDA4MDEyQUYKKzoxMDIzQTAwMDAwNTAwMTE0QTk1QjkxRDkwMDAwRjkwMjA0MjgwMTE0MUUKKzoxMDIzQjAwMDA5MDA2RUIyMUMwMDgwMTIwMDAwMDAxMDA5MDAzNkQyMjUKKzoxMDIzQzAwMDAwMDAwNTAzMzgyODAwMTgwOTAwNkVCMjAwMDBGRDAyNjUKKzoxMDIzRDAwMDA0MjEwMTA4NjkyNDZFQkMwMDAwMTYxMzA5MDEwMDgwNjUKKzoxMDIzRTAwMDAyMDAwMEIwMDMwMDY4MDYwMDAwMDAxQzA4MDAzNjkyREUKKzoxMDIzRjAwMDAwMDAwMTAzMDIzMDAwODA4MjlCOTBCQzAwMDAwMDAzQkIKKzoxMDI0MDAwMDA2MDMwMTgwMTJDMDZFQkMwNDAwNjgwNjAwMDAwMDFDQjgKKzoxMDI0MTAwMDA4MDAzNjkyMDUwMDY4MDYwMDAwMDAxQzA4MDAzNjkyOEQKKzoxMDI0MjAwMDAwMDAxNjEzMDQzMDAwODAwMjAwNkVCMjAwMDAwNDAzQTYKKzoxMDI0MzAwMDA2MDMwMTgwMTJDMDZFQkMwQjAwNjgwNjAwMDAwMDFDODEKKzoxMDI0NDAwMDA4MDAzNjkyMEMwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTYKKzoxMDI0NTAwMDAwMDAwODAzMDQyMTAxMDg2OTI0NkVCQzAwMDAxNjEzNjMKKzoxMDI0NjAwMDA5MDEwMDgwMDIwMDAwQjAwMzAwNjgwNjAwMDAwMDFDQTMKKzoxMDI0NzAwMDA4MDAzNjkyMDAwMDBDMDMwMjMwMDA4MDgyOUI5MEJDNjIKKzoxMDI0ODAwMDAwMDAwQjAzMDYwMzAxODAxMkMwNkVCQzA0MDA2ODA2NDYKKzoxMDI0OTAwMDAwMDAwMDFDMDgwMDM2OTIwNTAwNjgwNjAwMDAwMDFDQzEKKzoxMDI0QTAwMDA4MDAzNjkyMDAwMDBFMDM5RjMxMDEwQzY5MjQ2RUJDQjcKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMDAwMEMwOTAwMDAzMjAwMDAxMjAzQzAKKzoxMDI0QzAwMDA0MzEwMDA0ODk5QjkwQkMwMDAwMTEwMzA2MDMwMTgwQzUKKzoxMDI0RDAwMDEyQzA2RUJDMjAwMDY4MDYwMDAwMDAxQzA4MDAzNjkyODYKKzoxMDI0RTAwMDIxMDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzNDgKKzoxMDI0RjAwMDlGMDAwMDgwMDI0MDkwQjIwMDAwMTUwMzA0MDIwMTgwOUEKKzoxMDI1MDAwMDEyQzA2RUJDMjIwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTMKKzoxMDI1MTAwMDAwMDAxNzAzMDQwMTAwMDAzOUE0OTBCQzIzMDA2ODA2RTIKKzoxMDI1MjAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMTYxMzlGMDAwMDgwNzcKKzoxMDI1MzAwMDAyMDA5MEIyMjQwMDY4MDYwMDAwMDAxQzA4MDAzNjkyRDkKKzoxMDI1NDAwMDA4MDAxNjEzMEMwMDAwRjg2MzQwMDFCOTEwMDAxRDAzQzkKKzoxMDI1NTAwMEM1MDEwMENDMDIyMDE1OTgwODAwOTEwMzBDMDAwMEY4N0EKKzoxMDI1NjAwMDQzNDAwMUI5MTAwMDAwMDBDNTAxMDBDQzAyMjAxNTM4MUQKKzoxMDI1NzAwMDAwMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNDgKKzoxMDI1ODAwMDAwMDAwMDE0MDkwMDgwRDIwMDAwMTYxMzEyMDEwMEJDRTQKKzoxMDI1OTAwMDA4QzAyMUIyMDAwMDZBMTAwMDAwMDAzQzAzMDAzOEYyQkQKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMDAwNUMwODA1ODAzMDAwMDAxNjEzRTkKKzoxMDI1QjAwMDA0MDEwMDgwMDI0MDJEQkMwMDAwMTYxMzAyMDEwMDgwQkYKKzoxMDI1QzAwMDgyRkE4NUJDMDAwMDE2MTMwNjAxMDA4MDkyRkE4NUJDRDEKKzoxMDI1RDAwMDAwMDAyNzAzMzYwMTAwODAwMjAwMDBCMDBGMDA2ODA2RUIKKzoxMDI1RTAwMDAwMDAwMDFDMDgwMDM2OTIxMDAwMDAwMDAwMkMwMjAwQzEKKzoxMDI1RjAwMEE5REI4NTM5MDAwMDE2MTMxMjAwMDA1NDAyQTQzOEIyN0EKKzoxMDI2MDAwMDAwMDAwMDAwMDAwODAyOEMwOEMwNkUzMjAwMDAwMDAwQ0MKKzoxMDI2MTAwMDAwMEMwMjk4Mjg4MDZFMzcwMDAwMDAwMDAwMDAwMDlDMkIKKzoxMDI2MjAwMDM4MjIxNDM3MDAwMDMyMDMwNDMwMDAyODA4MDA2RUIyNEMKKzoxMDI2MzAwMDAwMDAxNjEzMDQxMDAwNkMwODAwNkVCMjAwMDAwMDAwQzkKKzoxMDI2NDAwMDAwMTgwMDRDMDgwMDZFMzIwMDAwMTYxMzA0MjAwMDE4MTkKKzoxMDI2NTAwMDA4MDA2RUIyMDAwMDAwMDAwMDNDMDAxNDA4ODA2RTMyREEKKzoxMDI2NjAwMDA1MDAzNTAzMDAzODAyMDA3OEUxNkU5OTAwMDAwMDAwOTMKKzoxMDI2NzAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMzgwMjc4NEIKKzoxMDI2ODAwMDA5QzA2RTMyMDUwMDAwMDA2ODA4MDAwMDc3QTE5NzM5ODQKKzoxMDI2OTAwMDAwMDAzNzAzMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMDMKKzoxMDI2QTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDU0NTQwMUZDMTQKKzoxMDI2QjAwMDAyQzA2RTMyMTQxMDNCMDMwNDAwMDA4MEEyMEQ3MkIwMDEKKzoxMDI2QzAwMDAwMDBGMzExMDAwMDAwMjgwOUMwMDJGMjBFMDA2ODA2QTUKKzoxMDI2RDAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMTYxMzA2MDkwMDgwNTYKKzoxMDI2RTAwMDgyQkQ3MkJDMDAwMDRGMDMzMzE1MDBBNDAyQzA3MkIyNTkKKzoxMDI2RjAwMDAwMDA4QzAzODAwMTAwODBCMjAxNzJCNjAxMDE0MjAzMjgKKzoxMDI3MDAwMDA0MjkwMDgwODI4RDc0QkMwODBBOEMwMzA0MkQwMDgwOEIKKzoxMDI3MTAwMDgyOEQ3NEJDMDAwMDAwMDAwMDMwMDA3QzA4MDA3NTMyMUYKKzoxMDI3MjAwMDAwMDA0OTAzMDAzODAwODgxODAwNzU5QzA4MEE4QzAzRDMKKzoxMDI3MzAwMDA0MjkwMDgwODI4RDc0QkMxMDAwMDAwMDAwMkMwMDdDRjUKKzoxMDI3NDAwMDg4OEQ3NTM3MDAwMDAwMDAwMDMwMDA3QzY4REQ4NzMyMUUKKzoxMDI3NTAwMDAwMDA0ODAzOUYzOTAwODgxODgwNzVCQzEwMDAwMDAwRjUKKzoxMDI3NjAwMDAwMzQwMDg4ODg4RDc1MzcwMDAwNDkwMzAwMDAwMDg4MTgKKzoxMDI3NzAwMDE4ODA4ODlDMTAwMDAwMDAwMDM0MDA4ODY4OUQ4ODM5MEIKKzoxMDI3ODAwMDM3MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRkYKKzoxMDI3OTAwMDAwMDAwMDE0MDlDMDg3RDIzQjAwMDAwMDAwMDAwMDEwQjgKKzoxMDI3QTAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA4OEQyMkYKKzoxMDI3QjAwMDAwMDA1MDAzOUZGMTAxODA4MkRCODdCQzAwMDA4QzAzODYKKzoxMDI3QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwMzgwMDAwMDgwNjgKKzoxMDI3RDAwMEIyMDE3MkI2MDAwMDAwMDAwMDA4MDA0ODA4MDA3NTMyMUYKKzoxMDI3RTAwMDAwMDAwMDAwMDAxMDAwNzAwODAwNzUzMjAwMDAwMDAwQkEKKzoxMDI3RjAwMDAwMUMwMDc0MzhBMjc1MzcwMDAwNTUwMzgzMUIwMDc4NTUKKzoxMDI4MDAwMDA4QzA3NEIyMDAwMDAwMDAwMDAwMDBGOEMyODAyRjM0M0QKKzoxMDI4MTAwMDJGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNzYKKzoxMDI4MjAwMDAwMDAwMDE0MDk4MDg0RDIzNDAwMDAwMDAwMDAwMDEwNzEKKzoxMDI4MzAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5MDA4N0QyMUYKKzoxMDI4NDAwMDAwMDA2QjAzOUY3ODAxODBDMjIxNkVCQzAwMDA1RDAzMTUKKzoxMDI4NTAwMDlGOTkwMTY0ODgxQjg3QkMwMDAwNkMwMzlGNjgwMTY0MUEKKzoxMDI4NjAwMDg4NUI4NkJBMDAwMDAwMDAwMDAwMDA2NDA4MDAwMDMyQTcKKzoxMDI4NzAwMDAwMDAwMDAwMDAxNjAwQTQwMkMwNzIzMjAwMDAwMDAwMzgKKzoxMDI4ODAwMDAwM0MwMkE0QjI1QjJBM0EwMDAwMDAwMDAwM0EwMjc4NDEKKzoxMDI4OTAwMDA5QzA2RTMyMDAwMDZEMDMwODAxMDAwNEU4QTU3NUJDOTQKKzoxMDI4QTAwMDNGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyQzYKKzoxMDI4QjAwMDAwMDQwMDE0Njk1RDgwRDkxMDAwOEMwMzBCMDEwMDFDMUEKKzoxMDI4QzAwMDA4MDAzNkIyMDAwMDZCMDMwNEExMDE4MDgyOUI4NEJDMjcKKzoxMDI4RDAwMDAwMDA2ODA2OUY5ODAxODBDMjIxNkVCQzAwMDA2ODA2NTcKKzoxMDI4RTAwMDA2QjEwMTgwODI1Qjg3QkMwMDAwOEIwMzBCMDEwMDgwNzYKKzoxMDI4RjAwMDAyMDAwMEIwMDAwMDZDMDMwNDk5MDE4MEMyMjE2RUJDOEMKKzoxMDI5MDAwMDAwMDA4OTAzMDJENDAxODA5MkZCNkVCQzE2MDA2ODA2QTkKKzoxMDI5MTAwMDAwMDAwMDFDMDgwMDM2OTIxNzAwNjgwNjAwMDAwMDFDMkEKKzoxMDI5MjAwMDA4MDAzNjkyMUMwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNjEKKzoxMDI5MzAwMDNGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyMzUKKzoxMDI5NDAwMDAwMDQwMDE0Njk1RDgwRDkwMDAwNzEwMzA0QTEwMTgwQjYKKzoxMDI5NTAwMDgyOUI4NEJDMDAwMDc4MDMwNkE4MDE4MDgyNUI4MEJDNTcKKzoxMDI5NjAwMDAwMDA3NTAzMDRBOTAxODAwMjAwNkVCQzAwMDA4QTAzMDgKKzoxMDI5NzAwMDA0QTEwMTgwODI5Qjg0QkMwMDAwOEEwMzA0MDEwMDgwQzIKKzoxMDI5ODAwMDEyNDA4MEJDMTQwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNEIKKzoxMDI5OTAwMDAwMDA4QTAzOUZBMDAxNzgyOTIxNkVCQzAwMDA4QTAzRjEKKzoxMDI5QTAwMDAyMDEwMDgwMTJBMDk3QkMwMDAwNkIwMzAwMDAwMDgwQjEKKzoxMDI5QjAwMDAyMDAwMDkwMDAwMDg1MDMwNDAwMDA4MDAyODA4MkJDQjkKKzoxMDI5QzAwMDAwMDAxNjEzMDQwMjAxODAwMkMwNkVCQzAwMDA3RTAzRUEKKzoxMDI5RDAwMDAyMDAwMDgwQTI2MDgwQkMwNjAwNjgwNjJDMDEwMDFDN0EKKzoxMDI5RTAwMDA4MDAzNkIyMDBDMDgyMDMwNDAxMDA4MEEyOEQyRkIwMUYKKzoxMDI5RjAwMDA2MDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDA4MjAzRjIKKzoxMDJBMDAwMDA0MDAwMDgwQTI2MDgwQkMwMDAwODEwMzA2MDMwMTgwRjYKKzoxMDJBMTAwMDEyQzA2RUJDMDkwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTcKKzoxMDJBMjAwMDBBMDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDA4NDAzQkIKKzoxMDJBMzAwMDA2MDMwMTgwMTJDMDZFQkMwNzAwNjgwNjAwMDAwMDFDN0YKKzoxMDJBNDAwMDA4MDAzNjkyMDgwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTQKKzoxMDJBNTAwMDAyMDA2ODA2MzgwMTAwMUMwODAwMzZCMjAwMDA4ODAzMzYKKzoxMDJBNjAwMDAyMEMwMjgwQTI1QjgwQkMxRjAwNjgwNjAwMDAwMDFDRjQKKzoxMDJBNzAwMDA4MDAzNjkyMUUwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMEUKKzoxMDJBODAwMDAwMDA4RDAzMDAwMDAwMjgwOTQwMDA5MjAwMDA4RDAzMjMKKzoxMDJBOTAwMDAwMDAwMDI4MDk4MDAwOTIwMDAwOEQwMzAwMDAwMDI4M0IKKzoxMDJBQTAwMDA5QzAwMDkyMDAwMDhEMDMwMDAwMDAyODA5MDAwMTkyNzcKKzoxMDJBQjAwMDMwMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRDMKKzoxMDJBQzAwMDAwMDAwMDE0MDk4MDkyRDIwRTAwRjMxMTAwMDAwMDFDRDcKKzoxMDJBRDAwMDA4MDAzNkYyMDAwMDY4MDYwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMDJBRTAwMDEwMDAxNjEzMkEwMDAwQ0MwMjIwMTVCODBEMDAwMDAwQkIKKzoxMDJBRjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0QUYKKzoxMDJCMDAwMDA5MDA4MEQyMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyRDcKKzoxMDJCMTAwMDAwMDA2QTEwMDAwMDAwM0MwMzAwMzhGMjFEMDA5OTAzMTkKKzoxMDJCMjAwMDgwMDEwMDc4MDlFMDAwQjgwMDAwMTYxMzA0MDEwMDgwNUQKKzoxMDJCMzAwMDMyODA5N0JDMUQwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMTkKKzoxMDJCNDAwMDAwMDAxNjEzMDQwMTAwODAyMjgwOTdCQzE1MDA2ODA2NUYKKzoxMDJCNTAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMDAwMDAwMDAwMDFDNkQKKzoxMDJCNjAwMEE4MDUyODMwMDAwMDE2MTMwNDAwMDA4MDAyQzAyQ0JDMDkKKzoxMDJCNzAwMDAwMDAxNjEzMTIwMTAwQkMwOEMwMjFCMjAwMDAxNjEzOTkKKzoxMDJCODAwMDgwMDAwMDgwQTI4MDJGQjY2MDAwMTYxMzA0MDEwMEY4QjgKKzoxMDJCOTAwMDgyOEQyRkIwMDgwMDAwMDAwMDAwMDBGODgzNDAwMTM5NEEKKzoxMDJCQTAwMDM2MDBBNDAzMDQwMDAwODA4MkNEODFCQzA1MDAwMDAwMzMKKzoxMDJCQjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0RUUKKzoxMDJCQzAwMDA5QzA4MUQyMDAwMDAyMDQ4MDAxODA4MDMyMEI2QUI2MDUKKzoxMDJCRDAwMDAwMDA2QTEwMDAwMDAwMzgwMzAwMzhGMjJDMDA2ODA2N0MKKzoxMDJCRTAwMDAyMDEwMDgwODJDRDgxQkMwMDAwNUUwNjAwMDAwMDgwRjIKKzoxMDJCRjAwMDAyMDAwMDkwMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyQjAKKzoxMDJDMDAwMDAwMDBBQjAzMUQ0MTAyNUNGODAxNjhCNDQxMDBGMzAzMEUKKzoxMDJDMTAwMDAwMDAwMEY4QTI4RDJGOTEzNTAwMDAwMDAwMDAwMDEwODgKKzoxMDJDMjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5QzA4NUQyNkQKKzoxMDJDMzAwMDEwMDAwMDAwRDAyQzAyMDBBOURCODUzOTAwMDAyOTAzMTgKKzoxMDJDNDAwMDEyMDEwMDU0MDJBNDM4QjIwMDAwMTYxMzAwMDAwMDgwRTQKKzoxMDJDNTAwMDAyMDAwMDkwMDAwMEI0MDMwNEIwMDA4MDAyMDA2RUJDQ0IKKzoxMDJDNjAwMDAwMDBCNDAzODBCOTAwODA4MjgwNkVCNjAwMDAwMDEzQkIKKzoxMDJDNzAwMDAwNzgwMTYwMDgwMDZFRjIzMDAwNUUwNkQ3MDAwMDFDOEMKKzoxMDJDODAwMDA4MDAzNjkyMDAwMEI2MDM4MDAxMDA4MEQyODEyRkI2ODIKKzoxMDJDOTAwMDMxMDA1RTA2RDcwMDAwMUMwODAwMzY5MjAwMDBCODAzMjEKKzoxMDJDQTAwMDgwMDEwMDgwNDI4MTJGQjYzNTAwNUUwNkQ3MDAwMDFDRUYKKzoxMDJDQjAwMDA4MDAzNjkyMDAwMEM1MDMwNEE4MDEwODA5MDA2RUIyOUUKKzoxMDJDQzAwMDAwMDAwMDAwMDAyMDAyMDg4OTlCOTAzRTAwMDAwMDAwRTgKKzoxMDJDRDAwMDAwQTAwMTA4ODk5QjkwM0EwMDAwQzUwMzlGODgwMTA4NjUKKzoxMDJDRTAwMDg5OUI5MEJDMDAwMDAwMDAwMDM0MDIwMDA5QzA2RTNEQ0EKKzoxMDJDRjAwMDAwMDAwMDAwMDAwQzAyMDQwOUE0NkUzNzAwMDBDMTAzQUMKKzoxMDJEMDAwMDAyMDAwMDgwMTJBNDkwQkMwMDAwMDAwMDAwMDAwMDA4MzcKKzoxMDJEMTAwMDE5ODA5MDM3MDAwMEM1MDMwMjAxMDI4MDgyOUI5MEJDOUQKKzoxMDJEMjAwMDMxMDA1RTA2RDcwMDAwMUMwODAwMzY5MjAwMDBDNTAzODMKKzoxMDJEMzAwMDA0QjAwMDgwMDIwMDZFQkMwMDEyQzUwMzA0MDEwMDgwRDQKKzoxMDJENDAwMEEyOEQyRkIwMzIwMDVFMDZENzAwMDAxQzA4MDAzNjkyMUMKKzoxMDJENTAwMDAwMDBGMzAzMDAwMDAwRjg3MjgxMkY5NTAwMDAwMDAwQ0UKKzoxMDJENjAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwQUYwMjEyMDEwMDQwN0EKKzoxMDJENzAwMEEyQ0QzOUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkUKKzoxMDJEODAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTA4MDAwMDAwMkUKKzoxMDJEOTAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MEMKKzoxMDJEQTAwMDA5QzA4MUQyMDAwMDE2MTMwNDAwMDA4MDAyQzAyQ0JDQjAKKzoxMDJEQjAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjYwMDAxNjEzNUEKKzoxMDJEQzAwMDA0MDEwMEY4ODI4RDJGQjAwMDAwMDIwNDgwMDE4MDgwOTEKKzoxMDJERDAwMDMyMEI2QUI2MDAwMDAwMDAwMDAwMDAxNDA4NDA5MDMyNzgKKzoxMDJERTAwMDAwMDA2QTEwMDAwMDAwMzgwMzAwMzhGMjJDMDA2ODA2NkEKKzoxMDJERjAwMDAyMDEwMDgwODJDRDgxQkMwMDAwNUUwNjAwMDAwMDgwRTAKKzoxMDJFMDAwMDAyMDAwMDkwMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MjMKKzoxMDJFMTAwMDA4MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyODcKKzoxMDJFMjAwMDAwMDAwMDE0ODk0RDgxRDcwMDAwMTYxMzA0MDAwMDgwQjMKKzoxMDJFMzAwMDAyQzAyQ0JDMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2QjgKKzoxMDJFNDAwMDYwMDAxNjEzMDQwMTAwRjg4MjhEMkZCMDAwMDAwMjA0MDgKKzoxMDJFNTAwMDgwMDE4MDgwMzIwQjZBQjYwMDAwNkExMDAwMDAwMDM4RTIKKzoxMDJFNjAwMDAzMDAzOEYyMDAwMERGMDMwNDIwMDE4MDUyMjA2RUJDMTIKKzoxMDJFNzAwMDAwMDAxNjEzMDkwMTAwODAwMjAwMDBCMDI2MDA2ODA2NTkKKzoxMDJFODAwMDAwMDAwMDFDMDgwMDM2OTIyNTAwNjgwNjAwMDAwMDFDQTcKKzoxMDJFOTAwMDA4MDAzNjkyMDAwMEU1MDMwNDAxMDBEODFFODBFREJDNTYKKzoxMDJFQTAwMDAwMDBFMTAzQjcwMDAwRDgwRUMwRURCMjAwMDBFNDAzNUIKKzoxMDJFQjAwMDA0MDEwMDgwNDIzQkVFQkMwMDAwMDAwMDAwMDAwMEUwODYKKzoxMDJFQzAwMDFFMDBFRTNBMDAwMDAwMDBBNzAwMDBEMDBFMDBFRTMyMTcKKzoxMDJFRDAwMDAwMDAwMDAwMDA3NDg2Q0MwMjgwNkMzMjAwMDAwMDAwMEMKKzoxMDJFRTAwMDAwMDAwMDAwMDk0MEU3MzIwMDAwRTkwMzgwMDE4MDgwMTMKKzoxMDJFRjAwMDMyMEI2QUI2MzYwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyQTkKKzoxMDJGMDAwMDAwMDBFQjAzMDQwMTAwODA0MkM1MkNCQzAwMDBFQzAzNzAKKzoxMDJGMTAwMDAwMDAwMENDMDIwMDAwOTIwMDAwMDAwMDAwMDAwMENDODUKKzoxMDJGMjAwMDEyQzAyQzNBMDAwMEU3MDMwNDAxMDAwMDE5MDA5MEJDMTUKKzoxMDJGMzAwMDAwMDAwMDAwMDA3NDg2QzgwNkMwMkMzMjA4MDAwMjA0OUQKKzoxMDJGNDAwMDAwMDAwMEY4QzM0MDAxOTkwMDAwRjEwMzA0MDAwMDgwNzQKKzoxMDJGNTAwMDAyODA4MEJDMDAwMDE2MTMwNDU1MDE4MEIyREIyRkJDMzgKKzoxMDJGNjAwMDAwMDA1NDEwMDAwMDAwMkMwOTAwMDBGMjAwMDBGNjAzREQKKzoxMDJGNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjUwMzA0MDAwMDgwQzMKKzoxMDJGODAwMDAyODA4MEJDMDAwMDE2MTMwNDU1MDE4MEIyREIyRkJDMDgKKzoxMDJGOTAwMDAwMDA1NDEwMDAwMDAwMkNGOTAxMDBGNDAwMDBGRjAzQjEKKzoxMDJGQTAwMDA0MDAwMDI4MDk4MDgwQjIwMDAwMDAwMDAwMDAwMEQ4NjIKKzoxMDJGQjAwMDAyMDAwMDMyMDAwMDgxMTEwMDAwMDAwODA4MDAwMEQyNjkKKzoxMDJGQzAwMDAwMDBGRjAzMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwNUQKKzoxMDJGRDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDIwNDgwMDEwMDgwNzkKKzoxMDJGRTAwMEEyODAyRkI2MDAwMDAyMDQxMjAxMDAwMDA5QzAyMUIyMjUKKzoxMDJGRjAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTAyMDQzNjAwQ0MKKzoxMDMwMDAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDIwNDgwMDEwMDgwMkYKKzoxMDMwMTAwMEEyODAyRkI2MDAwMDAyMDQxMjAxMDAwMDA5QzAyMUIyRjQKKzoxMDMwMjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwRTEKKzoxMDMwMzAwMDAwMDAwMEY4MDIwMDAwMzIxODAwMzYwMDAwMDAwMEY4MUUKKzoxMDMwNDAwMDczOEEwMjk5MTAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyODkKKzoxMDMwNTAwMDAyMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMjEKKzoxMDMwNjAwMDAwMDAwMEU0MDMwMDM2MzIwNDAwMDAwMTAwMDAwMEUwMkMKKzoxMDMwNzAwMDAzMDAzNzMyQUEwNDAwMDAwMDAwMDBFNDAzMDAzNjMyRTcKKzoxMDMwODAwMDA5MDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwRUEKKzoxMDMwOTAwMDAwMDAwMENDMEYwMDAwMzIwMDA3MDAwMDAwMDAwMEU0MzgKKzoxMDMwQTAwMDAzMDAzNjMyMDYwMDAwMDEwMDAwMDBFMDAzMDAzNzMyNjIKKzoxMDMwQjAwMDIwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjA4MDAwMDAxOTgKKzoxMDMwQzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAxMDAwMDAwMDAwMEU0Q0YKKzoxMDMwRDAwMDAzMDAzNjMyMDUwMDAwMDEwMDAwMDBFMDAzMDAzNzMyMzMKKzoxMDMwRTAwMDMwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjA3MDAwMDAxNTkKKzoxMDMwRjAwMDAwMDAwMEUwMDMwMDM3MzIwMEEwMDAwMDAwMDAwMEU0MDAKKzoxMDMxMDAwMDAzMDAzNjMyMDgwMDAwMDgwMDAwMDBFMDAzMDAzNzMyRjgKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwQTAwMjAwMDAzMjAwMDAwMDAwREIKKzoxMDMxMjAwMDAwMDAwMDAwMEIwMDAwMzIwMDAwMTYwNDhCMDEwMEEwMUMKKzoxMDMxMzAwMDEyMDAyQUJBMDAwMDAwMDAwMDAwMDBBODAyMDAwMDMyQkQKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDAxOTA0NDkKKzoxMDMxNTAwMDA2MDEwMDgwMDI4MDJBQkMwMDAwMDAwMDAwMDAwMDlDRTQKKzoxMDMxNjAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyMjMKKzoxMDMxNzAwMDAwMDAwMDAwMDAwMDAwQ0MwMjAwMDAzMjAwMDAwMDAwNEYKKzoxMDMxODAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQwNjMKKzoxMDMxOTAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEQzAyMDAwMDMyRUIKKzoxMDMxQTAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwRjMKKzoxMDMxQjAwMDAwMDAwMEM4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEM0NEYKKzoxMDMxQzAwMDAyMDAwMDMyMDAwMDFDMDQ4NTAxMDA5QzEyQzAyOUJBRDQKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjBCMDAwMDA0OTEKKzoxMDMxRTAwMDAwMDAwMEUwMDMwMDM3MzI4MDAwMDAwMDAwMDAwMEU0MkYKKzoxMDMxRjAwMDAzMDAzNjMyMTMwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDEKKzoxMDMyMDAwMDAwMjAwMDAwMDAwMDAwRTQwMzAwMzYzMjBDMDAwMDA0M0YKKzoxMDMyMTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0N0UKKzoxMDMyMjAwMDAzMDAwNjMyMEYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDQKKzoxMDMyMzAwMDAwMDQwMTAwMDAwMDAwRTQwMzAwMzczMjBEMDAwMDA0MjgKKzoxMDMyNDAwMDAwMDAwMEUwMDMwMDM3MzIwMDA0MDAwMDAwMDAwMEU0NEEKKzoxMDMyNTAwMDAzMDAzNjMyMTQwMDAwMDQwMDAwMDBFMDAzMDAzNzMyOUYKKzoxMDMyNjAwMDlGMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjE1MDAwMDA0NTcKKzoxMDMyNzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0MUUKKzoxMDMyODAwMDAzMDAzNjMyMTgwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNkIKKzoxMDMyOTAwMDYwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFEMDAwMDA0NUUKKzoxMDMyQTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0RUUKKzoxMDMyQjAwMDAzMDAwNDMyMUUwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNjcKKzoxMDMyQzAwMDcwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFGMDAwMDA0MUMKKzoxMDMyRDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0QkUKKzoxMDMyRTAwMDAzMDAwMDMyMjAwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMzkKKzoxMDMyRjAwMEEwMDMwMDAwMDAwMDAwRTQwMzAwMzYzMjE3MDAwMDA0QzEKKzoxMDMzMDAwMDAwMDAwMEUwMDMwMDM3MzI0MDAwMDAwMDAwMDAwMEU0NEQKKzoxMDMzMTAwMDAzMDAzNjMyMUIwMDAwMDQwMDAwMDBFMDAzMDAzNzMyRDcKKzoxMDMzMjAwMDYwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFDMDAwMDA0Q0UKKzoxMDMzMzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0NUQKKzoxMDMzNDAwMDAzNDAwMDMyMTYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQTIKKzoxMDMzNTAwMDAwMDEwMDAwMDAwMDAwRTQwMzAwMzYzMjFBMDAwMDA0RkYKKzoxMDMzNjAwMDAwMDAwMEUwMDMwMDM3MzIyMDAxMDAwMDAwMDAwMEU0MEMKKzoxMDMzNzAwMDAzMDAzNjMyMTkwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNzkKKzoxMDMzODAwMDgwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjBCMDAwMDAxNjIKKzoxMDMzOTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAxMDAwMDAwMDAwMEU0RkMKKzoxMDMzQTAwMDAzMDAzNjMyMEMwMDAwMDEwMDAwMDBFMDAzMDAzNzMyNTkKKzoxMDMzQjAwMEZFRkYwMDAwMDAwMDAwQUMwMjAwMzYzMjAwMDAwMDAwRkEKKzoxMDMzQzAwMDAwMDAwMDAwMDkwMDAwMzIxODAwMDAwMDAwMDAwMEY4QjIKKzoxMDMzRDAwMDAzNjQwMjM5MDAwMDRGMDQ4NTAxMDAwMDE5MDA5MEJBMEYKKzoxMDMzRTAwMDI1MjYwMDAwMDAwMDAwRTQwMzAwMzYzMjAxMDAwMDAxNDEKKzoxMDMzRjAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMDgwMDEKKzoxMDM0MDAwMDBGMDAwMDMyMDAwMDAwMDAwMDAwMDA4NDBGMDAwMDMyQjYKKzoxMDM0MTAwMDA4MDAwMDAwMDAwMDAwRjhGMzQwMDEzOTA4MDAwMDAwMzcKKzoxMDM0MjAwMDAwMDAwMEY4RTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NDcKKzoxMDM0MzAwMEMzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEIzNDAwMTM5MjIKKzoxMDM0NDAwMDA4MDAwMDAwMDAwMDAwRjhBMzQwMDEzOTA4MDAwMDAwNTcKKzoxMDM0NTAwMDAwMDAwMEY4OTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NjcKKzoxMDM0NjAwMDgzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODczNDAwMTM5NzIKKzoxMDM0NzAwMDA4MDAwMDAwMDAwMDAwRjg2MzQwMDEzOTA4MDAwMDAwNjcKKzoxMDM0ODAwMDAwMDAwMEY4NTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NzcKKzoxMDM0OTAwMDQzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODMzNDAwMTM5QzIKKzoxMDM0QTAwMDA4MDAwMDAwMDAwMDAwRjgxMzQwMDEzOTAwMDAwMDAwOEYKKzoxMDM0QjAwMDAwMDAwMEY4MDM4MDAwMzIwMDAwMDAwMDAwMDAwMEM4OTcKKzoxMDM0QzAwMDNGODBGQzM1MDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyM0MKKzoxMDM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAzMjNFMDAwMDAwNzkKKzoxMDM0RTAwMDAwMDAwMEQwMDIwMDM2MzIwMDAwMDAwMDAwMDAwMDI4N0EKKzoxMDM0RjAwMDAzNDAzODMyMDAwMDE2MTMwNDAxMDA4MEQyMDEzMEI2QjgKKzoxMDM1MDAwMDAwMDA2NzA0MDQwMTAwRDAxMjAwMkRCQ0EwMDQwMDAwREMKKzoxMDM1MTAwMDAwMDAwMEU0MDMwMDM2MzIwMzAwMDAwMTAwMDAwMEUwNzgKKzoxMDM1MjAwMDAzMDAzNzMyMDAwMDAwMDAxNzAwMDBEMDAyMDAwMDMyMTQKKzoxMDM1MzAwMDAwMDAwMDAwMDAwMDAwQUNFMTAwMDAzNDAwMDAwMDAwQ0EKKzoxMDM1NDAwMDAwMDAwMUUwMDYwMDAwMzIwMDAwMDAwMDAwMDgwMUU0NzUKKzoxMDM1NTAwMDA2MDAwMDMyMDAwMDAwMDAwMDBFMDFFQzA2MDAwMDMyMDAKKzoxMDM1NjAwMDAwMDAwMDAwMDAxMDAxRTAwNjAwMDAzMjAwMDAwMDAwMzIKKzoxMDM1NzAwMDAwMDAwMEQwMTIwMDJEM0EzRTAwNkYwNDAyMDEwMDgwQ0UKKzoxMDM1ODAwMDgyMEQyREJDMDIwMDAwMDAwMDAwMDA5Q0FFMEQwMjMyMzYKKzoxMDM1OTAwMDAwMDAwMDAwMDAwMDAwQTgwMjAwMDAzMjMwMDAwMDAwMUYKKzoxMDM1QTAwMDAwODg4NkNDMDcwMDM2MzIwMDAwMDAwMDAwOEE4NkNDRjYKKzoxMDM1QjAwMDA3MDAwMDNBMDAyNDAwMDAwMDAwMDAwNDA5ODAzNjMyQjEKKzoxMDM1QzAwMDAwMDAxNjEzMTIwMDAwNjQwMjQwOTBCMjAwMDAwMDAwRDgKKzoxMDM1RDAwMDAwMDAwMDA0Mjk0MDkwM0EwMDAwN0IwNDEyMDAwMDc4QUIKKzoxMDM1RTAwMDA5QzAyMEIyMDAwMDE2MTM4MDAxMDA4MEYyODE5N0I2NTYKKzoxMDM1RjAwMDFEMDAxNjEzODAwMTAwNzhFOUU1MDBCODAwMDAwMDAwMDYKKzoxMDM2MDAwMDAwMDAwMDc4MDk0NTkwMzAwMDAwNzkwNDAyMDEwMDgwMzQKKzoxMDM2MTAwMEMyODI5N0JDMDAwMDAwMDAwMDAwMDA4NDAyMDAwMDMyNUIKKzoxMDM2MjAwMDAwMDAwMDAwMDAwMDAwQ0MwMzAwMDAzMjAwMDA4MTA0MTQKKzoxMDM2MzAwMDhFMDEwMDgwMDI0MDI4QjIwMDAwQkQxMDAwMDAwMEQ4QkEKKzoxMDM2NDAwMDAyMDAwMEQyQUExMTAwMDAwMDAwMDA4QzBFMDAzNjMyRTkKKzoxMDM2NTAwMDUyMDAwMDAwMDAwMDAwNzQwRTAwMzYzMjE4MDAwMDAwMTYKKzoxMDM2NjAwMDAwMDAwMEU0MDMwMDM2MzIwOTAwMDAwMjAwMDAwMEUwMjAKKzoxMDM2NzAwMDAzMDAzNzMyRkVDQTAwMDAwMDAwMDBFNDAzMDAzNjMyQzcKKzoxMDM2ODAwMDBBMDAwMDAyMDAwMDAwRTAwMzAwMzczMjAwMDA4QzA0NTIKKzoxMDM2OTAwMDEyMDEwMDAwMDk0MDIwQjIwMDAwOEEwNDAwMDAwMDgwRUUKKzoxMDM2QTAwMDAyMDAwMDkwMDAwMDhDMDQxMjAwMDAwNDA5NDAyMEIyQzcKKzoxMDM2QjAwMDAwMDA4RjA0OUYwMTAwODAwMjAwOTBCMjAwMDA4RTA0ODEKKzoxMDM2QzAwMDEyMDAwMDA4MDk0MDIwQjIwMjAwOEEwNDA0MDEwMDc4QjgKKzoxMDM2RDAwMDA5MjQxN0I4MDYwMDAwMDAwMDAwMDA3ODA5NjQxNjM4QjUKKzoxMDM2RTAwMDAwMDA4QTA0MDQwMTAwODAwMjgxOTdCQ0ZFMDAwMDAwRjMKKzoxMDM2RjAwMDAwMDAwMDQ0MDMwMDM2MzJGRTAwMzYwMDAwMDAwMDQ4OUYKKzoxMDM3MDAwMDAzMDAzNjkyMDAwMDE2MTMxMjAwMDAwMDA5NDAyMEIyOTgKKzoxMDM3MTAwMDAwMDA5NTA0MTIwMDAwMDQwOTQwMjBCMjAwMDA5ODA0NDMKKzoxMDM3MjAwMDlGMDEwMDgwMDIwMDkwQjIwMDAwOTcwNDEyMDAwMDA4ODAKKzoxMDM3MzAwMDA5NDAyMEIyMDAwMDAwMDAwMDAwMDBCNDAyMDA5MDMyRjYKKzoxMDM3NDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMTUKKzoxMDM3NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQUUKKzoxMDM3NjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOEMKKzoxMDM3NzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRTUKKzoxMDM3ODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwN0UKKzoxMDM3OTAwMDAyMDAwMDkwMDYwMEFBMDQwMDAwMDAwQzA5NjQxNjk4QkMKKzoxMDM3QTAwMDAwMDBBMTAyMDAwMDAwMTQwODQwOTA5MjAwMDBEQjAyMUIKKzoxMDM3QjAwMDAwMDAwMDE0MDg0MDkwOTIzNDAwQzkwMzAwMDAwMDFDNkYKKzoxMDM3QzAwMDA4MDAzNjkyMTIwMEM5MDMwMDAwMDAxQzA4MDAzNjkyNUYKKzoxMDM3RDAwMDNBMDBDOTAzMDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzQ0UKKzoxMDM3RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQkEwMjAwMDAwMDE0RjcKKzoxMDM3RjAwMDA4NDA5MDkyMDAwMERFMDQwMDAwMDA4MDAyMDAwMDkwNkIKKzoxMDM4MDAwMDAwMDBENDAzMDAwMDAwMTQwODQwOTA5MkFCMDQwMDAwQjQKKzoxMDM4MTAwMDAwMDAwMDg4ODJDRDkwM0EwRDAwQ0QwNDAwMDAwMEZDMkQKKzoxMDM4MjAwMDAyRTQxNjk4MEQwMERGMDQwMDAwMDBGQzAyRTQxNjk4ODQKKzoxMDM4MzAwMDBEMDBFODA0MDAwMDAwRkMwMkU0MTY5ODAwMDBGNjA0MDUKKzoxMDM4NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwNTAwMDAwMDAwNjEKKzoxMDM4NTAwMDA5NDA5MDlEMDAwMDA2MDUwMDAwMDA4MDAyMDAwMDkwRDUKKzoxMDM4NjAwMDAwMDAxMDA1MDAwMDAwODAwMjAwMDA5MDAwMDAxQTA1MTIKKzoxMDM4NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjQwNTAwMDAwMDAwMEQKKzoxMDM4ODAwMDA5NDA5MDlEMDAwMDJCMDUwMDAwMDA4MDAyMDAwMDkwODAKKzoxMDM4OTAwMDAwMDAzNDA1MDAwMDAwMDAwOTQwOTA5RDAwMDAzQjA1MzkKKzoxMDM4QTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQUEwNTAwMDAwMDAwNTcKKzoxMDM4QjAwMDA5MDAwMDkyMDAwMEFBMDUwMDAwMDAwMDA5NDAwMDkyRTMKKzoxMDM4QzAwMDFEMDdBQzA1MDAwMDAwQTAwMjAwMzY5MjAwMDBCQTA1RkEKKzoxMDM4RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMkQKKzoxMDM4RTAwMDAyMDAwMDkwMDAwMERFMDQwMDAwMDBEQzBGNDA5MDkyMTcKKzoxMDM4RjAwMDAwMDA3RTA1MDAwMDAwODAwMjAwMDA5MDAwMDA4MzA1QUIKKzoxMDM5MDAwMDAwMDAwMEQ0MDIwMDAwOTIxMDAwOTgwNTAwMDAwMDg0MUUKKzoxMDM5MTAwMDFGNjQxNDk4MDAwMERFMDQwMDAwMDBFQzBFNDA5MDkyM0EKKzoxMDM5MjAwMDAwMDBBNDA1MDAwMDAwODAwMjAwMDA5MDAwMDBERTA0RkEKKzoxMDM5MzAwMDAwMDAwMEQ0MEU0MDkwOTIwMDAwQTcwNTAwMDAwMDgwMTcKKzoxMDM5NDAwMDAyMDAwMDkwMDAwMDRFMDYwMDAwMDBEQzBFNDA5MDkyNDUKKzoxMDM5NTAwMDAwMDBDQjA1MDAwMDAwODAwMjAwMDA5MDA4MDBEMDA1QTgKKzoxMDM5NjAwMDAwMDAwMDUwMUYyNDE2OTgwMDAwRTgwNTAwMDAwMEQ4NTEKKzoxMDM5NzAwMDAyMDAwMDkyMEQwMEYzMDUwMDAwMDBGQzAyRTQxNjk4MUUKKzoxMDM5ODAwMDAwMDBGNDA1MDAwMDAwRDAwMjAwMDA5MjAwMDAxRjAxQkEKKzoxMDM5OTAwMDAwMDAwMEQwMDIwMDAwOTIwMDAwMTUxMzAwMDAwMDgwMUIKKzoxMDM5QTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDM5QjAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDAwMDAwRkEKKzoxMDM5QzAwMDAwMDAwMDc4MDk0NTkwMzAwMDAwMTYxMzA2MDEwMDgwQzEKKzoxMDM5RDAwMDIyODA5N0JDM0YwMDE2MTMwNDAxMDA4MDgyMEQwMEIwQzYKKzoxMDM5RTAwMDAyMDBEMTA0QjAwMDAwQTBGMjBCMDBCOTAwMDAwMDAwRkEKKzoxMDM5RjAwMEEwMDAwMDA0NkI0MTkwMzQwMDAwMDIwNDgwMDEwMDgwQUMKKzoxMDNBMDAwMDAyNDBCMEI2MDAwMDAyMDQwNDAwMDA4MDAyODBCMEJDOTYKKzoxMDNBMTAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwOUEKKzoxMDNBMjAwMDAwMDAwMEE4MjJDMDJGMzcwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDNBMzAwMDY3MDEwMDM0MDA0MjAwMDAwMDA4MDAwMDg3OEQyQTNBMjgKKzoxMDNBNDAwMDAwMDAxNjEzMDQxMDAwMDAwNzAwQjBCMjAwMDAwMDAwRDAKKzoxMDNBNTAwMDAwMTgwMDAwMDcwMEQwMzIwMDAwMTYxMzEyMDAwMDQ4QzIKKzoxMDNBNjAwMEYyQzEzOEI0MTgwMDAwMDAwMDAwMDBGODczMEEwMzM5RUUKKzoxMDNBNzAwMDAyMDQzNjAwMDAwMDAwQzAwMjAwMzY5MjA4MDAwMjA0NzIKKzoxMDNBODAwMDAwMDAwMEY4OTM0MDAxOTkwMDAwRTIwNDlGMDAwMDgwQ0MKKzoxMDNBOTAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyQ0YKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAyMDBFMjA0MzIKKzoxMDNBQjAwMEIwMDAwMEEwRjIwQjAwQjkwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDNBQzAwMDBCODA5MDMyMDAwMDAwMDAwMDAwMDAwMDBENDA5MDMyOUEKKzoxMDNBRDAwMDAwMDAwMDAwQTAwMDAwMDQzQjQwQjAzMTAwMDBERTA0MDQKKzoxMDNBRTAwMDA0MDAwMDgwMDJDMDJGQkM4NDExREUwNDAwMDAwMDhDQTIKKzoxMDNBRjAwMDBFMDAzNjkyMDAwMDE2MTMwMjAwMDA4MDAyQzEyRkJDOTcKKzoxMDNCMDAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAyMDBFQTA0QjgKKzoxMDNCMTAwMEIwMDAwMEEwRjIwQjAwQjkwMDAwRUQwNDgwMDEwMDgwQUQKKzoxMDNCMjAwMDEyNDBCMEI2MDAwMDAwMDAwMDAwMDAwNDNCNDBCMDMzN0IKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMDRGRDRCRDAzNTAwMDAwMDAwMzQKKzoxMDNCNDAwMDAwMDAwMDA4MEIwMDAwMzIwMDAwMDAwMEEwMDAwMDBDODQKKzoxMDNCNTAwMDFCRTRCMDMyMDAwMDAyMDQwQjAwMDA4MDAyMDAwMEIwNDEKKzoxMDNCNjAwMDAwMDBGMzA0MDQwMDAwODAwMjQwOTBCMjFGMDAwMjA0MzEKKzoxMDNCNzAwMDAwMDAwMDgwMTE0MDAwOTkwMDAwRjIwNDA0MDAwMDgwNjEKKzoxMDNCODAwMDEyM0VGOEJBMDAwMDAwMDAwMDAwMDA4MDAxMDBGODMyODgKKzoxMDNCOTAwMDAwMDAwMjA0MDAwMDAwOTAwMTQwRjg5MjAwMDAxNjEzOUIKKzoxMDNCQTAwMDgwMDAwMDgwMDI4MUZDQjYwMDAwRkEwNDlGMDAwMDgwQzMKKzoxMDNCQjAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyQUUKKzoxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAxNjEzRDAKKzoxMDNCRDAwMDA0MDEwMDgwNDI4NTkwQjAwMDAwMDAwMDAwMDAwMEU0NzUKKzoxMDNCRTAwMDAzODA5MDMyMDkwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMzcKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjBBMDAwMDA0Q0UKKzoxMDNDMDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwREUwNDAwMDAwMEM4QkUKKzoxMDNDMTAwMDBGODFGQzk0MDAwMDE2MTMwMjAxMDA4MDcyNDI5MEJDRDgKKzoxMDNDMjAwMDAwMDAxNjEzMDYwMTAwODBFMjQyOTBCQzAwMDAxNjEzNEIKKzoxMDNDMzAwMDA0MDEwMDc4MDk2NDkwQjUwMDAwMDAwMDAwMDAwMEU0NzEKKzoxMDNDNDAwMDczMDA5MDNDMTAwMDAwMDQwMDAwMDBFMDAzMDAzNzMyRDUKKzoxMDNDNTAwMDAwMDBERTA0MDAwMDAwODAwMjAwMDA5MDAwMDAwOTA1NjIKKzoxMDNDNjAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4RTkKKzoxMDNDNzAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyM0QKKzoxMDNDODAwMDAwMDAxNjEzMDQwMTAwODA0Mjg1OTBCMDAwMDAwMDAwN0YKKzoxMDNDOTAwMDAwMDAwMEU0MDM4MDkwMzIwMTAwMDAwNDAwMDAwMEUwMTYKKzoxMDNDQTAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFMDBGODA5MDMyNzcKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjAyMDAwMDA0MTUKKzoxMDNDQzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwREUwNDAwMDAwMEU0RTIKKzoxMDNDRDAwMDBGNDA5MDkyMDAwMDEzMDU5RjAwMDA4MDAyMDA5MEIyRjgKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwQzEKKzoxMDNDRjAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMTYxMzA0MDEwMDgwMUEKKzoxMDNEMDAwMDQyODU5MEIwMDAwMDAwMDAwMDAwMDBFNDAzODA5MDMyODMKKzoxMDNEMTAwMDAzMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwNTAKKzoxMDNEMjAwMDAwMDAwMEE4MEU4MDkwMzIwMDAwMDAwMDAwMDAwMEU0QjcKKzoxMDNEMzAwMDAzNDA5MDMyMDQwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMkEKKzoxMDNENDAwMDAwMDBERTA0MDAwMDAwQUMwRTQwOTA5MjAwMDAxRDA1NTMKKzoxMDNENTAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4RjgKKzoxMDNENjAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyNEMKKzoxMDNENzAwMDAwMDAxNjEzMDQwMTAwODA0Mjg1OTBCMDAwMDAwMDAwOEUKKzoxMDNEODAwMDAwMDAwMEU0MDM4MDkwMzIwNTAwMDAwNDAwMDAwMEUwMjEKKzoxMDNEOTAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDAzNDA5MDMyQ0UKKzoxMDNEQTAwMDA2MDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQkQKKzoxMDNEQjAwMDAwMDAwMDQ0MEY4MDkwMzIwMDAwREUwNDAwMDAwMDQ4NDQKKzoxMDNEQzAwMDBGNDA5MDkyMDAwMDE2MTMwNjAxMDA4MDgyNDI5MEJDQzIKKzoxMDNERDAwMDAwMDAxNjEzMDQwMTAwNzgwOTY0OTBCNTAwMDAyODA1NUUKKzoxMDNERTAwMDA0MDEwMDgwODI0MjkwQkMwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDNERjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDBFNDAzMDA5MDMyREYKKzoxMDNFMDAwMDEyMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDBERTA0NkUKKzoxMDNFMTAwMDAwMDAwMDQwMUY0MDkwOUMwMDAwMkUwNTlGMDAwMDgwODUKKzoxMDNFMjAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyM0IKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAxNjEzNUQKKzoxMDNFNDAwMDA0MDEwMDgwNDI4NTkwQjAwMDAwMDAwMDAwMDAwMEU0MDIKKzoxMDNFNTAwMDAzODA5MDMyMDcwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQzYKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjA4MDAwMDA0NUQKKzoxMDNFNzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwREUwNDAwMDAwMDgwOTQKKzoxMDNFODAwMDAyMDAwMDkwMDAwMDE2MTMwNjAxMDA4MDgyNDI5MEJDRTAKKzoxMDNFOTAwMDAwMDAxNjEzMDQwMTAwNzgwOTY0OTBCNTAwMDAzODA1OEQKKzoxMDNFQTAwMDA0MDEwMDgwODI0MjkwQkMwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDNFQjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDBFNDAzMDA5MDMyMUUKKzoxMDNFQzAwMDExMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDBERTA0QUYKKzoxMDNFRDAwMDAwMDAwMEZDMUY0MDkwOUMwMDAwM0UwNTlGMDAwMDgwRjkKKzoxMDNFRTAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyN0IKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAzMDkwMDAwQkEKKzoxMDNGMDAwMDAwMDAwMDI4MDgwMDM2MzIwMDAwNTcwNTAwMDAwMDMwOEQKKzoxMDNGMTAwMDA4MDAzNkQyMDAwMDYxMDUwMDAwMDA0NDA4ODAwMEQyOEQKKzoxMDNGMjAwMDAwMDA0NzA1MDQwMTAwODAwMjAwODRCMjAzMEUwMDAwNzcKKzoxMDNGMzAwMDAwMDAwMDI4MDgwMDM2MzI4MDAwNTcwNTAwMDAwMDMwREQKKzoxMDNGNDAwMDA4MDAzNkQyMDAwMDYxMDUwMDAwMDA0NDA4QzAwMEQyMUQKKzoxMDNGNTAwMDAwMDA0NzA1MDQwMTAwODAwMjAwODRCMjAwMDA0RTA1MDUKKzoxMDNGNjAwMDAwMDAwMDQ0MDgwMDAxOTI4MDAyMDAwMDAwMDAwMDAwRjAKKzoxMDNGNzAwMDA3MDAzNjMyOEMwNTAxMDAwMDA4MDAwMDA3MDAzNzMyQzgKKzoxMDNGODAwMDAwMDAxNjEzMDQxMDAwMDAwNzgwOTBCMjAwMDAwMDAwMkIKKzoxMDNGOTAwMDAwMTgwMDAwMDc0MDkwMzIwMDAwMDAwMDAwMDAwMDQ4QjgKKzoxMDNGQTAwMEYyQzEzODM0MDAwMDE2MTMxMjAwMDA4MDAyMDAwMEIwODUKKzoxMDNGQjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTIwMDAwMDAwMjIKKzoxMDNGQzAwMDAwMDAwMEU0MDMwMDM2MzIwOTAwMDAwMjAwMDAwMEUwQjcKKzoxMDNGRDAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDAzNDA4NDMyOTgKKzoxMDNGRTAwMDBBMDAwMDAyMDAwMDAwRTAwMzAwMzczMjhDMDUwMTAwRTcKKzoxMDNGRjAwMDAwMDAwMEE4MDIwMDM3MzJBMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDQwMDAwMDA5MDAzNjMyMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyMjYKKzoxMDQwMTAwMDAwMDA1NDA1MDYwMTAwMDAxOTAwOTBCQzAwMDBERTA0RjkKKzoxMDQwMjAwMDAwMDAwMDgwMDIwMDAwOTA4QzA1MDEwMDAwMDAwMEM4MjQKKzoxMDQwMzAwMDAyMDAzNzMyODAwMjAwMDAwMDAwMDAzQzA4MDAzNjMyRTcKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDAwMzQwODAwMDEzMjAwMDA1QzA1QTAKKzoxMDQwNTAwMDAyMDAwMDgwRDJFMDgzQkMwMDAwMDAwMDAwMDAwMDM0QjkKKzoxMDQwNjAwMDA4QzA4MzMyMDAwMDcyMDUwMDAwMDA4MDAyMDAwMEYwRUEKKzoxMDQwNzAwMDAwMDAwMDAwMDAwMDAwQTAwNzgwODMzMjAwMDAwMDAwNjQKKzoxMDQwODAwMDAwMDAwMDMwRDgyMDgzM0EwMDAwNUEwNTA0MDEwMDNDQUIKKzoxMDQwOTAwMEQ4RTA4M0JDMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwNTYKKzoxMDQwQTAwMDAwMDAwMDAwMDAwMDAwNDAwODAwMDAzMjAwMDAwMDAwOTYKKzoxMDQwQjAwMDAwMDAwMDQ4MDgwMDAwMzI4QzA1MDEwMDAwMDAwMEM4MjQKKzoxMDQwQzAwMDAyMDAzNzMyMDAwMjAwMDAwMDAwMDBDODgyOEQyQzNBNDYKKzoxMDQwRDAwMDgwMDAwMDAwMDAwMDAwM0MwODAwMzYzMjAwMDAwMDAwQjQKKzoxMDQwRTAwMDAwMDAwMDc4MDk4MDc4MzI1QTVBMDAwMDA0MDEwMDgwRUMKKzoxMDQwRjAwMDgyOEQ5NzVDMDAwMDZBMDUwMjAxMDA0OEE4OUU4NEJBODAKKzoxMDQxMDAwMDAwMDAwMDAwMDAwMDAwNDgxODgwODQzQTAwMDA2ODA1QTQKKzoxMDQxMTAwMDA2MDEwMDNDMjhDMDgzQkMwMDAwMDAwMDAwMDAwMDc4QkQKKzoxMDQxMjAwMDA5ODU4NDMwMTAwMDAwMDAwMDAwMDA0ODg4OEQ4NDM2MjYKKzoxMDQxMzAwMDAwMDA2RjA1OTAwMTAwNDhFOEE1ODRCQTAwMDAwMDAwNjcKKzoxMDQxNDAwMDAwMDAwMDQ4MTg4MDg0M0EwMDAwMDAwMDAwMDAwMDQ4ODkKKzoxMDQxNTAwMDA4ODU4NDMwMDAwMDAwMDAwNDAxMDA4MDAyODU4NDVDMzIKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMTAwNDAwODQwMDA1MjAwMDAwMDAwNzQKKzoxMDQxNzAwMDAwMDAwMEU0MDMwMDgzMzIwMTAwMDAwMjAwMDAwMEUwQzAKKzoxMDQxODAwMDAzMDAzNzMyMEMwMDc4MDUwMDAwMDAyQ0Q4QTA4MkY5MUIKKzoxMDQxOTAwMDA1MDAwMDAyMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQ0MKKzoxMDQxQTAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwMDAwMDAwMDEwMDM4MjQKKzoxMDQxQjAwMDA4NDAzRTcyMDAwMDAwMDAwMDAwMDBFNDAzQzA4MjMyQUMKKzoxMDQxQzAwMDAyMDAwMDAyMDAwMDAwRTAwMzAwMzczMjAyMDAwMDAyOUIKKzoxMDQxRDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMDgwMTMKKzoxMDQxRTAwMDAyMDAwMDMwMDAwMDdBMDU4MDAwMDA4MEYyNDAzRUI2RjgKKzoxMDQxRjAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDAwMDA4MTA1NDYKKzoxMDQyMDAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4NDMKKzoxMDQyMTAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyOTcKKzoxMDQyMjAwMDAwMDAwMDAwMDAwMDAwODQwRTgwOTAzMjAwMDBERTA0RDgKKzoxMDQyMzAwMDAwMDAwMDg4MEU0MDkwOTIwODAwMDAwMDAwMDAwMEY4ODYKKzoxMDQyNDAwMDkzNDAwMTM5MDAwMDg3MDU5RjAwMDA4MDAyMDA5MEIyNzIKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwNEIKKzoxMDQyNjAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMDAwMDAwMDIwMzIKKzoxMDQyNzAwMDA3NDBGNTMyMDAwMDAwMDAwMDA4MDAyMDA3MDAwMDMyNkYKKzoxMDQyODAwMDAwMDAwMDAwMDAxMDAwMjAwN0MwRjUzMjAwMDAwMDAwMTAKKzoxMDQyOTAwMDAwMTgwMDIwMDc0MEY2MzIwMDAwMDAwMDAwMjAwMDIwMzcKKzoxMDQyQTAwMDA3ODBGNjMyMDAwMDAwMDAwMDI4MDAyMDA3QzBGNjMyMjgKKzoxMDQyQjAwMDAwMDAwMDAwMDAzMDAwMjAwNzAwRjczMjAwMDAwMDAwN0UKKzoxMDQyQzAwMDAwMzgwMDIwMDc4MEZGMzIwMDAwMDAwMDAwMDAwMEQ4MDYKKzoxMDQyRDAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3NDAwOTMyMjgKKzoxMDQyRTAwMDAwMDAwMDAwMDAwODAwMDA3N0MwMjkzNzAwMDAwMDAwMkYKKzoxMDQyRjAwMDAwMTAwMDAwMDc4MDkwMzIwMDAwMDAwMDAwMTgwMDAwNEQKKzoxMDQzMDAwMDA3NDA5MDMyMDAwMDE2MTMxMjAwMDA0OEYyQzEzOEI0ODIKKzoxMDQzMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwREUKKzoxMDQzMjAwMDAwMDAwMDA4QzgwMTAwMzQwMDAwRjYwMzAwMDAwMEZDOTMKKzoxMDQzMzAwMDAyMDAwMDkyMDAwMDlBMDU4MDAxMDA4MEYyNDE5MEI2RDAKKzoxMDQzNDAwMDAwMDA5QjA1MDAwMDAwQzgyRjgxRkM5NDAwMDAwMDAwQzUKKzoxMDQzNTAwMDAwMDAwMEM4MkY4MUZDMzUwMDAwMDAwMDAwMDAwMDgwMzQKKzoxMDQzNjAwMDBGNDU5MDMwMDAwMDlFMDUwMjAwMDA4MDAyN0VGOEJDRTAKKzoxMDQzNzAwMDAwMDAwMDAwMDAwMDAwODQwRjAwRjgzMjAwMDAwMDAwODAKKzoxMDQzODAwMDAwMDAwMDAwMTk0MEY4MzcwMDAwMDAwMDAwMDAwMDg0MjEKKzoxMDQzOTAwMDNGNDBGODM3MDAwMDAwMDAwMDAwMDA4NDBGNjRGODNBNDYKKzoxMDQzQTAwMDAwMDAwMDAwMDAwMDAwMDAxOTAwRjgzNzAwMDAwMDAwQzUKKzoxMDQzQjAwMDAwMDAwMDgwM0YwMEY4MzcwMDAwREUwNDAwMDAwMDgwQUQKKzoxMDQzQzAwMDBGMjRGODlBMDAwMEE2MDU4MDAxMDA4MEYyNDE5MEI2MDMKKzoxMDQzRDAwMDAwMDBERTA0MDAwMDAwQzgzRjgxRkM5NDAwMDBERTA0MDEKKzoxMDQzRTAwMDAwMDAwMEM4M0Y4MUZDOTUwMDAwQTkwNTA0MDEwMDgwODEKKzoxMDQzRjAwMDAyNDA5MEJDMDAwMDAwMDAwMDAwMDAwNDA5QzAwMDMyMzAKKzoxMDQ0MDAwMDAwMDBERTA0MDAwMDAwRTQxRTQwOTA5QzAwMDAwMDAwNUMKKzoxMDQ0MTAwMDAwMDAwMEE4MjIwMDkwMzcwMDAwREUwNDAwMDA4NkMwRTMKKzoxMDQ0MjAwMDA3NDA5MDkyMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MTYKKzoxMDQ0MzAwMDBEMDAwMDAwMDAwMDAwRkMwMkU0MTYzODAwMDAwMDAwM0YKKzoxMDQ0NDAwMDAwMDAwMDAwMDkwMDAyMzIwMDAwQjQwNTA0MDAwMDgwRjIKKzoxMDQ0NTAwMDAyMDBCMEIyMDAwMDAwMDAwMDAwMDAwMDBCMDAwMDMyQkIKKzoxMDQ0NjAwMDIwMDAwMDAwMDAwMDAwQTA4MjBEMkEzQTAwMDBBRjA1RTUKKzoxMDQ0NzAwMDA0MDEwMDAwMTkwMDkwQkMwMDAwQjYwNTAwMDAwMDI4RUYKKzoxMDQ0ODAwMDc5MDEwMDk0MDAwMDAwMDAwMDAwMDBDODNGODBGQzM0NjcKKzoxMDQ0OTAwMDQwODAwMDAwMDAwMDAwMjgwOTgwMzYzMjAwMDA4MTExQjEKKzoxMDQ0QTAwMDAwMDAwMEQ4MDIwMDAwRDIwMDAwMDIwNDA0MDAwMDgwRDYKKzoxMDQ0QjAwMDAyODA5MkJDMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5NjMKKzoxMDQ0QzAwMDAyMDQzNjAwMDAwMDAwQzAwMjAwMzY5MkVBMDVDMDA1NzIKKzoxMDQ0RDAwMDA0MDEwMDgwODI0RDkwQkMwMDAwMDAwMDAwMDAwMEVDNTAKKzoxMDQ0RTAwMDBGMDAxNTMyMDBGRTFGMDAwMDAwMDBGMDBGMDAzNzMyRjEKKzoxMDQ0RjAwMEYwRkYwMDAwMDAwMDAwRTgwRjAwMzYzMjk4MDUwMDAwRDEKKzoxMDQ1MDAwMDAwMDAwMEY0MEYwMDM2MzIwMDAwQzYwNTAwMDAwMEM4QUQKKzoxMDQ1MTAwMDRGODBGQzk1MzYyMzE2MTMwNDAxMDA4MDgyNEQ5MEJDMTkKKzoxMDQ1MjAwMDAwMDAwMDAwMDAwMDAwRUMwRjgwMTQzMjAwRjgxRjAwQjMKKzoxMDQ1MzAwMDAwMDAwMEYwMEYwMDM3MzJDMEZGMDAwMDAwMDAwMEU4NkMKKzoxMDQ1NDAwMDBGMDAzNjMyOTgyNzAwMDAwMDAwMDBGNDBGMDAzNjMyQ0EKKzoxMDQ1NTAwMDAwMDAwMDAwMDAwMDAwQzg0RjgwRkMzNDA0MDAwMDAwOTAKKzoxMDQ1NjAwMDAwMDAwMDYwOEY0RDkwM0EwMDAwMTYxMzYwMDEwMDgwM0IKKzoxMDQ1NzAwMDAyMDAwMEIwMDAwMDE2MTM3QTAxMDA4MDAyMDAwMEIwQjMKKzoxMDQ1ODAwMDAwMDA0MjExMDAwMDAwODAwMjAwMDBEMDAwMDBERTA0QTQKKzoxMDQ1OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQ0QwNTgwMDEwMDgwMzYKKzoxMDQ1QTAwMDAyNDA5MEI2MDAwMDAwMDAwMDAwMDBDODZGODBGQzM0OUMKKzoxMDQ1QjAwMDAwMDBDRjA1ODAwMTAwODAxMjQwOTBCNjAwMDAwMDAwOEUKKzoxMDQ1QzAwMDAwMDAwMEM4NUY4MEZDMzQwMDAwREUwNDAwMDAwMDgwQjIKKzoxMDQ1RDAwMDAyMDAwMDkwMDAwMEQyMDUwNDAxMDA4MEIyNDE5MEIwQkEKKzoxMDQ1RTAwMDgwMDdERTA0MDAwMDAwQzg4RjhERkM5MTAwMDBENDA1MTgKKzoxMDQ1RjAwMDgwMDAwMDgwMTI0MDkwQjYwMDAwRDUwNTAwMDAwMEM4ODEKKzoxMDQ2MDAwMDdGODBGQzk1MDAwMDAwMDAwMDAwMDBDODdGODBGQzM0MjMKKzoxMDQ2MTAwMDAwMDBENzA1ODAwMDAwODAwMjQwOTBCNjAwMDBEODA1NTkKKzoxMDQ2MjAwMDAwMDAwMEM4OEY4MEZDOTUwMDAwMDAwMDAwMDAwMEM4NUEKKzoxMDQ2MzAwMDhGODBGQzM0MDAwMERBMDU4MDAwMDA4MDQyNDA5MEI2OTQKKzoxMDQ2NDAwMDAwMDBEQjA1MDAwMDAwQzg5RjgwRkM5NTAwMDAwMDAwMTIKKzoxMDQ2NTAwMDAwMDAwMEM4OUY4MEZDMzQwMDAwREQwNTgwMDAwMDgwNjEKKzoxMDQ2NjAwMDMyNDA5MEI2MDAwMERFMDUwMDAwMDBDOEFGODBGQzk1MjcKKzoxMDQ2NzAwMDAwMDAwMDAwMDAwMDAwQzhBRjgwRkMzNDAwMDBFMTA1MkQKKzoxMDQ2ODAwMDgwMDAwMDgwMjI0MDkwQjY4NDExMDAwMDAwMDAwMDhDNjEKKzoxMDQ2OTAwMDBFMDAzNjMyMDAwMEUzMDUwMDAwMDBDODFGODFGQzk1QzMKKzoxMDQ2QTAwMEFBMTEwMDAwMDAwMDAwOEMwRTAwMzYzMjAwMDAwMDAwNEQKKzoxMDQ2QjAwMDAwMDAwMEM4MUY4MUZDMzQwMDAwMTYxMzA2MDEwMDgwQjIKKzoxMDQ2QzAwMDgyMDJGNUJDMDAwMDE2MTMwMzAwMDA3ODA5MDBGNUJENTYKKzoxMDQ2RDAwMDAwMDAxNjEzMDQwMTAwODBFMjI1RjVCNTEwMDAwMDAwNkIKKzoxMDQ2RTAwMDAwMDAwMDRDMUYyNDE2MzgwMDAwREUwNDAwMDAwMDUwQkIKKzoxMDQ2RjAwMDFGMDBGNTlDODAwNzE2MTMwNDAwMDA4MDgyOERGQ0IwMUIKKzoxMDQ3MDAwMDAwMDBFQzA1OUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwNTUKKzoxMDQ3MTAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0ODIKKzoxMDQ3MjAwMDA5QzBGRDMyMDAwMDAwMDAwMDAwMDAwMDE3MDBGNTNBNEIKKzoxMDQ3MzAwMDhDMDQwMTAwMDAwODAwMDAwNzAwMzczMjAwMDAxNjEzNDcKKzoxMDQ3NDAwMDA0MTAwMDAwMDc4MDkwQjIwMDAwMDAwMDAwMTgwMDAwNzQKKzoxMDQ3NTAwMDA3NDA5MDMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MzYKKzoxMDQ3NjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDBERTA0QTgKKzoxMDQ3NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREUwNDAwMDAwMEVDNTkKKzoxMDQ3ODAwMDAzNDA5MDkyMDAwMDE2MTMwNDAwMDA4MDAyNDA5MEJDODkKKzoxMDQ3OTAwMDAwMDBGNTA1QjIwMDAwRDgwMjAwMDBCMjAwMDAwMDAwRTEKKzoxMDQ3QTAwMDAwMDIwMUVDMTZFNDZFM0EwODAwMDAwMDAwMDAwMEY4NzgKKzoxMDQ3QjAwMDkzNDAwMTM5MDAwMDFGMDYxNzEwMDFGODAyMDA2RUIyODUKKzoxMDQ3QzAwMDA2MDAwMDA2MDQwMTAwODA4MjhEMkZCMDAzMDAwMDAwNjcKKzoxMDQ3RDAwMDAwMDAwMEY4ODI4RDJGMzIwMEMwNjExMDAwMDAwMDI4MTgKKzoxMDQ3RTAwMDA5ODAzNkQyMDAwMDAwMDAwMDAyMDFFQzE2QzA2RTNDQzkKKzoxMDQ3RjAwMDAwMDAwMDAwMDAxODg2QzgwNjAwMDAzMjE4MDAzNjAwQ0QKKzoxMDQ4MDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDEwNjAwMDAwMEQwNjAKKzoxMDQ4MTAwMDAyMDAwMDkyMDAwMDA3MDYwNDE5ODY4MDAyODA2Q0JDMkEKKzoxMDQ4MjAwMDAwMDAxNjEzODAwMTAwODAxMjgwMkZCNjAwMDAwMDAwRTcKKzoxMDQ4MzAwMDAwMDAwMDAwMDkwMDZFMzIwMDAwMDAwMEMxMDgwMDA0MDIKKzoxMDQ4NDAwMDA5MDA2RTMyMDAwMDAwMDBDMDE1ODY3ODBGQzA2QzMyN0YKKzoxMDQ4NTAwMDAwMDAwRDA2ODAwMTAwODAyMjgwMkZCNjAwMDAwRDA2QUEKKzoxMDQ4NjAwMDAwMTg4NkM4MDY0MDAwOTIwMDAwMTYxMzgwMDEwMDgwRTAKKzoxMDQ4NzAwMDIyODAyRkI2MDAwMDAwMDAwMDQwMDAwMDA5MDA2RTMyQzgKKzoxMDQ4ODAwMDAwMDAwMDAwQzI0ODAwMDQwOTAwNkUzMjAwMDAwMDAwNzEKKzoxMDQ4OTAwMEMwMTY4Njc4MEZDMDZDMzIwMDAwMEQwNjgwMDEwMDgwQzMKKzoxMDQ4QTAwMDEyODAyRkI2MDAwMDAwMDAwMDE4ODZDODA2MDAwMDMyRjMKKzoxMDQ4QjAwMDAwNDAwMDAwMDAwMDAwMjgwOTgwMzYzMjAwMDAxNTA2ODQKKzoxMDQ4QzAwMDA0MDIwMTgwMDJDMDZFQkMwMDAwNjExMDAwMDIwMUVDMTUKKzoxMDQ4RDAwMDE2QzA2RURDMDAwMDEzMDY4MDAwMDA4MDAyODAyRkI2MzgKKzoxMDQ4RTAwMDAwMDAxNTA2ODEwMDAwRjgyMjgwMkZCNDAwMDAxNTA2OTQKKzoxMDQ4RjAwMDAwMTg4NkM4MDY0MDAwOTIwMDAwMTUwNjgyMDAwMEY4RTUKKzoxMDQ5MDAwMDEyODAyRkI0MDAwMDAwMDAwMDE4ODZDODA2MDAwMDMyOTQKKzoxMDQ5MTAwMDAwMDAxNjEzMDQwMTAwODAwMjAwMkRCQzAwMDAxNjEzRDUKKzoxMDQ5MjAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMDAwMDAwMTA4NkM4MzkKKzoxMDQ5MzAwMDA2MDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3QzAwQTMyM0MKKzoxMDQ5NDAwMDAwMzgwMDAwMDAwODAwMDAwNzAwMzYzMjAwMDAxNjEzOEYKKzoxMDQ5NTAwMDA0MTAwMDAwMDcwMDkwQjIwMDAwMDAwMDAwMTgwMDAwRTIKKzoxMDQ5NjAwMDA3NDA5MDMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MjQKKzoxMDQ5NzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNzgKKzoxMDQ5ODAwMDE3MDEwMEY4QTI4MDJGMzQwMDAwMTYxMzAyMTA4NjgwNTEKKzoxMDQ5OTAwMDcyODI2Q0JDMDAwMDAwMDAwMDEwODZBODQyODA2QzM3NTgKKzoxMDQ5QTAwMDAwMDAyQTA2MTIwMDcwMzgwMjAwN0VCMjAwMDAxNjEzQzIKKzoxMDQ5QjAwMDEyMDA3MDNDMDIwMDdFQjIwMDAwMTYxMzEyMDA3MDMwMkMKKzoxMDQ5QzAwMDAyMDA3RUIyMDAwMDE2MTMxMjAwNzAzNDAyMDA3RUIyQTQKKzoxMDQ5RDAwMDAwMDAyMTA2MDIwMTAwODBCMjgyMkFCQzAwMDAwMDAwMTMKKzoxMDQ5RTAwMDE3MDAwMEQwMDIwMDAwMzIwNjAwMDAwNjA0MDEwMDgwMUIKKzoxMDQ5RjAwMDgyOEQyRkIwMDAwMEZBMDUwNDAzMDE4MDAyQzA2RUJDNTYKKzoxMDRBMDAwMDAwMDAzNTA2MDAwMDAwODAwMjAwMDA5MDAwMDAyQzA2MjcKKzoxMDRBMTAwMDA0MDMwMTgwMDJDMDZFQkMwMDAwMzUwNjAwMTA4NkM4ODkKKzoxMDRBMjAwMDQ2ODAyQTk2MDAwMDAwMDAwMDEwODZDODQ2ODAyQTM2N0MKKzoxMDRBMzAwMDAwMDAzMDA2ODAwMDAwODAxMjgwMkZCNjAzMDAzMjA2OEUKKzoxMDRBNDAwMDIyMDAwMEY4ODI4RDJGQjIwMDAwMzIwNjAwMTg4NkM4QkUKKzoxMDRBNTAwMDA2MDAwMDkyMDAwMDM1MDY4MDAwMDA4MDIyODAyRkI2RkMKKzoxMDRBNjAwMDAwMDAwMDAwQzIwMTAwRjgwMjgwMkYzNTAwQzA2MTEwNzQKKzoxMDRBNzAwMDAwMDAwMDI4MDk4MDM2RDIwMDAwMDAwMDAwMDIwMUVDOEUKKzoxMDRBODAwMDE2QzA2RTNDMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RTcKKzoxMDRBOTAwMDAwMDAwMDAwMDAxMDAxRTAwNjgwMkYzMjAwMDAwMDAwM0UKKzoxMDRBQTAwMDAwMDAwMEE4RTEwMDAwMzQwMDAwMDAwMEEyMDAwMEZDQUIKKzoxMDRBQjAwMDAyMDAwMDMyMDAwMEY2MDM4MDAxMDA4MEEyODAyRkI2QzEKKzoxMDRBQzAwMDAwMDAzQjA2QjkwMTAwRDgwMjgwMDFCMjAwMDBGNjAzRTUKKzoxMDRBRDAwMDAwMDAwMEY4MDIwMDAwOTIwMDAwMDAwMDAwMDAwMDM4MTIKKzoxMDRBRTAwMDE4ODBGNzNBMDAwMDAwMDAwMDAwMDAzOEY4QkY4MzMwNUIKKzoxMDRBRjAwMDAwMDAzRjA2MDQwMTAwODBGMkJEODNCQzAwMDBGNjAzMDUKKzoxMDRCMDAwMEE5MDAwMEY4MDIwMDAwOTIwMEMwNDYwNjE4MDEwMDBDM0YKKzoxMDRCMTAwMEE4Q0QzRUIyMDAwMDQyMDY4NDAwMDA3NDFGNDBGN0JBRTAKKzoxMDRCMjAwMDAwMDBGNjAzQTkwMDAwRjgwMjAwMDA5MjAwMDAwMDAwNTcKKzoxMDRCMzAwMDAwMDAwMDc0MEYwMDAwMzIwMEMwNDYwNjE4MDEwMDBDOEYKKzoxMDRCNDAwMEE4Q0QzRUIyMTgwMDM2MDAwMDAwMDBGODczOEEwM0Y5QzEKKzoxMDRCNTAwMDAwMDA0MzA2MDAwMDAwQjAwMjAwMDA5MjAwMDAwMDAwQzgKKzoxMDRCNjAwMDAwMDAwMDdDMEY4MDgzMzIwMDAwMDAwMDAwMjgwMDAwNUQKKzoxMDRCNzAwMDA3MDAwMDMyMDAwMDAwMDAwMDMwMDAwMDA3MDAwMDMyOTMKKzoxMDRCODAwMDAwMDEwMDgwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwRkMKKzoxMDRCOTAwMDAwM0MwMDBDMDc4MDgzMzIwMDAwMTYxMzEyMDAwMDQ4MEUKKzoxMDRCQTAwMDAyQzA4MEIyMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2RTAKKzoxMDRCQjAwMDAwMDBGNjAzQTkwMDAwMDhFODAxMDA5NDAwMDA1NDA2NzQKKzoxMDRCQzAwMDA0MDEwMDgwQTJDMEVEQkM1MjAwMDAwMDAwMDAwMDc0OEYKKzoxMDRCRDAwMDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDMDBFNDAwMTMyMUUKKzoxMDRCRTAwMDQwN0UwNTAwMDAwMDAwQjQwRTAwMzczMjAwMDAwMDAwRDcKKzoxMDRCRjAwMDAwMDAwMEM0MEU4MDA3MzI2NDAwNUEwNjAwMDAwMENDOUEKKzoxMDRDMDAwMDBFMDAzNjkyNjQwMDE2MTMwNDAxMDA4MDgyQ0RFREJDQzQKKzoxMDRDMTAwMDI5MDAwMDAwMDAwMDAwNzQwRTAwMzYzMjAwMDAwMDAwODEKKzoxMDRDMjAwMDAwMDAwMEMwMEU0MDAwMzJBMDhDMDAwMDAwMDAwMEI0NjQKKzoxMDRDMzAwMDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDNDBFQzAwMDMyM0EKKzoxMDRDNDAwMDAwMDAwMDAwMDAwMDAwQ0MwRTgwMDIzMjEwMDAwMDAwQzYKKzoxMDRDNTAwMDAwMDAwMEU0MzM3QkVDMzkxRTAwMDAwMTAwMDAwMEUwOUUKKzoxMDRDNjAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBDODZFQzBFQzM3QkYKKzoxMDRDNzAwMDAwMDBERTA0MDAwMDAwRDgwRUMwRUQ5MjAwMDAxNjEzMDQKKzoxMDRDODAwMDA0MzEwMjgwQTJEQjJDQkMwMDAwMTYxMzA0MDEwMDgwNUEKKzoxMDRDOTAwMDAyODA4MEIyMDAwMDE2MTMwMjFDMDE4MDUyQzA2RUJDNUMKKzoxMDRDQTAwMDJDMDAxNjEzMDIwMTAwODA4MkNEODFCQzNGMDAxNjEzMzgKKzoxMDRDQjAwMDAyMDAwMDgwODJDRDgxQkMzNjAwNjcwNjA0MDAwMDgwQkYKKzoxMDRDQzAwMDgyQ0Q4MUJDMEYwMDAwMDAwMDAwMDAxMDA5MDAzNjMyQzgKKzoxMDRDRDAwMDJDMDAwMDAwMDAwMDAwMTQ4OUNEODEzQzEwMDA4MDEyREYKKzoxMDRDRTAwMDAwMUMwMTE0NTlFNDZFRDk2RjA2MDAwMDAwMDAwMDg4MTIKKzoxMDRDRjAwMDgyQ0Q4MTNBMDAwMDE2MTMwNDAxMDA4MDAyODA4MEIyNDgKKzoxMDREMDAwMDAwMDAxNjEzMDQzMTAyODBBMkRCMkNCQzAwMDAxNjEzMzUKKzoxMDREMTAwMDAyMTgwMTgwOTJDMDZFQkMyQzAwMTYxMzAyMDAwMDgwQTUKKzoxMDREMjAwMDgyQ0Q4MUJDMTAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyNjYKKzoxMDREMzAwMDEwMDA4MDEyMDAxODAxMTQ3OUUwNkVEOTZGMDYwMDAwOEYKKzoxMDRENDAwMDAwMDAwMDg4ODJDRDgxM0FBRTA2MDAwMDAwMTgwMTg4N0MKKzoxMDRENTAwMDgyQ0Q2RTNBQjcwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBMDcKKzoxMDRENjAwMEMwMDYwMDAwMDAxODAxODg4MkNENkUzQUM5MDYwMDAwMTYKKzoxMDRENzAwMDAwMTgwMTg4ODJDRDZFM0FEMjA2MDAwMDAwMTgwMTg4MjIKKzoxMDREODAwMDgyQ0Q2RTNBREIwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBQjMKKzoxMDREOTAwMEU0MDYwMDAwMDAxODAxODg4MkNENkUzQUVEMDYwMDAwOUUKKzoxMDREQTAwMDAwMTgwMTg4ODJDRDZFM0FGNjA2MDAwMDAwMTgwMTg4Q0UKKzoxMDREQjAwMDgyQ0Q2RTNBRkYwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBNUYKKzoxMDREQzAwMDA4MDcwMDAwMDAxODAxODg4MkNENkUzQTExMDcwMDAwMjQKKzoxMDRERDAwMDAwMTgwMTg4ODJDRDZFM0ExQTA3MDAwMDAwMTgwMTg4NzkKKzoxMDRERTAwMDgyQ0Q2RTNBMjMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMEEKKzoxMDRERjAwMDJDMDcwMDAwMDAxODAxODg4MkNENkUzQTM1MDcwMDAwQUMKKzoxMDRFMDAwMDAwMTgwMTg4ODJDRDZFM0EzRTA3MDAwMDAwMTgwMTg4MjQKKzoxMDRFMTAwMDgyQ0Q2RTNBNDcwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBQjUKKzoxMDRFMjAwMDUwMDcwMDAwMDAxODAxODg4MkNENkUzQTU5MDcwMDAwMzMKKzoxMDRFMzAwMDAwMTgwMTg4ODJDRDZFM0E2MjA3MDAwMDAwMTgwMTg4RDAKKzoxMDRFNDAwMDgyQ0Q2RTNBNkIwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBNjEKKzoxMDRFNTAwMDc0MDcwMDAwMDAxODAxODg4MkNENkUzQTdEMDcwMDAwQkIKKzoxMDRFNjAwMDAwMTgwMTg4ODJDRDZFM0E4NjA3MDAwMDAwMTgwMTg4N0MKKzoxMDRFNzAwMDgyQ0Q2RTNBOEYwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMEQKKzoxMDRFODAwMDk4MDcwMDAwMDAxODAxODg4MkNENkUzQUExMDcwMDAwNDMKKzoxMDRFOTAwMDAwMTgwMTg4ODJDRDZFM0FBQTA3MDAwMDAwMTgwMTg4MjgKKzoxMDRFQTAwMDgyQ0Q2RTNBQjMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBQjkKKzoxMDRFQjAwMEJDMDcwMDAwMDAxODAxODg4MkNENkUzQUM1MDcwMDAwQ0IKKzoxMDRFQzAwMDAwMTgwMTg4ODJDRDZFM0FDRTA3MDAwMDAwMTgwMTg4RDQKKzoxMDRFRDAwMDgyQ0Q2RTNBRDcwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBNjUKKzoxMDRFRTAwMEUwMDcwMDAwMDAxODAxODg4MkNENkUzQUU5MDcwMDAwNTMKKzoxMDRFRjAwMDAwMTgwMTg4ODJDRDZFM0FGMjA3MDAwMDAwMTgwMTg4ODAKKzoxMDRGMDAwMDgyQ0Q2RTNBRkIwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMTAKKzoxMDRGMTAwMDA0MDgwMDAwMDAxODAxODg4MkNENkUzQTBEMDgwMDAwRDgKKzoxMDRGMjAwMDAwMTgwMTg4ODJDRDZFM0ExNjA4MDAwMDAwMTgwMTg4MkEKKzoxMDRGMzAwMDgyQ0Q2RTNBMUYwODAwMDAwMDE4MDE4ODgyQ0Q2RTNBQkIKKzoxMDRGNDAwMDAwMDBBODAzMDAwMDAwRDQwMjAwMDA5MjAwMDBFQzAyNjAKKzoxMDRGNTAwMDAwMDAwMDgwMDIwMDAwOTAyODA4MDAwMDAwMUMwMTg4NkEKKzoxMDRGNjAwMDgyQ0Q2RTNBMkQwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBNzkKKzoxMDRGNzAwMDMyMDgwMDAwMDAxQzAxODg4MkNENkUzQTM3MDgwMDAwMUMKKzoxMDRGODAwMDAwMUMwMTg4ODJDRDZFM0EzQzA4MDAwMDAwMUMwMTg4OUMKKzoxMDRGOTAwMDgyQ0Q2RTNBNDEwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBMzUKKzoxMDRGQTAwMDQ2MDgwMDAwMDAxQzAxODg4MkNENkUzQTRCMDgwMDAwQzQKKzoxMDRGQjAwMDAwMUMwMTg4ODJDRDZFM0E1MDA4MDAwMDAwMUMwMTg4NTgKKzoxMDRGQzAwMDgyQ0Q2RTNBNTUwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBRjEKKzoxMDRGRDAwMDVBMDgwMDAwMDAxQzAxODg4MkNENkUzQTVGMDgwMDAwNkMKKzoxMDRGRTAwMDAwMUMwMTg4ODJDRDZFM0E2NDA4MDAwMDAwMUMwMTg4MTQKKzoxMDRGRjAwMDgyQ0Q2RTNBNjkwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBQUQKKzoxMDUwMDAwMDZFMDgwMDAwMDAxQzAxODg4MkNENkUzQTczMDgwMDAwMTMKKzoxMDUwMTAwMDAwMUMwMTg4ODJDRDZFM0E3ODA4MDAwMDAwMUMwMTg4Q0YKKzoxMDUwMjAwMDgyQ0Q2RTNBMDAwMEIwMDMwMDAwMDBENDAyMDAwMDkyNkUKKzoxMDUwMzAwMDAwMDBDNjAzMDAwMDAwRDQwMjAwMDA5MjAwMDA3MTBBQzQKKzoxMDUwNDAwMDAwMDAwMDEwMDg4MDAxOTIwMDAwMTYxMzAwMDAwMDgwOEMKKzoxMDUwNTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwODMKKzoxMDUwNjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREMKKzoxMDUwNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzUKKzoxMDUwODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTMKKzoxMDUwOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQUMKKzoxMDUwQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNDUKKzoxMDUwQjAwMDAyMDAwMDkwMDAwMEIxMEEwMDAwMDAxMDA4ODAwMDkyNzkKKzoxMDUwQzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzN0MKKzoxMDUwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMTUKKzoxMDUwRTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjMKKzoxMDUwRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNEMKKzoxMDUxMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRTQKKzoxMDUxMTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQzIKKzoxMDUxMjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBDMDBBN0EKKzoxMDUxMzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwOUMKKzoxMDUxNDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTIKKzoxMDUxNTAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMUQKKzoxMDUxNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwODQKKzoxMDUxNzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNjIKKzoxMDUxODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQkIKKzoxMDUxOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMUIwQjAwMDAwMDEwQzcKKzoxMDUxQTAwMDA4QzAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNkEKKzoxMDUxQjAwMDAwMDAxQjBCMDAwMDAwMTAwOEMwMDA5MjAwMDAyMjBFMkYKKzoxMDUxQzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwNEIKKzoxMDUxRDAwMDAyMDAwMDkwMDAwMDFCMEIwMDAwMDAxMDA4QzAwMDkyQUQKKzoxMDUxRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNUIKKzoxMDUxRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRjQKKzoxMDUyMDAwMDAyMDAwMDkwMDAwMDJFMEIwMDAwMDAxMDA4QzAwMDkyNjkKKzoxMDUyMTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyRTBCMUEKKzoxMDUyMjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwMjIwRTAwMDAwMDEwRDQKKzoxMDUyMzAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTgKKzoxMDUyNDAwMDAwMDAyRTBCMDAwMDAwMTAwOEMwMDA5MjAwMDAxNjEzOTIKKzoxMDUyNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOTMKKzoxMDUyNjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNzEKKzoxMDUyNzAwMDAwMDAyQzBCMDAwMDAwMTAwOEMwMDA5MjAwMDAxNjEzNjQKKzoxMDUyODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMkMwQjAwMDAwMDEwQzUKKzoxMDUyOTAwMDA4QzAwMDkyMDAwMDIyMEUwMDAwMDAxMDA4NDAwMTkyOTkKKzoxMDUyQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyQzBCOEMKKzoxMDUyQjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwMTYxMzAwMDAwMDgwREIKKzoxMDUyQzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTEKKzoxMDUyRDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNkEKKzoxMDUyRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjUwQjAwMDAwMDEwOUMKKzoxMDUyRjAwMDA4QzAwMDkyMDAwMDE4MEIwMDAwMDAxMDA4MDAwMTkyODYKKzoxMDUzMDAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzNkIKKzoxMDUzMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRDIKKzoxMDUzMjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQjAKKzoxMDUzMzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDkKKzoxMDUzNDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQTIKKzoxMDUzNTAwMDAyMDAwMDkwMDAwMEVCMEIwMDAwMDAxMDA4ODAwMDkyOUIKKzoxMDUzNjAwMDAwMDAxODBCMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCNTEKKzoxMDUzNzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwOTkKKzoxMDUzODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTAKKzoxMDUzOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQTkKKzoxMDUzQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNDIKKzoxMDUzQjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDUzQzAwMDAwMDBFQjBCMDAwMDAwMTAwODAwMDE5MjAwMDAxODBCMTkKKzoxMDUzRDAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwRjQKKzoxMDUzRTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQTcKKzoxMDUzRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNDkKKzoxMDU0MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRTEKKzoxMDU0MTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkYKKzoxMDU0MjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3OTBDQkMKKzoxMDU0MzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTgwQjAwMDAwMDEwMEYKKzoxMDU0NDAwMDA4MDAwMTkyMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyQjgKKzoxMDU0NTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRTgKKzoxMDU0NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwODEKKzoxMDU0NzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUYKKzoxMDU0ODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQjgKKzoxMDU0OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNzkwQzAwMDAwMDEwNjUKKzoxMDU0QTAwMDA4MDAwMTkyMDAwMDE4MEIwMDAwMDAxMDA4MDAwMTkyOTMKKzoxMDU0QjAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzQkEKKzoxMDU0QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMjEKKzoxMDU0RDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRkYKKzoxMDU0RTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNTgKKzoxMDU0RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMkQwQjAwMDAwMDEwNTIKKzoxMDU1MDAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMDU1MTAwMDAwMDAyRDBCMDAwMDAwMTAwODgwMDA5MjAwMDAyMjBFRjkKKzoxMDU1MjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwRTcKKzoxMDU1MzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOUUKKzoxMDU1NDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRjcKKzoxMDU1NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOTAKKzoxMDU1NjAwMDAyMDAwMDkwMDAwMDJEMEIwMDAwMDAxMDA4MDAwMTkyQzYKKzoxMDU1NzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyRDBCQjgKKzoxMDU1ODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMjIwRTAwMDAwMDEwMzAKKzoxMDU1OTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjUKKzoxMDU1QTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOTcKKzoxMDU1QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMzAKKzoxMDU1QzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMEUKKzoxMDU1RDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4MEIKKzoxMDU1RTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwNjcKKzoxMDU1RjAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyQTkKKzoxMDU2MDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMzYKKzoxMDU2MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQ0YKKzoxMDU2MjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUQKKzoxMDU2MzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA0MzBFREUKKzoxMDU2NDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzkwRTAwMDAwMDEwMTgKKzoxMDU2NTAwMDA4NDAwMTkyMDAwMDQzMEUwMDAwMDAxMDA4NDAwMTkyMzMKKzoxMDU2NjAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDgKKzoxMDU2NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNDMwRTAwMDAwMDEwQjcKKzoxMDU2ODAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDQKKzoxMDU2OTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBCOTBBMEMKKzoxMDU2QTAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwQjkwQTAwMDAwMDEwM0QKKzoxMDU2QjAwMDA4ODAwMDkyMDAwMEI5MEEwMDAwMDAxMDA4QzAwMDkyQTMKKzoxMDU2QzAwMDAwMDBCOTBBMDAwMDAwMTAwODAwMDE5MjAwMDBCRTBBQTQKKzoxMDU2RDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwQjkwQTAwMDAwMDEwMEMKKzoxMDU2RTAwMDA4ODAwMTkyMDAwMEI5MEEwMDAwMDAxMDA4QzAwMTkyNzEKKzoxMDU2RjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNDYKKzoxMDU3MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwREUKKzoxMDU3MTAwMDAyMDAwMDkwMDAwMEY2MEMwMDAwMDAxMDA4ODAwMDkyQ0IKKzoxMDU3MjAwMDAwMDBGNjBDMDAwMDAwMTAwOEMwMDA5MjAwMDBGNjBDMEIKKzoxMDU3MzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwOTAKKzoxMDU3NDAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDMKKzoxMDU3NTAwMDAwMDBGNjBDMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzQjMKKzoxMDU3NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwN0UKKzoxMDU3NzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUMKKzoxMDU3ODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQjUKKzoxMDU3OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNEUKKzoxMDU3QTAwMDAyMDAwMDkwMDAwMDREMEUwMDAwMDAxMDA4NDAwMTkyMjEKKzoxMDU3QjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODUKKzoxMDU3QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMUUKKzoxMDU3RDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRkMKKzoxMDU3RTAwMDAwMDBDQjBFMDAwMDAwMTAwODQwMDE5MjAwMDBDRjBFMTgKKzoxMDU3RjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzEwRTAwMDAwMDEwNkYKKzoxMDU4MDAwMDA4NDAwMTkyMDAwMENGMEUwMDAwMDAxMDA4NDAwMTkyRjUKKzoxMDU4MTAwMDAwMDA3RDA4MDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzRUYKKzoxMDU4MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQ0YwRTAwMDAwMDEwNzkKKzoxMDU4MzAwMDA4NDAwMTkyMDAwMDdFMDgwMDAwMDAxMDA4MDAwMjkyNUIKKzoxMDU4NDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRjQKKzoxMDU4NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDAwRTAwMDAwMDEwNDgKKzoxMDU4NjAwMDA4NDAwMTkyMDAwMDMxMEUwMDAwMDAxMDA4NDAwMTkyMzMKKzoxMDU4NzAwMDAwMDBEMDBFMDAwMDAwMTAwODQwMDE5MjAwMDA3RDA4REEKKzoxMDU4ODAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwODQKKzoxMDU4OTAwMDAyMDAwMDkwMDAwMEQwMEUwMDAwMDAxMDA4NDAwMTkyQUQKKzoxMDU4QTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOTQKKzoxMDU4QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMkQKKzoxMDU4QzAwMDAyMDAwMDkwMDAwMEQ1MEUwMDAwMDAxMDA4ODAwMDkyMzkKKzoxMDU4RDAwMDAwMDBENTBFMDAwMDAwMTAwOEMwMDA5MjAwMDBENTBFOTgKKzoxMDU4RTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwREYKKzoxMDU4RjAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTIKKzoxMDU5MDAwMDAwMDBENTBFMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzMjAKKzoxMDU5MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQ0MKKzoxMDU5MjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUEKKzoxMDU5MzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDMKKzoxMDU5NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOUMKKzoxMDU5NTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwN0EKKzoxMDU5NjAwMDAwMDBBMDBBMDAwMDAwMTAwODQwMDA5MjAwMDAxNjEzN0EKKzoxMDU5NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNkMKKzoxMDU5ODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDU5OTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBFQTBFRDQKKzoxMDU5QTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwRUEwRTAwMDAwMDEwQzUKKzoxMDU5QjAwMDA4QzAwMDkyMDAwMEVBMEUwMDAwMDAxMDA4MDAwMTkyRUEKKzoxMDU5QzAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzQTUKKzoxMDU5RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUEwRTAwMDAwMDEwQUQKKzoxMDU5RTAwMDA4QzAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjEKKzoxMDU5RjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNDMKKzoxMDVBMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDMwRjAwMDAwMDEwNjIKKzoxMDVBMTAwMDA4ODAwMDkyMDAwMDAzMEYwMDAwMDAxMDA4QzAwMDkyRjAKKzoxMDVBMjAwMDAwMDAwMzBGMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCOUIKKzoxMDVBMzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwRDIKKzoxMDVBNDAwMDAyMDAwMDkwMDAwMDAzMEYwMDAwMDAxMDA4QzAwMTkyNDcKKzoxMDVBNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4ODYKKzoxMDVBNjAwMDAwMDAwMDEwMDgwMDAwOTIwMDAwMTYxMzAwMDAwMDgwRTMKKzoxMDVBNzAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4ODAwMDkyRTUKKzoxMDVBODAwMDAwMDAxNTBGMDAwMDAwMTAwOEMwMDA5MjAwMDA3RDA4MDMKKzoxMDVBOTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwN0QwODAwMDAwMDEwQzYKKzoxMDVBQTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTAKKzoxMDVBQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODIKKzoxMDVBQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMUIKKzoxMDVBRDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjkKKzoxMDVBRTAwMDAwMDA3RDA4MDAwMDAwMTAwODgwMDA5MjAwMDAyNjBGRDIKKzoxMDVBRjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwN0QwODAwMDAwMDEwRTcKKzoxMDVCMDAwMDA4MDAwMTkyMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyOEEKKzoxMDVCMTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMjEKKzoxMDVCMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQkEKKzoxMDVCMzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTgKKzoxMDVCNDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4OTUKKzoxMDVCNTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMjYwRjAwMDAwMDEwRDYKKzoxMDVCNjAwMDA4MDAwMTkyMDAwMDdEMDgwMDAwMDAxMDA4MDAwMTkyNkEKKzoxMDVCNzAwMDAwMDA3RDA4MDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzOEMKKzoxMDVCODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNUEKKzoxMDVCOTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMzgKKzoxMDVCQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOTEKKzoxMDVCQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMkEKKzoxMDVCQzAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4ODAwMDkyOTQKKzoxMDVCRDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4MDUKKzoxMDVCRTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMjEKKzoxMDVCRjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDgKKzoxMDVDMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMzAKKzoxMDVDMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQzkKKzoxMDVDMjAwMDAyMDAwMDkwMDAwMEZBMEUwMDAwMDAxMDA4ODAwMDkyQjAKKzoxMDVDMzAwMDAwMDBGQTBFMDAwMDAwMTAwOEMwMDA5MjAwMDBGQTBFRUEKKzoxMDVDNDAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwN0IKKzoxMDVDNTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkUKKzoxMDVDNjAwMDAwMDBGQTBFMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzOTgKKzoxMDVDNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNjkKKzoxMDVDODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDcKKzoxMDVDOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQTAKKzoxMDVDQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMzkKKzoxMDVDQjAwMDAyMDAwMDkwMDAwMDM5MEYwMDAwMDAxMDA4MDAwMjkyNUUKKzoxMDVDQzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNzAKKzoxMDVDRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDkKKzoxMDVDRTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTcKKzoxMDVDRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBDMDBBOUYKKzoxMDVEMDAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMTYxMzAwMDAwMDgwN0YKKzoxMDVEMTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQjYKKzoxMDVEMjAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzNDEKKzoxMDVEMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDEwQjAwMDAwMDEwMzUKKzoxMDVENDAwMDA4QzAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkQKKzoxMDVENTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREYKKzoxMDVENjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzAwQTAwMDAwMDEwNDcKKzoxMDVENzAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQ0UKKzoxMDVEODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxMzBCQkEKKzoxMDVEOTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwNkYKKzoxMDVEQTAwMDAyMDAwMDkwMDAwMDAxMEIwMDAwMDAxMDA4QzAwMTkyRUEKKzoxMDVEQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzN0YKKzoxMDVEQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMTgKKzoxMDVERDAwMDAyMDAwMDkwMDAwMDI2MEQwMDAwMDAxMDA4ODAwMDkyRDQKKzoxMDVERTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBENDUKKzoxMDVERjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMjIwRTAwMDAwMDEwMzkKKzoxMDVFMDAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwN0MKKzoxMDVFMTAwMDAwMDAyNjBEMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzRkMKKzoxMDVFMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQjcKKzoxMDVFMzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTUKKzoxMDVFNDAwMDAwMDAyNjBEMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzNEIKKzoxMDVFNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwRUQKKzoxMDVFNjAwMDA4MDAwMTkyMDAwMDIyMEUwMDAwMDAxMDA4NDAwMTkyN0MKKzoxMDVFNzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEQjQKKzoxMDVFODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQkUKKzoxMDVFOTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMzUKKzoxMDVFQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEODQKKzoxMDVFQjAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwOEUKKzoxMDVFQzAwMDAyMDAwMDkwMDAwMDI2MEQwMDAwMDAxMDA4MDAwMTkyNjIKKzoxMDVFRDAwMDAwMDAyMjBFMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzN0UKKzoxMDVFRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwNUQKKzoxMDVFRjAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQ0MKKzoxMDVGMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMkQKKzoxMDVGMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwMkMKKzoxMDVGMjAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMUMKKzoxMDVGMzAwMDAwMDAyNjBEMDAwMDAwMTAwODgwMDA5MjAwMDAyMjBFRDQKKzoxMDVGNDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwQkQKKzoxMDVGNTAwMDAyMDAwMDkwMDAwMDI2MEQwMDAwMDAxMDA4ODAwMDkyNTIKKzoxMDVGNjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQ0QKKzoxMDVGNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNjYKKzoxMDVGODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDQKKzoxMDVGOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEOTMKKzoxMDVGQTAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMjIwRTAwMDAwMDEwNDYKKzoxMDVGQjAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQ0IKKzoxMDVGQzAwMDAwMDAyNjBEMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzMEEKKzoxMDVGRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDYKKzoxMDVGRTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTQKKzoxMDVGRjAwMDAwMDBBQjBEMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzOTYKKzoxMDYwMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRDUKKzoxMDYwMTAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyN0UKKzoxMDYwMjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBQjBEN0QKKzoxMDYwMzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwOEQKKzoxMDYwNDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwODMKKzoxMDYwNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBQjBENEQKKzoxMDYwNjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwNUQKKzoxMDYwNzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTMKKzoxMDYwODAwMDAwMDA3RDA4MDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzNzcKKzoxMDYwOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQUIwRDAwMDAwMDEwMjYKKzoxMDYwQTAwMDA4QzAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUEKKzoxMDYwQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzN0MKKzoxMDYwQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMTUKKzoxMDYwRDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjMKKzoxMDYwRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4RjAKKzoxMDYwRjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMEMKKzoxMDYxMDAwMDAyMDAwMDkwMDAwMEI1MEQwMDAwMDAxMDA4QzAwMTkyRDAKKzoxMDYxMTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMUIKKzoxMDYxMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQjQKKzoxMDYxMzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTIKKzoxMDYxNDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRUIKKzoxMDYxNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0QwODAwMDAwMDEwOTgKKzoxMDYxNjAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTkKKzoxMDYxNzAwMDAwMDBCNTBEMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMEEKKzoxMDYxODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNTQKKzoxMDYxOTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMzIKKzoxMDYxQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOEIKKzoxMDYxQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMjQKKzoxMDYxQzAwMDAyMDAwMDkwMDAwMEIzMEUwMDAwMDAxMDA4NDAwMTkyOTEKKzoxMDYxRDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNUIKKzoxMDYxRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRjQKKzoxMDYxRjAwMDAyMDAwMDkwMDAwMDg2MDgwMDAwMDAxMDA4NDAwMDkyOTUKKzoxMDYyMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMkEKKzoxMDYyMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQzMKKzoxMDYyMjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQTEKKzoxMDYyMzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBERDA4M0UKKzoxMDYyNDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwN0IKKzoxMDYyNTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNzEKKzoxMDYyNjAwMDAwMDBDNjA5MDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzOEIKKzoxMDYyNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwODUwODAwMDAwMDEwNkYKKzoxMDYyODAwMDA4MDAwMTkyMDAwMEQwMDkwMDAwMDAxMDA4MDAwMTkyRUYKKzoxMDYyOTAwMDAwMDBEMDA5MDAwMDAwMTAwODAwMDE5MjAwMDBEMDA5QTEKKzoxMDYyQTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwOUEKKzoxMDYyQjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTEKKzoxMDYyQzAwMDAwMDBFRjA4MDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzODQKKzoxMDYyRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwODUwODAwMDAwMDEwMEYKKzoxMDYyRTAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDgKKzoxMDYyRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDA5NUEKKzoxMDYzMDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwQzQwOTAwMDAwMDEwODYKKzoxMDYzMTAwMDA4ODAwMDkyMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMkIKKzoxMDYzMjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBFNjA5NDMKKzoxMDYzMzAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwRTYwOTAwMDAwMDEwNzQKKzoxMDYzNDAwMDA4ODAwMDkyMDAwMEU2MDkwMDAwMDAxMDA4QzAwMDkyREEKKzoxMDYzNTAwMDAwMDA4NTA4MDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzREMKKzoxMDYzNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzIKKzoxMDYzNzAwMDAyMDAwMDkwMDAwMDBDMEEwMDAwMDAxMDA4QzAwMDkyMEIKKzoxMDYzODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4NDUKKzoxMDYzOTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQTkKKzoxMDYzQTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDYzQjAwMDAwMDAwRjBBMDAwMDAwMTAwODAwMDE5MjAwMDAwRjBBMDAKKzoxMDYzQzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwODUwODAwMDAwMDEwODUKKzoxMDYzRDAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTcKKzoxMDYzRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxMTBBNTcKKzoxMDYzRjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTEwQTAwMDAwMDEwNDgKKzoxMDY0MDAwMDA4QzAwMDkyMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyRkEKKzoxMDY0MTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4QjQKKzoxMDY0MjAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwREMwOTAwMDAwMDEwOEQKKzoxMDY0MzAwMDA4ODAwMDkyMDAwMERDMDkwMDAwMDAxMDA4QzAwMDkyRjMKKzoxMDY0NDAwMDAwMDA4NTA4MDAwMDAwMTAwODAwMDE5MjAwMDA4NTA4ODcKKzoxMDY0NTAwMDAwMDAwMDEwMDgwMDAwOTIwMDAwODUwODAwMDAwMDEwRjUKKzoxMDY0NjAwMDA4NDAwMDkyMDAwMDI1MEEwMDAwMDAxMDA4ODAwMDkyRjkKKzoxMDY0NzAwMDAwMDAyNTBBMDAwMDAwMTAwOEMwMDA5MjAwMDA4NTA4RjYKKzoxMDY0ODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQjgKKzoxMDY0OTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkYKKzoxMDY0QTAwMDAwMDA2MDBBMDAwMDAwMTAwODgwMDA5MjAwMDA4NTA4Q0IKKzoxMDY0QjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwODUwODAwMDAwMDEwRDUKKzoxMDY0QzAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjYKKzoxMDY0RDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAzRjBBMzgKKzoxMDY0RTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwRDkKKzoxMDY0RjAwMDAyMDAwMDkwMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyRDIKKzoxMDY1MDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMjcKKzoxMDY1MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUMwODAwMDAwMDEwNjUKKzoxMDY1MjAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTYKKzoxMDY1MzAwMDAwMDA4NTA4MDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzRkEKKzoxMDY1NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOTAKKzoxMDY1NTAwMDAyMDAwMDkwMDAwMDU0MEEwMDAwMDAxMDA4ODAwMDkyMjEKKzoxMDY1NjAwMDAwMDA1NDBBMDAwMDAwMTAwOEMwMDA5MjAwMDA4NTA4RDYKKzoxMDY1NzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQzcKKzoxMDY1ODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwM0UKKzoxMDY1OTAwMDAwMDAxQzBBMDAwMDAwMTAwODgwMDA5MjAwMDAxQzBBODUKKzoxMDY1QTAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwODUwODAwMDAwMDEwRTQKKzoxMDY1QjAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDUKKzoxMDY1QzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA2RDBBMTkKKzoxMDY1RDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwNkQwQTAwMDAwMDEwMEEKKzoxMDY1RTAwMDA4QzAwMDkyMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMTkKKzoxMDY1RjAwMDA4MDBGMzAzMDAxODAxRTg3NjIwODE5OTA4MDBFRjAzRjIKKzoxMDY2MDAwMDAwMTgwMUU4NzYyMDgxOTkwMDAwNEIxMjAwMDAwMDgwRkMKKzoxMDY2MTAwMDAyMDAwMEYwMDgwMDgyMDgxRDE5MDFFODc2MjA4MUI5MDcKKzoxMDY2MjAwMDAwMDBGMzAzMDAwMDAwRjg2MjgxMkY5NTAwMDBGMzAzREYKKzoxMDY2MzAwMDgwMDAwMDgwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDNjEKKzoxMDY2NDAwMDgyQ0QyRUIyMDAwMEYzMDMwMDAwMDBGODAyODEyRjk0RTcKKzoxMDY2NTAwMDA4MDBGMzAzMDAxQzAxRTg3NjIwODE5OTAwMDAxNjEzNUUKKzoxMDY2NjAwMDgwMEYwMTgwMDJDMDZFQjYwMDAwMDAwMDAwMDAwMEQ4NUMKKzoxMDY2NzAwMDAyMDAwMDMyMDAwMDAwMDAwMDBFMDFFQzA2QzA2RTM1ODIKKzoxMDY2ODAwMDU0MDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwNDcKKzoxMDY2OTAwMDAwMDAwMEJDQTgwMDJEMzdCNDA0MDEwMDAwMDgwMDAwNzEKKzoxMDY2QTAwMEM3Q0Q4QjNBMDAwMDAwMDAwMDAwMDA3ODk5QzAyQzM3NUQKKzoxMDY2QjAwMEI0MDAwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAxNjEzOUUKKzoxMDY2QzAwMDAyMTAwMDAwODdCRjk3QkEwMDAwMDAwMDAwMTgwMDAwMDkKKzoxMDY2RDAwMDA3NDBGRTMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MjkKKzoxMDY2RTAwMDAwMDAwMDAwMDA5MDAwNzgwOTAwNkUzMjAwMDAxNjEzRDAKKzoxMDY2RjAwMDA0QTAwMDAwMDk4MDZFQjIwMDAwOTUwODA0QTUwMDA0MDMKKzoxMDY3MDAwMDA5ODA2RUIyMDAwMDAwMDAwMDAwMDAwNDA5MDA5MDMyMTEKKzoxMDY3MTAwMDAwMDAxNjEzMDIwMTAwODAwMjY0OTBCQzAwMDA5ODA4N0IKKzoxMDY3MjAwMDA0MDEwMDA0MDk2NDkwQkMwMDAwMDAwMDAwMDAwMDA0QTMKKzoxMDY3MzAwMDA5NDAwMDMyMDgwMDAwMDA2RTM0MDJFODE2MjQ5MDM5NDcKKzoxMDY3NDAwMDAwMDA5OTA4QjcxMDAyRTAwNjgwOTdCMjAwMDA5QzA4OEMKKzoxMDY3NTAwMDgwMDAwMDgwRjI4MEZDQjYwMDAwOUQwODAwMDAwMEM4QTgKKzoxMDY3NjAwMEZGODBGQzk0MDAwMDlFMDg5Rjk5MDA4MDgyMUJFRUJDNzUKKzoxMDY3NzAwMDAwMDAwMDAwMDA5ODAwRTAwRTAwNkUzMjAwMDAwMDAwRjMKKzoxMDY3ODAwMEE3MDAwMDgwMDIwMDAwMzAxODAwMzYwMDAwMDAwMEY4NkEKKzoxMDY3OTAwMDczMEEwM0Y5MDAwMDAwMDAwMDEwMDIxQzA5MDA2RTMyQTkKKzoxMDY3QTAwMDQwMDBBMzA4MDYwMTAwODA4MkNEOTFCQzAwQzBBNDA4NkYKKzoxMDY3QjAwMDAwMTgwMkUwMDY4MDM2OTIwMEUwMDAwMDAwMTgwMkUwQjcKKzoxMDY3QzAwMDA2ODAzNjMyMDAwMDAwMDAwMDAwMDAyMDA5ODAwMzMyRkQKKzoxMDY3RDAwMDAwMDBBNzA4ODBENzAxODAzMkMwNkVCNjAwMDAwMDAwMUMKKzoxMDY3RTAwMDAwMDAwMDIwNDkwMDkyM0EwMDAwMDAwMDAwOTgwMTE4QzMKKzoxMDY3RjAwMDA5MDA2RTMyMDAwMDAwMDAwMDBBMDIyNDA5QzA2RTMyNTcKKzoxMDY4MDAwMDAwMDAwMDAwMDBDMDAxMjgwOTgwNkUzMjAwMDBCNTA4QjkKKzoxMDY4MTAwMDgwMEUwMTgwMTJDMDZFQjYwMjAwMDAwMDAwM0MwMkVDNDcKKzoxMDY4MjAwMDA2MDAzNjMyMDAwMDAwMDAwMDAwMDAwMDQ5MDE5MjNBRTQKKzoxMDY4MzAwMDAwMDBCMTA4ODBENjAxODA0MkMwNkVCNjAwODIwMDAwMjAKKzoxMDY4NDAwMDAwMTAwMkUwQTZDRDkxMzIwMEEwMDAwMDAwMkMwMkU4NkEKKzoxMDY4NTAwMDA2MDAzNjMyMjgwMEJGMDgwMDNBMDJFQzA2MDAzNjkyRTUKKzoxMDY4NjAwMDAwMDAwMDAwRDMwMTAwMUNEOUMxOTEzNDAwODIwMDAwNTcKKzoxMDY4NzAwMDAwMTAwMkUwQTZDRDkxMzIwMEEwMDAwMDAwMkMwMkU4M0EKKzoxMDY4ODAwMDA2MDAzNjMyMzQwMEJGMDgwMDNBMDJFQzA2MDAzNjkyQTkKKzoxMDY4OTAwMDA0MDAwMDAwMDAzQzAyRUMwNjAwMzYzMjI4MDAwMDAwMzQKKzoxMDY4QTAwMDAwMDAwMDAwODkwRDkyM0EwMDAwQkIwODgwRDYwMTgwRUMKKzoxMDY4QjAwMDQyQzA2RUI2MDA4NjAwMDAwMDEwMDJFMEE2Q0Q5MTMyMDQKKzoxMDY4QzAwMDA0QTAwMDAwMDAyQzAyRTgwNjAwMzYzMjE0MDBCRjA4QzUKKzoxMDY4RDAwMDAwM0EwMkVDMDYwMDM2OTIwMDAwMDAwMEQzMDEwMDFDRDIKKzoxMDY4RTAwMEQ5QzE5MTM0MDA4NjAwMDAwMDEwMDJFMEE2Q0Q5MTMyOUIKKzoxMDY4RjAwMDA0QTAwMDAwMDAyQzAyRTgwNjAwMzYzMjIwMDBCRjA4ODkKKzoxMDY5MDAwMDAwM0EwMkVDMDYwMDM2OTIxMjAwMDAwMDAwMzgwMkVDNTkKKzoxMDY5MTAwMDg2Q0Q5MTNBMDgwMDAwMDAwMDI4MDJFODg2MjQ5MDM5Q0MKKzoxMDY5MjAwMDAwMDAwMDAwMDAyMDAyRTA5NjI0MTQzNzAwMDAwMDAwNjAKKzoxMDY5MzAwMDAwNDAwMUUwMDY4MDkxMzIwMDAwQzUwODA0MDEwMDgwOUIKKzoxMDY5NDAwMDAyODA5MkJDMDAwMDAwMDAwMEMwMDFFMDA2MDAwMDMyOUUKKzoxMDY5NTAwMDAwMDAwMDAwMDAzMDAwRTAwNjAwMDAzMjAwMDAwMDAwRUYKKzoxMDY5NjAwMDAwQjAwMEUwMDYwMDAwMzIyMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDY5NzAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3MjMKKzoxMDY5ODAwMDAwMDUwMTAwMDAwODAwMDBDNzhEOTczQTAwMDAwMDAwRDQKKzoxMDY5OTAwMDAwMDAwMDc4OTlDMDJDMzcwMDAxMDAwMDAwMDAwMDc4NEEKKzoxMDY5QTAwMDg5OEQ5NzNBMDAwMDE2MTMwMjEwMDAwMDg3QkY5N0JBMkUKKzoxMDY5QjAwMDAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjAwMDAxNjEzMUYKKzoxMDY5QzAwMDEyMDAwMDQ4RjJDMTM4QjQwMDAwRDIwODgwRDcwMTJDNzAKKzoxMDY5RDAwMDA5QzA2RUIyMDAwMDAwMDBEQUQ3MDFFQzA2QzA2RTM1QzcKKzoxMDY5RTAwMDAwMDAwMDAwMDA1QTAxRUMwNjQwRUQzMkFFMDAwMDAwNEQKKzoxMDY5RjAwMDAwMDAwMDc4MTkwMDM2M0FBRjAwMTYxMzA0MDEwMDgwMzkKKzoxMDZBMDAwMDgyOEQ5N0JDMDAwMDAwMDAwMDVDMDFFODA2ODA4QjMyOUMKKzoxMDZBMTAwMDAwMDBENzA4ODAwMTAwODA2MkMwOTJCNjAwMDAwMDAwMkMKKzoxMDZBMjAwMDAwMDAwMEY4ODI4MTJGMzQxODAwMzYwMDAwMDAwMEY4QzIKKzoxMDZBMzAwMDczMEEwM0Y5MDAwMDAwMDAwMDA0MDEzODA4QzA2RTMyMzgKKzoxMDZBNDAwMDAwMDAxNjEzMDRDOTAxODAwMjgwNkVCQzAwMDAwMDAwMjMKKzoxMDZBNTAwMDAwNjIwMUVDMDY4MDgzMzIwMTAwODUwODEyMDEwMDJDREYKKzoxMDZBNjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkMKKzoxMDZBNzAwMDAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMjAwMDAwMDAwNjMKKzoxMDZBODAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwRTMwODE4MDEwMDBDQTkKKzoxMDZBOTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyRjkKKzoxMDZBQTAwMDJEMDBFRjAzMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMzAKKzoxMDZBQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwNjIwMTM4MjkKKzoxMDZBQzAwMDA4QzA2RTMyMDAwODAwODAwMDAwMDAyODA5MDAzNzMyM0MKKzoxMDZBRDAwMDAwNjBFQjExMDAwMDAwMDgwODgwMzZGMjAwMDAxNjEzNzkKKzoxMDZBRTAwMDg3MDYwMUVDMTZDMDZFQkMwMDAwODUwODBCMDAwMDgwMTQKKzoxMDZBRjAwMDAyMDAwMEIwMDAwMDg1MDg4MDAwMDA4MDcyODEyRkI2N0YKKzoxMDZCMDAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA4NTA4NkQKKzoxMDZCMTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwNUUKKzoxMDZCMjAwMDAyMDAwMDkwMDAwMDE2MTMwNDA3MDE4MDEyQzA2RUJDMjIKKzoxMDZCMzAwMDAwMDAxNjEzODAwMDAwODBCMjgxMkZCNjAwMDBFRjA4MUQKKzoxMDZCNDAwMDAwMDAwMEY4QjI4MTJGOTQwMDAwMTYxMzA0QTAwMDE4NzIKKzoxMDZCNTAwMDA4MDA2RUIyMDAwMDE2MTMwNDA2MDE4MDAyQzA2RUJDNkQKKzoxMDZCNjAwMDAwMDA5RTEyMDAwMDAwODAwMjAwMDBGMDAwMDAwMDEzRjAKKzoxMDZCNzAwMDAwNzgwMTYwMDgwMDZFRjIwMDAwRjUwODEyMDEwMEM4RkMKKzoxMDZCODAwMDAyMDAyMEIyMDAwMEY4MDgwMDAwMDA4MDAyMDAwMDkwMUYKKzoxMDZCOTAwMDAwMDAwNTA5MTIwMTAwNUMwODgwMjBCMjAwMDBGODA4MUUKKzoxMDZCQTAwMDEyMDEwMDYwMDI4MDJDQjIwMDAwMTYxMzAwMDAwMDgwNjkKKzoxMDZCQjAwMDAyMDAwMDkwMDAwMEZBMDgwNDAwMDA4MDAyNDA4MEJDM0YKKzoxMDZCQzAwMDAwMDAwMDAwMDAwMDAwRjgxRjgwRkYzQTAwMDBGRDA4RjAKKzoxMDZCRDAwMDgwMDEwMDgwQTI4MDJGQjYxODAwMzYwMENBMDAwMEY4OUQKKzoxMDZCRTAwMDczMEEwM0Y5MDAwMDE2MTMwNDAxMDA4MDAyODAyREJDMTMKKzoxMDZCRjAwMDAwMDA4NTA4ODAwMDAwODA3MjgxMkZCNjNEMDAxNjEzQ0EKKzoxMDZDMDAwMDEyMDAwMDJDODJDRDJFQjIwMDAwODUwODAwMDAwMEY4OTIKKzoxMDZDMTAwMDcyODEyRjk0MDAwMDE2MTMwNDA2MDE4MDAyQzA2RUJDMUUKKzoxMDZDMjAwMDAwMDAwMDAwMDBCQzAwMTQwODgwNkUzMjAwMDBGODA4NkMKKzoxMDZDMzAwMDEyMDAwMEM4MDIwMDIwQjIwMDAwRjYwODEyMDAwMDVDM0EKKzoxMDZDNDAwMDA4ODAyMEIyMDAwMDE2MTMwNEEwMDAxODA4MDA2RUIyREQKKzoxMDZDNTAwMDAwMDAwMDAwMDAwMDAwNzg3OTYxMzgzMjAwMDAxNjEzNEYKKzoxMDZDNjAwMDEyMTgwMjRDRTIyNTZFQjIwMDAwMTYxMzA0MDEwMDgwRDcKKzoxMDZDNzAwMDAyNDAyREJDMDgwMDAwMDAwMDEwMDIwMDc4RTE2RTM5Q0YKKzoxMDZDODAwMDAwMDAwMDAwMDAxODAwMjAwNzAwMDAzMjA3MDAwMDAwOEMKKzoxMDZDOTAwMDAwMDAwMDM4NzhDQUU5MzkwMDAwMTYxMzA0MDAwMDNDRUYKKzoxMDZDQTAwMDA4NDA4MEIyMDAwMDAwMDAwMDkwMDA2QzA4MDA2RTMyQzYKKzoxMDZDQjAwMDAwMDAwMDAwMDA5ODAwNEMwODAwNkUzMjAwMDAxNjEzMUYKKzoxMDZDQzAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMDAwMDUxMDAwMEQ4Q0MKKzoxMDZDRDAwMDAyMDAwMDMyMDAwMDAwMDA0RDAwMDAwMDY3RTA4MzNFMkIKKzoxMDZDRTAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwRTMKKzoxMDZDRjAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMDAwMTgwMDAwRUQKKzoxMDZEMDAwMDA3QzA4NDMyMDAwMDAwMDAwMDAwMDAxOEQ4QTA4MTNDQjkKKzoxMDZEMTAwMDAwMDA4NDA5MDRCMDAwRTBENjIwNkVCQzAwMDAxNjEzMDkKKzoxMDZEMjAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwNDMwOTA0MDAwMDNDOUIKKzoxMDZEMzAwMEQ4RTA4M0JDMDAwMDE2MTMwNDAxMDA4MDAyODA4MUJDRUYKKzoxMDZENDAwMDAwMDAyNDA5ODAwMDAwODA5MjgwMkZCNjAwMDAxQzA5RkEKKzoxMDZENTAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4M0UKKzoxMDZENjAwMDczMEEwM0Y5MUQwMDAwMDAwMDAwMDA3ODA5QTQxNzM4MTkKKzoxMDZENzAwMDAwMDAyMTA5MDQwMTAwODAxMjgwOTdCQzAwMDAxNjEzNTYKKzoxMDZEODAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwMUIwOTY3MDAwMEY4NzgKKzoxMDZEOTAwMEEyODAyRkI1MDAwMDFDMDkwMDAwMDAwMDA5QzAyMTkyNEMKKzoxMDZEQTAwMDAwMDAyMzA5MDQwMDAwODAyMjgwOTdCQzAwMDAxNjEzMTUKKzoxMDZEQjAwMDA0MDEwMDgwMzI4MDk3QkMwMDAwMDAwMEM5MDEwMEQ4QTcKKzoxMDZEQzAwMDAyNDA4NDMyMDAwMDI3MDkwNDAwMDA4MDcyODAyREJDM0MKKzoxMDZERDAwMDAwMDAxNjEzMTIwMDAwNDRFMkUwMzhCMjAwMDAzNDA5NEIKKzoxMDZERTAwMDUxMDAwMEQ4MTI4MDJEOUEwMDAwMDAwMDAwMDAwMDc4QTkKKzoxMDZERjAwMEY5ODE4MzM0MDAwMDE2MTMxMjAwMDA0NEUyRTUzOEIyMzIKKzoxMDZFMDAwMDAwMDAyQzA5ODAwMDAwODA4MjgwMkZCNjAwMDBGNzExNUUKKzoxMDZFMTAwMDAwQTAwMTUwMDgwMDZFRjIwMDAwMDAwMDAwRjgwMUUwNDAKKzoxMDZFMjAwMDA2MDA4NTMyMDAwMDJFMDkxMjAxMDBFODAyQzAyMUIyREUKKzoxMDZFMzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAzMjA5NTgKKzoxMDZFNDAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwMjgKKzoxMDZFNTAwMEEyODAyRkI2MDAwMDJEMDk2NzAwMDBGOEEyODAyRkI1OTAKKzoxMDZFNjAwMDAwMDAxNjEzMTIwMDAwRTgwMkMwMjFCMjAwMDAxNjEzNDEKKzoxMDZFNzAwMDA0MDEwMDgwNzI4MDJEQkMwMDAwMDAwMDUxMDAwMEQ4ODkKKzoxMDZFODAwMDAyMDAwMDMyMDAwMDM5MDkyQTAxMDAwMEQ4MjA4MEJBMkYKKzoxMDZFOTAwMDAwMDAzODA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQjQKKzoxMDZFQTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4OTkKKzoxMDZFQjAwMDAyNDA4NDMyMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4OUIKKzoxMDZFQzAwMDAwMDAwMDAwQ0FFMDAwNkMwODAwNkUzMjAwMDAwMDAwMDQKKzoxMDZFRDAwMDAwRTgwMDRDMDgwMDZFMzIwMDAwMTYxMzA0RjAwMDE4QTEKKzoxMDZFRTAwMDA4MDA2RUIyMDAwMDAwMDAwMDAwMDAzODE4ODE4MzM1RjEKKzoxMDZFRjAwMDAwMDAxMDA5MDRCMDAwODA4MjlCODFCQzAwMDAxNjEzQzIKKzoxMDZGMDAwMDBEMDEwMDgwMDIwMDAwQjAwMDAwMTYxMzlGMDAwMDE0NjUKKzoxMDZGMTAwMDE4NDA4MUJDMDAwMDAwMDBDQTAxMDBGODQyODAyRjM1RjMKKzoxMDZGMjAwMDA4QTAxMDA5MTIwMTAwNDBBMkNEMzlCMjAwMDAxNjEzQ0EKKzoxMDZGMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNEUwOTI5MzQwMkI4RDEKKzoxMDZGNDAwMDA4ODA2RUIyMDAwMDQ2MDkxMjAxMDAwMDA5QzAyMUIyOUIKKzoxMDZGNTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAwMDAwNTUKKzoxMDZGNjAwMDAwMDAwMDc4MDlBNDE3MzgwMDAwNEIwOTA0MDEwMDgwRDQKKzoxMDZGNzAwMDEyODA5N0JDMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2RkIKKzoxMDZGODAwMDAwMDA0NTA5NjcwMDAwRjhBMjgwMkZCNTAwMDA0NjA5RkYKKzoxMDZGOTAwMDAwMDAwMDAwMDlDMDIxOTIwMDAwNEQwOTA0MDAwMDgwOUIKKzoxMDZGQTAwMDIyODA5N0JDMDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDMzkKKzoxMDZGQjAwMDAwMDAwMDAwQzkwMTAwRDgwMjQwODQzMjAwMDAwMDAwMzcKKzoxMDZGQzAwMDAwMDAwMDc4Rjk4MTgzMzQwMDAwMTYxMzEyMDAwMDQ0OTkKKzoxMDZGRDAwMEUyRTUzOEIyMDAwMDU2MDkyODAwMDA2Q0Q4RTA4NkJBMTUKKzoxMDZGRTAwMDAwMDBGNjExMDBBMDAxNTAwODAwNkVGMjAwMDA1NjA5RTIKKzoxMDZGRjAwMDFERjgwMUUwMDYwMDg1QjIwMDAwNTYwOTgwMDAwMDgwRkYKKzoxMDcwMDAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyNTgKKzoxMDcwMTAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA1QzA5MkQKKzoxMDcwMjAwMDA0QTAwMEUwMDY4MDgxQjIwMDAwMDAwMDAwQkMwMEU4N0YKKzoxMDcwMzAwMDA2NDA4MTMyMDAwMDAwMDAwMDkwMDBFMDA2QzA4NjMyNjkKKzoxMDcwNDAwMDAwMDAwMDAwMDA5ODAwRTAwNkMwODQzMjAwMDAxNjEzMjMKKzoxMDcwNTAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwNzAwOTAwMDAwMDgwNjgKKzoxMDcwNjAwMDAyMDAwMDkwMDAwMDYyMDk4MDAxMDA4MEEyODAyRkI2MUIKKzoxMDcwNzAwMDAwMDA1RjA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQUIKKzoxMDcwODAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwNjIwOTA0MDEwMDgwODIKKzoxMDcwOTAwMDAyQTQxN0I4MDAwMDE2MTM4MDAwMDA4MEUyODAyRkI2MEIKKzoxMDcwQTAwMDAwMDA1RTA5MDAwMDAwRjhFMjgwMkY5NDAwMDAwMDAwNUMKKzoxMDcwQjAwMDAwRTAwMDZDMDgwMDZFMzIwMDAwMDAwMENBRTgwMDRDREUKKzoxMDcwQzAwMDA4MDA2RTMyMDAwMDE2MTMwNDAwMDA4MDMyRTE4NkIyMjAKKzoxMDcwRDAwMDAwMDAxNjEzMDRGMDAwMTgwODAwNkVCMjAwMDA2QjA5REYKKzoxMDcwRTAwMDA0QjAwMDgwODI5QjgxQkMwMDAwMTYxMzBEMDEwMDgwNUIKKzoxMDcwRjAwMDAyMDAwMEIwMDAwMDE2MTM5RjAwMDAxNDE4NDA4MUJDNkQKKzoxMDcxMDAwMDAwMDAwMDAwQ0EwMTAwRjg0MjgwMkYzNTA4QTAxNjEzQzUKKzoxMDcxMTAwMDEyMDAwMDQwQTJDRDM5QjIwMDAwMDAwMDAwQTAwMEUwNDMKKzoxMDcxMjAwMDA2ODA4MTMyMDAwMDAwMDAwMDk4MDBFMDA2QzA4NDMyMzIKKzoxMDcxMzAwMDAwMDAwMDAwMDA5MDAwRTAwNkMwODYzMjAwMDAxNjEzMzgKKzoxMDcxNDAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMDAwMDAwQkMwMEU4Q0MKKzoxMDcxNTAwMDA2NDA4MTMyMDAwMDc2MDkyQTVEMDFFODA2ODA4QkIyODQKKzoxMDcxNjAwMDAwMDA3MzA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQTYKKzoxMDcxNzAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwNzYwOTA0MDEwMDgwN0QKKzoxMDcxODAwMDAyQTQxN0I4MDAwMDE2MTM4MDAwMDA4MEUyODAyRkI2MUEKKzoxMDcxOTAwMDAwMDA3MjA5MDAwMDAwRjhFMjgwMkY5NDEwMjQ3OTA5QTEKKzoxMDcxQTAwMDM3MDAwMEY4QTI4RDJGQjEzRDAwMTYxMzEyMDAwMDJDRkQKKzoxMDcxQjAwMDgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGODcyODEyRjM0NTIKKzoxMDcxQzAwMDA4MDAwMDAwQ0ExQzAxRTg3NjIwODEzOTAwMDA1NDEwMzQKKzoxMDcxRDAwMDAwMDAwMDJDRjkwMTAwRjQwMDAwN0YwOTgwMDAwMDgwMEQKKzoxMDcxRTAwMEUyODAyRkI2MDAwMDdFMDkxMjAxMDAwMDA5QzAyMUIyMjIKKzoxMDcxRjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzOEEKKzoxMDcyMDAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwMTYxMzgwMDEwMDgwNUEKKzoxMDcyMTAwMDgyODAyRkI2MDAwMDE2MTMwNDAxMDA4MEMyMDAwM0JDNTgKKzoxMDcyMjAwMDEwMDAwMDAwMDAxODAwODA2N0ExNzMzOTMwMDBGNjAzRDkKKzoxMDcyMzAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMTYxMzAwMDAwMDgwMjkKKzoxMDcyNDAwMDAyMDAwMDkwMDAwMDhBMDk4MDAwMDA4MDkyODAyRkI2MjIKKzoxMDcyNTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzMjkKKzoxMDcyNjAwMDA0MDAwMDc4MDlBNDE3QjgwMDAwODkwOTA0MDAwMDgwMTAKKzoxMDcyNzAwMDIyODA5N0JDMDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDNjYKKzoxMDcyODAwMDAwMDAwMDAwQzkwMTAwRDgwMjQwODQzMjAwMDAxNjEzM0IKKzoxMDcyOTAwMDA0MDEwMDgwRDJFMDgzQkMwMDAwMTYxMzJBMDAwMDc4QUQKKzoxMDcyQTAwMEY5ODE4M0I0MDAwMDE2MTMxMjAwMDA0NEUyRTUzOEIyRkQKKzoxMDcyQjAwMDAwMDA2NDExMDAwMDAwMzAwMzAwMzhGMjAwMDA5MjA5NjEKKzoxMDcyQzAwMDFEMDAwMDM4MTg4MTgzQjUwMDAwOTIwOTgwMDAwMDgwRkQKKzoxMDcyRDAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyODYKKzoxMDcyRTAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDAxNjEzOTcKKzoxMDcyRjAwMDg3MDYwMUVDMTZDMDZFQkMwMDAwOTYwOTBCMDAwMDgwRUEKKzoxMDczMDAwMDAyMDAwMEIwMDAwMDAwMDBDQTAxMDBGODQyODAyRjM0RTMKKzoxMDczMTAwMDA4QzAxNjEzMTIwMDAwNDBBMkNEMzlCMjAwMDA5OTA5MkUKKzoxMDczMjAwMDgwMDAwMDgwODI4MDJGQjYwMDAwRjcxMTAwQTAwMTUwN0QKKzoxMDczMzAwMDA4MDA2RUYyMDAwMDAwMDAwMEY4MDFFMDA2MDA4NTMyNEYKKzoxMDczNDAwMDAwMDA5QjA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwOUMKKzoxMDczNTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwQkQwOTJBMzUwMkI4REQKKzoxMDczNjAwMDA4ODA2RUIyMDAwMDlFMDkxMjAxMDAwMDA5QzAyMUIyMUYKKzoxMDczNzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNEUKKzoxMDczODAwMDAwMDAwMEY4QTI4MDJGMzUwMDAwQjUwOTA0MDAwMDgwM0QKKzoxMDczOTAwMDAyNjE4MEJDMDAwMEFEMDk4MEI4MDAwMDA5QzA2RUIyNzcKKzoxMDczQTAwMDQwMDBBNTA5MDQwMDAwODA4MjBEOTBCQzgwMDAxNjEzRTcKKzoxMDczQjAwMDA0MDEwMDgwODIwRDkwQkMwMDAwQTUwOTAyQjAwMDgwOEQKKzoxMDczQzAwMDgyMUI4NEJDMDAwMEFEMDkwMDAwMDBGOEIyODEyRjk0M0MKKzoxMDczRDAwMDAwMDAxNjEzMDQwNzAxODAxMkMwNkVCQzAwMDAxNjEzRDMKKzoxMDczRTAwMDgwMDAwMDgwQjI4MTJGQjYwMDAwMTYxMzgwRDYwMTgwODUKKzoxMDczRjAwMDUyQzA2RUI2MDAwMDAwMDAwMEQ2MDFFQzU2QzA2RTM0REMKKzoxMDc0MDAwMDAwMDAwMDAwMDAwMDAwNjAxODAwODYzQTAwMDAwMDAwNDQKKzoxMDc0MTAwMDAwMDAwMDgwQjcwMTc4MzQwMDAwMDAwMDAwNzgwMUUwMkYKKzoxMDc0MjAwMDA2MDA4NjMyNDAwMEJEMDkwNDAwMDA4MDgyMEQ5MEJDMzkKKzoxMDc0MzAwMDAwMDAxNjEzMDRBMDAwMTgwODAwNkVCMjAwMDA5RTEyOEYKKzoxMDc0NDAwMDAwMDAwMDAwRDgyMDgwRkEwMDAwMTYxMzA2MDAwMDNDNUYKKzoxMDc0NTAwMDE4MjA4NEJDMDAwMDE2MTMwNEIwMDAzQzg4REI4M0JFRjcKKzoxMDc0NjAwMDAwMDAxNjEzODAwMTAwODBDMjAxNzhCNjAwMDAwMDAwMDEKKzoxMDc0NzAwMDAwMDAwMDgwRjcyMDc4M0EwMDAwMDAwMDU4NzgwMUUwMTIKKzoxMDc0ODAwMEY2MjA4NjNBMDAwMDBDMDkwMDAwMDAwNEY4NjA4MDlBOUIKKzoxMDc0OTAwMDAwMDBCODA5ODBCOTAwMDAwOUMwNkVCMjJGMDBCRDA5MTQKKzoxMDc0QTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwQzUKKzoxMDc0QjAwMDAyMDAwMDkwNDAwMEJBMDkwNDAxMDA4MDgyMEQ5MEJDRDcKKzoxMDc0QzAwMDM4MDBCQzA5MDAwMDAwNzgwOTAwMzY5MjgwMDAxNjEzQ0QKKzoxMDc0RDAwMDA0MDEwMDgwODIwRDkwQkMzOTAwMDAwMDAwMDAwMDc4OUIKKzoxMDc0RTAwMDA5MDAzNjMyMDAwMDE2MTMxMjAwMDAyQ0UyRTUyRUIyMUQKKzoxMDc0RjAwMDAwMDAxNjEzODAwMTAwODA4MjgwMkZCNjAwMDAxNjEzNTIKKzoxMDc1MDAwMDA0MDEwMDgwQzIwMDAzQkMxMDAwMDAwMDAwMTgwMDgwQ0QKKzoxMDc1MTAwMDY3QTE3MzM5MDAwMDAwMDAwMDVDMDFFODA2ODA4QjMyMkYKKzoxMDc1MjAwMDEwMjQwMDAwMDAwMDAwRjhBMjhEMkYzMTMwMDA4NTA4RTMKKzoxMDc1MzAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMTYxMzAwMDAwMDgwMjYKKzoxMDc1NDAwMDAyMDAwMDkwMDAwMDE2MTM4MDAxMDA4MEMyODEyRkI2NTcKKzoxMDc1NTAwMDAwMDAwMDA5MDAwMDAwRjhDMjgxMkY5NTAwMDAwMDAwMjMKKzoxMDc1NjAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4OTAKKzoxMDc1NzAwMDAyODAwMTMyMDBDMENDMDkxODAxMDAwQ0E4Q0QzRUIyMzcKKzoxMDc1ODAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjJEMDBFRjAzNDQKKzoxMDc1OTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwRDQKKzoxMDc1QTAwMDAyMDAwMDkwMDAwMDAwMDAwMDYyMDEzODA4QzA2RTMyNDYKKzoxMDc1QjAwMDAwMDgwMDgwMDAwMDAwMjgwOTAwMzczMjAwNjBFQjExNEQKKzoxMDc1QzAwMDAwMDAwMDA4MDg4MDM2RjIwMDAwREEwOTAwMDAwMDgwQTAKKzoxMDc1RDAwMDAyMDAwMDkwMDAwMEQyMDk4MDAwMDA4MEMyODEyRkI2MTYKKzoxMDc1RTAwMDAwMDBENTA5MDBEMDAxRTgwNjAwMDA5MjAwMDAwMDAwNkMKKzoxMDc1RjAwMDAwMDAwMEY4QzI4MTJGMzUwMDAwRDUwOTA0RDEwMTgwQjgKKzoxMDc2MDAwMDAyODA2RUJDMDAwMDAwMDAwMEQ2MDFFQzI2QzA2RTM0ODMKKzoxMDc2MTAwMDAwMDBENzA5ODAwMDAwODA5MjgxMkZCNjAwMDBEQTA5QUYKKzoxMDc2MjAwMDAwQzgwMUU4MDYwMDAwOTIwMDAwMDAwMDAwMDAwMEY4MTkKKzoxMDc2MzAwMDkyODEyRjM1MDAwMERBMDkwNEM5MDE4MDAyODA2RUJDRjYKKzoxMDc2NDAwMDAwMDAwMDAwMDBENjAxRUMxNkMwNkUzNDExMDA4NTA4NjEKKzoxMDc2NTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMTMKKzoxMDc2NjAwMDAyMDAwMDkwMDAwMDg1MDg5QTAxMDBGODQyODEyRkI1QzEKKzoxMDc2NzAwMDAwMDBFMzA5MTIwMTAwQzgwMjAwMjBCMjAwMDAwMDAwNkYKKzoxMDc2ODAwMDAwNUMwMUVDMDY0MDAwMzIwMDAwODUwODM3MDAwMEY4N0QKKzoxMDc2OTAwMDQyODEyRkI0MDAwMDAwMDAwMDAwMDBGODcyODEyRjM0RjYKKzoxMDc2QTAwMDNEMDA4NTA4MTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzNzkKKzoxMDc2QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUUwOTEyMDEwMDVDNTIKKzoxMDc2QzAwMDA4ODAyMEIyMDAwMERFMDkxMjAxMDA2MDAyODAyQ0IyQTYKKzoxMDc2RDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBFQjA5N0IKKzoxMDc2RTAwMDEyMDEwMEM4MDIwMDIwQjIwMDAwODUwODM3MDAwMEY4MkYKKzoxMDc2RjAwMEQyODEyRkI0MDAwMDAwMDAwMDAwMDBGODcyODEyRjM0MDYKKzoxMDc3MDAwMDNEMDA4NTA4MTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMTgKKzoxMDc3MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUUwOTEyMDEwMDVDRjEKKzoxMDc3MjAwMDA4ODAyMEIyMDAwMEU3MDkxMjAxMDA2MDAyODAyQ0IyM0MKKzoxMDc3MzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMEUKKzoxMDc3NDAwMDAwMDAwMDc4Nzk2MTM4MzIwMDAwMTYxMzEyMTgwMjRDREMKKzoxMDc3NTAwMEUyMjU2RUIyMDAwMDAwMDAwMDM0MDJCODA4ODA2RTMyRUMKKzoxMDc3NjAwMDAwMDAwMDAwMDBBMDAxNTAwODAwNkUzMjAwMDAwMDAwODAKKzoxMDc3NzAwMDAwNzgwMTYwMDgwMDZFMzIwMDAwRjUwOTlEMTEwMjM0QTYKKzoxMDc3ODAwMDA5MDA2RUIyMDAwMDAwMDAwMEYwMDE4ODA4MDA2RTMyQUYKKzoxMDc3OTAwMDAwMDAxMjEyMDBBODAxMDgwOTAwNkVGMjAwMDAwMDAwQUIKKzoxMDc3QTAwMEQ0RjgwMUUwMDYwMDg1MzIwMDAwMDAwMERBNUMwMUU4NTAKKzoxMDc3QjAwMDA2ODA4QjMyMDAwMDY0MTFERDAwMDAzMDAzMDAzOEYyRDcKKzoxMDc3QzAwMDAwMDBGQjA5MjMyOTAyMDQwOTgwNkVCMjNFMDAxNjEzNTMKKzoxMDc3RDAwMDEyMDAwMDJDODJDRDJFQjIwODAwRkYwOTFEMUMwMUU4MEEKKzoxMDc3RTAwMDc2MjA4MUI5MDAwMEZGMDk4MDAwMDA4MDAyODEyRkI2NTkKKzoxMDc3RjAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwQzkKKzoxMDc4MDAwMDAwMDAwMEY4MDI4MTJGMzQwMDAwNTQxMDAwMDAwMDJDMEEKKzoxMDc4MTAwMEY5MDEwMEY0MDAwMDAzMEE5RDAxMDA4MDA3NDA5M0IyQzMKKzoxMDc4MjAwMDAwMDAwMDAwMDAzMDAwODAwNzgwODgzMjAwMDAwMDAwNjcKKzoxMDc4MzAwMDAwMzgwMDgwMDcwMEVFMzIwMDAwMDAwMDAwMDgwMDgwRTEKKzoxMDc4NDAwMDA3QzA4NTMyMDAwMDAwMDAwMDEwMDA4MDA3NDA5MDMyMjEKKzoxMDc4NTAwMDEwMDAwMDAwMDAxODAwODA4NzhEODUzNzAwMDAwMDAwQjAKKzoxMDc4NjAwMDAwMjAwMDgwMDcwMDg2MzIwMDAwMDAwMDAwMjgwMDgwMTEKKzoxMDc4NzAwMDA3MDA4NTMyMDAwMDBBMEExMjAxMDAwMDA5QzAyMUIyODcKKzoxMDc4ODAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTMwMDBGNjAzMTAKKzoxMDc4OTAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMTYxMzAwMDAwMDgwQzMKKzoxMDc4QTAwMDAyMDAwMDkwMDAxMjE2MTMwNDAxMDA4MEEyOEQyRkIwNzgKKzoxMDc4QjAwMDAwMDAwMDAwMDBDQzAxNzgwOTgwNkUzMjAwMDA4NTA4Q0QKKzoxMDc4QzAwMERDRDEwMUU4MDY4MDk3OTIxMzAwODUwODEyMDEwMDJDOTQKKzoxMDc4RDAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwM0UKKzoxMDc4RTAwMDAwMDBFMzBGMDAwMDAwMTgwOTQwODFGMjAwMDBDNzBGRkMKKzoxMDc4RjAwMDAwQTgwMTIwMDkwMDZFRjIwMDAwODUwODgwMDEwMDgwQzgKKzoxMDc5MDAwMEYyODAyRkI2MDAwMDE5MEExMjAxMDBDODAyMDAyMEIyNEUKKzoxMDc5MTAwMDAwMDA4NTA4ODAwMDAwODA3MjgxMkZCNjAwMDAwMDAwMDIKKzoxMDc5MjAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwODUwODEyMDEwMDJDMDAKKzoxMDc5MzAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwREQKKzoxMDc5NDAwMDAwMDBFRTA5MTIwMTAwNUMwODgwMjBCMjAwMDAxNTBBNTgKKzoxMDc5NTAwMDEyMDEwMDYwMDI4MDJDQjIwMDAwMTYxMzAwMDAwMDgwQUIKKzoxMDc5NjAwMDAyMDAwMDkwMDAwMDg1MDgzNTAxMDBGODEyODEyRkI1NTMKKzoxMDc5NzAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwN0EKKzoxMDc5ODAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwMjMwQTE4MDEwMDBDMzIKKzoxMDc5OTAwMEE4Q0QzRUIyMjA4MDAwMDBEMTAxMDAwODA4ODAzNjMyMTgKKzoxMDc5QTAwMDNCMDBGMzAzMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMEYKKzoxMDc5QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTIxMTAwOTgwMTI4MDEKKzoxMDc5QzAwMDA5MDA2RUYyMDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwQUYKKzoxMDc5RDAwMDAwMDAyRjBBODAwMTAwODBBMjgxMkZCNjAwMDAyRjBBMkMKKzoxMDc5RTAwMDgwMDAwMDgwNDI4MTJGQjYxRjAwMDAwMDAwMDAwMDEwQzAKKzoxMDc5RjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODAyRkQyRTYKKzoxMDdBMDAwMDNDMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMjcKKzoxMDdBMTAwMDAwMDAwMDE0MDk4MDNDRDIwMDAwMkYwQTA4NUIwMUVDMzIKKzoxMDdBMjAwMDA2RkI2RUJDMDAwMDAwMDAwMDVBMDFFQzA2MDAwMDMyQUMKKzoxMDdBMzAwMDAwMDAyRjBBMzcwMDAwRjg0MjgxMkZCNDNEMDAwMDAwRkIKKzoxMDdBNDAwMEQ3MDEwMDJDODJDRDJFMzIwMDAwMzYwQTgwMDEwMDgwNDIKKzoxMDdBNTAwMDkyODEyRkI2MDAwMDE2MTM4MDAwMDA4MEMyODEyRkI2REQKKzoxMDdBNjAwMDAwMDAzRDBBMDhDOTAxRTgwNkJCNkVCQzAwMDAwMDAwMkEKKzoxMDdBNzAwMDAwQzgwMUU4MDYwMDAwMzIzMzAwMTYxMzEyMDAwMDJDODMKKzoxMDdBODAwMDgyQ0QyRUIyMDAwMEYzMTEwMDAwMDAyODA5ODAwMUYyMUYKKzoxMDdBOTAwMDAwMDA4NTA4MDAwMDAwODAwMjAwMDA5MDAwMDAzRDBBMDAKKzoxMDdBQTAwMDgwMDEwMDgwQzI4MTJGQjYwMDAwMTYxMzgwMDAwMDgwODQKKzoxMDdBQjAwMDkyODEyRkI2MDAwMDNEMEEwOEQxMDFFODA2QkI2RUJDREEKKzoxMDdBQzAwMDAwMDAwMDAwMDBEMDAxRTgwNjAwMDAzMjMzMDAxNjEzNjkKKzoxMDdBRDAwMDEyMDAwMDJDODJDRDJFQjIwMDAwRjMxMTAwMDAwMDI4MEQKKzoxMDdBRTAwMDA5QzAwMUYyMDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwM0IKKzoxMDdBRjAwMDAwMDA4NTA4ODAwMTAwODBGMjgxMkZCNjE4MDA4NTA4RkIKKzoxMDdCMDAwMDAwMDAwMDJDODJDRDJFOTIwMDAwMTYxMzA0MDcwMTgwODUKKzoxMDdCMTAwMDEyQzA2RUJDMDAwMDQzMEExMjAwMDBDODAyMDAyMEIyNkUKKzoxMDdCMjAwMDAwMDA0NjBBMTIwMTAwNUMwODgwMjBCMjAwMDAxNjEzMTMKKzoxMDdCMzAwMDEyMDAwMDYwMDI4MDJDQjIwMDAwMDAwMDAwMDAwMEY4N0IKKzoxMDdCNDAwMDFGODBGRjNBMDAwMEYzMDMxMjAxMDAyQzcyRTAyRUIyRjYKKzoxMDdCNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRUEKKzoxMDdCNjAwMDAwMDAwMDc4Nzk2MTM4MzIwMDAwMTYxMzEyMTgwMjRDQjgKKzoxMDdCNzAwMEUyMjU2RUIyMDAwMDAwMDAwMDM0MDJCODA4ODA2RTMyQzgKKzoxMDdCODAwMDAwMDAwMDAwRDRBMDAxNTAwODAwNkUzMjAwMDAwMDAwODgKKzoxMDdCOTAwMERCNzkwMTYwMDgwMDZFMzIwMDAwRjcxMUREMDAwMDA0OUYKKzoxMDdCQTAwMDA4MDAwMEYyMTAwMDAwMDAwMDE4MDA4MDg3OEQ4NTM3NjMKKzoxMDdCQjAwMDAwMDAwMDAwMDBGODAxRTAwNjAwODUzMjAwMDA1MDBBRDUKKzoxMDdCQzAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzAKKzoxMDdCRDAwMDczMEEwM0Y5MzAwMDE2MTMxMjAwMDA1Q0EyOEQyQ0IyNTgKKzoxMDdCRTAwMDAwMDAxNjEzMDQwNzAxRUMxNkMwNkVCQzAwMDAwMDAwNzQKKzoxMDdCRjAwMDAwQjAwMEUwMDYwMDAwMzIwMDAwODUwOERBNUMwMUU4MTEKKzoxMDdDMDAwMDA2ODA4QjkyMDAwMDg1MDg5RjQxMDE4MDUyMjA2RUJDNDcKKzoxMDdDMTAwMDAwMDA1RjBBOUY5ODAxODA1MjIwNkVCQzAwMDAwMDAwQTcKKzoxMDdDMjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwNTQwMUZDNzYKKzoxMDdDMzAwMDAyQzA2RTMyMDBDMDVEMEExODAxMDAwQ0E4Q0QzRUIyMzEKKzoxMDdDNDAwMDIwODA4NTA4MzEwMDAwMDgwODgwMzZCMjAwMDAwMDAwNUUKKzoxMDdDNTAwMDAwMDAwMEY4MTI4MTJGMzQzQjAwODUwODEyMDEwMDJDMkYKKzoxMDdDNjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUEKKzoxMDdDNzAwMDAwMDBFMjExMDA5ODAxMjgwOTAwNkVGMjAwMDA4NTA4NUEKKzoxMDdDODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwODUwOEQ1NDEwMUUwNUUKKzoxMDdDOTAwMDA2NDA4MTkyMDAwMDg1MDgwNEIwMDA4MDAyMDA2RUJDOUUKKzoxMDdDQTAwMDAwMDAwMDAwMDA5MDAxMDAwODAwNkUzMjAwMDAwMDEzODgKKzoxMDdDQjAwMDAwNzgwMTYwMDgwMDZFRjIwMDAwODUwODAwMDAwMDgwNzYKKzoxMDdDQzAwMDAyMDAwMDkwMDAwMDAwMDAwMDBDMDI3ODA5ODA2RTMyNzMKKzoxMDdDRDAwMDAwMDA2NzBBMDRENDAxODAxMkMwNkVCQzAwMDAwMDAwREUKKzoxMDdDRTAwMDAwMDAwMDc4MTk4MDk3MzcwMDAwMDAwMDAwOTAwMUUwNDQKKzoxMDdDRjAwMEU2MjU2RTNBMDAwMDAwMTMwMDAwMDA4MDAyMDAwMEYwNEMKKzoxMDdEMDAwMDAwMDA2QjBBMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4NUYKKzoxMDdEMTAwMDAwOTAwMUUwMDYwMDgwOTIwMDAwMDAwMDAwOTAwMUUwNjkKKzoxMDdEMjAwMDA2MDA4MDMyMDAwMDAwMDkwMDAwMDA4MDAyMDAwMDkwODAKKzoxMDdEMzAwMDAwMDAxNjEzODAwMDAwODBGMjgwMkZCNjAwMDBDNzBGRUQKKzoxMDdENDAwMDAwQTgwMTIwMDkwMDZFRjIwMDAwMTQwQTgwMDAwMDgwRTMKKzoxMDdENTAwMEYyODAyRkI2MDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMDdENjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwODYKKzoxMDdENzAwMDAwMDAwMDc4MDkwMDZFMzIwMjAwNzYwQTA0QjkwMDgwMjMKKzoxMDdEODAwMDgyQ0Q2RUJDMDAwMDc4MEE4MDAwMDA4MDcyODBGQ0I2NTQKKzoxMDdEOTAwMDAwMDA3QjBBMDAwMDAwRkMwMjAwMDA5MjAwMDA3ODBBNEMKKzoxMDdEQTAwMDgwMDAwMDgwODI4MEZDQjYwMDAwN0IwQTAwMDAwMEZDOUUKKzoxMDdEQjAwMDAyMDAwMDkyMDAwMDE2MTMwNDAwMDA4MDAyMDBGNUJDQ0YKKzoxMDdEQzAwMDAwMDAwMDAwMDAwMDAwQTg0MkJEOTczMDAwMDAwMDAwNDUKKzoxMDdERDAwMDU0MTgwOUZFRjJDMDdDMzAwMEMwODEwQTE4MDEwMDBDNjIKKzoxMDdERTAwMEE4Q0QzRUIyMDAwMDAwMDAwMDBFMDFFQzA2MDAwMDM0RjkKKzoxMDdERjAwMDAwMDAwMDAwMDA1NDAxRUMwNkMwMkYzMjIwODAwMDAwN0IKKzoxMDdFMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwRjMwMzEyMDEwMDJDNDUKKzoxMDdFMTAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjgKKzoxMDdFMjAwMDAwMDAwMDAwMDA2MjAxMzgwOEMwNkUzMjAwMDgwMDgwQzcKKzoxMDdFMzAwMDAwMDAwMDI4MDkwMDM3MzIwMDAwRUIxMTAwMDAwMDA4QTQKKzoxMDdFNDAwMEU4MDEwMEY0MDAwMDE2MTMwNDA3MDFFQzE2QzA2RUJDMzQKKzoxMDdFNTAwMDAwMDAwMDAwMDAwMDAwQThBMjAwMkQzNzBBMDAwMDAwNkEKKzoxMDdFNjAwMDAwMDAwMDc4MDkwMDM2MzIwMDAwMDAwMDAwMTgwOUUyMjYKKzoxMDdFNzAwMDA3MDAwMDMyMDAwMDg3MEEwNDAxMDA3ODE5ODA5N0JDQ0YKKzoxMDdFODAwMDAyMDA5MjBBMDRCOTAwODA4MkNENkVCQzAwMDAwMDQ4NTYKKzoxMDdFOTAwMEQ2MDEwMDc4QzlDRDJDMzIwMDAwOEIwQUI2MDAwMDgwRDQKKzoxMDdFQTAwMDAyMDAwMEIwMDAwMDE2MTMxMjAwMDA2NDAyODA5N0IyQjYKKzoxMDdFQjAwMDAwMDA4RDBBMTIwODAwNjQwMjAwNkVCMjAwMDA4RTBBRjMKKzoxMDdFQzAwMDEyMTgwMDY0MDIwMDZFQjIwMDAwOEYwQTEyMTAwMDY0RTMKKzoxMDdFRDAwMDAyMDA2RUIyMDAwMDAwMDBBNjU0MDFFQzA2QzAyRjMyNzIKKzoxMDdFRTAwMDAwMDA3RDA4MDAwRTAxRUMwNjAwMDA5NDAwMjAwMDRDMEMKKzoxMDdFRjAwMEQ2MDEwMDc4QzlDRDJDMzIwMDAwOTMwQUI2MDAwMDgwNkMKKzoxMDdGMDAwMDAyMDAwMEIwMDAwMDE2MTMxMjAwMDA2NDAyODA5N0IyNTUKKzoxMDdGMTAwMDAwMDA5NTBBMTIwODAwNjQwMjAwNkVCMjAwMDA5NjBBODIKKzoxMDdGMjAwMDEyMzAwMDY0MDIwMDZFQjIwMDAwOTcwQTEyMzgwMDY0M0EKKzoxMDdGMzAwMDAyMDA2RUIyMDAwMDk4MEExMjQwMDA2NDAyMDA2RUIyQTUKKzoxMDdGNDAwMDAwMDA5OTBBMTI0ODAwNjQwMjAwNkVCMjAwMDA5QTBBMEEKKzoxMDdGNTAwMDEyMTAwMDY0MDIwMDZFQjIwMDAwOUIwQTEyMTgwMDY0NDYKKzoxMDdGNjAwMDAyMDA2RUIyMDAwMDlDMEExMjIwMDA2NDAyMDA2RUIyOTEKKzoxMDdGNzAwMDAwMDA5RDBBMTIyODAwNjQwMjAwNkVCMjAwMDAwMDAwOUEKKzoxMDdGODAwMEE2NTQwMUVDMDZDMDJGMzIwMzAwN0QwODAwMEUwMUVDNjAKKzoxMDdGOTAwMDA2MDAzNjkyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyRTIKKzoxMDdGQTAwMDAwMDBBMzBBMDAwMDAwMTQwODgwM0Q5MjAwMDAwMDAwQjkKKzoxMDdGQjAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwQTYwQTA0MDAwMERDMDAKKzoxMDdGQzAwMDUzNjAzREIzMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5QzUKKzoxMDdGRDAwMEEyMEEzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwMDAwMzUKKzoxMDdGRTAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4MDYKKzoxMDdGRjAwMDAyODAwMTMyMDBDMEFDMEExODAxMDAwQ0E4Q0QzRUIyQ0MKKzoxMDgwMDAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjE1MDBFRjAzRDEKKzoxMDgwMTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwNDkKKzoxMDgwMjAwMDAyMDAwMDkwMDAwMDAwMDAwMDI4MDAwMDA3MDAwMDMyNUQKKzoxMDgwMzAwMDAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMjAwMTAwMDgyNTkKKzoxMDgwNDAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwMTYxMzEyMDAwMDQ4MDUKKzoxMDgwNTAwMDAyQzA4MEIyMDAwMDdEMDhDQTAxMDAwOEU4MDEwMDk0NTcKKzoxMDgwNjAwMDAwMDAxNjEzODAwMTAwODA2MjgxMkZCNjJEMDAxNjEzQzgKKzoxMDgwNzAwMDEyMDAwMDJDODJDRDJFQjIwMDAwQjUwQTFEMDEwMDgwMzYKKzoxMDgwODAwMDAyMDAwMEIwMDAwMDdEMDgwMDAwMDBGODYyODEyRjk1MUEKKzoxMDgwOTAwMDAwMDAxNjEzODAwMDAwODAwMjgxMkZCNjAwMDAwMDAwNEYKKzoxMDgwQTAwMDAwMDAwMEY4MDI4MTJGMzQyQTAwN0QwODEyMDEwMDJDMDQKKzoxMDgwQjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTYKKzoxMDgwQzAwMDAwMDBENzExMDAwMDAwMkMwOUMwODVEMjAwMDA2NDExMDcKKzoxMDgwRDAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwRjMwMzIzMDEwMEY4MzEKKzoxMDgwRTAwMDIyODEyRkI0M0UwMEYzMDMxMjAxMDAyQzgyQ0QyRUIyNjgKKzoxMDgwRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBENzExNUQKKzoxMDgxMDAwMDAwMDAwMDJDMDlDMDg1RDIwMDAwRjMwMzAwMDAwMEY4MzUKKzoxMDgxMTAwMDIyODEyRjk0MDAwMEM1MEEzODAxMDBEODAyODAwMUIyRTQKKzoxMDgxMjAwMDAwMDBDMzBBMUUwMDAwODAwMjAwMDBCMDAwMDBDNTBBNjMKKzoxMDgxMzAwMDFBMDEwMDgwMDIwMDAwQjAwMDAwMzgxMjAwMDAwMDY4NDAKKzoxMDgxNDAwMDFGODBGNkZBMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwOTgKKzoxMDgxNTAwMDAwMDBDOTBBMTIwMTAwNjAwODQwMjNCMjAwODIwMDAwM0EKKzoxMDgxNjAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMzgxMjAwMDAwMDY0NjkKKzoxMDgxNzAwMDFGNDBGNkZBMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwQTgKKzoxMDgxODAwMDAwMDAxNjEzMTIwMDAwMjQwODAwMjNCMjAwMDAxNjEzOEEKKzoxMDgxOTAwMDEyMDAwMDIwMDhDMDIzQjIwMDAwMTYxMzEyMDAwMDE4QkQKKzoxMDgxQTAwMDA4ODAyM0IyMDBDMEQ0MEExODAxMDAwQ0E4Q0QzRUIyNEEKKzoxMDgxQjAwMDAwMDBDQzBBMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzQzEKKzoxMDgxQzAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwQzAKKzoxMDgxRDAwMDAyNDA4MkIyMDAwMDE2MTMxMjAwMDAzNDAyMDA4NkIyODAKKzoxMDgxRTAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDAzODEyQUQKKzoxMDgxRjAwMDAwMDAwMDVDMUZDMEY1RkEwMDAwRjMwMzAwMDAwMDgwREYKKzoxMDgyMDAwMDAyMDAwMDkwMDAwMDAwMDA0NTAwMDBEODAyMDAwMDMyOEIKKzoxMDgyMTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwNjUKKzoxMDgyMjAwMDAwMTAwMDAwMDc0MDgyMzIwMDAwMDAwMDAwMTgwMDAwMkIKKzoxMDgyMzAwMDA3MDA4NjMyMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0NTUKKzoxMDgyNDAwMDAwMDA3QTBGMDAzMDAxRTAxNjIwNkVGQTAwMDBERDBBMEYKKzoxMDgyNTAwMDM4MDEwMDJDRjgwMTBCQjQwMDAwREQwQTAyMEQwMjgwODkKKzoxMDgyNjAwMEEyNUI4MEJDMDAwMDAwMDAwMDAwMDAyQ0M4QzE4MjM0NkEKKzoxMDgyNzAwMDAwMDBERjBBODAwMDAwODA0MjgxMkZCNjAwMDBCNDBGQUEKKzoxMDgyODAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwMTYxMzlGQTgwMUUwMkIKKzoxMDgyOTAwMDE2MjA2RUJDMDAwMEQ0MEYwMDAwMDA4MDAyMDAwMEYwMjkKKzoxMDgyQTAwMDAwMDBFNTBBMjcwMTAwRDgwMjgwMDFCMjAwMDAwMDAwQUEKKzoxMDgyQjAwMEM3MDAwMDJDRThDMDgyMzQwMDAwMDAwMDAwMDAwMDA4NjUKKzoxMDgyQzAwMEQ4MDEwMDM0MDAwMDAwMDBENTQwMDFFMDA2MDA4NzMyRUMKKzoxMDgyRDAwMDA4MDA0QjEyMDAxODAxRTg3NjIwODFGOTAwMDA2NDExQjMKKzoxMDgyRTAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwRTkwQTIzMTkwMDAwMDIKKzoxMDgyRjAwMDA3ODA4MUIyM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyRjAKKzoxMDgzMDAwMDAwMDBFQjBBMUQyMTAwMDAwNzAwODJCMjAwMDBFRTBBMDcKKzoxMDgzMTAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwRUUwQTgwMDAwMDgwQzYKKzoxMDgzMjAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMjUKKzoxMDgzMzAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDAxNjEzMzYKKzoxMDgzNDAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwNTQxMDAwMDAwMDJDOTYKKzoxMDgzNTAwMEY5MDEwMEY0MDAwMDE2MTMwNDAxMDA4MDYyODAyREJDQjYKKzoxMDgzNjAwMDEwMDBGNDBBMkMzMDAwMDAxN0UwMkNCOTAwMDBGNjBBQzcKKzoxMDgzNzAwMDhFMzkwMDAwMDdDMDgyQjIwMDAwRjYwQTAwMDgwMDAwMzMKKzoxMDgzODAwMDA3MDA4NzkyMDAwMEY2MEE4RTM5MDAwMEI3QzE4MkI0NTgKKzoxMDgzOTAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODczMjAwMDBGODBBMTMKKzoxMDgzQTAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RjcKKzoxMDgzQjAwMDczMEEwM0Y5MDAwMEY2MEE5RjAxMDAxNDE4NDA4MUJDRkIKKzoxMDgzQzAwMDAwMDBGRTBBMDQwMDAwODAwMkMwODVCQzAwMDAxNjEzRjUKKzoxMDgzRDAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwMDAwMDAwMDAwMDc4QUYKKzoxMDgzRTAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDQ0YKKzoxMDgzRjAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAxNjEzMDUKKzoxMDg0MDAwMDEyMDAwMDQ4MDJDMDgwQjIwMDAwMTYxMzA0MDEwMDgwNzAKKzoxMDg0MTAwMEQyODE4MEI1MDAwMEY2MDNDQTAxMDAwOEU4ODE4MDk0OEIKKzoxMDg0MjAwMDAwMDAxNjEzODAwMTAwODA4MjgxMkZCNjAwMDAwNDBCMkIKKzoxMDg0MzAwMDFFMDAwMDgwMDIwMDAwQjAwMDAwMDYwQjFBMDEwMDgwNDAKKzoxMDg0NDAwMDAyMDAwMEIwMDAwMDM4MTIwMDAwMDA2ODFGODBGNkZBMzkKKzoxMDg0NTAwMDAwMDBGMzAzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRUIKKzoxMDg0NjAwMDlGQTgwMUUwMTYyMDZFQkMwMDAwN0EwRjAwMDAwMDE0RTcKKzoxMDg0NzAwMDA4MDAwMEYyMDAwMDBBMEI4MDAwMDA4MDQyODEyRkI2NDUKKzoxMDg0ODAwMDAwMDBCNDBGMDAwMDAwODAwMjAwMDBGMDAwMDBENDBGRDQKKzoxMDg0OTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwN0YwODA0MDAwMDgwNUYKKzoxMDg0QTAwMDAyNDA4MUJDMDAwMDBFMEIxMjAxMDBFODAyQzAyMUIyQTQKKzoxMDg0QjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwRkQKKzoxMDg0QzAwMDAwMDAwMDc4MDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwMDUKKzoxMDg0RDAwMDgyQkE5N0JDMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDQkUKKzoxMDg0RTAwMDAwMDA3RjA4MTIwMTAwNjgwMkM1ODVCMDAwMDAxNjEzNjUKKzoxMDg0RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0QwODgwMDAwMDgwRTUKKzoxMDg1MDAwMEYyQzE4NUI2MDAwMDE3MEIxQzQxMDI4MDA2QzA4NUIyN0YKKzoxMDg1MTAwMDAwMDAwMDAwMDAwMDAwNjgwMkM1ODUzMDAwMDAwMDAwNzcKKzoxMDg1MjAwMDAwMDAwMDcwMUYwMEY3M0EwMDAwN0QwODAwMDAwMEY4MEUKKzoxMDg1MzAwMDIyODEyRjk0MDAwMDdEMDg4MDAwMDA4MEYyQzE4NUI2NjIKKzoxMDg1NDAwMDAwMDBENzExMDAwMDAwMkMwOUMwODVEMjAwMDBGMzAzMDEKKzoxMDg1NTAwMEQyMDEwMDk0MUU0MEU5OUEwMDAwMTYxMzA0MjAwMDE4NkUKKzoxMDg1NjAwMDA4MDA2RUIyMDAwMDE2MTM4MDAwMDA4MEYyODEyRkI2NjIKKzoxMDg1NzAwMDAwMDA4QzEyMDAwMDAwODAwMjAwMDBGMDAwMDAxNjEzQzIKKzoxMDg1ODAwMDA0MDEwMDgwMDI4MDgwQkMwMDAwMTYxMzA0NTEwMTgwQTkKKzoxMDg1OTAwMDAyODA2RUJDMDAwMDE2MTMwNDIxMDE4MDAyMDA2RUJDMzQKKzoxMDg1QTAwMDAwMDAwMDAwMDAzQzAwRTgwNjQwODEzMjAwMDAyNTBCN0UKKzoxMDg1QjAwMDFGMDAwMDgwMDIwMDAwQjAwMDAwMjIwQjlFNDAwMjc4RTUKKzoxMDg1QzAwMDA5NDA2OEIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMEQKKzoxMDg1RDAwMDAwMDAyOTBCODAwMTAwODA4MjgxMkZCNjAwMDA3RjA4RjcKKzoxMDg1RTAwMDJBMzEwMUUwMDYwMDAwQjIxODAwMDAwMENBMDAwMEY4QkQKKzoxMDg1RjAwMDczMEEwMzM5N0YwODM2MDAwMDAwMDBDMDAyMDAzNjkyN0IKKzoxMDg2MDAwMDAwMDA3RjA4ODAwMTAwODBBMjgwMkZCNjE4MDAwMDAwQzMKKzoxMDg2MTAwMENBMDAwMEY4NzMwQTAzMzk3RjA4MzYwMDAwMDAwMEMwNjIKKzoxMDg2MjAwMDAyMDAzNjkyMEQwMDJGMEIwMDAwMDA1ODA4MDAzNjkyMTEKKzoxMDg2MzAwMDAwMDAyRjBCMDAwMDAwNTgwODAwMDA5MjFCMDAwMDAwRjMKKzoxMDg2NDAwMDAwMDAwMDU4MDgwMDM2MzIwMDAwMTYxMzA0MjAwMDE4RkQKKzoxMDg2NTAwMDA4MDA2RUIyMDAwMDE2MTM4MDAwMDA4MEYyODEyRkI2NzEKKzoxMDg2NjAwMDAwMDA4QzEyMDAwMDAwODAwMjAwMDBGMDAwMDAwMDAwRkEKKzoxMDg2NzAwMDAwMzAwMDI4MDgwMDZFMzIwMDAwMDAwMDU0NTQwMUZDNTUKKzoxMDg2ODAwMDAyQzA2RTMyMDAwMDk0MEIzODAwMDBBNDA4ODA4MkIyNTEKKzoxMDg2OTAwMDAwMDA5NDBCMDQyODAxMDQwODAwNkVCMjAwMDAxNjEzQjkKKzoxMDg2QTAwMDlGNTAwMTA0QTg1QjgwQkMwMDAwMDAwMDAwNTAwMUU4NUUKKzoxMDg2QjAwMDA2MDAwMDMyMDAwMDVFMEIwODAxMDA3ODE5QTA4MkJDQTEKKzoxMDg2QzAwMDAwMDAwMDAwMDAyODAxRTBBNjYwODAzQzAwMDAzQzBCOTgKKzoxMDg2RDAwMDJBMDEwMDE0MDgwMDAwQjIwMDAwMDAwMENBMDAwMDE0QzMKKzoxMDg2RTAwMDE4NDA4MTNBMDAwMEM3MEYwMEE4MDEyMEE5MjA2RUZBQTcKKzoxMDg2RjAwMDAwMDAxNjEzMDYwMTAyODA4MjFCOTJCQzAwMDAwMDAwREQKKzoxMDg3MDAwMDAwMjAwMUUwQTYyMDZFM0MwMDAwMDAwMDAwMzAwMEUwRTgKKzoxMDg3MTAwMDA2MDAwMDMyMDAwMDAwMDAwMEE4MDFFMDA2MDA5MjMyQ0UKKzoxMDg3MjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzA1MDBCQTEKKzoxMDg3MzAwMDE4MDEwMDBDQThDRDNFQjIwMDAwNDcwQjA0MDAwMDgwRDkKKzoxMDg3NDAwMDAyNDA4MUJDMDAwMDAwMDAwMDAwMDAxNDA4MDAwMDMyNUMKKzoxMDg3NTAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTQxMEIzNjAwQ0UKKzoxMDg3NjAwMDAwMDAwMEMwMDIwMDM2OTIyMDgwMDAwMDAwMDAwMDI4QjcKKzoxMDg3NzAwMDA5ODAzNjMyMDAwMDgxMTEwMDAwMDBEODAyMDAwMEQyQ0EKKzoxMDg3ODAwMDAwMDA0QjBCMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwRjEKKzoxMDg3OTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4OTAKKzoxMDg3QTAwMDAyODAwMTMyMDBDMDUwMEIxODAxMDAwQ0E4Q0QzRUIyNkYKKzoxMDg3QjAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTRCMEIwMDAwMUEKKzoxMDg3QzAwMDAwMDAwMEMwMDIwMDM2MzIwMDAwMzYwMDAwMDAwMDgwQzkKKzoxMDg3RDAwMDAyMDAwMDkwMDAwMDAwMDBERTAwMDAwOEU4MDEwMDM0MDQKKzoxMDg3RTAwMDAwMDAwMDAwREYwMDAxMzgwOEMwNkUzMjAwMDAwMDAwMDkKKzoxMDg3RjAwMDAwMTAwMDAwMDcwMDAwMzIwMDAwMDAwMDAwMTgwMDAwMTgKKzoxMDg4MDAwMDA3ODA4MjMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyRDgKKzoxMDg4MTAwMDAwMjAwMDgwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwMTAKKzoxMDg4MjAwMENBM0QwMDBDMDc4MDgzMzIwMDAwMDAwMDAwMDAwMDE0RTUKKzoxMDg4MzAwMDE4NDA4MTNBMDAwMDVDMEIwNDAyMDFFQzE2QzA2RUJDQ0IKKzoxMDg4NDAwMDAwMDAwMDAwQzAwMTAwMTQxODQwODEzQTAwMDAwMDAwNDAKKzoxMDg4NTAwMDAwMDAwMEY4OTI4MDJGMzQwMEMwMTYxMzEyMDAwMDQwNzAKKzoxMDg4NjAwMEEyOEQzOUIyMDAwMEQ3MEIxMjAxMDA0ODAyQzA4MEIyQkQKKzoxMDg4NzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwQkQKKzoxMDg4ODAwMDAwMDAwMDI4MDg4MDk3MzIwMDAwMDAwMDAwMDAwMEE0Q0IKKzoxMDg4OTAwMDA4ODA4MjMyMDAwMDAwMDAwMDEwMDA2QzE4MjA2RTNBNDAKKzoxMDg4QTAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDBDNzBGRTYKKzoxMDg4QjAwMDAwQTgwMTIwMTkyMDZFRkEwMDAwMTYxMzA2MDEwMjgwOUMKKzoxMDg4QzAwMDgyMUI5MkJDMDAwMDAwMDAwMDIwMDFFMDE2MjA2RTNDREMKKzoxMDg4RDAwMDAwMDAwMDAwMDBBODAxRTAwNjAwOTIzMjAwMDA2OTBCRDEKKzoxMDg4RTAwMDAwMzgwMUUwMDY0MDgwOTIwMDAwMDAwMDAwNjAwMDZDNEIKKzoxMDg4RjAwMDE4MjA2RTNBMDAwMDAwMDAwMDY4MDA0QzA4MDA2RTMyM0MKKzoxMDg5MDAwMDAwMDA2QjBCOUYwMTAwMDQ2ODYwODBCQzAwMDA3NDBCQ0EKKzoxMDg5MTAwMDAwMDAwMDE4MTgyMDAwOUMwMDAwMTYxMzgwMDEwMDgwNDEKKzoxMDg5MjAwMEEyODAyRkI2MDAwMDZFMEIxMjAxMDBFODAyQzAyMUIyMzcKKzoxMDg5MzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNzgKKzoxMDg5NDAwMENBNzAwMDE4MDgwMDZFMzIwMDAwNjcwQjAyMDEwMDgwMzgKKzoxMDg5NTAwMDYyNjA4MEJDMDAwMDE2MTM5RjAwMDAxNDE4NDA4MUJDQTgKKzoxMDg5NjAwMDAwMDAwMDAwQ0EwMTAwRjgwMjgwMkYzNTAwQTA2OTBCNEEKKzoxMDg5NzAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMTYxMzAwMDAwMDgwRTEKKzoxMDg5ODAwMDAyMDAwMDkwMDAwMDc5MEI4MDAwMDA4MEEyODAyRkI2Q0EKKzoxMDg5OTAwMDAwMDA3QzBCMDQwMDAwODBBMkEwODFCQzAwMDAxNjEzMjQKKzoxMDg5QTAwMDlGMDAwMDE0MTg0MDgxQkMwMDAwMDAwMENBMDEwMEY4QkMKKzoxMDg5QjAwMDAyODAyRjM1MDBBMDE2MTMxMjAwMDA0MEEyOEQzOUIyOUMKKzoxMDg5QzAwMDAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNTAwMDA3QzBCQTIKKzoxMDg5RDAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzEKKzoxMDg5RTAwMDczMEEwM0Y5MDAwMDAwMDAwMDI4MDFFMDA2MDAwMDMyQ0QKKzoxMDg5RjAwMDAwMDAwMDAwMDAzQzAwRTgwNjQwODEzMjAwMDAwMDAwNUEKKzoxMDhBMDAwMDAwMzAwMEUwMDY4MDgyMzIwMDAwMDAwMDAwMjAwMEUwMUMKKzoxMDhBMTAwMDA2ODA4MTMyMDAwMDAwMDAwMDEwMDBFMDA2QzA4NjMyQUYKKzoxMDhBMjAwMDAwMDAwMDAwMDAxODAwRTAwNkMwODQzMjAwMDAxNjEzQTkKKzoxMDhBMzAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwODYwQjFGMDEwMDA4QUUKKzoxMDhBNDAwMDA5MDAwMEIyMDAwMDk3MEIwNDIwMDE4MDAyMDA2RUJDRjgKKzoxMDhBNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDEwMDAwMDAwQ0IKKzoxMDhBNjAwMDAwMDAwMDEwNzkwQjE2MzgwODAwMDAwMDAwMDAwMDBDMTAKKzoxMDhBNzAwMDc5MEIxNjM4MDAwMDAwMDAwMDAwMDAwNEE5MDAyRDM3MTMKKzoxMDhBODAwMDAwMDQwMTAwMDAwMDAwMDRDOTREOTAzQTAyMDAwMDAwRkIKKzoxMDhBOTAwMDAwMDAwMEE4ODIwRDkxMzcwMDAwMDAwMDAwMDAwMEE4MkYKKzoxMDhBQTAwMDEyQTQyQTNBMDAwMDhGMEI4MDQwMDI4MEUyMDE3Q0I2QkIKKzoxMDhBQjAwMDAwMDAxNjEzMDQ0MDAyNzhCOTNGN0NCMDAwMDAwMDAwQUIKKzoxMDhBQzAwMDAwMDAwMDA4RTlBNTkwM0EwMDAwOTEwQjlGMDEwMDEwRkEKKzoxMDhBRDAwMDE5MDA5MUJDOUYwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAKKzoxMDhBRTAwMDAwMDA4QTBCMDQwMTAwODA0MkU0OTBCQzAwMDAxNjEzRDEKKzoxMDhBRjAwMDA0MjEwMTgwODI5QjkwQkMwMDAwOTcwQjAwMDAwMDgwNDUKKzoxMDhCMDAwMDAyMDAwMDkwMDAwMDAwMDAwMDEwMDA2QzA4MDA2RTMyQUYKKzoxMDhCMTAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDAxNjEzMjAKKzoxMDhCMjAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMzIxMDUxMDAwMEQ4MEIKKzoxMDhCMzAwMDAyMDAwMEYyMDAwMDlBMEIwMDUwMDEzQ0E4NUI4MDlDRjAKKzoxMDhCNDAwMDAwMDA3RjA4MDAzMDAxRTAwNjAwMDA5MjAwMDA5RjBCNEIKKzoxMDhCNTAwMDNFNTEwMTAwQTgxQjgwQkEwMDAwMDAwMERFMDAwMEY4QjIKKzoxMDhCNjAwMEYyODEyRjM0MDAwMDAwMDAwMDU4MDFFQzA2QzBFRTMyMDQKKzoxMDhCNzAwMDAwMDA5RjBCODAwMTAwODAzMjgwODdCNjAwMDAwMDAwNUIKKzoxMDhCODAwMDAwMDAwMEY4RTI4MDJGMzQwMDAwRTMxMDYwMzAwMUUwQzQKKzoxMDhCOTAwMDA2MDAwMEYyMDAwMEU5MEIwMDAwMDA4MDAyMDAwMDkwRDcKKzoxMDhCQTAwMDAwMDAwMDAwMDAwMDAwMTQwODAwMDAzMjAwMDBBOTBCQzMKKzoxMDhCQjAwMDA0MDIwMUVDMTZDMDZFQkMwMDAwMDAwMEM5MDEwMDE0RTQKKzoxMDhCQzAwMDE4NDA4MTNBMDAwMDAwMDBDMDAxMDEzODA4QzA2RTMyMzAKKzoxMDhCRDAwMDAwMDAwMDAwREYwMDAwQTRBODYwOEEzQzAwMDAxNjEzMUIKKzoxMDhCRTAwMDBGMDAwMDgwMDIwMDAwQjAwMEMwQUQwQjEyMDEwMDQwNzkKKzoxMDhCRjAwMEEyOEQzOUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDhDMDAwMDAwMDAwMDAwMDAzMDAwRTAwNjAwMDAzMjAwMDAwMDAwMUMKKzoxMDhDMTAwMERGMDAwMEE0QTg2MDhBM0MwMDAwMTYxMzBGMDAwMDgwNEIKKzoxMDhDMjAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDEzODA4QzA2RTMyRjEKKzoxMDhDMzAwMDAwMDAwMDAwREVBODAxMjA5OTIyNkUzQTAwMDAxNjEzMDEKKzoxMDhDNDAwMDA2MDEwMjgwODIxQjkyQkMwMDAwMTYxMzlGMjAwMUUwRTcKKzoxMDhDNTAwMDk2MjI2RUJDMDAwMEIyMEI4MDAwMDA4MEYyODAyRkI2MUUKKzoxMDhDNjAwMDAwMDBDNzBGMDAwMDAwODAwMjAwMDBGMDAwMDBCOTBCRjgKKzoxMDhDNzAwMDFGNTAwMUU4MDYwMDAwQjIwMDAwQjUwQjA0MDAwMDgwQTAKKzoxMDhDODAwMDAyQzA4M0JDMDAwMEI5MEIwMDUwMDFFOEY2NjA4MDlDNzQKKzoxMDhDOTAwMDA4MDAwMDAwMDA0MDAyNzgzOTlBRkUzODAwMDAxNjEzRTAKKzoxMDhDQTAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwMDIKKzoxMDhDQjAwMDkyQkE5N0JDMDgwMDAwMDAwMDQwMDI2ODEyOUFGRTM4ODEKKzoxMDhDQzAwMDAwMDBCRTBCMkFBOTAxRTAwNjAwOTJCMjE4MDAzNjAwOEYKKzoxMDhDRDAwMENBMDAwMEY4NzMwQTAzRjkxRDAwQkUwQjA0MDAwMDgwRUYKKzoxMDhDRTAwMDAyQTQxN0I4MDAwMEJBMEIwNDAwMDAxNDE4NDA4MUJDOUQKKzoxMDhDRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA2NDExQzQKKzoxMDhEMDAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwQzEwQjgwMDEwMDgwMzkKKzoxMDhEMTAwMDMyODAyRkI2M0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyRTgKKzoxMDhEMjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzBEMjBCMTkKKzoxMDhEMzAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMEMzMDAwMDI4MUUKKzoxMDhENDAwMDA5ODAzNjMyMDAwMDgxMTEwMDAwMDBEODAyMDAwMEQyRjQKKzoxMDhENTAwMDAwMDBDNzBCMDQwMDAwODAwMjgwOTJCQzAwMDAwMDAwRUQKKzoxMDhENjAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwQ0MwQjA0MDAwMDgwODEKKzoxMDhENzAwMDAyNDA4MUJDMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QjUKKzoxMDhEODAwMDAwMDBEMDBCMDQwMDAwMTQxODQwODFCQzAwMDBDODBCODgKKzoxMDhEOTAwMDEyMDAwMDAwMDlDMDIxQjIwMDAwQzkwQjAwMDAwMDgwRDEKKzoxMDhEQTAwMDAyMDAwMDkwMTgwMDM2MDAwMDAwMDBGODczOEEwM0Y5RjIKKzoxMDhEQjAwMDAwMDA2NDExMDAwMDAwMzAwMzAwMzhGMjAwMDBEMDBCMDYKKzoxMDhEQzAwMDgwMDEwMDgwMzI4MDJGQjYzRTAwMTYxMzEyMDAwMDJDNjYKKzoxMDhERDAwMDgyQ0QyRUIyMDAwMDAwMDBDMzAwMDBEODAyODAwMTMyMTQKKzoxMDhERTAwMDAwQzBDQzBCMTgwMDAwMENBOENEM0VCMjAwMDAxNjEzM0EKKzoxMDhERjAwMDgwMDAwMDgwNzI4MDJGQjYwMDIwMDA4MDAwMDAwMDI4RDQKKzoxMDhFMDAwMDA5MDAzNzMyMDAwMDY2MTIwMDAwMDAwOEU4MDEwMEY0OTMKKzoxMDhFMTAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwODBCMjAwMDAwMDAwREIKKzoxMDhFMjAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwMTYxMzgwMDEwMDgwRjEKKzoxMDhFMzAwMEEyODAyRkI2MTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5QTIKKzoxMDhFNDAwMDFEMDAxNjEzMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzQkEKKzoxMDhFNTAwMDlGMDAwMDE0MTg0MDgxQkMwMDAwRDgwQjBCMDEwMDgwNUIKKzoxMDhFNjAwMDAyMDAwMEIwMDAwMDRCMTIwMDAwMDA4MDAyMDAwMEYwODEKKzoxMDhFNzAwMDAwMDBFMDBCODAwMTAwODA5MjgwMkZCNjJCMDBFNjBCRjMKKzoxMDhFODAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwQ0IKKzoxMDhFOTAwMDAyMDAwMDkwMDAwMEUzMEIxRDAxMDA4MDAyMDAwMEIwMDIKKzoxMDhFQTAwMDAwMDBFNjBCODAwMTAwODA2MjgxMkZCNjAwMDAxNjEzREYKKzoxMDhFQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTYwQjgwMDAwMDgwQUYKKzoxMDhFQzAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyN0EKKzoxMDhFRDAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA3RDA4MkYKKzoxMDhFRTAwMDA0MDAwMDgwMDI4MDg1QkMwMDAwNUQxMjAwMDAwMDgwNEMKKzoxMDhFRjAwMDAyMDAwMEYwMDAwMDY5MDYwMDAwMDAxQzA4ODA4NTkyNTYKKzoxMDhGMDAwMDAwMDA3RjA4ODAwMTAwODBBMjgwMkZCNjAwMDAxNjEzQTkKKzoxMDhGMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwMDAwMDgwMTYKKzoxMDhGMjAwMEUyODAyRkI2MDAwMEVFMEI4MDAxMDA4MDgyODEyRkI2MTgKKzoxMDhGMzAwMDAwMDAxNjEzMDQzMTAxODAwMjAwNkVCQzAwMDAxNjEzRkQKKzoxMDhGNDAwMDA0MzEwMDgwODI5QjgyQkMwMDAwMTYxMzAyMDEwMDgwNjUKKzoxMDhGNTAwMDEyQTA4MkJDMDAwMDAwMDBDRTAxMDBEODAyODAwMTMyQzUKKzoxMDhGNjAwMDAwQzBGNTBCMTgwMTAwMENBOENEM0VCMjIwODAwMDAwMTcKKzoxMDhGNzAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMzgxMjAwMDAwMDVDNTMKKzoxMDhGODAwMDFGQzBGNUZBMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwMEIKKzoxMDhGOTAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAxNjEzNzgKKzoxMDhGQTAwMDgwMDAwMDgwODI4MDJGQjYwMDAwMTYxMzA0MDAwMDgwMkQKKzoxMDhGQjAwMDAyODA4MkJDMDAwMDAwMDA2MDAwMDBEODAyMDAwMDMyODUKKzoxMDhGQzAwMDAwMDBGRDBCM0YwMDAwM0MwODQwODBCMjAwMDBGRDBCOUMKKzoxMDhGRDAwMDgwMDEwMDgwRTI4MTJGQjYwMDAwMDAwMERFMDAwMEY4NzIKKzoxMDhGRTAwMEYyODEyRjM0MDAwMDAwMDAwMDU4MDFFQzA2QzBFRTMyODAKKzoxMDhGRjAwMDAwMDAwMDAwNEQwMDAwMDA2N0UwODMzRTAwMDAwMDAwMUMKKzoxMDkwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwOEYKKzoxMDkwMTAwMDA3QzA4NjMyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyM0MKKzoxMDkwMjAwMDAwMDA0OTBDMDQwMDAwMjhEOEEwODJCQzAwMDAxNjEzRTAKKzoxMDkwMzAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDE4REMKKzoxMDkwNDAwMEQ4QTA4MTNDMDAwMDFGMEMwNDAwMDAzQ0Q4RTA4M0JDODkKKzoxMDkwNTAwMDAwMDAxNjEzMDQwMTAwODAwMjgwODFCQzAwMDAwOTBDOEUKKzoxMDkwNjAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMTYxMzEyMDAwMDUwMTYKKzoxMDkwNzAwMDAyQzAzOEIyMDAwMDFEMEM1MTAwMDBEODEyODAyRDlBOTkKKzoxMDkwODAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDAwMDAxNjBDOTQKKzoxMDkwOTAwMDI4MDAwMEQ4MDIwMDAwQjIwMDAwMTMwQzgwMDEwMDgwRkMKKzoxMDkwQTAwMEYyQzE4NUI2MDAwMDBGMEMxRjQwMDI4NEU2MDEwMEI0MzcKKzoxMDkwQjAwMDAwMDAxMzBDMUQwMTAwRjgyMjgxMkZCNDAwMDAxMzBDRDYKKzoxMDkwQzAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwMTEwQzFEMDEwMDgwNDYKKzoxMDkwRDAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1OUYKKzoxMDkwRTAwMDAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjAwMDAxNjEzQjkKKzoxMDkwRjAwMDFGMDEwMDgwMDIwMDAwQjAwMDAwMTUwQzM0MzAwMEUwQjkKKzoxMDkxMDAwMDE2MjA2RUJDMDAwMEI0MEYwMDAwMDA4MDAyMDAwMEYwQ0EKKzoxMDkxMTAwMDAwMDBENTBGREE1QjAxRUMwNjQwRURGMjE4MDAzNjAwRDYKKzoxMDkxMjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMUIwQzA0MDAwMDgwMjMKKzoxMDkxMzAwMDcyODAyREJDMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2MjMKKzoxMDkxNDAwMDAwMDAxNjBDNjcwMDAwRjhBMjgwMkZCNTAwMDAxNjEzNkYKKzoxMDkxNTAwMDEyMDAwMEU4MDJDMDIxQjIwMDAwMTYxMzA0MDEwMDgwRDIKKzoxMDkxNjAwMDcyODAyREJDMDAwMDAwMDA1MTAwMDBEODAyMDAwMDMyQzcKKzoxMDkxNzAwMDAwMDAzRTEwMDAwMDAwMDBEODIwODBGQTAwMDBGRTBCMjYKKzoxMDkxODAwMDREMDAwMDAwNjdFMDgzOUUwMDAwMTYxMzEyMDAwMDUwOUYKKzoxMDkxOTAwMEYyQzEzOEI0MDAwMDJDMEMyODAwMDA4MDA4NDAwMEIyNTYKKzoxMDkxQTAwMDAwMDAyOTBDODAwMTAwODBGMkMxODVCNjAwMDAyNTBDNkEKKzoxMDkxQjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwMjkwQzFEMDEwMEY4RTQKKzoxMDkxQzAwMDIyODEyRkI0MDAwMDI5MEMwMDAwMDBGODYyODEyRjk1NDUKKzoxMDkxRDAwMDAwMDAyNzBDMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMEMKKzoxMDkxRTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwN0UKKzoxMDkxRjAwMDAyNDA2ODMyMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMTgKKzoxMDkyMDAwMDAwMDAyQjBDMzQzMDAwRTAxNjIwNkVCQzAwMDBCNDBGQzAKKzoxMDkyMTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwRDUwRkRBNUIwMUVDRDYKKzoxMDkyMjAwMDA2NDBFREYyMDAwMDRGMEM4MDAwMDA4MEUyODAyRkI2NzcKKzoxMDkyMzAwMDAwMDAzMDBDMDQyMTAwRTAwNjgwODFCMjAwMDAzRTEwRTYKKzoxMDkyNDAwMDAwMDAwMDM0MDgwMDAwRjIwMDAwMDAwMDAwMjAwMEUwRjAKKzoxMDkyNTAwMDA2ODA4MTMyMDAwMDAwMDAwMDNDMDBFODA2NDA4MTMyQjgKKzoxMDkyNjAwMDAwMDAzNjBDMkExMTAwRTBENkUwODZCQTE4MDAzNjAwNUQKKzoxMDkyNzAwMENBMDAwMEY4NzMwQTAzRjkxRDAwMzYwQzA0MDEwMDgwQ0YKKzoxMDkyODAwMDAyQTQxN0I4MDAwMDMyMEM5RjAxMDA4MDE4MDA4OEJDQUYKKzoxMDkyOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA0QjEyMzYKKzoxMDkyQTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNjQxMTAwMDAwMDMwQTcKKzoxMDkyQjAwMDAzMDAzOEYyMDgwMDNBMEMyMzE5MDFFODc2MjA4MUI5M0UKKzoxMDkyQzAwMDNFMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAzRTBDODAKKzoxMDkyRDAwMDFEMTgwMEUwMDZDMDg0QjIwMDAwM0UwQzgwMDAwMDgwMzMKKzoxMDkyRTAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyNTYKKzoxMDkyRjAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA1NDEwMkMKKzoxMDkzMDAwMDAwMDAwMDJDRjkwMTAwRjQwMDAwNDMwQzA0MDAwMDgwNzAKKzoxMDkzMTAwMDAyMDA4OEJDMDAwMDQyMEMxMjAxMDAwMDA5QzAyMUIyMEEKKzoxMDkzMjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzMzgKKzoxMDkzMzAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwMTYxMzA0MDEwMDgwODUKKzoxMDkzNDAwMDAyODA4MEJDMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwNjQKKzoxMDkzNTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzQTkKKzoxMDkzNjAwMDA2MDEwMDgwOTJCQTk3QkMwMDAwRjYwMzEyMDEwMDY4NjMKKzoxMDkzNzAwMDAyQzU4NUIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQjYKKzoxMDkzODAwMDAwMDAwMDAwMDAzMDAwNzgxOTIwNkUzQzAwMDAxNjEzMjkKKzoxMDkzOTAwMDA0MDEwMDgwRTJBNTgyQkMwMDAwMTYxMzgwMDAwMDgwNUEKKzoxMDkzQTAwMEEyODAyRkI2MDAwMDE2MTMwNDAxMDA4MDAyMDA4OEJDQzIKKzoxMDkzQjAwMDAwMDAxNjEzMDQwMTAwODAwMjgwODBCQzAwMDAxNjEzMTgKKzoxMDkzQzAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMEMwMDEwMTM4QTIKKzoxMDkzRDAwMDA4QzA2RTMyMDAwMDUzMEMwNDAyMDFFQzE2QzA2RUJDRDMKKzoxMDkzRTAwMDAwQzAxNjEzMTIwMDAwNDBBMjhEMzlCMjAwMDA1NDBDQzgKKzoxMDkzRjAwMEM5MDEwMDE0MDgwMDAwOTIwMDAwMDAwMDQ1MzAwMEUwQTAKKzoxMDk0MDAwMDA2MDAwMDMyMDAwMDYwMEMyODAwMDAwOEU4MDEwMEI0RUIKKzoxMDk0MTAwMDAwMDA1RDBDODAwMTAwODBGMkMxODVCNjAwMDA1OTBDOEYKKzoxMDk0MjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwNUQwQzFEMDEwMEY4M0QKKzoxMDk0MzAwMDIyODEyRkI0MDAwMDVEMEMwMDAwMDBGODYyODEyRjk1OUUKKzoxMDk0NDAwMDAwMDA1QjBDMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwNjUKKzoxMDk0NTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMEIKKzoxMDk0NjAwMDAyNDA2ODMyMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwQTUKKzoxMDk0NzAwMDAwMDA1RjBDODAwMDAwODA0MjgxMkZCNjAwMDBCNDBGMTYKKzoxMDk0ODAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwRDUwRkRBNUIwMUVDNjQKKzoxMDk0OTAwMDA2NDBFREYyMDAyMDAwODBERjAwMDAyODA5MDAzNzMyOEUKKzoxMDk0QTAwMDAwMDA2NjEyREUwMDAwRDgwMjgwMDFGMjA4MDA0QjEyQjQKKzoxMDk0QjAwMDAwMTgwMUU4NzYyMDgxRjkwMDAwNjQxMTAwMDAwMDMwRjYKKzoxMDk0QzAwMDAzMDAzOEYyMDAwMDY2MEM4MDAxMDA4MDMyODAyRkI2NjUKKzoxMDk0RDAwMDNFMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA2QjBDNDEKKzoxMDk0RTAwMDI5MDgwMUU0MDZDMDJEQjIwMDAwNzAwQzFEMDAwMDgwQTgKKzoxMDk0RjAwMDAyMDAwMEIwMDAwMDcwMEM4MDAwMDA4MDAyODEyRkI2RDYKKzoxMDk1MDAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA3MDBDMUYKKzoxMDk1MTAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwNkQwQzEyMDEwMDAwODEKKzoxMDk1MjAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RTAKKzoxMDk1MzAwMDFEMDA2RjBDMDQwMTAwODAwMkE0MTdCODAwMDA2QzBDMjEKKzoxMDk1NDAwMDAwMDAwMDE0MTg0MDgxOUMyQjAwMTYxMzEyMDAwMDJDMDAKKzoxMDk1NTAwMDgyQ0QyRUIyMDAwMDU1MTAwMDAwMDAyQ0Y5MDEwMEY0NUQKKzoxMDk1NjAwMDAwMDA3MzBDMDQwMTAwODAwMjQwODFCQzE4MDAzNjAwMkEKKzoxMDk1NzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTYxMzEyMDAwMDQ4RjcKKzoxMDk1ODAwMDAyQzA4MEIyMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwRUMKKzoxMDk1OTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzNjcKKzoxMDk1QTAwMDA2MDEwMDgwOTJCQTk3QkMwMDAwRjYwMzEyMDEwMDY4MjEKKzoxMDk1QjAwMDAyQzU4NUIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNzQKKzoxMDk1QzAwMDAwMDAxNjEzODAwMDAwODA4MjgwMkZCNjAwMDAxNjEzNjIKKzoxMDk1RDAwMDA0MzEwMDgwODI5QjgyQkMwMDAwMTYxMzAyMDAwMDgwRDAKKzoxMDk1RTAwMDEyQTA4MkJDMDAwMDE2MTMwNDAwMDA4MDAyODA4MkJDMUUKKzoxMDk1RjAwMDI1MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyMjMKKzoxMDk2MDAwMDAwMDAwMDE0QTk2MDgwRDkwMDAwMDAwMDAwMDAwMEQ4MEMKKzoxMDk2MTAwMDAyODAwMTMyMDBDMDg0MEMxODAxMDAwQ0E4Q0QzRUIyQkIKKzoxMDk2MjAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDAzODEyNTgKKzoxMDk2MzAwMDAwMDAwMDVDMUZDMEY1RkEwMDAwRjMwMzAwMDAwMDgwOEEKKzoxMDk2NDAwMDAyMDAwMDkwMDBDMDAwMDAwMDAwMDBGOEEyOEQyRjMxNDEKKzoxMDk2NTAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwRkUKKzoxMDk2NjAwMDAwMDAwMDAwMDc4MDgxMzIwMDAwMDAwMDAwMDgwMDAwQjgKKzoxMDk2NzAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3QzA4NjMyQTIKKzoxMDk2ODAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDAxNjEzMUMKKzoxMDk2OTAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwOTAwQzgwMDAwMDgwMkQKKzoxMDk2QTAwMDgyODAyRkI2MDAwMDAwMDAwMDAwMDA2OEE4NjA4MDNDQTcKKzoxMDk2QjAwMDAwMDAwMDAwMDAwMDAwM0MwODQwODAzMjAwMDBENDBGOTEKKzoxMDk2QzAwMDAwMDAwMDA0MDg4MDgyRjIwMDAwOTEwQzEyMDEwMDAwRUEKKzoxMDk2RDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MkYKKzoxMDk2RTAwMDFEMDA5NDBDMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzOUIKKzoxMDk2RjAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwOTAwQzAwMDAwMEY4Q0UKKzoxMDk3MDAwMEEyODAyRjk1MDAwMDAwMDAwMDAwMDAwMDY4MjA4MDNBMzEKKzoxMDk3MTAwMDAwMDA5QTBDMDQwMDAwMjg2OEEwODJCQzAwMDAxNjEzMDgKKzoxMDk3MjAwMDBDMDAwMDgwMDIwMDAwQjAwMDAwMTYxMzgwMDAwMDgwRDIKKzoxMDk3MzAwMEUyODAyRkI2MDAwMDNFMTAwMDAwMDA4MDAyMDAwMEYwMjIKKzoxMDk3NDAwMDAwMDA4NjBDMDAwMDAwRDgwMjAwMDA5MjAwMDAxNjEzRjIKKzoxMDk3NTAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwMDAwMDAwMDAwMEQ4MkEKKzoxMDk3NjAwMDAyODAwMTMyMDAyMDAwODAwMDAwMDAyODA5MDAzNzMyMEEKKzoxMDk3NzAwMDAwMDA2MjEyMDAwMDAwMDhFODAxMDBGNDE4MDAzNjAwNDIKKzoxMDk3ODAwMENBMDAwMEY4NzMwQTAzRjkwMDAwQTUwQzA0MDIwMUVDRkEKKzoxMDk3OTAwMDE2QzA2RUJDMDAwMDAwMDBDMDAxMDBGODkyODAyRjM0OUIKKzoxMDk3QTAwMDAwQzBBMzBDMTIwMTAwNDBBMjhEMzlCMjAwMDAxNjEzQjQKKzoxMDk3QjAwMDAwMDAwMDgwMDIwMDAwOTAyQjAwQTUwQzEyMDEwMDJDN0MKKzoxMDk3QzAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkYKKzoxMDk3RDAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDBBODBDNUEKKzoxMDk3RTAwMDgwMDEwMDgwODI4MTJGQjYwMDAwMTYxMzA0MzEwMTgwQjEKKzoxMDk3RjAwMDAyMDA2RUJDMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQjAKKzoxMDk4MDAwMDAwMDBBQjBDMTIwMTAwNjAwODQwMjNCMjAwODJCNDBDQ0YKKzoxMDk4MTAwMDAwMDAwMDA4QTg4RDgwOTIwMDAwMTYxMzEyMDAwMDI0OUEKKzoxMDk4MjAwMDA4MDAyM0IyMDAwMDE2MTMxMjAwMDAyMDA4QzAyM0IyNjMKKzoxMDk4MzAwMDAwMDAxNjEzMTIwMDAwMTgwODgwMjNCMjAwQzBDOTBDRTMKKzoxMDk4NDAwMDE4MDEwMDBDQThDRDNFQjIwMDAwQUUwQzEyMDAwMDM4OEEKKzoxMDk4NTAwMDAyODA4MUIyMDAwMDE2MTMxMjAwMDAzQzAyMDA4MkIyQTYKKzoxMDk4NjAwMDAwMDAxNjEzMTIwMDAwMzAwMjQwODJCMjAwMDAxNjEzRUUKKzoxMDk4NzAwMDEyMDAwMDM0MDIwMDg2QjIyMDgwMDAwMDAwMDAwMDA4QzAKKzoxMDk4ODAwMEE4OEQ4MDMyMDAwMEJDMEM4MDAxMDA4MEYyQzE4NUI2M0EKKzoxMDk4OTAwMDAwMDBCODBDMUY0MDAyODRFNjAxMDBCNDAwMDBCQzBDQkMKKzoxMDk4QTAwMDFEMDEwMEY4MjI4MTJGQjQwMDAwQkMwQzAwMDAwMEY4NUMKKzoxMDk4QjAwMDYyODEyRjk1MDAwMEJBMEMxRDAxMDA4MDAyMDAwMEIwRUIKKzoxMDk4QzAwMDAwMDAwMDAwMDAwMDAwRjg2MjgxMkYzNTAwMDAwMDAwNTkKKzoxMDk4RDAwMDAwNDAwMjgwMDI0MDY4MzIwMDAwMTYxMzFGMDEwMDgwMjEKKzoxMDk4RTAwMDAyMDAwMEIwMzIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTMKKzoxMDk4RjAwMDAwMDA4MDEyMDAwMDAwMTQwOTAwODBEMjAwMDAxNjEzM0UKKzoxMDk5MDAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwMDAwMDAwMDAwMDc4NjkKKzoxMDk5MTAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDODkKKzoxMDk5MjAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDBDNDBDMTgKKzoxMDk5MzAwMDM0MDAwMDVDMUZDMEY1QkEwMDAwQjQwRjAwMDAwMDgwQzYKKzoxMDk5NDAwMDAyMDAwMEYwMDAwMEM2MEM4MDAwMDA4MDkyODAyRkI2NUMKKzoxMDk5NTAwMDAwMDA3RjA4MDAzMDAwRTAwNjAwMDA5MjAwMDA3RjA4NTEKKzoxMDk5NjAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMDAwMDAwMDAwMEY4NTcKKzoxMDk5NzAwMDczMEEwMzM5N0YwODM2MDAwMDAwMDBDMDAyMDAzNjkyRTcKKzoxMDk5ODAwMDAwMDAwMDAwNDUwMDAwRDgwMjQwMDAzMjAwMDAwMDAwNDYKKzoxMDk5OTAwMDQxMDAwMDAwMDc4MDg2MzIwMDAwMDAwMDAwMDgwMDAwM0YKKzoxMDk5QTAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3NDA4MjMyRjMKKzoxMDk5QjAwMDAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjAwMDAxNjEzQTcKKzoxMDk5QzAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDc4MUUKKzoxMDk5RDAwMDM4ODA4NzM1MDAwMDE2MTM4MDAwMDA4MDcyODA4N0I2QkIKKzoxMDk5RTAwMDAwMDAwMDAwMDBBMDAxRTAxNjIwNkUzQTAwMDAwMDAwMTgKKzoxMDk5RjAwMDAwMDAwMDc4MDlDNTg1MzAwMDAwMDAwMDAwQTgwMUUwRTMKKzoxMDlBMDAwMDE2MjA2RTNDMDgwMDAwMDBEMjAxMDA3OEU5RTU4MzM5OTkKKzoxMDlBMTAwMDE4MDAxNjEzMUY0MTAyODRFNkExOTdCOTAwMDBEOTBDNjMKKzoxMDlBMjAwMDM2NTEwMUU4MTZFMDgzQkMwMDAwRDkwQzFEMDEwMDgwMEUKKzoxMDlBMzAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1MzUKKzoxMDlBNDAwMDAwMDAxNjEzOUYyMDAxRTAwNjQwODBCMjAwMDBEQzBDRUQKKzoxMDlBNTAwMDgwMDEwMDgwODI4MTJGQjYwMDAwMDAwMDAwMzAwMUUwMEMKKzoxMDlBNjAwMDA2NDA4MDMyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyNzEKKzoxMDlBNzAwMDAwMDBERjBDMzQxODAwMDAwNzgwODFCMjAwMDBCNDBGMzIKKzoxMDlBODAwMDAwMDAwMDgwMDIwMDAwRjAxMDAwNEIxMjAwMzAwMDAwQzcKKzoxMDlBOTAwMDE3RTAyQ0Y5MDAxMDAwODAwMDM4MDAwMDA3MDAzNzMyNzIKKzoxMDlBQTAwMDAwMDA2NDExMDAwMDAwMzAwMzAwMzhGMjAwMDBFNDBDRjQKKzoxMDlBQjAwMDgwMDEwMDgwMzI4MDJGQjYzRTAwMTYxMzEyMDAwMDJDNjkKKzoxMDlBQzAwMDgyQ0QyRUIyMDAwMEU5MEMyOTIxMDAwMDA3MDA4MkIyRUQKKzoxMDlBRDAwMDAwMDBFNzBDMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwOTYKKzoxMDlBRTAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwRUYwQzA0MDEwMDgwNjgKKzoxMDlBRjAwMDAyQTQxN0I4MDAwMEU1MEMwMDAwMDAxNDA4MDAwMDkyNTIKKzoxMDlCMDAwMDAwMDBFQzBDMUQzMTAwRTAwNjAwMDBCMjAwMDBFRjBDN0MKKzoxMDlCMTAwMDgwMDEwMDgwNjI4MTJGQjYwMDAwMTYxMzAwMDAwMDgwRDMKKzoxMDlCMjAwMDAyMDAwMDkwMDAwMEVGMEM4MDAwMDA4MDAyODEyRkI2NDAKKzoxMDlCMzAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwNjUKKzoxMDlCNDAwMDAwMDAwMEY4MDI4MTJGMzQwMDAwNUQxMjAwMDAwMDJDOUMKKzoxMDlCNTAwMEY5MDEwMEY0MDAwMDU0MTAwMDAwMDBGOEEyODAyRkY0NzYKKzoxMDlCNjAwMDAwMDBGNDBDMDQwMDAwODAwMjQwODFCQzAwMDBGNDBDRjIKKzoxMDlCNzAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4MEYKKzoxMDlCODAwMDczMEEwM0Y5MDAwMEY2MDMxMjAxMDA0ODAyQzA4MEIyMTQKKzoxMDlCOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGRTBDODAKKzoxMDlCQTAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwRkEwQzFGNDAwMjg0REIKKzoxMDlCQjAwMEU2MDEwMEI0MDAwMEZFMEMxRDAxMDBGODIyODEyRkI0NjQKKzoxMDlCQzAwMDAwMDBGRTBDMDAwMDAwRjg2MjgxMkY5NTAwMDBGQzBDRTQKKzoxMDlCRDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4M0QKKzoxMDlCRTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyOTAKKzoxMDlCRjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAwMDBEREQKKzoxMDlDMDAwMDA0MDAwMDgwMDI0MDg2QkMwMDAwQUIxMjAwOTAwMTA4RjYKKzoxMDlDMTAwMDA5MDA2RUYyMDAwMERGMTIwMDAwMDA4MDAyMDAwMEYwNzgKKzoxMDlDMjAwMDAwMDAwNzBEMzMwMTAwRDgwMjgwMDFCMjAwMDAwNzBEQ0IKKzoxMDlDMzAwMDgwMDEwMDgwQjIwMTcyQjYwMDAwMDcwRDlGRjAwMTgwMjQKKzoxMDlDNDAwMDgyREI4N0JDMDAwMDA3MEQ5RkY4MDE4MDIyMjE2RUJDREIKKzoxMDlDNTAwMDAwMDAwMDAwMDBFODAxRTAwNjAwRUUzMjAwMDAwMDAwMTUKKzoxMDlDNjAwMDAwRjAwMUUwMDZDMDg3MzIwODAwMDAwMDAwMTgwMUU4OUIKKzoxMDlDNzAwMDc2MjA4MTM5MDAwMDBEMEQ4MDAxMDA4MEQyODAyRkI2NDIKKzoxMDlDODAwMDAwMDAwRDBEMDRCMDAwODAwMjAwNkVCQzAwMDAwMDAwNUEKKzoxMDlDOTAwMENEMDAwMEY4NzI4MTJGMzQzRDAwMEQwRDEyMDEwMDJDMTMKKzoxMDlDQTAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDlDQjAwMDAwMDAxQzBEMjcwOTAxRTQwNkMwMkRCMjAwQzAxNDBERTAKKzoxMDlDQzAwMDE4MDEwMDBDQThDRDNFQjIwMDAwMDAwMDAwMDAwMDc4OTIKKzoxMDlDRDAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDQzYKKzoxMDlDRTAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAxNjEzRkMKKzoxMDlDRjAwMDEyMDAwMDY4MDJDNTg1QjAyMDgwN0YwODAwMDAwMDA4QkYKKzoxMDlEMDAwMDA4ODAzNjkyMkMwMDAwMDAwMDAwMDAxMDA5MDAzNjMyNTYKKzoxMDlEMTAwMDAwMDA4MDEyMDA5ODAxMTQwOTAwNkVEMjAwMDAwMDAwQkIKKzoxMDlEMjAwMDAwNDAwMUUwMDY0MDg4MzIwMDAwMDAwMEQ1MDgwMDAwMzUKKzoxMDlEMzAwMDA3NDA4ODMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyQ0QKKzoxMDlENDAwMDAwNDAwMDgwQ0EzOTAwMDAwNzAwMzczMjAwMDAxNjEzQjcKKzoxMDlENTAwMDEyMDAwMDQ4MDJDMDgwQjIwMDYwMDAwMDAwMDAwMDA4NEQKKzoxMDlENjAwMDA4ODAzNjMyMDAwMDIwMEQxRDAwMDA4MDAyMDAwMEIwODcKKzoxMDlENzAwMDAwMDAyMDBEODAwMDAwODAwMjgxMkZCNjJBMDAxNjEzRkIKKzoxMDlEODAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4NkUKKzoxMDlEOTAwMDAyODEyRjM0MDAwMDU1MTAwMDAwMDAyQ0Y5MDEwMEY0NUUKKzoxMDlEQTAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAxNjEzOEYKKzoxMDlEQjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwRTEKKzoxMDlEQzAwMDkyQkE5N0JDMDAwMEY2MDMxMjAxMDA2ODAyQzU4NUIwODQKKzoxMDlERDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNDgKKzoxMDlERTAwMDU0NTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4OTQKKzoxMDlERjAwMDAyODAwMTMyMDBDMDJDMEQxODAxMDAwQ0E4Q0QzRUIyMkIKKzoxMDlFMDAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDBGMzAzQzQKKzoxMDlFMTAwMDEyMDEwMDJDNzJFMDJFQjIwMDAwMTYxMzAwMDAwMDgwMjgKKzoxMDlFMjAwMDAyMDAwMDkwMDAwMDE2MTM4MDAxMDA4MDgyODEyRkI2OEUKKzoxMDlFMzAwMDAwMDA4QzEyMDAyMDAwMTgwODAwNkVGMjAwMDAxNjEzQkIKKzoxMDlFNDAwMDFGMzAwMDI4MDgwMDZFQjIwMDAwMDAwMDAwMDAwMEE0Q0YKKzoxMDlFNTAwMDA4ODA4MjMyMDAwMDAwMDAwMDEwMDA2QzA4MDA2RTMyQTIKKzoxMDlFNjAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDAxNjEzQkQKKzoxMDlFNzAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMzIxMDAwMDAwMDgwNTEKKzoxMDlFODAwMDAyMDAwMEYwMDAwMDM2MEQwMDUwMDEzQ0E4NUI4MDlDRjEKKzoxMDlFOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwODcKKzoxMDlFQTAwMDAwNTAwMTAwQTgxQjgwM0EwMDAwMDAwMDAwMDAwMDgwNjQKKzoxMDlFQjAwMDA4MDAwMDMyMDAwMDAwMDA1MTAwMDBEODAyMDAwMDMyMEIKKzoxMDlFQzAwMDAwMDAwMDAwNEQwMDAwMDA2N0UwODMzRTAwMDAwMDAwM0QKKzoxMDlFRDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwQjEKKzoxMDlFRTAwMDA3QzA4NjMyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyNUUKKzoxMDlFRjAwMDAwMDA2RDBEMDQwMDAwMjhEOEEwODJCQzAwMDAxNjEzREQKKzoxMDlGMDAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDE4RkQKKzoxMDlGMTAwMEQ4QTA4MTNDMDAwMDU0MEQwNDAwMDAzQ0Q4RTA4M0JDNzQKKzoxMDlGMjAwMDAwMDAxNjEzMDQwMTAwODAwMjgwODFCQzAwMDA0NTBENzIKKzoxMDlGMzAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMTYxMzEyMDAwMDUwMzcKKzoxMDlGNDAwMDAyQzAzOEIyMDAwMDREMEQ1MTAwMDBEODEyODAyRDlBODkKKzoxMDlGNTAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDE4MDAzNjAwODkKKzoxMDlGNjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNEIwRDA0MDAwMDgwQTQKKzoxMDlGNzAwMDcyODAyREJDMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2RDUKKzoxMDlGODAwMDAwMDA0NjBENjcwMDAwRjhBMjgwMkZCNTAwMDAxNjEzRjAKKzoxMDlGOTAwMDEyMDAwMEU4MDJDMDIxQjIwMDAwMTYxMzA0MDEwMDgwODQKKzoxMDlGQTAwMDcyODAyREJDMDAwMDAwMDA1MTAwMDBEODAyMDAwMDMyNzkKKzoxMDlGQjAwMDAwMDA1MjBEMkEwMTAwMDBEODIwODBCQTAwMDA1MTBEODcKKzoxMDlGQzAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4OUMKKzoxMDlGRDAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODAyNDA4NDMyMzgKKzoxMDlGRTAwMDFEMDAxNjEzMDQwMDAwODAwMkE0MTdCODAwMDA0NjEwREMKKzoxMDlGRjAwMDAwNjAwMDZDMDgwMDZFRjIwMDAwM0EwRDREMDAwMDAwOTkKKzoxMEEwMDAwMDY3RTA4MzlFMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0QkUKKzoxMEEwMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDA1QjBERkMKKzoxMEEwMjAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwMTYxMzgwMDEwMDgwMEQKKzoxMEEwMzAwMEEyODAyRkI2MDAwMDU1MEQ2NzAwMDBGOEEyODAyRkI1NTIKKzoxMEEwNDAwMDAwMDAxNjEzMTIwMDAwMDAwOUMwMjFCMjFEMDAxNjEzRjMKKzoxMEEwNTAwMDA0MDEwMDgwMDJBNDE3QjgwODAwMDAwMDAwNDAwMjc4NDQKKzoxMEEwNjAwMDM5OUFGRTM4MDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDQUMKKzoxMEEwNzAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzA4MDAxNjEzNjAKKzoxMEEwODAwMDEyNDAwMjY4MTI5QUZFQjgwMDAwMTYxMzBCMDAwMDgwRkUKKzoxMEEwOTAwMDAyMDAwMEIwMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyM0MKKzoxMEEwQTAwMDAwMDAxNjEzMUYwMDAwNkNEOEUwODZCQTAwMDAzMjEwQzIKKzoxMEEwQjAwMDUxMDAwMEQ4MDIwMDAwRjIwMDAwNjUwRDAwMDAwMDNDRDUKKzoxMEEwQzAwMDA4NDA4MDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRkIKKzoxMEEwRDAwMDAwMDAzOTBEMDQwMTAwODAwMjgwODFCQzAwMDA2QjBEN0UKKzoxMEEwRTAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNkEwRDEyMDEwMDAwREUKKzoxMEEwRjAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDUKKzoxMEExMDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjFEMDAxNjEzMzkKKzoxMEExMTAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwNDYxMDAwNjAwMDZDMjQKKzoxMEExMjAwMDA4MDA2RUYyMDAwMDNBMEQ0RDAwMDAwMDY3RTA4MzlFQ0IKKzoxMEExMzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAwMDAwRUYKKzoxMEExNDAwMEMwMDEwMTM4MDhDMDZFMzIwMDAwMDAwMDQ1MzAwMEUwNTgKKzoxMEExNTAwMDA2MDAwMDMyMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0OUQKKzoxMEExNjAwMDAwMDA3NTBEMDQwMjAxRUMxNkMwNkVCQzAwMDAwMDAwN0EKKzoxMEExNzAwMEM5MDEwMDE0MTg0MDgxM0EwMEMwNzUwRDEyMDEwMDQwNTkKKzoxMEExODAwMEEyOEQzOUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwN0EKKzoxMEExOTAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwNzgKKzoxMEExQTAwMDAwQTgwMTIwOTkyMjZFM0EwMDAwMTYxMzA2MDEwMjgwRDEKKzoxMEExQjAwMDgyMUI5MkJDMDAwMDE2MTM5RjIwMDFFMDk2MjI2RUJDMDkKKzoxMEExQzAwMDAwMDA3QjBEODAwMDAwODBGMjgwMkZCNjAwMDBDNzBGREEKKzoxMEExRDAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwN0YwRDA0MDAwMDNDNDEKKzoxMEExRTAwMEQ4RTA4M0JDMDAwMDdFMEQ5RjMxMDFFMDk2MjI2RUJDNUEKKzoxMEExRjAwMDAwMDAwMDAwMDAzMDAxRTAwNjAwMDAzMjAwMDA4NjBEODMKKzoxMEEyMDAwMDAwNTAwMUU4RjY2MDgwOUMwODAwMDAwMDAwNDAwMjc4RTEKKzoxMEEyMTAwMDM5OUFGRTM4MDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDRkEKKzoxMEEyMjAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzA4MDAwMDAwRDcKKzoxMEEyMzAwMDAwNDAwMjY4MTI5QUZFMzgwMDAwODUwRDlGMzEwMUUwNEYKKzoxMEEyNDAwMDk2MjI2RUJDMDAwMDAwMDAwMDMwMDFFMDA2MDAwMDMyRTMKKzoxMEEyNTAwMDAwMDAwMDAwMDA1MDAxRTgwNjAwMDAzMjAwMDAwMDAwOEQKKzoxMEEyNjAwMDAwQTgwMUUwMDYwMDkyMzIxODAwMzYwMDAwMDAwMEY4NTUKKzoxMEEyNzAwMDczMEEwM0Y5MUQwMDhCMEQwNDAwMDA4MDAyQTQxN0I4QjcKKzoxMEEyODAwMDAwMDA4NzBEMDQwMDAwMTQxODQwODFCQzAwMDAxNjEzNjQKKzoxMEEyOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwMDAwMDgwODMKKzoxMEEyQTAwMDcyODAyRkI2MDAwMDAwMDAwMDAwMDBEODAyODAwMTMyNEEKKzoxMEEyQjAwMDAwMjAwMDgwMDAwMDAwMjgwOTAwMzczMjAwMDA2NjEyRUMKKzoxMEEyQzAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwMTYxMzEyMDAwMDQ4MjYKKzoxMEEyRDAwMDAyQzA4MEIyMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyQjgKKzoxMEEyRTAwMDAwMDA5MzBEMjMwMTAwMTQxODQwODFCQTNFMDAxNjEzOUMKKzoxMEEyRjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMTYxMzgwMDEwMDgwQzcKKzoxMEEzMDAwMEEyODAyRkI2MTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5QkQKKzoxMEEzMTAwMDFEMDAxNjEzMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzRDUKKzoxMEEzMjAwMDlGMDAwMDE0MTg0MDgxQkMwMDAwOTQwRDBCMDEwMDgwQjgKKzoxMEEzMzAwMDAyMDAwMEIwMDAwMDRCMTIwMDAwMDA4MDAyMDAwMEYwOUMKKzoxMEEzNDAwMDAwMDA5QzBEMjkzMTAxMEMwOTAwNkVCMjJCMDA3RDA4MjQKKzoxMEEzNTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwRTYKKzoxMEEzNjAwMDAyMDAwMDkwMDAwMEJFMEYwMDBDMDIwMDA5ODA2RUYyOTcKKzoxMEEzNzAwMDAwMDBBNTBEMDAwMDAwODAwMjAwMDA5MDAwMDA1RDEyQUEKKzoxMEEzODAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwMDAwMDAwMDAwMDFDM0YKKzoxMEEzOTAwMDA4MDA5MDMyMDAwMEE0MEQwNDAwMDAyODA5ODA4MEIyNUIKKzoxMEEzQTAwMDAwMDA4MTExMDAwMDAwRDgwMjAwMDBEMjAwMDBBNDBEQkUKKzoxMEEzQjAwMDA0MDAwMDgwMDI4MDkyQkMxODAwMzYwMDAwMDAwMEY4MDMKKzoxMEEzQzAwMDczMEEwM0Y5MDAwMDY4MDYwMDAwMDAwODA4MDAwMDkyMDQKKzoxMEEzRDAwMDAwMDBBODBEMUQwMTAwODAwMjAwMDBCMDAwMDA3RDA4RjMKKzoxMEEzRTAwMDgwMDEwMDgwNjI4MTJGQjYwMDAwMTYxMzAwMDAwMDgwRkIKKzoxMEEzRjAwMDAyMDAwMDkwMDAwMDdEMDg4MDAwMDA4MDAyODEyRkI2REUKKzoxMEE0MDAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA3RDA4MDcKKzoxMEE0MTAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwMTYxMzgwMDEwMDgwRDQKKzoxMEE0MjAwMDgyODEyRkI2MDAwMDE2MTMwNDAwMDAxODA5NDA4MUIyODMKKzoxMEE0MzAwMDAwMDBFMzBGMDAwMDAwODAwMjAwMDBGMDAwMDBDNzBGRTIKKzoxMEE0NDAwMDAwQTgwMTIwMDkwMDZFRjIwMDAwMDAwMDAwMzAwMTBDOUQKKzoxMEE0NTAwMDA5MDA2RTMyMDAwMEJFMEYwMDBDMDIwMDA5ODA2RUYyOEYKKzoxMEE0NjAwMDAwMDA3RjA4MDAwMDAwODAwMjAwMDA5MDAwMDA0QjEyRjYKKzoxMEE0NzAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNUQxMjAwMDAwMDgwN0IKKzoxMEE0ODAwMDAyMDAwMEYwMDAwMDY4MDYwMDAwMDAxQzA4MDA5MDkyMjYKKzoxMEE0OTAwMDAwMDAwMDAwNTQ1NDAxRkMwMkMwNkUzMjAwMDAxNjEzOEMKKzoxMEE0QTAwMDgwMDEwMDgwODI4MTJGQjYwMDAwMTYxMzFGMDAwMDgwRkIKKzoxMEE0QjAwMDAyMDAwMEIwMTAwMDAwMDAwMDAwMDBBODc4MEIxNjM4NjEKKzoxMEE0QzAwMDA4MDAwMDAwMDAwMDAwQUM3ODBCMTYzODAwMDAwMDAwMDcKKzoxMEE0RDAwMDAwMDAwMEIwQTgwMDJEMzcwMDA0MDEwMDAwMDAwMEIwMEIKKzoxMEE0RTAwMEM4MEQ4QjNBMDAwMDAwMDAwMDUwMDFCNDA4ODA2RTMyQTUKKzoxMEE0RjAwMDAwMDBDNzBEMDQzMTAxOTAwODAwNkVCMjAyMDAwMDAwOTgKKzoxMEE1MDAwMDAwMDAwMEM4ODI4RDhBMzcwMDAwMDAwMDAwMDAwMEM4RUIKKzoxMEE1MTAwMEMyQTIyQzNBMTgwMEM1MEQ4NjQxMDI3ODg4MEQ3OEI2ODMKKzoxMEE1MjAwMDAwMDAxNjEzMDQwMDAwODBBMkUyOEFCQzAwMDAxNjEzOEIKKzoxMEE1MzAwMDA0NDEwMjgwQjIzRjc4QjAwMDAwQkUwRDlGMDEwMEE4MjgKKzoxMEE1NDAwMDE4ODA4QUJDOUYwMEJFMEQwMDAwMDBBODA4MDAzNjkyNEIKKzoxMEE1NTAwMDAwMDAwMDAwMDA0MDAyMDRCODNGNzgzMDAwMDBEQTBEMkYKKzoxMEE1NjAwMDAwMDAwMDA0RDg2MjgwOUMwMDAwMTYxMzAyMEMwMjgwRDgKKzoxMEE1NzAwMEEyMUI4OUJDMDAwMDE2MTM4MDAwMDA4MDgyODAyRkI2QzkKKzoxMEE1ODAwMDAyMDAwMDAwMDAwMDAwQzg4MjhEOEEzNzAwMDAwMDAwMzEKKzoxMEE1OTAwMDAwMDAwMEM4QzJBMjJDM0ExODAwRDAwRDg2NDEwMjc4RjMKKzoxMEE1QTAwMDg4MEQ3OEI2MDAwMDE2MTMwNDAwMDA4MEEyRTI4QUJDNzEKKzoxMEE1QjAwMDAwMDAxNjEzMDQ0MTAyODBCMjNGNzhCMDAwMDBDOTBEQkMKKzoxMEE1QzAwMDlGMDEwMEE4MTg4MDhBQkM5RjAwQzkwRDAwMDAwMEE4NDgKKzoxMEE1RDAwMDA4MDAzNjkyMDAwMEQzMEQyODQwMDIwNEI4M0Y3OEIwM0UKKzoxMEE1RTAwMDAwMDAwMDAwQzgwMTAwMDREODYyODAzQzAwMDAxNjEzN0YKKzoxMEE1RjAwMDlGMDAwMDgwMDI0MDgwQjIwMDAwRDcwRDAyMDEwMDkwNTEKKzoxMEE2MDAwMDE4MjA4OUJDMDAwMDAwMDAwMDAwMDBCNDA4MDAwMDMyREYKKzoxMEE2MTAwMDAwMDBDOTBEOUYwMTAwQTgxODgwOEFCQzlGMDBDOTBEQzkKKzoxMEE2MjAwMDAwMDAwMEE4MDgwMDM2OTIwMDAwREEwRDA0MDAwMDkwMzcKKzoxMEE2MzAwMDE4MjA4OUJBMDAwMDE2MTM5RjAwMDAwNDQ4NjI4MEJDRUQKKzoxMEE2NDAwMDAwMDAxNjEzOTAwMDAwQjQ0ODYyOEJCQTAzMDAxNjEzODIKKzoxMEE2NTAwMDA0NDAwMjAwMDgxRUZGQjgwMDAwRTIwRDAwMDAwMDAwRTgKKzoxMEE2NjAwMEQ4MjI4MDlBMDAwMDA5MEUwNDAwMDA4MEEyRTI4QUJDNzEKKzoxMEE2NzAwMDAyMDAwMDAwMDAwMDAwQzg4MjhEOEEzNzAwMDAwMDAwNDAKKzoxMEE2ODAwMDAwMDAwMEM4QzJBMjJDM0ExODAwMDcwRTg2NDAwMjc4Q0IKKzoxMEE2OTAwMDg4MEQ3OEI2MDAwMDE2MTMwNDQwMDIwNEI4M0Y3OEIwNjUKKzoxMEE2QTAwMDAzMDAxNjEzMDQ0MDAyMDAwODFFRkZCODM4MDAwMDAwMjMKKzoxMEE2QjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NzMKKzoxMEE2QzAwMDA5MDA4MEQyMDAwMEU4MEQxMjAxMDA2MDA4NDAyM0IyQUEKKzoxMEE2RDAwMDAwODIwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDBGMzAzMEEKKzoxMEE2RTAwMDEyMDEwMDJDNzJFMDJFQjIwMDAwMTYxMzAwMDAwMDgwNTAKKzoxMEE2RjAwMDAyMDAwMDkwMDAwMDE2MTMxMjAwMDAyNDA4MDAyM0IyOEMKKzoxMEE3MDAwMDAwMDAxNjEzMTIwMDAwMjAwOEMwMjNCMjAwMDAxNjEzMjgKKzoxMEE3MTAwMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDAwMDAwMEQ4REEKKzoxMEE3MjAwMDAyODAwMTMyMDBDMEYyMEQxODAxMDAwQ0E4Q0QzRUIyMkIKKzoxMEE3MzAwMDAwMDBFQzBEMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzRjgKKzoxMEE3NDAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwMUEKKzoxMEE3NTAwMDAyNDA4MkIyMDAwMDE2MTMxMjAwMDAzNDAyMDA4NkIyREEKKzoxMEE3NjAwMDIwODBFNjBEMDAwMDAwMDgwODgwMzY5MjAwMDAwMDAwRkUKKzoxMEE3NzAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMzgwMjAwOTMKKzoxMEE3ODAwMEI4MUI4MDNBMDAwMDAwMDA2NDMwMDFFMDE2MjA2RTNBRTkKKzoxMEE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwQzAKKzoxMEE3QTAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwRDgKKzoxMEE3QjAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMDA3MDA4NjMyQzcKKzoxMEE3QzAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDAwMDAwMDAwNUYKKzoxMEE3RDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwMTgwMDAwRDQKKzoxMEE3RTAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDA3MDA4MjMyNTQKKzoxMEE3RjAwMDEwMDAwMDAwMDAzMDAwMDAxN0UwMkMzOTAwMDAwMDAwQkQKKzoxMEE4MDAwMDAwMzgwMDAwRjcwMTBCMzQwMDAwMDEwRTgwMDEwMDgwQzkKKzoxMEE4MTAwMDMyODA4N0I2MDAwMDAwMDAwMDM4MDAwMEI3MDE3MDM0QjUKKzoxMEE4MjAwMDAwMDAwMDAwMDAwMDAwMDhFODAxMDAzNDAwMDAxMzBFRTIKKzoxMEE4MzAwMDAyMEMwMjgwQTIxQjg5QkMxODAwMzYwMDAwMDAwMEY4NDAKKzoxMEE4NDAwMDczMEEwM0Y5MDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyQkQKKzoxMEE4NTAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwODBCMjE4MDAzNjAwMzMKKzoxMEE4NjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwREMwRDlGMDEwMEE4NDYKKzoxMEE4NzAwMDE4ODA4QUJDOUYwMERDMEQwMDAwMDBBODA4MDAzNjkyRkEKKzoxMEE4ODAwMDI4MDAwQzBFMDQwMTAwODA4MkNEODFCQzAwMDAwMDAwNzUKKzoxMEE4OTAwMDAwMjAwMTc4MDkwMDZFMzIwMDAwMTYxMzA0MDEwMDgwQzgKKzoxMEE4QTAwMDQyQTI5N0JDMDAwMDBFMEU4MDAxMDA4MDMyODAyRkI2QkQKKzoxMEE4QjAwMDNFMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAxMDBFQTYKKzoxMEE4QzAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwN0QwODAwMDAwMEY4QkIKKzoxMEE4RDAwMDYyODEyRjk1MDAwMDdEMDg4MDAwMDA4MDAyODEyRkI2RTQKKzoxMEE4RTAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA3RDA4MjMKKzoxMEE4RjAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwMDAwMDAwMzgwMDAwRTIKKzoxMEE5MDAwMEM3MDE3MDM0MDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyMDkKKzoxMEE5MTAwMDA4MDAxNzBFMjMxOTAxRTg3NjIwODFCOTNFMDAxNjEzQUUKKzoxMEE5MjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMTkwRTFEMDEwMDgwRjUKKzoxMEE5MzAwMDAyMDAwMEIwMDAwMDFDMEUwMDAwMDBGODYyODEyRjk1OUMKKzoxMEE5NDAwMDAwMDAxQzBFODAwMDAwODAwMjgxMkZCNjJBMDAxNjEzMjIKKzoxMEE5NTAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4OTIKKzoxMEE5NjAwMDAyODEyRjM0MDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2RDEKKzoxMEE5NzAwMDAwMDA1NDEwMDAwMDAwMkNGOTAxMDBGNDAwMDAyMDBFMkIKKzoxMEE5ODAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RjEKKzoxMEE5OTAwMDczMEEwM0Y5MDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyQzcKKzoxMEE5QTAwMDAwMDBGNjAzMDAwMDAwRjhBMjgwMkY5NDAwMDAwMDAwRDEKKzoxMEE5QjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwMzAwMDI4QjIKKzoxMEE5QzAwMDA4MDA2RTMyMDAwMDAwMDA1NDU0MDFGQzAyQzA2RTMyRDgKKzoxMEE5RDAwMDAwQzAyRTBFMTgwMTAwMENBOENEM0VCMjIwODAwMDAwNTEKKzoxMEE5RTAwMDAwMDAwMDI4MDk4MDM2MzIwMDAwODExMTAwMDAwMEQ4RTQKKzoxMEE5RjAwMDAyMDAwMEQyMDAwMDJCMEUwNDAwMDA4MDAyODA5MkJDRjYKKzoxMEFBMDAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTJDMEUzNjAwMEQKKzoxMEFBMTAwMDAwMDAwMEMwMDIwMDM2OTIxODAwMzYwMDAwMDAwMEY4NjYKKzoxMEFBMjAwMDczOEEwM0Y5MDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQTAKKzoxMEFBMzAwMDAwQzAyQjBFMTgwMDAwMENBOENEM0VCMjAwMjAwMDg0RjAKKzoxMEFBNDAwMDAwMDAwMDI4MDkwMDM3MzIwMDAwNjIxMjAwMDAwMDA4RjAKKzoxMEFBNTAwMEU4MDEwMEY0MDAwMDdEMDgwMDAwMDA4MDAyMDAwMDkwODIKKzoxMEFBNjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwNTkKKzoxMEFBNzAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwMzcwRTE4MDEwMDBDQTUKKzoxMEFBODAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyQzkKKzoxMEFBOTAwMDAwMDBFRjAzMTIwMTAwMkM3MkUwMkVCMjAwMDAxNjEzMkEKKzoxMEFBQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjMxMTAwMDAwMDI4NjgKKzoxMEFBQjAwMDA5MDAwMkYyMDAwMDNGMEUwMDAwMDA1QzA4MDAwMDkyNTYKKzoxMEFBQzAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwRjkKKzoxMEFBRDAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwM0YwRTE4MDEwMDBDM0QKKzoxMEFBRTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyNjkKKzoxMEFBRjAwMDAwMDAzODEyMDAwMDAwNUMxRkMwRjVGQTAwMDBGMzAzRUMKKzoxMEFCMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMzAwMDI4REIKKzoxMEFCMTAwMDA4MDA2RTMyMDAyMDAwODQwMDAwMDAyODA5MDAzNzMyNEYKKzoxMEFCMjAwMDAwMDA2MjEyMDAwMDAwMDhFODAxMDBGNDAwMDA0NDBFN0EKKzoxMEFCMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMDA4RkIKKzoxMEFCNDAwMDA4MDAwMDMyMDAwMDRBMEUwNDAwMDA4MDAyQzA4NUIyRjYKKzoxMEFCNTAwMDAwMDA0QTBFODAwMDAwODBGMkMxODVCNjAwMDA0OTBFNTgKKzoxMEFCNjAwMDFDNDEwMjgwMDZDMDg1QjIwMDAwMDAwMDAwMDAwMDY4QTEKKzoxMEFCNzAwMDAyQzU4NTMwMDAwMDAwMDAwMDAwMDA3MDFGMDBGNzNBOTkKKzoxMEFCODAwMDAwMDAwMDAwMDAwMDAwRjgyMjgxMkYzNDAwMDBEMDBFRTkKKzoxMEFCOTAwMDgwMDEwMDgwQTI4MDJGQjYxODAwMDAwMDAwMDAwMEY4OUQKKzoxMEFCQTAwMDczMEEwMzM5RDAwRTM2MDBDQTAwMDBDMDAyMDAzNjkyODQKKzoxMEFCQjAwMDAwMDA5OTBFODAwMTAwODA4MjgxMkZCNjAwMDBBMTBFNTYKKzoxMEFCQzAwMDFGMjAwMTA4MDkwMDZFQjIwMDAwOTkwRTA0MzAwMTA4MzAKKzoxMEFCRDAwMDg5OUI5MEJDMDAwMDU2MEUwNDMxMDE4MDAyMDA2RUJDQkYKKzoxMEFCRTAwMDAwMDAzMjEwMDAwMDAwODAwMjAwMDBGMDAwMDA1NDBFNEYKKzoxMEFCRjAwMDAwNTAwMTQ4MDg4MDZFOTIwMDAwMTYxMzAwMDAwMDgwOEIKKzoxMEFDMDAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDAwNDI4NjE4MDNDNjkKKzoxMEFDMTAwMDAwMDA2QjBFMDAwMDAwMDAyODIxODA5QTAwMDAxNjEzMkYKKzoxMEFDMjAwMDlGMDAwMDgwMDI4MDkwQjIwMDAwMzIxMDAwMzAwMTQ4ODYKKzoxMEFDMzAwMDA4MDA2RUYyMDAwMDVBMEUwMDUwMDEwNEE4NUI4MDlDRDAKKzoxMEFDNDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwQzkKKzoxMEFDNTAwMDAwNTAwMTAwQTgxQjgwM0EwMDAwNjgwRTA3MDAwMDQ4NjEKKzoxMEFDNjAwMDE4QTA4NEJDMDgwMDAwMDAwMDQwMDIwMDE4OUFGRTM4QkEKKzoxMEFDNzAwMDAwMDAxNjEzMDIwMTAwODA4MjNBODBCQzAwMDAxNjEzMDcKKzoxMEFDODAwMDA2MDEwMDgwOTIzQTgwQkMwMDAwMDAwMDAwMDAwMDY4Q0QKKzoxMEFDOTAwMDAyMDA4MDMyMDAwMDMyMTAwMDAwMDA4MDAyMDAwMEYwNEMKKzoxMEFDQTAwMDAwMDA2MzBFMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRjgKKzoxMEFDQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNjgwRTA3MDAwMDQ4QkQKKzoxMEFDQzAwMDE4QTA4NEJDMDgwMDAwMDAwMDQwMDIwMDE4OUFGRTM4NUEKKzoxMEFDRDAwMDAwMDAxNjEzMDIwMTAwODA4MjNBODBCQzAwMDAxNjEzQTcKKzoxMEFDRTAwMDA2MDEwMDgwOTIzQTgwQkMwMDAwNjAwRTAwMDAwMDY4RkYKKzoxMEFDRjAwMDAyMDA4MDkyMDAwMDZCMEUwNDAwMDA0ODE4QTA4NEJBODUKKzoxMEFEMDAwMDAwMDAxNjEzOUYwMDAwMDQyODYxODBCQzAwMDAwMDAwQjIKKzoxMEFEMTAwMDAwMDAwMDAwMjgyMTgwM0EwMDAwMDAwMDAwNTQwMUZDREYKKzoxMEFEMjAwMDAyQzA2RTMyMDAwMDc0MEUxMjAxMDA2MDA4NDAyM0IyQUYKKzoxMEFEMzAwMDAwODIwMDAwRDYwMTAwMDgwODgwMzYzMjAzMDAxNjEzOTYKKzoxMEFENDAwMDA0NDAwMjAwMzgxQUZGQjgwMzAwMDAwMDAwMDAwMDc4MzkKKzoxMEFENTAwMDA5NjA4MDM5MTgwMDAwMDBEMjQxMDI4Q0U2QTE5NzM5QzEKKzoxMEFENjAwMDAwMDAwMDAwMDA1MDAxRTgwNjgwODQzMjI5MDBGMzAzNEYKKzoxMEFENzAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwQkMKKzoxMEFEODAwMDAyMDAwMDkwMDAwMDE2MTMxMjAwMDAyNDA4MDAyM0IyRjUKKzoxMEFEOTAwMDAwMDAxNjEzMTIwMDAwMjAwOEMwMjNCMjAwMDAxNjEzOTIKKzoxMEFEQTAwMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDAwMDAwMEQ4NDQKKzoxMEFEQjAwMDAyODAwMTMyMDBDMDdGMEUxODAxMDAwQ0E4Q0QzRUIyMDcKKzoxMEFEQzAwMDIwODAwMDAwRDYwMTAwMDgwODgwMzYzMjAwMDA3OTBFOEQKKzoxMEFERDAwMDEyMDAwMDM4MDI4MDgxQjIwMDAwMTYxMzEyMDAwMDNDRkQKKzoxMEFERTAwMDAyMDA4MkIyMDAwMDE2MTMxMjAwMDAzMDAyNDA4MkIyNEMKKzoxMEFERjAwMDAwMDA2RTBFMTIwMTAwMzQwMjAwODZCMjAwMDAxNjEzMkQKKzoxMEFFMDAwMDAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMDAwNDAwMjVDOEEKKzoxMEFFMTAwMDE4OUFGRTM4MDAwMDAwMDAwMDAwMDA0ODA4MDAwMDMyQzgKKzoxMEFFMjAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMTYKKzoxMEFFMzAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMDAwMDgwMDAwMTEKKzoxMEFFNDAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3NDA4MjMyM0UKKzoxMEFFNTAwMDAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjAwMDAxNjEzRjIKKzoxMEFFNjAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMEQ2MDEwMEQ4MzIKKzoxMEFFNzAwMDAyODAwMTMyMDAwMDAwMDAwMDE4MDAwMDA3ODA4MTMyQ0IKKzoxMEFFODAwMDAwMDAwMDAwMDAyMDAwMDAwNzAwODIzMjEwMDAwMDAwRDcKKzoxMEFFOTAwMDAwMzAwMDAwMTdFMDJDMzkwMDAwOEUwRTgwMDAwMDgwOEEKKzoxMEFFQTAwMDMyODA4N0I2MDAxMDAwODAwMDM4MDAwMDA3MDAzNzMyN0IKKzoxMEFFQjAwMDAwMDA4RjBFMDAwMDAwODAwMjAwMDA5MDAwMTAwMDg4NEIKKzoxMEFFQzAwMDAwMzgwMDAwMDcwMDM3MzIxODAwMzYwMDAwMDAwMEY4OTQKKzoxMEFFRDAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDA2ODAyQzA4NTMyMTgKKzoxMEFFRTAwMDAwMDAxNjEzMDIwMTAwODA4MkZBODVCQzAwMDAxNjEzRDAKKzoxMEFFRjAwMDA2MDEwMDgwOTJGQTg1QkMwMDAwMDAwMDAwMDAwMDA4RjYKKzoxMEFGMDAwMEU4MDEwMDM0MDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyQUQKKzoxMEFGMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAzMjEwMzAKKzoxMEFGMjAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNkIwRTAwMDAwMDgwQjYKKzoxMEFGMzAwMDAyMDAwMDkwMDAwMEExMEUwMDAwMDA4MDAyMDAwMDkwQkUKKzoxMEFGNDAwMDAwMDAzMjEwMDAwMDAwODAwMjAwMDBGMDAwMDA5QzBFQTMKKzoxMEFGNTAwMDAwMzgwMjAwQjgxQjgwOUMwMDAwQTEwRTAwMDAwMDgwOTkKKzoxMEFGNjAwMDAyMDAwMDkwMDUwMDAwMDAwMDAwMDA2ODAyQTBGRTM4MEEKKzoxMEFGNzAwMDA1MDAwMDAwMDAwMDAwNzgwOUEwRkUzODAwMDAxNjEzNEMKKzoxMEFGODAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwRkYKKzoxMEFGOTAwMDkyQkE5N0JDMDAwMDk5MEUwMDQwMDI4MDAyNDA2ODkyNkQKKzoxMEFGQTAwMDAwMDAwMDAwQ0EwMTAwRDgwMjAwMDAzMjAwMDBBNTBFMTcKKzoxMEFGQjAwMDA0QjgwMTgwMDIwMDZFQkMwMDAwMTYxMzlGQjgwMTc4MkYKKzoxMEFGQzAwMDg5MUJFRUJDMDAwMDAwMDAwMEI4MDFFMDg2MUJFRTNDQ0YKKzoxMEFGRDAwMDRDMDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwQjYKKzoxMEFGRTAwMDAwMDAwMDc4QTkwMDJEMzdCNDA0MDEwMDAwMDgwMDAwMUIKKzoxMEFGRjAwMEM3OEQ5NzNBMDAwMDAwMDAwMDAwMDA3ODk5QzAyQzM3RjgKKzoxMEIwMDAwMEI0MDAwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAxNjEzMDQKKzoxMEIwMTAwMDAyMTAwMDAwODdCRjk3QkEwMDAwMDAwMDAwMTgwMDAwNkYKKzoxMEIwMjAwMDA3NDBGRTMyMDAwMDE2MTMxMjAwMDA0OEYyQzEzOEI0ODcKKzoxMEIwMzAwMDAwMDBBRDBFQjYwMDAwODAwMjAwMDBCMDAwMjAxNjEzMjQKKzoxMEIwNDAwMDEyMDAwMDY0QTJDRDJDQjIwMDAwMDAwMEE2MDAwMDgwMTcKKzoxMEIwNTAwMDAyMDAwMDMwMDAwMEIyMEU4MDAxMDA4MEEyODAyRkI2RjYKKzoxMEIwNjAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTAwMDA3RDA4RDIKKzoxMEIwNzAwMDAwNTQwMUZDMDJDMDZFOTIwMDAwMTYxMzgwMDEwMDgwOTMKKzoxMEIwODAwMDYyODEyRkI2MDAwMDE2MTM4MDAxMDA4MDgyODEyRkI2RTYKKzoxMEIwOTAwMDAwMDAxNjEzMUYwMDAwODAwMjAwMDBCMDAwMDAwMDAwMzYKKzoxMEIwQTAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwQkIwRTEyMDEwMDYwQjEKKzoxMEIwQjAwMDA4NDAyM0IyMDA4MjAwMDAwMDAwMDAwODA4ODAzNjMyRjkKKzoxMEIwQzAwMDI5MDBGMzAzMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzQ0EKKzoxMEIwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzEyMDAwMDI0RkYKKzoxMEIwRTAwMDA4MDAyM0IyMDAwMDE2MTMxMjAwMDAyMDA4QzAyM0IyOEIKKzoxMEIwRjAwMDAwMDAxNjEzMTIwMDAwMTgwODgwMjNCMjAwMDAwMDAwQTAKKzoxMEIxMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwQzYwRTE4MDEwMDBDRjkKKzoxMEIxMTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMzIKKzoxMEIxMjAwMDAwMDBDMDBFMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzMjkKKzoxMEIxMzAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwMjAKKzoxMEIxNDAwMDAyNDA4MkIyMDAwMEI5MEUxMjAxMDAzNDAyMDA4NkIyNDEKKzoxMEIxNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAzMjEwNzIKKzoxMEIxNjAwMDAwMDAwMDQ4MDgwMDAwRjIwODAwQzkwRTAwNDAwMjVDMjAKKzoxMEIxNzAwMDE4OUFGRTk4MDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEMKKzoxMEIxODAwMDAwMDAwMDAwMDA1MDAxMDBBODFCODAzQTAwMDA4MTBFNjIKKzoxMEIxOTAwMDAwMDAwMDQ4MDgwMDAwOTIwMDAwMTYxMzFGMDEwMDgwMDQKKzoxMEIxQTAwMDAyMDAwMEIwMDAwMDAwMDAwMDU0MDFGQzAyQzA2RTMyM0EKKzoxMEIxQjAwMDAwMDBGMzExMDAwMDAwMjgwOTgwMDJGMjAwMDBBRDBFMkIKKzoxMEIxQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjMxMTAwMDAwMDI4NDEKKzoxMEIxRDAwMDA5MDAwMkYyMDAwMEQzMEU5QTAxMDBGODYyODEyRkI0MzgKKzoxMEIxRTAwMDEwMjQwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwQTQKKzoxMEIxRjAwMDAwRDYwMUVDMDZDMDZFMzQyRTAwN0QwODEyMDEwMDJDMzIKKzoxMEIyMDAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDQKKzoxMEIyMTAwMDAwMDAxNjEzMDRBOTAxODAwMjAwNkVCMjAwMDBERTBFQzkKKzoxMEIyMjAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwREEwRTFGNDAwMjg0NjIKKzoxMEIyMzAwMEU2MDEwMEI0MDAwMERFMEUxRDAxMDBGODIyODEyRkI0RUIKKzoxMEIyNDAwMDAwMDBERTBFMDAwMDAwRjg2MjgxMkY5NTAwMDBEQzBFODkKKzoxMEIyNTAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4QTYKKzoxMEIyNjAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyRjkKKzoxMEIyNzAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDBFMDBFNjUKKzoxMEIyODAwMDA0OTgwMTY0ODgxQjg3QkMwMDAwQUIxMjAwOTAwMTA4ODEKKzoxMEIyOTAwMDA5MDA2RUYyMDAwMERGMTIwMDAwMDA4MDAyMDAwMEYwRTIKKzoxMEIyQTAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAxNjEzN0EKKzoxMEIyQjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwQ0MKKzoxMEIyQzAwMDkyQkE5N0JDMDAwMDE2MTMxMjAwMDA2ODAyQzU4NUIwNDAKKzoxMEIyRDAwMDAwMDAwMDAwMDAwMDAwRjhEMjgwMkYzNTAwMDA3RjA4MzkKKzoxMEIyRTAwMDM3MDAwMEY4RDI4MTJGQjQwMDAwMDAwMDAwMDAwMEY4MDEKKzoxMEIyRjAwMDcyODEyRjM0M0QwMDdGMDgxMjAxMDAyQzgyQ0QyRUIyQzYKKzoxMEIzMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGMjBFMDIKKzoxMEIzMTAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwRUUwRTFGNDAwMjg0NUQKKzoxMEIzMjAwMEU2MDEwMEI0MDAwMEYyMEUxRDAxMDBGODIyODEyRkI0RTYKKzoxMEIzMzAwMDAwMDBGMjBFMDAwMDAwRjg2MjgxMkY5NTAwMDBGMDBFNzAKKzoxMEIzNDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4QjUKKzoxMEIzNTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyMDgKKzoxMEIzNjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAwMDAwNjIKKzoxMEIzNzAwMDAwRDQwMUVDMTZDMDZFM0EwMDAwMDAwMDAwMDAwMDc4MTYKKzoxMEIzODAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDRkYKKzoxMEIzOTAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAxNjEzMzUKKzoxMEIzQTAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwN0YwODA0QjAwMDgwNkMKKzoxMEIzQjAwMDAyMDA2RUJDMzcwMDdGMDgxMjAxMDAyQzgyQ0QyRUIyMzUKKzoxMEIzQzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMjBGMzEKKzoxMEIzRDAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwRkUwRTFGNDAwMjg0OEQKKzoxMEIzRTAwMEU2MDEwMEI0MDAwMDAyMEYxRDAxMDBGODIyODEyRkI0MTUKKzoxMEIzRjAwMDAwMDAwMjBGMDAwMDAwRjg2MjgxMkY5NTAwMDAwMDBGOEUKKzoxMEI0MDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4RjQKKzoxMEI0MTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyNDcKKzoxMEI0MjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAwRjBGODMKKzoxMEI0MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMEIwRjgwMDEwMDgwREYKKzoxMEI0NDAwMEYyQzE4NUI2MDAwMDA3MEYxRjQwMDI4NEU2MDEwMEI0NzgKKzoxMEI0NTAwMDAwMDAwQjBGMUQwMTAwRjgyMjgxMkZCNDAwMDAwQjBGMUMKKzoxMEI0NjAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwMDkwRjFEMDEwMDgwODcKKzoxMEI0NzAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1REIKKzoxMEI0ODAwMDAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjAwMDAxNjEzRjUKKzoxMEI0OTAwMDFGMDEwMDgwMDIwMDAwQjAwMDAwMEYwRjM3MDAwMEY4MEQKKzoxMEI0QTAwMEQyODEyRkI0MDAwMDAwMDAwMDAwMDBGODcyODEyRjM0MTgKKzoxMEI0QjAwMDNEMDAwRjBGMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzOUEKKzoxMEI0QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwRDQwMUVDQTkKKzoxMEI0RDAwMDA2MDAwMDMyMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwMzkKKzoxMEI0RTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzRjgKKzoxMEI0RjAwMDA2MDEwMDgwOTJCQTk3QkMwMDAwN0YwODEyMDEwMDY4MjQKKzoxMEI1MDAwMDAyQzU4NUIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDQKKzoxMEI1MTAwMDAwMDA3RDA4ODAwMTAwODBGMjgxMkZCNjAwMDA3RDA4QzgKKzoxMEI1MjAwMDgwMDAwMDgwRTI4MTJGQjYwMDAwMTkwRjgwMDAwMDgwQUIKKzoxMEI1MzAwMDAyODEyRkI2MDAwMDE2MTMxRDAxMDA4MDAyMDAwMEIwMkEKKzoxMEI1NDAwMDAwMDAxNjEzMDQ1ODAxODAwMkMwNkVCQzAwMDA3RDA4ODQKKzoxMEI1NTAwMDA4NTkwMUVDMDZGQjZFQkMwMDAwMDAwMDAwMDAwMEQ4OUEKKzoxMEI1NjAwMDAyODAwMTMyMDAwMDAwMDA1NDU0MDFGQzAyQzA2RTMyMUYKKzoxMEI1NzAwMDAwQzAyMjBGMTgwMTAwMENBOENEM0VCMjAwMDAwMDAwNTAKKzoxMEI1ODAwMDAwNTgwMUVDMDZGQjZFM0EyMDgwMDAwMDAwMDAwMDA4MjUKKzoxMEI1OTAwMDA4ODAzNjMyMDAwMEVGMDMxMjAxMDAyQzcyRTAyRUIyNTgKKzoxMEI1QTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA1RDEyRjEKKzoxMEI1QjAwMDAwMDAwMEY4RTI4MTJGRjQwMDAwMjUwRjA2MDMwMTgwNEYKKzoxMEI1QzAwMDEyQzA2RUJDMTkwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMEMKKzoxMEI1RDAwMDFBMDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzQ0UKKzoxMEI1RTAwMDgwMDEwMDgwRjI4MTJGQjYwMDAwMTYxMzgwMDEwMDgwRDgKKzoxMEI1RjAwMEUyODEyRkI2MDAwMDE2MTMwNDU1MDE4MEIyREIyRkJDODgKKzoxMEI2MDAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwRjMKKzoxMEI2MTAwMDAwMDAwMEQ4MDI4MDAxMzIwMDIwMDBDMDAwMDAwMDI4OTUKKzoxMEI2MjAwMDA5MDAzNzMyMDAwMDAwMDAwMDMwMDAyODA4MDA2RTMyQTgKKzoxMEI2MzAwMDAwMDAwMDAwNDUzMDAwRTAwNjAwMDAzMjAwMDA2MjEyMDkKKzoxMEI2NDAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwMzQwRjA0MDIwMUVDREYKKzoxMEI2NTAwMDE2QzA2RUJDMDAwMDAwMDBDOTAxMDAxNDE4NDA4MTNBRjkKKzoxMEI2NjAwMDAwMDAwMDAwMDAwMDAwRjgwMjgwMkYzNDAwQzAzNDBGRkEKKzoxMEI2NzAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMTYxMzAwMDAwMDgwQjQKKzoxMEI2ODAwMDAyMDAwMDkwMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5OUYKKzoxMEI2OTAwMDAwMDAzNDBGOUYwMTAwMTQxODQwODFCQzAwMDA3RjA4OTcKKzoxMEI2QTAwMDgwMDEwMDgwOTI4MDJGQjYyQjAwN0YwODEyMDEwMDJDQjEKKzoxMEI2QjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMEI2QzAwMDAwMDAxNjEzMUYwMTAwRDgwMjgwMDFCMjAwMDAwMDAwMjQKKzoxMEI2RDAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwNDQwRjE4MDEwMDBDN0YKKzoxMEI2RTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAyODA5ODAzNjMyM0MKKzoxMEI2RjAwMDAwMDA4MTExMDAwMDAwRDgwMjAwMDBEMjAwMDA0MTBGQkMKKzoxMEI3MDAwMDA0MDAwMDgwMDI4MDkyQkMxODAwMDAwMDAwMDAwMEY4RDUKKzoxMEI3MTAwMDczMEEwMzM5NDIwRjM2MDAwMDAwMDBDMDAyMDAzNjkyNUYKKzoxMEI3MjAwMDE4MDAzNjAwMDAwMDAwRjg3MzhBMDNGOTAwMDAwMDAwREEKKzoxMEI3MzAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwNDEwRjE4MDAwMDBDNDgKKzoxMEI3NDAwMEE4Q0QzRUIyMDAwMDVEMTIwMDAwMDBEODAyNDAwMEYyMTkKKzoxMEI3NTAwMDAwRjA0QzBGMUQ0MDAyMDBBODBENjhCMTAwMDAxNjEzNDgKKzoxMEI3NjAwMDBCMDAwMDgwMDIwMDAwQjAwMDAwMTYxMzFFNDAwMjg0OEYKKzoxMEI3NzAwMDA2MDAwMEIyMDAwMDRBMEYxMjAwMDAyODAyMDU4MEIwNDcKKzoxMEI3ODAwMDA4MDA0NTBGMDAwMDAwRjgyMzQwMDE5OTAwMDA0NTBGMTQKKzoxMEI3OTAwMDEyMDEwMDY4MDIwNTgwQjAwMDAwMTYxMzAwMDAwMDgwNEUKKzoxMEI3QTAwMDAyMDAwMDkwMDAwMDRDMEZCNTAwMDA4MDAyMDAwMEIwQzUKKzoxMEI3QjAwMDAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNTAwMDAwMDAwRTQKKzoxMEI3QzAwMDAwMDAwMDUwMDlDMDI5MzIwMDAwMDAwMDAwNTYwMTI4ODYKKzoxMEI3RDAwMDA4QzA2RTMyMDAwMDAwMDAwMDAwMDA3ODM5MEIyRTMyRTUKKzoxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMjBGMzgxOTczNDAwMDA1NjBGOTUKKzoxMEI3RjAwMDA0MDAwMDc4RDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwNUYKKzoxMEI4MDAwMDMyODA5N0JDMDAwMDAwMDAwMDAwMDAwMEI5MDUzMDMwMTUKKzoxMEI4MTAwMDE4MDAwMDAwMDAwMDAwRjgwM0E0MDMzOTAwMDAwMDAwMzUKKzoxMEI4MjAwMDAwMDAwMDM0MzMwQjJGMzIwMDAwNkYwRjA0MDAwMDc4NEIKKzoxMEI4MzAwMEQ5MDEzMEI2MDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDOTUKKzoxMEI4NDAwMDAwMDAwMDAwMDAwMDAwNzhCOTA1MzAzMDAwMDA1RDBGRjYKKzoxMEI4NTAwMDA0MDAwMDgwNDJFNTI5QkMwMDAwMDAwMDAwMDAwMEY4NjAKKzoxMEI4NjAwMDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGODczOEEwMjM5NUMKKzoxMEI4NzAwMDAwMDAwMDAwMDAwMDAwOUMwMjgwOTczMjBBMDAwMDAwRDcKKzoxMEI4ODAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0OTEKKzoxMEI4OTAwMDA5QzAyOUQyMDAwMDY5MEYyNTAxMDAwODA4MDAwMEIyODQKKzoxMEI4QTAwMDAwMDAxNjEzODAwMDAwODBGMjAxODBCNjAwMDAwMDAwNDYKKzoxMEI4QjAwMDAwMDAwMDJDMDkwNTgwMzAwMDAwMTYxMzAyMDEwMDgwRjIKKzoxMEI4QzAwMDgyRkE5MkJDMDAwMDE2MTMwNjAxMDA4MDkyRkE5MkJDMjQKKzoxMEI4RDAwMDAwMDA2NzBGMTIwMDAwMjgwMjA1ODBCMDA4MDA2OTBGMDEKKzoxMEI4RTAwMDAwMDAwMEY4MjM0MDAxOTkwMDAwNjkwRjEyMDEwMDY4NzAKKzoxMEI4RjAwMDAyMDU4MEIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDYKKzoxMEI5MDAwMDAwMDA2RDBGMDQwMDAwODAwMjQwMkZCQzAwMDAwMDAwMEEKKzoxMEI5MTAwMDAwMDAwMDc4MDkwMDJDMzIyMTAzMTYxMzA0MDAwMDgwNzcKKzoxMEI5MjAwMDgyOEQ5N0JDOTYwMzE2MTMwNDAwMDA4MDgyOEQ5N0JDMEQKKzoxMEI5MzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDA1NjBGNzIKKzoxMEI5NDAwMDAwMDAwMEY0MDIwMDAwOTIwMDAwNzMwRjA0MDAwMDgwNjkKKzoxMEI5NTAwMDQyRTUyOUJDMDAwMDAwMDAwMDAwMDBGODAyMDAwMDMyQUYKKzoxMEI5NjAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDIzOTAwMDAwMDAwOEYKKzoxMEI5NzAwMDAwMDAwMDlDMDIwMDk1MzIwMDAwMDAwMENBMDEwMEQ4QkYKKzoxMEI5ODAwMDAyODAwMTMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyQUQKKzoxMEI5OTAwMDAwMTAwMEEwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwNEYKKzoxMEI5QTAwMDAwMjAwMDAwMDcwMEVFMzIwMDAwMDAwMDAwMzgwMDBDMEMKKzoxMEI5QjAwMDA3ODA4MjMyMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyRDUKKzoxMEI5QzAwMDAwMDBGNjAzMDAwMDAwMDhFODAxMDA5NDAwMDA5MzBGNTcKKzoxMEI5RDAwMDAyMDAwMDgwQTI0MjgwQkMwMDAwOTMwRjgwMDAwMDgwMjMKKzoxMEI5RTAwMEYyQzE4NUI2MDAwMDkzMEYxRjQwMDIwOEI5QkY2OEIwQ0UKKzoxMEI5RjAwMDAwMDA4MzBGODA0MTAyODBFMjgxNjhCNjA4MDAwMDAwRTkKKzoxMEJBMDAwMDAwMDAwMDEwNzk2MTgwMzkwMDAwMTYxMzlGMjAwMUUwQ0EKKzoxMEJBMTAwMDE2MjA2RUJBMDAwMDAwMDAwMDAwMDBGODIyODEyRjM0Q0EKKzoxMEJBMjAwMDE4MDAwMDAwMDA0MDAyODhFNjIxOTEzOTAwMDAwMDAwNjMKKzoxMEJBMzAwMDAwMDEwMDVDMDgwMDAwNzIwMDAwMDAwMDAwMDAwMDBDMjMKKzoxMEJBNDAwMDE5QTA5MDNBMDAwMDkzMEYwNjAxMDA4MEQyRkY5MEJDMkQKKzoxMEJBNTAwMDAwMDA4NzBGMkM0MTAyNzhGOTgxNjhCNDAwMDAwMDAwRDMKKzoxMEJBNjAwMDAwMDAwMDc4Qjk4MTk3MzQwMTAwMDAwMDAwMDAwMDEwNDgKKzoxMEJBNzAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDU5QzA4NUQ3M0EKKzoxMEJBODAwMDAzMDAwMDAwMDA0MDAyMDAyOTFBRkYzODAwMDAwMDAwRjcKKzoxMEJBOTAwMDAwMzgwMjAwQjkxQjkwM0EwMDAwMDAwMEQyNDEwMjg4MzEKKzoxMEJBQTAwMDE2QTA5NzNBMDAwMDAwMDA0NTAwMDBEODAyNDAwMDMyN0UKKzoxMEJBQjAwMDAwMDAxNjEzOUYyMDAxRTAxNjIwNkVCQTAwMDAwMDAwNUYKKzoxMEJBQzAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMDAwMDgwMDAwNzUKKzoxMEJBRDAwMDI3MjQ5MDNBMDAwMDAwMDAwMDEwMDAwMDA3MDA4QTMyN0UKKzoxMEJBRTAwMDAwMDAwMDAwMTIwMTAwNThGMkMxMzg3NDAwMDAxNjEzNjMKKzoxMEJBRjAwMDAwMDAwMDgwMDIwMDAwOTAwODAwQTIwRjFBMDAwMDM0MkQKKzoxMEJCMDAwMDc5NjE4MEI5MDAwMEFFMEYxRTAxMDA4MDAyMDAwMEIwMTQKKzoxMEJCMTAwMDAwMDBBRTBGMUY0MDAyMDAwOTQwNjhCMjAwMDA5NTBGMDAKKzoxMEJCMjAwMDgwMDAwMDgwRTIwMTkwQjYwMDAwMTYxMzM4MDAwMDU0MzcKKzoxMEJCMzAwMDFGNDBGNUJBMDAwMDAwMDAwMDAwMDAwOEI5M0Y5MDMwMzcKKzoxMEJCNDAwMDAwMDAwMDAwMDAyODAxRTAyNjI0NkUzQTA4MDAxNjEzQzkKKzoxMEJCNTAwMDFFMDAwMDAwMDlBNEZFQjgzRDAwMDAwMDAwMDAwMDEwMTcKKzoxMEJCNjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5MDA5MEQyNTMKKzoxMEJCNzAwMDAwMDAwMDAwMDAwMDAwNzgwOTA1OTAzMDAwMDAxNjEzNTYKKzoxMEJCODAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwRjMKKzoxMEJCOTAwMDkyQkE5N0JDMDAwMEFFMEYxMjAxMDA2ODAyMDU5MEIwODcKKzoxMEJCQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBRTBGOUQKKzoxMEJCQjAwMDgwMDAwMDgwODI4MTJGQjYwMDAwQUMwRjFGNDEwMjAwODAKKzoxMEJCQzAwMDA5NDA2OEIyMDAwMDAwMDAwMDI4MDFFMDE2MjA2RTNBMkIKKzoxMEJCRDAwMDAwMDBBODBGODAwMTAwODBGMkMxODVCNjAwMDAwMDAwQkYKKzoxMEJCRTAwMDAwNDAwMjg0RTYwMTAwMzQwMDAwMDAwMDAwMDAwMDgwRjQKKzoxMEJCRjAwMDAyMDAwMDMwMDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyNzUKKzoxMEJDMDAwMDAwMDAxNjEzMzgwMDAwNTQxRjQwRjVCQTAwMDAxNjEzNDgKKzoxMEJDMTAwMDlGMjAwMUUwMTYyMDZFQkEwMDAwMDAwMDAwMDEwMDgwQTUKKzoxMEJDMjAwMDAyMDAwMDcwMDAwMEEzMEY4MDAwMDA4MEUyMDE5MEI2QzcKKzoxMEJDMzAwMDAwMDA5NzBGMDAwMDAwNTQxRjQwRjU5QTAwMDAwMDAwMUMKKzoxMEJDNDAwMDAwMDAwMDVDMDgwMDAwMzIwMDAwMTYxMzlGMjAwMUUwOTUKKzoxMEJDNTAwMDE2MjA2RUJBMDAwMDAwMDAwMDAwMDBGODIyODEyRjM0ODgKKzoxMEJDNjAwMDE4MDAwMDAwMUU0MTAyODRFNjYxOTM3OTAwMDAxNjEzNUIKKzoxMEJDNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwMzQKKzoxMEJDODAwMDAyMDAwMDkwMDAwMEI5MEYxRDVEMDFFQzE2QzA2RUJDRjMKKzoxMEJDOTAwMDAwMDAwMDAwMEYwMTAwODAwMjAwMDA3MDAwMDAxNjEzNzkKKzoxMEJDQTAwMDA0NUQwMTgwMDJDMDZFQkMwMDAwMTYxMzgwMDAwMDgwOUQKKzoxMEJDQjAwMDQyODEyRkI2MDAwMDAwMDAwMDAxMDBGOEIyODAyRjc0MEUKKzoxMEJDQzAwMDAwMDAwMDAwMEYwMTAwODAwMjAwMDA3MDAwMDBCNzBGQUMKKzoxMEJDRDAwMDA0NUUwMUVDMTZDMDZFQkMwMDAwMDAwMDAwNUMwMUVDQ0MKKzoxMEJDRTAwMDA2NDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwRTkKKzoxMEJDRjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMzQKKzoxMEJEMDAwMDA0MjAwMTgwODJEQjkwN0MwMDAwMTYxMzA0MjAwMTgwNTcKKzoxMEJEMTAwMDAyMDA2RUJDMDAwMDE2MTMxRjAwMDA4MDAyMDAwMEIwN0QKKzoxMEJEMjAwMDAwMDAwMDAwMDIwQzAyODBBMkRCOTA3QzAwMDBDNDBGMjcKKzoxMEJEMzAwMDA2MjEwMTgwODIxQjkwQkMyNzAwQzUwRjAwMDAwMDAwNzcKKzoxMEJENDAwMDA5MDAzNjkyMjgwMDAwMDAwMDAwMDAwMDA5MDAzNjMyODkKKzoxMEJENTAwMDAwMDAwMDAwMDAwMDAwODgxMjAwMkMzQTAwMDBGRkZGRTUKKzoxMEJENjAwMDAwMDAwMDgwMDIwMDAwOTAwNjAwMDAwMDAwMDAwMDEwQUIKKzoxMEJENzAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5MDA5MkQyM0YKKzoxMEJEODAwMDAwMDAxNjEzMDQwMDAwODAwMjAwOTJCQzAwMDAwMDAwQjYKKzoxMEJEOTAwMDJGQTAwMTc4ODkxQjkyN0EwMDAwMDAwMDA2ODgwMTc4QTQKKzoxMEJEQTAwMDg5OUI5NzdDMDAwMDAwMDAwMDM0MDIwNDA5QzA2RTNEQUUKKzoxMEJEQjAwMDAwMDAwMDAwMDAwQzAyMDAxOUE0NkUzNzAwMDBEMjBGMzIKKzoxMEJEQzAwMDAyMDAwMDgwMDJBNDk3QkMwMDAwRDIwRjAyMDAwMDgwOTUKKzoxMEJERDAwMDAyMDAwMEIwMDEwMDAwMDAwMDAwMDA3ODg5OEQ5NzM3NTQKKzoxMEJERTAwMDAwMDAwMDAwMDIwMTAyODA4MjlCOTc3QzAwMDAwMDAwOUUKKzoxMEJERjAwMDAwMDEwMEY4RjI4MDJGNzQwMDAwRkZGRjAwMDAwMDgwQjcKKzoxMEJFMDAwMDAyMDAwMDkwMDAwMDAwMDBEQTVCMDFFQzA2NDBFRDMyMTkKKzoxMEJFMTAwMDJEMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRTIKKzoxMEJFMjAwMDAwNUMwMTE0MDk4MDZFRDIwMDAwREEwRjA0MDEwMDgwNkEKKzoxMEJFMzAwMDAyNDA4NkJDMDAwMDAwMDAwMEEwMDFFMDE2MjA2RTNBMUYKKzoxMEJFNDAwMDAwMDBEQzBGMDBENDAxRUMwNjAwMDA5MjAwMDBBQjEyRjEKKzoxMEJFNTAwMDAwOTAwMTA4MDkwMDZFRjIwMDAwMDAwMDAwQTAwMUUwNUYKKzoxMEJFNjAwMDE2MjA2RTNBMDAwMERGMTIzMzAxMDBGODgyODAyRkI0RjIKKzoxMEJFNzAwMDAwMDBERjEyOUZGMDAxODA4MkRCODdCQzAwMDBERjEyMzAKKzoxMEJFODAwMDlGRjgwMTgwMjIyMTZFQkMwMDAwMDAwMDAwRTgwMUUwNjQKKzoxMEJFOTAwMDA2MDBFRTMyMDAwMDAwMDAwMEYwMDFFMDA2QzA4NzMyMkMKKzoxMEJFQTAwMDAwMDBERjEyMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGOTEKKzoxMEJFQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzA4MDAwMDgwQkYKKzoxMEJFQzAwMDAyODA5MUJDMTEwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTEKKzoxMEJFRDAwMDEwMDA4MDEyMDA1MDAxMTRBOTlCOTFEOTE1MDAwMDAwOTgKKzoxMEJFRTAwMDAwMDAwMDEwMDkwMDM2MzIxMDAwMDAwMDAwMjAwMTE0OEMKKzoxMEJFRjAwMDg5MEQ2RTM3MDAwMDgwMTIwMDMwMDExNDg5NUI5MUQyRTkKKzoxMEJGMDAwMDFBMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDQKKzoxMEJGMTAwMDAwMDAwMDE0MDlDMDJERDIwMDAwMTYxMzA2MjEwMTgwNzQKKzoxMEJGMjAwMDgyOUI5MUJDMDAwMDAwMDAwMEE4MDE3ODA5MDA2RTMyREQKKzoxMEJGMzAwMDAwMDAxNjEzMDYwMTAyODA4MjlCOTdCQzAwMDAwMTEwQ0UKKzoxMEJGNDAwMDA0MjEwMTMwNjkyNDZFQkMwMDAwMDAwMDAwNTAwMTAwOTMKKzoxMEJGNTAwMEE5OUI5MTNBMDAwMEY5MEYxRjQwMDIyNDA5NDA2OEIyRTIKKzoxMEJGNjAwMDAwMDBGMDBGODAwMDAwODBFMjQxOTJCNjAwMDAwMDAwNjcKKzoxMEJGNzAwMDAwMDAwMDA4Qjk3RjkyMzAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMEJGODAwMDI5MjQ5MDNDMDgwMDAwMDAwMDAwMDA3ODk5QTRGRTM4QTUKKzoxMEJGOTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzM0QKKzoxMEJGQTAwMDA2MDEwMDgwOTJCQTk3QkMwODAwRjAwRjEyMDEwMDY4RTkKKzoxMEJGQjAwMDkyQTRGRUI4MDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUEKKzoxMEJGQzAwMDAwMDAxNjEzMDQyOTAxODA4MjFCOTBCQzAwMDAwMDAwQjEKKzoxMEJGRDAwMDAwQTgwMUUwNjYyNDZFM0EwMDAwMTYxMzlGMjAwMUUwREQKKzoxMEJGRTAwMDA2MDA5M0IyMDAwMEZFMEY4MDAwMDA4MDgyODEyRkI2MTEKKzoxMEJGRjAwMDAwMDBGRjBGMDAyODAxRTAwNjAwMDA5MjAwMDAwMDAwOTIKKzoxMEMwMDAwMDAwMzAwMUUwMDYwMDAwMzIwMDAwMDAwMDAwNTAwMUU4QUUKKzoxMEMwMTAwMDA2MDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwRjUKKzoxMEMwMjAwMDAwMDAwNzEwMzg1MTAxMDBBOTlCOTFCQTAwMDAwNTEwQ0IKKzoxMEMwMzAwMDA0NDEwMjA4QjlGRjY4QjAwMDAwMTYxMzgwNDEwMjgwNzUKKzoxMEMwNDAwMEUyQzE2OEI2MDAwMDAyMTAwMDQwMDI4MDAyNDA2ODkyMUYKKzoxMEMwNTAwMDAwMDAxNDEwOUYzMTAxRTA2NjI0NkVCQzAwMDAxNDEwMzMKKzoxMEMwNjAwMDAwMzAwMUUwMDYwMDAwOTIwMDAwMTExMDA0MjgwMTA0RDUKKzoxMEMwNzAwMDA5MDA2RUIyMDAwMDE2MTMwNjUwMDE4MEEyNUI5MEJDNEUKKzoxMEMwODAwMDAwMDAwRjEwOUYwMTAwMDAxOTI0OTBCQzAwMDAwMDAwNjgKKzoxMEMwOTAwMDAwQTgwMUUwNjYyNDZFM0EwMDAwMDAwMDAwMjgwMUUwREMKKzoxMEMwQTAwMDA2MjQwMDNDMDAwMDAwMDAwMDUwMDFFODA2MDAwMDMyQjkKKzoxMEMwQjAwMDAwMDAxNjEzOUYyMDAxRTAwNjAwOTNCMjAwMDAwMDAwNkMKKzoxMEMwQzAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwMDAwMDAwMjgwMUUwNzQKKzoxMEMwRDAwMDA2MDAwMDMyMDAwMDFEMTAwNDAwMDA4MDAyMDA5MEJDMjkKKzoxMEMwRTAwMDAwMDAxNDEwMDQ0MTAyMDhCOUZGNjhCMDAwMDAxNjEzRTQKKzoxMEMwRjAwMDgwNDEwMjgwRTJDMTY4QjYwMDAwMTExMDAwNDAwMjgwNTkKKzoxMEMxMDAwMDAyNDA2ODkyMDAwMDE4MTAwMjAwMDA4MDIyMjQ5MEJDQjcKKzoxMEMxMTAwMDAwMDAxRDEwODA0MDAyODBGMkMxNjhCNjAwMDAwMDAwREYKKzoxMEMxMjAwMDAwNDAwMjhDQjZDMTY4MzUwMDAwMUQxMDAwMDAwMEY4MDgKKzoxMEMxMzAwMDIyODEyRjk0MDgwMDAwMDAwMDQwMDI3ODM5OUFGRTM4Q0UKKzoxMEMxNDAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzOEIKKzoxMEMxNTAwMDA2MDEwMDgwOTJCQTk3QkMwODAwMTYxMzEyNDAwMjY4Q0MKKzoxMEMxNjAwMDEyOUFGRUI4MDAwMDExMTAwNDAxMDAwMDI5MjQ5MEJDQUUKKzoxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDgwOTAwMDAzMjEwMDAwMDAwNkMKKzoxMEMxODAwMDAwMDAwMDEwNzkwQjE2MzgwODAwMDAwMDAwMDAwMDBDQjkKKzoxMEMxOTAwMDc5MEIxNjM4MDAwMDE2MTMwNDAwMDA4MDQyRTQ5MEJDQUUKKzoxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDRBOTAwMkQzNzAwMDQwMTAwNzkKKzoxMEMxQjAwMDAwMDAwMDA0Qzk0RDkwM0EwMjAwMDAwMDAwMDAwMEE4RjEKKzoxMEMxQzAwMDgyMEQ5MTM3MDAwMDAwMDAwMDAwMDBBODEyQTQyQTNBNTYKKzoxMEMxRDAwMDAwMDAyODEwODA0MDAyODBFMjAxN0NCNjAwMDAxNjEzQTcKKzoxMEMxRTAwMDA0NDAwMjc4QjkzRjdDQjAwMDAwMDAwMDAwMDAwMDA4NjUKKzoxMEMxRjAwMEU5QTU5MDNBMDAwMDJBMTA5RjAxMDAxMDE5MDA5MUJDOTcKKzoxMEMyMDAwMDlGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDAyMzEwREIKKzoxMEMyMTAwMDA0MDEwMDgwNDJFNDkwQkMwMDAwMDAwMDAwMDAwMDc4QUYKKzoxMEMyMjAwMEM5MjQ5MDNBMDAwMDE2MTMwNDAxMDA4MDIyQTQ5N0JDOTAKKzoxMEMyMzAwMDAwMDAwMDAwMDBBODAxRTA2NjI0NkUzQTAwMDAwMDAwNDMKKzoxMEMyNDAwMDAwNTAwMUU4MDYwMDkwMzIwMDAwMTYxMzlGMjAwMUUwMjQKKzoxMEMyNTAwMDA2MDA5M0IyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwQTAKKzoxMEMyNjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDE4MDAzNDEwNjIKKzoxMEMyNzAwMDFGNDEwMjc4ODhDRDY4QjYwMDAwMDAwMDAwMDAwMDg4RTkKKzoxMEMyODAwMDEyMDAyQzNBMDAwMDM3MTA4MDAxMDA4MDYyODA4N0I2Q0YKKzoxMEMyOTAwMDAwMDAxNjEzMDQ0MTAyODBCMkZGNjhCMDAwMDAzMjEwQTMKKzoxMEMyQTAwMDAwNDAwMjgwMDI0MDY4OTIwMzAwMTYxMzA0NDAwMjAwMUUKKzoxMEMyQjAwMDM4MUFGRkI4MDAwMDE2MTMxRjQwMDIwNEI4RkY2OEIwMTgKKzoxMEMyQzAwMDAwMDAwMDAwMDAzODAyMDBCODFCODAzQTJFMDAwMDAwNzkKKzoxMEMyRDAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MzcKKzoxMEMyRTAwMDA5MDA4MEQyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwMDAKKzoxMEMyRjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA0NTEwRDkKKzoxMEMzMDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNDIxMDEyMDEwMDAwQzAKKzoxMEMzMTAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QzIKKzoxMEMzMjAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjFEMDA0NTEwQ0IKKzoxMEMzMzAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwM0YxMDlGMDEwMDgwOTQKKzoxMEMzNDAwMDE4MDA4OEJDMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTYKKzoxMEMzNTAwMDAwMDAwMDAwMDA2MDAwNkMwODAwNkUzMjAwMDAwMDAwNjkKKzoxMEMzNjAwMENBNjgwMDRDMDgwMDZFMzIwMDAwMTYxMzA0NzAwMDE4RjIKKzoxMEMzNzAwMDA4MDA2RUIyMjAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyRjQKKzoxMEMzODAwMDEwMDA4MDEyMDAwMDAwMTRBOTYwODFEOTAwMDAwMDAwOTQKKzoxMEMzOTAwMDA0MDAwMDgwQTJBMDgxN0MwMDAwMTYxMzBEMDEwMDgwMjMKKzoxMEMzQTAwMDAyMDAwMEIwMDAwMDRGMTA4MDAxMDA4MEUyODAyRkI2MzQKKzoxMEMzQjAwMDAwMDA0RjEwMUIwMDAwODAwMjAwMDBCMDAwMDAwMDAwRDEKKzoxMEMzQzAwMDA2MDAwMDgwNjJFMDgzN0MwMDAwMTYxMzlGMDAwMDE0Q0EKKzoxMEMzRDAwMDE4NDA4MUJDMDAwMDAwMDBDQTAxMDBGODAyODAyRjM1MUYKKzoxMEMzRTAwMDAwQTAwMDAwMTIwMTAwNDBBMjhEMzk3MjAwMDAxNjEzNTcKKzoxMEMzRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwQUQKKzoxMEM0MDAwMDAyMDAwMDkwMDAwMDAwMDAwMDA4MDFFNDA2QzAyRDMyODgKKzoxMEM0MTAwMEVFRkYwMDAwMDAxMDAxRTA4NjhEMkYzMTAwMDAwMDAwQ0IKKzoxMEM0MjAwMDAwMDAwMDFDQjNFNDM5MzIwMDAwNUIxMDA0MDAwMDc4MDcKKzoxMEM0MzAwMEQ5MDEzMEI2MDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDODkKKzoxMEM0NDAwMDAwMDAwMDAwMDAwMDAwNzhCOTA1MzAzMDE4MDAwMDAwM0UKKzoxMEM0NTAwMDAwMDAwMEY4RTNBNTAzMzkwMDAwMDAwMDAwMDAwMDM0RUMKKzoxMEM0NjAwMDMzMEIyRjMyMDAwMDAwMDAwNDAwMDA3OEQ5MDEzMDc2MzEKKzoxMEM0NzAwMDAwMDAxNjEzMDQwMTAwODAzMjgwOTdCQzAwMDAwMDAwMDkKKzoxMEM0ODAwMDAwMDAwMDc4QjkwNTMwMzAxODAwMDAwMDAwMDEwMEY4MDUKKzoxMEM0OTAwMEUzQTUwMzc5MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwODgKKzoxMEM0QTAwMDAwMDAxNjEzMDQwMTAwODAwMjAwMkRCQzAwMDAxNjEzQ0EKKzoxMEM0QjAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMDAwMDAwMDAwMENDQzAKKzoxMEM0QzAwMDAyMDAwMDMyMDAwMDY2MTAyMDAwMDEyQzA5QzA2RUIyOEMKKzoxMEM0RDAwMDAwMDA2NzEwMDAxNjg2Q0MwNkMwOTI5MjAwMDAwMDAwOTMKKzoxMEM0RTAwMDAwMTQ4NkNDMDZDMDkyMzIwMDAwMDAwMDEyMDEwMDQwMDkKKzoxMEM0RjAwMDYyOEU5MjUyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMEM1MDAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA2RDEwOUUKKzoxMEM1MTAwMDA0MDAwMDc4RDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwMzEKKzoxMEM1MjAwMDQyODA5N0JDNkQxMDM2MDAwMDAwMDBDMDAyMDAzNjkyQjkKKzoxMEM1MzAwMDYwMDAxNjEzMDQwMTAwODA4MjhEMkZCMTAwMDAwMDAwRkUKKzoxMEM1NDAwMDAwMDAwMDE0MDMwMDM4MzIwMDAwMDAwMDAwMDAwMEUwOEEKKzoxMEM1NTAwMDAyMDAzMDMyMDAwMEI5MTAwNDAwMDAyNEQ4MDEzMEI2QzcKKzoxMEM1NjAwMDcyMTAwMDAwMDAwMDAwODg4MjREODIzQTAwMDAxNjEzMEQKKzoxMEM1NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDAKKzoxMEM1ODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwREUKKzoxMEM1OTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDZEMTAzNjAwQUQKKzoxMEM1QTAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwOUUxMDAwMDAwMDgwRDMKKzoxMEM1QjAwMDAyMDAwMDkwMDAwMDdBMTAwMDAwMDAyMDQ4MDUzMDkwMzIKKzoxMEM1QzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA4NjEwOUEKKzoxMEM1RDAwMDkyMTEwMUJDMDgwMDZFQjIwMDAwMDAwMDAwMDgwMURDRUUKKzoxMEM1RTAwMDAyNDA2RTMyMDAwMDdFMTAxRjExMDFFMDI2QzE4QkI1QTMKKzoxMEM1RjAwMDAwMDA4NjEwMUQwMDAwODAwMjAwMDBCMDAwMDAwMDAwNTYKKzoxMEM2MDAwMDAwMDAwMEQ4MDIwMDAwMzI4MDAyMDAwMDAwMDAwMDAwOUMKKzoxMEM2MTAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3MjYKKzoxMEM2MjAwMDIwMDUwMTAwMDAwODAwMDBDNzhEOTczQTBBMDAwMDAwQUQKKzoxMEM2MzAwMDAwMDAwMDc4ODkwRDgyMzcwMDAwMDAwMDAwMTAwMDAwMjMKKzoxMEM2NDAwMEE3QkE5NzNBMDAwMDAwMDAwMDE4MDAwMDA3QzBFQTMyQkQKKzoxMEM2NTAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwMzhCMjAwMDA4QTEwMTEKKzoxMEM2NjAwMDgwMEUwMUJDMDhDMDZFQjIwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMEM2NzAwMDE5MEU4MjMyMDBFMDkyMTAxMjAxMDA0OEEyMEQ5MEIyMTEKKzoxMEM2ODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNkYKKzoxMEM2OTAwMDAwMDAwMEQ4MDI0MDAwMzJCNDAwMDAwMDAwMDAwMDAwOUEKKzoxMEM2QTAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3OTYKKzoxMEM2QjAwMDAwMDQwMTAwMDAwODAwMDBDNzhEOTczQTAwMDAwMDAwNDgKKzoxMEM2QzAwMDAwMDAwMDc4OTkwMDgyMzcwMDAwMTYxMzAyMTAwMDAwNjUKKzoxMEM2RDAwMDg3QkY5N0JBMDAwMDAwMDAwMDE4MDAwMDA3NDBGRTMyMzQKKzoxMEM2RTAwMDAwMDAxNjEzMTIwMDAwNDhGMkMxMzhCNDE4MDAzNjAwREEKKzoxMEM2RjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMDA0QzUKKzoxMEM3MDAwMDg5NjAzODMyMUQwMDAwMDAwMDAwMDA3ODA5QTQxNzM4NDUKKzoxMEM3MTAwMDAwMDA5ODEwODAwMDAwODAwMkMwOEJCNjAwMDA5OTEwQzUKKzoxMEM3MjAwMDA0MDAwMDgwMzI4MDk3QkMwMDAwMTYxMzAwMDAwMDgwRDcKKzoxMEM3MzAwMDAyMDAwMDkwMDAwMDE2MTMwNDAxMDA4MDAyODA5N0JDRTQKKzoxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMThGMzQxOTAzNDAwMDA5RTEwMkIKKzoxMEM3NTAwMDA0MDAwMDc4RDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwRUYKKzoxMEM3NjAwMDMyODA5N0JDMDAwMDAwMDAwMDAwMDAwMEI5MDUzMDMwQTYKKzoxMEM3NzAwMDE4MDAwMDAwMDAwMDAwRjgwM0E0MDMzOTAwMDAwMDAwQzYKKzoxMEM3ODAwMDAwMDAwMDAwMTlDRTJDMzIwMDYwMTYxMzEyMDAwMDQwODkKKzoxMEM3OTAwMEEyMEQ5MEIyMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyOUMKKzoxMEM3QTAwMDYwMDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwQkEKKzoxMEM3QjAwMDAwMDAwMEJDQTgwMDJEMzdBMDA3MDEwMDAwMDgwMDAwMDEKKzoxMEM3QzAwMEM3Q0Q4QjNBMEEwMDAwMDAwMDAwMDA3ODg5Q0QyQzM3RDUKKzoxMEM3RDAwMDgwMDIwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAwMDAwNzgKKzoxMEM3RTAwMDAwMTAwMDAwQTdCQTk3M0EwMDAwMDAwMDAwMTgwMDAwRUYKKzoxMEM3RjAwMDA3QzBFQTMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0M0MKKzoxMEM4MDAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNjkKKzoxMEM4MTAwMDAwMDgwMURDMDI0MDZFMzIxRDAwMDAwMDAwMDAwMDc4QkMKKzoxMEM4MjAwMDA5QTQxNzM4MDAwMDE2MTMwNDAxMDA4MDAyODA5N0JDODkKKzoxMEM4MzAwMDAwMDAxNjEzODAxMDAxODAyMjAxNkVCNjBBMDBCMDEwQUQKKzoxMEM4NDAwMDFGMDEwMDc4ODlDRDJDQjcwMDAwQjcxMDFEMTAwMUY4MkEKKzoxMEM4NTAwMDAyMDA2RUIyODAwMjAwMDAwMDAwMDAwMDA3MDAzNjMyQzUKKzoxMEM4NjAwMDIwMDUwMTAwMDAwODAwMDBDN0NEOEIzQTAwMDAwMDAwNDEKKzoxMEM4NzAwMDAwMTAwMDAwQTdCQTk3M0EwMDAwMDAwMDAwMTgwMDAwNUUKKzoxMEM4ODAwMDA3QzBFQTMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0QUIKKzoxMEM4OTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwRDkKKzoxMEM4QTAwMDAwMTAwMUY4MDIwMDZFMzJFRUZGMTYxMzA0MDEwMDgwNDIKKzoxMEM4QjAwMDgyOEQyRkIwMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwOTcKKzoxMEM4QzAwMEVFRkYxNjEzMDQxMTAxODA4MjBENkVCMDAwMDAwMDAwMEYKKzoxMEM4RDAwMDAwMTAwMUY4MDIwMDZFMzIwMDAwMDAwMDAwMDkwMURDQzcKKzoxMEM4RTAwMDAyNDA2RTcyMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMTYKKzoxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjBFMDAwMDAwRUYKKzoxMEM5MDAwMDAwMDAwMDA0ODk0RDBEMzYwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMEM5MTAwMDA3ODAwQjMyMDAwMDAwMDAwMDA4MDAwMDA3MDA5MDMyODIKKzoxMEM5MjAwMDAwMDAwMDAwMDAxMDAwMDAwNzAwMzYzMjAwMDBDMjEwQjYKKzoxMEM5MzAwMDEyMDAwMDRDRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDgwN0EKKzoxMEM5NDAwMDAyMDAwMDMwMDAwMEMzMTAxMjAwMDA4MDAyQzAyMUIyQkIKKzoxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDBFOTAyOTAzQTAwMDBCRjEwNTMKKzoxMEM5NjAwMDA0MDEwMDA0MTk0MDkwQkMwMDAwMDAwMDAwMDEwMDgwOTgKKzoxMEM5NzAwMDAyMDAwMDUwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNTUKKzoxMEM5ODAwMDAwMDBEMjEwODAwMTAwODBBMjgwMkZCNjAwMDBDQzEwRTEKKzoxMEM5OTAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzEKKzoxMEM5QTAwMDczMEEwM0Y5MDAwMEQxMTAwNDAwMDA4MDAyODAyREJDM0UKKzoxMEM5QjAwMDAwMDAxNjEzMDQwMTAwODAyMjgwMkRCQzAwMDAxNjEzMTUKKzoxMEM5QzAwMDlGMDAwMDgwMTgwMDg4QkMwMDAwQ0MxMDEyMDEwMEU4MTUKKzoxMEM5RDAwMDAyQzAyMUIyMDAwMENCMTAwMDAwMDA4MDAyMDAwMDkwRDUKKzoxMEM5RTAwMDAwMDAwMDAwQ0EwMDAwRDgwMjQwODQzMjAwMDAxNjEzODQKKzoxMEM5RjAwMDA0MDEwMDgwMDI0MDJEQkMwMDAwMTYxMzA0MDAwMDgwREEKKzoxMENBMDAwMDAyODAyREJDMDAwMDAwMDAwMDQwMDA2Qzg4MUM4MzNBQUUKKzoxMENBMTAwMDAwMDAwMDAwMDA0ODAwNEMwODAwNzIzMjAwMDAxNjEzQUQKKzoxMENBMjAwMDA4NTAwMDE4QzgyMDcyQkMwMDAwMDAwMDA0MDAwMDgwRkMKKzoxMENBMzAwMDAyNDA4MTdDMDAwMDAwMDAwMDAwMDAxNDE4NDA4MTNDOEUKKzoxMENBNDAwMDAwMDAxNjEzMDIwMDAwMjA4ODAxODJCQTAwMDAwMDAwRDYKKzoxMENBNTAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMENBNjAwMDA3MDAwNjMyMDAwMDE2MTMwNDAxMDA4MDAyMDAzNkJDRTUKKzoxMENBNzAwMDA3MDAwMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAwMDAwQTQKKzoxMENBODAwMDAwMTAwMDAwMDcwMDgyMzIwMDAwMDAwMENBMTkwMDAwRjgKKzoxMENBOTAwMDA3NDA4MjMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0ODEKKzoxMENBQTAwMDAwMDAwMDAwMDAwMTAwRDgwMjQwODQ3MjAwMDBGRkZGNzcKKzoxMENBQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDREMDAwMDAwMTcKKzoxMENBQzAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyOUQKKzoxMENBRDAwMDAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwQzcKKzoxMENBRTAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwM0MxMTA0MDAwMDI4MzgKKzoxMENBRjAwMEQ4QTA4MkJDMDAwMDE2MTMwOTAxMDA4MDAyMDAwMEIwMUIKKzoxMENCMDAwMDAwMDAwMDAwMDAwMDAwMThEOEEwODEzQzAwMDBGRTEwQ0EKKzoxMENCMTAwMDA0MDAwMDNDRDhFMDgzQkMwMDAwMTYxMzA0MDEwMDgwMzAKKzoxMENCMjAwMDAyODA4MUJDMDAwMEVGMTAwNDAwMDA4MDcyODAyREJDRTgKKzoxMENCMzAwMDAwMDAxNjEzMTIwMDAwNTAwMkMwMzhCMjAwMDBGNzEwQjcKKzoxMENCNDAwMDUxMDAwMEQ4MTI4MDJEOUEwMDAwMTYxMzEyMDAwMDUwRDgKKzoxMENCNTAwMEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NzcKKzoxMENCNjAwMDAwMDBGNTEwMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzMzgKKzoxMENCNzAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwRjAxMDY3MDAwMEY4NEUKKzoxMENCODAwMEEyODAyRkI1MDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyRTcKKzoxMENCOTAwMDAwMDAxNjEzMDQwMTAwODA3MjgwMkRCQzAwMDAwMDAwMEMKKzoxMENCQTAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwRkMxMDJBMDEwMDAwRjEKKzoxMENCQjAwMEQ4MjA4MEJBMDAwMEZCMTAxMjAxMDAwMDA5QzAyMUIyODkKKzoxMENCQzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwQTYKKzoxMENCRDAwMDAwMDAwMEQ4MDI0MDg0MzIxRDAwMTYxMzA0MDAwMDgwQkIKKzoxMENCRTAwMDAyQTQxN0I4MDAwMDQ2MTAwMDYwMDA2QzA4MDA2RUYyNDYKKzoxMENCRjAwMDAwMDBFNDEwNEQwMDAwMDA2N0UwODM5RTAwMDAxNjEzNjMKKzoxMENDMDAwMDEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4REQKKzoxMENDMTAwMDczMEEwM0Y5MUQwMDA1MTEwNDAwMDA4MDAyQTQxN0I4NkYKKzoxMENDMjAwMDAwMDAxNjEzODAwMTAwODBBMjgwMkZCNjAwMDBGRjEwQzQKKzoxMENDMzAwMDY3MDAwMEY4QTI4MDJGQjUwMDAwMTYxMzEyMDAwMDAwNTQKKzoxMENDNDAwMDA5QzAyMUIyMUQwMDE2MTMwNDAxMDA4MDAyQTQxN0I4MDgKKzoxMENDNTAwMDA4MDAwMDAwMDA0MDAyNzgzOTlBRkUzODAwMDAxNjEzRTAKKzoxMENDNjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwMDIKKzoxMENDNzAwMDkyQkE5N0JDMDgwMDE2MTMxMjQwMDI2ODEyOUFGRUI4QzYKKzoxMENDODAwMDAwMDAxNjEzMEIwMDAwODAwMjAwMDBCMDAwMDA2NDExQzkKKzoxMENDOTAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwMUIxMTFGMDAwMDZDODAKKzoxMENDQTAwMEQ4RTA4NkJBMDAwMDMyMTA1MTAwMDBEODAyMDAwMEYyMkQKKzoxMENDQjAwMDAwMDAwRjExMDAwMDAwM0MwODQwODA5MjAwMDAxQjExOTIKKzoxMENDQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTMxMTgwMDEwMDgwMkQKKzoxMENDRDAwMEYyODEyRkI2MDAwMDEzMTE4MDAwMDA4MEUyODAyRkI2OTEKKzoxMENDRTAwMDAwMDAxMzExODAwMTAwODAzMjgwODdCNjAwMDAwMDAwMzAKKzoxMENDRjAwMDAwMDAwMEY4RTI4MDJGMzQwMDAwRTMxMDA0MDEwMDgwRkYKKzoxMENEMDAwMDAyODA4MUJDMDAwMDE5MTE4MDAxMDA4MEEyODAyRkI2MzIKKzoxMENEMTAwMDAwMDAxODExMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwRUQKKzoxMENEMjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4QkEKKzoxMENEMzAwMDAyNDA4NDMyMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4QkMKKzoxMENENDAwMDAwMDA0NjEwMDA2MDAwNkMwODAwNkVGMjAwMDBFNDEwNjUKKzoxMENENTAwMDREMDAwMDAwNjdFMDgzOUUwMDAwMjAxMTgwMDEwMDgwRUMKKzoxMENENjAwMEUyODAyRkI2MDAwMDQwMTE4MDAxMDA4MEEyODAyRkI2MjMKKzoxMENENzAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTFEMDA0MDExQkMKKzoxMENEODAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwMTYxMzAwMDAwMDgwMDAKKzoxMENEOTAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBBNEE4NjA4QTNDOEYKKzoxMENEQTAwMDAwMDAxNjEzMDQyMTAxODA4MjVCOEFCQzAwMDAyNDExNUMKKzoxMENEQjAwMDJGQTgwMTIwOTkyMjZFQkEwMDAwQzcwRjAwMDAwMDgwNDIKKzoxMENEQzAwMDAyMDAwMEYwMDAwMDE2MTMwNjAxMDI4MDgyMUI5MkJDRDQKKzoxMENERDAwMDAwMDAwMDAwMDBBODAxRTAwNjAwOTIzMjAwMDAwMDAwMDAKKzoxMENERTAwMDAwNTAwMUU4MDYwMDAwMzIwMDAwMjkxMTIzMjEwMUUwNzMKKzoxMENERjAwMDA2MDAwMEIyM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyQTcKKzoxMENFMDAwMDAwMDAxNjEzMDQzMDAwRTAwNjgwODJCMjAwMDAzMzExRTcKKzoxMENFMTAwMDA0MjEwMEUwMDY4MDgxQjIwMDAwMTYxMzgwMDAwMDgwMkIKKzoxMENFMjAwMEUyODAyRkI2MDAwMDMxMTE4MDAxMDA4MEEyODAyRkI2NzEKKzoxMENFMzAwMDAwMDAzMDExMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQjQKKzoxMENFNDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4OTkKKzoxMENFNTAwMDAyNDA4NDMyMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4OUIKKzoxMENFNjAwMDAwMDA0NjEwMDA2MDAwNkMwODAwNkVGMjAwMDAwMDAwMzgKKzoxMENFNzAwMDAwMjAwMEUwMDY4MDgxMzIwMDAwMDAwMDAwM0MwMEU4NTUKKzoxMENFODAwMDA2NDA4MTMyMDAwMDAwMDAwMDEwMDBFMDA2QzA4NjMyM0IKKzoxMENFOTAwMDAwMDAwMDAwMDAxODAwRTAwNkMwODQzMjAwMDAxNjEzRjUKKzoxMENFQTAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMDAwMDJBMDEwMDgwMDgKKzoxMENFQjAwMDAyMDAwMDcwMDAwMDNBMTExMjAxMDAwMDA5QzAyMUIyMDYKKzoxMENFQzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzNUQKKzoxMENFRDAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwMDAwMDAwMDEwMEY4NjAKKzoxMENFRTAwMEEyODAyRjc1MDAwMDAwMDAwMDAwMDAzQ0Q4RTA4MzNDQzkKKzoxMENFRjAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDAwMDAxNjEzREYKKzoxMENGMDAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwMDAwMDAwMDAwMEY4MjIKKzoxMENGMTAwMEEyODAyRjM0MDAwMDAwMDAwMDAwMDA4ODEyMDAyQzNBOEMKKzoxMENGMjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRjEKKzoxMENGMzAwMDAwMDAwMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMDc4M0UKKzoxMENGNDAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDBBODAyMDAwMDMyQ0EKKzoxMENGNTAwMEVFMDU0ODExMDQwMTAwODA4MjBERjZCQzAwMDYwMDAwQjkKKzoxMENGNjAwMDAwMDAwMDA4MDkwMDM2MzIwMDAwNEExMTAwMDAwMDA0RTkKKzoxMENGNzAwMDA5QzAwOTkyMDAyODAwMDAwMDAwMDAwODA5MDAzNjMyQUMKKzoxMENGODAwMDAwMDAwMDAwMDAwMDAwMDQwOTgwMDkzMjFFMDAwMDAwQkIKKzoxMENGOTAwMDAwMDA2MEMwODdDRDAwMzcwMDAwMDAwMDAwMDg2MEMwQkUKKzoxMENGQTAwMDA3ODA5NzMyMDAzMDAwMDAwMDAwMDA3ODg5OEQyQTNBMEYKKzoxMENGQjAwMDAwMDAxNjEzMTIwMDAwNUM1MjgxOTdCNDAwMDAwMDAwQkMKKzoxMENGQzAwMDAwMDAwMDAwMjkyNDkwM0EwODAwMDAwMDAwMDAwMDc4Q0EKKzoxMENGRDAwMDg5MEQ5MDM2MDAwMDAwMDAwMDAwMDAwNDE5NDA5MDNDQ0MKKzoxMENGRTAwMDAwMDAwMDAwMDAwMDAwQTg1MjgyMkEzQTAwMDg0QTExRkUKKzoxMENGRjAwMDAyMDEwMDgwODI4RDJBQkMwMDAwNUIxMTA2MDAwMDgwQzcKKzoxMEQwMDAwMDAyNDA5MEJDMDAwMDE2MTMxMjAwMDBBODAyMDAyMEIyREIKKzoxMEQwMTAwMDFFMDAwMDAwMDAwMDAwQzA4N0NEMDAzNzAwMDAwMDAwQTcKKzoxMEQwMjAwMDAwMDgwMEMwMDc4MDk3MzIwMDAwMTYxMzEyMDAwMDVDNTEKKzoxMEQwMzAwMDUyODEyQUI0MDAwMDAwMDAwMDAwMDAwMDI5MjQ5MDNBMjgKKzoxMEQwNDAwMDA4MDAwMDAwMDAwMDAwNzg4OTBEOTAzNjAwMDA1NDExOUYKKzoxMEQwNTAwMDA0MDEwMDA0MTk0MDkwQkMwNTAwMDAwMDAwMDAwMDc4QTUKKzoxMEQwNjAwMDg5MEQ5MDM2MDAwMDAwMDAwMDAwMDBBMDBFODA5NzMyNkQKKzoxMEQwNzAwMDAwMDAxNjEzMTIwMDAwNjgwMjgwOTdCMjAwMDAwMDAwNDIKKzoxMEQwODAwMDAwMDAwMEE0MEU4MDk3MzIwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMEQwOTAwMDI5MjQ5MDNBMDAwMDAwMDAwMDAwMDA3ODU5MDA5MDM2RTIKKzoxMEQwQTAwMDAwMDA1RDExOTUwMTAwODAyMjI0OTBCQTAwMDAwMDAwNkMKKzoxMEQwQjAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwRkZGRjAwMDAwMDgwMUYKKzoxMEQwQzAwMDAyMDAwMDkwMDAwMDdFMTEwNDAxMDA3OEQ5MDEzMEI2MDIKKzoxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMjgwOUMwMjkzMjAwMDAwMDAwMDQKKzoxMEQwRTAwMDAwMDAwMDlDQjI0NTI4MzAwMDAwNzAxMTg2MDEwMDA4NDUKKzoxMEQwRjAwMDA5ODAyRkIyMDAwMDAwMDAwMDAwMDAyQzA5NDA4MTMyOUUKKzoxMEQxMDAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwRjMKKzoxMEQxMTAwMDAwMDAwMEY0MDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4RDcKKzoxMEQxMjAwMDczOEEwMjM5MDAwMDAwMDAwMDAwMDA5QzAyODA5MjMyRTUKKzoxMEQxMzAwMDAwMDA2RjExMDQwNzAxODAwMkMwNkVCQzAwMDA3OTExNkQKKzoxMEQxNDAwMEMzMDcwMUVDQjZFNDZFOUEwMDAwNzkxMTAwMDYwMUVDMDkKKzoxMEQxNTAwMEI2RTQ2RTlBMDAwMDE2MTM4MDAxMDA4MDUyODA5MEI2RUIKKzoxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMkMwOTA1ODAzMDAwMDAwMDAwRDUKKzoxMEQxNzAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEY0OEYKKzoxMEQxODAwMDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGODczOEEwMjM5MjMKKzoxMEQxOTAwMDAwMDAwMDAwMDAwMDAwOUMwMjgwOTIzMjAwMDAxNjEzODQKKzoxMEQxQTAwMDAyMDEwMDgwODJGQTkyQkMwMDAwMTYxMzA2MDEwMDgwODIKKzoxMEQxQjAwMDkyRkE5MkJDMDAwMEQ3MTEwMDAwMDA4MDAyMDAwMEQwNUIKKzoxMEQxQzAwMDIxMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMkIKKzoxMEQxRDAwMDAwMDAwMDE0MDlDMDkyRDIwMDAwMDAwMDAwMDAwMDMwREUKKzoxMEQxRTAwMDAzMDAzODMyMDAwMDdFMTEwNDAxMDA3OEQ5MDEzMEI2MDYKKzoxMEQxRjAwMDAwMDA2NzExMDAwMDAwOUNCMjQ1Mjg5MDAwMDAwMDAwNkMKKzoxMEQyMDAwMDA0MDAwMDgwMjI4MDk3N0MwMDAwMTYxMzAwMDAwMDgwM0MKKzoxMEQyMTAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNkMKKzoxMEQyMjAwMDAwMDAxNjEzMDQwMDAwODAwMkMwRThCQzAwMDAxNjEzQzIKKzoxMEQyMzAwMDAyMDAwMDgwMDJDMTJGQkMwMDAwMDAwMDAwMDAwMDg4MzYKKzoxMEQyNDAwMDAyQzBFODMyMDIwMDg0MTFCMDAwMDBBMEYyMEIwMEI5NjUKKzoxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMENBQkU0QjAzMjAwMDA4OTExQjcKKzoxMEQyNjAwMDgwMDEwMDgwRjI0QkQwQjYwMDAwMDAwMEEwMDAwMDI4MzIKKzoxMEQyNzAwMDA5MDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwQTAKKzoxMEQyODAwMDAwMDA4QjExMDQwMTAwODAxMjNFRjhCQTAwMDA5NjExRDQKKzoxMEQyOTAwMEEwMDAwMDA0RkQ0QkQwOTQwMDAwOTIxMTgwMDEwMDgwOUEKKzoxMEQyQTAwMEQyODE5MkI2MDAwMDkyMTE4MDAxMDA4MDIyODFGQ0I2RUEKKzoxMEQyQjAwMDAwMDAwMDAwQTAwMDAwMDRGRDRCRDAzNDAwMDAwMDAwN0UKKzoxMEQyQzAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwMzgKKzoxMEQyRDAwMEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyNzIKKzoxMEQyRTAwMDAwMDA5NjExMDAwMDAwOTBGMTAxMDA5NDAwMDAwMDAwODEKKzoxMEQyRjAwMEEwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwNjgKKzoxMEQzMDAwMEYxMDFGODM0MDAwMDAwMDAwMDAwMDA5MDAxNDBGODMyMDQKKzoxMEQzMTAwMDAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjAwMDAxNjEzNjAKKzoxMEQzMjAwMDgwMDEwMDgwRjI0QkQwQjYwMDAwOUMxMTA0MDEwMDI4NUYKKzoxMEQzMzAwMDA5MzRCMEJBMDAwMDE2MTM4MDAxMDA4MEYyNEJEMEI2NTkKKzoxMEQzNDAwMDAwMDA5OTExQjAwMDAwODAwMjAwMDBCMDAwMDAwMDAwNTEKKzoxMEQzNTAwMEEwMDAwMDA0RkQ0QkQwMzUwMDAwMDAwMDAwMDEwMDI4QjMKKzoxMEQzNjAwMDA5MDAwMDUyMDAwMDlDMTFCMDAwMDBBODIyQzAyRkI3OTUKKzoxMEQzNzAwMDAwMDAxNjEzMDQwMDg0QzAzN0FDQjBCMjAwMDAwMDAwRjcKKzoxMEQzODAwMEEwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMDAwMDAwMDc4M0UKKzoxMEQzOTAwMEE5NERCMDMwMDAwMEE0MTE4MDAwMDA4MDAyNDBCMEI2NUEKKzoxMEQzQTAwMDAwMDAxNjEzODAwMDAwODAxMjQwQjBCNjAwMDAwMDAwOUMKKzoxMEQzQjAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDAwMDA4NDA4QjMKKzoxMEQzQzAwMDBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMEU3MjUwMTMyNjUKKzoxMEQzRDAwMDAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTAwMDAwMDAwOEIKKzoxMEQzRTAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDAwMTgwMDAwMkMKKzoxMEQzRjAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEYyQzEzODU0OEEKKzoxMEQ0MDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBQTExMjYKKzoxMEQ0MTAwMEIwMDAwMEEwMDIwMDAwQjIwMDAwMDAwMDAwMDAwMDBDRkMKKzoxMEQ0MjAwMEFCRTRCMDMyMDAwMEFGMTE4MDAxMDA4MDAyNDBEMEI2MDIKKzoxMEQ0MzAwMDAwMDAwMDAwQTAwMDAwMjgwOTAwMDAzMjAwMDAwMDAwRTkKKzoxMEQ0NDAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwQjExMTA0MDEwMDgwQzIKKzoxMEQ0NTAwMDEyM0VGOEJBMDAwMEMyMTFBMDAwMDAwNDBENDBEMDk0QTIKKzoxMEQ0NjAwMDAwMDBCQjExODAwMTAwODBEMjgxOTJCNjAwMDBCQjExODgKKzoxMEQ0NzAwMDgwMDEwMDgwMjI4MUZDQjYwMDAwMDAwMEEwMDAwMDA0QjIKKzoxMEQ0ODAwMDBENDBEMDM0MDAwMDAwMDAwMDAwMDA3ODA5QzAyRjMyQTkKKzoxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAwMDAwNUMKKzoxMEQ0QTAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwNTYKKzoxMEQ0QjAwMEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyOTAKKzoxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwOTBGMTAxMDAzNDAwMDBDMjExRDMKKzoxMEQ0RDAwMDAwMDAwMEZDMDI4MDk3OTIwMDAwMDAwMEEwMDAwMDc4OEQKKzoxMEQ0RTAwMDA5QzAyRjMyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMDMyRTIKKzoxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjAwMDAwMDAwODYKKzoxMEQ1MDAwMDAwMDAwMDgwRjEwMUY4MzQwMDAwMDAwMDAwMDAwMDkwRUQKKzoxMEQ1MTAwMDAxNDBGODMyMDAwMDAwMDAwMDAwMDBGQzAyODA5NzMyNTkKKzoxMEQ1MjAwMDAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjAwMDAxNjEzNEUKKzoxMEQ1MzAwMDgwMDEwMDgwMDI0MEQwQjYwMDAwQzgxMTA0MDEwMDI4MUMKKzoxMEQ1NDAwMDA5MzRCMEJBMDAwMDE2MTM4MDAxMDA4MDAyNDBEMEI2NDIKKzoxMEQ1NTAwMDAwMDBDNTExQjAwMDAwODAwMjAwMDBCMDAwMDAwMDAwMTMKKzoxMEQ1NjAwMEEwMDAwMDA0MEQ0MEQwMzUwMDAwMDAwMDAwMDEwMDI4OUMKKzoxMEQ1NzAwMDA5MDAwMDUyMDAwMEM4MTFCMDAwMDBBODAyMDAwMEIyNkIKKzoxMEQ1ODAwMDAwMDAxNjEzMDQwMDg0QzAzN0FDQjBCMjAwMDAwMDAwRTUKKzoxMEQ1OTAwMEEwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMDAwMDAwMDc4MkMKKzoxMEQ1QTAwMEE5NERCMDMwMDAwMEQwMTE4MDAwMDA4MDAyNDBCMEI2MUMKKzoxMEQ1QjAwMDAwMDAxNjEzODAwMDAwODAxMjQwQjBCNjAwMDAwMDAwOEEKKzoxMEQ1QzAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDAwMDA4NDA4QTEKKzoxMEQ1RDAwMDBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMEU3MjUwMTMyNTMKKzoxMEQ1RTAwMDAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTAwMDAwMDAwNzkKKzoxMEQ1RjAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDAwMTgwMDAwMUEKKzoxMEQ2MDAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEYyQzEzODU0NzcKKzoxMEQ2MTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGRDEKKzoxMEQ2MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDkxMTFDNDAwMjgwMjAKKzoxMEQ2MzAwMDA2QzA5MkIyNDQwMDAwMDAwMDAxMDBGOEEyOEQyRjUyRjMKKzoxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1OTIzMDAwMDAxNjEzQTkKKzoxMEQ2NTAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwMDgKKzoxMEQ2NjAwMDkyQkE5N0JDMDAwMDE2MTMxMjAwMDA2ODAyQzU5MkIwNkYKKzoxMEQ2NzAwMDAwMDAxNjEzMEIwMDAwODAwMjAwMDBCMDI0MDAwMDAwMjAKKzoxMEQ2ODAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NzMKKzoxMEQ2OTAwMDA5QzA5MkQyMDAwMDAwMDAwMDAxMDA3MDFGMDBGNzVBN0MKKzoxMEQ2QTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDJDMDAwMDAwM0UKKzoxMEQ2QjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NDMKKzoxMEQ2QzAwMDA5ODA5MkQyMDAwMDAwMDBENTA4MDAwMDA3ODA5MjMyNDUKKzoxMEQ2RDAwMDAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMjAwNDAwMDgwMzUKKzoxMEQ2RTAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwMDAwMENBNDEwMUUwQTYKKzoxMEQ2RjAwMDA2ODA5MjMyMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyNjkKKzoxMEQ3MDAwMDAwNjAwMDAwMDAwMTAwMDgwODgwMzY3MjAwMDBGRkZGODIKKzoxMEQ3MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwMDAwMDgwQ0UKKzoxMEQ3MjAwMEEyODAyRkI2MDAwMDE2MTMwNDAxMDA4MDYyODAyREJDNzkKKzoxMEQ3MzAwMDAwMDAwMDAwMDAzODAwMDAwNzgwOTIzMjAwMDAwMDAwNjYKKzoxMEQ3NDAwMDAwMzAwMDAwMDdDMDJDMzIwMDAwMDAwMENBM0QwMDBDNzEKKzoxMEQ3NTAwMDA3ODA4MzMyMDAwMDAwMDAxMjAxMDA0ODAyQzA4MDcyN0UKKzoxMEQ3NjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGODAKKzoxMEQ3NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDA0NTcwMTgwQkIKKzoxMEQ3ODAwMDAyQzA2RTdDMDAwMDAwMDAwMDU3MDFFQzA2ODA5MjcyMUYKKzoxMEQ3OTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA2NDExMDQKKzoxMEQ3QTAwMDAwMDAwMDMwMDMwMDM4RjIzMzAwMDAwMDAwMDAwMDEwRDkKKzoxMEQ3QjAwMDA5MDAzNjMyMTAwMDgwMTIwMDAwMDAxNDE5QTAyQ0Q5ODQKKzoxMEQ3QzAwMDAwMDBGQjExOUQxMTAyMEMwOTAwNkVCMjAwMDBGQzExNUIKKzoxMEQ3RDAwMDAwRjAwMTFDMDkwMDZFOTIwMDAwMDAwMDAwQjgwMTFDNUUKKzoxMEQ3RTAwMDA5MDA2RTMyMDAwMEZFMTEyQ0NEMDExODA5ODA2RUIyQzYKKzoxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMENDOUMxOTAzNDAwMDAwMjEyQkIKKzoxMEQ4MDAwMDNCMjkwMjA0MDk4MDZFQjIwMDAwMTYxMzgwRDYwMTgwMDUKKzoxMEQ4MTAwMDUyQzA2RUI2MDAwMDAwMDAwMEQ2MDFFQzU2QzA2RTM0NTcKKzoxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMENCOUMxOTAzNDAwMDAxMjEyOEEKKzoxMEQ4MzAwMDAwQTgwMTA4MDkwMDZFRjIwMDAwMDYxMjlEMDEwMDgwOTgKKzoxMEQ4NDAwMDE3RTA5MEJBMDAwMDAwMDAwMDMwMDA4MDA3QzA5MTMyNUQKKzoxMEQ4NTAwMDAwMDAwOTEyMDAzODAwODAwNzAwRUU5MjAwMDAwOTEyNTMKKzoxMEQ4NjAwMDA0MDEwMDgwMDJDMDkxQkMwMDAwMDAwMDAwQjgwMUUwOEIKKzoxMEQ4NzAwMDA2MDBFRTMyMDAwMDAwMDAwMDcwMDFFMDA2MDA4NjMyNzMKKzoxMEQ4ODAwMDAwMDAwQzEyMzkwODAwODAwN0MwODVCMjAwMDAxNjEzOTIKKzoxMEQ4OTAwMDgwMDAwMDgwQzI4MTJGQjYwMDAwMDAwMEQ5QzkwMUU4RDUKKzoxMEQ4QTAwMDA2ODA5MTMyMDAwMDAwMDBDODExMDA4MDA3NDA5MDMyQ0QKKzoxMEQ4QjAwMDAwMDAwRjEyM0IyMTAwODAwNzAwODZCMjAwMDAwMDAwMkMKKzoxMEQ4QzAwMERCMDAwMDYwMTgwMDg2M0EwMDAwMDAwMDU4NzgwMUUwOTQKKzoxMEQ4RDAwMDE2MjA4NjNBMDAwMDAwMDAwMDI5MDA4MDA3MDA4NTcyQUIKKzoxMEQ4RTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEyMDAKKzoxMEQ4RjAwMDAyMEMwMjgwQTI5QjkwQkMwMDAwMDAwMDAwMDAwMjc4OTUKKzoxMEQ5MDAwMDI5MDA2RTM2MDAwMDE2MTIwMjAwMDA4MEUyQTU5MEJDQ0QKKzoxMEQ5MTAwMDAwMDAwMDAwMDAwMDAwMDgwOTAwMDAzMjAwMDAxODEyOUEKKzoxMEQ5MjAwMDlGODkwMTc4NDkyMTZFQkMwMDAwMDAwMDAwMDAwMDc4NEEKKzoxMEQ5MzAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwOEU5QTU5MDNGNDcKKzoxMEQ5NDAwMDAwMDAxRTEyMDQyMDAyMDg4OTlCOTBCRTAwMDAwMDAwMDcKKzoxMEQ5NTAwMDAwMEEwMjU4Qjg5QjkwMzYwMDAwMDAwMDAwMDAwMDc4RDIKKzoxMEQ5NjAwMDQ5QTE5MDNBMDAwMDAwMDA5Rjg4MDE4MDgyOUI5NzdDMkIKKzoxMEQ5NzAwMDAwMDAwMDAwMDA4OTAxRTAwNjgwOTc3MjAwMDAwMDAwQUUKKzoxMEQ5ODAwMDAwMEIwMjU4Qjg5QjkwNzYwMDAwRkZGRjAwMDAwMDgwNUIKKzoxMEQ5OTAwMDAyMDAwMDkwMDAwMDI3MTI4MDAxMDA4MEEyODAyRkI2QjQKKzoxMEQ5QTAwMDAwMDAyNTEyMTIwMTAwNzgwOUMwMjFCMjE4MDAzNjAwQ0IKKzoxMEQ5QjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTYxMzA0MDEwMDgwNDgKKzoxMEQ5QzAwMDAyODAyREJDMDAwMDI3MTJDQTAwMDBEODAyNDA4NDkyQjkKKzoxMEQ5RDAwMDE1MDAxNjEzMDQwMTAwNzhFOTY1MTdCODAwMDAwMDAwNkYKKzoxMEQ5RTAwMDAwMDAwMEY4QTI4MDJGMzUwMDAwMTYxMzA0MDEwMDgwMEIKKzoxMEQ5RjAwMDAyNDAyREJDMDAwMDE2MTMwNDAwMDA4MDAyODAyREJDRTQKKzoxMERBMDAwMDAwMDAwMDAwMDA0MDAwNkM4ODFDODMzQTAwMDAwMDAwMDkKKzoxMERBMTAwMDAwNDgwMDRDMDgwMDcyMzIwMDAwMTYxMzA4NTAwMDE4MkQKKzoxMERBMjAwMEM4MjA3MkJDMDAwMDAwMDAwNjAwMDA4MDYyQTA4MjdDNUEKKzoxMERBMzAwMDAwMDAxNjEzOUYwMDAwMTQxODQwODFCQzAwMDAxNjEzNEMKKzoxMERBNDAwMDAyMDAwMDIwODgwMTgyQkEwMDAwMDAwMDAwMDAwMEQ4MTcKKzoxMERBNTAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyNTMKKzoxMERBNjAwMDAwMDAxNjEzMDQwMTAwODAwMjAwMzZCQzA3MDAwMDAwMEQKKzoxMERBNzAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMDAwMDAwMTAwMDAwOEIKKzoxMERBODAwMDA3MDA4MjMyMDAwMDAwMDBDQTE5MDAwMDA3NDA4MjMyRkQKKzoxMERBOTAwMDAwMDAxNjEzMTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwNkMKKzoxMERBQTAwMDAwMDEwMEQ4MDI0MDg0NzIwMDAwRkZGRjAwMDAwMDgwRTcKKzoxMERBQjAwMDAyMDAwMDkwMkIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMjgKKzoxMERBQzAwMDAwMDA4MDEyMDAwMDAwMTQwOUMwODVEMjAwMDA0MjEyM0MKKzoxMERBRDAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwM0UxMjFGNDAwMjg0MjIKKzoxMERBRTAwMEU2MDEwMEI0MDAwMDQyMTIxRDAxMDBGODIyODEyRkI0QUIKKzoxMERBRjAwMDAwMDA0MjEyMDAwMDAwRjg2MjgxMkY5NTAwMDA0MDEyRTEKKzoxMERCMDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4Q0QKKzoxMERCMTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyMjAKKzoxMERCMjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAxNjEzNTEKKzoxMERCMzAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwMDAwMDAwMDAwMDc4RjcKKzoxMERCNDAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMTcKKzoxMERCNTAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAwMDAwNzYKKzoxMERCNjAwMDFEMDAwMDgwMDIwMDAwNzAwMTAwMDAwMDA0MDEwMDgwMjAKKzoxMERCNzAwMEEyOEQyRjcwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMTcKKzoxMERCODAwMDAwMDAwMDAwMDAwMTAwRjgwMjgxMkY3NDAwMDBGRkZGNzgKKzoxMERCOTAwMDAwMDAwMDgwMDIwMDAwOTA4MEE4MDAwMDA0MDAwMDgwQzcKKzoxMERCQTAwMDgyOEQyRjcwMDAwMDUyMTI4MDAxMDA4MEQyODAyRkI2MkIKKzoxMERCQjAwMDAwMDAxNjEzODAwMDAwODA3MjgxMkZCNjAwMDA1MjEyMDAKKzoxMERCQzAwMDA0QjAwMDgwMDIwMDZFQkMwMDAwMDAwMDAwMDAwMEY4RkQKKzoxMERCRDAwMDcyODEyRjM0M0QwMDU1MTIxMjAxMDAyQzgyQ0QyRUIyREQKKzoxMERCRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA1NTEyOTMKKzoxMERCRjAwMDgwMDEwMDgwRjI4MDJGQjYzQzAwNTgxMjEyMDEwMDJDRTgKKzoxMERDMDAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUEKKzoxMERDMTAwMDAwMDA1ODEyODAwMTAwODBCMjgwMkZCNjM1MDAxNjEzMjQKKzoxMERDMjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4OEYKKzoxMERDMzAwMDQyODEyRjM0ODAwMDAwMDAwNDAwMDA4MDgyOEQyRjcwMEMKKzoxMERDNDAwMDAyMDAwMDAwMDQwMTAwODBBMjhEMkY3MDNCMDAxNjEzMUIKKzoxMERDNTAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDEwMEY4NUUKKzoxMERDNjAwMDEyODEyRjc0MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNkUKKzoxMERDNzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAxNjEzNEIKKzoxMERDODAwMDA0MzEwMjgwQTJEQjJDQkMwODAwMDAwMDAwMTgwMUU4NkYKKzoxMERDOTAwMDc2MjA4MTM5RUVGRjAwMDAwMDAxMDBGODgyOEQyRjcxOUYKKzoxMERDQTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA2NjEyRUMKKzoxMERDQjAwMDAwMDAwMTM4MDhDMDZFRjIwMDAwMDAwMDEyMDEwMDQ4QTgKKzoxMERDQzAwMDAyQzA4MDcyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNjUKKzoxMERDRDAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDBFMDAwMDAwMjYKKzoxMERDRTAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMzgwMTE0RDQKKzoxMERDRjAwMDA5MDA2RUQyMDAwMDZBMTIwNDM4MDE3ODA5MDA2RUIyODEKKzoxMEREMDAwMDAwMDAwMDAwMDAzODAxRTAwNjAwMDAzMjAwMDAxNjEzOTkKKzoxMEREMTAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwMDAwMENBMTEwMDAwMjEKKzoxMEREMjAwMDA3ODA4MjMyMDAwMDZFMTIyRTE5MDAwMDA3ODA5N0IyMjEKKzoxMEREMzAwMDAwMDAwMDAwMDAwMDAwMjhFOTgxOTIzNDAwMDA3MzEyMDYKKzoxMERENDAwMDI3MzEwMDAwMDdDMDJDQjIwMDAwMDAwMEQ1MDgwMDAwRjkKKzoxMERENTAwMDA3MDA4NzMyMDAwMDAwMDBDNzAwMDAyOEU5ODA5MjM0RTUKKzoxMERENjAwMDAwMDAwMDAwMDA0MDAxRTAwNjAwODczMjAwMDAwMDAwRDMKKzoxMERENzAwMDAwMDAwMDA4RDg4MTgwMzQxMDAwMDAwMDAwMzkwMDAwNDUKKzoxMEREODAwMEU3QTA5Mjc5MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwRjEKKzoxMEREOTAwMDE0MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNUMKKzoxMEREQTAwMDAwMDAwMDE0MDk0MDkwRDIwMDAwMTYxMzEyMDAwMDQ0MzUKKzoxMEREQjAwMDEyRTQzOEIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QzQKKzoxMEREQzAwMDAwMDA3RDEyMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzQUIKKzoxMERERDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNzgxMjY3MDAwMEY4NTIKKzoxMERERTAwMEEyODAyRkI1MDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyNzUKKzoxMERERjAwMDAwMDAxNjEzMDQwMTAwODA3MjgwMkRCQzAwMDAwMDAwOUEKKzoxMERFMDAwMDAwMDEwMEQ4MDI0MDAwNzIwMDAwRkZGRjAwMDAwMDgwMDcKKzoxMERFMTAwMDAyMDAwMDkwMUIwMDAwMDAwMDAwMDAxMDc5MEE5MTM5RjgKKzoxMERFMjAwMDBGMDAwMDAwMDAwMDAwMTAzOTBCOTEzOTBDMDAwMDAwQjkKKzoxMERFMzAwMDAwMDAwMDEwNTkwQTkxMzkwOTAwODMxMkYxMDEwMDEwMDUKKzoxMERFNDAwMDY5MEI5MUI5MDMwMDAwMDAwMDI0ODZBODgyOEQ2QzM3MEQKKzoxMERFNTAwMDAwMDAwMDAwMDAwMDg4RTAwNzAwOTEzMjAwMDAwMDAwOTAKKzoxMERFNjAwMDAwMDA4OEUwMDc0MDkxMzIwMEMwODkxMjAyMDEwMDgwNjIKKzoxMERFNzAwMDgyOEQyQUJDMDAwMDhBMTJFMTI0ODZDODA2MDAwMDkyMjYKKzoxMERFODAwMDAzMDAwMDAwRTEyNDg2Qzg4NjhEMkEzNjAwMDAwMDAwQzkKKzoxMERFOTAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwRkZGRjAwMDAwMDgwMzEKKzoxMERFQTAwMDAyMDAwMDkwMDAwMDkyMTIwNDMwMDA4MDgyOUI4MUJDMkUKKzoxMERFQjAwMDAwMDAxNjEzMEQwMTAwODAwMjAwMDBCMDAwMDAxNjEzRDAKKzoxMERFQzAwMDlGM0MwMDE0Mjg4MDZFQkMwMDAwMTYxMzgwMDAwMDgwNjgKKzoxMERFRDAwMEEyODAyRkI2MDAwMDAwMDBDQTAxMDBGODAyODAyRjM1OTIKKzoxMERFRTAwMDAwQTAxNjEzMTIwMDAwNDBBMjhEMzlCMjAwMDA5NDEyNTcKKzoxMERFRjAwMDgwMzkwMDgwRTI4MDZFQjYwMDAwMTYxMzgwMzgwMDgwMDIKKzoxMERGMDAwMEYyODA2RUI2MDBDMDE2MTMwNDAxMDA4MEEyOEQyRkIwRkYKKzoxMERGMTAwMDAwQzA5QTEyMDQzODAwNzg4OThENkVCMDEwMDA5QTEyRjEKKzoxMERGMjAwMDlGMDEwMEY4RTJBNTJGQjkwMDAwMTYxMzA0MDAwMDgwM0QKKzoxMERGMzAwMDAyQzBFRUJDMDAwMDAwMDAwMDU4MDFFQzA2QzBFRTMyNEEKKzoxMERGNDAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDAwMDAwMUYKKzoxMERGNTAwMDA0MjgwMDE4MDkwMDZFNzIwMDAwRTMwRjAwMDAwMDgwMjIKKzoxMERGNjAwMDAyMDAwMEYwMDAwMEM3MEYwMEE4MDEyMDA5MDA2RTkyMTcKKzoxMERGNzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDBBNzEyRDgKKzoxMERGODAwMDA0QjAwMDgwODI5QjgxQkMwMDAwMTYxMzBEMDEwMDgwNEMKKzoxMERGOTAwMDAyMDAwMEIwMDAwMDE2MTM5RkJDMDAxNDI4ODA2RUJDNjUKKzoxMERGQTAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAxNjEzMTgKKzoxMERGQjAwMDgwQjgwMDgwODI4MDZFQjYwMDAwMDAwMDAwQjgwMEU4RTMKKzoxMERGQzAwMDg2ODA2RTM0MDAwMDAwMDBDQTAxMDBGODQyODAyRjM1QzAKKzoxMERGRDAwMDA4QTAwMDAwMTIwMTAwNDBBMkNEMzk3MjAwMDAxNjEzMDMKKzoxMERGRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwQjgwMDgwM0UKKzoxMERGRjAwMDgyODA2RUI2MDAwMDAwMDAwMEI4MDBFODg2ODA2RTM0QjMKKzoxMEUwMDAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDAwMDBGRkZGMUYKKzoxMEUwMTAwMDAwMDAwMDgwMDIwMDAwOTAyODAwMDAwMDAwMDAwMDEwQjYKKzoxMEUwMjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA5MEQyRUUKKzoxMEUwMzAwMDAwMDBCMDEyMzNDRDAxQkMwODgwNkVCMjAwMDBFRTEyQjkKKzoxMEUwNDAwMDAwMDAwMDI4MjkyMkVFREMwMDAwQjUxMjAwMDAwMDgwNEMKKzoxMEUwNTAwMDAyMDAwMDkwMDAwMEI1MTIwNEI4MDEyODA5MDA2RUIyNTkKKzoxMEUwNjAwMDAwMDBCNTEyOUY3MTAxODBDMjIxNkVCQzAwMDAxNjEzMjIKKzoxMEUwNzAwMDlGMDAwMDI4QTkyNEVFQkMwMDAwRUUxMjAwMDAwMDI4M0EKKzoxMEUwODAwMDE5ODA5MkRGMDAwMDAwMDAwMDAwMDA4MDAyMDAwMDMwRDQKKzoxMEUwOTAwMDAwMDBDOTEyMDI4MTAxODA4MjlCOTBCQzAwMDAxNjEzMEYKKzoxMEUwQTAwMDA0MDAwMDgwMDI4MDkwQkNFRTA1QzExMjA2MEMwMjgwQzQKKzoxMEUwQjAwMDgyOEQ2RUJDMDA5MDRDMDAwMDAwMDA4NDAyMDAzNzMyNUMKKzoxMEUwQzAwMDAwMDBCQjEyQjgwMTAwODAwMjAwMDBCMDAwMDBCOTEyQ0QKKzoxMEUwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEM0NkEKKzoxMEUwRTAwMDAzODA5MDMyMDAwMDAwMDAwMEIwMDFFMDk2MjE2RTNDRjkKKzoxMEUwRjAwMDAwMDAwMDAwNjE5ODAxRTAwNjAwODczMjAwMDAwMDAwODcKKzoxMEUxMDAwMDAwRDQwMUVDMDYwMDAwMzIwMDAwMDAwMEE4MDAwMDc4RjYKKzoxMEUxMTAwMDQ5NDAzQzM3MDAwMENFMTIwMDAwMDAwOEU5QTU5MDlBNjMKKzoxMEUxMjAwMDYwODkyMDAwMDAwMDAwODQwMjAwMzczMjAwMDBDNDEyMjEKKzoxMEUxMzAwMEI4MDEwMDgwMDIwMDAwQjAwMDAwQzIxMjAwMDAwMDgwQTAKKzoxMEUxNDAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBDNDAzODA5MDMyMzQKKzoxMEUxNTAwMDAwMDAwMDAwMDBCMDAxRTA5NjIxNkUzQzAwMDAwMDAwQ0QKKzoxMEUxNjAwMDYxOTgwMUUwMDYwMDg3MzIwMDAwMDAwMDAwRDQwMUVDNTUKKzoxMEUxNzAwMDA2MDAwMDMyMDAwMENFMTJBODAwMDAwODE5OEY5MDlBMDUKKzoxMEUxODAwMDAwMDAwMDAwMDAwMDAwNzg5OUExODkzRTAwMDAwMDAwMTYKKzoxMEUxOTAwMDAwMDAwMDA4RTlBNTkwM0EwMDAwMDAwMDAwQjAwMUUwOEUKKzoxMEUxQTAwMDk2MjE2RTNDMDAwMDAwMDA2MTk4MDFFMDA2MDA4NzMyNzUKKzoxMEUxQjAwMDAwMDAwMDAwMDBENDAxRUMwNjAwMDAzMjAwMDBEMTEyODMKKzoxMEUxQzAwMDA2MDAwMDgwNzJBMjkwQkMwMEMwRkYzRjAwODAwMUUwMEEKKzoxMEUxRDAwMDA2MDAzNzMyMDAwMDAwMDAwMDAwMDAwODA5QzA4OTMyNDQKKzoxMEUxRTAwMDAwMDBENjEyMDQ3OTAxODA4MjFCODdCQzAwMDBENDEyODMKKzoxMEUxRjAwMDA0QjAwMDgwMDIwMDZFQkMwMDAwRDkxMkQ5OTAwMUUwOEEKKzoxMEUyMDAwMDA2ODA5MDkyMDAwMERDMTI4MDAwMDA4MDUyODEyRkI2QzAKKzoxMEUyMTAwMDAwMDBEQzEyRDU0MTAxRTAwNjAwODc5MjAwMDBEOTEyMEYKKzoxMEUyMjAwMDNDOTAwMUUwMDY4MDkwQjIwMDAwMTYxMzgwMDEwMDgwNEYKKzoxMEUyMzAwMDkyODEyRkI2MDAwMDAwMDAwMEM4MDFFODA2QzA4QjMyQjIKKzoxMEUyNDAwMDAwMDAwMDAwOTUwMTAwODAwMjgwMkY3MjAwMDBERDEyQTYKKzoxMEUyNTAwMDlGNDEwMTgwODIxQjg3QkMwMDAwMDAwMDAwMDEwMDgwRkMKKzoxMEUyNjAwMDAyMDAwMDcwMDAwMDAwMDBEOTkwMDFFMDA2ODA5MDMyQUEKKzoxMEUyNzAwMDAwMDAwMDAwMDAwMTAwRjg3MjgwMkY3NDAwMDBGRkZGMTIKKzoxMEUyODAwMDAwMDAwMDgwMDIwMDAwOTAyNzAwMDAwMDAwMDAwMDEwNDUKKzoxMEUyOTAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5NDA4N0QyQzUKKzoxMEUyQTAwMDAwMDBFNzEyOUZEODAxODAyMjIxNkVCQzAwMDAwMDAwMTAKKzoxMEUyQjAwMDBCMDEwMDgwMDIwMDAwNzAwMDAwRTcxMjlGRTAwMTgwNjcKKzoxMEUyQzAwMEMyMjE2RUJDMDAwMDAwMDAwQjAxMDA4MDAyMDAwMDcwNDMKKzoxMEUyRDAwMDAwMDBFNzEyOUZCMDAxODBEMjIxNkVCQzAwMDAwMDAwNTgKKzoxMEUyRTAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwRTkxMjA2NjgwMTgwNTEKKzoxMEUyRjAwMDgyNUI4N0JDMDAwMDAwMDAwMDY4MDFFMDA2NDA4NzMyQjYKKzoxMEUzMDAwMDAwMDBFQjEyMzdCMDAxRTAwNjQwODdCMjAwMDAwMDAwQzkKKzoxMEUzMTAwMDAwMDAwMEY4RDI4MDJGMzQwMDAwMDAwMDAwRDgwMUUwOTcKKzoxMEUzMjAwMDA2ODA4NDMyMDAwMDAwMDAwMEUxMDFFMDA2MDA4NzcyRjAKKzoxMEUzMzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQTQKKzoxMEUzNDAwMDA4MDAwMDgwMDI4MDkyQkMwMDAwRkIxMjA0QzEwMTg0MUUKKzoxMEUzNTAwMDAyMDA2RUIyMDUwMDAwMDAwMEMwMDFFODg2OEQ5MjM3MTEKKzoxMEUzNjAwMDAzMDAwMDAwMDBDNDAxRTg4NjhEOTIzNzAwMDAwMDAwMjEKKzoxMEUzNzAwMDAwMDAwMDgwMDIwMDAwMzAwMzAwMDAwMDAwQzAwMTJDRkIKKzoxMEUzODAwMDg5OEQ2RTM2MDAwMDAwMDAwMEM0MDEyQ0E5REI5MjNBOTIKKzoxMEUzOTAwMDAwMDAwMDAwMDAwMDAwMkMyOUMwOTIzNjAwMDAwMDAwQTAKKzoxMEUzQTAwMDAwMDAwMDJDMTlGQjkyM0YwMDAwMDAwMDAwMDAwMDI4MzQKKzoxMEUzQjAwMDI5ODA5MjNBMDAwMDAwMDAwMDAwMDAyQ0E5RTQ5MjNGNUUKKzoxMEUzQzAwMDAwMDAwMDAwNkZDQzAxRTgyNkZCOTIzRTAwMDAwMDAwMzgKKzoxMEUzRDAwMDAwQjkwMUUwMDYwMDAwNTIwMDAwMDAwMDAwMDAwMDk0QjcKKzoxMEUzRTAwMDAyODA5MjMyMDAwMDAwMDAwMEMwMDFFMDA2NDAyODMyQTYKKzoxMEUzRjAwMDEwMDAwMDAwNkZDQzAxRTg4NkNEMkEzNjAwMDAwMDAwMzYKKzoxMEU0MDAwMDAwQjkwMUUwMDYwMDAwNTIwMDAwRkZGRjAwMDAwMDgwOUMKKzoxMEU0MTAwMDAyMDAwMDkwMDAwMDE2MTMwNEIwMDA4MDAyMDA2RUIyRUIKKzoxMEU0MjAwMDAwMDAwMDAwMDA5MDAxQkMwODAwNkUzMjAwMDAwMDAwRjcKKzoxMEU0MzAwMDAwQjAwMUJDODhEQjhCM0UwMDAwMDAwMDAwOTgwMUJDRUUKKzoxMEU0NDAwMDg4REI4QjNBMDAwMDBDMTM5RjAwMDBCQzg4RTE4QkJDN0EKKzoxMEU0NTAwMDAwMDAwQzEzMDQwQzAyNDBBOERCOEJCRTAwMDAwMDAwN0YKKzoxMEU0NjAwMDAwQjAwMDA0ODgxQjg0M0UwMDAwMDkxMzA0QjEwMDgwNDIKKzoxMEU0NzAwMDgyNUI4MEJDMDAwMDAwMDAwMDAxMDBGOEMyODAyRjc0QTUKKzoxMEU0ODAwMDAwMDAwMDAwMDQwQzAyODBBMjVCODA3QzAwMDAwQzEzRTIKKzoxMEU0OTAwMDA0NjgwMTc4MTkwMDZFQjYwMDAwMDAwMDAyMDAwMDgwRDgKKzoxMEU0QTAwMEUyNjU4MDdDMjkwMDAwMDAwMDAwMDAxMDA5MDAzNjMyN0YKKzoxMEU0QjAwMDAwMDA4MDEyMDAwMDAwMTQwOUMwOEJEMjAwMDAwMDAwOTAKKzoxMEU0QzAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRkZGRjAwMDAwMDgwQ0UKKzoxMEU0RDAwMDAyMDAwMDkwMDAwMDE2MTMwNDMxMDI4MEEyREIyQ0JDNjUKKzoxMEU0RTAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjA4MDAwMDAwRjQKKzoxMEU0RjAwMDAwMUMwMUU4NzYyMDgxMzlFRUZGMDAwMDAwMDEwMEY4RTEKKzoxMEU1MDAwMDgyOEQyRjcxMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNEMKKzoxMEU1MTAwMDAwMDAxNjEzMDAwMDAwQjQwRjQwRkI5NDAwMDAwMDAwNDAKKzoxMEU1MjAwMDAwMDAwMDg4MEY0MDJCMzIwMDAwMDAwMDAwMDAwMDkwMjcKKzoxMEU1MzAwMDBGMDAyODMyMDAwMDAwMDAwMDAwMDA5NDBGMDAyOTMyNzQKKzoxMEU1NDAwMDEwMDAwMDAwMDAwMDAwQjg1RjQ2MTgzOUZGMDAwMDAwMEUKKzoxMEU1NTAwMDAwMDAwMDlDMEYwMDM2MzIwMDAwMDAwMDAwMDAwMDlDMEMKKzoxMEU1NjAwMDVGQ0FGOTM1MDAwMDAwMDAwMDAwMDA0NDAzQzBGOTMyMjIKKzoxMEU1NzAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwMDAzMjQxMDAwMDEwMzEKKzoxMEU1ODAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0NUIKKzoxMEU1OTAwMDAzMDAwMDMyNDAwMDAwMTAwMDAwMDBFMDAzMDAzNzMyQUEKKzoxMEU1QTAwMDAwMDAyNTEzNjcwMDAwOTgwRjgwMkFCMjAwMDAwMDAwQzkKKzoxMEU1QjAwMDAwMDAwMEE4MDIwMDAwMzIwMDAwMjMxMzEyQzE4NkUwMTAKKzoxMEU1QzAwMDA3QzAyMUIyMDAwMDAwMDAwMEI4ODZDMDA2ODAyQTMyRDEKKzoxMEU1RDAwMDRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjI3MTMzODE0MTUKKzoxMEU1RTAwMDAwMDAwMEIwMEYwMDM2OTIwMDAwMDAwMDAwMDAwMDlDMDgKKzoxMEU1RjAwMDAyMDAwMDMyMDAwMTI0MTQwMDAwMDBBQzBGMDAzNkQyRUIKKzoxMEU2MDAwMDAwMDAwMDAwMDAwMDAwQUMwRjgwMkEzMjAwMjAwMDAwNTMKKzoxMEU2MTAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDAwMDAwMDlDNEMKKzoxMEU2MjAwMDBGMDA3RTMyMDAwMDAwMDAwMDAwMDBBMDBGMDA3RTMyQ0MKKzoxMEU2MzAwMDAwMDAwMDAwMDAwMDAwQTQwRjAwN0UzMjAwMDAwMDAwNzcKKzoxMEU2NDAwMDAwMDAwMEE4MEYwMDdFMzIwMDAwMDAwMDAwMDAwMEE4QkIKKzoxMEU2NTAwMDAyQzBGQTMyMDAwMDAwMDAwMDAwMDBFMDA3QzBGOTMyRkEKKzoxMEU2NjAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwRkEzMjAwMDAwMDAwOTcKKzoxMEU2NzAwMDAwMDAwMEUwMDc0MEZBMzIwMDAwM0IxMzAwMDAwMEUwMTkKKzoxMEU2ODAwMDA3ODBGQUQyMDAwMDAwMDAwMDAwMDBFMDA3ODBGQjMyQTMKKzoxMEU2OTAwMDAxMDA2MjEzMDQwMTAwQjQ4RjRERkJCMDAyMDAwMDAwQzIKKzoxMEU2QTAwMDAwMDAwMEEwMDIwMDAwMzk0MDgwMDAwMDAwMDAwMDBDQzMKKzoxMEU2QjAwMEFCQ0RCMDMyMTAwMDAwMDAwMDAwMDAwQzVCQ0FCMDM5RDYKKzoxMEU2QzAwMDAwMDAwMDAwMDAwMDAwMEMyQkZFQjAzMjAwMDA2MTE0QkUKKzoxMEU2RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEY4MzAKKzoxMEU2RTAwMDAzMDAwMTMyMDAwMDAwMDAwMDAxMDBFMDA3ODAzRjUyRkIKKzoxMEU2RjAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDIzOTAwMDAwMDAwRDIKKzoxMEU3MDAwMDAwMDAwMDQ0NTMwQTE2MzUwMDAwMDAwMDAwMDAwMDlDODEKKzoxMEU3MTAwMDBGODA5NjMyMDAwMDAwMDAwMDAwMDBBMDBGQzA5NjMyNkIKKzoxMEU3MjAwMDAwMDAwMDAwMDAwMDAwQTQwRjAwOTczMkEyNjAwMzAwNjgKKzoxMEU3MzAwMDAwMDAwMDU4MDMwMDM3MzI0ODEzMDAwMDAwMDAwMDVDNUUKKzoxMEU3NDAwMDAzMDAzNjMyMDAwMDAwMDAwMDAwMDA1MDgzMEQwMDM0NEEKKzoxMEU3NTAwMDAwMDAwMDAwMDAwMDAwNDg4MzBEMDAzNDAwMDAwMDAwQUQKKzoxMEU3NjAwMDAwMDAwMDQ0NTMwQTAwMzQwMDAwMzYwMDAwMDAwMDgwMUUKKzoxMEU3NzAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDA2ODA5QzBGOTMyQUIKKzoxMEU3ODAwMDAwMDAwMDAwMDAwMDAwNkMwOTAwRkEzMjAwMDAwMDAwRTgKKzoxMEU3OTAwMDAwMDAwMDcwMDk0MEZBMzIwMDAwNUExMzAwMDAwMDgwQTcKKzoxMEU3QTAwMDAyMDAwMDkwMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5RkYKKzoxMEU3QjAwMDAwMDA0RjEzODAwMTAwODAxMjQwQjBCNjAwMDAwMDAwM0UKKzoxMEU3QzAwMDAwMDAwMDA0M0I0MEIwMzMwMDAwMDAwMDAwMDAwMDA0RTMKKzoxMEU3RDAwMEZENEJEMDM1MDAwMDUzMTMwMDAwMDAwQzBCMDA5NzkyNDYKKzoxMEU3RTAwMDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTAwMDA1MzEzRUIKKzoxMEU3RjAwMDAwMDAwMDA0NkIwMTk3OTQwMDAwNTMxMzEyMDAwMDY4OUUKKzoxMEU4MDAwMDA5NDAyMEIyMDAwMDU0MTMxMjAwMDA2QzA5NDAyMEIyRUQKKzoxMEU4MTAwMDBEMDAwMDAwMDAwMDAwRkNBMkU1MTYzODAwMDA1OTEzQUUKKzoxMEU4MjAwMDlGMDAwMDgwMDI4MDk2QjIwMDAwMDAwMDAwMDAwMDcwOEYKKzoxMEU4MzAwMDA5QzA5NjMyMDAwMDVBMTMwMDAwMDA2QzA5QzBGRDkyMTYKKzoxMEU4NDAwMDAwMDA1OTEzMTIwMDAwNzAwOTQwMjBCMjAwMDAwMDAwQkYKKzoxMEU4NTAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4MTAKKzoxMEU4NjAwMDAyMDAwMDMyMDIwMDUzMTMwNDAxMDBCQ0FGMjUxN0I4QTgKKzoxMEU4NzAwMDA2MDA1MTEzMDQwMDAwQkNBRjY1MTZCODAwMDA0QzEzMkQKKzoxMEU4ODAwMDA0MDAwMDgwMjJDMEZCQkMwMDAwNkExMzA0MDAwMDgwNkEKKzoxMEU4OTAwMDEyQzFGQkJDMjAwMDUzMTMwNDAxMDA4MDgyQ0RGQkJDREQKKzoxMEU4QTAwMDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTAwMDA2QjEzMTIKKzoxMEU4QjAwMDAwMDAwMDgwMDIwMDAwRDA2NDEzMDAwMDAwMDAwMDg4MDcKKzoxMEU4QzAwMDgyQ0RGOTNBMDAwMDVBMTQwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMEU4RDAwMDAwMDA5MzEzMDAwMDAwODAwMjAwMDA5MDAwMDA5NDEzRDkKKzoxMEU4RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTgxMzAwMDAwMDgwRUIKKzoxMEU4RjAwMDAyMDAwMDkwMDAwMEEwMTMwMDAwMDA4MDAyMDAwMDkwQzEKKzoxMEU5MDAwMDAwMDBGOTEzMDAwMDAwODAwMjAwMDA5MDAwMDA1MzEzODMKKzoxMEU5MTAwMDAwMDAwMERDMEYwMDk3OTIwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEU5MjAwMDA3MDAwMzMyNDA0MjAwMDAwMDAwMDBBODAyMDAzNjMyMTcKKzoxMEU5MzAwMDAwMDAwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDAwMDAwRUMKKzoxMEU5NDAwMDAwMTAwMDAwMDcwMDk3MzIwMDAwMDAwMDAwMTgwMDAwQ0YKKzoxMEU5NTAwMDA3QzA5NjMyMDg4MDcwMTMxMjAwMDA0MDAyODAzNkIyNjEKKzoxMEU5NjAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDA3MjEzNzAKKzoxMEU5NzAwMDEyMDAwMDlDMEZDMDIxQjIxRDAwNzUxMzA0MDAwMDgwMUUKKzoxMEU5ODAwMDcyQkUxN0I4MDAwMDcyMTMwMDAwMDBGODFFODBFRjlBRTQKKzoxMEU5OTAwMDEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODAwMDA3ODEzQjEKKzoxMEU5QTAwMDA0MDAwMDgwMTJDMEY5QkMwMDAwNzIxMzAwMDAwMEY4REYKKzoxMEU5QjAwMDFFODBFRjlBMDAwMDAwMDAwMDAwMDA5QzBGMDA3RTMyRDUKKzoxMEU5QzAwMDAwMDAwMDAwMDAwMDAwQTAwRjAwN0UzMjAwMDAwMDAwRTgKKzoxMEU5RDAwMDAwMDAwMEE0MEYwMDdFMzIwMDAwMDAwMDAwMDEwMDAwRDMKKzoxMEU5RTAwMDA3MDBGQTUyMDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyMDQKKzoxMEU5RjAwMDRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjAwMDAwMDAwNzcKKzoxMEVBMDAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwNEUxNDAwMDAwMDgwMzkKKzoxMEVBMTAwMDAyMDAwMEQwMDAwMDUyMTQwMDAwMDA4MDAyMDAwMEQwNkMKKzoxMEVBMjAwMDAwMDAwMDAwMDAwMDAwMENDQkMxQjAzNDAwMDAwMDAwNkEKKzoxMEVBMzAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4MkUKKzoxMEVBNDAwMDAyMDAwMDMyMDAwMDgxMTEwMDAwMDAyODA5QzBCMEQyOEQKKzoxMEVBNTAwMDAwMDA4MjEzMDQwMDAwODAwMjgwOTJCMjAwMDA4NjEzM0UKKzoxMEVBNjAwMDEyMDAwMDlDMEZDMDIxQjIxRDAwODkxMzA0MDAwMDgwMTkKKzoxMEVBNzAwMDcyQkUxN0I4MDAwMDg2MTMwMDAwMDBGODFFODBFRjlBREYKKzoxMEVBODAwMDEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODAwMDA4QzEzQUMKKzoxMEVBOTAwMDA0MDAwMDgwMTJDMEY5QkMwMDAwODYxMzAwMDAwMEY4REEKKzoxMEVBQTAwMDFFODBFRjlBMDIwMDhFMTMwNDAxMDBCNDhGNERGQkIwNUMKKzoxMEVBQjAwMDAwMDA1MzEzMDAwMDAwODAwMjAwMDA5MDA4MDAwMDAwRDYKKzoxMEVBQzAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMDAwMDAwMDAwMEI0OEQKKzoxMEVBRDAwMDFGNDBGQjM1RkUwMDAwMDAwMDAwMDA0ODAzMDAzNjMyRjYKKzoxMEVBRTAwMDAwMDAwMDAwMDAwMDAwNDQwMzAwMDAzNDAwMDA4MjEzMTYKKzoxMEVBRjAwMDAwMDAwMDBDOEJDMUIwOTQwMDAwNUUxNDAwMDgwMDAwMDAKKzoxMEVCMDAwMDA3NDBGQTkyMDAwMDRFMTQwMDA4MDAwMDA3NDBGQUQyQjUKKzoxMEVCMTAwMDA4ODA5NTEzMTIwMDAwNTAwMjgwMzZCMjAwMDA1MzE0OTIKKzoxMEVCMjAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwNjAxNDAwMDAwMDgwOUYKKzoxMEVCMzAwMDAyMDAwMDkwMDAwODAwMDAwMDAwMDA5QzBGMDAzNjMyMjgKKzoxMEVCNDAwMDAwMDQwMTAwMDAwMDAwQTgwMjAwMzczMjAwMDAwMDAwQUQKKzoxMEVCNTAwMDAwMDAwMEEwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEUwMDEKKzoxMEVCNjAwMDA3MDBCMDMyMDAwMDAwMDAwMDAwMDBBMDEyMDAyQTNBQTYKKzoxMEVCNzAwMDAwMDA5QjEzMDQwMTAwOUMxRkMwRjlCQzAwMDQwMTAwQUQKKzoxMEVCODAwMDAwMDAwMEE4MDIwMDM3MzIwMjAwNUQxNDAwMDAwMEEwNUYKKzoxMEVCOTAwMEYyMEIwMDk5MDAwMEE4MTMwNDAxMDA4MDAyNDBGQUIyQjEKKzoxMEVCQTAwMDAwMDQwMTAwMDAwMDAwQTgwMjAwMzczMjAwMDBBQTEzOTAKKzoxMEVCQjAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwQjcxMzAwMDAwMDg0QjUKKzoxMEVCQzAwMDAyMDAwMEQyMDAwMDAwMDAwMDAwMDBFMDA3QzAzQzMyNUMKKzoxMEVCRDAwMDAwMDBBNDEzOEUwMTAwODAwMjQwMjhCMjAwMDQwMTAwNEUKKzoxMEVCRTAwMDAwMDAwMEE0MEYwMDM3MzIwMDAwOTMxMzAwMDAwMDgwRTMKKzoxMEVCRjAwMDAyMDAwMDkwMDAwNDAxMDAwMDAwMDBBNENGNERGQTNBOEEKKzoxMEVDMDAwMDAwMDA5MzEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNEMKKzoxMEVDMTAwMDAwMDAwMDlDMEYwMDAwMzIxMDAwMDAwMTAwMDAwMEFDNUEKKzoxMEVDMjAwMDBGMDAzNzMyMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwNEIKKzoxMEVDMzAwMDA4MDBBQzEzMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwODQKKzoxMEVDNDAwMDAwMDAwMDlDMEYwMDAwMzIwRTAwMDAwMTAwMDAwMEFDMkMKKzoxMEVDNTAwMDBGMDAzNzMyMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwMUIKKzoxMEVDNjAwMDBCMDBCMDEzMDQwMTAwODA4MkNERjlCQzIwMDAwMDAwMkQKKzoxMEVDNzAwMDAwMDAwMDlDMEYwMDM2MzIwRjAwMDAwMTAwMDAwMEFDQzUKKzoxMEVDODAwMDBGMDAzNzMyMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwRUIKKzoxMEVDOTAwMDI3MDBCNDEzMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwRkQKKzoxMEVDQTAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwMDAwMDAwMDAwMDlDRjUKKzoxMEVDQjAwMDBGMDAwMDMyMEYwMDAwMDEwMDAwMDBBQzBGMDAzNzMyREYKKzoxMEVDQzAwMDAwMDBCQzEzMDAwMDAwODAwMjAwMDBEMDIwMDBCOTEzMzcKKzoxMEVDRDAwMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDAwMDEwMDgwMkEKKzoxMEVDRTAwMDAyMDAwMDUwMDAwMDAwMDAwMDAwMDBFNDAzQzBGOTMyMDAKKzoxMEVDRjAwMDBEMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQkEKKzoxMEVEMDAwMDAwMDAwMEUwMDNDMEZBMzIwMDAwMDAwMDAwMDAwMEUwNTQKKzoxMEVEMTAwMDA3NDAzRTMyMDAwMDAwMDAwMDAxMDA5QzFGQzBGOTVBNkQKKzoxMEVEMjAwMDAwMDAwMDAwMDAwMDAwRTAwM0MwRjkzMjAwMDAwMDAwMTUKKzoxMEVEMzAwMDAwMDAwMEUwMDc0MDNFMzIwMDAwMDAwMDAwMDAwMDlDQTAKKzoxMEVENDAwMDFGQzBGOTNBRkYwMDAwMDAwMDAxMDBBQzhGQ0RGOTUwNjAKKzoxMEVENTAwMDAwMDAwMDAwMDAwMDAwOUMwRkMwMkYzMjAwMDAwMDAwRTcKKzoxMEVENjAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEUwOTMKKzoxMEVENzAwMDA3ODAzRTMyMDAwMDAwMDAwMDAwMDBGQzEyQzAyRjNBNjUKKzoxMEVEODAwMDBGMDBDNzEzMDQwMTAwODA4MkNEMkZCQzAwMDAwMDAwREIKKzoxMEVEOTAwMDAwMDAwMEUwMDc4MDNFMzIwMDAwMDAwMDAwMDEwMEZDOUYKKzoxMEVEQTAwMDAyQzBGOTUyMDAwMDAwMDAwMDAwMDBFMDA3MDAzQTMyMDMKKzoxMEVEQjAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwM0EzMjAwMDAwMDAwQzAKKzoxMEVEQzAwMDAwMDAwMEUwMDc4MDNBMzIwMDAwMDAwMDAwMDAwMEUwOTAKKzoxMEVERDAwMDA3QzAzQTMyMDAwMDAwMDAwMDAwMDA5QzBGQzAyRjMyMzQKKzoxMEVERTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAwMDAwRjMKKzoxMEVERjAwMDAwMDAwMEUwMDcwMDNEMzIwMDAwMDAwMDAwMDAwMEUwREQKKzoxMEVFMDAwMDA3NDAzRDMyMDAwMEQyMTM4MzAxMDBGQzEyQzAyRkJBMkMKKzoxMEVFMTAwMDAwMDAwMDAwMDAwMTAwRkMwMkMwRjk1MjAwMDAwMDAwRTgKKzoxMEVFMjAwMDAwMDAwMDlDMEYwMDAwMzIwQzAwMDAwMDAwMDAwMDA4RjEKKzoxMEVFMzAwMDczM0UwMDM5MDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyOUYKKzoxMEVFNDAwMDAwMDAwMDAwMDAwMDAwOUMxRkMwRjkzQTcwMDBENzEzQkEKKzoxMEVFNTAwMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDAwMDAwMDBDMUQKKzoxMEVFNjAwMDAzMDAwMDMyMDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyMjQKKzoxMEVFNzAwMDAwMDAwMDAwMDAwMDAwMTAwMzAwMDAzMjAwMDAwMDAwNEQKKzoxMEVFODAwMDAwMDAwMEUwMDcwMDMwMzIwMDAwMDAwMDAwMDAwMDlDOUQKKzoxMEVFOTAwMDBGMDAwMDMyMDAwMDAwMDAwMDAwMDBBMDBGQzAyOTMyNjcKKzoxMEVFQTAwMDAwMDAwMDAwMDAwMDAwOUMwMkMwRjkzMjAwMDAwMDAwRDkKKzoxMEVFQjAwMDAwMDAwMEE0MEZDMDJDMzIwMDAwMDAwMDAwMDAwMDlDRTUKKzoxMEVFQzAwMDAyMDBGQTMyMTgwMDAwMDAwMDAwMDAyQzczN0VGQTM5QUMKKzoxMEVFRDAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMjAwMDBFMDEzRjYKKzoxMEVFRTAwMDg1MDEwMDlDMUZDMEY5QkEwMDAwMDAwMDAwMDEwMDgwRUQKKzoxMEVFRjAwMDAyMDAwMDUwMDEwMDAwMDEwMDAwMDA5QzBGMDAzNzMyQUEKKzoxMEVGMDAwMDAwMDBDMTEzMDAwMDAwODAwMjAwMDBEMDBFMDBFRjEzQ0IKKzoxMEVGMTAwMDA0MDEwMDgwODJDREZBQkMwMDAwMDAwMDAwMDAwMEUwODcKKzoxMEVGMjAwMDA3MDAwMDMyMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyOEYKKzoxMEVGMzAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDBFOTEzQkMKKzoxMEVGNDAwMDAwMDAwMDlDM0ZDMEY5OUExQzAwRTkxMzA0MDEwMDgwRjYKKzoxMEVGNTAwMDgyQ0RGQUJDMDIwMEMxMTMwMDAwMDA5QzhGQ0RGOURBMEIKKzoxMEVGNjAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA1MDAxMDAwMDAyQ0IKKzoxMEVGNzAwMDAwMDAwMDlDMEYwMDM3MzIwMDAwQzExMzAwMDAwMDgwMjkKKzoxMEVGODAwMDAyMDAwMEQwMEUwMEY3MTMwNDAxMDA4MDgyQ0RGQUJDMEQKKzoxMEVGOTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDBGMzEzNTIKKzoxMEVGQTAwMDAwMDAwMDlDMUZDMEY5OUEyNjAwRjMxMzA0MDEwMDgwQTIKKzoxMEVGQjAwMDgyQ0RGQUJDMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwNzkKKzoxMEVGQzAwMDAwMDAwMDAwMDAwMDAwQTgwRjQwMjkzMjAwMDQwMTAwRUEKKzoxMEVGRDAwMDAwMDAwMEE4MDIwMDM3MzIwMDAwRTgxMzAwMDAwMDgwQTMKKzoxMEVGRTAwMDAyMDAwMEQwMDAwMEYyMTMwMDAwMDA4MDAyMDAwMEQwRjgKKzoxMEVGRjAwMDAwMDBDNTEzMDAwMDAwODAwMjAwMDBEMDAwMDAwMDAwRTcKKzoxMEYwMDAwMDAwMDAwMEUwMDc4MDE4MzIwMDAwMDAwMDAwMDAwMEUwNkYKKzoxMEYwMTAwMDA3NDAxQTMyMDAwMDAwMDAwMDAwMDBFMDA3MDAxQTMyMkEKKzoxMEYwMjAwMDAwMDAwMDAwMDAwMDAwRTAwNzgwMUEzMjAwMDAwMDAwMkQKKzoxMEYwMzAwMDAwMDAwMEUwMDdDMDFBMzIwMDAwMDAwMDAwMDAwMEEwM0QKKzoxMEYwNDAwMDBGMDAwMDMyQTI2MDAzMDAwMDAwMDA1ODAzMDAzNzMyQjYKKzoxMEYwNTAwMDBCMTQwMDAwMDAwMDAwNUMwMzAwMzYzMjAwMDAwMDAwQ0EKKzoxMEYwNjAwMDAwMDAwMDlDMEY4MDJBMzIwMDAwMEIxNDA0MDAwMDgwNzYKKzoxMEYwNzAwMDAyNDAyOUIyMDAwMDAwMDAwMDAwMDA1MDgzM0UwMDM0MkUKKzoxMEYwODAwMDAwMDAwMDAwMDAwMDAwNDg4MzNFMDAzNDAwMDAwMDAwNDMKKzoxMEYwOTAwMDAwMDAwMDQ0NTMwQTAwMzQwMDAwMEMxNDAwMDAwMDg4RjMKKzoxMEYwQTAwMDBGNDAyQjkyMDAwMDAwMDAwMDAwMDA5MDBGMDAyODMyNUIKKzoxMEYwQjAwMDAwMDAwMDAwMDAwMDAwOTQwRjAwMjkzMjAwMDAwMDAwNTIKKzoxMEYwQzAwMDAwMDAwMDk4MEY4MDJBMzIwMDAwMDAwMDAwMDAwMEE4MTUKKzoxMEYwRDAwMDAyQzBGOTMyMTExNDM4MTQwMDAwMDBCMDBGMDAzNjkyNEIKKzoxMEYwRTAwMDA3MDAxNDE0MDQwMDAwODA4MjREMjlCQzAwMDAwMDAwQjkKKzoxMEYwRjAwMDAwMDAwMEEwMUYwMEZBM0EwMDAwMDgxNDAwMDAwMDlDNjUKKzoxMEYxMDAwMDBGODAyQTkyQzAwMTAwMDAwMDAwMDBBQzBGMDAzNjMyRDAKKzoxMEYxMTAwMDAxMDAwMDAwMDAwMDAwOUMwMjAwMzYzMjAwMDAyNDE0QjAKKzoxMEYxMjAwMDAwMDAwMDgwMDIwMDAwRDAxRjAwMUExNDA0MDAwMDgwQkMKKzoxMEYxMzAwMDgyQ0QyOUJDQzAwMDAwMDAwMDAwMDBBQzhGQ0RGQTNBOUYKKzoxMEYxNDAwMDAwMDAxNjE0MDAwMDAwOUMxMkMwMjk5QTAwMDBENjEzN0IKKzoxMEYxNTAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwQ0MxMzAwMDAwMDgwRkUKKzoxMEYxNjAwMDAyMDAwMEQwMDAwMDIyMTQwNDAwMDA4MDUyOEFGQUJDODEKKzoxMEYxNzAwMEEyNjAwMzAwMDAwMDAwNTgwMzAwMzczMjIyMTQwMDAwOTAKKzoxMEYxODAwMDAwMDAwMDVDMDMwMDM2MzIwMDAwMDAwMDAwMDAwMDUwNjgKKzoxMEYxOTAwMEEzM0UwMDM0MDAwMDAwMDAwMDAwMDA0OEEzM0UwMDM0RkQKKzoxMEYxQTAwMDAwMDAwMDAwMDAwMDAwNDQ1MzBBMDAzNDAwMDQwMTAwODUKKzoxMEYxQjAwMDAwMDAwMEE0MEYwMDM3MzIwMDAwOTMxMzAwMDAwMDgwMEQKKzoxMEYxQzAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBDNDAyQzBGQTMyRkIKKzoxMEYxRDAwMDAzMDAwMDAwMDAwMDAwOUMwRjAwMzYzMjAwMDAwMDAwMTkKKzoxMEYxRTAwMDAwMDAwMEJDMEY0MDJGMzIwMDAwMkIxNDA0MDAwMDlDRDQKKzoxMEYxRjAwMDFGQzBGOUJDMDAwMDJBMTQwNDAwMDA4MDAyNDAyRkIyOTYKKzoxMEYyMDAwMDAwMDAyNzE0MDAwMDAwRTAwNzAwMkM5MjAwMDAyNzE0RTMKKzoxMEYyMTAwMDAwMDAwMEUwMDcwMDM2OTIwMDAwMDAwMDAwMDAwMEUwNUYKKzoxMEYyMjAwMDA3NDAyQzMyMDAwMDAwMDAwMDAwMDBFMDA3ODAyQzMyNzQKKzoxMEYyMzAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkMzMjAwMDAwMDAwQzkKKzoxMEYyNDAwMDAwMDAwMEUwMDcwMDJEMzIwMDAwMDAwMDAwMDAwMEUwOTgKKzoxMEYyNTAwMDA3NDAyRDMyMDAwMDAwMDAwMDAwMDBFMDA3ODAyRDMyNDIKKzoxMEYyNjAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkQzMjAwMDAwMDAwOTgKKzoxMEYyNzAwMDAwMDAwMEUwMDdDMEZCMzIwMDAwMDAwMDAwMDAwMEUwREEKKzoxMEYyODAwMDA3ODAyRjMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyRjMyOEUKKzoxMEYyOTAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDIzOTAwMDAwMDAwQTYKKzoxMEYyQTAwMDAwMDEwMEUwMDc4MDNGNTJGRjAwMDAwMDAwMDAwMDQ0MjIKKzoxMEYyQjAwMDAzMDAzNjMyMDAwMDAwMDAwMDAwMDBFMDA3MDBGOTMyRDEKKzoxMEYyQzAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwMjgzMjAwMDAwMDAwQkQKKzoxMEYyRDAwMDAwMDAwMEUwMDc4MEY4MzIwMzAwMDAwMDAwMDAwMDlDRkUKKzoxMEYyRTAwMDBGMDAzNjMyMDAwMDAwMDAwMDAwMDBCQzBGQzAyQjMyQkYKKzoxMEYyRjAwMDAwMDA0MTE0MDQwMDAwOUMxRkMwRjlCQzAwMDA0MDE0MzEKKzoxMEYzMDAwMDA0MDAwMDgwMDJDMDJCQjIwMDAwM0QxNDAwMDAwMEUwQTkKKzoxMEYzMTAwMDA3QzAyODkyMDAwMDNEMTQwMDAwMDBFMDA3MDAzNjkyNkMKKzoxMEYzMjAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwRjkzMjAwMDAwMDAwOEIKKzoxMEYzMzAwMDAwMDAwMEUwMDc0MDI5MzIwMDAwMDAwMDAwMDAwMEUwNkIKKzoxMEYzNDAwMDA3ODAyOTMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyOTMyRDkKKzoxMEYzNTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMkEzMjAwMDAwMDAwNkEKKzoxMEYzNjAwMDAwMDAwMEUwMDc0MDJBMzIwMDAwMDAwMDAwMDAwMEUwM0EKKzoxMEYzNzAwMDA3ODBGOTMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyQTMyRDgKKzoxMEYzODAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkYzMjAwMDAwMDAwNzUKKzoxMEYzOTAwMDAwMDAwMEUwMDc0MDJCMzIwMDAwMDAwMDAwMDAwMEUwMDkKKzoxMEYzQTAwMDA3ODAyQjMyMDAwMDAwMDAwMDAwMDBFMDA3QzBGQjMyQTUKKzoxMEYzQjAwMDAwMDAwMDAwMDAwMDAwODgwMjAwRkIzMjAwMDAwMDAwOTYKKzoxMEYzQzAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4OTUKKzoxMEYzRDAwMDAyMDAwMDMyMDAwMDAwMDAwMDEwMDAwMDA3MDA5NzMyMTkKKzoxMEYzRTAwMDAwMDAwMDAwMDAxOTAwMDAwN0MwOTY1MjA4ODA1MjE0NjcKKzoxMEYzRjAwMDEyMDAwMDQ4MDI4MDM2QjIwMDAwMDAwMDAwMDAwMDgwQzkKKzoxMEY0MDAwMDAyMDAwMDMwMDAwMDU0MTQxMjAwMDA5QzBGQzAyMUIyMTIKKzoxMEY0MTAwMDFEMDA1NzE0MDQwMDAwODA3MkJFMTdCODAwMDA1NDE0NzkKKzoxMEY0MjAwMDAwMDAwMEY4MUU4MEVGOUExMzAwMDAwMDAwMDAwMDlDMEUKKzoxMEY0MzAwMDdGQkUxNzM4MDAwMDAwMDAwNDAwMDA4MDEyQzBGOTVDOTUKKzoxMEY0NDAwMDAwMDA1NDE0MDAwMDAwRjgxRTgwRUY5QTAwMDAwMDAwMzUKKzoxMEY0NTAwMDAwMDAwMEI0MEY0MEZCMzUwMDAwMDAwMDAwMDAwMDlDREQKKzoxMEY0NjAwMDAyMDAwMDMyNEM0MjAwMDAwMDAwMDBBODAyMDAzNjMyQzgKKzoxMEY0NzAwMDAwMDAwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDA0RTE0M0YKKzoxMEY0ODAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwNTIxNDAwMDAwMDgwNDQKKzoxMEY0OTAwMDAyMDAwMEQwMDAwMDAwMDAwMDAwMDAwQ0NCQzFCMDM0MUUKKzoxMEY0QTAwMDAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMjAwMDAwMDAwOEMKKzoxMEY0QjAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwNkIxNDAwMDAwMDI4OTkKKzoxMEY0QzAwMDA5QzBCMEQyMDAwMDYxMTQwNDAwMDA4MDAyODA5MkIyMzIKKzoxMEY0RDAwMDAwMDA2NTE0MTIwMDAwOUMwRkMwMjFCMjFEMDA2ODE0Q0EKKzoxMEY0RTAwMDA0MDAwMDgwNzJCRTE3QjgwMDAwNjUxNDAwMDAwMEY4MjgKKzoxMEY0RjAwMDFFODBFRjlBMTMwMDAwMDAwMDAwMDA5QzdGQkUxNzM4QUEKKzoxMEY1MDAwMDAwMDA1MzEzMDQwMDAwODAxMkMwRjlCQzAwMDA2NTE0MTEKKzoxMEY1MTAwMDAwMDAwMEY4MUU4MEVGOUEwMDAwMDAwMDAwMDAwMEZDRDAKKzoxMEY1MjAwMDAyMDAwMDMyMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5Q0YKKzoxMEY1MzAwMDAwMDA2RjE0MDQwMTAwMjgwOTM0QjBCQTAwMDAwMDAwNzQKKzoxMEY1NDAwMDAwMDEwMDI4MDkwMDAwNTIwMDAwMDAwMDAwMDAwMEE4OEYKKzoxMEY1NTAwMDIyQzAyRjM3MDAwMDAwMDAwMDAwODRDMDM3QUNCMDMyNUEKKzoxMEY1NjAwMDAwMDAwMDAwMDAwMDAwMEMwQjAwMDAzMkZGRkYwMDAwNTQKKzoxMEY1NzAwMDAwMDAwMEMwQUY0REIwMzAwMDAwNzUxNDgwMDAwMDgwNjYKKzoxMEY1ODAwMDAyNDBCMEI2MDAwMDAwMDAwMDAwMDBDMDZGMDFGQzM1NzIKKzoxMEY1OTAwMDAwMDAwMDAwMDAwMDAwMDAwNzNGMDEzMjAwNDIwMDAwQjAKKzoxMEY1QTAwMDAwMDgwMDAwODc4RDJBM0EwMDAwMDAwMDAwMTAwMDAwQ0IKKzoxMEY1QjAwMDA3MDBCMDMyMDAwMDAwMDAwMDE4MDAwMDA3MDBEMDMyNDEKKzoxMEY1QzAwMDAwMDAwMDAwMDAwMDAwQzAzRkMxMzgzNDAwMDAwMDAwMEYKKzoxMEY1RDAwMDEyMDEwMDQ4RjIwMUZDNTQwMDAwN0ExNDAwMDAwMDgwN0YKKzoxMEY1RTAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNzkKKzowQ0Y1RjAwMDAwMDAzNjAwMDAwMDAwODAwMjAwMDA5MEM3Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMuaWhleCBiL2Zpcm13YXJlL3N4Zy9zYWhhcmFkb3dubG9hZEIuc3lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwOTg1MgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3N4Zy9zYWhhcmFkb3dubG9hZEIuc3lzLmloZXgKQEAgLTAsMCArMSwzMzg1IEBACis6MTAwMDAwMDAwMjAwMDAwMDVDRDMwMDAwMEMwMDAwMDAwMDAwMDAwMEIzCis6MTAwMDEwMDBGRjFGMDAwMDAxMDAwMDAwMDAwMDAwODg4MjREMjkzQTA3Cis6MTAwMDIwMDAwMDAwNDAwMzAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDcyCis6MTAwMDMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDI1Cis6MTAwMDQwMDAwMjAwMDA5MDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MDAzCis6MTAwMDUwMDAwMDAwMDkwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDdDCis6MTAwMDYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MEY1Cis6MTAwMDcwMDAwMjAwMDA5MDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MEQzCis6MTAwMDgwMDBGRUZGMDAwMDAwMDAwMEFDMDIwMDM2MzIwMDAwMzYwMDI3Cis6MTAwMDkwMDAwMDAwMDBBODAyMDAwMDkyMDAwMDM2MTAwMDAwMDA4MDVFCis6MTAwMEEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDY2Cis6MTAwMEIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEEyCis6MTAwMEMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDU4Cis6MTAwMEQwMDAwMjAwMDA5MDAwMDAyMDAwMDAwMDAwRDgwRjgwMjg5MjRECis6MTAwMEUwMDAwMDAwMjEwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjIwMEFDCis6MTAwMEYwMDAwMDAwMDBEODBGODAyODkyMDAwMDIzMDAwMDAwMDBEOEU0Cis6MTAwMTAwMDAwRjQwMkI5MjAwMDAyNDAwMDAwMDAwRDgwRjgwMjg5MjlFCis6MTAwMTEwMDAwMDAwMjUwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjYwMDczCis6MTAwMTIwMDAwMDAwMDBEODBGODAyODkyMDAwMDI3MDAwMDAwMDBEOEFGCis6MTAwMTMwMDAwRjgwMjg5MjAwMDAyODAwMDAwMDAwRDgwRjgwMjg5MjJECis6MTAwMTQwMDAwMDAwMjkwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkEwMDNCCis6MTAwMTUwMDAwMDAwMDBEODBGODAyODkyMDAwMDM2MDAwMDAwMDA5OEIwCis6MTAwMTYwMDAxRTgwRTk5QTAwMDAyQzAwMDAwMDAwRDgwRjgwMjg5MjIxCis6MTAwMTcwMDAwMDAwMkQwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkUwMDAzCis6MTAwMTgwMDAwMDAwMDBEODBGODAyODkyMDAwMDJGMDAwMDAwMDBEODQ3Cis6MTAwMTkwMDAwRjgwMjg5MjAwMDAzMDAwMDAwMDAwRDQwRjAwMDA5MjcxCis6MTAwMUEwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAwOTIwMDAwMzAwMDNBCis6MTAwMUIwMDAwMDAwMDBENDBGODAwMDkyMDAwMDM0MDAwMDAwMDBENDQyCis6MTAwMUMwMDAwRkMwMDA5MjAwMDAzMDAwMDAwMDAwRDQwRjAwMDE5MjI4Cis6MTAwMUQwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAxOTIwMDAwMzAwMDA5Cis6MTAwMUUwMDAwMDAwMDBENDBGODAwMTkyMDAwMDMwMDAwMDAwMDBENDE1Cis6MTAwMUYwMDAwRkMwMDE5MjAwMDAzMDAwMDAwMDAwRDQwRjAwMDI5MkY2Cis6MTAwMjAwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAyOTIwMDAwMzAwMEQ3Cis6MTAwMjEwMDAwMDAwMDBENDBGODAwMjkyMDAwMDM2MTAwMDAwMDA4MDIxCis6MTAwMjIwMDAwMjAwMDA5MDAwMDAzMDAwMDAwMDAwRDQwRjAwMDM5Mjk0Cis6MTAwMjMwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAzOTIwMDAwMzAwMEE2Cis6MTAwMjQwMDAwMDAwMDBENDBGODAwMzkyMDAwMDMwMDAwMDAwMDBENEIyCis6MTAwMjUwMDAwRkMwMDM5MjAwMDAwMDAwMDAwMDAwRDA1RjNGMDAzNDk4Cis6MTAwMjYwMDAwMDAwMzYxMDA0MDAwMDgwNDJGRkZDQjAwMDAwMDAwMEQ3Cis6MTAwMjcwMDAwMDAwMDA4ODEyODBGRDNBMDAwMDM2MTAwMDAwMDA4MDY3Cis6MTAwMjgwMDAwMjAwMDA5MDM2MTAzNjEwMDIwMTAwODA4MjhERkRCQzA1Cis6MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDg4MTI4MEZEM0EwMDAwMDAwMDBECis6MTAwMkEwMDAwMDAwMDBGODAzQzAwMTMyMzgwMDAwMDAwMDAxMDA4NEEzCis6MTAwMkIwMDA4MjREMjgxQTAwMDAzNjAwMDAwMDAwNzQwOTQwMDA5MkE4Cis6MTAwMkMwMDAwMDAwNEYwMDAwMDAwMEZDMDIwMDAwOTIwMDAwNDgwMDA3Cis6MTAwMkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDREMDAwMDAwMDA5MDJGCis6MTAwMkUwMDAwRTgwMTg5MjAwMDA4RjAyMDAwMDAwMDAwOEMwMjA5MkNCCis6MTAwMkYwMDAwMDAwN0YwMDAwMDAwMDAwMDgwMDIxOTIwMDAwOEQwMjM1Cis6MTAwMzAwMDAwMDAwMDAwMDA4NDAyMTkyMDAwMDdDMDAwMDAwMDAwMDc2Cis6MTAwMzEwMDAwODg1MjE5MDAwMDBGMjAyMDAwMDAwRUMwMkMwMjI5MjQ5Cis6MTAwMzIwMDAwMDAwQ0UwMzAwMDAwMDgwMDIwMDAwOTAwMDAwNTYwMDk0Cis6MTAwMzMwMDAwMDAwMDBGQzAyNDAxODlEMDAwMDUxMDAwMDAwMDBEMEE5Cis6MTAwMzQwMDAwMjAwMDA5MjAwMDAyMDAzMDAwMDAwODAwMjAwMDA5MEU0Cis6MTAwMzUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDQ1Cis6MTAwMzYwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMDRDMDAwMDAwMDAwMDRFCis6MTAwMzcwMDAwOUMwMjE5MjAwMDA0QTAwMTIwMTAwMDAwODg1MjJCMDQ1Cis6MTAwMzgwMDAxODAwMzYwMDAwMDAwMEY4NzM4QTAyOTkwMDAwODQwMDBCCis6MTAwMzkwMDA2QTAwMDA4MDAyMDAwMEIwMDgwMDg0MDAwMDAwMDBGODNECis6MTAwM0EwMDAyMzQwMDE5OTAwMDAwMDAwMDAwMTAwRTgwMjAwOTA3MjYzCis6MTAwM0IwMDAwMDAwMzYxMDgwMDEwMDgwQjIwMEU5QjYwMDAwM0UwMzY0Cis6MTAwM0MwMDAwMDAwMDA3QzFFQzBFNzlBMDgwMDAwMDAwMDAwMDBGODUyCis6MTAwM0QwMDAxMzQwMDEzOTAwMDAzMjAzMDAwMDAwMDhCODAxMDA5NDA2Cis6MTAwM0UwMDAwMDAwMzYxMDAzMDAwMDc4MDk0MDFBQkQwMDAwMDAwMDJDCis6MTAwM0YwMDAwMDAwMDBBMEUxMjUwMDM0MDgwMDAwMDAwMDAwMDBGODIzCis6MTAwNDAwMDBCMzQwMDEzOTAwMDAzRTAzQjIwMDAwRDgwMjAwMDBCMjQwCis6MTAwNDEwMDAwMDAwNDAwNTAwMTAwMUY4MDIwMDZFOTIwMDAwNTkwMDMzCis6MTAwNDIwMDAwQTAxMDBDQzAyMDAwMEIyMDAwMDZBMDAwMzAxMDBGQ0Q3Cis6MTAwNDMwMDAwMjQwMTlCRDA4MDAzRTAzMDAwMDAwRjhBMzQwMDE5OUU2Cis6MTAwNDQwMDAwMDAwMDAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDA2Cis6MTAwNDUwMDAwMDAwMDA5MEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDUyCis6MTAwNDYwMDAwMUMwMkYzMjAyMDA1QzAwQjAwMDAwQTBGMjBCMDBCOTA2Cis6MTAwNDcwMDAwMDAwNUYwMDA0MDEwMDgwMDJDMEIwQkMwMDAwNjgwMDAyCis6MTAwNDgwMDBBMDAwMDA4MDAyMDAwMDkwMDAwMDYxMDA4MDAxMDA4MDU4Cis6MTAwNDkwMDBGMjRCRDBCNjAwMDA2ODAwQTAwMDAwODAwMjAwMDA5MDdGCis6MTAwNEEwMDAwMDAwMDAwMEEwMDAwMDA0RkQ0QkQwMzQwMDAwNjYwMEY2Cis6MTAwNEIwMDA4MDAxMDA4MDEyODFGQ0I2MDAwMDJEMEYwMDAwMDBEOEUyCis6MTAwNEMwMDAwMjAwMDBEMjE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOThGCis6MTAwNEQwMDA2ODAwMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDQwRkUxCis6MTAwNEUwMDAwMDAwMDBEODAyMDAwMEQyMTgwMDM2MDAwMDAwMDBGODFBCis6MTAwNEYwMDA3MzBBMDNGOTAwMDA1OTAwMDMwMTAwRkMwMjQwMThCRDEzCis6MTAwNTAwMDAwMDAwN0IwMDAzMDAwMEZDMDI0MDE5QkQwMDAwMDAwMDU5Cis6MTAwNTEwMDAwMDAwMDA5NDAxQzAyRjMyMDAwMDAwMDAwMDAwMDA4MEE1Cis6MTAwNTIwMDBGMTAxMDAzNDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMkZGCis6MTAwNTMwMDAwMjAwNkQwMEIwMDAwMEEwRjIwQjAwQjkwMDAwNzAwMEQ2Cis6MTAwNTQwMDAwNDAxMDA4MDAyQzBCMEJDMDAwMDc5MDBBMDAwMDA4MDVGCis6MTAwNTUwMDAwMjAwMDA5MDAwMDA3MjAwODAwMTAwODBGMjRCRDBCNkQzCis6MTAwNTYwMDAwMDAwNzkwMEEwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDYwCis6MTAwNTcwMDBBMDAwMDAwNEZENEJEMDM0MDAwMDc3MDA4MDAxMDA4MDEzCis6MTAwNTgwMDAxMjgxRkNCNjAwMDAyRDBGMDAwMDAwRDgwMjAwMDBEMjNFCis6MTAwNTkwMDAxODAwMDAwMDAwMDAwMEY4NzMwQTAzMzk3OTAwMzYwMEUzCis6MTAwNUEwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDA0MEYwMDAwMDBEOEQ2Cis6MTAwNUIwMDAwMjAwMDBEMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUE4Cis6MTAwNUMwMDAwMDAwNkEwMDAzMDEwMEZDMDI0MDE5QkQwMDAwNTkwMDUwCis6MTAwNUQwMDAwMzAxMDBGQzAyNDAxOEJEMDgwMDNFMDMwMDAwMDBGOEMzCis6MTAwNUUwMDBBMzQwMDE5OTA4MDAwMDAwMDAwMDAwRjg3MzQwMDEzOUExCis6MTAwNUYwMDAwMDAwODQwMDgwMDEwMDgwRTIwMTgwQjYwMDAwODEwMERDCis6MTAwNjAwMDAwMDAwMDA4MDAyMDAwMDkwMDgwMEVEMDIwQzAwMDBGOERECis6MTAwNjEwMDA1MzQwMDFCOTAwMDA4MzAwODAwMTAwODBFMjAxODBCNkYwCis6MTAwNjIwMDAwMDAwMzYxMDEyMDAwMDY4MDIwNTgwQjAwMDAwMzIwMzlFCis6MTAwNjMwMDAwMDAwMDA2QzFGQzBGNjlBMDAwMDAwMDAwMDAwMDAwMERGCis6MTAwNjQwMDAwODA1ODAzMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMkJDCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDEwMDg4MDNEMzIwMDAwMDAwMDkzCis6MTAwNjYwMDAwMDAwMDBENDAyMDAwMDMyMDJBMDAwMDAwMDAwMDAwMEUwCis6MTAwNjcwMDBBOTBEODAzMjAwMDA4ODAwMTIwMDAwNTQwMkE0MzhCMjk0Cis6MTAwNjgwMDAwMDAyMDA4MDAwMDAwMDJDMDgwMDM3MzIxODAwMzYwMEZECis6MTAwNjkwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDA4MDAwNERECis6MTAwNkEwMDAwODgwNzIzMjAwMDA5MDAwOUYwMDAwNUMwODAwNzJCMjY3Cis6MTAwNkIwMDA4NzAwOEYwMDgwMDEwMDgwODJDRDg1QjAwMDAwQTEwMEZFCis6MTAwNkMwMDAwMDAwMDAyQ0Q4QzE4Mjk0MDAwMEExMDAwMDAwMDAyQzgyCis6MTAwNkQwMDA4OEMxODI5NDAwMEY5OTAwMDQwMTAwODA4MkNEODVCMDBBCis6MTAwNkUwMDAwMDAwOTkwMDgwMDAwMDgwNDI4MUZDQjYwMDAwMzYxMEI2Cis6MTAwNkYwMDAxMjAwMDA2ODAyMDU4MEIwMDAwMDAwMDAwMDAwMDA2Q0RECis6MTAwNzAwMDAxRkMwRjYzQTAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMkE5Cis6MTAwNzEwMDAwMDAwOTcwMDA0MDEwMERDNDM2MDNEQjMwMDAwMzIwMzk5Cis6MTAwNzIwMDAwMDAwMDBGQzAyMDAwMDkyMTgwMDAwMDAwMDAwMDBGODI5Cis6MTAwNzMwMDA3MzhBMDMzOTk0MDAzNjAwMDAwMDAwQzAwMjAwMzY5MjJDCis6MTAwNzQwMDAxMDAwOUYwMDg3MDAwMDc4NzkyMTE2QjgwMTAwOUYwMEYzCis6MTAwNzUwMDAwNDAxMDA4MDgyOEQ5N0JDODcwMEE4MDA4NzAwMDA3ODg0Cis6MTAwNzYwMDA4OUNEODVCMDAwMDA5RTAwMDQwMTAwODAxMjgwOTdCQ0Y2Cis6MTAwNzcwMDAwMDAwQTEwMDAwMDAwMDJDRDhDMTgyOTQwMDAwQTEwMDVDCis6MTAwNzgwMDAwMDAwMDAyQzg4QzE4Mjk0MDAwMEE4MDA4MDAxMDA4MDM1Cis6MTAwNzkwMDBGMkMwODVCNjAwMDBBODAwMDAwMDAwMkM5OEMxODI5NDI5Cis6MTAwN0EwMDAwMDAwQTcwMDgwMDEwMDgwRDJDMTgyQjYwMDAwQTgwMDJFCis6MTAwN0IwMDA4MDAxMDA4MDcyODBGQ0I2MDAwMDAwMDAwMDE4MDBBOEQ0Cis6MTAwN0MwMDA0MjNENzIzMDAwMDAwMDAwNTQxODg5RkNGMkMwN0MzMEI5Cis6MTAwN0QwMDAwMDAwQ0IwMDgwMDEwMDgwRjJDMTg1QjYwMDAwQTkwMEI2Cis6MTAwN0UwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEEzMDA4MDAwMDA4MDU0Cis6MTAwN0YwMDA4MjgwRkNCNjAwMDAwMDAwNTQwMDAwRkMwMjAwMDAzMkMxCis6MTAwODAwMDA4MDAwODAyMDAwMDAwMDgwQzJDRDg1MzAwMDAwQkUwMDQ2Cis6MTAwODEwMDAwQjAwMDA4MDAyMDAwMEIwMTgwMDAwMDAwMDAwMDA3ODBCCis6MTAwODIwMDA3OUExMTYzODIwMDBDQjAwMDQwMDAwODA4MjhEOTdCQzhGCis6MTAwODMwMDAwMDAwQjUwMDgwMDEwMDgwNjI4MEZDQjY4NzAwQjUwMDMyCis6MTAwODQwMDA4NzAwMDA3ODg5Q0Q4NUIwMDAwMEIxMDAwNDAwMDA4MEU5Cis6MTAwODUwMDAxMjgwOTdCQzAwMDBCNTAwMDQwMTAwODAyMjgwOTdCQzg0Cis6MTAwODYwMDAwMDAwQjUwMDgwMDEwMDgwNzJDMTg1QjYxMDAwMDAwMDU0Cis6MTAwODcwMDAwMDAwMDA3ODc5NjExNjM4MDAwMEJDMDAwNDAxMDA4MDk3Cis6MTAwODgwMDAzMjgwOTdCQzAwMDBDQjAwMDAwMDAwMkNCOEMxODI5NERECis6MTAwODkwMDAwMDAwQkMwMDgwMDEwMDgwNTI4MEZDQjYwMDAwQkMwMDVCCis6MTAwOEEwMDA4MDAwMDA4MDcyQzE4NUI2MDAwMEJDMDA4MDAxMDA4MDFECis6MTAwOEIwMDAwMkMxODVCNjAwMDBCQzAwODAwMTAwODBEMkMxODVCNkFGCis6MTAwOEMwMDAxODAwMDAwMDAwMDAwMDc4NzlFMTE2MzgwMDAwQkMwMDM0Cis6MTAwOEQwMDAwNDAxMDA4MDMyODA5N0JDMDAwMENCMDAwMDAwMDAyQzk3Cis6MTAwOEUwMDBDOEMxODI5NDAwMDAwMDAwMDAwMDAwMDQwODAwMDQzMjI3Cis6MTAwOEYwMDAwMDAwQ0IwMDAwMDAwMDJDQThDMTgyOTQwODAwMDAwMDdBCis6MTAwOTAwMDAwMDAwMDA3ODc5MjExNzM4MDAwMENCMDAwNDAwMDA4MDM3Cis6MTAwOTEwMDAzMjgwOTdCQzAwMDBDQjAwMDQwMTAwODAyMjgwOTdCQzhECis6MTAwOTIwMDAxRjAwMDAwMDAwMTIwMDA4ODlDRDcyMzAwNTAwMDAwMDkxCis6MTAwOTMwMDAwMDEyMDAwMEI5REMxNzM4MDAwMDAwMDAwMDAwMDBBODE5Cis6MTAwOTQwMDAyMjAwOTAzNzAwMDBDQjAwODAwMDg2ODAyMjI0N0NCNkY1Cis6MTAwOTUwMDAwMDAwMzYxMDEyMDAwMDY4MDIwNTgwQjAwMDAwMDAwMEEwCis6MTAwOTYwMDAwMDAwMDBGQzAyMDAwMTMyMDAwMEM5MDAwNDAxMDBEQ0FDCis6MTAwOTcwMDA0MzYwM0RCMzAwMDAzMjAzMDAwMDAwRkMwMjAwMDA5MjFGCis6MTAwOTgwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAzMzlDNjAwMzYwMDIyCis6MTAwOTkwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMENFMDAxMjAxMDA2MDhDCis6MTAwOUEwMDAwODQwMjNCMjAwODIwMDAwMDAwMDAwMDgwODgwMzYzMkIwCis6MTAwOUIwMDAwMDAwQzUwMDAwMDAwMDY0MUY0MEY2OUEwMDAwMzYxMEQ5Cis6MTAwOUMwMDAxMjAwMDAyNDA4MDAyM0IyMDAwMDM2MTAxMjAwMDAyMDlDCis6MTAwOUQwMDAwOEMwMjNCMjAwMDAzNjEwMTIwMDAwMTgwODgwMjNCMkFECis6MTAwOUUwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwRDUwMDAxCis6MTAwOUYwMDAwNDAwMDBEQzQzNjAzREIzMTgwMDAwMDAwMDAwMDBGODc0Cis6MTAwQTAwMDA3MzhBMDMzOUQxMDAzNjAwMDAwMDAwQzAwMjAwMzY5MjFDCis6MTAwQTEwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDg1MzIwMDAwMDAwMDIxCis6MTAwQTIwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDAwMDAwMDBEMDY5Cis6MTAwQTMwMDAwMjAwMDAzMjAwQzBFMTAwMTgwMTAwMENBOENEM0VCMjU3Cis6MTAwQTQwMDAwMDAwRDUwMDEyMDAwMDM4MDI4MDgxQjIwMDAwMDAwMEQyCis6MTAwQTUwMDAwMDAwMDAzQzAyMDA4MjMyMDAwMDAwMDAwMDAwMDAzMDc0Cis6MTAwQTYwMDAwMjQwODIzMjAwMDAwMDAwMDAwMDAwMzQwMjAwODYzMkEyCis6MTAwQTcwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMDAwMERFCis6MTAwQTgwMDAwMDAwMDA1QzFGQzBGNTNBMDAwMDMyMDMxMjAxMDA2ODRDCis6MTAwQTkwMDAwMjA1ODBCMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM3Cis6MTAwQUEwMDAwMDAwMDAwMDAwMTgwMDc4MDkwMDcyMzIwMDIzRTQwMDAyCis6MTAwQUIwMDAwNDAxMDA4MEEyQ0Q4MkIwMDAwMEU1MDAwMDAwMDAwMDJCCis6MTAwQUMwMDAwOTAwMDA5MjAwMDAzNjEwOUYxNjAwMDAyOUMxNzJCQzc4Cis6MTAwQUQwMDAwMDAwMDAwMDAwMTgwMDAwMDc4MDgxMzIwMDAwMDAwMEM0Cis6MTAwQUUwMDAwMDIwMDAwMDA3MDA4MjMyMDAwMDAwMDAwMDI4MDAwMDAzCis6MTAwQUYwMDAwNzgwOTczMjEwMDAwMDAwMDAzMDAwMDAxNzIwOTAzOTY2Cis6MTAwQjAwMDAwMDAwMDAwMDAwMzgwMDAwMDdDMDgyMzIwMDAwMDAwMDMyCis6MTAwQjEwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwQjIwMDAwNzQwODAzMjAwMDBFRTAwODAwMTAwODBBMkMxODJCNjQyCis6MTAwQjMwMDAwMDAwRUYwMDAwMDgwMDAwNTcwMDgwOTcwNTAwMDAwMDRCCis6MTAwQjQwMDAwMDA4MDAwMDA3QTAwNDM5MDAwMDM2MTAwNDEwMDAwMDVGCis6MTAwQjUwMDAwNzQwODJCMjAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjQzCis6MTAwQjYwMDAwMDAwRjEwMDEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMDQ1Cis6MTAwQjcwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDM2MTAxMjAwMDA2ODQ0Cis6MTAwQjgwMDAwMjA1ODBCMDAwMDBGNDAwMTIwMDAwNDgwMkMwODBCMkVDCis6MTAwQjkwMDAwMDAwMzIwM0NBMDEwMDA4RTg4MTgwOTQwODAwMDAwMEM4Cis6MTAwQkEwMDAwMDAwMDBGODkzNDAwMTM5MTAwMDAwMDA1NDAwMDBGQ0UwCis6MTAwQkIwMDA4MjREOTAzNjAwMDBGODAwRjAwMTAwRDgwMjAwMDBCMjJCCis6MTAwQkMwMDAwMDAwMDAwMDYyMDQwMUE4MDJDMDZFMzIwMDAwMDAwMEI0Cis6MTAwQkQwMDAwMDA0MDEwMDU5QzA2RTM3MDAwMDAwMDAwMDA0MDE3OEQ1Cis6MTAwQkUwMDAxOUMwNkUzQTAwMDAwMDAwNEUwNDAxRUMwNkJEOTczMEJCCis6MTAwQkYwMDAwMDAwMDAwMEUwMDAwMEY0MUU0MEVGM0EwMDAwMDAwMDlBCis6MTAwQzAwMDAwMDE4OEJDQzA3NDAwMDMyMDAwMDAwMDAwMDAwMDAwMEZDCis6MTAwQzEwMDAwNzQwMDkzMjAwMDAwMDAwMDAwODAwMDA3N0MwMjkzN0IzCis6MTAwQzIwMDAwMDAwMzYxMDA0MTAwMDAwMTczRDkwQkEwMDAwMDAwMENDCis6MTAwQzMwMDAwMDE4MDAwMDA3ODBGNDMyMDAwMDAzMDExMjAwMDA0MDk5Cis6MTAwQzQwMDBGMkMxMzhCNDAwMDAwMDAwMDAwMDAwRkMzMkMwMkYzMEI4Cis6MTAwQzUwMDAwMDAwMDAwMDAwMDAwMDEwMDg4MDNEMzIxODAwMzYwMDNGCis6MTAwQzYwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBENDNGCis6MTAwQzcwMDAwMjAwMDAzMjAwMDA5MDAxODAzODAwODAyMkMwNzJCNjZECis6MTAwQzgwMDAwMDAwMEMwMTEyMDAwMEM4MDIwMDIwQjIwMDAwMTMwMTk1Cis6MTAwQzkwMDAxMjAxMDA1QzA4ODAyMEIyMDAwMDM2MTAxMjAwMDA2MEQzCis6MTAwQ0EwMDAwMjgwMkNCMjE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTlCCis6MTAwQ0IwMDAwOTAxMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMDZBCis6MTAwQ0MwMDAwMDAwMDBGODFGODBGRjNBMDAwMDAwMDAwMDAwMDBGQzU4Cis6MTAwQ0QwMDAzMjAwODUzMDAwMDA2ODAxMDQwMDAwODA0MjYwM0RCM0FFCis6MTAwQ0UwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAzMzkwRjAxMzYwMDc1Cis6MTAwQ0YwMDAwMDAwMDBDMDAyMDAzNjkyMDgwMDAwMDAwMDAwMDAwMDYyCis6MTAwRDAwMDA4OENEODUzNzAwMDAwMDAwMDAwMDAwMjAwODAwNzIzMjA2Cis6MTAwRDEwMDAwMDAwMDAwMDAwMDgwMDI0MDgwMDcyMzIwMDAwMzYxMEI1Cis6MTAwRDIwMDAwNDEwMDA2QzA4MDA3MkIyMDAwMDAwMDAwMDE4MDA0Q0IzCis6MTAwRDMwMDAwODAwNzIzMjAwMDAzNjEwMDQyMDAwMTgwODAwNzJCMjU5Cis6MTAwRDQwMDAwMDAwMDAwMDAwMzAwMDI4MDgwMDcyMzIwMDAwMDAwMDlGCis6MTAwRDUwMDAwMDI4MDAzMDA4MDA3MjMyMDAwMDAwMDAwMDAwMDA2MDJGCis6MTAwRDYwMDAwODgwODIzMjAwMDAyMjAxMDYwMDAwODA2MkEwODJCQzVFCis6MTAwRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDA2MzIwNzAwMDAwMDJECis6MTAwRDgwMDAwMDA4MDAwMDc3NEEwOTM5MDAwMDM2MTAwNDEwMDAwMEZFCis6MTAwRDkwMDAwNzAwODJCMjAwMDAwMDAwQ0ExOTAwMDAwNzQwODIzMjNBCis6MTAwREEwMDAwMDAwMjEwMTEyMDAwMDQwRjJDMTM4QjQwMDAwMDAwMDMwCis6MTAwREIwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDQ3MDEwNDM4MDA3OEVCCis6MTAwREMwMDBEOUM1NzJCMDAwMDAyNjAxODAwMTAwODAwMjgwOTdCNjZDCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMEY4ODI4MDJGMzQwMDAwMjgwMThECis6MTAwREUwMDA4MDAxMDA4MDEyODA5N0I2MDAwMDAwMDAwMDAwMDBGODJCCis6MTAwREYwMDA5MjgwMkYzNDA0MDAwMDAwMDAzODAwM0NCODFDMTczOEUzCis6MTAwRTAwMDAwMDAwMDAwMDAwMDAwMDNDMjhDMDgzMzcwMDAwMDAwMDA0Cis6MTAwRTEwMDAwMDNBMDAyQzA4QzA3MjMyMDAwMDAwMDAwMDAwMDAxQ0U0Cis6MTAwRTIwMDBCOEUwODMzQTAwMDAwMDAwQ0IyOTAwMjAwNzAwMDAzMjIwCis6MTAwRTMwMDAwMDAwNDYwMTA0MDAwMDgwMDJDMDgxQkMwMDAwMDAwMEU4Cis6MTAwRTQwMDAwMDAwMDAzNDc4QTA4MTNFMDAwMDAwMDAwMDAwMDAxQzdCCis6MTAwRTUwMDBEOEUwODEzQzAwMDAzNTAxMDYzQTAwODBCMjVDODNCQ0RBCis6MTAwRTYwMDAwMDAwMDAwMDAwM0EwMDAwODlDMTcyMzcwNzAwMzQwMTE5Cis6MTAwRTcwMDAyQjAxMDAwNDc5MEEwNEI5MDAwMDAwMDBDQjAwMDAwNDMzCis6MTAwRTgwMDAxOTQxOTAzNDAwMDAzODAxMDAzQTAwMkMwNzAwMDA5MjBDCis6MTAwRTkwMDAwMDAwMDAwMDAwM0EwMDJDRDdFMDcyM0MwMDAwMDAwMDg3Cis6MTAwRUEwMDAwMDAwMDAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwNDAzCis6MTAwRUIwMDAwOTAwMDAzMjAwMDAwMDAwMDAwMDAwMDAwNzY0ODMzMkQ3Cis6MTAwRUMwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMzYxMDFCCis6MTAwRUQwMDAwNDEwMDAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMEU3Cis6MTAwRUUwMDAwN0MwODQzMjAwMDA1NTAxMDQwMDAwMjhEOEEwODJCQzRECis6MTAwRUYwMDAwMDAwMDAwMDAwMDAwMDAwRDgyMDgwM0EwMDAwNDEwMUZFCis6MTAwRjAwMDAwNDAwMDA4MDcyODAyREJDMDAwMDNGMDExMjAwMDA0NEVDCis6MTAwRjEwMDAxMkU0MzhCMjAwMDA0MjAxMDAwMDAwRDgxMjgwMkQ5QTdECis6MTAwRjIwMDAwMDAwQkQwRjAwMDAwMDA0Rjk0MTkwRjQwMDAwNDQwMUVFCis6MTAwRjMwMDAwNDAwMDAxOEQ4QTA4MUJDMDAwMDJEMDEwMDAwMDA2QzQ2Cis6MTAwRjQwMDBEOEUwODY5QTAwMDA3QTBGMDAwMDAwNDQwODgwMkRGMjU1Cis6MTAwRjUwMDAwMDAwMkQwMTAwMDAwMDMwMDgwMDAwOTIwMDAwMDAwMDk5Cis6MTAwRjYwMDBDQjE5MDAyMDA3MDAwMDMyMDcwMDQ5MDEyQjAxMDAwNEMzCis6MTAwRjcwMDA3OTBBMDJCOTAwMDAwMDAwQ0IwMDAwMDQxOTQxOTAzNDQ2Cis6MTAwRjgwMDAwMDAwMDAwMDREMDAwMDAwQTdBMDgxM0UwMDAwMDAwMDBFCis6MTAwRjkwMDAwMDA4MDAwMDA3MDA4MDMyMDAwMDM2MTAwNDEwMDAwMDM2Cis6MTAwRkEwMDAwN0MwODZCMjAwMDAwMDAwMDAxODAwMDAwN0MwODQzMkFECis6MTAwRkIwMDAwMDAwNTUwMTA0MDAwMDI4RDhBMDgyQkMwMDAwMDAwMEY5Cis6MTAwRkMwMDAwMDAwMDAwMEQ4MjA4MDNBMDAwMDUyMDEwNDAwMDA4MDk4Cis6MTAwRkQwMDA3MjgwMkRCQzAwMDA1MDAxMTIwMDAwNDQxMkU0MzhCMkFGCis6MTAwRkUwMDAwMDAwNTMwMTAwMDAwMEQ4MTI4MDJEOUEwMDAwQkQwRkIwCis6MTAwRkYwMDAwMDAwMDAwNEY5NDE5MEY0MDAwMDdBMEYwMDAwMDA0NDYyCis6MTAxMDAwMDAwODgwMkRGMjAwMDA0NzAxMDAwMDAwMzAwODAwMDA5MjI3Cis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDA0Rjk0MTkwMzQwMDAwNTYwMTc3Cis6MTAxMDIwMDAxMjAwMDA0NDEyRTQzOEIyMTgwMDM2MDAwMDAwMDBGODQ0Cis6MTAxMDMwMDA3MzBBMDNGOTAwMDAwMDAwMDAxODAwMDQwOTgwNzMzMkVECis6MTAxMDQwMDAwMDAwMDAwMDAwMjgwMDA4ODk4MDczMzcwMDAwMDAwMEJECis6MTAxMDUwMDAwMDAwMDA4MDA3MDA4NjMyNDEwMDAwMDAwMDA2MDA4QzdFCis6MTAxMDYwMDAwNzAwMzYzMjAwMDA1RjAxMjkwODAwODAwN0MwODVCMjAyCis6MTAxMDcwMDAwMDAwNjIwMTI4MTAwMDhDMDcwMDAwQjIwMDAwNjMwMTJDCis6MTAxMDgwMDAwMDEyMDA4NDA3MDAwMDkyMDAwMDAwMDAwMDEwMDA4Qzk1Cis6MTAxMDkwMDBGN0UwODIzQTAwMDA2MjAxMjgxODAwODAwNzQwOTBCMjExCis6MTAxMEEwMDAwMDAwNjMwMTAwMTIwMDg0MDcwMDAwOTIwMDAwMDAwMEFECis6MTAxMEIwMDAwMDEyMDA4NDI3RTQ4MjMyMDAwMDY2MDEwNDAwMDA4MEYwCis6MTAxMEMwMDA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTQ1Cis6MTAxMEQwMDA2MzAxMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMEVDCis6MTAxMEUwMDAwMDAwMDBGQzAyMDA4NTMyMDAwMDM2MTAxMjAwMDA1Qzk3Cis6MTAxMEYwMDA1MjgxMkNCNDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMkIwCis6MTAxMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDNCMzIwODQwNkEwMTNECis6MTAxMTEwMDBGMDAxMDAwODA4ODAzNkIyMDAwMDAwMDAwMDA0MDEzODI5Cis6MTAxMTIwMDAwOEMwNkUzMjAwMDAwMDAwRTAwMDAwRjQxRTQwRUYzQ0ZBCis6MTAxMTMwMDAwMDAwNzEwMTBCMDEwMDhDMDgwMDAwQjIwMDAwNkUwMTdDCis6MTAxMTQwMDBGMjAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGMDhBCis6MTAxMTUwMDAwRTAwM0EzMjAwMDA4MjAxRTIwMDAwODAwRTgwODM5MjhECis6MTAxMTYwMDAwMDAwNzEwMUYyMDEwMDc4QzkzQjNBQkMwMDAwN0IwMTJDCis6MTAxMTcwMDAwMjAxMDA4MDgyODA5N0JDMDAwMDAwMDAwMDAwMDBBOEVGCis6MTAxMTgwMDAwMjAwRTgzMjAwMDA3NjAxMDQwMDAwODAyMkEyMkFCQzlFCis6MTAxMTkwMDAwMDAwN0EwMTA0MTk4QjgwMDJDMDdDQkMwMDAwMDAwMEIyCis6MTAxMUEwMDAwMDAwMDA4QzE4QzA4ODNBMDAwMDAwMDAwMDAwMDBBODcxCis6MTAxMUIwMDAxMjgwMkEzQTAwMDAwMDAwMDAwMDAwQTgwMkJEMkEzMDc4Cis6MTAxMUMwMDAwMDAwNzQwMTA0MDEwMDgwRTJBMDJBQkMwMDAwN0YwMTNECis6MTAxMUQwMDAwMjAwMDA4MDgyQzA4OEJDMDAwMDAwMDBFMjAwMDAwODFECis6MTAxMUUwMDAwODAwMDAzMjAwMDAwMDAwMDAwMDAwQTgwMjgwODgzMkUxCis6MTAxMUYwMDAwMDAwMDAwMDAwMTg4QkNDMDcwMDAwMzIwMDAwMzIwMzEyCis6MTAxMjAwMDAwMDAwMDBEQzAzMDAwMDkyMDAwMDAwMDAwMDAwMDAzODM1Cis6MTAxMjEwMDAwODgwMkEzMjAwMDAwMDAwMDAwMDAwRjAwRTAwM0EzMjgwCis6MTAxMjIwMDAwMDAwMDAwMEUyMDAwMDgwMEU4MDJBMzIwMDAwMDAwMDcyCis6MTAxMjMwMDAwMDAwMDBBODAyODA4ODMyMDAwMDAwMDAwMDE4OEJDQzVCCis6MTAxMjQwMDAwNzAwMDAzMjAwMDAwMDAwMDAwMDAwREMwMzAwMDAzMjU0Cis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDgzMzIwMDAwMDAwMDUyCis6MTAxMjYwMDAwMDAwMDAwMDc5QzAyOTM3NjAyMDAwMDAwMDAwMDAwMDY1Cis6MTAxMjcwMDA4OTBEOTAzQTAwMDAwMDAwQ0EwMTAwRDgxMjgwMkQzQTcyCis6MTAxMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDAxMzIwMDAwMDAwMDI0Cis6MTAxMjkwMDAwMDA4MDAwMDA3MDA5MDMyMDAwMDAwMDAwMDEwMDAwMDZECis6MTAxMkEwMDAwNzQwRTgzMjAwMDAwMDAwMDAxODAwMDAwNzgwRTgzMjI0Cis6MTAxMkIwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMzIwM0M5Cis6MTAxMkMwMDAxMjAxMDA0OEYyQzEzOEI0MDAwMDhFMDEwMDAwMDA4MDE1Cis6MTAxMkQwMDAwMjAwMDA5MDAwMDAwMDAwMDAzMDAwNzgwODgwNzIzMkE4Cis6MTAxMkUwMDAwNDAwMDAwMDAwMzgwMDU0QTg1QzE2MzgwQjAwMDAwMDExCis6MTAxMkYwMDAwMDM4MDAyQ0E4REMxNjM4MTQwMDAwMDAwMDAwMDAxQzg4Cis6MTAxMzAwMDA4ODREODUzQTAwMDAwMDAwMDAwMDAwMjAwODAwNzIzMjdECis6MTAxMzEwMDAwMDAwMDAwMDAwMDgwMDI0MDgwMDcyMzIwMDAwMDAwMEY1Cis6MTAxMzIwMDAwMDEwMDA2QzA4MDA3MjMyMDAwMDAwMDAwMDE4MDA0QzMxCis6MTAxMzMwMDAwODAwNzIzMjAwMDAzNjEwMDQyMDAwMTgwODAwNzJCMjUzCis6MTAxMzQwMDAwMDAwMDAwMDAwMjgwMDMwMDgwMDcyMzIwMDAwQTEwMUY3Cis6MTAxMzUwMDAwODNDMDAxNDE4ODA3MkJDMDAwMDAwMDAwMDAwMDAxNDVCCis6MTAxMzYwMDAxODQwODEzQzAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMjI5Cis6MTAxMzcwMDAwNzAwMDAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMzYxMDE1Cis6MTAxMzgwMDAwNDEwMDAwMDA3MDA4MkIyMDAwMDAwMDBDQTE5MDAwMDJCCis6MTAxMzkwMDAwNzQwODIzMjAwMDBBMDAxMTIwMDAwNDBGMkMxMzhCNEMwCis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMEQ4MDI0MDAwMzIwMDAwMDAwMEYxCis6MTAxM0IwMDAwMDAwMDA2NDc4QzAyOTM3MDIxMDAwMDAwMDAwMDA2NEJCCis6MTAxM0MwMDA4ODREODYzQTAwMDAwMDAwMDAwMDAwODAwODAwMDAzMkNFCis6MTAxM0QwMDAwMDAwMDAwMDAwMDAwMDQwMDgwMDAwMzIwMDAwMDAwMDkzCis6MTAxM0UwMDA0RDAwMDAwMDc3QTA4MTNFMDAwMDAwMDAwMDA4MDAwMEQyCis6MTAxM0YwMDAwNzQwODYzMjAwMDAzNjEwMDQxMDAwMDAwN0MwODZCMjk1Cis6MTAxNDAwMDAwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwQjkwMThECis6MTAxNDEwMDAwNDAwMDAxQ0Q4RTA4MUJDMDAwMDAwMDAwMDAwMDA2NDUzCis6MTAxNDIwMDBEODYwODYzQTAwMDBBRjAxMDQwMDAwODA3MjgwMkRCQ0I1Cis6MTAxNDMwMDAwMDAwQUQwMTEyMDAwMDQwMDJDMDM4QjIwMDAwQjUwMTRBCis6MTAxNDQwMDAwMDAwMDBEODEyODAyRDlBMDAwMEFGMDExMjAwMDA0MDY5Cis6MTAxNDUwMDBGMkMxMzhCNDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTJFCis6MTAxNDYwMDAwMDAwQjQwMTA0MDEwMDgwMDI4MDJEQkMwMDAwQjAwMTI2Cis6MTAxNDcwMDA2NzAwMDBGOEEyODAyRkI1MDAwMDM2MTAxMjAwMDBFOEM3Cis6MTAxNDgwMDAwMkMwMjFCMjAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjdCCis6MTAxNDkwMDAwMDAwQjcwMTA0MDAwMDE4RDhBMDgxQkMwMDAwQTYwMTFDCis6MTAxNEEwMDAwMDAwMDA2Q0Q4RTA4NjlBMDAwMDVEMEUwMDAwMDA0NDQ5Cis6MTAxNEIwMDAwODgwMkRGMjAwMDBBNjAxMDAwMDAwMzAwODAwMDA5MjE0Cis6MTAxNEMwMDAwMDAwQjkwMTEyMDAwMDQwRjJDMTM4QjQxODAwMzYwMDIzCis6MTAxNEQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMEJFMDEwNDAxMDA4MDU3Cis6MTAxNEUwMDAwMjgwMkRCQzAwMDBCQTAxNjcwMDAwRjhBMjgwMkZCNTcxCis6MTAxNEYwMDAwMDAwMzYxMDEyMDAwMEU4MDJDMDIxQjIwMDAwQzkwMTRECis6MTAxNTAwMDAwNDAxMDA4MDAyMDA4NEJDMDAwMDAwMDAwMDAwMDBENDQwCis6MTAxNTEwMDAwMjQwMDAzMjAwMDAwMDAwMDAwMDAwQTQyMjQwODUzQTkyCis6MTAxNTIwMDAwNDAwMDAwMDAwMTgwMDQwODhDRDc0MzYwMDAwMDAwMDYwCis6MTAxNTMwMDAwMDAwMDA0MDI4MDA4NDM3MDAwMDAwMDAwMDAwMDBENEI0Cis6MTAxNTQwMDAwMjAwMDAzMjE0MDBDOTAxMDQwMDAwMUM4ODBEODRCQzk0Cis6MTAxNTUwMDAwMDAwMDAwMDAwMDAwMDc4MDk2MTg1M0E4MDAwMzYxMDI0Cis6MTAxNTYwMDAwNjAxMDA4MDgyOEQ5N0JDMDAwMDAwMDAwMDAwMDA2NDJFCis6MTAxNTcwMDBEODYwODYzQTAwMDBCNTAxMDAwMDAwRDgwMjQwMDA5MjExCis6MTAxNTgwMDAwMDAwQ0IwMTA0MDAwMDE4RDhBMDgxQkMwMDAwQ0QwMUYwCis6MTAxNTkwMDAwMDAwMDA2Q0Q4RTA4NjlBMDAwMDVEMEUwMDAwMDA0NDU4Cis6MTAxNUEwMDAwODgwMkRGMjAwMDAwMDAwMDAwMDAwMzAwODAwMDAzMjJBCis6MTAxNUIwMDAwMDAwMDAwMDAwMDAwMEQ0MDI0MDAwMzIwMDAwMDAwMEUzCis6MTAxNUMwMDAwMDAwMDBBNDIyQzA4MjNBMDAwMDAwMDAwMDAwMDAzQzlECis6MTAxNUQwMDBCODYwODUzQzA0MDBEMzAxODEwMDAwNjA4OENENzRCNkZBCis6MTAxNUUwMDAwMDAwMDAwMDAwMDQwMDI4RjhBMDc1M0MwMDAwRDQwMUIxCis6MTAxNUYwMDAwMDA4MDA3NDA4ODA3NTkyMDAwMDAwMDAwMDA4MDAyOEIwCis6MTAxNjAwMDBGOEEwNzUzQzAwMDAwMDAwMDAwMDAwMjgwOEExODIzQzAyCis6MTAxNjEwMDAwMDAwMDAwMDAwMDAwMEE0RjI2MDJBM0EwMDAwMDAwMDcwCis6MTAxNjIwMDAwMDA4MDA0ODA4MDA3NTMyMDAwMDAwMDAwMDIwMDA3QzFGCis6MTAxNjMwMDAwODgwNzUzMjA5MDBEQTAxMDQxQTAwNzA4OENENzRCMDkwCis6MTAxNjQwMDAwOTAwMDAwMDAwMUEwMDRDODdDRDc0MzE3RjAwMDAwMEIzCis6MTAxNjUwMDAwMDAwMDA2NDg4NEQ4NjMxMDAwMDAwMDAwMDAwMDA2NDM2Cis6MTAxNjYwMDAyODQwODYzQTAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjA2Cis6MTAxNjcwMDAwMDAwMDAwMDAwMTAwMDAwMDc0MDg2MzIwMDAwMDAwMDVCCis6MTAxNjgwMDAwMDAwMDBEODAyODAwMDMyMDAwMDAwMDAwMDEwMDAwMEJFCis6MTAxNjkwMDA1NzYxODYzQTAwMDBFMzAxMTIwMDAwQzgwMjAwMjBCMjQwCis6MTAxNkEwMDAwMDAwRTYwMTEyMDEwMDVDMDg4MDIwQjIwMDAwMzYxMDQ0Cis6MTAxNkIwMDAxMjAwMDA2MDAyODAyQ0IyMDAwMDBFMDEyQTAxMDBENDRBCis6MTAxNkMwMDAwMjAwMDBCMjE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOURECis6MTAxNkQwMDAwMDAwMEYwMTAwMDAwMEY4MUY4MEZGOUEwMDAwMDAwMENBCis6MTAxNkUwMDAwMDAwMDBENDAyNDAwMDMyMDgwMDAwMDAwMDAwMDAwMEFBCis6MTAxNkYwMDA4OENEODUzNzAwMDAwMDAwMDAwMDAwMUNFOEExODIzRTc0Cis6MTAxNzAwMDAwMDAwMDAwMDAwMDAwMEE0MjI0MDg1M0EwMDAwMDAwMDE0Cis6MTAxNzEwMDAwMDA4MDA1MDA3ODA4NDMyMDAwMEVEMDEwNDAxMDA4MEMxCis6MTAxNzIwMDA3MkEwODJCQzAwMDAwMDAwMDAxQTAwNENDN0UxNzQzMkI1Cis6MTAxNzMwMDAwMDAwMDAwMDAwMDAwMDY4MDhFMTgxM0EwMDAwRjAwMUFDCis6MTAxNzQwMDA5MDAxMDA3OEY5QTE4NkJBMDAwMDAwMDAwMDAwMDA3ODNFCis6MTAxNzUwMDAxOTgwOTczQTAwMDAwMDAwMDAyMDAwNTgwNzgwOTczMjU3Cis6MTAxNzYwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAwMzIwMDAwMDAwMEVECis6MTAxNzcwMDAwMDAwMDAwMDA3MDA4NDMyMDAwMDAwMDA0MDA4MDAwMDY0Cis6MTAxNzgwMDA1NzIxODAzQTAwMDBGNDAxMTIwMDAwNENGMkMxMzhCNDM1Cis6MTAxNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDgyMTgwM0EwMDAwMDAwMDY2Cis6MTAxN0EwMDAwMDAwMDAwNDA4QzA4MTMyMDAwMDAwMDA1MTAwMDBEODkxCis6MTAxN0IwMDAwMkMwMDAzMjAwMDAwMDAwMDAwMDAwRDQwMjAwMDAzMjJECis6MTAxN0MwMDAwMDAwMDAwMENCMTkwMDIwMDcwMDAwMzIwNzAwRkMwMUQ4Cis6MTAxN0QwMDAyQjAxMDA4NDc4MEEwMkI5MDAwMDAwMDBDQjAwMDA4NENECis6MTAxN0UwMDAxODQxODgzNDAwMDAwMDAwNEQwMDAwMDA3N0EwODEzRUMxCis6MTAxN0YwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMzYxMEUyCis6MTAxODAwMDAwNDEwMDAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMEFECis6MTAxODEwMDAwN0MwODQzMjAwMDAzNjEwOUYwMDAwMjhEOEEwODJCQzg4Cis6MTAxODIwMDAwMDAwMTQwMjA0MDAwMDFDRDhFMDgxQkMwMDAwMDgwMjgzCis6MTAxODMwMDAyRDAwMDAwMEQ4MjA4MEJBMDAwMDA1MDIxMjAxMDBFODQ3Cis6MTAxODQwMDAwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTQ0Cis6MTAxODUwMDAwMDAwMDcwMjA0MDEwMDgwMjI4MDJEQkMwMDAwMDgwMjY1Cis6MTAxODYwMDBDRDAxMDBEODAyNDA4NDkyMDAwMDA0MDIwMDAwMDBGODdDCis6MTAxODcwMDBBMjgwMkY5NTAwMDAwQjAyMDQwMDAwODA3MjgwMkRCQzE2Cis6MTAxODgwMDAwMDAwMDkwMjEyMDAwMDQ0MTJFMjM4QjIwMDAwMTIwMjA1Cis6MTAxODkwMDAwMDAwMDBEODEyODAyRDlBMDAwMDAwMDAwMDAwMDA4NDkzCis6MTAxOEEwMDBGODQxODgzNDAwMDAwQzAyMTIwMDAwNDQxMkUyMzhCMjAxCis6MTAxOEIwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTEwMjU2Cis6MTAxOEMwMDAwNjAxMDA4MDIyODAyREJDMDAwMDBEMDI2NzAwMDBGODk4Cis6MTAxOEQwMDBBMjgwMkZCNTAwMDAwRTAyMDAwMDAwRTgwMkMwMjE5Mjk1Cis6MTAxOEUwMDAwMDAwMDAwMDAwMDAwMEQ4MDJDMDAwMzIwMDAwNUQwRUMxCis6MTAxOEYwMDAwMDAwMDA0NDA4ODAyREYyMDAwMEZBMDEwMDAwMDAzMEQyCis6MTAxOTAwMDAwODAwMDA5MjAwMDAxQTAyODAwMDAwODBEMjgwMkZCNkVBCis6MTAxOTEwMDAwMDAwMTcwMjEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMEQwCis6MTAxOTIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDE5MDIwNDAxMDA4MEE2Cis6MTAxOTMwMDAyMjgwMkRCQzAwMDAxQTAyMDAwMDAwRDgwMjQwODQ5MkQwCis6MTAxOTQwMDAwMDAwMTYwMjAwMDAwMEY4QTI4MDJGOTUwMDAwMDAwMEExCis6MTAxOTUwMDBDRDAwMDA4NEY4NDE4ODM0MDAwMDFCMDIxMjAwMDA0NENFCis6MTAxOTYwMDAxMkUyMzhCMjAwMDAwMDAwMDAwMDAwRDQwMjQwMDAzMjUxCis6MTAxOTcwMDAwMDAwMDAwMDAwMDAwMEE0MjJDMDgyM0EwMDAwMjMwMjAwCis6MTAxOTgwMDAwNDAxMDA4MDQyMDA4NkJDMDAwMDAwMDAwMDA4MDA1OEVFCis6MTAxOTkwMDAwNzQwODczMjAwMDAyMjAyOEYwMTAwNzQxODQwODdCQTg2Cis6MTAxOUEwMDAwMDAwMDAwMDAwMDAwMDc0MDgwMDAwMzIwMDAwMjUwMjYyCis6MTAxOUIwMDAwMDA0MDA1OEY3QTA4NjlBMDAwMDAwMDAwMDAwMDA3ODlDCis6MTAxOUMwMDBGOUEwODYzQTI4MDAwMDAwMDAwODAwNTg4NzhEOTczQzRGCis6MTAxOUQwMDAwMDAwMDAwMDAwMDAwMEQ4MDI0MDAwMzIxODAwMDAwMEEzCis6MTAxOUUwMDAwMDAwMDAwMEI3NjA4NTM5MDgwMDAwMDAwMDA4MDAwMDEyCis6MTAxOUYwMDA4N0NEODUzNzAwMDAyODAyMTIwMDAwNENGMkMxMzhCNEIwCis6MTAxQTAwMDAwMDAwMDAwMDAwMDAwMDQ4MThBMDg0M0EwMDAwMDAwMDE4Cis6MTAxQTEwMDAwMDAwMDBENDAyMDAwMDMyMDAwMDAwMDAwMDAwMDA4MDNFCis6MTAxQTIwMDA1N0ExODYzQTQxMDAwMDAwMDAwNjAwOEMwNzAwMzYzMkJDCis6MTAxQTMwMDAwMDAwMDAwMDAwMDgwMDgwMDdDMDg1MzIwMDAwMDAwMEEwCis6MTAxQTQwMDAwMDEwMDA4QzA3NDA4NTMyMDAwMDAwMDAwMDAwMDBEODI0Cis6MTAxQTUwMDAwMjgwMDAzMjAwMDAzNjEwMDQwMDAwNTgwODgwNzFCMjg1Cis6MTAxQTYwMDAwMDAwMDAwMDAwMDAwMDgwMDg4MDAwMzIxODAwMzYwMEVFCis6MTAxQTcwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDM1MDIwNDAxMDA4MDM5Cis6MTAxQTgwMDAwMjgwMkRCQzAwMDAzMjAyMDAwMDAwRjhBMjgwMkY5NUQ5Cis6MTAxQTkwMDAwMDAwMzIwMjA0MDEwMDgwMTgwMDg4QkMwMDAwMzgwMkY3Cis6MTAxQUEwMDA5MDE5MDA1OEU4OUM4NUJBMDAwMDAwMDAwMDAwMDA1ODFBCis6MTAxQUIwMDAxODgwODUzQTAwMDAwMDAwMDAxODAwODAwNzg1ODUzMEY2Cis6MTAxQUMwMDAwMDAwM0QwMjA0MDEwMDgwNDIwMDg2QkMwMDAwMDAwMENFCis6MTAxQUQwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDAwMDAwMDAwMDAwOEIyCis6MTAxQUUwMDA4OTgwNzEzNzAwMDAzRTAyMDAxMjAwODQyN0U0ODI5MjUwCis6MTAxQUYwMDAwMDAwMDAwMDAwMTIwMDg0MDcwMDAwMzIwMDAwNDIwMkQzCis6MTAxQjAwMDAyNzAwMDBGQzAyMDA4NUIyMDAwMDQyMDIwNDAwMDA4MEIxCis6MTAxQjEwMDA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOUVBCis6MTAxQjIwMDAzRTAyMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMzYxMDZGCis6MTAxQjMwMDAxMjAwMDA1QzUyODEyQ0I0MDAwMDQ1MDIwNDAxMDA4MEI4Cis6MTAxQjQwMDAwMjgwODJCQzAwMDA2ODAxMDAwMDAwRDQwMjAwMDA5MjA0Cis6MTAxQjUwMDAwMDAwNDgwMjA0MDEwMDE4RDhBMDgxQkMwMDAwNUQwRUZFCis6MTAxQjYwMDAwMDAwMDA0NDA4ODAyREYyMDAwMEUwMDFDNzAxMDAzMEIxCis6MTAxQjcwMDAwODAwMDA5MjAwMDBFMDAxQzcwMTAwNkNEOEUwODY5QURFCis6MTAxQjgwMDAwODAwMDAwMEM2MDEwMEY4OTM0MDAxMzkwMDAwMzIwMzRDCis6MTAxQjkwMDA4MDAxODA4MDMyMEI2QUI2MDAwMDBDMEUwMDAwMDAzQzExCis6MTAxQkEwMDAwMzAwMzhGMjAwMDA0RTAyMDQwNjAxODAwMkMwNkVCQzQxCis6MTAxQkIwMDAwMDAwMzEwMzAwMDYwMUVDNTZFMDZFOUEwMDAwMDAwMEMwCis6MTAxQkMwMDBDNDA3MDFFQzU2RTA2RTNBMDhDMDRGMDIxMjAwMDA0MDE0Cis6MTAxQkQwMDBBMkNEMzlCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUVDCis6MTAxQkUwMDAwMDAwMzYxMDAzQjgwMDAwMDlDMDZFQkQ1MzAyMDAwMEFCCis6MTAxQkYwMDAwMDAwMDA4ODgyMEQ5MDNBMkYwMDdDMDUwMDAwMDAxQzM4Cis6MTAxQzAwMDAwODAwMzY5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEFDCis6MTAxQzEwMDAyQzAwN0MwNTAwMDAwMDFDMDgwMDM2OTIwMDAwMzYxMEU1Cis6MTAxQzIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MERDCis6MTAxQzMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEJBCis6MTAxQzQwMDAzODAwN0MwNTAwMDAwMDFDMDgwMDM2OTIzOTAwN0MwNTM1Cis6MTAxQzUwMDAwMDAwMDAxQzA4MDAzNjkyMDgwMDAwMDAwMDAwMDBGODk4Cis6MTAxQzYwMDA5MzQwMDEzOTAwMDAwQzBFMDAwMDAwM0MwMzAwMzhGMkU0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwNUUwMjFGCis6MTAxQzgwMDAxMjAwMDA0MEEyQ0QzOUIyMTgwMDM2MDAwMDAwMDBGODYyCis6MTAxQzkwMDA3MzBBMDNGOTAwMDAwMDAwMDAwNDAxNzgwOUMwNkUzMkU1Cis6MTAxQ0EwMDAwMDAwMDAwMDAwNjIwMUVDMDY4MDk3MzIwMDAwMDAwMDk2Cis6MTAxQ0IwMDAwMDA2MDFFQzA2NDAwMDMyMDAwMDYzMDJCNTAwMDBEOEM3Cis6MTAxQ0MwMDAwMjAwMDBCMjAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNEJDCis6MTAxQ0QwMDAwMDAwMDAwMDAwMzAwMkU4MDZDMDJDMzIwMDAwMDAwMEM2Cis6MTAxQ0UwMDAwMDE4MDFFMDA2MDAwMDMyMDAwMDAwMDAwMDAwMDBGOENCCis6MTAxQ0YwMDA4Mjg1MkYzMDAwMDA3RDA1MDAwMDAwMUMwODAwMzY5MjEwCis6MTAxRDAwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwNkMwMjU4Cis6MTAxRDEwMDA4MDAwODA4MDMyMEI2QUI2MDAwMDMyMDMwMDAwMDA4MDMxCis6MTAxRDIwMDAwMjAwMDA5MDAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMkEyCis6MTAxRDMwMDAwMDAwNkYwMjA0MDIwMTgwMDJDMDZFQkMwMDAwMzEwMzhCCis6MTAxRDQwMDAwMDAyMDFFQzU2RTA2RTlBMDAwMDAwMDBDMDAzMDFFQ0I2Cis6MTAxRDUwMDA1NkUwNkUzQTAwQzA3MDAyMTIwMDAwNDBBMjhEMzlCMjA3Cis6MTAxRDYwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwN0MwMjM2Cis6MTAxRDcwMDAzODI4MDAxODA5MDA2RUIyMDAwMDc1MDIwNDIxMDEwODFECis6MTAxRDgwMDA2OTI0NkVCQzAzMDA3RDA1MDAwMDAwMUMwODAwMzY5MjJCCis6MTAxRDkwMDAwMDAwNzkwMjAyMzAwMDgwODI5QjkwQkMwMDAwNzgwMjMzCis6MTAxREEwMDAwNjAzMDE4MDEyQzA2RUJDMDQwMDdEMDUwMDAwMDAxQzBCCis6MTAxREIwMDAwODAwMzY5MjA1MDA3RDA1MDAwMDAwMUMwODAwMzY5MkUwCis6MTAxREMwMDAwMDAwN0IwMjA2MDMwMTgwMTJDMDZFQkMwQjAwN0QwNTgzCis6MTAxREQwMDAwMDAwMDAxQzA4MDAzNjkyMEMwMDdEMDUwMDAwMDAxQzZECis6MTAxREUwMDAwODAwMzY5MjAwMDA3RTAyMDQyMTAxMDg2OTI0NkVCQ0JFCis6MTAxREYwMDAwMzAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwODIwMkVFCis6MTAxRTAwMDAwMjMwMDA4MDgyOUI5MEJDMDAwMDgxMDIwNjAzMDE4MEFBCis6MTAxRTEwMDAxMkMwNkVCQzA0MDA3RDA1MDAwMDAwMUMwODAwMzY5MjU0Cis6MTAxRTIwMDAwNTAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwODQwMkI5Cis6MTAxRTMwMDA5RjMxMDEwQzY5MjQ2RUJDMDAwMDAwMDAwMDAwMDAwQzAyCis6MTAxRTQwMDAwOTAwMDAzMjAwMDA4ODAyMDQzMTAwMDQ4OTlCOTBCQzI0Cis6MTAxRTUwMDAwMDAwODcwMjA2MDMwMTgwMTJDMDZFQkMyMDAwN0QwNUQxCis6MTAxRTYwMDAwMDAwMDAxQzA4MDAzNjkyMjEwMDdEMDUwMDAwMDAxQ0M3Cis6MTAxRTcwMDAwODAwMzY5MjAwMDA4QTAyMDQwMjAxODAxMkMwNkVCQzgzCis6MTAxRTgwMDAyMjAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwOEMwMjM0Cis6MTAxRTkwMDAwNDAxMDAwMDM5QTQ5MEJDMjMwMDdEMDUwMDAwMDAxQzUzCis6MTAxRUEwMDAwODAwMzY5MjI0MDA3RDA1MDAwMDAwMUMwODAwMzY5MkQwCis6MTAxRUIwMDAwODAwMzYxMDBDMDAwMEY4NjM0MDAxQjkxMDAwOTEwMkQwCis6MTAxRUMwMDBDNTAxMDBDQzAyMjAxNTk4MDgwMEVEMDIwQzAwMDBGOEI2Cis6MTAxRUQwMDA0MzQwMDFCOTEwMDAwMDAwQzUwMTAwQ0MwMjIwMTUzOEI0Cis6MTAxRUUwMDAwMDAwMEMwRTAwMDAwMDNDMDMwMDM4RjIwMDAwOTQwMkQ5Cis6MTAxRUYwMDAzNjAxMDA1QzA4MDU4MEIwMEYwMDdEMDUwMDAwMDAxQzY1Cis6MTAxRjAwMDAwODAwMzY5MjEwMDAwMDAwMDAyQzAyMDBBOURCODUzOTgxCis6MTAxRjEwMDAwMDAwOTUwMjEyMDAwMDU0MDJBNDM4QjIwMDAwMDAwMDM0Cis6MTAxRjIwMDAwMDA4MDI4QzA4QzA2RTMyMDAwMDAwMDAwMDBDMDI5ODBECis6MTAxRjMwMDAyODgwNkUzNzAwMDAwMDAwMDAwMDAwOUMzODIyMTQzNzEzCis6MTAxRjQwMDAwMDAwOUUwMjA0MzAwMDI4MDgwMDZFQjIwMDAwMzYxMDI3Cis6MTAxRjUwMDAwNDEwMDA2QzA4MDA2RUIyMDAwMDAwMDAwMDE4MDA0Qzc1Cis6MTAxRjYwMDAwODAwNkUzMjAwMDAzNjEwMDQyMDAwMTgwODAwNkVCMjFGCis6MTAxRjcwMDAwNTAwQTEwMjAwMzgwMjAwNzhFMTZFOTkwMDAwMDAwMDFGCis6MTAxRjgwMDA1MTAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDM4MDI3ODQyCis6MTAxRjkwMDAwOUMwNkUzMjA1MDAwMDAwNjgwODAwMDA3N0ExOTczOTdCCis6MTAxRkEwMDAwMDAwQTMwMjEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDhGCis6MTAxRkIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDA1NDU0MDFGQzBCCis6MTAxRkMwMDAwMkMwNkUzMjE0MTBBNzAyMDQwMDAwODBBMjBENzJCMDhECis6MTAxRkQwMDAwMDAwNTEwRjAwMDAwMDI4MDlDMDAyRjIwRTAwN0QwNTJDCis6MTAxRkUwMDAwMDAwMDAxQzA4MDAzNjkyMDAwMEI2MDIzMzE1MDBBNDYxCis6MTAxRkYwMDAwMkMwNzJCMjAwMDBFQTAyODAwMTAwODBCMjAxNzJCNjMzCis6MTAyMDAwMDAwMTAxQUQwMjA0MjkwMDgwODI4RDc0QkMwODBBRUEwMjM1Cis6MTAyMDEwMDAwNDJEMDA4MDgyOEQ3NEJDMDAwMDAwMDAwMDMwMDA3QzI0Cis6MTAyMDIwMDAwODAwNzUzMjAwMDBCNDAyMDAzODAwODgxODAwNzU5QzYyCis6MTAyMDMwMDAwODBBRUEwMjA0MjkwMDgwODI4RDc0QkMxMDAwMDAwMEE2Cis6MTAyMDQwMDAwMDJDMDA3Qzg4OEQ3NTM3MDAwMDAwMDAwMDMwMDA3QzdCCis6MTAyMDUwMDA2OEREODczMjAwMDBCMzAyOUYzOTAwODgxODgwNzVCQ0E0Cis6MTAyMDYwMDAxMDAwMDAwMDAwMzQwMDg4ODg4RDc1MzcwMDAwQjQwMjJECis6MTAyMDcwMDAwMDAwMDA4ODE4ODA4ODlDMTAwMDAwMDAwMDM0MDA4ODUwCis6MTAyMDgwMDA2ODlEODgzOTAwMDBCNzAyOUZGMTAxODA4MkRCODdCQzIwCis6MTAyMDkwMDAwMDAwRUEwMjAwMDAwMDgwMDIwMDAwOTAwMDAwRUEwMjU2Cis6MTAyMEEwMDA4MDAwMDA4MEIyMDE3MkI2MDAwMDAwMDAwMDA4MDA0ODA1Cis6MTAyMEIwMDAwODAwNzUzMjAwMDAwMDAwMDAxMDAwNzAwODAwNzUzMjQyCis6MTAyMEMwMDAwMDAwMDAwMDAwMUMwMDc0MzhBMjc1MzcwMDAwQkMwMjNDCis6MTAyMEQwMDA4MzFCMDA3ODA4QzA3NEIyMDAwMDAwMDAwMDAwMDBGODA0Cis6MTAyMEUwMDBDMjgwMkYzNDAwMDBDQzAyOUY3ODAxODBDMjIxNkVCQ0Q4Cis6MTAyMEYwMDAwMDAwQzAwMjlGOTkwMTY0ODgxQjg3QkMwMDAwQ0QwMkNDCis6MTAyMTAwMDA5RjY4MDE2NDg4NUI4NkJBMDAwMDAwMDAwMDAwMDA2NERDCis6MTAyMTEwMDAwODAwMDAzMjAwMDAwMDAwMDAxNjAwQTQwMkMwNzIzMjY1Cis6MTAyMTIwMDAwMDAwMDAwMDAwM0MwMkE0QjI1QjJBM0EwMDAwMDAwMDVDCis6MTAyMTMwMDAwMDNBMDI3ODA5QzA2RTMyMDAwMENFMDIwODAxMDAwNEE1Cis6MTAyMTQwMDBFOEE1NzVCQzEwMDBFQTAyMEIwMTAwMUMwODAwMzZCMkJECis6MTAyMTUwMDAwMDAwQ0MwMjA0QTEwMTgwODI5Qjg0QkMwMDAwN0QwNUFDCis6MTAyMTYwMDA5Rjk4MDE4MEMyMjE2RUJDMDAwMDdEMDUwNkIxMDE4MEYwCis6MTAyMTcwMDA4MjVCODdCQzAwMDBFOTAyMEIwMTAwODAwMjAwMDBCMDE2Cis6MTAyMTgwMDAwMDAwQ0QwMjA0OTkwMTgwQzIyMTZFQkMwMDAwRTcwMjZDCis6MTAyMTkwMDAwMkQ0MDE4MDkyRkI2RUJDMTYwMDdEMDUwMDAwMDAxQzdECis6MTAyMUEwMDAwODAwMzY5MjE3MDA3RDA1MDAwMDAwMUMwODAwMzY5MkRBCis6MTAyMUIwMDAxQzAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwRDAwMkMzCis6MTAyMUMwMDAwNEExMDE4MDgyOUI4NEJDMDAwMEQ3MDIwNkE4MDE4MDg0Cis6MTAyMUQwMDA4MjVCODBCQzAwMDBENDAyMDRBOTAxODAwMjAwNkVCQ0I2Cis6MTAyMUUwMDAwMDAwRTgwMjA0QTEwMTgwODI5Qjg0QkMwMDAwRTgwMjk4Cis6MTAyMUYwMDAwNDAxMDA4MDEyNDA4MEJDMTQwMDdEMDUwMDAwMDAxQzFBCis6MTAyMjAwMDAwODAwMzY5MjAwMDBFODAyOUZBMDAxNzgyOTIxNkVCQ0U4Cis6MTAyMjEwMDAwMDAwRTgwMjAyMDEwMDgwMTJBMDk3QkMwMDAwQ0MwMjdFCis6MTAyMjIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUzMDIwNDAwMDA4MDMzCis6MTAyMjMwMDAwMjgwODJCQzAwMDBEQzAyMDIwMDAwODBBMjYwODBCQzQwCis6MTAyMjQwMDAwNjAwN0QwNTJDMDEwMDFDMDgwMDM2QjIwMEMwRTAwMjJCCis6MTAyMjUwMDAwNDAxMDA4MEEyOEQyRkIwMDYwMDdEMDUwMDAwMDAxQzQ3Cis6MTAyMjYwMDAwODAwMzY5MjAwMDBFMDAyMDQwMDAwODBBMjYwODBCQ0ZBCis6MTAyMjcwMDAwMDAwREYwMjA2MDMwMTgwMTJDMDZFQkMwOTAwN0QwNTZDCis6MTAyMjgwMDAwMDAwMDAxQzA4MDAzNjkyMEEwMDdEMDUwMDAwMDAxQ0JBCis6MTAyMjkwMDAwODAwMzY5MjAwMDBFMjAyMDYwMzAxODAxMkMwNkVCQzA0Cis6MTAyMkEwMDAwNzAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwODAwN0QwNTJGCis6MTAyMkIwMDAwMDAwMDAxQzA4MDAzNjkyMDIwMDdEMDUzODAxMDAxQzU5Cis6MTAyMkMwMDAwODAwMzZCMjAwMDBFNjAyMDIwQzAyODBBMjVCODBCQzZECis6MTAyMkQwMDAxRjAwN0QwNTAwMDAwMDFDMDgwMDM2OTIxRTAwN0QwNUQxCis6MTAyMkUwMDAwMDAwMDAxQzA4MDAzNjkyMDAwMEVCMDIwMDAwMDAyOEVECis6MTAyMkYwMDAwOTQwMDA5MjAwMDBFQjAyMDAwMDAwMjgwOTgwMDA5MkQzCis6MTAyMzAwMDAwMDAwRUIwMjAwMDAwMDI4MDlDMDAwOTIwMDAwRUIwMjcwCis6MTAyMzEwMDAwMDAwMDAyODA5MDAwMTkyMEUwMDUxMEYwMDAwMDAxQzZGCis6MTAyMzIwMDAwODAwMzZGMjAwMDA3RDA1MDAwMDAwODAwMjAwMDA5MEU5Cis6MTAyMzMwMDAxMDAwMzYxMDJBMDAwMENDMDIyMDE1QjgwMDAwMEMwRTQ4Cis6MTAyMzQwMDAwMDAwMDAzQzAzMDAzOEYyMUQwMEYxMDI4MDAxMDA3ODFCCis6MTAyMzUwMDAwOUUwMDBCODFEMDA3RDA1MDAwMDAwMUMwODAwMzY5MjUxCis6MTAyMzYwMDAxNTAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwMDAwMEVBCis6MTAyMzcwMDAwMDAwMDAxQ0E4MDUyODMwMDgwMDAwMDAwMDAwMDBGODNDCis6MTAyMzgwMDA4MzQwMDEzOTAwMDAzRTAzODAwMTgwODAzMjBCNkFCNjMxCis6MTAyMzkwMDAwMDAwMEMwRTAwMDAwMDM4MDMwMDM4RjI3RTA1MDAwMDNCCis6MTAyM0EwMDAwMDAwMDA4ODgyQ0Q4MTNBMDAwMEY5MDIxRDQxMDI1Q0U0Cis6MTAyM0IwMDBGODAxNjhCNDQxMDAzMTAzMDAwMDAwRjhBMjhEMkY5MUFDCis6MTAyM0MwMDAxMDAwMDAwMEQwMkMwMjAwQTlEQjg1MzkwMDAwOTYwMjI1Cis6MTAyM0QwMDAxMjAxMDA1NDAyQTQzOEIyMDAwMEZBMDIwMDAwMDA4MDhBCis6MTAyM0UwMDAwMjAwMDA5MDAwMDAwMDAzMDRCMDAwODAwMjAwNkVCQ0Y4Cis6MTAyM0YwMDAwMDAwMDAwMzgwQjkwMDgwODI4MDZFQjYwMDAwMjUxMEM2Cis6MTAyNDAwMDAwMDc4MDE2MDA4MDA2RUYyMzAwMDdDMDVENzAwMDAxQ0U3Cis6MTAyNDEwMDAwODAwMzY5MjAwMDAwMjAzODAwMTAwODBEMjgxMkZCNkFFCis6MTAyNDIwMDAzMTAwN0MwNUQ3MDAwMDFDMDgwMDM2OTIwMDAwMDQwMzMwCis6MTAyNDMwMDA4MDAxMDA4MDQyODEyRkI2MzUwMDdDMDVENzAwMDAxQzRBCis6MTAyNDQwMDAwODAwMzY5MjAwMDAxMTAzMDRBODAxMDgwOTAwNkVCMkNBCis6MTAyNDUwMDAwMDAwMDAwMDAwMjAwMjA4ODk5QjkwM0UwMDAwMDAwMDYwCis6MTAyNDYwMDAwMEEwMDEwODg5OUI5MDNBMDAwMDExMDM5Rjg4MDEwODkxCis6MTAyNDcwMDA4OTlCOTBCQzAwMDAwMDAwMDAzNDAyMDAwOUMwNkUzRDQyCis6MTAyNDgwMDAwMDAwMDAwMDAwMEMwMjA0MDlBNDZFMzcwMDAwMEQwM0Q4Cis6MTAyNDkwMDAwMjAwMDA4MDEyQTQ5MEJDMDAwMDAwMDAwMDAwMDAwOEIwCis6MTAyNEEwMDAxOTgwOTAzNzAwMDAxMTAzMDIwMTAyODA4MjlCOTBCQ0NBCis6MTAyNEIwMDAzMTAwN0MwNUQ3MDAwMDFDMDgwMDM2OTIwMDAwMTEwMzkzCis6MTAyNEMwMDAwNEIwMDA4MDAyMDA2RUJDMDAxMjExMDMwNDAxMDA4MDAxCis6MTAyNEQwMDBBMjhEMkZCMDMyMDA3QzA1RDcwMDAwMUMwODAwMzY5Mjc4Cis6MTAyNEUwMDAwMDAwMzEwMzAwMDAwMEY4NzI4MTJGOTUwMDAwMDAwMDA5Cis6MTAyNEYwMDAwMDAwMDBGODQyODAyRjM0MDhDMDUwMDIxMjAxMDA0MDUyCis6MTAyNTAwMDBBMkNEMzlCMjAwMDAxMzAzMDAwMDAwODAwMjAwMDA5MDQ5Cis6MTAyNTEwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwM0UwMzZECis6MTAyNTIwMDA4MDAxODA4MDMyMEI2QUI2MDAwMDAwMDAwMDAwMDAxNEI5Cis6MTAyNTMwMDAwODQwOTAzMjAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMjEyCis6MTAyNTQwMDA3RTA1MDAwMDAwMDAwMDg4ODJDRDgxM0EwODAwMDAwMDZFCis6MTAyNTUwMDAwMDAwMDBGODkzNDAwMTM5MDAwMDNFMDM4MDAxODA4MEI0Cis6MTAyNTYwMDAzMjBCNkFCNjAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMjhGCis6MTAyNTcwMDAwMDAwMUYwMzA0MjAwMTgwNTIyMDZFQkMyNjAwN0QwNTUwCis6MTAyNTgwMDAwMDAwMDAxQzA4MDAzNjkyMjUwMDdEMDUwMDAwMDAxQzlDCis6MTAyNTkwMDAwODAwMzY5MjAwMDAyNTAzMDQwMTAwRDgxRTgwRURCQzFGCis6MTAyNUEwMDAwMDAwMjEwM0I3MDAwMEQ4MEVDMEVEQjIwMDAwMjQwM0U0Cis6MTAyNUIwMDAwNDAxMDA4MDQyM0JFRUJDMDAwMDAwMDAwMDAwMDBFMDhGCis6MTAyNUMwMDAxRTAwRUUzQTAwMDAwMDAwQTcwMDAwRDAwRTAwRUUzMjIwCis6MTAyNUQwMDAwMDAwMDAwMDAwNzQ4NkNDMDI4MDZDMzIwMDAwMDAwMDE1Cis6MTAyNUUwMDAwMDAwMDAwMDA5NDBFNzMyMDAwMDI5MDM4MDAxODA4MERDCis6MTAyNUYwMDAzMjBCNkFCNjM2MDAyODAzMTIwMDAwMkM4MkNEMkVCMkIwCis6MTAyNjAwMDAwMDAwMkIwMzA0MDEwMDgwNDJDNTJDQkMwMDAwMkMwM0Y5Cis6MTAyNjEwMDAwMDAwMDBDQzAyMDAwMDkyMDAwMDAwMDAwMDAwMDBDQzhFCis6MTAyNjIwMDAxMkMwMkMzQTAwMDAyNzAzMDQwMTAwMDAxOTAwOTBCQ0RFCis6MTAyNjMwMDAwMDAwMDAwMDAwNzQ4NkM4MDZDMDJDMzIwODAwM0UwMzZCCis6MTAyNjQwMDAwMDAwMDBGOEMzNDAwMTk5MDAwMEZBMEQwMDAwMDAyQ0MyCis6MTAyNjUwMDAwOTAwMDBGMjAwMDAzMjAzMDAwMDAwODAwMjAwMDA5MDM4Cis6MTAyNjYwMDAwMDAwRkEwRDAwMDAwMDJDRjkwMTAwRjQwMDAwM0IwMzBCCis6MTAyNjcwMDAwNDAwMDAyODA5ODA4MEIyMDAwMDAwMDAwMDAwMDBEODlCCis6MTAyNjgwMDAwMjAwMDAzMjAwMDBGMTBFMDAwMDAwMDgwODAwMDBEMjM1Cis6MTAyNjkwMDAwMDAwM0IwMzA0MDAwMDgwMDI4MDkyQkMxODAwMzYwMDVBCis6MTAyNkEwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDNFMDM4MDAxMDA4MDc3Cis6MTAyNkIwMDBBMjgwMkZCNjAwMDAzRTAzMTIwMTAwMDAwOUMwMjFCMjIzCis6MTAyNkMwMDAxODAwMDAwMDAwMDAwMEY4NzMwQTAzMzkzRTAzMzYwMENBCis6MTAyNkQwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDNFMDM4MDAxMDA4MDJFCis6MTAyNkUwMDBBMjgwMkZCNjAwMDAzRTAzMTIwMTAwMDAwOUMwMjFCMkYzCis6MTAyNkYwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDFCCis6MTAyNzAwMDAwMDAwMDBGODAyMDAwMDMyMTgwMDM2MDAwMDAwMDBGODU3Cis6MTAyNzEwMDA3MzhBMDI5OTEwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMkMyCis6MTAyNzIwMDAwMjAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDVBCis6MTAyNzMwMDAwMDAwMDBFNDAzMDAzNjMyMDQwMDAwMDEwMDAwMDBFMDY1Cis6MTAyNzQwMDAwMzAwMzczMkFBMDQwMDAwMDAwMDAwRTQwMzAwMzYzMjIwCis6MTAyNzUwMDAwOTAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDIzCis6MTAyNzYwMDAwMDAwMDBDQzBGMDAwMDMyMDAwNzAwMDAwMDAwMDBFNDcxCis6MTAyNzcwMDAwMzAwMzYzMjA2MDAwMDAxMDAwMDAwRTAwMzAwMzczMjlCCis6MTAyNzgwMDAyMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwODAwMDAwMUQxCis6MTAyNzkwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMTAwMDAwMDAwMDBFNDA4Cis6MTAyN0EwMDAwMzAwMzYzMjA1MDAwMDAxMDAwMDAwRTAwMzAwMzczMjZDCis6MTAyN0IwMDAzMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwNzAwMDAwMTkyCis6MTAyN0MwMDAwMDAwMDBFMDAzMDAzNzMyMDBBMDAwMDAwMDAwMDBFNDM5Cis6MTAyN0QwMDAwMzAwMzYzMjA4MDAwMDA4MDAwMDAwRTAwMzAwMzczMjMyCis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMEEwMDIwMDAwMzIwMDAwMDAwMDE1Cis6MTAyN0YwMDAwMDAwMDAwMDBCMDAwMDMyMDAwMDUyMDM4QjAxMDBBMDFCCis6MTAyODAwMDAxMjAwMkFCQTAwMDAwMDAwMDAwMDAwQTgwMjAwMDAzMkY2Cis6MTAyODEwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwNTUwMzQ3Cis6MTAyODIwMDAwNjAxMDA4MDAyODAyQUJDMDAwMDAwMDAwMDAwMDA5QzFECis6MTAyODMwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRDQwMjAwMDAzMjVDCis6MTAyODQwMDAwMDAwMDAwMDAwMDAwMENDMDIwMDAwMzIwMDAwMDAwMDg4Cis6MTAyODUwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEMDlDCis6MTAyODYwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwREMwMjAwMDAzMjI0Cis6MTAyODcwMDAwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDJDCis6MTAyODgwMDAwMDAwMDBDODAyMDAwMDMyMDAwMDAwMDAwMDAwMDBDNDg4Cis6MTAyODkwMDAwMjAwMDAzMjAwMDA1ODAzODUwMTAwOUMxMkMwMjlCQUQyCis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwQjAwMDAwNENBCis6MTAyOEIwMDAwMDAwMDBFMDAzMDAzNzMyODAwMDAwMDAwMDAwMDBFNDY4Cis6MTAyOEMwMDAwMzAwMzYzMjEzMDAwMDA0MDAwMDAwRTAwMzAwMzczMjNBCis6MTAyOEQwMDAwMDIwMDAwMDAwMDAwMEU0MDMwMDM2MzIwQzAwMDAwNDc5Cis6MTAyOEUwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNEI4Cis6MTAyOEYwMDAwMzAwMDYzMjBGMDAwMDA0MDAwMDAwRTAwMzAwMzczMjNFCis6MTAyOTAwMDAwMDQ0MDAwMDAwMDAwMEU0MDMwMDM2MzIwRDAwMDAwNDIzCis6MTAyOTEwMDAwMDAwMDBFMDAzMDAzNzMyMDAwNDAwMDAwMDAwMDBFNDgzCis6MTAyOTIwMDAwMzAwMzYzMjE0MDAwMDA0MDAwMDAwRTAwMzAwMzczMkQ4Cis6MTAyOTMwMDA5RjAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxNTAwMDAwNDkwCis6MTAyOTQwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDU3Cis6MTAyOTUwMDAwMzAwMzYzMjE4MDAwMDA0MDAwMDAwRTAwMzAwMzczMkE0Cis6MTAyOTYwMDA2MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxRDAwMDAwNDk3Cis6MTAyOTcwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDI3Cis6MTAyOTgwMDAwMzAwMDQzMjFFMDAwMDA0MDAwMDAwRTAwMzAwMzczMkEwCis6MTAyOTkwMDA3MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxRjAwMDAwNDU1Cis6MTAyOUEwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNEY3Cis6MTAyOUIwMDAwMzAwMDAzMjIwMDAwMDA0MDAwMDAwRTAwMzAwMzczMjcyCis6MTAyOUMwMDBBMDAzMDAwMDAwMDAwMEU0MDMwMDM2MzIxNzAwMDAwNEZBCis6MTAyOUQwMDAwMDAwMDBFMDAzMDAzNzMyNDAwMDAwMDAwMDAwMDBFNDg3Cis6MTAyOUUwMDAwMzAwMzYzMjFCMDAwMDA0MDAwMDAwRTAwMzAwMzczMjExCis6MTAyOUYwMDA2MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxQzAwMDAwNDA4Cis6MTAyQTAwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDk2Cis6MTAyQTEwMDAwMzQwMDAzMjE2MDAwMDA0MDAwMDAwRTAwMzAwMzczMkRCCis6MTAyQTIwMDAwMDAxMDAwMDAwMDAwMEU0MDMwMDM2MzIxQTAwMDAwNDM4Cis6MTAyQTMwMDAwMDAwMDBFMDAzMDAzNzMyMjAwMTAwMDAwMDAwMDBFNDQ1Cis6MTAyQTQwMDAwMzAwMzYzMjE5MDAwMDA0MDAwMDAwRTAwMzAwMzczMkIyCis6MTAyQTUwMDA4MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwQjAwMDAwMTlCCis6MTAyQTYwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMTAwMDAwMDAwMDBFNDM1Cis6MTAyQTcwMDAwMzAwMzYzMjBDMDAwMDAxMDAwMDAwRTAwMzAwMzczMjkyCis6MTAyQTgwMDBGRUZGMDAwMDAwMDAwMEFDMDIwMDM2MzIwMDAwMDAwMDMzCis6MTAyQTkwMDAwMDAwMDAwMDA5MDAwMDMyMTgwMDAwMDAwMDAwMDBGOEVCCis6MTAyQUEwMDAwMzY0MDIzOTAwMDA4QjAzODUwMTAwMDAxOTAwOTBCQTBECis6MTAyQUIwMDAyNTI2MDAwMDAwMDAwMEU0MDMwMDM2MzIwMTAwMDAwMTdBCis6MTAyQUMwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDA4MDNBCis6MTAyQUQwMDAwRjAwMDAzMjAwMDAwMDAwMDAwMDAwODQwRjAwMDAzMkYwCis6MTAyQUUwMDAwODAwMDAwMDAwMDAwMEY4RjM0MDAxMzkwODAwMDAwMDcxCis6MTAyQUYwMDAwMDAwMDBGOEUzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODgxCis6MTAyQjAwMDBDMzQwMDEzOTA4MDAwMDAwMDAwMDAwRjhCMzQwMDEzOTVCCis6MTAyQjEwMDAwODAwMDAwMDAwMDAwMEY4QTM0MDAxMzkwODAwMDAwMDkwCis6MTAyQjIwMDAwMDAwMDBGODkzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEEwCis6MTAyQjMwMDA4MzQwMDEzOTA4MDAwMDAwMDAwMDAwRjg3MzQwMDEzOUFCCis6MTAyQjQwMDAwODAwMDAwMDAwMDAwMEY4NjM0MDAxMzkwODAwMDAwMEEwCis6MTAyQjUwMDAwMDAwMDBGODUzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEIwCis6MTAyQjYwMDA0MzQwMDEzOTA4MDAwMDAwMDAwMDAwRjgzMzQwMDEzOUZCCis6MTAyQjcwMDAwODAwMDAwMDAwMDAwMEY4MTM0MDAxMzkwMDAwMDAwMEM4Cis6MTAyQjgwMDAwMDAwMDBGODAzODAwMDMyMDAwMDAwMDAwMDAwMDBDOEQwCis6MTAyQjkwMDAzRjgwRkMzNTAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMjc1Cis6MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMzI2RTAwMDAwMDgyCis6MTAyQkIwMDAwMDAwMDBEMDAyMDAzNjMyMDAwMDAwMDAwMDAwMDAyOEIzCis6MTAyQkMwMDAwMzQwMzgzMjAwMDAzNjEwMDQwMTAwODBEMjAxMzBCNkQ0Cis6MTAyQkQwMDAwMDAwQTMwMzA0MDEwMEQwMTIwMDJEQkNFMDAzMDAwMDlDCis6MTAyQkUwMDAwMDAwMDBFNDAzMDAzNjMyMDMwMDAwMDEwMDAwMDBFMEIyCis6MTAyQkYwMDAwMzAwMzczMjAwMDAwMDAwMTcwMDAwRDAwMjAwMDAzMjRFCis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMEFDRTEwMDAwMzQwMDAwMDAwMDAzCis6MTAyQzEwMDAwMDAwMDFFMDA2MDAwMDMyMDAwMDAwMDAwMDA4MDFFNEFFCis6MTAyQzIwMDAwNjAwMDAzMjAwMDAwMDAwMDAwRTAxRUMwNjAwMDAzMjM5Cis6MTAyQzMwMDAwMDAwMDAwMDAwMTAwMUUwMDYwMDAwMzIwMDAwMDAwMDZCCis6MTAyQzQwMDAwMDAwMDBEMDEyMDAyRDNBNkUwMEFCMDMwMjAxMDA4MDlDCis6MTAyQzUwMDA4MjBEMkRCQzAyMDAwMDAwMDAwMDAwOUNBRTBEMDIzMjZGCis6MTAyQzYwMDAwMDAwMDAwMDAwMDAwMEE4MDIwMDAwMzIwMDAwMDAwMDg4Cis6MTAyQzcwMDAwMDg4ODZDQzA3MDAzNjMyMDAwMDAwMDAwMDhBODZDQzJGCis6MTAyQzgwMDAwNzAwMDAzQTAwMjQwMDAwMDAwMDAwMDQwOTgwMzYzMkVBCis6MTAyQzkwMDAwMDAwMzYxMDEyMDAwMDY0MDI0MDkwQjIwMDAwMDAwMEY0Cis6MTAyQ0EwMDAwMDAwMDAwNDI5NDA5MDNBMDAwMEI3MDMxMjAwMDA3OEE5Cis6MTAyQ0IwMDAwOUMwMjBCMjAwMDAwMDAwMDAwMDAwNzgwOTQ1OTAzMEYzCis6MTAyQ0MwMDAwMDAwQjUwMzAyMDEwMDgwQzI4Mjk3QkMwMDAwMDAwMDMyCis6MTAyQ0QwMDAwMDAwMDA4NDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBDQzcwCis6MTAyQ0UwMDAwMzAwMDAzMjAwMDBCQjAzOEUwMTAwODAwMjQwMjhCMkM2Cis6MTAyQ0YwMDAwMDAwNTEwRTAwMDAwMEQ4MDIwMDAwRDIxNTBGMDAwMEE1Cis6MTAyRDAwMDAwMDAwMDA4QzBFMDAzNjMyNTIwMDAwMDAwMDAwMDA3NEZCCis6MTAyRDEwMDAwRTAwMzYzMjE4MDAwMDAwMDAwMDAwRTQwMzAwMzYzMkQ2Cis6MTAyRDIwMDAwOTAwMDAwMjAwMDAwMEUwMDMwMDM3MzJGRUNBMDAwMDg0Cis6MTAyRDMwMDAwMDAwMDBFNDAzMDAzNjMyMEEwMDAwMDIwMDAwMDBFMDU4Cis6MTAyRDQwMDAwMzAwMzczMjAwMDBDNjAzMTIwMTAwMDAwOTQwMjBCMjIwCis6MTAyRDUwMDAwMDAwQzQwMzAwMDAwMDgwMDIwMDAwOTAwMDAwQzYwM0QxCis6MTAyRDYwMDAxMjAwMDAwNDA5NDAyMEIyMDAwMEM5MDM5RjAxMDA4MDQ2Cis6MTAyRDcwMDAwMjAwOTBCMjAwMDBDODAzMTIwMDAwMDgwOTQwMjBCMjBGCis6MTAyRDgwMDAwMjAwQzQwMzA0MDEwMDc4MDkyNDE3QjgwNjAwMDAwMEZCCis6MTAyRDkwMDAwMDAwMDA3ODA5NjQxNjM4MDAwMEM0MDMwNDAxMDA4MEI0Cis6MTAyREEwMDAwMjgxOTdCQ0ZFMDAwMDAwMDAwMDAwNDQwMzAwMzYzMkEwCis6MTAyREIwMDBGRTAwMzYwMDAwMDAwMDQ4MDMwMDM2OTIwMDAwMzYxMDg2Cis6MTAyREMwMDAxMjAwMDAwMDA5NDAyMEIyMDAwMENGMDMxMjAwMDAwNEVFCis6MTAyREQwMDAwOTQwMjBCMjAwMDBEMjAzOUYwMTAwODAwMjAwOTBCMjlGCis6MTAyREUwMDAwMDAwRDEwMzEyMDAwMDA4MDk0MDIwQjIwMDAwMDAwMERBCis6MTAyREYwMDAwMDAwMDBCNDAyMDA5MDMyMDAwMDM2MTAwMDAwMDA4MDk1Cis6MTAyRTAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQ4Cis6MTAyRTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDE0Cis6MTAyRTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MENBCis6MTAyRTMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEE4Cis6MTAyRTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEU0Cis6MTAyRTUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDlBCis6MTAyRTYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc4Cis6MTAyRTcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEI0Cis6MTAyRTgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDZBCis6MTAyRTkwMDAwMjAwMDA5MDA2MDBFQTAzMDAwMDAwMEMwOTY0MTY5ODg2Cis6MTAyRUEwMDAwMDAwNDkwMjAwMDAwMDE0MDg0MDkwOTIwMDAwNjkwMkVFCis6MTAyRUIwMDAwMDAwMDAxNDA4NDA5MDkyMzQwMDE1MDMwMDAwMDAxQzJDCis6MTAyRUMwMDAwODAwMzY5MjEyMDAxNTAzMDAwMDAwMUMwODAwMzY5MjFDCis6MTAyRUQwMDAzQTAwMTUwMzAwMDAwMDFDMDgwMDM2OTIwMDAwMzYxMDZFCis6MTAyRUUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDVCMDIwMDAwMDAxNDVGCis6MTAyRUYwMDAwODQwOTA5MjAwMDAxRDA0MDAwMDAwODAwMjAwMDA5MDM1Cis6MTAyRjAwMDAwMDAwMUEwMzAwMDAwMDE0MDg0MDkwOTJFQjAzMDAwMDM4Cis6MTAyRjEwMDAwMDAwMDA4ODgyQ0Q5MDNBMEQwMDBEMDQwMDAwMDBGQ0Y2Cis6MTAyRjIwMDAwMkU0MTY5ODBEMDAxRTA0MDAwMDAwRkMwMkU0MTY5ODRFCis6MTAyRjMwMDAwRDAwMjcwNDAwMDAwMEZDMDJFNDE2OTgwMDAwMzQwNDkxCis6MTAyRjQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDNEMDQwMDAwMDAwMDJFCis6MTAyRjUwMDAwOTQwOTA5RDAwMDA0MDA0MDAwMDAwODAwMjAwMDA5MEE1Cis6MTAyRjYwMDAwMDAwNDkwNDAwMDAwMDgwMDIwMDAwOTAwMDAwNTIwNEFDCis6MTAyRjcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDVCMDQwMDAwMDAwMEUwCis6MTAyRjgwMDAwOTQwOTA5RDAwMDA2MDA0MDAwMDAwODAwMjAwMDA5MDU1Cis6MTAyRjkwMDAwMDAwNjgwNDAwMDAwMDAwMDk0MDkwOUQwMDAwNkQwNERFCis6MTAyRkEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERDMDQwMDAwMDAwMDJGCis6MTAyRkIwMDAwOTAwMDA5MjAwMDBEQzA0MDAwMDAwMDAwOTQwMDA5MkJCCis6MTAyRkMwMDAxRDA3REUwNDAwMDAwMEEwMDIwMDM2OTIwMDAwRUMwNEExCis6MTAyRkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDE5Cis6MTAyRkUwMDAwMjAwMDA5MDAwMDAxRDA0MDAwMDAwREMwRjQwOTA5MkUxCis6MTAyRkYwMDAwMDAwQjAwNDAwMDAwMDgwMDIwMDAwOTAwMDAwQjUwNDUyCis6MTAzMDAwMDAwMDAwMDBENDAyMDAwMDkyMTAwMENBMDQwMDAwMDA4NEY2Cis6MTAzMDEwMDAxRjY0MTQ5ODAwMDAxRDA0MDAwMDAwRUMwRTQwOTA5MjA0Cis6MTAzMDIwMDAwMDAwRDYwNDAwMDAwMDgwMDIwMDAwOTAwMDAwMUQwNDkzCis6MTAzMDMwMDAwMDAwMDBENDBFNDA5MDkyMDAwMEQ5MDQwMDAwMDA4MEVGCis6MTAzMDQwMDAwMjAwMDA5MDAwMDA2RDA1MDAwMDAwREMwRTQwOTA5MjMwCis6MTAzMDUwMDAwMDAwRkIwNDAwMDAwMDgwMDIwMDAwOTAwODAwMDAwNTUyCis6MTAzMDYwMDAwMDAwMDA1MDFGMjQxNjk4MDAwMDBGMDUwMDAwMDBEODMzCis6MTAzMDcwMDAwMjAwMDA5MjBEMDAxOTA1MDAwMDAwRkMwMkU0MTY5ODAxCis6MTAzMDgwMDAwMDAwMUEwNTAwMDAwMEQwMDIwMDAwOTIwMDAwRjYwMEM3Cis6MTAzMDkwMDAwMDAwMDBEMDAyMDAwMDkyMDAwMDM1MTAwMDAwMDA4MDA3Cis6MTAzMEEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDM2Cis6MTAzMEIwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMDAwMDAzCis6MTAzMEMwMDAwMDAwMDA3ODA5NDU5MDMwMDAwMDNFMDMwNjAxMDA4MEIyCis6MTAzMEQwMDAyMjgwOTdCQzAyMDAxMDA0QjAwMDAwQTBGMjBCMDBCOURGCis6MTAzMEUwMDAwMDAwMDAwMEEwMDAwMDA0NkI0MTkwMzQwMDAwM0UwMzhCCis6MTAzMEYwMDA4MDAxMDA4MDAyNDBCMEI2MDAwMDNFMDMwNDAwMDA4MDYyCis6MTAzMTAwMDAwMjgwQjBCQzAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMkM1Cis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMEE4MjJDMDJGMzcwMDAwMDAwMEJGCis6MTAzMTIwMDAwMDAwMDAwMDY3MDEwMDM0MDA0MjAwMDAwMDA4MDAwMEI5Cis6MTAzMTMwMDA4NzhEMkEzQTAwMDAzNjEwMDQxMDAwMDAwNzAwQjBCMjU0Cis6MTAzMTQwMDAwMDAwMDAwMDAwMTgwMDAwMDcwMEQwMzIwMDAwMUEwNDQwCis6MTAzMTUwMDAxMjAwMDA0OEYyQzEzOEI0MTgwMDAwMDAwMDAwMDBGODY2Cis6MTAzMTYwMDA3MzBBMDMzOTNFMDMzNjAwMDAwMDAwQzAwMjAwMzY5MkE1Cis6MTAzMTcwMDAwODAwM0UwMzAwMDAwMEY4OTM0MDAxOTkwMDAwMjEwNDdDCis6MTAzMTgwMDA5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwOEQ0Cis6MTAzMTkwMDAwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjI4Cis6MTAzMUEwMDAwMjAwMjEwNEIwMDAwMEEwRjIwQjAwQjkwMDAwMDAwMEYyCis6MTAzMUIwMDAwMDAwMDAwMDBCODA5MDMyMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAzMUMwMDAwRDQwOTAzMjAwMDAwMDAwQTAwMDAwMDQzQjQwQjAzMUYwCis6MTAzMUQwMDAwMDAwMUQwNDA0MDAwMDgwMDJDMDJGQkNGMjBFMUQwNDdDCis6MTAzMUUwMDAwMDAwMDA4QzBFMDAzNjkyMDgwMDAwMDAwMDAwMDBGODdECis6MTAzMUYwMDA5MzQwMDEzOTAyMDAyODA0QjAwMDAwQTBGMjBCMDBCOThFCis6MTAzMjAwMDAwMDAwMkIwNDgwMDEwMDgwMTI0MEIwQjYwMDAwMDAwMEQ2Cis6MTAzMjEwMDAwMDAwMDAwNDNCNDBCMDMzMDAwMDAwMDAwMDAwMDAwNDQ4Cis6MTAzMjIwMDBGRDRCRDAzNTAwMDAwMDAwMDAwMDAwMDgwQjAwMDAzMjBDCis6MTAzMjMwMDAwMDAwMDAwMEEwMDAwMDBDMUJFNEIwMzIwMDAwM0UwM0MwCis6MTAzMjQwMDAwQjAwMDA4MDAyMDAwMEIwMDAwMDMxMDQwNDAwMDA4MDg4Cis6MTAzMjUwMDAwMjQwOTBCMjFGMDAzRTAzMDAwMDAwODAxMTQwMDA5OTIwCis6MTAzMjYwMDAwMDAwMzAwNDA0MDAwMDgwMTIzRUY4QkEwMDAwMDAwMEE0Cis6MTAzMjcwMDAwMDAwMDA4MDAxMDBGODMyMDAwMDNFMDMwMDAwMDA5MEQyCis6MTAzMjgwMDAwMTQwRjg5MjAwMDAzNjEwODAwMDAwODAwMjgxRkNCNkY4Cis6MTAzMjkwMDAwMDAwMzgwNDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDhGCis6MTAzMkEwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA3Cis6MTAzMkIwMDAwOUMwRkQzMjAwMDAwMDAwMDAwMDAwRTQwMzgwOTAzMkVECis6MTAzMkMwMDAwOTAwMDAwNDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMEE1Cis6MTAzMkQwMDAwMDAwMDBFNDAzNDA5MDMyMEEwMDAwMDQwMDAwMDBFMDE3Cis6MTAzMkUwMDAwMzAwMzczMjAwMDAxRDA0MDAwMDAwQzgwRjgxRkM5NDY5Cis6MTAzMkYwMDAwMDAwMDAwMDAwMDAwMEU0NzMwMDkwM0MxMDAwMDAwNDk3Cis6MTAzMzAwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDA4MEQwCis6MTAzMzEwMDAwMjAwMDA5MDAwMDA0MzA0OUYwMDAwODAwMjAwOTBCMjcxCis6MTAzMzIwMDAwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDhBCis6MTAzMzMwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDAwMDAwMDAwMDBFNEFECis6MTAzMzQwMDAwMzgwOTAzMjAxMDAwMDA0MDAwMDAwRTAwMzAwMzczMkU3Cis6MTAzMzUwMDAwMDAwMDAwMDAwMDAwMEUwMEY4MDkwMzIwMDAwMDAwMDNDCis6MTAzMzYwMDAwMDAwMDBFNDAzNDA5MDMyMDIwMDAwMDQwMDAwMDBFMDhFCis6MTAzMzcwMDAwMzAwMzczMjAwMDAxRDA0MDAwMDAwRTQwRjQwOTA5MjZCCis6MTAzMzgwMDAwMDAwNEMwNDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDhBCis6MTAzMzkwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDE2Cis6MTAzM0EwMDAwOUMwRkQzMjAwMDAwMDAwMDAwMDAwRTQwMzgwOTAzMkZDCis6MTAzM0IwMDAwMzAwMDAwNDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMEJBCis6MTAzM0MwMDAwMDAwMDBBODBFODA5MDMyMDAwMDAwMDAwMDAwMDBFNDIxCis6MTAzM0QwMDAwMzQwOTAzMjA0MDAwMDA0MDAwMDAwRTAwMzAwMzczMjk0Cis6MTAzM0UwMDAwMDAwMUQwNDAwMDAwMEFDMEU0MDkwOTIwMDAwNTUwNDQ3Cis6MTAzM0YwMDA5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODYyCis6MTAzNDAwMDAwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMkI1Cis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMEU0MDM4MDkwMzIwNTAwMDAwNDdBCis6MTAzNDIwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDZDCis6MTAzNDMwMDAwMzQwOTAzMjA2MDAwMDA0MDAwMDAwRTAwMzAwMzczMjMxCis6MTAzNDQwMDAwMDAwMDAwMDAwMDAwMDQ0MEY4MDkwMzIwMDAwMUQwNEM2Cis6MTAzNDUwMDAwMDAwMDA0ODBGNDA5MDkyMDAwMDVEMDQwNDAxMDA4MENECis6MTAzNDYwMDA4MjQyOTBCQzAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjExCis6MTAzNDcwMDAwMDAwMDAwMDAwMDAwMEU0MDMwMDkwMzIxMjAwMDAwNDhECis6MTAzNDgwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDA0MDhGCis6MTAzNDkwMDAxRjQwOTA5QzAwMDA2MzA0OUYwMDAwODAwMjAwOTBCMkQ3Cis6MTAzNEEwMDAwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDA5Cis6MTAzNEIwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDAwMDAwMDAwMDBFNDJDCis6MTAzNEMwMDAwMzgwOTAzMjA3MDAwMDA0MDAwMDAwRTAwMzAwMzczMjYwCis6MTAzNEQwMDAwMDAwMDAwMDAwMDAwMEU0MDM0MDkwMzIwODAwMDAwNEY3Cis6MTAzNEUwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDA4MEVGCis6MTAzNEYwMDAwMjAwMDA5MDAwMDA2QTA0MDQwMTAwODA4MjQyOTBCQzM3Cis6MTAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMzIwMDAwMDAwMDgwCis6MTAzNTEwMDAwMDAwMDBFNDAzMDA5MDMyMTEwMDAwMDQwMDAwMDBFMDBECis6MTAzNTIwMDAwMzAwMzczMjAwMDAxRDA0MDAwMDAwRkMxRjQwOTA5Qzg3Cis6MTAzNTMwMDAwMDAwNzAwNDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMEI0Cis6MTAzNTQwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDY0Cis6MTAzNTUwMDAwOUMwRkQzMjAzMDkwMDAwMDAwMDAwMjgwODAwMzYzMkNGCis6MTAzNTYwMDAwMDAwODkwNDAwMDAwMDMwMDgwMDM2RDIwMDAwOTMwNEY3Cis6MTAzNTcwMDAwMDAwMDA0NDA4ODAwMEQyMDAwMDc5MDQwNDAxMDA4MEFCCis6MTAzNTgwMDAwMjAwODRCMjAzMEUwMDAwMDAwMDAwMjgwODAwMzYzMjVBCis6MTAzNTkwMDA4MDAwODkwNDAwMDAwMDMwMDgwMDM2RDIwMDAwOTMwNDQ3Cis6MTAzNUEwMDAwMDAwMDA0NDA4QzAwMEQyMDAwMDc5MDQwNDAxMDA4MDNCCis6MTAzNUIwMDAwMjAwODRCMjAwMDA4MDA0MDAwMDAwNDQwODAwMDE5MjcwCis6MTAzNUMwMDA4MDAyMDAwMDAwMDAwMDAwMDcwMDM2MzI4QzQ1MDAwMDM5Cis6MTAzNUQwMDAwMDA4MDAwMDA3MDAzNjMyMDAwMDM2MTAwNDEwMDAwMDFBCis6MTAzNUUwMDAwNzgwOTBCMjAwMDAwMDAwMDAxODAwMDAwNzQwOTAzMkYxCis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDQ4RjJDMTM4MzQwMDAwN0UwNEUyCis6MTAzNjAwMDAxMjAwMDA4MDAyMDAwMEIwMTgwMDM2MDAwMDAwMDBGODMwCis6MTAzNjEwMDA3MzBBMDNGOTIwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMkMyCis6MTAzNjIwMDAwOTAwMDAwMjAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDQzCis6MTAzNjMwMDAwMDAwMDBFNDAzNDA4NDMyMEEwMDAwMDIwMDAwMDBFMEMxCis6MTAzNjQwMDAwMzAwMzczMjhDNDUwMDAwMDAwMDAwQTgwMjAwMzYzMjJCCis6MTAzNjUwMDBBMDAwMDAwMDAwMDAwMDAwMDkwMDM2MzIwMDAwMDAwMDU5Cis6MTAzNjYwMDAwMDAwMDBFMDA3MDAwMDMyMDAwMDg2MDQwNjAxMDAwMEIwCis6MTAzNjcwMDAxOTAwOTBCQzAwMDAxRDA0MDAwMDAwODAwMjAwMDA5MEIyCis6MTAzNjgwMDA4QzQ1MDAwMDAwMDAwMEM4MDIwMDM2MzI4MDAyMDAwMEI1Cis6MTAzNjkwMDAwMDAwMDAzQzA4MDAzNjMyMDAwMDAwMDAwMDAwMDAzNDRBCis6MTAzNkEwMDAwODAwMDEzMjAwMDA4RTA0MDIwMDAwODBEMkUwODNCQ0RBCis6MTAzNkIwMDAwMDAwMDAwMDAwMDAwMDM0MDhDMDgzMzIwMDAwQTQwNEIxCis6MTAzNkMwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDAwMDAwMDAwMDBBMEU4Cis6MTAzNkQwMDAwNzgwODMzMjAwMDAwMDAwMDAwMDAwMzBEODIwODMzQUM5Cis6MTAzNkUwMDAwMDAwOEMwNDA0MDEwMDNDRDhFMDgzQkMwMDAwMDAwMDEyCis6MTAzNkYwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMDAwMDAwMDAwMDA0MEI3Cis6MTAzNzAwMDAwODAwMDAzMjAwMDAwMDAwMDAwMDAwNDgwODAwMDAzMkZECis6MTAzNzEwMDA4QzQ1MDAwMDAwMDAwMEM4MDIwMDM2MzIwMDAyMDAwMEE0Cis6MTAzNzIwMDAwMDAwMDBDODgyOEQyQzNBODAwMDAwMDAwMDAwMDAzQ0EwCis6MTAzNzMwMDAwODAwMzYzMjAwMDAwMDAwMDAwMDAwNzgwOTgwNzgzMjZFCis6MTAzNzQwMDA1QTVBMDAwMDA0MDEwMDgwODI4RDk3NUMwMDAwOUMwNDlFCis6MTAzNzUwMDAwMjAxMDA0OEE4OUU4NEJBMDAwMDAwMDAwMDAwMDA0ODUyCis6MTAzNzYwMDAxODgwODQzQTAwMDA5QTA0MDYwMTAwM0MyOEMwODNCQ0ZCCis6MTAzNzcwMDAwMDAwMDAwMDAwMDAwMDc4MDk4NTg0MzAxMDAwMDAwMDdGCis6MTAzNzgwMDAwMDAwMDA0ODg4OEQ4NDM2MDAwMEExMDQ5MDAxMDA0OEE0Cis6MTAzNzkwMDBFOEE1ODRCQTAwMDAwMDAwMDAwMDAwNDgxODgwODQzQUMwCis6MTAzN0EwMDAwMDAwMDAwMDAwMDAwMDQ4MDg4NTg0MzAwMDAwMDAwMDkwCis6MTAzN0IwMDAwNDAxMDA4MDAyODU4NDVDMDAwMDAwMDAwMDAxMDA0MERDCis6MTAzN0MwMDAwODQwMDA1MjAwMDAwMDAwMDAwMDAwRTQwMzAwODMzMkMzCis6MTAzN0QwMDAwMTAwMDAwMjAwMDAwMEUwMDMwMDM3MzIwQzAwQUEwNEUwCis6MTAzN0UwMDAwMDAwMDAyQ0Q4QTA4MkY5MDUwMDAwMDIwMDAwMDBFMEQzCis6MTAzN0YwMDAwMzAwMzczMjAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMEFCCis6MTAzODAwMDAwMDAwMDAwMDAwMDEwMDM4MDg0MDNFNzIwMDAwMDAwMDg3Cis6MTAzODEwMDAwMDAwMDBFNDAzQzA4MjMyMDIwMDAwMDIwMDAwMDBFMDY5Cis6MTAzODIwMDAwMzAwMzczMjAyMDAwMDAyMDAwMDAwRTAwMzAwMzczMkRDCis6MTAzODMwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwQUMwNDI2Cis6MTAzODQwMDA4MDAwMDA4MEYyNDAzRUI2MDAwMDAwMDAwMDAxMDA4MEQxCis6MTAzODUwMDAwMjAwMDA3MDAwMDBCMzA0OUYwMDAwODAwMjAwOTBCMkRDCis6MTAzODYwMDAwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDQ1Cis6MTAzODcwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDAwMDAwMDAwMDA4NEM4Cis6MTAzODgwMDAwRTgwOTAzMjAwMDAxRDA0MDAwMDAwODgwRTQwOTA5MkNGCis6MTAzODkwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwQjkwNDVFCis6MTAzOEEwMDA5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwOEFECis6MTAzOEIwMDAwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAxCis6MTAzOEMwMDAwMDAwMDAwMDAwMDAwMDIwMDc0MEY1MzIwMDAwMDAwMDZBCis6MTAzOEQwMDAwMDA4MDAyMDA3MDAwMDMyMDAwMDAwMDAwMDEwMDAyMDU3Cis6MTAzOEUwMDAwN0MwRjUzMjAwMDAwMDAwMDAxODAwMjAwNzQwRjYzMjQzCis6MTAzOEYwMDAwMDAwMDAwMDAwMjAwMDIwMDc4MEY2MzIwMDAwMDAwMEQ5Cis6MTAzOTAwMDAwMDI4MDAyMDA3QzBGNjMyMDAwMDAwMDAwMDMwMDAyMDMwCis6MTAzOTEwMDAwNzAwRjczMjAwMDAwMDAwMDAzODAwMjAwNzgwRkYzMjY3Cis6MTAzOTIwMDAwMDAwMDAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDhCCis6MTAzOTMwMDAwMDAwMDAwMDA3NDAwOTMyMDAwMDAwMDAwMDA4MDAwMEZECis6MTAzOTQwMDA3N0MwMjkzNzAwMDAwMDAwMDAxMDAwMDAwNzgwOTAzMjg3Cis6MTAzOTUwMDAwMDAwMDAwMDAwMTgwMDAwMDc0MDkwMzIwMDAwQzYwNDdDCis6MTAzOTYwMDAxMjAwMDA0OEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODE4Cis6MTAzOTcwMDA3MzBBMDNGOTAwMDAwMDAwMDAwMDAwMDhDODAxMDAzNEM5Cis6MTAzOTgwMDAwMDAwMzIwMzAwMDAwMEZDMDIwMDAwOTIwMDAwQ0MwNEEyCis6MTAzOTkwMDA4MDAxMDA4MEYyNDE5MEI2MDAwMENEMDQwMDAwMDBDODE0Cis6MTAzOUEwMDAyRjgxRkM5NDAwMDAwMDAwMDAwMDAwQzgyRjgxRkMzNTJFCis6MTAzOUIwMDAwMDAwMDAwMDAwMDAwMDgwMEY0NTkwMzAwMDAwRDAwNDlGCis6MTAzOUMwMDAwMjAwMDA4MDAyN0VGOEJDMDAwMDAwMDAwMDAwMDA4NEJECis6MTAzOUQwMDAwRjAwRjgzMjAwMDAwMDAwMDAwMDAwMDAxOTQwRjgzNzI2Cis6MTAzOUUwMDAwMDAwMDAwMDAwMDAwMDg0M0Y0MEY4MzcwMDAwMDAwMEE1Cis6MTAzOUYwMDAwMDAwMDA4NDBGNjRGODNBMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzQTAwMDAxOTAwRjgzNzAwMDAwMDAwMDAwMDAwODAzRjAwRjgzNzgwCis6MTAzQTEwMDAwMDAwMUQwNDAwMDAwMDgwMEYyNEY4OUEwMDAwRDgwNDY0Cis6MTAzQTIwMDA4MDAxMDA4MEYyNDE5MEI2MDAwMDFEMDQwMDAwMDBDODMzCis6MTAzQTMwMDA0RjgxRkM5NDAwMDAxRDA0MDAwMDAwQzg0RjgxRkM5NURDCis6MTAzQTQwMDAwMDAwREIwNDA0MDEwMDgwMDI0MDkwQkMwMDAwMDAwMDg0Cis6MTAzQTUwMDAwMDAwMDAwNDA5QzAwMDMyMDAwMDFEMDQwMDAwMDBFNDYyCis6MTAzQTYwMDAxRTQwOTA5QzAwMDAwMDAwMDAwMDAwQTgyMjAwOTAzNzNCCis6MTAzQTcwMDAwMDAwMUQwNDAwMDA4NkMwMDc0MDkwOTIwODAwMDAwMDZFCis6MTAzQTgwMDAwMDAwMDBGODkzNDAwMTM5MEQwMDAwMDAwMDAwMDBGQzI4Cis6MTAzQTkwMDAwMkU0MTYzODAwMDAwMDAwMDAwMDAwMDAwOTAwMDIzMkI1Cis6MTAzQUEwMDAwMDAwRTYwNDA0MDAwMDgwMDIwMEIwQjIwMDAwMDAwMDQ0Cis6MTAzQUIwMDAwMDAwMDAwMDBCMDAwMDMyMjAwMDAwMDAwMDAwMDBBMDA5Cis6MTAzQUMwMDA4MjBEMkEzQTAwMDBFMTA0MDQwMTAwMDAxOTAwOTBCQ0I0Cis6MTAzQUQwMDAwMDAwRTgwNDAwMDAwMDI4NzkwMTAwOTQwMDAwMDAwMEM0Cis6MTAzQUUwMDAwMDAwMDBDODNGODBGQzM0NDA4MDAwMDAwMDAwMDAyODM3Cis6MTAzQUYwMDAwOTgwMzYzMjAwMDBGMTBFMDAwMDAwRDgwMjAwMDBEMjJBCis6MTAzQjAwMDAwMDAwM0UwMzA0MDAwMDgwMDI4MDkyQkMxODAwMDAwMDA4Cis6MTAzQjEwMDAwMDAwMDBGODczMEEwMzM5M0UwMzM2MDAwMDAwMDBDMEJECis6MTAzQjIwMDAwMjAwMzY5MkVBMDVGMjA0MDQwMTAwODA4MjREOTBCQzQ2Cis6MTAzQjMwMDAwMDAwMDAwMDAwMDAwMEVDMEYwMDE1MzIwMEZFMUYwMDI2Cis6MTAzQjQwMDAwMDAwMDBGMDBGMDAzNzMyRjBGRjAwMDAwMDAwMDBFODM2Cis6MTAzQjUwMDAwRjAwMzYzMjk4MDUwMDAwMDAwMDAwRjQwRjAwMzYzMkU2Cis6MTAzQjYwMDAwMDAwRjgwNDAwMDAwMEM4NEY4MEZDOTUzNjIzMzYxMDkyCis6MTAzQjcwMDAwNDAxMDA4MDgyNEQ5MEJDMDAwMDAwMDAwMDAwMDBFQ0I5Cis6MTAzQjgwMDAwRjgwMTQzMjAwRjgxRjAwMDAwMDAwRjAwRjAwMzczMkUxCis6MTAzQjkwMDBDMEZGMDAwMDAwMDAwMEU4MEYwMDM2MzI5ODI3MDAwMDQ4Cis6MTAzQkEwMDAwMDAwMDBGNDBGMDAzNjMyMDAwMDAwMDAwMDAwMDBDOEUyCis6MTAzQkIwMDA0RjgwRkMzNDA0MDAwMDAwMDAwMDAwNjA4RjREOTAzQUZDCis6MTAzQkMwMDAwMDAwQkMwRTAwMDAwMDgwMDIwMDAwRDAwMDAwMUQwNEI4Cis6MTAzQkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZEMDQ4MDAxMDA4MEQxCis6MTAzQkUwMDAwMjQwOTBCNjAwMDAwMDAwMDAwMDAwQzg2RjgwRkMzNDY2Cis6MTAzQkYwMDAwMDAwRkYwNDgwMDEwMDgwMTI0MDkwQjYwMDAwMDAwMDI5Cis6MTAzQzAwMDAwMDAwMDBDODVGODBGQzM0MDAwMDFEMDQwMDAwMDA4MDNDCis6MTAzQzEwMDAwMjAwMDA5MDAwMDAwMjA1MDQwMTAwODAzMjQwOTBCMEQ0Cis6MTAzQzIwMDA4MDAxMUQwNDAwMDAwMEM4OEY4REZDOTEwMDAwMDQwNTc4Cis6MTAzQzMwMDA4MDAwMDA4MDEyNDA5MEI2MDAwMDA1MDUwMDAwMDBDODFBCis6MTAzQzQwMDA3RjgwRkM5NTAwMDAwMDAwMDAwMDAwQzg3RjgwRkMzNEVECis6MTAzQzUwMDAwMDAwMDcwNTgwMDAwMDgwMDI0MDkwQjYwMDAwMDgwNUMzCis6MTAzQzYwMDAwMDAwMDBDODhGODBGQzk1MDAwMDAwMDAwMDAwMDBDODI0Cis6MTAzQzcwMDA4RjgwRkMzNDAwMDAwQjA1ODAwMDAwODAyMjQwOTBCNjRECis6MTAzQzgwMDBGMjBFMDAwMDAwMDAwMDhDMEUwMDM2MzIwMDAwMEQwNTIwCis6MTAzQzkwMDAwMDAwMDBDODFGODFGQzk1MTUwRjAwMDAwMDAwMDA4QzdCCis6MTAzQ0EwMDAwRTAwMzYzMjAwMDAwMDAwMDAwMDAwQzgxRjgxRkMzNDA2Cis6MTAzQ0IwMDAxMDAwMDAwMDAwMDAwMDRDMUYyNDE2MzgwMDAwMUQwNEY2Cis6MTAzQ0MwMDAwMDAwMDA1MDFGMDBGNTlDMDAwMDEyMDU5RjAwMDA4MEJFCis6MTAzQ0QwMDAwMjAwOTBCMjAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjhECis6MTAzQ0UwMDAwMDAwMDAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMEQ4Cis6MTAzQ0YwMDAwMDAwMDAwMDE3MDBGNTNBOEM0NDAwMDAwMDA4MDAwMEE2Cis6MTAzRDAwMDAwNzAwMzYzMjAwMDAzNjEwMDQxMDAwMDAwNzgwOTBCMjIxCis6MTAzRDEwMDAwMDAwMDAwMDAwMTgwMDAwMDc0MDkwMzIwMDAwMTYwNTY3Cis6MTAzRDIwMDAxMjAwMDA0MEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODVDCis6MTAzRDMwMDA3MzBBMDNGOTAwMDAxRDA0MDAwMDAwODAwMjAwMDA5MEQ3Cis6MTAzRDQwMDAwMDAwMUQwNDAwMDAwMEVDMDM0MDkwOTIwMDAwMUEwNUUyCis6MTAzRDUwMDBCMjAwMDBEODAyMDAwMEIyMDAwMDAwMDAwMDAyMDFFQzM2Cis6MTAzRDYwMDAxNkU0NkUzQTA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOUE0Cis6MTAzRDcwMDAwMDAwNDAwNTE3MTAwMUY4MDIwMDZFQjIwNjAwMjUwNThDCis6MTAzRDgwMDAwNDAxMDA4MDgyOEQyRkIwMDMwMDAwMDAwMDAwMDBGOEM1Cis6MTAzRDkwMDA4MjhEMkYzMjAwQzAwNTBFMDAwMDAwMjgwOTgwMzZEMjI3Cis6MTAzREEwMDAwMDAwMDAwMDAwMDIwMUVDMTZDMDZFM0MwMDAwMDAwMEE0Cis6MTAzREIwMDAwMDE4ODZDODA2MDAwMDMyMTgwMDM2MDAwMDAwMDBGODFGCis6MTAzREMwMDA3MzBBMDNGOTAwMDAyNjA1MDAwMDAwRDAwMjAwMDA5MkVCCis6MTAzREQwMDAwMDAwMkIwNTA0MTk4NjgwMDI4MDZDQkMwMDAwMDAwMEU2Cis6MTAzREUwMDAwMDAwMDAwMDA5MDA2RTMyMDAwMDAwMDBDMTA4MDAwNDVECis6MTAzREYwMDAwOTAwNkUzMjAwMDAwMDAwQzAxNTg2NzgwRkMwNkMzMkRBCis6MTAzRTAwMDAwMDAwMzAwNTgwMDEwMDgwMjI4MDJGQjYwMDAwMzAwNUMwCis6MTAzRTEwMDAwMDE4ODZDODA2NDAwMDkyMDAwMDAwMDAwMDQwMDAwMDI0Cis6MTAzRTIwMDAwOTAwNkUzMjAwMDAwMDAwQzI0ODAwMDQwOTAwNkUzMjMyCis6MTAzRTMwMDAwMDAwMDAwMEMwMTY4Njc4MEZDMDZDMzIwMDAwMzAwNTBDCis6MTAzRTQwMDA4MDAxMDA4MDEyODAyRkI2MDAwMDAwMDAwMDE4ODZDODk0Cis6MTAzRTUwMDAwNjAwMDAzMjAwNDAwMDAwMDAwMDAwMjgwOTgwMzYzMkQxCis6MTAzRTYwMDAwMDAwMzgwNTA0MDIwMTgwMDJDMDZFQkMwMDAwMDUwRThGCis6MTAzRTcwMDAwMDAyMDFFQzE2QzA2RURDMDAwMDM2MDU4MDAwMDA4MEY4Cis6MTAzRTgwMDAwMjgwMkZCNjAwMDAzODA1ODEwMDAwRjgyMjgwMkZCNDkwCis6MTAzRTkwMDAwMDAwMzgwNTAwMTg4NkM4MDY0MDAwOTIwMDAwMzgwNTZBCis6MTAzRUEwMDA4MjAwMDBGODEyODAyRkI0MDAwMDAwMDAwMDE4ODZDOEJECis6MTAzRUIwMDAwNjAwMDAzMjAwMDAwMDAwMDAxMDg2QzgwNjAwMDAzMjM0Cis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDdDMDBBMzIwMDM4MDAwMEI3Cis6MTAzRUQwMDAwMDA4MDAwMDA3MDAzNjMyMDAwMDM2MTAwNDEwMDAwMDExCis6MTAzRUUwMDAwNzAwOTBCMjAwMDAwMDAwMDAxODAwMDAwNzQwOTAzMjY4Cis6MTAzRUYwMDAwMDAwM0QwNTEyMDAwMDQwRjJDMTM4QjQxODAwMzYwMDQxCis6MTAzRjAwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAxNzAxMDBGODMwCis6MTAzRjEwMDBBMjgwMkYzNDAwMDAwMDAwMDAxMDg2QTg0MjgwNkMzNzc5Cis6MTAzRjIwMDAwMDAwNEEwNTEyMDA3MDM4MDIwMDdFQjIwMDAwMzYxMDEwCis6MTAzRjMwMDAxMjAwNzAzQzAyMDA3RUIyMDAwMDM2MTAxMjAwNzAzMDk5Cis6MTAzRjQwMDAwMjAwN0VCMjAwMDAzNjEwMTIwMDcwMzQwMjAwN0VCMjExCis6MTAzRjUwMDAwMDAwNDEwNTAyMDEwMDgwQjI4MjJBQkMwMDAwMDAwMDdFCis6MTAzRjYwMDAxNzAwMDBEMDAyMDAwMDMyMDYwMDI1MDUwNDAxMDA4MDgxCis6MTAzRjcwMDA4MjhEMkZCMDAwMDAxRjA1MDQwMzAxODAwMkMwNkVCQ0JCCis6MTAzRjgwMDAwMDAwNTUwNTAwMDAwMDgwMDIwMDAwOTAwMDAwNEMwNTc0Cis6MTAzRjkwMDAwNDAzMDE4MDAyQzA2RUJDMDAwMDU1MDUwMDEwODZDOEY1Cis6MTAzRkEwMDA0NjgwMkE5NjAwMDAwMDAwMDAxMDg2Qzg0NjgwMkEzNjA3Cis6MTAzRkIwMDAwMDAwNTAwNTgwMDAwMDgwMTI4MDJGQjYwMzAwNTIwNURCCis6MTAzRkMwMDAyMjAwMDBGODgyOEQyRkIyMDAwMDUyMDUwMDE4ODZDODJBCis6MTAzRkQwMDAwNjAwMDA5MjAwMDA1NTA1ODAwMDAwODAyMjgwMkZCNjY4Cis6MTAzRkUwMDAwMDAwMDAwMEMyMDEwMEY4MDI4MDJGMzUwMEMwMDUwRTVECis6MTAzRkYwMDAwMDAwMDAyODA5ODAzNkQyMDAwMDAwMDAwMDAyMDFFQzE5Cis6MTA0MDAwMDAxNkMwNkUzQzE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTcxCis6MTA0MDEwMDAwMDAwMDAwMDAwMTAwMUUwMDY4MDJGMzIwMDAwMDAwMEM4Cis6MTA0MDIwMDAwMDAwMDBBOEUxMDAwMDM0MDAwMDAwMDBBMjAwMDBGQzM1Cis6MTA0MDMwMDAwMjAwMDAzMjAwMDAzMjAzODAwMTAwODBBMjgwMkZCNjBGCis6MTA0MDQwMDAwMDAwNUIwNUI5MDEwMEQ4MDI4MDAxQjIwMDAwMzIwMzE0Cis6MTA0MDUwMDAwMDAwMDBGODAyMDAwMDkyMDAwMDAwMDAwMDAwMDAzODlDCis6MTA0MDYwMDAxODgwRjczQTAwMDAwMDAwMDAwMDAwMzhGOEJGODMzMEU1Cis6MTA0MDcwMDAwMDAwNUYwNTA0MDEwMDgwRjJCRDgzQkMwMDAwMzIwMzM0Cis6MTA0MDgwMDBBOTAwMDBGODAyMDAwMDkyMDBDMDY2MDUxODAxMDAwQ0FCCis6MTA0MDkwMDBBOENEM0VCMjAwMDA2MjA1ODQwMDAwNzQxRjQwRjdCQTRDCis6MTA0MEEwMDAwMDAwMzIwM0E5MDAwMEY4MDIwMDAwOTIwMDAwMDAwMEE2Cis6MTA0MEIwMDAwMDAwMDA3NDBGMDAwMDMyMDBDMDY2MDUxODAxMDAwQ0ZCCis6MTA0MEMwMDBBOENEM0VCMjE4MDAzNjAwMDAwMDAwRjg3MzhBMDNGOTRDCis6MTA0MEQwMDAwMDAwNjMwNTAwMDAwMEIwMDIwMDAwOTIwMDAwMDAwMDM0Cis6MTA0MEUwMDAwMDAwMDA3QzBGODA4MzMyMDAwMDAwMDAwMDI4MDAwMEU4Cis6MTA0MEYwMDAwNzAwMDAzMjAwMDAwMDAwMDAzMDAwMDAwNzAwMDAzMjFFCis6MTA0MTAwMDAwMDAxMDA4MDAwMzgwMDAwMDcwMDM3MzIwMDAwMDAwMDg2Cis6MTA0MTEwMDAwMDNDMDAwQzA3ODA4MzMyMDAwMDZCMDUxMjAwMDA0ODUxCis6MTA0MTIwMDAwMkMwODBCMjAwMDAzMjAzQTkwMDAwMDhFODAxMDA5NDM4Cis6MTA0MTMwMDAwMDAwNzMwNTA0MDEwMDgwQTJDMEVEQkM1MjAwMDAwMDI1Cis6MTA0MTQwMDAwMDAwMDA3NDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDMEM1Cis6MTA0MTUwMDAwRTQwMDEzMjQwN0UwNTAwMDAwMDAwQjQwRTAwMzczMkYwCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMEM0MEU4MDA3MzI2NDAwNzgwNUUzCis6MTA0MTcwMDAwMDAwMDBDQzBFMDAzNjkyMjkwMDAwMDAwMDAwMDA3NDAwCis6MTA0MTgwMDAwRTAwMzYzMjAwMDAwMDAwMDAwMDAwQzAwRTQwMDAzMjc5Cis6MTA0MTkwMDBBMDhDMDAwMDAwMDAwMEI0MEUwMDM2MzIwMDAwMDAwMEM5Cis6MTA0MUEwMDAwMDAwMDBDNDBFQzAwMDMyMDAwMDAwMDAwMDAwMDBDQzdGCis6MTA0MUIwMDAwRTgwMDIzMjEwMDAwMDAwMDAwMDAwRTQzMzdCRUMzOTc2Cis6MTA0MUMwMDAxRTAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDg0Cis6MTA0MUQwMDAwMDAwMDBDODZFQzBFQzM3MDAwMDFEMDQwMDAwMDBEOENECis6MTA0MUUwMDAwRUMwRUQ5MjdFMDUwMDAwMDAwMDAwODg4MkNEODEzQTZECis6MTA0MUYwMDA3RTA1MDAwMDAwMDAwMDg4ODJDRDgxM0FCRDA1MDAwMEU4Cis6MTA0MjAwMDAwMDE4MDE4ODgyQ0Q2RTNBQzYwNTAwMDAwMDE4MDE4OEFBCis6MTA0MjEwMDA4MkNENkUzQUNGMDUwMDAwMDAxODAxODg4MkNENkUzQTNCCis6MTA0MjIwMDBEODA1MDAwMDAwMTgwMTg4ODJDRDZFM0FFMTA1MDAwMDMzCis6MTA0MjMwMDAwMDE4MDE4ODgyQ0Q2RTNBRUEwNTAwMDAwMDE4MDE4ODU2Cis6MTA0MjQwMDA4MkNENkUzQUYzMDUwMDAwMDAxODAxODg4MkNENkUzQUU3Cis6MTA0MjUwMDBGQzA1MDAwMDAwMTgwMTg4ODJDRDZFM0EwNTA2MDAwMEJBCis6MTA0MjYwMDAwMDE4MDE4ODgyQ0Q2RTNBMEUwNjAwMDAwMDE4MDE4ODAxCis6MTA0MjcwMDA4MkNENkUzQTE3MDYwMDAwMDAxODAxODg4MkNENkUzQTkyCis6MTA0MjgwMDAyMDA2MDAwMDAwMTgwMTg4ODJDRDZFM0EyOTA2MDAwMDQxCis6MTA0MjkwMDAwMDE4MDE4ODgyQ0Q2RTNBMzIwNjAwMDAwMDE4MDE4OEFECis6MTA0MkEwMDA4MkNENkUzQTNCMDYwMDAwMDAxODAxODg4MkNENkUzQTNFCis6MTA0MkIwMDA0NDA2MDAwMDAwMTgwMTg4ODJDRDZFM0E0RDA2MDAwMEM5Cis6MTA0MkMwMDAwMDE4MDE4ODgyQ0Q2RTNBNTYwNjAwMDAwMDE4MDE4ODU5Cis6MTA0MkQwMDA4MkNENkUzQTVGMDYwMDAwMDAxODAxODg4MkNENkUzQUVBCis6MTA0MkUwMDA2ODA2MDAwMDAwMTgwMTg4ODJDRDZFM0E3MTA2MDAwMDUxCis6MTA0MkYwMDAwMDE4MDE4ODgyQ0Q2RTNBN0EwNjAwMDAwMDE4MDE4ODA1Cis6MTA0MzAwMDA4MkNENkUzQTgzMDYwMDAwMDAxODAxODg4MkNENkUzQTk1Cis6MTA0MzEwMDA4QzA2MDAwMDAwMTgwMTg4ODJDRDZFM0E5NTA2MDAwMEQ4Cis6MTA0MzIwMDAwMDE4MDE4ODgyQ0Q2RTNBOUUwNjAwMDAwMDE4MDE4OEIwCis6MTA0MzMwMDA4MkNENkUzQUE3MDYwMDAwMDAxODAxODg4MkNENkUzQTQxCis6MTA0MzQwMDBCMDA2MDAwMDAwMTgwMTg4ODJDRDZFM0FCOTA2MDAwMDYwCis6MTA0MzUwMDAwMDE4MDE4ODgyQ0Q2RTNBQzIwNjAwMDAwMDE4MDE4ODVDCis6MTA0MzYwMDA4MkNENkUzQUNCMDYwMDAwMDAxODAxODg4MkNENkUzQUVECis6MTA0MzcwMDBENDA2MDAwMDAwMTgwMTg4ODJDRDZFM0FERDA2MDAwMEU4Cis6MTA0MzgwMDAwMDE4MDE4ODgyQ0Q2RTNBRTYwNjAwMDAwMDE4MDE4ODA4Cis6MTA0MzkwMDA4MkNENkUzQUVGMDYwMDAwMDAxODAxODg4MkNENkUzQTk5Cis6MTA0M0EwMDBGODA2MDAwMDAwMTgwMTg4ODJDRDZFM0EwMTA3MDAwMDZGCis6MTA0M0IwMDAwMDE4MDE4ODgyQ0Q2RTNBMEEwNzAwMDAwMDE4MDE4OEIzCis6MTA0M0MwMDA4MkNENkUzQTEzMDcwMDAwMDAxODAxODg4MkNENkUzQTQ0Cis6MTA0M0QwMDAxQzA3MDAwMDAwMTgwMTg4ODJDRDZFM0EyNTA3MDAwMEY2Cis6MTA0M0UwMDAwMDE4MDE4ODgyQ0Q2RTNBMkUwNzAwMDAwMDE4MDE4ODVGCis6MTA0M0YwMDA4MkNENkUzQTAwMDBGNzAyMDAwMDAwRDQwMjAwMDA5MjY1Cis6MTA0NDAwMDAwMDAwNzIwMjAwMDAwMDgwMDIwMDAwOTAzNzA3MDAwMEU4Cis6MTA0NDEwMDAwMDFDMDE4ODgyQ0Q2RTNBM0MwNzAwMDAwMDFDMDE4ODE4Cis6MTA0NDIwMDA4MkNENkUzQTQxMDcwMDAwMDAxQzAxODg4MkNENkUzQUIxCis6MTA0NDMwMDA0NjA3MDAwMDAwMUMwMTg4ODJDRDZFM0E0QjA3MDAwMDQxCis6MTA0NDQwMDAwMDFDMDE4ODgyQ0Q2RTNBNTAwNzAwMDAwMDFDMDE4OEQ0Cis6MTA0NDUwMDA4MkNENkUzQTU1MDcwMDAwMDAxQzAxODg4MkNENkUzQTZECis6MTA0NDYwMDA1QTA3MDAwMDAwMUMwMTg4ODJDRDZFM0E1RjA3MDAwMEU5Cis6MTA0NDcwMDAwMDFDMDE4ODgyQ0Q2RTNBNjQwNzAwMDAwMDFDMDE4ODkwCis6MTA0NDgwMDA4MkNENkUzQTY5MDcwMDAwMDAxQzAxODg4MkNENkUzQTI5Cis6MTA0NDkwMDA2RTA3MDAwMDAwMUMwMTg4ODJDRDZFM0E3MzA3MDAwMDkxCis6MTA0NEEwMDAwMDFDMDE4ODgyQ0Q2RTNBNzgwNzAwMDAwMDFDMDE4ODRDCis6MTA0NEIwMDA4MkNENkUzQTdEMDcwMDAwMDAxQzAxODg4MkNENkUzQUU1Cis6MTA0NEMwMDA4MjA3MDAwMDAwMUMwMTg4ODJDRDZFM0E4NzA3MDAwMDM5Cis6MTA0NEQwMDAwMDFDMDE4ODgyQ0Q2RTNBMDAwMEZDMDIwMDAwMDBENDZFCis6MTA0NEUwMDAwMjAwMDA5MjAwMDAxMjAzMDAwMDAwRDQwMjAwMDA5MkJCCis6MTA0NEYwMDAwMDAwM0MwOTAwMDAwMDEwMDg4MDAxOTIwMDAwMzYxMDA2Cis6MTA0NTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEQzCis6MTA0NTEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEIxCis6MTA0NTIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEVECis6MTA0NTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEEzCis6MTA0NTQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDgxCis6MTA0NTUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEJECis6MTA0NTYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDdCMDkwMDAwMDAxMEE1Cis6MTA0NTcwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM5Cis6MTA0NTgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDhECis6MTA0NTkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDQzCis6MTA0NUEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDIxCis6MTA0NUIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDVECis6MTA0NUMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDEzCis6MTA0NUQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEYxCis6MTA0NUUwMDAwMDAwODgwOTAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMENBCis6MTA0NUYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEUzCis6MTA0NjAwMDAwMjAwMDA5MDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjU1Cis6MTA0NjEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEZDCis6MTA0NjIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEIyCis6MTA0NjMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDkwCis6MTA0NjQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDcwOTMyCis6MTA0NjUwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDM2MTAwMDAwMDA4MDJBCis6MTA0NjYwMDAwMjAwMDA5MDAwMDBENzA5MDAwMDAwMTAwOEMwMDA5MjZFCis6MTA0NjcwMDAwMDAwM0QwQzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMEMwCis6MTA0NjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEQ3MDkwMDAwMDAxMDI4Cis6MTA0NjkwMDAwOEMwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDY4Cis6MTA0NkEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDZDCis6MTA0NkIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEU0MDkwMDAwMDAxMEVCCis6MTA0NkMwMDAwOEMwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDM4Cis6MTA0NkQwMDAwMDAwRTQwOTAwMDAwMDEwMDhDMDAwOTIwMDAwM0QwQzNBCis6MTA0NkUwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDE5Cis6MTA0NkYwMDAwMjAwMDA5MDAwMDBFNDA5MDAwMDAwMTAwOEMwMDA5MkQxCis6MTA0NzAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDBCCis6MTA0NzEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEMxCis6MTA0NzIwMDAwMjAwMDA5MDAwMDBFMjA5MDAwMDAwMTAwOEMwMDA5MkEyCis6MTA0NzMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTIwOTM2Cis6MTA0NzQwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDNEMEMwMDAwMDAxMEE2Cis6MTA0NzUwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDI2Cis6MTA0NzYwMDAwMDAwRTIwOTAwMDAwMDEwMDhDMDAwOTIwMDAwMzYxMEFFCis6MTA0NzcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDYxCis6MTA0NzgwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNGCis6MTA0NzkwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0EwQTNECis6MTA0N0EwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMEQ0MDkwMDAwMDAxMEIyCis6MTA0N0IwMDAwODAwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjlCCis6MTA0N0MwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDRCCis6MTA0N0QwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAxCis6MTA0N0UwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MERGCis6MTA0N0YwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDFCCis6MTA0ODAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDc1MEEwMDAwMDAxMDA3Cis6MTA0ODEwMDAwODgwMDA5MjAwMDBENDA5MDAwMDAwMTAwODAwMDE5MkY2Cis6MTA0ODIwMDAwMDAwQ0YwOTAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDdGCis6MTA0ODMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEEwCis6MTA0ODQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDdFCis6MTA0ODUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEJBCis6MTA0ODYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDcwCis6MTA0ODcwMDAwMjAwMDA5MDAwMDA3NTBBMDAwMDAwMTAwODAwMDE5MjdDCis6MTA0ODgwMDAwMDAwRDQwOTAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOUM4Cis6MTA0ODkwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDY3Cis6MTA0OEEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDFFCis6MTA0OEIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDVBCis6MTA0OEMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDEwCis6MTA0OEQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEVFCis6MTA0OEUwMDAwMDAwRTQwQTAwMDAwMDEwMDg4MDAwOTIwMDAwRDQwOUQzCis6MTA0OEYwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMENGMDkwMDAwMDAxMDI1Cis6MTA0OTAwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc0Cis6MTA0OTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEY5Cis6MTA0OTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEFGCis6MTA0OTMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDhECis6MTA0OTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTQwQTIxCis6MTA0OTUwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMEQ0MDkwMDAwMDAxMEJGCis6MTA0OTYwMDAwODAwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MkU5Cis6MTA0OTcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDk5Cis6MTA0OTgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDRGCis6MTA0OTkwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDJECis6MTA0OUEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTMwOUMzCis6MTA0OUIwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDA3Cis6MTA0OUMwMDAwMjAwMDA5MDAwMDBFMzA5MDAwMDAwMTAwODgwMDA5MjNGCis6MTA0OUQwMDAwMDAwM0QwQzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDVECis6MTA0OUUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEVGCis6MTA0OUYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MENECis6MTA0QTAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDA4Cis6MTA0QTEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUzMDkwMDAwMDAxMDg4Cis6MTA0QTIwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDkzCis6MTA0QTMwMDAwMDAwRTMwOTAwMDAwMDEwMDgwMDAxOTIwMDAwM0QwQzk2Cis6MTA0QTQwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEI1Cis6MTA0QTUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDZDCis6MTA0QTYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEE4Cis6MTA0QTcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDVFCis6MTA0QTgwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNDCis6MTA0QTkwMDAwMDAwOEMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDkyCis6MTA0QUEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDUxCis6MTA0QUIwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEMzCis6MTA0QUMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDQ4Cis6MTA0QUQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEZFCis6MTA0QUUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MERDCis6MTA0QUYwMDAwMDAwNUUwQzAwMDAwMDEwMDg0MDAxOTIwMDAwNTQwQzAxCis6MTA0QjAwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDVFMEMwMDAwMDAxMDQwCis6MTA0QjEwMDAwODQwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MkY3Cis6MTA0QjIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNUUwQ0MzCis6MTA0QjMwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEM0Cis6MTA0QjQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDdCCis6MTA0QjUwMDAwMDAwODEwOTAwMDAwMDEwMDg0MDAwOTIwMDAwODEwOTU3Cis6MTA0QjYwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDgxMDkwMDAwMDAxMDgxCis6MTA0QjcwMDAwOEMwMDA5MjAwMDA4MTA5MDAwMDAwMTAwODAwMDE5MkE2Cis6MTA0QjgwMDAwMDAwODYwOTAwMDAwMDEwMDg0MDAxOTIwMDAwODEwOTIxCis6MTA0QjkwMDAwMDAwMDAxMDA4ODAwMTkyMDAwMDgxMDkwMDAwMDAxMDUwCis6MTA0QkEwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDUyCis6MTA0QkIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDU3Cis6MTA0QkMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDQ5MEIwMDAwMDAxMDZGCis6MTA0QkQwMDAwODgwMDA5MjAwMDA0OTBCMDAwMDAwMTAwOEMwMDA5MkZECis6MTA0QkUwMDAwMDAwNDkwQjAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOUVFCis6MTA0QkYwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDA0Cis6MTA0QzAwMDAwMjAwMDA5MDAwMDA0OTBCMDAwMDAwMTAwOEMwMDE5MjUzCis6MTA0QzEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEY2Cis6MTA0QzIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEFDCis6MTA0QzMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDhBCis6MTA0QzQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEM2Cis6MTA0QzUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDY4MEMwMDAwMDAxMEJFCis6MTA0QzYwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDExCis6MTA0QzcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDk2Cis6MTA0QzgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDRDCis6MTA0QzkwMDAwMjAwMDA5MDAwMDBEODBDMDAwMDAwMTAwODQwMDE5MkIzCis6MTA0Q0EwMDAwMDAwREIwQzAwMDAwMDEwMDg0MDAxOTIwMDAwNEMwQ0RBCis6MTA0Q0IwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMERCMEMwMDAwMDAxMDEyCis6MTA0Q0MwMDAwODQwMDE5MjAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjhCCis6MTA0Q0QwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwREIwQzk1Cis6MTA0Q0UwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDhEMDcwMDAwMDAxMDM1Cis6MTA0Q0YwMDAwODAwMDI5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEMwCis6MTA0RDAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwREMwQzYzCis6MTA0RDEwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDRDMEMwMDAwMDAxMDQwCis6MTA0RDIwMDAwODQwMDE5MjAwMDBEQzBDMDAwMDAwMTAwODQwMDE5MkQ1Cis6MTA0RDMwMDAwMDAwOEMwNzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMEFGCis6MTA0RDQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERDMEMwMDAwMDAxMDU5Cis6MTA0RDUwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDIwCis6MTA0RDYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEE1Cis6MTA0RDcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUxMEMwMDAwMDAxMDI0Cis6MTA0RDgwMDAwODgwMDA5MjAwMDBFMTBDMDAwMDAwMTAwOEMwMDA5MkIyCis6MTA0RDkwMDAwMDAwRTEwQzAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOUEzCis6MTA0REEwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDUyCis6MTA0REIwMDAwMjAwMDA5MDAwMDBFMTBDMDAwMDAwMTAwOEMwMDE5MjA5Cis6MTA0REMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDQ1Cis6MTA0REQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEZCCis6MTA0REUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQ5Cis6MTA0REYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDE1Cis6MTA0RTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MENBCis6MTA0RTEwMDAwMjAwMDA5MDAwMDA2QTA5MDAwMDAwMTAwODQwMDA5MkEzCis6MTA0RTIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEU0Cis6MTA0RTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDlBCis6MTA0RTQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc4Cis6MTA0RTUwMDAwMDAwRjEwQzAwMDAwMDEwMDg4MDAwOTIwMDAwRjEwQzJFCis6MTA0RTYwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMEYxMEMwMDAwMDAxMENCCis6MTA0RTcwMDAwODAwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MkQ0Cis6MTA0RTgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjEwQ0NECis6MTA0RTkwMDAwMDAwMDAxMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MEUxCis6MTA0RUEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDE4Cis6MTA0RUIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDUwRDg4Cis6MTA0RUMwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDA1MEQwMDAwMDAxMDk2Cis6MTA0RUQwMDAwOEMwMDA5MjAwMDAwNTBEMDAwMDAwMTAwODAwMDE5MkJCCis6MTA0RUUwMDAwMDAwQ0YwOTAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMEI5Cis6MTA0RUYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA1MEQwMDAwMDAxMDdFCis6MTA0RjAwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEVFCis6MTA0RjEwMDAwMDAwOEMwNzAwMDAwMDEwMDgwMDAwOTIwMDAwMzYxMDBFCis6MTA0RjIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMENDCis6MTA0RjMwMDAwODgwMDA5MjAwMDAxMzBEMDAwMDAwMTAwOEMwMDA5MkNECis6MTA0RjQwMDAwMDAwOEMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwOEMwNzkwCis6MTA0RjUwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEEwCis6MTA0RjYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDU3Cis6MTA0RjcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDkzCis6MTA0RjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDQ5Cis6MTA0RjkwMDAwMjAwMDA5MDAwMDA4QzA3MDAwMDAwMTAwODgwMDA5MkMyCis6MTA0RkEwMDAwMDAwMjEwRDAwMDAwMDEwMDg4MDAwOTIwMDAwOEMwNzE2Cis6MTA0RkIwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDhDMDcwMDAwMDAxMEEzCis6MTA0RkMwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEFFCis6MTA0RkQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDMzCis6MTA0RkUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEU5Cis6MTA0RkYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM3Cis6MTA1MDAwMDAwMDAwOEMwNzAwMDAwMDEwMDg4MDAwOTIwMDAwMjEwREI1Cis6MTA1MDEwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDhDMDcwMDAwMDAxMDQyCis6MTA1MDIwMDAwODAwMDE5MjAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjY3Cis6MTA1MDMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEQyCis6MTA1MDQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDg4Cis6MTA1MDUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDY2Cis6MTA1MDYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEEyCis6MTA1MDcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDdCCis6MTA1MDgwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEFFCis6MTA1MDkwMDAwMDAwOEMwNzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDRDCis6MTA1MEEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDI4Cis6MTA1MEIwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDA2Cis6MTA1MEMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDQyCis6MTA1MEQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZEMEMwMDAwMDAxMEE1Cis6MTA1MEUwMDAwODgwMDA5MjAwMDBGRDBDMDAwMDAwMTAwOEMwMDA5MjMzCis6MTA1MEYwMDAwMDAwRkQwQzAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOTI0Cis6MTA1MTAwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEVFCis6MTA1MTEwMDAwMjAwMDA5MDAwMDBGRDBDMDAwMDAwMTAwOEMwMDE5Mjg5Cis6MTA1MTIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEUxCis6MTA1MTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDk3Cis6MTA1MTQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc1Cis6MTA1MTUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEIxCis6MTA1MTYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDMxMEQwMDAwMDAxMERGCis6MTA1MTcwMDAwODAwMDI5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNCCis6MTA1MTgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDgxCis6MTA1MTkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDM3Cis6MTA1MUEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDE1Cis6MTA1MUIwMDAwMDAwODgwOTAwMDAwMDEwMDhDMDAxOTIwMDAwMzYxMEFECis6MTA1MUMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDA3Cis6MTA1MUQwMDAwMjAwMDA5MDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjdBCis6MTA1MUUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzEwOTlECis6MTA1MUYwMDAwMDAwMDAxMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDdFCis6MTA1MjAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEI0Cis6MTA1MjEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwODgwOUE1Cis6MTA1MjIwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDhFCis6MTA1MjMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDg0Cis6MTA1MjQwMDAwMDAwQ0YwOTAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDU1Cis6MTA1MjUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEMxMDkwMDAwMDAxMDYyCis6MTA1MjYwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDhCCis6MTA1MjcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDkwCis6MTA1MjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDgyCis6MTA1MjkwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDlDCis6MTA1MkEwMDAwMDAwNkYwQjAwMDAwMDEwMDg4MDAwOTIwMDAwM0QwQzExCis6MTA1MkIwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDNECis6MTA1MkMwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwODgwMDA5MkE4Cis6MTA1MkQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDMwCis6MTA1MkUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEU2Cis6MTA1MkYwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwODAwMDE5MkY3Cis6MTA1MzAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQkNCCis6MTA1MzEwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDNEMEMwMDAwMDAxMDg5Cis6MTA1MzIwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDRBCis6MTA1MzMwMDAwMDAwNkYwQjAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAyCis6MTA1MzQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDg1Cis6MTA1MzUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDYzCis6MTA1MzYwMDAwMDAwNkYwQjAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMEQyCis6MTA1MzcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDkxCis6MTA1MzgwMDAwODAwMDE5MjAwMDAzRDBDMDAwMDAwMTAwODQwMDE5MjRFCis6MTA1MzkwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjNCCis6MTA1M0EwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDhDCis6MTA1M0IwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAzCis6MTA1M0MwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjBCCis6MTA1M0QwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MERECis6MTA1M0UwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwODgwMDA5Mjg3Cis6MTA1M0YwMDAwMDAwM0QwQzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDMzCis6MTA1NDAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDAwCis6MTA1NDEwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDFBCis6MTA1NDIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMERFCis6MTA1NDMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDk0Cis6MTA1NDQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDcyCis6MTA1NDUwMDAwMDAwNkYwQjAwMDAwMDEwMDhDMDAxOTIwMDAwM0QwQzFFCis6MTA1NDYwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDhCCis6MTA1NDcwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwOEMwMDE5MkI1Cis6MTA1NDgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDdFCis6MTA1NDkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDM0Cis6MTA1NEEwMDAwMjAwMDA5MDAwMDBENzBCMDAwMDAwMTAwODgwMDA5MjVFCis6MTA1NEIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDRFCis6MTA1NEMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDI3Cis6MTA1NEQwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDk5Cis6MTA1NEUwMDAwMDAwRDcwQjAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDZBCis6MTA1NEYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEQ0Cis6MTA1NTAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEIxCis6MTA1NTEwMDAwMDAwRDcwQjAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDM5Cis6MTA1NTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEEzCis6MTA1NTMwMDAwMjAwMDA5MDAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjVCCis6MTA1NTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDcwQjIxCis6MTA1NTUwMDAwMDAwMDAxMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDFBCis6MTA1NTYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDUxCis6MTA1NTcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDhECis6MTA1NTgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDQzCis6MTA1NTkwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDIxCis6MTA1NUEwMDAwMDAwOEMwNzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDM3Cis6MTA1NUIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERGMEIwMDAwMDAxMERGCis6MTA1NUMwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDI4Cis6MTA1NUQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDJECis6MTA1NUUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEUzCis6MTA1NUYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEMxCis6MTA1NjAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwN0FGCis6MTA1NjEwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEQ5Cis6MTA1NjIwMDAwMjAwMDA5MDAwMDBERjBCMDAwMDAwMTAwODgwMDA5MkQ0Cis6MTA1NjMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMENDCis6MTA1NjQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDgyCis6MTA1NjUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDYwCis6MTA1NjYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDlDCis6MTA1NjcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEMzMEMwMDAwMDAxMDM5Cis6MTA1NjgwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEU3Cis6MTA1NjkwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDZDCis6MTA1NkEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDk0MDcwMDAwMDAxMDNECis6MTA1NkIwMDAwODQwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEI4Cis6MTA1NkMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDNDCis6MTA1NkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEYyCis6MTA1NkUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQwCis6MTA1NkYwMDAwMDAwRTYwNzAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDRECis6MTA1NzAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEMxCis6MTA1NzEwMDAwMjAwMDA5MDAwMDA5QjA4MDAwMDAwMTAwODAwMDE5MkE5Cis6MTA1NzIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzg3Cis6MTA1NzMwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMEE1MDgwMDAwMDAxMDAxCis6MTA1NzQwMDAwODAwMDE5MjAwMDBBNTA4MDAwMDAwMTAwODAwMDE5MjY2Cis6MTA1NzUwMDAwMDAwQTUwODAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMEFCCis6MTA1NzYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDYxCis6MTA1NzcwMDAwMjAwMDA5MDAwMDBGNTA3MDAwMDAwMTAwODgwMDA5MjcxCis6MTA1NzgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzI3Cis6MTA1NzkwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDk4Cis6MTA1N0EwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDBGCis6MTA1N0IwMDAwMDAwMDMwODAwMDAwMDEwMDg4MDAwOTIwMDAwOUEwODEyCis6MTA1N0MwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDkzMDcwMDAwMDAxMDA1Cis6MTA1N0QwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQ2Cis6MTA1N0UwMDAwMDAwQkIwODAwMDAwMDEwMDg0MDAwOTIwMDAwQkIwODQ5Cis6MTA1N0YwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMEJCMDgwMDAwMDAxMEFDCis6MTA1ODAwMDAwOEMwMDA5MjAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MkY5Cis6MTA1ODEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEVBCis6MTA1ODIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUwMDgwMDAwMDAxMDZFCis6MTA1ODMwMDAwOEMwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEI2Cis6MTA1ODQwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMENECis6MTA1ODUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDcwCis6MTA1ODYwMDAwMjAwMDA5MDAwMDBFMjA4MDAwMDAwMTAwODAwMDE5MjExCis6MTA1ODcwMDAwMDAwRTIwODAwMDAwMDEwMDgwMDAxOTIwMDAwOTMwN0Y5Cis6MTA1ODgwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MEE3Cis6MTA1ODkwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDFFCis6MTA1OEEwMDAwMDAwRTQwODAwMDAwMDEwMDg4MDAwOTIwMDAwRTQwOEY2Cis6MTA1OEIwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDkzMDcwMDAwMDAxMEQ0Cis6MTA1OEMwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEU1Cis6MTA1OEQwMDAwMDAwOTMwNzAwMDAwMDEwMDg0MDAwOTIwMDAwQjEwODhCCis6MTA1OEUwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMEIxMDgwMDAwMDAxMEM1Cis6MTA1OEYwMDAwOEMwMDA5MjAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MjA5Cis6MTA1OTAwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAwOTIwMDAwOTMwN0I5Cis6MTA1OTEwMDAwMDAwMDAxMDA4NDAwMDkyMDAwMEY4MDgwMDAwMDAxMDhECis6MTA1OTIwMDAwODgwMDA5MjAwMDBGODA4MDAwMDAwMTAwOEMwMDA5MkYzCis6MTA1OTMwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMERDCis6MTA1OTQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDdGCis6MTA1OTUwMDAwMjAwMDA5MDAwMDAyQzA5MDAwMDAwMTAwODgwMDA5MjU2Cis6MTA1OTYwMDAwMDAwOTMwNzAwMDAwMDEwMDhDMDAwOTIwMDAwOTMwNzk5Cis6MTA1OTcwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MEI2Cis6MTA1OTgwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDJECis6MTA1OTkwMDAwMDAwMEMwOTAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDgyCis6MTA1OUEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDkzMDcwMDAwMDAxMDNCCis6MTA1OUIwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEY0Cis6MTA1OUMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjQwNzg0Cis6MTA1OUQwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MEQ3Cis6MTA1OUUwMDAwMjAwMDA5MDAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MkUwCis6MTA1OUYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDA5Cis6MTA1QTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDIwMDkwMDAwMDAxMDRCCis6MTA1QTEwMDAwODgwMDA5MjAwMDAyMDA5MDAwMDAwMTAwOEMwMDA5MkQ5Cis6MTA1QTIwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMEVCCis6MTA1QTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDhFCis6MTA1QTQwMDAwMjAwMDA5MDAwMDBFRjA4MDAwMDAwMTAwODgwMDA5MkEzCis6MTA1QTUwMDAwMDAwRUYwODAwMDAwMDEwMDhDMDAwOTIwMDAwOTMwNzRCCis6MTA1QTYwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MEM1Cis6MTA1QTcwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNDCis6MTA1QTgwMDAwMDAwMzkwOTAwMDAwMDEwMDg4MDAwOTIwMDAwMzkwOTY4Cis6MTA1QTkwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDkzMDcwMDAwMDAxMEYyCis6MTA1QUEwMDAwODAwMDE5MjA4MDAzMTAzMDAxODAxRTg3NjIwODE5OTZFCis6MTA1QUIwMDAwODAwMkYwMzAwMTgwMUU4NzYyMDgxOTkwMDAwOTkwRjUzCis6MTA1QUMwMDAwMDAwMDA4MDAyMDAwMEYwMDgwMDkxMDcxRDE5MDFFOEE1Cis6MTA1QUQwMDA3NjIwODFCOTAwMDAzMTAzMDAwMDAwRjg2MjgxMkY5NTIzCis6MTA1QUUwMDAwMDAwMzEwMzgwMDAwMDgwMDI4MTJGQjYyQTAwMzEwM0JDCis6MTA1QUYwMDBEMDAxMDAyQzgyQ0QyRTkyMDgwMDMxMDMwMDFDMDFFODU5Cis6MTA1QjAwMDA3NjIwODE5OTAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMkQ5Cis6MTA1QjEwMDAwMDAwMDAwMDAwMEUwMUVDMDZDMDZFMzU1NDAwMDAwMENECis6MTA1QjIwMDAwMDAwMDAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDBCQzRBCis6MTA1QjMwMDBBODAwMkQzN0I0NDQwMDAwMDAwODAwMDA4N0NEOEIzQTQwCis6MTA1QjQwMDAwMDAwMDAwMDAwMDAwMDc4OTlDMDJDMzdCNDAwMDAwMDZECis6MTA1QjUwMDAwMDAwMDA3ODg5OEQ5NzNBMDAwMDM2MTAwMjEwMDAwMDhFCis6MTA1QjYwMDA4N0JGOTdCQTAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjBGCis6MTA1QjcwMDAwMDAwOUQwNzEyMDAwMDQwRjJDMTM4QjQwMDAwMDAwMDkwCis6MTA1QjgwMDAwMDkwMDA3ODA5MDA2RTMyMDAwMDM2MTAwNEEwMDAwMDdBCis6MTA1QjkwMDAwOTgwNkVCMjAwMDBBMjA3MDRBNTAwMDQwOTgwNkVCMjVECis6MTA1QkEwMDAwMDAwMDAwMDAwMDAwMDA0MDkwMDkwMzIwMDAwQTQwNzdCCis6MTA1QkIwMDAwNDAxMDAwNDA5NjQ5MEJDMDAwMDAwMDAwMDAwMDAwNDFGCis6MTA1QkMwMDAwOTQwMDAzMjA4MDAwMDAwNkUzNDAyRTgxNjI0OTAzOUMzCis6MTA1QkQwMDAwMDAwQTUwN0I3MTAwMkUwMDY4MDk3QjIwMDAwQTgwN0YyCis6MTA1QkUwMDA4MDAwMDA4MEYyODBGQ0I2MDAwMEE5MDcwMDAwMDBDODE5Cis6MTA1QkYwMDBGRjgwRkM5NDAwMDBBQTA3OUY5OTAwODA4MjFCRUVCQ0U2Cis6MTA1QzAwMDAwMDAwMDAwMDAwOTgwMEUwMEUwMDZFMzIwMDAwMDAwMDZFCis6MTA1QzEwMDBBNzAwMDA4MDAyMDAwMDMwMTgwMDM2MDAwMDAwMDBGOEU1Cis6MTA1QzIwMDA3MzBBMDNGOTAwMDAwMDAwMDAxMDAyMUMwOTAwNkUzMjI0Cis6MTA1QzMwMDA0MDAwQUYwNzA2MDEwMDgwODJDRDkxQkMwMEMwQjAwN0Q0Cis6MTA1QzQwMDAwMDE4MDJFMDA2ODAzNjkyMDBFMDAwMDAwMDE4MDJFMDMyCis6MTA1QzUwMDAwNjgwMzYzMjAwMDAwMDAwMDAwMDAwMjAwOTgwMDMzMjc4Cis6MTA1QzYwMDAwMDAwQjMwNzgwRDcwMTgwMzJDMDZFQjYwMDAwMDAwMDhDCis6MTA1QzcwMDAwMDAwMDAyMDQ5MDA5MjNBMDAwMDAwMDAwMDk4MDExODNFCis6MTA1QzgwMDAwOTAwNkUzMjAwMDAwMDAwMDAwQTAyMjQwOUMwNkUzMkQyCis6MTA1QzkwMDAwMDAwMDAwMDAwQzAwMTI4MDk4MDZFMzIwMDAwQzEwNzJBCis6MTA1Q0EwMDA4MDBFMDE4MDEyQzA2RUI2MDIwMDAwMDAwMDNDMDJFQ0MzCis6MTA1Q0IwMDAwNjAwMzYzMjAwMDAwMDAwMDAwMDAwMDA0OTAxOTIzQTYwCis6MTA1Q0MwMDAwMDAwQkQwNzgwRDYwMTgwNDJDMDZFQjYwMDgyMDAwMDkxCis6MTA1Q0QwMDAwMDEwMDJFMEE2Q0Q5MTMyMDBBMDAwMDAwMDJDMDJFOEU2Cis6MTA1Q0UwMDAwNjAwMzYzMjI4MDBDQjA3MDAzQTAyRUMwNjAwMzY5MjU2Cis6MTA1Q0YwMDAwMDAwMDAwMEQzMDEwMDFDRDlDMTkxMzQwMDgyMDAwMEQzCis6MTA1RDAwMDAwMDEwMDJFMEE2Q0Q5MTMyMDBBMDAwMDAwMDJDMDJFOEI1Cis6MTA1RDEwMDAwNjAwMzYzMjM0MDBDQjA3MDAzQTAyRUMwNjAwMzY5MjE5Cis6MTA1RDIwMDAwNDAwMDAwMDAwM0MwMkVDMDYwMDM2MzIyODAwMDAwMEFGCis6MTA1RDMwMDAwMDAwMDAwMDg5MEQ5MjNBMDAwMEM3MDc4MEQ2MDE4MDVDCis6MTA1RDQwMDA0MkMwNkVCNjAwODYwMDAwMDAxMDAyRTBBNkNEOTEzMjdGCis6MTA1RDUwMDAwNEEwMDAwMDAwMkMwMkU4MDYwMDM2MzIxNDAwQ0IwNzM1Cis6MTA1RDYwMDAwMDNBMDJFQzA2MDAzNjkyMDAwMDAwMDBEMzAxMDAxQzRECis6MTA1RDcwMDBEOUMxOTEzNDAwODYwMDAwMDAxMDAyRTBBNkNEOTEzMjE2Cis6MTA1RDgwMDAwNEEwMDAwMDAwMkMwMkU4MDYwMDM2MzIyMDAwQ0IwN0Y5Cis6MTA1RDkwMDAwMDNBMDJFQzA2MDAzNjkyMTIwMDAwMDAwMDM4MDJFQ0Q1Cis6MTA1REEwMDA4NkNEOTEzQTA4MDAwMDAwMDAyODAyRTg4NjI0OTAzOTQ4Cis6MTA1REIwMDAwMDAwMDAwMDAwMjAwMkUwOTYyNDE0MzcwMDAwMDAwMERDCis6MTA1REMwMDAwMDQwMDFFMDA2ODA5MTMyMDAwMEQxMDcwNDAxMDA4MDBDCis6MTA1REQwMDAwMjgwOTJCQzAwMDAwMDAwMDBDMDAxRTAwNjAwMDAzMjFBCis6MTA1REUwMDAwMDAwMDAwMDAwMzAwMEUwMDYwMDAwMzIwMDAwMDAwMDZCCis6MTA1REYwMDAwMEIwMDBFMDA2MDAwMDMyMjAwMDAwMDAwMDAwMDAwMEJCCis6MTA1RTAwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwNzhBOTAwMkQzNzlFCis6MTA1RTEwMDAwMDQ1MDAwMDAwMDgwMDAwODc4RDk3M0EwMDAwMDAwMDUwCis6MTA1RTIwMDAwMDAwMDA3ODk5QzAyQzM3MDAwMTAwMDAwMDAwMDA3OEM1Cis6MTA1RTMwMDA4OThEOTczQTAwMDAzNjEwMDIxMDAwMDA4N0JGOTdCQThDCis6MTA1RTQwMDAwMDAwMDAwMDAwMTgwMDAwMDc0MEZFMzIwMDAwREEwN0UyCis6MTA1RTUwMDAxMjAwMDA0OEYyQzEzOEI0MDAwMERFMDc4MEQ3MDEyQ0UwCis6MTA1RTYwMDAwOUMwNkVCMjAwMDAwMDAwREFENzAxRUMwNkMwNkUzNTQyCis6MTA1RTcwMDAwMDAwMDAwMDAwNUEwMUVDMDY0MEVEMzIwMDAwMDAwMDc2Cis6MTA1RTgwMDAwMDVDMDFFODA2ODA4QjMyMDAwMEUxMDc4MDAxMDA4MEExCis6MTA1RTkwMDA2MkMwOTJCNjAwMDAwMDAwMDAwMDAwRjg4MjgxMkYzNDNBCis6MTA1RUEwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDMzCis6MTA1RUIwMDAwMDA0MDEzODA4QzA2RTMyMDAwMDAwMDAwMDYyMDFFQ0VFCis6MTA1RUMwMDAwNjgwODMzMjAxMDA5MzA3MTIwMTAwMkM4MkNEMkVCMjhFCis6MTA1RUQwMDAwMDAwRTQwNzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEM1Cis6MTA1RUUwMDAwMDU0MDFGQzAyQzA2RTMyMDAwMDAwMDAwMDAwMDBEODI3Cis6MTA1RUYwMDAwMjgwMDEzMjAwQzBFQzA3MTgwMTAwMENBOENEM0VCMkIwCis6MTA1RjAwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIyRDAwMkYwMzlBCis6MTA1RjEwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEVBMDcwMDAwMDA4MEEyCis6MTA1RjIwMDAwMjAwMDA5MDAwMDAwMDAwMDA2MjAxMzgwOEMwNkUzMkRDCis6MTA1RjMwMDAwMDA4MDA4MDAwMDAwMDI4MDkwMDM3MzIwMDYwNEIwRjg1Cis6MTA1RjQwMDAwMDAwMDAwODA4ODAzNkYyMDAwMDkzMDcwNDA2MDFFQzA4Cis6MTA1RjUwMDAxNkMwNkVCQzAwMDA5MzA3ODAwMDAwODA3MjgxMkZCNkNGCis6MTA1RjYwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwNzBDCis6MTA1RjcwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEYyMDcwMDAwMDA4MDNBCis6MTA1RjgwMDAwMjAwMDA5MDAwMDBGNTA3MDAwMDAwRjhCMjgxMkY5NDk1Cis6MTA1RjkwMDAwMDAwQ0YwRjAwQTAwMDE4MDgwMDZFRjIwMDAwMjUxMENFCis6MTA1RkEwMDAwMDc4MDE2MDA4MDA2RUYyMDAwMEY5MDcxMjAxMDBDOEQ1Cis6MTA1RkIwMDAwMjAwMjBCMjAwMDBGQzA3MDAwMDAwODAwMjAwMDA5MEY4Cis6MTA1RkMwMDAwMDAwMDYwODEyMDEwMDVDMDg4MDIwQjIwMDAwRkMwN0Y3Cis6MTA1RkQwMDAxMjAxMDA2MDAyODAyQ0IyMDAwMEZBMDcwMDAwMDA4MDZECis6MTA1RkUwMDAwMjAwMDA5MDAwMDBGRTA3MDQwMDAwODAwMjQwODBCQzE4Cis6MTA1RkYwMDAwMDAwMDAwMDAwMDAwMEY4MUY4MEZGM0EwMDAwMDAwOEM5Cis6MTA2MDAwMDA4MDAxMDA4MEEyODAyRkI2MTgwMDM2MDBDQTAwMDBGODc4Cis6MTA2MDEwMDA3MzBBMDNGOTAwMDA5MzA3ODAwMDAwODA3MjgxMkZCNjk1Cis6MTA2MDIwMDAzRDAwMDEwODEyMDAwMDJDODJDRDJFQjIwMDAwOTMwNzIzCis6MTA2MDMwMDAwMDAwMDBGODcyODEyRjk0MDAwMEZDMDcxMjAwMDBDOEQ1Cis6MTA2MDQwMDAwMjAwMjBCMjAwMDBGQTA3MTIwMDAwNUMwODgwMjBCMkIzCis6MTA2MDUwMDAwMDAwMzYxMDA0QTAwMDE4MDgwMDZFQjIwMDAwMDAwMDE2Cis6MTA2MDYwMDAwMDAwMDA3ODc5NjEzODMyMDAwMDA3MDgxMjE4MDI0Q0VECis6MTA2MDcwMDBFMjI1NkVCMjA4MDAwMDAwMDAxMDAyMDA3OEUxNkUzOURGCis6MTA2MDgwMDAwMDAwMDAwMDAwMTgwMDIwMDcwMDAwMzIwNzAwMDAwMDk4Cis6MTA2MDkwMDAwMDAwMDAzODc4Q0FFOTM5MDAwMDM2MTAwNDAwMDAzQ0RFCis6MTA2MEEwMDAwODQwODBCMjAwMDAzNjEwMDQ5MDAwNkMwODAwNkVCMjA4Cis6MTA2MEIwMDAwMDAwMDAwMDAwOTgwMDRDMDgwMDZFMzIwMDAwMDAwMDU0Cis6MTA2MEMwMDA1MTAwMDBEODAyMDAwMDMyMDAwMDAwMDA0RDAwMDAwMDI2Cis6MTA2MEQwMDA2N0UwODMzRTAwMDAwMDAwMDAwODAwMDAwNzAwODAzMkY3Cis6MTA2MEUwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMDIxCis6MTA2MEYwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMDAwMDAwMDAwMDAxOEYzCis6MTA2MTAwMDBEOEEwODEzQzAwMDA2ODA4MDRCMDAwRTBENjIwNkVCQzM2Cis6MTA2MTEwMDAwMDAwMzgwODA0MDAwMDNDRDhFMDgzQkMwMDAwMUUwOEUyCis6MTA2MTIwMDA4MDAwMDA4MDkyODAyRkI2MDAwMDE5MDgxMjAxMDAwMDQ0Cis6MTA2MTMwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTA0Cis6MTA2MTQwMDAxRDAwMDAwMDAwMDAwMDc4MDlBNDE3MzgwMDAwMUQwODk5Cis6MTA2MTUwMDAwNDAxMDA4MDEyODA5N0JDMDAwMDE4MDg2NzAwMDBGODU2Cis6MTA2MTYwMDBBMjgwMkZCNTAwMDAxOTA4MDAwMDAwMDAwOUMwMjE5MjhDCis6MTA2MTcwMDAwMDAwMDAwMEM5MDEwMEQ4MDI0MDg0MzIwMDAwMjEwODVDCis6MTA2MTgwMDAwNDAwMDA4MDcyODAyREJDMDAwMDFGMDgxMjAwMDA0NDMzCis6MTA2MTkwMDBFMkUwMzhCMjAwMDAyQzA4NTEwMDAwRDgxMjgwMkQ5QTlECis6MTA2MUEwMDAwMDAwMDAwMDAwMDAwMDc4Rjk4MTgzMzQwMDAwMjIwODFDCis6MTA2MUIwMDAxMjAwMDA0NEUyRTUzOEIyMDAwMDI2MDg4MDAwMDA4MEFBCis6MTA2MUMwMDA4MjgwMkZCNjAwMDA1NTBGMDBBMDAxNTAwODAwNkVGMjJCCis6MTA2MUQwMDAwMDAwMDAwMDAwRjgwMUUwMDYwMDg1MzIwMDAwMjgwOEY5Cis6MTA2MUUwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGOEQ5Cis6MTA2MUYwMDA3MzBBMDNGOTAwMDAyQjA4MDQwMTAwODAwMjgwMkRCQzAzCis6MTA2MjAwMDAwMDAwMjcwODY3MDAwMEY4QTI4MDJGQjUwMDAwMzYxMEI0Cis6MTA2MjEwMDAxMjAwMDBFODAyQzAyMUIyMDAwMDAwMDA1MTAwMDBEOEM2Cis6MTA2MjIwMDAwMjAwMDAzMjAwMDAzMDA4MkEwMTAwMDBEODIwODBCQUE1Cis6MTA2MjMwMDAwMDAwMzAwODEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDI5Cis6MTA2MjQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODA1Cis6MTA2MjUwMDAwMjQwODQzMjAwMDAwMDAwQ0FFMDAwNkMwODAwNkUzMjg4Cis6MTA2MjYwMDAwMDAwMDAwMDAwRTgwMDRDMDgwMDZFMzIwMDAwMzYxMDBDCis6MTA2MjcwMDAwNEYwMDAxODA4MDA2RUIyMDAwMDAwMDAwMDAwMDAzOEIyCis6MTA2MjgwMDAxODgxODMzNTAwMDAwRjA4MDRCMDAwODA4MjlCODFCQzE4Cis6MTA2MjkwMDAwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzUwOEEwMEYwODU2Cis6MTA2MkEwMDAxMjAxMDA0MEEyQ0QzOUIyMDAwMDM2MDgwMDAwMDA4MDgzCis6MTA2MkIwMDAwMjAwMDA5MDAwMDA0MDA4MjkzNDAyQjgwODgwNkVCMjQ1Cis6MTA2MkMwMDAwMDAwM0IwODEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDhFCis6MTA2MkQwMDAwMDAwMDBGODczMEEwM0Y5MUQwMDAwMDAwMDAwMDA3OEI4Cis6MTA2MkUwMDAwOUE0MTczODAwMDAzRjA4MDQwMTAwODAxMjgwOTdCQzAxCis6MTA2MkYwMDAwMDAwM0EwODY3MDAwMEY4QTI4MDJGQjUwMDAwM0IwOEI0Cis6MTA2MzAwMDAwMDAwMDAwMDA5QzAyMTkyMDAwMDAwMDBDOTAxMDBEODZGCis6MTA2MzEwMDAwMjQwODQzMjAwMDAwMDAwMDAwMDAwNzhGOTgxODMzNERDCis6MTA2MzIwMDAwMDAwNDEwODEyMDAwMDQ0RTJFNTM4QjIwMDAwNDcwOENFCis6MTA2MzMwMDAyODAwMDA2Q0Q4RTA4NkJBMDAwMDU0MEYwMEEwMDE1MDdECis6MTA2MzQwMDAwODAwNkVGMjAwMDA0NzA4MURGODAxRTAwNjAwODVCMjYzCis6MTA2MzUwMDAwMDAwNDcwODgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMDVDCis6MTA2MzYwMDBEMDAxMDAyQzgyQ0QyRTMyMDAwMDRBMDgwNEEwMDBFMEFCCis6MTA2MzcwMDAwNjgwODFCMjAwMDAzNjEwMDQ5MDAwRTAwNkMwODZCMkFDCis6MTA2MzgwMDAwMDAwNTgwODAwOTgwMEUwMDZDMDg0OTIwMDAwNEYwODAyCis6MTA2MzkwMDA4MDAxMDA4MEEyODAyRkI2MDAwMDREMDgxMjAxMDAwMDhECis6MTA2M0EwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTkyCis6MTA2M0IwMDAxRDAwNEYwODA0MDEwMDgwMDJBNDE3QjgwMDAwNEMwODFCCis6MTA2M0MwMDAwMDAwMDBGOEUyODAyRjk0MDAwMDM2MTAwNEUwMDA2QzFBCis6MTA2M0QwMDAwODAwNkVCMjAwMDAwMDAwQ0FFODAwNEMwODAwNkUzMkVGCis6MTA2M0UwMDAwMDAwMzYxMDA0RjAwMDE4MDgwMDZFQjIwMDAwNTUwOEQ2Cis6MTA2M0YwMDAwNEIwMDA4MDgyOUI4MUJDMDAwMDAwMDBDQTAxMDBGODRDCis6MTA2NDAwMDA0MjgwMkYzNTA4QTA1NDA4MTIwMDAwNDBBMkNEMzlCMkI2Cis6MTA2NDEwMDAwMDAwMDAwMDAwQTAwMEUwMDY4MDgxMzIwMDAwMDAwMEMzCis6MTA2NDIwMDAwMDk4MDBFMDA2QzA4NDMyMDAwMDM2MTAwNDkwMDBFMEJFCis6MTA2NDMwMDAwNkMwODZCMjAwMDA1RDA4MkE1RDAxRTgwNjgwOEJCMkM2Cis6MTA2NDQwMDAwMDAwNUIwODEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMEVDCis6MTA2NDUwMDAwMDAwMDBGODczMEEwM0Y5MUQwMDVEMDgwNDAxMDA4MEM0Cis6MTA2NDYwMDAwMkE0MTdCODAwMDA1QTA4MDAwMDAwRjhFMjgwMkY5NDM4Cis6MTA2NDcwMDAxMDI0NjAwODM3MDAwMEY4QTI4RDJGQjEzRDAwNUUwODlGCis6MTA2NDgwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGOEE3Cis6MTA2NDkwMDA3MjgxMkYzNDA4MDAwMDAwQ0ExQzAxRTg3NjIwODEzOTdGCis6MTA2NEEwMDAwMDAwRkEwRDAwMDAwMDJDRjkwMTAwRjQwMDAwNjUwODVFCis6MTA2NEIwMDA4MDAwMDA4MEUyODAyRkI2MDAwMDY1MDgxMjAxMDAwMDE1Cis6MTA2NEMwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTcxCis6MTA2NEQwMDAxMDAwMDAwMDAwMTgwMDgwNjdBMTczMzkzMDAwMzIwM0ZCCis6MTA2NEUwMDAxMjAxMDA1Q0EyOEQyQ0IyMDAwMDM2MTAwMDAwMDA4MDZBCis6MTA2NEYwMDAwMjAwMDA5MDAwMDA2QjA4ODAwMDAwODA5MjgwMkZCNkEwCis6MTA2NTAwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENDCis6MTA2NTEwMDBDOTAxMDBEODAyNDA4NDMyMDAwMDM2MTAyQTAwMDA3OEY5Cis6MTA2NTIwMDBGOTgxODNCNDAwMDA2QzA4MTIwMDAwNDRFMkU1MzhCMjNGCis6MTA2NTMwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwNzEwODlCCis6MTA2NTQwMDAxRDAwMDAzODE4ODE4M0I1MDAwMDcxMDg4MDAwMDA4MEFDCis6MTA2NTUwMDAwMjgxMkZCNjJBMDAwMDAwRDAwMTAwMkM4MkNEMkUzMkZECis6MTA2NTYwMDAwMDAwNzQwODA0MDYwMUVDMTZDMDZFQkMwMDAwMDAwMEI4Cis6MTA2NTcwMDBDQTAxMDBGODQyODAyRjM0MDhDMDczMDgxMjAwMDA0MDlFCis6MTA2NTgwMDBBMkNEMzlCMjAwMDA3NzA4ODAwMDAwODA4MjgwMkZCNjRCCis6MTA2NTkwMDAwMDAwNTUwRjAwQTAwMTUwMDgwMDZFRjIwMDAwMDAwMDNFCis6MTA2NUEwMDAwMEY4MDFFMDA2MDA4NTMyMDAwMDc5MDgxMjAxMDAwMEMxCis6MTA2NUIwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTgwCis6MTA2NUMwMDAwMDAwOTUwODJBMzUwMkI4MDg4MDZFQjIwMDAwN0MwOEU5Cis6MTA2NUQwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGOEM2Cis6MTA2NUUwMDA3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNUI0Cis6MTA2NUYwMDAwMDAwOEUwODA0MDAwMDgwMDI2MTgwQkMwMDAwODcwODUzCis6MTA2NjAwMDA4MEI4MDAwMDA5QzA2RUIyNDAwMDgyMDgwNDAwMDA4MDFCCis6MTA2NjEwMDA4MjBEOTBCQzAwMDA4MjA4MDJCMDAwODA4MjFCODRCQzA2Cis6MTA2NjIwMDAwMDAwODcwODAwMDAwMEY4QjI4MTJGOTQwMDAwMDAwMEVECis6MTA2NjMwMDAwMEQ2MDFFQzU2QzA2RTM0MDAwMDAwMDAwMDAwMDA2MDdGCis6MTA2NjQwMDAxODAwODYzQTAwMDAwMDAwMDAwMDAwODBCNzAxNzgzNDhFCis6MTA2NjUwMDAwMDAwMDAwMDAwNzgwMUUwMDYwMDg2MzI0MDAwOTUwODQ2Cis6MTA2NjYwMDAwNDAwMDA4MDgyMEQ5MEJDMDAwMDM2MTAwNEEwMDAxOEM5Cis6MTA2NjcwMDAwODAwNkVCMjAwMDBDRjBGMDAwMDAwMDBEODIwODBGQUEyCis6MTA2NjgwMDAwMDAwMzYxMDA2MDAwMDNDMTgyMDg0QkMwMDAwMzYxMEM0Cis6MTA2NjkwMDAwNEIwMDAzQzg4REI4M0JFMDAwMDAwMDAwMDAwMDA4MEU2Cis6MTA2NkEwMDBGNzIwNzgzQTAwMDAwMDAwNTg3ODAxRTBGNjIwODYzQTlBCis6MTA2NkIwMDAwMDAwMEMwODAwMDAwMDA0Rjg2MDgwOUEwMDAwOTEwOEI3Cis6MTA2NkMwMDA4MEI5MDAwMDA5QzA2RUIyMkYwMDk1MDgxMjAxMDAyQzlECis6MTA2NkQwMDA4MkNEMkVCMjAwMDA4RjA4MDAwMDAwODAwMjAwMDA5MEUyCis6MTA2NkUwMDA0MDAwOTMwODA0MDEwMDgwODIwRDkwQkMzODAwOTQwODlCCis6MTA2NkYwMDAwMDAwMDA3ODA5MDAzNjkyMzkwMDAwMDAwMDAwMDA3OEEwCis6MTA2NzAwMDAwOTAwMzYzMjAwMDA5NDA4MTIwMDAwMkNFMkU1MkVCMjk3Cis6MTA2NzEwMDAxMDAwMDAwMDAwMTgwMDgwNjdBMTczMzkwMDAwMDAwMDFECis6MTA2NzIwMDAwMDVDMDFFODA2ODA4QjMyMTAyNDAwMDAwMDAwMDBGOEI1Cis6MTA2NzMwMDBBMjhEMkYzMTMwMDA5MzA3MTIwMTAwNUNBMjhEMkNCMjg0Cis6MTA2NzQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDMwOEU2Cis6MTA2NzUwMDAwMDAwMDBGOEMyODEyRjk1MDAwMDAwMDAwMDU0MDFGQ0U5Cis6MTA2NzYwMDAwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjNBCis6MTA2NzcwMDAwMEMwQTEwODE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDg2Cis6MTA2NzgwMDAwMDAwMDAwODA4ODAzNjMyMkQwMDJGMDMxMjAxMDAyQzczCis6MTA2NzkwMDA4MkNEMkVCMjAwMDA5RjA4MDAwMDAwODAwMjAwMDA5MDExCis6MTA2N0EwMDAwMDAwMDAwMDAwNjIwMTM4MDhDMDZFMzIwMDA4MDA4MDVFCis6MTA2N0IwMDAwMDAwMDAyODA5MDAzNzMyMDA2MDRCMEYwMDAwMDAwODdECis6MTA2N0MwMDAwODgwMzZGMjAwMDBBRjA4MDAwMDAwODAwMjAwMDA5MDUwCis6MTA2N0QwMDAwMDAwQTcwODgwMDAwMDgwQzI4MTJGQjYwMDAwQUEwODMwCis6MTA2N0UwMDAwMEQwMDFFODA2MDAwMDkyMDAwMDAwMDAwMDAwMDBGODYwCis6MTA2N0YwMDBDMjgxMkYzNTAwMDBBQTA4MDREMTAxODAwMjgwNkVCQzNFCis6MTA2ODAwMDAwMDAwMDAwMDAwRDYwMUVDMjZDMDZFMzQwMDAwQUMwODg5Cis6MTA2ODEwMDA4MDAwMDA4MDkyODEyRkI2MDAwMEFGMDgwMEM4MDFFODE4Cis6MTA2ODIwMDAwNjAwMDA5MjAwMDAwMDAwMDAwMDAwRjg5MjgxMkYzNTYxCis6MTA2ODMwMDAwMDAwQUYwODA0QzkwMTgwMDI4MDZFQkMwMDAwMDAwMEE3Cis6MTA2ODQwMDAwMEQ2MDFFQzE2QzA2RTM0MTEwMDkzMDcxMjAxMDAyQzIzCis6MTA2ODUwMDA4MkNEMkVCMjAwMDBBRjA4MDAwMDAwODAwMjAwMDA5MDQwCis6MTA2ODYwMDAwMDAwOTMwNzlBMDEwMEY4NDI4MTJGQjUwMDAwQjgwODk0Cis6MTA2ODcwMDAxMjAxMDBDODAyMDAyMEIyMDAwMDAwMDAwMDVDMDFFQzIwCis6MTA2ODgwMDAwNjQwMDAzMjAwMDA5MzA3MzcwMDAwRjg0MjgxMkZCNDIxCis6MTA2ODkwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwN0QzCis6MTA2OEEwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEI2MDgwMDAwMDA4MDNDCis6MTA2OEIwMDAwMjAwMDA5MDAwMDBDMzA4MTIwMTAwNUMwODgwMjBCMkIyCis6MTA2OEMwMDAwMDAwQjMwODEyMDEwMDYwMDI4MDJDQjIwMDAwMzYxMEY0Cis6MTA2OEQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEMwMDgxMjAxMDBDODAzCis6MTA2OEUwMDAwMjAwMjBCMjAwMDA5MzA3MzcwMDAwRjhEMjgxMkZCNEQ1Cis6MTA2OEYwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwNzczCis6MTA2OTAwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEJFMDgwMDAwMDA4MEQzCis6MTA2OTEwMDAwMjAwMDA5MDAwMDBDMzA4MTIwMTAwNUMwODgwMjBCMjUxCis6MTA2OTIwMDAwMDAwQkMwODEyMDEwMDYwMDI4MDJDQjIwMDAwMzYxMDhBCis6MTA2OTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDAwMDA3OENECis6MTA2OTQwMDA3OTYxMzgzMjAwMDBDNDA4MTIxODAyNENFMjI1NkVCMjk4Cis6MTA2OTUwMDAwMDAwMDAwMDAwMzQwMkI4MDg4MDZFMzIwMDAwMDAwMDIxCis6MTA2OTYwMDAwMEEwMDE1MDA4MDA2RTMyMDAwMDAwMDAwMDc4MDE2MEI1Cis6MTA2OTcwMDAwODAwNkUzMjAwMDBDQTA4OUQxMTAyMzQwOTAwNkVCMjkwCis6MTA2OTgwMDAwMDAwMDAwMDAwRjAwMTg4MDgwMDZFMzIwMDAwNkMwRjZCCis6MTA2OTkwMDAwMEE4MDEwODA5MDA2RUYyMDAwMDAwMDBENEY4MDFFMDMwCis6MTA2OUEwMDAwNjAwODUzMjAwMDAwMDAwREE1QzAxRTgwNjgwOEIzMkM4Cis6MTA2OUIwMDAwMDAwREMwRUREMDAwMDMwMDMwMDM4RjIwMDAwRDAwOERCCis6MTA2OUMwMDAyMzI5MDIwNDA5ODA2RUIyM0UwMENGMDgxMjAwMDAyQzc5Cis6MTA2OUQwMDA4MkNEMkVCMjA4MDBEMzA4MUQxQzAxRTg3NjIwODFCOUIzCis6MTA2OUUwMDAwMDAwRDMwODgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMDNBCis6MTA2OUYwMDBEMDAxMDAyQzgyQ0QyRTMyMDAwMEZBMEQwMDAwMDAyQ0I4Cis6MTA2QTAwMDBGOTAxMDBGNDAwMDBENzA4OUQwMTAwODAwNzQwOTNCMjBGCis6MTA2QTEwMDAwMDAwMDAwMDAwMzAwMDgwMDc4MDg4MzIwMDAwMDAwMDg1Cis6MTA2QTIwMDAwMDM4MDA4MDA3MDBFRTMyMDAwMDAwMDAwMDA4MDA4MEZGCis6MTA2QTMwMDAwN0MwODUzMjAwMDAwMDAwMDAxMDAwODAwNzQwOTAzMjNGCis6MTA2QTQwMDAxMDAwMDAwMDAwMTgwMDgwODc4RDg1MzcwMDAwMDAwMENFCis6MTA2QTUwMDAwMDIwMDA4MDA3MDA4NjMyMDAwMDAwMDAwMDI4MDA4MDJGCis6MTA2QTYwMDAwNzAwODUzMjAwMDBERTA4MTIwMTAwMDAwOUMwMjFCMkQzCis6MTA2QTcwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkzMDAwMzIwM0YyCis6MTA2QTgwMDAxMjAxMDA1Q0EyOEQyQ0IyMDAwMDM2MTAwMDAwMDA4MEM0Cis6MTA2QTkwMDAwMjAwMDA5MDAwMDAwMDAwMDBDQzAxNzgwOTgwNkUzMkY2Cis6MTA2QUEwMDAwMDAwOTMwN0RDRDEwMUU4MDY4MDk3OTIxMzAwOTMwNzVBCis6MTA2QUIwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEUyMDgwMDAwMDA4MEZFCis6MTA2QUMwMDAwMjAwMDA5MDAwMDBCQTBEMDAwMDAwMTgwOTQwODFGMjk5Cis6MTA2QUQwMDAwMDAwQTMwRDAwQTgwMTIwMDkwMDZFRjIwMDAwOTMwNzNBCis6MTA2QUUwMDA4MDAxMDA4MEYyODAyRkI2MDAwMEVDMDgxMjAxMDBDODdGCis6MTA2QUYwMDAwMjAwMjBCMjAwMDA5MzA3ODAwMDAwODA3MjgxMkZCNjUwCis6MTA2QjAwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwNzYwCis6MTA2QjEwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEVBMDgwMDAwMDA4MDk1Cis6MTA2QjIwMDAwMjAwMDA5MDAwMDBDMzA4MTIwMTAwNUMwODgwMjBCMjNGCis6MTA2QjMwMDAwMDAwRTgwODEyMDEwMDYwMDI4MDJDQjIwMDAwMzYxMDRDCis6MTA2QjQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDkzMDczNTAxMDBGODZCCis6MTA2QjUwMDAxMjgxMkZCNTAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjMxCis6MTA2QjYwMDAwMDAwMDAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwRjYwOEI0Cis6MTA2QjcwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDBEMTAxMDAwODExCis6MTA2QjgwMDAwODgwMzYzMjNCMDAzMTAzMTIwMTAwMkM4MkNEMkVCMjM4Cis6MTA2QjkwMDAwMDAwRjQwODAwMDAwMDgwMDIwMDAwOTAwMDAwNDQwRjk0Cis6MTA2QkEwMDAwMDk4MDEyODA5MDA2RUYyMDAwMDkzMDcwMDAwMDA4MEExCis6MTA2QkIwMDAwMjAwMDA5MDAwMDBGRTA4ODAwMTAwODBBMjgxMkZCNjM0Cis6MTA2QkMwMDAwMDAwRkUwODgwMDAwMDgwNDI4MTJGQjYwMDAwRkUwODExCis6MTA2QkQwMDAwODVCMDFFQzA2RkI2RUJDMDAwMDAwMDAwMDVBMDFFQ0YzCis6MTA2QkUwMDAwNjAwMDAzMjAwMDBGRTA4MzcwMDAwRjg0MjgxMkZCNDkyCis6MTA2QkYwMDAzRDAwMDAwMEQ3MDEwMDJDODJDRDJFMzIwMDAwMDQwOTk4Cis6MTA2QzAwMDA4MDAxMDA4MDkyODEyRkI2MDAwMDBBMDkwOEM5MDFFOEJFCis6MTA2QzEwMDAwNkJCNkVCQzAwMDAwMDAwMDBDODAxRTgwNjAwMDAzMkEwCis6MTA2QzIwMDAzMzAwMDEwOTEyMDAwMDJDODJDRDJFQjIwMDAwNTEwRjVBCis6MTA2QzMwMDAwMDAwMDAyODA5ODAwMUYyMDAwMDkzMDcwMDAwMDA4MDk2Cis6MTA2QzQwMDAwMjAwMDA5MDAwMDAwQTA5ODAwMTAwODBDMjgxMkZCNjc2Cis6MTA2QzUwMDAwMDAwMEEwOTA4RDEwMUU4MDZCQjZFQkMwMDAwMDAwMDc0Cis6MTA2QzYwMDAwMEQwMDFFODA2MDAwMDMyMzMwMDA3MDkxMjAwMDAyQ0IyCis6MTA2QzcwMDA4MkNEMkVCMjAwMDA1MTBGMDAwMDAwMjgwOUMwMDFGMkExCis6MTA2QzgwMDAwMDAwOTMwNzAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwN0JFCis6MTA2QzkwMDA4MDAxMDA4MEYyODEyRkI2MTgwMDkzMDcwMDAwMDAyQ0JECis6MTA2Q0EwMDA4MkNEMkU5MjAwMDAwRjA5MTIwMDAwQzgwMjAwMjBCMjBGCis6MTA2Q0IwMDAwMDAwMTIwOTEyMDEwMDVDMDg4MDIwQjIwMDAwMzYxMEFBCis6MTA2Q0MwMDAxMjAwMDA2MDAyODAyQ0IyMDAwMDAwMDAwMDAwMDBGOEZBCis6MTA2Q0QwMDAxRjgwRkYzQTAwMDAzMTAzMTIwMTAwMkM3MkUwMkVCMjM3Cis6MTA2Q0UwMDAwMDAwMTAwOTAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDc5Cis6MTA2Q0YwMDAwMDAwMDA3ODc5NjEzODMyMDAwMDEzMDkxMjE4MDI0QzQ0Cis6MTA2RDAwMDBFMjI1NkVCMjAwMDAwMDAwMDAzNDAyQjgwODgwNkUzMjQ2Cis6MTA2RDEwMDAwMDAwMDAwMEQ0QTAwMTUwMDgwMDZFMzIwMDAwMDAwMDA2Cis6MTA2RDIwMDBEQjc5MDE2MDA4MDA2RTMyMDAwMDU1MEZERDAwMDAwNEMxCis6MTA2RDMwMDAwODAwMDBGMjEwMDAwMDAwMDAxODAwODA4NzhEODUzN0UxCis6MTA2RDQwMDAwMDAwMDAwMDAwRjgwMUUwMDYwMDg1MzIwMDAwMUMwOTg4Cis6MTA2RDUwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODNFCis6MTA2RDYwMDA3MzBBMDNGOTMwMDAzNjEwMTIwMDAwNUNBMjhEMkNCMkI5Cis6MTA2RDcwMDAwMDAwMzYxMDA0MDcwMUVDMTZDMDZFQkMwMDAwMDAwMEQ1Cis6MTA2RDgwMDAwMEIwMDBFMDA2MDAwMDMyMDAwMDkzMDdEQTVDMDFFODgyCis6MTA2RDkwMDAwNjgwOEI5MjAwMDA5MzA3OUY0MTAxODA1MjIwNkVCQ0I5Cis6MTA2REEwMDAwMDAwMkIwOTlGOTgwMTgwNTIyMDZFQkMwMDAwMDAwMDVCCis6MTA2REIwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDAwMDU0MDFGQ0Y1Cis6MTA2REMwMDAwMkMwNkUzMjAwQzAyOTA5MTgwMTAwMENBOENEM0VCMkU1Cis6MTA2REQwMDAyMDgwOTMwNzMxMDAwMDA4MDg4MDM2QjIwMDAwMDAwMEQwCis6MTA2REUwMDAwMDAwMDBGODEyODEyRjM0M0IwMDkzMDcxMjAxMDAyQ0ExCis6MTA2REYwMDA4MkNEMkVCMjAwMDAyNzA5MDAwMDAwODAwMjAwMDA5MDIyCis6MTA2RTAwMDAwMDAwNDQwRjAwOTgwMTI4MDkwMDZFRjIwMDAwOTMwNzZCCis6MTA2RTEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDkzMDdENTQxMDFFMENGCis6MTA2RTIwMDAwNjQwODE5MjAwMDA5MzA3MDRCMDAwODAwMjAwNkVCQzBGCis6MTA2RTMwMDAwMDAwMDAwMDAwOTAwMTAwMDgwMDZFMzIwMDAwMjUxMEU0Cis6MTA2RTQwMDAwMDc4MDE2MDA4MDA2RUYyMDAwMDkzMDcwMDAwMDA4MEU3Cis6MTA2RTUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwQzAyNzgwOTgwNkUzMkYxCis6MTA2RTYwMDAwMDAwMzMwOTA0RDQwMTgwMTJDMDZFQkMwMDAwMDAwMDkxCis6MTA2RTcwMDAwMDAwMDA3ODE5ODA5NzM3MDAwMDAwMDAwMDkwMDFFMEMyCis6MTA2RTgwMDBFNjI1NkUzQTAwMDAyNTEwMDAwMDAwODAwMjAwMDBGMEE4Cis6MTA2RTkwMDAwMDAwMzcwOTAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzA2Cis6MTA2RUEwMDAwMDkwMDFFMDA2MDA4MDkyMDAwMDAwMDAwMDkwMDFFMEU4Cis6MTA2RUIwMDAwNjAwODAzMjAwMDAwMzA4MDAwMDAwODAwMjAwMDA5MEZECis6MTA2RUMwMDAwMDAwQTMwRDAwQTgwMTIwMDkwMDZFRjIwMDAwRTcwOEYxCis6MTA2RUQwMDA4MDAwMDA4MEYyODAyRkI2MDAwMDkzMDcwMDAwMDA4MDQxCis6MTA2RUUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjgzCis6MTA2RUYwMDAwMDAwMDAwMDAwMDAwMDc4MDkwMDZFMzIwMjAwNDEwOTI1Cis6MTA2RjAwMDAwNEI5MDA4MDgyQ0Q2RUJDMDAwMDQzMDk4MDAwMDA4MDdGCis6MTA2RjEwMDA3MjgwRkNCNjAwMDA0NTA5MDAwMDAwRkMwMjAwMDA5MkVGCis6MTA2RjIwMDAwMDAwNDMwOTgwMDAwMDgwODI4MEZDQjYwMDAwNDUwOTEzCis6MTA2RjMwMDAwMDAwMDBGQzAyMDAwMDkyMDAwMDAwMDAwMDAwMDBBODE5Cis6MTA2RjQwMDA0MkJEOTczMDAwMDAwMDAwNTQxODg5RkNGMkMwN0MzMDJDCis6MTA2RjUwMDAwMEMwNEIwOTE4MDEwMDBDQThDRDNFQjIwMDAwMDAwMDkzCis6MTA2RjYwMDAwMDBFMDFFQzA2MDAwMDM0MDAwMDAwMDAwMDU0MDFFQ0FCCis6MTA2RjcwMDAwNkMwMkYzMjIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjUyCis6MTA2RjgwMDAwMDAwMzEwMzEyMDEwMDJDODJDRDJFQjIwMDAwNDkwOTBECis6MTA2RjkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDYyMDEzODQ0Cis6MTA2RkEwMDAwOEMwNkUzMjAwMDgwMDgwMDAwMDAwMjgwOTAwMzczMjU3Cis6MTA2RkIwMDAwMDAwNEIwRjAwMDAwMDA4RTgwMTAwRjQwMDAwMzYxMDRDCis6MTA2RkMwMDAwNDA3MDFFQzE2QzA2RUJDMDAwMDAwMDAwMDAwMDBBODIxCis6MTA2RkQwMDBBMjAwMkQzNzBBMDAwMDAwMDAwMDAwNzgwOTAwMzYzMkI4Cis6MTA2RkUwMDAwMDAwMDAwMDAwMTg4OUUwMDcwMDAwMzIwMDAwNTEwOThECis6MTA2RkYwMDAwNDAxMDA3ODE5ODA5N0JDMDIwMDVDMDkwNEI5MDA4MDg0Cis6MTA3MDAwMDA4MkNENkVCQzAwMDAwMDQ4RDYwMTAwNzhDOUNEMkMzMjdDCis6MTA3MDEwMDAwMDAwNTUwOUI2MDAwMDgwMDIwMDAwQjAwMDAwNTYwOUNCCis6MTA3MDIwMDAxMjAwMDA2NDAyODA5N0IyMDAwMDU3MDkxMjA4MDA2NDQxCis6MTA3MDMwMDAwMjAwNkVCMjAwMDA1ODA5MTIxODAwNjQwMjAwNkVCMjFECis6MTA3MDQwMDAwMDAwNTkwOTEyMTAwMDY0MDIwMDZFQjIwMDAwMDAwMDM2Cis6MTA3MDUwMDBBNjU0MDFFQzA2QzAyRjMyMDAwMDhDMDcwMDBFMDFFQzk0Cis6MTA3MDYwMDAwNjAwMDA5NDAwMjAwMDRDRDYwMTAwNzhDOUNEMkMzMkQ3Cis6MTA3MDcwMDAwMDAwNUQwOUI2MDAwMDgwMDIwMDAwQjAwMDAwNUUwOTVCCis6MTA3MDgwMDAxMjAwMDA2NDAyODA5N0IyMDAwMDVGMDkxMjA4MDA2NEQ5Cis6MTA3MDkwMDAwMjAwNkVCMjAwMDA2MDA5MTIzMDAwNjQwMjAwNkVCMjlECis6MTA3MEEwMDAwMDAwNjEwOTEyMzgwMDY0MDIwMDZFQjIwMDAwNjIwOTNCCis6MTA3MEIwMDAxMjQwMDA2NDAyMDA2RUIyMDAwMDYzMDkxMjQ4MDA2NENFCis6MTA3MEMwMDAwMjAwNkVCMjAwMDA2NDA5MTIxMDAwNjQwMjAwNkVCMjg5Cis6MTA3MEQwMDAwMDAwNjUwOTEyMTgwMDY0MDIwMDZFQjIwMDAwNjYwOTIzCis6MTA3MEUwMDAxMjIwMDA2NDAyMDA2RUIyMDAwMDY3MDkxMjI4MDA2NERBCis6MTA3MEYwMDAwMjAwNkVCMjAwMDAwMDAwQTY1NDAxRUMwNkMwMkYzMjYwCis6MTA3MTAwMDAwMzAwOEMwNzAwMEUwMUVDMDYwMDM2OTIwMDAwMDAwMDIwCis6MTA3MTEwMDAwMDAwMDBGQzAyMDAwMTMyMDAwMDZEMDkwMDAwMDAxNEI0Cis6MTA3MTIwMDAwODgwM0Q5MjAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMkQ3Cis6MTA3MTMwMDAwMDAwNzAwOTA0MDAwMERDNTM2MDNEQjMxODAwMDAwMDNCCis6MTA3MTQwMDAwMDAwMDBGODczOEEwMzM5NkMwOTM2MDAwMDAwMDBDMEEzCis6MTA3MTUwMDAwMjAwMzY5MjAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMkIyCis6MTA3MTYwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwNzYwOTUzCis6MTA3MTcwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwOERECis6MTA3MTgwMDAwODgwMzYzMjE1MDAyRjAzMTIwMTAwMkM4MkNEMkVCMjVBCis6MTA3MTkwMDAwMDAwNzQwOTAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDYwCis6MTA3MUEwMDAwMDI4MDAwMDA3MDAwMDMyMDAwMDAwMDAwMDMwMDAwMDRFCis6MTA3MUIwMDAwN0MwMkMzMjAwMTAwMDgyMDAzODAwMDAwNzAwMzczMjcwCis6MTA3MUMwMDAwMDAwNzkwOTEyMDAwMDQ4MDJDMDgwQjIwMDAwOEMwNzVDCis6MTA3MUQwMDBDQTAxMDAwOEU4MDEwMDk0MkQwMDdCMDkxMjAwMDAyQzcwCis6MTA3MUUwMDA4MkNEMkVCMjAwMDA3RTA5MUQwMTAwODAwMjAwMDBCMDk5Cis6MTA3MUYwMDAwMDAwOEMwNzAwMDAwMEY4NjI4MTJGOTUwMDAwMDAwMDVECis6MTA3MjAwMDAwMDAwMDBGODAyODEyRjM0MkEwMDhDMDcxMjAxMDAyQ0E0Cis6MTA3MjEwMDA4MkNEMkVCMjAwMDA3RjA5MDAwMDAwODAwMjAwMDA5MEE1Cis6MTA3MjIwMDAwMDAwM0YwRjAwMDAwMDJDMDlDMDg1RDIwMDAwREMwRURBCis6MTA3MjMwMDAwMDAwMDAzMDAzMDAzOEYyMDAwMDMxMDMyMzAxMDBGOEExCis6MTA3MjQwMDAyMjgxMkZCNDNFMDAzMTAzMTIwMTAwMkM4MkNEMkVCMkQ4Cis6MTA3MjUwMDAwMDAwODQwOTAwMDAwMDgwMDIwMDAwOTAwMDAwM0YwRjQxCis6MTA3MjYwMDAwMDAwMDAyQzA5QzA4NUQyMDAwMDMxMDMwMDAwMDBGOEE2Cis6MTA3MjcwMDAyMjgxMkY5NDAwMDA4RDA5MzgwMTAwRDgwMjgwMDFCMkNDCis6MTA3MjgwMDAwMDAwOEIwOTFFMDAwMDgwMDIwMDAwQjAwMDAwOEQwOTg0Cis6MTA3MjkwMDAxQTAxMDA4MDAyMDAwMEIwMDAwMDhDMEYwMDAwMDA2ODlFCis6MTA3MkEwMDAxRjgwRjZGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDA5Cis6MTA3MkIwMDAwMDAwOTEwOTEyMDEwMDYwMDg0MDIzQjIwMDgyMDAwMDIyCis6MTA3MkMwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDhDMEYwMDAwMDA2NEM3Cis6MTA3MkQwMDAxRjQwRjZGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDE5Cis6MTA3MkUwMDAwMDAwMzYxMDEyMDAwMDI0MDgwMDIzQjIwMDAwMzYxMEZGCis6MTA3MkYwMDAxMjAwMDAyMDA4QzAyM0IyMDAwMDM2MTAxMjAwMDAxODRGCis6MTA3MzAwMDAwODgwMjNCMjAwQzA5QzA5MTgwMTAwMENBOENEM0VCMjMxCis6MTA3MzEwMDAwMDAwOTQwOTEyMDAwMDM4MDI4MDgxQjIwMDAwMzYxMDhCCis6MTA3MzIwMDAxMjAwMDAzQzAyMDA4MkIyMDAwMDM2MTAxMjAwMDAzMDUxCis6MTA3MzMwMDAwMjQwODJCMjAwMDAzNjEwMTIwMDAwMzQwMjAwODZCMjExCis6MTA3MzQwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwOEMwRjBBCis6MTA3MzUwMDAwMDAwMDA1QzFGQzBGNUZBMDAwMDMxMDMwMDAwMDA4MDRGCis6MTA3MzYwMDAwMjAwMDA5MDAwMDAwMDAwNDUwMDAwRDgwMjAwMDAzMjNBCis6MTA3MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMDE0Cis6MTA3MzgwMDAwMDEwMDAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMERBCis6MTA3MzkwMDAwNzAwODYzMjAwMDBBMDA5MTIwMDAwNTBGMkMxMzhCNDg0Cis6MTA3M0EwMDAwMDAwNjQwRDAwMzAwMUUwMTYyMDZFRkEwMDAwQTUwOTBGCis6MTA3M0IwMDAzODAxMDAyQ0Y4MDEwQkI0MDAwMEE1MDkwMjBEMDI4MDcxCis6MTA3M0MwMDBBMjVCODBCQzAwMDAwMDAwMDAwMDAwMkNDOEMxODIzNDE5Cis6MTA3M0QwMDAwMDAwQTcwOTgwMDAwMDgwNDI4MTJGQjYwMDAwOTQwREI0Cis6MTA3M0UwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMEFEMEQwMEE4MDFFMEU4Cis6MTA3M0YwMDAxNjIwNkVGQzAwMDBBQzA5MjcwMTAwRDgwMjgwMDFCMjAzCis6MTA3NDAwMDAwMDAwMDAwMEM3MDAwMDJDRThDMDgyMzQwMDAwMDAwMDJCCis6MTA3NDEwMDAwMDAwMDAwOEQ4MDEwMDM0MDAwMDAwMDBENTQwMDFFMDYxCis6MTA3NDIwMDAwNjAwODczMjA4MDA5OTBGMDAxODAxRTg3NjIwODFGOURDCis6MTA3NDMwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwQjAwOTRDCis6MTA3NDQwMDAyMzE5MDAwMDA3ODA4MUIyM0UwMEFGMDkxMjAwMDAyQzEyCis6MTA3NDUwMDA4MkNEMkVCMjAwMDBCMjA5MUQyMTAwMDAwNzAwODJCMkM5Cis6MTA3NDYwMDAwMDAwQjQwOTAwMDAwMEY4NjI4MTJGOTUwMDAwQjQwOTAzCis6MTA3NDcwMDA4MDAwMDA4MDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQzdECis6MTA3NDgwMDA4MkNEMkUzMjAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNDJDCis6MTA3NDkwMDAxMDAwQjgwOTJDMzAwMDAwMTdFMDJDQjkwMDAwQkEwOTIwCis6MTA3NEEwMDA4RTM5MDAwMDA3QzA4MkIyMDAwMEJBMDkwMDA4MDAwMDRGCis6MTA3NEIwMDAwNzAwODc5MjAwMDBCQTA5OEUzOTAwMDBCN0MxODJCNDc0Cis6MTA3NEMwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDg3MzIwMDAwQkMwOTJGCis6MTA3NEQwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGOEQ2Cis6MTA3NEUwMDA3MzBBMDNGOTAwMDBCQTA5OUYwMTAwMTQxODQwODFCQzE3Cis6MTA3NEYwMDAwMDAwQkYwOTA0MDAwMDgwMDJDMDg1QkMwMDAwMzYxMEY3Cis6MTA3NTAwMDAxMjAwMDA2ODAyQzU4NUIwMDAwMEJGMDkxMjAwMDA0OEUzCis6MTA3NTEwMDAwMkMwODBCMjAwMDAzMjAzQ0EwMTAwMDhFODgxODA5NEYyCis6MTA3NTIwMDAwMDAwQzMwOTFFMDAwMDgwMDIwMDAwQjAwMDAwQzUwOTcxCis6MTA3NTMwMDAxQTAxMDA4MDAyMDAwMEIwMDAwMDhDMEYwMDAwMDA2OEZCCis6MTA3NTQwMDAxRjgwRjZGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDY2Cis6MTA3NTUwMDAwMDAwMzYxMDlGQTgwMUUwMTYyMDZFQkMwMDAwNjQwREVDCis6MTA3NTYwMDAwMDAwMDAxNDA4MDAwMEYyMDAwMEM5MDk4MDAwMDA4MDNCCis6MTA3NTcwMDA0MjgxMkZCNjAwMDA5NDBEMDAwMDAwODAwMjAwMDBGMDUwCis6MTA3NTgwMDAwMDAwQUQwRDAwMDAwMDgwMDIwMDAwRjAwMDAwOEUwNzNBCis6MTA3NTkwMDAwNDAwMDA4MDAyNDA4MUJDMDAwMENEMDkxMjAxMDBFODE3Cis6MTA3NUEwMDAwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTg3Cis6MTA3NUIwMDAwMDAwOEUwNzEyMDEwMDY4MDJDNTg1QjAwMDAwMzYxMDc5Cis6MTA3NUMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDc4MDAwMDA4MDE2Cis6MTA3NUQwMDBGMkMxODVCNjAwMDBEMzA5MUM0MTAyODAwNkMwODVCMjA1Cis6MTA3NUUwMDAwMDAwMDAwMDAwMDAwMDY4MDJDNTg1MzAwMDAwMDAwMEI3Cis6MTA3NUYwMDAwMDAwMDA3MDFGMDBGNzNBMDAwMDhDMDcwMDAwMDBGODQwCis6MTA3NjAwMDAyMjgxMkY5NDAwMDA4QzA3ODAwMDAwODBGMkMxODVCNjkzCis6MTA3NjEwMDAwMDAwM0YwRjAwMDAwMDJDMDlDMDg1RDIwMDAwMzEwMzlDCis6MTA3NjIwMDBEMjAxMDA5NDFFNDBFOTlBMDAwMEM0MEYwMDIwMDAxODA3Cis6MTA3NjMwMDAwODAwNkVGMjAwMDBEQjA5MUYwMDAwODAwMjAwMDBCMEFECis6MTA3NjQwMDAwMDAwRDgwOTlFNDAwMjc4MDk0MDY4QjIwMDAwMzYxMDU4Cis6MTA3NjUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERGMDk4MDAxMDA4MDJGCis6MTA3NjYwMDA4MjgxMkZCNjAwMDA4RTA3MkEzMTAxRTAwNjAwMDBCMkE5Cis6MTA3NjcwMDAxODAwMDAwMENBMDAwMEY4NzMwQTAzMzk4RTA3MzYwMEFDCis6MTA3NjgwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDhFMDc4MDAxMDA4MERBCis6MTA3NjkwMDBBMjgwMkZCNjE4MDAwMDAwQ0EwMDAwRjg3MzBBMDMzOTUwCis6MTA3NkEwMDA4RTA3MzYwMDAwMDAwMEMwMDIwMDM2OTIwRDAwRTUwOThBCis6MTA3NkIwMDAwMDAwMDA1ODA4MDAzNjkyMDAwMEU1MDkwMDAwMDA1ODVDCis6MTA3NkMwMDAwODAwMDA5MjFCMDAwMDAwMDAwMDAwNTgwODAwMzYzMjNECis6MTA3NkQwMDAwMDAwQzQwRjAwMjAwMDE4MDgwMDZFRjIwMDAwMDAwMDM3Cis6MTA3NkUwMDAwMDMwMDAyODA4MDA2RTMyMDAwMDAwMDA1NDU0MDFGQ0Y1Cis6MTA3NkYwMDAwMkMwNkUzMjAwMDAzMDBBMzgwMDAwQTQwODgwODJCMjU2Cis6MTA3NzAwMDAwMDAwMzAwQTA0MjgwMTA0MDgwMDZFQjIwMDAwMzYxMEEwCis6MTA3NzEwMDA5RjUwMDEwNEE4NUI4MEJDMDAwMDAwMDAwMDUwMDFFOEZECis6MTA3NzIwMDAwNjAwMDAzMjAwMDAxMTBBMDgwMTAwNzgxOUEwODJCQzhFCis6MTA3NzMwMDAwMDAwMDAwMDAwMjgwMUUwQTY2MDgwM0MwMDAwRjAwOTg1Cis6MTA3NzQwMDAyQTAxMDAxNDA4MDAwMEIyMDAwMDAwMDBDQTAwMDAxNDYyCis6MTA3NzUwMDAxODQwODEzQTAwMDBBMzBEMDBBODAxMjBBOTIwNkVGQTZDCis6MTA3NzYwMDAwMDAwMDAwMDAwMjAwMUUwQTYyMDZFM0MwMDAwMDAwMEE4Cis6MTA3NzcwMDAwMDMwMDBFMDA2MDAwMDMyMDAwMDAwMDAwMEE4MDFFMDM4Cis6MTA3NzgwMDAwNjAwOTIzMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMkEyCis6MTA3NzkwMDAwMEMwMDMwQTE4MDEwMDBDQThDRDNFQjIwMDAwRkEwOThGCis6MTA3N0EwMDAwNDAwMDA4MDAyNDA4MUJDMDAwMDAwMDAwMDAwMDAxNEMyCis6MTA3N0IwMDAwODAwMDAzMjE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOUM2Cis6MTA3N0MwMDBGNDA5MzYwMDAwMDAwMEMwMDIwMDM2OTIyMDgwMDAwMDVDCis6MTA3N0QwMDAwMDAwMDAyODA5ODAzNjMyMDAwMEYxMEUwMDAwMDBEOEI5Cis6MTA3N0UwMDAwMjAwMDBEMjAwMDBGRTA5MDQwMDAwODAwMjgwOTJCQzZBCis6MTA3N0YwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENBCis6MTA3ODAwMDAwMDAwMDBEODAyODAwMTMyMDBDMDAzMEExODAxMDAwQ0Y5Cis6MTA3ODEwMDBBOENEM0VCMjE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOUJBCis6MTA3ODIwMDBGRTA5MDAwMDAwMDAwMEMwMDIwMDM2MzIwMDAwMzYwMEYxCis6MTA3ODMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBERTAwMDAwODUwCis6MTA3ODQwMDBFODAxMDAzNDAwMDAwMDAwREYwMDAxMzgwOEMwNkUzMjlCCis6MTA3ODUwMDAwMDAwMDAwMDAwMTAwMDAwMDcwMDAwMzIwMDAwMDAwMERGCis6MTA3ODYwMDAwMDE4MDAwMDA3ODA4MjMyMDAwMDAwMDAwMDMwMDAwMDk1Cis6MTA3ODcwMDAwN0MwMkMzMjAwMjAwMDgwMDAzODAwMDAwNzAwMzczMjlCCis6MTA3ODgwMDAwMDAwMDAwMENBM0QwMDBDMDc4MDgzMzIwMDAwMDAwMEE5Cis6MTA3ODkwMDAwMDAwMDAxNDE4NDA4MTNBMDAwMDBGMEEwNDAyMDFFQ0I1Cis6MTA3OEEwMDAxNkMwNkVCQzAwMDAwMDAwQzAwMTAwMTQxODQwODEzQUYwCis6MTA3OEIwMDAwMDAwMDAwMDAwMDAwMEY4OTI4MDJGMzQwMEMwMEUwQTgzCis6MTA3OEMwMDAxMjAwMDA0MEEyOEQzOUIyMDAwMDY5MEExMjAxMDA0ODdFCis6MTA3OEQwMDAwMkMwODBCMjAwMDAwRjBBMDAwMDAwODAwMjAwMDA5MDg5Cis6MTA3OEUwMDAwMDAwMDAwMDAwMDAwMDI4MDg4MDk3MzIwMDAwMDAwMDFGCis6MTA3OEYwMDAwMDAwMDBBNDA4ODA4MjMyMDAwMDAwMDAwMDEwMDA2QzJDCis6MTA3OTAwMDAxODIwNkUzQTAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjhCCis6MTA3OTEwMDAwMDAwQTMwRDAwQTgwMTIwMTkyMDZFRkEwMDAwMDAwMDRECis6MTA3OTIwMDAwMDIwMDFFMDE2MjA2RTNDMDAwMDAwMDAwMEE4MDFFMEVECis6MTA3OTMwMDAwNjAwOTIzMjAwMDAxQjBBMDAzODAxRTAwNjQwODA5MkU3Cis6MTA3OTQwMDAwMDAwMDAwMDAwNjAwMDZDMTgyMDZFM0EwMDAwMDAwMDhCCis6MTA3OTUwMDAwMDY4MDA0QzA4MDA2RTMyMDAwMDFEMEE5RjAxMDAwNDAwCis6MTA3OTYwMDA2ODYwODBCQzAwMDAyNDBBMDAwMDAwMTgxODIwMDA5Q0Y5Cis6MTA3OTcwMDAwMDAwMUYwQTEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwCis6MTA3OTgwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBDQTcwMDAxODM0Cis6MTA3OTkwMDAwODAwNkUzMjAwMDAxOTBBMDIwMTAwODA2MjYwODBCQzlCCis6MTA3OUEwMDAwMDAwMDAwMENBMDEwMEY4MDI4MDJGMzUwMEEwMUIwQTY5Cis6MTA3OUIwMDAxMjAxMDA0MEEyOEQzOUIyMDAwMDIyMEEwMDAwMDA4MEFFCis6MTA3OUMwMDAwMjAwMDA5MDAwMDAyODBBODAwMDAwODBBMjgwMkZCNkVDCis6MTA3OUQwMDAwMDAwMkIwQTA0MDAwMDgwQTJBMDgxQkMwMDAwMDAwMDZGCis6MTA3OUUwMDBDQTAxMDBGODAyODAyRjM1MDBBMDI3MEExMjAwMDA0MENCCis6MTA3OUYwMDBBMjhEMzlCMjAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNUVGCis6MTA3QTAwMDAwMDAwMkIwQTEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDYzCis6MTA3QTEwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDI4MDFFMEVDCis6MTA3QTIwMDAwNjAwMDAzMjAwMDAwMDAwMDAzMDAwRTAwNjgwODIzMkQ0Cis6MTA3QTMwMDAwMDAwMDAwMDAwMjAwMEUwMDY4MDgxMzIwMDAwMzYxMEM3Cis6MTA3QTQwMDAwNDEwMDBFMDA2QzA4NkIyMDAwMDMyMEEwMDE4MDBFMDEwCis6MTA3QTUwMDAwNkMwODQ5MjAwMDAzNjEwMDQxMDAwNkMwODAwNkVCMjVDCis6MTA3QTYwMDAwMDAwMDAwMDAwMTgwMDRDMDgwMDZFMzIwMDAwRTAwRDFECis6MTA3QTcwMDA1MTAwMDBEODAyMDAwMEYyMDAwMDM1MEEwMDUwMDEzQzFECis6MTA3QTgwMDBBODVCODA5QzAwMDA4RTA3MDAzMDAxRTAwNjAwMDA5Mjk5Cis6MTA3QTkwMDAwMDAwM0EwQTNFNTEwMTAwQTgxQjgwQkEwMDAwMDAwMDE1Cis6MTA3QUEwMDBERTAwMDBGOEYyODEyRjM0MDAwMDAwMDAwMDU4MDFFQ0U1Cis6MTA3QUIwMDAwNkMwRUUzMjAwMDAzQTBBODAwMTAwODAzMjgwODdCNkFDCis6MTA3QUMwMDAwMDAwMDAwMDAwMDAwMEY4RTI4MDJGMzQwMDAwNzMwRTc4Cis6MTA3QUQwMDA2MDMwMDFFMDA2MDAwMEYyMDAwMDhFMDcwMDAwMDA4MDI4Cis6MTA3QUUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwMTQwODAwMDAzMkI2Cis6MTA3QUYwMDAwMDAwNDMwQTA0MDIwMUVDMTZDMDZFQkMwMDAwMDAwMDQ2Cis6MTA3QjAwMDBDOTAxMDAxNDE4NDA4MTNBMDAwMDAwMDBDMDAxMDEzODhBCis6MTA3QjEwMDAwOEMwNkUzMjAwMDAwMDAwREYwMDAwQTRBODYwOEEzQ0FDCis6MTA3QjIwMDAwMEMwNDYwQTEyMDEwMDQwQTI4RDM5QjIwMDAwNDEwQThECis6MTA3QjMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDMwMDBFMDIzCis6MTA3QjQwMDAwNjAwMDAzMjAwMDAwMDAwREYwMDAwQTRBODYwOEEzQ0FDCis6MTA3QjUwMDAwMDAwMDAwMDAwMDAwMTM4MDhDMDZFMzIwMDAwMDAwMDg0Cis6MTA3QjYwMDBERUE4MDEyMDk5MjI2RTNBMDAwMDQ5MEEyRjIwMDFFMDg4Cis6MTA3QjcwMDA5NjIyNkVCQzAwMDBBMzBEMDAwMDAwODAwMjAwMDBGMDAxCis6MTA3QjgwMDAwMDAwNEQwQTFGNTAwMUU4MDYwMDAwQjIwMDAwNEMwQTM4Cis6MTA3QjkwMDAwNDAwMDA4MDAyQzA4M0JDMDAwMDREMEEwMDUwMDFFOEQwCis6MTA3QkEwMDBGNjYwODA5QzA4MDAwMDAwMDA0MDAyNjgxMjlBRkUzOENGCis6MTA3QkIwMDAwMDAwNTEwQTJBQTkwMUUwMDYwMDkyQjIxODAwMzYwMDFFCis6MTA3QkMwMDBDQTAwMDBGODczMEEwM0Y5MUQwMDUxMEEwNDAwMDA4MDdFCis6MTA3QkQwMDAwMkE0MTdCODAwMDA0RTBBMDAwMDAwMTQxODQwODE5QzRGCis6MTA3QkUwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwNTQwQUYwCis6MTA3QkYwMDA4MDAxMDA4MDMyODAyRkI2M0UwMDUzMEExMjAwMDAyQzE0Cis6MTA3QzAwMDA4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMkI4Cis6MTA3QzEwMDAwMEMwNjUwQTE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDBCCis6MTA3QzIwMDBDMzAwMDAyODA5ODAzNjMyMDAwMEYxMEUwMDAwMDBEOEExCis6MTA3QzMwMDAwMjAwMDBEMjAwMDA1QTBBMDQwMDAwODAwMjgwOTJCQ0I4Cis6MTA3QzQwMDAwMDAwMDAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwNUYwQUE0Cis6MTA3QzUwMDAwNDAwMDA4MDAyNDA4MUJDMTgwMDM2MDAwMDAwMDBGOERCCis6MTA3QzYwMDA3MzBBMDNGOTAwMDA2MzBBMDQwMDAwMTQxODQwODFCQzgxCis6MTA3QzcwMDAwMDAwNUIwQTEyMDAwMDAwMDlDMDIxQjIwMDAwNUMwQThCCis6MTA3QzgwMDAwMDAwMDA4MDAyMDAwMDkwMTgwMDM2MDAwMDAwMDBGODlDCis6MTA3QzkwMDA3MzhBMDNGOTAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMkE0Cis6MTA3Q0EwMDAwMDAwNjMwQTgwMDEwMDgwMzI4MDJGQjYzRTAwNjIwQTI1Cis6MTA3Q0IwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDBDMzAwMDBEOEJDCis6MTA3Q0MwMDAwMjgwMDEzMjAwQzA1RjBBMTgwMDAwMENBOENEM0VCMjRECis6MTA3Q0QwMDAwMDIwMDA4MDAwMDAwMDI4MDkwMDM3MzIwMDAwQjEwRkFBCis6MTA3Q0UwMDAwMDAwMDAwOEU4MDEwMEY0MDAwMDY3MEExMjAwMDA0OEU0Cis6MTA3Q0YwMDAwMkMwODBCMjAwMDAwMDAwMDAwMDAwMTQxODQwODEzQTY5Cis6MTA3RDAwMDAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjkwMDAwNjkwQTc3Cis6MTA3RDEwMDAwNDAxMDAxNDE4NDA4MUJDMDAwMDk5MEYwMDAwMDA4MDhECis6MTA3RDIwMDAwMjAwMDBGMDAwMDA2RjBBODAwMTAwODA5MjgwMkZCNkYwCis6MTA3RDMwMDAyQjAwNzIwQTEyMDEwMDJDODJDRDJFQjIwMDAwNkQwQUI3Cis6MTA3RDQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDcyMEExRDAwMDA4MDA4Cis6MTA3RDUwMDAwMjAwMDBCMDAwMDA3MjBBODAwMDAwODAwMjgxMkZCNjhECis6MTA3RDYwMDAyQTAwMDAwMEQwMDEwMDJDODJDRDJFMzIwMDAwOEMwN0FBCis6MTA3RDcwMDAwNDAwMDA4MDAyODA4NUJDMDAwMEFBMEYwMDAwMDA4MDgzCis6MTA3RDgwMDAwMjAwMDBGMDAwMDA3RDA1MDAwMDAwMUMwODgwODU5MkM0Cis6MTA3RDkwMDAwMDAwMDAwMENFMDEwMEQ4MDI4MDAxMzIwMEMwN0EwQTQzCis6MTA3REEwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwOEExCis6MTA3REIwMDAwODgwMzYzMjAwMDA4QzBGMDAwMDAwNUMxRkMwRjVGQTBFCis6MTA3REMwMDAwMDAwMzEwMzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDZECis6MTA3REQwMDA2MDAwMDBEODAyMDAwMDMyMDAwMDdGMEEzRjAwMDAzQzMzCis6MTA3REUwMDAwODQwODBCMjAwMDA3RjBBODAwMTAwODBFMjgxMkZCNjQ3Cis6MTA3REYwMDAwMDAwMDAwMERFMDAwMEY4RjI4MTJGMzQwMDAwMDAwMEQ3Cis6MTA3RTAwMDAwMDU4MDFFQzA2QzBFRTMyMDAwMDAwMDA0RDAwMDAwMEZBCis6MTA3RTEwMDA2N0UwODMzRTAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjk5Cis6MTA3RTIwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMEMzCis6MTA3RTMwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMEJFMEEwNDAwMDAyOEI5Cis6MTA3RTQwMDBEOEEwODJCQzAwMDAwMDAwMDAwMDAwMThEOEEwODEzQzJGCis6MTA3RTUwMDAwMDAwOUMwQTA0MDAwMDNDRDhFMDgzQkMwMDAwODkwQUIyCis6MTA3RTYwMDAwNDAwMDA4MDcyODAyREJDMDAwMDg3MEExMjAwMDA1MEMwCis6MTA3RTcwMDAwMkMwMzhCMjAwMDA5QTBBNTEwMDAwRDgxMjgwMkQ5QTMwCis6MTA3RTgwMDAwMDAwODkwQTEyMDAwMDUwRjJDMTM4QjQwMDAwOTUwQUJGCis6MTA3RTkwMDAyODAwMDBEODAyMDAwMEIyMDAwMDkyMEE4MDAxMDA4MDkxCis6MTA3RUEwMDBGMkMxODVCNjAwMDA4RjBBMUY0MDAyODRFNjAxMDBCNENCCis6MTA3RUIwMDAwMDAwOTIwQTFEMDEwMEY4MjI4MTJGQjQwMDAwOTIwQUVFCis6MTA3RUMwMDAwMDAwMDBGODYyODEyRjk1MDAwMDkxMEExRDAxMDA4MERBCis6MTA3RUQwMDAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjg2MjgxMkYzNUIxCis6MTA3RUUwMDAwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzIwMDAwOTQwQTU2Cis6MTA3RUYwMDAzNDMwMDBFMDE2MjA2RUJDMDAwMDk0MEQwMDAwMDA4MEJECis6MTA3RjAwMDAwMjAwMDBGMDAwMDBBRTBEREE1QjAxRUMwNjQwRURGMjdECis6MTA3RjEwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwOTkwQUZGCis6MTA3RjIwMDAwNDAwMDA4MDcyODAyREJDMDAwMDk1MEE2NzAwMDBGOEY0Cis6MTA3RjMwMDBBMjgwMkZCNTAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMjY2Cis6MTA3RjQwMDAwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwRTgwRERGCis6MTA3RjUwMDAwMDAwMDAwMEQ4MjA4MEZBMDAwMDgwMEE0RDAwMDAwMEQ4Cis6MTA3RjYwMDA2N0UwODM5RTAwMDA5QzBBMTIwMDAwNTBGMkMxMzhCNDAyCis6MTA3RjcwMDAwMDAwQTgwQTI4MDAwMDgwMDg0MDAwQjIwMDAwQTUwQUZFCis6MTA3RjgwMDA4MDAxMDA4MEYyQzE4NUI2MDAwMEEyMEExRjQwMDI4NDcxCis6MTA3RjkwMDBFNjAxMDBCNDAwMDBBNTBBMUQwMTAwRjgyMjgxMkZCNEZCCis6MTA3RkEwMDAwMDAwQTUwQTAwMDAwMEY4NjI4MTJGOTUwMDAwQTQwQUQ1Cis6MTA3RkIwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODc5Cis6MTA3RkMwMDA2MjgxMkYzNTAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMkNDCis6MTA3RkQwMDAwMDAwQTcwQTM0MzAwMEUwMTYyMDZFQkMwMDAwOTQwREFCCis6MTA3RkUwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMEFFMEREQTVCMDFFQzQyCis6MTA3RkYwMDAwNjQwRURGMjAwMDBCRjBBODAwMDAwODBFMjgwMkZCNjRDCis6MTA4MDAwMDAwMDAwQUMwQTA0MjEwMEUwMDY4MDgxQjIwMDAwRTgwRDA3Cis6MTA4MDEwMDAwMDAwMDAzNDA4MDAwMEYyMDAwMDAwMDAwMDIwMDBFMDMyCis6MTA4MDIwMDAwNjgwODEzMjAwMDBCMTBBMkExMTAwRTBENkUwODZCQTRCCis6MTA4MDMwMDAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjkxRDAwQjEwQURGCis6MTA4MDQwMDAwNDAxMDA4MDAyQTQxN0I4MDAwMEFEMEE5RjAxMDA4MDVGCis6MTA4MDUwMDAxODAwODhCQzAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDZDCis6MTA4MDYwMDAwMDAwOTkwRjAwMDAwMDgwMDIwMDAwRjAwMDAwREMwRTBDCis6MTA4MDcwMDAwMDAwMDAzMDAzMDAzOEYyMDgwMEI1MEEyMzE5MDFFOEI3Cis6MTA4MDgwMDA3NjIwODFCOTNFMDBCNDBBMTIwMDAwMkM4MkNEMkVCMkI3Cis6MTA4MDkwMDAwMDAwQjgwQTFEMTgwMEUwMDZDMDg0QjIwMDAwQjgwQTRCCis6MTA4MEEwMDA4MDAwMDA4MDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQzQxCis6MTA4MEIwMDA4MkNEMkUzMjAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNEYwCis6MTA4MEMwMDAwMDAwQkMwQTA0MDAwMDgwMDIwMDg4QkMwMDAwQkMwQTVBCis6MTA4MEQwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGOEFCCis6MTA4MEUwMDA3MzBBMDNGOTAwMDAzMjAzMTIwMTAwNjgwMkM1ODVCMDZCCis6MTA4MEYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwQkUwQTYwCis6MTA4MTAwMDAxMjAwMDA1MEYyQzEzOEI0MDAwMDAwMDBDMDAxMDEzODc0Cis6MTA4MTEwMDAwOEMwNkUzMjAwMDBDMzBBMDQwMjAxRUMxNkMwNkVCQzM3Cis6MTA4MTIwMDAwMEMwQzEwQTEyMDAwMDQwQTI4RDM5QjIwMDAwQzQwQThBCis6MTA4MTMwMDBDOTAxMDAxNDA4MDAwMDkyMDAwMDAwMDA0NTMwMDBFMDcyCis6MTA4MTQwMDAwNjAwMDAzMjAwMDBDRjBBMjgwMDAwMDhFODAxMDBCNDUxCis6MTA4MTUwMDAwMDAwQ0MwQTgwMDEwMDgwRjJDMTg1QjYwMDAwQzkwQTg3Cis6MTA4MTYwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMENDMEExRDAxMDBGOEEzCis6MTA4MTcwMDAyMjgxMkZCNDAwMDBDQzBBMDAwMDAwRjg2MjgxMkY5NTA0Cis6MTA4MTgwMDAwMDAwQ0IwQTFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMENBCis6MTA4MTkwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MERFCis6MTA4MUEwMDAwMjQwNjgzMjAwMDBDRTBBODAwMDAwODA0MjgxMkZCNjczCis6MTA4MUIwMDAwMDAwOTQwRDAwMDAwMDgwMDIwMDAwRjAwMDAwQUUwREYxCis6MTA4MUMwMDBEQTVCMDFFQzA2NDBFREYyMDAyMDAwODBERjAwMDAyOEMxCis6MTA4MUQwMDAwOTAwMzczMjAwMDBCMTBGREUwMDAwRDgwMjgwMDFGMjQyCis6MTA4MUUwMDAwODAwOTkwRjAwMTgwMUU4NzYyMDgxRjkwMDAwREMwRUU0Cis6MTA4MUYwMDAwMDAwMDAzMDAzMDAzOEYyMDAwMEQ1MEE4MDAxMDA4MDQyCis6MTA4MjAwMDAzMjgwMkZCNjNFMDBENDBBMTIwMDAwMkM4MkNEMkVCMjRFCis6MTA4MjEwMDAwMDAwRDkwQTI5MDgwMUU0MDZDMDJEQjIwMDAwREUwQUQ4Cis6MTA4MjIwMDAxRDAwMDA4MDAyMDAwMEIwMDAwMERFMEE4MDAwMDA4MDE3Cis6MTA4MjMwMDAwMjgxMkZCNjJBMDBERTBBRDAwMTAwMkM4MkNEMkU5MkI4Cis6MTA4MjQwMDAwMDAwREIwQTEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDRDCis6MTA4MjUwMDAwMDAwMDBGODczMEEwM0Y5MUQwMEREMEEwNDAxMDA4MDI0Cis6MTA4MjYwMDAwMkE0MTdCODAwMDBEQTBBMDAwMDAwMTQxODQwODE5QzJDCis6MTA4MjcwMDAyQjAwREQwQTEyMDAwMDJDODJDRDJFQjIwMDAwRkIwRDc3Cis6MTA4MjgwMDAwMDAwMDAyQ0Y5MDEwMEY0MDAwMEUxMEEwNDAxMDA4MDY0Cis6MTA4MjkwMDAwMjQwODFCQzE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUEwCis6MTA4MkEwMDAwMDAwRTEwQTEyMDAwMDQ4MDJDMDgwQjIwMDAwMzIwMzYwCis6MTA4MkIwMDAxMjAxMDA2ODAyQzU4NUIwMDAwMEUyMEEwMDAwMDA4MERCCis6MTA4MkMwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjhGCis6MTA4MkQwMDAwMEMwRTkwQTE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMEMxCis6MTA4MkUwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDhDMEYwMDAwMDA1QzlGCis6MTA4MkYwMDAxRkMwRjVGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDZBCis6MTA4MzAwMDAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMDI2Cis6MTA4MzEwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDUxCis6MTA4MzIwMDAwNzgwODEzMjAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjUyCis6MTA4MzMwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMEFFCis6MTA4MzQwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMEVGMEExMjAwMDA1MDNECis6MTA4MzUwMDBGMkMxMzhCNDAwMDBGNTBBODAwMDAwODA4MjgwMkZCNjk4Cis6MTA4MzYwMDAwMDAwMDAwMDAwMDAwMDY4QTg2MDgwM0MwMDAwMDAwMEUxCis6MTA4MzcwMDAwMDAwMDAzQzA4NDA4MDMyMDAwMEFEMEQwMDAwMDAwNDA5Cis6MTA4MzgwMDAwODgwODJGMjAwMDBGNjBBMTIwMTAwMDAwOUMwMjFCMjQyCis6MTA4MzkwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkxRDAwRjgwQUZGCis6MTA4M0EwMDAwNDAwMDA4MDAyQTQxN0I4MDAwMEY1MEEwMDAwMDBGOERECis6MTA4M0IwMDBBMjgwMkY5NTAwMDAwMDAwMDAwMDAwMDA2ODIwODAzQTk1Cis6MTA4M0MwMDAwMDAwRkMwQTA0MDAwMDI4NjhBMDgyQkMwMDAwRTgwRDQwCis6MTA4M0QwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMEVCMEEwMDAwMDBEODVFCis6MTA4M0UwMDAwMjAwMDA5MjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjZDCis6MTA4M0YwMDAwMDIwMDA4MDAwMDAwMDI4MDkwMDM3MzIwMDAwQUQwRjg3Cis6MTA4NDAwMDAwMDAwMDAwOEU4MDEwMEY0MTgwMDM2MDBDQTAwMDBGODc3Cis6MTA4NDEwMDA3MzBBMDNGOTAwMDAwNjBCMDQwMjAxRUMxNkMwNkVCQ0RGCis6MTA4NDIwMDAwMDAwMDAwMEMwMDEwMEY4OTI4MDJGMzQwMEMwMDQwQjRGCis6MTA4NDMwMDAxMjAxMDA0MEEyOEQzOUIyMDAwMDAyMEIwMDAwMDA4MDQyCis6MTA4NDQwMDAwMjAwMDA5MDJCMDAwNjBCMTIwMTAwMkM4MkNEMkVCMkYwCis6MTA4NDUwMDAwMDAwMDQwQjAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEZCCis6MTA4NDYwMDAwMDAwMDBEODAyODAwMTMyMDAwMDA5MEIxMjAxMDA2MEY4Cis6MTA4NDcwMDAwODQwMjNCMjAwODIxMjBCMDAwMDAwMDhBODhEODA5MkYxCis6MTA4NDgwMDAwMDAwMzYxMDEyMDAwMDI0MDgwMDIzQjIwMDAwMzYxMDRECis6MTA4NDkwMDAxMjAwMDAyMDA4QzAyM0IyMDAwMDM2MTAxMjAwMDAxODlECis6MTA4NEEwMDAwODgwMjNCMjAwQzAyMTBCMTgwMTAwMENBOENEM0VCMkY5Cis6MTA4NEIwMDAwMDAwMEMwQjEyMDAwMDM4MDI4MDgxQjIwMDAwMzYxMDYwCis6MTA4NEMwMDAxMjAwMDAzQzAyMDA4MkIyMDAwMDM2MTAxMjAwMDAzMEEwCis6MTA4NEQwMDAwMjQwODJCMjAwMDAzNjEwMTIwMDAwMzQwMjAwODZCMjYwCis6MTA4NEUwMDAyMDgwMDAwMDAwMDAwMDA4QTg4RDgwMzIwMDAwMTkwQkQ5Cis6MTA4NEYwMDA4MDAxMDA4MEYyQzE4NUI2MDAwMDE2MEIxRjQwMDI4NDg3Cis6MTA4NTAwMDBFNjAxMDBCNDAwMDAxOTBCMUQwMTAwRjgyMjgxMkZCNDEwCis6MTA4NTEwMDAwMDAwMTkwQjAwMDAwMEY4NjI4MTJGOTUwMDAwMTgwQjc1Cis6MTA4NTIwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODAzCis6MTA4NTMwMDA2MjgxMkYzNTAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjU2Cis6MTA4NTQwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTg1QjAwMDAwMUMwQjQ4Cis6MTA4NTUwMDAzNDAwMDA1QzFGQzBGNUJBMDAwMDk0MEQwMDAwMDA4MERDCis6MTA4NTYwMDAwMjAwMDBGMDAwMDAxRTBCODAwMDAwODA5MjgwMkZCNkY5Cis6MTA4NTcwMDAwMDAwOEUwNzAwMzAwMEUwMDYwMDAwOTIwMDAwOEUwNzI5Cis6MTA4NTgwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDAwMDAwMDAwMDBGODRCCis6MTA4NTkwMDA3MzBBMDMzOThFMDczNjAwMDAwMDAwQzAwMjAwMzY5MkNECis6MTA4NUEwMDAwMDAwMDAwMDQ1MDAwMEQ4MDI0MDAwMzIwMDAwMDAwMDNBCis6MTA4NUIwMDA0MTAwMDAwMDA3ODA4NjMyMDAwMDAwMDAwMDA4MDAwMDMzCis6MTA4NUMwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDAwNzQwODIzMkU3Cis6MTA4NUQwMDAwMDAwMDAwMDAwMTgwMDAwMDcwMDg2MzIwMDAwMjYwQjkzCis6MTA4NUUwMDAxMjAwMDA1MEYyQzEzOEI0MDAwMDAwMDAwMDAwMDA3ODEyCis6MTA4NUYwMDAzODgwODczNTAwMDAwMDAwMDBBMDAxRTAxNjIwNkUzQUE4Cis6MTA4NjAwMDAwMDAwMDAwMDAwMDAwMDc4MDlDNTg1MzAwMDAwMDAwMDZGCis6MTA4NjEwMDAwMEE4MDFFMDE2MjA2RTNDMDgwMDAwMDBEMjAxMDA3ODlFCis6MTA4NjIwMDBFOUU1ODMzOTE4MDAzNjEwMUY0MTAyODRFNkExOTdCOUE1Cis6MTA4NjMwMDAwMDAwMzAwQjM2NTEwMUU4MTZFMDgzQkMwMDAwMzAwQjFGCis6MTA4NjQwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGOEUyCis6MTA4NjUwMDA2MjgxMkYzNTAwMDAzMjBCMzgyMTAxRTAwNjQwODBCMkU0Cis6MTA4NjYwMDAwMDAwMDAwMDAwMzAwMUUwMDY0MDgwMzIwMDAwMDAwMDAxCis6MTA4NjcwMDAwMDAwMDBEODAyODAwMTMyMDAwMDM1MEIzNDE4MDAwMEUxCis6MTA4NjgwMDAwNzgwODFCMjAwMDA5NDBEMDAwMDAwODAwMjAwMDBGMDFECis6MTA4NjkwMDAxMDAwOTkwRjAwMzAwMDAwMTdFMDJDRjkwMDEwMDA4MDQ2Cis6MTA4NkEwMDAwMDM4MDAwMDA3MDAzNzMyMDAwMERDMEUwMDAwMDAzMDA4Cis6MTA4NkIwMDAwMzAwMzhGMjAwMDAzQTBCODAwMTAwODAzMjgwMkZCNkIwCis6MTA4NkMwMDAzRTAwMzkwQjEyMDAwMDJDODJDRDJFQjIwMDAwM0YwQjcxCis6MTA4NkQwMDAyOTIxMDAwMDA3MDA4MkIyMDAwMDNEMEIxMjAxMDAwMEJBCis6MTA4NkUwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTJGCis6MTA4NkYwMDAxRDAwNDIwQjA0MDEwMDgwMDJBNDE3QjgwMDAwM0IwQkQwCis6MTA4NzAwMDAwMDAwMDAxNDA4MDAwMDkyMDAwMDQyMEIxRDMwMDBFMDQxCis6MTA4NzEwMDAwNjAwMDBCMjAwMDA0MjBCODAwMDAwODAwMjgxMkZCNkVDCis6MTA4NzIwMDAyQTAwMDAwMEQwMDEwMDJDODJDRDJFMzIwMDAwQUEwRkJBCis6MTA4NzMwMDAwMDAwMDAyQ0Y5MDEwMEY0MDAwMEZBMEQwMDAwMDBGODIwCis6MTA4NzQwMDBBMjgwMkZGNDAwMDA0NzBCMDQwMDAwODAwMjQwODFCQzhGCis6MTA4NzUwMDAwMDAwNDcwQjEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMEU5Cis6MTA4NzYwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDMyMDMxMjAxMDA0ODA4Cis6MTA4NzcwMDAwMkMwODBCMjAwMDA0NzBCMDAwMDAwODAwMjAwMDA5MEExCis6MTA4NzgwMDAwMDAwNTAwQjgwMDEwMDgwRjJDMTg1QjYwMDAwNEQwQjQ3Cis6MTA4NzkwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMDUwMEIxRDAxMDBGOEU4Cis6MTA4N0EwMDAyMjgxMkZCNDAwMDA1MDBCMDAwMDAwRjg2MjgxMkY5NTQ5Cis6MTA4N0IwMDAwMDAwNEYwQjFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDBGCis6MTA4N0MwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MEE4Cis6MTA4N0QwMDAwMjQwNjgzMjAwMDA1MjBCMDQwMDAwODAwMjQwODZCQzU4Cis6MTA4N0UwMDAwMDAwRDcwRjAwOTAwMTA4MDkwMDZFRjIwMDAwMDcxMDhBCis6MTA4N0YwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDU5MEIzMzAxMDBEODk3Cis6MTA4ODAwMDAwMjgwMDFCMjAwMDA1OTBCODAwMTAwODBCMjAxNzJCNkYzCis6MTA4ODEwMDAwMDAwNTkwQjlGRjAwMTgwODJEQjg3QkMwMDAwNTkwQkUwCis6MTA4ODIwMDA5RkY4MDE4MDIyMjE2RUJDMDAwMDAwMDAwMEU4MDFFMEZBCis6MTA4ODMwMDAwNjAwRUUzMjAwMDAwMDAwMDBGMDAxRTAwNkMwODczMkMyCis6MTA4ODQwMDAwODAwMDAwMDAwMTgwMUU4NzYyMDgxMzkwMDAwNUYwQjY1Cis6MTA4ODUwMDA4MDAxMDA4MEQyODAyRkI2MDAwMDVGMEIwNEIwMDA4MDQyCis6MTA4ODYwMDAwMjAwNkVCQzAwMDAwMDAwQ0QwMDAwRjg3MjgxMkYzNEMxCis6MTA4ODcwMDAzRDAwNUYwQjEyMDEwMDJDODJDRDJFQjIwMDAwNUQwQjdCCis6MTA4ODgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDY5MEIyNzA5MDFFNDRECis6MTA4ODkwMDAwNkMwMkRCMjAwQzA2MzBCMTgwMTAwMENBOENEM0VCMjdCCis6MTA4OEEwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTg1QjAyMDgwOEUwN0Q3Cis6MTA4OEIwMDAwMDAwMDAwODA4ODAzNjkyMDAwMDAwMDAwMDQwMDFFMDNGCis6MTA4OEMwMDAwNjQwODgzMjAwMDAwMDAwRDUwODAwMDAwNzQwODgzMkNBCis6MTA4OEQwMDAwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzIwMDQwMDA4MDgzCis6MTA4OEUwMDBDQTM5MDAwMDA3MDAzNzMyMDAwMDY3MEIxMjAwMDA0ODQ5Cis6MTA4OEYwMDAwMkMwODBCMjAwNjAwMDAwMDAwMDAwMDgwODgwMzYzMjJDCis6MTA4OTAwMDAwMDAwNkMwQjFEMDAwMDgwMDIwMDAwQjAwMDAwNkMwQjJBCis6MTA4OTEwMDA4MDAwMDA4MDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQ0M4Cis6MTA4OTIwMDA4MkNEMkUzMjAwMDBGQjBEMDAwMDAwMkNGOTAxMDBGNDc2Cis6MTA4OTMwMDAwMDAwMzIwMzEyMDEwMDY4MDJDNTg1QjAwMDAwMzYxMDQ1Cis6MTA4OTQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA1NDU0MDFGQzcwCis6MTA4OTUwMDAwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjI4Cis6MTA4OTYwMDAwMEMwNzUwQjE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDlECis6MTA4OTcwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDMxMDMxMjAxMDAyQzhDCis6MTA4OTgwMDA3MkUwMkVCMjAwMDA3MzBCMDAwMDAwODAwMjAwMDA5MDI1Cis6MTA4OTkwMDAwMDAwQzQwRjAwMjAwMDE4MDgwMDZFRjIwMDAwMzYxMDFFCis6MTA4OUEwMDAxRjMwMDAyODA4MDA2RUIyMDAwMDAwMDAwMDAwMDBBNDg0Cis6MTA4OUIwMDAwODgwODIzMjAwMDAzNjEwMDQxMDAwNkMwODAwNkVCMjhECis6MTA4OUMwMDAwMDAwRTAwRDAwMTgwMDRDMDgwMDZFRjIwMDAwN0MwQjY3Cis6MTA4OUQwMDAwMDUwMDEzQ0E4NUI4MDlDMDAwMDM2MTAwMDAwMDA4MDI1Cis6MTA4OUUwMDAwMjAwMDA5MDAwMDAwMDAwMDA1MDAxMDBBODFCODAzQTI3Cis6MTA4OUYwMDAwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDFBCis6MTA4QTAwMDA0RDAwMDAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA5Cis6MTA4QTEwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjBFCis6MTA4QTIwMDAwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwQTYwQjAwCis6MTA4QTMwMDAwNDAwMDAyOEQ4QTA4MkJDMDAwMDAwMDAwMDAwMDAxODNDCis6MTA4QTQwMDBEOEEwODEzQzAwMDA5NDBCMDQwMDAwM0NEOEUwODNCQzFCCis6MTA4QTUwMDAwMDAwODgwQjA0MDAwMDgwNzI4MDJEQkMwMDAwODYwQjkzCis6MTA4QTYwMDAxMjAwMDA1MDAyQzAzOEIyMDAwMDhFMEI1MTAwMDBEODM2Cis6MTA4QTcwMDAxMjgwMkQ5QTAwMDA4ODBCMTIwMDAwNTBGMkMxMzhCNDA5Cis6MTA4QTgwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwOEQwQjhGCis6MTA4QTkwMDAwNDAwMDA4MDcyODAyREJDMDAwMDg5MEI2NzAwMDBGODg0Cis6MTA4QUEwMDBBMjgwMkZCNTAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMkVCCis6MTA4QUIwMDAwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwOTIwQkJDCis6MTA4QUMwMDAyQTAxMDAwMEQ4MjA4MEJBMDAwMDkyMEIxMjAxMDAwMDk5Cis6MTA4QUQwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTNCCis6MTA4QUUwMDAwMDAwMDAwMDAwMDAwMEQ4MDI0MDg0MzIwMDAwRjAwREI5Cis6MTA4QUYwMDAwMDYwMDA2QzA4MDA2RUYyMDAwMDdGMEI0RDAwMDAwMDZCCis6MTA4QjAwMDA2N0UwODM5RTAwMDA5NDBCMTIwMDAwNTBGMkMxMzhCNDVECis6MTA4QjEwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkxRDAwOTkwQkQ1Cis6MTA4QjIwMDAwNDAwMDA4MDAyQTQxN0I4MDAwMDk1MEI2NzAwMDBGODRECis6MTA4QjMwMDBBMjgwMkZCNTAwMDAzNjEwMTIwMDAwMDAwOUMwMjFCMjNCCis6MTA4QjQwMDAwODAwMzYxMDEyNDAwMjY4MTI5QUZFQjgwMDAwREMwRUNGCis6MTA4QjUwMDAwMDAwMDAzMDAzMDAzOEYyMDAwMDM2MTAxRjAwMDA2Q0U3Cis6MTA4QjYwMDBEOEUwODZCQTAwMDBFMDBENTEwMDAwRDgwMjAwMDBGMjAzCis6MTA4QjcwMDAwMDAwOUYwQjAwMDAwMDNDMDg0MDgwOTIwMDAwMzYxMDZGCis6MTA4QjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDdFMEIwNDAxMDA4MEM1Cis6MTA4QjkwMDAwMjgwODFCQzAwMDBBNDBCODAwMTAwODBBMjgwMkZCNjVGCis6MTA4QkEwMDAwMDAwQTQwQjEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDE5Cis6MTA4QkIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODZDCis6MTA4QkMwMDAwMjQwODQzMjAwMDBGMDBEMDA2MDAwNkMwODAwNkVGMjdDCis6MTA4QkQwMDAwMDAwN0YwQjREMDAwMDAwNjdFMDgzOUUwMDAwMDAwMDU2Cis6MTA4QkUwMDBDMDAxMDEzODA4QzA2RTMyMDAwMDAwMDA0NTMwMDBFMENFCis6MTA4QkYwMDAwNjAwMDAzMjAwMDBBODBCMTIwMDAwNTBGMkMxMzhCNDg5Cis6MTA4QzAwMDAwMDAwQUQwQjA0MDIwMUVDMTZDMDZFQkMwMDAwMDAwMEI5Cis6MTA4QzEwMDBDOTAxMDAxNDE4NDA4MTNBMDBDMEFEMEIxMjAxMDA0MDk4Cis6MTA4QzIwMDBBMjhEMzlCMjAwMDBBQjBCMDAwMDAwODAwMjAwMDA5MDYyCis6MTA4QzMwMDAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMEVECis6MTA4QzQwMDAwMEE4MDEyMDk5MjI2RTNBMDAwMEIxMEIyRjIwMDFFMDBDCis6MTA4QzUwMDA5NjIyNkVCQzAwMDBBMzBEMDAwMDAwODAwMjAwMDBGMDEwCis6MTA4QzYwMDAwMDAwQjUwQjA0MDAwMDNDRDhFMDgzQkMwMDAwQjQwQjRFCis6MTA4QzcwMDA5RjMxMDFFMDk2MjI2RUJDMDAwMDAwMDAwMDMwMDFFMDUwCis6MTA4QzgwMDAwNjAwMDAzMjAwMDBCOTBCMDA1MDAxRThGNjYwODA5QzNECis6MTA4QzkwMDAwODAwMDAwMDAwNDAwMjY4MTI5QUZFMzgwMDAwQjgwQjdECis6MTA4Q0EwMDA5RjMxMDFFMDk2MjI2RUJDMDAwMDAwMDAwMDMwMDFFMDIwCis6MTA4Q0IwMDAwNjAwMDAzMjAwMDAwMDAwMDA1MDAxRTgwNjAwMDAzMjBCCis6MTA4Q0MwMDAwMDAwMDAwMDAwQTgwMUUwMDYwMDkyMzIxODAwMzYwMDAzCis6MTA4Q0QwMDAwMDAwMDBGODczMEEwM0Y5MUQwMEJEMEIwNDAwMDA4MEJBCis6MTA4Q0UwMDAwMkE0MTdCODAwMDBCQTBCMDAwMDAwMTQxODQwODE5Q0MxCis6MTA4Q0YwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDIwMDA4MDQ3Cis6MTA4RDAwMDAwMDAwMDAyODA5MDAzNzMyMDAwMEIxMEYwMDAwMDAwODAxCis6MTA4RDEwMDBFODAxMDBGNDAwMDBDMDBCMTIwMDAwNDgwMkMwODBCMjVECis6MTA4RDIwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwQzQwQjJECis6MTA4RDMwMDAyMzAxMDAxNDE4NDA4MUJBM0UwMEMzMEIxMjAwMDAyQzFFCis6MTA4RDQwMDA4MkNEMkVCMjE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTZCCis6MTA4RDUwMDAwMDAwQzQwQjA0MDEwMDE0MTg0MDgxQkMwMDAwOTkwRkVFCis6MTA4RDYwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMENBMEIyOTMxMDEwQzU1Cis6MTA4RDcwMDAwOTAwNkVCMjJCMDA4QzA3MTIwMTAwMkM4MkNEMkVCMjlFCis6MTA4RDgwMDAwMDAwQzgwQjAwMDAwMDgwMDIwMDAwOTAwMDAwOUMwRDU1Cis6MTA4RDkwMDAwMDBDMDIwMDA5ODA2RUYyMDAwMEQzMEIwMDAwMDA4MDdFCis6MTA4REEwMDAwMjAwMDA5MDAwMDBBQTBGMDAwMDAwODAwMjAwMDBGMDA2Cis6MTA4REIwMDAwMDAwMDAwMDAwMDAwMDFDMDgwMDkwMzIwMDAwRDIwQkYwCis6MTA4REMwMDAwNDAwMDAyODA5ODA4MEIyMDAwMEYxMEUwMDAwMDBEOEU1Cis6MTA4REQwMDAwMjAwMDBEMjAwMDBEMjBCMDQwMDAwODAwMjgwOTJCQzhFCis6MTA4REUwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwN0QwNTQyCis6MTA4REYwMDAwMDAwMDAwODA4MDAwMDkyMDAwMDhDMDcxRDAwMDA4MEExCis6MTA4RTAwMDAwMjAwMDBCMDAwMDA4QzA3ODAwMDAwODAwMjgxMkZCNkI1Cis6MTA4RTEwMDAyQTAwRDUwQjEyMDAwMDJDODJDRDJFQjIwMDAwOEMwNzQ4Cis6MTA4RTIwMDAwMDAwMDBGODAyODEyRjk0MDAwMEJBMEQwMDAwMDAxODI1Cis6MTA4RTMwMDAwOTQwODFGMjAwMDBBMzBEMDBBODAxMjAwOTAwNkVGMjk0Cis6MTA4RTQwMDAwMDAwMDAwMDAwMzAwMTBDMDkwMDZFMzIwMDAwOUMwRDkzCis6MTA4RTUwMDAwMDBDMDIwMDA5ODA2RUYyMDAwMDhFMDcwMDAwMDA4MDA2Cis6MTA4RTYwMDAwMjAwMDA5MDAwMDA5OTBGMDAwMDAwODAwMjAwMDBGMDU2Cis6MTA4RTcwMDAwMDAwQUEwRjAwMDAwMDgwMDIwMDAwRjAwMDAwN0QwNTQ1Cis6MTA4RTgwMDAwMDAwMDAxQzA4MDA5MDkyMDAwMDAwMDA1NDU0MDFGQ0Y3Cis6MTA4RTkwMDAwMkMwNkUzMjEwMDAwMDAwMDAwMDAwQTg3ODBCMTYzOEU3Cis6MTA4RUEwMDAwODAwMDAwMDAwMDAwMEFDNzgwQjE2MzgwMDAwMDAwMDNECis6MTA4RUIwMDAwMDAwMDBCMEE4MDAyRDM3MDA0NDAwMDAwMDAwMDBCMDAyCis6MTA4RUMwMDA4ODBEOEIzQTAwMDAwMDAwMDA1MDAxQjQwODgwNkUzMjFCCis6MTA4RUQwMDAwMDAwRUQwQjA0MzEwMTkwMDgwMDZFQjIwMjAwMDAwMEFBCis6MTA4RUUwMDAwMDAwMDBDODgyOEQ4QTM3MDAwMDAwMDAwMDAwMDBDODIyCis6MTA4RUYwMDBDMkEyMkMzQTE4MDBFQjBCODY0MTAyNzg4ODBENzhCNjk2Cis6MTA4RjAwMDAwMDAwRTYwQjlGMDEwMEE4MTg4MDhBQkM5RjAwRTYwQkJBCis6MTA4RjEwMDAwMDAwMDBBODA4MDAzNjkyMDAwMDAwMDAwMDQwMDIwNDkzCis6MTA4RjIwMDBCODNGNzgzMDAwMDBGQjBCMDAwMDAwMDREODYyODA5QzQyCis6MTA4RjMwMDAwMjAwMDAwMDAwMDAwMEM4ODI4RDhBMzcwMDAwMDAwMDk3Cis6MTA4RjQwMDAwMDAwMDBDOEMyQTIyQzNBMTgwMEYyMEI4NjQxMDI3ODM5Cis6MTA4RjUwMDA4ODBENzhCNjAwMDBFRDBCOUYwMTAwQTgxODgwOEFCQzMwCis6MTA4RjYwMDA5RjAwRUQwQjAwMDAwMEE4MDgwMDM2OTIwMDAwRjQwQkYzCis6MTA4RjcwMDAyODQwMDIwNEI4M0Y3OEIwMDAwMDAwMDBDODAxMDAwNDk3Cis6MTA4RjgwMDBEODYyODAzQzAwMDBGODBCMDIwMTAwOTAxODIwODlCQ0Q4Cis6MTA4RjkwMDAwMDAwMDAwMDAwMDAwMEI0MDgwMDAwMzIwMDAwRUQwQkVCCis6MTA4RkEwMDA5RjAxMDBBODE4ODA4QUJDOUYwMEVEMEIwMDAwMDBBODVDCis6MTA4RkIwMDAwODAwMzY5MjAwMDBGQjBCMDQwMDAwOTAxODIwODlCQUNDCis6MTA4RkMwMDAwMDAwMzYxMDlGMDAwMDA0NDg2MjgwQkMwMDAwMzYxMDhDCis6MTA4RkQwMDA5MDAwMDBCNDQ4NjI4QkJBMDMwMDM2MTAwNDQwMDIwMENGCis6MTA4RkUwMDAwODFFRkZCODAwMDAwMzBDMDAwMDAwMDBEODIyODA5QTgxCis6MTA4RkYwMDAwMDAwMjgwQzA0MDAwMDgwQTJFMjhBQkMwMjAwMDAwMEVECis6MTA5MDAwMDAwMDAwMDBDODgyOEQ4QTM3MDAwMDAwMDAwMDAwMDBDODAwCis6MTA5MDEwMDBDMkEyMkMzQTE4MDAyNjBDODY0MDAyNzg4ODBENzhCNjM5Cis6MTA5MDIwMDAwMDAwMzYxMDA0NDAwMjA0QjgzRjc4QjAwMzAwMzYxMDQ4Cis6MTA5MDMwMDAwNDQwMDIwMDA4MUVGRkI4MDAwMDA3MEMxMjAxMDA2MDg3Cis6MTA5MDQwMDAwODQwMjNCMjAwODIwMDAwMDAwMDAwMDgwODgwMzYzMjg5Cis6MTA5MDUwMDAwMDAwMzEwMzEyMDEwMDJDNzJFMDJFQjIwMDAwMDUwQzVBCis6MTA5MDYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAxMjAwMDAyNDcyCis6MTA5MDcwMDAwODAwMjNCMjAwMDAzNjEwMTIwMDAwMjAwOEMwMjNCMkZFCis6MTA5MDgwMDAwMDAwMzYxMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDEzCis6MTA5MDkwMDAwMDAwMDBEODAyODAwMTMyMDBDMDExMEMxODAxMDAwQzQxCis6MTA5MEEwMDBBOENEM0VCMjAwMDAwQjBDMTIwMDAwMzgwMjgwODFCMjQ1Cis6MTA5MEIwMDAwMDAwMzYxMDEyMDAwMDNDMDIwMDgyQjIwMDAwMzYxMEEwCis6MTA5MEMwMDAxMjAwMDAzMDAyNDA4MkIyMDAwMDM2MTAxMjAwMDAzNDVDCis6MTA5MEQwMDAwMjAwODZCMjIwODAwNTBDMDAwMDAwMDgwODgwMzY5MjRECis6MTA5MEUwMDAwMDAwMDAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDc0Cis6MTA5MEYwMDAwMDM4MDIwMEI4MUI4MDNBMDAwMDAwMDA2NDMwMDFFMDM0Cis6MTA5MTAwMDAxNjIwNkUzQTAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjg4Cis6MTA5MTEwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDhFCis6MTA5MTIwMDAwMDEwMDAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMDFDCis6MTA5MTMwMDAwNzAwODYzMjAwMDAxODBDMTIwMDAwNTBGMkMxMzhCNDRCCis6MTA5MTQwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDkyCis6MTA5MTUwMDAwMDE4MDAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDlECis6MTA5MTYwMDAwNzAwODIzMjEwMDAwMDAwMDAzMDAwMDAxN0UwMkMzOUE4Cis6MTA5MTcwMDAwMDAwMDAwMDAwMzgwMDAwRjcwMTBCMzQwMDAwMjAwQzU0Cis6MTA5MTgwMDA4MDAxMDA4MDMyODA4N0I2MDAwMDAwMDAwMDM4MDAwMEI3Cis6MTA5MTkwMDBCNzAxNzAzNDAwMDAwMDAwMDAwMDAwMDhFODAxMDAzNDRFCis6MTA5MUEwMDAwMDAwMkYwQzAyMEMwMjgwQTIxQjg5QkMxODAwMzYwMEE0Cis6MTA5MUIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMERDMEUwMDAwMDAzMDI0Cis6MTA5MUMwMDAwMzAwMzhGMjAwMDAyNDBDMTIwMDAwNDgwMkMwODBCMkY0Cis6MTA5MUQwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwRkQwQkM4Cis6MTA5MUUwMDA5RjAxMDBBODE4ODA4QUJDOUYwMEZEMEIwMDAwMDBBODBBCis6MTA5MUYwMDAwODAwMzY5MjAwMDAyQTBDODAwMTAwODAzMjgwMkZCNkQxCis6MTA5MjAwMDAzRTAwMjkwQzEyMDAwMDJDODJDRDJFQjIwMDAwMkMwQzQ2Cis6MTA5MjEwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDhDMDcwMDAwMDBGODczCis6MTA5MjIwMDA2MjgxMkY5NTAwMDA4QzA3ODAwMDAwODAwMjgxMkZCNjlDCis6MTA5MjMwMDAyQTAwMkQwQzEyMDAwMDJDODJDRDJFQjIwMDAwOEMwN0NCCis6MTA5MjQwMDAwMDAwMDBGODAyODEyRjk0MDAwMDAwMDAwMDM4MDAwMEE4Cis6MTA5MjUwMDBDNzAxNzAzNDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjVCCis6MTA5MjYwMDAwODAwMzMwQzIzMTkwMUU4NzYyMDgxQjkzRTAwMzIwQzQ2Cis6MTA5MjcwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDM1MEMxRDAxMDA4MEEyCis6MTA5MjgwMDAwMjAwMDBCMDAwMDAzODBDMDAwMDAwRjg2MjgxMkY5NTQ5Cis6MTA5MjkwMDAwMDAwMzgwQzgwMDAwMDgwMDI4MTJGQjYyQTAwMzYwQ0I2Cis6MTA5MkEwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGODU5Cis6MTA5MkIwMDAwMjgxMkYzNDAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNEE3Cis6MTA5MkMwMDAwMDAwM0IwQzEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDc5Cis6MTA5MkQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDNCMEMxMjAwMDA0ODdDCis6MTA5MkUwMDAwMkMwODBCMjAwMDAzMjAzMDAwMDAwRjhBMjgwMkY5NDc4Cis6MTA5MkYwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMEUxCis6MTA5MzAwMDAwMDMwMDAyODA4MDA2RTMyMDAwMDAwMDA1NDU0MDFGQ0I4Cis6MTA5MzEwMDAwMkMwNkUzMjAwQzA0OTBDMTgwMTAwMENBOENEM0VCMjRDCis6MTA5MzIwMDAyMDgwMDAwMDAwMDAwMDI4MDk4MDM2MzIwMDAwRjEwRTg1Cis6MTA5MzMwMDAwMDAwMDBEODAyMDAwMEQyMDAwMDQ2MEMwNDAwMDA4MEFCCis6MTA5MzQwMDAwMjgwOTJCQzE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTg0Cis6MTA5MzUwMDA0NzBDMzYwMDAwMDAwMEMwMDIwMDM2OTIxODAwMzYwMEFDCis6MTA5MzYwMDAwMDAwMDBGODczOEEwM0Y5MDAwMDAwMDAwMDAwMDBEODM0Cis6MTA5MzcwMDAwMjgwMDEzMjAwQzA0NjBDMTgwMDAwMENBOENEM0VCMjlECis6MTA5MzgwMDAwMDIwMDA4NDAwMDAwMDI4MDkwMDM3MzIwMDAwQUQwRkUzCis6MTA5MzkwMDAwMDAwMDAwOEU4MDEwMEY0MDAwMDhDMDcwMDAwMDA4MEQ1Cis6MTA5M0EwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjlFCis6MTA5M0IwMDAwMDAwMDAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwNTIwQzg4Cis6MTA5M0MwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODZCCis6MTA5M0QwMDAwODgwMzYzMjAwMDAyRjAzMTIwMTAwMkM3MkUwMkVCMkZBCis6MTA5M0UwMDAwMDAwNTAwQzAwMDAwMDgwMDIwMDAwOTAwMDAwNTEwRkFGCis6MTA5M0YwMDAwMDAwMDAyODA5MDAwMkYyMDAwMDVBMEMwMDAwMDA1Qzg2Cis6MTA5NDAwMDAwODAwMDA5MjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjM1Cis6MTA5NDEwMDAwMDAwMDAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwNUEwQzFGCis6MTA5NDIwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODBBCis6MTA5NDMwMDAwODgwMzYzMjAwMDA4QzBGMDAwMDAwNUMxRkMwRjVGQTc3Cis6MTA5NDQwMDAwMDAwMzEwMzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEQ2Cis6MTA5NDUwMDAwMDMwMDAyODA4MDA2RTMyMDAyMDAwODQwMDAwMDAyODQwCis6MTA5NDYwMDAwOTAwMzczMjAwMDBBRDBGMDAwMDAwMDhFODAxMDBGNEU5Cis6MTA5NDcwMDAwMDAwNUYwQzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDZGCis6MTA5NDgwMDAwMDAwMDAwODA4MDAwMDMyMDAwMDY1MEMwNDAwMDA4MEE1Cis6MTA5NDkwMDAwMkMwODVCMjAwMDA2NTBDODAwMDAwODBGMkMxODVCNjc0Cis6MTA5NEEwMDAwMDAwNjQwQzFDNDEwMjgwMDZDMDg1QjIwMDAwMDAwMDcwCis6MTA5NEIwMDAwMDAwMDA2ODAyQzU4NTMwMDAwMDAwMDAwMDAwMDA3MDU4Cis6MTA5NEMwMDAxRjAwRjczQTAwMDAwMDAwMDAwMDAwRjgyMjgxMkYzNDRFCis6MTA5NEQwMDAwMDAwREMwQzgwMDEwMDgwQTI4MDJGQjYxODAwMDAwMDg0Cis6MTA5NEUwMDAwMDAwMDBGODczMEEwMzM5REMwQzM2MDBDQTAwMDBDMDIzCis6MTA5NEYwMDAwMjAwMzY5MjAwMDBBRDBDODAwMTAwODA4MjgxMkZCNjAwCis6MTA5NTAwMDAwMDAwQjIwQzFGMjAwMTA4MDkwMDZFQjIwMDAwQUQwQzczCis6MTA5NTEwMDAwNDMwMDEwODg5OUI5MEJDMDAwMDcxMEMwNDMxMDE4MDZCCis6MTA5NTIwMDAwMjAwNkVCQzAwMDBFMDBEMDAwMDAwODAwMjAwMDBGMEIwCis6MTA5NTMwMDAwMDAwNkYwQzAwNTAwMTQ4MDg4MDZFOTIwMDAwMzYxMDQ5Cis6MTA5NTQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDAwMDAwNDA1Cis6MTA5NTUwMDAyODYxODAzQzAwMDA4MTBDMDAwMDAwMDAyODIxODA5QUQ2Cis6MTA5NTYwMDAwMDAwRTAwRDAwMzAwMTQ4MDgwMDZFRjIwMDAwNzQwQ0FECis6MTA5NTcwMDAwMDUwMDEwNEE4NUI4MDlDMDAwMDM2MTAwMDAwMDA4MEIxCis6MTA5NTgwMDAwMjAwMDA5MDAwMDAwMDAwMDA1MDAxMDBBODFCODAzQTdCCis6MTA5NTkwMDAwMDAwN0UwQzA3MDAwMDQ4MThBMDg0QkMwODAwMDAwMEYyCis6MTA5NUEwMDAwMDQwMDIwMDE4OUFGRTM4MDAwMDAwMDAwMDAwMDA2ODI5Cis6MTA5NUIwMDAwMjAwODAzMjAwMDBFMDBEMDAwMDAwODAwMjAwMDBGMDk4Cis6MTA5NUMwMDAwMDAwN0IwQzAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEJDCis6MTA5NUQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDdFMEMwNzAwMDA0OEEwCis6MTA5NUUwMDAxOEEwODRCQzA4MDAwMDAwMDA0MDAyMDAxODlBRkUzODUxCis6MTA5NUYwMDAwMDAwNzgwQzAwMDAwMDY4MDIwMDgwOTIwMDAwODEwQ0RFCis6MTA5NjAwMDAwNDAwMDA0ODE4QTA4NEJBMDAwMDM2MTA5RjAwMDAwNDJGCis6MTA5NjEwMDAyODYxODBCQzAwMDAwMDAwMDAwMDAwMDAyODIxODAzQTgyCis6MTA5NjIwMDAwMDAwMDAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwOEEwQ0YxCis6MTA5NjMwMDAxMjAxMDA2MDA4NDAyM0IyMDA4MjAwMDBENjAxMDAwODM5Cis6MTA5NjQwMDAwODgwMzYzMjAzMDAzNjEwMDQ0MDAyMDAzODFBRkZCODkyCis6MTA5NjUwMDAwMzAwMDAwMDAwMDAwMDc4MDk2MDgwMzkxODAwMDAwMDU1Cis6MTA5NjYwMDBEMjQxMDI4Q0U2QTE5NzM5MDAwMDAwMDAwMDUwMDFFOEM5Cis6MTA5NjcwMDAwNjgwODQzMjI5MDAzMTAzMTIwMTAwMkM4MkNEMkVCMkUzCis6MTA5NjgwMDAwMDAwODgwQzAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEVFCis6MTA5NjkwMDAxMjAwMDAyNDA4MDAyM0IyMDAwMDM2MTAxMjAwMDAyMDNGCis6MTA5NkEwMDAwOEMwMjNCMjAwMDAzNjEwMTIwMDAwMTgwODgwMjNCMjUwCis6MTA5NkIwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwOTUwQ0JDCis6MTA5NkMwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDBENjAxMDAwODkxCis6MTA5NkQwMDAwODgwMzYzMjAwMDA4RjBDMTIwMDAwMzgwMjgwODFCMjAwCis6MTA5NkUwMDAwMDAwMzYxMDEyMDAwMDNDMDIwMDgyQjIwMDAwMzYxMDZBCis6MTA5NkYwMDAxMjAwMDAzMDAyNDA4MkIyMDAwMDg0MEMxMjAxMDAzNERCCis6MTA5NzAwMDAwMjAwODZCMjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM3Cis6MTA5NzEwMDAwODAwMDAwMDAwNDAwMjVDMTg5QUZFMzgwMDAwMDAwMEJCCis6MTA5NzIwMDAwMDAwMDA0ODA4MDAwMDMyMDAwMDAwMDAwMDAwMDBEOERGCis6MTA5NzMwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMkZDCis6MTA5NzQwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDU4Cis6MTA5NzUwMDAwMDEwMDAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMEU2Cis6MTA5NzYwMDAwNzAwODYzMjAwMDA5QzBDMTIwMDAwNTBGMkMxMzhCNDkxCis6MTA5NzcwMDAwMDAwMDAwMEQ2MDEwMEQ4MDI4MDAxMzIwMDAwMDAwMDg1Cis6MTA5NzgwMDAwMDE4MDAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDY3Cis6MTA5NzkwMDAwNzAwODIzMjEwMDAwMDAwMDAzMDAwMDAxN0UwMkMzOTcyCis6MTA5N0EwMDAwMDAwQTQwQzgwMDAwMDgwMzI4MDg3QjYwMDEwMDA4MDhBCis6MTA5N0IwMDAwMDM4MDAwMDA3MDAzNzMyMDAwMEE1MEMwMDAwMDA4MEQwCis6MTA5N0MwMDAwMjAwMDA5MDAwMTAwMDg4MDAzODAwMDAwNzAwMzczMkM3Cis6MTA5N0QwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENBCis6MTA5N0UwMDAwMDAwMDA2ODAyQzA4NTMyMDAwMDAwMDAwMDAwMDAwODkwCis6MTA5N0YwMDBFODAxMDAzNDAwMDBBODBDMTIwMDAwNDgwMkMwODBCMjRBCis6MTA5ODAwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwRTAwREFDCis6MTA5ODEwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDgxMEMwMDAwMDA4MEM5Cis6MTA5ODIwMDAwMjAwMDA5MDAwMDBCMjBDMDAwMDAwODAwMjAwMDA5MEQ2Cis6MTA5ODMwMDAwMDAwRTAwRDAwMDAwMDgwMDIwMDAwRjAwMDAwQjAwQzBECis6MTA5ODQwMDAwMDM4MDIwMEI4MUI4MDlDMDAwMEIyMEMwMDAwMDA4MEIxCis6MTA5ODUwMDAwMjAwMDA5MDA1MDAwMDAwMDAwMDAwNjgwMkEwRkUzODMxCis6MTA5ODYwMDAwMDAwQUQwQzAwNDAwMjgwMDI0MDY4OTIwMDAwMDAwMDQxCis6MTA5ODcwMDBDQTAxMDBEODAyMDAwMDMyMDAwMEI1MEMwNEI4MDE4MDEzCis6MTA5ODgwMDAwMjAwNkVCQzAwMDAwMDAwMDBCODAxRTA4NjFCRUUzQzQ4Cis6MTA5ODkwMDA0QzAwMDAwMDAwMDAwMDAwMDcwMDM2MzIwMDAwMDAwMDBECis6MTA5OEEwMDAwMDAwMDA3OEE5MDAyRDM3QjQ0NDAwMDAwMDA4MDAwMDMzCis6MTA5OEIwMDA4NzhEOTczQTAwMDAwMDAwMDAwMDAwNzg5OUMwMkMzNzhGCis6MTA5OEMwMDBCNDAwMDAwMDAwMDAwMDc4ODk4RDk3M0EwMDAwMzYxMDNGCis6MTA5OEQwMDAwMjEwMDAwMDg3QkY5N0JBMDAwMDAwMDAwMDE4MDAwMEM3Cis6MTA5OEUwMDAwNzQwRkUzMjAwMDBCQzBDMTIwMDAwNDhGMkMxMzhCNDQwCis6MTA5OEYwMDAwMDAwQkQwQ0I2MDAwMDgwMDIwMDAwQjAwMDIwQkUwQ0NECis6MTA5OTAwMDAxMjAwMDA2NEEyQ0QyQ0IyMDAwMDAwMDBBNjAwMDA4MDZFCis6MTA5OTEwMDAwMjAwMDAzMDAwMDBDMjBDODAwMTAwODBBMjgwMkZCNjNGCis6MTA5OTIwMDAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjkwMDAwOEMwNzFCCis6MTA5OTMwMDAwMDU0MDFGQzAyQzA2RTkyMDAwMDAwMDAwMDU0MDFGQ0MzCis6MTA5OTQwMDAwMkMwNkUzMjAwMDBDODBDMTIwMTAwNjAwODQwMjNCMjUxCis6MTA5OTUwMDAwMDgyMDAwMDAwMDAwMDA4MDg4MDM2MzIyOTAwMzEwMzMwCis6MTA5OTYwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEM2MEMwMDAwMDA4MDM3Cis6MTA5OTcwMDAwMjAwMDA5MDAwMDAzNjEwMTIwMDAwMjQwODAwMjNCMkZDCis6MTA5OTgwMDAwMDAwMzYxMDEyMDAwMDIwMDhDMDIzQjIwMDAwMzYxMDdDCis6MTA5OTkwMDAxMjAwMDAxODA4ODAyM0IyMDAwMDAwMDAwMDAwMDBEODY4Cis6MTA5OUEwMDAwMjgwMDEzMjAwQzBEMzBDMTgwMTAwMENBOENEM0VCMkQ5Cis6MTA5OUIwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwQ0QwQzM2Cis6MTA5OUMwMDAxMjAwMDAzODAyODA4MUIyMDAwMDM2MTAxMjAwMDAzQzA0Cis6MTA5OUQwMDAwMjAwODJCMjAwMDAzNjEwMTIwMDAwMzAwMjQwODJCMjUzCis6MTA5OUUwMDAwMDAwQzYwQzEyMDEwMDM0MDIwMDg2QjIwMDAwMzYxMERFCis6MTA5OUYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUwMEQwMDAwMDA0ODIwCis6MTA5QTAwMDAwODAwMDBGMjA4MDBENjBDMDA0MDAyNUMxODlBRkU5ODhDCis6MTA5QTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEVFCis6MTA5QTIwMDAwMDUwMDEwMEE4MUI4MDNBMDAwMDk3MEMwMDAwMDA0ODdECis6MTA5QTMwMDAwODAwMDA5MjAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMkQ5Cis6MTA5QTQwMDAwMDAwNTEwRjAwMDAwMDI4MDk4MDAyRjIwMDAwQkQwQzQ4Cis6MTA5QTUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDUxMEYwMDAwMDAyODZDCis6MTA5QTYwMDAwOTAwMDJGMjAwMDBERjBDOUEwMTAwRjg2MjgxMkZCNEI1Cis6MTA5QTcwMDAxMDI0MDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMDJCCis6MTA5QTgwMDAwMEQ2MDFFQzA2QzA2RTM0MkUwMDhDMDcxMjAxMDAyQ0FCCis6MTA5QTkwMDA4MkNEMkVCMjAwMDBERjBDMDAwMDAwODAwMjAwMDA5MDlBCis6MTA5QUEwMDAwMDAwRTgwQzgwMDEwMDgwRjJDMTg1QjYwMDAwRTUwQ0UyCis6MTA5QUIwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMEU4MEMxRDAxMDBGODFDCis6MTA5QUMwMDAyMjgxMkZCNDAwMDBFODBDMDAwMDAwRjg2MjgxMkY5NTdECis6MTA5QUQwMDAwMDAwRTcwQzFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDQzCis6MTA5QUUwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDc1Cis6MTA5QUYwMDAwMjQwNjgzMjAwMDBFQTBDMDQ5ODAxNjQ4ODFCODdCQ0FECis6MTA5QjAwMDAwMDAwRDcwRjAwOTAwMTA4MDkwMDZFRjIwMDAwMDcxMDU2Cis6MTA5QjEwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDM2MTAxMjAwMDA2ODEzCis6MTA5QjIwMDAwMkM1ODVCMDAwMDAwMDAwMDAwMDAwRjhEMjgwMkYzNThCCis6MTA5QjMwMDAwMDAwOEUwNzM3MDAwMEY4RDI4MTJGQjQwMDAwMDAwMDJCCis6MTA5QjQwMDAwMDAwMDBGODcyODEyRjM0M0QwMDhFMDcxMjAxMDAyQ0I2Cis6MTA5QjUwMDA4MkNEMkVCMjAwMDBFRjBDMDAwMDAwODAwMjAwMDA5MEM5Cis6MTA5QjYwMDAwMDAwRjgwQzgwMDEwMDgwRjJDMTg1QjYwMDAwRjUwQzAxCis6MTA5QjcwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMEY4MEMxRDAxMDBGODRCCis6MTA5QjgwMDAyMjgxMkZCNDAwMDBGODBDMDAwMDAwRjg2MjgxMkY5NUFDCis6MTA5QjkwMDAwMDAwRjcwQzFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDcyCis6MTA5QkEwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MEI0Cis6MTA5QkIwMDAwMjQwNjgzMjAwMDAwMDAwMDBENDAxRUMxNkMwNkUzQThBCis6MTA5QkMwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTg1QjAwMDAwOEUwNzQ0Cis6MTA5QkQwMDAwNEIwMDA4MDAyMDA2RUJDMzcwMDhFMDcxMjAxMDAyQzFBCis6MTA5QkUwMDA4MkNEMkVCMjAwMDBGQjBDMDAwMDAwODAwMjAwMDA5MDJECis6MTA5QkYwMDAwMDAwMDQwRDgwMDEwMDgwRjJDMTg1QjYwMDAwMDEwRDU3Cis6MTA5QzAwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMDA0MEQxRDAxMDBGOEFECis6MTA5QzEwMDAyMjgxMkZCNDAwMDAwNDBEMDAwMDAwRjg2MjgxMkY5NTBFCis6MTA5QzIwMDAwMDAwMDMwRDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMEQ0Cis6MTA5QzMwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDIzCis6MTA5QzQwMDAwMjQwNjgzMjAwMDAxMDBEMDAwMDAwODAwMjAwMDA5MDA5Cis6MTA5QzUwMDAwMDAwMEMwRDgwMDEwMDgwRjJDMTg1QjYwMDAwMDkwREU2Cis6MTA5QzYwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMDBDMEQxRDAxMDBGODQ1Cis6MTA5QzcwMDAyMjgxMkZCNDAwMDAwQzBEMDAwMDAwRjg2MjgxMkY5NUE2Cis6MTA5QzgwMDAwMDAwMEIwRDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDZDCis6MTA5QzkwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MEMzCis6MTA5Q0EwMDAwMjQwNjgzMjAwMDAxMDBEMzcwMDAwRjhEMjgxMkZCNDU2Cis6MTA5Q0IwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwMTAwREZDCis6MTA5Q0MwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMDBFMEQwMDAwMDA4MDhCCis6MTA5Q0QwMDAwMjAwMDA5MDAwMDAwMDAwMDBENDAxRUMwNjAwMDAzMkY5Cis6MTA5Q0UwMDAwMDAwOEUwNzEyMDEwMDY4MDJDNTg1QjAwMDAwMzYxMDIyCis6MTA5Q0YwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDc4MDAxMDA4MEJFCis6MTA5RDAwMDBGMjgxMkZCNjAwMDA4QzA3ODAwMDAwODBFMjgxMkZCNjIwCis6MTA5RDEwMDAwMDAwOEMwNzA4NTkwMUVDMDZGQjZFQkMwMDAwMDAwMDM3Cis6MTA5RDIwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDA1NDU0MDFGQzAxCis6MTA5RDMwMDAwMkMwNkUzMjAwQzAxRDBEMTgwMTAwMENBOENEM0VCMjRECis6MTA5RDQwMDAwMDAwMDAwMDAwNTgwMUVDMDZGQjZFM0EyMDgwMDAwMDg1Cis6MTA5RDUwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDJGMDMxMjAxMDAyQzlBCis6MTA5RDYwMDA3MkUwMkVCMjAwMDAxQjBEMDAwMDAwODAwMjAwMDA5MDg3Cis6MTA5RDcwMDAwMDAwQUEwRjAwMDAwMEY4RTI4MTJGRjQwMDAwMjAwRDdGCis6MTA5RDgwMDAwNjAzMDE4MDEyQzA2RUJDMTkwMDdEMDUwMDAwMDAxQzk2Cis6MTA5RDkwMDAwODAwMzY5MjFBMDA3RDA1MDAwMDAwMUMwODAwMzY5MjZCCis6MTA5REEwMDAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMDZDCis6MTA5REIwMDAwMDAwMDBEODAyODAwMTMyMDAyMDAwQzAwMDAwMDAyODBFCis6MTA5REMwMDAwOTAwMzczMjAwMDAwMDAwMDAzMDAwMjgwODAwNkUzMjIxCis6MTA5REQwMDAwMDAwMDAwMDQ1MzAwMEUwMDYwMDAwMzIwMDAwQUQwRjNBCis6MTA5REUwMDAwMDAwMDAwOEU4MDEwMEY0MDAwMDJDMEQwNDAyMDFFQzYyCis6MTA5REYwMDAxNkMwNkVCQzAwMDAwMDAwQzkwMTAwMTQxODQwODEzQTcyCis6MTA5RTAwMDAwMDAwMDAwMDAwMDAwMEY4MDI4MDJGMzQwMEMwMkMwRDdDCis6MTA5RTEwMDAxMjAxMDA0MEEyOEQzOUIyMDAwMDJBMEQwMDAwMDA4MDFFCis6MTA5RTIwMDAwMjAwMDA5MDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTE3Cis6MTA5RTMwMDAwMDAwMkMwRDlGMDEwMDE0MTg0MDgxQkMwMDAwOEUwNzBCCis6MTA5RTQwMDA4MDAxMDA4MDkyODAyRkI2MkIwMDhFMDcxMjAxMDAyQzFCCis6MTA5RTUwMDA4MkNEMkVCMjAwMDAyRjBEMDAwMDAwODAwMjAwMDA5MDg1Cis6MTA5RTYwMDAwMDAwMzYxMDFGMDEwMEQ4MDI4MDAxQjIwMDAwMDAwMDdGCis6MTA5RTcwMDAwMDU0MDFGQzAyQzA2RTMyMDBDMDNDMEQxODAxMDAwQzAxCis6MTA5RTgwMDBBOENEM0VCMjIwODAwMDAwMDAwMDAwMjgwOTgwMzYzMkI0Cis6MTA5RTkwMDAwMDAwRjEwRTAwMDAwMEQ4MDIwMDAwRDIwMDAwMzkwREQxCis6MTA5RUEwMDAwNDAwMDA4MDAyODA5MkJDMTgwMDAwMDAwMDAwMDBGODRFCis6MTA5RUIwMDA3MzBBMDMzOTNBMEQzNjAwMDAwMDAwQzAwMjAwMzY5MkUyCis6MTA5RUMwMDAxODAwMzYwMDAwMDAwMEY4NzM4QTAzRjkwMDAwMDAwMDUzCis6MTA5RUQwMDAwMDAwMDBEODAyODAwMTMyMDBDMDM5MEQxODAwMDAwQ0NCCis6MTA5RUUwMDBBOENEM0VCMjAwMDBBQTBGMDAwMDAwRDgwMjQwMDBGMjQ4Cis6MTA5RUYwMDAwMEYwNDMwRDFENDAwMjAwQTgwRDY4QjEwMDAwMzYxMEFGCis6MTA5RjAwMDAxRTQwMDI4NDA2MDAwMEIyMDAwMDQxMEQxMjAwMDAyODJECis6MTA5RjEwMDAwMjA1ODBCMDA4MDAzRDBEMDAwMDAwRjgyMzQwMDE5OUMzCis6MTA5RjIwMDAwMDAwM0QwRDEyMDEwMDY4MDIwNTgwQjAwMDAwMzYxMEVGCis6MTA5RjMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDQzMERCNTAwMDA4MDhBCis6MTA5RjQwMDAwMjAwMDBCMDAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNUJBCis6MTA5RjUwMDAwMDAwMDAwMDAwMDAwMDUwMDlDMDI5MzIwMDAwMDAwMDhECis6MTA5RjYwMDAwMDU2MDEyODA4QzA2RTMyMDAwMDAwMDAwMDAwMDA3ODkyCis6MTA5RjcwMDAzOTBCMkUzMjAwMDAwMDAwMDAwMDAwMjBGMzgxOTczNERFCis6MTA5RjgwMDAwMDAwNEMwRDA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMDNDCis6MTA5RjkwMDAwMDAwMDAwMEI5MDUzMDMwMTgwMDAwMDAwMDAwMDBGODkzCis6MTA5RkEwMDAwM0E0MDMzOTAwMDAwMDAwMDAwMDAwMzQzMzBCMkYzMkZCCis6MTA5RkIwMDAwMDAwNTkwRDA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMEZGCis6MTA5RkMwMDAwMDAwMDA3OEI5MDUzMDMwMDAwMDUyMEQwNDAwMDA4MDE4Cis6MTA5RkQwMDA0MkU1MjlCQzAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjQ5Cis6MTA5RkUwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAyMzkwMDAwMDAwMDI5Cis6MTA5RkYwMDAwMDAwMDA5QzAyODA5NzMyMDAwMDU4MEQyNTAxMDAwOEU3Cis6MTBBMDAwMDAwODAwMDBCMjAwMDA1NjBEMTIwMDAwMjgwMjA1ODBCMEMyCis6MTBBMDEwMDAwODAwNTgwRDAwMDAwMEY4MjM0MDAxOTkwMDAwNTgwRDc5Cis6MTBBMDIwMDAxMjAxMDA2ODAyMDU4MEIwMDAwMDM2MTAwMDAwMDA4MEI4Cis6MTBBMDMwMDAwMjAwMDA5MDAwMDA0QzBEMDAwMDAwRjQwMjAwMDA5MkFECis6MTBBMDQwMDAwMDAwNUQwRDA0MDAwMDgwNDJFNTI5QkMwMDAwMDAwMDE2Cis6MTBBMDUwMDAwMDAwMDBGODAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGOEM0Cis6MTBBMDYwMDA3MzhBMDIzOTAwMDAwMDAwMDAwMDAwOUMwMjAwOTUzMjUzCis6MTBBMDcwMDAwMDAwMDAwMENBMDEwMEQ4MDI4MDAxMzIwMDAwMDAwMDg4Cis6MTBBMDgwMDAwMDMwMDAwMDA3QzAyQzMyMDAxMDAwQTAwMDM4MDAwMDkzCis6MTBBMDkwMDAwNzAwMzczMjAwMDAwMDAwMDAyMDAwMDAwNzAwRUUzMjA5Cis6MTBBMEEwMDAwMDAwMDAwMDAwMzgwMDBDMDc4MDgyMzIwMDAwNjIwREMyCis6MTBBMEIwMDAxMjAwMDA0ODAyQzA4MEIyMDAwMDMyMDMwMDAwMDAwODE1Cis6MTBBMEMwMDBFODAxMDA5NDAwMDA3QTBEMDIwMDAwODBBMjQyODBCQ0VBCis6MTBBMEQwMDAwMDAwN0EwRDgwMDAwMDgwRjJDMTg1QjYwMDAwN0EwRDg0Cis6MTBBMEUwMDAxRjQwMDIwOEI5QkY2OEIwMDAwMDZDMEQ4MDQxMDI4MEJCCis6MTBBMEYwMDBFMjgxNjhCNjA4MDAwMDAwMDAwMDAwMTA3OTYxODAzOTM0Cis6MTBBMTAwMDAwMDAwMDAwMEQyMjEwMUUwMTYyMDZFM0ExODAwMDAwMDg1Cis6MTBBMTEwMDAwMDQwMDI4OEU2MjE5MTM5MDAwMDAwMDAwMDAxMDA1QzQ3Cis6MTBBMTIwMDAwODAwMDA3MjAwMDAwMDAwMDAwMDAwMEMxOUEwOTAzQTI2Cis6MTBBMTMwMDAwMDAwN0EwRDA2MDEwMDgwRDJGRjkwQkMwMDAwNzAwRDc3Cis6MTBBMTQwMDAyQzQxMDI3OEY5ODE2OEI0MDAwMDAwMDAwMDAwMDA3ODFBCis6MTBBMTUwMDBCOTgxOTczNDAzMDAwMDAwMDA0MDAyMDAyOTFBRkYzODNCCis6MTBBMTYwMDAwMDAwMDAwMDAwMzgwMjAwQjkxQjkwM0EwMDAwMDAwMDE3Cis6MTBBMTcwMDBEMjQxMDI4ODE2QTA5NzNBMDAwMDAwMDA0NTAwMDBEODlFCis6MTBBMTgwMDAwMjQwMDAzMjAwMDAzNjEwOUYyMDAxRTAxNjIwNkVCQTE3Cis6MTBBMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMEM2Cis6MTBBMUEwMDAwMDA4MDAwMDI3MjQ5MDNBMDAwMDAwMDAwMDEwMDAwMDgyCis6MTBBMUIwMDAwNzAwOEEzMjAwMDAwMDAwMTIwMTAwNThGMkMxMzg3NDEyCis6MTBBMUMwMDAwMDAwNzgwRDAwMDAwMDgwMDIwMDAwOTAwODAwODQwRDVGCis6MTBBMUQwMDAxQTAwMDAzNDc5NjE4MEI5MDAwMDhGMEQxRTAxMDA4MEUzCis6MTBBMUUwMDAwMjAwMDBCMDAwMDA4RjBEMUY0MDAyMDAwOTQwNjhCMjVECis6MTBBMUYwMDAwMDAwN0MwRDgwMDAwMDgwRTIwMTkwQjYwMDAwMzYxMDY3Cis6MTBBMjAwMDAzODAwMDA1NDFGNDBGNUJBMDAwMDAwMDAwMDAwMDAwOEFDCis6MTBBMjEwMDBCOTNGOTAzMDAwMDAwMDAwMDAyODAxRTAyNjI0NkUzQThCCis6MTBBMjIwMDAwODAwMzYxMDFFMDAwMDAwMDlBNEZFQjgwMDAwOEYwREMzCis6MTBBMjMwMDAxMjAxMDA2ODAyMDU5MEIwMDAwMDM2MTAwMDAwMDA4MDk2Cis6MTBBMjQwMDAwMjAwMDA5MDAwMDA4RjBEODAwMDAwODA4MjgxMkZCNkY4Cis6MTBBMjUwMDAwMDAwOEQwRDFGNDEwMjAwMDk0MDY4QjIwMDAwMDAwMDlGCis6MTBBMjYwMDAwMDI4MDFFMDE2MjA2RTNBMDAwMDhBMEQ4MDAxMDA4MDZGCis6MTBBMjcwMDBGMkMxODVCNjAwMDAwMDAwMDA0MDAyODRFNjAxMDAzNDBGCis6MTBBMjgwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwMDAwMDFDCis6MTBBMjkwMDAwMDQwMDI4MDAyNDA2ODMyMDAwMDM2MTAzODAwMDA1NDRFCis6MTBBMkEwMDAxRjQwRjVCQTAwMDAwMDAwMDAyMTAxRTAxNjIwNkU3QTgwCis6MTBBMkIwMDAwMDAwODUwRDgwMDAwMDgwRTIwMTkwQjYwMDAwN0UwRDU4Cis6MTBBMkMwMDAwMDAwMDA1NDFGNDBGNTlBMDAwMDAwMDAwMDAwMDA1Q0YwCis6MTBBMkQwMDAwODAwMDAzMjAwMDAwMDAwRDIyMTAxRTAxNjIwNkUzQTkyCis6MTBBMkUwMDAxODAwMDAwMDFFNDEwMjg0RTY2MTkzNzkwMDAwMzYxMEQ4Cis6MTBBMkYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MENFCis6MTBBMzAwMDAwMjAwMDA5MDAwMDA5NzBEMUQ1RDAxRUMxNkMwNkVCQ0IwCis6MTBBMzEwMDAwMDAwMDAwMDBGMDEwMDgwMDIwMDAwNzAwMDAwMDAwMDNCCis6MTBBMzIwMDAwMDAxMDBGOEIyODAyRjc0MDAwMDAwMDAwRjAxMDA4MENGCis6MTBBMzMwMDAwMjAwMDA3MDAwMDA5NjBEMDQ1RTAxRUMxNkMwNkVCQ0I5Cis6MTBBMzQwMDAwMDAwMDAwMDAwNUMwMUVDMDY0MDAwMzIwMDAwMDAwMDRDCis6MTBBMzUwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMEZGRkYwMDAwMDA4MDhDCis6MTBBMzYwMDAwMjAwMDA5MDAwMDAwMDAwMDQyMDAxODA4MkRCOTA3QzRECis6MTBBMzcwMDAwMDAwMDAwMDAyMEMwMjgwQTJEQjkwN0MwMDAwQTAwRDE3Cis6MTBBMzgwMDAwNjIxMDE4MDgyMUI5MEJDMjcwMEExMEQwMDAwMDAwMDY3Cis6MTBBMzkwMDAwOTAwMzY5MjI4MDAwMDAwMDAwMDAwMDAwOTAwMzYzMjUzCis6MTBBM0EwMDAwMDAwMDAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRkZGRkFGCis6MTBBM0IwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAyRkEwMDE3ODQzCis6MTBBM0MwMDA4OTFCOTI3QTAwMDAwMDAwMDY4ODAxNzg4OTlCOTc3QzlGCis6MTBBM0QwMDAwMDAwMDAwMDAwMzQwMjA0MDlDMDZFM0QwMDAwMDAwMENGCis6MTBBM0UwMDAwMDBDMDIwMDE5QTQ2RTM3MDAwMEFCMEQwMjAwMDA4MEMzCis6MTBBM0YwMDAwMkE0OTdCQzAwMDBBQjBEMDIwMDAwODAwMjAwMDBCMDc4Cis6MTBBNDAwMDAwMTAwMDAwMDAwMDAwMDc4ODk4RDk3MzcwMDAwMDAwMEVGCis6MTBBNDEwMDAwMjAxMDI4MDgyOUI5NzdDMDAwMDAwMDAwMDAxMDBGODhFCis6MTBBNDIwMDBGMjgwMkY3NDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDA3Cis6MTBBNDMwMDAwMDAwMDAwMERBNUIwMUVDMDY0MEVEMzIwMDAwQjEwREQ3Cis6MTBBNDQwMDAwNDAxMDA4MDAyNDA4NkJDMDAwMDAwMDAwMEEwMDFFMDgyCis6MTBBNDUwMDAxNjIwNkUzQTAwMDBCMzBEMDBENDAxRUMwNjAwMDA5MjA1Cis6MTBBNDYwMDAwMDAwRDcwRjAwOTAwMTA4MDkwMDZFRjIwMDAwMDAwMDA0Cis6MTBBNDcwMDAwMEEwMDFFMDE2MjA2RTNBMDAwMDA3MTAzMzAxMDBGODNBCis6MTBBNDgwMDA4MjgwMkZCNDAwMDAwNzEwOUZGMDAxODA4MkRCODdCQzIwCis6MTBBNDkwMDAwMDAwMDcxMDlGRjgwMTgwMjIyMTZFQkMwMDAwMDAwMDIwCis6MTBBNEEwMDAwMEU4MDFFMDA2MDBFRTMyMDAwMDAwMDAwMEYwMDFFMEVDCis6MTBBNEIwMDAwNkMwODczMjAwMDAwNzEwMDAwMDAwODAwMjAwMDA5MEY0Cis6MTBBNEMwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwMDAwQzUwREFBCis6MTBBNEQwMDAwNDIxMDEzMDY5MjQ2RUJDMDAwMEJGMEQxRjQwMDIyNDFFCis6MTBBNEUwMDAwOTQwNjhCMjAwMDBCQjBEODAwMDAwODBFMjQxOTJCNkQ2Cis6MTBBNEYwMDAwODAwQkIwRDEyMDEwMDY4OTJBNEZFQjgwMDAwMzYxMERGCis6MTBBNTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMEE4MDFFMEIwCis6MTBBNTEwMDA2NjI0NkUzQTAwMDBDMjBEMzgyMDAxRTAwNjAwOTNCMkI2Cis6MTBBNTIwMDAwMDAwQzMwRDAwMjgwMUUwMDYwMDAwOTIwMDAwMDAwMEJBCis6MTBBNTMwMDAwMDMwMDFFMDA2MDAwMDMyMDAwMDAwMDAwMDUwMDFFODk5Cis6MTBBNTQwMDAwNjAwMDAzMjAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MEUwCis6MTBBNTUwMDAwMDAwQ0EwRDM4NTEwMTAwQTk5QjkxQkEwMDAwQzgwRDM2Cis6MTBBNTYwMDAwNDQxMDIwOEI5RkY2OEIwMDAwMEM2MEQwMDQwMDI4MDM3Cis6MTBBNTcwMDAwMjQwNjg5MjAwMDBENTBEOUYzMTAxRTA2NjI0NkVCQzU4Cis6MTBBNTgwMDAwMDAwRDUwRDAwMzAwMUUwMDYwMDAwOTIwMDAwRDMwRDYwCis6MTBBNTkwMDAwNDI4MDEwNDA5MDA2RUIyMDAwMEQxMEQ5RjAxMDAwMEUzCis6MTBBNUEwMDAxOTI0OTBCQzAwMDAwMDAwMDBBODAxRTA2NjI0NkUzQTY3Cis6MTBBNUIwMDAwMDAwMDAwMDAwMjgwMUUwMDYyNDAwM0MwMDAwMDAwMDJDCis6MTBBNUMwMDAwMDUwMDFFODA2MDAwMDMyMDAwMDM2MTA5RjIwMDFFMDM0Cis6MTBBNUQwMDAwNjAwOTNCMjAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDNECis6MTBBNUUwMDAwMDAwMDAwMDAwMjgwMUUwMDYwMDAwMzIwMDAwREIwRDQyCis6MTBBNUYwMDAwNDAwMDA4MDAyMDA5MEJDMDAwMEQ1MEQwNDQxMDIwODU4Cis6MTBBNjAwMDBCOUZGNjhCMDAwMDBEMzBEMDA0MDAyODAwMjQwNjg5MjlDCis6MTBBNjEwMDAwMDAwRDkwRDAyMDAwMDgwMjIyNDkwQkMwMDAwREIwRDU4Cis6MTBBNjIwMDA4MDQwMDI4MEYyQzE2OEI2MDAwMDAwMDAwMDQwMDI4QzQ5Cis6MTBBNjMwMDBCNkMxNjgzNTAwMDBEQjBEMDAwMDAwRjgyMjgxMkY5NEMwCis6MTBBNjQwMDAwODAwMzYxMDEyNDAwMjY4MTI5QUZFQjgwMDAwRDMwREJFCis6MTBBNjUwMDAwNDAxMDAwMDI5MjQ5MEJDMDAwMDAwMDAwMEE4MDFFMEQzCis6MTBBNjYwMDA2NjI0NkUzQTAwMDAwMDAwMDA1MDAxRTgwNjAwOTAzMkI3Cis6MTBBNjcwMDAwMDAwMzYxMDlGMjAwMUUwMDYwMDkzQjIwMDAwMDAwMEE5Cis6MTBBNjgwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMEZGRkYwMDAwMDA4MDU5Cis6MTBBNjkwMDAwMjAwMDA5MDE4MDBFMjBEMUY0MTAyNzg4OENENjhCNkQ0Cis6MTBBNkEwMDAwMDAwMDAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRTQwREI5Cis6MTBBNkIwMDA4MDAxMDA4MDYyODA4N0I2MDAwMEUwMEQwMDQwMDI4MENCCis6MTBBNkMwMDAwMjQwNjg5MjAzMDAzNjEwMDQ0MDAyMDAzODFBRkZCOEI2Cis6MTBBNkQwMDAwMDAwMzYxMDFGNDAwMjA0QjhGRjY4QjAwMDAwMDAwMDAwCis6MTBBNkUwMDAwMDM5MDIwMEI4MUI4MDdBMDAwMEZGRkYwMDAwMDA4MEU0Cis6MTBBNkYwMDAwMjAwMDA5MDAwMDBFRjBEODAwMTAwODBBMjgwMkZCNkM0Cis6MTBBNzAwMDAwMDAwRUMwRDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDUzCis6MTBBNzEwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEOEYwCis6MTBBNzIwMDAwMjQwODQzMjFEMDBFRjBEMDQwMTAwODAwMkE0MTdCODFFCis6MTBBNzMwMDAwMDAwRTkwRDlGMDEwMDgwMTgwMDg4QkMwMDAwMzYxMDYxCis6MTBBNzQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDYwMDA2QzJCCis6MTBBNzUwMDAwODAwNkUzMjAwMDAwMDAwQ0E2ODAwNEMwODAwNkUzMjJCCis6MTBBNzYwMDAwMDAwMzYxMDA0NzAwMDE4MDgwMDZFQjIwMDAwMDAwMEVGCis6MTBBNzcwMDAwNDAwMDA4MEEyQTA4MTdDMDAwMEY2MEQ4MDAxMDA4MDEyCis6MTBBNzgwMDBFMjgwMkZCNjAwMDBGNjBEMUIwMDAwODAwMjAwMDBCMDMyCis6MTBBNzkwMDAwMDAwMDAwMDA2MDAwMDgwNjJFMDgzN0MwMDAwMDAwMEYyCis6MTBBN0EwMDBDQTAxMDBGODAyODAyRjM1MDBBMDAwMDAxMjAxMDA0MDBECis6MTBBN0IwMDBBMjhEMzk3MjAwMDBGNzBEMDAwMDAwODAwMjAwMDA5MEE5Cis6MTBBN0MwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDc5Cis6MTBBN0QwMDAwMDA4MDFFNDA2QzAyRDMyRUVGRjAwMDAwMDEwMDFFMDg5Cis6MTBBN0UwMDA4NjhEMkYzMTAwMDAwMDAwMDAwMDAwMUNCM0U0MzkzMkQ4Cis6MTBBN0YwMDAwMDAwMDAwRTA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMDBGCis6MTBBODAwMDAwMDAwMDA3OEI5MDUzMDMwMTgwMDAwMDAwMDAwMDBGOEEyCis6MTBBODEwMDBFM0E1MDMzOTAwMDAwMDAwMDAwMDAwMzQzMzBCMkYzMkExCis6MTBBODIwMDAwMDAwMDAwMDA0MDAwMDc4RDkwMTMwNzYwMDAwMDAwMDJDCis6MTBBODMwMDAwMDAwMDA3OEI5MDUzMDMwMTgwMDAwMDAwMDAxMDBGODcxCis6MTBBODQwMDBFM0E1MDM3OTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEY0Cis6MTBBODUwMDAwMDAwMDAwMDAwMDAwMENDMDIwMDAwMzIwMDAwMDgwRUUyCis6MTBBODYwMDAyMDAwMDEyQzA5QzA2RUIyMDAwMDA5MEUwMDE2ODZDQzMzCis6MTBBODcwMDAwNkMwOTI5MjAwMDAwMDAwMDAxNDg2Q0MwNkMwOTIzMkZFCis6MTBBODgwMDAwMDAwMDAwMDEyMDEwMDQwNjI4RTkyNTIwMDAwMDkwRThBCis6MTBBODkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDI4Cis6MTBBOEEwMDAwMjAwMDA5MDAwMDAwRTBFMDQwMDAwNzhEOTAxMzBCNkJFCis6MTBBOEIwMDAwRTBFMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMEJDCis6MTBBOEMwMDAwMDAwMDAxNDAzMDAzODMyMDAwMDAwMDAwMDAwMDBFMDI3Cis6MTBBOEQwMDAwMjAwMzAzMjAwMDA0RTBFMDQwMDAwMjREODAxMzBCNkQxCis6MTBBOEUwMDAxMjBFMDAwMDAwMDAwMDg4ODI0RDgyM0EwMDAwMzYxMEVGCis6MTBBOEYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDgwCis6MTBBOTAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDVECis6MTBBOTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwRTBFMzYwMDhECis6MTBBOTIwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDM4MEUwMDAwMDA4MEQ3Cis6MTBBOTMwMDAwMjAwMDA5MDAwMDAxQTBFMDAwMDAwMjA0ODA1MzA5MDMwCis6MTBBOTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRTdCCis6MTBBOTUwMDA5MjExMDFCQzA4MDA2RUIyMDAwMDAwMDAwMDA4MDFEQzhBCis6MTBBOTYwMDAwMjQwNkUzMjAwMDAxRTBFMUYxMTAxRTAyNkMxOEJCNUExCis6MTBBOTcwMDAwMDAwMjYwRTFEMDAwMDgwMDIwMDAwQjAwMDAwMDAwMDU0Cis6MTBBOTgwMDAwMDAwMDBEODAyMDAwMDMyODAwMjAwMDAwMDAwMDAwMDM5Cis6MTBBOTkwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwNzhBOTAwMkQzN0MzCis6MTBBOUEwMDAyMDQ1MDAwMDAwMDgwMDAwODc4RDk3M0EwQTAwMDAwMDRCCis6MTBBOUIwMDAwMDAwMDA3ODg5MEQ4MjM3MDAwMDAwMDAwMDEwMDAwMEMwCis6MTBBOUMwMDBBN0JBOTczQTAwMDAwMDAwMDAxODAwMDAwN0MwRUEzMjVBCis6MTBBOUQwMDAwMDAwMjUwRTEyMDAwMDQ4MDJDMDM4QjIwMDAwMkEwRTA2Cis6MTBBOUUwMDA4MDBFMDFCQzA4QzA2RUIyMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBBOUYwMDAxOTBFODIzMjAwRTAzMjBFMTIwMTAwNDhBMjBEOTBCMjEwCis6MTBBQTAwMDAwMDAwMjgwRTAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEZFCis6MTBBQTEwMDAwMDAwMDBEODAyNDAwMDMyQjQwMDAwMDAwMDAwMDAwMDM2Cis6MTBBQTIwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwNzhBOTAwMkQzNzMyCis6MTBBQTMwMDAwMDQ0MDAwMDAwMDgwMDAwODc4RDk3M0EwMDAwMDAwMEU1Cis6MTBBQTQwMDAwMDAwMDA3ODk5MDA4MjM3MDAwMDM2MTAwMjEwMDAwMEU0Cis6MTBBQTUwMDA4N0JGOTdCQTAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMkQwCis6MTBBQTYwMDAwMDAwMzEwRTEyMDAwMDQ4RjJDMTM4QjQxODAwMzYwMDYwCis6MTBBQTcwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDAwNDYxCis6MTBBQTgwMDA4OTYwMzgzMjAwMDAwMDAwMDAwMDAwMThGMzQxOTAzNDYzCis6MTBBQTkwMDAwMDAwMzgwRTA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMDM0Cis6MTBBQUEwMDAwMDAwMDAwMEI5MDUzMDMwMTgwMDAwMDAwMDAwMDBGODc4Cis6MTBBQUIwMDAwM0E0MDMzOTAwMDAwMDAwMDAwMDAwMDAxOUNFMkMzMjZFCis6MTBBQUMwMDAwMDYwMzkwRTEyMDAwMDQwQTIwRDkwQjIwMDAwMDAwMDlDCis6MTBBQUQwMDAwMDAwMDBEODAyMDAwMDMyNjAwMDAwMDAwMDAwMDAwMDBBCis6MTBBQUUwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwQkNBODAwMkQzNzJGCis6MTBBQUYwMDBBMDQ3MDAwMDAwMDgwMDAwODdDRDhCM0EwQTAwMDAwMDQ0Cis6MTBBQjAwMDAwMDAwMDA3ODg5Q0QyQzM3ODAwMjAwMDAwMDAwMDA3ODFBCis6MTBBQjEwMDA4OThEOTczQTAwMDAwMDAwMDAxMDAwMDBBN0JBOTczQTBDCis6MTBBQjIwMDAwMDAwMDAwMDAwMTgwMDAwMDdDMEVBMzIwMDAwNDIwRURBCis6MTBBQjMwMDAxMjAwMDA0MEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGOERFCis6MTBBQjQwMDA3MzBBMDNGOTAwMDAwMDAwMDAwODAxREMwMjQwNkUzMkM1Cis6MTBBQjUwMDAwQTAwNDcwRTFGMDEwMDc4ODlDRDJDQjcwMDAwMDAwMEM1Cis6MTBBQjYwMDAxRDEwMDFGODAyMDA2RTcyODAwMjAwMDAwMDAwMDAwMDVCCis6MTBBQjcwMDAwNzAwMzYzMjIwNDUwMDAwMDAwODAwMDA4N0NEOEIzQUUwCis6MTBBQjgwMDAwMDAwMDAwMDAwMTAwMDAwQTdCQTk3M0EwMDAwMDAwMDgzCis6MTBBQjkwMDAwMDE4MDAwMDA3QzBFQTMyMDAwMDRCMEUxMjAwMDA0MDBGCis6MTBBQkEwMDBGMkMxMzhCNDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTQ3Cis6MTBBQkIwMDAwMDAwMDAwMDAwMTEwMUY4MDIwMDZFNzIwMDAwMDAwMEE5Cis6MTBBQkMwMDAwMDEwMDFGODAyMDA2RTMyMDAwMDAwMDAwMDA5MDFEQ0Y0Cis6MTBBQkQwMDAwMjQwNkU3MjAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDQzCis6MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMzIwRTAwMDAwMDFDCis6MTBBQkYwMDAwMDAwMDAwNDg5NEQwRDM2MDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBQzAwMDAwNzgwMEIzMjAwMDAwMDAwMDAwODAwMDAwNzAwOTAzMkFGCis6MTBBQzEwMDAwMDAwMDAwMDAwMTAwMDAwMDcwMDM2MzIwMDAwNTYwRTUxCis6MTBBQzIwMDAxMjAwMDA0Q0YyQzEzOEI0MDAwMDAwMDAwMDAwMDA4MEE3Cis6MTBBQzMwMDAwMjAwMDAzMDAwMDA1NzBFMTIwMDAwODAwMkMwMjFCMjU2Cis6MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwRTkwMjkwM0EwMDAwNTMwRUVFCis6MTBBQzUwMDAwNDAxMDAwNDE5NDA5MEJDMDAwMDAwMDAwMDAxMDA4MEM1Cis6MTBBQzYwMDAwMjAwMDA1MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDgyCis6MTBBQzcwMDAwMDAwNjUwRTgwMDEwMDgwQTI4MDJGQjYwMDAwNjAwRUVCCis6MTBBQzgwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGOEVFCis6MTBBQzkwMDA3MzBBMDNGOTAwMDA2NDBFMDQwMDAwODAwMjgwMkRCQ0RBCis6MTBBQ0EwMDAwMDAwMzYxMDlGMDAwMDgwMTgwMDg4QkMwMDAwNjAwRTc1Cis6MTBBQ0IwMDAxMjAxMDBFODAyQzAyMUIyMDAwMDVGMEUwMDAwMDA4MDE3Cis6MTBBQ0MwMDAwMjAwMDA5MDAwMDAwMDAwQ0EwMDAwRDgwMjQwODQzMjU4Cis6MTBBQ0QwMDAwMDAwMDAwMDAwNDAwMDZDODgxQzgzM0EwMDAwMDAwMDY3Cis6MTBBQ0UwMDAwMDQ4MDA0QzA4MDA3MjMyMDAwMDM2MTAwODUwMDAxODZFCis6MTBBQ0YwMDBDODIwNzJCQzAwMDAwMDAwMDQwMDAwODAwMjQwODE3QzdCCis6MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDE0MTg0MDgxM0MwMDAwMzYxMEQ0Cis6MTBBRDEwMDAwMjAwMDAyMDg4MDE4MkJBMDAwMDAwMDAwMDAwMDBEODc0Cis6MTBBRDIwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMkIwCis6MTBBRDMwMDAwNzAwMDAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMDAwMDAxCis6MTBBRDQwMDAwMDEwMDAwMDA3MDA4MjMyMDAwMDAwMDBDQTE5MDAwMDU1Cis6MTBBRDUwMDAwNzQwODIzMjAwMDA3MDBFMTIwMDAwNDBGMkMxMzhCNDg5Cis6MTBBRDYwMDAwMDAwMDAwMDAwMDEwMEQ4MDI0MDg0NzIwMDAwRkZGRkQ0Cis6MTBBRDcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA0RDAwMDAwMDc0Cis6MTBBRDgwMDA2N0UwODMzRTAwMDAwMDAwMDAwODAwMDAwNzAwODAzMkZBCis6MTBBRDkwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMDI0Cis6MTBBREEwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMEI3MEUwNDAwMDAyODFECis6MTBBREIwMDBEOEEwODJCQzAwMDAwMDAwMDAwMDAwMThEOEEwODEzQzkwCis6MTBBREMwMDAwMDAwODkwRTA0MDAwMDNDRDhFMDgzQkMwMDAwN0QwRTJBCis6MTBBREQwMDAwNDAwMDA4MDcyODAyREJDMDAwMDdCMEUxMjAwMDA1MDI5Cis6MTBBREUwMDAwMkMwMzhCMjAwMDA4MzBFNTEwMDAwRDgxMjgwMkQ5QUE0Cis6MTBBREYwMDAwMDAwN0QwRTEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMDc5Cis6MTBBRTAwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDgyMEUwNDAwMDA4MEJECis6MTBBRTEwMDA3MjgwMkRCQzAwMDA3RTBFNjcwMDAwRjhBMjgwMkZCNTY2Cis6MTBBRTIwMDAwMDAwMzYxMDEyMDAwMEU4MDJDMDIxQjIwMDAwMDAwMDRECis6MTBBRTMwMDA1MTAwMDBEODAyMDAwMDMyMDAwMDg3MEUyQTAxMDAwMEY1Cis6MTBBRTQwMDBEODIwODBCQTAwMDA4NzBFMTIwMTAwMDAwOUMwMjFCMjhDCis6MTBBRTUwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDMzCis6MTBBRTYwMDAwMDAwMDBEODAyNDA4NDMyMDAwMEYwMEQwMDYwMDA2QzQ5Cis6MTBBRTcwMDAwODAwNkVGMjAwMDA3NDBFNEQwMDAwMDA2N0UwODM5RTMzCis6MTBBRTgwMDAwMDAwODkwRTEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMERDCis6MTBBRTkwMDAwMDAwMDBGODczMEEwM0Y5MUQwMDhFMEUwNDAwMDA4MDA0Cis6MTBBRUEwMDAwMkE0MTdCODAwMDA4QTBFNjcwMDAwRjhBMjgwMkZCNTMwCis6MTBBRUIwMDAwMDAwMzYxMDEyMDAwMDAwMDlDMDIxQjIwODAwMzYxMDUwCis6MTBBRUMwMDAxMjQwMDI2ODEyOUFGRUI4MDAwMERDMEUwMDAwMDAzMDRBCis6MTBBRUQwMDAwMzAwMzhGMjAwMDA5RjBFMUYwMDAwNkNEOEUwODZCQTE1Cis6MTBBRUUwMDAwMDAwRTAwRDUxMDAwMEQ4MDIwMDAwRjIwMDAwOTQwRUI2Cis6MTBBRUYwMDAwMDAwMDAzQzA4NDA4MDkyMDAwMDlGMEUwMDAwMDA4MDhGCis6MTBBRjAwMDAwMjAwMDA5MDAwMDA5ODBFODAwMTAwODBGMjgxMkZCNkIwCis6MTBBRjEwMDAwMDAwOTgwRTgwMDAwMDgwRTI4MDJGQjYwMDAwOTgwRTlFCis6MTBBRjIwMDA4MDAxMDA4MDMyODA4N0I2MDAwMDAwMDAwMDAwMDBGODM5Cis6MTBBRjMwMDBFMjgwMkYzNDAwMDA3MzBFMDQwMTAwODAwMjgwODFCQzg3Cis6MTBBRjQwMDAwMDAwOUQwRTgwMDEwMDgwQTI4MDJGQjYwMDAwOUQwRUEzCis6MTBBRjUwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGOEZDCis6MTBBRjYwMDA3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjk4Cis6MTBBRjcwMDAwMDAwRjAwRDAwNjAwMDZDMDgwMDZFRjIwMDAwNzQwRTFFCis6MTBBRjgwMDA0RDAwMDAwMDY3RTA4MzlFMDAwMEEzMEU4MDAxMDA4MDVBCis6MTBBRjkwMDBFMjgwMkZCNjAwMDBCQTBFODAwMTAwODBBMjgwMkZCNjlBCis6MTBBRkEwMDAxODAwMDAwMENBMDAwMEY4NzMwQTAzMzlCQTBFMzYwMDEwCis6MTBBRkIwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDAwMDAwMDAwMDBBNDYzCis6MTBBRkMwMDBBODYwOEEzQzAwMDBBNjBFMkZBODAxMjA5OTIyNkVCQTI0Cis6MTBBRkQwMDAwMDAwQTMwRDAwMDAwMDgwMDIwMDAwRjAwMDAwMDAwMDRGCis6MTBBRkUwMDAwMEE4MDFFMDA2MDA5MjMyMDAwMDAwMDAwMDUwMDFFOEQ1Cis6MTBBRkYwMDAwNjAwMDAzMjAwMDBBQTBFMjMyMTAxRTAwNjAwMDBCMjg0Cis6MTBCMDAwMDAzRTAwQTkwRTEyMDAwMDJDODJDRDJFQjIwMDAwMzYxMDk4Cis6MTBCMDEwMDAwNDMwMDBFMDA2ODA4MkIyMDAwMEIyMEUwNDIxMDBFMDlECis6MTBCMDIwMDAwNjgwODFCMjAwMDBCMDBFODAwMTAwODBBMjgwMkZCNkExCis6MTBCMDMwMDAwMDAwQjAwRTEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDU1Cis6MTBCMDQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEOEI3Cis6MTBCMDUwMDAwMjQwODQzMjAwMDBGMDBEMDA2MDAwNkMwODAwNkVGMkM3Cis6MTBCMDYwMDAwMDAwMDAwMDAwMjAwMEUwMDY4MDgxMzIwMDAwMzYxMDYxCis6MTBCMDcwMDAwNDEwMDBFMDA2QzA4NkIyMDAwMDAwMDAyQTE5MDBFMEJCCis6MTBCMDgwMDAwNkMwODQ3MjAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNTg2Cis6MTBCMDkwMDAwMDAwMDAwMDEyMDEwMDAwMDlDMDIxNzIxODAwMzYwMEYzCis6MTBCMEEwMDAwMDAwMDBGODczMEEwMzk5MDAwMDAwMDAwMDAwMDAzQzUzCis6MTBCMEIwMDBEOEUwODMzQzAwMDBCODBFMTIwMDAwNTBGMkMxMzhCNDUyCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMEY4QTI4MDJGMzQwMDAwMDAwMDAzCis6MTBCMEQwMDAwMDAwMDA4ODEyMDAyQzNBMDAwMEZGRkYwMDAwMDA4MEYyCis6MTBCMEUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjkzCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDc4MDkwMDAwMzIwMDAwMDAwMDlECis6MTBCMTAwMDAwMDAwMDBBODAyMDAwMDMyRUUwNUMyMEUwNDAxMDA4MDFCCis6MTBCMTEwMDA4MjBERjZCQzAwMDYwMDAwMDAwMDAwMDgwOTAwMzYzMjZGCis6MTBCMTIwMDAwMDAwQzQwRTAwMDAwMDA0MDlDMDA5OTIwMDI4MDAwMEJECis6MTBCMTMwMDAwMDAwMDAwODA5MDAzNjMyMDAwMDAwMDAwMDAwMDAwNDkyCis6MTBCMTQwMDAwOTgwMDkzMjFFMDAwMDAwMDAwMDYwQzA4N0NEMDAzNzcyCis6MTBCMTUwMDAwMDAwMDAwMDAwMDg2MEMwMDc4MDk3MzIwMDMwMDAwMDQ3Cis6MTBCMTYwMDAwMDAwMDA3ODg5OEQyQTNBMDAwMDM2MTAxMjAwMDA1QzM5Cis6MTBCMTcwMDA1MjgxOTdCNDAwMDAwMDAwMDAwMDAwMDAyOTI0OTAzQTlBCis6MTBCMTgwMDAwODAwMDAwMDAwMDAwMDc4ODkwRDkwMzYwMDAwMDAwMEUzCis6MTBCMTkwMDAwMDAwMDAwNDE5NDA5MDNDMDAwMDAwMDAwMDAwMDBBOERFCis6MTBCMUEwMDA1MjgyMkEzQTAwMDhDNDBFMDIwMTAwODA4MjhEMkFCQzE1Cis6MTBCMUIwMDAwMDAwRDUwRTA2MDAwMDgwMDI0MDkwQkMwMDAwMzYxMDUyCis6MTBCMUMwMDAxMjAwMDBBODAyMDAyMEIyMUUwMDAwMDAwMDAwMDBDMDEzCis6MTBCMUQwMDA4N0NEMDAzNzAwMDAwMDAwMDAwODAwQzAwNzgwOTczMkNDCis6MTBCMUUwMDAwMDAwMzYxMDEyMDAwMDVDNTI4MTJBQjQwMDAwMDAwMEZBCis6MTBCMUYwMDAwMDAwMDAwMDI5MjQ5MDNBMDgwMDAwMDAwMDAwMDA3OEI4Cis6MTBCMjAwMDA4OTBEOTAzNjAwMDBDRTBFMDQwMTAwMDQxOTQwOTBCQzU4Cis6MTBCMjEwMDAwNTAwMDAwMDAwMDAwMDc4ODkwRDkwMzYwMDAwMzYxMDBGCis6MTBCMjIwMDAxMjAwMDA2ODAyODA5N0IyMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCMjMwMDAyOTI0OTAzQTAwMDAwMDAwMDAwMDAwNzg1OTAwOTAzNjYwCis6MTBCMjQwMDAwMDAwRDYwRTk1MDEwMDgwMjIyNDkwQkEwMDAwMDAwMDc0Cis6MTBCMjUwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMEZGRkYwMDAwMDA4MDlECis6MTBCMjYwMDAwMjAwMDA5MDAwMDAwMDAwMDQwMTAwNzhEOTAxMzA3NjRGCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDI4MDlDMDI5MzIwMDAwMDAwMDgyCis6MTBCMjgwMDAwMDAwMDA5Q0IyNDUyODMwMDAwMEU4MEU4NjAxMDAwODRFCis6MTBCMjkwMDAwOTgwMkZCMjAwMDAwMDAwMDAwMDAwMkMwOTQwODEzMjFDCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDcyCis6MTBCMkIwMDAwMDAwMDBGNDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGODU2Cis6MTBCMkMwMDA3MzhBMDIzOTAwMDAwMDAwMDAwMDAwOUMwMjgwOTIzMjY0Cis6MTBCMkQwMDAwMDAwRTcwRTA0MDcwMTgwMDJDMDZFQkMwMDAwRUQwRTA2Cis6MTBCMkUwMDBDMzA3MDFFQ0I2RTQ2RTlBMDAwMEVEMEUwMDA2MDFFQzE3Cis6MTBCMkYwMDBCNkU0NkU5QTAwMDAwMDAwMDAwMDAwMkMwOTA1ODAzMEMyCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDExCis6MTBCMzEwMDAwMDAwMDBGNDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGOEY1Cis6MTBCMzIwMDA3MzhBMDIzOTAwMDAzRjBGMDAwMDAwOUMwMjgwOTJEMjE1Cis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDMwMDMwMDM4MzIwMDAwMDAwMDcwCis6MTBCMzQwMDAwNDAxMDA3OEQ5MDEzMDc2MDAwMERGMEUwMDAwMDA5Qzc3Cis6MTBCMzUwMDBCMjQ1Mjg5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDJFCis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDg4MDJDMEU4MzIwMjAwRjIwRTc3Cis6MTBCMzcwMDBCMDAwMDBBMEYyMEIwMEI5MDAwMDAwMDAwMDAwMDAwQ0JCCis6MTBCMzgwMDBBQkU0QjAzMjAwMDBGNzBFODAwMTAwODBGMjRCRDBCNjgzCis6MTBCMzkwMDAwMDAwMDAwMEEwMDAwMDI4MDkwMDAwMzIwMDAwMDAwMEFBCis6MTBCM0EwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMEY5MEUwNDAxMDA4MDNFCis6MTBCM0IwMDAxMjNFRjhCQTAwMDAwNDBGQTAwMDAwMDRGRDRCRDA5NDI4Cis6MTBCM0MwMDAwMDAwMDAwRjgwMDEwMDgwRDI4MTkyQjYwMDAwMDAwRkMzCis6MTBCM0QwMDA4MDAxMDA4MDIyODFGQ0I2MDAwMDAwMDBBMDAwMDAwNDczCis6MTBCM0UwMDBGRDRCRDAzNDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjZCCis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDgwRjEwMTAwMzQwMDAwMDAwMEE3Cis6MTBCNDAwMDAwMDAwMDA5NDAxQzAyRjMyMDAwMDA0MEYwMDAwMDA5MEUzCis6MTBCNDEwMDBGMTAxMDA5NDAwMDAwMDAwQTAwMDAwODQwMUMwMkYzMjYwCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDgwRjEwMUY4MzQwMDAwMDAwMDdFCis6MTBCNDMwMDAwMDAwMDA5MDAxNDBGODMyMDAwMDAwMDAwMDAxMDAyOEU4Cis6MTBCNDQwMDAwOTAwMDA1MjAwMDAwODBGMDQwMTAwMjgwOTM0QjBCQUI2Cis6MTBCNDUwMDAwMDAwMDUwRkIwMDAwMDgwMDIwMDAwQjAwMDAwMDAwMEY2Cis6MTBCNDYwMDBBMDAwMDAwNEZENEJEMDM1MDAwMDAwMDAwMDAxMDAyOEMyCis6MTBCNDcwMDAwOTAwMDA1MjAwMDAwODBGQjAwMDAwQTgyMkMwMkZCNzNBCis6MTBCNDgwMDAwMDAwMDYwRjA0MDA4NEMwMzdBQ0IwQjIwMDAwMDAwMDFBCis6MTBCNDkwMDBBMDAwMDAwQzBCMDAwMDMyRkZGRjAwMDAwMDAwMDA3ODRECis6MTBCNEEwMDBBOTREQjAzMDAwMDAwRjBGODAwMDAwODAwMjQwQjBCNjAwCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDVFCis6MTBCNEMwMDAwMDAwODQwODBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCNEQwMDBFNzI1MDEzMjAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTZCCis6MTBCNEUwMDAwMDAwMDAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDYzCis6MTBCNEYwMDAwMDE4MDAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEQwCis6MTBCNTAwMDBGMkMxMzg1NDAwMDAxMzBGMDAwMDAwODAwMjAwMDA5MEM4Cis6MTBCNTEwMDAwMDAwMTUwRkIwMDAwMEEwMDIwMDAwQjIwMDAwMDAwMDAzCis6MTBCNTIwMDAwMDAwMDAwQ0FCRTRCMDMyMDAwMDFBMEY4MDAxMDA4MDc0Cis6MTBCNTMwMDAwMjQwRDBCNjAwMDAwMDAwQTAwMDAwMjgwOTAwMDAzMjQwCis6MTBCNTQwMDAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwMUMwRkZECis6MTBCNTUwMDAwNDAxMDA4MDEyM0VGOEJBMDAwMDJEMEZBMDAwMDAwNDg0Cis6MTBCNTYwMDAwRDQwRDA5NDAwMDAyNjBGODAwMTAwODBEMjgxOTJCNjU5Cis6MTBCNTcwMDAwMDAwMjYwRjgwMDEwMDgwMjI4MUZDQjYwMDAwMDAwMDQwCis6MTBCNTgwMDBBMDAwMDAwNDBENDBEMDM0MDAwMDAwMDAwMDAwMDA3ODRFCis6MTBCNTkwMDAwOUMwMkYzMjAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjUxCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMEY1Cis6MTBCNUIwMDAwMDAwMDA4MEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDUxCis6MTBCNUMwMDAwMUMwMkYzMjAwMDAwMDAwMDAwMDAwOTBGMTAxMDAzNEEzCis6MTBCNUQwMDAwMDAwMkQwRjAwMDAwMEZDMDI4MDk3OTIwMDAwMDAwMDg4Cis6MTBCNUUwMDBBMDAwMDA3ODA5QzAyRjMyMDAwMDAwMDAwMDAwMDBGQzFECis6MTBCNUYwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjcxCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDgwRjEwMUY4MzQwMDAwMDAwMDlDCis6MTBCNjEwMDAwMDAwMDA5MDAxNDBGODMyMDAwMDAwMDAwMDAwMDBGQzMzCis6MTBCNjIwMDAwMjgwOTczMjAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjRCCis6MTBCNjMwMDAwMDAwMzEwRjA0MDEwMDI4MDkzNEIwQkEwMDAwMkUwRkI5Cis6MTBCNjQwMDBCMDAwMDA4MDAyMDAwMEIwMDAwMDAwMDBBMDAwMDAwNDc0Cis6MTBCNjUwMDAwRDQwRDAzNTAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjE0Cis6MTBCNjYwMDAwMDAwMzEwRkIwMDAwMEE4MDIwMDAwQjIwMDAwMkYwRjUwCis6MTBCNjcwMDAwNDAwODRDMDM3QUNCMEIyMDAwMDAwMDBBMDAwMDAwQzkxCis6MTBCNjgwMDAwQjAwMDAzMkZGRkYwMDAwMDAwMDAwNzhBOTREQjAzMDMxCis6MTBCNjkwMDAwMDAwMzgwRjgwMDAwMDgwMDI0MEIwQjYwMDAwMDAwMEJCCis6MTBCNkEwMDAwMDAwMDA3ODY5ODE5NzM1MDAwMDAwMDAwMDAwODQwOEUwCis6MTBCNkIwMDAwQjAwN0MzMjAwMDAwMDAwMDAwMDAwMDBFNzI1MDEzMjkyCis6MTBCNkMwMDAwMDQyMDAwMDAwMDgwMDAwODc4RDJBM0EwMDAwMDAwMEI4Cis6MTBCNkQwMDAwMDEwMDAwMDA3MDBCMDMyMDAwMDAwMDAwMDE4MDAwMDU5Cis6MTBCNkUwMDAwNzAwRDAzMjAwMDAwMDAwMTIwMTAwNDhGMkMxMzg1NEI3Cis6MTBCNkYwMDAwMDAwM0MwRjAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRkVGCis6MTBCNzAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDQxMEYxQzQwMDI4MEY5Cis6MTBCNzEwMDAwNkMwOTJCMjQ0MDAwMDAwMDAwMTAwRjhBMjhEMkY1MjMyCis6MTBCNzIwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTkyQjAwMDAwMDAwMDUwCis6MTBCNzMwMDAwMDAxMDA3MDFGMDBGNzVBMDAwMEZGRkYwMDAwMDA4MEFBCis6MTBCNzQwMDAwMjAwMDA5MDAwMDAwMDAwRDUwODAwMDAwNzgwOTIzMjNGCis6MTBCNzUwMDAwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzIwMDQwMDA4MEQ0Cis6MTBCNzYwMDAwMDM4MDAwMDA3MDAzNzMyMDAwMDAwMDBDQTQxMDFFMDQ1Cis6MTBCNzcwMDAwNjgwOTIzMjAwMDA0ODBGMTIwMDAwNDgwMkMwODBCMkRBCis6MTBCNzgwMDAwMDYwMDAwMDAwMDEwMDA4MDg4MDM2NzIwMDAwRkZGRjIyCis6MTBCNzkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDM4MDAwMDVGCis6MTBCN0EwMDAwNzgwOTIzMjAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMkY5Cis6MTBCN0IwMDAwMDAwMDAwMENBM0QwMDBDMDc4MDgzMzIwMDAwMDAwMDNBCis6MTBCN0MwMDAxMjAxMDA0ODAyQzA4MDcyMDAwMDRFMEYwMDAwMDA4MDhECis6MTBCN0QwMDAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEM3Cis6MTBCN0UwMDAwMDAwMDAwMDA0NTcwMTgwMDJDMDZFN0MwMDAwMDAwMEQxCis6MTBCN0YwMDAwMDU3MDFFQzA2ODA5MjcyMDAwMEZGRkYwMDAwMDA4MEZECis6MTBCODAwMDAwMjAwMDA5MDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjVGCis6MTBCODEwMDAwMDAwNTcwRjlEMTEwMjBDMDkwMDZFQjIwMDAwNTgwRjc2Cis6MTBCODIwMDAwMEYwMDExQzA5MDA2RTkyMDAwMDAwMDAwMEI4MDExQzJECis6MTBCODMwMDAwOTAwNkUzMjAwMDA1QTBGMkNDRDAxMTgwOTgwNkVCMjNCCis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDBDQzlDMTkwMzQwMDAwNUQwRjMyCis6MTBCODUwMDAzQjI5MDIwNDA5ODA2RUIyMDAwMDAwMDAwMEQ2MDFFQzEyCis6MTBCODYwMDA1NkMwNkUzNDAwMDAwMDAwMDAwMDAwMENCOUMxOTAzNEQ2Cis6MTBCODcwMDAwMDAwNkMwRjAwQTgwMTA4MDkwMDZFRjIwMDAwNjEwRkMzCis6MTBCODgwMDA5RDAxMDA4MDE3RTA5MEJBMDAwMDAwMDAwMDMwMDA4MEE5Cis6MTBCODkwMDAwN0MwOTEzMjAwMDA2NDBGMDAzODAwODAwNzAwRUU5MjZDCis6MTBCOEEwMDAwMDAwNjQwRjA0MDEwMDgwMDJDMDkxQkMwMDAwMDAwMDkxCis6MTBCOEIwMDAwMEI4MDFFMDA2MDBFRTMyMDAwMDAwMDAwMDcwMDFFMDc4Cis6MTBCOEMwMDAwNjAwODYzMjAwMDA2NjBGMzkwODAwODAwN0MwODVCMjg2Cis6MTBCOEQwMDAwMDAwMDAwMEQ5QzkwMUU4MDY4MDkxMzIwMDAwMDAwMDk0Cis6MTBCOEUwMDBDODExMDA4MDA3NDA5MDMyMDAwMDY5MEYzQjIxMDA4MEEyCis6MTBCOEYwMDAwNzAwODZCMjAwMDAwMDAwREIwMDAwNjAxODAwODYzQUY2Cis6MTBCOTAwMDAwMDAwMDAwMDU4NzgwMUUwMTYyMDg2M0EwMDAwMDAwMDkwCis6MTBCOTEwMDAwMDI5MDA4MDA3MDA4NTcyMDAwMEZGRkYwMDAwMDA4MDAyCis6MTBCOTIwMDAwMjAwMDA5MDAwMDA3MDBGMDIwQzAyODBBMjlCOTBCQ0VECis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMjc4MjkwMDZFMzYwMDAwNzAwRjQxCis6MTBCOTQwMDAwMjAwMDA4MEUyQTU5MEJDMDAwMDAwMDAwMDAwMDAwODlBCis6MTBCOTUwMDAwOTAwMDAzMjAwMDA3MjBGOUY4OTAxNzg0OTIxNkVCQ0Y2Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDc4MDkwMDAwMzIwMDAwMDAwMDI0Cis6MTBCOTcwMDAwMDAwMDAwOEU5QTU5MDNGMDAwMDc4MEYwNDIwMDIwOEFECis6MTBCOTgwMDA4OTlCOTBCRTAwMDAwMDAwMDAwQTAyNThCODlCOTAzNkM4Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDc4NDlBMTkwM0EwMDAwMDAwMDdCCis6MTBCOUEwMDA5Rjg4MDE4MDgyOUI5NzdDMDAwMDAwMDAwMDg5MDFFMDU1Cis6MTBCOUIwMDAwNjgwOTc3MjAwMDAwMDAwMDAwQjAyNThCODlCOTA3NjNBCis6MTBCOUMwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwMDAwN0YwRkQ5Cis6MTBCOUQwMDA4MDAxMDA4MEEyODAyRkI2MDAwMDdFMEYxMjAxMDA3ODQ3Cis6MTBCOUUwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUZDCis6MTBCOUYwMDAwMDAwN0YwRkNBMDAwMEQ4MDI0MDg0OTIwMDAwMDAwMEJGCis6MTBCQTAwMDAwMDAwMDBGOEEyODAyRjM1MDAwMDAwMDAwMDQwMDA2QzBDCis6MTBCQTEwMDA4ODFDODMzQTAwMDAwMDAwMDA0ODAwNEMwODAwNzIzMjg1Cis6MTBCQTIwMDAwMDAwMzYxMDA4NTAwMDE4QzgyMDcyQkMwMDAwMDAwMDRBCis6MTBCQTMwMDAwNjAwMDA4MDYyQTA4MjdDMDAwMDM2MTAwMjAwMDAyMDE4Cis6MTBCQTQwMDA4ODAxODJCQTAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjI1Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDA2MzIwNzAwMDAwMEEwCis6MTBCQTYwMDAwMDA4MDAwMDc3NEEwOTM5MDAwMDAwMDAwMDEwMDAwMEJCCis6MTBCQTcwMDAwNzAwODIzMjAwMDAwMDAwQ0ExOTAwMDAwNzQwODIzMjJECis6MTBCQTgwMDAwMDAwODkwRjEyMDAwMDQwRjJDMTM4QjQwMDAwMDAwMDJECis6MTBCQTkwMDAwMDAxMDBEODAyNDA4NDcyMDAwMEZGRkYwMDAwMDA4MDE3Cis6MTBCQUEwMDAwMjAwMDA5MDAwMDA5MzBGODAwMTAwODBGMkMxODVCNjczCis6MTBCQUIwMDAwMDAwOTAwRjFGNDAwMjg0RTYwMTAwQjQwMDAwOTMwRkM1Cis6MTBCQUMwMDAxRDAxMDBGODIyODEyRkI0MDAwMDkzMEYwMDAwMDBGODQwCis6MTBCQUQwMDA2MjgxMkY5NTAwMDA5MjBGMUQwMTAwODAwMjAwMDBCMENFCis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDE3Cis6MTBCQUYwMDAwMDQwMDI4MDAyNDA2ODMyMDAwMDM2MTAxMjAwMDA2OEU4Cis6MTBCQjAwMDAwMkM1ODVCMDAwMDAwMDAwMUQwMDAwODAwMjAwMDA3MDJBCis6MTBCQjEwMDAwMTAwMDAwMDA0MDEwMDgwQTI4RDJGNzAyQTAwOTYwRjAyCis6MTBCQjIwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDAwMDAxMDBGOEFGCis6MTBCQjMwMDAwMjgxMkY3NDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MENGCis6MTBCQjQwMDA4MEE4MDAwMDA0MDAwMDgwODI4RDJGNzAwMDAwOUYwRkVECis6MTBCQjUwMDA4MDAxMDA4MEQyODAyRkI2MDAwMDlGMEYwNEIwMDA4MENCCis6MTBCQjYwMDAwMjAwNkVCQzAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDVCCis6MTBCQjcwMDAzRDAwQTIwRjEyMDEwMDJDODJDRDJFQjIwMDAwOUQwRkJECis6MTBCQjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEEyMEY4MDAxMDA4MEYxCis6MTBCQjkwMDBGMjgwMkZCNjNDMDBBNTBGMTIwMTAwMkM4MkNEMkVCMkYwCis6MTBCQkEwMDAwMDAwQTAwRjAwMDAwMDgwMDIwMDAwOTAwMDAwQTUwRjIwCis6MTBCQkIwMDA4MDAxMDA4MEIyODAyRkI2MzUwMEEzMEYxMjAwMDAyQzQ4Cis6MTBCQkMwMDA4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRjg0MjgxMkYzNDI4Cis6MTBCQkQwMDA4MDAwMDAwMDA0MDAwMDgwODI4RDJGNzAwMjAwMDAwMEIxCis6MTBCQkUwMDAwNDAxMDA4MEEyOEQyRjcwM0IwMEE3MEYxMjAwMDAyQ0QzCis6MTBCQkYwMDA4MkNEMkVCMjAwMDAwMDAwMDAwMTAwRjgxMjgxMkY3NEU3Cis6MTBCQzAwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMDFDCis6MTBCQzEwMDAwMDE4MDFFODc2MjA4MTM5RUVGRjAwMDAwMDAxMDBGOEVECis6MTBCQzIwMDA4MjhEMkY3MTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDU1Cis6MTBCQzMwMDAwMDAwQjEwRjAwMDAwMTM4MDhDMDZFRjIwMDAwMDAwMEUzCis6MTBCQzQwMDAxMjAxMDA0ODAyQzA4MDcyMDAwMEFFMEYwMDAwMDA4MEE4Cis6MTBCQzUwMDAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDQyCis6MTBCQzYwMDAwMDAwQjMwRjA0MzgwMTc4MDkwMDZFQjIwMDAwMDAwMDM0Cis6MTBCQzcwMDAwMDM4MDFFMDA2MDAwMDMyMDAwMDAwMDBDQTExMDAwMDk4Cis6MTBCQzgwMDAwNzgwODIzMjAwMDBCNjBGMkUxOTAwMDAwNzgwOTdCMjlECis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDI4RTk4MTkyMzQwMDAwQkIwRjgyCis6MTBCQ0EwMDAyNzMxMDAwMDA3QzAyQ0IyMDAwMDAwMDBENTA4MDAwMEJBCis6MTBCQ0IwMDAwNzAwODczMjAwMDAwMDAwQzcwMDAwMjhFOTgwOTIzNEE2Cis6MTBCQ0MwMDAwMDAwMDAwMDAwNDAwMUUwMDYwMDg3MzIwMDAwMDAwMDk0Cis6MTBCQ0QwMDAwMDAwMDAwOEQ4ODE4MDM0MTAwMDAwMDAwMDM5MDAwMDA2Cis6MTBCQ0UwMDBFN0EwOTI3OTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEIyCis6MTBCQ0YwMDAwMDAwQkQwRjEyMDAwMDQ0MTJFNDM4QjIxODAwMzYwMEY0Cis6MTBCRDAwMDAwMDAwMDBGODczMEEwM0Y5MDAwMEMyMEYwNDAxMDA4MDZDCis6MTBCRDEwMDAwMjgwMkRCQzAwMDBCRTBGNjcwMDAwRjhBMjgwMkZCNTg2Cis6MTBCRDIwMDAwMDAwMzYxMDEyMDAwMEU4MDJDMDIxQjIwMDAwMDAwMDNFCis6MTBCRDMwMDAwMDAxMDBEODAyNDAwMDcyMDAwMEZGRkYwMDAwMDA4MEY4Cis6MTBCRDQwMDAwMjAwMDA5MDAwMDBDNzBGMDQzMDAwODA4MjlCODFCQzdECis6MTBCRDUwMDAwMDAwMDAwMENBMDEwMEY4MDI4MDJGMzUwMEEwQzYwRkM1Cis6MTBCRDYwMDAxMjAwMDA0MEEyOEQzOUIyMDBDMENCMEYwNDM4MDA3ODE5Cis6MTBCRDcwMDA4OThENkVCMDEwMDBDQjBGOUYwMTAwRjhFMkE1MkZCOTlFCis6MTBCRDgwMDAwMDAwMDAwMDAwNTgwMUVDMDZDMEVFMzIwMDAwMDAwMDg4Cis6MTBCRDkwMDAwMDAwMDA4MDAyMDAwMDMwMDAwMDAwMDAwNDI4MDAxOEFECis6MTBCREEwMDAwOTAwNkU3MjAwMDBCQTBEMDAwMDAwODAwMjAwMDBGMDcxCis6MTBCREIwMDAwMDAwQTMwRDAwQTgwMTIwMDkwMDZFOTIwMDAwRkZGRjAzCis6MTBCREMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEQ0MEYwNEIwMDA4MDRBCis6MTBCREQwMDA4MjlCODFCQzAwMDAwMDAwMDBCODAwRTg4NjgwNkUzNEMxCis6MTBCREUwMDAwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzUwOEEwMDAwMEMyCis6MTBCREYwMDAxMjAxMDA0MEEyQ0QzOTcyMDAwMEQyMEYwMDAwMDA4MDc1Cis6MTBCRTAwMDAwMjAwMDA5MDAwMDAwMDAwMDBCODAwRTg4NjgwNkUzNDU4Cis6MTBCRTEwMDAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwRkZGRjMxCis6MTBCRTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERBMEYzM0NEMDFCQzVBCis6MTBCRTMwMDAwODgwNkVCMjAwMDAxNDEwMDAwMDAwMjgyOTIyRUVEQ0Y5Cis6MTBCRTQwMDAwMDAwREYwRjAwMDAwMDgwMDIwMDAwOTAwMDAwREYwRjA0Cis6MTBCRTUwMDAwNEI4MDEyODA5MDA2RUIyMDAwMERGMEY5RjcxMDE4MDU1Cis6MTBCRTYwMDBDMjIxNkVCQzAwMDAzNjEwOUYwMDAwMjhBOTI0RUVCQzQxCis6MTBCRTcwMDAwMDAwMTQxMDAwMDAwMDI4MTk4MDkyREYwMDAwMDAwMDZDCis6MTBCRTgwMDAwMDAwMDA4MDAyMDAwMDMwMDAwMEYyMEYwMjgxMDE4MEZCCis6MTBCRTkwMDA4MjlCOTBCQ0VFMDVFQTBGMDYwQzAyODA4MjhENkVCQzgwCis6MTBCRUEwMDAwMDkwNEMwMDAwMDAwMDg0MDIwMDM3MzIwMDAwRTQwRkQ0Cis6MTBCRUIwMDBCODAxMDA4MDAyMDAwMEIwMDAwMEUyMEYwMDAwMDA4MDI2Cis6MTBCRUMwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwQzQwMzgwOTAzMkQ3Cis6MTBCRUQwMDAwMDAwMDAwMDAwQjAwMUUwOTYyMTZFM0MwMDAwMDAwMDcwCis6MTBCRUUwMDA2MTk4MDFFMDA2MDA4NzMyMDAwMDAwMDAwMEQ0MDFFQ0Y4Cis6MTBCRUYwMDAwNjAwMDAzMjAwMDAwMDAwQTgwMDAwNzg0OTQwM0MzN0VFCis6MTBCRjAwMDAwMDAwRjcwRjAwMDAwMDA4RTlBNTkwOUE2MDg5MjAwMDYyCis6MTBCRjEwMDAwMDAwMDA4NDAyMDAzNzMyMDAwMEVEMEZCODAxMDA4MEZECis6MTBCRjIwMDAwMjAwMDBCMDAwMDBFQjBGMDAwMDAwODAwMjAwMDA5MDUzCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMEM0MDM4MDkwMzIwMDAwMDAwMEY4Cis6MTBCRjQwMDAwMEIwMDFFMDk2MjE2RTNDMDAwMDAwMDA2MTk4MDFFMDI1Cis6MTBCRjUwMDAwNjAwODczMjAwMDAwMDAwMDBENDAxRUMwNjAwMDAzMjI5Cis6MTBCRjYwMDAwMDAwRjcwRkE4MDAwMDA4MTk4RjkwOUEwMDAwMDAwMDQ5Cis6MTBCRjcwMDAwMDAwMDA3ODk5QTE4OTNFMDAwMDAwMDAwMDAwMDAwODQwCis6MTBCRjgwMDBFOUE1OTAzQTAwMDAwMDAwMDBCMDAxRTA5NjIxNkUzQzY3Cis6MTBCRjkwMDAwMDAwMDAwMDYxOTgwMUUwMDYwMDg3MzIwMDAwMDAwMDA4Cis6MTBCRkEwMDAwMEQ0MDFFQzA2MDAwMDMyMDAwMEZBMEYwNjAwMDA4MDA5Cis6MTBCRkIwMDA3MkEyOTBCQzAwQzBGRjNGMDA4MDAxRTAwNjAwMzczMjUzCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDA4MDlDMDg5MzIwMDAwRkYwRkQ3Cis6MTBCRkQwMDAwNDc5MDE4MDgyMUI4N0JDMDAwMEZEMEYwNEIwMDA4MDQzCis6MTBCRkUwMDAwMjAwNkVCQzAwMDAwMTEwRDk5MDAxRTAwNjgwOTA5MjIyCis6MTBCRkYwMDAwMDAwMDQxMDgwMDAwMDgwNTI4MTJGQjYwMDAwMDQxMDYxCis6MTBDMDAwMDBENTQxMDFFMDA2MDA4NzkyMDAwMDAxMTAzQzkwMDFFMDVDCis6MTBDMDEwMDAwNjgwOTBCMjAwMDAwMDAwMDBDODAxRTgwNkMwOEIzMjI0Cis6MTBDMDIwMDAwMDAwMDAwMDk1MDEwMDgwMDI4MDJGNzIwMDAwMDUxMEMyCis6MTBDMDMwMDA5RjQxMDE4MDgyMUI4N0JDMDAwMDAwMDAwMDAxMDA4MDNFCis6MTBDMDQwMDAwMjAwMDA3MDAwMDAwMDAwRDk5MDAxRTAwNjgwOTAzMkVDCis6MTBDMDUwMDAwMDAwMDAwMDAwMDEwMEY4NzI4MDJGNzQwMDAwRkZGRjU0Cis6MTBDMDYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDBEMTA5RkQ4MDE4MEE5Cis6MTBDMDcwMDAyMjIxNkVCQzAwMDAwMDAwMEIwMTAwODAwMjAwMDA3MDU1Cis6MTBDMDgwMDAwMDAwMEQxMDlGRTAwMTgwQzIyMTZFQkMwMDAwMDAwMDg2Cis6MTBDMDkwMDAwQjAxMDA4MDAyMDAwMDcwMDAwMDBEMTA5RkIwMDE4MEI1Cis6MTBDMEEwMDBEMjIxNkVCQzAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDgwCis6MTBDMEIwMDAwMDAwMEYxMDA2NjgwMTgwODI1Qjg3QkMwMDAwMDAwMDUyCis6MTBDMEMwMDAwMDY4MDFFMDA2NDA4NzMyMDAwMDExMTAzN0IwMDFFMDNGCis6MTBDMEQwMDAwNjQwODdCMjAwMDAwMDAwMDAwMDAwRjhEMjgwMkYzNDM0Cis6MTBDMEUwMDAwMDAwMDAwMDAwRDgwMUUwMDY4MDg0MzIwMDAwMDAwMDVCCis6MTBDMEYwMDAwMEUxMDFFMDA2MDA4NzcyMDAwMEZGRkYwMDAwMDA4MDAxCis6MTBDMTAwMDAwMjAwMDA5MDAwMDAyMDEwMDRDMTAxODQwMjAwNkVCMjAxCis6MTBDMTEwMDAwNTAwMDAwMDAwQzAwMUU4ODY4RDkyMzcwMzAwMDAwMDkyCis6MTBDMTIwMDAwMEM0MDFFODg2OEQ5MjM3MDAwMDAwMDAwMDAwMDA4MDA2Cis6MTBDMTMwMDAwMjAwMDAzMDAzMDAwMDAwMDBDMDAxMkM4OThENkUzNjIzCis6MTBDMTQwMDAwMDAwMDAwMDAwQzQwMTJDQTlEQjkyM0EwMDAwMDAwMEFFCis6MTBDMTUwMDAwMDAwMDAyQzI5QzA5MjM2MDAwMDAwMDAwMDAwMDAyQ0Q2Cis6MTBDMTYwMDAxOUZCOTIzRjAwMDAwMDAwMDAwMDAwMjgyOTgwOTIzQTRECis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDJDQTlFNDkyM0YwMDAwMDAwMDM1Cis6MTBDMTgwMDA2RkNDMDFFODI2RkI5MjNFMDAwMDAwMDAwMEI5MDFFMDAwCis6MTBDMTkwMDAwNjAwMDA1MjAwMDAwMDAwMDAwMDAwOTQwMjgwOTIzMjZECis6MTBDMUEwMDAwMDAwMDAwMDAwQzAwMUUwMDY0MDI4MzIxMDAwMDAwMDNFCis6MTBDMUIwMDA2RkNDMDFFODg2Q0QyQTM2MDAwMDAwMDAwMEI5MDFFMDBFCis6MTBDMUMwMDAwNjAwMDA1MjAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDA3Cis6MTBDMUQwMDAwMDAwMDAwMDAwOTAwMUJDMDgwMDZFMzIwMDAwMDAwMDZBCis6MTBDMUUwMDAwMEIwMDFCQzg4REI4QjNFMDAwMDAwMDAwMDk4MDFCQzYxCis6MTBDMUYwMDA4OERCOEIzQTAwMDAzMDEwOUYwMDAwQkM4OEUxOEJCQ0NDCis6MTBDMjAwMDAwMDAwMzAxMDA0MEMwMjQwQThEQjhCQkUwMDAwMDAwMEQwCis6MTBDMjEwMDAwMEIwMDAwNDg4MUI4NDNFMDAwMDJEMTAwNEIxMDA4MDkzCis6MTBDMjIwMDA4MjVCODBCQzAwMDAwMDAwMDAwMTAwRjhDMjgwMkY3NDE3Cis6MTBDMjMwMDAwMDAwMDAwMDA0MEMwMjgwQTI1QjgwN0MwMDAwMzAxMDMzCis6MTBDMjQwMDAwNDY4MDE3ODE5MDA2RUI2MDAwMDAwMDAwMjAwMDA4MDRBCis6MTBDMjUwMDBFMjY1ODA3QzAwMDAwMDAwMDAwMDAwODgxMjAwMkMzQTlCCis6MTBDMjYwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMEI2Cis6MTBDMjcwMDAwMDFDMDFFODc2MjA4MTM5RUVGRjAwMDAwMDAxMDBGODgzCis6MTBDMjgwMDA4MjhEMkY3MTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEVGCis6MTBDMjkwMDAwMDAwMzYxMDAwMDAwMEI0MEY0MEZCOTQwMDAwMDAwMEM2Cis6MTBDMkEwMDAwMDAwMDA4ODBGNDAyQjMyMDAwMDAwMDAwMDAwMDA5MENBCis6MTBDMkIwMDAwRjAwMjgzMjAwMDAwMDAwMDAwMDAwOTQwRjAwMjkzMjE3Cis6MTBDMkMwMDAxMDAwMDAwMDAwMDAwMEI4NUY0NjE4MzlGRjAwMDAwMEIxCis6MTBDMkQwMDAwMDAwMDA5QzBGMDAzNjMyMDAwMDAwMDAwMDAwMDA5Q0FGCis6MTBDMkUwMDA1RkNBRjkzNTAwMDAwMDAwMDAwMDAwNDQwM0MwRjkzMkM1Cis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMEU0MDMwMDAwMzI0MTAwMDAxMEQ0Cis6MTBDMzAwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNEZECis6MTBDMzEwMDAwMzAwMDAzMjQwMDAwMDEwMDAwMDAwRTAwMzAwMzczMjRDCis6MTBDMzIwMDAwMDAwNDUxMDY3MDAwMDk4MEY4MDJBQjIwMDAwMDAwMDRFCis6MTBDMzMwMDAwMDAwMDBBODAyMDAwMDMyMDAwMDQzMTAxMkMxODZFMDk1Cis6MTBDMzQwMDAwN0MwMjFCMjAwMDAwMDAwMDBCODg2QzAwNjgwMkEzMjczCis6MTBDMzUwMDA0QzQyMDAwMDAwMDAwMEE4MDIwMDM2MzI0NzEwNTgxMTdECis6MTBDMzYwMDAwMDAwMDBCMDBGMDAzNjkyMDAwMDAwMDAwMDAwMDA5Q0FBCis6MTBDMzcwMDAwMjAwMDAzMjAwMDE0NDExMDAwMDAwQUMwRjAwMzZEMjcwCis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMEFDMEY4MDJBMzIwMDIwMDAwMEY2Cis6MTBDMzkwMDAwMDAwMDBBODAyMDAzNjMyMDAwMDAwMDAwMDAwMDA5Q0VGCis6MTBDM0EwMDAwRjAwN0UzMjAwMDAwMDAwMDAwMDAwQTAwRjAwN0UzMjZGCis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMEE0MEYwMDdFMzIwMDAwMDAwMDFBCis6MTBDM0MwMDAwMDAwMDBBODBGMDA3RTMyMDAwMDAwMDAwMDAwMDBBODVFCis6MTBDM0QwMDAwMkMwRkEzMjAwMDAwMDAwMDAwMDAwRTAwN0MwRjkzMjlECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMEZBMzIwMDAwMDAwMDNBCis6MTBDM0YwMDAwMDAwMDBFMDA3NDBGQTMyMDAwMDVCMTAwMDAwMDBFMDlGCis6MTBDNDAwMDAwNzgwRkFEMjAwMDAwMDAwMDAwMDAwRTAwNzgwRkIzMjQ1Cis6MTBDNDEwMDAwMTAwODIxMDA0MDEwMEI0OEY0REZCQjAwMjAwMDAwMDQ3Cis6MTBDNDIwMDAwMDAwMDBBMDAyMDAwMDM5NDA4MDAwMDAwMDAwMDAwQzY1Cis6MTBDNDMwMDBBQkNEQjAzMjEwMDAwMDAwMDAwMDAwMEM1QkNBQjAzOTc4Cis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDBDMkJGRUIwMzIwMDAwODExMTQzCis6MTBDNDUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBGOEQyCis6MTBDNDYwMDAwMzAwMDEzMjAwMDAwMDAwMDAwMTAwRTAwNzgwM0Y1MjlECis6MTBDNDcwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAyMzkwMDAwMDAwMDc0Cis6MTBDNDgwMDAwMDAwMDA0NDUzMEExNjM1MDAwMDAwMDAwMDAwMDA5QzI0Cis6MTBDNDkwMDAwRjgwOTYzMjAwMDAwMDAwMDAwMDAwQTAwRkMwOTYzMjBFCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMEE0MEYwMDk3MzJBMjYwMDMwMDBCCis6MTBDNEIwMDAwMDAwMDA1ODAzMDAzNzMyNjgxMDAwMDAwMDAwMDA1Q0U0Cis6MTBDNEMwMDAwMzAwMzYzMjAwMDAwMDAwMDAwMDAwNTA4MzBEMDAzNEVECis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDQ4ODMwRDAwMzQwMDAwMDAwMDUwCis6MTBDNEUwMDAwMDAwMDA0NDUzMEEwMDM0MDAwMDM2MDAwMDAwMDA4MEMxCis6MTBDNEYwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwNjgwOUMwRjkzMjRFCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDZDMDkwMEZBMzIwMDAwMDAwMDhBCis6MTBDNTEwMDAwMDAwMDA3MDA5NDBGQTMyMDAwMDdBMTAwMDAwMDA4MDJDCis6MTBDNTIwMDAwMjAwMDA5MDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOUExCis6MTBDNTMwMDAwMDAwNkYxMDgwMDEwMDgwMTI0MEIwQjYwMDAwMDAwMEMzCis6MTBDNTQwMDAwMDAwMDAwNDNCNDBCMDMzMDAwMDAwMDAwMDAwMDAwNDg1Cis6MTBDNTUwMDBGRDRCRDAzNTAwMDA3MzEwMDAwMDAwMEMwQjAwOTc5MkNCCis6MTBDNTYwMDAwMjAwMDAwMDAwMDAwMEEwRjIwQjAwMzkwMDAwNzMxMDcwCis6MTBDNTcwMDAwMDAwMDAwNDZCMDE5Nzk0MDAwMDczMTAxMjAwMDA2ODIzCis6MTBDNTgwMDAwOTQwMjBCMjAwMDA3NDEwMTIwMDAwNkMwOTQwMjBCMjczCis6MTBDNTkwMDAwRDAwMDAwMDAwMDAwMEZDQTJFNTE2MzgwMDAwNzkxMDM0Cis6MTBDNUEwMDA5RjAwMDA4MDAyODA5NkIyMDAwMDAwMDAwMDAwMDA3MDMyCis6MTBDNUIwMDAwOUMwOTYzMjAwMDA3QTEwMDAwMDAwNkMwOUMwRkQ5MjlDCis6MTBDNUMwMDAwMDAwNzkxMDEyMDAwMDcwMDk0MDIwQjIwMDAwMDAwMDQ1Cis6MTBDNUQwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEOEIzCis6MTBDNUUwMDAwMjAwMDAzMjAyMDA3MzEwMDQwMTAwQkNBRjI1MTdCODJFCis6MTBDNUYwMDAwNjAwNzExMDA0MDAwMEJDQUY2NTE2QjgwMDAwNkMxMDk2Cis6MTBDNjAwMDAwNDAwMDA4MDIyQzBGQkJDMDAwMDhBMTAwNDAwMDA4MEVGCis6MTBDNjEwMDAxMkMxRkJCQzIwMDA3MzEwMDQwMTAwODA4MkNERkJCQzYyCis6MTBDNjIwMDAwMjAwMDAwMDAwMDAwMEEwRjIwQjAwMzkwMDAwOEIxMDk3Cis6MTBDNjMwMDAwMDAwMDA4MDAyMDAwMEQwODQxMDAwMDAwMDAwMDA4ODhDCis6MTBDNjQwMDA4MkNERjkzQTAwMDA3QTExMDAwMDAwODAwMjAwMDA5MENCCis6MTBDNjUwMDAwMDAwQjMxMDAwMDAwMDgwMDIwMDAwOTAwMDAwQjQxMDQxCis6MTBDNjYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEI4MTAwMDAwMDA4MDcwCis6MTBDNjcwMDAwMjAwMDA5MDAwMDBDMDEwMDAwMDAwODAwMjAwMDA5MDQ2Cis6MTBDNjgwMDAwMDAwMTkxMTAwMDAwMDgwMDIwMDAwOTAwMDAwNzMxMEVCCis6MTBDNjkwMDAwMDAwMDBEQzBGMDA5NzkyMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDNkEwMDAwNzAwMDMzMjQwNDIwMDAwMDAwMDAwQTgwMjAwMzYzMkJBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwMDAwMDhGCis6MTBDNkMwMDAwMDEwMDAwMDA3MDA5NzMyMDAwMDAwMDAwMDE4MDAwMDcyCis6MTBDNkQwMDAwN0MwOTYzMjA4ODA5MDEwMTIwMDAwNDAwMjgwMzZCMkU3Cis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwOTIxMEY2Cis6MTBDNkYwMDAxMjAwMDA5QzBGQzAyMUIyMUQwMDk1MTAwNDAwMDA4MEE0Cis6MTBDNzAwMDA3MkJFMTdCODAwMDA5MjEwMDAwMDAwRjgxRTgwRUY5QTY5Cis6MTBDNzEwMDAxMzAwMDAwMDAwMDAwMDlDN0ZCRTE3MzgwMDAwOTgxMDM2Cis6MTBDNzIwMDAwNDAwMDA4MDEyQzBGOUJDMDAwMDkyMTAwMDAwMDBGODY0Cis6MTBDNzMwMDAxRTgwRUY5QTAwMDAwMDAwMDAwMDAwOUMwRjAwN0UzMjc3Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMEEwMEYwMDdFMzIwMDAwMDAwMDhBCis6MTBDNzUwMDAwMDAwMDBBNDBGMDA3RTMyMDAwMDAwMDAwMDAxMDAwMDc1Cis6MTBDNzYwMDAwNzAwRkE1MjAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMkE2Cis6MTBDNzcwMDA0QzQyMDAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDE5Cis6MTBDNzgwMDAwMDA4MDAwMDA3ODAyQTMyMDAwMDZFMTEwMDAwMDA4MEJGCis6MTBDNzkwMDAwMjAwMDBEMDAwMDA3MjExMDAwMDAwODAwMjAwMDBEMEYyCis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDBDQ0JDMUIwMzQwMDAwMDAwMDBECis6MTBDN0IwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEOEQxCis6MTBDN0MwMDAwMjAwMDAzMjAwMDBGMTBFMDAwMDAwMjgwOUMwQjBEMkMzCis6MTBDN0QwMDAwMDAwQTIxMDA0MDAwMDgwMDI4MDkyQjIwMDAwQTYxMEE3Cis6MTBDN0UwMDAxMjAwMDA5QzBGQzAyMUIyMUQwMEE5MTAwNDAwMDA4MDlGCis6MTBDN0YwMDA3MkJFMTdCODAwMDBBNjEwMDAwMDAwRjgxRTgwRUY5QTY1Cis6MTBDODAwMDAxMzAwMDAwMDAwMDAwMDlDN0ZCRTE3MzgwMDAwQUMxMDMxCis6MTBDODEwMDAwNDAwMDA4MDEyQzBGOUJDMDAwMEE2MTAwMDAwMDBGODVGCis6MTBDODIwMDAxRTgwRUY5QTAyMDBBRTEwMDQwMTAwQjQ4RjRERkJCMEUxCis6MTBDODMwMDAwMDAwNzMxMDAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMDVCCis6MTBDODQwMDAwMDAwMDBGODkzNDAwMTM5MDAwMDAwMDAwMDAwMDBCNDJGCis6MTBDODUwMDAxRjQwRkIzNUZFMDAwMDAwMDAwMDAwNDgwMzAwMzYzMjk4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDQ0MDMwMDAwMzQwMDAwQTIxMDlCCis6MTBDODcwMDAwMDAwMDAwQzhCQzFCMDk0MDAwMDdFMTEwMDA4MDAwMDg1Cis6MTBDODgwMDAwNzQwRkE5MjAwMDA2RTExMDAwODAwMDAwNzQwRkFEMjNCCis6MTBDODkwMDAwODgwQjUxMDEyMDAwMDUwMDI4MDM2QjIwMDAwNzMxMUZCCis6MTBDOEEwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMDgwMTEwMDAwMDA4MDI1Cis6MTBDOEIwMDAwMjAwMDA5MDAwMDgwMDAwMDAwMDAwOUMwRjAwMzYzMkNCCis6MTBDOEMwMDAwMDQ0MDAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDEyCis6MTBDOEQwMDAwMDAwMDBBMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBFMEE0Cis6MTBDOEUwMDAwNzAwQjAzMjAwMDAwMDAwMDAwMDAwQTAxMjAwMkEzQTQ5Cis6MTBDOEYwMDAwMDAwQkIxMDA0MDEwMDlDMUZDMEY5QkMwMDQ0MDAwMEY0Cis6MTBDOTAwMDAwMDAwMDBBODAyMDAzNjMyMDIwMDdEMTEwMDAwMDBBMEU1Cis6MTBDOTEwMDBGMjBCMDA5OTAwMDBDODEwMDQwMTAwODAwMjQwRkFCMjM2Cis6MTBDOTIwMDAwMDQ0MDAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwQ0ExMEQ3Cis6MTBDOTMwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMEQ3MTAwMDAwMDA4NDNBCis6MTBDOTQwMDAwMjAwMDBEMjAwMDAwMDAwMDAwMDAwRTAwN0MwM0MzMkZFCis6MTBDOTUwMDAwMDAwQzQxMDhFMDEwMDgwMDI0MDI4QjIwMDQ0MDAwMDk0Cis6MTBDOTYwMDAwMDAwMDBBNDBGMDAzNjMyMDAwMEIzMTAwMDAwMDA4MDY5Cis6MTBDOTcwMDAwMjAwMDA5MDAwNDQwMDAwMDAwMDAwQTQ4RjRERkEzQTJECis6MTBDOTgwMDAwMDAwQjMxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEQyCis6MTBDOTkwMDAwMDAwMDA5QzBGMDAwMDMyMTAwMDAwMDEwMDAwMDBBQ0ZECis6MTBDOUEwMDAwRjAwMzczMjAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMEQxCis6MTBDOUIwMDAwODAwQ0MxMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDBBCis6MTBDOUMwMDAwMDAwMDA5QzBGMDAwMDMyMEUwMDAwMDEwMDAwMDBBQ0NGCis6MTBDOUQwMDAwRjAwMzczMjAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMEExCis6MTBDOUUwMDAwQjAwRDAxMDA0MDEwMDgwODJDREY5QkMyMDAwMDAwMEIzCis6MTBDOUYwMDAwMDAwMDA5QzBGMDAzNjMyMEYwMDAwMDEwMDAwMDBBQzY4Cis6MTBDQTAwMDAwRjAwMzczMjAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMDcwCis6MTBDQTEwMDAyNzAwRDQxMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDgyCis6MTBDQTIwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMDAwMDAwMDAwMDA5Qzk3Cis6MTBDQTMwMDAwRjAwMDAzMjBGMDAwMDAxMDAwMDAwQUMwRjAwMzczMjgxCis6MTBDQTQwMDAwMDAwREMxMDAwMDAwMDgwMDIwMDAwRDAyMDAwRDkxMDlGCis6MTBDQTUwMDAwNDAxMDA4MDgyQ0RGOUJDMDAwMDAwMDAwMDAxMDA4MENDCis6MTBDQTYwMDAwMjAwMDA1MDAwMDAwMDAwMDAwMDAwRTQwM0MwRjkzMkEyCis6MTBDQTcwMDAwRDAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDVDCis6MTBDQTgwMDAwMDAwMDBFMDAzQzBGQTMyMDAwMDAwMDAwMDAwMDBFMEY3Cis6MTBDQTkwMDAwNzQwM0UzMjAwMDAwMDAwMDAwMTAwOUMxRkMwRjk1QTEwCis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMEUwMDNDMEY5MzIwMDAwMDAwMEI4Cis6MTBDQUIwMDAwMDAwMDBFMDA3NDAzRTMyMDAwMDAwMDAwMDAwMDA5QzQzCis6MTBDQUMwMDAxRkMwRjkzQUZGMDAwMDAwMDAwMTAwQUM4RkNERjk1MDAzCis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDlDMEZDMDJGMzIwMDAwMDAwMDhBCis6MTBDQUUwMDAwMDAwMDBGQzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBFMDM2Cis6MTBDQUYwMDAwNzgwM0UzMjAwMDAwMDAwMDAwMDAwRkMxMkMwMkYzQTA4Cis6MTBDQjAwMDAwRjAwRTcxMDA0MDEwMDgwODJDRDJGQkMwMDAwMDAwMDYwCis6MTBDQjEwMDAwMDAwMDBFMDA3ODAzRTMyMDAwMDAwMDAwMDAxMDBGQzQxCis6MTBDQjIwMDAwMkMwRjk1MjAwMDAwMDAwMDAwMDAwRTAwNzAwM0EzMkE1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMEUwMDc0MDNBMzIwMDAwMDAwMDYyCis6MTBDQjQwMDAwMDAwMDBFMDA3ODAzQTMyMDAwMDAwMDAwMDAwMDBFMDMyCis6MTBDQjUwMDAwN0MwM0EzMjAwMDAwMDAwMDAwMDAwOUMwRkMwMkYzMkQ2Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMDAwMDk1Cis6MTBDQjcwMDAwMDAwMDBFMDA3MDAzRDMyMDAwMDAwMDAwMDAwMDBFMDdGCis6MTBDQjgwMDAwNzQwM0QzMjAwMDBGMjEwODMwMTAwRkMxMkMwMkZCQUIyCis6MTBDQjkwMDAwMDAwMDAwMDAwMDEwMEZDMDJDMEY5NTIwMDAwMDAwMDhCCis6MTBDQkEwMDAwMDAwMDA5QzBGMDAwMDMyMEMwMDAwMDAwMDAwMDAwODk0Cis6MTBDQkIwMDA3MzNFMDAzOTAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMjQyCis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDlDMUZDMEY5M0E3MDAwRjcxMDQwCis6MTBDQkQwMDAwNDAxMDA4MDgyQ0RGOUJDMDAwMDAwMDAwMDAwMDAwQ0MwCis6MTBDQkUwMDAwMzAwMDAzMjAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMkM3Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDEwMDMwMDAwMzIwMDAwMDAwMEYwCis6MTBDQzAwMDAwMDAwMDBFMDA3MDAzMDMyMDAwMDAwMDAwMDAwMDA5QzNGCis6MTBDQzEwMDAwRjAwMDAzMjAwMDAwMDAwMDAwMDAwQTAwRkMwMjkzMjA5Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDlDMDJDMEY5MzIwMDAwMDAwMDdCCis6MTBDQzMwMDAwMDAwMDBBNDBGQzAyQzMyMDAwMDAwMDAwMDAwMDA5Qzg3Cis6MTBDQzQwMDAwMjAwRkEzMjE4MDAwMDAwMDAwMDAwMkM3MzdFRkEzOTRFCis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDMwMzIwMDAwMDAxMTdBCis6MTBDQzYwMDA4NTAxMDA5QzFGQzBGOUJBMDAwMDAwMDAwMDAxMDA4MDhGCis6MTBDQzcwMDAwMjAwMDA1MDAxMDAwMDAxMDAwMDAwOUMwRjAwMzczMjRDCis6MTBDQzgwMDAwMDAwRTExMDAwMDAwMDgwMDIwMDAwRDAwRTAwMEYxMTMzCis6MTBDQzkwMDAwNDAxMDA4MDgyQ0RGQUJDMDAwMDAwMDAwMDAwMDBFMDJBCis6MTBDQ0EwMDAwNzAwMDAzMjAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjMyCis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwMDkxMTQxCis6MTBDQ0MwMDAwMDAwMDA5QzNGQzBGOTlBMUMwMDA5MTEwNDAxMDA4MDdCCis6MTBDQ0QwMDA4MkNERkFCQzAyMDBFMTEwMDAwMDAwOUM4RkNERjlEQTkxCis6MTBDQ0UwMDAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTAwMTAwMDAwMjZFCis6MTBDQ0YwMDAwMDAwMDA5QzBGMDAzNzMyMDAwMEUxMTAwMDAwMDA4MEFGCis6MTBDRDAwMDAwMjAwMDBEMDBFMDAxNzExMDQwMTAwODA4MkNERkFCQzkxCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwMTMxMUQ2Cis6MTBDRDIwMDAwMDAwMDA5QzFGQzBGOTlBMjYwMDEzMTEwNDAxMDA4MDI2Cis6MTBDRDMwMDA4MkNERkFCQzAwMDAwMDAwMDAwMTAwODAwMjAwMDA1MDFCCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMEE4MEY0MDI5MzIwMDQ0MDAwMDRECis6MTBDRDUwMDAwMDAwMDBBODAyMDAzNjMyMDAwMDA4MTEwMDAwMDA4MDI4Cis6MTBDRDYwMDAwMjAwMDBEMDAwMDAxMjExMDAwMDAwODAwMjAwMDBEMDdDCis6MTBDRDcwMDAwMDAwRTUxMDAwMDAwMDgwMDIwMDAwRDAwMDAwMDAwMDZDCis6MTBDRDgwMDAwMDAwMDBFMDA3ODAxODMyMDAwMDAwMDAwMDAwMDBFMDEyCis6MTBDRDkwMDAwNzQwMUEzMjAwMDAwMDAwMDAwMDAwRTAwNzAwMUEzMkNECis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMEUwMDc4MDFBMzIwMDAwMDAwMEQwCis6MTBDREIwMDAwMDAwMDBFMDA3QzAxQTMyMDAwMDAwMDAwMDAwMDBBMEUwCis6MTBDREMwMDAwRjAwMDAzMkEyNjAwMzAwMDAwMDAwNTgwMzAwMzczMjU5Cis6MTBDREQwMDAyQjExMDAwMDAwMDAwMDVDMDMwMDM2MzIwMDAwMDAwMDUwCis6MTBDREUwMDAwMDAwMDA5QzBGODAyQTMyMDAwMDJCMTEwNDAwMDA4MEZDCis6MTBDREYwMDAwMjQwMjlCMjAwMDAwMDAwMDAwMDAwNTA4MzNFMDAzNEQxCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDQ4ODMzRTAwMzQwMDAwMDAwMEU1Cis6MTBDRTEwMDAwMDAwMDA0NDUzMEEwMDM0MDAwMDJDMTEwMDAwMDA4ODc4Cis6MTBDRTIwMDAwRjQwMkI5MjAwMDAwMDAwMDAwMDAwOTAwRjAwMjgzMkZECis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDk0MEYwMDI5MzIwMDAwMDAwMEY0Cis6MTBDRTQwMDAwMDAwMDA5ODBGODAyQTMyMDAwMDAwMDAwMDAwMDBBOEI3Cis6MTBDRTUwMDAwMkMwRjkzMjMxMTE1ODExMDAwMDAwQjAwRjAwMzY5MkIzCis6MTBDRTYwMDAwNzAwMzQxMTA0MDAwMDgwODI0RDI5QkMwMDAwMDAwMDNFCis6MTBDRTcwMDAwMDAwMDBBMDFGMDBGQTNBMDAwMDI4MTEwMDAwMDA5Q0VBCis6MTBDRTgwMDAwRjgwMkE5MkMwMDEwMDAwMDAwMDAwQUMwRjAwMzYzMjczCis6MTBDRTkwMDAwMTAwMDAwMDAwMDAwMDlDMDIwMDM2MzIwMDAwNDQxMTM2Cis6MTBDRUEwMDAwMDAwMDA4MDAyMDAwMEQwMUYwMDNBMTEwNDAwMDA4MDQyCis6MTBDRUIwMDA4MkNEMjlCQ0MwMDAwMDAwMDAwMDAwQUM4RkNERkEzQTQyCis6MTBDRUMwMDAwMDAwMzYxMTAwMDAwMDlDMTJDMDI5OUEwMDAwRjYxMEU0Cis6MTBDRUQwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMEVDMTAwMDAwMDA4MDg0Cis6MTBDRUUwMDAwMjAwMDBEMDAwMDA0MjExMDQwMDAwODA1MjhBRkFCQzA3Cis6MTBDRUYwMDBBMjYwMDMwMDAwMDAwMDU4MDMwMDM3MzI0MjExMDAwMDE2Cis6MTBDRjAwMDAwMDAwMDA1QzAzMDAzNjMyMDAwMDAwMDAwMDAwMDA1MDBBCis6MTBDRjEwMDBBMzNFMDAzNDAwMDAwMDAwMDAwMDAwNDhBMzNFMDAzNDlGCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDQ0NTMwQTAwMzQwMDQ0MDAwMEU4Cis6MTBDRjMwMDAwMDAwMDBBNDBGMDAzNjMyMDAwMEIzMTAwMDAwMDA4MDkzCis6MTBDRjQwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwQzQwMkMwRkEzMjlECis6MTBDRjUwMDAwMzAwMDAwMDAwMDAwMDlDMEYwMDM2MzIwMDAwMDAwMEJCCis6MTBDRjYwMDAwMDAwMDBCQzBGNDAyRjMyMDAwMDRCMTEwNDAwMDA5QzU5Cis6MTBDRjcwMDAxRkMwRjlCQzAwMDA0QTExMDQwMDAwODAwMjQwMkZCMjFCCis6MTBDRjgwMDAwMDAwNDcxMTAwMDAwMEUwMDcwMDJDOTIwMDAwNDcxMTRDCis6MTBDRjkwMDAwMDAwMDBFMDA3MDAzNjkyMDAwMDAwMDAwMDAwMDBFMDAyCis6MTBDRkEwMDAwNzQwMkMzMjAwMDAwMDAwMDAwMDAwRTAwNzgwMkMzMjE3Cis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMEUwMDdDMDJDMzIwMDAwMDAwMDZDCis6MTBDRkMwMDAwMDAwMDBFMDA3MDAyRDMyMDAwMDAwMDAwMDAwMDBFMDNCCis6MTBDRkQwMDAwNzQwMkQzMjAwMDAwMDAwMDAwMDAwRTAwNzgwMkQzMkU1Cis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMEUwMDdDMDJEMzIwMDAwMDAwMDNCCis6MTBDRkYwMDAwMDAwMDBFMDA3QzBGQjMyMDAwMDAwMDAwMDAwMDBFMDdECis6MTBEMDAwMDAwNzgwMkYzMjAwMDAwMDAwMDAwMDAwRTAwN0MwMkYzMjMwCis6MTBEMDEwMDAxODAwMDAwMDAwMDAwMEY4NzMwQTAyMzkwMDAwMDAwMDQ4Cis6MTBEMDIwMDAwMDAxMDBFMDA3ODAzRjUyRkYwMDAwMDAwMDAwMDA0NEM0Cis6MTBEMDMwMDAwMzAwMzYzMjAwMDAwMDAwMDAwMDAwRTAwNzAwRjkzMjczCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMEUwMDc0MDI4MzIwMDAwMDAwMDVGCis6MTBEMDUwMDAwMDAwMDBFMDA3ODBGODMyMDMwMDAwMDAwMDAwMDA5Q0EwCis6MTBEMDYwMDAwRjAwMzYzMjAwMDAwMDAwMDAwMDAwQkMwRkMwMkIzMjYxCis6MTBEMDcwMDAwMDAwNjExMTA0MDAwMDlDMUZDMEY5QkMwMDAwNjAxMTk5Cis6MTBEMDgwMDAwNDAwMDA4MDAyQzAyQkIyMDAwMDVEMTEwMDAwMDBFMDJGCis6MTBEMDkwMDAwN0MwMjg5MjAwMDA1RDExMDAwMDAwRTAwNzAwMzY5MkYyCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMEUwMDc0MEY5MzIwMDAwMDAwMDJFCis6MTBEMEIwMDAwMDAwMDBFMDA3NDAyOTMyMDAwMDAwMDAwMDAwMDBFMDBFCis6MTBEMEMwMDAwNzgwMjkzMjAwMDAwMDAwMDAwMDAwRTAwN0MwMjkzMjdDCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDJBMzIwMDAwMDAwMDBECis6MTBEMEUwMDAwMDAwMDBFMDA3NDAyQTMyMDAwMDAwMDAwMDAwMDBFMERECis6MTBEMEYwMDAwNzgwRjkzMjAwMDAwMDAwMDAwMDAwRTAwN0MwMkEzMjdCCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMEUwMDdDMDJGMzIwMDAwMDAwMDE3Cis6MTBEMTEwMDAwMDAwMDBFMDA3NDAyQjMyMDAwMDAwMDAwMDAwMDBFMEFCCis6MTBEMTIwMDAwNzgwMkIzMjAwMDAwMDAwMDAwMDAwRTAwN0MwRkIzMjQ3Cis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDg4MDIwMEZCMzIwMDAwMDAwMDM4Cis6MTBEMTQwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEODM3Cis6MTBEMTUwMDAwMjAwMDAzMjAwMDAwMDAwMDAxMDAwMDAwNzAwOTczMkJCCis6MTBEMTYwMDAwMDAwMDAwMDAwMTkwMDAwMDdDMDk2NTIwODgwNzIxMUVDCis6MTBEMTcwMDAxMjAwMDA0ODAyODAzNkIyMDAwMDAwMDAwMDAwMDA4MDZCCis6MTBEMTgwMDAwMjAwMDAzMDAwMDA3NDExMTIwMDAwOUMwRkMwMjFCMjk4Cis6MTBEMTkwMDAxRDAwNzcxMTA0MDAwMDgwNzJCRTE3QjgwMDAwNzQxMUUyCis6MTBEMUEwMDAwMDAwMDBGODFFODBFRjlBMTMwMDAwMDAwMDAwMDA5Q0IxCis6MTBEMUIwMDA3RkJFMTczODAwMDAwMDAwMDQwMDAwODAxMkMwRjk1QzM4Cis6MTBEMUMwMDAwMDAwNzQxMTAwMDAwMEY4MUU4MEVGOUEwMDAwMDAwMEJCCis6MTBEMUQwMDAwMDAwMDBCNDBGNDBGQjM1MDAwMDAwMDAwMDAwMDA5QzgwCis6MTBEMUUwMDAwMjAwMDAzMjRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjZCCis6MTBEMUYwMDAwMDAwMDAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwNkUxMUM1Cis6MTBEMjAwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMDcyMTEwMDAwMDA4MEM5Cis6MTBEMjEwMDAwMjAwMDBEMDAwMDAwMDAwMDAwMDAwMENDQkMxQjAzNEMwCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDJFCis6MTBEMjMwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDhCMTEwMDAwMDAyODFFCis6MTBEMjQwMDAwOUMwQjBEMjAwMDA4MTExMDQwMDAwODAwMjgwOTJCMkI3Cis6MTBEMjUwMDAwMDAwODUxMTEyMDAwMDlDMEZDMDIxQjIxRDAwODgxMTMyCis6MTBEMjYwMDAwNDAwMDA4MDcyQkUxN0I4MDAwMDg1MTEwMDAwMDBGOEFECis6MTBEMjcwMDAxRTgwRUY5QTEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODRDCis6MTBEMjgwMDAwMDAwNzMxMDA0MDAwMDgwMTJDMEY5QkMwMDAwODUxMTdBCis6MTBEMjkwMDAwMDAwMDBGODFFODBFRjlBMDAwMDAwMDAwMDAwMDBGQzczCis6MTBEMkEwMDAwMjAwMDAzMjAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTcyCis6MTBEMkIwMDAwMDAwOEYxMTA0MDEwMDI4MDkzNEIwQkEwMDAwMDAwMEZBCis6MTBEMkMwMDAwMDAxMDAyODA5MDAwMDUyMDAwMDAwMDAwMDAwMDBBODMyCis6MTBEMkQwMDAyMkMwMkYzNzAwMDAwMDAwMDAwMDg0QzAzN0FDQjAzMkZECis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMEY3Cis6MTBEMkYwMDAwMDAwMDBDMEFGNERCMDMwMDAwMDk1MTE4MDAwMDA4MEVDCis6MTBEMzAwMDAwMjQwQjBCNjAwMDAwMDAwMDAwMDAwQzA2RjAxRkMzNTE0Cis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDczRjAxMzIwMDQyMDAwMDUyCis6MTBEMzIwMDAwMDA4MDAwMDg3OEQyQTNBMDAwMDAwMDAwMDEwMDAwMDZECis6MTBEMzMwMDAwNzAwQjAzMjAwMDAwMDAwMDAxODAwMDAwNzAwRDAzMkUzCis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMEMwM0ZDMTM4MzQwMDAwMDAwMEIxCis6MTBEMzUwMDAxMjAxMDA0OEYyMDFGQzU0MDAwMDlBMTEwMDAwMDA4MDA0Cis6MTBEMzYwMDAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDFCCis6MENEMzcwMDAwMDAwMzYwMDAwMDAwMDgwMDIwMDAwOTA2OQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggMWM4NTlkYS4uM2Y4NGQ1ZiAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTEyMzYsNyArMTIzNiw3IEBACiAKIGFzbWxpbmthZ2Ugc3NpemVfdAogY29tcGF0X3N5c19wcmVhZHYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKLQkJICB1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfaGlnaCwgdTMyIHBvc19sb3cpCisJCSAgdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKQogewogCWxvZmZfdCBwb3MgPSAoKGxvZmZfdClwb3NfaGlnaCA8PCAzMikgfCBwb3NfbG93OwogCXN0cnVjdCBmaWxlICpmaWxlOwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKIAogYXNtbGlua2FnZSBzc2l6ZV90CiBjb21wYXRfc3lzX3B3cml0ZXYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKLQkJICAgdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2hpZ2gsIHUzMiBwb3NfbG93KQorCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfbG93LCB1MzIgcG9zX2hpZ2gpCiB7CiAJbG9mZl90IHBvcyA9ICgobG9mZl90KXBvc19oaWdoIDw8IDMyKSB8IHBvc19sb3c7CiAJc3RydWN0IGZpbGUgKmZpbGU7CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2lub2RlLmMgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKaW5kZXggODFhZTllYS4uMDY2MmJhNiAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9pbm9kZS5jCisrKyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwpAQCAtMzAsNiArMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpkZWJ1Z2ZzX21vdW50Owogc3RhdGljIGludCBkZWJ1Z2ZzX21vdW50X2NvdW50Oworc3RhdGljIGJvb2wgZGVidWdmc19yZWdpc3RlcmVkOwogCiBzdGF0aWMgc3RydWN0IGlub2RlICpkZWJ1Z2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewpAQCAtNDk2LDYgKzQ5NywxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19yZW5hbWUpOwogCisvKioKKyAqIGRlYnVnZnNfaW5pdGlhbGl6ZWQgLSBUZWxscyB3aGV0aGVyIGRlYnVnZnMgaGFzIGJlZW4gcmVnaXN0ZXJlZAorICovCitib29sIGRlYnVnZnNfaW5pdGlhbGl6ZWQodm9pZCkKK3sKKwlyZXR1cm4gZGVidWdmc19yZWdpc3RlcmVkOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19pbml0aWFsaXplZCk7CisKKwogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICpkZWJ1Z19rb2JqOwogCiBzdGF0aWMgaW50IF9faW5pdCBkZWJ1Z2ZzX2luaXQodm9pZCkKQEAgLTUwOSwxMSArNTIwLDE2IEBACiAJcmV0dmFsID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGVidWdfZnNfdHlwZSk7CiAJaWYgKHJldHZhbCkKIAkJa29iamVjdF9wdXQoZGVidWdfa29iaik7CisJZWxzZQorCQlkZWJ1Z2ZzX3JlZ2lzdGVyZWQgPSB0cnVlOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRlYnVnZnNfZXhpdCh2b2lkKQogeworCWRlYnVnZnNfcmVnaXN0ZXJlZCA9IGZhbHNlOworCiAJc2ltcGxlX3JlbGVhc2VfZnMoJmRlYnVnZnNfbW91bnQsICZkZWJ1Z2ZzX21vdW50X2NvdW50KTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRlYnVnX2ZzX3R5cGUpOwogCWtvYmplY3RfcHV0KGRlYnVnX2tvYmopOwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDM4ZTMzN2QuLjk5ZTMzZWYgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogCiAjaW5jbHVkZSAiY2hlY2suaCIKIApAQCAtMjk0LDYgKzI5NSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwYXJ0X2F0dHJfZ3JvdXBzW10gPSB7CiAJJnBhcnRfYXR0cl9ncm91cCwKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRQorCSZibGtfdHJhY2VfYXR0cl9ncm91cCwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCA2ZDVkOGZmLi45ZDFlNzZiIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC03MzEsMTAgKzczMSwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLVNZU0NBTExfREVGSU5FNShwcmVhZHYsIHVuc2lnbmVkIGxvbmcsIGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICosIHZlYywKLQkJdW5zaWduZWQgbG9uZywgdmxlbiwgdTMyLCBwb3NfaGlnaCwgdTMyLCBwb3NfbG93KQorc3RhdGljIGlubGluZSBsb2ZmX3QgcG9zX2Zyb21faGlsbyh1bnNpZ25lZCBsb25nIGhpZ2gsIHVuc2lnbmVkIGxvbmcgbG93KQogewotCWxvZmZfdCBwb3MgPSAoKGxvZmZfdClwb3NfaGlnaCA8PCAzMikgfCBwb3NfbG93OworI2RlZmluZSBIQUxGX0xPTkdfQklUUyAoQklUU19QRVJfTE9ORyAvIDIpCisJcmV0dXJuICgoKGxvZmZfdCloaWdoIDw8IEhBTEZfTE9OR19CSVRTKSA8PCBIQUxGX0xPTkdfQklUUykgfCBsb3c7Cit9CisKK1NZU0NBTExfREVGSU5FNShwcmVhZHYsIHVuc2lnbmVkIGxvbmcsIGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICosIHZlYywKKwkJdW5zaWduZWQgbG9uZywgdmxlbiwgdW5zaWduZWQgbG9uZywgcG9zX2wsIHVuc2lnbmVkIGxvbmcsIHBvc19oKQoreworCWxvZmZfdCBwb3MgPSBwb3NfZnJvbV9oaWxvKHBvc19oLCBwb3NfbCk7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3NpemVfdCByZXQgPSAtRUJBREY7CiAJaW50IGZwdXRfbmVlZGVkOwpAQCAtNzU3LDkgKzc2Myw5IEBACiB9CiAKIFNZU0NBTExfREVGSU5FNShwd3JpdGV2LCB1bnNpZ25lZCBsb25nLCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsCi0JCXVuc2lnbmVkIGxvbmcsIHZsZW4sIHUzMiwgcG9zX2hpZ2gsIHUzMiwgcG9zX2xvdykKKwkJdW5zaWduZWQgbG9uZywgdmxlbiwgdW5zaWduZWQgbG9uZywgcG9zX2wsIHVuc2lnbmVkIGxvbmcsIHBvc19oKQogewotCWxvZmZfdCBwb3MgPSAoKGxvZmZfdClwb3NfaGlnaCA8PCAzMikgfCBwb3NfbG93OworCWxvZmZfdCBwb3MgPSBwb3NfZnJvbV9oaWxvKHBvc19oLCBwb3NfbCk7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3NpemVfdCByZXQgPSAtRUJBREY7CiAJaW50IGZwdXRfbmVlZGVkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaCBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKaW5kZXggZWRhMDQ1NC4uNDczZDU4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCkBAIC0xMDMsOCArMTAzLDkgQEAKICNkZWZpbmUgQUVfQkFEX09DVEFMX0NPTlNUQU5UICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX1BST0dSQU1NRVIpCiAjZGVmaW5lIEFFX0JBRF9ERUNJTUFMX0NPTlNUQU5UICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA3IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQogI2RlZmluZSBBRV9NSVNTSU5HX0FSR1VNRU5UUyAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwOCB8IEFFX0NPREVfUFJPR1JBTU1FUikKKyNkZWZpbmUgQUVfQkFEX0FERFJFU1MgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDkgfCBBRV9DT0RFX1BST0dSQU1NRVIpCiAKLSNkZWZpbmUgQUVfQ09ERV9QR01fTUFYICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQUVfQ09ERV9QR01fTUFYICAgICAgICAgICAgICAgICAweDAwMDkKIAogLyoKICAqIEFjcGkgdGFibGUgZXhjZXB0aW9ucwpAQCAtMjI0LDcgKzIyNSw4IEBACiAJIkFFX0JBRF9IRVhfQ09OU1RBTlQiLAogCSJBRV9CQURfT0NUQUxfQ09OU1RBTlQiLAogCSJBRV9CQURfREVDSU1BTF9DT05TVEFOVCIsCi0JIkFFX01JU1NJTkdfQVJHVU1FTlRTIgorCSJBRV9NSVNTSU5HX0FSR1VNRU5UUyIsCisJIkFFX0JBRF9BRERSRVNTIgogfTsKIAogY2hhciBjb25zdCAqYWNwaV9nYmxfZXhjZXB0aW9uX25hbWVzX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCBlOWY2NTc0Li5hMjIyODUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtODgsNDQgKzg4LDMwIEBACiAKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9hZGQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3JlbW92ZSkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSwgaW50IHR5cGUpOwotdHlwZWRlZiBpbnQgKCphY3BpX29wX2xvY2spIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIGludCB0eXBlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9zdGFydCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7CiB0eXBlZGVmIGludCAoKmFjcGlfb3Bfc3RvcCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSwgaW50IHR5cGUpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3N1c3BlbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsCiAJCQkJcG1fbWVzc2FnZV90IHN0YXRlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZXN1bWUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwotdHlwZWRlZiBpbnQgKCphY3BpX29wX3NjYW4pIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX2JpbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3VuYmluZCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7Ci10eXBlZGVmIGludCAoKmFjcGlfb3Bfc2h1dGRvd24pIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwordHlwZWRlZiB2b2lkICgqYWNwaV9vcF9ub3RpZnkpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIHUzMiBldmVudCk7CiAKIHN0cnVjdCBhY3BpX2J1c19vcHMgewogCXUzMiBhY3BpX29wX2FkZDoxOwotCXUzMiBhY3BpX29wX3JlbW92ZToxOwotCXUzMiBhY3BpX29wX2xvY2s6MTsKIAl1MzIgYWNwaV9vcF9zdGFydDoxOwotCXUzMiBhY3BpX29wX3N0b3A6MTsKLQl1MzIgYWNwaV9vcF9zdXNwZW5kOjE7Ci0JdTMyIGFjcGlfb3BfcmVzdW1lOjE7Ci0JdTMyIGFjcGlfb3Bfc2NhbjoxOwotCXUzMiBhY3BpX29wX2JpbmQ6MTsKLQl1MzIgYWNwaV9vcF91bmJpbmQ6MTsKLQl1MzIgYWNwaV9vcF9zaHV0ZG93bjoxOwotCXUzMiByZXNlcnZlZDoyMTsKIH07CiAKIHN0cnVjdCBhY3BpX2RldmljZV9vcHMgewogCWFjcGlfb3BfYWRkIGFkZDsKIAlhY3BpX29wX3JlbW92ZSByZW1vdmU7Ci0JYWNwaV9vcF9sb2NrIGxvY2s7CiAJYWNwaV9vcF9zdGFydCBzdGFydDsKIAlhY3BpX29wX3N0b3Agc3RvcDsKIAlhY3BpX29wX3N1c3BlbmQgc3VzcGVuZDsKIAlhY3BpX29wX3Jlc3VtZSByZXN1bWU7Ci0JYWNwaV9vcF9zY2FuIHNjYW47CiAJYWNwaV9vcF9iaW5kIGJpbmQ7CiAJYWNwaV9vcF91bmJpbmQgdW5iaW5kOwotCWFjcGlfb3Bfc2h1dGRvd24gc2h1dGRvd247CisJYWNwaV9vcF9ub3RpZnkgbm90aWZ5OwogfTsKIAogc3RydWN0IGFjcGlfZHJpdmVyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAppbmRleCA1ZmMxYmIwLi4wMzUyYzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCkBAIC02Nyw2ICs2NywxNiBAQAogI2RlZmluZSBBQ1BJX0JBWV9ISUQJCQkiTE5YSU9CQVkiCiAjZGVmaW5lIEFDUElfRE9DS19ISUQJCQkiTE5YRE9DSyIKIAorLyoKKyAqIEZvciBmaXhlZCBoYXJkd2FyZSBidXR0b25zLCB3ZSBmYWJyaWNhdGUgYWNwaV9kZXZpY2VzIHdpdGggSElECisgKiBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGIG9yIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYuICBGaXhlZCBoYXJkd2FyZQorICogc2lnbmFscyBvbmx5IGFuIGV2ZW50OyBpdCBkb2Vzbid0IHN1cHBseSBhIG5vdGlmaWNhdGlvbiB2YWx1ZS4KKyAqIFRvIGFsbG93IGRyaXZlcnMgdG8gdHJlYXQgbm90aWZpY2F0aW9ucyBmcm9tIGZpeGVkIGhhcmR3YXJlIHRoZQorICogc2FtZSBhcyB0aG9zZSBmcm9tIHJlYWwgZGV2aWNlcywgd2UgdHVybiB0aGUgZXZlbnRzIGludG8gdGhpcworICogbm90aWZpY2F0aW9uIHZhbHVlLgorICovCisjZGVmaW5lIEFDUElfRklYRURfSEFSRFdBUkVfRVZFTlQJMHgxMDAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTk5LDI0ICsxMDksNiBAQAogCQkJCSAgIGludCBidXMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIFJlc291cmNlCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1pbnQgYWNwaV9kZXZpY2Vfc2xlZXBfd2FrZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmFibGUsIGludCBzbGVlcF9zdGF0ZSwgaW50IGRldl9zdGF0ZSk7Ci1pbnQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHNsZWVwX3N0YXRlKTsKLWludCBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7Ci1pbnQgYWNwaV9wb3dlcl9nZXRfaW5mZXJyZWRfc3RhdGUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwotaW50IGFjcGlfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKTsKLWV4dGVybiBpbnQgYWNwaV9wb3dlcl9ub2NoZWNrOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVkZGVkIENvbnRyb2xsZXIKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgYWNwaV9lY19lY2R0X3Byb2JlKHZvaWQpOwotaW50IGFjcGlfYm9vdF9lY19lbmFibGUodm9pZCk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTE2NSw5ICsxNTcsNCBAQAogfQogI2VuZGlmCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXNwZW5kL1Jlc3VtZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotZXh0ZXJuIGludCBhY3BpX3NsZWVwX2luaXQodm9pZCk7Ci0KICNlbmRpZiAvKl9fQUNQSV9EUklWRVJTX0hfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IGFiMGI4NWMuLjNlNzk4NTkzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTI0MiwxMCArMjQyLDYgQEAKIGFjcGlfc3RhdHVzIGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlKGNoYXIgKmludGVyZmFjZSk7CiBhY3BpX3N0YXR1cyBhY3BpX29zaV9pbnZhbGlkYXRlKGNoYXIqIGludGVyZmFjZSk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX29zX3ZhbGlkYXRlX2FkZHJlc3ModTggc3BhY2VfaWQsIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkJIGFjcGlfc2l6ZSBsZW5ndGgsIGNoYXIgKm5hbWUpOwotCiB1NjQgYWNwaV9vc19nZXRfdGltZXIodm9pZCk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfb3Nfc2lnbmFsKHUzMiBmdW5jdGlvbiwgdm9pZCAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggY2M0MDEwMi4uYWVhZjdjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAwODEyMDQKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDkwMzIwCiAKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAjaW5jbHVkZSAiYWN0YmwuaCIKQEAgLTM0OSwxNyArMzQ5LDE1IEBACiAgKi8KIGFjcGlfc3RhdHVzIGFjcGlfcmVzZXQodm9pZCk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZ2V0X3JlZ2lzdGVyKHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKTsKK2FjcGlfc3RhdHVzIGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKnJldHVybl92YWx1ZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZ2V0X3JlZ2lzdGVyX3VubG9ja2VkKHUzMiByZWdpc3Rlcl9pZCwgdTMyICpyZXR1cm5fdmFsdWUpOworYWNwaV9zdGF0dXMgYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUpOwogCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9yZWdpc3Rlcih1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSk7CithY3BpX3N0YXR1cyBhY3BpX3NldF9maXJtd2FyZV93YWtpbmdfdmVjdG9yKHUzMiBwaHlzaWNhbF9hZGRyZXNzKTsKIAotYWNwaV9zdGF0dXMKLWFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IodTMyIHBoeXNpY2FsX2FkZHJlc3MpOwotCi1hY3BpX3N0YXR1cwotYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvcjY0KHU2NCBwaHlzaWNhbF9hZGRyZXNzKTsKKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gNjQKK2FjcGlfc3RhdHVzIGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3I2NCh1NjQgcGh5c2ljYWxfYWRkcmVzcyk7CisjZW5kaWYKIAogYWNwaV9zdGF0dXMgYWNwaV9yZWFkKHUzMiAqdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCBiZjhkNGNmLi4yMjI3MzNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtMjE0LDExICsyMTQsMTEgQEAKIAl1MTYgZmx1c2hfc2l6ZTsJCS8qIFByb2Nlc3NvcidzIG1lbW9yeSBjYWNoZSBsaW5lIHdpZHRoLCBpbiBieXRlcyAqLwogCXUxNiBmbHVzaF9zdHJpZGU7CS8qIE51bWJlciBvZiBmbHVzaCBzdHJpZGVzIHRoYXQgbmVlZCB0byBiZSByZWFkICovCiAJdTggZHV0eV9vZmZzZXQ7CQkvKiBQcm9jZXNzb3IgZHV0eSBjeWNsZSBpbmRleCBpbiBwcm9jZXNzb3IncyBQX0NOVCByZWcgKi8KLQl1OCBkdXR5X3dpZHRoOwkJLyogUHJvY2Vzc29yIGR1dHkgY3ljbGUgdmFsdWUgYml0IHdpZHRoIGluIFBfQ05UIHJlZ2lzdGVyLiAqLworCXU4IGR1dHlfd2lkdGg7CQkvKiBQcm9jZXNzb3IgZHV0eSBjeWNsZSB2YWx1ZSBiaXQgd2lkdGggaW4gUF9DTlQgcmVnaXN0ZXIgKi8KIAl1OCBkYXlfYWxhcm07CQkvKiBJbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovCiAJdTggbW9udGhfYWxhcm07CQkvKiBJbmRleCB0byBtb250aC1vZi15ZWFyIGFsYXJtIGluIFJUQyBDTU9TIFJBTSAqLwogCXU4IGNlbnR1cnk7CQkvKiBJbmRleCB0byBjZW50dXJ5IGluIFJUQyBDTU9TIFJBTSAqLwotCXUxNiBib290X2ZsYWdzOwkJLyogSUEtUEMgQm9vdCBBcmNoaXRlY3R1cmUgRmxhZ3MuIFNlZSBUYWJsZSA1LTEwIGZvciBkZXNjcmlwdGlvbiAqLworCXUxNiBib290X2ZsYWdzOwkJLyogSUEtUEMgQm9vdCBBcmNoaXRlY3R1cmUgRmxhZ3MgKHNlZSBiZWxvdyBmb3IgaW5kaXZpZHVhbCBmbGFncykgKi8KIAl1OCByZXNlcnZlZDsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIAl1MzIgZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGZsYWcgYml0cyAoc2VlIGJlbG93IGZvciBpbmRpdmlkdWFsIGZsYWdzKSAqLwogCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyByZXNldF9yZWdpc3RlcjsJLyogNjQtYml0IGFkZHJlc3Mgb2YgdGhlIFJlc2V0IHJlZ2lzdGVyICovCkBAIC0yMzYsMzIgKzIzNiw0MSBAQAogCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4Z3BlMV9ibG9jazsJLyogNjQtYml0IEV4dGVuZGVkIEdlbmVyYWwgUHVycG9zZSBFdmVudCAxIFJlZyBCbGsgYWRkcmVzcyAqLwogfTsKIAorLyogRkFEVCBCb290IEFyY2hpdGVjdHVyZSBGbGFncyAoYm9vdF9mbGFncykgKi8KKworI2RlZmluZSBBQ1BJX0ZBRFRfTEVHQUNZX0RFVklDRVMgICAgKDEpICAJLyogMDA6IFtWMl0gU3lzdGVtIGhhcyBMUEMgb3IgSVNBIGJ1cyBkZXZpY2VzICovCisjZGVmaW5lIEFDUElfRkFEVF84MDQyICAgICAgICAgICAgICAoMTw8MSkJLyogMDE6IFtWM10gU3lzdGVtIGhhcyBhbiA4MDQyIGNvbnRyb2xsZXIgb24gcG9ydCA2MC82NCAqLworI2RlZmluZSBBQ1BJX0ZBRFRfTk9fVkdBICAgICAgICAgICAgKDE8PDIpCS8qIDAyOiBbVjRdIEl0IGlzIG5vdCBzYWZlIHRvIHByb2JlIGZvciBWR0EgaGFyZHdhcmUgKi8KKyNkZWZpbmUgQUNQSV9GQURUX05PX01TSSAgICAgICAgICAgICgxPDwzKQkvKiAwMzogW1Y0XSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSkgbXVzdCBub3QgYmUgZW5hYmxlZCAqLworI2RlZmluZSBBQ1BJX0ZBRFRfTk9fQVNQTSAgICAgICAgICAgKDE8PDQpCS8qIDA0OiBbVjRdIFBDSWUgQVNQTSBjb250cm9sIG11c3Qgbm90IGJlIGVuYWJsZWQgKi8KKworI2RlZmluZSBGQURUMl9SRVZJU0lPTl9JRCAgICAgICAgICAgICAgIDMKKwogLyogRkFEVCBmbGFncyAqLwogCi0jZGVmaW5lIEFDUElfRkFEVF9XQklOVkQgICAgICAgICAgICAoMSkJLyogMDA6IFRoZSB3YmludmQgaW5zdHJ1Y3Rpb24gd29ya3MgcHJvcGVybHkgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1dCSU5WRF9GTFVTSCAgICAgICgxPDwxKQkvKiAwMTogVGhlIHdiaW52ZCBmbHVzaGVzIGJ1dCBkb2VzIG5vdCBpbnZhbGlkYXRlICovCi0jZGVmaW5lIEFDUElfRkFEVF9DMV9TVVBQT1JURUQgICAgICAoMTw8MikJLyogMDI6IEFsbCBwcm9jZXNzb3JzIHN1cHBvcnQgQzEgc3RhdGUgKi8KLSNkZWZpbmUgQUNQSV9GQURUX0MyX01QX1NVUFBPUlRFRCAgICgxPDwzKQkvKiAwMzogQzIgc3RhdGUgd29ya3Mgb24gTVAgc3lzdGVtICovCi0jZGVmaW5lIEFDUElfRkFEVF9QT1dFUl9CVVRUT04gICAgICAoMTw8NCkJLyogMDQ6IFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlICovCi0jZGVmaW5lIEFDUElfRkFEVF9TTEVFUF9CVVRUT04gICAgICAoMTw8NSkJLyogMDU6IFNsZWVwIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlLCBvciAgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgQUNQSV9GQURUX0ZJWEVEX1JUQyAgICAgICAgICgxPDw2KQkvKiAwNjogUlRDIHdha2V1cCBzdGF0IG5vdCBpbiBmaXhlZCByZWdpc3RlciBzcGFjZSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfUzRfUlRDX1dBS0UgICAgICAgKDE8PDcpCS8qIDA3OiBSVEMgd2FrZXVwIHBvc3NpYmxlIGZyb20gUzQgKi8KLSNkZWZpbmUgQUNQSV9GQURUXzMyQklUX1RJTUVSICAgICAgICgxPDw4KQkvKiAwODogdG1yX3ZhbCBpcyAzMiBiaXRzIDA9MjQtYml0cyAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfRE9DS0lOR19TVVBQT1JURUQgKDE8PDkpCS8qIDA5OiBEb2NraW5nIHN1cHBvcnRlZCAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfUkVTRVRfUkVHSVNURVIgICAgKDE8PDEwKQkvKiAxMDogU3lzdGVtIHJlc2V0IHZpYSB0aGUgRkFEVCBSRVNFVF9SRUcgc3VwcG9ydGVkICovCi0jZGVmaW5lIEFDUElfRkFEVF9TRUFMRURfQ0FTRSAgICAgICAoMTw8MTEpCS8qIDExOiBObyBpbnRlcm5hbCBleHBhbnNpb24gY2FwYWJpbGl0aWVzIGFuZCBjYXNlIGlzIHNlYWxlZCAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfSEVBRExFU1MgICAgICAgICAgKDE8PDEyKQkvKiAxMjogTm8gbG9jYWwgdmlkZW8gY2FwYWJpbGl0aWVzIG9yIGxvY2FsIGlucHV0IGRldmljZXMgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1NMRUVQX1RZUEUgICAgICAgICgxPDwxMykJLyogMTM6IE11c3QgZXhlY3V0ZSBuYXRpdmUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgd3JpdGluZyAgU0xQX1RZUHggcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1BDSV9FWFBSRVNTX1dBS0UgICgxPDwxNCkJLyogMTQ6IFN5c3RlbSBzdXBwb3J0cyBQQ0lFWFBfV0FLRSAoU1RTL0VOKSBiaXRzIChBQ1BJIDMuMCkgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1BMQVRGT1JNX0NMT0NLICAgICgxPDwxNSkJLyogMTU6IE9TUE0gc2hvdWxkIHVzZSBwbGF0Zm9ybS1wcm92aWRlZCB0aW1lciAoQUNQSSAzLjApICovCi0jZGVmaW5lIEFDUElfRkFEVF9TNF9SVENfVkFMSUQgICAgICAoMTw8MTYpCS8qIDE2OiBDb250ZW50cyBvZiBSVENfU1RTIHZhbGlkIGFmdGVyIFM0IHdha2UgKEFDUEkgMy4wKSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfUkVNT1RFX1BPV0VSX09OICAgKDE8PDE3KQkvKiAxNzogU3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCByZW1vdGUgcG93ZXIgb24gKEFDUEkgMy4wKSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19DTFVTVEVSICAgICAgKDE8PDE4KQkvKiAxODogQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCAgICAgKDE8PDE5KQkvKiAxOTogQWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1dCSU5WRCAgICAgICAgICAgICgxKQkvKiAwMDogW1YxXSBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCisjZGVmaW5lIEFDUElfRkFEVF9XQklOVkRfRkxVU0ggICAgICAoMTw8MSkJLyogMDE6IFtWMV0gd2JpbnZkIGZsdXNoZXMgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgY2FjaGVzICovCisjZGVmaW5lIEFDUElfRkFEVF9DMV9TVVBQT1JURUQgICAgICAoMTw8MikJLyogMDI6IFtWMV0gQWxsIHByb2Nlc3NvcnMgc3VwcG9ydCBDMSBzdGF0ZSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfQzJfTVBfU1VQUE9SVEVEICAgKDE8PDMpCS8qIDAzOiBbVjFdIEMyIHN0YXRlIHdvcmtzIG9uIE1QIHN5c3RlbSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUE9XRVJfQlVUVE9OICAgICAgKDE8PDQpCS8qIDA0OiBbVjFdIFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgY29udHJvbCBtZXRob2QgZGV2aWNlICovCisjZGVmaW5lIEFDUElfRkFEVF9TTEVFUF9CVVRUT04gICAgICAoMTw8NSkJLyogMDU6IFtWMV0gU2xlZXAgYnV0dG9uIGlzIGhhbmRsZWQgYXMgYSBjb250cm9sIG1ldGhvZCBkZXZpY2UgKi8KKyNkZWZpbmUgQUNQSV9GQURUX0ZJWEVEX1JUQyAgICAgICAgICgxPDw2KQkvKiAwNjogW1YxXSBSVEMgd2FrZXVwIHN0YXR1cyBub3QgaW4gZml4ZWQgcmVnaXN0ZXIgc3BhY2UgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1M0X1JUQ19XQUtFICAgICAgICgxPDw3KQkvKiAwNzogW1YxXSBSVEMgYWxhcm0gY2FuIHdha2Ugc3lzdGVtIGZyb20gUzQgKi8KKyNkZWZpbmUgQUNQSV9GQURUXzMyQklUX1RJTUVSICAgICAgICgxPDw4KQkvKiAwODogW1YxXSBBQ1BJIHRpbWVyIHdpZHRoIGlzIDMyLWJpdCAoMD0yNC1iaXQpICovCisjZGVmaW5lIEFDUElfRkFEVF9ET0NLSU5HX1NVUFBPUlRFRCAoMTw8OSkJLyogMDk6IFtWMV0gRG9ja2luZyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1JFU0VUX1JFR0lTVEVSICAgICgxPDwxMCkJLyogMTA6IFtWMl0gU3lzdGVtIHJlc2V0IHZpYSB0aGUgRkFEVCBSRVNFVF9SRUcgc3VwcG9ydGVkICovCisjZGVmaW5lIEFDUElfRkFEVF9TRUFMRURfQ0FTRSAgICAgICAoMTw8MTEpCS8qIDExOiBbVjNdIE5vIGludGVybmFsIGV4cGFuc2lvbiBjYXBhYmlsaXRpZXMgYW5kIGNhc2UgaXMgc2VhbGVkICovCisjZGVmaW5lIEFDUElfRkFEVF9IRUFETEVTUyAgICAgICAgICAoMTw8MTIpCS8qIDEyOiBbVjNdIE5vIGxvY2FsIHZpZGVvIGNhcGFiaWxpdGllcyBvciBsb2NhbCBpbnB1dCBkZXZpY2VzICovCisjZGVmaW5lIEFDUElfRkFEVF9TTEVFUF9UWVBFICAgICAgICAoMTw8MTMpCS8qIDEzOiBbVjNdIE11c3QgZXhlY3V0ZSBuYXRpdmUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgd3JpdGluZyAgU0xQX1RZUHggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1BDSV9FWFBSRVNTX1dBS0UgICgxPDwxNCkJLyogMTQ6IFtWNF0gU3lzdGVtIHN1cHBvcnRzIFBDSUVYUF9XQUtFIChTVFMvRU4pIGJpdHMgKEFDUEkgMy4wKSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUExBVEZPUk1fQ0xPQ0sgICAgKDE8PDE1KQkvKiAxNTogW1Y0XSBPU1BNIHNob3VsZCB1c2UgcGxhdGZvcm0tcHJvdmlkZWQgdGltZXIgKEFDUEkgMy4wKSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUzRfUlRDX1ZBTElEICAgICAgKDE8PDE2KQkvKiAxNjogW1Y0XSBDb250ZW50cyBvZiBSVENfU1RTIHZhbGlkIGFmdGVyIFM0IHdha2UgKEFDUEkgMy4wKSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUkVNT1RFX1BPV0VSX09OICAgKDE8PDE3KQkvKiAxNzogW1Y0XSBTeXN0ZW0gaXMgY29tcGF0aWJsZSB3aXRoIHJlbW90ZSBwb3dlciBvbiAoQUNQSSAzLjApICovCisjZGVmaW5lIEFDUElfRkFEVF9BUElDX0NMVVNURVIgICAgICAoMTw8MTgpCS8qIDE4OiBbVjRdIEFsbCBsb2NhbCBBUElDcyBtdXN0IHVzZSBjbHVzdGVyIG1vZGVsIChBQ1BJIDMuMCkgKi8KKyNkZWZpbmUgQUNQSV9GQURUX0FQSUNfUEhZU0lDQUwgICAgICgxPDwxOSkJLyogMTk6IFtWNF0gQWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KIAotLyoKLSAqIEZBRFQgUHJlZmVyZWQgUG93ZXIgTWFuYWdlbWVudCBQcm9maWxlcwotICovCisvKiBGQURUIFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMgKi8KKwogZW51bSBhY3BpX3ByZWZlcmVkX3BtX3Byb2ZpbGVzIHsKIAlQTV9VTlNQRUNJRklFRCA9IDAsCiAJUE1fREVTS1RPUCA9IDEsCkBAIC0yNzIsMTYgKzI4MSw2IEBACiAJUE1fQVBQTElBTkNFX1BDID0gNgogfTsKIAotLyogRkFEVCBCb290IEFyY2ggRmxhZ3MgKi8KLQotI2RlZmluZSBCQUZfTEVHQUNZX0RFVklDRVMgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBCQUZfODA0Ml9LRVlCT0FSRF9DT05UUk9MTEVSICAgIDB4MDAwMgotI2RlZmluZSBCQUZfTVNJX05PVF9TVVBQT1JURUQgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBCQUZfUENJRV9BU1BNX0NPTlRST0wgICAgICAgICAgIDB4MDAxMAotCi0jZGVmaW5lIEZBRFQyX1JFVklTSU9OX0lEICAgICAgICAgICAgICAgMwotI2RlZmluZSBGQURUMl9NSU5VU19SRVZJU0lPTl9JRCAgICAgICAgIDIKLQogLyogUmVzZXQgdG8gZGVmYXVsdCBwYWNraW5nICovCiAKICNwcmFnbWEgcGFjaygpCkBAIC0zMTAsOCArMzA5LDkgQEAKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fVU5LTk9XTiAgICAgICAoMCkKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFQUEVEICAgICAgICAoMSkKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fQUxMT0NBVEVEICAgICAoMikKLSNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFTSyAgICAgICAgICAoMykKLSNkZWZpbmUgQUNQSV9UQUJMRV9JU19MT0FERUQgICAgICAgICAgICAoNCkKKyNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fT1ZFUlJJREUgICAgICAoNCkKKyNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFTSyAgICAgICAgICAoNykKKyNkZWZpbmUgQUNQSV9UQUJMRV9JU19MT0FERUQgICAgICAgICAgICAoOCkKIAogLyoKICAqIEdldCB0aGUgcmVtYWluaW5nIEFDUEkgdGFibGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKaW5kZXggMTg5NjNiOS4uNTlhZGUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaApAQCAtMTAxNiw5ICsxMDE2LDkgQEAKIHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljIHsKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOwogCXUxNiByZXNlcnZlZDsJCS8qIFJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0JdTMyIGxvY2FsX2FwaWNfaWQ7CS8qIFByb2Nlc3NvciBYMl9BUElDIElEICAqLworCXUzMiBsb2NhbF9hcGljX2lkOwkvKiBQcm9jZXNzb3IgeDJBUElDIElEICAqLwogCXUzMiBsYXBpY19mbGFnczsKLQl1MzIgdWlkOwkJLyogRXh0ZW5kZWQgWDJfQVBJQyBwcm9jZXNzb3IgSUQgKi8KKwl1MzIgdWlkOwkJLyogQUNQSSBwcm9jZXNzb3IgVUlEICovCiB9OwogCiAvKiAxMDogTG9jYWwgWDJBUElDIE5NSSAoMDcvMjAwOCkgKi8KQEAgLTEwMjYsNyArMTAyNiw3IEBACiBzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CiAJdTE2IGludGlfZmxhZ3M7Ci0JdTMyIHVpZDsJCS8qIFByb2Nlc3NvciBYMl9BUElDIElEICovCisJdTMyIHVpZDsJCS8qIEFDUEkgcHJvY2Vzc29yIFVJRCAqLwogCXU4IGxpbnQ7CQkvKiBMSU5UbiB0byB3aGljaCBOTUkgaXMgY29ubmVjdGVkICovCiAJdTggcmVzZXJ2ZWRbM107CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKaW5kZXggYTIwYWFiNS4uZjU1NWQ5MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApAQCAtNzc3LDE3ICs3NzcsMjUgQEAKICNkZWZpbmUgQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSAgICAgICAgICAgICAgICAgIDB4MEUKICNkZWZpbmUgQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQgICAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgQUNQSV9CSVRSRUdfR0xPQkFMX0xPQ0tfUkVMRUFTRSAgICAgICAgIDB4MTAKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9BICAgICAgICAgICAgICAgIDB4MTEKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9CICAgICAgICAgICAgICAgIDB4MTIKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRSAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTIKIAogLyogUE0yIENvbnRyb2wgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSAgICAgICAgICAgICAgICAgMHgxMwogCi0jZGVmaW5lIEFDUElfQklUUkVHX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIEFDUElfQklUUkVHX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCiAjZGVmaW5lIEFDUElfTlVNX0JJVFJFRyAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0JJVFJFR19NQVggKyAxCiAKKy8qIFN0YXR1cyByZWdpc3RlciB2YWx1ZXMuIEEgMSBjbGVhcnMgYSBzdGF0dXMgYml0LiAwID0gbm8gZWZmZWN0ICovCisKKyNkZWZpbmUgQUNQSV9DTEVBUl9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogRW5hYmxlIGFuZCBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLworCisjZGVmaW5lIEFDUElfRU5BQkxFX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfRElTQUJMRV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAwCisKIC8qCiAgKiBFeHRlcm5hbCBBQ1BJIG9iamVjdCBkZWZpbml0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCAwNTc0YWRkLi5iMDljNGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIGludCBhY3BpX3Byb2Nlc3Nvcl90c3RhdGVfaGFzX2NoYW5nZWQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CiBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKIGV4dGVybiBpbnQgYWNwaV9wcm9jZXNzb3Jfc2V0X3Rocm90dGxpbmcoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwgaW50IHN0YXRlKTsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wczsKIGV4dGVybiB2b2lkIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfaW5pdCh2b2lkKTsKIC8qIGluIHByb2Nlc3Nvcl9pZGxlLmMgKi8KIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCkBAIC0zMzYsNyArMzM2LDcgQEAKIAogLyogaW4gcHJvY2Vzc29yX3RoZXJtYWwuYyAqLwogaW50IGFjcGlfcHJvY2Vzc29yX2dldF9saW1pdF9pbmZvKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9wcm9jZXNzb3JfbGltaXRfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHM7CiBleHRlcm4gc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzIHByb2Nlc3Nvcl9jb29saW5nX29wczsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIHZvaWQgYWNwaV90aGVybWFsX2NwdWZyZXFfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS92aWRlby5oIGIvaW5jbHVkZS9hY3BpL3ZpZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyNzViYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS92aWRlby5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19BQ1BJX1ZJREVPX0gKKyNkZWZpbmUgX19BQ1BJX1ZJREVPX0gKKworI2lmIChkZWZpbmVkIENPTkZJR19BQ1BJX1ZJREVPIHx8IGRlZmluZWQgQ09ORklHX0FDUElfVklERU9fTU9EVUxFKQorZXh0ZXJuIGludCBhY3BpX3ZpZGVvX3JlZ2lzdGVyKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfdmlkZW9fcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZnRyYWNlLmggYi9pbmNsdWRlL2FzbS1mcnYvZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IGE2NTRkNzIuLjdmYTY2MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTYxLDYgKzYxLDMwIEBACiAjZGVmaW5lIEJSQU5DSF9QUk9GSUxFKCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNFUgorI2RlZmluZSBGVFJBQ0VfRVZFTlRTKCkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9mdHJhY2VfZXZlbnRzKSA9IC47CVwKKwkJCSooX2Z0cmFjZV9ldmVudHMpCQkJCVwKKwkJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9mdHJhY2VfZXZlbnRzKSA9IC47CisjZWxzZQorI2RlZmluZSBGVFJBQ0VfRVZFTlRTKCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RSQUNJTkcKKyNkZWZpbmUgVFJBQ0VfUFJJTlRLUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdCkgPSAuOyAgICAgIFwKKwkJCSAqKF9fdHJhY2VfcHJpbnRrX2ZtdCkgLyogVHJhY2VfcHJpbnRrIGZtdCcgcG9pbnRlciAqLyBcCisJCQkgVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2VfYnByaW50a19mbXQpID0gLjsKKyNlbHNlCisjZGVmaW5lIFRSQUNFX1BSSU5US1MoKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCisjZGVmaW5lIFRSQUNFX1NZU0NBTExTKCkgVk1MSU5VWF9TWU1CT0woX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YSkgPSAuOwlcCisJCQkgKihfX3N5c2NhbGxzX21ldGFkYXRhKQkJCQlcCisJCQkgVk1MSU5VWF9TWU1CT0woX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CisjZWxzZQorI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpCisjZW5kaWYKKwogLyogLmRhdGEgc2VjdGlvbiAqLwogI2RlZmluZSBEQVRBX0RBVEEJCQkJCQkJXAogCSooLmRhdGEpCQkJCQkJCVwKQEAgLTg2LDcgKzExMCwxMCBAQAogCSooX192ZXJib3NlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZSkgPSAuOwkJCQlcCiAJTElLRUxZX1BST0ZJTEUoKQkJICAgICAgIAkJCQlcCi0JQlJBTkNIX1BST0ZJTEUoKQorCUJSQU5DSF9QUk9GSUxFKCkJCQkJCQlcCisJVFJBQ0VfUFJJTlRLUygpCQkJCQkJCVwKKwlGVFJBQ0VfRVZFTlRTKCkJCQkJCQkJXAorCVRSQUNFX1NZU0NBTExTKCkKIAogI2RlZmluZSBST19EQVRBKGFsaWduKQkJCQkJCQlcCiAJLiA9IEFMSUdOKChhbGlnbikpOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZnRyYWNlLmggYi9pbmNsdWRlL2FzbS1tMzJyL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2Z0cmFjZS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCBkMDQ3Zjg0Li42NTg2Y2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtOTcsNiArOTcsNyBAQAogLyogdGhlIGZvbGxvd2luZyBmb3VyIGZ1bmN0aW9ucyBhcmUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCAqLwogdm9pZCBhY3BpX251bWFfc2xpdF9pbml0IChzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpzbGl0KTsKIHZvaWQgYWNwaV9udW1hX3Byb2Nlc3Nvcl9hZmZpbml0eV9pbml0IChzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSAqcGEpOwordm9pZCBhY3BpX251bWFfeDJhcGljX2FmZmluaXR5X2luaXQoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICpwYSk7CiB2b2lkIGFjcGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdCAoc3RydWN0IGFjcGlfc3JhdF9tZW1fYWZmaW5pdHkgKm1hKTsKIHZvaWQgYWNwaV9udW1hX2FyY2hfZml4dXAodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDZlOTE1ODcuLmQ5NjA4ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTQ0LDYgKzE0NCw5IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkKKworI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKIHN0cnVjdCBibGtfdHJhY2UgewogCWludCB0cmFjZV9zdGF0ZTsKIAlzdHJ1Y3QgcmNoYW4gKnJjaGFuOwpAQCAtMTk0LDYgKzE5Nyw4IEBACiBleHRlcm4gaW50IGJsa190cmFjZV9zdGFydHN0b3Aoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBzdGFydCk7CiBleHRlcm4gaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogCitleHRlcm4gc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGtfdHJhY2VfYXR0cl9ncm91cDsKKwogI2Vsc2UgLyogIUNPTkZJR19CTEtfREVWX0lPX1RSQUNFICovCiAjZGVmaW5lIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZykJCSgtRU5PVFRZKQogI2RlZmluZSBibGtfdHJhY2Vfc2h1dGRvd24ocSkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaAppbmRleCA5NzIzZWRkLi5mMmRlZDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKQEAgLTE5MywxMCArMTkzLDEwIEBACiAJCWNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbik7CiBhc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c19wcmVhZHYodW5zaWduZWQgbG9uZyBmZCwKIAkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKLQkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2hpZ2gsIHUzMiBwb3NfbG93KTsKKwkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKTsKIGFzbWxpbmthZ2Ugc3NpemVfdCBjb21wYXRfc3lzX3B3cml0ZXYodW5zaWduZWQgbG9uZyBmZCwKIAkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKLQkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2hpZ2gsIHUzMiBwb3NfbG93KTsKKwkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKTsKIAogaW50IGNvbXBhdF9kb19leGVjdmUoY2hhciAqIGZpbGVuYW1lLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKIAkgICAgICAgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IGQ5NWRhMTAuLjZmYWE3ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTY4LDYgKzY4LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbWlzczsKIAkJCXVuc2lnbmVkIGxvbmcgaGl0OwogCQl9OworCQl1bnNpZ25lZCBsb25nIG1pc3NfaGl0WzJdOwogCX07CiB9OwogCkBAIC0xMjUsMTAgKzEyNiw3IEBACiAJCQkJLmxpbmUgPSBfX0xJTkVfXywJCQlcCiAJCQl9OwkJCQkJCVwKIAkJX19fX19fciA9ICEhKGNvbmQpOwkJCQkJXAotCQlpZiAoX19fX19fcikJCQkJCQlcCi0JCQlfX19fX19mLmhpdCsrOwkJCQkJXAotCQllbHNlCQkJCQkJCVwKLQkJCV9fX19fX2YubWlzcysrOwkJCQkJXAorCQlfX19fX19mLm1pc3NfaGl0W19fX19fX3JdKys7CQkJCQlcCiAJCV9fX19fX3I7CQkJCQkJXAogCX0pKQogI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaCBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKaW5kZXggZmM2NWQyMS4uYjk5NjZlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0zOSw4ICszOSwxMCBAQAogI2RlZmluZSBDTl9JRFhfVjg2RAkJCTB4NAogI2RlZmluZSBDTl9WQUxfVjg2RF9VVkVTQUZCCQkweDEKICNkZWZpbmUgQ05fSURYX0JCCQkJMHg1CS8qIEJsYWNrQm9hcmQsIGZyb20gdGhlIFRTUCBHUEwgc2FtcGxpbmcgZnJhbWV3b3JrICovCisjZGVmaW5lIENOX0RTVF9JRFgJCQkweDYKKyNkZWZpbmUgQ05fRFNUX1ZBTAkJCTB4MQogCi0jZGVmaW5lIENOX05FVExJTktfVVNFUlMJCTYKKyNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJNwogCiAvKgogICogTWF4aW11bSBjb25uZWN0b3IncyBtZXNzYWdlIHNpemUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaCBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCmluZGV4IGFmMGUwMWQuLmViNWMyYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCkBAIC03MSw2ICs3MSw5IEBACiBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCSAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAogCQkJCSAgc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyICpibG9iKTsKKworYm9vbCBkZWJ1Z2ZzX2luaXRpYWxpemVkKHZvaWQpOworCiAjZWxzZQogCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0xODMsNiArMTg2LDExIEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWJ1Z2ZzX2luaXRpYWxpemVkKHZvaWQpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzMXdtLmggYi9pbmNsdWRlL2xpbnV4L2RzMXdtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYzY1ZTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9kczF3bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotLyogcGxhdGZvcm0gZGF0YSBmb3IgdGhlIERTMVdNIGRyaXZlciAqLwotCi1zdHJ1Y3QgZHMxd21fcGxhdGZvcm1fZGF0YSB7Ci0JaW50IGJ1c19zaGlmdDsJICAgIC8qIG51bWJlciBvZiBzaGlmdHMgbmVlZGVkIHRvIGNhbGN1bGF0ZSB0aGUKLQkJCSAgICAgKiBvZmZzZXQgYmV0d2VlbiBEUzFXTSByZWdpc3RlcnM7Ci0JCQkgICAgICogZS5nLiBvbiBoNXh4eCBhbmQgaDIyMDAgdGhpcyBpcyAyCi0JCQkgICAgICogKHJlZ2lzdGVycyBhbGlnbmVkIHRvIDQtYnl0ZSBib3VuZGFyaWVzKSwKLQkJCSAgICAgKiB3aGlsZSBvbiBoeDQ3MDAgdGhpcyBpcyAxICovCi0JaW50IGFjdGl2ZV9oaWdoOwotCXZvaWQgKCplbmFibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLX07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzdC5oIGIvaW5jbHVkZS9saW51eC9kc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZmZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kc3QuaApAQCAtMCwwICsxLDU4NyBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19EU1RfSAorI2RlZmluZSBfX0RTVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgorCisjZGVmaW5lIERTVF9OQU1FTEVOCQkzMgorI2RlZmluZSBEU1RfTkFNRQkJImRzdCIKKworZW51bSB7CisJLyogUmVtb3ZlIG5vZGUgd2l0aCBnaXZlbiBpZCBmcm9tIHN0b3JhZ2UgKi8KKwlEU1RfREVMX05PREUJPSAwLAorCS8qIEFkZCByZW1vdGUgbm9kZSB3aXRoIGdpdmVuIGlkIHRvIHRoZSBzdG9yYWdlICovCisJRFNUX0FERF9SRU1PVEUsCisJLyogQWRkIGxvY2FsIG5vZGUgd2l0aCBnaXZlbiBpZCB0byB0aGUgc3RvcmFnZSB0byBiZSBleHBvcnRlZCBhbmQgdXNlZCBieSByZW1vdGUgcGVlcnMgKi8KKwlEU1RfQUREX0VYUE9SVCwKKwkvKiBDcnlwdG8gaW5pdGlhbGl6YXRpb24gY29tbWFuZCAoaGFzaC9jaXBoZXIgdXNlZCB0byBwcm90ZWN0IHRoZSBjb25uZWN0aW9uKSAqLworCURTVF9DUllQVE8sCisJLyogU2VjdXJpdHkgYXR0cmlidXRlcyBmb3IgZ2l2ZW4gY29ubmVjdGlvbiAocGVybWlzc2lvbnMgZm9yIGV4YW1wbGUpICovCisJRFNUX1NFQ1VSSVRZLAorCS8qIFJlZ2lzdGVyIGdpdmVuIG5vZGUgaW4gdGhlIGJsb2NrIGxheWVyIHN1YnN5c3RlbSAqLworCURTVF9TVEFSVCwKKwlEU1RfQ01EX01BWAorfTsKKworc3RydWN0IGRzdF9jdGwKK3sKKwkvKiBTdG9yYWdlIG5hbWUgKi8KKwljaGFyCQkJbmFtZVtEU1RfTkFNRUxFTl07CisJLyogQ29tbWFuZCBmbGFncyAqLworCV9fdTMyCQkJZmxhZ3M7CisJLyogQ29tbWFuZCBpdHNlbGYgKHNlZSBhYm92ZSkgKi8KKwlfX3UzMgkJCWNtZDsKKwkvKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBwZXIgc2luZ2xlIHJlcXVlc3QgaW4gdGhpcyBkZXZpY2UgKi8KKwlfX3UzMgkJCW1heF9wYWdlczsKKwkvKiBTdGFsZS9lcnJvciB0cmFuc2FjdGlvbiBzY2FubmluZyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworCV9fdTMyCQkJdHJhbnNfc2Nhbl90aW1lb3V0OworCS8qIE1heGltdW0gbnVtYmVyIG9mIHJldHJ5IHNlbmRzIGJlZm9yZSBjb21wbGV0aW5nIHRyYW5zYWN0aW9uIGFzIGJyb2tlbiAqLworCV9fdTMyCQkJdHJhbnNfbWF4X3JldHJpZXM7CisJLyogU3RvcmFnZSBzaXplICovCisJX191NjQJCQlzaXplOworfTsKKworLyogUmVwbHkgY29tbWFuZCBjYXJyaWVzIGNvbXBsZXRpb24gc3RhdHVzICovCitzdHJ1Y3QgZHN0X2N0bF9hY2sKK3sKKwlzdHJ1Y3QgY25fbXNnCQltc2c7CisJaW50CQkJZXJyb3I7CisJaW50CQkJdW51c2VkWzNdOworfTsKKworLyoKKyAqIFVuZm9ydHVuYWx0ZWx5IHNvY2tldCBhZGRyZXNzIHN0cnVjdHVyZSBpcyBub3QgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlCisgKiBhbmQgaXMgcmVkZWZpbmVkIHRoZXJlLgorICovCisjZGVmaW5lIFNBRERSX01BWF9EQVRBCTEyOAorCitzdHJ1Y3Qgc2FkZHIgeworCS8qIGFkZHJlc3MgZmFtaWx5LCBBRl94eHgJKi8KKwl1bnNpZ25lZCBzaG9ydAkJc2FfZmFtaWx5OworCS8qIDE0IGJ5dGVzIG9mIHByb3RvY29sIGFkZHJlc3MJKi8KKwljaGFyCQkJc2FfZGF0YVtTQUREUl9NQVhfREFUQV07CisJLyogTnVtYmVyIG9mIGJ5dGVzIHVzZWQgaW4gc2FfZGF0YSAqLworCXVuc2lnbmVkIHNob3J0CQlzYV9kYXRhX2xlbjsKK307CisKKy8qIEFkZHJlc3Mgc3RydWN0dXJlICovCitzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCit7CisJLyogU29ja2V0IHR5cGU6IGRhdGFncmFtLCBzdHJlYW0uLi4qLworCXVuc2lnbmVkIGludAkJdHlwZTsKKwkvKiBMZXQgbWUgZ3Vlc3MsIGlzIGl0IGEgSnVwaXRlciBkaWFtZXRlcj8gKi8KKwl1bnNpZ25lZCBpbnQJCXByb3RvOworCS8qIFBlZXIncyBhZGRyZXNzICovCisJc3RydWN0IHNhZGRyCQlhZGRyOworfTsKKworc3RydWN0IGRzdF9jcnlwdG9fY3RsCit7CisJLyogQ2lwaGVyIGFuZCBoYXNoIG5hbWVzICovCisJY2hhcgkJCWNpcGhlcl9hbGdvW0RTVF9OQU1FTEVOXTsKKwljaGFyCQkJaGFzaF9hbGdvW0RTVF9OQU1FTEVOXTsKKworCS8qIEtleSBzaXplcy4gQ2FuIGJlIHplcm8gZm9yIGRpZ2VzdCBmb3IgZXhhbXBsZSAqLworCXVuc2lnbmVkIGludAkJY2lwaGVyX2tleXNpemUsIGhhc2hfa2V5c2l6ZTsKKwkvKiBBbGlnbm1lbnQuIENhbGN1bGF0ZWQgYnkgdGhlIERTVCBpdHNlbGYuICovCisJdW5zaWduZWQgaW50CQljcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKwkvKiBOdW1iZXIgb2YgdGhyZWFkcyB0byBwZXJmb3JtIGNyeXB0byBvcGVyYXRpb25zICovCisJaW50CQkJdGhyZWFkX251bTsKK307CisKKy8qIEV4cG9ydCBzZWN1cml0eSBhdHRyaWJ1dGVzIGhhdmUgdGhpcyBiaXRzIGNoZWNrZWQgaW4gd2hlbiBjbGllbnQgY29ubmVjdHMgKi8KKyNkZWZpbmUgRFNUX1BFUk1fUkVBRAkJKDE8PDApCisjZGVmaW5lIERTVF9QRVJNX1dSSVRFCQkoMTw8MSkKKworLyoKKyAqIFJpZ2h0IG5vdyBpdCBpcyBzaW1wbGUgbW9kZWwsIHdoZXJlIGVhY2ggcmVtb3RlIGFkZHJlc3MKKyAqIGlzIGFzc2lnbmVkIHRvIHNldCBvZiBwZXJtaXNzaW9ucyBpdCBpcyBhbGxvd2VkIHRvIHBlcmZvcm0uCisgKiBJbiByZWFsIHdvcmxkIGJsb2NrIGRldmljZSBkb2VzIG5vdCBrbm93IGFueXRoaW5nIGJ1dAorICogcmVhZGluZyBhbmQgd3JpdGluZywgc28gaXQgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2guCisgKi8KK3N0cnVjdCBkc3Rfc2VjdXJlX3VzZXIKK3sKKwl1bnNpZ25lZCBpbnQJCXBlcm1pc3Npb25zOworCXN0cnVjdCBzYWRkcgkJYWRkcjsKK307CisKKy8qCisgKiBFeHBvcnQgY29udHJvbCBjb21tYW5kOiBkZXZpY2UgdG8gZXhwb3J0IGFuZCBuZXR3b3JrIGFkZHJlc3MgdG8gYWNjZXB0CisgKiBjbGllbnRzIHRvIHdvcmsgd2l0aCBnaXZlbiBkZXZpY2UKKyAqLworc3RydWN0IGRzdF9leHBvcnRfY3RsCit7CisJY2hhcgkJCWRldmljZVtEU1RfTkFNRUxFTl07CisJc3RydWN0IGRzdF9uZXR3b3JrX2N0bAljdGw7Cit9OworCitlbnVtIHsKKwlEU1RfQ0ZHCT0gMSwgCQkvKiBSZXF1ZXN0IHJlbW90ZSBjb25maWd1cmF0aW9uICovCisJRFNUX0lPLAkJCS8qIElPIGNvbW1hbmQgKi8KKwlEU1RfSU9fUkVTUE9OU0UsCS8qIElPIHJlc3BvbnNlICovCisJRFNUX1BJTkcsCQkvKiBLZWVwYWxpdmUgbWVzc2FnZSAqLworCURTVF9OQ01EX01BWCwKK307CisKK3N0cnVjdCBkc3RfY21kCit7CisJLyogTmV0d29yayBjb21tYW5kIGl0c2VsZiwgc2VlIGFib3ZlICovCisJX191MzIJCQljbWQ7CisJLyoKKwkgKiBTaXplIG9mIHRoZSBhdHRhY2hlZCBkYXRhCisJICogKGluIG1vc3QgY2FzZXMsIGZvciBSRUFEIGNvbW1hbmQgaXQgbWVhbnMgaG93IG1hbnkgYnl0ZXMgd2VyZSByZXF1ZXN0ZWQpCisJICovCisJX191MzIJCQlzaXplOworCS8qIENyeXB0byBzaXplOiBudW1iZXIgb2YgYXR0YWNoZWQgYnl0ZXMgd2l0aCBkaWdlc3QvaG1hYyAqLworCV9fdTMyCQkJY3NpemU7CisJLyogSGVyZSB3ZSBjYW4gY2Fycnkgc2VjcmV0IGRhdGEgKi8KKwlfX3UzMgkJCXJlc2VydmVkOworCS8qIFJlYWQvd3JpdGUgYml0cywgc2VlIGhvdyB0aGV5IGFyZSBlbmNvZGVkIGluIGJpbyBzdHJ1Y3R1cmUgKi8KKwlfX3U2NAkJCXJ3OworCS8qIEJJTyBmbGFncyAqLworCV9fdTY0CQkJZmxhZ3M7CisJLyogVW5pcXVlIGNvbW1hbmQgaWQgKGxpa2UgdHJhbnNhY3Rpb24gSUQpICovCisJX191NjQJCQlpZDsKKwkvKiBTZWN0b3IgdG8gc3RhcnQgSU8gZnJvbSAqLworCV9fdTY0CQkJc2VjdG9yOworCS8qIEhhc2ggZGF0YSBpcyBwbGFjZWQgYWZ0ZXIgdGhpcyBoZWFkZXIgKi8KKwlfX3U4CQkJaGFzaFswXTsKK307CisKKy8qCisgKiBDb252ZXJ0IGNvbW1hbmQgdG8vZnJvbSBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKiBXZSBkbyBub3QgdXNlIGh0b24qKCkgZnVuY3Rpb25zLCBzaW5jZSB0aGVyZSBpcworICogbm8gNjQtYml0IGltcGxlbWVudGF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X2NvbnZlcnRfY21kKHN0cnVjdCBkc3RfY21kICpjKQoreworCWMtPmNtZCA9IF9fY3B1X3RvX2JlMzIoYy0+Y21kKTsKKwljLT5jc2l6ZSA9IF9fY3B1X3RvX2JlMzIoYy0+Y3NpemUpOworCWMtPnNpemUgPSBfX2NwdV90b19iZTMyKGMtPnNpemUpOworCWMtPnNlY3RvciA9IF9fY3B1X3RvX2JlNjQoYy0+c2VjdG9yKTsKKwljLT5pZCA9IF9fY3B1X3RvX2JlNjQoYy0+aWQpOworCWMtPmZsYWdzID0gX19jcHVfdG9fYmU2NChjLT5mbGFncyk7CisJYy0+cncgPSBfX2NwdV90b19iZTY0KGMtPnJ3KTsKK30KKworLyogVHJhbnNhY3Rpb24gaWQgKi8KK3R5cGVkZWYgX191NjQgZHN0X2dlbl90OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKworI2lmZGVmIENPTkZJR19EU1RfREVCVUcKKyNkZWZpbmUgZHByaW50ayhmLCBhLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgZiwgIyNhKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKKwlkcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7fQorI2VuZGlmCisKK3N0cnVjdCBkc3Rfbm9kZTsKKworc3RydWN0IGRzdF90cmFucworeworCS8qIERTVCBub2RlIHdlIGFyZSB3b3JraW5nIHdpdGggKi8KKwlzdHJ1Y3QgZHN0X25vZGUJCSpuOworCisJLyogRW50cnkgaW5zaWRlIHRyYW5zYWN0aW9uIHRyZWUgKi8KKwlzdHJ1Y3QgcmJfbm9kZQkJdHJhbnNfZW50cnk7CisKKwkvKiBNZXJsaW4ga2lsbHMgdGhpcyB0cmFuc2FjdGlvbiB3aGVuIHRoaXMgbWVtb3J5IGNlbGwgZXF1YWxzIHplcm8gKi8KKwlhdG9taWNfdAkJcmVmY250OworCisJLyogSG93IHRoaXMgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBieSBjcnlwdG8gZW5naW5lICovCisJc2hvcnQJCQllbmM7CisJLyogSG93IG1hbnkgdGltZXMgdGhpcyB0cmFuc2FjdGlvbiB3YXMgcmVzZW50ICovCisJc2hvcnQJCQlyZXRyaWVzOworCS8qIENvbXBsZXRpb24gc3RhdHVzICovCisJaW50CQkJZXJyb3I7CisKKwkvKiBXaGVuIGRpZCB3ZSBzZW5kIGl0IHRvIHRoZSByZW1vdGUgcGVlciAqLworCWxvbmcJCQlzZW5kX3RpbWU7CisKKwkvKiBNeSBuYW1lIGlzLi4uCisJICogV2VsbCwgY29tcHV0ZXJzIGRvZXMgbm90IHNwZWFrLCB0aGV5IGhhdmUgdW5pcXVlIGlkIGluc3RlYWQgKi8KKwlkc3RfZ2VuX3QJCWdlbjsKKworCS8qIEJsb2NrIElPIHdlIGFyZSB3b3JraW5nIHdpdGggKi8KKwlzdHJ1Y3QgYmlvCQkqYmlvOworCisJLyogTmV0d29yayBjb21tYW5kIGZvciBhYm92ZSBibG9jayBJTyByZXF1ZXN0ICovCisJc3RydWN0IGRzdF9jbWQJCWNtZDsKK307CisKK3N0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZQoreworCS8qIFdoYXQgc2hvdWxkIHdlIGRvIHdpdGggYWxsIGJsb2NrIHJlcXVlc3RzICovCisJc3RydWN0IGNyeXB0b19oYXNoCSpoYXNoOworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlcgkqY2lwaGVyOworCisJLyogUG9vbCBvZiBwYWdlcyB1c2VkIHRvIGVuY3J5cHQgZGF0YSBpbnRvIGJlZm9yZSBzZW5kaW5nICovCisJaW50CQkJcGFnZV9udW07CisJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CisKKwkvKiBXaGF0IHRvIGRvIHdpdGggY3VycmVudCByZXF1ZXN0ICovCisJaW50CQkJZW5jOworCS8qIFdobyB3ZSBhcmUgYW5kIHdoZXJlIGRvIHdlIGdvICovCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzcmMsICpkc3Q7CisKKwkvKiBNYXhpbXVtIHRpbWVvdXQgd2FpdGluZyBmb3IgZW5jcnlwdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KKwlsb25nCQkJdGltZW91dDsKKwkvKiBJViBpcyBhIDY0LWJpdCBzZXF1ZW50aWFsIGNvdW50ZXIgKi8KKwl1NjQJCQlpdjsKKworCS8qIFNlY3JldCBkYXRhICovCisJdm9pZAkJCSpwcml2YXRlOworCisJLyogQ2FjaGVkIHRlbXBvcmFyeSBkYXRhIGxpdmVzIGhlcmUgKi8KKwlpbnQJCQlzaXplOworCXZvaWQJCQkqZGF0YTsKK307CisKK3N0cnVjdCBkc3Rfc3RhdGUKK3sKKwkvKiBUaGUgbWFpbiBzdGF0ZSBwcm90ZWN0aW9uICovCisJc3RydWN0IG11dGV4CQlzdGF0ZV9sb2NrOworCisJLyogUG9sbGluZyBtYWNoaW5lcnkgZm9yIHNvY2tldHMgKi8KKwl3YWl0X3F1ZXVlX3QgCQl3YWl0OworCXdhaXRfcXVldWVfaGVhZF90IAkqd2hlYWQ7CisJLyogTW9zdCBvZiBldmVudHMgYXJlIGJlaW5nIHdhaXRlZCBoZXJlICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgCXRocmVhZF93YWl0OworCisJLyogV2hvIG93bnMgdGhpcz8gKi8KKwlzdHJ1Y3QgZHN0X25vZGUJCSpub2RlOworCisJLyogTmV0d29yayBhZGRyZXNzIGZvciB0aGlzIHN0YXRlICovCisJc3RydWN0IGRzdF9uZXR3b3JrX2N0bAljdGw7CisKKwkvKiBQZXJtaXNzaW9ucyB0byB3b3JrIHdpdGg6IHJlYWQtb25seSBvciBydyBjb25uZWN0aW9uICovCisJdTMyCQkJcGVybWlzc2lvbnM7CisKKwkvKiBDYWxsZWQgd2hlbiB3ZSBuZWVkIHRvIGNsZWFuIHByaXZhdGUgZGF0YSAqLworCXZvaWQJCQkoKiBjbGVhbnVwKShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7CisKKwkvKiBVc2VkIGJ5IHRoZSBzZXJ2ZXI6IEJJTyBjb21wbGV0aW9uIHF1ZXVlcyBCSU9zIGhlcmUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlcXVlc3RfbGlzdDsKKwlzcGlubG9ja190CQlyZXF1ZXN0X2xvY2s7CisKKwkvKiBHdWVzcyB3aGF0PyBObywgaXQgaXMgbm90IG51bWJlciBvZiBwbGFuZXRzICovCisJYXRvbWljX3QJCXJlZmNudDsKKworCS8qIFRoaXMgZmxhZ3MgaXMgc2V0IHdoZW4gY29ubmVjdGlvbiBzaG91bGQgYmUgZHJvcHBlZCAqLworCWludAkJCW5lZWRfZXhpdDsKKworCS8qCisJICogU29ja2V0IHRvIHdvcmsgd2l0aC4gU2Vjb25kIHBvaW50ZXIgaXMgdXNlZCBmb3IKKwkgKiBsb2NrbGVzcyBjaGVjayBpZiBzb2NrZXQgd2FzIGNoYW5nZWQgYmVmb3JlIHBlcmZvcm1pbmcKKwkgKiBuZXh0IGFjdGlvbiAobGlrZSB3b3JraW5nIHdpdGggY2FjaGVkIHBvbGxpbmcgcmVzdWx0KQorCSAqLworCXN0cnVjdCBzb2NrZXQJCSpzb2NrZXQsICpyZWFkX3NvY2tldDsKKworCS8qIENhY2hlZCBwcmVhbGxvY2F0ZWQgZGF0YSAqLworCXZvaWQJCQkqZGF0YTsKKwl1bnNpZ25lZCBpbnQJCXNpemU7CisKKwkvKiBDdXJyZW50bHkgcHJvY2Vzc2VkIGNvbW1hbmQgKi8KKwlzdHJ1Y3QgZHN0X2NtZAkJY21kOworfTsKKworc3RydWN0IGRzdF9pbmZvCit7CisJLyogRGV2aWNlIHNpemUgKi8KKwl1NjQJCQlzaXplOworCisJLyogTG9jYWwgZGV2aWNlIG5hbWUgZm9yIGV4cG9ydCBkZXZpY2VzICovCisJY2hhcgkJCWxvY2FsW0RTVF9OQU1FTEVOXTsKKworCS8qIE5ldHdvcmsgc2V0dXAgKi8KKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCW5ldDsKKworCS8qIFN5c2ZzIGJpdHMgdXNlIHRoaXMgKi8KKwlzdHJ1Y3QgZGV2aWNlCQlkZXZpY2U7Cit9OworCitzdHJ1Y3QgZHN0X25vZGUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGVfZW50cnk7CisKKwkvKiBIaSwgbXkgbmFtZSBpcyBzdG9yZWQgaGVyZSAqLworCWNoYXIJCQluYW1lW0RTVF9OQU1FTEVOXTsKKwkvKiBNeSBjYWNoZSBuYW1lIGlzIHN0b3JlZCBoZXJlICovCisJY2hhcgkJCWNhY2hlX25hbWVbRFNUX05BTUVMRU5dOworCisJLyogQmxvY2sgZGV2aWNlIGF0dGFjaGVkIHRvIGdpdmVuIG5vZGUuCisJICogT25seSB2YWxpZCBmb3IgZXhwb3J0aW5nIG5vZGVzICovCisJc3RydWN0IGJsb2NrX2RldmljZSAJKmJkZXY7CisJLyogTmV0d29yayBzdGF0ZSBtYWNoaW5lIGZvciBnaXZlbiBwZWVyICovCisJc3RydWN0IGRzdF9zdGF0ZQkqc3RhdGU7CisKKwkvKiBCbG9jayBJTyBtYWNoaW5lcnkgKi8KKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcXVldWU7CisJc3RydWN0IGdlbmRpc2sJCSpkaXNrOworCisJLyogTnVtYmVyIG9mIHRocmVhZHMgaW4gcHJvY2Vzc2luZyBwb29sICovCisJaW50CQkJdGhyZWFkX251bTsKKwkvKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBzaW5nbGUgSU8gKi8KKwlpbnQJCQltYXhfcGFnZXM7CisKKwkvKiBJJ20gdGhhdCBiaWcgaW4gYnl0ZXMgKi8KKwlsb2ZmX3QJCQlzaXplOworCisJLyogRXhwb3J0ZWQgdG8gdXNlcnNwYWNlIG5vZGUgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgZHN0X2luZm8JCSppbmZvOworCisJLyoKKwkgKiBTZWN1cml0eSBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBVc2VkIG9ubHkgYnkgZXhwb3J0aW5nIG5vZGUgY3VycmVudGx5LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJc2VjdXJpdHlfbGlzdDsKKwlzdHJ1Y3QgbXV0ZXgJCXNlY3VyaXR5X2xvY2s7CisKKwkvKgorCSAqIFdoZW4gdGhpcyB1bmVyZmxvd3MgYmVsb3cgemVybywgdW5pdmVyc2l0eSBjb2xsYXBzZXMuCisJICogQnV0IHRoaXMgd2lsbCBub3QgaGFwcGVuLCBzaW5jZSBub2RlIHdpbGwgYmUgZnJlZWQsCisJICogd2hlbiByZWZlcmVuY2UgY291bnRlciByZWFjaGVzIHplcm8uCisJICovCisJYXRvbWljX3QJCXJlZmNudDsKKworCS8qIEhvdyBwcmVjaXNlbHkgc2hvdWxkIEkgYmUgc3RhcnRlZD8gKi8KKwlpbnQgCQkJKCpzdGFydCkoc3RydWN0IGRzdF9ub2RlICopOworCisJLyogQ3J5cHRvIGNhcGFiaWxpdGllcyAqLworCXN0cnVjdCBkc3RfY3J5cHRvX2N0bAljcnlwdG87CisJdTgJCQkqaGFzaF9rZXk7CisJdTgJCQkqY2lwaGVyX2tleTsKKworCS8qIFBvb2wgb2YgcHJvY2Vzc2luZyB0aHJlYWQgKi8KKwlzdHJ1Y3QgdGhyZWFkX3Bvb2wJKnBvb2w7CisKKwkvKiBUcmFuc2FjdGlvbiBJRHMgbGl2ZSBoZXJlICovCisJYXRvbWljX2xvbmdfdAkJZ2VuOworCisJLyoKKwkgKiBIb3cgZnJlcXVlbnRseSBhbmQgaG93IG1hbnkgdGltZXMgdHJhbnNhY3Rpb24KKwkgKiB0cmVlIHNob3VsZCBiZSBzY2FubmVkIHRvIGRyb3Agc3RhbGUgb2JqZWN0cy4KKwkgKi8KKwlsb25nCQkJdHJhbnNfc2Nhbl90aW1lb3V0OworCWludAkJCXRyYW5zX21heF9yZXRyaWVzOworCisJLyogU21hbGwgZ25vbWVzIGxpdmUgaGVyZSAqLworCXN0cnVjdCByYl9yb290CQl0cmFuc19yb290OworCXN0cnVjdCBtdXRleAkJdHJhbnNfbG9jazsKKworCS8qCisJICogVHJhbnNhY3Rpb24gY2FjaGUvbWVtb3J5IHBvb2wuCisJICogSXQgaXMgYmlnIGVub3VnaCB0byBjb250YWluIG5vdCBvbmx5IHRyYW5zYWN0aW9uCisJICogaXRzZWxmLCBidXQgYWRkaXRpb25hbCBjcnlwdG8gZGF0YSAoZGlnZXN0L2htYWMpLgorCSAqLworCXN0cnVjdCBrbWVtX2NhY2hlCSp0cmFuc19jYWNoZTsKKwltZW1wb29sX3QJCSp0cmFuc19wb29sOworCisJLyogVGhpcyBlbnRpdHkgc2NhbnMgdHJhbnNhY3Rpb24gdHJlZSAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgCXRyYW5zX3dvcms7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworfTsKKworLyogS2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGUgKi8KK3N0cnVjdCBkc3Rfc2VjdXJlCit7CisJc3RydWN0IGxpc3RfaGVhZAlzZWNfZW50cnk7CisJc3RydWN0IGRzdF9zZWN1cmVfdXNlcglzZWM7Cit9OworCitpbnQgZHN0X3Byb2Nlc3NfYmlvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKTsKKworaW50IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcik7CitpbnQgZHN0X25vZGVfaW5pdF9saXN0ZW5lZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9nZXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA9PSAwKTsKKwlhdG9taWNfaW5jKCZzdC0+cmVmY250KTsKKwlyZXR1cm4gc3Q7Cit9CisKK3ZvaWQgZHN0X3N0YXRlX3B1dChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7CisKK3N0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHN0X25vZGUgKm4pOworaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKK3ZvaWQgZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKwordm9pZCBkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCitpbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKwordm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJbXV0ZXhfbG9jaygmc3QtPnN0YXRlX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX3VubG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwltdXRleF91bmxvY2soJnN0LT5zdGF0ZV9sb2NrKTsKK30KKwordm9pZCBkc3RfcG9sbF9leGl0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKK2ludCBkc3RfcG9sbF9pbml0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZHN0X3N0YXRlX3BvbGwoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJdW5zaWduZWQgaW50IHJldmVudHMgPSBQT0xMSFVQIHwgUE9MTEVSUjsKKworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlpZiAoc3QtPnNvY2tldCkKKwkJcmV2ZW50cyA9IHN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCBOVUxMKTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCXJldHVybiByZXZlbnRzOworfQorCitzdGF0aWMgaW5saW5lIGludCBkc3RfdGhyZWFkX3NldHVwKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHN0X25vZGVfcHV0KHN0cnVjdCBkc3Rfbm9kZSAqbik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9ub2RlICpkc3Rfbm9kZV9nZXQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCWF0b21pY19pbmMoJm4tPnJlZmNudCk7CisJcmV0dXJuIG47Cit9CisKK2ludCBkc3RfZGF0YV9yZWN2KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CitpbnQgZHN0X3JlY3ZfY2RhdGEoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmNkYXRhKTsKK2ludCBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG1vcmUpOworCitpbnQgZHN0X3NlbmRfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgZHN0X2NtZCAqY21kLCBzdHJ1Y3QgYmlvICpiaW8pOworCitpbnQgZHN0X3Byb2Nlc3NfaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworaW50IGRzdF9leHBvcnRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKTsKK2ludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7CitpbnQgZHN0X3N0YXJ0X2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4pOworCitpbnQgX19pbml0IGRzdF9leHBvcnRfaW5pdCh2b2lkKTsKK3ZvaWQgZHN0X2V4cG9ydF9leGl0KHZvaWQpOworCisvKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgZXhwb3J0IGJsb2NrIElPIHJlcXVlc3RzICovCitzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2Cit7CisJc3RydWN0IGxpc3RfaGVhZAkJcmVxdWVzdF9lbnRyeTsKKwlzdHJ1Y3QgZHN0X3N0YXRlCQkqc3RhdGU7CisJc3RydWN0IGJpbwkJCSpiaW87CisJc3RydWN0IGRzdF9jbWQJCQljbWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZHN0X3RyYW5zX2dldChzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCWF0b21pY19pbmMoJnQtPnJlZmNudCk7Cit9CisKK3N0cnVjdCBkc3RfdHJhbnMgKmRzdF90cmFuc19zZWFyY2goc3RydWN0IGRzdF9ub2RlICpub2RlLCBkc3RfZ2VuX3QgZ2VuKTsKK2ludCBkc3RfdHJhbnNfcmVtb3ZlKHN0cnVjdCBkc3RfdHJhbnMgKnQpOworaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwordm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpOworCisvKgorICogQ29udmVydCBiaW8gaW50byBuZXR3b3JrIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3RfYmlvX3RvX2NtZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY21kICpjbWQsCisJCXUzMiBjb21tYW5kLCB1NjQgaWQpCit7CisJY21kLT5jbWQgPSBjb21tYW5kOworCWNtZC0+ZmxhZ3MgPSAoYmlvLT5iaV9mbGFncyA8PCBCSU9fUE9PTF9CSVRTKSA+PiBCSU9fUE9PTF9CSVRTOworCWNtZC0+cncgPSBiaW8tPmJpX3J3OworCWNtZC0+c2l6ZSA9IGJpby0+Ymlfc2l6ZTsKKwljbWQtPmNzaXplID0gMDsKKwljbWQtPmlkID0gaWQ7CisJY21kLT5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKK307CisKK2ludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKK2ludCBkc3RfdHJhbnNfY3J5cHRvKHN0cnVjdCBkc3RfdHJhbnMgKnQpOworCitpbnQgZHN0X25vZGVfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCk7Cit2b2lkIGRzdF9ub2RlX2NyeXB0b19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGRzdF9uZWVkX2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKKwkvKgorCSAqIExvZ2ljYWwgT1IgaXMgYXBwcm9wcmlhdGUgaGVyZSwgYnV0IGJvb2xlYW4gb25lIHByb2R1Y2VzCisJICogbW9yZSBvcHRpbWFsIGNvZGUsIHNvIGl0IGlzIHVzZWQgaW5zdGVhZC4KKwkgKi8KKwlyZXR1cm4gKGMtPmhhc2hfYWxnb1swXSB8IGMtPmNpcGhlcl9hbGdvWzBdKTsKK30KKworaW50IGRzdF9ub2RlX3RyYW5zX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Cit2b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKTsKKworLyoKKyAqIFBvb2wgb2YgdGhyZWFkcy4KKyAqIFJlYWR5IGxpc3QgY29udGFpbnMgdGhyZWFkcyBjdXJyZW50bHkgZnJlZSB0byBiZSB1c2VkLAorICogYWN0aXZlIG9uZSBjb250YWlucyB0aHJlYWRzIHdpdGggc29tZSB3b3JrIHNjaGVkdWxlZCBmb3IgdGhlbS4KKyAqIENhbGxlciBjYW4gd2FpdCBpbiBnaXZlbiBxdWV1ZSB3aGVuIHRocmVhZCBpcyByZWFkeS4KKyAqLworc3RydWN0IHRocmVhZF9wb29sCit7CisJaW50CQkJdGhyZWFkX251bTsKKwlzdHJ1Y3QgbXV0ZXgJCXRocmVhZF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJcmVhZHlfbGlzdCwgYWN0aXZlX2xpc3Q7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworfTsKKwordm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCk7Cit2b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQoc3RydWN0IHRocmVhZF9wb29sICpwLCB1bnNpZ25lZCBpbnQgaWQpOworaW50IHRocmVhZF9wb29sX2FkZF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwLAorCQljaGFyICpuYW1lLAorCQl1bnNpZ25lZCBpbnQgaWQsCisJCXZvaWQgKigqIGluaXQpKHZvaWQgKmRhdGEpLAorCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKmRhdGEpLAorCQl2b2lkICpkYXRhKTsKKwordm9pZCB0aHJlYWRfcG9vbF9kZXN0cm95KHN0cnVjdCB0aHJlYWRfcG9vbCAqcCk7CitzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnRocmVhZF9wb29sX2NyZWF0ZShpbnQgbnVtLCBjaGFyICpuYW1lLAorCQl2b2lkICooKiBpbml0KSh2b2lkICpkYXRhKSwKKwkJdm9pZCAoKiBjbGVhbnVwKSh2b2lkICpkYXRhKSwKKwkJdm9pZCAqZGF0YSk7CisKK2ludCB0aHJlYWRfcG9vbF9zY2hlZHVsZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWludCAoKiBzZXR1cCkodm9pZCAqc3RvcmVkX3ByaXZhdGUsIHZvaWQgKnNldHVwX2RhdGEpLAorCQlpbnQgKCogYWN0aW9uKSh2b2lkICpzdG9yZWRfcHJpdmF0ZSwgdm9pZCAqc2V0dXBfZGF0YSksCisJCXZvaWQgKnNldHVwX2RhdGEsIGxvbmcgdGltZW91dCk7CitpbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWludCAoKiBzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCWludCAoKiBhY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAorCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQsIHZvaWQgKmlkKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0RTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBhN2Y4MTM0Li4wMTVhM2QyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEsMTUgKzEsMTggQEAKICNpZm5kZWYgX0xJTlVYX0ZUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZV9jbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogCkBAIC05NSw5ICs5OCw0MSBAQAogCQkgICBsb2ZmX3QgKnBwb3MpOwogI2VuZGlmCiAKK3N0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJY2hhcgkJCSpuYW1lOworCWludAkJCSgqZnVuYykoY2hhciAqZnVuYywgY2hhciAqY21kLAorCQkJCQljaGFyICpwYXJhbXMsIGludCBlbmFibGUpOworfTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotLyogYXNtL2Z0cmFjZS5oIG11c3QgYmUgZGVmaW5lZCBmb3IgYXJjaHMgc3VwcG9ydGluZyBkeW5hbWljIGZ0cmFjZSAqLwotI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKworaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCk7CitpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcG9zdF9wcm9jZXNzKHZvaWQpOworCitzdHJ1Y3Qgc2VxX2ZpbGU7CisKK3N0cnVjdCBmdHJhY2VfcHJvYmVfb3BzIHsKKwl2b2lkCQkJKCpmdW5jKSh1bnNpZ25lZCBsb25nIGlwLAorCQkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwKKwkJCQkJdm9pZCAqKmRhdGEpOworCWludAkJCSgqY2FsbGJhY2spKHVuc2lnbmVkIGxvbmcgaXAsIHZvaWQgKipkYXRhKTsKKwl2b2lkCQkJKCpmcmVlKSh2b2lkICoqZGF0YSk7CisJaW50CQkJKCpwcmludCkoc3RydWN0IHNlcV9maWxlICptLAorCQkJCQkgdW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsCisJCQkJCSB2b2lkICpkYXRhKTsKK307CisKK2V4dGVybiBpbnQKK3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAorCQkJICAgICAgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZAordW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywKKwkJCQl2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkCit1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9mdW5jKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfYWxsKGNoYXIgKmdsb2IpOwogCiBlbnVtIHsKIAlGVFJBQ0VfRkxfRlJFRQkJPSAoMSA8PCAwKSwKQEAgLTExMCwxNSArMTQ1LDIzIEBACiB9OwogCiBzdHJ1Y3QgZHluX2Z0cmFjZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXVuc2lnbmVkIGxvbmcJCWlwOyAvKiBhZGRyZXNzIG9mIG1jb3VudCBjYWxsLXNpdGUgKi8KLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlCWFyY2g7CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nCQlpcDsgLyogYWRkcmVzcyBvZiBtY291bnQgY2FsbC1zaXRlICovCisJCXN0cnVjdCBkeW5fZnRyYWNlCSpmcmVlbGlzdDsKKwl9OworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCXN0cnVjdCBkeW5fZnRyYWNlCSpuZXdsaXN0OworCX07CisJc3RydWN0IGR5bl9hcmNoX2Z0cmFjZQkJYXJjaDsKIH07CiAKIGludCBmdHJhY2VfZm9yY2VfdXBkYXRlKHZvaWQpOwogdm9pZCBmdHJhY2Vfc2V0X2ZpbHRlcih1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCk7CiAKK2ludCByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKTsKK2ludCB1bnJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpOworCiAvKiBkZWZpbmVkIGluIGFyY2ggKi8KIGV4dGVybiBpbnQgZnRyYWNlX2lwX2NvbnZlcnRlZCh1bnNpZ25lZCBsb25nIGlwKTsKIGV4dGVybiBpbnQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSk7CkBAIC0xMjYsNiArMTY5LDEwIEBACiBleHRlcm4gdm9pZCBmdHJhY2VfY2FsbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX2NhbGwodm9pZCk7CiBleHRlcm4gdm9pZCBtY291bnRfY2FsbCh2b2lkKTsKKworI2lmbmRlZiBGVFJBQ0VfQUREUgorI2RlZmluZSBGVFJBQ0VfQUREUiAoKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2NhbGxlcikKKyNlbmRpZgogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIGV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCk7CiBleHRlcm4gaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKTsKQEAgLTEzNiw3ICsxODMsNyBAQAogI2VuZGlmCiAKIC8qKgotICogZnRyYWNlX21ha2Vfbm9wIC0gY29udmVydCBjb2RlIGludG8gdG9wCisgKiBmdHJhY2VfbWFrZV9ub3AgLSBjb252ZXJ0IGNvZGUgaW50byBub3AKICAqIEBtb2Q6IG1vZHVsZSBzdHJ1Y3R1cmUgaWYgY2FsbGVkIGJ5IG1vZHVsZSBsb2FkIGluaXRpYWxpemF0aW9uCiAgKiBAcmVjOiB0aGUgbWNvdW50IGNhbGwgc2l0ZSByZWNvcmQKICAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0aGF0IHRoZSBjYWxsIHNpdGUgc2hvdWxkIGJlIGNhbGxpbmcKQEAgLTE4MSw3ICsyMjgsNiBAQAogICovCiBleHRlcm4gaW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotCiAvKiBNYXkgYmUgZGVmaW5lZCBpbiBhcmNoICovCiBleHRlcm4gaW50IGZ0cmFjZV9hcmNoX3JlYWRfZHluX2luZm8oY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiAKQEAgLTE5OCw2ICsyNDQsMTQgQEAKICMgZGVmaW5lIGZ0cmFjZV9kaXNhYmxlX2RhZW1vbigpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2VfZW5hYmxlX2RhZW1vbigpCQkJZG8geyB9IHdoaWxlICgwKQogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9yZWxlYXNlKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpIHsgfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoY2hhciAqY21kX25hbWUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIC8qIHRvdGFsbHkgZGlzYWJsZSBmdHJhY2UgLSBjYW4gbm90IHJlLWVuYWJsZSBhZnRlciB0aGlzICovCkBAIC0yMzMsMjQgKzI4NywyNSBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgotLyogVE9ETzogbmVlZCB0byBmaXggdGhpcyBmb3IgQVJNICovCi0jIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLSMgZGVmaW5lIENBTExFUl9BRERSMSAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDEpKQotIyBkZWZpbmUgQ0FMTEVSX0FERFIyICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMikpCi0jIGRlZmluZSBDQUxMRVJfQUREUjMgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygzKSkKLSMgZGVmaW5lIENBTExFUl9BRERSNCAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDQpKQotIyBkZWZpbmUgQ0FMTEVSX0FERFI1ICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNSkpCi0jIGRlZmluZSBDQUxMRVJfQUREUjYgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg2KSkKLSNlbHNlCi0jIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLSMgZGVmaW5lIENBTExFUl9BRERSMSAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSMiAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSMyAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSNCAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSNSAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSNiAwVUwKLSNlbmRpZgorI2lmbmRlZiBIQVZFX0FSQ0hfQ0FMTEVSX0FERFIKKyMgaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKyMgIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjEgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjIgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygyKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjMgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygzKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjQgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg0KSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjUgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg1KSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjYgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg2KSkKKyMgZWxzZQorIyAgZGVmaW5lIENBTExFUl9BRERSMCAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorIyAgZGVmaW5lIENBTExFUl9BRERSMSAwVUwKKyMgIGRlZmluZSBDQUxMRVJfQUREUjIgMFVMCisjICBkZWZpbmUgQ0FMTEVSX0FERFIzIDBVTAorIyAgZGVmaW5lIENBTExFUl9BRERSNCAwVUwKKyMgIGRlZmluZSBDQUxMRVJfQUREUjUgMFVMCisjICBkZWZpbmUgQ0FMTEVSX0FERFI2IDBVTAorIyBlbmRpZgorI2VuZGlmIC8qIGlmbmRlZiBIQVZFX0FSQ0hfQ0FMTEVSX0FERFIgKi8KIAogI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgogICBleHRlcm4gdm9pZCB0aW1lX2hhcmRpcnFzX29uKHVuc2lnbmVkIGxvbmcgYTAsIHVuc2lnbmVkIGxvbmcgYTEpOwpAQCAtMjY4LDU0ICszMjMsNiBAQAogIyBkZWZpbmUgdHJhY2VfcHJlZW1wdF9vZmYoYTAsIGExKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVFJBQ0lORwotZXh0ZXJuIGludCBmdHJhY2VfZHVtcF9vbl9vb3BzOwotCi1leHRlcm4gdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdHJhY2luZ19zdG9wKHZvaWQpOwotZXh0ZXJuIHZvaWQgZnRyYWNlX29mZl9wZXJtYW5lbnQodm9pZCk7Ci0KLWV4dGVybiB2b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKTsKLQotLyoqCi0gKiBmdHJhY2VfcHJpbnRrIC0gcHJpbnRmIGZvcm1hdHRpbmcgaW4gdGhlIGZ0cmFjZSBidWZmZXIKLSAqIEBmbXQ6IHRoZSBwcmludGYgZm9ybWF0IGZvciBwcmludGluZwotICoKLSAqIE5vdGU6IF9fZnRyYWNlX3ByaW50ayBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgZnRyYWNlX3ByaW50ayBhbmQKLSAqICAgICAgIHRoZSBAaXAgaXMgcGFzc2VkIGluIHZpYSB0aGUgZnRyYWNlX3ByaW50ayBtYWNyby4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIGtlcm5lbCBkZXZlbG9wZXIgdG8gZGVidWcgZmFzdCBwYXRoIHNlY3Rpb25zCi0gKiB0aGF0IHByaW50ayBpcyBub3QgYXBwcm9wcmlhdGUgZm9yLiBCeSBzY2F0dGVyaW5nIGluIHZhcmlvdXMKLSAqIHByaW50ayBsaWtlIHRyYWNpbmcgaW4gdGhlIGNvZGUsIGEgZGV2ZWxvcGVyIGNhbiBxdWlja2x5IHNlZQotICogd2hlcmUgcHJvYmxlbXMgYXJlIG9jY3VycmluZy4KLSAqCi0gKiBUaGlzIGlzIGludGVuZGVkIGFzIGEgZGVidWdnaW5nIHRvb2wgZm9yIHRoZSBkZXZlbG9wZXIgb25seS4KLSAqIFBsZWFzZSByZWZyYWluIGZyb20gbGVhdmluZyBmdHJhY2VfcHJpbnRrcyBzY2F0dGVyZWQgYXJvdW5kIGluCi0gKiB5b3VyIGNvZGUuCi0gKi8KLSMgZGVmaW5lIGZ0cmFjZV9wcmludGsoZm10Li4uKSBfX2Z0cmFjZV9wcmludGsoX1RISVNfSVBfLCBmbXQpCi1leHRlcm4gaW50Ci1fX2Z0cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIHZvaWQgZnRyYWNlX2R1bXAodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50Ci1mdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfb2ZmX3Blcm1hbmVudCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50Ci1mdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpIHsgfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKIGV4dGVybiB2b2lkIGZ0cmFjZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX2luaXRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwKQEAgLTMyNywzNiArMzM0LDYgQEAKIAkJICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkgeyB9CiAjZW5kaWYKIAotZW51bSB7Ci0JUE9XRVJfTk9ORSA9IDAsCi0JUE9XRVJfQ1NUQVRFID0gMSwKLQlQT1dFUl9QU1RBVEUgPSAyLAotfTsKLQotc3RydWN0IHBvd2VyX3RyYWNlIHsKLSNpZmRlZiBDT05GSUdfUE9XRVJfVFJBQ0VSCi0Ja3RpbWVfdAkJCXN0YW1wOwotCWt0aW1lX3QJCQllbmQ7Ci0JaW50CQkJdHlwZTsKLQlpbnQJCQlzdGF0ZTsKLSNlbmRpZgotfTsKLQotI2lmZGVmIENPTkZJR19QT1dFUl9UUkFDRVIKLWV4dGVybiB2b2lkIHRyYWNlX3Bvd2VyX3N0YXJ0KHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJCQl1bnNpZ25lZCBpbnQgc3RhdGUpOwotZXh0ZXJuIHZvaWQgdHJhY2VfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQkJdW5zaWduZWQgaW50IHN0YXRlKTsKLWV4dGVybiB2b2lkIHRyYWNlX3Bvd2VyX2VuZChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfcG93ZXJfc3RhcnQoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCi0JCQkJCXVuc2lnbmVkIGludCBzdGF0ZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQkJdW5zaWduZWQgaW50IHN0YXRlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9wb3dlcl9lbmQoc3RydWN0IHBvd2VyX3RyYWNlICppdCkgeyB9Ci0jZW5kaWYKLQotCiAvKgogICogU3RydWN0dXJlIHRoYXQgZGVmaW5lcyBhbiBlbnRyeSBmdW5jdGlvbiB0cmFjZS4KICAqLwpAQCAtMzk4LDggKzM3NSw3IEBACiBleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKIAogZXh0ZXJuIGludAotZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGxvbmcgdGltZSwKLQkJCSB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpOworZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpOwogZXh0ZXJuIHZvaWQKIGZ0cmFjZV9wb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KTsKIApAQCAtNTE0LDYgKzQ5MCw1MCBAQAogCXJldHVybiB0c2stPnRyYWNlICYgVFNLX1RSQUNFX0ZMX0dSQVBIOwogfQogCitleHRlcm4gaW50IGZ0cmFjZV9kdW1wX29uX29vcHM7CisKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLwogCisKKyNpZmRlZiBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUgorCit2b2lkIHRyYWNlX2h3X2JyYW5jaCh1NjQgZnJvbSwgdTY0IHRvKTsKK3ZvaWQgdHJhY2VfaHdfYnJhbmNoX29vcHModm9pZCk7CisKKyNlbHNlIC8qIENPTkZJR19IV19CUkFOQ0hfVFJBQ0VSICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9od19icmFuY2godTY0IGZyb20sIHU2NCB0bykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9od19icmFuY2hfb29wcyh2b2lkKSB7fQorCisjZW5kaWYgLyogQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgKi8KKworLyoKKyAqIEEgc3lzY2FsbCBlbnRyeSBpbiB0aGUgZnRyYWNlIHN5c2NhbGxzIGFycmF5LgorICoKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzeXNjYWxsCisgKiBAbmJfYXJnczogbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXQgdGFrZXMKKyAqIEB0eXBlczogbGlzdCBvZiB0eXBlcyBhcyBzdHJpbmdzCisgKiBAYXJnczogbGlzdCBvZiBhcmdzIGFzIHN0cmluZ3MgKGFyZ3NbaV0gbWF0Y2hlcyB0eXBlc1tpXSkKKyAqLworc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQluYl9hcmdzOworCWNvbnN0IGNoYXIJKip0eXBlczsKKwljb25zdCBjaGFyCSoqYXJnczsKK307CisKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCitleHRlcm4gdm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNjYWxsX25yX3RvX21ldGEoaW50IG5yKTsKK2V4dGVybiB2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKTsKK2V4dGVybiB2b2lkIHN0b3BfZnRyYWNlX3N5c2NhbGxzKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2Z0cmFjZV9zeXNjYWxscyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9MSU5VWF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfaXJxLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9pcnEuaAppbmRleCAzNjZhMDU0Li5kY2E3YmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9pcnEuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX0ZUUkFDRV9JUlFfSAogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQorI2lmZGVmIENPTkZJR19GVFJBQ0VfTk1JX0VOVEVSCiBleHRlcm4gdm9pZCBmdHJhY2Vfbm1pX2VudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGRkMjBjZDcuLjBiYmMxNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaCBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCmluZGV4IGY4MzI4ODMuLmZhYTFjZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCkBAIC0xNSw1NSArMTUsNjEgQEAKICAqIC0gYml0cyAwLTcgYXJlIHRoZSBwcmVlbXB0aW9uIGNvdW50IChtYXggcHJlZW1wdGlvbiBkZXB0aDogMjU2KQogICogLSBiaXRzIDgtMTUgYXJlIHRoZSBzb2Z0aXJxIGNvdW50IChtYXggIyBvZiBzb2Z0aXJxczogMjU2KQogICoKLSAqIFRoZSBoYXJkaXJxIGNvdW50IGNhbiBiZSBvdmVycmlkZGVuIHBlciBhcmNoaXRlY3R1cmUsIHRoZSBkZWZhdWx0IGlzOgorICogVGhlIGhhcmRpcnEgY291bnQgY2FuIGluIHRoZW9yeSByZWFjaCB0aGUgc2FtZSBhcyBOUl9JUlFTLgorICogSW4gcmVhbGl0eSwgdGhlIG51bWJlciBvZiBuZXN0ZWQgSVJRUyBpcyBsaW1pdGVkIHRvIHRoZSBzdGFjaworICogc2l6ZSBhcyB3ZWxsLiBGb3IgYXJjaHMgd2l0aCBvdmVyIDEwMDAgSVJRUyBpdCBpcyBub3QgcHJhY3RpY2FsCisgKiB0byBleHBlY3QgdGhhdCB0aGV5IHdpbGwgYWxsIG5lc3QuIFdlIGdpdmUgYSBtYXggb2YgMTAgYml0cyBmb3IKKyAqIGhhcmRpcnEgbmVzdGluZy4gQW4gYXJjaCBtYXkgY2hvb3NlIHRvIGdpdmUgbGVzcyB0aGFuIDEwIGJpdHMuCisgKiBtNjhrIGV4cGVjdHMgaXQgdG8gYmUgOC4KICAqCi0gKiAtIGJpdHMgMTYtMjcgYXJlIHRoZSBoYXJkaXJxIGNvdW50IChtYXggIyBvZiBoYXJkaXJxczogNDA5NikKLSAqIC0gKCBiaXQgMjggaXMgdGhlIFBSRUVNUFRfQUNUSVZFIGZsYWcuICkKKyAqIC0gYml0cyAxNi0yNSBhcmUgdGhlIGhhcmRpcnEgY291bnQgKG1heCAjIG9mIG5lc3RlZCBoYXJkaXJxczogMTAyNCkKKyAqIC0gYml0IDI2IGlzIHRoZSBOTUlfTUFTSworICogLSBiaXQgMjggaXMgdGhlIFBSRUVNUFRfQUNUSVZFIGZsYWcKICAqCiAgKiBQUkVFTVBUX01BU0s6IDB4MDAwMDAwZmYKICAqIFNPRlRJUlFfTUFTSzogMHgwMDAwZmYwMAotICogSEFSRElSUV9NQVNLOiAweDBmZmYwMDAwCisgKiBIQVJESVJRX01BU0s6IDB4MDNmZjAwMDAKKyAqICAgICBOTUlfTUFTSzogMHgwNDAwMDAwMAogICovCiAjZGVmaW5lIFBSRUVNUFRfQklUUwk4CiAjZGVmaW5lIFNPRlRJUlFfQklUUwk4CisjZGVmaW5lIE5NSV9CSVRTCTEKKworI2RlZmluZSBNQVhfSEFSRElSUV9CSVRTIDEwCiAKICNpZm5kZWYgSEFSRElSUV9CSVRTCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxMgotCi0jaWZuZGVmIE1BWF9IQVJESVJRU19QRVJfQ1BVCi0jZGVmaW5lIE1BWF9IQVJESVJRU19QRVJfQ1BVIE5SX0lSUVMKKyMgZGVmaW5lIEhBUkRJUlFfQklUUwlNQVhfSEFSRElSUV9CSVRTCiAjZW5kaWYKIAotLyoKLSAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlIHNwYWNlIGZvciBwb3RlbnRpYWxseQotICogYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0gbmVzdGluZyBvbiBhIHNpbmdsZSBDUFUuCi0gKi8KLSNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTUFYX0hBUkRJUlFTX1BFUl9DUFUKLSMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCi0jZW5kaWYKKyNpZiBIQVJESVJRX0JJVFMgPiBNQVhfSEFSRElSUV9CSVRTCisjZXJyb3IgSEFSRElSUV9CSVRTIHRvbyBoaWdoIQogI2VuZGlmCiAKICNkZWZpbmUgUFJFRU1QVF9TSElGVAkwCiAjZGVmaW5lIFNPRlRJUlFfU0hJRlQJKFBSRUVNUFRfU0hJRlQgKyBQUkVFTVBUX0JJVFMpCiAjZGVmaW5lIEhBUkRJUlFfU0hJRlQJKFNPRlRJUlFfU0hJRlQgKyBTT0ZUSVJRX0JJVFMpCisjZGVmaW5lIE5NSV9TSElGVAkoSEFSRElSUV9TSElGVCArIEhBUkRJUlFfQklUUykKIAogI2RlZmluZSBfX0lSUV9NQVNLKHgpCSgoMVVMIDw8ICh4KSktMSkKIAogI2RlZmluZSBQUkVFTVBUX01BU0sJKF9fSVJRX01BU0soUFJFRU1QVF9CSVRTKSA8PCBQUkVFTVBUX1NISUZUKQogI2RlZmluZSBTT0ZUSVJRX01BU0sJKF9fSVJRX01BU0soU09GVElSUV9CSVRTKSA8PCBTT0ZUSVJRX1NISUZUKQogI2RlZmluZSBIQVJESVJRX01BU0sJKF9fSVJRX01BU0soSEFSRElSUV9CSVRTKSA8PCBIQVJESVJRX1NISUZUKQorI2RlZmluZSBOTUlfTUFTSwkoX19JUlFfTUFTSyhOTUlfQklUUykgICAgIDw8IE5NSV9TSElGVCkKIAogI2RlZmluZSBQUkVFTVBUX09GRlNFVAkoMVVMIDw8IFBSRUVNUFRfU0hJRlQpCiAjZGVmaW5lIFNPRlRJUlFfT0ZGU0VUCSgxVUwgPDwgU09GVElSUV9TSElGVCkKICNkZWZpbmUgSEFSRElSUV9PRkZTRVQJKDFVTCA8PCBIQVJESVJRX1NISUZUKQorI2RlZmluZSBOTUlfT0ZGU0VUCSgxVUwgPDwgTk1JX1NISUZUKQogCi0jaWYgUFJFRU1QVF9BQ1RJVkUgPCAoMSA8PCAoSEFSRElSUV9TSElGVCArIEhBUkRJUlFfQklUUykpCisjaWYgUFJFRU1QVF9BQ1RJVkUgPCAoMSA8PCAoTk1JX1NISUZUICsgTk1JX0JJVFMpKQogI2Vycm9yIFBSRUVNUFRfQUNUSVZFIGlzIHRvbyBsb3chCiAjZW5kaWYKIAogI2RlZmluZSBoYXJkaXJxX2NvdW50KCkJKHByZWVtcHRfY291bnQoKSAmIEhBUkRJUlFfTUFTSykKICNkZWZpbmUgc29mdGlycV9jb3VudCgpCShwcmVlbXB0X2NvdW50KCkgJiBTT0ZUSVJRX01BU0spCi0jZGVmaW5lIGlycV9jb3VudCgpCShwcmVlbXB0X2NvdW50KCkgJiAoSEFSRElSUV9NQVNLIHwgU09GVElSUV9NQVNLKSkKKyNkZWZpbmUgaXJxX2NvdW50KCkJKHByZWVtcHRfY291bnQoKSAmIChIQVJESVJRX01BU0sgfCBTT0ZUSVJRX01BU0sgXAorCQkJCSB8IE5NSV9NQVNLKSkKIAogLyoKICAqIEFyZSB3ZSBkb2luZyBib3R0b20gaGFsZiBvciBoYXJkd2FyZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZz8KQEAgLTczLDYgKzc5LDExIEBACiAjZGVmaW5lIGluX3NvZnRpcnEoKQkJKHNvZnRpcnFfY291bnQoKSkKICNkZWZpbmUgaW5faW50ZXJydXB0KCkJCShpcnFfY291bnQoKSkKIAorLyoKKyAqIEFyZSB3ZSBpbiBOTUkgY29udGV4dD8KKyAqLworI2RlZmluZSBpbl9ubWkoKQkocHJlZW1wdF9jb3VudCgpICYgTk1JX01BU0spCisKICNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKQogIyBkZWZpbmUgUFJFRU1QVF9JTkFUT01JQ19CQVNFIGtlcm5lbF9sb2NrZWQoKQogIyBkZWZpbmUgUFJFRU1QVF9DSEVDS19PRkZTRVQgMQpAQCAtMTY0LDIwICsxNzUsMjQgQEAKICAqLwogZXh0ZXJuIHZvaWQgaXJxX2V4aXQodm9pZCk7CiAKLSNkZWZpbmUgbm1pX2VudGVyKCkJCQkJXAotCWRvIHsJCQkJCVwKLQkJZnRyYWNlX25taV9lbnRlcigpOwkJXAotCQlsb2NrZGVwX29mZigpOwkJCVwKLQkJcmN1X25taV9lbnRlcigpOwkJXAotCQlfX2lycV9lbnRlcigpOwkJCVwKKyNkZWZpbmUgbm1pX2VudGVyKCkJCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWZ0cmFjZV9ubWlfZW50ZXIoKTsJCQkJXAorCQlCVUdfT04oaW5fbm1pKCkpOwkJCQlcCisJCWFkZF9wcmVlbXB0X2NvdW50KE5NSV9PRkZTRVQgKyBIQVJESVJRX09GRlNFVCk7CVwKKwkJbG9ja2RlcF9vZmYoKTsJCQkJCVwKKwkJcmN1X25taV9lbnRlcigpOwkJCQlcCisJCXRyYWNlX2hhcmRpcnFfZW50ZXIoKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgbm1pX2V4aXQoKQkJCQlcCi0JZG8gewkJCQkJXAotCQlfX2lycV9leGl0KCk7CQkJXAotCQlyY3Vfbm1pX2V4aXQoKTsJCQlcCi0JCWxvY2tkZXBfb24oKTsJCQlcCi0JCWZ0cmFjZV9ubWlfZXhpdCgpOwkJXAorI2RlZmluZSBubWlfZXhpdCgpCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl0cmFjZV9oYXJkaXJxX2V4aXQoKTsJCQkJXAorCQlyY3Vfbm1pX2V4aXQoKTsJCQkJCVwKKwkJbG9ja2RlcF9vbigpOwkJCQkJXAorCQlCVUdfT04oIWluX25taSgpKTsJCQkJXAorCQlzdWJfcHJlZW1wdF9jb3VudChOTUlfT0ZGU0VUICsgSEFSRElSUV9PRkZTRVQpOwlcCisJCWZ0cmFjZV9ubWlfZXhpdCgpOwkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIExJTlVYX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggYzY4YmZmZC4uY2UyYzA3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0yNzgsNiArMjc4LDExIEBACiAJTlJfU09GVElSUVMKIH07CiAKKy8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICdzb2Z0aXJxX3RvX25hbWUnIGluCisgKiBrZXJuZWwvc29mdGlycS5jIHdoZW4gYWRkaW5nIGEgbmV3IHNvZnRpcnEuCisgKi8KK2V4dGVybiBjaGFyICpzb2Z0aXJxX3RvX25hbWVbTlJfU09GVElSUVNdOworCiAvKiBzb2Z0aXJxIG1hc2sgYW5kIGFjdGl2ZSBmaWVsZHMgbW92ZWQgdG8gaXJxX2NwdXN0YXRfdCBpbgogICogYXNtL2hhcmRpcnEuaCB0byBnZXQgYmV0dGVyIGNhY2hlIHVzYWdlLiAgS0FPCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaCBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAppbmRleCBmM2ZlMzQzLi43OTIyNzQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCkBAIC0xMywxMCArMTMsMTcgQEAKICNkZWZpbmUgS1NZTV9TWU1CT0xfTEVOIChzaXplb2YoIiVzKyUjbHgvJSNseCBbJXNdIikgKyAoS1NZTV9OQU1FX0xFTiAtIDEpICsgXAogCQkJIDIqKEJJVFNfUEVSX0xPTkcqMy8xMCkgKyAoTU9EVUxFX05BTUVfTEVOIC0gMSkgKyAxKQogCitzdHJ1Y3QgbW9kdWxlOworCiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCiAvKiBMb29rdXAgdGhlIGFkZHJlc3MgZm9yIGEgc3ltYm9sLiBSZXR1cm5zIDAgaWYgbm90IGZvdW5kLiAqLwogdW5zaWduZWQgbG9uZyBrYWxsc3ltc19sb29rdXBfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKIAorLyogQ2FsbCBhIGZ1bmN0aW9uIG9uIGVhY2gga2FsbHN5bXMgc3ltYm9sIGluIHRoZSBjb3JlIGtlcm5lbCAqLworaW50IGthbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG1vZHVsZSAqLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJICAgIHZvaWQgKmRhdGEpOworCiBleHRlcm4gaW50IGthbGxzeW1zX2xvb2t1cF9zaXplX29mZnNldCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICB1bnNpZ25lZCBsb25nICpzeW1ib2xzaXplLAogCQkJCSAgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KTsKQEAgLTQzLDYgKzUwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGthbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJCSAgICBzdHJ1Y3QgbW9kdWxlICosCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyksCisJCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQga2FsbHN5bXNfbG9va3VwX3NpemVfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc3ltYm9sc2l6ZSwKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggNTU2ZDc4MS4uZDllNzVlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0yNDIsNiArMjQyLDE5IEBACiBleHRlcm4gaW50IHByaW50a19yYXRlbGltaXQodm9pZCk7CiBleHRlcm4gYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAogCQkJCSAgIHVuc2lnbmVkIGludCBpbnRlcnZhbF9tc2VjKTsKKworLyoKKyAqIFByaW50IGEgb25lLXRpbWUgbWVzc2FnZSAoYW5hbG9nb3VzIHRvIFdBUk5fT05DRSgpIGV0IGFsKToKKyAqLworI2RlZmluZSBwcmludGtfb25jZSh4Li4uKSAoewkJCVwKKwlzdGF0aWMgaW50IF9fcHJpbnRfb25jZSA9IDE7CQlcCisJCQkJCQlcCisJaWYgKF9fcHJpbnRfb25jZSkgewkJCVwKKwkJX19wcmludF9vbmNlID0gMDsJCVwKKwkJcHJpbnRrKHgpOwkJCVwKKwl9CQkJCQlcCit9KQorCiB2b2lkIGxvZ19idWZfa2V4ZWNfc2V0dXAodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgdnByaW50ayhjb25zdCBjaGFyICpzLCB2YV9saXN0IGFyZ3MpCkBAIC0yNTQsNiArMjY3LDEwIEBACiBzdGF0aWMgaW5saW5lIGJvb2wgcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCh1bnNpZ25lZCBsb25nICpjYWxsZXJfamlmZmllcywgXAogCQkJCQkgIHVuc2lnbmVkIGludCBpbnRlcnZhbF9tc2VjKQlcCiAJCXsgcmV0dXJuIGZhbHNlOyB9CisKKy8qIE5vIGVmZmVjdCwgYnV0IHdlIHN0aWxsIGdldCB0eXBlIGNoZWNraW5nIGV2ZW4gaW4gdGhlICFQUklOVEsgY2FzZTogKi8KKyNkZWZpbmUgcHJpbnRrX29uY2UoeC4uLikgcHJpbnRrKHgpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpCiB7CiB9CkBAIC0zNzUsNiArMzkyLDEzOSBAQAogI2VuZGlmCiAKIC8qCisgKiBHZW5lcmFsIHRyYWNpbmcgcmVsYXRlZCB1dGlsaXR5IGZ1bmN0aW9ucyAtIHRyYWNlX3ByaW50aygpLAorICogdHJhY2luZ19vbi90cmFjaW5nX29mZiBhbmQgdHJhY2luZ19zdGFydCgpL3RyYWNpbmdfc3RvcAorICoKKyAqIFVzZSB0cmFjaW5nX29uL3RyYWNpbmdfb2ZmIHdoZW4geW91IHdhbnQgdG8gcXVpY2tseSB0dXJuIG9uIG9yIG9mZgorICogdHJhY2luZy4gSXQgc2ltcGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHJlY29yZGluZyBvZiB0aGUgdHJhY2UgZXZlbnRzLgorICogVGhpcyBhbHNvIGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyIHNwYWNlIGRlYnVnZnMvdHJhY2luZy90cmFjaW5nX29uCisgKiBmaWxlLCB3aGljaCBnaXZlcyBhIG1lYW5zIGZvciB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2UgdG8gaW50ZXJhY3QuCisgKiBQbGFjZSBhIHRyYWNpbmdfb2ZmKCkgaW4gdGhlIGtlcm5lbCB3aGVyZSB5b3Ugd2FudCB0cmFjaW5nIHRvIGVuZC4KKyAqIEZyb20gdXNlciBzcGFjZSwgZXhhbWluZSB0aGUgdHJhY2UsIGFuZCB0aGVuIGVjaG8gMSA+IHRyYWNpbmdfb24KKyAqIHRvIGNvbnRpbnVlIHRyYWNpbmcuCisgKgorICogdHJhY2luZ19zdG9wL3RyYWNpbmdfc3RhcnQgaGFzIHNsaWdodGx5IG1vcmUgb3ZlcmhlYWQuIEl0IGlzIHVzZWQKKyAqIGJ5IHRoaW5ncyBsaWtlIHN1c3BlbmQgdG8gcmFtIHdoZXJlIGRpc2FibGluZyB0aGUgcmVjb3JkaW5nIG9mIHRoZQorICogdHJhY2UgaXMgbm90IGVub3VnaCwgYnV0IHRyYWNpbmcgbXVzdCBhY3R1YWxseSBzdG9wIGJlY2F1c2UgdGhpbmdzCisgKiBsaWtlIGNhbGxpbmcgc21wX3Byb2Nlc3Nvcl9pZCgpIG1heSBjcmFzaCB0aGUgc3lzdGVtLgorICoKKyAqIE1vc3QgbGlrZWx5LCB5b3Ugd2FudCB0byB1c2UgdHJhY2luZ19vbi90cmFjaW5nX29mZi4KKyAqLworI2lmZGVmIENPTkZJR19SSU5HX0JVRkZFUgordm9pZCB0cmFjaW5nX29uKHZvaWQpOwordm9pZCB0cmFjaW5nX29mZih2b2lkKTsKKy8qIHRyYWNlX29mZl9wZXJtYW5lbnQgc3RvcHMgcmVjb3JkaW5nIHdpdGggbm8gd2F5IHRvIGJyaW5nIGl0IGJhY2sgKi8KK3ZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpOworaW50IHRyYWNpbmdfaXNfb24odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfb24odm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2luZ19vZmYodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgdHJhY2luZ19pc19vbih2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFJBQ0lORworZXh0ZXJuIHZvaWQgdHJhY2luZ19zdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9vZmZfcGVybWFuZW50KHZvaWQpOworCitleHRlcm4gdm9pZAorZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK19fX190cmFjZV9wcmludGtfY2hlY2tfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorI2RlZmluZSBfX3RyYWNlX3ByaW50a19jaGVja19mb3JtYXQoZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCQlcCisJCV9fX190cmFjZV9wcmludGtfY2hlY2tfZm9ybWF0KGZtdCwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCisKKy8qKgorICogdHJhY2VfcHJpbnRrIC0gcHJpbnRmIGZvcm1hdHRpbmcgaW4gdGhlIGZ0cmFjZSBidWZmZXIKKyAqIEBmbXQ6IHRoZSBwcmludGYgZm9ybWF0IGZvciBwcmludGluZworICoKKyAqIE5vdGU6IF9fdHJhY2VfcHJpbnRrIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIGZvciB0cmFjZV9wcmludGsgYW5kCisgKiAgICAgICB0aGUgQGlwIGlzIHBhc3NlZCBpbiB2aWEgdGhlIHRyYWNlX3ByaW50ayBtYWNyby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIGtlcm5lbCBkZXZlbG9wZXIgdG8gZGVidWcgZmFzdCBwYXRoIHNlY3Rpb25zCisgKiB0aGF0IHByaW50ayBpcyBub3QgYXBwcm9wcmlhdGUgZm9yLiBCeSBzY2F0dGVyaW5nIGluIHZhcmlvdXMKKyAqIHByaW50ayBsaWtlIHRyYWNpbmcgaW4gdGhlIGNvZGUsIGEgZGV2ZWxvcGVyIGNhbiBxdWlja2x5IHNlZQorICogd2hlcmUgcHJvYmxlbXMgYXJlIG9jY3VycmluZy4KKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIGFzIGEgZGVidWdnaW5nIHRvb2wgZm9yIHRoZSBkZXZlbG9wZXIgb25seS4KKyAqIFBsZWFzZSByZWZyYWluIGZyb20gbGVhdmluZyB0cmFjZV9wcmludGtzIHNjYXR0ZXJlZCBhcm91bmQgaW4KKyAqIHlvdXIgY29kZS4KKyAqLworCisjZGVmaW5lIHRyYWNlX3ByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCV9fdHJhY2VfcHJpbnRrX2NoZWNrX2Zvcm1hdChmbXQsICMjYXJncyk7CQkJXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpKSB7CQkJCVwKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnRyYWNlX3ByaW50a19mbXQJCQlcCisJCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZV9wcmludGtfZm10IikpKSA9CVwKKwkJCV9fYnVpbHRpbl9jb25zdGFudF9wKGZtdCkgPyBmbXQgOiBOVUxMOwkJXAorCQkJCQkJCQkJXAorCQlfX3RyYWNlX2JwcmludGsoX1RISVNfSVBfLCB0cmFjZV9wcmludGtfZm10LCAjI2FyZ3MpOwlcCisJfSBlbHNlCQkJCQkJCQlcCisJCV9fdHJhY2VfcHJpbnRrKF9USElTX0lQXywgZm10LCAjI2FyZ3MpOwkJXAorfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludAorX190cmFjZV9icHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworZXh0ZXJuIGludAorX190cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisvKgorICogVGhlIGRvdWJsZSBfX2J1aWx0aW5fY29uc3RhbnRfcCBpcyBiZWNhdXNlIGdjYyB3aWxsIGdpdmUgdXMgYW4gZXJyb3IKKyAqIGlmIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGUgc3RhdGljIHZhcmlhYmxlIHRvIGZtdCBpZiBpdCBpcyBub3QgYQorICogY29uc3RhbnQuIEV2ZW4gd2l0aCB0aGUgb3V0ZXIgaWYgc3RhdGVtZW50LgorICovCisjZGVmaW5lIGZ0cmFjZV92cHJpbnRrKGZtdCwgdmFyZ3MpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpKSB7CQkJCVwKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnRyYWNlX3ByaW50a19mbXQJCQlcCisJCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZV9wcmludGtfZm10IikpKSA9CVwKKwkJCV9fYnVpbHRpbl9jb25zdGFudF9wKGZtdCkgPyBmbXQgOiBOVUxMOwkJXAorCQkJCQkJCQkJXAorCQlfX2Z0cmFjZV92YnByaW50ayhfVEhJU19JUF8sIHRyYWNlX3ByaW50a19mbXQsIHZhcmdzKTsJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlfX2Z0cmFjZV92cHJpbnRrKF9USElTX0lQXywgZm10LCB2YXJncyk7CQlcCit9IHdoaWxlICgwKQorCitleHRlcm4gaW50CitfX2Z0cmFjZV92YnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworCitleHRlcm4gaW50CitfX2Z0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKK2V4dGVybiB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZAorZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykgeyB9CitzdGF0aWMgaW5saW5lIGludAordHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfb2ZmX3Blcm1hbmVudCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50Cit0cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX3ZwcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19UUkFDSU5HICovCisKKy8qCiAgKiAgICAgIERpc3BsYXkgYW4gSVAgYWRkcmVzcyBpbiByZWFkYWJsZSBmb3JtYXQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbW9kLmggYi9pbmNsdWRlL2xpbnV4L2ttb2QuaAppbmRleCA5MjIxM2E5Li5kNWZhNTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttb2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttb2QuaApAQCAtMjksMTAgKzI5LDE1IEBACiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIC8qIG1vZHByb2JlIGV4aXQgc3RhdHVzIG9uIHN1Y2Nlc3MsIC12ZSBvbiBlcnJvci4gIFJldHVybiB2YWx1ZQogICogdXN1YWxseSB1c2VsZXNzIHRob3VnaC4gKi8KLWV4dGVybiBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqIG5hbWUsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pICgoeCkgPzogKHJlcXVlc3RfbW9kdWxlKG1vZCksICh4KSkpCitleHRlcm4gaW50IF9fcmVxdWVzdF9tb2R1bGUoYm9vbCB3YWl0LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pIFwKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworI2RlZmluZSByZXF1ZXN0X21vZHVsZShtb2QuLi4pIF9fcmVxdWVzdF9tb2R1bGUodHJ1ZSwgbW9kKQorI2RlZmluZSByZXF1ZXN0X21vZHVsZV9ub3dhaXQobW9kLi4uKSBfX3JlcXVlc3RfbW9kdWxlKGZhbHNlLCBtb2QpCisjZGVmaW5lIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHgsIG1vZC4uLikgXAorCSgoeCkgPzogKF9fcmVxdWVzdF9tb2R1bGUoZmFsc2UsIG1vZCksICh4KSkpCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqIG5hbWUsIC4uLikgeyByZXR1cm4gLUVOT1NZUzsgfQorc3RhdGljIGlubGluZSBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CitzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoY29uc3QgY2hhciAqbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CiAjZGVmaW5lIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHgsIG1vZC4uLikgKHgpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKaW5kZXggNDI3NjdkMS4uMzdmYTE5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCkBAIC0xMTAsNCArMTEwLDEwIEBACiAJCQkgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpOwogfTsKIAorLyoKKyAqIEtlcm5lbCB0ZXh0IG1vZGlmaWNhdGlvbiBtdXRleCwgdXNlZCBmb3IgY29kZSBwYXRjaGluZy4gVXNlcnMgb2YgdGhpcyBsb2NrCisgKiBjYW4gc2xlZXAuCisgKi8KK2V4dGVybiBzdHJ1Y3QgbXV0ZXggdGV4dF9tdXRleDsKKwogI2VuZGlmIC8qIF9MSU5VWF9NRU1PUllfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RzMXdtLmggYi9pbmNsdWRlL2xpbnV4L21mZC9kczF3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDY5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9kczF3bS5oCkBAIC0wLDAgKzEsNiBAQAorLyogTUZEIGNlbGwgZHJpdmVyIGRhdGEgZm9yIHRoZSBEUzFXTSBkcml2ZXIgKi8KKworc3RydWN0IGRzMXdtX2RyaXZlcl9kYXRhIHsKKwlpbnQgYWN0aXZlX2hpZ2g7CisJaW50IGNsb2NrX3JhdGU7Cit9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvaHRjLXBhc2ljMy5oIGIvaW5jbHVkZS9saW51eC9tZmQvaHRjLXBhc2ljMy5oCmluZGV4IGI0Mjk0ZjEuLjNkM2VkNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2h0Yy1wYXNpYzMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9odGMtcGFzaWMzLmgKQEAgLTQ4LDcgKzQ4LDYgQEAKIAogc3RydWN0IHBhc2ljM19wbGF0Zm9ybV9kYXRhIHsKIAlzdHJ1Y3QgcGFzaWMzX2xlZHNfbWFjaGluZm8gKmxlZF9wZGF0YTsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgIGJ1c19zaGlmdDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgIGNsb2NrX3JhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaAppbmRleCA5ODA2NjlkLi40MmNjYTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKQEAgLTY0MCw5ICs2NDAsMTEgQEAKICAqCiAgKiBAaW5pdDogRnVuY3Rpb24gY2FsbGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGlzYXRpb24uICBTaG91bGQgYmUKICAqICAgICAgICB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSB0byBjb25maWd1cmUgR1BJTyBmdW5jdGlvbnMgYW5kIHNpbWlsYXIuCisgKiBAaXJxX2hpZ2g6IFNldCBpZiBXTTgzNTAgSVJRIGlzIGFjdGl2ZSBoaWdoLgogICovCiBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgewogCWludCAoKmluaXQpKHN0cnVjdCB3bTgzNTAgKndtODM1MCk7CisJaW50IGlycV9oaWdoOwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCAyNmVmMjQwLi4xODZlYzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTc2NCwxMiArNzY0LDYgQEAKIGV4dGVybiBjaGFyIG51bWFfem9uZWxpc3Rfb3JkZXJbXTsKICNkZWZpbmUgTlVNQV9aT05FTElTVF9PUkRFUl9MRU4gMTYJLyogc3RyaW5nIGJ1ZmZlciBzaXplICovCiAKLSNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgotLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IE5vZGUuICovCi0jaWZuZGVmIG51bWFfbm9kZV9pZAotI2RlZmluZSBudW1hX25vZGVfaWQoKQkJKGNwdV90b19ub2RlKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKQotI2VuZGlmCi0KICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKIAogZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSBjb250aWdfcGFnZV9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggMTQ1YTc1NS4uNjI3YWMwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0yNDgsNiArMjQ4LDEwIEBACiAJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKIAl1bnNpZ25lZCBpbnQgbnVtX3N5bXM7CiAKKwkvKiBLZXJuZWwgcGFyYW1ldGVycy4gKi8KKwlzdHJ1Y3Qga2VybmVsX3BhcmFtICprcDsKKwl1bnNpZ25lZCBpbnQgbnVtX2twOworCiAJLyogR1BMLW9ubHkgZXhwb3J0ZWQgc3ltYm9scy4gKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2dwbF9zeW1zOwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfc3ltczsKQEAgLTMyOSw2ICszMzMsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVFJBQ0lORworCWNvbnN0IGNoYXIgKip0cmFjZV9icHJpbnRrX2ZtdF9zdGFydDsKKwl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlX2JwcmludGtfZm10OworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCS8qIFdoYXQgbW9kdWxlcyBkZXBlbmQgb24gbWU/ICovCiAJc3RydWN0IGxpc3RfaGVhZCBtb2R1bGVzX3doaWNoX3VzZV9tZTsKQEAgLTM1MCw2ICszNTksOCBAQAogI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHN0cnVjdCBtdXRleCBtb2R1bGVfbXV0ZXg7CisKIC8qIEZJWE1FOiBJdCdkIGJlIG5pY2UgdG8gaXNvbGF0ZSBtb2R1bGVzIGR1cmluZyBpbml0LCB0b28sIHNvIHRoZXkKICAgIGFyZW4ndCB1c2VkIGJlZm9yZSB0aGV5IChtYXkpIGZhaWwuICBCdXQgcHJlc2VudGx5IHRvbyBtdWNoIGNvZGUKICAgIChJREUgJiBTQ1NJKSByZXF1aXJlIGVudHJ5IGludG8gdGhlIG1vZHVsZSBkdXJpbmcgaW5pdC4qLwpAQCAtMzU4LDEwICszNjksMTAgQEAKIAlyZXR1cm4gbW9kLT5zdGF0ZSAhPSBNT0RVTEVfU1RBVEVfR09JTkc7CiB9CiAKLS8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKHNlY29uZCBpcyB3aXRoIG5vIGxvY2tzLCBmb3Igb29wcykgKi8KLXN0cnVjdCBtb2R1bGUgKm1vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwotaW50IGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7Citib29sIGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7Citib29sIGlzX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIAogc3RhdGljIGlubGluZSBpbnQgd2l0aGluX21vZHVsZV9jb3JlKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IG1vZHVsZSAqbW9kKQogewpAQCAtMzc1LDYgKzM4NiwzMSBAQAogCSAgICAgICBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdCArIG1vZC0+aW5pdF9zaXplOwogfQogCisvKiBTZWFyY2ggZm9yIG1vZHVsZSBieSBuYW1lOiBtdXN0IGhvbGQgbW9kdWxlX211dGV4LiAqLworc3RydWN0IG1vZHVsZSAqZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCBzeW1zZWFyY2ggeworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKKwllbnVtIHsKKwkJTk9UX0dQTF9PTkxZLAorCQlHUExfT05MWSwKKwkJV0lMTF9CRV9HUExfT05MWSwKKwl9IGxpY2VuY2U7CisJYm9vbCB1bnVzZWQ7Cit9OworCisvKiBTZWFyY2ggZm9yIGFuIGV4cG9ydGVkIHN5bWJvbCBieSBuYW1lLiAqLworY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN0cnVjdCBtb2R1bGUgKipvd25lciwKKwkJCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqKmNyYywKKwkJCQkJYm9vbCBncGxvaywKKwkJCQkJYm9vbCB3YXJuKTsKKworLyogV2FsayB0aGUgZXhwb3J0ZWQgc3ltYm9sIHRhYmxlICovCitib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CisKIC8qIFJldHVybnMgMCBhbmQgZmlsbHMgaW4gdmFsdWUsIGRlZmluZWQgYW5kIG5hbWVidWYsIG9yIC1FUkFOR0UgaWYKICAgIHN5bW51bSBvdXQgb2YgcmFuZ2UuICovCiBpbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLApAQCAtMzgzLDYgKzQxOSwxMCBAQAogLyogTG9vayBmb3IgdGhpcyBuYW1lOiBjYW4gYmUgb2YgZm9ybSBtb2R1bGU6bmFtZS4gKi8KIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2thbGxzeW1zX2xvb2t1cF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogCitpbnQgbW9kdWxlX2thbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJICAgICBzdHJ1Y3QgbW9kdWxlICosIHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgIHZvaWQgKmRhdGEpOworCiBleHRlcm4gdm9pZCBfX21vZHVsZV9wdXRfYW5kX2V4aXQoc3RydWN0IG1vZHVsZSAqbW9kLCBsb25nIGNvZGUpCiAJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICNkZWZpbmUgbW9kdWxlX3B1dF9hbmRfZXhpdChjb2RlKSBfX21vZHVsZV9wdXRfYW5kX2V4aXQoVEhJU19NT0RVTEUsIGNvZGUpOwpAQCAtNDQ0LDYgKzQ4NCw3IEBACiAjZGVmaW5lIHN5bWJvbF9wdXRfYWRkcihwKSBkbyB7IH0gd2hpbGUoMCkKIAogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVfVU5MT0FEICovCitpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKTsKIAogLyogVGhpcyBpcyBhICNkZWZpbmUgc28gdGhlIHN0cmluZyBkb2Vzbid0IGdldCBwdXQgaW4gZXZlcnkgLm8gZmlsZSAqLwogI2RlZmluZSBtb2R1bGVfbmFtZShtb2QpCQkJXApAQCAtNDkwLDIxICs1MzEsMjQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogSXMgdGhpcyBhZGRyZXNzIGluIGEgbW9kdWxlPyAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1vZHVsZSAqX19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKGRvbid0IHRha2UgYSBsb2NrLCB3ZSdyZSBvb3BzaW5nKSAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBmYWxzZTsKIH0KIAogLyogR2V0L3B1dCBhIGtlcm5lbCBzeW1ib2wgKGNhbGxzIHNob3VsZCBiZSBzeW1tZXRyaWMpICovCkBAIC01NTksNiArNjAzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosCisJCQkJCQkJICAgc3RydWN0IG1vZHVsZSAqLAorCQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcpLAorCQkJCQkJIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKIHsKIAkvKiBubyBldmVudHMgd2lsbCBoYXBwZW4gYW55d2F5LCBzbyB0aGlzIGNhbiBhbHdheXMgc3VjY2VlZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IGU0YWYzMzkuLmE0ZjBiOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTEzOCw2ICsxMzgsMTYgQEAKIAkJICAgICAgdW5zaWduZWQgbnVtLAogCQkgICAgICBpbnQgKCp1bmtub3duKShjaGFyICpwYXJhbSwgY2hhciAqdmFsKSk7CiAKKy8qIENhbGxlZCBieSBtb2R1bGUgcmVtb3ZlLiAqLworI2lmZGVmIENPTkZJR19TWVNGUworZXh0ZXJuIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3BhcmFtcyhjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwYXJhbXMsCisJCQkJICB1bnNpZ25lZCBudW0pCit7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TWVNGUyAqLworCiAvKiBBbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgKi8KIC8qIFRoZSBtYWNyb3MgdG8gZG8gY29tcGlsZS10aW1lIHR5cGUgY2hlY2tpbmcgc3RvbGVuIGZyb20gSmFrdWIKICAgIEplbGluZWssIHdobyBJSVJDIGNhbWUgdXAgd2l0aCB0aGlzIGlkZWEgZm9yIHRoZSAyLjQgbW9kdWxlIGluaXQgY29kZS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmggYi9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCmluZGV4IDhmZjI1ZTAuLjU5NGM0OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaApAQCAtNzMsNiArNzMsOCBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfQVZHLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHLAorCVBPV0VSX1NVUFBMWV9QUk9QX1BPV0VSX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9BVkcsCiAJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTExfREVTSUdOLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9FTVBUWV9ERVNJR04sCiAJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTEwsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKaW5kZXggYjNiMzU5Ni4uZTFiN2IyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaApAQCAtOCw3ICs4LDcgQEAKIHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyOwogCiAvKgotICogRG9uJ3QgcmVmZXJlbmNlIHRoaXMgc3RydWN0IGRpcmVjdGx5LCB1c2UgZnVuY3Rpb25zIGJlbG93LgorICogRG9uJ3QgcmVmZXIgdG8gdGhpcyBzdHJ1Y3QgZGlyZWN0bHksIHVzZSBmdW5jdGlvbnMgYmVsb3cuCiAgKi8KIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCB7CiAJdTMyCQl0eXBlOjIsIGxlbjozLCB0aW1lX2RlbHRhOjI3OwpAQCAtMTgsMTAgKzE4LDEzIEBACiAvKioKICAqIGVudW0gcmluZ19idWZmZXJfdHlwZSAtIGludGVybmFsIHJpbmcgYnVmZmVyIHR5cGVzCiAgKgotICogQFJJTkdCVUZfVFlQRV9QQURESU5HOglMZWZ0IG92ZXIgcGFnZSBwYWRkaW5nCi0gKgkJCQkgYXJyYXkgaXMgaWdub3JlZAotICoJCQkJIHNpemUgaXMgdmFyaWFibGUgZGVwZW5kaW5nIG9uIGhvdyBtdWNoCisgKiBAUklOR0JVRl9UWVBFX1BBRERJTkc6CUxlZnQgb3ZlciBwYWdlIHBhZGRpbmcgb3IgZGlzY2FyZGVkIGV2ZW50CisgKgkJCQkgSWYgdGltZV9kZWx0YSBpcyAwOgorICoJCQkJICBhcnJheSBpcyBpZ25vcmVkCisgKgkJCQkgIHNpemUgaXMgdmFyaWFibGUgZGVwZW5kaW5nIG9uIGhvdyBtdWNoCiAgKgkJCQkgIHBhZGRpbmcgaXMgbmVlZGVkCisgKgkJCQkgSWYgdGltZV9kZWx0YSBpcyBub24gemVybzoKKyAqCQkJCSAgZXZlcnl0aGluZyBlbHNlIHNhbWUgYXMgUklOR0JVRl9UWVBFX0RBVEEKICAqCiAgKiBAUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOglFeHRlbmQgdGhlIHRpbWUgZGVsdGEKICAqCQkJCSBhcnJheVswXSA9IHRpbWUgZGVsdGEgKDI4IC4uIDU5KQpAQCAtNjUsNiArNjgsOCBAQAogCXJldHVybiBldmVudC0+dGltZV9kZWx0YTsKIH0KIAordm9pZCByaW5nX2J1ZmZlcl9ldmVudF9kaXNjYXJkKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpOworCiAvKgogICogc2l6ZSBpcyBpbiBieXRlcyBmb3IgZWFjaCBwZXIgQ1BVIGJ1ZmZlci4KICAqLwpAQCAtNzQsMTMgKzc5LDEwIEBACiAKIGludCByaW5nX2J1ZmZlcl9yZXNpemUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKLXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCi1yaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgsCi0JCQkgdW5zaWduZWQgbG9uZyAqZmxhZ3MpOworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpyaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiBpbnQgcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJCSAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpOwogaW50IHJpbmdfYnVmZmVyX3dyaXRlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCwgdm9pZCAqZGF0YSk7CiAKQEAgLTEyMSwxNyArMTIzLDE5IEBACiB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKIHVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwogCi11NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChpbnQgY3B1KTsKLXZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoaW50IGNwdSwgdTY0ICp0cyk7Cit1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7Cit2b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCSAgICAgIGludCBjcHUsIHU2NCAqdHMpOwordm9pZCByaW5nX2J1ZmZlcl9zZXRfY2xvY2soc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkgICB1NjQgKCpjbG9jaykodm9pZCkpOwogCi12b2lkIHRyYWNpbmdfb24odm9pZCk7Ci12b2lkIHRyYWNpbmdfb2ZmKHZvaWQpOwotdm9pZCB0cmFjaW5nX29mZl9wZXJtYW5lbnQodm9pZCk7CitzaXplX3QgcmluZ19idWZmZXJfcGFnZV9sZW4odm9pZCAqcGFnZSk7CisKIAogdm9pZCAqcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKIHZvaWQgcmluZ19idWZmZXJfZnJlZV9yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHZvaWQgKmRhdGEpOwotaW50IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgdm9pZCAqKmRhdGFfcGFnZSwgaW50IGNwdSwgaW50IGZ1bGwpOworaW50IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgdm9pZCAqKmRhdGFfcGFnZSwKKwkJCSAgc2l6ZV90IGxlbiwgaW50IGNwdSwgaW50IGZ1bGwpOwogCiBlbnVtIHJpbmdfYnVmZmVyX2ZsYWdzIHsKIAlSQl9GTF9PVkVSV1JJVEUJCT0gMSA8PCAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDlkYTVhYTAuLmI5NGYzNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEzOCw2ICsxMzgsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfYWN0aXZlKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfaW93YWl0KHZvaWQpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfcGFyZW50X2lwKHVuc2lnbmVkIGxvbmcgYWRkcik7CisKIHN0cnVjdCBzZXFfZmlsZTsKIHN0cnVjdCBjZnNfcnE7CiBzdHJ1Y3QgdGFza19ncm91cDsKQEAgLTE0MDUsNiArMTQwNyw4IEBACiAJaW50IGN1cnJfcmV0X3N0YWNrOwogCS8qIFN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMgZm9yIHJldHVybiBmdW5jdGlvbiB0cmFjaW5nICovCiAJc3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sJKnJldF9zdGFjazsKKwkvKiB0aW1lIHN0YW1wIGZvciBsYXN0IHNjaGVkdWxlICovCisJdW5zaWduZWQgbG9uZyBsb25nIGZ0cmFjZV90aW1lc3RhbXA7CiAJLyoKIAkgKiBOdW1iZXIgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHRyYWNlZAogCSAqIGJlY2F1c2Ugb2YgZGVwdGggb3ZlcnJ1bi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaAppbmRleCA2Y2E2YTdiLi5mNDUyMzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBQQUdFX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4JCS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBMMV9DQUNIRV9CWVRFUyAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CiAKIC8qIFNpemUgZGVzY3JpcHRpb24gc3RydWN0IGZvciBnZW5lcmFsIGNhY2hlcy4gKi8KIHN0cnVjdCBjYWNoZV9zaXplcyB7CkBAIC0yOCw4ICsyOSwyNiBAQAogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKIAotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKTsKK2V4dGVybiBzaXplX3Qgc2xhYl9idWZmZXJfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKTsKKyNlbHNlCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgora21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKQogeworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworfQorc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9idWZmZXJfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKwl2b2lkICpyZXQ7CisKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKIAkJaW50IGkgPSAwOwogCkBAIC00NywxMCArNjYsMTcgQEAKIGZvdW5kOgogI2lmZGVmIENPTkZJR19aT05FX0RNQQogCQlpZiAoZmxhZ3MgJiBHRlBfRE1BKQotCQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MobWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcCwKLQkJCQkJCWZsYWdzKTsKKwkJCWNhY2hlcCA9IG1hbGxvY19zaXplc1tpXS5jc19kbWFjYWNoZXA7CisJCWVsc2UKICNlbmRpZgotCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhtYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLCBmbGFncyk7CisJCQljYWNoZXAgPSBtYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwOworCisJCXJldCA9IGttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShjYWNoZXAsIGZsYWdzKTsKKworCQlrbWVtdHJhY2VfbWFya19hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfVEhJU19JUF8sIHJldCwKKwkJCQkgICAgIHNpemUsIHNsYWJfYnVmZmVyX3NpemUoY2FjaGVwKSwgZmxhZ3MpOworCisJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiBfX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpOwogfQpAQCAtNTksOCArODUsMjUgQEAKIGV4dGVybiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIAotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQkJICAgZ2ZwX3QgZmxhZ3MsCisJCQkJCSAgIGludCBub2RlaWQpOworI2Vsc2UKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAorCQkJICAgICAgZ2ZwX3QgZmxhZ3MsCisJCQkgICAgICBpbnQgbm9kZWlkKQogeworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQoreworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJdm9pZCAqcmV0OworCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7CiAJCWludCBpID0gMDsKIApAQCAtNzgsMTEgKzEyMSwxOCBAQAogZm91bmQ6CiAjaWZkZWYgQ09ORklHX1pPTkVfRE1BCiAJCWlmIChmbGFncyAmIEdGUF9ETUEpCi0JCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKG1hbGxvY19zaXplc1tpXS5jc19kbWFjYWNoZXAsCi0JCQkJCQlmbGFncywgbm9kZSk7CisJCQljYWNoZXAgPSBtYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwOworCQllbHNlCiAjZW5kaWYKLQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShtYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLAotCQkJCQkJZmxhZ3MsIG5vZGUpOworCQkJY2FjaGVwID0gbWFsbG9jX3NpemVzW2ldLmNzX2NhY2hlcDsKKworCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShjYWNoZXAsIGZsYWdzLCBub2RlKTsKKworCQlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIF9USElTX0lQXywKKwkJCQkJICByZXQsIHNpemUsIHNsYWJfYnVmZmVyX3NpemUoY2FjaGVwKSwKKwkJCQkJICBmbGFncywgbm9kZSk7CisKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIF9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaAppbmRleCA1OWEzZmE0Li4wZWMwMGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oCkBAIC0zLDE0ICszLDE1IEBACiAKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCiB7CiAJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCAtMSk7CiB9CiAKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOwogfQpAQCAtMjMsMTIgKzI0LDEyIEBACiAgKiBrbWFsbG9jIGlzIHRoZSBub3JtYWwgbWV0aG9kIG9mIGFsbG9jYXRpbmcgbWVtb3J5CiAgKiBpbiB0aGUga2VybmVsLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIC0xKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXJldHVybiBrbWFsbG9jKHNpemUsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCBlMzdiNmFhLi5hMWY5MDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgogCiBlbnVtIHN0YXRfaXRlbSB7CiAJQUxMT0NfRkFTVFBBVEgsCQkvKiBBbGxvY2F0aW9uIGZyb20gY3B1IHNsYWIgKi8KQEAgLTIxNywxMyArMjE4LDMxIEBACiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKIHZvaWQgKl9fa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpOwogCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpOworI2Vsc2UKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHMsIGdmcGZsYWdzKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2NfbGFyZ2Uoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewotCXJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZmxhZ3MgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSkpOworCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwl2b2lkICpyZXQgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKGZsYWdzIHwgX19HRlBfQ09NUCwgb3JkZXIpOworCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1RISVNfSVBfLCByZXQsCisJCQkgICAgIHNpemUsIFBBR0VfU0laRSA8PCBvcmRlciwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKKwl2b2lkICpyZXQ7CisKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKIAkJaWYgKHNpemUgPiBTTFVCX01BWF9TSVpFKQogCQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZmxhZ3MpOwpAQCAtMjM0LDcgKzI1MywxMyBAQAogCQkJaWYgKCFzKQogCQkJCXJldHVybiBaRVJPX1NJWkVfUFRSOwogCi0JCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhzLCBmbGFncyk7CisJCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UocywgZmxhZ3MpOworCisJCQlrbWVtdHJhY2VfbWFya19hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgICAgIF9USElTX0lQXywgcmV0LAorCQkJCQkgICAgIHNpemUsIHMtPnNpemUsIGZsYWdzKTsKKworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAlyZXR1cm4gX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKQEAgLTI0NCw4ICsyNjksMjQgQEAKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CiAKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsCisJCQkJCSAgIGdmcF90IGdmcGZsYWdzLAorCQkJCQkgICBpbnQgbm9kZSk7CisjZWxzZQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICoKK2ttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJICAgICAgZ2ZwX3QgZ2ZwZmxhZ3MsCisJCQkgICAgICBpbnQgbm9kZSkKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogeworCXZvaWQgKnJldDsKKwogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJgogCQlzaXplIDw9IFNMVUJfTUFYX1NJWkUgJiYgIShmbGFncyAmIFNMVUJfRE1BKSkgewogCQkJc3RydWN0IGttZW1fY2FjaGUgKnMgPSBrbWFsbG9jX3NsYWIoc2l6ZSk7CkBAIC0yNTMsNyArMjk0LDEzIEBACiAJCWlmICghcykKIAkJCXJldHVybiBaRVJPX1NJWkVfUFRSOwogCi0JCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUocywgZmxhZ3MsIG5vZGUpOworCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzLCBmbGFncywgbm9kZSk7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9USElTX0lQXywgcmV0LAorCQkJCQkgIHNpemUsIHMtPnNpemUsIGZsYWdzLCBub2RlKTsKKworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb255cGkuaCBiL2luY2x1ZGUvbGludXgvc29ueXBpLmgKaW5kZXggZjQxZmZkNy4uMzRjNDQ3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb255cGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oCkBAIC0xMDMsNiArMTAzLDE0IEBACiAjZGVmaW5lIFNPTllQSV9FVkVOVF9XSVJFTEVTU19PRkYJCTYxCiAjZGVmaW5lIFNPTllQSV9FVkVOVF9aT09NX0lOX1BSRVNTRUQJCTYyCiAjZGVmaW5lIFNPTllQSV9FVkVOVF9aT09NX09VVF9QUkVTU0VECQk2MworI2RlZmluZSBTT05ZUElfRVZFTlRfQ0RfRUpFQ1RfUFJFU1NFRAkJNjQKKyNkZWZpbmUgU09OWVBJX0VWRU5UX01PREVLRVlfUFJFU1NFRAkJNjUKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1BLRVlfUDQJCQk2NgorI2RlZmluZSBTT05ZUElfRVZFTlRfUEtFWV9QNQkJCTY3CisjZGVmaW5lIFNPTllQSV9FVkVOVF9TRVRUSU5HS0VZX1BSRVNTRUQJCTY4CisjZGVmaW5lIFNPTllQSV9FVkVOVF9WT0xVTUVfSU5DX1BSRVNTRUQJCTY5CisjZGVmaW5lIFNPTllQSV9FVkVOVF9WT0xVTUVfREVDX1BSRVNTRUQJCTcwCisjZGVmaW5lIFNPTllQSV9FVkVOVF9CUklHSFRORVNTX1BSRVNTRUQJCTcxCiAKIC8qIGdldC9zZXQgYnJpZ2h0bmVzcyAqLwogI2RlZmluZSBTT05ZUElfSU9DR0JSVAkJX0lPUigndicsIDAsIF9fdTgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCA4ODUyNzM5Li40ODkwMTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBmb3IgaW5saW5lICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogZm9yIHNpemVfdCAqLwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBmb3IgTlVMTCAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiBleHRlcm4gY2hhciAqc3RybmR1cF91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcpOwogZXh0ZXJuIHZvaWQgKm1lbWR1cF91c2VyKGNvbnN0IHZvaWQgX191c2VyICosIHNpemVfdCk7CkBAIC0xMTIsOCArMTEzLDIzIEBACiAKIGV4dGVybiBib29sIHN5c2ZzX3N0cmVxKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CiAKKyNpZmRlZiBDT05GSUdfQklOQVJZX1BSSU5URgoraW50IHZiaW5fcHJpbnRmKHUzMiAqYmluX2J1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKK2ludCBic3RyX3ByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluX2J1Zik7CitpbnQgYnByaW50Zih1MzIgKmJpbl9idWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMywgNCk7CisjZW5kaWYKKwogZXh0ZXJuIHNzaXplX3QgbWVtb3J5X3JlYWRfZnJvbV9idWZmZXIodm9pZCAqdG8sIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLAogCQkJY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGF2YWlsYWJsZSk7CiAKKy8qKgorICogc3Ryc3RhcnRzIC0gZG9lcyBAc3RyIHN0YXJ0IHdpdGggQHByZWZpeD8KKyAqIEBzdHI6IHN0cmluZyB0byBleGFtaW5lCisgKiBAcHJlZml4OiBwcmVmaXggdG8gbG9vayBmb3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzdHJzdGFydHMoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJcmV0dXJuIHN0cm5jbXAoc3RyLCBwcmVmaXgsIHN0cmxlbihwcmVmaXgpKSA9PSAwOworfQogI2VuZGlmCiAjZW5kaWYgLyogX0xJTlVYX1NUUklOR19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IGIyOTlhODIuLjY0NzBmNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2RlZmluZSBfX1NDX0RFQ0wxKHQxLCBhMSkJdDEgYTEKICNkZWZpbmUgX19TQ19ERUNMMih0MiwgYTIsIC4uLikgdDIgYTIsIF9fU0NfREVDTDEoX19WQV9BUkdTX18pCkBAIC05NSw3ICs5Niw0NiBAQAogI2RlZmluZSBfX1NDX1RFU1Q1KHQ1LCBhNSwgLi4uKQlfX1NDX1RFU1QodDUpOyBfX1NDX1RFU1Q0KF9fVkFfQVJHU19fKQogI2RlZmluZSBfX1NDX1RFU1Q2KHQ2LCBhNiwgLi4uKQlfX1NDX1RFU1QodDYpOyBfX1NDX1RFU1Q1KF9fVkFfQVJHU19fKQogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworI2RlZmluZSBfX1NDX1NUUl9BREVDTDEodCwgYSkJCSNhCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMMih0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDEoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMMyh0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDIoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMNCh0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDMoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMNSh0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDQoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMNih0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDUoX19WQV9BUkdTX18pCisKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0wxKHQsIGEpCQkjdAorI2RlZmluZSBfX1NDX1NUUl9UREVDTDIodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0wxKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDModCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0wyKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDQodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0wzKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDUodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0w0KF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDYodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0w1KF9fVkFfQVJHU19fKQorCisjZGVmaW5lIFNZU0NBTExfTUVUQURBVEEoc25hbWUsIG5iKQkJCQlcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJXAorCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKKwkJLm5hbWUgCQk9ICJzeXMiI3NuYW1lLAkJCVwKKwkJLm5iX2FyZ3MgCT0gbmIsCQkJCVwKKwkJLnR5cGVzCQk9IHR5cGVzXyMjc25hbWUsCQlcCisJCS5hcmdzCQk9IGFyZ3NfIyNzbmFtZSwJCQlcCisJfQorCisjZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCVwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQlcCisJICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAgX19zeXNjYWxsX21ldGFfIyNzbmFtZSA9IHsJCQkJXAorCQkubmFtZSAJCT0gInN5c18iI3NuYW1lLAkJCVwKKwkJLm5iX2FyZ3MgCT0gMCwJCQkJXAorCX07CQkJCQkJCVwKKwlhc21saW5rYWdlIGxvbmcgc3lzXyMjc25hbWUodm9pZCkKKworI2Vsc2UKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKG5hbWUpCSAgIGFzbWxpbmthZ2UgbG9uZyBzeXNfIyNuYW1lKHZvaWQpCisjZW5kaWYKKwogI2RlZmluZSBTWVNDQUxMX0RFRklORTEobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMSwgXyMjbmFtZSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FMihuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgyLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUzKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDMsIF8jI25hbWUsIF9fVkFfQVJHU19fKQpAQCAtMTE3LDEwICsxNTcsMjYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCisjZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKQkJCQlcCisJc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVzXyMjc25hbWVbXSA9IHsJCQlcCisJCV9fU0NfU1RSX1RERUNMIyN4KF9fVkFfQVJHU19fKQkJCVwKKwl9OwkJCQkJCQlcCisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3NfIyNzbmFtZVtdID0gewkJCVwKKwkJX19TQ19TVFJfQURFQ0wjI3goX19WQV9BUkdTX18pCQkJXAorCX07CQkJCQkJCVwKKwlTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4KTsJCQkJXAorCV9fU1lTQ0FMTF9ERUZJTkV4KHgsIHNuYW1lLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKQkJCQlcCisJX19TWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIF9fVkFfQVJHU19fKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTCiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUobmFtZSkgc3RhdGljIGlubGluZSBsb25nIFNZU0NfIyNuYW1lCi0jZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pCQkJCQlcCisKKyNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKQkJCQkJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXMjI25hbWUoX19TQ19ERUNMIyN4KF9fVkFfQVJHU19fKSk7CQlcCiAJc3RhdGljIGlubGluZSBsb25nIFNZU0MjI25hbWUoX19TQ19ERUNMIyN4KF9fVkFfQVJHU19fKSk7CVwKIAlhc21saW5rYWdlIGxvbmcgU3lTIyNuYW1lKF9fU0NfTE9ORyMjeChfX1ZBX0FSR1NfXykpCQlcCkBAIC0xMzQsNyArMTkwLDcgQEAKICNlbHNlIC8qIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlMgKi8KIAogI2RlZmluZSBTWVNDQUxMX0RFRklORShuYW1lKSBhc21saW5rYWdlIGxvbmcgc3lzXyMjbmFtZQotI2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKQkJCQkJXAorI2RlZmluZSBfX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pCQkJCQlcCiAJYXNtbGlua2FnZSBsb25nIHN5cyMjbmFtZShfX1NDX0RFQ0wjI3goX19WQV9BUkdTX18pKQogCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUyAqLwpAQCAtNDYyLDkgKzUxOCw5IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3B3cml0ZTY0KHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcHJlYWR2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlYywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdTMyIHBvc19oaWdoLCB1MzIgcG9zX2xvdyk7CisJCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIHVuc2lnbmVkIGxvbmcgcG9zX2wsIHVuc2lnbmVkIGxvbmcgcG9zX2gpOwogYXNtbGlua2FnZSBsb25nIHN5c19wd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlYywKLQkJCSAgICB1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfaGlnaCwgdTMyIHBvc19sb3cpOworCQkJICAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdW5zaWduZWQgbG9uZyBwb3NfbCwgdW5zaWduZWQgbG9uZyBwb3NfaCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2dldGN3ZChjaGFyIF9fdXNlciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOwogYXNtbGlua2FnZSBsb25nIHN5c19ta2Rpcihjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsIGludCBtb2RlKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKaW5kZXggOTE3NzA3ZS4uMWRlOGI5ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCkBAIC0yNywyNyArMjcsNDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZTsKIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlOwogCitlbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUgeworCVRIRVJNQUxfREVWSUNFX0RJU0FCTEVEID0gMCwKKwlUSEVSTUFMX0RFVklDRV9FTkFCTEVELAorfTsKKworZW51bSB0aGVybWFsX3RyaXBfdHlwZSB7CisJVEhFUk1BTF9UUklQX0FDVElWRSA9IDAsCisJVEhFUk1BTF9UUklQX1BBU1NJVkUsCisJVEhFUk1BTF9UUklQX0hPVCwKKwlUSEVSTUFMX1RSSVBfQ1JJVElDQUwsCit9OworCiBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgewogCWludCAoKmJpbmQpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLAogCQkgICAgIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICopOwogCWludCAoKnVuYmluZCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosCiAJCSAgICAgICBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqKTsKLQlpbnQgKCpnZXRfdGVtcCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGNoYXIgKik7Ci0JaW50ICgqZ2V0X21vZGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBjaGFyICopOwotCWludCAoKnNldF9tb2RlKSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgY29uc3QgY2hhciAqKTsKLQlpbnQgKCpnZXRfdHJpcF90eXBlKSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LCBjaGFyICopOwotCWludCAoKmdldF90cmlwX3RlbXApIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsIGNoYXIgKik7CisJaW50ICgqZ2V0X3RlbXApIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKmdldF9tb2RlKSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwKKwkJCSBlbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUgKik7CisJaW50ICgqc2V0X21vZGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLAorCQllbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUpOworCWludCAoKmdldF90cmlwX3R5cGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsCisJCWVudW0gdGhlcm1hbF90cmlwX3R5cGUgKik7CisJaW50ICgqZ2V0X3RyaXBfdGVtcCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGludCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKik7CiAJaW50ICgqZ2V0X2NyaXRfdGVtcCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcgKik7CisJaW50ICgqbm90aWZ5KSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LAorCQkgICAgICAgZW51bSB0aGVybWFsX3RyaXBfdHlwZSk7CiB9OwogCiBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgewotCWludCAoKmdldF9tYXhfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCBjaGFyICopOwotCWludCAoKmdldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCBjaGFyICopOwotCWludCAoKnNldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBpbnQpOworCWludCAoKmdldF9tYXhfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKmdldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKnNldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKIH07CiAKICNkZWZpbmUgVEhFUk1BTF9UUklQU19OT05FIC0xCkBAIC04OCwxMSArMTA3LDE5IEBACiAJc3RydWN0IGRldmljZSBkZXZpY2U7CiAJdm9pZCAqZGV2ZGF0YTsKIAlpbnQgdHJpcHM7CisJaW50IHRjMTsKKwlpbnQgdGMyOworCWludCBwYXNzaXZlX2RlbGF5OworCWludCBwb2xsaW5nX2RlbGF5OworCWludCBsYXN0X3RlbXBlcmF0dXJlOworCWJvb2wgcGFzc2l2ZTsKKwl1bnNpZ25lZCBpbnQgZm9yY2VkX3Bhc3NpdmU7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHM7CiAJc3RydWN0IGxpc3RfaGVhZCBjb29saW5nX2RldmljZXM7CiAJc3RydWN0IGlkciBpZHI7CiAJc3RydWN0IG11dGV4IGxvY2s7CS8qIHByb3RlY3QgY29vbGluZyBkZXZpY2VzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IGRlbGF5ZWRfd29yayBwb2xsX3F1ZXVlOwogI2lmIGRlZmluZWQoQ09ORklHX1RIRVJNQUxfSFdNT04pCiAJc3RydWN0IGxpc3RfaGVhZCBod21vbl9ub2RlOwogCXN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSAqaHdtb247CkBAIC0xMDQsMTMgKzEzMSwxNiBAQAogc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoY2hhciAqLCBpbnQsIHZvaWQgKiwKIAkJCQkJCQkgc3RydWN0CiAJCQkJCQkJIHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzCi0JCQkJCQkJICopOworCQkJCQkJCSAqLCBpbnQgdGMxLCBpbnQgdGMyLAorCQkJCQkJCSBpbnQgcGFzc2l2ZV9mcmVxLAorCQkJCQkJCSBpbnQgcG9sbGluZ19mcmVxKTsKIHZvaWQgdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICopOwogCiBpbnQgdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LAogCQkJCSAgICAgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKik7CiBpbnQgdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsCiAJCQkJICAgICAgIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICopOwordm9pZCB0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqKTsKIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKiwgdm9pZCAqLAogCQkJCQkJCSAgICAgICBzdHJ1Y3QKIAkJCQkJCQkgICAgICAgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBhMTZiOWUwLi43NDAyYzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC0zOCwxMSArMzgsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgbnJfY3B1c19ub2RlCi0jZGVmaW5lIG5yX2NwdXNfbm9kZShub2RlKQkJCQlcCi0JKHsJCQkJCQlcCi0JCW5vZGVfdG9fY3B1bWFza19wdHIoX190bXBfXywgbm9kZSk7CVwKLQkJY3B1c193ZWlnaHQoKl9fdG1wX18pOwkJCVwKLQl9KQorI2RlZmluZSBucl9jcHVzX25vZGUobm9kZSkgY3B1bWFza193ZWlnaHQoY3B1bWFza19vZl9ub2RlKG5vZGUpKQogI2VuZGlmCiAKICNkZWZpbmUgZm9yX2VhY2hfbm9kZV93aXRoX2NwdXMobm9kZSkJCQlcCkBAIC0yMDAsNCArMTk2LDkgQEAKICNkZWZpbmUgdG9wb2xvZ3lfY29yZV9jcHVtYXNrKGNwdSkJCWNwdW1hc2tfb2YoY3B1KQogI2VuZGlmCiAKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBOb2RlLiAqLworI2lmbmRlZiBudW1hX25vZGVfaWQKKyNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCShjcHVfdG9fbm9kZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKyNlbmRpZgorCiAjZW5kaWYgLyogX0xJTlVYX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2VfY2xvY2suaCBiL2luY2x1ZGUvbGludXgvdHJhY2VfY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTgxMzAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZV9jbG9jay5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0xJTlVYX1RSQUNFX0NMT0NLX0gKKyNkZWZpbmUgX0xJTlVYX1RSQUNFX0NMT0NLX0gKKworLyoKKyAqIDMgdHJhY2UgY2xvY2sgdmFyaWFudHMsIHdpdGggZGlmZmVyaW5nIHNjYWxhYmlsaXR5L3ByZWNpc2lvbgorICogdHJhZGVvZmZzOgorICoKKyAqICAtICAgbG9jYWw6IENQVS1sb2NhbCB0cmFjZSBjbG9jaworICogIC0gIG1lZGl1bTogc2NhbGFibGUgZ2xvYmFsIGNsb2NrIHdpdGggc29tZSBqaXR0ZXIKKyAqICAtICBnbG9iYWw6IGdsb2JhbGx5IG1vbm90b25pYywgc2VyaWFsaXplZCBjbG9jaworICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfbG9jYWwodm9pZCk7CitleHRlcm4gdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2sodm9pZCk7CitleHRlcm4gdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfZ2xvYmFsKHZvaWQpOworCisjZW5kaWYgLyogX0xJTlVYX1RSQUNFX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKaW5kZXggNzU3MDA1NC4uZDM1YTdlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKQEAgLTMxLDggKzMxLDggQEAKIAkJCQkJICogS2VlcCBpbiBzeW5jIHdpdGggdm1saW51eC5sZHMuaC4KIAkJCQkJICovCiAKLSNkZWZpbmUgVFBQUk9UTyhhcmdzLi4uKQlhcmdzCi0jZGVmaW5lIFRQQVJHUyhhcmdzLi4uKQkJYXJncworI2RlZmluZSBUUF9QUk9UTyhhcmdzLi4uKQlhcmdzCisjZGVmaW5lIFRQX0FSR1MoYXJncy4uLikJCWFyZ3MKIAogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwogCkBAIC02NSw3ICs2NSw3IEBACiAJewkJCQkJCQkJXAogCQlpZiAodW5saWtlbHkoX190cmFjZXBvaW50XyMjbmFtZS5zdGF0ZSkpCQlcCiAJCQlfX0RPX1RSQUNFKCZfX3RyYWNlcG9pbnRfIyNuYW1lLAkJXAotCQkJCVRQUFJPVE8ocHJvdG8pLCBUUEFSR1MoYXJncykpOwkJXAorCQkJCVRQX1BST1RPKHByb3RvKSwgVFBfQVJHUyhhcmdzKSk7CVwKIAl9CQkJCQkJCQlcCiAJc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfdHJhY2VfIyNuYW1lKHZvaWQgKCpwcm9iZSkocHJvdG8pKQlcCiAJewkJCQkJCQkJXApAQCAtMTUzLDQgKzE1MywxMTQgQEAKIAlzeW5jaHJvbml6ZV9zY2hlZCgpOwogfQogCisjZGVmaW5lIFBBUkFNUyhhcmdzLi4uKSBhcmdzCisjZGVmaW5lIFRSQUNFX0ZPUk1BVChuYW1lLCBwcm90bywgYXJncywgZm10KQkJXAorCURFQ0xBUkVfVFJBQ0UobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQorCisKKy8qCisgKiBGb3IgdXNlIHdpdGggdGhlIFRSQUNFX0VWRU5UIG1hY3JvOgorICoKKyAqIFdlIGRlZmluZSBhIHRyYWNlcG9pbnQsIGl0cyBhcmd1bWVudHMsIGl0cyBwcmludGsgZm9ybWF0CisgKiBhbmQgaXRzICdmYXN0IGJpbmF5IHJlY29yZCcgbGF5b3V0LgorICoKKyAqIEZpcnN0bHksIG5hbWUgeW91ciB0cmFjZXBvaW50IHZpYSBUUkFDRV9FVkVOVChuYW1lIDogdGhlCisgKiAnc3Vic3lzdGVtX2V2ZW50JyBub3RhdGlvbiBpcyBmaW5lLgorICoKKyAqIFRoaW5rIGFib3V0IHRoaXMgd2hvbGUgY29uc3RydWN0IGFzIHRoZQorICogJ3RyYWNlX3NjaGVkX3N3aXRjaCgpIGZ1bmN0aW9uJyBmcm9tIG5vdyBvbi4KKyAqCisgKgorICogIFRSQUNFX0VWRU5UKHNjaGVkX3N3aXRjaCwKKyAqCisgKgkqCisgKgkqIEEgZnVuY3Rpb24gaGFzIGEgcmVndWxhciBmdW5jdGlvbiBhcmd1bWVudHMKKyAqCSogcHJvdG90eXBlLCBkZWNsYXJlIGl0IHZpYSBUUF9QUk9UTygpOgorICoJKgorICoKKyAqCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKyAqCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSwKKyAqCisgKgkqCisgKgkqIERlZmluZSB0aGUgY2FsbCBzaWduYXR1cmUgb2YgdGhlICdmdW5jdGlvbicuCisgKgkqIChEZXNpZ24gc2lkZW5vdGU6IHdlIHVzZSB0aGlzIGluc3RlYWQgb2YgYQorICoJKiAgVFBfUFJPVE8xL1RQX1BST1RPMi9UUF9QUk9UTzMgdWdsaW5lc3MuKQorICoJKgorICoKKyAqCVRQX0FSR1MocnEsIHByZXYsIG5leHQpLAorICoKKyAqCSoKKyAqCSogRmFzdCBiaW5hcnkgdHJhY2luZzogZGVmaW5lIHRoZSB0cmFjZSByZWNvcmQgdmlhCisgKgkqIFRQX1NUUlVDVF9fZW50cnkoKS4gWW91IGNhbiB0aGluayBhYm91dCBpdCBsaWtlIGEKKyAqCSogcmVndWxhciBDIHN0cnVjdHVyZSBsb2NhbCB2YXJpYWJsZSBkZWZpbml0aW9uLgorICoJKgorICoJKiBUaGlzIGlzIGhvdyB0aGUgdHJhY2UgcmVjb3JkIGlzIHN0cnVjdHVyZWQgYW5kIHdpbGwKKyAqCSogYmUgc2F2ZWQgaW50byB0aGUgcmluZyBidWZmZXIuIFRoZXNlIGFyZSB0aGUgZmllbGRzCisgKgkqIHRoYXQgd2lsbCBiZSBleHBvc2VkIHRvIHVzZXItc3BhY2UgaW4KKyAqCSogL2RlYnVnL3RyYWNpbmcvZXZlbnRzLzwqPi9mb3JtYXQuCisgKgkqCisgKgkqIFRoZSBkZWNsYXJlZCAnbG9jYWwgdmFyaWFibGUnIGlzIGNhbGxlZCAnX19lbnRyeScKKyAqCSoKKyAqCSogX19maWVsZChwaWRfdCwgcHJldl9wcmlkKSBpcyBlcXVpdmFsZW50IHRvIGEgc3RhbmRhcmQgZGVjbGFyaXRvbjoKKyAqCSoKKyAqCSoJcGlkX3QJcHJldl9waWQ7CisgKgkqCisgKgkqIF9fYXJyYXkoY2hhciwgcHJldl9jb21tLCBUQVNLX0NPTU1fTEVOKSBpcyBlcXVpdmFsZW50IHRvOgorICoJKgorICoJKgljaGFyCXByZXZfY29tbVtUQVNLX0NPTU1fTEVOXTsKKyAqCSoKKyAqCisgKglUUF9TVFJVQ1RfX2VudHJ5KAorICoJCV9fYXJyYXkoCWNoYXIsCXByZXZfY29tbSwJVEFTS19DT01NX0xFTgkpCisgKgkJX19maWVsZCgJcGlkX3QsCXByZXZfcGlkCQkJKQorICoJCV9fZmllbGQoCWludCwJcHJldl9wcmlvCQkJKQorICoJCV9fYXJyYXkoCWNoYXIsCW5leHRfY29tbSwJVEFTS19DT01NX0xFTgkpCisgKgkJX19maWVsZCgJcGlkX3QsCW5leHRfcGlkCQkJKQorICoJCV9fZmllbGQoCWludCwJbmV4dF9wcmlvCQkJKQorICoJKSwKKyAqCisgKgkqCisgKgkqIEFzc2lnbiB0aGUgZW50cnkgaW50byB0aGUgdHJhY2UgcmVjb3JkLCBieSBlbWJlZGRpbmcKKyAqCSogYSBmdWxsIEMgc3RhdGVtZW50IGJsb2NrIGludG8gVFBfZmFzdF9hc3NpZ24oKS4gWW91CisgKgkqIGNhbiByZWZlciB0byB0aGUgdHJhY2UgcmVjb3JkIGFzICdfX2VudHJ5JyAtCisgKgkqIG90aGVyd2lzZSB5b3UgY2FuIHB1dCBhcmJpdHJhcnkgQyBjb2RlIGluIGhlcmUuCisgKgkqCisgKgkqIE5vdGU6IHRoaXMgQyBjb2RlIHdpbGwgZXhlY3V0ZSBldmVyeSB0aW1lIGEgdHJhY2UgZXZlbnQKKyAqCSogaGFwcGVucywgb24gYW4gYWN0aXZlIHRyYWNlcG9pbnQuCisgKgkqCisgKgorICoJVFBfZmFzdF9hc3NpZ24oCisgKgkJbWVtY3B5KF9fZW50cnktPm5leHRfY29tbSwgbmV4dC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisgKgkJX19lbnRyeS0+cHJldl9waWQJPSBwcmV2LT5waWQ7CisgKgkJX19lbnRyeS0+cHJldl9wcmlvCT0gcHJldi0+cHJpbzsKKyAqCQltZW1jcHkoX19lbnRyeS0+cHJldl9jb21tLCBwcmV2LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKyAqCQlfX2VudHJ5LT5uZXh0X3BpZAk9IG5leHQtPnBpZDsKKyAqCQlfX2VudHJ5LT5uZXh0X3ByaW8JPSBuZXh0LT5wcmlvOworICoJKQorICoKKyAqCSoKKyAqCSogRm9ybWF0dGVkIG91dHB1dCBvZiBhIHRyYWNlIHJlY29yZCB2aWEgVFBfcHJpbnRrKCkuCisgKgkqIFRoaXMgaXMgaG93IHRoZSB0cmFjZXBvaW50IHdpbGwgYXBwZWFyIHVuZGVyIGZ0cmFjZQorICoJKiBwbHVnaW5zIHRoYXQgbWFrZSB1c2Ugb2YgdGhpcyB0cmFjZXBvaW50LgorICoJKgorICoJKiAocmF3LWJpbmFyeSB0cmFjaW5nIHdvbnQgYWN0dWFsbHkgcGVyZm9ybSB0aGlzIHN0ZXAuKQorICoJKgorICoKKyAqCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdID09PiAlczolZCBbJWRdIiwKKyAqCQlfX2VudHJ5LT5wcmV2X2NvbW0sIF9fZW50cnktPnByZXZfcGlkLCBfX2VudHJ5LT5wcmV2X3ByaW8sCisgKgkJX19lbnRyeS0+bmV4dF9jb21tLCBfX2VudHJ5LT5uZXh0X3BpZCwgX19lbnRyeS0+bmV4dF9wcmlvKSwKKyAqCisgKiApOworICoKKyAqIFRoaXMgbWFjcm8gY29uc3RydWN0IGlzIHRodXMgdXNlZCBmb3IgdGhlIHJlZ3VsYXIgcHJpbnRrIGZvcm1hdAorICogdHJhY2luZyBzZXR1cCwgaXQgaXMgdXNlZCB0byBjb25zdHJ1Y3QgYSBmdW5jdGlvbiBwb2ludGVyIGJhc2VkCisgKiB0cmFjZXBvaW50IGNhbGxiYWNrICh0aGlzIGlzIHVzZWQgYnkgcHJvZ3JhbW1hdGljIHBsdWdpbnMgYW5kCisgKiBjYW4gYWxzbyBieSB1c2VkIGJ5IGdlbmVyaWMgaW5zdHJ1bWVudGF0aW9uIGxpa2UgU3lzdGVtVGFwKSwgYW5kCisgKiBpdCBpcyBhbHNvIHVzZWQgdG8gZXhwb3NlIGEgc3RydWN0dXJlZCB0cmFjZSByZWNvcmQgaW4KKyAqIC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy8uCisgKi8KKworI2RlZmluZSBUUkFDRV9FVkVOVChuYW1lLCBwcm90bywgYXJncywgc3RydWN0LCBhc3NpZ24sIHByaW50KQlcCisJREVDTEFSRV9UUkFDRShuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ibG9jay5oIGIvaW5jbHVkZS90cmFjZS9ibG9jay5oCmluZGV4IDI1YzZhMWYuLjI1YjcwNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2Jsb2NrLmgKQEAgLTUsNzIgKzUsNzIgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcnFfYWJvcnQsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKLQkJVFBBUkdTKHEsIHJxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCisJICAgICAgVFBfQVJHUyhxLCBycSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3JxX2luc2VydCwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAotCQlUUEFSR1MocSwgcnEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKKwkgICAgICBUUF9BUkdTKHEsIHJxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcnFfaXNzdWUsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKLQkJVFBBUkdTKHEsIHJxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCisJICAgICAgVFBfQVJHUyhxLCBycSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3JxX3JlcXVldWUsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKLQkJVFBBUkdTKHEsIHJxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCisJICAgICAgVFBfQVJHUyhxLCBycSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3JxX2NvbXBsZXRlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCi0JCVRQQVJHUyhxLCBycSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCSAgICAgIFRQX0FSR1MocSwgcnEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19iaW9fYm91bmNlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCi0JCVRQQVJHUyhxLCBiaW8pKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX2Jpb19jb21wbGV0ZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAotCQlUUEFSR1MocSwgYmlvKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8pKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19iaW9fYmFja21lcmdlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCi0JCVRQQVJHUyhxLCBiaW8pKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX2Jpb19mcm9udG1lcmdlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCi0JCVRQQVJHUyhxLCBiaW8pKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX2Jpb19xdWV1ZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAotCQlUUEFSR1MocSwgYmlvKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8pKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19nZXRycSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydyksCi0JCVRQQVJHUyhxLCBiaW8sIHJ3KSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbywgcncpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19zbGVlcHJxLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KSwKLQkJVFBBUkdTKHEsIGJpbywgcncpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpLAorCSAgICAgIFRQX0FSR1MocSwgYmlvLCBydykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3BsdWcsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCi0JCVRQQVJHUyhxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAorCSAgICAgIFRQX0FSR1MocSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3VucGx1Z190aW1lciwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKLQkJVFBBUkdTKHEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCisJICAgICAgVFBfQVJHUyhxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfdW5wbHVnX2lvLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAotCQlUUEFSR1MocSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKKwkgICAgICBUUF9BUkdTKHEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19zcGxpdCwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBwZHUpLAotCQlUUEFSR1MocSwgYmlvLCBwZHUpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgcGR1KSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbywgcGR1KSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcmVtYXAsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsCi0JCXNlY3Rvcl90IGZyb20sIHNlY3Rvcl90IHRvKSwKLQkJVFBBUkdTKHEsIGJpbywgZGV2LCBmcm9tLCB0bykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGRldl90IGRldiwKKwkJIHNlY3Rvcl90IGZyb20sIHNlY3Rvcl90IHRvKSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbywgZGV2LCBmcm9tLCB0bykpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvaXJxLmggYi9pbmNsdWRlL3RyYWNlL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWQ0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2lycS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfVFJBQ0VfSVJRX0gKKyNkZWZpbmUgX1RSQUNFX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKKyNpbmNsdWRlIDx0cmFjZS9pcnFfZXZlbnRfdHlwZXMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2lycV9ldmVudF90eXBlcy5oIGIvaW5jbHVkZS90cmFjZS9pcnFfZXZlbnRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk2NGViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9pcnFfZXZlbnRfdHlwZXMuaApAQCAtMCwwICsxLDU1IEBACisKKy8qIHVzZSA8dHJhY2UvaXJxLmg+IGluc3RlYWQgKi8KKyNpZm5kZWYgVFJBQ0VfRk9STUFUCisjIGVycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4KKyMgZXJyb3IgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKyNlbmRpZgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBpcnEKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGVudHJ5IG9mIGludGVycnVwdCBoYW5kbGVyOgorICovCitUUkFDRV9GT1JNQVQoaXJxX2hhbmRsZXJfZW50cnksCisJVFBfUFJPVE8oaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKSwKKwlUUF9BUkdTKGlycSwgYWN0aW9uKSwKKwlUUF9GTVQoImlycT0lZCBoYW5kbGVyPSVzIiwgaXJxLCBhY3Rpb24tPm5hbWUpCisJKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHJldHVybiBvZiBhbiBpbnRlcnJ1cHQgaGFuZGxlcjoKKyAqLworVFJBQ0VfRVZFTlQoaXJxX2hhbmRsZXJfZXhpdCwKKworCVRQX1BST1RPKGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiwgaW50IHJldCksCisKKwlUUF9BUkdTKGlycSwgYWN0aW9uLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJaW50LAlpcnEJKQorCQlfX2ZpZWxkKAlpbnQsCXJldAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcnEJPSBpcnE7CisJCV9fZW50cnktPnJldAk9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKCJpcnE9JWQgcmV0dXJuPSVzIiwKKwkJICBfX2VudHJ5LT5pcnEsIF9fZW50cnktPnJldCA/ICJoYW5kbGVkIiA6ICJ1bmhhbmRsZWQiKQorKTsKKworVFJBQ0VfRk9STUFUKHNvZnRpcnFfZW50cnksCisJVFBfUFJPVE8oc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoLCBzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKnZlYyksCisJVFBfQVJHUyhoLCB2ZWMpLAorCVRQX0ZNVCgic29mdGlycT0lZCBhY3Rpb249JXMiLCAoaW50KShoIC0gdmVjKSwgc29mdGlycV90b19uYW1lW2gtdmVjXSkKKwkpOworCitUUkFDRV9GT1JNQVQoc29mdGlycV9leGl0LAorCVRQX1BST1RPKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCwgc3RydWN0IHNvZnRpcnFfYWN0aW9uICp2ZWMpLAorCVRQX0FSR1MoaCwgdmVjKSwKKwlUUF9GTVQoInNvZnRpcnE9JWQgYWN0aW9uPSVzIiwgKGludCkoaCAtIHZlYyksIHNvZnRpcnFfdG9fbmFtZVtoLXZlY10pCisJKTsKKworI3VuZGVmIFRSQUNFX1NZU1RFTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9rbWVtdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2Uva21lbXRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4Yjc4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2Uva21lbXRyYWNlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIEdQTCB2ZXJzaW9uIDIuCisgKi8KKworI2lmbmRlZiBfTElOVVhfS01FTVRSQUNFX0gKKyNkZWZpbmUgX0xJTlVYX0tNRU1UUkFDRV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorCitlbnVtIGttZW10cmFjZV90eXBlX2lkIHsKKwlLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DID0gMCwJLyoga21hbGxvYygpIG9yIGtmcmVlKCkuICovCisJS01FTVRSQUNFX1RZUEVfQ0FDSEUsCQkvKiBrbWVtX2NhY2hlXyooKS4gKi8KKwlLTUVNVFJBQ0VfVFlQRV9QQUdFUywJCS8qIF9fZ2V0X2ZyZWVfcGFnZXMoKSBhbmQgZnJpZW5kcy4gKi8KK307CisKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCisKK2V4dGVybiB2b2lkIGttZW10cmFjZV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCQkJICAgICBjb25zdCB2b2lkICpwdHIsCisJCQkJCSAgICAgc2l6ZV90IGJ5dGVzX3JlcSwKKwkJCQkJICAgICBzaXplX3QgYnl0ZXNfYWxsb2MsCisJCQkJCSAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJCQkgICAgIGludCBub2RlKTsKKworZXh0ZXJuIHZvaWQga21lbXRyYWNlX21hcmtfZnJlZShlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkJCSAgICAgICBjb25zdCB2b2lkICpwdHIpOworCisjZWxzZSAvKiBDT05GSUdfS01FTVRSQUNFICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfaW5pdCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkJCSAgICAgY29uc3Qgdm9pZCAqcHRyLAorCQkJCQkgICAgIHNpemVfdCBieXRlc19yZXEsCisJCQkJCSAgICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAorCQkJCQkgICAgIGdmcF90IGdmcF9mbGFncywKKwkJCQkJICAgICBpbnQgbm9kZSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttZW10cmFjZV9tYXJrX2ZyZWUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCQkgICAgICAgY29uc3Qgdm9pZCAqcHRyKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX0tNRU1UUkFDRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX21hcmtfYWxsb2MoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkJCQl1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCQkJY29uc3Qgdm9pZCAqcHRyLAorCQkJCQlzaXplX3QgYnl0ZXNfcmVxLAorCQkJCQlzaXplX3QgYnl0ZXNfYWxsb2MsCisJCQkJCWdmcF90IGdmcF9mbGFncykKK3sKKwlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKHR5cGVfaWQsIGNhbGxfc2l0ZSwgcHRyLAorCQkJCSAgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywgZ2ZwX2ZsYWdzLCAtMSk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfS01FTVRSQUNFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9sb2NrZGVwLmggYi9pbmNsdWRlL3RyYWNlL2xvY2tkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E2N2RmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9sb2NrZGVwLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9UUkFDRV9MT0NLREVQX0gKKyNkZWZpbmUgX1RSQUNFX0xPQ0tERVBfSAorCisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2luY2x1ZGUgPHRyYWNlL2xvY2tkZXBfZXZlbnRfdHlwZXMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2xvY2tkZXBfZXZlbnRfdHlwZXMuaCBiL2luY2x1ZGUvdHJhY2UvbG9ja2RlcF9ldmVudF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2NmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2xvY2tkZXBfZXZlbnRfdHlwZXMuaApAQCAtMCwwICsxLDQ0IEBACisKKyNpZm5kZWYgVFJBQ0VfRk9STUFUCisjIGVycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4KKyMgZXJyb3IgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKyNlbmRpZgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBsb2NrCisKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCitUUkFDRV9GT1JNQVQobG9ja19hY3F1aXJlLAorCVRQX1BST1RPKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAorCQlpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywKKwkJc3RydWN0IGxvY2tkZXBfbWFwICpuZXh0X2xvY2ssIHVuc2lnbmVkIGxvbmcgaXApLAorCVRQX0FSR1MobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLCBuZXh0X2xvY2ssIGlwKSwKKwlUUF9GTVQoIiVzJXMlcyIsIHRyeWxvY2sgPyAidHJ5ICIgOiAiIiwKKwkJcmVhZCA/ICJyZWFkICIgOiAiIiwgbG9jay0+bmFtZSkKKwkpOworCitUUkFDRV9GT1JNQVQobG9ja19yZWxlYXNlLAorCVRQX1BST1RPKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IG5lc3RlZCwgdW5zaWduZWQgbG9uZyBpcCksCisJVFBfQVJHUyhsb2NrLCBuZXN0ZWQsIGlwKSwKKwlUUF9GTVQoIiVzIiwgbG9jay0+bmFtZSkKKwkpOworCisjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAorCitUUkFDRV9GT1JNQVQobG9ja19jb250ZW5kZWQsCisJVFBfUFJPVE8oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKSwKKwlUUF9BUkdTKGxvY2ssIGlwKSwKKwlUUF9GTVQoIiVzIiwgbG9jay0+bmFtZSkKKwkpOworCitUUkFDRV9GT1JNQVQobG9ja19hY3F1aXJlZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApLAorCVRQX0FSR1MobG9jaywgaXApLAorCVRQX0ZNVCgiJXMiLCBsb2NrLT5uYW1lKQorCSk7CisKKyNlbmRpZgorI2VuZGlmCisKKyN1bmRlZiBUUkFDRV9TWVNURU0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvcG93ZXIuaCBiL2luY2x1ZGUvdHJhY2UvcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9wb3dlci5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX1RSQUNFX1BPV0VSX0gKKyNkZWZpbmUgX1RSQUNFX1BPV0VSX0gKKworI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitlbnVtIHsKKwlQT1dFUl9OT05FID0gMCwKKwlQT1dFUl9DU1RBVEUgPSAxLAorCVBPV0VSX1BTVEFURSA9IDIsCit9OworCitzdHJ1Y3QgcG93ZXJfdHJhY2UgeworCWt0aW1lX3QJCQlzdGFtcDsKKwlrdGltZV90CQkJZW5kOworCWludAkJCXR5cGU7CisJaW50CQkJc3RhdGU7Cit9OworCitERUNMQVJFX1RSQUNFKHBvd2VyX3N0YXJ0LAorCVRQX1BST1RPKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdGUpLAorCSAgICAgIFRQX0FSR1MoaXQsIHR5cGUsIHN0YXRlKSk7CisKK0RFQ0xBUkVfVFJBQ0UocG93ZXJfbWFyaywKKwlUUF9QUk9UTyhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN0YXRlKSwKKwkgICAgICBUUF9BUkdTKGl0LCB0eXBlLCBzdGF0ZSkpOworCitERUNMQVJFX1RSQUNFKHBvd2VyX2VuZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0KSwKKwkgICAgICBUUF9BUkdTKGl0KSk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfUE9XRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9zY2hlZC5oIGIvaW5jbHVkZS90cmFjZS9zY2hlZC5oCmluZGV4IDBkODEwOTguLjRlMzcyYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc2NoZWQuaAorKysgYi9pbmNsdWRlL3RyYWNlL3NjaGVkLmgKQEAgLTQsNTMgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCi1ERUNMQVJFX1RSQUNFKHNjaGVkX2t0aHJlYWRfc3RvcCwKLQlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCksCi0JCVRQQVJHUyh0KSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfa3RocmVhZF9zdG9wX3JldCwKLQlUUFBST1RPKGludCByZXQpLAotCQlUUEFSR1MocmV0KSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfd2FpdF90YXNrLAotCVRQUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKLQkJVFBBUkdTKHJxLCBwKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfd2FrZXVwLAotCVRQUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3VjY2VzcyksCi0JCVRQQVJHUyhycSwgcCwgc3VjY2VzcykpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3dha2V1cF9uZXcsCi0JVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzdWNjZXNzKSwKLQkJVFBBUkdTKHJxLCBwLCBzdWNjZXNzKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfc3dpdGNoLAotCVRQUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpLAotCQlUUEFSR1MocnEsIHByZXYsIG5leHQpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9taWdyYXRlX3Rhc2ssCi0JVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBvcmlnX2NwdSwgaW50IGRlc3RfY3B1KSwKLQkJVFBBUkdTKHAsIG9yaWdfY3B1LCBkZXN0X2NwdSkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3Byb2Nlc3NfZnJlZSwKLQlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0JCVRQQVJHUyhwKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc19leGl0LAotCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKLQkJVFBBUkdTKHApKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9wcm9jZXNzX3dhaXQsCi0JVFBQUk9UTyhzdHJ1Y3QgcGlkICpwaWQpLAotCQlUUEFSR1MocGlkKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc19mb3JrLAotCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpLAotCQlUUEFSR1MocGFyZW50LCBjaGlsZCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3NpZ25hbF9zZW5kLAotCVRQUFJPVE8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKLQkJVFBBUkdTKHNpZywgcCkpOworI2luY2x1ZGUgPHRyYWNlL3NjaGVkX2V2ZW50X3R5cGVzLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9zY2hlZF9ldmVudF90eXBlcy5oIGIvaW5jbHVkZS90cmFjZS9zY2hlZF9ldmVudF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTQ3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3NjaGVkX2V2ZW50X3R5cGVzLmgKQEAgLTAsMCArMSwzMzcgQEAKKworLyogdXNlIDx0cmFjZS9zY2hlZC5oPiBpbnN0ZWFkICovCisjaWZuZGVmIFRSQUNFX0VWRU5UCisjIGVycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4KKyMgZXJyb3IgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKyNlbmRpZgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBzY2hlZAorCisvKgorICogVHJhY2Vwb2ludCBmb3IgY2FsbGluZyBrdGhyZWFkX3N0b3AsIHBlcmZvcm1lZCB0byBlbmQgYSBrdGhyZWFkOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9rdGhyZWFkX3N0b3AsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpLAorCisJVFBfQVJHUyh0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJPSB0LT5waWQ7CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCIsIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBrdGhyZWFkIHN0b3BwaW5nOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9rdGhyZWFkX3N0b3BfcmV0LAorCisJVFBfUFJPVE8oaW50IHJldCksCisKKwlUUF9BUkdTKHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCXJldAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5yZXQJPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygicmV0ICVkIiwgX19lbnRyeS0+cmV0KQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHdhaXRpbmcgb24gdGFzayB0byB1bnNjaGVkdWxlOgorICoKKyAqIChOT1RFOiB0aGUgJ3JxJyBhcmd1bWVudCBpcyBub3QgdXNlZCBieSBnZW5lcmljIHRyYWNlIGV2ZW50cywKKyAqICAgICAgICBidXQgdXNlZCBieSB0aGUgbGF0ZW5jeSB0cmFjZXIgcGx1Z2luLiApCisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3dhaXRfdGFzaywKKworCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisKKwlUUF9BUkdTKHJxLCBwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwk9IHAtPnByaW87CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3Igd2FraW5nIHVwIGEgdGFzazoKKyAqCisgKiAoTk9URTogdGhlICdycScgYXJndW1lbnQgaXMgbm90IHVzZWQgYnkgZ2VuZXJpYyB0cmFjZSBldmVudHMsCisgKiAgICAgICAgYnV0IHVzZWQgYnkgdGhlIGxhdGVuY3kgdHJhY2VyIHBsdWdpbi4gKQorICovCitUUkFDRV9FVkVOVChzY2hlZF93YWtldXAsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzdWNjZXNzKSwKKworCVRQX0FSR1MocnEsIHAsIHN1Y2Nlc3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkJX19maWVsZCgJaW50LAlzdWNjZXNzCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOworCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87CisJCV9fZW50cnktPnN1Y2Nlc3MJPSBzdWNjZXNzOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSBzdWNjZXNzPSVkIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8sCisJCSAgX19lbnRyeS0+c3VjY2VzcykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciB3YWtpbmcgdXAgYSBuZXcgdGFzazoKKyAqCisgKiAoTk9URTogdGhlICdycScgYXJndW1lbnQgaXMgbm90IHVzZWQgYnkgZ2VuZXJpYyB0cmFjZSBldmVudHMsCisgKiAgICAgICAgYnV0IHVzZWQgYnkgdGhlIGxhdGVuY3kgdHJhY2VyIHBsdWdpbi4gKQorICovCitUUkFDRV9FVkVOVChzY2hlZF93YWtldXBfbmV3LAorCisJVFBfUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3VjY2VzcyksCisKKwlUUF9BUkdTKHJxLCBwLCBzdWNjZXNzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJCV9fZmllbGQoCWludCwJc3VjY2VzcwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOworCQlfX2VudHJ5LT5zdWNjZXNzCT0gc3VjY2VzczsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gc3VjY2Vzcz0lZCIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvLAorCQkgIF9fZW50cnktPnN1Y2Nlc3MpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgdGFzayBzd2l0Y2hlcywgcGVyZm9ybWVkIGJ5IHRoZSBzY2hlZHVsZXI6CisgKgorICogKE5PVEU6IHRoZSAncnEnIGFyZ3VtZW50IGlzIG5vdCB1c2VkIGJ5IGdlbmVyaWMgdHJhY2UgZXZlbnRzLAorICogICAgICAgIGJ1dCB1c2VkIGJ5IHRoZSBsYXRlbmN5IHRyYWNlciBwbHVnaW4uICkKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfc3dpdGNoLAorCisJVFBfUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSwKKworCVRQX0FSR1MocnEsIHByZXYsIG5leHQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJcHJldl9jb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXByZXZfcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByZXZfcHJpbwkJCSkKKwkJX19hcnJheSgJY2hhciwJbmV4dF9jb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCW5leHRfcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCW5leHRfcHJpbwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5uZXh0X2NvbW0sIG5leHQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5wcmV2X3BpZAk9IHByZXYtPnBpZDsKKwkJX19lbnRyeS0+cHJldl9wcmlvCT0gcHJldi0+cHJpbzsKKwkJbWVtY3B5KF9fZW50cnktPnByZXZfY29tbSwgcHJldi0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPm5leHRfcGlkCT0gbmV4dC0+cGlkOworCQlfX2VudHJ5LT5uZXh0X3ByaW8JPSBuZXh0LT5wcmlvOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSA9PT4gJXM6JWQgWyVkXSIsCisJCV9fZW50cnktPnByZXZfY29tbSwgX19lbnRyeS0+cHJldl9waWQsIF9fZW50cnktPnByZXZfcHJpbywKKwkJX19lbnRyeS0+bmV4dF9jb21tLCBfX2VudHJ5LT5uZXh0X3BpZCwgX19lbnRyeS0+bmV4dF9wcmlvKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGEgdGFzayBiZWluZyBtaWdyYXRlZDoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfbWlncmF0ZV90YXNrLAorCisJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgb3JpZ19jcHUsIGludCBkZXN0X2NwdSksCisKKwlUUF9BUkdTKHAsIG9yaWdfY3B1LCBkZXN0X2NwdSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCQlfX2ZpZWxkKAlpbnQsCW9yaWdfY3B1CQkpCisJCV9fZmllbGQoCWludCwJZGVzdF9jcHUJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOworCQlfX2VudHJ5LT5vcmlnX2NwdQk9IG9yaWdfY3B1OworCQlfX2VudHJ5LT5kZXN0X2NwdQk9IGRlc3RfY3B1OworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSBmcm9tOiAlZCAgdG86ICVkIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8sCisJCSAgX19lbnRyeS0+b3JpZ19jcHUsIF9fZW50cnktPmRlc3RfY3B1KQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGZyZWVpbmcgYSB0YXNrOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9wcm9jZXNzX2ZyZWUsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCisJVFBfQVJHUyhwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CisJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0iLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBhIHRhc2sgZXhpdGluZzoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc19leGl0LAorCisJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKworCVRQX0FSR1MocCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOworCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgYSB3YWl0aW5nIHRhc2s6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3Byb2Nlc3Nfd2FpdCwKKworCVRQX1BST1RPKHN0cnVjdCBwaWQgKnBpZCksCisKKwlUUF9BUkdTKHBpZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIGN1cnJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gcGlkX25yKHBpZCk7CisJCV9fZW50cnktPnByaW8JCT0gY3VycmVudC0+cHJpbzsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0iLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBkb19mb3JrOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9wcm9jZXNzX2ZvcmssCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCksCisKKwlUUF9BUkdTKHBhcmVudCwgY2hpbGQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJcGFyZW50X2NvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGFyZW50X3BpZAkJCSkKKwkJX19hcnJheSgJY2hhciwJY2hpbGRfY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAljaGlsZF9waWQJCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+cGFyZW50X2NvbW0sIHBhcmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBhcmVudF9waWQJPSBwYXJlbnQtPnBpZDsKKwkJbWVtY3B5KF9fZW50cnktPmNoaWxkX2NvbW0sIGNoaWxkLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+Y2hpbGRfcGlkCT0gY2hpbGQtPnBpZDsKKwkpLAorCisJVFBfcHJpbnRrKCJwYXJlbnQgJXM6JWQgIGNoaWxkICVzOiVkIiwKKwkJX19lbnRyeS0+cGFyZW50X2NvbW0sIF9fZW50cnktPnBhcmVudF9waWQsCisJCV9fZW50cnktPmNoaWxkX2NvbW0sIF9fZW50cnktPmNoaWxkX3BpZCkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBzZW5kaW5nIGEgc2lnbmFsOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9zaWduYWxfc2VuZCwKKworCVRQX1BST1RPKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisKKwlUUF9BUkdTKHNpZywgcCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCXNpZwkJCSkKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAk9IHAtPnBpZDsKKwkJX19lbnRyeS0+c2lnCT0gc2lnOworCSksCisKKwlUUF9wcmludGsoInNpZzogJWQgIHRhc2sgJXM6JWQiLAorCQkgIF9fZW50cnktPnNpZywgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkKQorKTsKKworI3VuZGVmIFRSQUNFX1NZU1RFTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9za2IuaCBiL2luY2x1ZGUvdHJhY2Uvc2tiLmgKaW5kZXggYTk2NjEwZi4uYjY2MjA2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9za2IuaAorKysgYi9pbmNsdWRlL3RyYWNlL3NrYi5oCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAogREVDTEFSRV9UUkFDRShrZnJlZV9za2IsCi0JVFBQUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpsb2NhdGlvbiksCi0JVFBBUkdTKHNrYiwgbG9jYXRpb24pKTsKKwlUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpsb2NhdGlvbiksCisJVFBfQVJHUyhza2IsIGxvY2F0aW9uKSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS90cmFjZV9ldmVudF90eXBlcy5oIGIvaW5jbHVkZS90cmFjZS90cmFjZV9ldmVudF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNTZmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmgKQEAgLTAsMCArMSw1IEBACisvKiB0cmFjZS88dHlwZT5fZXZlbnRfdHlwZXMuaCBoZXJlICovCisKKyNpbmNsdWRlIDx0cmFjZS9zY2hlZF9ldmVudF90eXBlcy5oPgorI2luY2x1ZGUgPHRyYWNlL2lycV9ldmVudF90eXBlcy5oPgorI2luY2x1ZGUgPHRyYWNlL2xvY2tkZXBfZXZlbnRfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvdHJhY2VfZXZlbnRzLmggYi9pbmNsdWRlL3RyYWNlL3RyYWNlX2V2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMTM3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3RyYWNlX2V2ZW50cy5oCkBAIC0wLDAgKzEsNSBAQAorLyogdHJhY2UvPHR5cGU+LmggaGVyZSAqLworCisjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KKyNpbmNsdWRlIDx0cmFjZS9pcnEuaD4KKyNpbmNsdWRlIDx0cmFjZS9sb2NrZGVwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS90cmFjZS93b3JrcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjI2NTIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS93b3JrcXVldWUuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fVFJBQ0VfV09SS1FVRVVFX0gKKyNkZWZpbmUgX19UUkFDRV9XT1JLUVVFVUVfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK0RFQ0xBUkVfVFJBQ0Uod29ya3F1ZXVlX2luc2VydGlvbiwKKwkgICBUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSwKKwkgICBUUF9BUkdTKHdxX3RocmVhZCwgd29yaykpOworCitERUNMQVJFX1RSQUNFKHdvcmtxdWV1ZV9leGVjdXRpb24sCisJICAgVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayksCisJICAgVFBfQVJHUyh3cV90aHJlYWQsIHdvcmspKTsKKworLyogVHJhY2UgdGhlIGNyZWF0aW9uIG9mIG9uZSB3b3JrcXVldWUgdGhyZWFkIG9uIGEgY3B1ICovCitERUNMQVJFX1RSQUNFKHdvcmtxdWV1ZV9jcmVhdGlvbiwKKwkgICBUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgaW50IGNwdSksCisJICAgVFBfQVJHUyh3cV90aHJlYWQsIGNwdSkpOworCitERUNMQVJFX1RSQUNFKHdvcmtxdWV1ZV9kZXN0cnVjdGlvbiwKKwkgICBUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCksCisJICAgVFBfQVJHUyh3cV90aHJlYWQpKTsKKworI2VuZGlmIC8qIF9fVFJBQ0VfV09SS1FVRVVFX0ggKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA5MGU4ODRiLi4wOWM3OTUzIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCiBjb25maWcgTUFSS0VSUwogCWJvb2wgIkFjdGl2YXRlIG1hcmtlcnMiCi0JZGVwZW5kcyBvbiBUUkFDRVBPSU5UUworCXNlbGVjdCBUUkFDRVBPSU5UUwogCWhlbHAKIAkgIFBsYWNlIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgYXQgZWFjaCBtYXJrZXIgc2l0ZS4gQ2FuIGJlCiAJICBkeW5hbWljYWxseSBjaGFuZ2VkIGZvciBhIHByb2JlIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAwN2M4NjU4Li4zNTg1ZjA3IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vc21wLmg+CkBAIC02NDgsNiArNjQ5LDcgQEAKIAllbmFibGVfZGVidWdfcGFnZWFsbG9jKCk7CiAJY3B1X2hvdHBsdWdfaW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOworCWttZW10cmFjZV9pbml0KCk7CiAJZGVidWdfb2JqZWN0c19tZW1faW5pdCgpOwogCWlkcl9pbml0X2NhY2hlKCk7CiAJc2V0dXBfcGVyX2NwdV9wYWdlc2V0KCk7CkBAIC03NjksNiArNzcxLDcgQEAKIHsKIAlyY3VfaW5pdF9zY2hlZCgpOyAvKiBuZWVkZWQgYnkgbW9kdWxlX2luaXQgc3RhZ2UuICovCiAJaW5pdF93b3JrcXVldWVzKCk7CisJY3B1c2V0X2luaXRfc21wKCk7CiAJdXNlcm1vZGVoZWxwZXJfaW5pdCgpOwogCWRyaXZlcl9pbml0KCk7CiAJaW5pdF9pcnFfcHJvYygpOwpAQCAtODYzLDggKzg2Niw2IEBACiAJc21wX2luaXQoKTsKIAlzY2hlZF9pbml0X3NtcCgpOwogCi0JY3B1c2V0X2luaXRfc21wKCk7Ci0KIAlkb19iYXNpY19zZXR1cCgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leHRhYmxlLmMgYi9rZXJuZWwvZXh0YWJsZS5jCmluZGV4IGM0NmRhNmEuLjdmOGYyNjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leHRhYmxlLmMKKysrIGIva2VybmVsL2V4dGFibGUuYwpAQCAtMTUsMTEgKzE1LDIyIEBACiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIG11dGV4IHByb3RlY3RpbmcgdGV4dCBzZWN0aW9uIG1vZGlmaWNhdGlvbiAoZHluYW1pYyBjb2RlIHBhdGNoaW5nKS4KKyAqIHNvbWUgdXNlcnMgbmVlZCB0byBzbGVlcCAoYWxsb2NhdGluZyBtZW1vcnkuLi4pIHdoaWxlIHRoZXkgaG9sZCB0aGlzIGxvY2suCisgKgorICogTk9UIGV4cG9ydGVkIHRvIG1vZHVsZXMgLSBwYXRjaGluZyBrZXJuZWwgdGV4dCBpcyBhIHJlYWxseSBkZWxpY2F0ZSBtYXR0ZXIuCisgKi8KK0RFRklORV9NVVRFWCh0ZXh0X211dGV4KTsKIAogZXh0ZXJuIHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgX19zdGFydF9fX2V4X3RhYmxlW107CiBleHRlcm4gc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSBfX3N0b3BfX19leF90YWJsZVtdOwpAQCAtNDksNyArNjAsNyBAQAogCXJldHVybiAwOwogfQogCi1fX25vdHJhY2VfZnVuY2dyYXBoIGludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfc3RleHQgJiYKIAkgICAgYWRkciA8PSAodW5zaWduZWQgbG9uZylfZXRleHQpCkBAIC02MSwxMSArNzIsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotX19ub3RyYWNlX2Z1bmNncmFwaCBpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBfX2tlcm5lbF90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewogCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKLQlpZiAoX19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpKQorCWlmIChpc19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpKQogCQlyZXR1cm4gMTsKIAkvKgogCSAqIFRoZXJlIG1pZ2h0IGJlIGluaXQgc3ltYm9scyBpbiBzYXZlZCBzdGFja3RyYWNlcy4KQEAgLTg0LDcgKzk1LDcgQEAKIHsKIAlpZiAoY29yZV9rZXJuZWxfdGV4dChhZGRyKSkKIAkJcmV0dXJuIDE7Ci0JcmV0dXJuIG1vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcikgIT0gTlVMTDsKKwlyZXR1cm4gaXNfbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKTsKIH0KIAogLyoKQEAgLTEwMCw1ICsxMTEsNSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcihwdHIpOwogCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOworCXJldHVybiBpc19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggOWViZjc3OS4uMzQzYWNlYyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPHRyYWNlL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KIAogI2luY2x1ZGUgImludGVybmFscy5oIgpAQCAtMzM4LDYgKzMzOSw5IEBACiAJcmV0dXJuIElSUV9OT05FOwogfQogCitERUZJTkVfVFJBQ0UoaXJxX2hhbmRsZXJfZW50cnkpOworREVGSU5FX1RSQUNFKGlycV9oYW5kbGVyX2V4aXQpOworCiAvKioKICAqIGhhbmRsZV9JUlFfZXZlbnQgLSBpcnEgYWN0aW9uIGNoYWluIGhhbmRsZXIKICAqIEBpcnE6CXRoZSBpbnRlcnJ1cHQgbnVtYmVyCkBAIC0zNTYsNyArMzYwLDkgQEAKIAkJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CiAKIAlkbyB7CisJCXRyYWNlX2lycV9oYW5kbGVyX2VudHJ5KGlycSwgYWN0aW9uKTsKIAkJcmV0ID0gYWN0aW9uLT5oYW5kbGVyKGlycSwgYWN0aW9uLT5kZXZfaWQpOworCQl0cmFjZV9pcnFfaGFuZGxlcl9leGl0KGlycSwgYWN0aW9uLCByZXQpOwogCQlpZiAocmV0ID09IElSUV9IQU5ETEVEKQogCQkJc3RhdHVzIHw9IGFjdGlvbi0+ZmxhZ3M7CiAJCXJldHZhbCB8PSByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwva2FsbHN5bXMuYyBiL2tlcm5lbC9rYWxsc3ltcy5jCmluZGV4IDdiOGIwZjIuLjM3NGZhZjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rYWxsc3ltcy5jCisrKyBiL2tlcm5lbC9rYWxsc3ltcy5jCkBAIC0xNjEsNiArMTYxLDI1IEBACiAJcmV0dXJuIG1vZHVsZV9rYWxsc3ltc19sb29rdXBfbmFtZShuYW1lKTsKIH0KIAoraW50IGthbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG1vZHVsZSAqLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJY2hhciBuYW1lYnVmW0tTWU1fTkFNRV9MRU5dOworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBpbnQgb2ZmOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwLCBvZmYgPSAwOyBpIDwga2FsbHN5bXNfbnVtX3N5bXM7IGkrKykgeworCQlvZmYgPSBrYWxsc3ltc19leHBhbmRfc3ltYm9sKG9mZiwgbmFtZWJ1Zik7CisJCXJldCA9IGZuKGRhdGEsIG5hbWVidWYsIE5VTEwsIGthbGxzeW1zX2FkZHJlc3Nlc1tpXSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBtb2R1bGVfa2FsbHN5bXNfb25fZWFjaF9zeW1ib2woZm4sIGRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa2FsbHN5bXNfb25fZWFjaF9zeW1ib2wpOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc3ltYm9sX3Bvcyh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnN5bWJvbHNpemUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IGYwYzhmNTQuLmI3NTA2NzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtNTAsNyArNTAsOCBAQAogY2hhciBtb2Rwcm9iZV9wYXRoW0tNT0RfUEFUSF9MRU5dID0gIi9zYmluL21vZHByb2JlIjsKIAogLyoqCi0gKiByZXF1ZXN0X21vZHVsZSAtIHRyeSB0byBsb2FkIGEga2VybmVsIG1vZHVsZQorICogX19yZXF1ZXN0X21vZHVsZSAtIHRyeSB0byBsb2FkIGEga2VybmVsIG1vZHVsZQorICogQHdhaXQ6IHdhaXQgKG9yIG5vdCkgZm9yIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUKICAqIEBmbXQ6IHByaW50ZiBzdHlsZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlCiAgKiBALi4uOiBhcmd1bWVudHMgYXMgc3BlY2lmaWVkIGluIHRoZSBmb3JtYXQgc3RyaW5nCiAgKgpAQCAtNjMsNyArNjQsNyBAQAogICogSWYgbW9kdWxlIGF1dG8tbG9hZGluZyBzdXBwb3J0IGlzIGRpc2FibGVkIHRoZW4gdGhpcyBmdW5jdGlvbgogICogYmVjb21lcyBhIG5vLW9wZXJhdGlvbi4KICAqLwotaW50IHJlcXVlc3RfbW9kdWxlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoraW50IF9fcmVxdWVzdF9tb2R1bGUoYm9vbCB3YWl0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJY2hhciBtb2R1bGVfbmFtZVtNT0RVTEVfTkFNRV9MRU5dOwpAQCAtMTA4LDExICsxMDksMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0ID0gY2FsbF91c2VybW9kZWhlbHBlcihtb2Rwcm9iZV9wYXRoLCBhcmd2LCBlbnZwLCAxKTsKKwlyZXQgPSBjYWxsX3VzZXJtb2RlaGVscGVyKG1vZHByb2JlX3BhdGgsIGFyZ3YsIGVudnAsCisJCQl3YWl0ID8gVU1IX1dBSVRfUFJPQyA6IFVNSF9XQUlUX0VYRUMpOwogCWF0b21pY19kZWMoJmttb2RfY29uY3VycmVudCk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wocmVxdWVzdF9tb2R1bGUpOworRVhQT1JUX1NZTUJPTChfX3JlcXVlc3RfbW9kdWxlKTsKICNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDdiYThjZDkuLjUwMTZiZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNjk5LDkgKzcwMCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKIAlyZXQgPSBhcmNoX3ByZXBhcmVfa3Byb2JlKHApOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2tfdGV4dDsKIAogCUlOSVRfSExJU1RfTk9ERSgmcC0+aGxpc3QpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmcC0+aGxpc3QsCkBAIC03MTAsNiArNzEyLDggQEAKIAlpZiAoa3Byb2JlX2VuYWJsZWQpCiAJCWFyY2hfYXJtX2twcm9iZShwKTsKIAorb3V0X3VubG9ja190ZXh0OgorCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCkBAIC03NDYsOCArNzUwLDExIEBACiAJCSAqIGVuYWJsZWQgYW5kIG5vdCBnb25lIC0gb3RoZXJ3aXNlLCB0aGUgYnJlYWtwb2ludCB3b3VsZAogCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkLiBXZSBzYXZlIG9uIGZsdXNoaW5nIGljYWNoZS4KIAkJICovCi0JCWlmIChrcHJvYmVfZW5hYmxlZCAmJiAha3Byb2JlX2dvbmUob2xkX3ApKQorCQlpZiAoa3Byb2JlX2VuYWJsZWQgJiYgIWtwcm9iZV9nb25lKG9sZF9wKSkgeworCQkJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJCQlhcmNoX2Rpc2FybV9rcHJvYmUocCk7CisJCQltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOworCQl9CiAJCWhsaXN0X2RlbF9yY3UoJm9sZF9wLT5obGlzdCk7CiAJfSBlbHNlIHsKIAkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgIWtwcm9iZV9nb25lKHApKQpAQCAtOTEyLDEwICs5MTksOCBAQAogCQlyaS0+cnAgPSBycDsKIAkJcmktPnRhc2sgPSBjdXJyZW50OwogCi0JCWlmIChycC0+ZW50cnlfaGFuZGxlciAmJiBycC0+ZW50cnlfaGFuZGxlcihyaSwgcmVncykpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5sb2NrLCBmbGFncyk7CisJCWlmIChycC0+ZW50cnlfaGFuZGxlciAmJiBycC0+ZW50cnlfaGFuZGxlcihyaSwgcmVncykpCiAJCQlyZXR1cm4gMDsKLQkJfQogCiAJCWFyY2hfcHJlcGFyZV9rcmV0cHJvYmUocmksIHJlZ3MpOwogCkBAIC0xMjgwLDEyICsxMjg1LDE0IEBACiAJaWYgKGtwcm9iZV9lbmFibGVkKQogCQlnb3RvIGFscmVhZHlfZW5hYmxlZDsKIAorCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBLUFJPQkVfVEFCTEVfU0laRTsgaSsrKSB7CiAJCWhlYWQgPSAma3Byb2JlX3RhYmxlW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgbm9kZSwgaGVhZCwgaGxpc3QpCiAJCQlpZiAoIWtwcm9iZV9nb25lKHApKQogCQkJCWFyY2hfYXJtX2twcm9iZShwKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKIAogCWtwcm9iZV9lbmFibGVkID0gdHJ1ZTsKIAlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IGVuYWJsZWRcbiIpOwpAQCAtMTMxMCw2ICsxMzE3LDcgQEAKIAogCWtwcm9iZV9lbmFibGVkID0gZmFsc2U7CiAJcHJpbnRrKEtFUk5fSU5GTyAiS3Byb2JlcyBnbG9iYWxseSBkaXNhYmxlZFxuIik7CisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEtQUk9CRV9UQUJMRV9TSVpFOyBpKyspIHsKIAkJaGVhZCA9ICZrcHJvYmVfdGFibGVbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBub2RlLCBoZWFkLCBobGlzdCkgewpAQCAtMTMxOCw2ICsxMzI2LDcgQEAKIAkJfQogCX0KIAorCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCS8qIEFsbG93IGFsbCBjdXJyZW50bHkgcnVubmluZyBrcHJvYmVzIHRvIGNvbXBsZXRlICovCiAJc3luY2hyb25pemVfc2NoZWQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDk4MWNkNDguLjgxYjVmMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDx0cmFjZS9sb2NrZGVwLmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIApAQCAtMjkyMyw2ICsyOTI0LDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2V0X2NsYXNzKTsKIAorREVGSU5FX1RSQUNFKGxvY2tfYWNxdWlyZSk7CisKIC8qCiAgKiBXZSBhcmUgbm90IGFsd2F5cyBjYWxsZWQgd2l0aCBpcnFzIGRpc2FibGVkIC0gZG8gdGhhdCBoZXJlLAogICogYW5kIGFsc28gYXZvaWQgbG9ja2RlcCByZWN1cnNpb246CkBAIC0yOTMzLDYgKzI5MzYsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl0cmFjZV9sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLCBuZXN0X2xvY2ssIGlwKTsKKwogCWlmICh1bmxpa2VseShjdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbikpCiAJCXJldHVybjsKIApAQCAtMjk0NywxMSArMjk1MiwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobG9ja19hY3F1aXJlKTsKIAorREVGSU5FX1RSQUNFKGxvY2tfcmVsZWFzZSk7CisKIHZvaWQgbG9ja19yZWxlYXNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IG5lc3RlZCwKIAkJCSAgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdHJhY2VfbG9ja19yZWxlYXNlKGxvY2ssIG5lc3RlZCwgaXApOworCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKIAkJcmV0dXJuOwogCkBAIC0zMTAwLDEwICszMTA5LDE0IEBACiAJbG9jay0+aXAgPSBpcDsKIH0KIAorREVGSU5FX1RSQUNFKGxvY2tfY29udGVuZGVkKTsKKwogdm9pZCBsb2NrX2NvbnRlbmRlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXRyYWNlX2xvY2tfY29udGVuZGVkKGxvY2ssIGlwKTsKKwogCWlmICh1bmxpa2VseSghbG9ja19zdGF0KSkKIAkJcmV0dXJuOwogCkBAIC0zMTE5LDEwICszMTMyLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX2NvbnRlbmRlZCk7CiAKK0RFRklORV9UUkFDRShsb2NrX2FjcXVpcmVkKTsKKwogdm9pZCBsb2NrX2FjcXVpcmVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdHJhY2VfbG9ja19hY3F1aXJlZChsb2NrLCBpcCk7CisKIAlpZiAodW5saWtlbHkoIWxvY2tfc3RhdCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IGY3N2FjMzIuLmMyNjhhNzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTY4LDcgKzY4LDggQEAKIAogLyogTGlzdCBvZiBtb2R1bGVzLCBwcm90ZWN0ZWQgYnkgbW9kdWxlX211dGV4IG9yIHByZWVtcHRfZGlzYWJsZQogICogKGRlbGV0ZSB1c2VzIHN0b3BfbWFjaGluZS9hZGQgdXNlcyBSQ1UgbGlzdCBvcGVyYXRpb25zKS4gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgobW9kdWxlX211dGV4KTsKK0RFRklORV9NVVRFWChtb2R1bGVfbXV0ZXgpOworRVhQT1JUX1NZTUJPTF9HUEwobW9kdWxlX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQobW9kdWxlcyk7CiAKIC8qIFdhaXRpbmcgZm9yIGEgbW9kdWxlIHRvIGZpbmlzaCBpbml0aWFsaXppbmc/ICovCkBAIC03Niw3ICs3Nyw3IEBACiAKIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG1vZHVsZV9ub3RpZnlfbGlzdCk7CiAKLS8qIEJvdW5kcyBvZiBtb2R1bGUgYWxsb2NhdGlvbiwgZm9yIHNwZWVkaW5nIF9fbW9kdWxlX3RleHRfYWRkcmVzcyAqLworLyogQm91bmRzIG9mIG1vZHVsZSBhbGxvY2F0aW9uLCBmb3Igc3BlZWRpbmcgX19tb2R1bGVfYWRkcmVzcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2FkZHJfbWluID0gLTFVTCwgbW9kdWxlX2FkZHJfbWF4ID0gMDsKIAogaW50IHJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKQEAgLTE4NiwxNyArMTg3LDYgQEAKICNkZWZpbmUgc3ltdmVyc2lvbihiYXNlLCBpZHgpICgoYmFzZSAhPSBOVUxMKSA/ICgoYmFzZSkgKyAoaWR4KSkgOiBOVUxMKQogI2VuZGlmCiAKLXN0cnVjdCBzeW1zZWFyY2ggewotCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKLQllbnVtIHsKLQkJTk9UX0dQTF9PTkxZLAotCQlHUExfT05MWSwKLQkJV0lMTF9CRV9HUExfT05MWSwKLQl9IGxpY2VuY2U7Ci0JYm9vbCB1bnVzZWQ7Ci19OwotCiBzdGF0aWMgYm9vbCBlYWNoX3N5bWJvbF9pbl9zZWN0aW9uKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwKIAkJCQkgICB1bnNpZ25lZCBpbnQgYXJyc2l6ZSwKIAkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKQEAgLTIxNywxMCArMjA3LDggQEAKIH0KIAogLyogUmV0dXJucyB0cnVlIGFzIHNvb24gYXMgZm4gcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgZmFsc2UuICovCi1zdGF0aWMgYm9vbCBlYWNoX3N5bWJvbChib29sICgqZm4pKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwKLQkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwKLQkJCXZvaWQgKmRhdGEpCitib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAJY29uc3Qgc3RydWN0IHN5bXNlYXJjaCBhcnJbXSA9IHsKQEAgLTI3Myw2ICsyNjEsNyBAQAogCX0KIAlyZXR1cm4gZmFsc2U7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChlYWNoX3N5bWJvbCk7CiAKIHN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgewogCS8qIElucHV0ICovCkBAIC0yODMsNyArMjcyLDcgQEAKIAkvKiBPdXRwdXQgKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmM7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltOwogfTsKIAogc3RhdGljIGJvb2wgZmluZF9zeW1ib2xfaW5fc2VjdGlvbihjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICpzeW1zLApAQCAtMzI0LDE3ICszMTMsMTcgQEAKIAogCWZzYS0+b3duZXIgPSBvd25lcjsKIAlmc2EtPmNyYyA9IHN5bXZlcnNpb24oc3ltcy0+Y3Jjcywgc3ltbnVtKTsKLQlmc2EtPnZhbHVlID0gc3ltcy0+c3RhcnRbc3ltbnVtXS52YWx1ZTsKKwlmc2EtPnN5bSA9ICZzeW1zLT5zdGFydFtzeW1udW1dOwogCXJldHVybiB0cnVlOwogfQogCi0vKiBGaW5kIGEgc3ltYm9sLCByZXR1cm4gdmFsdWUsIChvcHRpb25hbCkgY3JjIGFuZCAob3B0aW9uYWwpIG1vZHVsZQotICogd2hpY2ggb3ducyBpdCAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgc3RydWN0IG1vZHVsZSAqKm93bmVyLAotCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICoqY3JjLAotCQkJCSBib29sIGdwbG9rLAotCQkJCSBib29sIHdhcm4pCisvKiBGaW5kIGEgc3ltYm9sIGFuZCByZXR1cm4gaXQsIGFsb25nIHdpdGgsIChvcHRpb25hbCkgY3JjIGFuZAorICogKG9wdGlvbmFsKSBtb2R1bGUgd2hpY2ggb3ducyBpdCAqLworY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN0cnVjdCBtb2R1bGUgKipvd25lciwKKwkJCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqKmNyYywKKwkJCQkJYm9vbCBncGxvaywKKwkJCQkJYm9vbCB3YXJuKQogewogCXN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgZnNhOwogCkBAIC0zNDcsMTUgKzMzNiwxNiBAQAogCQkJKm93bmVyID0gZnNhLm93bmVyOwogCQlpZiAoY3JjKQogCQkJKmNyYyA9IGZzYS5jcmM7Ci0JCXJldHVybiBmc2EudmFsdWU7CisJCXJldHVybiBmc2Euc3ltOwogCX0KIAogCURFQlVHUCgiRmFpbGVkIHRvIGZpbmQgc3ltYm9sICVzXG4iLCBuYW1lKTsKLQlyZXR1cm4gLUVOT0VOVDsKKwlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbmRfc3ltYm9sKTsKIAogLyogU2VhcmNoIGZvciBtb2R1bGUgYnkgbmFtZTogbXVzdCBob2xkIG1vZHVsZV9tdXRleC4gKi8KLXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpmaW5kX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQorc3RydWN0IG1vZHVsZSAqZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKQEAgLTM2NSw2ICszNTUsNyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbmRfbW9kdWxlKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIApAQCAtNjQxLDcgKzYzMiw3IEBACiB9CiAKIC8qIE1vZHVsZSBhIHVzZXMgYiAqLwotc3RhdGljIGludCB1c2VfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKmEsIHN0cnVjdCBtb2R1bGUgKmIpCitpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKQogewogCXN0cnVjdCBtb2R1bGVfdXNlICp1c2U7CiAJaW50IG5vX3dhcm4sIGVycjsKQEAgLTY3NCw2ICs2NjUsNyBAQAogCW5vX3dhcm4gPSBzeXNmc19jcmVhdGVfbGluayhiLT5ob2xkZXJzX2RpciwgJmEtPm1rb2JqLmtvYmosIGEtPm5hbWUpOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNlX21vZHVsZSk7CiAKIC8qIENsZWFyIHRoZSB1bmxvYWQgc3R1ZmYgb2YgdGhlIG1vZHVsZS4gKi8KIHN0YXRpYyB2b2lkIG1vZHVsZV91bmxvYWRfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QpCkBAIC04OTQsNyArODg2LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChJU19FUlJfVkFMVUUoZmluZF9zeW1ib2woc3ltYm9sLCAmb3duZXIsIE5VTEwsIHRydWUsIGZhbHNlKSkpCisJaWYgKCFmaW5kX3N5bWJvbChzeW1ib2wsICZvd25lciwgTlVMTCwgdHJ1ZSwgZmFsc2UpKQogCQlCVUcoKTsKIAltb2R1bGVfcHV0KG93bmVyKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwpAQCAtOTA4LDggKzkwMCwxMCBAQAogCWlmIChjb3JlX2tlcm5lbF90ZXh0KCh1bnNpZ25lZCBsb25nKWFkZHIpKQogCQlyZXR1cm47CiAKLQlpZiAoIShtb2RhZGRyID0gbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylhZGRyKSkpCi0JCUJVRygpOworCS8qIG1vZHVsZV90ZXh0X2FkZHJlc3MgaXMgc2FmZSBoZXJlOiB3ZSdyZSBzdXBwb3NlZCB0byBoYXZlIHJlZmVyZW5jZQorCSAqIHRvIG1vZHVsZSBmcm9tIHN5bWJvbF9nZXQsIHNvIGl0IGNhbid0IGdvIGF3YXkuICovCisJbW9kYWRkciA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylhZGRyKTsKKwlCVUdfT04oIW1vZGFkZHIpOwogCW1vZHVsZV9wdXQobW9kYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW1ib2xfcHV0X2FkZHIpOwpAQCAtOTQ5LDEwICs5NDMsMTEgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKQoraW50IHVzZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYikKIHsKIAlyZXR1cm4gc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KGIpID09IDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2VfbW9kdWxlKTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91bmxvYWRfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC05OTUsMTIgKzk5MCwxMiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciB2ZXJtYWdpY1tdID0gVkVSTUFHSUNfU1RSSU5HOwogCi1zdGF0aWMgaW50IHRyeV90b19mb3JjZV9sb2FkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqc3ltbmFtZSkKK3N0YXRpYyBpbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pCiB7CiAjaWZkZWYgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FECiAJaWYgKCF0ZXN0X3RhaW50KFRBSU5UX0ZPUkNFRF9NT0RVTEUpKQotCQlwcmludGsoIiVzOiBubyB2ZXJzaW9uIGZvciBcIiVzXCIgZm91bmQ6IGtlcm5lbCB0YWludGVkLlxuIiwKLQkJICAgICAgIG1vZC0+bmFtZSwgc3ltbmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlczoga2VybmVsIHRhaW50ZWQuXG4iLAorCQkgICAgICAgbW9kLT5uYW1lLCByZWFzb24pOwogCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9GT1JDRURfTU9EVUxFKTsKIAlyZXR1cm4gMDsKICNlbHNlCkBAIC0xMDU3LDkgKzEwNTIsOSBAQAogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyYzsKIAotCWlmIChJU19FUlJfVkFMVUUoZmluZF9zeW1ib2woInN0cnVjdF9tb2R1bGUiLCBOVUxMLCAmY3JjLCB0cnVlLCBmYWxzZSkpKQorCWlmICghZmluZF9zeW1ib2woIm1vZHVsZV9sYXlvdXQiLCBOVUxMLCAmY3JjLCB0cnVlLCBmYWxzZSkpCiAJCUJVRygpOwotCXJldHVybiBjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgInN0cnVjdF9tb2R1bGUiLCBtb2QsIGNyYyk7CisJcmV0dXJuIGNoZWNrX3ZlcnNpb24oc2VjaGRycywgdmVyc2luZGV4LCAibW9kdWxlX2xheW91dCIsIG1vZCwgY3JjKTsKIH0KIAogLyogRmlyc3QgcGFydCBpcyBrZXJuZWwgdmVyc2lvbiwgd2hpY2ggd2UgaWdub3JlIGlmIG1vZHVsZSBoYXMgY3Jjcy4gKi8KQEAgLTEwOTgsMjUgKzEwOTMsMjUgQEAKIAogLyogUmVzb2x2ZSBhIHN5bWJvbCBmb3IgdGhpcyBtb2R1bGUuICBJLmUuIGlmIHdlIGZpbmQgb25lLCByZWNvcmQgdXNhZ2UuCiAgICBNdXN0IGJlIGhvbGRpbmcgbW9kdWxlX211dGV4LiAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzb2x2ZV9zeW1ib2woRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJICAgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqcmVzb2x2ZV9zeW1ib2woRWxmX1NoZHIgKnNlY2hkcnMsCisJCQkJCQkgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCisJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQl1bnNpZ25lZCBsb25nIHJldDsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyYzsKIAotCXJldCA9IGZpbmRfc3ltYm9sKG5hbWUsICZvd25lciwgJmNyYywKKwlzeW0gPSBmaW5kX3N5bWJvbChuYW1lLCAmb3duZXIsICZjcmMsCiAJCQkgICEobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKSwgdHJ1ZSk7Ci0JaWYgKCFJU19FUlJfVkFMVUUocmV0KSkgewotCQkvKiB1c2VfbW9kdWxlIGNhbiBmYWlsIGR1ZSB0byBPT00sCi0JCSAgIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciB1bmxvYWRpbmcgKi8KKwkvKiB1c2VfbW9kdWxlIGNhbiBmYWlsIGR1ZSB0byBPT00sCisJICAgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIG9yIHVubG9hZGluZyAqLworCWlmIChzeW0pIHsKIAkJaWYgKCFjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgbmFtZSwgbW9kLCBjcmMpIHx8CiAJCSAgICAhdXNlX21vZHVsZShtb2QsIG93bmVyKSkKLQkJCXJldCA9IC1FSU5WQUw7CisJCQlzeW0gPSBOVUxMOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzeW07CiB9CiAKIC8qCkBAIC0xNDkxLDYgKzE0ODYsOSBAQAogCS8qIE1vZHVsZSB1bmxvYWQgc3R1ZmYgKi8KIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKIAorCS8qIEZyZWUgYW55IGFsbG9jYXRlZCBwYXJhbWV0ZXJzLiAqLworCWRlc3Ryb3lfcGFyYW1zKG1vZC0+a3AsIG1vZC0+bnVtX2twKTsKKwogCS8qIHJlbGVhc2UgYW55IHBvaW50ZXJzIHRvIG1jb3VudCBpbiB0aGlzIG1vZHVsZSAqLwogCWZ0cmFjZV9yZWxlYXNlKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKIApAQCAtMTUxMywxNyArMTUxMSwxNSBAQAogdm9pZCAqX19zeW1ib2xfZ2V0KGNvbnN0IGNoYXIgKnN5bWJvbCkKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzeW07CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQl2YWx1ZSA9IGZpbmRfc3ltYm9sKHN5bWJvbCwgJm93bmVyLCBOVUxMLCB0cnVlLCB0cnVlKTsKLQlpZiAoSVNfRVJSX1ZBTFVFKHZhbHVlKSkKLQkJdmFsdWUgPSAwOwotCWVsc2UgaWYgKHN0cm9uZ190cnlfbW9kdWxlX2dldChvd25lcikpCi0JCXZhbHVlID0gMDsKKwlzeW0gPSBmaW5kX3N5bWJvbChzeW1ib2wsICZvd25lciwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7CisJaWYgKHN5bSAmJiBzdHJvbmdfdHJ5X21vZHVsZV9nZXQob3duZXIpKQorCQlzeW0gPSBOVUxMOwogCXByZWVtcHRfZW5hYmxlKCk7CiAKLQlyZXR1cm4gKHZvaWQgKil2YWx1ZTsKKwlyZXR1cm4gc3ltID8gKHZvaWQgKilzeW0tPnZhbHVlIDogTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3ltYm9sX2dldCk7CiAKQEAgLTE1NTEsOCArMTU0Nyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnIpOyBpKyspIHsKIAkJZm9yIChzID0gYXJyW2ldLnN5bTsgcyA8IGFycltpXS5zeW0gKyBhcnJbaV0ubnVtOyBzKyspIHsKLQkJCWlmICghSVNfRVJSX1ZBTFVFKGZpbmRfc3ltYm9sKHMtPm5hbWUsICZvd25lciwKLQkJCQkJCSAgICAgIE5VTEwsIHRydWUsIGZhbHNlKSkpIHsKKwkJCWlmIChmaW5kX3N5bWJvbChzLT5uYW1lLCAmb3duZXIsIE5VTEwsIHRydWUsIGZhbHNlKSkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiJXM6IGV4cG9ydHMgZHVwbGljYXRlIHN5bWJvbCAlcyIKIAkJCQkgICAgICAgIiAob3duZWQgYnkgJXMpXG4iLApAQCAtMTU3Niw2ICsxNTcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNlY2Jhc2U7CiAJdW5zaWduZWQgaW50IGksIG4gPSBzZWNoZHJzW3N5bWluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwogCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICprc3ltOwogCiAJZm9yIChpID0gMTsgaSA8IG47IGkrKykgewogCQlzd2l0Y2ggKHN5bVtpXS5zdF9zaG5keCkgewpAQCAtMTU5NSwxMyArMTU5MSwxNCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBTSE5fVU5ERUY6Ci0JCQlzeW1baV0uc3RfdmFsdWUKLQkJCSAgPSByZXNvbHZlX3N5bWJvbChzZWNoZHJzLCB2ZXJzaW5kZXgsCi0JCQkJCSAgIHN0cnRhYiArIHN5bVtpXS5zdF9uYW1lLCBtb2QpOwotCisJCQlrc3ltID0gcmVzb2x2ZV9zeW1ib2woc2VjaGRycywgdmVyc2luZGV4LAorCQkJCQkgICAgICBzdHJ0YWIgKyBzeW1baV0uc3RfbmFtZSwgbW9kKTsKIAkJCS8qIE9rIGlmIHJlc29sdmVkLiAgKi8KLQkJCWlmICghSVNfRVJSX1ZBTFVFKHN5bVtpXS5zdF92YWx1ZSkpCisJCQlpZiAoa3N5bSkgeworCQkJCXN5bVtpXS5zdF92YWx1ZSA9IGtzeW0tPnZhbHVlOwogCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBPayBpZiB3ZWFrLiAgKi8KIAkJCWlmIChFTEZfU1RfQklORChzeW1baV0uc3RfaW5mbykgPT0gU1RCX1dFQUspCiAJCQkJYnJlYWs7CkBAIC0xNjc2LDggKzE2NzMsNyBAQAogCQkJaWYgKChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzBdKSAhPSBtYXNrc1ttXVswXQogCQkJICAgIHx8IChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzFdKQogCQkJICAgIHx8IHMtPnNoX2VudHNpemUgIT0gfjBVTAotCQkJICAgIHx8IHN0cm5jbXAoc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUsCi0JCQkJICAgICAgICIuaW5pdCIsIDUpID09IDApCisJCQkgICAgfHwgc3Ryc3RhcnRzKHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lLCAiLmluaXQiKSkKIAkJCQljb250aW51ZTsKIAkJCXMtPnNoX2VudHNpemUgPSBnZXRfb2Zmc2V0KG1vZCwgJm1vZC0+Y29yZV9zaXplLCBzLCBpKTsKIAkJCURFQlVHUCgiXHQlc1xuIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpOwpAQCAtMTY5NCw4ICsxNjkwLDcgQEAKIAkJCWlmICgocy0+c2hfZmxhZ3MgJiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF0KIAkJCSAgICB8fCAocy0+c2hfZmxhZ3MgJiBtYXNrc1ttXVsxXSkKIAkJCSAgICB8fCBzLT5zaF9lbnRzaXplICE9IH4wVUwKLQkJCSAgICB8fCBzdHJuY21wKHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lLAotCQkJCSAgICAgICAiLmluaXQiLCA1KSAhPSAwKQorCQkJICAgIHx8ICFzdHJzdGFydHMoc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUsICIuaW5pdCIpKQogCQkJCWNvbnRpbnVlOwogCQkJcy0+c2hfZW50c2l6ZSA9IChnZXRfb2Zmc2V0KG1vZCwgJm1vZC0+aW5pdF9zaXplLCBzLCBpKQogCQkJCQkgfCBJTklUX09GRlNFVF9NQVNLKTsKQEAgLTE4MjgsOCArMTgyMyw3IEBACiAJCWVsc2UKIAkJCXJldHVybiAnYic7CiAJfQotCWlmIChzdHJuY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWUsCi0JCSAgICAiLmRlYnVnIiwgc3RybGVuKCIuZGVidWciKSkgPT0gMCkKKwlpZiAoc3Ryc3RhcnRzKHNlY3N0cmluZ3MgKyBzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWUsICIuZGVidWciKSkKIAkJcmV0dXJuICduJzsKIAlyZXR1cm4gJz8nOwogfQpAQCAtMTg5OCw4ICsxODkyLDcgQEAKIAl1bnNpZ25lZCBpbnQgc3ltaW5kZXggPSAwOwogCXVuc2lnbmVkIGludCBzdHJpbmRleCA9IDA7CiAJdW5zaWduZWQgaW50IG1vZGluZGV4LCB2ZXJzaW5kZXgsIGluZm9pbmRleCwgcGNwdWluZGV4OwotCXVuc2lnbmVkIGludCBudW1fa3AsIG51bV9tY291bnQ7Ci0Jc3RydWN0IGtlcm5lbF9wYXJhbSAqa3A7CisJdW5zaWduZWQgaW50IG51bV9tY291bnQ7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KQEAgLTE5MTYsMTIgKzE5MDksNiBAQAogCWlmIChsZW4gPiA2NCAqIDEwMjQgKiAxMDI0IHx8IChoZHIgPSB2bWFsbG9jKGxlbikpID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JLyogQ3JlYXRlIHN0b3BfbWFjaGluZSB0aHJlYWRzIHNpbmNlIHRoZSBlcnJvciBwYXRoIHJlbGllcyBvbgotCSAqIGEgbm9uLWZhaWxpbmcgc3RvcF9tYWNoaW5lIGNhbGwuICovCi0JZXJyID0gc3RvcF9tYWNoaW5lX2NyZWF0ZSgpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZV9oZHI7Ci0KIAlpZiAoY29weV9mcm9tX3VzZXIoaGRyLCB1bW9kLCBsZW4pICE9IDApIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBmcmVlX2hkcjsKQEAgLTE5NjIsOSArMTk0OSwxMiBAQAogCQl9CiAjaWZuZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJCS8qIERvbid0IGxvYWQgLmV4aXQgc2VjdGlvbnMgKi8KLQkJaWYgKHN0cm5jbXAoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsICIuZXhpdCIsIDUpID09IDApCisJCWlmIChzdHJzdGFydHMoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsICIuZXhpdCIpKQogCQkJc2VjaGRyc1tpXS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwogI2VuZGlmCisJCS8qIERvbid0IGtlZXAgX192ZXJzaW9ucyBhcm91bmQ7IGl0J3MganVzdCBmb3IgbG9hZGluZy4gKi8KKwkJaWYgKHN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCAiX192ZXJzaW9ucyIpID09IDApCisJCQlzZWNoZHJzW2ldLnNoX2ZsYWdzICY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7CiAJfQogCiAJbW9kaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCkBAIC0yMDA2LDcgKzE5OTYsNyBAQAogCW1vZG1hZ2ljID0gZ2V0X21vZGluZm8oc2VjaGRycywgaW5mb2luZGV4LCAidmVybWFnaWMiKTsKIAkvKiBUaGlzIGlzIGFsbG93ZWQ6IG1vZHByb2JlIC0tZm9yY2Ugd2lsbCBpbnZhbGlkYXRlIGl0LiAqLwogCWlmICghbW9kbWFnaWMpIHsKLQkJZXJyID0gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLCAibWFnaWMiKTsKKwkJZXJyID0gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLCAiYmFkIHZlcm1hZ2ljIik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfaGRyOwogCX0gZWxzZSBpZiAoIXNhbWVfbWFnaWMobW9kbWFnaWMsIHZlcm1hZ2ljLCB2ZXJzaW5kZXgpKSB7CkBAIC0yMTQ0LDggKzIxMzQsOCBAQAogCiAJLyogTm93IHdlJ3ZlIGdvdCBldmVyeXRoaW5nIGluIHRoZSBmaW5hbCBsb2NhdGlvbnMsIHdlIGNhbgogCSAqIGZpbmQgb3B0aW9uYWwgc2VjdGlvbnMuICovCi0Ja3AgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19wYXJhbSIsIHNpemVvZigqa3ApLAotCQkJICAmbnVtX2twKTsKKwltb2QtPmtwID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fcGFyYW0iLAorCQkJICAgICAgIHNpemVvZigqbW9kLT5rcCksICZtb2QtPm51bV9rcCk7CiAJbW9kLT5zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYiIsCiAJCQkJIHNpemVvZigqbW9kLT5zeW1zKSwgJm1vZC0+bnVtX3N5bXMpOwogCW1vZC0+Y3JjcyA9IHNlY3Rpb25fYWRkcihoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWIiKTsKQEAgLTIxOTUsOCArMjE4NSw4IEBACiAJICAgIHx8IChtb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMgJiYgIW1vZC0+dW51c2VkX2dwbF9jcmNzKQogI2VuZGlmCiAJCSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHMuXG4iLCBtb2QtPm5hbWUpOwotCQllcnIgPSB0cnlfdG9fZm9yY2VfbG9hZChtb2QsICJub2NyYyIpOworCQllcnIgPSB0cnlfdG9fZm9yY2VfbG9hZChtb2QsCisJCQkJCSJubyB2ZXJzaW9ucyBmb3IgZXhwb3J0ZWQgc3ltYm9scyIpOwogCQlpZiAoZXJyKQogCQkJZ290byBjbGVhbnVwOwogCX0KQEAgLTIyOTEsMTEgKzIyODEsMTEgQEAKIAkgKi8KIAlsaXN0X2FkZF9yY3UoJm1vZC0+bGlzdCwgJm1vZHVsZXMpOwogCi0JZXJyID0gcGFyc2VfYXJncyhtb2QtPm5hbWUsIG1vZC0+YXJncywga3AsIG51bV9rcCwgTlVMTCk7CisJZXJyID0gcGFyc2VfYXJncyhtb2QtPm5hbWUsIG1vZC0+YXJncywgbW9kLT5rcCwgbW9kLT5udW1fa3AsIE5VTEwpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHVubGluazsKIAotCWVyciA9IG1vZF9zeXNmc19zZXR1cChtb2QsIGtwLCBudW1fa3ApOworCWVyciA9IG1vZF9zeXNmc19zZXR1cChtb2QsIG1vZC0+a3AsIG1vZC0+bnVtX2twKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byB1bmxpbms7CiAJYWRkX3NlY3RfYXR0cnMobW9kLCBoZHItPmVfc2hudW0sIHNlY3N0cmluZ3MsIHNlY2hkcnMpOwpAQCAtMjMwNCwxMiArMjI5NCwxMyBAQAogCS8qIEdldCByaWQgb2YgdGVtcG9yYXJ5IGNvcHkgKi8KIAl2ZnJlZShoZHIpOwogCi0Jc3RvcF9tYWNoaW5lX2Rlc3Ryb3koKTsKIAkvKiBEb25lISAqLwogCXJldHVybiBtb2Q7CiAKICB1bmxpbms6Ci0Jc3RvcF9tYWNoaW5lKF9fdW5saW5rX21vZHVsZSwgbW9kLCBOVUxMKTsKKwkvKiBVbmxpbmsgY2FyZWZ1bGx5OiBrYWxsc3ltcyBjb3VsZCBiZSB3YWxraW5nIGxpc3QuICovCisJbGlzdF9kZWxfcmN1KCZtb2QtPmxpc3QpOworCXN5bmNocm9uaXplX3NjaGVkKCk7CiAJbW9kdWxlX2FyY2hfY2xlYW51cChtb2QpOwogIGNsZWFudXA6CiAJa29iamVjdF9kZWwoJm1vZC0+bWtvYmoua29iaik7CkBAIC0yMzE3LDggKzIzMDgsOCBAQAogCWZ0cmFjZV9yZWxlYXNlKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKICBmcmVlX3VubG9hZDoKIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKLSBmcmVlX2luaXQ6CiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorIGZyZWVfaW5pdDoKIAlwZXJjcHVfbW9kZnJlZShtb2QtPnJlZnB0cik7CiAjZW5kaWYKIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOwpAQCAtMjMzMiw3ICsyMzIzLDYgQEAKIAlrZnJlZShhcmdzKTsKICBmcmVlX2hkcjoKIAl2ZnJlZShoZHIpOwotCXN0b3BfbWFjaGluZV9kZXN0cm95KCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogIHRydW5jYXRlZDoKQEAgLTI2MDksNiArMjU5OSwyNSBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIHJldDsKIH0KKworaW50IG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgICAgc3RydWN0IG1vZHVsZSAqLCB1bnNpZ25lZCBsb25nKSwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9zeW10YWI7IGkrKykgeworCQkJcmV0ID0gZm4oZGF0YSwgbW9kLT5zdHJ0YWIgKyBtb2QtPnN5bXRhYltpXS5zdF9uYW1lLAorCQkJCSBtb2QsIG1vZC0+c3ltdGFiW2ldLnN0X3ZhbHVlKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNUyAqLwogCiBzdGF0aWMgY2hhciAqbW9kdWxlX2ZsYWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqYnVmKQpAQCAtMjc0NCwyOSArMjc1MywzMSBAQAogfQogCiAvKgotICogSXMgdGhpcyBhIHZhbGlkIG1vZHVsZSBhZGRyZXNzPworICogaXNfbW9kdWxlX2FkZHJlc3MgLSBpcyB0aGlzIGFkZHJlc3MgaW5zaWRlIGEgbW9kdWxlPworICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIGNoZWNrLgorICoKKyAqIFNlZSBpc19tb2R1bGVfdGV4dF9hZGRyZXNzKCkgaWYgeW91IHNpbXBseSB3YW50IHRvIHNlZSBpZiB0aGUgYWRkcmVzcworICogaXMgY29kZSAobm90IGRhdGEpLgogICovCi1pbnQgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQorYm9vbCBpc19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IG1vZHVsZSAqbW9kOworCWJvb2wgcmV0OwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KSB7Ci0JCWlmICh3aXRoaW5fbW9kdWxlX2NvcmUoYWRkciwgbW9kKSkgewotCQkJcHJlZW1wdF9lbmFibGUoKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCisJcmV0ID0gX19tb2R1bGVfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOwogCXByZWVtcHRfZW5hYmxlKCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi0KLS8qIElzIHRoaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcz8gKi8KLV9fbm90cmFjZV9mdW5jZ3JhcGggc3RydWN0IG1vZHVsZSAqX19tb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKKy8qCisgKiBfX21vZHVsZV9hZGRyZXNzIC0gZ2V0IHRoZSBtb2R1bGUgd2hpY2ggY29udGFpbnMgYW4gYWRkcmVzcy4KKyAqIEBhZGRyOiB0aGUgYWRkcmVzcy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgZGlzYWJsZWQgb3IgbW9kdWxlIG11dGV4IGhlbGQgc28gdGhhdAorICogbW9kdWxlIGRvZXNuJ3QgZ2V0IGZyZWVkIGR1cmluZyB0aGlzLgorICovCitzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKQEAgLTI3NzQsMjIgKzI3ODUsNTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KQotCQlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF90ZXh0X3NpemUpCi0JCSAgICB8fCB3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3RleHRfc2l6ZSkpCisJCWlmICh3aXRoaW5fbW9kdWxlX2NvcmUoYWRkciwgbW9kKQorCQkgICAgfHwgd2l0aGluX21vZHVsZV9pbml0KGFkZHIsIG1vZCkpCiAJCQlyZXR1cm4gbW9kOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19tb2R1bGVfYWRkcmVzcyk7CiAKLXN0cnVjdCBtb2R1bGUgKm1vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQorLyoKKyAqIGlzX21vZHVsZV90ZXh0X2FkZHJlc3MgLSBpcyB0aGlzIGFkZHJlc3MgaW5zaWRlIG1vZHVsZSBjb2RlPworICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIGNoZWNrLgorICoKKyAqIFNlZSBpc19tb2R1bGVfYWRkcmVzcygpIGlmIHlvdSBzaW1wbHkgd2FudCB0byBzZWUgaWYgdGhlIGFkZHJlc3MgaXMKKyAqIGFueXdoZXJlIGluIGEgbW9kdWxlLiAgU2VlIGtlcm5lbF90ZXh0X2FkZHJlc3MoKSBmb3IgdGVzdGluZyBpZiBhbgorICogYWRkcmVzcyBjb3JyZXNwb25kcyB0byBrZXJuZWwgb3IgbW9kdWxlIGNvZGUuCisgKi8KK2Jvb2wgaXNfbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IG1vZHVsZSAqbW9kOworCWJvb2wgcmV0OwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbW9kID0gX19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpOworCXJldCA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOwogCXByZWVtcHRfZW5hYmxlKCk7CiAKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogX19tb2R1bGVfdGV4dF9hZGRyZXNzIC0gZ2V0IHRoZSBtb2R1bGUgd2hvc2UgY29kZSBjb250YWlucyBhbiBhZGRyZXNzLgorICogQGFkZHI6IHRoZSBhZGRyZXNzLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdCBkaXNhYmxlZCBvciBtb2R1bGUgbXV0ZXggaGVsZCBzbyB0aGF0CisgKiBtb2R1bGUgZG9lc24ndCBnZXQgZnJlZWQgZHVyaW5nIHRoaXMuCisgKi8KK3N0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IG1vZHVsZSAqbW9kID0gX19tb2R1bGVfYWRkcmVzcyhhZGRyKTsKKwlpZiAobW9kKSB7CisJCS8qIE1ha2Ugc3VyZSBpdCdzIHdpdGhpbiB0aGUgdGV4dCBzZWN0aW9uLiAqLworCQlpZiAoIXdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfdGV4dF9zaXplKQorCQkgICAgJiYgIXdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfdGV4dF9zaXplKSkKKwkJCW1vZCA9IE5VTEw7CisJfQogCXJldHVybiBtb2Q7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX21vZHVsZV90ZXh0X2FkZHJlc3MpOwogCiAvKiBEb24ndCBncmFiIGxvY2ssIHdlJ3JlIG9vcHNpbmcuICovCiB2b2lkIHByaW50X21vZHVsZXModm9pZCkKQEAgLTI4MDksOSArMjg0OSwxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX01PRFZFUlNJT05TCi0vKiBHZW5lcmF0ZSB0aGUgc2lnbmF0dXJlIGZvciBzdHJ1Y3QgbW9kdWxlIGhlcmUsIHRvbywgZm9yIG1vZHZlcnNpb25zLiAqLwotdm9pZCBzdHJ1Y3RfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyByZXR1cm47IH0KLUVYUE9SVF9TWU1CT0woc3RydWN0X21vZHVsZSk7CisvKiBHZW5lcmF0ZSB0aGUgc2lnbmF0dXJlIGZvciBhbGwgcmVsZXZhbnQgbW9kdWxlIHN0cnVjdHVyZXMgaGVyZS4KKyAqIElmIHRoZXNlIGNoYW5nZSwgd2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8gcGFyc2UgdGhlIG1vZHVsZS4gKi8KK3ZvaWQgbW9kdWxlX2xheW91dChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCSAgIHN0cnVjdCBtb2R2ZXJzaW9uX2luZm8gKnZlciwKKwkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCisJCSAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywKKwkJICAgc3RydWN0IG1hcmtlciAqbWFya2VyLAorCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCit7Cit9CitFWFBPUlRfU1lNQk9MKG1vZHVsZV9sYXlvdXQpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFSS0VSUwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IGExZTMwMjUuLmRlMjczZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKy8qIFdlIGFidXNlIHRoZSBoaWdoIGJpdHMgb2YgInBlcm0iIHRvIHJlY29yZCB3aGV0aGVyIHdlIGttYWxsb2MnZWQuICovCisjZGVmaW5lIEtQQVJBTV9LTUFMTE9DRUQJMHg4MDAwMDAwMAorCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCiAjZWxzZQpAQCAtMjE3LDcgKzIyMCwxOSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQkqKGNoYXIgKiopa3AtPmFyZyA9IChjaGFyICopdmFsOworCWlmIChrcC0+cGVybSAmIEtQQVJBTV9LTUFMTE9DRUQpCisJCWtmcmVlKCooY2hhciAqKilrcC0+YXJnKTsKKworCS8qIFRoaXMgaXMgYSBoYWNrLiAgV2UgY2FuJ3QgbmVlZCB0byBzdHJkdXAgaW4gZWFybHkgYm9vdCwgYW5kIHdlCisJICogZG9uJ3QgbmVlZCB0bzsgdGhpcyBtYW5nbGVkIGNvbW1hbmRsaW5lIGlzIHByZXNlcnZlZC4gKi8KKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkgeworCQlrcC0+cGVybSB8PSBLUEFSQU1fS01BTExPQ0VEOworCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFrcC0+YXJnKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfSBlbHNlCisJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3MSw2ICs1ODYsMTUgQEAKIH0KICNlbmRpZgogCit2b2lkIGRlc3Ryb3lfcGFyYW1zKGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKnBhcmFtcywgdW5zaWduZWQgbnVtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlpZiAocGFyYW1zW2ldLnBlcm0gJiBLUEFSQU1fS01BTExPQ0VEKQorCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKIAkJCQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IGE1ZjYxYTkuLjUwNTJiNTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTEzMTEsOCArMTMxMSwxMSBAQAogYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAogCQkJdW5zaWduZWQgaW50IGludGVydmFsX21zZWNzKQogewotCWlmICgqY2FsbGVyX2ppZmZpZXMgPT0gMCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsICpjYWxsZXJfamlmZmllcykpIHsKLQkJKmNhbGxlcl9qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWxfbXNlY3MpOworCWlmICgqY2FsbGVyX2ppZmZpZXMgPT0gMAorCQkJfHwgIXRpbWVfaW5fcmFuZ2UoamlmZmllcywgKmNhbGxlcl9qaWZmaWVzLAorCQkJCQkqY2FsbGVyX2ppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKGludGVydmFsX21zZWNzKSkpIHsKKwkJKmNhbGxlcl9qaWZmaWVzID0gamlmZmllczsKIAkJcmV0dXJuIHRydWU7CiAJfQogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggZTkyZGI4Yy4uYmMxODg1NCAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTY3Nyw5ICs2NzcsNyBAQAogCSAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlpZiAodW5saWtlbHkoIWNoYW4tPmJ1ZltpXSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmVsYXlfbGF0ZV9zZXR1cF9maWxlczogQ1BVICV1ICIKLQkJCQkJImhhcyBubyBidWZmZXIsIGl0IG11c3QgaGF2ZSFcbiIsIGkpOwotCQkJQlVHKCk7CisJCQlXQVJOX09OQ0UoMSwgS0VSTl9FUlIgIkNQVSBoYXMgbm8gYnVmZmVyIVxuIik7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggMjMyNWRiMi4uYmVjMjQ5OCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTM4MTgsMTkgKzM4MTgsMjMgQEAKICAqLwogI2RlZmluZSBNQVhfUElOTkVEX0lOVEVSVkFMCTUxMgogCisvKiBXb3JraW5nIGNwdW1hc2sgZm9yIGxvYWRfYmFsYW5jZSBhbmQgbG9hZF9iYWxhbmNlX25ld2lkbGUuICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgbG9hZF9iYWxhbmNlX3RtcG1hc2spOworCiAvKgogICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQogICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgogICovCiBzdGF0aWMgaW50IGxvYWRfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwKIAkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJCWludCAqYmFsYW5jZSwgc3RydWN0IGNwdW1hc2sgKmNwdXMpCisJCQlpbnQgKmJhbGFuY2UpCiB7CiAJaW50IGxkX21vdmVkLCBhbGxfcGlubmVkID0gMCwgYWN0aXZlX2JhbGFuY2UgPSAwLCBzZF9pZGxlID0gMDsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwogCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwogCXN0cnVjdCBycSAqYnVzaWVzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7CiAKIAljcHVtYXNrX3NldGFsbChjcHVzKTsKIApAQCAtMzk4NSw4ICszOTg5LDcgQEAKICAqIHRoaXNfcnEgaXMgbG9ja2VkLgogICovCiBzdGF0aWMgaW50Ci1sb2FkX2JhbGFuY2VfbmV3aWRsZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JCQlzdHJ1Y3QgY3B1bWFzayAqY3B1cykKK2xvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwogCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEw7CkBAIC0zOTk0LDYgKzM5OTcsNyBAQAogCWludCBsZF9tb3ZlZCA9IDA7CiAJaW50IHNkX2lkbGUgPSAwOwogCWludCBhbGxfcGlubmVkID0gMDsKKwlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwogCiAJY3B1bWFza19zZXRhbGwoY3B1cyk7CiAKQEAgLTQxMzQsMTAgKzQxMzgsNiBAQAogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCWludCBwdWxsZWRfdGFzayA9IDA7CiAJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7Ci0JY3B1bWFza192YXJfdCB0bXBtYXNrOwotCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wbWFzaywgR0ZQX0FUT01JQykpCi0JCXJldHVybjsKIAogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKIAkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKQEAgLTQxNDgsNyArNDE0OCw3IEBACiAJCWlmIChzZC0+ZmxhZ3MgJiBTRF9CQUxBTkNFX05FV0lETEUpCiAJCQkvKiBJZiB3ZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzdG9wIHNlYXJjaGluZzogKi8KIAkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsIHRoaXNfcnEsCi0JCQkJCQkJICAgc2QsIHRtcG1hc2spOworCQkJCQkJCSAgIHNkKTsKIAogCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoc2QtPmJhbGFuY2VfaW50ZXJ2YWwpOwogCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpCkBAIC00MTYzLDcgKzQxNjMsNiBAQAogCQkgKi8KIAkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwogCX0KLQlmcmVlX2NwdW1hc2tfdmFyKHRtcG1hc2spOwogfQogCiAvKgpAQCAtNDMxMywxMSArNDMxMiw2IEBACiAJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgNjAqSFo7CiAJaW50IHVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAwOwogCWludCBuZWVkX3NlcmlhbGl6ZTsKLQljcHVtYXNrX3Zhcl90IHRtcDsKLQotCS8qIEZhaWxzIGFsbG9jPyAgUmViYWxhbmNpbmcgcHJvYmFibHkgbm90IGEgcHJpb3JpdHkgcmlnaHQgbm93LiAqLwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRtcCwgR0ZQX0FUT01JQykpCi0JCXJldHVybjsKIAogCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7CiAJCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCkBAIC00MzQyLDcgKzQzMzYsNyBAQAogCQl9CiAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgewotCQkJaWYgKGxvYWRfYmFsYW5jZShjcHUsIHJxLCBzZCwgaWRsZSwgJmJhbGFuY2UsIHRtcCkpIHsKKwkJCWlmIChsb2FkX2JhbGFuY2UoY3B1LCBycSwgc2QsIGlkbGUsICZiYWxhbmNlKSkgewogCQkJCS8qCiAJCQkJICogV2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc28gZWl0aGVyIHdlJ3JlIG5vCiAJCQkJICogbG9uZ2VyIGlkbGUsIG9yIG9uZSBvZiBvdXIgU01UIHNpYmxpbmdzIGlzCkBAIC00Mzc2LDggKzQzNzAsNiBAQAogCSAqLwogCWlmIChsaWtlbHkodXBkYXRlX25leHRfYmFsYW5jZSkpCiAJCXJxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7Ci0KLQlmcmVlX2NwdW1hc2tfdmFyKHRtcCk7CiB9CiAKIC8qCkBAIC00NzgxLDEwICs0NzczLDcgQEAKICNlbmRpZgogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgJiYgKGRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19QUkVFTVBUX1RSQUNFUikpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcGFyZW50X2lwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3Vuc2lnbmVkIGxvbmcgZ2V0X3BhcmVudF9pcCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKGluX2xvY2tfZnVuY3Rpb25zKGFkZHIpKSB7CiAJCWFkZHIgPSBDQUxMRVJfQUREUjI7CkBAIC00Nzk0LDYgKzQ3ODMsOSBAQAogCXJldHVybiBhZGRyOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgJiYgKGRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpIHx8IFwKKwkJCQlkZWZpbmVkKENPTkZJR19QUkVFTVBUX1RSQUNFUikpCisKIHZvaWQgX19rcHJvYmVzIGFkZF9wcmVlbXB0X2NvdW50KGludCB2YWwpCiB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BSRUVNUFQKQEAgLTc3MjgsNyArNzcyMCw3IEBACiB7CiAJaW50IGdyb3VwOwogCi0JY3B1bWFza19hbmQobWFzaywgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpLCBjcHVfbWFwKTsKKwljcHVtYXNrX2FuZChtYXNrLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpLCBjcHVfbWFwKTsKIAlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAJaWYgKHNnKQogCQkqc2cgPSAmcGVyX2NwdShzY2hlZF9ncm91cF9jb3JlLCBncm91cCkuc2c7CkBAIC03NzU3LDcgKzc3NDksNyBAQAogCWNwdW1hc2tfYW5kKG1hc2ssIGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpLCBjcHVfbWFwKTsKIAlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JY3B1bWFza19hbmQobWFzaywgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpLCBjcHVfbWFwKTsKKwljcHVtYXNrX2FuZChtYXNrLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpLCBjcHVfbWFwKTsKIAlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAjZWxzZQogCWdyb3VwID0gY3B1OwpAQCAtODEwMCw3ICs4MDkyLDcgQEAKIAkJU0RfSU5JVChzZCwgU0lCTElORyk7CiAJCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKIAkJY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLAotCQkJICAgICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIGNwdV9tYXApOworCQkJICAgIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGkpLCBjcHVfbWFwKTsKIAkJc2QtPnBhcmVudCA9IHA7CiAJCXAtPmNoaWxkID0gc2Q7CiAJCWNwdV90b19jcHVfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMsIHRtcG1hc2spOwpAQCAtODExMSw3ICs4MTAzLDcgQEAKIAkvKiBTZXQgdXAgQ1BVIChzaWJsaW5nKSBncm91cHMgKi8KIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewogCQljcHVtYXNrX2FuZCh0aGlzX3NpYmxpbmdfbWFwLAotCQkJICAgICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIGNwdV9tYXApOworCQkJICAgIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGkpLCBjcHVfbWFwKTsKIAkJaWYgKGkgIT0gY3B1bWFza19maXJzdCh0aGlzX3NpYmxpbmdfbWFwKSkKIAkJCWNvbnRpbnVlOwogCkBAIC04Nzg3LDYgKzg3NzksOSBAQAogI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECiAJYWxsb2Nfc2l6ZSAqPSAyOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKKwlhbGxvY19zaXplICs9IG51bV9wb3NzaWJsZV9jcHVzKCkgKiBjcHVtYXNrX3NpemUoKTsKKyNlbmRpZgogCS8qCiAJICogQXMgc2NoZWRfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmUgcGFnZV9hbGxvYyBpcyBzZXR1cCwKIAkgKiB3ZSB1c2UgYWxsb2NfYm9vdG1lbSgpLgpAQCAtODgyNCw2ICs4ODE5LDEyIEBACiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJCXBlcl9jcHUobG9hZF9iYWxhbmNlX3RtcG1hc2ssIGkpID0gKHZvaWQgKilwdHI7CisJCQlwdHIgKz0gY3B1bWFza19zaXplKCk7CisJCX0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyAqLwogCX0KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggMzkwZjMzMi4uODE5ZjE3YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqIGNvbnNpc3RlbnQgYmV0d2VlbiBjcHVzIChuZXZlciBtb3JlIHRoYW4gMiBqaWZmaWVzIGRpZmZlcmVuY2UpLgogICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KQEAgLTE1NCw2ICsxNTUsMTcgQEAKIAkJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiAKIAlzY2QgPSBjcHVfc2RjKGNwdSk7CisKKwkvKgorCSAqIE5vcm1hbGx5IHRoaXMgaXMgbm90IGNhbGxlZCBpbiBOTUkgY29udGV4dCAtIGJ1dCBpZiBpdCBpcywKKwkgKiB0cnlpbmcgdG8gZG8gYW55IGxvY2tpbmcgaGVyZSBpcyB0b3RhbGx5IGxldGhhbC4KKwkgKi8KKwlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQorCQlyZXR1cm4gc2NkLT5jbG9jazsKKworCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCisJCXJldHVybiAwdWxsOworCiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IGVhMjNlYzAuLmQxMDVhODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtMjEsOCArMjEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPHRyYWNlL2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogLyoKQEAgLTUyLDYgKzU0LDExIEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwga3NvZnRpcnFkKTsKIAorY2hhciAqc29mdGlycV90b19uYW1lW05SX1NPRlRJUlFTXSA9IHsKKwkiSEkiLCAiVElNRVIiLCAiTkVUX1RYIiwgIk5FVF9SWCIsICJCTE9DSyIsCisJIlRBU0tMRVQiLCAiU0NIRUQiLCAiSFJUSU1FUiIsCSJSQ1UiCit9OworCiAvKgogICogd2UgY2Fubm90IGxvb3AgaW5kZWZpbml0ZWx5IGhlcmUgdG8gYXZvaWQgdXNlcnNwYWNlIHN0YXJ2YXRpb24sCiAgKiBidXQgd2UgYWxzbyBkb24ndCB3YW50IHRvIGludHJvZHVjZSBhIHdvcnN0IGNhc2UgMS9IWiBsYXRlbmN5CkBAIC03OSwxMyArODYsMjMgQEAKIAlXQVJOX09OX09OQ0UoaW5faXJxKCkpOwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlhZGRfcHJlZW1wdF9jb3VudChTT0ZUSVJRX09GRlNFVCk7CisJLyoKKwkgKiBUaGUgcHJlZW1wdCB0cmFjZXIgaG9va3MgaW50byBhZGRfcHJlZW1wdF9jb3VudCBhbmQgd2lsbCBicmVhaworCSAqIGxvY2tkZXAgYmVjYXVzZSBpdCBjYWxscyBiYWNrIGludG8gbG9ja2RlcCBhZnRlciBTT0ZUSVJRX09GRlNFVAorCSAqIGlzIHNldCBhbmQgYmVmb3JlIGN1cnJlbnQtPnNvZnRpcnFfZW5hYmxlZCBpcyBjbGVhcmVkLgorCSAqIFdlIG11c3QgbWFudWFsbHkgaW5jcmVtZW50IHByZWVtcHRfY291bnQgaGVyZSBhbmQgbWFudWFsbHkKKwkgKiBjYWxsIHRoZSB0cmFjZV9wcmVlbXB0X29mZiBsYXRlci4KKwkgKi8KKwlwcmVlbXB0X2NvdW50KCkgKz0gU09GVElSUV9PRkZTRVQ7CiAJLyoKIAkgKiBXZXJlIHNvZnRpcnFzIHR1cm5lZCBvZmYgYWJvdmU6CiAJICovCiAJaWYgKHNvZnRpcnFfY291bnQoKSA9PSBTT0ZUSVJRX09GRlNFVCkKIAkJdHJhY2Vfc29mdGlycXNfb2ZmKGlwKTsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJaWYgKHByZWVtcHRfY291bnQoKSA9PSBTT0ZUSVJRX09GRlNFVCkKKwkJdHJhY2VfcHJlZW1wdF9vZmYoQ0FMTEVSX0FERFIwLCBnZXRfcGFyZW50X2lwKENBTExFUl9BRERSMSkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19UUkFDRV9JUlFGTEFHUyAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fbG9jYWxfYmhfZGlzYWJsZSh1bnNpZ25lZCBsb25nIGlwKQpAQCAtMTY5LDYgKzE4Niw5IEBACiAgKi8KICNkZWZpbmUgTUFYX1NPRlRJUlFfUkVTVEFSVCAxMAogCitERUZJTkVfVFJBQ0Uoc29mdGlycV9lbnRyeSk7CitERUZJTkVfVFJBQ0Uoc29mdGlycV9leGl0KTsKKwogYXNtbGlua2FnZSB2b2lkIF9fZG9fc29mdGlycSh2b2lkKQogewogCXN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaDsKQEAgLTE5NSwxMiArMjE1LDE0IEBACiAJCWlmIChwZW5kaW5nICYgMSkgewogCQkJaW50IHByZXZfY291bnQgPSBwcmVlbXB0X2NvdW50KCk7CiAKKwkJCXRyYWNlX3NvZnRpcnFfZW50cnkoaCwgc29mdGlycV92ZWMpOwogCQkJaC0+YWN0aW9uKGgpOwotCisJCQl0cmFjZV9zb2Z0aXJxX2V4aXQoaCwgc29mdGlycV92ZWMpOwogCQkJaWYgKHVubGlrZWx5KHByZXZfY291bnQgIT0gcHJlZW1wdF9jb3VudCgpKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiaHVoLCBlbnRlcmVkIHNvZnRpcnEgJXRkICVwIgorCQkJCXByaW50ayhLRVJOX0VSUiAiaHVoLCBlbnRlcmVkIHNvZnRpcnEgJXRkICVzICVwIgogCQkJCSAgICAgICAid2l0aCBwcmVlbXB0X2NvdW50ICUwOHgsIgogCQkJCSAgICAgICAiIGV4aXRlZCB3aXRoICUwOHg/XG4iLCBoIC0gc29mdGlycV92ZWMsCisJCQkJICAgICAgIHNvZnRpcnFfdG9fbmFtZVtoIC0gc29mdGlycV92ZWNdLAogCQkJCSAgICAgICBoLT5hY3Rpb24sIHByZXZfY291bnQsIHByZWVtcHRfY291bnQoKSk7CiAJCQkJcHJlZW1wdF9jb3VudCgpID0gcHJldl9jb3VudDsKIAkJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggNTA0MDg2YS4uMjI0NjE0MSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTksNiArOSw5IEBACiBjb25maWcgTk9QX1RSQUNFUgogCWJvb2wKIAorY29uZmlnIEhBVkVfRlRSQUNFX05NSV9FTlRFUgorCWJvb2wKKwogY29uZmlnIEhBVkVfRlVOQ1RJT05fVFJBQ0VSCiAJYm9vbAogCkBAIC0zMSwxMiArMzQsMjAgQEAKIGNvbmZpZyBIQVZFX0hXX0JSQU5DSF9UUkFDRVIKIAlib29sCiAKK2NvbmZpZyBIQVZFX0ZUUkFDRV9TWVNDQUxMUworCWJvb2wKKwogY29uZmlnIFRSQUNFUl9NQVhfVFJBQ0UKIAlib29sCiAKIGNvbmZpZyBSSU5HX0JVRkZFUgogCWJvb2wKIAorY29uZmlnIEZUUkFDRV9OTUlfRU5URVIKKyAgICAgICBib29sCisgICAgICAgZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRV9OTUlfRU5URVIKKyAgICAgICBkZWZhdWx0IHkKKwogY29uZmlnIFRSQUNJTkcKIAlib29sCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC00NCwxMyArNTUsMjkgQEAKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgVFJBQ0VQT0lOVFMKIAlzZWxlY3QgTk9QX1RSQUNFUgorCXNlbGVjdCBCSU5BUllfUFJJTlRGCisKKyMKKyMgTWluaW11bSByZXF1aXJlbWVudHMgYW4gYXJjaGl0ZWN0dXJlIGhhcyB0byBtZWV0IGZvciB1cyB0bworIyBiZSBhYmxlIHRvIG9mZmVyIGdlbmVyaWMgdHJhY2luZyBmYWNpbGl0aWVzOgorIworY29uZmlnIFRSQUNJTkdfU1VQUE9SVAorCWJvb2wKKwkjIFBQQzMyIGhhcyBubyBpcnFmbGFncyB0cmFjaW5nIHN1cHBvcnQsIGJ1dCBpdCBjYW4gdXNlIG1vc3Qgb2YgdGhlCisJIyB0cmFjZXJzIGFueXdheSwgdGhleSB3ZXJlIHRlc3RlZCB0byBidWlsZCBhbmQgd29yay4gTm90ZSB0aGF0IG5ldworCSMgZXhjZXB0aW9ucyB0byB0aGlzIGxpc3QgYXJlbid0IHdlbGNvbWVkLCBiZXR0ZXIgaW1wbGVtZW50IHRoZQorCSMgaXJxZmxhZ3MgdHJhY2luZyBmb3IgeW91ciBhcmNoaXRlY3R1cmUuCisJZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUIHx8IFBQQzMyCisJZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlQKKwlkZWZhdWx0IHkKKworaWYgVFJBQ0lOR19TVVBQT1JUCiAKIG1lbnUgIlRyYWNlcnMiCiAKIGNvbmZpZyBGVU5DVElPTl9UUkFDRVIKIAlib29sICJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyIgogCWRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9UUkFDRVIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBGUkFNRV9QT0lOVEVSCiAJc2VsZWN0IEtBTExTWU1TCiAJc2VsZWN0IFRSQUNJTkcKQEAgLTgyLDcgKzEwOSw2IEBACiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDRV9JUlFGTEFHUwogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTEwNSw3ICsxMzEsNiBAQAogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gR0VORVJJQ19USU1FCiAJZGVwZW5kcyBvbiBQUkVFTVBUCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCiAJaGVscApAQCAtMTI2LDEzICsxNTEsMTMgQEAKIAlib29sICJTeXNwcm9mIFRyYWNlciIKIAlkZXBlbmRzIG9uIFg4NgogCXNlbGVjdCBUUkFDSU5HCisJc2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUgogCWhlbHAKIAkgIFRoaXMgdHJhY2VyIHByb3ZpZGVzIHRoZSB0cmFjZSBuZWVkZWQgYnkgdGhlICdTeXNwcm9mJyB1c2Vyc3BhY2UKIAkgIHRvb2wuCiAKIGNvbmZpZyBTQ0hFRF9UUkFDRVIKIAlib29sICJTY2hlZHVsaW5nIExhdGVuY3kgVHJhY2VyIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTE0MiwxNiArMTY3LDMwIEBACiAKIGNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAlib29sICJUcmFjZSBwcm9jZXNzIGNvbnRleHQgc3dpdGNoZXMiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBNQVJLRVJTCiAJaGVscAogCSAgVGhpcyB0cmFjZXIgZ2V0cyBjYWxsZWQgZnJvbSB0aGUgY29udGV4dCBzd2l0Y2ggYW5kIHJlY29yZHMKIAkgIGFsbCBzd2l0Y2hpbmcgb2YgdGFza3MuCiAKK2NvbmZpZyBFVkVOVF9UUkFDRVIKKwlib29sICJUcmFjZSB2YXJpb3VzIGV2ZW50cyBpbiB0aGUga2VybmVsIgorCXNlbGVjdCBUUkFDSU5HCisJaGVscAorCSAgVGhpcyB0cmFjZXIgaG9va3MgdG8gdmFyaW91cyB0cmFjZSBwb2ludHMgaW4gdGhlIGtlcm5lbAorCSAgYWxsb3dpbmcgdGhlIHVzZXIgdG8gcGljayBhbmQgY2hvb3NlIHdoaWNoIHRyYWNlIHBvaW50IHRoZXkKKwkgIHdhbnQgdG8gdHJhY2UuCisKK2NvbmZpZyBGVFJBQ0VfU1lTQ0FMTFMKKwlib29sICJUcmFjZSBzeXNjYWxscyIKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFX1NZU0NBTExTCisJc2VsZWN0IFRSQUNJTkcKKwlzZWxlY3QgS0FMTFNZTVMKKwloZWxwCisJICBCYXNpYyB0cmFjZXIgdG8gY2F0Y2ggdGhlIHN5c2NhbGwgZW50cnkgYW5kIGV4aXQgZXZlbnRzLgorCiBjb25maWcgQk9PVF9UUkFDRVIKIAlib29sICJUcmFjZSBib290IGluaXRjYWxscyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUgogCWhlbHAKQEAgLTE2NCwxMyArMjAzLDExIEBACiAJICByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVsYXlzIGR1cmluZyBpbml0Y2FsbHMgLSBidXQgdGhlIHJhdwogCSAgL2RlYnVnL3RyYWNpbmcvdHJhY2UgdGV4dCBvdXRwdXQgaXMgcmVhZGFibGUgdG9vLgogCi0JICAoIE5vdGUgdGhhdCB0cmFjaW5nIHNlbGYgdGVzdHMgY2FuJ3QgYmUgZW5hYmxlZCBpZiB0aGlzIHRyYWNlciBpcwotCSAgICBzZWxlY3RlZCwgYmVjYXVzZSB0aGUgc2VsZi10ZXN0cyBhcmUgYW4gaW5pdGNhbGwgYXMgd2VsbCBhbmQgdGhhdAotCSAgICB3b3VsZCBpbnZhbGlkYXRlIHRoZSBib290IHRyYWNlLiApCisJICBZb3UgbXVzdCBwYXNzIGluIGZ0cmFjZT1pbml0Y2FsbCB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZQorCSAgdG8gZW5hYmxlIHRoaXMgb24gYm9vdHVwLgogCiBjb25maWcgVFJBQ0VfQlJBTkNIX1BST0ZJTElORwogCWJvb2wgIlRyYWNlIGxpa2VseS91bmxpa2VseSBwcm9maWxlciIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJaGVscAogCSAgVGhpcyB0cmFjZXIgcHJvZmlsZXMgYWxsIHRoZSB0aGUgbGlrZWx5IGFuZCB1bmxpa2VseSBtYWNyb3MKQEAgLTIyMyw3ICsyNjAsNiBAQAogCiBjb25maWcgUE9XRVJfVFJBQ0VSCiAJYm9vbCAiVHJhY2UgcG93ZXIgY29uc3VtcHRpb24gYmVoYXZpb3IiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlkZXBlbmRzIG9uIFg4NgogCXNlbGVjdCBUUkFDSU5HCiAJaGVscApAQCAtMjM1LDcgKzI3MSw2IEBACiBjb25maWcgU1RBQ0tfVFJBQ0VSCiAJYm9vbCAiVHJhY2UgbWF4IHN0YWNrIgogCWRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9UUkFDRVIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBGVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgU1RBQ0tUUkFDRQogCXNlbGVjdCBLQUxMU1lNUwpAQCAtMjY1LDExICszMDAsNjYgQEAKIAkgIFRoaXMgdHJhY2VyIHJlY29yZHMgYWxsIGJyYW5jaGVzIG9uIHRoZSBzeXN0ZW0gaW4gYSBjaXJjdWxhcgogCSAgYnVmZmVyIGdpdmluZyBhY2Nlc3MgdG8gdGhlIGxhc3QgTiBicmFuY2hlcyBmb3IgZWFjaCBjcHUuCiAKK2NvbmZpZyBLTUVNVFJBQ0UKKwlib29sICJUcmFjZSBTTEFCIGFsbG9jYXRpb25zIgorCXNlbGVjdCBUUkFDSU5HCisJaGVscAorCSAga21lbXRyYWNlIHByb3ZpZGVzIHRyYWNpbmcgZm9yIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucywgc3VjaCBhcworCSAga21hbGxvYywga2ZyZWUsIGttZW1fY2FjaGVfYWxsb2MsIGttZW1fY2FjaGVfZnJlZSBldGMuLiBDb2xsZWN0ZWQKKwkgIGRhdGEgaXMgdGhlbiBmZWQgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBpbiBvcmRlciB0byBhbmFseXNlCisJICBhbGxvY2F0aW9uIGhvdHNwb3RzLCBpbnRlcm5hbCBmcmFnbWVudGF0aW9uIGFuZCBzbyBvbiwgbWFraW5nIGl0CisJICBwb3NzaWJsZSB0byBzZWUgaG93IHdlbGwgYW4gYWxsb2NhdG9yIHBlcmZvcm1zLCBhcyB3ZWxsIGFzIGRlYnVnCisJICBhbmQgcHJvZmlsZSBrZXJuZWwgY29kZS4KKworCSAgVGhpcyByZXF1aXJlcyBhbiB1c2Vyc3BhY2UgYXBwbGljYXRpb24gdG8gdXNlLiBTZWUKKwkgIERvY3VtZW50YXRpb24vdm0va21lbXRyYWNlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCSAgU2F5aW5nIFkgd2lsbCBtYWtlIHRoZSBrZXJuZWwgc29tZXdoYXQgbGFyZ2VyIGFuZCBzbG93ZXIuIEhvd2V2ZXIsCisJICBpZiB5b3UgZGlzYWJsZSBrbWVtdHJhY2UgYXQgcnVuLXRpbWUgb3IgYm9vdC10aW1lLCB0aGUgcGVyZm9ybWFuY2UKKwkgIGltcGFjdCBpcyBtaW5pbWFsIChkZXBlbmRpbmcgb24gdGhlIGFyY2ggdGhlIGtlcm5lbCBpcyBidWlsdCBmb3IpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgV09SS1FVRVVFX1RSQUNFUgorCWJvb2wgIlRyYWNlIHdvcmtxdWV1ZXMiCisJc2VsZWN0IFRSQUNJTkcKKwloZWxwCisJICBUaGUgd29ya3F1ZXVlIHRyYWNlciBwcm92aWRlcyBzb21lIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9ucworICAgICAgICAgIGFib3V0IGVhY2ggY3B1IHdvcmtxdWV1ZSB0aHJlYWQgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHRoZQorICAgICAgICAgIHdvcmtzIGluc2VydGVkIGFuZCBleGVjdXRlZCBzaW5jZSB0aGVpciBjcmVhdGlvbi4gSXQgY2FuIGhlbHAKKyAgICAgICAgICB0byBldmFsdWF0ZSB0aGUgYW1vdW50IG9mIHdvcmsgZWFjaCBvZiB0aGVtIGhhdmUgdG8gcGVyZm9ybS4KKyAgICAgICAgICBGb3IgZXhhbXBsZSBpdCBjYW4gaGVscCBhIGRldmVsb3BlciB0byBkZWNpZGUgd2hldGhlciBoZSBzaG91bGQKKyAgICAgICAgICBjaG9vc2UgYSBwZXIgY3B1IHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIGEgc2luZ2xldGhyZWFkZWQgb25lLgorCitjb25maWcgQkxLX0RFVl9JT19UUkFDRQorCWJvb2wgIlN1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgaW8gYWN0aW9ucyIKKwlkZXBlbmRzIG9uIFNZU0ZTCisJZGVwZW5kcyBvbiBCTE9DSworCXNlbGVjdCBSRUxBWQorCXNlbGVjdCBERUJVR19GUworCXNlbGVjdCBUUkFDRVBPSU5UUworCXNlbGVjdCBUUkFDSU5HCisJc2VsZWN0IFNUQUNLVFJBQ0UKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnMKKwkgIG9uIGEgZ2l2ZW4gcXVldWUuIFRyYWNpbmcgYWxsb3dzIHlvdSB0byBzZWUgYW55IHRyYWZmaWMgaGFwcGVuaW5nCisJICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlCisJICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOgorCisJICBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAorCisJICBUcmFjaW5nIGFsc28gaXMgcG9zc2libGUgdXNpbmcgdGhlIGZ0cmFjZSBpbnRlcmZhY2UsIGUuZy46CisKKwkgICAgZWNobyAxID4gL3N5cy9ibG9jay9zZGEvc2RhMS90cmFjZS9lbmFibGUKKwkgICAgZWNobyBibGsgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCisJICAgIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlX3BpcGUKKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIERZTkFNSUNfRlRSQUNFCiAJYm9vbCAiZW5hYmxlL2Rpc2FibGUgZnRyYWNlIHRyYWNlcG9pbnRzIGR5bmFtaWNhbGx5IgogCWRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSCiAJZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAgICAgICAgICBUaGlzIG9wdGlvbiB3aWxsIG1vZGlmeSBhbGwgdGhlIGNhbGxzIHRvIGZ0cmFjZSBkeW5hbWljYWxseQpAQCAtMjk1LDcgKzM4NSw3IEBACiAKIGNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUCiAJYm9vbCAiUGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2UiCi0JZGVwZW5kcyBvbiBUUkFDSU5HICYmIERFQlVHX0tFUk5FTCAmJiAhQk9PVF9UUkFDRVIKKwlkZXBlbmRzIG9uIFRSQUNJTkcKIAlzZWxlY3QgRlRSQUNFX1NFTEZURVNUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gcGVyZm9ybXMgYSBzZXJpZXMgb2Ygc3RhcnR1cCB0ZXN0cyBvbiBmdHJhY2UuIE9uIGJvb3R1cApAQCAtMzA1LDcgKzM5NSw3IEBACiAKIGNvbmZpZyBNTUlPVFJBQ0UKIAlib29sICJNZW1vcnkgbWFwcGVkIElPIHRyYWNpbmciCi0JZGVwZW5kcyBvbiBIQVZFX01NSU9UUkFDRV9TVVBQT1JUICYmIERFQlVHX0tFUk5FTCAmJiBQQ0kKKwlkZXBlbmRzIG9uIEhBVkVfTU1JT1RSQUNFX1NVUFBPUlQgJiYgUENJCiAJc2VsZWN0IFRSQUNJTkcKIAloZWxwCiAJICBNbWlvdHJhY2UgdHJhY2VzIE1lbW9yeSBNYXBwZWQgSS9PIGFjY2VzcyBhbmQgaXMgbWVhbnQgZm9yCkBAIC0zMjcsMyArNDE3LDYgQEAKIAkgIFNheSBOLCB1bmxlc3MgeW91IGFic29sdXRlbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKIGVuZG1lbnUKKworZW5kaWYgIyBUUkFDSU5HX1NVUFBPUlQKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IDM0OWQ1YTkuLjI2MzBmNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDEwIEBACiBvYmotJChDT05GSUdfUklOR19CVUZGRVIpICs9IHJpbmdfYnVmZmVyLm8KIAogb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlLm8KK29iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZV9jbG9jay5vCitvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2Vfb3V0cHV0Lm8KK29iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZV9zdGF0Lm8KK29iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZV9wcmludGsubwogb2JqLSQoQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUikgKz0gdHJhY2Vfc2NoZWRfc3dpdGNoLm8KIG9iai0kKENPTkZJR19TWVNQUk9GX1RSQUNFUikgKz0gdHJhY2Vfc3lzcHJvZi5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnMubwpAQCAtMzMsNSArMzcsMTQgQEAKIG9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSArPSB0cmFjZV9icmFuY2gubwogb2JqLSQoQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIpICs9IHRyYWNlX2h3X2JyYW5jaGVzLm8KIG9iai0kKENPTkZJR19QT1dFUl9UUkFDRVIpICs9IHRyYWNlX3Bvd2VyLm8KK29iai0kKENPTkZJR19LTUVNVFJBQ0UpICs9IGttZW10cmFjZS5vCitvYmotJChDT05GSUdfV09SS1FVRVVFX1RSQUNFUikgKz0gdHJhY2Vfd29ya3F1ZXVlLm8KK29iai0kKENPTkZJR19CTEtfREVWX0lPX1RSQUNFKQkrPSBibGt0cmFjZS5vCitvYmotJChDT05GSUdfRVZFTlRfVFJBQ0VSKSArPSB0cmFjZV9ldmVudHMubworb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNFUikgKz0gZXZlbnRzLm8KK29iai0kKENPTkZJR19FVkVOVF9UUkFDRVIpICs9IHRyYWNlX2V4cG9ydC5vCitvYmotJChDT05GSUdfRlRSQUNFX1NZU0NBTExTKSArPSB0cmFjZV9zeXNjYWxscy5vCitvYmotJChDT05GSUdfRVZFTlRfUFJPRklMRSkgKz0gdHJhY2VfZXZlbnRfcHJvZmlsZS5vCitvYmotJChDT05GSUdfRVZFTlRfVFJBQ0VSKSArPSB0cmFjZV9ldmVudHNfZmlsdGVyLm8KIAogbGliZnRyYWNlLXkgOj0gZnRyYWNlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3YzViMwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC0wLDAgKzEsMTU0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPHRyYWNlL2Jsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGJsa3RyYWNlX3NlcSBfX3JlYWRfbW9zdGx5ID0gMTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqYmxrX3RyOworc3RhdGljIGJvb2wgYmxrX3RyYWNlcl9lbmFibGVkIF9fcmVhZF9tb3N0bHk7CisKKy8qIFNlbGVjdCBhbiBhbHRlcm5hdGl2ZSwgbWluaW1hbGlzdGljIG91dHB1dCB0aGFuIHRoZSBvcmlnaW5hbCBvbmUgKi8KKyNkZWZpbmUgVFJBQ0VfQkxLX09QVF9DTEFTU0lDCTB4MQorCitzdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgYmxrX3RyYWNlcl9vcHRzW10gPSB7CisJLyogRGVmYXVsdCBkaXNhYmxlIHRoZSBtaW5pbWFsaXN0aWMgb3V0cHV0ICovCisJeyBUUkFDRVJfT1BUKGJsa19jbGFzc2ljLCBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0geworCS52YWwgID0gMCwKKwkub3B0cyA9IGJsa190cmFjZXJfb3B0cywKK307CisKKy8qIEdsb2JhbCByZWZlcmVuY2UgY291bnQgb2YgcHJvYmVzICovCitzdGF0aWMgYXRvbWljX3QgYmxrX3Byb2Jlc19yZWYgPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOworc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7CisKKy8qCisgKiBTZW5kIG91dCBhIG5vdGlmeSBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZCB0cmFjZV9ub3RlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBwaWRfdCBwaWQsIGludCBhY3Rpb24sCisJCSAgICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCA9IE5VTEw7CisJaW50IHBjID0gMDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWJvb2wgYmxrX3RyYWNlciA9IGJsa190cmFjZXJfZW5hYmxlZDsKKworCWlmIChibGtfdHJhY2VyKSB7CisJCXBjID0gcHJlZW1wdF9jb3VudCgpOworCQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYmxrX3RyLCBUUkFDRV9CTEssCisJCQkJCQkgIHNpemVvZigqdCkgKyBsZW4sCisJCQkJCQkgIDAsIHBjKTsKKwkJaWYgKCFldmVudCkKKwkJCXJldHVybjsKKwkJdCA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCQlnb3RvIHJlY29yZF9pdDsKKwl9CisKKwlpZiAoIWJ0LT5yY2hhbikKKwkJcmV0dXJuOworCisJdCA9IHJlbGF5X3Jlc2VydmUoYnQtPnJjaGFuLCBzaXplb2YoKnQpICsgbGVuKTsKKwlpZiAodCkgeworCQl0LT5tYWdpYyA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OOworCQl0LT50aW1lID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOworcmVjb3JkX2l0OgorCQl0LT5kZXZpY2UgPSBidC0+ZGV2OworCQl0LT5hY3Rpb24gPSBhY3Rpb247CisJCXQtPnBpZCA9IHBpZDsKKwkJdC0+Y3B1ID0gY3B1OworCQl0LT5wZHVfbGVuID0gbGVuOworCQltZW1jcHkoKHZvaWQgKikgdCArIHNpemVvZigqdCksIGRhdGEsIGxlbik7CisKKwkJaWYgKGJsa190cmFjZXIpCisJCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGV2ZW50LCAwLCBwYyk7CisJfQorfQorCisvKgorICogU2VuZCBvdXQgYSBub3RpZnkgZm9yIHRoaXMgcHJvY2VzcywgaWYgd2UgaGF2ZW4ndCBkb25lIHNvIHNpbmNlIGEgdHJhY2UKKyAqIHN0YXJ0ZWQKKyAqLworc3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90c2soc3RydWN0IGJsa190cmFjZSAqYnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXRzay0+YnRyYWNlX3NlcSA9IGJsa3RyYWNlX3NlcTsKKwl0cmFjZV9ub3RlKGJ0LCB0c2stPnBpZCwgQkxLX1ROX1BST0NFU1MsIHRzay0+Y29tbSwgc2l6ZW9mKHRzay0+Y29tbSkpOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9ub3RlX3RpbWUoc3RydWN0IGJsa190cmFjZSAqYnQpCit7CisJc3RydWN0IHRpbWVzcGVjIG5vdzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB3b3Jkc1syXTsKKworCWdldG5zdGltZW9mZGF5KCZub3cpOworCXdvcmRzWzBdID0gbm93LnR2X3NlYzsKKwl3b3Jkc1sxXSA9IG5vdy50dl9uc2VjOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRyYWNlX25vdGUoYnQsIDAsIEJMS19UTl9USU1FU1RBTVAsIHdvcmRzLCBzaXplb2Yod29yZHMpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgX190cmFjZV9ub3RlX21lc3NhZ2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCBuOworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmJ1ZjsKKworCWlmICh1bmxpa2VseShidC0+dHJhY2Vfc3RhdGUgIT0gQmxrdHJhY2VfcnVubmluZyAmJgorCQkgICAgICFibGtfdHJhY2VyX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJYnVmID0gcGVyX2NwdV9wdHIoYnQtPm1zZ19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IHZzY25wcmludGYoYnVmLCBCTEtfVE5fTUFYX01TRywgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwl0cmFjZV9ub3RlKGJ0LCAwLCBCTEtfVE5fTUVTU0FHRSwgYnVmLCBuKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3RyYWNlX25vdGVfbWVzc2FnZSk7CisKK3N0YXRpYyBpbnQgYWN0X2xvZ19jaGVjayhzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdTMyIHdoYXQsIHNlY3Rvcl90IHNlY3RvciwKKwkJCSBwaWRfdCBwaWQpCit7CisJaWYgKCgoYnQtPmFjdF9tYXNrIDw8IEJMS19UQ19TSElGVCkgJiB3aGF0KSA9PSAwKQorCQlyZXR1cm4gMTsKKwlpZiAoc2VjdG9yIDwgYnQtPnN0YXJ0X2xiYSB8fCBzZWN0b3IgPiBidC0+ZW5kX2xiYSkKKwkJcmV0dXJuIDE7CisJaWYgKGJ0LT5waWQgJiYgcGlkICE9IGJ0LT5waWQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEYXRhIGRpcmVjdGlvbiBiaXQgbG9va3VwCisgKi8KK3N0YXRpYyBjb25zdCB1MzIgZGRpcl9hY3RbMl0gPSB7IEJMS19UQ19BQ1QoQkxLX1RDX1JFQUQpLAorCQkJCSBCTEtfVENfQUNUKEJMS19UQ19XUklURSkgfTsKKworLyogVGhlIGlsb2cyKCkgY2FsbHMgZmFsbCBvdXQgYmVjYXVzZSB0aGV5J3JlIGNvbnN0YW50ICovCisjZGVmaW5lIE1BU0tfVENfQklUKHJ3LCBfX25hbWUpICgocncgJiAoMSA8PCBCSU9fUldfICMjIF9fbmFtZSkpIDw8IFwKKwkgIChpbG9nMihCTEtfVENfICMjIF9fbmFtZSkgKyBCTEtfVENfU0hJRlQgLSBCSU9fUldfICMjIF9fbmFtZSkpCisKKy8qCisgKiBUaGUgd29ya2VyIGZvciB0aGUgdmFyaW91cyBibGtfYWRkX3RyYWNlKigpIHR5cGVzLiBGaWxscyBvdXQgYQorICogYmxrX2lvX3RyYWNlIHN0cnVjdHVyZSBhbmQgcGxhY2VzIGl0IGluIGEgcGVyLWNwdSBzdWJidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsCisJCSAgICAgaW50IHJ3LCB1MzIgd2hhdCwgaW50IGVycm9yLCBpbnQgcGR1X2xlbiwgdm9pZCAqcGR1X2RhdGEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQgPSBOVUxMOworCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyAqc2VxdWVuY2U7CisJcGlkX3QgcGlkOworCWludCBjcHUsIHBjID0gMDsKKwlib29sIGJsa190cmFjZXIgPSBibGtfdHJhY2VyX2VuYWJsZWQ7CisKKwlpZiAodW5saWtlbHkoYnQtPnRyYWNlX3N0YXRlICE9IEJsa3RyYWNlX3J1bm5pbmcgJiYgIWJsa190cmFjZXIpKQorCQlyZXR1cm47CisKKwl3aGF0IHw9IGRkaXJfYWN0W3J3ICYgV1JJVEVdOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEJBUlJJRVIpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIFNZTkNJTyk7CisJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgQUhFQUQpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIE1FVEEpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIERJU0NBUkQpOworCisJcGlkID0gdHNrLT5waWQ7CisJaWYgKHVubGlrZWx5KGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSkpCisJCXJldHVybjsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGJsa190cmFjZXIpIHsKKwkJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKKworCQlwYyA9IHByZWVtcHRfY291bnQoKTsKKwkJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJsa190ciwgVFJBQ0VfQkxLLAorCQkJCQkJICBzaXplb2YoKnQpICsgcGR1X2xlbiwKKwkJCQkJCSAgMCwgcGMpOworCQlpZiAoIWV2ZW50KQorCQkJcmV0dXJuOworCQl0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJCWdvdG8gcmVjb3JkX2l0OworCX0KKworCS8qCisJICogQSB3b3JkIGFib3V0IHRoZSBsb2NraW5nIGhlcmUgLSB3ZSBkaXNhYmxlIGludGVycnVwdHMgdG8gcmVzZXJ2ZQorCSAqIHNvbWUgc3BhY2UgaW4gdGhlIHJlbGF5IHBlci1jcHUgYnVmZmVyLCB0byBwcmV2ZW50IGFuIGlycQorCSAqIGZyb20gY29taW5nIGluIGFuZCBzdGVwcGluZyBvbiBvdXIgdG9lcy4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAodW5saWtlbHkodHNrLT5idHJhY2Vfc2VxICE9IGJsa3RyYWNlX3NlcSkpCisJCXRyYWNlX25vdGVfdHNrKGJ0LCB0c2spOworCisJdCA9IHJlbGF5X3Jlc2VydmUoYnQtPnJjaGFuLCBzaXplb2YoKnQpICsgcGR1X2xlbik7CisJaWYgKHQpIHsKKwkJc2VxdWVuY2UgPSBwZXJfY3B1X3B0cihidC0+c2VxdWVuY2UsIGNwdSk7CisKKwkJdC0+bWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjsKKwkJdC0+c2VxdWVuY2UgPSArKygqc2VxdWVuY2UpOworCQl0LT50aW1lID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOworcmVjb3JkX2l0OgorCQkvKgorCQkgKiBUaGVzZSB0d28gYXJlIG5vdCBuZWVkZWQgaW4gZnRyYWNlIGFzIHRoZXkgYXJlIGluIHRoZQorCQkgKiBnZW5lcmljIHRyYWNlX2VudHJ5LCBmaWxsZWQgYnkgdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSwKKwkJICogYnV0IGZvciB0aGUgdHJhY2VfZXZlbnQtPmJpbigpIHN5bnRoZXNpemVyIGJlbmVmaXQgd2UgZG8gaXQKKwkJICogaGVyZSB0b28uCisJCSAqLworCQl0LT5jcHUgPSBjcHU7CisJCXQtPnBpZCA9IHBpZDsKKworCQl0LT5zZWN0b3IgPSBzZWN0b3I7CisJCXQtPmJ5dGVzID0gYnl0ZXM7CisJCXQtPmFjdGlvbiA9IHdoYXQ7CisJCXQtPmRldmljZSA9IGJ0LT5kZXY7CisJCXQtPmVycm9yID0gZXJyb3I7CisJCXQtPnBkdV9sZW4gPSBwZHVfbGVuOworCisJCWlmIChwZHVfbGVuKQorCQkJbWVtY3B5KCh2b2lkICopIHQgKyBzaXplb2YoKnQpLCBwZHVfZGF0YSwgcGR1X2xlbik7CisKKwkJaWYgKGJsa190cmFjZXIpIHsKKwkJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgZXZlbnQsIDAsIHBjKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa190cmVlX3Jvb3Q7CitzdGF0aWMgREVGSU5FX01VVEVYKGJsa190cmVlX211dGV4KTsKKworc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IGJsa190cmFjZSAqYnQpCit7CisJZGVidWdmc19yZW1vdmUoYnQtPm1zZ19maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShidC0+ZHJvcHBlZF9maWxlKTsKKwlyZWxheV9jbG9zZShidC0+cmNoYW4pOworCWZyZWVfcGVyY3B1KGJ0LT5zZXF1ZW5jZSk7CisJZnJlZV9wZXJjcHUoYnQtPm1zZ19kYXRhKTsKKwlrZnJlZShidCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa190cmFjZV9jbGVhbnVwKHN0cnVjdCBibGtfdHJhY2UgKmJ0KQoreworCWJsa190cmFjZV9mcmVlKGJ0KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYmxrX3Byb2Jlc19yZWYpKQorCQlibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cygpOworfQorCitpbnQgYmxrX3RyYWNlX3JlbW92ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKKworCWJ0ID0geGNoZygmcS0+YmxrX3RyYWNlLCBOVUxMKTsKKwlpZiAoIWJ0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidC0+dHJhY2Vfc3RhdGUgIT0gQmxrdHJhY2VfcnVubmluZykKKwkJYmxrX3RyYWNlX2NsZWFudXAoYnQpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2VfcmVtb3ZlKTsKKworc3RhdGljIGludCBibGtfZHJvcHBlZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgYmxrX2Ryb3BwZWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIGF0b21pY19yZWFkKCZidC0+ZHJvcHBlZCkpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1Ziwgc3RybGVuKGJ1ZikpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibGtfZHJvcHBlZF9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCWJsa19kcm9wcGVkX29wZW4sCisJLnJlYWQgPQkJYmxrX2Ryb3BwZWRfcmVhZCwKK307CisKK3N0YXRpYyBpbnQgYmxrX21zZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgYmxrX21zZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICptc2c7CisJc3RydWN0IGJsa190cmFjZSAqYnQ7CisKKwlpZiAoY291bnQgPiBCTEtfVE5fTUFYX01TRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltc2cgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAobXNnID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKG1zZywgYnVmZmVyLCBjb3VudCkpIHsKKwkJa2ZyZWUobXNnKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJYnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJX190cmFjZV9ub3RlX21lc3NhZ2UoYnQsICIlcyIsIG1zZyk7CisJa2ZyZWUobXNnKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmxrX21zZ19mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCWJsa19tc2dfb3BlbiwKKwkud3JpdGUgPQlibGtfbXNnX3dyaXRlLAorfTsKKworLyoKKyAqIEtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgd2UgZW5jb3VudGVyZWQgYSBmdWxsIHN1YmJ1ZmZlciwgdG8gYWlkCisgKiB0aGUgdXNlciBzcGFjZSBhcHAgaW4gdGVsbGluZyBob3cgbWFueSBsb3N0IGV2ZW50cyB0aGVyZSB3ZXJlLgorICovCitzdGF0aWMgaW50IGJsa19zdWJidWZfc3RhcnRfY2FsbGJhY2soc3RydWN0IHJjaGFuX2J1ZiAqYnVmLCB2b2lkICpzdWJidWYsCisJCQkJICAgICB2b2lkICpwcmV2X3N1YmJ1Ziwgc2l6ZV90IHByZXZfcGFkZGluZykKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKKworCWlmICghcmVsYXlfYnVmX2Z1bGwoYnVmKSkKKwkJcmV0dXJuIDE7CisKKwlidCA9IGJ1Zi0+Y2hhbi0+cHJpdmF0ZV9kYXRhOworCWF0b21pY19pbmMoJmJ0LT5kcm9wcGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibGtfcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCWRlYnVnZnNfcmVtb3ZlKGRlbnRyeSk7CisKKwkvKgorCSogdGhpcyB3aWxsIGZhaWwgZm9yIGFsbCBidXQgdGhlIGxhc3QgZmlsZSwgYnV0IHRoYXQgaXMgb2suIHdoYXQgd2UKKwkqIGNhcmUgYWJvdXQgaXMgdGhlIHRvcCBsZXZlbCBidXRzLT5uYW1lIGRpcmVjdG9yeSBnb2luZyBhd2F5LCB3aGVuCisJKiB0aGUgbGFzdCB0cmFjZSBmaWxlIGlzIGdvbmUuIFRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBybWRpcigpIHRoYXQKKwkqIG1hbnVhbGx5IG9uIHRyYWNlIHN0b3AsIHNvIGl0IG5pY2VseSBzb2x2ZXMgdGhlIGlzc3VlIHdpdGgKKwkqIGZvcmNlIGtpbGxpbmcgb2YgcnVubmluZyB0cmFjZXMuCisJKi8KKworCWRlYnVnZnNfcmVtb3ZlKHBhcmVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpibGtfY3JlYXRlX2J1Zl9maWxlX2NhbGxiYWNrKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCQkJICAgaW50IG1vZGUsCisJCQkJCQkgICBzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkJCQkgICBpbnQgKmlzX2dsb2JhbCkKK3sKKwlyZXR1cm4gZGVidWdmc19jcmVhdGVfZmlsZShmaWxlbmFtZSwgbW9kZSwgcGFyZW50LCBidWYsCisJCQkJCSZyZWxheV9maWxlX29wZXJhdGlvbnMpOworfQorCitzdGF0aWMgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyBibGtfcmVsYXlfY2FsbGJhY2tzID0geworCS5zdWJidWZfc3RhcnQJCT0gYmxrX3N1YmJ1Zl9zdGFydF9jYWxsYmFjaywKKwkuY3JlYXRlX2J1Zl9maWxlCT0gYmxrX2NyZWF0ZV9idWZfZmlsZV9jYWxsYmFjaywKKwkucmVtb3ZlX2J1Zl9maWxlCT0gYmxrX3JlbW92ZV9idWZfZmlsZV9jYWxsYmFjaywKK307CisKKy8qCisgKiBTZXR1cCBldmVyeXRoaW5nIHJlcXVpcmVkIHRvIHN0YXJ0IHRyYWNpbmcKKyAqLworaW50IGRvX2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAorCQkJc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwICpidXRzKQoreworCXN0cnVjdCBibGtfdHJhY2UgKm9sZF9idCwgKmJ0ID0gTlVMTDsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBOVUxMOworCWludCByZXQsIGk7CisKKwlpZiAoIWJ1dHMtPmJ1Zl9zaXplIHx8ICFidXRzLT5idWZfbnIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybmNweShidXRzLT5uYW1lLCBuYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpOworCWJ1dHMtPm5hbWVbQkxLVFJBQ0VfQkRFVl9TSVpFIC0gMV0gPSAnXDAnOworCisJLyoKKwkgKiBzb21lIGRldmljZSBuYW1lcyBoYXZlIGxhcmdlciBwYXRocyAtIGNvbnZlcnQgdGhlIHNsYXNoZXMKKwkgKiB0byB1bmRlcnNjb3JlcyBmb3IgdGhpcyB0byB3b3JrIGFzIGV4cGVjdGVkCisJICovCisJZm9yIChpID0gMDsgaSA8IHN0cmxlbihidXRzLT5uYW1lKTsgaSsrKQorCQlpZiAoYnV0cy0+bmFtZVtpXSA9PSAnLycpCisJCQlidXRzLT5uYW1lW2ldID0gJ18nOworCisJYnQgPSBremFsbG9jKHNpemVvZigqYnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IC1FTk9NRU07CisJYnQtPnNlcXVlbmNlID0gYWxsb2NfcGVyY3B1KHVuc2lnbmVkIGxvbmcpOworCWlmICghYnQtPnNlcXVlbmNlKQorCQlnb3RvIGVycjsKKworCWJ0LT5tc2dfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KEJMS19UTl9NQVhfTVNHLCBfX2FsaWdub2ZfXyhjaGFyKSk7CisJaWYgKCFidC0+bXNnX2RhdGEpCisJCWdvdG8gZXJyOworCisJcmV0ID0gLUVOT0VOVDsKKworCW11dGV4X2xvY2soJmJsa190cmVlX211dGV4KTsKKwlpZiAoIWJsa190cmVlX3Jvb3QpIHsKKwkJYmxrX3RyZWVfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYmxvY2siLCBOVUxMKTsKKwkJaWYgKCFibGtfdHJlZV9yb290KSB7CisJCQltdXRleF91bmxvY2soJmJsa190cmVlX211dGV4KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCW11dGV4X3VubG9jaygmYmxrX3RyZWVfbXV0ZXgpOworCisJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGJ1dHMtPm5hbWUsIGJsa190cmVlX3Jvb3QpOworCisJaWYgKCFkaXIpCisJCWdvdG8gZXJyOworCisJYnQtPmRpciA9IGRpcjsKKwlidC0+ZGV2ID0gZGV2OworCWF0b21pY19zZXQoJmJ0LT5kcm9wcGVkLCAwKTsKKworCXJldCA9IC1FSU87CisJYnQtPmRyb3BwZWRfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRyb3BwZWQiLCAwNDQ0LCBkaXIsIGJ0LAorCQkJCQkgICAgICAgJmJsa19kcm9wcGVkX2ZvcHMpOworCWlmICghYnQtPmRyb3BwZWRfZmlsZSkKKwkJZ290byBlcnI7CisKKwlidC0+bXNnX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtc2ciLCAwMjIyLCBkaXIsIGJ0LCAmYmxrX21zZ19mb3BzKTsKKwlpZiAoIWJ0LT5tc2dfZmlsZSkKKwkJZ290byBlcnI7CisKKwlidC0+cmNoYW4gPSByZWxheV9vcGVuKCJ0cmFjZSIsIGRpciwgYnV0cy0+YnVmX3NpemUsCisJCQkJYnV0cy0+YnVmX25yLCAmYmxrX3JlbGF5X2NhbGxiYWNrcywgYnQpOworCWlmICghYnQtPnJjaGFuKQorCQlnb3RvIGVycjsKKworCWJ0LT5hY3RfbWFzayA9IGJ1dHMtPmFjdF9tYXNrOworCWlmICghYnQtPmFjdF9tYXNrKQorCQlidC0+YWN0X21hc2sgPSAodTE2KSAtMTsKKworCWJ0LT5zdGFydF9sYmEgPSBidXRzLT5zdGFydF9sYmE7CisJYnQtPmVuZF9sYmEgPSBidXRzLT5lbmRfbGJhOworCWlmICghYnQtPmVuZF9sYmEpCisJCWJ0LT5lbmRfbGJhID0gLTFVTEw7CisKKwlidC0+cGlkID0gYnV0cy0+cGlkOworCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwOworCisJcmV0ID0gLUVCVVNZOworCW9sZF9idCA9IHhjaGcoJnEtPmJsa190cmFjZSwgYnQpOworCWlmIChvbGRfYnQpIHsKKwkJKHZvaWQpIHhjaGcoJnEtPmJsa190cmFjZSwgb2xkX2J0KTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZibGtfcHJvYmVzX3JlZikgPT0gMSkKKwkJYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlibGtfdHJhY2VfZnJlZShidCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAorCQkgICAgY2hhciBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgYnV0czsKKwlpbnQgcmV0OworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoJmJ1dHMsIGFyZywgc2l6ZW9mKGJ1dHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IGRvX2Jsa190cmFjZV9zZXR1cChxLCBuYW1lLCBkZXYsICZidXRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZidXRzLCBzaXplb2YoYnV0cykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3NldHVwKTsKKworaW50IGJsa190cmFjZV9zdGFydHN0b3Aoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBzdGFydCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGJ0ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBGb3Igc3RhcnRpbmcgYSB0cmFjZSwgd2UgY2FuIHRyYW5zaXRpb24gZnJvbSBhIHNldHVwIG9yIHN0b3BwZWQKKwkgKiB0cmFjZS4gRm9yIHN0b3BwaW5nIGEgdHJhY2UsIHRoZSBzdGF0ZSBtdXN0IGJlIHJ1bm5pbmcKKwkgKi8KKwlyZXQgPSAtRUlOVkFMOworCWlmIChzdGFydCkgeworCQlpZiAoYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3NldHVwIHx8CisJCSAgICBidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2Vfc3RvcHBlZCkgeworCQkJYmxrdHJhY2Vfc2VxKys7CisJCQlzbXBfbWIoKTsKKwkJCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3J1bm5pbmc7CisKKwkJCXRyYWNlX25vdGVfdGltZShidCk7CisJCQlyZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9ydW5uaW5nKSB7CisJCQlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9zdG9wcGVkOworCQkJcmVsYXlfZmx1c2goYnQtPnJjaGFuKTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3N0YXJ0c3RvcCk7CisKKy8qKgorICogYmxrX3RyYWNlX2lvY3RsOiAtIGhhbmRsZSB0aGUgaW9jdGxzIGFzc29jaWF0ZWQgd2l0aCB0cmFjaW5nCisgKiBAYmRldjoJdGhlIGJsb2NrIGRldmljZQorICogQGNtZDoJdGhlIGlvY3RsIGNtZAorICogQGFyZzoJdGhlIGFyZ3VtZW50IGRhdGEsIGlmIGFueQorICoKKyAqKi8KK2ludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCWludCByZXQsIHN0YXJ0ID0gMDsKKwljaGFyIGJbQkRFVk5BTUVfU0laRV07CisKKwlxID0gYmRldl9nZXRfcXVldWUoYmRldik7CisJaWYgKCFxKQorCQlyZXR1cm4gLUVOWElPOworCisJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEJMS1RSQUNFU0VUVVA6CisJCWJkZXZuYW1lKGJkZXYsIGIpOworCQlyZXQgPSBibGtfdHJhY2Vfc2V0dXAocSwgYiwgYmRldi0+YmRfZGV2LCBhcmcpOworCQlicmVhazsKKwljYXNlIEJMS1RSQUNFU1RBUlQ6CisJCXN0YXJ0ID0gMTsKKwljYXNlIEJMS1RSQUNFU1RPUDoKKwkJcmV0ID0gYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCk7CisJCWJyZWFrOworCWNhc2UgQkxLVFJBQ0VURUFSRE9XTjoKKwkJcmV0ID0gYmxrX3RyYWNlX3JlbW92ZShxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBibGtfdHJhY2Vfc2h1dGRvd246IC0gc3RvcCBhbmQgY2xlYW51cCB0cmFjZSBzdHJ1Y3R1cmVzCisgKiBAcTogICAgdGhlIHJlcXVlc3QgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UKKyAqCisgKiovCit2b2lkIGJsa190cmFjZV9zaHV0ZG93bihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlpZiAocS0+YmxrX3RyYWNlKSB7CisJCWJsa190cmFjZV9zdGFydHN0b3AocSwgMCk7CisJCWJsa190cmFjZV9yZW1vdmUocSk7CisJfQorfQorCisvKgorICogYmxrdHJhY2UgcHJvYmVzCisgKi8KKworLyoqCisgKiBibGtfYWRkX3RyYWNlX3JxIC0gQWRkIGEgdHJhY2UgZm9yIGEgcmVxdWVzdCBvcmllbnRlZCBhY3Rpb24KKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHJxOgkJdGhlIHNvdXJjZSByZXF1ZXN0CisgKiBAd2hhdDoJdGhlIGFjdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIFJlY29yZHMgYW4gYWN0aW9uIGFnYWluc3QgYSByZXF1ZXN0LiBXaWxsIGxvZyB0aGUgYmlvIG9mZnNldCArIHNpemUuCisgKgorICoqLworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICB1MzIgd2hhdCkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKwlpbnQgcncgPSBycS0+Y21kX2ZsYWdzICYgMHgwMzsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJaWYgKGJsa19kaXNjYXJkX3JxKHJxKSkKKwkJcncgfD0gKDEgPDwgQklPX1JXX0RJU0NBUkQpOworCisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgeworCQl3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX1BDKTsKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCBycS0+ZGF0YV9sZW4sIHJ3LCB3aGF0LCBycS0+ZXJyb3JzLAorCQkJCXNpemVvZihycS0+Y21kKSwgcnEtPmNtZCk7CisJfSBlbHNlICB7CisJCXdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfRlMpOworCQlfX2Jsa19hZGRfdHJhY2UoYnQsIHJxLT5oYXJkX3NlY3RvciwgcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5LAorCQkJCXJ3LCB3aGF0LCBycS0+ZXJyb3JzLCAwLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfYWJvcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfQUJPUlQpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2luc2VydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9JTlNFUlQpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2lzc3VlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lTU1VFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCSAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9SRVFVRVVFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0NPTVBMRVRFKTsKK30KKworLyoqCisgKiBibGtfYWRkX3RyYWNlX2JpbyAtIEFkZCBhIHRyYWNlIGZvciBhIGJpbyBvcmllbnRlZCBhY3Rpb24KKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQGJpbzoJdGhlIHNvdXJjZSBiaW8KKyAqIEB3aGF0Ogl0aGUgYWN0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgUmVjb3JkcyBhbiBhY3Rpb24gYWdhaW5zdCBhIGJpby4gV2lsbCBsb2cgdGhlIGJpbyBvZmZzZXQgKyBzaXplLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgICB1MzIgd2hhdCkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJX19ibGtfYWRkX3RyYWNlKGJ0LCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLCBiaW8tPmJpX3J3LCB3aGF0LAorCQkJIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2JvdW5jZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQoreworCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0JPVU5DRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfQ09NUExFVEUpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJCXN0cnVjdCBiaW8gKmJpbykKK3sKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9CQUNLTUVSR0UpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCQkgc3RydWN0IGJpbyAqYmlvKQoreworCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0ZST05UTUVSR0UpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQoreworCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX1FVRVVFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9nZXRycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgYmlvICpiaW8sIGludCBydykKK3sKKwlpZiAoYmlvKQorCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9HRVRSUSk7CisJZWxzZSB7CisJCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJCWlmIChidCkKKwkJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgcncsIEJMS19UQV9HRVRSUSwgMCwgMCwgTlVMTCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfc2xlZXBycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQoreworCWlmIChiaW8pCisJCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX1NMRUVQUlEpOworCWVsc2UgeworCQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCQlpZiAoYnQpCisJCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIHJ3LCBCTEtfVEFfU0xFRVBSUSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3BsdWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAoYnQpCisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgMCwgQkxLX1RBX1BMVUcsIDAsIDAsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Z19pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChidCkgeworCQl1bnNpZ25lZCBpbnQgcGR1ID0gcS0+cnEuY291bnRbUkVBRF0gKyBxLT5ycS5jb3VudFtXUklURV07CisJCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKKworCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9VTlBMVUdfSU8sIDAsCisJCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChidCkgeworCQl1bnNpZ25lZCBpbnQgcGR1ID0gcS0+cnEuY291bnRbUkVBRF0gKyBxLT5ycS5jb3VudFtXUklURV07CisJCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKKworCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9VTlBMVUdfVElNRVIsIDAsCisJCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3NwbGl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJdW5zaWduZWQgaW50IHBkdSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChidCkgeworCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7CisKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLCBiaW8tPmJpX3J3LAorCQkJCUJMS19UQV9TUExJVCwgIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwKKwkJCQlzaXplb2YocnBkdSksICZycGR1KTsKKwl9Cit9CisKKy8qKgorICogYmxrX2FkZF90cmFjZV9yZW1hcCAtIEFkZCBhIHRyYWNlIGZvciBhIHJlbWFwIG9wZXJhdGlvbgorICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCisgKiBAYmlvOgl0aGUgc291cmNlIGJpbworICogQGRldjoJdGFyZ2V0IGRldmljZQorICogQGZyb206CXNvdXJjZSBzZWN0b3IKKyAqIEB0bzoJCXRhcmdldCBzZWN0b3IKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBEZXZpY2UgbWFwcGVyIG9yIHJhaWQgdGFyZ2V0IHNvbWV0aW1lcyBuZWVkIHRvIHNwbGl0IGEgYmlvIGJlY2F1c2UKKyAqICAgICBpdCBzcGFucyBhIHN0cmlwZSAob3Igc2ltaWxhcikuIEFkZCBhIHRyYWNlIGZvciB0aGF0IGFjdGlvbi4KKyAqCisgKiovCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JlbWFwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgICAgIGRldl90IGRldiwgc2VjdG9yX3QgZnJvbSwgc2VjdG9yX3QgdG8pCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisJc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlyLmRldmljZSA9IGNwdV90b19iZTMyKGRldik7CisJci5kZXZpY2VfZnJvbSA9IGNwdV90b19iZTMyKGJpby0+YmlfYmRldi0+YmRfZGV2KTsKKwlyLnNlY3RvciA9IGNwdV90b19iZTY0KHRvKTsKKworCV9fYmxrX2FkZF90cmFjZShidCwgZnJvbSwgYmlvLT5iaV9zaXplLCBiaW8tPmJpX3J3LCBCTEtfVEFfUkVNQVAsCisJCQkhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCBzaXplb2YociksICZyKTsKK30KKworLyoqCisgKiBibGtfYWRkX2RyaXZlcl9kYXRhIC0gQWRkIGJpbmFyeSBtZXNzYWdlIHdpdGggZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHJxOgkJaW8gcmVxdWVzdAorICogQGRhdGE6CWRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAbGVuOglsZW5ndGggb2YgZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBTb21lIGRyaXZlcnMgbWlnaHQgd2FudCB0byB3cml0ZSBkcml2ZXItc3BlY2lmaWMgZGF0YSBwZXIgcmVxdWVzdC4KKyAqCisgKiovCit2b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCWlmIChibGtfcGNfcmVxdWVzdChycSkpCisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgcnEtPmRhdGFfbGVuLCAwLCBCTEtfVEFfRFJWX0RBVEEsCisJCQkJcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKKwllbHNlCisJCV9fYmxrX2FkZF90cmFjZShidCwgcnEtPmhhcmRfc2VjdG9yLCBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDksCisJCQkJMCwgQkxLX1RBX0RSVl9EQVRBLCBycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9kcml2ZXJfZGF0YSk7CisKK3N0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9hYm9ydChibGtfYWRkX3RyYWNlX3JxX2Fib3J0KTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19ib3VuY2UoYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NsZWVwcnEoYmxrX2FkZF90cmFjZV9zbGVlcHJxKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8pOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7CisJV0FSTl9PTihyZXQpOworfQorCitzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQoreworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbyk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc2xlZXBycShibGtfYWRkX3RyYWNlX3NsZWVwcnEpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JvdW5jZShibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2UpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9hYm9ydChibGtfYWRkX3RyYWNlX3JxX2Fib3J0KTsKKworCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworfQorCisvKgorICogc3RydWN0IGJsa19pb190cmFjZXIgZm9ybWF0dGluZyByb3V0aW5lcworICovCisKK3N0YXRpYyB2b2lkIGZpbGxfcndicyhjaGFyICpyd2JzLCBjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0KQoreworCWludCBpID0gMDsKKwlpbnQgdGMgPSB0LT5hY3Rpb24gPj4gQkxLX1RDX1NISUZUOworCisJaWYgKHQtPmFjdGlvbiA9PSBCTEtfVE5fTUVTU0FHRSkgeworCQlyd2JzW2krK10gPSAnTic7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh0YyAmIEJMS19UQ19ESVNDQVJEKQorCQlyd2JzW2krK10gPSAnRCc7CisJZWxzZSBpZiAodGMgJiBCTEtfVENfV1JJVEUpCisJCXJ3YnNbaSsrXSA9ICdXJzsKKwllbHNlIGlmICh0LT5ieXRlcykKKwkJcndic1tpKytdID0gJ1InOworCWVsc2UKKwkJcndic1tpKytdID0gJ04nOworCisJaWYgKHRjICYgQkxLX1RDX0FIRUFEKQorCQlyd2JzW2krK10gPSAnQSc7CisJaWYgKHRjICYgQkxLX1RDX0JBUlJJRVIpCisJCXJ3YnNbaSsrXSA9ICdCJzsKKwlpZiAodGMgJiBCTEtfVENfU1lOQykKKwkJcndic1tpKytdID0gJ1MnOworCWlmICh0YyAmIEJMS19UQ19NRVRBKQorCQlyd2JzW2krK10gPSAnTSc7CitvdXQ6CisJcndic1tpXSA9ICdcMCc7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2NvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKnRlX2Jsa19pb190cmFjZShjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlyZXR1cm4gKGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKillbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqcGR1X3N0YXJ0KGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCXJldHVybiB0ZV9ibGtfaW9fdHJhY2UoZW50KSArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHRfc2VjKGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCXJldHVybiB0ZV9ibGtfaW9fdHJhY2UoZW50KS0+Ynl0ZXMgPj4gOTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgdF9zZWN0b3IoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJcmV0dXJuIHRlX2Jsa19pb190cmFjZShlbnQpLT5zZWN0b3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MTYgdF9lcnJvcihjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlyZXR1cm4gdGVfYmxrX2lvX3RyYWNlKGVudCktPmVycm9yOworfQorCitzdGF0aWMgX191NjQgZ2V0X3BkdV9pbnQoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJY29uc3QgX191NjQgKnZhbCA9IHBkdV9zdGFydChlbnQpOworCXJldHVybiBiZTY0X3RvX2NwdSgqdmFsKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3BkdV9yZW1hcChjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCwKKwkJCSAgc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCAqcikKK3sKKwljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwICpfX3IgPSBwZHVfc3RhcnQoZW50KTsKKwlfX3U2NCBzZWN0b3IgPSBfX3ItPnNlY3RvcjsKKworCXItPmRldmljZSA9IGJlMzJfdG9fY3B1KF9fci0+ZGV2aWNlKTsKKwlyLT5kZXZpY2VfZnJvbSA9IGJlMzJfdG9fY3B1KF9fci0+ZGV2aWNlX2Zyb20pOworCXItPnNlY3RvciA9IGJlNjRfdG9fY3B1KHNlY3Rvcik7Cit9CisKK3R5cGVkZWYgaW50IChibGtfbG9nX2FjdGlvbl90KSAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpOworCitzdGF0aWMgaW50IGJsa19sb2dfYWN0aW9uX2NsYXNzaWMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpCit7CisJY2hhciByd2JzWzZdOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0cyAgPSBpdGVyLT50czsKKwl1bnNpZ25lZCBsb25nIG5zZWNfcmVtID0gZG9fZGl2KHRzLCBOU0VDX1BFUl9TRUMpOworCXVuc2lnbmVkIHNlY3MJICAgICAgID0gKHVuc2lnbmVkIGxvbmcpdHM7CisJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLT5lbnQpOworCisJZmlsbF9yd2JzKHJ3YnMsIHQpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwKKwkJCQkiJTNkLCUtM2QgJTJkICU1ZC4lMDlsdSAlNXUgJTJzICUzcyAiLAorCQkJCU1BSk9SKHQtPmRldmljZSksIE1JTk9SKHQtPmRldmljZSksIGl0ZXItPmNwdSwKKwkJCQlzZWNzLCBuc2VjX3JlbSwgaXRlci0+ZW50LT5waWQsIGFjdCwgcndicyk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19hY3Rpb24oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpCit7CisJY2hhciByd2JzWzZdOworCWNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci0+ZW50KTsKKworCWZpbGxfcndicyhyd2JzLCB0KTsKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiJTNkLCUtM2QgJTJzICUzcyAiLAorCQkJCU1BSk9SKHQtPmRldmljZSksIE1JTk9SKHQtPmRldmljZSksIGFjdCwgcndicyk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19nZW5lcmljKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWNoYXIgY21kW1RBU0tfQ09NTV9MRU5dOworCisJdHJhY2VfZmluZF9jbWRsaW5lKGVudC0+cGlkLCBjbWQpOworCisJaWYgKHRfc2VjKGVudCkpCisJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1ICsgJXUgWyVzXVxuIiwKKwkJCQkJdF9zZWN0b3IoZW50KSwgdF9zZWMoZW50KSwgY21kKTsKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXVxuIiwgY21kKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX3dpdGhfZXJyb3Ioc3RydWN0IHRyYWNlX3NlcSAqcywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWlmICh0X3NlYyhlbnQpKQorCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSArICV1IFslZF1cbiIsIHRfc2VjdG9yKGVudCksCisJCQkJCXRfc2VjKGVudCksIHRfZXJyb3IoZW50KSk7CisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVsbHUgWyVkXVxuIiwgdF9zZWN0b3IoZW50KSwgdF9lcnJvcihlbnQpKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX3JlbWFwKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCXN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgciA9IHsgLmRldmljZSA9IDAsIH07CisKKwlnZXRfcGR1X3JlbWFwKGVudCwgJnIpOworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1ICsgJXUgPC0gKCVkLCVkKSAlbGx1XG4iLAorCQkJICAgICAgIHRfc2VjdG9yKGVudCksCisJCQkgICAgICAgdF9zZWMoZW50KSwgTUFKT1Ioci5kZXZpY2UpLCBNSU5PUihyLmRldmljZSksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyLnNlY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19wbHVnKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWNoYXIgY21kW1RBU0tfQ09NTV9MRU5dOworCisJdHJhY2VfZmluZF9jbWRsaW5lKGVudC0+cGlkLCBjbWQpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIlslc11cbiIsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ191bnBsdWcoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJY2hhciBjbWRbVEFTS19DT01NX0xFTl07CisKKwl0cmFjZV9maW5kX2NtZGxpbmUoZW50LT5waWQsIGNtZCk7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXSAlbGx1XG4iLCBjbWQsIGdldF9wZHVfaW50KGVudCkpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfc3BsaXQoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJY2hhciBjbWRbVEFTS19DT01NX0xFTl07CisKKwl0cmFjZV9maW5kX2NtZGxpbmUoZW50LT5waWQsIGNtZCk7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSAvICVsbHUgWyVzXVxuIiwgdF9zZWN0b3IoZW50KSwKKwkJCQlnZXRfcGR1X2ludChlbnQpLCBjbWQpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfbXNnKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdCA9IHRlX2Jsa19pb190cmFjZShlbnQpOworCisJcmV0ID0gdHJhY2Vfc2VxX3B1dG1lbShzLCB0ICsgMSwgdC0+cGR1X2xlbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzdHJ1Y3QgdHJhY2VyIG9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBibGtfdHJhY2VyX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJaWYgKCEoYmxrX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpKQorCQlyZXR1cm47CisJc2VxX3B1dHMobSwgIiMgREVWICAgQ1BVIFRJTUVTVEFNUCAgICAgUElEIEFDVCBGTEdcbiIKKwkJICAgICIjICB8ICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgfCAgIHxcbiIpOworfQorCitzdGF0aWMgdm9pZCBibGtfdHJhY2VyX3N0YXJ0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJYmxrX3RyYWNlcl9lbmFibGVkID0gdHJ1ZTsKKwl0cmFjZV9mbGFncyAmPSB+VFJBQ0VfSVRFUl9DT05URVhUX0lORk87Cit9CisKK3N0YXRpYyBpbnQgYmxrX3RyYWNlcl9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJYmxrX3RyID0gdHI7CisJYmxrX3RyYWNlcl9zdGFydCh0cik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJsa190cmFjZXJfc3RvcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWJsa190cmFjZXJfZW5hYmxlZCA9IGZhbHNlOworCXRyYWNlX2ZsYWdzIHw9IFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPOworfQorCitzdGF0aWMgdm9pZCBibGtfdHJhY2VyX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJYmxrX3RyYWNlcl9zdG9wKHRyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqYWN0WzJdOworCWludAkgICAoKnByaW50KShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCk7Cit9IHdoYXQyYWN0W10gPSB7CisJW19fQkxLX1RBX1FVRVVFXQk9IHt7ICAiUSIsICJxdWV1ZSIgfSwJICAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX0JBQ0tNRVJHRV0JPSB7eyAgIk0iLCAiYmFja21lcmdlIiB9LCAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX0ZST05UTUVSR0VdCT0ge3sgICJGIiwgImZyb250bWVyZ2UiIH0sIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9HRVRSUV0JPSB7eyAgIkciLCAiZ2V0cnEiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9TTEVFUFJRXQk9IHt7ICAiUyIsICJzbGVlcHJxIiB9LAkgICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfUkVRVUVVRV0JPSB7eyAgIlIiLCAicmVxdWV1ZSIgfSwJICAgYmxrX2xvZ193aXRoX2Vycm9yIH0sCisJW19fQkxLX1RBX0lTU1VFXQk9IHt7ICAiRCIsICJpc3N1ZSIgfSwJICAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX0NPTVBMRVRFXQk9IHt7ICAiQyIsICJjb21wbGV0ZSIgfSwgICBibGtfbG9nX3dpdGhfZXJyb3IgfSwKKwlbX19CTEtfVEFfUExVR10JCT0ge3sgICJQIiwgInBsdWciIH0sCSAgIGJsa19sb2dfcGx1ZyB9LAorCVtfX0JMS19UQV9VTlBMVUdfSU9dCT0ge3sgICJVIiwgInVucGx1Z19pbyIgfSwgIGJsa19sb2dfdW5wbHVnIH0sCisJW19fQkxLX1RBX1VOUExVR19USU1FUl0JPSB7eyAiVVQiLCAidW5wbHVnX3RpbWVyIiB9LCBibGtfbG9nX3VucGx1ZyB9LAorCVtfX0JMS19UQV9JTlNFUlRdCT0ge3sgICJJIiwgImluc2VydCIgfSwJICAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX1NQTElUXQk9IHt7ICAiWCIsICJzcGxpdCIgfSwJICAgYmxrX2xvZ19zcGxpdCB9LAorCVtfX0JMS19UQV9CT1VOQ0VdCT0ge3sgICJCIiwgImJvdW5jZSIgfSwJICAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX1JFTUFQXQk9IHt7ICAiQSIsICJyZW1hcCIgfSwJICAgYmxrX2xvZ19yZW1hcCB9LAorfTsKKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X29uZV9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJYm9vbCBjbGFzc2ljKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7CisJdTE2IHdoYXQ7CisJaW50IHJldDsKKwlib29sIGxvbmdfYWN0OworCWJsa19sb2dfYWN0aW9uX3QgKmxvZ19hY3Rpb247CisKKwl0CSAgID0gdGVfYmxrX2lvX3RyYWNlKGl0ZXItPmVudCk7CisJd2hhdAkgICA9IHQtPmFjdGlvbiAmICgoMSA8PCBCTEtfVENfU0hJRlQpIC0gMSk7CisJbG9uZ19hY3QgICA9ICEhKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9WRVJCT1NFKTsKKwlsb2dfYWN0aW9uID0gY2xhc3NpYyA/ICZibGtfbG9nX2FjdGlvbl9jbGFzc2ljIDogJmJsa19sb2dfYWN0aW9uOworCisJaWYgKHQtPmFjdGlvbiA9PSBCTEtfVE5fTUVTU0FHRSkgeworCQlyZXQgPSBsb2dfYWN0aW9uKGl0ZXIsIGxvbmdfYWN0ID8gIm1lc3NhZ2UiIDogIm0iKTsKKwkJaWYgKHJldCkKKwkJCXJldCA9IGJsa19sb2dfbXNnKHMsIGl0ZXItPmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseSh3aGF0ID09IDAgfHwgd2hhdCA+PSBBUlJBWV9TSVpFKHdoYXQyYWN0KSkpCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIkJhZCBwYyBhY3Rpb24gJXhcbiIsIHdoYXQpOworCWVsc2UgeworCQlyZXQgPSBsb2dfYWN0aW9uKGl0ZXIsIHdoYXQyYWN0W3doYXRdLmFjdFtsb25nX2FjdF0pOworCQlpZiAocmV0KQorCQkJcmV0ID0gd2hhdDJhY3Rbd2hhdF0ucHJpbnQocywgaXRlci0+ZW50KTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldCA/IFRSQUNFX1RZUEVfSEFORExFRCA6IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgYmxrX3RyYWNlX2V2ZW50X3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgICAgIGludCBmbGFncykKK3sKKwlpZiAoIXRyYWNlX3ByaW50X2NvbnRleHQoaXRlcikpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBwcmludF9vbmVfbGluZShpdGVyLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3N5bnRoZXNpemVfb2xkX3RyYWNlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0ID0gKHN0cnVjdCBibGtfaW9fdHJhY2UgKilpdGVyLT5lbnQ7CisJY29uc3QgaW50IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBibGtfaW9fdHJhY2UsIHNlY3Rvcik7CisJc3RydWN0IGJsa19pb190cmFjZSBvbGQgPSB7CisJCS5tYWdpYwkgID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT04sCisJCS50aW1lICAgICA9IGl0ZXItPnRzLAorCX07CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRtZW0ocywgJm9sZCwgb2Zmc2V0KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRyYWNlX3NlcV9wdXRtZW0ocywgJnQtPnNlY3RvciwKKwkJCQlzaXplb2Yob2xkKSAtIG9mZnNldCArIHQtPnBkdV9sZW4pOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK2Jsa190cmFjZV9ldmVudF9wcmludF9iaW5hcnkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShpdGVyKSA/CisJCQlUUkFDRV9UWVBFX0hBTkRMRUQgOiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZXJfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJaWYgKCEoYmxrX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CisKKwlyZXR1cm4gcHJpbnRfb25lX2xpbmUoaXRlciwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyIGJsa190cmFjZXIgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiYmxrIiwKKwkuaW5pdAkJPSBibGtfdHJhY2VyX2luaXQsCisJLnJlc2V0CQk9IGJsa190cmFjZXJfcmVzZXQsCisJLnN0YXJ0CQk9IGJsa190cmFjZXJfc3RhcnQsCisJLnN0b3AJCT0gYmxrX3RyYWNlcl9zdG9wLAorCS5wcmludF9oZWFkZXIJPSBibGtfdHJhY2VyX3ByaW50X2hlYWRlciwKKwkucHJpbnRfbGluZQk9IGJsa190cmFjZXJfcHJpbnRfbGluZSwKKwkuZmxhZ3MJCT0gJmJsa190cmFjZXJfZmxhZ3MsCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX2Jsa19ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9CTEssCisJLnRyYWNlCQk9IGJsa190cmFjZV9ldmVudF9wcmludCwKKwkuYmluYXJ5CQk9IGJsa190cmFjZV9ldmVudF9wcmludF9iaW5hcnksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jsa190cmFjZXIodm9pZCkKK3sKKwlpZiAoIXJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHJhY2VfYmxrX2V2ZW50KSkgeworCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYmxvY2sgZXZlbnRzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHJlZ2lzdGVyX3RyYWNlcigmYmxrX3RyYWNlcikgIT0gMCkgeworCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgdGhlIGJsb2NrIHRyYWNlclxuIik7CisJCXVucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cmFjZV9ibGtfZXZlbnQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKGluaXRfYmxrX3RyYWNlcik7CisKK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3JlbW92ZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKKworCWJ0ID0geGNoZygmcS0+YmxrX3RyYWNlLCBOVUxMKTsKKwlpZiAoYnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYmxrX3Byb2Jlc19yZWYpKQorCQlibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cygpOworCisJYmxrX3RyYWNlX2ZyZWUoYnQpOworCXJldHVybiAwOworfQorCisvKgorICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nCisgKi8KK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBkZXZfdCBkZXYpCit7CisJc3RydWN0IGJsa190cmFjZSAqb2xkX2J0LCAqYnQgPSBOVUxMOworCWludCByZXQgPSAtRU5PTUVNOworCisJYnQgPSBremFsbG9jKHNpemVvZigqYnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ0LT5tc2dfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KEJMS19UTl9NQVhfTVNHLCBfX2FsaWdub2ZfXyhjaGFyKSk7CisJaWYgKCFidC0+bXNnX2RhdGEpCisJCWdvdG8gZnJlZV9idDsKKworCWJ0LT5kZXYgPSBkZXY7CisJYnQtPmFjdF9tYXNrID0gKHUxNiktMTsKKwlidC0+ZW5kX2xiYSA9IC0xVUxMOworCisJb2xkX2J0ID0geGNoZygmcS0+YmxrX3RyYWNlLCBidCk7CisJaWYgKG9sZF9idCAhPSBOVUxMKSB7CisJCSh2b2lkKXhjaGcoJnEtPmJsa190cmFjZSwgb2xkX2J0KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZyZWVfYnQ7CisJfQorCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZibGtfcHJvYmVzX3JlZikgPT0gMSkKKwkJYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7CisJcmV0dXJuIDA7CisKK2ZyZWVfYnQ6CisJYmxrX3RyYWNlX2ZyZWUoYnQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzeXNmcyBpbnRlcmZhY2UgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgdHJhY2luZworICovCisKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKyNkZWZpbmUgQkxLX1RSQUNFX0RFVklDRV9BVFRSKF9uYW1lKSBcCisJREVWSUNFX0FUVFIoX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCSAgICBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93LCBcCisJCSAgICBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZSkKKworc3RhdGljIEJMS19UUkFDRV9ERVZJQ0VfQVRUUihlbmFibGUpOworc3RhdGljIEJMS19UUkFDRV9ERVZJQ0VfQVRUUihhY3RfbWFzayk7CitzdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKHBpZCk7CitzdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKHN0YXJ0X2xiYSk7CitzdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKGVuZF9sYmEpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYmxrX3RyYWNlX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9hY3RfbWFzay5hdHRyLAorCSZkZXZfYXR0cl9waWQuYXR0ciwKKwkmZGV2X2F0dHJfc3RhcnRfbGJhLmF0dHIsCisJJmRldl9hdHRyX2VuZF9sYmEuYXR0ciwKKwlOVUxMCit9OworCitzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJsa190cmFjZV9hdHRyX2dyb3VwID0geworCS5uYW1lICA9ICJ0cmFjZSIsCisJLmF0dHJzID0gYmxrX3RyYWNlX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IG1hc2s7CisJY29uc3QgY2hhciAqc3RyOworfSBtYXNrX21hcHNbXSA9IHsKKwl7IEJMS19UQ19SRUFELAkJInJlYWQiCQl9LAorCXsgQkxLX1RDX1dSSVRFLAkJIndyaXRlIgkJfSwKKwl7IEJMS19UQ19CQVJSSUVSLAkiYmFycmllciIJfSwKKwl7IEJMS19UQ19TWU5DLAkJInN5bmMiCQl9LAorCXsgQkxLX1RDX1FVRVVFLAkJInF1ZXVlIgkJfSwKKwl7IEJMS19UQ19SRVFVRVVFLAkicmVxdWV1ZSIJfSwKKwl7IEJMS19UQ19JU1NVRSwJCSJpc3N1ZSIJCX0sCisJeyBCTEtfVENfQ09NUExFVEUsCSJjb21wbGV0ZSIJfSwKKwl7IEJMS19UQ19GUywJCSJmcyIJCX0sCisJeyBCTEtfVENfUEMsCQkicGMiCQl9LAorCXsgQkxLX1RDX0FIRUFELAkJImFoZWFkIgkJfSwKKwl7IEJMS19UQ19NRVRBLAkJIm1ldGEiCQl9LAorCXsgQkxLX1RDX0RJU0NBUkQsCSJkaXNjYXJkIgl9LAorCXsgQkxLX1RDX0RSVl9EQVRBLAkiZHJ2X2RhdGEiCX0sCit9OworCitzdGF0aWMgaW50IGJsa190cmFjZV9zdHIybWFzayhjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7CisJaW50IG1hc2sgPSAwOworCWNoYXIgKnMsICp0b2tlbjsKKworCXMgPSBrc3RyZHVwKHN0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcyA9IHN0cnN0cmlwKHMpOworCisJd2hpbGUgKDEpIHsKKwkJdG9rZW4gPSBzdHJzZXAoJnMsICIsIik7CisJCWlmICh0b2tlbiA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJaWYgKCp0b2tlbiA9PSAnXDAnKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFza19tYXBzKTsgaSsrKSB7CisJCQlpZiAoc3RyY2FzZWNtcCh0b2tlbiwgbWFza19tYXBzW2ldLnN0cikgPT0gMCkgeworCQkJCW1hc2sgfD0gbWFza19tYXBzW2ldLm1hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPT0gQVJSQVlfU0laRShtYXNrX21hcHMpKSB7CisJCQltYXNrID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCWtmcmVlKHMpOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsa190cmFjZV9tYXNrMnN0cihjaGFyICpidWYsIGludCBtYXNrKQoreworCWludCBpOworCWNoYXIgKnAgPSBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYXNrX21hcHMpOyBpKyspIHsKKwkJaWYgKG1hc2sgJiBtYXNrX21hcHNbaV0ubWFzaykgeworCQkJcCArPSBzcHJpbnRmKHAsICIlcyVzIiwKKwkJCQkgICAgKHAgPT0gYnVmKSA/ICIiIDogIiwiLCBtYXNrX21hcHNbaV0uc3RyKTsKKwkJfQorCX0KKwkqcCsrID0gJ1xuJzsKKworCXJldHVybiBwIC0gYnVmOworfQorCitzdGF0aWMgc3RydWN0IHJlcXVlc3RfcXVldWUgKmJsa190cmFjZV9nZXRfcXVldWUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlpZiAoYmRldi0+YmRfZGlzayA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBiZGV2X2dldF9xdWV1ZShiZGV2KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwID0gZGV2X3RvX3BhcnQoZGV2KTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCXNzaXplX3QgcmV0ID0gLUVOWElPOworCisJbG9ja19rZXJuZWwoKTsKKwliZGV2ID0gYmRnZXQocGFydF9kZXZ0KHApKTsKKwlpZiAoYmRldiA9PSBOVUxMKQorCQlnb3RvIG91dF91bmxvY2tfa2VybmVsOworCisJcSA9IGJsa190cmFjZV9nZXRfcXVldWUoYmRldik7CisJaWYgKHEgPT0gTlVMTCkKKwkJZ290byBvdXRfYmRwdXQ7CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfZW5hYmxlKSB7CisJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsICEhcS0+YmxrX3RyYWNlKTsKKwkJZ290byBvdXRfdW5sb2NrX2JkZXY7CisJfQorCisJaWYgKHEtPmJsa190cmFjZSA9PSBOVUxMKQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgImRpc2FibGVkXG4iKTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9hY3RfbWFzaykKKwkJcmV0ID0gYmxrX3RyYWNlX21hc2syc3RyKGJ1ZiwgcS0+YmxrX3RyYWNlLT5hY3RfbWFzayk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcGlkKQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBxLT5ibGtfdHJhY2UtPnBpZCk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfc3RhcnRfbGJhKQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHEtPmJsa190cmFjZS0+c3RhcnRfbGJhKTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9lbmRfbGJhKQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHEtPmJsa190cmFjZS0+ZW5kX2xiYSk7CisKK291dF91bmxvY2tfYmRldjoKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKK291dF9iZHB1dDoKKwliZHB1dChiZGV2KTsKK291dF91bmxvY2tfa2VybmVsOgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwOworCXU2NCB2YWx1ZTsKKwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY291bnQgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfYWN0X21hc2spIHsKKwkJaWYgKHNzY2FuZihidWYsICIlbGx4IiwgJnZhbHVlKSAhPSAxKSB7CisJCQkvKiBBc3N1bWUgaXQgaXMgYSBsaXN0IG9mIHRyYWNlIGNhdGVnb3J5IG5hbWVzICovCisJCQlyZXQgPSBibGtfdHJhY2Vfc3RyMm1hc2soYnVmKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJdmFsdWUgPSByZXQ7CisJCX0KKwl9IGVsc2UgaWYgKHNzY2FuZihidWYsICIlbGx1IiwgJnZhbHVlKSAhPSAxKQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FTlhJTzsKKworCWxvY2tfa2VybmVsKCk7CisJcCA9IGRldl90b19wYXJ0KGRldik7CisJYmRldiA9IGJkZ2V0KHBhcnRfZGV2dChwKSk7CisJaWYgKGJkZXYgPT0gTlVMTCkKKwkJZ290byBvdXRfdW5sb2NrX2tlcm5lbDsKKworCXEgPSBibGtfdHJhY2VfZ2V0X3F1ZXVlKGJkZXYpOworCWlmIChxID09IE5VTEwpCisJCWdvdG8gb3V0X2JkcHV0OworCisJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2VuYWJsZSkgeworCQlpZiAodmFsdWUpCisJCQlyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldi0+YmRfZGV2KTsKKwkJZWxzZQorCQkJcmV0ID0gYmxrX3RyYWNlX3JlbW92ZV9xdWV1ZShxKTsKKwkJZ290byBvdXRfdW5sb2NrX2JkZXY7CisJfQorCisJcmV0ID0gMDsKKwlpZiAocS0+YmxrX3RyYWNlID09IE5VTEwpCisJCXJldCA9IGJsa190cmFjZV9zZXR1cF9xdWV1ZShxLCBiZGV2LT5iZF9kZXYpOworCisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChhdHRyID09ICZkZXZfYXR0cl9hY3RfbWFzaykKKwkJCXEtPmJsa190cmFjZS0+YWN0X21hc2sgPSB2YWx1ZTsKKwkJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcGlkKQorCQkJcS0+YmxrX3RyYWNlLT5waWQgPSB2YWx1ZTsKKwkJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfc3RhcnRfbGJhKQorCQkJcS0+YmxrX3RyYWNlLT5zdGFydF9sYmEgPSB2YWx1ZTsKKwkJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfZW5kX2xiYSkKKwkJCXEtPmJsa190cmFjZS0+ZW5kX2xiYSA9IHZhbHVlOworCX0KKworb3V0X3VubG9ja19iZGV2OgorCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworb3V0X2JkcHV0OgorCWJkcHV0KGJkZXYpOworb3V0X3VubG9ja19rZXJuZWw6CisJdW5sb2NrX2tlcm5lbCgpOworb3V0OgorCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKK30KKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL2V2ZW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvZXZlbnRzLmMKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHJlZ2lzdGVyIGFsbCB0cmFjZSBwb2ludHMgYXMgZXZlbnRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2luY2x1ZGUgPHRyYWNlL3RyYWNlX2V2ZW50cy5oPgorCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKKyNpbmNsdWRlICJ0cmFjZV9ldmVudHNfc3RhZ2VfMS5oIgorI2luY2x1ZGUgInRyYWNlX2V2ZW50c19zdGFnZV8yLmgiCisjaW5jbHVkZSAidHJhY2VfZXZlbnRzX3N0YWdlXzMuaCIKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IDUzZThjOGIuLmYxZWQwODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTI3LDYgKzI3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisKKyNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCkBAIC00NCwxNCArNDcsMTQgQEAKIAkJCWZ0cmFjZV9raWxsKCk7CQlcCiAJfSB3aGlsZSAoMCkKIAorLyogaGFzaCBiaXRzIGZvciBzcGVjaWZpYyBmdW5jdGlvbiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRlRSQUNFX0hBU0hfQklUUyA3CisjZGVmaW5lIEZUUkFDRV9GVU5DX0hBU0hTSVpFICgxIDw8IEZUUkFDRV9IQVNIX0JJVFMpCisKIC8qIGZ0cmFjZV9lbmFibGVkIGlzIGEgbWV0aG9kIHRvIHR1cm4gZnRyYWNlIG9uIG9yIG9mZiAqLwogaW50IGZ0cmFjZV9lbmFibGVkIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgaW50IGxhc3RfZnRyYWNlX2VuYWJsZWQ7CiAKLS8qIHNldCB3aGVuIHRyYWNpbmcgb25seSBhIHBpZCAqLwotc3RydWN0IHBpZCAqZnRyYWNlX3BpZF90cmFjZTsKLXN0YXRpYyBzdHJ1Y3QgcGlkICogY29uc3QgZnRyYWNlX3N3YXBwZXJfcGlkID0gJmluaXRfc3RydWN0X3BpZDsKLQogLyogUXVpY2sgZGlzYWJsaW5nIG9mIGZ1bmN0aW9uIHRyYWNlci4gKi8KIGludCBmdW5jdGlvbl90cmFjZV9zdG9wOwogCkBAIC02MSw5ICs2NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZnRyYWNlX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnRyYWNlX2xvY2spOwotc3RhdGljIERFRklORV9NVVRFWChmdHJhY2Vfc3lzY3RsX2xvY2spOwotc3RhdGljIERFRklORV9NVVRFWChmdHJhY2Vfc3RhcnRfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGZ0cmFjZV9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGZ0cmFjZV9saXN0X2VuZCBfX3JlYWRfbW9zdGx5ID0KIHsKQEAgLTEzNCw5ICsxMzUsNiBAQAogCiBzdGF0aWMgaW50IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCiB7Ci0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwotCiAJb3BzLT5uZXh0ID0gZnRyYWNlX2xpc3Q7CiAJLyoKIAkgKiBXZSBhcmUgZW50ZXJpbmcgb3BzIGludG8gdGhlIGZ0cmFjZV9saXN0IGJ1dCBhbm90aGVyCkBAIC0xNzIsMTggKzE3MCwxMiBAQAogI2VuZGlmCiAJfQogCi0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgZnRyYWNlX29wcyAqKnA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAkvKgogCSAqIElmIHdlIGFyZSByZW1vdmluZyB0aGUgbGFzdCBmdW5jdGlvbiwgdGhlbiBzaW1wbHkgcG9pbnQKQEAgLTE5MiwxNyArMTg0LDE1IEBACiAJaWYgKGZ0cmFjZV9saXN0ID09IG9wcyAmJiBvcHMtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkgewogCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdHJhY2Vfc3R1YjsKIAkJZnRyYWNlX2xpc3QgPSAmZnRyYWNlX2xpc3RfZW5kOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJZm9yIChwID0gJmZ0cmFjZV9saXN0OyAqcCAhPSAmZnRyYWNlX2xpc3RfZW5kOyBwID0gJigqcCktPm5leHQpCiAJCWlmICgqcCA9PSBvcHMpCiAJCQlicmVhazsKIAotCWlmICgqcCAhPSBvcHMpIHsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoKnAgIT0gb3BzKQorCQlyZXR1cm4gLTE7CiAKIAkqcCA9ICgqcCktPm5leHQ7CiAKQEAgLTIyMywyMSArMjEzLDE1IEBACiAJCX0KIAl9CiAKLSBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfcGlkX2Z1bmModm9pZCkKIHsKIAlmdHJhY2VfZnVuY190IGZ1bmM7CiAKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7Ci0KIAlpZiAoZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID09IGZ0cmFjZV9zdHViKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCiAJZnVuYyA9IGZ0cmFjZV90cmFjZV9mdW5jdGlvbjsKIApAQCAtMjU0LDIzICsyMzgsMjkgQEAKICNlbHNlCiAJX19mdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOwogI2VuZGlmCi0KLSBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIAorLyogc2V0IHdoZW4gdHJhY2luZyBvbmx5IGEgcGlkICovCitzdHJ1Y3QgcGlkICpmdHJhY2VfcGlkX3RyYWNlOworc3RhdGljIHN0cnVjdCBwaWQgKiBjb25zdCBmdHJhY2Vfc3dhcHBlcl9waWQgPSAmaW5pdF9zdHJ1Y3RfcGlkOworCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisKICNpZm5kZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAjIGVycm9yIER5bmFtaWMgZnRyYWNlIGRlcGVuZHMgb24gTUNPVU5UX1JFQ09SRAogI2VuZGlmCiAKLS8qCi0gKiBTaW5jZSBNQ09VTlRfQUREUiBtYXkgcG9pbnQgdG8gbWNvdW50IGl0c2VsZiwgd2UgZG8gbm90IHdhbnQKLSAqIHRvIGdldCBpdCBjb25mdXNlZCBieSByZWFkaW5nIGEgcmVmZXJlbmNlIGluIHRoZSBjb2RlIGFzIHdlCi0gKiBhcmUgcGFyc2luZyBvbiBvYmpjb3B5IG91dHB1dCBvZiB0ZXh0LiBVc2UgYSB2YXJpYWJsZSBmb3IKLSAqIGl0IGluc3RlYWQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1jb3VudF9hZGRyID0gTUNPVU5UX0FERFI7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgZnRyYWNlX2Z1bmNfaGFzaFtGVFJBQ0VfRlVOQ19IQVNIU0laRV0gX19yZWFkX21vc3RseTsKKworc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlub2RlOworCXN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzCSpvcHM7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJaXA7CisJdm9pZAkJCSpkYXRhOworCXN0cnVjdCByY3VfaGVhZAkJcmN1OworfTsKKwogCiBlbnVtIHsKIAlGVFJBQ0VfRU5BQkxFX0NBTExTCQk9ICgxIDw8IDApLApAQCAtMjg0LDEzICsyNzQsMTMgQEAKIAogc3RhdGljIGludCBmdHJhY2VfZmlsdGVyZWQ7CiAKLXN0YXRpYyBMSVNUX0hFQUQoZnRyYWNlX25ld19hZGRycyk7CitzdGF0aWMgc3RydWN0IGR5bl9mdHJhY2UgKmZ0cmFjZV9uZXdfYWRkcnM7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZnRyYWNlX3JlZ2V4X2xvY2spOwogCiBzdHJ1Y3QgZnRyYWNlX3BhZ2UgewogCXN0cnVjdCBmdHJhY2VfcGFnZQkqbmV4dDsKLQl1bnNpZ25lZCBsb25nCQlpbmRleDsKKwlpbnQJCQlpbmRleDsKIAlzdHJ1Y3QgZHluX2Z0cmFjZQlyZWNvcmRzW107CiB9OwogCkBAIC0zMDUsNiArMjk1LDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX2ZyZWVfcmVjb3JkczsKIAorLyoKKyAqIFRoaXMgaXMgYSBkb3VibGUgZm9yLiBEbyBub3QgdXNlICdicmVhaycgdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wLAorICogeW91IG11c3QgdXNlIGEgZ290by4KKyAqLworI2RlZmluZSBkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpCQkJCQlcCisJZm9yIChwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsgcGc7IHBnID0gcGctPm5leHQpIHsJCVwKKwkJaW50IF9fX19faTsJCQkJCQlcCisJCWZvciAoX19fX19pID0gMDsgX19fX19pIDwgcGctPmluZGV4OyBfX19fX2krKykgewlcCisJCQlyZWMgPSAmcGctPnJlY29yZHNbX19fX19pXTsKKworI2RlZmluZSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCkJCVwKKwkJfQkJCQlcCisJfQogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKIApAQCAtMzM4LDcgKzM0MSw3IEBACiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX3JlYyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQogewotCXJlYy0+aXAgPSAodW5zaWduZWQgbG9uZylmdHJhY2VfZnJlZV9yZWNvcmRzOworCXJlYy0+ZnJlZWxpc3QgPSBmdHJhY2VfZnJlZV9yZWNvcmRzOwogCWZ0cmFjZV9mcmVlX3JlY29yZHMgPSByZWM7CiAJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRlJFRTsKIH0KQEAgLTM0OSwyMyArMzUyLDIyIEBACiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAl1bnNpZ25lZCBsb25nIHMgPSAodW5zaWduZWQgbG9uZylzdGFydDsKIAl1bnNpZ25lZCBsb25nIGUgPSBzICsgc2l6ZTsKLQlpbnQgaTsKIAogCWlmIChmdHJhY2VfZGlzYWJsZWQgfHwgIXN0YXJ0KQogCQlyZXR1cm47CiAKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7Ci0KLQlmb3IgKHBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OyBwZzsgcGcgPSBwZy0+bmV4dCkgewotCQlmb3IgKGkgPSAwOyBpIDwgcGctPmluZGV4OyBpKyspIHsKLQkJCXJlYyA9ICZwZy0+cmVjb3Jkc1tpXTsKLQotCQkJaWYgKChyZWMtPmlwID49IHMpICYmIChyZWMtPmlwIDwgZSkpCi0JCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCQlpZiAoKHJlYy0+aXAgPj0gcykgJiYgKHJlYy0+aXAgPCBlKSkgeworCQkJLyoKKwkJCSAqIHJlYy0+aXAgaXMgY2hhbmdlZCBpbiBmdHJhY2VfZnJlZV9yZWMoKQorCQkJICogSXQgc2hvdWxkIG5vdCBiZXR3ZWVuIHMgYW5kIGUgaWYgcmVjb3JkIHdhcyBmcmVlZC4KKwkJCSAqLworCQkJRlRSQUNFX1dBUk5fT04ocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFKTsKKwkJCWZ0cmFjZV9mcmVlX3JlYyhyZWMpOwogCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX2FsbG9jX2R5bl9ub2RlKHVuc2lnbmVkIGxvbmcgaXApCkBAIC0zODIsNyArMzg0LDcgQEAKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKLQkJZnRyYWNlX2ZyZWVfcmVjb3JkcyA9ICh2b2lkICopcmVjLT5pcDsKKwkJZnRyYWNlX2ZyZWVfcmVjb3JkcyA9IHJlYy0+ZnJlZWxpc3Q7CiAJCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7CiAJCXJldHVybiByZWM7CiAJfQpAQCAtNDE0LDggKzQxNiw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJcmVjLT5pcCA9IGlwOwotCi0JbGlzdF9hZGQoJnJlYy0+bGlzdCwgJmZ0cmFjZV9uZXdfYWRkcnMpOworCXJlYy0+bmV3bGlzdCA9IGZ0cmFjZV9uZXdfYWRkcnM7CisJZnRyYWNlX25ld19hZGRycyA9IHJlYzsKIAogCXJldHVybiByZWM7CiB9CkBAIC00NjEsMTAgKzQ2MywxMCBAQAogc3RhdGljIGludAogX19mdHJhY2VfcmVwbGFjZV9jb2RlKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGludCBlbmFibGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBpcCwgZmw7CiAJdW5zaWduZWQgbG9uZyBmdHJhY2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGlwLCBmbDsKIAotCWZ0cmFjZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2NhbGxlcjsKKwlmdHJhY2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKUZUUkFDRV9BRERSOwogCiAJaXAgPSByZWMtPmlwOwogCkBAIC00NzMsNyArNDc1LDcgQEAKIAkgKiBpdCBpcyBub3QgZW5hYmxlZCB0aGVuIGRvIG5vdGhpbmcuCiAJICoKIAkgKiBJZiB0aGlzIHJlY29yZCBpcyBub3QgdG8gYmUgdHJhY2VkIGFuZAotCSAqIGl0IGlzIGVuYWJsZWQgdGhlbiBkaXNhYmxlZCBpdC4KKwkgKiBpdCBpcyBlbmFibGVkIHRoZW4gZGlzYWJsZSBpdC4KIAkgKgogCSAqLwogCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX05PVFJBQ0UpIHsKQEAgLTQ5Myw3ICs0OTUsNyBAQAogCQlpZiAoZmwgPT0gKEZUUkFDRV9GTF9GSUxURVIgfCBGVFJBQ0VfRkxfRU5BQkxFRCkpCiAJCQlyZXR1cm4gMDsKIAotCQkvKiBSZWNvcmQgaXMgbm90IGZpbHRlcmVkIGFuZCBpcyBub3QgZW5hYmxlZCBkbyBub3RoaW5nICovCisJCS8qIFJlY29yZCBpcyBub3QgZmlsdGVyZWQgb3IgZW5hYmxlZCwgZG8gbm90aGluZyAqLwogCQlpZiAoIWZsKQogCQkJcmV0dXJuIDA7CiAKQEAgLTUxNSw3ICs1MTcsNyBAQAogCiAJCX0gZWxzZSB7CiAKLQkJCS8qIGlmIHJlY29yZCBpcyBub3QgZW5hYmxlZCBkbyBub3RoaW5nICovCisJCQkvKiBpZiByZWNvcmQgaXMgbm90IGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8KIAkJCWlmICghKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRU5BQkxFRCkpCiAJCQkJcmV0dXJuIDA7CiAKQEAgLTUzMSw0MSArNTMzLDQxIEBACiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9yZXBsYWNlX2NvZGUoaW50IGVuYWJsZSkKIHsKLQlpbnQgaSwgZmFpbGVkOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKKwlpbnQgZmFpbGVkOwogCi0JZm9yIChwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsgcGc7IHBnID0gcGctPm5leHQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBnLT5pbmRleDsgaSsrKSB7Ci0JCQlyZWMgPSAmcGctPnJlY29yZHNbaV07CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisJCS8qCisJCSAqIFNraXAgb3ZlciBmcmVlIHJlY29yZHMsIHJlY29yZHMgdGhhdCBoYXZlCisJCSAqIGZhaWxlZCBhbmQgbm90IGNvbnZlcnRlZC4KKwkJICovCisJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUgfHwKKwkJICAgIHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEIHx8CisJCSAgICAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfQ09OVkVSVEVEKSkKKwkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogU2tpcCBvdmVyIGZyZWUgcmVjb3JkcyBhbmQgcmVjb3JkcyB0aGF0IGhhdmUKLQkJCSAqIGZhaWxlZC4KLQkJCSAqLwotCQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJFRSB8fAotCQkJICAgIHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBpZ25vcmUgdXBkYXRlcyB0byB0aGlzIHJlY29yZCdzIG1jb3VudCBzaXRlICovCi0JCQlpZiAoZ2V0X2twcm9iZSgodm9pZCAqKXJlYy0+aXApKSB7Ci0JCQkJZnJlZXplX3JlY29yZChyZWMpOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQl1bmZyZWV6ZV9yZWNvcmQocmVjKTsKLQkJCX0KLQotCQkJZmFpbGVkID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKLQkJCWlmIChmYWlsZWQgJiYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfQ09OVkVSVEVEKSkgewotCQkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKLQkJCQlpZiAoKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgfHwKLQkJCQkgICAgIWNvcmVfa2VybmVsX3RleHQocmVjLT5pcCkpIHsKLQkJCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7Ci0JCQkJfSBlbHNlCi0JCQkJCWZ0cmFjZV9idWcoZmFpbGVkLCByZWMtPmlwKTsKLQkJCX0KKwkJLyogaWdub3JlIHVwZGF0ZXMgdG8gdGhpcyByZWNvcmQncyBtY291bnQgc2l0ZSAqLworCQlpZiAoZ2V0X2twcm9iZSgodm9pZCAqKXJlYy0+aXApKSB7CisJCQlmcmVlemVfcmVjb3JkKHJlYyk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCXVuZnJlZXplX3JlY29yZChyZWMpOwogCQl9Ci0JfQorCisJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7CisJCWlmIChmYWlsZWQpIHsKKwkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKKwkJCWlmICgoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSB8fAorCQkJICAgICFjb3JlX2tlcm5lbF90ZXh0KHJlYy0+aXApKSB7CisJCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7CisJCQkJfSBlbHNlIHsKKwkJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7CisJCQkJCS8qIFN0b3AgcHJvY2Vzc2luZyAqLworCQkJCQlyZXR1cm47CisJCQkJfQorCQl9CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTU3Niw3ICs1NzgsNyBAQAogCiAJaXAgPSByZWMtPmlwOwogCi0JcmV0ID0gZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBtY291bnRfYWRkcik7CisJcmV0ID0gZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBNQ09VTlRfQUREUik7CiAJaWYgKHJldCkgewogCQlmdHJhY2VfYnVnKHJldCwgaXApOwogCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7CkBAIC01ODUsNiArNTg3LDI0IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBhcmNocyBjYW4gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpZiB0aGV5IG11c3QgZG8gc29tZXRoaW5nCisgKiBiZWZvcmUgdGhlIG1vZGlmeWluZyBjb2RlIGlzIHBlcmZvcm1lZC4KKyAqLworaW50IF9fd2VhayBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhcmNocyBjYW4gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpZiB0aGV5IG11c3QgZG8gc29tZXRoaW5nCisgKiBhZnRlciB0aGUgbW9kaWZ5aW5nIGNvZGUgaXMgcGVyZm9ybWVkLgorICovCitpbnQgX193ZWFrIGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3Bvc3RfcHJvY2Vzcyh2b2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZnRyYWNlX21vZGlmeV9jb2RlKHZvaWQgKmRhdGEpCiB7CiAJaW50ICpjb21tYW5kID0gZGF0YTsKQEAgLTYwNyw3ICs2MjcsMTcgQEAKIAogc3RhdGljIHZvaWQgZnRyYWNlX3J1bl91cGRhdGVfY29kZShpbnQgY29tbWFuZCkKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSgpOworCUZUUkFDRV9XQVJOX09OKHJldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCiAJc3RvcF9tYWNoaW5lKF9fZnRyYWNlX21vZGlmeV9jb2RlLCAmY29tbWFuZCwgTlVMTCk7CisKKwlyZXQgPSBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3MoKTsKKwlGVFJBQ0VfV0FSTl9PTihyZXQpOwogfQogCiBzdGF0aWMgZnRyYWNlX2Z1bmNfdCBzYXZlZF9mdHJhY2VfZnVuYzsKQEAgLTYzMSwxMyArNjYxLDEwIEBACiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIAlmdHJhY2Vfc3RhcnRfdXArKzsKIAljb21tYW5kIHw9IEZUUkFDRV9FTkFCTEVfQ0FMTFM7CiAKIAlmdHJhY2Vfc3RhcnR1cF9lbmFibGUoY29tbWFuZCk7Ci0KLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3NodXRkb3duKGludCBjb21tYW5kKQpAQCAtNjQ1LDcgKzY3Miw2IEBACiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIAlmdHJhY2Vfc3RhcnRfdXAtLTsKIAlpZiAoIWZ0cmFjZV9zdGFydF91cCkKIAkJY29tbWFuZCB8PSBGVFJBQ0VfRElTQUJMRV9DQUxMUzsKQEAgLTY1NiwxMSArNjgyLDkgQEAKIAl9CiAKIAlpZiAoIWNvbW1hbmQgfHwgIWZ0cmFjZV9lbmFibGVkKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCiAJZnRyYWNlX3J1bl91cGRhdGVfY29kZShjb21tYW5kKTsKLSBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9zdGFydHVwX3N5c2N0bCh2b2lkKQpAQCAtNjcwLDcgKzY5NCw2IEBACiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIAkvKiBGb3JjZSB1cGRhdGUgbmV4dCB0aW1lICovCiAJc2F2ZWRfZnRyYWNlX2Z1bmMgPSBOVUxMOwogCS8qIGZ0cmFjZV9zdGFydF91cCBpcyB0cnVlIGlmIHdlIHdhbnQgZnRyYWNlIHJ1bm5pbmcgKi8KQEAgLTY3OCw3ICs3MDEsNiBAQAogCQljb21tYW5kIHw9IEZUUkFDRV9FTkFCTEVfQ0FMTFM7CiAKIAlmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKGNvbW1hbmQpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBmdHJhY2Vfc2h1dGRvd25fc3lzY3RsKHZvaWQpCkBAIC02ODgsMTMgKzcxMCwxMSBAQAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiAJLyogZnRyYWNlX3N0YXJ0X3VwIGlzIHRydWUgaWYgZnRyYWNlIGlzIHJ1bm5pbmcgKi8KIAlpZiAoZnRyYWNlX3N0YXJ0X3VwKQogCQljb21tYW5kIHw9IEZUUkFDRV9ESVNBQkxFX0NBTExTOwogCiAJZnRyYWNlX3J1bl91cGRhdGVfY29kZShjb21tYW5kKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIH0KIAogc3RhdGljIGN5Y2xlX3QJCWZ0cmFjZV91cGRhdGVfdGltZTsKQEAgLTcwMywxOSArNzIzLDIxIEBACiAKIHN0YXRpYyBpbnQgZnRyYWNlX3VwZGF0ZV9jb2RlKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQlzdHJ1Y3QgZHluX2Z0cmFjZSAqcCwgKnQ7CisJc3RydWN0IGR5bl9mdHJhY2UgKnA7CiAJY3ljbGVfdCBzdGFydCwgc3RvcDsKIAogCXN0YXJ0ID0gZnRyYWNlX25vdyhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlmdHJhY2VfdXBkYXRlX2NudCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgJmZ0cmFjZV9uZXdfYWRkcnMsIGxpc3QpIHsKKwl3aGlsZSAoZnRyYWNlX25ld19hZGRycykgewogCiAJCS8qIElmIHNvbWV0aGluZyB3ZW50IHdyb25nLCBiYWlsIHdpdGhvdXQgZW5hYmxpbmcgYW55dGhpbmcgKi8KIAkJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCQlyZXR1cm4gLTE7CiAKLQkJbGlzdF9kZWxfaW5pdCgmcC0+bGlzdCk7CisJCXAgPSBmdHJhY2VfbmV3X2FkZHJzOworCQlmdHJhY2VfbmV3X2FkZHJzID0gcC0+bmV3bGlzdDsKKwkJcC0+ZmxhZ3MgPSAwTDsKIAogCQkvKiBjb252ZXJ0IHJlY29yZCAoaS5lLCBwYXRjaCBtY291bnQtY2FsbCB3aXRoIE5PUCkgKi8KIAkJaWYgKGZ0cmFjZV9jb2RlX2Rpc2FibGUobW9kLCBwKSkgewpAQCAtNzgxLDEzICs4MDMsMTYgQEAKIAlGVFJBQ0VfSVRFUl9DT05UCT0gKDEgPDwgMSksCiAJRlRSQUNFX0lURVJfTk9UUkFDRQk9ICgxIDw8IDIpLAogCUZUUkFDRV9JVEVSX0ZBSUxVUkVTCT0gKDEgPDwgMyksCisJRlRSQUNFX0lURVJfUFJJTlRBTEwJPSAoMSA8PCA0KSwKKwlGVFJBQ0VfSVRFUl9IQVNICT0gKDEgPDwgNSksCiB9OwogCiAjZGVmaW5lIEZUUkFDRV9CVUZGX01BWCAoS1NZTV9TWU1CT0xfTEVOKzQpIC8qIHJvb20gZm9yIHdpbGRjYXJkcyAqLwogCiBzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yIHsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UJKnBnOwotCXVuc2lnbmVkCQlpZHg7CisJaW50CQkJaGlkeDsKKwlpbnQJCQlpZHg7CiAJdW5zaWduZWQJCWZsYWdzOwogCXVuc2lnbmVkIGNoYXIJCWJ1ZmZlcltGVFJBQ0VfQlVGRl9NQVgrMV07CiAJdW5zaWduZWQJCWJ1ZmZlcl9pZHg7CkBAIC03OTUsMTUgKzgyMCw4OSBAQAogfTsKIAogc3RhdGljIHZvaWQgKgordF9oYXNoX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaG5kID0gdjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkOworCisJV0FSTl9PTighKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfSEFTSCkpOworCisJKCpwb3MpKys7CisKKyByZXRyeToKKwlpZiAoaXRlci0+aGlkeCA+PSBGVFJBQ0VfRlVOQ19IQVNIU0laRSkKKwkJcmV0dXJuIE5VTEw7CisKKwloaGQgPSAmZnRyYWNlX2Z1bmNfaGFzaFtpdGVyLT5oaWR4XTsKKworCWlmIChobGlzdF9lbXB0eShoaGQpKSB7CisJCWl0ZXItPmhpZHgrKzsKKwkJaG5kID0gTlVMTDsKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAoIWhuZCkKKwkJaG5kID0gaGhkLT5maXJzdDsKKwllbHNlIHsKKwkJaG5kID0gaG5kLT5uZXh0OworCQlpZiAoIWhuZCkgeworCQkJaXRlci0+aGlkeCsrOworCQkJZ290byByZXRyeTsKKwkJfQorCX0KKworCXJldHVybiBobmQ7Cit9CisKK3N0YXRpYyB2b2lkICp0X2hhc2hfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwl2b2lkICpwID0gTlVMTDsKKworCWl0ZXItPmZsYWdzIHw9IEZUUkFDRV9JVEVSX0hBU0g7CisKKwlyZXR1cm4gdF9oYXNoX25leHQobSwgcCwgcG9zKTsKK30KKworc3RhdGljIGludCB0X2hhc2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlICpyZWM7CisJc3RydWN0IGhsaXN0X25vZGUgKmhuZCA9IHY7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKworCXJlYyA9IGhsaXN0X2VudHJ5KGhuZCwgc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlLCBub2RlKTsKKworCWlmIChyZWMtPm9wcy0+cHJpbnQpCisJCXJldHVybiByZWMtPm9wcy0+cHJpbnQobSwgcmVjLT5pcCwgcmVjLT5vcHMsIHJlYy0+ZGF0YSk7CisKKwlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKKwlzZXFfcHJpbnRmKG0sICIlczoiLCBzdHIpOworCisJa2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKXJlYy0+b3BzLT5mdW5jLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCXNlcV9wcmludGYobSwgIiVzIiwgc3RyKTsKKworCWlmIChyZWMtPmRhdGEpCisJCXNlcV9wcmludGYobSwgIjolcCIsIHJlYy0+ZGF0YSk7CisJc2VxX3B1dGMobSwgJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKgogdF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYyA9IE5VTEw7CiAKKwlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9IQVNIKQorCQlyZXR1cm4gdF9oYXNoX25leHQobSwgdiwgcG9zKTsKKwogCSgqcG9zKSsrOwogCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOworCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX1BSSU5UQUxMKQorCQlyZXR1cm4gTlVMTDsKKwogIHJldHJ5OgogCWlmIChpdGVyLT5pZHggPj0gaXRlci0+cGctPmluZGV4KSB7CiAJCWlmIChpdGVyLT5wZy0+bmV4dCkgewpAQCAtODMyLDcgKzkzMSw2IEBACiAJCQlnb3RvIHJldHJ5OwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gcmVjOwogfQpAQCAtODQyLDYgKzk0MCwyMyBAQAogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOwogCXZvaWQgKnAgPSBOVUxMOwogCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCS8qCisJICogRm9yIHNldF9mdHJhY2VfZmlsdGVyIHJlYWRpbmcsIGlmIHdlIGhhdmUgdGhlIGZpbHRlcgorCSAqIG9mZiwgd2UgY2FuIHNob3J0IGN1dCBhbmQganVzdCBwcmludCBvdXQgdGhhdCBhbGwKKwkgKiBmdW5jdGlvbnMgYXJlIGVuYWJsZWQuCisJICovCisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRklMVEVSICYmICFmdHJhY2VfZmlsdGVyZWQpIHsKKwkJaWYgKCpwb3MgPiAwKQorCQkJcmV0dXJuIHRfaGFzaF9zdGFydChtLCBwb3MpOworCQlpdGVyLT5mbGFncyB8PSBGVFJBQ0VfSVRFUl9QUklOVEFMTDsKKwkJKCpwb3MpKys7CisJCXJldHVybiBpdGVyOworCX0KKworCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0hBU0gpCisJCXJldHVybiB0X2hhc2hfc3RhcnQobSwgcG9zKTsKKwogCWlmICgqcG9zID4gMCkgewogCQlpZiAoaXRlci0+aWR4IDwgMCkKIAkJCXJldHVybiBwOwpAQCAtODUxLDE4ICs5NjYsMzEgQEAKIAogCXAgPSB0X25leHQobSwgcCwgcG9zKTsKIAorCWlmICghcCkKKwkJcmV0dXJuIHRfaGFzaF9zdGFydChtLCBwb3MpOworCiAJcmV0dXJuIHA7CiB9CiAKIHN0YXRpYyB2b2lkIHRfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjID0gdjsKIAljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwogCisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfSEFTSCkKKwkJcmV0dXJuIHRfaGFzaF9zaG93KG0sIHYpOworCisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfUFJJTlRBTEwpIHsKKwkJc2VxX3ByaW50ZihtLCAiIyMjIyBhbGwgZnVuY3Rpb25zIGVuYWJsZWQgIyMjI1xuIik7CisJCXJldHVybiAwOworCX0KKwogCWlmICghcmVjKQogCQlyZXR1cm4gMDsKIApAQCAtOTQxLDIzICsxMDY5LDE2IEBACiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXVuc2lnbmVkIGxvbmcgdHlwZSA9IGVuYWJsZSA/IEZUUkFDRV9GTF9GSUxURVIgOiBGVFJBQ0VfRkxfTk9UUkFDRTsKLQl1bnNpZ25lZCBpOwogCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlpZiAoZW5hYmxlKQogCQlmdHJhY2VfZmlsdGVyZWQgPSAwOwotCXBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwotCXdoaWxlIChwZykgewotCQlmb3IgKGkgPSAwOyBpIDwgcGctPmluZGV4OyBpKyspIHsKLQkJCXJlYyA9ICZwZy0+cmVjb3Jkc1tpXTsKLQkJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKLQkJCQljb250aW51ZTsKLQkJCXJlYy0+ZmxhZ3MgJj0gfnR5cGU7Ci0JCX0KLQkJcGcgPSBwZy0+bmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQorCQkJY29udGludWU7CisJCXJlYy0+ZmxhZ3MgJj0gfnR5cGU7CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEwMDgsMTYgKzExMjksNiBAQAogCXJldHVybiBmdHJhY2VfcmVnZXhfb3Blbihpbm9kZSwgZmlsZSwgMCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1mdHJhY2VfcmVnZXhfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCi0JCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCi17Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCXJldHVybiBzZXFfcmVhZChmaWxlLCB1YnVmLCBjbnQsIHBwb3MpOwotCWVsc2UKLQkJcmV0dXJuIC1FUEVSTTsKLX0KLQogc3RhdGljIGxvZmZfdAogZnRyYWNlX3JlZ2V4X2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQogewpAQCAtMTAzOCw4NiArMTE0OSw1MzYgQEAKIAlNQVRDSF9FTkRfT05MWSwKIH07CiAKLXN0YXRpYyB2b2lkCi1mdHJhY2VfbWF0Y2godW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGxlbiwgaW50IGVuYWJsZSkKKy8qCisgKiAoc3RhdGljIGZ1bmN0aW9uIC0gbm8gbmVlZCBmb3Iga2VybmVsIGRvYykKKyAqCisgKiBQYXNzIGluIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBnbG9iIGFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqIHNldCBzZWFyY2ggdG8gcG9pbnQgdG8gdGhlIHNlYXJjaCBwYXJ0IG9mIHRoZSBidWZmZXIgYW5kCisgKiByZXR1cm4gdGhlIHR5cGUgb2Ygc2VhcmNoIGl0IGlzIChzZWUgZW51bSBhYm92ZSkuCisgKiBUaGlzIGRvZXMgbW9kaWZ5IGJ1ZmYuCisgKgorICogUmV0dXJucyBlbnVtIHR5cGUuCisgKiAgc2VhcmNoIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdXNlIGZvciBjb21wYXJpc29uLgorICogIG5vdCByZXR1cm5zIDEgaWYgYnVmZiBzdGFydGVkIHdpdGggYSAnIScKKyAqICAgICAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludAorZnRyYWNlX3NldHVwX2dsb2IoY2hhciAqYnVmZiwgaW50IGxlbiwgY2hhciAqKnNlYXJjaCwgaW50ICpub3QpCiB7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKLQljaGFyICpzZWFyY2ggPSBOVUxMOwotCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7Ci0Jc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAlpbnQgdHlwZSA9IE1BVENIX0ZVTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOwotCXVuc2lnbmVkIGksIG1hdGNoID0gMCwgc2VhcmNoX2xlbiA9IDA7Ci0JaW50IG5vdCA9IDA7CisJaW50IGk7CiAKIAlpZiAoYnVmZlswXSA9PSAnIScpIHsKLQkJbm90ID0gMTsKKwkJKm5vdCA9IDE7CiAJCWJ1ZmYrKzsKIAkJbGVuLS07Ci0JfQorCX0gZWxzZQorCQkqbm90ID0gMDsKKworCSpzZWFyY2ggPSBidWZmOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWlmIChidWZmW2ldID09ICcqJykgewogCQkJaWYgKCFpKSB7Ci0JCQkJc2VhcmNoID0gYnVmZiArIGkgKyAxOworCQkJCSpzZWFyY2ggPSBidWZmICsgMTsKIAkJCQl0eXBlID0gTUFUQ0hfRU5EX09OTFk7Ci0JCQkJc2VhcmNoX2xlbiA9IGxlbiAtIChpICsgMSk7CiAJCQl9IGVsc2UgewotCQkJCWlmICh0eXBlID09IE1BVENIX0VORF9PTkxZKSB7CisJCQkJaWYgKHR5cGUgPT0gTUFUQ0hfRU5EX09OTFkpCiAJCQkJCXR5cGUgPSBNQVRDSF9NSURETEVfT05MWTsKLQkJCQl9IGVsc2UgewotCQkJCQltYXRjaCA9IGk7CisJCQkJZWxzZQogCQkJCQl0eXBlID0gTUFUQ0hfRlJPTlRfT05MWTsKLQkJCQl9CiAJCQkJYnVmZltpXSA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CiAKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7Ci0JaWYgKGVuYWJsZSkKLQkJZnRyYWNlX2ZpbHRlcmVkID0gMTsKLQlwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsKLQl3aGlsZSAocGcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBnLT5pbmRleDsgaSsrKSB7Ci0JCQlpbnQgbWF0Y2hlZCA9IDA7Ci0JCQljaGFyICpwdHI7CisJcmV0dXJuIHR5cGU7Cit9CiAKLQkJCXJlYyA9ICZwZy0+cmVjb3Jkc1tpXTsKLQkJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKK3N0YXRpYyBpbnQgZnRyYWNlX21hdGNoKGNoYXIgKnN0ciwgY2hhciAqcmVnZXgsIGludCBsZW4sIGludCB0eXBlKQoreworCWludCBtYXRjaGVkID0gMDsKKwljaGFyICpwdHI7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1BVENIX0ZVTEw6CisJCWlmIChzdHJjbXAoc3RyLCByZWdleCkgPT0gMCkKKwkJCW1hdGNoZWQgPSAxOworCQlicmVhazsKKwljYXNlIE1BVENIX0ZST05UX09OTFk6CisJCWlmIChzdHJuY21wKHN0ciwgcmVnZXgsIGxlbikgPT0gMCkKKwkJCW1hdGNoZWQgPSAxOworCQlicmVhazsKKwljYXNlIE1BVENIX01JRERMRV9PTkxZOgorCQlpZiAoc3Ryc3RyKHN0ciwgcmVnZXgpKQorCQkJbWF0Y2hlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgTUFUQ0hfRU5EX09OTFk6CisJCXB0ciA9IHN0cnN0cihzdHIsIHJlZ2V4KTsKKwkJaWYgKHB0ciAmJiAocHRyW2xlbl0gPT0gMCkpCisJCQltYXRjaGVkID0gMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG1hdGNoZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9tYXRjaF9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgY2hhciAqcmVnZXgsIGludCBsZW4sIGludCB0eXBlKQoreworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisKKwlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKKwlyZXR1cm4gZnRyYWNlX21hdGNoKHN0ciwgcmVnZXgsIGxlbiwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0cmFjZV9tYXRjaF9yZWNvcmRzKGNoYXIgKmJ1ZmYsIGludCBsZW4sIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHNlYXJjaF9sZW47CisJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKKwlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwljaGFyICpzZWFyY2g7CisJaW50IHR5cGU7CisJaW50IG5vdDsKKworCWZsYWcgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7CisJdHlwZSA9IGZ0cmFjZV9zZXR1cF9nbG9iKGJ1ZmYsIGxlbiwgJnNlYXJjaCwgJm5vdCk7CisKKwlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CisKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisKKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKGZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7CisJCQlpZiAobm90KQorCQkJCXJlYy0+ZmxhZ3MgJj0gfmZsYWc7CisJCQllbHNlCisJCQkJcmVjLT5mbGFncyB8PSBmbGFnOworCQl9CisJCS8qCisJCSAqIE9ubHkgZW5hYmxlIGZpbHRlcmluZyBpZiB3ZSBoYXZlIGEgZnVuY3Rpb24gdGhhdAorCQkgKiBpcyBmaWx0ZXJlZCBvbi4KKwkJICovCisJCWlmIChlbmFibGUgJiYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRklMVEVSKSkKKwkJCWZ0cmFjZV9maWx0ZXJlZCA9IDE7CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGNoYXIgKm1vZCwKKwkJCSAgIGNoYXIgKnJlZ2V4LCBpbnQgbGVuLCBpbnQgdHlwZSkKK3sKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCWNoYXIgKm1vZG5hbWU7CisKKwlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgJm1vZG5hbWUsIHN0cik7CisKKwlpZiAoIW1vZG5hbWUgfHwgc3RyY21wKG1vZG5hbWUsIG1vZCkpCisJCXJldHVybiAwOworCisJLyogYmxhbmsgc2VhcmNoIG1lYW5zIHRvIG1hdGNoIGFsbCBmdW5jcyBpbiB0aGUgbW9kICovCisJaWYgKGxlbikKKwkJcmV0dXJuIGZ0cmFjZV9tYXRjaChzdHIsIHJlZ2V4LCBsZW4sIHR5cGUpOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkcyhjaGFyICpidWZmLCBjaGFyICptb2QsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgc2VhcmNoX2xlbiA9IDA7CisJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKKwlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOworCWludCB0eXBlID0gTUFUQ0hfRlVMTDsKKwljaGFyICpzZWFyY2ggPSBidWZmOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwlpbnQgbm90ID0gMDsKKworCWZsYWcgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7CisKKwkvKiBibGFuayBvciAnKicgbWVhbiB0aGUgc2FtZSAqLworCWlmIChzdHJjbXAoYnVmZiwgIioiKSA9PSAwKQorCQlidWZmWzBdID0gMDsKKworCS8qIGhhbmRsZSB0aGUgY2FzZSBvZiAnZG9udCBmaWx0ZXIgdGhpcyBtb2R1bGUnICovCisJaWYgKHN0cmNtcChidWZmLCAiISIpID09IDAgfHwgc3RyY21wKGJ1ZmYsICIhKiIpID09IDApIHsKKwkJYnVmZlswXSA9IDA7CisJCW5vdCA9IDE7CisJfQorCisJaWYgKHN0cmxlbihidWZmKSkgeworCQl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoYnVmZiwgc3RybGVuKGJ1ZmYpLCAmc2VhcmNoLCAmbm90KTsKKwkJc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2gpOworCX0KKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKworCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCisJCQljb250aW51ZTsKKworCQlpZiAoZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmQocmVjLCBtb2QsCisJCQkJCSAgICAgICBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7CisJCQlpZiAobm90KQorCQkJCXJlYy0+ZmxhZ3MgJj0gfmZsYWc7CisJCQllbHNlCisJCQkJcmVjLT5mbGFncyB8PSBmbGFnOworCQl9CisJCWlmIChlbmFibGUgJiYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRklMVEVSKSkKKwkJCWZ0cmFjZV9maWx0ZXJlZCA9IDE7CisKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKK30KKworLyoKKyAqIFdlIHJlZ2lzdGVyIHRoZSBtb2R1bGUgY29tbWFuZCBhcyBhIHRlbXBsYXRlIHRvIHNob3cgb3RoZXJzIGhvdworICogdG8gcmVnaXN0ZXIgdGhlIGEgY29tbWFuZCBhcyB3ZWxsLgorICovCisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9tb2RfY2FsbGJhY2soY2hhciAqZnVuYywgY2hhciAqY21kLCBjaGFyICpwYXJhbSwgaW50IGVuYWJsZSkKK3sKKwljaGFyICptb2Q7CisKKwkvKgorCSAqIGNtZCA9PSAnbW9kJyBiZWNhdXNlIHdlIG9ubHkgcmVnaXN0ZXJlZCB0aGlzIGZ1bmMKKwkgKiBmb3IgdGhlICdtb2QnIGZ0cmFjZV9mdW5jX2NvbW1hbmQuCisJICogQnV0IGlmIHlvdSByZWdpc3RlciBvbmUgZnVuYyB3aXRoIG11bHRpcGxlIGNvbW1hbmRzLAorCSAqIHlvdSBjYW4gdGVsbCB3aGljaCBjb21tYW5kIHdhcyB1c2VkIGJ5IHRoZSBjbWQKKwkgKiBwYXJhbWV0ZXIuCisJICovCisKKwkvKiB3ZSBtdXN0IGhhdmUgYSBtb2R1bGUgbmFtZSAqLworCWlmICghcGFyYW0pCisJCXJldHVybiAtRUlOVkFMOworCisJbW9kID0gc3Ryc2VwKCZwYXJhbSwgIjoiKTsKKwlpZiAoIXN0cmxlbihtb2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkcyhmdW5jLCBtb2QsIGVuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCBmdHJhY2VfbW9kX2NtZCA9IHsKKwkubmFtZQkJCT0gIm1vZCIsCisJLmZ1bmMJCQk9IGZ0cmFjZV9tb2RfY2FsbGJhY2ssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmdHJhY2VfbW9kX2NtZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKCZmdHJhY2VfbW9kX2NtZCk7Cit9CitkZXZpY2VfaW5pdGNhbGwoZnRyYWNlX21vZF9jbWRfaW5pdCk7CisKK3N0YXRpYyB2b2lkCitmdW5jdGlvbl90cmFjZV9wcm9iZV9jYWxsKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSAqZW50cnk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBsb25nIGtleTsKKwlpbnQgcmVzY2hlZDsKKworCWtleSA9IGhhc2hfbG9uZyhpcCwgRlRSQUNFX0hBU0hfQklUUyk7CisKKwloaGQgPSAmZnRyYWNlX2Z1bmNfaGFzaFtrZXldOworCisJaWYgKGhsaXN0X2VtcHR5KGhoZCkpCisJCXJldHVybjsKKworCS8qCisJICogRGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGVzZSBjYWxscyB0byBwcmV2ZW50IGEgUkNVIGdyYWNlCisJICogcGVyaW9kLiBUaGlzIHN5bmNzIHRoZSBoYXNoIGl0ZXJhdGlvbiBhbmQgZnJlZWluZyBvZiBpdGVtcworCSAqIG9uIHRoZSBoYXNoLiByY3VfcmVhZF9sb2NrIGlzIHRvbyBkYW5nZXJvdXMgaGVyZS4KKwkgKi8KKwlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbiwgaGhkLCBub2RlKSB7CisJCWlmIChlbnRyeS0+aXAgPT0gaXApCisJCQllbnRyeS0+b3BzLT5mdW5jKGlwLCBwYXJlbnRfaXAsICZlbnRyeS0+ZGF0YSk7CisJfQorCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKK30KKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX3Byb2JlX29wcyBfX3JlYWRfbW9zdGx5ID0KK3sKKwkuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX3Byb2JlX2NhbGwsCit9OworCitzdGF0aWMgaW50IGZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkOworCitzdGF0aWMgdm9pZCBfX2VuYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmIChmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9GVU5DX0hBU0hTSVpFOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmhoZCA9ICZmdHJhY2VfZnVuY19oYXNoW2ldOworCQlpZiAoaGhkLT5maXJzdCkKKwkJCWJyZWFrOworCX0KKwkvKiBOb3RoaW5nIHJlZ2lzdGVyZWQ/ICovCisJaWYgKGkgPT0gRlRSQUNFX0ZVTkNfSEFTSFNJWkUpCisJCXJldHVybjsKKworCV9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9wcm9iZV9vcHMpOworCWZ0cmFjZV9zdGFydHVwKDApOworCWZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkID0gMTsKK30KKworc3RhdGljIHZvaWQgX19kaXNhYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZSh2b2lkKQoreworCWludCBpOworCisJaWYgKCFmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9GVU5DX0hBU0hTSVpFOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmhoZCA9ICZmdHJhY2VfZnVuY19oYXNoW2ldOworCQlpZiAoaGhkLT5maXJzdCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBubyBtb3JlIGZ1bmNzIGxlZnQgKi8KKwlfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9wcm9iZV9vcHMpOworCWZ0cmFjZV9zaHV0ZG93bigwKTsKKwlmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCA9IDA7Cit9CisKKworc3RhdGljIHZvaWQgZnRyYWNlX2ZyZWVfZW50cnlfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmhwKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSAqZW50cnkgPQorCQljb250YWluZXJfb2YocmhwLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUsIHJjdSk7CisKKwlpZiAoZW50cnktPm9wcy0+ZnJlZSkKKwkJZW50cnktPm9wcy0+ZnJlZSgmZW50cnktPmRhdGEpOworCWtmcmVlKGVudHJ5KTsKK30KKworCitpbnQKK3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKmVudHJ5OworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlpbnQgdHlwZSwgbGVuLCBub3Q7CisJdW5zaWduZWQgbG9uZyBrZXk7CisJaW50IGNvdW50ID0gMDsKKwljaGFyICpzZWFyY2g7CisKKwl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoZ2xvYiwgc3RybGVuKGdsb2IpLCAmc2VhcmNoLCAmbm90KTsKKwlsZW4gPSBzdHJsZW4oc2VhcmNoKTsKKworCS8qIHdlIGRvIG5vdCBzdXBwb3J0ICchJyBmb3IgZnVuY3Rpb24gcHJvYmVzICovCisJaWYgKFdBUk5fT04obm90KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisKKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBsZW4sIHR5cGUpKQorCQkJY29udGludWU7CisKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlbnRyeSkgeworCQkJLyogSWYgd2UgZGlkIG5vdCBwcm9jZXNzIGFueSwgdGhlbiByZXR1cm4gZXJyb3IgKi8KKwkJCWlmICghY291bnQpCisJCQkJY291bnQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisKKwkJY291bnQrKzsKKworCQllbnRyeS0+ZGF0YSA9IGRhdGE7CisKKwkJLyoKKwkJICogVGhlIGNhbGxlciBtaWdodCB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsCisJCSAqIGZvciBlYWNoIGZ1bmN0aW9uIHdlIGZpbmQuIFdlIGNhbGwgdGhlIGNhbGxiYWNrCisJCSAqIHRvIGdpdmUgdGhlIGNhbGxlciBhbiBvcHBvcnR1bml0eSB0byBkbyBzby4KKwkJICovCisJCWlmIChvcHMtPmNhbGxiYWNrKSB7CisJCQlpZiAob3BzLT5jYWxsYmFjayhyZWMtPmlwLCAmZW50cnktPmRhdGEpIDwgMCkgeworCQkJCS8qIGNhbGxlciBkb2VzIG5vdCBsaWtlIHRoaXMgZnVuYyAqLworCQkJCWtmcmVlKGVudHJ5KTsKIAkJCQljb250aW51ZTsKLQkJCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCQkJc3dpdGNoICh0eXBlKSB7Ci0JCQljYXNlIE1BVENIX0ZVTEw6Ci0JCQkJaWYgKHN0cmNtcChzdHIsIGJ1ZmYpID09IDApCi0JCQkJCW1hdGNoZWQgPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNQVRDSF9GUk9OVF9PTkxZOgotCQkJCWlmIChtZW1jbXAoc3RyLCBidWZmLCBtYXRjaCkgPT0gMCkKLQkJCQkJbWF0Y2hlZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1BVENIX01JRERMRV9PTkxZOgotCQkJCWlmIChzdHJzdHIoc3RyLCBzZWFyY2gpKQotCQkJCQltYXRjaGVkID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTUFUQ0hfRU5EX09OTFk6Ci0JCQkJcHRyID0gc3Ryc3RyKHN0ciwgc2VhcmNoKTsKLQkJCQlpZiAocHRyICYmIChwdHJbc2VhcmNoX2xlbl0gPT0gMCkpCi0JCQkJCW1hdGNoZWQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKG1hdGNoZWQpIHsKLQkJCQlpZiAobm90KQotCQkJCQlyZWMtPmZsYWdzICY9IH5mbGFnOwotCQkJCWVsc2UKLQkJCQkJcmVjLT5mbGFncyB8PSBmbGFnOwogCQkJfQogCQl9Ci0JCXBnID0gcGctPm5leHQ7CisKKwkJZW50cnktPm9wcyA9IG9wczsKKwkJZW50cnktPmlwID0gcmVjLT5pcDsKKworCQlrZXkgPSBoYXNoX2xvbmcoZW50cnktPmlwLCBGVFJBQ0VfSEFTSF9CSVRTKTsKKwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZlbnRyeS0+bm9kZSwgJmZ0cmFjZV9mdW5jX2hhc2hba2V5XSk7CisKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwlfX2VuYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoKTsKKworIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2VudW0geworCVBST0JFX1RFU1RfRlVOQwkJPSAxLAorCVBST0JFX1RFU1RfREFUQQkJPSAyCit9OworCitzdGF0aWMgdm9pZAorX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAorCQkJCSAgdm9pZCAqZGF0YSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKm4sICp0bXA7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKwlpbnQgdHlwZSA9IE1BVENIX0ZVTEw7CisJaW50IGksIGxlbiA9IDA7CisJY2hhciAqc2VhcmNoOworCisJaWYgKGdsb2IgJiYgKHN0cmNtcChnbG9iLCAiKiIpIHx8ICFzdHJsZW4oZ2xvYikpKQorCQlnbG9iID0gTlVMTDsKKwllbHNlIHsKKwkJaW50IG5vdDsKKworCQl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoZ2xvYiwgc3RybGVuKGdsb2IpLCAmc2VhcmNoLCAmbm90KTsKKwkJbGVuID0gc3RybGVuKHNlYXJjaCk7CisKKwkJLyogd2UgZG8gbm90IHN1cHBvcnQgJyEnIGZvciBmdW5jdGlvbiBwcm9iZXMgKi8KKwkJaWYgKFdBUk5fT04obm90KSkKKwkJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX0ZVTkNfSEFTSFNJWkU7IGkrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkID0gJmZ0cmFjZV9mdW5jX2hhc2hbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbiwgdG1wLCBoaGQsIG5vZGUpIHsKKworCQkJLyogYnJlYWsgdXAgaWYgc3RhdGVtZW50cyBmb3IgcmVhZGFiaWxpdHkgKi8KKwkJCWlmICgoZmxhZ3MgJiBQUk9CRV9URVNUX0ZVTkMpICYmIGVudHJ5LT5vcHMgIT0gb3BzKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKGZsYWdzICYgUFJPQkVfVEVTVF9EQVRBKSAmJiBlbnRyeS0+ZGF0YSAhPSBkYXRhKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBkbyB0aGlzIGxhc3QsIHNpbmNlIGl0IGlzIHRoZSBtb3N0IGV4cGVuc2l2ZSAqLworCQkJaWYgKGdsb2IpIHsKKwkJCQlrYWxsc3ltc19sb29rdXAoZW50cnktPmlwLCBOVUxMLCBOVUxMLAorCQkJCQkJTlVMTCwgc3RyKTsKKwkJCQlpZiAoIWZ0cmFjZV9tYXRjaChzdHIsIGdsb2IsIGxlbiwgdHlwZSkpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlobGlzdF9kZWwoJmVudHJ5LT5ub2RlKTsKKwkJCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBmdHJhY2VfZnJlZV9lbnRyeV9yY3UpOworCQl9CisJfQorCV9fZGlzYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKK30KKwordm9pZAordW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywKKwkJCQl2b2lkICpkYXRhKQoreworCV9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoZ2xvYiwgb3BzLCBkYXRhLAorCQkJCQkgIFBST0JFX1RFU1RfRlVOQyB8IFBST0JFX1RFU1RfREFUQSk7Cit9CisKK3ZvaWQKK3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2Z1bmMoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcykKK3sKKwlfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGdsb2IsIG9wcywgTlVMTCwgUFJPQkVfVEVTVF9GVU5DKTsKK30KKwordm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9hbGwoY2hhciAqZ2xvYikKK3sKKwlfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGdsb2IsIE5VTEwsIE5VTEwsIDApOworfQorCitzdGF0aWMgTElTVF9IRUFEKGZ0cmFjZV9jb21tYW5kcyk7CitzdGF0aWMgREVGSU5FX01VVEVYKGZ0cmFjZV9jbWRfbXV0ZXgpOworCitpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqcDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9jbWRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmZ0cmFjZV9jb21tYW5kcywgbGlzdCkgeworCQlpZiAoc3RyY21wKGNtZC0+bmFtZSwgcC0+bmFtZSkgPT0gMCkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCWxpc3RfYWRkKCZjbWQtPmxpc3QsICZmdHJhY2VfY29tbWFuZHMpOworIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfY21kX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB1bnJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKnAsICpuOworCWludCByZXQgPSAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2NtZF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZmdHJhY2VfY29tbWFuZHMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChjbWQtPm5hbWUsIHAtPm5hbWUpID09IDApIHsKKwkJCXJldCA9IDA7CisJCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKyBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZnRyYWNlX2NtZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KGNoYXIgKmJ1ZmYsIGludCBsZW4sIGludCBlbmFibGUpCit7CisJY2hhciAqZnVuYywgKmNvbW1hbmQsICpuZXh0ID0gYnVmZjsKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqcDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWZ1bmMgPSBzdHJzZXAoJm5leHQsICI6Iik7CisKKwlpZiAoIW5leHQpIHsKKwkJZnRyYWNlX21hdGNoX3JlY29yZHMoZnVuYywgbGVuLCBlbmFibGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjb21tYW5kIGZvdW5kICovCisKKwljb21tYW5kID0gc3Ryc2VwKCZuZXh0LCAiOiIpOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2NtZF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmZnRyYWNlX2NvbW1hbmRzLCBsaXN0KSB7CisJCWlmIChzdHJjbXAocC0+bmFtZSwgY29tbWFuZCkgPT0gMCkgeworCQkJcmV0ID0gcC0+ZnVuYyhmdW5jLCBjb21tYW5kLCBuZXh0LCBlbmFibGUpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfY21kX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xMTg3LDcgKzE3NDgsMTAgQEAKIAlpZiAoaXNzcGFjZShjaCkpIHsKIAkJaXRlci0+ZmlsdGVyZWQrKzsKIAkJaXRlci0+YnVmZmVyW2l0ZXItPmJ1ZmZlcl9pZHhdID0gMDsKLQkJZnRyYWNlX21hdGNoKGl0ZXItPmJ1ZmZlciwgaXRlci0+YnVmZmVyX2lkeCwgZW5hYmxlKTsKKwkJcmV0ID0gZnRyYWNlX3Byb2Nlc3NfcmVnZXgoaXRlci0+YnVmZmVyLAorCQkJCQkgICBpdGVyLT5idWZmZXJfaWR4LCBlbmFibGUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CiAJCWl0ZXItPmJ1ZmZlcl9pZHggPSAwOwogCX0gZWxzZQogCQlpdGVyLT5mbGFncyB8PSBGVFJBQ0VfSVRFUl9DT05UOwpAQCAtMTIyNiw3ICsxNzkwLDcgQEAKIAlpZiAocmVzZXQpCiAJCWZ0cmFjZV9maWx0ZXJfcmVzZXQoZW5hYmxlKTsKIAlpZiAoYnVmKQotCQlmdHJhY2VfbWF0Y2goYnVmLCBsZW4sIGVuYWJsZSk7CisJCWZ0cmFjZV9tYXRjaF9yZWNvcmRzKGJ1ZiwgbGVuLCBlbmFibGUpOwogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwogfQogCkBAIC0xMjc2LDE1ICsxODQwLDEzIEBACiAJaWYgKGl0ZXItPmJ1ZmZlcl9pZHgpIHsKIAkJaXRlci0+ZmlsdGVyZWQrKzsKIAkJaXRlci0+YnVmZmVyW2l0ZXItPmJ1ZmZlcl9pZHhdID0gMDsKLQkJZnRyYWNlX21hdGNoKGl0ZXItPmJ1ZmZlciwgaXRlci0+YnVmZmVyX2lkeCwgZW5hYmxlKTsKKwkJZnRyYWNlX21hdGNoX3JlY29yZHMoaXRlci0+YnVmZmVyLCBpdGVyLT5idWZmZXJfaWR4LCBlbmFibGUpOwogCX0KIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7Ci0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlpZiAoZnRyYWNlX3N0YXJ0X3VwICYmIGZ0cmFjZV9lbmFibGVkKQogCQlmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKEZUUkFDRV9FTkFCTEVfQ0FMTFMpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwotCW11dGV4X3VubG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCWtmcmVlKGl0ZXIpOwogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwpAQCAtMTMwMywzMSArMTg2NSwzMSBAQAogCXJldHVybiBmdHJhY2VfcmVnZXhfcmVsZWFzZShpbm9kZSwgZmlsZSwgMCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9hdmFpbF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2F2YWlsX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2VfYXZhaWxfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBmdHJhY2VfYXZhaWxfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9mYWlsdXJlc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2ZhaWx1cmVzX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2VfZmFpbHVyZXNfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBmdHJhY2VfYXZhaWxfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9maWx0ZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9maWx0ZXJfZm9wcyA9IHsKIAkub3BlbiA9IGZ0cmFjZV9maWx0ZXJfb3BlbiwKLQkucmVhZCA9IGZ0cmFjZV9yZWdleF9yZWFkLAorCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gZnRyYWNlX2ZpbHRlcl93cml0ZSwKIAkubGxzZWVrID0gZnRyYWNlX3JlZ2V4X2xzZWVrLAogCS5yZWxlYXNlID0gZnRyYWNlX2ZpbHRlcl9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX25vdHJhY2VfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ub3RyYWNlX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2Vfbm90cmFjZV9vcGVuLAotCS5yZWFkID0gZnRyYWNlX3JlZ2V4X3JlYWQsCisJLnJlYWQgPSBzZXFfcmVhZCwKIAkud3JpdGUgPSBmdHJhY2Vfbm90cmFjZV93cml0ZSwKIAkubGxzZWVrID0gZnRyYWNlX3JlZ2V4X2xzZWVrLAogCS5yZWxlYXNlID0gZnRyYWNlX25vdHJhY2VfcmVsZWFzZSwKQEAgLTEzNjAsNiArMTkyMiwxMCBAQAogCiAJbXV0ZXhfbG9jaygmZ3JhcGhfbG9jayk7CiAKKwkvKiBOb3RoaW5nLCB0ZWxsIGdfc2hvdyB0byBwcmludCBhbGwgZnVuY3Rpb25zIGFyZSBlbmFibGVkICovCisJaWYgKCFmdHJhY2VfZ3JhcGhfY291bnQgJiYgISpwb3MpCisJCXJldHVybiAodm9pZCAqKTE7CisKIAlwID0gZ19uZXh0KG0sIHAsIHBvcyk7CiAKIAlyZXR1cm4gcDsKQEAgLTEzNzgsNiArMTk0NCwxMSBAQAogCWlmICghcHRyKQogCQlyZXR1cm4gMDsKIAorCWlmIChwdHIgPT0gKHVuc2lnbmVkIGxvbmcgKikxKSB7CisJCXNlcV9wcmludGYobSwgIiMjIyMgYWxsIGZ1bmN0aW9ucyBlbmFibGVkICMjIyNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlrYWxsc3ltc19sb29rdXAoKnB0ciwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIAogCXNlcV9wcmludGYobSwgIiVzXG4iLCBzdHIpOwpAQCAtMTQyMCw1MyArMTk5MSw1MyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1mdHJhY2VfZ3JhcGhfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCi0JCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCi17Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCXJldHVybiBzZXFfcmVhZChmaWxlLCB1YnVmLCBjbnQsIHBwb3MpOwotCWVsc2UKLQkJcmV0dXJuIC1FUEVSTTsKLX0KLQogc3RhdGljIGludAotZnRyYWNlX3NldF9mdW5jKHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgaWR4LCBjaGFyICpidWZmZXIpCitmdHJhY2Vfc2V0X2Z1bmModW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqaWR4LCBjaGFyICpidWZmZXIpCiB7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJaW50IHNlYXJjaF9sZW47CiAJaW50IGZvdW5kID0gMDsKLQlpbnQgaSwgajsKKwlpbnQgdHlwZSwgbm90OworCWNoYXIgKnNlYXJjaDsKKwlib29sIGV4aXN0czsKKwlpbnQgaTsKIAogCWlmIChmdHJhY2VfZGlzYWJsZWQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOworCS8qIGRlY29kZSByZWdleCAqLworCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihidWZmZXIsIHN0cmxlbihidWZmZXIpLCAmc2VhcmNoLCAmbm90KTsKKwlpZiAobm90KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAocGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7IHBnOyBwZyA9IHBnLT5uZXh0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgewotCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOworCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKIAotCQkJaWYgKHJlYy0+ZmxhZ3MgJiAoRlRSQUNFX0ZMX0ZBSUxFRCB8IEZUUkFDRV9GTF9GUkVFKSkKLQkJCQljb250aW51ZTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CiAKLQkJCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCQkJaWYgKHN0cmNtcChzdHIsIGJ1ZmZlcikgPT0gMCkgeworCQlpZiAoKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQorCQkJYnJlYWs7CisKKwkJaWYgKHJlYy0+ZmxhZ3MgJiAoRlRSQUNFX0ZMX0ZBSUxFRCB8IEZUUkFDRV9GTF9GUkVFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgeworCQkJLyogZW5zdXJlIGl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBhcnJheSAqLworCQkJZXhpc3RzID0gZmFsc2U7CisJCQlmb3IgKGkgPSAwOyBpIDwgKmlkeDsgaSsrKQorCQkJCWlmIChhcnJheVtpXSA9PSByZWMtPmlwKSB7CisJCQkJCWV4aXN0cyA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmICghZXhpc3RzKSB7CisJCQkJYXJyYXlbKCppZHgpKytdID0gcmVjLT5pcDsKIAkJCQlmb3VuZCA9IDE7Ci0JCQkJZm9yIChqID0gMDsgaiA8IGlkeDsgaisrKQotCQkJCQlpZiAoYXJyYXlbal0gPT0gcmVjLT5pcCkgewotCQkJCQkJZm91bmQgPSAwOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQlpZiAoZm91bmQpCi0JCQkJCWFycmF5W2lkeF0gPSByZWMtPmlwOwotCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiBmb3VuZCA/IDAgOiAtRUlOVkFMOwogfQpAQCAtMTUzNCwxMyArMjEwNSwxMSBAQAogCX0KIAlidWZmZXJbaW5kZXhdID0gMDsKIAotCS8qIHdlIGFsbG93IG9ubHkgb25lIGF0IGEgdGltZSAqLwotCXJldCA9IGZ0cmFjZV9zZXRfZnVuYyhhcnJheSwgZnRyYWNlX2dyYXBoX2NvdW50LCBidWZmZXIpOworCS8qIHdlIGFsbG93IG9ubHkgb25lIGV4cHJlc3Npb24gYXQgYSB0aW1lICovCisJcmV0ID0gZnRyYWNlX3NldF9mdW5jKGFycmF5LCAmZnRyYWNlX2dyYXBoX2NvdW50LCBidWZmZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JZnRyYWNlX2dyYXBoX2NvdW50Kys7Ci0KIAlmaWxlLT5mX3BvcyArPSByZWFkOwogCiAJcmV0ID0gcmVhZDsKQEAgLTE1NTIsNyArMjEyMSw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ncmFwaF9mb3BzID0gewogCS5vcGVuID0gZnRyYWNlX2dyYXBoX29wZW4sCi0JLnJlYWQgPSBmdHJhY2VfZ3JhcGhfcmVhZCwKKwkucmVhZCA9IHNlcV9yZWFkLAogCS53cml0ZSA9IGZ0cmFjZV9ncmFwaF93cml0ZSwKIH07CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwpAQCAtMTYwNCw3ICsyMTczLDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJcCA9IHN0YXJ0OwogCXdoaWxlIChwIDwgZW5kKSB7CiAJCWFkZHIgPSBmdHJhY2VfY2FsbF9hZGp1c3QoKnArKyk7CkBAIC0xNjIzLDcgKzIxOTIsNyBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmdHJhY2VfdXBkYXRlX2NvZGUobW9kKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MDAsNyArMjI2OSw3IEBACiAJaWYgKGZ0cmFjZV9waWRfdHJhY2UgPT0gZnRyYWNlX3N3YXBwZXJfcGlkKQogCQlyID0gc3ByaW50ZihidWYsICJzd2FwcGVyIHRhc2tzXG4iKTsKIAllbHNlIGlmIChmdHJhY2VfcGlkX3RyYWNlKQotCQlyID0gc3ByaW50ZihidWYsICIldVxuIiwgcGlkX25yKGZ0cmFjZV9waWRfdHJhY2UpKTsKKwkJciA9IHNwcmludGYoYnVmLCAiJXVcbiIsIHBpZF92bnIoZnRyYWNlX3BpZF90cmFjZSkpOwogCWVsc2UKIAkJciA9IHNwcmludGYoYnVmLCAibm8gcGlkXG4iKTsKIApAQCAtMTc5Niw3ICsyMzY1LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJaWYgKHZhbCA8IDApIHsKIAkJLyogZGlzYWJsZSBwaWQgdHJhY2luZyAqLwogCQlpZiAoIWZ0cmFjZV9waWRfdHJhY2UpCkBAIC0xODM1LDEyICsyNDA0LDEyIEBACiAJZnRyYWNlX3N0YXJ0dXBfZW5hYmxlKDApOwogCiAgb3V0OgotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX3BpZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX3BpZF9mb3BzID0gewogCS5yZWFkID0gZnRyYWNlX3BpZF9yZWFkLAogCS53cml0ZSA9IGZ0cmFjZV9waWRfd3JpdGUsCiB9OwpAQCAtMTg2Myw3ICsyNDMyLDYgQEAKIAkJCSAgICInc2V0X2Z0cmFjZV9waWQnIGVudHJ5XG4iKTsKIAlyZXR1cm4gMDsKIH0KLQogZnNfaW5pdGNhbGwoZnRyYWNlX2luaXRfZGVidWdmcyk7CiAKIC8qKgpAQCAtMTg5OCwxMiArMjQ2NiwxMiBAQAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm4gLTE7CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldCA9IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcyk7CiAJZnRyYWNlX3N0YXJ0dXAoMCk7CiAKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkxNywxMCArMjQ4NSwxMCBAQAogewogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlyZXQgPSBfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcyk7CiAJZnRyYWNlX3NodXRkb3duKDApOwotCW11dGV4X3VubG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xOTM1LDcgKzI1MDMsNyBAQAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0ICA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCkBAIC0xOTY0LDcgKzI1MzIsNyBAQAogCX0KIAogIG91dDoKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAyOSw2ICsyNTk3LDM4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQKK2Z0cmFjZV9ncmFwaF9wcm9iZV9zY2hlZF9zd2l0Y2goc3RydWN0IHJxICpfX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3RhbXA7CisJaW50IGluZGV4OworCisJLyoKKwkgKiBEb2VzIHRoZSB1c2VyIHdhbnQgdG8gY291bnQgdGhlIHRpbWUgYSBmdW5jdGlvbiB3YXMgYXNsZWVwLgorCSAqIElmIHNvLCBkbyBub3QgdXBkYXRlIHRoZSB0aW1lIHN0YW1wcy4KKwkgKi8KKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NMRUVQX1RJTUUpCisJCXJldHVybjsKKworCXRpbWVzdGFtcCA9IHRyYWNlX2Nsb2NrX2xvY2FsKCk7CisKKwlwcmV2LT5mdHJhY2VfdGltZXN0YW1wID0gdGltZXN0YW1wOworCisJLyogb25seSBwcm9jZXNzIHRhc2tzIHRoYXQgd2UgdGltZXN0YW1wZWQgKi8KKwlpZiAoIW5leHQtPmZ0cmFjZV90aW1lc3RhbXApCisJCXJldHVybjsKKworCS8qCisJICogVXBkYXRlIGFsbCB0aGUgY291bnRlcnMgaW4gbmV4dCB0byBtYWtlIHVwIGZvciB0aGUKKwkgKiB0aW1lIG5leHQgd2FzIHNsZWVwaW5nLgorCSAqLworCXRpbWVzdGFtcCAtPSBuZXh0LT5mdHJhY2VfdGltZXN0YW1wOworCisJZm9yIChpbmRleCA9IG5leHQtPmN1cnJfcmV0X3N0YWNrOyBpbmRleCA+PSAwOyBpbmRleC0tKQorCQluZXh0LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lICs9IHRpbWVzdGFtcDsKK30KKwogLyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIGVhY2ggdGFzayAqLwogc3RhdGljIGludCBzdGFydF9ncmFwaF90cmFjaW5nKHZvaWQpCiB7CkBAIC0yMDUwLDYgKzI2NTAsMTMgQEAKIAkJcmV0ID0gYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QocmV0X3N0YWNrX2xpc3QpOwogCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKIAorCWlmICghcmV0KSB7CisJCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChmdHJhY2VfZ3JhcGhfcHJvYmVfc2NoZWRfc3dpdGNoKTsKKwkJaWYgKHJldCkKKwkJCXByX2luZm8oImZ0cmFjZV9ncmFwaDogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKKwkJCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zd2l0Y2hcbiIpOworCX0KKwogCWtmcmVlKHJldF9zdGFja19saXN0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA4MCw3ICsyNjg3LDEzIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCS8qIHdlIGN1cnJlbnRseSBhbGxvdyBvbmx5IG9uZSB0cmFjZXIgcmVnaXN0ZXJlZCBhdCBhIHRpbWUgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmZ0cmFjZV9ncmFwaF9hY3RpdmUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQogCiAJZnRyYWNlX3N1c3BlbmRfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IGZ0cmFjZV9zdXNwZW5kX25vdGlmaWVyX2NhbGw7CiAJcmVnaXN0ZXJfcG1fbm90aWZpZXIoJmZ0cmFjZV9zdXNwZW5kX25vdGlmaWVyKTsKQEAgLTIwOTgsMjEgKzI3MTEsMjYgQEAKIAlmdHJhY2Vfc3RhcnR1cChGVFJBQ0VfU1RBUlRfRlVOQ19SRVQpOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgodm9pZCkKIHsKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWlmICghdW5saWtlbHkoYXRvbWljX3JlYWQoJmZ0cmFjZV9ncmFwaF9hY3RpdmUpKSkKKwkJZ290byBvdXQ7CiAKIAlhdG9taWNfZGVjKCZmdHJhY2VfZ3JhcGhfYWN0aXZlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChmdHJhY2VfZ3JhcGhfcHJvYmVfc2NoZWRfc3dpdGNoKTsKIAlmdHJhY2VfZ3JhcGhfcmV0dXJuID0gKHRyYWNlX2Z1bmNfZ3JhcGhfcmV0X3QpZnRyYWNlX3N0dWI7CiAJZnRyYWNlX2dyYXBoX2VudHJ5ID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWI7CiAJZnRyYWNlX3NodXRkb3duKEZUUkFDRV9TVE9QX0ZVTkNfUkVUKTsKIAl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZmdHJhY2Vfc3VzcGVuZF9ub3RpZmllcik7CiAKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7Cisgb3V0OgorCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiAvKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovCkBAIC0yMTI3LDYgKzI3NDUsNyBAQAogCQl0LT5jdXJyX3JldF9zdGFjayA9IC0xOwogCQlhdG9taWNfc2V0KCZ0LT50cmFjaW5nX2dyYXBoX3BhdXNlLCAwKTsKIAkJYXRvbWljX3NldCgmdC0+dHJhY2Vfb3ZlcnJ1biwgMCk7CisJCXQtPmZ0cmFjZV90aW1lc3RhbXAgPSAwOwogCX0gZWxzZQogCQl0LT5yZXRfc3RhY2sgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjAxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBNZW1vcnkgYWxsb2NhdG9yIHRyYWNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQorICogQ29weXJpZ2h0IChDKSAyMDA4IFBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CisKKyNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCisvKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovCisjZGVmaW5lIFRSQUNFX0tNRU1fT1BUX01JTklNQUwJMHgxCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBrbWVtX29wdHNbXSA9IHsKKwkvKiBEZWZhdWx0IGRpc2FibGUgdGhlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KKwl7IFRSQUNFUl9PUFQoa21lbV9taW5pbWFsaXN0aWMsIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBrbWVtX3RyYWNlcl9mbGFncyA9IHsKKwkudmFsID0gMCwKKwkub3B0cyA9IGttZW1fb3B0cworfTsKKworCitzdGF0aWMgYm9vbCBrbWVtX3RyYWNpbmdfZW5hYmxlZCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqa21lbXRyYWNlX2FycmF5OworCitzdGF0aWMgaW50IGttZW1fdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWludCBjcHU7CisJa21lbXRyYWNlX2FycmF5ID0gdHI7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNwdV9wb3NzaWJsZV9tYXApCisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisKKwlrbWVtX3RyYWNpbmdfZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga21lbV90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWttZW1fdHJhY2luZ19lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGttZW10cmFjZV9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqcykKK3sKKwkvKiBEb24ndCBuZWVkIGhlYWRlcnMgZm9yIHRoZSBvcmlnaW5hbCBrbWVtdHJhY2Ugb3V0cHV0ICovCisJaWYgKCEoa21lbV90cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkpCisJCXJldHVybjsKKworCXNlcV9wcmludGYocywgIiNcbiIpOworCXNlcV9wcmludGYocywgIiMgQUxMT0MgIFRZUEUgIFJFUSAgIEdJVkVOICBGTEFHUyAgICAgIgorCQkJIiAgICAgIFBPSU5URVIgICAgICAgICBOT0RFICAgIENBTExFUlxuIik7CisJc2VxX3ByaW50ZihzLCAiIyBGUkVFICAgfCAgICAgIHwgICAgIHwgICAgICAgfCAgICAgICAiCisJCQkiICAgICAgIHwgICB8ICAgICAgICAgICAgfCAgICAgICAgfFxuIik7CisJc2VxX3ByaW50ZihzLCAiIyB8XG5cbiIpOworfQorCisvKgorICogVGhlIHR3byBmb2xsb3dpbmcgZnVuY3Rpb25zIGdpdmUgdGhlIG9yaWdpbmFsIG91dHB1dCBmcm9tIGttZW10cmFjZSwKKyAqIG9yIHNvbWV0aGluZyBjbG9zZSB0by4uLi5wZXJoYXBzIHRoZXkgbmVlZCBzb21lIG1pc3NpbmcgdGhpbmdzCisgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAora21lbXRyYWNlX3ByaW50X2FsbG9jX29yaWdpbmFsKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlpbnQgcmV0OworCisJLyogVGFrZW4gZnJvbSB0aGUgb2xkIGxpbnV4L2ttZW10cmFjZS5oICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAidHlwZV9pZCAlZCBjYWxsX3NpdGUgJWx1IHB0ciAlbHUgIgorCSAgImJ5dGVzX3JlcSAlbHUgYnl0ZXNfYWxsb2MgJWx1IGdmcF9mbGFncyAlbHUgbm9kZSAlZFxuIiwKKwkgICBlbnRyeS0+dHlwZV9pZCwgZW50cnktPmNhbGxfc2l0ZSwgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5wdHIsCisJICAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5ieXRlc19yZXEsICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+Ynl0ZXNfYWxsb2MsCisJICAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5nZnBfZmxhZ3MsIGVudHJ5LT5ub2RlKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK2ttZW10cmFjZV9wcmludF9mcmVlX29yaWdpbmFsKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCByZXQ7CisKKwkvKiBUYWtlbiBmcm9tIHRoZSBvbGQgbGludXgva21lbXRyYWNlLmggKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJ0eXBlX2lkICVkIGNhbGxfc2l0ZSAlbHUgcHRyICVsdVxuIiwKKwkgICBlbnRyeS0+dHlwZV9pZCwgZW50cnktPmNhbGxfc2l0ZSwgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5wdHIpOworCisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKKworLyogVGhlIHR3byBvdGhlciBmb2xsb3dpbmcgcHJvdmlkZSBhIG1vcmUgbWluaW1hbGlzdGljIG91dHB1dCAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitrbWVtdHJhY2VfcHJpbnRfYWxsb2NfY29tcHJlc3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlpbnQgcmV0OworCisJLyogQWxsb2MgZW50cnkgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICsgICAgICAiKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogVHlwZSAqLworCXN3aXRjaCAoZW50cnktPnR5cGVfaWQpIHsKKwljYXNlIEtNRU1UUkFDRV9UWVBFX0tNQUxMT0M6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIksgICAiKTsKKwkJYnJlYWs7CisJY2FzZSBLTUVNVFJBQ0VfVFlQRV9DQUNIRToKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiQyAgICIpOworCQlicmVhazsKKwljYXNlIEtNRU1UUkFDRV9UWVBFX1BBR0VTOgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJQICAgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIj8gICAiKTsKKwl9CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogUmVxdWVzdGVkICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTR6dSAgICIsIGVudHJ5LT5ieXRlc19yZXEpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBBbGxvY2F0ZWQgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNHp1ICAgIiwgZW50cnktPmJ5dGVzX2FsbG9jKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogRmxhZ3MKKwkgKiBUT0RPOiB3b3VsZCBiZSBiZXR0ZXIgdG8gc2VlIHRoZSBuYW1lIG9mIHRoZSBHRlAgZmxhZyBuYW1lcworCSAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiUwOHggICAiLCBlbnRyeS0+Z2ZwX2ZsYWdzKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogUG9pbnRlciB0byBhbGxvY2F0ZWQgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIweCV0eCAgICIsIChwdHJkaWZmX3QpZW50cnktPnB0cik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIE5vZGUgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNGQgICAiLCBlbnRyeS0+bm9kZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIENhbGwgc2l0ZSAqLworCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPmNhbGxfc2l0ZSwgMCk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitrbWVtdHJhY2VfcHJpbnRfZnJlZV9jb21wcmVzcyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlpbnQgcmV0OworCisJLyogRnJlZSBlbnRyeSAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgLSAgICAgICIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBUeXBlICovCisJc3dpdGNoIChlbnRyeS0+dHlwZV9pZCkgeworCWNhc2UgS01FTVRSQUNFX1RZUEVfS01BTExPQzoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiSyAgICAgIik7CisJCWJyZWFrOworCWNhc2UgS01FTVRSQUNFX1RZUEVfQ0FDSEU6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIkMgICAgICIpOworCQlicmVhazsKKwljYXNlIEtNRU1UUkFDRV9UWVBFX1BBR0VTOgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJQICAgICAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPyAgICAgIik7CisJfQorCisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFNraXAgcmVxdWVzdGVkL2FsbG9jYXRlZC9mbGFncyAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAgICAgICAgICAgICAgICAgIik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFBvaW50ZXIgdG8gYWxsb2NhdGVkICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiMHgldHggICAiLCAocHRyZGlmZl90KWVudHJ5LT5wdHIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBTa2lwIG5vZGUgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICAgICAgIik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIENhbGwgc2l0ZSAqLworCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPmNhbGxfc2l0ZSwgMCk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGttZW10cmFjZV9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCisJc3dpdGNoIChlbnRyeS0+dHlwZSkgeworCWNhc2UgVFJBQ0VfS01FTV9BTExPQzogeworCQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICpmaWVsZDsKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwkJaWYgKGttZW1fdHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpCisJCQlyZXR1cm4ga21lbXRyYWNlX3ByaW50X2FsbG9jX2NvbXByZXNzKGl0ZXIsIGZpZWxkKTsKKwkJZWxzZQorCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9hbGxvY19vcmlnaW5hbChpdGVyLCBmaWVsZCk7CisJfQorCisJY2FzZSBUUkFDRV9LTUVNX0ZSRUU6IHsKKwkJc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICpmaWVsZDsKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwkJaWYgKGttZW1fdHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpCisJCQlyZXR1cm4ga21lbXRyYWNlX3ByaW50X2ZyZWVfY29tcHJlc3MoaXRlciwgZmllbGQpOworCQllbHNlCisJCQlyZXR1cm4ga21lbXRyYWNlX3ByaW50X2ZyZWVfb3JpZ2luYWwoaXRlciwgZmllbGQpOworCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKwl9Cit9CisKKy8qIFRyYWNlIGFsbG9jYXRpb25zICovCit2b2lkIGttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCSAgICAgY29uc3Qgdm9pZCAqcHRyLAorCQkJICAgICBzaXplX3QgYnl0ZXNfcmVxLAorCQkJICAgICBzaXplX3QgYnl0ZXNfYWxsb2MsCisJCQkgICAgIGdmcF90IGdmcF9mbGFncywKKwkJCSAgICAgaW50IG5vZGUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0ga21lbXRyYWNlX2FycmF5OworCisJaWYgKCFrbWVtX3RyYWNpbmdfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9LTUVNX0FMTE9DLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKworCWVudHJ5LT5jYWxsX3NpdGUgPSBjYWxsX3NpdGU7CisJZW50cnktPnB0ciA9IHB0cjsKKwllbnRyeS0+Ynl0ZXNfcmVxID0gYnl0ZXNfcmVxOworCWVudHJ5LT5ieXRlc19hbGxvYyA9IGJ5dGVzX2FsbG9jOworCWVudHJ5LT5nZnBfZmxhZ3MgPSBnZnBfZmxhZ3M7CisJZW50cnktPm5vZGUJPQlub2RlOworCisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZSk7CisKK3ZvaWQga21lbXRyYWNlX21hcmtfZnJlZShlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJICAgICAgIGNvbnN0IHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGttZW10cmFjZV9hcnJheTsKKworCWlmICgha21lbV90cmFjaW5nX2VuYWJsZWQpCisJCXJldHVybjsKKworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfS01FTV9GUkVFLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+dHlwZV9pZAk9IHR5cGVfaWQ7CisJZW50cnktPmNhbGxfc2l0ZSA9IGNhbGxfc2l0ZTsKKwllbnRyeS0+cHRyID0gcHRyOworCisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbXRyYWNlX21hcmtfZnJlZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyIGttZW1fdHJhY2VyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImttZW10cmFjZSIsCisJLmluaXQJCT0ga21lbV90cmFjZV9pbml0LAorCS5yZXNldAkJPSBrbWVtX3RyYWNlX3Jlc2V0LAorCS5wcmludF9saW5lCT0ga21lbXRyYWNlX3ByaW50X2xpbmUsCisJLnByaW50X2hlYWRlciA9IGttZW10cmFjZV9oZWFkZXJzLAorCS5mbGFncwkJPSAma21lbV90cmFjZXJfZmxhZ3MKK307CisKK3ZvaWQga21lbXRyYWNlX2luaXQodm9pZCkKK3sKKwkvKiBlYXJsaWVzdCBvcHBvcnR1bml0eSB0byBzdGFydCBrbWVtIHRyYWNpbmcgKi8KK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9rbWVtX3RyYWNlcih2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKTsKK30KKworZGV2aWNlX2luaXRjYWxsKGluaXRfa21lbV90cmFjZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCBiZDM4YzVjLi45NjBjYmY0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNCwyMSArNCw5MiBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZV9jbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZV9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogdXNlZCBmb3Igc2NoZWRfY2xvY2soKSAoZm9yIG5vdykgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKIAogLyoKKyAqIFRoZSByaW5nIGJ1ZmZlciBpcyBtYWRlIHVwIG9mIGEgbGlzdCBvZiBwYWdlcy4gQSBzZXBhcmF0ZSBsaXN0IG9mIHBhZ2VzIGlzCisgKiBhbGxvY2F0ZWQgZm9yIGVhY2ggQ1BVLiBBIHdyaXRlciBtYXkgb25seSB3cml0ZSB0byBhIGJ1ZmZlciB0aGF0IGlzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIENQVSBpdCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nIG9uLiAgQSByZWFkZXIgbWF5IHJlYWQKKyAqIGZyb20gYW55IHBlciBjcHUgYnVmZmVyLgorICoKKyAqIFRoZSByZWFkZXIgaXMgc3BlY2lhbC4gRm9yIGVhY2ggcGVyIGNwdSBidWZmZXIsIHRoZSByZWFkZXIgaGFzIGl0cyBvd24KKyAqIHJlYWRlciBwYWdlLiBXaGVuIGEgcmVhZGVyIGhhcyByZWFkIHRoZSBlbnRpcmUgcmVhZGVyIHBhZ2UsIHRoaXMgcmVhZGVyCisgKiBwYWdlIGlzIHN3YXBwZWQgd2l0aCBhbm90aGVyIHBhZ2UgaW4gdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIE5vdywgYXMgbG9uZyBhcyB0aGUgd3JpdGVyIGlzIG9mZiB0aGUgcmVhZGVyIHBhZ2UsIHRoZSByZWFkZXIgY2FuIGRvIHdoYXQKKyAqIGV2ZXIgaXQgd2FudHMgd2l0aCB0aGF0IHBhZ2UuIFRoZSB3cml0ZXIgd2lsbCBuZXZlciB3cml0ZSB0byB0aGF0IHBhZ2UKKyAqIGFnYWluIChhcyBsb25nIGFzIGl0IGlzIG91dCBvZiB0aGUgcmluZyBidWZmZXIpLgorICoKKyAqIEhlcmUncyBzb21lIHNpbGx5IEFTQ0lJIGFydC4KKyAqCisgKiAgICstLS0tLS0rCisgKiAgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgKiAgIHxwYWdlICB8CisgKiAgICstLS0tLS0rICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgICAgICAgICAgICAgIHwgICB8LS0+fCAgIHwtLT58ICAgfAorICogICAgICAgICAgICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqICAgKy0tLS0tLSsKKyAqICAgfHJlYWRlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAqICAgfHBhZ2UgIHwtLS0tLS0tLS0tLS0tLS0tLS12CisgKiAgICstLS0tLS0rICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgICAgICAgICAgICAgIHwgICB8LS0+fCAgIHwtLT58ICAgfAorICogICAgICAgICAgICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqICAgKy0tLS0tLSsKKyAqICAgfHJlYWRlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAqICAgfHBhZ2UgIHwtLS0tLS0tLS0tLS0tLS0tLS12CisgKiAgICstLS0tLS0rICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgXiAgICAgICAgICAgIHwgICB8LS0+fCAgIHwtLT58ICAgfAorICogICAgICB8ICAgICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqICAgKy0tLS0tLSsKKyAqICAgfGJ1ZmZlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAqICAgfHBhZ2UgIHwtLS0tLS0tLS0tLS0tLS0tLS12CisgKiAgICstLS0tLS0rICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgXiAgICAgICAgICAgIHwgICB8ICAgfCAgIHwtLT58ICAgfAorICogICAgICB8ICAgTmV3ICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgIHwgIFJlYWRlci0tLS0tLV4gICAgICAgICAgICAgICB8CisgKiAgICAgIHwgICBwYWdlICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqIEFmdGVyIHdlIG1ha2UgdGhpcyBzd2FwLCB0aGUgcmVhZGVyIGNhbiBoYW5kIHRoaXMgcGFnZSBvZmYgdG8gdGhlIHNwbGljZQorICogY29kZSBhbmQgYmUgZG9uZSB3aXRoIGl0LiBJdCBjYW4gZXZlbiBhbGxvY2F0ZSBhIG5ldyBwYWdlIGlmIGl0IG5lZWRzIHRvCisgKiBhbmQgc3dhcCB0aGF0IGludG8gdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIFdlIHdpbGwgYmUgdXNpbmcgY21weGNoZyBzb29uIHRvIG1ha2UgYWxsIHRoaXMgbG9ja2xlc3MuCisgKgorICovCisKKy8qCiAgKiBBIGZhc3Qgd2F5IHRvIGVuYWJsZSBvciBkaXNhYmxlIGFsbCByaW5nIGJ1ZmZlcnMgaXMgdG8KICAqIGNhbGwgdHJhY2luZ19vbiBvciB0cmFjaW5nX29mZi4gVHVybmluZyBvZmYgdGhlIHJpbmcgYnVmZmVycwogICogcHJldmVudHMgYWxsIHJpbmcgYnVmZmVycyBmcm9tIGJlaW5nIHJlY29yZGVkIHRvLgpAQCAtNTcsNyArMTI4LDkgQEAKIAlSQl9CVUZGRVJTX0RJU0FCTEVECT0gMSA8PCBSQl9CVUZGRVJTX0RJU0FCTEVEX0JJVCwKIH07CiAKLXN0YXRpYyBsb25nIHJpbmdfYnVmZmVyX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPSBSQl9CVUZGRVJTX09OOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfZmxhZ3MgX19yZWFkX21vc3RseSA9IFJCX0JVRkZFUlNfT047CisKKyNkZWZpbmUgQlVGX1BBR0VfSERSX1NJWkUgb2Zmc2V0b2Yoc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UsIGRhdGEpCiAKIC8qKgogICogdHJhY2luZ19vbiAtIGVuYWJsZSBhbGwgdHJhY2luZyBidWZmZXJzCkBAIC04OSw0MiArMTYyLDI2IEBACiAgKiB0cmFjaW5nX29mZl9wZXJtYW5lbnQgLSBwZXJtYW5lbnRseSBkaXNhYmxlIHJpbmcgYnVmZmVycwogICoKICAqIFRoaXMgZnVuY3Rpb24sIG9uY2UgY2FsbGVkLCB3aWxsIGRpc2FibGUgYWxsIHJpbmcgYnVmZmVycwotICogcGVybWFuZW50eS4KKyAqIHBlcm1hbmVudGx5LgogICovCiB2b2lkIHRyYWNpbmdfb2ZmX3Blcm1hbmVudCh2b2lkKQogewogCXNldF9iaXQoUkJfQlVGRkVSU19ESVNBQkxFRF9CSVQsICZyaW5nX2J1ZmZlcl9mbGFncyk7CiB9CiAKKy8qKgorICogdHJhY2luZ19pc19vbiAtIHNob3cgc3RhdGUgb2YgcmluZyBidWZmZXJzIGVuYWJsZWQKKyAqLworaW50IHRyYWNpbmdfaXNfb24odm9pZCkKK3sKKwlyZXR1cm4gcmluZ19idWZmZXJfZmxhZ3MgPT0gUkJfQlVGRkVSU19PTjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNpbmdfaXNfb24pOworCiAjaW5jbHVkZSAidHJhY2UuaCIKIAotLyogVXAgdGhpcyBpZiB5b3Ugd2FudCB0byB0ZXN0IHRoZSBUSU1FX0VYVEVOVFMgYW5kIG5vcm1hbGl6YXRpb24gKi8KLSNkZWZpbmUgREVCVUdfU0hJRlQgMAotCi0vKiBGSVhNRSEhISAqLwotdTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoaW50IGNwdSkKLXsKLQl1NjQgdGltZTsKLQotCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7Ci0JLyogc2hpZnQgdG8gZGVidWcvdGVzdCBub3JtYWxpemF0aW9uIGFuZCBUSU1FX0VYVEVOVFMgKi8KLQl0aW1lID0gc2NoZWRfY2xvY2soKSA8PCBERUJVR19TSElGVDsKLQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKLQotCXJldHVybiB0aW1lOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfdGltZV9zdGFtcCk7Ci0KLXZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoaW50IGNwdSwgdTY0ICp0cykKLXsKLQkvKiBKdXN0IHN0dXBpZCB0ZXN0aW5nIHRoZSBub3JtYWxpemUgZnVuY3Rpb24gYW5kIGRlbHRhcyAqLwotCSp0cyA+Pj0gREVCVUdfU0hJRlQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcCk7Ci0KLSNkZWZpbmUgUkJfRVZOVF9IRFJfU0laRSAoc2l6ZW9mKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCkpCi0jZGVmaW5lIFJCX0FMSUdOTUVOVF9TSElGVAkyCi0jZGVmaW5lIFJCX0FMSUdOTUVOVAkJKDEgPDwgUkJfQUxJR05NRU5UX1NISUZUKQorI2RlZmluZSBSQl9FVk5UX0hEUl9TSVpFIChvZmZzZXRvZihzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQsIGFycmF5KSkKKyNkZWZpbmUgUkJfQUxJR05NRU5UCQk0VQogI2RlZmluZSBSQl9NQVhfU01BTExfREFUQQkyOAogCiBlbnVtIHsKQEAgLTEzMiwxNiArMTg5LDY1IEBACiAJUkJfTEVOX1RJTUVfU1RBTVAgPSAxNiwKIH07CiAKLS8qIGlubGluZSBmb3IgcmluZyBidWZmZXIgZmFzdCBwYXRocyAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZAotcmJfZXZlbnRfbGVuZ3RoKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCitzdGF0aWMgaW5saW5lIGludCByYl9udWxsX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HICYmIGV2ZW50LT50aW1lX2RlbHRhID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJiX2Rpc2NhcmRlZF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORyAmJiBldmVudC0+dGltZV9kZWx0YTsKK30KKworc3RhdGljIHZvaWQgcmJfZXZlbnRfc2V0X3BhZGRpbmcoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlldmVudC0+dHlwZSA9IFJJTkdCVUZfVFlQRV9QQURESU5HOworCWV2ZW50LT50aW1lX2RlbHRhID0gMDsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9ldmVudF9kaXNjYXJkIC0gZGlzY2FyZCBhbiBldmVudCBpbiB0aGUgcmluZyBidWZmZXIKKyAqIEBidWZmZXI6IHRoZSByaW5nIGJ1ZmZlcgorICogQGV2ZW50OiB0aGUgZXZlbnQgdG8gZGlzY2FyZAorICoKKyAqIFNvbWV0aW1lcyBhIGV2ZW50IHRoYXQgaXMgaW4gdGhlIHJpbmcgYnVmZmVyIG5lZWRzIHRvIGJlIGlnbm9yZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGxldHMgdGhlIHVzZXIgZGlzY2FyZCBhbiBldmVudCBpbiB0aGUgcmluZyBidWZmZXIKKyAqIGFuZCB0aGVuIHRoYXQgZXZlbnQgd2lsbCBub3QgYmUgcmVhZCBsYXRlci4KKyAqCisgKiBOb3RlLCBpdCBpcyB1cCB0byB0aGUgdXNlciB0byBiZSBjYXJlZnVsIHdpdGggdGhpcywgYW5kIHByb3RlY3QKKyAqIGFnYWluc3QgcmFjZXMuIElmIHRoZSB1c2VyIGRpc2NhcmRzIGFuIGV2ZW50IHRoYXQgaGFzIGJlZW4gY29uc3VtZWQKKyAqIGl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgY291bGQgY29ycnVwdCB0aGUgcmluZyBidWZmZXIuCisgKi8KK3ZvaWQgcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCWV2ZW50LT50eXBlID0gUklOR0JVRl9UWVBFX1BBRERJTkc7CisJLyogdGltZSBkZWx0YSBtdXN0IGJlIG5vbiB6ZXJvICovCisJaWYgKCFldmVudC0+dGltZV9kZWx0YSkKKwkJZXZlbnQtPnRpbWVfZGVsdGEgPSAxOworfQorCitzdGF0aWMgdW5zaWduZWQKK3JiX2V2ZW50X2RhdGFfbGVuZ3RoKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CiAJdW5zaWduZWQgbGVuZ3RoOwogCisJaWYgKGV2ZW50LT5sZW4pCisJCWxlbmd0aCA9IGV2ZW50LT5sZW4gKiBSQl9BTElHTk1FTlQ7CisJZWxzZQorCQlsZW5ndGggPSBldmVudC0+YXJyYXlbMF07CisJcmV0dXJuIGxlbmd0aCArIFJCX0VWTlRfSERSX1NJWkU7Cit9CisKKy8qIGlubGluZSBmb3IgcmluZyBidWZmZXIgZmFzdCBwYXRocyAqLworc3RhdGljIHVuc2lnbmVkCityYl9ldmVudF9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKIAlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CiAJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKLQkJLyogdW5kZWZpbmVkICovCi0JCXJldHVybiAtMTsKKwkJaWYgKHJiX251bGxfZXZlbnQoZXZlbnQpKQorCQkJLyogdW5kZWZpbmVkICovCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiByYl9ldmVudF9kYXRhX2xlbmd0aChldmVudCk7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKIAkJcmV0dXJuIFJCX0xFTl9USU1FX0VYVEVORDsKQEAgLTE1MCwxMSArMjU2LDcgQEAKIAkJcmV0dXJuIFJCX0xFTl9USU1FX1NUQU1QOwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKLQkJaWYgKGV2ZW50LT5sZW4pCi0JCQlsZW5ndGggPSBldmVudC0+bGVuIDw8IFJCX0FMSUdOTUVOVF9TSElGVDsKLQkJZWxzZQotCQkJbGVuZ3RoID0gZXZlbnQtPmFycmF5WzBdOwotCQlyZXR1cm4gbGVuZ3RoICsgUkJfRVZOVF9IRFJfU0laRTsKKwkJcmV0dXJuIHJiX2V2ZW50X2RhdGFfbGVuZ3RoKGV2ZW50KTsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CkBAIC0xNzksNyArMjgxLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2V2ZW50X2xlbmd0aCk7CiAKIC8qIGlubGluZSBmb3IgcmluZyBidWZmZXIgZmFzdCBwYXRocyAqLwotc3RhdGljIGlubGluZSB2b2lkICoKK3N0YXRpYyB2b2lkICoKIHJiX2V2ZW50X2RhdGEoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKIAlCVUdfT04oZXZlbnQtPnR5cGUgIT0gUklOR0JVRl9UWVBFX0RBVEEpOwpAQCAtMjA5LDcgKzMxMSw3IEBACiAKIHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlIHsKIAl1NjQJCSB0aW1lX3N0YW1wOwkvKiBwYWdlIHRpbWUgc3RhbXAgKi8KLQlsb2NhbF90CQkgY29tbWl0OwkvKiB3cml0ZSBjb21taXRlZCBpbmRleCAqLworCWxvY2FsX3QJCSBjb21taXQ7CS8qIHdyaXRlIGNvbW1pdHRlZCBpbmRleCAqLwogCXVuc2lnbmVkIGNoYXIJIGRhdGFbXTsJLyogZGF0YSBvZiBidWZmZXIgcGFnZSAqLwogfTsKIApAQCAtMjI1LDE0ICszMjcsMjUgQEAKIAlsb2NhbF9zZXQoJmJwYWdlLT5jb21taXQsIDApOwogfQogCisvKioKKyAqIHJpbmdfYnVmZmVyX3BhZ2VfbGVuIC0gdGhlIHNpemUgb2YgZGF0YSBvbiB0aGUgcGFnZS4KKyAqIEBwYWdlOiBUaGUgcGFnZSB0byByZWFkCisgKgorICogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgb24gdGhlIHBhZ2UsIGluY2x1ZGluZyBidWZmZXIgcGFnZSBoZWFkZXIuCisgKi8KK3NpemVfdCByaW5nX2J1ZmZlcl9wYWdlX2xlbih2b2lkICpwYWdlKQoreworCXJldHVybiBsb2NhbF9yZWFkKCYoKHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICopcGFnZSktPmNvbW1pdCkKKwkJKyBCVUZfUEFHRV9IRFJfU0laRTsKK30KKwogLyoKICAqIEFsc28gc3RvbGVuIGZyb20gbW0vc2xvYi5jLiBUaGFua3MgdG8gTWF0aGlldSBEZXNub3llcnMgZm9yIHBvaW50aW5nCiAgKiB0aGlzIGlzc3VlIG91dC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfYnVmZmVyX3BhZ2Uoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKK3N0YXRpYyB2b2lkIGZyZWVfYnVmZmVyX3BhZ2Uoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKIHsKLQlpZiAoYnBhZ2UtPnBhZ2UpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylicGFnZS0+cGFnZSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJwYWdlLT5wYWdlKTsKIAlrZnJlZShicGFnZSk7CiB9CiAKQEAgLTI0Niw3ICszNTksNyBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEJVRl9QQUdFX1NJWkUgKFBBR0VfU0laRSAtIG9mZnNldG9mKHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlLCBkYXRhKSkKKyNkZWZpbmUgQlVGX1BBR0VfU0laRSAoUEFHRV9TSVpFIC0gQlVGX1BBR0VfSERSX1NJWkUpCiAKIC8qCiAgKiBoZWFkX3BhZ2UgPT0gdGFpbF9wYWdlICYmIGhlYWQgPT0gdGFpbCB0aGVuIGJ1ZmZlciBpcyBlbXB0eS4KQEAgLTI2MCw3ICszNzMsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCXBhZ2VzOwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKmhlYWRfcGFnZTsJLyogcmVhZCBmcm9tIGhlYWQgKi8KIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSp0YWlsX3BhZ2U7CS8qIHdyaXRlIHRvIHRhaWwgKi8KLQlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpjb21taXRfcGFnZTsJLyogY29tbWl0ZWQgcGFnZXMgKi8KKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpjb21taXRfcGFnZTsJLyogY29tbWl0dGVkIHBhZ2VzICovCiAJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqcmVhZGVyX3BhZ2U7CiAJdW5zaWduZWQgbG9uZwkJCW92ZXJydW47CiAJdW5zaWduZWQgbG9uZwkJCWVudHJpZXM7CkBAIC0yNzMsMTIgKzM4NiwxNyBAQAogCXVuc2lnbmVkCQkJcGFnZXM7CiAJdW5zaWduZWQJCQlmbGFnczsKIAlpbnQJCQkJY3B1czsKLQljcHVtYXNrX3Zhcl90CQkJY3B1bWFzazsKIAlhdG9taWNfdAkJCXJlY29yZF9kaXNhYmxlZDsKKwljcHVtYXNrX3Zhcl90CQkJY3B1bWFzazsKIAogCXN0cnVjdCBtdXRleAkJCW11dGV4OwogCiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUJKipidWZmZXJzOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCQljcHVfbm90aWZ5OworI2VuZGlmCisJdTY0CQkJCSgqY2xvY2spKHZvaWQpOwogfTsKIAogc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgewpAQCAtMjk5LDExICs0MTcsMzUgQEAKIAkJX19fX19yZXQ7CQkJCQlcCiAJfSkKIAorLyogVXAgdGhpcyBpZiB5b3Ugd2FudCB0byB0ZXN0IHRoZSBUSU1FX0VYVEVOVFMgYW5kIG5vcm1hbGl6YXRpb24gKi8KKyNkZWZpbmUgREVCVUdfU0hJRlQgMAorCit1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3sKKwl1NjQgdGltZTsKKworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisJLyogc2hpZnQgdG8gZGVidWcvdGVzdCBub3JtYWxpemF0aW9uIGFuZCBUSU1FX0VYVEVOVFMgKi8KKwl0aW1lID0gYnVmZmVyLT5jbG9jaygpIDw8IERFQlVHX1NISUZUOworCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOworCisJcmV0dXJuIHRpbWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl90aW1lX3N0YW1wKTsKKwordm9pZCByaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCQkgICAgICBpbnQgY3B1LCB1NjQgKnRzKQoreworCS8qIEp1c3Qgc3R1cGlkIHRlc3RpbmcgdGhlIG5vcm1hbGl6ZSBmdW5jdGlvbiBhbmQgZGVsdGFzICovCisJKnRzID4+PSBERUJVR19TSElGVDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKTsKKwogLyoqCiAgKiBjaGVja19wYWdlcyAtIGludGVncml0eSBjaGVjayBvZiBidWZmZXIgcGFnZXMKICAqIEBjcHVfYnVmZmVyOiBDUFUgYnVmZmVyIHdpdGggcGFnZXMgdG8gdGVzdAogICoKLSAqIEFzIGEgc2FmdHkgbWVhc3VyZSB3ZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGRhdGEgcGFnZXMgaGF2ZSBub3QKKyAqIEFzIGEgc2FmZXR5IG1lYXN1cmUgd2UgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHBhZ2VzIGhhdmUgbm90CiAgKiBiZWVuIGNvcnJ1cHRlZC4KICAqLwogc3RhdGljIGludCByYl9jaGVja19wYWdlcyhzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKQEAgLTQyMSw3ICs1NjMsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY3B1X2J1ZmZlci0+cGFnZXM7CiAJc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSwgKnRtcDsKIAotCWxpc3RfZGVsX2luaXQoJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0KTsKIAlmcmVlX2J1ZmZlcl9wYWdlKGNwdV9idWZmZXItPnJlYWRlcl9wYWdlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicGFnZSwgdG1wLCBoZWFkLCBsaXN0KSB7CkBAIC00MzcsNiArNTc4LDExIEBACiAgKi8KIGV4dGVybiBpbnQgcmluZ19idWZmZXJfcGFnZV90b29fYmlnKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgaW50IHJiX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KTsKKyNlbmRpZgorCiAvKioKICAqIHJpbmdfYnVmZmVyX2FsbG9jIC0gYWxsb2NhdGUgYSBuZXcgcmluZ19idWZmZXIKICAqIEBzaXplOiB0aGUgc2l6ZSBpbiBieXRlcyBwZXIgY3B1IHRoYXQgaXMgbmVlZGVkLgpAQCAtNDY5LDEyICs2MTUsMjMgQEAKIAogCWJ1ZmZlci0+cGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgQlVGX1BBR0VfU0laRSk7CiAJYnVmZmVyLT5mbGFncyA9IGZsYWdzOworCWJ1ZmZlci0+Y2xvY2sgPSB0cmFjZV9jbG9ja19sb2NhbDsKIAogCS8qIG5lZWQgYXQgbGVhc3QgdHdvIHBhZ2VzICovCiAJaWYgKGJ1ZmZlci0+cGFnZXMgPT0gMSkKIAkJYnVmZmVyLT5wYWdlcysrOwogCisJLyoKKwkgKiBJbiBjYXNlIG9mIG5vbi1ob3RwbHVnIGNwdSwgaWYgdGhlIHJpbmctYnVmZmVyIGlzIGFsbG9jYXRlZAorCSAqIGluIGVhcmx5IGluaXRjYWxsLCBpdCB3aWxsIG5vdCBiZSBub3RpZmllZCBvZiBzZWNvbmRhcnkgY3B1cy4KKwkgKiBJbiB0aGF0IG9mZiBjYXNlLCB3ZSBuZWVkIHRvIGFsbG9jYXRlIGZvciBhbGwgcG9zc2libGUgY3B1cy4KKwkgKi8KKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlnZXRfb25saW5lX2NwdXMoKTsKKwljcHVtYXNrX2NvcHkoYnVmZmVyLT5jcHVtYXNrLCBjcHVfb25saW5lX21hc2spOworI2Vsc2UKIAljcHVtYXNrX2NvcHkoYnVmZmVyLT5jcHVtYXNrLCBjcHVfcG9zc2libGVfbWFzayk7CisjZW5kaWYKIAlidWZmZXItPmNwdXMgPSBucl9jcHVfaWRzOwogCiAJYnNpemUgPSBzaXplb2Yodm9pZCAqKSAqIG5yX2NwdV9pZHM7CkBAIC00OTAsNiArNjQ3LDEzIEBACiAJCQlnb3RvIGZhaWxfZnJlZV9idWZmZXJzOwogCX0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWJ1ZmZlci0+Y3B1X25vdGlmeS5ub3RpZmllcl9jYWxsID0gcmJfY3B1X25vdGlmeTsKKwlidWZmZXItPmNwdV9ub3RpZnkucHJpb3JpdHkgPSAwOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmYnVmZmVyLT5jcHVfbm90aWZ5KTsKKyNlbmRpZgorCisJcHV0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfaW5pdCgmYnVmZmVyLT5tdXRleCk7CiAKIAlyZXR1cm4gYnVmZmVyOwpAQCAtNTAzLDYgKzY2Nyw3IEBACiAKICBmYWlsX2ZyZWVfY3B1bWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKGJ1ZmZlci0+Y3B1bWFzayk7CisJcHV0X29ubGluZV9jcHVzKCk7CiAKICBmYWlsX2ZyZWVfYnVmZmVyOgogCWtmcmVlKGJ1ZmZlcik7CkBAIC01MTksMTUgKzY4NCwyOSBAQAogewogCWludCBjcHU7CiAKKwlnZXRfb25saW5lX2NwdXMoKTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZidWZmZXItPmNwdV9ub3RpZnkpOworI2VuZGlmCisKIAlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KQogCQlyYl9mcmVlX2NwdV9idWZmZXIoYnVmZmVyLT5idWZmZXJzW2NwdV0pOwogCisJcHV0X29ubGluZV9jcHVzKCk7CisKIAlmcmVlX2NwdW1hc2tfdmFyKGJ1ZmZlci0+Y3B1bWFzayk7CiAKIAlrZnJlZShidWZmZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZnJlZSk7CiAKK3ZvaWQgcmluZ19idWZmZXJfc2V0X2Nsb2NrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgdTY0ICgqY2xvY2spKHZvaWQpKQoreworCWJ1ZmZlci0+Y2xvY2sgPSBjbG9jazsKK30KKwogc3RhdGljIHZvaWQgcmJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKTsKIAogc3RhdGljIHZvaWQKQEAgLTYyNywxNiArODA2LDE1IEBACiAJCXJldHVybiBzaXplOwogCiAJbXV0ZXhfbG9jaygmYnVmZmVyLT5tdXRleCk7CisJZ2V0X29ubGluZV9jcHVzKCk7CiAKIAlucl9wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBCVUZfUEFHRV9TSVpFKTsKIAogCWlmIChzaXplIDwgYnVmZmVyX3NpemUpIHsKIAogCQkvKiBlYXN5IGNhc2UsIGp1c3QgZnJlZSBwYWdlcyAqLwotCQlpZiAoUkJfV0FSTl9PTihidWZmZXIsIG5yX3BhZ2VzID49IGJ1ZmZlci0+cGFnZXMpKSB7Ci0JCQltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJCWlmIChSQl9XQVJOX09OKGJ1ZmZlciwgbnJfcGFnZXMgPj0gYnVmZmVyLT5wYWdlcykpCisJCQlnb3RvIG91dF9mYWlsOwogCiAJCXJtX3BhZ2VzID0gYnVmZmVyLT5wYWdlcyAtIG5yX3BhZ2VzOwogCkBAIC02NTUsMTAgKzgzMyw4IEBACiAJICogYWRkIHRoZXNlIHBhZ2VzIHRvIHRoZSBjcHVfYnVmZmVycy4gT3RoZXJ3aXNlIHdlIGp1c3QgZnJlZQogCSAqIHRoZW0gYWxsIGFuZCByZXR1cm4gLUVOT01FTTsKIAkgKi8KLQlpZiAoUkJfV0FSTl9PTihidWZmZXIsIG5yX3BhZ2VzIDw9IGJ1ZmZlci0+cGFnZXMpKSB7Ci0JCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7Ci0JCXJldHVybiAtMTsKLQl9CisJaWYgKFJCX1dBUk5fT04oYnVmZmVyLCBucl9wYWdlcyA8PSBidWZmZXItPnBhZ2VzKSkKKwkJZ290byBvdXRfZmFpbDsKIAogCW5ld19wYWdlcyA9IG5yX3BhZ2VzIC0gYnVmZmVyLT5wYWdlczsKIApAQCAtNjgzLDEzICs4NTksMTIgQEAKIAkJcmJfaW5zZXJ0X3BhZ2VzKGNwdV9idWZmZXIsICZwYWdlcywgbmV3X3BhZ2VzKTsKIAl9CiAKLQlpZiAoUkJfV0FSTl9PTihidWZmZXIsICFsaXN0X2VtcHR5KCZwYWdlcykpKSB7Ci0JCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7Ci0JCXJldHVybiAtMTsKLQl9CisJaWYgKFJCX1dBUk5fT04oYnVmZmVyLCAhbGlzdF9lbXB0eSgmcGFnZXMpKSkKKwkJZ290byBvdXRfZmFpbDsKIAogIG91dDoKIAlidWZmZXItPnBhZ2VzID0gbnJfcGFnZXM7CisJcHV0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKIAogCXJldHVybiBzaXplOwpAQCAtNjk5LDE2ICs4NzQsMjEgQEAKIAkJbGlzdF9kZWxfaW5pdCgmYnBhZ2UtPmxpc3QpOwogCQlmcmVlX2J1ZmZlcl9wYWdlKGJwYWdlKTsKIAl9CisJcHV0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKIAlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogU29tZXRoaW5nIHdlbnQgdG90YWxseSB3cm9uZywgYW5kIHdlIGFyZSB0b28gcGFyYW5vaWQKKwkgKiB0byBldmVuIGNsZWFuIHVwIHRoZSBtZXNzLgorCSAqLworIG91dF9mYWlsOgorCXB1dF9vbmxpbmVfY3B1cygpOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7CisJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVzaXplKTsKIAotc3RhdGljIGlubGluZSBpbnQgcmJfbnVsbF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQotewotCXJldHVybiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORzsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkICoKIF9fcmJfZGF0YV9wYWdlX2luZGV4KHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpicGFnZSwgdW5zaWduZWQgaW5kZXgpCiB7CkBAIC04MTEsNyArOTkxLDcgQEAKIAlyZXR1cm4gKGFkZHIgJiB+UEFHRV9NQVNLKSAtIChQQUdFX1NJWkUgLSBCVUZfUEFHRV9TSVpFKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHJiX2lzX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKIAkgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CkBAIC04MjUsNyArMTAwNSw3IEBACiAJCXJiX2NvbW1pdF9pbmRleChjcHVfYnVmZmVyKSA9PSBpbmRleDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogcmJfc2V0X2NvbW1pdF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKIAkJICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CkBAIC04NTAsNyArMTAzMCw3IEBACiAJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+cGFnZS0+Y29tbWl0LCBpbmRleCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIHJiX3NldF9jb21taXRfdG9fd3JpdGUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCiB7CiAJLyoKQEAgLTg5Niw3ICsxMDc2LDcgQEAKIAljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA9IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByYl9pbmNfaXRlcihzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3N0YXRpYyB2b2lkIHJiX2luY19pdGVyKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKIApAQCAtOTI2LDcgKzExMDYsNyBAQAogICogYW5kIHdpdGggdGhpcywgd2UgY2FuIGRldGVybWluZSB3aGF0IHRvIHBsYWNlIGludG8gdGhlCiAgKiBkYXRhIGZpZWxkLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiByYl91cGRhdGVfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKIAkJCSB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBsZW5ndGgpCiB7CkBAIC05MzgsMTUgKzExMTgsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKLQkJZXZlbnQtPmxlbiA9Ci0JCQkoUkJfTEVOX1RJTUVfRVhURU5EICsgKFJCX0FMSUdOTUVOVC0xKSkKLQkJCT4+IFJCX0FMSUdOTUVOVF9TSElGVDsKKwkJZXZlbnQtPmxlbiA9IERJVl9ST1VORF9VUChSQl9MRU5fVElNRV9FWFRFTkQsIFJCX0FMSUdOTUVOVCk7CiAJCWJyZWFrOwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9TVEFNUDoKLQkJZXZlbnQtPmxlbiA9Ci0JCQkoUkJfTEVOX1RJTUVfU1RBTVAgKyAoUkJfQUxJR05NRU5ULTEpKQotCQkJPj4gUkJfQUxJR05NRU5UX1NISUZUOworCQlldmVudC0+bGVuID0gRElWX1JPVU5EX1VQKFJCX0xFTl9USU1FX1NUQU1QLCBSQl9BTElHTk1FTlQpOwogCQlicmVhazsKIAogCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CkBAIC05NTUsMTYgKzExMzEsMTQgQEAKIAkJCWV2ZW50LT5sZW4gPSAwOwogCQkJZXZlbnQtPmFycmF5WzBdID0gbGVuZ3RoOwogCQl9IGVsc2UKLQkJCWV2ZW50LT5sZW4gPQotCQkJCShsZW5ndGggKyAoUkJfQUxJR05NRU5ULTEpKQotCQkJCT4+IFJCX0FMSUdOTUVOVF9TSElGVDsKKwkJCWV2ZW50LT5sZW4gPSBESVZfUk9VTkRfVVAobGVuZ3RoLCBSQl9BTElHTk1FTlQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmJfY2FsY3VsYXRlX2V2ZW50X2xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgcmJfY2FsY3VsYXRlX2V2ZW50X2xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50IGV2ZW50OyAvKiBVc2VkIG9ubHkgZm9yIHNpemVvZiBhcnJheSAqLwogCkBAIC05OTAsNiArMTE2NCw3IEBACiAJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSBjcHVfYnVmZmVyLT5idWZmZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgbG9ja190YWtlbiA9IGZhbHNlOwogCiAJY29tbWl0X3BhZ2UgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZTsKIAkvKiB3ZSBqdXN0IG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGludGVycnVwdHMgKi8KQEAgLTEwMDMsNyArMTE3OCwzMCBAQAogCQlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKm5leHRfcGFnZSA9IHRhaWxfcGFnZTsKIAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCV9fcmF3X3NwaW5fbG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisJCS8qCisJCSAqIFNpbmNlIHRoZSB3cml0ZSB0byB0aGUgYnVmZmVyIGlzIHN0aWxsIG5vdAorCQkgKiBmdWxseSBsb2NrbGVzcywgd2UgbXVzdCBiZSBjYXJlZnVsIHdpdGggTk1Jcy4KKwkJICogVGhlIGxvY2tzIGluIHRoZSB3cml0ZXJzIGFyZSB0YWtlbiB3aGVuIGEgd3JpdGUKKwkJICogY3Jvc3NlcyB0byBhIG5ldyBwYWdlLiBUaGUgbG9ja3MgcHJvdGVjdCBhZ2FpbnN0CisJCSAqIHJhY2VzIHdpdGggdGhlIHJlYWRlcnMgKHRoaXMgd2lsbCBzb29uIGJlIGZpeGVkCisJCSAqIHdpdGggYSBsb2NrbGVzcyBzb2x1dGlvbikuCisJCSAqCisJCSAqIEJlY2F1c2Ugd2UgY2FuIG5vdCBwcm90ZWN0IGFnYWluc3QgTk1JcywgYW5kIHdlCisJCSAqIHdhbnQgdG8ga2VlcCB0cmFjZXMgcmVlbnRyYW50LCB3ZSBuZWVkIHRvIG1hbmFnZQorCQkgKiB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBhcmUgaW4gYW4gTk1JLgorCQkgKgorCQkgKiBOTUlzIGNhbiBoYXBwZW4gYWZ0ZXIgd2UgdGFrZSB0aGUgbG9jay4KKwkJICogSWYgd2UgYXJlIGluIGFuIE5NSSwgb25seSB0YWtlIHRoZSBsb2NrCisJCSAqIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRha2VuLiBPdGhlcndpc2UKKwkJICogc2ltcGx5IGZhaWwuCisJCSAqLworCQlpZiAodW5saWtlbHkoaW5fbm1pKCkpKSB7CisJCQlpZiAoIV9fcmF3X3NwaW5fdHJ5bG9jaygmY3B1X2J1ZmZlci0+bG9jaykpCisJCQkJZ290byBvdXRfcmVzZXQ7CisJCX0gZWxzZQorCQkJX19yYXdfc3Bpbl9sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKKworCQlsb2NrX3Rha2VuID0gdHJ1ZTsKIAogCQlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmbmV4dF9wYWdlKTsKIApAQCAtMTAxMiw3ICsxMjEwLDcgQEAKIAogCQkvKiB3ZSBncmFiYmVkIHRoZSBsb2NrIGJlZm9yZSBpbmNyZW1lbnRpbmcgKi8KIAkJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgbmV4dF9wYWdlID09IHJlYWRlcl9wYWdlKSkKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCWdvdG8gb3V0X3Jlc2V0OwogCiAJCS8qCiAJCSAqIElmIGZvciBzb21lIHJlYXNvbiwgd2UgaGFkIGFuIGludGVycnVwdCBzdG9ybSB0aGF0IG1hZGUKQEAgLTEwMjEsMTIgKzEyMTksMTIgQEAKIAkJICovCiAJCWlmICh1bmxpa2VseShuZXh0X3BhZ2UgPT0gY29tbWl0X3BhZ2UpKSB7CiAJCQlXQVJOX09OX09OQ0UoMSk7Ci0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIG91dF9yZXNldDsKIAkJfQogCiAJCWlmIChuZXh0X3BhZ2UgPT0gaGVhZF9wYWdlKSB7CiAJCQlpZiAoIShidWZmZXItPmZsYWdzICYgUkJfRkxfT1ZFUldSSVRFKSkKLQkJCQlnb3RvIG91dF91bmxvY2s7CisJCQkJZ290byBvdXRfcmVzZXQ7CiAKIAkJCS8qIHRhaWxfcGFnZSBoYXMgbm90IG1vdmVkIHlldD8gKi8KIAkJCWlmICh0YWlsX3BhZ2UgPT0gY3B1X2J1ZmZlci0+dGFpbF9wYWdlKSB7CkBAIC0xMDUwLDcgKzEyNDgsNyBAQAogCQkJY3B1X2J1ZmZlci0+dGFpbF9wYWdlID0gbmV4dF9wYWdlOwogCiAJCQkvKiByZXJlYWQgdGhlIHRpbWUgc3RhbXAgKi8KLQkJCSp0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1KTsKKwkJCSp0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOwogCQkJY3B1X2J1ZmZlci0+dGFpbF9wYWdlLT5wYWdlLT50aW1lX3N0YW1wID0gKnRzOwogCQl9CiAKQEAgLTEwNjAsNyArMTI1OCw3IEBACiAJCWlmICh0YWlsIDwgQlVGX1BBR0VfU0laRSkgewogCQkJLyogTWFyayB0aGUgcmVzdCBvZiB0aGUgcGFnZSB3aXRoIHBhZGRpbmcgKi8KIAkJCWV2ZW50ID0gX19yYl9wYWdlX2luZGV4KHRhaWxfcGFnZSwgdGFpbCk7Ci0JCQlldmVudC0+dHlwZSA9IFJJTkdCVUZfVFlQRV9QQURESU5HOworCQkJcmJfZXZlbnRfc2V0X3BhZGRpbmcoZXZlbnQpOwogCQl9CiAKIAkJaWYgKHRhaWwgPD0gQlVGX1BBR0VfU0laRSkKQEAgLTExMDAsMTIgKzEyOTgsMTMgQEAKIAogCXJldHVybiBldmVudDsKIAotIG91dF91bmxvY2s6Cisgb3V0X3Jlc2V0OgogCS8qIHJlc2V0IHdyaXRlICovCiAJaWYgKHRhaWwgPD0gQlVGX1BBR0VfU0laRSkKIAkJbG9jYWxfc2V0KCZ0YWlsX3BhZ2UtPndyaXRlLCB0YWlsKTsKIAotCV9fcmF3X3NwaW5fdW5sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKKwlpZiAobGlrZWx5KGxvY2tfdGFrZW4pKQorCQlfX3Jhd19zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBOVUxMOwogfQpAQCAtMTE5Miw3ICsxMzkxLDcgQEAKIAlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCArK25yX2xvb3BzID4gMTAwMCkpCiAJCXJldHVybiBOVUxMOwogCi0JdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmNwdSk7CisJdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKIAogCS8qCiAJICogT25seSB0aGUgZmlyc3QgY29tbWl0IGNhbiB1cGRhdGUgdGhlIHRpbWVzdGFtcC4KQEAgLTEyNjUsNyArMTQ2NCw2IEBACiAgKiByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgLSByZXNlcnZlIGEgcGFydCBvZiB0aGUgYnVmZmVyCiAgKiBAYnVmZmVyOiB0aGUgcmluZyBidWZmZXIgdG8gcmVzZXJ2ZSBmcm9tCiAgKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlc2VydmUgKGV4Y2x1ZGluZyBldmVudCBoZWFkZXIpCi0gKiBAZmxhZ3M6IGEgcG9pbnRlciB0byBzYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZ3MKICAqCiAgKiBSZXR1cm5zIGEgcmVzZXZlcmQgZXZlbnQgb24gdGhlIHJpbmcgYnVmZmVyIHRvIGNvcHkgZGlyZWN0bHkgdG8uCiAgKiBUaGUgdXNlciBvZiB0aGlzIGludGVyZmFjZSB3aWxsIG5lZWQgdG8gZ2V0IHRoZSBib2R5IHRvIHdyaXRlIGludG8KQEAgLTEyNzgsOSArMTQ3Niw3IEBACiAgKiBJZiBOVUxMIGlzIHJldHVybmVkLCB0aGVuIG5vdGhpbmcgaGFzIGJlZW4gYWxsb2NhdGVkIG9yIGxvY2tlZC4KICAqLwogc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKLXJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKLQkJCSB1bnNpZ25lZCBsb25nIGxlbmd0aCwKLQkJCSB1bnNpZ25lZCBsb25nICpmbGFncykKK3JpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKQEAgLTEzNDcsMTUgKzE1NDMsMTMgQEAKICAqIHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQgLSBjb21taXQgYSByZXNlcnZlZAogICogQGJ1ZmZlcjogVGhlIGJ1ZmZlciB0byBjb21taXQgdG8KICAqIEBldmVudDogVGhlIGV2ZW50IHBvaW50ZXIgdG8gY29tbWl0LgotICogQGZsYWdzOiB0aGUgaW50ZXJydXB0IGZsYWdzIHJlY2VpdmVkIGZyb20gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlLgogICoKICAqIFRoaXMgY29tbWl0cyB0aGUgZGF0YSB0byB0aGUgcmluZyBidWZmZXIsIGFuZCByZWxlYXNlcyBhbnkgbG9ja3MgaGVsZC4KICAqCiAgKiBNdXN0IGJlIHBhaXJlZCB3aXRoIHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZS4KICAqLwogaW50IHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCSAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0xNDM4LDcgKzE2MzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfd3JpdGUpOwogCi1zdGF0aWMgaW5saW5lIGludCByYl9wZXJfY3B1X2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQorc3RhdGljIGludCByYl9wZXJfY3B1X2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQogewogCXN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2U7CiAJc3RydWN0IGJ1ZmZlcl9wYWdlICpoZWFkID0gY3B1X2J1ZmZlci0+aGVhZF9wYWdlOwpAQCAtMTUyOCwxMiArMTcyMiwxNSBAQAogdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHJldDsKIAogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCiAJCXJldHVybiAwOwogCiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCXJldHVybiBjcHVfYnVmZmVyLT5lbnRyaWVzOworCXJldCA9IGNwdV9idWZmZXItPmVudHJpZXM7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllc19jcHUpOwogCkBAIC0xNTQ1LDEyICsxNzQyLDE1IEBACiB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKIAkJcmV0dXJuIDA7CiAKIAljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07Ci0JcmV0dXJuIGNwdV9idWZmZXItPm92ZXJydW47CisJcmV0ID0gY3B1X2J1ZmZlci0+b3ZlcnJ1bjsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSk7CiAKQEAgLTE2MjcsOSArMTgyNywxNCBAQAogICovCiB2b2lkIHJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCiB7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIWl0ZXIpCisJCXJldHVybjsKKworCWNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAJcmJfaXRlcl9yZXNldChpdGVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwpAQCAtMTgwMyw3ICsyMDA4LDcgQEAKIAogCWV2ZW50ID0gcmJfcmVhZGVyX2V2ZW50KGNwdV9idWZmZXIpOwogCi0JaWYgKGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9EQVRBKQorCWlmIChldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfREFUQSB8fCByYl9kaXNjYXJkZWRfZXZlbnQoZXZlbnQpKQogCQljcHVfYnVmZmVyLT5lbnRyaWVzLS07CiAKIAlyYl91cGRhdGVfcmVhZF9zdGFtcChjcHVfYnVmZmVyLCBldmVudCk7CkBAIC0xODY0LDkgKzIwNjksNiBAQAogCXN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyOwogCWludCBucl9sb29wcyA9IDA7CiAKLQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQotCQlyZXR1cm4gTlVMTDsKLQogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKIAogIGFnYWluOgpAQCAtMTg4OSw5ICsyMDkxLDE4IEBACiAKIAlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CiAJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKLQkJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCAxKTsKKwkJaWYgKHJiX251bGxfZXZlbnQoZXZlbnQpKQorCQkJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCAxKTsKKwkJLyoKKwkJICogQmVjYXVzZSB0aGUgd3JpdGVyIGNvdWxkIGJlIGRpc2NhcmRpbmcgZXZlcnkKKwkJICogZXZlbnQgaXQgY3JlYXRlcyAod2hpY2ggd291bGQgcHJvYmFibHkgYmUgYmFkKQorCQkgKiBpZiB3ZSB3ZXJlIHRvIGdvIGJhY2sgdG8gImFnYWluIiB0aGVuIHdlIG1heSBuZXZlcgorCQkgKiBjYXRjaCB1cCwgYW5kIHdpbGwgdHJpZ2dlciB0aGUgd2FybiBvbiwgb3IgbG9jaworCQkgKiB0aGUgYm94LiBSZXR1cm4gdGhlIHBhZGRpbmcsIGFuZCB3ZSB3aWxsIHJlbGVhc2UKKwkJICogdGhlIGN1cnJlbnQgbG9ja3MsIGFuZCB0cnkgYWdhaW4uCisJCSAqLwogCQlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBldmVudDsKIAogCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgogCQkvKiBJbnRlcm5hbCBkYXRhLCBPSyB0byBhZHZhbmNlICovCkBAIC0xOTA2LDcgKzIxMTcsOCBAQAogCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CiAJCWlmICh0cykgewogCQkJKnRzID0gY3B1X2J1ZmZlci0+cmVhZF9zdGFtcCArIGV2ZW50LT50aW1lX2RlbHRhOwotCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CisJCQlyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChidWZmZXIsCisJCQkJCQkJIGNwdV9idWZmZXItPmNwdSwgdHMpOwogCQl9CiAJCXJldHVybiBldmVudDsKIApAQCAtMTk1MSw4ICsyMTYzLDEyIEBACiAKIAlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CiAJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKLQkJcmJfaW5jX2l0ZXIoaXRlcik7Ci0JCWdvdG8gYWdhaW47CisJCWlmIChyYl9udWxsX2V2ZW50KGV2ZW50KSkgeworCQkJcmJfaW5jX2l0ZXIoaXRlcik7CisJCQlnb3RvIGFnYWluOworCQl9CisJCXJiX2FkdmFuY2VfaXRlcihpdGVyKTsKKwkJcmV0dXJuIGV2ZW50OwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CiAJCS8qIEludGVybmFsIGRhdGEsIE9LIHRvIGFkdmFuY2UgKi8KQEAgLTE5NjcsNyArMjE4Myw4IEBACiAJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKIAkJaWYgKHRzKSB7CiAJCQkqdHMgPSBpdGVyLT5yZWFkX3N0YW1wICsgZXZlbnQtPnRpbWVfZGVsdGE7Ci0JCQlyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5jcHUsIHRzKTsKKwkJCXJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGJ1ZmZlciwKKwkJCQkJCQkgY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CiAJCX0KIAkJcmV0dXJuIGV2ZW50OwogCkBAIC0xOTk1LDEwICsyMjEyLDE5IEBACiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuIE5VTEw7CisKKyBhZ2FpbjoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAlldmVudCA9IHJiX2J1ZmZlcl9wZWVrKGJ1ZmZlciwgY3B1LCB0cyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAorCWlmIChldmVudCAmJiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORykgeworCQljcHVfcmVsYXgoKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlyZXR1cm4gZXZlbnQ7CiB9CiAKQEAgLTIwMTcsMTAgKzIyNDMsMTYgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKyBhZ2FpbjoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAlldmVudCA9IHJiX2l0ZXJfcGVlayhpdGVyLCB0cyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAorCWlmIChldmVudCAmJiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORykgeworCQljcHVfcmVsYXgoKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlyZXR1cm4gZXZlbnQ7CiB9CiAKQEAgLTIwMzUsMjQgKzIyNjcsMzcgQEAKIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCiByaW5nX2J1ZmZlcl9jb25zdW1lKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LCB1NjQgKnRzKQogewotCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKLQkJcmV0dXJuIE5VTEw7CisgYWdhaW46CisJLyogbWlnaHQgYmUgY2FsbGVkIGluIGF0b21pYyAqLworCXByZWVtcHRfZGlzYWJsZSgpOwogCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJZ290byBvdXQ7CisKKwljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKIAlldmVudCA9IHJiX2J1ZmZlcl9wZWVrKGJ1ZmZlciwgY3B1LCB0cyk7CiAJaWYgKCFldmVudCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAogCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOwogCi0gb3V0OgorIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAorIG91dDoKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJaWYgKGV2ZW50ICYmIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7CisJCWNwdV9yZWxheCgpOworCQlnb3RvIGFnYWluOworCX0KKwogCXJldHVybiBldmVudDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2NvbnN1bWUpOwpAQCAtMjEzMSw2ICsyMzc2LDcgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorIGFnYWluOgogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCWV2ZW50ID0gcmJfaXRlcl9wZWVrKGl0ZXIsIHRzKTsKIAlpZiAoIWV2ZW50KQpAQCAtMjE0MCw2ICsyMzg2LDExIEBACiAgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKKwlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpIHsKKwkJY3B1X3JlbGF4KCk7CisJCWdvdG8gYWdhaW47CisJfQorCiAJcmV0dXJuIGV2ZW50OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVhZCk7CkBAIC0yMjMyLDYgKzI0ODMsNyBAQAogCQlpZiAoIXJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpCiAJCQlyZXR1cm4gMDsKIAl9CisKIAlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VtcHR5KTsKQEAgLTIyNDQsMTIgKzI0OTYsMTYgQEAKIGludCByaW5nX2J1ZmZlcl9lbXB0eV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJaW50IHJldDsKIAogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCiAJCXJldHVybiAxOwogCiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCXJldHVybiByYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpOworCXJldCA9IHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcik7CisKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbXB0eV9jcHUpOwogCkBAIC0yMjY4LDE4ICsyNTI0LDM2IEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXJfYTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcl9iOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyX2EtPmNwdW1hc2spIHx8CiAJICAgICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyX2ItPmNwdW1hc2spKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAkvKiBBdCBsZWFzdCBtYWtlIHN1cmUgdGhlIHR3byBidWZmZXJzIGFyZSBzb21ld2hhdCB0aGUgc2FtZSAqLwogCWlmIChidWZmZXJfYS0+cGFnZXMgIT0gYnVmZmVyX2ItPnBhZ2VzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRUFHQUlOOworCisJaWYgKHJpbmdfYnVmZmVyX2ZsYWdzICE9IFJCX0JVRkZFUlNfT04pCisJCWdvdG8gb3V0OworCisJaWYgKGF0b21pY19yZWFkKCZidWZmZXJfYS0+cmVjb3JkX2Rpc2FibGVkKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJ1ZmZlcl9iLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKIAogCWNwdV9idWZmZXJfYSA9IGJ1ZmZlcl9hLT5idWZmZXJzW2NwdV07CiAJY3B1X2J1ZmZlcl9iID0gYnVmZmVyX2ItPmJ1ZmZlcnNbY3B1XTsKIAorCWlmIChhdG9taWNfcmVhZCgmY3B1X2J1ZmZlcl9hLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKKworCWlmIChhdG9taWNfcmVhZCgmY3B1X2J1ZmZlcl9iLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKKwogCS8qCiAJICogV2UgY2FuJ3QgZG8gYSBzeW5jaHJvbml6ZV9zY2hlZCBoZXJlIGJlY2F1c2UgdGhpcwogCSAqIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4gYXRvbWljIGNvbnRleHQuCkBAIC0yMjk4LDE4ICsyNTcyLDIxIEBACiAJYXRvbWljX2RlYygmY3B1X2J1ZmZlcl9hLT5yZWNvcmRfZGlzYWJsZWQpOwogCWF0b21pY19kZWMoJmNwdV9idWZmZXJfYi0+cmVjb3JkX2Rpc2FibGVkKTsKIAotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3N3YXBfY3B1KTsKIAogc3RhdGljIHZvaWQgcmJfcmVtb3ZlX2VudHJpZXMoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCi0JCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqYnBhZ2UpCisJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqYnBhZ2UsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJdW5zaWduZWQgbG9uZyBoZWFkOwogCiAJX19yYXdfc3Bpbl9sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKLQlmb3IgKGhlYWQgPSAwOyBoZWFkIDwgbG9jYWxfcmVhZCgmYnBhZ2UtPmNvbW1pdCk7CisJZm9yIChoZWFkID0gb2Zmc2V0OyBoZWFkIDwgbG9jYWxfcmVhZCgmYnBhZ2UtPmNvbW1pdCk7CiAJICAgICBoZWFkICs9IHJiX2V2ZW50X2xlbmd0aChldmVudCkpIHsKIAogCQlldmVudCA9IF9fcmJfZGF0YV9wYWdlX2luZGV4KGJwYWdlLCBoZWFkKTsKQEAgLTIzNDAsOCArMjYxNyw4IEBACiAgKi8KIHZvaWQgKnJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CiAJc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmJwYWdlOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFhZGRyKQpAQCAtMjM0OSw2ICsyNjI2LDggQEAKIAogCWJwYWdlID0gKHZvaWQgKilhZGRyOwogCisJcmJfaW5pdF9wYWdlKGJwYWdlKTsKKwogCXJldHVybiBicGFnZTsKIH0KIApAQCAtMjM2OCw2ICsyNjQ3LDcgQEAKICAqIHJpbmdfYnVmZmVyX3JlYWRfcGFnZSAtIGV4dHJhY3QgYSBwYWdlIGZyb20gdGhlIHJpbmcgYnVmZmVyCiAgKiBAYnVmZmVyOiBidWZmZXIgdG8gZXh0cmFjdCBmcm9tCiAgKiBAZGF0YV9wYWdlOiB0aGUgcGFnZSB0byB1c2UgYWxsb2NhdGVkIGZyb20gcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlCisgKiBAbGVuOiBhbW91bnQgdG8gZXh0cmFjdAogICogQGNwdTogdGhlIGNwdSBvZiB0aGUgYnVmZmVyIHRvIGV4dHJhY3QKICAqIEBmdWxsOiBzaG91bGQgdGhlIGV4dHJhY3Rpb24gb25seSBoYXBwZW4gd2hlbiB0aGUgcGFnZSBpcyBmdWxsLgogICoKQEAgLTIzNzcsMTIgKzI2NTcsMTIgQEAKICAqIHRvIHN3YXAgd2l0aCBhIHBhZ2UgaW4gdGhlIHJpbmcgYnVmZmVyLgogICoKICAqIGZvciBleGFtcGxlOgotICoJcnBhZ2UgPSByaW5nX2J1ZmZlcl9hbGxvY19wYWdlKGJ1ZmZlcik7CisgKglycGFnZSA9IHJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShidWZmZXIpOwogICoJaWYgKCFycGFnZSkKICAqCQlyZXR1cm4gZXJyb3I7Ci0gKglyZXQgPSByaW5nX2J1ZmZlcl9yZWFkX3BhZ2UoYnVmZmVyLCAmcnBhZ2UsIGNwdSwgMCk7Ci0gKglpZiAocmV0KQotICoJCXByb2Nlc3NfcGFnZShycGFnZSk7CisgKglyZXQgPSByaW5nX2J1ZmZlcl9yZWFkX3BhZ2UoYnVmZmVyLCAmcnBhZ2UsIGxlbiwgY3B1LCAwKTsKKyAqCWlmIChyZXQgPj0gMCkKKyAqCQlwcm9jZXNzX3BhZ2UocnBhZ2UsIHJldCk7CiAgKgogICogV2hlbiBAZnVsbCBpcyBzZXQsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gdHJ1ZSB1bmxlc3MKICAqIHRoZSB3cml0ZXIgaXMgb2ZmIHRoZSByZWFkZXIgcGFnZS4KQEAgLTIzOTMsNzIgKzI2NzMsMTE4IEBACiAgKiAgcmVzcG9uc2libGUgZm9yIHRoYXQuCiAgKgogICogUmV0dXJuczoKLSAqICAxIGlmIGRhdGEgaGFzIGJlZW4gdHJhbnNmZXJyZWQKLSAqICAwIGlmIG5vIGRhdGEgaGFzIGJlZW4gdHJhbnNmZXJyZWQuCisgKiAgPj0wIGlmIGRhdGEgaGFzIGJlZW4gdHJhbnNmZXJyZWQsIHJldHVybnMgdGhlIG9mZnNldCBvZiBjb25zdW1lZCBkYXRhLgorICogIDwwIGlmIG5vIGRhdGEgaGFzIGJlZW4gdHJhbnNmZXJyZWQuCiAgKi8KIGludCByaW5nX2J1ZmZlcl9yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgICAgdm9pZCAqKmRhdGFfcGFnZSwgaW50IGNwdSwgaW50IGZ1bGwpCisJCQkgIHZvaWQgKipkYXRhX3BhZ2UsIHNpemVfdCBsZW4sIGludCBjcHUsIGludCBmdWxsKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqYnBhZ2U7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY29tbWl0OworCXVuc2lnbmVkIGludCByZWFkOworCXU2NCBzYXZlX3RpbWVzdGFtcDsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQorCQlnb3RvIG91dDsKKworCS8qCisJICogSWYgbGVuIGlzIG5vdCBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHBhZ2UgaGVhZGVyLCB0aGVuCisJICogd2UgY2FuIG5vdCBjb3B5IGFueXRoaW5nLgorCSAqLworCWlmIChsZW4gPD0gQlVGX1BBR0VfSERSX1NJWkUpCisJCWdvdG8gb3V0OworCisJbGVuIC09IEJVRl9QQUdFX0hEUl9TSVpFOwogCiAJaWYgKCFkYXRhX3BhZ2UpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAogCWJwYWdlID0gKmRhdGFfcGFnZTsKIAlpZiAoIWJwYWdlKQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAotCS8qCi0JICogcmJfYnVmZmVyX3BlZWsgd2lsbCBnZXQgdGhlIG5leHQgcmluZyBidWZmZXIgaWYKLQkgKiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSBpcyBlbXB0eS4KLQkgKi8KLQlldmVudCA9IHJiX2J1ZmZlcl9wZWVrKGJ1ZmZlciwgY3B1LCBOVUxMKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKKwlyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7CisJaWYgKCFyZWFkZXIpCisJCWdvdG8gb3V0X3VubG9jazsKIAotCS8qIGNoZWNrIGZvciBkYXRhICovCi0JaWYgKCFsb2NhbF9yZWFkKCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZS0+Y29tbWl0KSkKLQkJZ290byBvdXQ7CisJZXZlbnQgPSByYl9yZWFkZXJfZXZlbnQoY3B1X2J1ZmZlcik7CisKKwlyZWFkID0gcmVhZGVyLT5yZWFkOworCWNvbW1pdCA9IHJiX3BhZ2VfY29tbWl0KHJlYWRlcik7CisKIAkvKgotCSAqIElmIHRoZSB3cml0ZXIgaXMgYWxyZWFkeSBvZmYgb2YgdGhlIHJlYWQgcGFnZSwgdGhlbiBzaW1wbHkKLQkgKiBzd2l0Y2ggdGhlIHJlYWQgcGFnZSB3aXRoIHRoZSBnaXZlbiBwYWdlLiBPdGhlcndpc2UKLQkgKiB3ZSBuZWVkIHRvIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgcmVhZGVyIHRvIHRoZSB3cml0ZXIuCisJICogSWYgdGhpcyBwYWdlIGhhcyBiZWVuIHBhcnRpYWxseSByZWFkIG9yCisJICogaWYgbGVuIGlzIG5vdCBiaWcgZW5vdWdoIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2Ugb3IKKwkgKiBhIHdyaXRlciBpcyBzdGlsbCBvbiB0aGUgcGFnZSwgdGhlbgorCSAqIHdlIG11c3QgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBwYWdlIHRvIHRoZSBidWZmZXIuCisJICogT3RoZXJ3aXNlLCB3ZSBjYW4gc2ltcGx5IHN3YXAgdGhlIHBhZ2Ugd2l0aCB0aGUgb25lIHBhc3NlZCBpbi4KIAkgKi8KLQlpZiAoY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpIHsKLQkJdW5zaWduZWQgaW50IHJlYWQgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZDsKKwlpZiAocmVhZCB8fCAobGVuIDwgKGNvbW1pdCAtIHJlYWQpKSB8fAorCSAgICBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkgeworCQlzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqcnBhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZTsKKwkJdW5zaWduZWQgaW50IHJwb3MgPSByZWFkOworCQl1bnNpZ25lZCBpbnQgcG9zID0gMDsKKwkJdW5zaWduZWQgaW50IHNpemU7CiAKIAkJaWYgKGZ1bGwpCi0JCQlnb3RvIG91dDsKLQkJLyogVGhlIHdyaXRlciBpcyBzdGlsbCBvbiB0aGUgcmVhZGVyIHBhZ2UsIHdlIG11c3QgY29weSAqLwotCQlicGFnZSA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlOwotCQltZW1jcHkoYnBhZ2UtPmRhdGEsCi0JCSAgICAgICBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZS0+ZGF0YSArIHJlYWQsCi0JCSAgICAgICBsb2NhbF9yZWFkKCZicGFnZS0+Y29tbWl0KSAtIHJlYWQpOworCQkJZ290byBvdXRfdW5sb2NrOwogCi0JCS8qIGNvbnN1bWUgd2hhdCB3YXMgcmVhZCAqLwotCQljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSArPSByZWFkOworCQlpZiAobGVuID4gKGNvbW1pdCAtIHJlYWQpKQorCQkJbGVuID0gKGNvbW1pdCAtIHJlYWQpOwogCisJCXNpemUgPSByYl9ldmVudF9sZW5ndGgoZXZlbnQpOworCisJCWlmIChsZW4gPCBzaXplKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCS8qIHNhdmUgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCBzaW5jZSB0aGUgdXNlciB3aWxsIG5lZWQgaXQgKi8KKwkJc2F2ZV90aW1lc3RhbXAgPSBjcHVfYnVmZmVyLT5yZWFkX3N0YW1wOworCisJCS8qIE5lZWQgdG8gY29weSBvbmUgZXZlbnQgYXQgYSB0aW1lICovCisJCWRvIHsKKwkJCW1lbWNweShicGFnZS0+ZGF0YSArIHBvcywgcnBhZ2UtPmRhdGEgKyBycG9zLCBzaXplKTsKKworCQkJbGVuIC09IHNpemU7CisKKwkJCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOworCQkJcnBvcyA9IHJlYWRlci0+cmVhZDsKKwkJCXBvcyArPSBzaXplOworCisJCQlldmVudCA9IHJiX3JlYWRlcl9ldmVudChjcHVfYnVmZmVyKTsKKwkJCXNpemUgPSByYl9ldmVudF9sZW5ndGgoZXZlbnQpOworCQl9IHdoaWxlIChsZW4gPiBzaXplKTsKKworCQkvKiB1cGRhdGUgYnBhZ2UgKi8KKwkJbG9jYWxfc2V0KCZicGFnZS0+Y29tbWl0LCBwb3MpOworCQlicGFnZS0+dGltZV9zdGFtcCA9IHNhdmVfdGltZXN0YW1wOworCisJCS8qIHdlIGNvcGllZCBldmVyeXRoaW5nIHRvIHRoZSBiZWdpbm5pbmcgKi8KKwkJcmVhZCA9IDA7CiAJfSBlbHNlIHsKIAkJLyogc3dhcCB0aGUgcGFnZXMgKi8KIAkJcmJfaW5pdF9wYWdlKGJwYWdlKTsKLQkJYnBhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZTsKLQkJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2UgPSAqZGF0YV9wYWdlOwotCQljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA9IDA7CisJCWJwYWdlID0gcmVhZGVyLT5wYWdlOworCQlyZWFkZXItPnBhZ2UgPSAqZGF0YV9wYWdlOworCQlsb2NhbF9zZXQoJnJlYWRlci0+d3JpdGUsIDApOworCQlyZWFkZXItPnJlYWQgPSAwOwogCQkqZGF0YV9wYWdlID0gYnBhZ2U7Ci0JfQotCXJldCA9IDE7CiAKLQkvKiB1cGRhdGUgdGhlIGVudHJ5IGNvdW50ZXIgKi8KLQlyYl9yZW1vdmVfZW50cmllcyhjcHVfYnVmZmVyLCBicGFnZSk7Ci0gb3V0OgorCQkvKiB1cGRhdGUgdGhlIGVudHJ5IGNvdW50ZXIgKi8KKwkJcmJfcmVtb3ZlX2VudHJpZXMoY3B1X2J1ZmZlciwgYnBhZ2UsIHJlYWQpOworCX0KKwlyZXQgPSByZWFkOworCisgb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCisgb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjYsNyArMjc5Miw3IEBACiByYl9zaW1wbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJICAgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKLQlsb25nICpwID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgKnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNjRdOwogCWludCByOwogCkBAIC0yNDgyLDkgKzI4MDgsOSBAQAogcmJfc2ltcGxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewotCWxvbmcgKnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyAqcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1Zls2NF07Ci0JbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IHJldDsKIAogCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCkBAIC0yNTA5LDcgKzI4MzUsNyBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJiX3NpbXBsZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmJfc2ltcGxlX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gcmJfc2ltcGxlX3JlYWQsCiAJLndyaXRlCQk9IHJiX3NpbXBsZV93cml0ZSwKQEAgLTI1MzIsMyArMjg1OCw0MiBAQAogfQogCiBmc19pbml0Y2FsbChyYl9pbml0X2RlYnVnZnMpOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgaW50IHJiX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0KKwkJY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCByaW5nX2J1ZmZlciwgY3B1X25vdGlmeSk7CisJbG9uZyBjcHUgPSAobG9uZyloY3B1OworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9VUF9QUkVQQVJFOgorCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgorCQlpZiAoY3B1X2lzc2V0KGNwdSwgKmJ1ZmZlci0+Y3B1bWFzaykpCisJCQlyZXR1cm4gTk9USUZZX09LOworCisJCWJ1ZmZlci0+YnVmZmVyc1tjcHVdID0KKwkJCXJiX2FsbG9jYXRlX2NwdV9idWZmZXIoYnVmZmVyLCBjcHUpOworCQlpZiAoIWJ1ZmZlci0+YnVmZmVyc1tjcHVdKSB7CisJCQlXQVJOKDEsICJmYWlsZWQgdG8gYWxsb2NhdGUgcmluZyBidWZmZXIgb24gQ1BVICVsZFxuIiwKKwkJCSAgICAgY3B1KTsKKwkJCXJldHVybiBOT1RJRllfT0s7CisJCX0KKwkJc21wX3dtYigpOworCQljcHVfc2V0KGNwdSwgKmJ1ZmZlci0+Y3B1bWFzayk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCQkvKgorCQkgKiBEbyBub3RoaW5nLgorCQkgKiAgSWYgd2Ugd2VyZSB0byBmcmVlIHRoZSBidWZmZXIsIHRoZW4gdGhlIHVzZXIgd291bGQKKwkJICogIGxvc2UgYW55IHRyYWNlIHRoYXQgd2FzIGluIHRoZSBidWZmZXIuCisJCSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCAxN2JiODhkLi5hMDE3NGE0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMTEsMzIgKzExLDMzIEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgSW5nbyBNb2xuYXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgV2lsbGlhbSBMZWUgSXJ3aW4gSUlJCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9yaW5nX2J1ZmZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGxpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+Ci0jaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogI2RlZmluZSBUUkFDRV9CVUZGRVJfRkxBR1MJKFJCX0ZMX09WRVJXUklURSkKIApAQCAtNDQsMTQgKzQ1LDI1IEBACiB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkJdHJhY2luZ190aHJlc2g7CiAKIC8qCisgKiBPbiBib290IHVwLCB0aGUgcmluZyBidWZmZXIgaXMgc2V0IHRvIHRoZSBtaW5pbXVtIHNpemUsIHNvIHRoYXQKKyAqIHdlIGRvIG5vdCB3YXN0ZSBtZW1vcnkgb24gc3lzdGVtcyB0aGF0IGFyZSBub3QgdXNpbmcgdHJhY2luZy4KKyAqLworc3RhdGljIGludCByaW5nX2J1ZmZlcl9leHBhbmRlZDsKKworLyoKICAqIFdlIG5lZWQgdG8gY2hhbmdlIHRoaXMgc3RhdGUgd2hlbiBhIHNlbGZ0ZXN0IGlzIHJ1bm5pbmcuCiAgKiBBIHNlbGZ0ZXN0IHdpbGwgbHVyayBpbnRvIHRoZSByaW5nLWJ1ZmZlciB0byBjb3VudCB0aGUKICAqIGVudHJpZXMgaW5zZXJ0ZWQgZHVyaW5nIHRoZSBzZWxmdGVzdCBhbHRob3VnaCBzb21lIGNvbmN1cnJlbnQKLSAqIGluc2VydGlvbnMgaW50byB0aGUgcmluZy1idWZmZXIgc3VjaCBhcyBmdHJhY2VfcHJpbnRrIGNvdWxkIG9jY3VycmVkCisgKiBpbnNlcnRpb25zIGludG8gdGhlIHJpbmctYnVmZmVyIHN1Y2ggYXMgdHJhY2VfcHJpbnRrIGNvdWxkIG9jY3VycmVkCiAgKiBhdCB0aGUgc2FtZSB0aW1lLCBnaXZpbmcgZmFsc2UgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcmVzdWx0cy4KICAqLwogc3RhdGljIGJvb2wgX19yZWFkX21vc3RseSB0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmc7CiAKKy8qCisgKiBJZiBhIHRyYWNlciBpcyBydW5uaW5nLCB3ZSBkbyBub3Qgd2FudCB0byBydW4gU0VMRlRFU1QuCisgKi8KK3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZDsKKwogLyogRm9yIHRyYWNlcnMgdGhhdCBkb24ndCBpbXBsZW1lbnQgY3VzdG9tIGZsYWdzICovCiBzdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgZHVtbXlfdHJhY2VyX29wdFtdID0gewogCXsgfQpAQCAtNzMsNyArODUsNyBAQAogICogb2YgdGhlIHRyYWNlciBpcyBzdWNjZXNzZnVsLiBCdXQgdGhhdCBpcyB0aGUgb25seSBwbGFjZSB0aGF0IHNldHMKICAqIHRoaXMgYmFjayB0byB6ZXJvLgogICovCi1pbnQgdHJhY2luZ19kaXNhYmxlZCA9IDE7CitzdGF0aWMgaW50IHRyYWNpbmdfZGlzYWJsZWQgPSAxOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUobG9jYWxfdCwgZnRyYWNlX2NwdV9kaXNhYmxlZCk7CiAKQEAgLTkxLDYgKzEwMyw5IEBACiAKIHN0YXRpYyBjcHVtYXNrX3Zhcl90IF9fcmVhZF9tb3N0bHkJdHJhY2luZ19idWZmZXJfbWFzazsKIAorLyogRGVmaW5lIHdoaWNoIGNwdSBidWZmZXJzIGFyZSBjdXJyZW50bHkgcmVhZCBpbiB0cmFjZV9waXBlICovCitzdGF0aWMgY3B1bWFza192YXJfdAkJCXRyYWNpbmdfcmVhZGVyX2NwdW1hc2s7CisKICNkZWZpbmUgZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQlcCiAJZm9yX2VhY2hfY3B1KGNwdSwgdHJhY2luZ19idWZmZXJfbWFzaykKIApAQCAtMTA5LDE0ICsxMjQsMjEgQEAKICAqLwogaW50IGZ0cmFjZV9kdW1wX29uX29vcHM7CiAKLXN0YXRpYyBpbnQgdHJhY2luZ19zZXRfdHJhY2VyKGNoYXIgKmJ1Zik7CitzdGF0aWMgaW50IHRyYWNpbmdfc2V0X3RyYWNlcihjb25zdCBjaGFyICpidWYpOworCisjZGVmaW5lIEJPT1RVUF9UUkFDRVJfU0laRQkJMTAwCitzdGF0aWMgY2hhciBib290dXBfdHJhY2VyX2J1ZltCT09UVVBfVFJBQ0VSX1NJWkVdIF9faW5pdGRhdGE7CitzdGF0aWMgY2hhciAqZGVmYXVsdF9ib290dXBfdHJhY2VyOwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXRfZnRyYWNlKGNoYXIgKnN0cikKIHsKLQl0cmFjaW5nX3NldF90cmFjZXIoc3RyKTsKKwlzdHJuY3B5KGJvb3R1cF90cmFjZXJfYnVmLCBzdHIsIEJPT1RVUF9UUkFDRVJfU0laRSk7CisJZGVmYXVsdF9ib290dXBfdHJhY2VyID0gYm9vdHVwX3RyYWNlcl9idWY7CisJLyogV2UgYXJlIHVzaW5nIGZ0cmFjZSBlYXJseSwgZXhwYW5kIGl0ICovCisJcmluZ19idWZmZXJfZXhwYW5kZWQgPSAxOwogCXJldHVybiAxOwogfQotX19zZXR1cCgiZnRyYWNlIiwgc2V0X2Z0cmFjZSk7CitfX3NldHVwKCJmdHJhY2U9Iiwgc2V0X2Z0cmFjZSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9mdHJhY2VfZHVtcF9vbl9vb3BzKGNoYXIgKnN0cikKIHsKQEAgLTEzMywxMyArMTU1LDYgQEAKIAlyZXR1cm4gbnNlYzsKIH0KIAotY3ljbGVfdCBmdHJhY2Vfbm93KGludCBjcHUpCi17Ci0JdTY0IHRzID0gcmluZ19idWZmZXJfdGltZV9zdGFtcChjcHUpOwotCXJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGNwdSwgJnRzKTsKLQlyZXR1cm4gdHM7Ci19Ci0KIC8qCiAgKiBUaGUgZ2xvYmFsX3RyYWNlIGlzIHRoZSBkZXNjcmlwdG9yIHRoYXQgaG9sZHMgdGhlIHRyYWNpbmcKICAqIGJ1ZmZlcnMgZm9yIHRoZSBsaXZlIHRyYWNpbmcuIEZvciBlYWNoIENQVSwgaXQgY29udGFpbnMKQEAgLTE1Niw2ICsxNzEsMjAgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0cmFjZV9hcnJheV9jcHUsIGdsb2JhbF90cmFjZV9jcHUpOwogCitjeWNsZV90IGZ0cmFjZV9ub3coaW50IGNwdSkKK3sKKwl1NjQgdHM7CisKKwkvKiBFYXJseSBib290IHVwIGRvZXMgbm90IGhhdmUgYSBidWZmZXIgeWV0ICovCisJaWYgKCFnbG9iYWxfdHJhY2UuYnVmZmVyKQorCQlyZXR1cm4gdHJhY2VfY2xvY2tfbG9jYWwoKTsKKworCXRzID0gcmluZ19idWZmZXJfdGltZV9zdGFtcChnbG9iYWxfdHJhY2UuYnVmZmVyLCBjcHUpOworCXJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGdsb2JhbF90cmFjZS5idWZmZXIsIGNwdSwgJnRzKTsKKworCXJldHVybiB0czsKK30KKwogLyoKICAqIFRoZSBtYXhfdHIgaXMgdXNlZCB0byBzbmFwc2hvdCB0aGUgZ2xvYmFsX3RyYWNlIHdoZW4gYSBtYXhpbXVtCiAgKiBsYXRlbmN5IGlzIHJlYWNoZWQuIFNvbWUgdHJhY2VycyB3aWxsIHVzZSB0aGlzIHRvIHN0b3JlIGEgbWF4aW11bQpAQCAtMTg2LDkgKzIxNSw2IEBACiAJcmV0dXJuIHRyYWNlcl9lbmFibGVkOwogfQogCi0vKiBmdW5jdGlvbiB0cmFjaW5nIGVuYWJsZWQgKi8KLWludAkJCQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZDsKLQogLyoKICAqIHRyYWNlX2J1Zl9zaXplIGlzIHRoZSBzaXplIGluIGJ5dGVzIHRoYXQgaXMgYWxsb2NhdGVkCiAgKiBmb3IgYSBidWZmZXIuIE5vdGUsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXMgYWx3YXlzIHJvdW5kZWQKQEAgLTIyOSw3ICsyNTUsNyBAQAogCiAvKiB0cmFjZV9mbGFncyBob2xkcyB0cmFjZV9vcHRpb25zIGRlZmF1bHQgdmFsdWVzICovCiB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWdzID0gVFJBQ0VfSVRFUl9QUklOVF9QQVJFTlQgfCBUUkFDRV9JVEVSX1BSSU5USyB8Ci0JVFJBQ0VfSVRFUl9BTk5PVEFURTsKKwlUUkFDRV9JVEVSX0FOTk9UQVRFIHwgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8gfCBUUkFDRV9JVEVSX1NMRUVQX1RJTUU7CiAKIC8qKgogICogdHJhY2Vfd2FrZV91cCAtIHdha2UgdXAgdGFza3Mgd2FpdGluZyBmb3IgdHJhY2UgaW5wdXQKQEAgLTI4MCwxMyArMzA2LDE3IEBACiAJImJsb2NrIiwKIAkic3RhY2t0cmFjZSIsCiAJInNjaGVkLXRyZWUiLAotCSJmdHJhY2VfcHJpbnRrIiwKKwkidHJhY2VfcHJpbnRrIiwKIAkiZnRyYWNlX3ByZWVtcHQiLAogCSJicmFuY2giLAogCSJhbm5vdGF0ZSIsCiAJInVzZXJzdGFja3RyYWNlIiwKIAkic3ltLXVzZXJvYmoiLAogCSJwcmludGstbXNnLW9ubHkiLAorCSJjb250ZXh0LWluZm8iLAorCSJsYXRlbmN5LWZvcm1hdCIsCisJImdsb2JhbC1jbG9jayIsCisJInNsZWVwLXRpbWUiLAogCU5VTEwKIH07CiAKQEAgLTMyNiwxNDAgKzM1Niw3IEBACiAJZGF0YS0+cnRfcHJpb3JpdHkgPSB0c2stPnJ0X3ByaW9yaXR5OwogCiAJLyogcmVjb3JkIHRoaXMgdGFza3MgY29tbSAqLwotCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7Ci19Ci0KLS8qKgotICogdHJhY2Vfc2VxX3ByaW50ZiAtIHNlcXVlbmNlIHByaW50aW5nIG9mIHRyYWNlIGluZm9ybWF0aW9uCi0gKiBAczogdHJhY2Ugc2VxdWVuY2UgZGVzY3JpcHRvcgotICogQGZtdDogcHJpbnRmIGZvcm1hdCBzdHJpbmcKLSAqCi0gKiBUaGUgdHJhY2VyIG1heSB1c2UgZWl0aGVyIHNlcXVlbmNlIG9wZXJhdGlvbnMgb3IgaXRzIG93bgotICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUbyBzaW1wbGlmeSBmb3JtYXRpbmcgb2YgYSB0cmFjZQotICogdHJhY2Vfc2VxX3ByaW50ZiBpcyB1c2VkIHRvIHN0b3JlIHN0cmluZ3MgaW50byBhIHNwZWNpYWwKLSAqIGJ1ZmZlciAoQHMpLiBUaGVuIHRoZSBvdXRwdXQgbWF5IGJlIGVpdGhlciB1c2VkIGJ5Ci0gKiB0aGUgc2VxdWVuY2VyIG9yIHB1bGxlZCBpbnRvIGFub3RoZXIgYnVmZmVyLgotICovCi1pbnQKLXRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IGxlbiA9IChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbjsKLQl2YV9saXN0IGFwOwotCWludCByZXQ7Ci0KLQlpZiAoIWxlbikKLQkJcmV0dXJuIDA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2c25wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci0KLQkvKiBJZiB3ZSBjYW4ndCB3cml0ZSBpdCBhbGwsIGRvbid0IGJvdGhlciB3cml0aW5nIGFueXRoaW5nICovCi0JaWYgKHJldCA+PSBsZW4pCi0JCXJldHVybiAwOwotCi0Jcy0+bGVuICs9IHJldDsKLQotCXJldHVybiBsZW47Ci19Ci0KLS8qKgotICogdHJhY2Vfc2VxX3B1dHMgLSB0cmFjZSBzZXF1ZW5jZSBwcmludGluZyBvZiBzaW1wbGUgc3RyaW5nCi0gKiBAczogdHJhY2Ugc2VxdWVuY2UgZGVzY3JpcHRvcgotICogQHN0cjogc2ltcGxlIHN0cmluZyB0byByZWNvcmQKLSAqCi0gKiBUaGUgdHJhY2VyIG1heSB1c2UgZWl0aGVyIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KLSAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVGhpcyBmdW5jdGlvbiByZWNvcmRzIGEgc2ltcGxlIHN0cmluZwotICogaW50byBhIHNwZWNpYWwgYnVmZmVyIChAcykgZm9yIGxhdGVyIHJldHJpZXZhbCBieSBhIHNlcXVlbmNlcgotICogb3Igb3RoZXIgbWVjaGFuaXNtLgotICovCi1zdGF0aWMgaW50Ci10cmFjZV9zZXFfcHV0cyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpzdHIpCi17Ci0JaW50IGxlbiA9IHN0cmxlbihzdHIpOwotCi0JaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKQotCQlyZXR1cm4gMDsKLQotCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIHN0ciwgbGVuKTsKLQlzLT5sZW4gKz0gbGVuOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludAotdHJhY2Vfc2VxX3B1dGMoc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgY2hhciBjKQotewotCWlmIChzLT5sZW4gPj0gKFBBR0VfU0laRSAtIDEpKQotCQlyZXR1cm4gMDsKLQotCXMtPmJ1ZmZlcltzLT5sZW4rK10gPSBjOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXRyYWNlX3NlcV9wdXRtZW0oc3RydWN0IHRyYWNlX3NlcSAqcywgdm9pZCAqbWVtLCBzaXplX3QgbGVuKQotewotCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkKLQkJcmV0dXJuIDA7Ci0KLQltZW1jcHkocy0+YnVmZmVyICsgcy0+bGVuLCBtZW0sIGxlbik7Ci0Jcy0+bGVuICs9IGxlbjsKLQotCXJldHVybiBsZW47Ci19Ci0KLSNkZWZpbmUgTUFYX01FTUhFWF9CWVRFUwk4Ci0jZGVmaW5lIEhFWF9DSEFSUwkJKE1BWF9NRU1IRVhfQllURVMqMiArIDEpCi0KLXN0YXRpYyBpbnQKLXRyYWNlX3NlcV9wdXRtZW1faGV4KHN0cnVjdCB0cmFjZV9zZXEgKnMsIHZvaWQgKm1lbSwgc2l6ZV90IGxlbikKLXsKLQl1bnNpZ25lZCBjaGFyIGhleFtIRVhfQ0hBUlNdOwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBtZW07Ci0JaW50IGksIGo7Ci0KLSNpZmRlZiBfX0JJR19FTkRJQU4KLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0jZWxzZQotCWZvciAoaSA9IGxlbi0xLCBqID0gMDsgaSA+PSAwOyBpLS0pIHsKLSNlbmRpZgotCQloZXhbaisrXSA9IGhleF9hc2NfaGkoZGF0YVtpXSk7Ci0JCWhleFtqKytdID0gaGV4X2FzY19sbyhkYXRhW2ldKTsKLQl9Ci0JaGV4W2orK10gPSAnICc7Ci0KLQlyZXR1cm4gdHJhY2Vfc2VxX3B1dG1lbShzLCBoZXgsIGopOwotfQotCi1zdGF0aWMgaW50Ci10cmFjZV9zZXFfcGF0aChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKLXsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JaWYgKHMtPmxlbiA+PSAoUEFHRV9TSVpFIC0gMSkpCi0JCXJldHVybiAwOwotCXAgPSBkX3BhdGgocGF0aCwgcy0+YnVmZmVyICsgcy0+bGVuLCBQQUdFX1NJWkUgLSBzLT5sZW4pOwotCWlmICghSVNfRVJSKHApKSB7Ci0JCXAgPSBtYW5nbGVfcGF0aChzLT5idWZmZXIgKyBzLT5sZW4sIHAsICJcbiIpOwotCQlpZiAocCkgewotCQkJcy0+bGVuID0gcCAtIHMtPmJ1ZmZlcjsKLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJcy0+YnVmZmVyW3MtPmxlbisrXSA9ICc/JzsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi10cmFjZV9zZXFfcmVzZXQoc3RydWN0IHRyYWNlX3NlcSAqcykKLXsKLQlzLT5sZW4gPSAwOwotCXMtPnJlYWRwb3MgPSAwOworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUodHNrKTsKIH0KIAogc3NpemVfdCB0cmFjZV9zZXFfdG9fdXNlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCkKQEAgLTQ2Nyw2ICszNjQsOSBAQAogCWludCBsZW47CiAJaW50IHJldDsKIAorCWlmICghY250KQorCQlyZXR1cm4gMDsKKwogCWlmIChzLT5sZW4gPD0gcy0+cmVhZHBvcykKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtNDc0LDEwICszNzQsMzEgQEAKIAlpZiAoY250ID4gbGVuKQogCQljbnQgPSBsZW47CiAJcmV0ID0gY29weV90b191c2VyKHVidWYsIHMtPmJ1ZmZlciArIHMtPnJlYWRwb3MsIGNudCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ID09IGNudCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzLT5yZWFkcG9zICs9IGxlbjsKKwljbnQgLT0gcmV0OworCisJcy0+cmVhZHBvcyArPSBjbnQ7CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHNzaXplX3QgdHJhY2Vfc2VxX3RvX2J1ZmZlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB2b2lkICpidWYsIHNpemVfdCBjbnQpCit7CisJaW50IGxlbjsKKwl2b2lkICpyZXQ7CisKKwlpZiAocy0+bGVuIDw9IHMtPnJlYWRwb3MpCisJCXJldHVybiAtRUJVU1k7CisKKwlsZW4gPSBzLT5sZW4gLSBzLT5yZWFkcG9zOworCWlmIChjbnQgPiBsZW4pCisJCWNudCA9IGxlbjsKKwlyZXQgPSBtZW1jcHkoYnVmLCBzLT5idWZmZXIgKyBzLT5yZWFkcG9zLCBjbnQpOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXMtPnJlYWRwb3MgKz0gY250OwogCXJldHVybiBjbnQ7CiB9CiAKQEAgLTQ4OSw3ICs0MTAsNyBAQAogCXMtPmJ1ZmZlcltsZW5dID0gMDsKIAlzZXFfcHV0cyhtLCBzLT5idWZmZXIpOwogCi0JdHJhY2Vfc2VxX3Jlc2V0KHMpOworCXRyYWNlX3NlcV9pbml0KHMpOwogfQogCiAvKioKQEAgLTU0Myw3ICs0NjQsNyBAQAogCiAJZnRyYWNlX2VuYWJsZV9jcHUoKTsKIAotCVdBUk5fT05fT05DRShyZXQpOworCVdBUk5fT05fT05DRShyZXQgJiYgcmV0ICE9IC1FQUdBSU4pOwogCiAJX191cGRhdGVfbWF4X3RyKHRyLCB0c2ssIGNwdSk7CiAJX19yYXdfc3Bpbl91bmxvY2soJmZ0cmFjZV9tYXhfbG9jayk7CkBAIC01NTYsNiArNDc3LDggQEAKICAqIFJlZ2lzdGVyIGEgbmV3IHBsdWdpbiB0cmFjZXIuCiAgKi8KIGludCByZWdpc3Rlcl90cmFjZXIoc3RydWN0IHRyYWNlciAqdHlwZSkKK19fcmVsZWFzZXMoa2VybmVsX2xvY2spCitfX2FjcXVpcmVzKGtlcm5lbF9sb2NrKQogewogCXN0cnVjdCB0cmFjZXIgKnQ7CiAJaW50IGxlbjsKQEAgLTU5NCw5ICs1MTcsMTIgQEAKIAllbHNlCiAJCWlmICghdHlwZS0+ZmxhZ3MtPm9wdHMpCiAJCQl0eXBlLT5mbGFncy0+b3B0cyA9IGR1bW15X3RyYWNlcl9vcHQ7CisJaWYgKCF0eXBlLT53YWl0X3BpcGUpCisJCXR5cGUtPndhaXRfcGlwZSA9IGRlZmF1bHRfd2FpdF9waXBlOworCiAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAotCWlmICh0eXBlLT5zZWxmdGVzdCkgeworCWlmICh0eXBlLT5zZWxmdGVzdCAmJiAhdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZCkgewogCQlzdHJ1Y3QgdHJhY2VyICpzYXZlZF90cmFjZXIgPSBjdXJyZW50X3RyYWNlOwogCQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKIAkJaW50IGk7CkBAIC02MzgsOCArNTY0LDI2IEBACiAgb3V0OgogCXRyYWNpbmdfc2VsZnRlc3RfcnVubmluZyA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0JbG9ja19rZXJuZWwoKTsKIAorCWlmIChyZXQgfHwgIWRlZmF1bHRfYm9vdHVwX3RyYWNlcikKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKHN0cm5jbXAoZGVmYXVsdF9ib290dXBfdHJhY2VyLCB0eXBlLT5uYW1lLCBCT09UVVBfVFJBQ0VSX1NJWkUpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlwcmludGsoS0VSTl9JTkZPICJTdGFydGluZyB0cmFjZXIgJyVzJ1xuIiwgdHlwZS0+bmFtZSk7CisJLyogRG8gd2Ugd2FudCB0aGlzIHRyYWNlciB0byBzdGFydCBvbiBib290dXA/ICovCisJdHJhY2luZ19zZXRfdHJhY2VyKHR5cGUtPm5hbWUpOworCWRlZmF1bHRfYm9vdHVwX3RyYWNlciA9IE5VTEw7CisJLyogZGlzYWJsZSBvdGhlciBzZWxmdGVzdHMsIHNpbmNlIHRoaXMgd2lsbCBicmVhayBpdC4gKi8KKwl0cmFjaW5nX3NlbGZ0ZXN0X2Rpc2FibGVkID0gMTsKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAorCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyBGVFJBQ0Ugc2VsZnRlc3RzIGR1ZSB0byBydW5uaW5nIHRyYWNlciAnJXMnXG4iLAorCSAgICAgICB0eXBlLT5uYW1lKTsKKyNlbmRpZgorCisgb3V0X3VubG9jazoKKwlsb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY1OCw2ICs2MDIsMTUgQEAKIAogIGZvdW5kOgogCSp0ID0gKCp0KS0+bmV4dDsKKworCWlmICh0eXBlID09IGN1cnJlbnRfdHJhY2UgJiYgdHJhY2VyX2VuYWJsZWQpIHsKKwkJdHJhY2VyX2VuYWJsZWQgPSAwOworCQl0cmFjaW5nX3N0b3AoKTsKKwkJaWYgKGN1cnJlbnRfdHJhY2UtPnN0b3ApCisJCQljdXJyZW50X3RyYWNlLT5zdG9wKCZnbG9iYWxfdHJhY2UpOworCQljdXJyZW50X3RyYWNlID0gJm5vcF90cmFjZTsKKwl9CisKIAlpZiAoc3RybGVuKHR5cGUtPm5hbWUpICE9IG1heF90cmFjZXJfdHlwZV9sZW4pCiAJCWdvdG8gb3V0OwogCkBAIC02ODksMTkgKzY0MiwyMCBAQAogfQogCiAjZGVmaW5lIFNBVkVEX0NNRExJTkVTIDEyOAorI2RlZmluZSBOT19DTURMSU5FX01BUCBVSU5UX01BWAogc3RhdGljIHVuc2lnbmVkIG1hcF9waWRfdG9fY21kbGluZVtQSURfTUFYX0RFRkFVTFQrMV07CiBzdGF0aWMgdW5zaWduZWQgbWFwX2NtZGxpbmVfdG9fcGlkW1NBVkVEX0NNRExJTkVTXTsKIHN0YXRpYyBjaGFyIHNhdmVkX2NtZGxpbmVzW1NBVkVEX0NNRExJTkVTXVtUQVNLX0NPTU1fTEVOXTsKIHN0YXRpYyBpbnQgY21kbGluZV9pZHg7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRyYWNlX2NtZGxpbmVfbG9jayk7CitzdGF0aWMgcmF3X3NwaW5sb2NrX3QgdHJhY2VfY21kbGluZV9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOwogCiAvKiB0ZW1wb3JhcnkgZGlzYWJsZSByZWNvcmRpbmcgKi8KLWF0b21pY190IHRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYXRvbWljX3QgdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKIAogc3RhdGljIHZvaWQgdHJhY2VfaW5pdF9jbWRsaW5lcyh2b2lkKQogewotCW1lbXNldCgmbWFwX3BpZF90b19jbWRsaW5lLCAtMSwgc2l6ZW9mKG1hcF9waWRfdG9fY21kbGluZSkpOwotCW1lbXNldCgmbWFwX2NtZGxpbmVfdG9fcGlkLCAtMSwgc2l6ZW9mKG1hcF9jbWRsaW5lX3RvX3BpZCkpOworCW1lbXNldCgmbWFwX3BpZF90b19jbWRsaW5lLCBOT19DTURMSU5FX01BUCwgc2l6ZW9mKG1hcF9waWRfdG9fY21kbGluZSkpOworCW1lbXNldCgmbWFwX2NtZGxpbmVfdG9fcGlkLCBOT19DTURMSU5FX01BUCwgc2l6ZW9mKG1hcF9jbWRsaW5lX3RvX3BpZCkpOwogCWNtZGxpbmVfaWR4ID0gMDsKIH0KIApAQCAtNzM4LDEzICs2OTIsMTIgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRyYWNpbmdfc3RhcnRfbG9jaywgZmxhZ3MpOwotCWlmICgtLXRyYWNlX3N0b3BfY291bnQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHRyYWNlX3N0b3BfY291bnQgPCAwKSB7Ci0JCS8qIFNvbWVvbmUgc2NyZXdlZCB1cCB0aGVpciBkZWJ1Z2dpbmcgKi8KLQkJV0FSTl9PTl9PTkNFKDEpOwotCQl0cmFjZV9zdG9wX2NvdW50ID0gMDsKKwlpZiAoLS10cmFjZV9zdG9wX2NvdW50KSB7CisJCWlmICh0cmFjZV9zdG9wX2NvdW50IDwgMCkgeworCQkJLyogU29tZW9uZSBzY3Jld2VkIHVwIHRoZWlyIGRlYnVnZ2luZyAqLworCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJdHJhY2Vfc3RvcF9jb3VudCA9IDA7CisJCX0KIAkJZ290byBvdXQ7CiAJfQogCkBAIC03OTQsOCArNzQ3LDcgQEAKIAogc3RhdGljIHZvaWQgdHJhY2Vfc2F2ZV9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXVuc2lnbmVkIG1hcDsKLQl1bnNpZ25lZCBpZHg7CisJdW5zaWduZWQgcGlkLCBpZHg7CiAKIAlpZiAoIXRzay0+cGlkIHx8IHVubGlrZWx5KHRzay0+cGlkID4gUElEX01BWF9ERUZBVUxUKSkKIAkJcmV0dXJuOwpAQCAtODA2LDE3ICs3NTgsMjQgQEAKIAkgKiBub3IgZG8gd2Ugd2FudCB0byBkaXNhYmxlIGludGVycnVwdHMsCiAJICogc28gaWYgd2UgbWlzcyBoZXJlLCB0aGVuIGJldHRlciBsdWNrIG5leHQgdGltZS4KIAkgKi8KLQlpZiAoIXNwaW5fdHJ5bG9jaygmdHJhY2VfY21kbGluZV9sb2NrKSkKKwlpZiAoIV9fcmF3X3NwaW5fdHJ5bG9jaygmdHJhY2VfY21kbGluZV9sb2NrKSkKIAkJcmV0dXJuOwogCiAJaWR4ID0gbWFwX3BpZF90b19jbWRsaW5lW3Rzay0+cGlkXTsKLQlpZiAoaWR4ID49IFNBVkVEX0NNRExJTkVTKSB7CisJaWYgKGlkeCA9PSBOT19DTURMSU5FX01BUCkgewogCQlpZHggPSAoY21kbGluZV9pZHggKyAxKSAlIFNBVkVEX0NNRExJTkVTOwogCi0JCW1hcCA9IG1hcF9jbWRsaW5lX3RvX3BpZFtpZHhdOwotCQlpZiAobWFwIDw9IFBJRF9NQVhfREVGQVVMVCkKLQkJCW1hcF9waWRfdG9fY21kbGluZVttYXBdID0gKHVuc2lnbmVkKS0xOworCQkvKgorCQkgKiBDaGVjayB3aGV0aGVyIHRoZSBjbWRsaW5lIGJ1ZmZlciBhdCBpZHggaGFzIGEgcGlkCisJCSAqIG1hcHBlZC4gV2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGF0IGVudHJ5IHNvIHdlCisJCSAqIG5lZWQgdG8gY2xlYXIgdGhlIG1hcF9waWRfdG9fY21kbGluZS4gT3RoZXJ3aXNlIHdlCisJCSAqIHdvdWxkIHJlYWQgdGhlIG5ldyBjb21tIGZvciB0aGUgb2xkIHBpZC4KKwkJICovCisJCXBpZCA9IG1hcF9jbWRsaW5lX3RvX3BpZFtpZHhdOworCQlpZiAocGlkICE9IE5PX0NNRExJTkVfTUFQKQorCQkJbWFwX3BpZF90b19jbWRsaW5lW3BpZF0gPSBOT19DTURMSU5FX01BUDsKIAorCQltYXBfY21kbGluZV90b19waWRbaWR4XSA9IHRzay0+cGlkOwogCQltYXBfcGlkX3RvX2NtZGxpbmVbdHNrLT5waWRdID0gaWR4OwogCiAJCWNtZGxpbmVfaWR4ID0gaWR4OwpAQCAtODI0LDMzICs3ODMsMzcgQEAKIAogCW1lbWNweSgmc2F2ZWRfY21kbGluZXNbaWR4XSwgdHNrLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKIAotCXNwaW5fdW5sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOworCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOwogfQogCi1jaGFyICp0cmFjZV9maW5kX2NtZGxpbmUoaW50IHBpZCkKK3ZvaWQgdHJhY2VfZmluZF9jbWRsaW5lKGludCBwaWQsIGNoYXIgY29tbVtdKQogewotCWNoYXIgKmNtZGxpbmUgPSAiPC4uLj4iOwogCXVuc2lnbmVkIG1hcDsKIAotCWlmICghcGlkKQotCQlyZXR1cm4gIjxpZGxlPiI7CisJaWYgKCFwaWQpIHsKKwkJc3RyY3B5KGNvbW0sICI8aWRsZT4iKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChwaWQgPiBQSURfTUFYX0RFRkFVTFQpCi0JCWdvdG8gb3V0OworCWlmIChwaWQgPiBQSURfTUFYX0RFRkFVTFQpIHsKKwkJc3RyY3B5KGNvbW0sICI8Li4uPiIpOworCQlyZXR1cm47CisJfQogCisJX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOwogCW1hcCA9IG1hcF9waWRfdG9fY21kbGluZVtwaWRdOwotCWlmIChtYXAgPj0gU0FWRURfQ01ETElORVMpCi0JCWdvdG8gb3V0OworCWlmIChtYXAgIT0gTk9fQ01ETElORV9NQVApCisJCXN0cmNweShjb21tLCBzYXZlZF9jbWRsaW5lc1ttYXBdKTsKKwllbHNlCisJCXN0cmNweShjb21tLCAiPC4uLj4iKTsKIAotCWNtZGxpbmUgPSBzYXZlZF9jbWRsaW5lc1ttYXBdOwotCi0gb3V0OgotCXJldHVybiBjbWRsaW5lOworCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOwogfQogCiB2b2lkIHRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JaWYgKGF0b21pY19yZWFkKCZ0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCkpCisJaWYgKGF0b21pY19yZWFkKCZ0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCkgfHwgIXRyYWNlcl9lbmFibGVkIHx8CisJICAgICF0cmFjaW5nX2lzX29uKCkpCiAJCXJldHVybjsKIAogCXRyYWNlX3NhdmVfY21kbGluZSh0c2spOwpAQCAtODY0LDcgKzgyNyw3IEBACiAKIAllbnRyeS0+cHJlZW1wdF9jb3VudAkJPSBwYyAmIDB4ZmY7CiAJZW50cnktPnBpZAkJCT0gKHRzaykgPyB0c2stPnBpZCA6IDA7Ci0JZW50cnktPnRnaWQgICAgICAgICAgICAgICAJPSAodHNrKSA/IHRzay0+dGdpZCA6IDA7CisJZW50cnktPnRnaWQJCQk9ICh0c2spID8gdHNrLT50Z2lkIDogMDsKIAllbnRyeS0+ZmxhZ3MgPQogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJCShpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CkBAIC04NzYsNzggKzgzOSwxMzIgQEAKIAkJKG5lZWRfcmVzY2hlZCgpID8gVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQgOiAwKTsKIH0KIAorc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICp0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciB0eXBlLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgbGVuKTsKKwlpZiAoZXZlbnQgIT0gTlVMTCkgeworCQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCisJCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50LCBmbGFncywgcGMpOworCQllbnQtPnR5cGUgPSB0eXBlOworCX0KKworCXJldHVybiBldmVudDsKK30KK3N0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBza2lwLCBpbnQgcGMpOworc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3VzZXJzdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYywKKwkJCQkJaW50IHdha2UpCit7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisKKwlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCA2LCBwYyk7CisJZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZmxhZ3MsIHBjKTsKKworCWlmICh3YWtlKQorCQl0cmFjZV93YWtlX3VwKCk7Cit9CisKK3ZvaWQgdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCV9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCBmbGFncywgcGMsIDEpOworfQorCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgordHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit7CisJcmV0dXJuIHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmdsb2JhbF90cmFjZSwKKwkJCQkJIHR5cGUsIGxlbiwgZmxhZ3MsIHBjKTsKK30KKwordm9pZCB0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKK3sKKwlyZXR1cm4gX190cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCgmZ2xvYmFsX3RyYWNlLCBldmVudCwgZmxhZ3MsIHBjLCAxKTsKK30KKwordm9pZCB0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCXJldHVybiBfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KCZnbG9iYWxfdHJhY2UsIGV2ZW50LCBmbGFncywgcGMsIDApOworfQorCiB2b2lkCi10cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAordHJhY2VfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkgICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJICAgICAgIGludCBwYykKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBmdHJhY2VfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCiAJLyogSWYgd2UgYXJlIHJlYWRpbmcgdGhlIHJpbmcgYnVmZmVyLCBkb24ndCB0cmFjZSAqLwogCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCiAJCXJldHVybjsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9GTiwgc2l6ZW9mKCplbnRyeSksCisJCQkJCSAgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfRk47CiAJZW50cnktPmlwCQkJPSBpcDsKIAllbnRyeS0+cGFyZW50X2lwCQk9IHBhcmVudF9pcDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOwogfQogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotc3RhdGljIHZvaWQgX190cmFjZV9ncmFwaF9lbnRyeShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCitzdGF0aWMgaW50IF9fdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQlpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmdsb2JhbF90cmFjZSwgVFJBQ0VfR1JBUEhfRU5ULAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfR1JBUEhfRU5UOwogCWVudHJ5LT5ncmFwaF9lbnQJCQk9ICp0cmFjZTsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgZXZlbnQpOworCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQlpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQogCQlyZXR1cm47CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZShnbG9iYWxfdHJhY2UuYnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmZ2xvYmFsX3RyYWNlLCBUUkFDRV9HUkFQSF9SRVQsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0dSQVBIX1JFVDsKIAllbnRyeS0+cmV0CQkJCT0gKnRyYWNlOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChnbG9iYWxfdHJhY2UuYnVmZmVyLCBldmVudCk7CiB9CiAjZW5kaWYKIApAQCAtOTU3LDMxICs5NzQsMjMgQEAKICAgICAgICBpbnQgcGMpCiB7CiAJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCi0JCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIH0KIAotc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkgICAgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJICAgICAgIGludCBza2lwLCBpbnQgcGMpCitzdGF0aWMgdm9pZCBfX2Z0cmFjZV90cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSBpbnQgc2tpcCwgaW50IHBjKQogewogI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBzdGFja190cmFjZSB0cmFjZTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAotCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TVEFDS1RSQUNFKSkKLQkJcmV0dXJuOwotCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1NUQUNLLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQk9IFRSQUNFX1NUQUNLOwotCiAJbWVtc2V0KCZlbnRyeS0+Y2FsbGVyLCAwLCBzaXplb2YoZW50cnktPmNhbGxlcikpOwogCiAJdHJhY2UubnJfZW50cmllcwk9IDA7CkBAIC05OTAsMzggKzk5OSw0MyBAQAogCXRyYWNlLmVudHJpZXMJCT0gZW50cnktPmNhbGxlcjsKIAogCXNhdmVfc3RhY2tfdHJhY2UoJnRyYWNlKTsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOwogI2VuZGlmCiB9CiAKLXZvaWQgX190cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkgICBpbnQgc2tpcCkKK3N0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgICAgICAgaW50IHNraXAsIGludCBwYykKIHsKLQlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGRhdGEsIGZsYWdzLCBza2lwLCBwcmVlbXB0X2NvdW50KCkpOworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TVEFDS1RSQUNFKSkKKwkJcmV0dXJuOworCisJX19mdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCBza2lwLCBwYyk7Cit9CisKK3ZvaWQgX190cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkgICBpbnQgc2tpcCwgaW50IHBjKQoreworCV9fZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgc2tpcCwgcGMpOwogfQogCiBzdGF0aWMgdm9pZCBmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0JCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKKwkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCiB7CiAjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBzdGFja190cmFjZSB0cmFjZTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAogCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9VU0VSU1RBQ0tUUkFDRSkpCiAJCXJldHVybjsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9VU0VSX1NUQUNLLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQk9IFRSQUNFX1VTRVJfU1RBQ0s7CiAKIAltZW1zZXQoJmVudHJ5LT5jYWxsZXIsIDAsIHNpemVvZihlbnRyeS0+Y2FsbGVyKSk7CiAKQEAgLTEwMzEsNzAgKzEwNDUsNTggQEAKIAl0cmFjZS5lbnRyaWVzCQk9IGVudHJ5LT5jYWxsZXI7CiAKIAlzYXZlX3N0YWNrX3RyYWNlX3VzZXIoJnRyYWNlKTsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOwogI2VuZGlmCiB9CiAKLXZvaWQgX190cmFjZV91c2Vyc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJICAgdW5zaWduZWQgbG9uZyBmbGFncykKKyNpZmRlZiBVTlVTRUQKK3N0YXRpYyB2b2lkIF9fdHJhY2VfdXNlcnN0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZGF0YSwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CisJZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CiB9CisjZW5kaWYgLyogVU5VU0VEICovCiAKIHN0YXRpYyB2b2lkCi1mdHJhY2VfdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLCB2b2lkICpfX2RhdGEsCitmdHJhY2VfdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCiAJCSAgICAgaW50IHBjKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSA9IF9fZGF0YTsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gX190cjsKIAlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfU1BFQ0lBTCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1NQRUNJQUw7CiAJZW50cnktPmFyZzEJCQk9IGFyZzE7CiAJZW50cnktPmFyZzIJCQk9IGFyZzI7CiAJZW50cnktPmFyZzMJCQk9IGFyZzM7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGRhdGEsIGlycV9mbGFncywgNCwgcGMpOwotCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGRhdGEsIGlycV9mbGFncywgcGMpOwotCi0JdHJhY2Vfd2FrZV91cCgpOworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgcGMpOwogfQogCiB2b2lkCiBfX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwgdm9pZCAqX19kYXRhLAogCQl1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKQogewotCWZ0cmFjZV90cmFjZV9zcGVjaWFsKF9fdHIsIF9fZGF0YSwgYXJnMSwgYXJnMiwgYXJnMywgcHJlZW1wdF9jb3VudCgpKTsKKwlmdHJhY2VfdHJhY2Vfc3BlY2lhbChfX3RyLCBhcmcxLCBhcmcyLCBhcmczLCBwcmVlbXB0X2NvdW50KCkpOwogfQogCiB2b2lkCiB0cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgICAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0NUWCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfQ1RYOwogCWVudHJ5LT5wcmV2X3BpZAkJCT0gcHJldi0+cGlkOwogCWVudHJ5LT5wcmV2X3ByaW8JCT0gcHJldi0+cHJpbzsKIAllbnRyeS0+cHJldl9zdGF0ZQkJPSBwcmV2LT5zdGF0ZTsKQEAgLTExMDIsMjkgKzExMDQsMjMgQEAKIAllbnRyeS0+bmV4dF9wcmlvCQk9IG5leHQtPnByaW87CiAJZW50cnktPm5leHRfc3RhdGUJCT0gbmV4dC0+c3RhdGU7CiAJZW50cnktPm5leHRfY3B1CT0gdGFza19jcHUobmV4dCk7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGRhdGEsIGZsYWdzLCA1LCBwYyk7Ci0JZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZGF0YSwgZmxhZ3MsIHBjKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIGZsYWdzLCBwYyk7CiB9CiAKIHZvaWQKIHRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICp3YWtlZSwKIAkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgICAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1dBS0UsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1dBS0U7CiAJZW50cnktPnByZXZfcGlkCQkJPSBjdXJyLT5waWQ7CiAJZW50cnktPnByZXZfcHJpbwkJPSBjdXJyLT5wcmlvOwogCWVudHJ5LT5wcmV2X3N0YXRlCQk9IGN1cnItPnN0YXRlOwpAQCAtMTEzMiwxMSArMTEyOCwxMCBAQAogCWVudHJ5LT5uZXh0X3ByaW8JCT0gd2FrZWUtPnByaW87CiAJZW50cnktPm5leHRfc3RhdGUJCT0gd2FrZWUtPnN0YXRlOwogCWVudHJ5LT5uZXh0X2NwdQkJCT0gdGFza19jcHUod2FrZWUpOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0JZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBmbGFncywgNiwgcGMpOwotCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGRhdGEsIGZsYWdzLCBwYyk7CiAKLQl0cmFjZV93YWtlX3VwKCk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisJZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgNiwgcGMpOworCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGZsYWdzLCBwYyk7CiB9CiAKIHZvaWQKQEAgLTExNTcsNjYgKzExNTIsNyBAQAogCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwogCiAJaWYgKGxpa2VseShhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpID09IDEpKQotCQlmdHJhY2VfdHJhY2Vfc3BlY2lhbCh0ciwgZGF0YSwgYXJnMSwgYXJnMiwgYXJnMywgcGMpOwotCi0JYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKLXN0YXRpYyB2b2lkCi1mdW5jdGlvbl90cmFjZV9jYWxsX3ByZWVtcHRfb25seSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKLXsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBkaXNhYmxlZDsKLQlpbnQgY3B1LCByZXNjaGVkOwotCWludCBwYzsKLQotCWlmICh1bmxpa2VseSghZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0KLQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOwotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0JZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwotCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7Ci0KLQlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7Ci0JZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOwotfQotCi1zdGF0aWMgdm9pZAotZnVuY3Rpb25fdHJhY2VfY2FsbCh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKLXsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBkaXNhYmxlZDsKLQlpbnQgY3B1OwotCWludCBwYzsKLQotCWlmICh1bmxpa2VseSghZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIE5lZWQgdG8gdXNlIHJhdywgc2luY2UgdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlCi0JICogcmVjdXJzaXZlIHByb3RlY3Rpb24gaXMgcGVyZm9ybWVkLgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKLQotCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpIHsKLQkJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwotCX0KKwkJZnRyYWNlX3RyYWNlX3NwZWNpYWwodHIsIGFyZzEsIGFyZzIsIGFyZzMsIHBjKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xMjI5LDYgKzExNjUsNyBAQAogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGRpc2FibGVkOworCWludCByZXQ7CiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKQEAgLTEyNDQsMTUgKzExODEsMTggQEAKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CiAJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgewogCQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQkJX190cmFjZV9ncmFwaF9lbnRyeSh0ciwgZGF0YSwgdHJhY2UsIGZsYWdzLCBwYyk7CisJCXJldCA9IF9fdHJhY2VfZ3JhcGhfZW50cnkodHIsIHRyYWNlLCBmbGFncywgcGMpOworCX0gZWxzZSB7CisJCXJldCA9IDA7CiAJfQogCS8qIE9ubHkgZG8gdGhlIGF0b21pYyBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQgKi8KIAlpZiAoIXRlc3RfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpKQogCQlzZXRfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOworCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCXJldHVybiAxOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSkKQEAgLTEyNzAsNyArMTIxMCw3IEBACiAJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwogCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpIHsKIAkJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JCV9fdHJhY2VfZ3JhcGhfcmV0dXJuKHRyLCBkYXRhLCB0cmFjZSwgZmxhZ3MsIHBjKTsKKwkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIHRyYWNlLCBmbGFncywgcGMpOwogCX0KIAlpZiAoIXRyYWNlLT5kZXB0aCkKIAkJY2xlYXJfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwpAQCAtMTI3OSwzMCArMTIxOSwxMjIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCiAKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9CisKKy8qKgorICogdHJhY2VfdmJwcmludGsgLSB3cml0ZSBiaW5hcnkgbXNnIHRvIHRyYWNpbmcgYnVmZmVyCisgKgorICovCitpbnQgdHJhY2VfdmJwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7Ci0JLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsLAotfTsKKwlzdGF0aWMgcmF3X3NwaW5sb2NrX3QgdHJhY2VfYnVmX2xvY2sgPQorCQkocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworCXN0YXRpYyB1MzIgdHJhY2VfYnVmW1RSQUNFX0JVRl9TSVpFXTsKIAotdm9pZCB0cmFjaW5nX3N0YXJ0X2Z1bmN0aW9uX3RyYWNlKHZvaWQpCi17Ci0JZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAwOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwlzdHJ1Y3QgYnByaW50X2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXNjaGVkOworCWludCBjcHUsIGxlbiA9IDAsIHNpemUsIHBjOwogCi0JaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUkVFTVBUT05MWSkKLQkJdHJhY2Vfb3BzLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsX3ByZWVtcHRfb25seTsKLQllbHNlCi0JCXRyYWNlX29wcy5mdW5jID0gZnVuY3Rpb25fdHJhY2VfY2FsbDsKKwlpZiAodW5saWtlbHkodHJhY2luZ19zZWxmdGVzdF9ydW5uaW5nIHx8IHRyYWNpbmdfZGlzYWJsZWQpKQorCQlyZXR1cm4gMDsKIAotCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKLQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDE7CisJLyogRG9uJ3QgcG9sbHV0ZSBncmFwaCB0cmFjZXMgd2l0aCB0cmFjZV92cHJpbnRrIGludGVybmFscyAqLworCXBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKKworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKKwkJZ290byBvdXQ7CisKKwkvKiBMb2NrZGVwIHVzZXMgdHJhY2VfcHJpbnRrIGZvciBsb2NrIHRyYWNpbmcgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9idWZfbG9jayk7CisJbGVuID0gdmJpbl9wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKKworCWlmIChsZW4gPiBUUkFDRV9CVUZfU0laRSB8fCBsZW4gPCAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBzaXplb2YodTMyKSAqIGxlbjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0JQUklOVCwgc2l6ZSwgZmxhZ3MsIHBjKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dF91bmxvY2s7CisJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+aXAJCQk9IGlwOworCWVudHJ5LT5mbXQJCQk9IGZtdDsKKworCW1lbWNweShlbnRyeS0+YnVmLCB0cmFjZV9idWYsIHNpemVvZih1MzIpICogbGVuKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKKworb3V0X3VubG9jazoKKwlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfYnVmX2xvY2spOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworb3V0OgorCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwl1bnBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKKworCXJldHVybiBsZW47CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92YnByaW50ayk7CiAKLXZvaWQgdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKHZvaWQpCitpbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDA7Ci0JdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CisJc3RhdGljIHJhd19zcGlubG9ja190IHRyYWNlX2J1Zl9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworCXN0YXRpYyBjaGFyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07CisKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJaW50IGNwdSwgbGVuID0gMCwgc2l6ZSwgcGM7CisJc3RydWN0IHByaW50X2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWlmICh0cmFjaW5nX2Rpc2FibGVkIHx8IHRyYWNpbmdfc2VsZnRlc3RfcnVubmluZykKKwkJcmV0dXJuIDA7CisKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJZGF0YSA9IHRyLT5kYXRhW2NwdV07CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCisJCWdvdG8gb3V0OworCisJcGF1c2VfZ3JhcGhfdHJhY2luZygpOworCXJhd19sb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCV9fcmF3X3NwaW5fbG9jaygmdHJhY2VfYnVmX2xvY2spOworCWxlbiA9IHZzbnByaW50Zih0cmFjZV9idWYsIFRSQUNFX0JVRl9TSVpFLCBmbXQsIGFyZ3MpOworCisJbGVuID0gbWluKGxlbiwgVFJBQ0VfQlVGX1NJWkUtMSk7CisJdHJhY2VfYnVmW2xlbl0gPSAwOworCisJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbGVuICsgMTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1BSSU5ULCBzaXplLCBpcnFfZmxhZ3MsIHBjKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dF91bmxvY2s7CisJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+aXAJCQk9IGlwOworCisJbWVtY3B5KCZlbnRyeS0+YnVmLCB0cmFjZV9idWYsIGxlbik7CisJZW50cnktPmJ1ZltsZW5dID0gMDsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKKworIG91dF91bmxvY2s6CisJX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKwl1bnBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKKyBvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOworCisJcmV0dXJuIGxlbjsKIH0KLSNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfdnByaW50ayk7CiAKIGVudW0gdHJhY2VfZmlsZV90eXBlIHsKIAlUUkFDRV9GSUxFX0xBVF9GTVQJPSAxLApAQCAtMTM0NSwxMCArMTM3NywyNSBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gaXRlci0+dHItPmJ1ZmZlcjsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCwgKm5leHQgPSBOVUxMOworCWludCBjcHVfZmlsZSA9IGl0ZXItPmNwdV9maWxlOwogCXU2NCBuZXh0X3RzID0gMCwgdHM7CiAJaW50IG5leHRfY3B1ID0gLTE7CiAJaW50IGNwdTsKIAorCS8qCisJICogSWYgd2UgYXJlIGluIGEgcGVyX2NwdSB0cmFjZSBmaWxlLCBkb24ndCBib3RoZXIgYnkgaXRlcmF0aW5nIG92ZXIKKwkgKiBhbGwgY3B1IGFuZCBwZWVrIGRpcmVjdGx5LgorCSAqLworCWlmIChjcHVfZmlsZSA+IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQlpZiAocmluZ19idWZmZXJfZW1wdHlfY3B1KGJ1ZmZlciwgY3B1X2ZpbGUpKQorCQkJcmV0dXJuIE5VTEw7CisJCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBjcHVfZmlsZSwgZW50X3RzKTsKKwkJaWYgKGVudF9jcHUpCisJCQkqZW50X2NwdSA9IGNwdV9maWxlOworCisJCXJldHVybiBlbnQ7CisJfQorCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAKIAkJaWYgKHJpbmdfYnVmZmVyX2VtcHR5X2NwdShidWZmZXIsIGNwdSkpCkBAIC0xMzc2LDggKzE0MjMsOCBAQAogfQogCiAvKiBGaW5kIHRoZSBuZXh0IHJlYWwgZW50cnksIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGl0ZXJhdG9yIGl0c2VsZiAqLwotc3RhdGljIHN0cnVjdCB0cmFjZV9lbnRyeSAqCi1maW5kX25leHRfZW50cnkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgKmVudF9jcHUsIHU2NCAqZW50X3RzKQorc3RydWN0IHRyYWNlX2VudHJ5ICp0cmFjZV9maW5kX25leHRfZW50cnkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpCiB7CiAJcmV0dXJuIF9fZmluZF9uZXh0X2VudHJ5KGl0ZXIsIGVudF9jcHUsIGVudF90cyk7CiB9CkBAIC0xNDI2LDE5ICsxNDczLDMyIEBACiAJcmV0dXJuIGVudDsKIH0KIAorLyoKKyAqIE5vIG5lY2Vzc2FyeSBsb2NraW5nIGhlcmUuIFRoZSB3b3JzdCB0aGluZyB3aGljaCBjYW4KKyAqIGhhcHBlbiBpcyBsb29zaW5nIGV2ZW50cyBjb25zdW1lZCBhdCB0aGUgc2FtZSB0aW1lCisgKiBieSBhIHRyYWNlX3BpcGUgcmVhZGVyLgorICogT3RoZXIgdGhhbiB0aGF0LCB3ZSBkb24ndCByaXNrIHRvIGNyYXNoIHRoZSByaW5nIGJ1ZmZlcgorICogYmVjYXVzZSBpdCBzZXJpYWxpemVzIHRoZSByZWFkZXJzLgorICoKKyAqIFRoZSBjdXJyZW50IHRyYWNlciBpcyBjb3BpZWQgdG8gYXZvaWQgYSBnbG9iYWwgbG9ja2luZworICogYWxsIGFyb3VuZC4KKyAqLwogc3RhdGljIHZvaWQgKnNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0YXRpYyBzdHJ1Y3QgdHJhY2VyICpvbGRfdHJhY2VyOworCWludCBjcHVfZmlsZSA9IGl0ZXItPmNwdV9maWxlOwogCXZvaWQgKnAgPSBOVUxMOwogCWxvZmZfdCBsID0gMDsKIAlpbnQgY3B1OwogCisJLyogY29weSB0aGUgdHJhY2VyIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIGxvY2sgYWxsIGFyb3VuZCAqLwogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCi0JaWYgKCFjdXJyZW50X3RyYWNlIHx8IGN1cnJlbnRfdHJhY2UgIT0gaXRlci0+dHJhY2UpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQkJcmV0dXJuIE5VTEw7CisJaWYgKHVubGlrZWx5KG9sZF90cmFjZXIgIT0gY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlKSkgeworCQlvbGRfdHJhY2VyID0gY3VycmVudF90cmFjZTsKKwkJKml0ZXItPnRyYWNlID0gKmN1cnJlbnRfdHJhY2U7CiAJfQorCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKIAlhdG9taWNfaW5jKCZ0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCk7CiAKQEAgLTE0NDksOSArMTUwOSwxMiBAQAogCiAJCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwogCi0JCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewotCQkJcmluZ19idWZmZXJfaXRlcl9yZXNldChpdGVyLT5idWZmZXJfaXRlcltjcHVdKTsKLQkJfQorCQlpZiAoY3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCisJCQkJcmluZ19idWZmZXJfaXRlcl9yZXNldChpdGVyLT5idWZmZXJfaXRlcltjcHVdKTsKKwkJfSBlbHNlCisJCQlyaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV9maWxlXSk7CisKIAogCQlmdHJhY2VfZW5hYmxlX2NwdSgpOwogCkBAIC0xNDY5LDE1NSArMTUzMiw2IEBACiBzdGF0aWMgdm9pZCBzX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogewogCWF0b21pY19kZWMoJnRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkKTsKLQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotfQotCi0jaWZkZWYgQ09ORklHX0tSRVRQUk9CRVMKLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqa3JldHByb2JlZChjb25zdCBjaGFyICpuYW1lKQotewotCXN0YXRpYyBjb25zdCBjaGFyIHRyYW1wX25hbWVbXSA9ICJrcmV0cHJvYmVfdHJhbXBvbGluZSI7Ci0JaW50IHNpemUgPSBzaXplb2YodHJhbXBfbmFtZSk7Ci0KLQlpZiAoc3RybmNtcCh0cmFtcF9uYW1lLCBuYW1lLCBzaXplKSA9PSAwKQotCQlyZXR1cm4gIlt1bmtub3duL2tyZXRwcm9iZSdkXSI7Ci0JcmV0dXJuIG5hbWU7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICprcmV0cHJvYmVkKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIG5hbWU7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0tSRVRQUk9CRVMgKi8KLQotc3RhdGljIGludAotc2VxX3ByaW50X3N5bV9zaG9ydChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQlrYWxsc3ltc19sb29rdXAoYWRkcmVzcywgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQotCW5hbWUgPSBrcmV0cHJvYmVkKHN0cik7Ci0KLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCBmbXQsIG5hbWUpOwotI2VuZGlmCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXNlcV9wcmludF9zeW1fb2Zmc2V0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0jaWZkZWYgQ09ORklHX0tBTExTWU1TCi0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKLQljb25zdCBjaGFyICpuYW1lOwotCi0Jc3ByaW50X3N5bWJvbChzdHIsIGFkZHJlc3MpOwotCW5hbWUgPSBrcmV0cHJvYmVkKHN0cik7Ci0KLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCBmbXQsIG5hbWUpOwotI2VuZGlmCi0JcmV0dXJuIDE7Ci19Ci0KLSNpZm5kZWYgQ09ORklHXzY0QklUCi0jIGRlZmluZSBJUF9GTVQgIiUwOGx4IgotI2Vsc2UKLSMgZGVmaW5lIElQX0ZNVCAiJTAxNmx4IgotI2VuZGlmCi0KLWludAotc2VxX3ByaW50X2lwX3N5bShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCFpcCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIjAiKTsKLQotCWlmIChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9PRkZTRVQpCi0JCXJldCA9IHNlcV9wcmludF9zeW1fb2Zmc2V0KHMsICIlcyIsIGlwKTsKLQllbHNlCi0JCXJldCA9IHNlcV9wcmludF9zeW1fc2hvcnQocywgIiVzIiwgaXApOwotCi0JaWYgKCFyZXQpCi0JCXJldHVybiAwOwotCi0JaWYgKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX0FERFIpCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA8IiBJUF9GTVQgIj4iLCBpcCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2VxX3ByaW50X3VzZXJfaXAoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHZtc3RhcnQgPSAwOwotCWludCByZXQgPSAxOwotCi0JaWYgKG1tKSB7Ci0JCWNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCi0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGlwKTsKLQkJaWYgKHZtYSkgewotCQkJZmlsZSA9IHZtYS0+dm1fZmlsZTsKLQkJCXZtc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCQl9Ci0JCWlmIChmaWxlKSB7Ci0JCQlyZXQgPSB0cmFjZV9zZXFfcGF0aChzLCAmZmlsZS0+Zl9wYXRoKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWysweCVseF0iLCBpcCAtIHZtc3RhcnQpOwotCQl9Ci0JCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JfQotCWlmIChyZXQgJiYgKChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9BRERSKSB8fCAhZmlsZSkpCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA8IiBJUF9GTVQgIj4iLCBpcCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotc2VxX3ByaW50X3VzZXJpcF9vYmpzKGNvbnN0IHN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7Ci0JaW50IHJldCA9IDE7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9VU0VST0JKKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQkJLyoKLQkJICogd2UgZG8gdGhlIGxvb2t1cCBvbiB0aGUgdGhyZWFkIGdyb3VwIGxlYWRlciwKLQkJICogc2luY2UgaW5kaXZpZHVhbCB0aHJlYWRzIG1pZ2h0IGhhdmUgYWxyZWFkeSBxdWl0IQotCQkgKi8KLQkJcmN1X3JlYWRfbG9jaygpOwotCQl0YXNrID0gZmluZF90YXNrX2J5X3ZwaWQoZW50cnktPmVudC50Z2lkKTsKLQkJaWYgKHRhc2spCi0JCQltbSA9IGdldF90YXNrX21tKHRhc2spOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NUQUNLX0VOVFJJRVM7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGlwID0gZW50cnktPmNhbGxlcltpXTsKLQotCQlpZiAoaXAgPT0gVUxPTkdfTUFYIHx8ICFyZXQpCi0JCQlicmVhazsKLQkJaWYgKGkgJiYgcmV0KQotCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiA8LSAiKTsKLQkJaWYgKCFpcCkgewotCQkJaWYgKHJldCkKLQkJCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiPz8iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcmV0KQotCQkJYnJlYWs7Ci0JCWlmIChyZXQpCi0JCQlyZXQgPSBzZXFfcHJpbnRfdXNlcl9pcChzLCBtbSwgaXAsIHN5bV9mbGFncyk7Ci0JfQotCi0JaWYgKG1tKQotCQltbXB1dChtbSk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbGF0X2hlbHBfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTE2NTgsMTEgKzE1NzIsMTEgQEAKIAl0b3RhbCA9IGVudHJpZXMgKwogCQlyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLT50ci0+YnVmZmVyKTsKIAotCXNlcV9wcmludGYobSwgIiVzIGxhdGVuY3kgdHJhY2UgdjEuMS41IG9uICVzXG4iLAorCXNlcV9wcmludGYobSwgIiMgJXMgbGF0ZW5jeSB0cmFjZSB2MS4xLjUgb24gJXNcbiIsCiAJCSAgIG5hbWUsIFVUU19SRUxFQVNFKTsKLQlzZXFfcHV0cyhtLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJc2VxX3B1dHMobSwgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAJCSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlzZXFfcHJpbnRmKG0sICIgbGF0ZW5jeTogJWx1IHVzLCAjJWx1LyVsdSwgQ1BVIyVkIHwiCisJc2VxX3ByaW50ZihtLCAiIyBsYXRlbmN5OiAlbHUgdXMsICMlbHUvJWx1LCBDUFUjJWQgfCIKIAkJICAgIiAoTTolcyBWUDolZCwgS1A6JWQsIFNQOiVkIEhQOiVkIiwKIAkJICAgbnNlY3NfdG9fdXNlY3MoZGF0YS0+c2F2ZWRfbGF0ZW5jeSksCiAJCSAgIGVudHJpZXMsCkBAIC0xNjg0LDEyMSArMTU5OCwyNCBAQAogI2Vsc2UKIAlzZXFfcHV0cyhtLCAiKVxuIik7CiAjZW5kaWYKLQlzZXFfcHV0cyhtLCAiICAgIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlzZXFfcHJpbnRmKG0sICIgICAgfCB0YXNrOiAlLjE2cy0lZCAiCisJc2VxX3B1dHMobSwgIiMgICAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXNlcV9wcmludGYobSwgIiMgICAgfCB0YXNrOiAlLjE2cy0lZCAiCiAJCSAgICIodWlkOiVkIG5pY2U6JWxkIHBvbGljeTolbGQgcnRfcHJpbzolbGQpXG4iLAogCQkgICBkYXRhLT5jb21tLCBkYXRhLT5waWQsIGRhdGEtPnVpZCwgZGF0YS0+bmljZSwKIAkJICAgZGF0YS0+cG9saWN5LCBkYXRhLT5ydF9wcmlvcml0eSk7Ci0Jc2VxX3B1dHMobSwgIiAgICAtLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJc2VxX3B1dHMobSwgIiMgICAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCiAJaWYgKGRhdGEtPmNyaXRpY2FsX3N0YXJ0KSB7Ci0JCXNlcV9wdXRzKG0sICIgPT4gc3RhcnRlZCBhdDogIik7CisJCXNlcV9wdXRzKG0sICIjICA9PiBzdGFydGVkIGF0OiAiKTsKIAkJc2VxX3ByaW50X2lwX3N5bSgmaXRlci0+c2VxLCBkYXRhLT5jcml0aWNhbF9zdGFydCwgc3ltX2ZsYWdzKTsKIAkJdHJhY2VfcHJpbnRfc2VxKG0sICZpdGVyLT5zZXEpOwotCQlzZXFfcHV0cyhtLCAiXG4gPT4gZW5kZWQgYXQ6ICAgIik7CisJCXNlcV9wdXRzKG0sICJcbiMgID0+IGVuZGVkIGF0OiAgICIpOwogCQlzZXFfcHJpbnRfaXBfc3ltKCZpdGVyLT5zZXEsIGRhdGEtPmNyaXRpY2FsX2VuZCwgc3ltX2ZsYWdzKTsKIAkJdHJhY2VfcHJpbnRfc2VxKG0sICZpdGVyLT5zZXEpOwotCQlzZXFfcHV0cyhtLCAiXG4iKTsKKwkJc2VxX3B1dHMobSwgIiNcbiIpOwogCX0KIAotCXNlcV9wdXRzKG0sICJcbiIpOwotfQotCi1zdGF0aWMgdm9pZAotbGF0X3ByaW50X2dlbmVyaWMoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSwgaW50IGNwdSkKLXsKLQlpbnQgaGFyZGlycSwgc29mdGlycTsKLQljaGFyICpjb21tOwotCi0JY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkKTsKLQotCXRyYWNlX3NlcV9wcmludGYocywgIiU4LjhzLSUtNWQgIiwgY29tbSwgZW50cnktPnBpZCk7Ci0JdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTNkIiwgY3B1KTsKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlYyVjIiwKLQkJCShlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0lSUVNfT0ZGKSA/ICdkJyA6Ci0JCQkgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSVJRU19OT1NVUFBPUlQpID8gJ1gnIDogJy4nLAotCQkJKChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX05FRURfUkVTQ0hFRCkgPyAnTicgOiAnLicpKTsKLQotCWhhcmRpcnEgPSBlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0hBUkRJUlE7Ci0Jc29mdGlycSA9IGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfU09GVElSUTsKLQlpZiAoaGFyZGlycSAmJiBzb2Z0aXJxKSB7Ci0JCXRyYWNlX3NlcV9wdXRjKHMsICdIJyk7Ci0JfSBlbHNlIHsKLQkJaWYgKGhhcmRpcnEpIHsKLQkJCXRyYWNlX3NlcV9wdXRjKHMsICdoJyk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoc29mdGlycSkKLQkJCQl0cmFjZV9zZXFfcHV0YyhzLCAncycpOwotCQkJZWxzZQotCQkJCXRyYWNlX3NlcV9wdXRjKHMsICcuJyk7Ci0JCX0KLQl9Ci0KLQlpZiAoZW50cnktPnByZWVtcHRfY291bnQpCi0JCXRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOwotCWVsc2UKLQkJdHJhY2Vfc2VxX3B1dHMocywgIi4iKTsKLX0KLQotdW5zaWduZWQgbG9uZyBwcmVlbXB0X21hcmtfdGhyZXNoID0gMTAwOwotCi1zdGF0aWMgdm9pZAotbGF0X3ByaW50X3RpbWVzdGFtcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1NjQgYWJzX3VzZWNzLAotCQkgICAgdW5zaWduZWQgbG9uZyByZWxfdXNlY3MpCi17Ci0JdHJhY2Vfc2VxX3ByaW50ZihzLCAiICU0bGxkdXMiLCBhYnNfdXNlY3MpOwotCWlmIChyZWxfdXNlY3MgPiBwcmVlbXB0X21hcmtfdGhyZXNoKQotCQl0cmFjZV9zZXFfcHV0cyhzLCAiITogIik7Ci0JZWxzZSBpZiAocmVsX3VzZWNzID4gMSkKLQkJdHJhY2Vfc2VxX3B1dHMocywgIis6ICIpOwotCWVsc2UKLQkJdHJhY2Vfc2VxX3B1dHMocywgIiA6ICIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBzdGF0ZV90b19jaGFyW10gPSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSOwotCi1zdGF0aWMgaW50IHRhc2tfc3RhdGVfY2hhcih1bnNpZ25lZCBsb25nIHN0YXRlKQotewotCWludCBiaXQgPSBzdGF0ZSA/IF9fZmZzKHN0YXRlKSArIDEgOiAwOwotCi0JcmV0dXJuIGJpdCA8IHNpemVvZihzdGF0ZV90b19jaGFyKSAtIDEgPyBzdGF0ZV90b19jaGFyW2JpdF0gOiAnPyc7Ci19Ci0KLS8qCi0gKiBUaGUgbWVzc2FnZSBpcyBzdXBwb3NlZCB0byBjb250YWluIGFuIGVuZGluZyBuZXdsaW5lLgotICogSWYgdGhlIHByaW50aW5nIHN0b3BzIHByZW1hdHVyZWx5LCB0cnkgdG8gYWRkIGEgbmV3bGluZSBvZiBvdXIgb3duLgotICovCi12b2lkIHRyYWNlX3NlcV9wcmludF9jb250KHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKLQlzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCAqY29udDsKLQlib29sIG9rID0gdHJ1ZTsKLQotCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBpdGVyLT5jcHUsIE5VTEwpOwotCWlmICghZW50IHx8IGVudC0+dHlwZSAhPSBUUkFDRV9DT05UKSB7Ci0JCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwotCQlyZXR1cm47Ci0JfQotCi0JZG8gewotCQljb250ID0gKHN0cnVjdCB0cmFjZV9maWVsZF9jb250ICopZW50OwotCQlpZiAob2spCi0JCQlvayA9ICh0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIGNvbnQtPmJ1ZikgPiAwKTsKLQotCQlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKLQotCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSkKLQkJCXJpbmdfYnVmZmVyX3JlYWQoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSwgTlVMTCk7Ci0JCWVsc2UKLQkJCXJpbmdfYnVmZmVyX2NvbnN1bWUoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LCBOVUxMKTsKLQotCQlmdHJhY2VfZW5hYmxlX2NwdSgpOwotCi0JCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBpdGVyLT5jcHUsIE5VTEwpOwotCX0gd2hpbGUgKGVudCAmJiBlbnQtPnR5cGUgPT0gVFJBQ0VfQ09OVCk7Ci0KLQlpZiAoIW9rKQotCQl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKKwlzZXFfcHV0cyhtLCAiI1xuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfY3B1X2J1ZmZfc3RhcnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQpAQCAtMTgxOCw1MzMgKzE2MzUsMTI4IEBACiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiIyMjIyMgQ1BVICV1IGJ1ZmZlciBzdGFydGVkICMjIyNcbiIsIGl0ZXItPmNwdSk7CiB9CiAKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAotcHJpbnRfbGF0X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHVuc2lnbmVkIGludCB0cmFjZV9pZHgsIGludCBjcHUpCi17Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0JdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MgPSAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9NQVNLKTsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKm5leHRfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyB2ZXJib3NlID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9WRVJCT1NFKTsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCXVuc2lnbmVkIGxvbmcgYWJzX3VzZWNzOwotCXVuc2lnbmVkIGxvbmcgcmVsX3VzZWNzOwotCXU2NCBuZXh0X3RzOwotCWNoYXIgKmNvbW07Ci0JaW50IFMsIFQ7Ci0JaW50IGk7Ci0KLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQotCXRlc3RfY3B1X2J1ZmZfc3RhcnQoaXRlcik7Ci0KLQluZXh0X2VudHJ5ID0gZmluZF9uZXh0X2VudHJ5KGl0ZXIsIE5VTEwsICZuZXh0X3RzKTsKLQlpZiAoIW5leHRfZW50cnkpCi0JCW5leHRfdHMgPSBpdGVyLT50czsKLQlyZWxfdXNlY3MgPSBuczJ1c2VjcyhuZXh0X3RzIC0gaXRlci0+dHMpOwotCWFic191c2VjcyA9IG5zMnVzZWNzKGl0ZXItPnRzIC0gaXRlci0+dHItPnRpbWVfc3RhcnQpOwotCi0JaWYgKHZlcmJvc2UpIHsKLQkJY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkKTsKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cyAlNWQgJTNkICVkICUwOHggJTA4eCBbJTA4bHhdIgotCQkJCSAiICVsZC4lMDNsZG1zICgrJWxkLiUwM2xkbXMpOiAiLAotCQkJCSBjb21tLAotCQkJCSBlbnRyeS0+cGlkLCBjcHUsIGVudHJ5LT5mbGFncywKLQkJCQkgZW50cnktPnByZWVtcHRfY291bnQsIHRyYWNlX2lkeCwKLQkJCQkgbnMydXNlY3MoaXRlci0+dHMpLAotCQkJCSBhYnNfdXNlY3MvMTAwMCwKLQkJCQkgYWJzX3VzZWNzICUgMTAwMCwgcmVsX3VzZWNzLzEwMDAsCi0JCQkJIHJlbF91c2VjcyAlIDEwMDApOwotCX0gZWxzZSB7Ci0JCWxhdF9wcmludF9nZW5lcmljKHMsIGVudHJ5LCBjcHUpOwotCQlsYXRfcHJpbnRfdGltZXN0YW1wKHMsIGFic191c2VjcywgcmVsX3VzZWNzKTsKLQl9Ci0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46IHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKLQkJdHJhY2Vfc2VxX3B1dHMocywgIiAoIik7Ci0JCXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPnBhcmVudF9pcCwgc3ltX2ZsYWdzKTsKLQkJdHJhY2Vfc2VxX3B1dHMocywgIilcbiIpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9DVFg6Ci0JY2FzZSBUUkFDRV9XQUtFOiB7Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOwotCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKLQkJY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShmaWVsZC0+bmV4dF9waWQpOwotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyBbJTAzZF0gJTVkOiUzZDolYyAlc1xuIiwKLQkJCQkgZmllbGQtPnByZXZfcGlkLAotCQkJCSBmaWVsZC0+cHJldl9wcmlvLAotCQkJCSBTLCBlbnRyeS0+dHlwZSA9PSBUUkFDRV9DVFggPyAiPT0+IiA6ICIgICsiLAotCQkJCSBmaWVsZC0+bmV4dF9jcHUsCi0JCQkJIGZpZWxkLT5uZXh0X3BpZCwKLQkJCQkgZmllbGQtPm5leHRfcHJpbywKLQkJCQkgVCwgY29tbSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1NQRUNJQUw6IHsKLQkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiIyAlbGQgJWxkICVsZFxuIiwKLQkJCQkgZmllbGQtPmFyZzEsCi0JCQkJIGZpZWxkLT5hcmcyLAotCQkJCSBmaWVsZC0+YXJnMyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1NUQUNLOiB7Ci0JCXN0cnVjdCBzdGFja19lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NUQUNLX0VOVFJJRVM7IGkrKykgewotCQkJaWYgKGkpCi0JCQkJdHJhY2Vfc2VxX3B1dHMocywgIiA8PSAiKTsKLQkJCXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmNhbGxlcltpXSwgc3ltX2ZsYWdzKTsKLQkJfQotCQl0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfUFJJTlQ6IHsKLQkJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBzeW1fZmxhZ3MpOwotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICI6ICVzIiwgZmllbGQtPmJ1Zik7Ci0JCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCi0JCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfQlJBTkNIOiB7Ci0JCXN0cnVjdCB0cmFjZV9icmFuY2ggKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXSAlczolczolZFxuIiwKLQkJCQkgZmllbGQtPmNvcnJlY3QgPyAiICBvayAgIiA6ICIgTUlTUyAiLAotCQkJCSBmaWVsZC0+ZnVuYywKLQkJCQkgZmllbGQtPmZpbGUsCi0JCQkJIGZpZWxkLT5saW5lKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfVVNFUl9TVEFDSzogewotCQlzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXNlcV9wcmludF91c2VyaXBfb2JqcyhmaWVsZCwgcywgc3ltX2ZsYWdzKTsKLQkJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJVbmtub3duIHR5cGUgJWRcbiIsIGVudHJ5LT50eXBlKTsKLQl9Ci0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X3RyYWNlX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MgPSAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9NQVNLKTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgdXNlY19yZW07Ci0JdW5zaWduZWQgbG9uZyBsb25nIHQ7Ci0JdW5zaWduZWQgbG9uZyBzZWNzOwotCWNoYXIgKmNvbW07Ci0JaW50IHJldDsKLQlpbnQgUywgVDsKLQlpbnQgaTsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OwogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQogCXRlc3RfY3B1X2J1ZmZfc3RhcnQoaXRlcik7CiAKLQljb21tID0gdHJhY2VfZmluZF9jbWRsaW5lKGl0ZXItPmVudC0+cGlkKTsKKwlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGVudHJ5LT50eXBlKTsKIAotCXQgPSBuczJ1c2VjcyhpdGVyLT50cyk7Ci0JdXNlY19yZW0gPSBkb19kaXYodCwgMTAwMDAwMFVMTCk7Ci0Jc2VjcyA9ICh1bnNpZ25lZCBsb25nKXQ7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlMTZzLSUtNWQgIiwgY29tbSwgZW50cnktPnBpZCk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTAzZF0gIiwgaXRlci0+Y3B1KTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU1bHUuJTA2bHU6ICIsIHNlY3MsIHVzZWNfcmVtKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46IHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWlmICgoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVF9QQVJFTlQpICYmCi0JCQkJCQlmaWVsZC0+cGFyZW50X2lwKSB7Ci0JCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPC0iKTsKLQkJCWlmICghcmV0KQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywKLQkJCQkJICAgICAgIGZpZWxkLT5wYXJlbnRfaXAsCi0JCQkJCSAgICAgICBzeW1fZmxhZ3MpOwotCQkJaWYgKCFyZXQpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSB7CisJCWlmIChpdGVyLT5pdGVyX2ZsYWdzICYgVFJBQ0VfRklMRV9MQVRfRk1UKSB7CisJCQlpZiAoIXRyYWNlX3ByaW50X2xhdF9jb250ZXh0KGl0ZXIpKQorCQkJCWdvdG8gcGFydGlhbDsKKwkJfSBlbHNlIHsKKwkJCWlmICghdHJhY2VfcHJpbnRfY29udGV4dChpdGVyKSkKKwkJCQlnb3RvIHBhcnRpYWw7CiAJCX0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwogCX0KLQljYXNlIFRSQUNFX0NUWDoKLQljYXNlIFRSQUNFX1dBS0U6IHsKLQkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisJaWYgKGV2ZW50KQorCQlyZXR1cm4gZXZlbnQtPnRyYWNlKGl0ZXIsIHN5bV9mbGFncyk7CiAKLQkJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7Ci0JCVMgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyBbJTAzZF0gJTVkOiUzZDolY1xuIiwKLQkJCQkgICAgICAgZmllbGQtPnByZXZfcGlkLAotCQkJCSAgICAgICBmaWVsZC0+cHJldl9wcmlvLAotCQkJCSAgICAgICBTLAotCQkJCSAgICAgICBlbnRyeS0+dHlwZSA9PSBUUkFDRV9DVFggPyAiPT0+IiA6ICIgICsiLAotCQkJCSAgICAgICBmaWVsZC0+bmV4dF9jcHUsCi0JCQkJICAgICAgIGZpZWxkLT5uZXh0X3BpZCwKLQkJCQkgICAgICAgZmllbGQtPm5leHRfcHJpbywKLQkJCQkgICAgICAgVCk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOiB7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlVua25vd24gdHlwZSAlZFxuIiwgZW50cnktPnR5cGUpKQorCQlnb3RvIHBhcnRpYWw7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAotCQkJCSBmaWVsZC0+YXJnMSwKLQkJCQkgZmllbGQtPmFyZzIsCi0JCQkJIGZpZWxkLT5hcmczKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1NUQUNLOiB7Ci0JCXN0cnVjdCBzdGFja19lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NUQUNLX0VOVFJJRVM7IGkrKykgewotCQkJaWYgKGkpIHsKLQkJCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiIDw9ICIpOwotCQkJCWlmICghcmV0KQotCQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCQl9Ci0JCQlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5jYWxsZXJbaV0sCi0JCQkJCSAgICAgICBzeW1fZmxhZ3MpOwotCQkJaWYgKCFyZXQpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQl9Ci0JCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfUFJJTlQ6IHsKLQkJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBzeW1fZmxhZ3MpOwotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICI6ICVzIiwgZmllbGQtPmJ1Zik7Ci0JCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCi0JCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfR1JBUEhfUkVUOiB7Ci0JCXJldHVybiBwcmludF9ncmFwaF9mdW5jdGlvbihpdGVyKTsKLQl9Ci0JY2FzZSBUUkFDRV9HUkFQSF9FTlQ6IHsKLQkJcmV0dXJuIHByaW50X2dyYXBoX2Z1bmN0aW9uKGl0ZXIpOwotCX0KLQljYXNlIFRSQUNFX0JSQU5DSDogewotCQlzdHJ1Y3QgdHJhY2VfYnJhbmNoICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXRyYWNlX3NlcV9wcmludGYocywgIlslc10gJXM6JXM6JWRcbiIsCi0JCQkJIGZpZWxkLT5jb3JyZWN0ID8gIiAgb2sgICIgOiAiIE1JU1MgIiwKLQkJCQkgZmllbGQtPmZ1bmMsCi0JCQkJIGZpZWxkLT5maWxlLAotCQkJCSBmaWVsZC0+bGluZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1VTRVJfU1RBQ0s6IHsKLQkJc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlyZXQgPSBzZXFfcHJpbnRfdXNlcmlwX29ianMoZmllbGQsIHMsIHN5bV9mbGFncyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwotCX0KLQl9CiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK3BhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfcmF3X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQlpbnQgcmV0OwotCWludCBTLCBUOworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CiAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAotCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQgJWQgJWxsdSAiLAotCQllbnRyeS0+cGlkLCBpdGVyLT5jcHUsIGl0ZXItPnRzKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46IHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIleCAleFxuIiwKLQkJCQkJZmllbGQtPmlwLAotCQkJCQlmaWVsZC0+cGFyZW50X2lwKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSB7CisJCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQgJWQgJWxsdSAiLAorCQkJCSAgICAgIGVudHJ5LT5waWQsIGl0ZXItPmNwdSwgaXRlci0+dHMpKQorCQkJZ290byBwYXJ0aWFsOwogCX0KLQljYXNlIFRSQUNFX0NUWDoKLQljYXNlIFRSQUNFX1dBS0U6IHsKLQkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnRyeS0+dHlwZSk7CisJaWYgKGV2ZW50KQorCQlyZXR1cm4gZXZlbnQtPnJhdyhpdGVyLCAwKTsKIAotCQlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKLQkJUyA9IGVudHJ5LT50eXBlID09IFRSQUNFX1dBS0UgPyAnKycgOgotCQkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQgJWQgJWMgJWQgJWQgJWQgJWNcbiIsCi0JCQkJICAgICAgIGZpZWxkLT5wcmV2X3BpZCwKLQkJCQkgICAgICAgZmllbGQtPnByZXZfcHJpbywKLQkJCQkgICAgICAgUywKLQkJCQkgICAgICAgZmllbGQtPm5leHRfY3B1LAotCQkJCSAgICAgICBmaWVsZC0+bmV4dF9waWQsCi0JCQkJICAgICAgIGZpZWxkLT5uZXh0X3ByaW8sCi0JCQkJICAgICAgIFQpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1VTRVJfU1RBQ0s6Ci0JY2FzZSBUUkFDRV9TVEFDSzogewotCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCA/XG4iLCBlbnRyeS0+dHlwZSkpCisJCWdvdG8gcGFydGlhbDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGZpZWxkLT5hcmcxLAotCQkJCSBmaWVsZC0+YXJnMiwKLQkJCQkgZmllbGQtPmFyZzMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfUFJJTlQ6IHsKLQkJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXRyYWNlX3NlcV9wcmludGYocywgIiMgJWx4ICVzIiwgZmllbGQtPmlwLCBmaWVsZC0+YnVmKTsKLQkJaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKLQkJCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOwotCQlicmVhazsKLQl9Ci0JfQogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CitwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIH0KIAotI2RlZmluZSBTRVFfUFVUX0ZJRUxEX1JFVChzLCB4KQkJCQlcCi1kbyB7CQkJCQkJCVwKLQlpZiAoIXRyYWNlX3NlcV9wdXRtZW0ocywgJih4KSwgc2l6ZW9mKHgpKSkJXAotCQlyZXR1cm4gMDsJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgeCkJCQlcCi1kbyB7CQkJCQkJCVwKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHgpID4gTUFYX01FTUhFWF9CWVRFUyk7CVwKLQlpZiAoIXRyYWNlX3NlcV9wdXRtZW1faGV4KHMsICYoeCksIHNpemVvZih4KSkpCVwKLQkJcmV0dXJuIDA7CQkJCVwKLX0gd2hpbGUgKDApCi0KIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9oZXhfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAl1bnNpZ25lZCBjaGFyIG5ld2xpbmUgPSAnXG4nOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0JaW50IFMsIFQ7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCi0JaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPnBpZCk7Ci0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPmNwdSk7Ci0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOiB7Ci0JCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cGFyZW50X2lwKTsKLQkJYnJlYWs7CisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgaXRlci0+Y3B1KTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKIAl9Ci0JY2FzZSBUUkFDRV9DVFg6Ci0JY2FzZSBUUkFDRV9XQUtFOiB7Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOwotCQlTID0gZW50cnktPnR5cGUgPT0gVFJBQ0VfV0FLRSA/ICcrJyA6Ci0JCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3ByaW8pOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgUyk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9jcHUpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcGlkKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3ByaW8pOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgVCk7Ci0JCWJyZWFrOworCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZW50cnktPnR5cGUpOworCWlmIChldmVudCkgeworCQllbnVtIHByaW50X2xpbmVfdCByZXQgPSBldmVudC0+aGV4KGl0ZXIsIDApOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfSEFORExFRCkKKwkJCXJldHVybiByZXQ7CiAJfQotCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1VTRVJfU1RBQ0s6Ci0JY2FzZSBUUkFDRV9TVEFDSzogewotCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzIpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzMpOwotCQlicmVhazsKLQl9Ci0JfQogCVNFUV9QVVRfRklFTERfUkVUKHMsIG5ld2xpbmUpOwogCiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X3ByaW50a19tc2dfb25seShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCBmaWVsZC0+YnVmKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKLQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotfQotCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfYmluX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OwogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQotCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOwotCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5jcHUpOwotCVNFUV9QVVRfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOiB7Ci0JCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnBhcmVudF9pcCk7Ci0JCWJyZWFrOworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSB7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOworCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT5jcHUpOworCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7CiAJfQotCWNhc2UgVFJBQ0VfQ1RYOiB7Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3ByaW8pOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9zdGF0ZSk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3BpZCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3ByaW8pOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9zdGF0ZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1NQRUNJQUw6Ci0JY2FzZSBUUkFDRV9VU0VSX1NUQUNLOgotCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKLQkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKLQkJYnJlYWs7Ci0JfQotCX0KLQlyZXR1cm4gMTsKKwlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGVudHJ5LT50eXBlKTsKKwlyZXR1cm4gZXZlbnQgPyBldmVudC0+YmluYXJ5KGl0ZXIsIDApIDogVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IHRyYWNlX2VtcHR5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlpbnQgY3B1OwogCisJLyogSWYgd2UgYXJlIGxvb2tpbmcgYXQgb25lIENQVSBidWZmZXIsIG9ubHkgY2hlY2sgdGhhdCBvbmUgKi8KKwlpZiAoaXRlci0+Y3B1X2ZpbGUgIT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCWNwdSA9IGl0ZXItPmNwdV9maWxlOworCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkgeworCQkJaWYgKCFyaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKCFyaW5nX2J1ZmZlcl9lbXB0eV9jcHUoaXRlci0+dHItPmJ1ZmZlciwgY3B1KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKIAlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKIAkJaWYgKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pIHsKIAkJCWlmICghcmluZ19idWZmZXJfaXRlcl9lbXB0eShpdGVyLT5idWZmZXJfaXRlcltjcHVdKSkKQEAgLTIzNjgsMTAgKzE3ODAsMTUgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKGl0ZXItPmVudC0+dHlwZSA9PSBUUkFDRV9CUFJJTlQgJiYKKwkJCXRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEsgJiYKKwkJCXRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEtfTVNHT05MWSkKKwkJcmV0dXJuIHRyYWNlX3ByaW50X2JwcmludGtfbXNnX29ubHkoaXRlcik7CisKIAlpZiAoaXRlci0+ZW50LT50eXBlID09IFRSQUNFX1BSSU5UICYmCiAJCQl0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLICYmCiAJCQl0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLX01TR09OTFkpCi0JCXJldHVybiBwcmludF9wcmludGtfbXNnX29ubHkoaXRlcik7CisJCXJldHVybiB0cmFjZV9wcmludF9wcmludGtfbXNnX29ubHkoaXRlcik7CiAKIAlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0JJTikKIAkJcmV0dXJuIHByaW50X2Jpbl9mbXQoaXRlcik7CkBAIC0yMzgyLDkgKzE3OTksNiBAQAogCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUkFXKQogCQlyZXR1cm4gcHJpbnRfcmF3X2ZtdChpdGVyKTsKIAotCWlmIChpdGVyLT5pdGVyX2ZsYWdzICYgVFJBQ0VfRklMRV9MQVRfRk1UKQotCQlyZXR1cm4gcHJpbnRfbGF0X2ZtdChpdGVyLCBpdGVyLT5pZHgsIGl0ZXItPmNwdSk7Ci0KIAlyZXR1cm4gcHJpbnRfdHJhY2VfZm10KGl0ZXIpOwogfQogCkBAIC0yNDI2LDMwICsxODQwLDQwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICoKLV9fdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnJldCkKK19fdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCWxvbmcgY3B1X2ZpbGUgPSAobG9uZykgaW5vZGUtPmlfcHJpdmF0ZTsKKwl2b2lkICpmYWlsX3JldCA9IEVSUl9QVFIoLUVOT01FTSk7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyOwogCXN0cnVjdCBzZXFfZmlsZSAqbTsKLQlpbnQgY3B1OworCWludCBjcHUsIHJldDsKIAotCWlmICh0cmFjaW5nX2Rpc2FibGVkKSB7Ci0JCSpyZXQgPSAtRU5PREVWOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCiAJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVyKSB7Ci0JCSpyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCS8qCisJICogV2UgbWFrZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgdHJhY2VyIHRvIGF2b2lkIGNvbmN1cnJlbnQKKwkgKiBjaGFuZ2VzIG9uIGl0IHdoaWxlIHdlIGFyZSByZWFkaW5nLgorCSAqLwogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCWl0ZXItPnRyYWNlID0ga3phbGxvYyhzaXplb2YoKml0ZXItPnRyYWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyLT50cmFjZSkKKwkJZ290byBmYWlsOworCisJaWYgKGN1cnJlbnRfdHJhY2UpCisJCSppdGVyLT50cmFjZSA9ICpjdXJyZW50X3RyYWNlOworCiAJaWYgKGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZS0+cHJpbnRfbWF4KQogCQlpdGVyLT50ciA9ICZtYXhfdHI7CiAJZWxzZQotCQlpdGVyLT50ciA9IGlub2RlLT5pX3ByaXZhdGU7Ci0JaXRlci0+dHJhY2UgPSBjdXJyZW50X3RyYWNlOworCQlpdGVyLT50ciA9ICZnbG9iYWxfdHJhY2U7CiAJaXRlci0+cG9zID0gLTE7CisJbXV0ZXhfaW5pdCgmaXRlci0+bXV0ZXgpOworCWl0ZXItPmNwdV9maWxlID0gY3B1X2ZpbGU7CiAKIAkvKiBOb3RpZnkgdGhlIHRyYWNlciBlYXJseTsgYmVmb3JlIHdlIHN0b3AgdHJhY2luZy4gKi8KIAlpZiAoaXRlci0+dHJhY2UgJiYgaXRlci0+dHJhY2UtPm9wZW4pCkBAIC0yNDU5LDIwICsxODgzLDI0IEBACiAJaWYgKHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItPnRyLT5idWZmZXIpKQogCQlpdGVyLT5pdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfQU5OT1RBVEU7CiAKKwlpZiAoaXRlci0+Y3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewogCi0JZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0KKwkJCWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0gPQorCQkJCXJpbmdfYnVmZmVyX3JlYWRfc3RhcnQoaXRlci0+dHItPmJ1ZmZlciwgY3B1KTsKKwkJfQorCX0gZWxzZSB7CisJCWNwdSA9IGl0ZXItPmNwdV9maWxlOwogCQlpdGVyLT5idWZmZXJfaXRlcltjcHVdID0KLQkJCXJpbmdfYnVmZmVyX3JlYWRfc3RhcnQoaXRlci0+dHItPmJ1ZmZlciwgY3B1KTsKLQotCQlpZiAoIWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pCi0JCQlnb3RvIGZhaWxfYnVmZmVyOworCQkJCXJpbmdfYnVmZmVyX3JlYWRfc3RhcnQoaXRlci0+dHItPmJ1ZmZlciwgY3B1KTsKIAl9CiAKIAkvKiBUT0RPIHN0b3AgdHJhY2VyICovCi0JKnJldCA9IHNlcV9vcGVuKGZpbGUsICZ0cmFjZXJfc2VxX29wcyk7Ci0JaWYgKCpyZXQpCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnRyYWNlcl9zZXFfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlmYWlsX3JldCA9IEVSUl9QVFIocmV0KTsKIAkJZ290byBmYWlsX2J1ZmZlcjsKKwl9CiAKIAltID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCW0tPnByaXZhdGUgPSBpdGVyOwpAQCAtMjQ4Miw3ICsxOTEwLDYgQEAKIAogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLSBvdXQ6CiAJcmV0dXJuIGl0ZXI7CiAKICBmYWlsX2J1ZmZlcjoKQEAgLTI0OTAsMTAgKzE5MTcsMTIgQEAKIAkJaWYgKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pCiAJCQlyaW5nX2J1ZmZlcl9yZWFkX2ZpbmlzaChpdGVyLT5idWZmZXJfaXRlcltjcHVdKTsKIAl9CisgZmFpbDoKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCWtmcmVlKGl0ZXItPnRyYWNlKTsKIAlrZnJlZShpdGVyKTsKIAotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJldHVybiBmYWlsX3JldDsKIH0KIAogaW50IHRyYWNpbmdfb3Blbl9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtMjUwNSwxMiArMTkzNCwxNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdHJhY2luZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB0cmFjaW5nX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcjsKIAlpbnQgY3B1OwogCisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCXJldHVybiAwOworCisJaXRlciA9IG0tPnByaXZhdGU7CisKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKIAkJaWYgKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pCkBAIC0yNTI1LDMzICsxOTU5LDM4IEBACiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAogCXNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKKwltdXRleF9kZXN0cm95KCZpdGVyLT5tdXRleCk7CisJa2ZyZWUoaXRlci0+dHJhY2UpOwogCWtmcmVlKGl0ZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRyYWNpbmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgcmV0OwotCi0JX190cmFjaW5nX29wZW4oaW5vZGUsIGZpbGUsICZyZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0cmFjaW5nX2x0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKLQlpdGVyID0gX190cmFjaW5nX29wZW4oaW5vZGUsIGZpbGUsICZyZXQpOworCS8qIElmIHRoaXMgZmlsZSB3YXMgb3BlbiBmb3Igd3JpdGUsIHRoZW4gZXJhc2UgY29udGVudHMgKi8KKwlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgorCSAgICAhKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkpIHsKKwkJbG9uZyBjcHUgPSAobG9uZykgaW5vZGUtPmlfcHJpdmF0ZTsKIAotCWlmICghcmV0KQotCQlpdGVyLT5pdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfTEFUX0ZNVDsKKwkJaWYgKGNwdSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpCisJCQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKCZnbG9iYWxfdHJhY2UpOworCQllbHNlCisJCQl0cmFjaW5nX3Jlc2V0KCZnbG9iYWxfdHJhY2UsIGNwdSk7CisJfQogCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJaXRlciA9IF9fdHJhY2luZ19vcGVuKGlub2RlLCBmaWxlKTsKKwkJaWYgKElTX0VSUihpdGVyKSkKKwkJCXJldCA9IFBUUl9FUlIoaXRlcik7CisJCWVsc2UgaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVCkKKwkJCWl0ZXItPml0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9MQVRfRk1UOworCX0KIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyB2b2lkICoKIHRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewpAQCAtMjYyMywyMSArMjA2MiwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZm9wcyA9IHsKK3N0YXRpYyBzc2l6ZV90Cit0cmFjaW5nX3dyaXRlX3N0dWIoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCisJLndyaXRlCQk9IHRyYWNpbmdfd3JpdGVfc3R1YiwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHRyYWNpbmdfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfbHRfZm9wcyA9IHsKLQkub3BlbgkJPSB0cmFjaW5nX2x0X29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSB0cmFjaW5nX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG93X3RyYWNlc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2hvd190cmFjZXNfZm9wcyA9IHsKIAkub3BlbgkJPSBzaG93X3RyYWNlc19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCkBAIC0yNzMwLDcgKzIxNzAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfY3B1bWFza19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19jcHVtYXNrX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19jcHVtYXNrX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfY3B1bWFza193cml0ZSwKQEAgLTI3NDAsNTcgKzIxODAsNjIgQEAKIHRyYWNpbmdfdHJhY2Vfb3B0aW9uc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJICAgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgdHJhY2VyX29wdCAqdHJhY2Vfb3B0czsKKwl1MzIgdHJhY2VyX2ZsYWdzOworCWludCBsZW4gPSAwOwogCWNoYXIgKmJ1ZjsKIAlpbnQgciA9IDA7Ci0JaW50IGxlbiA9IDA7Ci0JdTMyIHRyYWNlcl9mbGFncyA9IGN1cnJlbnRfdHJhY2UtPmZsYWdzLT52YWw7Ci0Jc3RydWN0IHRyYWNlcl9vcHQgKnRyYWNlX29wdHMgPSBjdXJyZW50X3RyYWNlLT5mbGFncy0+b3B0czsKKwlpbnQgaTsKIAogCi0JLyogY2FsdWxhdGUgbWF4IHNpemUgKi8KKwkvKiBjYWxjdWxhdGUgbWF4IHNpemUgKi8KIAlmb3IgKGkgPSAwOyB0cmFjZV9vcHRpb25zW2ldOyBpKyspIHsKIAkJbGVuICs9IHN0cmxlbih0cmFjZV9vcHRpb25zW2ldKTsKLQkJbGVuICs9IDM7IC8qICJubyIgYW5kIHNwYWNlICovCisJCWxlbiArPSAzOyAvKiAibm8iIGFuZCBuZXdsaW5lICovCiAJfQogCisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJdHJhY2VyX2ZsYWdzID0gY3VycmVudF90cmFjZS0+ZmxhZ3MtPnZhbDsKKwl0cmFjZV9vcHRzID0gY3VycmVudF90cmFjZS0+ZmxhZ3MtPm9wdHM7CisKIAkvKgogCSAqIEluY3JlYXNlIHRoZSBzaXplIHdpdGggbmFtZXMgb2Ygb3B0aW9ucyBzcGVjaWZpYwogCSAqIG9mIHRoZSBjdXJyZW50IHRyYWNlci4KIAkgKi8KIAlmb3IgKGkgPSAwOyB0cmFjZV9vcHRzW2ldLm5hbWU7IGkrKykgewogCQlsZW4gKz0gc3RybGVuKHRyYWNlX29wdHNbaV0ubmFtZSk7Ci0JCWxlbiArPSAzOyAvKiAibm8iIGFuZCBzcGFjZSAqLworCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgbmV3bGluZSAqLwogCX0KIAogCS8qICsyIGZvciBcbiBhbmQgXDAgKi8KIAlidWYgPSBrbWFsbG9jKGxlbiArIDIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQorCWlmICghYnVmKSB7CisJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWZvciAoaSA9IDA7IHRyYWNlX29wdGlvbnNbaV07IGkrKykgewogCQlpZiAodHJhY2VfZmxhZ3MgJiAoMSA8PCBpKSkKLQkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAiJXMgIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CisJCQlyICs9IHNwcmludGYoYnVmICsgciwgIiVzXG4iLCB0cmFjZV9vcHRpb25zW2ldKTsKIAkJZWxzZQotCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICJubyVzICIsIHRyYWNlX29wdGlvbnNbaV0pOworCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICJubyVzXG4iLCB0cmFjZV9vcHRpb25zW2ldKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyB0cmFjZV9vcHRzW2ldLm5hbWU7IGkrKykgewogCQlpZiAodHJhY2VyX2ZsYWdzICYgdHJhY2Vfb3B0c1tpXS5iaXQpCi0JCQlyICs9IHNwcmludGYoYnVmICsgciwgIiVzICIsCisJCQlyICs9IHNwcmludGYoYnVmICsgciwgIiVzXG4iLAogCQkJCXRyYWNlX29wdHNbaV0ubmFtZSk7CiAJCWVsc2UKLQkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAibm8lcyAiLAorCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICJubyVzXG4iLAogCQkJCXRyYWNlX29wdHNbaV0ubmFtZSk7CiAJfQorCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQlyICs9IHNwcmludGYoYnVmICsgciwgIlxuIik7CiAJV0FSTl9PTihyID49IGxlbiArIDIpOwogCiAJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCByKTsKIAogCWtmcmVlKGJ1Zik7Ci0KIAlyZXR1cm4gcjsKIH0KIApAQCAtMjgyOCw2ICsyMjczLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF90cmFjZXJfZmxhZ3ModW5zaWduZWQgaW50IG1hc2ssIGludCBlbmFibGVkKQoreworCS8qIGRvIG5vdGhpbmcgaWYgZmxhZyBpcyBhbHJlYWR5IHNldCAqLworCWlmICghISh0cmFjZV9mbGFncyAmIG1hc2spID09ICEhZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGVuYWJsZWQpCisJCXRyYWNlX2ZsYWdzIHw9IG1hc2s7CisJZWxzZQorCQl0cmFjZV9mbGFncyAmPSB+bWFzazsKKworCWlmIChtYXNrID09IFRSQUNFX0lURVJfR0xPQkFMX0NMSykgeworCQl1NjQgKCpmdW5jKSh2b2lkKTsKKworCQlpZiAoZW5hYmxlZCkKKwkJCWZ1bmMgPSB0cmFjZV9jbG9ja19nbG9iYWw7CisJCWVsc2UKKwkJCWZ1bmMgPSB0cmFjZV9jbG9ja19sb2NhbDsKKworCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkJcmluZ19idWZmZXJfc2V0X2Nsb2NrKGdsb2JhbF90cmFjZS5idWZmZXIsIGZ1bmMpOworCisJCWlmIChtYXhfdHIuYnVmZmVyKQorCQkJcmluZ19idWZmZXJfc2V0X2Nsb2NrKG1heF90ci5idWZmZXIsIGZ1bmMpOworCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCX0KK30KKwogc3RhdGljIHNzaXplX3QKIHRyYWNpbmdfdHJhY2Vfb3B0aW9uc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCiAJCQlzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCkBAIC0yODU1LDE3ICsyMzI4LDE2IEBACiAJCWludCBsZW4gPSBzdHJsZW4odHJhY2Vfb3B0aW9uc1tpXSk7CiAKIAkJaWYgKHN0cm5jbXAoY21wLCB0cmFjZV9vcHRpb25zW2ldLCBsZW4pID09IDApIHsKLQkJCWlmIChuZWcpCi0JCQkJdHJhY2VfZmxhZ3MgJj0gfigxIDw8IGkpOwotCQkJZWxzZQotCQkJCXRyYWNlX2ZsYWdzIHw9ICgxIDw8IGkpOworCQkJc2V0X3RyYWNlcl9mbGFncygxIDw8IGksICFuZWcpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAkvKiBJZiBubyBvcHRpb24gY291bGQgYmUgc2V0LCB0ZXN0IHRoZSBzcGVjaWZpYyB0cmFjZXIgb3B0aW9ucyAqLwogCWlmICghdHJhY2Vfb3B0aW9uc1tpXSkgeworCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAkJcmV0ID0gc2V0X3RyYWNlcl9vcHRpb24oY3VycmVudF90cmFjZSwgY21wLCBuZWcpOworCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0yODc1LDcgKzIzNDcsNyBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfaXRlcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19pdGVyX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ190cmFjZV9vcHRpb25zX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfdHJhY2Vfb3B0aW9uc193cml0ZSwKQEAgLTI5MDgsNyArMjM4MCw3IEBACiAJCQkJCXJlYWRtZV9tc2csIHN0cmxlbihyZWFkbWVfbXNnKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfcmVhZG1lX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX3JlYWRtZV9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfcmVhZG1lX3JlYWQsCiB9OwpAQCAtMjkzMCw3ICsyNDAyLDcgQEAKIHsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzY0XTsKLQlsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgcmV0OwogCiAJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKQEAgLTI5ODUsMTMgKzI0NTcsMTA1IEBACiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCByKTsKIH0KIAotc3RhdGljIGludCB0cmFjaW5nX3NldF90cmFjZXIoY2hhciAqYnVmKQoraW50IHRyYWNlcl9pbml0KHN0cnVjdCB0cmFjZXIgKnQsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CisJcmV0dXJuIHQtPmluaXQodHIpOworfQorCitzdGF0aWMgaW50IHRyYWNpbmdfcmVzaXplX3JpbmdfYnVmZmVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBJZiBrZXJuZWwgb3IgdXNlciBjaGFuZ2VzIHRoZSBzaXplIG9mIHRoZSByaW5nIGJ1ZmZlcgorCSAqIHdlIHVzZSB0aGUgc2l6ZSB0aGF0IHdhcyBnaXZlbiwgYW5kIHdlIGNhbiBmb3JnZXQgYWJvdXQKKwkgKiBleHBhbmRpbmcgaXQgbGF0ZXIuCisJICovCisJcmluZ19idWZmZXJfZXhwYW5kZWQgPSAxOworCisJcmV0ID0gcmluZ19idWZmZXJfcmVzaXplKGdsb2JhbF90cmFjZS5idWZmZXIsIHNpemUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmluZ19idWZmZXJfcmVzaXplKG1heF90ci5idWZmZXIsIHNpemUpOworCWlmIChyZXQgPCAwKSB7CisJCWludCByOworCisJCXIgPSByaW5nX2J1ZmZlcl9yZXNpemUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwKKwkJCQkgICAgICAgZ2xvYmFsX3RyYWNlLmVudHJpZXMpOworCQlpZiAociA8IDApIHsKKwkJCS8qCisJCQkgKiBBQVJHSCEgV2UgYXJlIGxlZnQgd2l0aCBkaWZmZXJlbnQKKwkJCSAqIHNpemUgbWF4IGJ1ZmZlciEhISEKKwkJCSAqIFRoZSBtYXggYnVmZmVyIGlzIG91ciAic25hcHNob3QiIGJ1ZmZlci4KKwkJCSAqIFdoZW4gYSB0cmFjZXIgbmVlZHMgYSBzbmFwc2hvdCAob25lIG9mIHRoZQorCQkJICogbGF0ZW5jeSB0cmFjZXJzKSwgaXQgc3dhcHMgdGhlIG1heCBidWZmZXIKKwkJCSAqIHdpdGggdGhlIHNhdmVkIHNuYXAgc2hvdC4gV2Ugc3VjY2VlZGVkIHRvCisJCQkgKiB1cGRhdGUgdGhlIHNpemUgb2YgdGhlIG1haW4gYnVmZmVyLCBidXQgZmFpbGVkIHRvCisJCQkgKiB1cGRhdGUgdGhlIHNpemUgb2YgdGhlIG1heCBidWZmZXIuIEJ1dCB3aGVuIHdlIHRyaWVkCisJCQkgKiB0byByZXNldCB0aGUgbWFpbiBidWZmZXIgdG8gdGhlIG9yaWdpbmFsIHNpemUsIHdlCisJCQkgKiBmYWlsZWQgdGhlcmUgdG9vLiBUaGlzIGlzIHZlcnkgdW5saWtlbHkgdG8KKwkJCSAqIGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIHdhcm4gYW5kIGtpbGwgYWxsCisJCQkgKiB0cmFjaW5nLgorCQkJICovCisJCQlXQVJOX09OKDEpOworCQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwlnbG9iYWxfdHJhY2UuZW50cmllcyA9IHNpemU7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnMgLSB1c2VkIGJ5IHRyYWNpbmcgZmFjaWxpdHkgdG8gZXhwYW5kIHJpbmcgYnVmZmVycworICoKKyAqIFRvIHNhdmUgb24gbWVtb3J5IHdoZW4gdGhlIHRyYWNpbmcgaXMgbmV2ZXIgdXNlZCBvbiBhIHN5c3RlbSB3aXRoIGl0CisgKiBjb25maWd1cmVkIGluLiBUaGUgcmluZyBidWZmZXJzIGFyZSBzZXQgdG8gYSBtaW5pbXVtIHNpemUuIEJ1dCBvbmNlCisgKiBhIHVzZXIgc3RhcnRzIHRvIHVzZSB0aGUgdHJhY2luZyBmYWNpbGl0eSwgdGhlbiB0aGV5IG5lZWQgdG8gZ3JvdworICogdG8gdGhlaXIgZGVmYXVsdCBzaXplLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIHdoZW4gYSB0cmFjZXIgaXMgYWJvdXQgdG8gYmUgdXNlZC4KKyAqLworaW50IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnModm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCWlmICghcmluZ19idWZmZXJfZXhwYW5kZWQpCisJCXJldCA9IHRyYWNpbmdfcmVzaXplX3JpbmdfYnVmZmVyKHRyYWNlX2J1Zl9zaXplKTsKKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnk7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqCitjcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZXIgKnRyYWNlcik7CisKK3N0YXRpYyB2b2lkCitkZXN0cm95X3RyYWNlX29wdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdHMpOworCitzdGF0aWMgaW50IHRyYWNpbmdfc2V0X3RyYWNlcihjb25zdCBjaGFyICpidWYpCit7CisJc3RhdGljIHN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0czsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKIAlzdHJ1Y3QgdHJhY2VyICp0OwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwlpZiAoIXJpbmdfYnVmZmVyX2V4cGFuZGVkKSB7CisJCXJldCA9IHRyYWNpbmdfcmVzaXplX3JpbmdfYnVmZmVyKHRyYWNlX2J1Zl9zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJcmV0ID0gMDsKKwl9CisKIAlmb3IgKHQgPSB0cmFjZV90eXBlczsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKHN0cmNtcCh0LT5uYW1lLCBidWYpID09IDApCiAJCQlicmVhazsKQEAgLTMwMDcsOSArMjU3MSwxNCBAQAogCWlmIChjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UtPnJlc2V0KQogCQljdXJyZW50X3RyYWNlLT5yZXNldCh0cik7CiAKKwlkZXN0cm95X3RyYWNlX29wdGlvbl9maWxlcyh0b3B0cyk7CisKIAljdXJyZW50X3RyYWNlID0gdDsKKworCXRvcHRzID0gY3JlYXRlX3RyYWNlX29wdGlvbl9maWxlcyhjdXJyZW50X3RyYWNlKTsKKwogCWlmICh0LT5pbml0KSB7Ci0JCXJldCA9IHQtPmluaXQodHIpOworCQlyZXQgPSB0cmFjZXJfaW5pdCh0LCB0cik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0zMDcyLDkgKzI2NDEsOSBAQAogdHJhY2luZ19tYXhfbGF0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJICAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewotCWxvbmcgKnB0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nICpwdHIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNjRdOwotCWxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCByZXQ7CiAKIAlpZiAoY250ID49IHNpemVvZihidWYpKQpAQCAtMzA5NCw1NCArMjY2Myw5NiBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBhdG9taWNfdCB0cmFjaW5nX3JlYWRlcjsKLQogc3RhdGljIGludCB0cmFjaW5nX29wZW5fcGlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlsb25nIGNwdV9maWxlID0gKGxvbmcpIGlub2RlLT5pX3ByaXZhdGU7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyOworCWludCByZXQgPSAwOwogCiAJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogV2Ugb25seSBhbGxvdyBmb3IgcmVhZGVyIG9mIHRoZSBwaXBlICovCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZ0cmFjaW5nX3JlYWRlcikgIT0gMSkgewotCQlhdG9taWNfZGVjKCZ0cmFjaW5nX3JlYWRlcik7Ci0JCXJldHVybiAtRUJVU1k7CisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwkvKiBXZSBvbmx5IGFsbG93IG9uZSByZWFkZXIgcGVyIGNwdSAqLworCWlmIChjcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJaWYgKCFjcHVtYXNrX2VtcHR5KHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCQljcHVtYXNrX3NldGFsbCh0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKKwl9IGVsc2UgeworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spKQorCQkJY3B1bWFza19zZXRfY3B1KGNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKKwkJZWxzZSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQogCX0KIAogCS8qIGNyZWF0ZSBhIGJ1ZmZlciB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gdG8gcGFzcyB0byB1c2Vyc3BhY2UgKi8KIAlpdGVyID0ga3phbGxvYyhzaXplb2YoKml0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmaXRlci0+c3RhcnRlZCwgR0ZQX0tFUk5FTCkpIHsKLQkJa2ZyZWUoaXRlcik7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmICghaXRlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKLQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkvKgorCSAqIFdlIG1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHRyYWNlciB0byBhdm9pZCBjb25jdXJyZW50CisJICogY2hhbmdlcyBvbiBpdCB3aGlsZSB3ZSBhcmUgcmVhZGluZy4KKwkgKi8KKwlpdGVyLT50cmFjZSA9IGttYWxsb2Moc2l6ZW9mKCppdGVyLT50cmFjZSksIEdGUF9LRVJORUwpOworCWlmICghaXRlci0+dHJhY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAoY3VycmVudF90cmFjZSkKKwkJKml0ZXItPnRyYWNlID0gKmN1cnJlbnRfdHJhY2U7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZpdGVyLT5zdGFydGVkLCBHRlBfS0VSTkVMKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQogCiAJLyogdHJhY2UgcGlwZSBkb2VzIG5vdCBzaG93IHN0YXJ0IG9mIGJ1ZmZlciAqLwogCWNwdW1hc2tfc2V0YWxsKGl0ZXItPnN0YXJ0ZWQpOwogCisJaXRlci0+Y3B1X2ZpbGUgPSBjcHVfZmlsZTsKIAlpdGVyLT50ciA9ICZnbG9iYWxfdHJhY2U7Ci0JaXRlci0+dHJhY2UgPSBjdXJyZW50X3RyYWNlOworCW11dGV4X2luaXQoJml0ZXItPm11dGV4KTsKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBpdGVyOwogCiAJaWYgKGl0ZXItPnRyYWNlLT5waXBlX29wZW4pCiAJCWl0ZXItPnRyYWNlLT5waXBlX29wZW4oaXRlcik7Ci0JbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJcmV0dXJuIHJldDsKKworZmFpbDoKKwlrZnJlZShpdGVyLT50cmFjZSk7CisJa2ZyZWUoaXRlcik7CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHRyYWNpbmdfcmVsZWFzZV9waXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJaWYgKGl0ZXItPmNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkKKwkJY3B1bWFza19jbGVhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKKwllbHNlCisJCWNwdW1hc2tfY2xlYXJfY3B1KGl0ZXItPmNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKKworCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKIAlmcmVlX2NwdW1hc2tfdmFyKGl0ZXItPnN0YXJ0ZWQpOworCW11dGV4X2Rlc3Ryb3koJml0ZXItPm11dGV4KTsKKwlrZnJlZShpdGVyLT50cmFjZSk7CiAJa2ZyZWUoaXRlcik7Ci0JYXRvbWljX2RlYygmdHJhY2luZ19yZWFkZXIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTY3LDY3ICsyNzc4LDU3IEBACiAJfQogfQogCisKK3ZvaWQgZGVmYXVsdF93YWl0X3BpcGUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCURFRklORV9XQUlUKHdhaXQpOworCisJcHJlcGFyZV90b193YWl0KCZ0cmFjZV93YWl0LCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCWlmICh0cmFjZV9lbXB0eShpdGVyKSkKKwkJc2NoZWR1bGUoKTsKKworCWZpbmlzaF93YWl0KCZ0cmFjZV93YWl0LCAmd2FpdCk7Cit9CisKIC8qCi0gKiBDb25zdW1lciByZWFkZXIuCisgKiBUaGlzIGlzIGEgbWFrZS1zaGlmdCB3YWl0cXVldWUuCisgKiBBIHRyYWNlciBtaWdodCB1c2UgdGhpcyBjYWxsYmFjayBvbiBzb21lIHJhcmUgY2FzZXM6CisgKgorICogIDEpIHRoZSBjdXJyZW50IHRyYWNlciBtaWdodCBob2xkIHRoZSBydW5xdWV1ZSBsb2NrIHdoZW4gaXQgd2FrZXMgdXAKKyAqICAgICBhIHJlYWRlciwgaGVuY2UgYSBkZWFkbG9jayAoc2NoZWQsIGZ1bmN0aW9uLCBhbmQgZnVuY3Rpb24gZ3JhcGggdHJhY2VycykKKyAqICAyKSB0aGUgZnVuY3Rpb24gdHJhY2VycywgdHJhY2UgYWxsIGZ1bmN0aW9ucywgd2UgZG9uJ3Qgd2FudAorICogICAgIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIHdha2VfdXAgYW5kIGZyaWVuZHMKKyAqICAgICAoYW5kIHRyYWNpbmcgdGhlbSB0b28pCisgKgorICogICAgIEFueXdheSwgdGhpcyBpcyByZWFsbHkgdmVyeSBwcmltaXRpdmUgd2FrZXVwLgogICovCi1zdGF0aWMgc3NpemVfdAotdHJhY2luZ19yZWFkX3BpcGUoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAotCQkgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3ZvaWQgcG9sbF93YWl0X3BpcGUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJLyogc2xlZXAgZm9yIDEwMCBtc2VjcywgYW5kIHRyeSBhZ2Fpbi4gKi8KKwlzY2hlZHVsZV90aW1lb3V0KEhaIC8gMTApOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRyYWNlX3R5cGVzX2xvY2sgbXV0ZXggaGVsZC4gKi8KK3N0YXRpYyBpbnQgdHJhY2luZ193YWl0X3BpcGUoc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXNzaXplX3Qgc3JldDsKIAotCS8qIHJldHVybiBhbnkgbGVmdG92ZXIgZGF0YSAqLwotCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwotCWlmIChzcmV0ICE9IC1FQlVTWSkKLQkJcmV0dXJuIHNyZXQ7Ci0KLQl0cmFjZV9zZXFfcmVzZXQoJml0ZXItPnNlcSk7Ci0KLQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQlpZiAoaXRlci0+dHJhY2UtPnJlYWQpIHsKLQkJc3JldCA9IGl0ZXItPnRyYWNlLT5yZWFkKGl0ZXIsIGZpbHAsIHVidWYsIGNudCwgcHBvcyk7Ci0JCWlmIChzcmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi13YWl0YWdhaW46Ci0Jc3JldCA9IDA7CiAJd2hpbGUgKHRyYWNlX2VtcHR5KGl0ZXIpKSB7CiAKIAkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKLQkJCXNyZXQgPSAtRUFHQUlOOwotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCi0JCS8qCi0JCSAqIFRoaXMgaXMgYSBtYWtlLXNoaWZ0IHdhaXRxdWV1ZS4gVGhlIHJlYXNvbiB3ZSBkb24ndCB1c2UKLQkJICogYW4gYWN0dWFsIHdhaXQgcXVldWUgaXMgYmVjYXVzZToKLQkJICogIDEpIHdlIG9ubHkgZXZlciBoYXZlIG9uZSB3YWl0ZXIKLQkJICogIDIpIHRoZSB0cmFjaW5nLCB0cmFjZXMgYWxsIGZ1bmN0aW9ucywgd2UgZG9uJ3Qgd2FudAotCQkgKiAgICAgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgd2FrZV91cCBhbmQgZnJpZW5kcwotCQkgKiAgICAgKGFuZCB0cmFjaW5nIHRoZW0gdG9vKQotCQkgKiAgICAgQW55d2F5LCB0aGlzIGlzIHJlYWxseSB2ZXJ5IHByaW1pdGl2ZSB3YWtldXAuCi0JCSAqLwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpdGVyLT50ci0+d2FpdGVyID0gY3VycmVudDsKKwkJbXV0ZXhfdW5sb2NrKCZpdGVyLT5tdXRleCk7CiAKLQkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkJaXRlci0+dHJhY2UtPndhaXRfcGlwZShpdGVyKTsKIAotCQkvKiBzbGVlcCBmb3IgMTAwIG1zZWNzLCBhbmQgdHJ5IGFnYWluLiAqLwotCQlzY2hlZHVsZV90aW1lb3V0KEhaLzEwKTsKKwkJbXV0ZXhfbG9jaygmaXRlci0+bXV0ZXgpOwogCi0JCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCi0JCWl0ZXItPnRyLT53YWl0ZXIgPSBOVUxMOwotCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJc3JldCA9IC1FSU5UUjsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKGl0ZXItPnRyYWNlICE9IGN1cnJlbnRfdHJhY2UpCi0JCQlnb3RvIG91dDsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FSU5UUjsKIAogCQkvKgogCQkgKiBXZSBibG9jayB1bnRpbCB3ZSByZWFkIHNvbWV0aGluZyBhbmQgdHJhY2luZyBpcyBkaXNhYmxlZC4KQEAgLTMyNDAsMTQgKzI4NDEsNjAgQEAKIAkJICovCiAJCWlmICghdHJhY2VyX2VuYWJsZWQgJiYgaXRlci0+cG9zKQogCQkJYnJlYWs7Ci0KLQkJY29udGludWU7CiAJfQogCi0JLyogc3RvcCB3aGVuIHRyYWNpbmcgaXMgZmluaXNoZWQgKi8KLQlpZiAodHJhY2VfZW1wdHkoaXRlcikpCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDb25zdW1lciByZWFkZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90Cit0cmFjaW5nX3JlYWRfcGlwZShzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdGF0aWMgc3RydWN0IHRyYWNlciAqb2xkX3RyYWNlcjsKKwlzc2l6ZV90IHNyZXQ7CisKKwkvKiByZXR1cm4gYW55IGxlZnRvdmVyIGRhdGEgKi8KKwlzcmV0ID0gdHJhY2Vfc2VxX3RvX3VzZXIoJml0ZXItPnNlcSwgdWJ1ZiwgY250KTsKKwlpZiAoc3JldCAhPSAtRUJVU1kpCisJCXJldHVybiBzcmV0OworCisJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CisKKwkvKiBjb3B5IHRoZSB0cmFjZXIgdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgbG9jayBhbGwgYXJvdW5kICovCisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJaWYgKHVubGlrZWx5KG9sZF90cmFjZXIgIT0gY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlKSkgeworCQlvbGRfdHJhY2VyID0gY3VycmVudF90cmFjZTsKKwkJKml0ZXItPnRyYWNlID0gKmN1cnJlbnRfdHJhY2U7CisJfQorCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwkvKgorCSAqIEF2b2lkIG1vcmUgdGhhbiBvbmUgY29uc3VtZXIgb24gYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9yCisJICogVGhpcyBpcyBqdXN0IGEgbWF0dGVyIG9mIHRyYWNlcyBjb2hlcmVuY3ksIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYKKwkgKiBpcyBwcm90ZWN0ZWQuCisJICovCisJbXV0ZXhfbG9jaygmaXRlci0+bXV0ZXgpOworCWlmIChpdGVyLT50cmFjZS0+cmVhZCkgeworCQlzcmV0ID0gaXRlci0+dHJhY2UtPnJlYWQoaXRlciwgZmlscCwgdWJ1ZiwgY250LCBwcG9zKTsKKwkJaWYgKHNyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKK3dhaXRhZ2FpbjoKKwlzcmV0ID0gdHJhY2luZ193YWl0X3BpcGUoZmlscCk7CisJaWYgKHNyZXQgPD0gMCkKIAkJZ290byBvdXQ7CiAKKwkvKiBzdG9wIHdoZW4gdHJhY2luZyBpcyBmaW5pc2hlZCAqLworCWlmICh0cmFjZV9lbXB0eShpdGVyKSkgeworCQlzcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKGNudCA+PSBQQUdFX1NJWkUpCiAJCWNudCA9IFBBR0VfU0laRSAtIDE7CiAKQEAgLTMyNjcsOCArMjkxNCw4IEBACiAJCQlpdGVyLT5zZXEubGVuID0gbGVuOwogCQkJYnJlYWs7CiAJCX0KLQotCQl0cmFjZV9jb25zdW1lKGl0ZXIpOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfTk9fQ09OU1VNRSkKKwkJCXRyYWNlX2NvbnN1bWUoaXRlcik7CiAKIAkJaWYgKGl0ZXItPnNlcS5sZW4gPj0gY250KQogCQkJYnJlYWs7CkBAIC0zMjc3LDcgKzI5MjQsNyBAQAogCS8qIE5vdyBjb3B5IHdoYXQgd2UgaGF2ZSB0byB0aGUgdXNlciAqLwogCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwogCWlmIChpdGVyLT5zZXEucmVhZHBvcyA+PSBpdGVyLT5zZXEubGVuKQotCQl0cmFjZV9zZXFfcmVzZXQoJml0ZXItPnNlcSk7CisJCXRyYWNlX3NlcV9pbml0KCZpdGVyLT5zZXEpOwogCiAJLyoKIAkgKiBJZiB0aGVyZSB3YXMgbm90aGluZyB0byBzZW5kIHRvIHVzZXIsIGluc3BpdGUgb2YgY29uc3VtaW5nIHRyYWNlCkBAIC0zMjg3LDIwICsyOTM0LDE2NSBAQAogCQlnb3RvIHdhaXRhZ2FpbjsKIAogb3V0OgotCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZpdGVyLT5tdXRleCk7CiAKIAlyZXR1cm4gc3JldDsKIH0KIAorc3RhdGljIHZvaWQgdHJhY2luZ19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3sKKwlfX2ZyZWVfcGFnZShidWYtPnBhZ2UpOworfQorCitzdGF0aWMgdm9pZCB0cmFjaW5nX3NwZF9yZWxlYXNlX3BpcGUoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKnNwZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpZHgpCit7CisJX19mcmVlX3BhZ2Uoc3BkLT5wYWdlc1tpZHhdKTsKK30KKworc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHRyYWNpbmdfcGlwZV9idWZfb3BzID0geworCS5jYW5fbWVyZ2UJCT0gMCwKKwkubWFwCQkJPSBnZW5lcmljX3BpcGVfYnVmX21hcCwKKwkudW5tYXAJCQk9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCisJLmNvbmZpcm0JCT0gZ2VuZXJpY19waXBlX2J1Zl9jb25maXJtLAorCS5yZWxlYXNlCQk9IHRyYWNpbmdfcGlwZV9idWZfcmVsZWFzZSwKKwkuc3RlYWwJCQk9IGdlbmVyaWNfcGlwZV9idWZfc3RlYWwsCisJLmdldAkJCT0gZ2VuZXJpY19waXBlX2J1Zl9nZXQsCit9OworCitzdGF0aWMgc2l6ZV90Cit0cmFjaW5nX2ZpbGxfcGlwZV9wYWdlKHNpemVfdCByZW0sIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzaXplX3QgY291bnQ7CisJaW50IHJldDsKKworCS8qIFNlcSBidWZmZXIgaXMgcGFnZS1zaXplZCwgZXhhY3RseSB3aGF0IHdlIG5lZWQuICovCisJZm9yICg7OykgeworCQljb3VudCA9IGl0ZXItPnNlcS5sZW47CisJCXJldCA9IHByaW50X3RyYWNlX2xpbmUoaXRlcik7CisJCWNvdW50ID0gaXRlci0+c2VxLmxlbiAtIGNvdW50OworCQlpZiAocmVtIDwgY291bnQpIHsKKwkJCXJlbSA9IDA7CisJCQlpdGVyLT5zZXEubGVuIC09IGNvdW50OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkgeworCQkJaXRlci0+c2VxLmxlbiAtPSBjb3VudDsKKwkJCWJyZWFrOworCQl9CisKKwkJdHJhY2VfY29uc3VtZShpdGVyKTsKKwkJcmVtIC09IGNvdW50OworCQlpZiAoIWZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikpCXsKKwkJCXJlbSA9IDA7CisJCQlpdGVyLT5lbnQgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVtOworfQorCitzdGF0aWMgc3NpemVfdCB0cmFjaW5nX3NwbGljZV9yZWFkX3BpcGUoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCWxvZmZfdCAqcHBvcywKKwkJCQkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkJc2l6ZV90IGxlbiwKKwkJCQkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdOworCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgcGFydGlhbFtQSVBFX0JVRkZFUlNdOworCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyBzcGQgPSB7CisJCS5wYWdlcwkJPSBwYWdlcywKKwkJLnBhcnRpYWwJPSBwYXJ0aWFsLAorCQkubnJfcGFnZXMJPSAwLCAvKiBUaGlzIGdldHMgdXBkYXRlZCBiZWxvdy4gKi8KKwkJLmZsYWdzCQk9IGZsYWdzLAorCQkub3BzCQk9ICZ0cmFjaW5nX3BpcGVfYnVmX29wcywKKwkJLnNwZF9yZWxlYXNlCT0gdHJhY2luZ19zcGRfcmVsZWFzZV9waXBlLAorCX07CisJc3RhdGljIHN0cnVjdCB0cmFjZXIgKm9sZF90cmFjZXI7CisJc3NpemVfdCByZXQ7CisJc2l6ZV90IHJlbTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIGNvcHkgdGhlIHRyYWNlciB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBsb2NrIGFsbCBhcm91bmQgKi8KKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlpZiAodW5saWtlbHkob2xkX3RyYWNlciAhPSBjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UpKSB7CisJCW9sZF90cmFjZXIgPSBjdXJyZW50X3RyYWNlOworCQkqaXRlci0+dHJhY2UgPSAqY3VycmVudF90cmFjZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKworCW11dGV4X2xvY2soJml0ZXItPm11dGV4KTsKKworCWlmIChpdGVyLT50cmFjZS0+c3BsaWNlX3JlYWQpIHsKKwkJcmV0ID0gaXRlci0+dHJhY2UtPnNwbGljZV9yZWFkKGl0ZXIsIGZpbHAsCisJCQkJCSAgICAgICBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXQgPSB0cmFjaW5nX3dhaXRfcGlwZShmaWxwKTsKKwlpZiAocmV0IDw9IDApCisJCWdvdG8gb3V0X2VycjsKKworCWlmICghaXRlci0+ZW50ICYmICFmaW5kX25leHRfZW50cnlfaW5jKGl0ZXIpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwkvKiBGaWxsIGFzIG1hbnkgcGFnZXMgYXMgcG9zc2libGUuICovCisJZm9yIChpID0gMCwgcmVtID0gbGVuOyBpIDwgUElQRV9CVUZGRVJTICYmIHJlbTsgaSsrKSB7CisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYWdlc1tpXSkKKwkJCWJyZWFrOworCisJCXJlbSA9IHRyYWNpbmdfZmlsbF9waXBlX3BhZ2UocmVtLCBpdGVyKTsKKworCQkvKiBDb3B5IHRoZSBkYXRhIGludG8gdGhlIHBhZ2UsIHNvIHdlIGNhbiBzdGFydCBvdmVyLiAqLworCQlyZXQgPSB0cmFjZV9zZXFfdG9fYnVmZmVyKCZpdGVyLT5zZXEsCisJCQkJCSAgcGFnZV9hZGRyZXNzKHBhZ2VzW2ldKSwKKwkJCQkJICBpdGVyLT5zZXEubGVuKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCV9fZnJlZV9wYWdlKHBhZ2VzW2ldKTsKKwkJCWJyZWFrOworCQl9CisJCXBhcnRpYWxbaV0ub2Zmc2V0ID0gMDsKKwkJcGFydGlhbFtpXS5sZW4gPSBpdGVyLT5zZXEubGVuOworCisJCXRyYWNlX3NlcV9pbml0KCZpdGVyLT5zZXEpOworCX0KKworCW11dGV4X3VubG9jaygmaXRlci0+bXV0ZXgpOworCisJc3BkLm5yX3BhZ2VzID0gaTsKKworCXJldHVybiBzcGxpY2VfdG9fcGlwZShwaXBlLCAmc3BkKTsKKworb3V0X2VycjoKKwltdXRleF91bmxvY2soJml0ZXItPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90CiB0cmFjaW5nX2VudHJpZXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCSAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbNjRdOworCWNoYXIgYnVmWzk2XTsKIAlpbnQgcjsKIAotCXIgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdHItPmVudHJpZXMgPj4gMTApOworCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCWlmICghcmluZ19idWZmZXJfZXhwYW5kZWQpCisJCXIgPSBzcHJpbnRmKGJ1ZiwgIiVsdSAoZXhwYW5kZWQ6ICVsdSlcbiIsCisJCQkgICAgdHItPmVudHJpZXMgPj4gMTAsCisJCQkgICAgdHJhY2VfYnVmX3NpemUgPj4gMTApOworCWVsc2UKKwkJciA9IHNwcmludGYoYnVmLCAiJWx1XG4iLCB0ci0+ZW50cmllcyA+PiAxMCk7CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1Ziwgcik7CiB9CiAKQEAgLTMzNDQsMjggKzMxMzYsMTEgQEAKIAl2YWwgPDw9IDEwOwogCiAJaWYgKHZhbCAhPSBnbG9iYWxfdHJhY2UuZW50cmllcykgewotCQlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgdmFsKTsKKwkJcmV0ID0gdHJhY2luZ19yZXNpemVfcmluZ19idWZmZXIodmFsKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWNudCA9IHJldDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0KLQkJcmV0ID0gcmluZ19idWZmZXJfcmVzaXplKG1heF90ci5idWZmZXIsIHZhbCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlpbnQgcjsKLQkJCWNudCA9IHJldDsKLQkJCXIgPSByaW5nX2J1ZmZlcl9yZXNpemUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwKLQkJCQkJICAgICAgIGdsb2JhbF90cmFjZS5lbnRyaWVzKTsKLQkJCWlmIChyIDwgMCkgewotCQkJCS8qIEFBUkdIISBXZSBhcmUgbGVmdCB3aXRoIGRpZmZlcmVudAotCQkJCSAqIHNpemUgbWF4IGJ1ZmZlciEhISEgKi8KLQkJCQlXQVJOX09OKDEpOwotCQkJCXRyYWNpbmdfZGlzYWJsZWQgPSAxOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlnbG9iYWxfdHJhY2UuZW50cmllcyA9IHZhbDsKIAl9CiAKIAlmaWxwLT5mX3BvcyArPSBjbnQ7CkBAIC0zMzkzLDcgKzMxNjgsNyBAQAogCWludCByZXQ7CiAJdmFfbGlzdCBhcmdzOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcmV0ID0gdHJhY2VfdnByaW50aygwLCAtMSwgZm10LCBhcmdzKTsKKwlyZXQgPSB0cmFjZV92cHJpbnRrKDAsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNDMzLDQyICszMjA4LDI4OCBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfbWF4X2xhdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19tYXhfbGF0X2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19tYXhfbGF0X3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfbWF4X2xhdF93cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfY3RybF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19jdHJsX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19jdHJsX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfY3RybF93cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNldF90cmFjZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNldF90cmFjZXJfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3NldF90cmFjZV9yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX3NldF90cmFjZV93cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfcGlwZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19waXBlX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX3BpcGUsCiAJLnBvbGwJCT0gdHJhY2luZ19wb2xsX3BpcGUsCiAJLnJlYWQJCT0gdHJhY2luZ19yZWFkX3BpcGUsCisJLnNwbGljZV9yZWFkCT0gdHJhY2luZ19zcGxpY2VfcmVhZF9waXBlLAogCS5yZWxlYXNlCT0gdHJhY2luZ19yZWxlYXNlX3BpcGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2VudHJpZXNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZW50cmllc19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfZW50cmllc19yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX2VudHJpZXNfd3JpdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21hcmtfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfbWFya19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS53cml0ZQkJPSB0cmFjaW5nX21hcmtfd3JpdGUsCiB9OwogCitzdHJ1Y3QgZnRyYWNlX2J1ZmZlcl9pbmZvIHsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkJKnRyOworCXZvaWQJCQkqc3BhcmU7CisJaW50CQkJY3B1OworCXVuc2lnbmVkIGludAkJcmVhZDsKK307CisKK3N0YXRpYyBpbnQgdHJhY2luZ19idWZmZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IGNwdSA9IChpbnQpKGxvbmcpaW5vZGUtPmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgZnRyYWNlX2J1ZmZlcl9pbmZvICppbmZvOworCisJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm8tPnRyCT0gJmdsb2JhbF90cmFjZTsKKwlpbmZvLT5jcHUJPSBjcHU7CisJaW5mby0+c3BhcmUJPSByaW5nX2J1ZmZlcl9hbGxvY19yZWFkX3BhZ2UoaW5mby0+dHItPmJ1ZmZlcik7CisJLyogRm9yY2UgcmVhZGluZyByaW5nIGJ1ZmZlciBmb3IgZmlyc3QgcmVhZCAqLworCWluZm8tPnJlYWQJPSAodW5zaWduZWQgaW50KS0xOworCWlmICghaW5mby0+c3BhcmUpCisJCWdvdG8gb3V0OworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5mbzsKKworCXJldHVybiAwOworCisgb3V0OgorCWtmcmVlKGluZm8pOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgc3NpemVfdAordHJhY2luZ19idWZmZXJzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IHBvczsKKwlzc2l6ZV90IHJldDsKKwlzaXplX3Qgc2l6ZTsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJLyogRG8gd2UgaGF2ZSBwcmV2aW91cyByZWFkIGRhdGEgdG8gcmVhZD8gKi8KKwlpZiAoaW5mby0+cmVhZCA8IFBBR0VfU0laRSkKKwkJZ290byByZWFkOworCisJaW5mby0+cmVhZCA9IDA7CisKKwlyZXQgPSByaW5nX2J1ZmZlcl9yZWFkX3BhZ2UoaW5mby0+dHItPmJ1ZmZlciwKKwkJCQkgICAgJmluZm8tPnNwYXJlLAorCQkJCSAgICBjb3VudCwKKwkJCQkgICAgaW5mby0+Y3B1LCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlwb3MgPSByaW5nX2J1ZmZlcl9wYWdlX2xlbihpbmZvLT5zcGFyZSk7CisKKwlpZiAocG9zIDwgUEFHRV9TSVpFKQorCQltZW1zZXQoaW5mby0+c3BhcmUgKyBwb3MsIDAsIFBBR0VfU0laRSAtIHBvcyk7CisKK3JlYWQ6CisJc2l6ZSA9IFBBR0VfU0laRSAtIGluZm8tPnJlYWQ7CisJaWYgKHNpemUgPiBjb3VudCkKKwkJc2l6ZSA9IGNvdW50OworCisJcmV0ID0gY29weV90b191c2VyKHVidWYsIGluZm8tPnNwYXJlICsgaW5mby0+cmVhZCwgc2l6ZSk7CisJaWYgKHJldCA9PSBzaXplKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlzaXplIC09IHJldDsKKworCSpwcG9zICs9IHNpemU7CisJaW5mby0+cmVhZCArPSBzaXplOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgdHJhY2luZ19idWZmZXJzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyAqaW5mbyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJpbmdfYnVmZmVyX2ZyZWVfcmVhZF9wYWdlKGluZm8tPnRyLT5idWZmZXIsIGluZm8tPnNwYXJlKTsKKwlrZnJlZShpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnVmZmVyX3JlZiB7CisJc3RydWN0IHJpbmdfYnVmZmVyCSpidWZmZXI7CisJdm9pZAkJCSpwYWdlOworCWludAkJCXJlZjsKK307CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBidWZmZXJfcmVmICpyZWYgPSAoc3RydWN0IGJ1ZmZlcl9yZWYgKilidWYtPnByaXZhdGU7CisKKwlpZiAoLS1yZWYtPnJlZikKKwkJcmV0dXJuOworCisJcmluZ19idWZmZXJfZnJlZV9yZWFkX3BhZ2UocmVmLT5idWZmZXIsIHJlZi0+cGFnZSk7CisJa2ZyZWUocmVmKTsKKwlidWYtPnByaXZhdGUgPSAwOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9waXBlX2J1Zl9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCSBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBidWZmZXJfcmVmICpyZWYgPSAoc3RydWN0IGJ1ZmZlcl9yZWYgKilidWYtPnByaXZhdGU7CisKKwlyZWYtPnJlZisrOworfQorCisvKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBhIGJ1ZmZlci4gKi8KK3N0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBidWZmZXJfcGlwZV9idWZfb3BzID0geworCS5jYW5fbWVyZ2UJCT0gMCwKKwkubWFwCQkJPSBnZW5lcmljX3BpcGVfYnVmX21hcCwKKwkudW5tYXAJCQk9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCisJLmNvbmZpcm0JCT0gZ2VuZXJpY19waXBlX2J1Zl9jb25maXJtLAorCS5yZWxlYXNlCQk9IGJ1ZmZlcl9waXBlX2J1Zl9yZWxlYXNlLAorCS5zdGVhbAkJCT0gYnVmZmVyX3BpcGVfYnVmX3N0ZWFsLAorCS5nZXQJCQk9IGJ1ZmZlcl9waXBlX2J1Zl9nZXQsCit9OworCisvKgorICogQ2FsbGJhY2sgZnJvbSBzcGxpY2VfdG9fcGlwZSgpLCBpZiB3ZSBuZWVkIHRvIHJlbGVhc2Ugc29tZSBwYWdlcworICogYXQgdGhlIGVuZCBvZiB0aGUgc3BkIGluIGNhc2Ugd2UgZXJyb3InZWQgb3V0IGluIGZpbGxpbmcgdGhlIHBpcGUuCisgKi8KK3N0YXRpYyB2b2lkIGJ1ZmZlcl9zcGRfcmVsZWFzZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgYnVmZmVyX3JlZiAqcmVmID0KKwkJKHN0cnVjdCBidWZmZXJfcmVmICopc3BkLT5wYXJ0aWFsW2ldLnByaXZhdGU7CisKKwlpZiAoLS1yZWYtPnJlZikKKwkJcmV0dXJuOworCisJcmluZ19idWZmZXJfZnJlZV9yZWFkX3BhZ2UocmVmLT5idWZmZXIsIHJlZi0+cGFnZSk7CisJa2ZyZWUocmVmKTsKKwlzcGQtPnBhcnRpYWxbaV0ucHJpdmF0ZSA9IDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit0cmFjaW5nX2J1ZmZlcnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcHBvcywKKwkJCSAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAorCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2J1ZmZlcl9pbmZvICppbmZvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgcGFydGlhbFtQSVBFX0JVRkZFUlNdOworCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdOworCXN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjIHNwZCA9IHsKKwkJLnBhZ2VzCQk9IHBhZ2VzLAorCQkucGFydGlhbAk9IHBhcnRpYWwsCisJCS5mbGFncwkJPSBmbGFncywKKwkJLm9wcwkJPSAmYnVmZmVyX3BpcGVfYnVmX29wcywKKwkJLnNwZF9yZWxlYXNlCT0gYnVmZmVyX3NwZF9yZWxlYXNlLAorCX07CisJc3RydWN0IGJ1ZmZlcl9yZWYgKnJlZjsKKwlpbnQgc2l6ZSwgaTsKKwlzaXplX3QgcmV0OworCisJLyoKKwkgKiBXZSBjYW4ndCBzZWVrIG9uIGEgYnVmZmVyIGlucHV0CisJICovCisJaWYgKHVubGlrZWx5KCpwcG9zKSkKKwkJcmV0dXJuIC1FU1BJUEU7CisKKworCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlMgJiYgbGVuOyBpKyssIGxlbiAtPSBzaXplKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlpbnQgcjsKKworCQlyZWYgPSBremFsbG9jKHNpemVvZigqcmVmKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcmVmKQorCQkJYnJlYWs7CisKKwkJcmVmLT5idWZmZXIgPSBpbmZvLT50ci0+YnVmZmVyOworCQlyZWYtPnBhZ2UgPSByaW5nX2J1ZmZlcl9hbGxvY19yZWFkX3BhZ2UocmVmLT5idWZmZXIpOworCQlpZiAoIXJlZi0+cGFnZSkgeworCQkJa2ZyZWUocmVmKTsKKwkJCWJyZWFrOworCQl9CisKKwkJciA9IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShyZWYtPmJ1ZmZlciwgJnJlZi0+cGFnZSwKKwkJCQkJICBsZW4sIGluZm8tPmNwdSwgMCk7CisJCWlmIChyIDwgMCkgeworCQkJcmluZ19idWZmZXJfZnJlZV9yZWFkX3BhZ2UocmVmLT5idWZmZXIsCisJCQkJCQkgICByZWYtPnBhZ2UpOworCQkJa2ZyZWUocmVmKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogemVybyBvdXQgYW55IGxlZnQgb3ZlciBkYXRhLCB0aGlzIGlzIGdvaW5nIHRvCisJCSAqIHVzZXIgbGFuZC4KKwkJICovCisJCXNpemUgPSByaW5nX2J1ZmZlcl9wYWdlX2xlbihyZWYtPnBhZ2UpOworCQlpZiAoc2l6ZSA8IFBBR0VfU0laRSkKKwkJCW1lbXNldChyZWYtPnBhZ2UgKyBzaXplLCAwLCBQQUdFX1NJWkUgLSBzaXplKTsKKworCQlwYWdlID0gdmlydF90b19wYWdlKHJlZi0+cGFnZSk7CisKKwkJc3BkLnBhZ2VzW2ldID0gcGFnZTsKKwkJc3BkLnBhcnRpYWxbaV0ubGVuID0gUEFHRV9TSVpFOworCQlzcGQucGFydGlhbFtpXS5vZmZzZXQgPSAwOworCQlzcGQucGFydGlhbFtpXS5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpcmVmOworCQlzcGQubnJfcGFnZXMrKzsKKwl9CisKKwlzcGQubnJfcGFnZXMgPSBpOworCisJLyogZGlkIHdlIHJlYWQgYW55dGhpbmc/ICovCisJaWYgKCFzcGQubnJfcGFnZXMpIHsKKwkJaWYgKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spCisJCQlyZXQgPSAtRUFHQUlOOworCQllbHNlCisJCQlyZXQgPSAwOworCQkvKiBUT0RPOiBibG9jayAqLworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNwbGljZV90b19waXBlKHBpcGUsICZzcGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19idWZmZXJzX2ZvcHMgPSB7CisJLm9wZW4JCT0gdHJhY2luZ19idWZmZXJzX29wZW4sCisJLnJlYWQJCT0gdHJhY2luZ19idWZmZXJzX3JlYWQsCisJLnJlbGVhc2UJPSB0cmFjaW5nX2J1ZmZlcnNfcmVsZWFzZSwKKwkuc3BsaWNlX3JlYWQJPSB0cmFjaW5nX2J1ZmZlcnNfc3BsaWNlX3JlYWQsCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKIGludCBfX3dlYWsgZnRyYWNlX2FyY2hfcmVhZF9keW5faW5mbyhjaGFyICpidWYsIGludCBzaXplKQpAQCAtMzUwMCw3ICszNTIxLDcgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19keW5faW5mb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19keW5faW5mb19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfcmVhZF9keW5faW5mbywKIH07CkBAIC0zNTE1LDYgKzM1MzYsOSBAQAogCWlmIChkX3RyYWNlcikKIAkJcmV0dXJuIGRfdHJhY2VyOwogCisJaWYgKCFkZWJ1Z2ZzX2luaXRpYWxpemVkKCkpCisJCXJldHVybiBOVUxMOworCiAJZF90cmFjZXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInRyYWNpbmciLCBOVUxMKTsKIAogCWlmICghZF90cmFjZXIgJiYgIW9uY2UpIHsKQEAgLTM1MjYsMTUgKzM1NTAsMzUwIEBACiAJcmV0dXJuIGRfdHJhY2VyOwogfQogCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZF9wZXJjcHU7CisKK3N0cnVjdCBkZW50cnkgKnRyYWNpbmdfZGVudHJ5X3BlcmNwdSh2b2lkKQoreworCXN0YXRpYyBpbnQgb25jZTsKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKworCWlmIChkX3BlcmNwdSkKKwkJcmV0dXJuIGRfcGVyY3B1OworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisKKwlpZiAoIWRfdHJhY2VyKQorCQlyZXR1cm4gTlVMTDsKKworCWRfcGVyY3B1ID0gZGVidWdmc19jcmVhdGVfZGlyKCJwZXJfY3B1IiwgZF90cmFjZXIpOworCisJaWYgKCFkX3BlcmNwdSAmJiAhb25jZSkgeworCQlvbmNlID0gMTsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSAncGVyX2NwdSdcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZF9wZXJjcHU7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNpbmdfaW5pdF9kZWJ1Z2ZzX3BlcmNwdShsb25nIGNwdSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3BlcmNwdSA9IHRyYWNpbmdfZGVudHJ5X3BlcmNwdSgpOworCXN0cnVjdCBkZW50cnkgKmVudHJ5LCAqZF9jcHU7CisJLyogc3RybGVuKGNwdSkgKyBNQVgobG9nMTAoY3B1KSkgKyAnXDAnICovCisJY2hhciBjcHVfZGlyWzddOworCisJaWYgKGNwdSA+IDk5OSB8fCBjcHUgPCAwKQorCQlyZXR1cm47CisKKwlzcHJpbnRmKGNwdV9kaXIsICJjcHUlbGQiLCBjcHUpOworCWRfY3B1ID0gZGVidWdmc19jcmVhdGVfZGlyKGNwdV9kaXIsIGRfcGVyY3B1KTsKKwlpZiAoIWRfY3B1KSB7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAnJXMnIGVudHJ5XG4iLCBjcHVfZGlyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHBlciBjcHUgdHJhY2VfcGlwZSAqLworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2VfcGlwZSIsIDA0NDQsIGRfY3B1LAorCQkJCSh2b2lkICopIGNwdSwgJnRyYWNpbmdfcGlwZV9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3RyYWNlX3BpcGUnIGVudHJ5XG4iKTsKKworCS8qIHBlciBjcHUgdHJhY2UgKi8KKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlIiwgMDY0NCwgZF9jcHUsCisJCQkJKHZvaWQgKikgY3B1LCAmdHJhY2luZ19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3RyYWNlJyBlbnRyeVxuIik7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlX3BpcGVfcmF3IiwgMDQ0NCwgZF9jcHUsCisJCQkJICAgICh2b2lkICopIGNwdSwgJnRyYWNpbmdfYnVmZmVyc19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3RyYWNlX3BpcGVfcmF3JyBlbnRyeVxuIik7Cit9CisKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAvKiBMZXQgc2VsZnRlc3QgaGF2ZSBhY2Nlc3MgdG8gc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgKi8KICNpbmNsdWRlICJ0cmFjZV9zZWxmdGVzdC5jIgogI2VuZGlmCiAKK3N0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VyX29wdAkJKm9wdDsKKwlzdHJ1Y3QgdHJhY2VyX2ZsYWdzCQkqZmxhZ3M7CisJc3RydWN0IGRlbnRyeQkJCSplbnRyeTsKK307CisKK3N0YXRpYyBzc2l6ZV90Cit0cmFjZV9vcHRpb25zX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkJbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKworCWlmICh0b3B0LT5mbGFncy0+dmFsICYgdG9wdC0+b3B0LT5iaXQpCisJCWJ1ZiA9ICIxXG4iOworCWVsc2UKKwkJYnVmID0gIjBcbiI7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIDIpOworfQorCitzdGF0aWMgc3NpemVfdAordHJhY2Vfb3B0aW9uc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCQkgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWNoYXIgYnVmWzY0XTsKKwlpbnQgcmV0OworCisJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbY250XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IDA7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJCS8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBjbGVhcmVkICovCisJCWlmICghKHRvcHQtPmZsYWdzLT52YWwgJiB0b3B0LT5vcHQtPmJpdCkpCisJCQlicmVhazsKKworCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkJaWYgKGN1cnJlbnRfdHJhY2UtPnNldF9mbGFnKQorCQkJcmV0ID0gY3VycmVudF90cmFjZS0+c2V0X2ZsYWcodG9wdC0+ZmxhZ3MtPnZhbCwKKwkJCQkJCSAgICAgIHRvcHQtPm9wdC0+Yml0LCAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXRvcHQtPmZsYWdzLT52YWwgJj0gfnRvcHQtPm9wdC0+Yml0OworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgKi8KKwkJaWYgKHRvcHQtPmZsYWdzLT52YWwgJiB0b3B0LT5vcHQtPmJpdCkKKwkJCWJyZWFrOworCisJCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpZiAoY3VycmVudF90cmFjZS0+c2V0X2ZsYWcpCisJCQlyZXQgPSBjdXJyZW50X3RyYWNlLT5zZXRfZmxhZyh0b3B0LT5mbGFncy0+dmFsLAorCQkJCQkJICAgICAgdG9wdC0+b3B0LT5iaXQsIDEpOworCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdG9wdC0+ZmxhZ3MtPnZhbCB8PSB0b3B0LT5vcHQtPmJpdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqcHBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNlX29wdGlvbnNfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gdHJhY2Vfb3B0aW9uc19yZWFkLAorCS53cml0ZSA9IHRyYWNlX29wdGlvbnNfd3JpdGUsCit9OworCitzdGF0aWMgc3NpemVfdAordHJhY2Vfb3B0aW9uc19jb3JlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkJbG9mZl90ICpwcG9zKQoreworCWxvbmcgaW5kZXggPSAobG9uZylmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCisJaWYgKHRyYWNlX2ZsYWdzICYgKDEgPDwgaW5kZXgpKQorCQlidWYgPSAiMVxuIjsKKwllbHNlCisJCWJ1ZiA9ICIwXG4iOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCAyKTsKK30KKworc3RhdGljIHNzaXplX3QKK3RyYWNlX29wdGlvbnNfY29yZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCQkgbG9mZl90ICpwcG9zKQoreworCWxvbmcgaW5kZXggPSAobG9uZylmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNjRdOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoY250ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZltjbnRdID0gMDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJCXRyYWNlX2ZsYWdzICY9IH4oMSA8PCBpbmRleCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdHJhY2VfZmxhZ3MgfD0gMSA8PCBpbmRleDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqcHBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjZV9vcHRpb25zX2NvcmVfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gdHJhY2Vfb3B0aW9uc19jb3JlX3JlYWQsCisJLndyaXRlID0gdHJhY2Vfb3B0aW9uc19jb3JlX3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnRyYWNlX29wdGlvbnNfaW5pdF9kZW50cnkodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdGF0aWMgc3RydWN0IGRlbnRyeSAqdF9vcHRpb25zOworCisJaWYgKHRfb3B0aW9ucykKKwkJcmV0dXJuIHRfb3B0aW9uczsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCWlmICghZF90cmFjZXIpCisJCXJldHVybiBOVUxMOworCisJdF9vcHRpb25zID0gZGVidWdmc19jcmVhdGVfZGlyKCJvcHRpb25zIiwgZF90cmFjZXIpOworCWlmICghdF9vcHRpb25zKSB7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnkgJ29wdGlvbnMnXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHRfb3B0aW9uczsKK30KKworc3RhdGljIHZvaWQKK2NyZWF0ZV90cmFjZV9vcHRpb25fZmlsZShzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdCwKKwkJCSBzdHJ1Y3QgdHJhY2VyX2ZsYWdzICpmbGFncywKKwkJCSBzdHJ1Y3QgdHJhY2VyX29wdCAqb3B0KQoreworCXN0cnVjdCBkZW50cnkgKnRfb3B0aW9uczsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKworCXRfb3B0aW9ucyA9IHRyYWNlX29wdGlvbnNfaW5pdF9kZW50cnkoKTsKKwlpZiAoIXRfb3B0aW9ucykKKwkJcmV0dXJuOworCisJdG9wdC0+ZmxhZ3MgPSBmbGFnczsKKwl0b3B0LT5vcHQgPSBvcHQ7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUob3B0LT5uYW1lLCAwNjQ0LCB0X29wdGlvbnMsIHRvcHQsCisJCQkJICAgICZ0cmFjZV9vcHRpb25zX2ZvcHMpOworCisJdG9wdC0+ZW50cnkgPSBlbnRyeTsKKworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKgorY3JlYXRlX3RyYWNlX29wdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2VyICp0cmFjZXIpCit7CisJc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHRzOworCXN0cnVjdCB0cmFjZXJfZmxhZ3MgKmZsYWdzOworCXN0cnVjdCB0cmFjZXJfb3B0ICpvcHRzOworCWludCBjbnQ7CisKKwlpZiAoIXRyYWNlcikKKwkJcmV0dXJuIE5VTEw7CisKKwlmbGFncyA9IHRyYWNlci0+ZmxhZ3M7CisKKwlpZiAoIWZsYWdzIHx8ICFmbGFncy0+b3B0cykKKwkJcmV0dXJuIE5VTEw7CisKKwlvcHRzID0gZmxhZ3MtPm9wdHM7CisKKwlmb3IgKGNudCA9IDA7IG9wdHNbY250XS5uYW1lOyBjbnQrKykKKwkJOworCisJdG9wdHMgPSBrY2FsbG9jKGNudCArIDEsIHNpemVvZigqdG9wdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRvcHRzKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoY250ID0gMDsgb3B0c1tjbnRdLm5hbWU7IGNudCsrKQorCQljcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGUoJnRvcHRzW2NudF0sIGZsYWdzLAorCQkJCQkgJm9wdHNbY250XSk7CisKKwlyZXR1cm4gdG9wdHM7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cm95X3RyYWNlX29wdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdHMpCit7CisJaW50IGNudDsKKworCWlmICghdG9wdHMpCisJCXJldHVybjsKKworCWZvciAoY250ID0gMDsgdG9wdHNbY250XS5vcHQ7IGNudCsrKSB7CisJCWlmICh0b3B0c1tjbnRdLmVudHJ5KQorCQkJZGVidWdmc19yZW1vdmUodG9wdHNbY250XS5lbnRyeSk7CisJfQorCisJa2ZyZWUodG9wdHMpOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqCitjcmVhdGVfdHJhY2Vfb3B0aW9uX2NvcmVfZmlsZShjb25zdCBjaGFyICpvcHRpb24sIGxvbmcgaW5kZXgpCit7CisJc3RydWN0IGRlbnRyeSAqdF9vcHRpb25zOworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCisJdF9vcHRpb25zID0gdHJhY2Vfb3B0aW9uc19pbml0X2RlbnRyeSgpOworCWlmICghdF9vcHRpb25zKQorCQlyZXR1cm4gTlVMTDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShvcHRpb24sIDA2NDQsIHRfb3B0aW9ucywgKHZvaWQgKilpbmRleCwKKwkJCQkgICAgJnRyYWNlX29wdGlvbnNfY29yZV9mb3BzKTsKKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIGNyZWF0ZV90cmFjZV9vcHRpb25zX2Rpcih2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKnRfb3B0aW9uczsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKwlpbnQgaTsKKworCXRfb3B0aW9ucyA9IHRyYWNlX29wdGlvbnNfaW5pdF9kZW50cnkoKTsKKwlpZiAoIXRfb3B0aW9ucykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgdHJhY2Vfb3B0aW9uc1tpXTsgaSsrKSB7CisJCWVudHJ5ID0gY3JlYXRlX3RyYWNlX29wdGlvbl9jb3JlX2ZpbGUodHJhY2Vfb3B0aW9uc1tpXSwgaSk7CisJCWlmICghZW50cnkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJXMgZW50cnlcbiIsCisJCQkJICAgdHJhY2Vfb3B0aW9uc1tpXSk7CisJfQorfQorCiBzdGF0aWMgX19pbml0IGludCB0cmFjZXJfaW5pdF9kZWJ1Z2ZzKHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAJc3RydWN0IGRlbnRyeSAqZW50cnk7CisJaW50IGNwdTsKIAogCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwogCkBAIC0zNTQ4LDE4ICszOTA3LDE1IEBACiAJaWYgKCFlbnRyeSkKIAkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZV9vcHRpb25zJyBlbnRyeVxuIik7CiAKKwljcmVhdGVfdHJhY2Vfb3B0aW9uc19kaXIoKTsKKwogCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2luZ19jcHVtYXNrIiwgMDY0NCwgZF90cmFjZXIsCiAJCQkJICAgIE5VTEwsICZ0cmFjaW5nX2NwdW1hc2tfZm9wcyk7CiAJaWYgKCFlbnRyeSkKIAkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjaW5nX2NwdW1hc2snIGVudHJ5XG4iKTsKIAotCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgibGF0ZW5jeV90cmFjZSIsIDA0NDQsIGRfdHJhY2VyLAotCQkJCSAgICAmZ2xvYmFsX3RyYWNlLCAmdHJhY2luZ19sdF9mb3BzKTsKLQlpZiAoIWVudHJ5KQotCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ2xhdGVuY3lfdHJhY2UnIGVudHJ5XG4iKTsKLQotCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2UiLCAwNDQ0LCBkX3RyYWNlciwKLQkJCQkgICAgJmdsb2JhbF90cmFjZSwgJnRyYWNpbmdfZm9wcyk7CisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZSIsIDA2NDQsIGRfdHJhY2VyLAorCQkJCSAodm9pZCAqKSBUUkFDRV9QSVBFX0FMTF9DUFUsICZ0cmFjaW5nX2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2UnIGVudHJ5XG4iKTsKIApAQCAtMzU5MCw4ICszOTQ2LDggQEAKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ1JFQURNRScgZW50cnlcbiIpOwogCi0JZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZV9waXBlIiwgMDY0NCwgZF90cmFjZXIsCi0JCQkJICAgIE5VTEwsICZ0cmFjaW5nX3BpcGVfZm9wcyk7CisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZV9waXBlIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkodm9pZCAqKSBUUkFDRV9QSVBFX0FMTF9DUFUsICZ0cmFjaW5nX3BpcGVfZm9wcyk7CiAJaWYgKCFlbnRyeSkKIAkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKIAkJCSAgICIndHJhY2VfcGlwZScgZW50cnlcbiIpOwpAQCAtMzYxOSw3OCArMzk3NSwxMyBAQAogI2lmZGVmIENPTkZJR19TWVNQUk9GX1RSQUNFUgogCWluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhkX3RyYWNlcik7CiAjZW5kaWYKKworCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkKKwkJdHJhY2luZ19pbml0X2RlYnVnZnNfcGVyY3B1KGNwdSk7CisKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgaW50IGRlcHRoLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKLXsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRyYWNlX2J1Zl9sb2NrKTsKLQlzdGF0aWMgY2hhciB0cmFjZV9idWZbVFJBQ0VfQlVGX1NJWkVdOwotCi0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCWludCBjcHUsIGxlbiA9IDAsIHNpemUsIHBjOwotCXN0cnVjdCBwcmludF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQlpZiAodHJhY2luZ19kaXNhYmxlZCB8fCB0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcpCi0JCXJldHVybiAwOwotCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKLQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQotCQlnb3RvIG91dDsKLQotCXBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhY2VfYnVmX2xvY2ssIGlycV9mbGFncyk7Ci0JbGVuID0gdnNucHJpbnRmKHRyYWNlX2J1ZiwgVFJBQ0VfQlVGX1NJWkUsIGZtdCwgYXJncyk7Ci0KLQlsZW4gPSBtaW4obGVuLCBUUkFDRV9CVUZfU0laRS0xKTsKLQl0cmFjZV9idWZbbGVuXSA9IDA7Ci0KLQlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBsZW4gKyAxOwotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemUsICZpcnFfZmxhZ3MpOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0X3VubG9jazsKLQllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGlycV9mbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfUFJJTlQ7Ci0JZW50cnktPmlwCQkJPSBpcDsKLQllbnRyeS0+ZGVwdGgJCQk9IGRlcHRoOwotCi0JbWVtY3B5KCZlbnRyeS0+YnVmLCB0cmFjZV9idWYsIGxlbik7Ci0JZW50cnktPmJ1ZltsZW5dID0gMDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0gb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cmFjZV9idWZfbG9jaywgaXJxX2ZsYWdzKTsKLQl1bnBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwotCi0JcmV0dXJuIGxlbjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZwcmludGspOwotCi1pbnQgX19mdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCByZXQ7Ci0JdmFfbGlzdCBhcDsKLQotCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQotCQlyZXR1cm4gMDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXJldCA9IHRyYWNlX3ZwcmludGsoaXAsIHRhc2tfY3Vycl9yZXRfc3RhY2soY3VycmVudCksIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fZnRyYWNlX3ByaW50ayk7Ci0KIHN0YXRpYyBpbnQgdHJhY2VfcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqdW51c2VkKQogewpAQCAtMzc1MCwxNCArNDA0MSwxNSBAQAogCiAJcHJpbnRrKEtFUk5fVFJBQ0UgIiVzIiwgcy0+YnVmZmVyKTsKIAotCXRyYWNlX3NlcV9yZXNldChzKTsKKwl0cmFjZV9zZXFfaW5pdChzKTsKIH0KIAotdm9pZCBmdHJhY2VfZHVtcCh2b2lkKQorc3RhdGljIHZvaWQgX19mdHJhY2VfZHVtcChib29sIGRpc2FibGVfdHJhY2luZykKIHsKIAlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZ0cmFjZV9kdW1wX2xvY2spOwogCS8qIHVzZSBzdGF0aWMgYmVjYXVzZSBpdGVyIGNhbiBiZSBhIGJpdCBiaWcgZm9yIHRoZSBzdGFjayAqLwogCXN0YXRpYyBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgaXRlcjsKKwl1bnNpZ25lZCBpbnQgb2xkX3VzZXJvYmo7CiAJc3RhdGljIGludCBkdW1wX3JhbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjbnQgPSAwLCBjcHU7CkBAIC0zNzY5LDIxICs0MDYxLDI2IEBACiAKIAlkdW1wX3JhbiA9IDE7CiAKLQkvKiBObyB0dXJuaW5nIGJhY2shICovCiAJdHJhY2luZ19vZmYoKTsKLQlmdHJhY2Vfa2lsbCgpOworCisJaWYgKGRpc2FibGVfdHJhY2luZykKKwkJZnRyYWNlX2tpbGwoKTsKIAogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewogCQlhdG9taWNfaW5jKCZnbG9iYWxfdHJhY2UuZGF0YVtjcHVdLT5kaXNhYmxlZCk7CiAJfQogCisJb2xkX3VzZXJvYmogPSB0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX1VTRVJPQko7CisKIAkvKiBkb24ndCBsb29rIGF0IHVzZXIgbWVtb3J5IGluIHBhbmljIG1vZGUgKi8KIAl0cmFjZV9mbGFncyAmPSB+VFJBQ0VfSVRFUl9TWU1fVVNFUk9CSjsKIAogCXByaW50ayhLRVJOX1RSQUNFICJEdW1waW5nIGZ0cmFjZSBidWZmZXI6XG4iKTsKIAorCS8qIFNpbXVsYXRlIHRoZSBpdGVyYXRvciAqLwogCWl0ZXIudHIgPSAmZ2xvYmFsX3RyYWNlOwogCWl0ZXIudHJhY2UgPSBjdXJyZW50X3RyYWNlOworCWl0ZXIuY3B1X2ZpbGUgPSBUUkFDRV9QSVBFX0FMTF9DUFU7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gc3RvcCBhbGwgdHJhY2luZyBvbiBhbGwgQ1BVUyB0byByZWFkIHRoZQpAQCAtMzgxOSwxMyArNDExNiwzMCBAQAogCWVsc2UKIAkJcHJpbnRrKEtFUk5fVFJBQ0UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKKwkvKiBSZS1lbmFibGUgdHJhY2luZyBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoIWRpc2FibGVfdHJhY2luZykgeworCQl0cmFjZV9mbGFncyB8PSBvbGRfdXNlcm9iajsKKworCQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKKwkJCWF0b21pY19kZWMoJmdsb2JhbF90cmFjZS5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwkJfQorCQl0cmFjaW5nX29uKCk7CisJfQorCiAgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZ0cmFjZV9kdW1wX2xvY2ssIGZsYWdzKTsKIH0KIAorLyogQnkgZGVmYXVsdDogZGlzYWJsZSB0cmFjaW5nIGFmdGVyIHRoZSBkdW1wICovCit2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpCit7CisJX19mdHJhY2VfZHVtcCh0cnVlKTsKK30KKwogX19pbml0IHN0YXRpYyBpbnQgdHJhY2VyX2FsbG9jX2J1ZmZlcnModm9pZCkKIHsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCWludCByaW5nX2J1Zl9zaXplOwogCWludCBpOwogCWludCByZXQgPSAtRU5PTUVNOwogCkBAIC0zODM1LDExICs0MTQ5LDIxIEBACiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdHJhY2luZ19jcHVtYXNrLCBHRlBfS0VSTkVMKSkKIAkJZ290byBvdXRfZnJlZV9idWZmZXJfbWFzazsKIAorCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRyYWNpbmdfcmVhZGVyX2NwdW1hc2ssIEdGUF9LRVJORUwpKQorCQlnb3RvIG91dF9mcmVlX3RyYWNpbmdfY3B1bWFzazsKKworCS8qIFRvIHNhdmUgbWVtb3J5LCBrZWVwIHRoZSByaW5nIGJ1ZmZlciBzaXplIHRvIGl0cyBtaW5pbXVtICovCisJaWYgKHJpbmdfYnVmZmVyX2V4cGFuZGVkKQorCQlyaW5nX2J1Zl9zaXplID0gdHJhY2VfYnVmX3NpemU7CisJZWxzZQorCQlyaW5nX2J1Zl9zaXplID0gMTsKKwogCWNwdW1hc2tfY29weSh0cmFjaW5nX2J1ZmZlcl9tYXNrLCBjcHVfcG9zc2libGVfbWFzayk7CiAJY3B1bWFza19jb3B5KHRyYWNpbmdfY3B1bWFzaywgY3B1X2FsbF9tYXNrKTsKKwljcHVtYXNrX2NsZWFyKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwogCiAJLyogVE9ETzogbWFrZSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaG90IHBsdWdnYWJsZSB3aXRoIENQVVMgKi8KLQlnbG9iYWxfdHJhY2UuYnVmZmVyID0gcmluZ19idWZmZXJfYWxsb2ModHJhY2VfYnVmX3NpemUsCisJZ2xvYmFsX3RyYWNlLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHJpbmdfYnVmX3NpemUsCiAJCQkJCQkgICBUUkFDRV9CVUZGRVJfRkxBR1MpOwogCWlmICghZ2xvYmFsX3RyYWNlLmJ1ZmZlcikgewogCQlwcmludGsoS0VSTl9FUlIgInRyYWNlcjogZmFpbGVkIHRvIGFsbG9jYXRlIHJpbmcgYnVmZmVyIVxuIik7CkBAIC0zODUwLDcgKzQxNzQsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VSX01BWF9UUkFDRQotCW1heF90ci5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyh0cmFjZV9idWZfc2l6ZSwKKwltYXhfdHIuYnVmZmVyID0gcmluZ19idWZmZXJfYWxsb2MocmluZ19idWZfc2l6ZSwKIAkJCQkJICAgICBUUkFDRV9CVUZGRVJfRkxBR1MpOwogCWlmICghbWF4X3RyLmJ1ZmZlcikgewogCQlwcmludGsoS0VSTl9FUlIgInRyYWNlcjogZmFpbGVkIHRvIGFsbG9jYXRlIG1heCByaW5nIGJ1ZmZlciFcbiIpOwpAQCAtMzg3MSwxNCArNDE5NSwxMCBAQAogCXRyYWNlX2luaXRfY21kbGluZXMoKTsKIAogCXJlZ2lzdGVyX3RyYWNlcigmbm9wX3RyYWNlKTsKKwljdXJyZW50X3RyYWNlID0gJm5vcF90cmFjZTsKICNpZmRlZiBDT05GSUdfQk9PVF9UUkFDRVIKIAlyZWdpc3Rlcl90cmFjZXIoJmJvb3RfdHJhY2VyKTsKLQljdXJyZW50X3RyYWNlID0gJmJvb3RfdHJhY2VyOwotCWN1cnJlbnRfdHJhY2UtPmluaXQoJmdsb2JhbF90cmFjZSk7Ci0jZWxzZQotCWN1cnJlbnRfdHJhY2UgPSAmbm9wX3RyYWNlOwogI2VuZGlmCi0KIAkvKiBBbGwgc2VlbXMgT0ssIGVuYWJsZSB0cmFjaW5nICovCiAJdHJhY2luZ19kaXNhYmxlZCA9IDA7CiAKQEAgLTM4ODYsMTQgKzQyMDYsMzggQEAKIAkJCQkgICAgICAgJnRyYWNlX3BhbmljX25vdGlmaWVyKTsKIAogCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmdHJhY2VfZGllX25vdGlmaWVyKTsKLQlyZXQgPSAwOworCisJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2NwdW1hc2s6CisJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKK291dF9mcmVlX3RyYWNpbmdfY3B1bWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfY3B1bWFzayk7CiBvdXRfZnJlZV9idWZmZXJfbWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfYnVmZmVyX21hc2spOwogb3V0OgogCXJldHVybiByZXQ7CiB9CisKK19faW5pdCBzdGF0aWMgaW50IGNsZWFyX2Jvb3RfdHJhY2VyKHZvaWQpCit7CisJLyoKKwkgKiBUaGUgZGVmYXVsdCB0cmFjZXIgYXQgYm9vdCBidWZmZXIgaXMgYW4gaW5pdCBzZWN0aW9uLgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGxhdGVpbml0LiBJZiB3ZSBkaWQgbm90CisJICogZmluZCB0aGUgYm9vdCB0cmFjZXIsIHRoZW4gY2xlYXIgaXQgb3V0LCB0byBwcmV2ZW50CisJICogbGF0ZXIgcmVnaXN0cmF0aW9uIGZyb20gYWNjZXNzaW5nIHRoZSBidWZmZXIgdGhhdCBpcworCSAqIGFib3V0IHRvIGJlIGZyZWVkLgorCSAqLworCWlmICghZGVmYXVsdF9ib290dXBfdHJhY2VyKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0lORk8gImZ0cmFjZSBib290dXAgdHJhY2VyICclcycgbm90IHJlZ2lzdGVyZWQuXG4iLAorCSAgICAgICBkZWZhdWx0X2Jvb3R1cF90cmFjZXIpOworCWRlZmF1bHRfYm9vdHVwX3RyYWNlciA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKwogZWFybHlfaW5pdGNhbGwodHJhY2VyX2FsbG9jX2J1ZmZlcnMpOwogZnNfaW5pdGNhbGwodHJhY2VyX2luaXRfZGVidWdmcyk7CitsYXRlX2luaXRjYWxsKGNsZWFyX2Jvb3RfdHJhY2VyKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5oIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKaW5kZXggNGQzZDM4MS4uY2IwY2UzZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8dHJhY2UvYm9vdC5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgorI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CiAKIGVudW0gdHJhY2VfdHlwZSB7CiAJX19UUkFDRV9GSVJTVF9UWVBFID0gMCwKQEAgLTE2LDkgKzE4LDkgQEAKIAlUUkFDRV9GTiwKIAlUUkFDRV9DVFgsCiAJVFJBQ0VfV0FLRSwKLQlUUkFDRV9DT05ULAogCVRSQUNFX1NUQUNLLAogCVRSQUNFX1BSSU5ULAorCVRSQUNFX0JQUklOVCwKIAlUUkFDRV9TUEVDSUFMLAogCVRSQUNFX01NSU9fUlcsCiAJVFJBQ0VfTU1JT19NQVAsCkBAIC0yOSw5ICszMSwxNCBAQAogCVRSQUNFX0dSQVBIX0VOVCwKIAlUUkFDRV9VU0VSX1NUQUNLLAogCVRSQUNFX0hXX0JSQU5DSEVTLAorCVRSQUNFX1NZU0NBTExfRU5URVIsCisJVFJBQ0VfU1lTQ0FMTF9FWElULAorCVRSQUNFX0tNRU1fQUxMT0MsCisJVFJBQ0VfS01FTV9GUkVFLAogCVRSQUNFX1BPV0VSLAorCVRSQUNFX0JMSywKIAotCV9fVFJBQ0VfTEFTVF9UWVBFCisJX19UUkFDRV9MQVNUX1RZUEUsCiB9OwogCiAvKgpAQCAtNDIsNyArNDksNiBAQAogICovCiBzdHJ1Y3QgdHJhY2VfZW50cnkgewogCXVuc2lnbmVkIGNoYXIJCXR5cGU7Ci0JdW5zaWduZWQgY2hhcgkJY3B1OwogCXVuc2lnbmVkIGNoYXIJCWZsYWdzOwogCXVuc2lnbmVkIGNoYXIJCXByZWVtcHRfY291bnQ7CiAJaW50CQkJcGlkOwpAQCAtNjAsMTMgKzY2LDEzIEBACiAKIC8qIEZ1bmN0aW9uIGNhbGwgZW50cnkgKi8KIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5IHsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkJCQllbnQ7CisJc3RydWN0IHRyYWNlX2VudHJ5CQllbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQJCWdyYXBoX2VudDsKIH07CiAKIC8qIEZ1bmN0aW9uIHJldHVybiBlbnRyeSAqLwogc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgewotCXN0cnVjdCB0cmFjZV9lbnRyeQkJCWVudDsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJCWVudDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldAkJcmV0OwogfTsKIGV4dGVybiBzdHJ1Y3QgdHJhY2VyIGJvb3RfdHJhY2VyOwpAQCAtMTEyLDEyICsxMTgsMTggQEAKIH07CiAKIC8qCi0gKiBmdHJhY2VfcHJpbnRrIGVudHJ5OgorICogdHJhY2VfcHJpbnRrIGVudHJ5OgogICovCitzdHJ1Y3QgYnByaW50X2VudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCXVuc2lnbmVkIGxvbmcJCWlwOworCWNvbnN0IGNoYXIJCSpmbXQ7CisJdTMyCQkJYnVmW107Cit9OworCiBzdHJ1Y3QgcHJpbnRfZW50cnkgewogCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CiAJdW5zaWduZWQgbG9uZwkJaXA7Ci0JaW50CQkJZGVwdGg7CiAJY2hhcgkJCWJ1ZltdOwogfTsKIApAQCAtMTcwLDE1ICsxODIsNDUgQEAKIAlzdHJ1Y3QgcG93ZXJfdHJhY2UJc3RhdGVfZGF0YTsKIH07CiAKK3N0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkOworCXVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlOworCWNvbnN0IHZvaWQgKnB0cjsKKwlzaXplX3QgYnl0ZXNfcmVxOworCXNpemVfdCBieXRlc19hbGxvYzsKKwlnZnBfdCBnZnBfZmxhZ3M7CisJaW50IG5vZGU7Cit9OworCitzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkOworCXVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlOworCWNvbnN0IHZvaWQgKnB0cjsKK307CisKK3N0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyIHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCWludAkJCW5yOworCXVuc2lnbmVkIGxvbmcJCWFyZ3NbXTsKK307CisKK3N0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJaW50CQkJbnI7CisJdW5zaWduZWQgbG9uZwkJcmV0OworfTsKKworCiAvKgogICogdHJhY2VfZmxhZ190eXBlIGlzIGFuIGVudW1lcmF0aW9uIHRoYXQgaG9sZHMgZGlmZmVyZW50CiAgKiBzdGF0ZXMgd2hlbiBhIHRyYWNlIG9jY3Vycy4gVGhlc2UgYXJlOgogICogIElSUVNfT0ZGCQktIGludGVycnVwdHMgd2VyZSBkaXNhYmxlZAotICogIElSUVNfTk9TVVBQT1JUIAktIGFyY2ggZG9lcyBub3Qgc3VwcG9ydCBpcnFzX2Rpc2FibGVkX2ZsYWdzCisgKiAgSVJRU19OT1NVUFBPUlQJLSBhcmNoIGRvZXMgbm90IHN1cHBvcnQgaXJxc19kaXNhYmxlZF9mbGFncwogICogIE5FRURfUkVTQ0VECQktIHJlc2NoZWR1bGUgaXMgcmVxdWVzdGVkCiAgKiAgSEFSRElSUQkJLSBpbnNpZGUgYW4gaW50ZXJydXB0IGhhbmRsZXIKICAqICBTT0ZUSVJRCQktIGluc2lkZSBhIHNvZnRpcnEgaGFuZGxlcgotICogIENPTlQJCS0gbXVsdGlwbGUgZW50cmllcyBob2xkIHRoZSB0cmFjZSBpdGVtCiAgKi8KIGVudW0gdHJhY2VfZmxhZ190eXBlIHsKIAlUUkFDRV9GTEFHX0lSUVNfT0ZGCQk9IDB4MDEsCkBAIC0xODYsNyArMjI4LDYgQEAKIAlUUkFDRV9GTEFHX05FRURfUkVTQ0hFRAkJPSAweDA0LAogCVRSQUNFX0ZMQUdfSEFSRElSUQkJPSAweDA4LAogCVRSQUNFX0ZMQUdfU09GVElSUQkJPSAweDEwLAotCVRSQUNFX0ZMQUdfQ09OVAkJCT0gMHgyMCwKIH07CiAKICNkZWZpbmUgVFJBQ0VfQlVGX1NJWkUJCTEwMjQKQEAgLTE5OCw2ICsyMzksNyBAQAogICovCiBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1IHsKIAlhdG9taWNfdAkJZGlzYWJsZWQ7CisJdm9pZAkJCSpidWZmZXJfcGFnZTsJLyogcmluZyBidWZmZXIgc3BhcmUgKi8KIAogCS8qIHRoZXNlIGZpZWxkcyBnZXQgY29waWVkIGludG8gbWF4LXRyYWNlOiAqLwogCXVuc2lnbmVkIGxvbmcJCXRyYWNlX2lkeDsKQEAgLTI2MiwxMCArMzA0LDEwIEBACiAJZG8gewkJCQkJCQkJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZW50cnksIFRSQUNFX0ZOKTsJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5LCAwKTsJXAotCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9maWVsZF9jb250LCBUUkFDRV9DT05UKTsgXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzdGFja19lbnRyeSwgVFJBQ0VfU1RBQ0spOwlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHVzZXJzdGFja19lbnRyeSwgVFJBQ0VfVVNFUl9TVEFDSyk7XAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBwcmludF9lbnRyeSwgVFJBQ0VfUFJJTlQpOwlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGJwcmludF9lbnRyeSwgVFJBQ0VfQlBSSU5UKTsJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzcGVjaWFsX2VudHJ5LCAwKTsJCVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX3J3LAkJXAogCQkJICBUUkFDRV9NTUlPX1JXKTsJCQkJXApAQCAtMjc5LDcgKzMyMSwxNSBAQAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5LAlcCiAJCQkgIFRSQUNFX0dSQVBIX1JFVCk7CQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGh3X2JyYW5jaF9lbnRyeSwgVFJBQ0VfSFdfQlJBTkNIRVMpO1wKLSAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX3Bvd2VyLCBUUkFDRV9QT1dFUik7IFwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfcG93ZXIsIFRSQUNFX1BPV0VSKTsgXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCVwKKwkJCSAgVFJBQ0VfS01FTV9BTExPQyk7CVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnksCVwKKwkJCSAgVFJBQ0VfS01FTV9GUkVFKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyLAkJXAorCQkJICBUUkFDRV9TWVNDQUxMX0VOVEVSKTsJCQkJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQsCQlcCisJCQkgIFRSQUNFX1NZU0NBTExfRVhJVCk7CQkJCVwKIAkJX19mdHJhY2VfYmFkX3R5cGUoKTsJCQkJCVwKIAl9IHdoaWxlICgwKQogCkBAIC0yODcsNyArMzM3LDggQEAKIGVudW0gcHJpbnRfbGluZV90IHsKIAlUUkFDRV9UWVBFX1BBUlRJQUxfTElORQk9IDAsCS8qIFJldHJ5IGFmdGVyIGZsdXNoaW5nIHRoZSBzZXEgKi8KIAlUUkFDRV9UWVBFX0hBTkRMRUQJPSAxLAotCVRSQUNFX1RZUEVfVU5IQU5ETEVECT0gMgkvKiBSZWxheSB0byBvdGhlciBvdXRwdXQgZnVuY3Rpb25zICovCisJVFJBQ0VfVFlQRV9VTkhBTkRMRUQJPSAyLAkvKiBSZWxheSB0byBvdGhlciBvdXRwdXQgZnVuY3Rpb25zICovCisJVFJBQ0VfVFlQRV9OT19DT05TVU1FCT0gMwkvKiBIYW5kbGVkIGJ1dCBhc2sgdG8gbm90IGNvbnN1bWUgKi8KIH07CiAKIApAQCAtMjk3LDggKzM0OCw4IEBACiAgKiBmbGFncyB2YWx1ZSBpbiBzdHJ1Y3QgdHJhY2VyX2ZsYWdzLgogICovCiBzdHJ1Y3QgdHJhY2VyX29wdCB7Ci0JY29uc3QgY2hhciAJKm5hbWU7IC8qIFdpbGwgYXBwZWFyIG9uIHRoZSB0cmFjZV9vcHRpb25zIGZpbGUgKi8KLQl1MzIgCQliaXQ7IC8qIE1hc2sgYXNzaWduZWQgaW4gdmFsIGZpZWxkIGluIHRyYWNlcl9mbGFncyAqLworCWNvbnN0IGNoYXIJKm5hbWU7IC8qIFdpbGwgYXBwZWFyIG9uIHRoZSB0cmFjZV9vcHRpb25zIGZpbGUgKi8KKwl1MzIJCWJpdDsgLyogTWFzayBhc3NpZ25lZCBpbiB2YWwgZmllbGQgaW4gdHJhY2VyX2ZsYWdzICovCiB9OwogCiAvKgpAQCAtMzA3LDI4ICszNTgsNTEgQEAKICAqLwogc3RydWN0IHRyYWNlcl9mbGFncyB7CiAJdTMyCQkJdmFsOwotCXN0cnVjdCB0cmFjZXJfb3B0IAkqb3B0czsKKwlzdHJ1Y3QgdHJhY2VyX29wdAkqb3B0czsKIH07CiAKIC8qIE1ha2VzIG1vcmUgZWFzeSB0byBkZWZpbmUgYSB0cmFjZXIgb3B0ICovCiAjZGVmaW5lIFRSQUNFUl9PUFQocywgYikJLm5hbWUgPSAjcywgLmJpdCA9IGIKIAotLyoKLSAqIEEgc3BlY2lmaWMgdHJhY2VyLCByZXByZXNlbnRlZCBieSBtZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhIHRyYWNlIGFycmF5OgorCisvKioKKyAqIHN0cnVjdCB0cmFjZXIgLSBhIHNwZWNpZmljIHRyYWNlciBhbmQgaXRzIGNhbGxiYWNrcyB0byBpbnRlcmFjdCB3aXRoIGRlYnVnZnMKKyAqIEBuYW1lOiB0aGUgbmFtZSBjaG9zZW4gdG8gc2VsZWN0IGl0IG9uIHRoZSBhdmFpbGFibGVfdHJhY2VycyBmaWxlCisgKiBAaW5pdDogY2FsbGVkIHdoZW4gb25lIHN3aXRjaGVzIHRvIHRoaXMgdHJhY2VyIChlY2hvIG5hbWUgPiBjdXJyZW50X3RyYWNlcikKKyAqIEByZXNldDogY2FsbGVkIHdoZW4gb25lIHN3aXRjaGVzIHRvIGFub3RoZXIgdHJhY2VyCisgKiBAc3RhcnQ6IGNhbGxlZCB3aGVuIHRyYWNpbmcgaXMgdW5wYXVzZWQgKGVjaG8gMSA+IHRyYWNpbmdfZW5hYmxlZCkKKyAqIEBzdG9wOiBjYWxsZWQgd2hlbiB0cmFjaW5nIGlzIHBhdXNlZCAoZWNobyAwID4gdHJhY2luZ19lbmFibGVkKQorICogQG9wZW46IGNhbGxlZCB3aGVuIHRoZSB0cmFjZSBmaWxlIGlzIG9wZW5lZAorICogQHBpcGVfb3BlbjogY2FsbGVkIHdoZW4gdGhlIHRyYWNlX3BpcGUgZmlsZSBpcyBvcGVuZWQKKyAqIEB3YWl0X3BpcGU6IG92ZXJyaWRlIGhvdyB0aGUgdXNlciB3YWl0cyBmb3IgdHJhY2VzIG9uIHRyYWNlX3BpcGUKKyAqIEBjbG9zZTogY2FsbGVkIHdoZW4gdGhlIHRyYWNlIGZpbGUgaXMgcmVsZWFzZWQKKyAqIEByZWFkOiBvdmVycmlkZSB0aGUgZGVmYXVsdCByZWFkIGNhbGxiYWNrIG9uIHRyYWNlX3BpcGUKKyAqIEBzcGxpY2VfcmVhZDogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3BsaWNlX3JlYWQgY2FsbGJhY2sgb24gdHJhY2VfcGlwZQorICogQHNlbGZ0ZXN0OiBzZWxmdGVzdCB0byBydW4gb24gYm9vdCAoc2VlIHRyYWNlX3NlbGZ0ZXN0LmMpCisgKiBAcHJpbnRfaGVhZGVyczogb3ZlcnJpZGUgdGhlIGZpcnN0IGxpbmVzIHRoYXQgZGVzY3JpYmUgeW91ciBjb2x1bW5zCisgKiBAcHJpbnRfbGluZTogY2FsbGJhY2sgdGhhdCBwcmludHMgYSB0cmFjZQorICogQHNldF9mbGFnOiBzaWduYWxzIG9uZSBvZiB5b3VyIHByaXZhdGUgZmxhZ3MgY2hhbmdlZCAodHJhY2Vfb3B0aW9ucyBmaWxlKQorICogQGZsYWdzOiB5b3VyIHByaXZhdGUgZmxhZ3MKICAqLwogc3RydWN0IHRyYWNlciB7CiAJY29uc3QgY2hhcgkJKm5hbWU7Ci0JLyogWW91ciB0cmFjZXIgc2hvdWxkIHJhaXNlIGEgd2FybmluZyBpZiBpbml0IGZhaWxzICovCiAJaW50CQkJKCppbml0KShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIAl2b2lkCQkJKCpyZXNldCkoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiAJdm9pZAkJCSgqc3RhcnQpKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogCXZvaWQJCQkoKnN0b3ApKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogCXZvaWQJCQkoKm9wZW4pKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJdm9pZAkJCSgqcGlwZV9vcGVuKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworCXZvaWQJCQkoKndhaXRfcGlwZSkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKIAl2b2lkCQkJKCpjbG9zZSkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKIAlzc2l6ZV90CQkJKCpyZWFkKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKTsKKwlzc2l6ZV90CQkJKCpzcGxpY2VfcmVhZCkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCSAgICAgICBsb2ZmX3QgKnBwb3MsCisJCQkJCSAgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCQkgICAgICAgc2l6ZV90IGxlbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKIAlpbnQJCQkoKnNlbGZ0ZXN0KShzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwpAQCAtMzM5LDcgKzQxMyw4IEBACiAJaW50CQkJKCpzZXRfZmxhZykodTMyIG9sZF9mbGFncywgdTMyIGJpdCwgaW50IHNldCk7CiAJc3RydWN0IHRyYWNlcgkJKm5leHQ7CiAJaW50CQkJcHJpbnRfbWF4OwotCXN0cnVjdCB0cmFjZXJfZmxhZ3MgCSpmbGFnczsKKwlzdHJ1Y3QgdHJhY2VyX2ZsYWdzCSpmbGFnczsKKwlzdHJ1Y3QgdHJhY2VyX3N0YXQJKnN0YXRzOwogfTsKIAogc3RydWN0IHRyYWNlX3NlcSB7CkBAIC0zNDgsNiArNDIzLDE2IEBACiAJdW5zaWduZWQgaW50CQlyZWFkcG9zOwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkCit0cmFjZV9zZXFfaW5pdChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXMtPmxlbiA9IDA7CisJcy0+cmVhZHBvcyA9IDA7Cit9CisKKworI2RlZmluZSBUUkFDRV9QSVBFX0FMTF9DUFUJLTEKKwogLyoKICAqIFRyYWNlIGl0ZXJhdG9yIC0gdXNlZCBieSBwcmludG91dCByb3V0aW5lcyB3aG8gcHJlc2VudCB0cmFjZQogICogcmVzdWx0cyB0byB1c2VycyBhbmQgd2hpY2ggcm91dGluZXMgbWlnaHQgc2xlZXAsIGV0YzoKQEAgLTM1Niw2ICs0NDEsOCBAQAogCXN0cnVjdCB0cmFjZV9hcnJheQkqdHI7CiAJc3RydWN0IHRyYWNlcgkJKnRyYWNlOwogCXZvaWQJCQkqcHJpdmF0ZTsKKwlpbnQJCQljcHVfZmlsZTsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwogCXN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyCSpidWZmZXJfaXRlcltOUl9DUFVTXTsKIAogCS8qIFRoZSBiZWxvdyBpcyB6ZXJvZWQgb3V0IGluIHBpcGVfcmVhZCAqLwpAQCAtMzcxLDYgKzQ1OCw3IEBACiAJY3B1bWFza192YXJfdAkJc3RhcnRlZDsKIH07CiAKK2ludCB0cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VyICp0LCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIGludCB0cmFjaW5nX2lzX2VuYWJsZWQodm9pZCk7CiB2b2lkIHRyYWNlX3dha2VfdXAodm9pZCk7CiB2b2lkIHRyYWNpbmdfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgaW50IGNwdSk7CkBAIC0zNzksMjYgKzQ2Nyw1MCBAQAogc3RydWN0IGRlbnRyeSAqdHJhY2luZ19pbml0X2RlbnRyeSh2b2lkKTsKIHZvaWQgaW5pdF90cmFjZXJfc3lzcHJvZl9kZWJ1Z2ZzKHN0cnVjdCBkZW50cnkgKmRfdHJhY2VyKTsKIAorc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50OworCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKnRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIHR5cGUsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJCSAgICBpbnQgcGMpOwordm9pZCB0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKKworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3RyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKK3ZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwordm9pZCB0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKKwogc3RydWN0IHRyYWNlX2VudHJ5ICp0cmFjaW5nX2dldF90cmFjZV9lbnRyeShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkJCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSk7CisKK3N0cnVjdCB0cmFjZV9lbnRyeSAqdHJhY2VfZmluZF9uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICBpbnQgKmVudF9jcHUsIHU2NCAqZW50X3RzKTsKKwogdm9pZCB0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksCiAJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSAgaW50IHBjKTsKIAordm9pZCBkZWZhdWx0X3dhaXRfcGlwZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwordm9pZCBwb2xsX3dhaXRfcGlwZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworCiB2b2lkIGZ0cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkJICAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBpcCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwogdm9pZCB0cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwogdm9pZCB0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogdm9pZCB0cmFjaW5nX3NjaGVkX3dha2V1cF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp3YWtlZSwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1ciwKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwpAQCAtNDA4LDE0ICs1MjAsMTIgQEAKIAkJICAgdW5zaWduZWQgbG9uZyBhcmcyLAogCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIGludCBwYyk7CiB2b2lkIHRyYWNlX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkgICAgdW5zaWduZWQgbG9uZyBpcCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLAogCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIAogdm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKTsKIGludCB0cmFjZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UpOwotdm9pZCB0cmFjZV9od19icmFuY2goc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgdTY0IGZyb20sIHU2NCB0byk7CiAKIHZvaWQgdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCh2b2lkKTsKIHZvaWQgdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKHZvaWQpOwpAQCAtNDM0LDE1ICs1NDQsMTEgQEAKIHZvaWQgdXBkYXRlX21heF90cl9zaW5nbGUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUpOwogCi1leHRlcm4gY3ljbGVfdCBmdHJhY2Vfbm93KGludCBjcHUpOwordm9pZCBfX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCSAgIGludCBza2lwLCBpbnQgcGMpOwogCi0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgotdm9pZCB0cmFjaW5nX3N0YXJ0X2Z1bmN0aW9uX3RyYWNlKHZvaWQpOwotdm9pZCB0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2Uodm9pZCk7Ci0jZWxzZQotIyBkZWZpbmUgdHJhY2luZ19zdGFydF9mdW5jdGlvbl90cmFjZSgpCQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSB0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2UoKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCitleHRlcm4gY3ljbGVfdCBmdHJhY2Vfbm93KGludCBjcHUpOwogCiAjaWZkZWYgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUgogdHlwZWRlZiB2b2lkCkBAIC00NTYsMTAgKzU2MiwxMCBAQAogCXZvaWQJCQkJKnByaXZhdGU7CiAJc3RydWN0IHRyYWNlcl9zd2l0Y2hfb3BzCSpuZXh0OwogfTsKLQotY2hhciAqdHJhY2VfZmluZF9jbWRsaW5lKGludCBwaWQpOwogI2VuZGlmIC8qIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgKi8KIAorZXh0ZXJuIHZvaWQgdHJhY2VfZmluZF9jbWRsaW5lKGludCBwaWQsIGNoYXIgY29tbVtdKTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnRyYWNlX3VwZGF0ZV90b3RfY250OwogI2RlZmluZSBEWU5fRlRSQUNFX1RFU1RfTkFNRSB0cmFjZV9zZWxmdGVzdF9keW5hbWljX3Rlc3RfZnVuYwpAQCAtNDY5LDYgKzU3NSw4IEBACiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKIGV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CitleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgoc3RydWN0IHRyYWNlciAqdHJhY2UsCisJCQkJCQkgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfaXJxc29mZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIGV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9wcmVlbXB0b2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLApAQCAtNDg4LDE4ICs1OTYsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCAqLwogCiBleHRlcm4gdm9pZCAqaGVhZF9wYWdlKHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwotZXh0ZXJuIGludCB0cmFjZV9zZXFfcHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWV4dGVybiB2b2lkIHRyYWNlX3NlcV9wcmludF9jb250KHN0cnVjdCB0cmFjZV9zZXEgKnMsCi0JCQkJIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7Ci0KLWV4dGVybiBpbnQKLXNlcV9wcmludF9pcF9zeW0oc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgbG9uZyBpcCwKLQkJdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpOwotZXh0ZXJuIHNzaXplX3QgdHJhY2Vfc2VxX3RvX3VzZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgY2hhciBfX3VzZXIgKnVidWYsCi0JCQkJIHNpemVfdCBjbnQpOwogZXh0ZXJuIGxvbmcgbnMydXNlY3MoY3ljbGVfdCBuc2VjKTsKIGV4dGVybiBpbnQKLXRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgaW50IGRlcHRoLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7Cit0cmFjZV92YnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CitleHRlcm4gaW50Cit0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJhY2VfZmxhZ3M7CiAKQEAgLTU4MCw3ICs2ODEsMTEgQEAKIAlUUkFDRV9JVEVSX0FOTk9UQVRFCQk9IDB4MjAwMCwKIAlUUkFDRV9JVEVSX1VTRVJTVEFDS1RSQUNFICAgICAgID0gMHg0MDAwLAogCVRSQUNFX0lURVJfU1lNX1VTRVJPQkogICAgICAgICAgPSAweDgwMDAsCi0JVFJBQ0VfSVRFUl9QUklOVEtfTVNHT05MWQk9IDB4MTAwMDAKKwlUUkFDRV9JVEVSX1BSSU5US19NU0dPTkxZCT0gMHgxMDAwMCwKKwlUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTwkJPSAweDIwMDAwLCAvKiBQcmludCBwaWQvY3B1L3RpbWUgKi8KKwlUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UCQk9IDB4NDAwMDAsCisJVFJBQ0VfSVRFUl9HTE9CQUxfQ0xLCQk9IDB4ODAwMDAsCisJVFJBQ0VfSVRFUl9TTEVFUF9USU1FCQk9IDB4MTAwMDAwLAogfTsKIAogLyoKQEAgLTYwMSwxMiArNzA2LDEyIEBACiAgKiBwcmVlbXB0X2VuYWJsZSAoYWZ0ZXIgYSBkaXNhYmxlKSwgYSBzY2hlZHVsZSBtaWdodCB0YWtlIHBsYWNlCiAgKiBjYXVzaW5nIGFuIGluZmluaXRlIHJlY3Vyc2lvbi4KICAqCi0gKiBUbyBwcmV2ZW50IHRoaXMsIHdlIHJlYWQgdGhlIG5lZWRfcmVjc2hlZCBmbGFnIGJlZm9yZQorICogVG8gcHJldmVudCB0aGlzLCB3ZSByZWFkIHRoZSBuZWVkX3Jlc2NoZWQgZmxhZyBiZWZvcmUKICAqIGRpc2FibGluZyBwcmVlbXB0aW9uLiBXaGVuIHdlIHdhbnQgdG8gZW5hYmxlIHByZWVtcHRpb24gd2UKICAqIGNoZWNrIHRoZSBmbGFnLCBpZiBpdCBpcyBzZXQsIHRoZW4gd2UgY2FsbCBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkLgogICogT3RoZXJ3aXNlLCB3ZSBjYWxsIHByZWVtcHRfZW5hYmxlLgogICoKLSAqIFRoZSByYXRpb25hbCBmb3IgZG9pbmcgdGhlIGFib3ZlIGlzIHRoYXQgaWYgbmVlZCByZXNjaGVkIGlzIHNldAorICogVGhlIHJhdGlvbmFsIGZvciBkb2luZyB0aGUgYWJvdmUgaXMgdGhhdCBpZiBuZWVkX3Jlc2NoZWQgaXMgc2V0CiAgKiBhbmQgd2UgaGF2ZSB5ZXQgdG8gcmVzY2hlZHVsZSwgd2UgYXJlIGVpdGhlciBpbiBhbiBhdG9taWMgbG9jYXRpb24KICAqICh3aGVyZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBmb3Igc2NoZWR1bGluZykgb3Igd2UgYXJlIGluc2lkZQogICogdGhlIHNjaGVkdWxlciBhbmQgZG8gbm90IHdhbnQgdG8gcmVzY2hlZC4KQEAgLTYyNyw3ICs3MzIsNyBAQAogICoKICAqIFRoaXMgaXMgYSBzY2hlZHVsZXIgc2FmZSB3YXkgdG8gZW5hYmxlIHByZWVtcHRpb24gYW5kIG5vdCBtaXNzCiAgKiBhbnkgcHJlZW1wdGlvbiBjaGVja3MuIFRoZSBkaXNhYmxlZCBzYXZlZCB0aGUgc3RhdGUgb2YgcHJlZW1wdGlvbi4KLSAqIElmIHJlc2NoZWQgaXMgc2V0LCB0aGVuIHdlIHdlcmUgZWl0aGVyIGluc2lkZSBhbiBhdG9taWMgb3IKKyAqIElmIHJlc2NoZWQgaXMgc2V0LCB0aGVuIHdlIGFyZSBlaXRoZXIgaW5zaWRlIGFuIGF0b21pYyBvcgogICogYXJlIGluc2lkZSB0aGUgc2NoZWR1bGVyICh3ZSB3b3VsZCBoYXZlIGFscmVhZHkgc2NoZWR1bGVkCiAgKiBvdGhlcndpc2UpLiBJbiB0aGlzIGNhc2UsIHdlIGRvIG5vdCB3YW50IHRvIGNhbGwgbm9ybWFsCiAgKiBwcmVlbXB0X2VuYWJsZSwgYnV0IHByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQgaW5zdGVhZC4KQEAgLTY2NCw0ICs3NjksMTE4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0JSQU5DSF9UUkFDRVIgKi8KIAorLyogc2V0IHJpbmcgYnVmZmVycyB0byBkZWZhdWx0IHNpemUgaWYgbm90IGFscmVhZHkgZG9uZSBzbyAqLworaW50IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnModm9pZCk7CisKKy8qIHRyYWNlIGV2ZW50IHR5cGUgYml0IGZpZWxkcywgbm90IG51bWVyaWMgKi8KK2VudW0geworCVRSQUNFX0VWRU5UX1RZUEVfUFJJTlRGCQk9IDEsCisJVFJBQ0VfRVZFTlRfVFlQRV9SQVcJCT0gMiwKK307CisKK3N0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgeworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsKKwljaGFyCQkJKm5hbWU7CisJY2hhcgkJCSp0eXBlOworCWludAkJCW9mZnNldDsKKwlpbnQJCQlzaXplOworfTsKKworc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIHsKKwljaGFyCQkJKm5hbWU7CisJY2hhcgkJCSpzeXN0ZW07CisJc3RydWN0IGRlbnRyeQkJKmRpcjsKKwlpbnQJCQllbmFibGVkOworCWludAkJCSgqcmVnZnVuYykodm9pZCk7CisJdm9pZAkJCSgqdW5yZWdmdW5jKSh2b2lkKTsKKwlpbnQJCQlpZDsKKwlpbnQJCQkoKnJhd19pbml0KSh2b2lkKTsKKwlpbnQJCQkoKnNob3dfZm9ybWF0KShzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKKwlpbnQJCQkoKmRlZmluZV9maWVsZHMpKHZvaWQpOworCXN0cnVjdCBsaXN0X2hlYWQJZmllbGRzOworCXN0cnVjdCBmaWx0ZXJfcHJlZAkqKnByZWRzOworCisjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKwlhdG9taWNfdAlwcm9maWxlX2NvdW50OworCWludAkJKCpwcm9maWxlX2VuYWJsZSkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOworCXZvaWQJCSgqcHJvZmlsZV9kaXNhYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CisjZW5kaWYKK307CisKK3N0cnVjdCBldmVudF9zdWJzeXN0ZW0geworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgZGVudHJ5CQkqZW50cnk7CisJc3RydWN0IGZpbHRlcl9wcmVkCSoqcHJlZHM7Cit9OworCisjZGVmaW5lIGV2ZW50c19mb3JfZWFjaChldmVudCkJCQkJCQlcCisJZm9yIChldmVudCA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsJCQkJXAorCSAgICAgKHVuc2lnbmVkIGxvbmcpZXZlbnQgPCAodW5zaWduZWQgbG9uZylfX3N0b3BfZnRyYWNlX2V2ZW50czsgXAorCSAgICAgZXZlbnQrKykKKworI2RlZmluZSBNQVhfRklMVEVSX1BSRUQgOAorCitzdHJ1Y3QgZmlsdGVyX3ByZWQ7CisKK3R5cGVkZWYgaW50ICgqZmlsdGVyX3ByZWRfZm5fdCkgKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQpOworCitzdHJ1Y3QgZmlsdGVyX3ByZWQgeworCWZpbHRlcl9wcmVkX2ZuX3QgZm47CisJdTY0IHZhbDsKKwljaGFyICpzdHJfdmFsOworCWludCBzdHJfbGVuOworCWNoYXIgKmZpZWxkX25hbWU7CisJaW50IG9mZnNldDsKKwlpbnQgbm90OworCWludCBvcjsKKwlpbnQgY29tcG91bmQ7CisJaW50IGNsZWFyOworfTsKKworaW50IHRyYWNlX2RlZmluZV9maWVsZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGNoYXIgKnR5cGUsCisJCSAgICAgICBjaGFyICpuYW1lLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBmaWx0ZXJfZnJlZV9wcmVkKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCk7CitleHRlcm4gdm9pZCBmaWx0ZXJfcHJpbnRfcHJlZHMoc3RydWN0IGZpbHRlcl9wcmVkICoqcHJlZHMsCisJCQkgICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcyk7CitleHRlcm4gaW50IGZpbHRlcl9wYXJzZShjaGFyICoqcGJ1Ziwgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKTsKK2V4dGVybiBpbnQgZmlsdGVyX2FkZF9wcmVkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCSAgIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCk7CitleHRlcm4gdm9pZCBmaWx0ZXJfZnJlZV9wcmVkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOworZXh0ZXJuIGludCBmaWx0ZXJfbWF0Y2hfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpyZWMpOworZXh0ZXJuIHZvaWQgZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSk7CitleHRlcm4gaW50IGZpbHRlcl9hZGRfc3Vic3lzdGVtX3ByZWQoc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtLAorCQkJCSAgICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKTsKKwordm9pZCBldmVudF90cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0YXJ0X2Z0cmFjZV9ldmVudHNbXTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKKworI2RlZmluZSBmb3JfZWFjaF9ldmVudChldmVudCkJCQkJCQlcCisJZm9yIChldmVudCA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsJCQkJXAorCSAgICAgKHVuc2lnbmVkIGxvbmcpZXZlbnQgPCAodW5zaWduZWQgbG9uZylfX3N0b3BfZnRyYWNlX2V2ZW50czsgXAorCSAgICAgZXZlbnQrKykKKworZXh0ZXJuIGNvbnN0IGNoYXIgKl9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKl9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10W107CisKKy8qCisgKiBUaGUgZG91YmxlIF9fYnVpbHRpbl9jb25zdGFudF9wIGlzIGJlY2F1c2UgZ2NjIHdpbGwgZ2l2ZSB1cyBhbiBlcnJvcgorICogaWYgd2UgdHJ5IHRvIGFsbG9jYXRlIHRoZSBzdGF0aWMgdmFyaWFibGUgdG8gZm10IGlmIGl0IGlzIG5vdCBhCisgKiBjb25zdGFudC4gRXZlbiB3aXRoIHRoZSBvdXRlciBpZiBzdGF0ZW1lbnQgb3B0aW1pemluZyBvdXQuCisgKi8KKyNkZWZpbmUgZXZlbnRfdHJhY2VfcHJpbnRrKGlwLCBmbXQsIGFyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX190cmFjZV9wcmludGtfY2hlY2tfZm9ybWF0KGZtdCwgIyNhcmdzKTsJCQlcCisJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsJCQkJXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpKSB7CQkJCVwKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnRyYWNlX3ByaW50a19mbXQJCQlcCisJCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZV9wcmludGtfZm10IikpKSA9CVwKKwkJCV9fYnVpbHRpbl9jb25zdGFudF9wKGZtdCkgPyBmbXQgOiBOVUxMOwkJXAorCQkJCQkJCQkJXAorCQlfX3RyYWNlX2JwcmludGsoaXAsIHRyYWNlX3ByaW50a19mbXQsICMjYXJncyk7CQlcCisJfSBlbHNlCQkJCQkJCQlcCisJCV9fdHJhY2VfcHJpbnRrKGlwLCBmbXQsICMjYXJncyk7CQkJXAorfSB3aGlsZSAoMCkKKwogI2VuZGlmIC8qIF9MSU5VWF9LRVJORUxfVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKaW5kZXggMzY2YzhjMy4uN2EzMGZjNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmJvb3RfdHJhY2U7CiBzdGF0aWMgYm9vbCBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkOwpAQCAtMjcsMTMgKzI4LDEzIEBACiAKIHZvaWQgZW5hYmxlX2Jvb3RfdHJhY2Uodm9pZCkKIHsKLQlpZiAocHJlX2luaXRjYWxsc19maW5pc2hlZCkKKwlpZiAoYm9vdF90cmFjZSAmJiBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQogCQl0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKIH0KIAogdm9pZCBkaXNhYmxlX2Jvb3RfdHJhY2Uodm9pZCkKIHsKLQlpZiAocHJlX2luaXRjYWxsc19maW5pc2hlZCkKKwlpZiAoYm9vdF90cmFjZSAmJiBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQogCQl0cmFjaW5nX3N0b3Bfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwogfQogCkBAIC00Miw2ICs0Myw5IEBACiAJaW50IGNwdTsKIAlib290X3RyYWNlID0gdHI7CiAKKwlpZiAoIXRyKQorCQlyZXR1cm4gMDsKKwogCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wb3NzaWJsZV9tYXNrKQogCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwogCkBAIC0xMjgsMTAgKzEzMiw5IEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfYm9vdF9jYWxsICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKIAotCWlmICghcHJlX2luaXRjYWxsc19maW5pc2hlZCkKKwlpZiAoIXRyIHx8ICFwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQogCQlyZXR1cm47CiAKIAkvKiBHZXQgaXRzIG5hbWUgbm93IHNpbmNlIHRoaXMgZnVuY3Rpb24gY291bGQKQEAgLTE0MCwxOCArMTQzLDEzIEBACiAJc3ByaW50X3N5bWJvbChidC0+ZnVuYywgKHVuc2lnbmVkIGxvbmcpZm4pOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0JPT1RfQ0FMTCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCAwKTsKLQllbnRyeS0+ZW50LnR5cGUgPSBUUkFDRV9CT09UX0NBTEw7CiAJZW50cnktPmJvb3RfY2FsbCA9ICpidDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0JdHJhY2Vfd2FrZV91cCgpOwotCisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKICBvdXQ6CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTE2MCwyNyArMTU4LDIxIEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfYm9vdF9yZXQgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBib290X3RyYWNlOwogCi0JaWYgKCFwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQorCWlmICghdHIgfHwgIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCiAJCXJldHVybjsKIAogCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CT09UX1JFVCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCAwKTsKLQllbnRyeS0+ZW50LnR5cGUgPSBUUkFDRV9CT09UX1JFVDsKIAllbnRyeS0+Ym9vdF9yZXQgPSAqYnQ7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKLQorCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7CiAgb3V0OgogCXByZWVtcHRfZW5hYmxlKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKaW5kZXggNmMwMGZlYi4uYWQ4YzIyZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwpAQCAtMTQsMTIgKzE0LDE3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CisKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX3N0YXQuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogI2lmZGVmIENPTkZJR19CUkFOQ0hfVFJBQ0VSCiAKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyIGJyYW5jaF90cmFjZTsKIHN0YXRpYyBpbnQgYnJhbmNoX3RyYWNpbmdfZW5hYmxlZCBfX3JlYWRfbW9zdGx5Owogc3RhdGljIERFRklORV9NVVRFWChicmFuY2hfdHJhY2luZ19tdXRleCk7CisKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmJyYW5jaF90cmFjZXI7CiAKIHN0YXRpYyB2b2lkCkBAIC0yOCw3ICszMyw3IEBACiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGJyYW5jaF90cmFjZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfYnJhbmNoICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpcnFfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1LCBwYzsKIAljb25zdCBjaGFyICpwOwogCkBAIC00NywxNSArNTIsMTMgQEAKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKSAhPSAxKQogCQlnb3RvIG91dDsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CUkFOQ0gsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAKLQlwYyA9IHByZWVtcHRfY291bnQoKTsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQk9IFRSQUNFX0JSQU5DSDsKIAogCS8qIFN0cmlwIG9mZiB0aGUgcGF0aCwgb25seSBzYXZlIHRoZSBmaWxlICovCiAJcCA9IGYtPmZpbGUgKyBzdHJsZW4oZi0+ZmlsZSk7CkBAIC03MCw3ICs3Myw3IEBACiAJZW50cnktPmxpbmUgPSBmLT5saW5lOwogCWVudHJ5LT5jb3JyZWN0ID0gdmFsID09IGV4cGVjdDsKIAotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CiAKICBvdXQ6CiAJYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwpAQCAtODgsOCArOTEsNiBAQAogCiBpbnQgZW5hYmxlX2JyYW5jaF90cmFjaW5nKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAltdXRleF9sb2NrKCZicmFuY2hfdHJhY2luZ19tdXRleCk7CiAJYnJhbmNoX3RyYWNlciA9IHRyOwogCS8qCkBAIC0xMDAsNyArMTAxLDcgQEAKIAlicmFuY2hfdHJhY2luZ19lbmFibGVkKys7CiAJbXV0ZXhfdW5sb2NrKCZicmFuY2hfdHJhY2luZ19tdXRleCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiB2b2lkIGRpc2FibGVfYnJhbmNoX3RyYWNpbmcodm9pZCkKQEAgLTEyOCwxMSArMTI5LDYgQEAKIAogc3RhdGljIGludCBicmFuY2hfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHU7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKLQogCXN0YXJ0X2JyYW5jaF90cmFjZSh0cik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDIsMjIgKzEzOCw1MyBAQAogCXN0b3BfYnJhbmNoX3RyYWNlKHRyKTsKIH0KIAotc3RydWN0IHRyYWNlciBicmFuY2hfdHJhY2UgX19yZWFkX21vc3RseSA9CitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfYnJhbmNoX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2VfYnJhbmNoICpmaWVsZDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKHRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIlslc10gJXM6JXM6JWRcbiIsCisJCQkgICAgIGZpZWxkLT5jb3JyZWN0ID8gIiAgb2sgICIgOiAiIE1JU1MgIiwKKwkJCSAgICAgZmllbGQtPmZ1bmMsCisJCQkgICAgIGZpZWxkLT5maWxlLAorCQkJICAgICBmaWVsZC0+bGluZSkpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9icmFuY2hfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfQlJBTkNILAorCS50cmFjZQkJPSB0cmFjZV9icmFuY2hfcHJpbnQsCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlciBicmFuY2hfdHJhY2UgX19yZWFkX21vc3RseSA9CiB7CiAJLm5hbWUJCT0gImJyYW5jaCIsCiAJLmluaXQJCT0gYnJhbmNoX3RyYWNlX2luaXQsCiAJLnJlc2V0CQk9IGJyYW5jaF90cmFjZV9yZXNldCwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0CT0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9icmFuY2gsCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NFTEZURVNUICovCiB9OwogCi1fX2luaXQgc3RhdGljIGludCBpbml0X2JyYW5jaF90cmFjZSh2b2lkKQorX19pbml0IHN0YXRpYyBpbnQgaW5pdF9icmFuY2hfdHJhY2VyKHZvaWQpCiB7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHJhY2VfYnJhbmNoX2V2ZW50KTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgIgorCQkJCSAgICAiYnJhbmNoIGV2ZW50c1xuIik7CisJCXJldHVybiAxOworCX0KIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZicmFuY2hfdHJhY2UpOwogfQorZGV2aWNlX2luaXRjYWxsKGluaXRfYnJhbmNoX3RyYWNlcik7CiAKLWRldmljZV9pbml0Y2FsbChpbml0X2JyYW5jaF90cmFjZSk7CiAjZWxzZQogc3RhdGljIGlubGluZQogdm9pZCB0cmFjZV9saWtlbHlfY29uZGl0aW9uKHN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKmYsIGludCB2YWwsIGludCBleHBlY3QpCkBAIC0xODMsNjUgKzIxMCwzOCBAQAogfQogRVhQT1JUX1NZTUJPTChmdHJhY2VfbGlrZWx5X3VwZGF0ZSk7CiAKLXN0cnVjdCBmdHJhY2VfcG9pbnRlciB7Ci0Jdm9pZAkJKnN0YXJ0OwotCXZvaWQJCSpzdG9wOwotCWludAkJaGl0OwotfTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0b3BfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlW107CiAKLXN0YXRpYyB2b2lkICoKLXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQorc3RhdGljIGludCBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JY29uc3Qgc3RydWN0IGZ0cmFjZV9wb2ludGVyICpmID0gbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpwID0gdjsKLQotCSgqcG9zKSsrOwotCi0JaWYgKHYgPT0gKHZvaWQgKikxKQotCQlyZXR1cm4gZi0+c3RhcnQ7Ci0KLQkrK3A7Ci0KLQlpZiAoKHZvaWQgKilwID49ICh2b2lkICopZi0+c3RvcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIHZvaWQgKnRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKLXsKLQl2b2lkICp0ID0gKHZvaWQgKikxOwotCWxvZmZfdCBsID0gMDsKLQotCWZvciAoOyB0ICYmIGwgPCAqcG9zOyB0ID0gdF9uZXh0KG0sIHQsICZsKSkKLQkJOwotCi0JcmV0dXJuIHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHRfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCi17Ci19Ci0KLXN0YXRpYyBpbnQgdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQljb25zdCBzdHJ1Y3QgZnRyYWNlX3BvaW50ZXIgKmZwID0gbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpwID0gdjsKLQljb25zdCBjaGFyICpmOwotCWxvbmcgcGVyY2VudDsKLQotCWlmICh2ID09ICh2b2lkICopMSkgewotCQlpZiAoZnAtPmhpdCkKLQkJCXNlcV9wcmludGYobSwgIiAgIG1pc3MgICAgICBoaXQgICAgJSUgIik7Ci0JCWVsc2UKLQkJCXNlcV9wcmludGYobSwgIiBjb3JyZWN0IGluY29ycmVjdCAgJSUgIik7Ci0JCXNlcV9wcmludGYobSwgIiAgICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAiCisJc2VxX3ByaW50ZihtLCAiIGNvcnJlY3QgaW5jb3JyZWN0ICAlJSAiKTsKKwlzZXFfcHJpbnRmKG0sICIgICAgICAgRnVuY3Rpb24gICAgICAgICAgICAgICAgIgogCQkJICAgICAgIiAgRmlsZSAgICAgICAgICAgICAgTGluZVxuIgogCQkJICAgICAgIiAtLS0tLS0tIC0tLS0tLS0tLSAgLSAiCiAJCQkgICAgICAiICAgICAgIC0tLS0tLS0tICAgICAgICAgICAgICAgICIKIAkJCSAgICAgICIgIC0tLS0gICAgICAgICAgICAgIC0tLS1cbiIpOwotCQlyZXR1cm4gMDsKLQl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfaW5jb3JyZWN0X3BlcmNlbnQoc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqcCkKK3sKKwlsb25nIHBlcmNlbnQ7CisKKwlpZiAocC0+Y29ycmVjdCkgeworCQlwZXJjZW50ID0gcC0+aW5jb3JyZWN0ICogMTAwOworCQlwZXJjZW50IC89IHAtPmNvcnJlY3QgKyBwLT5pbmNvcnJlY3Q7CisJfSBlbHNlCisJCXBlcmNlbnQgPSBwLT5pbmNvcnJlY3QgPyAxMDAgOiAtMTsKKworCXJldHVybiBwZXJjZW50OworfQorCitzdGF0aWMgaW50IGJyYW5jaF9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKnAgPSB2OworCWNvbnN0IGNoYXIgKmY7CisJbG9uZyBwZXJjZW50OwogCiAJLyogT25seSBwcmludCB0aGUgZmlsZSwgbm90IHRoZSBwYXRoICovCiAJZiA9IHAtPmZpbGUgKyBzdHJsZW4ocC0+ZmlsZSk7CkBAIC0yNTIsMTEgKzI1Miw3IEBACiAJLyoKIAkgKiBUaGUgbWlzcyBpcyBvdmVybGF5ZWQgb24gY29ycmVjdCwgYW5kIGhpdCBvbiBpbmNvcnJlY3QuCiAJICovCi0JaWYgKHAtPmNvcnJlY3QpIHsKLQkJcGVyY2VudCA9IHAtPmluY29ycmVjdCAqIDEwMDsKLQkJcGVyY2VudCAvPSBwLT5jb3JyZWN0ICsgcC0+aW5jb3JyZWN0OwotCX0gZWxzZQotCQlwZXJjZW50ID0gcC0+aW5jb3JyZWN0ID8gMTAwIDogLTE7CisJcGVyY2VudCA9IGdldF9pbmNvcnJlY3RfcGVyY2VudChwKTsKIAogCXNlcV9wcmludGYobSwgIiU4bHUgJThsdSAiLCAgcC0+Y29ycmVjdCwgcC0+aW5jb3JyZWN0KTsKIAlpZiAocGVyY2VudCA8IDApCkBAIC0yNjcsNzYgKzI2MywxMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0cmFjaW5nX2xpa2VseV9zZXFfb3BzID0gewotCS5zdGFydAkJPSB0X3N0YXJ0LAotCS5uZXh0CQk9IHRfbmV4dCwKLQkuc3RvcAkJPSB0X3N0b3AsCi0JLnNob3cJCT0gdF9zaG93LAorc3RhdGljIHZvaWQgKmFubm90YXRlZF9icmFuY2hfc3RhdF9zdGFydCh2b2lkKQoreworCXJldHVybiBfX3N0YXJ0X2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZTsKK30KKworc3RhdGljIHZvaWQgKgorYW5ub3RhdGVkX2JyYW5jaF9zdGF0X25leHQodm9pZCAqdiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpwID0gdjsKKworCSsrcDsKKworCWlmICgodm9pZCAqKXAgPj0gKHZvaWQgKilfX3N0b3BfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgaW50IGFubm90YXRlZF9icmFuY2hfc3RhdF9jbXAodm9pZCAqcDEsIHZvaWQgKnAyKQoreworCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKmEgPSBwMTsKKwlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpiID0gcDI7CisKKwlsb25nIHBlcmNlbnRfYSwgcGVyY2VudF9iOworCisJcGVyY2VudF9hID0gZ2V0X2luY29ycmVjdF9wZXJjZW50KGEpOworCXBlcmNlbnRfYiA9IGdldF9pbmNvcnJlY3RfcGVyY2VudChiKTsKKworCWlmIChwZXJjZW50X2EgPCBwZXJjZW50X2IpCisJCXJldHVybiAtMTsKKwlpZiAocGVyY2VudF9hID4gcGVyY2VudF9iKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlcl9zdGF0IGFubm90YXRlZF9icmFuY2hfc3RhdHMgPSB7CisJLm5hbWUgPSAiYnJhbmNoX2Fubm90YXRlZCIsCisJLnN0YXRfc3RhcnQgPSBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfc3RhcnQsCisJLnN0YXRfbmV4dCA9IGFubm90YXRlZF9icmFuY2hfc3RhdF9uZXh0LAorCS5zdGF0X2NtcCA9IGFubm90YXRlZF9icmFuY2hfc3RhdF9jbXAsCisJLnN0YXRfaGVhZGVycyA9IGFubm90YXRlZF9icmFuY2hfc3RhdF9oZWFkZXJzLAorCS5zdGF0X3Nob3cgPSBicmFuY2hfc3RhdF9zaG93CiB9OwogCi1zdGF0aWMgaW50IHRyYWNpbmdfYnJhbmNoX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitfX2luaXQgc3RhdGljIGludCBpbml0X2Fubm90YXRlZF9icmFuY2hfc3RhdHModm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJnRyYWNpbmdfbGlrZWx5X3NlcV9vcHMpOworCXJldCA9IHJlZ2lzdGVyX3N0YXRfdHJhY2VyKCZhbm5vdGF0ZWRfYnJhbmNoX3N0YXRzKTsKIAlpZiAoIXJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSAodm9pZCAqKWlub2RlLT5pX3ByaXZhdGU7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciAiCisJCQkJICAgICJhbm5vdGF0ZWQgYnJhbmNoZXMgc3RhdHNcbiIpOworCQlyZXR1cm4gMTsKIAl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2JyYW5jaF9mb3BzID0gewotCS5vcGVuCQk9IHRyYWNpbmdfYnJhbmNoX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi19OworZnNfaW5pdGNhbGwoaW5pdF9hbm5vdGF0ZWRfYnJhbmNoX3N0YXRzKTsKIAogI2lmZGVmIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUworCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0YXJ0X2JyYW5jaF9wcm9maWxlW107CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0b3BfYnJhbmNoX3Byb2ZpbGVbXTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2VfcG9pbnRlciBmdHJhY2VfYnJhbmNoX3BvcyA9IHsKLQkuc3RhcnQJCQk9IF9fc3RhcnRfYnJhbmNoX3Byb2ZpbGUsCi0JLnN0b3AJCQk9IF9fc3RvcF9icmFuY2hfcHJvZmlsZSwKLQkuaGl0CQkJPSAxLAotfTsKLQotI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyAqLwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0YXJ0X2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZVtdOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZ0cmFjZV9wb2ludGVyIGZ0cmFjZV9hbm5vdGF0ZWRfYnJhbmNoX3BvcyA9IHsKLQkuc3RhcnQJCQk9IF9fc3RhcnRfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlLAotCS5zdG9wCQkJPSBfX3N0b3BfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgZnRyYWNlX2JyYW5jaF9pbml0KHZvaWQpCitzdGF0aWMgaW50IGFsbF9icmFuY2hfc3RhdF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKLQlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKLQotCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwotCi0JZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwcm9maWxlX2Fubm90YXRlZF9icmFuY2giLCAwNDQ0LCBkX3RyYWNlciwKLQkJCQkgICAgKHZvaWQgKikmZnRyYWNlX2Fubm90YXRlZF9icmFuY2hfcG9zLAotCQkJCSAgICAmdHJhY2luZ19icmFuY2hfZm9wcyk7Ci0JaWYgKCFlbnRyeSkKLQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKLQkJCSAgICIncHJvZmlsZV9hbm5vdGF0ZXRfYnJhbmNoJyBlbnRyeVxuIik7Ci0KLSNpZmRlZiBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMKLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInByb2ZpbGVfYnJhbmNoIiwgMDQ0NCwgZF90cmFjZXIsCi0JCQkJICAgICh2b2lkICopJmZ0cmFjZV9icmFuY2hfcG9zLAotCQkJCSAgICAmdHJhY2luZ19icmFuY2hfZm9wcyk7Ci0JaWYgKCFlbnRyeSkKLQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzIgotCQkJICAgIiAncHJvZmlsZV9icmFuY2gnIGVudHJ5XG4iKTsKLSNlbmRpZgotCisJc2VxX3ByaW50ZihtLCAiICAgbWlzcyAgICAgIGhpdCAgICAlJSAiKTsKKwlzZXFfcHJpbnRmKG0sICIgICAgICAgRnVuY3Rpb24gICAgICAgICAgICAgICAgIgorCQkJICAgICAgIiAgRmlsZSAgICAgICAgICAgICAgTGluZVxuIgorCQkJICAgICAgIiAtLS0tLS0tIC0tLS0tLS0tLSAgLSAiCisJCQkgICAgICAiICAgICAgIC0tLS0tLS0tICAgICAgICAgICAgICAgICIKKwkJCSAgICAgICIgIC0tLS0gICAgICAgICAgICAgIC0tLS1cbiIpOwogCXJldHVybiAwOwogfQogCi1kZXZpY2VfaW5pdGNhbGwoZnRyYWNlX2JyYW5jaF9pbml0KTsKK3N0YXRpYyB2b2lkICphbGxfYnJhbmNoX3N0YXRfc3RhcnQodm9pZCkKK3sKKwlyZXR1cm4gX19zdGFydF9icmFuY2hfcHJvZmlsZTsKK30KKworc3RhdGljIHZvaWQgKgorYWxsX2JyYW5jaF9zdGF0X25leHQodm9pZCAqdiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpwID0gdjsKKworCSsrcDsKKworCWlmICgodm9pZCAqKXAgPj0gKHZvaWQgKilfX3N0b3BfYnJhbmNoX3Byb2ZpbGUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX3N0YXQgYWxsX2JyYW5jaF9zdGF0cyA9IHsKKwkubmFtZSA9ICJicmFuY2hfYWxsIiwKKwkuc3RhdF9zdGFydCA9IGFsbF9icmFuY2hfc3RhdF9zdGFydCwKKwkuc3RhdF9uZXh0ID0gYWxsX2JyYW5jaF9zdGF0X25leHQsCisJLnN0YXRfaGVhZGVycyA9IGFsbF9icmFuY2hfc3RhdF9oZWFkZXJzLAorCS5zdGF0X3Nob3cgPSBicmFuY2hfc3RhdF9zaG93Cit9OworCitfX2luaXQgc3RhdGljIGludCBhbGxfYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9zdGF0X3RyYWNlcigmYWxsX2JyYW5jaF9zdGF0cyk7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyICIKKwkJCQkgICAgImFsbCBicmFuY2hlcyBzdGF0c1xuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK2ZzX2luaXRjYWxsKGFsbF9hbm5vdGF0ZWRfYnJhbmNoX3N0YXRzKTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4OGZkOAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogdHJhY2luZyBjbG9ja3MKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoKKyAqIEltcGxlbWVudHMgMyB0cmFjZSBjbG9jayB2YXJpYW50cywgd2l0aCBkaWZmZXJpbmcgc2NhbGFiaWxpdHkvcHJlY2lzaW9uCisgKiB0cmFkZW9mZnM6CisgKgorICogIC0gICBsb2NhbDogQ1BVLWxvY2FsIHRyYWNlIGNsb2NrCisgKiAgLSAgbWVkaXVtOiBzY2FsYWJsZSBnbG9iYWwgY2xvY2sgd2l0aCBzb21lIGppdHRlcgorICogIC0gIGdsb2JhbDogZ2xvYmFsbHkgbW9ub3RvbmljLCBzZXJpYWxpemVkIGNsb2NrCisgKgorICogVHJhY2VyIHBsdWdpbnMgd2lsbCBjaG9zZSBhIGRlZmF1bHQgZnJvbSB0aGVzZSBjbG9ja3MuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2VfY2xvY2suaD4KKworLyoKKyAqIHRyYWNlX2Nsb2NrX2xvY2FsKCk6IHRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29oZXJlbnQgdHJhY2luZyBjbG9jay4KKyAqCisgKiBVc2VmdWwgZm9yIHRyYWNpbmcgdGhhdCBkb2VzIG5vdCBjcm9zcyB0byBvdGhlciBDUFVzIG5vcgorICogZG9lcyBpdCBnbyB0aHJvdWdoIGlkbGUgZXZlbnRzLgorICovCit1NjQgbm90cmFjZSB0cmFjZV9jbG9ja19sb2NhbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IGNsb2NrOworCisJLyoKKwkgKiBzY2hlZF9jbG9jaygpIGlzIGFuIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRlZCwgZmFzdCwgc2NhbGFibGUsCisJICogbG9ja2xlc3MgY2xvY2suIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGNvaGVyZW50IGFjcm9zcworCSAqIENQVXMsIG5vciBhY3Jvc3MgQ1BVIGlkbGUgZXZlbnRzLgorCSAqLworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY2xvY2sgPSBzY2hlZF9jbG9jaygpOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gY2xvY2s7Cit9CisKKy8qCisgKiB0cmFjZV9jbG9jaygpOiAnaW5iZXR3ZWVuJyB0cmFjZSBjbG9jay4gTm90IGNvbXBsZXRlbHkgc2VyaWFsaXplZCwKKyAqIGJ1dCBub3QgY29tcGxldGVseSBpbmNvcnJlY3Qgd2hlbiBjcm9zc2luZyBDUFVzIGVpdGhlci4KKyAqCisgKiBUaGlzIGlzIGJhc2VkIG9uIGNwdV9jbG9jaygpLCB3aGljaCB3aWxsIGFsbG93IGF0IG1vc3QgfjEgamlmZnkgb2YKKyAqIGppdHRlciBiZXR3ZWVuIENQVXMuIFNvIGl0J3MgYSBwcmV0dHkgc2NhbGFibGUgY2xvY2ssIGJ1dCB0aGVyZQorICogY2FuIGJlIG9mZnNldHMgaW4gdGhlIHRyYWNlIGRhdGEuCisgKi8KK3U2NCBub3RyYWNlIHRyYWNlX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKK30KKworCisvKgorICogdHJhY2VfY2xvY2tfZ2xvYmFsKCk6IHNwZWNpYWwgZ2xvYmFsbHkgY29oZXJlbnQgdHJhY2UgY2xvY2sKKyAqCisgKiBJdCBoYXMgaGlnaGVyIG92ZXJoZWFkIHRoYW4gdGhlIG90aGVyIHRyYWNlIGNsb2NrcyBidXQgaXMgc3RpbGwKKyAqIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBmYXN0ZXIgdGhhbiBHVE9EIGRlcml2ZWQgaGFyZHdhcmUgY2xvY2tzLgorICoKKyAqIFVzZWQgYnkgcGx1Z2lucyB0aGF0IG5lZWQgZ2xvYmFsbHkgY29oZXJlbnQgdGltZXN0YW1wcy4KKyAqLworCitzdGF0aWMgdTY0IHByZXZfdHJhY2VfY2xvY2tfdGltZTsKKworc3RhdGljIHJhd19zcGlubG9ja190IHRyYWNlX2Nsb2NrX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9CisJKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwordTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfZ2xvYmFsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdGhpc19jcHU7CisJdTY0IG5vdzsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl0aGlzX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJbm93ID0gY3B1X2Nsb2NrKHRoaXNfY3B1KTsKKwkvKgorCSAqIElmIGluIGFuIE5NSSBjb250ZXh0IHRoZW4gZG9udCByaXNrIGxvY2t1cHMgYW5kIHJldHVybiB0aGUKKwkgKiBjcHVfY2xvY2soKSB0aW1lOgorCSAqLworCWlmICh1bmxpa2VseShpbl9ubWkoKSkpCisJCWdvdG8gb3V0OworCisJX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9jbG9ja19sb2NrKTsKKworCS8qCisJICogVE9ETzogaWYgdGhpcyBoYXBwZW5zIG9mdGVuIHRoZW4gbWF5YmUgd2Ugc2hvdWxkIHJlc2V0CisJICogbXlfc2NkLT5jbG9jayB0byBwcmV2X3RyYWNlX2Nsb2NrX3RpbWUrMSwgdG8gbWFrZSBzdXJlCisJICogd2Ugc3RhcnQgdGlja2luZyB3aXRoIHRoZSBsb2NhbCBjbG9jayBmcm9tIG5vdyBvbj8KKwkgKi8KKwlpZiAoKHM2NCkobm93IC0gcHJldl90cmFjZV9jbG9ja190aW1lKSA8IDApCisJCW5vdyA9IHByZXZfdHJhY2VfY2xvY2tfdGltZSArIDE7CisKKwlwcmV2X3RyYWNlX2Nsb2NrX3RpbWUgPSBub3c7CisKKwlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfY2xvY2tfbG9jayk7CisKKyBvdXQ6CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiBub3c7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmNiYTk5Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtMCwwICsxLDMxIEBACisvKgorICogdHJhY2UgZXZlbnQgYmFzZWQgcGVyZiBjb3VudGVyIHByb2ZpbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0IEluYywgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKgorICovCisKKyNpbmNsdWRlICJ0cmFjZS5oIgorCitpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlKGludCBldmVudF9pZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50OworCisJZm9yX2VhY2hfZXZlbnQoZXZlbnQpIHsKKwkJaWYgKGV2ZW50LT5pZCA9PSBldmVudF9pZCkKKwkJCXJldHVybiBldmVudC0+cHJvZmlsZV9lbmFibGUoZXZlbnQpOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoaW50IGV2ZW50X2lkKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnQ7CisKKwlmb3JfZWFjaF9ldmVudChldmVudCkgeworCQlpZiAoZXZlbnQtPmlkID09IGV2ZW50X2lkKQorCQkJcmV0dXJuIGV2ZW50LT5wcm9maWxlX2Rpc2FibGUoZXZlbnQpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmggYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDc4YmVlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmgKQEAgLTAsMCArMSwxNzMgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNCWZ0cmFjZQorCisvKgorICogV2UgY2hlYXQgYW5kIHVzZSB0aGUgcHJvdG8gdHlwZSBmaWVsZCBhcyB0aGUgSUQKKyAqIGFuZCBhcmdzIGFzIHRoZSBlbnRyeSB0eXBlIChtaW51cyAnc3RydWN0JykKKyAqLworVFJBQ0VfRVZFTlRfRk9STUFUKGZ1bmN0aW9uLCBUUkFDRV9GTiwgZnRyYWNlX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBpcCwgaXApCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHBhcmVudF9pcCwgcGFyZW50X2lwKQorCSksCisJVFBfUkFXX0ZNVCgiICVseCA8LS0gJWx4IikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChmdW5jZ3JhcGhfZW50cnksIFRSQUNFX0dSQVBIX0VOVCwKKwkJICAgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgZ3JhcGhfZW50LmZ1bmMsIGZ1bmMpCisJCVRSQUNFX0ZJRUxEKGludCwgZ3JhcGhfZW50LmRlcHRoLCBkZXB0aCkKKwkpLAorCVRQX1JBV19GTVQoIi0tPiAlbHggKCVkKSIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoZnVuY2dyYXBoX2V4aXQsIFRSQUNFX0dSQVBIX1JFVCwKKwkJICAgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgcmV0LmZ1bmMsIGZ1bmMpCisJCVRSQUNFX0ZJRUxEKGludCwgcmV0LmRlcHRoLCBkZXB0aCkKKwkpLAorCVRQX1JBV19GTVQoIjwtLSAlbHggKCVkKSIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQod2FrZXVwLCBUUkFDRV9XQUtFLCBjdHhfc3dpdGNoX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIHByZXZfcGlkLCBwcmV2X3BpZCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgcHJldl9wcmlvLCBwcmV2X3ByaW8pCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZXZfc3RhdGUsIHByZXZfc3RhdGUpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgbmV4dF9waWQsIG5leHRfcGlkKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBuZXh0X3ByaW8sIG5leHRfcHJpbykKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgbmV4dF9zdGF0ZSwgbmV4dF9zdGF0ZSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBuZXh0X2NwdSwgbmV4dF9jcHUpCisJKSwKKwlUUF9SQVdfRk1UKCIldToldToldSAgPT0rICV1OiV1OiV1IFslMDN1XSIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoY29udGV4dF9zd2l0Y2gsIFRSQUNFX0NUWCwgY3R4X3N3aXRjaF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBwcmV2X3BpZCwgcHJldl9waWQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZXZfcHJpbywgcHJldl9wcmlvKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmV2X3N0YXRlLCBwcmV2X3N0YXRlKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIG5leHRfcGlkLCBuZXh0X3BpZCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgbmV4dF9wcmlvLCBuZXh0X3ByaW8pCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIG5leHRfc3RhdGUsIG5leHRfc3RhdGUpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgbmV4dF9jcHUsIG5leHRfY3B1KQorCSksCisJVFBfUkFXX0ZNVCgiJXU6JXU6JXUgID09KyAldToldToldSBbJTAzdV0iKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKHNwZWNpYWwsIFRSQUNFX1NQRUNJQUwsIHNwZWNpYWxfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZzEsIGFyZzEpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZzIsIGFyZzIpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZzMsIGFyZzMpCisJKSwKKwlUUF9SQVdfRk1UKCIoJTA4bHgpICglMDhseCkgKCUwOGx4KSIpCispOworCisvKgorICogU3RhY2stdHJhY2UgZW50cnk6CisgKi8KKworLyogI2RlZmluZSBGVFJBQ0VfU1RBQ0tfRU5UUklFUyAgIDggKi8KKworVFJBQ0VfRVZFTlRfRk9STUFUKGtlcm5lbF9zdGFjaywgVFJBQ0VfU1RBQ0ssIHN0YWNrX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbMF0sIHN0YWNrMCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzFdLCBzdGFjazEpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclsyXSwgc3RhY2syKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbM10sIHN0YWNrMykKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzRdLCBzdGFjazQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls1XSwgc3RhY2s1KQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbNl0sIHN0YWNrNikKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzddLCBzdGFjazcpCisJKSwKKwlUUF9SQVdfRk1UKCJcdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcbiIKKwkJICJcdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcbiIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQodXNlcl9zdGFjaywgVFJBQ0VfVVNFUl9TVEFDSywgdXNlcnN0YWNrX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbMF0sIHN0YWNrMCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzFdLCBzdGFjazEpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclsyXSwgc3RhY2syKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbM10sIHN0YWNrMykKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzRdLCBzdGFjazQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls1XSwgc3RhY2s1KQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbNl0sIHN0YWNrNikKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzddLCBzdGFjazcpCisJKSwKKwlUUF9SQVdfRk1UKCJcdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcbiIKKwkJICJcdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcbiIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoYnByaW50LCBUUkFDRV9CUFJJTlQsIGJwcmludF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgaXAsIGlwKQorCQlUUkFDRV9GSUVMRChjaGFyICosIGZtdCwgZm10KQorCQlUUkFDRV9GSUVMRF9aRVJPX0NIQVIoYnVmKQorCSksCisJVFBfUkFXX0ZNVCgiJTA4bHggKCVkKSBmbXQ6JXAgJXMiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKHByaW50LCBUUkFDRV9QUklOVCwgcHJpbnRfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBpcCkKKwkJVFJBQ0VfRklFTERfWkVST19DSEFSKGJ1ZikKKwkpLAorCVRQX1JBV19GTVQoIiUwOGx4ICglZCkgZm10OiVwICVzIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChicmFuY2gsIFRSQUNFX0JSQU5DSCwgdHJhY2VfYnJhbmNoLCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIGxpbmUsIGxpbmUpCisJCVRSQUNFX0ZJRUxEX1NQRUNJQUwoY2hhciBmdW5jW1RSQUNFX0ZVTkNfU0laRSsxXSwgZnVuYywgZnVuYykKKwkJVFJBQ0VfRklFTERfU1BFQ0lBTChjaGFyIGZpbGVbVFJBQ0VfRlVOQ19TSVpFKzFdLCBmaWxlLCBmaWxlKQorCQlUUkFDRV9GSUVMRChjaGFyLCBjb3JyZWN0LCBjb3JyZWN0KQorCSksCisJVFBfUkFXX0ZNVCgiJXU6JXM6JXMgKCV1KSIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoaHdfYnJhbmNoLCBUUkFDRV9IV19CUkFOQ0hFUywgaHdfYnJhbmNoX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1NjQsIGZyb20sIGZyb20pCisJCVRSQUNFX0ZJRUxEKHU2NCwgdG8sIHRvKQorCSksCisJVFBfUkFXX0ZNVCgiZnJvbTogJWxseCB0bzogJWxseCIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQocG93ZXIsIFRSQUNFX1BPV0VSLCB0cmFjZV9wb3dlciwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQoa3RpbWVfdCwgc3RhdGVfZGF0YS5zdGFtcCwgc3RhbXApCisJCVRSQUNFX0ZJRUxEKGt0aW1lX3QsIHN0YXRlX2RhdGEuZW5kLCBlbmQpCisJCVRSQUNFX0ZJRUxEKGludCwgc3RhdGVfZGF0YS50eXBlLCB0eXBlKQorCQlUUkFDRV9GSUVMRChpbnQsIHN0YXRlX2RhdGEuc3RhdGUsIHN0YXRlKQorCSksCisJVFBfUkFXX0ZNVCgiJWxseC0+JWxseCB0eXBlOiV1IHN0YXRlOiV1IikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChrbWVtX2FsbG9jLCBUUkFDRV9LTUVNX0FMTE9DLCBrbWVtdHJhY2VfYWxsb2NfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKGVudW0ga21lbXRyYWNlX3R5cGVfaWQsIHR5cGVfaWQsIHR5cGVfaWQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxfc2l0ZSwgY2FsbF9zaXRlKQorCQlUUkFDRV9GSUVMRChjb25zdCB2b2lkICosIHB0ciwgcHRyKQorCQlUUkFDRV9GSUVMRChzaXplX3QsIGJ5dGVzX3JlcSwgYnl0ZXNfcmVxKQorCQlUUkFDRV9GSUVMRChzaXplX3QsIGJ5dGVzX2FsbG9jLCBieXRlc19hbGxvYykKKwkJVFJBQ0VfRklFTEQoZ2ZwX3QsIGdmcF9mbGFncywgZ2ZwX2ZsYWdzKQorCQlUUkFDRV9GSUVMRChpbnQsIG5vZGUsIG5vZGUpCisJKSwKKwlUUF9SQVdfRk1UKCJ0eXBlOiV1IGNhbGxfc2l0ZTolbHggcHRyOiVwIHJlcTolbHUgYWxsb2M6JWx1IgorCQkgIiBmbGFnczoleCBub2RlOiVkIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChrbWVtX2ZyZWUsIFRSQUNFX0tNRU1fRlJFRSwga21lbXRyYWNlX2ZyZWVfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKGVudW0ga21lbXRyYWNlX3R5cGVfaWQsIHR5cGVfaWQsIHR5cGVfaWQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxfc2l0ZSwgY2FsbF9zaXRlKQorCQlUUkFDRV9GSUVMRChjb25zdCB2b2lkICosIHB0ciwgcHRyKQorCSksCisJVFBfUkFXX0ZNVCgidHlwZToldSBjYWxsX3NpdGU6JWx4IHB0cjolcCIpCispOworCisjdW5kZWYgVFJBQ0VfU1lTVEVNCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlYzRkMgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMCwwICsxLDgyNCBAQAorLyoKKyAqIGV2ZW50IHRyYWNlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0IEluYywgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKgorICogIC0gQWRkZWQgZm9ybWF0IG91dHB1dCBvZiBmaWVsZHMgb2YgdGhlIHRyYWNlIHBvaW50LgorICogICAgVGhpcyB3YXMgYmFzZWQgb2ZmIG9mIHdvcmsgYnkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworI2RlZmluZSBUUkFDRV9TWVNURU0gIlRSQUNFX1NZU1RFTSIKKworc3RhdGljIERFRklORV9NVVRFWChldmVudF9tdXRleCk7CisKK2ludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjaGFyICp0eXBlLAorCQkgICAgICAgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQ7CisKKwlmaWVsZCA9IGt6YWxsb2Moc2l6ZW9mKCpmaWVsZCksIEdGUF9LRVJORUwpOworCWlmICghZmllbGQpCisJCWdvdG8gZXJyOworCisJZmllbGQtPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOworCWlmICghZmllbGQtPm5hbWUpCisJCWdvdG8gZXJyOworCisJZmllbGQtPnR5cGUgPSBrc3RyZHVwKHR5cGUsIEdGUF9LRVJORUwpOworCWlmICghZmllbGQtPnR5cGUpCisJCWdvdG8gZXJyOworCisJZmllbGQtPm9mZnNldCA9IG9mZnNldDsKKwlmaWVsZC0+c2l6ZSA9IHNpemU7CisJbGlzdF9hZGQoJmZpZWxkLT5saW5rLCAmY2FsbC0+ZmllbGRzKTsKKworCXJldHVybiAwOworCitlcnI6CisJaWYgKGZpZWxkKSB7CisJCWtmcmVlKGZpZWxkLT5uYW1lKTsKKwkJa2ZyZWUoZmllbGQtPnR5cGUpOworCX0KKwlrZnJlZShmaWVsZCk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX2NsZWFyX2V2ZW50cyh2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICh2b2lkICopX19zdGFydF9mdHJhY2VfZXZlbnRzOworCisKKwl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpY2FsbCA8ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9mdHJhY2VfZXZlbnRzKSB7CisKKwkJaWYgKGNhbGwtPmVuYWJsZWQpIHsKKwkJCWNhbGwtPmVuYWJsZWQgPSAwOworCQkJY2FsbC0+dW5yZWdmdW5jKCk7CisJCX0KKwkJY2FsbCsrOworCX0KK30KKworc3RhdGljIHZvaWQgZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCQkJaW50IGVuYWJsZSkKK3sKKworCXN3aXRjaCAoZW5hYmxlKSB7CisJY2FzZSAwOgorCQlpZiAoY2FsbC0+ZW5hYmxlZCkgeworCQkJY2FsbC0+ZW5hYmxlZCA9IDA7CisJCQljYWxsLT51bnJlZ2Z1bmMoKTsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CisJCWlmICghY2FsbC0+ZW5hYmxlZCkgeworCQkJY2FsbC0+ZW5hYmxlZCA9IDE7CisJCQljYWxsLT5yZWdmdW5jKCk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGZ0cmFjZV9zZXRfY2xyX2V2ZW50KGNoYXIgKmJ1ZiwgaW50IHNldCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CisJY2hhciAqZXZlbnQgPSBOVUxMLCAqc3ViID0gTlVMTCwgKm1hdGNoOworCWludCByZXQgPSAtRUlOVkFMOworCisJLyoKKwkgKiBUaGUgYnVmIGZvcm1hdCBjYW4gYmUgPHN1YnN5c3RlbT46PGV2ZW50LW5hbWU+CisJICogICo6PGV2ZW50LW5hbWU+IG1lYW5zIGFueSBldmVudCBieSB0aGF0IG5hbWUuCisJICogIDo8ZXZlbnQtbmFtZT4gaXMgdGhlIHNhbWUuCisJICoKKwkgKiAgPHN1YnN5c3RlbT46KiBtZWFucyBhbGwgZXZlbnRzIGluIHRoYXQgc3Vic3lzdGVtCisJICogIDxzdWJzeXN0ZW0+OiBtZWFucyB0aGUgc2FtZS4KKwkgKgorCSAqICA8bmFtZT4gKG5vICc6JykgbWVhbnMgYWxsIGV2ZW50cyBpbiBhIHN1YnN5c3RlbSB3aXRoCisJICogIHRoZSBuYW1lIDxuYW1lPiBvciBhbnkgZXZlbnQgdGhhdCBtYXRjaGVzIDxuYW1lPgorCSAqLworCisJbWF0Y2ggPSBzdHJzZXAoJmJ1ZiwgIjoiKTsKKwlpZiAoYnVmKSB7CisJCXN1YiA9IG1hdGNoOworCQlldmVudCA9IGJ1ZjsKKwkJbWF0Y2ggPSBOVUxMOworCisJCWlmICghc3RybGVuKHN1YikgfHwgc3RyY21wKHN1YiwgIioiKSA9PSAwKQorCQkJc3ViID0gTlVMTDsKKwkJaWYgKCFzdHJsZW4oZXZlbnQpIHx8IHN0cmNtcChldmVudCwgIioiKSA9PSAwKQorCQkJZXZlbnQgPSBOVUxMOworCX0KKworCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKKwlmb3JfZWFjaF9ldmVudChjYWxsKSB7CisKKwkJaWYgKCFjYWxsLT5uYW1lIHx8ICFjYWxsLT5yZWdmdW5jKQorCQkJY29udGludWU7CisKKwkJaWYgKG1hdGNoICYmCisJCSAgICBzdHJjbXAobWF0Y2gsIGNhbGwtPm5hbWUpICE9IDAgJiYKKwkJICAgIHN0cmNtcChtYXRjaCwgY2FsbC0+c3lzdGVtKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHN1YiAmJiBzdHJjbXAoc3ViLCBjYWxsLT5zeXN0ZW0pICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAoZXZlbnQgJiYgc3RyY21wKGV2ZW50LCBjYWxsLT5uYW1lKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKGNhbGwsIHNldCk7CisKKwkJcmV0ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiAxMjggc2hvdWxkIGJlIG11Y2ggbW9yZSB0aGFuIGVub3VnaCAqLworI2RlZmluZSBFVkVOVF9CVUZfU0laRQkJMTI3CisKK3N0YXRpYyBzc2l6ZV90CitmdHJhY2VfZXZlbnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJc2l6ZV90IHJlYWQgPSAwOworCWludCBpLCBzZXQgPSAxOworCXNzaXplX3QgcmV0OworCWNoYXIgKmJ1ZjsKKwljaGFyIGNoOworCisJaWYgKCFjbnQgfHwgY250IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB0cmFjaW5nX3VwZGF0ZV9idWZmZXJzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBnZXRfdXNlcihjaCwgdWJ1ZisrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJlYWQrKzsKKwljbnQtLTsKKworCS8qIHNraXAgd2hpdGUgc3BhY2UgKi8KKwl3aGlsZSAoY250ICYmIGlzc3BhY2UoY2gpKSB7CisJCXJldCA9IGdldF91c2VyKGNoLCB1YnVmKyspOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcmVhZCsrOworCQljbnQtLTsKKwl9CisKKwkvKiBPbmx5IHdoaXRlIHNwYWNlIGZvdW5kPyAqLworCWlmIChpc3NwYWNlKGNoKSkgeworCQlmaWxlLT5mX3BvcyArPSByZWFkOworCQlyZXQgPSByZWFkOworCQlyZXR1cm4gcmV0OworCX0KKworCWJ1ZiA9IGttYWxsb2MoRVZFTlRfQlVGX1NJWkUrMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNudCA+IEVWRU5UX0JVRl9TSVpFKQorCQljbnQgPSBFVkVOVF9CVUZfU0laRTsKKworCWkgPSAwOworCXdoaWxlIChjbnQgJiYgIWlzc3BhY2UoY2gpKSB7CisJCWlmICghaSAmJiBjaCA9PSAnIScpCisJCQlzZXQgPSAwOworCQllbHNlCisJCQlidWZbaSsrXSA9IGNoOworCisJCXJldCA9IGdldF91c2VyKGNoLCB1YnVmKyspOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZnJlZTsKKwkJcmVhZCsrOworCQljbnQtLTsKKwl9CisJYnVmW2ldID0gMDsKKworCWZpbGUtPmZfcG9zICs9IHJlYWQ7CisKKwlyZXQgPSBmdHJhY2Vfc2V0X2Nscl9ldmVudChidWYsIHNldCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCXJldCA9IHJlYWQ7CisKKyBvdXRfZnJlZToKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgKgordF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKm5leHQgPSBjYWxsOworCisJKCpwb3MpKys7CisKKwlmb3IgKDs7KSB7CisJCWlmICgodW5zaWduZWQgbG9uZyljYWxsID49ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9mdHJhY2VfZXZlbnRzKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJLyoKKwkJICogVGhlIGZ0cmFjZSBzdWJzeXN0ZW0gaXMgZm9yIHNob3dpbmcgZm9ybWF0cyBvbmx5LgorCQkgKiBUaGV5IGNhbiBub3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCB2aWEgdGhlIGV2ZW50IGZpbGVzLgorCQkgKi8KKwkJaWYgKGNhbGwtPnJlZ2Z1bmMpCisJCQlicmVhazsKKworCQljYWxsKys7CisJCW5leHQgPSBjYWxsOworCX0KKworCW0tPnByaXZhdGUgPSArK25leHQ7CisKKwlyZXR1cm4gY2FsbDsKK30KKworc3RhdGljIHZvaWQgKnRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gdF9uZXh0KG0sIE5VTEwsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkICoKK3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IG0tPnByaXZhdGU7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpuZXh0OworCisJKCpwb3MpKys7CisKKyByZXRyeToKKwlpZiAoKHVuc2lnbmVkIGxvbmcpY2FsbCA+PSAodW5zaWduZWQgbG9uZylfX3N0b3BfZnRyYWNlX2V2ZW50cykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWNhbGwtPmVuYWJsZWQpIHsKKwkJY2FsbCsrOworCQlnb3RvIHJldHJ5OworCX0KKworCW5leHQgPSBjYWxsOworCW0tPnByaXZhdGUgPSArK25leHQ7CisKKwlyZXR1cm4gY2FsbDsKK30KKworc3RhdGljIHZvaWQgKnNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gc19uZXh0KG0sIE5VTEwsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSB2OworCisJaWYgKHN0cmNtcChjYWxsLT5zeXN0ZW0sIFRSQUNFX1NZU1RFTSkgIT0gMCkKKwkJc2VxX3ByaW50ZihtLCAiJXM6IiwgY2FsbC0+c3lzdGVtKTsKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgY2FsbC0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKK30KKworc3RhdGljIGludAorZnRyYWNlX2V2ZW50X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zICpzZXFfb3BzOworCisJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKKwkgICAgIShmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpKQorCQlmdHJhY2VfY2xlYXJfZXZlbnRzKCk7CisKKwlzZXFfb3BzID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCBzZXFfb3BzKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkJbS0+cHJpdmF0ZSA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK2V2ZW50X2VuYWJsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKworCWlmIChjYWxsLT5lbmFibGVkKQorCQlidWYgPSAiMVxuIjsKKwllbHNlCisJCWJ1ZiA9ICIwXG4iOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCAyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2V2ZW50X2VuYWJsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNjRdOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoY250ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZltjbnRdID0gMDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHJhY2luZ191cGRhdGVfYnVmZmVycygpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CisJCWZ0cmFjZV9ldmVudF9lbmFibGVfZGlzYWJsZShjYWxsLCB2YWwpOworCQltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqcHBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCisjdW5kZWYgRklFTEQKKyNkZWZpbmUgRklFTEQodHlwZSwgbmFtZSkJCQkJCQlcCisJI3R5cGUsICJjb21tb25fIiAjbmFtZSwgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgbmFtZSksCQlcCisJCXNpemVvZihmaWVsZC5uYW1lKQorCitzdGF0aWMgaW50IHRyYWNlX3dyaXRlX2hlYWRlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSBmaWVsZDsKKworCS8qIHN0cnVjdCB0cmFjZV9lbnRyeSAqLworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsCisJCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCisJCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCisJCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCisJCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCisJCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCisJCQkJIlxuIiwKKwkJCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCB0eXBlKSwKKwkJCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBmbGFncyksCisJCQkJRklFTEQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCksCisJCQkJRklFTEQoaW50LCBwaWQpLAorCQkJCUZJRUxEKGludCwgdGdpZCkpOworfQorCitzdGF0aWMgc3NpemVfdAorZXZlbnRfZm9ybWF0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHRyYWNlX3NlcSAqczsKKwljaGFyICpidWY7CisJaW50IHI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRyYWNlX3NlcV9pbml0KHMpOworCisJLyogSWYgYW55IG9mIHRoZSBmaXJzdCB3cml0ZXMgZmFpbCwgc28gd2lsbCB0aGUgc2hvd19mb3JtYXQuICovCisKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJuYW1lOiAlc1xuIiwgY2FsbC0+bmFtZSk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSUQ6ICVkXG4iLCBjYWxsLT5pZCk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiZm9ybWF0OlxuIik7CisJdHJhY2Vfd3JpdGVfaGVhZGVyKHMpOworCisJciA9IGNhbGwtPnNob3dfZm9ybWF0KHMpOworCWlmICghcikgeworCQkvKgorCQkgKiB1ZyEgIFRoZSBmb3JtYXQgb3V0cHV0IGlzIGJpZ2dlciB0aGFuIGEgUEFHRSEhCisJCSAqLworCQlidWYgPSAiRk9STUFUIFRPTyBCSUdcbiI7CisJCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsCisJCQkJCSAgICAgIGJ1Ziwgc3RybGVuKGJ1ZikpOworCQlnb3RvIG91dDsKKwl9CisKKwlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLAorCQkJCSAgICBzLT5idWZmZXIsIHMtPmxlbik7Cisgb3V0OgorCWtmcmVlKHMpOworCXJldHVybiByOworfQorCitzdGF0aWMgc3NpemVfdAorZXZlbnRfaWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHRyYWNlX3NlcSAqczsKKwlpbnQgcjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisKKwlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhY2Vfc2VxX2luaXQocyk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWRcbiIsIGNhbGwtPmlkKTsKKworCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsCisJCQkJICAgIHMtPmJ1ZmZlciwgcy0+bGVuKTsKKwlrZnJlZShzKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHNzaXplX3QKK2V2ZW50X2ZpbHRlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0cmFjZV9zZXEgKnM7CisJaW50IHI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRyYWNlX3NlcV9pbml0KHMpOworCisJZmlsdGVyX3ByaW50X3ByZWRzKGNhbGwtPnByZWRzLCBzKTsKKwlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBzLT5idWZmZXIsIHMtPmxlbik7CisKKwlrZnJlZShzKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgc3NpemVfdAorZXZlbnRfZmlsdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls2NF0sICpwYnVmID0gYnVmOworCXN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZDsKKwlpbnQgZXJyOworCisJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwcmVkID0ga3phbGxvYyhzaXplb2YoKnByZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByZWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gZmlsdGVyX3BhcnNlKCZwYnVmLCBwcmVkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmaWx0ZXJfZnJlZV9wcmVkKHByZWQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwcmVkLT5jbGVhcikgeworCQlmaWx0ZXJfZnJlZV9wcmVkcyhjYWxsKTsKKwkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKKwkJcmV0dXJuIGNudDsKKwl9CisKKwlpZiAoZmlsdGVyX2FkZF9wcmVkKGNhbGwsIHByZWQpKSB7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpwcG9zICs9IGNudDsKKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdWJzeXN0ZW1fZmlsdGVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0cmFjZV9zZXEgKnM7CisJaW50IHI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRyYWNlX3NlcV9pbml0KHMpOworCisJZmlsdGVyX3ByaW50X3ByZWRzKHN5c3RlbS0+cHJlZHMsIHMpOworCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIHMtPmJ1ZmZlciwgcy0+bGVuKTsKKworCWtmcmVlKHMpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdWJzeXN0ZW1fZmlsdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNjRdLCAqcGJ1ZiA9IGJ1ZjsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQ7CisJaW50IGVycjsKKworCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcHJlZCA9IGt6YWxsb2Moc2l6ZW9mKCpwcmVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmVkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IGZpbHRlcl9wYXJzZSgmcGJ1ZiwgcHJlZCk7CisJaWYgKGVyciA8IDApIHsKKwkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAocHJlZC0+Y2xlYXIpIHsKKwkJZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN5c3RlbSk7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CisJCXJldHVybiBjbnQ7CisJfQorCisJaWYgKGZpbHRlcl9hZGRfc3Vic3lzdGVtX3ByZWQoc3lzdGVtLCBwcmVkKSkgeworCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtKTsKKwkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnBwb3MgKz0gY250OworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X2V2ZW50X3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gdF9zdGFydCwKKwkubmV4dCA9IHRfbmV4dCwKKwkuc2hvdyA9IHRfc2hvdywKKwkuc3RvcCA9IHRfc3RvcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19zZXRfZXZlbnRfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBzX3N0YXJ0LAorCS5uZXh0ID0gc19uZXh0LAorCS5zaG93ID0gdF9zaG93LAorCS5zdG9wID0gdF9zdG9wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2F2YWlsX2ZvcHMgPSB7CisJLm9wZW4gPSBmdHJhY2VfZXZlbnRfc2VxX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2Vfc2V0X2V2ZW50X2ZvcHMgPSB7CisJLm9wZW4gPSBmdHJhY2VfZXZlbnRfc2VxX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkud3JpdGUgPSBmdHJhY2VfZXZlbnRfd3JpdGUsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2VuYWJsZV9mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSBldmVudF9lbmFibGVfcmVhZCwKKwkud3JpdGUgPSBldmVudF9lbmFibGVfd3JpdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IGV2ZW50X2Zvcm1hdF9yZWFkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2V2ZW50X2lkX2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IGV2ZW50X2lkX3JlYWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZXZlbnRfZmlsdGVyX2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IGV2ZW50X2ZpbHRlcl9yZWFkLAorCS53cml0ZSA9IGV2ZW50X2ZpbHRlcl93cml0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9zdWJzeXN0ZW1fZmlsdGVyX2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IHN1YnN5c3RlbV9maWx0ZXJfcmVhZCwKKwkud3JpdGUgPSBzdWJzeXN0ZW1fZmlsdGVyX3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV2ZW50X3RyYWNlX2V2ZW50c19kaXIodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisJc3RhdGljIHN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOworCisJaWYgKGRfZXZlbnRzKQorCQlyZXR1cm4gZF9ldmVudHM7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKwlpZiAoIWRfdHJhY2VyKQorCQlyZXR1cm4gTlVMTDsKKworCWRfZXZlbnRzID0gZGVidWdmc19jcmVhdGVfZGlyKCJldmVudHMiLCBkX3RyYWNlcik7CisJaWYgKCFkX2V2ZW50cykKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICInZXZlbnRzJyBkaXJlY3RvcnlcbiIpOworCisJcmV0dXJuIGRfZXZlbnRzOworfQorCitzdGF0aWMgTElTVF9IRUFEKGV2ZW50X3N1YnN5c3RlbXMpOworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqCitldmVudF9zdWJzeXN0ZW1fZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKmRfZXZlbnRzKQoreworCXN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbTsKKworCS8qIEZpcnN0IHNlZSBpZiB3ZSBkaWQgbm90IGFscmVhZHkgY3JlYXRlIHRoaXMgZGlyICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzeXN0ZW0sICZldmVudF9zdWJzeXN0ZW1zLCBsaXN0KSB7CisJCWlmIChzdHJjbXAoc3lzdGVtLT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIHN5c3RlbS0+ZW50cnk7CisJfQorCisJLyogbmVlZCB0byBjcmVhdGUgbmV3IGVudHJ5ICovCisJc3lzdGVtID0ga21hbGxvYyhzaXplb2YoKnN5c3RlbSksIEdGUF9LRVJORUwpOworCWlmICghc3lzdGVtKSB7CisJCXByX3dhcm5pbmcoIk5vIG1lbW9yeSB0byBjcmVhdGUgZXZlbnQgc3Vic3lzdGVtICVzXG4iLAorCQkJICAgbmFtZSk7CisJCXJldHVybiBkX2V2ZW50czsKKwl9CisKKwlzeXN0ZW0tPmVudHJ5ID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIGRfZXZlbnRzKTsKKwlpZiAoIXN5c3RlbS0+ZW50cnkpIHsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBldmVudCBzdWJzeXN0ZW0gJXNcbiIsCisJCQkgICBuYW1lKTsKKwkJa2ZyZWUoc3lzdGVtKTsKKwkJcmV0dXJuIGRfZXZlbnRzOworCX0KKworCXN5c3RlbS0+bmFtZSA9IG5hbWU7CisJbGlzdF9hZGQoJnN5c3RlbS0+bGlzdCwgJmV2ZW50X3N1YnN5c3RlbXMpOworCisJc3lzdGVtLT5wcmVkcyA9IE5VTEw7CisKKwlyZXR1cm4gc3lzdGVtLT5lbnRyeTsKK30KKworc3RhdGljIGludAorZXZlbnRfY3JlYXRlX2RpcihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHN0cnVjdCBkZW50cnkgKmRfZXZlbnRzKQoreworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCWludCByZXQ7CisKKwkvKgorCSAqIElmIHRoZSB0cmFjZSBwb2ludCBoZWFkZXIgZGlkIG5vdCBkZWZpbmUgVFJBQ0VfU1lTVEVNCisJICogdGhlbiB0aGUgc3lzdGVtIHdvdWxkIGJlIGNhbGxlZCAiVFJBQ0VfU1lTVEVNIi4KKwkgKi8KKwlpZiAoc3RyY21wKGNhbGwtPnN5c3RlbSwgIlRSQUNFX1NZU1RFTSIpICE9IDApCisJCWRfZXZlbnRzID0gZXZlbnRfc3Vic3lzdGVtX2RpcihjYWxsLT5zeXN0ZW0sIGRfZXZlbnRzKTsKKworCWlmIChjYWxsLT5yYXdfaW5pdCkgeworCQlyZXQgPSBjYWxsLT5yYXdfaW5pdCgpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgcG9pbnQiCisJCQkJICAgIiBldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWNhbGwtPmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihjYWxsLT5uYW1lLCBkX2V2ZW50cyk7CisJaWYgKCFjYWxsLT5kaXIpIHsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICInJXMnIGRpcmVjdG9yeVxuIiwgY2FsbC0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY2FsbC0+cmVnZnVuYykgeworCQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImVuYWJsZSIsIDA2NDQsIGNhbGwtPmRpciwgY2FsbCwKKwkJCQkJICAgICZmdHJhY2VfZW5hYmxlX2ZvcHMpOworCQlpZiAoIWVudHJ5KQorCQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCQkgICAiJyVzL2VuYWJsZScgZW50cnlcbiIsIGNhbGwtPm5hbWUpOworCX0KKworCWlmIChjYWxsLT5pZCkgeworCQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImlkIiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAorCQkJCSZmdHJhY2VfZXZlbnRfaWRfZm9wcyk7CisJCWlmICghZW50cnkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJyVzL2lkJyBlbnRyeVxuIiwKKwkJCQkJY2FsbC0+bmFtZSk7CisJfQorCisJaWYgKGNhbGwtPmRlZmluZV9maWVsZHMpIHsKKwkJcmV0ID0gY2FsbC0+ZGVmaW5lX2ZpZWxkcygpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgcG9pbnQiCisJCQkJICAgIiBldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImZpbHRlciIsIDA2NDQsIGNhbGwtPmRpciwgY2FsbCwKKwkJCQkJICAgICZmdHJhY2VfZXZlbnRfZmlsdGVyX2ZvcHMpOworCQlpZiAoIWVudHJ5KQorCQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCQkgICAiJyVzL2ZpbHRlcicgZW50cnlcbiIsIGNhbGwtPm5hbWUpOworCX0KKworCS8qIEEgdHJhY2UgbWF5IG5vdCB3YW50IHRvIGV4cG9ydCBpdHMgZm9ybWF0ICovCisJaWYgKCFjYWxsLT5zaG93X2Zvcm1hdCkKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImZvcm1hdCIsIDA0NDQsIGNhbGwtPmRpciwgY2FsbCwKKwkJCQkgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICInJXMvZm9ybWF0JyBlbnRyeVxuIiwgY2FsbC0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50czsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCWlmICghZF90cmFjZXIpCisJCXJldHVybiAwOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhdmFpbGFibGVfZXZlbnRzIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkJICAgICh2b2lkICopJnNob3dfZXZlbnRfc2VxX29wcywKKwkJCQkgICAgJmZ0cmFjZV9hdmFpbF9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidhdmFpbGFibGVfZXZlbnRzJyBlbnRyeVxuIik7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNldF9ldmVudCIsIDA2NDQsIGRfdHJhY2VyLAorCQkJCSAgICAodm9pZCAqKSZzaG93X3NldF9ldmVudF9zZXFfb3BzLAorCQkJCSAgICAmZnRyYWNlX3NldF9ldmVudF9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidzZXRfZXZlbnQnIGVudHJ5XG4iKTsKKworCWRfZXZlbnRzID0gZXZlbnRfdHJhY2VfZXZlbnRzX2RpcigpOworCWlmICghZF9ldmVudHMpCisJCXJldHVybiAwOworCisJZm9yX2VhY2hfZXZlbnQoY2FsbCkgeworCQkvKiBUaGUgbGlua2VyIG1heSBsZWF2ZSBibGFua3MgKi8KKwkJaWYgKCFjYWxsLT5uYW1lKQorCQkJY29udGludWU7CisJCWV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMpOworCX0KKworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoZXZlbnRfdHJhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZiZTQxCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIHRyYWNlX2V2ZW50c19maWx0ZXIgLSBnZW5lcmljIGV2ZW50IGZpbHRlcmluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKK3N0YXRpYyBpbnQgZmlsdGVyX3ByZWRfNjQoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCkKK3sKKwl1NjQgKmFkZHIgPSAodTY0ICopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwl1NjQgdmFsID0gKHU2NClwcmVkLT52YWw7CisJaW50IG1hdGNoOworCisJbWF0Y2ggPSAodmFsID09ICphZGRyKSBeIHByZWQtPm5vdDsKKworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcHJlZF8zMihzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQsIHZvaWQgKmV2ZW50KQoreworCXUzMiAqYWRkciA9ICh1MzIgKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOworCXUzMiB2YWwgPSAodTMyKXByZWQtPnZhbDsKKwlpbnQgbWF0Y2g7CisKKwltYXRjaCA9ICh2YWwgPT0gKmFkZHIpIF4gcHJlZC0+bm90OworCisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9wcmVkXzE2KHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQpCit7CisJdTE2ICphZGRyID0gKHUxNiAqKShldmVudCArIHByZWQtPm9mZnNldCk7CisJdTE2IHZhbCA9ICh1MTYpcHJlZC0+dmFsOworCWludCBtYXRjaDsKKworCW1hdGNoID0gKHZhbCA9PSAqYWRkcikgXiBwcmVkLT5ub3Q7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX3ByZWRfOChzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQsIHZvaWQgKmV2ZW50KQoreworCXU4ICphZGRyID0gKHU4ICopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwl1OCB2YWwgPSAodTgpcHJlZC0+dmFsOworCWludCBtYXRjaDsKKworCW1hdGNoID0gKHZhbCA9PSAqYWRkcikgXiBwcmVkLT5ub3Q7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX3ByZWRfc3RyaW5nKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQpCit7CisJY2hhciAqYWRkciA9IChjaGFyICopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwlpbnQgY21wLCBtYXRjaDsKKworCWNtcCA9IHN0cm5jbXAoYWRkciwgcHJlZC0+c3RyX3ZhbCwgcHJlZC0+c3RyX2xlbik7CisKKwltYXRjaCA9ICghY21wKSBeIHByZWQtPm5vdDsKKworCXJldHVybiBtYXRjaDsKK30KKworLyogcmV0dXJuIDEgaWYgZXZlbnQgbWF0Y2hlcywgMCBvdGhlcndpc2UgKGRpc2NhcmQpICovCitpbnQgZmlsdGVyX21hdGNoX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjKQoreworCWludCBpLCBtYXRjaGVkLCBhbmRfZmFpbGVkID0gMDsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTFRFUl9QUkVEOyBpKyspIHsKKwkJaWYgKGNhbGwtPnByZWRzW2ldKSB7CisJCQlwcmVkID0gY2FsbC0+cHJlZHNbaV07CisJCQlpZiAoYW5kX2ZhaWxlZCAmJiAhcHJlZC0+b3IpCisJCQkJY29udGludWU7CisJCQltYXRjaGVkID0gcHJlZC0+Zm4ocHJlZCwgcmVjKTsKKwkJCWlmICghbWF0Y2hlZCAmJiAhcHJlZC0+b3IpIHsKKwkJCQlhbmRfZmFpbGVkID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAobWF0Y2hlZCAmJiBwcmVkLT5vcikKKwkJCQlyZXR1cm4gMTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAoYW5kX2ZhaWxlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBmaWx0ZXJfcHJpbnRfcHJlZHMoc3RydWN0IGZpbHRlcl9wcmVkICoqcHJlZHMsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJY2hhciAqZmllbGRfbmFtZTsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQ7CisJaW50IGk7CisKKwlpZiAoIXByZWRzKSB7CisJCXRyYWNlX3NlcV9wcmludGYocywgIm5vbmVcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxURVJfUFJFRDsgaSsrKSB7CisJCWlmIChwcmVkc1tpXSkgeworCQkJcHJlZCA9IHByZWRzW2ldOworCQkJZmllbGRfbmFtZSA9IHByZWQtPmZpZWxkX25hbWU7CisJCQlpZiAoaSkKKwkJCQl0cmFjZV9zZXFfcHJpbnRmKHMsIHByZWQtPm9yID8gInx8ICIgOiAiJiYgIik7CisJCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyAiLCBmaWVsZF9uYW1lKTsKKwkJCXRyYWNlX3NlcV9wcmludGYocywgcHJlZC0+bm90ID8gIiE9ICIgOiAiPT0gIik7CisJCQlpZiAocHJlZC0+c3RyX3ZhbCkKKwkJCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlc1xuIiwgcHJlZC0+c3RyX3ZhbCk7CisJCQllbHNlCisJCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdVxuIiwgcHJlZC0+dmFsKTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICoKK2ZpbmRfZXZlbnRfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmaWVsZCwgJmNhbGwtPmZpZWxkcywgbGluaykgeworCQlpZiAoIXN0cmNtcChmaWVsZC0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gZmllbGQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZmlsdGVyX2ZyZWVfcHJlZChzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpCit7CisJaWYgKCFwcmVkKQorCQlyZXR1cm47CisKKwlrZnJlZShwcmVkLT5maWVsZF9uYW1lKTsKKwlrZnJlZShwcmVkLT5zdHJfdmFsKTsKKwlrZnJlZShwcmVkKTsKK30KKwordm9pZCBmaWx0ZXJfZnJlZV9wcmVkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJaW50IGk7CisKKwlpZiAoY2FsbC0+cHJlZHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxURVJfUFJFRDsgaSsrKQorCQkJZmlsdGVyX2ZyZWVfcHJlZChjYWxsLT5wcmVkc1tpXSk7CisJCWtmcmVlKGNhbGwtPnByZWRzKTsKKwkJY2FsbC0+cHJlZHMgPSBOVUxMOworCX0KK30KKwordm9pZCBmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsKKwlpbnQgaTsKKworCWlmIChzeXN0ZW0tPnByZWRzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykKKwkJCWZpbHRlcl9mcmVlX3ByZWQoc3lzdGVtLT5wcmVkc1tpXSk7CisJCWtmcmVlKHN5c3RlbS0+cHJlZHMpOworCQlzeXN0ZW0tPnByZWRzID0gTlVMTDsKKwl9CisKKwlldmVudHNfZm9yX2VhY2goY2FsbCkgeworCQlpZiAoIWNhbGwtPm5hbWUgfHwgIWNhbGwtPnJlZ2Z1bmMpCisJCQljb250aW51ZTsKKworCQlpZiAoIXN0cmNtcChjYWxsLT5zeXN0ZW0sIHN5c3RlbS0+bmFtZSkpCisJCQlmaWx0ZXJfZnJlZV9wcmVkcyhjYWxsKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19maWx0ZXJfYWRkX3ByZWQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpCit7CisJaW50IGk7CisKKwlpZiAoY2FsbC0+cHJlZHMgJiYgIXByZWQtPmNvbXBvdW5kKQorCQlmaWx0ZXJfZnJlZV9wcmVkcyhjYWxsKTsKKworCWlmICghY2FsbC0+cHJlZHMpIHsKKwkJY2FsbC0+cHJlZHMgPSBremFsbG9jKE1BWF9GSUxURVJfUFJFRCAqIHNpemVvZihwcmVkKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjYWxsLT5wcmVkcykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykgeworCQlpZiAoIWNhbGwtPnByZWRzW2ldKSB7CisJCQljYWxsLT5wcmVkc1tpXSA9IHByZWQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGlzX3N0cmluZ19maWVsZChjb25zdCBjaGFyICp0eXBlKQoreworCWlmIChzdHJjaHIodHlwZSwgJ1snKSAmJiBzdHJzdHIodHlwZSwgImNoYXIiKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZpbHRlcl9hZGRfcHJlZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKKworCWZpZWxkID0gZmluZF9ldmVudF9maWVsZChjYWxsLCBwcmVkLT5maWVsZF9uYW1lKTsKKwlpZiAoIWZpZWxkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByZWQtPm9mZnNldCA9IGZpZWxkLT5vZmZzZXQ7CisKKwlpZiAoaXNfc3RyaW5nX2ZpZWxkKGZpZWxkLT50eXBlKSkgeworCQlpZiAoIXByZWQtPnN0cl92YWwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcHJlZC0+Zm4gPSBmaWx0ZXJfcHJlZF9zdHJpbmc7CisJCXByZWQtPnN0cl9sZW4gPSBmaWVsZC0+c2l6ZTsKKwkJcmV0dXJuIF9fZmlsdGVyX2FkZF9wcmVkKGNhbGwsIHByZWQpOworCX0gZWxzZSB7CisJCWlmIChwcmVkLT5zdHJfdmFsKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmaWVsZC0+c2l6ZSkgeworCWNhc2UgODoKKwkJcHJlZC0+Zm4gPSBmaWx0ZXJfcHJlZF82NDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwcmVkLT5mbiA9IGZpbHRlcl9wcmVkXzMyOworCQlicmVhazsKKwljYXNlIDI6CisJCXByZWQtPmZuID0gZmlsdGVyX3ByZWRfMTY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJlZC0+Zm4gPSBmaWx0ZXJfcHJlZF84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gX19maWx0ZXJfYWRkX3ByZWQoY2FsbCwgcHJlZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX3ByZWQgKmNvcHlfcHJlZChzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpCit7CisJc3RydWN0IGZpbHRlcl9wcmVkICpuZXdfcHJlZCA9IGttYWxsb2Moc2l6ZW9mKCpwcmVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfcHJlZCkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1jcHkobmV3X3ByZWQsIHByZWQsIHNpemVvZigqcHJlZCkpOworCisJaWYgKHByZWQtPmZpZWxkX25hbWUpIHsKKwkJbmV3X3ByZWQtPmZpZWxkX25hbWUgPSBrc3RyZHVwKHByZWQtPmZpZWxkX25hbWUsIEdGUF9LRVJORUwpOworCQlpZiAoIW5ld19wcmVkLT5maWVsZF9uYW1lKSB7CisJCQlrZnJlZShuZXdfcHJlZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWlmIChwcmVkLT5zdHJfdmFsKSB7CisJCW5ld19wcmVkLT5zdHJfdmFsID0ga3N0cmR1cChwcmVkLT5zdHJfdmFsLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFuZXdfcHJlZC0+c3RyX3ZhbCkgeworCQkJZmlsdGVyX2ZyZWVfcHJlZChuZXdfcHJlZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBuZXdfcHJlZDsKK30KKworaW50IGZpbHRlcl9hZGRfc3Vic3lzdGVtX3ByZWQoc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtLAorCQkJICAgICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQgKmV2ZW50X3ByZWQ7CisJaW50IGk7CisKKwlpZiAoc3lzdGVtLT5wcmVkcyAmJiAhcHJlZC0+Y29tcG91bmQpCisJCWZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzeXN0ZW0pOworCisJaWYgKCFzeXN0ZW0tPnByZWRzKSB7CisJCXN5c3RlbS0+cHJlZHMgPSBremFsbG9jKE1BWF9GSUxURVJfUFJFRCAqIHNpemVvZihwcmVkKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghc3lzdGVtLT5wcmVkcykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykgeworCQlpZiAoIXN5c3RlbS0+cHJlZHNbaV0pIHsKKwkJCXN5c3RlbS0+cHJlZHNbaV0gPSBwcmVkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBNQVhfRklMVEVSX1BSRUQpCisJCXJldHVybiAtRUlOVkFMOworCisJZXZlbnRzX2Zvcl9lYWNoKGNhbGwpIHsKKwkJaW50IGVycjsKKworCQlpZiAoIWNhbGwtPm5hbWUgfHwgIWNhbGwtPnJlZ2Z1bmMpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RyY21wKGNhbGwtPnN5c3RlbSwgc3lzdGVtLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmluZF9ldmVudF9maWVsZChjYWxsLCBwcmVkLT5maWVsZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWV2ZW50X3ByZWQgPSBjb3B5X3ByZWQocHJlZCk7CisJCWlmICghZXZlbnRfcHJlZCkKKwkJCWdvdG8gb29tOworCisJCWVyciA9IGZpbHRlcl9hZGRfcHJlZChjYWxsLCBldmVudF9wcmVkKTsKKwkJaWYgKGVycikKKwkJCWZpbHRlcl9mcmVlX3ByZWQoZXZlbnRfcHJlZCk7CisJCWlmIChlcnIgPT0gLUVOT01FTSkKKwkJCWdvdG8gb29tOworCX0KKworCXJldHVybiAwOworCitvb206CisJc3lzdGVtLT5wcmVkc1tpXSA9IE5VTEw7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK2ludCBmaWx0ZXJfcGFyc2UoY2hhciAqKnBidWYsIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwljaGFyICp0bXAsICp0b2ssICp2YWxfc3RyID0gTlVMTDsKKwlpbnQgdG9rX24gPSAwOworCisJLyogZmllbGQgPT0vIT0gbnVtYmVyLCBvci9hbmQgZmllbGQgPT0vIT0gbnVtYmVyLCBudW1iZXIgKi8KKwl3aGlsZSAoKHRvayA9IHN0cnNlcChwYnVmLCAiIFxuIikpKSB7CisJCWlmICh0b2tfbiA9PSAwKSB7CisJCQlpZiAoIXN0cmNtcCh0b2ssICIwIikpIHsKKwkJCQlwcmVkLT5jbGVhciA9IDE7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rLCAiJiYiKSkgeworCQkJCXByZWQtPm9yID0gMDsKKwkJCQlwcmVkLT5jb21wb3VuZCA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rLCAifHwiKSkgeworCQkJCXByZWQtPm9yID0gMTsKKwkJCQlwcmVkLT5jb21wb3VuZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlwcmVkLT5maWVsZF9uYW1lID0gdG9rOworCQkJdG9rX24gPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRva19uID09IDEpIHsKKwkJCWlmICghcHJlZC0+ZmllbGRfbmFtZSkKKwkJCQlwcmVkLT5maWVsZF9uYW1lID0gdG9rOworCQkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICIhPSIpKQorCQkJCXByZWQtPm5vdCA9IDE7CisJCQllbHNlIGlmICghc3RyY21wKHRvaywgIj09IikpCisJCQkJcHJlZC0+bm90ID0gMDsKKwkJCWVsc2UgeworCQkJCXByZWQtPmZpZWxkX25hbWUgPSBOVUxMOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJdG9rX24gPSAyOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRva19uID09IDIpIHsKKwkJCWlmIChwcmVkLT5jb21wb3VuZCkgeworCQkJCWlmICghc3RyY21wKHRvaywgIiE9IikpCisJCQkJCXByZWQtPm5vdCA9IDE7CisJCQkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICI9PSIpKQorCQkJCQlwcmVkLT5ub3QgPSAwOworCQkJCWVsc2UgeworCQkJCQlwcmVkLT5maWVsZF9uYW1lID0gTlVMTDsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl2YWxfc3RyID0gdG9rOworCQkJCWJyZWFrOyAvKiBkb25lICovCisJCQl9CisJCQl0b2tfbiA9IDM7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodG9rX24gPT0gMykgeworCQkJdmFsX3N0ciA9IHRvazsKKwkJCWJyZWFrOyAvKiBkb25lICovCisJCX0KKwl9CisKKwlwcmVkLT5maWVsZF9uYW1lID0ga3N0cmR1cChwcmVkLT5maWVsZF9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByZWQtPmZpZWxkX25hbWUpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJlZC0+dmFsID0gc2ltcGxlX3N0cnRvdWxsKHZhbF9zdHIsICZ0bXAsIDEwKTsKKwlpZiAodG1wID09IHZhbF9zdHIpIHsKKwkJcHJlZC0+c3RyX3ZhbCA9IGtzdHJkdXAodmFsX3N0ciwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJlZC0+c3RyX3ZhbCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMS5oIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5ODVmOQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBTdGFnZSAxIG9mIHRoZSB0cmFjZSBldmVudHMuCisgKgorICogT3ZlcnJpZGUgdGhlIG1hY3JvcyBpbiA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4gdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICoKKyAqIHN0cnVjdCBmdHJhY2VfcmF3XzxjYWxsPiB7CisgKglzdHJ1Y3QgdHJhY2VfZW50cnkJCWVudDsKKyAqCTx0eXBlPgkJCQk8aXRlbT47CisgKgk8dHlwZTI+CQkJCTxpdGVtMj5bPGxlbj5dOworICoJWy4uLl0KKyAqIH07CisgKgorICogVGhlIDx0eXBlPiA8aXRlbT4gaXMgY3JlYXRlZCBieSB0aGUgX19maWVsZCh0eXBlLCBpdGVtKSBtYWNybyBvcgorICogdGhlIF9fYXJyYXkodHlwZTIsIGl0ZW0yLCBsZW4pIG1hY3JvLgorICogV2Ugc2ltcGx5IGRvICJ0eXBlIGl0ZW07IiwgYW5kIHRoYXQgd2lsbCBjcmVhdGUgdGhlIGZpZWxkcworICogaW4gdGhlIHN0cnVjdHVyZS4KKyAqLworCisjdW5kZWYgVFJBQ0VfRk9STUFUCisjZGVmaW5lIFRSQUNFX0ZPUk1BVChjYWxsLCBwcm90bywgYXJncywgZm10KQorCisjdW5kZWYgX19hcnJheQorI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJdHlwZQlpdGVtW2xlbl07CisKKyN1bmRlZiBfX2ZpZWxkCisjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCXR5cGUJaXRlbTsKKworI3VuZGVmIFRQX1NUUlVDVF9fZW50cnkKKyNkZWZpbmUgVFBfU1RSVUNUX19lbnRyeShhcmdzLi4uKSBhcmdzCisKKyN1bmRlZiBUUkFDRV9FVkVOVAorI2RlZmluZSBUUkFDRV9FVkVOVChuYW1lLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAorCXN0cnVjdCBmdHJhY2VfcmF3XyMjbmFtZSB7CQkJCVwKKwkJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsJCQlcCisJCXRzdHJ1Y3QJCQkJCQlcCisJfTsJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNuYW1lCisKKyNpbmNsdWRlIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8yLmggYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDc0M2Y3Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8yLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBTdGFnZSAyIG9mIHRoZSB0cmFjZSBldmVudHMuCisgKgorICogT3ZlcnJpZGUgdGhlIG1hY3JvcyBpbiA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4gdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICoKKyAqIGVudW0gcHJpbnRfbGluZV90CisgKiBmdHJhY2VfcmF3X291dHB1dF88Y2FsbD4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCisgKiB7CisgKglzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKyAqCXN0cnVjdCBmdHJhY2VfcmF3XzxjYWxsPiAqZmllbGQ7IDwtLSBkZWZpbmVkIGluIHN0YWdlIDEKKyAqCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CisgKglpbnQgcmV0OworICoKKyAqCWVudHJ5ID0gaXRlci0+ZW50OworICoKKyAqCWlmIChlbnRyeS0+dHlwZSAhPSBldmVudF88Y2FsbD4uaWQpIHsKKyAqCQlXQVJOX09OX09OQ0UoMSk7CisgKgkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOworICoJfQorICoKKyAqCWZpZWxkID0gKHR5cGVvZihmaWVsZCkpZW50cnk7CisgKgorICoJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCA8VFBfcHJpbnRrPiAiXG4iKTsKKyAqCWlmICghcmV0KQorICoJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKyAqCisgKglyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworICogfQorICoKKyAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIHRvIHByaW50IHRoZSByYXcgZXZlbnQgdG8gdGhlIHRyYWNlCisgKiBvdXRwdXQgZm9ybWF0LiBOb3RlLCB0aGlzIGlzIG5vdCBuZWVkZWQgaWYgdGhlIGRhdGEgaXMgcmVhZAorICogaW4gYmluYXJ5LgorICovCisKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgZmllbGQKKworI3VuZGVmIFRQX3ByaW50aworI2RlZmluZSBUUF9wcmludGsoZm10LCBhcmdzLi4uKSBmbXQgIlxuIiwgYXJncworCisjdW5kZWYgVFJBQ0VfRVZFTlQKKyNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCQlcCitlbnVtIHByaW50X2xpbmVfdAkJCQkJCQlcCitmdHJhY2VfcmF3X291dHB1dF8jI2NhbGwoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CQkJCVwKKwlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmZpZWxkOwkJCQlcCisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsJCQkJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJZW50cnkgPSBpdGVyLT5lbnQ7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChlbnRyeS0+dHlwZSAhPSBldmVudF8jI2NhbGwuaWQpIHsJCQkJXAorCQlXQVJOX09OX09OQ0UoMSk7CQkJCQlcCisJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlmaWVsZCA9ICh0eXBlb2YoZmllbGQpKWVudHJ5OwkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgI2NhbGwgIjogIiBwcmludCk7CQkJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CQkJCQlcCit9CisJCisjaW5jbHVkZSA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4KKworLyoKKyAqIFNldHVwIHRoZSBzaG93aW5nIGZvcm1hdCBvZiB0cmFjZSBwb2ludC4KKyAqCisgKiBpbnQKKyAqIGZ0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCisgKiB7CisgKglzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CisgKglpbnQgcmV0OworICoKKyAqCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgI3R5cGUgIiAiICNpdGVtICI7IgorICoJCQkgICAgICAgIiBvZmZzZXQ6JXU7IHNpemU6JXU7XG4iLAorICoJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsLCBpdGVtKSwKKyAqCQkJICAgICAgIHNpemVvZihmaWVsZC50eXBlKSk7CisgKgorICogfQorICovCisKKyN1bmRlZiBUUF9TVFJVQ1RfX2VudHJ5CisjZGVmaW5lIFRQX1NUUlVDVF9fZW50cnkoYXJncy4uLikgYXJncworCisjdW5kZWYgX19maWVsZAorI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLAkJXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSk7CVwKKwlpZiAoIXJldCkJCQkJCQkJXAorCQlyZXR1cm4gMDsKKworI3VuZGVmIF9fYXJyYXkKKyNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiCVwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsCQlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pKTsJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiAwOworCisjdW5kZWYgX19lbnRyeQorI2RlZmluZSBfX2VudHJ5ICJSRUMiCisKKyN1bmRlZiBUUF9wcmludGsKKyNkZWZpbmUgVFBfcHJpbnRrKGZtdCwgYXJncy4uLikgIiVzLCAlc1xuIiwgI2ZtdCwgI2FyZ3MKKworI3VuZGVmIFRQX2Zhc3RfYXNzaWduCisjZGVmaW5lIFRQX2Zhc3RfYXNzaWduKGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIFRSQUNFX0VWRU5UCisjZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJCVwKK3N0YXRpYyBpbnQJCQkJCQkJCVwKK2Z0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOwkJCQkJXAorCWludCByZXQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0c3RydWN0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6ICIgcHJpbnQpOwkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKKyNpbmNsdWRlIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPgorCisjdW5kZWYgX19maWVsZAorI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQkJXAorCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgI2l0ZW0sCQlcCisJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAorCQkJCSBzaXplb2YoZmllbGQuaXRlbSkpOwkJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCXJldHVybiByZXQ7CisKKyN1bmRlZiBfX2FycmF5CisjZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJXAorCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSAiWyIgI2xlbiAiXSIsICNpdGVtLAlcCisJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAorCQkJCSBzaXplb2YoZmllbGQuaXRlbSkpOwkJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCXJldHVybiByZXQ7CisKKyNkZWZpbmUgX19jb21tb25fZmllbGQodHlwZSwgaXRlbSkJCQkJCVwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICJjb21tb25fIiAjaXRlbSwJXAorCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQuZW50KSwgaXRlbSksCVwKKwkJCQkgc2l6ZW9mKGZpZWxkLmVudC5pdGVtKSk7CQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OworCisjdW5kZWYgVFJBQ0VfRVZFTlQKKyNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQkJXAoraW50CQkJCQkJCQkJXAorZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsKHZvaWQpCQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZDsJCQkJCVwKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfIyNjYWxsOwkJXAorCWludCByZXQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCB0eXBlKTsJCQkJXAorCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIGZsYWdzKTsJCQkJXAorCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIHByZWVtcHRfY291bnQpOwkJCVwKKwlfX2NvbW1vbl9maWVsZChpbnQsIHBpZCk7CQkJCQlcCisJX19jb21tb25fZmllbGQoaW50LCB0Z2lkKTsJCQkJCVwKKwkJCQkJCQkJCVwKKwl0c3RydWN0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQorCisjaW5jbHVkZSA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMy5oIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyZmE3OAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMy5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogU3RhZ2UgMyBvZiB0aGUgdHJhY2UgZXZlbnRzLgorICoKKyAqIE92ZXJyaWRlIHRoZSBtYWNyb3MgaW4gPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+IHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBzdGF0aWMgdm9pZCBmdHJhY2VfZXZlbnRfPGNhbGw+KHByb3RvKQorICogeworICoJZXZlbnRfdHJhY2VfcHJpbnRrKF9SRVRfSVBfLCAiPGNhbGw+OiAiIDxmbXQ+KTsKKyAqIH0KKyAqCisgKiBzdGF0aWMgaW50IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiB7CisgKglpbnQgcmV0OworICoKKyAqCXJldCA9IHJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfZXZlbnRfPGNhbGw+KTsKKyAqCWlmICghcmV0KQorICoJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgYWN0aXZhdGUgdHJhY2UgcG9pbnQgIgorICoJCQkicHJvYmUgdG8gIDxjYWxsPiIpOworICoJcmV0dXJuIHJldDsKKyAqIH0KKyAqCisgKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiB7CisgKgl1bnJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfZXZlbnRfPGNhbGw+KTsKKyAqIH0KKyAqCisgKiBGb3IgdGhvc2UgbWFjcm9zIGRlZmluZWQgd2l0aCBUUkFDRV9GT1JNQVQ6CisgKgorICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKKyAqIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkKKyAqIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF88Y2FsbD4gPSB7CisgKgkubmFtZQkJCT0gIjxjYWxsPiIsCisgKgkucmVnZnVuYwkJPSBmdHJhY2VfcmVnX2V2ZW50XzxjYWxsPiwKKyAqCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPiwKKyAqIH0KKyAqCisgKgorICogRm9yIHRob3NlIG1hY3JvcyBkZWZpbmVkIHdpdGggVFJBQ0VfRVZFTlQ6CisgKgorICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF88Y2FsbD47CisgKgorICogc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF88Y2FsbD4ocHJvdG8pCisgKiB7CisgKglzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworICoJc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+ICplbnRyeTsgPC0tIGRlZmluZWQgaW4gc3RhZ2UgMQorICoJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisgKglpbnQgcGM7CisgKgorICoJbG9jYWxfc2F2ZV9mbGFncyhpcnFfZmxhZ3MpOworICoJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisgKgorICoJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoZXZlbnRfPGNhbGw+LmlkLAorICoJCQkJICBzaXplb2Yoc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+KSwKKyAqCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CisgKglpZiAoIWV2ZW50KQorICoJCXJldHVybjsKKyAqCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisgKgorICoJPGFzc2lnbj47ICA8LS0gSGVyZSB3ZSBhc3NpZ24gdGhlIGVudHJpZXMgYnkgdGhlIF9fZmllbGQgYW5kCisgKgkJCV9fYXJyYXkgbWFjcm9zLgorICoKKyAqCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoZXZlbnQsIGlycV9mbGFncywgcGMpOworICogfQorICoKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiB7CisgKglpbnQgcmV0OworICoKKyAqCXJldCA9IHJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfcmF3X2V2ZW50XzxjYWxsPik7CisgKglpZiAoIXJldCkKKyAqCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIHRyYWNlIHBvaW50ICIKKyAqCQkJInByb2JlIHRvIDxjYWxsPiIpOworICoJcmV0dXJuIHJldDsKKyAqIH0KKyAqCisgKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiB7CisgKgl1bnJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfcmF3X2V2ZW50XzxjYWxsPik7CisgKiB9CisgKgorICogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBmdHJhY2VfZXZlbnRfdHlwZV88Y2FsbD4gPSB7CisgKgkudHJhY2UJCQk9IGZ0cmFjZV9yYXdfb3V0cHV0XzxjYWxsPiwgPC0tIHN0YWdlIDIKKyAqIH07CisgKgorICogc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiB7CisgKglpbnQgaWQ7CisgKgorICoJaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmZ0cmFjZV9ldmVudF90eXBlXzxjYWxsPik7CisgKglpZiAoIWlkKQorICoJCXJldHVybiAtRU5PREVWOworICoJZXZlbnRfPGNhbGw+LmlkID0gaWQ7CisgKglyZXR1cm4gMDsKKyAqIH0KKyAqCisgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAorICogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQorICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XzxjYWxsPiA9IHsKKyAqCS5uYW1lCQkJPSAiPGNhbGw+IiwKKyAqCS5zeXN0ZW0JCQk9ICI8c3lzdGVtPiIsCisgKgkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50XzxjYWxsPiwKKyAqCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+LAorICoJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+LAorICoJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfPGNhbGw+LAorICogfQorICoKKyAqLworCisjdW5kZWYgVFBfRk1UCisjZGVmaW5lIFRQX0ZNVChmbXQsIGFyZ3MuLi4pCWZtdCAiXG4iLCAjI2FyZ3MKKworI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjZGVmaW5lIF9UUkFDRV9QUk9GSUxFKGNhbGwsIHByb3RvLCBhcmdzKQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV8jI2NhbGwocHJvdG8pCQkJCVwKK3sJCQkJCQkJCQlcCisJZXh0ZXJuIHZvaWQgcGVyZl90cGNvdW50ZXJfZXZlbnQoaW50KTsJCQkJXAorCXBlcmZfdHBjb3VudGVyX2V2ZW50KGV2ZW50XyMjY2FsbC5pZCk7CQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKSBcCit7CQkJCQkJCQkJXAorCWludCByZXQgPSAwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKCFhdG9taWNfaW5jX3JldHVybigmY2FsbC0+cHJvZmlsZV9jb3VudCkpCQkJXAorCQlyZXQgPSByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpIFwKK3sJCQkJCQkJCQlcCisJaWYgKGF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZjYWxsLT5wcm9maWxlX2NvdW50KSkJCVwKKwkJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCVwKK30KKworI2RlZmluZSBfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCisJLnByb2ZpbGVfY291bnQgPSBBVE9NSUNfSU5JVCgtMSksCQkJCVwKKwkucHJvZmlsZV9lbmFibGUgPSBmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNjYWxsLAkJCVwKKwkucHJvZmlsZV9kaXNhYmxlID0gZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI2NhbGwsCisKKyNlbHNlCisjZGVmaW5lIF9UUkFDRV9QUk9GSUxFKGNhbGwsIHByb3RvLCBhcmdzKQorI2RlZmluZSBfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCisjZW5kaWYKKworI2RlZmluZSBfVFJBQ0VfRk9STUFUKGNhbGwsIHByb3RvLCBhcmdzLCBmbXQpCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9ldmVudF8jI2NhbGwocHJvdG8pCQkJCQlcCit7CQkJCQkJCQkJXAorCWV2ZW50X3RyYWNlX3ByaW50ayhfUkVUX0lQXywgI2NhbGwgIjogIiBmbXQpOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW50IGZ0cmFjZV9yZWdfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3sJCQkJCQkJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfZXZlbnRfIyNjYWxsKTsJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgYWN0aXZhdGUgdHJhY2UgcG9pbnQgIglcCisJCQkicHJvYmUgdG8gIiAjY2FsbCAiXG4iKTsJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV91bnJlZ19ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfZXZlbnRfIyNjYWxsKTsJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI2NhbGw7CQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX2luaXRfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3sJCQkJCQkJCQlcCisJaW50IGlkOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KE5VTEwpOwkJCQlcCisJaWYgKCFpZCkJCQkJCQkJXAorCQlyZXR1cm4gLUVOT0RFVjsJCQkJCQlcCisJZXZlbnRfIyNjYWxsLmlkID0gaWQ7CQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCit9CisKKyN1bmRlZiBUUkFDRV9GT1JNQVQKKyNkZWZpbmUgVFJBQ0VfRk9STUFUKGNhbGwsIHByb3RvLCBhcmdzLCBmbXQpCQkJCVwKK19UUkFDRV9GT1JNQVQoY2FsbCwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpLCBQQVJBTVMoZm10KSkJCVwKK19UUkFDRV9QUk9GSUxFKGNhbGwsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAorX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCisJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCisJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKKwkucmF3X2luaXQJCT0gZnRyYWNlX2luaXRfZXZlbnRfIyNjYWxsLAkJXAorCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfIyNjYWxsLAkJXAorCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3VucmVnX2V2ZW50XyMjY2FsbCwJCVwKKwlfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCit9CisKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgZW50cnkKKworI3VuZGVmIFRSQUNFX0VWRU5UCisjZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQkJXAorX1RSQUNFX1BST0ZJTEUoY2FsbCwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNjYWxsOwkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfIyNjYWxsOwkJCVwKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwkJCQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICplbnRyeTsJCQkJXAorCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwkJCQkJXAorCWludCBwYzsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CQkJCQlcCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKGV2ZW50XyMjY2FsbC5pZCwJXAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCksCVwKKwkJCQkgIGlycV9mbGFncywgcGMpOwkJCVwKKwlpZiAoIWV2ZW50KQkJCQkJCQlcCisJCXJldHVybjsJCQkJCQkJXAorCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CQkJXAorCQkJCQkJCQkJXAorCWFzc2lnbjsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoY2FsbC0+cHJlZHMgJiYgIWZpbHRlcl9tYXRjaF9wcmVkcyhjYWxsLCBlbnRyeSkpCQlcCisJCXJpbmdfYnVmZmVyX2V2ZW50X2Rpc2NhcmQoZXZlbnQpOwkJCVwKKwkJCQkJCQkJCVwKKwl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoZXZlbnQsIGlycV9mbGFncywgcGMpOwlcCisJCQkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKTsJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgYWN0aXZhdGUgdHJhY2UgcG9pbnQgIglcCisJCQkicHJvYmUgdG8gIiAjY2FsbCAiXG4iKTsJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3sJCQkJCQkJCQlcCisJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwpOwkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgZnRyYWNlX2V2ZW50X3R5cGVfIyNjYWxsID0gewkJCVwKKwkudHJhY2UJCQk9IGZ0cmFjZV9yYXdfb3V0cHV0XyMjY2FsbCwJCVwKK307CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3sJCQkJCQkJCQlcCisJaW50IGlkOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZmdHJhY2VfZXZlbnRfdHlwZV8jI2NhbGwpOwkJXAorCWlmICghaWQpCQkJCQkJCVwKKwkJcmV0dXJuIC1FTk9ERVY7CQkJCQkJXAorCWV2ZW50XyMjY2FsbC5pZCA9IGlkOwkJCQkJCVwKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnRfIyNjYWxsLmZpZWxkcyk7CQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKKwkubmFtZQkJCT0gI2NhbGwsCQkJCVwKKwkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAorCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsLAkJXAorCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKKwkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCisJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKKwkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwsCQlcCisJX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAorfQorCisjaW5jbHVkZSA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4KKworI3VuZGVmIF9UUkFDRV9QUk9GSUxFCisjdW5kZWYgX1RSQUNFX1BST0ZJTEVfSU5JVAorCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5OTUyZAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIHRyYWNlX2V4cG9ydC5jIC0gZXhwb3J0IGJhc2ljIGZ0cmFjZSB1dGlsaXRpZXMgdG8gdXNlciBzcGFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKKworI3VuZGVmIFRSQUNFX1NUUlVDVAorI2RlZmluZSBUUkFDRV9TVFJVQ1QoYXJncy4uLikgYXJncworCisjdW5kZWYgVFJBQ0VfRklFTEQKKyNkZWZpbmUgVFJBQ0VfRklFTEQodHlwZSwgaXRlbSwgYXNzaWduKQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAorCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCVwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLCBcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuaXRlbSkpOwlcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIDA7CisKKworI3VuZGVmIFRSQUNFX0ZJRUxEX1NQRUNJQUwKKyNkZWZpbmUgVFJBQ0VfRklFTERfU1BFQ0lBTCh0eXBlX2l0ZW0sIGl0ZW0sIGNtZCkJCQlcCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZCBzcGVjaWFsOiIgI3R5cGVfaXRlbSAiO1x0IglcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLAkJXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSk7CVwKKwlpZiAoIXJldCkJCQkJCQkJXAorCQlyZXR1cm4gMDsKKworI3VuZGVmIFRSQUNFX0ZJRUxEX1pFUk9fQ0hBUgorI2RlZmluZSBUUkFDRV9GSUVMRF9aRVJPX0NIQVIoaXRlbSkJCQkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiBjaGFyICIgI2l0ZW0gIjtcdCIJCVwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZTowO1xuIiwJCQlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSk7IFwKKwlpZiAoIXJldCkJCQkJCQkJXAorCQlyZXR1cm4gMDsKKworCisjdW5kZWYgVFBfUkFXX0ZNVAorI2RlZmluZSBUUF9SQVdfRk1UKGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIFRSQUNFX0VWRU5UX0ZPUk1BVAorI2RlZmluZSBUUkFDRV9FVkVOVF9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCwgdHN0cnVjdCwgdHBmbXQpCVwKK3N0YXRpYyBpbnQJCQkJCQkJCVwKK2Z0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGFyZ3MgZmllbGQ7CQkJCQkJXAorCWludCByZXQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0c3RydWN0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6IFwiJXNcIlxuIiwgdHBmbXQpOwkJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworI2luY2x1ZGUgInRyYWNlX2V2ZW50X3R5cGVzLmgiCisKKyN1bmRlZiBUUkFDRV9aRVJPX0NIQVIKKyNkZWZpbmUgVFJBQ0VfWkVST19DSEFSKGFyZykKKworI3VuZGVmIFRSQUNFX0ZJRUxECisjZGVmaW5lIFRSQUNFX0ZJRUxEKHR5cGUsIGl0ZW0sIGFzc2lnbilcCisJZW50cnktPml0ZW0gPSBhc3NpZ247CisKKyN1bmRlZiBUUkFDRV9GSUVMRAorI2RlZmluZSBUUkFDRV9GSUVMRCh0eXBlLCBpdGVtLCBhc3NpZ24pXAorCWVudHJ5LT5pdGVtID0gYXNzaWduOworCisjdW5kZWYgVFBfQ01ECisjZGVmaW5lIFRQX0NNRChjbWQuLi4pCWNtZAorCisjdW5kZWYgVFJBQ0VfRU5UUlkKKyNkZWZpbmUgVFJBQ0VfRU5UUlkJZW50cnkKKworI3VuZGVmIFRSQUNFX0ZJRUxEX1NQRUNJQUwKKyNkZWZpbmUgVFJBQ0VfRklFTERfU1BFQ0lBTCh0eXBlX2l0ZW0sIGl0ZW0sIGNtZCkgXAorCWNtZDsKKworI3VuZGVmIFRSQUNFX0VWRU5UX0ZPUk1BVAorI2RlZmluZSBUUkFDRV9FVkVOVF9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCwgdHN0cnVjdCwgdHBmbXQpCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKKwkubmFtZQkJCT0gI2NhbGwsCQkJCVwKKwkuaWQJCQk9IHByb3RvLAkJCQlcCisJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKKwkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXAorfQorI2luY2x1ZGUgInRyYWNlX2V2ZW50X3R5cGVzLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKaW5kZXggOTIzNmQ3ZS4uYzlhMGI3ZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYwpAQCAtOSw2ICs5LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBJbmdvIE1vbG5hcgogICogIENvcHlyaWdodCAoQykgMjAwNCBXaWxsaWFtIExlZSBJcndpbiBJSUkKICAqLworI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KQEAgLTE2LDMxICsxNywyOSBAQAogCiAjaW5jbHVkZSAidHJhY2UuaCIKIAotc3RhdGljIHZvaWQgc3RhcnRfZnVuY3Rpb25fdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKKy8qIGZ1bmN0aW9uIHRyYWNpbmcgZW5hYmxlZCAqLworc3RhdGljIGludAkJCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkOworCitzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5CSpmdW5jX3RyYWNlOworCitzdGF0aWMgdm9pZCB0cmFjaW5nX3N0YXJ0X2Z1bmN0aW9uX3RyYWNlKHZvaWQpOworc3RhdGljIHZvaWQgdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKHZvaWQpOworCitzdGF0aWMgaW50IGZ1bmN0aW9uX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKKwlmdW5jX3RyYWNlID0gdHI7CiAJdHItPmNwdSA9IGdldF9jcHUoKTsKLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKIAlwdXRfY3B1KCk7CiAKIAl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7CiAJdHJhY2luZ19zdGFydF9mdW5jdGlvbl90cmFjZSgpOwotfQotCi1zdGF0aWMgdm9pZCBzdG9wX2Z1bmN0aW9uX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKCk7Ci0JdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7Ci19Ci0KLXN0YXRpYyBpbnQgZnVuY3Rpb25fdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXN0YXJ0X2Z1bmN0aW9uX3RyYWNlKHRyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZnVuY3Rpb25fdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlzdG9wX2Z1bmN0aW9uX3RyYWNlKHRyKTsKKwl0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2UoKTsKKwl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKIH0KIAogc3RhdGljIHZvaWQgZnVuY3Rpb25fdHJhY2Vfc3RhcnQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKQEAgLTQ4LDIwICs0NywzNTggQEAKIAl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKIH0KIAorc3RhdGljIHZvaWQKK2Z1bmN0aW9uX3RyYWNlX2NhbGxfcHJlZW1wdF9vbmx5KHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQoreworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBmdW5jX3RyYWNlOworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGRpc2FibGVkOworCWludCBjcHUsIHJlc2NoZWQ7CisJaW50IHBjOworCisJaWYgKHVubGlrZWx5KCFmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCkpCisJCXJldHVybjsKKworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisKKwlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKQorCQl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKworCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKKwlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitmdW5jdGlvbl90cmFjZV9jYWxsKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQoreworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBmdW5jX3RyYWNlOworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGRpc2FibGVkOworCWludCBjcHU7CisJaW50IHBjOworCisJaWYgKHVubGlrZWx5KCFmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCkpCisJCXJldHVybjsKKworCS8qCisJICogTmVlZCB0byB1c2UgcmF3LCBzaW5jZSB0aGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUKKwkgKiByZWN1cnNpdmUgcHJvdGVjdGlvbiBpcyBwZXJmb3JtZWQuCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJZGF0YSA9IHRyLT5kYXRhW2NwdV07CisJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOworCisJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgeworCQlwYyA9IHByZWVtcHRfY291bnQoKTsKKwkJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJfQorCisJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK2Z1bmN0aW9uX3N0YWNrX3RyYWNlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCit7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZ1bmNfdHJhY2U7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgZGlzYWJsZWQ7CisJaW50IGNwdTsKKwlpbnQgcGM7CisKKwlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBOZWVkIHRvIHVzZSByYXcsIHNpbmNlIHRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZQorCSAqIHJlY3Vyc2l2ZSBwcm90ZWN0aW9uIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisKKwlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKSB7CisJCXBjID0gcHJlZW1wdF9jb3VudCgpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKwkJLyoKKwkJICogc2tpcCBvdmVyIDUgZnVuY3M6CisJCSAqICAgIF9fZnRyYWNlX3RyYWNlX3N0YWNrLAorCQkgKiAgICBfX3RyYWNlX3N0YWNrLAorCQkgKiAgICBmdW5jdGlvbl9zdGFja190cmFjZV9jYWxsCisJCSAqICAgIGZ0cmFjZV9saXN0X2Z1bmMKKwkJICogICAgZnRyYWNlX2NhbGwKKwkJICovCisJCV9fdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCA1LCBwYyk7CisJfQorCisJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQoreworCS5mdW5jID0gZnVuY3Rpb25fdHJhY2VfY2FsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9zdGFja19vcHMgX19yZWFkX21vc3RseSA9Cit7CisJLmZ1bmMgPSBmdW5jdGlvbl9zdGFja190cmFjZV9jYWxsLAorfTsKKworLyogT3VyIHR3byBvcHRpb25zICovCitlbnVtIHsKKwlUUkFDRV9GVU5DX09QVF9TVEFDSyA9IDB4MSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBmdW5jX29wdHNbXSA9IHsKKyNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQorCXsgVFJBQ0VSX09QVChmdW5jX3N0YWNrX3RyYWNlLCBUUkFDRV9GVU5DX09QVF9TVEFDSykgfSwKKyNlbmRpZgorCXsgfSAvKiBBbHdheXMgc2V0IGEgbGFzdCBlbXB0eSBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3MgZnVuY19mbGFncyA9IHsKKwkudmFsID0gMCwgLyogQnkgZGVmYXVsdDogYWxsIGZsYWdzIGRpc2FibGVkICovCisJLm9wdHMgPSBmdW5jX29wdHMKK307CisKK3N0YXRpYyB2b2lkIHRyYWNpbmdfc3RhcnRfZnVuY3Rpb25fdHJhY2Uodm9pZCkKK3sKKwlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDA7CisKKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSRUVNUFRPTkxZKQorCQl0cmFjZV9vcHMuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGxfcHJlZW1wdF9vbmx5OworCWVsc2UKKwkJdHJhY2Vfb3BzLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsOworCisJaWYgKGZ1bmNfZmxhZ3MudmFsICYgVFJBQ0VfRlVOQ19PUFRfU1RBQ0spCisJCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfc3RhY2tfb3BzKTsKKwllbHNlCisJCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKKworCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKHZvaWQpCit7CisJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAwOworCS8qIE9LIGlmIHRoZXkgYXJlIG5vdCByZWdpc3RlcmVkICovCisJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3N0YWNrX29wcyk7CisJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7Cit9CisKK3N0YXRpYyBpbnQgZnVuY19zZXRfZmxhZyh1MzIgb2xkX2ZsYWdzLCB1MzIgYml0LCBpbnQgc2V0KQoreworCWlmIChiaXQgPT0gVFJBQ0VfRlVOQ19PUFRfU1RBQ0spIHsKKwkJLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCAqLworCQlpZiAoISFzZXQgPT0gISEoZnVuY19mbGFncy52YWwgJiBUUkFDRV9GVU5DX09QVF9TVEFDSykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoc2V0KSB7CisJCQl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKKwkJCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfc3RhY2tfb3BzKTsKKwkJfSBlbHNlIHsKKwkJCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9zdGFja19vcHMpOworCQkJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyIGZ1bmN0aW9uX3RyYWNlIF9fcmVhZF9tb3N0bHkgPQogewotCS5uYW1lCSAgICAgPSAiZnVuY3Rpb24iLAotCS5pbml0CSAgICAgPSBmdW5jdGlvbl90cmFjZV9pbml0LAotCS5yZXNldAkgICAgID0gZnVuY3Rpb25fdHJhY2VfcmVzZXQsCi0JLnN0YXJ0CSAgICAgPSBmdW5jdGlvbl90cmFjZV9zdGFydCwKKwkubmFtZQkJPSAiZnVuY3Rpb24iLAorCS5pbml0CQk9IGZ1bmN0aW9uX3RyYWNlX2luaXQsCisJLnJlc2V0CQk9IGZ1bmN0aW9uX3RyYWNlX3Jlc2V0LAorCS5zdGFydAkJPSBmdW5jdGlvbl90cmFjZV9zdGFydCwKKwkud2FpdF9waXBlCT0gcG9sbF93YWl0X3BpcGUsCisJLmZsYWdzCQk9ICZmdW5jX2ZsYWdzLAorCS5zZXRfZmxhZwk9IGZ1bmNfc2V0X2ZsYWcsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAotCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb24sCisJLnNlbGZ0ZXN0CT0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbiwKICNlbmRpZgogfTsKIAotc3RhdGljIF9faW5pdCBpbnQgaW5pdF9mdW5jdGlvbl90cmFjZSh2b2lkKQorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorc3RhdGljIHZvaWQKK2Z0cmFjZV90cmFjZW9uKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLCB2b2lkICoqZGF0YSkKIHsKLQlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZmdW5jdGlvbl90cmFjZSk7CisJbG9uZyAqY291bnQgPSAobG9uZyAqKWRhdGE7CisKKwlpZiAodHJhY2luZ19pc19vbigpKQorCQlyZXR1cm47CisKKwlpZiAoISpjb3VudCkKKwkJcmV0dXJuOworCisJaWYgKCpjb3VudCAhPSAtMSkKKwkJKCpjb3VudCktLTsKKworCXRyYWNpbmdfb24oKTsKIH0KIAorc3RhdGljIHZvaWQKK2Z0cmFjZV90cmFjZW9mZih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwgdm9pZCAqKmRhdGEpCit7CisJbG9uZyAqY291bnQgPSAobG9uZyAqKWRhdGE7CisKKwlpZiAoIXRyYWNpbmdfaXNfb24oKSkKKwkJcmV0dXJuOworCisJaWYgKCEqY291bnQpCisJCXJldHVybjsKKworCWlmICgqY291bnQgIT0gLTEpCisJCSgqY291bnQpLS07CisKKwl0cmFjaW5nX29mZigpOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfdHJhY2Vfb25vZmZfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIGlwLAorCQkJIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpOworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgdHJhY2Vvbl9wcm9iZV9vcHMgPSB7CisJLmZ1bmMJCQk9IGZ0cmFjZV90cmFjZW9uLAorCS5wcmludAkJCT0gZnRyYWNlX3RyYWNlX29ub2ZmX3ByaW50LAorfTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzIHRyYWNlb2ZmX3Byb2JlX29wcyA9IHsKKwkuZnVuYwkJCT0gZnRyYWNlX3RyYWNlb2ZmLAorCS5wcmludAkJCT0gZnRyYWNlX3RyYWNlX29ub2ZmX3ByaW50LAorfTsKKworc3RhdGljIGludAorZnRyYWNlX3RyYWNlX29ub2ZmX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyBpcCwKKwkJCSBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLCB2b2lkICpkYXRhKQoreworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisJbG9uZyBjb3VudCA9IChsb25nKWRhdGE7CisKKwlrYWxsc3ltc19sb29rdXAoaXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CisJc2VxX3ByaW50ZihtLCAiJXM6Iiwgc3RyKTsKKworCWlmIChvcHMgPT0gJnRyYWNlb25fcHJvYmVfb3BzKQorCQlzZXFfcHJpbnRmKG0sICJ0cmFjZW9uIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICJ0cmFjZW9mZiIpOworCisJaWYgKGNvdW50ID09IC0xKQorCQlzZXFfcHJpbnRmKG0sICI6dW5saW1pdGVkXG4iKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIjpjb3VudD0lbGQiLCBjb3VudCk7CisJc2VxX3B1dGMobSwgJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZnRyYWNlX3RyYWNlX29ub2ZmX3VucmVnKGNoYXIgKmdsb2IsIGNoYXIgKmNtZCwgY2hhciAqcGFyYW0pCit7CisJc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wczsKKworCS8qIHdlIHJlZ2lzdGVyIGJvdGggdHJhY2VvbiBhbmQgdHJhY2VvZmYgdG8gdGhpcyBjYWxsYmFjayAqLworCWlmIChzdHJjbXAoY21kLCAidHJhY2VvbiIpID09IDApCisJCW9wcyA9ICZ0cmFjZW9uX3Byb2JlX29wczsKKwllbHNlCisJCW9wcyA9ICZ0cmFjZW9mZl9wcm9iZV9vcHM7CisKKwl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9mdW5jKGdsb2IsIG9wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZnRyYWNlX3RyYWNlX29ub2ZmX2NhbGxiYWNrKGNoYXIgKmdsb2IsIGNoYXIgKmNtZCwgY2hhciAqcGFyYW0sIGludCBlbmFibGUpCit7CisJc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wczsKKwl2b2lkICpjb3VudCA9ICh2b2lkICopLTE7CisJY2hhciAqbnVtYmVyOworCWludCByZXQ7CisKKwkvKiBoYXNoIGZ1bmNzIG9ubHkgd29yayB3aXRoIHNldF9mdHJhY2VfZmlsdGVyICovCisJaWYgKCFlbmFibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGdsb2JbMF0gPT0gJyEnKQorCQlyZXR1cm4gZnRyYWNlX3RyYWNlX29ub2ZmX3VucmVnKGdsb2IrMSwgY21kLCBwYXJhbSk7CisKKwkvKiB3ZSByZWdpc3RlciBib3RoIHRyYWNlb24gYW5kIHRyYWNlb2ZmIHRvIHRoaXMgY2FsbGJhY2sgKi8KKwlpZiAoc3RyY21wKGNtZCwgInRyYWNlb24iKSA9PSAwKQorCQlvcHMgPSAmdHJhY2Vvbl9wcm9iZV9vcHM7CisJZWxzZQorCQlvcHMgPSAmdHJhY2VvZmZfcHJvYmVfb3BzOworCisJaWYgKCFwYXJhbSkKKwkJZ290byBvdXRfcmVnOworCisJbnVtYmVyID0gc3Ryc2VwKCZwYXJhbSwgIjoiKTsKKworCWlmICghc3RybGVuKG51bWJlcikpCisJCWdvdG8gb3V0X3JlZzsKKworCS8qCisJICogV2UgdXNlIHRoZSBjYWxsYmFjayBkYXRhIGZpZWxkICh3aGljaCBpcyBhIHBvaW50ZXIpCisJICogYXMgb3VyIGNvdW50ZXIuCisJICovCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwobnVtYmVyLCAwLCAodW5zaWduZWQgbG9uZyAqKSZjb3VudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworIG91dF9yZWc6CisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGdsb2IsIG9wcywgY291bnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kIGZ0cmFjZV90cmFjZW9uX2NtZCA9IHsKKwkubmFtZQkJCT0gInRyYWNlb24iLAorCS5mdW5jCQkJPSBmdHJhY2VfdHJhY2Vfb25vZmZfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgZnRyYWNlX3RyYWNlb2ZmX2NtZCA9IHsKKwkubmFtZQkJCT0gInRyYWNlb2ZmIiwKKwkuZnVuYwkJCT0gZnRyYWNlX3RyYWNlX29ub2ZmX2NhbGxiYWNrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9mdW5jX2NtZF90cmFjZW9uKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKCZmdHJhY2VfdHJhY2VvZmZfY21kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoJmZ0cmFjZV90cmFjZW9uX2NtZCk7CisJaWYgKHJldCkKKwkJdW5yZWdpc3Rlcl9mdHJhY2VfY29tbWFuZCgmZnRyYWNlX3RyYWNlb2ZmX2NtZCk7CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpbml0X2Z1bmNfY21kX3RyYWNlb24odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworc3RhdGljIF9faW5pdCBpbnQgaW5pdF9mdW5jdGlvbl90cmFjZSh2b2lkKQoreworCWluaXRfZnVuY19jbWRfdHJhY2VvbigpOworCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmZ1bmN0aW9uX3RyYWNlKTsKK30KIGRldmljZV9pbml0Y2FsbChpbml0X2Z1bmN0aW9uX3RyYWNlKTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IGRjZTcxYTUuLmQyODY4N2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoKICAqIEZ1bmN0aW9uIGdyYXBoIHRyYWNlci4KLSAqIENvcHlyaWdodCAoYykgMjAwOCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CiAgKiBNb3N0bHkgYm9ycm93ZWQgZnJvbSBmdW5jdGlvbiB0cmFjZXIgd2hpY2gKICAqIGlzIENvcHlyaWdodCAoYykgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CiAgKgpAQCAtMTIsNiArMTIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworc3RydWN0IGZncmFwaF9kYXRhIHsKKwlwaWRfdAkJbGFzdF9waWQ7CisJaW50CQlkZXB0aDsKK307CiAKICNkZWZpbmUgVFJBQ0VfR1JBUEhfSU5ERU5UCTIKIApAQCAtMjAsOSArMjYsMTEgQEAKICNkZWZpbmUgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVCQkweDIKICNkZWZpbmUgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQJMHg0CiAjZGVmaW5lIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MJCTB4OAorI2RlZmluZSBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTgkweDEwCisjZGVmaW5lIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FCTBYMjAKIAogc3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IHRyYWNlX29wdHNbXSA9IHsKLQkvKiBEaXNwbGF5IG92ZXJydW5zID8gKi8KKwkvKiBEaXNwbGF5IG92ZXJydW5zPyAoZm9yIHNlbGYtZGVidWcgcHVycG9zZSkgKi8KIAl7IFRSQUNFUl9PUFQoZnVuY2dyYXBoLW92ZXJydW4sIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJSVU4pIH0sCiAJLyogRGlzcGxheSBDUFUgPyAqLwogCXsgVFJBQ0VSX09QVChmdW5jZ3JhcGgtY3B1LCBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIH0sCkBAIC0zMCwyMyArMzgsMjggQEAKIAl7IFRSQUNFUl9PUFQoZnVuY2dyYXBoLW92ZXJoZWFkLCBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgfSwKIAkvKiBEaXNwbGF5IHByb2MgbmFtZS9waWQgKi8KIAl7IFRSQUNFUl9PUFQoZnVuY2dyYXBoLXByb2MsIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpIH0sCisJLyogRGlzcGxheSBkdXJhdGlvbiBvZiBleGVjdXRpb24gKi8KKwl7IFRSQUNFUl9PUFQoZnVuY2dyYXBoLWR1cmF0aW9uLCBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikgfSwKKwkvKiBEaXNwbGF5IGFic29sdXRlIHRpbWUgb2YgYW4gZW50cnkgKi8KKwl7IFRSQUNFUl9PUFQoZnVuY2dyYXBoLWFic3RpbWUsIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FKSB9LAogCXsgfSAvKiBFbXB0eSBlbnRyeSAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3MgdHJhY2VyX2ZsYWdzID0gewogCS8qIERvbid0IGRpc3BsYXkgb3ZlcnJ1bnMgYW5kIHByb2MgYnkgZGVmYXVsdCAqLwotCS52YWwgPSBUUkFDRV9HUkFQSF9QUklOVF9DUFUgfCBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCwKKwkudmFsID0gVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVIHwgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQgfAorCSAgICAgICBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTiwKIAkub3B0cyA9IHRyYWNlX29wdHMKIH07CiAKIC8qIHBpZCBvbiB0aGUgbGFzdCB0cmFjZSBwcm9jZXNzZWQgKi8KLXN0YXRpYyBwaWRfdCBsYXN0X3BpZFtOUl9DUFVTXSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSAtMSB9OworCiAKIC8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLwogaW50Ci1mdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAotCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKK2Z0cmFjZV9wdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKQogeworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKIAlpbnQgaW5kZXg7CiAKIAlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKQEAgLTU4LDExICs3MSwxMyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAorCWNhbGx0aW1lID0gdHJhY2VfY2xvY2tfbG9jYWwoKTsKKwogCWluZGV4ID0gKytjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKIAliYXJyaWVyKCk7CiAJY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQgPSByZXQ7CiAJY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jID0gZnVuYzsKLQljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lID0gdGltZTsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lID0gY2FsbHRpbWU7CiAJKmRlcHRoID0gaW5kZXg7CiAKIAlyZXR1cm4gMDsKQEAgLTEwNCw3ICsxMTksNyBAQAogCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAJZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKLQl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCXRyYWNlLnJldHRpbWUgPSB0cmFjZV9jbG9ja19sb2NhbCgpOwogCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKIAogCWlmICh1bmxpa2VseSghcmV0KSkgewpAQCAtMTE5LDEyICsxMzQsNyBAQAogCiBzdGF0aWMgaW50IGdyYXBoX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgY3B1LCByZXQ7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKLQotCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaCgmdHJhY2VfZ3JhcGhfcmV0dXJuLAorCWludCByZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKIAkJCQkJJnRyYWNlX2dyYXBoX2VudHJ5KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTg3LDE1ICsxOTcsMTUgQEAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAogcHJpbnRfZ3JhcGhfcHJvYyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBwaWRfdCBwaWQpCiB7Ci0JaW50IGk7Ci0JaW50IHJldDsKLQlpbnQgbGVuOwotCWNoYXIgY29tbVs4XTsKLQlpbnQgc3BhY2VzID0gMDsKKwljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CiAJLyogc2lnbiArIGxvZzEwKE1BWF9JTlQpICsgJ1wwJyAqLwogCWNoYXIgcGlkX3N0clsxMV07CisJaW50IHNwYWNlcyA9IDA7CisJaW50IHJldDsKKwlpbnQgbGVuOworCWludCBpOwogCi0Jc3RybmNweShjb21tLCB0cmFjZV9maW5kX2NtZGxpbmUocGlkKSwgNyk7CisJdHJhY2VfZmluZF9jbWRsaW5lKHBpZCwgY29tbSk7CiAJY29tbVs3XSA9ICdcMCc7CiAJc3ByaW50ZihwaWRfc3RyLCAiJWQiLCBwaWQpOwogCkBAIC0yMjgsMTcgKzIzOCwyNSBAQAogCiAvKiBJZiB0aGUgcGlkIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdHJhY2UsIG91dHB1dCB0aGlzIGV2ZW50ICovCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXZlcmlmX3BpZChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBwaWRfdCBwaWQsIGludCBjcHUpCit2ZXJpZl9waWQoc3RydWN0IHRyYWNlX3NlcSAqcywgcGlkX3QgcGlkLCBpbnQgY3B1LCBzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEpCiB7CiAJcGlkX3QgcHJldl9waWQ7CisJcGlkX3QgKmxhc3RfcGlkOwogCWludCByZXQ7CiAKLQlpZiAobGFzdF9waWRbY3B1XSAhPSAtMSAmJiBsYXN0X3BpZFtjcHVdID09IHBpZCkKKwlpZiAoIWRhdGEpCiAJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiAKLQlwcmV2X3BpZCA9IGxhc3RfcGlkW2NwdV07Ci0JbGFzdF9waWRbY3B1XSA9IHBpZDsKKwlsYXN0X3BpZCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+bGFzdF9waWQpOwogCisJaWYgKCpsYXN0X3BpZCA9PSBwaWQpCisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKwlwcmV2X3BpZCA9ICpsYXN0X3BpZDsKKwkqbGFzdF9waWQgPSBwaWQ7CisKKwlpZiAocHJldl9waWQgPT0gLTEpCisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiAvKgogICogQ29udGV4dC1zd2l0Y2ggdHJhY2UgbGluZToKIApAQCAtMjUwLDM0ICsyNjgsMzQgQEAKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCiAJCSIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlpZiAoIXJldCkKLQkJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOwogCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIHByZXZfcGlkKTsKIAlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiID0+ICIpOwogCWlmICghcmV0KQotCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBwaWQpOwogCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCiAJCSJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7CiAJaWYgKCFyZXQpCi0JCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBib29sCi10cmFjZV9icmFuY2hfaXNfbGVhZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKgorZ2V0X3JldHVybl9mb3JfbGVhZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCiAJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICpjdXJyKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICpyaW5nX2l0ZXI7CkBAIC0yODYsNjUgKzMwNCwxMjMgQEAKIAogCXJpbmdfaXRlciA9IGl0ZXItPmJ1ZmZlcl9pdGVyW2l0ZXItPmNwdV07CiAKLQlpZiAoIXJpbmdfaXRlcikKLQkJcmV0dXJuIGZhbHNlOwotCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9pdGVyX3BlZWsocmluZ19pdGVyLCBOVUxMKTsKKwkvKiBGaXJzdCBwZWVrIHRvIGNvbXBhcmUgY3VycmVudCBlbnRyeSBhbmQgdGhlIG5leHQgb25lICovCisJaWYgKHJpbmdfaXRlcikKKwkJZXZlbnQgPSByaW5nX2J1ZmZlcl9pdGVyX3BlZWsocmluZ19pdGVyLCBOVUxMKTsKKwllbHNlIHsKKwkvKiBXZSBuZWVkIHRvIGNvbnN1bWUgdGhlIGN1cnJlbnQgZW50cnkgdG8gc2VlIHRoZSBuZXh0IG9uZSAqLworCQlyaW5nX2J1ZmZlcl9jb25zdW1lKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwgTlVMTCk7CisJCWV2ZW50ID0gcmluZ19idWZmZXJfcGVlayhpdGVyLT50ci0+YnVmZmVyLCBpdGVyLT5jcHUsCisJCQkJCU5VTEwpOworCX0KIAogCWlmICghZXZlbnQpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAluZXh0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAKIAlpZiAobmV4dC0+ZW50LnR5cGUgIT0gVFJBQ0VfR1JBUEhfUkVUKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJaWYgKGN1cnItPmVudC5waWQgIT0gbmV4dC0+ZW50LnBpZCB8fAogCQkJY3Vyci0+Z3JhcGhfZW50LmZ1bmMgIT0gbmV4dC0+cmV0LmZ1bmMpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gdHJ1ZTsKKwkvKiB0aGlzIGlzIGEgbGVhZiwgbm93IGFkdmFuY2UgdGhlIGl0ZXJhdG9yICovCisJaWYgKHJpbmdfaXRlcikKKwkJcmluZ19idWZmZXJfcmVhZChyaW5nX2l0ZXIsIE5VTEwpOworCisJcmV0dXJuIG5leHQ7Cit9CisKKy8qIFNpZ25hbCBhIG92ZXJoZWFkIG9mIHRpbWUgZXhlY3V0aW9uIHRvIHRoZSBvdXRwdXQgKi8KK3N0YXRpYyBpbnQKK3ByaW50X2dyYXBoX292ZXJoZWFkKHVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbiwgc3RydWN0IHRyYWNlX3NlcSAqcykKK3sKKwkvKiBJZiBkdXJhdGlvbiBkaXNhcHBlYXIsIHdlIGRvbid0IG5lZWQgYW55dGhpbmcgKi8KKwlpZiAoISh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pKQorCQlyZXR1cm4gMTsKKworCS8qIE5vbiBuZXN0ZWQgZW50cnkgb3IgcmV0dXJuICovCisJaWYgKGR1cmF0aW9uID09IC0xKQorCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAiKTsKKworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKKwkJLyogRHVyYXRpb24gZXhjZWVkZWQgMTAwIG1zZWNzICovCisJCWlmIChkdXJhdGlvbiA+IDEwMDAwMFVMTCkKKwkJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIhICIpOworCisJCS8qIER1cmF0aW9uIGV4Y2VlZGVkIDEwIG1zZWNzICovCisJCWlmIChkdXJhdGlvbiA+IDEwMDAwVUxMKQorCQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIisgIik7CisJfQorCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAgIik7Cit9CisKK3N0YXRpYyBpbnQgcHJpbnRfZ3JhcGhfYWJzX3RpbWUodTY0IHQsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJdW5zaWduZWQgbG9uZyB1c2Vjc19yZW07CisKKwl1c2Vjc19yZW0gPSBkb19kaXYodCwgTlNFQ19QRVJfU0VDKTsKKwl1c2Vjc19yZW0gLz0gMTAwMDsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNWx1LiUwNmx1IHwgICIsCisJCQkodW5zaWduZWQgbG9uZyl0LCB1c2Vjc19yZW0pOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXByaW50X2dyYXBoX2lycShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJZW51bSB0cmFjZV90eXBlIHR5cGUsIGludCBjcHUsIHBpZF90IHBpZCkKK3ByaW50X2dyYXBoX2lycShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJZW51bSB0cmFjZV90eXBlIHR5cGUsIGludCBjcHUsIHBpZF90IHBpZCkKIHsKIAlpbnQgcmV0OworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCiAJaWYgKGFkZHIgPCAodW5zaWduZWQgbG9uZylfX2lycWVudHJ5X3RleHRfc3RhcnQgfHwKIAkJYWRkciA+PSAodW5zaWduZWQgbG9uZylfX2lycWVudHJ5X3RleHRfZW5kKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CiAKLQlpZiAodHlwZSA9PSBUUkFDRV9HUkFQSF9FTlQpIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPT09PT09PT09PT4gfCAgIik7Ci0JfSBlbHNlIHsKLQkJLyogQ3B1ICovCi0JCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB7Ci0JCQlyZXQgPSBwcmludF9ncmFwaF9jcHUocywgY3B1KTsKLQkJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQl9Ci0JCS8qIFByb2MgKi8KLQkJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKSB7Ci0JCQlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIHBpZCk7Ci0JCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIHwgIik7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KLQotCQkvKiBObyBvdmVyaGVhZCAqLwotCQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7Ci0JCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICIpOwotCQkJaWYgKCFyZXQpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQl9Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPD09PT09PT09PT0gfFxuIik7CisJLyogQWJzb2x1dGUgdGltZSAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpIHsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfYWJzX3RpbWUoaXRlci0+dHMsIHMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CisKKwkvKiBDcHUgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkgeworCQlyZXQgPSBwcmludF9ncmFwaF9jcHUocywgY3B1KTsKKwkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisJLyogUHJvYyAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykgeworCQlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIHBpZCk7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiB8ICIpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisKKwkvKiBObyBvdmVyaGVhZCAqLworCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKC0xLCBzKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJaWYgKHR5cGUgPT0gVFJBQ0VfR1JBUEhfRU5UKQorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICI9PT09PT09PT09PiIpOworCWVsc2UKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPD09PT09PT09PT0iKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBEb24ndCBjbG9zZSB0aGUgZHVyYXRpb24gY29sdW1uIGlmIGhhdmVuJ3Qgb25lICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiIHwiKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOworCiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwpAQCAtMzYzLDcgKzQzOSw3IEBACiAJc3ByaW50Zihtc2Vjc19zdHIsICIlbHUiLCAodW5zaWduZWQgbG9uZykgZHVyYXRpb24pOwogCiAJLyogUHJpbnQgbXNlY3MgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsIG1zZWNzX3N0cik7CisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMiLCBtc2Vjc19zdHIpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKQEAgLTM5Niw1MiArNDcyLDQ3IEBACiAKIH0KIAotLyogU2lnbmFsIGEgb3ZlcmhlYWQgb2YgdGltZSBleGVjdXRpb24gdG8gdGhlIG91dHB1dCAqLwotc3RhdGljIGludAotcHJpbnRfZ3JhcGhfb3ZlcmhlYWQodW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotewotCS8qIER1cmF0aW9uIGV4Y2VlZGVkIDEwMCBtc2VjcyAqLwotCWlmIChkdXJhdGlvbiA+IDEwMDAwMFVMTCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiEgIik7Ci0KLQkvKiBEdXJhdGlvbiBleGNlZWRlZCAxMCBtc2VjcyAqLwotCWlmIChkdXJhdGlvbiA+IDEwMDAwVUxMKQotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiKyAiKTsKLQotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICIpOwotfQotCiAvKiBDYXNlIG9mIGEgbGVhZiBmdW5jdGlvbiBvbiBpdHMgY2FsbCBlbnRyeSAqLwogc3RhdGljIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9ncmFwaF9lbnRyeV9sZWFmKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKLQkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnksCisJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICpyZXRfZW50cnksIHN0cnVjdCB0cmFjZV9zZXEgKnMpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKnJldF9lbnRyeTsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICpncmFwaF9yZXQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqY2FsbDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb247CiAJaW50IHJldDsKIAlpbnQgaTsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfcmVhZChpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdLCBOVUxMKTsKLQlyZXRfZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAlncmFwaF9yZXQgPSAmcmV0X2VudHJ5LT5yZXQ7CiAJY2FsbCA9ICZlbnRyeS0+Z3JhcGhfZW50OwogCWR1cmF0aW9uID0gZ3JhcGhfcmV0LT5yZXR0aW1lIC0gZ3JhcGhfcmV0LT5jYWxsdGltZTsKIAotCS8qIE92ZXJoZWFkICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZChkdXJhdGlvbiwgcyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCWlmIChkYXRhKSB7CisJCWludCBjcHUgPSBpdGVyLT5jcHU7CisJCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmRlcHRoKTsKKworCQkvKgorCQkgKiBDb21tZW50cyBkaXNwbGF5IGF0ICsgMSB0byBkZXB0aC4gU2luY2UKKwkJICogdGhpcyBpcyBhIGxlYWYgZnVuY3Rpb24sIGtlZXAgdGhlIGNvbW1lbnRzCisJCSAqIGVxdWFsIHRvIHRoaXMgZGVwdGguCisJCSAqLworCQkqZGVwdGggPSBjYWxsLT5kZXB0aCAtIDE7CiAJfQogCi0JLyogRHVyYXRpb24gKi8KLQlyZXQgPSBwcmludF9ncmFwaF9kdXJhdGlvbihkdXJhdGlvbiwgcyk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwkvKiBPdmVyaGVhZCAqLworCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKGR1cmF0aW9uLCBzKTsKKwlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCisJLyogRHVyYXRpb24gKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKSB7CisJCXJldCA9IHByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzKTsKKwkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisKIAkvKiBGdW5jdGlvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBjYWxsLT5kZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAiKTsKQEAgLTQ2MSwzMyArNTMyLDM0IEBACiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAotcHJpbnRfZ3JhcGhfZW50cnlfbmVzdGVkKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICplbnRyeSwKLQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMsIHBpZF90IHBpZCwgaW50IGNwdSkKK3ByaW50X2dyYXBoX2VudHJ5X25lc3RlZChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkgc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5LAorCQkJIHN0cnVjdCB0cmFjZV9zZXEgKnMsIGludCBjcHUpCiB7Ci0JaW50IGk7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqY2FsbCA9ICZlbnRyeS0+Z3JhcGhfZW50OworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGl0ZXItPnByaXZhdGU7CisJaW50IHJldDsKKwlpbnQgaTsKIAotCS8qIE5vIG92ZXJoZWFkICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlpZiAoZGF0YSkgeworCQlpbnQgY3B1ID0gaXRlci0+Y3B1OworCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5kZXB0aCk7CisKKwkJKmRlcHRoID0gY2FsbC0+ZGVwdGg7CiAJfQogCi0JLyogSW50ZXJydXB0ICovCi0JcmV0ID0gcHJpbnRfZ3JhcGhfaXJxKHMsIGNhbGwtPmZ1bmMsIFRSQUNFX0dSQVBIX0VOVCwgY3B1LCBwaWQpOwotCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9VTkhBTkRMRUQpIHsKLQkJLyogTm8gdGltZSAqLworCS8qIE5vIG92ZXJoZWFkICovCisJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoLTEsIHMpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBObyB0aW1lICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikgewogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICAgICAgICAgICB8ICAiKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfSBlbHNlIHsKLQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAKLQogCS8qIEZ1bmN0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IGNhbGwtPmRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICIpOwpAQCAtNTAzLDIwICs1NzUsNDAgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwkvKgorCSAqIHdlIGFscmVhZHkgY29uc3VtZWQgdGhlIGN1cnJlbnQgZW50cnkgdG8gY2hlY2sgdGhlIG5leHQgb25lCisJICogYW5kIHNlZSBpZiB0aGlzIGlzIGEgbGVhZi4KKwkgKi8KKwlyZXR1cm4gVFJBQ0VfVFlQRV9OT19DT05TVU1FOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXByaW50X2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICpmaWVsZCwgc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGNwdSkKK3ByaW50X2dyYXBoX3Byb2xvZ3VlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgc3RydWN0IHRyYWNlX3NlcSAqcywKKwkJICAgICBpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCWludCByZXQ7CisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCA9IGl0ZXItPmVudDsKKwlpbnQgY3B1ID0gaXRlci0+Y3B1OworCWludCByZXQ7CiAKIAkvKiBQaWQgKi8KLQlpZiAodmVyaWZfcGlkKHMsIGVudC0+cGlkLCBjcHUpID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCWlmICh2ZXJpZl9waWQocywgZW50LT5waWQsIGNwdSwgZGF0YSkgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAorCWlmICh0eXBlKSB7CisJCS8qIEludGVycnVwdCAqLworCQlyZXQgPSBwcmludF9ncmFwaF9pcnEoaXRlciwgYWRkciwgdHlwZSwgY3B1LCBlbnQtPnBpZCk7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCisJLyogQWJzb2x1dGUgdGltZSAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpIHsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfYWJzX3RpbWUoaXRlci0+dHMsIHMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisKIAkvKiBDcHUgKi8KIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkgewogCQlyZXQgPSBwcmludF9ncmFwaF9jcHUocywgY3B1KTsKQEAgLTUzNSw1NCArNjI3LDY1IEBACiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCi0JaWYgKHRyYWNlX2JyYW5jaF9pc19sZWFmKGl0ZXIsIGZpZWxkKSkKLQkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5X2xlYWYoaXRlciwgZmllbGQsIHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK3ByaW50X2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICpmaWVsZCwgc3RydWN0IHRyYWNlX3NlcSAqcywKKwkJCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlpbnQgY3B1ID0gaXRlci0+Y3B1OworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICpjYWxsID0gJmZpZWxkLT5ncmFwaF9lbnQ7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmxlYWZfcmV0OworCisJaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIFRSQUNFX0dSQVBIX0VOVCwgY2FsbC0+ZnVuYykpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCWxlYWZfcmV0ID0gZ2V0X3JldHVybl9mb3JfbGVhZihpdGVyLCBmaWVsZCk7CisJaWYgKGxlYWZfcmV0KQorCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZW50cnlfbGVhZihpdGVyLCBmaWVsZCwgbGVhZl9yZXQsIHMpOwogCWVsc2UKLQkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5X25lc3RlZChmaWVsZCwgcywgaXRlci0+ZW50LT5waWQsIGNwdSk7CisJCXJldHVybiBwcmludF9ncmFwaF9lbnRyeV9uZXN0ZWQoaXRlciwgZmllbGQsIHMsIGNwdSk7CiAKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAotCQkgICBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCwgaW50IGNwdSkKKwkJICAgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKLQlpbnQgaTsKLQlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbiA9IHRyYWNlLT5yZXR0aW1lIC0gdHJhY2UtPmNhbGx0aW1lOworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGl0ZXItPnByaXZhdGU7CisJcGlkX3QgcGlkID0gZW50LT5waWQ7CisJaW50IGNwdSA9IGl0ZXItPmNwdTsKKwlpbnQgcmV0OworCWludCBpOwogCi0JLyogUGlkICovCi0JaWYgKHZlcmlmX3BpZChzLCBlbnQtPnBpZCwgY3B1KSA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwlpZiAoZGF0YSkgeworCQlpbnQgY3B1ID0gaXRlci0+Y3B1OworCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5kZXB0aCk7CisKKwkJLyoKKwkJICogQ29tbWVudHMgZGlzcGxheSBhdCArIDEgdG8gZGVwdGguIFRoaXMgaXMgdGhlCisJCSAqIHJldHVybiBmcm9tIGEgZnVuY3Rpb24sIHdlIG5vdyB3YW50IHRoZSBjb21tZW50cworCQkgKiB0byBkaXNwbGF5IGF0IHRoZSBzYW1lIGxldmVsIG9mIHRoZSBicmFja2V0LgorCQkgKi8KKwkJKmRlcHRoID0gdHJhY2UtPmRlcHRoIC0gMTsKKwl9CisKKwlpZiAocHJpbnRfZ3JhcGhfcHJvbG9ndWUoaXRlciwgcywgMCwgMCkpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCS8qIENwdSAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOwotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KLQotCS8qIFByb2MgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBlbnQtPnBpZCk7Ci0JCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIHwgIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KLQogCS8qIE92ZXJoZWFkICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZChkdXJhdGlvbiwgcyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZChkdXJhdGlvbiwgcyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCS8qIER1cmF0aW9uICovCi0JcmV0ID0gcHJpbnRfZ3JhcGhfZHVyYXRpb24oZHVyYXRpb24sIHMpOwotCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKSB7CisJCXJldCA9IHByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzKTsKKwkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CiAKIAkvKiBDbG9zaW5nIGJyYWNlICovCiAJZm9yIChpID0gMDsgaSA8IHRyYWNlLT5kZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7CkBAIC02MDMsNyArNzA2LDcgQEAKIAkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAKLQlyZXQgPSBwcmludF9ncmFwaF9pcnEocywgdHJhY2UtPmZ1bmMsIFRSQUNFX0dSQVBIX1JFVCwgY3B1LCBlbnQtPnBpZCk7CisJcmV0ID0gcHJpbnRfZ3JhcGhfaXJxKGl0ZXIsIHRyYWNlLT5mdW5jLCBUUkFDRV9HUkFQSF9SRVQsIGNwdSwgcGlkKTsKIAlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKQEAgLTYxMSw2MSArNzE0LDczIEBACiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAotcHJpbnRfZ3JhcGhfY29tbWVudChzdHJ1Y3QgcHJpbnRfZW50cnkgKnRyYWNlLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAotCQkgICBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCwgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQorcHJpbnRfZ3JhcGhfY29tbWVudChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCAgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsCisJCSAgICBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MgPSAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9NQVNLKTsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CisJaW50IGRlcHRoID0gMDsKIAlpbnQgcmV0OworCWludCBpOwogCi0JLyogUGlkICovCi0JaWYgKHZlcmlmX3BpZChzLCBlbnQtPnBpZCwgaXRlci0+Y3B1KSA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwlpZiAoZGF0YSkKKwkJZGVwdGggPSBwZXJfY3B1X3B0cihkYXRhLCBpdGVyLT5jcHUpLT5kZXB0aDsKKworCWlmIChwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCAwLCAwKSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JLyogQ3B1ICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGl0ZXItPmNwdSk7Ci0JCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQotCi0JLyogUHJvYyAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykgewotCQlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIGVudC0+cGlkKTsKLQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgfCAiKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQotCiAJLyogTm8gb3ZlcmhlYWQgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KLQotCS8qIE5vIHRpbWUgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICAgICAgICAgICB8ICAiKTsKKwlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZCgtMSwgcyk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAorCS8qIE5vIHRpbWUgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAgICAgIHwgICIpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisKIAkvKiBJbmRlbnRhdGlvbiAqLwotCWlmICh0cmFjZS0+ZGVwdGggPiAwKQotCQlmb3IgKGkgPSAwOyBpIDwgKHRyYWNlLT5kZXB0aCArIDEpICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKKwlpZiAoZGVwdGggPiAwKQorCQlmb3IgKGkgPSAwOyBpIDwgKGRlcHRoICsgMSkgKiBUUkFDRV9HUkFQSF9JTkRFTlQ7IGkrKykgewogCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICIpOwogCQkJaWYgKCFyZXQpCiAJCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCQl9CiAKIAkvKiBUaGUgY29tbWVudCAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIi8qICVzIiwgdHJhY2UtPmJ1Zik7CisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLyogIik7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCWlmIChlbnQtPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQotCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKKwlzd2l0Y2ggKGl0ZXItPmVudC0+dHlwZSkgeworCWNhc2UgVFJBQ0VfQlBSSU5UOgorCQlyZXQgPSB0cmFjZV9wcmludF9icHJpbnRrX21zZ19vbmx5KGl0ZXIpOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfSEFORExFRCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCWNhc2UgVFJBQ0VfUFJJTlQ6CisJCXJldCA9IHRyYWNlX3ByaW50X3ByaW50a19tc2dfb25seShpdGVyKTsKKwkJaWYgKHJldCAhPSBUUkFDRV9UWVBFX0hBTkRMRUQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGVudC0+dHlwZSk7CisJCWlmICghZXZlbnQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CisKKwkJcmV0ID0gZXZlbnQtPnRyYWNlKGl0ZXIsIHN5bV9mbGFncyk7CisJCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTdHJpcCBlbmRpbmcgbmV3bGluZSAqLworCWlmIChzLT5idWZmZXJbcy0+bGVuIC0gMV0gPT0gJ1xuJykgeworCQlzLT5idWZmZXJbcy0+bGVuIC0gMV0gPSAnXDAnOworCQlzLT5sZW4tLTsKKwl9CiAKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgKi9cbiIpOwogCWlmICghcmV0KQpAQCAtNjc4LDYyICs3OTMsOTEgQEAKIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9ncmFwaF9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKIAljYXNlIFRSQUNFX0dSQVBIX0VOVDogewogCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZmllbGQ7CiAJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0JCXJldHVybiBwcmludF9ncmFwaF9lbnRyeShmaWVsZCwgcywgaXRlciwKLQkJCQkJIGl0ZXItPmNwdSk7CisJCXJldHVybiBwcmludF9ncmFwaF9lbnRyeShmaWVsZCwgcywgaXRlcik7CiAJfQogCWNhc2UgVFJBQ0VfR1JBUEhfUkVUOiB7CiAJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICpmaWVsZDsKIAkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQkJcmV0dXJuIHByaW50X2dyYXBoX3JldHVybigmZmllbGQtPnJldCwgcywgZW50cnksIGl0ZXItPmNwdSk7Ci0JfQotCWNhc2UgVFJBQ0VfUFJJTlQ6IHsKLQkJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQkJcmV0dXJuIHByaW50X2dyYXBoX2NvbW1lbnQoZmllbGQsIHMsIGVudHJ5LCBpdGVyKTsKKwkJcmV0dXJuIHByaW50X2dyYXBoX3JldHVybigmZmllbGQtPnJldCwgcywgZW50cnksIGl0ZXIpOwogCX0KIAlkZWZhdWx0OgotCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CisJCXJldHVybiBwcmludF9ncmFwaF9jb21tZW50KHMsIGVudHJ5LCBpdGVyKTsKIAl9CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9ncmFwaF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKIAkvKiAxc3QgbGluZSAqLwogCXNlcV9wcmludGYocywgIiMgIik7CisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkKKwkJc2VxX3ByaW50ZihzLCAiICAgICBUSU1FICAgICAgICIpOwogCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKQotCQlzZXFfcHJpbnRmKHMsICJDUFUgIik7CisJCXNlcV9wcmludGYocywgIkNQVSIpOwogCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykKLQkJc2VxX3ByaW50ZihzLCAiVEFTSy9QSUQgICAgICIpOwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpCi0JCXNlcV9wcmludGYocywgIk9WRVJIRUFELyIpOwotCXNlcV9wcmludGYocywgIkRVUkFUSU9OICAgICAgICAgICAgRlVOQ1RJT04gQ0FMTFNcbiIpOworCQlzZXFfcHJpbnRmKHMsICIgIFRBU0svUElEICAgICAgIik7CisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikKKwkJc2VxX3ByaW50ZihzLCAiICBEVVJBVElPTiAgICIpOworCXNlcV9wcmludGYocywgIiAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTXG4iKTsKIAogCS8qIDJuZCBsaW5lICovCiAJc2VxX3ByaW50ZihzLCAiIyAiKTsKKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FKQorCQlzZXFfcHJpbnRmKHMsICIgICAgICB8ICAgICAgICAgIik7CiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpCi0JCXNlcV9wcmludGYocywgInwgICAiKTsKKwkJc2VxX3ByaW50ZihzLCAifCAgIik7CiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKQotCQlzZXFfcHJpbnRmKHMsICJ8ICAgICAgfCAgICAgIik7Ci0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQlzZXFfcHJpbnRmKHMsICJ8ICAgICAgICAiKTsKLQkJc2VxX3ByaW50ZihzLCAifCAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8XG4iKTsKLQl9IGVsc2UKLQkJc2VxX3ByaW50ZihzLCAiICAgIHwgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8XG4iKTsKKwkJc2VxX3ByaW50ZihzLCAiICB8ICAgIHwgICAgICAgICIpOworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pCisJCXNlcV9wcmludGYocywgIiAgIHwgICB8ICAgICAgIik7CisJc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfFxuIik7CiB9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3RyYWNlX29wZW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCS8qIHBpZCBhbmQgZGVwdGggb24gdGhlIGxhc3QgdHJhY2UgcHJvY2Vzc2VkICovCisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBmZ3JhcGhfZGF0YSk7CisJaW50IGNwdTsKKworCWlmICghZGF0YSkKKwkJcHJfd2FybmluZygiZnVuY3Rpb24gZ3JhcGggdHJhY2VyOiBub3QgZW5vdWdoIG1lbW9yeVxuIik7CisJZWxzZQorCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQlwaWRfdCAqcGlkID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5sYXN0X3BpZCk7CisJCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5kZXB0aCk7CisJCQkqcGlkID0gLTE7CisJCQkqZGVwdGggPSAwOworCQl9CisKKwlpdGVyLT5wcml2YXRlID0gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdHJhY2VfY2xvc2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCWZyZWVfcGVyY3B1KGl0ZXItPnByaXZhdGUpOworfQorCiBzdGF0aWMgc3RydWN0IHRyYWNlciBncmFwaF90cmFjZSBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCSAgICAgCT0gImZ1bmN0aW9uX2dyYXBoIiwKLQkuaW5pdAkgICAgIAk9IGdyYXBoX3RyYWNlX2luaXQsCi0JLnJlc2V0CSAgICAgCT0gZ3JhcGhfdHJhY2VfcmVzZXQsCisJLm5hbWUJCT0gImZ1bmN0aW9uX2dyYXBoIiwKKwkub3BlbgkJPSBncmFwaF90cmFjZV9vcGVuLAorCS5jbG9zZQkJPSBncmFwaF90cmFjZV9jbG9zZSwKKwkud2FpdF9waXBlCT0gcG9sbF93YWl0X3BpcGUsCisJLmluaXQJCT0gZ3JhcGhfdHJhY2VfaW5pdCwKKwkucmVzZXQJCT0gZ3JhcGhfdHJhY2VfcmVzZXQsCiAJLnByaW50X2xpbmUJPSBwcmludF9ncmFwaF9mdW5jdGlvbiwKIAkucHJpbnRfaGVhZGVyCT0gcHJpbnRfZ3JhcGhfaGVhZGVycywKIAkuZmxhZ3MJCT0gJnRyYWNlcl9mbGFncywKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCisJLnNlbGZ0ZXN0CT0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaCwKKyNlbmRpZgogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgaW5pdF9ncmFwaF90cmFjZSh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYwppbmRleCA2NDlkZjIyLi43YmZkZjRjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYwpAQCAtMSwzMCArMSw1MyBAQAogLyoKICAqIGgvdyBicmFuY2ggdHJhY2VyIGZvciB4ODYgYmFzZWQgb24gYnRzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBNZXR6Z2VyIDxtYXJrdXMudC5tZXR6Z2VyQGdtYWlsLmNvbT4KLSAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIE1hcmt1cyBNZXR6Z2VyIDxtYXJrdXMudC5tZXR6Z2VyQGdtYWlsLmNvbT4sIDIwMDgtMjAwOQogICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSA8YXNtL2RzLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgogCiAKICNkZWZpbmUgU0laRU9GX0JUUyAoMSA8PCAxMykKIAorLyoKKyAqIFRoZSB0cmFjZXIgbG9jayBwcm90ZWN0cyB0aGUgYmVsb3cgcGVyLWNwdSB0cmFjZXIgYXJyYXkuCisgKiBJdCBuZWVkcyB0byBiZSBoZWxkIHRvOgorICogLSBzdGFydCB0cmFjaW5nIG9uIGFsbCBjcHVzCisgKiAtIHN0b3AgdHJhY2luZyBvbiBhbGwgY3B1cworICogLSBzdGFydCB0cmFjaW5nIG9uIGEgc2luZ2xlIGhvdHBsdWcgY3B1CisgKiAtIHN0b3AgdHJhY2luZyBvbiBhIHNpbmdsZSBob3RwbHVnIGNwdQorICogLSByZWFkIHRoZSB0cmFjZSBmcm9tIGFsbCBjcHVzCisgKiAtIHJlYWQgdGhlIHRyYWNlIGZyb20gYSBzaW5nbGUgY3B1CisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYnRzX3RyYWNlcl9sb2NrKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYnRzX3RyYWNlciAqLCB0cmFjZXIpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGNoYXJbU0laRU9GX0JUU10sIGJ1ZmZlcik7CiAKICNkZWZpbmUgdGhpc190cmFjZXIgcGVyX2NwdSh0cmFjZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSkKICNkZWZpbmUgdGhpc19idWZmZXIgcGVyX2NwdShidWZmZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSkKIAorc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHRyYWNlX2h3X2JyYW5jaGVzX2VuYWJsZWQ7CitzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpod19icmFuY2hfdHJhY2UgX19yZWFkX21vc3RseTsKIAorCisvKgorICogU3RhcnQgdHJhY2luZyBvbiB0aGUgY3VycmVudCBjcHUuCisgKiBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAqCisgKiBwcmU6IGJ0c190cmFjZXJfbG9jayBtdXN0IGJlIGxvY2tlZC4KKyAqLwogc3RhdGljIHZvaWQgYnRzX3RyYWNlX3N0YXJ0X2NwdSh2b2lkICphcmcpCiB7CiAJaWYgKHRoaXNfdHJhY2VyKQpAQCAtNDIsMTQgKzY1LDIwIEBACiAKIHN0YXRpYyB2b2lkIGJ0c190cmFjZV9zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHU7CisJc3Bpbl9sb2NrKCZidHNfdHJhY2VyX2xvY2spOwogCi0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CisJb25fZWFjaF9jcHUoYnRzX3RyYWNlX3N0YXJ0X2NwdSwgTlVMTCwgMSk7CisJdHJhY2VfaHdfYnJhbmNoZXNfZW5hYmxlZCA9IDE7CiAKLQlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcG9zc2libGVfbWFzaykKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgYnRzX3RyYWNlX3N0YXJ0X2NwdSwgTlVMTCwgMSk7CisJc3Bpbl91bmxvY2soJmJ0c190cmFjZXJfbG9jayk7CiB9CiAKKy8qCisgKiBTdG9wIHRyYWNpbmcgb24gdGhlIGN1cnJlbnQgY3B1LgorICogVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisgKgorICogcHJlOiBidHNfdHJhY2VyX2xvY2sgbXVzdCBiZSBsb2NrZWQuCisgKi8KIHN0YXRpYyB2b2lkIGJ0c190cmFjZV9zdG9wX2NwdSh2b2lkICphcmcpCiB7CiAJaWYgKHRoaXNfdHJhY2VyKSB7CkBAIC02MCwyNiArODksNjAgQEAKIAogc3RhdGljIHZvaWQgYnRzX3RyYWNlX3N0b3Aoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgY3B1OworCXNwaW5fbG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKIAotCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wb3NzaWJsZV9tYXNrKQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBidHNfdHJhY2Vfc3RvcF9jcHUsIE5VTEwsIDEpOworCXRyYWNlX2h3X2JyYW5jaGVzX2VuYWJsZWQgPSAwOworCW9uX2VhY2hfY3B1KGJ0c190cmFjZV9zdG9wX2NwdSwgTlVMTCwgMSk7CisKKwlzcGluX3VubG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKIH0KIAorc3RhdGljIGludCBfX2NwdWluaXQgYnRzX2hvdGNwdV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisKKwlzcGluX2xvY2soJmJ0c190cmFjZXJfbG9jayk7CisKKwlpZiAoIXRyYWNlX2h3X2JyYW5jaGVzX2VuYWJsZWQpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGJ0c190cmFjZV9zdGFydF9jcHUsIE5VTEwsIDEpOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGJ0c190cmFjZV9zdG9wX2NwdSwgTlVMTCwgMSk7CisJCWJyZWFrOworCX0KKworIG91dDoKKwlzcGluX3VubG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYnRzX2hvdGNwdV9ub3RpZmllciBfX2NwdWluaXRkYXRhID0geworCS5ub3RpZmllcl9jYWxsID0gYnRzX2hvdGNwdV9oYW5kbGVyCit9OworCiBzdGF0aWMgaW50IGJ0c190cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CisJaHdfYnJhbmNoX3RyYWNlID0gdHI7CisKIAlidHNfdHJhY2Vfc3RhcnQodHIpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGJ0c190cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWJ0c190cmFjZV9zdG9wKHRyKTsKK30KKwogc3RhdGljIHZvaWQgYnRzX3RyYWNlX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc2VxX3B1dHMobSwKLQkJICIjIENQVSMgICAgICAgIEZST00gICAgICAgICAgICAgICAgICAgVE8gICAgICAgICBGVU5DVElPTlxuIik7Ci0Jc2VxX3B1dHMobSwKLQkJICIjICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4iKTsKKwlzZXFfcHV0cyhtLCAiIyBDUFUjICAgICAgICBUTyAgPC0gIEZST01cbiIpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgYnRzX3RyYWNlX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQpAQCAtODcsMTUgKzE1MCwxNSBAQAogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CiAJc3RydWN0IHRyYWNlX3NlcSAqc2VxID0gJml0ZXItPnNlcTsKIAlzdHJ1Y3QgaHdfYnJhbmNoX2VudHJ5ICppdDsKKwl1bnNpZ25lZCBsb25nIHN5bWZsYWdzID0gVFJBQ0VfSVRFUl9TWU1fT0ZGU0VUOwogCiAJdHJhY2VfYXNzaWduX3R5cGUoaXQsIGVudHJ5KTsKIAogCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9IV19CUkFOQ0hFUykgewotCQlpZiAodHJhY2Vfc2VxX3ByaW50ZihzZXEsICIlNGQgICIsIGVudHJ5LT5jcHUpICYmCi0JCSAgICB0cmFjZV9zZXFfcHJpbnRmKHNlcSwgIjB4JTAxNmxseCAtPiAweCUwMTZsbHggIiwKLQkJCQkgICAgIGl0LT5mcm9tLCBpdC0+dG8pICYmCi0JCSAgICAoIWl0LT5mcm9tIHx8Ci0JCSAgICAgc2VxX3ByaW50X2lwX3N5bShzZXEsIGl0LT5mcm9tLCAvKiBzeW1fZmxhZ3MgPSAqLyAwKSkgJiYKKwkJaWYgKHRyYWNlX3NlcV9wcmludGYoc2VxLCAiJTRkICAiLCBpdGVyLT5jcHUpICYmCisJCSAgICBzZXFfcHJpbnRfaXBfc3ltKHNlcSwgaXQtPnRvLCBzeW1mbGFncykgJiYKKwkJICAgIHRyYWNlX3NlcV9wcmludGYoc2VxLCAiXHQgIDwtICAiKSAmJgorCQkgICAgc2VxX3ByaW50X2lwX3N5bShzZXEsIGl0LT5mcm9tLCBzeW1mbGFncykgJiYKIAkJICAgIHRyYWNlX3NlcV9wcmludGYoc2VxLCAiXG4iKSkKIAkJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTs7CkBAIC0xMDMsMjYgKzE2Niw0MiBAQAogCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKIH0KIAotdm9pZCB0cmFjZV9od19icmFuY2goc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgdTY0IGZyb20sIHU2NCB0bykKK3ZvaWQgdHJhY2VfaHdfYnJhbmNoKHU2NCBmcm9tLCB1NjQgdG8pCiB7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGh3X2JyYW5jaF90cmFjZTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBod19icmFuY2hfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxOworCXVuc2lnbmVkIGxvbmcgaXJxMTsKKwlpbnQgY3B1OwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksICZpcnEpOwotCWlmICghZXZlbnQpCisJaWYgKHVubGlrZWx5KCF0cikpCiAJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghdHJhY2VfaHdfYnJhbmNoZXNfZW5hYmxlZCkpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGlycTEpOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCkgIT0gMSkKKwkJZ290byBvdXQ7CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0hXX0JSQU5DSEVTLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIGZyb20pOwogCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX0hXX0JSQU5DSEVTOwotCWVudHJ5LT5lbnQuY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWVudHJ5LT5mcm9tID0gZnJvbTsKIAllbnRyeS0+dG8gICA9IHRvOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycSk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKworIG91dDoKKwlhdG9taWNfZGVjKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxMSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYWNlX2J0c19hdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJIGNvbnN0IHN0cnVjdCBidHNfdHJhY2UgKnRyYWNlLCB2b2lkICphdCkKK3N0YXRpYyB2b2lkIHRyYWNlX2J0c19hdChjb25zdCBzdHJ1Y3QgYnRzX3RyYWNlICp0cmFjZSwgdm9pZCAqYXQpCiB7CiAJc3RydWN0IGJ0c19zdHJ1Y3QgYnRzOwogCWludCBlcnIgPSAwOwpAQCAtMTM3LDE4ICsyMTYsMjkgQEAKIAogCXN3aXRjaCAoYnRzLnF1YWxpZmllcikgewogCWNhc2UgQlRTX0JSQU5DSDoKLQkJdHJhY2VfaHdfYnJhbmNoKHRyLCBidHMudmFyaWFudC5sYnIuZnJvbSwgYnRzLnZhcmlhbnQubGJyLnRvKTsKKwkJdHJhY2VfaHdfYnJhbmNoKGJ0cy52YXJpYW50Lmxici5mcm9tLCBidHMudmFyaWFudC5sYnIudG8pOwogCQlicmVhazsKIAl9CiB9CiAKKy8qCisgKiBDb2xsZWN0IHRoZSB0cmFjZSBvbiB0aGUgY3VycmVudCBjcHUgYW5kIHdyaXRlIGl0IGludG8gdGhlIGZ0cmFjZSBidWZmZXIuCisgKgorICogcHJlOiBidHNfdHJhY2VyX2xvY2sgbXVzdCBiZSBsb2NrZWQKKyAqLwogc3RhdGljIHZvaWQgdHJhY2VfYnRzX2NwdSh2b2lkICphcmcpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IChzdHJ1Y3QgdHJhY2VfYXJyYXkgKikgYXJnOwogCWNvbnN0IHN0cnVjdCBidHNfdHJhY2UgKnRyYWNlOwogCXVuc2lnbmVkIGNoYXIgKmF0OwogCi0JaWYgKCF0aGlzX3RyYWNlcikKKwlpZiAodW5saWtlbHkoIXRyKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ0ci0+ZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXS0+ZGlzYWJsZWQpKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KCF0aGlzX3RyYWNlcikpCiAJCXJldHVybjsKIAogCWRzX3N1c3BlbmRfYnRzKHRoaXNfdHJhY2VyKTsKQEAgLTE1OCwxMSArMjQ4LDExIEBACiAKIAlmb3IgKGF0ID0gdHJhY2UtPmRzLnRvcDsgKHZvaWQgKilhdCA8IHRyYWNlLT5kcy5lbmQ7CiAJICAgICBhdCArPSB0cmFjZS0+ZHMuc2l6ZSkKLQkJdHJhY2VfYnRzX2F0KHRyLCB0cmFjZSwgYXQpOworCQl0cmFjZV9idHNfYXQodHJhY2UsIGF0KTsKIAogCWZvciAoYXQgPSB0cmFjZS0+ZHMuYmVnaW47ICh2b2lkICopYXQgPCB0cmFjZS0+ZHMudG9wOwogCSAgICAgYXQgKz0gdHJhY2UtPmRzLnNpemUpCi0JCXRyYWNlX2J0c19hdCh0ciwgdHJhY2UsIGF0KTsKKwkJdHJhY2VfYnRzX2F0KHRyYWNlLCBhdCk7CiAKIG91dDoKIAlkc19yZXN1bWVfYnRzKHRoaXNfdHJhY2VyKTsKQEAgLTE3MCwyNiArMjYwLDQzIEBACiAKIHN0YXRpYyB2b2lkIHRyYWNlX2J0c19wcmVwYXJlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKLQlpbnQgY3B1OworCXNwaW5fbG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKIAotCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wb3NzaWJsZV9tYXNrKQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCB0cmFjZV9idHNfY3B1LCBpdGVyLT50ciwgMSk7CisJb25fZWFjaF9jcHUodHJhY2VfYnRzX2NwdSwgaXRlci0+dHIsIDEpOworCisJc3Bpbl91bmxvY2soJmJ0c190cmFjZXJfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX2J0c19jbG9zZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhpdGVyLT50cik7Cit9CisKK3ZvaWQgdHJhY2VfaHdfYnJhbmNoX29vcHModm9pZCkKK3sKKwlzcGluX2xvY2soJmJ0c190cmFjZXJfbG9jayk7CisKKwl0cmFjZV9idHNfY3B1KGh3X2JyYW5jaF90cmFjZSk7CisKKwlzcGluX3VubG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKIH0KIAogc3RydWN0IHRyYWNlciBidHNfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQogewogCS5uYW1lCQk9ICJody1icmFuY2gtdHJhY2VyIiwKIAkuaW5pdAkJPSBidHNfdHJhY2VfaW5pdCwKLQkucmVzZXQJCT0gYnRzX3RyYWNlX3N0b3AsCisJLnJlc2V0CQk9IGJ0c190cmFjZV9yZXNldCwKIAkucHJpbnRfaGVhZGVyCT0gYnRzX3RyYWNlX3ByaW50X2hlYWRlciwKIAkucHJpbnRfbGluZQk9IGJ0c190cmFjZV9wcmludF9saW5lLAogCS5zdGFydAkJPSBidHNfdHJhY2Vfc3RhcnQsCiAJLnN0b3AJCT0gYnRzX3RyYWNlX3N0b3AsCi0JLm9wZW4JCT0gdHJhY2VfYnRzX3ByZXBhcmUKKwkub3BlbgkJPSB0cmFjZV9idHNfcHJlcGFyZSwKKwkuY2xvc2UJCT0gdHJhY2VfYnRzX2Nsb3NlCiB9OwogCiBfX2luaXQgc3RhdGljIGludCBpbml0X2J0c190cmFjZSh2b2lkKQogeworCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmYnRzX2hvdGNwdV9ub3RpZmllcik7CiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmYnRzX3RyYWNlcik7CiB9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9idHNfdHJhY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKaW5kZXggNjJhNzhkOS4uYjkyM2QxMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIHRyYWNlIGlycXMgb2ZmIGNyaXRpY2FsbCB0aW1pbmdzCisgKiB0cmFjZSBpcnFzIG9mZiBjcml0aWNhbCB0aW1pbmdzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CkBAIC0zMiw2ICszMiw4IEBACiAKIHN0YXRpYyBpbnQgdHJhY2VfdHlwZSBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgaW50IHNhdmVfbGF0X2ZsYWc7CisKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9UUkFDRVIKIHN0YXRpYyBpbmxpbmUgaW50CiBwcmVlbXB0X3RyYWNlKHZvaWQpCkBAIC05NSw3ICs5Nyw3IEBACiAJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwogCiAJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CiAKIAlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CiB9CkBAIC0xNTMsNyArMTU1LDcgQEAKIAlpZiAoIXJlcG9ydF9sYXRlbmN5KGRlbHRhKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBDQUxMRVJfQUREUjAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIAogCWxhdGVuY3kgPSBuc2Vjc190b191c2VjcyhkZWx0YSk7CiAKQEAgLTE3Nyw3ICsxNzksNyBAQAogCWRhdGEtPmNyaXRpY2FsX3NlcXVlbmNlID0gbWF4X3NlcXVlbmNlOwogCWRhdGEtPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwogCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Ci0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBDQUxMRVJfQUREUjAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yMTAsNyArMjEyLDcgQEAKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCi0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAogCXBlcl9jcHUodHJhY2luZ19jcHUsIGNwdSkgPSAxOwogCkBAIC0yNDQsNyArMjQ2LDcgQEAKIAlhdG9taWNfaW5jKCZkYXRhLT5kaXNhYmxlZCk7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOwogCWNoZWNrX2NyaXRpY2FsX3RpbWluZyh0ciwgZGF0YSwgcGFyZW50X2lwID8gOiBpcCwgY3B1KTsKIAlkYXRhLT5jcml0aWNhbF9zdGFydCA9IDA7CiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwpAQCAtMzUzLDMzICszNTUsMjYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVF9UUkFDRVIgKi8KIAotLyoKLSAqIHNhdmVfdHJhY2VyX2VuYWJsZWQgaXMgdXNlZCB0byBzYXZlIHRoZSBzdGF0ZSBvZiB0aGUgdHJhY2VyX2VuYWJsZWQKLSAqIHZhcmlhYmxlIHdoZW4gd2UgZGlzYWJsZSBpdCB3aGVuIHdlIG9wZW4gYSB0cmFjZSBvdXRwdXQgZmlsZS4KLSAqLwotc3RhdGljIGludCBzYXZlX3RyYWNlcl9lbmFibGVkOwotCiBzdGF0aWMgdm9pZCBzdGFydF9pcnFzb2ZmX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKLQlpZiAodHJhY2luZ19pc19lbmFibGVkKCkpIHsKKwlpZiAodHJhY2luZ19pc19lbmFibGVkKCkpCiAJCXRyYWNlcl9lbmFibGVkID0gMTsKLQkJc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXRyYWNlcl9lbmFibGVkID0gMDsKLQkJc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDA7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBzdG9wX2lycXNvZmZfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2VyX2VuYWJsZWQgPSAwOwotCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAwOwogCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2lycXNvZmZfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKKwlzYXZlX2xhdF9mbGFnID0gdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UOworCXRyYWNlX2ZsYWdzIHw9IFRSQUNFX0lURVJfTEFURU5DWV9GTVQ7CisKIAl0cmFjaW5nX21heF9sYXRlbmN5ID0gMDsKIAlpcnFzb2ZmX3RyYWNlID0gdHI7CiAJLyogbWFrZSBzdXJlIHRoYXQgdGhlIHRyYWNlciBpcyB2aXNpYmxlICovCkBAIC0zOTAsMzAgKzM4NSwxOSBAQAogc3RhdGljIHZvaWQgaXJxc29mZl90cmFjZXJfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAlzdG9wX2lycXNvZmZfdHJhY2VyKHRyKTsKKworCWlmICghc2F2ZV9sYXRfZmxhZykKKwkJdHJhY2VfZmxhZ3MgJj0gflRSQUNFX0lURVJfTEFURU5DWV9GTVQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlycXNvZmZfdHJhY2VyX3N0YXJ0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2VyX2VuYWJsZWQgPSAxOwotCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBpcnFzb2ZmX3RyYWNlcl9zdG9wKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2VyX2VuYWJsZWQgPSAwOwotCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBpcnFzb2ZmX3RyYWNlcl9vcGVuKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQkvKiBzdG9wIHRoZSB0cmFjZSB3aGlsZSBkdW1waW5nICovCi0JdHJhY2VyX2VuYWJsZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBpcnFzb2ZmX3RyYWNlcl9jbG9zZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0JLyogcmVzdGFydCB0cmFjaW5nICovCi0JdHJhY2VyX2VuYWJsZWQgPSBzYXZlX3RyYWNlcl9lbmFibGVkOwogfQogCiAjaWZkZWYgQ09ORklHX0lSUVNPRkZfVFJBQ0VSCkBAIC00MzEsOCArNDE1LDYgQEAKIAkucmVzZXQJCT0gaXJxc29mZl90cmFjZXJfcmVzZXQsCiAJLnN0YXJ0CQk9IGlycXNvZmZfdHJhY2VyX3N0YXJ0LAogCS5zdG9wCQk9IGlycXNvZmZfdHJhY2VyX3N0b3AsCi0JLm9wZW4JCT0gaXJxc29mZl90cmFjZXJfb3BlbiwKLQkuY2xvc2UJCT0gaXJxc29mZl90cmFjZXJfY2xvc2UsCiAJLnByaW50X21heAk9IDEsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfaXJxc29mZiwKQEAgLTQ1OSw4ICs0NDEsNiBAQAogCS5yZXNldAkJPSBpcnFzb2ZmX3RyYWNlcl9yZXNldCwKIAkuc3RhcnQJCT0gaXJxc29mZl90cmFjZXJfc3RhcnQsCiAJLnN0b3AJCT0gaXJxc29mZl90cmFjZXJfc3RvcCwKLQkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlcl9vcGVuLAotCS5jbG9zZQkJPSBpcnFzb2ZmX3RyYWNlcl9jbG9zZSwKIAkucHJpbnRfbWF4CT0gMSwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9wcmVlbXB0b2ZmLApAQCAtNDg5LDggKzQ2OSw2IEBACiAJLnJlc2V0CQk9IGlycXNvZmZfdHJhY2VyX3Jlc2V0LAogCS5zdGFydAkJPSBpcnFzb2ZmX3RyYWNlcl9zdGFydCwKIAkuc3RvcAkJPSBpcnFzb2ZmX3RyYWNlcl9zdG9wLAotCS5vcGVuCQk9IGlycXNvZmZfdHJhY2VyX29wZW4sCi0JLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VyX2Nsb3NlLAogCS5wcmludF9tYXgJPSAxLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3ByZWVtcHRpcnFzb2ZmLApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCmluZGV4IDgwZTUwM2UuLjhlMzdmY2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgogCiBzdHJ1Y3QgaGVhZGVyX2l0ZXIgewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CkBAIC0xODMsMjEgKzE4NCwyMiBAQAogCXN3aXRjaCAocnctPm9wY29kZSkgewogCWNhc2UgTU1JT19SRUFEOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiUiAlZCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4ICVkXG4iLAorCQkJIlIgJWQgJXUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4ICVkXG4iLAogCQkJcnctPndpZHRoLCBzZWNzLCB1c2VjX3JlbSwgcnctPm1hcF9pZCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnctPnBoeXMsCiAJCQlydy0+dmFsdWUsIHJ3LT5wYywgMCk7CiAJCWJyZWFrOwogCWNhc2UgTU1JT19XUklURToKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJIlcgJWQgJWx1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAlZFxuIiwKKwkJCSJXICVkICV1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAlZFxuIiwKIAkJCXJ3LT53aWR0aCwgc2VjcywgdXNlY19yZW0sIHJ3LT5tYXBfaWQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJ3LT5waHlzLAogCQkJcnctPnZhbHVlLCBydy0+cGMsIDApOwogCQlicmVhazsKIAljYXNlIE1NSU9fVU5LTk9XTl9PUDoKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJIlVOS05PV04gJWx1LiUwNmx1ICVkIDB4JWxseCAlMDJ4LCUwMngsJTAyeCAweCVseCAlZFxuIiwKKwkJCSJVTktOT1dOICV1LiUwNmx1ICVkIDB4JWxseCAlMDJseCwlMDJseCwiCisJCQkiJTAybHggMHglbHggJWRcbiIsCiAJCQlzZWNzLCB1c2VjX3JlbSwgcnctPm1hcF9pZCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnctPnBoeXMsCiAJCQkocnctPnZhbHVlID4+IDE2KSAmIDB4ZmYsIChydy0+dmFsdWUgPj4gOCkgJiAweGZmLApAQCAtMjI5LDE0ICsyMzEsMTQgQEAKIAlzd2l0Y2ggKG0tPm9wY29kZSkgewogCWNhc2UgTU1JT19QUk9CRToKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJIk1BUCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4IDB4JWx4ICVkXG4iLAorCQkJIk1BUCAldS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggMHglbHggJWRcbiIsCiAJCQlzZWNzLCB1c2VjX3JlbSwgbS0+bWFwX2lkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltLT5waHlzLCBtLT52aXJ0LCBtLT5sZW4sCiAJCQkwVUwsIDApOwogCQlicmVhazsKIAljYXNlIE1NSU9fVU5QUk9CRToKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJIlVOTUFQICVsdS4lMDZsdSAlZCAweCVseCAlZFxuIiwKKwkJCSJVTk1BUCAldS4lMDZsdSAlZCAweCVseCAlZFxuIiwKIAkJCXNlY3MsIHVzZWNfcmVtLCBtLT5tYXBfaWQsIDBVTCwgMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNTUsMTggKzI1NywxNSBAQAogCWNvbnN0IGNoYXIgKm1zZwkJPSBwcmludC0+YnVmOwogCXN0cnVjdCB0cmFjZV9zZXEgKnMJPSAmaXRlci0+c2VxOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB0CT0gbnMydXNlY3MoaXRlci0+dHMpOwotCXVuc2lnbmVkIGxvbmcgdXNlY19yZW0JPSBkb19kaXYodCwgMTAwMDAwMFVMTCk7CisJdW5zaWduZWQgbG9uZyB1c2VjX3JlbQk9IGRvX2Rpdih0LCBVU0VDX1BFUl9TRUMpOwogCXVuc2lnbmVkIHNlY3MJCT0gKHVuc2lnbmVkIGxvbmcpdDsKIAlpbnQgcmV0OwogCiAJLyogVGhlIHRyYWlsaW5nIG5ld2xpbmUgbXVzdCBiZSBpbiB0aGUgbWVzc2FnZS4gKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJNQVJLICVsdS4lMDZsdSAlcyIsIHNlY3MsIHVzZWNfcmVtLCBtc2cpOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIk1BUksgJXUuJTA2bHUgJXMiLCBzZWNzLCB1c2VjX3JlbSwgbXNnKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKLQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7Ci0KIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCkBAIC0zMDgsMjEgKzMwNywxNyBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX21taW90cmFjZV9ydyAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IHBjID0gcHJlZW1wdF9jb3VudCgpOwogCi0JZXZlbnQJPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAgICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfTU1JT19SVywKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgcGMpOwogCWlmICghZXZlbnQpIHsKIAkJYXRvbWljX2luYygmZHJvcHBlZF9jb3VudCk7CiAJCXJldHVybjsKIAl9CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCBwcmVlbXB0X2NvdW50KCkpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfTU1JT19SVzsKIAllbnRyeS0+cncJCQk9ICpydzsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0JdHJhY2Vfd2FrZV91cCgpOworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgcGMpOwogfQogCiB2b2lkIG1taW9fdHJhY2Vfcncoc3RydWN0IG1taW90cmFjZV9ydyAqcncpCkBAIC0zMzgsMjEgKzMzMywxNyBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX21taW90cmFjZV9tYXAgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBwYyA9IHByZWVtcHRfY291bnQoKTsKIAotCWV2ZW50CT0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgICAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX01NSU9fTUFQLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCBwYyk7CiAJaWYgKCFldmVudCkgewogCQlhdG9taWNfaW5jKCZkcm9wcGVkX2NvdW50KTsKIAkJcmV0dXJuOwogCX0KIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIHByZWVtcHRfY291bnQoKSk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9NTUlPX01BUDsKIAllbnRyeS0+bWFwCQkJPSAqbWFwOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCBwYyk7CiB9CiAKIHZvaWQgbW1pb190cmFjZV9tYXBwaW5nKHN0cnVjdCBtbWlvdHJhY2VfbWFwICptYXApCkBAIC0zNjgsNSArMzU5LDUgQEAKIAogaW50IG1taW9fdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXJldHVybiB0cmFjZV92cHJpbnRrKDAsIC0xLCBmbXQsIGFyZ3MpOworCXJldHVybiB0cmFjZV92cHJpbnRrKDAsIGZtdCwgYXJncyk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMKaW5kZXggYjk3NjdhYy4uMzk0Zjk0NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ub3AuYwpAQCAtNDcsMTIgKzQ3LDcgQEAKIAogc3RhdGljIGludCBub3BfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHU7CiAJY3R4X3RyYWNlID0gdHI7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKLQogCXN0YXJ0X25vcF90cmFjZSh0cik7CiAJcmV0dXJuIDA7CiB9CkBAIC05Niw2ICs5MSw3IEBACiAJLm5hbWUJCT0gIm5vcCIsCiAJLmluaXQJCT0gbm9wX3RyYWNlX2luaXQsCiAJLnJlc2V0CQk9IG5vcF90cmFjZV9yZXNldCwKKwkud2FpdF9waXBlCT0gcG9sbF93YWl0X3BpcGUsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfbm9wLAogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyYjlhNgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpAQCAtMCwwICsxLDEwMTcgQEAKKy8qCisgKiB0cmFjZV9vdXRwdXQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0IEluYywgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKKy8qIG11c3QgYmUgYSBwb3dlciBvZiAyICovCisjZGVmaW5lIEVWRU5UX0hBU0hTSVpFCTEyOAorCitzdGF0aWMgREVGSU5FX01VVEVYKHRyYWNlX2V2ZW50X211dGV4KTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBldmVudF9oYXNoW0VWRU5UX0hBU0hTSVpFXSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW50IG5leHRfZXZlbnRfdHlwZSA9IF9fVFJBQ0VfTEFTVF9UWVBFICsgMTsKKworZW51bSBwcmludF9saW5lX3QgdHJhY2VfcHJpbnRfYnByaW50a19tc2dfb25seShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKKwlzdHJ1Y3QgYnByaW50X2VudHJ5ICpmaWVsZDsKKwlpbnQgcmV0OworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCXJldCA9IHRyYWNlX3NlcV9icHJpbnRmKHMsIGZpZWxkLT5mbXQsIGZpZWxkLT5idWYpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9wcmludF9wcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKKwlpbnQgcmV0OworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzIiwgZmllbGQtPmJ1Zik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKKy8qKgorICogdHJhY2Vfc2VxX3ByaW50ZiAtIHNlcXVlbmNlIHByaW50aW5nIG9mIHRyYWNlIGluZm9ybWF0aW9uCisgKiBAczogdHJhY2Ugc2VxdWVuY2UgZGVzY3JpcHRvcgorICogQGZtdDogcHJpbnRmIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBUaGUgdHJhY2VyIG1heSB1c2UgZWl0aGVyIHNlcXVlbmNlIG9wZXJhdGlvbnMgb3IgaXRzIG93bgorICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUbyBzaW1wbGlmeSBmb3JtYXRpbmcgb2YgYSB0cmFjZQorICogdHJhY2Vfc2VxX3ByaW50ZiBpcyB1c2VkIHRvIHN0b3JlIHN0cmluZ3MgaW50byBhIHNwZWNpYWwKKyAqIGJ1ZmZlciAoQHMpLiBUaGVuIHRoZSBvdXRwdXQgbWF5IGJlIGVpdGhlciB1c2VkIGJ5CisgKiB0aGUgc2VxdWVuY2VyIG9yIHB1bGxlZCBpbnRvIGFub3RoZXIgYnVmZmVyLgorICovCitpbnQKK3RyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IGxlbiA9IChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbjsKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2c25wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwkvKiBJZiB3ZSBjYW4ndCB3cml0ZSBpdCBhbGwsIGRvbid0IGJvdGhlciB3cml0aW5nIGFueXRoaW5nICovCisJaWYgKHJldCA+PSBsZW4pCisJCXJldHVybiAwOworCisJcy0+bGVuICs9IHJldDsKKworCXJldHVybiBsZW47Cit9CisKK2ludCB0cmFjZV9zZXFfYnByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluYXJ5KQoreworCWludCBsZW4gPSAoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW47CisJaW50IHJldDsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGJzdHJfcHJpbnRmKHMtPmJ1ZmZlciArIHMtPmxlbiwgbGVuLCBmbXQsIGJpbmFyeSk7CisKKwkvKiBJZiB3ZSBjYW4ndCB3cml0ZSBpdCBhbGwsIGRvbid0IGJvdGhlciB3cml0aW5nIGFueXRoaW5nICovCisJaWYgKHJldCA+PSBsZW4pCisJCXJldHVybiAwOworCisJcy0+bGVuICs9IHJldDsKKworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogdHJhY2Vfc2VxX3B1dHMgLSB0cmFjZSBzZXF1ZW5jZSBwcmludGluZyBvZiBzaW1wbGUgc3RyaW5nCisgKiBAczogdHJhY2Ugc2VxdWVuY2UgZGVzY3JpcHRvcgorICogQHN0cjogc2ltcGxlIHN0cmluZyB0byByZWNvcmQKKyAqCisgKiBUaGUgdHJhY2VyIG1heSB1c2UgZWl0aGVyIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KKyAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVGhpcyBmdW5jdGlvbiByZWNvcmRzIGEgc2ltcGxlIHN0cmluZworICogaW50byBhIHNwZWNpYWwgYnVmZmVyIChAcykgZm9yIGxhdGVyIHJldHJpZXZhbCBieSBhIHNlcXVlbmNlcgorICogb3Igb3RoZXIgbWVjaGFuaXNtLgorICovCitpbnQgdHJhY2Vfc2VxX3B1dHMoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqc3RyKQoreworCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKKworCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkocy0+YnVmZmVyICsgcy0+bGVuLCBzdHIsIGxlbik7CisJcy0+bGVuICs9IGxlbjsKKworCXJldHVybiBsZW47Cit9CisKK2ludCB0cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpCit7CisJaWYgKHMtPmxlbiA+PSAoUEFHRV9TSVpFIC0gMSkpCisJCXJldHVybiAwOworCisJcy0+YnVmZmVyW3MtPmxlbisrXSA9IGM7CisKKwlyZXR1cm4gMTsKK30KKworaW50IHRyYWNlX3NlcV9wdXRtZW0oc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkocy0+YnVmZmVyICsgcy0+bGVuLCBtZW0sIGxlbik7CisJcy0+bGVuICs9IGxlbjsKKworCXJldHVybiBsZW47Cit9CisKK2ludCB0cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBoZXhbSEVYX0NIQVJTXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gbWVtOworCWludCBpLCBqOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsZW47IGkrKykgeworI2Vsc2UKKwlmb3IgKGkgPSBsZW4tMSwgaiA9IDA7IGkgPj0gMDsgaS0tKSB7CisjZW5kaWYKKwkJaGV4W2orK10gPSBoZXhfYXNjX2hpKGRhdGFbaV0pOworCQloZXhbaisrXSA9IGhleF9hc2NfbG8oZGF0YVtpXSk7CisJfQorCWhleFtqKytdID0gJyAnOworCisJcmV0dXJuIHRyYWNlX3NlcV9wdXRtZW0ocywgaGV4LCBqKTsKK30KKwordm9pZCAqdHJhY2Vfc2VxX3Jlc2VydmUoc3RydWN0IHRyYWNlX3NlcSAqcywgc2l6ZV90IGxlbikKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gcy0+YnVmZmVyICsgcy0+bGVuOworCXMtPmxlbiArPSBsZW47CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdHJhY2Vfc2VxX3BhdGgoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IHBhdGggKnBhdGgpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWlmIChzLT5sZW4gPj0gKFBBR0VfU0laRSAtIDEpKQorCQlyZXR1cm4gMDsKKwlwID0gZF9wYXRoKHBhdGgsIHMtPmJ1ZmZlciArIHMtPmxlbiwgUEFHRV9TSVpFIC0gcy0+bGVuKTsKKwlpZiAoIUlTX0VSUihwKSkgeworCQlwID0gbWFuZ2xlX3BhdGgocy0+YnVmZmVyICsgcy0+bGVuLCBwLCAiXG4iKTsKKwkJaWYgKHApIHsKKwkJCXMtPmxlbiA9IHAgLSBzLT5idWZmZXI7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSB7CisJCXMtPmJ1ZmZlcltzLT5sZW4rK10gPSAnPyc7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0tSRVRQUk9CRVMKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqa3JldHByb2JlZChjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHRyYW1wX25hbWVbXSA9ICJrcmV0cHJvYmVfdHJhbXBvbGluZSI7CisJaW50IHNpemUgPSBzaXplb2YodHJhbXBfbmFtZSk7CisKKwlpZiAoc3RybmNtcCh0cmFtcF9uYW1lLCBuYW1lLCBzaXplKSA9PSAwKQorCQlyZXR1cm4gIlt1bmtub3duL2tyZXRwcm9iZSdkXSI7CisJcmV0dXJuIG5hbWU7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICprcmV0cHJvYmVkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIG5hbWU7Cit9CisjZW5kaWYgLyogQ09ORklHX0tSRVRQUk9CRVMgKi8KKworc3RhdGljIGludAorc2VxX3ByaW50X3N5bV9zaG9ydChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlrYWxsc3ltc19sb29rdXAoYWRkcmVzcywgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKKworCW5hbWUgPSBrcmV0cHJvYmVkKHN0cik7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCBmbXQsIG5hbWUpOworI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NlcV9wcmludF9zeW1fb2Zmc2V0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKwljb25zdCBjaGFyICpuYW1lOworCisJc3ByaW50X3N5bWJvbChzdHIsIGFkZHJlc3MpOworCW5hbWUgPSBrcmV0cHJvYmVkKHN0cik7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCBmbXQsIG5hbWUpOworI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKKyNpZm5kZWYgQ09ORklHXzY0QklUCisjIGRlZmluZSBJUF9GTVQgIiUwOGx4IgorI2Vsc2UKKyMgZGVmaW5lIElQX0ZNVCAiJTAxNmx4IgorI2VuZGlmCisKK2ludCBzZXFfcHJpbnRfdXNlcl9pcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgdm1zdGFydCA9IDA7CisJaW50IHJldCA9IDE7CisKKwlpZiAobW0pIHsKKwkJY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQl2bWEgPSBmaW5kX3ZtYShtbSwgaXApOworCQlpZiAodm1hKSB7CisJCQlmaWxlID0gdm1hLT52bV9maWxlOworCQkJdm1zdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJCX0KKwkJaWYgKGZpbGUpIHsKKwkJCXJldCA9IHRyYWNlX3NlcV9wYXRoKHMsICZmaWxlLT5mX3BhdGgpOworCQkJaWYgKHJldCkKKwkJCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbKzB4JWx4XSIsCisJCQkJCQkgICAgICAgaXAgLSB2bXN0YXJ0KTsKKwkJfQorCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCX0KKwlpZiAocmV0ICYmICgoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fQUREUikgfHwgIWZpbGUpKQorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPCIgSVBfRk1UICI+IiwgaXApOworCXJldHVybiByZXQ7Cit9CisKK2ludAorc2VxX3ByaW50X3VzZXJpcF9vYmpzKGNvbnN0IHN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7CisJaW50IHJldCA9IDE7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9VU0VST0JKKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwkJLyoKKwkJICogd2UgZG8gdGhlIGxvb2t1cCBvbiB0aGUgdGhyZWFkIGdyb3VwIGxlYWRlciwKKwkJICogc2luY2UgaW5kaXZpZHVhbCB0aHJlYWRzIG1pZ2h0IGhhdmUgYWxyZWFkeSBxdWl0IQorCQkgKi8KKwkJcmN1X3JlYWRfbG9jaygpOworCQl0YXNrID0gZmluZF90YXNrX2J5X3ZwaWQoZW50cnktPmVudC50Z2lkKTsKKwkJaWYgKHRhc2spCisJCQltbSA9IGdldF90YXNrX21tKHRhc2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NUQUNLX0VOVFJJRVM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGlwID0gZW50cnktPmNhbGxlcltpXTsKKworCQlpZiAoaXAgPT0gVUxPTkdfTUFYIHx8ICFyZXQpCisJCQlicmVhazsKKwkJaWYgKGkgJiYgcmV0KQorCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiA8LSAiKTsKKwkJaWYgKCFpcCkgeworCQkJaWYgKHJldCkKKwkJCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiPz8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisJCWlmIChyZXQpCisJCQlyZXQgPSBzZXFfcHJpbnRfdXNlcl9pcChzLCBtbSwgaXAsIHN5bV9mbGFncyk7CisJfQorCisJaWYgKG1tKQorCQltbXB1dChtbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitzZXFfcHJpbnRfaXBfc3ltKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKQoreworCWludCByZXQ7CisKKwlpZiAoIWlwKQorCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiMCIpOworCisJaWYgKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX09GRlNFVCkKKwkJcmV0ID0gc2VxX3ByaW50X3N5bV9vZmZzZXQocywgIiVzIiwgaXApOworCWVsc2UKKwkJcmV0ID0gc2VxX3ByaW50X3N5bV9zaG9ydChzLCAiJXMiLCBpcCk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fQUREUikKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwiIElQX0ZNVCAiPiIsIGlwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitsYXRfcHJpbnRfZ2VuZXJpYyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5LCBpbnQgY3B1KQoreworCWludCBoYXJkaXJxLCBzb2Z0aXJxOworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKworCXRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkLCBjb21tKTsKKwloYXJkaXJxID0gZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19IQVJESVJROworCXNvZnRpcnEgPSBlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX1NPRlRJUlE7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiU4LjhzLSUtNWQgJTNkJWMlYyVjIiwKKwkJCSAgICAgIGNvbW0sIGVudHJ5LT5waWQsIGNwdSwKKwkJCSAgICAgIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0lSUVNfT0ZGKSA/ICdkJyA6CisJCQkJKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSVJRU19OT1NVUFBPUlQpID8KKwkJCQkgICdYJyA6ICcuJywKKwkJCSAgICAgIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX05FRURfUkVTQ0hFRCkgPworCQkJCSdOJyA6ICcuJywKKwkJCSAgICAgIChoYXJkaXJxICYmIHNvZnRpcnEpID8gJ0gnIDoKKwkJCQloYXJkaXJxID8gJ2gnIDogc29mdGlycSA/ICdzJyA6ICcuJykpCisJCXJldHVybiAwOworCisJaWYgKGVudHJ5LT5wcmVlbXB0X2NvdW50KQorCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7CisJcmV0dXJuIHRyYWNlX3NlcV9wdXRzKHMsICIuIik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByZWVtcHRfbWFya190aHJlc2ggPSAxMDA7CisKK3N0YXRpYyBpbnQKK2xhdF9wcmludF90aW1lc3RhbXAoc3RydWN0IHRyYWNlX3NlcSAqcywgdTY0IGFic191c2VjcywKKwkJICAgIHVuc2lnbmVkIGxvbmcgcmVsX3VzZWNzKQoreworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTRsbGR1cyVjOiAiLCBhYnNfdXNlY3MsCisJCQkJcmVsX3VzZWNzID4gcHJlZW1wdF9tYXJrX3RocmVzaCA/ICchJyA6CisJCQkJICByZWxfdXNlY3MgPiAxID8gJysnIDogJyAnKTsKK30KKworaW50IHRyYWNlX3ByaW50X2NvbnRleHQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHQgPSBuczJ1c2VjcyhpdGVyLT50cyk7CisJdW5zaWduZWQgbG9uZyB1c2VjX3JlbSA9IGRvX2Rpdih0LCBVU0VDX1BFUl9TRUMpOworCXVuc2lnbmVkIGxvbmcgc2VjcyA9ICh1bnNpZ25lZCBsb25nKXQ7CisJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworCisJdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5waWQsIGNvbW0pOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiUxNnMtJS01ZCBbJTAzZF0gJTVsdS4lMDZsdTogIiwKKwkJCQljb21tLCBlbnRyeS0+cGlkLCBpdGVyLT5jcHUsIHNlY3MsIHVzZWNfcmVtKTsKK30KKworaW50IHRyYWNlX3ByaW50X2xhdF9jb250ZXh0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwl1NjQgbmV4dF90czsKKwlpbnQgcmV0OworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQsCisJCQkgICAqbmV4dF9lbnRyeSA9IHRyYWNlX2ZpbmRfbmV4dF9lbnRyeShpdGVyLCBOVUxMLAorCQkJCQkJCSAgICAgICAmbmV4dF90cyk7CisJdW5zaWduZWQgbG9uZyB2ZXJib3NlID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9WRVJCT1NFKTsKKwl1bnNpZ25lZCBsb25nIGFic191c2VjcyA9IG5zMnVzZWNzKGl0ZXItPnRzIC0gaXRlci0+dHItPnRpbWVfc3RhcnQpOworCXVuc2lnbmVkIGxvbmcgcmVsX3VzZWNzOworCisJaWYgKCFuZXh0X2VudHJ5KQorCQluZXh0X3RzID0gaXRlci0+dHM7CisJcmVsX3VzZWNzID0gbnMydXNlY3MobmV4dF90cyAtIGl0ZXItPnRzKTsKKworCWlmICh2ZXJib3NlKSB7CisJCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKworCQl0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCwgY29tbSk7CisKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cyAlNWQgJTNkICVkICUwOHggJTA4bHggWyUwOGx4XSIKKwkJCQkgICAgICAgIiAlbGQuJTAzbGRtcyAoKyVsZC4lMDNsZG1zKTogIiwgY29tbSwKKwkJCQkgICAgICAgZW50cnktPnBpZCwgaXRlci0+Y3B1LCBlbnRyeS0+ZmxhZ3MsCisJCQkJICAgICAgIGVudHJ5LT5wcmVlbXB0X2NvdW50LCBpdGVyLT5pZHgsCisJCQkJICAgICAgIG5zMnVzZWNzKGl0ZXItPnRzKSwKKwkJCQkgICAgICAgYWJzX3VzZWNzIC8gVVNFQ19QRVJfTVNFQywKKwkJCQkgICAgICAgYWJzX3VzZWNzICUgVVNFQ19QRVJfTVNFQywKKwkJCQkgICAgICAgcmVsX3VzZWNzIC8gVVNFQ19QRVJfTVNFQywKKwkJCQkgICAgICAgcmVsX3VzZWNzICUgVVNFQ19QRVJfTVNFQyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gbGF0X3ByaW50X2dlbmVyaWMocywgZW50cnksIGl0ZXItPmNwdSk7CisJCWlmIChyZXQpCisJCQlyZXQgPSBsYXRfcHJpbnRfdGltZXN0YW1wKHMsIGFic191c2VjcywgcmVsX3VzZWNzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciBzdGF0ZV90b19jaGFyW10gPSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSOworCitzdGF0aWMgaW50IHRhc2tfc3RhdGVfY2hhcih1bnNpZ25lZCBsb25nIHN0YXRlKQoreworCWludCBiaXQgPSBzdGF0ZSA/IF9fZmZzKHN0YXRlKSArIDEgOiAwOworCisJcmV0dXJuIGJpdCA8IHNpemVvZihzdGF0ZV90b19jaGFyKSAtIDEgPyBzdGF0ZV90b19jaGFyW2JpdF0gOiAnPyc7Cit9CisKKy8qKgorICogZnRyYWNlX2ZpbmRfZXZlbnQgLSBmaW5kIGEgcmVnaXN0ZXJlZCBldmVudAorICogQHR5cGU6IHRoZSB0eXBlIG9mIGV2ZW50IHRvIGxvb2sgZm9yCisgKgorICogUmV0dXJucyBhbiBldmVudCBvZiB0eXBlIEB0eXBlIG90aGVyd2lzZSBOVUxMCisgKi8KK3N0cnVjdCB0cmFjZV9ldmVudCAqZnRyYWNlX2ZpbmRfZXZlbnQoaW50IHR5cGUpCit7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBrZXk7CisKKwlrZXkgPSB0eXBlICYgKEVWRU5UX0hBU0hTSVpFIC0gMSk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsIG4sICZldmVudF9oYXNoW2tleV0sIG5vZGUpIHsKKwkJaWYgKGV2ZW50LT50eXBlID09IHR5cGUpCisJCQlyZXR1cm4gZXZlbnQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmVnaXN0ZXJfZnRyYWNlX2V2ZW50IC0gcmVnaXN0ZXIgb3V0cHV0IGZvciBhbiBldmVudCB0eXBlCisgKiBAZXZlbnQ6IHRoZSBldmVudCB0eXBlIHRvIHJlZ2lzdGVyCisgKgorICogRXZlbnQgdHlwZXMgYXJlIHN0b3JlZCBpbiBhIGhhc2ggYW5kIHRoaXMgaGFzaCBpcyB1c2VkIHRvCisgKiBmaW5kIGEgd2F5IHRvIHByaW50IGFuIGV2ZW50LiBJZiB0aGUgQGV2ZW50LT50eXBlIGlzIHNldAorICogdGhlbiBpdCB3aWxsIHVzZSB0aGF0IHR5cGUsIG90aGVyd2lzZSBpdCB3aWxsIGFzc2lnbiBhCisgKiB0eXBlIHRvIHVzZS4KKyAqCisgKiBJZiB5b3UgYXNzaWduIHlvdXIgb3duIHR5cGUsIHBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgYWRkZWQKKyAqIHRvIHRoZSB0cmFjZV90eXBlIGVudW0gaW4gdHJhY2UuaCwgdG8gYXZvaWQgY29sbGlzaW9ucworICogd2l0aCB0aGUgZHluYW1pYyB0eXBlcy4KKyAqCisgKiBSZXR1cm5zIHRoZSBldmVudCB0eXBlIG51bWJlciBvciB6ZXJvIG9uIGVycm9yLgorICovCitpbnQgcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQga2V5OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmdHJhY2VfZXZlbnRfbXV0ZXgpOworCisJaWYgKCFldmVudCkgeworCQlyZXQgPSBuZXh0X2V2ZW50X3R5cGUrKzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFldmVudC0+dHlwZSkKKwkJZXZlbnQtPnR5cGUgPSBuZXh0X2V2ZW50X3R5cGUrKzsKKwllbHNlIGlmIChldmVudC0+dHlwZSA+IF9fVFJBQ0VfTEFTVF9UWVBFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5lZWQgdG8gYWRkIHR5cGUgdG8gdHJhY2UuaFxuIik7CisJCVdBUk5fT04oMSk7CisJfQorCisJaWYgKGZ0cmFjZV9maW5kX2V2ZW50KGV2ZW50LT50eXBlKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoZXZlbnQtPnRyYWNlID09IE5VTEwpCisJCWV2ZW50LT50cmFjZSA9IHRyYWNlX25vcF9wcmludDsKKwlpZiAoZXZlbnQtPnJhdyA9PSBOVUxMKQorCQlldmVudC0+cmF3ID0gdHJhY2Vfbm9wX3ByaW50OworCWlmIChldmVudC0+aGV4ID09IE5VTEwpCisJCWV2ZW50LT5oZXggPSB0cmFjZV9ub3BfcHJpbnQ7CisJaWYgKGV2ZW50LT5iaW5hcnkgPT0gTlVMTCkKKwkJZXZlbnQtPmJpbmFyeSA9IHRyYWNlX25vcF9wcmludDsKKworCWtleSA9IGV2ZW50LT50eXBlICYgKEVWRU5UX0hBU0hTSVpFIC0gMSk7CisKKwlobGlzdF9hZGRfaGVhZF9yY3UoJmV2ZW50LT5ub2RlLCAmZXZlbnRfaGFzaFtrZXldKTsKKworCXJldCA9IGV2ZW50LT50eXBlOworIG91dDoKKwltdXRleF91bmxvY2soJnRyYWNlX2V2ZW50X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQgLSByZW1vdmUgYSBubyBsb25nZXIgdXNlZCBldmVudAorICogQGV2ZW50OiB0aGUgZXZlbnQgdG8gcmVtb3ZlCisgKi8KK2ludCB1bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudChzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQoreworCW11dGV4X2xvY2soJnRyYWNlX2V2ZW50X211dGV4KTsKKwlobGlzdF9kZWwoJmV2ZW50LT5ub2RlKTsKKwltdXRleF91bmxvY2soJnRyYWNlX2V2ZW50X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKgorICogU3RhbmRhcmQgZXZlbnRzCisgKi8KKworZW51bSBwcmludF9saW5lX3QgdHJhY2Vfbm9wX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKKy8qIFRSQUNFX0ZOICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfZm5fdHJhY2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIGZsYWdzKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKChmbGFncyAmIFRSQUNFX0lURVJfUFJJTlRfUEFSRU5UKSAmJiBmaWVsZC0+cGFyZW50X2lwKSB7CisJCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwtIikpCisJCQlnb3RvIHBhcnRpYWw7CisJCWlmICghc2VxX3ByaW50X2lwX3N5bShzLAorCQkJCSAgICAgIGZpZWxkLT5wYXJlbnRfaXAsCisJCQkJICAgICAgZmxhZ3MpKQorCQkJZ290byBwYXJ0aWFsOworCX0KKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlxuIikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2ZuX3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlbHggJWx4XG4iLAorCQkJICAgICAgZmllbGQtPmlwLAorCQkJICAgICAgZmllbGQtPnBhcmVudF9pcCkpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9mbl9oZXgoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+aXApOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cGFyZW50X2lwKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9mbl9iaW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnBhcmVudF9pcCk7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX2ZuX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX0ZOLAorCS50cmFjZQkJPSB0cmFjZV9mbl90cmFjZSwKKwkucmF3CQk9IHRyYWNlX2ZuX3JhdywKKwkuaGV4CQk9IHRyYWNlX2ZuX2hleCwKKwkuYmluYXJ5CQk9IHRyYWNlX2ZuX2JpbiwKK307CisKKy8qIFRSQUNFX0NUWCBhbiBUUkFDRV9XQUtFICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfY3R4d2FrZV9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgICAgY2hhciAqZGVsaW0pCit7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKwlpbnQgUywgVDsKKworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKKwlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwl0cmFjZV9maW5kX2NtZGxpbmUoZmllbGQtPm5leHRfcGlkLCBjb21tKTsKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwKKwkJCSAgICAgICIgJTVkOiUzZDolYyAlcyBbJTAzZF0gJTVkOiUzZDolYyAlc1xuIiwKKwkJCSAgICAgIGZpZWxkLT5wcmV2X3BpZCwKKwkJCSAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCisJCQkgICAgICBTLCBkZWxpbSwKKwkJCSAgICAgIGZpZWxkLT5uZXh0X2NwdSwKKwkJCSAgICAgIGZpZWxkLT5uZXh0X3BpZCwKKwkJCSAgICAgIGZpZWxkLT5uZXh0X3ByaW8sCisJCQkgICAgICBULCBjb21tKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2N0eF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gdHJhY2VfY3R4d2FrZV9wcmludChpdGVyLCAiPT0+Iik7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV93YWtlX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHRyYWNlX2N0eHdha2VfcHJpbnQoaXRlciwgIiAgKyIpOworfQorCitzdGF0aWMgaW50IHRyYWNlX2N0eHdha2VfcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY2hhciBTKQoreworCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKwlpbnQgVDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCFTKQorCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOworCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiJWQgJWQgJWMgJWQgJWQgJWQgJWNcbiIsCisJCQkgICAgICBmaWVsZC0+cHJldl9waWQsCisJCQkgICAgICBmaWVsZC0+cHJldl9wcmlvLAorCQkJICAgICAgUywKKwkJCSAgICAgIGZpZWxkLT5uZXh0X2NwdSwKKwkJCSAgICAgIGZpZWxkLT5uZXh0X3BpZCwKKwkJCSAgICAgIGZpZWxkLT5uZXh0X3ByaW8sCisJCQkgICAgICBUKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2N0eF9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHRyYWNlX2N0eHdha2VfcmF3KGl0ZXIsIDApOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfd2FrZV9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHRyYWNlX2N0eHdha2VfcmF3KGl0ZXIsICcrJyk7Cit9CisKKworc3RhdGljIGludCB0cmFjZV9jdHh3YWtlX2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGNoYXIgUykKK3sKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJaW50IFQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghUykKKwkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKKworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9wcmlvKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgUyk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X2NwdSk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3BpZCk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3ByaW8pOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBUKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9jdHhfaGV4KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiB0cmFjZV9jdHh3YWtlX2hleChpdGVyLCAwKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3dha2VfaGV4KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiB0cmFjZV9jdHh3YWtlX2hleChpdGVyLCAnKycpOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfY3R4d2FrZV9iaW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3ByaW8pOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3N0YXRlKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3ByaW8pOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3N0YXRlKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfY3R4X2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX0NUWCwKKwkudHJhY2UJCT0gdHJhY2VfY3R4X3ByaW50LAorCS5yYXcJCT0gdHJhY2VfY3R4X3JhdywKKwkuaGV4CQk9IHRyYWNlX2N0eF9oZXgsCisJLmJpbmFyeQkJPSB0cmFjZV9jdHh3YWtlX2JpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2Vfd2FrZV9ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9XQUtFLAorCS50cmFjZQkJPSB0cmFjZV93YWtlX3ByaW50LAorCS5yYXcJCT0gdHJhY2Vfd2FrZV9yYXcsCisJLmhleAkJPSB0cmFjZV93YWtlX2hleCwKKwkuYmluYXJ5CQk9IHRyYWNlX2N0eHdha2VfYmluLAorfTsKKworLyogVFJBQ0VfU1BFQ0lBTCAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3NwZWNpYWxfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiIyAlbGQgJWxkICVsZFxuIiwKKwkJCSAgICAgIGZpZWxkLT5hcmcxLAorCQkJICAgICAgZmllbGQtPmFyZzIsCisJCQkgICAgICBmaWVsZC0+YXJnMykpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zcGVjaWFsX2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMSk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzMpOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3NwZWNpYWxfYmluKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMyk7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3NwZWNpYWxfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfU1BFQ0lBTCwKKwkudHJhY2UJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKKwkucmF3CQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCisJLmhleAkJPSB0cmFjZV9zcGVjaWFsX2hleCwKKwkuYmluYXJ5CQk9IHRyYWNlX3NwZWNpYWxfYmluLAorfTsKKworLyogVFJBQ0VfU1RBQ0sgKi8KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3N0YWNrX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdGFja19lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJaW50IGk7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7CisJCWlmIChpKSB7CisJCQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICIgPD0gIikpCisJCQkJZ290byBwYXJ0aWFsOworCisJCQlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmNhbGxlcltpXSwgZmxhZ3MpKQorCQkJCWdvdG8gcGFydGlhbDsKKwkJfQorCQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpKQorCQkJZ290byBwYXJ0aWFsOworCX0KKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9zdGFja19ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9TVEFDSywKKwkudHJhY2UJCT0gdHJhY2Vfc3RhY2tfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV9zcGVjaWFsX3ByaW50LAorCS5oZXgJCT0gdHJhY2Vfc3BlY2lhbF9oZXgsCisJLmJpbmFyeQkJPSB0cmFjZV9zcGVjaWFsX2JpbiwKK307CisKKy8qIFRSQUNFX1VTRVJfU1RBQ0sgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV91c2VyX3N0YWNrX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCFzZXFfcHJpbnRfdXNlcmlwX29ianMoZmllbGQsIHMsIGZsYWdzKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCF0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKSkKKwkJZ290byBwYXJ0aWFsOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3VzZXJfc3RhY2tfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfVVNFUl9TVEFDSywKKwkudHJhY2UJCT0gdHJhY2VfdXNlcl9zdGFja19wcmludCwKKwkucmF3CQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCisJLmhleAkJPSB0cmFjZV9zcGVjaWFsX2hleCwKKwkuYmluYXJ5CQk9IHRyYWNlX3NwZWNpYWxfYmluLAorfTsKKworLyogVFJBQ0VfQlBSSU5UICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK3RyYWNlX2JwcmludF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCBicHJpbnRfZW50cnkgKmZpZWxkOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIGZsYWdzKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCAiOiAiKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCF0cmFjZV9zZXFfYnByaW50ZihzLCBmaWVsZC0+Zm10LCBmaWVsZC0+YnVmKSkKKwkJZ290byBwYXJ0aWFsOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAordHJhY2VfYnByaW50X3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgYnByaW50X2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICI6ICVseCA6ICIsIGZpZWxkLT5pcCkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX2JwcmludGYocywgZmllbGQtPmZtdCwgZmllbGQtPmJ1ZikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX2JwcmludF9ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9CUFJJTlQsCisJLnRyYWNlCQk9IHRyYWNlX2JwcmludF9wcmludCwKKwkucmF3CQk9IHRyYWNlX2JwcmludF9yYXcsCit9OworCisvKiBUUkFDRV9QUklOVCAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3ByaW50X3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIGZsYWdzKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICI6ICVzIiwgZmllbGQtPmJ1ZikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3ByaW50X3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiMgJWx4ICVzIiwgZmllbGQtPmlwLCBmaWVsZC0+YnVmKSkKKwkJZ290byBwYXJ0aWFsOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3ByaW50X2V2ZW50ID0geworCS50eXBlCSAJPSBUUkFDRV9QUklOVCwKKwkudHJhY2UJCT0gdHJhY2VfcHJpbnRfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV9wcmludF9yYXcsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50c1tdIF9faW5pdGRhdGEgPSB7CisJJnRyYWNlX2ZuX2V2ZW50LAorCSZ0cmFjZV9jdHhfZXZlbnQsCisJJnRyYWNlX3dha2VfZXZlbnQsCisJJnRyYWNlX3NwZWNpYWxfZXZlbnQsCisJJnRyYWNlX3N0YWNrX2V2ZW50LAorCSZ0cmFjZV91c2VyX3N0YWNrX2V2ZW50LAorCSZ0cmFjZV9icHJpbnRfZXZlbnQsCisJJnRyYWNlX3ByaW50X2V2ZW50LAorCU5VTEwKK307CisKK19faW5pdCBzdGF0aWMgaW50IGluaXRfZXZlbnRzKHZvaWQpCit7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgZXZlbnRzW2ldOyBpKyspIHsKKwkJZXZlbnQgPSBldmVudHNbaV07CisKKwkJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KGV2ZW50KTsKKwkJaWYgKCFyZXQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImV2ZW50ICVkIGZhaWxlZCB0byByZWdpc3RlclxuIiwKKwkJCSAgICAgICBldmVudC0+dHlwZSk7CisJCQlXQVJOX09OX09OQ0UoMSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChpbml0X2V2ZW50cyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmggYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiZGUzOQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fVFJBQ0VfRVZFTlRTX0gKKyNkZWZpbmUgX19UUkFDRV9FVkVOVFNfSAorCisjaW5jbHVkZSAidHJhY2UuaCIKKwordHlwZWRlZiBlbnVtIHByaW50X2xpbmVfdCAoKnRyYWNlX3ByaW50X2Z1bmMpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgICAgaW50IGZsYWdzKTsKKworc3RydWN0IHRyYWNlX2V2ZW50IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlub2RlOworCWludAkJCXR5cGU7CisJdHJhY2VfcHJpbnRfZnVuYwl0cmFjZTsKKwl0cmFjZV9wcmludF9mdW5jCXJhdzsKKwl0cmFjZV9wcmludF9mdW5jCWhleDsKKwl0cmFjZV9wcmludF9mdW5jCWJpbmFyeTsKK307CisKK2V4dGVybiBlbnVtIHByaW50X2xpbmVfdAordHJhY2VfcHJpbnRfYnByaW50a19tc2dfb25seShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworZXh0ZXJuIGVudW0gcHJpbnRfbGluZV90Cit0cmFjZV9wcmludF9wcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKworZXh0ZXJuIGludCB0cmFjZV9zZXFfcHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQKK3RyYWNlX3NlcV9icHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5hcnkpOworZXh0ZXJuIGludAorc2VxX3ByaW50X2lwX3N5bShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIGlwLAorCQl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyk7CitleHRlcm4gc3NpemVfdCB0cmFjZV9zZXFfdG9fdXNlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkgc2l6ZV90IGNudCk7CitleHRlcm4gaW50IHRyYWNlX3NlcV9wdXRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnN0cik7CitleHRlcm4gaW50IHRyYWNlX3NlcV9wdXRjKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGNoYXIgYyk7CitleHRlcm4gaW50IHRyYWNlX3NlcV9wdXRtZW0oc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgdHJhY2Vfc2VxX3B1dG1lbV9oZXgoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLAorCQkJCXNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgKnRyYWNlX3NlcV9yZXNlcnZlKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHNpemVfdCBsZW4pOworZXh0ZXJuIGludCB0cmFjZV9zZXFfcGF0aChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgcGF0aCAqcGF0aCk7CitleHRlcm4gaW50IHNlcV9wcmludF91c2VyaXBfb2Jqcyhjb25zdCBzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpOworZXh0ZXJuIGludCBzZXFfcHJpbnRfdXNlcl9pcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpOworCitleHRlcm4gaW50IHRyYWNlX3ByaW50X2NvbnRleHQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKK2V4dGVybiBpbnQgdHJhY2VfcHJpbnRfbGF0X2NvbnRleHQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKworZXh0ZXJuIHN0cnVjdCB0cmFjZV9ldmVudCAqZnRyYWNlX2ZpbmRfZXZlbnQoaW50IHR5cGUpOworZXh0ZXJuIGludCByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpOworCitleHRlcm4gZW51bSBwcmludF9saW5lX3QgdHJhY2Vfbm9wX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJIGludCBmbGFncyk7CisKKyNkZWZpbmUgTUFYX01FTUhFWF9CWVRFUwk4CisjZGVmaW5lIEhFWF9DSEFSUwkJKE1BWF9NRU1IRVhfQllURVMqMiArIDEpCisKKyNkZWZpbmUgU0VRX1BVVF9GSUVMRF9SRVQocywgeCkJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKCF0cmFjZV9zZXFfcHV0bWVtKHMsICYoeCksIHNpemVvZih4KSkpCVwKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgeCkJCQlcCitkbyB7CQkJCQkJCVwKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHgpID4gTUFYX01FTUhFWF9CWVRFUyk7CVwKKwlpZiAoIXRyYWNlX3NlcV9wdXRtZW1faGV4KHMsICYoeCksIHNpemVvZih4KSkpCVwKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9wb3dlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMKaW5kZXggN2JkYTI0OC4uYmFlNzkxZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMKQEAgLTExLDE1ICsxMSwxMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8dHJhY2UvcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqcG93ZXJfdHJhY2U7CiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgdHJhY2VfcG93ZXJfZW5hYmxlZDsKIAorc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfc3RhcnQoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJdW5zaWduZWQgaW50IGxldmVsKQoreworCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJbWVtc2V0KGl0LCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX3RyYWNlKSk7CisJaXQtPnN0YXRlID0gbGV2ZWw7CisJaXQtPnR5cGUgPSB0eXBlOworCWl0LT5zdGFtcCA9IGt0aW1lX2dldCgpOworfQorCisKK3N0YXRpYyB2b2lkIHByb2JlX3Bvd2VyX2VuZChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKKworCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaXQtPmVuZCA9IGt0aW1lX2dldCgpOworCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOworCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9QT1dFUiwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXQ7CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+c3RhdGVfZGF0YSA9ICppdDsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworIG91dDoKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBwcm9iZV9wb3dlcl9tYXJrKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAorCQkJCXVuc2lnbmVkIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9wb3dlciAqZW50cnk7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gcG93ZXJfdHJhY2U7CisKKwlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCisJCXJldHVybjsKKworCW1lbXNldChpdCwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl90cmFjZSkpOworCWl0LT5zdGF0ZSA9IGxldmVsOworCWl0LT50eXBlID0gdHlwZTsKKwlpdC0+c3RhbXAgPSBrdGltZV9nZXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpdC0+ZW5kID0gaXQtPnN0YW1wOworCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOworCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9QT1dFUiwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXQ7CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+c3RhdGVfZGF0YSA9ICppdDsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworIG91dDoKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IHRyYWNpbmdfcG93ZXJfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCisJCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX3N0YXJ0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJwb3dlciB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKKwkJCSIgcHJvYmUgdG8gdHJhY2VfcG93ZXJfZW5kXG4iKTsKKwkJZ290byBmYWlsX3N0YXJ0OworCX0KKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9wb3dlcl9tYXJrKHByb2JlX3Bvd2VyX21hcmspOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCisJCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX21hcmtcbiIpOworCQlnb3RvIGZhaWxfZW5kOworCX0KKwlyZXR1cm4gcmV0OworZmFpbF9lbmQ6CisJdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9lbmQocHJvYmVfcG93ZXJfZW5kKTsKK2ZhaWxfc3RhcnQ6CisJdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9zdGFydChwcm9iZV9wb3dlcl9zdGFydCk7CisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIHZvaWQgc3RhcnRfcG93ZXJfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKQEAgLTMxLDYgKzEyOSwxNCBAQAogCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAwOwogfQogCitzdGF0aWMgdm9pZCBwb3dlcl90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAwOworCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOworCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7CisJdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9tYXJrKHByb2JlX3Bvd2VyX21hcmspOworfQorCiAKIHN0YXRpYyBpbnQgcG93ZXJfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewpAQCAtMzgsNiArMTQ0LDcgQEAKIAlwb3dlcl90cmFjZSA9IHRyOwogCiAJdHJhY2VfcG93ZXJfZW5hYmxlZCA9IDE7CisJdHJhY2luZ19wb3dlcl9yZWdpc3RlcigpOwogCiAJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCiAJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CkBAIC04NSw3ICsxOTIsNyBAQAogCS5pbml0CQk9IHBvd2VyX3RyYWNlX2luaXQsCiAJLnN0YXJ0CQk9IHN0YXJ0X3Bvd2VyX3RyYWNlLAogCS5zdG9wCQk9IHN0b3BfcG93ZXJfdHJhY2UsCi0JLnJlc2V0CQk9IHN0b3BfcG93ZXJfdHJhY2UsCisJLnJlc2V0CQk9IHBvd2VyX3RyYWNlX3Jlc2V0LAogCS5wcmludF9saW5lCT0gcG93ZXJfcHJpbnRfbGluZSwKIH07CiAKQEAgLTk0LDg2ICsyMDEsMyBAQAogCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJnBvd2VyX3RyYWNlcik7CiB9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9wb3dlcl90cmFjZSk7Ci0KLXZvaWQgdHJhY2VfcG93ZXJfc3RhcnQoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCi0JCQkgdW5zaWduZWQgaW50IGxldmVsKQotewotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JbWVtc2V0KGl0LCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX3RyYWNlKSk7Ci0JaXQtPnN0YXRlID0gbGV2ZWw7Ci0JaXQtPnR5cGUgPSB0eXBlOwotCWl0LT5zdGFtcCA9IGt0aW1lX2dldCgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfcG93ZXJfc3RhcnQpOwotCi0KLXZvaWQgdHJhY2VfcG93ZXJfZW5kKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpCi17Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgdHJhY2VfcG93ZXIgKmVudHJ5OwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IHBvd2VyX3RyYWNlOwotCi0JaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpdC0+ZW5kID0ga3RpbWVfZ2V0KCk7Ci0JZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0KLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7Ci0JZW50cnktPmVudC50eXBlID0gVFJBQ0VfUE9XRVI7Ci0JZW50cnktPnN0YXRlX2RhdGEgPSAqaXQ7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKLQotIG91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfcG93ZXJfZW5kKTsKLQotdm9pZCB0cmFjZV9wb3dlcl9tYXJrKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJIHVuc2lnbmVkIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCB0cmFjZV9wb3dlciAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gcG93ZXJfdHJhY2U7Ci0KLQlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCi0JCXJldHVybjsKLQotCW1lbXNldChpdCwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl90cmFjZSkpOwotCWl0LT5zdGF0ZSA9IGxldmVsOwotCWl0LT50eXBlID0gdHlwZTsKLQlpdC0+c3RhbXAgPSBrdGltZV9nZXQoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpdC0+ZW5kID0gaXQtPnN0YW1wOwotCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIDApOwotCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX1BPV0VSOwotCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7Ci0KLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3Bvd2VyX21hcmspOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODE1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiB0cmFjZSBiaW5hcnkgcHJpbnRrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IExhaSBKaWFuZ3NoYW4gPGxhaWpzQGNuLmZ1aml0c3UuY29tPgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSAidHJhY2UuaCIKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisKKy8qCisgKiBtb2R1bGVzIHRyYWNlX3ByaW50aygpJ3MgZm9ybWF0cyBhcmUgYXV0b3NhdmVkIGluIHN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdAorICogd2hpY2ggYXJlIHF1ZXVlZCBvbiB0cmFjZV9icHJpbnRrX2ZtdF9saXN0LgorICovCitzdGF0aWMgTElTVF9IRUFEKHRyYWNlX2JwcmludGtfZm10X2xpc3QpOworCisvKiBzZXJpYWxpemUgYWNjZXNzZXMgdG8gdHJhY2VfYnByaW50a19mbXRfbGlzdCAqLworc3RhdGljIERFRklORV9NVVRFWChidHJhY2VfbXV0ZXgpOworCitzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyIGZtdFswXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRyYWNlX2JwcmludGtfZm10ICpsb29rdXBfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQgKnBvczsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRyYWNlX2JwcmludGtfZm10X2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAocG9zLT5mbXQsIGZtdCkpCisJCQlyZXR1cm4gcG9zOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljCit2b2lkIGhvbGRfbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0KGNvbnN0IGNoYXIgKipzdGFydCwgY29uc3QgY2hhciAqKmVuZCkKK3sKKwljb25zdCBjaGFyICoqaXRlcjsKKworCW11dGV4X2xvY2soJmJ0cmFjZV9tdXRleCk7CisJZm9yIChpdGVyID0gc3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIrKykgeworCQlzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQgKnRiX2ZtdCA9IGxvb2t1cF9mb3JtYXQoKml0ZXIpOworCQlpZiAodGJfZm10KSB7CisJCQkqaXRlciA9IHRiX2ZtdC0+Zm10OworCQkJY29udGludWU7CisJCX0KKworCQl0Yl9mbXQgPSBrbWFsbG9jKG9mZnNldG9mKHN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCwgZm10KQorCQkJCSsgc3RybGVuKCppdGVyKSArIDEsIEdGUF9LRVJORUwpOworCQlpZiAodGJfZm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZ0Yl9mbXQtPmxpc3QsICZ0cmFjZV9icHJpbnRrX2ZtdF9saXN0KTsKKwkJCXN0cmNweSh0Yl9mbXQtPmZtdCwgKml0ZXIpOworCQkJKml0ZXIgPSB0Yl9mbXQtPmZtdDsKKwkJfSBlbHNlCisJCQkqaXRlciA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmYnRyYWNlX211dGV4KTsKK30KKworc3RhdGljIGludCBtb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1vZHVsZSAqbW9kID0gZGF0YTsKKwlpZiAobW9kLT5udW1fdHJhY2VfYnByaW50a19mbXQpIHsKKwkJY29uc3QgY2hhciAqKnN0YXJ0ID0gbW9kLT50cmFjZV9icHJpbnRrX2ZtdF9zdGFydDsKKwkJY29uc3QgY2hhciAqKmVuZCA9IHN0YXJ0ICsgbW9kLT5udW1fdHJhY2VfYnByaW50a19mbXQ7CisKKwkJaWYgKHZhbCA9PSBNT0RVTEVfU1RBVEVfQ09NSU5HKQorCQkJaG9sZF9tb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXQoc3RhcnQsIGVuZCk7CisJfQorCXJldHVybiAwOworfQorCisjZWxzZSAvKiAhQ09ORklHX01PRFVMRVMgKi8KK19faW5pdCBzdGF0aWMgaW50Cittb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KKworCitfX2luaXRkYXRhX29yX21vZHVsZSBzdGF0aWMKK3N0cnVjdCBub3RpZmllcl9ibG9jayBtb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBtb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXRfbm90aWZ5LAorfTsKKworaW50IF9fdHJhY2VfYnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyB7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJaWYgKHVubGlrZWx5KCFmbXQpKQorCQlyZXR1cm4gMDsKKworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHRyYWNlX3ZicHJpbnRrKGlwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3RyYWNlX2JwcmludGspOworCitpbnQgX19mdHJhY2VfdmJwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQorIHsKKwlpZiAodW5saWtlbHkoIWZtdCkpCisJCXJldHVybiAwOworCisJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USykpCisJCXJldHVybiAwOworCisJcmV0dXJuIHRyYWNlX3ZicHJpbnRrKGlwLCBmbXQsIGFwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZnRyYWNlX3ZicHJpbnRrKTsKKworaW50IF9fdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHRyYWNlX3ZwcmludGsoaXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fdHJhY2VfcHJpbnRrKTsKKworaW50IF9fZnRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB0cmFjZV92cHJpbnRrKGlwLCBmbXQsIGFwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZnRyYWNlX3ZwcmludGspOworCitzdGF0aWMgdm9pZCAqCit0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwljb25zdCBjaGFyICoqZm10ID0gbS0+cHJpdmF0ZTsKKwljb25zdCBjaGFyICoqbmV4dCA9IGZtdDsKKworCSgqcG9zKSsrOworCisJaWYgKCh1bnNpZ25lZCBsb25nKWZtdCA+PSAodW5zaWduZWQgbG9uZylfX3N0b3BfX190cmFjZV9icHJpbnRrX2ZtdCkKKwkJcmV0dXJuIE5VTEw7CisKKwluZXh0ID0gZm10OworCW0tPnByaXZhdGUgPSArK25leHQ7CisKKwlyZXR1cm4gZm10OworfQorCitzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXJldHVybiB0X25leHQobSwgTlVMTCwgcG9zKTsKK30KKworc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCWNvbnN0IGNoYXIgKipmbXQgPSB2OworCWNvbnN0IGNoYXIgKnN0ciA9ICpmbXQ7CisJaW50IGk7CisKKwlzZXFfcHJpbnRmKG0sICIweCVseCA6IFwiIiwgKHVuc2lnbmVkIGxvbmcpZm10KTsKKworCS8qCisJICogVGFicyBhbmQgbmV3IGxpbmVzIG5lZWQgdG8gYmUgY29udmVydGVkLgorCSAqLworCWZvciAoaSA9IDA7IHN0cltpXTsgaSsrKSB7CisJCXN3aXRjaCAoc3RyW2ldKSB7CisJCWNhc2UgJ1xuJzoKKwkJCXNlcV9wdXRzKG0sICJcXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQlzZXFfcHV0cyhtLCAiXFx0Iik7CisJCQlicmVhazsKKwkJY2FzZSAnXFwnOgorCQkJc2VxX3B1dHMobSwgIlxcIik7CisJCQlicmVhazsKKwkJY2FzZSAnIic6CisJCQlzZXFfcHV0cyhtLCAiXFxcIiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzZXFfcHV0YyhtLCBzdHJbaV0pOworCQl9CisJfQorCXNlcV9wdXRzKG0sICJcIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X2Zvcm1hdF9zZXFfb3BzID0geworCS5zdGFydCA9IHRfc3RhcnQsCisJLm5leHQgPSB0X25leHQsCisJLnNob3cgPSB0X3Nob3csCisJLnN0b3AgPSB0X3N0b3AsCit9OworCitzdGF0aWMgaW50CitmdHJhY2VfZm9ybWF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmc2hvd19mb3JtYXRfc2VxX29wcyk7CisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJCW0tPnByaXZhdGUgPSBfX3N0YXJ0X19fdHJhY2VfYnByaW50a19mbXQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9mb3JtYXRzX2ZvcHMgPSB7CisJLm9wZW4gPSBmdHJhY2VfZm9ybWF0c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgaW5pdF90cmFjZV9wcmludGtfZnVuY3Rpb25fZXhwb3J0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKwlpZiAoIWRfdHJhY2VyKQorCQlyZXR1cm4gMDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicHJpbnRrX2Zvcm1hdHMiLCAwNDQ0LCBkX3RyYWNlciwKKwkJCQkgICAgTlVMTCwgJmZ0cmFjZV9mb3JtYXRzX2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJ3ByaW50a19mb3JtYXRzJyBlbnRyeVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwoaW5pdF90cmFjZV9wcmludGtfZnVuY3Rpb25fZXhwb3J0KTsKKworc3RhdGljIF9faW5pdCBpbnQgaW5pdF90cmFjZV9wcmludGsodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZtb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXRfbmIpOworfQorCitlYXJseV9pbml0Y2FsbChpbml0X3RyYWNlX3ByaW50ayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKaW5kZXggZGYxNzVjYi4uZGUzNWYyMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwpAQCAtMTgsNiArMTgsNyBAQAogc3RhdGljIGludCBfX3JlYWRfbW9zdGx5CXRyYWNlcl9lbmFibGVkOwogc3RhdGljIGludAkJCXNjaGVkX3JlZjsKIHN0YXRpYyBERUZJTkVfTVVURVgoc2NoZWRfcmVnaXN0ZXJfbXV0ZXgpOworc3RhdGljIGludAkJCXNjaGVkX3N0b3BwZWQ7CiAKIHN0YXRpYyB2b2lkCiBwcm9iZV9zY2hlZF9zd2l0Y2goc3RydWN0IHJxICpfX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCkBAIC0yOCw3ICsyOSw3IEBACiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKLQlpZiAoIXNjaGVkX3JlZikKKwlpZiAoIXNjaGVkX3JlZiB8fCBzY2hlZF9zdG9wcGVkKQogCQlyZXR1cm47CiAKIAl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHByZXYpOwpAQCAtNDMsNyArNDQsNyBAQAogCWRhdGEgPSBjdHhfdHJhY2UtPmRhdGFbY3B1XTsKIAogCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQotCQl0cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZShjdHhfdHJhY2UsIGRhdGEsIHByZXYsIG5leHQsIGZsYWdzLCBwYyk7CisJCXRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKGN0eF90cmFjZSwgcHJldiwgbmV4dCwgZmxhZ3MsIHBjKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTY2LDcgKzY3LDcgQEAKIAlkYXRhID0gY3R4X3RyYWNlLT5kYXRhW2NwdV07CiAKIAlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKLQkJdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2UoY3R4X3RyYWNlLCBkYXRhLCB3YWtlZSwgY3VycmVudCwKKwkJdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2UoY3R4X3RyYWNlLCB3YWtlZSwgY3VycmVudCwKIAkJCQkJICAgZmxhZ3MsIHBjKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTkzLDcgKzk0LDcgQEAKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9zY2hlZF9zd2l0Y2gocHJvYmVfc2NoZWRfc3dpdGNoKTsKIAlpZiAocmV0KSB7CiAJCXByX2luZm8oInNjaGVkIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgotCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc2NoZWR1bGVcbiIpOworCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc3dpdGNoXG4iKTsKIAkJZ290byBmYWlsX2RlcHJvYmVfd2FrZV9uZXc7CiAJfQogCkBAIC0xODUsMTIgKzE4Niw2IEBACiAJY3R4X3RyYWNlID0gdHI7CiB9CiAKLXN0YXRpYyB2b2lkIHN0YXJ0X3NjaGVkX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Ci0JdHJhY2luZ19zdGFydF9zY2hlZF9zd2l0Y2hfcmVjb3JkKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0b3Bfc2NoZWRfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjaW5nX3N0b3Bfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwpAQCAtMTk5LDcgKzE5NCw4IEBACiBzdGF0aWMgaW50IHNjaGVkX3N3aXRjaF90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJY3R4X3RyYWNlID0gdHI7Ci0Jc3RhcnRfc2NoZWRfdHJhY2UodHIpOworCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworCXRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTEsMTMgKzIwNywxMiBAQAogCiBzdGF0aWMgdm9pZCBzY2hlZF9zd2l0Y2hfdHJhY2Vfc3RhcnQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKLQl0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaCgpOworCXNjaGVkX3N0b3BwZWQgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBzY2hlZF9zd2l0Y2hfdHJhY2Vfc3RvcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCXRyYWNpbmdfc3RvcF9zY2hlZF9zd2l0Y2goKTsKKwlzY2hlZF9zdG9wcGVkID0gMTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZXIgc2NoZWRfc3dpdGNoX3RyYWNlIF9fcmVhZF9tb3N0bHkgPQpAQCAtMjI3LDYgKzIyMiw3IEBACiAJLnJlc2V0CQk9IHNjaGVkX3N3aXRjaF90cmFjZV9yZXNldCwKIAkuc3RhcnQJCT0gc2NoZWRfc3dpdGNoX3RyYWNlX3N0YXJ0LAogCS5zdG9wCQk9IHNjaGVkX3N3aXRjaF90cmFjZV9zdG9wLAorCS53YWl0X3BpcGUJPSBwb2xsX3dhaXRfcGlwZSwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9zY2hlZF9zd2l0Y2gsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwppbmRleCA0MmFlMWU3Li4zYzVhZDZiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCkBAIC0yNSwxMiArMjUsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QJKndha2V1cF90YXNrOwogc3RhdGljIGludAkJCXdha2V1cF9jcHU7CiBzdGF0aWMgdW5zaWduZWQJCQl3YWtldXBfcHJpbyA9IC0xOworc3RhdGljIGludAkJCXdha2V1cF9ydDsKIAogc3RhdGljIHJhd19zcGlubG9ja190IHdha2V1cF9sb2NrID0KIAkocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOwogCiBzdGF0aWMgdm9pZCBfX3dha2V1cF9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIAorc3RhdGljIGludCBzYXZlX2xhdF9mbGFnOworCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogLyoKICAqIGlycXNvZmYgdXNlcyBpdHMgb3duIHRyYWNlciBmdW5jdGlvbiB0byBrZWVwIHRoZSBvdmVyaGVhZCBkb3duOgpAQCAtNzEsNyArNzQsNyBAQAogCWlmICh0YXNrX2NwdSh3YWtldXBfdGFzaykgIT0gY3B1KQogCQlnb3RvIHVubG9jazsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogCiAgdW5sb2NrOgogCV9fcmF3X3NwaW5fdW5sb2NrKCZ3YWtldXBfbG9jayk7CkBAIC0xNTEsNyArMTU0LDggQEAKIAlpZiAodW5saWtlbHkoIXRyYWNlcl9lbmFibGVkIHx8IG5leHQgIT0gd2FrZXVwX3Rhc2spKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIGRhdGEsIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOworCXRyYWNlX2Z1bmN0aW9uKHdha2V1cF90cmFjZSwgQ0FMTEVSX0FERFIxLCBDQUxMRVJfQUREUjIsIGZsYWdzLCBwYyk7CisJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2Uod2FrZXVwX3RyYWNlLCBwcmV2LCBuZXh0LCBmbGFncywgcGMpOwogCiAJLyoKIAkgKiB1c2VjcyBjb252ZXJzaW9uIGlzIHNsb3cgc28gd2UgdHJ5IHRvIGRlbGF5IHRoZSBjb252ZXJzaW9uCkBAIC0xODIsMTMgKzE4NiwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX3dha2V1cF9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJaW50IGNwdTsKIAotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJZGF0YSA9IHRyLT5kYXRhW2NwdV07CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKLQl9CiAKIAl3YWtldXBfY3B1ID0gLTE7CiAJd2FrZXVwX3ByaW8gPSAtMTsKQEAgLTIxMyw2ICsyMTQsNyBAQAogc3RhdGljIHZvaWQKIHByb2JlX3dha2V1cChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzdWNjZXNzKQogeworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7CkBAIC0yMjQsNyArMjI2LDcgQEAKIAl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHApOwogCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CiAKLQlpZiAobGlrZWx5KCFydF90YXNrKHApKSB8fAorCWlmICgod2FrZXVwX3J0ICYmICFydF90YXNrKHApKSB8fAogCQkJcC0+cHJpbyA+PSB3YWtldXBfcHJpbyB8fAogCQkJcC0+cHJpbyA+PSBjdXJyZW50LT5wcmlvKQogCQlyZXR1cm47CkBAIC0yNTIsOSArMjU0LDEwIEBACiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAotCXdha2V1cF90cmFjZS0+ZGF0YVt3YWtldXBfY3B1XS0+cHJlZW1wdF90aW1lc3RhbXAgPSBmdHJhY2Vfbm93KGNwdSk7Ci0JdHJhY2VfZnVuY3Rpb24od2FrZXVwX3RyYWNlLCB3YWtldXBfdHJhY2UtPmRhdGFbd2FrZXVwX2NwdV0sCi0JCSAgICAgICBDQUxMRVJfQUREUjEsIENBTExFUl9BRERSMiwgZmxhZ3MsIHBjKTsKKwlkYXRhID0gd2FrZXVwX3RyYWNlLT5kYXRhW3dha2V1cF9jcHVdOworCWRhdGEtPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOworCXRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKHdha2V1cF90cmFjZSwgcCwgY3VycmVudCwgZmxhZ3MsIHBjKTsKKwl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOwogCiBvdXRfbG9ja2VkOgogCV9fcmF3X3NwaW5fdW5sb2NrKCZ3YWtldXBfbG9jayk7CkBAIC0yNjIsMTIgKzI2NSw2IEBACiAJYXRvbWljX2RlYygmd2FrZXVwX3RyYWNlLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIH0KIAotLyoKLSAqIHNhdmVfdHJhY2VyX2VuYWJsZWQgaXMgdXNlZCB0byBzYXZlIHRoZSBzdGF0ZSBvZiB0aGUgdHJhY2VyX2VuYWJsZWQKLSAqIHZhcmlhYmxlIHdoZW4gd2UgZGlzYWJsZSBpdCB3aGVuIHdlIG9wZW4gYSB0cmFjZSBvdXRwdXQgZmlsZS4KLSAqLwotc3RhdGljIGludCBzYXZlX3RyYWNlcl9lbmFibGVkOwotCiBzdGF0aWMgdm9pZCBzdGFydF93YWtldXBfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJaW50IHJldDsKQEAgLTI4OSw3ICsyODYsNyBAQAogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV93YWtldXBfc2NoZWRfc3dpdGNoKTsKIAlpZiAocmV0KSB7CiAJCXByX2luZm8oInNjaGVkIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgotCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc2NoZWR1bGVcbiIpOworCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc3dpdGNoXG4iKTsKIAkJZ290byBmYWlsX2RlcHJvYmVfd2FrZV9uZXc7CiAJfQogCkBAIC0zMDYsMTMgKzMwMywxMCBAQAogCiAJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOwogCi0JaWYgKHRyYWNpbmdfaXNfZW5hYmxlZCgpKSB7CisJaWYgKHRyYWNpbmdfaXNfZW5hYmxlZCgpKQogCQl0cmFjZXJfZW5hYmxlZCA9IDE7Ci0JCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAxOwotCX0gZWxzZSB7CisJZWxzZQogCQl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0JCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAwOwotCX0KIAogCXJldHVybjsKIGZhaWxfZGVwcm9iZV93YWtlX25ldzoKQEAgLTMyNCw1NCArMzE4LDU0IEBACiBzdGF0aWMgdm9pZCBzdG9wX3dha2V1cF90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0Jc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDA7CiAJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CiAJdW5yZWdpc3Rlcl90cmFjZV9zY2hlZF9zd2l0Y2gocHJvYmVfd2FrZXVwX3NjaGVkX3N3aXRjaCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9zY2hlZF93YWtldXBfbmV3KHByb2JlX3dha2V1cCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9zY2hlZF93YWtldXAocHJvYmVfd2FrZXVwKTsKIH0KIAotc3RhdGljIGludCB3YWtldXBfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3N0YXRpYyBpbnQgX193YWtldXBfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKKwlzYXZlX2xhdF9mbGFnID0gdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UOworCXRyYWNlX2ZsYWdzIHw9IFRSQUNFX0lURVJfTEFURU5DWV9GTVQ7CisKIAl0cmFjaW5nX21heF9sYXRlbmN5ID0gMDsKIAl3YWtldXBfdHJhY2UgPSB0cjsKIAlzdGFydF93YWtldXBfdHJhY2VyKHRyKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB3YWtldXBfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwl3YWtldXBfcnQgPSAwOworCXJldHVybiBfX3dha2V1cF90cmFjZXJfaW5pdCh0cik7Cit9CisKK3N0YXRpYyBpbnQgd2FrZXVwX3J0X3RyYWNlcl9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJd2FrZXVwX3J0ID0gMTsKKwlyZXR1cm4gX193YWtldXBfdHJhY2VyX2luaXQodHIpOworfQorCiBzdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJc3RvcF93YWtldXBfdHJhY2VyKHRyKTsKIAkvKiBtYWtlIHN1cmUgd2UgcHV0IGJhY2sgYW55IHRhc2tzIHdlIGFyZSB0cmFjaW5nICovCiAJd2FrZXVwX3Jlc2V0KHRyKTsKKworCWlmICghc2F2ZV9sYXRfZmxhZykKKwkJdHJhY2VfZmxhZ3MgJj0gflRSQUNFX0lURVJfTEFURU5DWV9GTVQ7CiB9CiAKIHN0YXRpYyB2b2lkIHdha2V1cF90cmFjZXJfc3RhcnQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl3YWtldXBfcmVzZXQodHIpOwogCXRyYWNlcl9lbmFibGVkID0gMTsKLQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMTsKIH0KIAogc3RhdGljIHZvaWQgd2FrZXVwX3RyYWNlcl9zdG9wKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2VyX2VuYWJsZWQgPSAwOwotCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX29wZW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCS8qIHN0b3AgdGhlIHRyYWNlIHdoaWxlIGR1bXBpbmcgKi8KLQl0cmFjZXJfZW5hYmxlZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdha2V1cF90cmFjZXJfY2xvc2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCS8qIGZvcmdldCBhYm91dCBhbnkgcHJvY2Vzc2VzIHdlIHdlcmUgcmVjb3JkaW5nICovCi0JaWYgKHNhdmVfdHJhY2VyX2VuYWJsZWQpIHsKLQkJd2FrZXVwX3Jlc2V0KGl0ZXItPnRyKTsKLQkJdHJhY2VyX2VuYWJsZWQgPSAxOwotCX0KIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZXIgd2FrZXVwX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KQEAgLTM4MSw4ICszNzUsMjAgQEAKIAkucmVzZXQJCT0gd2FrZXVwX3RyYWNlcl9yZXNldCwKIAkuc3RhcnQJCT0gd2FrZXVwX3RyYWNlcl9zdGFydCwKIAkuc3RvcAkJPSB3YWtldXBfdHJhY2VyX3N0b3AsCi0JLm9wZW4JCT0gd2FrZXVwX3RyYWNlcl9vcGVuLAotCS5jbG9zZQkJPSB3YWtldXBfdHJhY2VyX2Nsb3NlLAorCS5wcmludF9tYXgJPSAxLAorI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKKwkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3dha2V1cCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXIgd2FrZXVwX3J0X3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KK3sKKwkubmFtZQkJPSAid2FrZXVwX3J0IiwKKwkuaW5pdAkJPSB3YWtldXBfcnRfdHJhY2VyX2luaXQsCisJLnJlc2V0CQk9IHdha2V1cF90cmFjZXJfcmVzZXQsCisJLnN0YXJ0CQk9IHdha2V1cF90cmFjZXJfc3RhcnQsCisJLnN0b3AJCT0gd2FrZXVwX3RyYWNlcl9zdG9wLAorCS53YWl0X3BpcGUJPSBwb2xsX3dhaXRfcGlwZSwKIAkucHJpbnRfbWF4CT0gMSwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF93YWtldXAsCkBAIC0zOTcsNiArNDAzLDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXJldCA9IHJlZ2lzdGVyX3RyYWNlcigmd2FrZXVwX3J0X3RyYWNlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXJldHVybiAwOwogfQogZGV2aWNlX2luaXRjYWxsKGluaXRfd2FrZXVwX3RyYWNlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCmluZGV4IGJjOGU4MGEuLjA4ZjRlYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCkBAIC0xLDUgKzEsNiBAQAogLyogSW5jbHVkZSBpbiB0cmFjZS5jICovCiAKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIApAQCAtOSwxMSArMTAsMTIgQEAKIAljYXNlIFRSQUNFX0ZOOgogCWNhc2UgVFJBQ0VfQ1RYOgogCWNhc2UgVFJBQ0VfV0FLRToKLQljYXNlIFRSQUNFX0NPTlQ6CiAJY2FzZSBUUkFDRV9TVEFDSzoKIAljYXNlIFRSQUNFX1BSSU5UOgogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKIAljYXNlIFRSQUNFX0JSQU5DSDoKKwljYXNlIFRSQUNFX0dSQVBIX0VOVDoKKwljYXNlIFRSQUNFX0dSQVBIX1JFVDoKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtOTksOSArMTAxLDYgQEAKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCi0jZGVmaW5lIF9fU1RSKHgpICN4Ci0jZGVmaW5lIFNUUih4KSBfX1NUUih4KQotCiAvKiBUZXN0IGR5bmFtaWMgY29kZSBtb2RpZmljYXRpb24gYW5kIGZ0cmFjZSBmaWx0ZXJzICovCiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9keW5hbWljX3RyYWNpbmcoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCkBAIC0xMjUsMTcgKzEyNCwxNyBAQAogCWZ1bmMoKTsKIAogCS8qCi0JICogU29tZSBhcmNocyAqY291Z2gqUG93ZXJQQypjb3VnaCogYWRkIGNoYXJhY2h0ZXJzIHRvIHRoZQorCSAqIFNvbWUgYXJjaHMgKmNvdWdoKlBvd2VyUEMqY291Z2gqIGFkZCBjaGFyYWN0ZXJzIHRvIHRoZQogCSAqIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcy4gV2Ugc2ltcGx5IHB1dCBhICcqJyB0bwotCSAqIGFjY29tb2RhdGUgdGhlbS4KKwkgKiBhY2NvbW1vZGF0ZSB0aGVtLgogCSAqLwotCWZ1bmNfbmFtZSA9ICIqIiBTVFIoRFlOX0ZUUkFDRV9URVNUX05BTUUpOworCWZ1bmNfbmFtZSA9ICIqIiBfX3N0cmluZ2lmeShEWU5fRlRSQUNFX1RFU1RfTkFNRSk7CiAKIAkvKiBmaWx0ZXIgb25seSBvbiBvdXIgZnVuY3Rpb24gKi8KIAlmdHJhY2Vfc2V0X2ZpbHRlcihmdW5jX25hbWUsIHN0cmxlbihmdW5jX25hbWUpLCAxKTsKIAogCS8qIGVuYWJsZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yMDksNyArMjA4LDcgQEAKIAlmdHJhY2VfZW5hYmxlZCA9IDE7CiAJdHJhY2VyX2VuYWJsZWQgPSAxOwogCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yNDcsNiArMjQ2LDkwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLwogCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byB0cmFjZSBiZWZvcmUgZGlhZ25vc2luZyBhIGhhbmcgKi8KKyNkZWZpbmUgR1JBUEhfTUFYX0ZVTkNfVEVTVAkxMDAwMDAwMDAKKworc3RhdGljIHZvaWQgX19mdHJhY2VfZHVtcChib29sIGRpc2FibGVfdHJhY2luZyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGdyYXBoX2hhbmdfdGhyZXNoOworCisvKiBXcmFwIHRoZSByZWFsIGZ1bmN0aW9uIGVudHJ5IHByb2JlIHRvIGF2b2lkIHBvc3NpYmxlIGhhbmdpbmcgKi8KK3N0YXRpYyBpbnQgdHJhY2VfZ3JhcGhfZW50cnlfd2F0Y2hkb2coc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlKQoreworCS8qIFRoaXMgaXMgaGFybWxlc3NseSByYWN5LCB3ZSB3YW50IHRvIGFwcHJveGltYXRlbHkgZGV0ZWN0IGEgaGFuZyAqLworCWlmICh1bmxpa2VseSgrK2dyYXBoX2hhbmdfdGhyZXNoID4gR1JBUEhfTUFYX0ZVTkNfVEVTVCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQlVHOiBGdW5jdGlvbiBncmFwaCB0cmFjZXIgaGFuZyFcbiIpOworCQlpZiAoZnRyYWNlX2R1bXBfb25fb29wcykKKwkJCV9fZnRyYWNlX2R1bXAoZmFsc2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gdHJhY2VfZ3JhcGhfZW50cnkodHJhY2UpOworfQorCisvKgorICogUHJldHR5IG11Y2ggdGhlIHNhbWUgdGhhbiBmb3IgdGhlIGZ1bmN0aW9uIHRyYWNlciBmcm9tIHdoaWNoIHRoZSBzZWxmdGVzdAorICogaGFzIGJlZW4gYm9ycm93ZWQuCisgKi8KK2ludAordHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKKwkJCQkJc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisKKwkvKgorCSAqIFNpbXVsYXRlIHRoZSBpbml0KCkgY2FsbGJhY2sgYnV0IHdlIGF0dGFjaCBhIHdhdGNoZG9nIGNhbGxiYWNrCisJICogdG8gZGV0ZWN0IGFuZCByZWNvdmVyIGZyb20gcG9zc2libGUgaGFuZ3MKKwkgKi8KKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKKwkJCQkgICAgJnRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nKTsKKwlpZiAocmV0KSB7CisJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisJdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOworCisJLyogU2xlZXAgZm9yIGEgMS8xMCBvZiBhIHNlY29uZCAqLworCW1zbGVlcCgxMDApOworCisJLyogSGF2ZSB3ZSBqdXN0IHJlY292ZXJlZCBmcm9tIGEgaGFuZz8gKi8KKwlpZiAoZ3JhcGhfaGFuZ190aHJlc2ggPiBHUkFQSF9NQVhfRlVOQ19URVNUKSB7CisJCXRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQgPSB0cnVlOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJdHJhY2luZ19zdG9wKCk7CisKKwkvKiBjaGVjayB0aGUgdHJhY2UgYnVmZmVyICovCisJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsICZjb3VudCk7CisKKwl0cmFjZS0+cmVzZXQodHIpOworCXRyYWNpbmdfc3RhcnQoKTsKKworCWlmICghcmV0ICYmICFjb3VudCkgeworCQlwcmludGsoS0VSTl9DT05UICIuLiBubyBlbnRyaWVzIGZvdW5kIC4uIik7CisJCXJldCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBEb24ndCB0ZXN0IGR5bmFtaWMgdHJhY2luZywgdGhlIGZ1bmN0aW9uIHRyYWNlciBhbHJlYWR5IGRpZCAqLworCitvdXQ6CisJLyogU3RvcCBpdCBpZiB3ZSBmYWlsZWQgKi8KKwlpZiAocmV0KQorCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCisKKwogI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgogaW50CiB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2lycXNvZmYoc3RydWN0IHRyYWNlciAqdHJhY2UsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCkBAIC0yNTYsNyArMzM5LDcgQEAKIAlpbnQgcmV0OwogCiAJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtMjY4LDYgKzM1MSwxNCBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJdWRlbGF5KDEwMCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJLyoKKwkgKiBTdG9wIHRoZSB0cmFjZXIgdG8gYXZvaWQgYSB3YXJuaW5nIHN1YnNlcXVlbnQKKwkgKiB0byBidWZmZXIgZmxpcHBpbmcgZmFpbHVyZSBiZWNhdXNlIHRyYWNpbmdfc3RvcCgpCisJICogZGlzYWJsZXMgdGhlIHRyIGFuZCBtYXggYnVmZmVycywgbWFraW5nIGZsaXBwaW5nIGltcG9zc2libGUKKwkgKiBpbiBjYXNlIG9mIHBhcmFsbGVscyBtYXggaXJxcyBvZmYgbGF0ZW5jaWVzLgorCSAqLworCXRyYWNlLT5zdG9wKHRyKTsKIAkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwogCXRyYWNpbmdfc3RvcCgpOwogCS8qIGNoZWNrIGJvdGggdHJhY2UgYnVmZmVycyAqLwpAQCAtMzEwLDcgKzQwMSw3IEBACiAJfQogCiAJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtMzIyLDYgKzQxMywxNCBAQAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXVkZWxheSgxMDApOwogCXByZWVtcHRfZW5hYmxlKCk7CisKKwkvKgorCSAqIFN0b3AgdGhlIHRyYWNlciB0byBhdm9pZCBhIHdhcm5pbmcgc3Vic2VxdWVudAorCSAqIHRvIGJ1ZmZlciBmbGlwcGluZyBmYWlsdXJlIGJlY2F1c2UgdHJhY2luZ19zdG9wKCkKKwkgKiBkaXNhYmxlcyB0aGUgdHIgYW5kIG1heCBidWZmZXJzLCBtYWtpbmcgZmxpcHBpbmcgaW1wb3NzaWJsZQorCSAqIGluIGNhc2Ugb2YgcGFyYWxsZWxzIG1heCBwcmVlbXB0IG9mZiBsYXRlbmNpZXMuCisJICovCisJdHJhY2UtPnN0b3AodHIpOwogCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCiAJdHJhY2luZ19zdG9wKCk7CiAJLyogY2hlY2sgYm90aCB0cmFjZSBidWZmZXJzICovCkBAIC0zNjQsMTAgKzQ2MywxMCBAQAogCX0KIAogCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X25vX3N0YXJ0OwogCX0KIAogCS8qIHJlc2V0IHRoZSBtYXggbGF0ZW5jeSAqLwpAQCAtMzgxLDMxICs0ODAsMzUgQEAKIAkvKiByZXZlcnNlIHRoZSBvcmRlciBvZiBwcmVlbXB0IHZzIGlycXMgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwkvKgorCSAqIFN0b3AgdGhlIHRyYWNlciB0byBhdm9pZCBhIHdhcm5pbmcgc3Vic2VxdWVudAorCSAqIHRvIGJ1ZmZlciBmbGlwcGluZyBmYWlsdXJlIGJlY2F1c2UgdHJhY2luZ19zdG9wKCkKKwkgKiBkaXNhYmxlcyB0aGUgdHIgYW5kIG1heCBidWZmZXJzLCBtYWtpbmcgZmxpcHBpbmcgaW1wb3NzaWJsZQorCSAqIGluIGNhc2Ugb2YgcGFyYWxsZWxzIG1heCBpcnFzL3ByZWVtcHQgb2ZmIGxhdGVuY2llcy4KKwkgKi8KKwl0cmFjZS0+c3RvcCh0cik7CiAJLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KIAl0cmFjaW5nX3N0b3AoKTsKIAkvKiBjaGVjayBib3RoIHRyYWNlIGJ1ZmZlcnMgKi8KIAlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQl0cmFjaW5nX3N0YXJ0KCk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JfQogCiAJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIoJm1heF90ciwgJmNvdW50KTsKLQlpZiAocmV0KSB7Ci0JCXRyYWNpbmdfc3RhcnQoKTsKKwlpZiAocmV0KQogCQlnb3RvIG91dDsKLQl9CiAKIAlpZiAoIXJldCAmJiAhY291bnQpIHsKIAkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gbm8gZW50cmllcyBmb3VuZCAuLiIpOwogCQlyZXQgPSAtMTsKLQkJdHJhY2luZ19zdGFydCgpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBkbyB0aGUgdGVzdCBieSBkaXNhYmxpbmcgaW50ZXJydXB0cyBmaXJzdCB0aGlzIHRpbWUgKi8KIAl0cmFjaW5nX21heF9sYXRlbmN5ID0gMDsKIAl0cmFjaW5nX3N0YXJ0KCk7CisJdHJhY2UtPnN0YXJ0KHRyKTsKKwogCXByZWVtcHRfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJdWRlbGF5KDEwMCk7CkBAIC00MTMsNiArNTE2LDcgQEAKIAkvKiByZXZlcnNlIHRoZSBvcmRlciBvZiBwcmVlbXB0IHZzIGlycXMgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwl0cmFjZS0+c3RvcCh0cik7CiAJLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KIAl0cmFjaW5nX3N0b3AoKTsKIAkvKiBjaGVjayBib3RoIHRyYWNlIGJ1ZmZlcnMgKi8KQEAgLTQyOCw5ICs1MzIsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0gb3V0OgotCXRyYWNlLT5yZXNldCh0cik7CitvdXQ6CiAJdHJhY2luZ19zdGFydCgpOworb3V0X25vX3N0YXJ0OgorCXRyYWNlLT5yZXNldCh0cik7CiAJdHJhY2luZ19tYXhfbGF0ZW5jeSA9IHNhdmVfbWF4OwogCiAJcmV0dXJuIHJldDsKQEAgLTQ5Niw3ICs2MDEsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlzcnQpOwogCiAJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTU3LDcgKzY2Miw3IEBACiAJaW50IHJldDsKIAogCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTU4OSwzNCArNjk0LDcgQEAKIAlpbnQgcmV0OwogCiAJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7Ci0JaWYgKHJldCkgewotCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogU2xlZXAgZm9yIGEgMS8xMCBvZiBhIHNlY29uZCAqLwotCW1zbGVlcCgxMDApOwotCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCi0JdHJhY2luZ19zdG9wKCk7Ci0JLyogY2hlY2sgdGhlIHRyYWNlIGJ1ZmZlciAqLwotCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyKHRyLCAmY291bnQpOwotCXRyYWNlLT5yZXNldCh0cik7Ci0JdHJhY2luZ19zdGFydCgpOwotCi0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU1lTUFJPRl9UUkFDRVIgKi8KLQotI2lmZGVmIENPTkZJR19CUkFOQ0hfVFJBQ0VSCi1pbnQKLXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfYnJhbmNoKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JaW50IHJldDsKLQotCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTYzMSw2ICs3MDksNDMgQEAKIAl0cmFjZS0+cmVzZXQodHIpOwogCXRyYWNpbmdfc3RhcnQoKTsKIAorCWlmICghcmV0ICYmICFjb3VudCkgeworCQlwcmludGsoS0VSTl9DT05UICIuLiBubyBlbnRyaWVzIGZvdW5kIC4uIik7CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1NZU1BST0ZfVFJBQ0VSICovCisKKyNpZmRlZiBDT05GSUdfQlJBTkNIX1RSQUNFUgoraW50Cit0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2JyYW5jaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCWludCByZXQ7CisKKwkvKiBzdGFydCB0aGUgdHJhY2luZyAqLworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CisJaWYgKHJldCkgeworCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTbGVlcCBmb3IgYSAxLzEwIG9mIGEgc2Vjb25kICovCisJbXNsZWVwKDEwMCk7CisJLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KKwl0cmFjaW5nX3N0b3AoKTsKKwkvKiBjaGVjayB0aGUgdHJhY2UgYnVmZmVyICovCisJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsICZjb3VudCk7CisJdHJhY2UtPnJlc2V0KHRyKTsKKwl0cmFjaW5nX3N0YXJ0KCk7CisKKwlpZiAoIXJldCAmJiAhY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gbm8gZW50cmllcyBmb3VuZCAuLiIpOworCQlyZXQgPSAtMTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmIC8qIENPTkZJR19CUkFOQ0hfVFJBQ0VSICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCmluZGV4IGQwODcxYmMuLmM3NTBmNjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCkBAIC0yNDUsMTYgKzI0NSwzMSBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X2Rpc2FibGVkKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzZXFfcHV0cyhtLCAiI1xuIgorCQkgIiMgIFN0YWNrIHRyYWNlciBkaXNhYmxlZFxuIgorCQkgIiNcbiIKKwkJICIjIFRvIGVuYWJsZSB0aGUgc3RhY2sgdHJhY2VyLCBlaXRoZXIgYWRkICdzdGFja3RyYWNlJyB0byB0aGVcbiIKKwkJICIjIGtlcm5lbCBjb21tYW5kIGxpbmVcbiIKKwkJICIjIG9yICdlY2hvIDEgPiAvcHJvYy9zeXMva2VybmVsL3N0YWNrX3RyYWNlcl9lbmFibGVkJ1xuIgorCQkgIiNcbiIpOworfQorCiBzdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJbG9uZyBpOwogCWludCBzaXplOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYobSwgIiAgICAgICAgRGVwdGggICBTaXplICAgICAgTG9jYXRpb24iCisJCXNlcV9wcmludGYobSwgIiAgICAgICAgRGVwdGggICAgU2l6ZSAgIExvY2F0aW9uIgogCQkJICAgIiAgICAoJWQgZW50cmllcylcbiIKLQkJCSAgICIgICAgICAgIC0tLS0tICAgLS0tLSAgICAgIC0tLS0tLS0tXG4iLAorCQkJICAgIiAgICAgICAgLS0tLS0gICAgLS0tLSAgIC0tLS0tLS0tXG4iLAogCQkJICAgbWF4X3N0YWNrX3RyYWNlLm5yX2VudHJpZXMpOworCisJCWlmICghc3RhY2tfdHJhY2VyX2VuYWJsZWQgJiYgIW1heF9zdGFja19zaXplKQorCQkJcHJpbnRfZGlzYWJsZWQobSk7CisKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RlYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIEluZnJhc3RydWN0dXJlIGZvciBzdGF0aXN0aWMgdHJhY2luZyAoaGlzdG9ncmFtIG91dHB1dCkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgY29kZSBmcm9tIHRyYWNlX2JyYW5jaC5jIHdoaWNoIGlzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSAidHJhY2Vfc3RhdC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisKKworLyogTGlzdCBvZiBzdGF0IGVudHJpZXMgZnJvbSBhIHRyYWNlciAqLworc3RydWN0IHRyYWNlX3N0YXRfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXZvaWQJCQkqc3RhdDsKK307CisKKy8qIEEgc3RhdCBzZXNzaW9uIGlzIHRoZSBzdGF0cyBvdXRwdXQgaW4gb25lIGZpbGUgKi8KK3N0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNlc3Npb25fbGlzdDsKKwlzdHJ1Y3QgdHJhY2VyX3N0YXQJKnRzOworCXN0cnVjdCBsaXN0X2hlYWQJc3RhdF9saXN0OworCXN0cnVjdCBtdXRleAkJc3RhdF9tdXRleDsKKwlzdHJ1Y3QgZGVudHJ5CQkqZmlsZTsKK307CisKKy8qIEFsbCBvZiB0aGUgc2Vzc2lvbnMgY3VycmVudGx5IGluIHVzZS4gRWFjaCBzdGF0IGZpbGUgZW1iZWQgb25lIHNlc3Npb24gKi8KK3N0YXRpYyBMSVNUX0hFQUQoYWxsX3N0YXRfc2Vzc2lvbnMpOworc3RhdGljIERFRklORV9NVVRFWChhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisKKy8qIFRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIHN0YXQgZmlsZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5CQkqc3RhdF9kaXI7CisKKworc3RhdGljIHZvaWQgcmVzZXRfc3RhdF9zZXNzaW9uKHN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCB0cmFjZV9zdGF0X2xpc3QgKm5vZGUsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5leHQsICZzZXNzaW9uLT5zdGF0X2xpc3QsIGxpc3QpCisJCWtmcmVlKG5vZGUpOworCisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPnN0YXRfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfc2Vzc2lvbihzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShzZXNzaW9uLT5maWxlKTsKKwlyZXNldF9zdGF0X3Nlc3Npb24oc2Vzc2lvbik7CisJbXV0ZXhfZGVzdHJveSgmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisJa2ZyZWUoc2Vzc2lvbik7Cit9CisKKy8qCisgKiBGb3IgdHJhY2VycyB0aGF0IGRvbid0IHByb3ZpZGUgYSBzdGF0X2NtcCBjYWxsYmFjay4KKyAqIFRoaXMgb25lIHdpbGwgZm9yY2UgYW4gaW1tZWRpYXRlIGluc2VydGlvbiBvbiB0YWlsIG9mCisgKiB0aGUgbGlzdC4KKyAqLworc3RhdGljIGludCBkdW1teV9jbXAodm9pZCAqcDEsIHZvaWQgKnAyKQoreworCXJldHVybiAxOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgc3RhdCBsaXN0IGF0IGVhY2ggdHJhY2Vfc3RhdCBmaWxlIG9wZW5pbmcuCisgKiBBbGwgb2YgdGhlc2UgY29waWVzIGFuZCBzb3J0aW5nIGFyZSByZXF1aXJlZCBvbiBhbGwgb3BlbmluZworICogc2luY2UgdGhlIHN0YXRzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHR3byBmaWxlIHNlc3Npb25zLgorICovCitzdGF0aWMgaW50IHN0YXRfc2VxX2luaXQoc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHRyYWNlX3N0YXRfbGlzdCAqaXRlcl9lbnRyeSwgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdHJhY2VyX3N0YXQgKnRzID0gc2Vzc2lvbi0+dHM7CisJdm9pZCAqc3RhdDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCXJlc2V0X3N0YXRfc2Vzc2lvbihzZXNzaW9uKTsKKworCWlmICghdHMtPnN0YXRfY21wKQorCQl0cy0+c3RhdF9jbXAgPSBkdW1teV9jbXA7CisKKwlzdGF0ID0gdHMtPnN0YXRfc3RhcnQoKTsKKwlpZiAoIXN0YXQpCisJCWdvdG8gZXhpdDsKKworCS8qCisJICogVGhlIGZpcnN0IGVudHJ5LiBBY3R1YWxseSB0aGlzIGlzIHRoZSBzZWNvbmQsIGJ1dCB0aGUgZmlyc3QKKwkgKiBvbmUgKHRoZSBzdGF0X2xpc3QgaGVhZCkgaXMgcG9pbnRsZXNzLgorCSAqLworCW5ld19lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFjZV9zdGF0X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19lbnRyeSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJm5ld19lbnRyeS0+bGlzdCk7CisKKwlsaXN0X2FkZCgmbmV3X2VudHJ5LT5saXN0LCAmc2Vzc2lvbi0+c3RhdF9saXN0KTsKKworCW5ld19lbnRyeS0+c3RhdCA9IHN0YXQ7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciB0aGUgdHJhY2VyIHN0YXQgZW50cmllcyBhbmQgc3RvcmUgdGhlbSBpbiBhIHNvcnRlZAorCSAqIGxpc3QuCisJICovCisJZm9yIChpID0gMTsgOyBpKyspIHsKKwkJc3RhdCA9IHRzLT5zdGF0X25leHQoc3RhdCwgaSk7CisKKwkJLyogRW5kIG9mIGluc2VydGlvbiAqLworCQlpZiAoIXN0YXQpCisJCQlicmVhazsKKworCQluZXdfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X2VudHJ5KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0X2ZyZWVfbGlzdDsKKwkJfQorCisJCUlOSVRfTElTVF9IRUFEKCZuZXdfZW50cnktPmxpc3QpOworCQluZXdfZW50cnktPnN0YXQgPSBzdGF0OworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShpdGVyX2VudHJ5LCAmc2Vzc2lvbi0+c3RhdF9saXN0LAorCQkJCWxpc3QpIHsKKworCQkJLyogSW5zZXJ0aW9uIHdpdGggYSBkZXNjZW5kZW50IHNvcnRpbmcgKi8KKwkJCWlmICh0cy0+c3RhdF9jbXAoaXRlcl9lbnRyeS0+c3RhdCwKKwkJCQkJbmV3X2VudHJ5LT5zdGF0KSA+PSAwKSB7CisKKwkJCQlsaXN0X2FkZCgmbmV3X2VudHJ5LT5saXN0LCAmaXRlcl9lbnRyeS0+bGlzdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBUaGUgY3VycmVudCBsYXJnZXIgdmFsdWUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJm5ld19lbnRyeS0+bGlzdCkpCisJCQlsaXN0X2FkZCgmbmV3X2VudHJ5LT5saXN0LCAmc2Vzc2lvbi0+c3RhdF9saXN0KTsKKwl9CitleGl0OgorCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisJcmV0dXJuIHJldDsKKworZXhpdF9mcmVlX2xpc3Q6CisJcmVzZXRfc3RhdF9zZXNzaW9uKHNlc3Npb24pOworCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgdm9pZCAqc3RhdF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IHMtPnByaXZhdGU7CisKKwkvKiBQcmV2ZW50IGZyb20gdHJhY2VyIHN3aXRjaCBvciBzdGF0X2xpc3QgbW9kaWZpY2F0aW9uICovCisJbXV0ZXhfbG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisKKwkvKiBJZiB3ZSBhcmUgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgcHJpbnQgdGhlIGhlYWRlcnMgKi8KKwlpZiAoISpwb3MgJiYgc2Vzc2lvbi0+dHMtPnN0YXRfaGVhZGVycykKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKworCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2Vzc2lvbi0+c3RhdF9saXN0LCAqcG9zKTsKK30KKworc3RhdGljIHZvaWQgKnN0YXRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IHMtPnByaXZhdGU7CisKKwlpZiAocCA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2Vzc2lvbi0+c3RhdF9saXN0LCAqcG9zKTsKKworCXJldHVybiBzZXFfbGlzdF9uZXh0KHAsICZzZXNzaW9uLT5zdGF0X2xpc3QsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uID0gcy0+cHJpdmF0ZTsKKwltdXRleF91bmxvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHN0YXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0ICpsID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0LCBsaXN0KTsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJcmV0dXJuIHNlc3Npb24tPnRzLT5zdGF0X2hlYWRlcnMocyk7CisKKwlyZXR1cm4gc2Vzc2lvbi0+dHMtPnN0YXRfc2hvdyhzLCBsLT5zdGF0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0cmFjZV9zdGF0X3NlcV9vcHMgPSB7CisJLnN0YXJ0CQk9IHN0YXRfc2VxX3N0YXJ0LAorCS5uZXh0CQk9IHN0YXRfc2VxX25leHQsCisJLnN0b3AJCT0gc3RhdF9zZXFfc3RvcCwKKwkuc2hvdwkJPSBzdGF0X3NlcV9zaG93Cit9OworCisvKiBUaGUgc2Vzc2lvbiBzdGF0IGlzIHJlZmlsbGVkIGFuZCByZXNvcnRlZCBhdCBlYWNoIHN0YXQgZmlsZSBvcGVuaW5nICovCitzdGF0aWMgaW50IHRyYWNpbmdfc3RhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQ7CisKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmdHJhY2Vfc3RhdF9zZXFfb3BzKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCW0tPnByaXZhdGUgPSBzZXNzaW9uOworCQlyZXQgPSBzdGF0X3NlcV9pbml0KHNlc3Npb24pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBdm9pZCBjb25zdW1pbmcgbWVtb3J5IHdpdGggb3VyIG5vdyB1c2VsZXNzIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgdHJhY2luZ19zdGF0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZmlsZSAqZikKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IGktPmlfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCXJlc2V0X3N0YXRfc2Vzc2lvbihzZXNzaW9uKTsKKwltdXRleF91bmxvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfc3RhdF9mb3BzID0geworCS5vcGVuCQk9IHRyYWNpbmdfc3RhdF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gdHJhY2luZ19zdGF0X3JlbGVhc2UKK307CisKK3N0YXRpYyBpbnQgdHJhY2luZ19zdGF0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNpbmc7CisKKwlkX3RyYWNpbmcgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisKKwlzdGF0X2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidHJhY2Vfc3RhdCIsIGRfdHJhY2luZyk7CisJaWYgKCFzdGF0X2RpcikKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICIndHJhY2Vfc3RhdCcgZW50cnlcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfc3RhdF9maWxlKHN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uKQoreworCWlmICghc3RhdF9kaXIgJiYgdHJhY2luZ19zdGF0X2luaXQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzZXNzaW9uLT5maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShzZXNzaW9uLT50cy0+bmFtZSwgMDY0NCwKKwkJCQkJICAgIHN0YXRfZGlyLAorCQkJCQkgICAgc2Vzc2lvbiwgJnRyYWNpbmdfc3RhdF9mb3BzKTsKKwlpZiAoIXNlc3Npb24tPmZpbGUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitpbnQgcmVnaXN0ZXJfc3RhdF90cmFjZXIoc3RydWN0IHRyYWNlcl9zdGF0ICp0cmFjZSkKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiwgKm5vZGUsICp0bXA7CisJaW50IHJldDsKKworCWlmICghdHJhY2UpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCF0cmFjZS0+c3RhdF9zdGFydCB8fCAhdHJhY2UtPnN0YXRfbmV4dCB8fCAhdHJhY2UtPnN0YXRfc2hvdykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQ/ICovCisJbXV0ZXhfbG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCB0bXAsICZhbGxfc3RhdF9zZXNzaW9ucywgc2Vzc2lvbl9saXN0KSB7CisJCWlmIChub2RlLT50cyA9PSB0cmFjZSkgeworCQkJbXV0ZXhfdW5sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKworCS8qIEluaXQgdGhlIHNlc3Npb24gKi8KKwlzZXNzaW9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlc3Npb24pCisJCXJldHVybiAtRU5PTUVNOworCisJc2Vzc2lvbi0+dHMgPSB0cmFjZTsKKwlJTklUX0xJU1RfSEVBRCgmc2Vzc2lvbi0+c2Vzc2lvbl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmc2Vzc2lvbi0+c3RhdF9saXN0KTsKKwltdXRleF9pbml0KCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKwlzZXNzaW9uLT5maWxlID0gTlVMTDsKKworCXJldCA9IGluaXRfc3RhdF9maWxlKHNlc3Npb24pOworCWlmIChyZXQpIHsKKwkJZGVzdHJveV9zZXNzaW9uKHNlc3Npb24pOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJlZ2lzdGVyICovCisJbXV0ZXhfbG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJnNlc3Npb24tPnNlc3Npb25fbGlzdCwgJmFsbF9zdGF0X3Nlc3Npb25zKTsKKwltdXRleF91bmxvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKworCXJldHVybiAwOworfQorCit2b2lkIHVucmVnaXN0ZXJfc3RhdF90cmFjZXIoc3RydWN0IHRyYWNlcl9zdGF0ICp0cmFjZSkKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqbm9kZSwgKnRtcDsKKworCW11dGV4X2xvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgdG1wLCAmYWxsX3N0YXRfc2Vzc2lvbnMsIHNlc3Npb25fbGlzdCkgeworCQlpZiAobm9kZS0+dHMgPT0gdHJhY2UpIHsKKwkJCWxpc3RfZGVsKCZub2RlLT5zZXNzaW9uX2xpc3QpOworCQkJZGVzdHJveV9zZXNzaW9uKG5vZGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5oIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDIyNzRjCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9fVFJBQ0VfU1RBVF9ICisjZGVmaW5lIF9fVFJBQ0VfU1RBVF9ICisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisvKgorICogSWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhIHN0YXQgZmlsZSAob25lLXNob3Qgc3RhdGlzdGljcyksIGZpbGwKKyAqIGFuIGl0ZXJhdG9yIHdpdGggc3RhdF9zdGFydC9zdGF0X25leHQgYW5kIGEgc3RhdF9zaG93IGNhbGxiYWNrcy4KKyAqIFRoZSBvdGhlcnMgY2FsbGJhY2tzIGFyZSBvcHRpb25hbC4KKyAqLworc3RydWN0IHRyYWNlcl9zdGF0IHsKKwkvKiBUaGUgbmFtZSBvZiB5b3VyIHN0YXQgZmlsZSAqLworCWNvbnN0IGNoYXIJCSpuYW1lOworCS8qIEl0ZXJhdGlvbiBvdmVyIHN0YXRpc3RpYyBlbnRyaWVzICovCisJdm9pZAkJCSooKnN0YXRfc3RhcnQpKHZvaWQpOworCXZvaWQJCQkqKCpzdGF0X25leHQpKHZvaWQgKnByZXYsIGludCBpZHgpOworCS8qIENvbXBhcmUgdHdvIGVudHJpZXMgZm9yIHN0YXRzIHNvcnRpbmcgKi8KKwlpbnQJCQkoKnN0YXRfY21wKSh2b2lkICpwMSwgdm9pZCAqcDIpOworCS8qIFByaW50IGEgc3RhdCBlbnRyeSAqLworCWludAkJCSgqc3RhdF9zaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApOworCS8qIFByaW50IHRoZSBoZWFkZXJzIG9mIHlvdXIgc3RhdCBlbnRyaWVzICovCisJaW50CQkJKCpzdGF0X2hlYWRlcnMpKHN0cnVjdCBzZXFfZmlsZSAqcyk7Cit9OworCisvKgorICogRGVzdHJveSBvciBjcmVhdGUgYSBzdGF0IGZpbGUKKyAqLworZXh0ZXJuIGludCByZWdpc3Rlcl9zdGF0X3RyYWNlcihzdHJ1Y3QgdHJhY2VyX3N0YXQgKnRyYWNlKTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfc3RhdF90cmFjZXIoc3RydWN0IHRyYWNlcl9zdGF0ICp0cmFjZSk7CisKKyNlbmRpZiAvKiBfX1RSQUNFX1NUQVRfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmEzYWYyCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKQEAgLTAsMCArMSwyNTAgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbC5oPgorCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKworLyogS2VlcCBhIGNvdW50ZXIgb2YgdGhlIHN5c2NhbGwgdHJhY2luZyB1c2VycyAqLworc3RhdGljIGludCByZWZjb3VudDsKKworLyogUHJldmVudCBmcm9tIHJhY2VzIG9uIHRocmVhZCBmbGFncyB0b2dnbGluZyAqLworc3RhdGljIERFRklORV9NVVRFWChzeXNjYWxsX3RyYWNlX2xvY2spOworCisvKiBPcHRpb24gdG8gZGlzcGxheSB0aGUgcGFyYW1ldGVycyB0eXBlcyAqLworZW51bSB7CisJVFJBQ0VfU1lTQ0FMTFNfT1BUX1RZUEVTID0gMHgxLAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IHN5c2NhbGxzX29wdHNbXSA9IHsKKwl7IFRSQUNFUl9PUFQoc3lzY2FsbF9hcmdfdHlwZSwgVFJBQ0VfU1lTQ0FMTFNfT1BUX1RZUEVTKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3Mgc3lzY2FsbHNfZmxhZ3MgPSB7CisJLnZhbCA9IDAsIC8qIEJ5IGRlZmF1bHQ6IG5vIHBhcmFtZXRlcnMgdHlwZXMgKi8KKwkub3B0cyA9IHN5c2NhbGxzX29wdHMKK307CisKK2VudW0gcHJpbnRfbGluZV90CitwcmludF9zeXNjYWxsX2VudGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50ID0gaXRlci0+ZW50OworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICp0cmFjZTsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnk7CisJaW50IGksIHJldCwgc3lzY2FsbDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKHRyYWNlLCBlbnQpOworCisJc3lzY2FsbCA9IHRyYWNlLT5ucjsKKworCWVudHJ5ID0gc3lzY2FsbF9ucl90b19tZXRhKHN5c2NhbGwpOworCWlmICghZW50cnkpCisJCWdvdG8gZW5kOworCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMoIiwgZW50cnktPm5hbWUpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgeworCQkvKiBwYXJhbWV0ZXIgdHlwZXMgKi8KKwkJaWYgKHN5c2NhbGxzX2ZsYWdzLnZhbCAmIFRSQUNFX1NZU0NBTExTX09QVF9UWVBFUykgeworCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMgIiwgZW50cnktPnR5cGVzW2ldKTsKKwkJCWlmICghcmV0KQorCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJfQorCQkvKiBwYXJhbWV0ZXIgdmFsdWVzICovCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzOiAlbHglcyAiLCBlbnRyeS0+YXJnc1tpXSwKKwkJCQkgICAgICAgdHJhY2UtPmFyZ3NbaV0sCisJCQkJICAgICAgIGkgPT0gZW50cnktPm5iX2FyZ3MgLSAxID8gIikiIDogIiwiKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCitlbmQ6CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitlbnVtIHByaW50X2xpbmVfdAorcHJpbnRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50ID0gaXRlci0+ZW50OworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKnRyYWNlOworCWludCBzeXNjYWxsOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeTsKKwlpbnQgcmV0OworCisJdHJhY2VfYXNzaWduX3R5cGUodHJhY2UsIGVudCk7CisKKwlzeXNjYWxsID0gdHJhY2UtPm5yOworCisJZW50cnkgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbCk7CisJaWYgKCFlbnRyeSkgeworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCX0KKworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzIC0+IDB4JWx4XG4iLCBlbnRyeS0+bmFtZSwKKwkJCQl0cmFjZS0+cmV0KTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKwordm9pZCBzdGFydF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCisJLyogRG9uJ3QgZW5hYmxlIHRoZSBmbGFnIG9uIHRoZSB0YXNrcyB0d2ljZSAqLworCWlmICgrK3JlZmNvdW50ICE9IDEpCisJCWdvdG8gdW5sb2NrOworCisJYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscygpOworCXJlYWRfbG9ja19pcnFzYXZlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisKKwlkb19lYWNoX3RocmVhZChnLCB0KSB7CisJCXNldF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NZU0NBTExfRlRSQUNFKTsKKwl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHQpOworCisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmdGFza2xpc3RfbG9jaywgZmxhZ3MpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworfQorCit2b2lkIHN0b3BfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OworCisJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKworCS8qIFRoZXJlIGFyZSBwZXJoYXBzIHN0aWxsIHNvbWUgdXNlcnMgKi8KKwlpZiAoLS1yZWZjb3VudCkKKwkJZ290byB1bmxvY2s7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmdGFza2xpc3RfbG9jaywgZmxhZ3MpOworCisJZG9fZWFjaF90aHJlYWQoZywgdCkgeworCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NZU0NBTExfRlRSQUNFKTsKKwl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHQpOworCisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmdGFza2xpc3RfbG9jaywgZmxhZ3MpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworfQorCit2b2lkIGZ0cmFjZV9zeXNjYWxsX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICplbnRyeTsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzX2RhdGE7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlpbnQgc2l6ZTsKKwlpbnQgc3lzY2FsbF9ucjsKKworCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKKworCXN5c19kYXRhID0gc3lzY2FsbF9ucl90b19tZXRhKHN5c2NhbGxfbnIpOworCWlmICghc3lzX2RhdGEpCisJCXJldHVybjsKKworCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIHN5c19kYXRhLT5uYl9hcmdzOworCisJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoVFJBQ0VfU1lTQ0FMTF9FTlRFUiwgc2l6ZSwKKwkJCQkJCQkwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5uciA9IHN5c2NhbGxfbnI7CisJc3lzY2FsbF9nZXRfYXJndW1lbnRzKGN1cnJlbnQsIHJlZ3MsIDAsIHN5c19kYXRhLT5uYl9hcmdzLCBlbnRyeS0+YXJncyk7CisKKwl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGV2ZW50LCAwLCAwKTsKKwl0cmFjZV93YWtlX3VwKCk7Cit9CisKK3ZvaWQgZnRyYWNlX3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICplbnRyeTsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzX2RhdGE7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlpbnQgc3lzY2FsbF9ucjsKKworCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKKworCXN5c19kYXRhID0gc3lzY2FsbF9ucl90b19tZXRhKHN5c2NhbGxfbnIpOworCWlmICghc3lzX2RhdGEpCisJCXJldHVybjsKKworCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKFRSQUNFX1NZU0NBTExfRVhJVCwKKwkJCQlzaXplb2YoKmVudHJ5KSwgMCwgMCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+bnIgPSBzeXNjYWxsX25yOworCWVudHJ5LT5yZXQgPSBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncyk7CisKKwl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGV2ZW50LCAwLCAwKTsKKwl0cmFjZV93YWtlX3VwKCk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9zeXNjYWxsX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXN0YXJ0X2Z0cmFjZV9zeXNjYWxscygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X3N5c2NhbGxfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJc3RvcF9mdHJhY2Vfc3lzY2FsbHMoKTsKKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBzeXNjYWxsX2VudGVyX2V2ZW50ID0geworCS50eXBlCSAJPSBUUkFDRV9TWVNDQUxMX0VOVEVSLAorCS50cmFjZQkJPSBwcmludF9zeXNjYWxsX2VudGVyLAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBzeXNjYWxsX2V4aXRfZXZlbnQgPSB7CisJLnR5cGUJIAk9IFRSQUNFX1NZU0NBTExfRVhJVCwKKwkudHJhY2UJCT0gcHJpbnRfc3lzY2FsbF9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXIgc3lzY2FsbF90cmFjZXIgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkgICAgIAk9ICJzeXNjYWxsIiwKKwkuaW5pdAkJPSBpbml0X3N5c2NhbGxfdHJhY2VyLAorCS5yZXNldAkJPSByZXNldF9zeXNjYWxsX3RyYWNlciwKKwkuZmxhZ3MJCT0gJnN5c2NhbGxzX2ZsYWdzLAorfTsKKworX19pbml0IGludCByZWdpc3Rlcl9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZzeXNjYWxsX2VudGVyX2V2ZW50KTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJldmVudCAlZCBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsCisJCSAgICAgICBzeXNjYWxsX2VudGVyX2V2ZW50LnR5cGUpOworCQlXQVJOX09OX09OQ0UoMSk7CisJfQorCisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZzeXNjYWxsX2V4aXRfZXZlbnQpOworCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImV2ZW50ICVkIGZhaWxlZCB0byByZWdpc3RlclxuIiwKKwkJICAgICAgIHN5c2NhbGxfZXhpdF9ldmVudC50eXBlKTsKKwkJV0FSTl9PTl9PTkNFKDEpOworCX0KKworCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJnN5c2NhbGxfdHJhY2VyKTsKK30KK2RldmljZV9pbml0Y2FsbChyZWdpc3Rlcl9mdHJhY2Vfc3lzY2FsbHMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKaW5kZXggZWFjYTVhZC4uOTFmZDE5YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCkBAIC04OCw3ICs4OCw3IEBACiAJfQogfQogCi1jb25zdCBzdGF0aWMgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIGJhY2t0cmFjZV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIGJhY2t0cmFjZV9vcHMgPSB7CiAJLndhcm5pbmcJCT0gYmFja3RyYWNlX3dhcm5pbmcsCiAJLndhcm5pbmdfc3ltYm9sCQk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKIAkuc3RhY2sJCQk9IGJhY2t0cmFjZV9zdGFjaywKQEAgLTIyNiwxNSArMjI2LDYgQEAKIAkJc3RvcF9zdGFja190aW1lcihjcHUpOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF9zdGFja190cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCW11dGV4X2xvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKLQlzdGFydF9zdGFja190aW1lcnMoKTsKLQl0cmFjZXJfZW5hYmxlZCA9IDE7Ci0JbXV0ZXhfdW5sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0b3Bfc3RhY2tfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAltdXRleF9sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7CkBAIC0yNDcsMTIgKzIzOCwxOCBAQAogewogCXN5c3Byb2ZfdHJhY2UgPSB0cjsKIAotCXN0YXJ0X3N0YWNrX3RyYWNlKHRyKTsKKwl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7CisKKwltdXRleF9sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7CisJc3RhcnRfc3RhY2tfdGltZXJzKCk7CisJdHJhY2VyX2VuYWJsZWQgPSAxOworCW11dGV4X3VubG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzdGFja190cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogeworCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwogCXN0b3Bfc3RhY2tfdHJhY2UodHIpOwogfQogCkBAIC0zMTcsNyArMzE0LDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXNwcm9mX3NhbXBsZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lzcHJvZl9zYW1wbGVfZm9wcyA9IHsKIAkucmVhZAkJPSBzeXNwcm9mX3NhbXBsZV9yZWFkLAogCS53cml0ZQkJPSBzeXNwcm9mX3NhbXBsZV93cml0ZSwKIH07CkBAIC0zMzAsNSArMzI3LDUgQEAKIAkJCWRfdHJhY2VyLCBOVUxMLCAmc3lzcHJvZl9zYW1wbGVfZm9wcyk7CiAJaWYgKGVudHJ5KQogCQlyZXR1cm47Ci0JcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICdkeW5fZnRyYWNlX3RvdGFsX2luZm8nIGVudHJ5XG4iKTsKKwlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3N5c3Byb2Zfc2FtcGxlX3BlcmlvZCcgZW50cnlcbiIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3dvcmtxdWV1ZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3dvcmtxdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzIwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfd29ya3F1ZXVlLmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBXb3JrcXVldWUgc3RhdGlzdGljYWwgdHJhY2VyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CisgKgorICovCisKKworI2luY2x1ZGUgPHRyYWNlL3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlICJ0cmFjZV9zdGF0LmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKworCisvKiBBIGNwdSB3b3JrcXVldWUgdGhyZWFkICovCitzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgIGxpc3Q7CisvKiBVc2VmdWwgdG8ga25vdyBpZiB3ZSBwcmludCB0aGUgY3B1IGhlYWRlcnMgKi8KKwlib29sCQkgICAgICAgICAgICBmaXJzdF9lbnRyeTsKKwlpbnQJCSAgICAgICAgICAgIGNwdTsKKwlwaWRfdAkJCSAgICBwaWQ7CisvKiBDYW4gYmUgaW5zZXJ0ZWQgZnJvbSBpbnRlcnJ1cHQgb3IgdXNlciBjb250ZXh0LCBuZWVkIHRvIGJlIGF0b21pYyAqLworCWF0b21pY190CSAgICAgICAgICAgIGluc2VydGVkOworLyoKKyAqICBEb24ndCBuZWVkIHRvIGJlIGF0b21pYywgd29ya3MgYXJlIHNlcmlhbGl6ZWQgaW4gYSBzaW5nbGUgd29ya3F1ZXVlIHRocmVhZAorICogIG9uIGEgc2luZ2xlIENQVS4KKyAqLworCXVuc2lnbmVkIGludAkJICAgIGV4ZWN1dGVkOworfTsKKworLyogTGlzdCBvZiB3b3JrcXVldWUgdGhyZWFkcyBvbiBvbmUgY3B1ICovCitzdHJ1Y3Qgd29ya3F1ZXVlX2dsb2JhbF9zdGF0cyB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXNwaW5sb2NrX3QJCWxvY2s7Cit9OworCisvKiBEb24ndCBuZWVkIGEgZ2xvYmFsIGxvY2sgYmVjYXVzZSBhbGxvY2F0ZWQgYmVmb3JlIHRoZSB3b3JrcXVldWVzLCBhbmQKKyAqIG5ldmVyIGZyZWVkLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHdvcmtxdWV1ZV9nbG9iYWxfc3RhdHMsIGFsbF93b3JrcXVldWVfc3RhdCk7CisjZGVmaW5lIHdvcmtxdWV1ZV9jcHVfc3RhdChjcHUpICgmcGVyX2NwdShhbGxfd29ya3F1ZXVlX3N0YXQsIGNwdSkpCisKKy8qIEluc2VydGlvbiBvZiBhIHdvcmsgKi8KK3N0YXRpYyB2b2lkCitwcm9iZV93b3JrcXVldWVfaW5zZXJ0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLAorCQkJICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QoJndxX3RocmVhZC0+Y3B1c19hbGxvd2VkKTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqbm9kZSwgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuZXh0LCAmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QsCisJCQkJCQkJbGlzdCkgeworCQlpZiAobm9kZS0+cGlkID09IHdxX3RocmVhZC0+cGlkKSB7CisJCQlhdG9taWNfaW5jKCZub2RlLT5pbnNlcnRlZCk7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXByX2RlYnVnKCJ0cmFjZV93b3JrcXVldWU6IGVudHJ5IG5vdCBmb3VuZFxuIik7Citmb3VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworfQorCisvKiBFeGVjdXRpb24gb2YgYSB3b3JrICovCitzdGF0aWMgdm9pZAorcHJvYmVfd29ya3F1ZXVlX2V4ZWN1dGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwKKwkJCSAgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KCZ3cV90aHJlYWQtPmNwdXNfYWxsb3dlZCk7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKm5vZGUsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbmV4dCwgJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0LAorCQkJCQkJCWxpc3QpIHsKKwkJaWYgKG5vZGUtPnBpZCA9PSB3cV90aHJlYWQtPnBpZCkgeworCQkJbm9kZS0+ZXhlY3V0ZWQrKzsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisJcHJfZGVidWcoInRyYWNlX3dvcmtxdWV1ZTogZW50cnkgbm90IGZvdW5kXG4iKTsKK2ZvdW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIENyZWF0aW9uIG9mIGEgY3B1IHdvcmtxdWV1ZSB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkIHByb2JlX3dvcmtxdWV1ZV9jcmVhdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqY3dzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGNwdSA8IDApOworCisJLyogV29ya3F1ZXVlcyBhcmUgc29tZXRpbWVzIGNyZWF0ZWQgaW4gYXRvbWljIGNvbnRleHQgKi8KKwljd3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyksIEdGUF9BVE9NSUMpOworCWlmICghY3dzKSB7CisJCXByX3dhcm5pbmcoInRyYWNlX3dvcmtxdWV1ZTogbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCUlOSVRfTElTVF9IRUFEKCZjd3MtPmxpc3QpOworCWN3cy0+Y3B1ID0gY3B1OworCisJY3dzLT5waWQgPSB3cV90aHJlYWQtPnBpZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCkpCisJCWN3cy0+Zmlyc3RfZW50cnkgPSB0cnVlOworCWxpc3RfYWRkX3RhaWwoJmN3cy0+bGlzdCwgJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworfQorCisvKiBEZXN0cnVjdGlvbiBvZiBhIGNwdSB3b3JrcXVldWUgdGhyZWFkICovCitzdGF0aWMgdm9pZCBwcm9iZV93b3JrcXVldWVfZGVzdHJ1Y3Rpb24oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQpCit7CisJLyogV29ya3F1ZXVlIG9ubHkgZXhlY3V0ZSBvbiBvbmUgY3B1ICovCisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QoJndxX3RocmVhZC0+Y3B1c19hbGxvd2VkKTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqbm9kZSwgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuZXh0LCAmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QsCisJCQkJCQkJbGlzdCkgeworCQlpZiAobm9kZS0+cGlkID09IHdxX3RocmVhZC0+cGlkKSB7CisJCQlsaXN0X2RlbCgmbm9kZS0+bGlzdCk7CisJCQlrZnJlZShub2RlKTsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygidHJhY2Vfd29ya3F1ZXVlOiBkb24ndCBmaW5kIHdvcmtxdWV1ZSB0byBkZXN0cm95XG4iKTsKK2ZvdW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisKK30KKworc3RhdGljIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICp3b3JrcXVldWVfc3RhdF9zdGFydF9jcHUoaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpyZXQgPSBOVUxMOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QpKQorCQlyZXQgPSBsaXN0X2VudHJ5KHdvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0Lm5leHQsCisJCQkJIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzLCBsaXN0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAqd29ya3F1ZXVlX3N0YXRfc3RhcnQodm9pZCkKK3sKKwlpbnQgY3B1OworCXZvaWQgKnJldCA9IE5VTEw7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXJldCA9IHdvcmtxdWV1ZV9zdGF0X3N0YXJ0X2NwdShjcHUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICp3b3JrcXVldWVfc3RhdF9uZXh0KHZvaWQgKnByZXYsIGludCBpZHgpCit7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKnByZXZfY3dzID0gcHJldjsKKwlpbnQgY3B1ID0gcHJldl9jd3MtPmNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKnJldCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9pc19sYXN0KCZwcmV2X2N3cy0+bGlzdCwgJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCQlkbyB7CisJCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfcG9zc2libGVfbWFzayk7CisJCQlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCQkJcmV0dXJuIE5VTEw7CisJCX0gd2hpbGUgKCEocmV0ID0gd29ya3F1ZXVlX3N0YXRfc3RhcnRfY3B1KGNwdSkpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBsaXN0X2VudHJ5KHByZXZfY3dzLT5saXN0Lm5leHQsIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzLAorCQkJICBsaXN0KTsKK30KKworc3RhdGljIGludCB3b3JrcXVldWVfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqY3dzID0gcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjcHUgPSBjd3MtPmNwdTsKKwlzdHJ1Y3QgcGlkICpwaWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwlpZiAoJmN3cy0+bGlzdCA9PSB3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdC5uZXh0KQorCQlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisKKwlwaWQgPSBmaW5kX2dldF9waWQoY3dzLT5waWQpOworCWlmIChwaWQpIHsKKwkJdHNrID0gZ2V0X3BpZF90YXNrKHBpZCwgUElEVFlQRV9QSUQpOworCQlpZiAodHNrKSB7CisJCQlzZXFfcHJpbnRmKHMsICIlM2QgJTZkICAgICAlNnUgICAgICAgJXNcbiIsIGN3cy0+Y3B1LAorCQkJCSAgIGF0b21pY19yZWFkKCZjd3MtPmluc2VydGVkKSwgY3dzLT5leGVjdXRlZCwKKwkJCQkgICB0c2stPmNvbW0pOworCQkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CisJCX0KKwkJcHV0X3BpZChwaWQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdvcmtxdWV1ZV9zdGF0X2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICpzKQoreworCXNlcV9wcmludGYocywgIiMgQ1BVICBJTlNFUlRFRCAgRVhFQ1VURUQgICBOQU1FXG4iKTsKKwlzZXFfcHJpbnRmKHMsICIjIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyYWNlcl9zdGF0IHdvcmtxdWV1ZV9zdGF0cyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lID0gIndvcmtxdWV1ZXMiLAorCS5zdGF0X3N0YXJ0ID0gd29ya3F1ZXVlX3N0YXRfc3RhcnQsCisJLnN0YXRfbmV4dCA9IHdvcmtxdWV1ZV9zdGF0X25leHQsCisJLnN0YXRfc2hvdyA9IHdvcmtxdWV1ZV9zdGF0X3Nob3csCisJLnN0YXRfaGVhZGVycyA9IHdvcmtxdWV1ZV9zdGF0X2hlYWRlcnMKK307CisKKworaW50IF9faW5pdCBzdGF0X3dvcmtxdWV1ZV9pbml0KHZvaWQpCit7CisJaWYgKHJlZ2lzdGVyX3N0YXRfdHJhY2VyKCZ3b3JrcXVldWVfc3RhdHMpKSB7CisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZWdpc3RlciB3b3JrcXVldWUgc3RhdCB0cmFjZXJcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2ZzX2luaXRjYWxsKHN0YXRfd29ya3F1ZXVlX2luaXQpOworCisvKgorICogV29ya3F1ZXVlcyBhcmUgY3JlYXRlZCB2ZXJ5IGVhcmx5LCBqdXN0IGFmdGVyIHByZS1zbXAgaW5pdGNhbGxzLgorICogU28gd2UgbXVzdCByZWdpc3RlciBvdXIgdHJhY2Vwb2ludHMgYXQgdGhpcyBzdGFnZS4KKyAqLworaW50IF9faW5pdCB0cmFjZV93b3JrcXVldWVfZWFybHlfaW5pdCh2b2lkKQoreworCWludCByZXQsIGNwdTsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9pbnNlcnRpb24ocHJvYmVfd29ya3F1ZXVlX2luc2VydGlvbik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfZXhlY3V0aW9uKHByb2JlX3dvcmtxdWV1ZV9leGVjdXRpb24pOworCWlmIChyZXQpCisJCWdvdG8gbm9faW5zZXJ0aW9uOworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2NyZWF0aW9uKHByb2JlX3dvcmtxdWV1ZV9jcmVhdGlvbik7CisJaWYgKHJldCkKKwkJZ290byBub19leGVjdXRpb247CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfZGVzdHJ1Y3Rpb24ocHJvYmVfd29ya3F1ZXVlX2Rlc3RydWN0aW9uKTsKKwlpZiAocmV0KQorCQlnb3RvIG5vX2NyZWF0aW9uOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzcGluX2xvY2tfaW5pdCgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QpOworCX0KKworCXJldHVybiAwOworCitub19jcmVhdGlvbjoKKwl1bnJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9jcmVhdGlvbihwcm9iZV93b3JrcXVldWVfY3JlYXRpb24pOworbm9fZXhlY3V0aW9uOgorCXVucmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2V4ZWN1dGlvbihwcm9iZV93b3JrcXVldWVfZXhlY3V0aW9uKTsKK25vX2luc2VydGlvbjoKKwl1bnJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9pbnNlcnRpb24ocHJvYmVfd29ya3F1ZXVlX2luc2VydGlvbik7CitvdXQ6CisJcHJfd2FybmluZygidHJhY2Vfd29ya3F1ZXVlOiB1bmFibGUgdG8gdHJhY2Ugd29ya3F1ZXVlc1xuIik7CisKKwlyZXR1cm4gMTsKK30KK2Vhcmx5X2luaXRjYWxsKHRyYWNlX3dvcmtxdWV1ZV9lYXJseV9pbml0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IDc5NjAyNzQuLjFlZjVkM2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtMjcyLDEyICsyNzIsMTUgQEAKICAqCiAgKiBVcGRhdGVzIHRoZSBwcm9iZSBjYWxsYmFjayBjb3JyZXNwb25kaW5nIHRvIGEgcmFuZ2Ugb2YgdHJhY2Vwb2ludHMuCiAgKi8KLXZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLAotCXN0cnVjdCB0cmFjZXBvaW50ICplbmQpCit2b2lkCit0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpCiB7CiAJc3RydWN0IHRyYWNlcG9pbnQgKml0ZXI7CiAJc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKm1hcmtfZW50cnk7CiAKKwlpZiAoIWJlZ2luKQorCQlyZXR1cm47CisKIAltdXRleF9sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CiAJZm9yIChpdGVyID0gYmVnaW47IGl0ZXIgPCBlbmQ7IGl0ZXIrKykgewogCQltYXJrX2VudHJ5ID0gZ2V0X3RyYWNlcG9pbnQoaXRlci0+bmFtZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMzJmOGUwZC4uYjZiOTY2YyAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8dHJhY2Uvd29ya3F1ZXVlLmg+CiAKIC8qCiAgKiBUaGUgcGVyLUNQVSB3b3JrcXVldWUgKGlmIHNpbmdsZSB0aHJlYWQsIHdlIGFsd2F5cyB1c2UgdGhlIGZpcnN0CkBAIC0xMjMsOSArMTI0LDEzIEBACiAJcmV0dXJuICh2b2lkICopIChhdG9taWNfbG9uZ19yZWFkKCZ3b3JrLT5kYXRhKSAmIFdPUktfU1RSVUNUX1dRX0RBVEFfTUFTSyk7CiB9CiAKK0RFRklORV9UUkFDRSh3b3JrcXVldWVfaW5zZXJ0aW9uKTsKKwogc3RhdGljIHZvaWQgaW5zZXJ0X3dvcmsoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsCiAJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CisJdHJhY2Vfd29ya3F1ZXVlX2luc2VydGlvbihjd3EtPnRocmVhZCwgd29yayk7CisKIAlzZXRfd3FfZGF0YSh3b3JrLCBjd3EpOwogCS8qCiAJICogRW5zdXJlIHRoYXQgd2UgZ2V0IHRoZSByaWdodCB3b3JrLT5kYXRhIGlmIHdlIHNlZSB0aGUKQEAgLTI1Nyw2ICsyNjIsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocXVldWVfZGVsYXllZF93b3JrX29uKTsKIAorREVGSU5FX1RSQUNFKHdvcmtxdWV1ZV9leGVjdXRpb24pOworCiBzdGF0aWMgdm9pZCBydW5fd29ya3F1ZXVlKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxKQogewogCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7CkBAIC0yNzUsNyArMjgyLDcgQEAKIAkJICovCiAJCXN0cnVjdCBsb2NrZGVwX21hcCBsb2NrZGVwX21hcCA9IHdvcmstPmxvY2tkZXBfbWFwOwogI2VuZGlmCi0KKwkJdHJhY2Vfd29ya3F1ZXVlX2V4ZWN1dGlvbihjd3EtPnRocmVhZCwgd29yayk7CiAJCWN3cS0+Y3VycmVudF93b3JrID0gd29yazsKIAkJbGlzdF9kZWxfaW5pdChjd3EtPndvcmtsaXN0Lm5leHQpOwogCQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7CkBAIC03NDYsNiArNzUzLDggQEAKIAlyZXR1cm4gY3dxOwogfQogCitERUZJTkVfVFJBQ0Uod29ya3F1ZXVlX2NyZWF0aW9uKTsKKwogc3RhdGljIGludCBjcmVhdGVfd29ya3F1ZXVlX3RocmVhZChzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPLTEgfTsKQEAgLTc2OCw2ICs3NzcsOCBAQAogCQlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhwLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwogCWN3cS0+dGhyZWFkID0gcDsKIAorCXRyYWNlX3dvcmtxdWV1ZV9jcmVhdGlvbihjd3EtPnRocmVhZCwgY3B1KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04NDksNiArODYwLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkpOwogCitERUZJTkVfVFJBQ0Uod29ya3F1ZXVlX2Rlc3RydWN0aW9uKTsKKwogc3RhdGljIHZvaWQgY2xlYW51cF93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxKQogewogCS8qCkBAIC04NzIsNiArODg1LDcgQEAKIAkgKiBjaGVja3MgbGlzdF9lbXB0eSgpLCBhbmQgYSAibm9ybWFsIiBxdWV1ZV93b3JrKCkgY2FuJ3QgdXNlCiAJICogYSBkZWFkIENQVS4KIAkgKi8KKwl0cmFjZV93b3JrcXVldWVfZGVzdHJ1Y3Rpb24oY3dxLT50aHJlYWQpOwogCWt0aHJlYWRfc3RvcChjd3EtPnRocmVhZCk7CiAJY3dxLT50aHJlYWQgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAyYTljNjlmLi44YWRlMGE3IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMiw2ICsyLDkgQEAKICMgTGlicmFyeSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBCSU5BUllfUFJJTlRGCisJZGVmX2Jvb2wgbgorCiBtZW51ICJMaWJyYXJ5IHJvdXRpbmVzIgogCiBjb25maWcgQklUUkVWRVJTRQpkaWZmIC0tZ2l0IGEvbGliL2RlYnVnb2JqZWN0cy5jIGIvbGliL2RlYnVnb2JqZWN0cy5jCmluZGV4IDVkOTliZTEuLjI3NTVhM2IgMTAwNjQ0Ci0tLSBhL2xpYi9kZWJ1Z29iamVjdHMuYworKysgYi9saWIvZGVidWdvYmplY3RzLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19idWNrZXQJb2JqX2hhc2hbT0RFQlVHX0hBU0hfU0laRV07CiAKLXN0YXRpYyBzdHJ1Y3QgZGVidWdfb2JqCQlvYmpfc3RhdGljX3Bvb2xbT0RFQlVHX1BPT0xfU0laRV07CitzdGF0aWMgc3RydWN0IGRlYnVnX29iagkJb2JqX3N0YXRpY19wb29sW09ERUJVR19QT09MX1NJWkVdIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG9vbF9sb2NrKTsKIApAQCAtNTAsMTIgKzUwLDIzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfb2JqX2Rlc2NyCSpkZXNjcl90ZXN0ICBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgdm9pZCBmcmVlX29ial93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgREVDTEFSRV9XT1JLKGRlYnVnX29ial93b3JrLCBmcmVlX29ial93b3JrKTsKKwogc3RhdGljIGludCBfX2luaXQgZW5hYmxlX29iamVjdF9kZWJ1ZyhjaGFyICpzdHIpCiB7CiAJZGVidWdfb2JqZWN0c19lbmFibGVkID0gMTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9vYmplY3RfZGVidWcoY2hhciAqc3RyKQoreworCWRlYnVnX29iamVjdHNfZW5hYmxlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKIGVhcmx5X3BhcmFtKCJkZWJ1Z19vYmplY3RzIiwgZW5hYmxlX29iamVjdF9kZWJ1Zyk7CitlYXJseV9wYXJhbSgibm9fZGVidWdfb2JqZWN0cyIsIGRpc2FibGVfb2JqZWN0X2RlYnVnKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKm9ial9zdGF0ZXNbT0RFQlVHX1NUQVRFX01BWF0gPSB7CiAJW09ERUJVR19TVEFURV9OT05FXQkJPSAibm9uZSIsCkBAIC0xNDYsMjUgKzE1Nyw1MSBAQAogfQogCiAvKgotICogUHV0IHRoZSBvYmplY3QgYmFjayBpbnRvIHRoZSBwb29sIG9yIGdpdmUgaXQgYmFjayB0byBrbWVtX2NhY2hlOgorICogd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGZyZWUgb2JqZWN0cy4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9vYmpfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlYnVnX29iaiAqb2JqOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKG9ial9wb29sX2ZyZWUgPiBPREVCVUdfUE9PTF9TSVpFKSB7CisJCW9iaiA9IGhsaXN0X2VudHJ5KG9ial9wb29sLmZpcnN0LCB0eXBlb2YoKm9iaiksIG5vZGUpOworCQlobGlzdF9kZWwoJm9iai0+bm9kZSk7CisJCW9ial9wb29sX2ZyZWUtLTsKKwkJLyoKKwkJICogV2UgcmVsZWFzZSBwb29sX2xvY2sgYWNyb3NzIGttZW1fY2FjaGVfZnJlZSgpIHRvCisJCSAqIGF2b2lkIGNvbnRlbnRpb24gb24gcG9vbF9sb2NrLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJCWttZW1fY2FjaGVfZnJlZShvYmpfY2FjaGUsIG9iaik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBQdXQgdGhlIG9iamVjdCBiYWNrIGludG8gdGhlIHBvb2wgYW5kIHNjaGVkdWxlIHdvcmsgdG8gZnJlZSBvYmplY3RzCisgKiBpZiBuZWNlc3NhcnkuCiAgKi8KIHN0YXRpYyB2b2lkIGZyZWVfb2JqZWN0KHN0cnVjdCBkZWJ1Z19vYmogKm9iaikKIHsKLQl1bnNpZ25lZCBsb25nIGlkeCA9ICh1bnNpZ25lZCBsb25nKShvYmogLSBvYmpfc3RhdGljX3Bvb2wpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNjaGVkID0gMDsKIAotCWlmIChvYmpfcG9vbF9mcmVlIDwgT0RFQlVHX1BPT0xfU0laRSB8fCBpZHggPCBPREVCVUdfUE9PTF9TSVpFKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKLQkJaGxpc3RfYWRkX2hlYWQoJm9iai0+bm9kZSwgJm9ial9wb29sKTsKLQkJb2JqX3Bvb2xfZnJlZSsrOwotCQlvYmpfcG9vbF91c2VkLS07Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKLQkJb2JqX3Bvb2xfdXNlZC0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sX2xvY2ssIGZsYWdzKTsKLQkJa21lbV9jYWNoZV9mcmVlKG9ial9jYWNoZSwgb2JqKTsKLQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCS8qCisJICogc2NoZWR1bGUgd29yayB3aGVuIHRoZSBwb29sIGlzIGZpbGxlZCBhbmQgdGhlIGNhY2hlIGlzCisJICogaW5pdGlhbGl6ZWQ6CisJICovCisJaWYgKG9ial9wb29sX2ZyZWUgPiBPREVCVUdfUE9PTF9TSVpFICYmIG9ial9jYWNoZSkKKwkJc2NoZWQgPSAhd29ya19wZW5kaW5nKCZkZWJ1Z19vYmpfd29yayk7CisJaGxpc3RfYWRkX2hlYWQoJm9iai0+bm9kZSwgJm9ial9wb29sKTsKKwlvYmpfcG9vbF9mcmVlKys7CisJb2JqX3Bvb2xfdXNlZC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCWlmIChzY2hlZCkKKwkJc2NoZWR1bGVfd29yaygmZGVidWdfb2JqX3dvcmspOwogfQogCiAvKgpAQCAtODc2LDYgKzkxMyw2MyBAQAogfQogCiAvKgorICogQ29udmVydCB0aGUgc3RhdGljYWxseSBhbGxvY2F0ZWQgb2JqZWN0cyB0byBkeW5hbWljIG9uZXM6CisgKi8KK3N0YXRpYyBpbnQgZGVidWdfb2JqZWN0c19yZXBsYWNlX3N0YXRpY19vYmplY3RzKHZvaWQpCit7CisJc3RydWN0IGRlYnVnX2J1Y2tldCAqZGIgPSBvYmpfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKwlzdHJ1Y3QgZGVidWdfb2JqICpvYmosICpuZXc7CisJSExJU1RfSEVBRChvYmplY3RzKTsKKwlpbnQgaSwgY250ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBPREVCVUdfUE9PTF9TSVpFOyBpKyspIHsKKwkJb2JqID0ga21lbV9jYWNoZV96YWxsb2Mob2JqX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvYmopCisJCQlnb3RvIGZyZWU7CisJCWhsaXN0X2FkZF9oZWFkKCZvYmotPm5vZGUsICZvYmplY3RzKTsKKwl9CisKKwkvKgorCSAqIFdoZW4gZGVidWdfb2JqZWN0c19tZW1faW5pdCgpIGlzIGNhbGxlZCB3ZSBrbm93IHRoYXQgb25seQorCSAqIG9uZSBDUFUgaXMgdXAsIHNvIGRpc2FibGluZyBpbnRlcnJ1cHRzIGlzIGVub3VnaAorCSAqIHByb3RlY3Rpb24uIFRoaXMgYXZvaWRzIHRoZSBsb2NrZGVwIGhlbGwgb2YgbG9jayBvcmRlcmluZy4KKwkgKi8KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogUmVtb3ZlIHRoZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBvYmplY3RzIGZyb20gdGhlIHBvb2wgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbm9kZSwgdG1wLCAmb2JqX3Bvb2wsIG5vZGUpCisJCWhsaXN0X2RlbCgmb2JqLT5ub2RlKTsKKwkvKiBNb3ZlIHRoZSBhbGxvY2F0ZWQgb2JqZWN0cyB0byB0aGUgcG9vbCAqLworCWhsaXN0X21vdmVfbGlzdCgmb2JqZWN0cywgJm9ial9wb29sKTsKKworCS8qIFJlcGxhY2UgdGhlIGFjdGl2ZSBvYmplY3QgcmVmZXJlbmNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBPREVCVUdfSEFTSF9TSVpFOyBpKyssIGRiKyspIHsKKwkJaGxpc3RfbW92ZV9saXN0KCZkYi0+bGlzdCwgJm9iamVjdHMpOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgbm9kZSwgJm9iamVjdHMsIG5vZGUpIHsKKwkJCW5ldyA9IGhsaXN0X2VudHJ5KG9ial9wb29sLmZpcnN0LCB0eXBlb2YoKm9iaiksIG5vZGUpOworCQkJaGxpc3RfZGVsKCZuZXctPm5vZGUpOworCQkJLyogY29weSBvYmplY3QgZGF0YSAqLworCQkJKm5ldyA9ICpvYmo7CisJCQlobGlzdF9hZGRfaGVhZCgmbmV3LT5ub2RlLCAmZGItPmxpc3QpOworCQkJY250Kys7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiT0RFQlVHOiAlZCBvZiAlZCBhY3RpdmUgb2JqZWN0cyByZXBsYWNlZFxuIiwgY250LAorCSAgICAgICBvYmpfcG9vbF91c2VkKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcmV0dXJuIDA7CitmcmVlOgorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBub2RlLCB0bXAsICZvYmplY3RzLCBub2RlKSB7CisJCWhsaXN0X2RlbCgmb2JqLT5ub2RlKTsKKwkJa21lbV9jYWNoZV9mcmVlKG9ial9jYWNoZSwgb2JqKTsKKwl9CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCiAgKiBDYWxsZWQgYWZ0ZXIgdGhlIGttZW1fY2FjaGVzIGFyZSBmdW5jdGlvbmFsIHRvIHNldHVwIGEgZGVkaWNhdGVkCiAgKiBjYWNoZSBwb29sLCB3aGljaCBoYXMgdGhlIFNMQUJfREVCVUdfT0JKRUNUUyBmbGFnIHNldC4gVGhpcyBmbGFnCiAgKiBwcmV2ZW50cyB0aGF0IHRoZSBkZWJ1ZyBjb2RlIGlzIGNhbGxlZCBvbiBrbWVtX2NhY2hlX2ZyZWUoKSBmb3IgdGhlCkBAIC04OTAsOCArOTg0LDExIEBACiAJCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3QgZGVidWdfb2JqKSwgMCwKIAkJCQkgICAgICBTTEFCX0RFQlVHX09CSkVDVFMsIE5VTEwpOwogCi0JaWYgKCFvYmpfY2FjaGUpCisJaWYgKCFvYmpfY2FjaGUgfHwgZGVidWdfb2JqZWN0c19yZXBsYWNlX3N0YXRpY19vYmplY3RzKCkpIHsKIAkJZGVidWdfb2JqZWN0c19lbmFibGVkID0gMDsKLQllbHNlCisJCWlmIChvYmpfY2FjaGUpCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3kob2JqX2NhY2hlKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiT0RFQlVHOiBvdXQgb2YgbWVtb3J5LlxuIik7CisJfSBlbHNlCiAJCWRlYnVnX29iamVjdHNfc2VsZnRlc3QoKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggMGZiZDAxMi4uYmUzMDAxZiAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTM5Niw3ICszOTYsMzggQEAKICNkZWZpbmUgU01BTEwJMzIJCS8qIE11c3QgYmUgMzIgPT0gMHgyMCAqLwogI2RlZmluZSBTUEVDSUFMCTY0CQkvKiAweCAqLwogCi1zdGF0aWMgY2hhciAqbnVtYmVyKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1bnNpZ25lZCBsb25nIGxvbmcgbnVtLCBpbnQgYmFzZSwgaW50IHNpemUsIGludCBwcmVjaXNpb24sIGludCB0eXBlKQorZW51bSBmb3JtYXRfdHlwZSB7CisJRk9STUFUX1RZUEVfTk9ORSwgLyogSnVzdCBhIHN0cmluZyBwYXJ0ICovCisJRk9STUFUX1RZUEVfV0lEVEgsCisJRk9STUFUX1RZUEVfUFJFQ0lTSU9OLAorCUZPUk1BVF9UWVBFX0NIQVIsCisJRk9STUFUX1RZUEVfU1RSLAorCUZPUk1BVF9UWVBFX1BUUiwKKwlGT1JNQVRfVFlQRV9QRVJDRU5UX0NIQVIsCisJRk9STUFUX1RZUEVfSU5WQUxJRCwKKwlGT1JNQVRfVFlQRV9MT05HX0xPTkcsCisJRk9STUFUX1RZUEVfVUxPTkcsCisJRk9STUFUX1RZUEVfTE9ORywKKwlGT1JNQVRfVFlQRV9VU0hPUlQsCisJRk9STUFUX1RZUEVfU0hPUlQsCisJRk9STUFUX1RZUEVfVUlOVCwKKwlGT1JNQVRfVFlQRV9JTlQsCisJRk9STUFUX1RZUEVfTlJDSEFSUywKKwlGT1JNQVRfVFlQRV9TSVpFX1QsCisJRk9STUFUX1RZUEVfUFRSRElGRgorfTsKKworc3RydWN0IHByaW50Zl9zcGVjIHsKKwllbnVtIGZvcm1hdF90eXBlCXR5cGU7CisJaW50CQkJZmxhZ3M7CQkvKiBmbGFncyB0byBudW1iZXIoKSAqLworCWludAkJCWZpZWxkX3dpZHRoOwkvKiB3aWR0aCBvZiBvdXRwdXQgZmllbGQgKi8KKwlpbnQJCQliYXNlOworCWludAkJCXByZWNpc2lvbjsJLyogIyBvZiBkaWdpdHMvY2hhcnMgKi8KKwlpbnQJCQlxdWFsaWZpZXI7Cit9OworCitzdGF0aWMgY2hhciAqbnVtYmVyKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1bnNpZ25lZCBsb25nIGxvbmcgbnVtLAorCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJLyogd2UgYXJlIGNhbGxlZCB3aXRoIGJhc2UgOCwgMTAgb3IgMTYsIG9ubHksIHRodXMgZG9uJ3QgbmVlZCAiRy4uLiIgICovCiAJc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzWzE2XSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsgLyogIkdISUpLTE1OT1BRUlNUVVZXWFlaIjsgKi8KQEAgLTQwNCwzMiArNDM1LDMyIEBACiAJY2hhciB0bXBbNjZdOwogCWNoYXIgc2lnbjsKIAljaGFyIGxvY2FzZTsKLQlpbnQgbmVlZF9wZnggPSAoKHR5cGUgJiBTUEVDSUFMKSAmJiBiYXNlICE9IDEwKTsKKwlpbnQgbmVlZF9wZnggPSAoKHNwZWMuZmxhZ3MgJiBTUEVDSUFMKSAmJiBzcGVjLmJhc2UgIT0gMTApOwogCWludCBpOwogCiAJLyogbG9jYXNlID0gMCBvciAweDIwLiBPUmluZyBkaWdpdHMgb3IgbGV0dGVycyB3aXRoICdsb2Nhc2UnCiAJICogcHJvZHVjZXMgc2FtZSBkaWdpdHMgb3IgKG1heWJlIGxvd2VyY2FzZWQpIGxldHRlcnMgKi8KLQlsb2Nhc2UgPSAodHlwZSAmIFNNQUxMKTsKLQlpZiAodHlwZSAmIExFRlQpCi0JCXR5cGUgJj0gflpFUk9QQUQ7CisJbG9jYXNlID0gKHNwZWMuZmxhZ3MgJiBTTUFMTCk7CisJaWYgKHNwZWMuZmxhZ3MgJiBMRUZUKQorCQlzcGVjLmZsYWdzICY9IH5aRVJPUEFEOwogCXNpZ24gPSAwOwotCWlmICh0eXBlICYgU0lHTikgeworCWlmIChzcGVjLmZsYWdzICYgU0lHTikgewogCQlpZiAoKHNpZ25lZCBsb25nIGxvbmcpIG51bSA8IDApIHsKIAkJCXNpZ24gPSAnLSc7CiAJCQludW0gPSAtIChzaWduZWQgbG9uZyBsb25nKSBudW07Ci0JCQlzaXplLS07Ci0JCX0gZWxzZSBpZiAodHlwZSAmIFBMVVMpIHsKKwkJCXNwZWMuZmllbGRfd2lkdGgtLTsKKwkJfSBlbHNlIGlmIChzcGVjLmZsYWdzICYgUExVUykgewogCQkJc2lnbiA9ICcrJzsKLQkJCXNpemUtLTsKLQkJfSBlbHNlIGlmICh0eXBlICYgU1BBQ0UpIHsKKwkJCXNwZWMuZmllbGRfd2lkdGgtLTsKKwkJfSBlbHNlIGlmIChzcGVjLmZsYWdzICYgU1BBQ0UpIHsKIAkJCXNpZ24gPSAnICc7Ci0JCQlzaXplLS07CisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CiAJCX0KIAl9CiAJaWYgKG5lZWRfcGZ4KSB7Ci0JCXNpemUtLTsKLQkJaWYgKGJhc2UgPT0gMTYpCi0JCQlzaXplLS07CisJCXNwZWMuZmllbGRfd2lkdGgtLTsKKwkJaWYgKHNwZWMuYmFzZSA9PSAxNikKKwkJCXNwZWMuZmllbGRfd2lkdGgtLTsKIAl9CiAKIAkvKiBnZW5lcmF0ZSBmdWxsIHN0cmluZyBpbiB0bXBbXSwgaW4gcmV2ZXJzZSBvcmRlciAqLwpAQCAtNDQxLDEwICs0NzIsMTAgQEAKIAkJdG1wW2krK10gPSAoZGlnaXRzW2RvX2RpdihudW0sYmFzZSldIHwgbG9jYXNlKTsKIAl9IHdoaWxlIChudW0gIT0gMCk7CiAJKi8KLQllbHNlIGlmIChiYXNlICE9IDEwKSB7IC8qIDggb3IgMTYgKi8KLQkJaW50IG1hc2sgPSBiYXNlIC0gMTsKKwllbHNlIGlmIChzcGVjLmJhc2UgIT0gMTApIHsgLyogOCBvciAxNiAqLworCQlpbnQgbWFzayA9IHNwZWMuYmFzZSAtIDE7CiAJCWludCBzaGlmdCA9IDM7Ci0JCWlmIChiYXNlID09IDE2KSBzaGlmdCA9IDQ7CisJCWlmIChzcGVjLmJhc2UgPT0gMTYpIHNoaWZ0ID0gNDsKIAkJZG8gewogCQkJdG1wW2krK10gPSAoZGlnaXRzWygodW5zaWduZWQgY2hhciludW0pICYgbWFza10gfCBsb2Nhc2UpOwogCQkJbnVtID4+PSBzaGlmdDsKQEAgLTQ1NCwxMiArNDg1LDEyIEBACiAJfQogCiAJLyogcHJpbnRpbmcgMTAwIHVzaW5nICUyZCBnaXZlcyAiMTAwIiwgbm90ICIwMCIgKi8KLQlpZiAoaSA+IHByZWNpc2lvbikKLQkJcHJlY2lzaW9uID0gaTsKKwlpZiAoaSA+IHNwZWMucHJlY2lzaW9uKQorCQlzcGVjLnByZWNpc2lvbiA9IGk7CiAJLyogbGVhZGluZyBzcGFjZSBwYWRkaW5nICovCi0Jc2l6ZSAtPSBwcmVjaXNpb247Ci0JaWYgKCEodHlwZSAmIChaRVJPUEFEK0xFRlQpKSkgewotCQl3aGlsZSgtLXNpemUgPj0gMCkgeworCXNwZWMuZmllbGRfd2lkdGggLT0gc3BlYy5wcmVjaXNpb247CisJaWYgKCEoc3BlYy5mbGFncyAmIChaRVJPUEFEK0xFRlQpKSkgeworCQl3aGlsZSgtLXNwZWMuZmllbGRfd2lkdGggPj0gMCkgewogCQkJaWYgKGJ1ZiA8IGVuZCkKIAkJCQkqYnVmID0gJyAnOwogCQkJKytidWY7CkBAIC00NzYsMjMgKzUwNywyMyBAQAogCQlpZiAoYnVmIDwgZW5kKQogCQkJKmJ1ZiA9ICcwJzsKIAkJKytidWY7Ci0JCWlmIChiYXNlID09IDE2KSB7CisJCWlmIChzcGVjLmJhc2UgPT0gMTYpIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9ICgnWCcgfCBsb2Nhc2UpOwogCQkJKytidWY7CiAJCX0KIAl9CiAJLyogemVybyBvciBzcGFjZSBwYWRkaW5nICovCi0JaWYgKCEodHlwZSAmIExFRlQpKSB7Ci0JCWNoYXIgYyA9ICh0eXBlICYgWkVST1BBRCkgPyAnMCcgOiAnICc7Ci0JCXdoaWxlICgtLXNpemUgPj0gMCkgeworCWlmICghKHNwZWMuZmxhZ3MgJiBMRUZUKSkgeworCQljaGFyIGMgPSAoc3BlYy5mbGFncyAmIFpFUk9QQUQpID8gJzAnIDogJyAnOworCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID49IDApIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9IGM7CiAJCQkrK2J1ZjsKIAkJfQogCX0KIAkvKiBobW0gZXZlbiBtb3JlIHplcm8gcGFkZGluZz8gKi8KLQl3aGlsZSAoaSA8PSAtLXByZWNpc2lvbikgeworCXdoaWxlIChpIDw9IC0tc3BlYy5wcmVjaXNpb24pIHsKIAkJaWYgKGJ1ZiA8IGVuZCkKIAkJCSpidWYgPSAnMCc7CiAJCSsrYnVmOwpAQCAtNTA0LDcgKzUzNSw3IEBACiAJCSsrYnVmOwogCX0KIAkvKiB0cmFpbGluZyBzcGFjZSBwYWRkaW5nICovCi0Jd2hpbGUgKC0tc2l6ZSA+PSAwKSB7CisJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+PSAwKSB7CiAJCWlmIChidWYgPCBlbmQpCiAJCQkqYnVmID0gJyAnOwogCQkrK2J1ZjsKQEAgLTUxMiwxNyArNTQzLDE3IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIGNoYXIgKnN0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY2hhciAqcywgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCitzdGF0aWMgY2hhciAqc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCBjaGFyICpzLCBzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKIAlpbnQgbGVuLCBpOwogCiAJaWYgKCh1bnNpZ25lZCBsb25nKXMgPCBQQUdFX1NJWkUpCiAJCXMgPSAiPE5VTEw+IjsKIAotCWxlbiA9IHN0cm5sZW4ocywgcHJlY2lzaW9uKTsKKwlsZW4gPSBzdHJubGVuKHMsIHNwZWMucHJlY2lzaW9uKTsKIAotCWlmICghKGZsYWdzICYgTEVGVCkpIHsKLQkJd2hpbGUgKGxlbiA8IGZpZWxkX3dpZHRoLS0pIHsKKwlpZiAoIShzcGVjLmZsYWdzICYgTEVGVCkpIHsKKwkJd2hpbGUgKGxlbiA8IHNwZWMuZmllbGRfd2lkdGgtLSkgewogCQkJaWYgKGJ1ZiA8IGVuZCkKIAkJCQkqYnVmID0gJyAnOwogCQkJKytidWY7CkBAIC01MzMsNyArNTY0LDcgQEAKIAkJCSpidWYgPSAqczsKIAkJKytidWY7ICsrczsKIAl9Ci0Jd2hpbGUgKGxlbiA8IGZpZWxkX3dpZHRoLS0pIHsKKwl3aGlsZSAobGVuIDwgc3BlYy5maWVsZF93aWR0aC0tKSB7CiAJCWlmIChidWYgPCBlbmQpCiAJCQkqYnVmID0gJyAnOwogCQkrK2J1ZjsKQEAgLTU0MSwyMSArNTcyLDI0IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIGNoYXIgKnN5bWJvbF9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHZvaWQgKnB0ciwgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCitzdGF0aWMgY2hhciAqc3ltYm9sX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdm9pZCAqcHRyLAorCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAodW5zaWduZWQgbG9uZykgcHRyOwogI2lmZGVmIENPTkZJR19LQUxMU1lNUwogCWNoYXIgc3ltW0tTWU1fU1lNQk9MX0xFTl07CiAJc3ByaW50X3N5bWJvbChzeW0sIHZhbHVlKTsKLQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIHNwZWMpOwogI2Vsc2UKLQlmaWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7Ci0JZmxhZ3MgfD0gU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRDsKLQlyZXR1cm4gbnVtYmVyKGJ1ZiwgZW5kLCB2YWx1ZSwgMTYsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwlzcGVjLmZpZWxkX3dpZHRoID0gMipzaXplb2Yodm9pZCAqKTsKKwlzcGVjLmZsYWdzIHw9IFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQ7CisJc3BlYy5iYXNlID0gMTY7CisJcmV0dXJuIG51bWJlcihidWYsIGVuZCwgdmFsdWUsIHNwZWMpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBjaGFyICpyZXNvdXJjZV9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgZmllbGRfd2lkdGgsIGludCBwcmVjaXNpb24sIGludCBmbGFncykKK3N0YXRpYyBjaGFyICpyZXNvdXJjZV9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogI2lmbmRlZiBJT19SU1JDX1BSSU5US19TSVpFCiAjZGVmaW5lIElPX1JTUkNfUFJJTlRLX1NJWkUJNApAQCAtNTY0LDcgKzU5OCwxMSBAQAogI2lmbmRlZiBNRU1fUlNSQ19QUklOVEtfU0laRQogI2RlZmluZSBNRU1fUlNSQ19QUklOVEtfU0laRQk4CiAjZW5kaWYKLQorCXN0cnVjdCBwcmludGZfc3BlYyBudW1fc3BlYyA9IHsKKwkJLmJhc2UgPSAxNiwKKwkJLnByZWNpc2lvbiA9IC0xLAorCQkuZmxhZ3MgPSBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFELAorCX07CiAJLyogcm9vbSBmb3IgdGhlIGFjdHVhbCBudW1iZXJzLCB0aGUgdHdvICIweCIsIC0sIFssIF0gYW5kIHRoZSBmaW5hbCB6ZXJvICovCiAJY2hhciBzeW1bNCpzaXplb2YocmVzb3VyY2Vfc2l6ZV90KSArIDhdOwogCWNoYXIgKnAgPSBzeW0sICpwZW5kID0gc3ltICsgc2l6ZW9mKHN5bSk7CkBAIC01NzYsMTcgKzYxNCwxOCBAQAogCQlzaXplID0gTUVNX1JTUkNfUFJJTlRLX1NJWkU7CiAKIAkqcCsrID0gJ1snOwotCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwludW1fc3BlYy5maWVsZF93aWR0aCA9IHNpemU7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPnN0YXJ0LCBudW1fc3BlYyk7CiAJKnArKyA9ICctJzsKLQlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+ZW5kLCAxNiwgc2l6ZSwgLTEsIFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQpOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5lbmQsIG51bV9zcGVjKTsKIAkqcCsrID0gJ10nOwogCSpwID0gMDsKIAotCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHN5bSwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHN5bSwgc3BlYyk7CiB9CiAKLXN0YXRpYyBjaGFyICptYWNfYWRkcmVzc19zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLCBpbnQgZmllbGRfd2lkdGgsCi0JCQkJaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKm1hY19hZGRyZXNzX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsCisJCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJY2hhciBtYWNfYWRkcls2ICogM107IC8qICg2ICogMiBoZXggZGlnaXRzKSwgNSBjb2xvbnMgYW5kIHRyYWlsaW5nIHplcm8gKi8KIAljaGFyICpwID0gbWFjX2FkZHI7CkBAIC01OTQsMTYgKzYzMywxNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQlwID0gcGFja19oZXhfYnl0ZShwLCBhZGRyW2ldKTsKLQkJaWYgKCEoZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDUpCisJCWlmICghKHNwZWMuZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDUpCiAJCQkqcCsrID0gJzonOwogCX0KIAkqcCA9ICdcMCc7CisJc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAotCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIG1hY19hZGRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyAmIH5TUEVDSUFMKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBtYWNfYWRkciwgc3BlYyk7CiB9CiAKLXN0YXRpYyBjaGFyICppcDZfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLCBpbnQgZmllbGRfd2lkdGgsCi0JCQkgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKmlwNl9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsCisJCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJY2hhciBpcDZfYWRkcls4ICogNV07IC8qICg4ICogNCBoZXggZGlnaXRzKSwgNyBjb2xvbnMgYW5kIHRyYWlsaW5nIHplcm8gKi8KIAljaGFyICpwID0gaXA2X2FkZHI7CkBAIC02MTIsMTYgKzY1MiwxNyBAQAogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkclsyICogaV0pOwogCQlwID0gcGFja19oZXhfYnl0ZShwLCBhZGRyWzIgKiBpICsgMV0pOwotCQlpZiAoIShmbGFncyAmIFNQRUNJQUwpICYmIGkgIT0gNykKKwkJaWYgKCEoc3BlYy5mbGFncyAmIFNQRUNJQUwpICYmIGkgIT0gNykKIAkJCSpwKysgPSAnOic7CiAJfQogCSpwID0gJ1wwJzsKKwlzcGVjLmZsYWdzICY9IH5TUEVDSUFMOwogCi0JcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgaXA2X2FkZHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzICYgflNQRUNJQUwpOworCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNl9hZGRyLCBzcGVjKTsKIH0KIAotc3RhdGljIGNoYXIgKmlwNF9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsIGludCBmaWVsZF93aWR0aCwKLQkJCSBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCitzdGF0aWMgY2hhciAqaXA0X2FkZHJfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwKKwkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKIAljaGFyIGlwNF9hZGRyWzQgKiA0XTsgLyogKDQgKiAzIGRlY2ltYWwgZGlnaXRzKSwgMyBkb3RzIGFuZCB0cmFpbGluZyB6ZXJvICovCiAJY2hhciB0ZW1wWzNdOwkvKiBob2xkIGVhY2ggSVAgcXVhZCBpbiByZXZlcnNlIG9yZGVyICovCkBAIC02MzcsOCArNjc4LDkgQEAKIAkJCSpwKysgPSAnLic7CiAJfQogCSpwID0gJ1wwJzsKKwlzcGVjLmZsYWdzICY9IH5TUEVDSUFMOwogCi0JcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgaXA0X2FkZHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzICYgflNQRUNJQUwpOworCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNF9hZGRyLCBzcGVjKTsKIH0KIAogLyoKQEAgLTY2Myw0MSArNzA1LDIzMyBAQAogICogZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHJlYWxseSBmdW5jdGlvbiBkZXNjcmlwdG9ycywgd2hpY2ggY29udGFpbiBhCiAgKiBwb2ludGVyIHRvIHRoZSByZWFsIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBjaGFyICpwb2ludGVyKGNvbnN0IGNoYXIgKmZtdCwgY2hhciAqYnVmLCBjaGFyICplbmQsIHZvaWQgKnB0ciwgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCitzdGF0aWMgY2hhciAqcG9pbnRlcihjb25zdCBjaGFyICpmbXQsIGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB2b2lkICpwdHIsCisJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKIAlpZiAoIXB0cikKLQkJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgIihudWxsKSIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwkJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgIihudWxsKSIsIHNwZWMpOwogCiAJc3dpdGNoICgqZm10KSB7CiAJY2FzZSAnRic6CiAJCXB0ciA9IGRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IocHRyKTsKIAkJLyogRmFsbHRocm91Z2ggKi8KIAljYXNlICdTJzoKLQkJcmV0dXJuIHN5bWJvbF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCQlyZXR1cm4gc3ltYm9sX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjKTsKIAljYXNlICdSJzoKLQkJcmV0dXJuIHJlc291cmNlX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CiAJY2FzZSAnbSc6Ci0JCWZsYWdzIHw9IFNQRUNJQUw7CisJCXNwZWMuZmxhZ3MgfD0gU1BFQ0lBTDsKIAkJLyogRmFsbHRocm91Z2ggKi8KIAljYXNlICdNJzoKLQkJcmV0dXJuIG1hY19hZGRyZXNzX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJCXJldHVybiBtYWNfYWRkcmVzc19zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CiAJY2FzZSAnaSc6Ci0JCWZsYWdzIHw9IFNQRUNJQUw7CisJCXNwZWMuZmxhZ3MgfD0gU1BFQ0lBTDsKIAkJLyogRmFsbHRocm91Z2ggKi8KIAljYXNlICdJJzoKIAkJaWYgKGZtdFsxXSA9PSAnNicpCi0JCQlyZXR1cm4gaXA2X2FkZHJfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwkJCXJldHVybiBpcDZfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CiAJCWlmIChmbXRbMV0gPT0gJzQnKQotCQkJcmV0dXJuIGlwNF9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Ci0JCWZsYWdzICY9IH5TUEVDSUFMOworCQkJcmV0dXJuIGlwNF9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjKTsKKwkJc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAkJYnJlYWs7CiAJfQotCWZsYWdzIHw9IFNNQUxMOwotCWlmIChmaWVsZF93aWR0aCA9PSAtMSkgewotCQlmaWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7Ci0JCWZsYWdzIHw9IFpFUk9QQUQ7CisJc3BlYy5mbGFncyB8PSBTTUFMTDsKKwlpZiAoc3BlYy5maWVsZF93aWR0aCA9PSAtMSkgeworCQlzcGVjLmZpZWxkX3dpZHRoID0gMipzaXplb2Yodm9pZCAqKTsKKwkJc3BlYy5mbGFncyB8PSBaRVJPUEFEOwogCX0KLQlyZXR1cm4gbnVtYmVyKGJ1ZiwgZW5kLCAodW5zaWduZWQgbG9uZykgcHRyLCAxNiwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCXNwZWMuYmFzZSA9IDE2OworCisJcmV0dXJuIG51bWJlcihidWYsIGVuZCwgKHVuc2lnbmVkIGxvbmcpIHB0ciwgc3BlYyk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVjb2RlIHByaW50ZiBzdHlsZSBmb3JtYXQuCisgKiBFYWNoIGNhbGwgZGVjb2RlIGEgdG9rZW4gZnJvbSB0aGUgZm9ybWF0IGFuZCByZXR1cm4gdGhlCisgKiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIChvciBsaWtlbHkgdGhlIGRlbHRhIHdoZXJlIGl0IHdhbnRzCisgKiB0byBnbyBvbiB0aGUgbmV4dCBjYWxsKS4KKyAqIFRoZSBkZWNvZGVkIHRva2VuIGlzIHJldHVybmVkIHRocm91Z2ggdGhlIHBhcmFtZXRlcnMKKyAqCisgKiAnaCcsICdsJywgb3IgJ0wnIGZvciBpbnRlZ2VyIGZpZWxkcworICogJ3onIHN1cHBvcnQgYWRkZWQgMjMvNy8xOTk5IFMuSC4KKyAqICd6JyBjaGFuZ2VkIHRvICdaJyAtLWRhdmlkbSAxLzI1Lzk5CisgKiAndCcgYWRkZWQgZm9yIHB0cmRpZmZfdAorICoKKyAqIEBmbXQ6IHRoZSBmb3JtYXQgc3RyaW5nCisgKiBAdHlwZSBvZiB0aGUgdG9rZW4gcmV0dXJuZWQKKyAqIEBmbGFnczogdmFyaW91cyBmbGFncyBzdWNoIGFzICssIC0sICMgdG9rZW5zLi4KKyAqIEBmaWVsZF93aWR0aDogb3ZlcndyaXR0ZW4gd2lkdGgKKyAqIEBiYXNlOiBiYXNlIG9mIHRoZSBudW1iZXIgKG9jdGFsLCBoZXgsIC4uLikKKyAqIEBwcmVjaXNpb246IHByZWNpc2lvbiBvZiBhIG51bWJlcgorICogQHF1YWxpZmllcjogcXVhbGlmaWVyIG9mIGEgbnVtYmVyIChsb25nLCBzaXplX3QsIC4uLikKKyAqLworc3RhdGljIGludCBmb3JtYXRfZGVjb2RlKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHByaW50Zl9zcGVjICpzcGVjKQoreworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gZm10OworCisJLyogd2UgZmluaXNoZWQgZWFybHkgYnkgcmVhZGluZyB0aGUgZmllbGQgd2lkdGggKi8KKwlpZiAoc3BlYy0+dHlwZSA9PSBGT1JNQVRfVFlQRV9XSURUSCkgeworCQlpZiAoc3BlYy0+ZmllbGRfd2lkdGggPCAwKSB7CisJCQlzcGVjLT5maWVsZF93aWR0aCA9IC1zcGVjLT5maWVsZF93aWR0aDsKKwkJCXNwZWMtPmZsYWdzIHw9IExFRlQ7CisJCX0KKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX05PTkU7CisJCWdvdG8gcHJlY2lzaW9uOworCX0KKworCS8qIHdlIGZpbmlzaGVkIGVhcmx5IGJ5IHJlYWRpbmcgdGhlIHByZWNpc2lvbiAqLworCWlmIChzcGVjLT50eXBlID09IEZPUk1BVF9UWVBFX1BSRUNJU0lPTikgeworCQlpZiAoc3BlYy0+cHJlY2lzaW9uIDwgMCkKKwkJCXNwZWMtPnByZWNpc2lvbiA9IDA7CisKKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX05PTkU7CisJCWdvdG8gcXVhbGlmaWVyOworCX0KKworCS8qIEJ5IGRlZmF1bHQgKi8KKwlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfTk9ORTsKKworCWZvciAoOyAqZm10IDsgKytmbXQpIHsKKwkJaWYgKCpmbXQgPT0gJyUnKQorCQkJYnJlYWs7CisJfQorCisJLyogUmV0dXJuIHRoZSBjdXJyZW50IG5vbi1mb3JtYXQgc3RyaW5nICovCisJaWYgKGZtdCAhPSBzdGFydCB8fCAhKmZtdCkKKwkJcmV0dXJuIGZtdCAtIHN0YXJ0OworCisJLyogUHJvY2VzcyBmbGFncyAqLworCXNwZWMtPmZsYWdzID0gMDsKKworCXdoaWxlICgxKSB7IC8qIHRoaXMgYWxzbyBza2lwcyBmaXJzdCAnJScgKi8KKwkJYm9vbCBmb3VuZCA9IHRydWU7CisKKwkJKytmbXQ7CisKKwkJc3dpdGNoICgqZm10KSB7CisJCWNhc2UgJy0nOiBzcGVjLT5mbGFncyB8PSBMRUZUOyAgICBicmVhazsKKwkJY2FzZSAnKyc6IHNwZWMtPmZsYWdzIHw9IFBMVVM7ICAgIGJyZWFrOworCQljYXNlICcgJzogc3BlYy0+ZmxhZ3MgfD0gU1BBQ0U7ICAgYnJlYWs7CisJCWNhc2UgJyMnOiBzcGVjLT5mbGFncyB8PSBTUEVDSUFMOyBicmVhazsKKwkJY2FzZSAnMCc6IHNwZWMtPmZsYWdzIHw9IFpFUk9QQUQ7IGJyZWFrOworCQlkZWZhdWx0OiAgZm91bmQgPSBmYWxzZTsKKwkJfQorCisJCWlmICghZm91bmQpCisJCQlicmVhazsKKwl9CisKKwkvKiBnZXQgZmllbGQgd2lkdGggKi8KKwlzcGVjLT5maWVsZF93aWR0aCA9IC0xOworCisJaWYgKGlzZGlnaXQoKmZtdCkpCisJCXNwZWMtPmZpZWxkX3dpZHRoID0gc2tpcF9hdG9pKCZmbXQpOworCWVsc2UgaWYgKCpmbXQgPT0gJyonKSB7CisJCS8qIGl0J3MgdGhlIG5leHQgYXJndW1lbnQgKi8KKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1dJRFRIOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKwl9CisKK3ByZWNpc2lvbjoKKwkvKiBnZXQgdGhlIHByZWNpc2lvbiAqLworCXNwZWMtPnByZWNpc2lvbiA9IC0xOworCWlmICgqZm10ID09ICcuJykgeworCQkrK2ZtdDsKKwkJaWYgKGlzZGlnaXQoKmZtdCkpIHsKKwkJCXNwZWMtPnByZWNpc2lvbiA9IHNraXBfYXRvaSgmZm10KTsKKwkJCWlmIChzcGVjLT5wcmVjaXNpb24gPCAwKQorCQkJCXNwZWMtPnByZWNpc2lvbiA9IDA7CisJCX0gZWxzZSBpZiAoKmZtdCA9PSAnKicpIHsKKwkJCS8qIGl0J3MgdGhlIG5leHQgYXJndW1lbnQgKi8KKwkJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9QUkVDSVNJT047CisJCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKwkJfQorCX0KKworcXVhbGlmaWVyOgorCS8qIGdldCB0aGUgY29udmVyc2lvbiBxdWFsaWZpZXIgKi8KKwlzcGVjLT5xdWFsaWZpZXIgPSAtMTsKKwlpZiAoKmZtdCA9PSAnaCcgfHwgKmZtdCA9PSAnbCcgfHwgKmZtdCA9PSAnTCcgfHwKKwkgICAgKmZtdCA9PSAnWicgfHwgKmZtdCA9PSAneicgfHwgKmZtdCA9PSAndCcpIHsKKwkJc3BlYy0+cXVhbGlmaWVyID0gKmZtdDsKKwkJKytmbXQ7CisJCWlmIChzcGVjLT5xdWFsaWZpZXIgPT0gJ2wnICYmICpmbXQgPT0gJ2wnKSB7CisJCQlzcGVjLT5xdWFsaWZpZXIgPSAnTCc7CisJCQkrK2ZtdDsKKwkJfQorCX0KKworCS8qIGRlZmF1bHQgYmFzZSAqLworCXNwZWMtPmJhc2UgPSAxMDsKKwlzd2l0Y2ggKCpmbXQpIHsKKwljYXNlICdjJzoKKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0NIQVI7CisJCXJldHVybiArK2ZtdCAtIHN0YXJ0OworCisJY2FzZSAncyc6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9TVFI7CisJCXJldHVybiArK2ZtdCAtIHN0YXJ0OworCisJY2FzZSAncCc6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9QVFI7CisJCXJldHVybiBmbXQgLSBzdGFydDsKKwkJLyogc2tpcCBhbG51bSAqLworCisJY2FzZSAnbic6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9OUkNIQVJTOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKworCWNhc2UgJyUnOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKworCS8qIGludGVnZXIgbnVtYmVyIGZvcm1hdHMgLSBzZXQgdXAgdGhlIGZsYWdzIGFuZCAiYnJlYWsiICovCisJY2FzZSAnbyc6CisJCXNwZWMtPmJhc2UgPSA4OworCQlicmVhazsKKworCWNhc2UgJ3gnOgorCQlzcGVjLT5mbGFncyB8PSBTTUFMTDsKKworCWNhc2UgJ1gnOgorCQlzcGVjLT5iYXNlID0gMTY7CisJCWJyZWFrOworCisJY2FzZSAnZCc6CisJY2FzZSAnaSc6CisJCXNwZWMtPmZsYWdzIHw9IFNJR047CisJY2FzZSAndSc6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0lOVkFMSUQ7CisJCXJldHVybiBmbXQgLSBzdGFydDsKKwl9CisKKwlpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdMJykKKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0xPTkdfTE9ORzsKKwllbHNlIGlmIChzcGVjLT5xdWFsaWZpZXIgPT0gJ2wnKSB7CisJCWlmIChzcGVjLT5mbGFncyAmIFNJR04pCisJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfTE9ORzsKKwkJZWxzZQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1VMT05HOworCX0gZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdaJyB8fCBzcGVjLT5xdWFsaWZpZXIgPT0gJ3onKSB7CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9TSVpFX1Q7CisJfSBlbHNlIGlmIChzcGVjLT5xdWFsaWZpZXIgPT0gJ3QnKSB7CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9QVFJESUZGOworCX0gZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdoJykgeworCQlpZiAoc3BlYy0+ZmxhZ3MgJiBTSUdOKQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1NIT1JUOworCQllbHNlCisJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfVVNIT1JUOworCX0gZWxzZSB7CisJCWlmIChzcGVjLT5mbGFncyAmIFNJR04pCisJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfSU5UOworCQllbHNlCisJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfVUlOVDsKKwl9CisKKwlyZXR1cm4gKytmbXQgLSBzdGFydDsKIH0KIAogLyoqCkBAIC03MjYsMTggKzk2MCw5IEBACiBpbnQgdnNucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07Ci0JaW50IGJhc2U7CiAJY2hhciAqc3RyLCAqZW5kLCBjOwotCi0JaW50IGZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkgKi8KLQotCWludCBmaWVsZF93aWR0aDsJLyogd2lkdGggb2Ygb3V0cHV0IGZpZWxkICovCi0JaW50IHByZWNpc2lvbjsJCS8qIG1pbi4gIyBvZiBkaWdpdHMgZm9yIGludGVnZXJzOyBtYXgKLQkJCQkgICBudW1iZXIgb2YgY2hhcnMgZm9yIGZyb20gc3RyaW5nICovCi0JaW50IHF1YWxpZmllcjsJCS8qICdoJywgJ2wnLCBvciAnTCcgZm9yIGludGVnZXIgZmllbGRzICovCi0JCQkJLyogJ3onIHN1cHBvcnQgYWRkZWQgMjMvNy8xOTk5IFMuSC4gICAgKi8KLQkJCQkvKiAneicgY2hhbmdlZCB0byAnWicgLS1kYXZpZG0gMS8yNS85OSAqLwotCQkJCS8qICd0JyBhZGRlZCBmb3IgcHRyZGlmZl90ICovCisJaW50IHJlYWQ7CisJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07CiAKIAkvKiBSZWplY3Qgb3V0LW9mLXJhbmdlIHZhbHVlcyBlYXJseS4gIExhcmdlIHBvc2l0aXZlIHNpemVzIGFyZQogCSAgIHVzZWQgZm9yIHVua25vd24gYnVmZmVyIHNpemVzLiAqLwpAQCAtNzU4LDE4NCArOTgzLDE0NCBAQAogCQlzaXplID0gZW5kIC0gYnVmOwogCX0KIAotCWZvciAoOyAqZm10IDsgKytmbXQpIHsKLQkJaWYgKCpmbXQgIT0gJyUnKSB7Ci0JCQlpZiAoc3RyIDwgZW5kKQotCQkJCSpzdHIgPSAqZm10OwotCQkJKytzdHI7Ci0JCQljb250aW51ZTsKKwl3aGlsZSAoKmZtdCkgeworCQljb25zdCBjaGFyICpvbGRfZm10ID0gZm10OworCisJCXJlYWQgPSBmb3JtYXRfZGVjb2RlKGZtdCwgJnNwZWMpOworCisJCWZtdCArPSByZWFkOworCisJCXN3aXRjaCAoc3BlYy50eXBlKSB7CisJCWNhc2UgRk9STUFUX1RZUEVfTk9ORTogeworCQkJaW50IGNvcHkgPSByZWFkOworCQkJaWYgKHN0ciA8IGVuZCkgeworCQkJCWlmIChjb3B5ID4gZW5kIC0gc3RyKQorCQkJCQljb3B5ID0gZW5kIC0gc3RyOworCQkJCW1lbWNweShzdHIsIG9sZF9mbXQsIGNvcHkpOworCQkJfQorCQkJc3RyICs9IHJlYWQ7CisJCQlicmVhazsKIAkJfQogCi0JCS8qIHByb2Nlc3MgZmxhZ3MgKi8KLQkJZmxhZ3MgPSAwOwotCQlyZXBlYXQ6Ci0JCQkrK2ZtdDsJCS8qIHRoaXMgYWxzbyBza2lwcyBmaXJzdCAnJScgKi8KLQkJCXN3aXRjaCAoKmZtdCkgewotCQkJCWNhc2UgJy0nOiBmbGFncyB8PSBMRUZUOyBnb3RvIHJlcGVhdDsKLQkJCQljYXNlICcrJzogZmxhZ3MgfD0gUExVUzsgZ290byByZXBlYXQ7Ci0JCQkJY2FzZSAnICc6IGZsYWdzIHw9IFNQQUNFOyBnb3RvIHJlcGVhdDsKLQkJCQljYXNlICcjJzogZmxhZ3MgfD0gU1BFQ0lBTDsgZ290byByZXBlYXQ7Ci0JCQkJY2FzZSAnMCc6IGZsYWdzIHw9IFpFUk9QQUQ7IGdvdG8gcmVwZWF0OwotCQkJfQorCQljYXNlIEZPUk1BVF9UWVBFX1dJRFRIOgorCQkJc3BlYy5maWVsZF93aWR0aCA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJYnJlYWs7CiAKLQkJLyogZ2V0IGZpZWxkIHdpZHRoICovCi0JCWZpZWxkX3dpZHRoID0gLTE7Ci0JCWlmIChpc2RpZ2l0KCpmbXQpKQotCQkJZmllbGRfd2lkdGggPSBza2lwX2F0b2koJmZtdCk7Ci0JCWVsc2UgaWYgKCpmbXQgPT0gJyonKSB7Ci0JCQkrK2ZtdDsKLQkJCS8qIGl0J3MgdGhlIG5leHQgYXJndW1lbnQgKi8KLQkJCWZpZWxkX3dpZHRoID0gdmFfYXJnKGFyZ3MsIGludCk7Ci0JCQlpZiAoZmllbGRfd2lkdGggPCAwKSB7Ci0JCQkJZmllbGRfd2lkdGggPSAtZmllbGRfd2lkdGg7Ci0JCQkJZmxhZ3MgfD0gTEVGVDsKLQkJCX0KLQkJfQorCQljYXNlIEZPUk1BVF9UWVBFX1BSRUNJU0lPTjoKKwkJCXNwZWMucHJlY2lzaW9uID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCQlicmVhazsKIAotCQkvKiBnZXQgdGhlIHByZWNpc2lvbiAqLwotCQlwcmVjaXNpb24gPSAtMTsKLQkJaWYgKCpmbXQgPT0gJy4nKSB7Ci0JCQkrK2ZtdDsJCi0JCQlpZiAoaXNkaWdpdCgqZm10KSkKLQkJCQlwcmVjaXNpb24gPSBza2lwX2F0b2koJmZtdCk7Ci0JCQllbHNlIGlmICgqZm10ID09ICcqJykgewotCQkJCSsrZm10OwotCQkJCS8qIGl0J3MgdGhlIG5leHQgYXJndW1lbnQgKi8KLQkJCQlwcmVjaXNpb24gPSB2YV9hcmcoYXJncywgaW50KTsKLQkJCX0KLQkJCWlmIChwcmVjaXNpb24gPCAwKQotCQkJCXByZWNpc2lvbiA9IDA7Ci0JCX0KLQotCQkvKiBnZXQgdGhlIGNvbnZlcnNpb24gcXVhbGlmaWVyICovCi0JCXF1YWxpZmllciA9IC0xOwotCQlpZiAoKmZtdCA9PSAnaCcgfHwgKmZtdCA9PSAnbCcgfHwgKmZtdCA9PSAnTCcgfHwKLQkJICAgICpmbXQgPT0nWicgfHwgKmZtdCA9PSAneicgfHwgKmZtdCA9PSAndCcpIHsKLQkJCXF1YWxpZmllciA9ICpmbXQ7Ci0JCQkrK2ZtdDsKLQkJCWlmIChxdWFsaWZpZXIgPT0gJ2wnICYmICpmbXQgPT0gJ2wnKSB7Ci0JCQkJcXVhbGlmaWVyID0gJ0wnOwotCQkJCSsrZm10OwotCQkJfQotCQl9Ci0KLQkJLyogZGVmYXVsdCBiYXNlICovCi0JCWJhc2UgPSAxMDsKLQotCQlzd2l0Y2ggKCpmbXQpIHsKLQkJCWNhc2UgJ2MnOgotCQkJCWlmICghKGZsYWdzICYgTEVGVCkpIHsKLQkJCQkJd2hpbGUgKC0tZmllbGRfd2lkdGggPiAwKSB7Ci0JCQkJCQlpZiAoc3RyIDwgZW5kKQotCQkJCQkJCSpzdHIgPSAnICc7Ci0JCQkJCQkrK3N0cjsKLQkJCQkJfQotCQkJCX0KLQkJCQljID0gKHVuc2lnbmVkIGNoYXIpIHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJCWlmIChzdHIgPCBlbmQpCi0JCQkJCSpzdHIgPSBjOwotCQkJCSsrc3RyOwotCQkJCXdoaWxlICgtLWZpZWxkX3dpZHRoID4gMCkgeworCQljYXNlIEZPUk1BVF9UWVBFX0NIQVI6CisJCQlpZiAoIShzcGVjLmZsYWdzICYgTEVGVCkpIHsKKwkJCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID4gMCkgewogCQkJCQlpZiAoc3RyIDwgZW5kKQogCQkJCQkJKnN0ciA9ICcgJzsKIAkJCQkJKytzdHI7CisKIAkJCQl9Ci0JCQkJY29udGludWU7Ci0KLQkJCWNhc2UgJ3MnOgotCQkJCXN0ciA9IHN0cmluZyhzdHIsIGVuZCwgdmFfYXJnKGFyZ3MsIGNoYXIgKiksIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKLQkJCQljb250aW51ZTsKLQotCQkJY2FzZSAncCc6Ci0JCQkJc3RyID0gcG9pbnRlcihmbXQrMSwgc3RyLCBlbmQsCi0JCQkJCQl2YV9hcmcoYXJncywgdm9pZCAqKSwKLQkJCQkJCWZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKLQkJCQkvKiBTa2lwIGFsbCBhbHBoYW51bWVyaWMgcG9pbnRlciBzdWZmaXhlcyAqLwotCQkJCXdoaWxlIChpc2FsbnVtKGZtdFsxXSkpCi0JCQkJCWZtdCsrOwotCQkJCWNvbnRpbnVlOwotCi0JCQljYXNlICduJzoKLQkJCQkvKiBGSVhNRToKLQkJCQkqIFdoYXQgZG9lcyBDOTkgc2F5IGFib3V0IHRoZSBvdmVyZmxvdyBjYXNlIGhlcmU/ICovCi0JCQkJaWYgKHF1YWxpZmllciA9PSAnbCcpIHsKLQkJCQkJbG9uZyAqIGlwID0gdmFfYXJnKGFyZ3MsIGxvbmcgKik7Ci0JCQkJCSppcCA9IChzdHIgLSBidWYpOwotCQkJCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJyB8fCBxdWFsaWZpZXIgPT0gJ3onKSB7Ci0JCQkJCXNpemVfdCAqIGlwID0gdmFfYXJnKGFyZ3MsIHNpemVfdCAqKTsKLQkJCQkJKmlwID0gKHN0ciAtIGJ1Zik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaW50ICogaXAgPSB2YV9hcmcoYXJncywgaW50ICopOwotCQkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0KLQkJCWNhc2UgJyUnOgorCQkJfQorCQkJYyA9ICh1bnNpZ25lZCBjaGFyKSB2YV9hcmcoYXJncywgaW50KTsKKwkJCWlmIChzdHIgPCBlbmQpCisJCQkJKnN0ciA9IGM7CisJCQkrK3N0cjsKKwkJCXdoaWxlICgtLXNwZWMuZmllbGRfd2lkdGggPiAwKSB7CiAJCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkJKnN0ciA9ICclJzsKKwkJCQkJKnN0ciA9ICcgJzsKIAkJCQkrK3N0cjsKLQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyZWFrOwogCi0JCQkJLyogaW50ZWdlciBudW1iZXIgZm9ybWF0cyAtIHNldCB1cCB0aGUgZmxhZ3MgYW5kICJicmVhayIgKi8KLQkJCWNhc2UgJ28nOgotCQkJCWJhc2UgPSA4OworCQljYXNlIEZPUk1BVF9UWVBFX1NUUjoKKwkJCXN0ciA9IHN0cmluZyhzdHIsIGVuZCwgdmFfYXJnKGFyZ3MsIGNoYXIgKiksIHNwZWMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QVFI6CisJCQlzdHIgPSBwb2ludGVyKGZtdCsxLCBzdHIsIGVuZCwgdmFfYXJnKGFyZ3MsIHZvaWQgKiksCisJCQkJICAgICAgc3BlYyk7CisJCQl3aGlsZSAoaXNhbG51bSgqZm10KSkKKwkJCQlmbXQrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSOgorCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkqc3RyID0gJyUnOworCQkJKytzdHI7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0lOVkFMSUQ6CisJCQlpZiAoc3RyIDwgZW5kKQorCQkJCSpzdHIgPSAnJSc7CisJCQkrK3N0cjsKKwkJCWlmICgqZm10KSB7CisJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJKnN0ciA9ICpmbXQ7CisJCQkJKytzdHI7CisJCQl9IGVsc2UgeworCQkJCS0tZm10OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9OUkNIQVJTOiB7CisJCQlpbnQgcXVhbGlmaWVyID0gc3BlYy5xdWFsaWZpZXI7CisKKwkJCWlmIChxdWFsaWZpZXIgPT0gJ2wnKSB7CisJCQkJbG9uZyAqaXAgPSB2YV9hcmcoYXJncywgbG9uZyAqKTsKKwkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKKwkJCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJyB8fAorCQkJCQlxdWFsaWZpZXIgPT0gJ3onKSB7CisJCQkJc2l6ZV90ICppcCA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7CisJCQkJKmlwID0gKHN0ciAtIGJ1Zik7CisJCQl9IGVsc2UgeworCQkJCWludCAqaXAgPSB2YV9hcmcoYXJncywgaW50ICopOworCQkJCSppcCA9IChzdHIgLSBidWYpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlkZWZhdWx0OgorCQkJc3dpdGNoIChzcGVjLnR5cGUpIHsKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9OR19MT05HOgorCQkJCW51bSA9IHZhX2FyZyhhcmdzLCBsb25nIGxvbmcpOwogCQkJCWJyZWFrOwotCi0JCQljYXNlICd4JzoKLQkJCQlmbGFncyB8PSBTTUFMTDsKLQkJCWNhc2UgJ1gnOgotCQkJCWJhc2UgPSAxNjsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUxPTkc6CisJCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOwogCQkJCWJyZWFrOwotCi0JCQljYXNlICdkJzoKLQkJCWNhc2UgJ2knOgotCQkJCWZsYWdzIHw9IFNJR047Ci0JCQljYXNlICd1JzoKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9ORzoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgbG9uZyk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgRk9STUFUX1RZUEVfU0laRV9UOgorCQkJCW51bSA9IHZhX2FyZyhhcmdzLCBzaXplX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9QVFJESUZGOgorCQkJCW51bSA9IHZhX2FyZyhhcmdzLCBwdHJkaWZmX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9VU0hPUlQ6CisJCQkJbnVtID0gKHVuc2lnbmVkIHNob3J0KSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfU0hPUlQ6CisJCQkJbnVtID0gKHNob3J0KSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfSU5UOgorCQkJCW51bSA9IChpbnQpIHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlpZiAoc3RyIDwgZW5kKQotCQkJCQkqc3RyID0gJyUnOwotCQkJCSsrc3RyOwotCQkJCWlmICgqZm10KSB7Ci0JCQkJCWlmIChzdHIgPCBlbmQpCi0JCQkJCQkqc3RyID0gKmZtdDsKLQkJCQkJKytzdHI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLS1mbXQ7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOworCQkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBpbnQpOworCQkJfQorCisJCQlzdHIgPSBudW1iZXIoc3RyLCBlbmQsIG51bSwgc3BlYyk7CiAJCX0KLQkJaWYgKHF1YWxpZmllciA9PSAnTCcpCi0JCQludW0gPSB2YV9hcmcoYXJncywgbG9uZyBsb25nKTsKLQkJZWxzZSBpZiAocXVhbGlmaWVyID09ICdsJykgewotCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOwotCQkJaWYgKGZsYWdzICYgU0lHTikKLQkJCQludW0gPSAoc2lnbmVkIGxvbmcpIG51bTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ1onIHx8IHF1YWxpZmllciA9PSAneicpIHsKLQkJCW51bSA9IHZhX2FyZyhhcmdzLCBzaXplX3QpOwotCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAndCcpIHsKLQkJCW51bSA9IHZhX2FyZyhhcmdzLCBwdHJkaWZmX3QpOwotCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnaCcpIHsKLQkJCW51bSA9ICh1bnNpZ25lZCBzaG9ydCkgdmFfYXJnKGFyZ3MsIGludCk7Ci0JCQlpZiAoZmxhZ3MgJiBTSUdOKQotCQkJCW51bSA9IChzaWduZWQgc2hvcnQpIG51bTsKLQkJfSBlbHNlIHsKLQkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBpbnQpOwotCQkJaWYgKGZsYWdzICYgU0lHTikKLQkJCQludW0gPSAoc2lnbmVkIGludCkgbnVtOwotCQl9Ci0JCXN0ciA9IG51bWJlcihzdHIsIGVuZCwgbnVtLCBiYXNlLAotCQkJCWZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKIAl9CisKIAlpZiAoc2l6ZSA+IDApIHsKIAkJaWYgKHN0ciA8IGVuZCkKIAkJCSpzdHIgPSAnXDAnOwogCQllbHNlCiAJCQllbmRbLTFdID0gJ1wwJzsKIAl9CisKIAkvKiB0aGUgdHJhaWxpbmcgbnVsbCBieXRlIGRvZXNuJ3QgY291bnQgdG93YXJkcyB0aGUgdG90YWwgKi8KIAlyZXR1cm4gc3RyLWJ1ZjsKKwogfQogRVhQT1JUX1NZTUJPTCh2c25wcmludGYpOwogCkBAIC0xMDU4LDYgKzEyNDMsMzcyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNwcmludGYpOwogCisjaWZkZWYgQ09ORklHX0JJTkFSWV9QUklOVEYKKy8qCisgKiBicHJpbnRmIHNlcnZpY2U6CisgKiB2YmluX3ByaW50ZigpIC0gVkEgYXJndW1lbnRzIHRvIGJpbmFyeSBkYXRhCisgKiBic3RyX3ByaW50ZigpIC0gQmluYXJ5IGRhdGEgdG8gdGV4dCBzdHJpbmcKKyAqLworCisvKioKKyAqIHZiaW5fcHJpbnRmIC0gUGFyc2UgYSBmb3JtYXQgc3RyaW5nIGFuZCBwbGFjZSBhcmdzJyBiaW5hcnkgdmFsdWUgaW4gYSBidWZmZXIKKyAqIEBiaW5fYnVmOiBUaGUgYnVmZmVyIHRvIHBsYWNlIGFyZ3MnIGJpbmFyeSB2YWx1ZQorICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIoYnkgd29yZHMoMzJiaXRzKSwgbm90IGNoYXJhY3RlcnMpCisgKiBAZm10OiBUaGUgZm9ybWF0IHN0cmluZyB0byB1c2UKKyAqIEBhcmdzOiBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3RyaW5nCisgKgorICogVGhlIGZvcm1hdCBmb2xsb3dzIEM5OSB2c25wcmludGYsIGV4Y2VwdCAlbiBpcyBpZ25vcmVkLCBhbmQgaXRzIGFyZ3VtZW50CisgKiBpcyBza2lwZWQuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHdvcmRzKDMyYml0cykgd2hpY2ggd291bGQgYmUgZ2VuZXJhdGVkIGZvcgorICogdGhlIGdpdmVuIGlucHV0LgorICoKKyAqIE5PVEU6CisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBAc2l6ZSwgdGhlIHJlc3VsdGluZyBiaW5fYnVmIGlzIE5PVAorICogdmFsaWQgZm9yIGJzdHJfcHJpbnRmKCkuCisgKi8KK2ludCB2YmluX3ByaW50Zih1MzIgKmJpbl9idWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYyA9IHswfTsKKwljaGFyICpzdHIsICplbmQ7CisJaW50IHJlYWQ7CisKKwlzdHIgPSAoY2hhciAqKWJpbl9idWY7CisJZW5kID0gKGNoYXIgKikoYmluX2J1ZiArIHNpemUpOworCisjZGVmaW5lIHNhdmVfYXJnKHR5cGUpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHNpemVvZih0eXBlKSA9PSA4KSB7CQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsJCQkJXAorCQlzdHIgPSBQVFJfQUxJR04oc3RyLCBzaXplb2YodTMyKSk7CQkJXAorCQl2YWx1ZSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nIGxvbmcpOwkJXAorCQlpZiAoc3RyICsgc2l6ZW9mKHR5cGUpIDw9IGVuZCkgewkJCVwKKwkJCSoodTMyICopc3RyID0gKih1MzIgKikmdmFsdWU7CQkJXAorCQkJKih1MzIgKikoc3RyICsgNCkgPSAqKCh1MzIgKikmdmFsdWUgKyAxKTsJXAorCQl9CQkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdmFsdWU7CQkJCQlcCisJCXN0ciA9IFBUUl9BTElHTihzdHIsIHNpemVvZih0eXBlKSk7CQkJXAorCQl2YWx1ZSA9IHZhX2FyZyhhcmdzLCBpbnQpOwkJCQlcCisJCWlmIChzdHIgKyBzaXplb2YodHlwZSkgPD0gZW5kKQkJCQlcCisJCQkqKHR5cGVvZih0eXBlKSAqKXN0ciA9ICh0eXBlKXZhbHVlOwkJXAorCX0JCQkJCQkJCVwKKwlzdHIgKz0gc2l6ZW9mKHR5cGUpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKworCXdoaWxlICgqZm10KSB7CisJCXJlYWQgPSBmb3JtYXRfZGVjb2RlKGZtdCwgJnNwZWMpOworCisJCWZtdCArPSByZWFkOworCisJCXN3aXRjaCAoc3BlYy50eXBlKSB7CisJCWNhc2UgRk9STUFUX1RZUEVfTk9ORToKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfV0lEVEg6CisJCWNhc2UgRk9STUFUX1RZUEVfUFJFQ0lTSU9OOgorCQkJc2F2ZV9hcmcoaW50KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfQ0hBUjoKKwkJCXNhdmVfYXJnKGNoYXIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9TVFI6IHsKKwkJCWNvbnN0IGNoYXIgKnNhdmVfc3RyID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCQlzaXplX3QgbGVuOworCQkJaWYgKCh1bnNpZ25lZCBsb25nKXNhdmVfc3RyID4gKHVuc2lnbmVkIGxvbmcpLVBBR0VfU0laRQorCQkJCQl8fCAodW5zaWduZWQgbG9uZylzYXZlX3N0ciA8IFBBR0VfU0laRSkKKwkJCQlzYXZlX3N0ciA9ICI8TlVMTD4iOworCQkJbGVuID0gc3RybGVuKHNhdmVfc3RyKTsKKwkJCWlmIChzdHIgKyBsZW4gKyAxIDwgZW5kKQorCQkJCW1lbWNweShzdHIsIHNhdmVfc3RyLCBsZW4gKyAxKTsKKwkJCXN0ciArPSBsZW4gKyAxOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIEZPUk1BVF9UWVBFX1BUUjoKKwkJCXNhdmVfYXJnKHZvaWQgKik7CisJCQkvKiBza2lwIGFsbCBhbHBoYW51bWVyaWMgcG9pbnRlciBzdWZmaXhlcyAqLworCQkJd2hpbGUgKGlzYWxudW0oKmZtdCkpCisJCQkJZm10Kys7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjoKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfSU5WQUxJRDoKKwkJCWlmICghKmZtdCkKKwkJCQktLWZtdDsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfTlJDSEFSUzogeworCQkJLyogc2tpcCAlbiAncyBhcmd1bWVudCAqLworCQkJaW50IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOworCQkJdm9pZCAqc2tpcF9hcmc7CisJCQlpZiAocXVhbGlmaWVyID09ICdsJykKKwkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBsb25nICopOworCQkJZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJyB8fCBxdWFsaWZpZXIgPT0gJ3onKQorCQkJCXNraXBfYXJnID0gdmFfYXJnKGFyZ3MsIHNpemVfdCAqKTsKKwkJCWVsc2UKKwkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBpbnQgKik7CisJCQlicmVhazsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQlzd2l0Y2ggKHNwZWMudHlwZSkgeworCisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkdfTE9ORzoKKwkJCQlzYXZlX2FyZyhsb25nIGxvbmcpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9VTE9ORzoKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9ORzoKKwkJCQlzYXZlX2FyZyh1bnNpZ25lZCBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfU0laRV9UOgorCQkJCXNhdmVfYXJnKHNpemVfdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1BUUkRJRkY6CisJCQkJc2F2ZV9hcmcocHRyZGlmZl90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVVNIT1JUOgorCQkJY2FzZSBGT1JNQVRfVFlQRV9TSE9SVDoKKwkJCQlzYXZlX2FyZyhzaG9ydCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXNhdmVfYXJnKGludCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICh1MzIgKikoUFRSX0FMSUdOKHN0ciwgc2l6ZW9mKHUzMikpKSAtIGJpbl9idWY7CisKKyN1bmRlZiBzYXZlX2FyZworfQorRVhQT1JUX1NZTUJPTF9HUEwodmJpbl9wcmludGYpOworCisvKioKKyAqIGJzdHJfcHJpbnRmIC0gRm9ybWF0IGEgc3RyaW5nIGZyb20gYmluYXJ5IGFyZ3VtZW50cyBhbmQgcGxhY2UgaXQgaW4gYSBidWZmZXIKKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gcGxhY2UgdGhlIHJlc3VsdCBpbnRvCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsIHNwYWNlCisgKiBAZm10OiBUaGUgZm9ybWF0IHN0cmluZyB0byB1c2UKKyAqIEBiaW5fYnVmOiBCaW5hcnkgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZworICoKKyAqIFRoaXMgZnVuY3Rpb24gbGlrZSBDOTkgdnNucHJpbnRmLCBidXQgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB2c25wcmludGYgZ2V0cworICogYXJndW1lbnRzIGZyb20gc3RhY2ssIGFuZCBic3RyX3ByaW50ZiBnZXRzIGFyZ3VtZW50cyBmcm9tIEBiaW5fYnVmIHdoaWNoIGlzCisgKiBhIGJpbmFyeSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgYnkgdmJpbl9wcmludGYuCisgKgorICogVGhlIGZvcm1hdCBmb2xsb3dzIEM5OSB2c25wcmludGYsIGJ1dCBoYXMgc29tZSBleHRlbnNpb25zOgorICogJXBTIG91dHB1dCB0aGUgbmFtZSBvZiBhIHRleHQgc3ltYm9sCisgKiAlcEYgb3V0cHV0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gcG9pbnRlcgorICogJXBSIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZQorICogJW4gaXMgaWdub3JlZAorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCisgKiBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZworICogJ1wwJywgYXMgcGVyIElTTyBDOTkuIElmIHlvdSB3YW50IHRvIGhhdmUgdGhlIGV4YWN0CisgKiBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGludG8gQGJ1ZiBhcyByZXR1cm4gdmFsdWUKKyAqIChub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyAnXDAnKSwgdXNlIHZzY25wcmludGYoKS4gSWYgdGhlCisgKiByZXR1cm4gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEBzaXplLCB0aGUgcmVzdWx0aW5nCisgKiBzdHJpbmcgaXMgdHJ1bmNhdGVkLgorICovCitpbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCBjb25zdCB1MzIgKmJpbl9idWYpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG51bTsKKwljaGFyICpzdHIsICplbmQsIGM7CisJY29uc3QgY2hhciAqYXJncyA9IChjb25zdCBjaGFyICopYmluX2J1ZjsKKworCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjID0gezB9OworCisJaWYgKHVubGlrZWx5KChpbnQpIHNpemUgPCAwKSkgeworCQkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUuLiAqLworCQlzdGF0aWMgY2hhciB3YXJuID0gMTsKKwkJV0FSTl9PTih3YXJuKTsKKwkJd2FybiA9IDA7CisJCXJldHVybiAwOworCX0KKworCXN0ciA9IGJ1ZjsKKwllbmQgPSBidWYgKyBzaXplOworCisjZGVmaW5lIGdldF9hcmcodHlwZSkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdHlwZW9mKHR5cGUpIHZhbHVlOwkJCQkJCVwKKwlpZiAoc2l6ZW9mKHR5cGUpID09IDgpIHsJCQkJCVwKKwkJYXJncyA9IFBUUl9BTElHTihhcmdzLCBzaXplb2YodTMyKSk7CQkJXAorCQkqKHUzMiAqKSZ2YWx1ZSA9ICoodTMyICopYXJnczsJCQkJXAorCQkqKCh1MzIgKikmdmFsdWUgKyAxKSA9ICoodTMyICopKGFyZ3MgKyA0KTsJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCWFyZ3MgPSBQVFJfQUxJR04oYXJncywgc2l6ZW9mKHR5cGUpKTsJCQlcCisJCXZhbHVlID0gKih0eXBlb2YodHlwZSkgKilhcmdzOwkJCQlcCisJfQkJCQkJCQkJXAorCWFyZ3MgKz0gc2l6ZW9mKHR5cGUpOwkJCQkJCVwKKwl2YWx1ZTsJCQkJCQkJCVwKK30pCisKKwkvKiBNYWtlIHN1cmUgZW5kIGlzIGFsd2F5cyA+PSBidWYgKi8KKwlpZiAoZW5kIDwgYnVmKSB7CisJCWVuZCA9ICgodm9pZCAqKS0xKTsKKwkJc2l6ZSA9IGVuZCAtIGJ1ZjsKKwl9CisKKwl3aGlsZSAoKmZtdCkgeworCQlpbnQgcmVhZDsKKwkJY29uc3QgY2hhciAqb2xkX2ZtdCA9IGZtdDsKKworCQlyZWFkID0gZm9ybWF0X2RlY29kZShmbXQsICZzcGVjKTsKKworCQlmbXQgKz0gcmVhZDsKKworCQlzd2l0Y2ggKHNwZWMudHlwZSkgeworCQljYXNlIEZPUk1BVF9UWVBFX05PTkU6IHsKKwkJCWludCBjb3B5ID0gcmVhZDsKKwkJCWlmIChzdHIgPCBlbmQpIHsKKwkJCQlpZiAoY29weSA+IGVuZCAtIHN0cikKKwkJCQkJY29weSA9IGVuZCAtIHN0cjsKKwkJCQltZW1jcHkoc3RyLCBvbGRfZm10LCBjb3B5KTsKKwkJCX0KKwkJCXN0ciArPSByZWFkOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIEZPUk1BVF9UWVBFX1dJRFRIOgorCQkJc3BlYy5maWVsZF93aWR0aCA9IGdldF9hcmcoaW50KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfUFJFQ0lTSU9OOgorCQkJc3BlYy5wcmVjaXNpb24gPSBnZXRfYXJnKGludCk7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0NIQVI6CisJCQlpZiAoIShzcGVjLmZsYWdzICYgTEVGVCkpIHsKKwkJCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID4gMCkgeworCQkJCQlpZiAoc3RyIDwgZW5kKQorCQkJCQkJKnN0ciA9ICcgJzsKKwkJCQkJKytzdHI7CisJCQkJfQorCQkJfQorCQkJYyA9ICh1bnNpZ25lZCBjaGFyKSBnZXRfYXJnKGNoYXIpOworCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkqc3RyID0gYzsKKwkJCSsrc3RyOworCQkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+IDApIHsKKwkJCQlpZiAoc3RyIDwgZW5kKQorCQkJCQkqc3RyID0gJyAnOworCQkJCSsrc3RyOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9TVFI6IHsKKwkJCWNvbnN0IGNoYXIgKnN0cl9hcmcgPSBhcmdzOworCQkJc2l6ZV90IGxlbiA9IHN0cmxlbihzdHJfYXJnKTsKKwkJCWFyZ3MgKz0gbGVuICsgMTsKKwkJCXN0ciA9IHN0cmluZyhzdHIsIGVuZCwgKGNoYXIgKilzdHJfYXJnLCBzcGVjKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QVFI6CisJCQlzdHIgPSBwb2ludGVyKGZtdCsxLCBzdHIsIGVuZCwgZ2V0X2FyZyh2b2lkICopLCBzcGVjKTsKKwkJCXdoaWxlIChpc2FsbnVtKCpmbXQpKQorCQkJCWZtdCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QRVJDRU5UX0NIQVI6CisJCQlpZiAoc3RyIDwgZW5kKQorCQkJCSpzdHIgPSAnJSc7CisJCQkrK3N0cjsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfSU5WQUxJRDoKKwkJCWlmIChzdHIgPCBlbmQpCisJCQkJKnN0ciA9ICclJzsKKwkJCSsrc3RyOworCQkJaWYgKCpmbXQpIHsKKwkJCQlpZiAoc3RyIDwgZW5kKQorCQkJCQkqc3RyID0gKmZtdDsKKwkJCQkrK3N0cjsKKwkJCX0gZWxzZSB7CisJCQkJLS1mbXQ7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX05SQ0hBUlM6CisJCQkvKiBza2lwICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJc3dpdGNoIChzcGVjLnR5cGUpIHsKKworCQkJY2FzZSBGT1JNQVRfVFlQRV9MT05HX0xPTkc6CisJCQkJbnVtID0gZ2V0X2FyZyhsb25nIGxvbmcpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9VTE9ORzoKKwkJCQludW0gPSBnZXRfYXJnKHVuc2lnbmVkIGxvbmcpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9MT05HOgorCQkJCW51bSA9IGdldF9hcmcodW5zaWduZWQgbG9uZyk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1NJWkVfVDoKKwkJCQludW0gPSBnZXRfYXJnKHNpemVfdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1BUUkRJRkY6CisJCQkJbnVtID0gZ2V0X2FyZyhwdHJkaWZmX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9VU0hPUlQ6CisJCQkJbnVtID0gZ2V0X2FyZyh1bnNpZ25lZCBzaG9ydCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1NIT1JUOgorCQkJCW51bSA9IGdldF9hcmcoc2hvcnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9VSU5UOgorCQkJCW51bSA9IGdldF9hcmcodW5zaWduZWQgaW50KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbnVtID0gZ2V0X2FyZyhpbnQpOworCQkJfQorCisJCQlzdHIgPSBudW1iZXIoc3RyLCBlbmQsIG51bSwgc3BlYyk7CisJCX0KKwl9CisKKwlpZiAoc2l6ZSA+IDApIHsKKwkJaWYgKHN0ciA8IGVuZCkKKwkJCSpzdHIgPSAnXDAnOworCQllbHNlCisJCQllbmRbLTFdID0gJ1wwJzsKKwl9CisKKyN1bmRlZiBnZXRfYXJnCisKKwkvKiB0aGUgdHJhaWxpbmcgbnVsbCBieXRlIGRvZXNuJ3QgY291bnQgdG93YXJkcyB0aGUgdG90YWwgKi8KKwlyZXR1cm4gc3RyIC0gYnVmOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnN0cl9wcmludGYpOworCisvKioKKyAqIGJwcmludGYgLSBQYXJzZSBhIGZvcm1hdCBzdHJpbmcgYW5kIHBsYWNlIGFyZ3MnIGJpbmFyeSB2YWx1ZSBpbiBhIGJ1ZmZlcgorICogQGJpbl9idWY6IFRoZSBidWZmZXIgdG8gcGxhY2UgYXJncycgYmluYXJ5IHZhbHVlCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlcihieSB3b3JkcygzMmJpdHMpLCBub3QgY2hhcmFjdGVycykKKyAqIEBmbXQ6IFRoZSBmb3JtYXQgc3RyaW5nIHRvIHVzZQorICogQC4uLjogQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZworICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd29yZHModTMyKSB3cml0dGVuCisgKiBpbnRvIEBiaW5fYnVmLgorICovCitpbnQgYnByaW50Zih1MzIgKmJpbl9idWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldDsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJcmV0ID0gdmJpbl9wcmludGYoYmluX2J1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJwcmludGYpOworCisjZW5kaWYgLyogQ09ORklHX0JJTkFSWV9QUklOVEYgKi8KKwogLyoqCiAgKiB2c3NjYW5mIC0gVW5mb3JtYXQgYSBidWZmZXIgaW50byBhIGxpc3Qgb2YgYXJndW1lbnRzCiAgKiBAYnVmOglpbnB1dCBidWZmZXIKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCBmYzExOTc0Li4yZTJkMzhlIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC01MTMsNiArNTEzLDcgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF90b19wYWdlX2NhY2hlX2xydSk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogc3RydWN0IHBhZ2UgKl9fcGFnZV9jYWNoZV9hbGxvYyhnZnBfdCBnZnApCkBAIC02NDUsNiArNjQ2LDcgQEAKIAlyZXR1cm4gX193YWl0X29uX2JpdF9sb2NrKHBhZ2Vfd2FpdHF1ZXVlKHBhZ2UpLCAmd2FpdCwKIAkJCQkJc3luY19wYWdlX2tpbGxhYmxlLCBUQVNLX0tJTExBQkxFKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbG9ja19wYWdlX2tpbGxhYmxlKTsKIAogLyoqCiAgKiBfX2xvY2tfcGFnZV9ub3N5bmMgLSBnZXQgYSBsb2NrIG9uIHRoZSBwYWdlLCB3aXRob3V0IGNhbGxpbmcgc3luY19wYWdlKCkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAzZjMwMTg5Li5lMmYyNjk5IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogCWludCBuLCB2YWw7CiAJaW50IG1pbl92YWwgPSBJTlRfTUFYOwogCWludCBiZXN0X25vZGUgPSAtMTsKLQlub2RlX3RvX2NwdW1hc2tfcHRyKHRtcCwgMCk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRtcCA9IGNwdW1hc2tfb2Zfbm9kZSgwKTsKIAogCS8qIFVzZSB0aGUgbG9jYWwgbm9kZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgKi8KIAlpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSkgewpAQCAtMjE0OSw4ICsyMTQ5LDggQEAKIAkJdmFsICs9IChuIDwgbm9kZSk7CiAKIAkJLyogR2l2ZSBwcmVmZXJlbmNlIHRvIGhlYWRsZXNzIGFuZCB1bnVzZWQgbm9kZXMgKi8KLQkJbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHRtcCwgbik7Ci0JCWlmICghY3B1c19lbXB0eSgqdG1wKSkKKwkJdG1wID0gY3B1bWFza19vZl9ub2RlKG4pOworCQlpZiAoIWNwdW1hc2tfZW1wdHkodG1wKSkKIAkJCXZhbCArPSBQRU5BTFRZX0ZPUl9OT0RFX1dJVEhfQ1BVUzsKIAogCQkvKiBTbGlnaHQgcHJlZmVyZW5jZSBmb3IgbGVzcyBsb2FkZWQgbm9kZSAqLwpkaWZmIC0tZ2l0IGEvbW0vcXVpY2tsaXN0LmMgYi9tbS9xdWlja2xpc3QuYwppbmRleCA4ZGJiNjgwLi5lNjZkMDdkIDEwMDY0NAotLS0gYS9tbS9xdWlja2xpc3QuYworKysgYi9tbS9xdWlja2xpc3QuYwpAQCAtMjksNyArMjksNyBAQAogCWludCBub2RlID0gbnVtYV9ub2RlX2lkKCk7CiAJc3RydWN0IHpvbmUgKnpvbmVzID0gTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzOwogCWludCBudW1fY3B1c19vbl9ub2RlOwotCW5vZGVfdG9fY3B1bWFza19wdHIoY3B1bWFza19vbl9ub2RlLCBub2RlKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vbl9ub2RlID0gY3B1bWFza19vZl9ub2RlKG5vZGUpOwogCiAJbm9kZV9mcmVlX3BhZ2VzID0KICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAyMDgzMjNmLi40ZmMxNzYxIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xMDIsNiArMTAyLDcgQEAKICNpbmNsdWRlCTxsaW51eC9jcHUuaD4KICNpbmNsdWRlCTxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlCTxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlCTx0cmFjZS9rbWVtdHJhY2UuaD4KICNpbmNsdWRlCTxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUJPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUJPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTU2OCw2ICs1NjksMTQgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitzaXplX3Qgc2xhYl9idWZmZXJfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQoreworCXJldHVybiBjYWNoZXAtPmJ1ZmZlcl9zaXplOworfQorRVhQT1JUX1NZTUJPTChzbGFiX2J1ZmZlcl9zaXplKTsKKyNlbmRpZgorCiAvKgogICogRG8gbm90IGdvIGFib3ZlIHRoaXMgb3JkZXIgdW5sZXNzIDAgb2JqZWN0cyBmaXQgaW50byB0aGUgc2xhYi4KICAqLwpAQCAtMTE2MCw3ICsxMTY5LDcgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwogCXN0cnVjdCBrbWVtX2xpc3QzICpsMyA9IE5VTEw7CiAJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCW5vZGVfdG9fY3B1bWFza19wdHIobWFzaywgbm9kZSk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mX25vZGUobm9kZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7CiAJCXN0cnVjdCBhcnJheV9jYWNoZSAqbmM7CkBAIC0zNTU0LDEwICszNTYzLDIzIEBACiAgKi8KIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwl2b2lkICpyZXQgPSBfX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisKKwlrbWVtdHJhY2VfbWFya19hbGxvYyhLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIHJldCwKKwkJCSAgICAgb2JqX3NpemUoY2FjaGVwKSwgY2FjaGVwLT5idWZmZXJfc2l6ZSwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CiAKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCit2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKTsKKyNlbmRpZgorCiAvKioKICAqIGttZW1fcHRyX3ZhbGlkYXRlIC0gY2hlY2sgaWYgYW4gdW50cnVzdGVkIHBvaW50ZXIgbWlnaHQgYmUgYSBzbGFiIGVudHJ5LgogICogQGNhY2hlcDogdGhlIGNhY2hlIHdlJ3JlIGNoZWNraW5nIGFnYWluc3QKQEAgLTM2MDIsMjMgKzM2MjQsNDcgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzLCBpbnQgbm9kZWlkKQogewotCXJldHVybiBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkLAotCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwl2b2lkICpyZXQgPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkLAorCQkJCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIHJldCwKKwkJCQkgIG9ial9zaXplKGNhY2hlcCksIGNhY2hlcC0+YnVmZmVyX3NpemUsCisJCQkJICBmbGFncywgbm9kZWlkKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZSk7CiAKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCit2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAorCQkJCSAgICBnZnBfdCBmbGFncywKKwkJCQkgICAgaW50IG5vZGVpZCkKK3sKKwlyZXR1cm4gX19jYWNoZV9hbGxvY19ub2RlKGNhY2hlcCwgZmxhZ3MsIG5vZGVpZCwKKwkJCQkgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKTsKKyNlbmRpZgorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgogX19kb19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJdm9pZCAqcmV0OwogCiAJY2FjaGVwID0ga21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihjYWNoZXApKSkKIAkJcmV0dXJuIGNhY2hlcDsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlcCwgZmxhZ3MsIG5vZGUpOworCXJldCA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKGNhY2hlcCwgZmxhZ3MsIG5vZGUpOworCisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcpIGNhbGxlciwgcmV0LAorCQkJCSAgc2l6ZSwgY2FjaGVwLT5idWZmZXJfc2l6ZSwgZmxhZ3MsIG5vZGUpOworCisJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19ERUJVR19TTEFCCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfS01FTVRSQUNFKQogdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlyZXR1cm4gX19kb19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUsCkBAIC0zNjUxLDYgKzM2OTcsNyBAQAogCQkJCQkgIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOworCXZvaWQgKnJldDsKIAogCS8qIElmIHlvdSB3YW50IHRvIHNhdmUgYSBmZXcgYnl0ZXMgLnRleHQgc3BhY2U6IHJlcGxhY2UKIAkgKiBfXyB3aXRoIGttZW1fLgpAQCAtMzY2MCwxMSArMzcwNywxNyBAQAogCWNhY2hlcCA9IF9fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIoY2FjaGVwKSkpCiAJCXJldHVybiBjYWNoZXA7Ci0JcmV0dXJuIF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgY2FsbGVyKTsKKwlyZXQgPSBfX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MsIGNhbGxlcik7CisKKwlrbWVtdHJhY2VfbWFya19hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJICAgICAodW5zaWduZWQgbG9uZykgY2FsbGVyLCByZXQsCisJCQkgICAgIHNpemUsIGNhY2hlcC0+YnVmZmVyX3NpemUsIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIAotI2lmZGVmIENPTkZJR19ERUJVR19TTEFCCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfS01FTVRSQUNFKQogdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlyZXR1cm4gX19kb19rbWFsbG9jKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwpAQCAtMzcwMyw2ICszNzU2LDggQEAKIAkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9ianAsIG9ial9zaXplKGNhY2hlcCkpOwogCV9fY2FjaGVfZnJlZShjYWNoZXAsIG9ianApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWttZW10cmFjZV9tYXJrX2ZyZWUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsIF9SRVRfSVBfLCBvYmpwKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTsKIApAQCAtMzcyOSw2ICszNzg0LDggQEAKIAlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqcCwgb2JqX3NpemUoYykpOwogCV9fY2FjaGVfZnJlZShjLCAodm9pZCAqKW9ianApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWttZW10cmFjZV9tYXJrX2ZyZWUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIG9ianApOwogfQogRVhQT1JUX1NZTUJPTChrZnJlZSk7CiAKZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCA3YTM0MTE1Li40ZGQ2NTE2IDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKgpAQCAtNDc0LDYgKzQ3NSw3IEBACiB7CiAJdW5zaWduZWQgaW50ICptOwogCWludCBhbGlnbiA9IG1heChBUkNIX0tNQUxMT0NfTUlOQUxJR04sIEFSQ0hfU0xBQl9NSU5BTElHTik7CisJdm9pZCAqcmV0OwogCiAJbG9ja2RlcF90cmFjZV9hbGxvYyhnZnApOwogCkBAIC00ODIsMTIgKzQ4NCwxNyBAQAogCQkJcmV0dXJuIFpFUk9fU0laRV9QVFI7CiAKIAkJbSA9IHNsb2JfYWxsb2Moc2l6ZSArIGFsaWduLCBnZnAsIGFsaWduLCBub2RlKTsKKwogCQlpZiAoIW0pCiAJCQlyZXR1cm4gTlVMTDsKIAkJKm0gPSBzaXplOwotCQlyZXR1cm4gKHZvaWQgKiltICsgYWxpZ247CisJCXJldCA9ICh2b2lkICopbSArIGFsaWduOworCisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywKKwkJCQkJICBfUkVUX0lQXywgcmV0LAorCQkJCQkgIHNpemUsIHNpemUgKyBhbGlnbiwgZ2ZwLCBub2RlKTsKIAl9IGVsc2UgewotCQl2b2lkICpyZXQ7CisJCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAogCQlyZXQgPSBzbG9iX25ld19wYWdlcyhnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOwogCQlpZiAocmV0KSB7CkBAIC00OTUsOCArNTAyLDEzIEBACiAJCQlwYWdlID0gdmlydF90b19wYWdlKHJldCk7CiAJCQlwYWdlLT5wcml2YXRlID0gc2l6ZTsKIAkJfQotCQlyZXR1cm4gcmV0OworCisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywKKwkJCQkJICBfUkVUX0lQXywgcmV0LAorCQkJCQkgIHNpemUsIFBBR0VfU0laRSA8PCBvcmRlciwgZ2ZwLCBub2RlKTsKIAl9CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9kZSk7CiAKQEAgLTUxNCw2ICs1MjYsOCBAQAogCQlzbG9iX2ZyZWUobSwgKm0gKyBhbGlnbik7CiAJfSBlbHNlCiAJCXB1dF9wYWdlKCZzcC0+cGFnZSk7CisKKwlrbWVtdHJhY2VfbWFya19mcmVlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIF9SRVRfSVBfLCBibG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKIApAQCAtNTgzLDEwICs1OTcsMTkgQEAKIHsKIAl2b2lkICpiOwogCi0JaWYgKGMtPnNpemUgPCBQQUdFX1NJWkUpCisJaWYgKGMtPnNpemUgPCBQQUdFX1NJWkUpIHsKIAkJYiA9IHNsb2JfYWxsb2MoYy0+c2l6ZSwgZmxhZ3MsIGMtPmFsaWduLCBub2RlKTsKLQllbHNlCisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsCisJCQkJCSAgX1JFVF9JUF8sIGIsIGMtPnNpemUsCisJCQkJCSAgU0xPQl9VTklUUyhjLT5zaXplKSAqIFNMT0JfVU5JVCwKKwkJCQkJICBmbGFncywgbm9kZSk7CisJfSBlbHNlIHsKIAkJYiA9IHNsb2JfbmV3X3BhZ2VzKGZsYWdzLCBnZXRfb3JkZXIoYy0+c2l6ZSksIG5vZGUpOworCQlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLAorCQkJCQkgIF9SRVRfSVBfLCBiLCBjLT5zaXplLAorCQkJCQkgIFBBR0VfU0laRSA8PCBnZXRfb3JkZXIoYy0+c2l6ZSksCisJCQkJCSAgZmxhZ3MsIG5vZGUpOworCX0KIAogCWlmIChjLT5jdG9yKQogCQljLT5jdG9yKGIpOwpAQCAtNjIyLDYgKzY0NSw4IEBACiAJfSBlbHNlIHsKIAkJX19rbWVtX2NhY2hlX2ZyZWUoYiwgYy0+c2l6ZSk7CiAJfQorCisJa21lbXRyYWNlX21hcmtfZnJlZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIGIpOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwogCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggYzRlYTkxNS4uN2FhYTEyMSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KQEAgLTE2MTgsMTggKzE2MTksNDYgQEAKIAogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7Ci0JcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBfUkVUX0lQXyk7CisJdm9pZCAqcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIF9SRVRfSVBfKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgcmV0LAorCQkJICAgICBzLT5vYmpzaXplLCBzLT5zaXplLCBnZnBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpCit7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBfUkVUX0lQXyk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZSk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSkKIHsKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgX1JFVF9JUF8pOworCXZvaWQgKnJldCA9IHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIF9SRVRfSVBfKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsIF9SRVRfSVBfLCByZXQsCisJCQkJICBzLT5vYmpzaXplLCBzLT5zaXplLCBnZnBmbGFncywgbm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vZGUpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCit2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKKwkJCQkgICAgZ2ZwX3QgZ2ZwZmxhZ3MsCisJCQkJICAgIGludCBub2RlKQoreworCXJldHVybiBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBfUkVUX0lQXyk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKTsKKyNlbmRpZgorCiAvKgogICogU2xvdyBwYXRjaCBoYW5kbGluZy4gVGhpcyBtYXkgc3RpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgc2luY2Ugb2JqZWN0cwogICogaGF2ZSBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBjcHUgc2xhYnMgaW4gbW9zdCBwcm9jZXNzaW5nIGxvYWRzLgpAQCAtMTczNyw2ICsxNzY2LDggQEAKIAlwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoeCk7CiAKIAlzbGFiX2ZyZWUocywgcGFnZSwgeCwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfZnJlZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIHgpOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwogCkBAIC0yNjU5LDYgKzI2OTAsNyBAQAogdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKKwl2b2lkICpyZXQ7CiAKIAlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBmbGFncyk7CkBAIC0yNjY4LDcgKzI3MDAsMTIgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0dXJuIHNsYWJfYWxsb2MocywgZmxhZ3MsIC0xLCBfUkVUX0lQXyk7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBmbGFncywgLTEsIF9SRVRfSVBfKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIF9SRVRfSVBfLCByZXQsCisJCQkgICAgIHNpemUsIHMtPnNpemUsIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvYyk7CiAKQEAgLTI2ODcsMTYgKzI3MjQsMzAgQEAKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CisJdm9pZCAqcmV0OwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKLQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CisJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkgeworCQlyZXQgPSBrbWFsbG9jX2xhcmdlX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOworCisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywKKwkJCQkJICBfUkVUX0lQXywgcmV0LAorCQkJCQkgIHNpemUsIFBBR0VfU0laRSA8PCBnZXRfb3JkZXIoc2l6ZSksCisJCQkJCSAgZmxhZ3MsIG5vZGUpOworCisJCXJldHVybiByZXQ7CisJfQogCiAJcyA9IGdldF9zbGFiKHNpemUsIGZsYWdzKTsKIAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBmbGFncywgbm9kZSwgX1JFVF9JUF8pOworCXJldCA9IHNsYWJfYWxsb2MocywgZmxhZ3MsIG5vZGUsIF9SRVRfSVBfKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIHJldCwKKwkJCQkgIHNpemUsIHMtPnNpemUsIGZsYWdzLCBub2RlKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvY19ub2RlKTsKICNlbmRpZgpAQCAtMjc1NSw2ICsyODA2LDggQEAKIAkJcmV0dXJuOwogCX0KIAlzbGFiX2ZyZWUocGFnZS0+c2xhYiwgcGFnZSwgb2JqZWN0LCBfUkVUX0lQXyk7CisKKwlrbWVtdHJhY2VfbWFya19mcmVlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIF9SRVRfSVBfLCB4KTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwogCkBAIC0zMjI0LDYgKzMyNzcsNyBAQAogdm9pZCAqX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsIHVuc2lnbmVkIGxvbmcgY2FsbGVyKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOworCXZvaWQgKnJldDsKIAogCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGdmcGZsYWdzKTsKQEAgLTMyMzMsMTMgKzMyODcsMjAgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBjYWxsZXIpOworCXJldCA9IHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBjYWxsZXIpOworCisJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIGNhbGxlciwgcmV0LCBzaXplLAorCQkJICAgICBzLT5zaXplLCBnZnBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkICpfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzLAogCQkJCQlpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyBjYWxsZXIpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CisJdm9pZCAqcmV0OwogCiAJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBnZnBmbGFncywgbm9kZSk7CkBAIC0zMjQ5LDcgKzMzMTAsMTMgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGNhbGxlcik7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgY2FsbGVyKTsKKworCS8qIEhvbm9yIHRoZSBjYWxsIHNpdGUgcG9pbnRlciB3ZSByZWNpZXZlZC4gKi8KKwlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIGNhbGxlciwgcmV0LAorCQkJCSAgc2l6ZSwgcy0+c2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOworCisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQyNTI0NDkuLjM5ZmRmYjEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xOTY3LDcgKzE5NjcsNyBAQAogCXN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGUgPSB7CiAJCS5yZWNsYWltZWRfc2xhYiA9IDAsCiAJfTsKLQlub2RlX3RvX2NwdW1hc2tfcHRyKGNwdW1hc2ssIHBnZGF0LT5ub2RlX2lkKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzayA9IGNwdW1hc2tfb2Zfbm9kZShwZ2RhdC0+bm9kZV9pZCk7CiAKIAlsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoR0ZQX0tFUk5FTCk7CiAKQEAgLTIyMDQsNyArMjIwNCw5IEBACiAJaWYgKGFjdGlvbiA9PSBDUFVfT05MSU5FIHx8IGFjdGlvbiA9PSBDUFVfT05MSU5FX0ZST1pFTikgewogCQlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9ISUdIX01FTU9SWSkgewogCQkJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwotCQkJbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBwZ2RhdC0+bm9kZV9pZCk7CisJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzazsKKworCQkJbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShwZ2RhdC0+bm9kZV9pZCk7CiAKIAkJCWlmIChjcHVtYXNrX2FueV9hbmQoY3B1X29ubGluZV9tYXNrLCBtYXNrKSA8IG5yX2NwdV9pZHMpCiAJCQkJLyogT25lIG9mIG91ciBDUFVzIG9ubGluZTogcmVzdG9yZSBtYXNrICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCA5ZjJmMjQxLi45YjQ5YTZhYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0zMTcsOCArMzE3LDcgQEAKIAl9CiAJY2FzZSBTVkNfUE9PTF9QRVJOT0RFOgogCXsKLQkJbm9kZV90b19jcHVtYXNrX3B0cihub2RlY3B1bWFzaywgbm9kZSk7Ci0JCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRhc2ssIG5vZGVjcHVtYXNrKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIodGFzaywgY3B1bWFza19vZl9ub2RlKG5vZGUpKTsKIAkJYnJlYWs7CiAJfQogCX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHAtc2FtcGxlcy10cmFjZS5oIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKaW5kZXggMDE3MjRlMC4uZGZmZGM0OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKQEAgLTUsOSArNSw5IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKHN1YnN5c19ldmVudCwKLQlUUFBST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSwKLQlUUEFSR1MoaW5vZGUsIGZpbGUpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSksCisJVFBfQVJHUyhpbm9kZSwgZmlsZSkpOwogREVDTEFSRV9UUkFDRShzdWJzeXNfZXZlbnRiLAotCVRQUFJPVE8odm9pZCksCi0JVFBBUkdTKCkpOworCVRQX1BST1RPKHZvaWQpLAorCVRQX0FSR1MoKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwppbmRleCA2OGQ1ZGMwLi45Y2Y4MGExIDEwMDY0NAotLS0gYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogdHJhY2Vwb2ludC1zYW1wbGUuYwogICoKLSAqIEV4ZWN1dGVzIGEgdHJhY2Vwb2ludCB3aGVuIC9wcm9jL3RyYWNlcG9pbnQtZXhhbXBsZSBpcyBvcGVuZWQuCisgKiBFeGVjdXRlcyBhIHRyYWNlcG9pbnQgd2hlbiAvcHJvYy90cmFjZXBvaW50LXNhbXBsZSBpcyBvcGVuZWQuCiAgKgogICogKEMpIENvcHlyaWdodCAyMDA3IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgogICoKQEAgLTE2LDcgKzE2LDcgQEAKIERFRklORV9UUkFDRShzdWJzeXNfZXZlbnQpOwogREVGSU5FX1RSQUNFKHN1YnN5c19ldmVudGIpOwogCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlbnRyeV9leGFtcGxlOworc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZW50cnlfc2FtcGxlOwogCiBzdGF0aWMgaW50IG15X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0zMiwyNSArMzIsMjUgQEAKIAkub3BlbiA9IG15X29wZW4sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhbXBsZV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgImV4YW1wbGUgaW5pdFxuIik7Ci0JcGVudHJ5X2V4YW1wbGUgPSBwcm9jX2NyZWF0ZSgidHJhY2Vwb2ludC1leGFtcGxlIiwgMDQ0NCwgTlVMTCwKKwlwcmludGsoS0VSTl9BTEVSVCAic2FtcGxlIGluaXRcbiIpOworCXBlbnRyeV9zYW1wbGUgPSBwcm9jX2NyZWF0ZSgidHJhY2Vwb2ludC1zYW1wbGUiLCAwNDQ0LCBOVUxMLAogCQkmbWFya19vcHMpOwotCWlmICghcGVudHJ5X2V4YW1wbGUpCisJaWYgKCFwZW50cnlfc2FtcGxlKQogCQlyZXR1cm4gLUVQRVJNOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhhbXBsZV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2FtcGxlX2V4aXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9BTEVSVCAiZXhhbXBsZSBleGl0XG4iKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgidHJhY2Vwb2ludC1leGFtcGxlIiwgTlVMTCk7CisJcHJpbnRrKEtFUk5fQUxFUlQgInNhbXBsZSBleGl0XG4iKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidHJhY2Vwb2ludC1zYW1wbGUiLCBOVUxMKTsKIH0KIAotbW9kdWxlX2luaXQoZXhhbXBsZV9pbml0KQotbW9kdWxlX2V4aXQoZXhhbXBsZV9leGl0KQorbW9kdWxlX2luaXQoc2FtcGxlX2luaXQpCittb2R1bGVfZXhpdChzYW1wbGVfZXhpdCkKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWF0aGlldSBEZXNub3llcnMiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVHJhY2Vwb2ludCBleGFtcGxlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRyYWNlcG9pbnQgc2FtcGxlIik7CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAppbmRleCBjN2RlOGIzLi4zOWE5NjQyIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKQEAgLTExMiwxMyArMTEyLDEzIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIERlZmF1bHQgaXMgYnVpbHQtaW4sIHVubGVzcyB3ZSBrbm93IG90aGVyd2lzZQotbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfS0VSTkVMKQorbW9ka2Vybl9jZmxhZ3MgPSAkKGlmICQocGFydC1vZi1tb2R1bGUpLCAkKENGTEFHU19NT0RVTEUpLCAkKENGTEFHU19LRVJORUwpKQogcXVpZXRfbW9kdGFnIDo9ICQoZW1wdHkpICAgJChlbXB0eSkKIAotJChyZWFsLW9ianMtbSkgICAgICAgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0uaSkgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0ucykgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0ubHN0KTogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQorJChyZWFsLW9ianMtbSkgICAgICAgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0uaSkgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0ucykgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0ubHN0KTogcGFydC1vZi1tb2R1bGUgOj0geQogCiAkKHJlYWwtb2Jqcy1tKSAgICAgICAgOiBxdWlldF9tb2R0YWcgOj0gW01dCiAkKHJlYWwtb2Jqcy1tOi5vPS5pKSAgOiBxdWlldF9tb2R0YWcgOj0gW01dCkBAIC0yMDUsNyArMjA1LDggQEAKIGlmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAogY21kX3JlY29yZF9tY291bnQgPSBwZXJsICQoc3JjdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgIiQoQVJDSCkiIFwKIAkiJChpZiAkKENPTkZJR182NEJJVCksNjQsMzIpIiBcCi0JIiQoT0JKRFVNUCkiICIkKE9CSkNPUFkpIiAiJChDQykiICIkKExEKSIgIiQoTk0pIiAiJChSTSkiICIkKE1WKSIgIiQoQCkiOworCSIkKE9CSkRVTVApIiAiJChPQkpDT1BZKSIgIiQoQ0MpIiAiJChMRCkiICIkKE5NKSIgIiQoUk0pIiAiJChNVikiIFwKKwkiJChpZiAkKHBhcnQtb2YtbW9kdWxlKSwxLDApIiAiJChAKSI7CiBlbmRpZgogCiBkZWZpbmUgcnVsZV9jY19vX2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2FsbHN5bXMuYyBiL3NjcmlwdHMva2FsbHN5bXMuYwppbmRleCBhZDI0MzRiLi42NjU0Y2JlZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rYWxsc3ltcy5jCisrKyBiL3NjcmlwdHMva2FsbHN5bXMuYwpAQCAtNTAwLDYgKzUwMCw1MSBAQAogCW9wdGltaXplX3Jlc3VsdCgpOwogfQogCisvKiBndWVzcyBmb3IgImxpbmtlciBzY3JpcHQgcHJvdmlkZSIgc3ltYm9sICovCitzdGF0aWMgaW50IG1heV9iZV9saW5rZXJfc2NyaXB0X3Byb3ZpZGVfc3ltYm9sKGNvbnN0IHN0cnVjdCBzeW1fZW50cnkgKnNlKQoreworCWNvbnN0IGNoYXIgKnN5bWJvbCA9IChjaGFyICopc2UtPnN5bSArIDE7CisJaW50IGxlbiA9IHNlLT5sZW4gLSAxOworCisJaWYgKGxlbiA8IDgpCisJCXJldHVybiAwOworCisJaWYgKHN5bWJvbFswXSAhPSAnXycgfHwgc3ltYm9sWzFdICE9ICdfJykKKwkJcmV0dXJuIDA7CisKKwkvKiBfX3N0YXJ0X1hYWFhYICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgMiwgInN0YXJ0XyIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fc3RvcF9YWFhYWCAqLworCWlmICghbWVtY21wKHN5bWJvbCArIDIsICJzdG9wXyIsIDUpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fZW5kX1hYWFhYICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgMiwgImVuZF8iLCA0KSkKKwkJcmV0dXJuIDE7CisKKwkvKiBfX1hYWFhYX3N0YXJ0ICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgbGVuIC0gNiwgIl9zdGFydCIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fWFhYWFhfZW5kICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgbGVuIC0gNCwgIl9lbmQiLCA0KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmVmaXhfdW5kZXJzY29yZXNfY291bnQoY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBzdHI7CisKKwl3aGlsZSAoKnRhaWwgIT0gJ18nKQorCQl0YWlsKys7CisKKwlyZXR1cm4gdGFpbCAtIHN0cjsKK30KKwogc3RhdGljIGludCBjb21wYXJlX3N5bWJvbHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAljb25zdCBzdHJ1Y3Qgc3ltX2VudHJ5ICpzYTsKQEAgLTUyMSw2ICs1NjYsMTggQEAKIAlpZiAod2EgIT0gd2IpCiAJCXJldHVybiB3YSAtIHdiOwogCisJLyogc29ydCBieSAibGlua2VyIHNjcmlwdCBwcm92aWRlIiB0eXBlICovCisJd2EgPSBtYXlfYmVfbGlua2VyX3NjcmlwdF9wcm92aWRlX3N5bWJvbChzYSk7CisJd2IgPSBtYXlfYmVfbGlua2VyX3NjcmlwdF9wcm92aWRlX3N5bWJvbChzYik7CisJaWYgKHdhICE9IHdiKQorCQlyZXR1cm4gd2EgLSB3YjsKKworCS8qIHNvcnQgYnkgdGhlIG51bWJlciBvZiBwcmVmaXggdW5kZXJzY29yZXMgKi8KKwl3YSA9IHByZWZpeF91bmRlcnNjb3Jlc19jb3VudCgoY29uc3QgY2hhciAqKXNhLT5zeW0gKyAxKTsKKwl3YiA9IHByZWZpeF91bmRlcnNjb3Jlc19jb3VudCgoY29uc3QgY2hhciAqKXNiLT5zeW0gKyAxKTsKKwlpZiAod2EgIT0gd2IpCisJCXJldHVybiB3YSAtIHdiOworCiAJLyogc29ydCBieSBpbml0aWFsIG9yZGVyLCBzbyB0aGF0IG90aGVyIHN5bWJvbHMgYXJlIGxlZnQgdW5kaXN0dXJiZWQgKi8KIAlyZXR1cm4gc2EtPnN0YXJ0X3BvcyAtIHNiLT5zdGFydF9wb3M7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggN2U2MjMwMy4uOGNjNzA2MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMTYwNywxMiArMTYwNywxMiBAQAogCiAJcGFyc2VfZWxmX2ZpbmlzaCgmaW5mbyk7CiAKLQkvKiBPdXIgdHJpY2sgdG8gZ2V0IHZlcnNpb25pbmcgZm9yIHN0cnVjdF9tb2R1bGUgLSBpdCdzCisJLyogT3VyIHRyaWNrIHRvIGdldCB2ZXJzaW9uaW5nIGZvciBtb2R1bGUgc3RydWN0IGV0Yy4gLSBpdCdzCiAJICogbmV2ZXIgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbwogCSAqIHRoZSBhdXRvbWF0aWMgdmVyc2lvbmluZyBkb2Vzbid0IHBpY2sgaXQgdXAsIGJ1dCBpdCdzIHJlYWxseQogCSAqIGltcG9ydGFudCBhbnlob3cgKi8KIAlpZiAobW9kdmVyc2lvbnMpCi0JCW1vZC0+dW5yZXMgPSBhbGxvY19zeW1ib2woInN0cnVjdF9tb2R1bGUiLCAwLCBtb2QtPnVucmVzKTsKKwkJbW9kLT51bnJlcyA9IGFsbG9jX3N5bWJvbCgibW9kdWxlX2xheW91dCIsIDAsIG1vZC0+dW5yZXMpOwogfQogCiAjZGVmaW5lIFNaIDUwMApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCBmZTgzMTQxLi40MDk1OTZlIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMTAwLDE0ICsxMDAsMTkgQEAKIAogbXkgJFYgPSAnMC4xJzsKIAotaWYgKCQjQVJHViA8IDYpIHsKLQlwcmludCAidXNhZ2U6ICRQIGFyY2ggb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlucHV0ZmlsZVxuIjsKK2lmICgkI0FSR1YgPCA3KSB7CisJcHJpbnQgInVzYWdlOiAkUCBhcmNoIGJpdHMgb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlzX21vZHVsZSBpbnB1dGZpbGVcbiI7CiAJcHJpbnQgInZlcnNpb246ICRWXG4iOwogCWV4aXQoMSk7CiB9CiAKIG15ICgkYXJjaCwgJGJpdHMsICRvYmpkdW1wLCAkb2JqY29weSwgJGNjLAotICAgICRsZCwgJG5tLCAkcm0sICRtdiwgJGlucHV0ZmlsZSkgPSBAQVJHVjsKKyAgICAkbGQsICRubSwgJHJtLCAkbXYsICRpc19tb2R1bGUsICRpbnB1dGZpbGUpID0gQEFSR1Y7CisKKyMgVGhpcyBmaWxlIHJlZmVycyB0byBtY291bnQgYW5kIHNob3VsZG4ndCBiZSBmdHJhY2VkLCBzbyBsZXRzJyBpZ25vcmUgaXQKK2lmICgkaW5wdXRmaWxlIGVxICJrZXJuZWwvdHJhY2UvZnRyYWNlLm8iKSB7CisgICAgZXhpdCgwKTsKK30KIAogIyBBY2NlcHRhYmxlIHNlY3Rpb25zIHRvIHJlY29yZC4KIG15ICV0ZXh0X3NlY3Rpb25zID0gKApAQCAtMjAxLDYgKzIwNiwxMyBAQAogICAgICRhbGlnbm1lbnQgPSAyOwogICAgICRzZWN0aW9uX3R5cGUgPSAnJXByb2diaXRzJzsKIAorfSBlbHNpZiAoJGFyY2ggZXEgImlhNjQiKSB7CisgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzX21jb3VudFwkIjsKKyAgICAkdHlwZSA9ICJkYXRhOCI7CisKKyAgICBpZiAoJGlzX21vZHVsZSBlcSAiMCIpIHsKKyAgICAgICAgJGNjIC49ICIgLW1jb25zdGFudC1ncCI7CisgICAgfQogfSBlbHNlIHsKICAgICBkaWUgIkFyY2ggJGFyY2ggaXMgbm90IHN1cHBvcnRlZCB3aXRoIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRCI7CiB9CkBAIC0yNjMsNyArMjc1LDYgQEAKIAkiXHREaXNhYmxpbmcgbG9jYWwgZnVuY3Rpb24gcmVmZXJlbmNlcy5cbiI7CiB9CiAKLQogIwogIyBTdGVwIDE6IGZpbmQgYWxsIHRoZSBsb2NhbCAoc3RhdGljIGZ1bmN0aW9ucykgYW5kIHdlYWsgc3ltYm9scy4KICMgICAgICAgICd0JyBpcyBsb2NhbCwgJ3cvVycgaXMgd2VhayAod2UgbmV2ZXIgdXNlIGEgd2VhayBmdW5jdGlvbikKQEAgLTMzMSwxMyArMzQyLDE2IEBACiAjCiAjIFN0ZXAgMjogZmluZCB0aGUgc2VjdGlvbnMgYW5kIG1jb3VudCBjYWxsIHNpdGVzCiAjCi1vcGVuKElOLCAiJG9iamR1bXAgLWRyICRpbnB1dGZpbGV8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpkdW1wIjsKK29wZW4oSU4sICIkb2JqZHVtcCAtaGRyICRpbnB1dGZpbGV8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpkdW1wIjsKIAogbXkgJHRleHQ7CiAKK215ICRyZWFkX2hlYWRlcnMgPSAxOworCiB3aGlsZSAoPElOPikgewogICAgICMgaXMgaXQgYSBzZWN0aW9uPwogICAgIGlmICgvJHNlY3Rpb25fcmVnZXgvKSB7CisJJHJlYWRfaGVhZGVycyA9IDA7CiAKIAkjIE9ubHkgcmVjb3JkIHRleHQgc2VjdGlvbnMgdGhhdCB3ZSBrbm93IGFyZSBzYWZlCiAJaWYgKGRlZmluZWQoJHRleHRfc2VjdGlvbnN7JDF9KSkgewpAQCAtMzcxLDYgKzM4NSwxOSBAQAogCQkkcmVmX2Z1bmMgPSAkdGV4dDsKIAkgICAgfQogCX0KKyAgICB9IGVsc2lmICgkcmVhZF9oZWFkZXJzICYmIC8kbWNvdW50X3NlY3Rpb24vKSB7CisJIworCSMgU29tZWhvdyB0aGUgbWFrZSBwcm9jZXNzIGNhbiBleGVjdXRlIHRoaXMgc2NyaXB0IG9uIGFuCisJIyBvYmplY3QgdHdpY2UuIElmIGl0IGRvZXMsIHdlIHdvdWxkIGR1cGxpY2F0ZSB0aGUgbWNvdW50CisJIyBzZWN0aW9uIGFuZCBpdCB3aWxsIGNhdXNlIHRoZSBmdW5jdGlvbiB0cmFjZXIgc2VsZiB0ZXN0CisJIyB0byBmYWlsLiBDaGVjayBpZiB0aGUgbWNvdW50IHNlY3Rpb24gZXhpc3RzLCBhbmQgaWYgaXQgZG9lcywKKwkjIHdhcm4gYW5kIGV4aXQuCisJIworCXByaW50IFNUREVSUiAiRVJST1I6ICRtY291bnRfc2VjdGlvbiBhbHJlYWR5IGluICRpbnB1dGZpbGVcbiIgLgorCSAgICAiXHRUaGlzIG1heSBiZSBhbiBpbmRpY2F0aW9uIHRoYXQgeW91ciBidWlsZCBpcyBjb3JydXB0ZWQuXG4iIC4KKwkgICAgIlx0RGVsZXRlICRpbnB1dGZpbGUgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhlIHNhbWUgb2JqZWN0IGZpbGVcbiIgLgorCSAgICAiXHRzdGlsbCBjYXVzZXMgYW4gaXNzdWUsIHRoZW4gZGlzYWJsZSBDT05GSUdfRFlOQU1JQ19GVFJBQ0UuXG4iOworCWV4aXQoLTEpOwogICAgIH0KIAogICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKZGlmZiAtLWdpdCBhL3Vzci9LY29uZmlnIGIvdXNyL0tjb25maWcKaW5kZXggNTg4YzU4OC4uMWMzMDM5ZiAxMDA2NDQKLS0tIGEvdXNyL0tjb25maWcKKysrIGIvdXNyL0tjb25maWcKQEAgLTcyLDEwICs3Miw4IEBACiAJICBTdXBwb3J0IGxvYWRpbmcgb2YgYSBMWk1BIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1pZiBJTklUUkFNRlNfU09VUkNFIT0iIgotCiBjaG9pY2UKLQlwcm9tcHQgIkJ1aWx0LWluIGluaXRyYW1mcyBjb21wcmVzc2lvbiBtb2RlIgorCXByb21wdCAiQnVpbHQtaW4gaW5pdHJhbWZzIGNvbXByZXNzaW9uIG1vZGUiIGlmIElOSVRSQU1GU19TT1VSQ0UhPSIiCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZGVjaWRlcyBieSB3aGljaCBhbGdvcml0aG0gdGhlIGJ1aWx0aW4gaW5pdHJhbWZzCiAJICB3aWxsIGJlIGNvbXByZXNzZWQuICBTZXZlcmFsIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYXJlCkBAIC0xMzQsMTQgKzEzMiwzIEBACiAJICBzbWFsbGVyIHdpdGggTFpNQSBpbiBjb21wYXJpc29uIHRvIGd6aXAuCiAKIGVuZGNob2ljZQotCi1lbmRpZgotCi1pZiBJTklUUkFNRlNfU09VUkNFPSIiCi0jIFRoZSBidWlsdGluIGluaXRyYW1mcyBpcyBzbyBzbWFsbCBzbyB3ZSBkb24ndCB3YW50IHRvIGJ1ZyB0aGUgdXNlci4uLgotCi1jb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkUKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWVuZGlmCmRpZmYgLS1naXQgYS91c3IvTWFrZWZpbGUgYi91c3IvTWFrZWZpbGUKaW5kZXggYjg0ODk0Yi4uMjQ1MTQ1YSAxMDA2NDQKLS0tIGEvdXNyL01ha2VmaWxlCisrKyBiL3Vzci9NYWtlZmlsZQpAQCAtNiw5ICs2LDYgQEAKIFBIT05ZICs9IGtsaWJjZGlycwogCiAKLSMgTm8gY29tcHJlc3Npb24KLXN1ZmZpeF8kKENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORSkgICA9Ci0KICMgR3ppcCwgYnV0IG5vIGJ6aXAyCiBzdWZmaXhfJChDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVApICAgPSAuZ3oKIAo=